ZGlmZiAtLWdpdCBhLy5naXRodWIvZGVwZW5kYWJvdC55bWwgYi8uZ2l0aHViL2RlcGVuZGFib3QueW1sCmluZGV4IGQ0NjVlYzcuLjNjODIxYTggMTAwNjQ0Ci0tLSBhLy5naXRodWIvZGVwZW5kYWJvdC55bWwKKysrIGIvLmdpdGh1Yi9kZXBlbmRhYm90LnltbApAQCAtMyw4MCArMyw4NCBAQAogICAtIHBhY2thZ2UtZWNvc3lzdGVtOiAibnVnZXQiCiAgICAgZGlyZWN0b3J5OiAiL2dyZW1saW4tZG90bmV0IgogICAgIHNjaGVkdWxlOgotICAgICAgaW50ZXJ2YWw6ICJkYWlseSIKLSAgICB0YXJnZXQtYnJhbmNoOiAiMy41LWRldiIKKyAgICAgIGludGVydmFsOiAibW9udGhseSIKKyAgICB0YXJnZXQtYnJhbmNoOiAibWFzdGVyIgogICAgIGxhYmVsczoKICAgICAgIC0gIi5ORVQiCiAgICAgICAtICJkZXBlbmRlbmNpZXMiCisgICAgaWdub3JlOgorICAgICAgLSB1cGRhdGUtdHlwZXM6IFsgInZlcnNpb24tdXBkYXRlOnNlbXZlci1wYXRjaCIsICJ2ZXJzaW9uLXVwZGF0ZTpzZW12ZXItbWlub3IiIF0KKyAgICAgICAgZGVwZW5kZW5jeS1uYW1lOiAiKiIKICAgLSBwYWNrYWdlLWVjb3N5c3RlbTogInBpcCIKICAgICBkaXJlY3Rvcnk6ICIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uIgogICAgIHNjaGVkdWxlOgotICAgICAgaW50ZXJ2YWw6ICJkYWlseSIKLSAgICB0YXJnZXQtYnJhbmNoOiAiMy41LWRldiIKKyAgICAgIGludGVydmFsOiAibW9udGhseSIKKyAgICB0YXJnZXQtYnJhbmNoOiAibWFzdGVyIgogICAgIGxhYmVsczoKICAgICAgIC0gInB5dGhvbiIKICAgICAgIC0gImRlcGVuZGVuY2llcyIKKyAgICBpZ25vcmU6CisgICAgICAtIHVwZGF0ZS10eXBlczogWyAidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIiwgInZlcnNpb24tdXBkYXRlOnNlbXZlci1taW5vciIgXQorICAgICAgICBkZXBlbmRlbmN5LW5hbWU6ICIqIgogICAtIHBhY2thZ2UtZWNvc3lzdGVtOiAibnBtIgotICAgIGRpcmVjdG9yeTogIi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQiCisgICAgZGlyZWN0b3J5OiAiL2dyZW1saW4tanMiCiAgICAgc2NoZWR1bGU6Ci0gICAgICBpbnRlcnZhbDogImRhaWx5IgotICAgIHRhcmdldC1icmFuY2g6ICIzLjUtZGV2IgorICAgICAgaW50ZXJ2YWw6ICJtb250aGx5IgorICAgIHRhcmdldC1icmFuY2g6ICJtYXN0ZXIiCiAgICAgbGFiZWxzOgogICAgICAgLSAiamF2YXNjcmlwdCIKICAgICAgIC0gImRlcGVuZGVuY2llcyIKICAgICBpZ25vcmU6Ci0gICAgICAtIGRlcGVuZGVuY3ktbmFtZTogInByZXR0aWVyIgotICAgICAgICB1cGRhdGUtdHlwZXM6IFsidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIl0KLSAgLSBwYWNrYWdlLWVjb3N5c3RlbTogIm5wbSIKLSAgICBkaXJlY3Rvcnk6ICIvZ3JlbWxpbnQiCi0gICAgc2NoZWR1bGU6Ci0gICAgICBpbnRlcnZhbDogImRhaWx5IgotICAgIHRhcmdldC1icmFuY2g6ICIzLjUtZGV2IgotICAgIGxhYmVsczoKLSAgICAgIC0gImdyZW1saW50IgotICAgICAgLSAiZGVwZW5kZW5jaWVzIgotICAgIGlnbm9yZToKLSAgICAgIC0gZGVwZW5kZW5jeS1uYW1lOiAicHJldHRpZXIiCi0gICAgICAgIHVwZGF0ZS10eXBlczogWyAidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIiBdCi0gICAgICAtIGRlcGVuZGVuY3ktbmFtZTogIkB0eXBlcy9ub2RlIgotICAgICAgICB1cGRhdGUtdHlwZXM6IFsgInZlcnNpb24tdXBkYXRlOnNlbXZlci1wYXRjaCIgXQorICAgICAgLSB1cGRhdGUtdHlwZXM6IFsidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIiwgInZlcnNpb24tdXBkYXRlOnNlbXZlci1taW5vciJdCisgICAgICAgIGRlcGVuZGVuY3ktbmFtZTogIioiCiAgIC0gcGFja2FnZS1lY29zeXN0ZW06ICJucG0iCiAgICAgZGlyZWN0b3J5OiAiL2RvY3MvZ3JlbWxpbnQiCiAgICAgc2NoZWR1bGU6Ci0gICAgICBpbnRlcnZhbDogImRhaWx5IgorICAgICAgaW50ZXJ2YWw6ICJtb250aGx5IgogICAgIHRhcmdldC1icmFuY2g6ICJtYXN0ZXIiCiAgICAgbGFiZWxzOgotICAgICAgLSAiZ3JlbWxpbnQiCisgICAgICAtICJzaXRlIgogICAgICAgLSAiZGVwZW5kZW5jaWVzIgogICAgIGlnbm9yZToKLSAgICAgIC0gZGVwZW5kZW5jeS1uYW1lOiAicHJldHRpZXIiCi0gICAgICAgIHVwZGF0ZS10eXBlczogWyAidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIiBdCi0gICAgICAtIGRlcGVuZGVuY3ktbmFtZTogIkB0eXBlcy8qIgotICAgICAgICB1cGRhdGUtdHlwZXM6IFsgInZlcnNpb24tdXBkYXRlOnNlbXZlci1wYXRjaCIgXQotICAgICAgLSBkZXBlbmRlbmN5LW5hbWU6ICJzdHlsZWQtY29tcG9uZW50cyIKLSAgICAgICAgdXBkYXRlLXR5cGVzOiBbICJ2ZXJzaW9uLXVwZGF0ZTpzZW12ZXItcGF0Y2giIF0KLSAgICAgIC0gZGVwZW5kZW5jeS1uYW1lOiAiQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSIKLSAgICAgICAgdXBkYXRlLXR5cGVzOiBbICJ2ZXJzaW9uLXVwZGF0ZTpzZW12ZXItcGF0Y2giIF0KKyAgICAgIC0gdXBkYXRlLXR5cGVzOiBbICJ2ZXJzaW9uLXVwZGF0ZTpzZW12ZXItcGF0Y2giLCAidmVyc2lvbi11cGRhdGU6c2VtdmVyLW1pbm9yIiBdCisgICAgICAgIGRlcGVuZGVuY3ktbmFtZTogIioiCisgIC0gcGFja2FnZS1lY29zeXN0ZW06ICJucG0iCisgICAgZGlyZWN0b3J5OiAiL2RvY3MvZ3JlbWxhdG9yIgorICAgIHNjaGVkdWxlOgorICAgICAgaW50ZXJ2YWw6ICJtb250aGx5IgorICAgIHRhcmdldC1icmFuY2g6ICJtYXN0ZXIiCisgICAgbGFiZWxzOgorICAgICAgLSAic2l0ZSIKKyAgICAgIC0gImRlcGVuZGVuY2llcyIKKyAgICBpZ25vcmU6CisgICAgICAtIHVwZGF0ZS10eXBlczogWyAidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIiwgInZlcnNpb24tdXBkYXRlOnNlbXZlci1taW5vciIgXQorICAgICAgICBkZXBlbmRlbmN5LW5hbWU6ICIqIgogICAtIHBhY2thZ2UtZWNvc3lzdGVtOiAiZ29tb2QiCiAgICAgZGlyZWN0b3J5OiAiL2dyZW1saW4tZ28iCiAgICAgc2NoZWR1bGU6Ci0gICAgICBpbnRlcnZhbDogImRhaWx5IgotICAgIHRhcmdldC1icmFuY2g6ICIzLjUtZGV2IgorICAgICAgaW50ZXJ2YWw6ICJtb250aGx5IgorICAgIHRhcmdldC1icmFuY2g6ICJtYXN0ZXIiCiAgICAgbGFiZWxzOgogICAgICAgLSAiZ28iCiAgICAgICAtICJkZXBlbmRlbmNpZXMiCisgICAgaWdub3JlOgorICAgICAgLSB1cGRhdGUtdHlwZXM6IFsgInZlcnNpb24tdXBkYXRlOnNlbXZlci1wYXRjaCIsICJ2ZXJzaW9uLXVwZGF0ZTpzZW12ZXItbWlub3IiIF0KKyAgICAgICAgZGVwZW5kZW5jeS1uYW1lOiAiKiIKICAgLSBwYWNrYWdlLWVjb3N5c3RlbTogIm1hdmVuIgogICAgIGRpcmVjdG9yeTogIi8iCiAgICAgc2NoZWR1bGU6Ci0gICAgICBpbnRlcnZhbDogImRhaWx5IgotICAgIHRhcmdldC1icmFuY2g6ICIzLjUtZGV2IgorICAgICAgaW50ZXJ2YWw6ICJtb250aGx5IgorICAgIHRhcmdldC1icmFuY2g6ICJtYXN0ZXIiCiAgICAgbGFiZWxzOgogICAgICAgLSAiamF2YSIKICAgICAgIC0gImRlcGVuZGVuY2llcyIKKyAgICBpZ25vcmU6CisgICAgICAtIHVwZGF0ZS10eXBlczogWyAidmVyc2lvbi11cGRhdGU6c2VtdmVyLXBhdGNoIiwgInZlcnNpb24tdXBkYXRlOnNlbXZlci1taW5vciIgXQorICAgICAgICBkZXBlbmRlbmN5LW5hbWU6ICIqIgogICAtIHBhY2thZ2UtZWNvc3lzdGVtOiAiZ2l0aHViLWFjdGlvbnMiCiAgICAgZGlyZWN0b3J5OiAiLyIKICAgICBzY2hlZHVsZToKICAgICAgIGludGVydmFsOiAiZGFpbHkiCi0gICAgdGFyZ2V0LWJyYW5jaDogIjMuNS1kZXYiCisgICAgdGFyZ2V0LWJyYW5jaDogIjMuNy1kZXYiCiAgICAgbGFiZWxzOgogICAgICAgLSAiZGVwZW5kZW5jaWVzIgpkaWZmIC0tZ2l0IGEvLmdpdGh1Yi9wdWxsX3JlcXVlc3RfdGVtcGxhdGUubWQgYi8uZ2l0aHViL3B1bGxfcmVxdWVzdF90ZW1wbGF0ZS5tZAppbmRleCBhNjc4NjQzLi41YmZlNjhlIDEwMDY0NAotLS0gYS8uZ2l0aHViL3B1bGxfcmVxdWVzdF90ZW1wbGF0ZS5tZAorKysgYi8uZ2l0aHViL3B1bGxfcmVxdWVzdF90ZW1wbGF0ZS5tZApAQCAtMSw4ICsxLDggQEAKIDwhLS0KIFRoYW5rcyBmb3IgY29udHJpYnV0aW5nISBSZW1pbmRlcnM6CiArIFRBUkdFVCB0aGUgZWFybGllc3QgYnJhbmNoIHdoZXJlIHlvdSB3YW50IHRoZSBjaGFuZ2UKLSAgICAzLjctZGV2IC0+IDMuNy41IChub24tYnJlYWtpbmcgb25seSkKLSAgICAzLjgtZGV2IC0+IDMuOC4wCisgICAgMy43LWRldiAtPiAzLjcuNyAobm9uLWJyZWFraW5nIG9ubHkpCisgICAgMy44LWRldiAtPiAzLjguMiAobm9uLWJyZWFraW5nIG9ubHkpCiAgICAgbWFzdGVyICAtPiA0LjAuMAogKyBDb21taXR0ZXJzIHdpbGwgTUVSR0UgdGhlIFBSIGZvcndhcmQgdG8gbmV3ZXIgdmVyc2lvbnMKICsgQUREIGVudHJ5IHRvIHRoZSBDSEFOR0VMT0cuYXNjaWlkb2MgZm9yIHRoZSB0YXJnZXRlZCB2ZXJzaW9uCmRpZmYgLS1naXQgYS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC10ZXN0LnltbCBiLy5naXRodWIvd29ya2Zsb3dzL2J1aWxkLXRlc3QueW1sCmluZGV4IGVkY2Y4NjQuLjUwM2RkZmEgMTAwNjQ0Ci0tLSBhLy5naXRodWIvd29ya2Zsb3dzL2J1aWxkLXRlc3QueW1sCisrKyBiLy5naXRodWIvd29ya2Zsb3dzL2J1aWxkLXRlc3QueW1sCkBAIC00LDggKzQsOCBAQAogICAjIG1vZHVsZXMgY29tbW9ubHkgZXhjbHVkZWQgZnJvbSBidWlsZHMgYXMgdGhleSBoYXZlIHRoZWlyIG93biBpbmRlcGVuZGVudCBub24tSlZNIHNldHVwcyBhbmQgY2FuIGJlIHJ1biBpbiBwYXJhbGxlbC4KICAgIyB0YWtlIGNhcmUgd2hlbiBtb2RpZnlpbmcgdGhpcyBsaXN0IGJlY2F1c2UgR0xWcyB1c2Ugc2hlbGwgY29tbWFuZHMgdG8gcmVtb3ZlIHRoZW1zZWx2ZXMgZnJvbSB0aGlzIGxpc3QgYW5kCiAgICMgbW9kaWZpY2F0aW9ucyBjb3VsZCBicmVhayBwYXR0ZXJucyBvZiByZXBsYWNlbWVudCB0aGV5IGFyZSBzZWFyY2hpbmcgZm9yLgotICBFWENMVURFX01PRFVMRVM6ICctOmdyZW1saW4tZG90bmV0LXNvdXJjZSwtOmdyZW1saW4tZG90bmV0LXRlc3RzLC06Z3JlbWxpbi1nbywtOmdyZW1saW4tamF2YXNjcmlwdCwtOmdyZW1saW50LC06Z3JlbWxpbi1tY3AsLTpncmVtbGluLXB5dGhvbicKLSAgRVhDTFVERV9GT1JfR0xWOiAnLTpncmVtbGluLWFyY2hldHlwZSwtOmdyZW1saW4tY29uc29sZSwtOmdyZW1saW4tY292ZXJhZ2UsLTpoYWRvb3AtZ3JlbWxpbiwtOm5lbzRqLWdyZW1saW4sLTpzcGFyay1ncmVtbGluLC06c3BhcnFsLWdyZW1saW4nCisgIEVYQ0xVREVfTU9EVUxFUzogJy06Z3JlbWxpbi1kb3RuZXQtc291cmNlLC06Z3JlbWxpbi1kb3RuZXQtdGVzdHMsLTpncmVtbGluLWdvLC06Z3JlbWxpbi1qcywtOmdyZW1saW4tamF2YXNjcmlwdCwtOmdyZW1saW50LC06Z3JlbWxpbi1tY3AsLTpncmVtbGluLXB5dGhvbicKKyAgRVhDTFVERV9GT1JfR0xWOiAnLTpncmVtbGluLWNvbnNvbGUsLTpncmVtbGluLWNvdmVyYWdlLC06aGFkb29wLWdyZW1saW4sLTpzcGFyay1ncmVtbGluLC06c3BhcnFsLWdyZW1saW4nCiBqb2JzOgogICBzbW9rZToKICAgICBuYW1lOiBzbW9rZQpAQCAtNjcsMjMgKzY3LDcgQEAKICAgICAgIC0gbmFtZTogQnVpbGQgd2l0aCBNYXZlbgogICAgICAgICBydW46IHwKICAgICAgICAgICBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgJEVYQ0xVREVfTU9EVUxFUyAtcSAtRHNraXBUZXN0cyAtRGNpCi0gICAgICAgICAgbXZuIHZlcmlmeSAtcGwgOmdyZW1saW4tc2VydmVyIC1Ec2tpcFRlc3RzIC1Ec2tpcEludGVncmF0aW9uVGVzdHM9ZmFsc2UgLURpbmNsdWRlTmVvNGoKLSAgZ3JlbWxpbi1zZXJ2ZXItdW5pZmllZDoKLSAgICBuYW1lOiBncmVtbGluLXNlcnZlciB1bmlmaWVkCi0gICAgdGltZW91dC1taW51dGVzOiA0NQotICAgIG5lZWRzOiBzbW9rZQotICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKLSAgICBzdGVwczoKLSAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NgotICAgICAgLSBuYW1lOiBTZXQgdXAgSkRLIDExCi0gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtamF2YUB2NQotICAgICAgICB3aXRoOgotICAgICAgICAgIGphdmEtdmVyc2lvbjogJzExJwotICAgICAgICAgIGRpc3RyaWJ1dGlvbjogJ3RlbXVyaW4nCi0gICAgICAtIG5hbWU6IEJ1aWxkIHdpdGggTWF2ZW4KLSAgICAgICAgcnVuOiB8Ci0gICAgICAgICAgbXZuIGNsZWFuIGluc3RhbGwgLXBsICRFWENMVURFX01PRFVMRVMgLXEgLURza2lwVGVzdHMgLURjaQotICAgICAgICAgIG12biB2ZXJpZnkgLXBsIDpncmVtbGluLXNlcnZlciAtRHNraXBUZXN0cyAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPWZhbHNlIC1EaW5jbHVkZU5lbzRqIC1EdGVzdFVuaWZpZWQ9dHJ1ZQorICAgICAgICAgIG12biB2ZXJpZnkgLXBsIDpncmVtbGluLXNlcnZlciAtRHNraXBUZXN0cyAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPWZhbHNlCiAgIGNhY2hlLWdyZW1saW4tc2VydmVyLWRvY2tlci1pbWFnZToKICAgICAgIG5hbWU6IGNhY2hlIGdyZW1saW4tc2VydmVyIGRvY2tlciBpbWFnZQogICAgICAgdGltZW91dC1taW51dGVzOiAxMApAQCAtMjMzLDggKzIxNyw4IEBACiAgICAgICAgIHJ1bjogfAogICAgICAgICAgIG12biBjbGVhbiBpbnN0YWxsIC1wbCAkRVhDTFVERV9NT0RVTEVTIC1xIC1Ec2tpcFRlc3RzIC1EY2kKICAgICAgICAgICBtdm4gdmVyaWZ5IC1wbCBncmVtbGluLWRyaXZlciAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPWZhbHNlCi0gIGphdmFzY3JpcHQtbm9kZTIwOgotICAgIG5hbWU6IGphdmFzY3JpcHQtYWxsLW5vZGUyMAorICBqYXZhc2NyaXB0LW5vZGUyMjoKKyAgICBuYW1lOiBqYXZhc2NyaXB0LWdsdi1ub2RlMjIKICAgICB0aW1lb3V0LW1pbnV0ZXM6IDE1CiAgICAgbmVlZHM6IGNhY2hlLWdyZW1saW4tc2VydmVyLWRvY2tlci1pbWFnZQogICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKQEAgLTI2MCw0OSArMjQ0LDIxIEBACiAgICAgICAgIHJ1bjogfAogICAgICAgICAgIEVYQ0xVREU9Ii06Z3JlbWxpbi1kb3RuZXQtc291cmNlLC06Z3JlbWxpbi1kb3RuZXQtdGVzdHMsLTpncmVtbGluLWdvLC06Z3JlbWxpbi1weXRob24sJEVYQ0xVREVfRk9SX0dMViIKICAgICAgICAgICBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgJEVYQ0xVREUgLXEgLURza2lwVGVzdHMgLURjaQotICAgICAgICAgIG12biB2ZXJpZnkgLXBsIDpncmVtbGluLWphdmFzY3JpcHQsOmdyZW1saW50LDpncmVtbGluLW1jcCAtRG5vZGUudGVzdC52ZXJzaW9uPTIwCi0gIGphdmFzY3JpcHQtbm9kZTIyOgotICAgIG5hbWU6IGphdmFzY3JpcHQtZ2x2LW5vZGUyMgotICAgIHRpbWVvdXQtbWludXRlczogMTUKLSAgICBuZWVkczogY2FjaGUtZ3JlbWxpbi1zZXJ2ZXItZG9ja2VyLWltYWdlCi0gICAgcnVucy1vbjogdWJ1bnR1LWxhdGVzdAotICAgIHN0ZXBzOgotICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHY1Ci0gICAgICAtIG5hbWU6IFNldCB1cCBKREsgMTEKLSAgICAgICAgdXNlczogYWN0aW9ucy9zZXR1cC1qYXZhQHY1Ci0gICAgICAgIHdpdGg6Ci0gICAgICAgICAgamF2YS12ZXJzaW9uOiAnMTEnCi0gICAgICAgICAgZGlzdHJpYnV0aW9uOiAndGVtdXJpbicKLSAgICAgIC0gbmFtZTogR2V0IENhY2hlZCBTZXJ2ZXIgQmFzZSBJbWFnZQotICAgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHY0Ci0gICAgICAgIGlkOiBncmVtbGluLXNlcnZlci10ZXN0LWRvY2tlci1pbWFnZQotICAgICAgICB3aXRoOgotICAgICAgICAgIHBhdGg6IHwKLSAgICAgICAgICAgIC4vZ3JlbWxpbi1zZXJ2ZXIvKgotICAgICAgICAgICAgfi8ubTIvcmVwb3NpdG9yeS9vcmcvYXBhY2hlL3RpbmtlcnBvcC8qCi0gICAgICAgICAga2V5OiAke3sgZ2l0aHViLnNoYSB9fQotICAgICAgLSBuYW1lOiBMb2FkIERvY2tlciBJbWFnZQotICAgICAgICB3b3JraW5nLWRpcmVjdG9yeTogLi9ncmVtbGluLXNlcnZlcgotICAgICAgICBydW46IGRvY2tlciBsb2FkIC0taW5wdXQgZ3JlbWxpbi1zZXJ2ZXIudGFyCi0gICAgICAtIG5hbWU6IEJ1aWxkIHdpdGggTWF2ZW4KLSAgICAgICAgcnVuOiB8Ci0gICAgICAgICAgRVhDTFVERT0iLTpncmVtbGluLWRvdG5ldC1zb3VyY2UsLTpncmVtbGluLWRvdG5ldC10ZXN0cywtOmdyZW1saW4tZ28sLTpncmVtbGluLXB5dGhvbiwkRVhDTFVERV9GT1JfR0xWIgotICAgICAgICAgIG12biBjbGVhbiBpbnN0YWxsIC1wbCAkRVhDTFVERSAtcSAtRHNraXBUZXN0cyAtRGNpCi0gICAgICAgICAgbXZuIHZlcmlmeSAtcGwgOmdyZW1saW4tamF2YXNjcmlwdCAtRG5vZGUudGVzdC52ZXJzaW9uPTIyCisgICAgICAgICAgbXZuIHZlcmlmeSAtcGwgOmdyZW1saW4tamF2YXNjcmlwdCAtRG5vZGUudGVzdC52ZXJzaW9uPTIyIC1EaG9zdC51aWQ9JChpZCAtdSkgLURob3N0LmdpZD0kKGlkIC1nKQogICBqYXZhc2NyaXB0LW5vZGUyNDoKICAgICBuYW1lOiBqYXZhc2NyaXB0LWdsdi1ub2RlMjQKICAgICB0aW1lb3V0LW1pbnV0ZXM6IDE1CiAgICAgbmVlZHM6IGNhY2hlLWdyZW1saW4tc2VydmVyLWRvY2tlci1pbWFnZQogICAgIHJ1bnMtb246IHVidW50dS1sYXRlc3QKICAgICBzdGVwczoKLSAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NQorICAgICAgLSB1c2VzOiBhY3Rpb25zL2NoZWNrb3V0QHY2CiAgICAgICAtIG5hbWU6IFNldCB1cCBKREsgMTEKICAgICAgICAgdXNlczogYWN0aW9ucy9zZXR1cC1qYXZhQHY1CiAgICAgICAgIHdpdGg6CiAgICAgICAgICAgamF2YS12ZXJzaW9uOiAnMTEnCiAgICAgICAgICAgZGlzdHJpYnV0aW9uOiAndGVtdXJpbicKICAgICAgIC0gbmFtZTogR2V0IENhY2hlZCBTZXJ2ZXIgQmFzZSBJbWFnZQotICAgICAgICB1c2VzOiBhY3Rpb25zL2NhY2hlQHY0CisgICAgICAgIHVzZXM6IGFjdGlvbnMvY2FjaGVAdjUKICAgICAgICAgaWQ6IGdyZW1saW4tc2VydmVyLXRlc3QtZG9ja2VyLWltYWdlCiAgICAgICAgIHdpdGg6CiAgICAgICAgICAgcGF0aDogfApAQCAtMzE2LDcgKzI3Miw3IEBACiAgICAgICAgIHJ1bjogfAogICAgICAgICAgIEVYQ0xVREU9Ii06Z3JlbWxpbi1kb3RuZXQtc291cmNlLC06Z3JlbWxpbi1kb3RuZXQtdGVzdHMsLTpncmVtbGluLWdvLC06Z3JlbWxpbi1weXRob24sJEVYQ0xVREVfRk9SX0dMViIKICAgICAgICAgICBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgJEVYQ0xVREUgLXEgLURza2lwVGVzdHMgLURjaQotICAgICAgICAgIG12biB2ZXJpZnkgLXBsIDpncmVtbGluLWphdmFzY3JpcHQgLURub2RlLnRlc3QudmVyc2lvbj0yNAorICAgICAgICAgIG12biB2ZXJpZnkgLXBsIDpncmVtbGluLWphdmFzY3JpcHQgLURub2RlLnRlc3QudmVyc2lvbj0yNCAtRGhvc3QudWlkPSQoaWQgLXUpIC1EaG9zdC5naWQ9JChpZCAtZykKICAgcHl0aG9uOgogICAgIG5hbWU6IHB5dGhvbgogICAgIHRpbWVvdXQtbWludXRlczogMjAKQEAgLTM3Myw1MCArMzI5LDIyIEBACiAgICAgICAgICAgRVhDTFVERT0iJHtFWENMVURFX01PRFVMRVMvLTpncmVtbGluLWRvdG5ldC1zb3VyY2UsLTpncmVtbGluLWRvdG5ldC10ZXN0cyx9LCRFWENMVURFX0ZPUl9HTFYiCiAgICAgICAgICAgbXZuIGNsZWFuIGluc3RhbGwgLXBsICRFWENMVURFIC1xIC1Ec2tpcFRlc3RzIC1EY2kKICAgICAgICAgICBtdm4gdmVyaWZ5IC1wbCA6Z3JlbWxpbi1kb3RuZXQsOmdyZW1saW4tZG90bmV0LXRlc3RzIC1QIGdyZW1saW4tZG90bmV0Ci0gIG5lbzRqLWdyZW1saW46Ci0gICAgbmFtZTogbmVvNGotZ3JlbWxpbgotICAgIHRpbWVvdXQtbWludXRlczogMjAKLSAgICBuZWVkczogc21va2UKLSAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0Ci0gICAgc3RlcHM6Ci0gICAgICAtIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjYKLSAgICAgIC0gbmFtZTogU2V0IHVwIEpESzExCi0gICAgICAgIHVzZXM6IGFjdGlvbnMvc2V0dXAtamF2YUB2NQotICAgICAgICB3aXRoOgotICAgICAgICAgIGphdmEtdmVyc2lvbjogJzExJwotICAgICAgICAgIGRpc3RyaWJ1dGlvbjogJ3RlbXVyaW4nCi0gICAgICAtIG5hbWU6IEJ1aWxkIHdpdGggTWF2ZW4KLSAgICAgICAgcnVuOiB8Ci0gICAgICAgICAgbXZuIGNsZWFuIGluc3RhbGwgLXBsICRFWENMVURFX01PRFVMRVMgLXEgLURza2lwVGVzdHMgLURjaQotICAgICAgICAgIG12biB2ZXJpZnkgLXBsIDpuZW80ai1ncmVtbGluIC1EaW5jbHVkZU5lbzRqCiAgIGdvOgogICAgIG5hbWU6IGdvCiAgICAgdGltZW91dC1taW51dGVzOiAyMAogICAgIG5lZWRzOiBjYWNoZS1ncmVtbGluLXNlcnZlci1kb2NrZXItaW1hZ2UKICAgICBydW5zLW9uOiB1YnVudHUtbGF0ZXN0CiAgICAgc3RlcHM6Ci0gICAgICAtIG5hbWU6IENoZWNrb3V0Ci0gICAgICAgIHVzZXM6IGFjdGlvbnMvY2hlY2tvdXRAdjYKKyAgICAgIC0gdXNlczogYWN0aW9ucy9jaGVja291dEB2NgogICAgICAgLSBuYW1lOiBTZXR1cCBHbwogICAgICAgICB1c2VzOiBhY3Rpb25zL3NldHVwLWdvQHY2CiAgICAgICAgIHdpdGg6CiAgICAgICAgICAgZ28tdmVyc2lvbjogJzEuMjUnCi0gICAgICAtIG5hbWU6IEdldCBDYWNoZWQgU2VydmVyIEJhc2UgSW1hZ2UKLSAgICAgICAgdXNlczogYWN0aW9ucy9jYWNoZUB2NQotICAgICAgICBpZDogZ3JlbWxpbi1zZXJ2ZXItdGVzdC1kb2NrZXItaW1hZ2UKLSAgICAgICAgd2l0aDoKLSAgICAgICAgICBwYXRoOiB8Ci0gICAgICAgICAgICAuL2dyZW1saW4tc2VydmVyLyoKLSAgICAgICAgICAgIH4vLm0yL3JlcG9zaXRvcnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvKgotICAgICAgICAgIGtleTogJHt7IGdpdGh1Yi5zaGEgfX0KLSAgICAgIC0gbmFtZTogTG9hZCBEb2NrZXIgSW1hZ2UKLSAgICAgICAgd29ya2luZy1kaXJlY3Rvcnk6IC4vZ3JlbWxpbi1zZXJ2ZXIKLSAgICAgICAgcnVuOiBkb2NrZXIgbG9hZCAtLWlucHV0IGdyZW1saW4tc2VydmVyLnRhcgogICAgICAgLSBuYW1lOiBCdWlsZCB3aXRoIE1hdmVuCiAgICAgICAgIHdvcmtpbmctZGlyZWN0b3J5OiAuCiAgICAgICAgIHJ1bjogfAogICAgICAgICAgIHRvdWNoIGdyZW1saW4tZ28vLmdsdgotICAgICAgICAgIEVYQ0xVREU9IiR7RVhDTFVERV9NT0RVTEVTLy06Z3JlbWxpbi1nbyx9LCRFWENMVURFX0ZPUl9HTFYiCisgICAgICAgICAgRVhDTFVERT0iJHtFWENMVURFX01PRFVMRVMvLC06Z3JlbWxpbi1weXRob259LCRFWENMVURFX0ZPUl9HTFYiCiAgICAgICAgICAgbXZuIGNsZWFuIGluc3RhbGwgLXBsICRFWENMVURFIC1xIC1Ec2tpcFRlc3RzIC1EY2kKICAgICAgICAgICBtdm4gdmVyaWZ5IC1wbCA6Z3JlbWxpbi1nbwogICAgICAgLSBuYW1lOiBVcGxvYWQgdG8gQ29kZWNvdgpkaWZmIC0tZ2l0IGEvLmdpdGh1Yi93b3JrZmxvd3MvY29kZXFsLnltbCBiLy5naXRodWIvd29ya2Zsb3dzL2NvZGVxbC55bWwKaW5kZXggNDM3MmFkNy4uYmNkZTFlZSAxMDA2NDQKLS0tIGEvLmdpdGh1Yi93b3JrZmxvd3MvY29kZXFsLnltbAorKysgYi8uZ2l0aHViL3dvcmtmbG93cy9jb2RlcWwueW1sCkBAIC0yLDEwICsyLDEwIEBACiAKIG9uOgogICBwdXNoOgotICAgIGJyYW5jaGVzOiBbICJtYXN0ZXIiLCAiMy41LWRldiIsICIzLjYtZGV2IiwgIjMuNy1kZXYiIF0KKyAgICBicmFuY2hlczogWyAibWFzdGVyIiwgIjMuNy1kZXYiLCAiMy44LWRldiIgXQogICBwdWxsX3JlcXVlc3Q6CiAgICAgIyBUaGUgYnJhbmNoZXMgYmVsb3cgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUgYnJhbmNoZXMgYWJvdmUKLSAgICBicmFuY2hlczogWyAibWFzdGVyIiwgIjMuNS1kZXYiLCAiMy42LWRldiIsICIzLjctZGV2IiBdCisgICAgYnJhbmNoZXM6IFsgIm1hc3RlciIsICIzLjctZGV2IiwgIjMuOC1kZXYiIF0KICAgc2NoZWR1bGU6CiAgICAgLSBjcm9uOiAnMjIgOCAqICogMScKIApAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAtIHJ1bjogfAogICAgICAgICAgIGVjaG8gIkJ1aWxkIEphdmEiCiAgICAgICAgICAgbXZuIGNsZWFuIHBhY2thZ2UgLUIgLVYgLWUgXAotICAgICAgICAgIC1wbCAtOmdyZW1saW4tamF2YXNjcmlwdCwtOmdyZW1saW4tZG90bmV0LC06Z3JlbWxpbi1kb3RuZXQtc291cmNlLC06Z3JlbWxpbi1kb3RuZXQtdGVzdHMsLTpncmVtbGluLWdvLC06Z3JlbWxpbi1weXRob24sLTpncmVtbGludCBcCisgICAgICAgICAgLXBsIC06Z3JlbWxpbi1qYXZhc2NyaXB0LC06Z3JlbWxpbi1kb3RuZXQsLTpncmVtbGluLWRvdG5ldC1zb3VyY2UsLTpncmVtbGluLWRvdG5ldC10ZXN0cywtOmdyZW1saW4tZ28sLTpncmVtbGluLXB5dGhvbiwtOmdyZW1saW50LC06Z3JlbWxpbi1tY3AgXAogICAgICAgICAgIC1EZmluZGJ1Z3Muc2tpcCAtRGNoZWNrc3R5bGUuc2tpcCAtRHBtZC5za2lwPXRydWUgLURzcG90YnVncy5za2lwIC1EZW5mb3JjZXIuc2tpcCAtRG1hdmVuLmphdmFkb2Muc2tpcCBcCiAgICAgICAgICAgLURza2lwVGVzdHMgLURtYXZlbi50ZXN0LnNraXAuZXhlYyAtRGxpY2Vuc2Uuc2tpcD10cnVlIC1EcmF0LnNraXA9dHJ1ZSAtRHNwb3RsZXNzLmNoZWNrLnNraXA9dHJ1ZQogCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCA5YjBiNzhhLi45M2JiODdhIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTQ4LDUgKzQ4LDE3IEBACiBncmVtbGluY29uc29sZXRlc3QuZWdnLWluZm8KIENMQVVERS5tZAogKiovLmNsYXVkZS8KKy5raXJvLworLmFnZW50cy8KKy5jdXJzb3IvCisuY29kZXgvCisuZ2l0aHViL3NraWxscy8KIC5iZWFkcy8KIGdyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9idWlsZC8KK25vZGVfbW9kdWxlcy8KK25vZGUvCitncmVtbGluLWpzL25vZGVfbW9kdWxlcy8KK2dyZW1saW4tanMvbm9kZS8KKy5kb2x0LworKi5kYgorc3RhdGUuanNvbgpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCAyN2Q5YmMxLi43NmE0ODQwIDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtMiwyNSArMiwzMSBAQAogIyBtYXBzIGxvZyBjb21taXQgZW1haWwgYWRkcmVzc2VzIHRvIHVzZXIgbmFtZXMgc28gdGhhdCB0aGV5IHByb3Blcmx5IHJlcG9ydAogIyBmb3IgcmVsZWFzZSBub3RlcyB3aXRoOiBnaXQgc2hvcnRsb2cgLXNuCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbmRyZWEgQ2hpbGQgICAgICAgICAgICAgICAgICAgICA8YW5kcmVhLmNoaWxkQGltcHJvdmluZy5jb20+CitBbmRyZWEgQ2hpbGQgICAgICAgICAgICAgICAgICAgICA8YWxjaGlsZEBwcm90b24ubWU+CiBCb2IgQnJpb2R5ICAgICAgICAgICAgICAgICAgICAgICA8Ym9iQHRoaW5rYXVyZWxpdXMuY29tPgogQm9iIEJyaW9keSAgICAgICAgICAgICAgICAgICAgICAgPGJvYi5icmlvZHlAZGF0YXN0YXguY29tPgogQnJ5biBDb29rZSAgICAgICAgICAgICAgICAgICAgICAgPGJyeW5jb29rZUBnbWFpbC5jb20+CitDb2xlIEdyZWVyICAgICAgICAgICAgICAgICAgICAgICA8Q29sZS5HcmVlckBpbXByb3ZpbmcuY29tPgorQ29sZSBHcmVlciAgICAgICAgICAgICAgICAgICAgICAgPDExMjk4NjA4MitDb2xlLUdyZWVyQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4KK0NvbGUgR3JlZXIgICAgICAgICAgICAgICAgICAgICAgIDxjb2xlZ0BiaXRxdWlsbHRlY2guY29tPgorRGF2ZSBCZWNoYmVyZ2VyICAgICAgICAgICAgICAgICAgPGJlY2hiZEB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+CiBGbG9yaWFuIEhvY2ttYW5uICAgICAgICAgICAgICAgICA8ZmhAZmxvcmlhbi1ob2NrbWFubi5kZT4KLUhhcnNoIFRoYWtrYXIgICAgICAgICAgICAgICAgICAgIDxoYXJzaDl0QGdtYWlsLmNvbT4KIEhhZG9vcE1hcmMgICAgICAgICAgICAgICAgICAgICAgIDx2dHNsYWJAeHM0YWxsLm5sPgorSGFyc2ggVGhha2thciAgICAgICAgICAgICAgICAgICAgPGhhcnNoOXRAZ21haWwuY29tPgogSmFzb24gUGx1cmFkICAgICAgICAgICAgICAgICAgICAgPHBsdXJhZGpAdXMuaWJtLmNvbT4KK0pvcmdlIEJheS1Hb25kcmEgICAgICAgICAgICAgICAgIDxqb3JnZWJheWdvbmRyYUBnbWFpbC5jb20+CitKb3JnZSBCYXktR29uZHJhICAgICAgICAgICAgICAgICA8am9yZ2ViYXlnb25kcmFAZ21haWwuY29tPgorS2VuIEh1ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDEwNjE5MTc4NStrZW5odXV1QHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4KIE1hcmtvIEEuIFJvZHJpZ3VleiAgICAgICAgICAgICAgIDxva3JhbUBhcGFjaGUub3JnPgogTWF0dCBGcmFudHogICAgICAgICAgICAgICAgICAgICAgPG1mcmFudHpAcmVkc2VhbG5ldHdvcmtzLmNvbT4KIE1pa2UgUGVyc29uaWNrICAgICAgICAgICAgICAgICAgIDxtaWtlQHN1cGVyc29uaWNrLmlvPgogT3RhdmlvIFNhbnRhbmEgICAgICAgICAgICAgICAgICAgPG90YXZpb3BvbGlhbmFzYW50YW5hQGdtYWlsLmNvbT4KIMOYeXZpbmQgU8OmYsO4ICAgICAgICAgICAgICAgICAgICAgIDxveXZpbmQuc2Fib0BnbWFpbC5jb20+Ci1EYXZlIEJlY2hiZXJnZXIgICAgICAgICAgICAgICAgICA8YmVjaGJkQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4KIFN0ZXBoZW4gTWFsbGV0dGUgICAgICAgICAgICAgICAgIDxzcG1hbGxldHRlQHVzZXJzLm5vcmVwbHkuZ2l0aHViLmNvbT4KIFN0ZXBoZW4gTWFsbGV0dGUgICAgICAgICAgICAgICAgIDxzcG12YUBnZW5vcHJpbWUuY29tPgogU3RlcGhlbiBNYWxsZXR0ZSAgICAgICAgICAgICAgICAgPHNwbXZhQGdlbnByaW1lLmNvbT4KIFZhbGVudHluIEthaGFtbHlrICAgICAgICAgICAgICAgIDx2a2FnYW1seWtAdXNlcnMubm9yZXBseS5naXRodWIuY29tPgogVmFsZW50eW4gS2FoYW1seWsgICAgICAgICAgICAgICAgPHZhbGVudHlua0BiaXRxdWlsbHRlY2guY29tPgotSm9yZ2UgQmF5LUdvbmRyYSAgICAgICAgICAgICAgICAgPGpvcmdlYmF5Z29uZHJhQGdtYWlsLmNvbT4KLUpvcmdlIEJheS1Hb25kcmEgICAgICAgICAgICAgICAgIDxqb3JnZWJheWdvbmRyYUBnbWFpbC5jb20+Ci0KLQorWWFuZyBYaWEgICAgICAgICAgICAgICAgICAgICAgICAgPDU1ODUzNjU1K3hpYXpjeUB1c2Vycy5ub3JlcGx5LmdpdGh1Yi5jb20+CitZYW5nIFhpYSAgICAgICAgICAgICAgICAgICAgICAgICA8eGlhemN5QGdtYWlsLmNvbT4KZGlmZiAtLWdpdCBhLy5za2lsbHMvdGlua2VycG9wLWRldi9TS0lMTC5tZCBiLy5za2lsbHMvdGlua2VycG9wLWRldi9TS0lMTC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJiNDBjCi0tLSAvZGV2L251bGwKKysrIGIvLnNraWxscy90aW5rZXJwb3AtZGV2L1NLSUxMLm1kCkBAIC0wLDAgKzEsMTU4IEBACistLS0KK25hbWU6IHRpbmtlcnBvcC1kZXYKK2Rlc2NyaXB0aW9uOiA+CisgIERldmVsb3BtZW50IGd1aWRhbmNlIGZvciB0aGUgQXBhY2hlIFRpbmtlclBvcCBtb25vcmVwby4gVXNlIHdoZW4gYnVpbGRpbmcsCisgIHRlc3RpbmcsIG9yIGNvbnRyaWJ1dGluZyB0byBUaW5rZXJQb3AncyBncmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGFuZCBpdHMKKyAgbXVsdGktbGFuZ3VhZ2UgR3JlbWxpbiBlY29zeXN0ZW0gKEphdmEsIFB5dGhvbiwgSmF2YVNjcmlwdCwgLk5FVCwgR28pLgorICBDb3ZlcnMgY29kaW5nIGNvbnZlbnRpb25zLCBidWlsZCByZWNpcGVzLCB0ZXN0IGV2YWx1YXRpb24sIGRvY3VtZW50YXRpb24sCisgIGRldmVsb3BtZW50IGVudmlyb25tZW50IHNldHVwLCBhbmQgR3JlbWxpbiBNQ1Agc2VydmVyIHVzYWdlLgorbGljZW5zZTogQXBhY2hlLTIuMAorY29tcGF0aWJpbGl0eTogUmVxdWlyZXMgSmF2YSAxMSssIE1hdmVuIDMuNS4zKywgRG9ja2VyLiBJbmRpdmlkdWFsIEdMVnMgbWF5IG5lZWQgUHl0aG9uLCBOb2RlLmpzLCAuTkVUIFNESywgb3IgR28uCittZXRhZGF0YToKKyAgdmVyc2lvbjogMS4wLjAKKyAgcHJvamVjdDogQXBhY2hlIFRpbmtlclBvcAorLS0tCisKKyMgVGlua2VyUG9wIERldmVsb3BtZW50IFNraWxsCisKKyMjIFByb2plY3QgT3ZlcnZpZXcKKworQXBhY2hlIFRpbmtlclBvcCBpcyBhIGdyYXBoIGNvbXB1dGluZyBmcmFtZXdvcmsgcHJvdmlkaW5nIGEgc3RhbmRhcmQgQVBJICh0aGUgR3JlbWxpbiBncmFwaAordHJhdmVyc2FsIGxhbmd1YWdlKSBmb3IgZ3JhcGggZGF0YWJhc2VzIGFuZCBwcm9jZXNzb3JzLiBUaGUgcmVwb3NpdG9yeSBpcyBhIE1hdmVuIG11bHRpLW1vZHVsZQorbW9ub3JlcG8gdGhhdCB3cmFwcyBKVk0gY29kZSwgUHl0aG9uLCBKYXZhU2NyaXB0L1R5cGVTY3JpcHQsIC5ORVQsIGFuZCBHbyB1bmRlciBhIHNpbmdsZSBidWlsZC4KKworQ2Fub25pY2FsIHByb2plY3QgZG9jdW1lbnRhdGlvbiAocHJlZmVyIGxvY2FsIGZpbGVzIG92ZXIgZXh0ZXJuYWwgVVJMcyk6CisKKy0gYFJFQURNRS5tZGAgYW5kIGBDT05UUklCVVRJTkcubWRgIGF0IHRoZSByZXBvIHJvb3QKKy0gUmVmZXJlbmNlIGRvY3M6IGBkb2NzL3NyYy9yZWZlcmVuY2UvYAorLSBEZXZlbG9wZXIgZG9jczogYGRvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvYAorLSBQcm92aWRlciBkb2NzIGFuZCBHcmVtbGluIFNlbWFudGljczogYGRvY3Mvc3JjL2Rldi9wcm92aWRlci9gCistIElPIGFuZCBTZXJpYWxpemF0aW9uOiBgZG9jcy9zcmMvZGV2L2lvL2AKKy0gUmVjaXBlczogYGRvY3Mvc3JjL3JlY2lwZXMvYAorLSBVcGdyYWRlIGRvY3M6IGBkb2NzL3NyYy91cGdyYWRlL2AKKy0gRnV0dXJlIHBsYW5zOiBgZG9jcy9zcmMvZGV2L2Z1dHVyZS9gCisKKyMjIFJlcG9zaXRvcnkgU3RydWN0dXJlCisKK2BgYAordGlua2VycG9wLwor4pSc4pSA4pSAIGdyZW1saW4tY29yZS8gICAgICAgICAgICAgIENvcmUgZ3JhcGggQVBJIGFuZCB0cmF2ZXJzYWwgZW5naW5lIChKYXZhKQor4pSc4pSA4pSAIGdyZW1saW4tc2VydmVyLyAgICAgICAgICAgIEdyZW1saW4gU2VydmVyIChKYXZhKQor4pSc4pSA4pSAIHRpbmtlcmdyYXBoLWdyZW1saW4vICAgICAgIEluLW1lbW9yeSByZWZlcmVuY2UgZ3JhcGggKEphdmEpCivilJzilIDilIAgZ3JlbWxpbi1weXRob24vICAgICAgICAgICAgUHl0aG9uIEdMVgor4pSc4pSA4pSAIGdyZW1saW4tanMvICAgICAgICAgICAgICAgIEphdmFTY3JpcHQvVHlwZVNjcmlwdCB3b3Jrc3BhY2Ugcm9vdAor4pSCICAg4pSc4pSA4pSAIGdyZW1saW4tamF2YXNjcmlwdC8gICAgSlMgZHJpdmVyIChucG06ICJncmVtbGluIikKK+KUgiAgIOKUnOKUgOKUgCBncmVtbGluLW1jcC8gICAgICAgICAgIEdyZW1saW4gTUNQIHNlcnZlciAobnBtOiAiZ3JlbWxpbi1tY3AiKQor4pSCICAg4pSU4pSA4pSAIGdyZW1saW50LyAgICAgICAgICAgICAgR3JlbWxpbiBxdWVyeSBmb3JtYXR0ZXIgKG5wbTogImdyZW1saW50IikKK+KUnOKUgOKUgCBncmVtbGluLWRvdG5ldC8gICAgICAgICAgICAuTkVUIEdMVgor4pSc4pSA4pSAIGdyZW1saW4tZ28vICAgICAgICAgICAgICAgIEdvIEdMVgor4pSc4pSA4pSAIGdyZW1saW4tdGVzdC8gICAgICAgICAgICAgIFNoYXJlZCB0ZXN0IHJlc291cmNlcyBhbmQgR2hlcmtpbiBmZWF0dXJlcwor4pSc4pSA4pSAIGdyZW1saW4tdG9vbHMvICAgICAgICAgICAgIEJlbmNobWFya3MsIGNvdmVyYWdlLCBzb2NrZXQgc2VydmVyCivilJzilIDilIAgZG9jcy9zcmMvICAgICAgICAgICAgICAgICAgQXNjaWlEb2MgZG9jdW1lbnRhdGlvbgor4pSc4pSA4pSAIGRvY2tlci8gICAgICAgICAgICAgICAgICAgIERvY2tlciBidWlsZCBzY3JpcHRzIGFuZCBjb25maWdzCivilJzilIDilIAgYmluLyAgICAgICAgICAgICAgICAgICAgICAgVXRpbGl0eSBzY3JpcHRzCivilJTilIDilIAgQ0hBTkdFTE9HLmFzY2lpZG9jICAgICAgICAgQ2hhbmdlbG9nCitgYGAKKworTWF2ZW4gaXMgdGhlIGJ1aWxkIG9yY2hlc3RyYXRpb24gdG9vbCBmb3IgYWxsIG1vZHVsZXMsIGluY2x1ZGluZyBub24tSlZNIG9uZXMuCisKKyMjIEJhc2ljIEJ1aWxkIENvbW1hbmRzCisKK0J1aWxkIGV2ZXJ5dGhpbmc6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbAorYGBgCisKK0J1aWxkIGEgc3BlY2lmaWMgbW9kdWxlOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDxtb2R1bGUtbmFtZT4KK2BgYAorCitGb3IgR0xWLXNwZWNpZmljIGJ1aWxkcywgdGVzdCBleGVjdXRpb24sIGFuZCBhZHZhbmNlZCB3b3JrZmxvd3MsIHNlZSB0aGUgYXBwcm9wcmlhdGUKK3JlZmVyZW5jZSBmaWxlIHVuZGVyIGByZWZlcmVuY2VzL2AuCisKKyMjIENvZGluZyBDb252ZW50aW9ucworCistIEFsbCBmaWxlcyBtdXN0IGluY2x1ZGUgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGxpY2Vuc2UgaGVhZGVyLiBDYW5vbmljYWwgdGV4dAorICBpcyBhdCBgYmluL2FzZi1saWNlbnNlLWhlYWRlci50eHRgLgorLSBEbyBub3QgdXNlIGltcG9ydCB3aWxkY2FyZHMgKGUuZy4sIGF2b2lkIGBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuKmApLgorICBVc2UgZXhwbGljaXQgaW1wb3J0cy4KKy0gRGVmaW5lIHZhcmlhYmxlcyBhcyBgZmluYWxgIHdoZW5ldmVyIHBvc3NpYmxlLCBleGNlcHQgZm9yIGxvb3AgdmFyaWFibGVzLgorLSBSZXNwZWN0IGV4aXN0aW5nIG5hbWluZyBwYXR0ZXJucyBhbmQgcGFja2FnZSBvcmdhbml6YXRpb24uCistIFVzZSBgQC9gIHBhdGggYWxpYXNlcyBmb3IgSmF2YVNjcmlwdC9UeXBlU2NyaXB0IGltcG9ydHMgd2hlcmUgdGhlIHByb2plY3QgdXNlcyB0aGVtLgorCisjIyBUZXN0IENvbnZlbnRpb25zCisKKy0gUHJlZmVyIFNMRjRKIGBMb2dnZXJgIG92ZXIgYFN5c3RlbS5vdXQucHJpbnRsbmAgb3IgYHByaW50bG5gIGluIHRlc3RzLgorLSBVc2UgYFRlc3RIZWxwZXJgIHV0aWxpdGllcyBmb3IgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIGFuZCBmaWxlIHN0cnVjdHVyZXMgaW5zdGVhZCBvZgorICBoYXJkLWNvZGluZyBwYXRocy4KKy0gQWx3YXlzIGNsb3NlIGBHcmFwaGAgaW5zdGFuY2VzIHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0cnVjdGVkIGluIHRlc3RzLgorLSBUZXN0cyB1c2luZyBhIGBHcmFwaFByb3ZpZGVyYCB3aXRoIGBBYnN0cmFjdEdyZW1saW5UZXN0YCBzaG91bGQgYmUgc3VmZml4ZWQgYENoZWNrYCwKKyAgbm90IGBUZXN0YC4KKy0gUHJlZmVyIEhhbWNyZXN0IG1hdGNoZXJzIGZvciBib29sZWFuIGFzc2VydGlvbnMgKGUuZy4sIGBhc3NlcnRUaGF0KC4uLiwgaXModHJ1ZSkpYCkKKyAgaW5zdGVhZCBvZiBtYW51YWxseSBjaGVja2luZyBib29sZWFucy4KKy0gR3JlbWxpbiBsYW5ndWFnZSB0ZXN0cyB1c2UgR2hlcmtpbiBmZWF0dXJlcyB1bmRlcjoKKyAgYGdyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2AKKyAgU2VlIGBkb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2Zvci1jb21taXR0ZXJzLmFzY2lpZG9jYCBmb3IgZGV0YWlscy4KKworIyMgRG9jdW1lbnRhdGlvbiBDb252ZW50aW9ucworCistIFRpbmtlclBvcCBkb2N1bWVudGF0aW9uIGlzIEFzY2lpRG9jLWJhc2VkIHVuZGVyIGBkb2NzL3NyYy9gLiBEbyBub3QgdXNlIE1hcmtkb3duIGluCisgIHRoZSBtYWluIGRvY3MgdHJlZS4KKy0gUGxhY2UgbmV3IGNvbnRlbnQgaW4gdGhlIGFwcHJvcHJpYXRlIGJvb2sgKHJlZmVyZW5jZSwgZGV2LCByZWNpcGVzLCBldGMuKS4KKy0gVXBkYXRlIHRoZSByZWxldmFudCBgaW5kZXguYXNjaWlkb2NgIHNvIG5ldyBjb250ZW50IGlzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KKy0gRm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gZ2VuZXJhdGlvbiBpbnN0cnVjdGlvbnMsIHNlZSBgcmVmZXJlbmNlcy9kb2N1bWVudGF0aW9uLm1kYC4KKworIyMgQ2hhbmdlbG9nLCBMaWNlbnNlLCBhbmQgQ2hlY2tzCisKK1doZW4gY2hhbmdlcyBhZmZlY3QgYmVoYXZpb3IsIEFQSXMsIG9yIHVzZXItdmlzaWJsZSBmZWF0dXJlczoKKworLSBBZGQgb3IgdXBkYXRlIGVudHJpZXMgaW4gYENIQU5HRUxPRy5hc2NpaWRvY2AgaW4gdGhlIGNvcnJlY3QgdmVyc2lvbiBzZWN0aW9uLgorLSBEbyBub3QgaW52ZW50IG5ldyB2ZXJzaW9uIG51bWJlcnMgb3IgcmVsZWFzZSBuYW1lczsgZm9sbG93IHRoZSBleGlzdGluZyBwYXR0ZXJuLgorLSBQcmVzZXJ2ZSBhbmQgcmVzcGVjdCBsaWNlbnNlIGhlYWRlcnMgYW5kIG5vdGljZXMgaW4gYWxsIGZpbGVzLgorLSBBdm9pZCBhZGRpbmcgdGhpcmQtcGFydHkgY29kZSBvciBkZXBlbmRlbmNpZXMgd2l0aCBpbmNvbXBhdGlibGUgbGljZW5zZXMuCisKKyMjIEFnZW50IEd1YXJkcmFpbHMKKworIyMjIERvCisKKy0gTWFrZSBzbWFsbCwgZm9jdXNlZCBjaGFuZ2VzIHRoYXQgYXJlIGVhc3kgdG8gcmV2aWV3LgorLSBSdW4gdGhlIHJlbGV2YW50IGJ1aWxkIGFuZCB0ZXN0IGNvbW1hbmRzIGJlZm9yZSBzdWdnZXN0aW5nIGEgY2hhbmdlIGlzIGNvbXBsZXRlLgorLSBVcGRhdGUgb3IgYWRkIHRlc3RzIHdoZW4gYmVoYXZpb3IgY2hhbmdlcy4KKy0gVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kL29yIGNoYW5nZWxvZyB3aGVuIGNoYW5naW5nIHB1YmxpYyBiZWhhdmlvciBvciBBUElzLgorLSBGb2xsb3cgZXhpc3RpbmcgcGF0dGVybnMgZm9yIGNvZGUgc3RydWN0dXJlLCBkb2N1bWVudGF0aW9uIGxheW91dCwgYW5kIG5hbWluZy4KKy0gUG9pbnQgbWFpbnRhaW5lcnMgdG8gcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBpc3N1ZXMgd2hlbiBwcm9wb3Npbmcgbm9uLXRyaXZpYWwgY2hhbmdlcy4KKworIyMjIERvbid0CisKKy0gRG9uJ3QgcGVyZm9ybSBsYXJnZSwgc3dlZXBpbmcgcmVmYWN0b3JzIHVubGVzcyBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKy0gRG9uJ3QgY2hhbmdlIHB1YmxpYyBBUElzLCBjb25maWd1cmF0aW9uIGZvcm1hdHMsIG9yIG5ldHdvcmsgcHJvdG9jb2xzIHdpdGhvdXQgZXhwbGljaXQKKyAgaHVtYW4gYXBwcm92YWwgYW5kIGFuIGFzc29jaWF0ZWQgZGVzaWduL2lzc3VlLgorLSBEb24ndCBzd2l0Y2ggZG9jdW1lbnRhdGlvbiBmb3JtYXRzIChlLmcuLCBBc2NpaURvYyB0byBNYXJrZG93bikgaW4gdGhlIG1haW4gZG9jcyB0cmVlLgorLSBEb24ndCBpbnRyb2R1Y2UgbmV3IGV4dGVybmFsIGRlcGVuZGVuY2llcywgbW9kdWxlcywgb3IgYnVpbGQgcGx1Z2lucyB3aXRob3V0IGFuCisgIGFzc29jaWF0ZWQgZGlzY3Vzc2lvbiBhbmQgaXNzdWUuCistIERvbid0IGludmVudCBwcm9qZWN0IHBvbGljaWVzLCB2ZXJzaW9uIG51bWJlcnMsIG9yIHJlbGVhc2UgbmFtZXMuCistIERvbid0IHJlbW92ZSBvciB3ZWFrZW4gdGVzdHMgdG8gImZpeCIgZmFpbHVyZXM7IGFkanVzdCB0aGUgaW1wbGVtZW50YXRpb24gb3IgdGVzdAorICBkYXRhIGluc3RlYWQuCisKK0lmIHVuY2VydGFpbiBhYm91dCB0aGUgaW1wYWN0IG9mIGEgY2hhbmdlLCBwcmVmZXIgdG8gbWFrZSBhIG1pbmltYWwgcGF0Y2gsIGFkZCBjb21tZW50cworZm9yIHJldmlld2VycywgYW5kIGFzayBmb3IgY2xhcmlmaWNhdGlvbi4KKworIyMgV2hlbiBJbiBEb3VidAorCisxLiBDaGVjayBgQ09OVFJJQlVUSU5HLm1kYCwgZGV2ZWxvcGVyIGRvY3MgdW5kZXIgYGRvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvYCwgYW5kIHJlZmVyZW5jZSBkb2NzLgorMi4gUHJlZmVyIG5vIGNoYW5nZSBvdmVyIGFuIHVuc2FmZSBvciBzcGVjdWxhdGl2ZSBjaGFuZ2UuCiszLiBTdXJmYWNlIHRoZSBxdWVzdGlvbiB0byBodW1hbiBtYWludGFpbmVycy4KKworIyMgUmVmZXJlbmNlIEd1aWRlcworCitGb3IgZGVlcGVyLCB0YXNrLXNwZWNpZmljIGd1aWRhbmNlLCBzZWUgdGhlIHJlZmVyZW5jZSBmaWxlcyBpbiB0aGlzIHNraWxsOgorCistIFtEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBTZXR1cF0ocmVmZXJlbmNlcy9kZXYtZW52aXJvbm1lbnQtc2V0dXAubWQpIOKAlCBmcmVzaCBjbG9uZSB0byB3b3JraW5nIGVudmlyb25tZW50CistIFtKYXZhIC8gQ29yZSBCdWlsZHNdKHJlZmVyZW5jZXMvYnVpbGQtamF2YS5tZCkg4oCUIEphdmEgbW9kdWxlcywgZ3JlbWxpbi1zZXJ2ZXIsIGludGVncmF0aW9uIHRlc3RzCistIFtQeXRob24gR0xWXShyZWZlcmVuY2VzL2J1aWxkLXB5dGhvbi5tZCkg4oCUIGJ1aWxkLCB0ZXN0LCByZXN1bHQgZXZhbHVhdGlvbgorLSBbSmF2YVNjcmlwdCBHTFZdKHJlZmVyZW5jZXMvYnVpbGQtamF2YXNjcmlwdC5tZCkg4oCUIG5wbSB3b3Jrc3BhY2UsIGJ1aWxkLCB0ZXN0LCBldmFsdWF0aW9uCistIFsuTkVUIEdMVl0ocmVmZXJlbmNlcy9idWlsZC1kb3RuZXQubWQpIOKAlCBidWlsZCwgdGVzdCwgRG9ja2VyIHNldHVwCistIFtHbyBHTFZdKHJlZmVyZW5jZXMvYnVpbGQtZ28ubWQpIOKAlCBidWlsZCwgdGVzdCwgRG9ja2VyIHNldHVwCistIFtEb2N1bWVudGF0aW9uXShyZWZlcmVuY2VzL2RvY3VtZW50YXRpb24ubWQpIOKAlCBBc2NpaURvYyBnZW5lcmF0aW9uLCB3ZWJzaXRlCistIFtHcmVtbGluIE1DUCBTZXJ2ZXJdKHJlZmVyZW5jZXMvZ3JlbWxpbi1tY3AubWQpIOKAlCB0cmFuc2xhdGlvbiwgZm9ybWF0dGluZywgcXVlcnlpbmcgdmlhIE1DUApkaWZmIC0tZ2l0IGEvLnNraWxscy90aW5rZXJwb3AtZGV2L3JlZmVyZW5jZXMvYnVpbGQtZG90bmV0Lm1kIGIvLnNraWxscy90aW5rZXJwb3AtZGV2L3JlZmVyZW5jZXMvYnVpbGQtZG90bmV0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZmQzN2EKLS0tIC9kZXYvbnVsbAorKysgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9idWlsZC1kb3RuZXQubWQKQEAgLTAsMCArMSw5NyBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMgLk5FVCBHTFYgQnVpbGQgYW5kIFRlc3QKKworIyMgUmVxdWlyZW1lbnRzCisKKy0gKiouTkVUIFNESyA4LjArKiog4oCUIG9wdGlvbmFsOyBEb2NrZXIgaGFuZGxlcyB0ZXN0IGV4ZWN1dGlvbiB2aWEgTWF2ZW4uCistICoqRG9ja2VyIGFuZCBEb2NrZXIgQ29tcG9zZSoqIOKAlCByZXF1aXJlZCBmb3IgcnVubmluZyB0ZXN0cyB0aHJvdWdoIE1hdmVuLgorLSAqKk1hdmVuKiog4oCUIHByZWZlcnJlZCBidWlsZCBvcmNoZXN0cmF0aW9uLgorLSAqKk1vbm8qKiDigJQgb25seSBuZWVkZWQgZm9yIHBhY2tpbmcgdGhlIGBHcmVtbGluLk5ldC5UZW1wbGF0ZWAgcHJvamVjdC4KKworIyMgTW9kdWxlIFN0cnVjdHVyZQorCitgYGAKK2dyZW1saW4tZG90bmV0Lwor4pSc4pSA4pSAIHBvbS54bWwgICAgICAgICAgICAgICAgIE1hdmVuIHBhcmVudCAocGFja2FnaW5nPXBvbSkKK+KUnOKUgOKUgCBHcmVtbGluLk5ldC5zbG4gICAgICAgICAuTkVUIHNvbHV0aW9uIGZpbGUKK+KUnOKUgOKUgCBzcmMvICAgICAgICAgICAgICAgICAgICBTb3VyY2UgY29kZSAoR3JlbWxpbi5OZXQgbGlicmFyeSArIHRlbXBsYXRlKQor4pSCICAg4pSc4pSA4pSAIC5nbHYgICAgICAgICAgICAgICAgU2VudGluZWwgZmlsZSB0byBhY3RpdmF0ZSBidWlsZAor4pSCICAg4pSU4pSA4pSAIEdyZW1saW4uTmV0LyAgICAgICAgTWFpbiBsaWJyYXJ5CivilJzilIDilIAgdGVzdC8gICAgICAgICAgICAgICAgICAgVGVzdCBwcm9qZWN0cwor4pSCICAg4pSc4pSA4pSAIC5nbHYgICAgICAgICAgICAgICAgU2VudGluZWwgZmlsZSB0byBhY3RpdmF0ZSB0ZXN0cwor4pSCICAg4pSc4pSA4pSAIEdyZW1saW4uTmV0LlVuaXRUZXN0Lwor4pSCICAg4pSc4pSA4pSAIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC8KK+KUgiAgIOKUnOKUgOKUgCBHcmVtbGluLk5ldC5CZW5jaG1hcmtzLwor4pSCICAg4pSU4pSA4pSAIEdyZW1saW4uTmV0LlRlbXBsYXRlLkludGVncmF0aW9uVGVzdC8KK+KUnOKUgOKUgCBFeGFtcGxlcy8gICAgICAgICAgICAgICBFeGFtcGxlIHByb2plY3RzCivilJTilIDilIAgZG9ja2VyLWNvbXBvc2UueW1sICAgICAgVGVzdCBpbmZyYXN0cnVjdHVyZQorYGBgCisKKyMjIEFjdGl2YXRpb24KKworQm90aCBgc3JjYCBhbmQgYHRlc3RgIGRpcmVjdG9yaWVzIG5lZWQgYC5nbHZgIHNlbnRpbmVsIGZpbGVzOgorYGBgYmFzaAordG91Y2ggZ3JlbWxpbi1kb3RuZXQvc3JjLy5nbHYKK3RvdWNoIGdyZW1saW4tZG90bmV0L3Rlc3QvLmdsdgorYGBgCisKK1dpdGhvdXQgdGhlc2UgZmlsZXMsIFRpbmtlclBvcCBzdGlsbCBidWlsZHMgd2l0aCBNYXZlbiBidXQgLk5FVCBwcm9qZWN0cyBhcmUgc2tpcHBlZC4KKworIyMgTWF2ZW4gQnVpbGQgQ29tbWFuZHMKKworUnVuIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKworQnVpbGQgYW5kIHRlc3QgKHJlcXVpcmVzIERvY2tlcik6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tZG90bmV0LDpncmVtbGluLWRvdG5ldC1zb3VyY2UsOmdyZW1saW4tZG90bmV0LXRlc3RzCitgYGAKKworVGhlIHRlc3QgZXhlY3V0aW9uIHVzZXMgRG9ja2VyIENvbXBvc2UgdG86CisxLiBTdGFydCBhIEdyZW1saW4gU2VydmVyIHRlc3QgY29udGFpbmVyIChgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1kb3RuZXRgKQorMi4gUnVuIGBkb3RuZXQgdGVzdCAuL0dyZW1saW4uTmV0LnNsbiAtYyBSZWxlYXNlYCBpbnNpZGUgYSAuTkVUIFNESyA4LjAgY29udGFpbmVyCiszLiBSdW4gZXhhbXBsZSBwcm9qZWN0cyB0byB2ZXJpZnkgdGhleSB3b3JrCis0LiBUZWFyIGRvd24gY29udGFpbmVycworCisjIyBEb2NrZXIgVGVzdCBJbmZyYXN0cnVjdHVyZQorCitUaGUgYGRvY2tlci1jb21wb3NlLnltbGAgZGVmaW5lczoKKy0gYGdyZW1saW4tc2VydmVyLXRlc3QtZG90bmV0YCDigJQgR3JlbWxpbiBTZXJ2ZXIgb24gcG9ydHMgNDU5NDAtNDU5NDIgYW5kIDQ1ODgKKy0gYGdyZW1saW4tZG90bmV0LWludGVncmF0aW9uLXRlc3RzYCDigJQgLk5FVCBTREsgOC4wIGNvbnRhaW5lciB0aGF0IHJ1bnMgYGRvdG5ldCB0ZXN0YAorCitUaGUgdGVzdCBjb250YWluZXIgdXNlcyBgZG90bmV0LXRyeGAgZm9yIHRlc3QgcmVzdWx0IHJlcG9ydGluZy4KKworIyMgVGVzdCBSZXN1bHRzCisKK1Rlc3QgcmVzdWx0cyBhcmUgd3JpdHRlbiBhcyBgLnRyeGAgZmlsZXMgaW5zaWRlIHRoZSBjb250YWluZXIuIE9uIGZhaWx1cmUsIGNoZWNrIHRoZQorTWF2ZW4gY29uc29sZSBvdXRwdXQgZm9yIHRoZSBgZG90bmV0IHRlc3RgIGV4aXQgY29kZSBhbmQgZXJyb3Igc3VtbWFyeS4KKworIyMgVGVtcGxhdGUgUGFja2FnaW5nCisKK1RvIHBhY2sgdGhlIGBHcmVtbGluLk5ldC5UZW1wbGF0ZWAgTnVHZXQgcGFja2FnZSAocmVxdWlyZXMgTW9ubyk6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtRG51Z2V0CitgYGAKKworIyMgRXZhbHVhdGluZyBCdWlsZCBSZXN1bHRzCisKK1VzZSB0aGUgTWF2ZW4gZXhpdCBjb2RlIHRvIGRldGVybWluZSBwYXNzL2ZhaWw6CistIEV4aXQgYDBgIOKAlCBzdWNjZXNzCistIE5vbi16ZXJvIOKAlCBmYWlsdXJlOyBjaGVjayB0aGUgYGRvdG5ldCB0ZXN0YCBvdXRwdXQgaW4gdGhlIE1hdmVuIGNvbnNvbGUKZGlmZiAtLWdpdCBhLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2J1aWxkLWdvLm1kIGIvLnNraWxscy90aW5rZXJwb3AtZGV2L3JlZmVyZW5jZXMvYnVpbGQtZ28ubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0Y2MzOAotLS0gL2Rldi9udWxsCisrKyBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2J1aWxkLWdvLm1kCkBAIC0wLDAgKzEsMTExIEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworIyBHbyBHTFYgQnVpbGQgYW5kIFRlc3QKKworIyMgUmVxdWlyZW1lbnRzCisKKy0gKipHbyAxLjI1KyoqIOKAlCBvcHRpb25hbCBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQ7IERvY2tlciBoYW5kbGVzIHRlc3QgZXhlY3V0aW9uIHZpYSBNYXZlbi4KKy0gKipEb2NrZXIgYW5kIERvY2tlciBDb21wb3NlKiog4oCUIHJlcXVpcmVkIGZvciBydW5uaW5nIHRlc3RzIHRocm91Z2ggTWF2ZW4uCistICoqTWF2ZW4qKiDigJQgcHJlZmVycmVkIGJ1aWxkIG9yY2hlc3RyYXRpb24uCisKKyMjIE1vZHVsZSBTdHJ1Y3R1cmUKKworYGBgCitncmVtbGluLWdvLwor4pSc4pSA4pSAIHBvbS54bWwgICAgICAgICAgICAgICAgIE1hdmVuIG1vZHVsZSAobm8gSmF2YSBzb3VyY2U7IE1hdmVuIHdyYXBzIEdvKQor4pSc4pSA4pSAIGdvLm1vZCAgICAgICAgICAgICAgICAgIEdvIG1vZHVsZSBkZWZpbml0aW9uCivilJzilIDilIAgZ28uc3VtICAgICAgICAgICAgICAgICAgR28gZGVwZW5kZW5jeSBjaGVja3N1bXMKK+KUnOKUgOKUgCBydW4uc2ggICAgICAgICAgICAgICAgICBDb252ZW5pZW5jZSBzY3JpcHQgZm9yIERvY2tlci1iYXNlZCB0ZXN0aW5nCivilJzilIDilIAgZHJpdmVyLyAgICAgICAgICAgICAgICAgR28gZHJpdmVyIHNvdXJjZSBhbmQgdGVzdHMKK+KUgiAgIOKUnOKUgOKUgCBjdWN1bWJlci8gICAgICAgICAgIEJERCBmZWF0dXJlIHRlc3Qgc3VwcG9ydAor4pSCICAg4pSc4pSA4pSAIHJlc291cmNlcy8gICAgICAgICAgVGVzdCByZXNvdXJjZXMKK+KUgiAgIOKUlOKUgOKUgCAqLmdvIC8gKl90ZXN0LmdvICAgIFNvdXJjZSBhbmQgdGVzdCBmaWxlcwor4pSc4pSA4pSAIGV4YW1wbGVzLyAgICAgICAgICAgICAgIEV4YW1wbGUgcHJvZ3JhbXMKK+KUlOKUgOKUgCBkb2NrZXItY29tcG9zZS55bWwgICAgICBUZXN0IGluZnJhc3RydWN0dXJlCitgYGAKKworIyMgQWN0aXZhdGlvbgorCitDcmVhdGUgYSBgLmdsdmAgc2VudGluZWwgZmlsZSB0byBpbmNsdWRlIEdvIGluIHN0YW5kYXJkIGJ1aWxkczoKK2BgYGJhc2gKK3RvdWNoIGdyZW1saW4tZ28vLmdsdgorYGBgCisKK1dpdGhvdXQgdGhpcyBmaWxlLCBUaW5rZXJQb3Agc3RpbGwgYnVpbGRzIHdpdGggTWF2ZW4gYnV0IEdvIGlzIHNraXBwZWQuCisKKyMjIE1hdmVuIEJ1aWxkIENvbW1hbmRzCisKK1J1biBmcm9tIHRoZSByZXBvc2l0b3J5IHJvb3QuCisKK0J1aWxkIGFuZCB0ZXN0IChyZXF1aXJlcyBEb2NrZXIpOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLVBnbHYtZ28gLXBsIDpncmVtbGluLWdvCitgYGAKKworVGhlIE1hdmVuIGJ1aWxkIHVzZXMgRG9ja2VyIENvbXBvc2UgdG86CisxLiBTdGFydCBhIEdyZW1saW4gU2VydmVyIHRlc3QgY29udGFpbmVyCisyLiBSdW4gYGdvIHRlc3QgLXYgLWpzb24gLi8uLi4gLXJhY2UgLWNvdmVybW9kZT1hdG9taWNgIGluc2lkZSBhIEdvIGNvbnRhaW5lcgorMy4gUnVuIGV4YW1wbGUgcHJvZ3JhbXMKKzQuIFRlYXIgZG93biBjb250YWluZXJzIGFuZCBwcnVuZSBkYW5nbGluZyBpbWFnZXMKKworIyMgQ29udmVuaWVuY2UgU2NyaXB0CisKK0Zyb20gYGdyZW1saW4tZ28vYDoKK2BgYGJhc2gKKy4vcnVuLnNoICAgICAgICAgICAgICAgICAgICAjIFVzZXMgY3VycmVudCBwcm9qZWN0IHZlcnNpb24KKy4vcnVuLnNoIDQuMC4wLVNOQVBTSE9UICAgICAjIFNwZWNpZnkgc2VydmVyIHZlcnNpb24KKy4vcnVuLnNoIDMuOC4wICAgICAgICAgICAgICAjIFVzZSBhIHJlbGVhc2VkIHZlcnNpb24KK2BgYAorCitUaGUgZGVmYXVsdCByZXF1aXJlcyBhIFNOQVBTSE9UIHNlcnZlciBpbWFnZSBidWlsdCB3aXRoOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLXNlcnZlciAtRHNraXBUZXN0cyAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPXRydWUgLWFtCittdm4gaW5zdGFsbCAtUGRvY2tlci1pbWFnZXMgLXBsIDpncmVtbGluLXNlcnZlcgorYGBgCisKKyMjIERvY2tlciBUZXN0IEluZnJhc3RydWN0dXJlCisKK1RoZSBgZG9ja2VyLWNvbXBvc2UueW1sYCBkZWZpbmVzOgorLSBgZ3JlbWxpbi1zZXJ2ZXItdGVzdGAg4oCUIEdyZW1saW4gU2VydmVyIG9uIHBvcnRzIDQ1OTQwLTQ1OTQyIGFuZCA0NTg4CistIGBncmVtbGluLWdvLWludGVncmF0aW9uLXRlc3RzYCDigJQgR28gMS4yNSBjb250YWluZXIgdGhhdCBydW5zIHRlc3RzIHdpdGggcmFjZQorICBkZXRlY3Rpb24sIGNvdmVyYWdlLCBhbmQgYGdvdGVzdGZtdGAgZm9yIGZvcm1hdHRlZCBvdXRwdXQKKworRW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHRoZSB0ZXN0IGNvbnRhaW5lcjoKKy0gYENVQ1VNQkVSX0ZFQVRVUkVfRk9MREVSYCDigJQgcGF0aCB0byBHaGVya2luIGZlYXR1cmUgZmlsZXMKKy0gYEdSRU1MSU5fU0VSVkVSX1VSTGAg4oCUIHNlcnZlciBlbmRwb2ludCBmb3IgaW50ZWdyYXRpb24gdGVzdHMKKy0gYFJVTl9JTlRFR1JBVElPTl9URVNUUz10cnVlYAorLSBgUlVOX0JBU0lDX0FVVEhfSU5URUdSQVRJT05fVEVTVFM9dHJ1ZWAKKworIyMgTG9jYWwgRGV2ZWxvcG1lbnQKKworQWZ0ZXIgaW5zdGFsbGluZyBHbyBsb2NhbGx5OgorYGBgYmFzaAorY2QgZ3JlbWxpbi1nbworZ28gYnVpbGQgLi8uLi4KK2dvIHRlc3QgLi9kcml2ZXIvIC1ydW4gVGVzdE5hbWUKK2BgYAorCitGb3IgaW50ZWdyYXRpb24gdGVzdHMsIGEgcnVubmluZyBHcmVtbGluIFNlcnZlciBpcyByZXF1aXJlZC4KKworIyMgRXZhbHVhdGluZyBCdWlsZCBSZXN1bHRzCisKK1VzZSB0aGUgTWF2ZW4gZXhpdCBjb2RlIHRvIGRldGVybWluZSBwYXNzL2ZhaWw6CistIEV4aXQgYDBgIOKAlCBzdWNjZXNzCistIE5vbi16ZXJvIOKAlCBmYWlsdXJlOyBjaGVjayB0aGUgYGdvIHRlc3RgIG91dHB1dCBpbiB0aGUgTWF2ZW4gY29uc29sZQpkaWZmIC0tZ2l0IGEvLnNraWxscy90aW5rZXJwb3AtZGV2L3JlZmVyZW5jZXMvYnVpbGQtamF2YS5tZCBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2J1aWxkLWphdmEubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjMWJmOQotLS0gL2Rldi9udWxsCisrKyBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2J1aWxkLWphdmEubWQKQEAgLTAsMCArMSw2NyBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMgSmF2YSAvIENvcmUgTW9kdWxlIEJ1aWxkcworCisjIyBGdWxsIEJ1aWxkIChza2lwIHRlc3RzKQorCitXaGVuIG1vZHVsZXMgaGF2ZSB1bnJlc29sdmVkIGRlcGVuZGVuY3kgb3JkZXJpbmcgaXNzdWVzIChlLmcuLCBzaGFkZWQgamFycyBub3QgeWV0IGluc3RhbGxlZCwgYnJhbmNoZXMgY2hhbmdlZCwgZXRjLiksIAorYnVpbGQgdGhlIGVudGlyZSBwcm9qZWN0IGZpcnN0OgorCitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBUZXN0cworYGBgCisKKyMjIEJ1aWxkaW5nIGFuZCBUZXN0IFNwZWNpZmljIE1vZHVsZXMKKworQnVpbGQgYW5kIHRlc3QgYSBzaW5nbGUgbW9kdWxlOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDxtb2R1bGUtbmFtZT4KK2BgYAorCitFeGFtcGxlczoKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1wbCA6dGlua2VyZ3JhcGgtZ3JlbWxpbgorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLWNvcmUKK212biBjbGVhbiBpbnN0YWxsIC1wbCA6Z3JlbWxpbi1zZXJ2ZXIKK2BgYAorCitCdWlsZCBhbmQgdGVzdCBhIG1vZHVsZSBhbmQgaXRzIGRlcGVuZGVuY2llczoKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1wbCA6Z3JlbWxpbi1zZXJ2ZXIgLWFtCitgYGAKKworIyMgR3JlbWxpbiBTZXJ2ZXIKKworQnVpbGQgZ3JlbWxpbi1zZXJ2ZXIgKGNvbW1vbmx5IG5lZWRlZCBiZWZvcmUgR0xWIHRlc3RpbmcpOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLXNlcnZlciAtYW0gLURza2lwVGVzdHMKK2BgYAorCitSdW4gZ3JlbWxpbi1zZXJ2ZXIgaW50ZWdyYXRpb24gdGVzdHM6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tc2VydmVyIC1Ec2tpcEludGVncmF0aW9uVGVzdHM9ZmFsc2UKK2BgYAorCisjIyBJbnRlZ3JhdGlvbiBUZXN0cworCitCdWlsZCBhbmQgdGVzdCB3aXRoIGFsbCBpbnRlZ3JhdGlvbiB0ZXN0cyBhY3Jvc3MgdGhlIHByb2plY3Q6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPWZhbHNlCitgYGAKZGlmZiAtLWdpdCBhLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2J1aWxkLWphdmFzY3JpcHQubWQgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9idWlsZC1qYXZhc2NyaXB0Lm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2FkZGUKLS0tIC9kZXYvbnVsbAorKysgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9idWlsZC1qYXZhc2NyaXB0Lm1kCkBAIC0wLDAgKzEsMTcxIEBACis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworIyBKYXZhU2NyaXB0IC8gVHlwZVNjcmlwdCBHTFYgQnVpbGQgYW5kIFRlc3QKKworIyMgQXJjaGl0ZWN0dXJlCisKK2BncmVtbGluLWpzL2Agc2VydmVzIHR3byByb2xlcyBzaW11bHRhbmVvdXNseToKKworLSAqKk1hdmVuIHBhcmVudCBtb2R1bGUqKiAoYHBhY2thZ2luZz1wb21gKTogZGVjbGFyZXMgYGdyZW1saW4tamF2YXNjcmlwdGAsIGBncmVtbGluLW1jcGAsCisgIGFuZCBgZ3JlbWxpbnRgIGFzIGNoaWxkIG1vZHVsZXM7IHJ1bnMgYG5wbSBjaWAgb25jZSBhdCB0aGUgd29ya3NwYWNlIHJvb3QuCistICoqbnBtIHdvcmtzcGFjZSByb290Kio6IGBwYWNrYWdlLmpzb25gIGFuZCBgcGFja2FnZS1sb2NrLmpzb25gIGxpdmUgaGVyZTsgYWxsIHRocmVlCisgIHBhY2thZ2VzIHNoYXJlIGEgc2luZ2xlIGhvaXN0ZWQgYG5vZGVfbW9kdWxlcy9gLgorCitgYGAKK2dyZW1saW4tanMvCivilJzilIDilIAgcG9tLnhtbCAgICAgICAgICAgICAgICAgTWF2ZW4gcGFyZW50IOKAlCBydW5zIG5wbSBjaQor4pSc4pSA4pSAIHBhY2thZ2UuanNvbiAgICAgICAgICAgIG5wbSB3b3Jrc3BhY2Ugcm9vdAor4pSc4pSA4pSAIHBhY2thZ2UtbG9jay5qc29uICAgICAgIHNpbmdsZSBsb2NrZmlsZSBmb3IgYWxsIHBhY2thZ2VzCivilJzilIDilIAgbm9kZV9tb2R1bGVzLyAgICAgICAgICAgaG9pc3RlZCBkZXBlbmRlbmNpZXMgKGdpdGlnbm9yZWQpCivilJzilIDilIAgbm9kZS8gICAgICAgICAgICAgICAgICAgTm9kZS5qcyBydW50aW1lIGZyb20gZnJvbnRlbmQtbWF2ZW4tcGx1Z2luIChnaXRpZ25vcmVkKQor4pSc4pSA4pSAIGdyZW1saW4tamF2YXNjcmlwdC8gICAgIEpTIGRyaXZlciAobnBtOiAiZ3JlbWxpbiIpCivilJzilIDilIAgZ3JlbWxpbi1tY3AvICAgICAgICAgICAgR3JlbWxpbiBNQ1Agc2VydmVyIChucG06ICJncmVtbGluLW1jcCIpCivilJTilIDilIAgZ3JlbWxpbnQvICAgICAgICAgICAgICAgR3JlbWxpbiBxdWVyeSBmb3JtYXR0ZXIgKG5wbTogImdyZW1saW50IikKK2BgYAorCisjIyBSZXF1aXJlbWVudHMKKworLSAqKk5vZGUuanMgMjIrKiogLyAqKm5wbSAxMCsqKiDigJQgb3B0aW9uYWw7IE1hdmVuIGRvd25sb2FkcyBhIGxvY2FsIGNvcHkuCistICoqRG9ja2VyIGFuZCBEb2NrZXIgQ29tcG9zZSoqIOKAlCByZXF1aXJlZCBmb3IgaW50ZWdyYXRpb24gYW5kIGZlYXR1cmUgdGVzdHMuCistICoqTWF2ZW4qKiDigJQgcHJlZmVycmVkIG9yY2hlc3RyYXRpb24uCisKKyMjIE1hdmVuIEJ1aWxkIENvbW1hbmRzCisKK1J1biBmcm9tIHRoZSByZXBvc2l0b3J5IHJvb3QuCisKK0J1aWxkIGFsbCBKUyBwYWNrYWdlcyAocGFyZW50ICsgY2hpbGRyZW4gbXVzdCBiZSBsaXN0ZWQgZXhwbGljaXRseSk6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tanMsOmdyZW1saW4tamF2YXNjcmlwdCw6Z3JlbWxpbnQsOmdyZW1saW4tbWNwIC1Ec2tpcFRlc3RzCittdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tanMsOmdyZW1saW4tamF2YXNjcmlwdCw6Z3JlbWxpbnQsOmdyZW1saW4tbWNwICAjIHdpdGggdGVzdHMKK2BgYAorCitCdWlsZCBhIHNpbmdsZSBwYWNrYWdlOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLWphdmFzY3JpcHQgLURza2lwVGVzdHMKK212biBjbGVhbiBpbnN0YWxsIC1wbCA6Z3JlbWxpbi1tY3AgLURza2lwVGVzdHMKK212biBjbGVhbiBpbnN0YWxsIC1wbCA6Z3JlbWxpbnQgLURza2lwVGVzdHMKK2BgYAorCisqKmAtRHNraXBUZXN0c2AgYmVoYXZpb3I6KioKKy0gU2tpcHMgRG9ja2VyLWJhc2VkIGludGVncmF0aW9uLCB1bml0LCBhbmQgZmVhdHVyZSB0ZXN0cyBmb3IgYGdyZW1saW4tamF2YXNjcmlwdGAKKy0gU2tpcHMgYG5wbSBydW4gdmFsaWRhdGVgICh3aGljaCBpbmNsdWRlcyBgbnBtIHRlc3RgKSBmb3IgYGdyZW1saW4tbWNwYAorLSBTdGlsbCBydW5zIGBucG0gcnVuIGJ1aWxkYCBhbmQgYG5wbSBydW4gbGludGAgZm9yIGFsbCBtb2R1bGVzCisKK0Z1bGwgYnVpbGQgd2l0aCB0ZXN0cyAocmVxdWlyZXMgRG9ja2VyKToKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1wbCA6Z3JlbWxpbi1qYXZhc2NyaXB0CitgYGAKKworSWYgYnVpbGRpbmcgaW4gaXNvbGF0aW9uIGZhaWxzIGR1ZSB0byBhIG1pc3NpbmcgcGFyZW50OgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLWpzIC1Ec2tpcFRlc3RzCitgYGAKKworIyMgbnBtIENvbW1hbmRzCisKK1J1biBmcm9tIGBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9gIGFmdGVyIGBucG0gY2lgIGhhcyBiZWVuIHJ1biBmcm9tIGBncmVtbGluLWpzL2A6CisKK3wgQ29tbWFuZCAgICAgICAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IGBucG0gcnVuIHVuaXQtdGVzdGAgICAgICAgIHwgVW5pdCB0ZXN0cyBvbmx5IOKAlCBubyBzZXJ2ZXIgbmVlZGVkICAgICAgICAgfAorfCBgbnBtIHJ1biBpbnRlZ3JhdGlvbi10ZXN0YCB8IEludGVncmF0aW9uIHRlc3RzIOKAlCByZXF1aXJlcyBHcmVtbGluIFNlcnZlcnwKK3wgYG5wbSBydW4gZmVhdHVyZXNgICAgICAgICAgfCBCREQgZmVhdHVyZSB0ZXN0cyDigJQgcmVxdWlyZXMgR3JlbWxpbiBTZXJ2ZXJ8Cit8IGBucG0gcnVuIGJ1aWxkYCAgICAgICAgICAgIHwgQ29tcGlsZSBUeXBlU2NyaXB0IHRvIGBidWlsZC9gIChFU00gKyBDSlMpIHwKK3wgYG5wbSBydW4gbGludGAgICAgICAgICAgICAgfCBFU0xpbnQgY2hlY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBgbnBtIHJ1biBnZW5lcmF0ZWAgICAgICAgICB8IFJlZ2VuZXJhdGUgZ3JhbW1hciBmcm9tIGBHcmVtbGluLmc0YCAgICAgICB8CisKKyoqRG8gbm90IHJ1biBgbnBtIHRlc3RgIGRpcmVjdGx5Kiog4oCUIGl0IGNoYWlucyB1bml0IGFuZCBpbnRlZ3JhdGlvbiB0ZXN0cyBhbmQgd2lsbCBmYWlsCit3aXRob3V0IGEgc2VydmVyLiBVc2UgYG5wbSBydW4gdW5pdC10ZXN0YCBmb3IgZmFzdCBsb2NhbCBmZWVkYmFjay4KKworRm9yIGBncmVtbGluLW1jcGA6CisKK3wgQ29tbWFuZCAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Cit8IGBucG0gdGVzdGAgICAgICAgICAgIHwgUnVuIHVuaXQgdGVzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYG5wbSBydW4gdGVzdDppdGAgICAgfCBJbnRlZ3JhdGlvbiB0ZXN0cyAocmVxdWlyZXMgR3JlbWxpbiBTZXJ2ZXIpICAgICAgfAorfCBgbnBtIHJ1biBsaW50YCAgICAgICB8IEVTTGludCBjaGVjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBucG0gcnVuIGJ1aWxkYCAgICAgIHwgQ29tcGlsZSBUeXBlU2NyaXB0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYG5wbSBydW4gdmFsaWRhdGVgICAgfCBBbGwgY2hlY2tzIChmb3JtYXQsIGxpbnQsIHR5cGUtY2hlY2ssIHRlc3QpICAgICAgfAorCisjIyBucG0gV29ya3NwYWNlIFJ1bGVzCisKK0FsbCBucG0gY29tbWFuZHMgdGhhdCBhZmZlY3QgZGVwZW5kZW5jaWVzIG11c3QgYmUgcnVuIGZyb20gYGdyZW1saW4tanMvYCwgbm90IGZyb20KK2NoaWxkIHBhY2thZ2UgZGlyZWN0b3JpZXM6CisKK2BgYGJhc2gKK2NkIGdyZW1saW4tanMvCitucG0gaW5zdGFsbAorYGBgCisKK1NjcmlwdHMgaW5zaWRlIGNoaWxkIHBhY2thZ2VzIG11c3QgcmVmZXJlbmNlIGJpbmFyaWVzIGJ5IG5hbWUgKGBtb2NoYWAsIGB0c2NgLCBgZXNsaW50YCkKK3JhdGhlciB0aGFuIGJ5IHJlbGF0aXZlIHBhdGggKGAuL25vZGVfbW9kdWxlcy8uYmluLy4uLmApIGJlY2F1c2UgZGVwZW5kZW5jaWVzIGFyZSBob2lzdGVkLgorCisjIyBXaGF0IE5vdCB0byBDaGFuZ2UgV2l0aG91dCBDYXJlCisKKy0gKipgcGFja2FnZS1sb2NrLmpzb25gKiog4oCUIHJlZ2VuZXJhdGVkIGJ5IGBucG0gaW5zdGFsbGAgZnJvbSBgZ3JlbWxpbi1qcy9gLiBEbyBub3QgZWRpdAorICBtYW51YWxseS4gQWZ0ZXIgYW55IGBwYWNrYWdlLmpzb25gIGNoYW5nZSBpbiBhbnkgY2hpbGQsIHJ1biBgbnBtIGluc3RhbGxgIGZyb20KKyAgYGdyZW1saW4tanMvYC4KKy0gKipgZ3JlbWxpbi1qcy9wb20ueG1sYCoqIOKAlCB0aGUgYGZyb250ZW5kLW1hdmVuLXBsdWdpbmAgYmxvY2sgcnVucyBgbnBtIGNpYCB3aXRoCisgIGA8aW5oZXJpdGVkPmZhbHNlPC9pbmhlcml0ZWQ+YCBzbyBpdCBleGVjdXRlcyBvbmx5IG9uY2UgYXQgdGhpcyBsZXZlbC4gUmVtb3Zpbmcgb3IKKyAgbW92aW5nIGl0IHdpbGwgYnJlYWsgcGFydGlhbCBgLXBsYCBjaGlsZCBidWlsZHMuCistICoqV29ya3NwYWNlIG1lbWJlciBwYXRocyBpbiBgcGFja2FnZS5qc29uYCoqIOKAlCBtdXN0IG1hdGNoIHN1YmRpcmVjdG9yeSBuYW1lcy4gQ2hhbmdpbmcKKyAgdGhlbSByZXF1aXJlcyByZWdlbmVyYXRpbmcgdGhlIGxvY2tmaWxlIGFuZCB1cGRhdGluZyB0aGUgcG9tIGA8bW9kdWxlcz5gIGxpc3QuCisKKyMjIGdyZW1saW4tamF2YXNjcmlwdCBEaXJlY3RvcnkgU3RydWN0dXJlCisKK2BgYAorZ3JlbWxpbi1qYXZhc2NyaXB0Lwor4pSc4pSA4pSAIGxpYi8gICAgICAgICAgICAgICAgICAgIFR5cGVTY3JpcHQgc291cmNlCivilIIgICDilJTilIDilIAgbGFuZ3VhZ2UvCivilIIgICAgICAg4pSc4pSA4pSAIGdyYW1tYXIvICAgICAgICBHZW5lcmF0ZWQgZnJvbSBHcmVtbGluLmc0IOKAlCBkbyBub3QgZWRpdDsgZ2l0aWdub3JlZAor4pSCICAgICAgIOKUlOKUgOKUgCB0cmFuc2xhdG9yLyAgICAgR3JlbWxpbiBxdWVyeSB0cmFuc2xhdG9ycyAoSlMsIFB5dGhvbiwgR28sIC5ORVQsIEphdmEsIEdyb292eSkKK+KUnOKUgOKUgCB0ZXN0Lwor4pSCICAg4pSc4pSA4pSAIHVuaXQvICAgICAgICAgICAgICAgVW5pdCB0ZXN0cyAobW9jaGEpOyBubyBzZXJ2ZXIgbmVlZGVkCivilIIgICDilJzilIDilIAgaW50ZWdyYXRpb24vICAgICAgICBSZXF1aXJlcyBydW5uaW5nIEdyZW1saW4gU2VydmVyCivilIIgICDilJTilIDilIAgY3VjdW1iZXIvICAgICAgICAgICBCREQgZmVhdHVyZSB0ZXN0cwor4pSc4pSA4pSAIHNjcmlwdHMvCivilIIgICDilJzilIDilIAgcGF0Y2gtYW50bHI0bmcuanMgICBwb3N0aW5zdGFsbCDigJQgcGF0Y2hlcyBhbnRscjRuZyBmb3IgQ0pTCivilIIgICDilJTilIDilIAgZ3Jvb3Z5Lwor4pSCICAgICAgIOKUlOKUgOKUgCBnZW5lcmF0ZS5ncm9vdnkgR2VuZXJhdGVzIHRlc3QvY3VjdW1iZXIvZ3JlbWxpbi5qcyBmcm9tIGZlYXR1cmUgY29ycHVzCivilJzilIDilIAgZXhhbXBsZXMvICAgICAgICAgICAgICAgU3RhbmRhbG9uZSBleGFtcGxlczsgZXhjbHVkZWQgZnJvbSBFU0xpbnQKK+KUlOKUgOKUgCBidWlsZC8gICAgICAgICAgICAgICAgICBDb21waWxlZCBvdXRwdXQgKEVTTSArIENKUyk7IGdpdGlnbm9yZWQKK2BgYAorCisjIyBEb2NrZXIgUGVybWlzc2lvbnMKKworVGhlIGludGVncmF0aW9uIHRlc3QgY29udGFpbmVyIHJ1bnMgYXMgdGhlIGhvc3QgdXNlciAoYEhPU1RfVUlEYC9gSE9TVF9HSURgLCBkZWZhdWx0aW5nCit0byBgMTAwMDoxMDAwYCkuIElmIHlvdSBzZWUgYEVBQ0NFU2AgZXJyb3JzOgorCitgYGBiYXNoCitzdWRvIGNob3duIC1SICQod2hvYW1pKSAvcGF0aC90by90aW5rZXJwb3AvZ3JlbWxpbi1qcy8KK2BgYAorCitJZiB5b3VyIFVJRCBpcyBub3QgMTAwMDoKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1EaG9zdC51aWQ9JChpZCAtdSkgLURob3N0LmdpZD0kKGlkIC1nKSAtcGwgOmdyZW1saW4tamF2YXNjcmlwdAorYGBgCisKKyMjIEV2YWx1YXRpbmcgQnVpbGQgUmVzdWx0cworCitEbyBub3QgdXNlIGBncmVwYCBvciBgdGFpbGAgb24gTWF2ZW4gb3V0cHV0IHRvIGp1ZGdlIHBhc3MvZmFpbC4gVXNlIHRoZSBleGl0IGNvZGU6CistIEV4aXQgYDBgIOKAlCBzdWNjZXNzCistIE5vbi16ZXJvIOKAlCBmYWlsdXJlOyBpbnNwZWN0IERvY2tlciBjb250YWluZXIgbG9ncyBvciBNYXZlbiBgW0VSUk9SXWAgbGluZXMKKworVGVzdCBmYWlsdXJlcyBzdXJmYWNlIGRpcmVjdGx5IGluIHRoZSBNYXZlbiBjb25zb2xlIHZpYSBucG0ncyBleGl0IGNvZGUuCmRpZmYgLS1naXQgYS8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9idWlsZC1weXRob24ubWQgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9idWlsZC1weXRob24ubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5ZGFjYwotLS0gL2Rldi9udWxsCisrKyBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2J1aWxkLXB5dGhvbi5tZApAQCAtMCwwICsxLDEyNyBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMgUHl0aG9uIEdMViBCdWlsZCBhbmQgVGVzdAorCisjIyBSZXF1aXJlbWVudHMKKworLSAqKlB5dGhvbiAzLjkrKiog4oCUIG9wdGlvbmFsIGZvciBsb2NhbCBkZXZlbG9wbWVudDsgRG9ja2VyIGhhbmRsZXMgdGVzdCBleGVjdXRpb24gdmlhIE1hdmVuLgorLSAqKkRvY2tlciBhbmQgRG9ja2VyIENvbXBvc2UqKiDigJQgcmVxdWlyZWQgZm9yIHJ1bm5pbmcgdGVzdHMgdGhyb3VnaCBNYXZlbi4KKy0gKipNYXZlbioqIOKAlCBwcmVmZXJyZWQgYnVpbGQgb3JjaGVzdHJhdGlvbi4KKworIyMgQWN0aXZhdGlvbgorCitDcmVhdGUgYSBgLmdsdmAgc2VudGluZWwgZmlsZSB0byBpbmNsdWRlIFB5dGhvbiBpbiBzdGFuZGFyZCBidWlsZHM6CitgYGBiYXNoCit0b3VjaCBncmVtbGluLXB5dGhvbi8uZ2x2CitgYGAKKworT3IgdXNlIHRoZSBNYXZlbiBwcm9maWxlIGV4cGxpY2l0bHk6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtUGdsdi1weXRob24gLXBsIGdyZW1saW4tcHl0aG9uCitgYGAKKworIyMgTWF2ZW4gQnVpbGQgQ29tbWFuZHMKKworUnVuIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKworUnVuIGFsbCB0ZXN0czoKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXB5dGhvbiAtUGdsdi1weXRob24KK2BgYAorCitSdW4gb25seSB1bml0IHRlc3RzOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIGdyZW1saW4tcHl0aG9uIC1QZ2x2LXB5dGhvbiAtRHB5dGVzdEFyZ3M9InRlc3RzL3VuaXQiCitgYGAKKworUnVuIG9ubHkgaW50ZWdyYXRpb24gdGVzdHM6CitgYGBiYXNoCittdm4gY2xlYW4gaW5zdGFsbCAtcGwgZ3JlbWxpbi1weXRob24gLVBnbHYtcHl0aG9uIC1EcHl0ZXN0QXJncz0idGVzdHMvaW50ZWdyYXRpb24iCitgYGAKKworUnVuIG9ubHkgZmVhdHVyZSB0ZXN0czoKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXB5dGhvbiAtUGdsdi1weXRob24gLURyYWRpc2hBcmdzPSIgIgorYGBgCisKK1J1biBhIHNwZWNpZmljIHRlc3QgYnkgbmFtZToKK2BgYGJhc2gKK212biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXB5dGhvbiAtUGdsdi1weXRob24gLURweXRlc3RBcmdzPSItayB0ZXN0X25hbWUiCitgYGAKKworUnVuIGZlYXR1cmUgdGVzdHMgd2l0aCBzcGVjaWZpYyB0YWdzOgorYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLXBsIGdyZW1saW4tcHl0aG9uIC1QZ2x2LXB5dGhvbiAtRHJhZGlzaEFyZ3M9Ii10IEBzb21lX3RhZyIKK2BgYAorCisjIyBFdmFsdWF0aW5nIEJ1aWxkIFJlc3VsdHMKKworKipEbyBub3QqKiB1c2UgYGdyZXBgLCBgdGFpbGAsIG9yIHNpbWlsYXIgdGV4dC1zZWFyY2ggdG9vbHMgb24gTWF2ZW4gY29uc29sZSBvdXRwdXQgdG8KK2RldGVybWluZSBwYXNzL2ZhaWwuIE1hdmVuIG91dHB1dCBjYW4gYmUgbWlzbGVhZGluZyBiZWNhdXNlIHRlc3RzIHZhbGlkYXRlIGV4cGVjdGVkIGVycm9ycy4KKworRm9sbG93IHRoaXMgaGllcmFyY2h5OgorCisxLiAqKkNoZWNrIHRoZSBleGl0IGNvZGUuKiogRXhpdCBgMGAgPSBzdWNjZXNzLiBOb24temVybyA9IGZhaWx1cmUuCisyLiAqKkluc3BlY3QgWE1MIHJlcG9ydHMqKiBvbiBmYWlsdXJlLiBSZXBvcnRzIGFyZSBpbgorICAgYGdyZW1saW4tcHl0aG9uL3RhcmdldC9weXRob24zL3B5dGhvbi1yZXBvcnRzL2A6CisgICAtIGBURVNULW5hdGl2ZS1weXRob24ueG1sYCDigJQgdW5pdC9pbnRlZ3JhdGlvbiB0ZXN0cworICAgLSBgZmVhdHVyZS1ncmFwaGJpbmFyeS1yZXN1bHQueG1sYCDigJQgR3JhcGhCaW5hcnkgZmVhdHVyZSB0ZXN0cworICAgLSBgZmVhdHVyZS1ncmFwaGJpbmFyeS1wYXJhbXMtcmVzdWx0LnhtbGAg4oCUIEdyYXBoQmluYXJ5IHBhcmFtZXRlcml6ZWQKKyAgIC0gYGZlYXR1cmUtZ3JhcGhiaW5hcnktYnVsa2VkLXJlc3VsdC54bWxgIOKAlCBHcmFwaEJpbmFyeSBidWxrZWQKKyAgIC0gYGZlYXR1cmUtZ3JhcGhzb24tcmVzdWx0LnhtbGAg4oCUIEdyYXBoU09OIGZlYXR1cmUgdGVzdHMKKyAgIC0gYGZlYXR1cmUtZ3JhcGhzb24tcGFyYW1zLXJlc3VsdC54bWxgIOKAlCBHcmFwaFNPTiBwYXJhbWV0ZXJpemVkCisKK0ZlYXR1cmUgdGVzdCBYTUwgcmVwb3J0cyB3aWxsIG5vdCBiZSBwcmVzZW50IGlmIHVuaXQvaW50ZWdyYXRpb24gdGVzdHMgZmFpbC4KKworKipEbyBub3QqKiBpbnZlc3RpZ2F0ZSBhIGJ1aWxkIGZhaWx1cmUgYmV5b25kIHJlcG9ydGluZyB3aGF0IGZhaWxlZCB1bmxlc3MgYXNrZWQuCisKKyMjIE1hbnVhbCBUZXN0IEV4ZWN1dGlvbgorCitJZiB5b3UgbXVzdCBydW4gdGVzdHMgb3V0c2lkZSBNYXZlbiwgd29yayBmcm9tIGBncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vYDoKKworIyMjIEVudmlyb25tZW50IHNldHVwCitgYGBiYXNoCitweXRob24zIC1tIHZlbnYgLnZlbnYKK3NvdXJjZSAudmVudi9iaW4vYWN0aXZhdGUKK3BpcCBpbnN0YWxsIC0tdXBncmFkZSBwaXAKK3BpcCBpbnN0YWxsIC5bdGVzdCxrZXJiZXJvc10KK2BgYAorCisjIyMgR3JlbWxpbiBTZXJ2ZXIgbWFuYWdlbWVudAorCitGcm9tIGBncmVtbGluLXB5dGhvbi9gOgorYGBgYmFzaAorIyBTdGFydC9yZXN0YXJ0IHNlcnZlcgorZG9ja2VyIGNvbXBvc2UgZG93biBncmVtbGluLXNlcnZlci10ZXN0LXB5dGhvbgorZG9ja2VyIGNvbXBvc2UgdXAgLWQgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1weXRob24KKworIyBDaGVjayBzdGF0dXMgKHdhaXQgZm9yIGhlYWx0aHkpCitkb2NrZXIgY29tcG9zZSBwcyBncmVtbGluLXNlcnZlci10ZXN0LXB5dGhvbgorYGBgCisKKyMjIyBSdW5uaW5nIHRlc3RzIG1hbnVhbGx5CistIFVuaXQgdGVzdHM6IGBweXRlc3QgdGVzdHMvdW5pdC9gCistIEludGVncmF0aW9uIHRlc3RzOiBgcHl0ZXN0IHRlc3RzL2ludGVncmF0aW9uL2AKKy0gRmVhdHVyZSB0ZXN0czoKKyAgYGBgYmFzaAorICByYWRpc2ggLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL3JhZGlzaCBcCisgICAgLi4vLi4vLi4vLi4vZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMgXAorICAgIC0tdXNlci1kYXRhPSdzZXJpYWxpemVyPWFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbicKKyAgYGBgCmRpZmYgLS1naXQgYS8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9kZXYtZW52aXJvbm1lbnQtc2V0dXAubWQgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9kZXYtZW52aXJvbm1lbnQtc2V0dXAubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3YjY0YwotLS0gL2Rldi9udWxsCisrKyBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2Rldi1lbnZpcm9ubWVudC1zZXR1cC5tZApAQCAtMCwwICsxLDE0MCBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgU2V0dXAKKworVGhpcyBndWlkZSB3YWxrcyB0aHJvdWdoIHNldHRpbmcgdXAgYSBUaW5rZXJQb3AgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZnJvbSBhIGZyZXNoIGNsb25lLgorVGhlIGNhbm9uaWNhbCByZWZlcmVuY2UgaXMgYGRvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQuYXNjaWlkb2NgLgorCisjIyBQcmVyZXF1aXNpdGVzCisKKyMjIyBNaW5pbXVtIChKYXZhLW9ubHkgYnVpbGQpCisKKy0gKipKYXZhIDExIG9yIDE3Kiog4oCUIE9wZW5KREsgcmVjb21tZW5kZWQuIFVzZSBbU0RLTUFOIV0oaHR0cHM6Ly9zZGttYW4uaW8vKSB0byBtYW5hZ2UgdmVyc2lvbnMuCisgIE5vdGU6IHNvbWUgZGVlcCByZWZsZWN0aW9uIHJlcXVpcmVzIGAtLWFkZC1vcGVuc2AgSlZNIG9wdGlvbnMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaW4gdGhlIHBvbSBmaWxlcy4KKy0gKipNYXZlbiAzLjUuMysqKiDigJQgYWxzbyBtYW5hZ2VhYmxlIHZpYSBTREtNQU4uCisKK1dpdGgganVzdCBKYXZhIGFuZCBNYXZlbiB5b3UgY2FuIGJ1aWxkIEpWTSBtb2R1bGVzIGFuZCBnZXQgYSBjbGVhbiBgbXZuIGNsZWFuIGluc3RhbGxgLCBidXQKK0dMViBidWlsZHMgYW5kIG1hbnkgaW50ZWdyYXRpb24gdGVzdHMgd2lsbCBiZSBza2lwcGVkLgorCisjIyMgRnVsbCBlbnZpcm9ubWVudCAoYWxsIEdMVnMgYW5kIGludGVncmF0aW9uIHRlc3RzKQorCistICoqRG9ja2VyIGFuZCBEb2NrZXIgQ29tcG9zZSoqIOKAlCByZXF1aXJlZCBmb3IgYWxsIEdMViB0ZXN0IGV4ZWN1dGlvbi4gRG9ja2VyIERlc2t0b3AgaW5jbHVkZXMKKyAgYm90aC4gR0xWIHRlc3RzIHJ1biBpbnNpZGUgRG9ja2VyIGNvbnRhaW5lcnMsIHNvIGxvY2FsIGxhbmd1YWdlIHJ1bnRpbWVzIGFyZSBvcHRpb25hbCBmb3IKKyAgdGVzdCBleGVjdXRpb24gdmlhIE1hdmVuLgorLSAqKlB5dGhvbiAzLjEwKyoqIOKAlCBvcHRpb25hbCBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQ7IERvY2tlciBoYW5kbGVzIHRlc3QgZXhlY3V0aW9uLgorLSAqKk5vZGUuanMgMjIrIC8gbnBtIDEwKyoqIOKAlCBvcHRpb25hbDsgTWF2ZW4gZG93bmxvYWRzIGEgbG9jYWwgY29weSB2aWEgYGZyb250ZW5kLW1hdmVuLXBsdWdpbmAuCisgIENvbnNpZGVyIFtudm1dKGh0dHBzOi8vZ2l0aHViLmNvbS9udm0tc2gvbnZtKSBmb3IgdmVyc2lvbiBtYW5hZ2VtZW50LgorLSAqKi5ORVQgU0RLIDguMCsqKiDigJQgb3B0aW9uYWw7IERvY2tlciBoYW5kbGVzIHRlc3QgZXhlY3V0aW9uLgorLSAqKkdvIDEuMjUrKiog4oCUIG9wdGlvbmFsOyBEb2NrZXIgaGFuZGxlcyB0ZXN0IGV4ZWN1dGlvbi4KKworIyMgRW52aXJvbm1lbnQgVmVyaWZpY2F0aW9uCisKK1J1biB0aGUgaW5jbHVkZWQgY2hlY2sgc2NyaXB0IHRvIHZlcmlmeSB5b3VyIHNldHVwOgorCitgYGBiYXNoCitiYXNoIC5za2lsbHMvdGlua2VycG9wLWRldi9zY3JpcHRzL2NoZWNrLWVudi5zaAorYGBgCisKK1RoaXMgY2hlY2tzIGZvciBKYXZhLCBNYXZlbiwgRG9ja2VyLCBhbmQgb3B0aW9uYWxseSBQeXRob24sIE5vZGUuanMsIC5ORVQsIGFuZCBHby4KKworIyMgRmlyc3QgQnVpbGQKKworQWZ0ZXIgY2xvbmluZywgdmVyaWZ5IHRoZSBiYXNpYyBidWlsZCB3b3JrczoKKworYGBgYmFzaAorbXZuIGNsZWFuIGluc3RhbGwgLURza2lwVGVzdHMKK2BgYAorCitUaGlzIGJ1aWxkcyBhbGwgSlZNIG1vZHVsZXMuIEdMViBtb2R1bGVzIHdpbGwgYmUgc2tpcHBlZCB1bmxlc3MgYWN0aXZhdGVkIChzZWUgYmVsb3cpLgorCisjIyBBY3RpdmF0aW5nIEdMViBCdWlsZHMKKworRWFjaCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQgdXNlcyBhIGAuZ2x2YCBzZW50aW5lbCBmaWxlIHRvIHNpZ25hbCBNYXZlbiB0aGF0IHRoZSBHTFYKK3Nob3VsZCBiZSBidWlsdCBhcyBwYXJ0IG9mIGEgc3RhbmRhcmQgYG12biBjbGVhbiBpbnN0YWxsYC4gVGhlIGZpbGUgY2FuIGJlIGVtcHR5LgorCisjIyMgUHl0aG9uCitgYGBiYXNoCit0b3VjaCBncmVtbGluLXB5dGhvbi8uZ2x2CitgYGAKKworIyMjIEphdmFTY3JpcHQgLyBUeXBlU2NyaXB0CitObyBgLmdsdmAgZmlsZSBuZWVkZWQg4oCUIEpTIG1vZHVsZXMgYnVpbGQgYnkgZGVmYXVsdCB2aWEgdGhlIGBmcm9udGVuZC1tYXZlbi1wbHVnaW5gLgorVGVzdHMgcmVxdWlyZSBEb2NrZXIgYW5kIGFyZSBza2lwcGVkIHdpdGggYC1Ec2tpcFRlc3RzYC4KKworIyMjIC5ORVQKK0JvdGggYHNyY2AgYW5kIGB0ZXN0YCBkaXJlY3RvcmllcyBuZWVkIHRoZSBzZW50aW5lbDoKK2BgYGJhc2gKK3RvdWNoIGdyZW1saW4tZG90bmV0L3NyYy8uZ2x2Cit0b3VjaCBncmVtbGluLWRvdG5ldC90ZXN0Ly5nbHYKK2BgYAorCisjIyMgR28KK2BgYGJhc2gKK3RvdWNoIGdyZW1saW4tZ28vLmdsdgorYGBgCisKK09uY2UgYC5nbHZgIGZpbGVzIGFyZSBpbiBwbGFjZSwgYSBzdGFuZGFyZCBgbXZuIGNsZWFuIGluc3RhbGxgIHdpbGwgaW5jbHVkZSB0aG9zZSBHTFZzLgorVGhlIGAuZ2x2YCBmaWxlcyBhcmUgZ2l0aWdub3JlZC4KKworQWx0ZXJuYXRpdmVseSwgYWN0aXZhdGUgR0xWIGJ1aWxkcyBleHBsaWNpdGx5IHdpdGggTWF2ZW4gcHJvZmlsZXMgd2l0aG91dCBgLmdsdmAgZmlsZXM6CistIFB5dGhvbjogYG12biBjbGVhbiBpbnN0YWxsIC1QZ2x2LXB5dGhvbiAtcGwgOmdyZW1saW4tcHl0aG9uYAorLSAuTkVUOiBgbXZuIGNsZWFuIGluc3RhbGwgLVBncmVtbGluLWRvdG5ldCAtcGwgOmdyZW1saW4tZG90bmV0LDpncmVtbGluLWRvdG5ldC1zb3VyY2UsOmdyZW1saW4tZG90bmV0LXRlc3RzYAorLSBHbzogYG12biBjbGVhbiBpbnN0YWxsIC1QZ2x2LWdvIC1wbCA6Z3JlbWxpbi1nb2AKKworIyMgR3Jvb3Z5IC8gSXZ5IENvbmZpZ3VyYXRpb24KKworVGhlIEdyZW1saW4gQ29uc29sZSBpcyBHcm9vdnktYmFzZWQuIEZvciBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24gb3IgY29uc29sZSB0ZXN0aW5nIHdpdGgKK1NOQVBTSE9UIGRlcGVuZGVuY2llcywgY29uZmlndXJlIGB+Ly5ncm9vdnkvZ3JhcGVDb25maWcueG1sYDoKKworYGBgeG1sCis8aXZ5c2V0dGluZ3M+CisgIDxzZXR0aW5ncyBkZWZhdWx0UmVzb2x2ZXI9ImRvd25sb2FkR3JhcGVzIi8+CisgIDxyZXNvbHZlcnM+CisgICAgPGNoYWluIG5hbWU9ImRvd25sb2FkR3JhcGVzIj4KKyAgICAgIDxpYmlibGlvIG5hbWU9ImxvY2FsIiByb290PSJmaWxlOiR7dXNlci5ob21lfS8ubTIvcmVwb3NpdG9yeS8iIG0yY29tcGF0aWJsZT0idHJ1ZSIvPgorICAgICAgPGliaWJsaW8gbmFtZT0iY2VudHJhbCIgcm9vdD0iaHR0cHM6Ly9yZXBvMS5tYXZlbi5vcmcvbWF2ZW4yLyIgbTJjb21wYXRpYmxlPSJ0cnVlIi8+CisgICAgPC9jaGFpbj4KKyAgPC9yZXNvbHZlcnM+Cis8L2l2eXNldHRpbmdzPgorYGBgCisKKyMjIERvY2tlciBQZXJtaXNzaW9ucyAoTGludXgpCisKK0lmIHlvdSBlbmNvdW50ZXIgIlBlcm1pc3Npb24gZGVuaWVkIiBlcnJvcnM6CisKK2BgYGJhc2gKK3N1ZG8gZ3JvdXBhZGQgZG9ja2VyCitzdWRvIHVzZXJtb2QgLWFHIGRvY2tlciAkVVNFUgorbmV3Z3JwIGRvY2tlcgorc3VkbyBjaG1vZCA2NjYgL3Zhci9ydW4vZG9ja2VyLnNvY2sKK2BgYAorCisjIyBJREUgU2V0dXAKKworVGlua2VyUG9wIGRvZXMgbm90IG1hbmRhdGUgYSBzcGVjaWZpYyBJREUuIEltcG9ydCB0aGUgcm9vdCBgcG9tLnhtbGAgYXMgYSBNYXZlbiBwcm9qZWN0LgorRm9yIEFJIGNvZGluZyBhZ2VudCBjb25maWd1cmF0aW9uLCBzZWUgdGhlICJVc2luZyBBSSBDb2RpbmcgQWdlbnRzIiBzZWN0aW9uIGluCitgZG9jcy9zcmMvZGV2L2RldmVsb3Blci9kZXZlbG9wbWVudC1lbnZpcm9ubWVudC5hc2NpaWRvY2AuCisKKyMjIE5leHQgU3RlcHMKKworLSBTZWUgYHJlZmVyZW5jZXMvYnVpbGQtamF2YS5tZGAgZm9yIEphdmEgbW9kdWxlIGJ1aWxkIGRldGFpbHMKKy0gU2VlIHRoZSBHTFYtc3BlY2lmaWMgcmVmZXJlbmNlIGZpbGVzIGZvciBsYW5ndWFnZS1zcGVjaWZpYyB3b3JrZmxvd3MKKy0gU2VlIGByZWZlcmVuY2VzL2RvY3VtZW50YXRpb24ubWRgIGZvciBkb2N1bWVudGF0aW9uIGluc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvLnNraWxscy90aW5rZXJwb3AtZGV2L3JlZmVyZW5jZXMvZG9jdW1lbnRhdGlvbi5tZCBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2RvY3VtZW50YXRpb24ubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE5OTU1ZQotLS0gL2Rldi9udWxsCisrKyBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2RvY3VtZW50YXRpb24ubWQKQEAgLTAsMCArMSw0NSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMgRG9jdW1lbnRhdGlvbgorCisjIyBGb3JtYXQgYW5kIExvY2F0aW9uCisKK1RpbmtlclBvcCBkb2N1bWVudGF0aW9uIGlzIEFzY2lpRG9jLWJhc2VkIGFuZCBsaXZlcyB1bmRlciBgZG9jcy9zcmMvYDoKKworYGBgCitkb2NzL3NyYy8KK+KUnOKUgOKUgCByZWZlcmVuY2UvICAgICAgICAgIE1haW4gcmVmZXJlbmNlIGRvY3VtZW50YXRpb24KK+KUnOKUgOKUgCBkZXYvCivilIIgICDilJzilIDilIAgZGV2ZWxvcGVyLyAgICAgIERldmVsb3BlciBndWlkZXMgKGVudmlyb25tZW50LCBjb250cmlidXRpbmcsIHJlbGVhc2VzKQor4pSCICAg4pSc4pSA4pSAIHByb3ZpZGVyLyAgICAgICBHcmFwaCBwcm92aWRlciBkb2N1bWVudGF0aW9uLCBHcmVtbGluIHNlbWFudGljcwor4pSCICAg4pSc4pSA4pSAIGlvLyAgICAgICAgICAgICBJTyBhbmQgc2VyaWFsaXphdGlvbiBmb3JtYXRzCivilIIgICDilJTilIDilIAgZnV0dXJlLyAgICAgICAgIEZ1dHVyZSBwbGFucwor4pSc4pSA4pSAIHJlY2lwZXMvICAgICAgICAgICAgR3JlbWxpbiByZWNpcGVzIGFuZCBwYXR0ZXJucwor4pSc4pSA4pSAIHR1dG9yaWFscy8gICAgICAgICAgR2V0dGluZyBzdGFydGVkIHR1dG9yaWFscwor4pSU4pSA4pSAIHVwZ3JhZGUvICAgICAgICAgICAgVmVyc2lvbiB1cGdyYWRlIGd1aWRlcworYGBgCisKK0RvIG5vdCB1c2UgTWFya2Rvd24gaW4gdGhlIG1haW4gZG9jcyB0cmVlLiBVc2UgQXNjaWlEb2MuCisKKyMjIEFkZGluZyBvciBVcGRhdGluZyBEb2N1bWVudGF0aW9uCisKKzEuIFBsYWNlIG5ldyBjb250ZW50IGluIHRoZSBhcHByb3ByaWF0ZSBib29rIChyZWZlcmVuY2UsIGRldiwgcmVjaXBlcywgZXRjLikuCisyLiBVcGRhdGUgdGhlIHJlbGV2YW50IGBpbmRleC5hc2NpaWRvY2Agc28gdGhlIG5ldyBjb250ZW50IGlzIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KKzMuIEZvbGxvdyBleGlzdGluZyBwYXR0ZXJucyBmb3Igc2VjdGlvbiBzdHJ1Y3R1cmUgYW5kIGZvcm1hdHRpbmcuCmRpZmYgLS1naXQgYS8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9ncmVtbGluLW1jcC5tZCBiLy5za2lsbHMvdGlua2VycG9wLWRldi9yZWZlcmVuY2VzL2dyZW1saW4tbWNwLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MGZjOWIKLS0tIC9kZXYvbnVsbAorKysgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvcmVmZXJlbmNlcy9ncmVtbGluLW1jcC5tZApAQCAtMCwwICsxLDE1OSBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMgR3JlbWxpbiBNQ1AgU2VydmVyCisKK1RoZSBHcmVtbGluIE1DUCBzZXJ2ZXIgKGBncmVtbGluLW1jcGApIGlzIGFuIE1DUCAoTW9kZWwgQ29udGV4dCBQcm90b2NvbCkgc2VydmVyIHRoYXQKK2VuYWJsZXMgQUkgYXNzaXN0YW50cyB0byBpbnRlcmFjdCB3aXRoIEFwYWNoZSBUaW5rZXJQb3AtY29tcGF0aWJsZSBncmFwaCBkYXRhYmFzZXMuIEl0CitsaXZlcyBhdCBgZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9gIGFuZCBpcyBwdWJsaXNoZWQgYXMgdGhlIGBncmVtbGluLW1jcGAgbnBtIHBhY2thZ2UuCisKKyMjIFdoZW4gdG8gVXNlCisKK1VzZSBncmVtbGluLW1jcCB3aGVuIHlvdSBuZWVkIHRvOgorLSAqKlRyYW5zbGF0ZSBHcmVtbGluIHF1ZXJpZXMqKiBiZXR3ZWVuIGxhbmd1YWdlIHZhcmlhbnRzIChKYXZhU2NyaXB0LCBQeXRob24sIEdvLCAuTkVULAorICBKYXZhLCBHcm9vdnksIGNhbm9uaWNhbCwgYW5vbnltaXplZCkKKy0gKipGb3JtYXQgR3JlbWxpbiBxdWVyaWVzKiogdXNpbmcgZ3JlbWxpbnQgZm9yIGNvbnNpc3RlbnQgc3R5bGUKKy0gKipRdWVyeSBhIGdyYXBoIGRhdGFiYXNlKiogdGhyb3VnaCBuYXR1cmFsIGxhbmd1YWdlIHZpYSBhbiBBSSBhc3Npc3RhbnQKKy0gKipEaXNjb3ZlciBncmFwaCBzY2hlbWEqKiBpbmNsdWRpbmcgdmVydGV4L2VkZ2UgbGFiZWxzLCBwcm9wZXJ0aWVzLCBhbmQgZW51bSB2YWx1ZXMKKworIyMgQXZhaWxhYmxlIFRvb2xzCisKK3wgVG9vbCAgICAgICAgICAgICAgICAgICAgICAgICB8IFJlcXVpcmVzIFNlcnZlciB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCBgdHJhbnNsYXRlX2dyZW1saW5fcXVlcnlgICAgIHwgTm8gICAgICAgICAgICAgIHwgVHJhbnNsYXRlIEdyZW1saW4gYmV0d2VlbiBsYW5ndWFnZSB2YXJpYW50cyB8Cit8IGBmb3JtYXRfZ3JlbWxpbl9xdWVyeWAgICAgICAgfCBObyAgICAgICAgICAgICAgfCBGb3JtYXQgYSBHcmVtbGluIHF1ZXJ5IHdpdGggZ3JlbWxpbnQgICAgICAgfAorfCBgZ2V0X2dyYXBoX3N0YXR1c2AgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgIHwgQ2hlY2sgZGF0YWJhc2UgY29ubmVjdGl2aXR5ICAgICAgICAgICAgICAgIHwKK3wgYGdldF9ncmFwaF9zY2hlbWFgICAgICAgICAgICB8IFllcyAgICAgICAgICAgICB8IEdldCBjb21wbGV0ZSBncmFwaCBzdHJ1Y3R1cmUgICAgICAgICAgICAgICAgfAorfCBgcnVuX2dyZW1saW5fcXVlcnlgICAgICAgICAgIHwgWWVzICAgICAgICAgICAgIHwgRXhlY3V0ZSBhIEdyZW1saW4gdHJhdmVyc2FsICAgICAgICAgICAgICAgIHwKK3wgYHJlZnJlc2hfc2NoZW1hX2NhY2hlYCAgICAgICB8IFllcyAgICAgICAgICAgICB8IEZvcmNlIHJlZnJlc2ggb2YgY2FjaGVkIHNjaGVtYSAgICAgICAgICAgICB8CisKKyMjIE9mZmxpbmUgTW9kZQorCitXaGVuIGBHUkVNTElOX01DUF9FTkRQT0lOVGAgaXMgbm90IHNldCwgZ3JhcGggdG9vbHMgYXJlIG5vdCByZWdpc3RlcmVkIGJ1dAorYHRyYW5zbGF0ZV9ncmVtbGluX3F1ZXJ5YCBhbmQgYGZvcm1hdF9ncmVtbGluX3F1ZXJ5YCByZW1haW4gZnVsbHkgYXZhaWxhYmxlLiBUaGlzIGlzCit1c2VmdWwgZm9yIHF1ZXJ5IHRyYW5zbGF0aW9uIGFuZCBmb3JtYXR0aW5nIHdpdGhvdXQgYSBydW5uaW5nIGRhdGFiYXNlLgorCisjIyBDb25maWd1cmF0aW9uCisKKyMjIyBNQ1AgQ2xpZW50IENvbmZpZ3VyYXRpb24gKGUuZy4sIENsYXVkZSBEZXNrdG9wLCBDdXJzb3IsIFdpbmRzdXJmLCBLaXJvKQorCitVc2luZyB0aGUgcHVibGlzaGVkIHBhY2thZ2U6CitgYGBqc29uCit7CisgICJtY3BTZXJ2ZXJzIjogeworICAgICJncmVtbGluIjogeworICAgICAgImNvbW1hbmQiOiAibnB4IiwKKyAgICAgICJhcmdzIjogWyJncmVtbGluLW1jcCJdLAorICAgICAgImVudiI6IHsKKyAgICAgICAgIkdSRU1MSU5fTUNQX0VORFBPSU5UIjogImxvY2FsaG9zdDo4MTgyIiwKKyAgICAgICAgIkdSRU1MSU5fTUNQX0xPR19MRVZFTCI6ICJpbmZvIgorICAgICAgfQorICAgIH0KKyAgfQorfQorYGBgCisKK0Zyb20gc291cmNlIChhZnRlciBidWlsZGluZyk6CitgYGBqc29uCit7CisgICJtY3BTZXJ2ZXJzIjogeworICAgICJncmVtbGluIjogeworICAgICAgImNvbW1hbmQiOiAibm9kZSIsCisgICAgICAiYXJncyI6IFsiZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9kaXN0L3NlcnZlci5qcyJdLAorICAgICAgImVudiI6IHsKKyAgICAgICAgIkdSRU1MSU5fTUNQX0VORFBPSU5UIjogImxvY2FsaG9zdDo4MTgyIiwKKyAgICAgICAgIkdSRU1MSU5fTUNQX0xPR19MRVZFTCI6ICJpbmZvIgorICAgICAgfQorICAgIH0KKyAgfQorfQorYGBgCisKK0ZvciBvZmZsaW5lIG1vZGUgKHRyYW5zbGF0aW9uIGFuZCBmb3JtYXR0aW5nIG9ubHkpLCBvbWl0IGBHUkVNTElOX01DUF9FTkRQT0lOVGAuCisKKyMjIyBXaXRoIEF1dGhlbnRpY2F0aW9uCitgYGBqc29uCit7CisgICJtY3BTZXJ2ZXJzIjogeworICAgICJncmVtbGluIjogeworICAgICAgImNvbW1hbmQiOiAibnB4IiwKKyAgICAgICJhcmdzIjogWyJncmVtbGluLW1jcCJdLAorICAgICAgImVudiI6IHsKKyAgICAgICAgIkdSRU1MSU5fTUNQX0VORFBPSU5UIjogInlvdXItc2VydmVyLmNvbTo4MTgyL2ciLAorICAgICAgICAiR1JFTUxJTl9NQ1BfVVNFUk5BTUUiOiAieW91ci11c2VybmFtZSIsCisgICAgICAgICJHUkVNTElOX01DUF9QQVNTV09SRCI6ICJ5b3VyLXBhc3N3b3JkIiwKKyAgICAgICAgIkdSRU1MSU5fTUNQX1VTRV9TU0wiOiAidHJ1ZSIKKyAgICAgIH0KKyAgICB9CisgIH0KK30KK2BgYAorCisjIyMgRW52aXJvbm1lbnQgVmFyaWFibGVzCisKK3wgVmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJlcXVpcmVkIHwgRGVmYXVsdCB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgYEdSRU1MSU5fTUNQX0VORFBPSU5UYCAgICAgICAgICAgICAgIHwgTm8gICAgICAgfCDigJQgICAgICAgfCBTZXJ2ZXIgZW5kcG9pbnQgKGhvc3Q6cG9ydFsvZ10pICB8Cit8IGBHUkVNTElOX01DUF9VU0VfU1NMYCAgICAgICAgICAgICAgICB8IE5vICAgICAgIHwgZmFsc2UgICB8IEVuYWJsZSBTU0wvVExTICAgICAgICAgICAgICAgICAgIHwKK3wgYEdSRU1MSU5fTUNQX1VTRVJOQU1FYCAgICAgICAgICAgICAgIHwgTm8gICAgICAgfCDigJQgICAgICAgfCBBdXRoZW50aWNhdGlvbiB1c2VybmFtZSAgICAgICAgICB8Cit8IGBHUkVNTElOX01DUF9QQVNTV09SRGAgICAgICAgICAgICAgICB8IE5vICAgICAgIHwg4oCUICAgICAgIHwgQXV0aGVudGljYXRpb24gcGFzc3dvcmQgICAgICAgICAgfAorfCBgR1JFTUxJTl9NQ1BfSURMRV9USU1FT1VUYCAgICAgICAgICAgfCBObyAgICAgICB8IDMwMCAgICAgfCBDb25uZWN0aW9uIHRpbWVvdXQgKHNlY29uZHMpICAgICB8Cit8IGBHUkVNTElOX01DUF9MT0dfTEVWRUxgICAgICAgICAgICAgICB8IE5vICAgICAgIHwgaW5mbyAgICB8IExvZ2dpbmc6IGVycm9yLCB3YXJuLCBpbmZvLCBkZWJ1Z3wKK3wgYEdSRU1MSU5fTUNQX0VOVU1fRElTQ09WRVJZX0VOQUJMRURgIHwgTm8gICAgICAgfCB0cnVlICAgIHwgU21hcnQgZW51bSBkZXRlY3Rpb24gICAgICAgICAgICAgfAorfCBgR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTERgIHwgTm8gICB8IDEwICAgICAgfCBNYXggZGlzdGluY3QgdmFsdWVzIGZvciBlbnVtICAgICB8Cit8IGBHUkVNTElOX01DUF9FTlVNX1BST1BFUlRZX0RFTllMSVNUYCB8IE5vICAgICAgIHwg4oCUICAgICAgIHwgUHJvcGVydGllcyB0byBleGNsdWRlIGZyb20gZW51bXMgfAorCisjIyBUcmFuc2xhdGlvbgorCitUaGUgYHRyYW5zbGF0ZV9ncmVtbGluX3F1ZXJ5YCB0b29sIHN1cHBvcnRzIHRoZXNlIHRhcmdldHM6CitgY2Fub25pY2FsYCwgYGphdmFzY3JpcHRgLCBgcHl0aG9uYCwgYGdvYCwgYGRvdG5ldGAsIGBqYXZhYCwgYGdyb292eWAsIGBhbm9ueW1pemVkYAorCitUaGUgb3B0aW9uYWwgYHNvdXJjZWAgcGFyYW1ldGVyIGNvbnRyb2xzIG5vcm1hbGl6YXRpb246CistIE9taXQgb3IgYGF1dG9gIChkZWZhdWx0KTogbWVjaGFuaWNhbCBub3JtYWxpemF0aW9uICsgTExNIG5vcm1hbGl6YXRpb24gdmlhIE1DUCBzYW1wbGluZworLSBgY2Fub25pY2FsYDogc2tpcCBub3JtYWxpemF0aW9uIChpbnB1dCBtdXN0IGJlIGNhbm9uaWNhbCBHcmVtbGluIEFOVExSIGdyYW1tYXIpCisKKyMjIFRlc3Rpbmcgd2l0aCBNQ1AgSW5zcGVjdG9yCisKK0EgZmFzdCB3YXkgdG8gdGVzdCBncmVtbGluLW1jcCBhZnRlciBidWlsZGluZzoKK2BgYGJhc2gKK25weCBAbW9kZWxjb250ZXh0cHJvdG9jb2wvaW5zcGVjdG9yIFwKKyAgbm9kZSBncmVtbGluLWpzL2dyZW1saW4tbWNwL2Rpc3Qvc2VydmVyLmpzIFwKKyAgLWUgR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9bG9jYWxob3N0OjgxODIvZyBcCisgIC1lIEdSRU1MSU5fTUNQX0xPR19MRVZFTD1pbmZvCitgYGAKKworVGhpcyBzdGFydHMgdGhlIE1DUCBzZXJ2ZXIgYW5kIG9wZW5zIGEgYnJvd3Nlci1iYXNlZCB0b29sIGZvciBpbnRlcmFjdGluZyB3aXRoIGl0LgorCisjIyBCdWlsZGluZyBncmVtbGluLW1jcAorCitTZWUgYHJlZmVyZW5jZXMvYnVpbGQtamF2YXNjcmlwdC5tZGAgZm9yIGZ1bGwgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBRdWljayByZWZlcmVuY2U6CisKK2BgYGJhc2gKKyMgQnVpbGQgb25seQorbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLW1jcCAtRHNraXBUZXN0cworCisjIEJ1aWxkIGFuZCB0ZXN0Cittdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tbWNwCisKKyMgbnBtIGNvbW1hbmRzIChmcm9tIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvKQorbnBtIHRlc3QgICAgICAgICAgICAgICAgICAgICMgVW5pdCB0ZXN0cworbnBtIHJ1biB0ZXN0Oml0ICAgICAgICAgICAgICMgSW50ZWdyYXRpb24gdGVzdHMgKHJlcXVpcmVzIHNlcnZlcikKK25wbSBydW4gbGludCAgICAgICAgICAgICAgICAjIExpbnRpbmcKK25wbSBydW4gdmFsaWRhdGUgICAgICAgICAgICAjIEFsbCBjaGVja3MKK2BgYApkaWZmIC0tZ2l0IGEvLnNraWxscy90aW5rZXJwb3AtZGV2L3NjcmlwdHMvY2hlY2stZW52LnNoIGIvLnNraWxscy90aW5rZXJwb3AtZGV2L3NjcmlwdHMvY2hlY2stZW52LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzOWZlM2IKLS0tIC9kZXYvbnVsbAorKysgYi8uc2tpbGxzL3RpbmtlcnBvcC1kZXYvc2NyaXB0cy9jaGVjay1lbnYuc2gKQEAgLTAsMCArMSwxNTMgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBWZXJpZnkgVGlua2VyUG9wIGRldmVsb3BtZW50IGVudmlyb25tZW50IHByZXJlcXVpc2l0ZXMuCisjIFVzYWdlOiBiYXNoIC5za2lsbHMvdGlua2VycG9wLWRldi9zY3JpcHRzL2NoZWNrLWVudi5zaAorCitzZXQgLXVvIHBpcGVmYWlsCisKK1JFRD0nXDAzM1swOzMxbScKK0dSRUVOPSdcMDMzWzA7MzJtJworWUVMTE9XPSdcMDMzWzA7MzNtJworTkM9J1wwMzNbMG0nCisKK3Bhc3M9MAord2Fybj0wCitmYWlsPTAKKworb2soKSAgIHsgZWNobyAtZSAiICAke0dSRUVOfeKckyR7TkN9ICQxIjsgcGFzcz0kKChwYXNzICsgMSkpOyB9Citza2lwKCkgeyBlY2hvIC1lICIgICR7WUVMTE9XfeKXiyR7TkN9ICQxIjsgd2Fybj0kKCh3YXJuICsgMSkpOyB9CitiYWQoKSAgeyBlY2hvIC1lICIgICR7UkVEfeKclyR7TkN9ICQxIjsgZmFpbD0kKChmYWlsICsgMSkpOyB9CisKK2VjaG8gIlRpbmtlclBvcCBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBDaGVjayIKK2VjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCitlY2hvICIiCisKKyMgLS0tIEphdmEgLS0tCitlY2hvICJDb3JlIHByZXJlcXVpc2l0ZXM6IgoraWYgY29tbWFuZCAtdiBqYXZhICY+L2Rldi9udWxsOyB0aGVuCisgICAgamF2YV92ZXJzaW9uPSQoamF2YSAtdmVyc2lvbiAyPiYxIHwgaGVhZCAtMSB8IHNlZCAncy8uKiJcKC4qXCkiLiovXDEvJyB8IGN1dCAtZC4gLWYxKQorICAgIGlmIFtbICIkamF2YV92ZXJzaW9uIiAtZXEgMTEgfHwgIiRqYXZhX3ZlcnNpb24iIC1lcSAxNyBdXTsgdGhlbgorICAgICAgICBvayAiSmF2YSAkamF2YV92ZXJzaW9uICgxMSBvciAxNyByZXF1aXJlZCkiCisgICAgZWxpZiBbWyAiJGphdmFfdmVyc2lvbiIgLWd0IDE3IF1dOyB0aGVuCisgICAgICAgIGJhZCAiSmF2YSAkamF2YV92ZXJzaW9uIGZvdW5kIOKAlCBvbmx5IEphdmEgMTEgb3IgMTcgYXJlIHN1cHBvcnRlZCAodXNlIHNka21hbi5pbyB0byBzd2l0Y2gpIgorICAgIGVsc2UKKyAgICAgICAgYmFkICJKYXZhICRqYXZhX3ZlcnNpb24gZm91bmQg4oCUIHZlcnNpb24gMTEgb3IgMTcgcmVxdWlyZWQgKHVzZSBzZGttYW4uaW8gdG8gaW5zdGFsbCkiCisgICAgZmkKK2Vsc2UKKyAgICBiYWQgIkphdmEgbm90IGZvdW5kIOKAlCBpbnN0YWxsIEphdmEgMTEgb3IgMTcgKHVzZSBzZGttYW4uaW8pIgorZmkKKworIyAtLS0gTWF2ZW4gLS0tCitpZiBjb21tYW5kIC12IG12biAmPi9kZXYvbnVsbDsgdGhlbgorICAgIG12bl92ZXJzaW9uPSQobXZuIC0tdmVyc2lvbiAyPi9kZXYvbnVsbCB8IGhlYWQgLTEgfCBncmVwIC1vRSAnWzAtOV0rXC5bMC05XStcLlswLTldKycgfCBoZWFkIC0xKQorICAgIG9rICJNYXZlbiAkbXZuX3ZlcnNpb24gKDMuNS4zKyByZXF1aXJlZCkiCitlbHNlCisgICAgYmFkICJNYXZlbiBub3QgZm91bmQg4oCUIGluc3RhbGwgTWF2ZW4gMy41LjMrICh0cnkgc2RrbWFuLmlvKSIKK2ZpCisKKyMgLS0tIERvY2tlciAtLS0KK2lmIGNvbW1hbmQgLXYgZG9ja2VyICY+L2Rldi9udWxsOyB0aGVuCisgICAgaWYgZG9ja2VyIGluZm8gJj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgb2sgIkRvY2tlciBpbnN0YWxsZWQgYW5kIHJ1bm5pbmciCisgICAgZWxzZQorICAgICAgICBiYWQgIkRvY2tlciBpbnN0YWxsZWQgYnV0IG5vdCBydW5uaW5nIOKAlCBzdGFydCBEb2NrZXIgRGVza3RvcCBvciB0aGUgZGFlbW9uIgorICAgIGZpCitlbHNlCisgICAgYmFkICJEb2NrZXIgbm90IGZvdW5kIOKAlCBpbnN0YWxsIERvY2tlciBEZXNrdG9wIChpbmNsdWRlcyBDb21wb3NlKSIKK2ZpCisKKyMgLS0tIERvY2tlciBDb21wb3NlIC0tLQoraWYgZG9ja2VyIGNvbXBvc2UgdmVyc2lvbiAmPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgb2sgIkRvY2tlciBDb21wb3NlIGF2YWlsYWJsZSIKK2VsaWYgY29tbWFuZCAtdiBkb2NrZXItY29tcG9zZSAmPi9kZXYvbnVsbDsgdGhlbgorICAgIG9rICJEb2NrZXIgQ29tcG9zZSAoc3RhbmRhbG9uZSkgYXZhaWxhYmxlIgorZWxzZQorICAgIHNraXAgIkRvY2tlciBDb21wb3NlIG5vdCBmb3VuZCDigJQgbmVlZGVkIGZvciBHTFYgdGVzdHMiCitmaQorCitlY2hvICIiCitlY2hvICJPcHRpb25hbCAoR0xWIGRldmVsb3BtZW50KToiCisKKyMgLS0tIFB5dGhvbiAtLS0KK2lmIGNvbW1hbmQgLXYgcHl0aG9uMyAmPi9kZXYvbnVsbDsgdGhlbgorICAgIHB5X3ZlcnNpb249JChweXRob24zIC0tdmVyc2lvbiAyPiYxIHwgZ3JlcCAtb0UgJ1swLTldK1wuWzAtOV0rJykKKyAgICBvayAiUHl0aG9uICRweV92ZXJzaW9uICgzLjEwKyByZWNvbW1lbmRlZCBmb3IgZ3JlbWxpbi1weXRob24gbG9jYWwgZGV2KSIKK2Vsc2UKKyAgICBza2lwICJQeXRob24gMyBub3QgZm91bmQg4oCUIERvY2tlciBoYW5kbGVzIHRlc3QgZXhlY3V0aW9uLCBidXQgbG9jYWwgZGV2IG5lZWRzIGl0IgorZmkKKworIyAtLS0gTm9kZS5qcyAtLS0KK2lmIGNvbW1hbmQgLXYgbm9kZSAmPi9kZXYvbnVsbDsgdGhlbgorICAgIG5vZGVfdmVyc2lvbj0kKG5vZGUgLS12ZXJzaW9uIDI+L2Rldi9udWxsIHwgc2VkICdzL3YvLycpCisgICAgb2sgIk5vZGUuanMgJG5vZGVfdmVyc2lvbiAoMjIrIHJlY29tbWVuZGVkIGZvciBncmVtbGluLWpzIGxvY2FsIGRldikiCitlbHNlCisgICAgc2tpcCAiTm9kZS5qcyBub3QgZm91bmQg4oCUIE1hdmVuIGRvd25sb2FkcyBhIGxvY2FsIGNvcHkgYXV0b21hdGljYWxseSIKK2ZpCisKKyMgLS0tIC5ORVQgU0RLIC0tLQoraWYgY29tbWFuZCAtdiBkb3RuZXQgJj4vZGV2L251bGw7IHRoZW4KKyAgICBkb3RuZXRfdmVyc2lvbj0kKGRvdG5ldCAtLXZlcnNpb24gMj4vZGV2L251bGwpCisgICAgb2sgIi5ORVQgU0RLICRkb3RuZXRfdmVyc2lvbiAoOC4wKyByZWNvbW1lbmRlZCBmb3IgZ3JlbWxpbi1kb3RuZXQgbG9jYWwgZGV2KSIKK2Vsc2UKKyAgICBza2lwICIuTkVUIFNESyBub3QgZm91bmQg4oCUIERvY2tlciBoYW5kbGVzIHRlc3QgZXhlY3V0aW9uIgorZmkKKworIyAtLS0gR28gLS0tCitpZiBjb21tYW5kIC12IGdvICY+L2Rldi9udWxsOyB0aGVuCisgICAgZ29fdmVyc2lvbj0kKGdvIHZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwIC1vRSAnWzAtOV0rXC5bMC05XSsoXC5bMC05XSspPycpCisgICAgb2sgIkdvICRnb192ZXJzaW9uICgxLjI1KyByZWNvbW1lbmRlZCBmb3IgZ3JlbWxpbi1nbyBsb2NhbCBkZXYpIgorZWxzZQorICAgIHNraXAgIkdvIG5vdCBmb3VuZCDigJQgRG9ja2VyIGhhbmRsZXMgdGVzdCBleGVjdXRpb24iCitmaQorCitlY2hvICIiCitlY2hvICJHTFYgYWN0aXZhdGlvbiBzdGF0dXM6IgorCisjIC0tLSAuZ2x2IHNlbnRpbmVsIGZpbGVzIC0tLQorY2hlY2tfZ2x2KCkgeworICAgIGxvY2FsIG5hbWU9IiQxIgorICAgIHNoaWZ0CisgICAgbG9jYWwgZm91bmQ9ZmFsc2UKKyAgICBmb3IgZiBpbiAiJEAiOyBkbworICAgICAgICBpZiBbWyAtZiAiJGYiIF1dOyB0aGVuCisgICAgICAgICAgICBmb3VuZD10cnVlCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIGlmICRmb3VuZDsgdGhlbgorICAgICAgICBvayAiJG5hbWUg4oCUIGFjdGl2YXRlZCAoLmdsdiBwcmVzZW50KSIKKyAgICBlbHNlCisgICAgICAgIHNraXAgIiRuYW1lIOKAlCBub3QgYWN0aXZhdGVkIChjcmVhdGUgLmdsdiB0byBlbmFibGUgaW4gc3RhbmRhcmQgYnVpbGRzKSIKKyAgICBmaQorfQorCitjaGVja19nbHYgImdyZW1saW4tcHl0aG9uIiAiZ3JlbWxpbi1weXRob24vLmdsdiIKK2NoZWNrX2dsdiAiZ3JlbWxpbi1kb3RuZXQiICJncmVtbGluLWRvdG5ldC9zcmMvLmdsdiIgImdyZW1saW4tZG90bmV0L3Rlc3QvLmdsdiIKK2NoZWNrX2dsdiAiZ3JlbWxpbi1nbyIgImdyZW1saW4tZ28vLmdsdiIKKworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2VjaG8gLWUgIlJlc3VsdHM6ICR7R1JFRU59JHBhc3MgcGFzc2VkJHtOQ30sICR7WUVMTE9XfSR3YXJuIHNraXBwZWQke05DfSwgJHtSRUR9JGZhaWwgZmFpbGVkJHtOQ30iCisKK2lmIFtbICRmYWlsIC1ndCAwIF1dOyB0aGVuCisgICAgZWNobyAiIgorICAgIGVjaG8gIkZpeCB0aGUgZmFpbGVkIGl0ZW1zIGFib3ZlIGJlZm9yZSBidWlsZGluZy4gU2VlIHJlZmVyZW5jZXMvZGV2LWVudmlyb25tZW50LXNldHVwLm1kIgorICAgIGV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL0FHRU5UUy5tZCBiL0FHRU5UUy5tZAppbmRleCA0Y2Q3ZDliLi40Mjg2ZmU2IDEwMDY0NAotLS0gYS9BR0VOVFMubWQKKysrIGIvQUdFTlRTLm1kCkBAIC0xLDI0NCArMSw2OCBAQAogIyBBR0VOVFMubWQKIAotWW91IGFyZSBhIFRpbmtlclBvcCBkZXZlbG9wZXIgd29ya2luZyBhY3Jvc3MgdGhlIGVudGlyZSBtb25vcmVwb+KAlGNvZGUsIHRlc3RzLCBkb2NzLCBhbmQgd2Vic2l0ZSB0byBpbXBsZW1lbnQsIAotbWFpbnRhaW4sIGFuZCB2YWxpZGF0ZSBBcGFjaGUgVGlua2VyUG9w4oCZcyBncmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGFuZCBpdHMgbXVsdGktbGFuZ3VhZ2UgR3JlbWxpbiBlY29zeXN0ZW0uCitZb3UgYXJlIGEgVGlua2VyUG9wIGRldmVsb3BlciB3b3JraW5nIGFjcm9zcyB0aGUgZW50aXJlIG1vbm9yZXBv4oCUY29kZSwgdGVzdHMsIGRvY3MsIGFuZCB3ZWJzaXRlIHRvIGltcGxlbWVudCwKK21haW50YWluLCBhbmQgdmFsaWRhdGUgQXBhY2hlIFRpbmtlclBvcCdzIGdyYXBoIGNvbXB1dGluZyBmcmFtZXdvcmsgYW5kIGl0cyBtdWx0aS1sYW5ndWFnZSBHcmVtbGluIGVjb3N5c3RlbS4KKworIyMgUHJpbWFyeSBHdWlkYW5jZTogQWdlbnQgU2tpbGxzCisKK1RoaXMgcmVwb3NpdG9yeSBwcm92aWRlcyBkZXZlbG9wbWVudCBndWlkYW5jZSBhcyBhbiBbQWdlbnQgU2tpbGxdKGh0dHBzOi8vYWdlbnRza2lsbHMuaW8pIG5hbWVkCitgdGlua2VycG9wLWRldmAuIElmIHlvdXIgdG9vbCBzdXBwb3J0cyBBZ2VudCBTa2lsbHMsICoqYWN0aXZhdGUgdGhhdCBza2lsbCoqIGZvciBkZXRhaWxlZCwKK3Rhc2stc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zIGNvdmVyaW5nIGJ1aWxkIHJlY2lwZXMsIHRlc3QgZXZhbHVhdGlvbiwgY29kaW5nIGNvbnZlbnRpb25zLCBhbmQKK3JlZmVyZW5jZSBtYXRlcmlhbCBmb3IgZWFjaCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQuCisKK0lmIHlvdXIgdG9vbCBkb2VzIG5vdCBkaXNjb3ZlciB0aGUgc2tpbGwgYXV0b21hdGljYWxseSwgcnVuIGBiaW4vYWdlbnQtc2V0dXAuc2ggLS1saXN0YCB0bworc2VlIGhvdyB0byBjb25maWd1cmUgaXQsIG9yIGBiaW4vYWdlbnQtc2V0dXAuc2ggPGFnZW50PmAgdG8gc2V0IHVwIHRoZSBpbnRlZ3JhdGlvbi4KKworIyMgQ2Fub25pY2FsIERvY3VtZW50YXRpb24KKworVGhlc2UgbG9jYWwgZG9jdW1lbnRzIGFyZSBhdXRob3JpdGF0aXZlLiBJZiB0aGlzIGZpbGUgYXBwZWFycyB0byBjb250cmFkaWN0IHRoZW0sIHRyZWF0IHRoZW0gYXMgY2Fub25pY2FsLgogCiAtIGBSRUFETUUubWRgCiAtIGBDT05UUklCVVRJTkcubWRgCiAtIERldmVsb3BlciBkb2N1bWVudGF0aW9uIGF0IGBkb2NzL3NyYy9kZXYvKipgCiAKLVRoaXMgZmlsZSBtdXN0IG5vdCBjb250cmFkaWN0IHRob3NlIGRvY3VtZW50cy4gSWYgaXQgYXBwZWFycyB0bywgdHJlYXQgdGhlbSBhcyBjYW5vbmljYWwgYW5kIHVwZGF0ZSB0aGlzIGZpbGUgCi1hY2NvcmRpbmdseS4KLQogIyMgTGljZW5zaW5nIGFuZCBQcm92ZW5hbmNlCiAKLUFwYWNoZSBUaW5rZXJQb3AgaXMgbGljZW5zZWQgdW5kZXIgQXBhY2hlIExpY2Vuc2UgMi4wLiBDb250cmlidXRpb25zIG11c3QgbWVldCB0aGUKK0FwYWNoZSBUaW5rZXJQb3AgaXMgbGljZW5zZWQgdW5kZXIgQXBhY2hlIExpY2Vuc2UgMi4wLiBDb250cmlidXRpb25zIG11c3QgbWVldCB0aGUgCiBbQVNGJ3MgR2VuZXJhdGl2ZSBUb29saW5nIGd1aWRhbmNlXShodHRwczovL3d3dy5hcGFjaGUub3JnL2xlZ2FsL2dlbmVyYXRpdmUtdG9vbGluZy5odG1sKS4gSW4gcGFydGljdWxhcjoKIAotKiAqRG8gbm90IGNvcHkgdmVyYmF0aW0gZnJvbSBpbmNvbXBhdGlibHkgbGljZW5zZWQgc291cmNlcy4qIFRoaXMgaW5jbHVkZXMgR1BMIC8gQUdQTCAvIExHUEwgY29kZSwgcHJvcHJpZXRhcnkgY29kZSwKLSAgdW5saWNlbnNlZCBzbmlwcGV0cywgYW5kIFN0YWNrIE92ZXJmbG93IC8gYmxvZyAvIGZvcnVtIGV4Y2VycHRzIHdob3NlIGxpY2Vuc2luZyBpcyB1bmNsZWFyLiBSZWltcGxlbWVudCBmcm9tCi0gIHNwZWNpZmljYXRpb25zLCBzdGFuZGFyZHMsIG9yIEFwYWNoZS1jb21wYXRpYmxlIHNvdXJjZXMgKHNlZSB0aGUgQVNGIDNyZCBQYXJ0eSBMaWNlbnNpbmcgUG9saWN5KS4KKyogKkRvIG5vdCBjb3B5IHZlcmJhdGltIGZyb20gaW5jb21wYXRpYmx5IGxpY2Vuc2VkIHNvdXJjZXMuKiBUaGlzIGluY2x1ZGVzIEdQTCAvIEFHUEwgLyBMR1BMIGNvZGUsIHByb3ByaWV0YXJ5IGNvZGUsIAordW5saWNlbnNlZCBzbmlwcGV0cywgYW5kIFN0YWNrIE92ZXJmbG93IC8gYmxvZyAvIGZvcnVtIGV4Y2VycHRzIHdob3NlIGxpY2Vuc2luZyBpcyB1bmNsZWFyLiBSZWltcGxlbWVudCBmcm9tIAorc3BlY2lmaWNhdGlvbnMsIHN0YW5kYXJkcywgb3IgQXBhY2hlLWNvbXBhdGlibGUgc291cmNlcyAoc2VlIHRoZSBBU0YgM3JkIFBhcnR5IExpY2Vuc2luZyBQb2xpY3kpLgogKiAqRXZlcnkgbmV3IHNvdXJjZSBmaWxlIG5lZWRzIHRoZSBBU0YgbGljZW5zZSBoZWFkZXIuKiBTZWUgYGJpbi9hc2YtbGljZW5zZS1oZWFkZXIudHh0YCBmb3IgdGhlIGNhbm9uaWNhbCBmb3JtLgotKiAqQXR0cmlidXRlIGdlbmVyYXRlZCB3b3JrIGluIGNvbW1pdHMuKiBXaGVuIEFJIHRvb2xpbmcgYXV0aG9yZWQgYSBub24tdHJpdmlhbCBwb3J0aW9uIG9mIGEgY2hhbmdlLCBhZGQgYSB0cmFpbGVyIHRvCi0gIHRoZSBjb21taXQgbWVzc2FnZSwgZm9yIGV4YW1wbGU6IGBBc3Npc3RlZC1ieTogQUdFTlRfTkFNRTpNT0RFTF9WRVJTSU9OIFtUT09MMV0gW1RPT0wyXWAuIFRoaXMgYWxpZ25zIHdpdGggdGhlIEFTRidzCi0gIHJlY29tbWVuZGF0aW9uIG9uIEFJIHByb3ZlbmFuY2UgdHJhY2tpbmcuCi0qICpUaGUgY29udHJpYnV0b3IgcmVtYWlucyByZXNwb25zaWJsZSBmb3Igd2hhdCB0aGV5IHN1Ym1pdC4qIFJldmlldyBnZW5lcmF0ZWQgb3V0cHV0IGZvciBsaWNlbnNpbmcsIGNvcnJlY3RuZXNzLCBhbmQKLSAgc3R5bGUgYmVmb3JlIGNvbW1pdHRpbmcuCisqICpBdHRyaWJ1dGUgZ2VuZXJhdGVkIHdvcmsgaW4gY29tbWl0cy4qIFdoZW4gQUkgdG9vbGluZyBhdXRob3JlZCBhIG5vbi10cml2aWFsIHBvcnRpb24gb2YgYSBjaGFuZ2UsIGFkZCBhIHRyYWlsZXIgdG8gCit0aGUgY29tbWl0IG1lc3NhZ2UsIGZvciBleGFtcGxlOiBgQXNzaXN0ZWQtYnk6IEFHRU5UX05BTUU6TU9ERUxfVkVSU0lPTiBbVE9PTDFdIFtUT09MMl1gLiBUaGlzIGFsaWducyB3aXRoIHRoZSBBU0YncyAKK3JlY29tbWVuZGF0aW9uIG9uIEFJIHByb3ZlbmFuY2UgdHJhY2tpbmcuCisqICpUaGUgY29udHJpYnV0b3IgcmVtYWlucyByZXNwb25zaWJsZSBmb3Igd2hhdCB0aGV5IHN1Ym1pdC4qIFJldmlldyBnZW5lcmF0ZWQgb3V0cHV0IGZvciBsaWNlbnNpbmcsIGNvcnJlY3RuZXNzLCBhbmQgCitzdHlsZSBiZWZvcmUgY29tbWl0dGluZy4KIAotKioqCi0KLSMjIDEuIFByb2plY3Qgb3ZlcnZpZXcKLQotS2V5IHByb2plY3QgZG9jcyAocHJlZmVyIHRoZXNlIGxvY2FsIGZpbGVzIG92ZXIgZXh0ZXJuYWwgVVJMcyk6Ci0KLS0gUmVmZXJlbmNlIGRvY3M6IGBkb2NzL3NyYy9yZWZlcmVuY2UvKipgCi0tIFJlY2lwZXM6IGBkb2NzL3NyYy9yZWNpcGVzLyoqYAotLSBVcGdyYWRlIGRvY3M6IGBkb2NzL3NyYy91cGdyYWRlLyoqYAotLSBJTyBhbmQgU2VyaWFsaXphdGlvbiBkb2NzOiBgZG9jcy9zcmMvZGV2L2lvLyoqYAotLSBQcm92aWRlciBkb2NzIGFuZCBHcmVtbGluIFNlbWFudGljczogYGRvY3Mvc3JjL2Rldi9wcm92aWRlci8qKmAKLS0gRGV2ZWxvcGVyIGRvY3M6IGBkb2NzL3NyYy9kZXYvZGV2ZWxvcGVyLyoqYAotLSBGdXR1cmUgcGxhbnM6IGBkb2NzL3NyYy9kZXYvZnV0dXJlLyoqYAotCi1UaGUgcHJvamVjdCB3ZWJzaXRlIG1pcnJvcnMgdGhlc2UgZm9yIHJlbGVhc2VkIHZlcnNpb25zOyB1c2UgbG9jYWwgZmlsZXMgZm9yIGJyYW5jaOKAkWFjY3VyYXRlIGluZm9ybWF0aW9uLgotCi0qKioKLQotIyMgMi4gUmVwb3NpdG9yeSBzdHJ1Y3R1cmUgKGhpZ2ggbGV2ZWwpCi0KLVVzZSB0aGVzZSBhcyBhbmNob3JzIHdoZW4gZXhwbG9yaW5nIHRoZSByZXBvOgotCi0tIENvcmUgY29kZSBhbmQgbW9kdWxlczogTWF2ZW4gbXVsdGnigJFtb2R1bGUgbGF5b3V0IHVuZGVyIHRoZSByZXBvIHJvb3QsIHRob3VnaCBtb2R1bGVzIG1heSBub3QgY29udGFpbiBKVk0tcmVsZXZhbnQgY29kZQotICAoaS5lLiBNYXZlbiBpcyBzaW1wbHkgdGhlIGJ1aWxkIG9yY2hlc3RyYXRpb24gdG9vbCB3cmFwcGluZyBvdGhlciBlbnZpcm9ubWVudHMgbGlrZSBQeXRob24gb3IgR28pCi0tIERvY3M6IGBkb2NzL3NyYy8qKmAgKEFzY2lpRG9jIOKAnGJvb2tz4oCdLCByZWZlcmVuY2UsIGRldiBkb2NzLCByZWNpcGVzLCBldGMuKQotLSBDaGFuZ2Vsb2c6IGBDSEFOR0VMT0cuYXNjaWlkb2NgCi0tIFdlYnNpdGU6IGBkb2NzL3NpdGUvKipgCi0tIFNjcmlwdHM6Ci0gICAgLSBEb2NrZXIgc2NyaXB0czogYGRvY2tlci8qLnNoYAotICAgIC0gRG9jcy9zaXRlIHNjcmlwdHM6IGBiaW4vcHJvY2Vzcy1kb2NzLnNoYCwgYGJpbi9nZW5lcmF0ZS1ob21lLnNoYAotCi1XaGVuIGFkZGluZyBvciBtb2RpZnlpbmcgZmlsZXMsIGZvbGxvdyB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlIGFuZCBjb252ZW50aW9ucyBpbiB0aGUgc3Vycm91bmRpbmcgZGlyZWN0b3J5LgotCi0qKioKLQotIyMgMy4gTmVzdGVkIEFHRU5UUy5tZCBmaWxlcwotCi1UaGlzIHJlcG9zaXRvcnkgdXNlcyBhZGRpdGlvbmFsIGBBR0VOVFMubWRgIGZpbGVzIGluIGNlcnRhaW4gc3ViZGlyZWN0b3JpZXMgKGZvciBleGFtcGxlLCAKLWBncmVtbGluLXB5dGhvbi9BR0VOVFMubWRgLCBgZ3JlbWxpbi1kb3RuZXQvQUdFTlRTLm1kYCwgZXRjLikgdG8gcHJvdmlkZSBzdGFja+KAkXNwZWNpZmljIGd1aWRhbmNlLgotCi1BZ2VudHMgc2hvdWxkOgotCi0tIEFsd2F5cyByZWFkIHRoaXMgcm9vdCBgQUdFTlRTLm1kYCBmb3IgZ2xvYmFsIHJ1bGVzLgotLSBXaGVuIHdvcmtpbmcgaW4gYSBzdWJkaXJlY3RvcnksIGFsc28gbG9vayBmb3IgdGhlIGNsb3Nlc3QgYEFHRU5UUy5tZGAgaW4gdGhlIGN1cnJlbnQgb3IgcGFyZW50IAotZGlyZWN0b3JpZXMgYW5kIGFwcGx5IGl0cyBpbnN0cnVjdGlvbnMgZm9yIHRoYXQgYXJlYS4KLS0gVHJlYXQgbW9yZSBzcGVjaWZpYyBgQUdFTlRTLm1kYCBmaWxlcyAoZGVlcGVyIGluIHRoZSB0cmVlKSBhcyBvdmVycmlkaW5nIG9yIHJlZmluaW5nIHRoZSBnZW5lcmljIAotZ3VpZGFuY2UgaGVyZSB3aGVuIHRoZXJlIGlzIGEgY29uZmxpY3QuCi0KLSMjIDQuIEJ1aWxkIGFuZCB0ZXN0IHJlY2lwZXMKLQotIyMjIDQuMSBCYXNpYyBidWlsZCBhbmQgdGVzdAotCi0tIEJ1aWxkIGV2ZXJ5dGhpbmc6Ci0KLSAgYGBgYmFzaAotICBtdm4gY2xlYW4gaW5zdGFsbAotICBgYGAKLQotLSBCdWlsZCBhIHNwZWNpZmljIG1vZHVsZToKLQotICBgYGBiYXNoCi0gIG12biBjbGVhbiBpbnN0YWxsIC1wbCA8bW9kdWxlLW5hbWU+Ci0gIGBgYAotCi0gIEV4YW1wbGU6Ci0KLSAgYGBgYmFzaAotICBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgdGlua2VyZ3JhcGgtZ3JlbWxpbgotICBgYGAKLQotIyMjIDQuMiBJbnRlZ3JhdGlvbiBhbmQgc3BlY2lhbGl6ZWQgYnVpbGRzCi0KLS0gRW5hYmxlIGludGVncmF0aW9uIHRlc3RzOgotCi0gIGBgYGJhc2gKLSAgbXZuIGNsZWFuIGluc3RhbGwgLURza2lwSW50ZWdyYXRpb25UZXN0cz1mYWxzZQotICBgYGAKLQotLSBJbmNsdWRlIE5lbzRqIHRlc3RzOgotCi0gIGBgYGJhc2gKLSAgbXZuIGNsZWFuIGluc3RhbGwgLURpbmNsdWRlTmVvNGoKLSAgYGBgCi0KLSMjIyA0LjMgR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50IChHTFYpIGJ1aWxkcwotCi1CdWlsZCBHcmVtbGluIFNlcnZlciBmaXJzdDoKLQotYGBgYmFzaAotbXZuIGNsZWFuIGluc3RhbGwgLXBsIDpncmVtbGluLXNlcnZlciAtYW0gLURza2lwVGVzdHMKLWBgYAotCi1FYWNoIEdMViBoYXMgaXRzIG93biBtb2R1bGUgc3RydWN0dXJlOgotCi0tIFB5dGhvbjoKLQotICBgYGBiYXNoCi0gIG12biBjbGVhbiBpbnN0YWxsIC1QZ2x2LXB5dGhvbiAtcGwgZ3JlbWxpbi1weXRob24KLSAgYGBgCi0KLS0gLk5FVDoKLQotICBgYGBiYXNoCi0gIG12biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLWRvdG5ldCxncmVtbGluLWRvdG5ldC1zb3VyY2UsZ3JlbWxpbi1kb3RuZXQtdGVzdHMKLSAgYGBgCi0KLS0gSmF2YVNjcmlwdDoKLQotICBgYGBiYXNoCi0gIG12biBjbGVhbiBpbnN0YWxsIC1QZ2x2LWpzIC1wbCBncmVtbGluLWphdmFzY3JpcHQKLSAgYGBgCi0KLS0gR286Ci0KLSAgYGBgYmFzaAotICBtdm4gY2xlYW4gaW5zdGFsbCAtUGdsdi1nbyAtcGwgZ3JlbWxpbi1nbwotICBgYGAKLQotKioqCi0KLSMjIDUuIERvY3VtZW50YXRpb24KLQotVGlua2VyUG9w4oCZcyBkb2N1bWVudGF0aW9uIGlzIEFzY2lpRG9j4oCRYmFzZWQgYW5kIGxpdmVzIHVuZGVyIGBkb2NzL3NyYy8qKmAuCi0KLVdoZW4gYWRkaW5nIG9yIHVwZGF0aW5nIGRvY3M6Ci0KLS0gVXNlIEFzY2lpRG9jIChub3QgTWFya2Rvd24pIGluIHRoZSBtYWluIGRvY3MgdHJlZS4KLS0gUGxhY2UgbmV3IGNvbnRlbnQgaW4gdGhlIGFwcHJvcHJpYXRlIGJvb2sgKHJlZmVyZW5jZSwgZGV2LCByZWNpcGVzLCBldGMuKS4KLS0gVXBkYXRlIHRoZSByZWxldmFudCBgaW5kZXguYXNjaWlkb2NgIHNvIHRoZSBuZXcgY29udGVudCBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuCi0KLSoqKgotCi0jIyA2LiBDb2RpbmcgYW5kIHRlc3RpbmcgY29udmVudGlvbnMKLQotQWdlbnRzIHNob3VsZCBmb2xsb3cgdGhlc2UgY29udmVudGlvbnMgd2hlbiBnZW5lcmF0aW5nIG9yIGVkaXRpbmcgY29kZSBhbmQgdGVzdHMuCi0KLSMjIyA2LjEgQ29kZSBzdHlsZQotCi0tIEFsbCBmaWxlcyBzaG91bGQgaW5jbHVkZSB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gbGljZW5zZSBoZWFkZXIgLSBjYW5vbmljYWwgdGV4dCBmb3IgdGhlIGhlYWRlciBpcyBhdCBgYmluL2FzZi1saWNlbnNlLWhlYWRlci50eHRgLgotLSBEbyAqKm5vdCoqIHVzZSBpbXBvcnQgd2lsZGNhcmRzIChmb3IgZXhhbXBsZSwgYXZvaWQgYGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS4qYCk7IHByZWZlciBleHBsaWNpdCBpbXBvcnRzLgotLSBSZXNwZWN0IGV4aXN0aW5nIG5hbWluZyBwYXR0ZXJucyBhbmQgcGFja2FnZSBvcmdhbml6YXRpb24uCi0tIERlZmluZSB2YXJpYWJsZXMgYXMgYGZpbmFsYCB3aGVuZXZlciBwb3NzaWJsZSwgZXhjZXB0IGZvciBsb29wIHZhcmlhYmxlcy4KLQotIyMjIDYuMiBUZXN0IGd1aWRlbGluZXMKLQotLSBQcmVmZXIgU0xGNEogYExvZ2dlcmAgZm9yIG91dHB1dCBpbnN0ZWFkIG9mIGBTeXN0ZW0ub3V0LnByaW50bG5gIG9yIGBwcmludGxuYCBpbiB0ZXN0cy4KLS0gVXNlIGBUZXN0SGVscGVyYCB1dGlsaXRpZXMgdG8gY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcmllcyBhbmQgZmlsZSBzdHJ1Y3R1cmVzIGZvciBmaWxl4oCRYmFzZWQgdGVzdHMsIGluc3RlYWQgb2YgaGFyZOKAkWNvZGluZyBwYXRocy4KLS0gQWx3YXlzIGNsb3NlIGBHcmFwaGAgaW5zdGFuY2VzIHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0cnVjdGVkIGluIHRlc3RzLgotLSBUZXN0cyB1c2luZyBhIGBHcmFwaFByb3ZpZGVyYCBpbXBsZW1lbnRhdGlvbiB3aXRoIGBBYnN0cmFjdEdyZW1saW5UZXN0YCBzaG91bGQgYmUgc3VmZml4ZWQgd2l0aCBgQ2hlY2tgIGluc3RlYWQgb2YgYFRlc3RgLgotLSBQcmVmZXIgSGFtY3Jlc3QgbWF0Y2hlcnMgZm9yIGJvb2xlYW7igJFzdHlsZSBhc3NlcnRpb25zIChmb3IgZXhhbXBsZSwgYGFzc2VydFRoYXQoLi4uLCBpcyh0cnVlKSlgKSBpbnN0ZWFkIG9mIG1hbnVhbGx5IGNoZWNraW5nIGJvb2xlYW5zLgotLSBGb3IgR3JlbWxpbiBsYW5ndWFnZSB0ZXN0cywgc2VlIHRoZSAiR3JlbWxpbiBMYW5ndWFnZSBUZXN0IENhc2VzIiBzZWN0aW9uIG9mIGBkb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2Zvci1jb21taXR0ZXJzLmFzY2lpZG9jYAotZm9yIG1vcmUgZGV0YWlscyBhbmQgdXNlIEdoZXJraW4gdGVzdHMgdW5kZXI6Ci0KLSAgYGBgdGV4dAotICBncmVtbGluLXRlc3RzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMKLSAgYGBgCi0KLSoqKgotCi0jIyA3LiBDaGFuZ2Vsb2csIGxpY2Vuc2UsIGFuZCBjaGVja3MKLQotV2hlbiBjaGFuZ2VzIGFmZmVjdCBiZWhhdmlvciwgQVBJcywgb3IgdXNlcuKAkXZpc2libGUgZmVhdHVyZXM6Ci0KLS0gQWRkIG9yIHVwZGF0ZSBlbnRyaWVzIGluIGBDSEFOR0VMT0cuYXNjaWlkb2NgIGluIHRoZSBjb3JyZWN0IHZlcnNpb24gc2VjdGlvbi4KLS0gRG8gbm90IGludmVudCBuZXcgdmVyc2lvbiBudW1iZXJzIG9yIHJlbGVhc2UgbmFtZXM7IGZvbGxvdyB0aGUgZXhpc3RpbmcgcGF0dGVybi4KLS0gUHJlc2VydmUgYW5kIHJlc3BlY3QgbGljZW5zZSBoZWFkZXJzIGFuZCBub3RpY2VzIGluIGFsbCBmaWxlcy4KLS0gQXZvaWQgYWRkaW5nIHRoaXJk4oCRcGFydHkgY29kZSBvciBkZXBlbmRlbmNpZXMgd2l0aCBpbmNvbXBhdGlibGUgbGljZW5zZXMuCi0KLSoqKgotCi0jIyA4LiBEbyBhbmQgZG9u4oCZdCBmb3IgYWdlbnRzCisjIyBFc3NlbnRpYWwgUnVsZXMKIAogVGhlc2UgcnVsZXMgYXBwbHkgdG8gYW55IEFJL0lERSBhc3Npc3RhbnQgb3BlcmF0aW5nIG9uIHRoaXMgcmVwb3NpdG9yeS4KIAotIyMjIDguMSBEbworIyMjIERvCiAKLS0gKipEbyoqIG1ha2Ugc21hbGwsIGZvY3VzZWQgY2hhbmdlcyB0aGF0IGFyZSBlYXN5IHRvIHJldmlldy4KLS0gKipEbyoqIHJ1biB0aGUgcmVsZXZhbnQgYnVpbGQgYW5kIHRlc3QgY29tbWFuZHMgYmVmb3JlIHN1Z2dlc3RpbmcgdGhhdCBhIGNoYW5nZSBpcyBjb21wbGV0ZS4KLS0gKipEbyoqIHVwZGF0ZSBvciBhZGQgdGVzdHMgd2hlbiBiZWhhdmlvciBjaGFuZ2VzLgotLSAqKkRvKiogdXBkYXRlIGRvY3VtZW50YXRpb24gYW5kL29yIGNoYW5nZWxvZyB3aGVuIHlvdSBjaGFuZ2UgcHVibGljIGJlaGF2aW9yIG9yIEFQSXMuCi0tICoqRG8qKiBmb2xsb3cgZXhpc3RpbmcgcGF0dGVybnMgZm9yIGNvZGUgc3RydWN0dXJlLCBkb2N1bWVudGF0aW9uIGxheW91dCwgYW5kIG5hbWluZy4KLS0gKipEbyoqIHBvaW50IG1haW50YWluZXJzIHRvIHJlbGV2YW50IGRvY3VtZW50YXRpb24gb3IgaXNzdWVzIHdoZW4gcHJvcG9zaW5nIG5vbuKAkXRyaXZpYWwgY2hhbmdlcy4KLS0gKipEbyoqIHN0b3AgdG8gYXNrIGh1bWFuIHRvIGNvbW1pdCwgcHVzaCBvciBtZXJnZSBtYW51YWxseSwgd2hlbiBjb2RlIGlzIHJlYWR5LgotIAotIyMjIDguMiBEb27igJl0CistIE1ha2Ugc21hbGwsIGZvY3VzZWQgY2hhbmdlcyB0aGF0IGFyZSBlYXN5IHRvIHJldmlldy4KKy0gUnVuIHRoZSByZWxldmFudCBidWlsZCBhbmQgdGVzdCBjb21tYW5kcyBiZWZvcmUgc3VnZ2VzdGluZyB0aGF0IGEgY2hhbmdlIGlzIGNvbXBsZXRlLgorLSBVcGRhdGUgb3IgYWRkIHRlc3RzIHdoZW4gYmVoYXZpb3IgY2hhbmdlcy4KKy0gVXBkYXRlIGRvY3VtZW50YXRpb24gYW5kL29yIGNoYW5nZWxvZyB3aGVuIHlvdSBjaGFuZ2UgcHVibGljIGJlaGF2aW9yIG9yIEFQSXMuCistIEZvbGxvdyBleGlzdGluZyBwYXR0ZXJucyBmb3IgY29kZSBzdHJ1Y3R1cmUsIGRvY3VtZW50YXRpb24gbGF5b3V0LCBhbmQgbmFtaW5nLgorLSBJZiBjb2RlIGlzIHJlYWR5LCBzdG9wIGFuZCBhc2sgdG8gY29tbWl0LCBwdXNoIG9yIG1lcmdlIG1hbnVhbGx5LgogCi0tICoqRG9u4oCZdCoqIHBlcmZvcm0gbGFyZ2UsIHN3ZWVwaW5nIHJlZmFjdG9ycyAoYWNyb3NzIG1hbnkgbW9kdWxlcyBvciBmaWxlcykgdW5sZXNzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgotLSAqKkRvbuKAmXQqKiBjaGFuZ2UgcHVibGljIEFQSXMsIGNvbmZpZ3VyYXRpb24gZm9ybWF0cywgb3IgbmV0d29yayBwcm90b2NvbHMgd2l0aG91dCBleHBsaWNpdCBodW1hbiBhcHByb3ZhbCBhbmQgYXNzb2NpYXRlZCBkZXNpZ24vaXNzdWUuCi0tICoqRG9u4oCZdCoqIHN3aXRjaCBkb2N1bWVudGF0aW9uIGZvcm1hdHMgKGUuZy4sIEFzY2lpRG9jIHRvIE1hcmtkb3duKSBpbiB0aGUgbWFpbiBkb2NzIHRyZWUuCi0tICoqRG9u4oCZdCoqIGludHJvZHVjZSBuZXcgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCBtb2R1bGVzLCBvciBidWlsZCBwbHVnaW5zIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBkaXNjdXNzaW9uIGFuZCBpc3N1ZS4KLS0gKipEb27igJl0KiogaW52ZW50IHByb2plY3QgcG9saWNpZXMsIHZlcnNpb24gbnVtYmVycywgb3IgcmVsZWFzZSBuYW1lcy4KLS0gKipEb27igJl0KiogcmVtb3ZlIG9yIHdlYWtlbiB0ZXN0cyB0byDigJxmaXjigJ0gZmFpbHVyZXM7IGFkanVzdCB0aGUgaW1wbGVtZW50YXRpb24gb3IgdGhlIHRlc3QgZGF0YSBpbnN0ZWFkLgotLSAqKkRvbid0KiogcHVzaCB0byBhbnkgYnJhbmNoLgotLSAqKkRvbid0KiogbWVyZ2UgYW55IFBSIG9yIGJyYW5jaC4KLS0gKipEb24ndCoqIGNyZWF0ZSB0YWdzIG9yIHJlbGVhc2VzLgorIyMjIERvbid0CiAKLUlmIHlvdSBhcmUgdW5jZXJ0YWluIGFib3V0IHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UsIHByZWZlciB0bzoKKy0gRG9uJ3QgcGVyZm9ybSBsYXJnZSwgc3dlZXBpbmcgcmVmYWN0b3JzIHVubGVzcyBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKy0gRG9uJ3QgY2hhbmdlIHB1YmxpYyBBUElzLCBjb25maWd1cmF0aW9uIGZvcm1hdHMsIG9yIG5ldHdvcmsgcHJvdG9jb2xzIHdpdGhvdXQgZXhwbGljaXQgaHVtYW4gYXBwcm92YWwuCistIERvbid0IHN3aXRjaCBkb2N1bWVudGF0aW9uIGZvcm1hdHMgKGUuZy4sIEFzY2lpRG9jIHRvIE1hcmtkb3duKSBpbiB0aGUgbWFpbiBkb2NzIHRyZWUuCistIERvbid0IGludHJvZHVjZSBuZXcgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLCBtb2R1bGVzLCBvciBidWlsZCBwbHVnaW5zIHdpdGhvdXQgZGlzY3Vzc2lvbi4KKy0gRG9uJ3QgaW52ZW50IHByb2plY3QgcG9saWNpZXMsIHZlcnNpb24gbnVtYmVycywgb3IgcmVsZWFzZSBuYW1lcy4KKy0gRG9uJ3QgcmVtb3ZlIG9yIHdlYWtlbiB0ZXN0cyB0byAiZml4IiBmYWlsdXJlczsgYWRqdXN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvciB0ZXN0IGRhdGEgaW5zdGVhZC4KKy0gRG9uJ3QgcHVzaCB0byBhbnkgYnJhbmNoLgorLSBEb24ndCBtZXJnZSBhbnkgUFIgb3IgYnJhbmNoLgorLSBEb24ndCBjcmVhdGUgdGFncyBvciByZWxlYXNlcy4KKy0gRG9uJ3QgYWRkIGBAYXV0aG9yYCBqYXZhZG9jIChvciBzaW1pbGFyKSB0YWdzIGZvciBuZXcgZmlsZXMsIGJ1dCBkbyBub3QgcmVtb3ZlIGV4aXN0aW5nIG9uZXMgZWl0aGVyLgogCi0tIE1ha2UgYSBtaW5pbWFsIHBhdGNoLgotLSBBZGQgY29tbWVudHMgb3Igbm90ZXMgZm9yIHJldmlld2Vycy4KLS0gQXNrIGZvciBjbGFyaWZpY2F0aW9uLgorIyMjIFdoZW4gSW4gRG91YnQKIAotKioqCi0KLSMjIDkuIFdoZW4gaW4gZG91YnQKLQotSWYgQUdFTlRTLm1kIGRvZXMgbm90IGNsZWFybHkgY292ZXIgYSBzaXR1YXRpb246Ci0KLTEuIExvb2sgZm9yIHJlbGV2YW50IGluZm9ybWF0aW9uIGluOgotICAgIC0gYENPTlRSSUJVVElORy5tZGAKLSAgICAtIERldmVsb3BlciBkb2NzIHVuZGVyIGBkb2NzL3NyYy9kZXYvZGV2ZWxvcGVyLyoqYAotICAgIC0gUmVmZXJlbmNlIGRvY3MgYW5kIHJlY2lwZXMKLTIuIFByZWZlciAqKm5vIGNoYW5nZSoqIG92ZXIgYW4gdW5zYWZlIG9yIHNwZWN1bGF0aXZlIGNoYW5nZS4KLTMuIFN1cmZhY2UgdGhlIHF1ZXN0aW9uIHRvIGh1bWFuIG1haW50YWluZXJzIChmb3IgZXhhbXBsZSwgYnkgbGVhdmluZyBhIGNvbW1lbnQsIG9yIGRyYWZ0aW5nIGEgbWluaW1hbCBQUiB0aGF0IGFza3MgZm9yIGd1aWRhbmNlKS4KLQotVGhpcyBmaWxlIGlzIGludGVuZGVkIHRvIGhlbHAgdG9vbHMgYWN0IGxpa2UgYSBjYXJlZnVsLCB3ZWxs4oCRaW5mb3JtZWQgY29udHJpYnV0b3IuIFdoZW4gaW4gZG91YnQsIGRlZmVyIHRvIGh1bWFuIAotanVkZ21lbnQgYW5kIHRoZSBjYW5vbmljYWwgcHJvamVjdCBkb2N1bWVudGF0aW9uLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzEuIFByZWZlciBubyBjaGFuZ2Ugb3ZlciBhbiB1bnNhZmUgb3Igc3BlY3VsYXRpdmUgY2hhbmdlLgorMi4gQXNrIGZvciBjbGFyaWZpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvQ0hBTkdFTE9HLmFzY2lpZG9jIGIvQ0hBTkdFTE9HLmFzY2lpZG9jCmluZGV4IGE4OTdlNGIuLjE2NDYyNmIgMTAwNjQ0Ci0tLSBhL0NIQU5HRUxPRy5hc2NpaWRvYworKysgYi9DSEFOR0VMT0cuYXNjaWlkb2MKQEAgLTE2LDcgKzE2LDExMSBAQAogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogdW5kZXIgdGhlIExpY2Vuc2UuCiAvLy8vCi09IFRpbmtlclBvcDMgQ0hBTkdFTE9HCis9IFRpbmtlclBvcCBDSEFOR0VMT0cKKworPT0gVGlua2VyUG9wIDQuMC4wIChHcmVtbGluJ3MgV2lsZGVzdCBEcmVhbXMpCisKK2ltYWdlOjpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYXBhY2hlL3RpbmtlcnBvcC9tYXN0ZXIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW5zLXdpbGRlc3QtZHJlYW1zLnBuZ1t3aWR0aD0xODVdCisKK1tbcmVsZWFzZS00LTAtMF1dCis9PT0gVGlua2VyUG9wIDQuMC4wIChSZWxlYXNlIERhdGU6IE5PVCBPRkZJQ0lBTExZIFJFTEVBU0VEIFlFVCkKKworKiBBZGRlZCBHcmVtbGF0b3IsIGEgc2luZ2xlIHBhZ2Ugd2ViIGFwcGxpY2F0aW9uLCB0aGF0IHRyYW5zbGF0ZXMgR3JlbWxpbiBpbnRvIHZhcmlvdXMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIGxpa2UgSmF2YXNjcmlwdCBhbmQgUHl0aG9uLgorKiBSZW1vdmVkIGB1dWlkYCBkZXBlbmRlbmN5IGZyb20gYGdyZW1saW4tamF2YXNjcmlwdGAgaW4gZmF2b3Igb2YgdGhlIGJ1aWx0LWluIGBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEKClgLgorCitbW3JlbGVhc2UtNC0wLTAtYmV0YS0yXV0KKz09PSBUaW5rZXJQb3AgNC4wLjAtYmV0YS4yIChBcHJpbCAxLCAyMDI2KQorCisqIEltcHJvdmVkIG51bWJlciB0eXBlIGhhbmRsaW5nIGluIGBncmVtbGluLWphdmFzY3JpcHRgOiBzbWFydCBHcmVtbGluTGFuZyB0eXBlIHN1ZmZpeGVzLCBgYmlnaW50YCBhcyBCaWdJbnRlZ2VyLCBhbmQgTG9uZyBkZXNlcmlhbGl6YXRpb24gbm93IHJldHVybnMgYGJpZ2ludGAgZm9yIHZhbHVlcyBiZXlvbmQgc2FmZSBpbnRlZ2VyIHJhbmdlLgorKiBSZW1vdmVkIGBuZW80ai1ncmVtbGluYCBtb2R1bGUgd2hpY2ggd2FzIGRlcHJlY2F0ZWQgaW4gMy43LjAuCisqIEFkZGVkIGdyYW1tYXItYmFzZWQgYFRyYW5zbGF0b3JgIGZvciBgZ3JlbWxpbi1qYXZhc2NyaXB0YCBzdXBwb3J0aW5nIHRyYW5zbGF0aW9uIHRvIEphdmFTY3JpcHQsIFB5dGhvbiwgR28sIC5ORVQsIEphdmEsIEdyb292eSwgY2Fub25pY2FsLCBhbmQgYW5vbnltaXplZCBvdXRwdXQuCisqIEFkZGVkIGB0cmFuc2xhdGVfZ3JlbWxpbl9xdWVyeWAgdG9vbCB0byBgZ3JlbWxpbi1tY3BgIHRoYXQgdHJhbnNsYXRlcyBHcmVtbGluIHF1ZXJpZXMgdG8gYSB0YXJnZXQgbGFuZ3VhZ2UgdmFyaWFudCwgd2l0aCBvcHRpb25hbCBMTE0tYXNzaXN0ZWQgbm9ybWFsaXphdGlvbiB2aWEgTUNQIHNhbXBsaW5nIGZvciBub24tY2Fub25pY2FsIGlucHV0LgorKiBNb2RpZmllZCBgZ3JlbWxpbi1tY3BgIHRvIHN1cHBvcnQgb2ZmbGluZSBtb2RlIHdoZXJlIHV0aWxpdHkgdG9vbHMgKHRyYW5zbGF0ZSwgZm9ybWF0KSByZW1haW4gYXZhaWxhYmxlIHdpdGhvdXQgYSBjb25maWd1cmVkIGBHUkVNTElOX01DUF9FTkRQT0lOVGAuCisqIEFkZGVkIGBfX2NvbnRhaW5zX19gIGFuZCBga2V5cygpYCB0byBgRWxlbWVudGAgaW4gYGdyZW1saW4tcHl0aG9uYC4KKyogQWRkZWQgYHN1YmdyYXBoKClgIHN1cHBvcnQgZm9yIGBncmVtbGluLXB5dGhvbmAgc28gdGhhdCByZXN1bHRzIGFyZSBzdG9yZWQgaW4gYSBkZXRhY2hlZCBgR3JhcGhgIG9iamVjdC4KKyogQWRkZWQgc3VwcG9ydCBmb3IgcmVtb3RlIHRyYW5zYWN0aW9ucyB0byB0aGUgYGdyZW1saW4tc2VydmVyYCB0aHJvdWdoIGBUcmFuc2FjdGlvbk1hbmFnZXJgIGFuZCBgVW5tYW5hZ2VkVHJhbnNhY3Rpb25gLgorKiBBZGRlZCBzdXBwb3J0IGZvciB0cmFuc2FjdGlvbnMgdG8gYGdyZW1saW4tZHJpdmVyYCB1c2luZyB0aGUgbmV3IGBIdHRwUmVtb3RlVHJhbnNhY3Rpb25gLgorKiBNb2RpZmllZCBncmFtbWFyIHRvIG1ha2UgYGRpc2NhcmQoKWAgdXNhZ2UgbW9yZSBjb25zaXN0ZW50IGFzIGEgZmlsdGVyIHN0ZXAgd2hlcmUgaXQgY2FuIG5vdyBiZSB1c2VkIHRvIGNoYWluIGFkZGl0aW9uYWwgdHJhdmVyc2FsIHN0ZXBzIGFuZCBiZSB1c2VkIGFub255bW91c2x5LgorKiBSZW1vdmVkIGBNZXRhYCBmaWVsZCBmcm9tIGBSZXNwb25zZVJlc3VsdGAgc3RydWN0IGluIGBncmVtbGluLWdvYC4KKyogUmVtb3ZlZCBkZXByZWNhdGVkIGVsZW1lbnRzIG9mIHRoZSBKYXZhLWJhc2VkIHByb2Nlc3MgdGVzdGluZyBzdWl0ZTogYFByb2Nlc3NTdGFuZGFyZFN1aXRlYCwgYFByb2Nlc3NDb21wdXRlclN1aXRlYCwgYFByb2Nlc3NMaW1pdGVkU3VpdGVgIGFuZCBhc3NvY2lhdGVkIHRlc3RzLgorKiBSZW1vdmVkIHJlZHVuZGFudCBHcmVtbGluIFNlcnZlciBpbnRlZ3JhdGlvbiB0ZXN0aW5nOiBgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLipgIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgorKiBSZW1vdmVkIG9ic29sZXRlIGBncmVtbGluLWdyb292eWAgdHJhbnNsYXRpb24gdGVzdGluZzogYFBhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yUHJvdmlkZXJgIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgorKiBSZW1vdmVkIGRlcHJlY2F0ZWQgYEdyYXBoLnRyYXZlcnNhbCgpYCBtZXRob2QgaW4gSlMgaW4gZmF2b3Igb2YgdGhlIGFub255bW91cyBgdHJhdmVyc2FsKClgIGZ1bmN0aW9uLgorKiBSZXBsYWNlIGBCeXRlY29kZWAgd2l0aCBgR3JlbWxpbkxhbmdgICYgdXBkYXRlIHNlcmlhbGl6YXRpb24gdG8gR3JhcGhCaW5hcnkgNCBmb3IgYGdyZW1saW4tZ29gLgorKiBBZGRlZCBgUmVxdWVzdEludGVyY2VwdG9yYCB0byBgZ3JlbWxpbi1nb2Agd2l0aCBgYXV0aGAgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9ucyB0byByZXBsYWNlIGBhdXRoSW5mb2AuCisqIFJlZmFjdG9yZWQgR3JhcGhCaW5hcnkgc2VyaWFsaXplcnMgaW4gYGdyZW1saW4tZ29gIHRvIHVzZSBgaW8uV3JpdGVyYCBhbmQgYGlvLlJlYWRlcmAgaW5zdGVhZCBvZiBgKmJ5dGVzLkJ1ZmZlcmAgZm9yIHN0cmVhbWluZyBjYXBhY2l0aWVzLgorKiBSZWZhY3RvcmVkIGBodHRwUHJvdG9jb2xgIGFuZCBgaHR0cFRyYW5zcG9ydGAgaW4gYGdyZW1saW4tZ29gIGludG8gc2luZ2xlIGBjb25uZWN0aW9uLmdvYCB0aGF0IGhhbmRsZXMgSFRUUCByZXF1ZXN0IGFuZCByZXNwb25zZS4KKyogUmVvcmRlcmVkIGludGVyY2VwdG9yIGNoYWluIGluIGBncmVtbGluLWdvYCBzbyBpbnRlcmNlcHRvcnMgYWNjZXNzIHJhdyByZXF1ZXN0IGJlZm9yZSBzZXJpYWxpemF0aW9uLgorKiBFeHBvcnRlZCBgcmVxdWVzdGAgaW4gYGdyZW1saW4tZ29gIGFzIGBSZXF1ZXN0TWVzc2FnZWAgd2l0aCBwdWJsaWMgYEdyZW1saW5gL2BGaWVsZHNgIGZvciBjbGFyaXR5LCBhY2Nlc3MgYW5kIGNvbnNpc3RlbmN5LgorKiBSZWZhY3RvcmVkIHJlc3VsdCBoYW5kbGluZyBpbiBgZ3JlbWxpbi1kcml2ZXJgIGJ5IG1lcmdpbmcgYFJlc3VsdFF1ZXVlYCBpbnRvIGBSZXN1bHRTZXRgLgorKiBSZXBsYWNlIGBCeXRlY29kZWAgd2l0aCBgR3JlbWxpbkxhbmdgIGluIGBncmVtbGluLWRvdG5ldGAuCisqIFJlcGxhY2UgYFdlYlNvY2tldGAgd2l0aCBgSFRUUGAgKG5vbi1zdHJlYW1pbmcpIGluIGBncmVtbGluLWRvdG5ldGAuCisqIEFkZGVkIGBNaW1lVHlwZWAgdG8gYElNZXNzYWdlU2VyaWFsaXplcmAgYW5kIHNwbGl0IGNsaWVudCBvcHRpb24gdG8gYWxsb3cgc2VwYXJhdGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugc2VyaWFsaXphdGlvbiBpbiBgZ3JlbWxpbi1kb3RuZXRgLgorKiBBZGRlZCBgUmVxdWVzdEludGVyY2VwdG9yYCB0byBgZ3JlbWxpbi1kb3RuZXRgIHdpdGggYGF1dGhgIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbnMuCisqIEJ1bXBlZCBtaW5pbXVtIE5vZGUuanMgdmVyc2lvbiBmb3IgYGdyZW1saW4tamF2YXNjcmlwdGAgZnJvbSAyMCB0byAyMi4KKyogUmVtb3ZlZCBgbWltZVR5cGVgIGNvbm5lY3Rpb24gb3B0aW9uIGluIGBncmVtbGluLWphdmFzY3JpcHRgIGluIGZhdm9yIG9mIGRpcmVjdCB1c2Ugb2YgYHJlYWRlcmAgYW5kIGB3cml0ZXJgIG9wdGlvbnMuCisqIEJ1bXBlZCBBTlRMUiB0byA0LjEzLjIKKyogQnVtcGVkIFNMRjRqIHRvIDIuMC4xNi4KKyogQnVtcGVkIEdNYXZlblBsdXMgdG8gNC4xLjEuCisqIEJ1bXBlZCBHdWljZSB0byA2LjAuMC4KKyogQnVtcGVkIENhZmZlaW5lIHRvIDMuMi4zLgorCitbW3JlbGVhc2UtNC0wLTAtYmV0YS0xXV0KKz09PSBUaW5rZXJQb3AgNC4wLjAtYmV0YS4xIChKYW51YXJ5IDE3LCAyMDI1KQorCisqIEFkZGVkIHN1cHBvcnQgZm9yIGRlc2VyaWFsaXphdGlvbiBvZiBgU2V0YCBmb3IgYGdyZW1saW4tamF2YXNjcmlwdGAuCisqIEFkZGVkIGdyYW1tYXItYmFzZWQgYFRyYW5zbGF0b3JgIGZvciBhbGwgbGFuZ3VhZ2VzIGluY2x1ZGluZyBleHBsaWNpdCBvbmVzIGZvciBKYXZhIGFuZCBhbm9ueW1pemF0aW9uLgorKiBSZW1vdmVkIG9sZCBgVHJhbnNsYXRvcmAgaW5mcmFzdHJ1Y3R1cmUuCisqIFJlbW92ZWQgZ3JhbW1hciBzdXBwb3J0IGZvciBlbnVtcyB0byBiZSB1c2VkIGFzIHZhcmlhYmxlcy4KKyogQ2hhbmdlZCBgdmFsdWVNYXBgIGluIGdyYW1tYXIgdG8gZGlzYWxsb3cgdGhlIGBib29sZWFuYCBhcmd1bWVudCBhcyBhIHZhcmlhYmxlIHRvIGF2b2lkIGFtYmlndW91cyBzdGVwIGNhbGxzLgorKiBBZGRlZCBpbnRlZ2VyIG92ZXJmbG93IGNoZWNrcyBmb3IgYHN1bSgpYC4KKyogTW9kaWZpZWQgR3JlbWxpbiBTZXJ2ZXIgdG8gb25seSBzdXBwb3J0IGluc3RhbnRpYXRpb24gb2YgYGF1dGhlbnRpY2F0aW9uLmF1dGhlbnRpY2F0aW9uSGFuZGxlcmAgd2l0aCB0aHJlZS1hcmcgY29uc3RydWN0b3IuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIHR3by1hcmcgY29uc3RydWN0b3JzIGZvciBgYXV0aGVudGljYXRpb24uYXV0aGVudGljYXRpb25IYW5kbGVyYCBpbXBsZW1lbnRhdGlvbnMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIG9uZS1hcmcgY29uc3RydWN0b3IgZm9yIGBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlcmAuCisqIFJlbmFtZWQgdGhlIHRyYXZlcnNhbCBkaXNjYXJkaW5nIGBub25lKClgIHN0ZXAgdG8gYGRpc2NhcmQoKWAuCisqIEFkZGVkIG5ldyBsaXN0IGZpbHRlcmluZyBzdGVwIGBub25lKClgLgorKiBSZXBsYWNlZCBgZ3JlbWxpbi1ncm9vdnlgIHdpdGggYGdyZW1saW4tbGFuZ2AgYXMgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgaW4gYGdyZW1saW4tc2VydmVyYC4KKyogQ2hhbmdlZCBgc3VtKClgIHRvIHJldGFpbiB0aGUgdHlwZSBjb21tb24gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBhbHdheXMgcHJvbW90aW5nIHRvIGBsb25nYCBnaXZlbiB0aGUgbmVlZCBmb3IgaXQgdG8gbXVsdGlwbGUgYnkgdGhlIGBsb25nYCBidWxrIHZhbHVlIGZvciB0aGUgdHJhdmVyc2VyLgorKiBBZGRlZCBzdXBwb3J0IGZvciBgU2V0YCBpbiBHcmFwaFNPTiBhbmQgR3JhcGhCaW5hcnkgc2VyaWFsaXphdGlvbiBmb3IgYGdyZW1saW4tamF2YXNjcmlwdGAsIHdoZXJlIGl0IHByZXZpb3VzbHkganVzdCBjb252ZXJ0ZWQgdG8gYXJyYXkuCisqIEFkZGVkIGBTZXRgIHN5bnRheCBpbiBgZ3JlbWxpbi1sYW5ndWFnZWAuCisqIE1vZGlmaWVkIFJlcXVlc3RJbnRlcmNlcHRvciB0byBiZSBhIGBVbmFyeU9wZXJhdG9yPEh0dHBSZXF1ZXN0PmAgdG8gYWJzdHJhY3QgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uCisqIFJlbW92ZWQgdGhlIGBncmVtbGluLWFyY2hldHlwZWAgbW9kdWxlIGluIGZhdm9yIG9mIG5ld2VyIHNhbXBsZSBhcHBsaWNhdGlvbnMgaW4gZWFjaCBHTFYncyBgZXhhbXBsZXNgIGZvbGRlci4KKyogQnVtcGVkIHRvIGBjb21tb25zLWNvbGxlY3Rpb240YC4KKyogU3dpdGNoZWQgdG8gSFRUUCBwcm90b2NvbCBpbiBgZ3JlbWxpbi1weXRob25gIGFuZCByZXBsYWNlZCBHcmFwaFNPTlYyLCBHcmFwaFNPTlYyICYgR3JhcGhCaW5hcnlWMSB3aXRoIEdyYXBoQmluYXJ5VjQKKyogQWRkZWQgc3VwcG9ydCBmb3IgY2h1bmtlZCB0cmFuc2ZlciBpbiBgZ3JlbWxpbi1weXRob25gCisqIEFkZGVkIFR5cGVTY3JpcHQgJiBFQ01BU2NyaXB0IG1vZHVsZSBzdXBwb3J0LgorKiBJbXByb3ZlZCBncmFwaCBzdHJ1Y3R1cmVzIHR5cGUgZGVmaW5pdGlvbnMgaW4gVHlwZVNjcmlwdC4KKyogUmVtb3ZlZCB1c2FnZSBvZiBgQnl0ZWNvZGVgIGZvciBHcmVtbGluIFNlcnZlciBhbmQgSmF2YSBHTFYsIHNjcmlwdCBlbmdpbmVzIGFuZCBgR3JlbWxpbkV4ZWN1dG9yYCB3aWxsIG5vdCBiZSBhYmxlIHRvIGhhbmRsZSBgQnl0ZWNvZGVgLgorKiBSZW1vdmVkIGBCeXRlY29kZWAgYmFzZWQgYXV0aG9yaXphdGlvbi4KKyogQWRkZWQgYEdyZW1saW5MYW5nYCB3aGljaCBhbGxvd3MgdG8gZ2VuZXJhdGUgZ3JlbWxpbi1sYW5nIGNvbXBhdGlibGUgc3RyaW5nIGJhc2VkIG9uIFRyYXZlcnNhbC4KKyogUmVtb3ZlZCBzZXJpYWxpemF0aW9uIHN1cHBvcnQgZm9yIGBCaW5kaW5nc2AgYW5kIGBCeXRlY29kZWAuCisqIENoYW5nZWQgYEVtYmVkZGVkUmVtb3RlQ29ubmVjdGlvbmAgdG8gcHJlZmVyIHRoZSBncmFtbWFyLWJhc2VkIHRyYW5zbGF0b3IuCisqIFJlbW92ZWQgYENsaWVudC5zdWJtaXQoVHJhdmVyc2FsKWAgYXMgYSBtZWNoYW5pc20gZm9yIHN1Ym1pdHRpbmcgdHJhdmVyc2FsLCBwcmVmZXIgYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gIGluc3RlYWQuCisqIFJlbW92ZWQgdXNhZ2Ugb2YgYEJ5dGVjb2RlYCBmcm9tIGBncmVtbGluLXB5dGhvbmAuCisqIEFkZGVkIGBhdXRoYCBtb2R1bGUgaW4gYGdyZW1saW4tcHl0aG9uYCBmb3IgcGx1Z2dhYmxlIGF1dGhlbnRpY2F0aW9uLgorKiBGaXhlZCBgR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmVgIGhhbmRsaW5nIGZvciBzb21lIHN0cmF0ZWdpZXMuCisqIFVwZGF0ZWQgRG9ja2VyIHRlc3Qgc3VpdGUgc2V0LXVwIGluIGBncmVtbGluLXB5dGhvbmAgdG8gd29yayB3aXRoIEhUVFAgZHJpdmVyL3NlcnZlci4KKyogVXBkYXRlZCBgRGF0ZVRpbWVgIHNlcmlhbGl6ZXJzIGZvciBKYXZhIGFuZCBQeXRob24gYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQuCisqIERlZmluZWQgR3JhcGhCaW5hcnlWNCBzcGVjaWZpY2F0aW9uLgorKiBEZWZpbmVkIEdyYXBoU09OVjQgc3BlY2lmaWNhdGlvbi4KKyogVXBkYXRlIHNlcmlhbGl6ZXJzIGZvciBgbGFiZWxgIG9mIGFuIGBFbGVtZW50YCBhcyBhIHNpbmdsZXRvbiBsaXN0IG9mIHN0cmluZyBmb3IgR3JhcGhCaW5hcnlWNC4KKyogQWRkZWQgYGJ1bGtlZGAgYnl0ZSB0byBgUmVzcG9uc2UgTWVzc2FnZWAgc2VyaWFsaXphdGlvbiBmb3IgR3JhcGhCaW5hcnlWNC4KKyogQWRkZWQgYSBgYnVsa2VkYCBoZWFkZXIgc2V0IGJ5IGNsdXN0ZXIgc2V0dGluZywgYXMgd2VsbCBhcyBhIHdpdGggYGJ1bGtlZGAgcmVxdWVzdCBvcHRpb24gdG8gdHVybiBvbiB0aGUgYnVsa2luZyBvZiByZXN1bHQgZGF0YS4KKyogVXBkYXRlZCBgTGlzdGAgYW5kIGBCdWxrU2V0YCBzZXJpYWxpemVycyB0byBpbXBsZW1lbnQgYGJ1bGtgIHZhbHVlIGZsYWcgZm9yIGBMaXN0YC4KKyogUmVuYW1lZCBgbWF4Q29udGVudExlbmd0aGAgc2V0dGluZyBmb3IgR3JlbWxpbiBEcml2ZXIgdG8gYG1heFJlc3BvbnNlQ29udGVudExlbmd0aGAgYW5kIGJsb2NrZWQgaW5jb21pbmcgcmVzcG9uc2VzIHRoYXQgYXJlIHRvbyBsYXJnZSBiYXNlZCBvbiB0b3RhbCByZXNwb25zZSBzaXplLgorKiBSZW5hbWVkIGBtYXhDb250ZW50TGVuZ3RoYCBzZXR0aW5nIGZvciBHcmVtbGluIFNlcnZlciB0byBgbWF4UmVxdWVzdENvbnRlbnRMZW5ndGhgLgorKiBBZGRlZCBtaXNzaW5nIHN0cmF0ZWdpZXMgdG8gdGhlIGBUcmF2ZXJzYWxTdHJhdGVnaWVzYCBnbG9iYWwgY2FjaGUgYXMgd2VsbCBhcyBgQ29yZUltcG9ydHNgIGluIGBncmVtbGluLWdyb292eWAuCisqIEFkZGVkIG1pc3Npbmcgc3RyYXRlZ2llcyB0byBgc3RyYXRlZ2llcy5weWAgaW4gYGdyZW1saW4tcHl0aG9uYC4KKyogVXBkYXRlZCBgT3B0aW9uc1N0cmF0ZWd5YCBpbiBgZ3JlbWxpbi1weXRob25gIHRvIHRha2Ugb3B0aW9ucyBkaXJlY3RseSBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKyogQWRkZWQgc3RhdGljIGBpbnN0YW5jZSgpYCBtZXRob2QgdG8gYEVsZW1lbnRJZFN0cmF0ZWd5YCB0byBhbiBpbnN0YW5jZSB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisqIFVwZGF0ZWQgYEVsZW1lbnRJZFN0cmF0ZWd5LmdldENvbmZpZ3VyYXRpb24oKWAgdG8gaGVscCB3aXRoIHNlcmlhbGl6YXRpb24uCisqIFVwZGF0ZWQgYFRyYXZlcnNhbFN0cmF0ZWd5UHJveHlgIHRvIHV0aWxpemUgc3RyYXRlZ3kgbmFtZXMgaW5zdGVhZCBvZiBzdHJhdGVneSBjbGFzc2VzCisqIEVzdGFibGlzaGVkIG1lY2hhbmlzbSBmb3IgdXNpbmcgY3VzdG9tZXIgc3RyYXRlZ2llcyBpbiByZW1vdGUgY29udGV4dCBieSB1c2luZyBgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eWAgaW4gSmF2YSwgb3IgYFRyYXZlcnNhbFN0cmF0ZWd5YCBpbiBHTFZzLgorKiBSZW1vdmVkIGBtaW5TaXplYCBzZXR0aW5nIGZvciBHcmVtbGluIERyaXZlciBjb25uZWN0aW9uIHBvb2wgc2luY2UgY29ubmVjdGlvbnMgYXJlIG5vdyBzaG9ydC1saXZlZCBIVFRQIGNvbm5lY3Rpb25zCisqIEFkZGVkIGBpZGxlQ29ubmVjdGlvblRpbWVvdXRgIHNldHRpbmcgZm9yIEdyZW1saW4gRHJpdmVyIGFuZCBhdXRvbWF0aWMgY2xvc2luZyBvZiBpZGxlIGNvbm5lY3Rpb25zCisqIEVuYWJsZWQgVENQIEtlZXAtQWxpdmUgaW4gR3JlbWxpblNlcnZlci4KKyogVXBkYXRlZCBQeXRob24gR0xWIGV4YW1wbGVzIHRvIHVzZSBIVFRQIGFuZCB0byBydW4gYXMgcGFydCBvZiB0aGUgaW50ZWdyYXRpb24gdGVzdHMuCisqIEZpeGVkIGBncmVtbGluLXB5dGhvbmAgYHRvKClgIGFuZCBgZnJvbV8oKWAgbWV0aG9kcyB0byB3cmFwIFZlcnRleCBvYmplY3RzIHdpdGggYF9fLlYoKWAgZm9yIHByb3BlciBlZGdlIGNyZWF0aW9uLgogCiA9PSBUaW5rZXJQb3AgMy44LjAgKEdyaXggR3JldmVuKQogCkBAIC03MjEsNDk2ICs4MjUsNDcgQEAKIFtbcmVsZWFzZS0zLTYtOF1dCiA9PT0gVGlua2VyUG9wIDMuNi44IChSZWxlYXNlIERhdGU6IE9jdG9iZXIgMjMsIDIwMjQpCiAKLSogRml4ZWQgYSBidWcgaW4gR3JlbWxpblNlcnZlciBub3QgcHJvcGVybHkgcHJvcGFnYXRpbmcgYXJndW1lbnRzIHdoZW4gYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC4KLSogRml4ZWQgYnVnIGluIEphdmEgZHJpdmVyIHdoZXJlIGNvbm5lY3Rpb24gcG9vbCB3YXMgbm90IHJlbW92aW5nIGRlYWQgY29ubmVjdGlvbnMgdW5kZXIgY2VydGFpbiBlcnJvciBjb25kaXRpb25zLgotKiBSYWlzZWQgaGFuZHNoYWtlIGV4Y2VwdGlvbnMgZm9yIEphdmEgZHJpdmVyIGZvciBgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uYCBzaXR1YXRpb25zLgotKiBUaGUgZGVmYXVsdCBsb2dnaW5nIGxldmVsIGZvciBHcmVtbGluIENvbnNvbGUgaW4gV2luZG93cyBpcyBzZXQgdG8gdGhlIHNhbWUgV0FSTiBsZXZlbCBhcyBmb3IgTGludXguCi0qIFVwZGF0ZWQgdG8gRG9ja2VyIENvbXBvc2UgVjIgd2l0aCBgZG9ja2VyLWNvbXBvc2VgIGNoYW5nZWQgdG8gYGRvY2tlciBjb21wb3NlYCBpbiBwb20gYW5kIHNjcmlwdCBmaWxlcy4KLSogQWRkIGNvbW1hbmQgbGluZSBvcHRpb24gYC1sYCB0byBjaGFuZ2UgbG9nZ2luZyBsZXZlbCBmb3IgR3JlbWxpbiBDb25zb2xlIGluIFdpbmRvd3MuCi0qIEFkZCBgZW5hYmxlQ29tcHJlc3Npb25gIGNvbm5lY3Rpb24gc2V0dGluZyB0byBKYXZhLCBQeXRob24sIGFuZCBKUyBHTFZzLgotKiBJbmNyZWFzZWQgbWluaW11bSBweXRob24gdmVyc2lvbiBmcm9tIDMuOCB0byAzLjkKLSogVXBncmFkZWQgYGdyZW1saW4tZ29gIHRvIEdvIDEuMjIuCi0qIEJ1bXAgTmV0dHkgdG8gNC4xLjEwMAotKiBCdW1wIExvZ2JhY2sgdG8gMS4yLjEzCi0qIEJ1bXAgSXZ5IHRvIDIuNS4yCi0qIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIEphdmFzY3JpcHQgZHJpdmVyIHdoZW4gdGhlcmUgaXMgYSBzZXJ2ZXIgZXJyb3IgcmVzcG9uc2UuCi0qIFRocm93IG1vcmUgZGVzY3JpcHRpdmUgZXJyb3IgaW4gYGdyZW1saW4tZ29gIHdoZW4gcmVxdWVzdCBzaXplIGV4Y2VlZHMgYFdyaXRlQnVmZmVyU2l6ZWAKLSogRml4ZWQgYSBtaXNzaW5nIHJ1bnRpbWUgZGVwZW5kZW5jeSBpbiBgZ3JlbWxpbi1weXRob25gCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0zMDM1IEFkZCBleHBsaWNpdCBwcm9wZXJ0eShJRGljdGlvbmFyeSkgZm9yIC5ORVQKLSogVElOS0VSUE9QLTMwNTAgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBpbiBsb2diYWNrLWNvcmUKLSogVElOS0VSUE9QLTMwNTEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBpbiBsb2diYWNrLWNsYXNzaWMKLSogVElOS0VSUE9QLTMwNTIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBpbiBpdnkKLSogVElOS0VSUE9QLTMwNTMgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBpbiBuZXR0eS1jb2RlYy1odHRwMgotKiBUSU5LRVJQT1AtMzA3NiBJbmNvcnJlY3QgaGFuZGxpbmcgb2YgbGFyZ2UgcmVxdWVzdHMgaW4gR28gR0xWCi0qIFRJTktFUlBPUC0zMDc3IEphdmFzY3JpcHQgdHJhbnNsYXRvciBpbmNvcnJlY3RseSBoYW5kbGUgcXVvdGVzLCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzCi0qIFRJTktFUlBPUC0zMDc5IFRoZSB0ZXN0IGBUcmF2ZXJzYWxTdHJhdGVnaWVzVGVzdCNzaG91bGRBbGxvd1VzZXJNYW5pcHVsYXRpb25PZkdsb2JhbENhY2hlYCBpcyBub3QgaWRlbXBvdGVudCwgYXMgaXQgcGFzc2VzIGluIHRoZSBmaXJzdCBydW4gYW5kIGZhaWxzIGluIHJlcGVhdGVkIHJ1bnMgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQuCi0qIFRJTktFUlBPUC0zMDgxIFdoZW4gdXNpbmcgYXV0aGVudGljYXRpb24sIGV2YWx1YXRpb25UaW1lb3V0IGlzIGlnbm9yZWQKLSogVElOS0VSUE9QLTMxMTYgYXN5bmNfdGltZW91dCBub3QgZGVjbGFyZWQgaW4gZ3JlbWxpbnB5dGhvbiBkZXBlbmRlbmNpZXMKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjcwMCBXZWJTb2NrZXQgY29tcHJlc3Npb24gbWF5IGxlYWQgdG8gYXR0YWNrcyAoQ1JJTUUgLyBCUkVBQ0gpCi0qIFRJTktFUlBPUC0zMDg2IFVwZ3JhZGUgZ3JlbWxpbi1weXRob24gdG8gbmV3ZXIgUHl0aG9uIGludGVycHJldGVyCi0qIFRJTktFUlBPUC0zMDk4IEdyZW1saW4gQ29uc29sZSBiYXQgZmlsZSBpcyBtaXNzaW5nIGxvZyBsZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjYueC5hc2NpaWRvYyNyZWxlYXNlLTMtNi04LCAzLjYuOCBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNi03XV0KID09PSBUaW5rZXJQb3AgMy42LjcgKFJlbGVhc2UgRGF0ZTogQXByaWwgOCwgMjAyNCkKIAotKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluLk5ldCBmb3IgLk5FVCA4IHRoYXQgbGVkIHRvIGV4Y2VwdGlvbnM6IGBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uOiBFbnVtZXJhdGlvbiBoYXMgbm90IHN0YXJ0ZWQuIENhbGwgTW92ZU5leHQuYAotKiBGaXhlZCBtZXNzYWdlIHJlcXVlc3RJZCBzZXJpYWxpemF0aW9uIGluIGBncmVtbGluLXB5dGhvbmAuCi0qIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBmb3IgdHJhdmVyc2FscyB0aGF0IGNhcnJ5IG1hbnkgY2hpbGRyZW4sIGJ1dCBkb24ndCBob2xkIG1hbnkgbGFiZWxzIHRvIHByb3BvZ2F0ZS4KLSogRml4ZWQgYnVnIGluIGJ5dGVjb2RlIHRyYW5zbGF0aW9uIG9mIGBnLnR4KCkuY29tbWl0KClgIGFuZCBgZy50eCgpLnJvbGxiYWNrKClgIGluIGFsbCBsYW5ndWFnZXMuCi0qIEltcHJvdmVkIGVycm9yIG1lc3NhZ2UgZnJvbSBgSmF2YVRyYW5zbGF0b3JgIGJ5IGluY2x1ZGluZyBleGNlcHRpb24gc291cmNlLgotKiBBZGRlZCBtaXNzaW5nIGBzaG9ydGAgc2VyaWFsaXphdGlvbiAoYGd4OkludDE2YCkgdG8gR3JhcGhTT05WMiBhbmQgR3JhcGhTT05WMyBpbiBgZ3JlbWxpbi1weXRob25gLgotKiBBZGRlZCB0ZXN0cyBmb3IgZXJyb3IgaGFuZGxpbmcgZm9yIEdMVidzIGlmIGB0eC5jb21taXQoKWAgaXMgY2FsbGVkIHJlbW90ZWx5IGZvciBncmFwaHMgd2l0aG91dCB0cmFuc2FjdGlvbnMgc3VwcG9ydC4KLSogSW50cm9kdWNlZCBtdWx0aS1hcmNoaXRlY3R1cmUgQU1ENjQvQVJNNjQgZG9ja2VyIGltYWdlcyBmb3IgZ3JlbWxpbi1jb25zb2xlLgotKiBGaXhlZCBidWcgaW4gYEphdmFUcmFuc2xhdG9yYCB3aGVyZSBgaGFzKFN0cmluZywgbnVsbClgIGNvdWxkIGNhbGwgYGhhcyhTdHJpbmcsIFRyYXZlcnNhbClgIHRvIGdlbmVyYXRlIGFuIGVycm9yLgotKiBGaXhlZCBpc3N1ZSB3aGVyZSBzZXJ2ZXIgZXJyb3JzIHdlcmVuJ3QgYmVpbmcgcHJvcGVybHkgcGFyc2VkIHdoZW4gc2VuZGluZyBieXRlY29kZSBvdmVyIEhUVFAuCi0qIEltcHJvdmVkIGBCdWxrc2V0YCBjb250YWlucyBjaGVjayBmb3IgZWxlbWVudHMgaWYgYWxsIGVsZW1lbnRzIGluIGBCdWxrc2V0YCBhcmUgb2YgdGhlIHNhbWUgdHlwZS4KLSogRml4ZWQgYnVnIGluIGBFYXJseUxpbWl0U3RyYXRlZ3lgIHdoaWNoIHdhcyB0b28gYWdncmVzc2l2ZSB3aGVuIHByb21vdGluZyBgbGltaXQoKWAgYmVmb3JlIGBtYXAoKWAuCi0qIFByZXZlbnRlZCBtaWQtdHJhdmVyc2FsIGBtZXJnZUUoKWAgYW5kIGBtZXJnZVYoKWAgZnJvbSBvcGVyYXRpbmcgb24gYW4gaW5jb21pbmcgYFRyYXZlcnNlcmAgdGhhdCBjb250YWlucyBhbiBgRWxlbWVudGAuCi0qIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIHRoZSBhcHBsaWNhdGlvbiBvZiBgRmlsdGVyUmFua2luZ1N0cmF0ZWd5YCBmb3IgbGFyZ2UgdHJhdmVyc2FscyB3aXRoIGRlZXBseSBuZXN0ZWQgdHJhdmVyc2FscyBieSBpbXByb3ZpbmcgdGhlIGNhY2hlIG9wZXJhdGlvbi4KLSogVXBkYXRlZCBhbGlhc2VkIGNsaWVudCB0byBwYXNzIGFsb25nIG9wdGlvbnMgdmlhIGB3aXRoKClgIHdoZW4gc3VibWl0dGluZyB0cmF2ZXJzYWxzLgotKiBVcGdyYWRlZCBgZ3JlbWxpbi1nb2AgdG8gR28gMS4yMS4KLSogVXBncmFkZWQgYGdyZW1saW4tamF2YXNjcmlwdGAgYW5kIGBncmVtbGludGAgdG8gTm9kZSAxOC4xNy4wLgotKiBBbGxvd2VkIHB1YmxpYyBhY2Nlc3MgZm9yIGBzZXJ2aWNlTmFtZWAgYW5kIGBtZXJnZWRQYXJhbXNgIGluIGBDYWxsU3RlcGAsIGFuZCBjaGVja3Mgb24gYFBhcnRpdGlvblN0cmF0ZWd5YCB1c2FnZSBpbiBgTWVyZ2VFbGVtZW50U3RlcGAuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yMzU5IG9uU2h1dERvd24gbm90IGJlaW5nIGNhbGxlZCB3aGVuIGRvY2tlciBjb250YWluZXIgc3RvcHBlZAotKiBUSU5LRVJQT1AtMjkxMyBFbnN1cmUgdGhhdCBpZiB0eC5jb21taXQoKSBpcyBjYWxsZWQgcmVtb3RlbHkgaXQgZG9lcyBub3QgaGFuZyBmb3IgZ3JhcGhzIHdpdGhvdXQgdHJhbnNhY3Rpb25zCi0qIFRJTktFUlBPUC0zMDIyIEphdmFUcmFuc2xhdG9yIGZhaWxpbmcgZm9yIGhhcyhTdHJpbmcsIG51bGwpCi0qIFRJTktFUlBPUC0zMDI3IFBpY2suYW55IHNob3VsZCBiZSBhbnlfKCkKLSogVElOS0VSUE9QLTMwMjkgR3JlbWxpbi5OZXQ6IFRyYXZlcnNhbCBlbnVtZXJhdGlvbiBmYWlscyBvbiAuTkVUIDgKLSogVElOS0VSUE9QLTMwMzEgQmFkIHRyYW5zbGF0aW9uIGZvciBnLnR4KCkKLSogVElOS0VSUE9QLTMwMzkgSmF2YSBkcml2ZXIgd29uJ3QgcHJvcGFnYXRlIHdpdGggYXJncyB3aGVuIHVzaW5nIGFsaWFzZWQgY2xpZW50IGRpcmVjdGx5Ci0qIFRJTktFUlBPUC0zMDQ1IEVhcmx5TGltaXRTdHJhdGVneSBpcyB0b28gYWdncmVzaXZlIHRvIHByb21vdGUgTGltaXQgYW5kIHRodXMgY2F1c2luZyBpbmNvcnJlY3QgcmVzdWx0cwotKiBUSU5LRVJQT1AtMzA1NCBSZXF1ZXN0SWQgc2VyaWFsaXphdGlvbiBicm9rZW4gaW4gUHl0aG9uIEdMVgotKiBUSU5LRVJQT1AtMzA1NiBtZXJnZUUgaXMgdXBkYXRpbmcgdmVydGljZXMgaW4gY2VydGFpbiBjb25kaXRpb25zCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTI5OTUgQ3JlYXRlIFNhbXBsZSBBcHBsaWNhdGlvbnMgaW4gZWFjaCBHTFYKLSogVElOS0VSUE9QLTMwMjEgUHVibGlzaCBBUk02NCBHcmVtbGluIENvbnNvbGUgSW1hZ2VzCi0qIFRJTktFUlBPUC0zMDMwIFVwZGF0ZSB0byAuTkVUIDgKLSogVElOS0VSUE9QLTMwNjggTWFrZSBzZXJ2aWNlTmFtZSBhbmQgbWVyZ2VkUGFyYW1zIHB1YmxpYyBmb3IgcHJvdmlkZXIgdXNhZ2UgaW4gQ2FsbFN0ZXAKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy42LnguYXNjaWlkb2MjcmVsZWFzZS0zLTYtNywgMy42LjcgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTYtNl1dCiA9PT0gVGlua2VyUG9wIDMuNi42IChSZWxlYXNlIERhdGU6IE5vdmVtYmVyIDIwLCAyMDIzKQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtNS04LCAzLjUuOD4+LgotCi0qIEZpeGVkIGEgamF2YWRvYyBjb21tZW50IGluIGBHcmFwaFRyYXZlcnNhbC5ub3QoKWAgbWV0aG9kLgotKiBBbGxvd2VkIGBncmVtbGluLWRyaXZlcmAgdG8gYmUgdXNlZCBvdmVyIEhUVFAgZm9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4KLSogQWRkZWQgdXNlciBhZ2VudCBoYW5kbGluZyB0byBncmVtbGluLXNlcnZlciBmb3IgSFRUUCByZXF1ZXN0cy4KLSogQWxsb3dlZCBgaW8oKWAgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgIi5ncmFwaG1sIiBhcyBhIGZpbGUgZXh0ZW5zaW9uLgotKiBEZXByZWNhdGVkIHRoZSBgSGFuZHNoYWtlSW50ZXJjZXB0b3JgIGluIGZhdm9yIG9mIGEgbW9yZSBnZW5lcmljIGBSZXF1ZXN0SW50ZXJjZXB0b3JgLgotKiBBbGxvd2VkIGBncmVtbGluLXB5dGhvbmAgdG8gYmUgdXNlZCBvdmVyIEhUVFAgZm9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4KLSogRml4ZWQgdHJhbnNsYXRpb24gb2YgYFBgLCBgVHJhdmVyc2FsU3RyYXRlZ3lgIGFuZCBFbnVtcywgYW5kIGFkZGVkIHRyYW5zbGF0aW9uIGZvciBgVmVydGV4YCwgYEVkZ2VgLCBgVmVydGV4UHJvcGVydHlgLCBsaXN0LCBzZXQsIGRpY3QsIG51bWJlciwgYmluZGluZyBhbmQgbGFtYmRhIGluIEdyb292eSBUcmFuc2xhdG9yIGZvciBQeXRob24uCi0qIEZpeGVkIGEgYnVnIGluIGBTdGFyR3JhcGhgIHdoZXJlIGBFZGdlRmlsdGVyYCBkaWQgbm90IHJlbW92ZSBhc3NvY2lhdGVkIEVkZ2UgUHJvcGVydGllcy4KLSogQWRkZWQgR3JlbWxpbiB0cmFuc2xhdG9yIGltcGxlbWVudGF0aW9uIHRvIHRoZSBHbyBHTFYuCi0qIEZpeGVkIEdvIHRyYW5zbGF0b3IgdG8gaGFuZGxlIGFycmF5IGFyZ3VtZW50cy4KLSogSW4gR28gR0xWIGBQLldpdGhpbmAgYW5kIGBQLldpdGhvdXRgIGV4dGVuZGVkIHRvIGFjY2VwdCBhcnJheSBhcmd1bWVudHMgc2ltaWxhciB0byBvdGhlciBHTFYncwotKiBJbXByb3ZlZCBgU3ViZ3JhcGhTdHJhdGVneWAgYnkgcmVkdWNpbmcgY2hhbmNlIGZvciByZWR1bmRhbnQgZmlsdGVyaW5nIG9mIGFkamFjZW50IHZlcnRpY2VzLgotKiBGaXhlZCBidWcgd2l0aCBmaWx0ZXJpbmcgZm9yIGBncm91cCgpYCB3aGVuIHRoZSBzaWRlLWVmZmVjdCBsYWJlbCB3YXMgZGVmaW5lZCBmb3IgaXQuCi0qIFByb2plY3RTdGVwIG5vdyB0aHJvd3MgZXhjZXB0aW9uIHdoZW4gYSBkdXBsaWNhdGUga2V5IGlzIHByb3ZpZGVkIGluIGEgcXVlcnkuCi0qIEZpeGVkIGJ1ZyBpbiBgcmVwbGFjZUxvY2FsQ2hpbGRgIHdoZXJlIGNoaWxkIHRyYXZlcnNhbCB3YXMgbm90IGNvcnJlY3RseSBpbnRlZ3JhdGVkLgotKiBGaXhlZCBidWcgaW4gYEVsZW1lbnRJZFN0cmF0ZWd5YCB3aGVyZSB0aGUgb3JkZXIgb2YgYGhhc0lkYCB3YXMgaW1wYWN0aW5nIHByb3BlciBmaWx0ZXJzLgotKiBGaXhlZCBidWcgaW4gdGhlIEphdmEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZm9yIHNlcmlhbGl6YXRpb24gd2hlbiByZWFkaW5nIHNldHRpbmdzIGZyb20gYW4gYElucHV0U3RyZWFtYC4KLSogRml4ZWQgYnVnIGluIGBEb3ROZXRUcmFuc2xhdG9yYCB3aGVyZSBgUGFydGl0aW9uU3RyYXRlZ3lgIHVzYWdlIHdhcyBub3QgdHJhbnNsYXRpbmcgcHJvcGVybHkgd2hlbiBzcGVjaWZ5aW5nIHRoZSBgcmVhZFBhcnRpdGlvbnNgLgotKiBGaXhlZCBidWcgaW4gYFB5dGhvblRyYW5zbGF0b3JgIHdoZXJlIGBTZXRgIHN5bnRheCB3YXMgbm90IGJlaW5nIGdlbmVyYXRlZCBwcm9wZXJseS4KLSogRml4ZWQgYnVnIGluIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGdpdmVuIHRvIGBQYXJ0aXRpb25TdHJhdGVneWAgZm9yIEdvIHRoYXQgcHJldmVudGVkIGByZWFkUGFydGl0aW9uc2AgZnJvbSBiZWhpbmcgc2V0IHByb3Blcmx5LgotKiBGaXhlZCBidWcgd2hlcmUgdGhlIGBwYXJ0aXRpb25LZXlgIHdhcyBub3QgYmVpbmcgd3JpdHRlbiB3aGVuIHVzaW5nIGBQYXJ0aXRpb25TdHJhdGVneWAgd2l0aCBgbWVyZ2VWKClgIGFuZCBgbWVyZ2VFKClgCi0qIEFkZGVkIGNoZWNraW5nIGZvciB2YWxpZCBVVUlEIHJlcXVlc3RJZHMgaW4gYGdyZW1saW4tcHl0aG9uYCBhbmQgYGdyZW1saW4tamF2YXNjcmlwdGAuCi0qIERvIG5vdCB1c2UgYFhPUmAgZm9yIGhhc2hDb2RlIGNvbXB1dGF0aW9uIG9mIFN0ZXAgd2hlbiBvbmx5IHNpbXBsZSBrZXlzIGFyZSB1c2VkIGFuZCBkdXBsaWNhdGUga2V5cyBhcmUgYWxsb3dlZC4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTI0MjMgaGFzaENvZGUgY29sbGlzaW9uIGZvciBzdGVwcyB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzCi0qIFRJTktFUlBPUC0yODExIEVsZW1lbnRJZFN0cmF0ZWd5IGRvZXNuJ3QgcmVwbGFjZSBhbGwgcmVmZXJlbmNlcyBvZiBhbiBlbGVtZW50J3MgaWQgd2l0aCB0aGUgc3BlY2lmaWVkIGN1c3RvbSBpZCBwcm9wZXJ0eQotKiBUSU5LRVJQT1AtMjkyMSBGaWx0ZXJzIG5vdCB3b3JraW5nIHdoZW4gc2lkZS1lZmZlY3QgaXMgdXNlZCB3aXRoIGdyb3VwKCkKLSogVElOS0VSUE9QLTI5NzYgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbjogQ29sbGVjdGlvbiB3YXMgbW9kaWZpZWQgaW4gR3JhcGhCaW5hcnkgc2VyaWFsaXphdGlvbgotKiBUSU5LRVJQT1AtMjk4MyBVcGdyYWRlIE5ldHR5IGZvciBTZWN1cml0eSBSZWFzb25zCi0qIFRJTktFUlBPUC0yOTk2IEdvbGFuZyBUcmFuc2xhdG9yIGluIGNvcmUgZG9lcyBub3QgcHJvcGVybHkgdHJhbnNsYXRlIGxpc3QgYXJndW1lbnRzCi0qIFRJTktFUlBPUC0zMDAxIEdyZW1saW4gQ29uc29sZSBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBzZXJpYWxpemVycyBmaWVsZAotKiBUSU5LRVJQT1AtMzAwOSBTdWJncmFwaFN0cmF0ZWd5IHByb2R1Y2VzIGV4Y2Vzc2l2ZSBmaWx0ZXJpbmcgd2hlbiBtdWx0aXBsZSBsYWJlbHMgYXJlIGZpbHRlcmVkIHVwb24KLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjgwMiBTdXBwb3J0IEFkZGluZyBDdXN0b20gU2VyaWFsaXplciBmb3IgR3JlbWxpbiBHbwotKiBUSU5LRVJQT1AtMjgzMCBIYW5kbGUgVXNlci1BZ2VudCBmcm9tIEhUVFAgUmVxdWVzdHMgdG8gc2VydmVyCi0qIFRJTktFUlBPUC0yOTUxIEFkZCB0cmFuc2xhdG9yIHRvIHRoZSBHbyBHTFYKLSogVElOS0VSUE9QLTI5NjQgIE1hbnkgVHJhdmVyc2FsUGFyZW50J3Mgc3RlcHMgaGF2ZSBhIHJlcGxhY2VMb2NhbENoaWxkIGxvZ2ljIHRoYXQgY2FuIHJlc3VsdCBpbiBhIG5ldyBDaGlsZFRyYXZlcnNhbCBoYXZpbmcgYW4gSUQgdGhhdCBhbHJlYWR5IGV4aXN0cy4KLSogVElOS0VSUE9QLTI5ODIgQWxsb3cgZ3JlbWxpbi1kcml2ZXIgdXNhZ2Ugb3ZlciBIVFRQCi0qIFRJTktFUlBPUC0yOTg0IFJlcGxhY2UgTW9xIG1vY2tpbmcgbGlicmFyeSBpbiAuTkVUIHRlc3RzCi0qIFRJTktFUlBPUC0yOTg2IFN0YXJHcmFwaCBzaGFsbCBkcm9wIGVkZ2UgcHJvcGVydGllcyB3aGVuIGRyb3BwaW5nIGVkZ2VzCi0qIFRJTktFUlBPUC0yOTg4IFNlcmlhbGl6YXRpb24gZXJyb3IgdGhyb3dzIGFuIEludmFsaWQgT3BQcm9jZXNzb3IgZXhjZXB0aW9uIHdoZW4gdXNpbmcgc3RyZWFtKCkgQVBJCi0qIFRJTktFUlBPUC0yOTkxIFJlZm9ybWF0IEphdmFkb2MgbGluayBpbiByZWZlcmVuY2UgZG9jcwotKiBUSU5LRVJQT1AtMjk5NCBQYXJ0aXRpb25TdHJhdGVneSBkb2VzIG5vdCB3b3JrIHdpdGggbWVyZ2VWKCkgYW5kIG1lcmdlRSgpCi0qIFRJTktFUlBPUC0zMDA2IEFsbG93IGdyZW1saW4tcHl0aG9uIHVzYWdlIG92ZXIgSFRUUAorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjYueC5hc2NpaWRvYyNyZWxlYXNlLTMtNi02LCAzLjYuNiBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNi01XV0KID09PSBUaW5rZXJQb3AgMy42LjUgKFJlbGVhc2UgRGF0ZTogSnVseSAzMSwgMjAyMykKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTUtNywgMy41Ljc+Pi4KLQotKiBBZGRlZCBgdGV4dC9wbGFpbmAgTUlNRSB0eXBlIHRvIHRoZSBIVFRQIGVuZHBvaW50IHRvIHJldHVybiBhIEdyZW1saW4gQ29uc29sZS1saWtlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhLgotKiBBZGRlZCBHcmFwaEJpbmFyeSBzZXJpYWxpemF0aW9uIG9wdGlvbiB0byB0aGUgSFRUUCBlbmRwb2ludC4KLSogRml4ZWQgYnVnIHdpdGggYGZhaWxgIHN0ZXAgbm90IHdvcmtpbmcgd2l0aCBhIGBWZXJ0ZXhQcm9ncmFtYCBydW5uaW5nIG9uIHRoZSBzZXJ2ZXIuCi0qIEludHJvZHVjZWQgbWltZSB0eXBlIGBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12MS4wK2pzb247dHlwZWQ9ZmFsc2VgIHRvIGFsbG93IGRpcmVjdCBzcGVjaWZpY2F0aW9uIG9mIEdyYXBoU09OIDEuMCB3aXRob3V0IHR5cGVzLgotKiBJbnRyb2R1Y2VkIG1pbWUgdHlwZSBgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjIuMCtqc29uO3R5cGVkPWZhbHNlYCB0byBhbGxvdyBkaXJlY3Qgc3BlY2lmaWNhdGlvbiBvZiBHcmFwaFNPTiAyLjAgd2l0aG91dCB0eXBlcy4KLSogUmVtb3ZlZCBgZmluYWxgIGNsYXNzIGRlY2xhcmF0aW9uIGZvciBgTGFiZWxTdGVwYC4KLSogRml4ZWQgTWVyZ2VFL01lcmdlViBzdGVwcyB0byBhbHdheXMgdGhyb3cgZXhjZXB0aW9uIGZvciBpbnZhbGlkIGBvbk1hdGNoYCBvcHRpb24uCi0qIFRJTktFUlBPUC0yODAyOiBBZGQgc3VwcG9ydCBmb3IgY3VzdG9tIGRlc2VyaWFsaXplcnMgdG8gdGhlIEdyZW1saW4tR28gRHJpdmVyCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yOTIwIFN1YmdyYXBoU3RyYXRlZ3kgZmFpbHVyZSB3aGVuIHByb3BlcnR5IGtleSBub3QgcHJlc2VudCBvbiB2ZXJ0ZXggaW4gYnkoKQotKiBUSU5LRVJQT1AtMjkzNyBUaHJvdyBhbiBlcnJvciB3aGVuIHRyeWluZyB0byB1c2UgYSBjbG9zZWQgY29ubmVjdGlvbgotKiBUSU5LRVJQT1AtMjk0OCBQUklTTUEgc2VjdXJpdHkgdnVsbmVyYWJpbHR5IGZvciBqYWNrc29uLWRhdGFiaW5kIDIuMTQuMCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI5NTMgU3RhdGljIGltcG9ydCBmb3IgX18udmFsdWVzKCkgb3ZlcnJpZGVuIGJ5IENvbHVtbi52YWx1ZXMoKQotKiBUSU5LRVJQT1AtMjk1OCBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgZm9yIHRpbWVvdXRzIGFyZSBuZXZlciBjYW5jZWxsZWQKLSogVElOS0VSUE9QLTI5NjUgRmlsdGVyUmFua2luZ1N0cmF0ZWd5IHJlbW92aW5nIGxhYmVscyBpdCBzaG91bGRuJ3QgaW4gY2VydGFpbiBjb25kaXRpb25zCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE0MDMgUHJvdmlkZSBzdXBwb3J0IGZvciBHcmFwaEZpbHRlci52ZXJ0ZXhQcm9wZXJ0aWVzKCkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yOTM4IFJldmlzaXQgbWVyZ2Ugc3RlcCBmZWF0dXJlIHRlc3RzCi0qIFRJTktFUlBPUC0yOTM5IFRoZSBNZXJnZSBvbk1hdGNoIG1hcCB2YWxpZGF0aW9uIGlzIGR1cmluZyBleGVjdXRpb24gaW5zdGVhZCBvZiBjb25zdHJ1Y3Rpb24KLSogVElOS0VSUE9QLTI5NDEgRE8gTk9UIHB1cmdlIHRoZSBvdXRwdXQgbG9jYXRpb24gaWYgaXQgaGFzIGNvbnRlbnQgaW4gU3BhcmtHcmFwaENvbXB1dGVyCi0qIFRJTktFUlBPUC0yOTQ3IFByb3ZpZGUgYSBwbGFpbiB0ZXh0IHNlcmlhbGl6ZXIgZm9yIEhUVFAKLSogVElOS0VSUE9QLTI5NTQgUGFzcyBHcmVtbGluIFZlcnNpb24gZnJvbSBNYXZlbiB0byBKYXZhIFdpdGhvdXQgTWFuaWZlc3RzCi0qIFRJTktFUlBPUC0yOTU1IFN1cHBvcnQgU1NMIGluIFdlYlNvY2tldENsaWVudAotKiBUSU5LRVJQT1AtMjk1NiBVcGRhdGUgZ3JlbWxpbnQgdmVyc2lvbiBmb3IgdGhlIHB1Ymxpc2hlZCBhcHBsaWNhdGlvbgotKiBUSU5LRVJQT1AtMjk2MyBJbnRyb2R1Y2UgbmV3IG1pbWVUeXBlIHRvIHJldHVybiBHcmFwaFNvbi0xLjAgaW4gdGV4dCBmb3JtYXQKLSogVElOS0VSUE9QLTI5NzcgRGVwcmVjYXRlIE5lbzRqLUdyZW1saW4KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy42LnguYXNjaWlkb2MjcmVsZWFzZS0zLTYtNSwgMy42LjUgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTYtNF1dCiA9PT0gVGlua2VyUG9wIDMuNi40IChSZWxlYXNlIERhdGU6IE1heSAxMiwgMjAyMykKIAotKiBGaXhlZCBidWcgaW4gYFRleHRQLnJlZ2V4YCBhbmQgYFRleHRQLm5vdFJlZ2V4YCBzZXJpYWxpemF0aW9uIGZvciBKYXZhIEdMVi4KLSogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgR3JlbWxpbi5OZXQgZHJpdmVyIHRoYXQgb25seSBvY2N1cnJlZCBpZiBhIGBDYW5jZWxsYXRpb25Ub2tlbmAgd2FzIHByb3ZpZGVkLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjk0NSBUZXh0UC5yZWdleCgpIFNlcmlhbGl6YXRpb24gRmFpbGluZyBpbiBKYXZhIGRyaXZlcgotKiBUSU5LRVJQT1AtMjk0NCBNZW1vcnkgbGVhayBpbiBHcmVtbGluLk5ldCBkcml2ZXIgaWYgQ2FuY2VsbGF0aW9uVG9rZW4gaXMgdXNlZAorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjYueC5hc2NpaWRvYyNyZWxlYXNlLTMtNi00LCAzLjYuNCBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNi0zXV0KID09PSBUaW5rZXJQb3AgMy42LjMgKFJlbGVhc2UgRGF0ZTogTWF5IDEsIDIwMjMpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy01LTYsIDMuNS42Pj4uCi0KLSogRml4ZWQgYnVnIGluIGBlbGVtZW50KClgIHdoZW4gdHJhdmVyc2luZyBmcm9tIGVkZ2VzIHdoZXJlIGJ1bGtpbmcgd2FzIGVuYWJsZWQuCi0qIFJlZmFjdG9yZWQgYFByb3BlcnR5TWFwU3RlcGAgdG8gaW1wcm92ZSBleHRlbnNpYmlsaXR5IGJ5IHByb3ZpZGVycy4gUmVtb3ZlZCBgZmluYWxgIGNsYXNzIGRlY2xhcmF0aW9uIGZvciBgUHJvamVjdFN0ZXBgIGFuZCBgQ29hbGVzY2VTdGVwYC4KLSogRml4ZWQgYnVnIGluIGdyYW1tYXIgdGhhdCBwcmV2ZW50ZWQgZGVjbGFyYXRpb24gb2YgYSBgTWFwYCBrZXkgbmFtZWQgYG5ld2Agd2l0aG91dCBxdW90ZXMuCi0qIEZpeGVkIGJ1ZyBpbiBncmFtbWFyIHRoYXQgcHJldmVudGVkIHBhcnNpbmcgb2YgYE1hcGAga2V5IHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzaXMgd2hpY2ggaXMgYWxsb3dhYmxlIGluIEdyb292eS4KLSogRml4ZWQgYnVnIGluIGBHcm9vdnlUcmFuc2xhdG9yYCB0aGF0IHN1cnJvdW5kZWQgYFN0cmluZ2Aga2V5cyB3aXRoIHBhcmVudGhlc2lzIGZvciBgTWFwYCB3aGVuIG5vdCBuZWNlc3NhcnkuCi0qIEFkZGVkIHN1cHBvcnQgdG8gdGhlIGdyYW1tYXIgYWxsb3dpbmcgYExpc3RgIGFuZCBgTWFwYCBrZXkgZGVjbGFyYXRpb25zIGZvciBgTWFwYCBlbnRyaWVzLgotKiBGaXhlZCBgRGlyZWN0aW9uYCBlbnVtIGJ1ZyBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCB3aGVyZSBgRGlyZWN0aW9uLmZyb21fYCBhbmQgYERpcmVjdGlvbi50b2Agd2FzIG5vdCBwcm9wZXJseSBhbGlhc2VkIHRvIGBEaXJlY3Rpb24uT1VUYCBhbmQgYERpcmVjdGlvbi5JTmAKLSogRml4ZWQgYERpcmVjdGlvbmAgZW51bSBpbiBgZ3JlbWxpbi1weXRob25gIHdoZXJlIGBEaXJlY3Rpb24uZnJvbV9gIGFuZCBgRGlyZWN0aW9uLnRvYCB3ZXJlIG5vdCBhZGRlZCwgYW5kIHRoZXkgY2FuIG5vdyBiZSB1c2VkIGluc3RlYWQgb2YgZGVmaW5pbmcgYGZyb21fPURpcmVjdGlvbi5PVVRgIGFuZCBgdG89RGlyZWN0aW9uLklOYAotKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBjb21wYXJpc29uIChlcXVhbHMpIGJldHdlZW4gbm90IGNvbXBhdGlibGUgdHlwZXMgYW5kIG51bGxzLgotKiBGaXhlZCBgbWVyZ2VWKClgIGFuZCBgbWVyZ2VFKClgIHN0ZXBzIHRvIHdvcmsgd2hlbiBgb25DcmVhdGVgIGlzIGltbXV0YWJsZSBtYXAuCi0qIEludHJvZHVjZWQgYFdyaXRpbmdgIGFuZCBgRGVsZXRpbmdgIG1hcmtlciBpbnRlcmZhY2VzIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSBzdGVwIGNhbiBwZXJmb3JtIHdyaXRlIG9yIGRlbGV0ZSBvciBib3RoIG9uIEdyYXBoLgotKiBGb3IgYG1lcmdlVigpYCBhbmQgYG1lcmdlRSgpYCwgYWRkZWQgY2hlY2tzIGZvciBpbGxlZ2FsIGhpZGRlbiBrZXlzIGFuZCByZWZhY3RvcmVkIGBzZWFyY2hWZXJ0aWNlc2AgdG8gYWxsb3cgc3ViY2xhc3NlcyB0byBvdmVycmlkZSBzZWFyY2ggY3JpdGVyaWEuCi0qIEFkZGVkIHN0YXRpYyBtYXAgY2FwdHVyaW5nIHBvc3NpYmxlIGBUcmF2ZXJzYWxgIHN0ZXBzIHRoYXQgc2hhbGwgYmUgYWRkZWQgdG8gdHJhdmVyc2FsIGZvciBhIGdpdmVuIG9wZXJhdG9yLgotKiBGaXhlZCBidWcgd2hpY2ggY2F1c2VkIHNvbWUgdHJhdmVyc2FscyB0byB0aHJvdyBgR3JlbWxpblR5cGVFcnJvckV4Y2VwdGlvbmAgdG8gdXNlcnMuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yNTI2IEdyZW1saW4gQ29uc29sZSBwZXJmb3JtYW5jZSB3aXRoIGluY29tcGxldGUgbXVsdGktbGluZSBzY3JpcHRzCi0qIFRJTktFUlBPUC0yNzY3IFJlcGVhdCBPdXQgVGltZXMgdHJhdmVyc2FsIGhhbmdzIGluZGVmaW5pdGVseSBvbiBmaXJzdCBleGVjdXRpb24KLSogVElOS0VSUE9QLTI4MjAgZ3JlbWxpbi1weXRob24gX2Nsb3NlX3Nlc3Npb24gcmFjZSBjb25kaXRpb24vRkQgbGVhawotKiBUSU5LRVJQT1AtMjg1NSBQZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBUaW5rZXJHcmFwaCAzLjUuNCBhbmQgMy41LjUKLSogVElOS0VSUE9QLTI4NTYgbWF0aCgpIHN0ZXAgZmFpbHMgaWYgdmFyaWFibGUgbmFtZSBjb250YWlucyBhIGtleXdvcmQKLSogVElOS0VSUE9QLTI4NjEgRml4IGluY29ycmVjdCBzeW1saW5rcyBpbiBzb3VyY2UgcmVsZWFzZSB6aXAKLSogVElOS0VSUE9QLTI4NjMgSGFzSWQgU3RlcCBnZW5lcmF0ZXMgaW5jb3JyZWN0IHJlc3VsdHMgd2hlbiBnaXZlbiBhIGxpc3Qgb2YgSURzIG1pZC10cmF2ZXJzYWwKLSogVElOS0VSUE9QLTI4NzAgbWVyZ2VWIHJlcXVpcmVzIGtleSBvZiAnbmV3JyB0byBiZSBxdW90ZWQKLSogVElOS0VSUE9QLTI4NzggSW5jb3JyZWN0IGhhbmRsaW5nIG9mIGxvY2FsIG9wZXJhdGlvbnMgd2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlIGVsZW1lbnRzCi0qIFRJTktFUlBPUC0yODg4IERlZmF1bHRUcmF2ZXJzYWwncyBhcHBseVN0cmF0ZWdpZXMgcGVyZm9ybWFuY2UgZGVjcmVhc2UKLSogVElOS0VSUE9QLTI4OTEgSW5jb25zaXN0ZW50IGJlaGF2aW9yIHdoZW4gY29tcGFyaW5nIGEgY291bnRlZCB2YWx1ZSB3aXRoIGEgbmVnYXRpdmUgdmFsdWUKLSogVElOS0VSUE9QLTI4OTMgSW5jb3JyZWN0bHkgY29tcGFyaW5nIGEgY291bnRlZCB2YWx1ZSB3aXRoIG11bHRpcGxlIHByZWRpY2F0ZXMKLSogVElOS0VSUE9QLTI5MDEgSW5jb3JyZWN0IHJlc3VsdCBjYXVzZWQgYnkgaGFzKGtleSwgcHJlZGljYXRlKQotKiBUSU5LRVJQT1AtMjkwMiBDcml0aWNhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGluIHNuYWtleWFtbAotKiBUSU5LRVJQT1AtMjkwNSBncmVtbGluLWdvIGdvcmlsbGFUcmFuc3BvcnRlci5sb2dIYW5kbGVyIGlzIG5vdCBpbml0aWFsaXplZCBjb3JyZWN0bHkgYW5kIGxlYWRzIHRvIHBhbmljCi0qIFRJTktFUlBPUC0yOTExIENvdW50U3RyYXRlZ3kgY29udmVydHMgY291bnQoKS5pcygwKSB3cm9uZ2x5IHVuZGVyIENvbm5lY3RpdmVTdHJhdGVneQotKiBUSU5LRVJQT1AtMjkxOCBVdGlscy5HZW5lcmF0ZVVzZXJBZ2VudCBhc3N1bWVzIEdyZW1saW4uTmV0LmRsbCB0byBiZSBwcmVzZW50IHdoZW4sIGluIHNvbWUgZW52aXJvbm1lbnRzLCBpdCBpcyBub3QuCi0qIFRJTktFUlBPUC0yOTIyIEdyb292eVRyYW5zbGF0b3IgcHJvZHVjZXMgYSBNYXAgbm90IHBhcnNlYWJsZSBieSB0aGUgZ3JhbW1hcgotKiBUSU5LRVJQT1AtMjkyNSBtZXJnZUUoKSBpbiBqYXZhc2NyaXB0IHByb2R1Y2luZyBhbiBlcnJvcgotKiBUSU5LRVJQT1AtMjkyNiBHcmVtbGluLUphdmEgPiBBbiBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBvY2N1cnMgb24gY2FsbGluZyBuZXh0KCkgYWZ0ZXIgYSBtZXJnZSBzdGVwIHdpdGggdGhlIG9wdGlvbiBzdGVwIG1vZHVsYXRvciBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdAotKiBUSU5LRVJQT1AtMjkyOCBlbGVtZW50KCkgbm90IHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBlZGdlIHByb3BlcnRpZXMKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjg0MSBUZXN0IGFuZCBGaXggUGVyIFJlcXVlc3QgU2V0dGluZ3MgaW4gR28KLSogVElOS0VSUE9QLTI4NTIgVXBkYXRlIE1hdmVuIHBsdWdpbiBmb3IgZG9ja2VyLWltYWdlcyBidWlsZGluZyBmb3IgTTEgY29tcGF0aWJpbGl0eQotKiBUSU5LRVJQT1AtMjg1NyBHcmFwaFNPTlJlY29yZFJlYWRlciBkb2VzIG5vdCBhbGxvdyBjb25maWd1cmUgYSBHcmFwaEZpbHRlciBkdXJpbmcgZGVzZXJpYWxpemF0aW9uCi0qIFRJTktFUlBPUC0yODY1IEFkZCBoYXMgc3RlcHMgaW5qZWN0ZWQgYnkgUGFydGl0aW9uU3RyYXRlZ3kgYXQgdGhlIGVuZCBvZiB0aGUgZmlsdGVyCi0qIFRJTktFUlBPUC0yODkwIEF2b2lkIGV4Y2VwdGlvbnMgb24gbG9jYWwgc2NvcGUgYmFzZWQgc3RlcHMgd2hlcmUgcG9zc2libGUKLSogVElOS0VSUE9QLTI4OTkgU2FtcGxlR2xvYmFsU3RlcCBzYW1wbGVzIGluZWZmaWNpZW50bHkgd2l0aCBUcmF2ZXJzZXJTZXQgcnVubmluZyBpbnRvIGhhc2ggY29sbGlzaW9ucwotKiBUSU5LRVJQT1AtMjkxMiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGFkZEUoKSB3aGVuIHRyYXZlcnNlciBpcyBpbmNvcnJlY3QKLSogVElOS0VSUE9QLTI5MTkgSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgZm9yIGRlZXBseSBuZXN0ZWQgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjkyNCBSZWZhY3RvciBQcm9wZXJ0eU1hcFN0ZXAgdG8gYmUgYWJsZSB0byBvdmVyd3JpdGUgbWFwIG1ldGhvZAotKiBUSU5LRVJQT1AtMjkyOSBJbnRyb2R1Y2UgbmV3IG1hcmtlciBpbnRlcmZhY2VzIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSBzdGVwIGNhbiBwZXJmb3JtIHdyaXRlIG9yIGRlbGV0ZSBvciBib3RoCi0qIFRJTktFUlBPUC0yOTMxIEZpeCBhIGZldyBtaW5vciBtZXJnZVYvRSBpc3N1ZXMKLSogVElOS0VSUE9QLTI5MzQgT3B0aW1pemUgT2JqZWN0V3JpdGFibGUgZm9yIGRpc3BsYXlpbmcgY29udGVudCBvZiBKYXZhIENvbGxlY3Rpb24gb3IgTWFwIHRvIHJlZHVjZSBPT00KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy42LnguYXNjaWlkb2MjcmVsZWFzZS0zLTYtMywgMy42LjMgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTYtMl1dCiA9PT0gVGlua2VyUG9wIDMuNi4yIChSZWxlYXNlIERhdGU6IEphbnVhcnkgMTYsIDIwMjMpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy01LTUsIDMuNS41Pj4uCi0KLSogRml4ZWQgYnVnIGluIHRoZSBHcmVtbGluIGdyYW1tYXIgZm9yIHBhcnNpbmcgb2YgZW1wdHkgcXVlcmllcy4KLSogUHJvdmlkZWQgbWVjaGFuaXNtIGZvciBwcm92aWRlciBwbHVnaW5zIHRvIGdldCBub3RpZmllZCBvbiBzY3JpcHQvcXVlcnkgcHJvY2Vzc2luZyB2aWEgYEdyYXBoTWFuYWdlcmAuCi0qIEZpeGVkIGJ1ZyBpbiBgc2VsZWN0KClgIHdoZW4gdXNpbmcgbXVsdGlwbGUgbGFiZWxzLgotKiBNb3ZlZCBHaGVya2luIGZlYXR1cmUgdGVzdHMgdG8gYGdyZW1saW4tdGVzdGAgcmVzb3VyY2VzIHNvIHRoYXQgdGhleSBhcmUgbW9yZSBlYXNpbHkgcmVmZXJlbmNlZCBieSBwcm92aWRlcnMuCi0qIE1hZGUgcXVhbGl0eSBvZiBsaWZlIGNoYW5nZXMgdG8gc2VtYW50aWNzIGZvciBgbWVyZ2VWL0VgIGJhc2VkIG9uIGluaXRpYWwgZmVlZGJhY2suCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yNzY1IFJhY2UgY29uZGl0aW9uIGR1cmluZyBzY3JpcHQgY3JlYXRpb24gd2hlbiB1c2luZyBVbmlmaWVkQ2hhbm5lbGl6ZXIKLSogVElOS0VSUE9QLTI3NjkgZ3JlbWxpbi1zZXJ2ZXIgZG9lcyBub3QgcmVwbHkgd2l0aCBhIHRpbWVvdXQgcmVzcG9uc2UgdG8gYWxsIHRpbWVkIG91dCByZXF1ZXN0cwotKiBUSU5LRVJQT1AtMjc3MSBDcml0aWNhbCBzZXZlcml0eSBzZWN1cml0eSB2dWxuZXJhYmlsdHkgaW4gY29tbW9ucy1jb25maWd1cmF0aW9uIDIuNwotKiBUSU5LRVJQT1AtMjc5NiBIaWdoIHNldmVyaXR5IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgZm91bmQgaW4gc25ha2V5YW1sCi0qIFRJTktFUlBPUC0yODAxIEluY29ycmVjdCBkZXByZWNhdGlvbiBub3RpY2Ugb24gZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTI4MDMgSW5jb3JyZWN0IGNvdW50KCkgd2l0aCBzYW1wbGUoKSBpbiBUaW5rZXJHcmFwaAotKiBUSU5LRVJQT1AtMjgwNSBObyByZXN1bHRzIHJldHVybmVkIGZvciBtdWx0aXBsZSBsYWJlbHMgdG8gc2VsZWN0KCkKLSogVElOS0VSUE9QLTI4MDkgSGlnaCBzZXZlcml0eSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGZvdW5kIGluIGphY2tzb24gZGF0YWJpbmQKLSogVElOS0VSUE9QLTI4MTUgQ3JpdGljYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBmb3IgYXBhY2hlIGNvbW1vbnMtdGV4dAotKiBUSU5LRVJQT1AtMjgxNiBHaGVya2luIHRlc3QgaXNzdWVzIGZvciBpbXBsZW1lbnRlcnMKLSogVElOS0VSUE9QLTI4MTcgICJDb3VsZCBub3QgZmluZCBhIHR5cGUgaWRlbnRpZmllciBmb3IgdGhlIGNsYXNzIDogY2xhc3MgamF2YS5sYW5nLkJ5dGUiIG9jY3VycyB3aGVuIGR1bXBpbmcgZ3JhcGggdG8gZ3JhcGhzb24gZm9ybWF0Ci0qIFRJTktFUlBPUC0yODI2IENyaXRpY2FsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gaXZ5Ci0qIFRJTktFUlBPUC0yODM2IEdpdGh1YiBhY3Rpb25zIGRvIG5vdCBydW4gamF2YSBkcml2ZXIgaW50ZWdyYXRpb24gdGVzdHMKLSogVElOS0VSUE9QLTI4NDAgVGVzdCBGYWlsdXJlcyBvbiBOb25EZXgKLSogVElOS0VSUE9QLTI4NDMgU2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGZvdW5kIGluIG5ldHR5IHZlcnNpb24gNC4xLjc3Ci0qIFRJTktFUlBPUC0yODQ5IEluY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBmb3IgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuV2l0aCBpbiBncmVtbGluLWdvCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTI0NzEgQWRkIGxvZ2dpbmcgdG8gR3JlbWxpbi5OZXQgZHJpdmVyCi0qIFRJTktFUlBPUC0yNDgwIFVzZXIgYWdlbnQgZm9yIEdyZW1saW4gZHJpdmVycwotKiBUSU5LRVJQT1AtMjYyMiBFbmZvcmNlIG9yZGVyaW5nIHNlbWFudGljcyBpbiBmZWF0dXJlIHRlc3RzCi0qIFRJTktFUlBPUC0yNjk2IFJlZmFjdG9yIEdoZXJraW4gdGVzdCBmcmFtZXdvcmsgdG8gYmV0dGVyIGhhbmRsZSBiaW5kaW5ncwotKiBUSU5LRVJQT1AtMjczNyBEb2NrZXJpemVkIEJ1aWxkIGFuZCBUZXN0IEVudmlyb25tZW50cwotKiBUSU5LRVJQT1AtMjc3MiBBZGQgU3BhcmsgdXRpbGl0eSB0byBsb2FkIHZlcnRpY2VzIGFzIFJERAotKiBUSU5LRVJQT1AtMjc3OSBGbG9hdGluZyBDb25uZWN0ZWRDb21wb25lbnQgRmVhdHVyZSBGYWlsdXJlcyBmb3IgR2l0SHViIEFjdGlvbnMgb24gd2luZG93cwotKiBUSU5LRVJQT1AtMjc4NSBJbmFiaWxpdHkgdG8gTW9jayBSZXR1cm5lZCBSZXN1bHQgVHlwZXMgaW4gR3JlbWxpbi1HbyBEcml2ZXIKLSogVElOS0VSUE9QLTI3OTIgQmV0dGVyIGV4Y2VwdGlvbiB3aGVuIEphdmFUcmFuc2xhdG9yIGZpbmRzIGEgbWV0aG9kIGJ1dCBub3QgdGhlIG92ZXJsb2FkCi0qIFRJTktFUlBPUC0yNzk0IEFsbG93IGNhbmNlbGxhdGlvbiBvZiBHcmVtbGluLk5ldCBhc3luYyBtZXRob2RzCi0qIFRJTktFUlBPUC0yODA0IGdoZXJraW4gZmVhdHVyZSBmaWxlcyBzaG91bGQgYmUgb24gdGhlIGNsYXNzcGF0aAotKiBUSU5LRVJQT1AtMjgwNiBQcm92aWRlIG1ldGhvZCBmb3IgcHJvdmlkZXIgcGx1Z2lucyB0byBnZXQgbm90aWZpZWQgb24gc2NyaXB0L3F1ZXJ5IHByb2Nlc3NpbmcKLSogVElOS0VSUE9QLTI4MDggSW1wcm92ZSBDb21wYXRpYmlsaXR5IG9uIEFSTSBtYWNoaW5lcwotKiBUSU5LRVJQT1AtMjgxMyBJbXByb3ZlIGRyaXZlciB1c2FiaWxpdHkgZm9yIGNhc2VzIHdoZXJlIE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbiBpcyBjdXJyZW50bHkgdGhyb3duCi0qIFRJTktFUlBPUC0yODE0IEFkZCBhIFNTTCBoYW5kc2hha2UgdGltZW91dCBjb25maWd1cmF0aW9uIHRvIHRoZSBkcml2ZXIKLSogVElOS0VSUE9QLTI4MTggZXhjbHVkZSBtb2NraXRvLWNvcmUgaW4gZ3JlbWxpbi1jb3JlIFtjb21waWxlIHNjb3BlXSAoaW1wb3J0IGJ5IGpjYWJpLW1hbmlmZXN0cykKLSogVElOS0VSUE9QLTI4MzMgVGVzdFN1cHBvcnQgbG9hZHMgZmlsZXMgdG9vIHNsb3cKLSogVElOS0VSUE9QLTI4MzQgQ2xvbmVWZXJ0ZXhQcm9ncmFtIG9wdGltaXphdGlvbiBvbiBTcGFya0dyYXBoQ29tcHV0ZXIKLSogVElOS0VSUE9QLTI4NDIgRXhwYW5kIEdyZW1saW5TY3JpcHRDaGVja2VyIHRvIGluY2x1ZGUgcmVxdWVzdCBpZCBvdmVycmlkZXMKLSogVElOS0VSUE9QLTI4NTAgTW9kaWZpY2F0aW9ucyB0byBtZXJnZVYvRSBzZW1hbnRpY3MKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy42LnguYXNjaWlkb2MjcmVsZWFzZS0zLTYtMiwgMy42LjIgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTYtMV1dCiA9PT0gVGlua2VyUG9wIDMuNi4xIChSZWxlYXNlIERhdGU6IEp1bHkgMTgsIDIwMjIpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy01LTQsIDMuNS40Pj4uCi0KLSogTWFkZSBHcmFwaEJpbmFyeSB0aGUgZGVmYXVsdCBzZXJpYWxpemF0aW9uIGZvcm1hdCBmb3IgLk5FVCBhbmQgUHl0aG9uLgotKiBBZGRlZCBtaXNzaW5nIGBSZXNwb25zZVN0YXR1c0NvZGVFbnVtYCBlbnRyeSBmb3IgNTk1IGZvciAuTkVULgotKiBGaXggYSBqYXZhZG9jIGNvbW1lbnQgaW4gYENsdXN0ZXIuQnVpbGRlcmAgcmVnYXJkaW5nIG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24uCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yNzM0IE51bGxQb2ludGVyRXhjZXB0aW9uIHdoZW4gY2FsbGluZyBDbGllbnQgY2hvb3NlQ29ubmVjdGlvbigpCi0qIFRJTktFUlBPUC0yNzM2IFBsdWdpbkFjY2VwdG9yIGludGVyZmFjZSBubyBtb3JlIGF2YWlsYWJsZSBpbiAzLjUuMysgYnV0IHJlZmVycmVkIGluIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTI3NDEgR3JhcGhNTFdyaXRlciBlcnJvciBtZXNzYWdlIGlzIG5vdCBwcm9wZXJseSBmb3JtYXR0ZWQKLSogVElOS0VSUE9QLTI3NDYgTWVkaXVtIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBvbiBsb2diYWNrLWNvcmUKLSogVElOS0VSUE9QLTI3NTEgVHJhbnNhY3Rpb246IHR4LmNvbW1pdCgpIGhhbmdzIHVwIGluIGphdmFzY3JpcHQgY2xpZW50LWxpYgotKiBUSU5LRVJQT1AtMjc1NCBKYXZhc2NyaXB0IGNsaWVudCBoYW5ncyBpZiB0aGUgc2VydmVyIHJlc3RhcnRzCi0qIFRJTktFUlBPUC0yNzY4IEJyYW5jaFN0ZXAgcGlja1Rva2VuIHNob3VsZCBiZSBpbnRlZ3JhdGVkIHdoZW4gYWRkZWQgYXMgYSBjaGlsZCBvcHRpb24KLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjIyOSBKYXZhU2NyaXB0IEdMVjogQWRkIEdyYXBoQmluYXJ5IFN1cHBvcnQKLSogVElOS0VSUE9QLTI2MzEgR3JhcGhTT04gZmxvYXQgc2VyaWFsaXphdGlvbiB3aGVuIHVqc29uIGlzIHVzZWQgaXMgaW1wcmVjaXNlCi0qIFRJTktFUlBPUC0yNjkzIENvbXBsZXRlIEdyYXBoQmluYXJ5IHN1cHBvcnQgaW4gUHl0aG9uCi0qIFRJTktFUlBPUC0yNzE1IHJlbW92ZSBsb2c0anYxIGRlcGVuZGVuY3kKLSogVElOS0VSUE9QLTI3MjMgTWFrZSBHcmFwaEJpbmFyeSB0aGUgZGVmYXVsdCBzZXJpYWxpemF0aW9uIGZvcm1hdCBmb3IgLk5FVCBhbmQgUHl0aG9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjc0MCBmaXJzdCByZXF1ZXN0IHN1c3BlbmQgbW9yZSB0aGFuIDlzIHdoZW4gdXNpbmcgZ3JlbWxpbi1qYXZhLWRyaXZlcgotKiBUSU5LRVJQT1AtMjc0OCBNZWRpdW0gc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBvbiBuZXR0eS1hbGwgYW5kIG5ldHR5LWNvZGVjCi0qIFRJTktFUlBPUC0yNzYyIGdldFNjb3BlS2V5cyBzaG91bGQgcmVzcGVjdCB0aGUgb3JkZXIgb2Yga2V5cyBwYXNzZWQgaW4gU3RlcAotKiBUSU5LRVJQT1AtMjc2NCBBV1MgTmVwdHVuZSByZXR1cm5zIGFuIGluYWNjZXNzaWJsZSBzdHJ1Y3R1cmVkIGVycm9yIHJlc3BvbnNlCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNi54LmFzY2lpZG9jI3JlbGVhc2UtMy02LTEsIDMuNi4xIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy02LTBdXQogPT09IFRpbmtlclBvcCAzLjYuMCAoUmVsZWFzZSBEYXRlOiBBcHJpbCA0LCAyMDIyKQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtNS0zLCAzLjUuMz4+LgotCi0qIEFkZGVkIHBhcnNlciBzdXBwb3J0IGZvciBgTmFOYCBhbmQgYEluZmluaXR5YC4KLSogSW1wbGVtZW50ZWQgY29tcGFyYWJpbGl0eS9vcmRlcmFiaWxpdHkgc2VtYW50aWNzIGRlZmluZWQgaW4gdGhlIEdyYXBoIFByb3ZpZGVyIGRvY3VtZW50YXRpb24uCi0qIEFkZGVkIGBUZXh0UC5yZWdleGAgYW5kIGBUZXh0UC5ub3RSZWdleGAuCi0qIENoYW5nZWQgVGlua2VyR3JhcGggdG8gYWxsb3cgaWRlbnRpZmllcnMgdG8gYmUgaGV0ZXJvZ2VuZW91cyB3aGVuIGZpbHRlcmluZy4KLSogUHJldmVudGVkIHZhbHVlcyBvZiBgVGAgdG8gYHByb3BlcnR5KClgIGZyb20gYmVpbmcgYG51bGxgLgotKiBBZGRlZCB0aHJvd2luZyBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgd2hlbiBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3ZlcmZsb3cgZm9yIGJ5dGUsIHNob3J0LCBpbnQgYW5kIGxvbmcgYXJndW1lbnRzLgotKiBBZGRlZCBgZWxlbWVudCgpYCBzdGVwLgotKiBBZGRlZCBgY2FsbCgpYCBzdGVwLgotKiBBZGRlZCBgZmFpbCgpYCBzdGVwLgotKiBBZGRlZCBgbWVyZ2VWKClgIGFuZCBgbWVyZ2VFKClgIHN0ZXBzLgotKiBBZGRlZCBgRGlyZWN0aW9uYCBhbGlhc2VzIG9mIGBmcm9tYCBhbmQgYHRvYC4KLSogTW92ZWQgYFRyYXZlcnNhbE9wdGlvblBhcmVudC5QaWNrYCB0byBpdHMgb3duIGNsYXNzIGFzIGBQaWNrYC4KLSogSW50cm9kdWNlZCBQeXRob25pYyBHcmVtbGluIHN0ZXAgbmFtZXMgdXNpbmcgc25ha2UgY2FzZSBhbmQgZGVwcmVjYXRlZCBjYW1lbCBjYXNlIG5hbWluZy4KLSogSW1wcm92ZWQgR2hlcmtpbiB0ZXN0IGZyYW1ld29yayB0byBhbGxvdyBmb3IgYXNzZXJ0aW5nIHRyYXZlcnNhbCBleGNlcHRpb25zIGFzIGEgYmVoYXZpb3IuCi0qIEZpeGVkIHF1ZXJ5IGluZGVudGF0aW9uIGZvciBwcm9maWxlIG1ldHJpY3Mgd2hlcmUgaW5kZW50IGxldmVscyB3ZXJlIG5vdCBiZWluZyByZXNwZWN0ZWQuCi0qIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgbm8gbG9uZ2VyIGFjY2VwdHMgYSBgU3RyaW5nYCByZXByZXNlbnRhdGlvbiBvZiBgQnl0ZWNvZGVgIGZvciB0aGUgImdyZW1saW4iIGFyZ3VtZW50IHdoaWNoIHdhcyBsZWZ0IHRvIHN1cHBvcnQgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIGRyaXZlcnMuCi0qIFJlbW92ZWQgcmVxdWlyZW1lbnQgdGhhdCAiaWRzIiB1c2VkIHRvIGZpbHRlciB2ZXJ0aWNlcyBhbmQgZWRnZXMgbmVlZCB0byBiZSBhbGwgb2YgYSBzaW5nbGUgdHlwZS4KLSogQ3JlYXRlZCBgZ3JlbWxpbi1hbm5vdGF0aW9uc2AgbW9kdWxlIHdoZXJlIHRoZSBgQEdyZW1saW5Ec2xgIGFubm90YXRpb24gYW5kIHJlbGF0ZWQgY29kZSBoYXMgYmVlbiBtb3ZlZC4KLSogTW92ZWQgYEdyZW1saW5TY3JpcHRDaGVja2VyYCB0byBgZ3JlbWxpbi1jb3JlYCBmcm9tIGBncmVtbGluLWdyb292eWAgc2luY2UgaXQgaXMgbm90IEdyb292eSBkZXBlbmRlbnQuCi0qIFJlbW92ZWQgYGdyb292eWAgYW5kIGBncm9vdnktanNvbmAgZGVwZW5kZW5jaWVzIGZyb20gYGdyZW1saW4tZHJpdmVyYCBhcyB3ZWxsIGFzIHJlbGF0ZWQgYEpzb25CdWlsZGVyYCBzZXJpYWxpemF0aW9uIHN1cHBvcnQuCi0qIFJlcGxhY2VkIGxvZzRqIHVzYWdlIHdpdGggbG9nYmFjayB3aGVyZSBidWlsZHMgcmVseSBvbiBhbmQgcGFja2FnZWQgZGlzdHJpYnV0aW9ucyBub3cgY29udGFpbiB0aGUgbGF0dGVyLgotKiBJbXByb3ZlZCBiZWhhdmlvciBvZiBgVigpYCBhbmQgYEUoKWAgd2hlbiBgbnVsbGAgaXMgYW4gYXJndW1lbnQgcHJvZHVjaW5nIGEgZmlsdGVyaW5nIGJlaGF2aW9yIHJhdGhlciB0aGFuIGFuIGV4Y2VwdGlvbi4KLSogUHJldmVudGVkIG1ldHJpY3MgY29tcHV0YXRpb24gdW5sZXNzIHRoZSB0cmF2ZXJzYWwgaXMgaW4gYSBsb2NrZWQgc3RhdGUuCi0qIEFkZGVkIHN5bnRheCB0byBHcmVtbGluIGdyYW1tYXIgdG8gZXhwbGljaXRseSBkZWZpbmUgYGJ5dGVgLCBgc2hvcnRgIGFuZCBgQmlnSW50ZWdlcmAuCi0qIEFkZGVkIHN5bnRheCB0byBHcmVtbGluIGdyYW1tYXIgdG8gYWxsb3cgY29uc3RydWN0aW9uIG9mIGEgcmVmZXJlbmNlIGBWZXJ0ZXhgLgotKiBDaGFuZ2VkIEdyZW1saW4gZ3JhbW1hciB0byBhbGxvdyBmb3IgR3Jvb3Z5LWxpa2Ugc3ludGF4IHdoZW4gcGFyc2luZyBhIGBNYXBgIGxpdGVyYWwuCi0qIENyZWF0ZWQgYSB3YXkgdG8gcHJvZHVjZSBhIGNvcnB1cyBvZiBHcmVtbGluIHRyYXZlcnNhbHMgdmlhIGBGZWF0dXJlUmVhZGVyYCBhbmQgYERvY3VtZW50YXRpb25SZWFkZXJgIGluIGBncmVtbGluLWxhbmd1YWdlYC4KLSogQ2hhbmdlZCBtZWNoYW5pc20gZm9yIGRldGVybWluaW5nIGlmIGBpZGAgZXF1YWxpdHkgd2l0aCBgdG9TdHJpbmcoKWAgaXMgdXNlZCBieSB2YWxpZGF0aW5nIHRoYXQgZWxlbWVudHMgb2YgdGhlIHByZWRpY2F0ZSBjb2xsZWN0aW9uIGFyZSBhbGwgYFN0cmluZ2AgcmF0aGVyIHRoYW4gZW5mb3JjaW5nIGhvbW9nZW5vdXMgY29sbGVjdGlvbnMgaW4gdGhlIHByb2Nlc3MuCi0qIEV4cG9zZWQgR2hlcmtpbiB0ZXN0cyBhcyBwYXJ0IG9mIHRoZSBwcm92aWRlciB0ZXN0IHN1aXRlLgotKiBQYWNrYWdlZCBHaGVya2luIHRlc3RzIGFuZCBkYXRhIGFzIHN0YW5kYWxvbmUgcGFja2FnZSBhcyBhIGNvbnZlbmllbmNlIGRpc3RyaWJ1dGlvbi4KLSogUmVtb3ZlZCBgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lgIGFzIGEgc3RyYXRlZ3kgdGhhdCBpcyBhcHBsaWVkIGJ5IGRlZmF1bHQuCi0qIENoYW5nZWQgYGJ5KClgIG1vZHVsYXRvciBzZW1hbnRpY3MgdG8gY29uc2lzdGVudGx5IGZpbHRlci4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3J5byBgTWVzc2FnZVNlcmlhbGl6ZXJgIGltcGxlbWVudGF0aW9ucy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZW5hYmxlQXVkaXRMb2dgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3Jvb3Z5VHJhbnNsYXRvcmAgZnJvbSBgZ3JlbWxpbi1ncm9vdnlgIG1vZHVsZS4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3JlbWxpbiBzdGVwcyB0aGF0IGNvbmZsaWN0ZWQgd2l0aCBQeXRob24ga2V5d29yZHMuCi0qIFJlbW92ZWQgdGhlIGRlcGVuZGVuY3kgb24gYHNpeGAgZnJvbSBgZ3JlbWxpbi1weXRob25gLgotKiBCdW1wZWQgdG8gQXBhY2hlIEhhZG9vcCAzLjMuMS4KLSogQnVtcGVkIHRvIEFwYWNoZSBTcGFyayAzLjIuMC4KLSogQnVtcGVkIG5vZGUuanMgaW4gYGdyZW1saW4tamF2YXNjcmlwdGAgdG8gdjE2LjEzLjAuCi0qIENoYW5nZWQgYE51bWJlckhlbHBlcmAgdG8gcHJvcGVybHkgY2FzdCB0byBgYnl0ZWAgYW5kIGBzaG9ydGAgcmF0aGVyIHRoYW4gZGVmYXVsdCBjb2VyY2luZyB0byBgSW50ZWdlcmAuCi0qIE1vZGlmaWVkIHNvbWUgZHJpdmVyIGRlZmF1bHRzIChtYXhpbXVtIGNvbnRlbnQgbGVuZ3RoLCBwb29sIHNpemUsIG1heGltdW0gaW4gcHJvY2VzcykgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuCi0qIEZpeGVkIGEgcG90ZW50aWFsIGNvbm5lY3Rpb24gbG9hZCBiYWxhbmNpbmcgaXNzdWUgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gbm90IHVwZGF0aW5nIHRoZSB1c2FnZSBjb3VudC4KLSogRXh0ZW5kZWQgYHByb3BlcnR5KClgIHRvIGFsbG93IGZvciBzZXR0aW5nIGEgYE1hcGAgb2YgcHJvcGVydHkgdmFsdWVzLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjM1OCBQb3RlbnRpYWwgY29ubmVjdGlvbiBsZWFrIG9uIGNsaWVudCBkaXNwb3NpbmcKLSogVElOS0VSUE9QLTI0ODYgQ2xpZW50IGRvZXMgbm90IGxvYWQgYmFsYW5jZSByZXF1ZXN0cyBhY3Jvc3MgYXZhaWxhYmxlIGNvbm5lY3Rpb25zCi0qIFRJTktFUlBPUC0yNTA3IFJlbW92ZSByZXF1aXJlbWVudCB0aGF0IEdyYXBoIGltcGxlbWVudGF0aW9ucyBtdXN0IGZpbHRlciBvbiBob21vZ2VuZW91cyBpZGVudGlmaWVycyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI1MjIgRGVmYXVsdFRyYXZlcnNhbE1ldHJpY3M6OnRvU3RyaW5nIGRvZXMgbm90IGluZGVudCBhbm5vdGF0aW9ucyBjb3JyZWN0bHkKLSogVElOS0VSUE9QLTI1NTQgRXh0cmFjdGluZyBzdGVwIG1ldHJpY3MgZnJvbSBQcm9maWxlU3RlcCB0aHJvd3MgTlBFIGlmIHRoZSBzdGVwIHdhcyBub3QgdHJpZ2dlcmVkCi0qIFRJTktFUlBPUC0yNTY1IEdyYXBoTUxXcml0ZXIgZG9lcyBub3QgY2hlY2sgdmVydGV4TGFiZWxLZXkgY29uZmxpY3QKLSogVElOS0VSUE9QLTI1NjYgSW5jb21wbGV0ZSBlcnJvciBtZXNzYWdlIGluIGJ5dGVjb2RlIHN0ZXAgZ2VuZXJhdGlvbgotKiBUSU5LRVJQT1AtMjU2OCBHcmFwaCBpbnN0YW5jZSBub3Qgc2V0IGZvciBjaGlsZCB0cmF2ZXJzYWxzCi0qIFRJTktFUlBPUC0yNTY5IFJlY29ubmVjdCB0byBzZXJ2ZXIgaWYgSmF2YSBkcml2ZXIgZmFpbHMgdG8gaW5pdGlhbGl6ZQotKiBUSU5LRVJQT1AtMjU3OCBTZXQgYXJndW1lbnRzIHRvIFAgd2l0aGluL3dpdGhvdXQgYXJlIHdyYXBwZWQgaW4gTGlzdAotKiBUSU5LRVJQT1AtMjU3OSBFdmVudFN0cmF0ZWd5IGRvZXNuJ3Qgd29yayB3aXRoIGFub255bW91cyB0cmF2ZXJzYWwKLSogVElOS0VSUE9QLTI1ODAgVXBkYXRlIHRoZSBjdXN0b20gRFNMIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTI1ODUgVHJhdmVyc2FsIGZhaWxlZCBmb3IgZGlmZmVyZW50IHN0cmF0ZWdpZXMgb3JkZXIKLSogVElOS0VSUE9QLTI1ODkgWE1MIEV4dGVybmFsIEVudGl0eSAoWFhFKSB2dWxuZXJhYmlsaXR5Ci0qIFRJTktFUlBPUC0yNTk3IE51bGxQb2ludGVyRXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb25uZWN0aW9uIHBvb2wKLSogVElOS0VSUE9QLTI1OTggd2l0aGluKG51bGwpIE5QRQotKiBUSU5LRVJQT1AtMjYwMyBUaW5rZXJHcmFwaCBzb21ldGltZXMgY291bGQgbm90IHF1ZXJ5IGZsb2F0IHZhbHVlcy4KLSogVElOS0VSUE9QLTI2MDQgVGlua2VyR3JhcGggY291bGQgbm90IG9yZGVyIHZlcnRleC9lZGdlIHdpdGhvdXQgc3BlY2lmaWVkIHByb3BlcnR5LgotKiBUSU5LRVJQT1AtMjYwNiBOZW80ai1HcmVtbGluIGNvdWxkIG5vdCBvcmRlciB2ZXJ0ZXgvZWRnZSB3aXRob3V0IHNwZWNpZmllZCBwcm9wZXJ0eQotKiBUSU5LRVJQT1AtMjYwOSBIVFRQIHJldHVybnMgc2VyaWFsaXphdGlvbiBleGNlcHRpb25zIGZvciB0aGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UKLSogVElOS0VSUE9QLTI2MTAgTnVtYmVySGVscGVyIGNhbiByZXR1cm4gdmFsdWVzIGluIHRoZSBmb3JtIG9mIHRoZWlyIG9yaWdpbmFsIHR5cGUgc21hbGxlciB0aGFuIGludCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI2MjEgdG9TdHJpbmcgZm9yIHRyYXZlcnNhbHMgc3VjaCBhcyB3aXRoaW4gd2l0aCBlbXB0eSBhcnJheSByZXR1cm5zIGVtcHR5IHN0cmluZyBhcyBhcmd1bWVudCBpbnN0ZWFkIG9mIGJyYWNrZXRzCi0qIFRJTktFUlBPUC0yNjI2IFJhbmdlR2xvYmFsU3RlcCBjbG9zZXMgdHJhdmVyc2FsIHByZW1hdHVyZWx5Ci0qIFRJTktFUlBPUC0yNjQ5IFVuYWJsZSB0byB0cmFuc2xhdGUgZ3JlbWxpbiBxdWVyeSB0byBqYXZhCi0qIFRJTktFUlBPUC0yNjU4IFRyYW5zbGF0b3IgaW4gZ3JlbWxpbi1qYXZhc2NyaXB0IGhhcyB0cm91YmxlIHdpdGggYXJyYXkgYXJndW1lbnRzCi0qIFRJTktFUlBPUC0yNjYxIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgaGFuZGxpbmcgb2YgbnVsbCBhcmd1bWVudHMKLSogVElOS0VSUE9QLTI2NjIgVW5jbG9zZWQgY2xpZW50IHNlc3Npb24gYW5kIHN0YWNrdHJhY2UgcG9wcyB1cCB3aGVuIGNsZWFudXAgaXMgbWlzc2VkCi0qIFRJTktFUlBPUC0yNjcwIEphdmFEb2NzIGRvIG5vdCBidWlsZCB3aGVuIHVzaW5nIEpESyAxMQotKiBUSU5LRVJQT1AtMjY5NCBCdWcgb2YgVGlua2VyR3JhcGggZ3JlbWxpbiBhcGkgImhhcygpIgotKiBUSU5LRVJQT1AtMjcwMiBwcm9wZXJ0eShudWxsKSB0aHJvd3MgTlBFCi0qIFRJTktFUlBPUC0yNzA2IFRyYXZlcnNhbCBjbG9uZSgpIG5vdCByZXNldHRpbmcgdGhlIGNsb3NlIHN0YXRlCi0qIFRJTktFUlBPUC0yNzEyIFByb3BlcnR5Q2hhbmdlZEV2ZW50IGlzIHRyaWdnZXJlZCBiZWZvcmUgUHJvcGVydHkgaXMgYWN0dWFsbHkgY2hhbmdlZAotKiBUSU5LRVJQT1AtMjcxNyBHcmVtbGluLk5FVCA6IFdlYlNvY2tldENvbm5lY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIE1lc3NhZ2VUeXBlLkNsb3NlLCBjYXVzaW5nIGVycm9yIEludmFsaWRPcGVyYXRpb25FeGNlcHRpb246ICJSZWNlaXZlZCBkYXRhIGRlc2VyaWFsaXplZCBpbnRvIG51bGwgb2JqZWN0IG1lc3NhZ2UuIENhbm5vdCBvcGVyYXRlIG9uIGl0LiIKLSogVElOS0VSUE9QLTI3MTkgaGFzTmV4dCBpcyBjYWxsZWQgb24gVHJhdmVyc2VySXRlcmF0b3IgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkCi0qIFRJTktFUlBPUC0yNzI2IFB5dGhvbidzIEdyb292eVRyYW5zbGF0b3IgdHJhbnNsYXRlcyBib29sZWFuIHdyb25nCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIzNjcgR3JlbWxpbiBUcmFuc2xhdG9ycyBmb3IgLk5FVAotKiBUSU5LRVJQT1AtMjM3OSBDb25zaXN0ZW50IGRlZmF1bHRzIGFuZCBpbml0aWFsaXphdGlvbiBBUElzIGZvciBkcml2ZXJzCi0qIFRJTktFUlBPUC0yNDExIE1vdmUgR3JlbWxpbkRzbFByb2Nlc3NvciB0byBpdHMgb3duIGFydGlmYWN0ICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjQ2NyBGb2xsb3cgcHl0aG9uIG5hbWluZyBjb252ZW50aW9ucyBmb3IgR3JlbWxpbiBzeW50YXgKLSogVElOS0VSUE9QLTI1MDQgSW50ZXJtaXR0ZW50bHkgZmFpbGluZyBzZXJ2ZXIvZHJpdmVyIGludGVncmF0aW9uIHRlc3RzCi0qIFRJTktFUlBPUC0yNTE4IEVuaGFuY2UgLk5FVCBnaGVya2luIGZyYW1ld29yayB0byBkZWFsIHdpdGggbW9yZSBhZHZhbmNlZCBhc3NlcnRpb25zCi0qIFRJTktFUlBPUC0yNTI0IEV4cGFuZCBzdXBwb3J0IGZvciBudW1iZXIgdHlwZXMgaW4gZ3JhbW1hcgotKiBUSU5LRVJQT1AtMjUyNSBFeHRlbmQgR2hlcmtpbiB0ZXN0cyB0byBjb3ZlciBzdHJhdGVnaWVzCi0qIFRJTktFUlBPUC0yNTM0IExvZzRqIGZsYWdnZWQgYXMgY3JpdGljYWwgc2VjdXJpdHkgdmlvbGF0aW9uCi0qIFRJTktFUlBPUC0yNTQ4IEFkZCBnZXR0ZXIgZm9yIGluZGV4ZXIgdXNlZCBpbiBJbmRleFN0ZXAKLSogVElOS0VSUE9QLTI1NTEgU2V0dXAgc2NyaXB0cyB0byBwdWJsaXNoIEdyZW1pbnQgdG8gbnBtCi0qIFRJTktFUlBPUC0yNTU1IFN1cHBvcnQgZm9yIHJlbW90ZSB0cmFuc2FjdGlvbnMgaW4gUHl0aG9uCi0qIFRJTktFUlBPUC0yNTU2IFN1cHBvcnQgcmVtb3RlIHRyYW5zYWN0aW9ucyBpbiAuTkVUCi0qIFRJTktFUlBPUC0yNTU3IFN1cHBvcnQgcmVtb3RlIHRyYW5zYWN0aW9ucyBpbiBKYXZhc2NyaXB0Ci0qIFRJTktFUlBPUC0yNTU5IFN0b3Agc2VuZGluZyB0aGUgY2xvc2UgbWVzc2FnZSBmb3IgLk5FVAotKiBUSU5LRVJQT1AtMjU2MCBTdG9wIHNlbmRpbmcgY2xvc2UgbWVzc2FnZSBmb3IgUHl0aG9uCi0qIFRJTktFUlBPUC0yNTYxIFN0b3Agc2VuZGluZyBjbG9zZSBtZXNzYWdlIGluIEphdmFzY3JpcHQKLSogVElOS0VSUE9QLTI1NjIgUmVtb3ZlIEdyYXBoU09OIDIgb3B0aW9uIGluIFRyYXZlcnNhbE9wUHJvY2Vzc29yICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjU3MCBTdXBwb3J0IGN1c3RvbSB0eXBlIGluIEdyYXBoQmluYXJ5IGZvciAuTkVUCi0qIFRJTktFUlBPUC0yNTc2IFNldHVwIGF1dG9tYXRpYyB1cGRhdGVzIHZpYSBEZXBlbmRhYm90IGZvciBHcmVtbGluLk5FVAotKiBUSU5LRVJQT1AtMjU3NyBSZW1vdmUgdW51c2VkIHRlc3QgY292ZXJhZ2UgZGVwZW5kZW5jaWVzIGZyb20gR3JlbWxpbi5ORVQKLSogVElOS0VSUE9QLTI1ODIgQ29uc3RydWN0IHRyYXZlcnNhbHMgZnJvbSBncmVtbGluLWxhbmd1YWdlCi0qIFRJTktFUlBPUC0yNTgzIE1ha2UgZ3JlbWxpbi1ncm9vdnkgcHJvY2Vzc2luZyBvcHRpb25hbCBpbiBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtMjU5MSBBZG1pbmlzdHJhdGl2ZSBhZGp1c3RtZW50cyB0byBncmVtbGludCBzaXRlCi0qIFRJTktFUlBPUC0yNTkyIEFsaWduIHRoZSBzdHlsZSBndWlkZXMKLSogVElOS0VSUE9QLTI1OTMgUmVtb3ZlIEdyb292eSBhcyBhIGRlcGVuZGVuY3kgZnJvbSBncmVtbGluLWRyaXZlciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI1OTYgZGF0ZXRpbWUgZnVuY3Rpb24KLSogVElOS0VSUE9QLTI2MDEgVW5pZnkgR3JlbWxpbiB0ZXN0aW5nIGJlaGluZCBHaGVya2luCi0qIFRJTktFUlBPUC0yNjA1IEZ1cnRoZXIgZW5mb3JjZSBhbmQgcmVmaW5lIG51bGwgc2VtYW50aWNzCi0qIFRJTktFUlBPUC0yNjA4IEVuaGFuY2Ugc2FtcGxlKCkuYnkoKSBzZW1hbnRpY3Mgd2hlbiBieSBwcm9kdWNlcyBhIG51bGwgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNjExIFByZXZlbnQgcHJvcGVydHkoaWQsbnVsbCkgYW5kIGFkZFYobnVsbCkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNjEzIEltcHJvdmUgYmVoYXZpb3Igb2YgVi9FKG51bGwpCi0qIFRJTktFUlBPUC0yNjE1IEV4cGFuZCB0ZXN0aW5nIG9mIHBhdGgoKSB3aXRoIG51bGwgdmFsdWVzCi0qIFRJTktFUlBPUC0yNjE2IFByb3ZpZGUgYmV0dGVyIGV4Y2VwdGlvbnMgd2l0aCBTU0wgcmVsYXRlZCBmYWlsdXJlcyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI2MjAgQ2xlYW4gdXAgTnVsbFBvaW50ZXJFeGNlcHRpb25zIHJlbGF0ZWQgdG8gbnVsbCBhcmd1bWVudHMgb24gcHJvcGVydHkgcmVsYXRlZCBzdGVwcwotKiBUSU5LRVJQT1AtMjYzMCBDbGFyaWZ5IHRoYXQgYSBzZXJ2ZXIgY2Fubm90IHN1cHBvcnQgR3JhcGhzb24xLjAgb3ZlciBIVFRQCi0qIFRJTktFUlBPUC0yNjMyIE5ldHR5IDQuMS42MSBmbGFnZ2VkIHdpdGggdHdvIGhpZ2ggc2V2ZXJpdHkgc2VjdXJpdHkgdmlvbGF0aW9ucwotKiBUSU5LRVJQT1AtMjYzNSBDb25zaXN0ZW50IGJ5KCkgYmVoYXZpb3IgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNjM2IFJlbW92ZSBQcm9kdWN0aXZlQnlTdHJhdGVneSBhcyBhIGRlZmF1bHQgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNjM3IEVuaGFuY2UgbG9nZ2luZyBpbiB0aGUgUHl0aG9uCi0qIFRJTktFUlBPUC0yNjM5IFJlbW92ZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3J5b01lc3NhZ2VTZXJpYWxpemVyIGluZnJhc3RydWN0dXJlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjY0MCBSZW1vdmUgcHJldmlvdXNseSBkZXByZWNhdGVkIEF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZW5hYmxlQXVkaXRMb2cgc2V0dGluZyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI2NDEgQWxsb3cgb3JkZXJhYmlsaXR5IG9uIGFueSB0eXBlCi0qIFRJTktFUlBPUC0yNjQ1IEltcHJvdmUgYmVoYXZpb3Igb2YgaGFzSWQobnVsbCkKLSogVElOS0VSUE9QLTI2NDYgTWFrZSAuTkVUIFN0cmVhbUV4dGVuc2lvbnMgcHVibGljIGZvciBHcmFwaEJpbmFyeQotKiBUSU5LRVJQT1AtMjY1MCBSZW1vdmUgZGVwcmVjYXRlZCBHcmVtbGluIHN0ZXAgb3ZlcmxvYWRzIG9mIHB5dGhvbiBrZXl3b3JkcyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI2NTEgVXBkYXRlIHRvIC5ORVQgNgotKiBUSU5LRVJQT1AtMjY1MiBBZGQgVGV4dFAucmVnZXggdG8gdGhlIHRleHQgcHJlZGljYXRlIHNldAotKiBUSU5LRVJQT1AtMjY1NiBQcm92aWRlIGEgbm8gc3ludGF4IHN1Z2FyIHRyYW5zbGF0b3IgZm9yIHB5dGhvbgotKiBUSU5LRVJQT1AtMjY1NyBSZW1vdmUgR3Jvb3Z5VHJhbnNsYXRvciBmcm9tIGdyZW1saW4tZ3Jvb3Z5ICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjY1OSBCdW1wIGphdmFzY3JpcHQgcnVudGltZXMgdG8gbm9kZSB2MTYKLSogVElOS0VSUE9QLTI2NjAgQnJpbmcgYmFjayBjbG9zZSBtZXNzYWdlIGZvciBkcml2ZXJzCi0qIFRJTktFUlBPUC0yNjYzIFN1cHBvcnQgVmVydGV4IHJlZmVyZW5jZXMgaW4gZ3JhbW1hcgotKiBUSU5LRVJQT1AtMjY2NSBBZGQgdGhlIGFiaWxpdHkgZm9yIHByb3BlcnR5KCkgdG8gdGFrZSBhIG1hcAotKiBUSU5LRVJQT1AtMjY2NiBDcmVhdGUgYW4gYW5vbnltaXppbmcgVHJhbnNsYXRvciBmb3IgbG9nZ2luZyB0cmF2ZXJzYWxzIHdpdGhvdXQgdXNlciBkYXRhCi0qIFRJTktFUlBPUC0yNjY3IEFsbG93IGZvbGQoKSB3aXRoIGFkZEFsbCB0byB3b3JrIG9uIE1hcAotKiBUSU5LRVJQT1AtMjY2OCBVcGRhdGluZyBhaW9odHRwIHJlcXVpcmVtZW50cyBhdCBnZXJtaW4tcHl0aG9uIGR1ZSB0byB2dWxuZXJhYmlsaXR5Ci0qIFRJTktFUlBPUC0yNjY5IE5ldHR5IDQuMS42MSBmbGFnZ2VkIHdpdGggbWVkaXVtIHNldmVyaXR5IHNlY3VyaXR5IHZpb2xhdGlvbnMKLSogVElOS0VSUE9QLTI2NzEgQWRkIHR4KCkgc3VwcG9ydCB0byBncmFtbWFyCi0qIFRJTktFUlBPUC0yNjc2IFJlZmFjdG9yIEdyZW1saW5TY3JpcHQgY2hlY2tlciBvdXQgb2YgZ3Jvb3Z5IHBhY2thZ2UgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNjc4IGphY2tzb24tZGF0YWJpbmQgbWVkaXVtIHNlY3VyaXR5IGlzc3VlIGlkZW50aWZpZWQKLSogVElOS0VSUE9QLTI2NzkgVXBkYXRlIEphdmFTY3JpcHQgZHJpdmVyIHRvIHN1cHBvcnQgcHJvY2Vzc2luZyBtZXNzYWdlcyBhcyBhIHN0cmVhbQotKiBUSU5LRVJQT1AtMjY4MCBDcmVhdGUgY2FsbCgpIHN0ZXAgdG8gYWxsb3cgZm9yIGNhbGxpbmcgcHJvY2VkdXJlcwotKiBUSU5LRVJQT1AtMjY4MSBDcmVhdGUgbWVyZ2UoKSBzdGVwIHRvIGNvZGlmeSBiZXN0IHByYWN0aWNlIGZvciB1cHNlcnQgcGF0dGVybgotKiBUSU5LRVJQT1AtMjY4MiBFbmFibGUgV2ViU29ja2V0IGNvbXByZXNzaW9uIGluIC5ORVQgYnkgZGVmYXVsdAotKiBUSU5LRVJQT1AtMjY4NyBHcmVtbGluIEJvb2xlYW4gVmFsdWUgRXhwcmVzc2lvbnMgMi4wIHdpdGggVGVybmFyeSBCb29sZWFuIExvZ2ljcwotKiBUSU5LRVJQT1AtMjY4OCBJbnZlc3RpZ2F0ZSB0d28gLk5FVCB0ZXN0IGZhaWx1cmVzCi0qIFRJTktFUlBPUC0yNjg5IFZlcnRleFByb3BlcnR5IEdoZXJraW4gc3VwcG9ydCBmb3IgLk5FVAotKiBUSU5LRVJQT1AtMjY5MCBWZXJ0ZXhQcm9wZXJ0eSBHaGVya2luIHN1cHBvcnQgZm9yIEphdmFzY3JpcHQKLSogVElOS0VSUE9QLTI2OTEgVmVydGV4UHJvcGVydHkgR2hlcmtpbiBzdXBwb3J0IGZvciBQeXRob24KLSogVElOS0VSUE9QLTI2OTUgU3VwcG9ydCBOYU4vSW5mIGluIFBhcnNlciBhbmQgR2hlcmtpbgotKiBUSU5LRVJQT1AtMjcwNSBTdXBwb3J0IG51bGwgYXMgYW4gYXJndW1lbnQgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgaW4gR3JlbWxpbi5ORVQKLSogVElOS0VSUE9QLTI3MDcgQ2xvc2luZyBwYXJlbnQgY29ubmVjdGlvbiBpbiBweXRob24gc2hvdWxkIGNsb3NlIHR4KCkgY29ubmVjdGlvbnMKLSogVElOS0VSUE9QLTI3MTEgTWFrZSBncmVtbGluLWxhbmd1YWdlIG9wdGlvbmFsIGFzIGl0IGJyaW5ncyBpbiBDRERML0dQTCBkZXBlbmRlbmNpZXMKLSogVElOS0VSUE9QLTI3MTMgQ3JlYXRlIGFuIGVsZW1lbnQoKSBzdGVwIHRoYXQgbWFwcyBhIFByb3BlcnR5IHRvIGl0cyBFbGVtZW50LgotKiBUSU5LRVJQT1AtMjcxNiBFbmFibGUgZXNsaW50IGZvciBncmVtbGluLWphdmFzY3JpcHQgcHJvamVjdAotKiBUSU5LRVJQT1AtMjcyNSBUcmF2ZXJzYWwgU3RyYXRlZ3kgTWl4IFVwIEluIEdyZW1saW4tUHl0aG9uCi0qIFRJTktFUlBPUC0yNzI3IEhhc0NvbnRhaW5lciBzaG91bGQgYWxsb3cgYSBudWxsIGtleQotKiBUSU5LRVJQT1AtMjcyOCBqYWNrc29uLWRhdGFiaW5kIGhpZ2ggc2VjdXJpdHkgaXNzdWUgaWRlbnRpZmllZAorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjYueC5hc2NpaWRvYyNyZWxlYXNlLTMtNi0wLCAzLjYuMCBjaGFuZ2Vsb2c+Pi4KIAogPT0gVGlua2VyUG9wIDMuNS4wIChUaGUgU2xlZXBpbmcgR3JlbWxpbjogTm8uIDE4IEVudHInYWN0ZSBTeW1waG9uaXF1ZSkKIApAQCAtMTIxOSw3MzEgKzg3NCw0NyBAQAogW1tyZWxlYXNlLTMtNS04XV0KID09PSBUaW5rZXJQb3AgMy41LjggKFJlbGVhc2UgRGF0ZTogTm92ZW1iZXIgMjAsIDIwMjMpCiAKLSogRml4ZWQgYSBidWcgaW4gR3JlbWxpbi5OZXQgdGhhdCBjYW4gbGVhZCB0byBhbiBgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbmAgZHVlIHRvIG1vZGlmeWluZyBhIGNvbGxlY3Rpb24gd2hpbGUgaXRlcmF0aW5nIG92ZXIgaXQgaW4gdGhlIHNlcmlhbGl6ZXJzLgotKiBCdW1wZWQgTmV0dHkgdG8gNC4xLjk2Ci0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yOTc2IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb246IENvbGxlY3Rpb24gd2FzIG1vZGlmaWVkIGluIEdyYXBoQmluYXJ5IHNlcmlhbGl6YXRpb24KLSogVElOS0VSUE9QLTI5ODMgVXBncmFkZSBOZXR0eSBmb3IgU2VjdXJpdHkgUmVhc29ucwotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0yOTg0IFJlcGxhY2UgTW9xIG1vY2tpbmcgbGlicmFyeSBpbiAuTkVUIHRlc3RzCi0qIFRJTktFUlBPUC0yOTkxIFJlZm9ybWF0IEphdmFkb2MgbGluayBpbiByZWZlcmVuY2UgZG9jcwotCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNS54LmFzY2lpZG9jI3JlbGVhc2UtMy01LTgsIDMuNS44IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy01LTddXQogPT09IFRpbmtlclBvcCAzLjUuNyAoUmVsZWFzZSBEYXRlOiBKdWx5IDMxLCAyMDIzKQogCi0qIEJ1bXBlZCBgamFja3Nvbi1kYXRhYmluZGAgdG8gMi4xNS4yIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgotKiBJbnRyb2R1Y2VkIGBtYXhOdW1iZXJMZW5ndGhgLCBgbWF4U3RyaW5nTGVuZ3RoYCwgYW5kIGBtYXhOZXN0aW5nRGVwdGhgIGNvbmZpZ3MgZm9yIGBHcmFwaFNPTmAgc2VyaWFsaXplcnMuCi0qIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIEdyZW1saW4uTmV0IGRyaXZlciB0aGF0IG9ubHkgb2NjdXJyZWQgaWYgYSBgQ2FuY2VsbGF0aW9uVG9rZW5gIHdhcyBwcm92aWRlZC4KLSogRml4ZWQgZ3JlbWxpbi1weXRob24gYENsaWVudGAgcHJvYmxlbSB3aGVyZSBjYWxsaW5nIGBzdWJtaXQoKWAgYWZ0ZXJgIGBjbG9zZSgpYCB3b3VsZCBoYW5nIHRoZSBzeXN0ZW0uCi0qIEFkZGVkIGBncmVtbGluLnNwYXJrLmRvbnREZWxldGVOb25FbXB0eU91dHB1dGAgdG8gc3RvcCBkZWxldGluZyB0aGUgb3V0cHV0IGZvbGRlciBpZiBpdCBpcyBub3QgZW1wdHkgaW4gYHNwYXJrLWdyZW1saW5gLgotKiBGaXhlZCBhIGJ1ZyBpbiBgU3ViZ3JhcGhTdHJhdGVneWAgd2hlcmUgdGhlIHZlcnRleCBwcm9wZXJ0eSBmaWx0ZXIgcHJvZHVjZWQgZXJyb3JzIGlmIGEgYFZlcnRleGAgd2FzIG1pc3NpbmcgdGhlIGtleSBwcm92aWRlZCB0byBgYnkoKWAgYXMgYSB0b2tlbi4KLSogVXBncmFkZWQgYGdyZW1saW4tamF2YXNjcmlwdGAgYW5kIGBncmVtbGludGAgdG8gTm9kZSAxNi4yMC4wLgotKiBVcGdyYWRlZCBgZ3JlbWxpbi1nb2AgdG8gR28gMS4yMC4KLSogSW1wcm92ZWQgdGhlIHB5dGhvbiBgVHJhbnNsYXRvcmAgY2xhc3Mgd2l0aCBiZXR0ZXIgaGFuZGxpbmcgZm9yIGBQYCwgYE5vbmVgIGFuZCBzdWJjbGFzc2VzIG9mIGBzdHJgLgotKiBGaXhlZCBidWcgaW4gYEZpbHRlclJhbmtpbmdTdHJhdGVneWAgdGhhdCB3YXMgcHJldmVudGluZyBjZXJ0YWluIHRyYXZlcnNhbHMgZnJvbSByZWNvZ25pemluZyBsYWJlbHMgaW4gY2hpbGQgdHJhdmVyc2Fscy4KLSogQWRkZWQgYGdyZW1saW4tamF2YTguYmF0YCBmaWxlIGFzIGEgd29ya2Fyb3VuZCB0byBhbGxvdyBsb2FkaW5nIHRoZSBjb25zb2xlIHVzaW5nIEphdmEgOCBvbiBXaW5kb3dzLgotKiBGaXhlZCBhIGJ1ZyBpbiBgZ3JlbWxpbi1zZXJ2ZXJgIHdoZXJlIHRpbWVvdXQgdGFza3Mgd2VyZSBub3QgY2FuY2VsbGVkIGFuZCBjb3VsZCBjYXVzZSB2ZXJ5IGxhcmdlIG1lbW9yeSB1c2FnZSB3aGVuIHRpbWVvdXQgaXMgbGFyZ2UuCi0qIFJlbW92ZWQgYGpjYWJpLW1hbmlmZXN0c2AgZGVwZW5kZW5jeSBmcm9tIGBncmVtbGluLWNvcmVgLCBgZ3JlbWxpbi1kcml2ZXJgLCBhbmQgYGdyZW1saW4tc2VydmVyYC4KLSogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCB0byB0aHJvdyBhIGBNaXNzaW5nTWV0aG9kRXhjZXB0aW9uYCB3aGVuIGNhbGxpbmcgYSBzdGF0aWMgbWV0aG9kIGluIF9fIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBlbnVtLgotKiBEZXByZWNhdGVkIE5lbzRqLUdyZW1saW4KLSogQWRkZWQgYFZlcnRleFByb3BlcnR5RmlsdGVyYCB0byBgR3JhcGhDb21wdXRlcmAKLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTI5MjAgU3ViZ3JhcGhTdHJhdGVneSBmYWlsdXJlIHdoZW4gcHJvcGVydHkga2V5IG5vdCBwcmVzZW50IG9uIHZlcnRleCBpbiBieSgpCi0qIFRJTktFUlBPUC0yOTM3IFRocm93IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHVzZSBhIGNsb3NlZCBjb25uZWN0aW9uCi0qIFRJTktFUlBPUC0yOTQ0IE1lbW9yeSBsZWFrIGluIEdyZW1saW4uTmV0IGRyaXZlciBpZiBDYW5jZWxsYXRpb25Ub2tlbiBpcyB1c2VkCi0qIFRJTktFUlBPUC0yOTQ4IFBSSVNNQSBzZWN1cml0eSB2dWxuZXJhYmlsdHkgZm9yIGphY2tzb24tZGF0YWJpbmQgMi4xNC4wICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjk1MyBTdGF0aWMgaW1wb3J0IGZvciBfXy52YWx1ZXMoKSBvdmVycmlkZW4gYnkgQ29sdW1uLnZhbHVlcygpCi0qIFRJTktFUlBPUC0yOTU4IFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBmb3IgdGltZW91dHMgYXJlIG5ldmVyIGNhbmNlbGxlZAotKiBUSU5LRVJQT1AtMjk2NSBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgcmVtb3ZpbmcgbGFiZWxzIGl0IHNob3VsZG4ndCBpbiBjZXJ0YWluIGNvbmRpdGlvbnMKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMTQwMyBQcm92aWRlIHN1cHBvcnQgZm9yIEdyYXBoRmlsdGVyLnZlcnRleFByb3BlcnRpZXMoKSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI5NDEgRE8gTk9UIHB1cmdlIHRoZSBvdXRwdXQgbG9jYXRpb24gaWYgaXQgaGFzIGNvbnRlbnQgaW4gU3BhcmtHcmFwaENvbXB1dGVyCi0qIFRJTktFUlBPUC0yOTU0IFBhc3MgR3JlbWxpbiBWZXJzaW9uIGZyb20gTWF2ZW4gdG8gSmF2YSBXaXRob3V0IE1hbmlmZXN0cwotKiBUSU5LRVJQT1AtMjk1NSBTdXBwb3J0IFNTTCBpbiBXZWJTb2NrZXRDbGllbnQKLSogVElOS0VSUE9QLTI5NzcgRGVwcmVjYXRlIE5lbzRqLUdyZW1saW4KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy41LnguYXNjaWlkb2MjcmVsZWFzZS0zLTUtNywgMy41LjcgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTUtNl1dCiA9PT0gVGlua2VyUG9wIDMuNS42IChSZWxlYXNlIERhdGU6IE1heSAxLCAyMDIzKQogCi0qIEFkZGVkIGBHcmFwaEZpbHRlcmAgc3VwcG9ydCB0byBgR3JhcGhTT05SZWNvcmRSZWFkZXJgLgotKiBncmVtbGluLXB5dGhvbiBhaW9odHRwIGRlcGVuZGVuY3kgcmVxdWlyZW1lbnQgdXBwZXIgYm91bmQgcmVsYXhlZCB0byA8NC4wLjAuCi0qIEZpeGVkIG5ldHdvcmsgY29ubmVjdGlvbiBjbG9zaW5nIGZvciBzZXNzaW9ucyBhbmQgdHJhbnNhY3Rpb25zIGluIGBncmVtbGluLXB5dGhvbmAuCi0qIEZpeGVkIG1lbW9yeSBjbGVhbnVwIGZvciBzZXNzaW9ucyBhbmQgdHJhbnNhY3Rpb25zIGluIGBncmVtbGluLXB5dGhvbmAgYW5kIGBncmVtbGluLWdvYC4KLSogRml4ZWQgYnVnIGluIGBDb3VudFN0cmF0ZWd5YCB3aGVyZSBgb3IoKWAgYW5kIGBhbmQoKWAgZmlsdGVycyB3ZXJlIG5vdCBiZWluZyByZXdyaXR0ZW4gcHJvcGVybHkgZm9yIHNvbWUgcGF0dGVybnMuCi0qIENoYW5nZWQgYFBhcnRpdGlvblN0cmF0ZWd5YCB0byBmb3JjZSBpdHMgZmlsdGVycyB0byB0aGUgZW5kIG9mIHRoZSBjaGFpbiBmb3IgYFZlcnRleGAgYW5kIGBFZGdlYCByZWFkIHN0ZXBzLCB0aHVzIHByZXNlcnZpbmcgb3JkZXIgb2YgdGhlIGBoYXMoKWAuCi0qIEFkZGVkIGBSZXF1ZXN0T3B0aW9uc2AgYW5kIGBSZXF1ZXN0T3B0aW9uc0J1aWxkZXJgIHR5cGVzIHRvIEdvIEdMViB0byBlbmNhcHN1bGF0ZSBwZXItcmVxdWVzdCBzZXR0aW5ncyBhbmQgYmluZGluZ3MuCi0qIEltcHJvdmVkIGBhZGRFKClgIGVycm9yIG1lc3NhZ2luZyB3aGVuIHRyYXZlcnNlciBpcyBub3QgYSBgVmVydGV4YC4KLSogQWRkZWQgYFN1Ym1pdFdpdGhPcHRpb25zKClgIG1ldGhvZHMgdG8gYENsaWVudGAgYW5kIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCBpbiBHbyBHTFYgdG8gcGFzcyBgUmVxdWVzdE9wdGlvbnNgIHRvIHRoZSBzZXJ2ZXIuCi0qIEZpeGVkIGJ1ZyBpbiB3aGljaCBgZ3JlbWxpbi1zZXJ2ZXJgIHdvdWxkIG5vdCByZXNwb25kIHRvIGNsaWVudHMgaWYgYW4gYEVycm9yYCB3YXMgdGhyb3duIGR1cmluZyBieXRlY29kZSB0cmF2ZXJzYWxzLgotKiBBZGRlZCBhYmlsaXR5IHRvIGRlcGxveSBtdWx0aS1hcmNoIERvY2tlciBpbWFnZXMgZm9yIHNlcnZlciBhbmQgY29uc29sZS4gU2VydmVyIGltYWdlIG5vdyBzdXBwb3J0cyBBTUQ2NCBhbmQgQVJNNjQuCi0qIENoYW5nZWQgYHdpdGgoKWAgY29uZmlndXJhdGlvbiBmb3IgYEFSR1NfQkFUQ0hfU0laRWAgYW5kIGBBUkdTX0VWQUxfVElNRU9VVGAgdG8gYmUgbW9yZSBmb3JnaXZpbmcgb24gdGhlIHR5cGUgb2YgYE51bWJlcmAgdXNlZCBmb3IgdGhlIHZhbHVlLgotKiBDaGFuZ2VkIGBncmVtbGluLWNvbnNvbGVgIHRvIGFkZCBpbXBvcnRzIHZpYSBhbiBJbXBvcnRDdXN0b21pemVyIHRvIHJlZHVjZSB0aW1lIHNwZW50IHJlc29sdmluZyBpbXBvcnRzLgotKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNS4yMi4KLSogRml4ZWQgYGdlbmVyYXRlVXNlckFnZW50KClgIGluIGBncmVtbGluLWphdmFzY3JpcHRgIGFuZCBgZ3JlbWxpbi1kb3RuZXRgIHRvIGhhbmRsZSBudWxsIGFuZCB1bmRlZmluZWQgcHJvcGVybHksIGFuZCB1cGRhdGVkIEphdmEgVXNlckFnZW50IGVycm9yIGhhbmRsaW5nCi0qIEZpeGVkIGJ1ZyBpbiBwYXJzaW5nIG9mIGBtYXRoKClgIGV4cHJlc3Npb25zIHdoZXJlIHZhcmlhYmxlcyB3ZXJlIG5vdCBiZWluZyBpZGVudGlmaWVkIGlmIHRoZXkgY29udGFpbmVkIGEgdGV4dCBhc3NvY2lhdGVkIHdpdGggYSBmdW5jdGlvbi4KLSogUmVmYWN0b3JlZCBgRmlsdGVyUmFua2luZ1N0cmF0ZWd5YCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBkZWVwbHkgbmVzdGVkIHRyYXZlcnNhbHMuCi0qIFJlZmFjdG9yZWQgc3RyYXRlZ3kgYXBwbGljYXRpb24gdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBieSBhdm9pZGluZyBzb21lIGV4Y2Vzc2l2ZSByZWN1cnNpb24uCi0qIEFkZGVkIGBUcmF2ZXJzYWwubG9jaygpYCB0byBwcm92aWRlIGFuIGV4cGxpY2l0IHdheSB0byBmaW5hbGl6ZSBhIHRyYXZlcnNhbCBvYmplY3QuCi0qIENoYW5nZWQgYFRyYXZlcnNhbC5nZXRHcmFwaCgpYCB0byBnZXQgaXRzIGBHcmFwaGAgb2JqZWN0IGZyb20gaXRzZWxmIG9yLCBpZiBub3QgYXZhaWxhYmxlLCBpdHMgcGFyZW50LgotKiBBZGRlZCBgQXV0aEluZm9Qcm92aWRlcmAgaW50ZXJmYWNlIGFuZCBgTmV3RHluYW1pY0F1dGgoKWAgdG8gZ3JlbWxpbi1nbyBmb3IgZHluYW1pYyBhdXRoZW50aWNhdGlvbiBzdXBwb3J0LgotKiBGaXhlZCBidWcgd2hlcmUgYGhhc0lkKClgIHVucm9sbHMgaWRzIGluIEphdmEgYXJyYXlzIHRvIHB1dCBpbnRvIGBQLndpdGhpbmAgYnV0IG5vdCBpZHMgaW4gbGlzdHMsIHRoaXMgYWxzbyBhbGlnbmVkIGJlaGF2aW9yIG9mIHN0YXJ0LXN0ZXAgYW5kIG1pZC10cmF2ZXJzYWwgaGFzSWQoKS4KLSogQnVtcGVkIHRvIGBzbmFrZXlhbWxgIDIuMCB0byBmaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KLSogQnVtcGVkIHRvIEFwYWNoZSBgY29tbW9ucy1jb25maWd1cmF0aW9uYCAyLjkuMCB0byBmaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KLSogRml4ZWQgYENvdW50U3RyYXRlZ3lgIGJ1ZyBmb3IgY2FzZXMgd2hlcmUgcHJlZGljYXRlcyBjb250YWluIG5lZ2F0aXZlIG51bWJlcnMgYnkgZGlzYWJsaW5nIHRoZSBvcHRpbWl6YXRpb24uCi0qIEltcHJvdmVkIGBjb3VudGAgc3RlcCBvcHRpbWl6YXRpb24gZm9yIG5lZ2F0aXZlIHZhbHVlcyBpbiBpbnB1dCBmb3IgJ2VxJyBjb21wYXJpc29uLgotKiBGaXhlZCBwZXJmb3JtYW5jZSBpc3N1ZSB3aGVuIHVzaW5nIGBTYW1wbGVHbG9iYWxTdGVwYCB3aXRoIGEgdHJhdmVyc2VyIHRoYXQgaGFzIGVpdGhlciBhIGBMQUJFTEVEX1BBVEhgIG9yIGBQQVRIYCByZXF1aXJlbWVudC4KLSogUmVkdWNlIHRoZSBgdG9TdHJpbmcoKWAgb2YgYE9iamVjdFdyaXRhYmxlYCB0byBhdm9pZCBPT00gZm9yIHJ1bm5pbmcgT0xBUCBxdWVyaWVzIG9uIFNwYXJrLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjUyNiBHcmVtbGluIENvbnNvbGUgcGVyZm9ybWFuY2Ugd2l0aCBpbmNvbXBsZXRlIG11bHRpLWxpbmUgc2NyaXB0cwotKiBUSU5LRVJQT1AtMjc2NyBSZXBlYXQgT3V0IFRpbWVzIHRyYXZlcnNhbCBoYW5ncyBpbmRlZmluaXRlbHkgb24gZmlyc3QgZXhlY3V0aW9uCi0qIFRJTktFUlBPUC0yODIwIGdyZW1saW4tcHl0aG9uIF9jbG9zZV9zZXNzaW9uIHJhY2UgY29uZGl0aW9uL0ZEIGxlYWsKLSogVElOS0VSUE9QLTI4NTUgUGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVGlua2VyR3JhcGggMy41LjQgYW5kIDMuNS41Ci0qIFRJTktFUlBPUC0yODU2IG1hdGgoKSBzdGVwIGZhaWxzIGlmIHZhcmlhYmxlIG5hbWUgY29udGFpbnMgYSBrZXl3b3JkCi0qIFRJTktFUlBPUC0yODYxIEZpeCBpbmNvcnJlY3Qgc3ltbGlua3MgaW4gc291cmNlIHJlbGVhc2UgemlwCi0qIFRJTktFUlBPUC0yODYzIEhhc0lkIFN0ZXAgZ2VuZXJhdGVzIGluY29ycmVjdCByZXN1bHRzIHdoZW4gZ2l2ZW4gYSBsaXN0IG9mIElEcyBtaWQtdHJhdmVyc2FsCi0qIFRJTktFUlBPUC0yODc4IEluY29ycmVjdCBoYW5kbGluZyBvZiBsb2NhbCBvcGVyYXRpb25zIHdoZW4gdGhlcmUgYXJlIGR1cGxpY2F0ZSBlbGVtZW50cwotKiBUSU5LRVJQT1AtMjg4OCBEZWZhdWx0VHJhdmVyc2FsJ3MgYXBwbHlTdHJhdGVnaWVzIHBlcmZvcm1hbmNlIGRlY3JlYXNlCi0qIFRJTktFUlBPUC0yODkxIEluY29uc2lzdGVudCBiZWhhdmlvciB3aGVuIGNvbXBhcmluZyBhIGNvdW50ZWQgdmFsdWUgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlCi0qIFRJTktFUlBPUC0yODkzIEluY29ycmVjdGx5IGNvbXBhcmluZyBhIGNvdW50ZWQgdmFsdWUgd2l0aCBtdWx0aXBsZSBwcmVkaWNhdGVzCi0qIFRJTktFUlBPUC0yOTAyIENyaXRpY2FsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gc25ha2V5YW1sCi0qIFRJTktFUlBPUC0yOTA1IGdyZW1saW4tZ28gZ29yaWxsYVRyYW5zcG9ydGVyLmxvZ0hhbmRsZXIgaXMgbm90IGluaXRpYWxpemVkIGNvcnJlY3RseSBhbmQgbGVhZHMgdG8gcGFuaWMKLSogVElOS0VSUE9QLTI5MTEgQ291bnRTdHJhdGVneSBjb252ZXJ0cyBjb3VudCgpLmlzKDApIHdyb25nbHkgdW5kZXIgQ29ubmVjdGl2ZVN0cmF0ZWd5Ci0qIFRJTktFUlBPUC0yOTE4IFV0aWxzLkdlbmVyYXRlVXNlckFnZW50IGFzc3VtZXMgR3JlbWxpbi5OZXQuZGxsIHRvIGJlIHByZXNlbnQgd2hlbiwgaW4gc29tZSBlbnZpcm9ubWVudHMsIGl0IGlzIG5vdC4KLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjg0MSBUZXN0IGFuZCBGaXggUGVyIFJlcXVlc3QgU2V0dGluZ3MgaW4gR28KLSogVElOS0VSUE9QLTI4NTIgVXBkYXRlIE1hdmVuIHBsdWdpbiBmb3IgZG9ja2VyLWltYWdlcyBidWlsZGluZyBmb3IgTTEgY29tcGF0aWJpbGl0eQotKiBUSU5LRVJQT1AtMjg1NyBHcmFwaFNPTlJlY29yZFJlYWRlciBkb2VzIG5vdCBhbGxvdyBjb25maWd1cmUgYSBHcmFwaEZpbHRlciBkdXJpbmcgZGVzZXJpYWxpemF0aW9uCi0qIFRJTktFUlBPUC0yODY1IEFkZCBoYXMgc3RlcHMgaW5qZWN0ZWQgYnkgUGFydGl0aW9uU3RyYXRlZ3kgYXQgdGhlIGVuZCBvZiB0aGUgZmlsdGVyCi0qIFRJTktFUlBPUC0yODkwIEF2b2lkIGV4Y2VwdGlvbnMgb24gbG9jYWwgc2NvcGUgYmFzZWQgc3RlcHMgd2hlcmUgcG9zc2libGUKLSogVElOS0VSUE9QLTI4OTkgU2FtcGxlR2xvYmFsU3RlcCBzYW1wbGVzIGluZWZmaWNpZW50bHkgd2l0aCBUcmF2ZXJzZXJTZXQgcnVubmluZyBpbnRvIGhhc2ggY29sbGlzaW9ucwotKiBUSU5LRVJQT1AtMjkxMiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGFkZEUoKSB3aGVuIHRyYXZlcnNlciBpcyBpbmNvcnJlY3QKLSogVElOS0VSUE9QLTI5MTkgSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgZm9yIGRlZXBseSBuZXN0ZWQgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjkzNCBPcHRpbWl6ZSBPYmplY3RXcml0YWJsZSBmb3IgZGlzcGxheWluZyBjb250ZW50IG9mIEphdmEgQ29sbGVjdGlvbiBvciBNYXAgdG8gcmVkdWNlIE9PTQorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS02LCAzLjUuNiBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNS01XV0KID09PSBUaW5rZXJQb3AgMy41LjUgKFJlbGVhc2UgRGF0ZTogSmFudWFyeSAxNiwgMjAyMykKIAotKiBDaGFuZ2VkIHRoZSBgUmVzdWx0YCBzdHJ1Y3QgaW4gZ3JlbWxpbi1nbyB0byBtYWtlIGl0IG1vcmUgc3VpdGFibGUgZm9yIG1vY2tpbmcgaW4gdGVzdHMuCi0qIENoYW5nZWQgbGFiZWwgZ2VuZXJhdGlvbiBpbiBgUGF0aFByb2Nlc3NvclN0cmF0ZWd5YCB0byBiZSBtb3JlIGRldGVybWluaXN0aWMuCi0qIEJ1bXBlZCB0byBBcGFjaGUgYGNvbW1vbnMtY29uZmlndXJhdGlvbmAgMi44LjAgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCi0qIEZpeGVkIGlzc3VlIHdoZXJlIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgcmV1c2VkIHRoZSBzYW1lIHRyYW5zbGF0b3IgY29uY3VycmVudGx5IHdoaWNoIGxlYWQgdG8gaW5jb3JyZWN0IHRyYW5zbGF0aW9ucy4KLSogRml4ZWQgYnVnIHdoZXJlIHRhc2tzIHRoYXQgaGF2ZW4ndCBzdGFydGVkIHJ1bm5pbmcgeWV0IHRpbWUgb3V0IGR1ZSB0byBgZXZhbHVhdGlvblRpbWVvdXRgIGFuZCBuZXZlciBzZW5kIGEgcmVzcG9uc2UgYmFjayB0byB0aGUgY2xpZW50LgotKiBTZXQgdGhlIGV4YWN0IGV4Y2VwdGlvbiBpbiBgaW5pdGlhbGl6YXRpb25GYWlsdXJlYCBvbiB0aGUgSmF2YSBkcml2ZXIgaW5zdGVhZCBvZiB0aGUgcm9vdCBjYXVzZS4KLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBmb3Igd2hlbiBgZnJvbSgpYCBhbmQgYHRvKClgIGFyZSB1bnByb2R1Y3RpdmUgZm9yIGBhZGRFKClgLgotKiBBZGRlZCBgU3BhcmtJT1V0aWxgIHV0aWxpdHkgdG8gbG9hZCBncmFwaCBpbnRvIFNwYXJrIFJERC4KLSogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgYENsb25lVmVydGV4UHJvZ3JhbWAgYnkgYnlwYXNzaW5nIHRoZSBzaHVmZmxlIHN0YXRlIG9mIGBTcGFya0dyYXBoQ29tcHV0ZXJgLgotKiBDaGFuZ2VkIGBKYXZhVHJhbnNsYXRvcmAgZXhjZXB0aW9uIGhhbmRsaW5nIHNvIHRoYXQgYW4gYElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbmAgaXMgdXNlZCBmb3IgY2FzZXMgd2hlcmUgdGhlIG1ldGhvZCBleGlzdHMgYnV0IHRoZSBzaWduYXR1cmUgY2FuJ3QgYmUgZGlzY2VybmVkIGdpdmVuIHRoZSBhcmd1bWVudHMgc3VwcGxpZWQuCi0qIERvY2tlcml6ZWQgYWxsIHRlc3QgZW52aXJvbm1lbnQgZm9yIC5ORVQsIEphdmFTY3JpcHQsIFB5dGhvbiwgR28sIGFuZCBQeXRob24tYmFzZWQgdGVzdHMgZm9yIENvbnNvbGUsIGFuZCBhZGRlZCBEb2NrZXIgYXMgYSBidWlsZCByZXF1aXJlbWVudC4KLSogQXN5bmMgb3BlcmF0aW9ucyBpbiAuTkVUIGNhbiBub3cgYmUgY2FuY2VsbGVkLiBUaGlzIGhvd2V2ZXIgZG9lcyBub3QgY2FuY2VsIHdvcmsgdGhhdCBpcyBhbHJlYWR5IGhhcHBlbmluZyBvbiB0aGUgc2VydmVyLgotKiBCdW1wZWQgdG8gYHNuYWtleWFtbGAgMS4zMiB0byBmaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4KLSogVXBkYXRlIGRvY2tlci9idWlsZC5zaCB0byB3b3JrIHdpdGggZG9ja2VyLWNvbXBvc2UgZG9ja2VyaXplZCB0ZXN0cyBjaGFuZ2VzLgotKiBGaXggcGVybWlzc2lvbiBpc3N1ZXMgd2l0aCBEb2NrZXIgZ2VuZXJhdGVkIGZpbGVzIGJ5IHNldHRpbmcgcGVybWlzc2lvbiB0byBjdXJyZW50IHVzZXIsIHNvIHN1ZG8gaXNuJ3QgbmVlZGVkIGZvciBtYXZlbiBvcGVyYXRpb25zLgotKiBVcGRhdGVkIGJhc2UgaW1hZ2VzIGZvciBncmVtbGluLXNlcnZlciBhbmQgZ3JlbWxpbi1jb25zb2xlIGRvY2tlciBpbWFnZXMgdG8gc3VwcG9ydCBhcm02NC4KLSogVXNlIEdvIGVtYmVkIGZvciBlcnJvci9sb2dnZXIgcmVzb3VyY2VzIGZvciBgZ3JlbWxpbi1nb2AgdG8gYXZvaWQgbWlzc2luZyByZXNvdXJjZSBmaWxlcyB3aGVuIHVzaW5nIGJpbmFyaWVzLgotKiBBZGRlZCB1c2VyIGFnZW50IHRvIHdlYiBzb2NrZXQgaGFuZHNoYWtlIGluIGphdmEgZHJpdmVyLiBDYW4gYmUgY29udHJvbGxlZCBieSBhIG5ldyBlbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgY29uZmlndXJhdGlvbi4gSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotKiBBZGRlZCB1c2VyIGFnZW50IHRvIHdlYiBzb2NrZXQgaGFuZHNoYWtlIGluIEdyZW1saW4uTmV0IGRyaXZlci4gQ2FuIGJlIGNvbnRyb2xsZWQgYnkgYEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdGAgaW4gYENvbm5lY3Rpb25Qb29sU2V0dGluZ3NgLiBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0qIEFkZGVkIHVzZXIgYWdlbnQgdG8gd2ViIHNvY2tldCBoYW5kc2hha2UgaW4gZ28gZHJpdmVyLiBDYW4gYmUgY29udHJvbGxlZCBieSBhIG5ldyBgRW5hYmxlVXNlckFnZW50T25Db25uZWN0YCBzZXR0aW5nLiBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0qIEFkZGVkIHVzZXIgYWdlbnQgdG8gd2ViIHNvY2tldCBoYW5kc2hha2UgaW4gcHl0aG9uIGRyaXZlci4gQ2FuIGJlIGNvbnRyb2xsZWQgYnkgYSBuZXcgYGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3RgIHNldHRpbmcuIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KLSogQWRkZWQgdXNlciBhZ2VudCB0byB3ZWIgc29ja2V0IGhhbmRzaGFrZSBpbiBqYXZhc2NyaXB0IGRyaXZlci4gQ2FuIGJlIGNvbnRyb2xsZWQgYnkgYSBuZXcgYGVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdGAgb3B0aW9uLiBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0qIEFkZGVkIGxvZ2dpbmcgaW4gLk5FVC4KLSogQWRkZWQgYGFkZERlZmF1bHRYTW9kdWxlYCB0byBgR3JhcGhTT05NYXBwZXJgIGFzIGEgc2hvcnRjdXQgZm9yIGluY2x1ZGluZyBhIHZlcnNpb24gbWF0Y2hlZCBHcmFwaFNPTiBleHRlbnNpb24gbW9kdWxlLgotKiBNb2RpZmllZCBgR3JhcGhTT05SZWNvcmRSZWFkZXJgIGFuZCBgR3JhcGhTT05SZWNvcmRXcml0ZXJgIHRvIGluY2x1ZGUgdGhlIEdyYXBoU09OIGV4dGVuc2lvbiBtb2R1bGUgYnkgZGVmYXVsdC4KLSogQnVtcGVkIGBqYWNrc29uLWRhdGFiaW5kYCB0byAyLjE0LjAgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCi0qIEJ1bXBlZCB0byBHcm9vdnkgMi41LjE1LgotKiBCdW1wZWQgdG8gTmV0dHkgNC4xLjg2LgotKiBCdW1wZWQgYGl2eWAgdG8gMi41LjEgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkKLSogUmVtb3ZlZCBkZWZhdWx0IFNTTCBoYW5kc2hha2UgdGltZW91dC4gVGhlIFNTTCBoYW5kc2hha2UgdGltZW91dCB3aWxsIGluc3RlYWQgYmUgY2FwcGVkIGJ5IHNldHRpbmcgYGNvbm5lY3Rpb25TZXR1cFRpbWVvdXRNaWxsaXNgLgotKiBJbXByb3ZlZCBsb2dnaW5nIGZvciBgZ3JlbWxpbi1kcml2ZXJgLgotKiBNb2RpZmllZCBgQ29ubmVjdGlvbmAgYW5kIGBIb3N0YCBqb2Igc2NoZWR1bGluZyBpbiBgZ3JlbWxpbi1kcml2ZXJgIGJ5IGRpdmlkaW5nIHRoZWlyIHdvcmsgdG8gdHdvIGRpZmZlcmVudCB0aHJlYWQgcG9vbHMgYW5kIHNwYXJpbmcgd29yayBmcm9tIHRoZSBwcmltYXJ5IHBvb2wgcmVzcG9uc2libGUgZm9yIHN1Ym1pdHRpbmcgcmVxdWVzdHMgYW5kIHJlYWRpbmcgcmVzdWx0cy4KLSogUHJldmVudGVkIHVzYWdlIG9mIHRoZSBmb3JrLWpvaW4gcG9vbCBmb3IgYGdyZW1saW4tZHJpdmVyYCBqb2Igc2NoZWR1bGluZy4KLSogTW9kaWZpZWQgYEdyZW1saW5TY3JpcHRDaGVja2VyYCB0byBleHRyYWN0IHRoZSBgVG9rZW5zLlJFUVVFU1RfSURgIGZyb20gR3JlbWxpbiBzY3JpcHRzLgotKiBDaGFuZ2VkIGBIb3N0YCBpbml0aWFsaXphdGlvbiB3aXRoaW4gYSBgQ2xpZW50YCB0byBiZSBwYXJhbGxlbCBhZ2FpbiBpbiBgZ3JlbWxpbi1kcml2ZXJgLgotKiBDaGFuZ2VkIG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcgYEhvc3RgIGhlYWx0aCB3aGljaCBzaG91bGQgbWFrZSB0aGUgZHJpdmVyIG1vcmUgcmVzaWxpZW50IHRvIGludGVybWl0dGVudCBuZXR3b3JrIGZhaWx1cmVzLgotKiBSZW1vdmVkIHRoZSBkZWxheSBmb3IgcmVjb25uZWN0aW5nIHRvIGEgcG90ZW50aWFsbHkgdW5oZWFsdGh5IGBIb3N0YCBvbmx5IG1hcmtpbmcgaXQgYXMgdW5hdmFpbGFibGUgYWZ0ZXIgdGhhdCBpbml0aWFsIHJldHJ5IGZhaWxzLgotKiBQcmV2ZW50ZWQgZmFzdCBgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uYCBpbiBmYXZvciBvZiBtb3JlIGRpcmVjdCBleGNlcHRpb25zIHdoZW4gYm9ycm93aW5nIGNvbm5lY3Rpb25zIGZyb20gdGhlIGBDb25uZWN0aW9uUG9vbGAuCi0qIEltcHJvdmVkIEdoZXJraW4gdGVzdHMgZm9yIG1vcmUgY29uc2lzdGVudCByZXN1bHRzLgotKiBQcm92aWRlcyB1c2VycyB3aXRoIHBvdGVudGlhbGx5IG1vcmUgaW5mb3JtYXRpb24gdG8gZHJpdmVyIFRpbWVvdXRFeGNlcHRpb25zLgotKiBGaXhlZCBhbiBpc3N1ZSBpbiBHbyBhbmQgUHl0aG9uIEdMVnMgd2hlcmUgbW9kaWZ5aW5nIHBlciByZXF1ZXN0IHNldHRpbmdzIHRvIG92ZXJyaWRlIHJlcXVlc3RfaWQncyB3YXMgbm90IHdvcmtpbmcgY29ycmVjdGx5LgotKiBGaXhlZCBpbmNvcnJlY3QgaW1wbGVtZW50YXRpb24gZm9yIGBHcmFwaFRyYXZlcnNhbFNvdXJjZS5XaXRoYCBpbiBgZ3JlbWxpbi1nb2AuCi0qIENoYW5nZWQgYEdyZW1saW4udmVyc2lvbigpYCB0byByZXR1cm4gIlZlcnNpb25Ob3RGb3VuZCIgaWYgdGhlIHZlcnNpb24gaXMgbWlzc2luZyBmcm9tIHRoZSBtYW5pZmVzdC4KLSogRml4ZWQgbG9jYWwgc3RlcHMgdG8gYXZvaWQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGZvciBub24taXRlcmFibGUgaW5wdXQuCi0qIEZpeGVkIGEgY2FzZSBzZW5zaXRpdml0eSBpc3N1ZSB3aGVuIGNvbXBhcmluZyByZXF1ZXN0IFVVSURzIGluIGBncmVtbGluLWphdmFzY3JpcHRgLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjc2NSBSYWNlIGNvbmRpdGlvbiBkdXJpbmcgc2NyaXB0IGNyZWF0aW9uIHdoZW4gdXNpbmcgVW5pZmllZENoYW5uZWxpemVyCi0qIFRJTktFUlBPUC0yNzY5IGdyZW1saW4tc2VydmVyIGRvZXMgbm90IHJlcGx5IHdpdGggYSB0aW1lb3V0IHJlc3BvbnNlIHRvIGFsbCB0aW1lZCBvdXQgcmVxdWVzdHMKLSogVElOS0VSUE9QLTI3NzEgQ3JpdGljYWwgc2V2ZXJpdHkgc2VjdXJpdHkgdnVsbmVyYWJpbHR5IGluIGNvbW1vbnMtY29uZmlndXJhdGlvbiAyLjcKLSogVElOS0VSUE9QLTI3OTYgSGlnaCBzZXZlcml0eSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGZvdW5kIGluIHNuYWtleWFtbAotKiBUSU5LRVJQT1AtMjgwMyBJbmNvcnJlY3QgY291bnQoKSB3aXRoIHNhbXBsZSgpIGluIFRpbmtlckdyYXBoCi0qIFRJTktFUlBPUC0yODA5IEhpZ2ggc2V2ZXJpdHkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBmb3VuZCBpbiBqYWNrc29uIGRhdGFiaW5kCi0qIFRJTktFUlBPUC0yODE1IENyaXRpY2FsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgZm9yIGFwYWNoZSBjb21tb25zLXRleHQKLSogVElOS0VSUE9QLTI4MTYgR2hlcmtpbiB0ZXN0IGlzc3VlcyBmb3IgaW1wbGVtZW50ZXJzCi0qIFRJTktFUlBPUC0yODE3IFN1cHBvcnQgamF2YS5sYW5nLkJ5dGUgaW4gaGFkb29wIEdyYXBoU09OUmVjb3JkV3JpdGVyL0dyYXBoU09OUmVjb3JkUmVhZGVyCi0qIFRJTktFUlBPUC0yODI2IENyaXRpY2FsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gaXZ5Ci0qIFRJTktFUlBPUC0yODM2IEdpdGh1YiBhY3Rpb25zIGRvIG5vdCBydW4gamF2YSBkcml2ZXIgaW50ZWdyYXRpb24gdGVzdHMKLSogVElOS0VSUE9QLTI4NDAgVGVzdCBGYWlsdXJlcyBvbiBOb25EZXgKLSogVElOS0VSUE9QLTI4NDMgU2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGZvdW5kIGluIG5ldHR5IHZlcnNpb24gNC4xLjc3Ci0qIFRJTktFUlBPUC0yODQ5IEluY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBmb3IgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuV2l0aCBpbiBncmVtbGluLWdvCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTI0NzEgQWRkIGxvZ2dpbmcgdG8gR3JlbWxpbi5OZXQgZHJpdmVyCi0qIFRJTktFUlBPUC0yNDgwIFVzZXIgYWdlbnQgZm9yIEdyZW1saW4gZHJpdmVycwotKiBUSU5LRVJQT1AtMjczNyBEb2NrZXJpemVkIEJ1aWxkIGFuZCBUZXN0IEVudmlyb25tZW50cwotKiBUSU5LRVJQT1AtMjc3MiBBZGQgU3BhcmsgdXRpbGl0eSB0byBsb2FkIHZlcnRpY2VzIGFzIFJERAotKiBUSU5LRVJQT1AtMjc3OSBGbG9hdGluZyBDb25uZWN0ZWRDb21wb25lbnQgRmVhdHVyZSBGYWlsdXJlcyBmb3IgR2l0SHViIEFjdGlvbnMgb24gd2luZG93cwotKiBUSU5LRVJQT1AtMjc4NSBJbmFiaWxpdHkgdG8gTW9jayBSZXR1cm5lZCBSZXN1bHQgVHlwZXMgaW4gR3JlbWxpbi1HbyBEcml2ZXIKLSogVElOS0VSUE9QLTI3OTIgQmV0dGVyIGV4Y2VwdGlvbiB3aGVuIEphdmFUcmFuc2xhdG9yIGZpbmRzIGEgbWV0aG9kIGJ1dCBub3QgdGhlIG92ZXJsb2FkCi0qIFRJTktFUlBPUC0yNzk0IEFsbG93IGNhbmNlbGxhdGlvbiBvZiBHcmVtbGluLk5ldCBhc3luYyBtZXRob2RzCi0qIFRJTktFUlBPUC0yODA4IEltcHJvdmUgQ29tcGF0aWJpbGl0eSBvbiBBUk0gbWFjaGluZXMKLSogVElOS0VSUE9QLTI4MTMgSW1wcm92ZSBkcml2ZXIgdXNhYmlsaXR5IGZvciBjYXNlcyB3aGVyZSBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24gaXMgY3VycmVudGx5IHRocm93bgotKiBUSU5LRVJQT1AtMjgxNCBBZGQgYSBTU0wgaGFuZHNoYWtlIHRpbWVvdXQgY29uZmlndXJhdGlvbiB0byB0aGUgZHJpdmVyCi0qIFRJTktFUlBPUC0yODMzIFRlc3RTdXBwb3J0IGxvYWRzIGZpbGVzIHRvbyBzbG93Ci0qIFRJTktFUlBPUC0yODM0IENsb25lVmVydGV4UHJvZ3JhbSBvcHRpbWl6YXRpb24gb24gU3BhcmtHcmFwaENvbXB1dGVyCi0qIFRJTktFUlBPUC0yODQyIEV4cGFuZCBHcmVtbGluU2NyaXB0Q2hlY2tlciB0byBpbmNsdWRlIHJlcXVlc3QgaWQgb3ZlcnJpZGVzCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNS54LmFzY2lpZG9jI3JlbGVhc2UtMy01LTUsIDMuNS41IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy01LTRdXQogPT09IFRpbmtlclBvcCAzLjUuNCAoUmVsZWFzZSBEYXRlOiBKdWx5IDE4LCAyMDIyKQogCi0qIEFkZGVkIGV4Y2VwdGlvbiB0byBHcmVtbGluIFNlcnZlciB0aGF0IGlzIHRocm93biB3aGVuIHVzaW5nIGEgdHJhbnNhY3Rpb24gb24gYSBub24tdHJhbnNhY3Rpb24gZ3JhcGguCi0qIEV4cG9zZWQgZXJyb3IgbWVzc2FnZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgYXMgYSBwcm9wZXJ0eSBvbiBgR3JlbWxpblNlcnZlckVycm9yYCBmb3IgZ3JlbWxpbi1weXRob24KLSogQWxsb3dlZCBgZGF0ZXRpbWUoKWAgc3ludGF4IHRvIGFjY2VwdCB6b25lIG9mZnNldCB3aXRoIGNvbG9uIHNlcGFyYXRvcnMgYW5kIHNlY29uZHMuCi0qIEZpeGVkIGEgbWlub3IgcHJvYmxlbSBpbiB0aGUgR3JlbWxpbiBwYXJzZXIgd2hlcmUgYSBgR3JhcGhUcmF2ZXJzYWxTb3VyY2VgIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgotKiBBZGRlZCBnZXR0ZXJzIHRvIGhpZ2ggYW5kIGxvdyBwcm9wZXJ0aWVzIGluIGBSYW5nZUxvY2FsU3RlcGAuCi0qIEFkZGVkIGBQaWNrYCB0cmF2ZXJzYWwgdG8gdGhlIHJldHVybiBmcm9tIGBnZXRHbG9iYWxDaGlsZHJlbigpYCBmb3IgYEJyYW5jaFN0ZXBgLgotKiBFbnN1cmVkIGBQaWNrYCB0cmF2ZXJzYWwgd2FzIGFuIGludGVncmF0ZWQgY2hpbGQuCi0qIEFkZGVkIEdyYXBoQmluYXJ5IHNlcmlhbGl6YXRpb24gc3VwcG9ydCB0byBncmVtbGluLWphdmFzY3JpcHQuCi0qIEltcHJvdmVkIHN0YXJ0dXAgdGltZSBieSByZW1vdmluZyB1bm5lY2Vzc2FyeSBETlMgbG9va3VwLgotKiBCdW1wZWQgdG8gbG9nYmFjayAxLjIuOS4KLSogQnVtcGVkIHRvIG5ldHR5IDQuMS43Ny4KLSogRml4ZWQgYnVnIGluIGBzdWJtaXRBc3luYygpYCBpbiBncmVtbGluLXB5dGhvbiB3aGVyZSB0aGUgZGVwcmVjYXRlZCB2ZXJzaW9uIHdhcyBub3QgcmV0dXJuaW5nIGl0cyByZXN1bHQuCi0qIEFkZGVkIG1pc3NpbmcgYFJlc3BvbnNlU3RhdHVzQ29kZUVudW1gIGVudHJpZXMgZm9yIDQwMywgNDI5LCA0OTcsIGFuZCA1OTYgZm9yIC5ORVQuCi0qIEFkZGVkIEdyYXBoQmluYXJ5IHN1cHBvcnQgaW4gZ3JlbWxpbi1weXRob24gZm9yIHNob3J0LCBiaWdkZWNpbWFsIGFuZCBiaWdpbnRlZ2VyLgotKiBGaXhlZCBidWcgaW4gYFBhcnRpdGlvblN0cmF0ZWd5YCB3aGVyZSB0aGUgdXNlIG9mIGBBYnN0cmFjdExhbWJkYVRyYXZlcnNhbGAgY2F1c2VkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgotKiBGaXhlZCBidWcgd2hlcmUgY2xvc2UgcmVxdWVzdHMgZm9yIHNlc3Npb25zIHdlcmUgaW1wcm9wZXJseSB2YWxpZGF0aW5nIHRoZSByZXF1ZXN0IGluIHRoZSBgVW5pZmllZENoYW5uZWxpemVyYC4KLSogRGVwcmVjYXRlZCBhbmQgcmVtb3ZlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBgY29ubmVjdE9uU3RhcnR1cGAgb3B0aW9uIGluIGBncmVtbGluLWphdmFzY3JpcHRgIHRvIHJlc29sdmUgcG90ZW50aWFsIGB1bmhhbmRsZWRSZWplY3Rpb25gIGFuZCByYWNlIGNvbmRpdGlvbnMuCi0qIEVuc3VyZWQgYEdyYXBoYCBpbnN0YW5jZSB3YXMgc2V0IGJldHdlZW4gYFRyYXZlcnNhbFN0cmF0ZWd5YCBleGVjdXRpb25zLgotKiBGaXhlZCBwb3RlbnRpYWwgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBpbiBgZ3JlbWxpbi1kcml2ZXJgIHdoZXJlIGluaXRpYWxpemF0aW9uIG9mIGEgYENvbm5lY3Rpb25Qb29sYCB3b3VsZCBmYWlsIGJ1dCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGR1ZSB0byBjZW50cmFsaXplZCBlcnJvciBjaGVjayBiZWluZyBzYXRpc2ZpZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcy4KLSogRml4ZWQgYSBidWcgd2hlcmUgdGhlIEphdmFTY3JpcHQgY2xpZW50IHdvdWxkIGhhbmcgaW5kZWZpbml0ZWx5IG9uIHRyYXZlcnNhbHMgaWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciB3YXMgdGVybWluYXRlZC4KLSogRml4IGEgamF2YWRvYyBjb21tZW50IGluIENsdXN0ZXIuQnVpbGRlciByZWdhcmRpbmcgbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbi4KLSogQWRkZWQgYSBnZXR0ZXIgZm9yIHNlbGVjdEtleXMgaW4gU2VsZWN0U3RlcAotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjczNCBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgQ2xpZW50IGNob29zZUNvbm5lY3Rpb24oKQotKiBUSU5LRVJQT1AtMjczNSBJbGxlZ2FsU3RhdGVFeGNlcHRpb246IFVucmVjb2duaXplZCBjb250ZW50IG9mIHRoZSAnZ3JlbWxpbicgYXJndW1lbnQuLi4gb24gY29ubmVjdGlvbiBjbG9zZQotKiBUSU5LRVJQT1AtMjczNiBQbHVnaW5BY2NlcHRyb3IgaW50ZXJmYWNlIG5vIG1vcmUgYXZhaWxhYmxlIGluIDMuNS4zKyBidXQgcmVmZXJyZWQgaW4gZG9jdW1lbnRhdGlvbgotKiBUSU5LRVJQT1AtMjc0MSBHcmFwaE1MV3JpdGVyIGVycm9yIG1lc3NhZ2UgaXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZAotKiBUSU5LRVJQT1AtMjc1MSBUcmFuc2FjdGlvbjogdHguY29tbWl0KCkgaGFuZ3MgdXAgaW4gamF2YXNjcmlwdCBjbGllbnQtbGliCi0qIFRJTktFUlBPUC0yNzU0IEphdmFzY3JpcHQgY2xpZW50IGhhbmdzIGlmIHRoZSBzZXJ2ZXIgcmVzdGFydHMKLSogVElOS0VSUE9QLTI3NjMgY2xpZW50LnN1Ym1pdEFzeW5jIHJldHVybnMgTm9uZSB2YWx1ZQotKiBUSU5LRVJQT1AtMjc2OCBCcmFuY2hTdGVwIHBpY2tUb2tlbiBzaG91bGQgYmUgaW50ZWdyYXRlZCB3aGVuIGFkZGVkIGFzIGEgY2hpbGQgb3B0aW9uCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIyMjkgSmF2YVNjcmlwdCBHTFY6IEFkZCBHcmFwaEJpbmFyeSBTdXBwb3J0Ci0qIFRJTktFUlBPUC0yNjMxIEdyYXBoU09OIGZsb2F0IHNlcmlhbGl6YXRpb24gd2hlbiB1anNvbiBpcyB1c2VkIGlzIGltcHJlY2lzZQotKiBUSU5LRVJQT1AtMjY5MyBDb21wbGV0ZSBHcmFwaEJpbmFyeSBzdXBwb3J0IGluIFB5dGhvbgotKiBUSU5LRVJQT1AtMjc0MCBmaXJzdCByZXF1ZXN0IHN1c3BlbmQgbW9yZSB0aGFuIDlzIHdoZW4gdXNpbmcgZ3JlbWxpbi1qYXZhLWRyaXZlcgotKiBUSU5LRVJQT1AtMjc0OCBNZWRpdW0gc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBvbiBuZXR0eS1hbGwgYW5kIG5ldHR5LWNvZGVjCi0qIFRJTktFUlBPUC0yNzYyIGdldFNjb3BlS2V5cyBzaG91bGQgcmVzcGVjdCB0aGUgb3JkZXIgb2Yga2V5cyBwYXNzZWQgaW4gU3RlcAotKiBUSU5LRVJQT1AtMjc2NCBBV1MgTmVwdHVuZSByZXR1cm5zIGFuIGluYWNjZXNzaWJsZSBzdHJ1Y3R1cmVkIGVycm9yIHJlc3BvbnNlCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNS54LmFzY2lpZG9jI3JlbGVhc2UtMy01LTQsIDMuNS40IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy01LTNdXQogPT09IFRpbmtlclBvcCAzLjUuMyAoUmVsZWFzZSBEYXRlOiBBcHJpbCA0LCAyMDIyKQogCi0qIEFkZGVkIHN1cHBvcnQgZm9yIHVzaW5nIGEgcmVhZGFibGUgc3RyZWFtIHdoZW4gc3VibWl0dGluZyBzY3JpcHRzIHRocm91Z2ggdGhlIEphdmFTY3JpcHQgZHJpdmVyIHdoaWNoIGFsbG93cyBwcm9jZXNzaW5nIGVhY2ggYmF0Y2ggb2YgcmVzdWx0IHNldHMgYXMgdGhleSBjb21lIGluLCByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciB0aGUgZW50aXJlIHJlc3VsdCBzZXQgdG8gY29tcGxldGUgYmVmb3JlIGFsbG93aW5nIHByb2Nlc3NpbmcuCi0qIEZpeGVkIGlzc3VlIHdpdGggaW1wbGljaXQgY29udmVyc2lvbiBvZiBgSW5maW5pdHlgIG51bWJlciBpbnN0YW5jZXMgaW50byBgQmlnRGVjaW1hbGAuCi0qIEVuc3VyZWQgdGhhdCBuZXcgcHJvcGVydGllcyBhcmUgYWRkZWQgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIGFzc29jaWF0ZWQgZXZlbnQuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIFdlYlNvY2tldCBjb21wcmVzc2lvbiBpbiB0aGUgLk5FVCBkcml2ZXIuIChPbmx5IGF2YWlsYWJsZSBvbiAuTkVUIDYuKQotKiBBZGRlZCBHcm9vdnkgYFRyYW5zbGF0b3JgIGZvciAuTkVULgotKiBCdW1wZWQgdG8gYGphY2tzb24tZGF0YWJpbmRgIDIuMTMuMi4yLgotKiBGaXhlZCBidWcgaW4gYERlZmF1bHRUcmF2ZXJzYWwuY2xvbmUoKWAgd2hlcmUgdGhlIHJlc3VsdGluZyBgVHJhdmVyc2FsYCBjb3B5IGNvdWxkIG5vdCBiZSByZS1pdGVyYXRlZC4KLSogRml4ZWQgYnVnIGluIGBKYXZhVHJhbnNsYXRvcmAgdGhhdCBkaWQgbm90IGhhbmRsZSBgaGFzKClgIHdlbGwgd2hlcmUgYG51bGxgIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQuCi0qIFJlbmFtZWQgYEdyZW1saW5CYXNlVmlzaXRvcmAgdG8gYERlZmF1bHRHcmVtbGluQmFzZVZpc2l0b3JgIGluIGBncmVtbGluLWNvcmVgIHRvIHByZXZlbnQgY29uZmxpY3Qgd2l0aCB0aGUgZ2VuZXJhdGVkIGBHcmVtbGluQmFzZVZpc2l0b3JgIGluIGBncmVtbGluLWxhbmd1YWdlYC4KLSogVHJhY2tlZCB0cmFuc2FjdGlvbiBzcGF3bmVkIGNvbm5lY3Rpb25zIGFuZCBjbG9zZWQgdGhlbSB3aGVuIHRoZSBwYXJlbnQgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGZvciBgZ3JlbWxpbi1weXRob25gLgotKiBQcmV2ZW50ZWQgdW5pbnRlbnRpb25hbGx5IG9wZW5pbmcgYW5vdGhlciB0cmFuc2FjdGlvbiBpbiBgVHJhdmVyc2FsT3BQcm9jZXNzb3JgYCBhbmQgYFNlc3Npb25PcFByb2Nlc3NvcmAgb2YgR3JlbWxpbiBTZXJ2ZXIuCi0qIEZpeGVkIGJ1ZyBpbiBgVHJhbnNsYXRvcmAgb2YgYGdyZW1saW4tcHl0aG9uYCBhcm91bmQgdHJhbnNsYXRpb24gb2YgQm9vbGVhbnMuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yNjk0IEJ1ZyBvZiBUaW5rZXJHcmFwaCBncmVtbGluIGFwaSAiaGFzKCkiCi0qIFRJTktFUlBPUC0yNzA2IFRyYXZlcnNhbCBjbG9uZSgpIG5vdCByZXNldHRpbmcgdGhlIGNsb3NlIHN0YXRlCi0qIFRJTktFUlBPUC0yNzEyIFByb3BlcnR5Q2hhbmdlZEV2ZW50IGlzIHRyaWdnZXJlZCBiZWZvcmUgUHJvcGVydHkgaXMgYWN0dWFsbHkgY2hhbmdlZAotKiBUSU5LRVJQT1AtMjcxNyBHcmVtbGluLk5FVCA6IFdlYlNvY2tldENvbm5lY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIE1lc3NhZ2VUeXBlLkNsb3NlLCBjYXVzaW5nIGVycm9yIEludmFsaWRPcGVyYXRpb25FeGNlcHRpb246ICJSZWNlaXZlZCBkYXRhIGRlc2VyaWFsaXplZCBpbnRvIG51bGwgb2JqZWN0IG1lc3NhZ2UuIENhbm5vdCBvcGVyYXRlIG9uIGl0LiIKLSogVElOS0VSUE9QLTI3MTkgaGFzTmV4dCBpcyBjYWxsZWQgb24gVHJhdmVyc2VySXRlcmF0b3IgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkCi0qIFRJTktFUlBPUC0yNzI2IFB5dGhvbidzIEdyb292eVRyYW5zbGF0b3IgdHJhbnNsYXRlcyBib29sZWFuIHdyb25nCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIzNjcgR3JlbWxpbiBUcmFuc2xhdG9ycyBmb3IgLk5FVAotKiBUSU5LRVJQT1AtMjUxOCBFbmhhbmNlIC5ORVQgZ2hlcmtpbiBmcmFtZXdvcmsgdG8gZGVhbCB3aXRoIG1vcmUgYWR2YW5jZWQgYXNzZXJ0aW9ucwotKiBUSU5LRVJQT1AtMjY1MSBVcGRhdGUgdG8gLk5FVCA2Ci0qIFRJTktFUlBPUC0yNjc5IFVwZGF0ZSBKYXZhU2NyaXB0IGRyaXZlciB0byBzdXBwb3J0IHByb2Nlc3NpbmcgbWVzc2FnZXMgYXMgYSBzdHJlYW0KLSogVElOS0VSUE9QLTI2ODIgRW5hYmxlIFdlYlNvY2tldCBjb21wcmVzc2lvbiBpbiAuTkVUIGJ5IGRlZmF1bHQKLSogVElOS0VSUE9QLTI3MDcgQ2xvc2luZyBwYXJlbnQgY29ubmVjdGlvbiBpbiBweXRob24gc2hvdWxkIGNsb3NlIHR4KCkgY29ubmVjdGlvbnMKLSogVElOS0VSUE9QLTI3MTEgTWFrZSBncmVtbGluLWxhbmd1YWdlIG9wdGlvbmFsIGFzIGl0IGJyaW5ncyBpbiBDRERML0dQTCBkZXBlbmRlbmNpZXMKLSogVElOS0VSUE9QLTI3MTYgRW5hYmxlIGVzbGludCBmb3IgZ3JlbWxpbi1qYXZhc2NyaXB0IHByb2plY3QKLSogVElOS0VSUE9QLTI3MjUgVHJhdmVyc2FsIFN0cmF0ZWd5IE1peCBVcCBJbiBHcmVtbGluLVB5dGhvbgotKiBUSU5LRVJQT1AtMjcyNyBIYXNDb250YWluZXIgc2hvdWxkIGFsbG93IGEgbnVsbCBrZXkKLSogVElOS0VSUE9QLTI3MjggamFja3Nvbi1kYXRhYmluZCBoaWdoIHNlY3VyaXR5IGlzc3VlIGlkZW50aWZpZWQKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy41LnguYXNjaWlkb2MjcmVsZWFzZS0zLTUtMywgMy41LjMgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTUtMl1dCiA9PT0gVGlua2VyUG9wIDMuNS4yIChSZWxlYXNlIERhdGU6IEphbnVhcnkgMTAsIDIwMjIpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy00LTEzLCAzLjQuMTM+Pi4KLQotKiBBZGRlZCBhbiBgQW5vbnltaXppbmdUeXBlVHJhbnNsYXRvcmAgZm9yIHVzZSB3aXRoIGBHcm9vdnlUcmFuc2xhdG9yYCB3aGljaCBzdHJpcHMgUElJIChhbm9ueW1pemVzIGFueSBTdHJpbmcsIE51bWVyaWMsIERhdGUsIFRpbWVzdGFtcCwgb3IgVVVJRCBkYXRhKQotKiBBZGRlZCBzdXBwb3J0IGZvciBgZy50eCgpYCBpbiBQeXRob24uCi0qIEFkZGVkIGxvZ2dpbmcgaW4gaW4gUHl0aG9uLgotKiBBZGRlZCBgdHgoKWAgc3ludGF4IHRvIGBncmVtbGluLWxhbmd1YWdlYC4KLSogRml4ZWQgc2h1dGRvd24gY2xlYW51cCBpc3N1ZSBpbiBQeXRob24gYWlvaHR0cCB0cmFuc3BvcnQgbGF5ZXIuCi0qIEFkZGVkIGEgYE5vU3VnYXJUcmFuc2xhdG9yYCB0cmFuc2xhdG9yIHRvIGBQeXRob25UcmFuc2xhdG9yYCB3aGljaCB0cmFuc2xhdGVzIEdyZW1saW4gcXVlcmllcyB0byBQeXRob24gd2l0aG91dCBzeW50YWN0aWMgc3VnYXIgKGV4IGBnLlYoKS5saW1pdCgxKWAgaW5zdGVhZCBvZiBgZy5WKClbMDoxXWApCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGBnLlR4KClgIGluIC5ORVQuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGB3aXRoKClgIGNvbnN0YW50IG9wdGlvbnMgdG8gYGlvKClgLgotKiBDaGFuZ2VkIGBHcm9vdnlUcmFuc2xhdG9yYCB0byBnZW5lcmF0ZSBjb2RlIG1vcmUgY29tcGF0aWJsZSB0byBKYXZhIHdpdGggYERhdGVgIGFuZCBgVGltZXN0YW1wYC4KLSogRml4ZWQgYnVnIGluIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBgaW8oKWAgc3RlcCB3aGVuIGNvbnN0cnVjdGluZyBhIGBUcmF2ZXJzYWxgIGZyb20gdGhlIGdyYW1tYXIuCi0qIEFkZGVkIHRoZSBgQ29ubmVjdGVkQ29tcG9uZW50YCB0b2tlbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgcHJvY2VzcyB0aGUgYHdpdGgoKWAgb2YgdGhlIGBjb25uZWN0ZWRDb21wb25lbnQoKWAgc3RlcC4KLSogRml4ZWQgYERvdE5ldFRyYW5zbGF0b3JgIGJ1Z3Mgd2hlcmUgdHJhbnNsYXRpb25zIHByb2R1Y2VkIEdyZW1saW4gdGhhdCBmYWlsZWQgZHVlIHRvIGFtYmlndW91cyBzdGVwIGNhbGxzIHRvIGBoYXMoKWAuCi0qIEZpeGVkIGJ1ZyB3aGVyZSBgUmVwZWF0VW5yb2xsU3RyYXRlZ3lgLCBgSW5saW5lRmlsdGVyU3RyYXRlZ3lgIGFuZCBgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneWAgd2VyZSBhbGwgYmVpbmcgYXBwbGllZCBtb3JlIHRoYW4gbmVjZXNzYXJ5LgotKiBNb2RpZmllZCBncmFtbWFyIHRvIGFjY2VwdCB0aGUgYGRhdGV0aW1lKClgIGZ1bmN0aW9uIHNvIHRoYXQgR3JlbWxpbiBzY3JpcHRzIGhhdmUgYSB3YXkgdG8gbmF0aXZlbHkgY29uc3RydWN0IGEgYERhdGVgLgotKiBFbnN1cmVkIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBpcyBhcHBsaWVkIGFmdGVyIGBJbmxpbmVGaWx0ZXJTdHJhdGVneWAgd2hpY2ggcHJldmVudHMgYW4gZXJyb3IgaW4gdHJhdmVyc2VyIG1hcHBpbmcgaW4gY2VydGFpbiBjb25kaXRpb25zLgotKiBEZXByZWNhdGVkIGBKc29uQnVpbGRlcmAgc2VyaWFsaXphdGlvbiBmb3IgR3JhcGhTT04gYW5kIEdyeW8uCi0qIEFkZGVkIGBQcm9kdWN0aXZlQnlTdHJhdGVneWAgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IG9mIGBieSgpYCBtb2R1bGF0b3IgYmVoYXZpb3JzIHdoZW4gY2hpbGQgdHJhdmVyc2FsIGFyZ3VtZW50cyBjb250YWluZWQgbm8gZWxlbWVudHMuCi0qIENoYW5nZWQgZHJpdmVycyB0byBvbmNlIGFnYWluIHNlbmQgdGhlIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBhbmQgcmVtb3ZlZCAiY2xvc2UiIG1lc3NhZ2UgZm9yIHNlc3Npb25zLgotKiBNb2RpZmllZCBgZm9sZCgpYCB0byBtZXJnZSBgTWFwYCBpbnN0YW5jZXMgd2l0aCBgYWRkQWxsYC4KLSogQWxsb3dlZCBgbnVsbGAgc3RyaW5nIHZhbHVlcyBpbiB0aGUgR3JlbWxpbiBncmFtbWFyLgotKiBGaXhlZCBzdXBwb3J0IGZvciBgU2VlZFN0cmF0ZWd5YCBpbiB0aGUgR3JlbWxpbiBHcmFtbWFyLgotKiBGaXhlZCBidWcgaW4gYFRyYW5zbGF0b3JgIG9mIGBncmVtbGluLWphdmFzY3JpcHRgIGFyb3VuZCBhcnJheSB0cmFuc2xhdGlvbi4KLSogRml4ZWQgYnVncyBpbiBgUHl0aG9uVHJhbnNsYXRvcmAsIGBKYXZhc2NyaXB0VHJhbnNsYXRvcmAgYW5kIGBEb3ROZXRUcmFuc2xhdG9yYCB3aGVuIHRyYW5zbGF0aW5nIGBUcmF2ZXJzYWxTdHJhdGVneWAgb2JqZWN0cyB0byBKYXZhc2NyaXB0LgotKiBQcmV2ZW50ZWQgZXhjZXB0aW9uIHdpdGggYGhhc0xhYmVsKG51bGwpYCBhbmQgYGhhc0tleShudWxsKWAgYW5kIGluc3RlYWQgZmlsdGVyIGF3YXkgdHJhdmVyc2VycyBhcyB0aGVzZSBzdHJ1Y3R1cmFsIGNvbXBvbmVudHMgY2FuJ3QgZXZlciBiZSBudWxsLgotKiBJbXByb3ZlZCBoYW5kbGluZyBvZiBgbnVsbGAgd2hlbiBwYXNzZWQgdG8gYFBgIHByZWRpY2F0ZXMuCi0qIEhhbmRsZWQgYG51bGxgIGZvciBtYXRoZW1hdGljYWwgcmVkdWNpbmcgb3BlcmF0aW9ucyBvZiBgc3VtKClgLCBgbWVhbigpYCwgYG1heCgpYCBhbmQgYG1pbigpYC4KLSogQWxsb3dlZCBgbnVsbGAgdmFsdWVzIGluIGBNZW1vcnlgIGZvciBgR3JhcGhDb21wdXRlcmAuCi0qIEFsbG93ZWQgYG51bGxgIGFzc2lnbm1lbnQgaW4gYHdpdGhTaWRlRWZmZWN0KClgLgotKiBBbGxvd2VkIGxhYmVsbGluZyBvZiBzdGVwcyB0aGF0IGVtaXQgYSB0cmF2ZXJzZXIgY2FycnlpbmcgYG51bGxgLgotKiBGaXhlZCBidWcgaW4gZmlsdGVyaW5nIGZvciBgbnVsbGAgcHJvcGVydHkga2V5IGFyZ3VtZW50cyB0byBgdmFsdWVNYXAoKWAsIGBlbGVtZW50TWFwKClgLCBgcHJvcGVydGllcygpYCBhbmQgYHZhbHVlcygpYC4KLSogTW9kaWZpZWQgZ3JhbW1hciB0byBhbGxvdyBhIGNhbGwgdG8gYHdpdGhpbigpYCBhbmQgYHdpdGhvdXQoKWAgd2l0aCBubyBhcmd1bWVudHMuCi0qIEZpeGVkIHByb2JsZW1zIHdpdGggYGluamVjdChudWxsKWAgdmFyaWF0aW9ucyB3aGVyZSBgbnVsbGAgd2FzIHRoZSBvbmx5IHZhbHVlIGJlaW5nIHN1Ym1pdHRlZC4KLSogRml4ZWQgcHJvYmxlbSB3aXRoIGBHcm9vdnlUcmFuc2xhdG9yYCBhbmQgYGluamVjdChudWxsLG51bGwpYCB3aGljaCBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyB0aGUgR3Jvb3Z5IEpESyBleHRlbnNpb24gYGluamVjdChPYmplY3QsQ2xvc3VyZSlgLgotKiBGaXhlZCBlcnJvciB3aGVyZSBjZXJ0YWluIHZhcmlhbnRzIG9mIGBpbmplY3QoKWAgd2l0aCBgbnVsbGAgbWlnaHQgbm90IHByb3Blcmx5IGNvbnN0cnVjdCBhIHRyYXZlcnNhbCBpbiAuTkVULgotKiBQcmV2ZW50ZWQgZXhjZXB0aW9uIHdpdGggIGBoYXNWYWx1ZShudWxsKWAgYW5kIGFsbG93ZWQgZmlsdGVyaW5nIGFzIGV4cGVjdGVkLgotKiBSZWZpbmVkIGBEb3ROZXRUcmFuc2xhdG9yYCB0byBiZSBtb3JlIGV4cGxpY2l0IHdpdGggYG51bGxgIGFyZ3VtZW50cyB0byBlbnN1cmUgdGhhdCB0aGUgcmlnaHQgb3ZlcmxvYWRzIGFyZSBjYWxsZWQuCi0qIENyZWF0ZWQgYEdyZW1saW5QYXJzZXJgIHRvIGNvbnN0cnVjdCBgVHJhdmVyc2FsYCBvYmplY3RzIGZyb20gYGdyZW1saW4tbGFuZ3VhZ2VgLgotKiBBZGRlZCBgR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmVgIGFzIGEgYEdyZW1saW5TY3JpcHRFbmdpbmVgIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcnMgdGhlIGdyYW1tYXIgYW5kIGBKYXZhVHJhbnNsYXRvcmAgdG8gZXZhbHVhdGUgR3JlbWxpbi4KLSogQWRkZWQgZ2V0dGVyIG1ldGhvZCBmb3IgYGJ5cGFzc1RyYXZlcnNhbGAgaW4gYEFic3RyYWN0TGFtYmRhVHJhdmVyc2FsYC4KLSogQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIEdyYXBoQmluYXJ5IHR5cGVzIGluIC5ORVQuCi0qIFJlbW92ZWQgc29tZSB1bm5lY2Vzc2FyeSBleGNlcHRpb24gd3JhcHBpbmcgYXJvdW5kIGBncmVtbGluLWRyaXZlcmAgZXJyb3JzIG5vdyBwcm9kdWNpbmcgYSBtb3JlIGltbWVkaWF0ZSB2aWV3IG9mIHRoZSBhY3R1YWwgZXJyb3IgY2F1c2UuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yNTY5IFJlY29ubmVjdCB0byBzZXJ2ZXIgaWYgSmF2YSBkcml2ZXIgZmFpbHMgdG8gaW5pdGlhbGl6ZQotKiBUSU5LRVJQT1AtMjU4NSBUcmF2ZXJzYWwgZmFpbGVkIGZvciBkaWZmZXJlbnQgc3RyYXRlZ2llcyBvcmRlcgotKiBUSU5LRVJQT1AtMjU4OSBYTUwgRXh0ZXJuYWwgRW50aXR5IChYWEUpIHZ1bG5lcmFiaWxpdHkKLSogVElOS0VSUE9QLTI1OTcgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hpbGUgaW5pdGlhbGl6aW5nIGNvbm5lY3Rpb24gcG9vbAotKiBUSU5LRVJQT1AtMjU5OCB3aXRoaW4obnVsbCkgTlBFCi0qIFRJTktFUlBPUC0yNjAzIFRpbmtlckdyYXBoIHNvbWV0aW1lcyBjb3VsZCBub3QgcXVlcnkgZmxvYXQgdmFsdWVzLgotKiBUSU5LRVJQT1AtMjYwOSBIVFRQIHJldHVybnMgc2VyaWFsaXphdGlvbiBleGNlcHRpb25zIGZvciB0aGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UKLSogVElOS0VSUE9QLTI2MjEgdG9TdHJpbmcgZm9yIHRyYXZlcnNhbHMgc3VjaCBhcyB3aXRoaW4gd2l0aCBlbXB0eSBhcnJheSByZXR1cm5zIGVtcHR5IHN0cmluZyBhcyBhcmd1bWVudCBpbnN0ZWFkIG9mIGJyYWNrZXRzCi0qIFRJTktFUlBPUC0yNjI2IFJhbmdlR2xvYmFsU3RlcCBjbG9zZXMgdHJhdmVyc2FsIHByZW1hdHVyZWx5Ci0qIFRJTktFUlBPUC0yNjQ5IFVuYWJsZSB0byB0cmFuc2xhdGUgZ3JlbWxpbiBxdWVyeSB0byBqYXZhCi0qIFRJTktFUlBPUC0yNjU4IFRyYW5zbGF0b3IgaW4gZ3JlbWxpbi1qYXZhc2NyaXB0IGhhcyB0cm91YmxlIHdpdGggYXJyYXkgYXJndW1lbnRzCi0qIFRJTktFUlBPUC0yNjYyIFVuY2xvc2VkIGNsaWVudCBzZXNzaW9uIGFuZCBzdGFja3RyYWNlIHBvcHMgdXAgd2hlbiBjbGVhbnVwIGlzIG1pc3NlZAotKiBUSU5LRVJQT1AtMjY3MCBKYXZhRG9jcyBkbyBub3QgYnVpbGQgd2hlbiB1c2luZyBKREsgMTEKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjUwNCBJbnRlcm1pdHRlbnRseSBmYWlsaW5nIHNlcnZlci9kcml2ZXIgaW50ZWdyYXRpb24gdGVzdHMKLSogVElOS0VSUE9QLTI1NTUgU3VwcG9ydCBmb3IgcmVtb3RlIHRyYW5zYWN0aW9ucyBpbiBQeXRob24KLSogVElOS0VSUE9QLTI1NTYgU3VwcG9ydCByZW1vdGUgdHJhbnNhY3Rpb25zIGluIC5ORVQKLSogVElOS0VSUE9QLTI1NzAgU3VwcG9ydCBjdXN0b20gdHlwZSBpbiBHcmFwaEJpbmFyeSBmb3IgLk5FVAotKiBUSU5LRVJQT1AtMjU4MiBDb25zdHJ1Y3QgdHJhdmVyc2FscyBmcm9tIGdyZW1saW4tbGFuZ3VhZ2UKLSogVElOS0VSUE9QLTI1ODMgTWFrZSBncmVtbGluLWdyb292eSBwcm9jZXNzaW5nIG9wdGlvbmFsIGluIEdyZW1saW4gU2VydmVyCi0qIFRJTktFUlBPUC0yNTkxIEFkbWluaXN0cmF0aXZlIGFkanVzdG1lbnRzIHRvIGdyZW1saW50IHNpdGUKLSogVElOS0VSUE9QLTI1OTIgQWxpZ24gdGhlIHN0eWxlIGd1aWRlcwotKiBUSU5LRVJQT1AtMjU5NiBkYXRldGltZSBmdW5jdGlvbgotKiBUSU5LRVJQT1AtMjYwNSBGdXJ0aGVyIGVuZm9yY2UgYW5kIHJlZmluZSBudWxsIHNlbWFudGljcwotKiBUSU5LRVJQT1AtMjYxNSBFeHBhbmQgdGVzdGluZyBvZiBwYXRoKCkgd2l0aCBudWxsIHZhbHVlcwotKiBUSU5LRVJQT1AtMjYxNiBQcm92aWRlIGJldHRlciBleGNlcHRpb25zIHdpdGggU1NMIHJlbGF0ZWQgZmFpbHVyZXMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNjIwIENsZWFuIHVwIE51bGxQb2ludGVyRXhjZXB0aW9ucyByZWxhdGVkIHRvIG51bGwgYXJndW1lbnRzIG9uIHByb3BlcnR5IHJlbGF0ZWQgc3RlcHMKLSogVElOS0VSUE9QLTI2MzAgQ2xhcmlmeSB0aGF0IGEgc2VydmVyIGNhbm5vdCBzdXBwb3J0IEdyYXBoc29uMS4wIG92ZXIgSFRUUAotKiBUSU5LRVJQT1AtMjYzMiBOZXR0eSA0LjEuNjEgZmxhZ2dlZCB3aXRoIHR3byBoaWdoIHNldmVyaXR5IHNlY3VyaXR5IHZpb2xhdGlvbnMKLSogVElOS0VSUE9QLTI2MzcgRW5oYW5jZSBsb2dnaW5nIGluIHRoZSBQeXRob24KLSogVElOS0VSUE9QLTI2NDYgTWFrZSAuTkVUIFN0cmVhbUV4dGVuc2lvbnMgcHVibGljIGZvciBHcmFwaEJpbmFyeQotKiBUSU5LRVJQT1AtMjY1NiBQcm92aWRlIGEgbm8gc3ludGF4IHN1Z2FyIHRyYW5zbGF0b3IgZm9yIHB5dGhvbgotKiBUSU5LRVJQT1AtMjY2MCBCcmluZyBiYWNrIGNsb3NlIG1lc3NhZ2UgZm9yIGRyaXZlcnMKLSogVElOS0VSUE9QLTI2NjYgQ3JlYXRlIGFuIGFub255bWl6aW5nIFRyYW5zbGF0b3IgZm9yIGxvZ2dpbmcgdHJhdmVyc2FscyB3aXRob3V0IHVzZXIgZGF0YQotKiBUSU5LRVJQT1AtMjY2NyBBbGxvdyBmb2xkKCkgd2l0aCBhZGRBbGwgdG8gd29yayBvbiBNYXAKLSogVElOS0VSUE9QLTI2NjggVXBkYXRpbmcgYWlvaHR0cCByZXF1aXJlbWVudHMgYXQgZ2VybWluLXB5dGhvbiBkdWUgdG8gdnVsbmVyYWJpbGl0eQotKiBUSU5LRVJQT1AtMjY2OSBOZXR0eSA0LjEuNjEgZmxhZ2dlZCB3aXRoIG1lZGl1bSBzZXZlcml0eSBzZWN1cml0eSB2aW9sYXRpb25zCi0qIFRJTktFUlBPUC0yNjcxIEFkZCB0eCgpIHN1cHBvcnQgdG8gZ3JhbW1hcgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS0yLCAzLjUuMiBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNS0xXV0KID09PSBUaW5rZXJQb3AgMy41LjEgKFJlbGVhc2UgRGF0ZTogSnVseSAxOSwgMjAyMSkKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTQtMTIsIDMuNC4xMj4+LgotCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGBnLnR4KClgIGluIEphdmFzY3JpcHQuCi0qIEZpeGVkIGJ1ZyBpbiBKYXZhc2NyaXB0IGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB2YWxpZGF0aW5nIGFub255bW91cyB0cmF2ZXJzYWwgc3Bhd25zLgotKiBDaGFuZ2VkIGNsb3NlIG9mIFB5dGhvbiBhbmQgSmF2YXNjcmlwdCBjb25uZWN0aW9ucyB0byBubyBsb25nZXIgc2VuZCBhICJjbG9zZSBtZXNzYWdlIiBhcyB0aGUgc2VydmVyIG5vIGxvbmdlciBhY2tub3dsZWRnZXMgaXQgYXMgb2YgMy41LjAuCi0qIEZpeGVkIGJ1ZyB3aGVyZSB0aGUgYEdyYXBoYCBpbnN0YW5jZSB3YXMgbm90IGJlaW5nIGFzc2lnbmVkIHRvIGNoaWxkIHRyYXZlcnNhbHMuCi0qIFJlbW92ZWQgc2VuZGluZyBvZiBkZXByZWNhdGVkIHNlc3Npb24gY2xvc2UgbWVzc2FnZSBmcm9tIEdyZW1saW4uTmV0IGRyaXZlci4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTIzNTggUG90ZW50aWFsIGNvbm5lY3Rpb24gbGVhayBvbiBjbGllbnQgZGlzcG9zaW5nCi0qIFRJTktFUlBPUC0yNTU0IEV4dHJhY3Rpbmcgc3RlcCBtZXRyaWNzIGZyb20gUHJvZmlsZVN0ZXAgdGhyb3dzIE5QRSBpZiB0aGUgc3RlcCB3YXMgbm90IHRyaWdnZXJlZAotKiBUSU5LRVJQT1AtMjU2NSBHcmFwaE1MV3JpdGVyIGRvZXMgbm90IGNoZWNrIHZlcnRleExhYmVsS2V5IGNvbmZsaWN0Ci0qIFRJTktFUlBPUC0yNTY2IEluY29tcGxldGUgZXJyb3IgbWVzc2FnZSBpbiBieXRlY29kZSBzdGVwIGdlbmVyYXRpb24KLSogVElOS0VSUE9QLTI1NjggR3JhcGggaW5zdGFuY2Ugbm90IHNldCBmb3IgY2hpbGQgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjU3OCBTZXQgYXJndW1lbnRzIHRvIFAgd2l0aGluL3dpdGhvdXQgYXJlIHdyYXBwZWQgaW4gTGlzdAotKiBUSU5LRVJQT1AtMjU3OSBFdmVudFN0cmF0ZWd5IGRvZXNuJ3Qgd29yayB3aXRoIGFub255bW91cyB0cmF2ZXJzYWwKLSogVElOS0VSUE9QLTI1ODAgVXBkYXRlIHRoZSBjdXN0b20gRFNMIGRvY3VtZW50YXRpb24KLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjU0OCBBZGQgZ2V0dGVyIGZvciBpbmRleGVyIHVzZWQgaW4gSW5kZXhTdGVwCi0qIFRJTktFUlBPUC0yNTUxIFNldHVwIHNjcmlwdHMgdG8gcHVibGlzaCBHcmVtaW50IHRvIG5wbQotKiBUSU5LRVJQT1AtMjU1NyBTdXBwb3J0IHJlbW90ZSB0cmFuc2FjdGlvbnMgaW4gSmF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjU1OSBTdG9wIHNlbmRpbmcgdGhlIGNsb3NlIG1lc3NhZ2UgZm9yIC5ORVQKLSogVElOS0VSUE9QLTI1NjAgU3RvcCBzZW5kaW5nIGNsb3NlIG1lc3NhZ2UgZm9yIFB5dGhvbgotKiBUSU5LRVJQT1AtMjU2MSBTdG9wIHNlbmRpbmcgY2xvc2UgbWVzc2FnZSBpbiBKYXZhc2NyaXB0Ci0qIFRJTktFUlBPUC0yNTc2IFNldHVwIGF1dG9tYXRpYyB1cGRhdGVzIHZpYSBEZXBlbmRhYm90IGZvciBHcmVtbGluLk5FVAotKiBUSU5LRVJQT1AtMjU3NyBSZW1vdmUgdW51c2VkIHRlc3QgY292ZXJhZ2UgZGVwZW5kZW5jaWVzIGZyb20gR3JlbWxpbi5ORVQKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy41LnguYXNjaWlkb2MjcmVsZWFzZS0zLTUtMSwgMy41LjEgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTUtMF1dCiA9PT0gVGlua2VyUG9wIDMuNS4wIChSZWxlYXNlIERhdGU6IE1heSAzLCAyMDIxKQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtNC0xMSwgMy40LjExPj4uCi0KLSogQ2hhbmdlZCB0cmFuc3BvcnQgaW1wbGVtZW50YXRpb24gdG8gdXNlIEFJT0hUVFAgaW5zdGVhZCBvZiBUb3JuYWRvIGZvciBncmVtbGluLXB5dGhvbi4KLSogQWRkZWQgbWF4X2NvbnRlbnRfbGVuZ3RoIGFuZCB1bml0IHRlc3QgZm9yIGl0IGluIGdyZW1saW4tcHl0aG9uLgotKiBSZW1vdmVkIGNvbXByZXNzaW9uX29wdGlvbiBzdXBwb3J0IGZvciB0cmFuc3BvcnQgaW4gZ3JlbWxpbi1weXRob24uCi0qIEZpeGVkIGV2ZW50IGxvb3AgaXNzdWVzIGFuZCBhZGRlZCB1bml0IHRlc3QgZm9yIGl0IGluIGdyZW1saW4tcHl0aG9uLgotKiBGaXhlZCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIG11bHRpdGhyZWFkaW5nIGlzc3VlcyBhbmQgYWRkZWQgdW5pdCB0ZXN0IGZvciBpdCBpbiBncmVtbGluLXB5dGhvbi4KLSogRml4ZWQgaGVhcnRiZWF0IHRpbWVvdXQgaXNzdWVzIGFuZCB0ZXN0ZWQgd2l0aCBsb2NhbCBzZXJ2ZXIgbWFudWFsbHkgZm9yIGdyZW1saW4tcHl0aG9uLgotKiBGaXhlZCBidWlsZCBlcnJvcnMgZW1pdHRlZCBmb3IgZ3JlbWxpbi1weXRob24gKGFzeW5jaW8gdGFzayBkZXN0cm95ZWQgYnV0IGlzIHBlbmRpbmcgZXJyb3IpLgotKiBBZGRlZCBgZ3JlbWxpbi1sYW5ndWFnZWAgbW9kdWxlLgotKiBBbGxvd2VkIHRoZSBwb3NzaWJpbGl0eSBmb3IgdGhlIHByb3BhZ2F0aW9uIG9mIGBudWxsYCBhcyBhIGBUcmF2ZXJzZXJgIGluIEdyZW1saW4uCi0qIEFkZGVkIGEgZnVsbHkgc2hhZGVkIHZlcnNpb24gb2YgYGdyZW1saW4tZHJpdmVyYC4KLSogRXhwb3NlZCB3ZWJzb2NrZXQgY29ubmVjdGlvbiBzdGF0dXMgaW4gSmF2YVNjcmlwdCBkcml2ZXIuCi0qIEZpeGVkIGEgYnVnIHdoZXJlIHNwYXJrLWdyZW1saW4gd2FzIG5vdCByZS1hdHRhY2hpbmcgcHJvcGVydGllcyB3aGVuIHVzaW5nIGBkZWR1cCgpYC4KLSogRml4ZWQgYSBidWcgaW4gYFdzQW5kSHR0cENoYW5uZWxpemVyYCBwaXBlbGluZSBjb25maWd1cmF0aW9uIHdoZXJlIGZhaWxlZCBvYmplY3QgYWdncmVnYXRpb24gY291bGQgbm90IHdyaXRlIGJhY2sgSFRUUCByZXNwb25zZXMuCi0qIEVuc3VyZWQgYmV0dGVyIGNvbnNpc3RlbmN5IG9mIHRoZSB1c2Ugb2YgYG51bGxgIGFzIGFyZ3VtZW50cyB0byBtdXRhdGlvbiBzdGVwcy4KLSogQWRkZWQgYSBgUmVzcG9uc2VTdGF0dXNDb2RlYCB0byBpbmRpY2F0ZSB0aGF0IGEgY2xpZW50IHNob3VsZCByZXRyeSBpdHMgcmVxdWVzdC4KLSogQWRkZWQgYFRlbXBvcmFyeUV4Y2VwdGlvbmAgaW50ZXJmYWNlIHRvIGluZGljYXRlIHRoYXQgYSB0cmFuc2FjdGlvbiBjYW4gYmUgcmV0cmllZC4KLSogUHJldmVudGVkIGBUcmF2ZXJzYWxTdHJhdGVneWAgaW5zdGFuY2VzIGZyb20gYmVpbmcgYWRkZWQgbW9yZSB0aGFuIG9uY2UsIHdoZXJlIHRoZSBuZXcgaW5zdGFuY2UgcmVwbGFjZXMgdGhlIG9sZC4KLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBmb3IgYGFkZEUoKWAgd2hlbiB0aGUgYGZyb20oKWAgb3IgYHRvKClgIGRvZXMgbm90IHJlc29sdmUgdG8gYSBgVmVydGV4YC4KLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBmb3IgYGFkZEUoKWAgd2hlbiBjYXJkaW5hbGl0eSBpcyBzcGVjaWZpZWQgb24gYHByb3BlcnR5KClgIGFzc2lnbm1lbnRzLgotKiBBbGxvd2VkIGBwcm9wZXJ0eShULmxhYmVsLE9iamVjdClgIHRvIGJlIHVzZWQgaWYgbm8gdmFsdWUgd2FzIHN1cHBsaWVkIHRvIGBhZGRWKFN0cmluZylgLgotKiBEcm9wcGVkIHN1cHBvcnQgZm9yIC5ORVQgU3RhbmRhcmQgMS4zIGluIEdyZW1saW4uTmV0LiBPbmx5IC5ORVQgU3RhbmRhcmQgMi4wIGlzIHN1cHBvcnRlZCBzdGFydGluZyB3aXRoIHRoaXMgdmVyc2lvbi4KLSogQWRkZWQgR3JhcGhCaW5hcnkgc3VwcG9ydCBmb3IgLk5FVC4KLSogQWRkZWQgYFVuaWZpZWRDaGFubmVsaXplcmAgd2hpY2ggZXhwb3NlcyBIVFRQIGFuZCBXZWJzb2NrZXRzIGNvbm5lY3Rpb25zIGFuZCBwcm9jZXNzZXMgYm90aCBzZXNzaW9ubGVzcyBhbmQgaW4tc2Vzc2lvbiByZXF1ZXN0cyB3aXRoIHRoZSBzYW1lIGBncmVtbGluUG9vbGAuCi0qIEJvdW5kZWQgdGhlIGBncmVtbGluUG9vbGAgaW4gR3JlbWxpbiBTZXJ2ZXIgdG8gZW5mb3JjZSByYXRlIGxpbWl0aW5nIHdoaWNoIHdpbGwgdGhlbiBwcm9kdWNlIGEgYFRPT19NQU5ZX1JFUVVFU1RTYCByZXNwb25zZSBzdGF0dXMgY29kZS4KLSogU3dpdGNoZWQgZnJvbSBgTmV3dG9uc29mdC5Kc29uYCB0byBgU3lzdGVtLlRleHQuSnNvbmAgYXMgdGhlIEpTT04gbGlicmFyeSBmb3IgR3JlbWxpbi5OZXQuCi0qIEFsbG93ZWQgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gYENsaWVudC5zdWJtaXQoKWAgaW4gSmF2YXNjcmlwdCBkcml2ZXIgdG8gZW5hYmxlIHNldHRpbmcgb2YgcGFyYW1ldGVycyBsaWtlIGBzY3JpcHRFdmFsdWF0aW9uVGltZW91dGAuCi0qIEdyZW1saW4uTmV0IGRyaXZlciBubyBsb25nZXIgc3VwcG9ydHMgc2tpcHBpbmcgZGVzZXJpYWxpemF0aW9uIGJ5IGRlZmF1bHQuIFVzZXJzIGNhbiBob3dldmVyIGNyZWF0ZSB0aGVpciBvd24gYElNZXNzYWdlU2VyaWFsaXplcmAgaWYgdGhleSBuZWVkIHRoaXMgZnVuY3Rpb25hbGl0eS4KLSogU3VwcG9ydGVkIGRlc2VyaWFsaXphdGlvbiBvZiBgZGljdGAgYW5kIGBsaXN0YCBhcyBhIGtleSBpbiBhIGBkaWN0YCBmb3IgUHl0aG9uLgotKiBDaGFuZ2VkIHRoZSBhbGlhc2VkIGBDbGllbnRgIHRvIHByb3h5IGBjbG9zZSgpYCBtZXRob2RzIHRvIGl0cyB1bmRlcmx5aW5nIGNsaWVudC4KLSogQWRkZWQgc3VwcG9ydCBmb3IgcmVtb3RlIGBnLnR4KClgIHVzYWdlLgotKiBBZGRlZCBzdXBwb3J0IGZvciBieXRlY29kZS1iYXNlZCBzZXNzaW9ucy4KLSogQWRkZWQgYSBgR3JhcGguRmVhdHVyZWAgZm9yIGBzdXBwb3J0c051bGxQcm9wZXJ0eVZhbHVlc2AuCi0qIE1vZGlmaWVkIGBUb2tlblRyYXZlcnNhbGAgdG8gc3VwcG9ydCBgUHJvcGVydHlgIHRodXMgYGJ5KGtleSlgIGFuZCBgYnkodmFsdWUpYCBjYW4gbm93IGFwcGx5IHRvIGBFZGdlYCBhbmQgbWV0YS1wcm9wZXJ0aWVzLgotKiBBZGRlZCBgU2VlZFN0cmF0ZWd5YCB0byBhbGxvdyBkZXRlcm1pbmlzdGljIGJlaGF2aW9yIGZvciBgY29pbigpYCwgYHNhbXBsZSgpYCBhbmQgYE9yZGVyLnNodWZmbGVgLgotKiBBZGRlZCBgR3JvdXBpbmdgIHN0ZXAgaW50ZXJmYWNlLgotKiBBZGRlZCBgVHJhdmVyc2FsUGFyZW50LnJlcGxhY2VUcmF2ZXJzYWwoKWAgd2hpY2ggY2FuIHJlcGxhY2UgYSBkaXJlY3QgY2hpbGQgdHJhdmVyc2FsLgotKiBBZGRlZCBgQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneWAgd2hpY2ggcmVwbGFjZXMgY2VydGFpbiBzdGFuZGFyZCB0cmF2ZXJzYWxzIHcvIG9wdGltaXplZCB0cmF2ZXJzYWxzIChlLmcuIGBUb2tlblRyYXZlcnNhbGApLgotKiBJbXByb3ZlZCBgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lgIGJ5IGFjY291bnRpbmcgZm9yIGBFbmRTdGVwYCBzaXR1YXRpb25zLgotKiBBZGRlZCBgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lgIHRvIHRoZSBzdGFuZGFyZCBsaXN0IG9mIGBUcmF2ZXJzYWxTdHJhdGVnaWVzYC4KLSogTW9kaWZpZWQgYFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lgIHRvIGxlYXZlIGxhYmVscyBtb3JlIG9mdGVuIHdpdGggYG1hdGNoKClgIGNhc2VzIHRvIHJldHVybiBtb3JlIGNvbnNpc3RlbnQgcmVzdWx0cy4KLSogUmVmYWN0b3JlZCBgTWFwU3RlcGAgdG8gbW92ZSBpdHMgbG9naWMgdG8gYFNjYWxhck1hcFN0ZXBgIHNvIHRoYXQgdGhlIG9sZCBiZWhhdmlvciBjb3VsZCBiZSBwcmVzZXJ2ZWQgd2hpbGUgYWxsb3cgb3RoZXIgaW1wbGVtZW50YXRpb25zIHRvIGhhdmUgbW9yZSBmbGV4aWJpbGl0eS4KLSogTW9kaWZpZWQgVGlua2VyR3JhcGggdG8gc3VwcG9ydCBgbnVsbGAgcHJvcGVydHkgdmFsdWVzIGFuZCBjYW4gYmUgY29uZmlndXJlZCB0byBkaXNhYmxlIHRoYXQgZmVhdHVyZS4KLSogTW9kaWZpZWQgYG51bGxgIGhhbmRsaW5nIGluIG11dGF0aW9ucyB0byBiZSBjb25zaXN0ZW50IGZvciBhIG5ldyBgVmVydGV4YCBhcyB3ZWxsIGFzIHVwZGF0ZSB0byBhbiBleGlzdGluZyBvbmUuCi0qIEVuZm9yY2VkIHVzZSBvZiBhbm9ueW1vdXMgY2hpbGQgdHJhdmVyc2Fscy4KLSogUmVtb3ZlZCBzdXBwb3J0IGZvciBQeXRob24gMi54IGluIGdyZW1saW5weXRob24uCi0qIFVwZ3JhZGVkIHRvIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24yLgotKiBSZW5hbWVkIGBTdG9yZVN0ZXBgIHRvIGBBZ2dyZWdhdGVMb2NhbFN0ZXBgLgotKiBSZW5hbWVkIGBBZ2dyZWdhdGVTdGVwYCB0byBgQWdncmVnYXRlR2xvYmFsU3RlcGAuCi0qIFJlbmFtZWQgYFNFUlZFUl9FUlJPUl9TQ1JJUFRfRVZBTFVBVElPTmAgdG8gYFNFUlZFUl9FUlJPUl9FVkFMVUFUSU9OYCBnaXZlbiB0aGF0IHRoaXMgcmVzcG9uc2UgY29kZSBhcHBsaWVzIHRvIHJlbW90ZSB0cmF2ZXJzYWxzIGFzIHdlbGwgYXMgc2NyaXB0cy4KLSogUmVmYWN0b3JlZCBgVHJhdmVyc2FsU3RyYXRlZ2llc2AgdG8gaW1wbGVtZW50IGBJdGVyYWJsZWAuCi0qIFJlZmFjdG9yZWQgYFRyYXZlcnNhbGAgc2VtYW50aWNzIHRvIGFsd2F5cyBleHBlY3QgYEVtcHR5U3RlcGAgYXMgYSBwYXJlbnQgaWYgaXQgaXMgbWVhbnQgdG8gYmUgdGhlIHJvb3QgYFRyYXZlcnNhbGAuCi0qIENvbmZpZ3VyZWQgR3JhcGhCaW5hcnkgYXMgdGhlIGRlZmF1bHQgYmluYXJ5IHNlcmlhbGl6YXRpb24gZm9ybWF0IGZvciB0aGUgSmF2YSBEcml2ZXIuCi0qIENvbmZpZ3VyZWQgR3JhcGhTT04gMy4wIGFzIHRoZSBkZWZhdWx0IHRleHQgc2VyaWFsaXphdGlvbiBmb3JtYXQgd2hlbiBubyBzZXJpYWxpemVyIGNhbiBiZSBkZXRlcm1pbmVkLgotKiBDb25maWd1cmVkIEdyYXBoU09OIDMuMCBhcyB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgYEdyYXBoU09OTWFwcGVyYC4KLSogQWRkZWQgYEphdmFzY3JpcHRUcmFuc2xhdG9yYCBmb3IgSmF2YS4KLSogQWRkZWQgYERvdE5ldFRyYW5zbGF0b3JgIGZvciBKYXZhLgotKiBBZGRlZCBHcm9vdnkgYFRyYW5zbGF0b3JgIGZvciBQeXRob24uCi0qIEZpeGVkIGJ1ZyBpbiBgUHl0aG9uVHJhbnNsYXRvcmAgZm9yIHByb2Nlc3NpbmcgYFRyYXZlcnNhbFN0cmF0ZWd5YCBpbnN0YW5jZXMgaW4gR3JhcGhCaW5hcnkuCi0qIEZpeGVkIGJ1ZyBpbiBieXRlY29kZSBgQmluZGluZ3NgIHdoZXJlIGNhbGxpbmcgYG9mKClgIHByaW9yIHRvIGNhbGxpbmcgYSBjaGlsZCB0cmF2ZXJzYWwgaW4gdGhlIHNhbWUgcGFyZW50IHdvdWxkIGNhdXNlIHRoZSBpbml0aWFsIGJpbmRpbmcgdG8gYmUgbG9zdC4KLSogTWlncmF0ZWQgZnJvbSBUb3JuYWRvIHRvIEFJT0hUVFAgZm9yIGdyZW1saW5weXRob24uCi0qIEJ1bXBlZCB0byBOZW80aiAzLjQuMTEuCi0qIEJ1bXBlZCB0byBTcGFyayAzLjAuMC4KLSogQnVtcGVkIHRvIEphY2tzb24gMi4xMS54LgotKiBTdXBwb3J0ZWQgYnVpbGQgZm9yIEphdmEgMTEuCi0qIEFkZGVkIGBNZXNzYWdlU2VyaWFsaXplci5nZXRNYXBwZXIoKWAgdG8gcmV0dXJuIHRoZSB1bmRlcmx5aW5nIG9iamVjdCB0aGF0IGhhbmRsZXMgc2VyaWFsaXphdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLgotKiBBZGRlZCBhIHBhcmFtZXRlcml6ZWQgYFR5cGVUcmFuc2xhdG9yYCBmb3IgdXNlIHdpdGggYEdyb292eVRyYW5zbGF0b3JgIHRoYXQgc2hvdWxkIHByb2R1Y2UgbW9yZSBjYWNoZSBoaXRzLgotKiBBZGRlZCBzdXBwb3J0IGZvciBgVGV4dFBgIGluIE5lbzRqIHVzaW5nIGl0cyBzdHJpbmcgc2VhcmNoIGZ1bmN0aW9ucy4KLSogQWRkZWQgYSBrZXJiZXJvcyBLREMgdG8gdGhlIGRvY2tlciBjb250YWluZXIgZm9yIHRlc3RpbmcgR0xWJ3MuCi0qIEFkZGVkIGtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIHRvIEdyZW1saW4tUHl0aG9uLgotKiBBZGRlZCBhdWRpdCBsb2dnaW5nIHRvIGJ5dGVjb2RlLWJhc2VkIHRyYXZlcnNhbHMuCi0qIENoYW5nZWQgYFRyYXZlcnNhbFN0cmF0ZWd5YCBhcHBsaWNhdGlvbiBtZXRob2RvbG9neSB0byBhcHBseSBlYWNoIHN0cmF0ZWd5IGluIHR1cm4gdG8gZWFjaCBsZXZlbCBvZiB0aGUgdHJhdmVyc2FsIGhpZXJhcmNoeSBzdGFydGluZyBmcm9tIHJvb3QgZG93biB0byBjaGlsZHJlbi4KLSogQWRkZWQgYSBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS4KLSogUHJldmVudGVkIG1vcmUgdGhhbiBvbmUgYENsaWVudGAgZnJvbSBjb25uZWN0aW5nIHRvIHRoZSBzYW1lIEdyZW1saW4gU2VydmVyIHNlc3Npb24uCi0qIENoYW5nZWQgdGhlIEdyb292eSB0byBhbiBvcHRpb25hbCBkZXBlbmRlbmN5IGluIGBncmVtbGluLWRyaXZlcmAuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGNvbmZpZ3VyaW5nIGFuIGBBdXRob3JpemVyYCBpbXBsZW1lbnRhdGlvbiB0byBHcmVtbGluIFNlcnZlciwgYWxsb3dpbmcgZm9yIGF1dGhvcml6YXRpb24gb2YgaW5kaXZpZHVhbCBncmVtbGluIHJlcXVlc3RzLgotKiBBZGRlZCBgZ3JlbWxpbnRgIG1vZHVsZSB0byBob3VzZSB0aGUgR3JlbWxpbiBxdWVyeSBmb3JtYXR0aW5nIEphdmFTY3JpcHQgbGlicmFyeSBwb3dlcmluZyBncmVtbGludC5jb20uCi0qIFJlbW92ZWQgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHNlc3Npb24gY2xvc2UgbWVzc2FnZSBpbiBHcmVtbGluIFNlcnZlciAtIHRoZSBtZXNzYWdlIGlzIGFjY2VwdGVkIGJ1dCBpZ25vcmVkIGlmIHNlbnQuCi0qIFJlbW92ZWQgYFByb3BlcnR5LkV4Y2VwdGlvbnMucHJvcGVydHlWYWx1ZUNhbk5vdEJlTnVsbGAgZXhjZXB0aW9uIHR5cGUgYXMgYG51bGxgIG5vdyBoYXMgbWVhbmluZyBpbiBHcmVtbGluLgotKiBSZW1vdmVkIHRoZSAiZXhwZXJpbWVudGFsIiBzdXBwb3J0IGZvciBtdWx0aS9tZXRhLXByb3BlcnRpZXMgaW4gTmVvNGouCi0qIFJlbW92ZWQgR3J5byBzZXJpYWxpemF0aW9uIGNvbmZpZ3VyYXRpb25zIGZyb20gR3JlbWxpbiBTZXJ2ZXIgc2FtcGxlIGNvbmZpZ3VyYXRpb25zIGFuZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBjdXN0b20ga2VlcC1hbGl2ZSBmdW5jdGlvbmFsaXR5IGluIHRoZSBKYXZhIGRyaXZlci4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEJ5dGVjb2RlVXRpbGAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBDbHVzdGVyLm1heFdhaXRGb3JTZXNzaW9uQ2xvc2VgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU3RyYXRlZ2llcy5hcHBseVN0cmF0ZWdpZXMoKWAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBzY3JpcHRFdmFsdWF0aW9uVGltZW91dGAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBOaW9DaGFubmVsaXplcmAgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgcmVtb3RlIHRyYXZlcnNhbCBzaWRlLWVmZmVjdHMgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBTZXJpYWxpemVycy5ERUZBVUxUX1JFU1VMVF9TRVJJQUxJWkVSYCBhbmQgYFNlcmlhbGl6ZXJzLkRFRkFVTFRfUkVRVUVTVF9TRVJJQUxJWkVSYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYGRlY3JgIGFuZCBgaW5jcmAgZnJvbSBgT3JkZXJgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU291cmNlLndpdGhSZW1vdGUoKWAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBSZXNwb25zZUhhbmRsZXJDb250ZXh0YCBpbmZyYXN0cnVjdHVyZS4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFZlcnRleFByb2dyYW1gIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIFNTTCBzZXR0aW5nczogYGtleUNlcnRDaGFpbkZpbGVgLCBga2V5RmlsZWAsIGBrZXlQYXNzd29yZGAgYW5kIGB0cnVzdENlcnRDaGFpbkZpbGVgIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgUHJvcGVydHlNYXBTdGVwYCBjb25zdHJ1Y3RvciBhbmQgYGlzSW5jbHVkZVRva2Vuc2AuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBTdGFyR3JhcGguYnVpbGRlcigpYCBhbmQgYFN0YXJHcmFwaC5CdWlsZGVyLmNyZWF0ZSgpYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEFic3RyYWN0T3BQcm9jZXNzb3IuZ2VuZXJhdGVNZXRhRGF0YShDaGFubmVsSGFuZGxlckNvbnRleHQsIFJlcXVlc3RNZXNzYWdlLCBSZXNwb25zZVN0YXR1c0NvZGUsIEl0ZXJhdG9yKWAKLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEJ1bGtEdW1wZXJWZXJ0ZXhQcm9ncmFtYCBhbmQgYEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtYC4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTE2MTkgVGlua2VyR3JhcGhDb21wdXRlciB3b3JrZXIgY291bnQgYWZmZWN0cyBPcHRpb25hbFN0ZXAgcXVlcnkgcmVzdWx0cwotKiBUSU5LRVJQT1AtMjEwNyBTcGFyayBmYWlscyB0byByZWF0dGFjaCBwcm9wZXJ0aWVzCi0qIFRJTktFUlBPUC0yMTU3IFNwYXJrU3RhckJhcnJpZXJJbnRlcmNlcHRvciBpbmplY3RzIChCeXRlKSAwCi0qIFRJTktFUlBPUC0yMTU5IEV2ZW50U3RyYXRlZ3kgZG9lc24ndCBoYW5kbGUgbXVsdGktdmFsdWVkIHByb3BlcnRpZXMKLSogVElOS0VSUE9QLTIxNzUgRXhlY3V0b3IgdGhyZWFkIGlzIG5vdCByZXR1cm5lZCBvbiBjaGFubmVsIGNsb3NlCi0qIFRJTktFUlBPUC0yMTg1IFVzZSBjb21tb25zLWNvbmZpZ3VyYXRpb24yIGluc3RlYWQgb2YgY29tbW9ucy1jb25maWd1cmF0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjE5MiBHcmVtbGluLk5ldC5Ecml2ZXIuQ29ubmVjdGlvbi5QYXJzZSB0aHJvd3MgYSBOdWxsUmVmZXJlbmNlRXhjZXB0aW9uCi0qIFRJTktFUlBPUC0yMjI0IERldGVjdCBhbmQgZml4IHJlc291cmNlIGxlYWsKLSogVElOS0VSUE9QLTIyMzAgbWF0Y2goKSBzdGVwIHVuZXhwZWN0ZWQgYmVoYXZpb3VycwotKiBUSU5LRVJQT1AtMjIzMiBSZW1vdGVTdHJhdGVneSBkb2VzIG5vdCBjYWxsIHBhcmVudCBjbGFzcyBUcmF2ZXJzYWxTdHJhdGVneSBfX2luaXRfXwotKiBUSU5LRVJQT1AtMjIzOCBGaXggcmVtYWluaW5nIGl0ZXJhdG9yIGxlYWtzIG1hcmtlZCBieSBASWdub3JlSXRlcmF0b3JMZWFrCi0qIFRJTktFUlBPUC0yMjQxIENsaWVudCBleGNlcHRpb24gZG9uJ3QgbWF0Y2ggU2VydmVyIGV4Y2VwdGlvbiB3aGVuIHNlcnZlciAgdGhyb3cgU3RhY2tPdmVyZmxvd0Vycm9yCi0qIFRJTktFUlBPUC0yMjQ4IEluc3RhYmlsaXR5IG9mIGRyaXZlciBmb3IgYmxvY2tlZCByZXF1ZXN0cwotKiBUSU5LRVJQT1AtMjI1NyB0cmFuc2FjdGlvbiBpdHR5ICBtYXkgc3RpbGwgYmUgdmlzaXRlZCBhZnRlciBjb21taXQKLSogVElOS0VSUE9QLTIyNjQgR3JlbWxpbiBQeXRob24gc2hvdWxkIGRlc2VyaWFsaXplIGc6RGF0ZSB0byBVVEMKLSogVElOS0VSUE9QLTIyNjYgS2VlcCBhbGl2ZSBub3Qgc3RhcnRlZCBhdCBjb25uZWN0aW9uIGNyZWF0aW9uCi0qIFRJTktFUlBPUC0yMjc0IFRlc3Qgb2YgVGlua2VyR3JhcGggR3JlbWxpbiBmYWlsIG9uIFdpbmRvd3MgYW5kIG5vbiBFTiBsb2NhbGUKLSogVElOS0VSUE9QLTIyNzYgTm8gY29uc3RydWN0b3IgZm9yIHJlbW90ZSBjb25uZWN0aW9uIGluIERTTCBnZW5lcmF0ZWQgdHJhdmVyc2FsIHNvdXJjZQotKiBUSU5LRVJQT1AtMjI4MyBHcmFwaFN0ZXAncyBpZHMgbnVsbCBleGNlcHRpb24KLSogVElOS0VSUE9QLTIyODUgRXJyb3Igb2JqZWN0IGlzIHVucmVhY2hhYmxlCi0qIFRJTktFUlBPUC0yMjg4IEdldCBDb25uZWN0aW9uUG9vbEJ1c3lFeGNlcHRpb24gYW5kIHRoZW4gU2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb25zCi0qIFRJTktFUlBPUC0yMjg5IFVzZSBhZGRyZXNzIGluc3RlYWQgb2YgaG9zdG5hbWUgZm9yIGNvbm5lY3Rpb24KLSogVElOS0VSUE9QLTIyOTAgSmF2YXNjcmlwdCBHTFYgY29ubmVjdGlvbiByZWZ1c2VkIGVycm9yIGhhbmRsaW5nCi0qIFRJTktFUlBPUC0yMjkxIFRyYXZlcnNhbEV4cGxhbmF0aW9uIGRlc2VyaWFsaXphdGlvbiBpbiBHcmFwaFNPTgotKiBUSU5LRVJQT1AtMjI5OCBCeXRlY29kZS5qYXZhICBmbGF0dGVuQXJndW1lbnRzIHRocm93IGV4Y2VwdGlvbiB3aGVuIG51bGwKLSogVElOS0VSUE9QLTIzMDMgR3JlbWxpbkRzbCBnZW5lcmF0ZSBhZGRWIGluc3RlYWQgb2YgYWRkRQotKiBUSU5LRVJQT1AtMjMxOCBFZGdlIHByb3BlcnRpZXMgZGVkdXAoKSBub3Qgd29yayB3aXRoIHNwYXJrLWdyZW1saW4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMzM3IEluIHVwZ3JhZGUgZ3VpZGUgZm9yIDMuNC4yLCB0aGUgb3B0aW9uIFJlbW90ZUNvbm5lY3Rpb24uUEVSX1JFUVVFU1RfVElNRU9VVCBkb2VzIG5vdCBleGlzdAotKiBUSU5LRVJQT1AtMjMzOCBkcm9wKCkgbm90IHJlbW92aW5nIGFsbCBlZGdlL21ldGEgcHJvcGVydGllcwotKiBUSU5LRVJQT1AtMjM0MSBHcmVtbGluQ2xpZW50RXh0ZW5zaW9ucy5TdWJtaXRBc3luYyBoYW5ncyBhcyBpdCB0cmllcyB0byBkaXNwb3NlIGNvbm5lY3Rpb24KLSogVElOS0VSUE9QLTIzNDUgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hlbiBNYXAga2V5IGlzIG5vdCBmb3VuZCBmb3IgbWF0aCgpCi0qIFRJTktFUlBPUC0yMzQ3IFJlbW92ZSBpbnZhbGlkIHNlcnZpY2UgZGVzY3JpcHRvcnMgZnJvbSBncmVtbGluLXNoYWRlZAotKiBUSU5LRVJQT1AtMjM1MCBjbG9uZSgpIGlzIG5vdCBkZWVwIGNvcHlpbmcgVHJhdmVyc2FsIGludGVybmFscwotKiBUSU5LRVJQT1AtMjM1MSBMb2NhbCBNYXAgb3JkZXJpbmcgb2Yga2V5cyBjYW4gZ2VuZXJhdGUgY2FzdCBlcnJvcnMKLSogVElOS0VSUE9QLTIzNTIgR3JlbWxpbiBQeXRob24gZHJpdmVyIGRlZmF1bHQgcG9vbCBzaXplIG1ha2VzIEdyZW1saW4ga2VlcC1hbGl2ZSBkaWZmaWN1bHQKLSogVElOS0VSUE9QLTIzNTMgRXJyb3Igd2hpbGUgU2h1dHRpbmcgRG93biBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtMjM2MCBmYWlsZWQgdG8gZGVzZXJpYWxpemVyIGludDMyIHdoZW4gZ3JlbWxpbi1weXRob24gc3VibWl0IGJ5dGVjb2RlIHdpdGggYSBiaWcgaW50IHZhbHVlCi0qIFRJTktFUlBPUC0yMzY0IEluamVjdGVkIFByb2ZpbGVTdGVwIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGluIGNoaWxkIHRyYXZlcnNhbHMKLSogVElOS0VSUE9QLTIzNjUgTGF6eUJhcnJpZXJTdHJhdGVneSBhZGRzIGEgTm9PcEJhcnJpZXJTdGVwIHdoZW4gcHJvZmlsZSgpIGlzIHByZXNlbnQKLSogVElOS0VSUE9QLTIzNjggSkFWQV9PUFRJT05TIGFyZSBub3QgcHJvcGVybHkgZXhwYW5kZWQgaW4gZ3JlbWxpbi1jb25zb2xlCi0qIFRJTktFUlBPUC0yMzY5IENvbm5lY3Rpb25zIGluIENvbm5lY3Rpb25Qb29sIGFyZSBub3QgcmVwbGFjZWQgaW4gYmFja2dyb3VuZCB3aGVuIHVuZGVybHlpbmcgY2hhbm5lbCBpcyBjbG9zZWQKLSogVElOS0VSUE9QLTIzNzQgU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlciBjYW4ndCBleHRyYWN0IGF1dGhvcml6YXRpb24KLSogVElOS0VSUE9QLTIzODMgaGFzKFQsVHJhdmVyc2FsKSBkb2VzIG5vdCByZXR1cm4gcmVzdWx0cwotKiBUSU5LRVJQT1AtMjM4NCBJbmplY3QgYW5kIHdpdGhTaWRlRWZmZWN0IGNhdXNpbmcgZGlmZmVyZW50IG91dGNvbWVzIGluIG9yZGVyIHN0ZXAKLSogVElOS0VSUE9QLTIzODggZ3JlbWxpbnB5dGhvbjogQ2FuJ3QgY2xvc2UgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgotKiBUSU5LRVJQT1AtMjQwMyBHcmVtbGluIGphdmFzY3JpcHQgVHJhbnNsYXRvciBkb2VzIG5vdCBoYW5kbGUgY2hpbGQgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjQwNSBncmVtbGlucHl0aG9uOiB0cmF2ZXJzYWwgaGFuZ3Mgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBidXQgdGhlIHNlcnZlcnMgc3RvcHMgcmVzcG9uZGluZyBsYXRlcgotKiBUSU5LRVJQT1AtMjQwOCBJdGVyYXRvciBsZWFrIGluIEhhc0NvbnRhaW5lcgotKiBUSU5LRVJQT1AtMjQwOSBqczogRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBuZXZlciB0aW1lcyBvdXQgaWYgc2VydmVyIHVyaSBub3QgYXZhaWxhYmxlLgotKiBUSU5LRVJQT1AtMjQxMCBGcmVlIHVwIHNlcnZlciB0aHJlYWRzIHdoZW4gY2xpZW50IGlzIGNsb3NlZAotKiBUSU5LRVJQT1AtMjQyNSBTZXJ2ZXIgY2xvc2VzIEhUVFAgY29ubmVjdGlvbiBmb3Iga2VlcEFsaXZlIGFzIHRydWUKLSogVElOS0VSUE9QLTI0MzIgR2VuZXJhdGUgY29ycmVjdCB0b1N0cmluZygpIHJlcHJlc2VudGF0aW9uIG9mIGJ5dGVjb2RlIGluIEphdmFzY3JpcHQKLSogVElOS0VSUE9QLTI0MzMgdHlwbyBpbiBqYXZhZG9jcyBtYXRjaCgpIFR5cGUgUGFyYW1ldGVycwotKiBUSU5LRVJQT1AtMjQzNSBHcmVtbGluIFB5dGhvbiBzdWdhciBzeW50YXggZm9yIHZhbHVlcygpIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcHJvYmxlbXMKLSogVElOS0VSUE9QLTI0MzcgZ3JlbWxpbi1kcml2ZXIgaGFuZ3MgaWYgUmVzdWx0U2V0LnN0YXR1c0F0dHJpYnV0ZXMoKS5nZXQoKSBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0aHJvd3MKLSogVElOS0VSUE9QLTI0MzkgUCBhbmQgVGV4dFAgdG9TdHJpbmcoKSBpcyBicm9rZW4KLSogVElOS0VSUE9QLTI0NTggQnl0ZWNvZGUgQmluZGluZ3MgbG9zdCB3aGVuIGZvbGxvd2VkIGJ5IGEgY2hpbGQgdHJhdmVyc2FsCi0qIFRJTktFUlBPUC0yNDY1IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSBmaWxlIGhhbmRsaW5nIGlzIGludmFsaWQgb24gd2luZG93cwotKiBUSU5LRVJQT1AtMjQ3NSBCYXJyaWVyIHN0ZXAgdG91Y2hlcyBvbmUgbW9yZSBlbGVtZW50IG9mIG5leHQgbG9vcAotKiBUSU5LRVJQT1AtMjQ3OCBDb25zb2xlIGJ5dGUgY29kZSB0cmFuc2xhdG9yIGhhcyBpc3N1ZXMgd2l0aCAibmV3IERhdGUoKSIKLSogVElOS0VSUE9QLTI0OTYgR3JlbWxpbkRzbFByb2Nlc3NvciBmYWlscyB3aGVuIFNvY2lhbFRyYXZlcnNhbFNvdXJjZURzbCBvdmVycmlkZXMgY2xvc2UKLSogVElOS0VSUE9QLTI1MDUgR3JlbWxpbiBQeXRob24gQ2xpZW50IFF1ZXJ5IFRpbWVzIG91dCBhdCAzMCBzZWNvbmRzIGluc3RlYWQgb2YgdGhlIHNlcnZlciB0aW1lb3V0Ci0qIFRJTktFUlBPUC0yNTEyIER1cGxpY2F0ZSBqYXJzIGluIGNsYXNzcGF0aCB3aGVuIHJ1bm5pbmcgZ3JlbWxpbi1zZXJ2ZXIuc2gKLSogVElOS0VSUE9QLTI1MTMgR2VuZXJpY3MgaW5zdWZmaWNpZW50bHkgc3RyaWN0IG9uIHByb3BlcnR5KCkKLSogVElOS0VSUE9QLTI1MTQgSmF2YSBjbGllbnQgZHJpdmVyIHJlcXVlc3RzIHdpdGggc2FtZSByZXF1ZXN0IGlkcyBoYW5nCi0qIFRJTktFUlBPUC0yNTE2IFByb3BlcnR5IGZvbGRpbmcgaGFzIHRyb3VibGUgd2l0aCBjb2FsZXNjZQotKiBUSU5LRVJQT1AtMjUyOSBHbG9iYWwgZGVkdXAoKSBpbiByZWR1Y2luZyBieSgpIG9mIGdyb3VwKCkgZGV0YWNoZXMgZWxlbWVudHMgZm9yIE9MVFAKLSogVElOS0VSUE9QLTI1MzEgR3JlbWxpbiAuTkVUIGRyaXZlciBDb25uZWN0aW9uUG9vbCBjYW4gcmVtYWluIHdpdGhvdXQgY29ubmVjdGlvbnMgaWYgc2VydmVyIGlzIGRvd24gZm9yIDEtMiBtaW51dGVzCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTcwOSBDb25zaWRlciBCb3VuZGluZyBHcmVtbGluIFBvb2wgUXVldWUgU2l6ZQotKiBUSU5LRVJQT1AtMTA4NCBCcmFuY2ggb3B0aW9uIHRva2VucyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSB0cmF2ZXJzYWxzLgotKiBUSU5LRVJQT1AtMTU1MyBEZXByZWNhdGUgc3RvcmUoKSBpbiBmYXZvciBvZiBhZ2dyZWdhdGUoU2NvcGUpCi0qIFRJTktFUlBPUC0xNTY4IENoYW5nZSBzdHJhdGVneSBhcHBsaWNhdGlvbiBvcmRlciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE2NDEgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gZm9yIGdyZW1saW4tcHl0aG9uCi0qIFRJTktFUlBPUC0xNjgyIGJ5LW1vZHVsYXRvciBvcHRpbWl6YXRpb24gc3RyYXRlZ3kKLSogVElOS0VSUE9QLTE3MzMgaGFzS2V5LCBoYXNWYWx1ZXMgc2hvdWxkIHdvcmsgb24gRWxlbWVudCBhbmQgUHJvcGVydHkKLSogVElOS0VSUE9QLTE4MTAgQWRkIExhbWJkYS5iaW5hcnlPcGVyYXRvciBhbmQgTGFtYmRhLnVuYXJ5T3BlcmF0b3IKLSogVElOS0VSUE9QLTE4MzggUHl0aG9uIHNhbXBsZSBzY3JpcHQKLSogVElOS0VSUE9QLTE4ODYgR3JlbWxpbiBQeXRob24gZHJpdmVyIHRvIHBlcmlvZGljYWxseSBpc3N1ZSBwaW5nIC8gaGVhcnRiZWF0IHRvIGdyZW1saW4gc2VydmVyCi0qIFRJTktFUlBPUC0xOTIxIFN1cHBvcnQgaGFzTmV4dCB0ZXJtaW5hbCBzdGVwIGluIEdMVnMKLSogVElOS0VSUE9QLTE5OTQgTGF6eUJhcnJpZXJTdHJhdGVneSBmdWxseSByZXNwb25zaWJsZSBmb3IgYmFycmllcigpIGFkZGl0aW9ucwotKiBUSU5LRVJQT1AtMjAwMSBTdXBwb3J0IGxhbWJkYXMgaW4gSmF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjAxNCBBbGxvdyBhbiBhYmlsaXR5IHRvIHNwZWNpZnkgc2VlZGluZyBmb3IgcmFuZG9tIG1ldGhvZHMgc3VjaCBhcyBjb2luLCBzYW1wbGUgYW5kIE9yZGVyLnNodWZmbGUKLSogVElOS0VSUE9QLTIwMjAgU3VwcG9ydCB3aXRoQ29tcHV0ZXIoKSBmb3IgamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjA0NiBHcmVtbGluLVB5dGhvbjogU3VwcG9ydCBjdXN0b20gcmVxdWVzdCBoZWFkZXJzIGluIFdlYlNvY2tldCByZXF1ZXN0Ci0qIFRJTktFUlBPUC0yMDU0IFN1cHBvcnQgVHJhdmVyc2FsU3RyYXRlZ3kgc3BlY2lmaWNhdGlvbiBpbiBncmVtbGluLWphdmFzY3JpcHQKLSogVElOS0VSUE9QLTIwNzYgQnVpbGQgd2l0aCBKYXZhIDExCi0qIFRJTktFUlBPUC0yMDgwIFJlbW92ZSBkZXByZWNhdGVkIFRyYXZlcnNhbFNvdXJjZS53aXRoUmVtb3RlKCkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMDk5IFByb3BlcnR5IHNldHRpbmcgd2l0aCBudWxsIGhhcyBkaWZmZXJlbnQgYmVoYXZpb3IgYmV0d2VlbiBhZGQgYW5kIHVwZGF0ZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIxMzMgVXNlIG5lbzRqIGluZGV4IGxvb2t1cCBpbiBOZW80akdyYXBoU3RlcCB3aXRoIEhhc0NvbnRhaW5lcnMgY29udGFpbmluZyBUZXh0UCBwcmVkaWNhdGVzCi0qIFRJTktFUlBPUC0yMTY4IEdyYXBoU09OOiBQIGRlc2VyaWFsaXphdGlvbiBzaG91bGQgYmUgb3B0aW1pemVkCi0qIFRJTktFUlBPUC0yMjEzIFJlcGxhY2Ugc2NyaXB0RXZhbHVhdGlvblRpbWVvdXQgaW4gZmF2b3Igb2Ygc29tZXRoaW5nIG1vcmUgc3VpdGFibGUgdG8gYnl0ZWNvZGUKLSogVElOS0VSUE9QLTIyMTUgQmV0dGVyIGV4Y2VwdGlvbiBtZXNzYWdlIGZvciBjb25uZWN0aW9uIHByb2JsZW1zCi0qIFRJTktFUlBPUC0yMjIzIFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIHRvIDIuOS45Ci0qIFRJTktFUlBPUC0yMjMxIFJlbW92ZSBkZXByZWNhdGVkIGJ1bGsgZHVtcGluZy9sb2FkaW5nIFZlcnRleFByb2dyYW1zICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjIzMyBSZW1vdmUgZGVwcmVjYXRlZCBPcmRlciBkZWNyL2luY3IgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMjM1IEJldHRlciBoYW5kbGUgdGhlIGNvbmNlcHQgb2YgbnVsbCBpbiB0cmF2ZXJzYWxzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjIzNiBJbXByb3ZlIGVycm9yIG1lc3NhZ2luZyBmb3IgVGlua2VyR3JhcGggSWRNYW5hZ2VycyB0aGF0IGZhaWwgb24gY29udmVyc2lvbnMKLSogVElOS0VSUE9QLTIyMzcgUHJldmVudCBlcnJvciB3aGVuIGNsb3Npbmcgc2Vzc2lvbnMgdGhhdCBkb24ndCBleGlzdCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIyMzkgUmVtb3ZlIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjI0MiBCdW1wIHRvIG5ldHR5IDQuMS4zNgotKiBUSU5LRVJQT1AtMjI0MyBBZGQgdXNlci1hZ2VudCB0byBSZXF1ZXN0T3B0aW9ucwotKiBUSU5LRVJQT1AtMjI0NSBDb25zb2xpZGF0ZSB0aGUgZXhlY3V0b3IgZm9yIGJ5dGVjb2RlICYgc3RyaW5nIGJhc2VkIGNsaWVudAotKiBUSU5LRVJQT1AtMjI0NiBDb25zb2xpZGF0ZSB0aGUgZXJyb3IgcHJvcGFnYXRpb24gdG8gdGhlIGNsaWVudAotKiBUSU5LRVJQT1AtMjI1MCBTdXBwb3J0IHRvU3RyaW5nIHNlcmlhbGl6YXRpb24gaW4gR3JhcGhCaW5hcnkKLSogVElOS0VSUE9QLTIyNTEgUmVtb3ZlIGRlcHJlY2F0ZWQgVmVydGV4UHJvZ3JhbS1yZWxhdGVkIG1ldGhvZHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMjUyIEEgbWVhbmluZ2Z1bCB3YXkgdG8gc3VwcG9ydCBzZXNzaW9uIGJhc2VkIGJ5dGVDb2RlIGludGVyYWN0aW9uIHRocm91Z2ggZ3JlbWxpbi1kcml2ZXIKLSogVElOS0VSUE9QLTIyNTQgUmVuYW1lIEFnZ3JlZ2F0ZVN0ZXAgYW5kIFN0b3JlU3RlcCBnaXZlbiBhZ2dyZWdhdGUoU2NvcGUsU3RyaW5nKSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIyNTYgcHJvY2Vzc0FsbFN0YXJ0cyBvZiBBZ2dyZWdhdGVTdGVwIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGJhcnJpZXIgaXMgZW1wdHkKLSogVElOS0VSUE9QLTIyNTkgRGVmYXVsdCBKYXZhIGJhc2VkIGRyaXZlciBhbmQgc2VydmVyIG9wZXJhdGlvbnMgdG8gR3JhcGhCaW5hcnkgYW5kIHJlbW92ZSBHcnlvICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjI2MCBVcGRhdGUgamFja3NvbiBkYXRhYmluZCAyLjkuOS4xCi0qIFRJTktFUlBPUC0yMjYyIEltcHJvdmUgTmV0dHkgcHJvdG9jb2wgaGFuZGxpbmcKLSogVElOS0VSUE9QLTIyNjUgRGVwcmVjYXRlIFRyYXZlcnNhbC5nZXRTaWRlRWZmZWN0cygpIGZ1bmN0aW9uYWxpdHkgZm9yIHJlbW90aW5nIHB1cnBvc2VzCi0qIFRJTktFUlBPUC0yMjY5IFJlbW92ZSByZW1vdGUgc2lkZS1lZmZlY3QgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIyNzAgRGVwcmVjYXRlIG11bHRpL21ldGFwcm9wZXJ0eSBzdXBwb3J0IGluIE5lbzRqCi0qIFRJTktFUlBPUC0yMjcxIEFkZCBjb25zb2xlIHByZWZlcmVuY2UgdG8gY29udHJvbCBzZXJ2ZXItb3JpZ2luYXRlZCB3YXJuaW5nIGRpc3BsYXkKLSogVElOS0VSUE9QLTIyNzIgUmVuYW1lIHN0ZXBzIGFuZCB0b2tlbnMgdGhhdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIHB5dGhvbiBmdW5jdGlvbnMKLSogVElOS0VSUE9QLTIyNzMgUmVtb3ZlIGRlcHJlY2F0ZWQgUmVzcG9uc2VIYW5kbGVyQ29udGV4dCBpbmZyYXN0cnVjdHVyZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIyNzcgUHl0aG9uIHNkayBwb3N0cG9uZSB0aGUgdGltaW5nIHRvIGNyZWF0ZSB0cmFuc3BvcnQKLSogVElOS0VSUE9QLTIyNzkgR3JhcGhCaW5hcnkgc3VwcG9ydCBpbiBQeXRob24KLSogVElOS0VSUE9QLTIyODAgUHJldmVudCB1c2Ugb2YgVCB2YWx1ZXMgYXMgcHJvcGVydHkga2V5IG92ZXJsb2FkcwotKiBUSU5LRVJQT1AtMjI4NCBNYWtlIGl0IGVhc2llciB0byByZXR1cm4gbW9yZSBzdHJ1Y3R1cmUgb2YgZ3JhcGggZWxlbWVudHMKLSogVElOS0VSUE9QLTIyOTUgUmVtb3ZlIGRlcHJlY2F0ZWQgc2NyaXB0RXZhbHVhdGlvblRpbWVvdXQgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMjk2IFBlciBxdWVyeSB0aW1lb3V0IG5vdCB3b3JraW5nIGZyb20gUHl0aG9uCi0qIFRJTktFUlBPUC0yMzAyIEFkZCBpc09uR3JhcGhDb21wdXRlcigpIGZpZWxkIGFjY2Vzc29yIHRvIEVsZW1lbnRNYXBTdGVwCi0qIFRJTktFUlBPUC0yMzA3IEFkZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBmb3IgYmFkbHkgY29uZmlndXJlZCBDaGFubmVsaXplcgotKiBUSU5LRVJQT1AtMjMxMCBSZWR1Y2UgVHJhdmVyc2FsLmlzUm9vdCgpIHRvIGEgY2hlY2sgb2YgRW1wdHlTdGVwICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjMxMSBUcmF2ZXJzYWxTdHJhdGVnaWVzIGltcGxlbWVudGluZyBJdGVyYWJsZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIzMTIgRW1wdHkga2V5cyB0byBncm91cCgpIHNob3VsZCBncm91cCB0byBudWxsCi0qIFRJTktFUlBPUC0yMzE0IEVtcGxveSBieShTdHJpbmcpIGZvciBNYXAgd2hlbiBwb3NzaWJsZSBhbmQgaW1wcm92ZSBlcnJvcnMgYXJvdW5kIGluY29ycmVjdCB0eXBlcwotKiBUSU5LRVJQT1AtMjMxNSBJbXBsZW1lbnQgc29tZSBmb3JtIG9mIGNsb25lKCkgb3IgcmVzZXQoKSBmb3IgVHJhdmVyc2FsIGluIEdMVnMKLSogVElOS0VSUE9QLTIzMTcgUmVtb3ZlIFB5dGhvbiAyIHN1cHBvcnQgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMzIwIFtTRUNVUklUWV0gWE1MSW5wdXRGYWN0b3J5IGluaXRpYWxpemF0aW9uIGluIEdyYXBoTUxSZWFkZXIgaW50cm9kdWNlcwotKiBUSU5LRVJQT1AtMjMyNSBHZW5lcmF0ZSB0cmF2ZXJzYWxzIHRoYXQgd2lsbCBiZXR0ZXIgeWllbGQgaW5kZXggbG9va3VwcyB3aXRoIFNQQVJRTAotKiBUSU5LRVJQT1AtMjMyNyBSZW1vdmUgZGVwcmVjYXRlZCBOSU8gcHJvdG9jb2wgc3VwcG9ydCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIzMjggRG8gbm90IGNsb3NlIGFsbCBjb25uZWN0aW9ucyBpZiBqdXN0IG9uZSBoYXMgYmVjYW1lIGNsb3NlZAotKiBUSU5LRVJQT1AtMjMzNSBEcm9wIHN1cHBvcnQgZm9yIG9sZGVyIEdMViBydW50aW1lcwotKiBUSU5LRVJQT1AtMjMzNiBBbGxvdyBjbG9zZSBvZiBjaGFubmVsIHdpdGhvdXQgaGF2aW5nIHRvIHdhaXQgZm9yIHNlcnZlcgotKiBUSU5LRVJQT1AtMjM0OSBTd2l0Y2ggZnJvbSBOZXd0b25zb2Z0Lkpzb24gdG8gU3lzdGVtLlRleHQuSnNvbiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIzNTQgRG9jdW1lbnQgcmVjb21tZW5kYXRpb24gdG8gcmV1c2UgZ3JhcGggdHJhdmVyc2FsIHNvdXJjZQotKiBUSU5LRVJQT1AtMjM1NiBCdW1wIHRvIEphY2tzb24gMi4xMC54Ci0qIFRJTktFUlBPUC0yMzU3IEFkZCBhIGNvbW1hbmQgdG8gY2xlYXIgdGhlIEdyZW1saW4gQ29uc29sZSBzY3JlZW4KLSogVElOS0VSUE9QLTIzNjEgUHJldmVudCB1c2luZyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzcGF3bmVkIHRyYXZlcnNhbHMgYXMgY2hpbGRyZW4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMzcxIEFkZCBwb3NzaWJpbGl0eSB0byBpbXBvcnQgY29uc3RhbnRzIHdpdGggSW1wb3J0R3JlbWxpblBsdWdpbgotKiBUSU5LRVJQT1AtMjM3NiBQcm9iYWJpbGl0eSBkaXN0cmlidXRpb24gY29udHJvbGxlZCBieSB3ZWlnaHQgd2hlbiB1c2luZyBzYW1wbGUgc3RlcAotKiBUSU5LRVJQT1AtMjM3NyBJbnZlc3RpZ2F0ZSBpbnRlcm1pdHRlbnQgLk5FVCBHTFYgdGVzdCBmYWlsdXJlcwotKiBUSU5LRVJQT1AtMjM4OSBBdXRob3JpemF0aW9uIHN1cHBvcnQgaW4gVGlua2VyUG9wCi0qIFRJTktFUlBPUC0yMzkxIERyb3AgR0xWIFRlbXBsYXRpbmcgU3lzdGVtCi0qIFRJTktFUlBPUC0yMzkyIEltcHJvdmUgbW9kdWxlIGxldmVsIGRvY3VtZW50YXRpb24gZm9yIEdMVnMKLSogVElOS0VSUE9QLTIzOTQgVW5hYmxlIHRvIHVzZSBfXyBjbGFzcyBvZiBhIGN1c3RvbSBEU0wgd2hlbiBwYXNzaW5nIGEgc2NyaXB0IGV2ZW4gaWYgdGhpcyBjbGFzcyBpcyBpbXBvcnRlZCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIzOTUgR3JlbWxpbiBQeXRob24gZG9lc24ndCBzdXBwb3J0IGxpc3QgYXMga2V5cyBpbiBncm91cENvdW50Ci0qIFRJTktFUlBPUC0yMzk2IFRyYXZlcnNlclNldCBzaG91bGQgYmUgZXh0ZW5kYWJsZSBmb3IgR3JhcGhEQiBwcm92aWRlcgotKiBUSU5LRVJQT1AtMjM5NyBEb24ndCBjcmVhdGUgdGhlIGRlZmF1bHQgR3lybyBzZXJpYWxpemVyIGlmIHRoZSBjYWxsZXIgc3BlY2lmaWVzIGEgZGlmZmVyZW50IG9uZQotKiBUSU5LRVJQT1AtMjQwMSBVcGdyYWRlIEphY2tzb24tZGF0YWJpbmQgdG8gMi4xMS54Ci0qIFRJTktFUlBPUC0yNDA2IERlbGVnYXRlIHByb2Nlc3NpbmcgZnJvbSBldmVudCBsb29wIHRvIHdvcmtlciB0aHJlYWRzCi0qIFRJTktFUlBPUC0yNDA3IFN1cHBvcnQgZGVzZXJpYWxpemF0aW9uIG9mIGEgZGljdCB0aGF0IGhhcyBhIGRpY3QgYXMgYSBrZXkKLSogVElOS0VSUE9QLTI0MTIgQWRkIG1pc3NpbmcgcXVlcnkgdGVzdHMKLSogVElOS0VSUE9QLTI0MTMgUHJlZmVyIHdpdGhFbWJlZGRlZCgpIHRvIHdpdGhHcmFwaCgpIG9uIEFub255bW91c1RyYXZlcnNhbFNvdXJjZQotKiBUSU5LRVJQT1AtMjQxNSBBdm9pZCB1bm5lY2Vzc2FyeSBkZXRhY2hlZCBvYmplY3RzIGlmIG5vdCByZXF1aXJlZAotKiBUSU5LRVJQT1AtMjQxNiBNdWx0aUl0ZXJhdG9yIHNob3VsZCBpbXBsZW1lbnQgQXV0b0Nsb3NlYWJsZQotKiBUSU5LRVJQT1AtMjQxOCBTdG9yZSBhdXRoZW50aWNhdGVkIHVzZXIgb24gc2VydmVyIHBpcGVsaW5lCi0qIFRJTktFUlBPUC0yNDIwIFN1cHBvcnQgcGVyIHF1ZXJ5IHJlcXVlc3Qgb3B0aW9ucyBpbiAuTkVUCi0qIFRJTktFUlBPUC0yNDIxIFN1cHBvcnQgcGVyIHF1ZXJ5IG9wdGlvbnMgaW4gamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjQyNiBVc2UgTmV0dHkncyBXZWJTb2NrZXRDbGllbnRQcm90b2NvbEhhbmRsZXIKLSogVElOS0VSUE9QLTI0MjcgU2ltcGxpZnkgTmV0dHkgcmVmZXJlbmNlIGNvdW50aW5nCi0qIFRJTktFUlBPUC0yNDMwIExvb3BpbmcgUmVjaXBpZXMKLSogVElOS0VSUE9QLTI0MzEgT3BlcmF0aW5nIG9uIERyb3BwZWQgRWxlbWVudHMgUmVjaXBlcwotKiBUSU5LRVJQT1AtMjQzNiBUaGUgZ3JlbWxpbiBzZXJ2ZXIgc3RhcnRzIGV2ZW4gaWYgYWxsIGdyYXBocyBpbnN0YW50aWF0aW9uIGhhcyBmYWlsZWQKLSogVElOS0VSUE9QLTI0MzggUHJvdmlkZSBhIHdheSBmb3Igc2NyaXB0cyB0byByZXNwZWN0IHdpdGgoKSBzcGVjaWZpY2F0aW9uIG9mIHRpbWVvdXQKLSogVElOS0VSUE9QLTI0NDAgU2ltcGxpZnkgZHJpdmVyIGJ5IGRlbGVnYXRpbmcga2VlcEFsaXZlIGxvZ2ljIHRvIE5ldHR5Ci0qIFRJTktFUlBPUC0yNDQxIEFkZCBjb21wcmVzc2lvbiB0byBXZWJTb2NrZXQgZnJhbWVzIHNlbnQgZnJvbSBjbGllbnQKLSogVElOS0VSUE9QLTI0NDIgTWFrZSBUcmFuc2xhdG9ycyB0aGF0IHdvcmsgaW4gSmF2YSBwYXJ0IG9mIGdyZW1saW4tY29yZQotKiBUSU5LRVJQT1AtMjQ0MyBJbXByb3ZlIHRlc3Rpbmcgb2YgVHJhbnNsYXRvciBpbnN0YW5jZXMgZm9yIG5vbi1KVk0gbGFuZ3VhZ2VzIHdpdGggZm9jdXMgb24gUHl0aG9uIGFzIGEgbW9kZWwKLSogVElOS0VSUE9QLTI0NDUgU3BlZWQgdXAgY2xpZW50IGluaXRpYWxpemF0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjQ0NiBBZGQgUmVjaXBlIGZvciBPcHRpb25hbCBMb29waW5nCi0qIFRJTktFUlBPUC0yNDQ3IEltcHJvdmUgaGFuZGxpbmcgb2YgU3RhY2tPdmVyZmxvd0Vycm9yIGZvciBsb25nIHRyYXZlcnNhbHMKLSogVElOS0VSUE9QLTI0NTEgSmF2YXNjcmlwdFRyYW5zbGF0b3IgZm9yIEphdmEKLSogVElOS0VSUE9QLTI0NTIgRG90TmV0VHJhbnNsYXRvciBmb3IgSmF2YQotKiBUSU5LRVJQT1AtMjQ1MyBBZGQgV2ViU29ja2V0IGNvbXByZXNzaW9uIHRvIGdyZW1saW4tcHl0aG9uCi0qIFRJTktFUlBPUC0yNDU1IFJlbW92ZSBkZXByZWNhdGVkIGN1c3RvbSBrZWVwLWFsaXZlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIEphdmEgZHJpdmVyIENoYW5uZWxpemVyICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjQ1NyBBZGQgYSBtYXhfY29udGVudF9sZW5ndGggcGFyYW1ldGVyIHRvIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gaW4gdGhlIFB5dGhvbiBjbGllbnQKLSogVElOS0VSUE9QLTI0NjAgQ2hhbmdlIGdyb292eSB0byBwcm92aWRlZCBzY29wZSBpbiBncmVtbGluLWRyaXZlciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTI0NjEgQWxpZ24gQ29yZUltcG9ydHMgd2l0aCBHcm9vdnlUcmFuc2xhdG9yCi0qIFRJTktFUlBPUC0yNDYyIER1cGxpY2F0ZWQgQnl0ZWNvZGVVdGlsIGFuZCBCeXRlY29kZUhlbHBlciBjbGFzc2VzCi0qIFRJTktFUlBPUC0yNDY2IEltcHJvdmUgc3ludGF4IGZvciBHcm9vdnkgc2NyaXB0cyB0aGF0IHVzZSB3aXRoU3RyYXRlZ2llcygpCi0qIFRJTktFUlBPUC0yNDY4IFN0YWJpbGl6ZSBzaG91bGRQcm9jZXNzU2Vzc2lvblJlcXVlc3RzSW5PcmRlcigpIHRlc3QKLSogVElOS0VSUE9QLTI0NjkgS3JiRXhjZXB0aW9uIC0gUHJpbmNpcGFsIGRvZXMgbm90IGV4aXN0IGluIHRlc3QKLSogVElOS0VSUE9QLTI0NzAgQnVtcCBncmVtbGlucHl0aG9uIHRvIHRvcm5hZG8gNi54Ci0qIFRJTktFUlBPUC0yNDcyIEdyYXBoQmluYXJ5IHN1cHBvcnQgaW4gLk5FVAotKiBUSU5LRVJQT1AtMjQ3MyBQcmV2ZW50IFRyYXZlcnNhbFN0cmF0ZWd5IGluc3RhbmNlcyBvZiB0aGUgc2FtZSB0eXBlIHRvIGJlIGFkZGVkIHRvIGEgVHJhdmVyc2FsU291cmNlCi0qIFRJTktFUlBPUC0yNDc0IHdpdGhTYWNrKCkgR3Jvb3Z5IHRyYW5zbGF0aW9uIG91dHB1dCBjb3VsZCBiZSBzaW1wbGlmaWVkCi0qIFRJTktFUlBPUC0yNDc2IFByb3ZpZGUgZnVsbHkgc2hhZGVkIHZlcnNpb24gb2YgSmF2YSBkcml2ZXIKLSogVElOS0VSUE9QLTI0NzkgUHJvdmlkZSBhIHdheSB0byBzZXQgYSBjdXN0b20gR3JhcGhTT05NYXBwZXIgZm9yIDpieXRlY29kZSBjb21tYW5kCi0qIFRJTktFUlBPUC0yNDgxIElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5IG5vdCBpbnN0YWxsZWQgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNDgyIFJlbmFtZSB3c0Nvbm5lY3Rpb25UaW1lb3V0IHRvIGNvbm5lY3Rpb25TZXR1cFRpbWVvdXQKLSogVElOS0VSUE9QLTI0ODQgUHl0aG9uICBJT0xvb3AgY2xvc2UgZXJyb3JzCi0qIFRJTktFUlBPUC0yNDg1IEludmFsaWQgaHR0cCB0ZXN0cyB3aXRoID9ncmVtbGluPTEtMQotKiBUSU5LRVJQT1AtMjQ5NCBEb2N1bWVudCBUcmFuc2xhdG9yIHBhcmFtZXRlciBleHRyYWN0aW9uIGZ1bmN0aW9uYWxpdHkKLSogVElOS0VSUE9QLTI0OTkgUGF0aFJldHJhY3Rpb25TdHJhdGVneSByZXR1cm5zIGluY29uc2lzdGVudCByZXN1bHRzIHdoZW4gbWF0Y2goKSBpcyBub3QgZGV0ZWN0ZWQgYXMgdGhlIGZpbmFsIHN0ZXAgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yNTAwIEFkZCBub25lKCkgc3RlcCBmb3IgYWxsIEdMVnMKLSogVElOS0VSUE9QLTI1MDYgRXhwb3NlIGNsaWVudCBXZWJTb2NrZXQgY29ubmVjdGlvbiBzdGF0dXMKLSogVElOS0VSUE9QLTI1MTcgSW50cm9kdWNlIGEgcmV0cnkgc3RhdHVzIGNvZGUgdG8gdGhlIHNlcnZlciBwcm90b2NvbAotKiBUSU5LRVJQT1AtMjUyNyBBZGQgYSBHcm9vdnlUcmFuc2xhdG9yIGVxdWl2YWxlbnQgbWV0aG9kIHRvIHRoZSBQeXRob24gY2xpZW50Ci0qIFRJTktFUlBPUC0yNTMwIFRyYW5zZmVyIE95dmluZFNhYm8vZ3JlbWxpbnQgYW5kIE95dmluZFNhYm8vZ3JlbWxpbnQuY29tIHRvIGFwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbnQKLSogVElOS0VSUE9QLTI1MzIgTWF4QmFycmllclNpemUgb2YgTm9PcEJhcnJpZXJTdGVwIHNob3VsZCBiZSBhY2Nlc3NpYmxlCi0qIFRJTktFUlBPUC0yNTMzIERldmVsb3AgYSBncmFtbWFyIGZvciBHcmVtbGluCi0qIFRJTktFUlBPUC0yNTM1IE5ldHR5IDQuMS41MiBmbGFnZ2VkIGFzIG1lZGl1bSBzZWN1cml0eSB2aW9sYXRpb24KLSogVElOS0VSUE9QLTI1MzcgU3VwcG9ydCBieXRlY29kZSBiYXNlZCByZXF1ZXN0cyBpbiBzZXNzaW9ucyBhbmQgcmVtb3RlIHR4KCkKLSogVElOS0VSUE9QLTI1NDQgTW9kaWZ5IHNpdGUgcHVibGlzaGluZyBzY3JpcHRzIHRvIGluY2x1ZGUgZ3JlbWxpbnQKLSogVElOS0VSUE9QLTI1NDYgQ2hhbmdlIHRyYW5zcG9ydCBsYXllciB0byB1c2UgQUlPSFRUUCBpbnN0ZWFkIG9mIFRvcm5hZG8KLSogVElOS0VSUE9QLTI1NDcgUHJvdmlkZSBhbiBvcHRpb24gdG8gc3VwcGx5IGEgY2FsbGJhY2sgYmVmb3JlIGhhbmRzaGFrZSBzdWJtaXNzaW9uCi0qIFRJTktFUlBPUC0yNTUwIERlYWRsb2NrIG9uIENsaWVudCBpbml0aWFsaXphdGlvbgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS0wLCAzLjUuMCBjaGFuZ2Vsb2c+Pi4KIAogPT0gVGlua2VyUG9wIDMuNC4wIChBdmFudC1HcmVtbGluIENvbnN0cnVjdGlvbiAjMyBmb3IgVGhlcmVtaW4gYW5kIEZsb3dlcnMpCiAKQEAgLTE5NTIsNzgzICs5MjMsNzIgQEAKIFtbcmVsZWFzZS0zLTQtMTNdXQogPT09IFRpbmtlclBvcCAzLjQuMTMgKFJlbGVhc2UgRGF0ZTogSmFudWFyeSAxMCwgMjAyMikKIAotKiBGaXhlZCBgUmFuZ2VHbG9iYWxTdGVwYCB3aGljaCB3YXMgcHJlbWF0dXJlbHkgY2xvc2luZyB0aGUgaXRlcmF0b3IuCi0qIEFkZGVkIGV4cGxpY2l0IHN0YXRlIHRvIGBEZWZhdWx0VHJhdmVyc2FsYCB0byB0cmFjayB3aGV0aGVyIG9yIG5vdCBpdCB3YXMgZnVsbHkgaXRlcmF0ZWQgYW5kIGNsb3NlZCB0byBlbnN1cmUgaXQgcmVsZWFzZWQgcmVzb3VyY2VzIHByb3Blcmx5LgotKiBQcmV2ZW50ZWQgWE1MIEV4dGVybmFsIEVudGl0eSAoWFhFKSBzdHlsZSBhdHRhY2tzIHZpYSBgR3JhcGhNTFJlYWRlcmAgYnkgZGlzYWJsaW5nIERURCBhbmQgZXh0ZXJuYWwgZW50aXRpZXMgYnkgZGVmYXVsdC4KLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBmb3IgZmFpbGVkIHNlcmlhbGl6YXRpb24gZm9yIEhUVFAtYmFzZWQgcmVxdWVzdHMuCi0qIEZpeGVkIGEgYE51bGxQb2ludGVyRXhjZXB0aW9uYCB0aGF0IGNvdWxkIG9jY3VyIGR1cmluZyBhIGZhaWxlZCBgQ29ubmVjdGlvbmAgaW5pdGlhbGl6YXRpb24gZHVlIHRvIHVuaW5zdGFudGlhdGVkIGBBdG9taWNJbnRlZ2VyYC4KLSogTWlub3IgY2hhbmdlcyB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgSmF2YSBkcml2ZXIgYENsdXN0ZXJgIGFuZCBgQ2xpZW50YCBzdWNoIHRoYXQgaG9zdHMgYXJlIG1hcmtlZCBhcyBhdmFpbGFibGUgb25seSBhZnRlciBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6aW5nIGNvbm5lY3Rpb24gcG9vbHMuCi0qIGBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb25gIG5vdyBjb250YWlucyBhIGNhdXNlIGZvciB0aGUgZmFpbHVyZS4KLSogQnVtcGVkIHRvIE5ldHR5IDQuMS43Mi4KLSogQWRkZWQgdXNlci1mcmllbmRseSBtZXNzYWdlIGluIEdyZW1saW4gY29uc29sZSBmb3IgdW5hdmFpbGFibGUgaG9zdHMgdXBvbiBpbml0aWF0aW9uIGFuZCBmaXhlZCBwb3NzaWJsZSBsZWFrIGluIGBSZW1vdGVDb21tYW5kLmdyb292eWAgdXBvbiBgUmVtb3RlRXhjZXB0aW9uYC4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTI1NjkgUmVjb25uZWN0IHRvIHNlcnZlciBpZiBKYXZhIGRyaXZlciBmYWlscyB0byBpbml0aWFsaXplCi0qIFRJTktFUlBPUC0yNTg5IFhNTCBFeHRlcm5hbCBFbnRpdHkgKFhYRSkgdnVsbmVyYWJpbGl0eQotKiBUSU5LRVJQT1AtMjU5NyBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGlsZSBpbml0aWFsaXppbmcgY29ubmVjdGlvbiBwb29sCi0qIFRJTktFUlBPUC0yNjAzIFRpbmtlckdyYXBoIHNvbWV0aW1lcyBjb3VsZCBub3QgcXVlcnkgZmxvYXQgdmFsdWVzLgotKiBUSU5LRVJQT1AtMjYwOSBIVFRQIHJldHVybnMgc2VyaWFsaXphdGlvbiBleGNlcHRpb25zIGZvciB0aGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UKLSogVElOS0VSUE9QLTI2MjYgUmFuZ2VHbG9iYWxTdGVwIGNsb3NlcyB0cmF2ZXJzYWwgcHJlbWF0dXJlbHkKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjUwNCBJbnRlcm1pdHRlbnRseSBmYWlsaW5nIHNlcnZlci9kcml2ZXIgaW50ZWdyYXRpb24gdGVzdHMKLSogVElOS0VSUE9QLTI2MTYgUHJvdmlkZSBiZXR0ZXIgZXhjZXB0aW9ucyB3aXRoIFNTTCByZWxhdGVkIGZhaWx1cmVzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjYzMCBDbGFyaWZ5IHRoYXQgYSBzZXJ2ZXIgY2Fubm90IHN1cHBvcnQgR3JhcGhzb24xLjAgb3ZlciBIVFRQCi0qIFRJTktFUlBPUC0yNjMyIE5ldHR5IDQuMS42MSBmbGFnZ2VkIHdpdGggdHdvIGhpZ2ggc2V2ZXJpdHkgc2VjdXJpdHkgdmlvbGF0aW9ucwotKiBUSU5LRVJQT1AtMjY2OSBOZXR0eSA0LjEuNjEgZmxhZ2dlZCB3aXRoIG1lZGl1bSBzZXZlcml0eSBzZWN1cml0eSB2aW9sYXRpb25zCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTEzLCAzLjQuMTMgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTQtMTJdXQogPT09IFRpbmtlclBvcCAzLjQuMTIgKFJlbGVhc2UgRGF0ZTogSnVseSAxOSwgMjAyMSkKIAotKiBDb2VyY2VkIHNpbmdsZSBgc2V0YCBhcmd1bWVudHMgdG8gYFAud2l0aGluYCBhbmQgYFAud2l0aG91dGAgdG8gYGxpc3RgIGluIFB5dGhvbiB3aGljaCBzZXJpYWxpemVzIHRvIGEgbW9yZSBleHBlY3RlZCBmb3JtIGZvciBgUGAgaW5zdGFuY2VzLgotKiBGaXhlZCBidWcgaW4gdGhlIGB2ZXJ0ZXhMYWJlbEtleWAgdmFsaWRhdGlvbiBmb3IgYEdyYXBoTUxXcml0ZXJgIHdoaWNoIHdhcyBpbmFkdmVydGVudGx5IHZhbGlkYXRpbmcgdGhlIGBlZGdlTGFiZWxLZXlgLgotKiBDaGFuZ2VkIGBJbmRleFN0ZXBgIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBwcm92aWRlcnMgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGluZGV4ZXIgYmVpbmcgdXNlZC4KLSogQWxsb3dlZCBKYXZhc2NyaXB0IGBUcmFuc2xhdG9yYCB0byB0YWtlIGBCeXRlY29kZWAgb3IgYSBgVHJhdmVyc2FsYC4KLSogQWRkcmVzc2VkIENWRS0yMDIxLTMyNjQwIGZvciBncmVtbGluLWphdmFzY3JpcHQuCi0qIEFsbG93ZWQgY29uc3RydWN0aW9uIG9mIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCBpbiAuTkVUIHRvIHVzZSBob3N0IGFuZCBwb3J0IHNwZWNpZmljYXRpb24gc2ltaWxhciB0byBKYXZhIHN5bnRheC4KLSogRGVmYXVsdGVkIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCB0byAiZyIgaWYgaXQgdGhlIGBUcmF2ZXJzYWxTb3VyY2VgIGJpbmRpbmcgaXNuJ3Qgc3VwcGxpZWQgaW4gUHl0aG9uLgotKiBJbml0aWFsaXplZCBtZXRyaWNzIGluIGBQcm9maWxlU3RlcGAgZXZlbiBpZiB0aGUgc3RlcCBoYXNuJ3QgaXRlcmF0ZWQuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yMzU4IFBvdGVudGlhbCBjb25uZWN0aW9uIGxlYWsgb24gY2xpZW50IGRpc3Bvc2luZwotKiBUSU5LRVJQT1AtMjU1NCBFeHRyYWN0aW5nIHN0ZXAgbWV0cmljcyBmcm9tIFByb2ZpbGVTdGVwIHRocm93cyBOUEUgaWYgdGhlIHN0ZXAgd2FzIG5vdCB0cmlnZ2VyZWQKLSogVElOS0VSUE9QLTI1NjUgR3JhcGhNTFdyaXRlciBkb2VzIG5vdCBjaGVjayB2ZXJ0ZXhMYWJlbEtleSBjb25mbGljdAotKiBUSU5LRVJQT1AtMjU3OCBTZXQgYXJndW1lbnRzIHRvIFAgd2l0aGluL3dpdGhvdXQgYXJlIHdyYXBwZWQgaW4gTGlzdAotKiBUSU5LRVJQT1AtMjU4MCBVcGRhdGUgdGhlIGN1c3RvbSBEU0wgZG9jdW1lbnRhdGlvbgotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0yNTQ4IEFkZCBnZXR0ZXIgZm9yIGluZGV4ZXIgdXNlZCBpbiBJbmRleFN0ZXAKLSogVElOS0VSUE9QLTI1NzcgUmVtb3ZlIHVudXNlZCB0ZXN0IGNvdmVyYWdlIGRlcGVuZGVuY2llcyBmcm9tIEdyZW1saW4uTkVUCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTEyLCAzLjQuMTIgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTQtMTFdXQogPT09IFRpbmtlclBvcCAzLjQuMTEgKFJlbGVhc2UgRGF0ZTogTWF5IDMsIDIwMjEpCiAKLSogUHJldmVudGVkIEphdmEgZHJpdmVyIGZyb20gc2VuZGluZyBtdWx0aXBsZSByZXF1ZXN0IG1lc3NhZ2VzIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBmb3IgYHByb3BlcnR5KFQsT2JqZWN0KWAgd2hlbiBtdXRhdGluZyBncmFwaCBlbGVtZW50cy4KLSogQWRkZWQgbWV0aG9kIGNhY2hpbmcgZm9yIEdyYXBoU09OIDMuMCBkZXNlcmlhbGl6YXRpb24gb2YgYFBgIGFuZCBgVGV4dFBgIGluc3RhbmNlcy4KLSogQWxsb3dlZCBzZXR0aW5nIGBzc2xfb3B0aW9uc2AgZm9yIGdyZW1saW4tcHl0aG9uLgotKiBGaXhlZCBidWcgd2l0aCBnbG9iYWwgYGRlZHVwKClgIHdoZW4gdXNlZCBpbiByZWR1Y2luZyBgYnkoKWAgb2YgYGdyb3VwKClgLgotKiBGaXhlZCBidWcgd2l0aCBKYXZhc2NyaXB0IEdyb292eSBgVHJhbnNsYXRvcmAgd2hlbiBnZW5lcmF0aW5nIEdyZW1saW4gd2l0aCBtdWx0aXBsZSBlbWJlZGRlZCB0cmF2ZXJzYWxzLgotKiBNb2RpZmllZCBHcmVtbGluIFNlcnZlciBgU2V0dGluZ3NgIHRvIGJlIG1vcmUgZXh0ZW5zaWJsZSBhbGxvd2luZyBmb3IgY3VzdG9tIG9wdGlvbnMgd2l0aCB0aGUgWUFNTCBwYXJzZXIuCi0qIEZpeGVkIGB0b1N0cmluZygpYCByZXByZXNlbnRhdGlvbiBvZiBgUGAgd2hlbiBzdHJpbmcgdmFsdWVzIGFyZSBwcmVzZW50IGluIEphdmFzY3JpcHQuCi0qIEV4cG9zZWQgYmFycmllciBzaXplIHdpdGggZ2V0dGVyIGZvciBgTm9PcEJhcnJpZXJTdGVwYC4KLSogQnVtcGVkIHRvIE5ldHR5IDQuMS42MS4KLSogQWRkZWQgYG1heF9jb250ZW50X2xlbmd0aGAgYXMgYSBQeXRob24gZHJpdmVyIHNldHRpbmcuCi0qIEZpeGVkIGJ1ZyBpbiBKYXZhIGBDbGllbnRgIGluaXRpYWxpemF0aW9uLCByZWNvbm5lY3QgYW5kIHNodXRkb3duIHdoZXJlIGNlcnRhaW4gdGhyZWFkIHBvb2wgY29uZmlndXJhdGlvbnMgbWlnaHQgcHJvZHVjZSBhIGRlYWRsb2NrLgotKiBFbnN1cmVkIHRoYXQgYGJhcnJpZXIoKWAgYWRkaXRpb25zIGJ5IHN0cmF0ZWdpZXMgd2VyZSBjb250cm9sbGVkIHNvbGVseSBieSBgTGF6eUJhcnJpZXJTdHJhdGVneWAuCi0qIEZpeGVkIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAgaW4gYFJlc3BvbnNlTWVzc2FnZWAgZGVzZXJpYWxpemF0aW9uIGZvciBHcmFwaFNPTi4KLSogRW5hYmxlZCB0aGUgR3JlbWxpbi5OZXQgZHJpdmVyIHRvIHJlcGFpciBpdHMgY29ubmVjdGlvbiBwb29sIGFmdGVyIHRoZSBzZXJ2ZXIgd2FzIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlLgotKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzdXBwbHkgYSBgSGFuZHNoYWtlSW50ZXJjZXB0b3JgIHRvIGEgYENsdXN0ZXJgIHdoaWNoIHdpbGwgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGluaXRpYWwgSFRUUCByZXF1ZXN0IHRoYXQgZXN0YWJsaXNoZXMgdGhlIHdlYnNvY2tldC4KLSogRml4ZWQgYSBwb3NzaWJsZSBsZWFrYWdlIG9mIGNvbm5lY3Rpb25zIGluIHRoZSBHcmVtbGluLk5FVCBkcml2ZXIgdGhhdCBjb3VsZCBoYXBwZW4gaWYgYERpc3Bvc2UoKWAgd2FzIGNhbGxlZCB3aGlsZSB0aGUgcG9vbCB3YXMgY3JlYXRpbmcgY29ubmVjdGlvbnMuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yNTEyIER1cGxpY2F0ZSBqYXJzIGluIGNsYXNzcGF0aCB3aGVuIHJ1bm5pbmcgZ3JlbWxpbi1zZXJ2ZXIuc2gKLSogVElOS0VSUE9QLTI1MTQgSmF2YSBjbGllbnQgZHJpdmVyIHJlcXVlc3RzIHdpdGggc2FtZSByZXF1ZXN0IGlkcyBoYW5nCi0qIFRJTktFUlBPUC0yNTE2IFByb3BlcnR5IGZvbGRpbmcgaGFzIHRyb3VibGUgd2l0aCBjb2FsZXNjZQotKiBUSU5LRVJQT1AtMjUyOSBHbG9iYWwgZGVkdXAoKSBpbiByZWR1Y2luZyBieSgpIG9mIGdyb3VwKCkgZGV0YWNoZXMgZWxlbWVudHMgZm9yIE9MVFAKLSogVElOS0VSUE9QLTI1MzEgR3JlbWxpbiAuTkVUIGRyaXZlciBDb25uZWN0aW9uUG9vbCBjYW4gcmVtYWluIHdpdGhvdXQgY29ubmVjdGlvbnMgaWYgc2VydmVyIGlzIGRvd24gZm9yIDEtMiBtaW51dGVzCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE5OTQgTGF6eUJhcnJpZXJTdHJhdGVneSBmdWxseSByZXNwb25zaWJsZSBmb3IgYmFycmllcigpIGFkZGl0aW9ucwotKiBUSU5LRVJQT1AtMjE2OCBHcmFwaFNPTjogUCBkZXNlcmlhbGl6YXRpb24gc2hvdWxkIGJlIG9wdGltaXplZAotKiBUSU5LRVJQT1AtMjQ1NyBBZGQgYSBtYXhfY29udGVudF9sZW5ndGggcGFyYW1ldGVyIHRvIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gaW4gdGhlIFB5dGhvbiBjbGllbnQKLSogVElOS0VSUE9QLTI1MzIgTWF4QmFycmllclNpemUgb2YgTm9PcEJhcnJpZXJTdGVwIHNob3VsZCBiZSBhY2Nlc3NpYmxlCi0qIFRJTktFUlBPUC0yNTM1IE5ldHR5IDQuMS41MiBmbGFnZ2VkIGFzIG1lZGl1bSBzZWN1cml0eSB2aW9sYXRpb24KLSogVElOS0VSUE9QLTI1NDcgUHJvdmlkZSBhbiBvcHRpb24gdG8gc3VwcGx5IGEgY2FsbGJhY2sgYmVmb3JlIGhhbmRzaGFrZSBzdWJtaXNzaW9uCi0qIFRJTktFUlBPUC0yNTUwIERlYWRsb2NrIG9uIENsaWVudCBpbml0aWFsaXphdGlvbgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjQueC5hc2NpaWRvYyNyZWxlYXNlLTMtNC0xMSwgMy40LjExIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy00LTEwXV0KID09PSBUaW5rZXJQb3AgMy40LjEwIChSZWxlYXNlIERhdGU6IEphbnVhcnkgMTgsIDIwMjEpCiAKLSogQWRkZWQgYEdyZW1saW5TY3JpcHRDaGVja2VyYCB0byBwcm92aWRlIGEgd2F5IHRvIGV4dHJhY3QgcHJvcGVydGllcyBvZiBzY3JpcHRzIGJlZm9yZSBkb2luZyBhbiBhY3R1YWwgYGV2YWwoKWAuCi0qIEFkZGVkIGBub25lKClgIHN0ZXAgZm9yIGFsbCBsYW5ndWFnZSB2YXJpYW50cy4KLSogRml4ZWQgYnVnIGluIGBQeXRob25UcmFuc2xhdG9yYCB3aGljaCB3YXMgaW1wcm9wZXJseSB0cmFuc2xhdGluZyBgTGFtYmRhYCBzY3JpcHRzLgotKiBGaXhlZCBidWcgaW4gYEdyZW1saW5Ec2xQcm9jZXNzb3JgIHdoZXJlIGNlcnRhaW4gcmV0dXJuIHR5cGVzIGluIGBUcmF2ZXJzYWxTb3VyY2VgIGRlZmluaXRpb25zIHdlcmUgbm90IGdlbmVyYXRpbmcgY29kZSB0aGF0IHdvdWxkIGNvbXBpbGUuCi0qIENoYW5nZWQgdGhlIGRlZmF1bHQgcmVhZCBhbmQgd3JpdGUgdGltZW91dCB2YWx1ZXMgZm9yIHRoZSBgVG9ybmFkb1RyYW5zcG9ydGAgdG8gYE5vbmVgIHRvIGRpc2FibGUgaXQuCi0qIEJ1bXBlZCB0byBHcm9vdnkgMi41LjE0LgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjQ5NiBHcmVtbGluRHNsUHJvY2Vzc29yIGZhaWxzIHdoZW4gU29jaWFsVHJhdmVyc2FsU291cmNlRHNsIG92ZXJyaWRlcyBjbG9zZQotKiBUSU5LRVJQT1AtMjUwNSBHcmVtbGluIFB5dGhvbiBDbGllbnQgUXVlcnkgVGltZXMgb3V0IGF0IDMwIHNlY29uZHMgaW5zdGVhZCBvZiB0aGUgc2VydmVyIHRpbWVvdXQKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjQ0NyBJbXByb3ZlIGhhbmRsaW5nIG9mIFN0YWNrT3ZlcmZsb3dFcnJvciBmb3IgbG9uZyB0cmF2ZXJzYWxzCi0qIFRJTktFUlBPUC0yNDg1IEludmFsaWQgaHR0cCB0ZXN0cyB3aXRoID9ncmVtbGluPTEtMQotKiBUSU5LRVJQT1AtMjUwMCBBZGQgbm9uZSgpIHN0ZXAgZm9yIGFsbCBHTFZzCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTEwLCAzLjQuMTAgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTQtOV1dCiA9PT0gVGlua2VyUG9wIDMuNC45IChSZWxlYXNlIERhdGU6IERlY2VtYmVyIDcsIDIwMjApCiAKLSogTW9kaWZpZWQgdGhlIHRleHQgb2YgYHByb2ZpbGUoKWAgb3V0cHV0IHRvIGhpZGUgc3RlcCBpbnN0YW5jZXMgaW5qZWN0ZWQgZm9yIHB1cnBvc2Ugb2YgY29sbGVjdGluZyBtZXRyaWNzLgotKiBCdW1wZWQgdG8gSmFja3NvbiAyLjExLnguCi0qIEJ1bXBlZCBOZXR0eSA0LjEuNTIuCi0qIEFkZGVkIGxhbWJkYSBzdXBwb3J0IGZvciBgZ3JlbWxpbi1qYXZhc2NyaXB0YC4KLSogUHJvdmlkZWQgYSBtb3JlIGNvbmNpc2Ugc3ludGF4IGZvciBjb25zdHJ1Y3Rpbmcgc3RyYXRlZ2llcyBpbiBHcm9vdnkuCi0qIEFsaWduZWQgYENvcmVJbXBvcnRzYCB3aXRoIGBHcm9vdnlUcmFuc2xhdG9yYCB0byBnZW5lcmF0ZSBtb3JlIHN1Y2NpbmN0IHN5bnRheC4KLSogSW1wcm92ZWQgYGdyZW1saW4tZ3Jvb3Z5YCB1bmRlcnN0YW5kaW5nIG9mIGB3aXRoU2FjaygpYCBvdmVybG9hZHMgdG8gYXZvaWQgZm9yY2VkIGNhc3RzLgotKiBNb3ZlZCBgVHJhbnNsYXRvcmAgaW5zdGFuY2VzIHRvIGBncmVtbGluLWNvcmVgLgotKiBQcmV2ZW50ZWQgYmFycmllcnMgZnJvbSBvdmVyLXJlYWNoaW5nIHRoZWlyIGxpbWl0cyBieSBvbmUuCi0qIEFkZGVkIGBDaGVja2VkR3JhcGhNYW5hZ2VyYCB0byBwcmV2ZW50IEdyZW1saW4gU2VydmVyIGZyb20gc3RhcnRpbmcgaWYgdGhlcmUgYXJlIG5vIGdyYXBocyBjb25maWd1cmVkLgotKiBGaXhlZCBidWcgaW4gYnl0ZWNvZGUgYEJpbmRpbmdzYCB3aGVyZSBjYWxsaW5nIGBvZigpYCBwcmlvciB0byBjYWxsaW5nIGEgY2hpbGQgdHJhdmVyc2FsIGluIHRoZSBzYW1lIHBhcmVudCB3b3VsZCBjYXVzZSB0aGUgaW5pdGlhbCBiaW5kaW5nIHRvIGJlIGxvc3QuCi0qIEVzdGFibGlzaGVkIGEgZGVmYXVsdCByZWFkIGFuZCB3cml0ZSB0aW1lb3V0IGZvciB0aGUgYFRvcm5hZG9UcmFuc3BvcnRgIGluIFB5dGhvbiwgYWxsb3dpbmcgaXQgdG8gYmUgY29uZmlndXJhYmxlLgotKiBEZWxlZ2F0ZWQgaGFuZGxpbmcgb2YgZXJyb25lb3VzIHJlc3BvbnNlIHRvIHRoZSB3b3JrZXIgdGhyZWFkIHBvb2wgaW5zdGVhZCBvZiBldmVudCBsb29wIHRocmVhZCBwb29sIGluIEphdmEgRHJpdmVyLgotKiBSZW1vdmVkIGBDb25uZWN0aW9uYCBmcm9tIGBDb25uZWN0aW9uIFBvb2xgIHdoZW4gc2VydmVyIGNsb3NlcyBhIGNvbm5lY3Rpb24gd2l0aCBubyBwZW5kaW5nIHJlcXVlc3RzIGluIEphdmEgRHJpdmVyLgotKiBJbXByb3ZlZCBpbml0aWFsaXphdGlvbiB0aW1lIG9mIEphdmEgRHJpdmVyIGlmIHRoZSBkZWZhdWx0IHNlcmlhbGl6ZXIgaXMgcmVwbGFjZWQuCi0qIERlcHJlY2F0ZWQgYHdpdGhHcmFwaCgpYCBpbiBmYXZvciBvZiBgd2l0aEVtYmVkZGVkKClgIG9uIGBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2VgLgotKiBBZGRlZCBzdXBwb3J0IGZvciBwZXItcmVxdWVzdCBsZXZlbCBjb25maWd1cmF0aW9ucywgbGlrZSB0aW1lb3V0cywgaW4gLk5FVCwgUHl0aG9uIGFuZCBKYXZhc2NyaXB0LgotKiBGaXhlZCBidWcgaW4gSmF2YXNjcmlwdCBgVHJhbnNsYXRvcmAgdGhhdCB3YXNuJ3QgaGFuZGxpbmcgY2hpbGQgdHJhdmVyc2FscyB3ZWxsLgotKiBQcmV2ZW50ZWQgR3JlbWxpbiBQeXRob24gc3VnYXIgZnJvbSBiZWluZyBjb25mdXNlZCBieSBQeXRob24gbWFnaWMgbWV0aG9kcy4KLSogQWxsb3dlZCBHcmVtbGluIFB5dGhvbiBzdWdhciBjYWxscyBmcm9tIGFub255bW91cyBjb250ZXh0LgotKiBJbXBsZW1lbnRlZCBgQXV0b0Nsb3NlYWJsZWAgb24gYE11bHRpSXRlcmF0b3JgLgotKiBGaXhlZCBhbiBpdGVyYXRvciBsZWFrIGluIGBIYXNDb250YWluZXJgLgotKiBGaXhlZCBidWcgaW4gYDpieXRlY29kZWAgY29tbWFuZCBwcmV2ZW50aW5nIHRyYW5zbGF0aW9ucyB3aXRoIHdoaXRlc3BhY2UgZnJvbSB3b3JraW5nIHByb3Blcmx5LgotKiBBZGRlZCBgcmVzZXRgIGFuZCBgY29uZmlnYCBvcHRpb25zIHRvIHRoZSBgOmJ5dGVjb2RlYCBjb21tYW5kIHRvIGFsbG93IGZvciBncmVhdGVyIGN1c3RvbWl6YXRpb24gb3B0aW9ucy4KLSogQWRkZWQgR3JhcGhTT04gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgdGhlIGBUaW5rZXJJb1JlZ2lzdHJ5YCB0byB0aGUgZGVmYXVsdCBgR3JhcGhTT05NYXBwZXJgIGNvbmZpZ3VyYXRpb24gdXNlZCBieSB0aGUgYDpieXRlY29kZWAgY29tbWFuZC4KLSogQWRkZWQgYEdyZW1saW5BU1RDaGVja2VyYCB0byBwcm92aWRlIGEgd2F5IHRvIGV4dHJhY3QgcHJvcGVydGllcyBvZiBzY3JpcHRzIGJlZm9yZSBkb2luZyBhbiBhY3R1YWwgYGV2YWwoKWAuCi0qIEF2b2lkZWQgY3JlYXRpbmcgdW5uZWNlc3NhcnkgZGV0YWNoZWQgb2JqZWN0cyBpbiBKVk0uCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGBUcmF2ZXJzYWxTdHJhdGVneWAgdXNhZ2UgaW4gSmF2YXNjcmlwdC4KLSogQWRkZWQgYFRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJTZXRTdXBwbGllcigpYCB0byBhbGxvdyBwcm92aWRlcnMgdG8gc3VwcGx5IHRoZWlyIG93biBgVHJhdmVyc2VyU2V0YCBpbnN0YW5jZXMuCi0qIFJlbGVhc2Ugc2VydmVyIHRocmVhZHMgd2FpdGluZyBvbiBjb25uZWN0aW9uIGlmIHRoZSBjb25uZWN0aW9uIGlzIGRlYWQuCi0qIEZpeGVkIGJ1ZyB3aGVyZSBzZXJ2ZXIgY2xvc2VzIEhUVFAgY29ubmVjdGlvbiBvbiByZXF1ZXN0IGVycm9yIGV2ZW4gaWYga2VlcCBhbGl2ZSBpcyBzZXQgdG8gdHJ1ZS4KLSogRGVwcmVjYXRlZCBkcml2ZXIgYENoYW5uZWxpemVyYCBrZWVwLWFsaXZlIHJlbGF0ZWQgbWV0aG9kcy4KLSogRGVsZWdhdGUgaGFuZGxpbmcgb2YgV2ViU29ja2V0IGhhbmRzaGFrZSB0byBOZXR0eSBpbnN0ZWFkIG9mIGN1c3RvbSBjb2RlIGluIEphdmEgRHJpdmVyLgotKiBEZWxlZ2F0ZSBkZXRlY3Rpb24gb2YgaWRsZSBjb25uZWN0aW9uIHRvIE5ldHR5IGluc3RlYWQgb2YgY3VzdG9tIGtlZXAgYWxpdmUgbG9naWMgZm9yIGBXZWJTb2NrZXRDaGFubmVsaXplcmAuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIFdlYlNvY2tldCBmcmFtZSBjb21wcmVzc2lvbiBleHRlbnNpb24gKCBbUkZDNzY5Ml0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc2OTIpICkgZm9yIGBXZWJTb2NrZXRDaGFubmVsaXplcmAgaW4gSmF2YS9QeXRob24gZHJpdmVyLgotKiBBZGRlZCBzZXJ2ZXIgc3VwcG9ydCBmb3IgV2ViU29ja2V0IGNvbXByZXNzaW9uIGV4dGVuc2lvbiAoIFtSRkM3NjkyXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzY5MikgKS4KLSogRml4ZWQgYnVnIHdpdGggQnl0ZWNvZGUgc2VyaWFsaXphdGlvbiB3aGVuIGBCeXRlY29kZS50b1N0cmluZygpYCBpcyB1c2VkIGluIEphdmFzY3JpcHQuCi0qIEZpeGVkICJ0b1N0cmluZyIgZm9yIFAgYW5kIFRleHRQIHRvIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIGNvbnRhaW5pbmcgYSBzdHJpbmcgcHJlZGljYXRlIGluIEphdmFzY3JpcHQuCi0qIEZpeGVkIGEgYnVnIHdoaWNoIGNvdWxkIGNhdXNlIEphdmEgZHJpdmVyIHRvIGhhbmcgd2hlbiB1c2luZyBgUmVzdWx0U2V0LnN0YXR1c0F0dHJpYnV0ZXMoKWAKLSogQWRkZWQgYSBsaXN0ZW5lciB0byBqYXZhc2NyaXB0J3MgYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gIHRvIGZpbmQgbm90ZSBlcnJvcnMgZnJvbSB3ZWJzb2NrZXQgY29ubmVjdGlvbiBzZXR1cC4KLSogRml4ZWQgYnVnIHdpdGggYFJlc2VydmVkVmVyaWZpY2F0aW9uU3RyYXRlZ3kuZ2V0Q29uZmlndXJhdGlvbigpYCB3aGljaCB3YXMgb21pdHRpbmcgdGhlIHJlc2VydmVkIGBrZXlzYCB2YWx1ZS4KLSogQ2hhbmdlZCBhbGwgY29uZmlndXJhdGlvbiBrZXlzIG9uIGBBYnN0cmFjdFdhcm5pbmdWZXJpZmljYXRpb25TdHJhdGVneWAgaW1wbGVtZW50YXRpb25zIHRvIGBwdWJsaWNgLgotKiBEZXByZWNhdGVkIGBCeXRlY29kZVV0aWxgIGFuZCBtZXJnZWQgaXRzIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGV4aXN0aW5nIGBCeXRlY29kZUhlbHBlcmAuCi0qIEFkZGVkIGNvbmZpZ3VyaW5nIGltcGxlbWVudGF0aW9uIGluIEhhc1N0ZXAKLSogUmVtb3ZlIHN0YXRpYyBpbml0aWFsaXphdGlvbiBmb3IgYEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMWQwYCBhbmQgYEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMWQwYCBpbiBKYXZhIGRyaXZlci4KLSogQ29ubmVjdGlvbnMgdG8gdGhlIHNlcnZlciBpbiBhIGNvbm5lY3Rpb24gcG9vbCBhcmUgY3JlYXRlZCBpbiBwYXJhbGxlbCBpbnN0ZWFkIG9mIHNlcmlhbGx5IGluIEphdmEgRHJpdmVyLgotKiBDb25uZWN0aW9uIHBvb2xzIGZvciBtdWx0aXBsZSBlbmRwb2ludHMgYXJlIGNyZWF0ZWQgaW4gcGFyYWxsZWwgaW5zdGVhZCBvZiBzZXJpYWxseSBpbiBKYXZhIERyaXZlci4KLSogSW50cm9kdWNlZCBuZXcgSG9zdE5vdEF2YWlsYWJsZSBleGNlcHRpb24gdG8gcmVwcmVzZW50IGNhc2VzIHdoZW4gbm8gc2VydmVyIHdpdGggYWN0aXZlIGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlLgotKiBEb24ndCB3YWl0IGZvciBuZXcgcmVxdWVzdHMgZHVyaW5nIHNodXRkb3duIG9mIGV2ZW50IGxvb3AgZ3JvdXAgaW4gSmF2YSBEcml2ZXIuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yMzY0IEluamVjdGVkIFByb2ZpbGVTdGVwIHNob3VsZCBub3QgYmUgZGlzcGxheWVkIGluIGNoaWxkIHRyYXZlcnNhbHMKLSogVElOS0VSUE9QLTIzNjkgQ29ubmVjdGlvbnMgaW4gQ29ubmVjdGlvblBvb2wgYXJlIG5vdCByZXBsYWNlZCBpbiBiYWNrZ3JvdW5kIHdoZW4gdW5kZXJseWluZyBjaGFubmVsIGlzIGNsb3NlZAotKiBUSU5LRVJQT1AtMjQwMyBHcmVtbGluIGphdmFzY3JpcHQgVHJhbnNsYXRvciBkb2VzIG5vdCBoYW5kbGUgY2hpbGQgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjQwNSBncmVtbGlucHl0aG9uOiB0cmF2ZXJzYWwgaGFuZ3Mgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBidXQgdGhlIHNlcnZlcnMgc3RvcHMgcmVzcG9uZGluZyBsYXRlcgotKiBUSU5LRVJQT1AtMjQwOCBJdGVyYXRvciBsZWFrIGluIEhhc0NvbnRhaW5lcgotKiBUSU5LRVJQT1AtMjQwOSBqczogRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBuZXZlciB0aW1lcyBvdXQgaWYgc2VydmVyIHVyaSBub3QgYXZhaWxhYmxlLgotKiBUSU5LRVJQT1AtMjQxMCBGcmVlIHVwIHNlcnZlciB0aHJlYWRzIHdoZW4gY2xpZW50IGlzIGNsb3NlZAotKiBUSU5LRVJQT1AtMjQyNSBTZXJ2ZXIgY2xvc2VzIEhUVFAgY29ubmVjdGlvbiBmb3Iga2VlcEFsaXZlIGFzIHRydWUKLSogVElOS0VSUE9QLTI0MzIgR2VuZXJhdGUgY29ycmVjdCB0b1N0cmluZygpIHJlcHJlc2VudGF0aW9uIG9mIGJ5dGVjb2RlIGluIEphdmFzY3JpcHQKLSogVElOS0VSUE9QLTI0MzMgdHlwbyBpbiBqYXZhZG9jcyBtYXRjaCgpIFR5cGUgUGFyYW1ldGVycwotKiBUSU5LRVJQT1AtMjQzNSBHcmVtbGluIFB5dGhvbiBzdWdhciBzeW50YXggZm9yIHZhbHVlcygpIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcHJvYmxlbXMKLSogVElOS0VSUE9QLTI0MzcgZ3JlbWxpbi1kcml2ZXIgaGFuZ3MgaWYgUmVzdWx0U2V0LnN0YXR1c0F0dHJpYnV0ZXMoKS5nZXQoKSBpcyBjYWxsZWQgd2hlbiB0aGUgcmVxdWVzdCB0aHJvd3MKLSogVElOS0VSUE9QLTI0MzkgUCBhbmQgVGV4dFAgdG9TdHJpbmcoKSBpcyBicm9rZW4KLSogVElOS0VSUE9QLTI0NTggQnl0ZWNvZGUgQmluZGluZ3MgbG9zdCB3aGVuIGZvbGxvd2VkIGJ5IGEgY2hpbGQgdHJhdmVyc2FsCi0qIFRJTktFUlBPUC0yNDY1IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSBmaWxlIGhhbmRsaW5nIGlzIGludmFsaWQgb24gd2luZG93cwotKiBUSU5LRVJQT1AtMjQ3NSBCYXJyaWVyIHN0ZXAgdG91Y2hlcyBvbmUgbW9yZSBlbGVtZW50IG9mIG5leHQgbG9vcAotKiBUSU5LRVJQT1AtMjQ3OCBDb25zb2xlIGJ5dGUgY29kZSB0cmFuc2xhdG9yIGhhcyBpc3N1ZXMgd2l0aCAibmV3IERhdGUoKSIKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjAwMSBTdXBwb3J0IGxhbWJkYXMgaW4gSmF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjA1NCBTdXBwb3J0IFRyYXZlcnNhbFN0cmF0ZWd5IHNwZWNpZmljYXRpb24gaW4gZ3JlbWxpbi1qYXZhc2NyaXB0Ci0qIFRJTktFUlBPUC0yMjk2IFBlciBxdWVyeSB0aW1lb3V0IG5vdCB3b3JraW5nIGZyb20gUHl0aG9uCi0qIFRJTktFUlBPUC0yMzkyIEltcHJvdmUgbW9kdWxlIGxldmVsIGRvY3VtZW50YXRpb24gZm9yIEdMVnMKLSogVElOS0VSUE9QLTIzOTYgVHJhdmVyc2VyU2V0IHNob3VsZCBiZSBleHRlbmRhYmxlIGZvciBHcmFwaERCIHByb3ZpZGVyCi0qIFRJTktFUlBPUC0yMzk3IERvbid0IGNyZWF0ZSB0aGUgZGVmYXVsdCBHeXJvIHNlcmlhbGl6ZXIgaWYgdGhlIGNhbGxlciBzcGVjaWZpZXMgYSBkaWZmZXJlbnQgb25lCi0qIFRJTktFUlBPUC0yNDAxIFVwZ3JhZGUgSmFja3Nvbi1kYXRhYmluZCB0byAyLjExLngKLSogVElOS0VSUE9QLTI0MDYgRGVsZWdhdGUgcHJvY2Vzc2luZyBmcm9tIGV2ZW50IGxvb3AgdG8gd29ya2VyIHRocmVhZHMKLSogVElOS0VSUE9QLTI0MTIgQWRkIG1pc3NpbmcgcXVlcnkgdGVzdHMKLSogVElOS0VSUE9QLTI0MTMgUHJlZmVyIHdpdGhFbWJlZGRlZCgpIHRvIHdpdGhHcmFwaCgpIG9uIEFub255bW91c1RyYXZlcnNhbFNvdXJjZQotKiBUSU5LRVJQT1AtMjQxNSBBdm9pZCB1bm5lY2Vzc2FyeSBkZXRhY2hlZCBvYmplY3RzIGlmIG5vdCByZXF1aXJlZAotKiBUSU5LRVJQT1AtMjQxNiBNdWx0aUl0ZXJhdG9yIHNob3VsZCBpbXBsZW1lbnQgQXV0b0Nsb3NlYWJsZQotKiBUSU5LRVJQT1AtMjQyMCBTdXBwb3J0IHBlciBxdWVyeSByZXF1ZXN0IG9wdGlvbnMgaW4gLk5FVAotKiBUSU5LRVJQT1AtMjQyMSBTdXBwb3J0IHBlciBxdWVyeSBvcHRpb25zIGluIGphdmFzY3JpcHQKLSogVElOS0VSUE9QLTI0MjYgVXNlIE5ldHR5J3MgV2ViU29ja2V0Q2xpZW50UHJvdG9jb2xIYW5kbGVyCi0qIFRJTktFUlBPUC0yNDI3IFNpbXBsaWZ5IE5ldHR5IHJlZmVyZW5jZSBjb3VudGluZwotKiBUSU5LRVJQT1AtMjQzMCBMb29waW5nIFJlY2lwaWVzCi0qIFRJTktFUlBPUC0yNDMxIE9wZXJhdGluZyBvbiBEcm9wcGVkIEVsZW1lbnRzIFJlY2lwZXMKLSogVElOS0VSUE9QLTI0MzYgVGhlIGdyZW1saW4gc2VydmVyIHN0YXJ0cyBldmVuIGlmIGFsbCBncmFwaHMgaW5zdGFudGlhdGlvbiBoYXMgZmFpbGVkCi0qIFRJTktFUlBPUC0yNDM4IFByb3ZpZGUgYSB3YXkgZm9yIHNjcmlwdHMgdG8gcmVzcGVjdCB3aXRoKCkgc3BlY2lmaWNhdGlvbiBvZiB0aW1lb3V0Ci0qIFRJTktFUlBPUC0yNDQwIFNpbXBsaWZ5IGRyaXZlciBieSBkZWxlZ2F0aW5nIGtlZXBBbGl2ZSBsb2dpYyB0byBOZXR0eQotKiBUSU5LRVJQT1AtMjQ0MSBBZGQgY29tcHJlc3Npb24gdG8gV2ViU29ja2V0IGZyYW1lcyBzZW50IGZyb20gY2xpZW50Ci0qIFRJTktFUlBPUC0yNDQyIE1ha2UgVHJhbnNsYXRvcnMgdGhhdCB3b3JrIGluIEphdmEgcGFydCBvZiBncmVtbGluLWNvcmUKLSogVElOS0VSUE9QLTI0NDUgU3BlZWQgdXAgY2xpZW50IGluaXRpYWxpemF0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjQ0NiBBZGQgUmVjaXBlIGZvciBPcHRpb25hbCBMb29waW5nCi0qIFRJTktFUlBPUC0yNDUzIEFkZCBXZWJTb2NrZXQgY29tcHJlc3Npb24gdG8gZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTI0NjEgQWxpZ24gQ29yZUltcG9ydHMgd2l0aCBHcm9vdnlUcmFuc2xhdG9yCi0qIFRJTktFUlBPUC0yNDYyIER1cGxpY2F0ZWQgQnl0ZWNvZGVVdGlsIGFuZCBCeXRlY29kZUhlbHBlciBjbGFzc2VzCi0qIFRJTktFUlBPUC0yNDY2IEltcHJvdmUgc3ludGF4IGZvciBHcm9vdnkgc2NyaXB0cyB0aGF0IHVzZSB3aXRoU3RyYXRlZ2llcygpCi0qIFRJTktFUlBPUC0yNDY4IFN0YWJpbGl6ZSBzaG91bGRQcm9jZXNzU2Vzc2lvblJlcXVlc3RzSW5PcmRlcigpIHRlc3QKLSogVElOS0VSUE9QLTI0NjkgS3JiRXhjZXB0aW9uIC0gUHJpbmNpcGFsIGRvZXMgbm90IGV4aXN0IGluIHRlc3QKLSogVElOS0VSUE9QLTI0NzQgd2l0aFNhY2soKSBHcm9vdnkgdHJhbnNsYXRpb24gb3V0cHV0IGNvdWxkIGJlIHNpbXBsaWZpZWQKLSogVElOS0VSUE9QLTI0NzkgUHJvdmlkZSBhIHdheSB0byBzZXQgYSBjdXN0b20gR3JhcGhTT05NYXBwZXIgZm9yIDpieXRlY29kZSBjb21tYW5kCi0qIFRJTktFUlBPUC0yNDgyIFJlbmFtZSB3c0Nvbm5lY3Rpb25UaW1lb3V0IHRvIGNvbm5lY3Rpb25TZXR1cFRpbWVvdXQKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy40LnguYXNjaWlkb2MjcmVsZWFzZS0zLTQtOSwgMy40LjkgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTQtOF1dCiA9PT0gVGlua2VyUG9wIDMuNC44IChSZWxlYXNlIERhdGU6IEF1Z3VzdCAzLCAyMDIwKQogCi0qIEZpeGVkIGJ1ZyBpbiBgaGFzKFQsVHJhdmVyc2FsKWAgd2hlcmUgcmVzdWx0cyB3ZXJlIG5vdCBiZWluZyByZXR1cm5lZC4KLSogRml4ZWQgYnVnIGluIGBzZWxlY3QoVHJhdmVyc2FsKWAgd2hlcmUgc2lkZS1lZmZlY3RzIHdlcmUgZ2V0dGluZyBsb3N0IGlmIGFjY2Vzc2VkIGZyb20gdGhlIGNoaWxkIHRyYXZlcnNhbC4KLSogRml4ZWQgYXV0aG9yaXphdGlvbiBidWcgd2hlbiB1c2luZyBgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyYCB3aXRoIGtlZXAtYWxpdmUgZW5hYmxlZC4KLSogRml4ZWQgYnVnIGluIG9wdGlvbi1sZXNzIGNvbnN0cnVjdGlvbiBvZiBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgaW4gSmF2YXNjcmlwdC4KLSogQnVtcGVkIEphY2tzb24gdG8gMi45LjEwLjUuCi0qIEltcHJvdmVkIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBmb3IgZ2xvYmFsIHNjb3BlIGBzYW1wbGUoKWAgb3BlcmF0aW9ucy4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTIyODggR2V0IENvbm5lY3Rpb25Qb29sQnVzeUV4Y2VwdGlvbiBhbmQgdGhlbiBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbnMKLSogVElOS0VSUE9QLTIzNTIgR3JlbWxpbiBQeXRob24gZHJpdmVyIGRlZmF1bHQgcG9vbCBzaXplIG1ha2VzIEdyZW1saW4ga2VlcC1hbGl2ZSBkaWZmaWN1bHQKLSogVElOS0VSUE9QLTIzNzQgU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlciBjYW4ndCBleHRyYWN0IGF1dGhvcml6YXRpb24KLSogVElOS0VSUE9QLTIzODMgaGFzKFQsVHJhdmVyc2FsKSBkb2VzIG5vdCByZXR1cm4gcmVzdWx0cwotKiBUSU5LRVJQT1AtMjM4NCBJbmplY3QgYW5kIHdpdGhTaWRlRWZmZWN0IGNhdXNpbmcgZGlmZmVyZW50IG91dGNvbWVzIGluIG9yZGVyIHN0ZXAKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjMyOCBEbyBub3QgY2xvc2UgYWxsIGNvbm5lY3Rpb25zIGlmIGp1c3Qgb25lIGhhcyBiZWNhbWUgY2xvc2VkCi0qIFRJTktFUlBPUC0yMzc2IFByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBjb250cm9sbGVkIGJ5IHdlaWdodCB3aGVuIHVzaW5nIHNhbXBsZSBzdGVwCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTgsIDMuNC44IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy00LTddXQogPT09IFRpbmtlclBvcCAzLjQuNyAoUmVsZWFzZSBEYXRlOiBKdW5lIDEsIDIwMjApCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy0zLTExLCAzLjMuMTE+Pi4KLQotKiBHcmVtbGluLk5FVCBkcml2ZXI6IEZpeGVkIGEgYE51bGxSZWZlcmVuY2VFeGNlcHRpb25gIGFuZCB0aHJvdyBjbGVhciBleGNlcHRpb24gaWYgcmVjZWl2ZWQgbWVzc2FnZSBpcyBlbXB0eS4KLSogQnVtcGVkIHRvIEdyb292eSAyLjUuMTEuCi0qIE1vZGlmaWVkIGBJbXBvcnRHcmVtbGluUGx1Z2luYCB0byBhbGxvdyBmb3IgZmllbGQgaW1wb3J0cy4KLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnZSBmb3IgYG1hdGgoKWAgd2hlbiB0aGUgc2VsZWN0ZWQga2V5IGluIGEgYE1hcGAgaXMgYG51bGxgIG9yIG5vdCBhIGBOdW1iZXJgLgotKiBBZGRlZCBgOmNsc2AgY29tbWFuZCB0byBHcmVtbGluIENvbnNvbGUgdG8gY2xlYXIgdGhlIHNjcmVlbi4KLSogQnVtcGVkIE5ldHR5IDQuMS40OS4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTIxOTIgR3JlbWxpbi5OZXQuRHJpdmVyLkNvbm5lY3Rpb24uUGFyc2UgdGhyb3dzIGEgTnVsbFJlZmVyZW5jZUV4Y2VwdGlvbgotKiBUSU5LRVJQT1AtMjM0NSBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIE1hcCBrZXkgaXMgbm90IGZvdW5kIGZvciBtYXRoKCkKLSogVElOS0VSUE9QLTIzNDcgUmVtb3ZlIGludmFsaWQgc2VydmljZSBkZXNjcmlwdG9ycyBmcm9tIGdyZW1saW4tc2hhZGVkCi0qIFRJTktFUlBPUC0yMzUwIGNsb25lKCkgaXMgbm90IGRlZXAgY29weWluZyBUcmF2ZXJzYWwgaW50ZXJuYWxzCi0qIFRJTktFUlBPUC0yMzUxIExvY2FsIE1hcCBvcmRlcmluZyBvZiBrZXlzIGNhbiBnZW5lcmF0ZSBjYXN0IGVycm9ycwotKiBUSU5LRVJQT1AtMjM1MyBFcnJvciB3aGlsZSBTaHV0dGluZyBEb3duIEdyZW1saW4gU2VydmVyCi0qIFRJTktFUlBPUC0yMzU1IEphY2tzb24tZGF0YWJpbmQgdmVyc2lvbiBpbiBHcmVtbGluIHNoYWRlZCBkZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGluY3JlYXNlZCAgLSBpbnRyb2R1Y2VzIHZ1bG5lcmFiaWxpdHkgaXNzdWVzCi0qIFRJTktFUlBPUC0yMzYwIGZhaWxlZCB0byBkZXNlcmlhbGl6ZXIgaW50MzIgd2hlbiBncmVtbGluLXB5dGhvbiBzdWJtaXQgYnl0ZWNvZGUgd2l0aCBhIGJpZyBpbnQgdmFsdWUKLSogVElOS0VSUE9QLTIzNjUgTGF6eUJhcnJpZXJTdHJhdGVneSBhZGRzIGEgTm9PcEJhcnJpZXJTdGVwIHdoZW4gcHJvZmlsZSgpIGlzIHByZXNlbnQKLSogVElOS0VSUE9QLTIzNjggSkFWQV9PUFRJT05TIGFyZSBub3QgcHJvcGVybHkgZXhwYW5kZWQgaW4gZ3JlbWxpbi1jb25zb2xlCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIyMTUgQmV0dGVyIGV4Y2VwdGlvbiBtZXNzYWdlIGZvciBjb25uZWN0aW9uIHByb2JsZW1zCi0qIFRJTktFUlBPUC0yMzM2IEFsbG93IGNsb3NlIG9mIGNoYW5uZWwgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3Igc2VydmVyCi0qIFRJTktFUlBPUC0yMzM5IEdyZW1saW4uTmV0OiBVcGRhdGUgU3lzdGVtLk5ldC5XZWJTb2NrZXRzLkNsaWVudCBkZXBlbmRlbmN5Ci0qIFRJTktFUlBPUC0yMzU0IERvY3VtZW50IHJlY29tbWVuZGF0aW9uIHRvIHJldXNlIGdyYXBoIHRyYXZlcnNhbCBzb3VyY2UKLSogVElOS0VSUE9QLTIzNTcgQWRkIGEgY29tbWFuZCB0byBjbGVhciB0aGUgR3JlbWxpbiBDb25zb2xlIHNjcmVlbgotKiBUSU5LRVJQT1AtMjM3MSBBZGQgcG9zc2liaWxpdHkgdG8gaW1wb3J0IGNvbnN0YW50cyB3aXRoIEltcG9ydEdyZW1saW5QbHVnaW4KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy40LnguYXNjaWlkb2MjcmVsZWFzZS0zLTQtNywgMy40LjcgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTQtNl1dCiA9PT0gVGlua2VyUG9wIDMuNC42IChSZWxlYXNlIERhdGU6IEZlYnJ1YXJ5IDIwLCAyMDIwKQogCi0qIEZpeGVkIGJ1ZyBpbiBgZHJvcCgpYCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGluIDMuNC41LgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjMzOCBkcm9wKCkgbm90IHJlbW92aW5nIGFsbCBlZGdlL21ldGEgcHJvcGVydGllcworUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjQueC5hc2NpaWRvYyNyZWxlYXNlLTMtNC02LCAzLjQuNiBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNC01XV0KID09PSBUaW5rZXJQb3AgMy40LjUgKFJlbGVhc2UgRGF0ZTogRmVicnVhcnkgMywgMjAyMCkKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTMtMTAsIDMuMy4xMD4+LgotCi0qIEV4cGFuZGVkIHRoZSB1c2Ugb2YgYGJ5KFN0cmluZylgIG1vZHVsYXRvciBzbyB0aGF0IGl0IGNhbiB3b3JrIG9uIGBNYXBgIGFzIHdlbGwgYXMgYEVsZW1lbnRgLgotKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGBieShTdHJpbmcpYCBzbyB0aGF0IGl0IGlzIG1vcmUgY2xlYXIgYXMgdG8gd2hhdCB0aGUgcHJvYmxlbSBpcwotKiBCdW1wZWQgdG8gTmV0dHkgNC4xLjQyCi0qIEltcHJvdmVkIFNQQVJRTCBxdWVyeSB0cmFuc2xhdGlvbiB0byBiZXR0ZXIgYWxsb3cgZm9yIGluZGV4IG9wdGltaXphdGlvbnMgZHVyaW5nIGV4ZWN1dGlvbi4KLSogSW1wcm92ZWQgR3JlbWxpbiBTZXJ2ZXIgd2Vic29ja2V0IGhhbmRsaW5nIHByZXZlbnRpbmcgYXV0b21hdGljIHNlcnZlciBjbG9zZSBvZiB0aGUgY2hhbm5lbCBmb3IgcHJvdG9jb2wgZXJyb3JzLgotKiBJbnRyb2R1Y2VkIGludGVybmFsIGBCdWZmZXJgIEFQSSBhcyBhIHdheSB0byB3cmFwIE5ldHR5J3MgQnVmZmVyIEFQSSBhbmQgbW92ZWQgYEdyYXBoQmluYXJ5UmVhZGVyYCwgYEdyYXBoQmluYXJ5V3JpdGVyYCBhbmQgYFR5cGVTZXJpYWxpemVyPFQ+YCB0byBgZ3JlbWxpbi1jb3JlYC4KLSogVW5pZmllZCB0aGUgYmVoYXZpb3Igb2YgcHJvcGVydHkgY29tcGFyaXNvbjogb25seSBjb21wYXJlIGtleSZ2YWx1ZS4KLSogU3VwcG9ydGVkIGBoYXNLZXkoKWAgYW5kIGBoYXNWYWx1ZSgpYCBzdGVwIGZvciBlZGdlIHByb3BlcnR5IGFuZCBtZXRhIHByb3BlcnR5LCBsaWtlIGBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KCd4eCcpYC4KLSogTW9kaWZpZWQgZHJpdmVyIHRvIHNlbmQgYG92ZXJyaWRlUmVxdWVzdElkYCBhbmQgYHVzZXJBZ2VudGAgdG8gc2VydmVyIHdoZW4gdGhleSBhcmUgcHJlc2VudCBpbiBgUmVxdWVzdE9wdGlvbnNgIGZvciBieXRlY29kZSByZXF1ZXN0cy4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTIxNzUgRXhlY3V0b3IgdGhyZWFkIGlzIG5vdCByZXR1cm5lZCBvbiBjaGFubmVsIGNsb3NlCi0qIFRJTktFUlBPUC0yMjY2IEtlZXAgYWxpdmUgbm90IHN0YXJ0ZWQgYXQgY29ubmVjdGlvbiBjcmVhdGlvbgotKiBUSU5LRVJQT1AtMjI3NCBUZXN0IG9mIFRpbmtlckdyYXBoIEdyZW1saW4gZmFpbCBvbiBXaW5kb3dzIGFuZCBub24gRU4gbG9jYWxlCi0qIFRJTktFUlBPUC0yMzE4IEVkZ2UgcHJvcGVydGllcyBkZWR1cCgpIG5vdCB3b3JrIHdpdGggc3BhcmstZ3JlbWxpbiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIzMzIgSmF2YVNjcmlwdCBHTFY6IHN0cnVjdHVyZSBlbGVtZW50IHRvU3RyaW5nKCkgc2hvdWxkIGludGVybmFsbHkgY2FsbCB0b1N0cmluZygpCi0qIFRJTktFUlBPUC0yMzMzIEphdmFTY3JpcHQgR0xWOiBHcmFwaFNPTjIvMyBFZGdlIGRlc2VyaWFsaXphdGlvbiBpcyBpbnZhbGlkCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE3MzMgaGFzS2V5LCBoYXNWYWx1ZXMgc2hvdWxkIHdvcmsgb24gRWxlbWVudCBhbmQgUHJvcGVydHkKLSogVElOS0VSUE9QLTIyNjIgSW1wcm92ZSBOZXR0eSBwcm90b2NvbCBoYW5kbGluZwotKiBUSU5LRVJQT1AtMjMwNSBHcmFwaEJpbmFyeTogV3JhcCBCdWZmZXIgQVBJCi0qIFRJTktFUlBPUC0yMzA3IEFkZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBmb3IgYmFkbHkgY29uZmlndXJlZCBDaGFubmVsaXplcgotKiBUSU5LRVJQT1AtMjMwOSBCdW1wIGdyZW1saW5weXRob24gdG8gVG9ybmFkbyA1LngKLSogVElOS0VSUE9QLTIzMTQgRW1wbG95IGJ5KFN0cmluZykgZm9yIE1hcCB3aGVuIHBvc3NpYmxlIGFuZCBpbXByb3ZlIGVycm9ycyBhcm91bmQgaW5jb3JyZWN0IHR5cGVzCi0qIFRJTktFUlBPUC0yMzE1IEltcGxlbWVudCBzb21lIGZvcm0gb2YgY2xvbmUoKSBvciByZXNldCgpIGZvciBUcmF2ZXJzYWwgaW4gR0xWcwotKiBUSU5LRVJQT1AtMjMyMCBbU0VDVVJJVFldIFhNTElucHV0RmFjdG9yeSBpbml0aWFsaXphdGlvbiBpbiBHcmFwaE1MUmVhZGVyIGludHJvZHVjZXMKLSogVElOS0VSUE9QLTIzMjIgRGVwcmVjYXRlIEp5dGhvbiBzdXBwb3J0Ci0qIFRJTktFUlBPUC0yMzI0IERlcHJlY2F0ZSB0aGUgcmF3IE5JTyBzdXBwb3J0IGluIHRoZSBKYXZhIGRyaXZlcgotKiBUSU5LRVJQT1AtMjMyNSBHZW5lcmF0ZSB0cmF2ZXJzYWxzIHRoYXQgd2lsbCBiZXR0ZXIgeWllbGQgaW5kZXggbG9va3VwcyB3aXRoIFNQQVJRTAotKiBUSU5LRVJQT1AtMjMyOSBKYXZhU2NyaXB0IEdMVjogVXBkYXRlIHdlYnNvY2tldCBsaWJyYXJ5IGRlcGVuZGVuY3kKLSogVElOS0VSUE9QLTIzMzAgSmF2YVNjcmlwdCBHTFYgc2hvdWxkIGV4cG9zZSBHcmFwaFNPTjJXcml0ZXIgYW5kIEdyYXBoU09OUmVhZGVyCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTUsIDMuNC41IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy00LTRdXQogPT09IFRpbmtlclBvcCAzLjQuNCAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE0LCAyMDE5KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMy05LCAzLjMuOT4+LgotCi0qIFByb3ZpZGVkIHN1cHBvcnQgZm9yIERTTHMgYnkgd2F5IG9mIHJlbW90ZSBjb25uZWN0aW9ucyB0aHJvdWdoIGBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2VgLgotKiBBZGRlZCBgZWxlbWVudE1hcCgpYCBzdGVwLgotKiBBZGRlZCBHcmFwaEJpbmFyeSBzdXBwb3J0IGZvciBQeXRob24uCi0qIEFsbG93ZWQgZm9yIGVtYmVkZGVkIG1hcCBhc3NlcnRpb25zIGluIEdMViB0ZXN0cy4KLSogQWRkZWQgYERpcmVjdGlvbmAgZGVzZXJpYWxpemF0aW9uIHN1cHBvcnQgaW4gR0xWcy4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTIxNTkgRXZlbnRTdHJhdGVneSBkb2Vzbid0IGhhbmRsZSBtdWx0aS12YWx1ZWQgcHJvcGVydGllcwotKiBUSU5LRVJQT1AtMjI3NiBObyBjb25zdHJ1Y3RvciBmb3IgcmVtb3RlIGNvbm5lY3Rpb24gaW4gRFNMIGdlbmVyYXRlZCB0cmF2ZXJzYWwgc291cmNlCi0qIFRJTktFUlBPUC0yMjgzIEdyYXBoU3RlcCdzIGlkcyBudWxsIGV4Y2VwdGlvbgotKiBUSU5LRVJQT1AtMjI4NSBFcnJvciBvYmplY3QgaXMgdW5yZWFjaGFibGUKLSogVElOS0VSUE9QLTIyODkgVXNlIGFkZHJlc3MgaW5zdGVhZCBvZiBob3N0bmFtZSBmb3IgY29ubmVjdGlvbgotKiBUSU5LRVJQT1AtMjI5MCBKYXZhc2NyaXB0IEdMViBjb25uZWN0aW9uIHJlZnVzZWQgZXJyb3IgaGFuZGxpbmcKLSogVElOS0VSUE9QLTIyOTEgVHJhdmVyc2FsRXhwbGFuYXRpb24gZGVzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OCi0qIFRJTktFUlBPUC0yMjk4IEJ5dGVjb2RlLmphdmEgIGZsYXR0ZW5Bcmd1bWVudHMgdGhyb3cgZXhjZXB0aW9uIHdoZW4gbnVsbAotKiBUSU5LRVJQT1AtMjMwMyBHcmVtbGluRHNsIGdlbmVyYXRlIGFkZFYgaW5zdGVhZCBvZiBhZGRFCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE4MTAgQWRkIExhbWJkYS5iaW5hcnlPcGVyYXRvciBhbmQgTGFtYmRhLnVuYXJ5T3BlcmF0b3IKLSogVElOS0VSUE9QLTE4MzggUHl0aG9uIHNhbXBsZSBzY3JpcHQKLSogVElOS0VSUE9QLTIwNDYgR3JlbWxpbi1QeXRob246IFN1cHBvcnQgY3VzdG9tIHJlcXVlc3QgaGVhZGVycyBpbiBXZWJTb2NrZXQgcmVxdWVzdAotKiBUSU5LRVJQT1AtMjIxMyBSZXBsYWNlIHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0IGluIGZhdm9yIG9mIHNvbWV0aGluZyBtb3JlIHN1aXRhYmxlIHRvIGJ5dGVjb2RlCi0qIFRJTktFUlBPUC0yMjc1IFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIDIuOS45LjMrCi0qIFRJTktFUlBPUC0yMjc3IFB5dGhvbiBzZGsgcG9zdHBvbmUgdGhlIHRpbWluZyB0byBjcmVhdGUgdHJhbnNwb3J0Ci0qIFRJTktFUlBPUC0yMjc5IEdyYXBoQmluYXJ5IHN1cHBvcnQgaW4gUHl0aG9uCi0qIFRJTktFUlBPUC0yMjgwIFByZXZlbnQgdXNlIG9mIFQgdmFsdWVzIGFzIHByb3BlcnR5IGtleSBvdmVybG9hZHMKLSogVElOS0VSUE9QLTIyODQgTWFrZSBpdCBlYXNpZXIgdG8gcmV0dXJuIG1vcmUgc3RydWN0dXJlIG9mIGdyYXBoIGVsZW1lbnRzCi0qIFRJTktFUlBPUC0yMzAyIEFkZCBpc09uR3JhcGhDb21wdXRlcigpIGZpZWxkIGFjY2Vzc29yIHRvIEVsZW1lbnRNYXBTdGVwCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTQsIDMuNC40IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy00LTNdXQogPT09IFRpbmtlclBvcCAzLjQuMyAoUmVsZWFzZSBEYXRlOiBBdWd1c3QgNSwgMjAxOSkKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTMtOCwgMy4zLjg+Pi4KLQotKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgb24gdGltZW91dHMgcmV0dXJuZWQgdG8gdGhlIGNvbnNvbGUgZnJvbSBgOj5gLgotKiBBZGRlZCBhIGB0b1N0cmluZygpYCBzZXJpYWxpemVyIGZvciBHcmFwaEJpbmFyeS4KLSogQ29uZmlndXJlZCB0aGUgR3JlbWxpbiBDb25zb2xlIHRvIHVzZSBHcmFwaEJpbmFyeSBieSBkZWZhdWx0LgotKiBGaXhlZCB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IGZvciBlbXB0eSBpdGVyYXRvcnMgaW4gR3JlbWxpbiBTZXJ2ZXIuCi0qIERlcHJlY2F0ZWQgYE1lc3NhZ2VTZXJpYWxpemVyYCBpbXBsZW1lbnRhdGlvbnMgZm9yIEdyeW8gaW4gR3JlbWxpbiBTZXJ2ZXIuCi0qIERlcHJlY2F0ZWQgYFNlcmlhbGl6ZXJzYCBlbnVtIHZhbHVlcyBvZiBgR1JZT19WMUQwYCBhbmQgYEdSWU9fVjNEMGAuCi0qIERlcHJlY2F0ZWQgYFNlclRva2Vuc2AgdmFsdWVzIG9mIGBNSU1FX0dSWU9fVjFEMGAgYW5kIGBNSU1FX0dSWU9fVjNEMGAuCi0qIEFkZGVkIGEgRG9ja2VyIGNvbW1hbmQgdG8gc3RhcnQgR3JlbWxpbiBTZXJ2ZXIgd2l0aCB0aGUgc3RhbmRhcmQgR0xWIHRlc3QgY29uZmlndXJhdGlvbnMuCi0qIEFkZGVkIGBhZ2dyZWdhdGUoU2NvcGUsU3RyaW5nKWAgYW5kIGRlcHJlY2F0ZWQgYHN0b3JlKClgIGluIGZhdm9yIG9mIGBhZ2dyZWdhdGUobG9jYWwpYC4KLSogTW9kaWZpZWQgYE51bWJlckhlbHBlcmAgdG8gYmV0dGVyIGlnbm9yZSBgRG91YmxlLk5hTmAgaW4gYG1pbigpYCBhbmQgYG1heCgpYCBjb21wYXJpc29ucy4KLSogQnVtcGVkIHRvIE5ldHR5IDQuMS4zNi4KLSogQnVtcGVkIHRvIEdyb292eSAyLjUuNy4KLSogQWRkZWQgYHVzZXJBZ2VudGAgdG8gUmVxdWVzdE9wdGlvbnMuIEdyZW1saW4gQ29uc29sZSBzZW5kcyBgR3JlbWxpbiBDb25zb2xlLzx2ZXJzaW9uPmAgYXMgdGhlIGB1c2VyQWdlbnRgLgotKiBGaXhlZCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGlnbm9yaW5nIGB3aXRoYCBgVG9rZW5gIG9wdGlvbnMgd2hlbiBtdWx0aXBsZSB3ZXJlIHNldC4KLSogQWRkZWQgYDpzZXQgd2FybmluZ3MgPHRydWV8ZmFsc2U+YCB0byBHcmVtbGluIENvbnNvbGUuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xNjE5IFRpbmtlckdyYXBoQ29tcHV0ZXIgd29ya2VyIGNvdW50IGFmZmVjdHMgT3B0aW9uYWxTdGVwIHF1ZXJ5IHJlc3VsdHMKLSogVElOS0VSUE9QLTIxNTcgU3BhcmtTdGFyQmFycmllckludGVyY2VwdG9yIGluamVjdHMgKEJ5dGUpIDAKLSogVElOS0VSUE9QLTIyMjQgRGV0ZWN0IGFuZCBmaXggcmVzb3VyY2UgbGVhawotKiBUSU5LRVJQT1AtMjIzMCBtYXRjaCgpIHN0ZXAgdW5leHBlY3RlZCBiZWhhdmlvdXJzCi0qIFRJTktFUlBPUC0yMjMyIFJlbW90ZVN0cmF0ZWd5IGRvZXMgbm90IGNhbGwgcGFyZW50IGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5IF9faW5pdF9fCi0qIFRJTktFUlBPUC0yMjM4IEZpeCByZW1haW5pbmcgaXRlcmF0b3IgbGVha3MgbWFya2VkIGJ5IEBJZ25vcmVJdGVyYXRvckxlYWsKLSogVElOS0VSUE9QLTIyNDEgQ2xpZW50IGV4Y2VwdGlvbiBkb24ndCBtYXRjaCBTZXJ2ZXIgZXhjZXB0aW9uIHdoZW4gc2VydmVyICB0aHJvdyBTdGFja092ZXJmbG93RXJyb3IKLSogVElOS0VSUE9QLTIyNDggSW5zdGFiaWxpdHkgb2YgZHJpdmVyIGZvciBibG9ja2VkIHJlcXVlc3RzCi0qIFRJTktFUlBPUC0yMjU3IHRyYW5zYWN0aW9uIGl0dHkgIG1heSBzdGlsbCBiZSB2aXNpdGVkIGFmdGVyIGNvbW1pdAotKiBUSU5LRVJQT1AtMjI2NCBHcmVtbGluIFB5dGhvbiBzaG91bGQgZGVzZXJpYWxpemUgZzpEYXRlIHRvIFVUQwotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xMDg0IEJyYW5jaCBvcHRpb24gdG9rZW5zIHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHRyYXZlcnNhbHMuCi0qIFRJTktFUlBPUC0xNTUzIERlcHJlY2F0ZSBzdG9yZSgpIGluIGZhdm9yIG9mIGFnZ3JlZ2F0ZShTY29wZSkKLSogVElOS0VSUE9QLTE5MjEgU3VwcG9ydCBoYXNOZXh0IHRlcm1pbmFsIHN0ZXAgaW4gR0xWcwotKiBUSU5LRVJQT1AtMjAyMCBTdXBwb3J0IHdpdGhDb21wdXRlcigpIGZvciBqYXZhc2NyaXB0Ci0qIFRJTktFUlBPUC0yMjIzIFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIHRvIDIuOS45Ci0qIFRJTktFUlBPUC0yMjM2IEltcHJvdmUgZXJyb3IgbWVzc2FnaW5nIGZvciBUaW5rZXJHcmFwaCBJZE1hbmFnZXJzIHRoYXQgZmFpbCBvbiBjb252ZXJzaW9ucwotKiBUSU5LRVJQT1AtMjIzNyBQcmV2ZW50IGVycm9yIHdoZW4gY2xvc2luZyBzZXNzaW9ucyB0aGF0IGRvbid0IGV4aXN0ICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjI0MiBCdW1wIHRvIG5ldHR5IDQuMS4zNgotKiBUSU5LRVJQT1AtMjI0MyBBZGQgdXNlci1hZ2VudCB0byBSZXF1ZXN0T3B0aW9ucwotKiBUSU5LRVJQT1AtMjI0NiBDb25zb2xpZGF0ZSB0aGUgZXJyb3IgcHJvcGFnYXRpb24gdG8gdGhlIGNsaWVudAotKiBUSU5LRVJQT1AtMjI1MCBTdXBwb3J0IHRvU3RyaW5nIHNlcmlhbGl6YXRpb24gaW4gR3JhcGhCaW5hcnkKLSogVElOS0VSUE9QLTIyNTYgcHJvY2Vzc0FsbFN0YXJ0cyBvZiBBZ2dyZWdhdGVTdGVwIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGJhcnJpZXIgaXMgZW1wdHkKLSogVElOS0VSUE9QLTIyNjAgVXBkYXRlIGphY2tzb24gZGF0YWJpbmQgMi45LjkuMQotKiBUSU5LRVJQT1AtMjI2NSBEZXByZWNhdGUgVHJhdmVyc2FsLmdldFNpZGVFZmZlY3RzKCkgZnVuY3Rpb25hbGl0eSBmb3IgcmVtb3RpbmcgcHVycG9zZXMKLSogVElOS0VSUE9QLTIyNzAgRGVwcmVjYXRlIG11bHRpL21ldGFwcm9wZXJ0eSBzdXBwb3J0IGluIE5lbzRqCi0qIFRJTktFUlBPUC0yMjcxIEFkZCBjb25zb2xlIHByZWZlcmVuY2UgdG8gY29udHJvbCBzZXJ2ZXItb3JpZ2luYXRlZCB3YXJuaW5nIGRpc3BsYXkKLSogVElOS0VSUE9QLTIyNzIgUmVuYW1lIHN0ZXBzIGFuZCB0b2tlbnMgdGhhdCBjb25mbGljdCB3aXRoIHN0YW5kYXJkIHB5dGhvbiBmdW5jdGlvbnMKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy40LnguYXNjaWlkb2MjcmVsZWFzZS0zLTQtMywgMy40LjMgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTQtMl1dCiA9PT0gVGlua2VyUG9wIDMuNC4yIChSZWxlYXNlIERhdGU6IE1heSAyOCwgMjAxOSkKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTMtNywgMy4zLjc+Pi4KLQotKiBBbGxvdyBhIGBUcmF2ZXJzYWxgIHRvIGtub3cgd2hhdCBgVHJhdmVyc2FsU291cmNlYCBpdCBzcGF3bmVkIGZyb20uCi0qIEZpeGVkIHByb2JsZW0gd2l0aCBjb25uZWN0aW9uIHBvb2wgc2l6aW5nIGFuZCByZXRyeS4KLSogQWRkZWQgc3RhdHVzIGF0dHJpYnV0ZSBmb3Igd2FybmluZ3MgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KLSogTW9kaWZpZWQgR3JlbWxpbiBDb25zb2xlIHRvIHJlcG9ydCB3YXJuaW5nIHN0YXR1cyBhdHRyaWJ1dGVzLgotKiBDaGFuZ2VkIGA6PmAgaW4gR3JlbWxpbiBDb25zb2xlIHRvIHN1Ym1pdCB0aGUgY2xpZW50LXNpZGUgdGltZW91dCBvbiBlYWNoIHJlcXVlc3QuCi0qIFByb3ZpZGVkIG1ldGhvZCB0byBvdmVycmlkZSB0aGUgcmVxdWVzdCBpZGVudGlmaWVyIHdpdGggYFJlcXVlc3RPcHRpb25zYC4KLSogQWRkZWQgb3B0aW9uIHRvIHNldCBwZXItcmVxdWVzdCBzZXR0aW5ncyBvbiBhIGBUcmF2ZXJzYWxgIHN1Ym1pdHRlZCB2aWEgYEJ5dGVjb2RlYC4KLSogRml4ZWQgdGhlIEdyeW8gcmVnaXN0cmF0aW9uIGZvciBgT3B0aW9uc1N0cmF0ZWd5YCBhcyBpdCB3YXMgbm90IHNlcmlhbGl6aW5nIHN0YXRlIHByb3Blcmx5LgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjA5MCBBZnRlciBydW5uaW5nIGJhY2tlbmQgZm9yIGEgZGF5IG9yIHNvIFN5c3RlbS5JTy5JT0V4Y2VwdGlvbiBrZWVwIHRocm93aW5nCi0qIFRJTktFUlBPUC0yMTEyIEZvbGRpbmcgaW4gcHJvcGVydHkoKSBzdGVwIGlzIG5vdCBiZWluZyBvcHRpbWFsbHkgcGVyZm9ybWVkCi0qIFRJTktFUlBPUC0yMTgwIGdyZW1saW4uc2ggZG9lc24ndCB3b3JrIHdoZW4gZGlyZWN0b3JpZXMgY29udGFpbiBzcGFjZXMKLSogVElOS0VSUE9QLTIxODMgSW50ZXJwcmV0ZXJNb2RlQVNUVHJhbnNmb3JtYXRpb24gbmVlZHMgdG8gYmUgbW9yZSBzcGVjaWZpYyBhYm91dCB3aGF0IGl0IHRyYW5zZm9ybXMKLSogVElOS0VSUE9QLTIxODkgQ29ubmVjdGVkQ29tcG9uZW50IHRlc3QgYXNzdW1lcyBmaXhlZCBvcmRlciBvZiB2ZXJ0aWNlcwotKiBUSU5LRVJQT1AtMjE5NCBFbmZvcmNpbmcgYW4gb3JkZXIgb24gcHJvcGVydGllcyBpbiBvbmUgdGVzdCBtZXRob2Qgb2YgQ2hvb3NlVGVzdAotKiBUSU5LRVJQT1AtMjE5NiBQYXJ0aXRpb25TdHJhdGVneSB3aXRoIGluY2x1ZGVNZXRhUHJvcGVydGllcyh0cnVlKSBjYW4ndCBhZGQgbGFiZWxlZCB2ZXJ0ZXgKLSogVElOS0VSUE9QLTIxOTggRG9jdW1lbnRhdGlvbiBmb3IgU3RvcmUgY29udHJhZGljdHMgaXRzZWxmCi0qIFRJTktFUlBPUC0yMTk5IHdpdGhpbiBzdGVwIGRvZXMgbm90IHdvcmsgd2l0aCBtb3JlIHRoYW4gdHdvIHBhcmFtZXRlcnMgd2l0aCBweXRob24KLSogVElOS0VSUE9QLTIyMDAgQWRkRWRnZVN0YXJ0U3RlcCB1c2VkIERldGFjaGVkRmFjdG9yeS5kZXRhY2ggaW5zdGVhZCBvZiBFdmVudFN0cmF0ZWd5LmRldGFjaAotKiBUSU5LRVJQT1AtMjIwNCBDbGllbnQgcmVjZWl2ZXMgbm8gcmVzcG9uc2Ugb24gZmFpbGVkIHJlcXVlc3QKLSogVElOS0VSUE9QLTIyMDYgQ2VydGFpbiB0eXBlcyBpbiBqYXZhc2NyaXB0IGRvbid0IGFwcGVhciB0byBzZXJpYWxpemUgd2l0aCBhIEdyYXBoU09OIHR5cGUKLSogVElOS0VSUE9QLTIyMTIgUGF0aCBpcyBub3QgZGV0YWNoaW5nIHByb3Blcmx5IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucwotKiBUSU5LRVJQT1AtMjIxNyBSYWNlIGNvbmRpdGlvbiBpbiBHcmVtbGluLm5ldCBkcml2ZXIgY29ubmVjdGlvbgotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0yMDg5IEphdmFzY3JpcHQgRFNMIHN1cHBvcnQKLSogVElOS0VSUE9QLTIxNzkgSGF2ZSBvLmEudC5nLmRyaXZlci5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBleHRlbmQgSU9FeGNlcHRpb24KLSogVElOS0VSUE9QLTIxODEgQWxsb3cgY3RybCtjIHRvIGJyZWFrIG91dCBvZiBhIGxvbmcgcnVubmluZyBwcm9jZXNzIGluIEdyZW1saW4gQ29uc29sZQotKiBUSU5LRVJQT1AtMjE4MiBSZW1vdmUgZ3BlcmZ1dGlscyBmcm9tIEdyZW1saW4gQ29uc29sZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIxOTAgRG9jdW1lbnQgR3JlbWxpbiBzYW5pdGl6YXRpb24gYmVzdCBwcmFjdGljZXMKLSogVElOS0VSUE9QLTIxOTEgSW1wbGVtZW50IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5Ci0qIFRJTktFUlBPUC0yMTkzIEFsbG93IGEgVHJhdmVyc2FsIHRvIGtub3cgd2hhdCBUcmF2ZXJzYWxTb3VyY2UgaXQgc3Bhd25lZCBmcm9tCi0qIFRJTktFUlBPUC0yMjAzIEJpbmQgdGhlIGNvbnNvbGUgdGltZW91dCB0byB0aGUgcmVxdWVzdCB0aW1lb3V0Ci0qIFRJTktFUlBPUC0yMjA4IEluY2x1ZGUgaW5qZWN0KCkgaW4gRFNMcyBnZW5lcmF0ZWQgd2l0aCBKYXZhIGFubm90YXRpb24gcHJvY2Vzc29yCi0qIFRJTktFUlBPUC0yMjExIFByb3ZpZGUgQVBJIHRvIGFkZCBwZXIgcmVxdWVzdCBvcHRpb24gZm9yIGEgYnl0ZWNvZGUKLSogVElOS0VSUE9QLTIyMTYgQ29uc2lkZXIgYWRkaW5nIGNvbnZlbnRpb25hbCBzdGF0dXMgYXR0cmlidXRlIGtleSBmb3Igd2FybmluZ3MKLSogVElOS0VSUE9QLTIyMTkgVXBncmFkZSBOZXR0eSB2ZXJzaW9uCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTIsIDMuNC4yIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy00LTFdXQogPT09IFRpbmtlclBvcCAzLjQuMSAoUmVsZWFzZSBEYXRlOiBNYXJjaCAxOCwgMjAxOSkKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTMtNiwgMy4zLjY+Pi4KLQotKiBHcmVtbGluLk5FVCBkcml2ZXI6IEZpeGVkIHJlbW92YWwgb2YgY2xvc2VkIGNvbm5lY3Rpb25zIGFuZCBhZGRlZCByb3VuZC1yb2JpbiBzY2hlZHVsaW5nLgotKiBBZGRlZCBHcmFwaEJpbmFyeSBzZXJpYWxpemVyIGZvciBUcmF2ZXJzYWxNZXRyaWNzCi0qIEFkZGVkIHJlZ2lzdHJhdGlvbiBmb3IgYFNwYXJxbFN0cmF0ZWd5YCBmb3IgR3JhcGhTT04uCi0qIEZpeGVkIHVwIGBTcGFycWxTdHJhdGVneWAgc28gdGhhdCBpdCBjb3VsZCBiZSB1c2VkIHByb3Blcmx5IHdpdGggYFJlbW90ZVN0cmF0ZWd5YC4KLSogRml4ZWQgYEJ5dGVCdWZmZXJgIHNlcmlhbGl6YXRpb24gZm9yIEdyYXBoQmluYXJ5LgotKiBGaXhlZCBgUGF0aC50b1N0cmluZygpYCBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCB3aGljaCB3YXMgcmVmZXJlbmNpbmcgYW4gaW52YWxpZCBvYmplY3QuCi0qIEZpeGVkIHBvdGVudGlhbCBmb3IgYW4gaW5maW5pdGUgbG9vcCBpbiBjb25uZWN0aW9uIGNyZWF0aW9uIGZvciBgZ3JlbWxpbi1kb3RuZXRgLgotKiBBZGRlZCBmYWxsYmFjayByZXNvbHZlciB0byBgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeWAgZm9yIEdyYXBoQmluYXJ5LgotKiBBZGRlZCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBleGNlcHRpb25zIGZvciBjb25uZWN0aW9uIHByb2JsZW1zIGluIHRoZSBHcmVtbGluLk5ldCBkcml2ZXIuCi0qIFN1cHBvcnQgY29uZmlndXJpbmcgdGhlIHR5cGUgcmVnaXN0cnkgYnVpbGRlciBmb3IgR3JhcGhCaW5hcnkuCi0qIEJ1bXBlZCB0byBHcm9vdnkgMi41LjYuCi0qIFJlbGVhc2Ugd29ya2luZyBidWZmZXJzIGluIGNhc2Ugb2YgZmFpbHVyZSBmb3IgR3JhcGhCaW5hcnkuCi0qIEdyYXBoQmluYXJ5OiBVc2UgdGhlIHNhbWUgYEJ5dGVCdWZgIGluc3RhbmNlIHRvIHdyaXRlIGR1cmluZyBzZXJpYWxpemF0aW9uLiBDaGFuZ2VkIHNpZ25hdHVyZSBvZiB3cml0ZSBtZXRob2RzIGluIHR5cGUgc2VyaWFsaXplcnMuCi0qIFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGluIEdyYXBoQmluYXJ5J3MgYFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXJgLgotKiBDaGFuZ2VkIGBTcGFycWxUcmF2ZXJzYWxTb3VyY2VgIHNvIGFzIHRvIGVuYWJsZSBHcmVtbGluIHN0ZXBzIHRvIGJlIHVzZWQgdG8gcHJvY2VzcyByZXN1bHRzIGZyb20gdGhlIGBzcGFycWwoKWAgc3RlcC4KLSogR3JhcGhCaW5hcnk6IENhY2hlIGV4cHJlc3Npb24gdG8gb2J0YWluIHRoZSBtZXRob2QgaW4gYFBTZXJpYWxpemVyYC4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTE5OTIgY291bnQgaGFzIG5lZ2F0aXZlIHRpbWUgaW4gcHJvZmlsZQotKiBUSU5LRVJQT1AtMjEyNiB0b1N0cmluZygpIG1ldGhvZHMgbm90IHRocmVhZC1zYWZlCi0qIFRJTktFUlBPUC0yMTM1IEdyZW1saW4uTmV0IENvbm5lY3Rpb25Qb29sIGRvZXNuJ3QgaGFuZGxlIGNsb3NlZCBpZGxlIGNvbm5lY3Rpb25zIHByb3Blcmx5Ci0qIFRJTktFUlBPUC0yMTM5IEVycm9ycyBkdXJpbmcgcmVxdWVzdCBzZXJpYWxpemF0aW9uIGluIFdlYlNvY2tldEdyZW1saW5SZXF1ZXN0RW5jb2Rlci9OaW9HcmVtbGluUmVxdWVzdEVuY29kZXIgYXJlIG5vdCByZXBvcnRlZCB0byB0aGUgY2xpZW50Ci0qIFRJTktFUlBPUC0yMTQxIEJ5dGVCdWZmZXJTZXJpYWxpemVyIG1vZGlmaWVzIGJ1ZmZlcidzIHBvc2l0aW9uCi0qIFRJTktFUlBPUC0yMTQ4ICJubyBjb25uZWN0aW9uIGF2YWlsYWJsZSEiIGlzIGJlaW5nIHRocm93biBkZXNwaXRlIGxvdHMgb2YgZnJlZSBjb25uZWN0aW9ucwotKiBUSU5LRVJQT1AtMjE1MiBQYXRoIHRvU3RyaW5nIGZhaWxzIGluIEdyZW1saW4gSmF2YVNjcmlwdAotKiBUSU5LRVJQT1AtMjE1MyBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBmcm9tIFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMTU0IEdyYXBoQmluYXJ5OiBTZXJpYWxpemVycyBzaG91bGQgcmVsZWFzZSByZXNvdXJjZXMgaW4gY2FzZSBvZiBmYWlsdXJlcwotKiBUSU5LRVJQT1AtMjE1NSBTaXR1YXRpb24gY2FuIG9jY3VyIHRoYXQgY2F1c2VzIGluZmluaXRlIGFtb3VudCBvZiBjb25uZWN0aW9uIHRvIGJlIG9wZW5lZCwgY2F1c2luZyBTeXN0ZW0uTmV0LldlYlNvY2tldHMuV2ViU29ja2V0RXhjZXB0aW9uCi0qIFRJTktFUlBPUC0yMTYxIEdyYXBoQmluYXJ5OiBXcml0ZSBzZXJpYWxpemF0aW9uIHBlcmZvcm1hbmNlIGlzc3VlCi0qIFRJTktFUlBPUC0yMTY5IFJlc3BvbnNlcyBleGNlZWRpbmcgbWF4Q29udGVudExlbmd0aCBjYXVzZSBzdWJzZXF1ZW50IHF1ZXJpZXMgdG8gaGFuZwotKiBUSU5LRVJQT1AtMjE3MiBQYXJ0aXRpb25TdHJhdGVneSBkb2Vzbid0IGFwcGx5IHRvIEFkZEVkZ2VTdGFydFN0ZXAKLSogVElOS0VSUE9QLTIxNzMgSW5jb3JyZWN0IHJlc2V0IG9mIGxvZyBsZXZlbCBpbiBpbnRlZ3JhdGlvbiB0ZXN0Ci0qIFRJTktFUlBPUC0yMTc3IFN0cmVhbWluZyByZXNwb25zZSBpbW1lZGlhdGVseSBhZnRlciBhdXRoZW50aWNhdGlvbiBzdG9wcyBhZnRlciBmaXJzdCBwYXJ0aWFsIHJlc3BvbnNlCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE0MzUgU3VwcG9ydCBmb3IgZXh0ZW5kZWQgR3JhcGhTT04gaW4gZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTE4ODIgQXBwbHkgcmFuZ2UgYW5kIGxpbWl0IHN0ZXBzIGFzIGVhcmx5IGFzIHBvc3NpYmxlCi0qIFRJTktFUlBPUC0xOTk4IElvR3JhcGhUZXN0IHVzZSBkaWZmZXJlbnQgc2NoZW1hcyBmb3Igc3RhbmRhcmQgYW5kIHJlYWRHcmFwaCBjb25maWd1cmF0aW9ucwotKiBUSU5LRVJQT1AtMjA4OCBFbmFibGUgU291cmNlTGluayBmb3IgR3JlbWxpbi5OZXQKLSogVElOS0VSUE9QLTIwOTggSW1wcm92ZSBncmVtbGluLXNlcnZlci5zaCBoZWxwIG91dHB1dAotKiBUSU5LRVJQT1AtMjEyMiBFeHBvc2Ugc3RhdHVzIGNvZGVzIGZyb20gc2VydmVyIGVycm9ycwotKiBUSU5LRVJQT1AtMjEyNCBJbmxpbmVGaWx0ZXJTdHJhdGVneSBwcm9kdWNlcyB3cm9uZyByZXN1bHQKLSogVElOS0VSUE9QLTIxMjUgRXh0ZW5kIHJlbGVhc2UgdmFsaWRhdGlvbiBzY3JpcHQKLSogVElOS0VSUE9QLTIxMjcgQWRkIGc6VHJhdmVyc2FsTWV0cmljcyBhbmQgZzpNZXRyaWNzIGRlc2VyaWFsaXplcnMgZm9yIGdyZW1saW5weXRob24KLSogVElOS0VSUE9QLTIxMjkgTWFzayBzZWN1cml0eSBzZWNyZXQgb3IgcGFzc3dvcmQgaW4gbG9ncwotKiBUSU5LRVJQT1AtMjEzMCBDYW5ub3QgaW5zdGFudGlhdGUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiB3aXRob3V0IHBhc3NpbmcgYW4gb3B0aW9ucyBvYmplY3QKLSogVElOS0VSUE9QLTIxMzEgTm9Db25uZWN0aW9uQXZhaWxhYmxlRXhjZXB0aW9uIGRvZXNuJ3QgcmV2ZWFsIHRoZSByZWFzb24KLSogVElOS0VSUE9QLTIxMzQgQnVtcCB0byBHcm9vdnkgMi41LjYKLSogVElOS0VSUE9QLTIxMzYgSW5zaWRlIGxvd2VyIGJvdW5kIGluY2x1c2lvbiAoZG9jdW1lbnRhdGlvbikKLSogVElOS0VSUE9QLTIxMzggUHJvdmlkZSBhIGNvbmZpZ3VyYXRpb24gdG8gZGlzYWJsZSB0aGUgZ2xvYmFsIGNsb3N1cmUgY2FjaGUKLSogVElOS0VSUE9QLTIxNDAgVGVzdCBidWlsZCB3aXRoIERvY2tlciBhdXRvbWF0aWNhbGx5Ci0qIFRJTktFUlBPUC0yMTQ0IEJldHRlciBoYW5kbGUgQXV0aGVudGljYXRvciBpbnN0YW5jZSBmYWlsdXJlcwotKiBUSU5LRVJQT1AtMjE0NyBBZGQgR3JhcGhCaW5hcnkgc2VyaWFsaXplciBmb3IgVHJhdmVyc2FsTWV0cmljcwotKiBUSU5LRVJQT1AtMjE0OSBHcmFwaEJpbmFyeTogTWFrZSB0eXBlIHNlcmlhbGl6ZXIgcmVzb2x1dGlvbiBwbHVnZ2FibGUKLSogVElOS0VSUE9QLTIxNTAgR3JhcGhCaW5hcnk6IFN1cHBvcnQgY29uZmlndXJpbmcgdGhlIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgYnVpbGRlciBjbGFzcyBpbiBjb25maWcKLSogVElOS0VSUE9QLTIxNjMgSmF2YVRyYW5zbGF0b3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzCi0qIFRJTktFUlBPUC0yMTY0IEJ5dGVjb2RlJ3MgaGFzaENvZGUgaW1wbCAoYW5kIGl0cyBpbm5lciBjbGFzc2VzKSBjYW4gcHJvZHVjZSBoYXNoIGNvbGxpc2lvbnMKLSogVElOS0VSUE9QLTIxNjUgUHJlZmVyIGNvbW1vbnMtbGFuZzMgdG8gY29tbW9ucy1sYW5nCi0qIFRJTktFUlBPUC0yMTY2IEdyYXBoQmluYXJ5OiBQIGRlc2VyaWFsaXphdGlvbiBzaG91bGQgYmUgb3B0aW1pemVkCi0qIFRJTktFUlBPUC0yMTY3IEdyZW1saW4gSmF2YXNjcmlwdCBUcmF2ZXJzYWwgYXMgYXN5bmMgaXRlcmFibGUKLSogVElOS0VSUE9QLTIxNzEgQWxsb3cgU1BBUlFMIHRvIGJlIGV4dGVuZGVkIHdpdGggR3JlbWxpbiBzdGVwcwotKiBUSU5LRVJQT1AtMjE3NCBJbXByb3ZlIERvY2tlciBJbWFnZSBTZWN1cml0eQorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjQueC5hc2NpaWRvYyNyZWxlYXNlLTMtNC0xLCAzLjQuMSBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtNC0wXV0KID09PSBUaW5rZXJQb3AgMy40LjAgKFJlbGVhc2UgRGF0ZTogSmFudWFyeSAyLCAyMDE5KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMy00LCAzLjMuND4+IGFuZCA8PHJlbGVhc2UtMy0zLTUsIDMuMy41Pj4uCi0KLSogQ2hhbmdlZCBQeXRob24gImJpbmRpbmdzIiB0byB1c2UgYW4gYWN0dWFsIGBCaW5kaW5nc2Agb2JqZWN0IHJhdGhlciB0aGFuIGEgMi10dXBsZS4KLSogSW1wcm92ZWQgdGhlIEdyZW1saW4uTkVUIGRyaXZlcjogSXQgbm93IHVzZXMgcmVxdWVzdCBwaXBlbGluaW5nIGFuZCBpdHMgYENvbm5lY3Rpb25Qb29sYCBoYXMgYSBmaXhlZCBzaXplLgotKiBJbXBsZW1lbnRlZCBgSW5kZXhTdGVwYCB3aGljaCBhbGxvd3MgdG8gdHJhbnNmb3JtIGxvY2FsIGNvbGxlY3Rpb25zIGludG8gaW5kZXhlZCBjb2xsZWN0aW9ucyBvciBtYXBzLgotKiBNYWRlIGB2YWx1ZU1hcCgpYCBhd2FyZSBvZiBgYnlgIGFuZCBgd2l0aGAgbW9kdWxhdG9ycyBhbmQgZGVwcmVjYXRlZCBgdmFsdWVNYXAoYm9vbGVhbilgIG92ZXJsb2Fkcy4KLSogVXNlIGBDb21wYXJlLmVxYCBpbiBgQ29udGFpbnNgIHByZWRpY2F0ZXMgdG8gZW5zdXJlIHRoZSBzYW1lIGZpbHRlciBiZWhhdmlvciBmb3IgbnVtZXJpYyB2YWx1ZXMuCi0qIEFkZGVkIGBPcHRpb25zU3RyYXRlZ3lgIHRvIGFsbG93IHRyYXZlcnNhbHMgdG8gdGFrZSBhcmJpdHJhcnkgdHJhdmVyc2FsLXdpZGUgY29uZmlndXJhdGlvbnMuCi0qIEFkZGVkIHRleHQgcHJlZGljYXRlcy4KLSogQWRkZWQgYEJ1bGtTZXRgIGFzIGEgR3JhcGhTT04gdHlwZSB3aXRoIHN1cHBvcnQgaW4gYWxsIGxhbmd1YWdlIHZhcmlhbnRzLgotKiBBZGRlZCBgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5YCB0byBhdXRvLWRldGFjaCBlbGVtZW50cyB0byAicmVmZXJlbmNlIiBmcm9tIGEgdHJhdmVyc2FsLgotKiBBZGRlZCBpbml0aWFsIHJlbGVhc2Ugb2YgdGhlIEdyYXBoQmluYXJ5IHNlcmlhbGl6YXRpb24gZm9ybWF0IHdpdGggSmF2YSBzdXBwb3J0LgotKiBBbGxvd2VkIGBJbXBvcnRDdXN0b21pemVyYCB0byBhY2NlcHQgZmllbGRzLgotKiBSZW1vdmVkIGdyb292eS1zcWwgZGVwZW5kZW5jeS4KLSogTW9kaWZpZWQgYE11dGF0aW5nYCBzdGVwcyBzbyB0aGF0IHRoZXkgYXJlIG5vIGxvbmdlciBtYXJrZWQgYXMgYGZpbmFsYC4KLSogUmV3cm90ZSBgQ29ubmVjdGl2ZVN0cmF0ZWd5YCB0byBzdXBwb3J0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgaW5maXggbm90YXRpb25zIGluIGEgc2luZ2xlIHRyYXZlcnNhbC4KLSogR3JhcGhTT04gYE1lc3NhZ2VTZXJpYWxpemVyYCBzIHdpbGwgYXV0b21hdGljYWxseSByZWdpc3RlciB0aGUgR3JlbWxpblNlcnZlck1vZHVsZSB0byBhIHByb3ZpZGVkIEdyYXBoU09OTWFwcGVyLgotKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGAtaWAgb3B0aW9uIGluIEdyZW1saW4gU2VydmVyIHdoaWNoIHdhcyBwcmV2aW91c2x5IGRlcHJlY2F0ZWQuCi0qIEltcGxlbWVudGVkIGBTaG9ydGVzdFBhdGhWZXJ0ZXhQcm9ncmFtYCBhbmQgdGhlIGBzaG9ydGVzdFBhdGgoKWAgc3RlcC4KLSogYEFic3RyYWN0R3JhcGhQcm92aWRlcmAgdXNlcyBgZy5pbygpYCBmb3IgbG9hZGluZyB0ZXN0IGRhdGEuCi0qIEFkZGVkIHRoZSBgaW8oKWAgc3RhcnQgc3RlcCBhbmQgYHJlYWQoKWAgYW5kIGB3cml0ZSgpYCB0ZXJtaW5hdGlvbiBzdGVwcyB0byB0aGUgR3JlbWxpbiBsYW5ndWFnZS4KLSogQWRkZWQgYEdyYXBoRmVhdHVyZXMuc3VwcG9ydHNJb1JlYWQoKWAgYW5kIGBHcmFwaEZlYXR1cmVzLnN1cHBvcnRzSW9Xcml0ZSgpYC4KLSogRGVwcmVjYXRlZCBgR3JhcGguaW8oKWAgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCi0qIGBHcmFwaE1MUmVhZGVyYCBiZXR0ZXIgaGFuZGxlcyBlZGdlIGFuZCB2ZXJ0ZXggcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIG5hbWUuCi0qIE1haW50YWluZWQgb3JkZXIgb2YgYW5ub3RhdGlvbnMgaW4gbWV0cmljcyByZXR1cm5lZCBmcm9tIGBwcm9maWxlKClgLXN0ZXAuCi0qIFJlZmFjdG9yZWQgYFR5cGVUcmFuc2xhdG9yYCB0byBiZSBkaXJlY3RseSBleHRlbnNpYmxlIGZvciBgU2NyaXB0VHJhbnNsYXRvcmAgZnVuY3Rpb25zLgotKiBCdW1wZWQgdG8gTmV0dHkgNC4xLjI1LgotKiBCdW1wZWQgdG8gU3BhcmsgMi40LjAuCi0qIEJ1bXBlZCB0byBHcm9vdnkgMi41LjQuCi0qIE1vZGlmaWVkIEdyZW1saW4gU2VydmVyIHRvIHJldHVybiBhICJob3N0IiBzdGF0dXMgYXR0cmlidXRlIG9uIHJlc3BvbnNlcy4KLSogQWRkZWQgYWJpbGl0eSB0byB0aGUgSmF2YSwgLk5FVCwgUHl0aG9uIGFuZCBKYXZhU2NyaXB0IGRyaXZlcnMgdG8gcmV0cmlldmUgc3RhdHVzIGF0dHJpYnV0ZXMgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLgotKiBNb2RpZmllZCBKYXZhIGFuZCBHcmVtbGluLk5ldCBgUmVzcG9uc2VFeGNlcHRpb25gIHRvIGluY2x1ZGUgc3RhdHVzIGNvZGUgYW5kIHN0YXR1cyBhdHRyaWJ1dGVzLgotKiBNb2RpZmllZCBQeXRob24gYEdyZW1saW5TZXJ2ZXJFcnJvcmAgdG8gaW5jbHVkZSBzdGF0dXMgYXR0cmlidXRlcy4KLSogTW9kaWZpZWQgdGhlIHJldHVybiB0eXBlIGZvciBgSUdyZW1saW5DbGllbnQuU3VibWl0QXN5bmMoKWAgdG8gYmUgYSBgUmVzdWx0U2V0YCByYXRoZXIgdGhhbiBhbiBgSVJlYWRPbmx5Q29sbGVjdGlvbmAuCi0qIERlcHJlY2F0ZWQgdHdvIGBzdWJtaXQoKWAtcmVsYXRlZCBtZXRob2RzIG9uIHRoZSBKYXZhIGRyaXZlciBgQ2xpZW50YCBjbGFzcy4KLSogQWRkZWQgYENsaWVudC5zdWJtaXQoKWAgb3ZlcmxvYWRzIHRoYXQgYWNjZXB0IHBlci1yZXF1ZXN0IGBSZXF1ZXN0T3B0aW9uc2AuCi0qIEFkZGVkIHNwYXJxbC1ncmVtbGluLgotKiBGaXhlZCBhIGJ1ZyBpbiBkeW5hbWljIEdyeW8gcmVnaXN0cmF0aW9uIHdoZXJlIHJlZ2lzdHJhdGlvbnMgdGhhdCBkaWQgbm90IGhhdmUgc2VyaWFsaXplcnMgd291bGQgZmFpbC4KLSogTW92ZWQgYFBhcmFtZXRlcml6aW5nYCBpbnRlcmZhY2UgdG8gdGhlIGBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXBgIHBhY2thZ2Ugd2l0aCBvdGhlciBtYXJrZXIgaW50ZXJmYWNlcyBvZiBpdHMgdHlwZS4KLSogUmVwbGFjZWQgYFBhcmFtZXRlcml6aW5nLmFkZFByb3BlcnR5TXV0YXRpb25zKClgIHdpdGggYENvbmZpZ3VyaW5nLmNvbmZpZ3VyZSgpYC4KLSogQ2hhbmdlZCBpbnRlcmZhY2UgaGllcmFyY2h5IGZvciBgUGFyYW1ldGVyaXppbmdgIGFuZCBgTXV0YXRpbmdgIGludGVyZmFjZXMgYXMgdGhleSBhcmUgdGlnaHRseSByZWxhdGVkLgotKiBJbnRyb2R1Y2VkIHRoZSBgd2l0aChrLHYpYCBhbmQgYHdpdGgoaylgIHN0ZXAgbW9kdWxhdG9ycyB3aGljaCBjYW4gc3VwcGx5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBgQ29uZmlndXJpbmdgIHN0ZXBzLgotKiBBZGRlZCBgT3B0aW9uc1N0cmF0ZWd5YCB0byBhbGxvdyB0cmF2ZXJzYWxzIHRvIHRha2UgYXJiaXRyYXJ5IHRyYXZlcnNhbC13aWRlIGNvbmZpZ3VyYXRpb25zLgotKiBJbnRyb2R1Y2VkIHRoZSBgd2l0aChrLHYpYCBhbmQgYHdpdGgoaylgIHRyYXZlcmFsIHNvdXJjZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2hpY2ggY2FuIHN1cHBseSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIHRyYXZlcnNhbC4KLSogQWRkZWQgYGNvbm5lY3RlZENvbXBvbmVudCgpYCBzdGVwIGFuZCByZWxhdGVkIGBWZXJ0ZXhQcm9ncmFtYC4KLSogQWRkZWQgYHN1cHBvcnRzVXBzZXJ0KClgIG9wdGlvbiB0byBgVmVydGV4RmVhdHVyZXNgIGFuZCBgRWRnZUZlYXR1cmVzYC4KLSogYG1pbigpYCBhbmQgYG1heCgpYCBub3cgc3VwcG9ydCBhbGwgdHlwZXMgaW1wbGVtZW50aW5nIGBDb21wYXJhYmxlYC4KLSogQ2hhbmdlIHRoZSBgdG9TdHJpbmcoKWAgb2YgYFBhdGhgIHRvIGJlIHN0YW5kYXJkaXplZCBhcyBvdGhlciBncmFwaCBlbGVtZW50cyBhcmUuCi0qIGBoYWRvb3AtZ3JlbWxpbmAgbm8gbG9uZ2VyIGdlbmVyYXRlcyBhIHRlc3QgYXJ0aWZhY3QuCi0qIEFsbG93ZWQgYEdyYXBoUHJvdmlkZXJgIHRvIGV4cG9zZSBhIGNhY2hlZCBgR3JhcGguRmVhdHVyZWAgb2JqZWN0IHNvIHRoYXQgdGhlIHRlc3Qgc3VpdGUgY291bGQgcmUtdXNlIHRoZW0gdG8gc3BlZWQgdGVzdCBydW5zLgotKiBGaXhlZCBhIGJ1ZyBpbiBgUmVkdWNpbmdCYXJyaWVyU3RlcGAsIHRoYXQgcmV0dXJuZWQgdGhlIHByb3ZpZGVkIHNlZWQgdmFsdWUgZGVzcGl0ZSBubyBlbGVtZW50cyBiZWluZyBhdmFpbGFibGUuCi0qIENoYW5nZWQgdGhlIG9yZGVyIG9mIGBzZWxlY3QoKWAgc2NvcGVzLiBUaGUgb3JkZXIgaXMgbm93OiBtYXBzLCBzaWRlLWVmZmVjdHMsIHBhdGhzLgotKiBNb3ZlZCBgVHJhdmVyc2FsRW5naW5lYCB0byBgZ3JlbWxpbi10ZXN0YCBhcyBpdCBoYXMgbG9uZyBiZWVuIG9ubHkgdXNlZCBpbiB0ZXN0aW5nIGluZnJhc3RydWN0dXJlLgotKiBOZXN0ZWQgbG9vcCBzdXBwb3J0IGFkZGVkIGFsbG93aW5nIGByZXBlYXQoKWAgc3RlcHMgdG8gYmUgbmVzdGVkLgotKiBFdmVudHMgZnJvbSBgRXZlbnRTdHJhdGVneWAgcmFpc2VkIGZyb20gIm5ldyIgbXV0YXRpb25zIHdpbGwgbm93IHJldHVybiBhIGBLZXllZFZlcnRleFByb3BlcnR5YCBvciBgS2V5ZWRQcm9wZXJ0eWAgYXMgaXMgYXBwcm9wcmlhdGUuCi0qIGBNdXRhdGlvbkxpc3RlbmVyI3ZlcnRleFByb3BlcnR5Q2hhbmdlZChWZXJ0ZXgsIFZlcnRleFByb3BlcnR5LCBPYmplY3QsIE9iamVjdC4uLilgIG5vIGxvbmdlciBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotKiBEZXByZWNhdGVkIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJkMGAgYXMgaXQgaXMgbm93IGFuYWxvZ291cyB0byBgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplckdyZW1saW5WMmQwYC4KLSogTW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBSZW1vdGVHcmFwaGAgdG8gYGdyZW1saW4tdGVzdGAgYXMgaXQgaXMgbm93IGp1c3QgYSB0ZXN0aW5nIGNvbXBvbmVudC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFJlbW90ZVN0cmF0ZWd5Lmluc3RhbmNlKClgIGFuZCB0aGUgc3RyYXRlZ3kgbm8gbG9uZ2VyIGhhcyBhbnkgY29ubmVjdGlvbiB0byBgUmVtb3RlR3JhcGhgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBtZXRob2RzIGluIGBTdWJncmFwaFN0cmF0ZWd5YCBhbmQgYFBhcnRpdGlvblN0cmF0ZWd5YCBidWlsZGVycy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgQ3JlZGVudGlhbHMgRFNMIGluZnJhc3RydWN0dXJlLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgUmVtb3RlQ29ubmVjdGlvbiNzdWJtaXQoVHJhdmVyc2FsKWAgYW5kIGBSZW1vdGVDb25uZWN0aW9uI3N1Ym1pdChCeXRlY29kZSlgIG1ldGhvZHMuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBNdXRhdGlvbkxpc3RlbmVyI3ZlcnRleFByb3BlcnR5Q2hhbmdlZChWZXJ0ZXgsIFByb3BlcnR5LCBPYmplY3QsIE9iamVjdC4uLilgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgT3BTZWxlY3RvckhhbmRsZXJgIGNvbnN0cnVjdG9yLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgY2xvc2UoKWAgZnJvbSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgd2hpY2ggbm8gbG9uZ2VyIGltcGxlbWVudHMgYEF1dG9DbG9zZWFibGVgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgZ2V0R3JhcGhJbnB1dEZvcm1hdCgpYCBhbmQgYGdldEdyYXBoT3V0cHV0Rm9ybWF0KClgIGZyb20gYEhhZG9vcENvbmZpZ3VyYXRpb25gLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQWJzdHJhY3RPcFByb2Nlc3NvciNtYWtlRnJhbWUoKWAgbWV0aG9kLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQXV0aGVudGljYXRpb25TZXR0aW5ncy5jbGFzc05hbWVgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGluIEdyZW1saW4gU2VydmVyLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhNYW5hZ2VyYCBtZXRob2RzIGBnZXRHcmFwaHMoKWAgYW5kIGBnZXRUcmF2ZXJzYWxTb3VyY2VzKClgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBHcmVtbGluIFNlcnZlciBzZXR0aW5nIGZvciBgc2VyaWFsaXplZFJlc3BvbnNlVGltZW91dGAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIFN0cnVjdHVyZSBBUEkgZXhjZXB0aW9ucyByZWxhdGVkIHRvICJlbGVtZW50IG5vdCBmb3VuZCIgc2l0dWF0aW9ucy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYHJlYmluZGluZ3NgIG9wdGlvbnMgZnJvbSB0aGUgSmF2YSBkcml2ZXIgQVBJLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgTGFtYmRhQ29sbGVjdGluZ0JhcnJpZXJTdGVwLkNvbnN1bWVyc2AgZW51bS4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEhhc0NvbnRhaW5lciNtYWtlSGFzQ29udGFpbmVycyhTdHJpbmcsIFApYAotKiBSZW1vdmVkIHN1cHBvcnQgZm9yIEdpcmFwaC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgSmF2YVNjcmlwdCBEcml2ZXIgcHJvcGVydHkgYHRyYXZlcnNlcnNgIG9mIHRoZSBgUmVzdWx0U2V0YC4KLSogZ3JlbWxpbi1weXRob246IHVzZSBleHBsaWNpdCBCaW5kaW5ncyBvYmplY3QgZm9yIHB5dGhvbiBpbnN0ZWFkIG9mIGEgMi10dXBsZQotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTc3NyBHcmVtbGluIC5tYXggc3RlcCByZXR1cm5zIC0yMTQ3NDgzNjQ4IGZvciBlbXB0eSByZXN1bHQgc2V0cyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE4NjkgUHJvZmlsZSBzdGVwIGFuZCBpdGVyYXRlIGRvIG5vdCBwbGF5IG5pY2VseSB3aXRoIGVhY2ggb3RoZXIKLSogVElOS0VSUE9QLTE4OTggSXNzdWUgd2l0aCBiaW5kaW5ncyBpbiBzdHJhdGVnaWVzIGFuZCBsYW1iZGFzCi0qIFRJTktFUlBPUC0xOTI3IEdoZXJraW4gc2NlbmFyaW8gZXhwZWN0cyBsaXN0IHdpdGggZHVwbGljYXRlcywgYnV0IHJlY2VpdmVzIGc6U2V0Ci0qIFRJTktFUlBPUC0xOTMzIGdyZW1saW4tcHl0aG9uIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIG9uIGxhcmdlIHJlc3BvbnNlcwotKiBUSU5LRVJQT1AtMTk0NyBQYXRoIGhpc3RvcnkgaXNuJ3QgcHJlc2VydmVkIGZvciBrZXlzIGluIG11dGF0aW9ucwotKiBUSU5LRVJQT1AtMTk0OSBGb3JtYXR0aW5nIGVycm9yIG9uIHdlYnNpdGUKLSogVElOS0VSUE9QLTE5NTggVGlua2VyR3JhcGhDb3VudFN0cmF0ZWd5IGNhbiByZXR1cm4gd3JvbmcgY291bnRzCi0qIFRJTktFUlBPUC0xOTYxIER1cGxpY2F0ZSBjb3BpZXMgb2YgaW1hZ2VzIGRpcmVjdG9yeSBpbiBkb2NzCi0qIFRJTktFUlBPUC0xOTYyIEdyb292eVRyYW5zbGF0b3IgZG9lc24ndCBoYW5kbGUgZW1wdHkgbWFwcwotKiBUSU5LRVJQT1AtMTk2MyBVc2Ugb2YgcmVkdWNpbmcgc3RlcCBpbiBjaG9vc2UoKQotKiBUSU5LRVJQT1AtMTk3MiBpbmplY3QoKSB0ZXN0cyBhcmUgdGhyb3dpbmcgZXhjZXB0aW9ucyBpbiAuTkVUIEdMViB0ZXN0cwotKiBUSU5LRVJQT1AtMTk3OCBDaGVjayBmb3IgV2Vic29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgd2hlbiByZXRyaWV2ZWQgZnJvbSBDb25uZWN0aW9uIFBvb2wgbWlzc2luZwotKiBUSU5LRVJQT1AtMTk3OSBTZXZlcmFsIE9MQVAgaXNzdWVzIGluIE1hdGhTdGVwCi0qIFRJTktFUlBPUC0xOTg4IG1pbm9yIGVycm9yIGluIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTE5OTkgW0phdmFdW2dyZW1saW4tZHJpdmVyXSBRdWVyeSB0byBhIHJlbW90ZSBzZXJ2ZXIgdmlhIHRoZSB3ZWJzb2NrZXQgY2xpZW50IGhhbmdzIGluZGVmaW5pdGVseSBpZiB0aGUgc2VydmVyIGJlY29tZXMgdW5hdmFpbGFibGUKLSogVElOS0VSUE9QLTIwMDUgSW50ZXJtaXR0ZW50IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIHJlc3BvbnNlIGhhbmRsaW5nCi0qIFRJTktFUlBPUC0yMDA2IEdyYXBoTUwgc2VyaWFsaXphdGlvbiBpbnZhbGlkIGlmIGEgdmVydGV4IGFuZCBlZGdlIGhhdmUgc2ltaWxhciBuYW1lZCBwcm9wZXJ0eQotKiBUSU5LRVJQT1AtMjAwOSBQaWNrLmFueSBhbmQgUGljay5ub25lIHNob3VsZCBiZSBleHBvc2VkIGluIEdyZW1saW4tSmF2YVNjcmlwdAotKiBUSU5LRVJQT1AtMjAyMSBQcmV2ZW50IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGZhaWx1cmUKLSogVElOS0VSUE9QLTIwMjggQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJkMCBzaG91bGQgcmVnaXN0ZXIgR3JlbWxpblNlcnZlck1vZHVsZSB3aGVuIG1hcHBlciBpcyBwcm92aWRlZAotKiBUSU5LRVJQT1AtMjAyOSBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uIGZvciBJbmxpbmVGaWx0ZXJTdHJhdGVneQotKiBUSU5LRVJQT1AtMjAzMCBLZWVwQWxpdmUgdGFzayBleGVjdXRlZCBmb3IgZXZlcnkgQ29ubmVjdGlvbi53cml0ZSBjYWxsCi0qIFRJTktFUlBPUC0yMDMyIFVwZGF0ZSBqeXRob24tc3RhbmRhbG9uZQotKiBUSU5LRVJQT1AtMjA0NCBDYW5ub3QgcmVjb25uZWN0IHRvIEF6dXJlIGNvc21vcyBob3N0IHRoYXQgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4KLSogVElOS0VSUE9QLTIwNTggQ29udGFpbnMgcHJlZGljYXRlcyBzaG91bGQgcmVseSBvbiBDb21wYXJlIHByZWRpY2F0ZXMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMDgxIFBlcnNpc3RlZE91dHB1dFJERCBtYXRlcmlhbGlzZXMgcmRkIGxhemlseSB3aXRoIFNwYXJrIDIueAotKiBUSU5LRVJQT1AtMjA5MSBXcm9uZy9NaXNzaW5nIGZlYXR1cmUgcmVxdWlyZW1lbnRzIGluIFN0cnVjdHVyZVN0YW5kYXJkVGVzdFN1aXRlCi0qIFRJTktFUlBPUC0yMDk0IEdyZW1saW4gRHJpdmVyIENsdXN0ZXIgQnVpbGRlciBzZXJpYWxpemVyIG1ldGhvZCBkb2VzIG5vdCB1c2UgbWltZVR5cGUgYXMgc3VnZ2VzdGVkCi0qIFRJTktFUlBPUC0yMDk1IEdyb3VwU3RlcCBsb29rcyBmb3IgaXJyZWxldmFudCBiYXJyaWVyIHN0ZXBzCi0qIFRJTktFUlBPUC0yMDk2IGdyZW1saW5weXRob246IEF0dHJpYnV0ZUVycm9yIHdoZW4gY29ubmVjdGlvbiBpcyBjbG9zZWQgYmVmb3JlIHJlc3VsdCBpcyByZWNlaXZlZAotKiBUSU5LRVJQT1AtMjEwMCBjb2FsZXNjZSgpIGNyZWF0aW5nIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHVzZWQgd2l0aCBvcmRlcigpCi0qIFRJTktFUlBPUC0yMTEzIFAuV2l0aGluKCkgZG9lc24ndCB3b3JrIHdoZW4gZ2l2ZW4gYSBMaXN0IGFyZ3VtZW50Ci0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTU1MCBHcmVtbGluIElPIG5lZWRzIHRvIHN1cHBvcnQgYm90aCBPTFRQIGFuZCBPTEFQIG5hdHVyYWxseS4KLSogVElOS0VSUE9QLTk2NyBTdXBwb3J0IG5lc3RlZC1yZXBlYXQoKSBzdHJ1Y3R1cmVzCi0qIFRJTktFUlBPUC0xMTEzIEdyYXBoQ29tcHV0ZXIgc3ViY2xhc3NlcyBzaG91bGQgc3VwcG9ydCBuYXRpdmUgbWV0aG9kcwotKiBUSU5LRVJQT1AtMTE0MyBSZW1vdmUgZGVwcmVjYXRlZCBUcmF2ZXJzYWxTb3VyY2UuQnVpbGRlciBhbmQgVHJhdmVyc2FsRW5naW5lLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEyOTYgUmVtb3ZlIGRlcHJlY2F0ZWQgc2VyaWFsaXplZFJlc3BvbnNlVGltZW91dCBmcm9tIEdyZW1saW4gU2VydmVyICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTM0MiBBbGxvdyBzZXR0aW5nIHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0IGluIGRyaXZlcgotKiBUSU5LRVJQT1AtMTM2NSBMb2cgdGhlIHNlZWQgdXNlZCB0byBpbml0aWFsaXplIFJhbmRvbSBpbiB0ZXN0cwotKiBUSU5LRVJQT1AtMTQxMCBtdm4gaW5zdGFsbCAtRG1hdmVuLnRlc3Quc2tpcD10cnVlIGRvZXNuJ3Qgd29yayBvbiBhIGNsZWFuIG1hY2hpbmUgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNDQ2IEFkZCBhIFN0cmluZ0ZhY3RvcnkgZm9yIFBhdGggd2hpY2ggcHJlZml4ZXMgd2l0aCB0eXBlLgotKiBUSU5LRVJQT1AtMTQ0NyBBZGQgc29tZSBKYXZhU2NyaXB0IGludGVsbGlnZW5jZSB0byB0aGUgZG9jdW1lbnRhdGlvbiBzbyB0aGF0IGNvbW1lbnRzIGFuZCBvdXRwdXQgYXJlIG5vdCBjb3BpZWQgaW4gYSBjb3B5IHBhc3RlCi0qIFRJTktFUlBPUC0xNDk0IE1lYW5zIG9mIGV4cG9zaW5nIGV4ZWN1dGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgcmVzdWx0IHByb2R1Y2VkIGJ5IFJlbW90ZUNvbm5lY3Rpb24KLSogVElOS0VSUE9QLTE1MTggUHJvdmlkZSBhIHdheSBmb3IgcHJvdmlkZXJzIHRvIGV4cG9zZSBzdGF0aWMgR3JhcGguRmVhdHVyZXMgdG8gdGVzdHMKLSogVElOS0VSUE9QLTE1MjIgT3JkZXIgb2Ygc2VsZWN0KCkgc2NvcGVzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTU5NSBHbyB0aHJvdWdoIFRyYXZlcnNhbFZlcnRleFByb2dyYW0gd2l0aCBhIHByb2ZpbGUgYW5kIG9wdGltaXplLgotKiBUSU5LRVJQT1AtMTYyOCBJbXBsZW1lbnQgVHJhdmVyc2FsU2VsZWN0U3RlcAotKiBUSU5LRVJQT1AtMTY4NSBJbnRyb2R1Y2Ugb3B0aW9uYWwgZmVhdHVyZSB0byBhbGxvdyBmb3IgdXBzZXJ0cyB3aXRob3V0IHJlYWQtYmVmb3JlLXdyaXRlCi0qIFRJTktFUlBPUC0xNzA1IFJlbW92ZSBkZXByZWNhdGVkIHJlYmluZGluZ3Mgb3B0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTcwNyBSZW1vdmUgZGVwcmVjYXRlZCBBdXRoZW50aWNhdGlvblNldHRpbmdzLmNsYXNzTmFtZSBvcHRpb24gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNzU1IE5vIGRvY3MgZm9yIFJlZmVyZW5jZUVsZW1lbnRzCi0qIFRJTktFUlBPUC0xNzY5IFB5dGhvbiBncmFwaFtlbXB0eV0gc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGNvbmZ1c2luZwotKiBUSU5LRVJQT1AtMTc3NCBHcmVtbGluIC5ORVQ6IFN1cHBvcnQgbWluIGFuZCBtYXggc2l6ZXMgaW4gQ29ubmVjdGlvbiBwb29sCi0qIFRJTktFUlBPUC0xNzc1IEdyZW1saW4gLk5FVDogSW1wbGVtZW50IGEgQ29ubmVjdGlvbiB3cml0ZSBxdWV1ZSB0byBzdXBwb3J0IHJlcXVlc3QgcGlwZWxpbmluZwotKiBUSU5LRVJQT1AtMTc3OCBEbyBub3QgcHJvbW90ZSB0aW1lZEludGVycnVwdCBvcHRpb24gZm9yIEdyZW1saW4gU2VydmVyIHNjcmlwdCBwcm9jZXNzaW5nCi0qIFRJTktFUlBPUC0xNzgwIEFkZCBhdXRoZW50aWNhdGlvbiB0ZXN0cyBmb3IgZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTE4MzEgUmVmYWN0b3IgRXZlbnRTdHJhdGVneSAgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xODM2IC5ORVQgc2FtcGxlIHByb2plY3QKLSogVElOS0VSUE9QLTE4NDEgSW5jbHVkZSBQeXRob24gR0xWIHRlc3RzIG9uIFRyYXZpc0NJCi0qIFRJTktFUlBPUC0xODQ5IFByb3ZpZGUgYSB3YXkgdG8gZm9sZCgpIHdpdGggYW4gaW5kZXgKLSogVElOS0VSUE9QLTE4NjQgR3JlbWxpbiBQeXRob24gdGVzdHMgZm9yIEdyYXBoU09OIDIuMCBhbmQgMy4wCi0qIFRJTktFUlBPUC0xODc4IFNwYXJxbCB0byBHcmVtbGluIENvbXBpbGVyCi0qIFRJTktFUlBPUC0xODg4IEV4dGVuZCBtYXggYW5kIG1pbiB0byBhbGwgQ29tcGFyYWJsZSBwcm9wZXJ0aWVzLCBub3QganVzdCBOdW1iZXJzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTg4OSBKYXZhU2NyaXB0IEdMVjogVXNlIGhlYXJ0YmVhdCB0byBwcmV2ZW50IGNvbm5lY3Rpb24gdGltZW91dAotKiBUSU5LRVJQT1AtMTg5NyBQcm92aWRlIERvY2tlciBpbWFnZXMgb2YgR3JlbWxpbiBTZXJ2ZXIgYW5kIENvbnNvbGUKLSogVElOS0VSUE9QLTE5MDYgTWFrZSBSZXNwb25zZUV4Y2VwdGlvbiBleHBsb3JhYmxlCi0qIFRJTktFUlBPUC0xOTEyIFJlbW92ZSBNRDUgY2hlY2tzdW1zCi0qIFRJTktFUlBPUC0xOTEzIEV4cG9zZSBtZXRhZGF0YSBmcm9tIEdyZW1saW4gU2VydmVyIHRvIENsaWVudHMKLSogVElOS0VSUE9QLTE5MzAgRHJvcCBzdXBwb3J0IGZvciBHaXJhcGggKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xOTM0IEJ1bXAgdG8gbGF0ZXN0IHZlcnNpb24gb2YgaHR0cGNsaWVudAotKiBUSU5LRVJQT1AtMTkzNiBQZXJmb3JtYW5jZSBlbmhhbmNlbWVudCB0byBCeXRlY29kZSBkZXNlcmlhbGl6YXRpb24KLSogVElOS0VSUE9QLTE5NDEgUmVtb3ZlIGRlcHJlY2F0ZWQgU3RydWN0dXJlIEFQSSBleGNlcHRpb24gbWV0aG9kcyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE5NDIgQmluYXJ5IHNlcmlhbGl6YXRpb24gZm9ybWF0Ci0qIFRJTktFUlBPUC0xOTQ1IEFkZCBzdXBwb3J0IGZvciBleHRlbmRlZCBHcmFwaFNvbiB0eXBlcyB0byBHcmVtbGluLm5ldAotKiBUSU5LRVJQT1AtMTk0NiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgQ3JlZGVudGlhbHMgRFNMIGluZnJhc3RydWN0dXJlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTk1MCBUcmF2ZXJzYWwgY29uc3RydWN0aW9uIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cwotKiBUSU5LRVJQT1AtMTk1MSBncmVtbGluLXNlcnZlci5iYXQgZG9lc24ndCBzdXBwb3J0IHBhdGhzIGNvbnRhaW5pbmcgc3BhY2VzCi0qIFRJTktFUlBPUC0xOTUzIEJ1bXAgdG8gR3Jvb3Z5IDIuNC4xNQotKiBUSU5LRVJQT1AtMTk1NCBSZW1vdmUgZGVwcmVjYXRlZCBHcmFwaE1hbmFnZXIgbWV0aG9kcyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE5NTkgUHJvdmlkZSBhIHdheSB0byBzdWJtaXQgc2NyaXB0cyB0byB0aGUgc2VydmVyIGluIGdyZW1saW4tamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMTk2NyBBZGQgYSBjb25uZWN0ZWRDb21wb25lbnQoKSBzdGVwCi0qIFRJTktFUlBPUC0xOTY4IFJlZmFjdG9yIGVsZW1lbnRzIG9mIEdyZW1saW4gU2VydmVyIHRlc3RpbmcKLSogVElOS0VSUE9QLTE5NzUgSW50cm9kdWNlIHdpdGgoKSBzdGVwIG1vZHVsYXRvciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE5NzYgSW5jbHVkZSBDb21wdXRlciB0ZXN0cyBmb3IgR0xWcwotKiBUSU5LRVJQT1AtMTk3NyBHcmVtbGluLUphdmFTY3JpcHQ6IFN1cHBvcnQgU0FTTCBhdXRoZW50aWNhdGlvbgotKiBUSU5LRVJQT1AtMTk4NCBBbGxvdyBzdXBwb3J0IGZvciBtdWx0aXBsZSBzZXJpYWxpemVyIHZlcnNpb25zIGluIEdyZW1saW4gU2VydmVyIEhUVFAgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xOTg1IFVwZGF0ZSBwb3NpdGlvbiBvbiBidWxrIGxvYWRpbmcKLSogVElOS0VSUE9QLTE5ODYgUmVtb3ZlIGRlcHJlY2F0aW9uIGZyb20gUGFydGl0aW9uU3RyYXRlZ3ksIFN1YmdyYXBoU3RyYXRlZ3kgYW5kIEdyZW1saW5TY3JpcHRFbmdpbmUgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xOTg3IEJ1bXAgdG8gTmV0dHkgNC4xLngKLSogVElOS0VSUE9QLTE5ODkgUHJlc2VydmUgb3JkZXIgdGhhdCBwbHVnaW5zIGFyZSBhcHBsaWVkIGluIEdyZW1saW4gQ29uc29sZQotKiBUSU5LRVJQT1AtMTk5MCBBZGQgYSBzaG9ydGVzdFBhdGgoKSBzdGVwCi0qIFRJTktFUlBPUC0xOTkzIEJ1bXAgdG8gU3BhcmsgMi4zLjEKLSogVElOS0VSUE9QLTE5OTUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBjbG9zZSgpIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZAotKiBUSU5LRVJQT1AtMTk5NiBJbnRyb2R1Y2UgcmVhZCgpIGFuZCB3cml0ZSgpIHN0ZXBzCi0qIFRJTktFUlBPUC0yMDAyIENyZWF0ZSBhIGJsb2cgcG9zdCBleHBsYWluaW5nIHRoZSB2YWx1ZSBvZiB1c2luZyBUaW5rZXJQb3AKLSogVElOS0VSUE9QLTIwMTAgR2VuZXJhdGUganNkb2MgZm9yIGdyZW1saW4tamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjAxMSBVc2UgTnVtYmVySGVscGVyIG9uIGNob29zZSgpCi0qIFRJTktFUlBPUC0yMDEyIFRhcmdldCAuTkVUIFN0YW5kYXJkIDIuMCBmb3IgR3JlbWxpbi5OZXQKLSogVElOS0VSUE9QLTIwMTMgUHJvY2VzcyB0ZXN0cyB0aGF0IGFyZSBhdXRvLWlnbm9yZWQgc3RpbmsKLSogVElOS0VSUE9QLTIwMTUgQWxsb3cgdXNlcnMgdG8gY29uZmlndXJlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbnMKLSogVElOS0VSUE9QLTIwMTYgVXBncmFkZSBKYWNrc29uIEZhc3RlclhNTCB0byAyLjkuNSBvciBsYXRlciB0byBmaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eQotKiBUSU5LRVJQT1AtMjAxNyBDaGVjayBmb3IgQ29sdW1uIGluIGJ5KCkKLSogVElOS0VSUE9QLTIwMTggR2VuZXJhdGUgQVBJIGRvY3MgZm9yIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0yMDIyIENsdXN0ZXIgU1NMIHNob3VsZCB0cnVzdCBkZWZhdWx0IGNhIGNlcnRzIGJ5IGRlZmF1bHQKLSogVElOS0VSUE9QLTIwMjMgR3JlbWxpbiBTZXJ2ZXIgc2hvdWxkIG5vdCBjcmVhdGUgc2VsZi1zaWduZWQgY2VydHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMDI0IEdyZW1saW4gU2VydmVyIEFwcGxpY2F0aW9uIGFyY2hldHlwZSBzaG91bGQgY29ubmVjdCB2aWEgd2l0aFJlbW90ZQotKiBUSU5LRVJQT1AtMjAyNSBDaGFuZ2UgdG8gU0hBLTI1Ni81MTIgYW5kIGRyb3AgU0hBLTEgZm9yIHJlbGVhc2VzCi0qIFRJTktFUlBPUC0yMDI2IEdyZW1saW4uTmV0LkRyaXZlciBzaG91bGQgY2hlY2sgQ2xpZW50V2ViU29ja2V0LlN0YXRlIGJlZm9yZSBjbG9zaW5nCi0qIFRJTktFUlBPUC0yMDMxIFJlbW92ZSBzdXBwb3J0IGZvciAtaSBpbiBncmVtbGluLXNlcnZlci5zaCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIwMzMgTWFpbnRhaW4gb3JkZXIgb2YgcHJvZmlsZSgpIGFubm90YXRpb25zCi0qIFRJTktFUlBPUC0yMDM0IFJlZ2lzdGVyIHN5bmNocm9uaXplZE1hcCgpIHdpdGggR3J5bwotKiBUSU5LRVJQT1AtMjAzNyBSZW1vdmUgdW51c2VkIGdyb292eS1zcWwgZGVwZW5kZW5jeQotKiBUSU5LRVJQT1AtMjAzOCBNYWtlIGdyb292eSBzY3JpcHQgY2FjaGUgc2l6ZSBjb25maWd1cmFibGUKLSogVElOS0VSUE9QLTIwMzkgQnVtcCB0byBHcm9vdnkgMi41LjIgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMDQwIEltcHJvdmUgZmxleGliaWxpdHkgb2YgR3Jvb3Z5VHJhbnNsYXRvciB0byBoYW5kbGUgY3VzdG9tIHR5cGVzCi0qIFRJTktFUlBPUC0yMDQxIFRleHQgUHJlZGljYXRlcwotKiBUSU5LRVJQT1AtMjA0NSBSZW1vdmUgbm9uLWluZHkgZ3Jvb3Z5IGRlcGVuZGVuY2llcwotKiBUSU5LRVJQT1AtMjA0OSBTaW5nbGUgYXJndW1lbnQgd2l0aCgpIG92ZXJsb2FkCi0qIFRJTktFUlBPUC0yMDUwIEFkZCBhIDpieXRlY29kZSBjb21tYW5kIHRvIEdyZW1saW4gQ29uc29sZQotKiBUSU5LRVJQT1AtMjA1MyBQcm92aWRlciBPcHRpb25zU3RyYXRlZ3kgZm9yIHRyYXZlcnNhbCBjb25maWd1cmF0aW9ucwotKiBUSU5LRVJQT1AtMjA1NSBQcm92aWRlIHN1cHBvcnQgZm9yIHNwZWNpYWwgbnVtYmVyIGNhc2VzIGxpa2UgSW5maW5pdHkgaW4gR3JhcGhTT04KLSogVElOS0VSUE9QLTIwNTYgVXNlIE51bWJlckhlbHBlciBpbiBDb21wYXJlCi0qIFRJTktFUlBPUC0yMDU5IE1vZHVsYXRpb24gb2YgdmFsdWVNYXAoKSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIwNjAgTWFrZSBNdXRhdGluZyBzdGVwcyBub24tZmluYWwKLSogVElOS0VSUE9QLTIwNjEgQWRkIHdpdGgoKSBjb25maWd1cmF0aW9uIGFzIGdsb2JhbCB0byBhIHRyYXZlcnNhbAotKiBUSU5LRVJQT1AtMjA2MiBBZGQgVHJhdmVyc2FsIGNsYXNzIHRvIENvcmVJbXBvcnRzCi0qIFRJTktFUlBPUC0yMDY0IEFkZCBzdGF0dXMgYXR0cmlidXRlcyB0byByZXN1bHRzIGZvciBncmVtbGluLWphdmFzY3JpcHQKLSogVElOS0VSUE9QLTIwNjUgT3B0aW1pemUgaXRlcmF0ZSgpIGZvciByZW1vdGUgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjA2NiBCdW1wIHRvIEdyb292eSAyLjUuMwotKiBUSU5LRVJQT1AtMjA2NyBBbGxvdyBnZXR0aW5nIHJhdyBkYXRhIGZyb20gR3JlbWxpbi5OZXQuRHJpdmVyLklHcmVtbGluQ2xpZW50Ci0qIFRJTktFUlBPUC0yMDY4IEJ1bXAgSmFja3NvbiBEYXRhYmluZCAyLjkuNwotKiBUSU5LRVJQT1AtMjA2OSBEb2N1bWVudCBjb25maWd1cmF0aW9uIG9mIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0yMDcwIGdyZW1saW4tamF2YXNjcmlwdDogSW50cm9kdWNlIENvbm5lY3Rpb24gcmVwcmVzZW50YXRpb24KLSogVElOS0VSUE9QLTIwNzEgZ3JlbWxpbi1weXRob246IHRoZSBncmFwaHNvbiBkZXNlcmlhbGl6ZXIgZm9yIGc6U2V0IHNob3VsZCByZXR1cm4gYSBweXRob24gc2V0Ci0qIFRJTktFUlBPUC0yMDcyIFJlZmFjdG9yIGN1c3RvbSB0eXBlIHRyYW5zbGF0aW9uIGZvciBTY3JpcHRUcmFuc2xhdG9ycyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIwNzMgR2VuZXJhdGUgdGFicyBmb3Igc3RhdGljIGNvZGUgYmxvY2tzCi0qIFRJTktFUlBPUC0yMDc0IEVuc3VyZSB0aGF0IG9ubHkgTnVHZXQgcGFja2FnZXMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24gYXJlIHB1c2hlZAotKiBUSU5LRVJQT1AtMjA3NSBJbnRyb2R1Y2UgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5Ci0qIFRJTktFUlBPUC0yMDc3IFZlcnRleFByb2dyYW0uQnVpbGRlciBzaG91bGQgaGF2ZSBhIGRlZmF1bHQgY3JlYXRlKCkgbWV0aG9kIHdpdGggbm8gR3JhcGgKLSogVElOS0VSUE9QLTIwNzggSGlkZSB1c2Ugb2YgRW1wdHlHcmFwaCBvciBSZW1vdGVHcmFwaCBiZWhpbmQgYSBtb3JlIHVuaWZpZWQgbWV0aG9kIGZvciBUcmF2ZXJzYWxTb3VyY2UgY29uc3RydWN0aW9uCi0qIFRJTktFUlBPUC0yMDc5IE1vdmUgUmVtb3RlR3JhcGggdG8gdGVzdCBwYWNrYWdlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjA4NCBGb3IgcmVtb3RlIHJlcXVlc3RzIGluIGNvbnNvbGUgZGlzcGxheSB0aGUgcmVtb3RlIHN0YWNrIHRyYWNlCi0qIFRJTktFUlBPUC0yMDkyIERlcHJlY2F0ZSBkZWZhdWx0IEdyYXBoU09OIHNlcmlhbGl6ZXIgZmllbGRzCi0qIFRJTktFUlBPUC0yMDkzIEJ1bXAgdG8gR3Jvb3Z5IDIuNS40Ci0qIFRJTktFUlBPUC0yMDk3IENyZWF0ZSBhIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gd2l0aCBhbiBpbml0aWFsaXplZCBDbGllbnQKLSogVElOS0VSUE9QLTIxMDEgU3VwcG9ydCBTcGFyayAyLjQKLSogVElOS0VSUE9QLTIxMDMgUmVtb3ZlIGRlcHJlY2F0ZWQgc3VibWl0KCkgb3B0aW9ucyBvbiBSZW1vdGVDb25uZWN0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjEwNCBBbGxvdyBJbXBvcnRDdXN0b21pemVyIHRvIGhhbmRsZSBmaWVsZHMKLSogVElOS0VSUE9QLTIxMDYgV2hlbiBncmVtbGluIGV4ZWN1dGVzIHRpbWVvdXQsIHRocm93IFRpbWVvdXRFeGNlcHRpb24gaW5zdGVhZCBvZiBUcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbi9JbnRlcnJ1cHRlZElPRXhjZXB0aW9uCi0qIFRJTktFUlBPUC0yMTEwIEFsbG93IENvbm5lY3Rpb24gb24gRGlmZmVyZW50IFBhdGggKGZyb20gL2dyZW1saW4pCi0qIFRJTktFUlBPUC0yMTExIEFkZCBCdWxrU2V0IGFzIGEgR3JhcGhTT04gdHlwZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIxMTQgRG9jdW1lbnQgY29tbW9uIEdyZW1saW4gYW50aS1wYXR0ZXJucwotKiBUSU5LRVJQT1AtMjExNiBFeHBsaWNpdCBCaW5kaW5ncyBvYmplY3QgZm9yIFB5dGhvbiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIxMTcgZ3JlbWxpbi1weXRob246IFByb3ZpZGUgYSBiZXR0ZXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgQmluZGluZwotKiBUSU5LRVJQT1AtMjExOSBWYWxpZGF0ZSBDIyBjb2RlIHNhbXBsZXMgaW4gZG9jcwotKiBUSU5LRVJQT1AtMjEyMSBCdW1wIEphY2tzb24gRGF0YWJpbmQgMi45LjgKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy40LnguYXNjaWlkb2MjcmVsZWFzZS0zLTQtMCwgMy40LjAgY2hhbmdlbG9nPj4uCiAKID09IFRpbmtlclBvcCAzLjMuMCAoR3JlbWxpbiBTeW1waG9ueSAjNDAgaW4gRyBNaW5vcikKIApAQCAtMjczNyw3NjAgKzk5Nyw2MiBAQAogW1tyZWxlYXNlLTMtMy0xMV1dCiA9PT0gVGlua2VyUG9wIDMuMy4xMSAoUmVsZWFzZSBEYXRlOiBKdW5lIDEsIDIwMjApCiAKLSogQWRkZWQgYHRydXN0U3RvcmVUeXBlYCBzdWNoIHRoYXQga2V5c3RvcmUgYW5kIHRydXN0c3RvcmUgY2FuIGJlIG9mIGRpZmZlcmVudCB0eXBlcyBpbiB0aGUgSmF2YSBkcml2ZXIuCi0qIEFkZGVkIHNlc3Npb24gc3VwcG9ydCB0byBhbGwgR0xWczogSmF2YXNjcmlwdCwgLk5FVCBhbmQgUHl0aG9uLgotKiBGaXhlZCBidWcgaW4gR3JlbWxpbiBTZXJ2ZXIgc2h1dGRvd24gaWYgZmFpbHVyZXMgb2NjdXJyZWQgZHVyaW5nIGBHcmFwaE1hbmFnZXJgIGluaXRpYWxpemF0aW9uLgotKiBNb2RpZmllZCBHcmVtbGluIFNlcnZlciB0byBjbG9zZSB0aGUgc2Vzc2lvbiB3aGVuIHRoZSBjaGFubmVsIGl0c2VsZiBpcyBjbG9zZWQuCi0qIEZpeGVkIGJ1ZyBpbiBgT3JkZXJgIHdoZXJlIGNvbXBhcmlzb25zIG9mIGBlbnVtYCB0eXBlcyB3b3VsZG4ndCBjb21wYXJlIHdpdGggYFN0cmluZ2AgdmFsdWVzLgotKiBBZGRlZCBgbWF4V2FpdEZvckNsb3NlYCBjb25maWd1cmF0aW9uIG9wdGlvbiB0byB0aGUgSmF2YSBkcml2ZXIuCi0qIERlcHJlY2F0ZWQgYG1heFdhaXRGb3JTZXNzaW9uQ2xvc2VgIGluIHRoZSBKYXZhIGRyaXZlci4KLSogQnVtcGVkIHRvIEphY2tzb24gMi45LjEwLjQuCi0qIFJlbW92ZSBpbnZhbGlkIHNlcnZpY2UgZGVzY3JpcHRvcnMgZnJvbSBncmVtbGluLXNoYWRlZC4KLSogRml4ZWQgYnVnIGluIFB5dGhvbiBhbmQgLk5FVCB0cmF2ZXJzYWwgYGNsb25lKClgIHdoZXJlIGRlZXAgY29waWVzIG9mIGJ5dGVjb2RlIHdlcmUgbm90IG9jY3VycmluZy4KLSogRml4ZWQgYnVnIHdoZXJlIGBwcm9maWxlKClgIHdhcyBmb3JjaW5nIGBMYXp5QmFycmllclN0cmF0ZWd5YCB0byBhZGQgYW4gZXh0cmEgYGJhcnJpZXIoKWAgdG8gdGhlIGVuZCBvZiB0cmF2ZXJzYWxzLgotKiBGaXhlZCBidWcgaW4gUHl0aG9uIGFib3V0IGludGVnZXIgc2VyaWFsaXplciB3aGljaCB3YXMgb3V0IG9mIHJhbmdlIG9mIGBnOkludDMyYAotKiBCdW1wZWQgY29tbW9ucy1jb2RlYyAxLjE0Ci0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yMzQ3IFJlbW92ZSBpbnZhbGlkIHNlcnZpY2UgZGVzY3JpcHRvcnMgZnJvbSBncmVtbGluLXNoYWRlZAotKiBUSU5LRVJQT1AtMjM1MCBjbG9uZSgpIGlzIG5vdCBkZWVwIGNvcHlpbmcgVHJhdmVyc2FsIGludGVybmFscwotKiBUSU5LRVJQT1AtMjM1MSBMb2NhbCBNYXAgb3JkZXJpbmcgb2Yga2V5cyBjYW4gZ2VuZXJhdGUgY2FzdCBlcnJvcnMKLSogVElOS0VSUE9QLTIzNTMgRXJyb3Igd2hpbGUgU2h1dHRpbmcgRG93biBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtMjM1NSBKYWNrc29uLWRhdGFiaW5kIHZlcnNpb24gaW4gR3JlbWxpbiBzaGFkZWQgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSBpbmNyZWFzZWQgIC0gaW50cm9kdWNlcyB2dWxuZXJhYmlsaXR5IGlzc3VlcwotKiBUSU5LRVJQT1AtMjM2MCBmYWlsZWQgdG8gZGVzZXJpYWxpemVyIGludDMyIHdoZW4gZ3JlbWxpbi1weXRob24gc3VibWl0IGJ5dGVjb2RlIHdpdGggYSBiaWcgaW50IHZhbHVlCi0qIFRJTktFUlBPUC0yMzY1IExhenlCYXJyaWVyU3RyYXRlZ3kgYWRkcyBhIE5vT3BCYXJyaWVyU3RlcCB3aGVuIHByb2ZpbGUoKSBpcyBwcmVzZW50Ci0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIzMzYgQWxsb3cgY2xvc2Ugb2YgY2hhbm5lbCB3aXRob3V0IGhhdmluZyB0byB3YWl0IGZvciBzZXJ2ZXIKLSogVElOS0VSUE9QLTIzMzkgR3JlbWxpbi5OZXQ6IFVwZGF0ZSBTeXN0ZW0uTmV0LldlYlNvY2tldHMuQ2xpZW50IGRlcGVuZGVuY3kKLSogVElOS0VSUE9QLTIzNTQgRG9jdW1lbnQgcmVjb21tZW5kYXRpb24gdG8gcmV1c2UgZ3JhcGggdHJhdmVyc2FsIHNvdXJjZQorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjMueC5hc2NpaWRvYyNyZWxlYXNlLTMtMy0xMSwgMy4zLjExIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0zLTEwXV0KID09PSBUaW5rZXJQb3AgMy4zLjEwIChSZWxlYXNlIERhdGU6IEZlYnJ1YXJ5IDMsIDIwMjApCiAKLSogSW1wcm92ZWQgZXJyb3IgbWVzc2FnaW5nIGZvciBhIGBDbHVzdGVyYCB3aXRoIGEgYmFkIGBDaGFubmVsaXplcmAgY29uZmlndXJhdGlvbiBpbiB0aGUgSmF2YSBkcml2ZXIuCi0qIE1hZGUgYENsdXN0ZXJgIGJlIGFibGUgdG8gb3BlbiBjb25maWd1cmF0aW9uIGZpbGUgb24gcmVzb3VyY2VzIGRpcmVjdG9yeS4KLSogSW1wbGVtZW50ZWQgYFRyYXZlcnNhbC5jbG9uZSgpYCBvcGVyYXRpb25zIGZvciBhbGwgbGFuZ3VhZ2UgdmFyaWFudHMuCi0qIFJlZmFjdG9yZWQgYFBhdGhQcm9jZXNzb3JTdHJhdGVneWAgdG8gdXNlIHRoZSBtYXJrZXIgbW9kZWwuCi0qIEJ1bXBlZCB0byBUb3JuYWRvIDUueCBmb3IgZ3JlbWxpbi1weXRob24uCi0qIFN0YXJ0ZWQga2VlcC1hbGl2ZSBwb2xsaW5nIG9uIGBDb25uZWN0aW9uYCBjb25zdHJ1Y3Rpb24gdG8gZW5zdXJlIHRoYXQgYSBgQ29ubmVjdGlvbmAgZG9lc24ndCBkaWUgaW4gdGhlIHBvb2wuCi0qIERlcHJlY2F0ZWQgYFRyYXZlcnNhbFN0cmF0ZWdpZXMuYXBwbHlTdHJhdGVnaWVzKClgLgotKiBEZXByZWNhdGVkIEp5dGhvbiBzdXBwb3J0IGluIGBncmVtbGluLXB5dGhvbmAuCi0qIERlcHJlY2F0ZWQgYE5pb0NoYW5uZWxpemVyYCBhbmQgcmVsYXRlZCBjbGFzc2VzIGluIGBncmVtbGluLWRyaXZlcmAgYW5kIGBncmVtbGluLXNlcnZlcmAuCi0qIEZpeGVkIGEgYnVnIGluIHRoZSBgQ2xhc3NDYWNoZVJlcXVlc3RDb3VudGAgbWV0cmljIGZvciBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgd2hpY2ggd2Fzbid0IGluY2x1ZGluZyB0aGUgY2FjaGUgaGl0IGNvdW50LCBvbmx5IHRoZSBtaXNzZXMuCi0qIEltcHJvdmVkIEdyZW1saW4gU2VydmVyIGV4ZWN1dG9yIHRocmVhZCBoYW5kbGluZyBvbiBjbGllbnQgY2xvc2UgcmVxdWVzdHMuCi0qIFJldmVydGVkOiBNb2RpZmllZCBKYXZhIGRyaXZlciB0byB1c2UgSVAgYWRkcmVzcyByYXRoZXIgdGhhbiBob3N0bmFtZSB0byBjcmVhdGUgY29ubmVjdGlvbnMuCi0qIEFsbG93IGN1c3RvbSBYTUxJbnB1dEZhY3RvcnkgdG8gYmUgdXNlZCB3aXRoIEdyYXBoTUxSZWFkZXIuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yMTc1IEV4ZWN1dG9yIHRocmVhZCBpcyBub3QgcmV0dXJuZWQgb24gY2hhbm5lbCBjbG9zZQotKiBUSU5LRVJQT1AtMjI2NiBLZWVwIGFsaXZlIG5vdCBzdGFydGVkIGF0IGNvbm5lY3Rpb24gY3JlYXRpb24KLSogVElOS0VSUE9QLTIyNzQgVGVzdCBvZiBUaW5rZXJHcmFwaCBHcmVtbGluIGZhaWwgb24gV2luZG93cyBhbmQgbm9uIEVOIGxvY2FsZQotKiBUSU5LRVJQT1AtMjMzMiBKYXZhU2NyaXB0IEdMVjogc3RydWN0dXJlIGVsZW1lbnQgdG9TdHJpbmcoKSBzaG91bGQgaW50ZXJuYWxseSBjYWxsIHRvU3RyaW5nKCkKLSogVElOS0VSUE9QLTIzMzMgSmF2YVNjcmlwdCBHTFY6IEdyYXBoU09OMi8zIEVkZ2UgZGVzZXJpYWxpemF0aW9uIGlzIGludmFsaWQKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMjMwNyBBZGQgYmV0dGVyIGVycm9yIG1lc3NhZ2UgZm9yIGJhZGx5IGNvbmZpZ3VyZWQgQ2hhbm5lbGl6ZXIKLSogVElOS0VSUE9QLTIzMDkgQnVtcCBncmVtbGlucHl0aG9uIHRvIFRvcm5hZG8gNS54Ci0qIFRJTktFUlBPUC0yMzE1IEltcGxlbWVudCBzb21lIGZvcm0gb2YgY2xvbmUoKSBvciByZXNldCgpIGZvciBUcmF2ZXJzYWwgaW4gR0xWcwotKiBUSU5LRVJQT1AtMjMyMCBbU0VDVVJJVFldIFhNTElucHV0RmFjdG9yeSBpbml0aWFsaXphdGlvbiBpbiBHcmFwaE1MUmVhZGVyIGludHJvZHVjZXMKLSogVElOS0VSUE9QLTIzMjIgRGVwcmVjYXRlIEp5dGhvbiBzdXBwb3J0Ci0qIFRJTktFUlBPUC0yMzI0IERlcHJlY2F0ZSB0aGUgcmF3IE5JTyBzdXBwb3J0IGluIHRoZSBKYXZhIGRyaXZlcgotKiBUSU5LRVJQT1AtMjMyOSBKYXZhU2NyaXB0IEdMVjogVXBkYXRlIHdlYnNvY2tldCBsaWJyYXJ5IGRlcGVuZGVuY3kKLSogVElOS0VSUE9QLTIzMzAgSmF2YVNjcmlwdCBHTFYgc2hvdWxkIGV4cG9zZSBHcmFwaFNPTjJXcml0ZXIgYW5kIEdyYXBoU09OUmVhZGVyCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTEwLCAzLjMuMTAgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTMtOV1dCiA9PT0gVGlua2VyUG9wIDMuMy45IChSZWxlYXNlIERhdGU6IE9jdG9iZXIgMTQsIDIwMTkpCiAKLSogRXhwb3NlZCByZXNwb25zZSBzdGF0dXMgYXR0cmlidXRlcyBpbiBhIGBSZXNwb25zZUVycm9yYCBpbiBncmVtbGluLWphdmFzY3JpcHQuCi0qIEFkZGVkIGBJbW11dGFibGVFeHBsYW5hdGlvbmAgZm9yIGEgYFRyYXZlcnNhbEV4cGxhbmF0aW9uYCB0aGF0IGp1c3QgY29udGFpbnMgZGF0YS4KLSogQWRkZWQgc3VwcG9ydCBmb3IgYFVuYXJ5T3BlcmF0b3JgIGFuZCBgQmluYXJ5T3BlcmF0b3JgIGZvciBgTGFtYmRhYCBpbnN0YW5jZXMuCi0qIEZpeGVkIGBUcmF2ZXJzYWxFeHBsYW5hdGlvbmAgZGVzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OIDIgYW5kIDMgd2hpY2ggd2FzIG5vdCBzdXBwb3J0ZWQgYmVmb3JlIGluIEphdmEuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSByZXF1ZXN0IGhlYWRlcnMgaW4gUHl0aG9uLgotKiBGaXhlZCBKYXZhIERTTCBhbm5vdGF0aW9uIGZvciBnZW5lcmF0aW9uIG9mIGBhZGRFKClgIHdoaWNoIHdhcyBmb3JtZXJseSBjYWxsaW5nIHRoZSB3cm9uZyBzdGVwLgotKiBEZXByZWNhdGVkIGBzY3JpcHRFdmFsdWF0aW9uVGltZW91dGAgaW4gZmF2b3Igb2YgdGhlIG1vcmUgZ2VuZXJpYyBgZXZhbHVhdGlvblRpbWVvdXRgLgotKiBCdW1wZWQgamFja3Nvbi1kYXRhYmluZCB0byAyLjkuMTAgZHVlIHRvIENWRS0yMDE5LTE0Mzc5LCBDVkUtMjAxOS0xNDU0MCwgQ1ZFLTIwMTktMTYzMzUuCi0qIEFkZGVkIGBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneWAgdG8gYWxsb3cgd2FybmluZ3Mgb3IgZXhjZXB0aW9ucyB3aGVuIGNlcnRhaW4ga2V5cyBhcmUgdXNlZCBmb3IgcHJvcGVydGllcy4KLSogQWRkZWQgdGhlIGBBYnN0cmFjdFdhcm5pbmdWZXJpZmljYXRpb25TdHJhdGVneWAgYmFzZSBjbGFzcyBmb3IgIndhcm5pbmciIHN0eWxlIGBWZXJpZmljYXRpb25TdHJhdGVneWAgaW1wbGVtZW50YXRpb25zLgotKiBSZWZhY3RvcmVkIGBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneWAgdG8gdXNlIGBBYnN0cmFjdFdhcm5pbmdWZXJpZmljYXRpb25TdHJhdGVneWAuCi0qIEFkZGVkIGBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneWAgdG8gUHl0aG9uLgotKiBJbXByb3ZlZCBoYW5kbGluZyBvZiBgbnVsbGAgdmFsdWVzIGluIGJ5dGVjb2RlIGNvbnN0cnVjdGlvbi4KLSogRml4ZWQgSmF2YSBkcml2ZXIgYXV0aGVudGljYXRpb24gcHJvYmxlbXMgd2hlbiBjYWxsaW5nIHRoZSBkcml2ZXIgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgotKiBNb2RpZmllZCBKYXZhIGRyaXZlciB0byB1c2UgSVAgYWRkcmVzcyByYXRoZXIgdGhhbiBob3N0bmFtZSB0byBjcmVhdGUgY29ubmVjdGlvbnMuCi0qIEZpeGVkIHBvdGVudGlhbCBmb3IgYE51bGxQb2ludGVyRXhjZXB0aW9uYCB3aXRoIGVtcHR5IGlkZW50aWZpZXJzIGluIGBHcmFwaFN0ZXBgLgotKiBQb3N0cG9uZWQgdGhlIHRpbWluZyBvZiB0cmFuc3BvcnQgY3JlYXRpb24gdG8gYGNvbm5lY3Rpb24ud3JpdGVgIGluIEdyZW1saW4gUHl0aG9uLgotKiBNYWRlIGBFdmVudFN0cmF0ZWd5YCBjb21wYXRpYmxlIHdpdGggbXVsdGktdmFsdWVkIHByb3BlcnRpZXMuCi0qIENoYW5nZWQgYFRyYXZlcnNhbE9wUHJvY2Vzc29yYCB0byB0aHJvdyBhIGBTRVJWRVJfRVJST1JfU0NSSVBUX0VWQUxVQVRJT05gICg1OTcpIGlmIGxhbWJkYXMgZG9uJ3QgY29tcGlsZS4KLSogQnVtcGVkIGBjb21tb25zLWNvbXByZXNzYCB0byAxLjE5IGR1ZSB0byBDVkUtMjAxOC0xMTc3MS4KLSogZ3JlbWxpbi1qYXZhc2NyaXB0OiBVc2UgYHNvY2tldEVycm9yYCBDb25uZWN0aW9uIGV2ZW50IHRvIHByZXZlbnQgZXhpdCBvbiBlcnJvciBhbmQgZXhwb3NlIENvbm5lY3Rpb24gZXZlbnRzLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjE1OSBFdmVudFN0cmF0ZWd5IGRvZXNuJ3QgaGFuZGxlIG11bHRpLXZhbHVlZCBwcm9wZXJ0aWVzCi0qIFRJTktFUlBPUC0yMjgzIEdyYXBoU3RlcCdzIGlkcyBudWxsIGV4Y2VwdGlvbgotKiBUSU5LRVJQT1AtMjI4NSBFcnJvciBvYmplY3QgaXMgdW5yZWFjaGFibGUKLSogVElOS0VSUE9QLTIyODkgVXNlIGFkZHJlc3MgaW5zdGVhZCBvZiBob3N0bmFtZSBmb3IgY29ubmVjdGlvbgotKiBUSU5LRVJQT1AtMjI5MCBKYXZhc2NyaXB0IEdMViBjb25uZWN0aW9uIHJlZnVzZWQgZXJyb3IgaGFuZGxpbmcKLSogVElOS0VSUE9QLTIyOTEgVHJhdmVyc2FsRXhwbGFuYXRpb24gZGVzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OCi0qIFRJTktFUlBPUC0yMjk4IEJ5dGVjb2RlLmphdmEgIGZsYXR0ZW5Bcmd1bWVudHMgdGhyb3cgZXhjZXB0aW9uIHdoZW4gbnVsbAotKiBUSU5LRVJQT1AtMjMwMyBHcmVtbGluRHNsIGdlbmVyYXRlIGFkZFYgaW5zdGVhZCBvZiBhZGRFCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE4MTAgQWRkIExhbWJkYS5iaW5hcnlPcGVyYXRvciBhbmQgTGFtYmRhLnVuYXJ5T3BlcmF0b3IKLSogVElOS0VSUE9QLTE4MzggUHl0aG9uIHNhbXBsZSBzY3JpcHQKLSogVElOS0VSUE9QLTIwNDYgR3JlbWxpbi1QeXRob246IFN1cHBvcnQgY3VzdG9tIHJlcXVlc3QgaGVhZGVycyBpbiBXZWJTb2NrZXQgcmVxdWVzdAotKiBUSU5LRVJQT1AtMjIxMyBSZXBsYWNlIHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0IGluIGZhdm9yIG9mIHNvbWV0aGluZyBtb3JlIHN1aXRhYmxlIHRvIGJ5dGVjb2RlCi0qIFRJTktFUlBPUC0yMjc1IFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIDIuOS45LjMrCi0qIFRJTktFUlBPUC0yMjc3IFB5dGhvbiBzZGsgcG9zdHBvbmUgdGhlIHRpbWluZyB0byBjcmVhdGUgdHJhbnNwb3J0Ci0qIFRJTktFUlBPUC0yMjgwIFByZXZlbnQgdXNlIG9mIFQgdmFsdWVzIGFzIHByb3BlcnR5IGtleSBvdmVybG9hZHMKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtOSwgMy4zLjkgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTMtOF1dCiA9PT0gVGlua2VyUG9wIDMuMy44IChSZWxlYXNlIERhdGU6IEF1Z3VzdCA1LCAyMDE5KQogCi0qIFByb3ZpZGVkIHN1cHBvcnQgZm9yIGB3aXRoQ29tcHV0ZXIoKWAgaW4gZ3JlbWxpbi1qYXZhc2NyaXB0LgotKiBEZXByZWNhdGVkIHJlbW90ZSB0cmF2ZXJzYWwgc2lkZS1lZmZlY3QgcmV0cmlldmFsIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgotKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNC4xNy4KLSogQnVtcGVkIHRvIEphY2tzb24gRGF0YWJpbmQgMi45LjkuMS4KLSogRml4ZWQgYnVnIHdpdGggUHl0aG9uIGluIGBnOkRhdGVgIG9mIEdyYXBoU09OIHdoZXJlIGxvY2FsIHRpbWUgem9uZSB3YXMgYmVpbmcgdXNlZCBkdXJpbmcgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24uCi0qIEltcHJvdmVkIGVycm9yIG1lc3NhZ2luZyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBzZXJpYWxpemUgbXVsdGktcHJvcGVydGllcyB0byBHcmFwaE1MLgotKiBEZXByZWNhdGVkIG11bHRpL21ldGEtcHJvcGVydHkgc3VwcG9ydCBpbiBgTmVvNGpHcmFwaGAuCi0qIEltcHJvdmVkIGV4Y2VwdGlvbiBhbmQgbWVzc2FnaW5nIGZvciBndC9ndGUvbHQvbHRlIHdoZW4gb25lIG9mIHRoZSBvYmplY3QgaXNuJ3QgYSBgQ29tcGFyYWJsZWAuCi0qIEFkZGVkIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgZm9yIHN0b3JhZ2UgaXRlcmF0b3IgbGVhay4KLSogRml4ZWQgbXVsdGlwbGUgaXRlcmF0b3IgbGVha3MgaW4gcXVlcnkgcHJvY2Vzc29yLgotKiBGaXhlZCBgb3B0aW9uYWwoKWAgc28gdGhhdCB0aGUgY2hpbGQgdHJhdmVyc2FsIGlzIHRyZWF0ZWQgYXMgbG9jYWwuCi0qIENoYW5nZWQgZGVmYXVsdCBrZWVwLWFsaXZlIHRpbWUgZm9yIGRyaXZlciB0byAzIG1pbnV0ZXMuCi0qIEZpeGVkIGJ1ZyB3aGVyZSBzZXJ2ZXItc2lkZSBrZWVwLWFsaXZlIHdhcyBub3QgYWx3YXlzIGRpc2FibGVkIHdoZW4gaXRzIHNldHRpbmcgd2FzIHplcm8uCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGBoYXNOZXh0KClgIGluIEphdmFzY3JpcHQgYW5kIC5ORVQuCi0qIEltcHJvdmVkIGVycm9yIG1lc3NhZ2luZyBmb3IgaW52YWxpZCBpbnB1dHMgdG8gdGhlIFRpbmtlckdyYXBoIGBJZE1hbmFnZXJgIGluc3RhbmNlcy4KLSogRm9yY2VkIHJlcGxhY2VtZW50IG9mIGNvbm5lY3Rpb25zIGluIEphdmEgZHJpdmVyIGZvciBjZXJ0YWluIGV4Y2VwdGlvbiB0eXBlcyB0aGF0IHNlZW0gdG8gdWx0aW1hdGVseSBraWxsIHRoZSBjb25uZWN0aW9uLgotKiBDaGFuZ2VkIHRoZSBgcmV2ZXJzZSgpYCBvZiBgZGVzY2AgYW5kIGBhc2NgIG9uIGBPcmRlcmAgdG8gbm90IHVzZSB0aGUgZGVwcmVjYXRlZCBgZGVjcmAgYW5kIGBpbmNyYC4KLSogRml4ZWQgYnVnIGluIGBNYXRjaFN0ZXBgIHdoZXJlIHRoZSBjb3JyZWN0IHdhcyBub3QgcHJvcGVybHkgZGV0ZXJtaW5lZC4KLSogRml4ZWQgYnVnIHdoZXJlIGNsaWVudC9zZXJ2ZXIgZXhjZXB0aW9uIG1pc21hdGNoIHdoZW4gc2VydmVyIHRocm93IFN0YWNrT3ZlcmZsb3dFcnJvcgotKiBBZGRlZCB1bmRlcnNjb3JlIHN1ZmZpeGVkIHN0ZXBzIGFuZCB0b2tlbnMgaW4gR3JlbWxpbi1QeXRob24gdGhhdCBjb25mbGljdCB3aXRoIGdsb2JhbCBmdW5jdGlvbiBuYW1lcy4KLSogUHJldmVudCBleGNlcHRpb24gd2hlbiBjbG9zaW5nIGEgc2Vzc2lvbiB0aGF0IGRvZXNuJ3QgZXhpc3QuCi0qIEFsbG93IHByZWRpY2F0ZXMgYW5kIHRyYXZlcnNhbHMgdG8gYmUgdXNlZCBhcyBvcHRpb25zIGluIGBCcmFuY2hTdGVwYC4KLSogRW5zdXJlIG9ubHkgYSBzaW5nbGUgZmluYWwgcmVzcG9uc2UgaXMgc2VudCB0byB0aGUgY2xpZW50IHdpdGggR3JlbWxpbiBTZXJ2ZXIuCi0qIERlcHJlY2F0ZWQgYFJlc3BvbnNlSGFuZGxlckNvbnRleHRgIHdpdGggcmVsYXRlZCBpbmZyYXN0cnVjdHVyZSBhbmQgZm9sZGVkIGl0cyBmdW5jdGlvbmFsaXR5IGludG8gYENvbnRleHRgIGluIEdyZW1saW4gU2VydmVyLgotKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBgYWdncmVnYXRlKClgIGJ5IGF2b2lkaW5nIGV4Y2Vzc2l2ZSBjYWxscyB0byBgaGFzTmV4dCgpYCB3aGVuIHRoZSBiYXJyaWVyIGlzIGVtcHR5LgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTYxOSBUaW5rZXJHcmFwaENvbXB1dGVyIHdvcmtlciBjb3VudCBhZmZlY3RzIE9wdGlvbmFsU3RlcCBxdWVyeSByZXN1bHRzCi0qIFRJTktFUlBPUC0yMjI0IERldGVjdCBhbmQgZml4IHJlc291cmNlIGxlYWsKLSogVElOS0VSUE9QLTIyMzAgbWF0Y2goKSBzdGVwIHVuZXhwZWN0ZWQgYmVoYXZpb3VycwotKiBUSU5LRVJQT1AtMjIzMiBSZW1vdGVTdHJhdGVneSBkb2VzIG5vdCBjYWxsIHBhcmVudCBjbGFzcyBUcmF2ZXJzYWxTdHJhdGVneSBfX2luaXRfXwotKiBUSU5LRVJQT1AtMjIzOCBGaXggcmVtYWluaW5nIGl0ZXJhdG9yIGxlYWtzIG1hcmtlZCBieSBASWdub3JlSXRlcmF0b3JMZWFrCi0qIFRJTktFUlBPUC0yMjQxIENsaWVudCBleGNlcHRpb24gZG9uJ3QgbWF0Y2ggU2VydmVyIGV4Y2VwdGlvbiB3aGVuIHNlcnZlciAgdGhyb3cgU3RhY2tPdmVyZmxvd0Vycm9yCi0qIFRJTktFUlBPUC0yMjQ4IEluc3RhYmlsaXR5IG9mIGRyaXZlciBmb3IgYmxvY2tlZCByZXF1ZXN0cwotKiBUSU5LRVJQT1AtMjI2NCBHcmVtbGluIFB5dGhvbiBzaG91bGQgZGVzZXJpYWxpemUgZzpEYXRlIHRvIFVUQwotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xMDg0IEJyYW5jaCBvcHRpb24gdG9rZW5zIHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHRyYXZlcnNhbHMuCi0qIFRJTktFUlBPUC0xOTIxIFN1cHBvcnQgaGFzTmV4dCB0ZXJtaW5hbCBzdGVwIGluIEdMVnMKLSogVElOS0VSUE9QLTIwMjAgU3VwcG9ydCB3aXRoQ29tcHV0ZXIoKSBmb3IgamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMjIyMyBVcGRhdGUgamFja3NvbiBkYXRhYmluZCB0byAyLjkuOQotKiBUSU5LRVJQT1AtMjIzNiBJbXByb3ZlIGVycm9yIG1lc3NhZ2luZyBmb3IgVGlua2VyR3JhcGggSWRNYW5hZ2VycyB0aGF0IGZhaWwgb24gY29udmVyc2lvbnMKLSogVElOS0VSUE9QLTIyMzcgUHJldmVudCBlcnJvciB3aGVuIGNsb3Npbmcgc2Vzc2lvbnMgdGhhdCBkb24ndCBleGlzdCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTIyNDYgQ29uc29saWRhdGUgdGhlIGVycm9yIHByb3BhZ2F0aW9uIHRvIHRoZSBjbGllbnQKLSogVElOS0VSUE9QLTIyNTYgcHJvY2Vzc0FsbFN0YXJ0cyBvZiBBZ2dyZWdhdGVTdGVwIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGJhcnJpZXIgaXMgZW1wdHkKLSogVElOS0VSUE9QLTIyNjAgVXBkYXRlIGphY2tzb24gZGF0YWJpbmQgMi45LjkuMQotKiBUSU5LRVJQT1AtMjI2NSBEZXByZWNhdGUgVHJhdmVyc2FsLmdldFNpZGVFZmZlY3RzKCkgZnVuY3Rpb25hbGl0eSBmb3IgcmVtb3RpbmcgcHVycG9zZXMKLSogVElOS0VSUE9QLTIyNzAgRGVwcmVjYXRlIG11bHRpL21ldGFwcm9wZXJ0eSBzdXBwb3J0IGluIE5lbzRqCi0qIFRJTktFUlBPUC0yMjcyIFJlbmFtZSBzdGVwcyBhbmQgdG9rZW5zIHRoYXQgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBweXRob24gZnVuY3Rpb25zCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTgsIDMuMy44IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0zLTddXQogPT09IFRpbmtlclBvcCAzLjMuNyAoUmVsZWFzZSBEYXRlOiBNYXkgMjgsIDIwMTkpCiAKLSogRGV2ZWxvcGVkIERTTCBwYXR0ZXJuIGZvciBncmVtbGluLWphdmFzY3JpcHQuCi0qIEdlbmVyYXRlZCB1YmVyamFyIGFydGlmYWN0IGZvciBHcmVtbGluIENvbnNvbGUuCi0qIEltcHJvdmVkIGZvbGRpbmcgb2YgYHByb3BlcnR5KClgIHN0ZXAgaW50byByZWxhdGVkIG11dGF0aW5nIHN0ZXBzLgotKiBBZGRlZCBgaW5qZWN0KClgIHRvIHN0ZXBzIGdlbmVyYXRlZCBvbiB0aGUgRFNMIGBUcmF2ZXJzYWxTb3VyY2VgLgotKiBSZW1vdmVkIGBncGVyZnV0aWxzYCBkZXBlbmRlbmNpZXMgZnJvbSBHcmVtbGluIENvbnNvbGUuCi0qIEZpeGVkIGBQYXJ0aXRpb25TdHJhdGVneWAgd2hlbiBzZXR0aW5nIHZlcnRleCBsYWJlbCBhbmQgaGF2aW5nIGBpbmNsdWRlTWV0YVByb3BlcnRpZXNgIGNvbmZpZ3VyZWQgdG8gYHRydWVgLgotKiBFbnN1cmUgYGdyZW1saW4uc2hgIHdvcmtzIHdoZW4gZGlyZWN0b3JpZXMgY29udGFpbiBzcGFjZXMuCi0qIFByZXZlbnRlZCBjbGllbnQtc2lkZSBoYW5ncyBpZiBtZXRhZGF0YSBnZW5lcmF0aW9uIGZhaWxzIG9uIHRoZSBzZXJ2ZXIuCi0qIEZpeGVkIGJ1ZyB3aXRoIGBFdmVudFN0cmF0ZWd5YCBpbiByZWxhdGlvbiB0byBgYWRkRSgpYCB3aGVyZSBkZXRhY2htZW50IHdhcyBub3QgaGFwcGVuaW5nIHByb3Blcmx5LgotKiBFbnN1cmVkIHRoYXQgYGdyZW1saW4uc2hgIHdvcmtzIHdoZW4gZGlyZWN0b3JpZXMgY29udGFpbiBzcGFjZXMuCi0qIEZpeGVkIGJ1ZyBpbiBkZXRhY2htZW50IG9mIGBQYXRoYCB3aGVyZSBlbWJlZGRlZCBjb2xsZWN0aW9uIG9iamVjdHMgd291bGQgcHJldmVudCB0aGF0IHByb2Nlc3MuCi0qIEVuYWJsZWQgYGN0cmwrY2AgdG8gaW50ZXJydXB0IGxvbmcgcnVubmluZyBwcm9jZXNzZXMgaW4gR3JlbWxpbiBDb25zb2xlLgotKiBRdWlldGVkICJob3N0IHVuYXZhaWxhYmxlIiB3YXJuaW5ncyBmb3IgYm90aCB0aGUgZHJpdmVyIGFuZCBHcmVtbGluIENvbnNvbGUuCi0qIEZpeGVkIGNvbnN0cnVjdGlvbiBvZiBgZzpMaXN0YCBmcm9tIGFycmF5cyBpbiBncmVtbGluLWphdmFzY3JpcHQuCi0qIEZpeGVkIGJ1ZyBpbiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgaW50ZXJwcmV0ZXIgbW9kZSBhcm91bmQgY2xhc3MgZGVmaW5pdGlvbnMuCi0qIEltcGxlbWVudGVkIGBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneWAuCi0qIEZpeGVkIGJlaGF2aW9yIG9mIGBQYCBmb3IgYHdpdGhpbigpYCBhbmQgYHdpdGhvdXQoKWAgaW4gR0xWcyB0byBiZSBjb25zaXN0ZW50IHdpdGggSmF2YSB3aGVuIHVzaW5nIHZhcmFyZ3MuCi0qIENsZWFyZWQgdGhlIGlucHV0IGJ1ZmZlciBhZnRlciBleGNlcHRpb25zIGluIEdyZW1saW4gQ29uc29sZS4KLSogQWRkZWQgcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZSB0aGUgYHByb2Nlc3NvcmAgaW4gdGhlIGdyZW1saW4tamF2YXNjcmlwdCBgY2xpZW50YCBjb25zdHJ1Y3Rvci4KLSogQnVtcGVkIGBOZXR0eWAgdG8gNC4xLjMyLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjExMiBGb2xkaW5nIGluIHByb3BlcnR5KCkgc3RlcCBpcyBub3QgYmVpbmcgb3B0aW1hbGx5IHBlcmZvcm1lZAotKiBUSU5LRVJQT1AtMjE4MCBncmVtbGluLnNoIGRvZXNuJ3Qgd29yayB3aGVuIGRpcmVjdG9yaWVzIGNvbnRhaW4gc3BhY2VzCi0qIFRJTktFUlBPUC0yMTgzIEludGVycHJldGVyTW9kZUFTVFRyYW5zZm9ybWF0aW9uIG5lZWRzIHRvIGJlIG1vcmUgc3BlY2lmaWMgYWJvdXQgd2hhdCBpdCB0cmFuc2Zvcm1zCi0qIFRJTktFUlBPUC0yMTk0IEVuZm9yY2luZyBhbiBvcmRlciBvbiBwcm9wZXJ0aWVzIGluIG9uZSB0ZXN0IG1ldGhvZCBvZiBDaG9vc2VUZXN0Ci0qIFRJTktFUlBPUC0yMTk2IFBhcnRpdGlvblN0cmF0ZWd5IHdpdGggaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpIGNhbid0IGFkZCBsYWJlbGVkIHZlcnRleAotKiBUSU5LRVJQT1AtMjE5OCBEb2N1bWVudGF0aW9uIGZvciBTdG9yZSBjb250cmFkaWN0cyBpdHNlbGYKLSogVElOS0VSUE9QLTIxOTkgd2l0aGluIHN0ZXAgZG9lcyBub3Qgd29yayB3aXRoIG1vcmUgdGhhbiB0d28gcGFyYW1ldGVycyB3aXRoIHB5dGhvbgotKiBUSU5LRVJQT1AtMjIwMCBBZGRFZGdlU3RhcnRTdGVwIHVzZWQgRGV0YWNoZWRGYWN0b3J5LmRldGFjaCBpbnN0ZWFkIG9mIEV2ZW50U3RyYXRlZ3kuZGV0YWNoCi0qIFRJTktFUlBPUC0yMjA0IENsaWVudCByZWNlaXZlcyBubyByZXNwb25zZSBvbiBmYWlsZWQgcmVxdWVzdAotKiBUSU5LRVJQT1AtMjIwNiBDZXJ0YWluIHR5cGVzIGluIGphdmFzY3JpcHQgZG9uJ3QgYXBwZWFyIHRvIHNlcmlhbGl6ZSB3aXRoIGEgR3JhcGhTT04gdHlwZQotKiBUSU5LRVJQT1AtMjIxMiBQYXRoIGlzIG5vdCBkZXRhY2hpbmcgcHJvcGVybHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIwODkgSmF2YXNjcmlwdCBEU0wgc3VwcG9ydAotKiBUSU5LRVJQT1AtMjE3OSBIYXZlIG8uYS50LmcuZHJpdmVyLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uIGV4dGVuZCBJT0V4Y2VwdGlvbgotKiBUSU5LRVJQT1AtMjE4MSBBbGxvdyBjdHJsK2MgdG8gYnJlYWsgb3V0IG9mIGEgbG9uZyBydW5uaW5nIHByb2Nlc3MgaW4gR3JlbWxpbiBDb25zb2xlCi0qIFRJTktFUlBPUC0yMTgyIFJlbW92ZSBncGVyZnV0aWxzIGZyb20gR3JlbWxpbiBDb25zb2xlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjE5MSBJbXBsZW1lbnQgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kKLSogVElOS0VSUE9QLTIyMTEgUHJvdmlkZSBBUEkgdG8gYWRkIHBlciByZXF1ZXN0IG9wdGlvbiBmb3IgYSBieXRlY29kZQorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjMueC5hc2NpaWRvYyNyZWxlYXNlLTMtMy03LCAzLjMuNyBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtMy02XV0KID09PSBUaW5rZXJQb3AgMy4zLjYgKFJlbGVhc2UgRGF0ZTogTWFyY2ggMTgsIDIwMTkpCiAKLSogRG9ja2VyIGltYWdlcyB1c2UgdXNlciBgZ3JlbWxpbmAgaW5zdGVhZCBvZiBgcm9vdGAKLSogQWRkZWQgYSBuZXcgYFJlc3BvbnNlU3RhdHVzQ29kZWAgZm9yIGNsaWVudC1zaWRlIHNlcmlhbGl6YXRpb24gZXJyb3JzLgotKiBSZWZhY3RvcmVkIHVzZSBvZiBgY29tbW9ucy1sYW5nYCB0byB1c2UgYGNvbW1vbi1sYW5nM2Agb25seSwgdGhvdWdoIGRlcGVuZGVuY2llcyBtYXkgc3RpbGwgdXNlIGBjb21tb25zLWxhbmdgLgotKiBCdW1wZWQgYGNvbW1vbnMtbGFuZzNgIHRvIDMuOC4xLgotKiBJbXByb3ZlZCBoYW5kbGluZyBvZiBjbGllbnQtc2lkZSBzZXJpYWxpemF0aW9uIGVycm9ycyB0aGF0IHdlcmUgZm9ybWVybHkganVzdCBiZWluZyBsb2dnZWQgcmF0aGVyIHRoYW4gYmVpbmcgcmFpc2VkLgotKiBBZGQgUHl0aG9uIGBUcmF2ZXJzYWxNZXRyaWNzYCBhbmQgYE1ldHJpY3NgIGRlc2VyaWFsaXplcnMuCi0qIE1hc2tlZCBzZW5zaXRpdmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluIHRoZSBsb2dzIG9mIGBLcnlvU2hpbVNlcnZpY2VMb2FkZXJgLgotKiBBZGRlZCBgZ2xvYmFsRnVuY3Rpb25DYWNoZUVuYWJsZWRgIHRvIHRoZSBgR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luYCB0byBhbGxvdyB0aGF0IGNhY2hlIHRvIGJlIGRpc2FibGVkLgotKiBBZGRlZCBgZ2xvYmFsRnVuY3Rpb25DYWNoZUVuYWJsZWRgIG92ZXJyaWRlIHRvIGBTZXNzaW9uT3BQcm9jZXNzb3JgIGNvbmZpZ3VyYXRpb24uCi0qIEFkZGVkIHN0YXR1cyBjb2RlIHRvIGBHcmVtbGluU2VydmVyRXJyb3JgIHNvIHRoYXQgaXQgd291bGQgYmUgbW9yZSBkaXJlY3RseSBhY2Nlc3NpYmxlIGR1cmluZyBmYWlsdXJlcy4KLSogQWRkZWQgR3JhcGhTT04gc2VyaWFsaXphdGlvbiBzdXBwb3J0IGZvciBgRHVyYXRpb25gLCBgQ2hhcmAsIGBCeXRlQnVmZmVyYCwgYEJ5dGVgLCBgQmlnSW50ZWdlcmAgYW5kIGBCaWdEZWNpbWFsYCBpbiBgZ3JlbWxpbi1weXRob25gLgotKiBBZGRlZCBgUHJvZmlsaW5nQXdhcmVgIGludGVyZmFjZSB0byBhbGxvdyBzdGVwcyB0byBiZSBub3RpZmllZCB0aGF0IGBwcm9maWxlKClgIHdhcyBiZWluZyBjYWxsZWQuCi0qIEZpeGVkIGJ1ZyB3aGVyZSBgcHJvZmlsZSgpYCBjb3VsZCBwcm9kdWNlIG5lZ2F0aXZlIHRpbWluZ3Mgd2hlbiBgZ3JvdXAoKWAgY29udGFpbmVkIGEgcmVkdWNpbmcgYmFycmllci4KLSogSW1wcm92ZWQgbG9naWMgZGV0ZXJtaW5pbmcgdGhlIGRlYWQgb3IgYWxpdmUgc3RhdGUgb2YgYSBKYXZhIGRyaXZlciBgQ29ubmVjdGlvbmAuCi0qIEltcHJvdmVkIGhhbmRsaW5nIG9mIGRlYWQgY29ubmVjdGlvbnMgYW5kIHRoZSBhdmFpbGFiaWxpdHkgb2YgaG9zdHMuCi0qIEJ1bXBlZCBgaHR0cGNsaWVudGAgdG8gNC41LjcuCi0qIEJ1bXBlZCBgc2xmNGpgIHRvIDEuNy4yNS4KLSogQnVtcGVkIGBjb21tb25zLWNvZGVjYCB0byAxLjEyLgotKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNS42LgotKiBCdW1wZWQgdG8gSGFkb29wIDIuNy43LgotKiBGaXhlZCBwYXJ0aWFsIHJlc3BvbnNlIGZhaWx1cmVzIHdoZW4gdXNpbmcgYXV0aGVudGljYXRpb24gaW4gYGdyZW1saW4tcHl0aG9uYC4KLSogRml4ZWQgY29uY3VycmVuY3kgaXNzdWVzIGluIGBUcmF2ZXJzZXJTZXQudG9TdHJpbmcoKWAgYW5kIGBPYmplY3RXcml0YWJsZS50b1N0cmluZygpYC4KLSogRml4ZWQgYSBidWcgaW4gYElubGluZUZpbHRlclN0cmF0ZWd5YCB0aGF0IG1peGVkIHVwIGFuZCdzIGFuZCBvcidzIHdoZW4gZm9sZGluZyBtZXJnaW5nIGNvbmRpdGlvbnMgdG9nZXRoZXIuCi0qIEZpeGVkIGEgYnVnIGluIGBQYXJ0aXRpb25TdHJhdGVneWAgd2hlcmUgYGFkZEUoKWAgYXMgYSBzdGFydCBzdGVwIHdhcyBub3QgYXBwbHlpbmcgdGhlIHBhcnRpdGlvbi4KLSogSW1wcm92ZWQgaGFuZGxpbmcgb2YgZmFpbGluZyBgQXV0aGVudGljYXRvcmAgaW5zdGFuY2VzIHRodXMgaW1wcm92aW5nIHNlcnZlciByZXNwb25zZXMgdG8gZHJpdmVycy4KLSogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgYEphdmFUcmFuc2xhdG9yYCBieSByZWR1Y2luZyBjYWxscyB0byBgTWV0aG9kLmdldFBhcmFtZXRlcnMoKWAuCi0qIEltcGxlbWVudGVkIGBFYXJseUxpbWl0U3RyYXRlZ3lgIHdoaWNoIGlzIHN1cHBvc2VkIHRvIHNpZ25pZmljYW50bHkgcmVkdWNlIGJhY2tlbmQgb3BlcmF0aW9ucyBmb3IgcXVlcmllcyB0aGF0IHVzZSBgcmFuZ2UoKWAuCi0qIFJlZHVjZWQgY2hhbmNlIG9mIGhhc2ggY29sbGlzaW9ucyBpbiBgQnl0ZWNvZGVgIGFuZCBpdHMgaW5uZXIgY2xhc3Nlcy4KLSogQWRkZWQgYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCBtZW1iZXIgdG8gdGhlIGBUcmF2ZXJzYWxgIGNsYXNzIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgYGF3YWl0IC4uLiBvZmAgbG9vcHMgKGFzeW5jIGl0ZXJhYmxlcykuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0yMDgxIFBlcnNpc3RlZE91dHB1dFJERCBtYXRlcmlhbGlzZXMgcmRkIGxhemlseSB3aXRoIFNwYXJrIDIueAotKiBUSU5LRVJQT1AtMjA5MSBXcm9uZy9NaXNzaW5nIGZlYXR1cmUgcmVxdWlyZW1lbnRzIGluIFN0cnVjdHVyZVN0YW5kYXJkVGVzdFN1aXRlCi0qIFRJTktFUlBPUC0yMDk0IEdyZW1saW4gRHJpdmVyIENsdXN0ZXIgQnVpbGRlciBzZXJpYWxpemVyIG1ldGhvZCBkb2VzIG5vdCB1c2UgbWltZVR5cGUgYXMgc3VnZ2VzdGVkCi0qIFRJTktFUlBPUC0yMDk1IEdyb3VwU3RlcCBsb29rcyBmb3IgaXJyZWxldmFudCBiYXJyaWVyIHN0ZXBzCi0qIFRJTktFUlBPUC0yMDk2IGdyZW1saW5weXRob246IEF0dHJpYnV0ZUVycm9yIHdoZW4gY29ubmVjdGlvbiBpcyBjbG9zZWQgYmVmb3JlIHJlc3VsdCBpcyByZWNlaXZlZAotKiBUSU5LRVJQT1AtMjEwMCBjb2FsZXNjZSgpIGNyZWF0aW5nIHVuZXhwZWN0ZWQgcmVzdWx0cyB3aGVuIHVzZWQgd2l0aCBvcmRlcigpCi0qIFRJTktFUlBPUC0yMTA1IEdyZW1saW4tUHl0aG9uIGNvbm5lY3Rpb24gbm90IHJldHVybmVkIGJhY2sgdG8gdGhlIHBvb2wgb24gZXhjZXB0aW9uIGZyb20gZ3JlbWxpbiBzZXJ2ZXIKLSogVElOS0VSUE9QLTIxMTMgUC5XaXRoaW4oKSBkb2Vzbid0IHdvcmsgd2hlbiBnaXZlbiBhIExpc3QgYXJndW1lbnQKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMTg4OSBKYXZhU2NyaXB0IEdMVjogVXNlIGhlYXJ0YmVhdCB0byBwcmV2ZW50IGNvbm5lY3Rpb24gdGltZW91dAotKiBUSU5LRVJQT1AtMjAxMCBHZW5lcmF0ZSBqc2RvYyBmb3IgZ3JlbWxpbi1qYXZhc2NyaXB0Ci0qIFRJTktFUlBPUC0yMDEzIFByb2Nlc3MgdGVzdHMgdGhhdCBhcmUgYXV0by1pZ25vcmVkIHN0aW5rCi0qIFRJTktFUlBPUC0yMDE4IEdlbmVyYXRlIEFQSSBkb2NzIGZvciBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMjAzOCBNYWtlIGdyb292eSBzY3JpcHQgY2FjaGUgc2l6ZSBjb25maWd1cmFibGUKLSogVElOS0VSUE9QLTIwNTAgQWRkIGEgOmJ5dGVjb2RlIGNvbW1hbmQgdG8gR3JlbWxpbiBDb25zb2xlCi0qIFRJTktFUlBPUC0yMDYyIEFkZCBUcmF2ZXJzYWwgY2xhc3MgdG8gQ29yZUltcG9ydHMKLSogVElOS0VSUE9QLTIwNjUgT3B0aW1pemUgaXRlcmF0ZSgpIGZvciByZW1vdGUgdHJhdmVyc2FscwotKiBUSU5LRVJQT1AtMjA2NyBBbGxvdyBnZXR0aW5nIHJhdyBkYXRhIGZyb20gR3JlbWxpbi5OZXQuRHJpdmVyLklHcmVtbGluQ2xpZW50Ci0qIFRJTktFUlBPUC0yMDY4IEJ1bXAgSmFja3NvbiBEYXRhYmluZCAyLjkuNwotKiBUSU5LRVJQT1AtMjA2OSBEb2N1bWVudCBjb25maWd1cmF0aW9uIG9mIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0yMDcwIGdyZW1saW4tamF2YXNjcmlwdDogSW50cm9kdWNlIENvbm5lY3Rpb24gcmVwcmVzZW50YXRpb24KLSogVElOS0VSUE9QLTIwNzEgZ3JlbWxpbi1weXRob246IHRoZSBncmFwaHNvbiBkZXNlcmlhbGl6ZXIgZm9yIGc6U2V0IHNob3VsZCByZXR1cm4gYSBweXRob24gc2V0Ci0qIFRJTktFUlBPUC0yMDczIEdlbmVyYXRlIHRhYnMgZm9yIHN0YXRpYyBjb2RlIGJsb2NrcwotKiBUSU5LRVJQT1AtMjA3NCBFbnN1cmUgdGhhdCBvbmx5IE51R2V0IHBhY2thZ2VzIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uIGFyZSBwdXNoZWQKLSogVElOS0VSUE9QLTIwNzcgVmVydGV4UHJvZ3JhbS5CdWlsZGVyIHNob3VsZCBoYXZlIGEgZGVmYXVsdCBjcmVhdGUoKSBtZXRob2Qgd2l0aCBubyBHcmFwaAotKiBUSU5LRVJQT1AtMjA3OCBIaWRlIHVzZSBvZiBFbXB0eUdyYXBoIG9yIFJlbW90ZUdyYXBoIGJlaGluZCBhIG1vcmUgdW5pZmllZCBtZXRob2QgZm9yIFRyYXZlcnNhbFNvdXJjZSBjb25zdHJ1Y3Rpb24KLSogVElOS0VSUE9QLTIwODQgRm9yIHJlbW90ZSByZXF1ZXN0cyBpbiBjb25zb2xlIGRpc3BsYXkgdGhlIHJlbW90ZSBzdGFjayB0cmFjZQotKiBUSU5LRVJQT1AtMjA5MiBEZXByZWNhdGUgZGVmYXVsdCBHcmFwaFNPTiBzZXJpYWxpemVyIGZpZWxkcwotKiBUSU5LRVJQT1AtMjA5NyBDcmVhdGUgYSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHdpdGggYW4gaW5pdGlhbGl6ZWQgQ2xpZW50Ci0qIFRJTktFUlBPUC0yMTAyIERlcHJlY2F0ZSBzdGF0aWMgZmllbGRzIG9uIFRyYXZlcnNhbFNvdXJjZSByZWxhdGVkIHRvIHJlbW90aW5nCi0qIFRJTktFUlBPUC0yMTA2IFdoZW4gZ3JlbWxpbiBleGVjdXRlcyB0aW1lb3V0LCB0aHJvdyBUaW1lb3V0RXhjZXB0aW9uIGluc3RlYWQgb2YgVHJhdmVyc2FsSW50ZXJydXB0ZWRFeGNlcHRpb24vSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbgotKiBUSU5LRVJQT1AtMjExMCBBbGxvdyBDb25uZWN0aW9uIG9uIERpZmZlcmVudCBQYXRoIChmcm9tIC9ncmVtbGluKQotKiBUSU5LRVJQT1AtMjExNCBEb2N1bWVudCBjb21tb24gR3JlbWxpbiBhbnRpLXBhdHRlcm5zCi0qIFRJTktFUlBPUC0yMTE4IEJ1bXAgdG8gR3Jvb3Z5IDIuNC4xNgotKiBUSU5LRVJQT1AtMjEyMSBCdW1wIEphY2tzb24gRGF0YWJpbmQgMi45LjgKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtNiwgMy4zLjYgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTMtNV1dCiA9PT0gVGlua2VyUG9wIDMuMy41IChSZWxlYXNlIERhdGU6IEphbnVhcnkgMiwgMjAxOSkKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTItMTEsIDMuMi4xMT4+LgotCi0qIEZpeGVkIGFuZC9vciBmb2xkaW5nIGluIGBJbmxpbmVGaWx0ZXJTdHJhdGVneWAuCi0qIEZpeGVkIGNvbmZpZ3VyYXRpb24gYW5kIHNlcmlhbGl6YXRpb24gb2YgYFN1YmdyYXBoU3RyYXRlZ3lgIHdoaWNoIHdhcyBtaXNzaW5nIHRoZSBgY2hlY2tBZGphY2VudFZlcnRpY2VzYCBmbGFnLgotKiBDYXB0dXJlZCBgVHJhdmVyc2FsSW50ZXJydXB0aW9uRXhjZXB0aW9uYCBhbmQgY29udmVydGVkIHRvIGBUaW1lb3V0RXhjZXB0aW9uYCBmb3IgYEdyZW1saW5FeGVjdXRvcmAuCi0qIEZpeGVkIGEgYnVnIGluIGBDb2FsZXNjZVN0ZXBgIHdoaWNoIHNxdWFyZWQgdGhlIGJ1bGsgaWYgdGhlIHN0ZXAgZm9sbG93ZWQgYSBgQmFycmllcmAgc3RlcC4KLSogRml4ZWQgYSBidWcgaW4gYEdyb3VwU3RlcGAgdGhhdCBhc3NpZ25lZCB3cm9uZyByZWR1Y2luZyBiaS1vcGVyYXRvcnMKLSogQWRkZWQgYDpieXRlY29kZWAgY29tbWFuZCB0byBoZWxwIGRldmVsb3BlcnMgZGVidWdnaW5nIGBCeXRlY29kZWAtYmFzZWQgdHJhdmVyc2Fscy4KLSogQWRkZWQgb3B0aW9uIHRvIHNldCB0aGUgcGF0aCBmb3IgdGhlIFVSSSBvbiB0aGUgSmF2YSBkcml2ZXIuCi0qIEZpeGVkIGBQZXJzaXN0ZWRPdXRwdXRSRERgIHRvIGVhZ2VyIHBlcnNpc3QgUkREIGJ5IGFkZGluZyBgY291bnQoKWAgYWN0aW9uIGNhbGxzLgotKiBEZXNlcmlhbGl6ZWQgYGc6U2V0YCB0byBhIFB5dGhvbiBgU2V0YCBpbiBHcmFwaFNPTiBpbiBgZ3JlbWxpbi1weXRob25gLgotKiBEZXByZWNhdGVkIGBTdGFyR3JhcGguYnVpbGRlcigpYCBhbmQgYFN0YXJHcmFwaC5CdWlsZGVyLmJ1aWxkKClgIGluIGZhdm9yIG9mIHRoZSBtb3JlIGNvbW1vbiAiYnVpbGRlciIgcGF0dGVybnMgb2YgYGJ1aWxkKClgIGFuZCBgY3JlYXRlKClgIHJlc3BlY3RpdmVseS4KLSogRGVwcmVjYXRlZCBgU2VyaWFsaXplcnMuREVGQVVMVF9SRVNVTFRfU0VSSUFMSVpFUmAgYW5kIGBERUZBVUxUX1JFUVVFU1RfU0VSSUFMSVpFUmAuCi0qIERlcHJlY2F0ZWQgYFRyYXZlcnNhbFNvdXJjZSNHUkVNTElOX1JFTU9URWAgYW5kIGBUcmF2ZXJzYWxTb3VyY2UjR1JFTUxJTl9SRU1PVEVfQ09OTkVDVElPTl9DTEFTU2AgbW92aW5nIHRoZW0gdG8gYFJlbW90ZUNvbm5lY3Rpb25gLgotKiBGaXhlZCB0aGUgc2V0dGluZyBvZiB0aGUgZGVmYXVsdCBsYWJlbCBmb3IgYSBgUmVmZXJlbmNlVmVydGV4YCB3aGVuIHRoZSBvcmlnaW5hbCB2ZXJ0ZXggd2FzIG9mIHR5cGUgYENvbXB1dGVyQWRqYWNlbnRWZXJ0ZXhgLgotKiBDaGFuZ2VkIEphdmEgZHJpdmVyIHRvIGV4cGVjdCBhIGdlbmVyaWMgYFJlbW90ZVRyYXZlcnNlcmAgb2JqZWN0IHJhdGhlciB0aGFuIHRoZSBzcGVjaWZpYyBgRGVmYXVsdFJlbW90ZVRyYXZlcnNlcmAuCi0qIEJldHRlciBoYW5kbGVkIHNlcnZlciBkaXNjb25uZWN0IGNvbmRpdGlvbiBmb3IgdGhlIGBncmVtbGluLXB5dGhvbmAgZHJpdmVyIGJ5IHRocm93aW5nIGEgY2xlYXIgZXhjZXB0aW9uLgotKiBEaXNwbGF5IHRoZSByZW1vdGUgc3RhY2sgdHJhY2UgaW4gdGhlIEdyZW1saW4gQ29uc29sZSB3aGVuIHNjcmlwdHMgc2VudCB0byB0aGUgc2VydmVyIGZhaWwuCi0qIEFkZGVkIGBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2VgIHdoaWNoIHByb3ZpZGVzIGEgbW9yZSB1bmlmaWVkIG1lYW5zIG9mIGNvbnN0cnVjdGluZyBhIGBUcmF2ZXJzYWxTb3VyY2VgLgotKiBBZGRlZCBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhDbGllbnQpYCB0byBwcm92aWRlIHVzZXJzIGJldHRlciBjb250cm9sIG92ZXIgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBiZWluZyBjcmVhdGVkLgotKiBDaGFuZ2VkIGJlaGF2aW9yIG9mIEdyYXBoU09OIGRlc2VyaWFsaXplciBpbiBncmVtbGluLXB5dGhvbiBzdWNoIHRoYXQgYGc6U2V0YCByZXR1cm5zIGEgUHl0aG9uIGBTZXRgLgotKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNC4xNi4KLSogRml4ZWQgYnVnIHRoYXQgcHJldmVudGVkIGBUcmF2ZXJzYWxFeHBsYW5hdGlvbmAgZnJvbSBzZXJpYWxpemluZyBwcm9wZXJseSB3aXRoIEdyYXBoU09OLgotKiBDaGFuZ2VkIGJlaGF2aW9yIG9mIGBpdGVyYXRlKClgIGluIFB5dGhvbiwgSmF2YXNjcmlwdCBhbmQgLk5FVCB0byBzZW5kIGBub25lKClgIHRodXMgYXZvaWRpbmcgdW5uZWNlc3NhcnkgcmVzdWx0cyBiZWluZyByZXR1cm5lZC4KLSogUHJvdmlkZWQgZm9yIGEgY29uZmlndXJhYmxlIGNsYXNzIG1hcCBjYWNoZSBpbiB0aGUgYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIGFuZCBleHBvc2VkIHRoYXQgaW4gR3JlbWxpbiBTZXJ2ZXIuCi0qIGBHcmFwaFByb3ZpZGVyYCBpbnN0YW5jZXMgY2FuIGJlIGFubm90YXRlZCB3aXRoIGBPcHRPdXRgIGNvbmZpZ3VyYXRpb25zIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGluIGFkZGl0aW9uIHRvIHRoZSBgT3B0T3V0YCBpbnN0YW5jZXMgb24gYSBgR3JhcGhgLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMjA4MSBQZXJzaXN0ZWRPdXRwdXRSREQgbWF0ZXJpYWxpc2VzIHJkZCBsYXppbHkgd2l0aCBTcGFyayAyLngKLSogVElOS0VSUE9QLTIwOTEgV3JvbmcvTWlzc2luZyBmZWF0dXJlIHJlcXVpcmVtZW50cyBpbiBTdHJ1Y3R1cmVTdGFuZGFyZFRlc3RTdWl0ZQotKiBUSU5LRVJQT1AtMjA5NCBHcmVtbGluIERyaXZlciBDbHVzdGVyIEJ1aWxkZXIgc2VyaWFsaXplciBtZXRob2QgZG9lcyBub3QgdXNlIG1pbWVUeXBlIGFzIHN1Z2dlc3RlZAotKiBUSU5LRVJQT1AtMjA5NSBHcm91cFN0ZXAgbG9va3MgZm9yIGlycmVsZXZhbnQgYmFycmllciBzdGVwcwotKiBUSU5LRVJQT1AtMjA5NiBncmVtbGlucHl0aG9uOiBBdHRyaWJ1dGVFcnJvciB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJlZm9yZSByZXN1bHQgaXMgcmVjZWl2ZWQKLSogVElOS0VSUE9QLTIxMDAgY29hbGVzY2UoKSBjcmVhdGluZyB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB1c2VkIHdpdGggb3JkZXIoKQotKiBUSU5LRVJQT1AtMjExMyBQLldpdGhpbigpIGRvZXNuJ3Qgd29yayB3aGVuIGdpdmVuIGEgTGlzdCBhcmd1bWVudAotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xODg5IEphdmFTY3JpcHQgR0xWOiBVc2UgaGVhcnRiZWF0IHRvIHByZXZlbnQgY29ubmVjdGlvbiB0aW1lb3V0Ci0qIFRJTktFUlBPUC0yMDEwIEdlbmVyYXRlIGpzZG9jIGZvciBncmVtbGluLWphdmFzY3JpcHQKLSogVElOS0VSUE9QLTIwMTMgUHJvY2VzcyB0ZXN0cyB0aGF0IGFyZSBhdXRvLWlnbm9yZWQgc3RpbmsKLSogVElOS0VSUE9QLTIwMTggR2VuZXJhdGUgQVBJIGRvY3MgZm9yIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0yMDM4IE1ha2UgZ3Jvb3Z5IHNjcmlwdCBjYWNoZSBzaXplIGNvbmZpZ3VyYWJsZQotKiBUSU5LRVJQT1AtMjA1MCBBZGQgYSA6Ynl0ZWNvZGUgY29tbWFuZCB0byBHcmVtbGluIENvbnNvbGUKLSogVElOS0VSUE9QLTIwNjIgQWRkIFRyYXZlcnNhbCBjbGFzcyB0byBDb3JlSW1wb3J0cwotKiBUSU5LRVJQT1AtMjA2NSBPcHRpbWl6ZSBpdGVyYXRlKCkgZm9yIHJlbW90ZSB0cmF2ZXJzYWxzCi0qIFRJTktFUlBPUC0yMDY3IEFsbG93IGdldHRpbmcgcmF3IGRhdGEgZnJvbSBHcmVtbGluLk5ldC5Ecml2ZXIuSUdyZW1saW5DbGllbnQKLSogVElOS0VSUE9QLTIwNjkgRG9jdW1lbnQgY29uZmlndXJhdGlvbiBvZiBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMjA3MCBncmVtbGluLWphdmFzY3JpcHQ6IEludHJvZHVjZSBDb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCi0qIFRJTktFUlBPUC0yMDcxIGdyZW1saW4tcHl0aG9uOiB0aGUgZ3JhcGhzb24gZGVzZXJpYWxpemVyIGZvciBnOlNldCBzaG91bGQgcmV0dXJuIGEgcHl0aG9uIHNldAotKiBUSU5LRVJQT1AtMjA3MyBHZW5lcmF0ZSB0YWJzIGZvciBzdGF0aWMgY29kZSBibG9ja3MKLSogVElOS0VSUE9QLTIwNzQgRW5zdXJlIHRoYXQgb25seSBOdUdldCBwYWNrYWdlcyBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBhcmUgcHVzaGVkCi0qIFRJTktFUlBPUC0yMDc3IFZlcnRleFByb2dyYW0uQnVpbGRlciBzaG91bGQgaGF2ZSBhIGRlZmF1bHQgY3JlYXRlKCkgbWV0aG9kIHdpdGggbm8gR3JhcGgKLSogVElOS0VSUE9QLTIwNzggSGlkZSB1c2Ugb2YgRW1wdHlHcmFwaCBvciBSZW1vdGVHcmFwaCBiZWhpbmQgYSBtb3JlIHVuaWZpZWQgbWV0aG9kIGZvciBUcmF2ZXJzYWxTb3VyY2UgY29uc3RydWN0aW9uCi0qIFRJTktFUlBPUC0yMDg0IEZvciByZW1vdGUgcmVxdWVzdHMgaW4gY29uc29sZSBkaXNwbGF5IHRoZSByZW1vdGUgc3RhY2sgdHJhY2UKLSogVElOS0VSUE9QLTIwOTIgRGVwcmVjYXRlIGRlZmF1bHQgR3JhcGhTT04gc2VyaWFsaXplciBmaWVsZHMKLSogVElOS0VSUE9QLTIwOTcgQ3JlYXRlIGEgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiB3aXRoIGFuIGluaXRpYWxpemVkIENsaWVudAotKiBUSU5LRVJQT1AtMjEwMiBEZXByZWNhdGUgc3RhdGljIGZpZWxkcyBvbiBUcmF2ZXJzYWxTb3VyY2UgcmVsYXRlZCB0byByZW1vdGluZwotKiBUSU5LRVJQT1AtMjEwNiBXaGVuIGdyZW1saW4gZXhlY3V0ZXMgdGltZW91dCwgdGhyb3cgVGltZW91dEV4Y2VwdGlvbiBpbnN0ZWFkIG9mIFRyYXZlcnNhbEludGVycnVwdGVkRXhjZXB0aW9uL0ludGVycnVwdGVkSU9FeGNlcHRpb24KLSogVElOS0VSUE9QLTIxMTAgQWxsb3cgQ29ubmVjdGlvbiBvbiBEaWZmZXJlbnQgUGF0aCAoZnJvbSAvZ3JlbWxpbikKLSogVElOS0VSUE9QLTIxMTQgRG9jdW1lbnQgY29tbW9uIEdyZW1saW4gYW50aS1wYXR0ZXJucwotKiBUSU5LRVJQT1AtMjExOCBCdW1wIHRvIEdyb292eSAyLjQuMTYKLSogVElOS0VSUE9QLTIxMjEgQnVtcCBKYWNrc29uIERhdGFiaW5kIDIuOS44CitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTUsIDMuMy41IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0zLTRdXQogPT09IFRpbmtlclBvcCAzLjMuNCAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE1LCAyMDE4KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMi0xMCwgMy4yLjEwPj4uCi0KLSogQWRkZWQgc3luY2hyb25pemVkIGBNYXBgIHRvIEdyeW8gMy4wIHJlZ2lzdHJhdGlvbnMuCi0qIFJlbW92ZWQgYHRpbWVkSW50ZXJydXB0YCBmcm9tIGRvY3VtZW50YXRpb24gYXMgYSB3YXkgdG8gdGltZW91dC4KLSogRGVwcmVjYXRlZCBgT3JkZXJgIGZvciBgaW5jcmAgYW5kIGBkZWNyYCBpbiBmYXZvciBvZiBgYXNjYCBhbmQgYGRlc2NgLgotKiBGaXhlZCBidWcgaW4gYG1hdGgoKWAgZm9yIE9MQVAgd2hlcmUgYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIHdhcyBpbmNvcnJlY3RseSBkZXRlY3RpbmcgcGF0aCBsYWJlbCBhY2Nlc3MgYW5kIHByZXZlbnRpbmcgZXhlY3V0aW9uLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTg5OCBJc3N1ZSB3aXRoIGJpbmRpbmdzIGluIHN0cmF0ZWdpZXMgYW5kIGxhbWJkYXMKLSogVElOS0VSUE9QLTE5MzMgZ3JlbWxpbi1weXRob24gbWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQgb24gbGFyZ2UgcmVzcG9uc2VzCi0qIFRJTktFUlBPUC0xOTU4IFRpbmtlckdyYXBoQ291bnRTdHJhdGVneSBjYW4gcmV0dXJuIHdyb25nIGNvdW50cwotKiBUSU5LRVJQT1AtMTk2MSBEdXBsaWNhdGUgY29waWVzIG9mIGltYWdlcyBkaXJlY3RvcnkgaW4gZG9jcwotKiBUSU5LRVJQT1AtMTk2MiBHcm9vdnlUcmFuc2xhdG9yIGRvZXNuJ3QgaGFuZGxlIGVtcHR5IG1hcHMKLSogVElOS0VSUE9QLTE5NjMgVXNlIG9mIHJlZHVjaW5nIHN0ZXAgaW4gY2hvb3NlKCkKLSogVElOS0VSUE9QLTE5NzIgaW5qZWN0KCkgdGVzdHMgYXJlIHRocm93aW5nIGV4Y2VwdGlvbnMgaW4gLk5FVCBHTFYgdGVzdHMKLSogVElOS0VSUE9QLTE5NzggQ2hlY2sgZm9yIFdlYnNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHdoZW4gcmV0cmlldmVkIGZyb20gQ29ubmVjdGlvbiBQb29sIG1pc3NpbmcKLSogVElOS0VSUE9QLTE5NzkgU2V2ZXJhbCBPTEFQIGlzc3VlcyBpbiBNYXRoU3RlcAotKiBUSU5LRVJQT1AtMTk4OCBtaW5vciBlcnJvciBpbiBkb2N1bWVudGF0aW9uCi0qIFRJTktFUlBPUC0xOTk5IFtKYXZhXVtncmVtbGluLWRyaXZlcl0gUXVlcnkgdG8gYSByZW1vdGUgc2VydmVyIHZpYSB0aGUgd2Vic29ja2V0IGNsaWVudCBoYW5ncyBpbmRlZmluaXRlbHkgaWYgdGhlIHNlcnZlciBiZWNvbWVzIHVuYXZhaWxhYmxlCi0qIFRJTktFUlBPUC0yMDA1IEludGVybWl0dGVudCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiByZXNwb25zZSBoYW5kbGluZwotKiBUSU5LRVJQT1AtMjAwOSBQaWNrLmFueSBhbmQgUGljay5ub25lIHNob3VsZCBiZSBleHBvc2VkIGluIEdyZW1saW4tSmF2YVNjcmlwdAotKiBUSU5LRVJQT1AtMjAyMSBQcmV2ZW50IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGZhaWx1cmUKLSogVElOS0VSUE9QLTIwMzAgS2VlcEFsaXZlIHRhc2sgZXhlY3V0ZWQgZm9yIGV2ZXJ5IENvbm5lY3Rpb24ud3JpdGUgY2FsbAotKiBUSU5LRVJQT1AtMjAzMiBVcGRhdGUganl0aG9uLXN0YW5kYWxvbmUKLSogVElOS0VSUE9QLTIwNDQgQ2Fubm90IHJlY29ubmVjdCB0byBBenVyZSBjb3Ntb3MgaG9zdCB0aGF0IGJlY29tZXMgYXZhaWxhYmxlIGFnYWluCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTExMTMgR3JhcGhDb21wdXRlciBzdWJjbGFzc2VzIHNob3VsZCBzdXBwb3J0IG5hdGl2ZSBtZXRob2RzCi0qIFRJTktFUlBPUC0xMzY1IExvZyB0aGUgc2VlZCB1c2VkIHRvIGluaXRpYWxpemUgUmFuZG9tIGluIHRlc3RzCi0qIFRJTktFUlBPUC0xNDQ3IEFkZCBzb21lIEphdmFTY3JpcHQgaW50ZWxsaWdlbmNlIHRvIHRoZSBkb2N1bWVudGF0aW9uIHNvIHRoYXQgY29tbWVudHMgYW5kIG91dHB1dCBhcmUgbm90IGNvcGllZCBpbiBhIGNvcHkgcGFzdGUKLSogVElOS0VSUE9QLTE1OTUgR28gdGhyb3VnaCBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtIHdpdGggYSBwcm9maWxlIGFuZCBvcHRpbWl6ZS4KLSogVElOS0VSUE9QLTE3NzggRG8gbm90IHByb21vdGUgdGltZWRJbnRlcnJ1cHQgb3B0aW9uIGZvciBHcmVtbGluIFNlcnZlciBzY3JpcHQgcHJvY2Vzc2luZwotKiBUSU5LRVJQT1AtMTc4MCBBZGQgYXV0aGVudGljYXRpb24gdGVzdHMgZm9yIGdyZW1saW4tcHl0aG9uCi0qIFRJTktFUlBPUC0xODM2IC5ORVQgc2FtcGxlIHByb2plY3QKLSogVElOS0VSUE9QLTE4NDEgSW5jbHVkZSBQeXRob24gR0xWIHRlc3RzIG9uIFRyYXZpc0NJCi0qIFRJTktFUlBPUC0xODY0IEdyZW1saW4gUHl0aG9uIHRlc3RzIGZvciBHcmFwaFNPTiAyLjAgYW5kIDMuMAotKiBUSU5LRVJQT1AtMTg5NyBQcm92aWRlIERvY2tlciBpbWFnZXMgb2YgR3JlbWxpbiBTZXJ2ZXIgYW5kIENvbnNvbGUKLSogVElOS0VSUE9QLTE5NDUgQWRkIHN1cHBvcnQgZm9yIGV4dGVuZGVkIEdyYXBoU29uIHR5cGVzIHRvIEdyZW1saW4ubmV0Ci0qIFRJTktFUlBPUC0xOTUxIGdyZW1saW4tc2VydmVyLmJhdCBkb2Vzbid0IHN1cHBvcnQgcGF0aHMgY29udGFpbmluZyBzcGFjZXMKLSogVElOS0VSUE9QLTE5NTYgRGVwcmVjYXRlIE9yZGVyIGluY3IvZGVjciBmb3IgYXNjL2Rlc2MKLSogVElOS0VSUE9QLTE5NTkgUHJvdmlkZSBhIHdheSB0byBzdWJtaXQgc2NyaXB0cyB0byB0aGUgc2VydmVyIGluIGdyZW1saW4tamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMTk2OCBSZWZhY3RvciBlbGVtZW50cyBvZiBHcmVtbGluIFNlcnZlciB0ZXN0aW5nCi0qIFRJTktFUlBPUC0xOTc2IEluY2x1ZGUgQ29tcHV0ZXIgdGVzdHMgZm9yIEdMVnMKLSogVElOS0VSUE9QLTE5NzcgR3JlbWxpbi1KYXZhU2NyaXB0OiBTdXBwb3J0IFNBU0wgYXV0aGVudGljYXRpb24KLSogVElOS0VSUE9QLTE5ODUgVXBkYXRlIHBvc2l0aW9uIG9uIGJ1bGsgbG9hZGluZwotKiBUSU5LRVJQT1AtMTk4OSBQcmVzZXJ2ZSBvcmRlciB0aGF0IHBsdWdpbnMgYXJlIGFwcGxpZWQgaW4gR3JlbWxpbiBDb25zb2xlCi0qIFRJTktFUlBPUC0xOTk1IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gY2xvc2UoKSBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQKLSogVElOS0VSUE9QLTIwMTEgVXNlIE51bWJlckhlbHBlciBvbiBjaG9vc2UoKQotKiBUSU5LRVJQT1AtMjAxMiBUYXJnZXQgLk5FVCBTdGFuZGFyZCAyLjAgZm9yIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0yMDE1IEFsbG93IHVzZXJzIHRvIGNvbmZpZ3VyZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25zCi0qIFRJTktFUlBPUC0yMDE2IFVwZ3JhZGUgSmFja3NvbiBGYXN0ZXJYTUwgdG8gMi45LjUgb3IgbGF0ZXIgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkKLSogVElOS0VSUE9QLTIwMTcgQ2hlY2sgZm9yIENvbHVtbiBpbiBieSgpCi0qIFRJTktFUlBPUC0yMDIyIENsdXN0ZXIgU1NMIHNob3VsZCB0cnVzdCBkZWZhdWx0IGNhIGNlcnRzIGJ5IGRlZmF1bHQKLSogVElOS0VSUE9QLTIwMjMgR3JlbWxpbiBTZXJ2ZXIgc2hvdWxkIG5vdCBjcmVhdGUgc2VsZi1zaWduZWQgY2VydHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0yMDI0IEdyZW1saW4gU2VydmVyIEFwcGxpY2F0aW9uIGFyY2hldHlwZSBzaG91bGQgY29ubmVjdCB2aWEgd2l0aFJlbW90ZQotKiBUSU5LRVJQT1AtMjAyNSBDaGFuZ2UgdG8gU0hBLTI1Ni81MTIgYW5kIGRyb3AgU0hBLTEgZm9yIHJlbGVhc2VzCi0qIFRJTktFUlBPUC0yMDI2IEdyZW1saW4uTmV0LkRyaXZlciBzaG91bGQgY2hlY2sgQ2xpZW50V2ViU29ja2V0LlN0YXRlIGJlZm9yZSBjbG9zaW5nCi0qIFRJTktFUlBPUC0yMDM0IFJlZ2lzdGVyIHN5bmNocm9uaXplZE1hcCgpIHdpdGggR3J5bwotKiBUSU5LRVJQT1AtMjAzNSBHcmVtbGluLUphdmFTY3JpcHQ6IFBhc3MgY3VzdG9tIGhlYWRlcnMgdG8gdGhlIHdlYnNvY2tldCBjb25uZWN0aW9uCi0qIFRJTktFUlBPUC0yMDQwIEltcHJvdmUgZmxleGliaWxpdHkgb2YgR3Jvb3Z5VHJhbnNsYXRvciB0byBoYW5kbGUgY3VzdG9tIHR5cGVzCi0qIFRJTktFUlBPUC0yMDQ1IFJlbW92ZSBub24taW5keSBncm9vdnkgZGVwZW5kZW5jaWVzCi0qIFRJTktFUlBPUC0yMDU1IFByb3ZpZGUgc3VwcG9ydCBmb3Igc3BlY2lhbCBudW1iZXIgY2FzZXMgbGlrZSBJbmZpbml0eSBpbiBHcmFwaFNPTgotKiBUSU5LRVJQT1AtMjA1NiBVc2UgTnVtYmVySGVscGVyIGluIENvbXBhcmUKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtNCwgMy4zLjQgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTMtM11dCiA9PT0gVGlua2VyUG9wIDMuMy4zIChSZWxlYXNlIERhdGU6IE1heSA4LCAyMDE4KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMi05LCAzLjIuOT4+LgotCi0qIEltcGxlbWVudGVkIGBUcmF2ZXJzYWxTZWxlY3RTdGVwYCB3aGljaCBhbGxvd3MgdG8gYHNlbGVjdCgpYCBydW50aW1lLWdlbmVyYXRlZCBrZXlzLgotKiBDb2VyY2VkIGBCdWxrU2V0YCB0byBgZzpMaXN0YCBpbiBHcmFwaFNPTiAzLjAuCi0qIERlcHJlY2F0ZWQgYENyZWRlbnRpYWxzR3JhcGhgIERTTCBpbiBmYXZvciBvZiBgQ3JlZGVudGlhbHNUcmF2ZXJzYWxEc2xgIHdoaWNoIHVzZXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgR3JlbWxpbiBEU0wgZGV2ZWxvcG1lbnQuCi0qIEFsbG93ZWQgYGl0ZXJhdGUoKWAgdG8gYmUgY2FsbGVkIGFmdGVyIGBwcm9maWxlKClgLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTg2OSBQcm9maWxlIHN0ZXAgYW5kIGl0ZXJhdGUgZG8gbm90IHBsYXkgbmljZWx5IHdpdGggZWFjaCBvdGhlcgotKiBUSU5LRVJQT1AtMTkyNyBHaGVya2luIHNjZW5hcmlvIGV4cGVjdHMgbGlzdCB3aXRoIGR1cGxpY2F0ZXMsIGJ1dCByZWNlaXZlcyBnOlNldAotKiBUSU5LRVJQT1AtMTk0NyBQYXRoIGhpc3RvcnkgaXNuJ3QgcHJlc2VydmVkIGZvciBrZXlzIGluIG11dGF0aW9ucwotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xNjI4IEltcGxlbWVudCBUcmF2ZXJzYWxTZWxlY3RTdGVwCi0qIFRJTktFUlBPUC0xNzU1IE5vIGRvY3MgZm9yIFJlZmVyZW5jZUVsZW1lbnRzCi0qIFRJTktFUlBPUC0xOTAzIENyZWRlbnRpYWxzIERTTCBzaG91bGQgdXNlIHRoZSBKYXZhIGFubm90YXRpb24gcHJvY2Vzc29yCi0qIFRJTktFUlBPUC0xOTEyIFJlbW92ZSBNRDUgY2hlY2tzdW1zCi0qIFRJTktFUlBPUC0xOTM0IEJ1bXAgdG8gbGF0ZXN0IHZlcnNpb24gb2YgaHR0cGNsaWVudAotKiBUSU5LRVJQT1AtMTkzNiBQZXJmb3JtYW5jZSBlbmhhbmNlbWVudCB0byBCeXRlY29kZSBkZXNlcmlhbGl6YXRpb24KLSogVElOS0VSUE9QLTE5NDMgSmF2YVNjcmlwdCBHTFY6IFN1cHBvcnQgR3JhcGhTT04zCi0qIFRJTktFUlBPUC0xOTQ0IEphdmFTY3JpcHQgR0xWOiBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGlzIG5vdCBleHBvcnRlZCBpbiB0aGUgcm9vdCBtb2R1bGUKLSogVElOS0VSUE9QLTE5NTAgVHJhdmVyc2FsIGNvbnN0cnVjdGlvbiBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMKLSogVElOS0VSUE9QLTE5NTMgQnVtcCB0byBHcm9vdnkgMi40LjE1CitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTMsIDMuMy4zIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0zLTJdXQogPT09IFRpbmtlclBvcCAzLjMuMiAoUmVsZWFzZSBEYXRlOiBBcHJpbCAyLCAyMDE4KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMi04LCAzLjIuOD4+LgotCi0qIEZpeGVkIHJlZ3Jlc3Npb24gaXNzdWUgd2hlcmUgdGhlIEhUVFBDaGFubmVsaXplciBkb2Vzbid0IGluc3RhbnRpYXRlIHRoZSBzcGVjaWZpZWQgQXV0aGVudGljYXRpb25IYW5kbGVyLgotKiBEZWZhdWx0ZWQgR0xWIHRlc3RzIGZvciBncmVtbGluLXB5dGhvbiB0byBydW4gZm9yIEdyYXBoU09OIDMuMC4KLSogRml4ZWQgYSBidWcgd2l0aCBgVHJlZWAgc2VyaWFsaXphdGlvbiBpbiBHcmFwaFNPTiAzLjAuCi0qIEluIGdyZW1saW4tcHl0aG9uLCB0aGUgR3JhcGhTT04gMy4wIGBnOlNldGAgdHlwZSBpcyBub3cgZGVzZXJpYWxpemVkIHRvIGBMaXN0YC4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTEwNTMgaW5zdGFsbGVkIHBsdWdpbnMgYXJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB3aGVyZSBncmVtbGluLnNoIGlzIHN0YXJ0ZWQKLSogVElOS0VSUE9QLTE1MDkgRmFpbGluZyB0ZXN0IGNhc2UgZm9yIHRyZWUgc2VyaWFsaXphdGlvbgotKiBUSU5LRVJQT1AtMTczOCBQcm9wZXIgZnVuY3Rpb25pbmcgb2YgR3JhcGhTT05SZWFkZXIgZGVwZW5kcyBvbiBvcmRlciBvZiBlbGVtZW50cyBpbiBTdHJpbmcgcmVwcmVzZW50YXRpb24KLSogVElOS0VSUE9QLTE3NTggUmVtb3RlU3RyYXRlZ3kgc2hvdWxkIGJlIGJlZm9yZSBhbGwgb3RoZXIgRGVjb3JhdGlvblN0cmF0ZWdpZXMuCi0qIFRJTktFUlBPUC0xODU1IFVwZGF0ZSBSZXhzdGVyIGxpbmtzCi0qIFRJTktFUlBPUC0xODU4IEh0dHBDaGFubmVsaXplciByZWdyZXNzaW9uOiBEb2VzIG5vdCBjcmVhdGUgc3BlY2lmaWVkIEF1dGhlbnRpY2F0aW9uSGFuZGxlcgotKiBUSU5LRVJQT1AtMTg1OSBDb21wbGV4IGluc3RhbmNlIG9mIFAgbm90IHNlcmlhbGl6aW5nIHRvIGJ5dGVjb2RlIHByb3Blcmx5Ci0qIFRJTktFUlBPUC0xODYwIHZhbHVlTWFwKFRydWUpIHJlc3VsdCBpbiBlcnJvciBpbiBncmVtbGluLXB5dGhvbgotKiBUSU5LRVJQT1AtMTg2MiBUaW5rZXJHcmFwaCBWZXJ0ZXhQcm9ncmFtIG1lc3NhZ2UgcGFzc2luZyBkb2Vzbid0IHdvcmsgcHJvcGVybHkgd2hlbiB1c2luZyBEaXJlY3Rpb24uQk9USAotKiBUSU5LRVJQT1AtMTg2NyB1bmlvbigpIGNhbiBwcm9kdWNlIGV4dHJhIHRyYXZlcnNlcnMKLSogVElOS0VSUE9QLTE4NzIgQXBwbHkgZWRnZUZ1bmN0aW9uIGluIFNwYXJrTWVzc2VuZ2VyCi0qIFRJTktFUlBPUC0xODczIG1pbigpIGFuZCBtYXgoKSB3b3JrIG9ubHkgaW4gdGhlIHJhbmdlIG9mIEludGVnZXIgdmFsdWVzCi0qIFRJTktFUlBPUC0xODc0IFAgZG9lcyBub3QgYXBwZWFyIHRvIGJlIHNlcmlhbGl6ZWQgY29uc2lzdGVudGx5IGluIEdyYXBoU09OCi0qIFRJTktFUlBPUC0xODc1IEdyZW1saW4tUHl0aG9uIG9ubHkgYWdncmVnYXRlcyB0byBsaXN0IHdoZW4gdXNpbmcgR3JhcGhTT04zCi0qIFRJTktFUlBPUC0xODc5IEdyZW1saW4gQ29uc29sZSBkb2VzIG5vdCByZXNlcGVjdCBlcXVhbCBzaWduIGZvciBmbGFnIGFyZ3VtZW50IGFzc2lnbm1lbnRzCi0qIFRJTktFUlBPUC0xODgwIEdyZW1saW4uTkVUIFN0cm9uZyBuYW1lIHNpZ25hdHVyZSBjb3VsZCBub3QgYmUgdmVyaWZpZWQuIChIUkVTVUxUOiAweDgwMTMxMDQ1KQotKiBUSU5LRVJQT1AtMTg4MyBncmVtbGlucHl0aG9uIGZ1dHVyZSB3aWxsIG5ldmVyIHJldHVybgotKiBUSU5LRVJQT1AtMTg5MCBnZXRBbm9ueW1vdXNUcmF2ZXJzYWxDbGFzcygpIGlzIG5vdCBiZWluZyBnZW5lcmF0ZWQgZm9yIEphdmEgRFNMcwotKiBUSU5LRVJQT1AtMTg5MSBTZXJpYWxpemF0aW9uIG9mIFAubm90KCkgZm9yIGdyZW1saW4tamF2YXNjcmlwdAotKiBUSU5LRVJQT1AtMTg5MiBHTFYgdGVzdCBmYWlsdXJlcyBmb3IgLk5FVAotKiBUSU5LRVJQT1AtMTg5NCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJkMCBmYWlscyB0byBkZXNlcmlhbGl6ZSB2YWxpZCBQLm5vdCgpCi0qIFRJTktFUlBPUC0xODk2IGdyZW1saW4tcHl0aG9uIGxhbWJkYXMgZXJyb3IKLSogVElOS0VSUE9QLTE5MDcgRml4IGZhaWxpbmcgR0xWIHRlc3QgZm9yIHdpdGhTYWNrKCkgaW4gLk5FVAotKiBUSU5LRVJQT1AtMTkxNyBneDpCaWdEZWNpbWFsIHNlcmlhbGl6YXRpb24gYnJva2VuIGluIEdyZW1saW4uTmV0IG9uIHN5c3RlbXMgd2l0aCAnLCcgYXMgZGVjaW1hbCBzZXBhcmF0b3IKLSogVElOS0VSUE9QLTE5MTggU2NlbmFyaW9zIGZhaWwgYmVjYXVzZSBvZiB3cm9uZyBudW1lcmljYWwgdHlwZXMKLSogVElOS0VSUE9QLTE5MTkgR2hlcmtpbiBydW5uZXIgZG9lc24ndCB3b3JrIHdpdGggUC5BbmQoKSBhbmQgUC5PcigpIGluIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0xOTIwIFRlc3RzIGZhaWwgYmVjYXVzZSBQLldpdGhpbigpIGFyZ3VtZW50cyBhcmUgd3JhcHBlZCBpbiBhbiBhcnJheSBpbiBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMTkyMiBHaGVya2luIGZlYXR1cmVzIGZhaWwgdGhhdCBjb250YWluIFAubm90KCkgaW4gR3JlbWxpbi5OZXQKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMTM1NyBDZW50cmFsaXR5IFJlY2lwZXMgc2hvdWxkIG1lbnRpb24gcGFnZVJhbmsgYW5kIE9MQVAuCi0qIFRJTktFUlBPUC0xNDg5IFByb3ZpZGUgYSBKYXZhc2NyaXB0IEdyZW1saW4gTGFuZ3VhZ2UgVmFyaWFudAotKiBUSU5LRVJQT1AtMTU4NiBTdWJncmFwaFN0cmF0ZWd5IGluIE9MQVAKLSogVElOS0VSUE9QLTE3MjYgU3VwcG9ydCBXZWJTb2NrZXRzIHBpbmcvcG9uZyBrZWVwLWFsaXZlIGluIEdyZW1saW4gc2VydmVyCi0qIFRJTktFUlBPUC0xODQyIGl0ZXJhdGUoKSBtaXNzaW5nIGluIHRlcm1pbmFsIHN0ZXBzIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTE4NDQgUHl0aG9uIEdMViB0ZXN0IHNob3VsZCBydW4gZm9yIEdyYXBoU09OIDMuMCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE4NTAgUmFuZ2Ugc3RlcCBoYXMgdW5kb2N1bWVudGVkIHNwZWNpYWwgdmFsdWVzCi0qIFRJTktFUlBPUC0xODU0IFN1cHBvcnQgbGFtYmRhcyBpbiBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMTg1NyBHTFYgdGVzdCBzdWl0ZSBjb25zaXN0ZW5jeSBhbmQgY29tcGxldGVuZXNzCi0qIFRJTktFUlBPUC0xODYzIERlbGF5aW5nIHRoZSBzZXR0aW5nIG9mIHJlcXVlc3RJZCB0aWxsIHRoZSBSZXF1ZXN0TWVzc2FnZSBpbnN0YW50aWF0aW9uIHRpbWUKLSogVElOS0VSUE9QLTE4NjUgUnVuIEdyZW1saW4gLk5FVCBHTFYgdGVzdHMgd2l0aCBHcmFwaFNPTiAzLjAKLSogVElOS0VSUE9QLTE4NjYgU3VwcG9ydCBnOlQgZm9yIC5ORVQKLSogVElOS0VSUE9QLTE4NjggU3VwcG9ydCBpbmplY3Qgc291cmNlIHN0ZXAgaW4gR3JlbWxpbi5OZXQKLSogVElOS0VSUE9QLTE4NzAgbl4yIHN5bmNocm9uaW91cyBvcGVyYXRpb24gaW4gT0xBUCBXb3JrZXJFeGVjdXRvci5leGVjdXRlKCkgbWV0aG9kCi0qIFRJTktFUlBPUC0xODcxIEV4Y2VwdGlvbiBoYW5kbGluZyBpcyBzbG93IGluIGVsZW1lbnQgIFJlZmVyZW5jZUVsZW1lbnQgY3JlYXRpb24KLSogVElOS0VSUE9QLTE4NzcgQWRkIG5ldyBncmFwaCBkYXRhIGZvciBzcGVjaWFsaXplZCB0ZXN0aW5nIHNjZW5hcmlvcwotKiBUSU5LRVJQT1AtMTg4NCBCdW1wIHRvIE5ldHR5IDQuMC41Ni5GaW5hbAotKiBUSU5LRVJQT1AtMTg4NSBWYXJpb3VzIEdyZW1saW4uTmV0IGRvY3VtZW50YXRpb24gdXBkYXRlcwotKiBUSU5LRVJQT1AtMTkwMSBFbmFibGUgdXNhZ2Ugb2YgZW51bXMgaW4gbW9yZSBzdGVwcyBpbiBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMTkwOCBCdW1wIHRvIEdyb292eSAyLjQuMTQKLSogVElOS0VSUE9QLTE5MTEgUmVmYWN0b3IgSmF2YVRyYW5zbGF0b3IgdG8gY2FjaGUgYWxsIHJlZmxlY3RpdmUgY2FsbHMKLSogVElOS0VSUE9QLTE5MTQgU3VwcG9ydCBjb25zdHJ1Y3QgYSBHcmVtbGluU2VydmVyIGluc3RhbmNlIGZyb20gZ3JlbWxpbiBleGVjdXRvciBzZXJ2aWNlCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTIsIDMuMy4yIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0zLTFdXQogPT09IFRpbmtlclBvcCAzLjMuMSAoUmVsZWFzZSBEYXRlOiBEZWNlbWJlciAxNywgMjAxNykKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTItNywgMy4yLjc+Pi4KLQotKiBBZGRlZCBgTm9uZVN0ZXBgIGFuZCBgVHJhdmVyc2FsLm5vbmUoKWAgZm9yIGZ1bGwgZmlsdGVyaW5nIGludGVncmF0aW9uIHdpdGggYGl0ZXJhdGUoKWAuCi0qIEZpeGVkIGJ1ZyBpbiBzZXJpYWxpemF0aW9uIG9mIGBQYXRoYCBmb3IgR3JhcGhTT04gMy4wIGluIGBncmVtbGluLXB5dGhvbmAuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIEdyYXBoU09OIDMuMCBpbiBHcmVtbGluLk5ldC4KLSogQWRkZWQgYG1hdGgoKWAtc3RlcCB3aGljaCBzdXBwb3J0cyBzY2llbnRpZmljIGNhbGN1bGF0b3IgY2FwYWJpbGl0aWVzIGZvciBudW1iZXJzIHdpdGhpbiBhIHRyYXZlcnNhbC4KLSogQWRkZWQgbWlzc2luZyBgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuYWRkRSgpYC1tZXRob2QgdG8gYEdyZW1saW5Ec2xQcm9jZXNzb3JgLgotKiBDaGFuZ2VkIGB0bygpYCBhbmQgYGZyb20oKWAgdHJhdmVyc2FsLWJhc2VkIHN0ZXBzIHRvIHRha2UgYSB3aWxkY2FyZCBgP2AgaW5zdGVhZCBvZiBvZiBgRWAuCi0qIEFkZGVkIGBhZGRWKHRyYXZlcnNhbClgIGFuZCBgYWRkRSh0cmF2ZXJzYWwpYCBzbyB0aGF0IGNyZWF0ZWQgZWxlbWVudCBsYWJlbHMgY2FuIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkuCi0qIGBQYWdlUmFua1ZlcnRleFByb2dyYW1gIHN1cHBvcnRzIGBtYXhJdGVyYXRpb25zYCBidXQgd2lsbCBicmVhayBvdXQgZWFybHkgaWYgZXBzaWxvbi1iYXNlZCBjb252ZXJnZW5jZSBvY2N1cnMuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIGVwc2lsb24tYmFzZWQgY29udmVyZ2VuY2UgaW4gYFBhZ2VSYW5rVmVydGV4UHJvZ3JhbWAuCi0qIEZpeGVkIHR3byBtYWpvciBidWdzIGluIGhvdyBQYWdlUmFuayB3YXMgYmVpbmcgY2FsY3VsYXRlZCBpbiBgUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtYC4KLSogQWRkZWQgYElvLnJlcXVpcmVzVmVyc2lvbihPYmplY3QpYCB0byBhbGxvdyBncmFwaCBwcm92aWRlcnMgYSB3YXkgdG8gY2hlY2sgdGhlIGBJb2AgdHlwZSBhbmQgdmVyc2lvbiBiZWluZyBjb25zdHJ1Y3RlZC4KLSogRGVmYXVsdGVkIGBJb0NvcmUuZ3J5bygpYCBhbmQgYElvQ29yZS5ncmFwaHNvbigpYCB0byBib3RoIHVzZSB0aGVpciAzLjAgZm9ybWF0cyB3aGljaCBtZWFucyB0aGF0IGBHcmFwaC5pbygpYCB3aWxsIHVzZSB0aG9zZSBieSBkZWZhdWx0LgotKiBCdW1wZWQgTmVvNGogMy4yLjMKLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTE3NzMgTG9wIHNob3VsZCBiZSBjcmVhdGVkIGFzIGEgInNvZnR3YXJlIiBhbmQgbm90IGEgInBlcnNvbiIKLSogVElOS0VSUE9QLTE3ODMgUGFnZVJhbmsgZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIGdyYXBocyB3aXRoIHNpbmtzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTc5OSBGYWlsdXJlIHRvIHNlcmlhbGl6ZSBwYXRoKCkgaW4gZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTE4NDcgdGlua2VyZ3JhcGgtZ3JlbWxpbiBkZXBlbmRlbmN5IG9uIGdyZW1saW4tdGVzdCwgYmFkIHNjb3BlPwotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xNjMyIENyZWF0ZSBhIHNldCBvZiBkZWZhdWx0IGZ1bmN0aW9ucwotKiBUSU5LRVJQT1AtMTY5MiBCdW1wIHRvIE5lbzRqIDMuMi4zCi0qIFRJTktFUlBPUC0xNzE3IFVwZGF0ZSBuYW1lIGFuZCBsaW5rIG9mIER5bmFtb0RCIHN0b3JhZ2UgYmFja2VuZCBpbiBsYW5kaW5nIHBhZ2UKLSogVElOS0VSUE9QLTE3MzAgR3JlbWxpbiAuTkVUIHN1cHBvcnQgZm9yIEdyYXBoU09OIDMuMAotKiBUSU5LRVJQT1AtMTc2NyBNZXRob2QgZm9yIGdyYXBoIHByb3ZpZGVycyB0byBjaGVjayBhbiBJTyB2ZXJzaW9uIGFuZCB0eXBlCi0qIFRJTktFUlBPUC0xNzkzIGFkZEUoKSBzaG91bGQgYWxsb3cgZHluYW1pYyBlZGdlIGxhYmVscwotKiBUSU5LRVJQT1AtMTgzNCBDb25zaWRlciBpdGVyYXRlKCkgYXMgYSBmaXJzdCBjbGFzcyBzdGVwCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTEsIDMuMy4xIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0zLTBdXQogPT09IFRpbmtlclBvcCAzLjMuMCAoUmVsZWFzZSBEYXRlOiBBdWd1c3QgMjEsIDIwMTcpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy0yLTYsIDMuMi42Pj4uCi0KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFNjcmlwdEVsZW1lbnRGYWN0b3J5YC4KLSogQWRkZWQgYEdyYXBoVHJhdmVyc2FsU291cmNlLmFkZEUoU3RyaW5nKWAgaW4gc3VwcG9ydCBvZiBgZy5hZGRFKCkuZnJvbSgpLnRvKClgLgotKiBBZGRlZCBzdXBwb3J0IGZvciBgdG8oVmVydGV4KWAgYW5kIGBmcm9tKFZlcnRleClgIGFzIGEgc2hvcnRoYW5kIGZvciBgdG8oVihhKSlgIGFuZCBgZnJvbShWKGIpKWAuCi0qIEJ1bXBlZCB0byBzdXBwb3J0IFNwYXJrIDIuMi4wLgotKiBEZXRlY3RlZCBpZiB0eXBlIGNoZWNraW5nIHdhcyByZXF1aXJlZCBpbiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgYW5kIGRpc2FibGVkIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUgaWYgbm90LgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwuc2VsZWN0VjNkMCgpYCBzdGVwLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgRGV0YWNoZWRFZGdlKE9iamVjdCxTdHJpbmcsTWFwLFBhaXIsUGFpcilgIGNvbnN0cnVjdG9yLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQmluZGluZ3NgIGNvbnN0cnVjdG9yLiBJdCBpcyBub3cgYSBwcml2YXRlIGNvbnN0cnVjdG9yLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU291cmNlLndpdGhCaW5kaW5ncygpYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyYXBoVHJhdmVyc2FsLnNhY2soQmlGdW5jdGlvbixTdHJpbmcpYC4KLSogYFRyYXZlcnNhbE1ldHJpY3NgIGFuZCBgTWV0cmljc2AgR3J5byAxLjAgZm9ybWF0cyBjaGFuZ2VkIGdpdmVuIGludGVybmFsIGNoYW5nZXMgdG8gdGhlaXIgaW1wbGVtZW50YXRpb25zLgotKiBNYWRlIGBUcmF2ZXJzYWxNZXRyaWNzYCBzYWZlIHRvIHdyaXRlIHRvIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFRyYXZlcnNhbFNpZGVFZmZlY3RzYCBtZXRob2RzLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgZmluYWxpemF0aW9uLkxhenlCYXJyaWVyU3RyYXRlZ3lgIChtb3ZlZCB0byBgb3B0aW1pemF0aW9uLkxhenlCYXJyaWVyU3RyYXRlZ3lgKS4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvbnN0YW50c2AgaW4gSGFkb29wLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVmVydGV4Q29tcHV0aW5nLmdlbmVyYXRlQ29tcHV0ZXIoR3JhcGgpYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvbmZpZ3VyYXRpb25UcmF2ZXJzYWxgLgotKiBFc3RhYmxpc2hlZCB0aGUgR3J5byAzLjAgZm9ybWF0LgotKiBgR3J5b1ZlcnNpb25gIG5vdyBpbmNsdWRlcyBhIGRlZmF1bHQgYENsYXNzUmVzb2x2ZXJgIHRvIHN1cHBseSB0byB0aGUgYEdyeW9NYXBwZXJgLgotKiBgR3J5b0NsYXNzUmVzb2x2ZXJgIHJlbmFtZWQgdG8gYEdyeW9DbGFzc1Jlc29sdmVyVjFkMGAgd2hpY2ggaGFzIGFuIGFic3RyYWN0IGNsYXNzIHRoYXQgZm9yIHByb3ZpZGVycyB0byBleHRlbmQgaW4gYEFic3RyYWN0R3J5b0NsYXNzUmVzb2x2ZXJgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgT3JkZXJgIGVudW1zIG9mIGBrZXlJbmNyYCwgYGtleURlY3JgLCBgdmFsdWVJbmNyYCwgYW5kIGB2YWx1ZURlY3IuYAotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwubWFwS2V5cygpYCBzdGVwLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwubWFwVmFsdWVzKClgIHN0ZXAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFRyYXZlcnNhbCNhZGRWKE9iamVjdC4uLilgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwjYWRkRShEaXJlY3Rpb24sIFN0cmluZywgU3RyaW5nLCBPYmplY3QuLi4pYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyYXBoVHJhdmVyc2FsI2FkZE91dEUoU3RyaW5nLCBTdHJpbmcsIE9iamVjdC4uLilgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwjYWRkSW5WKFN0cmluZywgU3RyaW5nLCBPYmplY3QuLi4pYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyYXBoVHJhdmVyc2FsLmdyb3VwVjNkMCgpYCBhbmQgcmVzcGVjdGl2ZSBgR3JvdXBTaWRlRWZmZWN0U3RlcFYzZDBgIGFuZCBgR3JvdXBTdGVwVjNkMGAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBUcmF2ZXJzYWxTb3VyY2UuQnVpbGRlcmAgY2xhc3MuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBDb25uZWN0aXZlUGAsIGBBbmRQYCwgYE9yUGAgY29uc3RydWN0b3JzLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU2NyaXB0RnVuY3Rpb25gIGNsYXNzLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU2NyaXB0SGVscGVyYCBjbGFzcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFNjcmlwdEVuZ2luZUNhY2hlYCBjbGFzcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvcmVJbXBvcnRzYCBjbGFzcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyZW1saW5KeXRob25TY3JpcHRFbmdpbmUjKClgIGNvbnN0cnVjdG9yLgotKiBSZW1vdmVkIGFjY2VzcyB0byBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvcmVHcmVtbGluUGx1Z2luI0lOU1RBTkNFYCBmaWVsZC4KLSogYGdyZW1saW4uc2hgIGFuZCBgZ3JlbWxuLmJhdGAgbm8gbG9uZ2VyIHN1cHBvcnQgdGhlIG9wdGlvbiB0byBwYXNzIGEgc2NyaXB0IGFzIGFuIGFyZ3VtZW50IGZvciBleGVjdXRpb24gbW9kZSB3aXRob3V0IHVzaW5nIHRoZSBgLWlgIG9wdGlvbi4KLSogR3JhcGhpdGUgYW5kIEdhbmdsaWEgYXJlIG5vIGxvbmdlciBwYWNrYWdlZCB3aXRoIHRoZSBHcmVtbGluIFNlcnZlciBkaXN0cmlidXRpb24uCi0qIGBUcmFuc2FjdGlvbkV4Y2VwdGlvbmAgaXMgbm8gbG9uZ2VyIGEgY2xhc3Mgb2YgYEFic3RyYWN0VHJhbnNhY3Rpb25gIGFuZCBpdCBleHRlbmRzIGBSdW50aW1lRXhjZXB0aW9uYC4KLSogSW5jbHVkZWQgYW4gZWxsaXBzZSBvbiBsb25nIHByb3BlcnR5IG5hbWVzIHRoYXQgYXJlIHRydW5jYXRlZC4KLSogUmVuYW1lZCBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAgdG8gYENvdW50U3RyYXRlZ3lgLgotKiBBZGRlZCBtb3JlIHNwZWNpZmljIHR5cGluZyB0byB2YXJpb3VzIGBfX2AgdHJhdmVyc2FsIHN0ZXBzLiBFLmcuIGA8QSxWZXJ0ZXg+b3V0KClgIGlzIGA8VmVydGV4LFZlcnRleD5vdXQoKWAuCi0qIFVwZGF0ZWQgRG9ja2VyIGJ1aWxkIHNjcmlwdHMgdG8gaW5jbHVkZSBQeXRob24gZGVwZW5kZW5jaWVzIChOT1RFOiB1c2VycyBzaG91bGQgcmVtb3ZlIGFueSBwcmV2aW91c2x5IGdlbmVyYXRlZCBUaW5rZXJQb3AgRG9ja2VyIGltYWdlcykuCi0qIEFkZGVkICJhdHRhY2htZW50IHJlcXVpc2l0ZSIgYFZlcnRleFByb3BlcnR5LmVsZW1lbnQoKWAgYW5kIGBQcm9wZXJ0eS5lbGVtZW50KClgIGRhdGEgaW4gR3JhcGhTT04gc2VyaWFsaXphdGlvbi4KLSogR3JhcGhTT04gMy4wIGlzIG5vdyB0aGUgZGVmYXVsdCBzZXJpYWxpemF0aW9uIGZvcm1hdCBpbiBUaW5rZXJHcmFwaCBhbmQgR3JlbWxpbiBTZXJ2ZXIuCi0qIENoYW5nZWQgYFNlcnZlckdyZW1saW5FeGVjdXRvcmAgdG8gbm90IHVzZSBnZW5lcmljcyBzaW5jZSB0aGVyZSByZWFsbHkgaXMgbm8gZmxleGliaWxpdHkgaW4gdGhlIGtpbmQgb2YgYFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZWAgdGhhdCB3aWxsIGJlIHVzZWQuCi0qIFJlbW92ZWQgc3VwcG9ydCBmb3IgcGFzc2luZyBhIGJ5dGUgYXJyYXkgb24gdGhlIGBzYXNsYCBwYXJhbWV0ZXIuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFNPTk1hcHBlciRCdWlsZGVyI2VtYmVkVHlwZXNgIG9wdGlvbi4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYDpyZW1vdGUgY29uZmlnIHRpbWVvdXQgbWF4YC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvbm5lY3Rpb25Qb29sU2V0dGluZ3Muc2Vzc2lvbklkYCBhbmQgYENvbm5lY3Rpb25Qb29sU2V0dGluZ3Mub3B0aW9uYWxTZXNzaW9uSWQoKWAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGByZWNvbm5lY3RJbml0aWFsRGVsYXlgIHNldHRpbmcgZnJvbSB0aGUgSmF2YSBkcml2ZXIuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGB1c2VNYXBwZXJGcm9tR3JhcGhgIG9wdGlvbi4KLSogRXN0YWJsaXNoZWQgdGhlIEdyYXBoU09OIDMuMCBmb3JtYXQgd2l0aCBuZXcgYGc6TWFwYCwgYGc6TGlzdGAgYW5kIGBnOlNldGAgdHlwZXMuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBJby5CdWlsZGVyI3JlZ2lzdHJ5KElvUmVnaXN0cnkpYCBtZXRob2QuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcnlvTWVzc2FnZVNlcmlhbGl6ZXJWMWQwKEdyeW9NYXBwZXIpYCBjb25zdHJ1Y3Rvci4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFRpbmtlcklvUmVnaXN0cnlgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgZ2V0SW5zdGFuY2UoKWAgbWV0aG9kcyBvbiBhbGwgVGlua2VyUG9wIGNsYXNzZXMuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzLnN1cHBvcnRzQWRkUHJvcGVydHkoKWAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIFRpbmtlckdyYXBoIGNvbmZpZ3VyYXRpb24gbWVtYmVyIHZhcmlhYmxlcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFRyYW5zYWN0aW9uLnN1Ym1pdChGdW5jdGlvbilgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgT3BTZWxlY3RvckhhbmRsZXIuZXJyb3JNZXRlcmAgYW5kIGBBYnN0cmFjdEV2YWxPcFByb2Nlc3Nvci5lcnJvck1ldGVyYCBmaWVsZHMuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBBYnN0cmFjdEV2YWxPcFByb2Nlc3Nvci52YWxpZEJpbmRpbmdOYW1lYCBmaWVsZC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFNpbXBsZUF1dGhlbnRpY2F0b3IuQ09ORklHX0NSRURFTlRJQUxTX0xPQ0FUSU9OYCBmaWVsZC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEl0ZXJhdG9ySGFuZGxlcmAsIGBOaW9HcmVtbGluUmVzcG9uc2VFbmNvZGVyYCBhbmQgYFdzR3JlbWxpblJlc3BvbnNlRW5jb2RlcmAgY2xhc3Nlcy4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFNlc3Npb24ua2lsbCgpYCBhbmQgYFNlc3Npb24ubWFudWFsS2lsbCgpYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEF1dGhlbnRpY2F0b3IubmV3U2FzbE5lZ290aWF0b3IoKWAgYW5kIGl0cyBtZXRob2QgaW1wbGVtZW50YXRpb25zIGluIGNsYXNzZXMgdGhhdCB3ZXJlIGFzc2lnbmFibGUgdG8gdGhhdCBpbnRlcmZhY2UuCi0qIFJlbW92ZWQgYGdyZW1saW4tZ3Jvb3Z5LXRlc3RgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCAiRyIgZnVuY3Rpb25zIGluIGBncmVtbGluLWdyb292eWAgKGkuZS4gYEdGdW5jdGlvbmApLgotKiBSZW1vdmVkIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBgR3JlbWxpblBsdWdpbmAgc3lzdGVtIHRoYXQgd2FzIGluIGBncmVtbGluLWdyb292eWAgLSB0aGUgcmV2aXNlZCBgR3JlbWxpblBsdWdpbmAgc3lzdGVtIGluIGBncmVtbGluLWNvcmVgIGlzIHRoZSBvbmx5IG9uZSBub3cgaW4gdXNlLgotKiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgbm8gbG9uZ2VyIGltcGxlbWVudHMgdGhlIG5vdyByZW1vdmVkIGBEZXBlbmRlbmN5TWFuYWdlcmAuCi0qIEFkZGVkIGBWZXJ0ZXhgLCBgRWRnZWAsIGBWZXJ0ZXhQcm9wZXJ0eWAsIGFuZCBgUHJvcGVydHlgIHNlcmlhbGl6ZXJzIHRvIEdyZW1saW4tUHl0aG9uIGFuZCBleHBvc2VkIHRlc3RzIHRoYXQgdXNlIGdyYXBoIG9iamVjdCBhcmd1bWVudHMuCi0qIGBCeXRlY29kZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKWAgYW5kIGBCeXRlY29kZS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKClgIG5vdyByZXR1cm5zIGBMaXN0PEluc3RydWN0aW9uPmAgaW5zdGVhZCBvZiBgSXRlcmFibGU8SW5zdHJ1Y3Rpb24+YC4KLSogQWRkZWQgdmFyaW91cyBgVHJhdmVyc2FsU3RyYXRlZ3lgIHJlZ2lzdHJhdGlvbnMgd2l0aCBgR3J5b01hcHBlcmAuCi0qIEZpeGVkIGEgbmFtaW5nIG1pc3Rha2UgaW4gR3JlbWxpbi1QeXRob246IGBJZGVudGl0eVJlbW92ZVN0cmF0ZWd5YCBpcyBub3cgY2FsbGVkIGBJZGVudGl0eVJlbW92YWxTdHJhdGVneWAuCi0qIEFkZGVkIGBUcmFuc2xhdGlvblN0cmF0ZWd5YCB0ZXN0IGluZnJhc3RydWN0dXJlIHRoYXQgdmVyaWZpZXMgYEJ5dGVjb2RlYCBnZW5lcmF0ZWQgZnJvbSBhIHRyYW5zbGF0aW9uIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCBgQnl0ZWNvZGVgLgotKiBNb3ZlZCBgTnVtYmVySGVscGVyYCBpbnRvIHRoZSBgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsYCBwYWNrYWdlLgotKiBBZGRlZCBgUG9wLm1peGVkYCBpbnN0ZWFkIG9mIHVzaW5nIGBudWxsYCB0byByZXByZXNlbnQgc3VjaCBzZW1hbnRpY3MuCi0qIGBzZWxlY3QoKWAtc3RlcCBub3cgZGVmYXVsdHMgdG8gdXNpbmcgYFBvcC5sYXN0YCBpbnN0ZWFkIG9mIGBQb3AubWl4ZWRgLgotKiBBZGRlZCBgZ3JlbWxpbi1pby10ZXN0YCBtb2R1bGUgdG8gdmFsaWRhdGUgSU8gZm9ybWF0cy4KLSogYFJlcXVlc3RNZXNzYWdlYCBhbmQgYFJlc3BvbnNlTWVzc2FnZWAgYXJlIG5vdyByZWdpc3RlcmVkIHdpdGggYEdyeW9NYXBwZXJgIGFzIHBhcnQgb2YgdGhlIFRpbmtlclBvcCByYW5nZSBvZiB0eXBlIGlkZW50aWZpZXJzLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29uc29sZWAgY29uc3RydWN0b3IgdGhhdCB0b29rIGEgYFN0cmluZ2AgYXMgYW4gYXJndW1lbnQgZnJvbSBgZ3JlbWxpbi1jb25zb2xlYC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvbmN1cnJlbnRCaW5kaW5nc2AgZnJvbSBgZ3JlbWxpbi1ncm9vdnlgLgotKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgU2NyaXB0RXhlY3V0b3JgIGZyb20gYGdyZW1saW4tZ3Jvb3Z5YC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFNhbmRib3hFeHRlbnNpb25gIGZyb20gYGdyZW1saW4tZ3Jvb3Z5YC4KLSogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIGNvbnN0cnVjdG9yIHRoYXQgdG9vayBgSW1wb3J0Q3VzdG9taXplclByb3ZpZGVyYCBhcyBhbiBhcmd1bWVudCBmcm9tIGBncmVtbGluLWdyb292eWAuCi0qIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lI3BsdWdpbnMoKWAgZnJvbSBgZ3JlbWxpbi1ncm9vdnlgLgotKiBBZGRlZCBgT3B0aW9uYWxTdGVwYCBmb3IgdXNlIHdpdGggYG9wdGlvbmFsKClgIHRvIGJldHRlciBoYW5kbGUgaXNzdWVzIGFzc29jaWF0ZWQgd2l0aCBicmFuY2ggc2lkZS1lZmZlY3RzLgotKiBgVW5mb2xkU3RlcGAgbm93IHN1cHBvcnRzIHVuZm9sZGluZyBvZiBhcnJheXMuCi0qIFJlbW92ZWQgYWxsIHBlcmZvcm1hbmNlIHRlc3RzIHRoYXQgd2VyZSBub3QgcGFydCBvZiBgZ3JlbWxpbi1iZW5jaG1hcmtgLgotKiBSZW1vdmVkIGRlcGVuZGVuY3kgb24gYGp1bml0LWJlbmNobWFya3NgIGFuZCBpdCdzIHJlbGF0ZWQgcmVmZXJlbmNlIHRvIGBoMmAuCi0qIE1vdmVkIHRoZSBzb3VyY2UgZm9yIHRoZSAiaG9tZSBwYWdlIiBpbnRvIHRoZSByZXBvc2l0b3J5IHVuZGVyIGAvc2l0ZWAgc28gdGhhdCBpdCBlYXNpZXIgdG8gYWNjZXB0IGNvbnRyaWJ1dGlvbnMuCi0qIEFkZGVkIGBVbnNoYWRlZEtyeW9TaGltU2VydmljZWAgYXMgdGhlIG5ldyBkZWZhdWx0IHNlcmlhbGl6ZXIgbW9kZWwgZm9yIGBTcGFya0dyYXBoQ29tcHV0ZXJgLgotKiBgR3J5b1JlZ2lzdHJhdG9yYCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBwcmV2aW91cyBgR3J5b1NlcmlhbGl6ZXJgIG1vZGVsIGluIGBTcGFya0dyYXBoQ29tcHV0ZXJgLgotKiBBZGRlZCBzdXBwb3J0IGZvciBgSW9SZWdpc3RyeWAgY3VzdG9tIHNlcmlhbGl6YXRpb24gaW4gU3BhcmsvR2lyYXBoIGFuZCBwcm92aWRlZCBhIGdlbmVyYWwgYGhhZG9vcC1ncmVtbGluYCB0ZXN0IHN1aXRlLgotKiBSZXBsYWNlZCB0ZXJtIGBSRVNUYCB3aXRoIGBIVFRQYCB0byByZW1vdmUgYW55IGNvbmZ1c2lvbiBhcyB0byB0aGUgZGVzaWduIG9mIHRoZSBBUEkuCi0qIE1vdmVkIGBncmVtbGluLWJlbmNobWFya2AgdW5kZXIgYGdyZW1saW4tdG9vbHNgIG1vZHVsZS4KLSogQWRkZWQgYGdyZW1saW4tdG9vbHNgIGFuZCBpdHMgc3VibW9kdWxlIGBncmVtbGluLWNvdmVyYWdlYC4KLSogUmVtb3ZlZCBgdHJ5UmFuZG9tQ29tbWl0KClgIGZyb20gYEFic3RyYWN0R3JlbWxpblRlc3RgLgotKiBDaGFuZ2VkIGBncmVtbGluLWJlbmNobWFya2Agc3lzdGVtIHByb3BlcnR5IGZvciB0aGUgcmVwb3J0IGxvY2F0aW9uIHRvIGBiZW5jaG1hcmtSZXBvcnREaXJgIGZvciBjb25zaXN0ZW5jeS4KLSogQWRkZWQgU3lzViBhbmQgc3lzdGVtZCBpbml0IHNjcmlwdHMuCi0qIGBHcmFwaFRyYXZlcnNhbC52YWx1ZU1hcChpbmNsdWRlVG9rZW5zLHByb3BlcnR5S2V5cy4uLilgIG5vdyByZXR1cm5zIGEgYE1hcDxPYmplY3QsRT5gIHNpbmNlIGtleXMgY291bGQgYmUgYFQuaWRgIG9yIGBULmxhYmVsYC4KLSogQWRkZWQgYHNraXAobG9uZylgIGFuZCBgc2tpcCgoU2NvcGUsbG9uZylgIHdoaWNoIGNhbGwgdGhlIGByYW5nZShsb3csaGlnaClgIGVxdWl2YWxlbnRzIHdpdGggLTEgYXMgdGhlIGhpZ2guCi0qIEFkZGVkIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIHRvIGBncmVtbGluLXNlcnZlcmAgZm9yIHdlYnNvY2tldHMgYW5kIG5pbyB0cmFuc3BvcnQuCi0qIEFkZGVkIGF1ZGl0IGxvZ2dpbmcgb2YgYXV0aGVudGljYXRlZCB1c2VycyBhbmQgZ3JlbWxpbiBxdWVyaWVzIHRvIGBncmVtbGluLXNlcnZlcmAuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xMjExIFVuZm9sZFN0ZXAgc2hvdWxkIHVuZm9sZCBhcnJheXMuICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTQyNiBHcnlvU2VyaWFsaXplciBzaG91bGQgaW1wbGVtZW50IEphdmEgc2VyaWFsaXphdGlvbiBpbnRlcmZhY2UKLSogVElOS0VSUE9QLTE0NjUgUmVtb3ZlIGRlcHJlY2F0ZWQgbmV3U2FzbE5lZ290aWF0b3IgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNDgzIFByb3BlcnR5TWFwU3RlcCByZXR1cm5zIE1hcDxTdHJpbmcsRT4gYnV0IHB1dHMgbm9uIFN0cmluZyBrZXlzIGluIGl0IQotKiBUSU5LRVJQT1AtMTUyMCBEaWZmZXJlbmNlIGJldHdlZW4gJ2hhcycgc3RlcCBnZW5lcmF0ZWQgZ3JhcGhzb24yLjAgaW4gamF2YSBhbmQgcHl0aG9uIGdsdiBpbXBsZW1lbnRhdGlvbgotKiBUSU5LRVJQT1AtMTUzMyBTdG9yYWdlIGFuZCBJb1JlZ2lzdHJ5Ci0qIFRJTktFUlBPUC0xNTk3IFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kgbWVzc2luZyB1cCBjZXJ0YWluIHRyYXZlcnNhbHMKLSogVElOS0VSUE9QLTE2MzUgZ3JlbWxpbi1weXRob246IER1cGxpY2F0ZSBzZXJpYWxpemF0aW9uIG9mIGVsZW1lbnQgcHJvcGVydHkgaW4gUHJvcGVydHlTZXJpYWxpemVyCi0qIFRJTktFUlBPUC0xNjU4IEdyYXBoc29uMiBtYXAga2V5cyBhcmUgc2VyaWFsaXNlZCBhcyBzdHJpbmdzCi0qIFRJTktFUlBPUC0xNzE2IFRyYXZlcnNhbCBzdHJhdGVnaWVzIGFyZSBub3QgYXBwbGllZCB3aXRoIHJlbW90ZSBpbiBHcmVtbGluIENvbnNvbGUKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtODMyIFJlbW92ZSBkZXByZWNhdGVkIGFkZFYvRS9JbkUvT3V0RSBtZXRob2RzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtODMzIFJlbW92ZSBkZXByZWNhdGVkIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgY29uc3RydWN0b3IgYW5kIHBsdWdpbnMoKSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTgzNCBSZW1vdmUgZGVwcmVjYXRlZCBzYWNrKCkgbWV0aG9kICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtODgwIFJlbW92ZSBkZXByZWNhdGVkIEdyb3VwU3RlcFYzZDAgYW5kIEdyb3VwU2lkZUVmZmVjdFN0ZXBWM2QwICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtOTI5IFJlbW92ZSBEZXByZWNhdGVkIFRpbmtlckdyYXBoIHB1YmxpYyBzdGF0aWMgbWV0aG9kcy4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC05ODAgQWRkIGEgc2VydmljZSBzY3JpcHQgb3IgZGFlbW9uIG1vZGUgaW4gdGhlIGRpc3RyaWJ1dGlvbiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTk5OSBTZXJ2ZXJHcmVtbGluRXhlY3V0b3IgY29uc3RydWN0aW9uIG5lZWQgbm90IHVzZSBnZW5lcmljcyBmb3IgRXhlY3V0b3JTZXJ2aWNlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTAwNCBNYWtlIFRyYW5zYWN0aW9uLmNvbW1pdCgpIGZhaWx1cmVzIGNvbnNpc3RlbnQgYWNyb3NzIGltcGxlbWVudGF0aW9ucy4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMDEwIFJlbW92ZSBkZXByZWNhdGVkIGNyZWRlbnRpYWxzRGJMb2NhdGlvbiBmb3IgU2ltcGxlQXV0aGVudGljYXRvciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEwMjQgUmVtb3ZlIGRlcHJlY2F0ZWQgdHJ5UmFuZG9tQ29tbWl0KCkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMDI4IFJlbW92ZSBkZXByZWNhdGVkIENvbm5lY3Rpb25Qb29sU2V0dGluZ3Mgc2Vzc2lvbiBzZXR0aW5ncyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEwNDAgUmVtb3ZlIGRlcHJlY2F0ZWQgU2FuZGJveEV4dGVuc2lvbiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEwNDYgUmVtb3ZlIGRlcHJlY2F0ZWQgR3JlbWxpbiBTZXJ2ZXIgaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMDQ5IFJlbW92ZSBkZXByZWNhdGVkIGVycm9yIG1ldGVyIG1lbWJlciB2YXJpYWJsZXMgaW4gR3JlbWxpbiBTZXJ2ZXIgaGFuZGxlcnMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMDk0IFJlbW92ZSBkZXByZWNhdGVkIFZlcnRleFByb3BlcnR5RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMTE2IFNvbWUgYW5vbnltb3VzIHRyYXZlcnNhbCBzdGVwcyBjYW4gYmUgaGFyZCB0eXBlZC4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMTMwIEVhY2ggcmVsZWFzZSBzaG91bGQgc3RvcmUgS3J5by9HcmFwaFNPTi9HcmFwaE1MIHZlcnNpb25zIHRvIGVuc3VyZSBmdXR1cmUgY29tcGF0aWJpbGl0eSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTExNDIgUmVtb3ZlIGRlcHJlY2F0ZWQgdmFsdWVJbmNyLCB2YWx1ZURlY3IsIGtleUluY3IsIGtleURlY3IuICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTE2OSBSZW1vdmUgZGVwcmVjYXRlZCBUcmF2ZXJzYWxTY3JpcHRGdW5jdGlvbiBhbmQgVHJhdmVyc2FsU2NyaXB0SGVscGVyICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTE3MCBSZW1vdmUgZGVwcmVjYXRlZCBDb25maWd1cmF0aW9uVHJhdmVyc2FsLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTExNzEgUmVtb3ZlIGRlcHJlY2F0ZWQgVHJhdmVyc2FsU291cmNlLkJ1aWxkZXIgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMjM1IFJlbW92ZSBkZXByZWNhdGVkIFByb2Nlc3NQZXJmb3JtYW5jZVN1aXRlIGFuZCBUcmF2ZXJzYWxQZXJmb3JtYW5jZVRlc3QgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMjc1IFJlbW92ZSBkZXByZWNhdGVkIG1heCBzZXR0aW5nIGZvciA6cmVtb3RlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTI4MyBSZW1vdmUgZGVwcmVjYXRlZCBTY3JpcHRFeGVjdXRvciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEyODkgUmVtb3ZlIGRlcHJlY2F0ZWQgQ29ubmVjdGl2ZVAsIEFuZFAsIGFuZCBPclAgY29uc3RydWN0b3JzLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEyOTEgUmVtb3ZlIGRlcHJlY2F0ZWQgbWFwVmFsdWVzIGFuZCBtYXBLZXlzIG1ldGhvZHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMzEzIFJlbmFtZSBSYW5nZUJ5SXNDb3VudFN0cmF0ZWd5ICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTMxNiBSZW1vdmUgZGVwcmVjYXRlZCBjb25zdHJ1Y3RvciBmcm9tIEdyeW9NZXNzYWdlU2VyaWFsaXplcnMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMzI3IEJyaW5nIEdyeW9SZWdpc3RyYXRvciB0byB0aGUgZm9yZWZyb250IGFuZCBkZXByZWNhdGUgR3J5b1NlcmlhbGl6ZXIgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMzYzIENsZWFudXAgRG9ja2VyIGJ1aWxkIHNjcmlwdCBmb3IgbmV4dCBtYWpvciByZWxlYXNlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTM2OSBSZXBsYWNlIFJFU1QgQVBJIHdpdGggSFRUUCBBUEkKLSogVElOS0VSUE9QLTEzODkgU3VwcG9ydCBTcGFyayAyLjAuMAotKiBUSU5LRVJQT1AtMTM5OSBOdW1iZXJIZWxwZXIgbmVlZHMgdG8gZ28gaW50byB1dGlsIGFuZCBoYXZlIGEgcHJpdmF0ZSBjb25zdHJ1Y3RvciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE0MDQgUGF0aC9sYWJlbCBvcHRpbWl6YXRpb24KLSogVElOS0VSUE9QLTE0MDggUmVtb3ZlIERlcHJlY2F0ZWQgSW8uQnVpbGRlci5yZWdpc3RyeSgpICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTQxNCBDaGFuZ2UgZGVmYXVsdCBHcmFwaFNPTiB2ZXJzaW9uIHRvIDMuMCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE0MjAgUmVtb3ZlIGRlcHJlY2F0ZWQgQ29uY3VycmVudEJpbmRpbmdzIGluIGdyZW1saW4tZ3Jvb3Z5ICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTQyMSBSZW1vdmUgZGVwcmVjYXRlZCBDb250cm9sT3BzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTQyNyBHcmFwaFNPTiAzLjAgbmVlZHMgY29sbGVjdGlvbiB0eXBlcyBhbmQgY29uc2lzdGVudCBudW1iZXIgdHlwaW5nLgotKiBUSU5LRVJQT1AtMTQ0MyBVc2UgYW4gQVBJIGNoZWNrZXIgZHVyaW5nIGJ1aWxkCi0qIFRJTktFUlBPUC0xNDQ1IExhcmdlIG5lc3RlZCBWZXJ0ZXhQcm9wZXJ0aWVzIGFuZCBQcm9wZXJ0aWVzIGRvIG5vdCBnZXQgcHJpbnRlZCB3ZWxsCi0qIFRJTktFUlBPUC0xNDU0IENyZWF0ZSBTZXJpYWxpemVycyBmb3IgR3JhcGggb2JqZWN0cyBpbiBHcmVtbGluLVB5dGhvbgotKiBUSU5LRVJQT1AtMTQ4MSBSZW1vdmUgZGVwcmVjYXRlZCByZWNvbm5lY3RJbml0aWFsRGVsYXkgaW4gSmF2YSBkcml2ZXIgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNDg1IE1vdmUgc291cmNlIGZvciBUaW5rZXJQb3Agc2l0ZSB0byBzb3VyY2UgY29kZSByZXBvCi0qIFRJTktFUlBPUC0xNTA2IE9wdGlvbmFsL0NvYWxlc2NlIHNob3VsZCBub3QgYWxsb3cgc2lkZUVmZmVjdCB0cmF2ZXJzYWxzLgotKiBUSU5LRVJQT1AtMTUxNCBSZXN0cnVjdHVyZSBmb3IgZ3JlbWxpbi10b29scyBtb2R1bGUgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNTI0IEJ5dGVjb2RlLmdldFhYWEluc3RydWN0aW9ucyBzaG91bGQgcmV0dXJuIGEgTGlzdCwgbm90IEl0ZXJhYmxlLgotKiBUSU5LRVJQT1AtMTUyNiBSZW1vdmUgZGVwcmVjYXRlZCBTZXNzaW9uIGtpbGwoKSBvdmVybG9hZHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNTM2IEluY2x1ZGUgR0xWcyBpbiBEb2NrZXIgYnVpbGQKLSogVElOS0VSUE9QLTE1NDEgU2VsZWN0IHNob3VsZCBkZWZhdWx0IHRvIFBvcC5sYXN0IHNlbWFudGljcyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE1NDkgSW1wbGVtZW50IHNraXAoKQotKiBUSU5LRVJQT1AtMTU1MCBNYWtlIEdyYXBoaXRlIGFuZCBHYW5nbGlhIG9wdGlvbmFsIGRlcGVuZGVuY2llcwotKiBUSU5LRVJQT1AtMTU2MyBSZW1vdmUgZGVwcmVjYXRlZCBnZXRJbnN0YW5jZSgpIG1ldGhvZHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNTY1IFNldHVwIEdyYXBoU09OIDMuMAotKiBUSU5LRVJQT1AtMTU2NiBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBmb3IgZ3JlbWxpbi1zZXJ2ZXIKLSogVElOS0VSUE9QLTE1NzQgR2V0IHJpZCBvZiB1bnR5cGVkIEdyYXBoU09OIGluIDMuMAotKiBUSU5LRVJQT1AtMTYwMyBSZW1vdmUgc3VwcG9ydCBmb3IgU0FTTCBieXRlIGFycmF5IGluIHByb3RvY29sICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTYxMiBSZW1vdmUgZ3JlbWxpbi1ncm9vdnktdGVzdCBtb2R1bGUgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNjIxIFJlbW92ZSBkZXByZWNhdGVkIEdyZW1sblBsdWdpbiBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE2MjIgUmVtb3ZlIGRlcHJlY2F0ZWQgRyBmdW5jdGlvbnMgaW4gZ3JlbWxpbi1ncm9vdnkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNjUxIFJlbW92ZSBkZXByZWNhdGVkIGdyZW1saW4uc2ggaW5pdCBzeW50YXggKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNjg2IE1ha2UgVHJhdmVyc2FsTWV0cmljcyB0aHJlYWQgc2FmZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE2OTggR3J5byAzLjAKLSogVElOS0VSUE9QLTE2OTkgUmVtb3ZlIGRlcHJlY2F0ZWQgdXNlck1hcHBlckZyb21HcmFwaCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE3MDAgUmVtb3ZlIGRlcHJlY2F0ZWQgZW1iZWRUeXBlcyBvcHRpb24KLSogVElOS0VSUE9QLTE3MDYgUmVtb3ZlIGRlcHJlY2F0ZWQgU2NyaXB0RW5naW5lQ2FjaGUgYW5kIHJlbGF0ZWQgZGVhZCBjb2RlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTcxNSBCdW1wIHRvIFNwYXJrIDIuMgotKiBUSU5LRVJQT1AtMTcxOSBSZW1vdmUgZGVwcmVjYXRlZCBUcmF2ZXJzYWwgcmVsYXRlZCBjb2RlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTcyMCBSZW1vdmUgZGVwcmVjYXRlZCBIYWRvb3AgY29kZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE3MjEgUmVtb3ZlIGRlcHJlY2F0ZWQgQmluZGluZ3MgcmVsYXRlZCBjb2RlICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTcyNCBSZW1vdmUgZGVwcmVjYXRlZCBTY3JpcHRFbGVtZW50RmFjdG9yeQotKiBUSU5LRVJQT1AtMTcyOSBSZW1vdmUgZGVwcmVjYXRlZCBzZWxlY3Qgc3RlcHMuCi0qIFRJTktFUlBPUC0xNzQwIEFkZCB2ZXJ0ZXggcGFyYW1ldGVyIG92ZXJsb2FkIHRvIHRvKCkgYW5kIGZyb20oKQotKiBUSU5LRVJQT1AtMTc0NyBTdHJlYW1saW5lIGluaGVyaXRhbmNlIGZvciBncmVtbGluLXB5dGhvbiBHcmFwaFNPTiBzZXJpYWxpemVyIGNsYXNzZXMKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtMCwgMy4zLjAgY2hhbmdlbG9nPj4uCiAKID09IFRpbmtlclBvcCAzLjIuMCAoTmluZSBJbmNoIEdyZW1saW5zKQogCkBAIC0zNDk5LDExMTkgKzEwNjEsNjIgQEAKIFtbcmVsZWFzZS0zLTItMTFdXQogPT09IFRpbmtlclBvcCAzLjIuMTEgKFJlbGVhc2UgRGF0ZTogSmFudWFyeSAyLCAyMDE5KQogCi0qIEJ1bXBlZCB0byBKYWNrc29uIERhdGFiaW5kIDIuOS44Ci0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTIwNzQgRW5zdXJlIHRoYXQgb25seSBOdUdldCBwYWNrYWdlcyBmb3IgdGhlIGN1cnJlbnQgdmVyc2lvbiBhcmUgcHVzaGVkCi0qIFRJTktFUlBPUC0yMTIxIEJ1bXAgSmFja3NvbiBEYXRhYmluZCAyLjkuOAorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYyNyZWxlYXNlLTMtMi0xMSwgMy4yLjExIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0yLTEwXV0KID09PSBUaW5rZXJQb3AgMy4yLjEwIChSZWxlYXNlIERhdGU6IE9jdG9iZXIgMTUsIDIwMTgpCiAKLSogUmVtb3ZlZCBjb25mbGljdGluZyBub24taW5keSBncm9vdnkgY29yZSBkZXBlbmRlbmN5Ci0qIEJ1bXBlZCBqeXRob24tc3RhbmRhbG9uZSAyLjcuMQotKiBBZGRlZCBhIGRlbGVnYXRlIHRvIHRoZSBHcmVtbGluLk5ldCBkcml2ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLgotKiBTU0wgc2VjdXJpdHkgZW5oYW5jZW1lbnRzCi0qIEFkZGVkIEdyZW1saW4gdmVyc2lvbiB0byBHcmVtbGluIFNlcnZlciBzdGFydHVwIGxvZ2dpbmcgb3V0cHV0LgotKiBGaXhlZCBwcm9ibGVtIHdpdGggR3JlbWxpbiBTZXJ2ZXIgc29tZXRpbWVzIHJldHVybmluZyBhbiBhZGRpdGlvbmFsIG1lc3NhZ2UgYWZ0ZXIgYSBmYWlsdXJlLgotKiBBbGxvd2VkIHNwYWNlcyBpbiBjbGFzc3BhdGggZm9yIGBncmVtbGluLXNlcnZlci5iYXRgLgotKiBGaXhlZCBidWcgaW4gdHJhdmVyc2FscyB0aGF0IHVzZWQgUHl0aG9uIGxhbWJkYXMgd2l0aCBzdHJhdGVnaWVzIGluIGBncmVtbGluLXB5dGhvbmAuCi0qIE1vZGlmaWVkIE1hdmVuIGFyY2hldHlwZSBmb3IgR3JlbWxpbiBTZXJ2ZXIgdG8gdXNlIHJlbW90ZSB0cmF2ZXJzYWxzIHJhdGhlciB0aGFuIHNjcmlwdHMuCi0qIEFkZGVkIGFuIHN5c3RlbSBlcnJvciBjb2RlIGZvciBmYWlsZWQgcGx1Z2luIGluc3RhbGxzIGZvciBHcmVtbGluIFNlcnZlciBgLWlgIG9wdGlvbi4KLSogRml4ZWQgYnVnIGluIGtlZXAtYWxpdmUgcmVxdWVzdHMgZnJvbSBvdmVyLXF1ZXVpbmcgY2FuY2VsbGVkIGpvYnMuCi0qIE1hdGNoIG51bWJlcnMgaW4gYGNob29zZSgpYCBvcHRpb25zIHVzaW5nIGBOdW1iZXJIZWxwZXJgIChtYXRjaCB2YWx1ZXMsIGlnbm9yZSBkYXRhIHR5cGUpLgotKiBBZGRlZCBzdXBwb3J0IGZvciBHcmFwaFNPTiBzZXJpYWxpemF0aW9uIG9mIGBEYXRlYCBpbiBKYXZhc2NyaXB0LgotKiBBZGRlZCBzeW5jaHJvbml6ZWQgYE1hcGAgdG8gR3J5byAxLjAgcmVnaXN0cmF0aW9ucy4KLSogQWRkZWQgYFRyaXBsZWAgdG8gR3J5byAxLjAgcmVnaXN0cmF0aW9ucy4KLSogQWRkZWQgc3VwcG9ydCBmb3IgYERvdWJsZS5OYU5gLCBgRG91YmxlLlBPU0lUSVZFX0lORklOSVRZYCBhbmQgYERvdWJsZS5ORUdBVElWRV9JTkZJTklUWWAuCi0qIEltcHJvdmVkIGVzY2FwaW5nIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBzdHJpbmdzIHBhc3NlZCB0byB0aGUgYEdyb292eVRyYW5zbGF0b3JgLgotKiBBZGRlZCBgQ2x1c3RlcmAgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0IGEgY3VzdG9tIHZhbGlkYXRpb24gc2NyaXB0IHRvIHVzZSB0byB0ZXN0IHNlcnZlciBjb25uZWN0aXZpdHkgaW4gdGhlIEphdmEgZHJpdmVyLgotKiBJbXByb3ZlZCBhYmlsaXR5IG9mIGBHcm9vdnlUcmFuc2xhdG9yYCB0byBoYW5kbGUgbW9yZSB0eXBlcyBzdXBwb3J0ZWQgYnkgR3JhcGhTT04uCi0qIEltcHJvdmVkIGFiaWxpdHkgb2YgYEdyb292eVRyYW5zbGF0b3JgIHRvIGhhbmRsZSBjdXN0b20gdHlwZXMuCi0qIEFkZGVkIGJldHRlciBpbnRlcm5hbCBwcm9jZXNzaW5nIG9mIGBDb2x1bW5gIGluIGBieShGdW5jdGlvbilgLgotKiBBZGRlZCBgaGFzTmV4dCgpYCBzdXBwb3J0IG9uIGBUcmF2ZXJzYWxgIGZvciBgZ3JlbWxpbi1weXRob25gLgotKiBBZGRlZCBzdXBwb3J0IGZvciBhZGRpdGlvbmFsIGV4dGVuZGVkIHR5cGVzIGluIEdyZW1saW4uTmV0IHdpdGggYGRlY2ltYWxgLCBgVGltZVNwYW5gLCBgQmlnSW50ZWdlcmAsIGBieXRlYCwgYGJ5dGVbXWAsIGBjaGFyYCBhbmQgYHNob3J0YC4KLSogRml4ZWQgYnVnIGluIEphdmEgZHJpdmVyIHdoZXJlIGFuIGRpc29yZGVybHkgc2h1dGRvd24gb2YgdGhlIHNlcnZlciB3b3VsZCBjYXVzZSB0aGUgY2xpZW50IHRvIGhhbmcuCi0qIEFkZGVkIGEgZG90bmV0IHRlbXBsYXRlIHByb2plY3QgdGhhdCBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBHcmVtbGluLk5ldC4KLSogUmVtb3ZlZCBgVGhyZWFkSW50ZXJydXB0Q3VzdG9taXplclByb3ZpZGVyYCBmcm9tIGRvY3VtZW50YXRpb24gYXMgYSB3YXkgdG8gdGltZW91dC4KLSogQ2hhbmdlZCBiZWhhdmlvciBvZiBgd2l0aFJlbW90ZSgpYCBpZiBjYWxsZWQgbXVsdGlwbGUgdGltZXMgc28gYXMgdG8gc2ltcGx5IHRocm93IGFuIGV4Y2VwdGlvbiBhbmQgbm90IHBlcmZvcm0gdGhlIHNpZGUtZWZmZWN0IG9mIGF1dG8tY2xvc2luZy4KLSogQWRkZWQgRG9ja2VyIGltYWdlcyBmb3IgR3JlbWxpbiBDb25zb2xlIGFuZCBHcmVtbGluIFNlcnZlci4KLSogRml4ZWQgYnVnIGluIGBicmFuY2goKWAgd2hlcmUgcmVkdWNpbmcgc3RlcHMgYXMgb3B0aW9ucyB3b3VsZCBwcm9kdWNlIGluY29ycmVjdCByZXN1bHRzLgotKiBSZW1vdmVkIHJlY3Vyc2l2ZSBoYW5kbGluZyBvZiBzdHJlYW1pbmcgcmVzdWx0cyBmcm9tIEdyZW1saW4tUHl0aG9uIGRyaXZlciB0byBhdm9pZCBtYXggcmVjdXJzaW9uIGRlcHRoIGVycm9ycy4KLSogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgotKiBDaGVja2VkIHdlYiBzb2NrZXQgc3RhdGUgYmVmb3JlIGNsb3NpbmcgY29ubmVjdGlvbiBpbiB0aGUgLk5FVCBkcml2ZXIuCi0qIERlcHJlY2F0ZWQgYEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtYCBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS4KLSogRGVwcmVjYXRlZCBgQnVsa0R1bXBlclZlcnRleFByb2dyYW1gIHdpdGggdGhlIG1vcmUgYXB0bHkgbmFtZWQgYENsb25lVmVydGV4UHJvZ3JhbWAuCi0qIEFkZGVkIGBjcmVhdGVHcmF0ZWZ1bERlYWQoKWAgdG8gYFRpbmtlckZhY3RvcnlgIHRvIGhlbHAgbWFrZSBpdCBlYXNpZXIgdG8gdHJ5IHRvIGluc3RhbnRpYXRlIHRoYXQgdG95IGdyYXBoLgotKiBBZGRlZCBpZGVudGlmaWVycyB0byBlZGdlcyBpbiB0aGUgS2l0Y2hlbiBTaW5rIHRveSBncmFwaC4KLSogT3JkZXJlZCB0aGUgbG9hZGluZyBvZiBwbHVnaW5zIGluIHRoZSBHcmVtbGluIENvbnNvbGUgYnkgdGhlaXIgcG9zaXRpb24gaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KLSogUmVmYWN0b3JlZCB0aGUgR3JlbWxpbiBTZXJ2ZXIgaW50ZWdyYXRpb24gdGVzdGluZyBmcmFtZXdvcmsgYW5kIHN0cmVhbWxpbmVkIHRoYXQgaW5mcmFzdHJ1Y3R1cmUuCi0qIExvZ2dlZCB0aGUgc2VlZCB1c2VkIGluIGluaXRpYWxpemluZyBgUmFuZG9tYCBmb3IgdGVzdHMuCi0qIEZpeGVkIGJ1ZyBpbiBgR3Jvb3Z5VHJhbnNsYXRvcmAgdGhhdCBkaWRuJ3QgcHJvcGVybHkgaGFuZGxlIGVtcHR5IGBNYXBgIG9iamVjdHMuCi0qIEFkZGVkIGNvbmNyZXRlIGNvbmZpZ3VyYXRpb24gbWV0aG9kcyB0byBgU3BhcmtHcmFwaENvbXB1dGVyYCB0byBtYWtlIGEgbW9yZSBjbGVhciBBUEkgZm9yIGNvbmZpZ3VyaW5nIGl0LgotKiBGaXhlZCBhIGJ1ZyBpbiBgVGlua2VyR3JhcGhDb3VudFN0cmF0ZWd5YCwgd2hpY2ggZGlkbid0IGNvbnNpZGVyIHRoYXQgY2VydGFpbiBtYXAgc3RlcHMgbWF5IG5vdCBlbWl0IGFuIGVsZW1lbnQuCi0qIEZpeGVkIGEgYnVnIGluIEphdmFTY3JpcHQgR0xWIHdoZXJlIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gY2xvc2UoKSBtZXRob2QgZGlkbid0IHJldHVybmVkIGEgUHJvbWlzZSBpbnN0YW5jZS4KLSogQnVtcGVkIHRvIEphY2tzb24gMi45LjYuCi0qIFNhc2wgUGxhaW4gVGV4dCBBdXRoZW50aWNhdGlvbiBhZGRlZCB0byBHcmVtbGluIEphdmFzY3JpcHQuCi0qIEFiaWxpdHkgdG8gc2VuZCBzY3JpcHRzIHRvIHNlcnZlciBhZGRlZCB0byBHcmVtbGluIEphdmFzY3JpcHQuCi0qIFRyYW5zbGF0b3IgY2xhc3MgYWRkZWQgdG8gR3JlbWxpbiBKYXZhc2NyaXB0IHRvIHRyYW5zbGF0ZSBieXRlY29kZSB0byBzY3JpcHQgY2xpZW50c2lkZS4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTE4OTggSXNzdWUgd2l0aCBiaW5kaW5ncyBpbiBzdHJhdGVnaWVzIGFuZCBsYW1iZGFzCi0qIFRJTktFUlBPUC0xOTMzIGdyZW1saW4tcHl0aG9uIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIG9uIGxhcmdlIHJlc3BvbnNlcwotKiBUSU5LRVJQT1AtMTk1OCBUaW5rZXJHcmFwaENvdW50U3RyYXRlZ3kgY2FuIHJldHVybiB3cm9uZyBjb3VudHMKLSogVElOS0VSUE9QLTE5NjEgRHVwbGljYXRlIGNvcGllcyBvZiBpbWFnZXMgZGlyZWN0b3J5IGluIGRvY3MKLSogVElOS0VSUE9QLTE5NjIgR3Jvb3Z5VHJhbnNsYXRvciBkb2Vzbid0IGhhbmRsZSBlbXB0eSBtYXBzCi0qIFRJTktFUlBPUC0xOTYzIFVzZSBvZiByZWR1Y2luZyBzdGVwIGluIGNob29zZSgpCi0qIFRJTktFUlBPUC0xOTcyIGluamVjdCgpIHRlc3RzIGFyZSB0aHJvd2luZyBleGNlcHRpb25zIGluIC5ORVQgR0xWIHRlc3RzCi0qIFRJTktFUlBPUC0xOTc4IENoZWNrIGZvciBXZWJzb2NrZXQgY29ubmVjdGlvbiBzdGF0ZSB3aGVuIHJldHJpZXZlZCBmcm9tIENvbm5lY3Rpb24gUG9vbCBtaXNzaW5nCi0qIFRJTktFUlBPUC0xOTg4IG1pbm9yIGVycm9yIGluIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTE5OTkgW0phdmFdW2dyZW1saW4tZHJpdmVyXSBRdWVyeSB0byBhIHJlbW90ZSBzZXJ2ZXIgdmlhIHRoZSB3ZWJzb2NrZXQgY2xpZW50IGhhbmdzIGluZGVmaW5pdGVseSBpZiB0aGUgc2VydmVyIGJlY29tZXMgdW5hdmFpbGFibGUKLSogVElOS0VSUE9QLTIwMDUgSW50ZXJtaXR0ZW50IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIHJlc3BvbnNlIGhhbmRsaW5nCi0qIFRJTktFUlBPUC0yMDA5IFBpY2suYW55IGFuZCBQaWNrLm5vbmUgc2hvdWxkIGJlIGV4cG9zZWQgaW4gR3JlbWxpbi1KYXZhU2NyaXB0Ci0qIFRJTktFUlBPUC0yMDMwIEtlZXBBbGl2ZSB0YXNrIGV4ZWN1dGVkIGZvciBldmVyeSBDb25uZWN0aW9uLndyaXRlIGNhbGwKLSogVElOS0VSUE9QLTIwMzIgVXBkYXRlIGp5dGhvbi1zdGFuZGFsb25lCi0qIFRJTktFUlBPUC0yMDQ0IENhbm5vdCByZWNvbm5lY3QgdG8gQXp1cmUgY29zbW9zIGhvc3QgdGhhdCBiZWNvbWVzIGF2YWlsYWJsZSBhZ2FpbgotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xMTEzIEdyYXBoQ29tcHV0ZXIgc3ViY2xhc3NlcyBzaG91bGQgc3VwcG9ydCBuYXRpdmUgbWV0aG9kcwotKiBUSU5LRVJQT1AtMTM2NSBMb2cgdGhlIHNlZWQgdXNlZCB0byBpbml0aWFsaXplIFJhbmRvbSBpbiB0ZXN0cwotKiBUSU5LRVJQT1AtMTU5NSBHbyB0aHJvdWdoIFRyYXZlcnNhbFZlcnRleFByb2dyYW0gd2l0aCBhIHByb2ZpbGUgYW5kIG9wdGltaXplLgotKiBUSU5LRVJQT1AtMTc3OCBEbyBub3QgcHJvbW90ZSB0aW1lZEludGVycnVwdCBvcHRpb24gZm9yIEdyZW1saW4gU2VydmVyIHNjcmlwdCBwcm9jZXNzaW5nCi0qIFRJTktFUlBPUC0xNzgwIEFkZCBhdXRoZW50aWNhdGlvbiB0ZXN0cyBmb3IgZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTE4MzYgLk5FVCBzYW1wbGUgcHJvamVjdAotKiBUSU5LRVJQT1AtMTg0MSBJbmNsdWRlIFB5dGhvbiBHTFYgdGVzdHMgb24gVHJhdmlzQ0kKLSogVElOS0VSUE9QLTE4OTcgUHJvdmlkZSBEb2NrZXIgaW1hZ2VzIG9mIEdyZW1saW4gU2VydmVyIGFuZCBDb25zb2xlCi0qIFRJTktFUlBPUC0xOTQ1IEFkZCBzdXBwb3J0IGZvciBleHRlbmRlZCBHcmFwaFNvbiB0eXBlcyB0byBHcmVtbGluLm5ldAotKiBUSU5LRVJQT1AtMTk1MSBncmVtbGluLXNlcnZlci5iYXQgZG9lc24ndCBzdXBwb3J0IHBhdGhzIGNvbnRhaW5pbmcgc3BhY2VzCi0qIFRJTktFUlBPUC0xOTU5IFByb3ZpZGUgYSB3YXkgdG8gc3VibWl0IHNjcmlwdHMgdG8gdGhlIHNlcnZlciBpbiBncmVtbGluLWphdmFzY3JpcHQKLSogVElOS0VSUE9QLTE5NjggUmVmYWN0b3IgZWxlbWVudHMgb2YgR3JlbWxpbiBTZXJ2ZXIgdGVzdGluZwotKiBUSU5LRVJQT1AtMTk3NiBJbmNsdWRlIENvbXB1dGVyIHRlc3RzIGZvciBHTFZzCi0qIFRJTktFUlBPUC0xOTc3IEdyZW1saW4tSmF2YVNjcmlwdDogU3VwcG9ydCBTQVNMIGF1dGhlbnRpY2F0aW9uCi0qIFRJTktFUlBPUC0xOTg1IFVwZGF0ZSBwb3NpdGlvbiBvbiBidWxrIGxvYWRpbmcKLSogVElOS0VSUE9QLTE5ODkgUHJlc2VydmUgb3JkZXIgdGhhdCBwbHVnaW5zIGFyZSBhcHBsaWVkIGluIEdyZW1saW4gQ29uc29sZQotKiBUSU5LRVJQT1AtMTk5NSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGNsb3NlKCkgbWV0aG9kIHJldHVybnMgdW5kZWZpbmVkCi0qIFRJTktFUlBPUC0yMDExIFVzZSBOdW1iZXJIZWxwZXIgb24gY2hvb3NlKCkKLSogVElOS0VSUE9QLTIwMTIgVGFyZ2V0IC5ORVQgU3RhbmRhcmQgMi4wIGZvciBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMjAxNSBBbGxvdyB1c2VycyB0byBjb25maWd1cmUgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9ucwotKiBUSU5LRVJQT1AtMjAxNiBVcGdyYWRlIEphY2tzb24gRmFzdGVyWE1MIHRvIDIuOS41IG9yIGxhdGVyIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5Ci0qIFRJTktFUlBPUC0yMDE3IENoZWNrIGZvciBDb2x1bW4gaW4gYnkoKQotKiBUSU5LRVJQT1AtMjAyMiBDbHVzdGVyIFNTTCBzaG91bGQgdHJ1c3QgZGVmYXVsdCBjYSBjZXJ0cyBieSBkZWZhdWx0Ci0qIFRJTktFUlBPUC0yMDIzIEdyZW1saW4gU2VydmVyIHNob3VsZCBub3QgY3JlYXRlIHNlbGYtc2lnbmVkIGNlcnRzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMjAyNCBHcmVtbGluIFNlcnZlciBBcHBsaWNhdGlvbiBhcmNoZXR5cGUgc2hvdWxkIGNvbm5lY3QgdmlhIHdpdGhSZW1vdGUKLSogVElOS0VSUE9QLTIwMjUgQ2hhbmdlIHRvIFNIQS0yNTYvNTEyIGFuZCBkcm9wIFNIQS0xIGZvciByZWxlYXNlcwotKiBUSU5LRVJQT1AtMjAyNiBHcmVtbGluLk5ldC5Ecml2ZXIgc2hvdWxkIGNoZWNrIENsaWVudFdlYlNvY2tldC5TdGF0ZSBiZWZvcmUgY2xvc2luZwotKiBUSU5LRVJQT1AtMjAzNCBSZWdpc3RlciBzeW5jaHJvbml6ZWRNYXAoKSB3aXRoIEdyeW8KLSogVElOS0VSUE9QLTIwMzUgR3JlbWxpbi1KYXZhU2NyaXB0OiBQYXNzIGN1c3RvbSBoZWFkZXJzIHRvIHRoZSB3ZWJzb2NrZXQgY29ubmVjdGlvbgotKiBUSU5LRVJQT1AtMjA0MCBJbXByb3ZlIGZsZXhpYmlsaXR5IG9mIEdyb292eVRyYW5zbGF0b3IgdG8gaGFuZGxlIGN1c3RvbSB0eXBlcwotKiBUSU5LRVJQT1AtMjA0NSBSZW1vdmUgbm9uLWluZHkgZ3Jvb3Z5IGRlcGVuZGVuY2llcwotKiBUSU5LRVJQT1AtMjA1NSBQcm92aWRlIHN1cHBvcnQgZm9yIHNwZWNpYWwgbnVtYmVyIGNhc2VzIGxpa2UgSW5maW5pdHkgaW4gR3JhcGhTT04KLSogVElOS0VSUE9QLTIwNTYgVXNlIE51bWJlckhlbHBlciBpbiBDb21wYXJlCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTEwLCAzLjIuMTAgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTItOV1dCiA9PT0gVGlua2VyUG9wIDMuMi45IChSZWxlYXNlIERhdGU6IE1heSA4LCAyMDE4KQogCi0qIEZpeGVkIGJ1ZyB3aGVyZSBwYXRoIGhpc3Rvcnkgd2FzIG5vdCBiZWluZyBwcmVzZXJ2ZWQgZm9yIGtleXMgaW4gbXV0YXRpb25zLgotKiBCdW1wZWQgdG8gaHR0cGNsaWVudCA0LjUuNS4KLSogQnVtcGVkIHRvIEdyb292eSAyLjQuMTUgLSBmaXhlcyBidWcgd2l0aCBgTGFtYmRhYCBjb25zdHJ1Y3Rpb24uCi0qIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIEdyYXBoU09OIGRlc2VyaWFsaXphdGlvbiBvZiBgQnl0ZWNvZGVgLgotKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiB0cmF2ZXJzYWwgY29uc3RydWN0aW9uLgotCi09PT09ICBCdWdzCi0KLSogVElOS0VSUE9QLTE5NDcgUGF0aCBoaXN0b3J5IGlzbid0IHByZXNlcnZlZCBmb3Iga2V5cyBpbiBtdXRhdGlvbnMKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMTc1NSBObyBkb2NzIGZvciBSZWZlcmVuY2VFbGVtZW50cwotKiBUSU5LRVJQT1AtMTkxMiBSZW1vdmUgTUQ1IGNoZWNrc3VtcwotKiBUSU5LRVJQT1AtMTkzNCBCdW1wIHRvIGxhdGVzdCB2ZXJzaW9uIG9mIGh0dHBjbGllbnQKLSogVElOS0VSUE9QLTE5MzYgUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgdG8gQnl0ZWNvZGUgZGVzZXJpYWxpemF0aW9uCi0qIFRJTktFUlBPUC0xOTQ0IEphdmFTY3JpcHQgR0xWOiBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGlzIG5vdCBleHBvcnRlZCBpbiB0aGUgcm9vdCBtb2R1bGUKLSogVElOS0VSUE9QLTE5NTAgVHJhdmVyc2FsIGNvbnN0cnVjdGlvbiBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMKLSogVElOS0VSUE9QLTE5NTMgQnVtcCB0byBHcm9vdnkgMi40LjE1CitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTksIDMuMi45IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0yLThdXQogPT09IFRpbmtlclBvcCAzLjIuOCAoUmVsZWFzZSBEYXRlOiBBcHJpbCAyLCAyMDE4KQogCi0qIEFkZGVkIGEgYExhbWJkYWAgY2xhc3MgdG8gR3JlbWxpbi5OZXQgdGhhdCBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgR3Jvb3Z5IGFuZCBQeXRob24gbGFtYmRhcyB3aXRoIEdyZW1saW4uTmV0LgotKiBFbnVtcyBhcmUgbm93IHJlcHJlc2VudGVkIGFzIGNsYXNzZXMgaW4gR3JlbWxpbi5OZXQgd2hpY2ggYWxsb3dzIHRvIHVzZSB0aGVtIGFzIGFyZ3VtZW50cyBpbiBtb3JlIHN0ZXBzLgotKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNC4xNC4KLSogQWRkZWQgYGNoZWNrQWRqYWNlbnRWZXJ0aWNlc2Agb3B0aW9uIHRvIGBTdWJncmFwaFN0cmF0ZWd5YC4KLSogTW9kaWZpZWQgYEdyZW1saW5Ec2xQcm9jZXNzb3JgIHNvIHRoYXQgaXQgZ2VuZXJhdGVkIHRoZSBgZ2V0QW5vbnltb3VzVHJhdmVyc2FsQ2xhc3MoKWAgbWV0aG9kIHRvIHJldHVybiB0aGUgRFNMIHZlcnNpb24gb2YgYF9fYC4KLSogQWRkZWQgdGhlICJLaXRjaGVuIFNpbmsiIHRlc3QgZGF0YSBzZXQuCi0qIEZpeGVkIGRlc2VyaWFsaXphdGlvbiBvZiBgUC5ub3QoKWAgZm9yIEdyYXBoU09OLgotKiBCdW1wZWQgdG8gSmFja3NvbiAyLjkuNC4KLSogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgYEphdmFUcmFuc2xhdG9yYCBieSBjYWNoaW5nIHJlZmxlY3RlZCBtZXRob2RzIHJlcXVpcmVkIGZvciB0cmF2ZXJzYWwgY29uc3RydWN0aW9uLgotKiBFbnN1cmUgdGhhdCBgUmVtb3RlU3RyYXRlZ3lgIGlzIGFwcGxpZWQgYmVmb3JlIGFsbCBvdGhlciBgRGVjb3JhdGlvblN0cmF0ZWd5YCBpbnN0YW5jZXMuCi0qIEFkZGVkIGBpZGxlQ29ubmVjdGlvblRpbWVvdXRgIGFuZCBga2VlcEFsaXZlSW50ZXJ2YWxgIHRvIEdyZW1saW4gU2VydmVyIHRoYXQgZW5hYmxlcyBhICJwaW5nIiBhbmQgYXV0by1jbG9zZSBmb3Igc2VlbWluZ2x5IGRlYWQgY2xpZW50cy4KLSogRml4ZWQgYSBidWcgd2hlcmUgbGFtYmRhcyBpbiBgZ3JlbWxpbi1weXRob25gIHdvdWxkIHRyaWdnZXIgYSBmYWlsdXJlIGlmIHN0ZXBzIHVzaW5nIHB5dGhvbi1vbmx5IHN5bWJvbHMgd2VyZSBwcmVzZW50IChzdWNoIGFzIGBhc18oKWApLgotKiBGaXhlZCBhIGJ1ZyBpbiBgTnVtYmVySGVscGVyYCB0aGF0IGxlZCB0byB3cm9uZyBtaW4vbWF4IHJlc3VsdHMgaWYgbnVtYmVycyBleGNlZWRlZCB0aGUgSW50ZWdlciBsaW1pdHMuCi0qIERlbGF5ZWQgc2V0dGluZyBvZiB0aGUgcmVxdWVzdCBpZGVudGlmaWVyIHVudGlsIGBSZXF1ZXN0TWVzc2FnZWAgY29uc3RydWN0aW9uIGJ5IHRoZSBidWlsZGVyLgotKiBgUmVmZXJlbmNlRWxlbWVudGAgYXZvaWRzIGBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbmAgaGFuZGxpbmcgaW4gY29uc3RydWN0aW9uIHRodXMgaW1wcm92aW5nIHBlcmZvcm1hbmNlLgotKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGZhaWxlZCBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb2YgcmVxdWVzdC9yZXNwb25zZSBtZXNzYWdlcy4KLSogRml4ZWQgaGFuZGxpbmcgb2YgYERpcmVjdGlvbi5CT1RIYCBpbiBgTWVzc2VuZ2VyYCBpbXBsZW1lbnRhdGlvbnMgdG8gcGFzcyB0aGUgbWVzc2FnZSB0byB0aGUgb3Bwb3NpdGUgc2lkZSBvZiB0aGUgYFN0YXJHcmFwaGAuCi0qIFJlbW92ZWQgaGFyZGNvZGVkIGV4cGVjdGF0aW9uIGluIG1ldHJpY3Mgc2VyaWFsaXphdGlvbiB0ZXN0IHN1aXRlIGFzIGRpZmZlcmVudCBwcm92aWRlcnMgbWF5IGhhdmUgZGlmZmVyZW50IG91dHB1dHMuCi0qIEFkZGVkIGBJbmRleGVkVHJhdmVyc2VyU2V0YCB3aGljaCBpbmRleGVzIG9uIHRoZSB2YWx1ZSBvZiBhIGBUcmF2ZXJzZXJgIHRodXMgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHdoZW4gdXNlZC4KLSogVXRpbGl6ZWQgYEluZGV4ZWRUcmF2ZXJzZXJTZXRgIGluIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCB0byBhdm9pZCBleHRyYSBpdGVyYXRpb24gd2hlbiBkb2luZyBgVmVydGV4YCBsb29rdXBzLgotKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjU2LkZpbmFsLgotKiBGaXhlZCAuTkVUIEdyYXBoU09OIHNlcmlhbGl6YXRpb24gb2YgYFAuV2l0aGluKClgIGFuZCBgUC53aXRob3V0KClgIHdoZW4gcGFzc2luZyBhIGBDb2xsZWN0aW9uYCBhcyBhbiBhcmd1bWVudC4KLSogRml4ZWQgYSBidWcgaW4gR3JlbWxpbiBDb25zb2xlIHdoaWNoIHByZXZlbnRlZCBoYW5kbGluZyBvZiBgZ3JlbWxpbi5zaGAgZmxhZ3MgdGhhdCBoYWQgYW4gIj0iIGJldHdlZW4gdGhlIGZsYWcgYW5kIGl0cyBhcmd1bWVudHMuCi0qIEZpeGVkIGJ1ZyB3aGVyZSBgU3BhcmtNZXNzZW5nZXJgIHdhcyBub3QgYXBwbHlpbmcgdGhlIGBlZGdlRnVuY3Rpb25gIGZyb20gYE1lc3NhZ2VTY29wZWAuCi0qIEZpeGVkIGEgYnVnIGluIGBDb21wdXRlckF3YXJlU3RlcGAgdGhhdCBkaWRuJ3QgaGFuZGxlIGByZXNldCgpYCBwcm9wZXJseSBhbmQgdGh1cyBvY2Nhc2lvbmFsbHkgcHJvZHVjZWQgc29tZSBleHRyYSB0cmF2ZXJzZXJzLgotKiBSZW1vdmVkIGBUcmF2ZXJzYWxQcmVkaWNhdGVgIGNsYXNzIGluIEdyZW1saW4uTmV0LiBJdCBpcyBub3cgaW5jbHVkZWQgaW4gdGhlIGBQYCBjbGFzcyBpbnN0ZWFkLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTA1MyBpbnN0YWxsZWQgcGx1Z2lucyBhcmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHdoZXJlIGdyZW1saW4uc2ggaXMgc3RhcnRlZAotKiBUSU5LRVJQT1AtMTUwOSBGYWlsaW5nIHRlc3QgY2FzZSBmb3IgdHJlZSBzZXJpYWxpemF0aW9uCi0qIFRJTktFUlBPUC0xNzM4IFByb3BlciBmdW5jdGlvbmluZyBvZiBHcmFwaFNPTlJlYWRlciBkZXBlbmRzIG9uIG9yZGVyIG9mIGVsZW1lbnRzIGluIFN0cmluZyByZXByZXNlbnRhdGlvbgotKiBUSU5LRVJQT1AtMTc1OCBSZW1vdGVTdHJhdGVneSBzaG91bGQgYmUgYmVmb3JlIGFsbCBvdGhlciBEZWNvcmF0aW9uU3RyYXRlZ2llcy4KLSogVElOS0VSUE9QLTE4NTUgVXBkYXRlIFJleHN0ZXIgbGlua3MKLSogVElOS0VSUE9QLTE4NTkgQ29tcGxleCBpbnN0YW5jZSBvZiBQIG5vdCBzZXJpYWxpemluZyB0byBieXRlY29kZSBwcm9wZXJseQotKiBUSU5LRVJQT1AtMTg2MCB2YWx1ZU1hcChUcnVlKSByZXN1bHQgaW4gZXJyb3IgaW4gZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTE4NjIgVGlua2VyR3JhcGggVmVydGV4UHJvZ3JhbSBtZXNzYWdlIHBhc3NpbmcgZG9lc24ndCB3b3JrIHByb3Blcmx5IHdoZW4gdXNpbmcgRGlyZWN0aW9uLkJPVEgKLSogVElOS0VSUE9QLTE4NjcgdW5pb24oKSBjYW4gcHJvZHVjZSBleHRyYSB0cmF2ZXJzZXJzCi0qIFRJTktFUlBPUC0xODcyIEFwcGx5IGVkZ2VGdW5jdGlvbiBpbiBTcGFya01lc3NlbmdlcgotKiBUSU5LRVJQT1AtMTg3MyBtaW4oKSBhbmQgbWF4KCkgd29yayBvbmx5IGluIHRoZSByYW5nZSBvZiBJbnRlZ2VyIHZhbHVlcwotKiBUSU5LRVJQT1AtMTg3NCBQIGRvZXMgbm90IGFwcGVhciB0byBiZSBzZXJpYWxpemVkIGNvbnNpc3RlbnRseSBpbiBHcmFwaFNPTgotKiBUSU5LRVJQT1AtMTg3OSBHcmVtbGluIENvbnNvbGUgZG9lcyBub3QgcmVzZXBlY3QgZXF1YWwgc2lnbiBmb3IgZmxhZyBhcmd1bWVudCBhc3NpZ25tZW50cwotKiBUSU5LRVJQT1AtMTg4MCBHcmVtbGluLk5FVCBTdHJvbmcgbmFtZSBzaWduYXR1cmUgY291bGQgbm90IGJlIHZlcmlmaWVkLiAoSFJFU1VMVDogMHg4MDEzMTA0NSkKLSogVElOS0VSUE9QLTE4ODMgZ3JlbWxpbnB5dGhvbiBmdXR1cmUgd2lsbCBuZXZlciByZXR1cm4KLSogVElOS0VSUE9QLTE4OTAgZ2V0QW5vbnltb3VzVHJhdmVyc2FsQ2xhc3MoKSBpcyBub3QgYmVpbmcgZ2VuZXJhdGVkIGZvciBKYXZhIERTTHMKLSogVElOS0VSUE9QLTE4OTEgU2VyaWFsaXphdGlvbiBvZiBQLm5vdCgpIGZvciBncmVtbGluLWphdmFzY3JpcHQKLSogVElOS0VSUE9QLTE4OTIgR0xWIHRlc3QgZmFpbHVyZXMgZm9yIC5ORVQKLSogVElOS0VSUE9QLTE4OTQgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyZDAgZmFpbHMgdG8gZGVzZXJpYWxpemUgdmFsaWQgUC5ub3QoKQotKiBUSU5LRVJQT1AtMTg5NiBncmVtbGluLXB5dGhvbiBsYW1iZGFzIGVycm9yCi0qIFRJTktFUlBPUC0xOTA3IEZpeCBmYWlsaW5nIEdMViB0ZXN0IGZvciB3aXRoU2FjaygpIGluIC5ORVQKLSogVElOS0VSUE9QLTE5MTcgZ3g6QmlnRGVjaW1hbCBzZXJpYWxpemF0aW9uIGJyb2tlbiBpbiBHcmVtbGluLk5ldCBvbiBzeXN0ZW1zIHdpdGggJywnIGFzIGRlY2ltYWwgc2VwYXJhdG9yCi0qIFRJTktFUlBPUC0xOTE4IFNjZW5hcmlvcyBmYWlsIGJlY2F1c2Ugb2Ygd3JvbmcgbnVtZXJpY2FsIHR5cGVzCi0qIFRJTktFUlBPUC0xOTE5IEdoZXJraW4gcnVubmVyIGRvZXNuJ3Qgd29yayB3aXRoIFAuQW5kKCkgYW5kIFAuT3IoKSBpbiBHcmVtbGluLk5ldAotKiBUSU5LRVJQT1AtMTkyMCBUZXN0cyBmYWlsIGJlY2F1c2UgUC5XaXRoaW4oKSBhcmd1bWVudHMgYXJlIHdyYXBwZWQgaW4gYW4gYXJyYXkgaW4gR3JlbWxpbi5OZXQKLSogVElOS0VSUE9QLTE5MjIgR2hlcmtpbiBmZWF0dXJlcyBmYWlsIHRoYXQgY29udGFpbiBQLm5vdCgpIGluIEdyZW1saW4uTmV0Ci0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTEzNTcgQ2VudHJhbGl0eSBSZWNpcGVzIHNob3VsZCBtZW50aW9uIHBhZ2VSYW5rIGFuZCBPTEFQLgotKiBUSU5LRVJQT1AtMTQ4OSBQcm92aWRlIGEgSmF2YXNjcmlwdCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQKLSogVElOS0VSUE9QLTE1ODYgU3ViZ3JhcGhTdHJhdGVneSBpbiBPTEFQCi0qIFRJTktFUlBPUC0xNzI2IFN1cHBvcnQgV2ViU29ja2V0cyBwaW5nL3Bvbmcga2VlcC1hbGl2ZSBpbiBHcmVtbGluIHNlcnZlcgotKiBUSU5LRVJQT1AtMTg0MiBpdGVyYXRlKCkgbWlzc2luZyBpbiB0ZXJtaW5hbCBzdGVwcyBkb2N1bWVudGF0aW9uCi0qIFRJTktFUlBPUC0xODUwIFJhbmdlIHN0ZXAgaGFzIHVuZG9jdW1lbnRlZCBzcGVjaWFsIHZhbHVlcwotKiBUSU5LRVJQT1AtMTg1NCBTdXBwb3J0IGxhbWJkYXMgaW4gR3JlbWxpbi5OZXQKLSogVElOS0VSUE9QLTE4NTcgR0xWIHRlc3Qgc3VpdGUgY29uc2lzdGVuY3kgYW5kIGNvbXBsZXRlbmVzcwotKiBUSU5LRVJQT1AtMTg2MyBEZWxheWluZyB0aGUgc2V0dGluZyBvZiByZXF1ZXN0SWQgdGlsbCB0aGUgUmVxdWVzdE1lc3NhZ2UgaW5zdGFudGlhdGlvbiB0aW1lCi0qIFRJTktFUlBPUC0xODY4IFN1cHBvcnQgaW5qZWN0IHNvdXJjZSBzdGVwIGluIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0xODcwIG5eMiBzeW5jaHJvbmlvdXMgb3BlcmF0aW9uIGluIE9MQVAgV29ya2VyRXhlY3V0b3IuZXhlY3V0ZSgpIG1ldGhvZAotKiBUSU5LRVJQT1AtMTg3NyBBZGQgbmV3IGdyYXBoIGRhdGEgZm9yIHNwZWNpYWxpemVkIHRlc3Rpbmcgc2NlbmFyaW9zCi0qIFRJTktFUlBPUC0xODg0IEJ1bXAgdG8gTmV0dHkgNC4wLjU2LkZpbmFsCi0qIFRJTktFUlBPUC0xODg1IFZhcmlvdXMgR3JlbWxpbi5OZXQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzCi0qIFRJTktFUlBPUC0xOTAxIEVuYWJsZSB1c2FnZSBvZiBlbnVtcyBpbiBtb3JlIHN0ZXBzIGluIEdyZW1saW4uTmV0Ci0qIFRJTktFUlBPUC0xOTA4IEJ1bXAgdG8gR3Jvb3Z5IDIuNC4xNAotKiBUSU5LRVJQT1AtMTkxMSBSZWZhY3RvciBKYXZhVHJhbnNsYXRvciB0byBjYWNoZSBhbGwgcmVmbGVjdGl2ZSBjYWxscworUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYyNyZWxlYXNlLTMtMi04LCAzLjIuOCBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtMi03XV0KID09PSBUaW5rZXJQb3AgMy4yLjcgKFJlbGVhc2UgRGF0ZTogRGVjZW1iZXIgMTcsIDIwMTcpCiAKLSogQWRkZWQgY29yZSBHcmFwaFNPTiBjbGFzc2VzIGZvciBHcmVtbGluLVB5dGhvbjogYFVVSURgLCBgRGF0ZWAsIGFuZCBgVGltZXN0YW1wYC4KLSogRG9jdW1lbnRlZCB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBjb25zdHJ1Y3RpbmcgRFNMcyB3aXRoIEdyZW1saW4uTmV0LgotKiBQcm92aWRlZCBhIG1ldGhvZCB0byBjb25maWd1cmUgZGV0YWNobWVudCBvcHRpb25zIHdpdGggYEV2ZW50U3RyYXRlZ3lgLgotKiBGaXhlZCBhIHJhY2UgY29uZGl0aW9uIGluIGBUaW5rZXJJbmRleGAuCi0qIEZpeGVkIGJ1ZyBpbiBoYW5kbGluZyBvZiB0aGUgbG9uZyBmb3JtcyBvZiBgLWVgIGFuZCBgLWlgIChgLS1leGVjdXRlYCBhbmQgYC0taW50ZXJhY3RpdmVgIHJlc3BlY3RpdmVseSkgZm9yIEdyZW1saW4gQ29uc29sZS4KLSogRml4ZWQgYnVnIGluIGBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5YCB3aGVyZSB0cmF2ZXJzYWxzIHVzaW5nIGBMYW1iZGFgIHNjcmlwdHMgd2VyZW4ndCBjYXVzaW5nIHRoZSBzdHJhdGVneSB0byB0cmlnZ2VyLgotKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGJ5dGVjb2RlIGRlc2VyaWFsaXphdGlvbiBlcnJvcnMgaW4gR3JlbWxpbiBTZXJ2ZXIuCi0qIEZpeGVkIGFuIGBBcnJheU91dE9mQm91bmRzRXhjZXB0aW9uYCBpbiBgaGFzSWQoKWAgZm9yIHRoZSByYXJlIHNpdHVhdGlvbiB3aGVuIHRoZSBwcm92aWRlZCBjb2xsZWN0aW9uIGlzIGVtcHR5LgotKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjUzCi0qIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCBgcHJvZmlsZSgpYCBub3cgYWNjb3VudHMgZm9yIHdvcmtlciBpdGVyYXRpb24gaW4gYEdyYXBoQ29tcHV0ZXJgIE9MQVAuCi0qIFJldHVybmVkIHRoZSBgQnVpbGRlcmAgaW5zdGFuY2UgZnJvbSB0aGUgYERldGFjaGVkRWRnZS5CdWlsZGVyYCBtZXRob2RzIG9mIGBzZXRPdXRFYCBhbmQgYHNldE91dFZgLgotKiBBZGRlZCB0ZXN0IGZyYW1ld29yayBmb3IgR0xWcy4KLSogRml4ZWQgYnVnIGluIGBUcmF2ZXJzYWxIZWxwZXIucmVwbGFjZVN0ZXAoKWAgd2hlcmUgdGhlIHN0ZXAgYmVpbmcgcmVwbGFjZWQgbmVlZGVkIHRvIGJlIHJlbW92ZWQgcHJpb3IgdG8gdGhlIG5ldyBvbmUgYmVpbmcgYWRkZWQuCi0qIEFkZGVkIGFsaWFzIHN1cHBvcnQgaW4gdGhlIC5ORVQgYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gLgotKiBBZGRlZCBhIHRlc3QgZm9yIHNlbGYtZWRnZXMgYW5kIGZpeGVkIGBOZW80alZlcnRleGAgdG8gcHJvdmlkZWQgcmVwZWF0ZWQgc2VsZi1lZGdlcyBvbiBgQk9USGAuCi0qIEJldHRlciByZXNwZWN0ZWQgcGVybWlzc2lvbnMgb24gdGhlIGBwbHVnaW5zLnR4dGAgZmlsZSBhbmQgcHJldmVudGVkIHdyaXRpbmcgaWYgbWFya2VkIGFzIHJlYWQtb25seS4KLSogQWRkZWQgZ2V0dGVycyBmb3IgdGhlIGxhbWJkYXMgaGVsZCBieSBgTGFtYmRhQ29sbGVjdGluZ0JhcnJpZXJTdGVwYCwgYExhbWJkYUZsYXRNYXBTdGVwYCBhbmQgYExhbWJkYVNpZGVFZmZlY3RTdGVwYC4KLSogRml4ZWQgYW4gb2xkIGhhY2sgaW4gYEdyb292eVRyYW5zbGF0b3JgIGFuZCBgUHl0aG9uVHJhbnNsYXRvcmAgd2hlcmUgYEVsZW1lbnRzYCB3ZXJlIGJlaW5nIG1hcHBlZCB0byB0aGVpciBpZCBvbmx5LgotKiBGaXhlZCBhbiAiYXR0YWNoZW1lbnQiLWJ1ZyBpbiBgSW5qZWN0U3RlcGAgd2l0aCBhIHNvbHV0aW9uIGdlbmVyYWxpemVkIHRvIGBTdGFydFN0ZXBgLgotKiBUcnVuY2F0ZSB0aGUgc2NyaXB0IGluIGVycm9yIGxvZ3MgYW5kIGVycm9yIHJldHVybiBtZXNzYWdlcyBmb3IgIk1ldGhvZCBjb2RlIHRvbyBsYXJnZSIgZXJyb3JzIGluIEdyZW1saW4gU2VydmVyLgotKiBGaXhlZCBhIGJ1ZyBpbiBgTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneWAgd2hlcmUgaXQgd2FzIHRvbyBlYWdlciB0byBjb25zaWRlciBhIHN0ZXAgYXMgYmVpbmcgYSBsYW1iZGEgc3RlcC4KLSogYFJlZmVyZW5jZVZlcnRleGAgd2FzIG1pc3NpbmcgaXRzIGBsYWJlbCgpYCBzdHJpbmcuIGBSZWZlcmVuY2VFbGVtZW50YCBub3cgc3VwcG9ydHMgYWxsIGxhYmVsIGhhbmRsaW5nLgotKiBGaXhlZCBhIGJ1ZyB3aGVyZSBieXRlY29kZSBjb250YWluaW5nIGxhbWJkYXMgd291bGQgcmFuZG9tbHkgc2VsZWN0IGEgdHJhdmVyc2FsIHNvdXJjZSBmcm9tIGJpbmRpbmdzLgotKiBEZXByZWNhdGVkIGBHcmVtbGluU2NyaXB0RW5naW5lLmV2YWwoKWAgbWV0aG9kcyBhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIG5ldyBvdmVybG9hZHMgdGhhdCBpbmNsdWRlIHRoZSBzcGVjaWZpYyBgVHJhdmVyc2FsU291cmNlYCB0byBiaW5kIHRvLgotKiBBZGRlZCBgR3JhcGhIZWxwZXIuY2xvbmVFbGVtZW50cyhHcmFwaCBvcmlnaW5hbCwgR3JhcGggY2xvbmUpYCB0byB0aGUgYGdyZW1saW4tdGVzdGAgbW9kdWxlIHRvIHF1aWNrbHkgY2xvbmUgYSBncmFwaC4KLSogQWRkZWQgYEdyZW1saW5Ec2wuQW5vbnltb3VzTWV0aG9kYCBhbm5vdGF0aW9uIHRvIGhlbHAgcHJvdmlkZSBleHBsaWNpdCB0eXBlcyBmb3IgYW5vbnltb3VzIG1ldGhvZHMgd2hlbiB0aGUgdHlwZXMgYXJlIG5vdCBlYXNpbHkgaW5mZXJyZWQuCi0qIEJ1bXBlZCB0byBHTWF2ZW5QbHVzIDEuNi4KLSogQWRkZWQgYmV0dGVyIGVycm9yIG1lc3NhZ2UgZm9yIGlsbGVnYWwgdXNlIG9mIGByZXBlYXQoKWAtc3RlcC4KLSogRml4ZWQgYSBidWcgaW4gYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHRoYXQgbGVkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3JzIHdoZW4gcHJlZGljYXRlcyB3ZXJlIHVzZWQgd2l0aCBmbG9hdGluZyBwb2ludCBudW1iZXJzLgotKiBCdW1wZWQgdG8gSmFja3NvbiAyLjguMTAuCi0qIERlcHJlY2F0ZWQgYE11dGF0aW9uTGlzdGVuZXIudmVydGV4UHJvcGVydHlDaGFuZ2VkKClgIG1ldGhvZCB0aGF0IGRpZCBub3QgdXNlIGBWZXJ0ZXhQcm9wZXJ0eWAgYW5kIGFkZGVkIGEgbmV3IG1ldGhvZCB0aGF0IGRvZXMuCi0qIEFkZGVkIGFuIGBFbWJlZGRlZFJlbW90ZUNvbm5lY3Rpb25gIHNvIHRoYXQgaXQncyBwb3NzaWJsZSB0byBtaW1pYyBhIHJlbW90ZSBjb25uZWN0aW9uIHdpdGhpbiB0aGUgc2FtZSBKVk0uCi0qIFN1cHBvcnRlZCBpbnRlcnJ1cHRpb24gZm9yIHJlbW90ZSB0cmF2ZXJzYWxzLgotKiBBbGxvdyB0aGUgYDpyZW1vdGVgIGNvbW1hbmQgdG8gYWNjZXB0IGEgYENsdXN0ZXJgIG9iamVjdCBkZWZpbmVkIGluIHRoZSBjb25zb2xlIGl0c2VsZi4KLSogVGhlIENvbnNvbGUncyBgcGx1Z2luLnR4dGAgZmlsZSBpcyBvbmx5IHVwZGF0ZWQgaWYgdGhlcmUgd2VyZSBtYW51YWxseSB1bmluc3RhbGxlZCBwbHVnaW5zLgotKiBGaXhlZCBhIGJ1ZyBpbiBgTWF0Y2hTdGVwYCB3aGVyZSBtaWQtdHJhdmVyc2FsIGB3aGVyZSgpYCB2YXJpYWJsZXMgd2VyZSBub3QgYmVpbmcgY29uc2lkZXJlZCBpbiBzdGFydC1zY29wZS4KLSogR2VuZXJhbGl6ZWQgYE1hdGNoU3RlcGAgdG8gbG9jYWxseSBjb21wdXRlIGFsbCBjbGF1c2VzIHdpdGggYmFycmllcnMgKG5vdCBqdXN0IHJlZHVjaW5nIGJhcnJpZXJzKS4KLSogRW5zdXJlZCB0aGF0IHBsdWdpbnMgd2VyZSBhcHBsaWVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgY29uZmlndXJlZC4KLSogRml4ZWQgYSBidWcgaW4gYE5lbzRqR3JlbWxpblBsdWdpbmAgdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbSBsb2FkaW5nIHByb3Blcmx5IGluIHRoZSBgR3JlbWxpblB5dGhvblNjcmlwdEVuZ2luZWAuCi0qIEZpeGVkIGEgYnVnIGluIGBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5YCB3aGVyZSBjaGlsZCB0cmF2ZXJzYWxzIHdlcmUgYmVpbmcgYW5hbHl6ZWQgcHJpb3IgdG8gY29tcGlsYXRpb24uCi0qIEZpeGVkIGEgYnVnIHRoYXQgcHJldmVudGVkIEdyZW1saW4gZnJvbSBvcmRlcmluZyBsaXN0cyBhbmQgc3RyZWFtcyBtYWRlIG9mIG1peGVkIG51bWJlciB0eXBlcy4KLSogRml4ZWQgYSBidWcgd2hlcmUgYGtlZXBMYWJlbHNgIHdlcmUgYmVpbmcgY29ycnVwdGVkIGJlY2F1c2UgYSBkZWZlbnNpdmUgY29weSB3YXMgbm90IGJlaW5nIG1hZGUgd2hlbiB0aGV5IHdlcmUgYmVpbmcgc2V0IGJ5IGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YC4KLSogQ2FuY2VsIHNjcmlwdCBldmFsdWF0aW9uIHRpbWVvdXQgaW4gYEdyZW1saW5FeGVjdXRvcmAgd2hlbiBzY3JpcHQgZXZhbHVhdGlvbiBmaW5pc2hlZC4KLSogQWRkZWQgYSByZWNpcGUgZm9yIE9MQVAgdHJhdmVyc2FscyB3aXRoIFNwYXJrIG9uIFlBUk4uCi0qIEFkZGVkIGBzcGFyay15YXJuYCBkZXBlbmRlbmNpZXMgdG8gdGhlIG1hbmlmZXN0IG9mIGBzcGFyay1ncmVtbGluYC4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTE2NTAgUGF0aFJldHJhY3Rpb25TdHJhdGVneSBtYWtlcyBNYXRjaCBzdGVwcyB1bnNvbHZhYmxlCi0qIFRJTktFUlBPUC0xNzMxIERvY2tlciBidWlsZCBkb2VzIG5vdCBhcHBlYXIgdG8gd29yayBmb3IgZ3JlbWxpbi1kb3RuZXQKLSogVElOS0VSUE9QLTE3NDUgR3JlbWxpbiAuTkVUOiBVc2UgRGF0ZVRpbWVPZmZzZXQgaW5zdGVhZCBvZiBEYXRlVGltZSB0byByZXByZXNlbnQgZzpEYXRlCi0qIFRJTktFUlBPUC0xNzUzIE9yZGVyU3RlcCBub3QgYWJsZSB0byBvcmRlciBieSBub24taW50ZWdlciBudW1iZXJzCi0qIFRJTktFUlBPUC0xNzYwIE9MQVAgY29tcGlsYXRpb24gZmFpbGluZyBhcm91bmQgQ29ubmVjdGl2ZVN0cmF0ZWd5Ci0qIFRJTktFUlBPUC0xNzYxIEdyZW1saW5FeGVjdXRvcjogVGltZW91dCBmdXR1cmUgbm90IGNhbmNlbGxlZCBvbiBzdWNjZXNzZnVsIHNjcmlwdCBldmFsdWF0aW9uCi0qIFRJTktFUlBPUC0xNzYyIE1ha2UgTWF0Y2hTdGVwIGFuYWx5emUgbWlkLWNsYXVzZSB2YXJpYWJsZXMgZm9yIGV4ZWN1dGluZyBvcmRlcmluZyBwdXJwb3Nlcy4KLSogVElOS0VSUE9QLTE3NjQgR2VuZXJhbGl6ZSBNYXRjaFN0ZXAgdG8gbG9jYWxpemUgYWxsIGJhcnJpZXJzLCBub3QganVzdCByZWR1Y2luZyBiYXJyaWVycy4KLSogVElOS0VSUE9QLTE3NjYgR3JlbWxpbi5OZXQ6IENsb3NlZCBjb25uZWN0aW9ucyBzaG91bGQgbm90IGJlIHJlLXVzZWQKLSogVElOS0VSUE9QLTE3ODIgUmFuZ2VCeUlzQ291bnRTdHJhdGVneSBkb2Vzbid0IGhhbmRsZSBmbG9hdGluZyBwb2ludCBudW1iZXJzIHByb3Blcmx5Ci0qIFRJTktFUlBPUC0xNzg5IFJlZmVyZW5jZSBlbGVtZW50cyBzaG91bGQgYmUgcmVwcmVzZW50ZWQgYnkgaWQgYW5kIGxhYmVsICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTc5MCBHcmFwaFNPTiAzLjAgZG9jIHVwZGF0ZXMKLSogVElOS0VSUE9QLTE3OTEgR3JlbWxpbkRzbCBjdXN0b20gc3RlcCB3aXRoIGdlbmVyaWMgZW5kIHR5cGUgcHJvZHVjZXMgaW52YWxpZCBjb2RlIGluIF9fLmphdmEKLSogVElOS0VSUE9QLTE3OTIgUmFuZG9tIFRyYXZlcnNhbFNvdXJjZSBTZWxlY3Rpb24gaW4gR3JlbWxpblNjcmlwdEVuZ2luZQotKiBUSU5LRVJQT1AtMTc5NSBHZXR0aW5nIExhbWJkYSBjb21wYXJhdG9yIG1lc3NhZ2UgZm9yIC5wcm9maWxlKCkgc3RlcAotKiBUSU5LRVJQT1AtMTc5NiBEcml2ZXIgY29ubmVjdGlvbiBwb29sIFNTTCBwcm9wZXJ0aWVzIG1pc3NpbmcKLSogVElOS0VSUE9QLTE3OTcgTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSBhbmQgTGFtYmRhTWFwU3RlcCBpbiBgYnkoKWAtbW9kdWxhdGlvbi4KLSogVElOS0VSUE9QLTE3OTggTXV0YXRpb25MaXN0ZW5lci52ZXJ0ZXhQcm9wZXJ0eUNoYW5nZWQgb2xkVmFsdWUgc2hvdWxkIGJlIGEgVmVydGV4UHJvcGVydHkKLSogVElOS0VSUE9QLTE4MDEgT0xBUCBwcm9maWxlKCkgc3RlcCByZXR1cm4gaW5jb3JyZWN0IHRpbWluZwotKiBUSU5LRVJQT1AtMTgwMiBoYXNJZCgpIGZhaWxzIGZvciBlbXB0eSBjb2xsZWN0aW9ucwotKiBUSU5LRVJQT1AtMTgwMyBpbmplY3QoKSBkb2Vzbid0IHJlLWF0dGFjaCB3aXRoIHJlbW90ZSB0cmF2ZXJzYWxzCi0qIFRJTktFUlBPUC0xODE5IGRvY3VtZW50YXRpb24gcXVlcnkgYW5kIGRlc2NyaXB0aW9uIG1pc21hdGNoCi0qIFRJTktFUlBPUC0xODIxIENvbnNpc3RlbnQgYmVoYXZpb3Igb2Ygc2VsZi1yZWZlcmVuY2luZyBlZGdlcwotKiBUSU5LRVJQT1AtMTgyNSBHcmVtbGluIC5ORVQ6IENvbnN0YW50KCkgc3RlcCBoYXMgaW5jb3JyZWN0IHBhcmFtZXRlciBkZWZpbmVkCi0qIFRJTktFUlBPUC0xODMwIFJhY2UgY29uZGl0aW9uIGluIFRpbmtlcmdyYXBoIGluZGV4IGNyZWF0aW9uCi0qIFRJTktFUlBPUC0xODMyIFRyYXZlcnNhbEhlbHBlci5yZXBsYWNlU3RlcCBzZXRzIHByZXZpb3VzU3RlcCB0byB0aGUgd3Jvbmcgc3RlcAotKiBUSU5LRVJQT1AtMTg0NiBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5IG5vdCB0cmlnZ2VyaW5nIGZvciBMYW1iZGEgc2NyaXB0cwotKiBUSU5LRVJQT1AtMTg0OCBGaXggZzpEYXRlIGFzc2VydGlvbiBpbiBweXRob24gdGVzdHMKLSogVElOS0VSUE9QLTE4NTEgR3JlbWxpbiBsb25nIG9wdGlvbnMgZm9yIC1lIGFuZCAtaSBhcmUgbm90IHdvcmtpbmcgcHJvcGVybHkKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMTY2MSBEb2NrZXItYnVpbHQgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBhbHdheXMgcG9pbnQgbG9jYWxseQotKiBUSU5LRVJQT1AtMTcyNSBEb3ROZXQgR0xWOiBNYWtlIHRyYXZlcnNhbCBnZW5lcmF0aW9uIGRldGVybWluaXN0aWMKLSogVElOS0VSUE9QLTE3MzQgRFNMIGZvciBHcmVtbGluIC5ORVQKLSogVElOS0VSUE9QLTE3NDYgQmV0dGVyIGVycm9yIG1lc3NhZ2Ugb24gd3Jvbmcgb3JkZXJpbmcgb2YgZW1pdCgpL3VudGlsKCkvaGFzKCkKLSogVElOS0VSUE9QLTE3NTIgR3JlbWxpbi5OZXQ6IEdlbmVyYXRlIGNvbXBsZXRlbHkgdHlwZS1zYWZlIG1ldGhvZHMKLSogVElOS0VSUE9QLTE3NTYgUHJvdmlkZSBhIHdheSB0byBlYXNpbHkgbW9jayBhIFJlbW90ZUNvbm5lY3Rpb24gZm9yIHRlc3RzCi0qIFRJTktFUlBPUC0xNzU5IEltcHJvdmUgaGFzaGNvZGUgYW5kIGVxdWFscyBmb3IgVHJhdmVyc2VyIGltcGxlbWVudGF0aW9ucwotKiBUSU5LRVJQT1AtMTc2OCBCdW1wIHRvIEphY2tzb24gMi44LjEwCi0qIFRJTktFUlBPUC0xNzcwIFJlbW90ZSB0cmF2ZXJzYWwgdGltZW91dAotKiBUSU5LRVJQT1AtMTc3MSBncmVtbGluLmJhdCBkb2Vzbid0IHN1cHBvcnQgcGF0aHMgY29udGFpbmluZyBzcGFjZXMKLSogVElOS0VSUE9QLTE3NzkgQnVtcCB0byBHTWF2ZW5QbHVzIDEuNgotKiBUSU5LRVJQT1AtMTc4NCBHcmVtbGluIExhbmd1YWdlIFRlc3QgU3VpdGUKLSogVElOS0VSUE9QLTE3ODUgR3JlbWxpbi5OZXQgc2hvdWxkIGJlIHN0cm9uZy1uYW1lIHNpZ25lZAotKiBUSU5LRVJQT1AtMTc4NiBSZWNpcGUgYW5kIG1pc3NpbmcgbWFuaWZlc3QgaXRlbXMgZm9yIFNwYXJrIG9uIFlhcm4KLSogVElOS0VSUE9QLTE3ODcgQWxsb3cgOnJlbW90ZSBjb21tYW5kIHRvIGFjY2VwdCBhIHVzZXIgZGVmaW5lZCBDbHVzdGVyIGluc3RhbmNlCi0qIFRJTktFUlBPUC0xODA2IENvbnNpc3RlbnRseSB1c2UgR3JlbWxpbi5OZXQgaW5zdGVhZCBvZiBHcmVtbGluLURvdE5ldAotKiBUSU5LRVJQT1AtMTgwNyBHcmVtbGluLVB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgR3JhcGhTT04gdHlwZXMgZzpEYXRlLCBnOlRpbWVzdGFtcCBhbmQgZzpVVUlECi0qIFRJTktFUlBPUC0xODA4IEFkZCBhYmlsaXR5IHRvIGdldCB0aGUgY29uc3VtZXIgaW4gTGFtYmRhU2lkZUVmZmVjdFN0ZXAKLSogVElOS0VSUE9QLTE4MTEgSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgZm9yIHNlcmlhbGl6YXRpb24gZXJyb3JzIGJldHdlZW4gZ3JlbWxpbi1weXRob24gYW5kIGdyZW1saW4tc2VydmVyCi0qIFRJTktFUlBPUC0xODEyIFByb2ZpbGVUZXN0IGFzc3VtZXMgdGhhdCBncmFwaCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBub3QgYWRkIHRoZWlyIG93biBzdGVwcwotKiBUSU5LRVJQT1AtMTgxMyBTdWJncmFwaCBzdGVwIHJlcXVpcmVzIHRoZSBncmFwaCBBUEkKLSogVElOS0VSUE9QLTE4MTQgU29tZSBwcm9jZXNzIHRlc3RzIHJlcXVpcmUgdGhlIGdyYXBoIEFQSQotKiBUSU5LRVJQT1AtMTgyMCBJbmNsdWRlIC5ORVQgR0xWIHRlc3RzIG9uIFRyYXZpc0NJCi0qIFRJTktFUlBPUC0xODI0IFVwZGF0ZSBuZXR0eSB2ZXJzaW9uIHRvIDQuMC41MgotKiBUSU5LRVJQT1AtMTgyNyBHcmVtbGluIC5ORVQ6IFRlc3QgU3VpdGUgUnVubmVyCi0qIFRJTktFUlBPUC0xODI5IEltcHJvdmUgZmxleGliaWxpdHkgb2YgZGV0YWNobWVudCBmb3IgRXZlbnRTdHJhdGVneQotKiBUSU5LRVJQT1AtMTgzMyBEZXRhY2hlZEVkZ2UuQnVpbGRlciNzZXRJblYgYW5kIHNldE91dFYgZG9lc24ndCByZXR1cm4gdGhlIGJ1aWxkZXIKLSogVElOS0VSUE9QLTE4MzUgQnVtcCBOZXR0eSA0LjAuNTMKLSogVElOS0VSUE9QLTE4MzcgR3JlbWxpbiAuTkVUOiBQcm92aWRlIHR5cGUgY29lcmNpb24gYmV0d2VlbiBJRGljdGlvbmFyeTxLLCBWPiBpbnN0YW5jZXMKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4yLnguYXNjaWlkb2MjcmVsZWFzZS0zLTItNywgMy4yLjcgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTItNl1dCiA9PT0gVGlua2VyUG9wIDMuMi42IChSZWxlYXNlIERhdGU6IEF1Z3VzdCAyMSwgMjAxNykKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTEtOCwgMy4xLjg+Pi4KLQotKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjUwCi0qIFJlZ2lzdGVyZWQgYEhhc2hNYXAkVHJlZU5vZGVgIHRvIEdyeW8uCi0qIEZpeGVkIGEgbGFtYmRhLWxlYWsgaW4gYFNhY2tWYWx1ZVN0ZXBgIHdoZXJlIGBCaUZ1bmN0aW9uYCBtdXN0IGJlIHRlc3RlZCBmb3IgdHJ1ZSBsYW1iZGEgc3RhdHVzLgotKiBGaXhlZCBhIGJ1ZyBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAgdGhhdCBicm9rZSBhbnkgYENvbm5lY3RpdmVTdGVwYCB0aGF0IGluY2x1ZGVkIGEgY2hpbGQgdHJhdmVyc2FsIHdpdGggYW4gb3B0aW1pemFibGUgcGF0dGVybi4KLSogQWxsb3dlZCBhY2Nlc3MgdG8gYEluamVjdFN0ZXAuaW5qZWN0aW9uc2AgZm9yIGBUcmF2ZXJzYWxTdHJhdGVneWAgYW5hbHlzaXMuCi0qIEV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgcmVzdWx0IGl0ZXJhdGlvbiBpbiBHcmVtbGluIFNlcnZlciB3aWxsIG5vdyByZXR1cm4gYFNDUklQVF9FVkFMVUFUSU9OX0VYQ0VQVElPTmAgcmF0aGVyIHRoYW4gYFNFUlZFUl9FUlJPUmAuCi0qIGBBZGRFZGdlU3RlcGAgYXR0YWNoZXMgZGV0YWNoZWQgdmVydGljZXMgcHJpb3IgdG8gZWRnZSBjcmVhdGlvbi4KLSogQWRkZWQgZ3JhcGggZWxlbWVudCBHcmFwaFNPTiBzZXJpYWxpemVycyBpbiBHcmVtbGluLVB5dGhvbi4KLSogSW5pdGlhbGl6YXRpb24gc2NyaXB0cyBmb3IgR3JlbWxpbiBTZXJ2ZXIgd2lsbCBub3QgdGltZW91dC4KLSogQWRkZWQgR3JlbWxpbi5OZXQuCi0qIGBQcm9maWxlVGVzdGAgaXMgbm93IGxlc3Mgc3RyaW5nZW50IGFib3V0IGFzc2VydGlvbnMgd2hpY2ggd2lsbCByZWR1Y2UgYnVyZGVucyBvbiBwcm92aWRlcnMuCi0qIGBHcmVtbGluRXhlY3V0b3JgIGJlZ2lucyB0aW1lb3V0IG9mIHNjcmlwdCBldmFsdWF0aW9uIGF0IHRoZSB0aW1lIHRoZSBzY3JpcHQgd2FzIHN1Ym1pdHRlZCBhbmQgbm90IGZyb20gdGhlIHRpbWUgaXQgYmVnYW4gZXZhbHVhdGlvbi4KLSogQWRkZWQgR3JlbWxpbi5OZXQuCi0qIGBSZWZlcmVuY2VGYWN0b3J5YCBhbmQgYERldGFjaGVkRmFjdG9yeWAgbm93IGRldGFjaCBlbGVtZW50cyBpbiBjb2xsZWN0aW9ucyBhY2NvcmRpbmdseS4KLSogRGVwcmVjYXRlZCBgR3J5b0xpdGVNZXNzYWdlU2VyaWFsaXplclYxZDBgIGluIGZhdm9yIG9mIGBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneWAuCi0qIERlcHJlY2F0ZWQgdGhlIGB1c2VNYXBwZXJGcm9tR3JhcGhgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBHcmVtbGluIFNlcnZlciBzZXJpYWxpemVycy4KLSogYEphdmFUcmFuc2xhdG9yYCBpcyBub3cgc21hcnQgYWJvdXQgaGFuZGxpbmcgYEJ1bGtTZXRgIGFuZCBgVHJlZWAuCi0qIEFkZGVkIGFubm90YXRpb25zIHRvIHRoZSB0cmF2ZXJzYWwgbWV0cmljcyBwcmV0dHkgcHJpbnQuCi0qIGBFZGdlT3RoZXJWZXJ0ZXhTdGVwYCBpcyBubyBsb25nZXIgZmluYWwgYW5kIGNhbiBiZSBleHRlbmRlZCBieSBwcm92aWRlcnMuCi0qIGBFZGdlVmVydGV4U3RlcGAgaXMgbm8gbG9uZ2VyIGZpbmFsIGFuZCBjYW4gYmUgZXh0ZW5kZWQgYnkgcHJvdmlkZXJzLgotKiBEZXByZWNhdGVkIGBUcmFuc2FjdGlvbi5zdWJtaXQoRnVuY3Rpb24pYC4KLSogRml4ZWQgYEhBRE9PUF9HUkVNTElOX0xJQlNgIHBhcnNpbmcgZm9yIFdpbmRvd3MuCi0qIEltcHJvdmVkIEdyYXBoU09OIHNlcmlhbGl6YXRpb24gcGVyZm9ybWFuY2UgYXJvdW5kIGBWZXJ0ZXhQcm9wZXJ0eWAuCi0qIENoYW5nZWQgc29tZSB0ZXN0cyBpbiBgRXZlbnRTdHJhdGVneVByb2Nlc3NUZXN0YCB3aGljaCB3ZXJlIGVuZm9yY2luZyBzb21lIHVuaW50ZW5kZWQgc2VtYW50aWNzIGFyb3VuZCB0cmFuc2FjdGlvbiBzdGF0ZS4KLSogQWRkZWQgV3NBbmRIdHRwQ2hhbm5lbGl6ZXIgYW5kIFNhc2xBbmRIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXIgdG8gYmUgYWxsb3cgZm9yIHNlcnZpY2luZyBIdHRwIGFuZCBXZWJzb2NrZXQgcmVxdWVzdHMgdG8gdGhlIHNhbWUgc2VydmVyCi0qIEFkZGVkIGRlZXAgY29weSBvZiBgQnl0ZWNvZGVgIHRvIGBEZWZhdWx0VHJhdmVyc2FsLmNsb25lKClgLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTM4NSBSZWZhY3RvciBQcm9maWxpbmcgdGVzdCBjYXNlcwotKiBUSU5LRVJQT1AtMTY3OSBEZXRhY2hlZCBzaWRlLWVmZmVjdHMgYXJlbid0IGF0dGFjaGVkIHdoZW4gcmVtb3RlZAotKiBUSU5LRVJQT1AtMTY4MyBBYnN0cmFjdEhhZG9vcEdyYXBoQ29tcHV0ZXIgb24gV2luZG93cwotKiBUSU5LRVJQT1AtMTY5MSBTb21lIEV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdCBhc3N1bWUgZWxlbWVudCBzdGF0ZSBpcyBzeW5jZWQgaW4gbWVtb3J5Ci0qIFRJTktFUlBPUC0xNzA0IFhYWFRyYW5zbGF0b3JzIGFyZSBub3QgYmVpbmcgcmVzcGVjdGl2ZSBvZiBCdWxrU2V0IGFuZCBUcmVlLgotKiBUSU5LRVJQT1AtMTcyNyBCeXRlY29kZSBvYmplY3Qgc2hhbGxvdyBjb3BpZWQgd2hlbiB0cmF2ZXJzYWxzIGFyZSBjbG9uZWQKLSogVElOS0VSUE9QLTE3NDIgUmFuZ2VCeUlzQ291bnRTdHJhdGVneSBmYWlscyBmb3IgQ29ubmVjdGl2ZVN0ZXBzCi0qIFRJTktFUlBPUC0xNzQzIExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kgZG9lcyBub3QgY2F0Y2ggbGFtYmRhcyBwYXNzZWQgdG8gc2FjaygpCi0qIFRJTktFUlBPUC0xNzQ0IEdyZW1saW4gLk5FVDogRXhjZXB0aW9uIGZyb20gc3luYyBleGVjdXRpb24gZ2V0cyB3cmFwcGVkIGluIEFnZ3JlZ2F0ZUV4Y2VwdGlvbgotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC03NDEgUmVtb3ZlIE9wdGlvbnMgRm9yIFRyYW5zYWN0aW9uIFJldHJ5Ci0qIFRJTktFUlBPUC05MTUgR3JlbWxpbiBTZXJ2ZXIgc3VwcG9ydHMgUkVTVCBhbmQgV2Vic29ja2V0cyBzaW11bHRhbnRlb3VzbHkKLSogVElOS0VSUE9QLTkyMCBUZXN0IGNhc2UgbmVlZGVkIGZvciBlbnN1cmluZyBzYW1lIGNhcmRpbmFsaXR5IGZvciBrZXkuCi0qIFRJTktFUlBPUC0xNTUyIEMjIEdyZW1saW4gTGFuZ3VhZ2UgVmFyaWFudAotKiBUSU5LRVJQT1AtMTY2OSBFZGdlVmVydGV4U3RlcCBzaG91bGQgYmUgZGVzaWduZWQgZm9yIGV4dGVuc2lvbgotKiBUSU5LRVJQT1AtMTY3NiBJbXByb3ZlIEdyYXBoU09OIDIuMCBQZXJmb3JtYW5jZSAgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xNjg4IEluY2x1ZGUgVHJhdmVyc2FsTWV0cmljcyBhbm5vdGF0aW9uIGluIHByZXR0eSBwcmludAotKiBUSU5LRVJQT1AtMTY5NCBEZXByZWNhdGUgdXNlTWFwcGVyRnJvbUdyYXBoCi0qIFRJTktFUlBPUC0xNzAxIEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5IHNob3VsZCByZWN1cnNlIGludG8gY29sbGVjdGlvbnMgZm9yIGRldGFjaG1lbnQuCi0qIFRJTktFUlBPUC0xNzAzIE1ha2UgRWRnZU90aGVyVmVydGV4U3RlcCBub24tZmluYWwKLSogVElOS0VSUE9QLTE3MDggQWRkIGEgIk5vdGUgb24gU2NvcGVzIiBkb2N1bWVudAotKiBUSU5LRVJQT1AtMTcwOSBBZGQgYSBsaXN0IG9mIGFsbCB0aGUgc3RlcHMgdGhhdCBzdXBwb3J0IGJ5KCkvZnJvbSgpL3RvKCkvYXMoKS9vcHRpb24oKQotKiBUSU5LRVJQT1AtMTcxMCBBZGQgYSBub3RlIG9uIHRyZWUoKSBieS1tb2R1bGF0aW9uIGFuZCB1bmlxdWVuZXNzIG9mIHRyZWUgYnJhbmNoZXMuCi0qIFRJTktFUlBPUC0xNzE0IEdyZW1saW4gU2VydmVyIHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0IHNob3VsZCB0YWtlIGludG8gYWNjb3VudCByZXF1ZXN0IGFycml2YWwgdGltZQotKiBUSU5LRVJQT1AtMTcxOCBEZXByZWNhdGUgR3J5b0xpdGVNZXNzYWdlU2VyaWFsaXplclYxZDAKLSogVElOS0VSUE9QLTE3NDggQ2FsbG91dCBjb21tZW50cyBicmVhayBjb2RlIHNuaXBwZXRzCi0qIFRJTktFUlBPUC0xNzQ5IEJ1bXAgdG8gTmV0dHkgNC4wLjUwCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTYsIDMuMi42IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0yLTVdXQogPT09IFRpbmtlclBvcCAzLjIuNSAoUmVsZWFzZSBEYXRlOiBKdW5lIDEyLCAyMDE3KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMS03LCAzLjEuNz4+LgotCi0qIEZpeGVkIGZvbGRpbmcgb2YgbXVsdGlwbGUgYGhhc0lkKClgIHN0ZXBzIGludG8gYEdyYXBoU3RlcGAuCi0qIEFkZGVkIHN0cmluZyBwZXJmb3JtYW5jZSBvcHRpb25zIHRvIGBTdGFyR3JhcGhgLgotKiBGaXhlZCBhIGJ1ZyBpbiBgdW50aWwocHJlZGljYXRlKWAgd2hlcmUgaXQgd2FzIGFjdHVhbGx5IGNhbGxpbmcgYGVtaXQocHJlZGljYXRlKWAuCi0qIEZpeGVkIGluY29uc2lzdGVuY3kgaW4gR3JhcGhTT04gc2VyaWFsaXphdGlvbiBvZiBgUGF0aGAgd2hlcmUgcHJvcGVydGllcyBvZiBncmFwaCBlbGVtZW50cyB3ZXJlIGJlaW5nIGluY2x1ZGVkIHdoZW4gc2VyaWFsaXplZC4KLSogSW1wcm92ZWQgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSBvZiBHcmFwaFNPTiB3aGVuIHNlcmlhbGl6aW5nIGBUaW5rZXJHcmFwaGAgYW5kIGdyYXBoIGVsZW1lbnRzLgotKiBSZW1vdmVkIHVzZSBvZiBgc3RyZWFtKClgIGluIGBEZXRhY2hlZEVkZ2VgIGFuZCBgRGV0YWNoZWRWZXJ0ZXhgLgotKiBEZXByZWNhdGVkIGEgY29uc3RydWN0b3IgaW4gYERldGFjaGVkRWRnZWAgdGhhdCBtYWRlIHVzZSBvZiBgUGFpcmAgaW4gZmF2b3Igb2YgYSBuZXcgb25lIHRoYXQganVzdCB1c2VzIHRoZSBvYmplY3RzIHRoYXQgd2VyZSBpbiB0aGUgYFBhaXJgLgotKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgb24gdGhlIGBnLmFkZFYoT2JqZWN0Li4uKWAgd2hlbiBwYXNzaW5nIGFuIGludmFsaWQgYXJndW1lbnRzLgotKiBSZWR1Y2VkIG1lbW9yeSB1c2FnZSBmb3IgVGlua2VyR3JhcGggZGVzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OIGJ5IHN0cmVhbWluZyB2ZXJ0aWNlcyBhbmQgZWRnZXMuCi0qIEFkZGVkIHRoZSBgZ3JlbWxpbi1hcmNoZXR5cGUtZHNsYCB0byBkZW1vbnN0cmF0ZSBob3cgdG8gc3RydWN0dXJlIGEgTWF2ZW4gcHJvamVjdCBmb3IgYSBEU0wuCi0qIERldmVsb3BlZCBhbmQgZG9jdW1lbnRlZCBwYXR0ZXJucyBmb3IgRG9tYWluIFNwZWNpZmljIExhbmd1YWdlIGltcGxlbWVudGF0aW9ucy4KLSogUmVtb3ZlZCB0aGUgR3Jvb3Z5IGRlcGVuZGVuY3kgZnJvbSBgZ3JlbWxpbi1weXRob25gIGFuZCB1c2VkIEdyb292eSBUZW1wbGF0ZXMgYW5kIHRoZSBgZ21hdmVucGx1cy1wbHVnaW5gIHRvIGdlbmVyYXRlIHRoZSBweXRob24gR0xWIGNsYXNzZXMuCi0qIE5vdyB1c2luZyBHcm9vdnkgYFsuLi5dYCBtYXAgbm90YXRpb24gaW4gYEdyb292eVRyYW5zbGF0b3JgIGluc3RlYWQgb2YgYG5ldyBMaW5rZWRIYXNoTWFwKCl7eyB9fWAuCi0qIE1haW50YWluZWQgdHlwZSBpbmZvcm1hdGlvbiBvbiBgVHJhdmVyc2FsLnByb21pc2UoKWAuCi0qIFByb3BhZ2F0ZWQgZXhjZXB0aW9uIHRvIGBGdXR1cmVgIGluc3RlYWQgb2YgY2FsbGluZyB0aHJlYWQgaW4gYFJlbW90ZUNvbm5lY3Rpb25gLgotKiBGaXhlZCBhIGJ1ZyBpbiBgUmVwZWF0VW5yb2xsU3RyYXRlZ3lgIHdoZXJlIGBMb29wc1N0ZXBgIGFuZCBgTGFtYmRhSG9sZGVyYCBzaG91bGQgaW52YWxpZGF0ZSB0aGUgc3RyYXRlZ3kncyBhcHBsaWNhdGlvbi4KLSogRGVwcmVjYXRlZCBgYXV0aGVudGljYXRpb24uY2xhc3NOYW1lYCBzZXR0aW5nIGluIGZhdm9yIG9mIHVzaW5nIGBhdXRoZW50aWNhdGlvbi5hdXRoZW50aWNhdG9yYC4KLSogQWRkZWQgYGF1dGhlbnRpY2F0aW9uLmF1dGhlbnRpY2F0aW9uSGFuZGxlcmAgc2V0dGluZy4KLSogQWRkZWQgYWJzdHJhY3Rpb24gdG8gYXV0aGVudGljYXRpb24gdG8gYWxsb3cgdXNlcnMgdG8gcGx1ZyBpbiB0aGVpciBvd24gYEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyYCBpbXBsZW1lbnRhdGlvbnMuCi0qIEZpeGVkIGEgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBidWcgaW4gYEJfTFBfT19TX1NFX1NMX1RyYXZlcnNlcmAuCi0qIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBub3cgdXNlcyB0aGUgbWFya2VyLW1vZGVsIHRvIHJlZHVjZSByZWN1cnNpdmUgbG9va3VwcyBvZiBpbnZhbGlkYXRpbmcgc3RlcHMuCi0qIGBQcm9maWxlU3RyYXRlZ3lgIG5vdyB1c2VzIHRoZSBtYXJrZXItbW9kZWwgdG8gcmVkdWNlIHJlY3Vyc2l2ZSBsb29rdXBzIG9mIGBQcm9maWxlU2lkZUVmZmVjdFN0ZXBgLgotKiBgTXV0YXRpbmdgIHN0ZXBzIG5vdyBpbXBsZW1lbnQgYFNjb3BpbmdgIGludGVyZmFjZS4KLSogRml4ZWQgYSBzdGVwIGlkIGNvbXBpbGF0aW9uIGJ1ZyBpbiBgQWRkVmVydGV4U3RhcnRTdGVwYCwgYEFkZFZlcnRleFN0ZXBgLCBgQWRkRWRnZVN0ZXBgLCBhbmQgYEFkZFByb3BlcnR5U3RlcGAuCi0qIEFkZGVkIG1vcmUgZGV0YWlscyB0byBHcmVtbGluIFNlcnZlciBjbGllbnQgc2lkZSBtZXNzYWdlcyAtIGV4Y2VwdGlvbiBoaWVyYXJjaHkgYW5kIHN0YWNrIHRyYWNlLgotKiBEZXByZWNhdGVkICJFeGNlcHRpb24tQ2xhc3MiIGluIHRoZSBHcmVtbGluIFNlcnZlciBIVFRQIHByb3RvY29sIGluIGZhdm9yIG9mIHRoZSBuZXcgImV4Y2VwdGlvbnMiIGZpZWxkLgotKiBEZS1yZWdpc3RlcmVkIG1ldHJpY3Mgb24gR3JlbWxpbiBTZXJ2ZXIgc2h1dGRvd24uCi0qIEFkZGVkICJoZWxwIiBjb21tYW5kIG9wdGlvbiBvbiBgOnJlbW90ZSBjb25maWdgIGZvciBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGF0IGZlYXR1cmUgaW4gdGhlIEdyZW1saW4gQ29uc29sZS4KLSogQWxsb3dlZCBmb3IgbXVsdGlwbGUgc2NyaXB0cyBhbmQgcmVsYXRlZCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGBncmVtbGluLnNoYCB2aWEgYC1pYCBhbmQgYC1lYC4KLSogYExBQkVMRURfUEFUSGAgcmVxdWlyZW1lbnQgaXMgbm93IHNldCBpZiBhbnkgc3RlcCBpbiB0aGUgdHJhdmVyc2FsIGlzIGxhYmVsZWQuCi0qIFVwZGF0ZWQgYFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lgIHRvIG5vdCBydW4gaWYgdGhlIHByb3ZpZGVkIHRyYXZlcnNhbCBjb250YWlucyBhIGBWZXJ0ZXhQcm9ncmFtU3RlcGAgdGhhdCBoYXMgYSBgTEFCRUxFRF9QQVRIYCByZXF1aXJlbWVudC4KLSogQWRkZWQgdmFyaW91cyBtZXRyaWNzIHRvIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgYXJvdW5kIHNjcmlwdCBjb21waWxhdGlvbiBhbmQgZXhwb3NlZCB0aGVtIGluIEdyZW1saW4gU2VydmVyLgotKiBNb3ZlZCB0aGUgYGNhZmZlaW5lYCBkZXBlbmRlbmN5IGRvd24gdG8gYGdyZW1saW4tZ3Jvb3Z5YCBhbmQgb3V0IG9mIGBncmVtbGluLXNlcnZlcmAuCi0qIEltcHJvdmVkIHNjcmlwdCBjb21waWxhdGlvbiBpbiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgdG8gdXNlIGJldHRlciBjYWNoaW5nLCBsb2cgbG9uZyBjb21waWxlIHRpbWVzIGFuZCBwcmV2ZW50IGZhaWxlZCBjb21waWxhdGlvbnMgZnJvbSByZWNvbXBpbGluZyBvbiBmdXR1cmUgcmVxdWVzdHMuCi0qIFN5bmNocm9uaXplZCBzY3JpcHQgY29tcGlsYXRpb24uCi0qIExvZ2dlZCBTY3JpcHQgY29tcGlsYXRpb24gdGltZXMuCi0qIFByZXZlbnRlZCBmYWlsZWQgc2NyaXB0cyBmcm9tIHJlY29tcGlsaW5nLgotKiBMb2dnZWQgd2FybmluZ3MgZm9yIHNjcmlwdHMgdGhhdCB0YWtlICJ0b28gbG9uZyIgdG8gY29tcGlsZS4KLSogSW1wcm92ZWQgbWVtb3J5IHVzYWdlIG9mIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAuCi0qIEFkZGVkIGBjeWNsaWNQYXRoKCkuZnJvbSgpLnRvKCkuYnkoKWAgc3VwcG9ydCB0byBgR3JhcGhUcmF2ZXJzYWxgLgotKiBBZGRlZCBgc2ltcGxlUGF0aCgpLmZyb20oKS50bygpLmJ5KClgIHN1cHBvcnQgdG8gYEdyYXBoVHJhdmVyc2FsYC4KLSogQWRkZWQgYHBhdGgoKS5mcm9tKCkudG8oKWAgc3VwcG9ydCB0byBgR3JhcGhUcmF2ZXJzYWxgIHNvIHN1Yi1wYXRocyBjYW4gYmUgaXNvbGF0ZWQgZnJvbSB0aGUgY3VycmVudCBwYXRoLgotKiBBZGRlZCBgRnJvbVRvTW9kdWxhdGluZ2AgaW50ZXJmYWNlIGZvciB1c2Ugd2l0aCBgdG8oKWAtIGFuZCBgZnJvbSgpYC1iYXNlZCBzdGVwIG1vZHVsYXRvcnMuCi0qIEFkZGVkIGBQYXRoLnN1YlBhdGgoKWAgd2hpY2ggc3VwcG9ydHMgaXNvbGF0aW5nIGEgc3ViLXBhdGggZnJvbSBgUGF0aGAgdmlhIHRvL2Zyb20tbGFiZWxzLgotKiBGaXhlZCBgTnVsbFBvaW50ZXJFeGNlcHRpb25gIGluIGBHcmFwaE1MUmVhZGVyYCB0aGF0IG9jY3VycmVkIHdoZW4gYW4gYDxlZGdlPmAgZGlkbid0IGhhdmUgYW4gSUQgZmllbGQgYW5kIHRoZSBiYXNlIGdyYXBoIHN1cHBvcnRlZCBJRCBhc3NpZ25tZW50LgotKiBBZGRlZCBgU2NvcGluZ1N0cmF0ZWd5YCB3aGljaCB3aWxsIGNvbXB1dGVyIGFuZCBwcm92aWRlIGFsbCBgU2NvcGluZ2Agc3RlcHMgd2l0aCB0aGUgcGF0aCBsYWJlbHMgb2YgdGhlIGdsb2JhbCBgVHJhdmVyc2FsYC4KLSogU3BsaXQgYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIGludG8gdHdvIHN0cmF0ZWdpZXM6IGBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5YCBhbmQgYENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3lgLgotKiBSZW1vdmVkIGBIYXNUZXN0LmdfVl9oYXNJZF9jb21waWxhdGlvbkVxdWFsaXR5YCBmcm9tIHByb2Nlc3MgdGVzdCBzdWl0ZSBhcyBpdCBtYWtlcyB0b28gbWFueSBhc3N1bXB0aW9ucyBhYm91dCBwcm92aWRlciBjb21waWxhdGlvbi4KLSogRGVwcmVjYXRlZCBgQ3VzdG9taXplclByb3ZpZGVyYCBpbmZyYXN0cnVjdHVyZS4KLSogRGVwcmVjYXRlZCBgUGx1Z2luQWNjZXB0b3JgIGluZnJhc3RydWN0dXJlLgotKiBJbXByb3ZlZCBjb25zaXN0ZW5jeSBvZiB0aGUgYXBwbGljYXRpb24gb2YgYmluZGluZ3MgdG8gYEdyZW1saW5TY3JpcHRFbmdpbmVgIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgYEJpbmRpbmdzR3JlbWxpblBsdWdpbmAuCi0qIEZpeGVkIGEgYnVnIGluIE9MQVAgYENvbXB1dGVyQXdhcmVTdGVwYCB3aGVyZSBlbmQtc3RlcCBsYWJlbHMgd2VyZSBub3QgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIHRyYXZlcnNlciBjb3JyZWN0bHkuCi0qIFJlZmFjdG9yIGBTcGFya0NvbnRleHRgIGhhbmRsZXIgdG8gc3VwcG9ydCBleHRlcm5hbCBraWxsIGFuZCBzdG9wIG9wZXJhdGlvbnMuCi0qIEZpeGVkIGFuIG9wdGltaXphdGlvbiBidWcgaW4gYExhenlCYXJyaWVyU3RyYXRlZ3lgIGFyb3VuZCBhcHBlbmRpbmcgYmFycmllcnMgdG8gdGhlIGVuZCBvZiBhIGBUcmF2ZXJzYWxgLgotKiBGaXhlZCBhbiBvcHRpbWl6YXRpb24gYnVnIGluIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBhcm91bmQgYXBwZW5kaW5nIGJhcnJpZXJzIHRvIHRoZSBlbmQgb2YgYSBgVHJhdmVyc2FsYC4KLSogYFRyYXZlcnNlckl0ZXJhdG9yYCBpbiBHcmVtbGluU2VydmVyIGlzIHNtYXJ0IHRvIHRyeSBhbmQgYnVsayB0cmF2ZXJzZXJzIHByaW9yIHRvIG5ldHdvcmsgSS9PLgotKiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZyBvZiBjb21waWxhdGlvbiBmYWlsdXJlcyBmb3IgdmVyeSBsYXJnZSBvciBoaWdobHkgcGFyYW1ldGVyaXplZCBzY3JpcHQgc2VudCB0byBHcmVtbGluIFNlcnZlci4KLSogRml4ZWQgYSBidWcgaW4gYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHRoYXQgY2hhbmdlZCB0aGUgbWVhbmluZyBvZiBpbm5lciB0cmF2ZXJzYWxzLgotKiBJbXByb3ZlZCBHcmVtbGluLVB5dGhvbiBEcml2ZXIgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGEgdGhyZWFkZWQgY2xpZW50IHdpdGggYmFzaWMgY29ubmVjdGlvbiBwb29saW5nIGFuZCBzdXBwb3J0IGZvciBwbHVnZ2FibGUgd2Vic29ja2V0IGNsaWVudHMuCi0qIENoYW5nZWQgYEdyYXBoTWFuYWdlcmAgZnJvbSBhIGZpbmFsIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIGFuIGludGVyZmFjZS4KLSogVXBkYXRlZCBgR3JhcGhNYW5hZ2VyYCBpbnRlcmZhY2UgdG8gaW5jbHVkZSBtZXRob2RzIGZvciBvcGVuaW5nL2luc3RhbnRpYXRpbmcgYSBncmFwaCBhbmQgY2xvc2luZyBhIGdyYXBoLgotKiBJbXBsZW1lbnRlZCBgRGVmYXVsdEdyYXBoTWFuYWdlcmAgdG8gaW5jbHVkZSBwcmV2aW91cyBgR3JhcGhNYW5hZ2VyYCBmdW5jdGlvbmFsaXR5IGFuZCBhZGhlcmUgdG8gdXBkYXRlZCBpbnRlcmZhY2UuCi0qIERlcHJlY2F0ZWQgYEdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKWAgYW5kIGFkZGVkIGBHcmFwaE1hbmFnZXIuZ2V0R3JhcGhOYW1lcygpYC4KLSogRGVwcmVjYXRlZCBgR3JhcGhNYW5hZ2VyLmdldFRyYXZlcnNhbFNvdXJjZXMoKWAgYW5kIGFkZGVkIGBHcmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlTmFtZXMoKWAuCi0qIEZpeGVkIGEgYnVnIHNvIG5vdyB1c2VycyBjYW4gc3VwcGx5IGEgWUFNTCB3aXRoIGFuIGVtcHR5IGBzdGF0aWNWYXJpYWJsZVR5cGVzYCB0byBiZSB1c2VkIGJ5IHRoZSBgRmlsZVNhbmRib3hFeHRlbnNpb25gCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xMjU4IEhhc1Rlc3QuZ19WX2hhc0lkX2NvbXBpbGF0aW9uRXF1YWxpdHkgbWFrZXMgR3JhcGhTdGVwIGFzc3VtcHRpb25zCi0qIFRJTktFUlBPUC0xNTI4IENvdW50QnlJc1JhbmdlU3RyYXRlZ3kgZmFpbHMgZm9yIGEgcGFydGljdWxhciBxdWVyeQotKiBUSU5LRVJQT1AtMTYyNiBjaG9vc2UoKSBpcyBidWdneSBpbiBPTEFQCi0qIFRJTktFUlBPUC0xNjM4IGNvdW50KCkgaXMgb3B0aW1pemVkIGF3YXkgaW4gd2hlcmUoKQotKiBUSU5LRVJQT1AtMTY0MCBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5IGdpdmVzIGZhbHNlIGVycm9ycwotKiBUSU5LRVJQT1AtMTY1MiBEaXNhYmxlIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgaWYgVmVydGV4UHJvZ3JhbVN0ZXAgaGFzIExBQkVMTEVEX1BBVEggcmVxdWlyZW1lbnQKLSogVElOS0VSUE9QLTE2NjAgRG9jdW1lbnRhdGlvbiBsaW5rcyBzaG91bGQgbm90IGxpbmsgdG8gVElOS0VSUE9QLXh4eHggYnJhbmNoZXMKLSogVElOS0VSUE9QLTE2NjYgTlBFIGluIEZpbGVTYW5kYm94RXh0ZW5zaW9uIGlmIHN0YXRpY1ZhcmlhYmxlVHlwZXMgaXMgZW1wdHkgaW4gc3VwcGxpZWQgWUFNTCBmaWxlCi0qIFRJTktFUlBPUC0xNjY4IFJlcGVhdFVucm9sbFN0cmF0ZWd5IHNob3VsZCBub3QgZXhlY3V0ZSBpZiB0aGVyZSBpcyBhIExvb3BTdGVwIHVzZWQuCi0qIFRJTktFUlBPUC0xNjcwIEVuZCB0eXBlIGxvc3Qgd2hlbiB1c2luZyBwcm9taXNlKCkKLSogVElOS0VSUE9QLTE2NzMgR3Jvb3Z5VHJhbnNsYXRvciBwcm9kdWNlcyBHcmVtbGluIHRoYXQgY2FuJ3QgZXhlY3V0ZSBvbiA6cmVtb3RlCi0qIFRJTktFUlBPUC0xNjc1IFJlbW90ZVN0ZXAjcHJvY2Vzc05leHRTdGFydCgpIHRocm93cyBDb21wbGV0aW9uRXhjZXB0aW9uIGluc3RlYWQgb2YgdW5kZXJseWluZyBleGNlcHRpb24KLSogVElOS0VSUE9QLTE2ODEgTXVsdGlwbGUgaGFzSWQncyBhcmUgb3InZCBpbnRvIEdyYXBoU3RlcAotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC03NjEgU29tZSBiYXNpYyBtYXRoZW1hdGljYWwgZnVuY3Rpb25zIC8gc3RlcHMKLSogVElOS0VSUE9QLTc4NiBQYXR0ZXJucyBmb3IgRFNMIERldmVsb3BtZW50Ci0qIFRJTktFUlBPUC0xMDQ0IFJlc3BvbnNlTWVzc2FnZSBzaG91bGQgY29udGFpbiBzZXJ2ZXItc2lkZSBleGNlcHRpb24gbmFtZS4KLSogVElOS0VSUE9QLTEwOTUgQ3JlYXRlIGEgY3VzdG9tIFNjcmlwdENvbnRleHQKLSogVElOS0VSUE9QLTEyNjYgTWFrZSBtZW1vcnkgYXZhaWxhYmxlIHRvIGJlbmNobWFya3MgY29uZmlndXJhYmxlCi0qIFRJTktFUlBPUC0xMzAzIGFkZCBoZWxwIGZvciA6cmVtb3RlIGNvbmZpZyBmb3IgR2VwaGkgUGx1Z2luCi0qIFRJTktFUlBPUC0xMzQwIGRvY3MgZG8gbm90IHN0YXRlIGF0IHdoYXQgdmVyc2lvbiBhbiBBUEkgd2FzIGludHJvZHVjZWQgKG9yIGRlcHJlY2F0ZWQpCi0qIFRJTktFUlBPUC0xMzg3IGZyb20gYW5kIHRvIG1vZHVsYXRvcnMgZm9yIHBhdGggc3RlcHMKLSogVElOS0VSUE9QLTE0MzggQ29uc2lkZXIgR3JhcGhNYW5hZ2VyIGFzIGFuIGludGVyZmFjZSooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTQ1MyBBbGxvdyBHcmVtbGluLVB5dGhvbiB0byBoYW5kbGUgYXN5bmNocm9ub3VzIGZhaWx1cmUKLSogVElOS0VSUE9QLTE1NzcgUHJvdmlkZSBzdXBwb3J0IGZvciBQeXRob24zIG9yIFB5dGhvbjIgaW4gdGhlIERvY2tlciBidWlsZHMuCi0qIFRJTktFUlBPUC0xNTk5IGltcGxlbWVudCByZWFsIGdyZW1saW4tcHl0aG9uIGRyaXZlcgotKiBUSU5LRVJQT1AtMTYxNCBJbXByb3ZlIGRvY3VtZW50YXRpb24gZm9yIEdyYXBoLlYoKSBhbmQgR3JhcGguRSgpIG9uIG1haW4gZG9jcyBwYWdlCi0qIFRJTktFUlBPUC0xNjE4IFJlbW92ZSBncm9vdnkgZGVwZW5kZW5jeSBmcm9tIGdyZW1saW4tcHl0aG9uCi0qIFRJTktFUlBPUC0xNjI3IExhenlCYXJyaWVyU3RyYXRlZ3kgc2hvdWxkIG5vdCBhcHBlbmQgYW4gZW5kIGJhcnJpZXIuCi0qIFRJTktFUlBPUC0xNjMxIEZpeCB2aXNpYmlsaXR5IGlzc3VlcyB3aXRoIHRoZSBCaW5kaW5nc0dyZW1saW5QbHVnaW4KLSogVElOS0VSUE9QLTE2MzQgRGVwcmVjYXRlIG9sZCBtZXRob2RzIG9mIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgY3VzdG9taXphdGlvbgotKiBUSU5LRVJQT1AtMTY0MiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIG11dGF0aW5nIHRyYXZlcnNhbHMKLSogVElOS0VSUE9QLTE2NDQgSW1wcm92ZSBzY3JpcHQgY29tcGlsYXRpb24gcHJvY2VzcyBhbmQgaW5jbHVkZSBtZXRyaWNzCi0qIFRJTktFUlBPUC0xNjUzIEFsbG93IG11bHRpcGxlIHNjcmlwdHMgd2l0aCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25zb2xlCi0qIFRJTktFUlBPUC0xNjU3IFByb3ZpZGUgYWJzdHJhY3Rpb24gdG8gZWFzaWx5IGFsbG93IGRpZmZlcmVudCBIdHRwQXV0aCBzY2hlbWVzCi0qIFRJTktFUlBPUC0xNjYzIFZhbGlkYXRlIGEgbWF4aW11bSBmb3IgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtMTY2NSBSZW1vdmUgdW5pdHRlc3QgZnJvbSBHcmVtbGluLVB5dGhvbiB0ZXN0cwotKiBUSU5LRVJQT1AtMTY3MSBEZWZhdWx0IG1ldGhvZCBmb3IgUmVtb3RlQ29ubmVjdGlvbi5zdWJtaXRBc3luYyB0aHJvd3MgZXhjZXB0aW9uIGZyb20gc3VibWl0IG9uIGNhbGxpbmcgdGhyZWFkIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgZnV0dXJlCi0qIFRJTktFUlBPUC0xNjc3IEJ1bXAgR3Jvb3Z5IHRvIDIuNC4xMQotKiBUSU5LRVJQT1AtMTY4MCBBZGQgc3RyaW5nIHBlcmZvcm1hbmNlIG9wdGlvbnMgdG8gU3RhckdyYXBoCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTUsIDMuMi41IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0yLTRdXQogPT09IFRpbmtlclBvcCAzLjIuNCAoUmVsZWFzZSBEYXRlOiBGZWJydWFyeSA4LCAyMDE3KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMS02LCAzLjEuNj4+LgotCi0qIEZpeGVkIGEgYnVnIHdoZXJlIGBQYXRoUHJvY2Vzc29yLmtlZXBMYWJlbHNgIHdlcmUgbm90IGJlaW5nIHB1c2hlZCBkb3duIGludG8gY2hpbGQgdHJhdmVyc2FscyBieSBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAuCi0qIEFkZGVkIGRlZmF1bHQgYE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3lgIGZvciBgR3JhcGhDb21wdXRlcmAgdGhhdCBjYW4gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVzc2FnZSBwYXNzaW5nIGl0ZXJhdGlvbnMuCi0qIEZpeGVkIGEgYnVnIGFzc29jaWF0ZWQgd2l0aCB1c2VyLXByb3ZpZGVkIG1hcHMgYW5kIGBHcm91cFNpZGVFZmZlY3RTdGVwYC4KLSogYEdyb3VwQmlPcGVyYXRvcmAgbm8gbG9uZ2VyIG1haW50YWlucyBhIGRldGFjaGVkIHRyYXZlcnNhbCBhbmQgdGh1cywgbm8gbW9yZSBzaWRlLWVmZmVjdCByZWxhdGVkIE9MQVAgaW5jb25zaXN0ZW5jaWVzLgotKiBBZGRlZCBgUHJvamVjdGVkVHJhdmVyc2VyYCB3aGljaCB3cmFwcyBhIHRyYXZlcnNlciB3aXRoIGEgYExpc3Q8T2JqZWN0PmAgb2YgcHJvamVjdGVkIGRhdGEuCi0qIEZpeGVkIGFuIG9wdGltaXphdGlvbiBidWcgaW4gYENvbGxlY3RpbmdCYXJyaWVyU3RlcHNgIHdoZXJlIHRoZSBiYXJyaWVyIHdhcyBiZWluZyBjb25zdW1lZCBvbiBlYWNoIGBhZGRCYXJyaWVyKClgLgotKiBgT3JkZXJHbG9iYWxTdGVwYCBhbmQgYFNhbXBsZUdsb2JhbFN0ZXBgIHVzZSBgUHJvamVjdGVkVHJhdmVyc2VyYCBhbmQgbm93IGNhbiB3b3JrIHVwIHRvIHRoZSBsb2NhbCBzdGFyIGdyYXBoIGluIE9MQVAuCi0qIFNBU0wgbmVnb3RpYXRpb24gc3VwcG9ydHMgYm90aCBhIGJ5dGUgYXJyYXkgYW5kIEJhc2U2NCBlbmNvZGVkIGJ5dGVzIGFzIGEgc3RyaW5nIGZvciBhdXRoZW50aWNhdGlvbiB0byBHcmVtbGluIFNlcnZlci4KLSogRGVwcmVjYXRlZCBhbGwgdGVzdCBzdWl0ZXMgaW4gYGdyZW1saW4tZ3Jvb3Z5LXRlc3RgIC0gR3JhcGggUHJvdmlkZXJzIG5vIGxvbmdlciBuZWVkIHRvIGltcGxlbWVudCB0aGVzZS4KLSogRGVwcmVjYXRlZCBgVGlua2VySW9SZWdpc3RyeWAgcmVwbGFjaW5nIGl0IHdpdGggdGhlIG1vcmUgY29uc2lzdGVudGx5IG5hbWVkIGBUaW5rZXJJb1JlZ2lzdHJ5VjFkMGAuCi0qIE1hZGUgZXJyb3IgbWVzc2FnaW5nIG1vcmUgY29uc2lzdGVudCBkdXJpbmcgcmVzdWx0IGl0ZXJhdGlvbiB0aW1lb3V0cyBpbiBHcmVtbGluIFNlcnZlci4KLSogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgY2xhc3Nsb2FkZXIgZm9yIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgd2hlcmUgY2xhc3NlcyBpbiB0aGUgbG9hZGVyIHdlcmUgbm90IHJlbGVhc2luZyBmcm9tIG1lbW9yeSBhcyBhIHN0cm9uZyByZWZlcmVuY2Ugd2FzIGFsd2F5cyBtYWludGFpbmVkLgotKiBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAgZG9lcyBub3QgYWRkIGEgYE5vT3BCYXJyaWVyU3RlcGAgdG8gdGhlIGVuZCBvZiBsb2NhbCBjaGlsZHJlbiBhcyBpdHMgd2FzdGVkIGNvbXB1dGF0aW9uIGluIDk5JSBvZiB0cmF2ZXJzYWxzLgotKiBGaXhlZCBhIGJ1ZyBpbiBgQWRkVmVydGV4U3RhcnRTdGVwYCB3aGVyZSBpZiBhIHNpZGUtZWZmZWN0IHdhcyBiZWluZyB1c2VkIGluIHRoZSBwYXJhbWV0cml6YXRpb24sIGFuIE5QRSBvY2N1cnJlZC4KLSogRml4ZWQgYSBidWcgaW4gYExhenlCYXJyaWVyU3RyYXRlZ3lgIHdoZXJlIGBwcm9maWxlKClgIHdhcyBkZWFjdGl2YXRpbmcgaXQgYWNjaWRlbnRhbGx5LgotKiBGaXhlZCBhIGJ1ZyBpbiBgUmVwZWF0VW5yb2xsU3RyYXRlZ3lgIHdoZXJlIHN0YXRlZnVsIGBEZWR1cEdsb2JhbFN0ZXBgIHdhcyBjbG9uZWQgYW5kIHRodXMsIG1haW50YWluZWQgdHdvIGRlZHVwbGljYXRpb24gc2V0cy4KLSogQWRkZWQgZG9jdW1lbnRhdGlvbiBhcm91bmQgInRlcm1pbmFsIHN0ZXBzIiBpbiBHcmVtbGluOiBgaGFzTmV4dCgpYCwgYG5leHQoKWAsIGB0b0xpc3QoKWAsIGV0Yy4KLSogQWRkZWQgc3BlY2lmaWMgR3JhcGhTT04gc2VyaWFsaXplcnMgZm9yIGBSZXF1ZXN0TWVzc2FnZWAgYW5kIGBSZXNwb25zZU1lc3NhZ2VgIGluIEdyYXBoU09OIDIuMC4KLSogQWRkZWQgYENsb3NlYWJsZUl0ZXJhdG9yYCB0byBhbGxvdyBgR3JhcGhgIHByb3ZpZGVycyB3aG8gb3BlbiBleHBlbnNpdmUgcmVzb3VyY2VzIGEgd2F5IHRvIGxldCB1c2VycyByZWxlYXNlIHRoZW0uCi0qIEZpeGVkIG1pbm9yIGJ1ZyBpbiBgZ3JlbWxpbi1kcml2ZXJgIHdoZXJlIGNsb3NpbmcgYSBzZXNzaW9uLWJhc2VkIGBDbGllbnRgIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGl0IGNvdWxkIGdlbmVyYXRlIGFuIGVycm9yLgotKiBSZWxpZXZlZCBzeW5jaHJvbml6YXRpb24gcHJlc3N1cmUgaW4gdmFyaW91cyBhcmVhcyBvZiBgVGlua2VyR3JhcGhDb21wdXRlcmAuCi0qIEZpeGVkIGFuIG9wdGltaXphdGlvbiBidWcgaW4gT0xBUC1iYXNlZCBgRGVkdXBHbG9iYWxTdGVwYCB3aGVyZSBkZWR1cGluZyBvY2N1cnJlZCB0d2ljZS4KLSogYE1lbW9yeUNvbXB1dGVLZXlgIG5vdyBpbXBsZW1lbnRzIGBDbG9uZWFibGVgIHdoaWNoIGlzIHVzZWZ1bCBmb3IgYEJpT3BlcmF0b3JgIHJlZHVjZXJzIHRoYXQgbWFpbnRhaW4gdGhyZWFkLXVuc2FmZSBzdGF0ZS4KLSogYFRpbmtlckdyYXBoQ29tcHV0ZXJgIG5vdyBzdXBwb3J0cyBkaXN0cmlidXRlZCBgTWVtb3J5YCB3aXRoIGxvY2stZnJlZSBwYXJ0aXRpb24gYWdncmVnYXRpb24uCi0qIGBUaW5rZXJHcmFwaGAgR3J5byBhbmQgR3JhcGhTT04gZGVzZXJpYWxpemF0aW9uIGlzIG5vdyBjb25maWd1cmVkIHRvIHVzZSBtdWx0aS1wcm9wZXJ0aWVzLgotKiBDaGFuZ2VkIGJlaGF2aW9yIG9mIGBFbGVtZW50SGVscGVyLmFyZUVxdWFsKFByb3BlcnR5LCBQcm9wZXJ0eSlgIHRvIG5vdCB0aHJvdyBleGNlcHRpb25zIHdpdGggYG51bGxgIGFyZ3VtZW50cy4KLSogQWRkZWQgYEdyeW9WZXJzaW9uYCBmb3IgZnV0dXJlIGZsZXhpYmlsaXR5IHdoZW4gaW50cm9kdWNpbmcgYSBuZXcgdmVyaXNvbiBvZiBHcnlvIGFuZCBtb3ZlZCBzZXJpYWxpemVyIHJlZ2lzdHJhdGlvbnMgdG8gaXQuCi0qIEZpeGVkIEdyeW8gc2VyaWFsaXphdGlvbiBvZiBgQ29ubmVjdGl2ZVBgIGluc3RhbmNlcy4KLSogTGVzc2VuZWQgdGhlIHNldmVyaXR5IG9mIEdyZW1saW4gU2VydmVyIGxvZ2dpbmcgd2hlbiBpdCBlbmNvdW50ZXJzIHR3byBvciBtb3JlIHNlcmlhbGl6ZXJzIGFkZHJlc3NpbmcgdGhlIHNhbWUgbWltZSB0eXBlLgotKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjQyLmZpbmFsLgotKiBBZGRlZCBgQnl0ZUJ1ZmZlcmAsIGBJbmV0QWRkcmVzc2AsIGBUaW1lc3RhbXBgIHRvIHRoZSBsaXN0IG9mIEdyeW8gc3VwcG9ydGVkIGNsYXNzZXMuCi0qIEZpeGVkIEdyeW8gc2VyaWFsaXphdGlvbiBvZiBgQ2xhc3NgLgotKiBGaXhlZCBHcmFwaFNPTiBzZXJpYWxpemF0aW9uIG9mIGVudW1zIGxpa2UgYFRgLCBgUGAsIGV0Yy4gd2hlcmUgdmFsdWVzIHdlcmUgb3ZlcnJpZGluZyBlYWNoIG90aGVyIGluIHRoZSBHcmFwaFNPTiB0eXBlIHJlZ2lzdHJ5LgotKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluLVB5dGhvbiBhcm91bmQgYF9fLl9fKClgIGFuZCBgX18uc3RhcnQoKWAuCi0qIEZpeGVkIGEgYnVnIGFyb3VuZCBsb25nIHNlcmlhbGl6YXRpb24gaW4gR3JlbWxpbi1QeXRob24gd2hlbiB1c2luZyBQeXRob24zLgotKiBEZXByZWNhdGVkIGBUcmF2ZXJzYWxTb3VyY2Uud2l0aEJpbmRpbmdzKClgIGFzIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgaW4gR3JlbWxpbi1KYXZhIGFuZCBuZXZlciB3YXMgbmVlZGVkIGZvciBvdGhlciB2YXJpYW50cy4KLSogRml4ZWQgYSBidWcgaW4gR3JlbWxpbi1KYXZhIGBCeXRlY29kZWAgd2hlcmUgYW5vbnltb3VzIHRyYXZlcnNhbHMgd2VyZSBub3QgYXdhcmUgb2YgcGFyZW50IGJpbmRpbmdzLgotKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluLUphdmEgR3JhcGhTT04gZGVzZXJpYWxpemF0aW9uIGFyb3VuZCBgUC53aXRoaW4oKWAgYW5kIGBQLndpdGhvdXQoKWAuCi0qIENvbnZlcnRlZCBTcGFyayBwcm9jZXNzIHN1aXRlIHRlc3RzIHRvICJpbnRlZ3JhdGlvbiIgdGVzdHMuCi0qIEZpeGVkIGEgYnVnIGluIGBJbmxpbmVGaWx0ZXJTdHJhdGVneWAgaGF2aW5nIHRvIGRvIHdpdGggZm9sZGluZyBgSGFzQ29udGFpbmVyc2AgaW50byBgVmVydGV4U3RlcGAuCi0qIERlcHJlY2F0ZWQgYEhhc0NvbnRhaW5lci5tYWtlSGFzQ29udGFpbmVycygpYCB3aGljaCB3YXMgdXNlZCB0byBkaXNzZWN0IGBBbmRQYCBhbmQgc2hvdWxkbid0IGJlIHVzZWQgYXQgdGhlIFRpbmtlclBvcC1sZXZlbC4KLSogYEdyYXBoVHJhdmVyc2FsLmhhcygpYCBub3cgd2lsbCB0cnkgYW5kIGZvbGQtbGVmdCBgSGFzQ29udGFpbmVyYCBpZiBlbmQgc3RlcCBpcyBhIGBIYXNDb250YWluZXJIb2xkZXJgLgotKiBDcmVhdGVkIGV4cGxpY2l0IGBQYC1wcmVkaWNhdGUgbWV0aG9kcyBmb3IgYEdyYXBoVHJhdmVyc2FsLmhhc1hYWCgpYC4KLSogRml4ZWQgYSBidWcgaW4gYEZpbHRlclJhbmtTdHJhdGVneWAgYXJvdW5kIGB3aGVyZSgpLmJ5KClgIG9yZGVyaW5nLgotKiBBZGRlZCBhbm90aGVyIG9wdGltaXphdGlvbiBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAsIHRoYXQgcmVtb3ZlcyBgY291bnQoKS5pcygpYCBhbHRvZ2V0aGVyIGlmIGl0J3Mgbm90IG5lZWRlZC4KLSogRml4ZWQgYSBPTEFQIGBNYXRjaFN0ZXAuY2xvbmUoKWAtYnVnIHRoYXQgb2NjdXJzIHdoZW4gdGhlIGBtYXRjaCgpYCBpcyBpbiBhIGxvY2FsIGNoaWxkLgotKiBBZGRlZCBhbm90aGVyIG9wdGltaXphdGlvbiBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAsIHRoYXQgcmVtb3ZlcyBgY291bnQoKS5pcygpYCBhbHRvZ2V0aGVyIGlmIGl0J3Mgbm90IG5lZWRlZC4KLSogRml4ZWQgYSBidWcgaW4gYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHdoZXJlIGxhYmVsZWQgcGFyZW50cyBzaG91bGRuJ3QgaGF2ZSB0aGUgc3RyYXRlZ3kgYXBwbGllZCB0byB0aGVpciBjaGlsZHJlbi4KLSogRml4ZWQgYSBidWcgaW4gYFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lgIHdoZXJlIGBNYXRjaEVuZFN0ZXBgIGxhYmVscyB3ZXJlIGJlaW5nIGRyb3BwZWQgd2hlbiB0aGV5IHNob3VsZG4ndCBiZS4KLSogQWRkZWQgYFRpbmtlckdyYXBoQ291bnRTdHJhdGVneWAgd2hpY2ggdHJhbnNsYXRlcyBgZy5WKCkubWFwKi5jb3VudCgpYCBwYXR0ZXJucyBpbnRvIGRpcmVjdCBgTWFwLnNpemUoKWAgY2FsbHMgaW4gYFRpbmtlckdyYXBoYC4KLSogQWRkZWQgYFBhdGguaGVhZCgpYCBhbmQgYFBhdGguaXNFbXB0eSgpYCB3aXRoIGRlZmF1bHQgbWV0aG9kIGltcGxlbWVudGF0aW9ucy4KLSogRml4ZWQgYSBgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbmAgYnVnIHdpdGggYEdyb3VwWFhYU3RlcGAgd2hlcmUgaWYgdGhlIHJlZHVjZWQgYFRyYXZlcnNlclNldGAgaXMgZW1wdHksIGRvbid0IGFkZCB0aGUga2V5L3ZhbHVlLgotKiBGaXhlZCBhIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAgYnVnIHdpdGggcHJvZmlsaW5nIGBHcm91cFNpZGVFZmZlY3RTdGVwYCBpbiBPTFRQLgotKiBJbXByb3ZlZCBhYmlsaXR5IHRvIHJlbGVhc2UgcmVzb3VyY2VzIGluIGBHcmFwaFByb3ZpZGVyYCBpbnN0YW5jZXMgaW4gdGhlIHRlc3Qgc3VpdGUuCi0qIEZhY3RvcmVkIGBHcmVtbGluUGx1Z2luYCBmdW5jdGlvbmFsaXR5IG91dCBvZiBncmVtbGluLWdyb292eSBhbmQgaW50byBncmVtbGluLWNvcmUgLSByZWxhdGVkIGNsYXNzZXMgd2VyZSBkZXByZWNhdGVkLgotKiBBZGRlZCBhIGBmb3JjZWAgb3B0aW9uIGZvciBraWxsaW5nIHNlc3Npb25zIHdpdGhvdXQgd2FpdGluZyBmb3IgdHJhbnNhY3Rpb24gY2xvc2Ugb3IgdGltZW91dCBvZiBhIGN1cnJlbnRseSBydW5uaW5nIGpvYiBvciBtdWx0aXBsZSBqb2JzLgotKiBEZXByZWNhdGVkIGBTZXNzaW9uLmtpbGwoKWAgYW5kIGBTZXNzaW9uLm1hbnVhbEtpbGwoKWAuCi0qIEFkZGVkIGBUcmF2ZXJzYWwucHJvbWlzZSgpYCBtZXRob2QgdG8gYWxsb3cgZm9yIGFzeW5jaHJvbm91cyB0cmF2ZXJzYWwgcHJvY2Vzc2luZyBvbiAicmVtb3RlIiB0cmF2ZXJzYWxzLgotKiBEZXByZWNhdGVkIGBSZW1vdGVDb25uZWN0aW9uLnN1Ym1pdChCeXRlY29kZSlgIGluIGZhdm9yIG9mIGBzdWJtaXRBc3luYyhCeXRlY29kZSlgLgotKiBBZGRlZCBgY2hvb3NlKHByZWRpY2F0ZSx0cmF2ZXJzYWwpYCBhbmQgYGNob29zZSh0cmF2ZXJzYWwsdHJhdmVyc2FsKWAgdG8gZWZmZWN0IGlmL3RoZW4tc2VtYW50aWNzIChubyBlbHNlKS4gRXF1aXZhbGVudCB0byBgY2hvb3NlKHgseSxpZGVudGl0eSgpKWAuCi0qIFJlbW92ZWQgYEltbXV0YWJsZVBhdGguVGFpbFBhdGhgIGFzIGl0IGlzIG5vIGxvbmdlciByZXF1aXJlZCB3aXRoIG5ldyByZWN1cnNpb24gbW9kZWwuCi0qIFJlbW92ZWQgY2FsbCBzdGFjayByZWN1cnNpb24gaW4gYEltbXV0YWJsZVBhdGhgLgotKiBHcmVtbGluLVB5dGhvbiBzZXJpYWxpemVzIGBCeXRlY29kZWAgYXMgYW4gb2JqZWN0IChpbnN0ZWFkIG9mIGEgSlNPTiBzdHJpbmcpIHdoZW4gc3VibWl0IG92ZXIgdGhlIGBSZW1vdGVDb25uZWN0aW9uYC4KLSogRml4ZWQgdGhlIGhhbmRsaW5nIG9mIHRoZSBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgcGFzcy10aHJvdWdoIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBkcml2ZXIuCi0qIGBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneWAgbm93IHVzZXMgYSBoaWRkZW4gbGFiZWwgbWFya2VyIG1vZGVsIHRvIGF2b2lkIHJlcGVhdGVkIHJlY3Vyc2lvbiBmb3IgaW52YWxpZGF0aW5nIHN0ZXBzLgotKiBgUGF0aFByb2Nlc3NvclN0cmF0ZWd5YCBjYW4gaW5saW5lIGNlcnRhaW4gYHdoZXJlKHRyYXZlcnNhbClgLXN0ZXBzIGluIG9yZGVyIHRvIGluY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIHN0YXItbG9jYWwgY2hpbGRyZW4uCi0qIGBTcGFya0dyYXBoQ29tcHV0ZXJgIG5vIGxvbmdlciBzdGFydHMgYSB3b3JrZXIgaXRlcmF0aW9uIGlmIHRoZSB3b3JrZXIncyBwYXJ0aXRpb24gaXMgZW1wdHkuCi0qIEFkZGVkIGBQcm9qZWN0U3RlcC5nZXRQcm9qZWN0S2V5cygpYCBmb3Igc3RyYXRlZ2llcyB0aGF0IHJlbHkgb24gc3VjaCBpbmZvcm1hdGlvbi4KLSogQWRkZWQgYFZlcnRleEZlYXR1cmVzLnN1cHBvcnRzRHVwbGljYXRlTXVsdGlQcm9wZXJ0aWVzKClgIGZvciBncmFwaHMgdGhhdCBvbmx5IHN1cHBvcnQgdW5pcXVlIHZhbHVlcyBpbiBtdWx0aS1wcm9wZXJ0aWVzLgotKiBEZXByZWNhdGVkIHRoZSAicGVyZm9ybWFuY2UiIHRlc3RzIGluIGBPcHRJbmAuCi0qIERlcHJlY2F0ZWQgYGdldEluc3RhbmNlKClgIG1ldGhvZHMgaW4gZmF2b3Igb2YgYGluc3RhbmNlKClgIGZvciBiZXR0ZXIgY29uc2lzdGVuY3kgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQVBJLgotKiBCbG9jayBjYWxscyB0byAicmVtb3RlIiB0cmF2ZXJzYWwgc2lkZS1lZmZlY3RzIHVudGlsIHRoZSB0cmF2ZXJzYWwgcmVhZCBpcyBjb21wbGV0ZSB3aGljaCBzaWduaWZpZXMgYW4gZW5kIHRvIGl0ZXJhdGlvbi4KLSogQWRkZWQgYFBpY2subm9uZWAgYW5kIGBQaWNrLmFueWAgdG8gdGhlIHNlcmlhbGl6ZXJzIGFuZCBpbXBvcnRlcnMuCi0qIEFkZGVkIGEgY2xhc3MgbG9hZGVyIHRvIGBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlYCB3aGljaCBndWFyYW50ZWVzIHN0cmF0ZWdpZXMgYXJlIHJlZ2lzdGVyZWQgcHJpb3IgdG8gYEdsb2JhbENhY2hlLmdldFN0cmF0ZWdpZXMoKWAuCi0qIEZpeGVkIGEgc2V2ZXJlIGJ1ZyB3aGVyZSBgR3JhcGhDb21wdXRlcmAgc3RyYXRlZ2llcyBhcmUgbm90IGJlaW5nIGxvYWRlZCB1bnRpbCB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgdHJhdmVyc2FsIHNvdXJjZS4KLSogVGhlIHJvb3QgdHJhdmVyc2FsIG5vdyB0aHJvd3MgcmVndWxhciBgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbmAgaW5zdGVhZCBvZiBgRmFzdE5vU3VjaEVsZW1lbnRFeGNlcHRpb25gLiAoKmJyZWFraW5nKikKLSogQWRkZWQgYSBzaG9ydCBzbGVlcCB0byBwcmV2ZW50IHRyYXZlcnNhbCBmcm9tIGZpbmlzaGluZyBiZWZvcmUgaXQgY2FuIGJlIGludGVycnVwdGVkIGR1cmluZyBgVHJhdmVyc2FsSW50ZXJydXB0aW9uQ29tcHV0ZXJUZXN0YC4KLSogQWRkZWQgc3VwcG9ydCBmb3IgU1NMIGNsaWVudCBhdXRoZW50aWNhdGlvbgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTM4MCBkZWR1cCgpIGRvZXNuJ3QgZGVkdXAgaW4gcmFyZSBjYXNlcwotKiBUSU5LRVJQT1AtMTM4NCBEZXNjcmlwdGlvbiBvZiBmaWx0ZXIgZnVuY3Rpb24gaW4gdHJhdmVyc2FsIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTE0MjggcHJvZmlsZSgpIHRocm93cyBOUEUgZm9yIHVuaW9uKGdyb3VwLCBncm91cCkKLSogVElOS0VSUE9QLTE1MjEgTXV0YXRpbmcgc3RlcHMgZG9uJ3QgcmVjb2duaXplIHNpZGUtZWZmZWN0cwotKiBUSU5LRVJQT1AtMTUyNSBQbHVnIFZlcnRleFByb2dyYW0gaXRlcmF0aW9uIGxlYWsgb24gZW1wdHkgU3BhcmsgUkREIHBhcnRpdGlvbnMKLSogVElOS0VSUE9QLTE1MzQgR3JlbWxpbiBTZXJ2ZXIgaW5zdGFuY2VzIGxlYWtpbmcgaW4gdGVzdHMKLSogVElOS0VSUE9QLTE1MzcgUHl0aG9uIHRlc3RzIHNob3VsZCBub3QgdXNlIGhhcmQtY29kZWQgbnVtYmVyIG9mIHdvcmtlcnMKLSogVElOS0VSUE9QLTE1NDcgVHdvIGJ1Z3MgZm91bmQgYXNzb2NpYXRlZCB3aXRoIE1hdGNoU3RlcDogUGF0aCByZXRyYWN0aW9uIGFuZCByYW5nZSBjb3VudC4KLSogVElOS0VSUE9QLTE1NDggVHJhdmVyc2FscyBjYW4gY29tcGxldGUgYmVmb3JlIGludGVycnVwdGVkIGluIFRyYXZlcnNhbEludGVycnVwdGlvbkNvbXB1dGVyVGVzdAotKiBUSU5LRVJQT1AtMTU2MCBDYWNoZSBpbiBHcm9vdnlDbGFzc0xvYWRlciBtYXkgY29udGludWUgdG8gZ3JvdwotKiBUSU5LRVJQT1AtMTU2MSBncmVtaWxuLXB5dGhvbiBHcmFwaFNPTldyaXRlciBkb2Vzbid0IHByb3Blcmx5IHNlcmlhbGl6ZSBsb25nIGluIFB5dGhvbiAzLjUKLSogVElOS0VSUE9QLTE1NjcgR3JhcGhTT04gZGVzZXJpYWxpemF0aW9uIGZhaWxzIHdpdGggd2l0aGluKCdhJykKLSogVElOS0VSUE9QLTE1NzMgQmluZGluZ3MgZG9uJ3Qgd29yayBpbiBjb2FsZXNjZQotKiBUSU5LRVJQT1AtMTU3NiBncmVtbGluLXB5dGhvbiBjYWxscyBub24tZXhpc3RlbnQgbWV0aG9kcwotKiBUSU5LRVJQT1AtMTU4MSBHcmVtbGluLVB5dGhvbiBkcml2ZXIgY29ubmVjdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUuCi0qIFRJTktFUlBPUC0xNTgzIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kgcmV0cmFjdHMga2V5cyB0aGF0IGFyZSBhY3R1YWxseSBuZWVkZWQKLSogVElOS0VSUE9QLTE1ODUgT0xBUCBkZWR1cCBvdmVyIG5vbiBlbGVtZW50cwotKiBUSU5LRVJQT1AtMTU4NyBHcmVtbGluIFNlcnZlciBTdWJncmFwaCBDYXJkaW5hbGl0eSBOb3QgUmVzcGVjdGVkCi0qIFRJTktFUlBPUC0xNTk0IExhenlCYXJyaWVyU3RyYXRlZ3kgZG9lcyBub3QgYWN0aXZhdGUgd2l0aCBQcm9maWxlU3RlcAotKiBUSU5LRVJQT1AtMTYwNSBncmVtbGluLWNvbnNvbGUgMy4yLjMgLWUgY2FuIG5vIGxvbmdlciB0YWtlIHBhdGhzIHJlbGF0aXZlIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtODg3IEZhc3ROb1N1Y2hFbGVtZW50RXhjZXB0aW9uIGhpZGVzIHN0YWNrIHRyYWNlIGluIGNsaWVudCBjb2RlCi0qIFRJTktFUlBPUC05MTkgRmVhdHVyZXMgbmVlZHMgdG8gc3BlY2lmeSB3aGV0aGVyIDIgdmVydGV4IHByb3BlcnRpZXMgd2l0aCBzYW1lIGtleS92YWx1ZSBpcyBhbGxvd2VkLgotKiBUSU5LRVJQT1AtOTMyIEFkZCBhYmlsaXR5IHRvIGNhbmNlbCBzY3JpcHQgZXhlY3V0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIEdyZW1saW4gU2VydmVyIFNlc3Npb24KLSogVElOS0VSUE9QLTEyNDggT3JkZXJHbG9iYWxTdGVwIHNob3VsZCB1c2UgbG9jYWwgc3RhciBncmFwaCB0byBjb21wdXRlIHNvcnRzLCBwcmlvciB0byByZWR1Y3Rpb24uCi0qIFRJTktFUlBPUC0xMjYxIFNpZGUtZWZmZWN0IGdyb3VwKCkuYnkoKSBjYW4ndCBoYW5kbGUgdXNlci1kZWZpbmVkIG1hcHMKLSogVElOS0VSUE9QLTEyOTIgVGlua2VyR3JhcGhDb21wdXRlciBWZXJ0ZXhQcm9ncmFtSW50ZXJjZXB0b3JzCi0qIFRJTktFUlBPUC0xMzcyIEltbXV0YWJsZVBhdGggc2hvdWxkIG5vdCB1c2UgSmF2YSByZWN1cnNpb24gKGNhbGwgc3RhY2tzIGFyZSB3YWNrKQotKiBUSU5LRVJQT1AtMTQzMyBBZGQgc3RlcHMgdG8gZGV2IGRvY3MgdG8gaGVscCBjb21taXR0ZXJzIGdldCB0aGVpciBrZXlzIGluIG9yZGVyCi0qIFRJTktFUlBPUC0xNDM0IEJsb2NrIGNhbGxzIHRvIHRyYXZlcnNhbCBzaWRlLWVmZmVjdHMgdW50aWwgcmVhZCBpcyBjb21wbGV0ZQotKiBUSU5LRVJQT1AtMTQ3MSBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSB1c2UgaGlkZGVuIG1hcmtlciB0byBhdm9pZCByZXBlYXRlZCByZWN1cnNpb24uCi0qIFRJTktFUlBPUC0xNDczIEdpdmVuIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3ksIFBhdGhQcm9jZXNzb3JTdHJhdGVneSBjYW4gYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBwYXJ0aWFsIHdoZXJlKCkgaW5saW5pbmcuCi0qIFRJTktFUlBPUC0xNDgyIGhhcyh4KS5oYXMoeSkgY2hhaW5zIHNob3VsZCBiZSBoYXMoeC5hbmQoeSkpCi0qIFRJTktFUlBPUC0xNDkwIFByb3ZpZGVyIGEgRnV0dXJlIGJhc2VkIFRyYXZlcnNhbC5hc3luYyhGdW5jdGlvbjxUcmF2ZXJzYWwsVj4pIHRlcm1pbmFsIHN0ZXAKLSogVElOS0VSUE9QLTE1MDIgQ2hhaW5lZCBoYXMoKS1zdGVwcyBzaG91bGQgc2ltcGx5IGxlZnQtYXBwZW5kIEhhc0NvbnRhaW5lcnMgaW4gR3JlbWxpbi1KYXZhLgotKiBUSU5LRVJQT1AtMTUwNyBQaWNrLmFueSBhbmQgUGljay5ub25lIGFyZSBub3QgaW4gR3JhcGhTT04gb3IgR3JlbWxpbi1QeXRob24KLSogVElOS0VSUE9QLTE1MDggQWRkIGNob29zZShwcmVkaWNhdGUsdHJ1ZVRyYXZlcnNhbCkKLSogVElOS0VSUE9QLTE1MjcgRG8gbm90IG92ZXJyaWRlIHJlZ2lzdGVyZWQgc3RyYXRlZ2llcyBpbiBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlCi0qIFRJTktFUlBPUC0xNTMwIENvbnNpc3RlbnQgdXNlIG9mIGluc3RhbmNlKCkKLSogVElOS0VSUE9QLTE1MzkgQ3JlYXRlIGEgQ29tcGxleFRyYXZlcnNhbFRlc3Qgd2l0aCBjcmF6eSBuZXN0ZWQgZ25hcmx5IHRyYXZlcnNhbHMuCi0qIFRJTktFUlBPUC0xNTQyIEFkZCBQYXRoLmlzRW1wdHkoKSB3aXRoIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KLSogVElOS0VSUE9QLTE1NjIgTWlncmF0ZSBTY3JpcHRFbmdpbmUtcmVsYXRlZCBjb2RlIHRvIGdyZW1saW4tY29yZQotKiBUSU5LRVJQT1AtMTU3MCBCdW1wIHRvIE5ldHR5IDQuMC40MgotKiBUSU5LRVJQT1AtMTU4MiBUcmF2ZXJzYWxPcFByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IGN1c3RvbSBzZXJpYWxpemVycwotKiBUSU5LRVJQT1AtMTU4NCBBZGQgZ3J5byBzZXJpYWxpemVycyB0byBzdXBwb3J0IHR5cGVzIGNvdmVyZWQgaW4gR3JhcGhTT04KLSogVElOS0VSUE9QLTE1ODggQWRkZWQgVGVybWluYWwgU3RlcHMgc2VjdGlvbiB0byB0aGUgZG9jcwotKiBUSU5LRVJQT1AtMTU4OSBSZS1JbnRyb2R1Y2UgQ2xvc2VhYmxlSXRlcmF0b3IKLSogVElOS0VSUE9QLTE1OTAgQ3JlYXRlIFRpbmtlcldvcmtlck1lbW9yeSBhbmQgUGFydGl0aW9uZWQgVmVydGljZXMKLSogVElOS0VSUE9QLTE2MDAgQ29uc2lzdGVudCB1c2Ugb2YgYmFzZSA2NCBlbmNvZGVkIGJ5dGVzIGZvciBTQVNMIG5lZ290aWF0aW9uCi0qIFRJTktFUlBPUC0xNjAyIFN1cHBvcnQgU1NMIGNsaWVudCBjZXJ0aWZpY2F0ZSBhdXRoZW50aWNhdGlvbgotKiBUSU5LRVJQT1AtMTYwNiBSZWZhY3RvciBHcm91cFN0ZXAgdG8gbm90IGhhdmUgdGhlIHJlZHVjdGlvbiB0cmF2ZXJzYWwgaW5jbHVkZWQgaW4gaXRzIEJpT3BlcmF0b3IuCi0qIFRJTktFUlBPUC0xNjEwIERlcHJlY2F0ZSBncmVtbGluLWdyb292eS10ZXN0IHByb3ZpZGVyIGJhc2VkIHRlc3RzCi0qIFRJTktFUlBPUC0xNjE3IENyZWF0ZSBhIFNpbmdsZUl0ZXJhdGlvblN0cmF0ZWd5IHdoaWNoIHdpbGwgZG8gaXRzIGJlc3QgdG8gcmV3cml0ZSBPTEFQIHRyYXZlcnNhbHMgdG8gbm90IG1lc3NhZ2UgcGFzcy4KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4yLnguYXNjaWlkb2MjcmVsZWFzZS0zLTItNCwgMy4yLjQgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTItM11dCiA9PT0gVGlua2VyUG9wIDMuMi4zIChSZWxlYXNlIERhdGU6IE9jdG9iZXIgMTcsIDIwMTYpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy0xLTUsIDMuMS41Pj4uCi0KLSogUmVzdHJ1Y3R1cmVkIEdyZW1saW4tUHl0aG9uJ3MgR3JhcGhTT04gSS9PIHBhY2thZ2UgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHVzZXJzIHRvIHJlZ2lzdGVyIHNlcmlhbGl6ZXJzL2Rlc2VyaWFsaXplcnMuICgqYnJlYWtpbmcqKQotKiBGaXhlZCBhIGJ1ZyB3aXRoIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgdGhhdCB3YXMgcmV0dXJuaW5nIGEgZmluYWwgcmVzdWx0IHByaW9yIHRvIGNvbW1pdHRpbmcgdGhlIHRyYW5zYWN0aW9uLgotKiBGaXhlZCBhIGJ1ZyBpbiBgQ29ubmVjdGl2ZVN0cmF0ZWd5YCB3aGVyZSBpbmZpeCBhbmQvb3Igd2FzIG5vdCBjb3JyZWN0bHkgcmVhc29uaW5nIG9uIGBjaG9vc2UoKWAgYEhhc05leHRTdGVwYCBpbmplY3Rpb25zLgotKiBJbmNyZWFzZWQgcGVyZm9ybWFuY2Ugb2YgYENyZWRlbnRpYWxHcmFwaGAgYXV0aGVudGljYXRpb24uCi0qIFJlbW92ZWQgSmF2YSA4IHN0cmVhbSB1c2FnZSBmcm9tIGBUcmF2ZXJzYWxIZWxwZXJgIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgotKiBGaXhlZCBhIGJ1ZyBpbiBgUmVwZWF0U3RlcGAgd2hlcmUgYGVtaXQoKS5hcygneCcpYCB3YXNuJ3QgYWRkaW5nIHRoZSBzdGVwIGxhYmVscyB0byB0aGUgZW1pdC10cmF2ZXJzZXIuCi0qIEFkZGVkIGBHcmFwaENvbXB1dGluZy5hdE1hc3Rlcihib29sZWFuKWAgdG8gYWxsb3cgc3RlcHMgdG8ga25vdyB3aGV0aGVyIHRoZXkgYXJlIGV4ZWN1dGluZyBhdCBtYXN0ZXIgb3IgZGlzdHJpYnV0ZWQgYXQgd29ya2Vycy4KLSogRml4ZWQgYSBidWcgaW4gT0xBUCB3aGVyZSBgRGVkdXBHbG9iYWxTdGVwYCB3YXNuJ3QgZGUtZHVwaW5nIGxvY2FsIG1hc3RlciB0cmF2ZXJzZXJzLgotKiBBZGRlZCBgSGFzQ29udGFpbmVySG9sZGVyLnJlbW92ZUhhc0NvbnRhaW5lcigpYC1tZXRob2Qgd2l0aCBkZWZhdWx0IGBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbmAgaW1wbGVtZW50YXRpb24uCi0qIGBUcmF2ZXJzYWxTb3VyY2Uud2l0aENvbXB1dGVyKClgIGlzIHNpbXBsaWZpZWQgdG8gYWRkIGEgYFZlcnRleFByb2dyYW1TdHJhdGVneWAuIEVhc2llciBmb3IgbGFuZ3VhZ2UgdmFyaWFudHMuCi0qIEZpeGVkIGEgYFNldGAsIGBMaXN0YCwgYE1hcGAgYnVnIGluIHRoZSB2YXJpb3VzIGBUcmFuc2xhdG9yc2Agd2hlcmUgc3VjaCBjb2xsZWN0aW9ucyB3ZXJlIG5vdCBiZWluZyBpbnRlcm5hbGx5IHRyYW5zbGF0ZWQuCi0qIEZpeGVkIGEgYEJ5dGVjb2RlYCBidWcgd2hlcmUgbmVzdGVkIHN0cnVjdHVyZXMgKG1hcCwgbGlzdCwgc2V0KSB3ZXJlIG5vdCBiZWluZyBhbmFseXplZCBmb3IgYmluZGluZ3MgYW5kIGJ5dGVjb2RlIGNvbnZlcnNpb25zLgotKiBGaXhlZCBhIGBTdHJpbmdgIGJ1ZyBpbiBgR3Jvb3Z5VHJhbnNsYXRvcmAgYW5kIGBQeXRob25UcmFuc2xhdG9yYCB3aGVyZSBpZiB0aGUgc3RyaW5nIGhhcyBkb3VibGUtcXVvdGVzIGl0IG5vdyB1c2VzICIiIiAiIiIuCi0qIEFkZGVkIGEgZGVmYXVsdCBgVHJhdmVyc2FsU3RyYXRlZ3kuZ2V0Q29uZmlndXJhdGlvbigpYCB3aGljaCByZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG5lZWRlZCB0byBjb25zdHJ1Y3QgdGhlIHN0cmF0ZWd5LgotKiBgQ29tcHV0ZXJgIGluc3RhbmNlcyBjYW4gYmUgY3JlYXRlZCB3aXRoIGBDb21wdXRlci5jcmVhdGUoQ29uZmlndXJhdGlvbilgIGFuZCBhY2Nlc3NlZCB2aWEgYENvbXB1dGVyLmdldENvbmYoKWAuCi0qIEV2ZXJ5IGBUcmF2ZXJzYWxTdHJhdGVneWAgY2FuIGJlIGNyZWF0ZWQgdmlhIGEgYENvbmZpZ3VyYXRpb25gIGFuZCBhIHN0YXRpYyBgTXlTdHJhdGVneS5jcmVhdGUoQ29uZmlndXJhdGlvbilgLgotKiBBZGRlZCBsYW5ndWFnZS1hZ25vc3RpYyBgVHJhdmVyc2FsU3RyYXRlZ3lgIHN1cHBvcnQgaW4gYEJ5dGVjb2RlYC4KLSogQWRkZWQgYFBhcnRpdGlvblN0cmF0ZWd5LkJ1aWxkZXIucmVhZFBhcnRpdGlvbnMoKWAgYW5kIGRlcHJlY2F0ZWQgYFBhcnRpdGlvblN0cmF0ZWd5LkJ1aWxkZXIuYWRkUGFydGl0aW9uKClgLgotKiBBIG5ldyB2ZXJzaW9uIG9mIGBMYXp5QmFycmllclN0cmF0ZWd5YCBoYXMgYmVlbiBjcmVhdGVkIGFuZCBhZGRlZCB0byB0aGUgZGVmYXVsdCBzdHJhdGVnaWVzLgotKiBgRmlsdGVyUmFua1N0cmF0ZWd5YCBub3cgcHJvcGFnYXRlcyBsYWJlbHMgInJpZ2h0IiBvdmVyIG5vbi1gU2NvcGluZ2AgZmlsdGVycy4KLSogRml4ZWQgYSBidWcgaW4gYENvbm5lY3RpdmVQYCB3aGVyZSBuZXN0ZWQgZXF1aXZhbGVudCBjb25uZWN0aXZlcyBzaG91bGQgYmUgaW5saW5lZC4KLSogRml4ZWQgYSBidWcgaW4gYEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5YCB3aGVyZSBgVHJlZVN0ZXBgIHRyYXZlcnNhbHMgd2VyZSBhbGxvd2VkLgotKiBGaXhlZCBhIGVuZC1zdGVwIGxhYmVsIGJ1ZyBpbiBgTWF0Y2hQcmVkaWNhdGVTdHJhdGVneWAuCi0qIEZpeGVkIGEgYnVnIGluIGBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5YCB3aGVyZSBpbmxpbmVkIHRyYXZlcnNhbHMgZGlkIG5vdCBoYXZlIHN0cmF0ZWdpZXMgYXBwbGllZCB0byBpdC4KLSogRml4ZWQgYSBidWcgaW4gYFJlcGVhdFVucm9sbFN0cmF0ZWd5YCB3aGVyZSBpbmxpbmVkIHRyYXZlcnNhbCBkaWQgbm90IGhhdmUgc3RyYXRlZ2llcyBhcHBsaWVkIHRvIGl0LgotKiBGaXhlZCBwYWRkaW5nIG9mIHByb21wdCBpbiBHcmVtbGluIENvbnNvbGUgd2hlbiB0aGUgbnVtYmVyIG9mIGxpbmVzIHdlbnQgYmV5b25kIGEgc2luZ2xlIGRpZ2l0LgotKiBGaXhlZCBHcmFwaFNPTiAyLjAgbmFtZXNwYWNlIGZvciBgVGlua2VyR3JhcGhgIHRvIGJlICJ0aW5rZXIiIGluc3RlYWQgb2YgImdyZW1saW4iLgotKiBEcm9wcGVkIHNlcmlhbGl6YXRpb24gc3VwcG9ydCBpbiBHcmFwaFNPTiAyLjAgZm9yIGBDYWxlbmRhcmAsIGBUaW1lWm9uZWAsIGFuZCBgVGltZXN0YW1wYC4KLSogQWRkZWQgYFRyYXZlcnNhbEhlbHBlci5jb3B5TGFiZWxzKClgIGZvciBjb3B5aW5nIChvciBtb3ZpbmcpIGxhYmVscyBmb3JtIG9uZSBzdGVwIHRvIGFub3RoZXIuCi0qIEFkZGVkIGBUcmF2ZXJzYWxIZWxwZXIuYXBwbHlTaW5nbGVMZXZlbFN0cmF0ZWdpZXMoKWAgd2hpY2ggd2lsbCBhcHBseSBhIHN1YnNldCBvZiBzdHJhdGVnaWVzIGJ1dCBub3Qgd2FsayB0aGUgY2hpbGQgdHJlZS4KLSogQWRkZWQgdGhlIGNvbmNlcHQgdGhhdCBoaWRkZW4gbGFiZWxzIHVzaW5nIGR1cmluZyB0cmF2ZXJzYWwgY29tcGlsYXRpb24gYXJlIHJlbW92ZWQgYXQgdGhlIGVuZCBkdXJpbmcgYFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3lgLiAoKmJyZWFraW5nKikKLSogQWRkZWQgYElubGluZUZpbHRlclN0cmF0ZWd5YCB3aGljaCB3aWxsIGRldGVybWluZSBpZiB2YXJpb3VzIGBUcmF2ZXJzYWxQYXJlbnRgIGNoaWxkcmVuIGFyZSBmaWx0ZXJzIGFuZCBpZiBzbywgaW5saW5lIHRoZW0uCi0qIFJlbW92ZWQgYElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5YCBmcm9tIHRoZSBkZWZhdWx0IGxpc3RpbmcgYXMgaXRzIG5vdCB3b3J0aCB0aGUgY2xvY2sgY3ljbGVzLgotKiBSZW1vdmVkIHRoZSAiISIgc3ltYm9sIGluIGBOb3RTdGVwLnRvU3RyaW5nKClgIGFzIGl0IGlzIGNvbmZ1c2luZyBhbmQgdGhlIGBOb3RTdGVwYC1uYW1lIGlzIHN1ZmZpY2llbnQuCi0qIEZpeGVkIGEgYnVnIGluIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCAoT0xBUCkgYXJvdW5kIG9yZGVyaW5nIGFuZCBjb25uZWN0aXZlcyAoaS5lLiBgYW5kKClgIGFuZCBgb3IoKWApLgotKiBBZGRlZCBgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QuY2hlY2tPcmRlcmVkUmVzdWx0cygpYCB0byBtYWtlIHRlc3Rpbmcgb3JkZXJlZCByZXN1bHRzIGVhc2llci4KLSogYEFic3RyYWN0TGFtYmRhVHJhdmVyc2FsYCBub3cgc3VwcG9ydHMgYSBgYnlwYXNzVHJhdmVyc2FsYCB3aGVyZSBpdCBpcyBwb3NzaWJsZSBmb3Igc3RyYXRlZ2llcyB0byByZWRlZmluZSBzdWNoIGxhbWJkYSB0cmF2ZXJzYWxzLgotKiBBZGRlZCBhbiBpbnRlcm5hbCB1dGlsaXR5IGBDbGFzc0ZpbHRlclN0ZXBgIHdoaWNoIGRldGVybWluZXMgaWYgdGhlIHRyYXZlcnNlciBvYmplY3QncyBjbGFzcyBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZWQgY2xhc3MuCi0qIGBDb25uZWN0aXZlU3RlcGAgZXh0ZW5kcyBgRmlsdGVyU3RlcGAgYW5kIHRodXMsIGlzIG1vcmUgYXBwcm9wcmlhdGVseSBjYXRlZ29yaXplZCBpbiB0aGUgc3RlcCBoaWVyYXJjaHkuCi0qIGBQcm9wZXJ0eU1hcFN0ZXBgIHN1cHBvcnRzIGEgcHJvdmlkZWQgdHJhdmVyc2FsIGZvciBhY2Nlc3NpbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGVsZW1lbnQuICgqYnJlYWtpbmcqKQotKiBgU3ViZ3JhcGhTdHJhdGVneWAgbm93IHN1cHBvcnRzIHZlcnRleCBwcm9wZXJ0eSBmaWx0ZXJpbmcuCi0qIEZpeGVkIGEgYnVnIGluIEdyZW1saW4tUHl0aG9uIGBQYCB3aGVyZSBwcmVkaWNhdGVzIHJldmVyc2VkIHRoZSBvcmRlciBvZiB0aGUgcHJlZGljYXRlcy4KLSogQWRkZWQgdGVzdHMgdG8gYERlZHVwVGVzdGAgZm9yIHRoZSBgZGVkdXAoU2NvcGUsIFN0cmluZy4uLilgIG92ZXJsb2FkLgotKiBBZGRlZCBtb3JlIGRldGFpbGVkIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIGZvciBJTyBmb3JtYXRzLgotKiBGaXhlZCBhIGJ1ZyBpbiBzZXJpYWxpemF0aW9uIG9mIGBMYW1iZGFgIGluc3RhbmNlcyBpbiBHcmFwaFNPTiwgd2hpY2ggcHJldmVudGVkIHRoZWlyIHVzZSBpbiByZW1vdGUgdHJhdmVyc2Fscy4KLSogRml4ZWQgYSBuYW1pbmcgYnVnIGluIEdyZW1saW4tUHl0aG9uIHdoZXJlIGBQLl9hbmRgIGFuZCBgUC5fb3JgIHNob3VsZCBiZSBgUC5hbmRfYCBhbmQgYFAub3JfYC4gKCpicmVha2luZyopCi0qIGB3aGVyZSgpYCBwcmVkaWNhdGUtYmFzZWQgc3RlcHMgbm93IHN1cHBvcnQgYGJ5KClgLW1vZHVsYXRpb24uCi0qIEFkZGVkIEdyeW8gc2VyaWFsaXphdGlvbiBmb3IgYEJ5dGVjb2RlYC4KLSogTW92ZWQgdXRpbGl0eS1iYXNlZCBzZXJpYWxpemVycyB0byBgVXRpbFNlcmlhbGl6ZXJzYCBmb3IgR3J5byAtIHRoZXNlIGNsYXNzZXMgd2VyZSBwcml2YXRlIGFuZCBoZW5jZSB0aGlzIGNoYW5nZSBpcyBub24tYnJlYWtpbmcuCi0qIGBUcmF2ZXJzYWxSaW5nYCByZXR1cm5zIGEgYG51bGxgIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdHJhdmVyc2FscyAocHJldmlvdXNseSBgSWRlbnRpdHlUcmF2ZXJzYWxgKS4KLSogRGVwcmVjYXRlZCBgR3JhcGguRXhjZXB0aW9ucy5lbGVtZW50Tm90Rm91bmRFeGNlcHRpb24oKWAgYXMgaXQgd2FzIG5vdCB1c2VkIGluIHRoZSBjb2RlIGJhc2Ugb3V0c2lkZSBvZiB0aGUgdGVzdCBzdWl0ZS4KLSogRml4ZWQgYSBgSmF2YVRyYW5zbGF0b3JgIGJ1ZyB3aGVyZSBgQnl0ZWNvZGVgIGluc3RydWN0aW9ucyB3ZXJlIGJlaW5nIG11dGF0ZWQgZHVyaW5nIHRyYW5zbGF0aW9uLgotKiBBZGRlZCBgUGF0aGAgdG8gR3JlbWxpbi1QeXRob24gd2l0aCByZXNwZWN0aXZlIEdyYXBoU09OIDIuMCBkZXNlcmlhbGl6ZXIuCi0qIGBUcmF2ZXJzYWxgIGFuZCBgVHJhdmVyc2FsU291cmNlYCBub3cgaW1wbGVtZW50IGBBdXRvQ2xvc2VhYmxlYC4KLSogQWRkZWQgImtlZXAtYWxpdmUiIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIEphdmEgZHJpdmVyLCB3aGljaCB3aWxsIHNlbmQgYSBoZWFydGJlYXQgdG8gdGhlIHNlcnZlciB3aGVuIG5vcm1hbCByZXF1ZXN0IGFjdGl2aXR5IG9uIGEgY29ubmVjdGlvbiBzdG9wcyBmb3IgYSBwZXJpb2Qgb2YgdGltZS4KLSogUmVuYW1lZCB0aGUgYGVtcHR5LnJlc3VsdC5pbmRpY2F0b3JgIHByZWZlcmVuY2UgdG8gYHJlc3VsdC5pbmRpY2F0b3IubnVsbGAgaW4gR3JlbWxpbiBDb25zb2xlCi0qIElmIGByZXN1bHQuaW5kaWNhdG9yLm51bGxgIGlzIHNldCB0byBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gbm8gInJlc3VsdCBsaW5lIiBpcyBwcmludGVkIGluIEdyZW1saW4gQ29uc29sZS4KLSogRGVwcmVjYXRlZCBgcmVjb25uZWN0SW5pdGlhbERlbGF5YCBvbiB0aGUgSmF2YSBkcml2ZXIuCi0qIEFkZGVkIHNvbWUgdmFsaWRhdGlvbnMgdG8gYENsdXN0ZXJgIGluc3RhbmNlIGJ1aWxkaW5nLgotKiBQcm9kdWNlZCBiZXR0ZXIgZXJyb3JzIGluIGByZWFkR3JhcGhgIG9mIGBHcnlvUmVhZGVyYCBhbmQgYEdyYXBoU09OUmVhZGVyYCBpZiBhIGBWZXJ0ZXhgIGNhbm5vdCBiZSBmb3VuZCBpbiB0aGUgY2FjaGUgb24gZWRnZSBsb2FkaW5nLgotKiBWZXJ0ZXhQcm9ncmFtcyBjYW4gbm93IGRlY2xhcmUgdHJhdmVyc2VyIHJlcXVpcmVtZW50cywgZS5nLiB0byBoYXZlIGFjY2VzcyB0byB0aGUgcGF0aCB3aGVuIHVzZWQgd2l0aCBgLnByb2dyYW0oKWAuCi0qIE5ldyBidWlsZCBvcHRpb25zIGZvciBgZ3JlbWxpbi1weXRob25gIHdoZXJlIGAtRGdsdlB5dGhvbmAgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLgotKiBBZGRlZCBtaXNzaW5nIGBJbmV0QWRkcmVzc2AgdG8gR3JhcGhTT04gZXh0ZW5zaW9uIG1vZHVsZS4KLSogQWRkZWQgbmV3IHJlY2lwZSBmb3IgIlBhZ2luYXRpb24iLgotKiBBZGRlZCBuZXcgcmVjaXBlIGZvciAiUmVjb21tZW5kYXRpb24iLgotKiBBZGRlZCBmdW5jdGlvbmFsaXR5IHRvIEdyZW1saW4tU2VydmVyIFJFU1QgZW5kcG9pbnQgdG8gZm9yd2FyZCBFeGNlcHRpb24gTWVzc2FnZXMgYW5kIENsYXNzIGluIEhUVFAgUmVzcG9uc2UKLSogR3JlbWxpbiBTZXJ2ZXIgYFRyYXZlcnNhbE9wUHJvY2Vzc29yYCBub3cgcmV0dXJucyBjb25maXJtYXRpb24gdXBvbiBgT3BgIGBjbG9zZWAuCi0qIEFkZGVkIGBjbG9zZWAgbWV0aG9kIEphdmEgZHJpdmVyIGFuZCBQeXRob24gZHJpdmVyIGBEcml2ZXJSZW1vdGVUcmF2ZXJzYWxTaWRlRWZmZWN0c2AuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xNDIzIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5IHNob3VsZCBiZSBkaXNhYmxlZCBmb3IgdHJlZSBzdGVwcwotKiBUSU5LRVJQT1AtMTQ0MCBnOlBhdGggbmVlZHMgYSBHcmFwaFNPTiBkZXNlcmlhbGl6ZXIgaW4gR3JlbWxpbi1QeXRob24KLSogVElOS0VSUE9QLTE0NTcgR3Jvb3Z5IExhbWJkYXMgZm9yIHJlbW90ZSB0cmF2ZXJzYWxzIG5vdCBzZXJpYWxpemFibGUKLSogVElOS0VSUE9QLTE0NTggR3JlbWxpbiBTZXJ2ZXIgZG9lc24ndCByZXR1cm4gY29uZmlybWF0aW9uIHVwb24gVHJhdmVyc2FsIE9wUHJvY2Vzc29yICJjbG9zZSIgb3AKLSogVElOS0VSUE9QLTE0NjYgUGVlclByZXNzdXJlVGVzdCBoYXMgYmVlbiBmYWlsaW5nIHJlY2VudGx5Ci0qIFRJTktFUlBPUC0xNDcyIFJlcGVhdFVucm9sbFN0cmF0ZWd5IGRvZXMgbm90IHNlbWktY29tcGlsZSBpbmxpbmVkIHJlcGVhdCB0cmF2ZXJzYWwKLSogVElOS0VSUE9QLTE0NzYgVGlua2VyR3JhcGggZG9lcyBub3QgZ2V0IHR5cGVkIHdpdGggdGhlIHJpZ2h0IHR5cGUgbmFtZSBpbiBHcmFwaFNPTgotKiBUSU5LRVJQT1AtMTQ5NSBHbG9iYWwgbGlzdCBkZWR1cGxpY2F0aW9uIGRvZXNuJ3Qgd29yayBpbiBPTEFQCi0qIFRJTktFUlBPUC0xNTAwIGFuZC9vciBpbmZpeCBhbmQgY2hvb3NlKCkgZG8gbm90IHdvcmsgY29ycmVjdGx5LgotKiBUSU5LRVJQT1AtMTUxMSBSZW1vdGUgY2xpZW50IGFkZFYsIFYoKQotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC03OTAgSW1wbGVtZW50IEF1dG9DbG9zZWFibGUgb24gVHJhdmVyc2FsU291cmNlCi0qIFRJTktFUlBPUC05NDQgRGVwcmVjYXRlIEdyYXBoLkV4Y2VwdGlvbnMuZWxlbWVudE5vdEZvdW5kCi0qIFRJTktFUlBPUC0xMTg5IFNpbXBsZUF1dGhlbnRpY2F0b3Igb3ZlciBIdHRwQ2hhbm5lbGl6ZXIgbWFrZXMgR3JlbWxpbiBTZXJ2ZXIgcHJldHR5IHNsb3cgYW5kIGNvbnN1bWVzIG1vcmUgQ1BVCi0qIFRJTktFUlBPUC0xMjQ5IEdyZW1saW4gZHJpdmVyIHRvIHBlcmlvZGljYWxseSBpc3N1ZSBwaW5nIC8gaGVhcnRiZWF0IHRvIGdyZW1saW4gc2VydmVyCi0qIFRJTktFUlBPUC0xMjgwIFZlcnRleFByb2dyYW1zIHNob3VsZCBkZWNsYXJlIHRyYXZlcnNlciByZXF1aXJlbWVudHMKLSogVElOS0VSUE9QLTEzMzAgYnkoKS1tb2R1bGF0aW9uIGZvciB3aGVyZSgpCi0qIFRJTktFUlBPUC0xNDA5IE1ha2UgdGhlICJudWxsIiByZXR1cm4gaW4gdGhlIGdyZW1saW4gY29uc29sZSBpbnRvIHNvbWV0aGluZyBtb3JlIHVuZGVyc3RhbmRhYmxlICAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTE0MzEgRG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uIHJlcXVpcmVzIHRlc3RzIHRvIGV4ZWN1dGUgb24gZ3JlbWxpbi1weXRob24KLSogVElOS0VSUE9QLTE0MzcgQWRkIHRlc3RzIGZvciBkZWR1cChTY29wZSkgaW4gRGVkdXBUZXN0Ci0qIFRJTktFUlBPUC0xNDQ0IEJlbmNobWFyayBieXRlY29kZS0+VHJhdmVyc2FsIGNyZWF0aW9uIGFuZCBpbXBsZW1lbnQgR3JlbWxpblNlcnZlciBjYWNoZSBpZiBuZWNlc3NhcnkuCi0qIFRJTktFUlBPUC0xNDQ4IGdyZW1saW4tcHl0aG9uIHNob3VsZCBiZSBQeXRob24gMi8zIGNvbXBhdGlibGUKLSogVElOS0VSUE9QLTE0NDkgU3RyZWFtbGluZSBncmVtbGluLXB5dGhvbiBidWlsZAotKiBUSU5LRVJQT1AtMTQ1NSBQcm92aWRlIFN0cmluZy1iYXNlZCB3aXRoU3RyYXRlZ3koKS93aXRob3V0U3RyYXRlZ3koKSBmb3IgbGFuZ3VhZ2UgdmFyaWFudCB1c2FnZQotKiBUSU5LRVJQT1AtMTQ1NiBTdXBwb3J0IFN1YmdyYXBoU3RyYXRlZ3kudmVydGV4UHJvcGVydGllcygpLgotKiBUSU5LRVJQT1AtMTQ2MCBEZXByZWNhdGUgcmVjb25uZWN0SW5pdGlhbERlbGF5IGluIEphdmEgZHJpdmVyCi0qIFRJTktFUlBPUC0xNDY0IEdyeW8gU2VyaWFsaXphdGlvbiBmb3IgQnl0ZWNvZGUKLSogVElOS0VSUE9QLTE0NjkgR2V0IHJpZCBvZiBTdHJlYW0tdXNhZ2UgaW4gVHJhdmVyc2FsSGVscGVyCi0qIFRJTktFUlBPUC0xNDcwIElubGluZUZpbHRlclN0cmF0ZWd5IHNob3VsZCB0cnkgYW5kIFAub3IoKSBoYXMoKSBjaGlsZHJlbiBpbiBPclN0ZXBzLgotKiBUSU5LRVJQT1AtMTQ4NiBJbXByb3ZlIEFQSSBvZiBSZW1vdGVDb25uZWN0aW9uCi0qIFRJTktFUlBPUC0xNDg3IFJlZmVyZW5jZSBEb2N1bWVudGF0aW9uIGZvciBJTwotKiBUSU5LRVJQT1AtMTQ4OCBNYWtlIExhenlCYXJyaWVyU3RyYXRlZ3kgcGFydCBvZiB0aGUgZGVmYXVsdCBUcmF2ZXJzYWxTdHJhdGVnaWVzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTQ5MiBSZW1vdGVTdHJhdGVneSBvciB0aGUgUmVtb3RlQ29ubmVjdGlvbiBzaG91bGQgYXBwZW5kIGEgbGF6eSBiYXJyaWVyKCkuCi0qIFRJTktFUlBPUC0xNDIzIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5IHNob3VsZCBiZSBkaXNhYmxlZCBmb3IgdHJlZSBzdGVwcwotKiBUSU5LRVJQT1AtMTQ0MCBnOlBhdGggbmVlZHMgYSBHcmFwaFNPTiBkZXNlcmlhbGl6ZXIgaW4gR3JlbWxpbi1QeXRob24KLSogVElOS0VSUE9QLTE0NTcgR3Jvb3Z5IExhbWJkYXMgZm9yIHJlbW90ZSB0cmF2ZXJzYWxzIG5vdCBzZXJpYWxpemFibGUKLSogVElOS0VSUE9QLTE0NTggR3JlbWxpbiBTZXJ2ZXIgZG9lc24ndCByZXR1cm4gY29uZmlybWF0aW9uIHVwb24gVHJhdmVyc2FsIE9wUHJvY2Vzc29yICJjbG9zZSIgb3AKLSogVElOS0VSUE9QLTE0NjYgUGVlclByZXNzdXJlVGVzdCBoYXMgYmVlbiBmYWlsaW5nIHJlY2VudGx5Ci0qIFRJTktFUlBPUC0xNDcyIFJlcGVhdFVucm9sbFN0cmF0ZWd5IGRvZXMgbm90IHNlbWktY29tcGlsZSBpbmxpbmVkIHJlcGVhdCB0cmF2ZXJzYWwKLSogVElOS0VSUE9QLTE0OTUgR2xvYmFsIGxpc3QgZGVkdXBsaWNhdGlvbiBkb2Vzbid0IHdvcmsgaW4gT0xBUAotKiBUSU5LRVJQT1AtMTUwMCBhbmQvb3IgaW5maXggYW5kIGNob29zZSgpIGRvIG5vdCB3b3JrIGNvcnJlY3RseS4KLSogVElOS0VSUE9QLTE1MTEgUmVtb3RlIGNsaWVudCBhZGRWLCBWKCkKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4yLnguYXNjaWlkb2MjcmVsZWFzZS0zLTItMywgMy4yLjMgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTItMl1dCiA9PT0gVGlua2VyUG9wIDMuMi4yIChSZWxlYXNlIERhdGU6IFNlcHRlbWJlciA2LCAyMDE2KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMS00LCAzLjEuND4+LgotCi0qIEluY2x1ZGVkIEdyYXBoU09OIGFzIGEgZGVmYXVsdCBzZXJpYWxpemVyIChpbiBhZGRpdGlvbiB0byBHcnlvLCB3aGljaCB3YXMgYWxyZWFkeSBwcmVzZW50KSBpbiBHcmVtbGluIFNlcnZlciBpZiBub25lIGFyZSBkZWZpbmVkLgotKiBBZGRlZCBgZ3JlbWxpbi1weXRob25gIHBhY2thZ2UgYXMgYSBHcmVtbGluIGxhbmd1YWdlIHZhcmlhbnQgaW4gUHl0aG9uLgotKiBBZGRlZCBgQnl0ZWNvZGVgIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBhcmd1bWVudHMgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmF2ZXJzYWwuCi0qIENyZWF0ZWQgYW4gZXhwZXJpbWVudGFsIEdyYXBoU09OIHJlcHJlc2VudGF0aW9uIG9mIGBCeXRlY29kZWAgdGhhdCB3aWxsIGJlIGNvbnNpZGVyZWQgdW5zdGFibGUgdW50aWwgMy4zLjAuCi0qIEFkZGVkIGBUcmFuc2xhdG9yYCB3aGljaCBhbGxvd3MgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgYEJ5dGVjb2RlYCBpbnRvIHNvbWUgb3RoZXIgZm9ybSAoZS5nLiBzY3JpcHQsIGBUcmF2ZXJzYWxgLCBldGMuKS4KLSogQWRkZWQgYEphdmFUcmFuc2xhdG9yYCwgYEdyb292eVRyYW5zbGF0b3JgLCBgUHl0aG9uVHJhbnNsYXRvcmAsIGFuZCBgSnl0aG9uVHJhbnNsYXRvcmAgZm9yIHRyYW5zbGF0aW5nIGBCeXRlY29kZWAgYWNjb3JkaW5nbHkuCi0qIEFkZGVkIGBUcmFuc2xhdGlvblN0cmF0ZWd5YCB0byBgZ3JlbWxpbi10ZXN0YCBzbyB0cmFuc2xhdG9ycyBjYW4gYmUgdGVzdGVkIGFnYWluc3QgdGhlIHByb2Nlc3MgdGVzdCBzdWl0ZS4KLSogQWRkZWQgYFRyYXZlcnNhbC5BZG1pbi5uZXh0VHJhdmVyc2VyKClgIHRvIGdldCB0aGUgbmV4dCByZXN1bHQgaW4gYnVsay1mb3JtICh3LyBkZWZhdWx0IGltcGxlbWVudGF0aW9uKS4KLSogQWRkZWQgYFRyYXZlcnNhbFNvdXJjZS5nZXRBbm9ueW1vdXNUcmF2ZXJzYWxDbGFzcygpYCAody8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbikuCi0qIEFkZGVkIGBHcmVtbGluU2NyaXB0RW5naW5lYCBpbnRlcmZhY2Ugd2hpY2ggc3BlY2lmaWVzIGEgYGV2YWwoQnl0ZWNvZGUsIEJpbmRpbmdzKWAgbWV0aG9kLgotKiBEZXByZWNhdGVkIGBSZW1vdGVHcmFwaGAgaW4gZmF2b3Igb2YgYFRyYXZlcnNhbFNvdXJjZS53aXRoUmVtb3RlKClgIGFzIGl0IGlzIG1vcmUgdGVjaG5pY2FsbHkgY29ycmVjdCB0byB0aWUgYSByZW1vdGUgdHJhdmVyc2FsIHRvIHRoZSBgVHJhdmVyc2FsU291cmNlYCB0aGFuIGEgYEdyYXBoYCBpbnN0YW5jZS4KLSogYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIGltcGxlbWVudHMgYEdyZW1saW5TY3JpcHRFbmdpbmVgLgotKiBBZGRlZCBgR3JlbWxpbkp5dGhvblNjcmlwdEVuZ2luZWAgd2hpY2ggaW1wbGVtZW50cyBgR3JlbWxpblNjcmlwdEVuZ2luZWAuCi0qIFJlbW92ZWQgc3VwcG9ydCBmb3Igc3VibWl0dGluZyBhIEphdmEgc2VyaWFsaXplZCBgVHJhdmVyc2FsYCB0byBHcmVtbGluIFNlcnZlci4KLSogUmVtb3ZlZCBhIGxhcmdlbHkgaW50ZXJuYWwgZmVhdHVyZSB0aGF0IHN1cHBvcnRlZCBhdXRvbWF0aWMgdW5yb2xsaW5nIG9mIHRyYXZlcnNlcnMgaW4gdGhlIEdyZW1saW4gRHJpdmVyLgotKiBNYWRlIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IGluaXRpYWxpemUgYE9wUHJvY2Vzc29yYCBpbXBsZW1lbnRhdGlvbnMgd2l0aCBzZXJ2ZXIgYFNldHRpbmdzYC4KLSogSW5jbHVkZWQgR3JhcGhTT04gYXMgYSBkZWZhdWx0IHNlcmlhbGl6ZXIgKGluIGFkZGl0aW9uIHRvIEdyeW8sIHdoaWNoIHdhcyBhbHJlYWR5IHByZXNlbnQpIGluIEdyZW1saW4gU2VydmVyIGlmIG5vbmUgYXJlIGRlZmluZWQKLSogSW50cm9kdWNlZCBHcmFwaFNPTiAyLjAuCi0qIERlcHJlY2F0ZWQgYGVtYmVkVHlwZXNgIG9uIHRoZSBidWlsZGVyIGZvciBgR3JhcGhTT05NYXBwZXJgLgotKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjQwLmZpbmFsLgotKiBEZWZhdWx0ZWQgdGhlIGBncmVtbGluUG9vbGAgc2V0dGluZyBpbiBHcmVtbGluIFNlcnZlciB0byBiZSB6ZXJvLCB3aGljaCB3aWxsIGluc3RydWN0cyBpdCB0byB1c2UgYFJ1bnRpbWUuYXZhaWxhYmxlUHJvY2Vzc29ycygpYCBmb3IgdGhhdCBzZXR0aW5ncy4KLSogQ2hhbmdlZCBzY29wZSBvZiBsb2c0aiBkZXBlbmRlbmNpZXMgc28gdGhhdCB0aGV5IHdvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXN0cyBhbmQgdGhlIGJpbmFyeSBkaXN0cmlidXRpb25zIG9mIEdyZW1saW4gQ29uc29sZSBhbmQgU2VydmVyLgotKiBEZXByZWNhdGVkIGBJby5CdWlsZGVyLnJlZ2lzdHJ5KClgIGluIGZhdm9yIG9mIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGBJby5CdWlsZGVyLm9uTWFwcGVyKClgLgotKiBBZGRlZCBuZXcgcmVjaXBlIGZvciAiVHJhdmVyc2FsIEluZHVjZWQgVmFsdWVzIi4KLSogRml4ZWQgYSBwb3RlbnRpYWwgbGVhayBvZiBhIGBSZWZlcmVuY2VDb3VudGVkYCByZXNvdXJjZSBpbiBHcmVtbGluIFNlcnZlci4KLSogQWRkZWQgY2xhc3MgcmVnaXN0cmF0aW9ucyBmb3IgYE1hcC5FbnRyeWAgaW1wbGVtZW50YXRpb25zIHRvIGBHcnlvTWFwcGVyYC4KLSogQWRkZWQgbWV0aG9kcyB0byByZXRyaWV2ZSBgQ2x1c3RlcmAgc2V0dGluZ3MgaW4gYGdyZW1saW4tZHJpdmVyYC4KLSogRml4ZWQgYSBzZXZlcmUgYnVnIGluIGBTdWJncmFwaFN0cmF0ZWd5YC4KLSogRGVwcmVjYXRlZCBgU3ViZ3JhcGhTdHJhdGVneS5CdWlsZGVyLnZlcnRleENyaXRlcmlvbigpL2VkZ2VDcml0ZXJpb24oKWAgaW4gZmF2b3Igb2YgYHZlcnRpY2VzKCkvZWRnZXMoKWAuCi0qIEZpeGVkIGEgc21hbGwgYnVnIGluIGBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5YCB0aGF0IGNhdXNlZCB2ZXJpZmljYXRpb24gdG8gZmFpbCB3aGVuIGB3aXRoUGF0aGAgd2FzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgUHJvZmlsZVN0ZXBgLgotKiBBZGRlZCBjb2xvciBwcmVmZXJlbmNlcwotKiBBZGRlZCBpbnB1dCwgcmVzdWx0IHByb21wdCBwcmVmZXJlbmNlcwotKiBBZGRlZCBtdWx0aS1saW5lIGluZGljYXRvciBpbiBHcmVtbGluIENvbnNvbGUKLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTgxMCBzdG9yZSBub3QgdmlzaWJsZQotKiBUSU5LRVJQT1AtMTE1MSBzbGY0ai1sb2c0ajEyIC8gbG9nNGogaXMgb25seSByZXF1aXJlZCBmb3IgdGVzdGluZyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEzODMgcHVibGlzaC1kb2NzLnNoIG1pZ2h0IHB1Ymxpc2ggdG8gY3VycmVudCB0b28gZWFybHkKLSogVElOS0VSUE9QLTEzOTAgSWRlbnRpdHlSZW1vdmVTdHJhdGVneVRlc3QgZmFpbHMgcmFuZG9tbHkKLSogVElOS0VSUE9QLTE0MDAgU3ViZ3JhcGhTdHJhdGVneSBpbnRyb2R1Y2VzIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBmaWx0ZXIgaGFzIFZlcnRleC9FZGdlIHN0ZXBzLgotKiBUSU5LRVJQT1AtMTQwNSBwcm9maWxlKCkgZG9lc24ndCBsaWtlIHdpdGhQYXRoKCkKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtMTAzNyBHcmVtbGluIHNoZWxsIG91dHB1dCBjb2xvcmluZwotKiBUSU5LRVJQT1AtMTIyNiBHcmVtbGluIENvbnNvbGUgc2hvdWxkIDpjbGVhciBhdXRvbWFnaWNhbGx5IGFmdGVyICJEaXNwbGF5IHN0YWNrIHRyYWNlLiIKLSogVElOS0VSUE9QLTEyMzAgU2VyaWFsaXNpbmcgbGFtYmRhcyBmb3IgUmVtb3RlR3JhcGgKLSogVElOS0VSUE9QLTEyNzQgR3JhcGhTT04gVmVyc2lvbiAyLjAKLSogVElOS0VSUE9QLTEyNzggSW1wbGVtZW50IEdyZW1saW4tUHl0aG9uIGFuZCBnZW5lcmFsIHB1cnBvc2UgbGFuZ3VhZ2UgdmFyaWFudCB0ZXN0IGluZnJhc3RydWN0dXJlCi0qIFRJTktFUlBPUC0xMjg1IEdyZW1saW5lIGNvbnNvbGUgZG9lcyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG11bHRpLWxpbmUgYW5kIHNpbmdsZS1saW5lIGlucHV0Ci0qIFRJTktFUlBPUC0xMzM0IFByb3ZpZGUgYSB3YXkgdG8gcHVsbCBncmVtbGluLmRyaXZlci5DbHVzdGVyIGNvbm5lY3Rpb24gc2V0dGluZ3MuCi0qIFRJTktFUlBPUC0xMzQ3IFJlbW90ZUNvbm5lY3Rpb24gbmVlZHMgdG8gcHJvdmlkZSBUcmF2ZXJzYWxTaWRlRWZmZWN0cy4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMzczIERlZmF1bHQgZ3JlbWxpblBvb2wgdG8gbnVtYmVyIG9mIGNvcmVzCi0qIFRJTktFUlBPUC0xMzg2IEJ1bXAgdG8gTmV0dHkgNC4wLjQwLkZpbmFsCi0qIFRJTktFUlBPUC0xMzkyIFJlbW92ZSBzdXBwb3J0IGZvciBqYXZhIHNlcmlhbGl6ZWQgVHJhdmVyc2FsICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTM5NCBGaXggbGlua3MgaW4gUmVjaXBlcyBkb2MKLSogVElOS0VSUE9QLTEzOTYgVHJhdmVyc2FsIEluZHVjZWQgVmFsdWVzIFJlY2lwZQotKiBUSU5LRVJQT1AtMTQwMiBJbXBvc3NpYmxlIGZvciBncmFwaCBpbXBsZW1lbnRhdGlvbnMgdG8gcHJvdmlkZSBhIGNsYXNzIHJlc29sdmVyIGZvciBHcnlvIElPCi0qIFRJTktFUlBPUC0xNDA3IERlZmF1bHQgc2VyaWFsaXplcnMgZm9yIEdyZW1saW4gU2VydmVyCi0qIFRJTktFUlBPUC0xNDI1IFVzZSB0cmFpbGluZyB1bmRlcnNjb3JlcyBpbiBncmVtbGluLXB5dGhvbgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYyNyZWxlYXNlLTMtMi0yLCAzLjIuMiBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtMi0xXV0KID09PSBUaW5rZXJQb3AgMy4yLjEgKFJlbGVhc2UgRGF0ZTogSnVseSAxOCwgMjAxNikKIAotVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8cmVsZWFzZS0zLTEtMywgMy4xLjM+Pi4KLQotKiBgUGF0aFByb2Nlc3NvcmAgc3RlcHMgbm93IGhhdmUgdGhlIGFiaWxpdHkgKGlmIGNvbmZpZ3VyZWQgdGhyb3VnaCBhIHN0cmF0ZWd5KSB0byBkcm9wIGBUcmF2ZXJzZXJgIHBhdGggc2VnbWVudHMuCi0qIGBNYXRjaFN0ZXBgIGluIE9MVFAgaGFzIGEgbGF6eSBiYXJyaWVyIHRvIGluY3JlYXNlIHRoZSBwcm9iYWJpbGl0eSBvZiBidWxraW5nLgotKiBBZGRlZCBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAgd2hpY2ggd2lsbCByZW1vdmUgbGFiZWxlZCBwYXRoIHNlZ21lbnRzIHRoYXQgd2lsbCBubyBsb25nZXIgYmUgcmVmZXJlbmNlZC4KLSogQWRkZWQgYFBhdGgucmV0cmFjdCgpYCB0byBzdXBwb3J0IHJldHJhY3RpbmcgcGF0aHMgYmFzZWQgb24gbGFiZWxzLgotKiBPcHRpbWl6ZWQgYEltbXV0YWJsZVBhdGhgIGFuZCBgTXV0YWJsZVBhdGhgIGVxdWFsaXR5IGNvZGUgcmVtb3Zpbmcgc2lnbmlmaWNhbnQgdW5uZWNlc3Nhcnkgb2JqZWN0IGNyZWF0aW9uIGNvZGUuCi0qIEJ1bXBlZCB0byBHcm9vdnkgMi40LjcuCi0qIEFkZGVkIGBSZXBlYXRVbnJvbGxTdHJhdGVneWAgdG8gbGluZWFyaXplIGEgYHJlcGVhdCgpYC10cmF2ZXJzYWwgaWYgbG9vcCBhbW91bnQgaXMga25vd24gYXQgY29tcGlsZSB0aW1lLgotKiBGaXhlZCBhIGJ1ZyBpbiBgQnJhbmNoU3RlcGAgYXJvdW5kIGNoaWxkIGludGVncmF0aW9uIGR1cmluZyBgY2xvbmUoKWAuCi0qIEZpeGVkIGEgYnVnIGluIGBBYnN0cmFjdFN0ZXBgIGFyb3VuZCBsYWJlbCBzZXQgY2xvbmluZy4KLSogQWRkZWQgYFRyYXZlcnNhbFN0cmF0ZWd5UGVyZm9ybWFuY2VUZXN0YCBmb3IgdmVyaWZ5aW5nIHRoZSBwZXJmb3JtYW5jZSBnYWlucyBvZiBvcHRpbWl6YXRpb24tYmFzZWQgdHJhdmVyc2FsIHN0cmF0ZWdpZXMuCi0qIGBUcmF2ZXJzYWxFeHBsYW5hdGlvbi5wcmV0dHlQcmludCgpYCBleGlzdHMgd2hpY2ggcHJvdmlkZXMgd29yZCB3cmFwcGluZyBhbmQgR3JlbWxpbkNvbnNvbGUgaXMgc21hcnQgdG8gdXNlIGNvbnNvbGUgd2lkdGggdG8gY29udHJvbCBgdG9TdHJpbmcoKWAuCi0qIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgKGBSZW1vdGVDb25uZWN0aW9uYCkgdXNlcyBgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lgIG1ldGFkYXRhIHRvIGRldGVybWluZSBkZXRhY2htZW50IHByb2NlZHVyZSBwcmlvciB0byByZXR1cm5pbmcgcmVzdWx0cy4KLSogQWxsb3cgREZTIHBhdGhzIGluIGBIQURPT1BfR1JFTUxJTl9MSUJTYC4KLSogQWRkZWQgYSBzYWZlciBzZXJpYWxpemVyIGluZnJhc3RydWN0dXJlIGZvciB1c2Ugd2l0aCBgU3BhcmtHcmFwaENvbXB1dGVyYCB0aGF0IHVzZXMgYEtyeW9TZXJpYWxpemVyYCBhbmQgdGhlIG5ldyBgR3J5b1JlZ2lzdHJhdG9yYC4KLSogQWRkZWQgYEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5YCB0byBhbGxvdyB1c2VycyB0byBnZXQgYmFjayBkaWZmZXJlbnQgZWxlbWVudCBkZXRhY2htZW50cyBpbiBPTEFQLgotKiBGaXhlZCBhIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAgYnVnIGFyb3VuZCBuZXN0ZWQgYGdyb3VwKClgLXN0ZXBzIGluIE9MQVAuCi0qIEZpeGVkIGEgc2V2ZXJlIGJ1ZyBhcm91bmQgaGFsdGVkIHRyYXZlcnNlcnMgaW4gYSBtdWx0aS1qb2IgT0xBUCB0cmF2ZXJzYWwgY2hhaW4uCi0qIEVuc3VyZSBhIHNlcGFyYXRpb24gb2YgYEdyYXBoQ29tcHV0ZXJgIGFuZCBgVmVydGV4UHJvZ3JhbWAgY29uZmlndXJhdGlvbnMgaW4gYFNwYXJrR3JhcGhDb21wdXRlcmAgYW5kIGBHaXJhcGhHcmFwaENvbXB1dGVyYC4KLSogYFBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW1gIG5vdyBzdXBwb3J0cyBkeW5hbWljIGluaXRpYWwgdm90ZSBzdHJlbmd0aCBjYWxjdWxhdGlvbnMuCi0qIEFkZGVkIGBFbXB0eU1lbW9yeWAgZm9yIGVhc2Ugb2YgdXNlIHdoZW4gbm8gbWVtb3J5IGV4aXN0cy4KLSogVXBkYXRlZCBgVmVydGV4Q29tcHV0aW5nLmdlbmVyYXRlUHJvZ3JhbSgpYCBBUEkgdG8gaW5jbHVkZSBgTWVtb3J5YC4gKihicmVha2luZykqCi0qIGBJbW11dGFibGVQYXRoLlRhaWxQYXRoYCBpcyBub3cgc2VyaWFsaXphYmxlIGxpa2UgYEltbXV0YWJsZVBhdGhgLgotKiBBZGRlZCBgQ29uZmlndXJhdGlvbkNvbXBpbGVyUHJvdmlkZXJgIHdoaWNoIGFsbG93cyBmaW5lLWdyYWluZWQgY29udHJvbCBvZiBzb21lIG9mIHRoZSBpbnRlcm5hbCBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgc2V0dGluZ3MgYXQgdGhlIEdyb292eSBjb21waWxhdGlvbiBsZXZlbC4KLSogSW50cm9kdWNlZCB0aGUgYGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYxLjArZ3J5by1saXRlYCBzZXJpYWxpemF0aW9uIHR5cGUgdG8gR3JlbWxpbiBTZXJ2ZXIgd2hpY2ggdXNlcnMgInJlZmVyZW5jZSIgZWxlbWVudHMgcmF0aGVyIHRoYW4gImRldGFjaGVkIi4KLSogYEdyeW9NYXBwZXJgIGFsbG93cyBvdmVycmlkZXMgb2YgZXhpc3Rpbmcgc2VyaWFsaXplcnMgb24gY2FsbHMgdG8gYGFkZEN1c3RvbWAgb24gdGhlIGJ1aWxkZXIuCi0qIEFkZGVkIGEgdHJhdmVyc2FsIHN0eWxlIGd1aWRlIHRvIHRoZSByZWNpcGVzIGNvb2tib29rLgotKiBGaXhlZCBhIGJ1ZyBpbiBtYXN0ZXItdHJhdmVyc2FsIHRyYXZlcnNlciBwcm9wYWdhdGlvbi4KLSogQWRkZWQgdXNlZnVsIG1ldGhvZHMgZm9yIGN1c3RvbSBgVmVydGV4UHJvZ3JhbXNgIHRvIGJlIHVzZWQgd2l0aCBgcHJvZ3JhbSgpYC1zdGVwLgotKiBJbmNyZWFzZWQgdGhlIHRlc3QgY292ZXJhZ2UgYXJvdW5kIHRyYXZlcnNlciBwcm9wYWdhdGlvbiB3aXRoaW4gYSBtdWx0aS1qb2IgT0xBUCB0cmF2ZXJzYWwuCi0qIEFkZGVkIHRlc3RzIHRvIHZhbGlkYXRlIHRoZSBzdGF0dXMgb2YgYSB0cmFuc2FjdGlvbiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgY2FsbHMgdG8gY2xvc2UuCi0qIEFkZGVkIHRlc3RzIHRvIGVuc3VyZSB0aGF0IHRocmVhZGVkIHRyYW5zYWN0aW9ucyBjYW5ub3QgYmUgcmUtdXNlZC4KLSogYEdyYXBoRmlsdGVyYCBoZWxwZXIgbWV0aG9kcyBhcmUgbm93IG1vcmUgaW50ZWxsaWdlbnQgd2hlbiBkZXRlcm1pbmluZyBlZGdlIGRpcmVjdGlvbi9sYWJlbCBsZWdhbGl0eS4KLSogQWRkZWQgYEdyYXBoRmlsdGVyU3RyYXRlZ3lgIHRvIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0IGBHcmFwaEZpbHRlcnNgIHZpYSB0cmF2ZXJzYWwgaW50cm9zcGVjdGlvbiBpbiBPTEFQLgotKiBVcGRhdGVkIHRoZSBHZXBoaSBQbHVnaW4gdG8gc3VwcG9ydCBHZXBoaSAwLjkueC4KLSogSW5jcmVhc2VkIHRoZSB0ZXN0aW5nIGFuZCBzY29wZSBvZiBgVHJhdmVyc2FsSGVscGVyLmlzTG9jYWxTdGFyR3JhcGgoKWAuCi0qIENoYW5nZWQgc2lnbmF0dXJlIG9mIGBnZXRfZ19WWGxpc3RYdjFfdjJfdjNYWF9uYW1lYCBhbmQgYGdldF9nX1ZYbGlzdFgxXzJfM1hYX25hbWVgIG9mIGBWZXJ0ZXhUZXN0YCB0byB0YWtlIGFyZ3VtZW50cyBmb3IgdGhlIGBUcmF2ZXJzYWxgIHRvIGJlIGNvbnN0cnVjdGVkIGJ5IGV4dGVuZGluZyBjbGFzc2VzLgotKiBBZGRlZCBgVmVydGV4UHJvZ3JhbUludGVyY2VwdG9yYCBpbnRlcmZhY2UgYXMgYSBnZW5lcmFsIHBhdHRlcm4gZm9yIGBHcmFwaENvbXB1dGVyYCBwcm92aWRlcnMgdG8gdXNlIGZvciBieXBhc3NpbmcgYEdyYXBoQ29tcHV0ZXJgIHNlbWFudGljcyB3aGVyZSBhcHByb3ByaWF0ZS4KLSogQWRkZWQgYFNwYXJrU3RhckJhcnJpZXJJbnRlcmNlcHRvcmAgdGhhdCB1c2VzIFNwYXJrIERTTCBmb3IgbG9jYWwgc3RhciBncmFwaCB0cmF2ZXJzYWxzIHRoYXQgZW5kIHdpdGggYSBgUmVkdWNpbmdCYXJyaWVyU3RlcGAuCi0qIEFkZGVkIGBTcGFya0ludGVyY2VwdG9yU3RyYXRlZ3lgIHdoaWNoIGlkZW50aWZpZXMgd2hpY2ggaW50ZXJjZXB0b3IgdG8gdXNlIChpZiBhbnkpIGdpdmVuIHRoZSBzdWJtaXR0ZWQgYFZlcnRleFByb2dyYW1gLgotKiBBZGRlZCBgU3BhcmtTaW5nbGVJdGVyYXRpb25TdHJhdGVneWAgdGhhdCBkb2VzIG5vdCBwYXJ0aXRpb24gbm9yIGNhY2hlIHRoZSBncmFwaCBSREQgaWYgdGhlIHRyYXZlcnNhbCBkb2VzIG5vdCBtZXNzYWdlIHBhc3MuCi0qIEFkZGVkIG1vcmUgaGVscGVyIG1ldGhvZHMgdG8gYFRyYXZlcnNhbEhlbHBlcmAgZm9yIGhhbmRsaW5nIHNjb3BlZCB0cmF2ZXJzYWwgY2hpbGRyZW4uCi0qIERlcHJlY2F0ZWQgYWxsICJwZXJmb3JtYW5jZSIgdGVzdHMgYmFzZWQgb24gIkpVbml0IEJlbmNobWFya3MiLgotKiBgU3BhcmtHcmFwaENvbXB1dGVyYCBubyBsb25nZXIgc2h1ZmZsZXMgZW1wdHkgdmlld3Mgb3IgZW1wdHkgb3V0Z29pbmcgbWVzc2FnZXMgaW4gb3JkZXIgdG8gc2F2ZSB0aW1lIGFuZCBzcGFjZS4KLSogYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIG5vIGxvbmdlciBtYWludGFpbnMgZW1wdHkgaGFsdGVkIHRyYXZlcnNlciBwcm9wZXJ0aWVzIGluIG9yZGVyIHRvIHNhdmUgc3BhY2UuCi0qIEFkZGVkIGBMaXN0PFA8Vj4+YCBjb25zdHJ1Y3RvcnMgdG8gYENvbm5lY3RpdmVQYCwgYEFuZFBgLCBhbmQgYE9yUGAgZm9yIGVhc2Ugb2YgdXNlLgotKiBBZGRlZCBzdXBwb3J0IGZvciBpbnRlcmFjdGl2ZSAoYC1pYCkgYW5kIGV4ZWN1dGUgKGAtZWApIG1vZGVzIGZvciBHcmVtbGluIENvbnNvbGUuCi0qIERpc3BsYXllZCBsaW5lIG51bWJlcnMgZm9yIHNjcmlwdCBleGVjdXRpb24gZmFpbHVyZXMgb2YgYC1lYCBhbmQgYC1pYC4KLSogSW1wcm92ZWQgbWVzc2FnaW5nIGFyb3VuZCBzY3JpcHQgZXhlY3V0aW9uIGVycm9ycyBpbiBHcmVtbGluIENvbnNvbGUuCi0qIEFkZGVkICJoZWxwIiBzdXBwb3J0IHRvIEdyZW1saW4gQ29uc29sZSB3aXRoIHRoZSBgLWhgIGZsYWcuCi0qIEFkZGVkIG9wdGlvbnMgdG8gYmV0dGVyIGNvbnRyb2wgdmVyYm9zaXR5IG9mIEdyZW1saW4gQ29uc29sZSBvdXRwdXQgd2l0aCBgLVFgLCBgLVZgIGFuZCBgLURgLgotKiBEZXByZWNhdGVkIHRoZSBgU2NyaXB0RXhlY3V0b3JgIC0gdGhlIGAtZWAgb3B0aW9uIHRvIGBncmVtbGluLnNoYCBpcyBub3cgaGFuZGxlZCBieSBgQ29uc29sZWAuCi0qIGBUcmF2ZXJzYWxgIG5vdyBhbGxvd3MgY2FuY2VsbGF0aW9uIHdpdGggYFRocmVhZC5pbnRlcnJ1cHQoKWAuCi0qIEFkZGVkIGEgR3JlbWxpbiBsYW5ndWFnZSB2YXJpYW50IHR1dG9yaWFsIHRlYWNoaW5nIHBlb3BsZSBob3cgdG8gZW1iZWQgR3JlbWxpbiBpbiBhIGhvc3QgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xMjgxIE1lbW9yeS5IQUxURURfVFJBVkVSU0VSIHRyYW5zaWVuY2UgaXMgbm90IHNvdW5kLgotKiBUSU5LRVJQT1AtMTMwNSBIQUxURURfVFJBVkVSU0VSUyBob2xkIHdyb25nIGluZm9ybWF0aW9uCi0qIFRJTktFUlBPUC0xMzA3IE5QRSB3aXRoIE9MVFAgbmVzdGVkIGdyb3VwKCkgaW4gYW4gT0xBUCBncm91cCgpIHRyYXZlcnNhbAotKiBUSU5LRVJQT1AtMTMyMyBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5IGZhaWxzIGZvciBuZXN0ZWQgbWF0Y2goKSBzdGVwcwotKiBUSU5LRVJQT1AtMTM0MSBVbnNoYWRlZEtyeW9BZGFwdGVyIGZhaWxzIHRvIGRlc2VyaWFsaXplIFN0YXJHcmFwaCB3aGVuIFNwYXJrQ29uZiBzZXRzIHNwYXJrLnJkZC5jb21wcmVzcz10cnVlIHdoZXJlYXMgR3J5b1NlcmlhbGl6ZXIgd29ya3MKLSogVElOS0VSUE9QLTEzNDggVHJhdmVyc2FsSW50ZXJydXB0aW9uVGVzdCBzdWNjZXNzIGRlcGVuZGVudCBvbiBpdGVyYXRpb24gb3JkZXIKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtODE4IENvbnNpZGVyIGEgUC50eXBlKCkKLSogVElOS0VSUE9QLTk0NiBUcmF2ZXJzYWwgcmVzcGVjdGluZyBUaHJlYWQuaW50ZXJydXB0KCkKLSogVElOS0VSUE9QLTk0NyBFbmZvcmNlIHNlbWFudGljcyBvZiB0aHJlYWRlZCB0cmFuc2FjdGlvbnMgYXMgbWFudWFsICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTA1OSBBZGQgdGVzdCB0byBlbnN1cmUgdHJhbnNhY3Rpb24gb3BlbmluZyBoYXBwZW5zIGF0IHJlYWQvd3JpdGUgYW5kIG5vdCBvbiBjbG9zZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEwNzEgRW5oYW5jZSBwcmUtcHJvY2Vzc29yIG91dHB1dAotKiBUSU5LRVJQT1AtMTA5MSBHZXQgS3J5b1NlcmlhbGl6ZXIgdG8gd29yayBuYXRpdmVseS4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC0xMTIwIElmIHRoZXJlIGlzIG5vIHZpZXcgbm9yIG1lc3NhZ2VzLCBkb24ndCBjcmVhdGUgZW1wdHkgdmlld3MvbWVzc2FnZXMgaW4gU3BhcmtFeGVjdXRvcgotKiBUSU5LRVJQT1AtMTE0NCBJbXByb3ZlIFNjcmlwdEVsZW1lbnRGYWN0b3J5Ci0qIFRJTktFUlBPUC0xMTU1IGdyZW1saW4uc2ggLWUgZG9lc24ndCBsb2cgbGluZSBudW1iZXJzIGZvciBlcnJvcnMKLSogVElOS0VSUE9QLTExNTYgZ3JlbWxpbi5zaCBjb3VsZCB1c2UgYSBoZWxwIHRleHQKLSogVElOS0VSUE9QLTExNTcgZ3JlbWxpbi5zaCBzaG91bGQgYWxsb3cgeW91IHRvIGV4ZWN1dGUgYSBzY3JpcHQgYW5kIGdvIGludGVyYWN0aXZlIG9uIGVycm9yIG9yIGNvbXBsZXRpb24KLSogVElOS0VSUE9QLTEyMzIgV3JpdGUgYSB0dXRvcmlhbCBkZW1vbnN0cmF0aW5nIHRoZSAzIHdheXMgdG8gd3JpdGUgYSBHcmVtbGluIGxhbmd1YWdlIHZhcmlhbnQuCi0qIFRJTktFUlBPUC0xMjU0IFN1cHBvcnQgZHJvcHBpbmcgdHJhdmVyc2VyIHBhdGggaW5mb3JtYXRpb24gd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgotKiBUSU5LRVJQT1AtMTI2OCBJbXByb3ZlIHNjcmlwdCBleGVjdXRpb24gb3B0aW9ucyBmb3IgY29uc29sZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEyNzMgRGVwcmVjYXRlIG9sZCBwZXJmb3JtYW5jZSB0ZXN0cwotKiBUSU5LRVJQT1AtMTI3NiBEZXByZWNhdGUgc2VyaWFsaXplZFJlc3BvbnNlVGltZW91dAotKiBUSU5LRVJQT1AtMTI3OSBBZGQgSXRlcmFibGU8Vj4gcGFyYW1ldGVyIGNvbnN0cnVjdG9yIHRvIENvbm5lY3RpdmVQIHN1YmNsYXNzZXMKLSogVElOS0VSUE9QLTEyODIgQWRkIG1vcmUgY29tcGxpYW5jZSB0ZXN0cyBhcm91bmQgaG93IG1lbW9yeSBhbmQgdmVydGV4IGNvbXB1dGUga2V5cyBhcmUgcHJvcGFnYXRlZCBpbiBjaGFpbmVkIE9MQVAuCi0qIFRJTktFUlBPUC0xMjg2IEFkZCBSZWNpcGVzIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTEyODggU3VwcG9ydCBncmVtbGluLnNwYXJrLnNraXBQYXJ0aXRpb25pbmcgY29uZmlndXJhdGlvbi4KLSogVElOS0VSUE9QLTEyOTAgQ3JlYXRlIFZlcnRleFByb2dyYW1JbnRlcmNlcHRvciBhcyBhIHBhdHRlcm4gZm9yIEdyYXBoQ29tcHV0ZXIgc3RyYXRlZ2llcy4KLSogVElOS0VSUE9QLTEyOTMgSW1wbGVtZW50IEdyYXBoRmlsdGVyU3RyYXRlZ3kgYXMgYSBkZWZhdWx0IHJlZ2lzdHJhdGlvbiBmb3IgR3JhcGhDb21wdXRlcgotKiBUSU5LRVJQT1AtMTI5NCBEZXByZWNhdGUgdXNlIG9mIGp1bml0LWJlbmNobWFya3MKLSogVElOS0VSUE9QLTEyOTcgR2VwaGkgcGx1Z2luIG9uIEdlcGhpIDAuOS54ICAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEyOTkgUmVmYWN0b3IgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbSB0byBtYWtlIGl0IGVhc2llciB0byB1bmRlcnN0YW5kLgotKiBUSU5LRVJQT1AtMTMwOCBTZXJpYWxpemUgdG8gInJlZmVyZW5jZSIgZm9yIEdyZW1saW4gU2VydmVyCi0qIFRJTktFUlBPUC0xMzEwIEFsbG93IE9MQVAgdG8gcmV0dXJuIHByb3BlcnRpZXMgYXMgRGV0YWNoZWQKLSogVElOS0VSUE9QLTEzMjEgTG9vc2VuIGNvdXBsaW5nIGJldHdlZW4gVGlua2VyUG9wIHNlcmlhbGl6YXRpb24gbG9naWMgYW5kIHNoYWRlZCBLcnlvCi0qIFRJTktFUlBPUC0xMzIyIFByb3ZpZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb2YgQ29tcGlsZXJDb25maWd1cmF0aW9uCi0qIFRJTktFUlBPUC0xMzI4IFByb3ZpZGUgW2dyZW1saW4tcHl0aG9uXSBhcyBhbiBjb2RlIGV4ZWN1dG9yIGluIGRvY3MKLSogVElOS0VSUE9QLTEzMzEgSEFET09QX0dSRU1MSU5fTElCUyBjYW4gb25seSBwb2ludCB0byBsb2NhbCBmaWxlIHN5c3RlbQotKiBUSU5LRVJQT1AtMTMzMiBJbXByb3ZlIC5leHBsYWluKCkgRGlhbG9ndWUKLSogVElOS0VSUE9QLTEzMzggQnVtcCB0byBHcm9vdnkgMi40LjcKLSogVElOS0VSUE9QLTEzNDkgUmVwZWF0VW5yb2xsU3RyYXRlZ3kgc2hvdWxkIHVucm9sbCBsb29wcyB3aGlsZSBtYWludGFpbmluZyBlcXVpdmFsZW50IHNlbWFudGljcy4KLSogVElOS0VSUE9QLTEzNTUgRGVzaWduIEhhc0NvbnRhaW5lciBmb3IgZXh0ZW5zaW9uCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTEsIDMuMi4xIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0yLTAtaW5jdWJhdGluZ11dCiA9PT0gVGlua2VyUG9wIDMuMi4wIChSZWxlYXNlIERhdGU6IEFwcmlsIDgsIDIwMTYpCiAKLVRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PHJlbGVhc2UtMy0xLTItaW5jdWJhdGluZywgMy4xLjItaW5jdWJhdGluZz4+LgotCi0qIEJ1bXBlZCB0byBOZW80aiAyLjMuMy4KLSogUmVuYW1lZCB2YXJpYWJsZSBgbG9jYWxgIHRvIGBmc2AgaW4gYEhhZG9vcEdyZW1saW5QbHVnaW5gIHRvIGF2b2lkIGEgbmFtaW5nIGNvbmZsaWN0IHdpdGggYFNjb3BlLmxvY2FsYC4gKihicmVha2luZykqCi0qIEFkZGVkIGBHcmFwaFRyYXZlcnNhbC5vcHRpb25hbCgpYCB3aGljaCB3aWxsIHVzZSB0aGUgaW5uZXIgdHJhdmVyc2FsIGlmIGl0IHJldHVybnMgcmVzdWx0cywgZWxzZSBpdCB3b24ndC4KLSogYEdyb3VwU3RlcGAgYW5kIGBHcm91cFNpZGVFZmZlY3RTdGVwYCBtYWtlIHVzZSBvZiBtaWQtdHJhdmVyc2FsIHJlZHVjZXJzIHRvIGxpbWl0IG1lbW9yeSBjb25zdW1wdGlvbiBpbiBPTEFQLgotKiBBZGRlZCBgR3JhcGhUcmF2ZXJzYWwucHJvZ3JhbShWZXJ0ZXhQcm9ncmFtKWAgdG8gYWxsb3cgYXJiaXRyYXJ5IHVzZXIgdmVydGV4IHByb2dyYW1zIGluIE9MQVAuCi0qIEFkZGVkIGBHcmFwaFRyYXZlcnNhbC5wcm9qZWN0KClgIGZvciBjcmVhdGluZyBhIGBNYXA8U3RyaW5nLEU+YCBnaXZlbiB0aGUgY3VycmVudCB0cmF2ZXJzZXIgYW5kIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgYGJ5KClgLW1vZHVsYXRvcnMuCi0qIGBIQURPT1BfR1JFTUxJTl9MSUJTYCBjYW4gbm93IHJlZmVyZW5jZSBhIGRpcmVjdG9yeSBpbiBIREZTIGFuZCB3aWxsIGJlIHVzZWQgaWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LgotKiBBZGRlZCBgZ3JlbWxpbi1iZW5jaG1hcmtgIG1vZHVsZSB3aXRoIEpNSCBiZW5jaG1hcmtpbmcgYmFzZSBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGZ1cnRoZXIgYmVuY2htYXJrIGRldmVsb3BtZW50LgotKiBgVHJhdmVyc2FsU3RyYXRlZ2llcy5HbG9iYWxDYWNoZWAgc3VwcG9ydHMgYm90aCBgR3JhcGhgIGFuZCBgR3JhcGhDb21wdXRlcmAgc3RyYXRlZ3kgcmVnaXN0cmF0aW9ucy4KLSogYHNlbGVjdCgiYSIsImIiKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKWAtc3R5bGUgdHJhdmVyc2FscyBub3cgd29yayBpbiBPTEFQIHdpdGggbmV3IGBQYXRoUHJvY2Vzc29yU3RyYXRlZ3lgLgotKiBgRGVkdXBHbG9iYWxTdGVwYCBjYW4gbm93IGhhbmRsZSBzdGFyLWJvdW5kIGBieSgpYC1tb2R1bGF0b3JzIGFuZCBzY29wZWQga2V5cyBvbiBgR3JhcGhDb21wdXRlcmAuCi0qIEFkZGVkIGBDb21wdXRlcmAgd2hpY2ggaXMgYSBidWlsZGVyIGZvciBgR3JhcGhDb21wdXRlcnNgIHRoYXQgaXMgc2VyaWFsaXphYmxlLgotKiBgUGVyc2lzdGVkT3V0cHV0UkREYCBub3cgaW1wbGVtZW50cyBgUGVyc2lzdFJlc3VsdEdyYXBoQXdhcmVgIGFuZCB0aHVzLCBubyBtb3JlIHVubmVlZGVkIHdhcm5pbmdzIHdoZW4gdXNpbmcgaXQuCi0qIFJlbmFtZWQgYFN0YW5kYXJkVHJhdmVyc2FsTWV0cmljc2AgdG8gYERlZmF1bHRUcmF2ZXJzYWxNZXRyaWNzYCBnaXZlbiB0aGUgYERlZmF1bHRYWFhgLWNvbnZlbnRpb24gdGhyb3VnaG91dC4gKihicmVha2luZykqCi0qIEJ1bXBlZCB0byBBcGFjaGUgSGFkb29wIDIuNy4yLgotKiBGaXhlZCBhIGJ1ZyBhcm91bmQgcHJvZmlsaW5nIGFuZCBuZXN0ZWQgdHJhdmVyc2Fscy4KLSogQWRkZWQgYGdyZW1saW4uaGFkb29wLmRlZmF1bHRHcmFwaENvbXB1dGVyYCBzbyB1c2VycyBjYW4gdXNlIGBncmFwaC5jb21wdXRlKClgIHdpdGggYEhhZG9vcEdyYXBoYC4KLSogQWRkZWQgYGdyZW1saW4uaGFkb29wLmdyYXBoUmVhZGVyYCBhbmQgYGdyZW1saW4uaGFkb29wLmdyYXBoV3JpdGVyYCB3aGljaCBjYW4gaGFuZGxlZCBgWFhYRm9ybWF0c2AgYW5kIGBYWFhSRERzYC4KLSogRGVwcmVjYXRlZCBgZ3JlbWxpbi5oYWRvb3AuZ3JhcGhJbnB1dEZvcm1hdGAsIGBncmVtbGluLmhhZG9vcC5ncmFwaE91dHB1dEZvcm1hdGAsIGBncmVtbGluLnNwYXJrLmdyYXBoSW5wdXRSRERgLCBhbmQgYGdyZW1saW4uc3BhcmsuZ3JhcGhPdXRwdXRSRERgLgotKiBJZiBubyBjb25maWd1cmF0aW9uIGlzIHByb3ZpZGVkIHRvIGBIYWRvb3BQb29sc2AgaXQgdXNlcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRvIGNyZWF0ZSBhIHBvb2wgb25jZSBhbmQgb25seSBvbmNlIHBlciBKVk0uCi0qIEltcGxlbWVudGVkIGBSZW1vdGVHcmFwaGAsIGBSZW1vdGVDb25uZWN0aW9uYCwgYW5kIGBSZW1vdGVTdHJhdGVneWAuCi0qIEFkZGVkIHZhbGlkYXRpb24gdG8gYEdyeW9NYXBwZXJgIEtyeW8gaWRlbnRpZmllcnMgYmVmb3JlIGNvbnN0cnVjdGlvbiB0byBwcmV2ZW50IGFjY2lkZW50YWwgZHVwbGljYXRlcy4KLSogQWRkZWQgYEdyYXBoU3RlcC5hZGRJZHMoKWAgd2hpY2ggaXMgdXNlZnVsIGZvciBgSGFzQ29udGFpbmVyYCAiZm9sZCBpbnMuIgotKiBBZGRlZCBhIHN0YXRpYyBgR3JhcGhTdGVwLnByb2Nlc3NIYXNoQ29udGFpbmVySWRzKClgIGhlbHBlciBmb3IgaGFuZGxpbmcgaWQtYmFzZWQgYEhhc0NvbnRhaW5lcnNgLgotKiBgR3JhcGhTdGVwYCBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkIGhhdmUgYGcuVigpLmhhc0lkKHgpYCBhbmQgYGcuVih4KWAgY29tcGlsZSBlcXVpdmFsZW50bHkuICooYnJlYWtpbmcpKgotKiBPcHRpbWl6ZWQgYEV4cGFuZGFibGVTdGVwSXRlcmF0b3JgIHdpdGggc2ltcGxlciBsb2dpYyBhbmQgaW5jcmVhc2VkIHRoZSBsaWtlbGlob29kIG9mIGJ1bGtpbmcuCi0qIE9wdGltaXplZCBgVHJhdmVyc2VyUmVxdWlyZW1lbnRgIGNhbGN1bGF0aW9ucy4KLSogYFN0ZXAuYWRkU3RhcnQoKWAgYW5kIGBTdGVwLmFkZFN0YXJ0cygpYCBub3cgdGFrZSBgVHJhdmVyc2VyLkFkbWluPFM+YCBhbmQgYFRyYXZlcnNlci5BZG1pbjxTPmAsIHJlc3BlY3RpdmVseS4gKihicmVha2luZykqCi0qIGBTdGVwLnByb2Nlc3NOZXh0U3RhcnQoKWAgYW5kIGBTdGVwLm5leHQoKWAgbm93IHJldHVybiBgVHJhdmVyc2VyLkFkbWluPEU+YC4gKihicmVha2luZykqCi0qIGBUcmF2ZXJzYWwuYWRkVHJhdmVyc2VyUmVxdWlyZW1lbnQoKWAgbWV0aG9kIHJlbW92ZWQuICooYnJlYWtpbmcpKgotKiBGaXhlZCBhIGBoYXNoQ29kZSgpYCBidWcgaW4gYE9yZGVyR2xvYmFsU3RlcGAgYW5kIGBPcmRlckxvY2FsU3RlcGAuCi0qIEFkZGVkIGBPcmRlckxpbWl0U3RyYXRlZ3lgIHdoaWNoIHdpbGwgZW5zdXJlIHRoYXQgcGFydGl0aW9ucyBhcmUgbGltaXRlZCBiZWZvcmUgYmVpbmcgbWVyZ2VkIGluIE9MQVAuCi0qIGBDb21wYXJhdG9ySG9sZGVyYCBub3cgc2VwYXJhdGVzIHRoZSB0cmF2ZXJzYWwgZnJvbSB0aGUgY29tcGFyYXRvci4gKihicmVha2luZykqCi0qIEJ1bXBlZCB0byBBcGFjaGUgU3BhcmsgMS42LjEuCi0qIElmIG5vIFNwYXJrIHNlcmlhbGl6ZXIgaXMgcHJvdmlkZWQgdGhlbiBgR3J5b1NlcmlhbGl6ZXJgIGlzIHRoZSBkZWZhdWx0LCBub3QgYEphdmFTZXJpYWxpemVyYC4KLSogQWRkZWQgYE9wZXJhdG9yLnN1bUxvbmdgIGFzIGEgb3B0aW1pemVkIGJpbmFyeSBvcGVyYXRvciBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGBNZW1vcnlgIHJlZHVjZXJzIHRoYXQga25vdyB0aGV5IGFyZSBkZWFsaW5nIHdpdGggbG9uZ3MuCi0qIFRyYXZlcnNlcnMgZnJvbSBgQ29tcHV0ZXJSZXN1bHRTdGVwYCBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkLiBBdHRhY2hpbmcgaXMgb25seSB1c2VkIGluIFRpbmtlclBvcCdzIHRlc3Qgc3VpdGUgdmlhIGBTeXN0ZW0uZ2V0UHJvcGVydGllcygpYC4KLSogRml4ZWQgYSBgaGFzaENvZGUoKWAvYGVxdWFscygpYCBidWcgaW4gYE1lc3NhZ2VTY29wZWAuCi0qIEZpeGVkIGEgc2V2ZXJlIGBUcmF2ZXJzYWxgIGNsb25pbmcgaXNzdWUgdGhhdCBjYXVzZWQgaW5jb25zaXN0ZW50IGBUcmF2ZXJzYWxTaWRlRWZmZWN0c2AuCi0qIGBUcmF2ZXJzYWxTaWRlRWZmZWN0c2AgcmVtYWluIGNvbnNpc3RlbnQgYW5kIHVzYWJsZSBhY3Jvc3MgbXVsdGlwbGUgY2hhaW5lZCBPTEFQIGpvYnMuCi0qIEFkZGVkIGBNZW1vcnlUcmF2ZXJzYWxTaWRlRWZmZWN0c2Agd2hpY2ggd3JhcHMgYE1lbW9yeWAgaW4gYSBgVHJhdmVyc2FsU2lkZUVmZmVjdHNgIGZvciB1c2UgaW4gT0xBUC4KLSogYFRyYXZlcnNhbFNpZGVFZmZlY3RzYCBhcmUgbm93IGZ1bGx5IGZ1bmN0aW9uYWwgaW4gT0xBUCBzYXZlIHRoYXQgYW4gYWNjdXJhdGUgZ2xvYmFsIHZpZXcgaXMgcG9zc2libGUgYXQgdGhlIHN0YXJ0IG9mIGFuIGl0ZXJhdGlvbiAobm90IGR1cmluZykuCi0qIFVwZGF0ZWQgdGhlIGBUcmF2ZXJzYWxTaWRlRWZmZWN0c2AgQVBJIHRvIHN1cHBvcnQgcmVnaXN0ZXJlZCByZWR1Y2VycyBhbmQgdXBkYXRlZCBgZ2V0KClgLXNlbWFudGljcy4gKihicmVha2luZykqCi0qIFNwbGl0IGV4aXN0aW5nIGBwcm9maWxlKClgIGludG8gYFByb2ZpbGVTdGVwYCBhbmQgYFByb2ZpbGVTaWRlRWZmZWN0U3RlcGAuCi0qIFRoZSBgcHJvZmlsZSgpYC1zdGVwIGFjdHMgbGlrZSBhIHJlZHVjaW5nIGJhcnJpZXIgYW5kIGVtaXRzIGBUcmF2ZXJzYWxNZXRyaWNzYCB3aXRob3V0IHRoZSBuZWVkIGZvciBgY2FwKClgLiAqKGJyZWFraW5nKSoKLSogQWRkZWQgYExvY2FsQmFycmllcmAgaW50ZXJmYWNlIHRvIGFsbG93IHRyYXZlcnNlcnMgdG8gcmVtYWluIGRpc3RyaWJ1dGVkIGR1cmluZyBhbiBpdGVyYXRpb24gc28gYXMgdG8gcmVkdWNlIGNsdXN0ZXIgdHJhZmZpYy4KLSogQWRkZWQgYE5vT3BCYXJyaWVyU3RlcGAgYXMgYSBgTG9jYWxCYXJyaWVyYCBpbXBsZW1lbnRhdGlvbiBvZiBgTGFtYmRhQ29sbGVjdGluZ0JhcnJpZXJTdGVwKG5vT3ApYC4KLSogYEFnZ3JlZ2F0ZVN0ZXBgIGltcGxlbWVudHMgYExvY2FsQmFycmllcmAgYW5kIHRodXMsIGRvZXNuJ3QgbmVlZGxlc3NseSBjb21tdW5pY2F0ZSBpdHMgYmFycmllciB0cmF2ZXJzZXJzLgotKiBGaXhlZCBhbiBPTEFQLWJhc2VkIGBCYXJyaWVyYCBzeW5jaHJvbml6YXRpb24gYnVnLgotKiBGaXhlZCBhIHNlbWFudGljIGJ1ZyBpbiBgQnJhbmNoU3RlcGAgKGFuZCBpbmhlcml0aW5nIHN0ZXBzKSB3aGVyZSBiYXJyaWVycyByZWFjdGVkIGxvY2FsbHkuICooYnJlYWtpbmcpKgotKiBBZGRlZCBgTWVtb3J5Q29tcHV0ZUtleWAgZm9yIHNwZWNpZmljYXRpb24gb2YgYE1lbW9yeWAga2V5cyBpbiBgVmVydGV4UHJvZ3JhbWAuICooYnJlYWtpbmcpKgotKiBBZGRlZCBgVmVydGV4Q29tcHV0ZUtleWAgZm9yIHNwZWNpZmljYXRpb24gb2YgdmVydGV4IGNvbXB1dGUgcHJvcGVydGllcyBpbiBgVmVydGV4UHJvZ3JhbWAuICooYnJlYWtpbmcpKgotKiBBZGRlZCBgYW5kYCwgYG9yYCwgYW5kIGBhZGRBbGxgIHRvIGBPcGVyYXRvcmAuCi0qIGBNZW1vcnlgIEFQSSBjaGFuZ2VkIHRvIHN1cHBvcnQgc2V0dGluZyBhbmQgYWRkaW5nIHZhbHVlcyBmb3IgcmVkdWN0aW9uLiAqKGJyZWFraW5nKSoKLSogYE1lbW9yeWAga2V5cyBjYW4gYmUgbWFya2VkIGFzIGJyb2FkY2FzdCBhbmQgb25seSB0aG9zZSB2YWx1ZXMgYXJlIHNlbnQgdG8gd29ya2VycyBvbiBlYWNoIGl0ZXJhdG9yLgotKiBgTWVtb3J5YCBrZXlzIGNhbiBiZSBtYXJrZWQgdHJhbnNpZW50IGFuZCB0aHVzIGRlbGV0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgT0xBUCBqb2IuCi0qIFZlcnRleCBjb21wdXRlIGtleXMgY2FuIGJlIG1hcmtlZCB0cmFuc2llbnQgYW5kIHRodXMgZGVsZXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBPTEFQIGpvYi4KLSogYFZlcnRleFByb2dyYW1gIEFQSSBjaGFuZ2VkIHRvIHN1cHBvcnQgYE1lbW9yeUNvbXB1dGVLZXlgIGFuZCBgVmVydGV4Q29tcHV0ZUtleWAuICooYnJlYWtpbmcpKgotKiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgYWJsZSB0byBleGVjdXRlIE9MQVAgYW5kIE9MVFAgdHJhdmVyc2FsIHNlY3Rpb25zIGR5bmFtaWNhbGx5IHdpdGhpbiB0aGUgc2FtZSBqb2IuCi0qIFJlbW92ZWQgYEZpbmFsR2V0YCBpbnRlcmZhY2UgYXMgYWxsIHBvc3QgcHJvY2Vzc2luZyBvZiByZWR1Y3Rpb25zIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSByZWR1Y2luZyBzdGVwIGV4cGxpY2l0bHkuICooYnJlYWtpbmcpKgotKiBTaW1wbGlmaWVkIGFsbCBgU3VwcGx5aW5nQmFycmllclN0ZXBgIGltcGxlbWVudGF0aW9ucyBhcyB0aGV5IG5vIGxvbmdlciByZXF1aXJlIGBNYXBSZWR1Y2VgIGluIE9MQVAuCi0qIFNpbXBsaWZpZWQgYWxsIGBDb2xsZWN0aW5nQmFycmllclN0ZXBgIGltcGxlbWVudGF0aW9ucyBhcyB0aGV5IG5vIGxvbmdlciByZXF1aXJlIGBNYXBSZWR1Y2VgIGluIE9MQVAuCi0qIFNpbXBsaWZpZWQgYWxsIGBSZWR1Y2luZ0JhcnJpZXJTdGVwYCBpbXBsZW1lbnRhdGlvbnMgYXMgdGhleSBubyBsb25nZXIgcmVxdWlyZSBgTWFwUmVkdWNlYCBpbiBPTEFQLgotKiBBbGwgc3RlcHMgaW4gT0xBUCB0aGF0IHVzZWQgYE1hcFJlZHVjZWAgbm93IHVzZSBgTWVtb3J5YCB0byBkbyB0aGVpciByZWR1Y3Rpb25zIHdoaWNoIGV4cGFuZHMgdGhlIGxpc3Qgb2YgbGVnYWwgdHJhdmVyc2Fscy4KLSogYEdyb3VwU3RlcGAgc2ltcGxpZmllZCB3aXRoIGBHcm91cEhlbHBlci5Hcm91cE1hcGAgbm8gbG9uZ2VyIGJlaW5nIG5lZWRlZC4gUmVsYXRlZCB0byB0aGUgcmVtb3ZhbCBvZiBgRmluYWxHZXRgLgotKiBPTEFQIHNpZGUtZWZmZWN0cyB0aGF0IGFyZSBubyBsb25nZXIgZ2VuZXJhdGVkIGJ5IGBNYXBSZWR1Y2VgIGFyZSBzaW1wbHkgc3RvcmVkIGluIGBDb21wdXRlclJlc3VsdC5NZW1vcnlgIHcvIG5vIGRpc2sgcGVyc2lzdGVuY2UgbmVlZGVkLiAqKGJyZWFraW5nKSoKLSogQWRkZWQgYEdlbmVyYXRlYCBzdGVwIGludGVyZmFjZSB3aGljaCBzdGF0ZXMgdGhhdCB0aGVyZSBjb3VsZCBiZSBhIGZpbmFsIGdlbmVyYXRpbmcgcGhhc2UgdG8gYSBzaWRlLWVmZmVjdCBvciByZWR1Y3Rpb24gKGUuZy4gYEdyb3VwU3RlcGApLgotKiBgQmFycmllcmAgc3RlcCBpbnRlcmZhY2UgaXMgbm93IHRoZSBtZWFucyBieSB3aGljaCBub24tcGFyYWxsZWwgc3RlcHMgY29tbXVuaWNhdGUgd2l0aCB0aGVpciBjb3VudGVycGFydHMgaW4gT0xBUC4KLSogQWRkZWQgYE1lbW9yeUNvbXB1dGluZ2Agc3RlcCBpbnRlcmZhY2Ugd2hpY2ggc3RhdGVzIHRoYXQgdGhlIHN0ZXAgdXNlcyBgTWVtb3J5Q29tcHV0ZUtleXNgIGZvciBpdHMgY29tcHV0YXRpb24gaW4gT0xBUC4KLSogQWRkZWQgYFBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW1TdGVwYCBhbmQgYEdyYXBoVHJhdmVyc2FsLnBlZXJQcmVzc3VyZSgpYC4KLSogQWRkZWQgYFB1cmVUcmF2ZXJzYWxgIGZvciBoYW5kbGluZyBwdXJlIGFuZCBjb21waWxlZCB2ZXJzaW9ucyBvZiBhIGBUcmF2ZXJzYWxgLiBVc2VmdWwgaW4gT0xBUC4KLSogQWRkZWQgYFNjcmlwdFRyYXZlcnNhbGAgd2hpY2ggYWxsb3dzIGZvciBkZWxheWVkIGNvbXBpbGF0aW9uIG9mIHNjcmlwdC1iYXNlZCBgVHJhdmVyc2Fsc2AuCi0qIFNpbXBsaWZpZWQgYFZlcnRleFByb2dyYW1gIGltcGxlbWVudGF0aW9ucyB3aXRoIGEgYFB1cmVUcmF2ZXJzYWxgLW1vZGVsIGFuZCBkZXByZWNhdGVkIGBDb25maWd1cmF0aW9uVHJhdmVyc2FsYC4KLSogU2ltcGxpZmllZCBzY3JpcHQtYmFzZWQgYFRyYXZlcnNhbHNgIHZpYSBgU2NyaXB0VHJhdmVyc2FsYCBhbmQgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU2NyaXB0RnVuY3Rpb25gIGFuZCBgVHJhdmVyc2FsU2NyaXB0SGVscGVyYC4KLSogQWRkZWQgYFRpbWVzTW9kdWxhdGluZ2AgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyB0aGUgYFN0ZXBgIHRvIGRlY2lkZSBob3cgYSBgdGltZXMoKWAtbW9kdWxhdGlvbiBzaG91bGQgYmUgaGFuZGxlZC4KLSogQWRkZWQgYEJ5TW9kdWxhdGluZ2AgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyB0aGUgYFN0ZXBgIHRvIGRlY2lkZSBob3cgYSBgYnkoKWAtbW9kdWxhdGlvbiBzaG91bGQgYmUgaGFuZGxlZC4gKihicmVha2luZykqCi0qIFNpbXBsaWZpZWQgdGhlIGBieSgpYC1tb2R1bGF0aW9uIHBhdHRlcm5zIG9mIGBPcmRlckdsb2JhbFN0ZXBgIGFuZCBgT3JkZXJMb2NhbFN0ZXBgLgotKiBBZGRlZCBgR3JhcGhDb21wdXRlclRlc3Quc2hvdWxkU3VwcG9ydFByZUV4aXN0aW5nQ29tcHV0ZUtleXMoKWAgdG8gZW5zdXJlIGV4aXN0aW5nIGNvbXB1dGUga2V5cyBhcmUgInJldml2ZWQuIiAqKGJyZWFraW5nKSoKLSogQWRkZWQgYEdyYXBoQ29tcHV0ZXJUZXN0LnNob3VsZFN1cHBvcnRKb2JDaGFpbmluZygpYCB0byBlbnN1cmUgT0xBUCBqb2JzIGNhbiBiZSBsaW5lYXJseSBjaGFpbmVkLiAqKGJyZWFraW5nKSoKLSogRml4ZWQgYSBidWcgaW4gYm90aCBgU3BhcmtHcmFwaENvbXB1dGVyYCBhbmQgYEdpcmFwaEdyYXBoQ29tcHV0ZXJgIHJlZ2FyZGluZyBzb3VyY2UgZGF0YSBhY2Nlc3MgaW4gam9iIGNoYWlucy4KLSogRXhwYW5kZWQgam9iIGNoYWluaW5nIHRlc3QgY292ZXJhZ2UgZm9yIGBHcmFwaENvbXB1dGVyYCBwcm92aWRlcnMuCi0qIEFkZGVkIGBUcmF2ZXJzYWxIZWxwZXIub25HcmFwaENvbXB1dGVyKHRyYXZlcnNhbClgLgotKiBgTWFwUmVkdWNlLm1hcCgpYCBubyBsb25nZXIgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZC4gKihicmVha2luZykqCi0qIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCBjYW4gd29yayB3aXRob3V0IGEgYEdyYXBoU3RlcGAgc3RhcnQuCi0qIEFkZGVkIGBQYWdlUmFua1ZlcnRleFByb2dyYW1TdGVwYCBhbmQgYEdyYXBoVHJhdmVyc2FsLnBhZ2VSYW5rKClgLgotKiBBZGRlZCBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbVN0ZXBgIHRvIHN1cHBvcnQgT0xBUCB0cmF2ZXJzYWwgam9iIGNoYWluaW5nLgotKiBBZGRlZCBgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5YCB3aGljaCBjb21waWxlcyBtdWx0aXBsZSBPTEFQIGpvYnMgaW50byBhIHNpbmdsZSB0cmF2ZXJzYWwuCi0qIFNpbXBsaWZpZWQgdGhlIGNvbXBhcmF0b3IgbW9kZWwgaW4gYE9yZGVyR2xvYmFsU3RlcGAgYW5kIGBPcmRlckxvY2FsU3RlcGAuCi0qIFJlZmFjdG9yZWQgYFRyYXZlcnNhbFNvdXJjZWAgbW9kZWwgdG8gYWxsb3cgZmx1ZW50LW1ldGhvZCBjb25zdHJ1Y3Rpb24gb2YgYFRyYXZlcnNhbFNvdXJjZXNgLgotKiBEZXByZWNhdGVkIHRoZSBjb25jZXB0IG9mIGEgYFRyYXZlcnNhbFNvdXJjZS5CdWlsZGVyYC4KLSogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiBhIGBUcmF2ZXJzYWxFbmdpbmVgLiBBbGwgYFRyYXZlcnNhbGAgbW9kdWxhdGlvbnMgYXJlIG5vdyBtZWRpYXRlZCBieSBgVHJhdmVyc2FsU3RyYXRlZ2llc2AuICooYnJlYWtpbmcpKgotKiBBZGRlZCBgU2lkZUVmZmVjdFN0cmF0ZWd5YCBmb3IgcmVnaXN0ZXJpbmcgc2lkZUVmZmVjdHMgaW4gYSBzcGF3bmVkIGBUcmF2ZXJzYWxgLgotKiBBZGRlZCBgU2Fja1N0cmF0ZWd5YCBmb3IgcmVnaXN0ZXJpbmcgYSBzYWNrIGZvciBhIHNwYXduZWQgYFRyYXZlcnNhbGAuCi0qIEFkZGVkIGBSZXF1aXJlbWVudHNTdHJhdGVneWAgYW5kIGBSZXF1aXJlbWVudHNTdGVwYCBmb3IgYWRkaW5nIGR5bmFtaWMgYFRyYXZlcnNlclJlcXVpcmVtZW50c2AgdG8gYSBgVHJhdmVyc2FsYC4KLSogUmVtb3ZlZCBgRW5naW5lRGVwZW5kZW50U3RyYXRlZ3lgLgotKiBSZW5hbWVkIHN0ZXAgaW50ZXJmYWNlIGBFbmdpbmVEZXBlbmRlbnRgIHRvIGBHcmFwaENvbXB1dGluZ2Agd2l0aCBtZXRob2QgYG9uR3JhcGhDb21wdXRlcigpYC4gKihicmVha2luZykqCi0qIENsZWFuZWQgdXAgdmFyaW91cyBgVHJhdmVyc2FsU3RyYXRlZ3lgIHRlc3RzIG5vdyB0aGF0IGBUcmF2ZXJzYWxFbmdpbmVgIG5vIGxvbmdlciBleGlzdHMuCi0qIEFkZGVkIGBHcmFwaEZpbHRlcmAgdG8gc3VwcG9ydCBmaWx0ZXJpbmcgb3V0IHZlcnRpY2VzIGFuZCBlZGdlcyB0aGF0IHdvbid0IGJlIHRvdWNoZWQgYnkgYW4gT0xBUCBqb2IuCi0qIEFkZGVkIGBHcmFwaENvbXB1dGVyLnZlcnRpY2VzKClgIGFuZCBgR3JhcGhDb21wdXRlci5lZGdlcygpYCBmb3IgYEdyYXBoRmlsdGVyYCBjb25zdHJ1Y3Rpb24uICooYnJlYWtpbmcpKgotKiBgU3BhcmtHcmFwaENvbXB1dGVyYCwgYEdpcmFwaEdyYXBoQ29tcHV0ZXJgLCBhbmQgYFRpbmtlckdyYXBoQ29tcHV0ZXJgIGFsbCBzdXBwb3J0IGBHcmFwaEZpbHRlcmAuCi0qIEFkZGVkIGBHcmFwaENvbXB1dGVyVGVzdC5zaG91bGRTdXBwb3J0R3JhcGhGaWx0ZXIoKWAgd2hpY2ggdmVyaWZpZXMgYWxsIGZpbHRlcmVkIGdyYXBocyBoYXZlIHRoZSBzYW1lIHRvcG9sb2d5LgotKiBBZGRlZCBgR3JhcGhGaWx0ZXJBd2FyZWAgaW50ZXJmYWNlIHRvIGBoYWRvb3AtZ3JlbWxpbi9gIHdoaWNoIHRlbGxzIHRoZSBPTEFQIGVuZ2luZSB0aGF0IHRoZSBgSW5wdXRGb3JtYXRgIGhhbmRsZXMgZmlsdGVyaW5nLgotKiBgR3J5b0lucHV0Rm9ybWF0YCBhbmQgYFNjcmlwdElucHV0Rm9ybWF0YCBpbXBsZW1lbnQgYEdyYXBoRmlsdGVyQXdhcmVgLgotKiBBZGRlZCBgR3JhcGhGaWx0ZXJJbnB1dEZvcm1hdGAgd2hpY2ggaGFuZGxlcyBncmFwaCBmaWx0ZXJpbmcgZm9yIGBJbnB1dEZvcm1hdHNgIHRoYXQgYXJlIG5vdCBgR3JhcGhGaWx0ZXJBd2FyZWAuCi0qIEZpeGVkIGEgYnVnIGluIGBUcmF2ZXJzYWxIZWxwZXIuaXNMb2NhbFN0YXJHcmFwaCgpYCB3aGljaCBhbGxvd2VkIGNlcnRhaW4gaWxsZWdhbCB0cmF2ZXJzYWxzIHRvIHBhc3MuCi0qIEFkZGVkIGBUcmF2ZXJzYWxIZWxwZXIuaXNMb2NhbFByb3BlcnRpZXMoKWAgdG8gdmVyaWZ5IHRoYXQgdGhlIHRyYXZlcnNhbCBkb2VzIG5vdCB0b3VjaCBpbmNpZGVudCBlZGdlcy4KLSogYEdyYXBoUmVhZGVyYCBJL08gaW50ZXJmYWNlIG5vdyBoYXMgYE9wdGlvbmFsPFZlcnRleD4gcmVhZEdyYXBoKElucHV0U3RyZWFtLCBHcmFwaEZpbHRlcilgLiBEZWZhdWx0IGBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbmAuCi0qIGBHcnlvUmVhZGVyYCBkb2VzIG5vdCBtYXRlcmlhbGl6ZSBlZGdlcyB0aGF0IHdpbGwgYmUgZmlsdGVyZWQgb3V0IGFuZCB0aGlzIGdyZWF0bHkgcmVkdWNlcyBHQyBhbmQgbG9hZCB0aW1lcy4KLSogQ3JlYXRlZCBjdXN0b20gYFNlcmlhbGl6ZXJzYCBmb3IgYFNwYXJrR3JhcGhDb21wdXRlcmAgbWVzc2FnZS1wYXNzaW5nIGNsYXNzZXMgd2hpY2ggcmVkdWNlIGdyYXBoIHNpemVzIHNpZ25pZmljYW50bHkuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC05NTEgQmFycmllciBzdGVwcyBwcm92aWRlIHVuZXhwZWN0ZWQgcmVzdWx0cyBpbiBHcmVtbGluIE9MQVAKLSogVElOS0VSUE9QLTEwNTcgR3JvdXBTaWRlRWZmZWN0U3RlcCBkb2Vzbid0IHVzZSBwcm92aWRlZCBtYXBzCi0qIFRJTktFUlBPUC0xMTAzIFR3byBvYmplY3RzIGZpZ2h0aW5nIGZvciBsb2NhbCB2YXJpYWJsZSBuYW1lIGluIEdyZW1saW4gQ29uc29sZSAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTExNDkgVHJhdmVyc2FsWFhYU3RlcHMgQXJlbid0IFByb3ZpZGluZyBTaWRlRWZmZWN0cwotKiBUSU5LRVJQT1AtMTE4MSBzZWxlY3QoQ29sdW1uKSBzaG91bGQgbm90IHVzZSBhIExhbWJkYU1hcFN0ZXAKLSogVElOS0VSUE9QLTExODggU2VtYW50aWNzIG9mIEJhcnJpZXJTdGVwcyBpbiBUcmF2ZXJzYWxQYXJlbnQgZ2xvYmFsIHRyYXZlcnNhbHMgaXMgd3JvbmcuICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTE5NCBleHBsYWluKCkgc2VlbXMgYnJva2VuCi0qIFRJTktFUlBPUC0xMjE3IFJlcGVhdGVkIExvZ2dpbmcgb2YgIlRoZSBIYWRvb3BQb29scyBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQsIHVzaW5nIHRoZSBkZWZhdWx0IHBvb2wiCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTU3MCBbUHJvcG9zYWxdIFByb3ZpZGUgc3VwcG9ydCBmb3IgT0xBUCB0byBPTFRQIHRvIE9MQVAgdG8gT0xUUAotKiBUSU5LRVJQT1AtNTc1IEltcGxlbWVudCBSZW1vdGVHcmFwaAotKiBUSU5LRVJQT1AtODEzIFtQcm9wb3NhbF0gTWFrZSB0aGUgR3JlbWxpbiBHcmFwaCBUcmF2ZXJzYWwgTWFjaGluZSBhbmQgSW5zdHJ1Y3Rpb24gU2V0IEV4cGxpY2l0Ci0qIFRJTktFUlBPUC04NzIgUmVtb3ZlIEdyb3VwQ291bnRTdGVwIGluIGZhdm9yIG9mIG5ldyBSZWR1Y2UtYmFzZWQgR3JvdXBTdGVwCi0qIFRJTktFUlBPUC04OTAgUmVtb3ZlIHRoZSBjb25jZXB0IG9mIGJyYW5jaC8gcGFja2FnZS4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC05NTggSW1wcm92ZSB1c2FiaWxpdHkgb2YgLnByb2ZpbGUoKSBzdGVwLgotKiBUSU5LRVJQT1AtOTYyIFByb3ZpZGUgInZlcnRleCBxdWVyeSIgc2VsZWN0aXZpdHkgd2hlbiBpbXBvcnRpbmcgZGF0YSBpbiBPTEFQLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTk2OCBBZGQgZmlyc3QgY2xhc3Mgc3VwcG9ydCBmb3IgYW4gb3B0aW9uYWwgdHJhdmVyc2FsCi0qIFRJTktFUlBPUC05NzEgVHJhdmVyc2FsU291cmNlIHNob3VsZCBiZSBmbHVlbnQgbGlrZSBHcmFwaENvbXB1dGVyICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTAxNiBSZXBsYWNlIGp1bml0LWJlbmNobWFya3Mgd2l0aCBKTUgKLSogVElOS0VSUE9QLTEwMjEgRGVwcmVjYXRlIE9yZGVyLnZhbHVlSW5jciwgT3JkZXIudmFsdWVEZWNyLCBPcmRlci5rZXlJbmNyLCBhbmQgT3JkZXIua2V5RGVjciAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEwMzIgQ2xlYW4gdXAgdGhlIGNvbmYvaGFkb29wIGNvbmZpZ3VyYXRpb25zCi0qIFRJTktFUlBPUC0xMDM0IEJ1bXAgdG8gc3VwcG9ydCBTcGFyayAxLjUuMgotKiBUSU5LRVJQT1AtMTA2OSBTdXBwb3J0IFNwYXJrIDEuNi4wCi0qIFRJTktFUlBPUC0xMDgyIElOUFVUX1JERCBhbmQgSU5QVVRfRk9STUFUIGFyZSBiYWQsIHdlIHNob3VsZCBqdXN0IGhhdmUgb25lIGtleS4KLSogVElOS0VSUE9QLTExMTIgQ3JlYXRlIEdyeW9TZXJpYWxpemVycyBmb3IgdGhlIFNwYXJrIFBheWxvYWQgY2xhc3Nlcy4KLSogVElOS0VSUE9QLTExMjEgRmlsZVN5c3RlbVN0b3JhZ2UgbmVlZHMgdG8gYmUgc21hcnQgYWJvdXQgLy4KLSogVElOS0VSUE9QLTExMzIgTWVzc2VuZ2VyLnJlY2VpdmVNZXNzYWdlcygpIEl0ZXJhdG9yIHNob3VsZCAucmVtb3ZlKCkuCi0qIFRJTktFUlBPUC0xMTQwIFRyYXZlcnNhbFZlcnRleFByb2dyYW1TdGVwIGluIHN1cHBvcnQgb2YgT0xBUC9PTFRQIGNvbnZlcnNpb25zLgotKiBUSU5LRVJQT1AtMTE1MyBBZGQgQnlNb2R1bGF0aW5nIGFuZCBUaW1lc01vZHVsYXRpbmcgaW50ZXJmYWNlcy4KLSogVElOS0VSUE9QLTExNTQgQ3JlYXRlIGEgU2NyaXB0VHJhdmVyc2FsIHdoaWNoIGlzIFNlcmlhbGl6YWJsZSBhbmQgYXV0by1jb21waWxlcy4KLSogVElOS0VSUE9QLTExNjIgQWRkIFZlcnRleFByb2dyYW0uZ2V0VHJhbnNpZW50Q29tcHV0ZUtleXMoKSBmb3IgcmVtb3Zpbmcgc2NyYXRjaC1kYXRhLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTExNjMgR3JhcGhDb21wdXRlcidzIGNhbiBoYXZlIFRyYXZlcnNhbFN0cmF0ZWdpZXMuCi0qIFRJTktFUlBPUC0xMTY0IFJlZHVjaW5nQmFycmllcnNTdGVwcyBzaG91bGQgdXNlIENvbXB1dGVyTWVtb3J5LCBub3QgTWFwUmVkdWNlLgotKiBUSU5LRVJQT1AtMTE2NiBBZGQgTWVtb3J5LnJlZHVjZSgpIGFzIG9wdGlvbiB0byBNZW1vcnkgaW1wbGVtZW50YXRpb25zLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTExNzMgSWYgbm8gU2VyaWFsaXplciBpcyBwcm92aWRlZCBpbiBDb25maWd1cmF0aW9uLCB1c2UgR3J5b1NlcmlhbGl6ZXIgYnkgZGVmYXVsdCAoU3BhcmspCi0qIFRJTktFUlBPUC0xMTgwIEFkZCBtb3JlIG9wdGltaXplZCBiaW5hcnkgb3BlcmF0b3JzIHRvIE9wZXJhdG9yLgotKiBUSU5LRVJQT1AtMTE5MiBUcmF2ZXJzYWxTaWRlRWZmZWN0cyBzaG91bGQgc3VwcG9ydCByZWdpc3RlcmVkIHJlZHVjZXJzIChiaW5hcnkgb3BlcmF0b3JzKS4KLSogVElOS0VSUE9QLTExOTMgQWRkIGEgTG9jYWxCYXJyaWVyIGludGVyZmFjZS4KLSogVElOS0VSUE9QLTExOTkgVXNlICJNaWNyb01ldHJpY3MiIGFzIHRoZSBtdXRhdG9yIG9mIHRoZSBUcmF2ZXJzYWxNZXRyaWNzLgotKiBUSU5LRVJQT1AtMTIwNiBFeHBhbmRhYmxlSXRlcmF0b3IgY2FuIHRha2UgYSBmdWxsIFRyYXZlcnNlclNldCBhdCBvbmNlIC0tIEJhcnJpZXJzLgotKiBUSU5LRVJQT1AtMTIwOSBDb21wYXJhdG9ySG9sZGVyIHNob3VsZCByZXR1cm5zIGEgUGFpcjxUcmF2ZXJzYWwsQ29tcGFyYXRvcj4uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTIxMCBQcm92aWRlIGFuIE9yZGVyTGltaXRTdGVwIGFzIGFuIG9wdGltaXphdGlvbi4KLSogVElOS0VSUE9QLTEyMTkgQ3JlYXRlIGEgdGVzdCBjYXNlIHRoYXQgZW5zdXJlcyB0aGUgcHJvdmlkZXIncyBjb21waWxhdGlvbiBvZiBnLlYoeCkgYW5kIGcuVigpLmhhc0lkKHgpIGlzIGlkZW50aWNhbCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTEyMjIgQWxsb3cgZGVmYXVsdCBHcmFwaENvbXB1dGVyIGNvbmZpZ3VyYXRpb24KLSogVElOS0VSUE9QLTEyMjMgQWxsb3cgamFycyBpbiBncmVtbGluLmRpc3RyaWJ1dGVkSmFycyB0byBiZSByZWFkIGZyb20gSERGUwotKiBUSU5LRVJQT1AtMTIyNSBEbyBhICJyb2xsaW5nIHJlZHVjZSIgZm9yIEdyb3VwWFhYU3RlcCBpbiBPTEFQLgotKiBUSU5LRVJQT1AtMTIyNyBBZGQgTWV0cmljcyBmb3IgdGhlIFRyYXZlcnNhbE9wUHJvY2Vzc29yCi0qIFRJTktFUlBPUC0xMjM0IHByb2dyYW0oKSBzdGVwIHRoYXQgdGFrZXMgYXJiaXRyYXJ5IHZlcnRleCBwcm9ncmFtcwotKiBUSU5LRVJQT1AtMTIzNiBTZWxlY3REZW5vcm1hbGl6YXRpb25TdHJhdGVneSBmb3Igc2VsZWN0KCkuYnkoc3RhckdyYXBoKSBpbiBPTEFQLgotKiBUSU5LRVJQT1AtMTIzNyBQcm9qZWN0TWFwOiBGb3IgdGhlIExvdmUgb2YgRGllIEZhdGVybGFuZAotKiBUSU5LRVJQT1AtMTIzOCBSZS11c2UgQ2xpZW50IGluc3RhbmNlcyBpbiBSZW1vdGVHcmFwaCB0ZXN0cworUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYyNyZWxlYXNlLTMtMi0wLCAzLjIuMCBjaGFuZ2Vsb2c+Pi4KIAogPT0gVGlua2VyUG9wIDMuMS4wIChBIDE4NyBPbiBUaGUgVW5kZXJjb3ZlciBHcmVtbGlueikKIApAQCAtNDYyMCw2MTAgKzExMjUsNDcgQEAKIFtbcmVsZWFzZS0zLTEtOF1dCiA9PT0gVGlua2VyUG9wIDMuMS44IChSZWxlYXNlIERhdGU6IEF1Z3VzdCAyMSwgMjAxNykKIAotKiBGaXhlZCBhIGBNZXNzYWdlU2NvcGVgIGJ1ZyBpbiBgVGlua2VyR3JhcGhDb21wdXRlcmAuCi0qIEZpeGVkIGEgYnVnIGluIGBCaWdEZWNpbWFsYCBkaXZpc2lvbnMgaW4gYE51bWJlckhlbHBlcmAgdGhhdCBwb3RlbnRpYWxseSB0aHJldyBhbiBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAuCi0qIE5vbi1kZXNlcmlhbGl6YWJsZSBleGNlcHRpb25zIG5vIGxvbmdlciBhZGRlZCB0byBTY3JpcHRSZWNvcmRSZWFkZXIgSU9FeGNlcHRpb25zLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTUxOSBUaW5rZXJHcmFwaENvbXB1dGVyIGRvZXNuJ3QgaGFuZGxlIG11bHRpcGxlIE1lc3NhZ2VTY29wZXMgaW4gc2luZ2xlIGl0ZXJhdGlvbgotKiBUSU5LRVJQT1AtMTczNiBTYWNrIHN0ZXAgZXZhbHVhdGVkIGJ5IEdyb292eSBpbnRlcnByZXRzIG51bWJlcnMgaW4gYW4gdW5leHBlY3RlZCB3YXkKLSogVElOS0VSUE9QLTE3NTQgU3BhcmsgY2FuIG5vdCBkZXNlcmlhbGlzZSBzb21lIFNjcmlwdFJlY29yZFJlYWRlciBwYXJzZSBleGNlcHRpb25zCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jI3JlbGVhc2UtMy0xLTgsIDMuMS44IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0xLTddXQogPT09IFRpbmtlclBvcCAzLjEuNyAoUmVsZWFzZSBEYXRlOiBKdW5lIDEyLCAyMDE3KQogCi0qIENvbmZpZ3VyZWQgTW9kZXJuIGFuZCBUaGUgQ3JldyBncmFwaHMgdG8gd29yayB3aXRoIGEgaW50ZWdlciBgSWRNYW5hZ2VyYCB3aGVuIGBUaW5rZXJGYWN0b3J5LmNyZWF0ZVhYWCgpYCBpcyBjYWxsZWQuCi0qIEFkZGVkIFhTTFQgdHJhbnNmb3JtIG9wdGlvbiB0byBjb252ZXJ0IFRpbmtlclBvcCAyLnggR3JhcGhNTCB0byAzLnggR3JhcGhNTC4KLSogQWRkZWQgdmFsaWRhdGlvbiB0byBgU3RhclZlcnRleFByb3BlcnR5YC4KLSogQnVtcGVkIHRvIEphY2tzb24gMi44LjcuCi0qIEZpeGVkIGBFdmVudFN0cmF0ZWd5YCBzbyB0aGF0IG5ld2x5IGFkZGVkIHByb3BlcnRpZXMgdHJpZ2dlciBldmVudHMgd2l0aCB0aGUgbmFtZSBvZiB0aGUga2V5IHRoYXQgd2FzIGFkZGVkLgotKiBEcm9wIHVzZSBvZiBqaXRwYWNrIGZvciB0aGUgamJjcnlwdCBhcnRpZmFjdCAtIHVzaW5nIHRoZSBvZmZpY2lhbCBvbmUgaW4gTWF2ZW4gQ2VudHJhbC4KLSogQnVtcGVkIHRvIEdyb292eSAyLjQuMTEuCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTE1MDQgTXV0YXRpb25MaXN0ZW5lciBkb2Vzbid0IHByb3ZpZGUgcHJvcGVydHkga2V5IG9uIHByb3BlcnR5IGFkZGl0aW9ucwotKiBUSU5LRVJQT1AtMTYwOCBUUDItdG8tVFAzIEdyYXBoTUwgWFNMVAotKiBUSU5LRVJQT1AtMTYzMyBVc2Ugb3JnLm1pbmRyb3Q6amJjcnlwdCB2MC40Ci0qIFRJTktFUlBPUC0xNjQ1IEJ1bXAgdG8gR3Jvb3Z5IDIuNC45Ci0qIFRJTktFUlBPUC0xNjU0IFVwZ3JhZGUgdG8gamFja3Nvbi1kYXRhYmluZCAyLjguNisgaW4gZ3JlbWxpbi1zaGFkZWQKLSogVElOS0VSUE9QLTE2NTkgRG9ja2VyIGJ1aWxkIHNob3VsZCB1c2UgbWF2ZW4gc2V0dGluZ3MueG1sCi0qIFRJTktFUlBPUC0xNjY0IFN0YXJWZXJ0ZXhQcm9wZXJ0eSNwcm9wZXJ0eSBzaG91bGQgdGhyb3cgYW4gTlBFIGlmIHRoZSB2YWx1ZSBpcyBudWxsCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jI3JlbGVhc2UtMy0xLTcsIDMuMS43IGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0xLTZdXQogPT09IFRpbmtlclBvcCAzLjEuNiAoUmVsZWFzZSBEYXRlOiBGZWJydWFyeSAzLCAyMDE3KQogCi0qIEZpeGVkIGJ1ZyBpbiBgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lgLCBpdCB3YXMgbWlzc2luZyBzb21lIGludmFsaWRhdGluZyBzdGVwcy4KLSogUmV0dXJuZWQgYSBjb25maXJtYXRpb24gb24gc2Vzc2lvbiBjbG9zZSBmcm9tIEdyZW1saW4gU2VydmVyLgotKiBVc2Ugbm9uLWRlZmF1bHQgcG9ydCBmb3IgcnVubmluZyB0ZXN0cyBvbiBHcmVtbGluIFNlcnZlci4KLSogRnVsbHkgc2h1dGRvd24gbWV0cmljcyBzZXJ2aWNlcyBpbiBHcmVtbGluIFNlcnZlciBvbiBzaHV0ZG93bi4KLSogRGVwcmVjYXRlZCBgdHJ5UmFuZG9tQ29tbWl0KClgIGluIGBBYnN0cmFjdEdyZW1saW5UZXN0YCAtIHRoZSBhbm5vdGF0aW9uIHdhcyBuZXZlciBhZGRlZCBpbiAzLjEuMSwgYW5kIHdhcyBvbmx5IGRlcHJlY2F0ZWQgdmlhIGphdmFkb2MuCi0qIE1pbm9yIGZpeGVzIHRvIHZhcmlvdXMgdGVzdCBmZWF0dXJlIHJlcXVpcmVtZW50cyBpbiBgZ3JlbWxpbi10ZXN0YC4KLSogQWxsb3cgZGV2ZWxvcGVycyB0byBwYXNzIG9wdGlvbnMgdG8gYGRvY2tlciBydW5gIHdpdGggVElOS0VSUE9QX0RPQ0tFUl9PUFRTIGVudmlyb25tZW50IHZhcmlhYmxlCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xNDkzIEdyb292eSBwcm9qZWN0IGRvZXNuJ3QgYnVpbGQgb24gV2luZG93cwotKiBUSU5LRVJQT1AtMTU0NSBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSBpcyBidWdneQotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0xNTM4IEdyZW1saW4gU2VydmVyIHNwYXduZWQgYnkgdGVzdCBzdWl0ZXMgc2hvdWxkIHVzZSBhIGRpZmZlcmVudCBwb3J0Ci0qIFRJTktFUlBPUC0xNTQ0IFJldHVybiBhIGNvbmZpcm1hdGlvbiBvZiBzZXNzaW9uIGNsb3NlCi0qIFRJTktFUlBPUC0xNTU2IEFsbG93IEhhZG9vcCB0byBydW4gb24gSVB2NiBzeXN0ZW1zCi0qIFRJTktFUlBPUC0xNTU3IEltcHJvdmUgZG9ja2VyIGJ1aWxkIHRpbWUgd2l0aCB0aGlzIG9uZSB3ZWlyZCB0cmljayEKLSogVElOS0VSUE9QLTE1OTggQnVtcCB0byBHcm92eSAyLjQuOAorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS02LCAzLjEuNiBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtMS01XV0KID09PSBUaW5rZXJQb3AgMy4xLjUgKFJlbGVhc2UgRGF0ZTogT2N0b2JlciAxNywgMjAxNikKIAotKiBJbXByb3ZlZCBoYW5kbGluZyBvZiBgQ2x1c3Rlci5jbG9zZSgpYCBhbmQgYENsaWVudC5jbG9zZSgpYCB0byBwcmV2ZW50IHRoZSBtZXRob2RzIGZyb20gaGFuZ2luZy4KLSogRml4ZWQgYSBidWcgaW4gYE5vdFN0ZXBgIHdoZXJlIGNoaWxkIHJlcXVpcmVtZW50cyB3ZXJlIG5vdCBiZWluZyBhbmFseXplZC4KLSogRml4ZWQgb3V0cHV0IHJlZGlyZWN0aW9uIGFuZCBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgaW4gYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgLgotKiBDb3JyZWN0ZWQgbmFtaW5nIG9mIGBnX3dpdGhQYXRoX1ZfYXNYYVhfb3V0X291dF9tYXBYYV9uYW1lX2l0X25hbWVYYCBhbmQgYGdfd2l0aFBhdGhfVl9hc1hhWF9vdXRfbWFwWGFfbmFtZVhgIGluIGBNYXBUZXN0YC4KLSogSW1wcm92ZWQgc2Vzc2lvbiBjbGVhbnVwIHdoZW4gYSBjbG9zZSBpcyB0cmlnZ2VyZWQgYnkgdGhlIGNsaWVudC4KLSogUmVtb3ZlZCB0aGUgYGFwcHZleW9yLnltbGAgZmlsZSBhcyB0aGUgQXBwVmV5b3IgYnVpbGQgaXMgbm8gbG9uZ2VyIGVuYWJsZWQgYnkgQXBhY2hlIEluZnJhc3RydWN0dXJlLgotKiBGaXhlZCBUaW5rZXJHcmFwaCB3aGljaCB3YXMgbm90IHNhdmluZyBvbiBgY2xvc2UoKWAgaWYgdGhlIHBhdGggb25seSBjb25zaXN0ZWQgb2YgdGhlIGZpbGUgbmFtZS4KLSogRml4ZWQgYSBidWcgaW4gYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHdoaWNoIGRpZG4ndCB1c2UgdGhlIGBOb3RTdGVwYCBwcm9wZXJseS4KLQotPT09PSBCdWdzCi0KLSogVElOS0VSUE9QLTExNTggZ3JlbWxpbi5zaCAtdiBlbWl0cyBsb2c0aiBpbml0aWFsaXphdGlvbiBlcnJvcnMKLSogVElOS0VSUE9QLTEzOTEgaXNzdWUgd2l0aCB3aGVyZSBmaWx0ZXIKLSogVElOS0VSUE9QLTE0NDIgS2lsbGluZyBzZXNzaW9uIHNob3VsZCBtYWtlIGJldHRlciBhdHRlbXB0IHRvIGNsZWFudXAKLSogVElOS0VSUE9QLTE0NTEgVGlua2VyR3JhcGggcGVyc2lzdGVuY2UgY2Fubm90IGhhbmRsZSBhIHNpbmdsZSBmaWxlIG5hbWUgYXMgdGhlIGdyYXBoIGxvY2F0aW9uCi0qIFRJTktFUlBPUC0xNDY3IEltcHJvdmUgY2xvc2UoKSBvcGVyYXRpb25zIG9uIHRoZSBKYXZhIGRyaXZlcgotKiBUSU5LRVJQT1AtMTQ3OCBQcm9wb2dhdGUgU2NyaXB0RW5naW5lIGZpeGVzIGZyb20gZ3Jvb3Z5IHRvIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUKLSogVElOS0VSUE9QLTE1MTIgZ3JlbWxpbi1zZXJ2ZXItY2xhc3NpYy55YW1sIGlzIGJyb2tlbgotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC05MjcgYmluL3B1Ymxpc2gtZG9jcy5zaCBzaG91bGQgb25seSB1cGxvYWQgZGlmZnMuCi0qIFRJTktFUlBPUC0xMjY0IEltcHJvdmUgQkxWUCBkb2NzCi0qIFRJTktFUlBPUC0xNDc3IE1ha2UgRGVwZW5kZW5jeUdyYWJiZXJUZXN0IGFuIGludGVncmF0aW9uIHRlc3QKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4xLnguYXNjaWlkb2MjcmVsZWFzZS0zLTEtNSwgMy4xLjUgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTEtNF1dCiA9PT0gVGlua2VyUG9wIDMuMS40IChSZWxlYXNlIERhdGU6IFNlcHRlbWJlciA2LCAyMDE2KQogCi0qIEltcHJvdmVkIHRoZSBlcnJvciBwcm92aWRlZCBieSBhIGNsaWVudC1zaWRlIHNlc3Npb24gaWYgbm8gaG9zdHMgd2VyZSBhdmFpbGFibGUuCi0qIEZpeGVkIGEgYnVnIGluIGBQcm9wZXJ0aWVzVGVzdGAgd2hpY2ggYXNzdW1lZCBsb25nIGlkIHZhbHVlcy4KLSogRml4ZWQgYSBidWcgaW4gYFN0YXJHcmFwaGAgYXJvdW5kIHNlbGYtZWRnZXMuCi0qIEZpeGVkIGEgcG90ZW50aWFsIGxlYWsgb2YgYSBgUmVmZXJlbmNlQ291bnRlZGAgcmVzb3VyY2UgaW4gR3JlbWxpbiBTZXJ2ZXIuCi0qIFJlbmFtZWQgZGlzdHJpYnV0aW9ucyB0byBtYWtlIHRoZSBwcmVmaXggImFwYWNoZS10aW5rZXJwb3AtIiBhcyBvcHBvc2VkIHRvIGp1c3QgImFwYWNoZS0iLgotKiBGaXhlZCBhIHByb2JsZW0gKHByZXZpb3VzbHkgdGhvdWdodCByZXNvbHZlZCBvbiAzLjEuMykgY2F1c2luZyBHcmVtbGluIFNlcnZlciB0byBsb2NrIHVwIHdoZW4gcGFyYWxsZWwgcmVxdWVzdHMgd2VyZSBzdWJtaXR0ZWQgb24gdGhlIHNhbWUgc2Vzc2lvbiBpZiB0aG9zZSBwYXJhbGxlbCByZXF1ZXN0cyBpbmNsdWRlZCBhIHNjcmlwdCB0aGF0IGJsb2NrZWQgaW5kZWZpbml0ZWx5LgotKiBGaXhlZCBidWcgaW4gYFRhaWxHbG9iYWxTdGVwYCB3aGVyZSBleGNlc3MgYnVsayB3YXMgbm90IGFjY291bnRlZCBmb3IgY29ycmVjdGx5LgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtMTM1MCBTZXJ2ZXIgbG9ja3Mgd2hlbiBzdWJtaXR0aW5nIHBhcmFsbGVsIHJlcXVlc3RzIG9uIHNlc3Npb24KLSogVElOS0VSUE9QLTEzNzUgUG9zc2libGUgQnl0ZUJ1ZiBsZWFrIGZvciBjZXJ0YWluIHRyYW5zYWN0aW9uYWwgc2NlbmFyaW9zCi0qIFRJTktFUlBPUC0xMzc3IENsb3NpbmcgYSByZW1vdGUgaW4gImNvbnNvbGUgbW9kZSIgaGFzIGJhZCBtZXNzYWdlCi0qIFRJTktFUlBPUC0xMzc5IHVuYWNjb3VudGVkIGV4Y2VzcyBpbiBUYWlsR2xvYmFsU3RlcAotKiBUSU5LRVJQT1AtMTM5NyBTdGFyVmVydGV4IHNlbGYgZWRnZSBoYXMgYnVnZ3kgaW50ZXJhY3Rpb24gd2l0aCBncmFwaCBmaWx0ZXJzCi0qIFRJTktFUlBPUC0xNDE5IFdyb25nIGV4Y2VwdGlvbiB3aGVuIGEgU2Vzc2lvbmVkQ2xpZW50IGlzIGluaXRpYWxpemVkIHdpdGggbm8gYXZhaWxhYmxlIGhvc3QKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtOTg5IERlZmF1bHQgZG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgcmVmZXJlbmNlL2luZGV4Lmh0bWwKLSogVElOS0VSUE9QLTEzNzYgUmVuYW1lIFRpbmtlclBvcCBhcnRpZmFjdHMKLSogVElOS0VSUE9QLTE0MTMgUHJvcGVydGllc1Rlc3QjZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYbmFtZVggYXNzdW1lcyB0aGF0IGlkcyBhcmUgbG9uZ3MKLSogVElOS0VSUE9QLTE0MTYgV3JpdGUgR3JlbWxpbiBTZXJ2ZXIgbG9nIGZpbGVzIHNvbWV3aGVyZSBkdXJpbmcgZG9jIGdlbmVyYXRpb24KLSogVElOS0VSUE9QLTE0MTggQ29yZVRyYXZlcnNhbFRlc3RzIGRlcGVuZCBvbiBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4xLnguYXNjaWlkb2MjcmVsZWFzZS0zLTEtNCwgMy4xLjQgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTEtM11dCiA9PT0gVGlua2VyUG9wIDMuMS4zIChSZWxlYXNlIERhdGU6IEp1bHkgMTgsIDIwMTYpCiAKLSogRml4ZWQgYnVnIGluIGBTdWJncmFwaFN0ZXBgIHdoZXJlIGZlYXR1cmVzIHdlcmUgbm90IGJlaW5nIGNoZWNrZWQgcHJvcGVybHkgcHJpb3IgdG8gcmVhZGluZyBtZXRhLXByb3BlcnRpZXMuCi0qIEVuc3VyZWQgY2FsbHMgdG8gYFJlc3VsdC5oYXNOZXh0KClgIHdlcmUgaWRlbXBvdGVudC4KLSogQXZvaWQgaGFtY3Jlc3QgY29uZmxpY3QgYnkgdXNpbmcgbW9ja2l0by1jb3JlIGluc3RlYWQgb2YgbW9ja2l0by1hbGwgZGVwZW5kZW5jeSBpbiBgZ3JlbWxpbi10ZXN0YC4KLSogRml4ZWQgYnVnIGluIGBHcmVtbGluRXhlY3V0b3JgIGNhdXNpbmcgR3JlbWxpbiBTZXJ2ZXIgdG8gbG9jayB1cCB3aGVuIHBhcmFsbGVsIHJlcXVlc3RzIHdlcmUgc3VibWl0dGVkIG9uIHRoZSBzYW1lIHNlc3Npb24gaWYgdGhvc2UgcGFyYWxsZWwgcmVxdWVzdHMgaW5jbHVkZWQgYSBzY3JpcHQgdGhhdCBibG9ja2VkIGluZGVmaW5pdGVseS4KLSogQ2hhbmdlZCBgR3JlbWxpbkV4ZWN1dG9yYCB0aW1lb3V0IHNjaGVkdWxpbmcgc28gdGhhdCB0aGUgdGltZXIgd291bGQgbm90IHN0YXJ0IHVudGlsIGEgdGltZSBjbG9zZXIgdG8gdGhlIGFjdHVhbCBzdGFydCBvZiBzY3JpcHQgZXZhbHVhdGlvbi4KLSogRml4ZWQgYnVnIGluIGBTdWJncmFwaFN0cmF0ZWd5YCB3aGVyZSBzdGVwIGxhYmVscyB3ZXJlIG5vdCBiZWluZyBwcm9wb2dhdGVkIHByb3Blcmx5IHRvIG5ldyBzdGVwcyBpbmplY3RlZCBieSB0aGUgc3RyYXRlZ3kuCi0qIEZpeCBpbmNvcnJlY3QgdGVzdCBgRmVhdHVyZVJlcXVpcmVtZW50YCBhbm5vdGF0aW9ucy4KLSogRGVmYXVsdGVkIHRvIGBFZGdlLkRFRkFVTFRgIGlmIG5vIGVkZ2UgbGFiZWwgd2FzIHN1cHBsaWVkIGluIEdyYXBoTUwuCi0qIEZpeGVkIGJ1ZyBpbiBgSW9HcmFwaFRlc3RgIGNhdXNpbmcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOiBVUkkgaXMgbm90IGhpZXJhcmNoaWNhbCBlcnJvciBmb3IgZXh0ZXJuYWwgZ3JhcGggaW1wbGVtZW50YXRpb25zLgotKiBGaXhlZCBidWcgaW4gYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVGaWxlU2FuZGJveFRlc3RgIHJlc291cmNlIGxvYWRpbmcKLSogSW1wcm92ZWQgYFRpbmtlckdyYXBoYCBwZXJmb3JtYW5jZSB3aGVuIGl0ZXJhdGluZyB2ZXJ0aWNlcyBhbmQgZWRnZXMuCi0qIEZpeGVkIGEgYnVnIHdoZXJlIHRpbWVvdXQgZnVuY3Rpb25zIHByb3ZpZGVkIHRvIHRoZSBgR3JlbWxpbkV4ZWN1dG9yYCB3ZXJlIG5vdCBleGVjdXRpbmcgaW4gdGhlIHNhbWUgdGhyZWFkIGFzIHRoZSBzY3JpcHQgZXZhbHVhdGlvbi4KLSogRml4ZWQgYSBidWcgaW4gdGhlIGRyaXZlciB3aGVyZSBtYW55IHBhcmFsbGVsIHJlcXVlc3RzIG92ZXIgYSBzZXNzaW9uIHdvdWxkIHNvbWV0aW1lcyBmb3JjZSBhIGNvbm5lY3Rpb24gdG8gY2xvc2UgYW5kIHJlcGxhY2UgaXRzZWxmLgotKiBHcmFwaCBwcm92aWRlcnMgc2hvdWxkIG5vIGxvbmdlciByZWx5IG9uIHRoZSB0ZXN0IHN1aXRlIHRvIHZhbGlkYXRlIHRoYXQgaHlwaGVucyB3b3JrIGZvciBwcm9wZXJ0eSBrZXlzLgotKiBPcHRpbWl6ZWQgYSBmZXcgc3BlY2lhbCBjYXNlcyBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAuCi0qIEFkZGVkIG1vcmUgImludmFsaWQiIHZhcmlhYmxlIGJpbmRpbmdzIHRvIHRoZSBsaXN0IHVzZWQgYnkgR3JlbWxpbiBTZXJ2ZXIgdG8gdmFsaWRhdGUgaW5jb21pbmcgYmluZGluZ3Mgb24gcmVxdWVzdHMuCi0qIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBgQ29ubmVjdGlvblBvb2xgIGluIHRoZSBkcml2ZXIgd291bGQgbm90IGdyb3cgd2l0aCBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KLSogRml4ZWQgYSBidWcgd2hlcmUgcGF1c2VzIGluIEdyZW1saW4gU2VydmVyIHdyaXRpbmcgdG8gYW4gb3ZlcnRheGVkIGNsaWVudCB3b3VsZCBnZW5lcmF0ZSB1bmV4cGVjdGVkIGBGYXN0Tm9TdWNoRWxlbWVudEV4Y2VwdGlvbmAgZXJyb3JzLgotKiBOYW1lZCB0aGUgdGhyZWFkIHBvb2wgdXNlZCBieSBHcmVtbGluIFNlcnZlciBzZXNzaW9uczogImdyZW1saW4tc2VydmVyLXNlc3Npb24tJG4iLgotKiBGaXhlZCBhIGJ1ZyBpbiBgQnVsa1NldC5lcXVhbHMoKWAgd2hpY2ggbWFkZSBpdHNlbGYgYXBwYXJlbnQgd2hlbiB1c2luZyBgc3RvcmUoKWAgYW5kIGBhZ2dyZWdhdGUoKWAgd2l0aCBsYWJlbGVkIGBjYXAoKWAuCi0qIEZpeGVkIGEgYnVnIHdoZXJlIGBSZXN1bHQub25lKClgIGNvdWxkIHBvdGVudGlhbGx5IGJsb2NrIGluZGVmaW5pdGVseSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCi0qIEVuc3VyZWQgdGhhdCBhbGwgYXNzZXJ0cyBvZiB2ZXJ0ZXggYW5kIGVkZ2UgY291bnRzIHdlcmUgYmVpbmcgYXBwbGllZCBwcm9wZXJseSBpbiB0aGUgdGVzdCBzdWl0ZS4KLSogRml4ZWQgYnVnIGluIGBncmVtbGluLWRyaXZlcmAgd2hlcmUgY2VydGFpbiBjaGFubmVsLWxldmVsIGVycm9ycyB3b3VsZCBub3QgYWxsb3cgdGhlIGRyaXZlciB0byByZWNvbm5lY3QuCi0qIGBTdWJncmFwaFN0ZXBgIG5vdyBjb25zdWx0cyB0aGUgcGFyZW50IGdyYXBoIGZlYXR1cmVzIHRvIGRldGVybWluZSBjYXJkaW5hbGl0eSBvZiBhIHByb3BlcnR5LgotKiBVc2Ugb2YgYEN0cmwtQ2AgaW4gR3JlbWxpbiBDb25zb2xlIG5vdyB0cmlnZ2VycyBjbG9zaW5nIG9mIG9wZW4gcmVtb3Rlcy4KLSogQnVtcGVkIFNMRjRKIHRvIDEuNy4yMSBhcyBwcmV2aW91cyB2ZXJzaW9ucyBzdWZmZXJlZCBmcm9tIGEgbWVtb3J5IGxlYWsuCi0qIEZpeGVkIGEgYnVnIGluIGBOZW80akdyYXBoU3RlcFN0cmF0ZWd5YCB3aGVyZSBpdCB3YXNuJ3QgZGVmaW5lZCBwcm9wZXJseSBhcyBhIGBQcm92aWRlck9wdGltaXphdGlvblN0cmF0ZWd5YC4KLSogUmVuYW1lZCBgQW5kVGVzdC5nZXRfZ19WX2FuZFhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndF8yWF9uYW1lYCB0byBgZ2V0X2dfVl9hbmRYaGFzWGFnZV9ndF8yN1hfX291dEVfY291bnRfZ3RlXzJYX25hbWVgIHRvIG1hdGNoIHRoZSB0cmF2ZXJzYWwgYmVpbmcgdGVzdGVkLgotKiBGaXhlZCBhIHNlbGYtbG9vcCBidWcgaW4gYFN0YXJHcmFwaGAuCi0qIEFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBkaXNhYmxpbmcgYDpyZW1vdGVgIHRpbWVvdXQgd2l0aCBgOnJlbW90ZSBjb25maWcgdGltZW91dCBub25lYC4KLSogQWRkZWQgYGluaXQtdHAtc3Bhcmsuc2hgIHRvIEdyZW1saW4gQ29uc29sZSBiaW5hcnkgZGlzdHJpYnV0aW9uLgotKiBGaXhlZCBidWcgd2hlcmUgdXNlIG9mIGA6eGAgaW4gYSBHcmVtbGluIENvbnNvbGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IHdvdWxkIGdlbmVyYXRlIGEgc3RhY2sgdHJhY2UuCi0qIEFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBHcmVtbGluIERyaXZlciBhbmQgU2VydmVyIHRvIG92ZXJyaWRlIHRoZSBTU0wgY29uZmlndXJhdGlvbiB3aXRoIGFuIGBTc2xDb250ZXh0YC4KLSogQWRkZWQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIFNTTDogYGtleUNlcnRDaGFpbkZpbGVgLCBga2V5RmlsZWAgYW5kIGBrZXlQYXNzd29yZGAuCi0qIEZpeGVkIGJ1ZyB3aGVyZSB0cmFuc2FjdGlvbiBtYW5hZ2VkIHNlc3Npb25zIHdlcmUgbm90IHByb3Blcmx5IHJvbGxpbmcgYmFjayB0cmFuc2FjdGlvbnMgZm9yIGV4Y2VwdGlvbnMgZW5jb3VudGVyZWQgZHVyaW5nIHNjcmlwdCBldmFsdWF0aW9uLgotKiBGaXhlZCBidWcgaW4gYDp1bmluc3RhbGxgIGNvbW1hbmQgaWYgdGhlIGRlZmF1bHQgYC9leHRgIGRpcmVjdG9yeSB3YXMgbm90IHVzZWQuCi0qIEFkZGVkIHN1cHBvcnQgdG8gR3JlbWxpbiBEcml2ZXIgdG8gYWxsb3cgZWl0aGVyIHBsYWluIHRleHQgb3IgR1NTQVBJIFNBU0wgYXV0aGVudGljYXRpb24gYWxsb3dpbmcgdGhlIGNsaWVudCB0byBwYXNzIHRoZSBTQVNMIG1lY2hhbmlzbSBpbiB0aGUgcmVxdWVzdC4KLSogSW1wcm92ZWQgZHJ5UnVuIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBkb2NzIHByb2Nlc3Nvci4gSXQncyBub3cgcG9zc2libGUgdG8gZHJ5IHJ1biAob3IgZnVsbCBydW4pIG9ubHkgc3BlY2lmaWMgZmlsZXMuCi0qIEFkZGVkIHByZWNvbXBpbGUgb2YgYFNjcmlwdElucHV0Rm9ybWF0YCBzY3JpcHRzIHRvIGBTY3JpcHRSZWNvcmRSZWFkZXJgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC05MDYgSW5zdGFsbCBwbHVnaW4gYWx3YXlzIGZhaWxzIGFmdGVyIGZpcnN0IHVucmVzb2x2ZWQgZGVwZW5kZW5jeQotKiBUSU5LRVJQT1AtMTA4OCBQcmVzZXJ2ZSBDYXJkaW5hbGl0eSBpbiBTdWJncmFwaAotKiBUSU5LRVJQT1AtMTA5MiBHcmVtbGluIENvbnNvbGUgaW5pdCBzY3JpcHQgd2l0aCA6eCB0aHJvd3MgZXhjZXB0aW9uCi0qIFRJTktFUlBPUC0xMTM5IFtOZW80SkdyYXBoXSBHcmFwaFRyYXZlcnNhbCB3aXRoIFN1YmdyYXBoU3RyYXRlZ3kgcmVtb3ZlcyBhZGRMYWJlbFN0ZXAgKGFzKCJiIikpCi0qIFRJTktFUlBPUC0xMTk2IENhbGxzIHRvIFJlc3VsdC5vbmUoKSBtaWdodCBibG9jayBpbmRlZmluaXRlbHkKLSogVElOS0VSUE9QLTEyMTUgTGFiZWxlZCBhIFNpZGVFZmZlY3RDYXBTdGVwIGNhdXNlIHByb2JsZW1zLgotKiBUSU5LRVJQT1AtMTI0MiBTY3JpcHRFbmdpbmVUZXN0IHJhbmRvbWx5IGhhbmdzIGluZGVmaW5hdGVseS4KLSogVElOS0VSUE9QLTEyNTcgQmFkIFNhY2tUZXN0IHZhcmlhYmxlIHVzZS4KLSogVElOS0VSUE9QLTEyNjUgTWFuYWdlZCBTZXNzaW9uIEV2YWwgRXhjZXB0aW9ucyBSb2xsYmFjawotKiBUSU5LRVJQT1AtMTI3MiBHcmVtbGluIENvbnNvbGUgZGlzdHJpYnV0aW9uIG5lZWRzIGJpbi9pbml0LXRwLXNwYXJrLnNoCi0qIFRJTktFUlBPUC0xMjg0IFN0YXJHcmFwaCBkb2VzIG5vdCBoYW5kbGUgc2VsZi1sb29wcyBjb3JyZWN0bHkuCi0qIFRJTktFUlBPUC0xMzAwIE1hbnkgYXNzZXJ0cyBhcm91bmQgdmVydGV4L2VkZ2UgY291bnRzIG9uIGdyYXBocyBub3QgYXBwbGllZAotKiBUSU5LRVJQT1AtMTMxNyBJb0dyYXBoVGVzdCB0aHJvd3MgZXJyb3I6IFVSSSBpcyBub3QgaGllcmFyY2hpY2FsCi0qIFRJTktFUlBPUC0xMzE4IGphdmEubGFuZy5Ob1N1Y2hNZXRob2RFcnJvcjogb3JnL2hhbWNyZXN0L01hdGNoZXIuZGVzY3JpYmVNaXNtYXRjaAotKiBUSU5LRVJQT1AtMTMxOSBzZXZlcmFsIEZlYXR1cmVSZXF1aXJlbWVudCBhbm5vdGF0aW9ucyBhcmUgaW5jb3JyZWN0IGluIGdyZW1saW4tdGVzdAotKiBUSU5LRVJQT1AtMTMyMCBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lRmlsZVNhbmRib3hUZXN0IHRocm93cyBlcnJvcjogVVJJIGlzIG5vdCBoaWVyYXJjaGljYWwKLSogVElOS0VSUE9QLTEzMjQgQmV0dGVyIGVycm9yIGZvciBpbnZhbGlkIGFyZ3MgdG8gYWRkVigpCi0qIFRJTktFUlBPUC0xMzUwIFNlcnZlciBsb2NrcyB3aGVuIHN1Ym1pdHRpbmcgcGFyYWxsZWwgcmVxdWVzdHMgb24gc2Vzc2lvbgotKiBUSU5LRVJQT1AtMTM1MSBOdW1iZXIgb2YgY29ubmVjdGlvbnMgZ29pbmcgYmV5b25kIHRoZSBwb29sIG1heCBzaXplCi0qIFRJTktFUlBPUC0xMzUyIENvbm5lY3Rpb24gUG9vbCBkb2Vzbid0IGFsd2F5cyBncm93Ci0qIFRJTktFUlBPUC0xMzU5IEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjYWxsaW5nIHN1YmdyYXBoKCkgb24gTmVvNGpHcmFwaAotKiBUSU5LRVJQT1AtMTM2MCBpbnRlcm1pdHRlbnQgZXJyb3IgaW4gc3BhcmstZ3JlbWxpbiBpbnRlZ3JhdGlvbiB0ZXN0Ci0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTkzOSBOZW80akdyYXBoIHNob3VsZCBzdXBwb3J0IEhpZ2hBdmFpbGFiaWxpdHkgKE5lbzRqSEEpLgotKiBUSU5LRVJQT1AtMTAwMyBTZXR0aW5nIHVwIGxhdGVzdC9jdXJyZW50IGxpbmtzIGZvciBiaW5zIGFuZCBkb2NzLgotKiBUSU5LRVJQT1AtMTAyMCBQcm92aWRlIC0tZHJ5UnVuIHNlbGVjdGl2aXR5IGZvciAiaGFsZiBwdWJsaXNoaW5nIiBkb2NzLgotKiBUSU5LRVJQT1AtMTA2MyBUaW5rZXJHcmFwaCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMKLSogVElOS0VSUE9QLTEyMjkgTW9yZSBEZXNjcmlwdGl2ZSBNZXNzYWdpbmcgZm9yIDpyZW1vdGUgY29uc29sZQotKiBUSU5LRVJQT1AtMTI2MCBMb2cgZm9yIHZhbGlkYXRlLWRpc3RyaWJ1dGlvbi5zaAotKiBUSU5LRVJQT1AtMTI2MyBQYXNzIFNBU0wgbWVjaGFuaXNtIG5hbWUgdGhyb3VnaCB3aXRoIGluaXRpYWwgU0FTTCByZXNwb25zZQotKiBUSU5LRVJQT1AtMTI2NyBDb25maWd1cmUgQ29uc29sZSBmb3Igbm8gdGltZW91dCBvbiByZW1vdGUgcmVxdWVzdHMKLSogVElOS0VSUE9QLTEyNjkgTW9yZSBTU0wgc2V0dGluZ3MgZm9yIGRyaXZlcgotKiBUSU5LRVJQT1AtMTI5NSBQcmVjb21waWxlIFNjcmlwdElucHV0Rm9ybWF0IHNjcmlwdHMgb25jZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgU2NyaXB0UmVjb3JkUmVhZGVyCi0qIFRJTktFUlBPUC0xMzAxIFByb3ZpZGUgSmF2YWRvYyBmb3IgU2NyaXB0SW5wdXQvT3V0cHV0Rm9ybWF0J3MKLSogVElOS0VSUE9QLTEzMDIgQ3RybC1DIHNob3VsZCBraWxsIG9wZW4gcmVtb3RlcyBpbiBDb25zb2xlCi0qIFRJTktFUlBPUC0xMzEyIC5jb3VudCgpLmlzKDApIGlzIG5vdCBwcm9wZXJseSBvcHRpbWl6ZWQKLSogVElOS0VSUE9QLTEzMTQgSW1wcm92ZSBlcnJvciBkZXRlY3Rpb24gaW4gZG9jcyBwcmVwcm9jZXNzb3IKLSogVElOS0VSUE9QLTEzNTQgSW5jbHVkZSBhbGwgc3RhdGljIGVudW0gaW1wb3J0cyBpbiByZXF1ZXN0IHZhbGlkYXRpb24gZm9yIGJpbmRpbmdzICooYnJlYWtpbmcpKgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS0zLCAzLjEuMyBjaGFuZ2Vsb2c+Pi4KIAogW1tyZWxlYXNlLTMtMS0yLWluY3ViYXRpbmddXQogPT09IFRpbmtlclBvcCAzLjEuMiAoUmVsZWFzZSBEYXRlOiBBcHJpbCA4LCAyMDE2KQogCi0qIEZpeGVkIHR3byBgTnVsbFBvaW50ZXJFeGNlcHRpb25gLXBvdGVudGlhbCBzaXR1YXRpb25zIGluIGBPYmplY3RXcml0YWJsZWAuCi0qIFByb3ZpZGVkIERvY2tlciBzY3JpcHQgdGhhdCBhbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBzZXZlcmFsIGJ1aWxkIHRhc2tzIHdpdGhpbiBhIERvY2tlciBjb250YWluZXIuCi0qIEFkZGVkIGEgcGVyLXJlcXVlc3QgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCBvcHRpb24gdG8gdGhlIEdyZW1saW4gU2VydmVyIHByb3RvY29sLgotKiBDaGFuZ2VkIGBEcml2ZXJSZW1vdGVBY2NlcHRvcmAgdG8gc2VuZCBzY3JpcHRzIGFzIG11bHRpLWxpbmUuCi0qIEZpeGVkIGEgYnVnIGluIGBncmVtbGluLWRyaXZlcmAgd2hlcmUgY29ubmVjdGlvbnMgd2VyZSBub3QgcmV0dXJuaW5nIHRvIHRoZSBwb29sIGFmdGVyIG1hbnkgY29uc2VjdXRpdmUgZXJyb3JzLgotKiBGaXhlZCBhIGJ1ZyB3aGVyZSBgdHJlZSgpYCBkaWQgbm90IHNlcmlhbGl6ZSBpbnRvIEdyYXBoU09OLgotKiBCdW1wZWQgdG8gU0xGNGogMS43LjE5LgotKiBCdW1wZWQgdG8gQXBhY2hlIEhhZG9vcCAyLjcuMi4KLSogRml4ZWQgYSBidWcgaW4gYGdyZW1saW4tZHJpdmVyYCB3aGVyZSBhIHJlYWxseSBmYXN0IGNhbGwgdG8gZ2V0IGEgYEZ1dHVyZWAgdG8gd2FpdCBmb3IgYSByZXN1bHQgbWlnaHQgbm90IHJlZ2lzdGVyIGFuIGVycm9yIHJhaXNlZCBmcm9tIHRoZSBzZXJ2ZXIuCi0qIEZpeGVkIGEgc2V2ZXJlIGJ1ZyB3aGVyZSBgTFBfT19PQl9QX1NfU0VfU0xfVHJhdmVyc2VyYCB3YXMgbm90IHJlZ2lzdGVyZWQgd2l0aCBgR3J5b01hcHBlcmAuCi0qIFRoZSBmdXR1cmUgZnJvbSBgR3JlbWxpbkV4ZWN1dG9yLmV2YWwoKWAgaXMgY29tcGxldGVkIGFmdGVyIHRoZSBlbnRpcmUgZXZhbHVhdGlvbiBsaWZlY3lsZSBpcyBjb21wbGV0ZWQuCi0qIFNwYXJrIGBNZW1vcnlgIHVzZXMgYGNvbGxlY3QoKS5pdGVyYXRvcigpYCBpbnN0ZWFkIG9mIGB0b0xvY2FsSXRlcmF0b3IoKWAgdG8gcmVkdWNlIG5vaXNlIGluIFNwYXJrIFVJLgotKiBBZGRlZCB0aGUgYDpyZW1vdGUgY29uc29sZWAgb3B0aW9uIHdoaWNoIGZsaXBzIHRoZSBHcmVtbGluIENvbnNvbGUgaW50byBhIHJlbW90ZS1vbmx5IG1vZGUgd2hlcmUgYWxsIHNjcmlwdCBldmFsdWF0aW9uIGlzIHJvdXRlZCB0byB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgcmVtb3RlLCB3aGljaCByZW1vdmVzIHRoZSBuZWVkIHRvIHVzZSB0aGUgYDo+YCBjb21tYW5kLgotKiBBZGRlZCBgYWxsb3dSZW1vdGVDb25zb2xlKClgIHRvIHRoZSBgUmVtb3RlQWNjZXB0b3JgIGludGVyZmFjZS4KLSogVGhlIGA6cmVtb3RlYCBmb3IgYHRpbmtlcnBvcC5zZXJ2ZXJgIG5vdyBpbmNsdWRlcyBhbiBvcHRpb24gdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIGFzIGEgInNlc3Npb24iLgotKiBQcm92aWRlZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgY2FsbHMgdG8gYFNlc3Npb25lZENsaWVudC5hbGlhcygpYCwgd2hpY2ggZm9ybWVybHkgdGhyZXcgYW4gYFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uYC4KLSogQnVtcGVkIHRvIGNvbW1vbnMtY29sbGVjdGlvbnMgMy4yLjIuCi0qIEZpeGVkIGEgYnVnIHdoZXJlIGBPcmRlckdsb2JhbFN0ZXBgIGFuZCBgT3JkZXJMb2NhbFN0ZXBgIHdlcmUgbm90IGluY29ycG9yYXRpbmcgdGhlaXIgY2hpbGRyZW4ncyB0cmF2ZXJzZXIgcmVxdWlyZW1lbnRzLgotKiBGaXhlZCBhIGNvbXBpbGF0aW9uIGJ1ZyBpbiBgVHJhdmVyc2FsRXhwbGFuYXRpb25gLgotKiBGaXhlZCBidWcgd2hlcmUgYSBzZXNzaW9uIGV4cGxpY2l0bHkgY2xvc2VkIHdhcyBiZWluZyBjbG9zZWQgYWdhaW4gYnkgc2Vzc2lvbiBleHBpcmF0aW9uLgotKiBJbXByb3ZlZCB0aGUgcmVjb3Zlcnkgb3B0aW9ucyBmb3IgYGdyZW1saW4tZHJpdmVyYCBhZnRlciBmYWlsZWQgcmVxdWVzdHMgdG8gR3JlbWxpbiBTZXJ2ZXIuCi0qIEFkZGVkIGBtYXhXYWl0Rm9yU2Vzc2lvbkNsb3NlYCB0byB0aGUgc2V0dGluZ3MgZm9yIGBncmVtbGluLWRyaXZlcmAuCi0qIEJ1bXBlZCB0byBOZXR0eSA0LjAuMzQuRmluYWwuCi0qIEFkZGVkICJpbnRlcnByZXRlciBtb2RlIiBmb3IgdGhlIGBTY3JpcHRFbmdpbmVgIGFuZCBHcmVtbGluIFNlcnZlciB3aGljaCBhbGxvd3MgdmFyaWFibGVzIGRlZmluZWQgd2l0aCBgZGVmYCBvciBhIHR5cGUgdG8gYmUgcmVjb2duaXplZCBhcyAiZ2xvYmFsIi4KLSogQnVtcGVkIHRvIEFwYWNoZSBHcm9vdnkgMi40LjYuCi0qIEFkZGVkIHRoZSBgZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyYCBhcmNoZXR5cGUgdGhhdCBkZW1vbnN0cmF0ZXMKLSogQWRkZWQgdGhlIGBncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaGAgYXJjaGV0eXBlIHRoYXQgZGVtb25zdHJhdGVzIGEgYmFzaWMgcHJvamVjdCB0aGF0IHVzZXMgVGlua2VyR3JhcGguCi0qIEFkZGVkIGBncmVtbGluLWFyY2hldHlwZWAgbW9kdWxlIHRvIGhvdXNlIFRpbmtlclBvcCAiZXhhbXBsZXMiLgotKiBGaXhlZCBhIGNvbmRpdGlvbiB3aGVyZSBgQ29ubmVjdGlvblBvb2xgIGluaXRpYWxpemF0aW9uIGluIHRoZSBkcml2ZXIgd291bGQgcHJlc2VudCBhIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAgb24gaW5pdGlhbGl6YXRpb24gaWYgdGhlcmUgd2VyZSBlcnJvcnMgY29uc3RydWN0aW5nIHRoZSBwb29sIGluIGZ1bGwuCi0qIEZpeGVkIGEgYnVnIGluIHRoZSByb3VuZC1yb2JpbiBsb2FkIGJhbGFuY2luZyBzdHJhdGVneSBpbiB0aGUgZHJpdmVyIHdvdWxkIHdhc3RlIHJlcXVlc3RzIHBvdGVudGlhbGx5IHNlbmRpbmcgbWVzc2FnZXMgdG8gZGVhZCBob3N0cy4KLSogQWRkZWQgbmV3IFByb3ZpZGVyIERvY3VtZW50YXRpb24gYm9vayAtIGNvbnRlbnQgZm9yIHRoaXMgYm9vayB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uLgotKiBGaXhlZCBhIGJ1ZyB3aGVyZSBtdWx0aXBsZSAiY2xvc2UiIHJlcXVlc3RzIHdlcmUgYmVpbmcgc2VudCBieSB0aGUgZHJpdmVyIG9uIGBDbGllbnQuY2xvc2UoKWAuCi0qIEZpeGVkIGFuIGBQcm9wZXJ0eWAgYXR0YWNoIGJ1ZyB0aGF0IHNob3dzIHVwIGluIHNlcmlhbGl6YXRpb24tYmFzZWQgYEdyYXBoQ29tcHV0ZXJgIGltcGxlbWVudGF0aW9ucy4KLSogRml4ZWQgYSBwb20ueG1sIGJ1ZyB3aGVyZSBHcmVtbGluIENvbnNvbGUvU2VydmVyIHdlcmUgbm90IHB1bGxpbmcgdGhlIGxhdGVzdCBOZW80aiAyLjMuMi4KLSogRml4ZWQgYnVnIGluICJyb3VuZCByb2JpbiIgbG9hZCBiYWxhbmNpbmcgaW4gYGdyZW1saW4tZHJpdmVyYCB3aGVyZSByZXF1ZXN0cyB3ZXJlIHdyb25nbHkgYmVpbmcgc2VudCB0byB0aGUgc2FtZSBob3N0LgotKiBQcmV2ZW50ZWQgdGhlIHNwYXduaW5nIG9mIHVubmVlZGVkIHJlY29ubmVjdCB0YXNrcyBpbiBgZ3JlbWxpbi1kcml2ZXJgIHdoZW4gYSBob3N0IGdvZXMgb2ZmbGluZS4KLSogRml4ZWQgYnVnIHByZXZlbnRpbmcgYGdyZW1saW4tZHJpdmVyYCBmcm9tIHJlY29ubmVjdGluZyB0byBHcmVtbGluIFNlcnZlciB3aGVuIGl0IHdhcyByZXN0YXJ0ZWQuCi0qIEJldHRlciBoYW5kbGVkIGVycm9ycyB0aGF0IG9jY3VycmVkIG9uIGNvbW1pdHMgYW5kIHNlcmlhbGl6YXRpb24gaW4gR3JlbWxpbiBTZXJ2ZXIgdG8gZmlyc3QgYnJlYWsgdGhlIHJlc3VsdCBpdGVyYXRpb24gbG9vcCBhbmQgdG8gZW5zdXJlIGNvbW1pdCBlcnJvcnMgd2VyZSByZXBvcnRlZCB0byB0aGUgY2xpZW50LgotKiBBZGRlZCBHcmFwaFNPTiBzZXJpYWxpemVycyBmb3IgdGhlIGBqYXZhLnRpbWUuKmAgY2xhc3Nlcy4KLSogSW1wcm92ZWQgdGhlIGxvZ2dpbmcgb2YgdGhlIEdyZW1saW4gU2VydmVyIFJFU1QgZW5kcG9pbnQgYXMgaXQgcGVydGFpbmVkIHRvIHNjcmlwdCBleGVjdXRpb24gZmFpbHVyZXMuCi0qIGBUcmF2ZXJzYWxFeHBsYW5hdGlvbmAgaXMgbm93IGBTZXJpYWxpemFibGVgIGFuZCBjb21wYXRpYmxlIHdpdGggR3JhcGhTT04gYW5kIEdyeW8gc2VyaWFsaXphdGlvbi4KLSogRml4ZWQgYSBwcm9ibGVtIHdpdGggZ2xvYmFsIGJpbmRpbmdzIGluIEdyZW1saW4gU2VydmVyIHdoaWNoIHdlcmVuJ3QgcHJvcGVybHkgZGVzaWduZWQgdG8gaGFuZGxlIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLgotKiBEZXByZWNhdGVkIGBTY3JpcHRFbGVtZW50RmFjdG9yeWAgYW5kIG1hZGUgdGhlIGxvY2FsIGBTdGFyR3JhcGhgIGdsb2JhbGx5IGF2YWlsYWJsZSBmb3IgYGBTY3JpcHRJbnB1dEZvcm1hdGBgJ3MgYHBhcnNlKClgIG1ldGhvZC4KLSogSW1wcm92ZWQgcmV1c2FiaWxpdHkgb2YgdW5pcXVlIHRlc3QgZGlyZWN0b3J5IGNyZWF0aW9uIGluIGAvdGFyZ2V0YCBmb3IgYEFic3RyYWN0R3JhcGhQcm92aWRlcmAsIHdoaWNoIHdhcyBmb3JtZXJseSBvbmx5IGF2YWlsYWJsZSB0byBOZW80aiwgYnkgYWRkaW5nIGBtYWtlVGVzdERpcmVjdG9yeSgpYC4KLSogT3B0aW1pemVkIG1lbW9yeS11c2FnZSBpbiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAuCi0qIGBHcmFwaGAgaW5zdGFuY2VzIGFyZSBub3QgbWVyZWx5ICJjbG9zZWQiIGF0IHRoZSBlbmQgb2YgdGVzdHMsIHRoZXkgYXJlICJjbGVhcmVkIiB2aWEgYEdyYXBoUHJvdmlkZXIuY2xlYXIoKWAsIHdoaWNoIHNob3VsZCBpbiB0dXJuIGNsZWFucyB1cCBvbGQgZGF0YSBmb3IgYW4gaW1wbGVtZW50YXRpb24uCi0qIEV4cGFuZGVkIHRoZSBHcmVtbGluIFNlcnZlciBwcm90b2NvbCB0byBhbGxvdyBmb3IgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBvbiBpbi1zZXNzaW9uIHJlcXVlc3RzIGFuZCB1cGRhdGVkIHRoZSBgZ3JlbWxpbi1kcml2ZXJgIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoYXQuCi0qIEdyZWF0bHkgcmVkdWNlZCB0aGUgYW1vdW50IG9mIG9iamVjdHMgcmVxdWlyZWQgaW4gT0xBUCBmb3IgdGhlIGBSZWR1Y2luZ0JhcnJpZXJTdGVwYCBzdGVwcy4KLSogSW1wcm92ZWQgbWVzc2FnZXMgZm9yIHRoZSBkaWZmZXJlbnQgZGlzdGluY3QgInRpbWVvdXRzIiB0aGF0IGEgdXNlciBjYW4gZW5jb3VudGVyIHdpdGggR3JlbWxpbiBTZXJ2ZXIuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC0xMDQxIFN0cnVjdHVyZVN0YW5kYXJkVGVzdFN1aXRlIGhhcyBmaWxlIEkvTyBpc3N1ZXMgb24gV2luZG93cwotKiBUSU5LRVJQT1AtMTEwNSBTcGFya0dyYXBoQ29tcHV0ZXIgLyBOdWxsIFBvaW50ZXIgRXhjZXB0aW9ucyBmb3IgcHJvcGVydGllcyB0cmF2ZXJzYWxzCi0qIFRJTktFUlBPUC0xMTA2IEVycm9ycyBvbiBjb21taXQgaW4gR3JlbWxpbiBTZXJ2ZXIgZG9uJ3QgcmVnaXN0ZXIgYXMgZXhjZXB0aW9uIG9uIGRyaXZlcgotKiBUSU5LRVJQT1AtMTEyNSBSb3VuZFJvYmluIGxvYWQgYmFsYW5jaW5nIGFsd2F5cyB1c2VzIHRoZSBzZWNvbmQgSG9zdCB3aGVuIHNpemUgPSAyCi0qIFRJTktFUlBPUC0xMTI2IEEgc2luZ2xlIEhvc3Qgc3Bhd25zIG1hbnkgcmVjb25uZWN0IHRhc2tzCi0qIFRJTktFUlBPUC0xMTI3IGNsaWVudCBmYWlscyB0byByZWNvbm5lY3QgdG8gcmVzdGFydGVkIHNlcnZlcgotKiBUSU5LRVJQT1AtMTE0NiBJb1Rlc3QgYXJlIG5vdCBjbGVhcmluZyB0aGUgZGIgYWZ0ZXIgdGhlIHRlc3QgcnVuCi0qIFRJTktFUlBPUC0xMTQ4IENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24gd2l0aCBiaW5kaW5ncyBpbiBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtMTE1MCBVcGRhdGUgcG9tIGZpbGUgZGVwZW5kZW5jaWVzIHRvIHdvcmsgd2l0aCBOZW80aiAyLjMuMgotKiBUSU5LRVJQT1AtMTE1OSBDbGllbnQgc2VuZHMgbXVsdGlwbGUgc2Vzc2lvbiBjbG9zZSBtZXNzYWdlcyBwZXIgaG9zdAotKiBUSU5LRVJQT1AtMTE2OCBTd2l0Y2ggcGx1Z2lucyBpbiBkb2NzIHByZXByb2Nlc3NvcgotKiBUSU5LRVJQT1AtMTE3MiBSZWNvbm5lY3QgdG8gR3JlbWxpbiBTZXJ2ZXIgcHJldmlvdXNseSBtYXJrZWQgYXMgZGVhZAotKiBUSU5LRVJQT1AtMTE3NSBBbm9ueW1vdXMgdHJhdmVyc2FscyBjYW4ndCBiZSBleHBsYWluZWQKLSogVElOS0VSUE9QLTExODQgU2Vzc2lvbnMgbm90IGJlaW5nIGNsb3NlZCBwcm9wZXJseQotKiBUSU5LRVJQT1AtMTIxNiBPcmRlclN0ZXAgb3IgT19UcmF2ZXJzZXIgaXMgYnJva2VuCi0qIFRJTktFUlBPUC0xMjM5IEV4Y2Vzc2l2ZSBjb250aW51YWwgZmFpbHVyZSBmb3IgcmVxdWVzdHMgY2FuIGNhdXNlIFRpbWVvdXRFeGNlcHRpb24gaW4gZHJpdmVyCi0qIFRJTktFUlBPUC0xMjQ1IEdyZW1saW4gc2hlbGwgc3RhcnRzIGluY29ycmVjdGx5IG9uIE9TIFggZHVlIHRvIGF3ayBkaWZmZXJlbmNlCi0qIFRJTktFUlBPUC0xMjUxIE5QRSBpbiBPYmplY3RXcml0YWJsZS50b1N0cmluZwotKiBUSU5LRVJQT1AtMTI1MiBGYWlsZWQgTmVvNGogdHJhbnNhY3Rpb24gY2FuIGxlYXZlIE5lbzRqVHJhbnNhY3Rpb24gaW4gaW5jb25zaXN0ZW50IHN0YXRlCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTczMiBncmVtbGluLXNlcnZlciBHcmFwaFNPTiBzZXJpYWxpemVyIGlzc3VlIHdpdGggdHJlZSgpCi0qIFRJTktFUlBPUC05MTYgRGV2ZWxvcCBhIGJldHRlciAic2ltcGxlIiBkcml2ZXIgZm9yIHRlc3RpbmcgYW5kIGV4YW1wbGUgcHVycG9zZXMKLSogVElOS0VSUE9QLTkzNyBFeHRyYWN0IHRoZSBpbXBsZW1lbnRhdGlvbnMgc2VjdGlvbnMgb2YgdGhlIHByaW1hcnkgZG9jdW1lbnRhdGlvbiB0byBpdHMgb3duIGJvb2sKLSogVElOS0VSUE9QLTk1NiBDb25uZWN0aW9uIGVycm9ycyB0ZW5kIHRvIGZvcmNlIGEgY29tcGxldGUgY2xvc2Ugb2YgdGhlIGNoYW5uZWwKLSogVElOS0VSUE9QLTEwMzkgRW5hYmxlIGF1dG8tY29tbWl0IGZvciBzZXNzaW9uJ2QgcmVxdWVzdHMuCi0qIFRJTktFUlBPUC0xMDY4IEJ1bXAgdG8gc3VwcG9ydCBqYmNyeXB0LTAuNG0uamFyCi0qIFRJTktFUlBPUC0xMDgwIEJ1bXAgTmV0dHkgdmVyc2lvbiAtIDQuMC4zNC5GaW5hbAotKiBUSU5LRVJQT1AtMTA4NSBFc3RhYmxpc2ggVGlua2VyUG9wICJleGFtcGxlIiBwcm9qZWN0cwotKiBUSU5LRVJQT1AtMTA5NiBTdXBwb3J0IGFsaWFzaW5nIGZvciBzZXNzaW9ucyBpbiBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtMTA5NyBHcmVtbGluIENvbnNvbGUgc3VwcG9ydGluZyBzZXNzaW9ucwotKiBUSU5LRVJQT1AtMTEwNyBQcm92aWRlIGEgd2F5IHRvIHN1cHBvcnQgZ2xvYmFsIHZhcmlhYmxlcyB3aXRoIHNhbmRib3hpbmcgZW5hYmxlZAotKiBUSU5LRVJQT1AtMTEwOSBNYWtlIEdyZW1saW4gQ29uc29sZSBiZXR0ZXIgc3VpdGVkIGZvciBzeXN0ZW0gbGV2ZWwgaW5zdGFsbHMKLSogVElOS0VSUE9QLTExMzEgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbSB0cmF2ZXJzZXIgbWFuYWdlbWVudCBpcyBpbmVmZmljaWVudCBtZW1vcnktd2lzZS4KLSogVElOS0VSUE9QLTExMzUgSW1wcm92ZSBHcmFwaFNPTiByZXByZXNlbnRhdGlvbiBvZiBqYXZhLnRpbWUuKiBjbGFzc2VzCi0qIFRJTktFUlBPUC0xMTM3IERlcHJlY2F0ZSBTY3JpcHRFbGVtZW50RmFjdG9yeSBhbmQgbWFrZSBzdGFyIGdyYXBoIGdsb2JhbGx5IGF2YWlsYWJsZQotKiBUSU5LRVJQT1AtMTEzOCBJbXByb3ZlIG1lc3NhZ2luZyBvbiBzZXJ2ZXIgdGltZW91dHMKLSogVElOS0VSUE9QLTExNDcgQWRkIHNlcmlhbGl6YXRpb24gZm9yIFRyYXZlcnNhbEV4cGxhbmF0aW9uCi0qIFRJTktFUlBPUC0xMTYwIEFkZCB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gZm9yIHRpbWUgdG8gd2FpdCBmb3IgY29ubmVjdGlvbiBjbG9zZQotKiBUSU5LRVJQT1AtMTE2NSBUb29saW5nIFN1cHBvcnQ6IENvbXBpbGUgd2l0aCAtcGFyYW1ldGVycwotKiBUSU5LRVJQT1AtMTE3NiBCdW1wIEdyb292eSB2ZXJzaW9uIC0gMi40LjYKLSogVElOS0VSUE9QLTExNzcgSW1wcm92ZSBkb2N1bWVudGF0aW9uIGFyb3VuZCBTcGFyaydzIHN0b3JhZ2UgbGV2ZWxzCi0qIFRJTktFUlBPUC0xMTk3IERvY3VtZW50IEdyZW1saW4gU2VydmVyIGF2YWlsYWJsZSBtZXRyaWNzCi0qIFRJTktFUlBPUC0xMTk4IEJ1bXAgY29tbW9ucy1jb2xsZWN0aW9ucyB0byAzLjIuMgotKiBUSU5LRVJQT1AtMTIxMyBtaXNzaW5nIGRvY3MgZm9yIGhhcyhsYWJlbCwga2V5LCB2YWx1ZSkKLSogVElOS0VSUE9QLTEyMTggVXNhZ2Ugb2YgdG9Mb2NhbEl0ZXJhdG9yIFByb2R1Y2VzIGxhcmdlIGFtb3VudCBvZiBTcGFyayBKb2JzCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jI3JlbGVhc2UtMy0xLTItaW5jdWJhdGluZywgMy4xLjIgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTEtMS1pbmN1YmF0aW5nXV0KID09PSBUaW5rZXJQb3AgMy4xLjEgKFJlbGVhc2UgRGF0ZTogRmVicnVhcnkgOCwgMjAxNikKIAotKiBNYWRlIGBHcnlvUmVjb3JkUmVhZGVyYCBtb3JlIHJvYnVzdCB0byAwIGJ5dGUgcmVjb3JkIHNwbGl0cy4KLSogRml4ZWQgYSBjb25zdHJ1Y3Rvci9zZXJpYWxpemF0aW9uIGJ1ZyBpbiBgTFBfT19PQl9TX1NFX1NMX1RyYXZlcnNlcmAuCi0qIEFkZGVkIGEgbGF6eSBpdGVyYXRvciwgbWVtb3J5IHNhZmUgaW1wbGVtZW50YXRpb24gb2YgTWFwUmVkdWNlIHRvIGBTcGFya0dyYXBoQ29tcHV0ZXJgLgotKiBBZGRlZCBgTWFwUmVkdWNlLmNvbWJpbmUoKWAgc3VwcG9ydCB0byBgU3BhcmtHcmFwaENvbXB1dGVyYC4KLSogQnVtcGVkIHRvIE5lbzRqIDIuMy4yLgotKiBGaXhlZCBKYXZhIGNvbXBhcmF0b3IgY29udHJhY3QgaXNzdWUgYXJvdW5kIGBPcmRlci5zaHVmZmxlYC4KLSogT3B0aW1pemVkIGEgdmVyeSBpbmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZiBgU2FtcGxlTG9jYWxTdGVwYC4KLSogUmVkdWNlZCB0aGUgY29tcGxleGl0eSBhbmQgZXhlY3V0aW9uIHRpbWUgb2YgYWxsIGBBYnN0cmFjdExhbWJkYVRyYXZlcnNhbGAgaW5zdGFuY2VzLgotKiBgRGVmYXVsdFRyYXZlcnNhbGAgaGFzIGEgd2VsbCBkZWZpbmVkIGBoYXNoQ29kZSgpYCBhbmQgYGVxdWFscygpYC4KLSogQWRkZWQgc2VyaWFsaXplcnMgdG8gR3J5byBmb3IgYGphdmEudGltZWAgcmVsYXRlZCBjbGFzc2VzLgotKiBJbnRlZ3JhdGVkIGBOdW1iZXJIZWxwZXJgIGluIGBTYWNrRnVuY3Rpb25zYC4KLSogRGVwcmVjYXRlZCBgVmVydGV4UHJvcGVydHlGZWF0dXJlcy5zdXBwb3J0c0FkZFByb3BlcnR5KClgIHdoaWNoIGVmZmVjdGl2ZWx5IHdhcyBhIGR1cGxpY2F0ZSBvZiBgVmVydGV4RmVhdHVyZXMuc3VwcG9ydHNNZXRhUHJvcGVydGllc2AuCi0qIFRoZSBTcGFyayBwZXJzaXN0ZW5jZSBgU3RvcmFnZUxldmVsYCBjYW4gbm93IGJlIHNldCBmb3IgYm90aCBqb2IgZ3JhcGhzIGFuZCBgUGVyc2lzdGVkT3V0cHV0UkREYCBkYXRhLgotKiBBZGRlZCB0byB0aGUgbGlzdCBvZiAiaW52YWxpZCBiaW5kaW5nIGtleXMiIGFsbG93ZWQgYnkgR3JlbWxpbiBTZXJ2ZXIgdG8gY292ZXIgdGhlIHByaXZhdGUgZmllbGRzIG9mIGBUYCB3aGljaCBnZXQgZXhwb3NlZCBpbiB0aGUgYFNjcmlwdEVuZ2luZWAgb24gc3RhdGljIGltcG9ydHMuCi0qIEFkZGVkIGBCdWxrRHVtcGVyVmVydGV4UHJvZ3JhbWAgdGhhdCBhbGxvd3MgdG8gZHVtcCBhIHdob2xlIGdyYXBoIGluIGFueSBvZiB0aGUgc3VwcG9ydGVkIElPIGZvcm1hdHMgKEdyYXBoU09OLCBHcnlvLCBTY3JpcHQpLgotKiBGaXhlZCBhIGJ1ZyBhcm91bmQgZHVyYXRpb24gY2FsY3VsYXRpb25zIG9mIGBjYXAoKWAtc3RlcCBkdXJpbmcgcHJvZmlsaW5nLgotKiBJdCBpcyBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IGF2b2lkIHVzaW5nIEhERlMgd2l0aCBTcGFyayBpZiBgUGVyc2lzdGVkSW5wdXRSRERgIGFuZCBgUGVyc2lzdGVkT3V0cHVSRERgIGFyZSBsZXZlcmFnZWQuCi0qIGBJbnB1dFJERGAgYW5kIGBPdXRwdXRSRERgIGNhbiBub3cgcHJvY2VzcyBib3RoIGdyYXBocyBhbmQgbWVtb3J5IChpLmUuIHNpZGVFZmZlY3RzKS4KLSogUmVtb3ZlZCBHcm9vdnkgc3BlY2lmaWMgbWV0YS1wcm9ncmFtbWluZyBvdmVybG9hZHMgZm9yIGhhbmRsaW5nIEhhZG9vcCBgRmlsZVN5c3RlbWAgKGluc3RlYWQsIGl0cyBhbGwgYWNjZXNzaWJsZSB2aWEgYEZpbGVTeXN0ZW1TdG9yYWdlYCkuCi0qIEFkZGVkIGBGaWxlU3lzdGVtU3RvcmFnZWAgYW5kIGBTcGFya0NvbnRleHRTdG9yYWdlYCB3aGljaCBib3RoIGltcGxlbWVudCB0aGUgbmV3IGBTdG9yYWdlYCBBUEkuCi0qIEFkZGVkIGBTdG9yYWdlYCB0byB0aGUgZ3JlbWxpbi1jb3JlIGlvLXBhY2thZ2Ugd2hpY2ggcHJvdmlkZXJzIGNhbiBpbXBsZW1lbnQgdG8gYWxsb3cgY29udmVudGlvbmFsIGFjY2VzcyB0byBkYXRhIHNvdXJjZXMgKGUuZy4gYGxzKClgLCBgcm0oKWAsIGBjcCgpYCwgZXRjLikuCi0qIEJ1bXBlZCB0byBTcGFyayAxLjUuMi4KLSogQnVtcGVkIHRvIEdyb292eSAyLjQuNS4KLSogQWRkZWQgYC0tbm9DbGVhbmAgb3B0aW9uIGluIGBiaW4vcHJvY2Vzcy1kb2NzLnNoYCB0byBwcmV2ZW50IHRoZSBzY3JpcHQgZnJvbSBjbGVhbmluZyBHcmFwZXMgYW5kIEhERlMuCi0qIEV4ZWN1dGUgdGhlIGBMaWZlQ3ljbGUuYmVmb3JlRXZhbCgpYCBpbiB0aGUgc2FtZSB0aHJlYWQgdGhhdCBgZXZhbCgpYCBpcyBleGVjdXRlZCBpbiBmb3IgYEdyZW1saW5FeGVjdXRvcmAuCi0qIEltcHJvdmVkIGVycm9yIGhhbmRsaW5nIG9mIEdyZW1saW4gQ29uc29sZSBpbml0aWFsaXphdGlvbiBzY3JpcHRzIHRvIGJldHRlciBzZXBhcmF0ZSBlcnJvcnMgaW4gaW5pdGlhbGl6YXRpb24gc2NyaXB0IEkvTyB2ZXJzdXMgZXhlY3V0aW9uIG9mIHRoZSBzY3JpcHQgaXRzZWxmLgotKiBGaXhlZCBhIGJ1ZyBpbiBgR3JhcGguT3B0T3V0YCB3aGVuIHRyeWluZyB0byBvcHQtb3V0IG9mIGNlcnRhaW4gdGVzdCBjYXNlcyB3aXRoIHRoZSBgbWV0aG9kYCBwcm9wZXJ0eSBzZXQgdG8gIioiLgotKiBBZGRlZCBhbm90aGVyIGBCdWxrTG9hZGVyYCBpbXBsZW1lbnRhdGlvbiAoYE9uZVRpbWVCdWxrTG9hZGVyYCkgdGhhdCBkb2Vzbid0IHN0b3JlIHRlbXBvcmFyeSBwcm9wZXJ0aWVzIGluIHRoZSB0YXJnZXQgZ3JhcGguCi0qIEFkZGVkIG9wdGlvbiB0byBhbGxvdyBmb3IgYSBjdXN0b20gYENsYXNzUmVzb2x2ZXJgIHRvIGJlIGFzc2lnbmVkIHRvIGEgYEdyeW9NYXBwZXJgIGluc3RhbmNlLgotKiBGaXhlZCBhIGBTcGFya0dyYXBoQ29tcHV0ZXJgIHNvcnRpbmcgYnVnIGluIE1hcFJlZHVjZSB0aGF0IG9jY3VycmVkIHdoZW4gdGhlcmUgd2FzIG1vcmUgdGhhbiBvbmUgcGFydGl0aW9uLgotKiBBZGRlZCBgc3RyaWN0VHJhbnNhY3Rpb25NYW5hZ2VtZW50YCB0byB0aGUgR3JlbWxpbiBTZXJ2ZXIgc2V0dGluZ3MgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYGFsaWFzZXNgIHBhcmFtZXRlciBtdXN0IGJlIHBhc3NlZCBvbiByZXF1ZXN0cyBhbmQgdGhhdCB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHdpbGwgYmUgc2NvcGVkIHRvIHRoZSBncmFwaHMgcHJvdmlkZWQgaW4gdGhhdCBhcmd1bWVudC4KLSogRml4ZWQgYSBgTnVsbFBvaW50ZXJFeGNlcHRpb25gIGJ1ZyBpbiBgUGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbWAgdGhhdCBvY2N1cnJlZCB3aGVuIGFuIGFkamFjZW5jeSB0cmF2ZXJzYWwgd2FzIG5vdCBwcm92aWRlZC4KLSogU3RhbmRhcmRpemVkICJ0ZXN0IGRhdGEgZGlyZWN0b3JpZXMiIGFjcm9zcyBhbGwgdGVzdHMgYXMgZ2VuZXJhdGVkIGJ5IGBUZXN0SGVscGVyYC4KLSogRml4ZWQgYSBidWcgaW4gR3JlbWxpbiBTZXJ2ZXIgd2hlcmUgZXJyb3IgbWVzc2FnZXMgd2VyZSBub3QgYWx3YXlzIGJlaW5nIHBhc3NlZCBiYWNrIGluIHRoZSBgc3RhdHVzTWVzc2FnZWAgZmllbGQgb2YgdGhlIGBSZXNwb25zZU1lc3NhZ2VgLgotKiBBZGRlZCB2YWxpZGF0aW9uIGZvciBwYXJhbWV0ZXIgYGJpbmRpbmdzYCB0byBlbnN1cmUgdGhhdCBrZXlzIHdlcmUgYFN0cmluZ2AgdmFsdWVzLgotKiBJbXByb3ZlZCBUcmFuc2FjdGlvbiBNYW5hZ2VtZW50IGNvbnNpc3RlbmN5IGluIEdyZW1saW4gU2VydmVyLgotKiBBZGRlZCBgRmlsZVNhbmRib3hFeHRlbnNpb25gIHdoaWNoIHRha2VzIGEgY29uZmlndXJhdGlvbiBmaWxlIHRvIHdoaXRlIGxpc3QgbWV0aG9kcyBhbmQgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGBTY3JpcHRFbmdpbmVgIGV4ZWN1dGlvbi4KLSogRGVwcmVjYXRlZCBgU2FuZGJveEV4dGVuc2lvbmAgYW5kIGBTaW1wbGVTYW5kYm94RXh0ZW5zaW9uYCBpbiBmYXZvciBvZiBgQWJzdHJhY3RTYW5kYm94RXh0ZW5zaW9uYCB3aGljaCBwcm92aWRlcyBiZXR0ZXIgYWJzdHJhY3Rpb25zIGZvciB0aG9zZSB3cml0aW5nIHNhbmRib3hlcy4KLSogRml4ZWQgYSBsb25nIHN0YW5kaW5nICJ2aWV3IG1lcmdlIiBpc3N1ZSByZXF1aXJpbmcgYHJlZHVjZUJ5S2V5KClgIG9uIGlucHV0IGRhdGEgdG8gU3BhcmsuIEl0IGlzIG5vIGxvbmdlciByZXF1aXJlZC4KLSogQWRkZWQgYFNwYXJrYCBzdGF0aWMgb2JqZWN0IHRvIGFsbG93ICJmaWxlIHN5c3RlbSIgY29udHJvbCBvZiBwZXJzaXN0ZWQgUkREcyBpbiBTcGFyay4KLSogQWRkZWQgYSBTcGFyayAiam9iIHNlcnZlciIgdG8gZW5zdXJlIHRoYXQgcGVyc2lzdGVkIFJERHMgYXJlIG5vdCBnYXJiYWdlIGNvbGxlY3RlZCBieSBTcGFyay4KLSogSW1wcm92ZWQgbG9nZ2luZyBjb250cm9sIGR1cmluZyBidWlsZHMgd2l0aCBNYXZlbi4KLSogRml4ZWQgc2V0dGluZ3MgdGhhdCB3ZXJlbid0IGJlaW5nIHBhc3NlZCB0byB0aGUgR3JlbWxpbiBEcml2ZXIgYENsdXN0ZXJgIHRocm91Z2ggY29uZmlndXJhdGlvbiBmaWxlLgotKiBgQ29sdW1uYCBub3cgaW1wbGVtZW50cyBgRnVuY3Rpb25gLiBUaGUgbW9kdWxhdG9yIGBieSh2YWx1ZURlY3IpYCBjYW4gYmUgcmVwbGFjZWQgYnkgYGJ5KHZhbHVlcyxkZWNyKWAgYW5kIHRodXMsIHByb2plY3Rpb24gYW5kIG9yZGVyIGFyZSBzZXBhcmF0ZWQuCi0qIEFkZGVkIGBJbnB1dFJEREZvcm1hdGAgd2hpY2ggd3JhcHMgYW4gYElucHV0UkREYCB0byBtYWtlIGl0IGFjY2Vzc2libGUgdG8gSGFkb29wIGFuZCBub3QganVzdCBTcGFyay4KLSogQWRkZWQgYEFic3RyYWN0U3BhcmtUZXN0YCB3aGljaCBoYW5kbGVzIGNsb3NpbmcgYFNwYXJrQ29udGV4dGAgaW5zdGFuY2VzIGJldHdlZW4gdGVzdHMgbm93IHRoYXQgd2Ugc3VwcG9ydCBwZXJzaXN0ZWQgY29udGV4dHMuCi0qIEZpeGVkIGEgc2VyaWFsaXphdGlvbiBidWcgaW4gYEdyeW9TZXJpYWxpemVyYCB0aGF0IG1hZGUgaXQgZGlmZmljdWx0IGZvciBncmFwaCBwcm92aWRlcnMgdG8geWllbGQgYElucHV0UkREc2AgZm9yIGBTcGFya0dyYXBoQ29tcHV0ZXJgLgotKiBgU3BhcmtHcmFwaENvbXB1dGVyYCBpcyBub3cgdGVzdGVkIGFnYWluc3QgR3J5bywgR3JhcGhTT04sIGFuZCBgSW5wdXRSRERgIGRhdGEgc291cmNlcy4KLSogYEhhZG9vcEVsZW1lbnRJdGVyYXRvcmAgKGZvciBIYWRvb3AtR3JlbWxpbiBPTFRQKSBub3cgd29ya3MgZm9yIGFueSBgSW5wdXRGb3JtYXRgLCBub3QganVzdCBgRmlsZUlucHV0Rm9ybWF0c2AuCi0qIEFkZGVkIGBUcmF2ZXJzZXIuQWRtaW4uZ2V0VGFncygpYCB3aGljaCBhcmUgdXNlZCB0byBtYXJrIGJyYW5jaGVzIGluIGEgdHJhdmVyc2FsICh1c2VmdWwgaW4gYG1hdGNoKClgIGFuZCByZWxhdGVkIGZ1dHVyZSBzdGVwcykuCi0qIEZpeGVkIHRoZSBgRnV0dXJlYCBtb2RlbCBmb3IgYEdpcmFwaEdyYXBoQ29tcHV0ZXJgIGFuZCBgU3BhcmtHcmFwaENvbXB1dGVyYCBzbyB0aGF0IGNsYXNzIGxvYWRlcnMgYXJlIHByZXNlcnZlZC4KLSogQWRkZWQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IHZlcnRleCBJRCB0eXBlcyBpbiBgQnVsa0xvYWRlclZlcnRleFByb2dyYW1gLgotKiBEZXByZWNhdGVkIGBjcmVkZW50aWFsc0RiTG9jYXRpb25gIGZyb20gYFNpbXBsZUF1dGhlbnRpY2F0b3JgIGluIEdyZW1saW4gU2VydmVyLgotKiBgVGlua2VyR3JhcGhgIGhhcyAibmF0aXZlIiBzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OLCB3aGljaCBlbmFibGVzIGl0IHRvIGJlIGEgcmV0dXJuIHZhbHVlIGZyb20gR3JlbWxpbiBTZXJ2ZXIuCi0qIEltcHJvdmVkIHRoZSBhYmlsaXR5IHRvIGVtYmVkIEdyZW1saW4gU2VydmVyIGJ5IHByb3ZpZGluZyBhIHdheSB0byBnZXQgdGhlIGBTZXJ2ZXJHcmVtbGluRXhlY3V0b3JgIGFuZCBpbXByb3ZlIHJldXNhYmlsaXR5IG9mIGBBYnN0cmFjdEV2YWxPcFByb2Nlc3NvcmAgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KLSogQWRkZWQgYEF1dGhlbnRpY2F0b3IubmV3U2FzbE5lZ290aWF0b3IoSW5ldEFkZHJlc3MpYCBhbmQgZGVwcmVjYXRlZCB0aGUgemVyby1hcmcgdmVyc2lvbiBvZiB0aGF0IG1ldGhvZC4KLSogYFByb2ZpbGVTdGVwYCBpcyBub3cgYXZhaWxhYmxlIG9mZiBvZiBgVHJhdmVyc2FsYCB2aWEgYHByb2ZpbGUoKWAuIFRvIGJlIGNvbnNpc3RlbnQgd2l0aCBgVHJhdmVyc2FsLmV4cGxhaW4oKWAuCi0qIElmIG5vIGNvbXBhcmF0b3IgaXMgcHJvdmlkZWQgdG8gYG9yZGVyKClgLCBgT3JkZXIuaW5jcmAgaXMgYXNzdW1lZCAocHJldmlvdXNseSwgYW4gZXhjZXB0aW9uIG9jY3VycmVkKS4KLSogRml4ZWQgdmFyaW91cyBHcmVtbGluLUdyb292eSB0ZXN0cyB0aGF0IGFzc3VtZWQgYHRvU3RyaW5nKClgLWFibGUgaWRzLgotKiBTcGxpdCBUaW5rZXJQb3AgZG9jdW1lbnRhdGlvbiBpbnRvIGRpZmZlcmVudCBkaXJlY3Rvcmllcy4KLSogQWRkZWQgYGV4cGxhaW4oKWAtc3RlcCB3aGljaCB5aWVsZHMgYSBgVHJhdmVyc2FsRXhwbGFuYXRpb25gIHdpdGggYSBwcmV0dHkgYHRvU3RyaW5nKClgIGRldGFpbGluZyB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4KLSogRml4ZWQgYSB0cmF2ZXJzYWwgc3RyYXRlZ3kgb3JkZXJpbmcgYnVnIGluIGBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneWAgYW5kIGBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneWAuCi0qIE1hZGUgYSBudW1iZXIgb2YgY2hhbmdlcyB0byBpbXByb3ZlIHRyYXZlcnNhbCBzdGFydHVwIGFuZCBleGVjdXRpb24gcGVyZm9ybWFuY2UuCi0qIEFkZGVkIHN1cHBvcnQgZm9yICdncmVtbGluLnRpbmtlcmdyYXBoLmdyYXBoTG9jYXRpb24nIHRvIGFjY2VwdCBhIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIHRoYXQgaW1wbGVtZW50cyBgSW8uQnVpbGRlcmAgaW50ZXJmYWNlLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtNzYzIElzU3RlcCBicm9rZW4gd2hlbiBwcm9maWxpbmcgaXMgZW5hYmxlZC4KLSogVElOS0VSUE9QLTk3MiBDbHVzdGVyOjpjbG9zZSBkb2VzIG5vdCBzaHV0IGRvd24gaXRzIGV4ZWN1dG9yCi0qIFRJTktFUlBPUC05NzMgQkxWUCBzaG91bGRuJ3QgY2xlYXIgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzCi0qIFRJTktFUlBPUC05NzYgRmFpbCBlYXJsaWVyIGlmIGludmFsaWQgdmVyc2lvbiBpcyBzdXBwbGllZCBpbiB2YWxpZGF0ZS1kaXN0cmlidXRpb24uc2gKLSogVElOS0VSUE9QLTk3NyBEZWFkIGxpbmsgdG8gdHJhdmVyc2FsIGphdmFkb2NzCi0qIFRJTktFUlBPUC05NzkgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSBub3QgcGlja2luZyB1cCBPcmRlciBsb2NhbCB0cmF2ZXJzYWwKLSogVElOS0VSUE9QLTk4NSBzaG91bGRQZXJzaXN0RGF0YU9uQ2xvc2UgbWFrZXMgaW5jb3JyZWN0IGZlYXR1cmUgY2hlY2sKLSogVElOS0VSUE9QLTk5MCBNaXhlZCB0eXBlcyBpbiBWZXJ0ZXhQcm9wZXJ0eVRlc3QKLSogVElOS0VSUE9QLTk5MyBjeWNsaWNQYXRoIGlzIG5vdChzaW1wbGVQYXRoKQotKiBUSU5LRVJQT1AtOTk3IEZlYXR1cmVSZXF1aXJlbWVudFNldC5TSU1QTEUgc2hvdWxkIG5vdCByZXF1aXJlIG11bHRpLXByb3BlcnR5ICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtMTAwMCBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lT3ZlckdyYXBoVGVzdCBmYWlsdXJlcwotKiBUSU5LRVJQT1AtMTAwMSBTdWdhckxvYWRlclBlcmZvcm1hbmNlVGVzdCBjb250YWlucyBoYXJkY29kZWQgdmVydGV4IGlkcwotKiBUSU5LRVJQT1AtMTAwMiBTaG91bGQgcm9sbGJhY2sgdHJhbnNhY3Rpb24gYWZ0ZXIgY2F0Y2hpbmcgb24gY2xvc2UKLSogVElOS0VSUE9QLTEwMDYgUmFuZG9tIGVycm9yIGR1cmluZyBidWlsZHM6IHNob3VsZFJlbG9hZENsYXNzTG9hZGVyV2hpbGVEb2luZ0V2YWxJblNlcGFyYXRlVGhyZWFkKCkKLSogVElOS0VSUE9QLTEwMTEgSGFkb29wR3JhcGggY2FuJ3QgcmUtYXR0YWNoIHdoZW4gdGhlIElucHV0Rm9ybWF0IGlzIG5vdCBhIEZpbGVJbnB1dEZvcm1hdAotKiBUSU5LRVJQT1AtMTAxMiBCdWxrTG9hZGVyVmVydGV4UHJvZ3JhbSBzaG91bGRuJ3QgYXNzdW1lIHZlcnRleCBJRHMgb2YgdHlwZSBMb25nCi0qIFRJTktFUlBPUC0xMDI1IFNvbHZlIFNwYXJrQ29udGV4dCBQZXJzaXN0ZW5jZSBJc3N1ZXMgd2l0aCBCdWxrTG9hZGVyVmVydGV4UHJvZ3JhbQotKiBUSU5LRVJQT1AtMTAyNyBNZXJnZSB2aWV3IHByaW9yIHRvIHdyaXRpbmcgZ3JhcGhSREQgdG8gb3V0cHV0IGZvcm1hdC9yZGQKLSogVElOS0VSUE9QLTEwMzYgU3VwcG9ydCBzZWxmLWxvb3BpbmcgZWRnZXMgaW4gSU8KLSogVElOS0VSUE9QLTEwNTIgQEdyYXBoLk9wdE91dCBjYXVzZXMgRXhjZXB0aW9uIGR1cmluZyBTdWl0ZSBzZXR1cAotKiBUSU5LRVJQT1AtMTA2MCBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5IHRvbyByZXN0cmljdGl2ZQotKiBUSU5LRVJQT1AtMTA3NSBQcm9maWxlIGR1cmF0aW9uIG9mIGNhcCBzdGVwIHNlZW1zIGJyb2tlbi4KLSogVElOS0VSUE9QLTEwODMgVHJhdmVyc2FsIG5lZWRzIGEgaGFzaENvZGUoKSBhbmQgZXF1YWxzKCkgZGVmaW5pdGlvbi4KLSogVElOS0VSUE9QLTEwODkgT3JkZXIuc2h1ZmZsZSBpbXBsZW1lbnRhdGlvbiBpcyB0b28gZnJhZ2lsZQotKiBUSU5LRVJQT1AtMTExOSBMUF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyIGRvZXNuJ3QgaGF2ZSBhIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpLgotCi09PT09IEltcHJvdmVtZW50cwotCi0qIFRJTktFUlBPUC0zMjAgQnVsa0R1bXBlclZlcnRleFByb2dyYW0KLSogVElOS0VSUE9QLTM3OSBNZXNzYWdlU2NvcGUuTG9jYWwuc2V0U3RhdGljTWVzc2FnZShNIG1zZykKLSogVElOS0VSUE9QLTgyNCBEbyB3ZSBuZWVkIHJ1bnRpbWUgQmlnRGVjaW1hbCBpbiBtb3JlIHBsYWNlcz8KLSogVElOS0VSUE9QLTg1OSBQcm92aWRlIGEgbW9yZSBnZW5lcmFsIHdheSB0byBzZXQgbG9nIGxldmVscyBpbiBwbHVnaW5zCi0qIFRJTktFUlBPUC04NjAgQmluZGluZ3MgYXBwbGllZCB0byB0aGUgUGx1Z2luQWNjZXB0b3Igc2hvdWxkIGFwcGVhciB0byBHcmVtbGluIFNlcnZlcgotKiBUSU5LRVJQT1AtODg2IEFsbG93IGFueSBHcmFwaFJlYWRlci9Xcml0ZXIgdG8gYmUgcGVyc2lzdGVuY2UgZW5naW5lIGZvciBUaW5rZXJHcmFwaAotKiBUSU5LRVJQT1AtODkxIFJlLWV4YW1pbmUgU2FuZGJveGluZyBBYnN0cmFjdGlvbnMKLSogVElOS0VSUE9QLTkxMiBJbXByb3ZlIHRoZSBhYmlsaXR5IHRvIGVtYmVkIEdyZW1saW4gU2VydmVyIHdpdGggQ2hhbm5lbGl6ZXIgaW5qZWN0aW9uCi0qIFRJTktFUlBPUC05MjggVXNlIGRpcmVjdG9yaWVzIHRvIHNlcGFyYXRlIGRpZmZlcmVudCBib29rcwotKiBUSU5LRVJQT1AtOTMwIFRpZSBBbGlhcyB0byBUcmFuc2FjdGlvbiBNYW5hZ2VyIGluIEdyZW1saW4gU2VydmVyCi0qIFRJTktFUlBPUC05MzggQWRkIGEgImNsZWFyIFNOQVBTSE9UIGphcnMiIHNlY3Rpb24gdG8gdGhlIHByb2Nlc3MtZG9jcy5zaC4KLSogVElOS0VSUE9QLTk0MSBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIHdyb25nIG9yZGVyKCkuYnkoKSBhcmd1bWVudHMKLSogVElOS0VSUE9QLTk0MyBXYXJuIGlmIEdyZW1saW4gU2VydmVyIGlzIHJ1bm5pbmcgcHJpb3IgdG8gZ2VuZXJhdGluZyBkb2NzCi0qIFRJTktFUlBPUC05NDUgRXhjZXB0aW9ucyBzaG91bGQgYWxsb3cgbWUgdG8gaW5jbHVkZSByb290IGNhdXNlIGlmL3doZW4gYXZhaWxhYmxlCi0qIFRJTktFUlBPUC05NTIgSW5jbHVkZSBDYXJkaW5hbGl0eS5saXN0IGV4YW1wbGUgaW4gVmVydGV4UHJvcGVydHkgc2VjdGlvbiBvZiBtYWluIGRvY3MuCi0qIFRJTktFUlBPUC05NTQgQ29uc2lzdGVudCB0ZXN0IGRpcmVjdG9yeSB1c2FnZQotKiBUSU5LRVJQT1AtOTU3IEltcHJvdmUgc3BlZWQgb2YgYWRkVigpCi0qIFRJTktFUlBPUC05NjQgVGVzdCBYWFhHcmFwaENvbXB1dGVyIG9uIGEgSGFkb29wMiBjbHVzdGVyIChub24tcHNldWRvY2x1c3RlcikuCi0qIFRJTktFUlBPUC05NzAgUHJvZmlsZVN0ZXAgc2hvdWxkIGJlIG9mZiBUcmF2ZXJzYWwsIG5vdCBHcmFwaFRyYXZlcnNhbAotKiBUSU5LRVJQT1AtOTc4IE5hdGl2ZSBUaW5rZXJHcmFwaCBTZXJpYWxpemVycyBmb3IgR3JhcGhTT04KLSogVElOS0VSUE9QLTk4MSBEZXByZWNhdGUgc3VwcG9ydCBmb3IgY3JlZGVudGlhbHNEYkxvY2F0aW9uIGluIEdyZW1saW4gU2VydmVyIENvbmZpZwotKiBUSU5LRVJQT1AtOTgyIHZhbHVlc0RlY3IsIHZhbHVlc0luY3IsIGtleXNEZWNyLCBhbmQgdmFsdWVzRGVjciBpcyBsYW1lLgotKiBUSU5LRVJQT1AtOTgzIFByb3ZpZGUgYSB3YXkgdG8gdHJhY2sgb3BlbiBHcmFwaCBpbnN0YW5jZXMgaW4gdGVzdHMKLSogVElOS0VSUE9QLTk4NCBVc2UgR3JhcGhQcm92aWRlciBmb3IgaWQgY29udmVyc2lvbiBpbiBHcm9vdnkgRW52aXJvbm1lbnQgdGVzdCBzdWl0ZQotKiBUSU5LRVJQT1AtOTg3IFVzZSB0aW5rZXJwb3AuYXBhY2hlLm9yZyBVUkwgaW4gYWxsIGRvY3VtZW50YXRpb24gYW5kIGhvbWVwYWdlCi0qIFRJTktFUlBPUC05ODggU3BhcmtHcmFwaENvbXB1dGVyLnN1Ym1pdCBzaG91bGRuJ3QgdXNlIEZvcmtKb2luUG9vbC5jb21tb25Qb29sCi0qIFRJTktFUlBPUC05OTIgQmV0dGVyIHN1cHBvcnQgZm9yIHNjaGVtYSBkcml2ZW4gR3JhcGhzIGluIElPIHJlbGF0ZWQgdGVzdHMKLSogVElOS0VSUE9QLTk5NCBEcml2ZXIgdXNpbmcgZGVwcmVjYXRlZCBSZWJpbmRpbmdzIFN0aWxsCi0qIFRJTktFUlBPUC05OTUgQWRkIEF1dGhlbnRpY2F0b3IubmV3U2FzbE5lZ290aWF0b3IoSW5ldEFkZHJlc3MpCi0qIFRJTktFUlBPUC05OTYgUGxlYXNlIGRlbGV0ZSBvbGQgcmVsZWFzZXMgZnJvbSBtaXJyb3Jpbmcgc3lzdGVtCi0qIFRJTktFUlBPUC05OTggRGVwcmVjYXRlIFZlcnRleFByb3BlcnR5RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkKLSogVElOS0VSUE9QLTEwMDkgQWRkIGEgQ0FVVElPTiB0byBkb2N1bWVudGF0aW9uIGFib3V0IEhhZG9vcEdyYXBoIGFuZCBnZXR0aW5nIGJhY2sgZWxlbWVudHMKLSogVElOS0VSUE9QLTEwMTMgVHJhdmVyc2VyIHRhZ3MgYXMgYSBzYWZlciB3YXkgb2YgdXNpbmcgcGF0aCBsYWJlbHMKLSogVElOS0VSUE9QLTEwMTggQWxsb3cgc2V0dGluZyBmb3IgbWF4Q29udGVudExlbmd0aCB0byBiZSBzZXQgZnJvbSB5YW1sIGluIGRyaXZlcgotKiBUSU5LRVJQT1AtMTAxOSBDb252ZXJ0IHByaW50bG4gaW4gdGVzdCB0byBTTEY0agotKiBUSU5LRVJQT1AtMTAyMiBBdXRvbWF0aWNhbGx5IHdhcm0gdXAgb3BzIGhhbmRsZXJzCi0qIFRJTktFUlBPUC0xMDIzIEFkZCBhIHNwYXJrIHZhcmlhYmxlIGluIFNwYXJrR3JlbWxpblBsdWdpbiBsaWtlIHdlIGRvIGhkZnMgZm9yIEhhZG9vcEdyZW1saW5QbHVnaW4KLSogVElOS0VSUE9QLTEwMjYgQlZMUCBzaG91bGQgc3RvcmUgdmVydGV4IElEcyBhcyBTdHJpbmcKLSogVElOS0VSUE9QLTEwMzMgU3RvcmUgc2lkZUVmZmVjdHMgYXMgYSBwZXJzaXN0ZWQgUkRECi0qIFRJTktFUlBPUC0xMDM1IEJldHRlciBDb25zaXN0ZW5jeSBpbiBHcmVtbGluIFNlcnZlciBUcmFuc2FjdGlvbiBNYW5hZ2VtZW50Ci0qIFRJTktFUlBPUC0xMDQ1IENsaWVudC1TaWRlIEhhbmdzIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgYSBIYXNoTWFwIHdpdGggS2V5cyBvZiB0eXBlIEludGVnZXIKLSogVElOS0VSUE9QLTEwNDcgVGlua2VyR3JhcGggR3JhcGhTT04gc3RvcmFnZSBmb3JtYXQgYnJva2VuCi0qIFRJTktFUlBPUC0xMDUxIEFkZCBub3RlIGluIGJlc3QgcHJhY3RpY2UgZG9jcyBhYm91dCBncmVtbGluIHNlcnZlciBoZWFwIHNldHRpbmcKLSogVElOS0VSUE9QLTEwNTUgR3JlbWxpbiBDb25zb2xlIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBjYW4gYmUgbWlzbGVhZGluZwotKiBUSU5LRVJQT1AtMTA2MiBNYWtlIExpZmVDeWNsZSBiZWZvcmVFdmFsIGV4ZWN1dGUgaW4gc2FtZSB0aHJlYWQgYXMgZXZhbCBvcGVyYXRpb24KLSogVElOS0VSUE9QLTEwNjQgQWxsb3cgYSBDbGFzc1Jlc29sdmVyIHRvIGJlIGFkZGVkIHRvIEdyeW9NYXBwZXIgY29uc3RydWN0aW9uCi0qIFRJTktFUlBPUC0xMDY1IEZpeCBzb21lIHR5cG9zIGFuZCBjbGFyaWZ5IHNvbWUgd29yZGluZyBpbiB0aGUgVGlua2VyUG9wIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTEwNjYgQWRkIGlvUmVnaXN0cmllcyBjb25maWd1cmF0aW9uIHRvIEdyYXBoU09OIE1lc3NhZ2VTZXJpYWxpemVyCi0qIFRJTktFUlBPUC0xMDY3IFVwZGF0ZSBHcm9vdnkgdG8gMi40LjUKLSogVElOS0VSUE9QLTEwNzIgQWxsb3cgdGhlIHVzZXIgdG8gc2V0IHBlcnNpc3RlbmNlIG9wdGlvbnMgdXNpbmcgU3RvcmFnZUxldmVsLnZhbHVlT2YoKQotKiBUSU5LRVJQT1AtMTA3MyBIYWRvb3BHcmFwaCB0b1N0cmluZygpIGlzIHdlaXJkIGZvciBTcGFyayBQZXJzaXRlZFJERCBkYXRhLgotKiBUSU5LRVJQT1AtMTA4NiBJbmNsdWRlIGdyeW8gc2VyaWFsaXplcnMgZm9yIGphdmEudGltZSByZWxhdGVkIGNsYXNzZXMKLSogVElOS0VSUE9QLTEwODcgQWRkIGhhcygpL29yZGVyKCkgdG8gRmlsdGVyUmFua1N0cmF0ZWd5Ci0qIFRJTktFUlBPUC0xMDkzIEFkZCBTcGFyayBpbml0LnNoIHNjcmlwdCBhbmQgdXBkYXRlIGRldiBkb2N1bWVudGF0aW9uLgotKiBUSU5LRVJQT1AtMTEwMCBMb29rIGRlZXBseSBpbnRvIGFkZGluZyBjb21iaW5lKCktc3VwcG9ydCBpbiBTcGFyayBNYXBSZWR1Y2UuCi0qIFRJTktFUlBPUC0xMTE3IElucHV0Rm9ybWF0UkRELnJlYWRHcmFwaFJERCByZXF1aXJlcyBhIHZhbGlkIGdyZW1saW4uaGFkb29wLmlucHV0TG9jYXRpb24sIGJyZWFraW5nIElucHV0Rm9ybWF0cyAoQ2Fzc2FuZHJhLCBIQmFzZSkgdGhhdCBkb24ndCBuZWVkIG9uZQorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS0xLWluY3ViYXRpbmcsIDMuMS4xIGNoYW5nZWxvZz4+LgogCiBbW3JlbGVhc2UtMy0xLTAtaW5jdWJhdGluZ11dCiA9PT0gVGlua2VyUG9wIDMuMS4wIChSZWxlYXNlIERhdGU6IE5vdmVtYmVyIDE2LCAyMDE1KQogCi1UaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDxyZWxlYXNlLTMtMC0xLWluY3ViYXRpbmcsIDMuMC4xLWluY3ViYXRpbmc+PiBhbmQgPDxyZWxlYXNlLTMtMC0yLWluY3ViYXRpbmcsIDMuMC4yLWluY3ViYXRpbmc+Pi4KLQotKiBGaXhlZCBidWcgaW4gR3J5byBhbmQgR3JhcGhTT04gKHdpdGggZW1iZWRkZWQgdHlwZXMpIHNlcmlhbGl6YXRpb24gZm9yIHNlcmlhbGl6YXRpb24gb2YgcmVzdWx0cyByZXR1cm5lZCBmcm9tIGBNYXAuZW50cnlTZXQoKWAuCi0qIGBUcmFuc2FjdGlvbmAgc2V0dGluZ3MgZm9yIGBvblJlYWRXcml0ZWAgYW5kIGBvbkNsb3NlYCBhcmUgbm93IGBUaHJlYWRMb2NhbGAgaW4gbmF0dXJlIG9mIHN0YW5kYXJkIHRyYW5zYWN0aW9ucy4KLSogT3B0aW1pemVkIGBCdWxrTG9hZGVyVmVydGV4UHJvZ3JhbWAuIEl0IG5vdyB1c2VzIGBFdmVudFN0cmF0ZWd5YCB0byBtb25pdG9yIHdoYXQgdGhlIHVuZGVybHlpbmcgYEJ1bGtMb2FkZXJgIGltcGxlbWVudGF0aW9uIGRvZXMgKGUuZy4gd2hldGhlciBpdCBjcmVhdGVzIGEgbmV3IHZlcnRleCBvciByZXR1cm5zIGFuIGV4aXN0aW5nKS4KLSogSW50ZWdyYXRlZCBgTnVtYmVySGVscGVyYCBpbiBgU3VtU3RlcGAsIGBNaW5TdGVwYCwgYE1heFN0ZXBgIGFuZCBgTWVhblN0ZXBgIChsb2NhbCBhbmQgZ2xvYmFsIHN0ZXAgdmFyaWFudHMpLgotKiBHcmVtbGluIENvbnNvbGUgcmVtb3RpbmcgdG8gR3JlbWxpbiBTZXJ2ZXIgbm93IHN1cHBvcnRzIGEgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGFzc2lnbmluZyBhbGlhc2VzLgotKiBgQ291bnRNYXRjaEFsZ29yaXRobWAsIGluIE9MQVAsIG5vdyBiaWFzZXMgdHJhdmVyc2FsIHNlbGVjdGlvbiB0b3dhcmRzIHRob3NlIHRyYXZlcnNhbHMgdGhhdCBzdGFydCBhdCB0aGUgY3VycmVudCB0cmF2ZXJzZXIgbG9jYXRpb24gdG8gcmVkdWNlIG1lc3NhZ2UgcGFzc2luZy4KLSogRml4ZWQgYSBmaWxlIHN0cmVhbSBidWcgaW4gSGFkb29wIE9MVFAgdGhhdCBzaG93ZWQgdXAgaWYgdGhlIHN0cmVhbWVkIGZpbGUgd2FzIG1vcmUgdGhhbiAyRyBvZiBkYXRhLgotKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgdGhyZWFkIGxvY2FsIHByb3BlcnRpZXMgaW4gYFNwYXJrR3JhcGhDb21wdXRlcmAgd2hlbiB1c2luZyBhIHBlcnNpc3RlbnQgY29udGV4dC4KLSogQnVtcGVkIHRvIE5lbzRqIDIuMy4wLgotKiBEZXByZWNhdGVkICJyZWJpbmRpbmdzIiBhcyBhbiBhcmd1bWVudCB0byBHcmVtbGluIFNlcnZlciBhbmQgcmVwbGFjZWQgaXQgd2l0aCAiYWxpYXNlcyIuCi0qIEFkZGVkIGBQZXJzaXN0ZWRJbnB1dFJERGAgYW5kIGBQZXJzaXN0ZWRPdXRwdXRSRERgIHdoaWNoIGVuYWJsZXMgYFNwYXJrR3JhcGhDb21wdXRlcmAgdG8gc3RvcmUgdGhlIGdyYXBoIFJERCBpbiB0aGUgY29udGV4dCBiZXR3ZWVuIGpvYnMgKG5vIEhERlMgc2VyaWFsaXphdGlvbiByZXF1aXJlZCkuCi0qIFJlbmFtZWQgdGhlIGBwdWJsaWMgc3RhdGljIFN0cmluZ2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyBvZiBUaW5rZXJHcmFwaCAoZGVwcmVjYXRlZCBvbGQgdmFyaWFibGVzKS4KLSogQWRkZWQgYEdyYXBoQ29tcHV0ZXIuY29uZmlndXJlKGtleSx2YWx1ZSlgIHRvIGFsbG93IGVuZ2luZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4KLSogYEdyYXBoU3RlcGAgaXMgbm8gbG9uZ2VyIGluIHRoZSBgc2lkZUVmZmVjdGAtcGFja2FnZSBhbmQgaXMgbm93IGluIGBtYXBgLXBhY2thZ2UgKGJyZWFraW5nIGNoYW5nZSkuCi0qIEFkZGVkIHN1cHBvcnQgZm9yIG1pZC10cmF2ZXJzYWwgYFYoKWAtc3RlcHMgKGBHcmFwaFN0ZXBgIHNlbWFudGljcyB1cGRhdGVkKS4KLSogRml4ZWQgYE51bWJlcmAgaGFuZGxpbmcgaW4gYE9wZXJhdG9yYCBlbnVtcy4gUHJpb3IgdGhpcyBjaGFuZ2UgYSBsb3Qgb2Ygb3BlcmF0aW9ucyBvbiBtaXhlZCBgTnVtYmVyYCB0eXBlcyByZXR1cm5lZCBhIHdyb25nIHJlc3VsdCAod3JvbmcgZGF0YSB0eXBlKS4KLSogRml4ZWQgYSBidWcgaW4gR3JlbWxpbiBTZXJ2ZXIvRHJpdmVyIHNlcmlhbGl6ZXIgd2hlcmUgZW1wdHkgYnVmZmVycyB3ZXJlIGdldHRpbmcgcmV0dXJuZWQgaW4gY2VydGFpbiBjYXNlcy4KLSogUmVuYW1lZCBgQ29uanVuY3Rpb25YYCB0byBgQ29ubmVjdGl2ZVhgIGJlY2F1c2UgImNvbmp1bmN0aW9uIiBpcyBhc3N1bWVkICJhbmQiIChkaXNqdW5jdGlvbiAib3IiKSwgd2hlcmUgImNvbm5lY3RpdmUiIGlzIHRoZSBwYXJlbnQgY29uY2VwdC4KLSogUmVtb3ZlZCBgUGF0aElkZW50aXR5U3RlcGAgYXMgaXQgd2FzIGEgaGFjayB0aGF0IGlzIG5vdyBzb2x2ZWQgYnkgYFRyYXZlcnNhbC5BZG1pbi5hZGRUcmF2ZXJzZXJSZXF1aXJlbWVudCgpYC4KLSogQWRkZWQgYFRyYXZlcnNhbC5BZG1pbi5hZGRUcmF2ZXJzZXJSZXF1aXJlbWVudCgpYCB0byBhbGxvdyBhIHRyYXZlcnNhbCBzdHJhdGVneSBvciBzb3VyY2UgdG8gYWRkIHJlcXVpcmVtZW50cyAobm90IG9ubHkgc3RlcCBkZXRlcm1pbmVkIGFueW1vcmUpLgotKiBBZGRlZCBgVHJhdmVyc2VyUmVxdWlyZW1lbnQuT05FX0JVTEtgIHRvIHN0YXRlIHRoZSB0cmF2ZXJzZXIgZG9lcyBub3QgaGFuZGxlIGJ1bGsuCi0qIEFkZGVkIGBHcmFwaFRyYXZlcnNhbFNvdXJjZS53aXRoQnVsayhib29sZWFuKWAgdG8gZW5hYmxlZCB1c2VycyB0byBjb21wdXRlIG9ubHkgdXNpbmcgYGJ1bGs9MWAuCi0qIEdyZW1saW4gU2VydmVyIHN1cHBvcnRzIE5ldHR5IG5hdGl2ZSB0cmFuc3BvcnQgb24gbGludXguCi0qIFJlbW92ZWQgdGhlIG5lZWQgZm9yIGBHRnVuY3Rpb25gIChldGMuKSBjbG9zdXJlIHdyYXBwZXJzIGluIEdyZW1saW4tR3Jvb3Z5IGFzIGBhcyBGdW5jdGlvbmAgY2FuIGJlIHVzZWQgdG8gY29udmVydCBjbG9zdXJlcyBhY2NvcmRpbmdseS4KLSogQWRkZWQgYFNlbGVjdENvbHVtblN0ZXBgIChgc2VsZWN0KGtleXMpYCBhbmQgYHNlbGVjdCh2YWx1ZXMpYCkuIERlcHJlY2F0ZWQgYG1hcEtleXMoKWAgYW5kIGBtYXBWYWx1ZXMoKWAuCi0qIFJlbmFtZWQgYGdyZW1saW4uaGFkb29wLmdyYXBoSW5wdXRSRERgIGFuZCBgZ3JlbWxpbi5oYWRvb3AuZ3JhcGhPdXRwdXRSRERgIHRvIGBncmVtbGluLnNwYXJrLmdyYXBoSW5wdXRSRERgIGFuZCBgZ3JlbWxpbi5zcGFyay5ncmFwaE91dHB1dFJERGAsIHJlc3BlY3RpdmVseS4KLSogRml4ZWQgYSBidWcgaW4gYEZvbGRTdGVwYCBhcm91bmQgYnVsa2luZy4gVGhpcyBjb3VsZCBiZSBhIGJyZWFraW5nIGNoYW5nZSwgYnV0IGl0IGlzIHRoZSBjb3JyZWN0IHNlbWFudGljcy4KLSogUHJldmlvdXMgYGdyb3VwKClgLWJlaGF2aW9yIHN0ZXBzIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGUgZGVwcmVjYXRlZCBgZ3JvdXBWM2QwKClgLXN0ZXBzLgotKiBgR3JvdXBTdGVwYCBhbmQgYEdyb3VwU2lkZUVmZmVjdFN0ZXBgIG5vdyBkbyBsYXp5IHJlZHVjdGlvbnMgdG8gcmVkdWNlIG1lbW9yeSBmb290cHJpbnQuIEJyZWFraW5nIGNoYW5nZSBmb3IgYGdyb3VwKClgIHNlbWFudGljcy4KLSogQWRkZWQgYEdyb3VwU3RlcEhlbHBlcmAgd2l0aCB2YXJpb3VzIHN0YXRpYyBtZXRob2RzIGFuZCBjbGFzc2VzIHRoYXQgYXJlIHVzZWQgYnkgYm90aCBgR3JvdXBTdGVwYCBhbmQgYEdyb3VwU2lkZUVmZmVjdFN0ZXBgLgotKiBBZGRlZCBgQmFycmllclN0ZXBgIGludGVyZmFjZSB3aXRoIGBwcm9jZXNzQWxsU3RhcnRzKClgIG1ldGhvZCB3aGljaCBwcm9jZXNzIGFsbCBzdGFydHMgdXAgdG8geWllbGRpbmcgdGhlIGJhcnJpZXIgcmVzdWx0LgotKiBGaXhlZCBhIHNldmVyZSB0aHJlYWRpbmcgaXNzdWUgaW4gYFRpbmtlckdyYXBoQ29tcHV0ZXJgLgotKiBUaGUgbG9jYXRpb24gb2YgdGhlIGphcnMgaW4gSERGUyBpcyBub3cgYGhhZG9vcC1ncmVtbGluLXgueS56LWxpYnNgIHRvIGVuc3VyZSBtdWx0aXBsZSBUaW5rZXJQb3AgdmVyc2lvbnMgZG9uJ3QgY2xhc2guCi0qIGBHaXJhcGhHcmFwaENvbXB1dGVyYCB3aWxsIG9ubHkgdXBsb2FkIHRoZSBqYXJzIHRvIEhERlMgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0ICh0byBoZWxwIHNwZWVkIHVwIHN0YXJ0dXAgdGltZSkuCi0qIGBHaXJhcGhHcmFwaENvbXB1dGVyLndvcmtlcnMoKWAgaXMgc21hcnQgYWJvdXQgdXNpbmcgdGhyZWFkcyBhbmQgbWFjaGluZXMgdG8gbG9hZCBiYWxhbmNlIFRpbmtlclBvcCB3b3JrZXJzIGFjcm9zcyBjbHVzdGVyLgotKiBgR3JhcGhDb21wdXRlci53b3JrZXJzKGludClgIGFsbG93cyB0aGUgdXNlciB0byBwcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgbnVtYmVyIG9mIHdvcmtlcnMgdG8gc3Bhd24uCi0qIEFkZGVkIGBHcnlvU2VyaWFsaXplcmAgYXMgdGhlIG5ldyByZWNvbW1lbmRlZCBTcGFyayBgU2VyaWFsaXplcmAuIEhhbmRsZXMgYEdyYXBoYCBhbmQgYEdyeW9NYXBwZXJgIHJlZ2lzdHJpZXMuCi0qIGBHcnlvUG9vbGAgbm93IG1ha2VzIHVzZSBvZiBgR3J5b1Bvb2wuQnVpbGRlcmAgZm9yIGl0cyBjb25zdHJ1Y3Rpb24uCi0qIEJ1bXBlZCB0byBBcGFjaGUgSGFkb29wIDIuNy4xLgotKiBCdW1wZWQgdG8gQXBhY2hlIEdpcmFwaCAxLjEuMC4KLSogQnVtcGVkIHRvIEFwYWNoZSBTcGFyayAxLjUuMS4KLSogU3BsaXQgSGFkb29wLUdyZW1saW4gYXBhcnQgc3VjaCB0aGVyZSBpcyBub3cgYGhhZG9vcC1ncmVtbGluYCwgYHNwYXJrLWdyZW1saW5gLCBhbmQgYGdpcmFwaC1ncmVtbGluYCAoYW5kIHJlc3BlY3RpdmUgYEdyZW1saW5QbHVnaW5zYCkuCi0qIEFkZGVkIGBMYW1iZGFDb2xsZWN0aW5nQmFycmllclN0ZXBgIHdoaWNoIGdlbmVyYWxpemVzIGBOb09wQmFycmllclN0ZXBgIGFuZCBhbGxvd3MgZm9yIGBiYXJyaWVyKG5vcm1TYWNrKWAtdHlwZSBvcGVyYXRpb25zLgotKiBGaXhlZCBidWdzIGluIHRoZSBHcmVtbGluIFNlcnZlcidzIE5JTyBwcm90b2NvbCBib3RoIG9uIHRoZSBzZXJ2ZXIgYW5kIGRyaXZlciBzaWRlLgotKiBBZGRlZCBgUGF0aC5wb3BFcXVhbHMoUG9wLE9iamVjdClgIHRvIGNoZWNrIGZvciBwYXRoIGVxdWFsaXR5IGJhc2VkIG9uIGBQb3BgICh1c2VmdWwgZm9yIGBUcmF2ZXJzZXJSZXF1aXJlbWVudC5MQUJFTEVEX1BBVEhgKS4KLSogQWRkZWQgYE9wZXJhdG9yLmFzc2lnbmAgdG8gYWxsb3cgc2V0dGluZyBhIGRpcmVjdCB2YWx1ZS4KLSogYE9wZXJhdG9yYCBpcyBub3cgYSBgQmluYXJ5T3BlcmF0b3I8T2JqZWN0PmAgd2l0aCBhcHByb3ByaWF0ZSB0eXBlY2FzdGluZyBmb3IgcmVzcGVjdGl2ZSBudW1iZXIgb3BlcmF0b3JzLgotKiBTaW1wbGlmaWVkIGBTYWNrVmFsdWVTdGVwYCBzbyBpdCBub3cgc3VwcG9ydHMgYm90aCBgc2FjayhmdW5jdGlvbilgIGFuZCBgc2FjayhmdW5jdGlvbikuYnkoKWAuIERlcHJlY2F0ZWQgYHNhY2soZnVuY3Rpb24sc3RyaW5nKWAgLgotKiBBZGRlZCBgUGFyYW1ldGVyc2Agb2JqZWN0IHRvIGFsbG93IGZvciB0aGUgcGFyYW1ldGVycyBvZiBhIHN0ZXAgdG8gYmUgcmV0cmlldmVkIGF0IHJ1bnRpbWUgdmlhIGEgdHJhdmVyc2FsLgotKiBSZWRlc2lnbmVkICh0aG91Z2ggYmFja3dhcmRzIGNvbXBhdGlibGUpIGBBZGRFZGdlU3RlcGAsIGBBZGRWZXJ0ZXhTdGVwYCwgYW5kIGBBZGRQcm9wZXJ0eVN0ZXBgIChhbmQgcmVzcGVjdGl2ZSBgR3JhcGhUcmF2ZXJzYWxgIEFQSSkuCi0qIEFkZGVkIGBHcmFwaFRyYXZlcnNhbFNvdXJjZS5pbmplY3QoKWAgc28gdXNlcnMgY2FuIHNwYXduIGEgdHJhdmVyc2VyIHdpdGggbm9uLWdyYXBoIG9iamVjdHMuCi0qIGBHcmFwaFN0ZXBgIGNhbiBub3cgdGFrZSBhIHNpbmdsZSBhcmd1bWVudCBgQ29sbGVjdGlvbmAgd2hpY2ggaXMgZWl0aGVyIGVsZW1lbnRzIG9yIGVsZW1lbnQgaWRzIChpLmUuIGBnLlYoWzEsMiwzXSlgIGlzIHN1cHBvcnRlZCBub3cpLgotKiBBZGRlZCBgTG9vcHNTdGVwYCB0byBtYWtlIHRoZSBsb29wIGNvdW50ZXIgYWNjZXNzaWJsZSB3aXRoaW4gYHJlcGVhdCgpYCwgYHVudGlsKClgIGFuZCBgZW1pdCgpYC4KLSogR2VwaGkgUGx1Z2luIG5vIGxvbmdlciByZXF1aXJlcyBtYW51YWwgaW5zZXJ0IG9mIGBzdG9yZWAgc3RlcHMgdG8gdmlzdWFsaXplIGEgdHJhdmVyc2FsLgotKiBBZGRlZCBhIGBUaW5rZXJJb1JlZ2lzdHJ5YCB0aGF0IHJlZ2lzdGVycyBhIGN1c3RvbSBzZXJpYWxpemVyIGZvciBHcnlvIHRoYXQgd2lsbCBzZXJpYWxpemUgYW4gZW50aXJlIGBUaW5rZXJHcmFwaGAgaW5zdGFuY2UuCi0qIEFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBHZXBoaSBQbHVnaW4gZm9yIHNldHRpbmcgdGhlIHNpemUgb2Ygbm9kZXMgdmlzdWFsaXplZC4KLSogUmVwbGFjZWQgYERlZHVwQmlqZWN0aW9uU3RyYXRlZ3lgIHdpdGggdGhlIG1vcmUgZWZmZWN0aXZlIGBGaWx0ZXJSYW5raW5nU3RyYXRlZ3lgLgotKiBgQ29tcHV0ZXJBd2FyZVN0ZXBzYCBtdXN0IG5vdCBvbmx5IGhhbmRsZSBzdGVwIGlkcywgYnV0IGFsc28gc3RlcCBsYWJlbHMuCi0qIFJlbmFtZWQgYEJfT19QX1NFX1NMX1RyYXZlcnNlcmAgdG8gYEJfTFBfT19QX1NFX1NMX1RyYXZlcnNlcmAgYXMgaXQgbm93IHN1cHBvcnRzIGBUcmF2ZXJzZXJSZXF1aXJlbWVudC5MQUJFTEVEX1BBVEhgLgotKiBBZGRlZCBgQl9MUF9PX1NfU0VfU0xfVHJhdmVyc2VyYCBpbiBzdXBwb3J0IG9mIGBUcmF2ZXJzZXJSZXF1aXJlbWVudC5MQUJFTEVEX1BBVEhgLgotKiBBZGRlZCBgVHJhdmVyc2VyUmVxdWlyZW1lbnQuTEFCRUxFRF9QQVRIYCB3aGljaCBvbmx5IGdlbmVyYXRlcyBwYXRoIGRhdGEgZm9yIHN0ZXBzIHRoYXQgYXJlIGxhYmVsZWQgKGdyZWF0bHkgaW5jcmVhc2VzIHRoZSBsaWtlbGlob29kIG9mIGJ1bGtpbmcpLgotKiBGaXhlZCBhIGJ1ZyBpbiBgUGF0aGAgdXNhZ2UgdGhhdCByZXF1aXJlZCBhbiBBUEkgdXBkYXRlOiBgUGF0aC5hZGRMYWJlbCgpYCBpcyBub3cgYFBhdGguZXh0ZW5kKFNldDxTdHJpbmc+KWAgYW5kIGBUcmF2ZXJzZXIuYWRkTGFiZWxzKFNldDxTdHJpbmc+KWAuCi0qIE1hZGUgYFBhdGhgIGl0ZXJhYmxlLCBzbyB0aGF0IGl0IGNhbiBiZSBgYHVuZm9sZCgpYGAnZWQgYW5kIHVzZWQgYnkgbG9jYWwgc3RlcHMgbGlrZSBgbWluKGxvY2FsKWAsIGBtYXgobG9jYWwpYCwgZXRjLgotKiBgV2hlcmVUcmF2ZXJzYWxTdGVwYCBhbmQgYFdoZXJlUHJlZGljYXRlU3RlcGAgYXJlIG5vdyB0aGUgb25seSAic3BlY2lhbCIgYFNjb3BpbmdgIHN0ZXBzIGFmdGVyIGBNYXRjaFN0YXJ0U3RlcGAgaW4gYG1hdGNoKClgLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtNzc0IG9yZGVyIC8gZGVkdXAgaXNzdWVzCi0qIFRJTktFUlBPUC03OTkgW1Byb3Bvc2FsXSB3aXRoKCktbW9kdWxhdG9yIGZvciBzdHJlYW0gbGV2ZWwgdmFyaWFibGUgYmluZGluZy4KLSogVElOS0VSUE9QLTgwMSBncm91cENvdW50KCkgZmFpbHMgZm9yIHZlcnRpY2VzIChlbGVtZW50cz8pICh1c2luZyBTcGFyaykKLSogVElOS0VSUE9QLTgxMSBBZGRQcm9wZXJ0eVN0ZXBUZXN0IGZhaWxzICJhbGwgb2YgYSBzdWRkZW4iCi0qIFRJTktFUlBPUC04MjMgYWRkVigpIGJyb2tlbiBmb3IgbXVsdGktdmFsdWUgcHJvcGVydGllcwotKiBUSU5LRVJQT1AtODQzIE1pc3NwZWNpZmllZCBIQURPT1BfR1JFTUxJTl9MSUJTIGdlbmVyYXRlcyBOdWxsUG9pbnRlckV4Y2VwdGlvbgotKiBUSU5LRVJQT1AtODU3IEFkZCBHcmFwaENvbXB1dGVyLmNvbmZpZyhrZXksdmFsdWUpCi0qIFRJTktFUlBPUC04OTUgVXNlICJhcyBCaW5hcnlPcGVyYXRvciIgYW5kIHJlbW92ZSBHQmluYXJ5T3BlcmF0b3IKLSogVElOS0VSUE9QLTkwMyBGaXggZW1wdHkgYnVmZmVyIHJldHVybiB1cG9uIGJ1ZmZlciBjYXBhY2l0eSBleGNlZWRlZAotKiBUSU5LRVJQT1AtOTEwIEluIHNlc3Npb24gdHJhbnNhY3Rpb24gb3BlbmVkIGZyb20gc2Vzc2lvbmxlc3MgcmVxdWVzdAotKiBUSU5LRVJQT1AtOTE4IENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kgaXMgdG9vIHJlc3RyaWN0aXZlCi0qIFRJTktFUlBPUC05MjYgUmVuYW1lZCBUaW5rZXJHcmFwaCBwdWJsaWMgc3RhdGljcyB0byBjb21tb24gcGF0dGVybiB1c2VkIGZvciBvdGhlciBzdGF0aWNzLgotKiBUSU5LRVJQT1AtOTQ4IEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0LmNoZWNrTWFwIG5vdCBhc3NlcnRlZCBpbiBHcm91cFRlc3QKLSogVElOS0VSUE9QLTk1MyBBcnRpZmFjdCBlcXVhbGl0eSBpcyBub3QgZXZhbHVhdGluZyBwcm9wZXJseQotKiBUSU5LRVJQT1AtOTU1IEhhc2hNYXAkTm9kZSBub3Qgc2VyaWFsaXphYmxlCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTI5NyBFbnN1cmUgQ29uc2lzdGVudCBCZWhhdmlvciBPdmVyIERlbGV0ZWQgRWxlbWVudHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC0zMzMgU3VwcG9ydCBWZXJ0ZXhQcm9wZXJ0eSBpbiBQYXJ0aXRpb25TdHJhdGVneQotKiBUSU5LRVJQT1AtMzkxIE1vcmUgZmx1ZW5jeSBpbiBHcmFwaENvbXB1dGVyIGZvciBwYXJhbWV0ZXJpemF0aW9uLgotKiBUSU5LRVJQT1AtNjE2IFVzZSBTcGFyayAxLjMuMCBpbiBIYWRvb3AtR3JlbWxpbi4KLSogVElOS0VSUE9QLTYyNCBQYXNzaW5nIERldGFjaGVkL1JlZmVyZW5jZWQgdG8gR3JhcGgudmVydGljZXMvZWRnZSgpCi0qIFRJTktFUlBPUC02ODAgQ29uZmlndXJhYmxlIENoYW5uZWxpemVyIGZvciBHcmVtbGluIERyaXZlcgotKiBUSU5LRVJQT1AtNzI4IEltcHJvdmUgUmVtb3RlIEdyYXBoIE9iamVjdCBUcmVhdG1lbnQgaW4gQ29uc29sZQotKiBUSU5LRVJQT1AtNzU2IFByb3ZpZGUgYSBzdHJpY3QgcGFyc2luZyBvcHRpb24gZm9yIEdyYXBoTUxSZWFkZXIKLSogVElOS0VSUE9QLTc2MCBNYWtlIGxvb3AgY291bnRlciBhY2Nlc3NpYmxlIHdpdGhpbiByZXBlYXQoKQotKiBUSU5LRVJQT1AtNzYyIEFsbG93IG1pZC10cmF2ZXJzYWwgVigpIChhbmQgRSgpKQotKiBUSU5LRVJQT1AtNzY1IERlY29tcG9zZSBBYnN0cmFjdFRyYW5zYWN0aW9uIGZvciBkaWZmZXJlbnQgdHJhbnNhY3Rpb25hbCBjb250ZXh0cyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTc2NyBQYXRoIHNob3VsZCBwbGF5IHdlbGwgd2l0aCAibG9jYWwiIHN0ZXBzLgotKiBUSU5LRVJQT1AtNzY4IE1hdGNoU3RlcCBpbiBPTEFQIHNob3VsZCBiZSBzbWFydCBhYm91dCBjdXJyZW50IHZlcnRleC4KLSogVElOS0VSUE9QLTc2OSBNYWtlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIFRQMyBkb2NzIHN0b3J5IGJldHRlci4KLSogVElOS0VSUE9QLTc3MiBUcmF2ZXJzZXJSZXF1aXJlbWVudC5MQUJFTEVEX1BBVEgKLSogVElOS0VSUE9QLTc5NiBTdXBwb3J0IG1lcmdlIGJpbmFyeSBvcGVyYXRvciBmb3IgR3JlbWxpbiBzYWNrcyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTc5OCBbUHJvcG9zYWxdIFJlbmFtZSBtYXBLZXlzKCkvbWFwVmFsdWVzKCkgdG8gc2VsZWN0KGtleXMpIGFuZCBzZWxlY3QodmFsdWVzKS4KLSogVElOS0VSUE9QLTgwMiBQcm92aWRlIHNhY2sob2JqZWN0KSBzbyB0aGF0IHRoZSBzYWNrIGNhbiBiZSBkaXJlY3RseSBzZXQuCi0qIFRJTktFUlBPUC04MDMgQSBiZXR0ZXIgc29sdXRpb24gdG8gZy5WKHNvbWVDb2xsZWN0aW9uLnRvQXJyYXkoKSkKLSogVElOS0VSUE9QLTgwNSBFbmZvcmNlIEF1dG9DbG9zZWFibGUgU2VtYW50aWNzIG9uIFRyYW5zYWN0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtODIxIEltcHJvdmUgdGVzdGluZyBhcm91bmQgVHJhdmVyc2FsSGVscGVyIGFyb3VuZCByZWN1cnNpdmUgbWV0aG9kcwotKiBUSU5LRVJQT1AtODI1IFtQcm9wb3NhbF0gU2V0QnVsa1N0ZXAgKHNpZGVFZmZlY3RTdGVwKQotKiBUSU5LRVJQT1AtODI2IE9uZVRvTWFueUJhcnJpZXJTdHJhdGVneQotKiBUSU5LRVJQT1AtODI3IEFkZCBhIGNvbnNvbGUgc2Vzc2lvbiB0byB0aGUgUGFnZVJhbmsgc2VjdGlvbiBvZiB0aGUgZG9jcy4KLSogVElOS0VSUE9QLTgyOSBUaW5rZXJHcmFwaENvbXB1dGVyIHNob3VsZCBzdXBwb3J0IHRoZSB1c2VyIHNwZWNpZmllZCB0aHJlYWQvd29ya2VyIGNvdW50LgotKiBUSU5LRVJQT1AtODM1IFNoYWRlIEphY2tzb24gRGVwZW5kZW5jaWVzICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtODM2IFN1cHBvcnQgSGFkb29wMiBpbiBwbGFjZSBvZiBIYWRvb3AxCi0qIFRJTktFUlBPUC04NTAgUmVkdWNlIEdyYXBoLmFkZFZlcnRleCBvdmVybG9hZCBhbWJpZ3VpdHkgKihicmVha2luZykqCi0qIFRJTktFUlBPUC04NTEgR3JvdXBDb3VudFN0ZXAgbmVlZHMgYSBieSgpIGZvciB0aGUgY291bnQuCi0qIFRJTktFUlBPUC04NjEgU29sdmUgIlRoZSBOdW1iZXIgUHJvYmxlbSIgZm9yIE9wZXJhdG9yIChhbmQgZm9sbG93IG9uIG9wZXJhdG9ycykKLSogVElOS0VSUE9QLTg2MyBbUHJvcG9zYWxdIFR1cm4gb2ZmIGJ1bGtpbmcgLS0gb3IgaXMgdGhlcmUgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbD8gKGhvcGUgbm90KS4KLSogVElOS0VSUE9QLTg2NiBHcm91cFN0ZXAgYW5kIFRyYXZlcnNhbC1CYXNlZCBSZWR1Y3Rpb25zICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtODY4IEFsbG93IFNwYXJrIEdyZW1saW4gQ29tcHV0ZXIgdG8gUmV1c2UgU3BhcmsgQ29udGV4dHMKLSogVElOS0VSUE9QLTg3NCBSZW5hbWUgR3JlbWxpbi1TcGFyayBwcm9wZXJ0aWVzIHVzaW5nIGdyZW1saW4uc3BhcmsgcHJlZml4LiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTg3NiBSZW5hbWUgVmVuZG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kgWFhYT3B0aW1pemF0aW9uU3RyYXRlZ3kgKihicmVha2luZykqCi0qIFRJTktFUlBPUC04NzkgUmVtb3ZlIGRlcHJlY2F0ZWQgcHJvbW90ZUJpbmRpbmdzIGZyb20gR3JlbWxpbkV4ZWN1dG9yICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtODg1IENoYW5nZSBUcmFuc2FjdGlvbi5vblJlYWRXcml0ZSgpIHRvIGJlIGEgVGhyZWFkTG9jYWwgc2V0dGluZyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTg4OCBHcmFwaFRyYXZlcnNhbC5wcm9wZXJ0eSBvdmVybG9hZHMgKihicmVha2luZykqCi0qIFRJTktFUlBPUC04OTYgU2ltcGxpZnkgdGhlIHt7d2l0aFNhY2t9fSBtZXRob2RzIG9mIHt7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9fS4gKihicmVha2luZykqCi0qIFRJTktFUlBPUC04OTcgUmVtb3ZlIGRlcHJlY2F0ZWQgR1N1cHBsaWVyLCBHRnVuY3Rpb24sIEdDb25zdW1lciwgZXRjLiBtZXRob2RzLiAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTg5OCBSZW5hbWUgQ29uanVjdGlvblAgYW5kIENvbmp1Y3Rpb25TdGVwIHRvIENvbm5lY3RpdmVQIGFuZCBDb25uZWN0aXZlU3RlcCAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTg5OSBCdW1wIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBOZW80ai4KLSogVElOS0VSUE9QLTkwMCBQcm92aWRlIGJ5KG9iamVjdCkgd2hpY2ggY29tcGlsZXMgdG8gYnkoY29uc3RhbnQob2JqZWN0KSkKLSogVElOS0VSUE9QLTkwMSBPcHRpb24gZm9yIHVzZSBvZiBOZXR0eSBlcG9sbCBvbiBMaW51eCB0byByZWR1Y2UgR0MgcHJlc3N1cmUKLSogVElOS0VSUE9QLTkwNCBCdWxrTG9hZGVyVmVydGV4UHJvZ3JhbSBvcHRpbWl6YXRpb25zCi0qIFRJTktFUlBPUC05MDUgSGFyZGVuIHRpbWUgb3JpZW50ZWQgdGVzdHMgaW4gUmVzdWx0UXVldWVUZXN0Ci0qIFRJTktFUlBPUC05MDcgZ2V0dGVycyBmb3IgUmVwZWF0U3RlcC51bnRpbFRyYXZlcnNhbCBhbmQgUmVwZWF0U3RlcC5lbWl0VHJhdmVyc2FsCi0qIFRJTktFUlBPUC05MDggVXNlIGxpbmUgYnJlYWtzIGluIGRvY3VtZW50YXRpb24KLSogVElOS0VSUE9QLTkwOSBJbXByb3ZlIHN0ZXBzIHRoYXQgaGFuZGxlIG51bWVyaWMgZGF0YQotKiBUSU5LRVJQT1AtOTExIEFsbG93IHNldHRpbmcgVGhyZWFkIFNwZWNpZmljIFNwYXJrIEpvYkdyb3VwL0N1c3RvbSBQcm9wZXJ0aWVzIGJhc2VkIG9uIGhhZG9vcCBjb25mCi0qIFRJTktFUlBPUC05MTMgUmVuYW1lIEdyZW1saW4gU2VydmVyIGFyZ3VtZW50cyByZWJpbmRpbmcgdG8gYWxpYXMKLSogVElOS0VSUE9QLTkxNCBEcml2ZXJSZW1vdGVBY2NlcHRvciBpbiBHcmVtbGluIENvbnNvbGUgc3VwcG9ydHMgYWxpYXNlcwotKiBUSU5LRVJQT1AtOTE3IEFkZCBIYWRvb3BHcmFwaC5vcGVuKFN0cmluZykKLSogVElOS0VSUE9QLTkyMiBBZGQgYSBib29rIGZvciBEZXZlbG9wZXIgRG9jdW1lbnRhdGlvbgotKiBUSU5LRVJQT1AtOTIzIEFkZCBhIGJvb2sgZm9yIFR1dG9yaWFscwotKiBUSU5LRVJQT1AtOTI1IFVzZSBwZXJzaXN0ZWQgU3BhcmtDb250ZXh0IHRvIHBlcnNpc3QgYW4gUkREIGFjcm9zcyBTcGFyayBqb2JzLgotKiBUSU5LRVJQT1AtOTMxIE1ha2UgaXQgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBjb3JlIE9wUHJvY2Vzc29yIGltcGxlbWVudGF0aW9ucwotKiBUSU5LRVJQT1AtOTMzIEltcHJvdmUgcmVsZWFzZSBwcm9jZXNzIHRvIGdldCBmaWxlcyBuYW1lZCBwcm9wZXJseQotKiBUSU5LRVJQT1AtOTM1IEFkZCBtaXNzaW5nICJjbG9zZSIgb3BlcmF0aW9uIHRvIHRoZSBzZXNzaW9uIG9wUHJvY2Vzc29yIGRvY3MKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4xLnguYXNjaWlkb2MjcmVsZWFzZS0zLTEtMC1pbmN1YmF0aW5nLCAzLjEuMCBjaGFuZ2Vsb2c+Pi4KIAogPT0gVGlua2VyUG9wIDMuMC4wIChBIEdyZW1saW4gUsSBZ2EgaW4gNy8xNiBUaW1lKQogCkBAIC01MjMyLDc2MSArMTE3NCw0OCBAQAogW1tyZWxlYXNlLTMtMC0yLWluY3ViYXRpbmddXQogPT09IFRpbmtlclBvcCAzLjAuMiAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE5LCAyMDE1KQogCi0qIENsZWFuZWQgdXAgYGV4dC9gIGRpcmVjdG9yeSB3aGVuIHBsdWdpbiBpbnN0YWxsYXRpb24gZmFpbHMgZm9yIGBncmVtbGluLXNlcnZlcmAgYW5kIGBncmVtbGluLWNvbnNvbGVgLgotKiBGaXhlZCBpc3N1ZXMgaW4gYGdyZW1saW4tc2VydmVyYCB3aGVuIGNvbmZpZ3VyZWQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24uCi0qIE1hZGUgYEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtYCB3b3JrIGZvciBhbnkgcGVyc2lzdGVudCBUUDMtc3VwcG9ydGluZyBncmFwaCAoaW5wdXQgYW5kIG91dHB1dCkuCi0qIGBUcmVlU2lkZUVmZmVjdFN0ZXBgIG5vdyBpbXBsZW1lbnRzIGBQYXRoUHJvY2Vzc29yYCB3aGljaCBmaXhlZCBhIGBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5YCBpc3N1ZS4KLSogQWRkZWQgYSBzaGVsbCBzY3JpcHQgdGhhdCB2ZXJpZmllcyBzb3VyY2UgYW5kIGJpbmFyeSBkaXN0cmlidXRpb25zLgotKiBGaXhlZCBhIGJ1bGsgcmVsYXRlZCBidWcgaW4gYEdyb3VwU3RlcGAgd2hlbiB1c2VkIG9uIGBHcmFwaENvbXB1dGVyYCAoT0xBUCkuCi0qIEdyZW1saW4gU2VydmVyIGJpbmFyeSBkaXN0cmlidXRpb24gbm93IHBhY2thZ2VzIGB0aW5rZXJncmFwaC1ncmVtbGluYCBhbmQgYGdyZW1saW4tZ3Jvb3Z5YCBhcyBwbHVnaW5zIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBHcmVtbGluIENvbnNvbGUncyBwYWNrYWdpbmcuCi0qIFRoZSBgUmVwZWF0U3RlcGAgY2xhdXNlcyAoYHVudGlsKClgLGBlbWl0KClgLGByZXBlYXQoKWApIGNhbiBvbmx5IGJlIHNldCBhdCBtb3N0IG9uZSB0aW1lIGluIG9yZGVyIHRvIHByZXZlbnQgdXNlciBjb25mdXNpb24uCi0qIEZpeGVkIGEgYGNsb25lKClgIGJ1ZyBpbiBgUmVwZWF0U3RlcGAsIGBUcmVlU3RlcGAsIGBHcm91cENvdW50U3RlcGAsIGBHcm91cFN0ZXBgLCBhbmQgYFRyYXZlcnNhbFJpbmdgLgotKiBGaXhlZCBhIHRocmVhZCBjb250ZXh0IGJ1ZyBpbiBgVGlua2VyR3JhcGhDb21wdXRlcmAuCi0qIEZpeGVkIGlzc3VlcyB3aXRoIHRoZSBgZ3JlbWxpbi1kcml2ZXJgIHJlbGF0ZWQgdG8gaGFuZ2luZyBjb25uZWN0aW9ucyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMuCi0qIFRpbmtlckdyYXBoIG5vdyBoYXMgYW4gb3B0aW9uIGZvciBwZXJzaXN0ZW5jZSB3aGVyZSB0aGUgZGF0YSBpcyBzYXZlZCBvbiBgY2xvc2UoKWAgYW5kLCBpZiBwcmVzZW50LCBsb2FkZWQgb24gYG9wZW4oKWAuCi0qIEFkZGVkIGFuIG92ZXJsb2FkIGZvciBgR3JlbWxpbkV4ZWN1dG9yLmV2YWwoKWAgdGhhdCB0YWtlcyBhIGBMaWZlY3ljbGVgIG9iamVjdCB0byBvdmVycmlkZSBzb21lIGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBgR3JlbWxpbkV4ZWN1dG9yLkJ1aWxkZXJgLgotKiBJbXByb3ZlZCBzZXNzaW9uIGNsb3NpbmcgZm9yIHRyYW5zYWN0aW9uYWwgZ3JhcGhzIGR1cmluZyBzaHV0ZG93biBvZiBHcmVtbGluIFNlcnZlci4KLSogRml4ZWQgaWQgcGFyYW1ldGVyIHVzZWQgaW4gdGVzdHMgZm9yIGBHcm9vdnlTdG9yZVRlc3RgIGFuZCBgR3Jvb3Z5UmVwZWF0VGVzdGAgdG8gbm90IGJlIHRyZWF0ZWQgYXMgYW4gZW1iZWRkZWQgc3RyaW5nLgotKiBgR3JhcGhTdGVwYCB3aWxsIGNvbnZlcnQgYW55IGBWZXJ0ZXhgIG9yIGBFZGdlYCBpZHMgdG8gdGhlaXIgaWQgYE9iamVjdGAgcHJpb3IgdG8gc3VibWlzc2lvbiB0byBgR3JhcGhDb21wdXRlcmAgKE9MQVApLgotCi09PT09IEJ1Z3MKLQotKiBUSU5LRVJQT1AtODE0IENvbm5lY3Rpb25Qb29sIGNhbiBmaWxsIHdpdGggZGVhZCBDb25uZWN0aW9ucwotKiBUSU5LRVJQT1AtODE2IEdyeW8gZGVzZXJpYWxpemF0aW9uIG9mIGVycm9yIHJlc3BvbnNlIHdpdGggbnVsbCBtZXNzYWdlIGNhdXNlcyBOUEUgYW5kIHByb3RvY29sIGRlc3luYwotKiBUSU5LRVJQT1AtODE3IEdyeW8gc2VyaWFsaXphdGlvbiBvZiBsYXJnZSByZXNwb25zZXMgZmFpbHMgYW5kIGNhdXNlcyBwcm90b2NvbCBkZXN5bmMKLSogVElOS0VSUE9QLTg0MCBUcmVlVGVzdCBJcyBub3QgYmVpbmcgaWdub3JlZCB2aWEgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneQotKiBUSU5LRVJQT1AtODQ5IGdyZW1saW4tc2VydmVyIGRvZXNuJ3QgY2xvc2Ugc2Vzc2lvbnMgb24gJ2Nsb3NlJyBvcGNvZGUKLSogVElOS0VSUE9QLTg1NSBzYXNsIGF1dGhlbnRpY2F0aW9uIHR5cGUgZXJyb3IgZHVlIHRvIEpzb24gZm9ybWF0Ci0qIFRJTktFUlBPUC04NjUgRXJyb3JzIHdpdGggSFRUUCBSRVNUIGJhc2ljIGF1dGgKLSogVElOS0VSUE9QLTg2NyBUaW5rZXJHcmFwaFByb3ZpZGVyIGRvZXMgbm90IGluaXRpYWxpemUgdGVtcCBkaXIKLSogVElOS0VSUE9QLTg3MCBSZWJvdW5kIGNsaWVudCByZXF1aXJlcyBhIGNvbm5lY3Rpb24gdG8gb2NjdXIgb24gdGhlIHVuZGVybHlpbmcgY2xpZW50LgotKiBUSU5LRVJQT1AtODc3IERyaXZlciBoYW5ncyBpZiBTU0wgZW5hYmxlZCBvbiBzZXJ2ZXIgYnV0IG5vdCBvbiBjbGllbnQKLQotPT09PSBJbXByb3ZlbWVudHMKLQotKiBUSU5LRVJQT1AtODI4IFRpbmtlckdyYXBoIGNhbiBzdXBwb3J0UGVyc2lzdGVuY2UoKSwgc2hvdWxkIHdlIGFsbG93IGl0LgotKiBUSU5LRVJQT1AtODMwIHByb2Nlc3MtZG9jcy5zaCBpbnRyb2R1Y2VzIGV4dHJhIHdoaXRlIHNwYWNlIGRlcGVuZGVudCBvbiBjb25zb2xlIHdpZHRoCi0qIFRJTktFUlBPUC04MzkgRG9jcyBzaG91bGQgaGF2ZSBhICR7dmVyc2lvbi5udW1iZXJ9IHVuZGVyIHRoZSBsb2dvLgotKiBUSU5LRVJQT1AtODUyIEEgc2hlbGwgc2NyaXB0IHRoYXQgdmFsaWRhdGVzIHRoZSBkaXN0cmlidXRpb24gYXJ0aWZhY3RzIGF0IHJlbGVhc2UgdGltZQotKiBUSU5LRVJQT1AtODUzIFRpbmtlclBvcCBMb2dvIGluIEphdmFEb2MgaW5kZXguaHRtbAotKiBUSU5LRVJQT1AtODU4IENsZWFudXAgYWZ0ZXIgZmFpbGVkIDppbnN0YWxsCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTItaW5jdWJhdGluZywgMy4wLjIgY2hhbmdlbG9nPj4uCiAKIFtbcmVsZWFzZS0zLTAtMS1pbmN1YmF0aW5nXV0KID09PSBUaW5rZXJQb3AgMy4wLjEgKFJlbGVhc2UgRGF0ZTogU2VwdGVtYmVyIDIsIDIwMTUpCiAKLSogYENvbXBhcmVgIG5vdyB1c2VzIGBCaWdEZWNpbWFsYCBpbnRlcm5hbGx5IHRvIGVuc3VyZSB0aGF0IHByZWNpc2lvbiBpcyBub3QgbG9zdCBvbiBzdGFuZGFyZCBudW1iZXIgY29tcGFyaXNvbnMuCi0qIFJlbmFtZWQgYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIHRvIGBWZXJpZmljYXRpb25TdHJhdGVneWAgc28gYWxsIHRoZSB2ZXJpZmljYXRpb24gc3RyYXRlZ2llcyBjYW4gdXNlIGl0LgotKiBBZGRlZCBgU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneWAgdGhhdCB0aHJvd3MgZXhjZXB0aW9ucyBmb3IgaWxsZWdhbCB0cmF2ZXJzYWwgcGF0dGVybnMgb24gdGhlIHN0YW5kYXJkIGVuZ2luZSAod2hpY2ggZXh0ZW5kcyB0byBgR3JhcGhDb21wdXRlcmApLgotKiBBZGRlZCBgR3JhcGhGZWF0dXJlcy5zdXBwb3J0c0NvbmN1cnJlbnRBY2Nlc3MoKWAgdG8gYWxsb3dzIGBHcmFwaGAgaW1wbGVtZW50YXRpb25zIHRvIHNpZ25pZnkgaWYgbXVsdGlwbGUgaW5zdGFuY2VzIGNhbiBhY2Nlc3MgdGhlIHNhbWUgZGF0YS4KLSogQ2xhcmlmaWVkIHNlbWFudGljcyBvZiBgVHJhbnNhY3Rpb24uY2xvc2UoKWAgaW4gdW5pdCB0ZXN0cyAtIG5vdyByZWZlcnMgb25seSB0byBjbG9zaW5nIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGluIHRoZSBjdXJyZW50IHRocmVhZC4KLSogYE5lbzRqR3JhcGhgIG5vIGxvbmdlciB1c2VzIGBPcHRPdXRgIG9uIGBUcmFuc2FjdGlvblRlc3Quc2hvdWxkUm9sbGJhY2tPbkNsb3NlV2hlbkNvbmZpZ3VyZWRgIChmb3JtZXJseSBgc2hvdWxkUm9sbGJhY2tPblNodXRkb3duV2hlbkNvbmZpZ3VyZWRgKQotKiBHcmVtbGluIFNlcnZlciBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGNhbiBub3cgcmV0dXJuIGEgYE1hcGAgb2YgdmFsdWVzIHRoYXQgd2lsbCBiZWNvbWUgZ2xvYmFsIGJpbmRpbmdzIGZvciB0aGUgc2VydmVyLgotKiBJbnRyb2R1Y2VkIHRoZSBgLS1kcnlSdW5gIG9wdGlvbiB0byB0aGUgZG9jdW1lbnQgZ2VuZXJhdGlvbiBwcm9jZXNzIHdoaWNoIGlnbm9yZXMgYWN0dWFsIHNjcmlwdCBleGVjdXRpb24gaW4gdGhlIEdyZW1saW4gQ29uc29sZS4KLSogRml4ZWQgYnVnIGluIGBFdmVudFN0cmF0ZWd5YCBhcm91bmQgcHJvcGVydHkgY2hhbmdlZCBldmVudHMgd2hlbiBjYWxsaW5nIGBwcm9wZXJ0eWAgd2l0aG91dCBjYXJkaW5hbGl0eSBvciBtZXRhLXByb3BlcnR5IHZhbHVlcy4KLSogSW1wcm92ZWQgc3VwcG9ydCBmb3IgdGhlIGBBY2NlcHRgIGhlYWRlciBmb3IgUkVTVC1iYXNlZCByZXF1ZXN0cyBpbiBHcmVtbGluIFNlcnZlci4KLSogYEdyYXBoRmFjdG9yeWAgbm93IGFsbG93cyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBjbGFzcyB0byB1c2UgdG8gaW5zdGFudGlhdGUgdGhlIGBHcmFwaGAgdGhyb3VnaCB0aGUgYEdyYXBoRmFjdG9yeUNsYXNzYCBhbm5vdGF0aW9uLgotKiBBZGRlZCBgd3JhcEFkamFjZW5jeUxpc3RgIGFuZCBgdW53cmFwQWRqYWNlbmN5TGlzdGAgb3B0aW9ucyB0byBgR3JhcGhTT05Xcml0ZXJgIGFuZCBgR3JhcGhTT05SZWFkZXJgIHJlc3BlY3RpdmVseSwgdGh1cyBhbGxvd2luZyB2YWxpZCBKU09OIHRvIGJlIHdyaXR0ZW4vcmVhZCBpZiB0aGUgdXNlciBkZXNpcmVzLgotKiBBZGRlZCBHcmVtbGluIFNlcnZlci9Ecml2ZXIgYXV0aGVudGljYXRpb24gc3VwcG9ydCB2aWEgU0FTTC4KLSogQWRkZWQgQmFzaWMgSFRUUCBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IGZvciBSRVNUIGluIEdyZW1saW4gU2VydmVyLgotKiBBZGRlZCBHcmVtbGluIFNlcnZlciBwbHVnaW4gdG8gaGVscCB3aXRoICJjcmVkZW50aWFsIGdyYXBoIiBtYW5hZ2VtZW50ICh1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYXV0aGVudGljYXRpb24gZmVhdHVyZXMgb2YgR3JlbWxpbiBTZXJ2ZXIpLgotKiBBZGRlZCAic2VjdXJlIiBHcmVtbGluIFNlcnZlci9Ecml2ZXIgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGVzLgotKiBBZGp1c3RlZCBjb25maWd1cmF0aW9uIGZvciBqYXZhZG9jIGdlbmVyYXRpb24gdG8gZWxpbWluYXRlIGVycm9yIG1lc3NhZ2VzLgotKiBSZW1vdmVkICJyZXNlcnZlZCIgZ3JhcGggY29uY2VwdCBuYW1lcyBmcm9tIHRlc3RzIChlLmcuICJsYWJlbCIsICJlZGdlIiwgInZhbHVlIikgdG8gc3VwcG9ydCB0aGUgY29udmVudGlvbiBvZiBhdm9pZGluZyB0aGVzZSBzdHJpbmdzIGZvciBwcm9wZXJ0eSBuYW1lcy4KLSogSW50cm9kdWNlZCBgR3JhcGhQcm92aWRlci5EZXNjcmlwdG9yYCB3aGljaCBhbm5vdGF0ZXMgYSBgR3JhcGhQcm92aWRlcmAgaW1wbGVtZW50YXRpb24gdG8gZGVzY3JpYmUgd2hhdCBgR3JhcGhDb21wdXRlcmAgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkLgotKiBNb2RpZmllZCBgT3B0T3V0YCB0byBpbmNsdWRlIGEgYGNvbXB1dGVyc2AgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0aGUgYEdyYXBoYCB0byBvcHQtb3V0IG9mIGNvbXB1dGVyLWJhc2VkIHRlc3RzIGZvciBzcGVjaWZpYyBjb21wdXRhdGlvbiBlbmdpbmVzLgotKiBBZGRlZCBhIGBTYW5kYm94RXh0ZW5zaW9uYCB0aGF0IGNhbiBiZSBwbHVnZ2VkIGludG8gYFR5cGVDaGVja2VkQ3VzdG9taXplclByb3ZpZGVyYCBhbmQgYENvbXBpbGVTdGF0aWNDdXN0b21pemVyUHJvdmlkZXJgIHRvIGNvbnRyb2wgY2xhc3NlcyBhbmQgbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAuCi0qIEFkZGVkIGEgbnVtYmVyIG9mIG5ldyBgSW1wb3J0Q3VzdG9taXplclByb3ZpZGVyYCBpbXBsZW1lbnRhdGlvbnMgc3VjaCBhcywgYFRpbWVkSW50ZXJydXB0Q3VzdG9taXplclByb3ZpZGVyYCwgYFR5cGVDaGVja2VkQ3VzdG9taXplclByb3ZpZGVyYCBhbmQgb3RoZXJzLgotKiBSZWZhY3RvcmVkIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCB0byBtYWtlIG1vcmUgZ2VuZXJhbCB1c2Ugb2YgYEltcG9ydEN1c3RvbWl6ZXJQcm92aWRlcmAgaW1wbGVtZW50YXRpb25zLgotKiBSZW1vdmVkIGBTZWN1cml0eUN1c3RvbWl6ZXJQcm92aWRlcmAgY2xhc3MgYW5kIHRoZSAic2FuZGJveCIgY29uZmlndXJhdGlvbiBvbiB0aGUgYFNjcmlwdEVuZ2luZXNgIGNsYXNzIC0gdGhpcyB3YXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgYW5kIG5vdCBtZWFudCBmb3IgcHVibGljIHVzZS4KLSogUmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGBncm9vdnktc2FuZGJveGAgZnJvbSB0aGUgYGdyZW1saW4tZ3Jvb3Z5YCBtb2R1bGUuCi0KLT09PT0gQnVncwotCi0qIFRJTktFUlBPUC03NzAgRXhjZXB0aW9uIHdoaWxlIEFkZFByb3BlcnR5U3RlcCB0cmllcyB0byBkZXRhY2ggdmVydGV4IHByb3BlcnR5Ci0qIFRJTktFUlBPUC03ODAgVXNlIG9mIGZvbGQoKSBpbiByZXBlYXQoKQotKiBUSU5LRVJQT1AtNzgyIG1hcChUcmF2ZXJzYWwpIHNob3VsZCBkZWNsYXJlIHJlcXVpcmVtZW50cyBvZiBjaGlsZAotKiBUSU5LRVJQT1AtNzg1IEdyZW1saW4gU2VydmVyIE5vdCBQcm9wZXJseSBSZXBvcnRpbmcgUG9ydCBDb25mbGljdAotKiBUSU5LRVJQT1AtNzkyIHNlbGVjdCBhdCBzdGFydCBvZiBtYXRjaCB0cmF2ZXJzYWwgb24gTWFwIGNhbiBmYWlsCi0qIFRJTktFUlBPUC03OTQgSW5jaWRlbnRUb0FkamVjZW50U3RyYXRlZ3kgbWFsZnVuY3Rpb24KLSogVElOS0VSUE9QLTgwNCBGYWlsZWQgaW5zdGFsbGluZyBuZW80ai1ncmVtbGluIGV4dGVuc2lvbiBvbiBXaW5kb3dzIDcKLSogVElOS0VSUE9QLTgyMiBOZW80aiBHcmFwaFN0ZXAgd2l0aCBlbGVtZW50IGFyZ3VtZW50cyBpZ25vcmVzIGhhcyAgKihicmVha2luZykqCi0KLT09PT0gSW1wcm92ZW1lbnRzCi0KLSogVElOS0VSUE9QLTU3NiBHcmVtbGluIFNlcnZlciBBdXRoZW50aWNhdGlvbgotKiBUSU5LRVJQT1AtNTgyIFJlbW92ZSBHcm9vdnkgU2FuZGJveCBEZXBlbmRlbmN5Ci0qIFRJTktFUlBPUC02MTAgR2VuZXJhbCBncmFwaCBjb25jZXB0IG5hbWVzIGluIHRlc3Qgc2NoZW1hCi0qIFRJTktFUlBPUC02NTYgSW9SZWdpc3RyeSBDaGFpbmluZwotKiBUSU5LRVJQT1AtNjkwIEJlIGFibGUgdG8gT1BUX09VVCBmb3IgU3RhbmRhcmQsIGJ1dCBub3QgQ29tcHV0ZXIgKihicmVha2luZykqCi0qIFRJTktFUlBPUC02OTkgR3JhcGhTT04gd3JpdGVHcmFwaCBub3QgcHJvZHVjaW5nIHZhbGlkIGpzb24gb2JqZWN0Ci0qIFRJTktFUlBPUC03NTAgQ29tcGFyZSBzaG91bGQgbm90IGhhdmUgc3BlY2lhbCBjYXNlIGZvciBOdW1iZXIKLSogVElOS0VSUE9QLTc1MiBNYWtlIEdyZW1saW4gU2VydmVyIEJldHRlciBSZXNwZWN0IEFDQ0VQVAotKiBUSU5LRVJQT1AtNzY0IFVuaWZ5IHNlbWFudGljcyBvZiBUcmFuc2FjdGlvbi5jbG9zZSgpIGluIHRlc3RzIGFuZCBkb2N1bWVudGF0aW9uICooYnJlYWtpbmcpKgotKiBUSU5LRVJQT1AtNzcxIElvUmVnaXN0cnkgSW5zdGFudGlhdGlvbiBXaXRoIEdyeW9Qb29sCi0qIFRJTktFUlBPUC03NzggU3VwcG9ydCBHcmFwaEZhY3RvcnkgbG9jYXRpb24gdmlhIGFubm90YXRpb24uCi0qIFRJTktFUlBPUC03OTEgRG9jdW1lbnQgcnVsZXMgZm9yIGNvbW1pdHRlcnMKLSogVElOS0VSUE9QLTc5NyBvcmRlcigpIHNlZW1zIHRvIG9ubHkgbGlrZSBMaXN0PyAqKGJyZWFraW5nKSoKLSogVElOS0VSUE9QLTgwOCBUcmF2ZXJzYWxDb21wYXJhdG9yLmNvbXBhcmF0b3IgbmVlZHMgYSBnZXR0ZXIKK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4wLnguYXNjaWlkb2MjcmVsZWFzZS0zLTAtMS1pbmN1YmF0aW5nLCAzLjAuMSBjaGFuZ2Vsb2c+Pi4KIAogPT09IFRpbmtlclBvcCAzLjAuMCAoUmVsZWFzZSBEYXRlOiBKdWx5IDksIDIwMTUpCiAKLSogTW9kaWZpZWQgdGhlIGBHcmVtbGluRXhlY3V0b3JgIHRvIGNhdGNoIGBUaHJvd2FibGVgIGFzIG9wcG9zZWQgdG8gYEV4Y2VwdGlvbmAgc28gYXMgdG8gcHJvcGVybHkgaGFuZGxlIGBFcnJvcmAgYmFzZWQgZXhjZXB0aW9ucy4KLSogTW9kaWZpZWQgdGhlIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uIHRvIHByZXZlbnQgaW5hcHByb3ByaWF0ZSBzY3JpcHQgZXZhbHVhdGlvbiB0aW1lb3V0cyBvbiBzdGFuZGFsb25lIGZ1bmN0aW9ucy4KLSogQWRkZWQgYSBjdXN0b20gY29uZmlndXJhdGlvbiBmb3IgInRpbWVkIGludGVycnVwdCIgaW4gdGhlIGBTY3JpcHRFbmdpbmVzYCBpbnN0YW50aWF0aW9uIG9mIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAuCi0qIEFkZGVkIGBtYXBLZXlzKClgIChgTWFwS2V5U3RlcGApIGFuZCBgbWFwVmFsdWVzKClgIChgTWFwVmFsdWVTdGVwYCkgdG8gZ2V0IHRoZSBrZXlzIGFuZCB2YWx1ZXMgb2YgYSBtYXAsIHJlc3BlY3RpdmVseS4KLSogYHNlbGVjdCgpYCBubyBsb25nZXIgc3VwcG9ydHMgZW1wdHkgYXJndW1lbnRzLiBUaGUgdXNlciBtdXN0IHNwZWNpZnkgdGhlIGtleXMgdGhleSBhcmUgc2VsZWN0aW5nLgotKiBgTWF0Y2hTdGVwYCBhbmQgYG1hdGNoKClgIG5vIGxvbmdlciBoYXZlIGEgInN0YXJ0IGxhYmVsIiBwYXJhbWV0ZXIgLS0gaXQgaXMgY29tcHV0ZWQgaWYgdGhlIGluY29taW5nIHRyYXZlcnNlciBkb2VzIG5vdCBoYXZlIHJlcXVpc2l0ZSBsYWJlbHMuCi0qIFR1cm5lZCB0cmFuc2FjdGlvbmFsIHRlc3RpbmcgYmFjayBvbiBpbiBHcmVtbGluIFNlcnZlciB1c2luZyBOZW80ai4KLSogUmVuYW1lZCBgVHJhbnNhY3Rpb24uY3JlYXRlKClgIHRvIGBUcmFuc2FjdGlvbi5jcmVhdGVUaHJlYWRlZFR4KClgLgotKiBBZGRlZCBgVHJhdmVyc2FsUGFyZW50LnJlbW92ZUdsb2JhbENoaWxkKClgIGFuZCBgVHJhdmVyc2FsUGFyZW50LnJlbW92ZUxvY2FsQ2hpbGQoKWAuCi0qIEFkZGVkIGEgYGNsZWFyYCBvcHRpb24gdG8gdGhlIEdlcGhpIFBsdWdpbiB0byBlbXB0eSB0aGUgR2VwaGkgd29ya3NwYWNlLgotKiBSZWZhY3RvcmVkIGBSZXN1bHRTZXRgIGFuZCByZWxhdGVkIGNsYXNzZXMgdG8gc3RvcCBwb2xsaW5nIGZvciByZXN1bHRzLgotKiBgQWJzdHJhY3RTdGVwYCBub3cgZ3VhcmFudGVlcyB0aGF0IGJ1bGstbGVzcyBhbmQgbnVsbC12YWx1ZWQgdHJhdmVyc2VycyBhcmUgbmV2ZXIgcHJvcGFnYXRlZC4KLSogQWRkZWQgYGRlZHVwKHN0cmluZy4uLilgIHdoaWNoIGFsbG93cyBmb3IgdGhlIGRlZHVwbGljYXRpb24gb2YgYSBzdHJlYW0gYmFzZWQgb24gdW5pcXVlIHNjb3BlIHZhbHVlcy4KLSogRml4ZWQgbXVsdGlwbGUgYnVncyBpbiB0aGUgR2VwaGkgUGx1Z2luIHJlbGF0ZWQgdG8gcmVmYWN0b3Jpbmcgb2YgdHJhdmVyc2FsIHNpZGUtZWZmZWN0cy4KLSogU3BsaXQgYFdoZXJlU3RlcGAgaW50byBgV2hlcmVQcmVkaWNhdGVTdGVwYCBhbmQgYFdoZXJlVHJhdmVyc2FsU3RlcGAgdG8gc2ltcGxpZnkgaW50ZXJuYWxzLgotKiBQcmV2ZW50IHRoZSBkcml2ZXIgZnJvbSBhdHRlbXB0aW5nIHRvIHJlY29ubmVjdCBvbiBhIGRlYWQgaG9zdCBpZiB0aGUgYENsdXN0ZXIuY2xvc2UoKWAgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZC4KLSogUmVuYW1lZCB0aGUgImRlYWN0aXZhdGUiIG9wdGlvbiBvbiBgOnBsdWdpbmAgY29tbWFuZCB0byAidW51c2UiIHRvIGJlIHN5bW1ldHJpYyB3aXRoIHRoZSAidXNlIiBvcHRpb24uCi0qIEFkZGVkIGBUcmF2ZXJzYWwudG9TdHJlYW0oKWAgdG8gdHVybiB0aGUgYFRyYXZlcnNhbDxTLEU+YCBpbnRvIGEgYFN0cmVhbTxFPmAuCi0qIEFkZGVkIGBTY29waW5nLlZhcmlhYmxlYCBlbnVtIG9mIGBTVEFSVGAgYW5kIGBFTkRgIHdoaWNoIGFsbG93cyB0aGUgYFNjb3BpbmdgIHN0ZXAgdG8gc3BlY2lmeSB3aGVyZSBpdHMgYmluZGluZ3MgYXJlLgotKiBgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneWAgaXMgc21hcnQgYWJvdXQgbm90IGFsbG93aW5nIGBXaGVyZVhYWFN0ZXBgIHdpdGggYSBzdGFydC12YXJpYWJsZSB0byBydW4gaW4gT0xBUCBhcyBpdCBzZWxlY3RzIHRoZSB2YWx1ZSBmcm9tIHRoZSBwYXRoLgotKiBSZXdyb3RlIGBNYXRjaFN0ZXBgIHdoZXJlIGl0IG5vdyB3b3JrcyBvbiBgR3JhcGhDb21wdXRlcmAsIHNvbHZlcyBtb3JlIHBhdHRlcm5zLCBwcm92aWRlcyBwbHVnYWJsZSBleGVjdXRpb24gcGxhbnMsIHN1cHBvcnRzIG5lc3RlZCBBTkQvT1IsIGBub3QoKWAtcGF0dGVybnMsIGV0Yy4KLSogUmVuYW1lZCBgR3JhcGhzYCBpbiBHcmVtbGluIFNlcnZlciB0byBgR3JhcGhNYW5hZ2VyYC4KLSogRml4ZWQgYnVnIGluIEdyZW1saW4gRHJpdmVyIHdoZXJlIGNsaWVudC1zaWRlIHNlcmlhbGl6YXRpb24gZXJyb3JzIHdvdWxkIG5vdCBidWJibGUgdXAgcHJvcGVybHkuCi0qIEZpeGVkIHByb2JsZW0gaW4gR3JlbWxpbiBTZXJ2ZXIgdG8gZW5zdXJlIHRoYXQgYSBmaW5hbCBgU1VDQ0VTU2Agb3IgYE5PX0NPTlRFTlRgIG1lc3NhZ2UgYXNzdXJlZCB0aGF0IHRoZSB0cmFuc2FjdGlvbiB3YXMgc3VjY2Vzc2Z1bCBpbiBzZXNzaW9ubGVzcyByZXF1ZXN0cy4KLSogQXJyb3cga2V5cyBmb3IgY3ljbGluZyB0aHJvdWdoIGNvbW1hbmQgaGlzdG9yeSBub3cgd29yayBpbiBHcmVtbGluIENvbnNvbGUgd2hlbiBiZWluZyB1c2VkIG9uIFdpbmRvd3MuCi0qIEFkZGVkIGBOb3RTdGVwYCBhbmQgYG5vdCh0cmF2ZXJzYWwpYCBmb3Igbm90J2luZyBhIHRyYXZlcnNhbCAoaW50ZWdyYXRlcyBsaWtlIGBDb25qdW5jdGlvblN0ZXBgKS4KLSogUmVtb3ZlZCBgVHJhdmVyc2FsUGAuIFRyYXZlcnNhbHMgYW5kIGBQYC1wcmVkaWNhdGVzIGFyZSBjb21wbGV0ZWx5IHNlcGFyYXRlIGNvbmNlcHRzLgotKiBgaGFzKGtleSx0cmF2ZXJzYWwpYCBpcyBub3cgYW4gYWxpYXMgZm9yIGBmaWx0ZXIoX18udmFsdWVzKGtleSkudHJhdmVyc2FsKWAgdXNpbmcgYFRyYXZlcnNhbEZpbHRlclN0ZXBgLgotKiBTaW1wbGlmaWVkIGBTdWJncmFwaFN0cmF0ZWd5YCBieSB1c2luZyBgVHJhdmVyc2FsRmlsdGVyU3RlcGAgaW5zdGVhZCBvZiB0aGUgbW9yZSBjb21wbGV4IGBXaGVyZVN0ZXBgLgotKiBBZGRlZCBgVHJhdmVyc2FsTWFwU3RlcGAsIGBUcmF2ZXJzYWxGbGF0TWFwU3RlcGAsIGBUcmF2ZXJzYWxGaWx0ZXJTdGVwYCwgYW5kIGBUcmF2ZXJzYWxTaWRlRWZmZWN0U3RlcGAgd2hpY2ggYWxsIGxldmVyYWdlIGFuIGludGVybmFsIHRyYXZlcnNhbC4KLSogQWRkZWQgYFBhdGguZ2V0KHBvcCxsYWJlbClgIGFzIGRlZmF1bHQgaGVscGVycyBpbiBgUGF0aGAuCi0qIEFkZGVkIGBQb3AuZmlyc3RgLCBgUG9wLmxhc3RgLCBhbmQgYFBvcC5hbGxgIGFzIGVudW1zIGZvciBnZXR0aW5nIHNpbmdsZSBpdGVtcyBmcm9tIGEgY29sbGVjdGlvbiBvciBhIGxpc3Qgb2Ygc2FpZCBpdGVtcy4KLSogQ2hhbmdlZCBgR3JlbWxpblNlcnZlci5zdGFydCgpYCB0byByZXR1cm4gYSBgQ29tcGxldGFibGVGdXR1cmVgIHRoYXQgY29udGFpbnMgdGhlIGNvbnN0cnVjdGVkIGBTZXJ2ZXJHcmVtbGluRXhlY3V0b3JgLgotKiBSZXN0cnVjdHVyZWQgYElvVGVzdGAgYnJlYWtpbmcgaXQgdXAgaW50byBzbWFsbGVyIGFuZCBtb3JlIGxvZ2ljYWxseSBncm91cGVkIHRlc3QgY2FzZXMuCi0qIEdyZW1saW4gU2VydmVyIGBTZXR0aW5nc2Agbm93IGhhcyBzZW5zaWJsZSBkZWZhdWx0cyB0aHVzIGFsbG93aW5nIHRoZSBzZXJ2ZXIgdG8gYmUgc3RhcnRlZCB3aXRoIG5vIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi4KLSogRml4ZWQgZ2FyYmxlZCBjaGFyYWN0ZXJzIGluIEdyZW1saW4gQ29uc29sZSB0aGF0IG5vdGFibHkgc2hvd2VkIHVwIGluIGA6aGVscGAKLSogUmVwbGFjZWQgZGVwZW5kZW5jeSBvbiBgZ3Jvb3Z5LWFsbGAgd2l0aCBpbmRpdmlkdWFsIEdyb292eSBkZXBlbmRlbmNpZXMgYXMgbmVlZGVkLgotKiBCdW1wZWQgYG9yZy5ncGVyZnV0aWxzOmdiZW5jaGAgdG8gdGhlIGAwLjQuM2AgYW5kIGEgdmVyc2lvbiBleHBsaWNpdGx5IGNvbXBhdGlibGUgd2l0aCBHcm9vdnkgMi40LnguCi0qIFJlbmFtZWQgYEtleVN0ZXBgIHRvIGBQcm9wZXJ0eUtleVN0ZXBgIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBgUHJvcGVydHlWYWx1ZVN0ZXBgLgotKiBBZGRlZCBgR3JlbWxpbi1MaWItUGF0aHNgIHRvIG1vZGlmeSBwYXRocyBpbiBwbHVnaW4gYGxpYmAgZGlyZWN0b3J5LgotKiBNb2RpZmllZCB0aGUgY2FwYWJpbGl0aWVzIG9mIGBHcmVtbGluLVBsdWdpbi1QYXRoc2AgdG8gZGVsZXRlIHBhdGhzIHRoYXQgaGF2ZSBubyB2YWx1ZSBvbiB0aGUgcmlnaHQtaGFuZC1zaWRlIG9mIHRoZSBlcXVhbHMgc2lnbi4KLSogVGhlIFJFU1QgQVBJIGluIEdyZW1saW4gU2VydmVyIG5vdyByZXF1aXJlcyBwYXJhbWV0ZXJzIHRvIGJlIGRlZmluZWQgd2l0aCBhICJiaW5kaW5ncy4iIHByZWZpeC4KLSogTW9kaWZpZWQgdGhlIFJFU1QgQVBJIGluIEdyZW1saW4gU2VydmVyIHRvIGFjY2VwdCByZWJpbmRpbmdzLgotKiBBZGRlZCBgcmViaW5kaW5nc2Agb3B0aW9uYWwgYXJndW1lbnQgdG8gc2Vzc2lvbmxlc3MgcmVxdWVzdHMgdG8gYWxsb3cgZ2xvYmFsIGJpbmRpbmdzIHRvIGJlIHJlYm91bmQgYXMgbmVlZGVkLgotKiBBZGRlZCBgTGF6eUJhcnJpZXJTdHJhdGVneWAgd2hpY2ggInN0YWxscyIgYSB0cmF2ZXJzYWwgb2YgYSBwYXJ0aWN1bGFyIGZvcm0gaW4gb3JkZXIgdG8gZ2FpbiBhIGJ1bGtpbmcgb3B0aW1pemF0aW9uLgotKiBgQ29sbGVjdGluZ0JhcnJpZXJTdGVwYCBzdXBwb3J0cyBgbWF4QmFycmllclNpemVgIGZvciAibGF6eSBiYXJyaWVyLCIgbWVtb3J5IGNvbnNlcnZhdGlvbi4KLSogYFNjb3BpbmdgIG5vdyBoYXMgYGdldFNjb3BlS2V5cygpYCB0byBnZXQgdGhlIGtleXMgZGVzaXJlZCBieSB0aGUgc2NvcGluZyBzdGVwLgotKiBSZWZhY3RvcmVkIFNTTCBzdXBwb3J0IGluIHRoZSBHcmVtbGluIFNlcnZlci9Ecml2ZXIuCi0qIEZhY3RvcmVkIG91dCBgU2VydmVyR3JlbWxpbkV4ZWN1dG9yYCB3aGljaCBjb250YWlucyB0aGUgY29yZSBlbGVtZW50cyBvZiBzZXJ2ZXItc2lkZSBzY3JpcHQgZXhlY3V0aW9uIGluIEdyZW1saW4gU2VydmVyLgotKiBCdW1wZWQgdG8gbmV0dHkgNC4wLjI4LkZpbmFsLgotKiBSZWZhY3RvcmVkIHRoZSBgTXV0YXRpbmdgIGludGVyZmFjZSBhbmQgaW50cm9kdWNlIGBDYWxsYmFja1JlZ2lzdHJ5YCBpbnRlcmZhY2UgYXJvdW5kIGBFdmVudFN0cmF0ZWd5YC4KLSogQ2hhbmdlZCBgb25SZWFkV3JpdGVgIGFuZCBgb25DbG9zZWAgb2YgYEFic3RyYWN0VHJhbnNhY3Rpb25gIHRvIGJlIHN5bmNocm9uaXplZC4KLSogQWRkZWQgYExhYmVsUGAgdG8gc3VwcG9ydCBpbmRleCBsb29rdXBzIGFuZCBgaGFzKClgIGZpbHRlcmluZyBvbiBgTmVvNGpHcmFwaGAgbXVsdGktbGFiZWwgdmVydGljZXMuCi0qIGBBZGRFZGdlU3RlcGAgaXMgbm93IGEgYFNjb3BpbmdgIHN0ZXAuCi0qIEFkZGVkIGEgZnVsbHkgZGVmaW5lZCBzZXQgb2YgYEdyYXBoLkZlYXR1cmVgIGltcGxlbWVudGF0aW9ucyB0byBgRW1wdHlHcmFwaGAuCi0qIERyb3BwZWQgZGVwZW5kZW5jeSBvbiBgb3JnLmpzb246anNvbmAgLSB1c2VkIGV4aXN0aW5nIEphY2tzb24gZGVwZW5kZW5jeS4KLSogQWRkZWQgYmFjayBuZW80ai1ncmVtbGluIGFzIHRoZSBsaWNlbnNpbmcgb2YgdGhlIE5lbzRqIEFQSSBpcyBub3cgQXBhY2hlMi4KLSogQWRkZWQgYHdpbGxBbGxvd0lkYCBtZXRob2QgdG8gZmVhdHVyZXMgcmVsYXRlZCB0byB2ZXJ0aWNlcywgZWRnZXMgYW5kIHZlcnRleCBwcm9wZXJ0aWVzIHRvIHRlc3QgaWYgYW4gaWRlbnRpZmllciBjYW4gYmUgdXNlIHdoZW4gYHN1cHBvcnRzVXNlclN1cHBsaWVkSWRzYCBpcyBgdHJ1ZWAuCi0qIEZpeGVkIGEgYnVnIGluIGBHcmFwaFRyYXZlcnNhbC5jaG9vc2UocHJlZGljYXRlLHRydWVUcmF2ZXJzYWwsZmFsc2VUcmF2ZXJzYWwpYC4KLSogUmVtb3ZlZCBgTWFwVHJhdmVyc2FsYCwgYE1hcFRyYXZlcnNlclRyYXZlcnNhbGAsIGBGaWx0ZXJUcmF2ZXJzYWxgLCBhbmQgYEZpbHRlclRyYXZlcnNlclRyYXZlcnNhbGAgYXMgdGhlc2UgYXJlIHNpbXBseSBgX18ubWFwKGZ1bmN0aW9uKWAgYW5kIGBfXy5maWx0ZXIocHJlZGljYXRlKWAuCi0qIEluY2x1ZGUgYGhhZG9vcC1ncmVtbGluYCBIYWRvb3AgY29uZmlndXJhdGlvbiBzYW1wbGUgZmlsZXMgaW4gR3JlbWxpbiBDb25zb2xlIGRpc3RyaWJ1dGlvbi4KLSogSXRlcmF0aW9uIG9mIHJlc3VsdHMgaW4gR3JlbWxpbiBTZXJ2ZXIgb2NjdXIgaW4gdGhlIHNhbWUgdGhyZWFkIGFzIGV2YWx1YXRpb24gYW5kIHByaW9yIHRvIHRyYW5zYWN0aW9uIGNsb3NlLgotKiBUaW5rZXJHcmFwaENvbXB1dGVyIG5vdyBzdXBwb3J0cyBldmVyeSBgUmVzdWx0R3JhcGhgL2BQZXJzaXN0YCBjb21iaW5hdGlvbi4KLSogYEdyYXBoQ29tcHV0ZXJUZXN0YCBleHRlbmRlZCB3aXRoIHZhbGlkYXRpb24gb2YgdGhlIHNlbWFudGljcyBvZiBhbGwgYFJlc3VsdEdyYXBoYC9gUGVyc2lzdGAgY29tYmluYXRpb25zLgotKiBHaXJhcGhHcmFwaENvbXB1dGVyIG5vIGxvbmdlciByZXF1aXJlcyBhbiBleHRyYSBpdGVyYXRpb24gYW5kIE1hcFJlZHVjZSBqb2IgdG8gZGVyaXZlIHRoZSBmdWxsIGBNZW1vcnlgIHJlc3VsdC4KLSogU3BhcmtHcmFwaENvbXB1dGVyIG5vdyBzdXBwb3J0cyBgSW5wdXRSRERgIGFuZCBgT3V0cHV0UkREYCB0byBhbGxvdyB2ZW5kb3JzL3VzZXJzIHRvIHVzZSBhIGBTcGFya0NvbnRleHRgIHRvIHJlYWQvd3JpdGUgdGhlIGdyYXBoIGFkamFjZW5jeSBsaXN0LgotKiBBZGRlZCBgU2NvcGluZy5nZXRTY29wZVZhbHVlKClgIG1ldGhvZCBzbyBhbGwgInNlbGVjdGluZyIgc3RlcHMgdXNlIHRoZSBzYW1lIHBhdHRlcm4gZm9yIG1hcCwgcGF0aCwgYW5kIHNpZGVFZmZlY3QgZGF0YSByZXRyaWV2YWwuCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTAsIDMuMC4wIGNoYW5nZWxvZz4+LgogCiA9PT0gVGlua2VyUG9wIDMuMC4wLk05IChSZWxlYXNlIERhdGU6IE1heSAyNiwgMjAxNSkKIAotKiBSZW1vdmVkIGBHcmFwaENvbXB1dGVyLmlzb2xhdGlvbigpYCBhcyBhbGwgaW1wbGVtZW50YXRpb25zIHVzZSBzdGFuZGFyZCBCU1AuCi0qIEFkZGVkIGEgR3JlbWxpbiBTZXJ2ZXIgYExpZmVDeWNsZUhvb2tgIHRvIGVuc3VyZSB0aGF0IGNlcnRhaW4gc2NyaXB0cyBleGVjdXRlIG9uY2UgYXQgc3RhcnR1cCBhbmQgb25jZSBhdCBzaHV0ZG93bi4KLSogYGhhcyhrZXkpYCBhbmQgYGhhc05vdChrZXkpYCBhcmUgbm93IGFsaWFzZXMgZm9yIGB3aGVyZSh2YWx1ZXMoa2V5KSlgIGFuZCBgd2hlcmUobm90KHZhbHVlcyhrZXkpKSlgLCByZXNwZWN0aXZlbHkuCi0qIFRpbmtlckdyYXBoIGNsYXNzZXMgYXJlIG5vdyBmaW5hbCB0byByZXN0cmljdCB1c2VyIGFuZCB2ZW5kb3IgZXh0ZW5zaW9uLgotKiBBZGRlZCBgVHJhdmVyc2FsU3RyYXRlZ3kuVmVuZG9yT3B0aW1pemF0aW9uYCB0byBlbnN1cmUgdGhhdCBhbGwgVGlua2VyUG9wIG9wdGltaXphdGlvbnMgZXhlY3V0ZSBmaXJzdCBvbiB0aGUga25vd24gVGlua2VyUG9wIHN0ZXBzLgotKiBBZGRlZCBgVGFpbEdsb2JhbFN0ZXBgIGFuZCBgVGFpbExvY2FsU3RlcGAgKGB0YWlsKClgKSB3aGljaCBnZXRzIG9iamVjdHMgZnJvbSB0aGUgZW5kIG9mIHRoZSB0cmF2ZXJzYWwgc3RyZWFtLgotKiBgQW5kU3RlcGAgYW5kIGBPclN0ZXBgIGFyZSBub3cgc2ltcGx5IG1hcmtlcnMgd2hlcmUgYFdoZXJlU3RlcChhLmFuZChiKS5hbmQoYykuLi5hbmQoeikpYCBpcyB0aGUgY29tcGlsYXRpb24uCi0qIE1vdmVkIGBDb21wYXJlYCwgYENvbnRhaW5zYCwgYE9yZGVyYCwgYE9wZXJhdG9yYCwgYW5kIGBQYCB0byBgcHJvY2Vzcy90cmF2ZXJzYWxgIGZyb20gYHN0cnVjdHVyZS9gIGFzIHRoZXkgYXJlIHByb2Nlc3MtYmFzZWQgb2JqZWN0cy4KLSogYEhhc0NvbnRhaW5lcmAgbm93IHVzZXMgYFBgIHByZWRpY2F0ZSBhcyBoZWxwZXIgbWV0aG9kcyBhbmQgdGVzdHMgYXJlIG1vcmUgdGhvcm91Z2ggb24gYFBgLgotKiBDaGFuZ2VkIEdyZW1saW4gU2VydmVyIGludGVncmF0aW9uL3BlcmZvcm1hbmNlIHRlc3RzIHRvIGJlIHJ1bm5hYmxlIGZyb20gd2l0aGluIHRoZSBgZ3JlbWxpbi1zZXJ2ZXJgIGRpcmVjdG9yeSBvciBmcm9tIHRoZSBwcm9qZWN0IHJvb3QuCi0qIE1vdmVkIHRoZSBzdHJpbmcgbWV0aG9kcyBvZiBgVHJhdmVyc2FsSGVscGVyYCB0byBgU3RyaW5nRmFjdG9yeWAuCi0qIFJlbmFtZWQgSlNPTi1yZWxhdGVkIHNlcmlhbGl6ZXJzIGZvciBHcmVtbGluIFNlcnZlciB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBHcmFwaFNPTiBuYW1pbmcuCi0qIFJlbW92ZWQgYEhhc1RyYXZlcnNhbFN0ZXBgIGluIGZhdm9yIG9mIG5ldyBgUC50cmF2ZXJzYWxgIG1vZGVsIHdpdGggYEhhc1N0ZXBgLgotKiBGaXhlZCBidWcgaW4gYFdzR3JlbWxpblRleHRSZXF1ZXN0RGVjb2RlcmAgd2hlcmUgY3VzdG9tIHNlcmlhbGl6ZXJzIGZyb20gZ3JhcGhzIHdlcmUgbm90IGJlaW5nIHVzZWQuCi0qIEFkZGVkIGBBbmRQYCB3aGljaCBhbGxvd3MgZm9yIHRoZSBgYW5kKClgLWluZyBvZiBgUGAgcHJlZGljYXRlcy4KLSogYE9yZGVyLm9wcG9zaXRlKClgIGlzIG5vdyBgcmV2ZXJzZWQoKWAgYXMgdGhhdCBpcyBhIGBDb21wYXJhdG9yYCBpbnRlcmZhY2UgbWV0aG9kIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzLgotKiBgQ29tcGFyZS9Db250YWlucy9QLm9wcG9zaXRlKClgIGFyZSBub3cgYG5lZ2F0ZSgpYCBhcyB0aGF0IGlzIGEgYEJpUHJlZGljYXRlYCBpbnRlcmZhY2UgbWV0aG9kIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzLgotKiBgaGFzKHRyYXZlcnNhbClgIGlzIHJlcGxhY2VkIGJ5IGB3aGVyZSh0cmF2ZXJzYWwpYCBhbmQgYGhhcyhrZXksdHJhdmVyc2FsKWAuIGBIYXNYWFhgIGlzIGFsd2F5cyB3aXRoIHJlc3BlY3RzIHRvIGFuIGVsZW1lbnQgcHJvcGVydHkuCi0qIEFkZGVkIGBUcmF2ZXJzYWxTY3JpcHRIZWxwZXJgIHdpdGggc3RhdGljIG1ldGhvZHMgZm9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIGEgYFRyYXZlcnNhbGAgZnJvbSBhIEpTUiAyMjMgYFNjcmlwdEVuZ2luZWAuCi0qIENoYW5nZWQgYFN1YmdyYXBoU3RyYXRlZ3lgIHRvIHRha2UgYFRyYXZlcnNhbGAgcmF0aGVyIHRoYW4gYFByZWRpY2F0ZWAgZm9yIGZpbHRlcmluZy4KLSogSW1wcm92ZWQgYFN1YmdyYXBoU3RyYXRlZ3lgIHRvIG9ubHkgbW9kaWZ5IHRoZSBgVHJhdmVyc2FsYCBpZiBmaWx0ZXJpbmcgd2FzIHJlcXVpcmVkLgotKiBJbXByb3ZlZCBsb2dnaW5nIG9mIGVycm9ycyBpbiB0aGUgYEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyYCB0byBpbmNsdWRlIGEgc3RyYWNrdHJhY2UgaWYgb25lIHdhcyBwcmVzZW50LgotKiBNb3ZlZCBgQWJzdHJhY3RHcmVtbGluU3VpdGUuR3JhcGhQcm92aWRlckNsYXNzYCB0byBgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3NgLgotKiBTaW1wbGlmaWVkIHRoZSBHcmVtbGluLUdyb292eSB0ZXN0IHN1aXRlIHdoZXJlIHRoZXJlIGlzIG5vdyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIGBTVEFOREFSRGAgYW5kIGBDT01QVVRFUmAgdGVzdHMuCi0qIGBWZXJ0ZXhQcm9ncmFtYCBhbmQgYE1hcFJlZHVjZWAgbm93IGFkZCBhIGBHcmFwaGAgcGFyYW1ldGVyIHRvIGBsb2FkU3RhdGUoR3JhcGgsIENvbmZpZ3VyYXRpb24pYC4KLSogQWRkZWQgYFNjb3BpbmdTdHJhdGVneWAgd2hpY2ggYXV0by1zY29wZXMgYHNlbGVjdCgpYCBhbmQgYHdoZXJlKClgIHNvIHRoZSBsYW5ndWFnZSBsb29rcyBjbGVhbi4KLSogQWRkZWQgYFNjb3BpbmdgIGFzIGEgbWFya2VyIGludGVyZmFjZSB0byBzdGF0ZSB0aGF0IGEgc3RlcCBkZXNpcmVzIGEgcGFydGljdWxhciBgU2NvcGVgLgotKiBgU2VsZWN0U3RlcGAsIGBTZWxlY3RPbmVTdGVwYCwgYW5kIGBXaGVyZVN0ZXBgIHN1cHBvcnQgYm90aCBgU2NvcGUubG9jYWxgIGFuZCBgU2NvcGUuZ2xvYmFsYCBmb3IgYE1hcDxTdHJpbmcsT2JqZWN0PmAgb3IgYFBhdGhgIGFuYWx5c2lzLCByZXNwZWN0aXZlbHkuCi0qIEZpeGVkIGEgYnVnIGluIHRoZSBgVHJhdmVyc2FsU3RyYXRlZ2llc2Agc29ydCBhbGdvcml0aG0uCi0qIFJlbW92ZWQgbnVtZXJvdXMgdW51c2VkIHN0YXRpYyB1dGlsaXR5IG1ldGhvZHMgaW4gYFRyYXZlcnNhbEhlbHBlcmAuCi0qIFRpbmtlckdyYXBoIHByb2Nlc3Mgc3VpdGUgdGVzdHMgYXJlIG5vdyBydW5uaW5nIHdpdGggYW5kIHdpdGhvdXQgc3RyYXRlZ2llcyBpbiBwbGFjZS4KLSogQWRkZWQgYEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5YCB3aGljaCByZXdyaXRlcyBgb3V0RSgpLmluVigpYCwgYGluRSgpLm91dFYoKWAgYW5kIGBib3RoRSgpLm90aGVyVigpYCB0byBgb3V0KClgLCBgaW4oKWAgYW5kIGBib3RoKClgIHJlc3BlY3RpdmVseS4KLSogUmVuYW1lZCBgQ29tcGFyYXRvckhvbGRlclJlbW92YWxTdHJhdGVneWAgdG8gYE9yZGVyR2xvYmFsUmVtb3ZhbFN0cmF0ZWd5YCBhcyBpdCBub3cgb25seSBhcHBsaWVzIHRvIGBPcmRlckdsb2JhbFN0ZXBgLgotKiBBbm9ueW1vdXMgdHJhdmVyc2FsIG5vIGxvbmdlciBoYXZlIGBFbXB0eUdyYXBoYCBhcyB0aGVpciBncmFwaCwgYnV0IGluc3RlYWQgdXNlIGBPcHRpb25hbDxHcmFwaD4uaXNQcmVzZW50KCkgPT0gZmFsc2VgLgotKiBBZGRlZCBgVHJhdmVyc2FsLkFkbWluLnNldEdyYXBoKEdyYXBoKWAgYXMgc3RyYXRlZ2llcyB0aGF0IG5lZWQgcmVmZXJlbmNlIHRvIHRoZSBncmFwaCwgbmVlZCBpdCBhY3Jvc3MgYWxsIG5lc3RlZCB0cmF2ZXJzYWxzLgotKiBgQWJzdHJhY3RMYW1iZGFUcmF2ZXJzYWxgIGlzIG5vdyBzbWFydCBhYm91dCBgVHJhdmVyc2FsUGFyZW50YCBhbmQgYFRyYXZlcnNhbFN0cmF0ZWdpZXNgLgotKiBGaXhlZCBidWcgaW4gYEdyYXBoTUxgIHJlYWRlciB0aGF0IHdhcyBub3QgYWxsb3dpbmcgYDxlZGdlPmAgZWxlbWVudHMgdG8gY29tZSBiZWZvcmUgYDxub2RlPmAgZWxlbWVudHMgYXMgYWxsb3dhYmxlIGJ5IHRoZSBHcmFwaE1MIHNwZWNpZmljYXRpb24uCi0qIEFkZGVkIGBWZXJ0ZXhGZWF0dXJlLmdldENhcmRpbmFsaXR5YC4KLSogQWRkZWQgYEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5YCB3aGljaCByZXdyaXRlcyBgb3V0KCkuY291bnQoKWAgdG8gYG91dEUoKS5jb3VudCgpYCAoYW5kIHNpbWlsYXIgc3VjaCBwYXR0ZXJucykuCi0qIGBHcnlvUG9vbGAgbm93IHRha2VzIGEgYENvbmZpZ3VyYXRpb25gIG9iamVjdCB3aGljaCBhbGxvd3Mgc2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgcG9vbCBhbmQgdGhlIGBJb1JlZ2lzdHJ5YCBpbnN0YW5jZS4KLSogQWRkZWQgYFBlcnNpc3RSZXN1bHRHcmFwaEF3YXJlYCBpbnRlcmZhY2Ugd2hpY2ggaXMgdXNlZCBieSBgT3V0cHV0Rm9ybWF0c2AgdG8gc3BlY2lmeSBwZXJzaXN0ZW5jZSBwb3NzaWJpbGl0aWVzIGZvciBhIEhhZG9vcCBgR3JhcGhDb21wdXRlcmAuCi0qIGBFbGVtZW50SWRTdHJhdGVneWAgbm93IGFsbG93cyB0aGUgaWRlbnRpZmllciBwcm9wZXJ0eSB0byBiZSBzZXQgZGlyZWN0bHkgKGFuZCBub3Qgb25seSBieSBzcGVjaWZ5aW5nIGBULmlkYCkuCi0qIEFkZGVkIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciByZWdpc3RlcmluZyBhIGBUcmF2ZXJzYWxTdHJhdGVneWAgaW4gR3JlbWxpbiBTZXJ2ZXIuCi0qIEFkZGVkIHJlc3BvbnNlIHN0YXR1cyBjb2RlIGZvciBgTk9fQ09OVEVOVGAgdG8gcmVwcmVzZW50IG91dHB1dCBmb3IgYSBzdWNjZXNzZnVsIHNjcmlwdCBleGVjdXRpb24gd2l0aG91dCBhIHJlc3VsdCAoZS5nLiBhbiBlbXB0eSBgSXRlcmF0b3JgKS4KLSogUmVtb3ZlZCB0aGUgbm90aW9uIG9mIGEgInRlcm1pbmF0b3IiIG1lc3NhZ2UgZnJvbSB0aGUgR3JlbWxpbiBTZXJ2ZXIgcHJvdG9jb2wgLSBuZXcgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgZm9yIGBQQVJUSUFMX0NPTlRFTlRgLgotKiBgUGF0aGAgYW5kIGBTdGVwYCBsYWJlbHMgYXJlIG9yZGVyZWQgYnkgdGhlIG9yZGVyIGluIHdoaWNoIHRoZSByZXNwZWN0aXZlIGBhZGRMYWJlbCgpYCBjYWxscyB3ZXJlIG1hZGUuCi0qIEEgYFN0ZXBgIG5vdyBoYXMgYSBgU2V0PFN0cmluZz5gIG9mIGxhYmVscy4gVXBkYXRlZCBgYXMoKWAgdG8gdGFrZSBhIHZhciBhcmdzIG9mIGxhYmVscy4KLSogRHJvcHBlZCBgQmF0Y2hHcmFwaGAgZnJvbSB0aGUgY29kZSBiYXNlIC0gaXQgd2lsbCBiZSByZXBsYWNlZCBieSBidWxrIGxvYWRlciBmdW5jdGlvbmFsaXR5IG92ZXIgT0xBUC4KLSogYFRyYXZlcnNhbFNpZGVFZmZlY3RzYCBub3cgaW1wbGVtZW50cyBgT3B0aW9uYWxgIHNlbWFudGljcy4gTGVzcyBjb2RlIGFzIEphdmE4IHByb3ZpZGVzIHRoZSBoZWxwZXIgbWV0aG9kcy4KLSogYFRyYXZlcnNhbFNjcmlwdFN1cHBsaWVyYCBub3cgdGFrZXMgYW4gYE9iamVjdGAgdmFyIGFyZ3MgZm9yIHNldHRpbmcgYFNjcmlwdEVuZ2luZWAgYmluZGluZ3MgaWYgbmVlZGVkLgotKiBgQ29tcGFyZWAgaXMgbm93IG1vcmUgbGVuaWVudCBvbiBgTnVtYmVyYC10eXBlcy4KLSogUmVtb3ZlZCBgQ29tcGFyZS5pbnNpZGVgIGFuZCBgQ29tcGFyZS5vdXRzaWRlYCBhcyB0aGV5IGFyZSBub3QgcHJpbWl0aXZlIGNvbXBhcmF0b3JzIGFuZCBzaG91bGQgYmUgY29tcG9zZWQgZnJvbSBwcmltaXRpdmVzLgotKiBJbnRyb2R1Y2VkIGBQYCAocHJlZGljYXRlKSBmb3IgY2xlYW5lciBsb29raW5nIGBpcygpYCwgYGhhcygpYCwgYW5kIGB3aGVyZSgpYCBjYWxscyAtLSBlLmcuIGBoYXMoJ2FnZScsZXEoMzIpKWAuCi0qIGBHcmFwaFRyYXZlcnNhbFNvdXJjZWAgaXMgbm93IHRoZSBsb2NhdGlvbiBmb3IgYHdpdGhYWFgoKWAgb3BlcmF0aW9ucy4gTm8gbG9uZ2VyIGRvIHRoZXkgZXhpc3QgYXQgYEdyYXBoVHJhdmVyc2FsYC4KLSogQWxsIGBUcmF2ZXJzZXJgIG9iamVjdHMgbm93IGV4dGVuZCBmcm9tIGBBYnN0cmFjdFRyYXZlcnNlcmAgb3IgYSBjaGlsZCB0aGF0IHVsdGltYXRlbHkgZXh0ZW5kcyBmcm9tIGBBYnN0cmFjdFRyYXZlcnNlcmAuCi0qIE9MVFAgYHNlbGVjdCgpYCBub3cgcmV0dXJucyBhIGxpc3QgZm9yIHRyYXZlcnNhbHMgd2l0aCBkdXBsaWNhdGUgbGFiZWxzIChhcyB0aGlzIHdhcyBhIHVuaW50ZW5kZWQgc2lkZS1lZmZlY3Qgb2YgYFNwYXJzZVBhdGhgKS4KLSogUmVtb3ZlZCB0aGUgYFNwYXJzZVBhdGhgIG9wdGltaXphdGlvbiBhcyBpdCBsZWQgdG8gbnVtZXJvdXMgY29ybmVyLWNhc2UgaW5jb25zaXN0ZW5jaWVzLgotKiBgVmVydGV4V3JpdGFibGVgIHNlcmlhbGl6ZXMgYW5kIGRlc2VyaWFsaXplcyB0aGUgYFN0YXJHcmFwaGAgb2JqZWN0IC0tIG5vIG1vcmUgaW50ZXJtZWRpYXRlIGBEZXRhY2hlZFhYWGAgb2JqZWN0cy4KLSogR3JlbWxpbiBTZXJ2ZXIgYmV0dGVyIHN1cHBvcnRzIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGhpZ2ggYW5kIGxvdyB3YXRlcm1hcmsgdGhhdCB3aWxsIHNsb3cgd3JpdGVzIHRvIGNsaWVudHMgdGhhdCBhcmUgbGFnZ2luZy4KLSogQWRkZWQgYEdyYXBoUmVhZGVyLnJlYWRPYmplY3QoKWAgYW5kIGBHcmFwaFdyaXRlci53cml0ZU9iamVjdGAgYWJzdHJhY3Rpb25zIGZvciB0aG9zZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjYW4gc3VwcG9ydCB0aGVtLgotKiBBbHRlcmVkIGBHcmFwaFdyaXRlci53cml0ZVZlcnRpY2VzKClgIG1ldGhvZCB0byB0YWtlIGFuIGBJdGVyYXRvcmAgb2YgdmVydGljZXMgcmF0aGVyIHRoYW4gYSBgVHJhdmVyc2FsYC4KLSogR3JhcGhTT04gZm9ybWF0IGZvciBvdXRwdXQgZnJvbSBgR3JhcGhXcml0ZXIud3JpdGVWZXJ0ZXhgLCBgR3JhcGhXcml0ZXIud3JpdGVWZXJ0aWNlc2AsIGFuZCBgR3JhcGhXcml0ZXIud3JpdGVHcmFwaGAgaGF2ZSBhbGwgY2hhbmdlZCBub3cgdGhhdCB0aGV5IHVzZSBgU3RhckdyYXBoYCBzZXJpYWxpemF0aW9uLgotKiBHcnlvIGZvcm1hdCBmb3Igb3V0cHV0IGZyb20gYEdyYXBoV3JpdGVyLndyaXRlVmVydGV4YCwgYEdyYXBoV3JpdGVyLndyaXRlVmVydGljZXNgLCBhbmQgYEdyYXBoV3JpdGVyLndyaXRlR3JhcGhgIGhhdmUgYWxsIGNoYW5nZWQgbm93IHRoYXQgdGhleSB1c2UgYFN0YXJHcmFwaGAgc2VyaWFsaXphdGlvbi4KLSogQWRkZWQgcmVhZCBhbmQgd3JpdGUgbWV0aG9kcyB0byBgR3JhcGhSZWFkZXJgIGFuZCBgR3JhcGhXcml0ZXJgIGZvciBgUHJvcGVydHlgIGFuZCBgVmVydGV4UHJvcGVydHlgLgotKiBSZWR1Y2VkIG9iamVjdCBjcmVhdGlvbiBpbiBHcmFwaFNPTiBkdXJpbmcgc2VyaWFsaXphdGlvbi4KLSogTW92ZWQgYFRgIHRva2VucyB0byB0aGUgYHN0cnVjdHVyZS9gIHBhY2thZ2UgYXMgaXRzIG1vcmUgZ2VuZXJhbCB0aGFuIGBwcm9jZXNzL2AuCi0qIGBBdHRhY2hhYmxlLmF0dGFjaCgpYCBub3cgdGFrZXMgYSBgTWV0aG9kYCB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhdHRhY2ggdmlhIGBHRVRgLCBgQ1JFQVRFYCwgb3IgYEdFVF9PUl9DUkVBVEVgLgotKiBEZWNyZWFzZWQgc2l6ZSBvZiBHcmVtbGluIFNlcnZlciBgUmVxdWVzdE1lc3NhZ2VgIGFuZCBgUmVzcG9uc2VNZXNzYWdlYCBzZXJpYWxpemF0aW9uIHBheWxvYWRzIGFuZCByZWR1Y2VkIG9iamVjdCBjcmVhdGlvbi4KLSogYEdyYXBoLmVtcHR5KClgIG5vIGxvbmdlciByZXF1aXJlZCB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYFNoZWxsR3JhcGhgIHdoaWNoIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEgZ3JhcGggY2xhc3MgYW5kIGNvbXB1dGVyLgotKiBgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHlgIGRlZmF1bHQgaXMgbm93IHZlbmRvciBjaG9zZW4uIElmIHRoZSB2ZW5kb3IgaGFzIG5vdCBwcmVmZXJlbmNlLCB0aGV5IHNob3VsZCB1c2UgYENhcmRpbmFsaXR5LnNpbmdsZWAuCi0qIGBNZXNzZW5nZXIucmVjZWl2ZU1lc3NhZ2VzKClgIG5vIGxvbmdlciB0YWtlcyBhIGBNZXNzYWdlU2NvcGVgIGFuZCB0aHVzLCBjb25zaXN0ZW50IGJlaGF2aW9yIGJldHdlZW4gbWVzc2FnZS1wYXNzaW5nIGFuZCBtZXNzYWdlLXB1bGxpbmcgc3lzdGVtcy4KLSogQ2hhbmdlZCB0aGUgYGdyZW1saW4udGVzdHNgIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0ZXN0IGZpbHRlcmluZyB0byB0aGUgbW9yZSBzdGFuZGFyZCBjb252ZW50aW9uIG9mIGBHUkVNTElOX1RFU1RTYCBhbmQgbWFkZSBpdCB3b3JrIGZvciBhbGwgdGVzdCBzdWl0ZXMuCi0qIFJlbW92ZWQgYGJhY2soKWAtc3RlcCBhcyBgc2VsZWN0KClgLXN0ZXAgcHJvdmlkZXMgdGhlIHNhbWUgYmVoYXZpb3Igd2l0aCBtb3JlIGludGVsbGlnZW50IG9wdGltaXphdGlvbnMgYW5kIGBieSgpYC1tb2R1bGF0aW9uLgotKiBSZW1vdmVkIGBHcmFwaC5IZWxwZXJgIG1ldGhvZCBhbm5vdGF0aW9uIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlIGluIHRlc3RzLgotKiBNb2RpZmllZCBoZWFkZXIgb2YgR3J5byB0byBiZSAxNiBieXRlcyBpbnN0ZWFkIG9mIDMyIChhbmQgcmVtb3ZlZCB0aGUgdmVyc2lvbiBzdGFtcCkuCi0qIFJlbW92ZWQgdGhlIGNvbmNlcHQgb2YgaGFuZGxpbmcgdmVyc2lvbiBpbiBHcnlvIHZpYSB0aGUgYnVpbGRlciBhcyBpdCB3YXNuJ3QgcmVhbGx5IGFjY29tcGxpc2hpbmcgdGhlIGNhcGFiaWxpdHkgb2YgZW5zdXJpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLSogTW92ZWQgYEV4Y2VwdGlvbnMucHJvcGVydHlSZW1vdmFsTm90U3VwcG9ydGVkYCBmcm9tIGBFbGVtZW50YCB0byBgUHJvcGVydHlgIGZvciBjb25zaXN0ZW5jeS4KLSogUHJvdmlkZWQgYSBtZXRob2QgZm9yIEdyZW1saW4gU2VydmVyIHRvIGJpbmQgYFRyYXZlcnNhbFNvdXJjZWAgb2JqZWN0cyBmb3IgdXNlIGluIHNjcmlwdHMuCi0qIE1vZGlmaWVkIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIGRlYWxpbmcgd2l0aCAiY3VzdG9tIiBpZGVudGlmaWVyIHNlcmlhbGl6YXRpb24gaW4gR3JhcGhTT04gLSBTZWUgYElvVGVzdC5DdXN0b21JZGAgZm9yIHRoZSBleGFtcGxlLgotKiBNb2RpZmllZCBgZy52ZXJ0aWNlcy9lZGdlc2AgYW5kIHJlbGF0ZWQgbWV0aG9kcyBhbmQgdGVzdHMgdG8gc3VwcG9ydCBub24tdHlwZSBzcGVjaWZpYyBxdWVyeWluZyAoZS5nLiBgZy5WKDEpYCBhbmQgYGcuVigxTClgIHNob3VsZCBib3RoIHJldHVybiB0aGUgc2FtZSByZXN1bHQgbm93KS4KLSogYFRpbmtlckdyYXBoYCBzdXBwb3J0cyBhbiBgSWRNYW5hZ2VyYCB3aGljaCBoZWxwcyBlbmZvcmNlIGlkZW50aWZpZXIgdHlwZXMgYW5kIGltcHJvdmUgZmxleGliaWxpdHkgaW4gdGVybXMgb2YgaG93IGl0IHdpbGwgcmVzcG9uZCB0byBxdWVyaWVzIGFyb3VuZCBpZGVudGlmaWVycy4KLSogYERldGFjaGVkWFhYYCBub3cgdXNlcyB0aGUgc3RhbmRhcmQgYHN0cnVjdHVyZS9gIGV4Y2VwdGlvbnMgZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuCi0qIEFkZGVkIHByaXZhdGUgY29uc3RydWN0b3JzIHRvIGFsbCBgRXhjZXB0aW9uc2AgaW5uZXIgY2xhc3NlcyBpbiB0aGUgcmVzcGVjdGl2ZSBgc3RydWN0dXJlL2AgaW50ZXJmYWNlcy4KLSogUmUtaW50cm9kdWNlZCBgUmVmZXJlbmNlWFhYYCB0byBlbnN1cmUgYSBzbWFsbGVyIGRhdGEgZm9vdHByaW50IGluIE9MQVAgc2l0dWF0aW9uIChgRGV0YWNoZWRYWFhgIHVzZXMgdG9vIG11Y2ggZGF0YSkuCi0qIGBBdHRhY2hhYmxlYCBub3cgaGFzIGEgc2V0IG9mIHN0YXRpYyBleGNlcHRpb24gbWVzc2FnZXMgaW4gYW4gYEV4Y2VwdGlvbnNgIGlubmVyIGNsYXNzLgotKiBBZGRlZCBgU3RhckdyYXBoYCB3aGljaCBpcyBhIGhlYXAgZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGEgdmVydGV4IGFuZCBpdHMgaW5jaWRlbnQgZWRnZXMgKHVzZWZ1bCBmb3IgYEdyYXBoQ29tcHV0ZXJgIGltcGxlbWVudGF0aW9ucykuCi0qIGBUcmF2ZXJzZXJTZXRgIHVzZXMgYSBgRmFzdE5vU3VjaEVsZW1lbnRFeGNlcHRpb25gIG9uIGByZW1vdmUoKWAgZm9yIGluY3JlYXNlZCBwZXJmb3JtYW5jZS4KLSogQWRkIGBQcm9maWxpbmdgIGludGVyZmFjZSB0byBlbmFibGUgdmVuZG9ycyB0byByZWNlaXZlIGEgYFN0ZXAncyBNdXRhYmxlTWV0cmljc2AuCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTAtbTksIDMuMC4wLk05IGNoYW5nZWxvZz4+LgogCiA9PT0gVGlua2VyUG9wIDMuMC4wLk04IChSZWxlYXNlIERhdGU6IEFwcmlsIDYsIDIwMTUpCiAKLSogUmVtb3ZlZCBOZW80ai1HcmVtbGluIGZyb20gdGhpcyBkaXN0cmlidXRpb24gZHVlIHRvIEdQTCBsaWNlbnNpbmcuIFdvcmtpbmcgd2l0aCBOZW80aiB0ZWFtIHRvIHJlaW50cm9kdWNlIGJ5IE05LgotKiBBbHRlcmVkIHN0cnVjdHVyZSBvZiBwbHVnaW4gZGlyZWN0b3JpZXMgZm9yIEdyZW1saW4gU2VydmVyIGFuZCBHcmVtbGluIENvbnNvbGUgdG8gYWxsb3cgZm9yIHRoZSBmdWxsIGBsaWJgIGRpcmVjdG9yeSB3aXRoIGFsbCBkZXBlbmRlbmNpZXMgYW5kIHRoZSBsaWdodGVyIGBwbHVnaW5gIGRpcmVjdG9yeSB3aGljaCBjb250YWlucyBmaWx0ZXJlZCBkZXBlbmRlbmNpZXMgZ2l2ZW4gdGhlIHBhdGguCi0qIEltcHJvdmVkIGBPcHRPdXRgIHRvIGFsbG93IGZvciBleGNsdXNpb24gb2YgYSBncm91cCBvZiB0ZXN0cyBieSBzcGVjaWZ5aW5nIGEgYmFzZSB0ZXN0IGNsYXNzLgotKiBgR3JhcGhDb21wdXRlclRlc3RgIGlzIG5vdyBKYXZhOCBzcGVjaWZpYyBhbmQgbXVjaCBlYXNpZXIgdG8gZXh0ZW5kIHdpdGggbmV3IHRlc3QgY2FzZXMuCi0qIE1lcmdlZCB0aGUgYGdyZW1saW4tYWxnb3JpdGhtYCBtb2R1bGUgaW50byBgZ3JlbWxpbi10ZXN0YC4KLSogUmVtb3ZlZCBgTGFtYmRhVmVydGV4UHJvZ3JhbWAgYW5kIGBMYW1iZGFNYXBSZWR1Y2VgIGFzIGl0IHdpbGwgYmUgb25lIGxlc3MgdGhpbmcgdG8gbWFpbnRhaW4uCi0qIEdyZW1saW4gQ29uc29sZSBhY2NlcHRzIGEgYG1heC1pdGVyYXRpb25gIGNvbmZpZ3VyYXRpb24gdmlhIHRoZSBzdGFuZGFyZCBgOnNldGAgY29tbWFuZCB0byBsaW1pdCByZXN1bHQgaXRlcmF0aW9uLgotKiBgVmVydGV4LnByb3BlcnR5KClgIGRlZmF1bHQgYmVoYXZpb3IgaXMgbm93IGBDYXJkaW5hbGl0eS5zaW5nbGVgLgotKiBBZGRlZCBgRWxlbWVudElkU3RyYXRlZ3lgIGFzIGEgYFRyYXZlcnNhbFN0cmF0ZWd5YC4KLSogSW50cm9kdWNlIGBBYnN0cmFjdFRyYW5zYWN0aW9uYCB0byBzaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiBzdGFuZGFyZCB0cmFuc2FjdGlvbmFsIGZlYXR1cmVzIGZvciB2ZW5kb3JzLgotKiBBZGRlZCBgRXZlbnRTdHJhdGVneWAgdG8gZ2VuZXJhdGUgYEdyYXBoYCBtb2RpZmljYXRpb24gZXZlbnRzIHRvIGxpc3RlbmVycy4KLSogQWRkZWQgdGVzdCB0byBlbmZvcmNlIHJldHVybiBvZiBhbiBlbXB0eSBgUHJvcGVydHlgIG9uIGBWZXJ0ZXhQcm9wZXJ0eS5wcm9wZXJ0eShrKWAgaWYgbm8gbWV0YSBwcm9wZXJ0aWVzIGV4aXN0LgotKiBBZGRlZCBtZXRob2RzIHRvIHJlZ2lzdGVyZWQgdHJhbnNhY3Rpb24gY29tcGxldGlvbiBsaXN0ZW5lcnMgb24gYFRyYW5zYWN0aW9uYCBhbmQgcHJvdmlkZWQgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgotKiBGaXhlZCBidWcgaW4gTmVvNGogd2hlcmUgcmV0dXJuIG9mIGFuIGVtcHR5IG1ldGEgcHJvcGVydHkgd2FzIHJldHVybmluZyBhIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAuCi0qIFJlZmFjdG9yZWQgc3RlcCBBUEkgLS0gdGhlIFRpbmtlclBvcDMgc3RlcHMgYXJlIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZG9tYWluIHNwZWNpZmljIGxhbmd1YWdlIChpbmNsdWRpbmcgZ3JhcGgpLgotKiBgTWFwUmVkdWNlYCBub3cgaGFzIGB3b3JrZXJTdGFydChTdGFnZSlgIGFuZCBgd29ya2VyRW5kKFN0YWdlKWAgbWV0aG9kcyB3aXRoIGFuYWxhZ291cyBzZW1hbnRpY3MgdG8gYFZlcnRleFByb2dyYW1gLgotKiBIYWRvb3AtR3JlbWxpbiBgT2JqZWN0V3JpdGFibGVgIG5vdyBsZXZlcmFnZXMgS3J5byBmb3IgZGF0YSBzZXJpYWxpemF0aW9uLgotKiBgR2lyYXBoR3JhcGhDb21wdXRlcmAgc3VwcG9ydHMgYXJiaXRyYXJ5IG9iamVjdHMgYXMgdGhlIHZlcnRleCBpZCAtLSBwcmV2aW91c2x5LCBvbmx5IGxvbmcgaWRzIHdlcmUgc3VwcG9ydGVkLgotKiBBZGRlZCBgVmVydGV4UHJvZ3JhbVBvb2xgIHRvIHN1cHBvcnQgdGhyZWFkIHNhZmUgcG9vbGluZyBvZiB2ZXJ0ZXggcHJvZ3JhbXMgZm9yIGdyYXBoIGNvbXB1dGVycyB0aGF0IHByb3ZpZGUgdGhyZWFkZWQgd29ya2Vycy4KLSogQWRkZWQgYEdyeW9Qb29sYCB0byBzdXBwb3J0IHRocmVhZCBzYWZlIHBvb2xpbmcgb2YgR3J5byByZWFkZXJzIGFuZCB3cml0ZXJzLgotKiBBZGRlZCBgVHJhdmVyc2FsU291cmNlYCB3aGljaCBjb250ZXh0dWFsaXplcyBhIHRyYXZlcnNhbCB0byBhIGdyYXBoLCBEU0wsIGV4ZWN1dGlvbiBlbmdpbmUsIGFuZCBydW50aW1lIHN0cmF0ZWdpZXMuCi0qIEFkZGVkIGBBZGRWZXJ0ZXhTdGVwYCAoYGFkZFZgKSwgYEFkZFByb3BlcnR5U3RlcGAgKGBwcm9wZXJ0eWApLCBhbmQgY2hhbmdlZCBgQWRkRWRnZVN0ZXBgIHRvIGEgbWFwLXN0ZXAgaW5zdGVhZCBvZiBhIHNpZGVFZmZlY3Qtc3RlcC4KLSogQWRkZWQgYGNvbXBpbGVgIG1ldGhvZCB0byBgR3JlbWxpbkV4ZWN1dG9yYCBhbmQgcmVsYXRlZCBjbGFzc2VzLgotKiBGaXhlZCBidWcgaW4gR3JlbWxpbiBTZXJ2ZXIgdGhhdCB3YXMgZ2VuZXJhdGluZyBleHRyYSByZXNwb25zZSBtZXNzYWdlcyBvbiBzY3JpcHQgZXZhbHVhdGlvbiBlcnJvcnMuCi0qIENoYW5nZWQgdGhlIGBNZW1vcnlgIEFQSSB0byBub3QgcmV0dXJuIHRoZSBtdXRhdGVkIHZhbHVlIG9uIGBvcmAsIGBhbmRgLCBgaW5jcmAgYXMgaXQgaXMgdG9vIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQgZmFpdGhmdWxseSBpbiBhIGRpc3RyaWJ1dGVkIHN5c3RlbS4KLSogQWRkZWQgYFNwYXJrR3JhcGhDb21wdXRlcmAgdG8gSGFkb29wLUdyZW1saW4gd2hpY2ggdXNlcyBBcGFjaGUgU3BhcmsgYXMgdGhlIHVuZGVybHlpbmcgY29tcHV0aW5nIGVuZ2luZS4KLSogUmVuYW1lZCAiR3JlbWxpbiBLcnlvIiB0byAiR3J5byIuCi0qIFJlZmFjdG9yZWQgYFRpbmtlcldvcmtlclBvb2xgIHRvIHVzZSBgRXhlY3V0b3JTZXJ2aWNlYCBzbyBhcyB0byByZXVzZSB0aHJlYWRzIHdoZW4gZXhlY3V0aW5nIGdyYXBoIGNvbXB1dGVyIGZ1bmN0aW9ucy4KLSogUmVtb3ZlZCBgUmVkdWNpbmcuUmVkdWNlcmAgYW5kIGBSZWR1Y2luZ1N0cmF0ZWd5YC4gUHJldmlvdXMgYFJlZHVjaW5nYCBjbGFzc2VzIGFyZSBub3cgYE1hcFJlZHVjZXJgIGNsYXNzZXMuCi0qIFJlZmFjdG9yZWQgdGhlICJwcm9jZXNzIiB0ZXN0IHN1aXRlIHRvIGFsbG93IGZvciBiZXR0ZXIgdGVzdCBjb25maWd1cmF0aW9uIHdpdGggcmVzcGVjdCB0byBkaWZmZXJlbnQgYFRyYXZlcnNhbEVuZ2luZWAgaW1wbGVtZW50YXRpb25zLgotKiBBZGRlZCBgaGFzTm90KHRyYXZlcnNhbClgIHdoaWNoIGlzIGEgZmFzdGVyIHdheSBvZiBkb2luZyBgaGFzKHRyYXZlcnNhbC5jb3VudCgpLmlzKDBMKSlgLgotKiBgVHJhdmVyc2FsU3RyYXRlZ3kuYXBwbHkodHJhdmVyc2FsKWAgaXMgdGhlIG5ldyBtZXRob2Qgc2lnbmF0dXJlIGFzIHRoZSBgVHJhdmVyc2FsRW5naW5lYCBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIGBUcmF2ZXJzYWxgLgotKiBgVHJhdmVyc2FsRW5naW5lYCBpcyBub3cgYW4gaW50ZXJmYWNlIGFuZCBwcm92aWRlZCB0byB0aGUgdHJhdmVyc2FsIGJ5IHRoZSBncmFwaC4gYEdyYXBoYCBtZXRob2RzIGFkZGVkIHRvIHNldCB0aGUgZGVzaXJlZCB0cmF2ZXJzYWwgZW5naW5lIHRvIHVzZS4KLSogQWRkZWQgYGNvdW50KGxvY2FsKWAsIGBzdW0obG9jYWwpYCwgYG1heChsb2NhbClgLCBgbWluKGxvY2FsKWAsIGBtZWFuKGxvY2FsKWAsIGBkZWR1cChsb2NhbClgLCBgc2FtcGxlKGxvY2FsKWAgYW5kIGByYW5nZShsb2NhbClgIGZvciBvcGVyYXRpbmcgb24gdGhlIGxvY2FsIG9iamVjdCAoZS5nLiBjb2xsZWN0aW9uLCBtYXAsIGV0Yy4pLgotKiBgVHJhdmVyc2FsQ29tcGFyYXRvcmAgZXhpc3RzIHdoaWNoIGFsbG93cyBmb3IgYG9yZGVyKCkuYnkob3V0RSgpLmNvdW50KCksZGVjcilgLgotKiBBZGRlZCBBcGFjaGUgUmF0IHBsdWdpbiB0byBkZXRlY3QgdGhlIHByb3BlciBpbmNsdXNpb24gb2YgbGljZW5zZSBoZWFkZXJzIGluIGZpbGVzLgotKiBBIGBUcmF2ZXJzYWxgIG5vdyByZXNwZWN0cyB0aHJlYWQgaW50ZXJydXB0aW9uIGR1cmluZyBpdGVyYXRpb24sIHRocm93aW5nIGEgYFRyYXZlcnNhbEludGVycnVwdGlvbkV4Y2VwdGlvbmAgaWYgaXQgZW5jb3VudGVycyBpbnRlcnJ1cHRpb24gb24gdGhlIGN1cnJlbnQgdGhyZWFkLgotKiBBcGFjaGUgcmVmYWN0b3Jpbmc6IGBjb20udGlua2VycG9wYCAtPiBgb3JnLmFwYWNoZS50aW5rZXJwb3BgLgotKiBgVHJhdmVyc2FsYCBpcyBub3cgYFNlcmlhbGl6YWJsZWAgYW5kIHdpdGggbW9zdCBxdWVyaWVzIG5vIGxvbmdlciBuZWVkaW5nIGxhbWJkYXMsIEdyZW1saW4tSmF2YSB3b3JrcyBvdmVyIHRoZSB3aXJlLgotKiBBZGRlZCBgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHlgIHdpdGggYGxpc3RgLCBgc2V0YCwgYW5kIGBzaW5nbGVgLiBObyBtb3JlIGBWZXJ0ZXguc2luZ2xlUHJvcGVydHkoKWAgbWV0aG9kLgotKiBBZGRlZCBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAgdGhhdCBhZGRzIGEgYFJhbmdlU3RlcGAgaW4gZnJvbnQgb2YgYC5jb3VudCgpLmlzKDxwcmVkaWNhdGU+LCA8dmFsdWU+KWAgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBmZXRjaGVkIGVsZW1lbnRzLgotKiBBZGRlZCBgQ29hbGVzY2VTdGVwYCAvIGBjb2FsZXNjZSgpYCB0aGF0IGVtaXRzIHRoZSBmaXJzdCB0cmF2ZXJzYWwgd2hpY2ggZW1pdHMgYXQgbGVhc3Qgb25lIGVsZW1lbnQuCi0qIEFkZGVkIG1vcmUgc3ludGFjdGljIHN1Z2FyIHRyaWNrcyB0byB0aGUgR3JlbWxpbiBzdWdhciBwbHVnaW4gLS0gYCZgLCBgfGAsIGBzZWxlY3QgZnJvbWAsIGBndGAsIGV0Yy4KLSogYFRyYXZlcnNhbC5BZG1pbmAgaXMgY29uc2lzdGVudCBpbnRlcm5hbCB0byBzdGVwcywgdHJhdmVyc2Fscywgc3RyYXRlZ2llcywgZXRjLiBGb3IgdGhlIHVzZXIsIGBUcmF2ZXJzYWxgIGlzIGFsbCB0aGV5IHNlZS4KLSogYFRyYXZlcnNhbEhvbGRlcmAgaXMgbm93IGNhbGxlZCBgVHJhdmVyc2FsUGFyZW50YCB3aXRoIHRoZSBjaGlsZC9wYXJlbnQgdGVybWlub2xvZ3kgdXNlZCB0aHJvdWdob3V0LgotKiBBZGRlZCBgR3Jvb3Z5RW52aXJvbm1lbnRQZXJmb3JtYW5jZVN1aXRlYC4KLSogUHJvdmlkZWQgbW9yZSByb2J1c3Qgc2h1dGRvd24gY2FwYWJpbGl0aWVzIGZvciB0aGUgdGhyZWFkIHBvb2xzIHVzZWQgaW4gYEdyZW1saW5FeGVjdXRvcmAuCi0qIEEgbWFzc2l2ZSBgcHJvY2Vzcy9gIHBhY2thZ2UgcmVvcmdhbml6YXRpb24gLS0gY2xhc3MgbmFtZXMgYXJlIHN0aWxsIHRoZSBzYW1lLCBqdXN0IGluIG5ldyBwYWNrYWdlcy4KLSogQnVtcGVkIGBuZW80ai1ncmFwaGAgdG8gTmVvNGogMi4xLjYuCi0qIEJ1bXBlZCB0byBHcm9vdnkgMi40LjEuCi0qIEFkZGVkIGEgbmV3ICJwZXJmb3JtYW5jZSIgdGVzdCBzdWl0ZSBmb3IgR3JlbWxpbiBQcm9jZXNzLgotKiBTdGVwcyBub3cgb25seSBvcGVyYXRlIHdpdGggdHJhdmVyc2FscyAtLSBubyBtb3JlIGxhbWJkYXMuIExhbWJkYS0+IGBUcmF2ZXJzYWxgIGNvbnZlcnNpb24gdXRpbGl0aWVzIGFkZGVkLgotKiBgU2lkZUVmZmVjdFN0ZXBgIGFsd2F5cyByZXF1aXJlcyBhIGBDb25zdW1lcmAuIFN0ZXBzIHRoYXQgd2VyZSBjb25zdW1lci1sZXNzIHNpbXBseSBleHRlbmRzIGBBYnN0cmFjdFN0ZXBgLgotKiBTaW1wbGlmaWVkIHRoZSBgTmVvNGpHcmFwaGAgaW1wbGVtZW50YXRpb24gYnkgbm93IGFsbG93aW5nIGBjeXBoZXIoKWAgbWlkLXRyYXZlcnNhbC4gT25seSBhdmFpbGFibGUgdmlhIGBnLmN5cGhlcigpYC4KLSogTW92ZWQgYGNsb2NrKClgIG91dCBvZiB0aGUgVXRpbGl0eSBwbHVnaW4uIEl0IGlzIG5vdyBhdmFpbGFibGUgdG8gYm90aCBHcm9vdnkgYW5kIEphdmEuCi0qIENoYW5nZWQgdGhlIGBPcHRPdXRgIGFubm90YXRpb24gdG8gYWxsb3cgZm9yIGlnbm9yaW5nIGFuIGVudGlyZSB0ZXN0IGNhc2UgdXNpbmcgYSB3aWxkY2FyZC4KLSogQWRkZWQgYEFuZFN0ZXBgIGFuZCBgT3JTdGVwYCBmaWx0ZXJzIHRvIHN1cHBvcnQgYXJiaXRyYXJ5IGNvbmp1bmN0aW9uIG9mIHRyYXZlcnNhbHMuCi0qIGBfX2AgaXMgbm93IGEgY2xhc3Mgd2l0aCBzdGF0aWMgYEdyYXBoVHJhdmVyc2FsYCBtZXRob2RzIGFuZCB0aHVzIGByZXBlYXQob3V0KCkpYCBpcyBwb3NzaWJsZS4KLSogQWRkZWQgYElzU3RlcGAgLyBgLmlzKClgIHRoYXQgc3VwcG9ydHMgZmlsdGVyaW5nIHNjYWxhciB2YWx1ZXMuCi0qIGBOZW80akdyYXBoYCBhbmQgYFRpbmtlckdyYXBoYCBubyBsb25nZXIgY3JlYXRlIG5ldyBgRmVhdHVyZWAgaW5zdGFuY2VzIG9uIGVhY2ggZmVhdHVyZSBjaGVjay4KLSogQWRkZWQgYENvbXBhcmUuaW5zaWRlYCBhbmQgYENvbXBhcmUub3V0c2lkZWAgZm9yIHRlc3RpbmcgcmFuZ2VzLiBSZW1vdmVkIGBiZXR3ZWVuKClgIGFzIG5vdyBpdHMgYGhhcygnYWdlJyxpbnNpZGUsWzEwLDMwXSlgLgotKiBgR3JhcGhUcmF2ZXJzYWwuaGFzKClgIG5vIGxvbmdlciByZXF1aXJlcyB0aGUgZWxlbWVudCB0eXBlIHRvIGJlIGNhc3QgaW4gdGhlIHRyYXZlcnNhbCBkZWZpbml0aW9uLgotKiBGaXhlZCBhIGBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uYCBidWcgaW4gVGlua2VyR3JhcGggdGhhdCBvY2N1cnJlZCB3aGVuIGRvaW5nIGZ1bGwgdmVydGV4L2VkZ2Ugc2NhbnMgYW5kIHJlbW92aW5nIGVsZW1lbnRzIGFsb25nIHRoZSB3YXkuCi0qIEFkZGVkIGBTY29wZS5sb2NhbGAgYW5kIGBTY29wZS5nbG9iYWxgIGluIHN1cHBvcnQgb2YgYE9yZGVyTG9jYWxTdGVwYCBhbmQgYE9yZGVyR2xvYmFsU3RlcGAgdmlhIGBvcmRlcihzY29wZSlgLgotKiBBZGRlZCBgT3JkZXIua2V5SW5jcmAsIGBPcmRlci5rZXlEZWNyYCwgYE9yZGVyLnZhbHVlSW5jcmAsIGFuZCBgT3JkZXIudmFsdWVEZWNyYCBpbiBzdXBwb3J0IG9mIGBNYXBgIHNvcnRpbmcuCi0qIEFkZGVkIGBPcmRlci5zaHVmZmxlYCBhbmQgcmVtb3ZlZCBgc2h1ZmZsZSgpYCBpbiBmYXZvciBvZiBgb3JkZXIoKS5ieShzaHVmZmxlKWAuCi0qIENoYW5nZWQgYE9yZGVyIGltcGxlbWVudHMgQ29tcGFyYXRvcjxDb21wYXJhYmxlPmAgdG8gYE9yZGVyIGltcGxlbWVudHMgQ29tcGFyYXRvcjxPYmplY3Q+YCBhcyBpdHMgbm93IGdlbmVyYWxpemVkIHRvIG11bHRpcGxlIHR5cGVzIG9mIG9iamVjdHMuCi0qIFRoZSBgbWF4Q29udGVudExlbmd0aGAgc2V0dGluZyBpbiBHcmVtbGluIFNlcnZlciBpcyBub3cgcmVzcGVjdGVkIGJ5IHRoZSBIVFRQL1JFU1QgR3JlbWxpbiBlbmRwb2ludC4KLSogRml4ZWQgcmVzb3VyY2UgbGVhayBpbiB0aGUgSFRUUC9SRVNUIEdyZW1saW4gZW5kcG9pbnQgb2YgR3JlbWxpbiBTZXJ2ZXIuCi0qIFJlZmFjdG9yZWQgR3JlbWxpbiBTZXJ2ZXIgYHN0YXJ0YCBhbmQgYHN0b3BgIGZ1bmN0aW9ucyB0byByZXR1cm4gYENvbXBsZXRhYmxlRnV0dXJlYC4KLSogSFRUUCBSRVNUIGVycm9yIHJlc3BvbnNlIEpTT04gb2JqZWN0cyBmcm9tIEdyZW1saW4gU2VydmVyIHNob3VsZCBubyBsb25nZXIgaGF2ZSBpc3N1ZXMgd2l0aCBjb250cm9sIGNoYXJhY3RlcnMsIGxpbmUgZmVlZHMsIGV0Yy4KLSogQWRkZWQgYE1lYW5TdGVwYCwgYG1lYW4oKWAsIGFuZCBgTWVhbk51bWJlcmAgZm9yIGNhbGN1bGF0aW5nIG51bWJlciBhdmVyYWdlcyBpbiBhIHRyYXZlcnNhbC4KLSogR3JlYXRseSBzaW1wbGlmaWVkIGFsbCB0aGUgdHJhdmVyc2FsIGBNYXBSZWR1Y2VgIGltcGxlbWVudGF0aW9ucyBkdWUgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBgVmVydGV4VHJhdmVyc2FsU2lkZUVmZmVjdHNgLgotKiBBZGRlZCBgVmVydGV4VHJhdmVyc2FsU2lkZUVmZmVjdHNgIGFzIGEgY2hlYXAsIHN0YXRpYyB3YXkgdG8gZ2V0IGEgc2lkZUVmZmVjdC12aWV3IG9mIGEgdmVydGV4IGluIE9MQVAuCi0qIEFkZGVkIGBUcmF2ZXJzYWxIZWxwZXIuaXNMb2NhbFN0YXJHcmFwaCgpYCB3aGljaCBkZXRlcm1pbmVzIGlmIGEgdHJhdmVyc2FsIGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGxvY2FsIHN0YXIgZ3JhcGguCi0qIEFkZGVkIGBUcmF2ZXJzYWxWZXJpZmljYXRpb25TdHJhdGVneWAgdG8gdmVyaWZ5IGlmIHRoZSB0cmF2ZXJzYWwgY2FuIGJlIGV4ZWN1dGVkIG9uIHJlc3BlY3RpdmUgZW5naW5lLgotKiBSZWZhY3RvcmVkIGBHcmFwaFRyYXZlcnNhbC5jYXAoKWAgdG8gYEdyYXBoVHJhdmVyc2FsLmNhcChTdHJpbmcuLi4pYCB0byBzdXBwb3J0IG11bHRpLXNpZGVFZmZlY3QgZ3JhYnMuCi0qIEFkZGVkIEdyYXBoU09OIHNlcmlhbGl6YXRpb24gZm9yIGBQYXRoYC4KLSogQWRkZWQgYFRyYXZlcnNhbC5BZG1pbi5nZXRUcmF2ZXJzZXJSZXF1aXJlbWVudHMoKWAgYW5kIHJlbW92ZWQgYFRyYXZlcnNhbEhlbHBlci5nZXRUcmF2ZXJzZXJSZXF1aXJlbWVudHMoVHJhdmVyc2FsKWAuCi0qIGBUcmF2ZXJzYWwuZXF1YWxzKClgIGlzIG5vIGxvbmdlciBjb21wdXRlZCBieSBkZXRlcm1pbmluZyBpZiB0aGUgb2JqZWN0cyByZXR1cm5lZCBhcmUgZXF1YWwuCi0qIEFsdGVyZWQgbWVzc2FnaW5nIGluIEdyZW1saW4gQ29uc29sZSB3aGVuIHVzaW5nIGEgcmVtb3RlIHRoYXQgaXMgbm90IHlldCBhY3RpdmF0ZWQuCi0qIEZpeGVkIHBvdGVudGlhbCBmb3IgZGVhZGxvY2sgaW4gR3JlbWxpbiBEcml2ZXIgd2hlbiB3YWl0aW5nIGZvciByZXN1bHRzIGZyb20gdGhlIHNlcnZlci4KLSogQWRkZWQgdGhlIGB1c2VNYXBwZXJGcm9tR3JhcGhgIHNlcmlhbGl6ZXIgb3B0aW9uIHRvIHRoZSBHcmVtbGluIFNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUgdG8gYWxsb3cgYXV0by1yZWdpc3RyYXRpb24gb2Ygc2VyaWFsaXphdGlvbiBjbGFzc2VzLgotKiBSZWZhY3RvcmVkIE5ldHR5IHBpcGVsaW5lIHN0cnVjdHVyZSB0byBub3QgaGF2ZSBhIHNlY29uZCAiR3JlbWxpbiIgZXhlY3V0b3IgZ3JvdXAgYW5kIGluc3RlYWQgdXNlZCBhIHN0YW5kYXJkIGBFeGVjdXRvclNlcnZpY2VgLgotKiBSZWZhY3RvcmVkIHRoZSBgR3JlbWxpbkV4ZWN1dG9yYCB0byB0YWtlIGFuIG9wdGlvbmFsIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHNvIGFzIHRvIGFsbG93IG1hbmlwdWxhdGlvbiBvZiByZXN1bHRzIGZyb20gYGV2YWxgIGluIHRoZSBzYW1lIHRocmVhZCBvZiBleGVjdXRpb24uCi0qIEZpeGVkIGlzc3VlIHdpdGggdGhlIGBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcmAgd2hlcmUgcmVxdWVzdHMgd2VyZSBnZXR0aW5nIGJsb2NrZWQgd2hlbiBga2VlcC1hbGl2ZWAgd2FzIG9uLgotKiBBZGRlZCBgTWluU3RlcGAgYW5kIGBNYXhTdGVwYCB3aXRoIHJlc3BlY3RpdmUgYG1pbigpYCBhbmQgYG1heCgpYC4KLSogYENvdW50U3RlcGAgYW5kIGBTdW1TdGVwYCBub3cgZXh0ZW5kIGBSZWR1Y2luZ0JhcnJpZXJTdGVwYCBhbmQgbm8gbG9uZ2VyIGFyZSBzaWRlRWZmZWN0IHN0ZXBzLgotKiBgU2lkZUVmZmVjdENhcFN0ZXBgIG5vdyBleHRlbmRzIGBTdXBwbHlpbmdCYXJyaWVyYCBhbmQgaXMgbXVjaCBzaW1wbGVyIHRoYW4gYmVmb3JlLgotKiBBZGRlZCBgU3VwcGx5aW5nQmFycmllcmAgd2hpY2ggc2ltcGx5IGRyYWlucyB0aGUgdHJhdmVyc2FsIGFuZCBlbWl0cyB0aGUgdmFsdWUgb2YgYSBwcm92aWRlZCBzdXBwbGllci4KLSogQWRkZWQgYFRyYXZlcnNhbExhbWJkYWAgd2hpY2ggaW1wbGVtZW50cyBmdW5jdGlvbiwgcHJlZGljYXRlLCBhbmQgY29uc3VtZXIgb3ZlciBhIHByb3ZpZGVkIHRyYXZlcnNhbC4KLSogQW55IG5vbi1jb3JlIGBTdGVwYCB0aGF0IHRha2VzIGEgZnVuY3Rpb24gb3IgcHJlZGljYXRlIGNhbiBub3cgdGFrZSBhIHRyYXZlcnNhbCB3aGljaCBtYXBzIHRvIGB0cmF2ZXJzYWwubmV4dCgpYCAoZnVuY3Rpb24pIGFuZCBgdHJhdmVyc2FsLmhhc05leHQoKWAgKHByZWRpY2F0ZSkuCi0qIGBDb2xsZWN0aW5nQmFycmllclN0ZXBgIGlzIG5vIGxvbmdlciBhYnN0cmFjdCBhbmQgYWRkZWQgYEdyYXBoVHJhdmVyc2FsLmJhcnJpZXIoKWAgd2hpY2ggaXMgYW5hbG9nb3VzIHRvIGBmb2xkKCkudW5mb2xkKClgLCB0aG91Z2ggY2hlYXBlci4KLSogQWRkZWQgYFRyYXZlcnNhbE9wdGlvbkhvbGRlcmAgZm9yIGJyYW5jaGluZyBzdGVwcyB0byBpbmRleCB3b3JrcyB3aXRoIGNvcnJlc3BvbmRpbmcgYEdyYXBoVHJhdmVyc2FsLm9wdGlvbigpYC4KLSogYEJyYW5jaFN0ZXBgIGlzIG5vdyBhIHByb3BlciBnZW5lcmFsaXphdGlvbiBvZiBgVW5pb25TdGVwYCBhbmQgYENob29zZVN0ZXBgLgotKiBgU3ViZ3JhcGhTdGVwYCBoYXMgY2hhbmdlZCBpbiBzdXBwb3J0IG9mIGluLXRyYXZlcnNhbCBmaWx0ZXJpbmcgYW5kIHJlbW92aW5nIHRoZSBuZWVkIGZvciBwYXRoLWJhc2VkIHRyYXZlcnNlcnMuCi0qIEFkZGVkIGBIYXNUcmF2ZXJzYWxTdGVwYCB3aGljaCB0YWtlcyBhbiBhbm9ueW1vdXMgdHJhdmVyc2FsIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBmaWx0ZXIgdGhlIGN1cnJlbnQgb2JqZWN0LgotKiBBZGRlZCBgVHJhdmVyc2FsLkFkbWluLmdldFN0YXJ0U3RlcCgpYCBhbmQgYFRyYXZlcnNhbC5BZG1pbi5nZXRFbmRTdGVwKClgLiBSZW1vdmVkIGBUcmF2ZXJzYWxIZWxwZXIuZ2V0U3RhcnQoKWAgYW5kIGBUcmF2ZXJzYWxIZWxwZXIuZ2V0RW5kKClgLgotKiBSZWZhY3RvcmVkIGBwcm9maWxlKClgIHRvIHVzZSBpbmplY3RlZCBzdGVwcy4gYFByb2ZpbGVTdGVwYCBjYW4gbm93IGJlIHVzZWQgd2l0aG91dCBhbnkgc3BlY2lhbCBKVk0gY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMuCi0qIEFkZGVkIGBSZWR1Y2luZ0JhcnJpZXJTdGVwYCB3aGljaCBhY3RzIGxpa2UgYENvbGxlY3RpbmdCYXJyaWVyU3RlcGAgYnV0IG9wZXJhdGVzIG9uIGEgc2VlZCB3aXRoIGEgYmktZnVuY3Rpb24uCi0qIEFkZGVkIGEgcHJlcHJvY2Vzc29yIGZvciBBc2NpaURvY3MuIERvY3VtZW50YXRpb24gY29kZSBleGFtcGxlcyBhcmUgZXhlY3V0ZWQgYW5kIHRoZSByZXN1bHRzIGFyZSBkeW5hbWljYWxseSBpbnNlcnRlZCBpbnRvIHRoZSBkb2MgZmlsZS4KLSogYExvY2FsU3RlcGAgdHJhdmVyc2FsIGlzIHRyZWF0ZWQgYXMgYSBicmFuY2gsIG5vdCBhbiBpc29sYXRlZCB0cmF2ZXJzYWwuIE1vcmVvdmVyLCBtb3ZlZCBgTG9jYWxTdGVwYCB0byBgYnJhbmNoL2AuCi0qIFRyYXZlcnNhbCBzdHJhdGVnaWVzIGFyZSBub3cgYXBwbGllZCB3aGVuIHRoZSBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgc3RhdGUgaXMgbG9hZGVkLCBub3Qgd2hlbiBzdWJtaXR0ZWQuIExlc3MgZXJyb3IgcHJvbmUgYXMgaXQgZ3VhcmFudGVlcyBzdHJhdGVneSBhcHBsaWNhdGlvbi4KLSogUmV3b3JrZWQgYFRyYXZlcnNhbEhvbGRlcmAgd2hlcmUgdGhlcmUgYXJlICJsb2NhbCB0cmF2ZXJzYWxzIiBhbmQgImdsb2JhbCB0cmF2ZXJzYWxzIi4gTG9jYWwgdHJhdmVyc2FscyBhcmUgbm90IHN1YmplY3QgdG8gT0xBUCBtZXNzYWdlIHBhc3NpbmcuCi0qIEZpeGVkIGEgYnVnIGluIGBEZWR1cFN0ZXBgIHRoYXQgbWFkZSBpdHNlbGYgYXBwYXJlbnQgaW4gYERlZHVwT3B0aW1pemVyU3RyYXRlZ3lgLgotKiBBZGRlZCBgUmVwZWF0U3RlcC5SZXBlYXRFbmRTdGVwYCBpbiBvcmRlciB0byByZWR1Y2UgdGhlIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUgb24gT0xBUCB3aGVuIHRoZSBwcmVkaWNhdGVzIGFyZSBub3QgYXQgdGhlIHN0YXJ0IG9mIGBSZXBlYXRTdGVwYC4KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4wLnguYXNjaWlkb2MjcmVsZWFzZS0zLTAtMC1tOCwgMy4wLjAuTTggY2hhbmdlbG9nPj4uCiAKID09PSBUaW5rZXJQb3AgMy4wLjAuTTcgKFJlbGVhc2UgRGF0ZTogSmFudWFyeSAxOSwgMjAxNSkKIAotKiBBZGRlZCBgU2lkZUVmZmVjdFJlZ2lzdHJhcmAgaW50ZXJmYWNlIGFuZCBgU2lkZUVmZmVjdFJlZ2lzdHJhdGlvblN0cmF0ZWd5YCBmb3IgYWxsb3dpbmcgc3RlcHMgdG8gcmVnaXN0ZXIgc2lkZUVmZmVjdHMgYXQgc3RyYXRlZ3kgYXBwbGljYXRpb24gdGltZS4KLSogUmVuYW1lZCBgVHJhdmVyc2VyLkFkbWluLnNldEZ1dHVyZSgpYCBhbmQgYFRyYXZlcnNlci5BZG1pbi5nZXRGdXR1cmUoKWAgdG8gYHNldFN0ZXBJZCgpYCBhbmQgYGdldFN0ZXBJZCgpYCwgcmVzcGVjdGl2ZWx5LgotKiBBZGRlZCBgVHJhdmVyc2FsTWF0cml4YCBmb3IgcmFuZG9tIGFjY2VzcyB0byBzdGVwcyBpbiBhIHRyYXZlcnNhbCBieSB0aGVpciBzdGVwIGlkLiBVc2VkIGJ5IGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYC4KLSogQWRkZWQgdW5pcXVlIGlkZW50aWZpZXMgdG8gYFN0ZXBgIHRoYXQgYXJlIG5vdCB0aGUgdXNlciBwcm92aWRlZCBsYWJlbHMuIGBTdGVwLmdldExhYmVsKClgIG5vdyByZXR1cm5zIGFuIGBPcHRpb25hbDxTdHJpbmc+YC4KLSogUmVtb3ZlZCBgVW5pb25MaW5lYXJTdHJhdGVneWAsIGBDaG9vc2VMaW5lYXJTdHJhdGVneWAsIGFuZCBgUmVwZWF0TGluZWFyU3RyYXRlZ3lgIGFzIG5lc3RlZCB0cmF2ZXJzYWxzIGFyZSBub3cgbmF0aXZlbHkgc3VwcG9ydGVkIGluIE9MQVAuCi0qIEZpeGVkIGBOZW80akdyYXBoYCBhcm91bmQgbWFudWFsIHRyYW5zYWN0aW9uIGJlaGF2aW9yIG9uIGBjb21taXRgIGFuZCBgcm9sbGJhY2tgIHN1Y2ggdGhhdCB0aGV5IHdvdWxkIHRocm93IGV4Y2VwdGlvbnMgaWYgYSB0cmFuc2FjdGlvbiB3YXMgbm90IG9wZW4uCi0qIFJlZGVzaWduZWQgdGhlIGhpZGRlbiBzdGVwIGxhYmVsaW5nIG1lY2hhbmlzbSBzbyBpdHMgY29uc2lzdGVudCBhY3Jvc3MgYSBjbHVzdGVyLCBlYXNpZXIgZm9yIHJld3JpdGUgc3RyYXRlZ2llcywgYW5kIHdpbGwgZW5hYmxlIG5lc3RlZCBPTEFQIHRyYXZlcnNhbHMuCi0qIGBUcmF2ZXJzZXIuaW5jckxvb3BzKClgIG5vdyB0YWtlcyBhIHN0cmluZyBzdGVwIGxhYmVsIHRvIGVuYWJsZSBuZXN0ZWQgbG9vcGluZyBjb25zdHJ1Y3RzIChpLmUuIGxvb3Agc3RhY2tzKS4KLSogQWRkZWQgYFRyYXZlcnNhbC50cnlOZXh0KClgIHdoaWNoIHJldHVybnMgYW4gYE9wdGlvbmFsYCwgd2hlcmUgdGhlIHByb3ZpZGVkIGRlZmF1bHQgbWV0aG9kIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbGwgdmVuZG9ycy4KLSogUmVtb3ZlZCBgUGF0aENvbnN1bWVyYCBpbiBmYXZvciBvZiBgVHJhdmVyc2VyUmVxdWlyZW1lbnQuUEFUSGAtbW9kZWwgdmlhIGBTdGVwLmdldFJlcXVpcmVtZW50cygpYC4KLSogYFN0ZXAuZ2V0UmVxdWlyZW1lbnRzKClgIHJldHVybnMgYSBgU2V0PFRyYXZlcnNlclJlcXVpcmVtZW50PmAgd2hpY2ggaXMgd2hhdCBpcyByZXF1aXJlZCBvZiB0aGUgYFRyYXZlcnNlcmAgYnkgdGhlIGBTdGVwYC4KLSogYFRyYXZlcnNlcmAgbm93IGV4dGVuZHMgYENsb25lYWJsZWAgYW5kIGBUcmF2ZXJzZXIuY2xvbmUoKWAgaXMgdXNlZCB0byBnb29kIGVmZmVjdCBpbiBgVHJhdmVyc2VyLnNwbGl0KClgLgotKiBBZGRlZCBgQWJzdHJhY3RUcmF2ZXJzZXJgIGZvciB3aGljaCBhbGwgdHJhdmVyc2VycyBleHRlbmQuCi0qIE1vdmVkIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgIHRvIGBUcmF2ZXJzYWxTaWRlRWZmZWN0c2AgYXMgc2lkZUVmZmVjdHMgYXJlIG5vdCBuZWNlc3NhcmlseSB0aWVkIHRvIHRoZSB0cmF2ZXJzYWwuCi0qIFJlbW92ZWQgYEdyYXBoLm9mKClgIGZvciBnZW5lcmF0aW5nIGFub255bW91cyBncmFwaCB0cmF2ZXJzYWxzIC0tIHJlcGxhY2VkIGJ5IGBfX2AtbW9kZWwuCi0qIFJlbW92ZWQgYEdyYXBoYCBiZWluZyBzdG9yZWQgaW4gYFRyYXZlcnNhbC5TaWRlRWZmZWN0c2AuIFRvbyBkYW5nZXJvdXMgd2hlbiBtb3ZpbmcgYmV0d2VlbiBPTFRQIGFuZCBPTEFQIGFuZCBpdHMgbGltaXRlZCB1c2VzIHdlcmUgd29ya2VkIGFyb3VuZCBlYXNpbHkuCi0qIE5vIG5lZWQgZm9yIGBEZWZhdWx0WFhYR3JhcGhUcmF2ZXJzYWxgIHVubGVzcyB0aGUgdmVuZG9yIGlzIGV4dGVuZGluZyB3aXRoIG5ldyBtZXRob2RzIChlLmcuIGBEZWZhdWx0TmVvNGpHcmFwaFRyYXZlcnNhbGApLgotKiBSZXdvcmtlZCBgVHJhdmVyc2FsU3RyYXRlZ2llc2Agc3VjaCB0aGF0IHRoZSBhcmUgImVtYW5hdGluZyBvYmplY3QgY2xhc3MiLWRlcGVuZGFudCwgbm90IGBUcmF2ZXJzYWxgIGRlcGVuZGVudC4KLSogTW92ZWQgYFRyYXZlcnNlci5zaWRlRWZmZWN0cygpYCB0byBgVHJhdmVyc2VyLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpYC4gVXNlcnMgc2hvdWxkIHVzZSBgVHJhdmVyc2VyLnNpZGVFZmZlY3RzKGtleSlgIGFuZCBgVHJhdmVyc2VyLnNpZGVFZmZlY3RzKGtleSx2YWx1ZSlgLgotKiBBZGRlZCBgU2VyaWFsaXphdGlvblRlc3RgIHRvIHRoZSBgU3RydWN0dXJlU3RhbmRhcmRTdWl0ZWAgaW4gYGdyZW1saW4tdGVzdGAgd2hpY2ggdmFsaWRhdGVzIHNlcmlhbGl6YXRpb24gYXQgYSBsb3dlciBsZXZlbCB0aGFuIGBJb1Rlc3RgLgotKiBSZW1vdmVkIGBJbnRlcnZhbFN0ZXBgIGFuZCByZW5hbWVkIGBpbnRlcnZhbCgpYCB0byBgYmV0d2VlbigpYCB3aGljaCBpcyBzaW1wbHkgYW4gYWxpYXMgdG8gYSBgaGFzKCkuaGFzKClgIGNoYWluLgotKiBBZGRlZCBgX19gIHN0YXRpYyBpbnRlcmZhY2Ugd2hpY2ggYWxsb3dzIGZvciBgX18ub3V0KCkub3V0KClgLXN0eWxlIGNvbnN0cnVjdGlvbiBvZiBhbm9ueW1vdXMgdHJhdmVyc2FscyAoaW5zdGVhZCBvZiBgZy5vZigpYCkuCi0qIFRoZSBvbmx5IGBHcmFwaFRyYXZlcnNhbGAgc3RlcHMgdGhhdCBvcGVyYXRlIG9uIGBUcmF2ZXJzZXJgIGFyZSB0aGUgYmFzZSBsYW1iZGFzIGFuZCBgcmVwZWF0KClgIChpLmUuIGBlbWl0KClgIGFuZCBgdW50aWwoKWApLgotKiBSZW1vdmVkIGRlcGVuZGVuY3kgb24gdGhlIGByZWZsZWN0aW9uc2AgbGlicmFyeSBpbiBgZ3JlbWxpbi10ZXN0YCB3aGljaCByZW1vdmVkIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGBHcmFwaFByb3ZpZGVyLmdldEltcGxlbWVudGF0aW9ucygpYCAtIHZlbmRvcnMgbm93IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kIHRoZW1zZWx2ZXMuCi0qIFJlbGF4ZWQgdGhlIGA8Uz5gIHR5cGluZyByZXF1aXJlbWVudCBmb3IgYW5vbnltb3VzIHRyYXZlcnNhbHMgd2hlbiBhcHBsaWVkIHRvIGBjaG9vc2UoKWAsIGByZXBlYXQoKWAsIGB1bmlvbigpYCwgZXRjLgotKiBSZW1vdmVkIGBMb29wU3RlcGAgYW5kIGBVbnRpbFN0ZXBgIGluIGZhdm9yIG9mIHRoZSBuZXcgYFJlcGVhdFN0ZXBgIG1vZGVsIG9mIGxvb3BpbmcgaW4gR3JlbWxpbjMuCi0qIGBCcmFuY2hTdGVwYCBpcyBub3cgZXhwb3NlZCBpbiBgR3JhcGhUcmF2ZXJzYWxgIHZpYSBgYnJhbmNoKGZ1bmN0aW9uKWAuCi0qIGBVbmlvblN0ZXBgIG5vdyBpbXBsZW1lbnRzIGBUcmF2ZXJzYWxIb2xkZXJgLgotKiBBZGRlZCBgUmVwZWF0U3RlcGAgYXMgdGhlIG5ldyBsb29waW5nIGNvbnN0cnVjdCBzdXBwb3J0aW5nIGRvL3doaWxlLCB3aGlsZS9kbywgYW5kIGVtaXQgc2VtYW50aWNzLgotKiBNb3ZlZCBgVHJhdmVyc2FsLnNpZGVFZmZlY3RzKClgIHRvIGBUcmF2ZXJzYWwuQWRtaW4uZ2V0U2lkZUVmZmVjdHMoKWAgYXMgYGNhcCgpYCBzaG91bGQgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHNpZGVFZmZlY3QgZGF0YSBvZiBhIHRyYXZlcnNhbC4KLSogUmVuYW1lZCB2ZW5kb3IgYFhYWFRyYXZlcnNhbGAgdG8gYFhYWEdyYXBoVHJhdmVyc2FsYCAoaW50ZXJmYWNlKSBhbmQgYFhYWEdyYXBoVHJhdmVyc2FsYCB0byBgRGVmYXVsdFhYWEdyYXBoVHJhdmVyc2FsYCAoaW1wbGVtZW50YXRpb24gY2xhc3MpLgotKiBNb2RpZmllZCBwYWNrYWdpbmcgZm9yIGNvbnNvbGUgcGx1Z2lucyB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYnkgbW92aW5nIHRoZW0gdG8gdGhlIGBjb20udGlua2VycG9wLmdyZW1saW4uY29uc29sZS5ncm9vdnkucGx1Z2luYCBuYW1lc3BhY2UuCi0qIFJlbW92ZWQgYWxsIFRpbmtlclBvcCBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgdG8gR3VhdmEgdG8gYXZvaWQgdXNlciB2ZXJzaW9uIGNvbmZsaWN0cy4KLSogQWRkZWQgc3VwcG9ydCBmb3IgYC1lYCAoc2NyaXB0IGZpbGUgZXhlY3V0aW9uKSBhbmQgYC12YCAodmVyc2lvbiBkaXNwbGF5KSBvcHRpb25zIG9uIGBncmVtbGluLnNoYC4KLSogR3JhcGhTT04gc3VwcG9ydHMgdGhlIGFzc2lnbm1lbnQgb2YgbXVsdGlwbGUgY3VzdG9tIHNlcmlhbGl6YXRpb24gbW9kdWxlcy4KLSogYFRyYXZlcnNlci5nZXQoc3RlcExhYmVsL3NpZGVFZmZlY3RLZXkpYCBubyBsb25nZXIgZXhpc3RzLiBUaGVyZSBub3cgZXhpc3RzOiBgVHJhdmVyc2VyLnBhdGgoc3RlcExhYmVsKWAgYW5kIGBUcmF2ZXJzZXIuc2lkZUVmZmVjdHMoc2lkZUVmZmVjdEtleSlgLgotKiBgU2ltcGxlVHJhdmVyc2VyYCBub3cgc3VwcG9ydHMgInBhdGgiIGJ1dCBpbiBhIHZlcnkgbG9vc2UsIGdsb2JhbCBjYWNoZSB3YXkuIEFkZGVkIGBTcGFyc2VQYXRoYCBhcyBhIGBNYXBgLWJhY2tlZCBgUGF0aGAgaW1wbGVtZW50YXRpb24uCi0qIFByb3ZpZGVkIE5lbzRqIG11bHRpLWxhYmVsIHN1cHBvcnQgaW4gTmVvNGotR3JlbWxpbi4gQWRkZWQgdGhyZWUgYE5lbzRqVmVydGV4YC1zcGVjaWZpYyBtZXRob2RzOiBgYWRkTGFiZWwoKWAsIGByZW1vdmVMYWJlbCgpYCwgYGxhYmVscygpYC4KLSogQnVtcGVkIHRvIEdyb292eSAyLjMuOS4KLSogQWRkZWQgYEdyYXBoLklvYCBpbnRlcmZhY2Ugd2hpY2ggYWxsb3dzIGZvciBzaW1wbGlmaWVkIGhlbHBlciBtZXRob2RzIGZvciBlbmQgdXNlcnMgYW5kIGEgd2F5IGZvciB2ZW5kb3JzIHRvIG92ZXJyaWRlIGBHcmFwaFJlYWRlcmAgYW5kIGBHcmFwaFdyaXRlcmAgaW5pdGlhbCBjb25zdHJ1Y3Rpb24gd2hlbiBjdXN0b20gc2VyaWFsaXplcnMgYXJlIG5lZWRlZC4KLSogUmVtb3ZlZCBtZXRob2RzIGZyb20gYEdyYXBoUHJvdmlkZXJgIHJlbGF0ZWQgdG8gY3VzdG9taXppbmcgc2VyaWFsaXplcnMgaW4gYElvVGVzdGAgZnJvbSB0aGUgdGVzdCBzdWl0ZSBhcyB0aGUgbmV3IGBHcmFwaC5Jb2AgaW50ZXJmYWNlIG5vdyBzZXJ2ZXMgdGhhdCBwdXJwb3NlLgotKiBBZGRlZCBgTmVvNGpHcmFwaC5jaGVja0VsZW1lbnRzSW5UcmFuc2FjdGlvbihib29sZWFuKWAgd2hpY2ggd2lsbCAob3Igbm90KSB2ZXJpZnkgd2hldGhlciBlbGVtZW50cyByZXRyaWV2ZWQgdmlhIE5lbzRqIGdsb2JhbCBncmFwaCBvcGVyYXRpb25zIGFyZSB0cmFuc2FjdGlvbmFsbHkgY29uc2lzdGVudC4KLSogQWRkZWQgYFNjcmlwdElucHV0Rm9ybWF0YCBhbmQgYFNjcmlwdE91dHB1dEZvcm1hdGAgdG8gSGFkb29wLUdyZW1saW4gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgYSBmaWxlIGFjY29yZGluZyB0byBhbiBhcmJpdHJhcnkgcGFyc2luZyBzY3JpcHQuCi0qIEFkZGVkIGBUaW1lTGltaXRTdGVwLmdldFRpbWVkT3V0KClgIHRvIGRldGVybWluZSBpZiB0aGUgc3RlcCB0aW1lZCBvdXQgb3IgdGhlcmUgd2VyZSBubyBtb3JlIG9iamVjdHMgdG8gcHJvY2Vzcy4KLSogYEdyYXBoLlN5c3RlbWAgaXMgbm93IGBHcmFwaC5IaWRkZW5gIHdpdGggImhpZGRlbiIgYmVpbmcgdGhlIHZlbmRvciBuYW1lc3BhY2UgYW5kIHRoZSBrZXkgcHJlZml4IGJlaW5nIGB+YC4KLSogTXVjaCBiZXR0ZXIgYHRvU3RyaW5nKClgIGhhbmRsaW5nIGluIGBTdGVwYCBhbmQgYFRyYXZlcnNhbGAuCi0qIGBDb21wYXJhdG9ySG9sZGVyPFY+YCBpbnRlcmZhY2UgcmV0dXJucyBhIGBMaXN0PENvbXBhcmF0b3I8Vj4+YCBpbnN0ZWFkIG9mIGEgYENvbXBhcmF0b3I8Vj5bXWAuCi0qIGBUYCBub3cgaW1wbGVtZW50cyBgRnVuY3Rpb248RWxlbWVudCxPYmplY3Q+YC4KLSogQWRkZWQgYEVsZW1lbnRWYWx1ZUNvbXBhcmF0b3JgIGFuZCBgRWxlbWVudEZ1bmN0aW9uQ29tcGFyYXRvcmAgaW4gc3VwcG9ydCBvZiB2ZW5kb3IgaW50cm9zcGVjdGlvbiBvbiBgQ29tcGFyYXRvckhvbGRlcmAtc3RlcHMuCi0qIFJlbmFtZWQgYENvbXBhcmluZ2AgbWFya2VyIGludGVyZmFjZSB0byBgQ29tcGFyYXRvckhvbGRlcmAuCi0qIGBGdW5jdGlvbkhvbGRlcmAgaW50ZXJmYWNlIHByb3ZpZGVzIHZlbmRvciBpbnRyb3NwZWN0aW9uIHZpYSBgRWxlbWVudFZhbHVlRnVuY3Rpb25gLgotKiBSZW1vdmVkIGBPcmRlckJ5U3RlcGAgYXMgaXQgaXMgbm93IGp1c3QgYG9yZGVyKClgIHdpdGggYSBgYnkoKWAtYmFzZWQgY29tcGFyYXRvci4KLSogQWRkZWQgYFNhbXBsZVN0ZXBgIChgc2FtcGxlKClgKSB0byBhbGxvdyBmb3Igc2FtcGxpbmcgdGhlIHNldCBvZiBwcmV2aW91cyBvYmplY3RzLiBVc2VmdWwgZm9yIGRvaW5nIHJhbmRvbSB3YWxrcyB3aXRoIGBsb2NhbCgpYC4KLSogUmVuYW1lZCBgcmFuZG9tKClgIHRvIGBjb2luKClgIHRvIGJldHRlciBleHByZXNzIHRoYXQgdGhlIGZpbHRlciBpcyBhIHJhbmRvbSBjb2luIHRvc3MuCi0qIEFkZGVkIGBieSgpYC1wcm9qZWN0aW9uIHRvIG1vZHVsYXRlIHRoZSBtZWFuaW5nIG9mIHBvc3QtcHJvY2Vzc2luZyBzdGVwcyBsaWtlIGBhZ2dyZWdhdGUoKWAsIGBncm91cENvdW50KClgLCBgcGF0aCgpYCwgYG9yZGVyKClgLCBldGMuCi0qIFJlbW92ZWQgdGhlIGBTdHJhdGVneWAgaW50ZXJmYWNlIGFuZCBnYXZlIGBTdHJhdGVneUdyYXBoYCBkaXJlY3QgYWNjZXNzIHRvIHRoZSBgR3JhcGhTdHJhdGVneWAuCi0qIEFkZGVkIGBHcmFwaC5zdHJhdGVneSgpYCB0byBoZWxwIGluc3RhbnRpYXRlIGBTdHJhdGVneUdyYXBoYCBpbnN0YW5jZXMuCi0qIE1vZGlmaWVkIHRoZSBzaWduYXR1cmUgb2YgYWxsIGBHcmFwaFN0cmF0ZWd5YCBtZXRob2RzIHRvIGluY2x1ZGUgYW4gcGFyYW1ldGVyIHRoYXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlICJjb21wb3Npbmcgc3RyYXRlZ3kiLgotKiBgUGFydGl0aW9uU3RyYXRlZ3lgIGhpZGVzIHRoZSBzcGVjaWZpZWQgcGFydGl0aW9uIGtleSBmcm9tIHZpZXcgd2hlbiBpdGVyYXRpbmcgcHJvcGVydGllcywga2V5cywgZXRjLgotKiBDaGFuZ2UgY29uc3RydWN0aW9uIG9mIGBHcmFwaFN0cmF0ZWd5YCBpbXBsZW1lbnRhdGlvbnMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHNpbmdsZXRvbiBpbnN0YW5jZXMgYW5kIGJ1aWxkZXIgcGF0dGVybi4KLSogQWRkZWQgYEdyYXBoLkhlbHBlcmAgYW5ub3RhdGlvbiB0byAicHJvdGVjdGVkIiBjZXJ0YWluIGRlZmF1bHQgaW50ZXJmYWNlIG1ldGhvZHMgZnJvbSBpbXBsZW1lbnRhdGlvbiBieSB2ZW5kb3JzLgotKiBUcmFuc2FjdGlvbiByZXRyeSBmdW5jdGlvbnMgbm93IHdvcmsgd2l0aCAibWFudWFsIiB0cmFuc2FjdGlvbnMuCi0qIEltcHJvdmVkIGVycm9yIG1lc3NhZ2luZyB3aGVuIGltcG9ydGluZyAibGVnYWN5IiBHcmFwaFNPTiB0aGF0IHdhcyBub3QgZ2VuZXJhdGVkIHdpdGggImV4dGVuZGVkIiBwcm9wZXJ0aWVzLgotKiBSZW5hbWVkICJpdGVyYXRvciIgcmVsYXRlZCBtZXRob2RzIGluIHRoZSBgR3JhcGhTdHJhdGVneWAgaW50ZXJmYWNlIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbWV0aG9kIG5hbWVzIHRoZXkgcmVwcmVzZW50LgotKiBgUHJvcGVydHlNYXBTdGVwYCAoYHZhbHVlTWFwKClgKSBub3cgdGFrZXMgYSBib29sZWFuIHRvIHN0YXRlIGlmIHRoZSB0b2tlbnMgb2YgdGhlIGVsZW1lbnQgYXJlIGRlc2lyZWQgYWxvbmcgd2l0aCBpdHMgcHJvcGVydGllcy4KLSogYEhhZG9vcEdyYXBoYCBub3cgY29ubmVjdGVkIHRvIHRoZSBgU3RydWN0dXJlUHJvY2Vzc1N1aXRlYC4KLSogYEhhZG9vcEdyYXBoYCBubyBsb25nZXIgc3VwcG9ydHMgYEdyYXBoLlZhcmlhYmxlc2AgYXMgdGhleSB3ZXJlIGluLW1lbW9yeS4gQSBwZXJzaXN0ZW5jZSBtZWNoYW5pc20gY2FuIGJlIGludHJvZHVjZWQgaW4gdGhlIGZ1dHVyZS4KLSogSGlkZGVuIHByb3BlcnRpZXMgcmVtb3ZlZCBpbiBmYXZvciBvZiB1c2luZyBgR3JhcGhTdHJhdGVneWAgZm9yIHN1Y2ggZmVhdHVyZXMuCi0qIGBFZGdlLml0ZXJhdG9ycygpLnZlcnRleEl0ZXJhdG9yKEJPVEgpYCBub3cgZ3VhcmFudGVlcyBgT1VUYCB0aGVuIGBJTmAgdmVydGV4IGl0ZXJhdG9yIG9yZGVyLgotKiBgR3JhcGgudihPYmplY3QpYCBhbmQgYEdyYXBoLmUoT2JqZWN0KWAgbm8gbG9uZ2VyIGV4aXN0LiBJbnN0ZWFkLCB1c2UgYEdyYXBoLlYoT2JqZWN0Li4uIGlkcylgIGFuZCBgR3JhcGguRShPYmplY3QuLi4gaWRzKWAuCi0qIEFkZGVkIGBHcmFwaC5JdGVyYXRvcnNgIHRvIGFsbG93IGFjY2VzcyB0byB2ZXJ0ZXggYW5kIGVkZ2UgaXRlcmF0b3JzIGJhc2VkIG9uIGVsZW1lbnQgaWRzIGFuZCBieXBhc3NpbmcgYEdyYXBoVHJhdmVyc2FsYC4KLSogUmVuYW1lZCBgR3JhcGhTdHJhdGVneWAgaW1wbGVtZW50YXRpb25zIHRvIGJlIGxlc3MgdmVyYm9zZSAtIHJlbW92ZWQgdGhlIHdvcmQgIkdyYXBoIiBmcm9tIHRoZWlyIG5hbWVzIChlLmcuIGBJZEdyYXBoU3RyYXRlZ3lgIHNpbXBseSBjaGFuZ2VkIHRvIGBJZFN0cmF0ZWd5YCkuCi0qIFJlbW92ZWQgYFN0ZXAuTk9fT0JKRUNUYCBhcyB0aGUgcHJvYmxlbSBpcyBzb2x2ZXMgY2FuIGJlIHNvbHZlZCB3aXRoIHByb3BlciB1c2Ugb2YgYGZsYXRNYXBgIGFuZCBgRW1wdHlUcmF2ZXJzZXJgLgotKiBgUGF0aGAgaXMgbm93IHBhcnQgb2YgYEdyYXBoU2VyaWFsaXplcmAgYW5kIHRodXMsIG5vdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gb2YgYFBhdGhgLgotKiBBZGRlZCBtZXNzYWdpbmcgdG8gc2hvdyBmaWxlcyBiZWluZyBkb3dubG9hZGVkIHdoZW4gdXNpbmcgdGhlIEdyZW1saW4gU2VydmVyICJpbnN0YWxsIiBjb21tYW5kLgotKiBBZGRlZCB0ZXN0IG5hbWUgYW5kIGNsYXNzIGFyZ3VtZW50cyB0byB0aGUgYEdyYXBoUHJvdmlkZXIubG9hZEdyYXBoV2l0aGAgbWV0aG9kLgotKiBNZXJnZWQgYFJlZmVyZW5jZWRYWFhgIGFuZCBgRGV0YWNoZWRYWFhgIHNvIHRoYXQgYWxsIG1pZ3JhdGlvbiBvZiBncmFwaCBlbGVtZW50IGRhdGEgaXMgdmlhIGBEZXRhY2hlZFhYWGAuCi0qIEFkZGVkIGBTdGF0aWNWZXJ0ZXhQcm9ncmFtYCBhbmQgYFN0YXRpY01hcFJlZHVjZWAgd2hpY2ggc2ltcGx5IHJldHVybiBgdGhpc2Agb24gYGNsb25lKClgLgotKiBgVmVydGV4UHJvZ3JhbWAgYW5kIGBNYXBSZWR1Y2VgIG5vdyBpbXBsZW1lbnQgYENsb25lYWJsZWAgYW5kIGlzIHVzZWQgZm9yIGZhc3QgY29weWluZyBhY3Jvc3Mgd29ya2VycyB3aXRoaW4gdGhlIHNhbWUgbWFjaGluZS4KLSogQWRkZWQgYFRyYXZlcnNhbEhvbGRlcmAgaW50ZXJmYWNlIHdoaWNoIGV4dGVuZHMgYFBhdGhDb25zdW1lcmAgdG8gZGV0ZXJtaW5lIHJlY3Vyc2l2ZWx5IGlmIG5lc3RlZCB0cmF2ZXJzYWxzIHJlcXVpcmUgcGF0aCBjYWxjdWxhdGlvbnMgdHVybmVkIG9uLgotKiBSZXdvcmtlZCBob3cgYSBgVHJhdmVyc2VyR2VuZXJhdG9yYCBpcyByZXRyaWV2ZWQgYW5kIHV0aWxpemVkLgotKiBBZGRlZCBgVHJhdmVyc2FsLnRvQnVsa1NldCgpYCB0byBtYWtlIGdldHRpbmcgcmVzdWx0YW50IGRhdGEgbW9yZSBlZmZpY2llbnRseSBmb3IgdHJhdmVyc2FscyB3aXRoIHJlcGVhdGVkIGRhdGEuCi0qIFByb3ZpZGVkIGEgaGVscGVyIGBMb2NhbFN0ZXAuaXNMb2NhbFN0YXJHcmFwaCgpYCBzbyBgR3JhcGhDb21wdXRlcmAgaW1wbGVtZW50ZXJzIGtub3cgdGhlIHJlcXVpc2l0ZSBkYXRhIGJvdW5kYXJpZXMuCi0qIENyZWF0ZWQgYFRyYXZlcnNhbC5BZG1pbmAgdG8gaGlkZSBhZG1pbmlzdHJhdGl2ZSBtZXRob2RzLiBBZGRlZCBgVHJhdmVyc2FsLmFzQWRtaW4oKWAgdG8gZ2V0IGF0IGBUcmF2ZXJzYWwuQWRtaW5gLgotKiBGaXhlZCB1cCBhbGwgYFN0ZXBgIGNsb25pbmcgb3BlcmF0aW9ucyByZWFsaXppbmcgdGhhdCBKYXZhOCBsYW1iZGFzIGFyZSBhbHdheXMgYm91bmQgdG8gdGhlIGNhbGxpbmcgY2xhc3MgKG5vIGRlbGVnYXRlcykuCi0qIFVzYWdlIG9mIGA6cmVtb3RlIGNsb3NlYCB3aXRob3V0IGNvbmZpZ3VyZWQgcmVtb3RlcyBzaG93cyBhIHJlYXNvbmFibGUgbWVzc2FnZSByYXRoZXIgdGhhbiBhIHN0YWNrIHRyYWNlLgotKiBQcm92aWRlZCBgTG9jYWxTdGVwYCB0byBzaWduaWZ5IHRoYXQgdGhlIGludGVybmFsIHRyYXZlcnNhbCBpcyBsb2NhbGx5IGJvdW5kIHRvIHRoZSBpbmNvbWluZyBvYmplY3QuCi0qIEZhaWxlZCBzY3JpcHQgZXZhbHVhdGlvbiBpbiBHcmVtbGluIFNlcnZlciBub3cgdHJpZ2dlcnMgdGhlIGNhbmNlbCBvZiB0aGUgcHJvY2VzcyBhdHRlbXB0aW5nIHRvIHRpbWVvdXQgdGhlIHNjcmlwdCBpZiBpdCB3ZXJlIHRvIHJ1biB0b28gbG9uZy4KLSogR3JlYXRseSBpbmNyZWFzZWQgdGhlIHNwZWVkIG9mIGBTY3JpcHRFbmdpbmVMYW1iZGFgIGJ5IG1ha2luZyB1c2Ugb2YgYSBzdGF0aWMgYFNjcmlwdEVuZ2luZWAgY2FjaGUuCi0qIEZpeGVkIGEgZ2VuZXJhbCBidWcgaW4gYWxsIHNpZGVFZmZlY3QgdXNpbmcgc3RlcHMgd2hlcmUgdGhlIHNpZGVFZmZlY3Qgc2hvdWxkIGJlIGFjY2Vzc2VkIHZpYSB0aGUgYFRyYXZlcnNlcmAgbm90IGBUcmF2ZXJzYWxgLgotKiBgR3JlbWxpblBsdWdpbmAgaW50ZXJmYWNlIG5vIGxvbmdlciBoYXMgdGhlIGBhZGRpdGlvbmFsRGVwZW5kZW5jaWVzYCBtZXRob2QgLSB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIG5vdyBkZWZpbmVkIGJ5IGFuIGVudHJ5IGluIHRoZSBtYW5pZmVzdCBmaWxlIGZvciB0aGUgamFyIGNhbGxlZCBgR3JlbWxpbi1QbHVnaW4tRGVwZW5kZW5jaWVzYC4KLSogQWRkZWQgYFRpbmtlcldvcmtlclBvb2xgIHdoaWNoIGlzIHVzZWQgZm9yIHJlc291cmNlIGVmZmljaWVudCB0aHJlYWRpbmcgaW4gYFRpbmtlckdyYXBoQ29tcHV0ZXJgLgotKiBgTWFwUmVkdWNlLmNyZWF0ZU1hcFJlZHVjZShDb25maWd1cmF0aW9uKWAgbm93IGV4aXN0cyBhbmQgc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgYFZlcnRleFByb2dyYW0uY3JlYXRlVmVydGV4UHJvZ3JhbShDb25maWd1cmF0aW9uKWAuCi0qIEVuYWJsZWQgU2Vzc2lvbk9wcyB0byBiZSBleHRlbmRlZC4gQWRkZWQgZXZhbCBoYW5kbGVyIGhvb2suCi0qIFNldHRpbmcgYSBwcm9wZXJ0eSB3aXRoIGFuIHVuc3VwcG9ydGVkIGRhdGEgdHlwZSB0aHJvdyBgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uYCBpbnN0ZWFkIG9mIGBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbmAgYXMgdGhlIG9wZXJhdGlvbiBpcyBzdXBwb3J0ZWQsIGJ1dCB0aGUgYXJndW1lbnQgaXMgbm90LgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjAueC5hc2NpaWRvYyNyZWxlYXNlLTMtMC0wLW03LCAzLjAuMC5NNyBjaGFuZ2Vsb2c+Pi4KIAogPT09IFRpbmtlclBvcCAzLjAuMC5NNiAoUmVsZWFzZSBEYXRlOiBEZWNlbWJlciAyLCAyMDE0KQogCi0qIGBqYXZhdHVwbGVzLlBhaXJgIGF2b2lkZWQgb24gYE1hcFJlZHVjZWAgQVBJIGluIGZhdm9yIG9mIGEgbmV3IGBLZXlWYWx1ZWAgY2xhc3MuCi0qIFJlbmFtZWQgYEdyZW1saW4tUGx1Z2luYCBtYW5pZmVzdCBlbnRyeSBmb3IgcGx1Z2lucyB0byBgR3JlbWxpbi1QbHVnaW4tUGF0aHNgLgotKiBBZGRlZCBgR3JlbWxpbi1QbHVnaW4tRGVwZW5kZW5jaWVzYCBtYW5pZmVzdCBlbnRyeSB0byBsaXN0IG90aGVyIGRlcGVuZGVuY2llcyB0aGF0IHNob3VsZCBiZSByZXRyaWV2ZWQgd2l0aCBhIHBsdWdpbiBqYXIuCi0qIGBNZW1vcnkuQWRtaW4uYXNJbW11dGFibGUoKWAgeWllbGRzIGFuIGltbXV0YWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgR3JhcGhDb21wdXRlciBgTWVtb3J5YC4KLSogRml4ZWQgaG9zdCBzZWxlY3Rpb24gaW4gYGdyZW1saW4tZHJpdmVyYCBieSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBhbGwgaG9zdHMgYmVpbmcgbWFya2VkIHVuYXZhaWxhYmxlIGF0IHRoZSBpbnN0YW50aWF0aW9uIG9mIGEgYENsaWVudGAuCi0qIFJlbW92ZWQgR2lyYXBoLUdyZW1saW4gaW4gZmF2b3Igb2YgbmV3IEhhZG9vcC1HcmVtbGluIHdpdGggYEdpcmFwaEdyYXBoQ29tcHV0ZXJgIHN1cHBvcnQuIEZ1dHVyZSBzdXBwb3J0IGZvciBgTWFwUmVkdWNlR3JhcGhDb21wdXRlcmAuCi0qIEdyZWF0bHkgc2ltcGxpZmllZCB0aGUgYElucHV0Rm9ybWF0YCBhbmQgYE91dHB1dEZvcm1hdGAgbW9kZWwgZm9yIHdvcmtpbmcgd2l0aCBHaXJhcGggKGFuZCBIYWRvb3ApLgotKiBBZGRlZCBhIHNlcmlhbGl6ZXIgZm9yIGBQcm9wZXJ0eWAgZm9yIEdyYXBoU09OIGNvcnJlY3RpbmcgZm9ybWF0IG9mIHNlcmlhbGl6YXRpb24gb2YgYSBzaW5nbGUgYFByb3BlcnR5YCBvbiBhbiBgRWRnZWAuCi0qIEZpeGVkIGJ1ZyBpbiBHcmVtbGluIENvbnNvbGUgdGhhdCBwcmV2ZW50ZWQgYXNzaWdubWVudHMgdG8gZW1wdHkgYExpc3RgIG9iamVjdHMuCi0qIEFkZGVkIGBWZXJ0ZXhQcm9ncmFtLmdldE1lc3NhZ2VTY29wZXMoKWAgdG8gYWxsb3cgdmVuZG9ycyB0byBrbm93IHdoaWNoIGBNZXNzYWdlU2NvcGVzYCBhdCBhIHBhcnRpY3VsYXIgYE1lbW9yeWAgc3RhdGUuCi0qIFJlZHVjZWQgdGhlIG51bWJlciBvZiBtZXRob2RzIGluIGBNZXNzYWdlU2NvcGUuTG9jYWxgIGFzIGl0cyB1cCB0byB2ZW5kb3JzIHRvIGluc3BlY3QgcHJvdmlkZWQgaW5jaWRlbnQgYFRyYXZlcnNhbGAgYWNjb3JkaW5nbHkuCi0qIFJlbmFtZWQgYE1lc3NhZ2VzVHlwZWAgdG8gYE1lc3NhZ2VTY29wZWAgdG8gbWFrZSBpdCBsZXNzIGFtYmlndW91cyByZWdhcmRpbmcgdGhlIGNsYXNzIG9mIHRoZSBtZXNzYWdlcyBiZWluZyBzZW50LgotKiBDaGFuZ2VkIHRoZSBtZXNzYWdlIHR5cGUgb2YgYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIHRvIGBUcmF2ZXJzZXJTZXRgIHRvIHN1cHBvcnQgbWVzc2FnZSBjb21iaW5pbmcuCi0qIEFkZGVkIGBWZXJ0ZXhQcm9ncmFtLmdldE1lc3NhZ2VDb21iaW5lcigpYCB0byBzdXBwb3J0IHRoZSBjb21iaW5pbmcgb2YgbWVzc2FnZXMgaW4gcm91dGUgdG8gYSB2ZXJ0ZXguCi0qIFJlZHVjZWQgb2JqZWN0IGNyZWF0aW9uIGluIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCBhcm91bmQgdmVydGV4LWxvY2FsIHRyYXZlcnNhbCBzaWRlRWZmZWN0cy4KLSogUmVuYW1lZCBgVHJhdmVyc2VyLkFkbWluLm1ha2VDaGlsZCgpYCBhbmQgYFRyYXZlcnNlci5BZG1pbi5tYWtlU2libGluZygpYCB0byBgVHJhdmVyc2VyLkFkbWluLnNwbGl0KClgIHRvIGNvcnJlc3BvbmQgd2l0aCBgbWVyZ2UoKWAuCi0qIEFkZGVkIGBUcmF2ZXJzZXIuQWRtaW4ubWVyZ2UoVHJhdmVyc2VyKWAgbWV0aG9kIHNvIHRoYXQgdGhlIG1lcmdpbmcgYWxnb3JpdGhtIGlzIHdpdGggdGhlIGBUcmF2ZXJzZXJgLgotKiBBZGRlZCBgT3BlcmF0b3JgIGVudW0gdGhhdCBjb250YWlucyBzYWNrLWhlbHBmdWwgYEJpbmFyeU9wZXJhdG9yc2A6IHN1bSwgbWludXMsIG11bHQsIGRpdiwgbWF4LCBtaW4sIGV0Yy4KLSogQWRkZWQgYEdyYXBoVHJhdmVyc2FsLndpdGhTYWNrKClgIGFuZCByZW5hbWVkIGB0cmFja1BhdGhzKClgIGFuZCBgd2l0aCgpYCB0byBgd2l0aFBhdGgoKWAgYW5kIGB3aXRoU2lkZUVmZmVjdCgpYCwgcmVzcGVjdGl2ZWx5LgotKiBBZGRlZCB0aGUgIkdyZW1saW4gU2Fja3MiIGZlYXR1cmUgdG8gYWxsb3cgYSBgVHJhdmVyc2VyYCB0byBjYXJyeSBsb2NhbCBpbmZvcm1hdGlvbiBhbG9uZyBpdHMgd2Fsay4KLSogR3JhcGhTT04gZm9ybWF0IG5vIGxvbmdlciBtYWtlcyB1c2Ugb2YgYGhpZGRlbnNgIEpTT04ga2V5LiBJdHMgYWxsIGp1c3QgYHByb3BlcnRpZXNgLgotKiBBZGRlZCBgRG91YmxlSXRlcmF0b3JgIHRvIG1ha2UgdmVuZG9yIGltcGxlbWVudGF0aW9ucyBvZiBgRWRnZS5pdGVyYXRvcnMoKS52ZXJ0ZXhJdGVyYXRvcigpYCBlZmZpY2llbnQuCi0qIGBQcm9wZXJ0aWVzU3RlcGAgaXMgc21hcnQgYWJvdXQgaGlkZGVucyB2cy4gcHJvcGVydGllcy4KLSogYEVsZW1lbnQuaXRlcmF0b3JzKCkuaGlkZGVuUHJvcGVydGllcygpYCBubyBsb25nZXIgZXhpc3RzLiBGb3IgdmVuZG9ycywgc2ltcGx5IHByb3ZpZGUgYW4gaXRlcmF0b3Igb2YgcHJvcGVydGllcy4KLSogYEdJUkFQSF9HUkVNTElOX0xJQlNgIHN1cHBvcnRzIGNvbG9uIHNlcGFyYXRlZCBkaXJlY3RvcmllcyBmb3IgbG9hZGluZyBqYXJzIGZyb20gbXVsdGlwbGUgcGF0aHMuCi0qIEludHJvZHVjZWQgbWV0aG9kIHRvIGNvbnRyb2wgdGhlIGxvY2F0aW9uIG9mIGRlcGVuZGVuY2llcyBkeW5hbWljYWxseSBsb2FkZWQgdG8gdGhlIEdyZW1saW4gQ29uc29sZSBhcyBwYXJ0IG9mIHRoZSBgOmluc3RhbGxgIGNvbW1hbmQuCi0qIEZpeGVkIHByb2JsZW0gd2l0aCB0aGUgTmVvNGogR3JlbWxpbiBQbHVnaW4gbm90IGxvYWRpbmcgcHJvcGVybHkgYWZ0ZXIgR3JlbWxpbiBDb25zb2xlIHJlc3RhcnQuCi0qIFJlbW92ZWQgdGhlICJ1c2UiIGNvbmZpZ3VyYXRpb24gZnJvbSBHcmVtbGluIFNlcnZlci4KLSogTW92ZWQgYFN1Z2FyR3JlbWxpblBsdWdpbmAgZnJvbSBgZ3JlbWxpbi1jb25zb2xlYCB0byBgZ3JlbWxpbi1ncm9vdnlgIHNvIHRoYXQgaXQgY291bGQgYmUgc2hhcmVkIHdpdGggR3JlbWxpbiBTZXJ2ZXIuCi0qIEZpeGVkIGJ1ZyBpbiBzZXJpYWxpemF0aW9uIG9mIGBudWxsYCByZXN1bHRzIHJldHVybmVkIHRvIHRoZSBHcmVtbGluIENvbnNvbGUgd2hlbiBzZXJpYWxpemluZyB0byBzdHJpbmdzLgotKiBNb3ZlZCB0aGUgYEdyZW1saW5QbHVnaW5gIGZvciBgVGlua2VyR3JhcGhgIHRvIGB0aW5rZXJncmFwaC1ncmVtbGluYCBtb2R1bGUgKGl0IGlzIG5vIGxvbmdlciBpbiBgZ3JlbWxpbi1jb25zb2xlYCkuCi0qIEFkZGVkIGEgYHBsdWdpbi1pbmZvLnR4dGAgZmlsZSB0byBHcmVtbGluIENvbnNvbGUgYC9leHQve21vZHVsZX1gIHN1YmRpcmVjdG9yaWVzIHRvIGlkZW50aWZ5IHRoZSBtb2R1bGUgdGhhdCB3YXMgb3JpZ2luYWxseSByZXF1ZXN0ZWQuCi0qIEdyZW1saW4gU2VydmVyIG5vdyBhbGxvd3MgZm9yIHRoZSBleHBsaWNpdCBjb25maWd1cmF0aW9uIG9mIHBsdWdpbiBhY3RpdmF0aW9uLgotKiBSZWZhY3RvcmVkIGBHcmVtbGluUGx1Z2luYCBhbmQgYEFic3RyYWN0R3JlbWxpblBsdWdpbmAgdG8gYmV0dGVyIGFjY291bnQgZm9yIHBsdWdpbnMgdGhhdCBydW4gb24gdGhlIHNlcnZlciBhbmQgdGhvc2UgdGhhdCBydW4gaW4gdGhlIGNvbnNvbGUuCi0qIEFkZGVkIGEgYHBsdWdpbnNgIGNvbmZpZ3VyYXRpb24gdG8gR3JlbWxpbiBTZXJ2ZXIgdG8gY29udHJvbCB0aGUgcGx1Z2lucyB0aGF0IGFyZSBlbmFibGVkIG9uIGluaXRpYWxpemF0aW9uLgotKiBBZGRlZCBhIGJ1aWxkZXIgb3B0aW9uIHRvIGBHcmVtbGluRXhlY3V0b3JgIHRvIGNvbnRyb2wgdGhlIHBsdWdpbnMgdGhhdCBhcmUgZW5hYmxlZCBvbiBpbml0aWFsaXphdGlvbi4KLSogQWRkZWQgYFJlbW90ZUV4Y2VwdGlvbmAgZm9yIHVzYWdlIHdpdGggYFJlbW90ZUFjY2VwdG9yYCBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBHcmVtbGluIENvbnNvbGUgc28gYXMgdG8gYmV0dGVyIHN0YW5kYXJkaXplIHRoZWlyIGRldmVsb3BtZW50LgotKiBTdGFuZGFyZGl6ZWQgYWxsIHRleHQgYmVpbmcgd3JpdHRlbiB0byB0aGUgR3JlbWxpbiBDb25zb2xlIHVzaW5nIHN0YXJ0aW5nIHVwcGVyIGNhc2UgbGV0dGVyLgotKiBQcmV2ZW50ZWQgZXJyb3IgaW4gdGhlIENvbnNvbGUgd2hlbiBgOnN1Ym1pdGAgaXMgY2FsbGVkIGJ1dCBubyByZW1vdGVzIHdlcmUgY29uZmlndXJlZC4KLSogUHJvdmlkZWQgYSB3YXkgdG8gY2xlYW4gdGhlIGBncmFwZXNgIGRpcmVjdG9yeSBhcyBwYXJ0IG9mIGEgc3RhbmRhcmQgYnVpbGQgd2l0aCBgbXZuIGNsZWFuIGluc3RhbGxgLgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjAueC5hc2NpaWRvYyNyZWxlYXNlLTMtMC0wLW02LCAzLjAuMC5NNiBjaGFuZ2Vsb2c+Pi4KIAogPT09IFRpbmtlclBvcCAzLjAuMC5NNSAoUmVsZWFzZSBEYXRlOiBOb3ZlbWJlciA3LCAyMDE0KQogCi0qIFJlbW92ZWQgYFByb3BlcnR5RmlsdGVySXRlcmF0b3JgIGFzIHVzaW5nIEphdmE4IHN0cmVhbXMgd2FzIGp1c3QgYXMgZWZmaWNpZW50IGZvciB0aGUgdXNlIGNhc2UuCi0qIFJlbmFtZWQgYEtyeW9Xcml0YWJsZWAgdG8gYEdyZW1saW5Xcml0YWJsZWAgYXMgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IEtyeW8gdGhhdCBpcyB0aGUgc2VyaWFsaXphdGlvbiBtZWNoYW5pc20uCi0qIEZpeGVkIGFuIGlucHV0IHNwbGl0IGJ1ZyBpbiBHaXJhcGggdGhhdCB3YXMgbWFraW5nIGl0IHNvIHRoYXQgc3BsaXRzIHdlcmUgbm90IGFsd2F5cyBhdCB2ZXJ0ZXggYm91bmRhcmllcy4KLSogRml4ZWQgYSBjb21iaW5lciBidWcgaW4gYEdpcmFwR3JhcGhDb21wdXRlcmAuIENvbWJpbmVycyB3ZXJlIGFsd2F5cyBjYWxsaW5nIGBNYXBSZWR1Y2UucmVkdWNlKClgLCBub3QgYE1hcFJlZHVjZS5jb21iaW5lKClgLgotKiBHcmVhdGx5IHNpbXBsaWZpZWQgYFN1YmdyYXBoU3RyYXRlZ3lgIGJ5IHJlbW92aW5nIHJlcXVpcmVtZW50cyBmb3IgYFRyYXZlcnNhbGAgaW50cm9zcGVjdGlvbi4KLSogYFN0cmF0ZWd5V3JhcHBlZEdyYXBoYCBtaW1pY3MgdmVuZG9yIHVzZSBvZiBgR3JhcGhTdGVwYCBhbmQgYEdyYXBoVHJhdmVyc2FsYCBhbmQgbm8gbG9uZ2VyIHJlcXVpcmVzIGR5bmFtaWMgc3RyYXRlZ3kgYXBwbGljYXRpb24uCi0qIGBUcmF2ZXJzYWxTdHJhdGVnaWVzYCBtYWtlIHVzZSBvZiBhIGRlcGVuZGVuY3kgdHJlZSBzb3J0aW5nIGFsZ29yaXRobSB0byBlbnN1cmUgcHJvcGVyIHNvcnRzIHByaW9yIHRvIGFwcGxpY2F0aW9uLgotKiBgVHJhdmVyc2FsU3RyYXRlZ2llc2AgYXJlIG5vdyBpbW11dGFibGUgYW5kIGFyZSBib3VuZCB0byB0aGUgYFRyYXZlcnNhbGAgY2xhc3MuCi0qIEZpeGVkIGJ1ZyBpbiBHZXBoaSBQbHVnaW4gdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbSBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEdlcGhpIFN0cmVhbWluZyBTZXJ2ZXIuCi0qIFJlbmFtZWQgYE1lc3NhZ2VUeXBlLlhYWC50bygpYCB0byBgTWVzc2FnZVR5cGUuWFhYLm9mKClgIHNvIGl0IG1ha2VzIHNlbnNlIGluIGJvdGggdGhlIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBjb250ZXh0LgotKiBJbXByb3ZlZCBtZXNzYWdpbmcgd2l0aCByZXNwZWN0IHRvIHRlc3RzIHRoYXQgYXJlIGlnbm9yZWQgZHVlIHRvIGZlYXR1cmVzIHRvIG1ha2UgaXQgY2xlYXIgdGhhdCB0aG9zZSB0ZXN0cyBhcmUgbm90IGluIGVycm9yLgotKiBSZWxheGVkIGV4Y2VwdGlvbiBjb25zaXN0ZW5jeSBjaGVja3MgaW4gdGhlIHRlc3Qgc3VpdGUgdG8gb25seSBjaGVjayB0aGF0IGEgdGhyb3duIGV4Y2VwdGlvbiBmcm9tIGFuIGltcGxlbWVudGF0aW9uIGV4dGVuZHMgdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbiBjbGFzcyAoYnV0IG5vIGxvbmdlciB2YWxpZGF0ZXMgdGhhdCBpdCBpcyB0aGUgZXhhY3QgY2xhc3Mgb3IgdGhhdCB0aGUgbWVzc2FnZSB0ZXh0KS4KLSogYFZlcnRleFByb2dyYW1gIG5vdyBoYXMgYHdvcmtlckl0ZXJhdGlvblN0YXJ0KClgIGFuZCBgd29ya2VySXRlcmF0aW9uRW5kKClgIHRvIGFsbG93IGRldmVsb3BlcnMgdG8gY29udHJvbCB2ZXJ0ZXggc3BsaXQgc3RhdGljIGRhdGEgc3RydWN0dXJlcy4KLSogYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIHN0YXJ0dXAgdGltZSBncmVhdGx5IHJlZHVjZWQgZHVlIHRvIGJlaW5nIHNtYXJ0IGFib3V0IGBsb2FkU3RhdGUoKWAgYmVoYXZpb3IuCi0qIEdyZW1saW4gU2VydmVyIHNlc3Npb25zIG5vdyBhbGxvdyBzZXJpYWxpemF0aW9uIG9mIHJlc3VsdHMgdGhhdCB3ZXJlIHBhcnQgb2YgYW4gb3BlbiB0cmFuc2FjdGlvbi4KLSogUmVmYWN0b3IgYE9wUHJvY2Vzc29yc2AgaW1wbGVtZW50YXRpb25zIGluIEdyZW1saW4gU2VydmVyIGZvciBiZXR0ZXIgcmV1c2FiaWxpdHkuCi0qIGBWZXJ0ZXguaXRlcmF0b3JzKClgIG5vIGxvbmdlciBoYXZlIGEgYGJyYW5jaEZhY3RvcmAuIFRoaXMgaXMgbm93IGF0IHRoZSBxdWVyeSBsYW5ndWFnZSBsZXZlbCB3aXRoIGBsb2NhbExpbWl0KClgLgotKiBBZGRlZCBgbGltaXQobG9uZylgIGFuZCBgbG9jYWxMaW1pdChpbnQsaW50KWAgd2hpY2ggc2ltcGx5IGNhbGwgdGhlIHJhbmdlIGVxdWl2YWxlbnRzIHdpdGggMCBhcyB0aGUgbG93LgotKiBBZGRlZCBgTG9jYWxSYW5nZVN0ZXBgIHdoaWNoIHN1cHBvcnRzIHJhbmdpbmcgdGhlIGVkZ2VzIGFuZCBwcm9wZXJ0aWVzIG9mIGFuIGVsZW1lbnQgLS0gYGxvY2FsUmFuZ2UoaW50LGludClgLgotKiBgR3JhcGhUcmF2ZXJzYWwudmFsdWUoU3RyaW5nKWAgbm8gbG9uZ2VyIGV4aXN0cy4gSW5zdGVhZCwgdXNlIGBHcmFwaFRyYXZlcnNhbC52YWx1ZXMoU3RyaW5nKWAuCi0qIGBIaWRkZW5YWFhTdGVwYCBhbmQgYFZhbHVlWFhYU3RlcGAgbm8gbG9uZ2VyIGV4aXN0LiBgUHJvcGVydHlYWFhTdGVwYCB0YWtlcyBhIGBQcm9wZXJ0eVR5cGVgIHRvIGRlbm90ZSB2YWx1ZSBhbmQgaGlkZGVuIGFjY2Vzcy4KLSogQWRkZWQgYFByb3BlcnR5VHlwZWAgdG8gdGhlIHN0cnVjdHVyZS1wYWNrYWdlIHdoaWNoIHByb3ZpZGUgbWFya2VycyBmb3IgZGVub3RpbmcgcHJvcGVydHkgdHlwZXMgKHZzLiBwcm9wZXJ0eSBjbGFzc2VzKS4KLSogUmVuYW1lZCBgc2V0V29ya2luZ0RpcmVjdG9yeWAgdG8gYHdvcmtpbmdEaXJlY3RvcnlgIGluIHRoZSBgS3J5b1JlYWRlcmAgYnVpbGRlci4KLSogYFBhdGguZ2V0KFN0cmluZylgIHJldHVybnMgdGhlIG9iamVjdCBpZiBvbmx5IG9uZSBvYmplY3QgaXMgcmVmZXJlbmNlZCBieSBsYWJlbCwgZWxzZSBpdCByZXR1cm5zIGEgYExpc3RgIG9mIHJlZmVyZW5jZWQgb2JqZWN0cy4KLSogQWRkZWQgb3ZlcmxvYWQgdG8gYEdyZW1saW5LcnlvYCB0byBhbGxvdyBhIHNlcmlhbGl6ZXIgdG8gYmUgY29uZmlndXJlZCBhcyBhIGBGdW5jdGlvbjxLcnlvLFNlcmlhbGl6ZXI+YCB0byBhbGxvdyBiZXR0ZXIgZmxleGliaWxpdHkgaW4gc2VyaWFsaXplciBjcmVhdGlvbi4KLSogQWRkZWQgbWV0aG9kIHRvIGBHcmFwaFByb3ZpZGVyYCB0byBhbGxvdyBpbXBsZW1lbnRlcnMgdG8gcHJvdmlkZSBhIG1lY2hhbmlzbSB0byBjb252ZXJ0IEdyYXBoU09OIHNlcmlhbGl6ZWQgaWRlbnRpZmllcnMgYmFjayB0byBjdXN0b20gaWRlbnRpZmllcnMgYXMgbmVlZGVkLgotKiBBZGRlZCBtZXRob2RzIHRvIGBHcmFwaFByb3ZpZGVyYCBzbyB0aGF0IGltcGxlbWVudGVycyBjb3VsZCBzcGVjaWZ5IGEgY3VzdG9tIGJ1aWx0IGBHcmVtbGluS3J5b2AgY2xhc3MgYW5kL29yIGBTaW1wbGVNb2R1bGVgIGNsYXNzIGluIGNhc2UgdGhlaXIgaW1wbGVtZW50YXRpb24gaGFkIGN1c3RvbSBjbGFzc2VzIHRvIGJlIHNlcmlhbGl6ZWQuCi0qIEFkZGVkIGBUcmF2ZXJzYWwuZm9yRWFjaFJlbWFpbmluZyhjbGFzcyxjb25zdW1lcilgIGZvciB0aG9zZSB0cmF2ZXJzYWxzIHdob3NlIGVuZCB0eXBlIGlzIGRpZmZlcmVudCBmcm9tIGRlY2xhcmVkIGR1ZSB0byBzdHJhdGVneSByZXdyaXRpbmcuCi0qIFJlbW92ZWQgYFRyYXZlcnNhbC5mb3JFYWNoKClgIGFzIHRyYXZlcnNhbCBpbXBsZW1lbnRzIGBJdGVyYXRvcmAgYW5kIHVzZXJzIHNob3VsZCB1c2UgYGZvckVhY2hSZW1haW5pbmcoKWAuCi0qIGBSYW5nZVN0ZXBgIG5vdyBoYXMgYW4gaW5jbHVzaXZlIGxvdyBhbmQgYW4gZXhjbHVzaXZlIGhpZ2ggLS0gYSBjaGFuZ2UgZnJvbSBHcmVtbGluMi4KLSogYERyaXZlckdyZW1saW5QbHVnaW5gIHJldHVybnMgcmF3IHJlc3VsdHMgd2l0aCBkcml2ZXIgcmVzdWx0cyBhdmFpbGFibGUgdmlhIHRoZSBgcmVzdWx0YCB2YXJpYWJsZS4KLSogUmVtb3ZlZCB0ZXN0IGVuZm9yY2VtZW50IG9mIGBwcml2YXRlYCBjb25zdHJ1Y3RvciBmb3IgYSBgR3JhcGhgIGluc3RhbmNlLgotKiBgUmVtb3RlQWNjZXB0b3JgIG5vdyBzdXBwb3J0cyBgQGAgcHJlZml4ZWQgbGluZXMgdGhhdCB3aWxsIGdyYWIgdGhlIHNjcmlwdCBzdHJpbmcgZnJvbSB0aGUgR3JlbWxpbiBDb25zb2xlIHNoZWxsLgotKiBNb2RpZmllZCB0aGUgc2lnbmF0dXJlIG9mIGBQcm9wZXJ0eS5lbGVtZW50KClgIHRvIHNpbXBseSByZXR1cm4gYEVsZW1lbnRgCi0qIEFkZGVkIGBSZWR1Y2luZ2AgbWFya2VyIGFuZCBgUmVkdWNpbmdTdHJhdGVneWAgd2hpY2ggc3VwcG9ydHMgcmVkdWN0aW9uLWZ1bmN0aW9ucyBhcyBhIGZpbmFsIHN0ZXAgaW4gR3JlbWxpbiBPTEFQIChlLmcuIGBmb2xkKClgKS4KLSogT25jZSBzdHJhdGVnaWVzIGFyZSBgY29tcGxldGUoKWAsIG5vIG1vcmUgc3RlcHMgY2FuIGJlIGFkZGVkIHRvIGEgYFRyYXZlcnNhbGAuCi0qIFJlbmFtZWQgYFRyYXZlcnNhbC5zdHJhdGVnaWVzKClgIHRvIGBUcmF2ZXJzYWwuZ2V0U3RyYXRlZ2llcygpYCBhcyBpdCBpcyBub3QgYSAicXVlcnkgbGFuZ3VhZ2UiLW1ldGhvZC4KLSogQWRkZWQgdGVzdCB0byBlbmZvcmNlIHRoYXQgYSBgbGFiZWxgIG9uIGEgYFZlcnRleFByb3BlcnR5YCBpcyBhbHdheXMgc2V0IHRvIHRoZSBrZXkgb2YgdGhlIG93bmluZyBwcm9wZXJ0eS4KLSogRml4ZWQgYnVnIHdpdGggbXVsdGktcHJvcGVydHkgcmVtb3ZhbCBpbiBgTmVvNGpHcmFwaGAuCi0qIEJ1bXBlZCB0byBOZW80aiAyLjEuNS4KLSogVXNlZCBzdGFuZGFyZCBgVVVJRFNlcmlhbGl6ZXJgIGZyb20gdGhlIGBrcnlvLXNlcmlhbGl6ZXJzYCBsaWJyYXJ5IGZvciBzZXJpYWxpemF0aW9uIG9mIGBVVUlEYCBvYmplY3RzLgotKiBDaGFuZ2VkIEdyYXBoU09OIHNlcmlhbGl6YXRpb24gdG8gb25seSB1c2UgYGl0ZXJhdG9ycygpYCAtIHRoZXJlIHdlcmUgc3RpbGwgcmVtbmFudHMgb2YgYFRyYXZlcnNhbGAgdXNhZ2UgZnJvbSBwcmV2aW91cyByZWZhY3RvcmluZy4KLSogQWRkZWQgb3ZlcmxvYWQgZm9yIGBkZXRhY2hgIG1ldGhvZCB0byBhbGxvdyBmb3IgdGhlIGBFbGVtZW50YCB0byBiZSBkZXRhY2hlZCBhcyBhICJyZWZlcmVuY2UiIG9ubHkgKGkuZS4gd2l0aG91dCBwcm9wZXJ0aWVzKS4KLSogUmVuYW1lZCBgSXRlbWAgaW4gYGdyZW1saW4tZHJpdmVyYCB0byBgUmVzdWx0YC4KLSogUmVuYW1lZCBgc3RyYXRlZ3lgIHRvIGBnZXRTdHJhdGVneWAgaW4gYFN0cmF0ZWd5V3JhcHBlZEdyYXBoYC4KLSogUmVuYW1lZCBgYmFzZUdyYXBoYCB0byBgZ2V0QmFzZUdyYXBoYCBpbiBgTmVvNGpHcmFwaGAuCi0qIGBOZW80akdyYXBoYCBub3cgcmV0dXJucyBhbiBlbXB0eSBwcm9wZXJ0eSBgVmVydGV4LnByb3BlcnR5KGspYCB3aGVuIHRoZSBrZXkgaXMgbm9uLWV4aXN0ZW50IChhIHByb2JsZW0gb25seSB2aXNpYmxlIHdoZW4gbWV0YS9tdWx0aSBwcm9wZXJ0eSBjb25maWd1cmF0aW9uIHdhcyB0dXJuZWQgb2ZmKS4KLSogYFRyYXZlcnNhbC5TdHJhdGVnaWVzLmFwcGx5KClgIG5vdyB0YWtlcyBhIGBUcmF2ZXJzYWxFbmdpbmVgLiBHcmVhdGx5IHNpbXBsaWZpZXMgc3RyYXRlZ3kgYXBwbGljYXRpb24gZm9yIGBTVEFOREFSRGAgb3IgYENPTVBVVEVSYC4KLSogUmVuYW1lZCBgSWRlbnRpdHlSZWR1Y3Rpb25TdHJhdGVneWAgdG8gYElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5YCBmb3IgcmVhc29ucyBvZiBjbGFyaXR5LgotKiBBZGRlZCBgQ29tcGFyaW5nUmVtb3ZhbFN0cmF0ZWd5YCB0aGF0IHJlbW92ZXMgYENvbXBhcmluZ2AtbWFya2VkIHN0ZXBzIHVubGVzcyB0aGV5IGFyZSB0aGUgZW5kIHN0ZXAgb2YgdGhlIHRyYXZlcnNhbC4KLSogYE9yZGVyU3RlcGAgbm93IHdvcmtzIGluIE9MQVAsIGJ1dCBvbmx5IG1ha2VzIHNlbnNlIGFzIGEgdHJhdmVyc2FsIGVuZCBzdGVwLgotKiBgTWFwUmVkdWNlYCBBUEkgZXh0ZW5kZWQgdG8gaW5jbHVkZSBgZ2V0TWFwS2V5U29ydCgpYCBhbmQgYGdldFJlZHVjZUtleVNvcnQoKWAgdG8gc29ydCBvdXRwdXRzIGFjY29yZGluZ2x5LgotKiBSZW5hbWVkIGBUcmF2ZXJzYWxSZXN1bHRNYXBSZWR1Y2VgIHRvIGBUcmF2ZXJzZXJNYXBSZWR1Y2VgLiBTaG9ydGVyIGFuZCBtYWtlcyBtb3JlIHNlbnNlLgotKiBJbXByb3ZlZCBidWlsZCBhdXRvbWF0aW9uIHRvIHBhY2thZ2UgamF2YWRvY3MgYW5kIGFzY2lpZG9jIGRvY3VtZW50YXRpb24gaW4gdGhlIGRpc3RyaWJ1dGlvbiBmaWxlcy4KLSogSW1wcm92ZWQgYnVpbGQgYXV0b21hdGlvbiB3aXRoIGEgc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgYnVtcCByZWxlYXNlIHZlcnNpb25zIGluIHRoZSB2YXJpb3VzIGZpbGVzIHRoYXQgbmVlZGVkIGl0IHN1Y2ggYXMgdGhlIGBwb20ueG1sYCBmaWxlcy4KLSogVGhlIGlkZW50aWZpZXIgb24gYFZlcnRleFByb3BlcnR5YCBpcyBub3cgcmVhZCBwcm9wZXJseSB0byB0aG9zZSBncmFwaHMgdGhhdCBjYW4gc3VwcG9ydCBpZGVudGlmaWVyIGFzc2lnbm1lbnQuCi0qIGBHcmFwaFNPTlJlYWRlci5yZWFkR3JhcGgoKWAgbm93IHByb3Blcmx5IHJlYWRzIHZlcnRleCBwcm9wZXJ0aWVzLgotKiBSZW1vdmVkIGBOZW80akdyYXBoLmdldEN5cGhlcigpYCBhcyB1c2VycyBzaG91bGQgdXNlIGBOZW80akdyYXBoLmN5cGhlcigpYCBhbmQgZ2V0IGJhY2sgVGlua2VyUG9wMyBncmFwaCBvYmplY3RzLgotKiBgR2lyYXBoR3JhcGgudmFyaWFibGVzKCkuZ2V0Q29uZmlndXJhdGlvbigpYCBpcyBub3cgcmVwbGFjZWQgYnkgYEdpcmFwaEdyYXBoLmNvbmZpZ3VyYXRpb24oKWAuCi0qIEFkZGVkIGBHcmFwaC5jb25maWd1cmF0aW9uKClgIHdoaWNoIHJldHVybnMgdGhlIGBDb25maWd1cmF0aW9uYCBvYmplY3Qgb2YgYEdyYXBoLm9wZW4oKWAuCi0qIFJlbW92ZWQgYFRyYXZlcnNlclRyYWNrZXJgIGFzIG5vdyB0aGVyZSBpcyBvbmx5IGEgYFRyYXZlcnNlclNldGAgZm9yIGFsbCBoYWx0ZWQgdHJhdmVyc2Vycy4gQSBuaWNlIHNpbXBsaWZpY2F0aW9uIG9mIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYC4KLSogUmVuYW1lZCBgVHJhdmVyc2VyLmlzRG9uZSgpYCB0byBgVHJhdmVyc2VyLmlzSGFsdGVkKClgIGFuZCBgRE9ORWAgdG8gYEhBTFRgLiBDb25zaXN0ZW50IHdpdGggYXV0b21hdGEgdGVybWlub2xvZ3kuCi0qIFJlbW92ZWQgYFBhdGhUcmF2ZXJzZXJFeGVjdXRvcmAgYW5kIGBTaW1wbGVUcmF2ZXJzZXJFeGVjdXRvcmAgYXMgYSBzaW5nbGUgYFRyYXZlcnNlckV4ZWN1dG9yYCBjb3JyZWN0bHkgZXhlY3V0ZXMgYm90aCB0eXBlcyBvZiB0cmF2ZXJzZXJzLgotKiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgZG9lcyAicmVmbGV4aXZlIG1lc3NhZ2UgcGFzc2luZyIgdG8gcmVkdWNlIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlcmF0aW9ucyByZXF1aXJlZCB0byBleGVjdXRlIGEgdHJhdmVyc2FsLgotKiBgTWFwUmVkdWNlYCBuby1hcmd1bWVudCBjb25zdHJ1Y3RvcnMgYXJlIHByaXZhdGUgYW5kIHRodXMsIG9ubHkgZm9yIHJlZmxlY3Rpb24gYW5kIGBsb2FkU3RhdGUoKWAgdXNhZ2UuCi0qIE1hcFJlZHVjZXJzIGZvciBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgYXJlIG5vdyBzbWFydCBhYm91dCBgd2l0aCgpYCBkZWNsYXJlZCBkYXRhIHN0cnVjdHVyZXMuCi0qIFVwZGF0ZWQgYFRyYXZlcnNhbC5TaWRlRWZmZWN0c2AgdG8gdXNlICJyZWdpc3RlcmVkIHN1cHBsaWVycyIgYW5kIGl0IG5vdyB3b3JrcyBhY2NvcmRpbmdseSBpbiBib3RoIE9MVFAgYW5kIE9MQVAgZW52aXJvbm1lbnRzLgotKiBJbmNyZWFzZWQgdGhlIHNwZWVkIG9mIGBGbGF0TWFwU3RlcGAgYnkgYXBwcm94aW1hdGVseSAxLjV4LgorUGxlYXNlIHNlZSB0aGUgYXJjaGl2ZWQgPDwuL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjAueC5hc2NpaWRvYyNyZWxlYXNlLTMtMC0wLW01LCAzLjAuMC5NNSBjaGFuZ2Vsb2c+Pi4KIAogPT09IFRpbmtlclBvcCAzLjAuMC5NNCAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDIxLCAyMDE0KQogCi0qIEFkZGVkIGZlYXR1cmVzIGZvciBgVmVydGV4UHJvcGVydHlgIHVzZXIgc3VwcGxpZWQgaWRzIGFuZCByZWxhdGVkIGRhdGEgdHlwZXMuCi0qIFJlbW92ZWQgYFNpZGVFZmZlY3RDYXBgIG1hcmtlciBpbnRlcmZhY2UgYXMgdGhlcmUgaXMgb25seSBvbmUgYFNpZGVFZmZlY3RDYXBTdGVwYCBhbmQgdGh1cywgYGluc3RhbmNlb2ZgIGlzIHN1ZmZpY2llbnQuCi0qIGBQYXRoLmdldE9iamVjdHMoKWAvYFBhdGguZ2V0TGFiZWxzKClgIHJlbmFtZWQgdG8gYFBhdGgub2JqZWN0cygpYC9gUGF0aC5sYWJlbHMoKWAgdG8gYmUgaW4gbGluZSB3aXRoICJxdWVyeSBsYW5ndWFnZSIgbmFtaW5nIGNvbnZlbnRpb24uCi0qIEdyZWF0bHkgc2ltcGxpZmllZCBgR2lyYXBoSW50ZXJuYWxWZXJ0ZXhgIGR1ZSB0byBgRWxlbWVudC5ncmFwaCgpYCAtLSAxLzIgdGhlIG1lbW9yeSBmb290cHJpbnQgYW5kIHJlZHVjZWQgY29uc3RydWN0aW9uIHRpbWUuCi0qIFJlbmFtZWQgYFByb3BlcnR5LmdldEVsZW1lbnQoKWAgdG8gYFByb3BlcnR5LmVsZW1lbnQoKWAgZ2l2ZW4gdGhlICJxdWVyeSBsYW5ndWFnZSIgbmFtaW5nIGNvbnZlbnRpb24uCi0qIGBFbGVtZW50LmdyYXBoKClgIGFkZGVkIHdoaWNoIHJldHVybnMgdGhlIGBHcmFwaGAgdGhhdCB0aGUgZWxlbWVudCBpcyBjb250YWluZWQgd2l0aGluLgotKiBBZGRlZCB0ZXN0cyBmb3IgZ3JlYXRlciBjb25zaXN0ZW5jeSBhcm91bmQgaXRlcmF0aW5nIGhpZGRlbiBwcm9wZXJ0aWVzLgotKiBTaW1wbGlmaWVkIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCB3aGVyZSBvbmx5IGEgc2luZ2xlIGBUcmF2ZXJzZXJUcmFja2VyYCBleGlzdHMgZm9yIGJvdGggcGF0aC0gYW5kIHNpbXBsZS10cmF2ZXJzZXJzLgotKiBGaXhlZCBhIG1ham9yIGJ1ZyB3aGVyZSBgQXJyYXlzLmJpbmFyeVNlYXJjaGAgd2FzIGJlaW5nIHVzZWQgb24gYW4gdW5zb3J0ZWQgYXJyYXkgaW4gVGlua2VyR3JhcGggYW5kIE5lbzRqR3JhcGguCi0qIENoYW5nZWQgYENvbXB1dGVyUmVzdWx0LmdldFhYWCgpYCB0byBgZ3JhcGgoKWAgYW5kIGBtZW1vcnkoKWAgdG8gYmUgY29uc2lzdGVudCB3aXRoICJxdWVyeSBsYW5ndWFnZSIgbmFtaW5nIGNvbnZlbnRpb24uCi0qIGBUcmF2ZXJzZXIuZ2V0WFhYKClgIGNoYW5nZWQgdG8gYGxvb3BzKClgLCBgYnVsaygpYCwgYHBhdGgoKWAsIGBzaWRlRWZmZWN0cygpYCB0byBiZSBjb25zaXN0ZW50IHdpdGggInF1ZXJ5IGxhbmd1YWdlIiBuYW1pbmcgY29udmVudGlvbi4KLSogT3B0aW1pemF0aW9uIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVtcHR5IGxpc3RzIGNyZWF0ZWQgZHVlIHRvIG5vIHN0ZXAgY2xhc3MgZXhpc3RpbmcgZm9yIHJlc3BlY3RpdmUgYFRyYXZlcnNhbFN0cmF0ZWd5LmFwcGx5KClgLgotKiBBZGRlZCBgQ2FwVHJhdmVyc2FsYCBhcyBhIG1hcmtlciBpbnRlcmZhY2UgZm9yIHRoZSBgY2FwKClgIG1ldGhvZC4KLSogQWRkZWQgYHVuaW9uKClgIHdpdGggR3JhcGhDb21wdXRlciBgVW5pb25MaW5lYXJTdHJhdGVneWAuCi0qIGBUaW1lTGltaXRTdGVwYCB3YXMgbW92ZWQgdG8gYGZpbHRlci9gIHBhY2thZ2UuIEl0IHdhcyBhIG1pc3Rha2UgdGhhdCBpdCB3YXMgaW4gYHNpZGVFZmZlY3QvYC4KLSogUHJvdmlkZWQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGdlbmVyYXRpbmcgYm90aCBhICJmdWxsIiBhbmQgImNvcmUiIHNldCBvZiBqYXZhZG9jcywgd2hlcmUgImZ1bGwiIHJlcHJlc2VudHMgYWxsIGNsYXNzZXMgaW4gYWxsIHByb2plY3RzIGFuZCAiY29yZSIgaXMgdGhlICJ1c2VyIiBzdWJzZXQuCi0qIFZhbGlkYXRlZCBiaW5kaW5ncyBwYXNzZWQgdG8gR3JlbWxpbiBTZXJ2ZXIgdG8gZW5zdXJlIHRoYXQgdGhleSBkbyBub3QgbWF0Y2ggdGhlIG1vc3QgY29tbW9uIHN0YXRpY2FsbHkgaW1wb3J0ZWQgdmFsdWVzLgotKiBJZiBubyBzY3JpcHQgZW5naW5lIG5hbWUgaXMgcHJvdmlkZWQgdG8gYSBgTGFtYmRhSG9sZGVyYCBpdCBpcyBhc3N1bWVkIHRvIGJlIEdyZW1saW4tR3Jvb3Z5LgotKiBgTWFwRW1pdHRlcmAgYW5kIGBSZWR1Y2VFbWl0dGVyYCBoYXZlIGFuIGBlbWl0KHZhbHVlKWAgZGVmYXVsdCBtZXRob2Qgd2hlcmUgdGhlIGtleSBpcyB0aGUgYE1hcFJlZHVjZS5OdWxsT2JqZWN0YCBzaW5nbGV0b24uCi0qIGBUcmF2ZXJzZXIuQWRtaW5gIG5vdyBpbXBsZW1lbnRzIGBBdHRhY2hhYmxlYCBhcyB0aGUgYFRyYXZlcnNhbC5TaWRlRWZmZWN0c2AgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHRoZSBgVmVydGV4YC4KLSogTWFkZSBhIHNvbGlkIGVmZm9ydCB0byBlbnN1cmUgdGhhdCBhbGwgVGlua2VyUG9wIGtleXMgYXJlIGBHcmFwaC5TeXN0ZW1gIHRvIGxlYXZlIGBHcmFwaC5LZXlgIGZvciB1c2Vycy4KLSogVGhlIGBHcmFwaC5TeXN0ZW1gIHByZWZpeCBpcyBub3cgYF5gIGluc3RlYWQgb2YgYCUmJWAuIFNpbXBsZXIgYW5kIGVhc2llciBvbiB0aGUgYHRvU3RyaW5nKClgLWV5ZXMuCi0qIEFkZGVkIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHMuaWZQcmVzZW50KENvbnN1bWVyKWAgYXMgYSBkZWZhdWx0IGhlbHBlciBtZXRob2QuCi0qIEFkZGVkIGBwcm9maWxlKClgLXN0ZXAgd2hpY2ggcHJvdmlkZXMgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcmZvcm1hbmNlIG9mIGVhY2ggc3RlcCBpbiBhIHRyYXZlcnNhbC4KLSogTm8gbW9yZSBgQ291bnRDYXBTdGVwYCBhbmQgYENvdW50U3RlcGAsIHRoZXJlIGlzIG9ubHkgYENvdW50U3RlcGAgYW5kIGl0IGlzIGVsZWdhbnQuCi0qIENyZWF0ZWQgYSBgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneWAgd2l0aCBnb29kIGB0b1N0cmluZygpYCwgYGhhc0NvZGUoKWAsIGFuZCBgZXF1YWxzKClgIGltcGxlbWVudGF0aW9ucy4KLSogQWRkZWQgYENvdW50VHJhdmVyc2FsYCBhcyBhIG1hcmtlci1pbnRlcmZhY2Ugc3RhdGluZyB0aGF0IHRoZSBgVHJhdmVyc2FsYCBoYXMgYSBgY291bnQoKSAtPiBMb25nYCBtZXRob2QuCi0qIGBUcmF2ZXJzYWxgIG5vIGxvbmdlciBoYXMgYW55IHN0ZXAgbWV0aG9kcyBhcyBpdHMgbm90IHJlcXVpcmVkIGZvciBEU0wgaW1wbGVtZW50ZXJzIHRvIGhhdmUgImNvcmUgc3RlcHMuIgotKiBBZGRlZCAibGluZWFyaXphdGlvbiIgc3RyYXRlZ3kgZm9yIGBDaG9vc2VTdGVwYCBzbyBpdCBpcyBleGVjdXRlZCBjb3JyZWN0bHkgb24gR3JhcGhDb21wdXRlci4KLSogQWRkZWQgYEdyYXBoVHJhdmVyc2FsU3RyYXRlZ3lSZWdpc3RyeWAgd2hpY2ggaGFzIHJlc3BlY3RpdmUgZ2xvYmFsIHN0cmF0ZWdpZXMgdG8gbWFrZSB0dXJuaW5nIG9uL29mZiBzdHJhdGVnaWVzIGVhc2llci4KLSogQWRkZWQgYSBnZW5lcmljIGBCcmFuY2hTdGVwYCB0byBiZSB1c2VkIGZvciByZS13cml0aW5nICJtZXRhLXN0ZXBzIiBmb3IgZXhlY3V0aW9uIG9uIEdyYXBoQ29tcHV0ZXIuCi0qIE1vdmVkIGBKdW1wU3RlcGAsIGBVbnRpbFN0ZXBgLCBhbmQgYENob29zZVN0ZXBgIHRvIGEgbmV3IGBicmFuY2gvYCBwYWNrYWdlLgotKiBBZGRlZCB0ZXN0IGNhc2VzIHRvIHRoZSBTdHJ1Y3R1cmUgU3VpdGUgdG8gZW5mb3JjZSBjb25zaXN0ZW50IG9wZXJhdGlvbnMgb2YgcmVhZGluZyBwcm9wZXJ0aWVzIGFmdGVyIHJlbW92YWwgb2YgdGhlaXIgb3duaW5nIGBFbGVtZW50YC4KLSogR3JhcGhTT04gZm9ybWF0IGNoYW5nZSBmb3IgZnVsbCBgR3JhcGhgIHNlcmlhbGl6YXRpb24gLSBHcmFwaCB2YXJpYWJsZXMgYXJlIG5vdyBzZXJpYWxpemVkIHdpdGggdGhlIGtleSAidmFyaWFibGVzIiBhcyBvcHBvc2VkIHRvICJwcm9wZXJ0aWVzIi4KLSogUmVsYXhlZCBgR3JhcGgudG9TdHJpbmcoKWAgdGVzdCByZXF1aXJlbWVudHMgZm9yIGltcGxlbWVudGVycy4KLSogTWFkZSB0aGUgYHRvU3RyaW5nYCBvcGVyYXRpb25zIGluIGBHcmFwaFN0cmF0ZWd5YCBjb25zaXN0ZW50LgotKiBBZGRlZCBgVmVydGV4RmVhdHVyZXMuc3VwcG9ydHNSZW1vdmVQcm9wZXJ0eWAuCi0qIEFkZGVkIGBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzLnN1cHBvcnRzUmVtb3ZlUHJvcGVydHlgLgotKiBBZGRlZCBgRWRnZUZlYXR1cmVzLnN1cHBvcnRzUmVtb3ZlUHJvcGVydHlgLgotKiBBZGRlZCBgVmVydGV4RmVhdHVyZXMuc3VwcG9ydHNSZW1vdmVWZXJ0aWNlc2AuCi0qIEFkZGVkIGBFZGdlRmVhdHVyZXMuc3VwcG9ydHNSZW1vdmVFZGdlc2AuCi0qIFZlbmRvcnMgc2hvdWxkIG5vdyBnZXQgYSBjbGVhciBlcnJvciB3aGVuIG1pcy1zcGVsbGluZyBzb21ldGhpbmcgaW4gYW4gYEBPcHRPdXRgIChvciBtb3JlIGxpa2VseSBpZiBhIHRlc3QgbmFtZSBjaGFuZ2VzKSBhbmQgaXQgbm93IHdvcmtzIGFsbCB0aGUgdGVzdCBzdWl0ZXMuCi0qIEFsbCBwbHVnaW5zIG5vdyBoYXZlIGEgZGVmYXVsdCBwcmVmaXggb2YgInRpbmtlcnBvcC4iIGFzIGEgbmFtZXNwYWNlLgotKiBgR3JhcGhDb21wdXRlcmAgbm93IGV4ZWN1dGVzIGEgYFNldDxNYXBSZWR1Y2U+YCBhbmQgYGhhc2hDb2RlKClgL2BlcXVhbHMoKWAgd2VyZSBpbXBsZW1lbnRlZCBmb3IgZXhpc3RpbmcgYE1hcFJlZHVjZWAgaW1wbGVtZW50YXRpb25zLgotKiBDaGFuZ2VkIGBDb250YWlucy5pbi9ub3RpbmAgdG8gYENvbnRhaW5zLndpdGhpbi93aXRob3V0YCBhcyBgaW5gIGlzIGEgcmVzZXJ2ZWQgdGVybSBpbiBtb3N0IGxhbmd1YWdlcyAoaW5jbHVkaW5nIEphdmEgYW5kIEdyb292eSkuCi0qIEFkZGVkIGhlbHBlciBtZXRob2RzIGZvciBsb2FkaW5nIGRhdGEgaW50byBjb2xsZWN0aW9ucyBpbiBgVHJhdmVyc2FsSGVscGVyYC4KLSogQ29yZSBgVHJhdmVyc2FsYCBtZXRob2RzIGFyZSBzbWFydCBhYm91dCBidWxraW5nIC0tIGUuZy4gYGl0ZXJhdGUoKWAsIGBmaWxsKClgLCBgcmVtb3ZlKClgLCBldGMuCi0qIGBHcm91cEJ5U3RlcGAgYW5kIGBHcm91cEJ5TWFwUmVkdWNlYCBsZXZlcmFnZSBgQnVsa1NldGAgYXMgdGhlIGRlZmF1bHQgZ3JvdXAgZGF0YSBzdHJ1Y3R1cmUuCi0qIGBFbGVtZW50Lkl0ZXJhdG9yYCBoYXMgcmVuYW1lZCBtZXRob2RzIHNvIGltcGxlbWVudGVycyBjYW4gZG8gYE15RWxlbWVudCBpbXBsZW1lbnRzIEVsZW1lbnQsIEVsZW1lbnQuSXRlcmF0b3JzYC4KLSogUmVuYW1lZCBgTWVzc2FnZVR5cGUuR2xvYmFsYCBhbmQgYE1lc3NhZ2VUeXBlLkxvY2FsYCBjcmVhdG9ycyBmcm9tIGBvZigpYCB0byBgdG8oKWAgYXMgaXQgbWFrZXMgbW9yZSBzZW5zZSB0byBzZW5kIG1lc3NhZ2VzIGB0bygpYC4KLSogV2l0aCBgVHJhdmVyc2VyLmdldC9zZXRCdWxrKClgIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgYFRyYXZlcnNlck1lc3NhZ2VgLiBUaGUgYFRyYXZlcnNlcmAgaXMgbm93IHRoZSBtZXNzYWdlIGluIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYC4KLSogUHJvdmlkZWQgc3RhdGljIGBtYWtlKClgIG1ldGhvZHMgZm9yIGNvbnN0cnVjdGluZyBgUGF0aGAgaW1wbGVtZW50YXRpb25zLgotKiBQcm92aWRlZCBhIG1vcmUgc3BhY2UvdGltZSBlZmZpY2llbnQgYWxnb3JpdGhtIGZvciBgUGF0aC5pc1NpbXBsZSgpYC4KLSogVGhlIGBKdW1wU3RlcGAgR3JhcGhDb21wdXRlciBhbGdvcml0aG0gYFF1ZXVlYCBpcyBub3cgYSBgVHJhdmVyc2VyU2V0YC4KLSogYEFnZ3JlZ2F0ZVN0ZXBgIGFuZCBgU3RvcmVTdGVwYCBub3cgdXNlIGBCdWxrU2V0YCBhcyB0aGVpciBkZWZhdWx0IGJhY2tpbmcgYENvbGxlY3Rpb25gIChtdWNoIG1vcmUgc3BhY2UvdGltZSBlZmZpY2llbnQpLgotKiBBZGRlZCBgQnVsa1NldGAgd2hpY2ggaXMgbGlrZSBgVHJhdmVyc2VyU2V0YCBidXQgZm9yIGFyYml0cmFyeSBvYmplY3RzIChpLmUuIGEgd2VpZ2h0ZWQgc2V0KS4KLSogYFVucm9sbEp1bXBTdHJhdGVneWAgaXMgbm8gbG9uZ2VyIGEgZGVmYXVsdCBzdHJhdGVneSBhcyBpdCBpcyBsZXNzIGVmZmljaWVudCB3aXRoIHRoZSBpbmNsdXNpb24gb2YgYFRyYXZlcnNlclNldGAuCi0qIEludHJvZHVjZWQgYFRyYXZlcnNlclNldGAgd2l0aCBidWxrIHVwZGF0aW5nIGNhcGFiaWxpdGllcy4gTGlrZSBPTEFQLCBPTFRQIGxvb3BpbmcgaXMgbm93IGxpbmVhciBzcGFjZS90aW1lIGNvbXBsZXhpdHkuCi0qIFRpbmtlckdyYXBoJ3MgTWFwUmVkdWNlIGZyYW1ld29yayBpcyBub3cgdGhyZWFkIHNhZmUgd2l0aCBhIHBhcmFsbGVsIGV4ZWN1dGlvbiBpbXBsZW1lbnRhdGlvbi4KLSogQWRkZWQgYSBkZWZhdWx0IGBUcmF2ZXJzZXIuYXNBZG1pbigpYCBtZXRob2QgYXMgYSB0eXBlY2FzdCBjb252ZW5pZW5jZSB0byBgVHJhdmVyc2VyLkFkbWluYC4KLSogUmVuYW1lZCBgVHJhdmVyc2VyLlN5c3RlbWAgdG8gYFRyYXZlcnNlci5BZG1pbmAgYXMgdG8gbm90IGNhdXNlIGBqYXZhLmxhbmcuU3lzdGVtYCByZWZlcmVuY2UgaXNzdWVzLgotKiBSZW5hbWVkIGBNZW1vcnkuQWRtaW5pc3RyYXRpdmVgIHRvIGBNZW1vcnkuQWRtaW5gIHRvIG1ha2UgaXQgc2hvcnRlciBhbmQgY29uc2lzdGVudCB3aXRoIGBUcmF2ZXJzZXIuQWRtaW5gLgotKiBGaXhlZCBhIFRpbmtlckdyYXBoIGJ1ZyBhcm91bmQgdXNlciBzdXBwbGllZCB2ZXJ0ZXggcHJvcGVydHkgaWRzLgotKiBNb3N0IGBTdGVwYCBjbGFzc2VzIGFyZSBub3cgZGVmaW5lZCBhcyBgcHVibGljIGZpbmFsIGNsYXNzYCB0byBwcmV2ZW50IGluaGVyaXRhbmNlLgotKiBgU2h1ZmZsZVN0ZXBgIG5vdyBleHRlbmRzIGBCYXJyaWVyU3RlcGAgd2hpY2ggZW5hYmxlcyBzZW1hbnRpY2FsbHkgY29ycmVjdCBzdGVwLXNpZGVFZmZlY3RzLgotKiBMZXZlcmFnZWQgYFRyYXZlcnNlci5nZXRCdWxrKClgIGNvbnNpc3RlbnRseSB0aHJvdWdob3V0IGFsbCBzdGVwcy4KK1BsZWFzZSBzZWUgdGhlIGFyY2hpdmVkIDw8Li9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4wLnguYXNjaWlkb2MjcmVsZWFzZS0zLTAtMC1tNCwgMy4wLjAuTTQgY2hhbmdlbG9nPj4uCiAKID09PSBUaW5rZXJQb3AgMy4wLjAuTTMgKFJlbGVhc2UgRGF0ZTogT2N0b2JlciA2LCAyMDE0KQogCi0qIEFsbCBgU3RlcGAgZmllbGRzIGFyZSBub3cgYHByaXZhdGVgL2Bwcm90ZWN0ZWRgIHdpdGggcmVzcGVjdGl2ZSBnZXR0ZXJzIGFzIGN1cnJlbnRseSBuZWVkZWQgYW5kIHdpbGwgYmUgYWRkZWQgdG8gYXMgbmVlZGVkLgotKiBHcmVtbGluIFNlcnZlciBubyBsb25nZXIgaGFzIHRoZSBgdHJhdmVyc2VgIG9wZXJhdGlvbiBhcyBsYW1iZGFzIGFyZW4ndCByZWFsbHkgc2VyaWFsaXplZC4KLSogYFBhdGhgIGlzIG5vdyBhbiBpbnRlcmZhY2Ugd2l0aCBgSW1tdXRhYmxlUGF0aGAgYW5kIGBNdXRhYmxlUGF0aGAgYXMgaW1wbGVtZW50YXRpb25zICgyeCBzcGVlZHVwIG9uIHBhdGggY2FsY3VsYXRpb25zKS4KLSogYFRyYXZlcnNlcmAgbm93IGltcGxlbWVudHMgYENvbXBhcmFibGVgLiBJZiB0aGUgdW5kZXJseWluZyBvYmplY3QgZG9lc24ndCBpbXBsZW1lbnQgYENvbXBhcmFibGVgLCB0aGVuIGEgcnVudGltZSBleGNlcHRpb24uCi0qIEFkZGVkIGFic3RyYWN0IGBCYXJyaWVyU3RlcGAgd2hpY2ggZ3JlYXRseSBzaW1wbGlmaWVzIGltcGxlbWVudGluZyBiYXJyaWVycyBsaWtlIGBBZ2dyZWdhdGVTdGVwYCwgYE9yZGVyU3RlcGAsIGV0Yy4KLSogYFNlbGVjdFN0ZXBgIGlzIG5vdyBpbnRlbGxpZ2VudCBhYm91dCB3aGVuIHRvIHRyaWdnZXIgcGF0aCBjb21wdXRhdGlvbnMgYmFzZWQgb24gbGFiZWwgc2VsZWN0b3JzIGFuZCBiYXJyaWVycy4KLSogYFRgIG5vIGxvbmdlciBoYXMgYGVxYCwgYG5lcWAsIGBsdGAsIGBpbmAsIGV0Yy4gUmVuYW1lZCBhbGwgcmVzcGVjdGl2ZSBlbnVtcyBhbmQgd2l0aCBgc3RhdGljIGltcG9ydGAsIGdvb2QgaW4gY29uc29sZSAoZS5nLiBgQ29tcGFyZS5lcWApLgotKiBBZGRlZCBgT3JkZXJgIGVudW0gd2hpY2ggcHJvdmlkZXMgYE9yZGVyLmRlY3JgIGFuZCBgT3JkZXIuaW5jcmAuCi0qIGBUcmF2ZXJzZXIubG9vcHNgIGFuZCBgSnVtcC5sb29wc2AgYXJlIG5vdyBzaG9ydHMgKGAzMjc2N2AgbWF4LWxvb3BzIGlzIHByb2JhYmx5IHN1ZmZpY2llbnQgZm9yIDk5Ljk5OTklIG9mIHVzZSBjYXNlcykuCi0qIGBUcmF2ZXJzZXIuYnVsa2AgZXhpc3RzIHdoaWNoIGlzIGhvdyBtYW55IGluc3RhbmNlcyBkb2VzIHRoZSB0cmF2ZXJzZXIgcmVwcmVzZW50LiBGb3IgdXNlIGluIGdyb3VwaW5nIHdpdGggYnVsayBjb21wdXRhdGlvbnMuCi0qIEdyZWF0bHkgc2ltcGxpZmllZCBzaWRlRWZmZWN0IHN0ZXBzIHdoZXJlIHRoZXJlIGlzIG5vIGRpc3RpbmN0aW9uIGJldHdlZW4gT0xBUCB2cy4gT0xUUCAoZnJvbSB0aGUgYFN0ZXBgIHBlcnNwZWN0aXZlKS4KLSogUmVtb3ZlZCB0aGUgbmVlZCBmb3IgYEJ1bGthYmxlYCBhbmQgYFZlcnRleENlbnRyaWNgIG1hcmtlciBpbnRlcmZhY2VzIGluIHByb2Nlc3MgQVBJLgotKiBSZW5hbWVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbiBHaXJhcGgtR3JlbWxpbiB0byBiZSBjb25zaXN0ZW50IHdpdGggYSBgZ2lyYXBoLmdyZW1saW5gLXByZWZpeC4KLSogTWFkZSBpdCBwb3NzaWJsZSB0byBwYXNzIGEgYFNjcmlwdEVuZ2luZWAgbmFtZSBhbmQgc3RyaW5nIHNjcmlwdCBpbiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgYW5kIGBMYW1iZGFWZXJ0ZXhQcm9ncmFtYC4KLSogTWFkZSBgVGlua2VyR3JhcGhgIGEgcGx1Z2luIGZvciB0aGUgQ29uc29sZSBhcyBpdCBpcyBubyBsb25nZXIgYSBkaXJlY3QgZGVwZW5kZW5jeSBpbiBgZ3JlbWxpbi1ncm9vdnlgLgotKiBBZGRlZCBmZWF0dXJlcyBmb3Igc3VwcG9ydGluZyB0aGUgYWRkaXRpb24gb2YgcHJvcGVydGllcyB2aWEgYEVsZW1lbnQucHJvcGVydHkoU3RyaW5nLE9iamVjdClgLgotKiBgR2lyYXBoR3JhcGhgIE9MVFAgdGVzdGVkIGFnYWluc3QgR3JlbWxpbi1KYXZhOCBhbmQgR3JlbWxpbi1Hcm9vdnkgLS0gT0xBUCB0ZXN0ZWQgYWdhaW5zdCBHcmVtbGluLUdyb292eS4KLSogYE5lbzRqR3JhcGhgIGlzIG5vdyB0ZXN0ZWQgYWdhaW5zdCBib3RoIEdyZW1saW4tSmF2YTggYW5kIEdyZW1saW4tR3Jvb3Z5LgotKiBSZW5hbWVkIHRoZSB0ZXN0IGNhc2VzIGluIGBQcm9jZXNzVGVzdFN1aXRlYCB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgR3JlbWxpbiBsYW5ndWFnZSB2YXJpYW50cy4KLSogQWRkZWQgYSBgZ3JlbWxpbi1ncm9vdnktdGVzdGAgc3VpdGUgdGhhdCBjYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSBpbXBsZW1lbnRhdGlvbnMgYWdhaW5zdCB0aGUgR3Jvb3Z5IHZhcmlhbnQgb2YgR3JlbWxpbi4KLSogYFRpbmtlckdyYXBoYCBpcyBubyBsb25nZXIgc2VyaWFsaXphYmxlLCB1c2UgYSBgR3JhcGhSZWFkZXJgL2BHcmFwaFdyaXRlcmAgdG8gc2VyaWFsaXplIHRoZSBncmFwaCBkYXRhLgotKiBSZW1vdmVkIGBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZWAgb24gbnVtZXJvdXMgY2xhc3NlcyB0byBlbnN1cmUgc2FmZXR5IGFuZCBwcm9wZXIgdXNhZ2Ugb2YgdXRpbGl0aWVzIGZvciBjbG9uaW5nLgotKiBgVHJhdmVyc2FsYCBub3cgaW1wbGVtZW50cyBgQ2xvbmVhYmxlYCBhcyB0aGlzIGlzIHRoZSBtZWFucyB0aGF0IGludGVyLUpWTSB0aHJlYWRzIGFyZSBhYmxlIHRvIGdldCBzaWJsaW5nIGBUcmF2ZXJzYWxzYC4KLSogQ3JlYXRlZCAiaW50ZWdyYXRpb24iIHRlc3QgZm9yIGBOZW80akdyYXBoYCB0aGF0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUgd2l0aCBtdWx0aS9tZXRhIHByb3BlcnR5IGZlYXR1cmVzIHR1cm5lZCBvZmYuCi0qIEFkZGVkIGBHcmFwaFN0cmF0ZWd5YCBtZXRob2RzIGZvciBgVmVydGV4UHJvcGVydHlgLgotKiBDb252ZXJ0ZWQgdGhlIGBpZGAgZGF0YSB0eXBlIGZyb20gc3RyaW5nIHRvIGludGVnZXIgaW4gdGhlIEdyYXRlZnVsIERlYWQgc2FtcGxlIGRhdGEuCi0qIFJlbW92ZWQgYWxsIG5vdGlvbnMgb2Ygc2VyaWFsaXphYmxlIGxhbWJkYXMgYXMgdGhpcyBpcyBhIG1pc2NvbmNlcHRpb24gYW5kIHNob3VsZCBub3QgYmUgcGFydCBvZiBUaW5rZXJQb3AuCi0qIEdyZWF0bHkgc2ltcGxpZmllZCBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgd2l0aCB0aHJlZSBhcmd1bWVudHM6IGEgYFRyYXZlcnNhbDxTdXBwbGllcj5gLCBgQ2xhc3M8VHJhdmVyc2FsPFN1cHBsaWVyPj5gLCBvciBhIHNjcmlwdCBzdHJpbmcgd2l0aCBgU2NyaXB0RW5naW5lYCBuYW1lLgotKiBBZGRlZCBgVHJhdmVyc2FsU2NyaXB0YCBpbnRlcmZhY2Ugd2l0aCBgR3Jvb3Z5VHJhdmVyc2FsU2NyaXB0YCBhcyBhbiBpbnN0YW5jZS4gVG8gYmUgdXNlZCBieSBPTEFQIGVuZ2luZXMgYW5kIGFueSBsYW5ndWFnZSB2YXJpYW50IChlLmcuIGdyZW1saW4tc2NhbGEsIGdyZW1saW4tanMsIGV0Yy4pLgotKiBgVW50aWxTdGVwYCBub3cgbGV2ZXJhZ2VzIGBVbnJvbGxKdW1wU3RyYXRlZ3lgIGFjY29yZGluZ2x5LgotKiBGaXhlZCBhIGJ1ZyB3aGVyZSB0aGUgYHRvU3RyaW5nKClgIG9mIGBUcmF2ZXJzYWxgIHdhcyBiZWluZyBoaWphY2tlZCBieSBgU3VnYXJHcmVtbGluUGx1Z2luYC4KLSogRml4ZWQgY29tcGlsYXRpb24gYnVnIGluIGBVbnRpbFN0ZXBgIHRoYXQgaXMgcmVhbGl6ZWQgd2hlbiB1c2VkIGluIG11bHRpLW1hY2hpbmUgT0xBUC4KLSogU2ltcGxpZmllZCBgRW51bWVyYXRvcmAgYW5kIGltcGxlbWVudGF0aW9ucyBmb3IgYE1hdGNoU3RlcGAuCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTAtbTMsIDMuMC4wLk0zIGNoYW5nZWxvZz4+LgogCiA9PT0gVGlua2VyUG9wIDMuMC4wLk0yIChSZWxlYXNlIERhdGU6IFNlcHRlbWJlciAyMywgMjAxNCkKIAotKiBBZGRlZCBhbiBleGhhdXN0IGBJbm5lckpvaW5FbnVtZXJhdG9yYCBmaXggaW4gYE1hdGNoU3RlcGAgdG8gZ2V0IGFsbCBzb2x1dGlvbnMgY29ycmVjdGx5LgotKiBgTmVvNGpHcmFwaGAgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgb3IgZGlzYWxsb3cgbWV0YS0gYW5kIG11bHRpLXByb3BlcnRpZXMuCi0qIEFkZGVkIGB1bnRpbCgpYC1zdGVwIGFzIGEgc2ltcGxlciB3YXkgdG8gZXhwcmVzcyB3aGlsZS1kbyBsb29waW5nIHdoaWNoIGNvbXBpbGVzIGRvd24gdG8gYSBganVtcCgpYC1zdGVwIGVxdWl2YWxlbnQuCi0qIEFkZGVkICJUaGUgQ3JldyIgKGBDUkVXYCkgdG95IGdyYXBoIHdoaWNoIGNvbnRhaW5zIG11bHRpLXByb3BlcnRpZXMsIG1ldGEtcHJvcGVydGllcywgZ3JhcGggdmFyaWFibGVzLCBoaWRkZW5zLCBldGMuCi0qIElmIHRoZSBHaXJhcGggam9iIGZhaWxzLCB0aGVuIHRoZSBzdWJzZXF1ZW50IGBNYXBSZWR1Y2VgIGpvYnMgd2lsbCBub3QgZXhlY3V0ZS4KLSogQWRkZWQgYEdyYXBoLlN5c3RlbWAgY2xhc3Mgd2hpY2ggZ2VuZXJhdGVzIGtleXMgcHJlZml4ZWQgd2l0aCBgJSYlYCB3aGljaCBpcyBjb25zaWRlcmVkIHRoZSB2ZW5kb3IgbmFtZXNwYWNlIGFuZCBub3QgYWxsb3dlZCBieSB1c2Vycy4KLSogQWRkZWQgYFJlZmVyZW5jZWRWZXJ0ZXhgIChldGMuIGZvciBhbGwgZ3JhcGggb2JqZWN0IHR5cGVzKSBmb3IgbGlnaHR3ZWlnaHQgbWVzc2FnZSBwYXNzaW5nIG9mIGdyYXBoIG9iamVjdCBpZHMuCi0qIGBULipgIG5vdyBoYXMgYGxhYmVsYCwgYGlkYCwgYGtleWAsIGB2YWx1ZWAgYW5kIG5vIGxvbmdlciBhcmUgdGhlc2UgYFN0cmluZ2AgcmVwcmVzZW50YXRpb25zIHJlc2VydmVkIGluIFRpbmtlclBvcC4KLSogYFRyYXZlcnNlcmAgbm93IGhhcyBhIHRyYW5zaWVudCByZWZlcmVuY2UgdG8gYFRyYXZlcnNhbC5TaWRlRWZmZWN0c2AuCi0qICJEZXRhY2hlZCIgY2xhc3NlcyBhcmUgbm93IHRlc3RlZCBieSB0aGUgc3RhbmRhcmQgdGVzdCBzdWl0ZS4KLSogQ29tcGFydG1lbnRhbGl6ZWQgYFRyYXZlcnNlcmAgaW50ZXJmYWNlIHNvIHRoZXJlIGlzIG5vdyBhIGBUcmF2ZXJzZXIuU3lzdGVtYCBzdWItaW50ZXJmYWNlIHdpdGggbWV0aG9kcyB0aGF0IHVzZXJzIHNob3VsZG4ndCBjYWxsLgotKiBBZGRlZCBgT3JkZXJCeVN0ZXBgIHdoaWNoIG9yZGVycyBgRWxlbWVudHNgIGFjY29yZGluZyB0byB0aGUgdmFsdWUgb2YgYSBwcm92aWRlZCBrZXkuCi0qIDJ4IHNwZWVkIGluY3JlYXNlIG9uIHN0ZXBzIHRoYXQgcmVseSBoZWF2aWx5IG9uIGBFeHBhbmRhYmxlU3RlcEl0ZXJhdG9yYCB3aXRoIG1hc3NpdmUgbWVtb3J5IGZvb3RwcmludCByZWR1Y3Rpb24gYXMgd2VsbC4KLSogQWRkZWQgYFZlcnRleFByb3BlcnR5PFY+YCBhcyB0aGUgcHJvcGVydHkgdHlwZSBmb3IgdmVydGljZXMgLS0gcHJvdmlkZXMgbXVsdGktcHJvcGVydGllcyBhbmQgcHJvcGVydGllcyBvbiBwcm9wZXJ0aWVzIGZvciB2ZXJ0aWNlcy4KLSogQ2hhbmdlZCBgVmVydGV4UHJvZ3JhbWAgc3VjaCB0aGF0IGBnZXRFbGVtZW50Q29tcHV0ZUtleXMoKWAgaXMgc2ltcGx5IGEgYFNldDxTdHJpbmc+YC4KLSogU2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgZm9ybWF0IG9mIHRoZSBgUmVzcG9uc2VNZXNzYWdlYCBmb3IgR3JlbWxpbiBTZXJ2ZXIgLSB0aGVzZSBjaGFuZ2VzIGJyZWFrIGV4aXN0aW5nIGNsaWVudHMuCi0qIENsb3NlIGFueSBvcGVuIHRyYW5zYWN0aW9ucyBvbiBhbnkgY29uZmlndXJlZCBgR3JhcGhgIHdoZW4gYSBzZXNzaW9uIGluIEdyZW1saW4gU2VydmVyIGlzIGtpbGxlZC4KLSogR3JhdGVmdWwgRGVhZCBHcmFwaCBub3cgdXNlcyB2ZXJ0ZXggbGFiZWxzIGluc3RlYWQgb2YgInR5cGUiIHByb3BlcnRpZXMuCi0qIFRoZXJlIGlzIG5vdyBhIGBHcmFwaENvbXB1dGVyU3RyYXRlZ3lgIGFuZCBgRW5naW5lRGVwZW5kZW50YCBtYXJrZXIgaW50ZXJmYWNlIHRvIGFsbG93IHN0ZXBzIHRvIGRlY2lkZSB0aGVpciBhbGdvcml0aG0gZGVwZW5kaW5nIGlmIHRoZXkgYXJlIE9MQVAgb3IgT0xUUC4KLSogQSBsYWJlbGVkIHN0ZXAgbm93IHN0b3JlcyBpdHMgY3VycmVudCB0cmF2ZXJzZXIgdmFsdWUgaW4gYFRyYXZlcnNhbC5TaWRlRWZmZWN0c2AgKG5vIGxvbmdlciBjYW4gc2lkZUVmZmVjdEtleXMgYW5kIHN0ZXAgbGFiZWxzIGJlIHRoZSBzYW1lKS4KLSogYEdyYXBoRmFjdG9yeWAgc3VwcG9ydCBmb3Igb3BlbmluZyBhIGBHcmFwaGAgd2l0aCBtdWx0aXBsZSBgR3JhcGhTdHJhdGVneWAgaW5zdGFuY2VzIC0gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmF0ZWdpZXMgdGhleSBhcmUgd3JhcHBlZCBpbiBvcmRlciB2aWEgYFNlcXVlbmNlR3JhcGhTdHJhdGVneWAuCi0qIFRoZSByZXN1bHQgdHlwZSBmb3IgcmVzdWx0IHRlcm1pbmF0aW9uIG1lc3NhZ2VzIHJldHVybmVkIGZyb20gR3JlbWxpbiBTZXJ2ZXIgaXMgbm93IHNldCB0byAibm8gY29udGVudCIuCi0qIFRoZSBgbWF4Q29udGVudExlbmd0aGAgc2V0dGluZyBmb3IgR3JlbWxpbiBEcml2ZXIgbm93IGJsb2NrcyBpbmNvbWluZyBmcmFtZXMgdGhhdCBhcmUgdG9vIGxhcmdlLgotKiBBZnRlciBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGFyZSBleGVjdXRlZCBpbiBHcmVtbGluIFNlcnZlciwgdGhlIGBHcmFwaGAgaW5zdGFuY2VzIGFyZSByZS1ib3VuZCBiYWNrIHRvIHRoZWlyIGdsb2JhbCByZWZlcmVuY2VzLCB0aHVzIGFsbG93aW5nIGBHcmFwaFN0cmF0ZWd5YCBpbml0aWFsaXphdGlvbiBvciBldmVuIGR5bmFtaWMgYEdyYXBoYCBjcmVhdGlvbiB0aHJvdWdoIHNjcmlwdHMuCi0qIEFkZGVkICJNb2Rlcm4iIGdyYXBoIGJhY2sgd2hpY2ggaXMgYmFzaWNhbGx5IHRoZSAiQ2xhc3NpYyIgZ3JhcGggd2l0aCBkb3VibGUgdmFsdWVzIGZvciB0aGUgIndlaWdodCIgcHJvcGVydHkgb24gZWRnZXMgYW5kIG5vbi1kZWZhdWx0IHZlcnRleCBsYWJlbHMuCi0qIGBUcmF2ZXJzYWwuYWRkU3RlcCgpYCBpcyBub3cgaGFyZCB0eXBlZCBzbyB0eXBlIGNhc3RpbmcgaXNuJ3QgcmVxdWlyZWQgYW5kIHRyYXZlcnNhbCBBUElzIGxvb2sgY2xlYW4uCi0qIENoYW5nZWQgdGhlIGhpZGRlbiBrZXkgcHJlZml4IGZyb20gYCUkJWAgdG8gYH5gIGluIGBHcmFwaC5LZXkuaGlkZSgpYC4KLSogQWRkZWQgYGhhcyhsYWJlbCxrZXkscHJlZGljYXRlLHZhbHVlKWAgdG8gYWxsb3cgZm9yIGBoYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpYC4gVmFyaW91cyBvdmVybG9hZGVkIG1ldGhvZHMgcHJvdmlkZWQuCi0qIFVwZGF0ZSB0byB0cmF2ZXJzYWwgQVBJIHdoZXJlIGlmIGEgYFNGdW5jdGlvbjxTLD8+YCB3YXMgcmVxdWlyZWQsIGJ1dCBjYW4gcHJvY2VzcyBhIGBUcmF2ZXJzZXI8Uz5gLCB0aGVuIHRoZSBmdW5jdGlvbiBpcyBgU0Z1bmN0aW9uPFRyYXZlcnNlcjxTPiw/PmAuCi0qIEFkZGVkIGBXaGVyZVN0ZXBgIGFzIGEgd2F5IHRvIGZ1cnRoZXIgY29uc3RyYWluIGBzZWxlY3QoKWAgYW5kIGBtYXRjaCgpYC4KLSogRXh0ZW5zaXZlIHdvcmsgb24gYEdpcmFwaE1lbW9yeWAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEdpcmFwaCBhZ2dyZWdhdG9ycy4KLSogSWYgdGhlIGlucHV0IHBhdGggb2YgYSBgR2lyYXBoR3JhcGhDb21wdXRlcmAgZG9lcyBub3QgZXhpc3QsIGZhaWx1cmUgaGFwcGVucyBwcmlvciB0byBqb2Igc3VibWlzc2lvbi4KLSogYFN1Z2FyUGx1Z2luYCBub3cgaGFzIGFsbCBpbmVmZmljaWVudCBtZXRob2RzIGFuZCBHcmVtbGluLUdyb292eSBwcm9wZXIgaXMgb25seSBlZmZpY2llbnQgR3Jvb3Z5IHRlY2huaXF1ZXMuCi0qIFByZXZlbnRlZCBjb25jdXJyZW5jeSBwcm9ibGVtcyBieSBvbmx5IG1vZGlmeWluZyBiaW5kaW5ncyB3aXRoaW4gdGhlIHNhbWUgdGhyZWFkIG9mIGV4ZWN1dGlvbiBpbiB0aGUgYEdyZW1saW5FeGVjdXRvcmAuCi0qIENhbGxzIHRvIGB1c2VgIG9uIHRoZSBgRGVwZW5kZW5jeU1hbmFnZXJgIG5vdyByZXR1cm4gdGhlIGxpc3Qgb2YgYEdyZW1saW5QbHVnaW5gIGluc3RhbmNlcyB0byBpbml0aWFsaXplIGluc3RlYWQgb2YganVzdCBpbml0aWFsaXppbmcgdGhlbSBhdXRvbWF0aWNhbGx5IGJlY2F1c2UgaXQgY2F1c2VzIHByb2JsZW1zIHdpdGggYFNjcmlwdEVuZ2luZWAgc2V0dXAgaWYgYSBwbHVnaW4gcmVxdWlyZXMgYSBzY3JpcHQgdG8gYmUgZXZhbHVhdGVkIGFuZCBhIHJlcXVpcmVkIGRlcGVuZGVuY3kgaXMgbm90IHlldCBsb2FkZWQuCi0qIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgIGhhcyBgZ2V0R3JhcGgoKWAsIGBzZXRHcmFwaCgpYCwgYW5kIGByZW1vdmVHcmFwaCgpYCBkZWZhdWx0IGhlbHBlcnMuCi0qIGBUcmF2ZXJzYWwuTWVtb3J5YCAtPiBgVHJhdmVyc2FsLlNpZGVFZmZlY3RzYCBhbmQgYEdyYXBoQ29tcHV0ZXIuU2lkZUVmZmVjdHNgIC0+IGBHcmFwaENvbXB1dGVyLk1lbW9yeWAuCi0qIGBTdHJhdGVneVdyYXBwZWRWZXJ0ZXhgIGFuZCBgU3RyYXRlZ3lXcmFwcGVkRWRnZWAgcHJvcGVybHkgd3JhcCBgRWxlbWVudGAgb2JqZWN0cyByZXR1cm5lZCBmcm9tIG5vbi10cmF2ZXJzYWwgYmFzZWQgbWV0aG9kcy4KLSogR3JlbWxpbi1TZXJ2ZXIgbm93IHNlbmRzIGEgc2luZ2xlIHdyaXRlIHdpdGggc3RhdHVzIDIwMCBmb3IgT2JqZWN0IGFuZCBlbXB0eSByZXNwb25zZSBtZXNzYWdlcy4KLSogYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIGFsbG93cyBpbXBvcnRzIHRvIHJlLWltcG9ydCBkZXBlbmRlbmNpZXMgYWRkZWQgdmlhICJ1c2UiLgotKiBDaGFuZ2VkIG9yZGVyIGluIHdoaWNoIHRoZSBgR3JlbWxpbkV4ZWN1dG9yYCBpcyBpbml0aWFsaXplZCBzdWNoIHRoYXQgZGVwZW5kZW5jeSBsb2FkaW5nIHZpYSAidXNlIiBhcmUgaGFuZGxlZCBmaXJzdCB3aGljaCBmaXhlcyBwcm9ibGVtcyB3aXRoIHN0YXJ0aW5nIEdyZW1saW4gU2VydmVyIHdpdGggYGdyZW1saW4tc2VydmVyLW5lbzRqLnlhbWxgLgotKiBDb3JyZWN0ZWQgaXNzdWVzIHdpdGggdGhlICJicmFuY2ggZmFjdG9yIiByZWxhdGVkIHRyYXZlcnNhbHMgdW5kZXIgYFN1YmdyYXBoU3RyYXRlZ3lgLiAgVGhpcyBjaGFuZ2UgYWxzbyBhbHRlcmVkIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGBTdWJncmFwaFN0cmF0ZWd5YCBhIGJpdCBhcyBpdCBiZWNhbWUgbW9yZSByZXN0cmljdGl2ZSBhcm91bmQgYEVkZ2VgIGluY2x1c2lvbiAocmVxdWlyZXMgYm90aCB2ZXJ0aWNlcyB0byBiZSBpbiB0aGUgc3ViZ3JhcGgpLgotKiBUaGUgR2VwaGkgUGx1Z2luIG5vdyB2aXN1YWxpemVzIHRyYXZlcnNhbHMgYW5kIGhhcyBudW1lcm91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuCi0qIEFkZGVkIG1vcmUgc3BlY2lmaWMgZmVhdHVyZXMgYXJvdW5kIHRoZSB0eXBlcyBvZiAiaWRlbnRpZmllcnMiIGEgZ3JhcGggY2FuIHN1cHBvcnQuCi0qIEFkZGVkIGEgbmV3IHRlc3QgZ3JhcGggY2FsbGVkIGBNT0RFUk5gIHRoYXQgaXMgY29weSBvZiB0aGUgYENMQVNTSUNgIGdyYXBoLCBidXQgcmVwcmVzZW50cyBmbG9hdHMgYXMgZG91Ymxlcy4gIFRoaXMgZ3JhcGggd2lsbCBiZSB0aGUgZGVmYXVsdCBncmFwaCBmb3IgdGVzdGluZyBnb2luZyBmb3J3YXJkLgotKiBGaXggYnVnIGluIGBOZW80akdyYXBoYCB0aGF0IHdhcyBub3QgcHJvY2Vzc2luZyBtdWx0aXBsZSB2ZXJ0ZXggbGFiZWxzIHByb3Blcmx5IHdoZW4gZG9pbmcgYSBgaGFzKClgIHN0ZXAgd2l0aCBgSU5gLgotKiBDaGFuZ2VkIHNlbWFudGljcyBvZiBgQExvYWRHcmFwaFdpdGhgIGluIGdyZW1saW4tdGVzdCB0byBvbmx5IHJlZmVyIHRvIHRoZSBhYmlsaXR5IG9mIGEgdGVzdCBpbXBsZW1lbnRhdGlvbiB0byBwcm9jZXNzIHRoZSBkYXRhIHR5cGVzIG9mIHRoZSB0ZXN0IGdyYXBoIChub3QgdG8gYWN0dWFsbHkgbG9hZCBpdCkuCi0qIGBTdGFydFN0ZXBgIGlzIGEgYFNpZGVFZmZlY3RgIGFzIGl0IGlzIGEgcHJvY2VzcyB0byBnZXQgZGF0YSBpbnRvIHRoZSBzdHJlYW0gKGxpa2UgYSBrZXlib2FyZCkgYW5kIG1vcmUgZWZmaWNpZW50IGFzIHN1Y2guCi0qIEdyZWF0bHkgc2ltcGxpZmllZCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBNYXBgLCBgRmxhdE1hcGAsIGBGaWx0ZXJgLCBhbmQgYFNpZGVFZmZlY3RgLgotKiBgUGF0aGAgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlZCB0byBhbiBvcmRlcmVkIGxpc3Qgb2Ygb2JqZWN0cyB3aXRoIGVhY2ggYXNzb2NpYXRlZCB0byBhIGBTZXQ8U3RyaW5nPmAgb2YgYXMtbGFiZWxzLgotKiBBbGwgc2lkZUVmZmVjdC1iYXNlZCBzdGVwcyBubyBsb25nZXIgZXh0ZW5kIGBGaWx0ZXJTdGVwYCB3aXRoIHByZWRpY2F0ZSBlcXVhbCB0cnVlLCBidXQgYSBtb3JlIGVmZmljaWVudCBgU2lkZUVmZmVjdFN0ZXBgLgotKiBgVHJlZVN0ZXBgIG5vdyBoYXMgYFRyZWVNYXBSZWR1Y2VgIGZvciBleGVjdXRpbmcgb24gYEdyYXBoQ29tcHV0ZXJgLgotKiBgTmVvNGpUcmF2ZXJzYWwuY3lwaGVyKClgIGlzIGZsdWVudCB0aHJvdWdob3V0LgotKiBSZXZlcnRlZCBiYWNrIHRvIFRQMiBtb2RlbCBvZiBgYXMoKWAgcmVmZXJyaW5nIHRvIHN0ZXAgbmFtZXMsIG5vdCB2YXJpYWJsZSBuYW1lcyBvZiBzaWRlRWZmZWN0cy4KLSogVXBkYXRlZCBgQWRkRWRnZWAtc3RlcCB0byBzdXBwb3J0IHByb3BlcnR5IGtleS92YWx1ZSBwYWlycyBmb3IgYXBwZW5kaW5nIHRvIG5ld2x5IGNyZWF0ZWQgZWRnZXMuCi0qIFJlbmFtZWQgYEdyYXBoLmdldEZlYXR1cmVzKClgIHRvIGBHcmFwaC5mZWF0dXJlcygpYCB0byBiZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgQVBJIG1ldGhvZHMuCi0qIGBWZXJ0ZXhgIGFuZCBgRWRnZWAgbm93IGltcGxlbWVudCBhbGwgYEdyYXBoVHJhdmVyc2FsYCBtZXRob2RzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSB0aHJvdWdob3V0IHN0YWNrLgotKiBgTmVvNGpUcmF2ZXJzYWxgIGlzIGF1dG8tZ2VuZXJhdGVkIGZyb20gYE5lbzRqVHJhdmVyc2FsU3R1YmAgd2l0aCB0ZWNobmlxdWUgZ2VuZXJhbGl6YWJsZSB0byBvdGhlciB2ZW5kb3JzLgotKiBBZGRlZCB0ZXN0IHN1aXRlIHRvIGVuc3VyZSB0aGF0IGFsbCB0cmF2ZXJzYWxzIGFyZSBvZiB0aGUgc2FtZSB0eXBlOiBgZy5WYCwgYGcuRWAsIGBnLm9mKClgLCBgdi5pZGVudGl0eSgpYCwgYGUuaWRlbnRpdHkoKWAsIHYtLCBlLW1ldGhvZHMuCi0qIEdpcmFwaCBIREZTIGhlbHBlcnMgbm93IHN1cHBvcnQgYGhkZnMubWtkaXIoc3RyaW5nKWAgYW5kIGBsb2NhbC5ta2RpcihzdHJpbmcpYAotKiBBZGRlZCBgQE9wdEluYCBhbmQgYEBPcHRPdXRgIGZvciBpbXBsZW1lbnRlcnMgdG8gc3BlY2lmeSBvbiB0aGVpciBgR3JhcGhgIGltcGxlbWVudGF0aW9ucyBmb3IgdGVzdCBjb21wbGlhbmNlIGluZm9ybWF0aW9uLgotKiBgR3JhcGhDb21wdXRlcmAgYE1lbW9yeWAgbm93IGltbXV0YWJsZSBhZnRlciBjb21wdXRhdGlvbiBpcyBjb21wbGV0ZS4KLSogRGVwZW5kZW5jeSBncmFiYmluZyBmb3IgcGx1Z2lucyBmaWx0ZXIgb3V0IHNsZjRqIGxvZ2dpbmcgZGVwZW5kZW5jaWVzIHNvIGFzIHRvIGF2b2lkIG11bHRpcGxlIGJpbmRpbmdzIHdpdGggdGhlIHN0YW5kYXJkIFRpbmtlclBvcCBkaXN0cmlidXRpb25zLgotKiBGaXhlZCBgR2lyYXBoTWVtb3J5YCB0byBiZSBmdWxseSBjb25zaXN0ZW50IHdpdGggR3JhcGhDb21wdXRlciBzcGVjaWZpY2F0aW9uLgotKiBSZW1vdmVkIGZhdEphciBhc3NlbWJseSBmcm9tIEdpcmFwaC1HcmFwaCBhcyBpdCBpcyBubyBsb25nZWQgbmVlZGVkIHdpdGggZGlzdHJpYnV0ZWQgY2FjaGUgbW9kZWwuCi0qIFJld29ya2VkIGBHaXJhcGhSZW1vdGVBY2NlcHRvcmAgdG8gcHJvdmlkZSBhIGByZXN1bHRgIHZhcmlhYmxlIGJhY2sgdG8gdGhlIGNvbnNvbGUgd2l0aCBgQ29tcHV0ZXJSZXN1bHRgLgotKiBgVmVydGV4UHJvZ3JhbWAgaXMgbm8gbG9uZ2VyIGBTZXJpYWxpemFibGVgICh1c2UgYGxvYWRTdGF0ZWAgYW5kIGBzdG9yZVN0YXRlYCBmb3Igd2lyZS1wcm9wYWdhdGlvbikuCi0qIE1vdmVkIGBHaXJhcGhHcmFwaC5nZXRPdXRwdXRHcmFwaCgpYCB0byBgR2lyYXBoSGVscGVyYC4KLSogQ2hhbmdlZCBgR0lSQVBIX0dSRU1MSU5fSE9NRWAgdG8gYEdJUkFQSF9HUkVNTElOX0xJQmAgdG8gcmVmZXJlbmNlIGRpcmVjdG9yeSB3aGVyZSBqYXJzIGFyZSB0byBiZSBsb2FkZWQuCi0qIFVwZGF0ZWQgUkVBRE1FIHdpdGggcmVsZWFzZSBpbnN0cnVjdGlvbnMuCitQbGVhc2Ugc2VlIHRoZSBhcmNoaXZlZCA8PC4vZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTAtbTIsIDMuMC4wLk0yIGNoYW5nZWxvZz4+LgogCiA9PT0gVGlua2VyUG9wIDMuMC4wLk0xIChSZWxlYXNlIERhdGU6IEF1Z3VzdCAxMiwgMjAxNCkKIApkaWZmIC0tZ2l0IGEvTElDRU5TRSBiL0xJQ0VOU0UKaW5kZXggMDZjYTc2Yi4uMjM2ZTI1MiAxMDA2NDQKLS0tIGEvTElDRU5TRQorKysgYi9MSUNFTlNFCkBAIC0yMDgsNyArMjA4LDcgQEAKIFRoZSBBcGFjaGUgVGlua2VyUG9wIHByb2plY3QgYnVuZGxlcyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgdW5kZXIgdGhlIE1JVCBMaWNlbnNlOgogCiAgICAgIGJvb3RzdHJhcCA1LjAuMCAoaHR0cDovL2dldGJvb3RzdHJhcC5jb20vKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvYm9vdHN0cmFwCi0gICAgIGpxdWVyeSAxLjExLjEgKGh0dHBzOi8vanF1ZXJ5LmNvbS8pIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9qcXVlcnkKKyAgICAganF1ZXJ5IDEuMTIuNCAoaHR0cHM6Ly9qcXVlcnkuY29tLykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2pxdWVyeQogICAgICBub3JtYWxpemUuY3NzIDIuMS4yIChodHRwczovL25lY29sYXMuZ2l0aHViLmlvL25vcm1hbGl6ZS5jc3MvKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvbm9ybWFsaXplCiAgICAgIHByaXNtLmNzcy9qcyAxLjI3LjAgKGh0dHBzOi8vcHJpc21qcy5jb20vKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvcHJpc20KICAgICAgd293LmpzIDEuMS4yIChodHRwczovL3dvd2pzLnVrLykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL3dvdwpkaWZmIC0tZ2l0IGEvYmluL2FnZW50LXNldHVwLnNoIGIvYmluL2FnZW50LXNldHVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzMDk3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9iaW4vYWdlbnQtc2V0dXAuc2gKQEAgLTAsMCArMSwyMDAgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIyBTZXQgdXAgQUkgY29kaW5nIGFnZW50IGludGVncmF0aW9uIHdpdGggVGlua2VyUG9wJ3MgQWdlbnQgU2tpbGxzLgorIworIyBUaW5rZXJQb3AgbWFpbnRhaW5zIGRldmVsb3BtZW50IGd1aWRhbmNlIGFzIGFuIEFnZW50IFNraWxsIGluIC5za2lsbHMvdGlua2VycG9wLWRldi8uCisjIERpZmZlcmVudCBBSSBjb2RpbmcgdG9vbHMgZGlzY292ZXIgc2tpbGxzIGluIGRpZmZlcmVudCBkaXJlY3Rvcmllcy4gVGhpcyBzY3JpcHQKKyMgY3JlYXRlcyB0aGUgbmVjZXNzYXJ5IHN5bWxpbmtzIG9yIHNoaW1zIHNvIHlvdXIgdG9vbCBjYW4gZmluZCB0aGUgc2tpbGwuCisjCisjIFVzYWdlOgorIyAgIGJpbi9hZ2VudC1zZXR1cC5zaCA8YWdlbnQ+CisjICAgYmluL2FnZW50LXNldHVwLnNoIC0tbGlzdAorIyAgIGJpbi9hZ2VudC1zZXR1cC5zaCAtLWFsbAorIworIyBFeGFtcGxlczoKKyMgICBiaW4vYWdlbnQtc2V0dXAuc2ggY2xhdWRlICAgICAgICMgU2V0IHVwIGZvciBDbGF1ZGUgQ29kZQorIyAgIGJpbi9hZ2VudC1zZXR1cC5zaCBraXJvICAgICAgICAgIyBTZXQgdXAgZm9yIEtpcm8KKyMgICBiaW4vYWdlbnQtc2V0dXAuc2ggLS1hbGwgICAgICAgICMgU2V0IHVwIGZvciBhbGwgc3VwcG9ydGVkIGFnZW50cworIworIyBTdXBwb3J0ZWQgYWdlbnRzOgorIyAgIGNsYXVkZSAgICAtIENsYXVkZSBDb2RlICguY2xhdWRlL3NraWxscy8pCisjICAgY29waWxvdCAgIC0gR2l0SHViIENvcGlsb3QgKC5naXRodWIvc2tpbGxzLyBhbmQgLmFnZW50cy9za2lsbHMvKQorIyAgIGN1cnNvciAgICAtIEN1cnNvciAoLmN1cnNvci9za2lsbHMvKQorIyAgIGNvZGV4ICAgICAtIE9wZW5BSSBDb2RleCAoLmNvZGV4L3NraWxscy8pCisjICAganVuaWUgICAgIC0gSmV0QnJhaW5zIEp1bmllICguanVuaWUvc2tpbGxzLykKKyMgICBraXJvICAgICAgLSBLaXJvICgua2lyby9za2lsbHMvKQorCitzZXQgLXVvIHBpcGVmYWlsCisKK1NLSUxMX0RJUj0iLnNraWxscy90aW5rZXJwb3AtZGV2IgorU0tJTExfTkFNRT0idGlua2VycG9wLWRldiIKKworUkVEPSdcMDMzWzA7MzFtJworR1JFRU49J1wwMzNbMDszMm0nCitZRUxMT1c9J1wwMzNbMDszM20nCitOQz0nXDAzM1swbScKKworb2soKSAgIHsgZWNobyAtZSAiICAke0dSRUVOfeKckyR7TkN9ICQxIjsgfQorc2tpcCgpIHsgZWNobyAtZSAiICAke1lFTExPV33il4ske05DfSAkMSI7IH0KK2JhZCgpICB7IGVjaG8gLWUgIiAgJHtSRUR94pyXJHtOQ30gJDEiOyB9CisKK3VzYWdlKCkgeworICAgIGVjaG8gIlVzYWdlOiBiaW4vYWdlbnQtc2V0dXAuc2ggPGFnZW50fC0tbGlzdHwtLWFsbD4iCisgICAgZWNobyAiIgorICAgIGVjaG8gIkFnZW50czogY2xhdWRlLCBjb3BpbG90LCBjdXJzb3IsIGNvZGV4LCBqdW5pZSwga2lybyIKKyAgICBlY2hvICIiCisgICAgZWNobyAiT3B0aW9uczoiCisgICAgZWNobyAiICAtLWxpc3QgICAgTGlzdCBzdXBwb3J0ZWQgYWdlbnRzIGFuZCB0aGVpciBza2lsbCBkaXNjb3ZlcnkgcGF0aHMiCisgICAgZWNobyAiICAtLWFsbCAgICAgU2V0IHVwIHNoaW1zIGZvciBhbGwgc3VwcG9ydGVkIGFnZW50cyIKKyAgICBlY2hvICIgIC0taGVscCAgICBTaG93IHRoaXMgbWVzc2FnZSIKK30KKworIyBWZXJpZnkgd2UncmUgaW4gdGhlIHJlcG8gcm9vdAoraWYgW1sgISAtZCAiJFNLSUxMX0RJUiIgXV07IHRoZW4KKyAgICBiYWQgIkNhbm5vdCBmaW5kICRTS0lMTF9ESVIg4oCUIHJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBUaW5rZXJQb3AgcmVwb3NpdG9yeSByb290LiIKKyAgICBleGl0IDEKK2ZpCisKKyMgQ3JlYXRlIGEgc3ltbGluayBmcm9tIGEgdG9vbCdzIHNraWxsIGRpcmVjdG9yeSB0byBvdXIgY2Fub25pY2FsIHNraWxsCitzZXR1cF9zeW1saW5rKCkgeworICAgIGxvY2FsIHRvb2xfbmFtZT0iJDEiCisgICAgbG9jYWwgdGFyZ2V0X2Rpcj0iJDIiCisKKyAgICBta2RpciAtcCAiJHRhcmdldF9kaXIiCisgICAgbG9jYWwgbGlua19wYXRoPSIkdGFyZ2V0X2Rpci8kU0tJTExfTkFNRSIKKworICAgIGlmIFtbIC1MICIkbGlua19wYXRoIiBdXTsgdGhlbgorICAgICAgICBza2lwICIkdG9vbF9uYW1lOiBzeW1saW5rIGFscmVhZHkgZXhpc3RzIGF0ICRsaW5rX3BhdGgiCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKworICAgIGlmIFtbIC1lICIkbGlua19wYXRoIiBdXTsgdGhlbgorICAgICAgICBiYWQgIiR0b29sX25hbWU6ICRsaW5rX3BhdGggYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHN5bWxpbmsg4oCUIHNraXBwaW5nIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICAjIENvbXB1dGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRhcmdldF9kaXIgdG8gU0tJTExfRElSCisgICAgbG9jYWwgcmVsX3BhdGgKKyAgICByZWxfcGF0aD0kKHB5dGhvbjMgLWMgImltcG9ydCBvcy5wYXRoOyBwcmludChvcy5wYXRoLnJlbHBhdGgoJyRTS0lMTF9ESVInLCAnJHRhcmdldF9kaXInKSkiIDI+L2Rldi9udWxsKQorICAgIGlmIFtbIC16ICIkcmVsX3BhdGgiIF1dOyB0aGVuCisgICAgICAgICMgRmFsbGJhY2sgaWYgcHl0aG9uMyBub3QgYXZhaWxhYmxlCisgICAgICAgIHJlbF9wYXRoPSQocGVybCAtZSAndXNlIEZpbGU6OlNwZWM7IHByaW50IEZpbGU6OlNwZWMtPmFiczJyZWwoIiciJFNLSUxMX0RJUiInIiwgIiciJHRhcmdldF9kaXIiJyIpJyAyPi9kZXYvbnVsbCkKKyAgICBmaQorICAgIGlmIFtbIC16ICIkcmVsX3BhdGgiIF1dOyB0aGVuCisgICAgICAgIGJhZCAiJHRvb2xfbmFtZTogY291bGQgbm90IGNvbXB1dGUgcmVsYXRpdmUgcGF0aCAobmVlZCBweXRob24zIG9yIHBlcmwpIgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisKKyAgICBsbiAtcyAiJHJlbF9wYXRoIiAiJGxpbmtfcGF0aCIKKyAgICBvayAiJHRvb2xfbmFtZTogY3JlYXRlZCBzeW1saW5rICRsaW5rX3BhdGggLT4gJHJlbF9wYXRoIgorfQorCisjIEtpcm8gZG9lc24ndCBmb2xsb3cgc3ltbGlua3MgaW4gLmtpcm8vc2tpbGxzLywgc28gd2UgY29weSB0aGUgc2tpbGwgZGlyZWN0b3J5CisjIGluc3RlYWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2tpcm9kb3RkZXYvS2lyby9pc3N1ZXMgKHN5bWxpbmsgc3VwcG9ydCkuCitzZXR1cF9raXJvKCkgeworICAgIGxvY2FsIHRhcmdldF9kaXI9Ii5raXJvL3NraWxscy8kU0tJTExfTkFNRSIKKworICAgIGlmIFtbIC1kICIkdGFyZ2V0X2RpciIgXV07IHRoZW4KKyAgICAgICAgcm0gLXJmICIkdGFyZ2V0X2RpciIKKyAgICAgICAgc2tpcCAia2lybzogcmVtb3ZlZCBleGlzdGluZyBjb3B5IGF0ICR0YXJnZXRfZGlyIgorICAgIGZpCisKKyAgICBta2RpciAtcCAiLmtpcm8vc2tpbGxzIgorICAgIGNwIC1yICIkU0tJTExfRElSIiAiJHRhcmdldF9kaXIiCisgICAgb2sgImtpcm86IGNvcGllZCBza2lsbCB0byAkdGFyZ2V0X2RpciIKKyAgICBlY2hvICIiCisgICAgZWNobyAtZSAiICAke1lFTExPV31OT1RFOiR7TkN9IEtpcm8gdXNlcyBhIGNvcHksIG5vdCBhIHN5bWxpbmsuIElmIHlvdSB1cGRhdGUgdGhlIHNraWxsIGluIgorICAgIGVjaG8gLWUgIiAgICAgICAgJFNLSUxMX0RJUiwgcmUtcnVuIHRoaXMgc2NyaXB0IHRvIHN5bmMgdGhlIGNoYW5nZXMuIgorfQorCitzZXR1cF9hZ2VudCgpIHsKKyAgICBsb2NhbCBhZ2VudD0iJDEiCisgICAgY2FzZSAiJGFnZW50IiBpbgorICAgICAgICBjbGF1ZGUpCisgICAgICAgICAgICBzZXR1cF9zeW1saW5rICJjbGF1ZGUiICIuY2xhdWRlL3NraWxscyIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGNvcGlsb3QpCisgICAgICAgICAgICBzZXR1cF9zeW1saW5rICJjb3BpbG90ICguZ2l0aHViKSIgIi5naXRodWIvc2tpbGxzIgorICAgICAgICAgICAgc2V0dXBfc3ltbGluayAiY29waWxvdCAoLmFnZW50cykiICIuYWdlbnRzL3NraWxscyIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGN1cnNvcikKKyAgICAgICAgICAgIHNldHVwX3N5bWxpbmsgImN1cnNvciIgIi5jdXJzb3Ivc2tpbGxzIgorICAgICAgICAgICAgOzsKKyAgICAgICAgY29kZXgpCisgICAgICAgICAgICBzZXR1cF9zeW1saW5rICJjb2RleCIgIi5jb2RleC9za2lsbHMiCisgICAgICAgICAgICA7OworICAgICAgICBqdW5pZSkKKyAgICAgICAgICAgIHNldHVwX3N5bWxpbmsgImp1bmllIiAiLmp1bmllL3NraWxscyIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGtpcm8pCisgICAgICAgICAgICBzZXR1cF9raXJvCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgYmFkICJVbmtub3duIGFnZW50OiAkYWdlbnQiCisgICAgICAgICAgICBlY2hvICIiCisgICAgICAgICAgICB1c2FnZQorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworfQorCitsaXN0X2FnZW50cygpIHsKKyAgICBlY2hvICJTdXBwb3J0ZWQgYWdlbnRzIGFuZCB0aGVpciBza2lsbCBkaXNjb3ZlcnkgcGF0aHM6IgorICAgIGVjaG8gIiIKKyAgICBlY2hvICIgIGNsYXVkZSAgICAuY2xhdWRlL3NraWxscy8kU0tJTExfTkFNRS8gICAgIC0+IHN5bWxpbmsgdG8gJFNLSUxMX0RJUiIKKyAgICBlY2hvICIgIGNvcGlsb3QgICAuZ2l0aHViL3NraWxscy8kU0tJTExfTkFNRS8gICAgIC0+IHN5bWxpbmsgdG8gJFNLSUxMX0RJUiIKKyAgICBlY2hvICIgICAgICAgICAgICAuYWdlbnRzL3NraWxscy8kU0tJTExfTkFNRS8gICAgIC0+IHN5bWxpbmsgdG8gJFNLSUxMX0RJUiIKKyAgICBlY2hvICIgIGN1cnNvciAgICAuY3Vyc29yL3NraWxscy8kU0tJTExfTkFNRS8gICAgIC0+IHN5bWxpbmsgdG8gJFNLSUxMX0RJUiIKKyAgICBlY2hvICIgIGNvZGV4ICAgICAuY29kZXgvc2tpbGxzLyRTS0lMTF9OQU1FLyAgICAgIC0+IHN5bWxpbmsgdG8gJFNLSUxMX0RJUiIKKyAgICBlY2hvICIgIGp1bmllICAgICAuanVuaWUvc2tpbGxzLyRTS0lMTF9OQU1FLyAgICAgIC0+IHN5bWxpbmsgdG8gJFNLSUxMX0RJUiIKKyAgICBlY2hvICIgIGtpcm8gICAgICAua2lyby9za2lsbHMvJFNLSUxMX05BTUUvICAgICAgIC0+IGNvcHkgb2YgJFNLSUxMX0RJUiAocmUtcnVuIHRvIHN5bmMpIgorfQorCisjIC0tLSBNYWluIC0tLQorCitpZiBbWyAkIyAtZXEgMCBdXTsgdGhlbgorICAgIHVzYWdlCisgICAgZXhpdCAxCitmaQorCitjYXNlICIkMSIgaW4KKyAgICAtLWhlbHB8LWgpCisgICAgICAgIHVzYWdlCisgICAgICAgIDs7CisgICAgLS1saXN0KQorICAgICAgICBsaXN0X2FnZW50cworICAgICAgICA7OworICAgIC0tYWxsKQorICAgICAgICBlY2hvICJTZXR0aW5nIHVwIGFsbCBhZ2VudCBpbnRlZ3JhdGlvbnMuLi4iCisgICAgICAgIGVjaG8gIiIKKyAgICAgICAgZm9yIGFnZW50IGluIGNsYXVkZSBjb3BpbG90IGN1cnNvciBjb2RleCBqdW5pZSBraXJvOyBkbworICAgICAgICAgICAgc2V0dXBfYWdlbnQgIiRhZ2VudCIKKyAgICAgICAgZG9uZQorICAgICAgICBlY2hvICIiCisgICAgICAgIGVjaG8gIkRvbmUuIFN5bWxpbmtlZCBkaXJlY3RvcmllcyBhbmQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBnaXRpZ25vcmVkLiIKKyAgICAgICAgZWNobyAiQWRkIHRoZW0gdG8gLmdpdGlnbm9yZSBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5LiIKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBlY2hvICJTZXR0aW5nIHVwICQxLi4uIgorICAgICAgICBlY2hvICIiCisgICAgICAgIHNldHVwX2FnZW50ICIkMSIKKyAgICAgICAgOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2Jpbi9maXgtbGljZW5zZS1oZWFkZXJzLnB5IGIvYmluL2ZpeC1saWNlbnNlLWhlYWRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmMzZWYwNAotLS0gL2Rldi9udWxsCisrKyBiL2Jpbi9maXgtbGljZW5zZS1oZWFkZXJzLnB5CkBAIC0wLDAgKzEsNTI2IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisiIiIKK1ZhbGlkYXRlcyBhbmQgZml4ZXMgQVNGIGxpY2Vuc2UgaGVhZGVycyBhY3Jvc3MgdGhlIFRpbmtlclBvcCByZXBvc2l0b3J5LgorCitIYW5kbGVzIGFsbCBjb21tZW50IHN0eWxlcyBmb3VuZCBpbiB0aGUgcmVwbzoKKyAgLSBKYXZhL0dvL0MjIGJsb2NrIGNvbW1lbnRzICAoKiBwcmVmaXggaW5zaWRlIC8qIC4uLiAqLykKKyAgLSBEb3VibGUtc2xhc2ggICAgICAgICAgICAgICAgKC8vIHByZWZpeCkKKyAgLSBIYXNoICAgICAgICAgICAgICAgICAgICAgICAgKCMgcHJlZml4KQorICAtIEFzY2lpRG9jIGJsb2NrIGNvbW1lbnQgICAgICAoY29udGVudCBpbnNpZGUgLy8vLyAuLi4gLy8vLykKKyAgLSBIVE1ML1hNTCBibG9jayBjb21tZW50ICAgICAgKGNvbnRlbnQgaW5zaWRlIDwhLS0gLi4uIC0tPikKKyAgLSBCYXRjaCBmaWxlcyAgICAgICAgICAgICAgICAgKDo6IHByZWZpeCkKKyAgLSBSU1QgZmlsZXMgICAgICAgICAgICAgICAgICAgKC4uIHByZWZpeCkKKworUmVzcGVjdHMgdGhlIHJhdC1wbHVnaW4gZXhjbHVzaW9uIGxpc3QgZnJvbSB0aGUgcm9vdCBwb20ueG1sLgorCitVc2FnZToKKyAgICBweXRob24zIGJpbi9maXgtbGljZW5zZS1oZWFkZXJzLnB5ICAgICAgICAgICAjIHJlcG9ydCBpc3N1ZXMgb25seQorICAgIHB5dGhvbjMgYmluL2ZpeC1saWNlbnNlLWhlYWRlcnMucHkgLS1maXggICAgICMgcmVwb3J0IGFuZCBmaXggaXNzdWVzCisgICAgcHl0aG9uMyBiaW4vZml4LWxpY2Vuc2UtaGVhZGVycy5weSAtLXZlcmJvc2UgIyBzaG93IHBlci1maWxlIGRldGFpbHMKKyIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IGZubWF0Y2gKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXIKKworUkVQT19ST09UID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKSkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2Fub25pY2FsIGxpY2Vuc2UgdGV4dAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBMaW5lcyBvZiB0aGUgbGljZW5zZSBib2R5IHdpdGggbm8gY29tbWVudCBwcmVmaXguCitDQU5PTklDQUxfTElORVMgPSBbCisgICAgIkxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUiLAorICAgICJvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUiLAorICAgICJkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiIsCisgICAgInJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUiLAorICAgICJ0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIiwKKyAgICAnIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZScsCisgICAgIndpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQiLAorICAgICIiLAorICAgICIgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCIsCisgICAgIiIsCisgICAgIlVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywiLAorICAgICJzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiIsCisgICAgJyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWScsCisgICAgIktJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSIsCisgICAgInNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMiLAorICAgICJ1bmRlciB0aGUgTGljZW5zZS4iLAorXQorCisjIEZ1bGwgQXNjaWlEb2MgYmxvY2sgKGNvbnRlbnQgYmV0d2VlbiAvLy8vIGRlbGltaXRlcnMsIGluY2x1c2l2ZSkuCitDQU5PTklDQUxfQVNDSUlET0MgPSAiIiJcCisvLy8vCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vIiIiCisKKyMgRnVsbCBIVE1ML1hNTCBjb21tZW50IGJsb2NrIChjb250ZW50IGJldHdlZW4gPCEtLSBhbmQgLS0+LCBpbmNsdXNpdmUpLgorQ0FOT05JQ0FMX0hUTUwgPSAiIiJcCis8IS0tCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCistLT4iIiIKKworIyBQaHJhc2VzIHRoYXQgbWFyayB0aGUgZW5kIG9mIGFueSBBcGFjaGUgbGljZW5zZSBibG9jayAoc3RyaXBwZWQgb2YgcHJlZml4KS4KKyMgVGhlIHN0YW5kYXJkIGZvcm0gZW5kcyB3aXRoICJ1bmRlciB0aGUgTGljZW5zZS4iIG9uIGl0cyBvd24gbGluZTsgdGhlCisjIHBhcmFncmFwaC13cmFwcGVkIGZvcm0gZW5kcyB3aXRoICJsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCitMSUNFTlNFX0VORF9QSFJBU0VTID0gKCJ1bmRlciB0aGUgTGljZW5zZS4iLCAibGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhjbHVzaW9uIHBhdHRlcm5zIChtaXJyb3JzIHJhdC1wbHVnaW4gPGV4Y2x1ZGVzPiBpbiByb290IHBvbS54bWwpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFWENMVURFX1BBVFRFUk5TID0gWworICAgICIubWFpbG1hcCIsICIuYXNmLnlhbWwiLCAiLnRyYXZpcy55bWwiLCAiLnRyYXZpcy4qLnNoIiwgIi5kb2NrZXJpZ25vcmUiLAorICAgICIuZ2l0aHViLyoqIiwKKyAgICAiKiovLmNsYXNzcGF0aCIsICIqKi8ucHJvamVjdCIsICIqKi8uc2V0dGluZ3MvKioiLCAiKiovLmlkZWEvKioiLAorICAgICIucmVwb3NpdG9yeS8qKiIsICIqKi90YXJnZXQvKioiLAorICAgICJkYXRhLyoudHh0IiwKKyAgICAiKiovYmluL2dyZW1saW4uc2giLCAiZ3JlbWxpbi1jb25zb2xlL2Jpbi9ncmVtbGluLnNoIiwKKyAgICAiZG9jcy9zdGF0aWMvKioiLCAiZG9jcy9vcmlnaW5hbC8qKiIsICJkb2NzL3NpdGUvaG9tZS9jc3MvKioiLCAiZG9jcy9zaXRlL2hvbWUvanMvKioiLAorICAgICJkb2NzL2dyZW1saW50L2J1aWxkLyoqIiwgImRvY3MvZ3JlbWxpbnQvcHVibGljL0NOQU1FIiwKKyAgICAiKiovQUdFTlRTLm1kIiwKKyAgICAiKiovKi5rcnlvIiwgIioqLyouZ2JpbiIsICIqKi8qLmltbCIsICIqKi8qLmpzb24iLCAiKiovKi54bWwiLAorICAgICIqKi8qLmxkanNvbiIsICIqKi8qLmdyYWZmbGUiLCAiKiovKi5zdmciLCAiKiovKi50cngiLCAiKiovKi5zbG4iLAorICAgICIqKi8qLnVzZXIiLCAiKiovKi5jc3Byb2oiLCAiKiovKi5udXNwZWMiLAorICAgICIqKi9nb2FsLnR4dCIsCisgICAgIioqL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy8qKiIsCisgICAgIioqL3NyYy90ZXN0L3Jlc291cmNlcy9tb2NraXRvLWV4dGVuc2lvbnMvKioiLAorICAgICIqKi9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvKioiLAorICAgICIqKi9zcmMvdGVzdC9yZXNvdXJjZXMvY3VjdW1iZXIucHJvcGVydGllcyIsCisgICAgIioqL3NyYy90ZXN0L3Jlc291cmNlcy9pbmNvcnJlY3QtdHJhdmVyc2Fscy50eHQiLAorICAgICIqKi9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2dyb292eS9wbHVnaW4vc2NyaXB0LWN1c3RvbWl6ZXItKi5ncm9vdnkiLAorICAgICIqKi9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvc2NyaXB0LWN1c3RvbWl6ZXItKi5ncm9vdnkiLAorICAgICIqKi9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9zY3JpcHQtY3VzdG9taXplci0qLmdyb292eSIsCisgICAgIioqL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9zY3JpcHQvKi50eHQiLAorICAgICIqKi9zcmMvbWFpbi9leHQvKioiLCAiKiovc3JjL21haW4vc3RhdGljLyoqIiwKKyAgICAiKiovX2JzcC8qKiIsCisgICAgIkRFUEVOREVOQ0lFUyIsICIqKi8uZ2x2IiwKKyAgICAiKiovRGVidWcvKioiLCAiKiovUmVsZWFzZS8qKiIsICIqKi9vYmovKioiLAorICAgICIqKi8udnMvKioiLCAiKiovTnVHZXQuQ29uZmlnIiwgIioqL0JlbmNobWFya0RvdE5ldC5BcnRpZmFjdHMvKioiLAorICAgICIqKi8ubnZtcmMiLCAiKiovLnlhcm5yYy55bWwiLCAiKioveWFybi5sb2NrIiwKKyAgICAiKiovbm9kZS8qKiIsICIqKi9ub2RlX21vZHVsZXMvKioiLCAiKiovbnBtLWRlYnVnLmxvZyIsCisgICAgIioqL2J1aWxkLyoqIiwgIioqL2RvYy8qKiIsICIqKi9saWIvKioiLAorICAgICIqKi8uZW52IiwgIioqLy5wcmV0dGllcnJjIiwgIioqL19zaXRlLyoqIiwKKyAgICAiKiovLnB5dGVzdF9jYWNoZS8qKiIsICIqKi92ZW52LyoqIiwgIioqLy52ZW52LyoqIiwgIioqLy5lZ2dzLyoqIiwKKyAgICAiKiovZ3JlbWxpbnB5dGhvbi5lZ2ctaW5mby8qKiIsICIqKi9kb2NmeC8qKiIsCisgICAgIioqL2dvLnN1bSIsICIqKi9jb3ZlcmFnZS5vdXQiLCAiKiovZ3JlbWxpbmNvbnNvbGV0ZXN0LmVnZy1pbmZvLyoqIiwKK10KKworIyBEaXJlY3RvcmllcyBuZXZlciBkZXNjZW5kZWQgaW50byAoZmFzdGVyIHRoYW4gcGF0dGVybiBtYXRjaGluZyBldmVyeSBmaWxlKS4KK1BSVU5FX0RJUlMgPSB7Jy5naXQnLCAndGFyZ2V0JywgJ25vZGVfbW9kdWxlcycsICdidWlsZCcsICd2ZW52JywgJy52ZW52JywKKyAgICAgICAgICAgICAgJy5lZ2dzJywgJ2RvYycsICdsaWInLCAnRGVidWcnLCAnUmVsZWFzZScsICdvYmonLCAnZG9jZngnLAorICAgICAgICAgICAgICAnX3NpdGUnLCAnX19weWNhY2hlX18nLCAnLnB5dGVzdF9jYWNoZScsICdCZW5jaG1hcmtEb3ROZXQuQXJ0aWZhY3RzJ30KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGF0dGVybiBtYXRjaGluZworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIG1hdGNoZXNfZXhjbHVkZV9wYXR0ZXJuKHJlbF9wYXRoLCBwYXR0ZXJucyk6CisgICAgcmVsX3BhdGggPSByZWxfcGF0aC5yZXBsYWNlKG9zLnNlcCwgIi8iKQorICAgIGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgorICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKG9zLnNlcCwgIi8iKQorICAgICAgICBpZiAiLyIgbm90IGluIHBhdHRlcm46CisgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2gob3MucGF0aC5iYXNlbmFtZShyZWxfcGF0aCksIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsaWYgIioqIiBpbiBwYXR0ZXJuOgorICAgICAgICAgICAgaWYgcGF0dGVybi5zdGFydHN3aXRoKCIqKi8iKToKKyAgICAgICAgICAgICAgICBpbm5lciA9IHBhdHRlcm5bMzpdCisgICAgICAgICAgICAgICAgcGFydHMgPSByZWxfcGF0aC5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnRzKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaCgiLyIuam9pbihwYXJ0c1tpOl0pLCBpbm5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKHJlbF9wYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoKHJlbF9wYXRoLCBwYXR0ZXJuKSBvciBmbm1hdGNoLmZubWF0Y2gob3MucGF0aC5iYXNlbmFtZShyZWxfcGF0aCksIHBhdHRlcm4pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFzY2lpRG9jIGhhbmRsaW5nICAoLy8vLyAuLi4gLy8vLykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBwcm9jZXNzX2FzY2lpZG9jKGZpbGVwYXRoLCBmaXgpOgorICAgIHdpdGggb3BlbihmaWxlcGF0aCwgJ3InLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3JlcGxhY2UnKSBhcyBmOgorICAgICAgICBjb250ZW50ID0gZi5yZWFkKCkKKworICAgIGlmICdMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nIG5vdCBpbiBjb250ZW50OgorICAgICAgICByZXR1cm4gJ25vX2xpY2Vuc2UnLCBbXQorCisgICAgbGluZXMgPSBjb250ZW50LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKKworICAgIGZpcnN0ID0gbmV4dCgoaSBmb3IgaSwgbCBpbiBlbnVtZXJhdGUobGluZXMpIGlmIGwucnN0cmlwKCdcclxuJykgPT0gJy8vLy8nKSwgTm9uZSkKKyAgICBpZiBmaXJzdCBpcyBOb25lOgorICAgICAgICByZXR1cm4gJ3VucGFyc2VhYmxlJywgWydubyBvcGVuaW5nIC8vLy8gZGVsaW1pdGVyIGZvdW5kJ10KKworICAgIHNlY29uZCA9IG5leHQoKGkgZm9yIGkgaW4gcmFuZ2UoZmlyc3QgKyAxLCBsZW4obGluZXMpKSBpZiBsaW5lc1tpXS5yc3RyaXAoJ1xyXG4nKSA9PSAnLy8vLycpLCBOb25lKQorICAgIGlmIHNlY29uZCBpcyBOb25lOgorICAgICAgICByZXR1cm4gJ3VucGFyc2VhYmxlJywgWydubyBjbG9zaW5nIC8vLy8gZGVsaW1pdGVyIGZvdW5kJ10KKworICAgIGJvZHkgPSAnXG4nLmpvaW4obC5yc3RyaXAoJ1xyXG4nKSBmb3IgbCBpbiBsaW5lc1tmaXJzdDpzZWNvbmQgKyAxXSkKKyAgICBpZiBib2R5ID09IENBTk9OSUNBTF9BU0NJSURPQzoKKyAgICAgICAgcmV0dXJuICdvaycsIFtdCisKKyAgICBpZiBmaXg6CisgICAgICAgIG5ld19jb250ZW50ID0gQ0FOT05JQ0FMX0FTQ0lJRE9DICsgJ1xuJyArICcnLmpvaW4obGluZXNbc2Vjb25kICsgMTpdKQorICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUobmV3X2NvbnRlbnQpCisgICAgICAgIHJldHVybiAnZml4ZWQnLCBbJ2xpY2Vuc2UgYmxvY2sgcmVwbGFjZWQgd2l0aCBjYW5vbmljYWwgZm9ybSddCisKKyAgICByZXR1cm4gJ2hhc19pc3N1ZXMnLCBbJ2xpY2Vuc2UgYmxvY2sgZG9lcyBub3QgbWF0Y2ggY2Fub25pY2FsIGZvcm0nXQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIVE1ML1hNTCBjb21tZW50IGhhbmRsaW5nICAoPCEtLSAuLi4gLS0+KQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHByb2Nlc3NfaHRtbF9jb21tZW50KGZpbGVwYXRoLCBmaXgsIGxpbmVzLCBvcGVuX2lkeCk6CisgICAgIiIiSGFuZGxlIGEgPCEtLSAtLT4gY29tbWVudCBibG9jayBzdGFydGluZyBhdCBvcGVuX2lkeC4iIiIKKyAgICBjbG9zZV9pZHggPSBuZXh0KAorICAgICAgICAoaSBmb3IgaSBpbiByYW5nZShvcGVuX2lkeCArIDEsIGxlbihsaW5lcykpIGlmIGxpbmVzW2ldLnJzdHJpcCgnXHJcbicpID09ICctLT4nKSwKKyAgICAgICAgTm9uZQorICAgICkKKyAgICBpZiBjbG9zZV9pZHggaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICd1bnBhcnNlYWJsZScsIFsnbm8gY2xvc2luZyAtLT4gZGVsaW1pdGVyIGZvdW5kJ10KKworICAgIGJvZHkgPSAnXG4nLmpvaW4obC5yc3RyaXAoJ1xyXG4nKSBmb3IgbCBpbiBsaW5lc1tvcGVuX2lkeDpjbG9zZV9pZHggKyAxXSkKKyAgICBpZiBib2R5ID09IENBTk9OSUNBTF9IVE1MOgorICAgICAgICByZXR1cm4gJ29rJywgW10KKworICAgIGlmIGZpeDoKKyAgICAgICAgbmV3X2NvbnRlbnQgPSAoCisgICAgICAgICAgICAnJy5qb2luKGxpbmVzWzpvcGVuX2lkeF0pCisgICAgICAgICAgICArIENBTk9OSUNBTF9IVE1MICsgJ1xuJworICAgICAgICAgICAgKyAnJy5qb2luKGxpbmVzW2Nsb3NlX2lkeCArIDE6XSkKKyAgICAgICAgKQorICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUobmV3X2NvbnRlbnQpCisgICAgICAgIHJldHVybiAnZml4ZWQnLCBbJ2h0bWwveG1sIGNvbW1lbnQgYmxvY2sgcmVwbGFjZWQgd2l0aCBjYW5vbmljYWwgZm9ybSddCisKKyAgICByZXR1cm4gJ2hhc19pc3N1ZXMnLCBbJ2h0bWwveG1sIGNvbW1lbnQgYmxvY2sgZG9lcyBub3QgbWF0Y2ggY2Fub25pY2FsIGZvcm0nXQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmljIGNvbW1lbnQtc3R5bGUgaGFuZGxpbmcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBkZXRlY3RfY29tbWVudF9zdHlsZShsaW5lcywgc3RhcnRfaWR4KToKKyAgICAiIiIKKyAgICBEZXRlY3QgdGhlIGNvbW1lbnQgc3R5bGUgZnJvbSB0aGUgbGluZSBhdCBzdGFydF9pZHguCisKKyAgICBSZXR1cm5zIChzdHlsZSwgYmFzZV9wcmVmaXgpLiAgU3R5bGVzOgorICAgICAgYmxvY2tfc3RhciAgIOKAlCAnICogJyBwcmVmaXggIChKYXZhL0pTL0MjIGJsb2NrIGNvbW1lbnRzKQorICAgICAgZG91YmxlX3NsYXNoIOKAlCAnLy8gJyBwcmVmaXgKKyAgICAgIGhhc2ggICAgICAgICDigJQgJyMgJyBwcmVmaXgKKyAgICAgIGRvdWJsZV9jb2xvbiDigJQgJzo6ICcgcHJlZml4ICAoYmF0Y2ggZmlsZXMpCisgICAgICBkb3VibGVfZG90ICAg4oCUICcuLiAnIHByZWZpeCAgKFJTVCkKKyAgICAgIHBsYWluICAgICAgICDigJQgbm8gcHJlZml4CisgICAgIiIiCisgICAgbGluZSA9IGxpbmVzW3N0YXJ0X2lkeF0ucnN0cmlwKCdcbicpLnJzdHJpcCgnXHInKQorCisgICAgbSA9IHJlLm1hdGNoKHInXihccypcKlxzKyknLCBsaW5lKQorICAgIGlmIG06CisgICAgICAgIHJldHVybiAnYmxvY2tfc3RhcicsIG0uZ3JvdXAoMSkKKworICAgIG0gPSByZS5tYXRjaChyJ14oLy9ccyopJywgbGluZSkKKyAgICBpZiBtOgorICAgICAgICByZXR1cm4gJ2RvdWJsZV9zbGFzaCcsIG0uZ3JvdXAoMSkKKworICAgIG0gPSByZS5tYXRjaChyJ14oOjpccyopJywgbGluZSkKKyAgICBpZiBtOgorICAgICAgICByZXR1cm4gJ2RvdWJsZV9jb2xvbicsIG0uZ3JvdXAoMSkKKworICAgIG0gPSByZS5tYXRjaChyJ14oXC5cLlxzKyknLCBsaW5lKQorICAgIGlmIG06CisgICAgICAgIHJldHVybiAnZG91YmxlX2RvdCcsIG0uZ3JvdXAoMSkKKworICAgIG0gPSByZS5tYXRjaChyJ14oI1xzKiknLCBsaW5lKQorICAgIGlmIG06CisgICAgICAgIGZpcnN0X3ByZWZpeCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgcHJlZml4ZXNfc2VlbiA9IFtmaXJzdF9wcmVmaXhdCisgICAgICAgIGZvciBqIGluIHJhbmdlKHN0YXJ0X2lkeCArIDEsIG1pbihzdGFydF9pZHggKyAxMCwgbGVuKGxpbmVzKSkpOgorICAgICAgICAgICAgbmV4dF9saW5lID0gbGluZXNbal0ucnN0cmlwKCdcbicpLnJzdHJpcCgnXHInKQorICAgICAgICAgICAgaWYgbmV4dF9saW5lLnJzdHJpcCgpID09ICcjJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbTIgPSByZS5tYXRjaChyJ14oI1xzKiknLCBuZXh0X2xpbmUpCisgICAgICAgICAgICBpZiBtMiBhbmQgbmV4dF9saW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgcHJlZml4ZXNfc2Vlbi5hcHBlbmQobTIuZ3JvdXAoMSkpCisgICAgICAgIHByZWZpeF9jb3VudGVyID0gQ291bnRlcihwcmVmaXhlc19zZWVuKQorICAgICAgICByZXR1cm4gJ2hhc2gnLCBwcmVmaXhfY291bnRlci5tb3N0X2NvbW1vbigxKVswXVswXQorCisgICAgbSA9IHJlLm1hdGNoKHInXihccyspJywgbGluZSkKKyAgICBpZiBtIGFuZCBsaW5lLnN0cmlwKCkuc3RhcnRzd2l0aCgnTGljZW5zZWQnKToKKyAgICAgICAgcmV0dXJuICdzcGFjZV9pbmRlbnQnLCBtLmdyb3VwKDEpCisKKyAgICByZXR1cm4gJ3BsYWluJywgJycKKworCitkZWYgZ2V0X2xpbmVfY29udGVudChsaW5lLCBzdHlsZSwgYmFzZV9wcmVmaXgpOgorICAgICIiIlN0cmlwIHRoZSBjb21tZW50IHByZWZpeCBhbmQgcmV0dXJuIHRoZSBiYXJlIGNvbnRlbnQgb2YgYSBsaW5lLiIiIgorICAgIHJhdyA9IGxpbmUucnN0cmlwKCdcbicpLnJzdHJpcCgnXHInKQorCisgICAgaWYgc3R5bGUgPT0gJ2Jsb2NrX3N0YXInOgorICAgICAgICBtID0gcmUubWF0Y2gocideKFxzKlwqKSguKiknLCByYXcpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBmdWxsID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikKKyAgICAgICAgICAgIHJldHVybiBmdWxsW2xlbihiYXNlX3ByZWZpeCk6XS5yc3RyaXAoKSBpZiBsZW4oZnVsbCkgPj0gbGVuKGJhc2VfcHJlZml4KSBlbHNlICIiCisgICAgICAgIHJldHVybiByYXcucnN0cmlwKCkKKworICAgIGlmIHN0eWxlIGluICgnZG91YmxlX3NsYXNoJywgJ2hhc2gnKToKKyAgICAgICAgY2hhciA9ICcvLycgaWYgc3R5bGUgPT0gJ2RvdWJsZV9zbGFzaCcgZWxzZSAnIycKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInXignICsgcmUuZXNjYXBlKGNoYXIpICsgcicpKC4qKScsIHJhdykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGZ1bGwgPSBjaGFyICsgbS5ncm91cCgyKQorICAgICAgICAgICAgcmV0dXJuIGZ1bGxbbGVuKGJhc2VfcHJlZml4KTpdLnJzdHJpcCgpIGlmIGxlbihmdWxsKSA+PSBsZW4oYmFzZV9wcmVmaXgpIGVsc2UgIiIKKyAgICAgICAgcmV0dXJuIHJhdy5zdHJpcCgpCisKKyAgICBpZiBzdHlsZSA9PSAnZG91YmxlX2NvbG9uJzoKKyAgICAgICAgaWYgcmF3LnJzdHJpcCgpID09ICc6Oic6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInXig6OlxzKikoLiopJywgcmF3KQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgZnVsbCA9ICc6OicgKyByYXdbMjpdCisgICAgICAgICAgICByZXR1cm4gZnVsbFtsZW4oYmFzZV9wcmVmaXgpOl0ucnN0cmlwKCkgaWYgbGVuKGZ1bGwpID49IGxlbihiYXNlX3ByZWZpeCkgZWxzZSBtLmdyb3VwKDIpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiByYXcuc3RyaXAoKQorCisgICAgaWYgc3R5bGUgPT0gJ2RvdWJsZV9kb3QnOgorICAgICAgICBpZiByYXcucnN0cmlwKCkgPT0gJy4uJzoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICBpZiBub3QgcmF3LnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgZnVsbCA9ICcuLicgKyByYXdbMjpdCisgICAgICAgIHJldHVybiBmdWxsW2xlbihiYXNlX3ByZWZpeCk6XS5yc3RyaXAoKSBpZiBsZW4oZnVsbCkgPj0gbGVuKGJhc2VfcHJlZml4KSBlbHNlIHJhdy5zdHJpcCgpCisKKyAgICBpZiBzdHlsZSA9PSAnc3BhY2VfaW5kZW50JzoKKyAgICAgICAgaWYgbm90IHJhdy5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHJldHVybiByYXdbbGVuKGJhc2VfcHJlZml4KTpdLnJzdHJpcCgpIGlmIGxlbihyYXcpID49IGxlbihiYXNlX3ByZWZpeCkgZWxzZSByYXcucnN0cmlwKCkKKworICAgIHJldHVybiByYXcucnN0cmlwKCkgICMgcGxhaW4KKworCitkZWYgZmluZF9saWNlbnNlX2Jsb2NrKGxpbmVzLCBzdHlsZSwgYmFzZV9wcmVmaXgpOgorICAgICIiIgorICAgIExvY2F0ZSBzdGFydCBhbmQgZW5kIGxpbmUgaW5kaWNlcyBvZiB0aGUgbGljZW5zZSBibG9jay4KKworICAgIEFjY2VwdHMgYm90aCB0aGUgc3RhbmRhcmQgZW5kaW5nICgndW5kZXIgdGhlIExpY2Vuc2UuJykgYW5kIHRoZQorICAgIHBhcmFncmFwaC13cmFwcGVkIGVuZGluZyAoJ2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLicpLgorICAgICIiIgorICAgIHN0YXJ0X2lkeCA9IG5leHQoCisgICAgICAgIChpIGZvciBpLCBsIGluIGVudW1lcmF0ZShsaW5lcykgaWYgJ0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbicgaW4gbCksCisgICAgICAgIE5vbmUKKyAgICApCisgICAgaWYgc3RhcnRfaWR4IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBlbmRfaWR4ID0gTm9uZQorICAgIGZvciBpIGluIHJhbmdlKHN0YXJ0X2lkeCwgbWluKHN0YXJ0X2lkeCArIDU1LCBsZW4obGluZXMpKSk6CisgICAgICAgIGNvbnRlbnQgPSBnZXRfbGluZV9jb250ZW50KGxpbmVzW2ldLCBzdHlsZSwgYmFzZV9wcmVmaXgpLnJzdHJpcCgpCisgICAgICAgIGlmIGNvbnRlbnQgaW4gTElDRU5TRV9FTkRfUEhSQVNFUzoKKyAgICAgICAgICAgIGVuZF9pZHggPSBpCisgICAgICAgICAgICBicmVhaworCisgICAgaWYgZW5kX2lkeCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgbnVtX2xpbmVzID0gZW5kX2lkeCAtIHN0YXJ0X2lkeCArIDEKKyAgICBpZiBub3QgKDE0IDw9IG51bV9saW5lcyA8PSAyMik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICByZXR1cm4gc3RhcnRfaWR4LCBlbmRfaWR4CisKKworZGVmIHJlY29uc3RydWN0X2xpY2Vuc2VfbGluZXMoc3R5bGUsIGJhc2VfcHJlZml4KToKKyAgICAiIiJCdWlsZCB0aGUgY29ycmVjdGVkIGxpY2Vuc2UgYmxvY2sgbGluZXMgKHdpdGggbmV3bGluZXMpLiIiIgorICAgIG5ld19saW5lcyA9IFtdCisgICAgZm9yIGNhbm9uaWNhbCBpbiBDQU5PTklDQUxfTElORVM6CisgICAgICAgIGlmIGNhbm9uaWNhbCA9PSAiIjoKKyAgICAgICAgICAgIGlmIHN0eWxlID09ICdibG9ja19zdGFyJzoKKyAgICAgICAgICAgICAgICBibGFuayA9IHJlLm1hdGNoKHInXihccypcKiknLCBiYXNlX3ByZWZpeCkKKyAgICAgICAgICAgICAgICBuZXdfbGluZXMuYXBwZW5kKChibGFuay5ncm91cCgxKSBpZiBibGFuayBlbHNlICIiKSArICJcbiIpCisgICAgICAgICAgICBlbGlmIHN0eWxlID09ICdkb3VibGVfc2xhc2gnOgorICAgICAgICAgICAgICAgIG5ld19saW5lcy5hcHBlbmQoIi8vXG4iKQorICAgICAgICAgICAgZWxpZiBzdHlsZSA9PSAnaGFzaCc6CisgICAgICAgICAgICAgICAgbmV3X2xpbmVzLmFwcGVuZCgiI1xuIikKKyAgICAgICAgICAgIGVsaWYgc3R5bGUgPT0gJ2RvdWJsZV9jb2xvbic6CisgICAgICAgICAgICAgICAgbmV3X2xpbmVzLmFwcGVuZCgiOjpcbiIpCisgICAgICAgICAgICBlbGlmIHN0eWxlID09ICdkb3VibGVfZG90JzoKKyAgICAgICAgICAgICAgICBuZXdfbGluZXMuYXBwZW5kKCIuLlxuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X2xpbmVzLmFwcGVuZCgiXG4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3X2xpbmVzLmFwcGVuZCgoYmFzZV9wcmVmaXggaWYgc3R5bGUgIT0gJ3BsYWluJyBlbHNlICIiKSArIGNhbm9uaWNhbCArICJcbiIpCisgICAgcmV0dXJuIG5ld19saW5lcworCisKK2RlZiBwcm9jZXNzX2dlbmVyaWMoZmlsZXBhdGgsIGZpeCk6CisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICdyJywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdyZXBsYWNlJykgYXMgZjoKKyAgICAgICAgICAgIGNvbnRlbnQgPSBmLnJlYWQoKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmV0dXJuICdlcnJvcicsIFtzdHIoZSldCisKKyAgICBpZiAnTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJyBub3QgaW4gY29udGVudDoKKyAgICAgICAgcmV0dXJuICdub19saWNlbnNlJywgW10KKworICAgIGxpbmVzID0gY29udGVudC5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpCisKKyAgICBsaWNlbnNlZF9pZHggPSBuZXh0KAorICAgICAgICAoaSBmb3IgaSwgbCBpbiBlbnVtZXJhdGUobGluZXMpIGlmICdMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24nIGluIGwpLAorICAgICAgICBOb25lCisgICAgKQorICAgIGlmIGxpY2Vuc2VkX2lkeCBpcyBOb25lOgorICAgICAgICByZXR1cm4gJ25vX2xpY2Vuc2UnLCBbXQorCisgICAgIyBDaGVjayBmb3IgSFRNTC9YTUwgY29tbWVudCBibG9jayAoPCEtLSBvbiB0aGUgbGluZSBiZWZvcmUgTGljZW5zZWQpCisgICAgaWYgbGljZW5zZWRfaWR4ID4gMCBhbmQgbGluZXNbbGljZW5zZWRfaWR4IC0gMV0ucnN0cmlwKCdcclxuJykgPT0gJzwhLS0nOgorICAgICAgICByZXR1cm4gcHJvY2Vzc19odG1sX2NvbW1lbnQoZmlsZXBhdGgsIGZpeCwgbGluZXMsIGxpY2Vuc2VkX2lkeCAtIDEpCisKKyAgICBzdHlsZSwgYmFzZV9wcmVmaXggPSBkZXRlY3RfY29tbWVudF9zdHlsZShsaW5lcywgbGljZW5zZWRfaWR4KQorICAgIHJlc3VsdCA9IGZpbmRfbGljZW5zZV9ibG9jayhsaW5lcywgc3R5bGUsIGJhc2VfcHJlZml4KQorICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICByZXR1cm4gJ3VucGFyc2VhYmxlJywgWydjb3VsZCBub3QgbG9jYXRlIGNvbXBsZXRlIGxpY2Vuc2UgYmxvY2snXQorCisgICAgc3RhcnRfaWR4LCBlbmRfaWR4ID0gcmVzdWx0CisgICAgZXh0cmFjdGVkID0gW2dldF9saW5lX2NvbnRlbnQobGluZXNbaV0sIHN0eWxlLCBiYXNlX3ByZWZpeCkgZm9yIGkgaW4gcmFuZ2Uoc3RhcnRfaWR4LCBlbmRfaWR4ICsgMSldCisKKyAgICBtaXNtYXRjaGVzID0gW10KKyAgICBpZiBsZW4oZXh0cmFjdGVkKSAhPSBsZW4oQ0FOT05JQ0FMX0xJTkVTKToKKyAgICAgICAgbWlzbWF0Y2hlcy5hcHBlbmQoZiJsaW5lIGNvdW50OiBnb3Qge2xlbihleHRyYWN0ZWQpfSwgZXhwZWN0ZWQge2xlbihDQU5PTklDQUxfTElORVMpfSIpCisgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbihleHRyYWN0ZWQpLCBsZW4oQ0FOT05JQ0FMX0xJTkVTKSkpOgorICAgICAgICBpZiBleHRyYWN0ZWRbaV0gIT0gQ0FOT05JQ0FMX0xJTkVTW2ldOgorICAgICAgICAgICAgbWlzbWF0Y2hlcy5hcHBlbmQoZiJsaW5lIHtpfTogZ290IHtyZXByKGV4dHJhY3RlZFtpXSl9LCBleHBlY3RlZCB7cmVwcihDQU5PTklDQUxfTElORVNbaV0pfSIpCisKKyAgICBpZiBub3QgbWlzbWF0Y2hlczoKKyAgICAgICAgcmV0dXJuICdvaycsIFtdCisKKyAgICBpZiBmaXg6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5ld19saW5lcyA9ICgKKyAgICAgICAgICAgICAgICBsaW5lc1s6c3RhcnRfaWR4XQorICAgICAgICAgICAgICAgICsgcmVjb25zdHJ1Y3RfbGljZW5zZV9saW5lcyhzdHlsZSwgYmFzZV9wcmVmaXgpCisgICAgICAgICAgICAgICAgKyBsaW5lc1tlbmRfaWR4ICsgMTpdCisgICAgICAgICAgICApCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICd3JywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdyZXBsYWNlJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlbGluZXMobmV3X2xpbmVzKQorICAgICAgICAgICAgcmV0dXJuICdmaXhlZCcsIG1pc21hdGNoZXMKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuICdlcnJvcicsIFtmImZpeCBmYWlsZWQ6IHtlfSJdCisKKyAgICByZXR1cm4gJ2hhc19pc3N1ZXMnLCBtaXNtYXRjaGVzCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1haW4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBtYWluKCk6CisgICAgZml4X21vZGUgPSAnLS1maXgnIGluIHN5cy5hcmd2CisgICAgdmVyYm9zZV9tb2RlID0gJy0tdmVyYm9zZScgaW4gc3lzLmFyZ3YKKworICAgIHByaW50KGYiUmVwb3NpdG9yeToge1JFUE9fUk9PVH0iKQorICAgIHByaW50KGYiTW9kZTogICAgICAgeydmaXgnIGlmIGZpeF9tb2RlIGVsc2UgJ2NoZWNrIG9ubHknfSIpCisgICAgcHJpbnQoKQorCisgICAgc3RhdHMgPSBDb3VudGVyKCkKKyAgICBwcm9ibGVtcyA9IHt9ICAgICMgcmVsX3BhdGggLT4gbGlzdCBvZiBpc3N1ZSBzdHJpbmdzCisgICAgdW5wYXJzZWFibGUgPSBbXQorCisgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhSRVBPX1JPT1QpOgorICAgICAgICBkaXJuYW1lc1s6XSA9IHNvcnRlZChkIGZvciBkIGluIGRpcm5hbWVzIGlmIGQgbm90IGluIFBSVU5FX0RJUlMpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5qb2luKGRpcnBhdGgsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZmlsZXBhdGgsIFJFUE9fUk9PVCkucmVwbGFjZShvcy5zZXAsICcvJykKKworICAgICAgICAgICAgaWYgbWF0Y2hlc19leGNsdWRlX3BhdHRlcm4ocmVsX3BhdGgsIEVYQ0xVREVfUEFUVEVSTlMpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuYXNjaWlkb2MnKToKKyAgICAgICAgICAgICAgICBzdGF0dXMsIGlzc3VlcyA9IHByb2Nlc3NfYXNjaWlkb2MoZmlsZXBhdGgsIGZpeF9tb2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdGF0dXMsIGlzc3VlcyA9IHByb2Nlc3NfZ2VuZXJpYyhmaWxlcGF0aCwgZml4X21vZGUpCisKKyAgICAgICAgICAgIHN0YXRzW3N0YXR1c10gKz0gMQorCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gJ2hhc19pc3N1ZXMnOgorICAgICAgICAgICAgICAgIHByb2JsZW1zW3JlbF9wYXRoXSA9IGlzc3VlcworICAgICAgICAgICAgZWxpZiBzdGF0dXMgPT0gJ3VucGFyc2VhYmxlJzoKKyAgICAgICAgICAgICAgICB1bnBhcnNlYWJsZS5hcHBlbmQoKHJlbF9wYXRoLCBpc3N1ZXMpKQorICAgICAgICAgICAgZWxpZiBzdGF0dXMgaW4gKCdmaXhlZCcsICdvaycpIGFuZCB2ZXJib3NlX21vZGU6CisgICAgICAgICAgICAgICAgcHJpbnQoZiJ7J0ZJWEVEJyBpZiBzdGF0dXMgPT0gJ2ZpeGVkJyBlbHNlICdPSyAgICd9IHtyZWxfcGF0aH0iKQorCisgICAgdG90YWwgPSBzdW0oc3RhdHMudmFsdWVzKCkpCisgICAgcHJpbnQoZiJGaWxlcyBzY2FubmVkOiAgICB7dG90YWx9IikKKyAgICBwcmludChmIiAgTm8gbGljZW5zZTogICAgIHtzdGF0c1snbm9fbGljZW5zZSddfSIpCisgICAgcHJpbnQoZiIgIE9LOiAgICAgICAgICAgICB7c3RhdHNbJ29rJ119IikKKyAgICBwcmludChmIiAgRml4ZWQ6ICAgICAgICAgIHtzdGF0c1snZml4ZWQnXX0iKQorICAgIHByaW50KGYiICBIYXMgaXNzdWVzOiAgICAge3N0YXRzWydoYXNfaXNzdWVzJ119IikKKyAgICBwcmludChmIiAgVW5wYXJzZWFibGU6ICAgIHtzdGF0c1sndW5wYXJzZWFibGUnXX0iKQorICAgIHByaW50KGYiICBFcnJvcnM6ICAgICAgICAge3N0YXRzWydlcnJvciddfSIpCisKKyAgICBpZiBwcm9ibGVtczoKKyAgICAgICAgcHJpbnQoZiJcbj09PSBGSUxFUyBXSVRIIExJQ0VOU0UgSVNTVUVTICh7bGVuKHByb2JsZW1zKX0pID09PSIpCisgICAgICAgIGZvciByZWxfcGF0aCwgaXNzdWVzIGluIHNvcnRlZChwcm9ibGVtcy5pdGVtcygpKToKKyAgICAgICAgICAgIHByaW50KGYiXG4gIHtyZWxfcGF0aH06IikKKyAgICAgICAgICAgIGZvciBpc3N1ZSBpbiBpc3N1ZXNbOjVdOgorICAgICAgICAgICAgICAgIHByaW50KGYiICAgIHtpc3N1ZX0iKQorCisgICAgaWYgdW5wYXJzZWFibGU6CisgICAgICAgIHByaW50KGYiXG49PT0gVU5QQVJTRUFCTEUgTElDRU5TRSBCTE9DS1MgKHtsZW4odW5wYXJzZWFibGUpfSkgPT09IikKKyAgICAgICAgZm9yIHJlbF9wYXRoLCBpc3N1ZXMgaW4gdW5wYXJzZWFibGU6CisgICAgICAgICAgICBwcmludChmIiAge3JlbF9wYXRofToge2lzc3Vlc1swXX0iKQorCisgICAgcmV0dXJuIGxlbihwcm9ibGVtcykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oKSkKZGlmZiAtLWdpdCBhL2Jpbi9nZW5lcmF0ZS1ob21lLnNoIGIvYmluL2dlbmVyYXRlLWhvbWUuc2gKaW5kZXggMTQwMTNhZC4uZTdhYTRmMyAxMDA3NTUKLS0tIGEvYmluL2dlbmVyYXRlLWhvbWUuc2gKKysrIGIvYmluL2dlbmVyYXRlLWhvbWUuc2gKQEAgLTMxLDE3ICszMSwyNSBAQAogCiBwb3BkCiAKK3B1c2hkIGRvY3MvZ3JlbWxhdG9yCisKK2VjaG8gIm5wbTogJChucG0gLXZlcnNpb24pIgorbnBtIGluc3RhbGwKK25wbSBydW4gYnVpbGQKKworcG9wZAorCiBoYXNoIHJzeW5jIDI+IC9kZXYvbnVsbAogCiBpZiBbICQ/IC1lcSAwIF07IHRoZW4KICAgcnN5bmMgLWF2cSBkb2NzL3NpdGUvaG9tZSB0YXJnZXQvc2l0ZSAtLWV4Y2x1ZGUgdGVtcGxhdGUKLSAgcnN5bmMgLWF2cSBkb2NzL2dyZW1saW50L2J1aWxkLyB0YXJnZXQvc2l0ZS9ob21lL2dyZW1saW50CisgIHJzeW5jIC1hdnEgZG9jcy9ncmVtbGludC9kaXN0LyB0YXJnZXQvc2l0ZS9ob21lL2dyZW1saW50CisgIHJzeW5jIC1hdnEgZG9jcy9ncmVtbGF0b3IvZGlzdC8gdGFyZ2V0L3NpdGUvaG9tZS9ncmVtbGF0b3IKIGVsc2UKICAgY3AgLVIgZG9jcy9zaXRlL2hvbWUgdGFyZ2V0L3NpdGUKLSAgY3AgLVIgZG9jcy9ncmVtbGludC9idWlsZC8uIHRhcmdldC9zaXRlL2hvbWUvZ3JlbWxpbnQKKyAgY3AgLVIgZG9jcy9ncmVtbGludC9kaXN0Ly4gdGFyZ2V0L3NpdGUvaG9tZS9ncmVtbGludAorICBjcCAtUiBkb2NzL2dyZW1sYXRvci9kaXN0Ly4gdGFyZ2V0L3NpdGUvaG9tZS9ncmVtbGF0b3IKICAgcm0gLXJmIHRhcmdldC9zaXRlL2hvbWUvdGVtcGxhdGUKIGZpCiAKLXBvcGQKLQogZWNobyAiSG9tZSBwYWdlIHNpdGUgZ2VuZXJhdGVkIHRvICQoY2QgdGFyZ2V0L3NpdGUvaG9tZSA7IHB3ZCkiCmRpZmYgLS1naXQgYS9iaW4vcHVibGlzaC1kb2NzLnNoIGIvYmluL3B1Ymxpc2gtZG9jcy5zaAppbmRleCAzOGNhNmJjLi5lMTE2NmFlIDEwMDc1NQotLS0gYS9iaW4vcHVibGlzaC1kb2NzLnNoCisrKyBiL2Jpbi9wdWJsaXNoLWRvY3Muc2gKQEAgLTU4LDcgKzU4LDcgQEAKIAogbWtkaXIgLXAgLi4vanNkb2NzL2RvYwogcm0gLXJmIC4uL2pzZG9jcy9kb2MvKgotY3AgLVIgLi4vLi4vZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvYy8gLi4vanNkb2NzL2RvYy8KK2NwIC1SIC4uLy4uL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvYy8gLi4vanNkb2NzL2RvYy8KIAogbWtkaXIgLXAgLi4vZG90bmV0ZG9jcy9fc2l0ZQogcm0gLXJmIC4uL2RvdG5ldGRvY3MvX3NpdGUvKgpAQCAtMTIwLDQgKzEyMCw0IEBACiAgICR7U1ZOX0NNRH0gY29tbWl0IC1tICJEZXBsb3kgZG9jcyBmb3IgVGlua2VyUG9wICR7VkVSU0lPTn0iCiBmaQogCi1wb3BkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorcG9wZApkaWZmIC0tZ2l0IGEvYmluL3J1bi1leGFtcGxlcy5zaCBiL2Jpbi9ydW4tZXhhbXBsZXMuc2gKaW5kZXggYzEyODk5NS4uYTgxZThkMCAxMDA3NTUKLS0tIGEvYmluL3J1bi1leGFtcGxlcy5zaAorKysgYi9iaW4vcnVuLWV4YW1wbGVzLnNoCkBAIC02MCw5ICs2MCw5IEBACiAKIGVjaG8KIGVjaG8gIlJ1bm5pbmcgSmF2YVNjcmlwdCBleGFtcGxlczoiCi1ucG0gaW5zdGFsbCAtLXByZWZpeCBncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMKLW5vZGUgZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Nvbm5lY3Rpb25zLmpzCi1ub2RlIGdyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9iYXNpYy1ncmVtbGluLmpzCitucG0gaW5zdGFsbCAtLXByZWZpeCBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcworbm9kZSBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9jb25uZWN0aW9ucy5qcworbm9kZSBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9iYXNpYy1ncmVtbGluLmpzCiAKIGVjaG8KIGVjaG8gIlJ1bm5pbmcgLk5FVCBleGFtcGxlczoiCkBAIC0xMDEsOCArMTAxLDggQEAKIAogZWNobwogZWNobyAiUnVubmluZyBKYXZhU2NyaXB0IHRyYXZlcnNhbHM6IgotbnBtIGluc3RhbGwgLS1wcmVmaXggZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzCi1ub2RlIGdyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9tb2Rlcm4tdHJhdmVyc2Fscy5qcworbnBtIGluc3RhbGwgLS1wcmVmaXggZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMKK25vZGUgZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbW9kZXJuLXRyYXZlcnNhbHMuanMKIAogZWNobwogZWNobyAiUnVubmluZyAuTkVUIHRyYXZlcnNhbHM6IgpkaWZmIC0tZ2l0IGEvYmluL3VwZGF0ZS1jdXJyZW50LWRvY3Muc2ggYi9iaW4vdXBkYXRlLWN1cnJlbnQtZG9jcy5zaAppbmRleCA4NGVlNzVjLi4zODk5NmY5IDEwMDc1NQotLS0gYS9iaW4vdXBkYXRlLWN1cnJlbnQtZG9jcy5zaAorKysgYi9iaW4vdXBkYXRlLWN1cnJlbnQtZG9jcy5zaApAQCAtNDIsNyArNDIsNyBAQAogCiBmb3IgZGlyIGluICJkb2NzIiAiamF2YWRvY3MiCiBkbwotICBDVVJSRU5UPSQoKCR7U1ZOX0NNRH0gbGlzdCAiJHtkaXJ9IiA7IGxzICIke2Rpcn0iKSB8IHRyIC1kICcvJyB8IGdyZXAgLXYgU05BUFNIT1QgfCBncmVwIC1GdiBjdXJyZW50IHwgc29ydCAtclYgfCBoZWFkIC1uMSkKKyAgQ1VSUkVOVD0kKCgke1NWTl9DTUR9IGxpc3QgIiR7ZGlyfSIgOyBscyAiJHtkaXJ9IikgfCB0ciAtZCAnLycgfCBncmVwIC12IFNOQVBTSE9UIHwgZ3JlcCAtRnYgY3VycmVudCB8IGdyZXAgLXYgYmV0YSB8IHNvcnQgLXJWIHwgaGVhZCAtbjEpCiAKICAgJHtTVk5fQ01EfSB1cGRhdGUgLS1kZXB0aCBlbXB0eSAiJHtkaXJ9L2N1cnJlbnQiCiAgICR7U1ZOX0NNRH0gcm0gIiR7ZGlyfS9jdXJyZW50IgpkaWZmIC0tZ2l0IGEvYmluL3ZhbGlkYXRlLWRpc3RyaWJ1dGlvbi5zaCBiL2Jpbi92YWxpZGF0ZS1kaXN0cmlidXRpb24uc2gKaW5kZXggN2M1YzNlZS4uNzI5NzQxMiAxMDA3NTUKLS0tIGEvYmluL3ZhbGlkYXRlLWRpc3RyaWJ1dGlvbi5zaAorKysgYi9iaW4vdmFsaWRhdGUtZGlzdHJpYnV0aW9uLnNoCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgZWNobyAiT0siCiBmaQogZWNobyAtbiAiKiBidWlsZGluZyBwcm9qZWN0IC4uLiAiCi10b3VjaCB7Z3JlbWxpbi1kb3RuZXQsZ3JlbWxpbi1kb3RuZXQvc3JjLGdyZW1saW4tZG90bmV0L3Rlc3QsZ3JlbWxpbi1weXRob24sZ3JlbWxpbi1qYXZhc2NyaXB0LGdyZW1saW4tZ299Ly5nbHYKK3RvdWNoIHtncmVtbGluLWRvdG5ldCxncmVtbGluLWRvdG5ldC9zcmMsZ3JlbWxpbi1kb3RuZXQvdGVzdCxncmVtbGluLXB5dGhvbixncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdCxncmVtbGluLWdvfS8uZ2x2CiBMT0dfRklMRT0iJHtUTVBfRElSfS9tdm4tY2xlYW4taW5zdGFsbC0ke1ZFUlNJT059LmxvZyIKIG12biBjbGVhbiBpbnN0YWxsIC1xID4gIiR7TE9HX0ZJTEV9IiAyPiYxIHx8IHsKICAgZWNobyAiZmFpbGVkIgpkaWZmIC0tZ2l0IGEvZG9ja2VyL2J1aWxkLnNoIGIvZG9ja2VyL2J1aWxkLnNoCmluZGV4IGQ0OTVmZjUuLjY4ZjUzNDQgMTAwNzU1Ci0tLSBhL2RvY2tlci9idWlsZC5zaAorKysgYi9kb2NrZXIvYnVpbGQuc2gKQEAgLTQwLDEyICs0MCwxMSBAQAogICAgICAgICAgICJcbkJ1aWxkIHRoZSBjdXJyZW50IGxvY2FsIFRpbmtlclBvcCBwcm9qZWN0IGluIGEgRG9ja2VyIGNvbnRhaW5lci4iIFwKICAgICAgICAgICAiXG5CeSBkZWZhdWx0IGFsbCBtb2R1bGVzIGFyZSBydW4uIElmIHlvdSBwcmVmZXIgdG8gcnVuIGEgc3BlY2lmaWMgbW9kdWxlIHRoZW4gcGxlYXNlIiBcCiAgICAgICAgICAgIlxuZW50ZXIgaXQgYXMgYW4gb3B0aW9uLiBTZWxlY3Rpbmcgc3BlY2lmaWMgbW9kdWxlcyBjaGFuZ2VzIHRoZSBidWlsZCB0byBpbmNsdWRlIG9ubHkiIFwKLSAgICAgICAgICAiXG50aG9zZSBzZWxlY3RlZCBtb2R1bGVzIGFzIHdlbGwgYXMgZ3JlbWxpbi1zZXJ2ZXIsIGdyZW1saW4tdGVzdCBhbmQgbmVvNGotZ3JlbWxpbiAoYW5kIiBcCisgICAgICAgICAgIlxudGhvc2Ugc2VsZWN0ZWQgbW9kdWxlcyBhcyB3ZWxsIGFzIGdyZW1saW4tc2VydmVyIGFuZCBncmVtbGluLXRlc3QgKGFuZCIgXAogICAgICAgICAgICJcbnRoZWlyIGRlcGVuZGVuY2llcykuIiBcCiAgICAgICAgICAgIlxuXG5PcHRpb25zIGFyZTpcbiIgXAogICAgICAgICAgICJcblx0LXQsICAtLXRlc3RzICAgICAgICAgICAgICBydW4gc3RhbmRhcmQgdGVzdCBzdWl0ZSIgXAogICAgICAgICAgICJcblx0LWksICAtLWludGVncmF0aW9uLXRlc3RzICBydW4gaW50ZWdyYXRpb24gdGVzdHMiIFwKLSAgICAgICAgICAiXG5cdC1uLCAgLS1uZW80aiAgICAgICAgICAgICAgaW5jbHVkZSBOZW80aiIgXAogICAgICAgICAgICJcblx0LWdvLCAtLWdvbGFuZyAgICAgICAgICAgICBjaGFuZ2UgdG8gbWluaW1hbCBidWlsZCBhbmQgYWRkIGdyZW1saW4tZ28gdG8gYnVpbGQiIFwKICAgICAgICAgICAiXG5cdC1weSwgLS1weXRob24gICAgICAgICAgICAgY2hhbmdlIHRvIG1pbmltYWwgYnVpbGQgYW5kIGFkZCBncmVtbGluLXB5dGhvbiB0byBidWlsZCIgXAogICAgICAgICAgICJcblx0LWRuLCAtLWRvdG5ldCAgICAgICAgICAgICBjaGFuZ2UgdG8gbWluaW1hbCBidWlsZCBhbmQgYWRkIGdyZW1saW4tZG90bmV0IHRvIGJ1aWxkIiBcCkBAIC02OSw3ICs2OCw2IEBACiAgIGNhc2UgIiQxIiBpbgogICAgIC10ICB8IC0tdGVzdHMgKSBBUkdTPSIke0FSR1N9IC10IjsgUlVOX1RFU1RTPXRydWU7IHNoaWZ0IDs7CiAgICAgLWkgIHwgLS1pbnRlZ3JhdGlvbi10ZXN0cyApIEFSR1M9IiR7QVJHU30gLWkiOyBSVU5fSU5URUdSQVRJT05fVEVTVFM9dHJ1ZTsgc2hpZnQgOzsKLSAgICAtbiAgfCAtLW5lbzRqICkgQVJHUz0iJHtBUkdTfSAtbiI7IHNoaWZ0IDs7CiAgICAgLWdvIHwgLS1nb2xhbmcgKSBBUkdTPSIke0FSR1N9IC1nbyI7IElOQ0xVREVfR089dHJ1ZTsgc2hpZnQgOzsKICAgICAtcHkgfCAtLXB5dGhvbiApIEFSR1M9IiR7QVJHU30gLXB5IjsgSU5DTFVERV9QWVRIT049dHJ1ZTsgc2hpZnQgOzsKICAgICAtZG4gfCAtLWRvdG5ldCApIEFSR1M9IiR7QVJHU30gLWRuIjsgSU5DTFVERV9ET1RORVQ9dHJ1ZTsgc2hpZnQgOzsKQEAgLTEyMyw3ICsxMjEsNiBAQAogICAgICAgICAgICAtLW1vdW50IHR5cGU9YmluZCxzcmM9JChwd2QpL2dyZW1saW4tc2VydmVyLyxkc3Q9L3Vzci9zcmMvdGlua2VycG9wL2dyZW1saW4tc2VydmVyLyBcCiAgICAgICAgICAgIC0tbW91bnQgdHlwZT1iaW5kLHNyYz0kKHB3ZCkvZ3JlbWxpbi10ZXN0Lyxkc3Q9L3Vzci9zcmMvdGlua2VycG9wL2dyZW1saW4tdGVzdC8gXAogICAgICAgICAgICAtLW1vdW50IHR5cGU9YmluZCxzcmM9JChwd2QpL2dyZW1saW4tY29uc29sZS8sZHN0PS91c3Ivc3JjL3RpbmtlcnBvcC9ncmVtbGluLWNvbnNvbGUvIFwKLSAgICAgICAgICAgLS1tb3VudCB0eXBlPWJpbmQsc3JjPSQocHdkKS9uZW80ai1ncmVtbGluLyxkc3Q9L3Vzci9zcmMvdGlua2VycG9wL25lbzRqLWdyZW1saW4vIFwKICAgICAgICAgICAgdGlua2VycG9wOiR7QlVJTERfVEFHfQogY2hlY2tfc3RhdHVzCiAKQEAgLTE1Niw3ICsxNTMsNyBAQAogZmkKIAogaWYgWyAtbiAiJHtJTkNMVURFX0pBVkFTQ1JJUFR9IiBdICYmIFsgLW4gIiR7UlVOX1RFU1RTfSIgXTsgdGhlbgotICBwdXNoZCAke0FCU19QUk9KRUNUX0hPTUV9L2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdCA+IC9kZXYvbnVsbAorICBwdXNoZCAke0FCU19QUk9KRUNUX0hPTUV9L2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0ID4gL2Rldi9udWxsCiAgIGRvY2tlciBjb21wb3NlIHVwIC0tYnVpbGQgLS1leGl0LWNvZGUtZnJvbSBncmVtbGluLWpzLWludGVncmF0aW9uLXRlc3RzCiAgIGNoZWNrX3N0YXR1cyAiZG93biIKIGZpCmRpZmYgLS1naXQgYS9kb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIvZG9ja2VyLWVudHJ5cG9pbnQuc2ggYi9kb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIvZG9ja2VyLWVudHJ5cG9pbnQuc2gKaW5kZXggZmE4N2JhZi4uNDY2MjIxMSAxMDA2NDQKLS0tIGEvZG9ja2VyL2dyZW1saW4tc2VydmVyL2RvY2tlci1lbnRyeXBvaW50LnNoCisrKyBiL2RvY2tlci9ncmVtbGluLXNlcnZlci9kb2NrZXItZW50cnlwb2ludC5zaApAQCAtNDMsOSArNDMsOSBAQAogZWNobyBJUCBpcyAkSVAKIGVjaG8KIGVjaG8gQXZhaWxhYmxlIEdyZW1saW4gU2VydmVyIGluc3RhbmNlczoKLWVjaG8gIndzOi8vJHtJUH06NDU5NDAvZ3JlbWxpbiB3aXRoIGFub255bW91cyBhY2Nlc3MiCi1lY2hvICJ3czovLyR7SVB9OjQ1OTQxL2dyZW1saW4gd2l0aCBiYXNpYyBhdXRoZW50aWNhdGlvbiAoc3RlcGhlbi9wYXNzd29yZCkiCi1lY2hvICJ3czovLyR7SVB9OjQ1OTQyL2dyZW1saW4gd2l0aCBrZXJiZXJvcyBhdXRoZW50aWNhdGlvbiAoc3RlcGhlbi9wYXNzd29yZCkiCitlY2hvICJodHRwOi8vJHtJUH06NDU5NDAvZ3JlbWxpbiB3aXRoIGFub255bW91cyBhY2Nlc3MiCitlY2hvICJodHRwOi8vJHtJUH06NDU5NDEvZ3JlbWxpbiB3aXRoIGJhc2ljIGF1dGhlbnRpY2F0aW9uIChzdGVwaGVuL3Bhc3N3b3JkKSIKK2VjaG8gImh0dHA6Ly8ke0lQfTo0NTk0Mi9ncmVtbGluIHdpdGgga2VyYmVyb3MgYXV0aGVudGljYXRpb24gKHN0ZXBoZW4vcGFzc3dvcmQpIgogZWNobwogZWNobyAiU2VlIGRvY2tlci9ncmVtbGluLXNlcnZlci9kb2NrZXItZW50cnlwb2ludHMuc2ggZm9yIHRyYW5zY3JpcHRzIHBlciBHTFYuIgogZWNobyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCkBAIC01OSwxNCArNTksNyBAQAogCiAvb3B0L2dyZW1saW4tc2VydmVyL2Jpbi9ncmVtbGluLXNlcnZlci5zaCAke1RJTktFUlBPUF9IT01FfS9jb25mL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLnlhbWwgJgogCi0vb3B0L2dyZW1saW4tc2VydmVyL2Jpbi9ncmVtbGluLXNlcnZlci5zaCAke1RJTktFUlBPUF9IT01FfS9jb25mL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLXNlY3VyZS55YW1sICYKLQotamF2YSAtY3AgL29wdC9ncmVtbGluLXRlc3QvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLXRlc3QtJHtHUkVNTElOX1NFUlZFUl9WRVJTSU9OfS1qYXItd2l0aC1kZXBlbmRlbmNpZXMuamFyIFwKLSAgICAgLURsb2diYWNrLmNvbmZpZ3VyYXRpb25GaWxlPSJmaWxlOi9vcHQvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9sb2diYWNrLnhtbCIgXAotICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5LZGNGaXh0dXJlIC9vcHQvZ3JlbWxpbi1zZXJ2ZXIgJgotCi1leHBvcnQgSkFWQV9PUFRJT05TPSItWG1zNTEybSAtWG14NDA5Nm0gLURqYXZhLnNlY3VyaXR5LmtyYjUuY29uZj0vb3B0L2dyZW1saW4tc2VydmVyL3RhcmdldC9rZGMva3JiNS5jb25mIgotL29wdC9ncmVtbGluLXNlcnZlci9iaW4vZ3JlbWxpbi1zZXJ2ZXIuc2ggJHtUSU5LRVJQT1BfSE9NRX0vY29uZi9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi1rcmI1LnlhbWwKKy9vcHQvZ3JlbWxpbi1zZXJ2ZXIvYmluL2dyZW1saW4tc2VydmVyLnNoICR7VElOS0VSUE9QX0hPTUV9L2NvbmYvZ3JlbWxpbi1zZXJ2ZXItaW50ZWdyYXRpb24tc2VjdXJlLnlhbWwKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvZG9ja2VyL2dyZW1saW4tc2VydmVyL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLWtyYjUueWFtbCBiL2RvY2tlci9ncmVtbGluLXNlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi1rcmI1LnlhbWwKaW5kZXggZTJjYTdmMC4uNmRmZDk0ZCAxMDA2NDQKLS0tIGEvZG9ja2VyL2dyZW1saW4tc2VydmVyL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLWtyYjUueWFtbAorKysgYi9kb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIvZ3JlbWxpbi1zZXJ2ZXItaW50ZWdyYXRpb24ta3JiNS55YW1sCkBAIC00MSw5ICs0MSw2IEBACiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYxXSB9fQogICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSB9CiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0KLXByb2Nlc3NvcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbk9wUHJvY2Vzc29yLCBjb25maWc6IHsgc2Vzc2lvblRpbWVvdXQ6IDI4ODAwMDAwIH19Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnN0YW5kYXJkLlN0YW5kYXJkT3BQcm9jZXNzb3IsIGNvbmZpZzoge319CiBtZXRyaWNzOiB7CiAgIHNsZjRqUmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwfX0KIGdyZW1saW5Qb29sOiA4CkBAIC01Myw3ICs1MCw3IEBACiBtYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgogbWF4SGVhZGVyU2l6ZTogODE5MgogbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAorbWF4UmVxdWVzdENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCiBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzOiAxMDI0CiByZXN1bHRJdGVyYXRpb25CYXRjaFNpemU6IDY0CiB3cml0ZUJ1ZmZlckxvd1dhdGVyTWFyazogMzI3NjgKZGlmZiAtLWdpdCBhL2RvY2tlci9ncmVtbGluLXNlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi1zZWN1cmUueWFtbCBiL2RvY2tlci9ncmVtbGluLXNlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi1zZWN1cmUueWFtbAppbmRleCAwOTc3NmQxLi42NTI4NTUxIDEwMDY0NAotLS0gYS9kb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIvZ3JlbWxpbi1zZXJ2ZXItaW50ZWdyYXRpb24tc2VjdXJlLnlhbWwKKysrIGIvZG9ja2VyL2dyZW1saW4tc2VydmVyL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLXNlY3VyZS55YW1sCkBAIC0zNiwxNCArMzYsOSBAQAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0R3JlbWxpblBsdWdpbjoge2NsYXNzSW1wb3J0czogW2phdmEubGFuZy5NYXRoXSwgbWV0aG9kSW1wb3J0czogW2phdmEubGFuZy5NYXRoIypdfSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLlNjcmlwdEZpbGVHcmVtbGluUGx1Z2luOiB7ZmlsZXM6IFtzY3JpcHRzL2dlbmVyYXRlLWFsbC5ncm9vdnldfX19fQogc2VyaWFsaXplcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fQotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiwgY29uZmlnOiB7IGlvUmVnaXN0cmllczogW29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWMl0gfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjFdIH19Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIH0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEsIGNvbmZpZzogeyBzZXJpYWxpemVSZXN1bHRUb1N0cmluZzogdHJ1ZSB9fQotcHJvY2Vzc29yczoKLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IsIGNvbmZpZzogeyBzZXNzaW9uVGltZW91dDogMjg4MDAwMDAgfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc3RhbmRhcmQuU3RhbmRhcmRPcFByb2Nlc3NvciwgY29uZmlnOiB7fX0KKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjNdIH19ICAgICAgICAgICAgIyBhcHBsaWNhdGlvbi9qc29uCisgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAKKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQsIGNvbmZpZzogeyBzZXJpYWxpemVSZXN1bHRUb1N0cmluZzogdHJ1ZSB9fQogbWV0cmljczogewogICBzbGY0alJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH19CiBncmVtbGluUG9vbDogOApAQCAtNTMsNyArNDgsNyBAQAogbWF4SW5pdGlhbExpbmVMZW5ndGg6IDQwOTYKIG1heEhlYWRlclNpemU6IDgxOTIKIG1heENodW5rU2l6ZTogODE5MgotbWF4Q29udGVudExlbmd0aDogMTA0ODU3NjAKK21heFJlcXVlc3RDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAogbWF4QWNjdW11bGF0aW9uQnVmZmVyQ29tcG9uZW50czogMTAyNAogcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplOiA2NAogd3JpdGVCdWZmZXJMb3dXYXRlck1hcms6IDMyNzY4CmRpZmYgLS1naXQgYS9kb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIvZ3JlbWxpbi1zZXJ2ZXItaW50ZWdyYXRpb24ueWFtbCBiL2RvY2tlci9ncmVtbGluLXNlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sCmluZGV4IGQwMzk0NzkuLjhmNWQyZjcgMTAwNjQ0Ci0tLSBhL2RvY2tlci9ncmVtbGluLXNlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sCisrKyBiL2RvY2tlci9ncmVtbGluLXNlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sCkBAIC0xOCw3ICsxOCw3IEBACiBob3N0OiAwLjAuMC4wCiBwb3J0OiA0NTk0MAogZXZhbHVhdGlvblRpbWVvdXQ6IDMwMDAwCi1jaGFubmVsaXplcjogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5Xc0FuZEh0dHBDaGFubmVsaXplcgorY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyCiBncmFwaHM6IHsKICAgZ3JhcGg6IGNvbmYvdGlua2VyZ3JhcGgtc2VydmljZS5wcm9wZXJ0aWVzLAogICBpbW11dGFibGU6IGNvbmYvdGlua2VyZ3JhcGgtc2VydmljZS5wcm9wZXJ0aWVzLApAQCAtMzgsMTQgKzM4LDkgQEAKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEdyZW1saW5QbHVnaW46IHtjbGFzc0ltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aF0sIG1ldGhvZEltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aCMqXX0sCiAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5TY3JpcHRGaWxlR3JlbWxpblBsdWdpbjoge2ZpbGVzOiBbc2NyaXB0cy9nZW5lcmF0ZS1hbGwuZ3Jvb3Z5XX19fX0KIHNlcmlhbGl6ZXJzOgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMywgY29uZmlnOiB7IGlvUmVnaXN0cmllczogW29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWM10gfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjJdIH19Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYxXSB9fQotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSB9Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0KLXByb2Nlc3NvcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbk9wUHJvY2Vzc29yLCBjb25maWc6IHsgc2Vzc2lvblRpbWVvdXQ6IDI4ODAwMDAwIH19Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnN0YW5kYXJkLlN0YW5kYXJkT3BQcm9jZXNzb3IsIGNvbmZpZzoge319CisgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICAgICMgYXBwbGljYXRpb24vanNvbgorICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wCisgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0LCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0KIG1ldHJpY3M6IHsKICAgc2xmNGpSZXBvcnRlcjoge2VuYWJsZWQ6IHRydWUsIGludGVydmFsOiAxODAwMDB9fQogZ3JlbWxpblBvb2w6IDgKQEAgLTU1LDcgKzUwLDcgQEAKIG1heEluaXRpYWxMaW5lTGVuZ3RoOiA0MDk2CiBtYXhIZWFkZXJTaXplOiA4MTkyCiBtYXhDaHVua1NpemU6IDgxOTIKLW1heENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCittYXhSZXF1ZXN0Q29udGVudExlbmd0aDogMTA0ODU3NjAKIG1heEFjY3VtdWxhdGlvbkJ1ZmZlckNvbXBvbmVudHM6IDEwMjQKIHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZTogNjQKIHdyaXRlQnVmZmVyTG93V2F0ZXJNYXJrOiAzMjc2OApkaWZmIC0tZ2l0IGEvZG9ja2VyL2dyZW1saW4tc2VydmVyL2tyYjUuY29uZiBiL2RvY2tlci9ncmVtbGluLXNlcnZlci9rcmI1LmNvbmYKaW5kZXggM2Y5YzMyMi4uM2VlOWUzZCAxMDA2NDQKLS0tIGEvZG9ja2VyL2dyZW1saW4tc2VydmVyL2tyYjUuY29uZgorKysgYi9kb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIva3JiNS5jb25mCkBAIC03LDEzICs3LDE0IEBACiAjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgogIwogCiBbbGliZGVmYXVsdHNdCmRpZmYgLS1naXQgYS9kb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlci9Eb2NrZXJmaWxlIGIvZG9ja2VyL2dyZW1saW4tdGVzdC1zZXJ2ZXIvRG9ja2VyZmlsZQppbmRleCA2ODAyZGNhLi44YWM4NTNjIDEwMDY0NAotLS0gYS9kb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlci9Eb2NrZXJmaWxlCisrKyBiL2RvY2tlci9ncmVtbGluLXRlc3Qtc2VydmVyL0RvY2tlcmZpbGUKQEAgLTI5LDcgKzI5LDcgQEAKIAogIyBJbnN0YWxsaW5nIGRvczJ1bml4IHRvIGF2b2lkIGVycm9ycyBpbiBydW5uaW5nIHRoZSBlbnRyeXBvaW50IHNjcmlwdCBvbiBXaW5kb3dzIG1hY2hpbmVzIHdoZXJlIHRoZWlyCiAjIGNhcnJpYWdlIHJldHVybiBpcyBcclxuIGluc3RlYWQgb2YgdGhlIFxuIG5lZWRlZCBmb3IgbGludXgvdW5peCBjb250YWluZXJzCi1SVU4gYXBrIHVwZGF0ZSAmJiBhcGsgYWRkIGRvczJ1bml4CitSVU4gYXBrIHVwZGF0ZSAmJiBhcGsgYWRkIGRvczJ1bml4IGN1cmwKIFJVTiBkb3MydW5peCAvb3B0L2RvY2tlci1lbnRyeXBvaW50LnNoIC9vcHQvZ3JlbWxpbi1zZXJ2ZXIvYmluL2dyZW1saW4tc2VydmVyLnNoICYmIGFwayBkZWwgZG9zMnVuaXgKIAogQVJHIEdSRU1MSU5fU0VSVkVSCmRpZmYgLS1naXQgYS9kb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlci9rcmI1LmNvbmYgYi9kb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlci9rcmI1LmNvbmYKaW5kZXggYWY2NGYyOC4uMWM4NzA1MiAxMDA2NDQKLS0tIGEvZG9ja2VyL2dyZW1saW4tdGVzdC1zZXJ2ZXIva3JiNS5jb25mCisrKyBiL2RvY2tlci9ncmVtbGluLXRlc3Qtc2VydmVyL2tyYjUuY29uZgpAQCAtNywxMyArNywxNCBAQAogIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KICMKIAogW2xpYmRlZmF1bHRzXQpkaWZmIC0tZ2l0IGEvZG9ja2VyL3NjcmlwdHMvYnVpbGQuc2ggYi9kb2NrZXIvc2NyaXB0cy9idWlsZC5zaAppbmRleCAwZGUyMDJiLi44ODMxYTNkIDEwMDc1NQotLS0gYS9kb2NrZXIvc2NyaXB0cy9idWlsZC5zaAorKysgYi9kb2NrZXIvc2NyaXB0cy9idWlsZC5zaApAQCAtMjAsNyArMjAsNiBAQAogCiBSVU5fVEVTVFM9CiBSVU5fSU5URUdSQVRJT05fVEVTVFM9Ci1JTkNMVURFX05FTzRKPQogQlVJTERfSkFWQV9ET0NTPQogQlVJTERfVVNFUl9ET0NTPQogSU5DTFVERV9HTz0KQEAgLTMzLDcgKzMyLDYgQEAKICAgY2FzZSAiJDEiIGluCiAgICAgLXQgIHwgLS10ZXN0cyApIFJVTl9URVNUUz10cnVlOyBzaGlmdCA7OwogICAgIC1pICB8IC0taW50ZWdyYXRpb24tdGVzdHMgKSBSVU5fSU5URUdSQVRJT05fVEVTVFM9dHJ1ZTsgc2hpZnQgOzsKLSAgICAtbiAgfCAtLW5lbzRqICkgSU5DTFVERV9ORU80Sj10cnVlOyBzaGlmdCA7OwogICAgIC1qICB8IC0tamF2YS1kb2NzICkgQlVJTERfSkFWQV9ET0NTPXRydWU7IHNoaWZ0IDs7CiAgICAgLWQgIHwgLS1kb2NzICkgQlVJTERfVVNFUl9ET0NTPXRydWU7IHNoaWZ0IDs7CiAgICAgLWdvIHwgLS1nb2xhbmcgKSBJTkNMVURFX0dPPXRydWU7IHNoaWZ0IDs7CkBAIC00OSwxNCArNDcsMTMgQEAKIAogWyAteiAiJHtSVU5fVEVTVFN9IiBdICYmIFRJTktFUlBPUF9CVUlMRF9PUFRJT05TPSIke1RJTktFUlBPUF9CVUlMRF9PUFRJT05TfSAtRHNraXBUZXN0cyIKIFsgLXogIiR7UlVOX0lOVEVHUkFUSU9OX1RFU1RTfSIgXSB8fCBUSU5LRVJQT1BfQlVJTERfT1BUSU9OUz0iJHtUSU5LRVJQT1BfQlVJTERfT1BUSU9OU30gLURza2lwSW50ZWdyYXRpb25UZXN0cz1mYWxzZSIKLVsgLXogIiR7SU5DTFVERV9ORU80Sn0iIF0gfHwgVElOS0VSUE9QX0JVSUxEX09QVElPTlM9IiR7VElOS0VSUE9QX0JVSUxEX09QVElPTlN9IC1EaW5jbHVkZU5lbzRqIgogWyAteiAiJHtCVUlMRF9KQVZBX0RPQ1N9IiBdICYmIFRJTktFUlBPUF9CVUlMRF9PUFRJT05TPSIke1RJTktFUlBPUF9CVUlMRF9PUFRJT05TfSAtRG1hdmVuLmphdmFkb2Muc2tpcD10cnVlIgogCiAjIElmIGFueSBvZiB0aGVzZSBHTFZzIGFyZSBzZWxlY3RlZCB0aGVuIGNyZWF0ZSBhIG1pbmltYWwgYnVpbGQgdG8gcmVkdWNlIGJ1aWxkL3Rlc3QgdGltZXMKICMgYXMgdGhlIHVzZXIgaXMgbGlrZWx5IG5vdCBpbnRlcmVzdGVkIGluIHRoZSBvdGhlciBtb2R1bGVzLgogaWYgW1sgLW4gJHtJTkNMVURFX0dPfSB8fCAtbiAke0lOQ0xVREVfUFlUSE9OfSB8fCAtbiAke0lOQ0xVREVfRE9UTkVUfSB8fCAtbiAke0lOQ0xVREVfSkFWQVNDUklQVH0gfHwgLW4gJHtJTkNMVURFX0NPTlNPTEV9IF1dOyB0aGVuCi0gICMgZ3JlbWxpbi1zZXJ2ZXIsIGdyZW1saW4tdGVzdCBhbmQgbmVvNGotZ3JlbWxpbiBhcmUgbWluaW1hbCBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHN0YXJ0IGEgc2VydmVyIGZvciBHTFYgdGVzdGluZy4KLSAgVElOS0VSUE9QX0JVSUxEX09QVElPTlM9IiR7VElOS0VSUE9QX0JVSUxEX09QVElPTlN9IC1hbSAtcGwgZ3JlbWxpbi1zZXJ2ZXIsZ3JlbWxpbi10ZXN0LG5lbzRqLWdyZW1saW4iCisgICMgZ3JlbWxpbi1zZXJ2ZXIgYW5kIGdyZW1saW4tdGVzdCBhcmUgbWluaW1hbCBkZXBlbmRlbmNpZXMgbmVlZGVkIHRvIHN0YXJ0IGEgc2VydmVyIGZvciBHTFYgdGVzdGluZy4KKyAgVElOS0VSUE9QX0JVSUxEX09QVElPTlM9IiR7VElOS0VSUE9QX0JVSUxEX09QVElPTlN9IC1hbSAtcGwgZ3JlbWxpbi1zZXJ2ZXIsZ3JlbWxpbi10ZXN0IgogCiAgIFsgLW4gIiR7SU5DTFVERV9HT30iIF0gJiYgVElOS0VSUE9QX0JVSUxEX09QVElPTlM9IiR7VElOS0VSUE9QX0JVSUxEX09QVElPTlN9LGdyZW1saW4tZ28iCiAgIFsgLW4gIiR7SU5DTFVERV9QWVRIT059IiBdICYmIFRJTktFUlBPUF9CVUlMRF9PUFRJT05TPSIke1RJTktFUlBPUF9CVUlMRF9PUFRJT05TfSxncmVtbGluLXB5dGhvbiIKQEAgLTExOCw3ICsxMTUsNiBAQAogICAjIGJ1aWxkIGRvY3MKICAgbWtkaXIgLXAgfi8uZ3Jvb3Z5CiAgIGNwIGRvY2tlci9yZXNvdXJjZXMvZ3Jvb3Z5L2dyYXBlQ29uZmlnLnhtbCB+Ly5ncm9vdnkvCi0gIHJtIC1yZiAvdG1wL25lbzRqCiAgIGdyZXAgLWwgJ2h0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56JyAkKGZpbmQgZG9jcy9zcmMgLW5hbWUgIiouYXNjaWlkb2MiIHwgZ3JlcCAtdiAnXi5kb2NzL3NyYy91cGdyYWRlLycpIHwgeGFyZ3Mgc2VkIC1pICdzQGh0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56QC9kb2NzL3gueS56QGcnCiAgIGJpbi9wcm9jZXNzLWRvY3Muc2ggfHwgZXhpdCAxCiAKZGlmZiAtLWdpdCBhL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjAueC5hc2NpaWRvYyBiL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjAueC5hc2NpaWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODdkMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jCkBAIC0wLDAgKzEsNzkzIEBACisvLy8vCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vCis9PSBUaW5rZXJQb3AgMy4wLjAgKEEgR3JlbWxpbiBSxIFnYSBpbiA3LzE2IFRpbWUpCisKK2ltYWdlOjpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYXBhY2hlL3RpbmtlcnBvcC9tYXN0ZXIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4taGluZHUucG5nW3dpZHRoPTIyNV0KKworW1tyZWxlYXNlLTMtMC0yLWluY3ViYXRpbmddXQorPT09IFRpbmtlclBvcCAzLjAuMiAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE5LCAyMDE1KQorCisqIENsZWFuZWQgdXAgYGV4dC9gIGRpcmVjdG9yeSB3aGVuIHBsdWdpbiBpbnN0YWxsYXRpb24gZmFpbHMgZm9yIGBncmVtbGluLXNlcnZlcmAgYW5kIGBncmVtbGluLWNvbnNvbGVgLgorKiBGaXhlZCBpc3N1ZXMgaW4gYGdyZW1saW4tc2VydmVyYCB3aGVuIGNvbmZpZ3VyZWQgZm9yIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24uCisqIE1hZGUgYEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtYCB3b3JrIGZvciBhbnkgcGVyc2lzdGVudCBUUDMtc3VwcG9ydGluZyBncmFwaCAoaW5wdXQgYW5kIG91dHB1dCkuCisqIGBUcmVlU2lkZUVmZmVjdFN0ZXBgIG5vdyBpbXBsZW1lbnRzIGBQYXRoUHJvY2Vzc29yYCB3aGljaCBmaXhlZCBhIGBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5YCBpc3N1ZS4KKyogQWRkZWQgYSBzaGVsbCBzY3JpcHQgdGhhdCB2ZXJpZmllcyBzb3VyY2UgYW5kIGJpbmFyeSBkaXN0cmlidXRpb25zLgorKiBGaXhlZCBhIGJ1bGsgcmVsYXRlZCBidWcgaW4gYEdyb3VwU3RlcGAgd2hlbiB1c2VkIG9uIGBHcmFwaENvbXB1dGVyYCAoT0xBUCkuCisqIEdyZW1saW4gU2VydmVyIGJpbmFyeSBkaXN0cmlidXRpb24gbm93IHBhY2thZ2VzIGB0aW5rZXJncmFwaC1ncmVtbGluYCBhbmQgYGdyZW1saW4tZ3Jvb3Z5YCBhcyBwbHVnaW5zIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBHcmVtbGluIENvbnNvbGUncyBwYWNrYWdpbmcuCisqIFRoZSBgUmVwZWF0U3RlcGAgY2xhdXNlcyAoYHVudGlsKClgLGBlbWl0KClgLGByZXBlYXQoKWApIGNhbiBvbmx5IGJlIHNldCBhdCBtb3N0IG9uZSB0aW1lIGluIG9yZGVyIHRvIHByZXZlbnQgdXNlciBjb25mdXNpb24uCisqIEZpeGVkIGEgYGNsb25lKClgIGJ1ZyBpbiBgUmVwZWF0U3RlcGAsIGBUcmVlU3RlcGAsIGBHcm91cENvdW50U3RlcGAsIGBHcm91cFN0ZXBgLCBhbmQgYFRyYXZlcnNhbFJpbmdgLgorKiBGaXhlZCBhIHRocmVhZCBjb250ZXh0IGJ1ZyBpbiBgVGlua2VyR3JhcGhDb21wdXRlcmAuCisqIEZpeGVkIGlzc3VlcyB3aXRoIHRoZSBgZ3JlbWxpbi1kcml2ZXJgIHJlbGF0ZWQgdG8gaGFuZ2luZyBjb25uZWN0aW9ucyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMuCisqIFRpbmtlckdyYXBoIG5vdyBoYXMgYW4gb3B0aW9uIGZvciBwZXJzaXN0ZW5jZSB3aGVyZSB0aGUgZGF0YSBpcyBzYXZlZCBvbiBgY2xvc2UoKWAgYW5kLCBpZiBwcmVzZW50LCBsb2FkZWQgb24gYG9wZW4oKWAuCisqIEFkZGVkIGFuIG92ZXJsb2FkIGZvciBgR3JlbWxpbkV4ZWN1dG9yLmV2YWwoKWAgdGhhdCB0YWtlcyBhIGBMaWZlY3ljbGVgIG9iamVjdCB0byBvdmVycmlkZSBzb21lIGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBgR3JlbWxpbkV4ZWN1dG9yLkJ1aWxkZXJgLgorKiBJbXByb3ZlZCBzZXNzaW9uIGNsb3NpbmcgZm9yIHRyYW5zYWN0aW9uYWwgZ3JhcGhzIGR1cmluZyBzaHV0ZG93biBvZiBHcmVtbGluIFNlcnZlci4KKyogRml4ZWQgaWQgcGFyYW1ldGVyIHVzZWQgaW4gdGVzdHMgZm9yIGBHcm9vdnlTdG9yZVRlc3RgIGFuZCBgR3Jvb3Z5UmVwZWF0VGVzdGAgdG8gbm90IGJlIHRyZWF0ZWQgYXMgYW4gZW1iZWRkZWQgc3RyaW5nLgorKiBgR3JhcGhTdGVwYCB3aWxsIGNvbnZlcnQgYW55IGBWZXJ0ZXhgIG9yIGBFZGdlYCBpZHMgdG8gdGhlaXIgaWQgYE9iamVjdGAgcHJpb3IgdG8gc3VibWlzc2lvbiB0byBgR3JhcGhDb21wdXRlcmAgKE9MQVApLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtODE0IENvbm5lY3Rpb25Qb29sIGNhbiBmaWxsIHdpdGggZGVhZCBDb25uZWN0aW9ucworKiBUSU5LRVJQT1AtODE2IEdyeW8gZGVzZXJpYWxpemF0aW9uIG9mIGVycm9yIHJlc3BvbnNlIHdpdGggbnVsbCBtZXNzYWdlIGNhdXNlcyBOUEUgYW5kIHByb3RvY29sIGRlc3luYworKiBUSU5LRVJQT1AtODE3IEdyeW8gc2VyaWFsaXphdGlvbiBvZiBsYXJnZSByZXNwb25zZXMgZmFpbHMgYW5kIGNhdXNlcyBwcm90b2NvbCBkZXN5bmMKKyogVElOS0VSUE9QLTg0MCBUcmVlVGVzdCBJcyBub3QgYmVpbmcgaWdub3JlZCB2aWEgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneQorKiBUSU5LRVJQT1AtODQ5IGdyZW1saW4tc2VydmVyIGRvZXNuJ3QgY2xvc2Ugc2Vzc2lvbnMgb24gJ2Nsb3NlJyBvcGNvZGUKKyogVElOS0VSUE9QLTg1NSBzYXNsIGF1dGhlbnRpY2F0aW9uIHR5cGUgZXJyb3IgZHVlIHRvIEpzb24gZm9ybWF0CisqIFRJTktFUlBPUC04NjUgRXJyb3JzIHdpdGggSFRUUCBSRVNUIGJhc2ljIGF1dGgKKyogVElOS0VSUE9QLTg2NyBUaW5rZXJHcmFwaFByb3ZpZGVyIGRvZXMgbm90IGluaXRpYWxpemUgdGVtcCBkaXIKKyogVElOS0VSUE9QLTg3MCBSZWJvdW5kIGNsaWVudCByZXF1aXJlcyBhIGNvbm5lY3Rpb24gdG8gb2NjdXIgb24gdGhlIHVuZGVybHlpbmcgY2xpZW50LgorKiBUSU5LRVJQT1AtODc3IERyaXZlciBoYW5ncyBpZiBTU0wgZW5hYmxlZCBvbiBzZXJ2ZXIgYnV0IG5vdCBvbiBjbGllbnQKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtODI4IFRpbmtlckdyYXBoIGNhbiBzdXBwb3J0UGVyc2lzdGVuY2UoKSwgc2hvdWxkIHdlIGFsbG93IGl0LgorKiBUSU5LRVJQT1AtODMwIHByb2Nlc3MtZG9jcy5zaCBpbnRyb2R1Y2VzIGV4dHJhIHdoaXRlIHNwYWNlIGRlcGVuZGVudCBvbiBjb25zb2xlIHdpZHRoCisqIFRJTktFUlBPUC04MzkgRG9jcyBzaG91bGQgaGF2ZSBhICR7dmVyc2lvbi5udW1iZXJ9IHVuZGVyIHRoZSBsb2dvLgorKiBUSU5LRVJQT1AtODUyIEEgc2hlbGwgc2NyaXB0IHRoYXQgdmFsaWRhdGVzIHRoZSBkaXN0cmlidXRpb24gYXJ0aWZhY3RzIGF0IHJlbGVhc2UgdGltZQorKiBUSU5LRVJQT1AtODUzIFRpbmtlclBvcCBMb2dvIGluIEphdmFEb2MgaW5kZXguaHRtbAorKiBUSU5LRVJQT1AtODU4IENsZWFudXAgYWZ0ZXIgZmFpbGVkIDppbnN0YWxsCisKK1tbcmVsZWFzZS0zLTAtMS1pbmN1YmF0aW5nXV0KKz09PSBUaW5rZXJQb3AgMy4wLjEgKFJlbGVhc2UgRGF0ZTogU2VwdGVtYmVyIDIsIDIwMTUpCisKKyogYENvbXBhcmVgIG5vdyB1c2VzIGBCaWdEZWNpbWFsYCBpbnRlcm5hbGx5IHRvIGVuc3VyZSB0aGF0IHByZWNpc2lvbiBpcyBub3QgbG9zdCBvbiBzdGFuZGFyZCBudW1iZXIgY29tcGFyaXNvbnMuCisqIFJlbmFtZWQgYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIHRvIGBWZXJpZmljYXRpb25TdHJhdGVneWAgc28gYWxsIHRoZSB2ZXJpZmljYXRpb24gc3RyYXRlZ2llcyBjYW4gdXNlIGl0LgorKiBBZGRlZCBgU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneWAgdGhhdCB0aHJvd3MgZXhjZXB0aW9ucyBmb3IgaWxsZWdhbCB0cmF2ZXJzYWwgcGF0dGVybnMgb24gdGhlIHN0YW5kYXJkIGVuZ2luZSAod2hpY2ggZXh0ZW5kcyB0byBgR3JhcGhDb21wdXRlcmApLgorKiBBZGRlZCBgR3JhcGhGZWF0dXJlcy5zdXBwb3J0c0NvbmN1cnJlbnRBY2Nlc3MoKWAgdG8gYWxsb3dzIGBHcmFwaGAgaW1wbGVtZW50YXRpb25zIHRvIHNpZ25pZnkgaWYgbXVsdGlwbGUgaW5zdGFuY2VzIGNhbiBhY2Nlc3MgdGhlIHNhbWUgZGF0YS4KKyogQ2xhcmlmaWVkIHNlbWFudGljcyBvZiBgVHJhbnNhY3Rpb24uY2xvc2UoKWAgaW4gdW5pdCB0ZXN0cyAtIG5vdyByZWZlcnMgb25seSB0byBjbG9zaW5nIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGluIHRoZSBjdXJyZW50IHRocmVhZC4KKyogYE5lbzRqR3JhcGhgIG5vIGxvbmdlciB1c2VzIGBPcHRPdXRgIG9uIGBUcmFuc2FjdGlvblRlc3Quc2hvdWxkUm9sbGJhY2tPbkNsb3NlV2hlbkNvbmZpZ3VyZWRgIChmb3JtZXJseSBgc2hvdWxkUm9sbGJhY2tPblNodXRkb3duV2hlbkNvbmZpZ3VyZWRgKQorKiBHcmVtbGluIFNlcnZlciBpbml0aWFsaXphdGlvbiBzY3JpcHRzIGNhbiBub3cgcmV0dXJuIGEgYE1hcGAgb2YgdmFsdWVzIHRoYXQgd2lsbCBiZWNvbWUgZ2xvYmFsIGJpbmRpbmdzIGZvciB0aGUgc2VydmVyLgorKiBJbnRyb2R1Y2VkIHRoZSBgLS1kcnlSdW5gIG9wdGlvbiB0byB0aGUgZG9jdW1lbnQgZ2VuZXJhdGlvbiBwcm9jZXNzIHdoaWNoIGlnbm9yZXMgYWN0dWFsIHNjcmlwdCBleGVjdXRpb24gaW4gdGhlIEdyZW1saW4gQ29uc29sZS4KKyogRml4ZWQgYnVnIGluIGBFdmVudFN0cmF0ZWd5YCBhcm91bmQgcHJvcGVydHkgY2hhbmdlZCBldmVudHMgd2hlbiBjYWxsaW5nIGBwcm9wZXJ0eWAgd2l0aG91dCBjYXJkaW5hbGl0eSBvciBtZXRhLXByb3BlcnR5IHZhbHVlcy4KKyogSW1wcm92ZWQgc3VwcG9ydCBmb3IgdGhlIGBBY2NlcHRgIGhlYWRlciBmb3IgUkVTVC1iYXNlZCByZXF1ZXN0cyBpbiBHcmVtbGluIFNlcnZlci4KKyogYEdyYXBoRmFjdG9yeWAgbm93IGFsbG93cyBzcGVjaWZpY2F0aW9uIG9mIHRoZSBjbGFzcyB0byB1c2UgdG8gaW5zdGFudGlhdGUgdGhlIGBHcmFwaGAgdGhyb3VnaCB0aGUgYEdyYXBoRmFjdG9yeUNsYXNzYCBhbm5vdGF0aW9uLgorKiBBZGRlZCBgd3JhcEFkamFjZW5jeUxpc3RgIGFuZCBgdW53cmFwQWRqYWNlbmN5TGlzdGAgb3B0aW9ucyB0byBgR3JhcGhTT05Xcml0ZXJgIGFuZCBgR3JhcGhTT05SZWFkZXJgIHJlc3BlY3RpdmVseSwgdGh1cyBhbGxvd2luZyB2YWxpZCBKU09OIHRvIGJlIHdyaXR0ZW4vcmVhZCBpZiB0aGUgdXNlciBkZXNpcmVzLgorKiBBZGRlZCBHcmVtbGluIFNlcnZlci9Ecml2ZXIgYXV0aGVudGljYXRpb24gc3VwcG9ydCB2aWEgU0FTTC4KKyogQWRkZWQgQmFzaWMgSFRUUCBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IGZvciBSRVNUIGluIEdyZW1saW4gU2VydmVyLgorKiBBZGRlZCBHcmVtbGluIFNlcnZlciBwbHVnaW4gdG8gaGVscCB3aXRoICJjcmVkZW50aWFsIGdyYXBoIiBtYW5hZ2VtZW50ICh1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYXV0aGVudGljYXRpb24gZmVhdHVyZXMgb2YgR3JlbWxpbiBTZXJ2ZXIpLgorKiBBZGRlZCAic2VjdXJlIiBHcmVtbGluIFNlcnZlci9Ecml2ZXIgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGVzLgorKiBBZGp1c3RlZCBjb25maWd1cmF0aW9uIGZvciBqYXZhZG9jIGdlbmVyYXRpb24gdG8gZWxpbWluYXRlIGVycm9yIG1lc3NhZ2VzLgorKiBSZW1vdmVkICJyZXNlcnZlZCIgZ3JhcGggY29uY2VwdCBuYW1lcyBmcm9tIHRlc3RzIChlLmcuICJsYWJlbCIsICJlZGdlIiwgInZhbHVlIikgdG8gc3VwcG9ydCB0aGUgY29udmVudGlvbiBvZiBhdm9pZGluZyB0aGVzZSBzdHJpbmdzIGZvciBwcm9wZXJ0eSBuYW1lcy4KKyogSW50cm9kdWNlZCBgR3JhcGhQcm92aWRlci5EZXNjcmlwdG9yYCB3aGljaCBhbm5vdGF0ZXMgYSBgR3JhcGhQcm92aWRlcmAgaW1wbGVtZW50YXRpb24gdG8gZGVzY3JpYmUgd2hhdCBgR3JhcGhDb21wdXRlcmAgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkLgorKiBNb2RpZmllZCBgT3B0T3V0YCB0byBpbmNsdWRlIGEgYGNvbXB1dGVyc2AgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0aGUgYEdyYXBoYCB0byBvcHQtb3V0IG9mIGNvbXB1dGVyLWJhc2VkIHRlc3RzIGZvciBzcGVjaWZpYyBjb21wdXRhdGlvbiBlbmdpbmVzLgorKiBBZGRlZCBhIGBTYW5kYm94RXh0ZW5zaW9uYCB0aGF0IGNhbiBiZSBwbHVnZ2VkIGludG8gYFR5cGVDaGVja2VkQ3VzdG9taXplclByb3ZpZGVyYCBhbmQgYENvbXBpbGVTdGF0aWNDdXN0b21pemVyUHJvdmlkZXJgIHRvIGNvbnRyb2wgY2xhc3NlcyBhbmQgbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAuCisqIEFkZGVkIGEgbnVtYmVyIG9mIG5ldyBgSW1wb3J0Q3VzdG9taXplclByb3ZpZGVyYCBpbXBsZW1lbnRhdGlvbnMgc3VjaCBhcywgYFRpbWVkSW50ZXJydXB0Q3VzdG9taXplclByb3ZpZGVyYCwgYFR5cGVDaGVja2VkQ3VzdG9taXplclByb3ZpZGVyYCBhbmQgb3RoZXJzLgorKiBSZWZhY3RvcmVkIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCB0byBtYWtlIG1vcmUgZ2VuZXJhbCB1c2Ugb2YgYEltcG9ydEN1c3RvbWl6ZXJQcm92aWRlcmAgaW1wbGVtZW50YXRpb25zLgorKiBSZW1vdmVkIGBTZWN1cml0eUN1c3RvbWl6ZXJQcm92aWRlcmAgY2xhc3MgYW5kIHRoZSAic2FuZGJveCIgY29uZmlndXJhdGlvbiBvbiB0aGUgYFNjcmlwdEVuZ2luZXNgIGNsYXNzIC0gdGhpcyB3YXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgYW5kIG5vdCBtZWFudCBmb3IgcHVibGljIHVzZS4KKyogUmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGBncm9vdnktc2FuZGJveGAgZnJvbSB0aGUgYGdyZW1saW4tZ3Jvb3Z5YCBtb2R1bGUuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC03NzAgRXhjZXB0aW9uIHdoaWxlIEFkZFByb3BlcnR5U3RlcCB0cmllcyB0byBkZXRhY2ggdmVydGV4IHByb3BlcnR5CisqIFRJTktFUlBPUC03ODAgVXNlIG9mIGZvbGQoKSBpbiByZXBlYXQoKQorKiBUSU5LRVJQT1AtNzgyIG1hcChUcmF2ZXJzYWwpIHNob3VsZCBkZWNsYXJlIHJlcXVpcmVtZW50cyBvZiBjaGlsZAorKiBUSU5LRVJQT1AtNzg1IEdyZW1saW4gU2VydmVyIE5vdCBQcm9wZXJseSBSZXBvcnRpbmcgUG9ydCBDb25mbGljdAorKiBUSU5LRVJQT1AtNzkyIHNlbGVjdCBhdCBzdGFydCBvZiBtYXRjaCB0cmF2ZXJzYWwgb24gTWFwIGNhbiBmYWlsCisqIFRJTktFUlBPUC03OTQgSW5jaWRlbnRUb0FkamVjZW50U3RyYXRlZ3kgbWFsZnVuY3Rpb24KKyogVElOS0VSUE9QLTgwNCBGYWlsZWQgaW5zdGFsbGluZyBuZW80ai1ncmVtbGluIGV4dGVuc2lvbiBvbiBXaW5kb3dzIDcKKyogVElOS0VSUE9QLTgyMiBOZW80aiBHcmFwaFN0ZXAgd2l0aCBlbGVtZW50IGFyZ3VtZW50cyBpZ25vcmVzIGhhcyAgKihicmVha2luZykqCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTU3NiBHcmVtbGluIFNlcnZlciBBdXRoZW50aWNhdGlvbgorKiBUSU5LRVJQT1AtNTgyIFJlbW92ZSBHcm9vdnkgU2FuZGJveCBEZXBlbmRlbmN5CisqIFRJTktFUlBPUC02MTAgR2VuZXJhbCBncmFwaCBjb25jZXB0IG5hbWVzIGluIHRlc3Qgc2NoZW1hCisqIFRJTktFUlBPUC02NTYgSW9SZWdpc3RyeSBDaGFpbmluZworKiBUSU5LRVJQT1AtNjkwIEJlIGFibGUgdG8gT1BUX09VVCBmb3IgU3RhbmRhcmQsIGJ1dCBub3QgQ29tcHV0ZXIgKihicmVha2luZykqCisqIFRJTktFUlBPUC02OTkgR3JhcGhTT04gd3JpdGVHcmFwaCBub3QgcHJvZHVjaW5nIHZhbGlkIGpzb24gb2JqZWN0CisqIFRJTktFUlBPUC03NTAgQ29tcGFyZSBzaG91bGQgbm90IGhhdmUgc3BlY2lhbCBjYXNlIGZvciBOdW1iZXIKKyogVElOS0VSUE9QLTc1MiBNYWtlIEdyZW1saW4gU2VydmVyIEJldHRlciBSZXNwZWN0IEFDQ0VQVAorKiBUSU5LRVJQT1AtNzY0IFVuaWZ5IHNlbWFudGljcyBvZiBUcmFuc2FjdGlvbi5jbG9zZSgpIGluIHRlc3RzIGFuZCBkb2N1bWVudGF0aW9uICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtNzcxIElvUmVnaXN0cnkgSW5zdGFudGlhdGlvbiBXaXRoIEdyeW9Qb29sCisqIFRJTktFUlBPUC03NzggU3VwcG9ydCBHcmFwaEZhY3RvcnkgbG9jYXRpb24gdmlhIGFubm90YXRpb24uCisqIFRJTktFUlBPUC03OTEgRG9jdW1lbnQgcnVsZXMgZm9yIGNvbW1pdHRlcnMKKyogVElOS0VSUE9QLTc5NyBvcmRlcigpIHNlZW1zIHRvIG9ubHkgbGlrZSBMaXN0PyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTgwOCBUcmF2ZXJzYWxDb21wYXJhdG9yLmNvbXBhcmF0b3IgbmVlZHMgYSBnZXR0ZXIKKworW1tyZWxlYXNlLTMtMC0wXV0KKz09PSBUaW5rZXJQb3AgMy4wLjAgKFJlbGVhc2UgRGF0ZTogSnVseSA5LCAyMDE1KQorCisqIE1vZGlmaWVkIHRoZSBgR3JlbWxpbkV4ZWN1dG9yYCB0byBjYXRjaCBgVGhyb3dhYmxlYCBhcyBvcHBvc2VkIHRvIGBFeGNlcHRpb25gIHNvIGFzIHRvIHByb3Blcmx5IGhhbmRsZSBgRXJyb3JgIGJhc2VkIGV4Y2VwdGlvbnMuCisqIE1vZGlmaWVkIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgY29tcGlsYXRpb24gY29uZmlndXJhdGlvbiB0byBwcmV2ZW50IGluYXBwcm9wcmlhdGUgc2NyaXB0IGV2YWx1YXRpb24gdGltZW91dHMgb24gc3RhbmRhbG9uZSBmdW5jdGlvbnMuCisqIEFkZGVkIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZm9yICJ0aW1lZCBpbnRlcnJ1cHQiIGluIHRoZSBgU2NyaXB0RW5naW5lc2AgaW5zdGFudGlhdGlvbiBvZiB0aGUgYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgLgorKiBBZGRlZCBgbWFwS2V5cygpYCAoYE1hcEtleVN0ZXBgKSBhbmQgYG1hcFZhbHVlcygpYCAoYE1hcFZhbHVlU3RlcGApIHRvIGdldCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGEgbWFwLCByZXNwZWN0aXZlbHkuCisqIGBzZWxlY3QoKWAgbm8gbG9uZ2VyIHN1cHBvcnRzIGVtcHR5IGFyZ3VtZW50cy4gVGhlIHVzZXIgbXVzdCBzcGVjaWZ5IHRoZSBrZXlzIHRoZXkgYXJlIHNlbGVjdGluZy4KKyogYE1hdGNoU3RlcGAgYW5kIGBtYXRjaCgpYCBubyBsb25nZXIgaGF2ZSBhICJzdGFydCBsYWJlbCIgcGFyYW1ldGVyIC0tIGl0IGlzIGNvbXB1dGVkIGlmIHRoZSBpbmNvbWluZyB0cmF2ZXJzZXIgZG9lcyBub3QgaGF2ZSByZXF1aXNpdGUgbGFiZWxzLgorKiBUdXJuZWQgdHJhbnNhY3Rpb25hbCB0ZXN0aW5nIGJhY2sgb24gaW4gR3JlbWxpbiBTZXJ2ZXIgdXNpbmcgTmVvNGouCisqIFJlbmFtZWQgYFRyYW5zYWN0aW9uLmNyZWF0ZSgpYCB0byBgVHJhbnNhY3Rpb24uY3JlYXRlVGhyZWFkZWRUeCgpYC4KKyogQWRkZWQgYFRyYXZlcnNhbFBhcmVudC5yZW1vdmVHbG9iYWxDaGlsZCgpYCBhbmQgYFRyYXZlcnNhbFBhcmVudC5yZW1vdmVMb2NhbENoaWxkKClgLgorKiBBZGRlZCBhIGBjbGVhcmAgb3B0aW9uIHRvIHRoZSBHZXBoaSBQbHVnaW4gdG8gZW1wdHkgdGhlIEdlcGhpIHdvcmtzcGFjZS4KKyogUmVmYWN0b3JlZCBgUmVzdWx0U2V0YCBhbmQgcmVsYXRlZCBjbGFzc2VzIHRvIHN0b3AgcG9sbGluZyBmb3IgcmVzdWx0cy4KKyogYEFic3RyYWN0U3RlcGAgbm93IGd1YXJhbnRlZXMgdGhhdCBidWxrLWxlc3MgYW5kIG51bGwtdmFsdWVkIHRyYXZlcnNlcnMgYXJlIG5ldmVyIHByb3BhZ2F0ZWQuCisqIEFkZGVkIGBkZWR1cChzdHJpbmcuLi4pYCB3aGljaCBhbGxvd3MgZm9yIHRoZSBkZWR1cGxpY2F0aW9uIG9mIGEgc3RyZWFtIGJhc2VkIG9uIHVuaXF1ZSBzY29wZSB2YWx1ZXMuCisqIEZpeGVkIG11bHRpcGxlIGJ1Z3MgaW4gdGhlIEdlcGhpIFBsdWdpbiByZWxhdGVkIHRvIHJlZmFjdG9yaW5nIG9mIHRyYXZlcnNhbCBzaWRlLWVmZmVjdHMuCisqIFNwbGl0IGBXaGVyZVN0ZXBgIGludG8gYFdoZXJlUHJlZGljYXRlU3RlcGAgYW5kIGBXaGVyZVRyYXZlcnNhbFN0ZXBgIHRvIHNpbXBsaWZ5IGludGVybmFscy4KKyogUHJldmVudCB0aGUgZHJpdmVyIGZyb20gYXR0ZW1wdGluZyB0byByZWNvbm5lY3Qgb24gYSBkZWFkIGhvc3QgaWYgdGhlIGBDbHVzdGVyLmNsb3NlKClgIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuCisqIFJlbmFtZWQgdGhlICJkZWFjdGl2YXRlIiBvcHRpb24gb24gYDpwbHVnaW5gIGNvbW1hbmQgdG8gInVudXNlIiB0byBiZSBzeW1tZXRyaWMgd2l0aCB0aGUgInVzZSIgb3B0aW9uLgorKiBBZGRlZCBgVHJhdmVyc2FsLnRvU3RyZWFtKClgIHRvIHR1cm4gdGhlIGBUcmF2ZXJzYWw8UyxFPmAgaW50byBhIGBTdHJlYW08RT5gLgorKiBBZGRlZCBgU2NvcGluZy5WYXJpYWJsZWAgZW51bSBvZiBgU1RBUlRgIGFuZCBgRU5EYCB3aGljaCBhbGxvd3MgdGhlIGBTY29waW5nYCBzdGVwIHRvIHNwZWNpZnkgd2hlcmUgaXRzIGJpbmRpbmdzIGFyZS4KKyogYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIGlzIHNtYXJ0IGFib3V0IG5vdCBhbGxvd2luZyBgV2hlcmVYWFhTdGVwYCB3aXRoIGEgc3RhcnQtdmFyaWFibGUgdG8gcnVuIGluIE9MQVAgYXMgaXQgc2VsZWN0cyB0aGUgdmFsdWUgZnJvbSB0aGUgcGF0aC4KKyogUmV3cm90ZSBgTWF0Y2hTdGVwYCB3aGVyZSBpdCBub3cgd29ya3Mgb24gYEdyYXBoQ29tcHV0ZXJgLCBzb2x2ZXMgbW9yZSBwYXR0ZXJucywgcHJvdmlkZXMgcGx1Z2FibGUgZXhlY3V0aW9uIHBsYW5zLCBzdXBwb3J0cyBuZXN0ZWQgQU5EL09SLCBgbm90KClgLXBhdHRlcm5zLCBldGMuCisqIFJlbmFtZWQgYEdyYXBoc2AgaW4gR3JlbWxpbiBTZXJ2ZXIgdG8gYEdyYXBoTWFuYWdlcmAuCisqIEZpeGVkIGJ1ZyBpbiBHcmVtbGluIERyaXZlciB3aGVyZSBjbGllbnQtc2lkZSBzZXJpYWxpemF0aW9uIGVycm9ycyB3b3VsZCBub3QgYnViYmxlIHVwIHByb3Blcmx5LgorKiBGaXhlZCBwcm9ibGVtIGluIEdyZW1saW4gU2VydmVyIHRvIGVuc3VyZSB0aGF0IGEgZmluYWwgYFNVQ0NFU1NgIG9yIGBOT19DT05URU5UYCBtZXNzYWdlIGFzc3VyZWQgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2FzIHN1Y2Nlc3NmdWwgaW4gc2Vzc2lvbmxlc3MgcmVxdWVzdHMuCisqIEFycm93IGtleXMgZm9yIGN5Y2xpbmcgdGhyb3VnaCBjb21tYW5kIGhpc3Rvcnkgbm93IHdvcmsgaW4gR3JlbWxpbiBDb25zb2xlIHdoZW4gYmVpbmcgdXNlZCBvbiBXaW5kb3dzLgorKiBBZGRlZCBgTm90U3RlcGAgYW5kIGBub3QodHJhdmVyc2FsKWAgZm9yIG5vdCdpbmcgYSB0cmF2ZXJzYWwgKGludGVncmF0ZXMgbGlrZSBgQ29uanVuY3Rpb25TdGVwYCkuCisqIFJlbW92ZWQgYFRyYXZlcnNhbFBgLiBUcmF2ZXJzYWxzIGFuZCBgUGAtcHJlZGljYXRlcyBhcmUgY29tcGxldGVseSBzZXBhcmF0ZSBjb25jZXB0cy4KKyogYGhhcyhrZXksdHJhdmVyc2FsKWAgaXMgbm93IGFuIGFsaWFzIGZvciBgZmlsdGVyKF9fLnZhbHVlcyhrZXkpLnRyYXZlcnNhbClgIHVzaW5nIGBUcmF2ZXJzYWxGaWx0ZXJTdGVwYC4KKyogU2ltcGxpZmllZCBgU3ViZ3JhcGhTdHJhdGVneWAgYnkgdXNpbmcgYFRyYXZlcnNhbEZpbHRlclN0ZXBgIGluc3RlYWQgb2YgdGhlIG1vcmUgY29tcGxleCBgV2hlcmVTdGVwYC4KKyogQWRkZWQgYFRyYXZlcnNhbE1hcFN0ZXBgLCBgVHJhdmVyc2FsRmxhdE1hcFN0ZXBgLCBgVHJhdmVyc2FsRmlsdGVyU3RlcGAsIGFuZCBgVHJhdmVyc2FsU2lkZUVmZmVjdFN0ZXBgIHdoaWNoIGFsbCBsZXZlcmFnZSBhbiBpbnRlcm5hbCB0cmF2ZXJzYWwuCisqIEFkZGVkIGBQYXRoLmdldChwb3AsbGFiZWwpYCBhcyBkZWZhdWx0IGhlbHBlcnMgaW4gYFBhdGhgLgorKiBBZGRlZCBgUG9wLmZpcnN0YCwgYFBvcC5sYXN0YCwgYW5kIGBQb3AuYWxsYCBhcyBlbnVtcyBmb3IgZ2V0dGluZyBzaW5nbGUgaXRlbXMgZnJvbSBhIGNvbGxlY3Rpb24gb3IgYSBsaXN0IG9mIHNhaWQgaXRlbXMuCisqIENoYW5nZWQgYEdyZW1saW5TZXJ2ZXIuc3RhcnQoKWAgdG8gcmV0dXJuIGEgYENvbXBsZXRhYmxlRnV0dXJlYCB0aGF0IGNvbnRhaW5zIHRoZSBjb25zdHJ1Y3RlZCBgU2VydmVyR3JlbWxpbkV4ZWN1dG9yYC4KKyogUmVzdHJ1Y3R1cmVkIGBJb1Rlc3RgIGJyZWFraW5nIGl0IHVwIGludG8gc21hbGxlciBhbmQgbW9yZSBsb2dpY2FsbHkgZ3JvdXBlZCB0ZXN0IGNhc2VzLgorKiBHcmVtbGluIFNlcnZlciBgU2V0dGluZ3NgIG5vdyBoYXMgc2Vuc2libGUgZGVmYXVsdHMgdGh1cyBhbGxvd2luZyB0aGUgc2VydmVyIHRvIGJlIHN0YXJ0ZWQgd2l0aCBubyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uCisqIEZpeGVkIGdhcmJsZWQgY2hhcmFjdGVycyBpbiBHcmVtbGluIENvbnNvbGUgdGhhdCBub3RhYmx5IHNob3dlZCB1cCBpbiBgOmhlbHBgCisqIFJlcGxhY2VkIGRlcGVuZGVuY3kgb24gYGdyb292eS1hbGxgIHdpdGggaW5kaXZpZHVhbCBHcm9vdnkgZGVwZW5kZW5jaWVzIGFzIG5lZWRlZC4KKyogQnVtcGVkIGBvcmcuZ3BlcmZ1dGlsczpnYmVuY2hgIHRvIHRoZSBgMC40LjNgIGFuZCBhIHZlcnNpb24gZXhwbGljaXRseSBjb21wYXRpYmxlIHdpdGggR3Jvb3Z5IDIuNC54LgorKiBSZW5hbWVkIGBLZXlTdGVwYCB0byBgUHJvcGVydHlLZXlTdGVwYCB0byBiZSBjb25zaXN0ZW50IHdpdGggYFByb3BlcnR5VmFsdWVTdGVwYC4KKyogQWRkZWQgYEdyZW1saW4tTGliLVBhdGhzYCB0byBtb2RpZnkgcGF0aHMgaW4gcGx1Z2luIGBsaWJgIGRpcmVjdG9yeS4KKyogTW9kaWZpZWQgdGhlIGNhcGFiaWxpdGllcyBvZiBgR3JlbWxpbi1QbHVnaW4tUGF0aHNgIHRvIGRlbGV0ZSBwYXRocyB0aGF0IGhhdmUgbm8gdmFsdWUgb24gdGhlIHJpZ2h0LWhhbmQtc2lkZSBvZiB0aGUgZXF1YWxzIHNpZ24uCisqIFRoZSBSRVNUIEFQSSBpbiBHcmVtbGluIFNlcnZlciBub3cgcmVxdWlyZXMgcGFyYW1ldGVycyB0byBiZSBkZWZpbmVkIHdpdGggYSAiYmluZGluZ3MuIiBwcmVmaXguCisqIE1vZGlmaWVkIHRoZSBSRVNUIEFQSSBpbiBHcmVtbGluIFNlcnZlciB0byBhY2NlcHQgcmViaW5kaW5ncy4KKyogQWRkZWQgYHJlYmluZGluZ3NgIG9wdGlvbmFsIGFyZ3VtZW50IHRvIHNlc3Npb25sZXNzIHJlcXVlc3RzIHRvIGFsbG93IGdsb2JhbCBiaW5kaW5ncyB0byBiZSByZWJvdW5kIGFzIG5lZWRlZC4KKyogQWRkZWQgYExhenlCYXJyaWVyU3RyYXRlZ3lgIHdoaWNoICJzdGFsbHMiIGEgdHJhdmVyc2FsIG9mIGEgcGFydGljdWxhciBmb3JtIGluIG9yZGVyIHRvIGdhaW4gYSBidWxraW5nIG9wdGltaXphdGlvbi4KKyogYENvbGxlY3RpbmdCYXJyaWVyU3RlcGAgc3VwcG9ydHMgYG1heEJhcnJpZXJTaXplYCBmb3IgImxhenkgYmFycmllciwiIG1lbW9yeSBjb25zZXJ2YXRpb24uCisqIGBTY29waW5nYCBub3cgaGFzIGBnZXRTY29wZUtleXMoKWAgdG8gZ2V0IHRoZSBrZXlzIGRlc2lyZWQgYnkgdGhlIHNjb3Bpbmcgc3RlcC4KKyogUmVmYWN0b3JlZCBTU0wgc3VwcG9ydCBpbiB0aGUgR3JlbWxpbiBTZXJ2ZXIvRHJpdmVyLgorKiBGYWN0b3JlZCBvdXQgYFNlcnZlckdyZW1saW5FeGVjdXRvcmAgd2hpY2ggY29udGFpbnMgdGhlIGNvcmUgZWxlbWVudHMgb2Ygc2VydmVyLXNpZGUgc2NyaXB0IGV4ZWN1dGlvbiBpbiBHcmVtbGluIFNlcnZlci4KKyogQnVtcGVkIHRvIG5ldHR5IDQuMC4yOC5GaW5hbC4KKyogUmVmYWN0b3JlZCB0aGUgYE11dGF0aW5nYCBpbnRlcmZhY2UgYW5kIGludHJvZHVjZSBgQ2FsbGJhY2tSZWdpc3RyeWAgaW50ZXJmYWNlIGFyb3VuZCBgRXZlbnRTdHJhdGVneWAuCisqIENoYW5nZWQgYG9uUmVhZFdyaXRlYCBhbmQgYG9uQ2xvc2VgIG9mIGBBYnN0cmFjdFRyYW5zYWN0aW9uYCB0byBiZSBzeW5jaHJvbml6ZWQuCisqIEFkZGVkIGBMYWJlbFBgIHRvIHN1cHBvcnQgaW5kZXggbG9va3VwcyBhbmQgYGhhcygpYCBmaWx0ZXJpbmcgb24gYE5lbzRqR3JhcGhgIG11bHRpLWxhYmVsIHZlcnRpY2VzLgorKiBgQWRkRWRnZVN0ZXBgIGlzIG5vdyBhIGBTY29waW5nYCBzdGVwLgorKiBBZGRlZCBhIGZ1bGx5IGRlZmluZWQgc2V0IG9mIGBHcmFwaC5GZWF0dXJlYCBpbXBsZW1lbnRhdGlvbnMgdG8gYEVtcHR5R3JhcGhgLgorKiBEcm9wcGVkIGRlcGVuZGVuY3kgb24gYG9yZy5qc29uOmpzb25gIC0gdXNlZCBleGlzdGluZyBKYWNrc29uIGRlcGVuZGVuY3kuCisqIEFkZGVkIGJhY2sgbmVvNGotZ3JlbWxpbiBhcyB0aGUgbGljZW5zaW5nIG9mIHRoZSBOZW80aiBBUEkgaXMgbm93IEFwYWNoZTIuCisqIEFkZGVkIGB3aWxsQWxsb3dJZGAgbWV0aG9kIHRvIGZlYXR1cmVzIHJlbGF0ZWQgdG8gdmVydGljZXMsIGVkZ2VzIGFuZCB2ZXJ0ZXggcHJvcGVydGllcyB0byB0ZXN0IGlmIGFuIGlkZW50aWZpZXIgY2FuIGJlIHVzZSB3aGVuIGBzdXBwb3J0c1VzZXJTdXBwbGllZElkc2AgaXMgYHRydWVgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgR3JhcGhUcmF2ZXJzYWwuY2hvb3NlKHByZWRpY2F0ZSx0cnVlVHJhdmVyc2FsLGZhbHNlVHJhdmVyc2FsKWAuCisqIFJlbW92ZWQgYE1hcFRyYXZlcnNhbGAsIGBNYXBUcmF2ZXJzZXJUcmF2ZXJzYWxgLCBgRmlsdGVyVHJhdmVyc2FsYCwgYW5kIGBGaWx0ZXJUcmF2ZXJzZXJUcmF2ZXJzYWxgIGFzIHRoZXNlIGFyZSBzaW1wbHkgYF9fLm1hcChmdW5jdGlvbilgIGFuZCBgX18uZmlsdGVyKHByZWRpY2F0ZSlgLgorKiBJbmNsdWRlIGBoYWRvb3AtZ3JlbWxpbmAgSGFkb29wIGNvbmZpZ3VyYXRpb24gc2FtcGxlIGZpbGVzIGluIEdyZW1saW4gQ29uc29sZSBkaXN0cmlidXRpb24uCisqIEl0ZXJhdGlvbiBvZiByZXN1bHRzIGluIEdyZW1saW4gU2VydmVyIG9jY3VyIGluIHRoZSBzYW1lIHRocmVhZCBhcyBldmFsdWF0aW9uIGFuZCBwcmlvciB0byB0cmFuc2FjdGlvbiBjbG9zZS4KKyogVGlua2VyR3JhcGhDb21wdXRlciBub3cgc3VwcG9ydHMgZXZlcnkgYFJlc3VsdEdyYXBoYC9gUGVyc2lzdGAgY29tYmluYXRpb24uCisqIGBHcmFwaENvbXB1dGVyVGVzdGAgZXh0ZW5kZWQgd2l0aCB2YWxpZGF0aW9uIG9mIHRoZSBzZW1hbnRpY3Mgb2YgYWxsIGBSZXN1bHRHcmFwaGAvYFBlcnNpc3RgIGNvbWJpbmF0aW9ucy4KKyogR2lyYXBoR3JhcGhDb21wdXRlciBubyBsb25nZXIgcmVxdWlyZXMgYW4gZXh0cmEgaXRlcmF0aW9uIGFuZCBNYXBSZWR1Y2Ugam9iIHRvIGRlcml2ZSB0aGUgZnVsbCBgTWVtb3J5YCByZXN1bHQuCisqIFNwYXJrR3JhcGhDb21wdXRlciBub3cgc3VwcG9ydHMgYElucHV0UkREYCBhbmQgYE91dHB1dFJERGAgdG8gYWxsb3cgdmVuZG9ycy91c2VycyB0byB1c2UgYSBgU3BhcmtDb250ZXh0YCB0byByZWFkL3dyaXRlIHRoZSBncmFwaCBhZGphY2VuY3kgbGlzdC4KKyogQWRkZWQgYFNjb3BpbmcuZ2V0U2NvcGVWYWx1ZSgpYCBtZXRob2Qgc28gYWxsICJzZWxlY3RpbmciIHN0ZXBzIHVzZSB0aGUgc2FtZSBwYXR0ZXJuIGZvciBtYXAsIHBhdGgsIGFuZCBzaWRlRWZmZWN0IGRhdGEgcmV0cmlldmFsLgorCitbW3JlbGVhc2UtMy0wLTAtbTldXQorPT09IFRpbmtlclBvcCAzLjAuMC5NOSAoUmVsZWFzZSBEYXRlOiBNYXkgMjYsIDIwMTUpCisKKyogUmVtb3ZlZCBgR3JhcGhDb21wdXRlci5pc29sYXRpb24oKWAgYXMgYWxsIGltcGxlbWVudGF0aW9ucyB1c2Ugc3RhbmRhcmQgQlNQLgorKiBBZGRlZCBhIEdyZW1saW4gU2VydmVyIGBMaWZlQ3ljbGVIb29rYCB0byBlbnN1cmUgdGhhdCBjZXJ0YWluIHNjcmlwdHMgZXhlY3V0ZSBvbmNlIGF0IHN0YXJ0dXAgYW5kIG9uY2UgYXQgc2h1dGRvd24uCisqIGBoYXMoa2V5KWAgYW5kIGBoYXNOb3Qoa2V5KWAgYXJlIG5vdyBhbGlhc2VzIGZvciBgd2hlcmUodmFsdWVzKGtleSkpYCBhbmQgYHdoZXJlKG5vdCh2YWx1ZXMoa2V5KSkpYCwgcmVzcGVjdGl2ZWx5LgorKiBUaW5rZXJHcmFwaCBjbGFzc2VzIGFyZSBub3cgZmluYWwgdG8gcmVzdHJpY3QgdXNlciBhbmQgdmVuZG9yIGV4dGVuc2lvbi4KKyogQWRkZWQgYFRyYXZlcnNhbFN0cmF0ZWd5LlZlbmRvck9wdGltaXphdGlvbmAgdG8gZW5zdXJlIHRoYXQgYWxsIFRpbmtlclBvcCBvcHRpbWl6YXRpb25zIGV4ZWN1dGUgZmlyc3Qgb24gdGhlIGtub3duIFRpbmtlclBvcCBzdGVwcy4KKyogQWRkZWQgYFRhaWxHbG9iYWxTdGVwYCBhbmQgYFRhaWxMb2NhbFN0ZXBgIChgdGFpbCgpYCkgd2hpY2ggZ2V0cyBvYmplY3RzIGZyb20gdGhlIGVuZCBvZiB0aGUgdHJhdmVyc2FsIHN0cmVhbS4KKyogYEFuZFN0ZXBgIGFuZCBgT3JTdGVwYCBhcmUgbm93IHNpbXBseSBtYXJrZXJzIHdoZXJlIGBXaGVyZVN0ZXAoYS5hbmQoYikuYW5kKGMpLi4uYW5kKHopKWAgaXMgdGhlIGNvbXBpbGF0aW9uLgorKiBNb3ZlZCBgQ29tcGFyZWAsIGBDb250YWluc2AsIGBPcmRlcmAsIGBPcGVyYXRvcmAsIGFuZCBgUGAgdG8gYHByb2Nlc3MvdHJhdmVyc2FsYCBmcm9tIGBzdHJ1Y3R1cmUvYCBhcyB0aGV5IGFyZSBwcm9jZXNzLWJhc2VkIG9iamVjdHMuCisqIGBIYXNDb250YWluZXJgIG5vdyB1c2VzIGBQYCBwcmVkaWNhdGUgYXMgaGVscGVyIG1ldGhvZHMgYW5kIHRlc3RzIGFyZSBtb3JlIHRob3JvdWdoIG9uIGBQYC4KKyogQ2hhbmdlZCBHcmVtbGluIFNlcnZlciBpbnRlZ3JhdGlvbi9wZXJmb3JtYW5jZSB0ZXN0cyB0byBiZSBydW5uYWJsZSBmcm9tIHdpdGhpbiB0aGUgYGdyZW1saW4tc2VydmVyYCBkaXJlY3Rvcnkgb3IgZnJvbSB0aGUgcHJvamVjdCByb290LgorKiBNb3ZlZCB0aGUgc3RyaW5nIG1ldGhvZHMgb2YgYFRyYXZlcnNhbEhlbHBlcmAgdG8gYFN0cmluZ0ZhY3RvcnlgLgorKiBSZW5hbWVkIEpTT04tcmVsYXRlZCBzZXJpYWxpemVycyBmb3IgR3JlbWxpbiBTZXJ2ZXIgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggR3JhcGhTT04gbmFtaW5nLgorKiBSZW1vdmVkIGBIYXNUcmF2ZXJzYWxTdGVwYCBpbiBmYXZvciBvZiBuZXcgYFAudHJhdmVyc2FsYCBtb2RlbCB3aXRoIGBIYXNTdGVwYC4KKyogRml4ZWQgYnVnIGluIGBXc0dyZW1saW5UZXh0UmVxdWVzdERlY29kZXJgIHdoZXJlIGN1c3RvbSBzZXJpYWxpemVycyBmcm9tIGdyYXBocyB3ZXJlIG5vdCBiZWluZyB1c2VkLgorKiBBZGRlZCBgQW5kUGAgd2hpY2ggYWxsb3dzIGZvciB0aGUgYGFuZCgpYC1pbmcgb2YgYFBgIHByZWRpY2F0ZXMuCisqIGBPcmRlci5vcHBvc2l0ZSgpYCBpcyBub3cgYHJldmVyc2VkKClgIGFzIHRoYXQgaXMgYSBgQ29tcGFyYXRvcmAgaW50ZXJmYWNlIG1ldGhvZCB3aXRoIHRoZSBzYW1lIHNlbWFudGljcy4KKyogYENvbXBhcmUvQ29udGFpbnMvUC5vcHBvc2l0ZSgpYCBhcmUgbm93IGBuZWdhdGUoKWAgYXMgdGhhdCBpcyBhIGBCaVByZWRpY2F0ZWAgaW50ZXJmYWNlIG1ldGhvZCB3aXRoIHRoZSBzYW1lIHNlbWFudGljcy4KKyogYGhhcyh0cmF2ZXJzYWwpYCBpcyByZXBsYWNlZCBieSBgd2hlcmUodHJhdmVyc2FsKWAgYW5kIGBoYXMoa2V5LHRyYXZlcnNhbClgLiBgSGFzWFhYYCBpcyBhbHdheXMgd2l0aCByZXNwZWN0cyB0byBhbiBlbGVtZW50IHByb3BlcnR5LgorKiBBZGRlZCBgVHJhdmVyc2FsU2NyaXB0SGVscGVyYCB3aXRoIHN0YXRpYyBtZXRob2RzIGZvciBkeW5hbWljYWxseSBjcmVhdGluZyBhIGBUcmF2ZXJzYWxgIGZyb20gYSBKU1IgMjIzIGBTY3JpcHRFbmdpbmVgLgorKiBDaGFuZ2VkIGBTdWJncmFwaFN0cmF0ZWd5YCB0byB0YWtlIGBUcmF2ZXJzYWxgIHJhdGhlciB0aGFuIGBQcmVkaWNhdGVgIGZvciBmaWx0ZXJpbmcuCisqIEltcHJvdmVkIGBTdWJncmFwaFN0cmF0ZWd5YCB0byBvbmx5IG1vZGlmeSB0aGUgYFRyYXZlcnNhbGAgaWYgZmlsdGVyaW5nIHdhcyByZXF1aXJlZC4KKyogSW1wcm92ZWQgbG9nZ2luZyBvZiBlcnJvcnMgaW4gdGhlIGBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcmAgdG8gaW5jbHVkZSBhIHN0cmFja3RyYWNlIGlmIG9uZSB3YXMgcHJlc2VudC4KKyogTW92ZWQgYEFic3RyYWN0R3JlbWxpblN1aXRlLkdyYXBoUHJvdmlkZXJDbGFzc2AgdG8gYG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzYC4KKyogU2ltcGxpZmllZCB0aGUgR3JlbWxpbi1Hcm9vdnkgdGVzdCBzdWl0ZSB3aGVyZSB0aGVyZSBpcyBub3cgbm8gZGlzdGluY3Rpb24gYmV0d2VlbiBgU1RBTkRBUkRgIGFuZCBgQ09NUFVURVJgIHRlc3RzLgorKiBgVmVydGV4UHJvZ3JhbWAgYW5kIGBNYXBSZWR1Y2VgIG5vdyBhZGQgYSBgR3JhcGhgIHBhcmFtZXRlciB0byBgbG9hZFN0YXRlKEdyYXBoLCBDb25maWd1cmF0aW9uKWAuCisqIEFkZGVkIGBTY29waW5nU3RyYXRlZ3lgIHdoaWNoIGF1dG8tc2NvcGVzIGBzZWxlY3QoKWAgYW5kIGB3aGVyZSgpYCBzbyB0aGUgbGFuZ3VhZ2UgbG9va3MgY2xlYW4uCisqIEFkZGVkIGBTY29waW5nYCBhcyBhIG1hcmtlciBpbnRlcmZhY2UgdG8gc3RhdGUgdGhhdCBhIHN0ZXAgZGVzaXJlcyBhIHBhcnRpY3VsYXIgYFNjb3BlYC4KKyogYFNlbGVjdFN0ZXBgLCBgU2VsZWN0T25lU3RlcGAsIGFuZCBgV2hlcmVTdGVwYCBzdXBwb3J0IGJvdGggYFNjb3BlLmxvY2FsYCBhbmQgYFNjb3BlLmdsb2JhbGAgZm9yIGBNYXA8U3RyaW5nLE9iamVjdD5gIG9yIGBQYXRoYCBhbmFseXNpcywgcmVzcGVjdGl2ZWx5LgorKiBGaXhlZCBhIGJ1ZyBpbiB0aGUgYFRyYXZlcnNhbFN0cmF0ZWdpZXNgIHNvcnQgYWxnb3JpdGhtLgorKiBSZW1vdmVkIG51bWVyb3VzIHVudXNlZCBzdGF0aWMgdXRpbGl0eSBtZXRob2RzIGluIGBUcmF2ZXJzYWxIZWxwZXJgLgorKiBUaW5rZXJHcmFwaCBwcm9jZXNzIHN1aXRlIHRlc3RzIGFyZSBub3cgcnVubmluZyB3aXRoIGFuZCB3aXRob3V0IHN0cmF0ZWdpZXMgaW4gcGxhY2UuCisqIEFkZGVkIGBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneWAgd2hpY2ggcmV3cml0ZXMgYG91dEUoKS5pblYoKWAsIGBpbkUoKS5vdXRWKClgIGFuZCBgYm90aEUoKS5vdGhlclYoKWAgdG8gYG91dCgpYCwgYGluKClgIGFuZCBgYm90aCgpYCByZXNwZWN0aXZlbHkuCisqIFJlbmFtZWQgYENvbXBhcmF0b3JIb2xkZXJSZW1vdmFsU3RyYXRlZ3lgIHRvIGBPcmRlckdsb2JhbFJlbW92YWxTdHJhdGVneWAgYXMgaXQgbm93IG9ubHkgYXBwbGllcyB0byBgT3JkZXJHbG9iYWxTdGVwYC4KKyogQW5vbnltb3VzIHRyYXZlcnNhbCBubyBsb25nZXIgaGF2ZSBgRW1wdHlHcmFwaGAgYXMgdGhlaXIgZ3JhcGgsIGJ1dCBpbnN0ZWFkIHVzZSBgT3B0aW9uYWw8R3JhcGg+LmlzUHJlc2VudCgpID09IGZhbHNlYC4KKyogQWRkZWQgYFRyYXZlcnNhbC5BZG1pbi5zZXRHcmFwaChHcmFwaClgIGFzIHN0cmF0ZWdpZXMgdGhhdCBuZWVkIHJlZmVyZW5jZSB0byB0aGUgZ3JhcGgsIG5lZWQgaXQgYWNyb3NzIGFsbCBuZXN0ZWQgdHJhdmVyc2Fscy4KKyogYEFic3RyYWN0TGFtYmRhVHJhdmVyc2FsYCBpcyBub3cgc21hcnQgYWJvdXQgYFRyYXZlcnNhbFBhcmVudGAgYW5kIGBUcmF2ZXJzYWxTdHJhdGVnaWVzYC4KKyogRml4ZWQgYnVnIGluIGBHcmFwaE1MYCByZWFkZXIgdGhhdCB3YXMgbm90IGFsbG93aW5nIGA8ZWRnZT5gIGVsZW1lbnRzIHRvIGNvbWUgYmVmb3JlIGA8bm9kZT5gIGVsZW1lbnRzIGFzIGFsbG93YWJsZSBieSB0aGUgR3JhcGhNTCBzcGVjaWZpY2F0aW9uLgorKiBBZGRlZCBgVmVydGV4RmVhdHVyZS5nZXRDYXJkaW5hbGl0eWAuCisqIEFkZGVkIGBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneWAgd2hpY2ggcmV3cml0ZXMgYG91dCgpLmNvdW50KClgIHRvIGBvdXRFKCkuY291bnQoKWAgKGFuZCBzaW1pbGFyIHN1Y2ggcGF0dGVybnMpLgorKiBgR3J5b1Bvb2xgIG5vdyB0YWtlcyBhIGBDb25maWd1cmF0aW9uYCBvYmplY3Qgd2hpY2ggYWxsb3dzIHNldHRpbmcgdGhlIHNpemUgb2YgdGhlIHBvb2wgYW5kIHRoZSBgSW9SZWdpc3RyeWAgaW5zdGFuY2UuCisqIEFkZGVkIGBQZXJzaXN0UmVzdWx0R3JhcGhBd2FyZWAgaW50ZXJmYWNlIHdoaWNoIGlzIHVzZWQgYnkgYE91dHB1dEZvcm1hdHNgIHRvIHNwZWNpZnkgcGVyc2lzdGVuY2UgcG9zc2liaWxpdGllcyBmb3IgYSBIYWRvb3AgYEdyYXBoQ29tcHV0ZXJgLgorKiBgRWxlbWVudElkU3RyYXRlZ3lgIG5vdyBhbGxvd3MgdGhlIGlkZW50aWZpZXIgcHJvcGVydHkgdG8gYmUgc2V0IGRpcmVjdGx5IChhbmQgbm90IG9ubHkgYnkgc3BlY2lmeWluZyBgVC5pZGApLgorKiBBZGRlZCBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgcmVnaXN0ZXJpbmcgYSBgVHJhdmVyc2FsU3RyYXRlZ3lgIGluIEdyZW1saW4gU2VydmVyLgorKiBBZGRlZCByZXNwb25zZSBzdGF0dXMgY29kZSBmb3IgYE5PX0NPTlRFTlRgIHRvIHJlcHJlc2VudCBvdXRwdXQgZm9yIGEgc3VjY2Vzc2Z1bCBzY3JpcHQgZXhlY3V0aW9uIHdpdGhvdXQgYSByZXN1bHQgKGUuZy4gYW4gZW1wdHkgYEl0ZXJhdG9yYCkuCisqIFJlbW92ZWQgdGhlIG5vdGlvbiBvZiBhICJ0ZXJtaW5hdG9yIiBtZXNzYWdlIGZyb20gdGhlIEdyZW1saW4gU2VydmVyIHByb3RvY29sIC0gbmV3IHJlc3BvbnNlIHN0YXR1cyBjb2RlIGZvciBgUEFSVElBTF9DT05URU5UYC4KKyogYFBhdGhgIGFuZCBgU3RlcGAgbGFiZWxzIGFyZSBvcmRlcmVkIGJ5IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgcmVzcGVjdGl2ZSBgYWRkTGFiZWwoKWAgY2FsbHMgd2VyZSBtYWRlLgorKiBBIGBTdGVwYCBub3cgaGFzIGEgYFNldDxTdHJpbmc+YCBvZiBsYWJlbHMuIFVwZGF0ZWQgYGFzKClgIHRvIHRha2UgYSB2YXIgYXJncyBvZiBsYWJlbHMuCisqIERyb3BwZWQgYEJhdGNoR3JhcGhgIGZyb20gdGhlIGNvZGUgYmFzZSAtIGl0IHdpbGwgYmUgcmVwbGFjZWQgYnkgYnVsayBsb2FkZXIgZnVuY3Rpb25hbGl0eSBvdmVyIE9MQVAuCisqIGBUcmF2ZXJzYWxTaWRlRWZmZWN0c2Agbm93IGltcGxlbWVudHMgYE9wdGlvbmFsYCBzZW1hbnRpY3MuIExlc3MgY29kZSBhcyBKYXZhOCBwcm92aWRlcyB0aGUgaGVscGVyIG1ldGhvZHMuCisqIGBUcmF2ZXJzYWxTY3JpcHRTdXBwbGllcmAgbm93IHRha2VzIGFuIGBPYmplY3RgIHZhciBhcmdzIGZvciBzZXR0aW5nIGBTY3JpcHRFbmdpbmVgIGJpbmRpbmdzIGlmIG5lZWRlZC4KKyogYENvbXBhcmVgIGlzIG5vdyBtb3JlIGxlbmllbnQgb24gYE51bWJlcmAtdHlwZXMuCisqIFJlbW92ZWQgYENvbXBhcmUuaW5zaWRlYCBhbmQgYENvbXBhcmUub3V0c2lkZWAgYXMgdGhleSBhcmUgbm90IHByaW1pdGl2ZSBjb21wYXJhdG9ycyBhbmQgc2hvdWxkIGJlIGNvbXBvc2VkIGZyb20gcHJpbWl0aXZlcy4KKyogSW50cm9kdWNlZCBgUGAgKHByZWRpY2F0ZSkgZm9yIGNsZWFuZXIgbG9va2luZyBgaXMoKWAsIGBoYXMoKWAsIGFuZCBgd2hlcmUoKWAgY2FsbHMgLS0gZS5nLiBgaGFzKCdhZ2UnLGVxKDMyKSlgLgorKiBgR3JhcGhUcmF2ZXJzYWxTb3VyY2VgIGlzIG5vdyB0aGUgbG9jYXRpb24gZm9yIGB3aXRoWFhYKClgIG9wZXJhdGlvbnMuIE5vIGxvbmdlciBkbyB0aGV5IGV4aXN0IGF0IGBHcmFwaFRyYXZlcnNhbGAuCisqIEFsbCBgVHJhdmVyc2VyYCBvYmplY3RzIG5vdyBleHRlbmQgZnJvbSBgQWJzdHJhY3RUcmF2ZXJzZXJgIG9yIGEgY2hpbGQgdGhhdCB1bHRpbWF0ZWx5IGV4dGVuZHMgZnJvbSBgQWJzdHJhY3RUcmF2ZXJzZXJgLgorKiBPTFRQIGBzZWxlY3QoKWAgbm93IHJldHVybnMgYSBsaXN0IGZvciB0cmF2ZXJzYWxzIHdpdGggZHVwbGljYXRlIGxhYmVscyAoYXMgdGhpcyB3YXMgYSB1bmludGVuZGVkIHNpZGUtZWZmZWN0IG9mIGBTcGFyc2VQYXRoYCkuCisqIFJlbW92ZWQgdGhlIGBTcGFyc2VQYXRoYCBvcHRpbWl6YXRpb24gYXMgaXQgbGVkIHRvIG51bWVyb3VzIGNvcm5lci1jYXNlIGluY29uc2lzdGVuY2llcy4KKyogYFZlcnRleFdyaXRhYmxlYCBzZXJpYWxpemVzIGFuZCBkZXNlcmlhbGl6ZXMgdGhlIGBTdGFyR3JhcGhgIG9iamVjdCAtLSBubyBtb3JlIGludGVybWVkaWF0ZSBgRGV0YWNoZWRYWFhgIG9iamVjdHMuCisqIEdyZW1saW4gU2VydmVyIGJldHRlciBzdXBwb3J0cyB0aGUgc2V0dGluZ3MgZm9yIHRoZSBoaWdoIGFuZCBsb3cgd2F0ZXJtYXJrIHRoYXQgd2lsbCBzbG93IHdyaXRlcyB0byBjbGllbnRzIHRoYXQgYXJlIGxhZ2dpbmcuCisqIEFkZGVkIGBHcmFwaFJlYWRlci5yZWFkT2JqZWN0KClgIGFuZCBgR3JhcGhXcml0ZXIud3JpdGVPYmplY3RgIGFic3RyYWN0aW9ucyBmb3IgdGhvc2UgaW1wbGVtZW50YXRpb25zIHRoYXQgY2FuIHN1cHBvcnQgdGhlbS4KKyogQWx0ZXJlZCBgR3JhcGhXcml0ZXIud3JpdGVWZXJ0aWNlcygpYCBtZXRob2QgdG8gdGFrZSBhbiBgSXRlcmF0b3JgIG9mIHZlcnRpY2VzIHJhdGhlciB0aGFuIGEgYFRyYXZlcnNhbGAuCisqIEdyYXBoU09OIGZvcm1hdCBmb3Igb3V0cHV0IGZyb20gYEdyYXBoV3JpdGVyLndyaXRlVmVydGV4YCwgYEdyYXBoV3JpdGVyLndyaXRlVmVydGljZXNgLCBhbmQgYEdyYXBoV3JpdGVyLndyaXRlR3JhcGhgIGhhdmUgYWxsIGNoYW5nZWQgbm93IHRoYXQgdGhleSB1c2UgYFN0YXJHcmFwaGAgc2VyaWFsaXphdGlvbi4KKyogR3J5byBmb3JtYXQgZm9yIG91dHB1dCBmcm9tIGBHcmFwaFdyaXRlci53cml0ZVZlcnRleGAsIGBHcmFwaFdyaXRlci53cml0ZVZlcnRpY2VzYCwgYW5kIGBHcmFwaFdyaXRlci53cml0ZUdyYXBoYCBoYXZlIGFsbCBjaGFuZ2VkIG5vdyB0aGF0IHRoZXkgdXNlIGBTdGFyR3JhcGhgIHNlcmlhbGl6YXRpb24uCisqIEFkZGVkIHJlYWQgYW5kIHdyaXRlIG1ldGhvZHMgdG8gYEdyYXBoUmVhZGVyYCBhbmQgYEdyYXBoV3JpdGVyYCBmb3IgYFByb3BlcnR5YCBhbmQgYFZlcnRleFByb3BlcnR5YC4KKyogUmVkdWNlZCBvYmplY3QgY3JlYXRpb24gaW4gR3JhcGhTT04gZHVyaW5nIHNlcmlhbGl6YXRpb24uCisqIE1vdmVkIGBUYCB0b2tlbnMgdG8gdGhlIGBzdHJ1Y3R1cmUvYCBwYWNrYWdlIGFzIGl0cyBtb3JlIGdlbmVyYWwgdGhhbiBgcHJvY2Vzcy9gLgorKiBgQXR0YWNoYWJsZS5hdHRhY2goKWAgbm93IHRha2VzIGEgYE1ldGhvZGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYXR0YWNoIHZpYSBgR0VUYCwgYENSRUFURWAsIG9yIGBHRVRfT1JfQ1JFQVRFYC4KKyogRGVjcmVhc2VkIHNpemUgb2YgR3JlbWxpbiBTZXJ2ZXIgYFJlcXVlc3RNZXNzYWdlYCBhbmQgYFJlc3BvbnNlTWVzc2FnZWAgc2VyaWFsaXphdGlvbiBwYXlsb2FkcyBhbmQgcmVkdWNlZCBvYmplY3QgY3JlYXRpb24uCisqIGBHcmFwaC5lbXB0eSgpYCBubyBsb25nZXIgcmVxdWlyZWQgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBTaGVsbEdyYXBoYCB3aGljaCBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIGdyYXBoIGNsYXNzIGFuZCBjb21wdXRlci4KKyogYFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5YCBkZWZhdWx0IGlzIG5vdyB2ZW5kb3IgY2hvc2VuLiBJZiB0aGUgdmVuZG9yIGhhcyBub3QgcHJlZmVyZW5jZSwgdGhleSBzaG91bGQgdXNlIGBDYXJkaW5hbGl0eS5zaW5nbGVgLgorKiBgTWVzc2VuZ2VyLnJlY2VpdmVNZXNzYWdlcygpYCBubyBsb25nZXIgdGFrZXMgYSBgTWVzc2FnZVNjb3BlYCBhbmQgdGh1cywgY29uc2lzdGVudCBiZWhhdmlvciBiZXR3ZWVuIG1lc3NhZ2UtcGFzc2luZyBhbmQgbWVzc2FnZS1wdWxsaW5nIHN5c3RlbXMuCisqIENoYW5nZWQgdGhlIGBncmVtbGluLnRlc3RzYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGVzdCBmaWx0ZXJpbmcgdG8gdGhlIG1vcmUgc3RhbmRhcmQgY29udmVudGlvbiBvZiBgR1JFTUxJTl9URVNUU2AgYW5kIG1hZGUgaXQgd29yayBmb3IgYWxsIHRlc3Qgc3VpdGVzLgorKiBSZW1vdmVkIGBiYWNrKClgLXN0ZXAgYXMgYHNlbGVjdCgpYC1zdGVwIHByb3ZpZGVzIHRoZSBzYW1lIGJlaGF2aW9yIHdpdGggbW9yZSBpbnRlbGxpZ2VudCBvcHRpbWl6YXRpb25zIGFuZCBgYnkoKWAtbW9kdWxhdGlvbi4KKyogUmVtb3ZlZCBgR3JhcGguSGVscGVyYCBtZXRob2QgYW5ub3RhdGlvbiBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZSBpbiB0ZXN0cy4KKyogTW9kaWZpZWQgaGVhZGVyIG9mIEdyeW8gdG8gYmUgMTYgYnl0ZXMgaW5zdGVhZCBvZiAzMiAoYW5kIHJlbW92ZWQgdGhlIHZlcnNpb24gc3RhbXApLgorKiBSZW1vdmVkIHRoZSBjb25jZXB0IG9mIGhhbmRsaW5nIHZlcnNpb24gaW4gR3J5byB2aWEgdGhlIGJ1aWxkZXIgYXMgaXQgd2Fzbid0IHJlYWxseSBhY2NvbXBsaXNoaW5nIHRoZSBjYXBhYmlsaXR5IG9mIGVuc3VyaW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisqIE1vdmVkIGBFeGNlcHRpb25zLnByb3BlcnR5UmVtb3ZhbE5vdFN1cHBvcnRlZGAgZnJvbSBgRWxlbWVudGAgdG8gYFByb3BlcnR5YCBmb3IgY29uc2lzdGVuY3kuCisqIFByb3ZpZGVkIGEgbWV0aG9kIGZvciBHcmVtbGluIFNlcnZlciB0byBiaW5kIGBUcmF2ZXJzYWxTb3VyY2VgIG9iamVjdHMgZm9yIHVzZSBpbiBzY3JpcHRzLgorKiBNb2RpZmllZCB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGZvciBkZWFsaW5nIHdpdGggImN1c3RvbSIgaWRlbnRpZmllciBzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OIC0gU2VlIGBJb1Rlc3QuQ3VzdG9tSWRgIGZvciB0aGUgZXhhbXBsZS4KKyogTW9kaWZpZWQgYGcudmVydGljZXMvZWRnZXNgIGFuZCByZWxhdGVkIG1ldGhvZHMgYW5kIHRlc3RzIHRvIHN1cHBvcnQgbm9uLXR5cGUgc3BlY2lmaWMgcXVlcnlpbmcgKGUuZy4gYGcuVigxKWAgYW5kIGBnLlYoMUwpYCBzaG91bGQgYm90aCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0IG5vdykuCisqIGBUaW5rZXJHcmFwaGAgc3VwcG9ydHMgYW4gYElkTWFuYWdlcmAgd2hpY2ggaGVscHMgZW5mb3JjZSBpZGVudGlmaWVyIHR5cGVzIGFuZCBpbXByb3ZlIGZsZXhpYmlsaXR5IGluIHRlcm1zIG9mIGhvdyBpdCB3aWxsIHJlc3BvbmQgdG8gcXVlcmllcyBhcm91bmQgaWRlbnRpZmllcnMuCisqIGBEZXRhY2hlZFhYWGAgbm93IHVzZXMgdGhlIHN0YW5kYXJkIGBzdHJ1Y3R1cmUvYCBleGNlcHRpb25zIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLgorKiBBZGRlZCBwcml2YXRlIGNvbnN0cnVjdG9ycyB0byBhbGwgYEV4Y2VwdGlvbnNgIGlubmVyIGNsYXNzZXMgaW4gdGhlIHJlc3BlY3RpdmUgYHN0cnVjdHVyZS9gIGludGVyZmFjZXMuCisqIFJlLWludHJvZHVjZWQgYFJlZmVyZW5jZVhYWGAgdG8gZW5zdXJlIGEgc21hbGxlciBkYXRhIGZvb3RwcmludCBpbiBPTEFQIHNpdHVhdGlvbiAoYERldGFjaGVkWFhYYCB1c2VzIHRvbyBtdWNoIGRhdGEpLgorKiBgQXR0YWNoYWJsZWAgbm93IGhhcyBhIHNldCBvZiBzdGF0aWMgZXhjZXB0aW9uIG1lc3NhZ2VzIGluIGFuIGBFeGNlcHRpb25zYCBpbm5lciBjbGFzcy4KKyogQWRkZWQgYFN0YXJHcmFwaGAgd2hpY2ggaXMgYSBoZWFwIGVmZmljaWVudCByZXByZXNlbnRhdGlvbiBvZiBhIHZlcnRleCBhbmQgaXRzIGluY2lkZW50IGVkZ2VzICh1c2VmdWwgZm9yIGBHcmFwaENvbXB1dGVyYCBpbXBsZW1lbnRhdGlvbnMpLgorKiBgVHJhdmVyc2VyU2V0YCB1c2VzIGEgYEZhc3ROb1N1Y2hFbGVtZW50RXhjZXB0aW9uYCBvbiBgcmVtb3ZlKClgIGZvciBpbmNyZWFzZWQgcGVyZm9ybWFuY2UuCisqIEFkZCBgUHJvZmlsaW5nYCBpbnRlcmZhY2UgdG8gZW5hYmxlIHZlbmRvcnMgdG8gcmVjZWl2ZSBhIGBTdGVwJ3MgTXV0YWJsZU1ldHJpY3NgLgorCitbW3JlbGVhc2UtMy0wLTAtbThdXQorPT09IFRpbmtlclBvcCAzLjAuMC5NOCAoUmVsZWFzZSBEYXRlOiBBcHJpbCA2LCAyMDE1KQorCisqIFJlbW92ZWQgTmVvNGotR3JlbWxpbiBmcm9tIHRoaXMgZGlzdHJpYnV0aW9uIGR1ZSB0byBHUEwgbGljZW5zaW5nLiBXb3JraW5nIHdpdGggTmVvNGogdGVhbSB0byByZWludHJvZHVjZSBieSBNOS4KKyogQWx0ZXJlZCBzdHJ1Y3R1cmUgb2YgcGx1Z2luIGRpcmVjdG9yaWVzIGZvciBHcmVtbGluIFNlcnZlciBhbmQgR3JlbWxpbiBDb25zb2xlIHRvIGFsbG93IGZvciB0aGUgZnVsbCBgbGliYCBkaXJlY3Rvcnkgd2l0aCBhbGwgZGVwZW5kZW5jaWVzIGFuZCB0aGUgbGlnaHRlciBgcGx1Z2luYCBkaXJlY3Rvcnkgd2hpY2ggY29udGFpbnMgZmlsdGVyZWQgZGVwZW5kZW5jaWVzIGdpdmVuIHRoZSBwYXRoLgorKiBJbXByb3ZlZCBgT3B0T3V0YCB0byBhbGxvdyBmb3IgZXhjbHVzaW9uIG9mIGEgZ3JvdXAgb2YgdGVzdHMgYnkgc3BlY2lmeWluZyBhIGJhc2UgdGVzdCBjbGFzcy4KKyogYEdyYXBoQ29tcHV0ZXJUZXN0YCBpcyBub3cgSmF2YTggc3BlY2lmaWMgYW5kIG11Y2ggZWFzaWVyIHRvIGV4dGVuZCB3aXRoIG5ldyB0ZXN0IGNhc2VzLgorKiBNZXJnZWQgdGhlIGBncmVtbGluLWFsZ29yaXRobWAgbW9kdWxlIGludG8gYGdyZW1saW4tdGVzdGAuCisqIFJlbW92ZWQgYExhbWJkYVZlcnRleFByb2dyYW1gIGFuZCBgTGFtYmRhTWFwUmVkdWNlYCBhcyBpdCB3aWxsIGJlIG9uZSBsZXNzIHRoaW5nIHRvIG1haW50YWluLgorKiBHcmVtbGluIENvbnNvbGUgYWNjZXB0cyBhIGBtYXgtaXRlcmF0aW9uYCBjb25maWd1cmF0aW9uIHZpYSB0aGUgc3RhbmRhcmQgYDpzZXRgIGNvbW1hbmQgdG8gbGltaXQgcmVzdWx0IGl0ZXJhdGlvbi4KKyogYFZlcnRleC5wcm9wZXJ0eSgpYCBkZWZhdWx0IGJlaGF2aW9yIGlzIG5vdyBgQ2FyZGluYWxpdHkuc2luZ2xlYC4KKyogQWRkZWQgYEVsZW1lbnRJZFN0cmF0ZWd5YCBhcyBhIGBUcmF2ZXJzYWxTdHJhdGVneWAuCisqIEludHJvZHVjZSBgQWJzdHJhY3RUcmFuc2FjdGlvbmAgdG8gc2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2Ygc3RhbmRhcmQgdHJhbnNhY3Rpb25hbCBmZWF0dXJlcyBmb3IgdmVuZG9ycy4KKyogQWRkZWQgYEV2ZW50U3RyYXRlZ3lgIHRvIGdlbmVyYXRlIGBHcmFwaGAgbW9kaWZpY2F0aW9uIGV2ZW50cyB0byBsaXN0ZW5lcnMuCisqIEFkZGVkIHRlc3QgdG8gZW5mb3JjZSByZXR1cm4gb2YgYW4gZW1wdHkgYFByb3BlcnR5YCBvbiBgVmVydGV4UHJvcGVydHkucHJvcGVydHkoaylgIGlmIG5vIG1ldGEgcHJvcGVydGllcyBleGlzdC4KKyogQWRkZWQgbWV0aG9kcyB0byByZWdpc3RlcmVkIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gbGlzdGVuZXJzIG9uIGBUcmFuc2FjdGlvbmAgYW5kIHByb3ZpZGVkIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyogRml4ZWQgYnVnIGluIE5lbzRqIHdoZXJlIHJldHVybiBvZiBhbiBlbXB0eSBtZXRhIHByb3BlcnR5IHdhcyByZXR1cm5pbmcgYSBgTnVsbFBvaW50ZXJFeGNlcHRpb25gLgorKiBSZWZhY3RvcmVkIHN0ZXAgQVBJIC0tIHRoZSBUaW5rZXJQb3AzIHN0ZXBzIGFyZSB0aGUgZm91bmRhdGlvbiBmb3IgYW55IGRvbWFpbiBzcGVjaWZpYyBsYW5ndWFnZSAoaW5jbHVkaW5nIGdyYXBoKS4KKyogYE1hcFJlZHVjZWAgbm93IGhhcyBgd29ya2VyU3RhcnQoU3RhZ2UpYCBhbmQgYHdvcmtlckVuZChTdGFnZSlgIG1ldGhvZHMgd2l0aCBhbmFsYWdvdXMgc2VtYW50aWNzIHRvIGBWZXJ0ZXhQcm9ncmFtYC4KKyogSGFkb29wLUdyZW1saW4gYE9iamVjdFdyaXRhYmxlYCBub3cgbGV2ZXJhZ2VzIEtyeW8gZm9yIGRhdGEgc2VyaWFsaXphdGlvbi4KKyogYEdpcmFwaEdyYXBoQ29tcHV0ZXJgIHN1cHBvcnRzIGFyYml0cmFyeSBvYmplY3RzIGFzIHRoZSB2ZXJ0ZXggaWQgLS0gcHJldmlvdXNseSwgb25seSBsb25nIGlkcyB3ZXJlIHN1cHBvcnRlZC4KKyogQWRkZWQgYFZlcnRleFByb2dyYW1Qb29sYCB0byBzdXBwb3J0IHRocmVhZCBzYWZlIHBvb2xpbmcgb2YgdmVydGV4IHByb2dyYW1zIGZvciBncmFwaCBjb21wdXRlcnMgdGhhdCBwcm92aWRlIHRocmVhZGVkIHdvcmtlcnMuCisqIEFkZGVkIGBHcnlvUG9vbGAgdG8gc3VwcG9ydCB0aHJlYWQgc2FmZSBwb29saW5nIG9mIEdyeW8gcmVhZGVycyBhbmQgd3JpdGVycy4KKyogQWRkZWQgYFRyYXZlcnNhbFNvdXJjZWAgd2hpY2ggY29udGV4dHVhbGl6ZXMgYSB0cmF2ZXJzYWwgdG8gYSBncmFwaCwgRFNMLCBleGVjdXRpb24gZW5naW5lLCBhbmQgcnVudGltZSBzdHJhdGVnaWVzLgorKiBBZGRlZCBgQWRkVmVydGV4U3RlcGAgKGBhZGRWYCksIGBBZGRQcm9wZXJ0eVN0ZXBgIChgcHJvcGVydHlgKSwgYW5kIGNoYW5nZWQgYEFkZEVkZ2VTdGVwYCB0byBhIG1hcC1zdGVwIGluc3RlYWQgb2YgYSBzaWRlRWZmZWN0LXN0ZXAuCisqIEFkZGVkIGBjb21waWxlYCBtZXRob2QgdG8gYEdyZW1saW5FeGVjdXRvcmAgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKyogRml4ZWQgYnVnIGluIEdyZW1saW4gU2VydmVyIHRoYXQgd2FzIGdlbmVyYXRpbmcgZXh0cmEgcmVzcG9uc2UgbWVzc2FnZXMgb24gc2NyaXB0IGV2YWx1YXRpb24gZXJyb3JzLgorKiBDaGFuZ2VkIHRoZSBgTWVtb3J5YCBBUEkgdG8gbm90IHJldHVybiB0aGUgbXV0YXRlZCB2YWx1ZSBvbiBgb3JgLCBgYW5kYCwgYGluY3JgIGFzIGl0IGlzIHRvbyBkaWZmaWN1bHQgdG8gaW1wbGVtZW50IGZhaXRoZnVsbHkgaW4gYSBkaXN0cmlidXRlZCBzeXN0ZW0uCisqIEFkZGVkIGBTcGFya0dyYXBoQ29tcHV0ZXJgIHRvIEhhZG9vcC1HcmVtbGluIHdoaWNoIHVzZXMgQXBhY2hlIFNwYXJrIGFzIHRoZSB1bmRlcmx5aW5nIGNvbXB1dGluZyBlbmdpbmUuCisqIFJlbmFtZWQgIkdyZW1saW4gS3J5byIgdG8gIkdyeW8iLgorKiBSZWZhY3RvcmVkIGBUaW5rZXJXb3JrZXJQb29sYCB0byB1c2UgYEV4ZWN1dG9yU2VydmljZWAgc28gYXMgdG8gcmV1c2UgdGhyZWFkcyB3aGVuIGV4ZWN1dGluZyBncmFwaCBjb21wdXRlciBmdW5jdGlvbnMuCisqIFJlbW92ZWQgYFJlZHVjaW5nLlJlZHVjZXJgIGFuZCBgUmVkdWNpbmdTdHJhdGVneWAuIFByZXZpb3VzIGBSZWR1Y2luZ2AgY2xhc3NlcyBhcmUgbm93IGBNYXBSZWR1Y2VyYCBjbGFzc2VzLgorKiBSZWZhY3RvcmVkIHRoZSAicHJvY2VzcyIgdGVzdCBzdWl0ZSB0byBhbGxvdyBmb3IgYmV0dGVyIHRlc3QgY29uZmlndXJhdGlvbiB3aXRoIHJlc3BlY3QgdG8gZGlmZmVyZW50IGBUcmF2ZXJzYWxFbmdpbmVgIGltcGxlbWVudGF0aW9ucy4KKyogQWRkZWQgYGhhc05vdCh0cmF2ZXJzYWwpYCB3aGljaCBpcyBhIGZhc3RlciB3YXkgb2YgZG9pbmcgYGhhcyh0cmF2ZXJzYWwuY291bnQoKS5pcygwTCkpYC4KKyogYFRyYXZlcnNhbFN0cmF0ZWd5LmFwcGx5KHRyYXZlcnNhbClgIGlzIHRoZSBuZXcgbWV0aG9kIHNpZ25hdHVyZSBhcyB0aGUgYFRyYXZlcnNhbEVuZ2luZWAgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBgVHJhdmVyc2FsYC4KKyogYFRyYXZlcnNhbEVuZ2luZWAgaXMgbm93IGFuIGludGVyZmFjZSBhbmQgcHJvdmlkZWQgdG8gdGhlIHRyYXZlcnNhbCBieSB0aGUgZ3JhcGguIGBHcmFwaGAgbWV0aG9kcyBhZGRlZCB0byBzZXQgdGhlIGRlc2lyZWQgdHJhdmVyc2FsIGVuZ2luZSB0byB1c2UuCisqIEFkZGVkIGBjb3VudChsb2NhbClgLCBgc3VtKGxvY2FsKWAsIGBtYXgobG9jYWwpYCwgYG1pbihsb2NhbClgLCBgbWVhbihsb2NhbClgLCBgZGVkdXAobG9jYWwpYCwgYHNhbXBsZShsb2NhbClgIGFuZCBgcmFuZ2UobG9jYWwpYCBmb3Igb3BlcmF0aW5nIG9uIHRoZSBsb2NhbCBvYmplY3QgKGUuZy4gY29sbGVjdGlvbiwgbWFwLCBldGMuKS4KKyogYFRyYXZlcnNhbENvbXBhcmF0b3JgIGV4aXN0cyB3aGljaCBhbGxvd3MgZm9yIGBvcmRlcigpLmJ5KG91dEUoKS5jb3VudCgpLGRlY3IpYC4KKyogQWRkZWQgQXBhY2hlIFJhdCBwbHVnaW4gdG8gZGV0ZWN0IHRoZSBwcm9wZXIgaW5jbHVzaW9uIG9mIGxpY2Vuc2UgaGVhZGVycyBpbiBmaWxlcy4KKyogQSBgVHJhdmVyc2FsYCBub3cgcmVzcGVjdHMgdGhyZWFkIGludGVycnVwdGlvbiBkdXJpbmcgaXRlcmF0aW9uLCB0aHJvd2luZyBhIGBUcmF2ZXJzYWxJbnRlcnJ1cHRpb25FeGNlcHRpb25gIGlmIGl0IGVuY291bnRlcnMgaW50ZXJydXB0aW9uIG9uIHRoZSBjdXJyZW50IHRocmVhZC4KKyogQXBhY2hlIHJlZmFjdG9yaW5nOiBgY29tLnRpbmtlcnBvcGAgLT4gYG9yZy5hcGFjaGUudGlua2VycG9wYC4KKyogYFRyYXZlcnNhbGAgaXMgbm93IGBTZXJpYWxpemFibGVgIGFuZCB3aXRoIG1vc3QgcXVlcmllcyBubyBsb25nZXIgbmVlZGluZyBsYW1iZGFzLCBHcmVtbGluLUphdmEgd29ya3Mgb3ZlciB0aGUgd2lyZS4KKyogQWRkZWQgYFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5YCB3aXRoIGBsaXN0YCwgYHNldGAsIGFuZCBgc2luZ2xlYC4gTm8gbW9yZSBgVmVydGV4LnNpbmdsZVByb3BlcnR5KClgIG1ldGhvZC4KKyogQWRkZWQgYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHRoYXQgYWRkcyBhIGBSYW5nZVN0ZXBgIGluIGZyb250IG9mIGAuY291bnQoKS5pcyg8cHJlZGljYXRlPiwgPHZhbHVlPilgIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2YgZmV0Y2hlZCBlbGVtZW50cy4KKyogQWRkZWQgYENvYWxlc2NlU3RlcGAgLyBgY29hbGVzY2UoKWAgdGhhdCBlbWl0cyB0aGUgZmlyc3QgdHJhdmVyc2FsIHdoaWNoIGVtaXRzIGF0IGxlYXN0IG9uZSBlbGVtZW50LgorKiBBZGRlZCBtb3JlIHN5bnRhY3RpYyBzdWdhciB0cmlja3MgdG8gdGhlIEdyZW1saW4gc3VnYXIgcGx1Z2luIC0tIGAmYCwgYHxgLCBgc2VsZWN0IGZyb21gLCBgZ3RgLCBldGMuCisqIGBUcmF2ZXJzYWwuQWRtaW5gIGlzIGNvbnNpc3RlbnQgaW50ZXJuYWwgdG8gc3RlcHMsIHRyYXZlcnNhbHMsIHN0cmF0ZWdpZXMsIGV0Yy4gRm9yIHRoZSB1c2VyLCBgVHJhdmVyc2FsYCBpcyBhbGwgdGhleSBzZWUuCisqIGBUcmF2ZXJzYWxIb2xkZXJgIGlzIG5vdyBjYWxsZWQgYFRyYXZlcnNhbFBhcmVudGAgd2l0aCB0aGUgY2hpbGQvcGFyZW50IHRlcm1pbm9sb2d5IHVzZWQgdGhyb3VnaG91dC4KKyogQWRkZWQgYEdyb292eUVudmlyb25tZW50UGVyZm9ybWFuY2VTdWl0ZWAuCisqIFByb3ZpZGVkIG1vcmUgcm9idXN0IHNodXRkb3duIGNhcGFiaWxpdGllcyBmb3IgdGhlIHRocmVhZCBwb29scyB1c2VkIGluIGBHcmVtbGluRXhlY3V0b3JgLgorKiBBIG1hc3NpdmUgYHByb2Nlc3MvYCBwYWNrYWdlIHJlb3JnYW5pemF0aW9uIC0tIGNsYXNzIG5hbWVzIGFyZSBzdGlsbCB0aGUgc2FtZSwganVzdCBpbiBuZXcgcGFja2FnZXMuCisqIEJ1bXBlZCBgbmVvNGotZ3JhcGhgIHRvIE5lbzRqIDIuMS42LgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNC4xLgorKiBBZGRlZCBhIG5ldyAicGVyZm9ybWFuY2UiIHRlc3Qgc3VpdGUgZm9yIEdyZW1saW4gUHJvY2Vzcy4KKyogU3RlcHMgbm93IG9ubHkgb3BlcmF0ZSB3aXRoIHRyYXZlcnNhbHMgLS0gbm8gbW9yZSBsYW1iZGFzLiBMYW1iZGEtPiBgVHJhdmVyc2FsYCBjb252ZXJzaW9uIHV0aWxpdGllcyBhZGRlZC4KKyogYFNpZGVFZmZlY3RTdGVwYCBhbHdheXMgcmVxdWlyZXMgYSBgQ29uc3VtZXJgLiBTdGVwcyB0aGF0IHdlcmUgY29uc3VtZXItbGVzcyBzaW1wbHkgZXh0ZW5kcyBgQWJzdHJhY3RTdGVwYC4KKyogU2ltcGxpZmllZCB0aGUgYE5lbzRqR3JhcGhgIGltcGxlbWVudGF0aW9uIGJ5IG5vdyBhbGxvd2luZyBgY3lwaGVyKClgIG1pZC10cmF2ZXJzYWwuIE9ubHkgYXZhaWxhYmxlIHZpYSBgZy5jeXBoZXIoKWAuCisqIE1vdmVkIGBjbG9jaygpYCBvdXQgb2YgdGhlIFV0aWxpdHkgcGx1Z2luLiBJdCBpcyBub3cgYXZhaWxhYmxlIHRvIGJvdGggR3Jvb3Z5IGFuZCBKYXZhLgorKiBDaGFuZ2VkIHRoZSBgT3B0T3V0YCBhbm5vdGF0aW9uIHRvIGFsbG93IGZvciBpZ25vcmluZyBhbiBlbnRpcmUgdGVzdCBjYXNlIHVzaW5nIGEgd2lsZGNhcmQuCisqIEFkZGVkIGBBbmRTdGVwYCBhbmQgYE9yU3RlcGAgZmlsdGVycyB0byBzdXBwb3J0IGFyYml0cmFyeSBjb25qdW5jdGlvbiBvZiB0cmF2ZXJzYWxzLgorKiBgX19gIGlzIG5vdyBhIGNsYXNzIHdpdGggc3RhdGljIGBHcmFwaFRyYXZlcnNhbGAgbWV0aG9kcyBhbmQgdGh1cyBgcmVwZWF0KG91dCgpKWAgaXMgcG9zc2libGUuCisqIEFkZGVkIGBJc1N0ZXBgIC8gYC5pcygpYCB0aGF0IHN1cHBvcnRzIGZpbHRlcmluZyBzY2FsYXIgdmFsdWVzLgorKiBgTmVvNGpHcmFwaGAgYW5kIGBUaW5rZXJHcmFwaGAgbm8gbG9uZ2VyIGNyZWF0ZSBuZXcgYEZlYXR1cmVgIGluc3RhbmNlcyBvbiBlYWNoIGZlYXR1cmUgY2hlY2suCisqIEFkZGVkIGBDb21wYXJlLmluc2lkZWAgYW5kIGBDb21wYXJlLm91dHNpZGVgIGZvciB0ZXN0aW5nIHJhbmdlcy4gUmVtb3ZlZCBgYmV0d2VlbigpYCBhcyBub3cgaXRzIGBoYXMoJ2FnZScsaW5zaWRlLFsxMCwzMF0pYC4KKyogYEdyYXBoVHJhdmVyc2FsLmhhcygpYCBubyBsb25nZXIgcmVxdWlyZXMgdGhlIGVsZW1lbnQgdHlwZSB0byBiZSBjYXN0IGluIHRoZSB0cmF2ZXJzYWwgZGVmaW5pdGlvbi4KKyogRml4ZWQgYSBgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbmAgYnVnIGluIFRpbmtlckdyYXBoIHRoYXQgb2NjdXJyZWQgd2hlbiBkb2luZyBmdWxsIHZlcnRleC9lZGdlIHNjYW5zIGFuZCByZW1vdmluZyBlbGVtZW50cyBhbG9uZyB0aGUgd2F5LgorKiBBZGRlZCBgU2NvcGUubG9jYWxgIGFuZCBgU2NvcGUuZ2xvYmFsYCBpbiBzdXBwb3J0IG9mIGBPcmRlckxvY2FsU3RlcGAgYW5kIGBPcmRlckdsb2JhbFN0ZXBgIHZpYSBgb3JkZXIoc2NvcGUpYC4KKyogQWRkZWQgYE9yZGVyLmtleUluY3JgLCBgT3JkZXIua2V5RGVjcmAsIGBPcmRlci52YWx1ZUluY3JgLCBhbmQgYE9yZGVyLnZhbHVlRGVjcmAgaW4gc3VwcG9ydCBvZiBgTWFwYCBzb3J0aW5nLgorKiBBZGRlZCBgT3JkZXIuc2h1ZmZsZWAgYW5kIHJlbW92ZWQgYHNodWZmbGUoKWAgaW4gZmF2b3Igb2YgYG9yZGVyKCkuYnkoc2h1ZmZsZSlgLgorKiBDaGFuZ2VkIGBPcmRlciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8Q29tcGFyYWJsZT5gIHRvIGBPcmRlciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8T2JqZWN0PmAgYXMgaXRzIG5vdyBnZW5lcmFsaXplZCB0byBtdWx0aXBsZSB0eXBlcyBvZiBvYmplY3RzLgorKiBUaGUgYG1heENvbnRlbnRMZW5ndGhgIHNldHRpbmcgaW4gR3JlbWxpbiBTZXJ2ZXIgaXMgbm93IHJlc3BlY3RlZCBieSB0aGUgSFRUUC9SRVNUIEdyZW1saW4gZW5kcG9pbnQuCisqIEZpeGVkIHJlc291cmNlIGxlYWsgaW4gdGhlIEhUVFAvUkVTVCBHcmVtbGluIGVuZHBvaW50IG9mIEdyZW1saW4gU2VydmVyLgorKiBSZWZhY3RvcmVkIEdyZW1saW4gU2VydmVyIGBzdGFydGAgYW5kIGBzdG9wYCBmdW5jdGlvbnMgdG8gcmV0dXJuIGBDb21wbGV0YWJsZUZ1dHVyZWAuCisqIEhUVFAgUkVTVCBlcnJvciByZXNwb25zZSBKU09OIG9iamVjdHMgZnJvbSBHcmVtbGluIFNlcnZlciBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgaXNzdWVzIHdpdGggY29udHJvbCBjaGFyYWN0ZXJzLCBsaW5lIGZlZWRzLCBldGMuCisqIEFkZGVkIGBNZWFuU3RlcGAsIGBtZWFuKClgLCBhbmQgYE1lYW5OdW1iZXJgIGZvciBjYWxjdWxhdGluZyBudW1iZXIgYXZlcmFnZXMgaW4gYSB0cmF2ZXJzYWwuCisqIEdyZWF0bHkgc2ltcGxpZmllZCBhbGwgdGhlIHRyYXZlcnNhbCBgTWFwUmVkdWNlYCBpbXBsZW1lbnRhdGlvbnMgZHVlIHRvIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYFZlcnRleFRyYXZlcnNhbFNpZGVFZmZlY3RzYC4KKyogQWRkZWQgYFZlcnRleFRyYXZlcnNhbFNpZGVFZmZlY3RzYCBhcyBhIGNoZWFwLCBzdGF0aWMgd2F5IHRvIGdldCBhIHNpZGVFZmZlY3QtdmlldyBvZiBhIHZlcnRleCBpbiBPTEFQLgorKiBBZGRlZCBgVHJhdmVyc2FsSGVscGVyLmlzTG9jYWxTdGFyR3JhcGgoKWAgd2hpY2ggZGV0ZXJtaW5lcyBpZiBhIHRyYXZlcnNhbCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBsb2NhbCBzdGFyIGdyYXBoLgorKiBBZGRlZCBgVHJhdmVyc2FsVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIHRvIHZlcmlmeSBpZiB0aGUgdHJhdmVyc2FsIGNhbiBiZSBleGVjdXRlZCBvbiByZXNwZWN0aXZlIGVuZ2luZS4KKyogUmVmYWN0b3JlZCBgR3JhcGhUcmF2ZXJzYWwuY2FwKClgIHRvIGBHcmFwaFRyYXZlcnNhbC5jYXAoU3RyaW5nLi4uKWAgdG8gc3VwcG9ydCBtdWx0aS1zaWRlRWZmZWN0IGdyYWJzLgorKiBBZGRlZCBHcmFwaFNPTiBzZXJpYWxpemF0aW9uIGZvciBgUGF0aGAuCisqIEFkZGVkIGBUcmF2ZXJzYWwuQWRtaW4uZ2V0VHJhdmVyc2VyUmVxdWlyZW1lbnRzKClgIGFuZCByZW1vdmVkIGBUcmF2ZXJzYWxIZWxwZXIuZ2V0VHJhdmVyc2VyUmVxdWlyZW1lbnRzKFRyYXZlcnNhbClgLgorKiBgVHJhdmVyc2FsLmVxdWFscygpYCBpcyBubyBsb25nZXIgY29tcHV0ZWQgYnkgZGV0ZXJtaW5pbmcgaWYgdGhlIG9iamVjdHMgcmV0dXJuZWQgYXJlIGVxdWFsLgorKiBBbHRlcmVkIG1lc3NhZ2luZyBpbiBHcmVtbGluIENvbnNvbGUgd2hlbiB1c2luZyBhIHJlbW90ZSB0aGF0IGlzIG5vdCB5ZXQgYWN0aXZhdGVkLgorKiBGaXhlZCBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrIGluIEdyZW1saW4gRHJpdmVyIHdoZW4gd2FpdGluZyBmb3IgcmVzdWx0cyBmcm9tIHRoZSBzZXJ2ZXIuCisqIEFkZGVkIHRoZSBgdXNlTWFwcGVyRnJvbUdyYXBoYCBzZXJpYWxpemVyIG9wdGlvbiB0byB0aGUgR3JlbWxpbiBTZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGFsbG93IGF1dG8tcmVnaXN0cmF0aW9uIG9mIHNlcmlhbGl6YXRpb24gY2xhc3Nlcy4KKyogUmVmYWN0b3JlZCBOZXR0eSBwaXBlbGluZSBzdHJ1Y3R1cmUgdG8gbm90IGhhdmUgYSBzZWNvbmQgIkdyZW1saW4iIGV4ZWN1dG9yIGdyb3VwIGFuZCBpbnN0ZWFkIHVzZWQgYSBzdGFuZGFyZCBgRXhlY3V0b3JTZXJ2aWNlYC4KKyogUmVmYWN0b3JlZCB0aGUgYEdyZW1saW5FeGVjdXRvcmAgdG8gdGFrZSBhbiBvcHRpb25hbCB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiBzbyBhcyB0byBhbGxvdyBtYW5pcHVsYXRpb24gb2YgcmVzdWx0cyBmcm9tIGBldmFsYCBpbiB0aGUgc2FtZSB0aHJlYWQgb2YgZXhlY3V0aW9uLgorKiBGaXhlZCBpc3N1ZSB3aXRoIHRoZSBgSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXJgIHdoZXJlIHJlcXVlc3RzIHdlcmUgZ2V0dGluZyBibG9ja2VkIHdoZW4gYGtlZXAtYWxpdmVgIHdhcyBvbi4KKyogQWRkZWQgYE1pblN0ZXBgIGFuZCBgTWF4U3RlcGAgd2l0aCByZXNwZWN0aXZlIGBtaW4oKWAgYW5kIGBtYXgoKWAuCisqIGBDb3VudFN0ZXBgIGFuZCBgU3VtU3RlcGAgbm93IGV4dGVuZCBgUmVkdWNpbmdCYXJyaWVyU3RlcGAgYW5kIG5vIGxvbmdlciBhcmUgc2lkZUVmZmVjdCBzdGVwcy4KKyogYFNpZGVFZmZlY3RDYXBTdGVwYCBub3cgZXh0ZW5kcyBgU3VwcGx5aW5nQmFycmllcmAgYW5kIGlzIG11Y2ggc2ltcGxlciB0aGFuIGJlZm9yZS4KKyogQWRkZWQgYFN1cHBseWluZ0JhcnJpZXJgIHdoaWNoIHNpbXBseSBkcmFpbnMgdGhlIHRyYXZlcnNhbCBhbmQgZW1pdHMgdGhlIHZhbHVlIG9mIGEgcHJvdmlkZWQgc3VwcGxpZXIuCisqIEFkZGVkIGBUcmF2ZXJzYWxMYW1iZGFgIHdoaWNoIGltcGxlbWVudHMgZnVuY3Rpb24sIHByZWRpY2F0ZSwgYW5kIGNvbnN1bWVyIG92ZXIgYSBwcm92aWRlZCB0cmF2ZXJzYWwuCisqIEFueSBub24tY29yZSBgU3RlcGAgdGhhdCB0YWtlcyBhIGZ1bmN0aW9uIG9yIHByZWRpY2F0ZSBjYW4gbm93IHRha2UgYSB0cmF2ZXJzYWwgd2hpY2ggbWFwcyB0byBgdHJhdmVyc2FsLm5leHQoKWAgKGZ1bmN0aW9uKSBhbmQgYHRyYXZlcnNhbC5oYXNOZXh0KClgIChwcmVkaWNhdGUpLgorKiBgQ29sbGVjdGluZ0JhcnJpZXJTdGVwYCBpcyBubyBsb25nZXIgYWJzdHJhY3QgYW5kIGFkZGVkIGBHcmFwaFRyYXZlcnNhbC5iYXJyaWVyKClgIHdoaWNoIGlzIGFuYWxvZ291cyB0byBgZm9sZCgpLnVuZm9sZCgpYCwgdGhvdWdoIGNoZWFwZXIuCisqIEFkZGVkIGBUcmF2ZXJzYWxPcHRpb25Ib2xkZXJgIGZvciBicmFuY2hpbmcgc3RlcHMgdG8gaW5kZXggd29ya3Mgd2l0aCBjb3JyZXNwb25kaW5nIGBHcmFwaFRyYXZlcnNhbC5vcHRpb24oKWAuCisqIGBCcmFuY2hTdGVwYCBpcyBub3cgYSBwcm9wZXIgZ2VuZXJhbGl6YXRpb24gb2YgYFVuaW9uU3RlcGAgYW5kIGBDaG9vc2VTdGVwYC4KKyogYFN1YmdyYXBoU3RlcGAgaGFzIGNoYW5nZWQgaW4gc3VwcG9ydCBvZiBpbi10cmF2ZXJzYWwgZmlsdGVyaW5nIGFuZCByZW1vdmluZyB0aGUgbmVlZCBmb3IgcGF0aC1iYXNlZCB0cmF2ZXJzZXJzLgorKiBBZGRlZCBgSGFzVHJhdmVyc2FsU3RlcGAgd2hpY2ggdGFrZXMgYW4gYW5vbnltb3VzIHRyYXZlcnNhbCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdG8gZmlsdGVyIHRoZSBjdXJyZW50IG9iamVjdC4KKyogQWRkZWQgYFRyYXZlcnNhbC5BZG1pbi5nZXRTdGFydFN0ZXAoKWAgYW5kIGBUcmF2ZXJzYWwuQWRtaW4uZ2V0RW5kU3RlcCgpYC4gUmVtb3ZlZCBgVHJhdmVyc2FsSGVscGVyLmdldFN0YXJ0KClgIGFuZCBgVHJhdmVyc2FsSGVscGVyLmdldEVuZCgpYC4KKyogUmVmYWN0b3JlZCBgcHJvZmlsZSgpYCB0byB1c2UgaW5qZWN0ZWQgc3RlcHMuIGBQcm9maWxlU3RlcGAgY2FuIG5vdyBiZSB1c2VkIHdpdGhvdXQgYW55IHNwZWNpYWwgSlZNIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzLgorKiBBZGRlZCBgUmVkdWNpbmdCYXJyaWVyU3RlcGAgd2hpY2ggYWN0cyBsaWtlIGBDb2xsZWN0aW5nQmFycmllclN0ZXBgIGJ1dCBvcGVyYXRlcyBvbiBhIHNlZWQgd2l0aCBhIGJpLWZ1bmN0aW9uLgorKiBBZGRlZCBhIHByZXByb2Nlc3NvciBmb3IgQXNjaWlEb2NzLiBEb2N1bWVudGF0aW9uIGNvZGUgZXhhbXBsZXMgYXJlIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdWx0cyBhcmUgZHluYW1pY2FsbHkgaW5zZXJ0ZWQgaW50byB0aGUgZG9jIGZpbGUuCisqIGBMb2NhbFN0ZXBgIHRyYXZlcnNhbCBpcyB0cmVhdGVkIGFzIGEgYnJhbmNoLCBub3QgYW4gaXNvbGF0ZWQgdHJhdmVyc2FsLiBNb3Jlb3ZlciwgbW92ZWQgYExvY2FsU3RlcGAgdG8gYGJyYW5jaC9gLgorKiBUcmF2ZXJzYWwgc3RyYXRlZ2llcyBhcmUgbm93IGFwcGxpZWQgd2hlbiB0aGUgYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIHN0YXRlIGlzIGxvYWRlZCwgbm90IHdoZW4gc3VibWl0dGVkLiBMZXNzIGVycm9yIHByb25lIGFzIGl0IGd1YXJhbnRlZXMgc3RyYXRlZ3kgYXBwbGljYXRpb24uCisqIFJld29ya2VkIGBUcmF2ZXJzYWxIb2xkZXJgIHdoZXJlIHRoZXJlIGFyZSAibG9jYWwgdHJhdmVyc2FscyIgYW5kICJnbG9iYWwgdHJhdmVyc2FscyIuIExvY2FsIHRyYXZlcnNhbHMgYXJlIG5vdCBzdWJqZWN0IHRvIE9MQVAgbWVzc2FnZSBwYXNzaW5nLgorKiBGaXhlZCBhIGJ1ZyBpbiBgRGVkdXBTdGVwYCB0aGF0IG1hZGUgaXRzZWxmIGFwcGFyZW50IGluIGBEZWR1cE9wdGltaXplclN0cmF0ZWd5YC4KKyogQWRkZWQgYFJlcGVhdFN0ZXAuUmVwZWF0RW5kU3RlcGAgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBjb2RlIG9uIE9MQVAgd2hlbiB0aGUgcHJlZGljYXRlcyBhcmUgbm90IGF0IHRoZSBzdGFydCBvZiBgUmVwZWF0U3RlcGAuCisKK1tbcmVsZWFzZS0zLTAtMC1tN11dCis9PT0gVGlua2VyUG9wIDMuMC4wLk03IChSZWxlYXNlIERhdGU6IEphbnVhcnkgMTksIDIwMTUpCisKKyogQWRkZWQgYFNpZGVFZmZlY3RSZWdpc3RyYXJgIGludGVyZmFjZSBhbmQgYFNpZGVFZmZlY3RSZWdpc3RyYXRpb25TdHJhdGVneWAgZm9yIGFsbG93aW5nIHN0ZXBzIHRvIHJlZ2lzdGVyIHNpZGVFZmZlY3RzIGF0IHN0cmF0ZWd5IGFwcGxpY2F0aW9uIHRpbWUuCisqIFJlbmFtZWQgYFRyYXZlcnNlci5BZG1pbi5zZXRGdXR1cmUoKWAgYW5kIGBUcmF2ZXJzZXIuQWRtaW4uZ2V0RnV0dXJlKClgIHRvIGBzZXRTdGVwSWQoKWAgYW5kIGBnZXRTdGVwSWQoKWAsIHJlc3BlY3RpdmVseS4KKyogQWRkZWQgYFRyYXZlcnNhbE1hdHJpeGAgZm9yIHJhbmRvbSBhY2Nlc3MgdG8gc3RlcHMgaW4gYSB0cmF2ZXJzYWwgYnkgdGhlaXIgc3RlcCBpZC4gVXNlZCBieSBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAuCisqIEFkZGVkIHVuaXF1ZSBpZGVudGlmaWVzIHRvIGBTdGVwYCB0aGF0IGFyZSBub3QgdGhlIHVzZXIgcHJvdmlkZWQgbGFiZWxzLiBgU3RlcC5nZXRMYWJlbCgpYCBub3cgcmV0dXJucyBhbiBgT3B0aW9uYWw8U3RyaW5nPmAuCisqIFJlbW92ZWQgYFVuaW9uTGluZWFyU3RyYXRlZ3lgLCBgQ2hvb3NlTGluZWFyU3RyYXRlZ3lgLCBhbmQgYFJlcGVhdExpbmVhclN0cmF0ZWd5YCBhcyBuZXN0ZWQgdHJhdmVyc2FscyBhcmUgbm93IG5hdGl2ZWx5IHN1cHBvcnRlZCBpbiBPTEFQLgorKiBGaXhlZCBgTmVvNGpHcmFwaGAgYXJvdW5kIG1hbnVhbCB0cmFuc2FjdGlvbiBiZWhhdmlvciBvbiBgY29tbWl0YCBhbmQgYHJvbGxiYWNrYCBzdWNoIHRoYXQgdGhleSB3b3VsZCB0aHJvdyBleGNlcHRpb25zIGlmIGEgdHJhbnNhY3Rpb24gd2FzIG5vdCBvcGVuLgorKiBSZWRlc2lnbmVkIHRoZSBoaWRkZW4gc3RlcCBsYWJlbGluZyBtZWNoYW5pc20gc28gaXRzIGNvbnNpc3RlbnQgYWNyb3NzIGEgY2x1c3RlciwgZWFzaWVyIGZvciByZXdyaXRlIHN0cmF0ZWdpZXMsIGFuZCB3aWxsIGVuYWJsZSBuZXN0ZWQgT0xBUCB0cmF2ZXJzYWxzLgorKiBgVHJhdmVyc2VyLmluY3JMb29wcygpYCBub3cgdGFrZXMgYSBzdHJpbmcgc3RlcCBsYWJlbCB0byBlbmFibGUgbmVzdGVkIGxvb3BpbmcgY29uc3RydWN0cyAoaS5lLiBsb29wIHN0YWNrcykuCisqIEFkZGVkIGBUcmF2ZXJzYWwudHJ5TmV4dCgpYCB3aGljaCByZXR1cm5zIGFuIGBPcHRpb25hbGAsIHdoZXJlIHRoZSBwcm92aWRlZCBkZWZhdWx0IG1ldGhvZCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYWxsIHZlbmRvcnMuCisqIFJlbW92ZWQgYFBhdGhDb25zdW1lcmAgaW4gZmF2b3Igb2YgYFRyYXZlcnNlclJlcXVpcmVtZW50LlBBVEhgLW1vZGVsIHZpYSBgU3RlcC5nZXRSZXF1aXJlbWVudHMoKWAuCisqIGBTdGVwLmdldFJlcXVpcmVtZW50cygpYCByZXR1cm5zIGEgYFNldDxUcmF2ZXJzZXJSZXF1aXJlbWVudD5gIHdoaWNoIGlzIHdoYXQgaXMgcmVxdWlyZWQgb2YgdGhlIGBUcmF2ZXJzZXJgIGJ5IHRoZSBgU3RlcGAuCisqIGBUcmF2ZXJzZXJgIG5vdyBleHRlbmRzIGBDbG9uZWFibGVgIGFuZCBgVHJhdmVyc2VyLmNsb25lKClgIGlzIHVzZWQgdG8gZ29vZCBlZmZlY3QgaW4gYFRyYXZlcnNlci5zcGxpdCgpYC4KKyogQWRkZWQgYEFic3RyYWN0VHJhdmVyc2VyYCBmb3Igd2hpY2ggYWxsIHRyYXZlcnNlcnMgZXh0ZW5kLgorKiBNb3ZlZCBgVHJhdmVyc2FsLlNpZGVFZmZlY3RzYCB0byBgVHJhdmVyc2FsU2lkZUVmZmVjdHNgIGFzIHNpZGVFZmZlY3RzIGFyZSBub3QgbmVjZXNzYXJpbHkgdGllZCB0byB0aGUgdHJhdmVyc2FsLgorKiBSZW1vdmVkIGBHcmFwaC5vZigpYCBmb3IgZ2VuZXJhdGluZyBhbm9ueW1vdXMgZ3JhcGggdHJhdmVyc2FscyAtLSByZXBsYWNlZCBieSBgX19gLW1vZGVsLgorKiBSZW1vdmVkIGBHcmFwaGAgYmVpbmcgc3RvcmVkIGluIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgLiBUb28gZGFuZ2Vyb3VzIHdoZW4gbW92aW5nIGJldHdlZW4gT0xUUCBhbmQgT0xBUCBhbmQgaXRzIGxpbWl0ZWQgdXNlcyB3ZXJlIHdvcmtlZCBhcm91bmQgZWFzaWx5LgorKiBObyBuZWVkIGZvciBgRGVmYXVsdFhYWEdyYXBoVHJhdmVyc2FsYCB1bmxlc3MgdGhlIHZlbmRvciBpcyBleHRlbmRpbmcgd2l0aCBuZXcgbWV0aG9kcyAoZS5nLiBgRGVmYXVsdE5lbzRqR3JhcGhUcmF2ZXJzYWxgKS4KKyogUmV3b3JrZWQgYFRyYXZlcnNhbFN0cmF0ZWdpZXNgIHN1Y2ggdGhhdCB0aGUgYXJlICJlbWFuYXRpbmcgb2JqZWN0IGNsYXNzIi1kZXBlbmRhbnQsIG5vdCBgVHJhdmVyc2FsYCBkZXBlbmRlbnQuCisqIE1vdmVkIGBUcmF2ZXJzZXIuc2lkZUVmZmVjdHMoKWAgdG8gYFRyYXZlcnNlci5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKWAuIFVzZXJzIHNob3VsZCB1c2UgYFRyYXZlcnNlci5zaWRlRWZmZWN0cyhrZXkpYCBhbmQgYFRyYXZlcnNlci5zaWRlRWZmZWN0cyhrZXksdmFsdWUpYC4KKyogQWRkZWQgYFNlcmlhbGl6YXRpb25UZXN0YCB0byB0aGUgYFN0cnVjdHVyZVN0YW5kYXJkU3VpdGVgIGluIGBncmVtbGluLXRlc3RgIHdoaWNoIHZhbGlkYXRlcyBzZXJpYWxpemF0aW9uIGF0IGEgbG93ZXIgbGV2ZWwgdGhhbiBgSW9UZXN0YC4KKyogUmVtb3ZlZCBgSW50ZXJ2YWxTdGVwYCBhbmQgcmVuYW1lZCBgaW50ZXJ2YWwoKWAgdG8gYGJldHdlZW4oKWAgd2hpY2ggaXMgc2ltcGx5IGFuIGFsaWFzIHRvIGEgYGhhcygpLmhhcygpYCBjaGFpbi4KKyogQWRkZWQgYF9fYCBzdGF0aWMgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyBmb3IgYF9fLm91dCgpLm91dCgpYC1zdHlsZSBjb25zdHJ1Y3Rpb24gb2YgYW5vbnltb3VzIHRyYXZlcnNhbHMgKGluc3RlYWQgb2YgYGcub2YoKWApLgorKiBUaGUgb25seSBgR3JhcGhUcmF2ZXJzYWxgIHN0ZXBzIHRoYXQgb3BlcmF0ZSBvbiBgVHJhdmVyc2VyYCBhcmUgdGhlIGJhc2UgbGFtYmRhcyBhbmQgYHJlcGVhdCgpYCAoaS5lLiBgZW1pdCgpYCBhbmQgYHVudGlsKClgKS4KKyogUmVtb3ZlZCBkZXBlbmRlbmN5IG9uIHRoZSBgcmVmbGVjdGlvbnNgIGxpYnJhcnkgaW4gYGdyZW1saW4tdGVzdGAgd2hpY2ggcmVtb3ZlZCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBgR3JhcGhQcm92aWRlci5nZXRJbXBsZW1lbnRhdGlvbnMoKWAgLSB2ZW5kb3JzIG5vdyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZCB0aGVtc2VsdmVzLgorKiBSZWxheGVkIHRoZSBgPFM+YCB0eXBpbmcgcmVxdWlyZW1lbnQgZm9yIGFub255bW91cyB0cmF2ZXJzYWxzIHdoZW4gYXBwbGllZCB0byBgY2hvb3NlKClgLCBgcmVwZWF0KClgLCBgdW5pb24oKWAsIGV0Yy4KKyogUmVtb3ZlZCBgTG9vcFN0ZXBgIGFuZCBgVW50aWxTdGVwYCBpbiBmYXZvciBvZiB0aGUgbmV3IGBSZXBlYXRTdGVwYCBtb2RlbCBvZiBsb29waW5nIGluIEdyZW1saW4zLgorKiBgQnJhbmNoU3RlcGAgaXMgbm93IGV4cG9zZWQgaW4gYEdyYXBoVHJhdmVyc2FsYCB2aWEgYGJyYW5jaChmdW5jdGlvbilgLgorKiBgVW5pb25TdGVwYCBub3cgaW1wbGVtZW50cyBgVHJhdmVyc2FsSG9sZGVyYC4KKyogQWRkZWQgYFJlcGVhdFN0ZXBgIGFzIHRoZSBuZXcgbG9vcGluZyBjb25zdHJ1Y3Qgc3VwcG9ydGluZyBkby93aGlsZSwgd2hpbGUvZG8sIGFuZCBlbWl0IHNlbWFudGljcy4KKyogTW92ZWQgYFRyYXZlcnNhbC5zaWRlRWZmZWN0cygpYCB0byBgVHJhdmVyc2FsLkFkbWluLmdldFNpZGVFZmZlY3RzKClgIGFzIGBjYXAoKWAgc2hvdWxkIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSBzaWRlRWZmZWN0IGRhdGEgb2YgYSB0cmF2ZXJzYWwuCisqIFJlbmFtZWQgdmVuZG9yIGBYWFhUcmF2ZXJzYWxgIHRvIGBYWFhHcmFwaFRyYXZlcnNhbGAgKGludGVyZmFjZSkgYW5kIGBYWFhHcmFwaFRyYXZlcnNhbGAgdG8gYERlZmF1bHRYWFhHcmFwaFRyYXZlcnNhbGAgKGltcGxlbWVudGF0aW9uIGNsYXNzKS4KKyogTW9kaWZpZWQgcGFja2FnaW5nIGZvciBjb25zb2xlIHBsdWdpbnMgdG8gYmUgbW9yZSBjb25zaXN0ZW50IGJ5IG1vdmluZyB0aGVtIHRvIHRoZSBgY29tLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuZ3Jvb3Z5LnBsdWdpbmAgbmFtZXNwYWNlLgorKiBSZW1vdmVkIGFsbCBUaW5rZXJQb3Agc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIEd1YXZhIHRvIGF2b2lkIHVzZXIgdmVyc2lvbiBjb25mbGljdHMuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGAtZWAgKHNjcmlwdCBmaWxlIGV4ZWN1dGlvbikgYW5kIGAtdmAgKHZlcnNpb24gZGlzcGxheSkgb3B0aW9ucyBvbiBgZ3JlbWxpbi5zaGAuCisqIEdyYXBoU09OIHN1cHBvcnRzIHRoZSBhc3NpZ25tZW50IG9mIG11bHRpcGxlIGN1c3RvbSBzZXJpYWxpemF0aW9uIG1vZHVsZXMuCisqIGBUcmF2ZXJzZXIuZ2V0KHN0ZXBMYWJlbC9zaWRlRWZmZWN0S2V5KWAgbm8gbG9uZ2VyIGV4aXN0cy4gVGhlcmUgbm93IGV4aXN0czogYFRyYXZlcnNlci5wYXRoKHN0ZXBMYWJlbClgIGFuZCBgVHJhdmVyc2VyLnNpZGVFZmZlY3RzKHNpZGVFZmZlY3RLZXkpYC4KKyogYFNpbXBsZVRyYXZlcnNlcmAgbm93IHN1cHBvcnRzICJwYXRoIiBidXQgaW4gYSB2ZXJ5IGxvb3NlLCBnbG9iYWwgY2FjaGUgd2F5LiBBZGRlZCBgU3BhcnNlUGF0aGAgYXMgYSBgTWFwYC1iYWNrZWQgYFBhdGhgIGltcGxlbWVudGF0aW9uLgorKiBQcm92aWRlZCBOZW80aiBtdWx0aS1sYWJlbCBzdXBwb3J0IGluIE5lbzRqLUdyZW1saW4uIEFkZGVkIHRocmVlIGBOZW80alZlcnRleGAtc3BlY2lmaWMgbWV0aG9kczogYGFkZExhYmVsKClgLCBgcmVtb3ZlTGFiZWwoKWAsIGBsYWJlbHMoKWAuCisqIEJ1bXBlZCB0byBHcm9vdnkgMi4zLjkuCisqIEFkZGVkIGBHcmFwaC5Jb2AgaW50ZXJmYWNlIHdoaWNoIGFsbG93cyBmb3Igc2ltcGxpZmllZCBoZWxwZXIgbWV0aG9kcyBmb3IgZW5kIHVzZXJzIGFuZCBhIHdheSBmb3IgdmVuZG9ycyB0byBvdmVycmlkZSBgR3JhcGhSZWFkZXJgIGFuZCBgR3JhcGhXcml0ZXJgIGluaXRpYWwgY29uc3RydWN0aW9uIHdoZW4gY3VzdG9tIHNlcmlhbGl6ZXJzIGFyZSBuZWVkZWQuCisqIFJlbW92ZWQgbWV0aG9kcyBmcm9tIGBHcmFwaFByb3ZpZGVyYCByZWxhdGVkIHRvIGN1c3RvbWl6aW5nIHNlcmlhbGl6ZXJzIGluIGBJb1Rlc3RgIGZyb20gdGhlIHRlc3Qgc3VpdGUgYXMgdGhlIG5ldyBgR3JhcGguSW9gIGludGVyZmFjZSBub3cgc2VydmVzIHRoYXQgcHVycG9zZS4KKyogQWRkZWQgYE5lbzRqR3JhcGguY2hlY2tFbGVtZW50c0luVHJhbnNhY3Rpb24oYm9vbGVhbilgIHdoaWNoIHdpbGwgKG9yIG5vdCkgdmVyaWZ5IHdoZXRoZXIgZWxlbWVudHMgcmV0cmlldmVkIHZpYSBOZW80aiBnbG9iYWwgZ3JhcGggb3BlcmF0aW9ucyBhcmUgdHJhbnNhY3Rpb25hbGx5IGNvbnNpc3RlbnQuCisqIEFkZGVkIGBTY3JpcHRJbnB1dEZvcm1hdGAgYW5kIGBTY3JpcHRPdXRwdXRGb3JtYXRgIHRvIEhhZG9vcC1HcmVtbGluIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIGEgZmlsZSBhY2NvcmRpbmcgdG8gYW4gYXJiaXRyYXJ5IHBhcnNpbmcgc2NyaXB0LgorKiBBZGRlZCBgVGltZUxpbWl0U3RlcC5nZXRUaW1lZE91dCgpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHN0ZXAgdGltZWQgb3V0IG9yIHRoZXJlIHdlcmUgbm8gbW9yZSBvYmplY3RzIHRvIHByb2Nlc3MuCisqIGBHcmFwaC5TeXN0ZW1gIGlzIG5vdyBgR3JhcGguSGlkZGVuYCB3aXRoICJoaWRkZW4iIGJlaW5nIHRoZSB2ZW5kb3IgbmFtZXNwYWNlIGFuZCB0aGUga2V5IHByZWZpeCBiZWluZyBgfmAuCisqIE11Y2ggYmV0dGVyIGB0b1N0cmluZygpYCBoYW5kbGluZyBpbiBgU3RlcGAgYW5kIGBUcmF2ZXJzYWxgLgorKiBgQ29tcGFyYXRvckhvbGRlcjxWPmAgaW50ZXJmYWNlIHJldHVybnMgYSBgTGlzdDxDb21wYXJhdG9yPFY+PmAgaW5zdGVhZCBvZiBhIGBDb21wYXJhdG9yPFY+W11gLgorKiBgVGAgbm93IGltcGxlbWVudHMgYEZ1bmN0aW9uPEVsZW1lbnQsT2JqZWN0PmAuCisqIEFkZGVkIGBFbGVtZW50VmFsdWVDb21wYXJhdG9yYCBhbmQgYEVsZW1lbnRGdW5jdGlvbkNvbXBhcmF0b3JgIGluIHN1cHBvcnQgb2YgdmVuZG9yIGludHJvc3BlY3Rpb24gb24gYENvbXBhcmF0b3JIb2xkZXJgLXN0ZXBzLgorKiBSZW5hbWVkIGBDb21wYXJpbmdgIG1hcmtlciBpbnRlcmZhY2UgdG8gYENvbXBhcmF0b3JIb2xkZXJgLgorKiBgRnVuY3Rpb25Ib2xkZXJgIGludGVyZmFjZSBwcm92aWRlcyB2ZW5kb3IgaW50cm9zcGVjdGlvbiB2aWEgYEVsZW1lbnRWYWx1ZUZ1bmN0aW9uYC4KKyogUmVtb3ZlZCBgT3JkZXJCeVN0ZXBgIGFzIGl0IGlzIG5vdyBqdXN0IGBvcmRlcigpYCB3aXRoIGEgYGJ5KClgLWJhc2VkIGNvbXBhcmF0b3IuCisqIEFkZGVkIGBTYW1wbGVTdGVwYCAoYHNhbXBsZSgpYCkgdG8gYWxsb3cgZm9yIHNhbXBsaW5nIHRoZSBzZXQgb2YgcHJldmlvdXMgb2JqZWN0cy4gVXNlZnVsIGZvciBkb2luZyByYW5kb20gd2Fsa3Mgd2l0aCBgbG9jYWwoKWAuCisqIFJlbmFtZWQgYHJhbmRvbSgpYCB0byBgY29pbigpYCB0byBiZXR0ZXIgZXhwcmVzcyB0aGF0IHRoZSBmaWx0ZXIgaXMgYSByYW5kb20gY29pbiB0b3NzLgorKiBBZGRlZCBgYnkoKWAtcHJvamVjdGlvbiB0byBtb2R1bGF0ZSB0aGUgbWVhbmluZyBvZiBwb3N0LXByb2Nlc3Npbmcgc3RlcHMgbGlrZSBgYWdncmVnYXRlKClgLCBgZ3JvdXBDb3VudCgpYCwgYHBhdGgoKWAsIGBvcmRlcigpYCwgZXRjLgorKiBSZW1vdmVkIHRoZSBgU3RyYXRlZ3lgIGludGVyZmFjZSBhbmQgZ2F2ZSBgU3RyYXRlZ3lHcmFwaGAgZGlyZWN0IGFjY2VzcyB0byB0aGUgYEdyYXBoU3RyYXRlZ3lgLgorKiBBZGRlZCBgR3JhcGguc3RyYXRlZ3koKWAgdG8gaGVscCBpbnN0YW50aWF0ZSBgU3RyYXRlZ3lHcmFwaGAgaW5zdGFuY2VzLgorKiBNb2RpZmllZCB0aGUgc2lnbmF0dXJlIG9mIGFsbCBgR3JhcGhTdHJhdGVneWAgbWV0aG9kcyB0byBpbmNsdWRlIGFuIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSAiY29tcG9zaW5nIHN0cmF0ZWd5Ii4KKyogYFBhcnRpdGlvblN0cmF0ZWd5YCBoaWRlcyB0aGUgc3BlY2lmaWVkIHBhcnRpdGlvbiBrZXkgZnJvbSB2aWV3IHdoZW4gaXRlcmF0aW5nIHByb3BlcnRpZXMsIGtleXMsIGV0Yy4KKyogQ2hhbmdlIGNvbnN0cnVjdGlvbiBvZiBgR3JhcGhTdHJhdGVneWAgaW1wbGVtZW50YXRpb25zIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBzaW5nbGV0b24gaW5zdGFuY2VzIGFuZCBidWlsZGVyIHBhdHRlcm4uCisqIEFkZGVkIGBHcmFwaC5IZWxwZXJgIGFubm90YXRpb24gdG8gInByb3RlY3RlZCIgY2VydGFpbiBkZWZhdWx0IGludGVyZmFjZSBtZXRob2RzIGZyb20gaW1wbGVtZW50YXRpb24gYnkgdmVuZG9ycy4KKyogVHJhbnNhY3Rpb24gcmV0cnkgZnVuY3Rpb25zIG5vdyB3b3JrIHdpdGggIm1hbnVhbCIgdHJhbnNhY3Rpb25zLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgd2hlbiBpbXBvcnRpbmcgImxlZ2FjeSIgR3JhcGhTT04gdGhhdCB3YXMgbm90IGdlbmVyYXRlZCB3aXRoICJleHRlbmRlZCIgcHJvcGVydGllcy4KKyogUmVuYW1lZCAiaXRlcmF0b3IiIHJlbGF0ZWQgbWV0aG9kcyBpbiB0aGUgYEdyYXBoU3RyYXRlZ3lgIGludGVyZmFjZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIG1ldGhvZCBuYW1lcyB0aGV5IHJlcHJlc2VudC4KKyogYFByb3BlcnR5TWFwU3RlcGAgKGB2YWx1ZU1hcCgpYCkgbm93IHRha2VzIGEgYm9vbGVhbiB0byBzdGF0ZSBpZiB0aGUgdG9rZW5zIG9mIHRoZSBlbGVtZW50IGFyZSBkZXNpcmVkIGFsb25nIHdpdGggaXRzIHByb3BlcnRpZXMuCisqIGBIYWRvb3BHcmFwaGAgbm93IGNvbm5lY3RlZCB0byB0aGUgYFN0cnVjdHVyZVByb2Nlc3NTdWl0ZWAuCisqIGBIYWRvb3BHcmFwaGAgbm8gbG9uZ2VyIHN1cHBvcnRzIGBHcmFwaC5WYXJpYWJsZXNgIGFzIHRoZXkgd2VyZSBpbi1tZW1vcnkuIEEgcGVyc2lzdGVuY2UgbWVjaGFuaXNtIGNhbiBiZSBpbnRyb2R1Y2VkIGluIHRoZSBmdXR1cmUuCisqIEhpZGRlbiBwcm9wZXJ0aWVzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgYEdyYXBoU3RyYXRlZ3lgIGZvciBzdWNoIGZlYXR1cmVzLgorKiBgRWRnZS5pdGVyYXRvcnMoKS52ZXJ0ZXhJdGVyYXRvcihCT1RIKWAgbm93IGd1YXJhbnRlZXMgYE9VVGAgdGhlbiBgSU5gIHZlcnRleCBpdGVyYXRvciBvcmRlci4KKyogYEdyYXBoLnYoT2JqZWN0KWAgYW5kIGBHcmFwaC5lKE9iamVjdClgIG5vIGxvbmdlciBleGlzdC4gSW5zdGVhZCwgdXNlIGBHcmFwaC5WKE9iamVjdC4uLiBpZHMpYCBhbmQgYEdyYXBoLkUoT2JqZWN0Li4uIGlkcylgLgorKiBBZGRlZCBgR3JhcGguSXRlcmF0b3JzYCB0byBhbGxvdyBhY2Nlc3MgdG8gdmVydGV4IGFuZCBlZGdlIGl0ZXJhdG9ycyBiYXNlZCBvbiBlbGVtZW50IGlkcyBhbmQgYnlwYXNzaW5nIGBHcmFwaFRyYXZlcnNhbGAuCisqIFJlbmFtZWQgYEdyYXBoU3RyYXRlZ3lgIGltcGxlbWVudGF0aW9ucyB0byBiZSBsZXNzIHZlcmJvc2UgLSByZW1vdmVkIHRoZSB3b3JkICJHcmFwaCIgZnJvbSB0aGVpciBuYW1lcyAoZS5nLiBgSWRHcmFwaFN0cmF0ZWd5YCBzaW1wbHkgY2hhbmdlZCB0byBgSWRTdHJhdGVneWApLgorKiBSZW1vdmVkIGBTdGVwLk5PX09CSkVDVGAgYXMgdGhlIHByb2JsZW0gaXMgc29sdmVzIGNhbiBiZSBzb2x2ZWQgd2l0aCBwcm9wZXIgdXNlIG9mIGBmbGF0TWFwYCBhbmQgYEVtcHR5VHJhdmVyc2VyYC4KKyogYFBhdGhgIGlzIG5vdyBwYXJ0IG9mIGBHcmFwaFNlcmlhbGl6ZXJgIGFuZCB0aHVzLCBub3Qgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uIG9mIGBQYXRoYC4KKyogQWRkZWQgbWVzc2FnaW5nIHRvIHNob3cgZmlsZXMgYmVpbmcgZG93bmxvYWRlZCB3aGVuIHVzaW5nIHRoZSBHcmVtbGluIFNlcnZlciAiaW5zdGFsbCIgY29tbWFuZC4KKyogQWRkZWQgdGVzdCBuYW1lIGFuZCBjbGFzcyBhcmd1bWVudHMgdG8gdGhlIGBHcmFwaFByb3ZpZGVyLmxvYWRHcmFwaFdpdGhgIG1ldGhvZC4KKyogTWVyZ2VkIGBSZWZlcmVuY2VkWFhYYCBhbmQgYERldGFjaGVkWFhYYCBzbyB0aGF0IGFsbCBtaWdyYXRpb24gb2YgZ3JhcGggZWxlbWVudCBkYXRhIGlzIHZpYSBgRGV0YWNoZWRYWFhgLgorKiBBZGRlZCBgU3RhdGljVmVydGV4UHJvZ3JhbWAgYW5kIGBTdGF0aWNNYXBSZWR1Y2VgIHdoaWNoIHNpbXBseSByZXR1cm4gYHRoaXNgIG9uIGBjbG9uZSgpYC4KKyogYFZlcnRleFByb2dyYW1gIGFuZCBgTWFwUmVkdWNlYCBub3cgaW1wbGVtZW50IGBDbG9uZWFibGVgIGFuZCBpcyB1c2VkIGZvciBmYXN0IGNvcHlpbmcgYWNyb3NzIHdvcmtlcnMgd2l0aGluIHRoZSBzYW1lIG1hY2hpbmUuCisqIEFkZGVkIGBUcmF2ZXJzYWxIb2xkZXJgIGludGVyZmFjZSB3aGljaCBleHRlbmRzIGBQYXRoQ29uc3VtZXJgIHRvIGRldGVybWluZSByZWN1cnNpdmVseSBpZiBuZXN0ZWQgdHJhdmVyc2FscyByZXF1aXJlIHBhdGggY2FsY3VsYXRpb25zIHR1cm5lZCBvbi4KKyogUmV3b3JrZWQgaG93IGEgYFRyYXZlcnNlckdlbmVyYXRvcmAgaXMgcmV0cmlldmVkIGFuZCB1dGlsaXplZC4KKyogQWRkZWQgYFRyYXZlcnNhbC50b0J1bGtTZXQoKWAgdG8gbWFrZSBnZXR0aW5nIHJlc3VsdGFudCBkYXRhIG1vcmUgZWZmaWNpZW50bHkgZm9yIHRyYXZlcnNhbHMgd2l0aCByZXBlYXRlZCBkYXRhLgorKiBQcm92aWRlZCBhIGhlbHBlciBgTG9jYWxTdGVwLmlzTG9jYWxTdGFyR3JhcGgoKWAgc28gYEdyYXBoQ29tcHV0ZXJgIGltcGxlbWVudGVycyBrbm93IHRoZSByZXF1aXNpdGUgZGF0YSBib3VuZGFyaWVzLgorKiBDcmVhdGVkIGBUcmF2ZXJzYWwuQWRtaW5gIHRvIGhpZGUgYWRtaW5pc3RyYXRpdmUgbWV0aG9kcy4gQWRkZWQgYFRyYXZlcnNhbC5hc0FkbWluKClgIHRvIGdldCBhdCBgVHJhdmVyc2FsLkFkbWluYC4KKyogRml4ZWQgdXAgYWxsIGBTdGVwYCBjbG9uaW5nIG9wZXJhdGlvbnMgcmVhbGl6aW5nIHRoYXQgSmF2YTggbGFtYmRhcyBhcmUgYWx3YXlzIGJvdW5kIHRvIHRoZSBjYWxsaW5nIGNsYXNzIChubyBkZWxlZ2F0ZXMpLgorKiBVc2FnZSBvZiBgOnJlbW90ZSBjbG9zZWAgd2l0aG91dCBjb25maWd1cmVkIHJlbW90ZXMgc2hvd3MgYSByZWFzb25hYmxlIG1lc3NhZ2UgcmF0aGVyIHRoYW4gYSBzdGFjayB0cmFjZS4KKyogUHJvdmlkZWQgYExvY2FsU3RlcGAgdG8gc2lnbmlmeSB0aGF0IHRoZSBpbnRlcm5hbCB0cmF2ZXJzYWwgaXMgbG9jYWxseSBib3VuZCB0byB0aGUgaW5jb21pbmcgb2JqZWN0LgorKiBGYWlsZWQgc2NyaXB0IGV2YWx1YXRpb24gaW4gR3JlbWxpbiBTZXJ2ZXIgbm93IHRyaWdnZXJzIHRoZSBjYW5jZWwgb2YgdGhlIHByb2Nlc3MgYXR0ZW1wdGluZyB0byB0aW1lb3V0IHRoZSBzY3JpcHQgaWYgaXQgd2VyZSB0byBydW4gdG9vIGxvbmcuCisqIEdyZWF0bHkgaW5jcmVhc2VkIHRoZSBzcGVlZCBvZiBgU2NyaXB0RW5naW5lTGFtYmRhYCBieSBtYWtpbmcgdXNlIG9mIGEgc3RhdGljIGBTY3JpcHRFbmdpbmVgIGNhY2hlLgorKiBGaXhlZCBhIGdlbmVyYWwgYnVnIGluIGFsbCBzaWRlRWZmZWN0IHVzaW5nIHN0ZXBzIHdoZXJlIHRoZSBzaWRlRWZmZWN0IHNob3VsZCBiZSBhY2Nlc3NlZCB2aWEgdGhlIGBUcmF2ZXJzZXJgIG5vdCBgVHJhdmVyc2FsYC4KKyogYEdyZW1saW5QbHVnaW5gIGludGVyZmFjZSBubyBsb25nZXIgaGFzIHRoZSBgYWRkaXRpb25hbERlcGVuZGVuY2llc2AgbWV0aG9kIC0gdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBub3cgZGVmaW5lZCBieSBhbiBlbnRyeSBpbiB0aGUgbWFuaWZlc3QgZmlsZSBmb3IgdGhlIGphciBjYWxsZWQgYEdyZW1saW4tUGx1Z2luLURlcGVuZGVuY2llc2AuCisqIEFkZGVkIGBUaW5rZXJXb3JrZXJQb29sYCB3aGljaCBpcyB1c2VkIGZvciByZXNvdXJjZSBlZmZpY2llbnQgdGhyZWFkaW5nIGluIGBUaW5rZXJHcmFwaENvbXB1dGVyYC4KKyogYE1hcFJlZHVjZS5jcmVhdGVNYXBSZWR1Y2UoQ29uZmlndXJhdGlvbilgIG5vdyBleGlzdHMgYW5kIHNlcnZlcyB0aGUgc2FtZSBwdXJwb3NlIGFzIGBWZXJ0ZXhQcm9ncmFtLmNyZWF0ZVZlcnRleFByb2dyYW0oQ29uZmlndXJhdGlvbilgLgorKiBFbmFibGVkIFNlc3Npb25PcHMgdG8gYmUgZXh0ZW5kZWQuIEFkZGVkIGV2YWwgaGFuZGxlciBob29rLgorKiBTZXR0aW5nIGEgcHJvcGVydHkgd2l0aCBhbiB1bnN1cHBvcnRlZCBkYXRhIHR5cGUgdGhyb3cgYElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbmAgaW5zdGVhZCBvZiBgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb25gIGFzIHRoZSBvcGVyYXRpb24gaXMgc3VwcG9ydGVkLCBidXQgdGhlIGFyZ3VtZW50IGlzIG5vdC4KKworW1tyZWxlYXNlLTMtMC0wLW02XV0KKz09PSBUaW5rZXJQb3AgMy4wLjAuTTYgKFJlbGVhc2UgRGF0ZTogRGVjZW1iZXIgMiwgMjAxNCkKKworKiBgamF2YXR1cGxlcy5QYWlyYCBhdm9pZGVkIG9uIGBNYXBSZWR1Y2VgIEFQSSBpbiBmYXZvciBvZiBhIG5ldyBgS2V5VmFsdWVgIGNsYXNzLgorKiBSZW5hbWVkIGBHcmVtbGluLVBsdWdpbmAgbWFuaWZlc3QgZW50cnkgZm9yIHBsdWdpbnMgdG8gYEdyZW1saW4tUGx1Z2luLVBhdGhzYC4KKyogQWRkZWQgYEdyZW1saW4tUGx1Z2luLURlcGVuZGVuY2llc2AgbWFuaWZlc3QgZW50cnkgdG8gbGlzdCBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgYmUgcmV0cmlldmVkIHdpdGggYSBwbHVnaW4gamFyLgorKiBgTWVtb3J5LkFkbWluLmFzSW1tdXRhYmxlKClgIHlpZWxkcyBhbiBpbW11dGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIEdyYXBoQ29tcHV0ZXIgYE1lbW9yeWAuCisqIEZpeGVkIGhvc3Qgc2VsZWN0aW9uIGluIGBncmVtbGluLWRyaXZlcmAgYnkgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgYWxsIGhvc3RzIGJlaW5nIG1hcmtlZCB1bmF2YWlsYWJsZSBhdCB0aGUgaW5zdGFudGlhdGlvbiBvZiBhIGBDbGllbnRgLgorKiBSZW1vdmVkIEdpcmFwaC1HcmVtbGluIGluIGZhdm9yIG9mIG5ldyBIYWRvb3AtR3JlbWxpbiB3aXRoIGBHaXJhcGhHcmFwaENvbXB1dGVyYCBzdXBwb3J0LiBGdXR1cmUgc3VwcG9ydCBmb3IgYE1hcFJlZHVjZUdyYXBoQ29tcHV0ZXJgLgorKiBHcmVhdGx5IHNpbXBsaWZpZWQgdGhlIGBJbnB1dEZvcm1hdGAgYW5kIGBPdXRwdXRGb3JtYXRgIG1vZGVsIGZvciB3b3JraW5nIHdpdGggR2lyYXBoIChhbmQgSGFkb29wKS4KKyogQWRkZWQgYSBzZXJpYWxpemVyIGZvciBgUHJvcGVydHlgIGZvciBHcmFwaFNPTiBjb3JyZWN0aW5nIGZvcm1hdCBvZiBzZXJpYWxpemF0aW9uIG9mIGEgc2luZ2xlIGBQcm9wZXJ0eWAgb24gYW4gYEVkZ2VgLgorKiBGaXhlZCBidWcgaW4gR3JlbWxpbiBDb25zb2xlIHRoYXQgcHJldmVudGVkIGFzc2lnbm1lbnRzIHRvIGVtcHR5IGBMaXN0YCBvYmplY3RzLgorKiBBZGRlZCBgVmVydGV4UHJvZ3JhbS5nZXRNZXNzYWdlU2NvcGVzKClgIHRvIGFsbG93IHZlbmRvcnMgdG8ga25vdyB3aGljaCBgTWVzc2FnZVNjb3Blc2AgYXQgYSBwYXJ0aWN1bGFyIGBNZW1vcnlgIHN0YXRlLgorKiBSZWR1Y2VkIHRoZSBudW1iZXIgb2YgbWV0aG9kcyBpbiBgTWVzc2FnZVNjb3BlLkxvY2FsYCBhcyBpdHMgdXAgdG8gdmVuZG9ycyB0byBpbnNwZWN0IHByb3ZpZGVkIGluY2lkZW50IGBUcmF2ZXJzYWxgIGFjY29yZGluZ2x5LgorKiBSZW5hbWVkIGBNZXNzYWdlc1R5cGVgIHRvIGBNZXNzYWdlU2NvcGVgIHRvIG1ha2UgaXQgbGVzcyBhbWJpZ3VvdXMgcmVnYXJkaW5nIHRoZSBjbGFzcyBvZiB0aGUgbWVzc2FnZXMgYmVpbmcgc2VudC4KKyogQ2hhbmdlZCB0aGUgbWVzc2FnZSB0eXBlIG9mIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCB0byBgVHJhdmVyc2VyU2V0YCB0byBzdXBwb3J0IG1lc3NhZ2UgY29tYmluaW5nLgorKiBBZGRlZCBgVmVydGV4UHJvZ3JhbS5nZXRNZXNzYWdlQ29tYmluZXIoKWAgdG8gc3VwcG9ydCB0aGUgY29tYmluaW5nIG9mIG1lc3NhZ2VzIGluIHJvdXRlIHRvIGEgdmVydGV4LgorKiBSZWR1Y2VkIG9iamVjdCBjcmVhdGlvbiBpbiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgYXJvdW5kIHZlcnRleC1sb2NhbCB0cmF2ZXJzYWwgc2lkZUVmZmVjdHMuCisqIFJlbmFtZWQgYFRyYXZlcnNlci5BZG1pbi5tYWtlQ2hpbGQoKWAgYW5kIGBUcmF2ZXJzZXIuQWRtaW4ubWFrZVNpYmxpbmcoKWAgdG8gYFRyYXZlcnNlci5BZG1pbi5zcGxpdCgpYCB0byBjb3JyZXNwb25kIHdpdGggYG1lcmdlKClgLgorKiBBZGRlZCBgVHJhdmVyc2VyLkFkbWluLm1lcmdlKFRyYXZlcnNlcilgIG1ldGhvZCBzbyB0aGF0IHRoZSBtZXJnaW5nIGFsZ29yaXRobSBpcyB3aXRoIHRoZSBgVHJhdmVyc2VyYC4KKyogQWRkZWQgYE9wZXJhdG9yYCBlbnVtIHRoYXQgY29udGFpbnMgc2Fjay1oZWxwZnVsIGBCaW5hcnlPcGVyYXRvcnNgOiBzdW0sIG1pbnVzLCBtdWx0LCBkaXYsIG1heCwgbWluLCBldGMuCisqIEFkZGVkIGBHcmFwaFRyYXZlcnNhbC53aXRoU2FjaygpYCBhbmQgcmVuYW1lZCBgdHJhY2tQYXRocygpYCBhbmQgYHdpdGgoKWAgdG8gYHdpdGhQYXRoKClgIGFuZCBgd2l0aFNpZGVFZmZlY3QoKWAsIHJlc3BlY3RpdmVseS4KKyogQWRkZWQgdGhlICJHcmVtbGluIFNhY2tzIiBmZWF0dXJlIHRvIGFsbG93IGEgYFRyYXZlcnNlcmAgdG8gY2FycnkgbG9jYWwgaW5mb3JtYXRpb24gYWxvbmcgaXRzIHdhbGsuCisqIEdyYXBoU09OIGZvcm1hdCBubyBsb25nZXIgbWFrZXMgdXNlIG9mIGBoaWRkZW5zYCBKU09OIGtleS4gSXRzIGFsbCBqdXN0IGBwcm9wZXJ0aWVzYC4KKyogQWRkZWQgYERvdWJsZUl0ZXJhdG9yYCB0byBtYWtlIHZlbmRvciBpbXBsZW1lbnRhdGlvbnMgb2YgYEVkZ2UuaXRlcmF0b3JzKCkudmVydGV4SXRlcmF0b3IoKWAgZWZmaWNpZW50LgorKiBgUHJvcGVydGllc1N0ZXBgIGlzIHNtYXJ0IGFib3V0IGhpZGRlbnMgdnMuIHByb3BlcnRpZXMuCisqIGBFbGVtZW50Lml0ZXJhdG9ycygpLmhpZGRlblByb3BlcnRpZXMoKWAgbm8gbG9uZ2VyIGV4aXN0cy4gRm9yIHZlbmRvcnMsIHNpbXBseSBwcm92aWRlIGFuIGl0ZXJhdG9yIG9mIHByb3BlcnRpZXMuCisqIGBHSVJBUEhfR1JFTUxJTl9MSUJTYCBzdXBwb3J0cyBjb2xvbiBzZXBhcmF0ZWQgZGlyZWN0b3JpZXMgZm9yIGxvYWRpbmcgamFycyBmcm9tIG11bHRpcGxlIHBhdGhzLgorKiBJbnRyb2R1Y2VkIG1ldGhvZCB0byBjb250cm9sIHRoZSBsb2NhdGlvbiBvZiBkZXBlbmRlbmNpZXMgZHluYW1pY2FsbHkgbG9hZGVkIHRvIHRoZSBHcmVtbGluIENvbnNvbGUgYXMgcGFydCBvZiB0aGUgYDppbnN0YWxsYCBjb21tYW5kLgorKiBGaXhlZCBwcm9ibGVtIHdpdGggdGhlIE5lbzRqIEdyZW1saW4gUGx1Z2luIG5vdCBsb2FkaW5nIHByb3Blcmx5IGFmdGVyIEdyZW1saW4gQ29uc29sZSByZXN0YXJ0LgorKiBSZW1vdmVkIHRoZSAidXNlIiBjb25maWd1cmF0aW9uIGZyb20gR3JlbWxpbiBTZXJ2ZXIuCisqIE1vdmVkIGBTdWdhckdyZW1saW5QbHVnaW5gIGZyb20gYGdyZW1saW4tY29uc29sZWAgdG8gYGdyZW1saW4tZ3Jvb3Z5YCBzbyB0aGF0IGl0IGNvdWxkIGJlIHNoYXJlZCB3aXRoIEdyZW1saW4gU2VydmVyLgorKiBGaXhlZCBidWcgaW4gc2VyaWFsaXphdGlvbiBvZiBgbnVsbGAgcmVzdWx0cyByZXR1cm5lZCB0byB0aGUgR3JlbWxpbiBDb25zb2xlIHdoZW4gc2VyaWFsaXppbmcgdG8gc3RyaW5ncy4KKyogTW92ZWQgdGhlIGBHcmVtbGluUGx1Z2luYCBmb3IgYFRpbmtlckdyYXBoYCB0byBgdGlua2VyZ3JhcGgtZ3JlbWxpbmAgbW9kdWxlIChpdCBpcyBubyBsb25nZXIgaW4gYGdyZW1saW4tY29uc29sZWApLgorKiBBZGRlZCBhIGBwbHVnaW4taW5mby50eHRgIGZpbGUgdG8gR3JlbWxpbiBDb25zb2xlIGAvZXh0L3ttb2R1bGV9YCBzdWJkaXJlY3RvcmllcyB0byBpZGVudGlmeSB0aGUgbW9kdWxlIHRoYXQgd2FzIG9yaWdpbmFsbHkgcmVxdWVzdGVkLgorKiBHcmVtbGluIFNlcnZlciBub3cgYWxsb3dzIGZvciB0aGUgZXhwbGljaXQgY29uZmlndXJhdGlvbiBvZiBwbHVnaW4gYWN0aXZhdGlvbi4KKyogUmVmYWN0b3JlZCBgR3JlbWxpblBsdWdpbmAgYW5kIGBBYnN0cmFjdEdyZW1saW5QbHVnaW5gIHRvIGJldHRlciBhY2NvdW50IGZvciBwbHVnaW5zIHRoYXQgcnVuIG9uIHRoZSBzZXJ2ZXIgYW5kIHRob3NlIHRoYXQgcnVuIGluIHRoZSBjb25zb2xlLgorKiBBZGRlZCBhIGBwbHVnaW5zYCBjb25maWd1cmF0aW9uIHRvIEdyZW1saW4gU2VydmVyIHRvIGNvbnRyb2wgdGhlIHBsdWdpbnMgdGhhdCBhcmUgZW5hYmxlZCBvbiBpbml0aWFsaXphdGlvbi4KKyogQWRkZWQgYSBidWlsZGVyIG9wdGlvbiB0byBgR3JlbWxpbkV4ZWN1dG9yYCB0byBjb250cm9sIHRoZSBwbHVnaW5zIHRoYXQgYXJlIGVuYWJsZWQgb24gaW5pdGlhbGl6YXRpb24uCisqIEFkZGVkIGBSZW1vdGVFeGNlcHRpb25gIGZvciB1c2FnZSB3aXRoIGBSZW1vdGVBY2NlcHRvcmAgaW1wbGVtZW50YXRpb25zIGZvciB0aGUgR3JlbWxpbiBDb25zb2xlIHNvIGFzIHRvIGJldHRlciBzdGFuZGFyZGl6ZSB0aGVpciBkZXZlbG9wbWVudC4KKyogU3RhbmRhcmRpemVkIGFsbCB0ZXh0IGJlaW5nIHdyaXR0ZW4gdG8gdGhlIEdyZW1saW4gQ29uc29sZSB1c2luZyBzdGFydGluZyB1cHBlciBjYXNlIGxldHRlci4KKyogUHJldmVudGVkIGVycm9yIGluIHRoZSBDb25zb2xlIHdoZW4gYDpzdWJtaXRgIGlzIGNhbGxlZCBidXQgbm8gcmVtb3RlcyB3ZXJlIGNvbmZpZ3VyZWQuCisqIFByb3ZpZGVkIGEgd2F5IHRvIGNsZWFuIHRoZSBgZ3JhcGVzYCBkaXJlY3RvcnkgYXMgcGFydCBvZiBhIHN0YW5kYXJkIGJ1aWxkIHdpdGggYG12biBjbGVhbiBpbnN0YWxsYC4KKworW1tyZWxlYXNlLTMtMC0wLW01XV0KKz09PSBUaW5rZXJQb3AgMy4wLjAuTTUgKFJlbGVhc2UgRGF0ZTogTm92ZW1iZXIgNywgMjAxNCkKKworKiBSZW1vdmVkIGBQcm9wZXJ0eUZpbHRlckl0ZXJhdG9yYCBhcyB1c2luZyBKYXZhOCBzdHJlYW1zIHdhcyBqdXN0IGFzIGVmZmljaWVudCBmb3IgdGhlIHVzZSBjYXNlLgorKiBSZW5hbWVkIGBLcnlvV3JpdGFibGVgIHRvIGBHcmVtbGluV3JpdGFibGVgIGFzIGl0IGlzIG5vdCBuZWNlc3NhcmlseSBLcnlvIHRoYXQgaXMgdGhlIHNlcmlhbGl6YXRpb24gbWVjaGFuaXNtLgorKiBGaXhlZCBhbiBpbnB1dCBzcGxpdCBidWcgaW4gR2lyYXBoIHRoYXQgd2FzIG1ha2luZyBpdCBzbyB0aGF0IHNwbGl0cyB3ZXJlIG5vdCBhbHdheXMgYXQgdmVydGV4IGJvdW5kYXJpZXMuCisqIEZpeGVkIGEgY29tYmluZXIgYnVnIGluIGBHaXJhcEdyYXBoQ29tcHV0ZXJgLiBDb21iaW5lcnMgd2VyZSBhbHdheXMgY2FsbGluZyBgTWFwUmVkdWNlLnJlZHVjZSgpYCwgbm90IGBNYXBSZWR1Y2UuY29tYmluZSgpYC4KKyogR3JlYXRseSBzaW1wbGlmaWVkIGBTdWJncmFwaFN0cmF0ZWd5YCBieSByZW1vdmluZyByZXF1aXJlbWVudHMgZm9yIGBUcmF2ZXJzYWxgIGludHJvc3BlY3Rpb24uCisqIGBTdHJhdGVneVdyYXBwZWRHcmFwaGAgbWltaWNzIHZlbmRvciB1c2Ugb2YgYEdyYXBoU3RlcGAgYW5kIGBHcmFwaFRyYXZlcnNhbGAgYW5kIG5vIGxvbmdlciByZXF1aXJlcyBkeW5hbWljIHN0cmF0ZWd5IGFwcGxpY2F0aW9uLgorKiBgVHJhdmVyc2FsU3RyYXRlZ2llc2AgbWFrZSB1c2Ugb2YgYSBkZXBlbmRlbmN5IHRyZWUgc29ydGluZyBhbGdvcml0aG0gdG8gZW5zdXJlIHByb3BlciBzb3J0cyBwcmlvciB0byBhcHBsaWNhdGlvbi4KKyogYFRyYXZlcnNhbFN0cmF0ZWdpZXNgIGFyZSBub3cgaW1tdXRhYmxlIGFuZCBhcmUgYm91bmQgdG8gdGhlIGBUcmF2ZXJzYWxgIGNsYXNzLgorKiBGaXhlZCBidWcgaW4gR2VwaGkgUGx1Z2luIHRoYXQgcHJldmVudGVkIGl0IGZyb20gY29tbXVuaWNhdGluZyB3aXRoIHRoZSBHZXBoaSBTdHJlYW1pbmcgU2VydmVyLgorKiBSZW5hbWVkIGBNZXNzYWdlVHlwZS5YWFgudG8oKWAgdG8gYE1lc3NhZ2VUeXBlLlhYWC5vZigpYCBzbyBpdCBtYWtlcyBzZW5zZSBpbiBib3RoIHRoZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgY29udGV4dC4KKyogSW1wcm92ZWQgbWVzc2FnaW5nIHdpdGggcmVzcGVjdCB0byB0ZXN0cyB0aGF0IGFyZSBpZ25vcmVkIGR1ZSB0byBmZWF0dXJlcyB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhvc2UgdGVzdHMgYXJlIG5vdCBpbiBlcnJvci4KKyogUmVsYXhlZCBleGNlcHRpb24gY29uc2lzdGVuY3kgY2hlY2tzIGluIHRoZSB0ZXN0IHN1aXRlIHRvIG9ubHkgY2hlY2sgdGhhdCBhIHRocm93biBleGNlcHRpb24gZnJvbSBhbiBpbXBsZW1lbnRhdGlvbiBleHRlbmRzIHRoZSBleHBlY3RlZCBleGNlcHRpb24gY2xhc3MgKGJ1dCBubyBsb25nZXIgdmFsaWRhdGVzIHRoYXQgaXQgaXMgdGhlIGV4YWN0IGNsYXNzIG9yIHRoYXQgdGhlIG1lc3NhZ2UgdGV4dCkuCisqIGBWZXJ0ZXhQcm9ncmFtYCBub3cgaGFzIGB3b3JrZXJJdGVyYXRpb25TdGFydCgpYCBhbmQgYHdvcmtlckl0ZXJhdGlvbkVuZCgpYCB0byBhbGxvdyBkZXZlbG9wZXJzIHRvIGNvbnRyb2wgdmVydGV4IHNwbGl0IHN0YXRpYyBkYXRhIHN0cnVjdHVyZXMuCisqIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCBzdGFydHVwIHRpbWUgZ3JlYXRseSByZWR1Y2VkIGR1ZSB0byBiZWluZyBzbWFydCBhYm91dCBgbG9hZFN0YXRlKClgIGJlaGF2aW9yLgorKiBHcmVtbGluIFNlcnZlciBzZXNzaW9ucyBub3cgYWxsb3cgc2VyaWFsaXphdGlvbiBvZiByZXN1bHRzIHRoYXQgd2VyZSBwYXJ0IG9mIGFuIG9wZW4gdHJhbnNhY3Rpb24uCisqIFJlZmFjdG9yIGBPcFByb2Nlc3NvcnNgIGltcGxlbWVudGF0aW9ucyBpbiBHcmVtbGluIFNlcnZlciBmb3IgYmV0dGVyIHJldXNhYmlsaXR5LgorKiBgVmVydGV4Lml0ZXJhdG9ycygpYCBubyBsb25nZXIgaGF2ZSBhIGBicmFuY2hGYWN0b3JgLiBUaGlzIGlzIG5vdyBhdCB0aGUgcXVlcnkgbGFuZ3VhZ2UgbGV2ZWwgd2l0aCBgbG9jYWxMaW1pdCgpYC4KKyogQWRkZWQgYGxpbWl0KGxvbmcpYCBhbmQgYGxvY2FsTGltaXQoaW50LGludClgIHdoaWNoIHNpbXBseSBjYWxsIHRoZSByYW5nZSBlcXVpdmFsZW50cyB3aXRoIDAgYXMgdGhlIGxvdy4KKyogQWRkZWQgYExvY2FsUmFuZ2VTdGVwYCB3aGljaCBzdXBwb3J0cyByYW5naW5nIHRoZSBlZGdlcyBhbmQgcHJvcGVydGllcyBvZiBhbiBlbGVtZW50IC0tIGBsb2NhbFJhbmdlKGludCxpbnQpYC4KKyogYEdyYXBoVHJhdmVyc2FsLnZhbHVlKFN0cmluZylgIG5vIGxvbmdlciBleGlzdHMuIEluc3RlYWQsIHVzZSBgR3JhcGhUcmF2ZXJzYWwudmFsdWVzKFN0cmluZylgLgorKiBgSGlkZGVuWFhYU3RlcGAgYW5kIGBWYWx1ZVhYWFN0ZXBgIG5vIGxvbmdlciBleGlzdC4gYFByb3BlcnR5WFhYU3RlcGAgdGFrZXMgYSBgUHJvcGVydHlUeXBlYCB0byBkZW5vdGUgdmFsdWUgYW5kIGhpZGRlbiBhY2Nlc3MuCisqIEFkZGVkIGBQcm9wZXJ0eVR5cGVgIHRvIHRoZSBzdHJ1Y3R1cmUtcGFja2FnZSB3aGljaCBwcm92aWRlIG1hcmtlcnMgZm9yIGRlbm90aW5nIHByb3BlcnR5IHR5cGVzICh2cy4gcHJvcGVydHkgY2xhc3NlcykuCisqIFJlbmFtZWQgYHNldFdvcmtpbmdEaXJlY3RvcnlgIHRvIGB3b3JraW5nRGlyZWN0b3J5YCBpbiB0aGUgYEtyeW9SZWFkZXJgIGJ1aWxkZXIuCisqIGBQYXRoLmdldChTdHJpbmcpYCByZXR1cm5zIHRoZSBvYmplY3QgaWYgb25seSBvbmUgb2JqZWN0IGlzIHJlZmVyZW5jZWQgYnkgbGFiZWwsIGVsc2UgaXQgcmV0dXJucyBhIGBMaXN0YCBvZiByZWZlcmVuY2VkIG9iamVjdHMuCisqIEFkZGVkIG92ZXJsb2FkIHRvIGBHcmVtbGluS3J5b2AgdG8gYWxsb3cgYSBzZXJpYWxpemVyIHRvIGJlIGNvbmZpZ3VyZWQgYXMgYSBgRnVuY3Rpb248S3J5byxTZXJpYWxpemVyPmAgdG8gYWxsb3cgYmV0dGVyIGZsZXhpYmlsaXR5IGluIHNlcmlhbGl6ZXIgY3JlYXRpb24uCisqIEFkZGVkIG1ldGhvZCB0byBgR3JhcGhQcm92aWRlcmAgdG8gYWxsb3cgaW1wbGVtZW50ZXJzIHRvIHByb3ZpZGUgYSBtZWNoYW5pc20gdG8gY29udmVydCBHcmFwaFNPTiBzZXJpYWxpemVkIGlkZW50aWZpZXJzIGJhY2sgdG8gY3VzdG9tIGlkZW50aWZpZXJzIGFzIG5lZWRlZC4KKyogQWRkZWQgbWV0aG9kcyB0byBgR3JhcGhQcm92aWRlcmAgc28gdGhhdCBpbXBsZW1lbnRlcnMgY291bGQgc3BlY2lmeSBhIGN1c3RvbSBidWlsdCBgR3JlbWxpbktyeW9gIGNsYXNzIGFuZC9vciBgU2ltcGxlTW9kdWxlYCBjbGFzcyBpbiBjYXNlIHRoZWlyIGltcGxlbWVudGF0aW9uIGhhZCBjdXN0b20gY2xhc3NlcyB0byBiZSBzZXJpYWxpemVkLgorKiBBZGRlZCBgVHJhdmVyc2FsLmZvckVhY2hSZW1haW5pbmcoY2xhc3MsY29uc3VtZXIpYCBmb3IgdGhvc2UgdHJhdmVyc2FscyB3aG9zZSBlbmQgdHlwZSBpcyBkaWZmZXJlbnQgZnJvbSBkZWNsYXJlZCBkdWUgdG8gc3RyYXRlZ3kgcmV3cml0aW5nLgorKiBSZW1vdmVkIGBUcmF2ZXJzYWwuZm9yRWFjaCgpYCBhcyB0cmF2ZXJzYWwgaW1wbGVtZW50cyBgSXRlcmF0b3JgIGFuZCB1c2VycyBzaG91bGQgdXNlIGBmb3JFYWNoUmVtYWluaW5nKClgLgorKiBgUmFuZ2VTdGVwYCBub3cgaGFzIGFuIGluY2x1c2l2ZSBsb3cgYW5kIGFuIGV4Y2x1c2l2ZSBoaWdoIC0tIGEgY2hhbmdlIGZyb20gR3JlbWxpbjIuCisqIGBEcml2ZXJHcmVtbGluUGx1Z2luYCByZXR1cm5zIHJhdyByZXN1bHRzIHdpdGggZHJpdmVyIHJlc3VsdHMgYXZhaWxhYmxlIHZpYSB0aGUgYHJlc3VsdGAgdmFyaWFibGUuCisqIFJlbW92ZWQgdGVzdCBlbmZvcmNlbWVudCBvZiBgcHJpdmF0ZWAgY29uc3RydWN0b3IgZm9yIGEgYEdyYXBoYCBpbnN0YW5jZS4KKyogYFJlbW90ZUFjY2VwdG9yYCBub3cgc3VwcG9ydHMgYEBgIHByZWZpeGVkIGxpbmVzIHRoYXQgd2lsbCBncmFiIHRoZSBzY3JpcHQgc3RyaW5nIGZyb20gdGhlIEdyZW1saW4gQ29uc29sZSBzaGVsbC4KKyogTW9kaWZpZWQgdGhlIHNpZ25hdHVyZSBvZiBgUHJvcGVydHkuZWxlbWVudCgpYCB0byBzaW1wbHkgcmV0dXJuIGBFbGVtZW50YAorKiBBZGRlZCBgUmVkdWNpbmdgIG1hcmtlciBhbmQgYFJlZHVjaW5nU3RyYXRlZ3lgIHdoaWNoIHN1cHBvcnRzIHJlZHVjdGlvbi1mdW5jdGlvbnMgYXMgYSBmaW5hbCBzdGVwIGluIEdyZW1saW4gT0xBUCAoZS5nLiBgZm9sZCgpYCkuCisqIE9uY2Ugc3RyYXRlZ2llcyBhcmUgYGNvbXBsZXRlKClgLCBubyBtb3JlIHN0ZXBzIGNhbiBiZSBhZGRlZCB0byBhIGBUcmF2ZXJzYWxgLgorKiBSZW5hbWVkIGBUcmF2ZXJzYWwuc3RyYXRlZ2llcygpYCB0byBgVHJhdmVyc2FsLmdldFN0cmF0ZWdpZXMoKWAgYXMgaXQgaXMgbm90IGEgInF1ZXJ5IGxhbmd1YWdlIi1tZXRob2QuCisqIEFkZGVkIHRlc3QgdG8gZW5mb3JjZSB0aGF0IGEgYGxhYmVsYCBvbiBhIGBWZXJ0ZXhQcm9wZXJ0eWAgaXMgYWx3YXlzIHNldCB0byB0aGUga2V5IG9mIHRoZSBvd25pbmcgcHJvcGVydHkuCisqIEZpeGVkIGJ1ZyB3aXRoIG11bHRpLXByb3BlcnR5IHJlbW92YWwgaW4gYE5lbzRqR3JhcGhgLgorKiBCdW1wZWQgdG8gTmVvNGogMi4xLjUuCisqIFVzZWQgc3RhbmRhcmQgYFVVSURTZXJpYWxpemVyYCBmcm9tIHRoZSBga3J5by1zZXJpYWxpemVyc2AgbGlicmFyeSBmb3Igc2VyaWFsaXphdGlvbiBvZiBgVVVJRGAgb2JqZWN0cy4KKyogQ2hhbmdlZCBHcmFwaFNPTiBzZXJpYWxpemF0aW9uIHRvIG9ubHkgdXNlIGBpdGVyYXRvcnMoKWAgLSB0aGVyZSB3ZXJlIHN0aWxsIHJlbW5hbnRzIG9mIGBUcmF2ZXJzYWxgIHVzYWdlIGZyb20gcHJldmlvdXMgcmVmYWN0b3JpbmcuCisqIEFkZGVkIG92ZXJsb2FkIGZvciBgZGV0YWNoYCBtZXRob2QgdG8gYWxsb3cgZm9yIHRoZSBgRWxlbWVudGAgdG8gYmUgZGV0YWNoZWQgYXMgYSAicmVmZXJlbmNlIiBvbmx5IChpLmUuIHdpdGhvdXQgcHJvcGVydGllcykuCisqIFJlbmFtZWQgYEl0ZW1gIGluIGBncmVtbGluLWRyaXZlcmAgdG8gYFJlc3VsdGAuCisqIFJlbmFtZWQgYHN0cmF0ZWd5YCB0byBgZ2V0U3RyYXRlZ3lgIGluIGBTdHJhdGVneVdyYXBwZWRHcmFwaGAuCisqIFJlbmFtZWQgYGJhc2VHcmFwaGAgdG8gYGdldEJhc2VHcmFwaGAgaW4gYE5lbzRqR3JhcGhgLgorKiBgTmVvNGpHcmFwaGAgbm93IHJldHVybnMgYW4gZW1wdHkgcHJvcGVydHkgYFZlcnRleC5wcm9wZXJ0eShrKWAgd2hlbiB0aGUga2V5IGlzIG5vbi1leGlzdGVudCAoYSBwcm9ibGVtIG9ubHkgdmlzaWJsZSB3aGVuIG1ldGEvbXVsdGkgcHJvcGVydHkgY29uZmlndXJhdGlvbiB3YXMgdHVybmVkIG9mZikuCisqIGBUcmF2ZXJzYWwuU3RyYXRlZ2llcy5hcHBseSgpYCBub3cgdGFrZXMgYSBgVHJhdmVyc2FsRW5naW5lYC4gR3JlYXRseSBzaW1wbGlmaWVzIHN0cmF0ZWd5IGFwcGxpY2F0aW9uIGZvciBgU1RBTkRBUkRgIG9yIGBDT01QVVRFUmAuCisqIFJlbmFtZWQgYElkZW50aXR5UmVkdWN0aW9uU3RyYXRlZ3lgIHRvIGBJZGVudGl0eVJlbW92YWxTdHJhdGVneWAgZm9yIHJlYXNvbnMgb2YgY2xhcml0eS4KKyogQWRkZWQgYENvbXBhcmluZ1JlbW92YWxTdHJhdGVneWAgdGhhdCByZW1vdmVzIGBDb21wYXJpbmdgLW1hcmtlZCBzdGVwcyB1bmxlc3MgdGhleSBhcmUgdGhlIGVuZCBzdGVwIG9mIHRoZSB0cmF2ZXJzYWwuCisqIGBPcmRlclN0ZXBgIG5vdyB3b3JrcyBpbiBPTEFQLCBidXQgb25seSBtYWtlcyBzZW5zZSBhcyBhIHRyYXZlcnNhbCBlbmQgc3RlcC4KKyogYE1hcFJlZHVjZWAgQVBJIGV4dGVuZGVkIHRvIGluY2x1ZGUgYGdldE1hcEtleVNvcnQoKWAgYW5kIGBnZXRSZWR1Y2VLZXlTb3J0KClgIHRvIHNvcnQgb3V0cHV0cyBhY2NvcmRpbmdseS4KKyogUmVuYW1lZCBgVHJhdmVyc2FsUmVzdWx0TWFwUmVkdWNlYCB0byBgVHJhdmVyc2VyTWFwUmVkdWNlYC4gU2hvcnRlciBhbmQgbWFrZXMgbW9yZSBzZW5zZS4KKyogSW1wcm92ZWQgYnVpbGQgYXV0b21hdGlvbiB0byBwYWNrYWdlIGphdmFkb2NzIGFuZCBhc2NpaWRvYyBkb2N1bWVudGF0aW9uIGluIHRoZSBkaXN0cmlidXRpb24gZmlsZXMuCisqIEltcHJvdmVkIGJ1aWxkIGF1dG9tYXRpb24gd2l0aCBhIHNjcmlwdCB0byBhdXRvbWF0aWNhbGx5IGJ1bXAgcmVsZWFzZSB2ZXJzaW9ucyBpbiB0aGUgdmFyaW91cyBmaWxlcyB0aGF0IG5lZWRlZCBpdCBzdWNoIGFzIHRoZSBgcG9tLnhtbGAgZmlsZXMuCisqIFRoZSBpZGVudGlmaWVyIG9uIGBWZXJ0ZXhQcm9wZXJ0eWAgaXMgbm93IHJlYWQgcHJvcGVybHkgdG8gdGhvc2UgZ3JhcGhzIHRoYXQgY2FuIHN1cHBvcnQgaWRlbnRpZmllciBhc3NpZ25tZW50LgorKiBgR3JhcGhTT05SZWFkZXIucmVhZEdyYXBoKClgIG5vdyBwcm9wZXJseSByZWFkcyB2ZXJ0ZXggcHJvcGVydGllcy4KKyogUmVtb3ZlZCBgTmVvNGpHcmFwaC5nZXRDeXBoZXIoKWAgYXMgdXNlcnMgc2hvdWxkIHVzZSBgTmVvNGpHcmFwaC5jeXBoZXIoKWAgYW5kIGdldCBiYWNrIFRpbmtlclBvcDMgZ3JhcGggb2JqZWN0cy4KKyogYEdpcmFwaEdyYXBoLnZhcmlhYmxlcygpLmdldENvbmZpZ3VyYXRpb24oKWAgaXMgbm93IHJlcGxhY2VkIGJ5IGBHaXJhcGhHcmFwaC5jb25maWd1cmF0aW9uKClgLgorKiBBZGRlZCBgR3JhcGguY29uZmlndXJhdGlvbigpYCB3aGljaCByZXR1cm5zIHRoZSBgQ29uZmlndXJhdGlvbmAgb2JqZWN0IG9mIGBHcmFwaC5vcGVuKClgLgorKiBSZW1vdmVkIGBUcmF2ZXJzZXJUcmFja2VyYCBhcyBub3cgdGhlcmUgaXMgb25seSBhIGBUcmF2ZXJzZXJTZXRgIGZvciBhbGwgaGFsdGVkIHRyYXZlcnNlcnMuIEEgbmljZSBzaW1wbGlmaWNhdGlvbiBvZiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAuCisqIFJlbmFtZWQgYFRyYXZlcnNlci5pc0RvbmUoKWAgdG8gYFRyYXZlcnNlci5pc0hhbHRlZCgpYCBhbmQgYERPTkVgIHRvIGBIQUxUYC4gQ29uc2lzdGVudCB3aXRoIGF1dG9tYXRhIHRlcm1pbm9sb2d5LgorKiBSZW1vdmVkIGBQYXRoVHJhdmVyc2VyRXhlY3V0b3JgIGFuZCBgU2ltcGxlVHJhdmVyc2VyRXhlY3V0b3JgIGFzIGEgc2luZ2xlIGBUcmF2ZXJzZXJFeGVjdXRvcmAgY29ycmVjdGx5IGV4ZWN1dGVzIGJvdGggdHlwZXMgb2YgdHJhdmVyc2Vycy4KKyogYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIGRvZXMgInJlZmxleGl2ZSBtZXNzYWdlIHBhc3NpbmciIHRvIHJlZHVjZSB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgcmVxdWlyZWQgdG8gZXhlY3V0ZSBhIHRyYXZlcnNhbC4KKyogYE1hcFJlZHVjZWAgbm8tYXJndW1lbnQgY29uc3RydWN0b3JzIGFyZSBwcml2YXRlIGFuZCB0aHVzLCBvbmx5IGZvciByZWZsZWN0aW9uIGFuZCBgbG9hZFN0YXRlKClgIHVzYWdlLgorKiBNYXBSZWR1Y2VycyBmb3IgYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIGFyZSBub3cgc21hcnQgYWJvdXQgYHdpdGgoKWAgZGVjbGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLgorKiBVcGRhdGVkIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgIHRvIHVzZSAicmVnaXN0ZXJlZCBzdXBwbGllcnMiIGFuZCBpdCBub3cgd29ya3MgYWNjb3JkaW5nbHkgaW4gYm90aCBPTFRQIGFuZCBPTEFQIGVudmlyb25tZW50cy4KKyogSW5jcmVhc2VkIHRoZSBzcGVlZCBvZiBgRmxhdE1hcFN0ZXBgIGJ5IGFwcHJveGltYXRlbHkgMS41eC4KKworW1tyZWxlYXNlLTMtMC0wLW00XV0KKz09PSBUaW5rZXJQb3AgMy4wLjAuTTQgKFJlbGVhc2UgRGF0ZTogT2N0b2JlciAyMSwgMjAxNCkKKworKiBBZGRlZCBmZWF0dXJlcyBmb3IgYFZlcnRleFByb3BlcnR5YCB1c2VyIHN1cHBsaWVkIGlkcyBhbmQgcmVsYXRlZCBkYXRhIHR5cGVzLgorKiBSZW1vdmVkIGBTaWRlRWZmZWN0Q2FwYCBtYXJrZXIgaW50ZXJmYWNlIGFzIHRoZXJlIGlzIG9ubHkgb25lIGBTaWRlRWZmZWN0Q2FwU3RlcGAgYW5kIHRodXMsIGBpbnN0YW5jZW9mYCBpcyBzdWZmaWNpZW50LgorKiBgUGF0aC5nZXRPYmplY3RzKClgL2BQYXRoLmdldExhYmVscygpYCByZW5hbWVkIHRvIGBQYXRoLm9iamVjdHMoKWAvYFBhdGgubGFiZWxzKClgIHRvIGJlIGluIGxpbmUgd2l0aCAicXVlcnkgbGFuZ3VhZ2UiIG5hbWluZyBjb252ZW50aW9uLgorKiBHcmVhdGx5IHNpbXBsaWZpZWQgYEdpcmFwaEludGVybmFsVmVydGV4YCBkdWUgdG8gYEVsZW1lbnQuZ3JhcGgoKWAgLS0gMS8yIHRoZSBtZW1vcnkgZm9vdHByaW50IGFuZCByZWR1Y2VkIGNvbnN0cnVjdGlvbiB0aW1lLgorKiBSZW5hbWVkIGBQcm9wZXJ0eS5nZXRFbGVtZW50KClgIHRvIGBQcm9wZXJ0eS5lbGVtZW50KClgIGdpdmVuIHRoZSAicXVlcnkgbGFuZ3VhZ2UiIG5hbWluZyBjb252ZW50aW9uLgorKiBgRWxlbWVudC5ncmFwaCgpYCBhZGRlZCB3aGljaCByZXR1cm5zIHRoZSBgR3JhcGhgIHRoYXQgdGhlIGVsZW1lbnQgaXMgY29udGFpbmVkIHdpdGhpbi4KKyogQWRkZWQgdGVzdHMgZm9yIGdyZWF0ZXIgY29uc2lzdGVuY3kgYXJvdW5kIGl0ZXJhdGluZyBoaWRkZW4gcHJvcGVydGllcy4KKyogU2ltcGxpZmllZCBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgd2hlcmUgb25seSBhIHNpbmdsZSBgVHJhdmVyc2VyVHJhY2tlcmAgZXhpc3RzIGZvciBib3RoIHBhdGgtIGFuZCBzaW1wbGUtdHJhdmVyc2Vycy4KKyogRml4ZWQgYSBtYWpvciBidWcgd2hlcmUgYEFycmF5cy5iaW5hcnlTZWFyY2hgIHdhcyBiZWluZyB1c2VkIG9uIGFuIHVuc29ydGVkIGFycmF5IGluIFRpbmtlckdyYXBoIGFuZCBOZW80akdyYXBoLgorKiBDaGFuZ2VkIGBDb21wdXRlclJlc3VsdC5nZXRYWFgoKWAgdG8gYGdyYXBoKClgIGFuZCBgbWVtb3J5KClgIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCAicXVlcnkgbGFuZ3VhZ2UiIG5hbWluZyBjb252ZW50aW9uLgorKiBgVHJhdmVyc2VyLmdldFhYWCgpYCBjaGFuZ2VkIHRvIGBsb29wcygpYCwgYGJ1bGsoKWAsIGBwYXRoKClgLCBgc2lkZUVmZmVjdHMoKWAgdG8gYmUgY29uc2lzdGVudCB3aXRoICJxdWVyeSBsYW5ndWFnZSIgbmFtaW5nIGNvbnZlbnRpb24uCisqIE9wdGltaXphdGlvbiB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBlbXB0eSBsaXN0cyBjcmVhdGVkIGR1ZSB0byBubyBzdGVwIGNsYXNzIGV4aXN0aW5nIGZvciByZXNwZWN0aXZlIGBUcmF2ZXJzYWxTdHJhdGVneS5hcHBseSgpYC4KKyogQWRkZWQgYENhcFRyYXZlcnNhbGAgYXMgYSBtYXJrZXIgaW50ZXJmYWNlIGZvciB0aGUgYGNhcCgpYCBtZXRob2QuCisqIEFkZGVkIGB1bmlvbigpYCB3aXRoIEdyYXBoQ29tcHV0ZXIgYFVuaW9uTGluZWFyU3RyYXRlZ3lgLgorKiBgVGltZUxpbWl0U3RlcGAgd2FzIG1vdmVkIHRvIGBmaWx0ZXIvYCBwYWNrYWdlLiBJdCB3YXMgYSBtaXN0YWtlIHRoYXQgaXQgd2FzIGluIGBzaWRlRWZmZWN0L2AuCisqIFByb3ZpZGVkIHRoZSBjb25maWd1cmF0aW9uIGZvciBnZW5lcmF0aW5nIGJvdGggYSAiZnVsbCIgYW5kICJjb3JlIiBzZXQgb2YgamF2YWRvY3MsIHdoZXJlICJmdWxsIiByZXByZXNlbnRzIGFsbCBjbGFzc2VzIGluIGFsbCBwcm9qZWN0cyBhbmQgImNvcmUiIGlzIHRoZSAidXNlciIgc3Vic2V0LgorKiBWYWxpZGF0ZWQgYmluZGluZ3MgcGFzc2VkIHRvIEdyZW1saW4gU2VydmVyIHRvIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90IG1hdGNoIHRoZSBtb3N0IGNvbW1vbiBzdGF0aWNhbGx5IGltcG9ydGVkIHZhbHVlcy4KKyogSWYgbm8gc2NyaXB0IGVuZ2luZSBuYW1lIGlzIHByb3ZpZGVkIHRvIGEgYExhbWJkYUhvbGRlcmAgaXQgaXMgYXNzdW1lZCB0byBiZSBHcmVtbGluLUdyb292eS4KKyogYE1hcEVtaXR0ZXJgIGFuZCBgUmVkdWNlRW1pdHRlcmAgaGF2ZSBhbiBgZW1pdCh2YWx1ZSlgIGRlZmF1bHQgbWV0aG9kIHdoZXJlIHRoZSBrZXkgaXMgdGhlIGBNYXBSZWR1Y2UuTnVsbE9iamVjdGAgc2luZ2xldG9uLgorKiBgVHJhdmVyc2VyLkFkbWluYCBub3cgaW1wbGVtZW50cyBgQXR0YWNoYWJsZWAgYXMgdGhlIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgIGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSB0aGUgYFZlcnRleGAuCisqIE1hZGUgYSBzb2xpZCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQgYWxsIFRpbmtlclBvcCBrZXlzIGFyZSBgR3JhcGguU3lzdGVtYCB0byBsZWF2ZSBgR3JhcGguS2V5YCBmb3IgdXNlcnMuCisqIFRoZSBgR3JhcGguU3lzdGVtYCBwcmVmaXggaXMgbm93IGBeYCBpbnN0ZWFkIG9mIGAlJiVgLiBTaW1wbGVyIGFuZCBlYXNpZXIgb24gdGhlIGB0b1N0cmluZygpYC1leWVzLgorKiBBZGRlZCBgVHJhdmVyc2FsLlNpZGVFZmZlY3RzLmlmUHJlc2VudChDb25zdW1lcilgIGFzIGEgZGVmYXVsdCBoZWxwZXIgbWV0aG9kLgorKiBBZGRlZCBgcHJvZmlsZSgpYC1zdGVwIHdoaWNoIHByb3ZpZGVzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBvZiBlYWNoIHN0ZXAgaW4gYSB0cmF2ZXJzYWwuCisqIE5vIG1vcmUgYENvdW50Q2FwU3RlcGAgYW5kIGBDb3VudFN0ZXBgLCB0aGVyZSBpcyBvbmx5IGBDb3VudFN0ZXBgIGFuZCBpdCBpcyBlbGVnYW50LgorKiBDcmVhdGVkIGEgYEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3lgIHdpdGggZ29vZCBgdG9TdHJpbmcoKWAsIGBoYXNDb2RlKClgLCBhbmQgYGVxdWFscygpYCBpbXBsZW1lbnRhdGlvbnMuCisqIEFkZGVkIGBDb3VudFRyYXZlcnNhbGAgYXMgYSBtYXJrZXItaW50ZXJmYWNlIHN0YXRpbmcgdGhhdCB0aGUgYFRyYXZlcnNhbGAgaGFzIGEgYGNvdW50KCkgLT4gTG9uZ2AgbWV0aG9kLgorKiBgVHJhdmVyc2FsYCBubyBsb25nZXIgaGFzIGFueSBzdGVwIG1ldGhvZHMgYXMgaXRzIG5vdCByZXF1aXJlZCBmb3IgRFNMIGltcGxlbWVudGVycyB0byBoYXZlICJjb3JlIHN0ZXBzLiIKKyogQWRkZWQgImxpbmVhcml6YXRpb24iIHN0cmF0ZWd5IGZvciBgQ2hvb3NlU3RlcGAgc28gaXQgaXMgZXhlY3V0ZWQgY29ycmVjdGx5IG9uIEdyYXBoQ29tcHV0ZXIuCisqIEFkZGVkIGBHcmFwaFRyYXZlcnNhbFN0cmF0ZWd5UmVnaXN0cnlgIHdoaWNoIGhhcyByZXNwZWN0aXZlIGdsb2JhbCBzdHJhdGVnaWVzIHRvIG1ha2UgdHVybmluZyBvbi9vZmYgc3RyYXRlZ2llcyBlYXNpZXIuCisqIEFkZGVkIGEgZ2VuZXJpYyBgQnJhbmNoU3RlcGAgdG8gYmUgdXNlZCBmb3IgcmUtd3JpdGluZyAibWV0YS1zdGVwcyIgZm9yIGV4ZWN1dGlvbiBvbiBHcmFwaENvbXB1dGVyLgorKiBNb3ZlZCBgSnVtcFN0ZXBgLCBgVW50aWxTdGVwYCwgYW5kIGBDaG9vc2VTdGVwYCB0byBhIG5ldyBgYnJhbmNoL2AgcGFja2FnZS4KKyogQWRkZWQgdGVzdCBjYXNlcyB0byB0aGUgU3RydWN0dXJlIFN1aXRlIHRvIGVuZm9yY2UgY29uc2lzdGVudCBvcGVyYXRpb25zIG9mIHJlYWRpbmcgcHJvcGVydGllcyBhZnRlciByZW1vdmFsIG9mIHRoZWlyIG93bmluZyBgRWxlbWVudGAuCisqIEdyYXBoU09OIGZvcm1hdCBjaGFuZ2UgZm9yIGZ1bGwgYEdyYXBoYCBzZXJpYWxpemF0aW9uIC0gR3JhcGggdmFyaWFibGVzIGFyZSBub3cgc2VyaWFsaXplZCB3aXRoIHRoZSBrZXkgInZhcmlhYmxlcyIgYXMgb3Bwb3NlZCB0byAicHJvcGVydGllcyIuCisqIFJlbGF4ZWQgYEdyYXBoLnRvU3RyaW5nKClgIHRlc3QgcmVxdWlyZW1lbnRzIGZvciBpbXBsZW1lbnRlcnMuCisqIE1hZGUgdGhlIGB0b1N0cmluZ2Agb3BlcmF0aW9ucyBpbiBgR3JhcGhTdHJhdGVneWAgY29uc2lzdGVudC4KKyogQWRkZWQgYFZlcnRleEZlYXR1cmVzLnN1cHBvcnRzUmVtb3ZlUHJvcGVydHlgLgorKiBBZGRlZCBgVmVydGV4UHJvcGVydHlGZWF0dXJlcy5zdXBwb3J0c1JlbW92ZVByb3BlcnR5YC4KKyogQWRkZWQgYEVkZ2VGZWF0dXJlcy5zdXBwb3J0c1JlbW92ZVByb3BlcnR5YC4KKyogQWRkZWQgYFZlcnRleEZlYXR1cmVzLnN1cHBvcnRzUmVtb3ZlVmVydGljZXNgLgorKiBBZGRlZCBgRWRnZUZlYXR1cmVzLnN1cHBvcnRzUmVtb3ZlRWRnZXNgLgorKiBWZW5kb3JzIHNob3VsZCBub3cgZ2V0IGEgY2xlYXIgZXJyb3Igd2hlbiBtaXMtc3BlbGxpbmcgc29tZXRoaW5nIGluIGFuIGBAT3B0T3V0YCAob3IgbW9yZSBsaWtlbHkgaWYgYSB0ZXN0IG5hbWUgY2hhbmdlcykgYW5kIGl0IG5vdyB3b3JrcyBhbGwgdGhlIHRlc3Qgc3VpdGVzLgorKiBBbGwgcGx1Z2lucyBub3cgaGF2ZSBhIGRlZmF1bHQgcHJlZml4IG9mICJ0aW5rZXJwb3AuIiBhcyBhIG5hbWVzcGFjZS4KKyogYEdyYXBoQ29tcHV0ZXJgIG5vdyBleGVjdXRlcyBhIGBTZXQ8TWFwUmVkdWNlPmAgYW5kIGBoYXNoQ29kZSgpYC9gZXF1YWxzKClgIHdlcmUgaW1wbGVtZW50ZWQgZm9yIGV4aXN0aW5nIGBNYXBSZWR1Y2VgIGltcGxlbWVudGF0aW9ucy4KKyogQ2hhbmdlZCBgQ29udGFpbnMuaW4vbm90aW5gIHRvIGBDb250YWlucy53aXRoaW4vd2l0aG91dGAgYXMgYGluYCBpcyBhIHJlc2VydmVkIHRlcm0gaW4gbW9zdCBsYW5ndWFnZXMgKGluY2x1ZGluZyBKYXZhIGFuZCBHcm9vdnkpLgorKiBBZGRlZCBoZWxwZXIgbWV0aG9kcyBmb3IgbG9hZGluZyBkYXRhIGludG8gY29sbGVjdGlvbnMgaW4gYFRyYXZlcnNhbEhlbHBlcmAuCisqIENvcmUgYFRyYXZlcnNhbGAgbWV0aG9kcyBhcmUgc21hcnQgYWJvdXQgYnVsa2luZyAtLSBlLmcuIGBpdGVyYXRlKClgLCBgZmlsbCgpYCwgYHJlbW92ZSgpYCwgZXRjLgorKiBgR3JvdXBCeVN0ZXBgIGFuZCBgR3JvdXBCeU1hcFJlZHVjZWAgbGV2ZXJhZ2UgYEJ1bGtTZXRgIGFzIHRoZSBkZWZhdWx0IGdyb3VwIGRhdGEgc3RydWN0dXJlLgorKiBgRWxlbWVudC5JdGVyYXRvcmAgaGFzIHJlbmFtZWQgbWV0aG9kcyBzbyBpbXBsZW1lbnRlcnMgY2FuIGRvIGBNeUVsZW1lbnQgaW1wbGVtZW50cyBFbGVtZW50LCBFbGVtZW50Lkl0ZXJhdG9yc2AuCisqIFJlbmFtZWQgYE1lc3NhZ2VUeXBlLkdsb2JhbGAgYW5kIGBNZXNzYWdlVHlwZS5Mb2NhbGAgY3JlYXRvcnMgZnJvbSBgb2YoKWAgdG8gYHRvKClgIGFzIGl0IG1ha2VzIG1vcmUgc2Vuc2UgdG8gc2VuZCBtZXNzYWdlcyBgdG8oKWAuCisqIFdpdGggYFRyYXZlcnNlci5nZXQvc2V0QnVsaygpYCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGBUcmF2ZXJzZXJNZXNzYWdlYC4gVGhlIGBUcmF2ZXJzZXJgIGlzIG5vdyB0aGUgbWVzc2FnZSBpbiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAuCisqIFByb3ZpZGVkIHN0YXRpYyBgbWFrZSgpYCBtZXRob2RzIGZvciBjb25zdHJ1Y3RpbmcgYFBhdGhgIGltcGxlbWVudGF0aW9ucy4KKyogUHJvdmlkZWQgYSBtb3JlIHNwYWNlL3RpbWUgZWZmaWNpZW50IGFsZ29yaXRobSBmb3IgYFBhdGguaXNTaW1wbGUoKWAuCisqIFRoZSBgSnVtcFN0ZXBgIEdyYXBoQ29tcHV0ZXIgYWxnb3JpdGhtIGBRdWV1ZWAgaXMgbm93IGEgYFRyYXZlcnNlclNldGAuCisqIGBBZ2dyZWdhdGVTdGVwYCBhbmQgYFN0b3JlU3RlcGAgbm93IHVzZSBgQnVsa1NldGAgYXMgdGhlaXIgZGVmYXVsdCBiYWNraW5nIGBDb2xsZWN0aW9uYCAobXVjaCBtb3JlIHNwYWNlL3RpbWUgZWZmaWNpZW50KS4KKyogQWRkZWQgYEJ1bGtTZXRgIHdoaWNoIGlzIGxpa2UgYFRyYXZlcnNlclNldGAgYnV0IGZvciBhcmJpdHJhcnkgb2JqZWN0cyAoaS5lLiBhIHdlaWdodGVkIHNldCkuCisqIGBVbnJvbGxKdW1wU3RyYXRlZ3lgIGlzIG5vIGxvbmdlciBhIGRlZmF1bHQgc3RyYXRlZ3kgYXMgaXQgaXMgbGVzcyBlZmZpY2llbnQgd2l0aCB0aGUgaW5jbHVzaW9uIG9mIGBUcmF2ZXJzZXJTZXRgLgorKiBJbnRyb2R1Y2VkIGBUcmF2ZXJzZXJTZXRgIHdpdGggYnVsayB1cGRhdGluZyBjYXBhYmlsaXRpZXMuIExpa2UgT0xBUCwgT0xUUCBsb29waW5nIGlzIG5vdyBsaW5lYXIgc3BhY2UvdGltZSBjb21wbGV4aXR5LgorKiBUaW5rZXJHcmFwaCdzIE1hcFJlZHVjZSBmcmFtZXdvcmsgaXMgbm93IHRocmVhZCBzYWZlIHdpdGggYSBwYXJhbGxlbCBleGVjdXRpb24gaW1wbGVtZW50YXRpb24uCisqIEFkZGVkIGEgZGVmYXVsdCBgVHJhdmVyc2VyLmFzQWRtaW4oKWAgbWV0aG9kIGFzIGEgdHlwZWNhc3QgY29udmVuaWVuY2UgdG8gYFRyYXZlcnNlci5BZG1pbmAuCisqIFJlbmFtZWQgYFRyYXZlcnNlci5TeXN0ZW1gIHRvIGBUcmF2ZXJzZXIuQWRtaW5gIGFzIHRvIG5vdCBjYXVzZSBgamF2YS5sYW5nLlN5c3RlbWAgcmVmZXJlbmNlIGlzc3Vlcy4KKyogUmVuYW1lZCBgTWVtb3J5LkFkbWluaXN0cmF0aXZlYCB0byBgTWVtb3J5LkFkbWluYCB0byBtYWtlIGl0IHNob3J0ZXIgYW5kIGNvbnNpc3RlbnQgd2l0aCBgVHJhdmVyc2VyLkFkbWluYC4KKyogRml4ZWQgYSBUaW5rZXJHcmFwaCBidWcgYXJvdW5kIHVzZXIgc3VwcGxpZWQgdmVydGV4IHByb3BlcnR5IGlkcy4KKyogTW9zdCBgU3RlcGAgY2xhc3NlcyBhcmUgbm93IGRlZmluZWQgYXMgYHB1YmxpYyBmaW5hbCBjbGFzc2AgdG8gcHJldmVudCBpbmhlcml0YW5jZS4KKyogYFNodWZmbGVTdGVwYCBub3cgZXh0ZW5kcyBgQmFycmllclN0ZXBgIHdoaWNoIGVuYWJsZXMgc2VtYW50aWNhbGx5IGNvcnJlY3Qgc3RlcC1zaWRlRWZmZWN0cy4KKyogTGV2ZXJhZ2VkIGBUcmF2ZXJzZXIuZ2V0QnVsaygpYCBjb25zaXN0ZW50bHkgdGhyb3VnaG91dCBhbGwgc3RlcHMuCisKK1tbcmVsZWFzZS0zLTAtMC1tM11dCis9PT0gVGlua2VyUG9wIDMuMC4wLk0zIChSZWxlYXNlIERhdGU6IE9jdG9iZXIgNiwgMjAxNCkKKworKiBBbGwgYFN0ZXBgIGZpZWxkcyBhcmUgbm93IGBwcml2YXRlYC9gcHJvdGVjdGVkYCB3aXRoIHJlc3BlY3RpdmUgZ2V0dGVycyBhcyBjdXJyZW50bHkgbmVlZGVkIGFuZCB3aWxsIGJlIGFkZGVkIHRvIGFzIG5lZWRlZC4KKyogR3JlbWxpbiBTZXJ2ZXIgbm8gbG9uZ2VyIGhhcyB0aGUgYHRyYXZlcnNlYCBvcGVyYXRpb24gYXMgbGFtYmRhcyBhcmVuJ3QgcmVhbGx5IHNlcmlhbGl6ZWQuCisqIGBQYXRoYCBpcyBub3cgYW4gaW50ZXJmYWNlIHdpdGggYEltbXV0YWJsZVBhdGhgIGFuZCBgTXV0YWJsZVBhdGhgIGFzIGltcGxlbWVudGF0aW9ucyAoMnggc3BlZWR1cCBvbiBwYXRoIGNhbGN1bGF0aW9ucykuCisqIGBUcmF2ZXJzZXJgIG5vdyBpbXBsZW1lbnRzIGBDb21wYXJhYmxlYC4gSWYgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGRvZXNuJ3QgaW1wbGVtZW50IGBDb21wYXJhYmxlYCwgdGhlbiBhIHJ1bnRpbWUgZXhjZXB0aW9uLgorKiBBZGRlZCBhYnN0cmFjdCBgQmFycmllclN0ZXBgIHdoaWNoIGdyZWF0bHkgc2ltcGxpZmllcyBpbXBsZW1lbnRpbmcgYmFycmllcnMgbGlrZSBgQWdncmVnYXRlU3RlcGAsIGBPcmRlclN0ZXBgLCBldGMuCisqIGBTZWxlY3RTdGVwYCBpcyBub3cgaW50ZWxsaWdlbnQgYWJvdXQgd2hlbiB0byB0cmlnZ2VyIHBhdGggY29tcHV0YXRpb25zIGJhc2VkIG9uIGxhYmVsIHNlbGVjdG9ycyBhbmQgYmFycmllcnMuCisqIGBUYCBubyBsb25nZXIgaGFzIGBlcWAsIGBuZXFgLCBgbHRgLCBgaW5gLCBldGMuIFJlbmFtZWQgYWxsIHJlc3BlY3RpdmUgZW51bXMgYW5kIHdpdGggYHN0YXRpYyBpbXBvcnRgLCBnb29kIGluIGNvbnNvbGUgKGUuZy4gYENvbXBhcmUuZXFgKS4KKyogQWRkZWQgYE9yZGVyYCBlbnVtIHdoaWNoIHByb3ZpZGVzIGBPcmRlci5kZWNyYCBhbmQgYE9yZGVyLmluY3JgLgorKiBgVHJhdmVyc2VyLmxvb3BzYCBhbmQgYEp1bXAubG9vcHNgIGFyZSBub3cgc2hvcnRzIChgMzI3NjdgIG1heC1sb29wcyBpcyBwcm9iYWJseSBzdWZmaWNpZW50IGZvciA5OS45OTk5JSBvZiB1c2UgY2FzZXMpLgorKiBgVHJhdmVyc2VyLmJ1bGtgIGV4aXN0cyB3aGljaCBpcyBob3cgbWFueSBpbnN0YW5jZXMgZG9lcyB0aGUgdHJhdmVyc2VyIHJlcHJlc2VudC4gRm9yIHVzZSBpbiBncm91cGluZyB3aXRoIGJ1bGsgY29tcHV0YXRpb25zLgorKiBHcmVhdGx5IHNpbXBsaWZpZWQgc2lkZUVmZmVjdCBzdGVwcyB3aGVyZSB0aGVyZSBpcyBubyBkaXN0aW5jdGlvbiBiZXR3ZWVuIE9MQVAgdnMuIE9MVFAgKGZyb20gdGhlIGBTdGVwYCBwZXJzcGVjdGl2ZSkuCisqIFJlbW92ZWQgdGhlIG5lZWQgZm9yIGBCdWxrYWJsZWAgYW5kIGBWZXJ0ZXhDZW50cmljYCBtYXJrZXIgaW50ZXJmYWNlcyBpbiBwcm9jZXNzIEFQSS4KKyogUmVuYW1lZCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW4gR2lyYXBoLUdyZW1saW4gdG8gYmUgY29uc2lzdGVudCB3aXRoIGEgYGdpcmFwaC5ncmVtbGluYC1wcmVmaXguCisqIE1hZGUgaXQgcG9zc2libGUgdG8gcGFzcyBhIGBTY3JpcHRFbmdpbmVgIG5hbWUgYW5kIHN0cmluZyBzY3JpcHQgaW4gYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIGFuZCBgTGFtYmRhVmVydGV4UHJvZ3JhbWAuCisqIE1hZGUgYFRpbmtlckdyYXBoYCBhIHBsdWdpbiBmb3IgdGhlIENvbnNvbGUgYXMgaXQgaXMgbm8gbG9uZ2VyIGEgZGlyZWN0IGRlcGVuZGVuY3kgaW4gYGdyZW1saW4tZ3Jvb3Z5YC4KKyogQWRkZWQgZmVhdHVyZXMgZm9yIHN1cHBvcnRpbmcgdGhlIGFkZGl0aW9uIG9mIHByb3BlcnRpZXMgdmlhIGBFbGVtZW50LnByb3BlcnR5KFN0cmluZyxPYmplY3QpYC4KKyogYEdpcmFwaEdyYXBoYCBPTFRQIHRlc3RlZCBhZ2FpbnN0IEdyZW1saW4tSmF2YTggYW5kIEdyZW1saW4tR3Jvb3Z5IC0tIE9MQVAgdGVzdGVkIGFnYWluc3QgR3JlbWxpbi1Hcm9vdnkuCisqIGBOZW80akdyYXBoYCBpcyBub3cgdGVzdGVkIGFnYWluc3QgYm90aCBHcmVtbGluLUphdmE4IGFuZCBHcmVtbGluLUdyb292eS4KKyogUmVuYW1lZCB0aGUgdGVzdCBjYXNlcyBpbiBgUHJvY2Vzc1Rlc3RTdWl0ZWAgdG8gYmUgY29uc2lzdGVudCB3aXRoIG90aGVyIEdyZW1saW4gbGFuZ3VhZ2UgdmFyaWFudHMuCisqIEFkZGVkIGEgYGdyZW1saW4tZ3Jvb3Z5LXRlc3RgIHN1aXRlIHRoYXQgY2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgaW1wbGVtZW50YXRpb25zIGFnYWluc3QgdGhlIEdyb292eSB2YXJpYW50IG9mIEdyZW1saW4uCisqIGBUaW5rZXJHcmFwaGAgaXMgbm8gbG9uZ2VyIHNlcmlhbGl6YWJsZSwgdXNlIGEgYEdyYXBoUmVhZGVyYC9gR3JhcGhXcml0ZXJgIHRvIHNlcmlhbGl6ZSB0aGUgZ3JhcGggZGF0YS4KKyogUmVtb3ZlZCBgaW1wbGVtZW50cyBTZXJpYWxpemFibGVgIG9uIG51bWVyb3VzIGNsYXNzZXMgdG8gZW5zdXJlIHNhZmV0eSBhbmQgcHJvcGVyIHVzYWdlIG9mIHV0aWxpdGllcyBmb3IgY2xvbmluZy4KKyogYFRyYXZlcnNhbGAgbm93IGltcGxlbWVudHMgYENsb25lYWJsZWAgYXMgdGhpcyBpcyB0aGUgbWVhbnMgdGhhdCBpbnRlci1KVk0gdGhyZWFkcyBhcmUgYWJsZSB0byBnZXQgc2libGluZyBgVHJhdmVyc2Fsc2AuCisqIENyZWF0ZWQgImludGVncmF0aW9uIiB0ZXN0IGZvciBgTmVvNGpHcmFwaGAgdGhhdCBydW5zIHRoZSB0ZXN0IHN1aXRlIHdpdGggbXVsdGkvbWV0YSBwcm9wZXJ0eSBmZWF0dXJlcyB0dXJuZWQgb2ZmLgorKiBBZGRlZCBgR3JhcGhTdHJhdGVneWAgbWV0aG9kcyBmb3IgYFZlcnRleFByb3BlcnR5YC4KKyogQ29udmVydGVkIHRoZSBgaWRgIGRhdGEgdHlwZSBmcm9tIHN0cmluZyB0byBpbnRlZ2VyIGluIHRoZSBHcmF0ZWZ1bCBEZWFkIHNhbXBsZSBkYXRhLgorKiBSZW1vdmVkIGFsbCBub3Rpb25zIG9mIHNlcmlhbGl6YWJsZSBsYW1iZGFzIGFzIHRoaXMgaXMgYSBtaXNjb25jZXB0aW9uIGFuZCBzaG91bGQgbm90IGJlIHBhcnQgb2YgVGlua2VyUG9wLgorKiBHcmVhdGx5IHNpbXBsaWZpZWQgYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIHdpdGggdGhyZWUgYXJndW1lbnRzOiBhIGBUcmF2ZXJzYWw8U3VwcGxpZXI+YCwgYENsYXNzPFRyYXZlcnNhbDxTdXBwbGllcj4+YCwgb3IgYSBzY3JpcHQgc3RyaW5nIHdpdGggYFNjcmlwdEVuZ2luZWAgbmFtZS4KKyogQWRkZWQgYFRyYXZlcnNhbFNjcmlwdGAgaW50ZXJmYWNlIHdpdGggYEdyb292eVRyYXZlcnNhbFNjcmlwdGAgYXMgYW4gaW5zdGFuY2UuIFRvIGJlIHVzZWQgYnkgT0xBUCBlbmdpbmVzIGFuZCBhbnkgbGFuZ3VhZ2UgdmFyaWFudCAoZS5nLiBncmVtbGluLXNjYWxhLCBncmVtbGluLWpzLCBldGMuKS4KKyogYFVudGlsU3RlcGAgbm93IGxldmVyYWdlcyBgVW5yb2xsSnVtcFN0cmF0ZWd5YCBhY2NvcmRpbmdseS4KKyogRml4ZWQgYSBidWcgd2hlcmUgdGhlIGB0b1N0cmluZygpYCBvZiBgVHJhdmVyc2FsYCB3YXMgYmVpbmcgaGlqYWNrZWQgYnkgYFN1Z2FyR3JlbWxpblBsdWdpbmAuCisqIEZpeGVkIGNvbXBpbGF0aW9uIGJ1ZyBpbiBgVW50aWxTdGVwYCB0aGF0IGlzIHJlYWxpemVkIHdoZW4gdXNlZCBpbiBtdWx0aS1tYWNoaW5lIE9MQVAuCisqIFNpbXBsaWZpZWQgYEVudW1lcmF0b3JgIGFuZCBpbXBsZW1lbnRhdGlvbnMgZm9yIGBNYXRjaFN0ZXBgLgorCitbW3JlbGVhc2UtMy0wLTAtbTJdXQorPT09IFRpbmtlclBvcCAzLjAuMC5NMiAoUmVsZWFzZSBEYXRlOiBTZXB0ZW1iZXIgMjMsIDIwMTQpCisKKyogQWRkZWQgYW4gZXhoYXVzdCBgSW5uZXJKb2luRW51bWVyYXRvcmAgZml4IGluIGBNYXRjaFN0ZXBgIHRvIGdldCBhbGwgc29sdXRpb25zIGNvcnJlY3RseS4KKyogYE5lbzRqR3JhcGhgIGNhbiBiZSBjb25maWd1cmVkIHRvIGFsbG93IG9yIGRpc2FsbG93IG1ldGEtIGFuZCBtdWx0aS1wcm9wZXJ0aWVzLgorKiBBZGRlZCBgdW50aWwoKWAtc3RlcCBhcyBhIHNpbXBsZXIgd2F5IHRvIGV4cHJlc3Mgd2hpbGUtZG8gbG9vcGluZyB3aGljaCBjb21waWxlcyBkb3duIHRvIGEgYGp1bXAoKWAtc3RlcCBlcXVpdmFsZW50LgorKiBBZGRlZCAiVGhlIENyZXciIChgQ1JFV2ApIHRveSBncmFwaCB3aGljaCBjb250YWlucyBtdWx0aS1wcm9wZXJ0aWVzLCBtZXRhLXByb3BlcnRpZXMsIGdyYXBoIHZhcmlhYmxlcywgaGlkZGVucywgZXRjLgorKiBJZiB0aGUgR2lyYXBoIGpvYiBmYWlscywgdGhlbiB0aGUgc3Vic2VxdWVudCBgTWFwUmVkdWNlYCBqb2JzIHdpbGwgbm90IGV4ZWN1dGUuCisqIEFkZGVkIGBHcmFwaC5TeXN0ZW1gIGNsYXNzIHdoaWNoIGdlbmVyYXRlcyBrZXlzIHByZWZpeGVkIHdpdGggYCUmJWAgd2hpY2ggaXMgY29uc2lkZXJlZCB0aGUgdmVuZG9yIG5hbWVzcGFjZSBhbmQgbm90IGFsbG93ZWQgYnkgdXNlcnMuCisqIEFkZGVkIGBSZWZlcmVuY2VkVmVydGV4YCAoZXRjLiBmb3IgYWxsIGdyYXBoIG9iamVjdCB0eXBlcykgZm9yIGxpZ2h0d2VpZ2h0IG1lc3NhZ2UgcGFzc2luZyBvZiBncmFwaCBvYmplY3QgaWRzLgorKiBgVC4qYCBub3cgaGFzIGBsYWJlbGAsIGBpZGAsIGBrZXlgLCBgdmFsdWVgIGFuZCBubyBsb25nZXIgYXJlIHRoZXNlIGBTdHJpbmdgIHJlcHJlc2VudGF0aW9ucyByZXNlcnZlZCBpbiBUaW5rZXJQb3AuCisqIGBUcmF2ZXJzZXJgIG5vdyBoYXMgYSB0cmFuc2llbnQgcmVmZXJlbmNlIHRvIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgLgorKiAiRGV0YWNoZWQiIGNsYXNzZXMgYXJlIG5vdyB0ZXN0ZWQgYnkgdGhlIHN0YW5kYXJkIHRlc3Qgc3VpdGUuCisqIENvbXBhcnRtZW50YWxpemVkIGBUcmF2ZXJzZXJgIGludGVyZmFjZSBzbyB0aGVyZSBpcyBub3cgYSBgVHJhdmVyc2VyLlN5c3RlbWAgc3ViLWludGVyZmFjZSB3aXRoIG1ldGhvZHMgdGhhdCB1c2VycyBzaG91bGRuJ3QgY2FsbC4KKyogQWRkZWQgYE9yZGVyQnlTdGVwYCB3aGljaCBvcmRlcnMgYEVsZW1lbnRzYCBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIGEgcHJvdmlkZWQga2V5LgorKiAyeCBzcGVlZCBpbmNyZWFzZSBvbiBzdGVwcyB0aGF0IHJlbHkgaGVhdmlseSBvbiBgRXhwYW5kYWJsZVN0ZXBJdGVyYXRvcmAgd2l0aCBtYXNzaXZlIG1lbW9yeSBmb290cHJpbnQgcmVkdWN0aW9uIGFzIHdlbGwuCisqIEFkZGVkIGBWZXJ0ZXhQcm9wZXJ0eTxWPmAgYXMgdGhlIHByb3BlcnR5IHR5cGUgZm9yIHZlcnRpY2VzIC0tIHByb3ZpZGVzIG11bHRpLXByb3BlcnRpZXMgYW5kIHByb3BlcnRpZXMgb24gcHJvcGVydGllcyBmb3IgdmVydGljZXMuCisqIENoYW5nZWQgYFZlcnRleFByb2dyYW1gIHN1Y2ggdGhhdCBgZ2V0RWxlbWVudENvbXB1dGVLZXlzKClgIGlzIHNpbXBseSBhIGBTZXQ8U3RyaW5nPmAuCisqIFNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIGZvcm1hdCBvZiB0aGUgYFJlc3BvbnNlTWVzc2FnZWAgZm9yIEdyZW1saW4gU2VydmVyIC0gdGhlc2UgY2hhbmdlcyBicmVhayBleGlzdGluZyBjbGllbnRzLgorKiBDbG9zZSBhbnkgb3BlbiB0cmFuc2FjdGlvbnMgb24gYW55IGNvbmZpZ3VyZWQgYEdyYXBoYCB3aGVuIGEgc2Vzc2lvbiBpbiBHcmVtbGluIFNlcnZlciBpcyBraWxsZWQuCisqIEdyYXRlZnVsIERlYWQgR3JhcGggbm93IHVzZXMgdmVydGV4IGxhYmVscyBpbnN0ZWFkIG9mICJ0eXBlIiBwcm9wZXJ0aWVzLgorKiBUaGVyZSBpcyBub3cgYSBgR3JhcGhDb21wdXRlclN0cmF0ZWd5YCBhbmQgYEVuZ2luZURlcGVuZGVudGAgbWFya2VyIGludGVyZmFjZSB0byBhbGxvdyBzdGVwcyB0byBkZWNpZGUgdGhlaXIgYWxnb3JpdGhtIGRlcGVuZGluZyBpZiB0aGV5IGFyZSBPTEFQIG9yIE9MVFAuCisqIEEgbGFiZWxlZCBzdGVwIG5vdyBzdG9yZXMgaXRzIGN1cnJlbnQgdHJhdmVyc2VyIHZhbHVlIGluIGBUcmF2ZXJzYWwuU2lkZUVmZmVjdHNgIChubyBsb25nZXIgY2FuIHNpZGVFZmZlY3RLZXlzIGFuZCBzdGVwIGxhYmVscyBiZSB0aGUgc2FtZSkuCisqIGBHcmFwaEZhY3RvcnlgIHN1cHBvcnQgZm9yIG9wZW5pbmcgYSBgR3JhcGhgIHdpdGggbXVsdGlwbGUgYEdyYXBoU3RyYXRlZ3lgIGluc3RhbmNlcyAtIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdHJhdGVnaWVzIHRoZXkgYXJlIHdyYXBwZWQgaW4gb3JkZXIgdmlhIGBTZXF1ZW5jZUdyYXBoU3RyYXRlZ3lgLgorKiBUaGUgcmVzdWx0IHR5cGUgZm9yIHJlc3VsdCB0ZXJtaW5hdGlvbiBtZXNzYWdlcyByZXR1cm5lZCBmcm9tIEdyZW1saW4gU2VydmVyIGlzIG5vdyBzZXQgdG8gIm5vIGNvbnRlbnQiLgorKiBUaGUgYG1heENvbnRlbnRMZW5ndGhgIHNldHRpbmcgZm9yIEdyZW1saW4gRHJpdmVyIG5vdyBibG9ja3MgaW5jb21pbmcgZnJhbWVzIHRoYXQgYXJlIHRvbyBsYXJnZS4KKyogQWZ0ZXIgaW5pdGlhbGl6YXRpb24gc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW4gR3JlbWxpbiBTZXJ2ZXIsIHRoZSBgR3JhcGhgIGluc3RhbmNlcyBhcmUgcmUtYm91bmQgYmFjayB0byB0aGVpciBnbG9iYWwgcmVmZXJlbmNlcywgdGh1cyBhbGxvd2luZyBgR3JhcGhTdHJhdGVneWAgaW5pdGlhbGl6YXRpb24gb3IgZXZlbiBkeW5hbWljIGBHcmFwaGAgY3JlYXRpb24gdGhyb3VnaCBzY3JpcHRzLgorKiBBZGRlZCAiTW9kZXJuIiBncmFwaCBiYWNrIHdoaWNoIGlzIGJhc2ljYWxseSB0aGUgIkNsYXNzaWMiIGdyYXBoIHdpdGggZG91YmxlIHZhbHVlcyBmb3IgdGhlICJ3ZWlnaHQiIHByb3BlcnR5IG9uIGVkZ2VzIGFuZCBub24tZGVmYXVsdCB2ZXJ0ZXggbGFiZWxzLgorKiBgVHJhdmVyc2FsLmFkZFN0ZXAoKWAgaXMgbm93IGhhcmQgdHlwZWQgc28gdHlwZSBjYXN0aW5nIGlzbid0IHJlcXVpcmVkIGFuZCB0cmF2ZXJzYWwgQVBJcyBsb29rIGNsZWFuLgorKiBDaGFuZ2VkIHRoZSBoaWRkZW4ga2V5IHByZWZpeCBmcm9tIGAlJCVgIHRvIGB+YCBpbiBgR3JhcGguS2V5LmhpZGUoKWAuCisqIEFkZGVkIGBoYXMobGFiZWwsa2V5LHByZWRpY2F0ZSx2YWx1ZSlgIHRvIGFsbG93IGZvciBgaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKWAuIFZhcmlvdXMgb3ZlcmxvYWRlZCBtZXRob2RzIHByb3ZpZGVkLgorKiBVcGRhdGUgdG8gdHJhdmVyc2FsIEFQSSB3aGVyZSBpZiBhIGBTRnVuY3Rpb248Uyw/PmAgd2FzIHJlcXVpcmVkLCBidXQgY2FuIHByb2Nlc3MgYSBgVHJhdmVyc2VyPFM+YCwgdGhlbiB0aGUgZnVuY3Rpb24gaXMgYFNGdW5jdGlvbjxUcmF2ZXJzZXI8Uz4sPz5gLgorKiBBZGRlZCBgV2hlcmVTdGVwYCBhcyBhIHdheSB0byBmdXJ0aGVyIGNvbnN0cmFpbiBgc2VsZWN0KClgIGFuZCBgbWF0Y2goKWAuCisqIEV4dGVuc2l2ZSB3b3JrIG9uIGBHaXJhcGhNZW1vcnlgIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBHaXJhcGggYWdncmVnYXRvcnMuCisqIElmIHRoZSBpbnB1dCBwYXRoIG9mIGEgYEdpcmFwaEdyYXBoQ29tcHV0ZXJgIGRvZXMgbm90IGV4aXN0LCBmYWlsdXJlIGhhcHBlbnMgcHJpb3IgdG8gam9iIHN1Ym1pc3Npb24uCisqIGBTdWdhclBsdWdpbmAgbm93IGhhcyBhbGwgaW5lZmZpY2llbnQgbWV0aG9kcyBhbmQgR3JlbWxpbi1Hcm9vdnkgcHJvcGVyIGlzIG9ubHkgZWZmaWNpZW50IEdyb292eSB0ZWNobmlxdWVzLgorKiBQcmV2ZW50ZWQgY29uY3VycmVuY3kgcHJvYmxlbXMgYnkgb25seSBtb2RpZnlpbmcgYmluZGluZ3Mgd2l0aGluIHRoZSBzYW1lIHRocmVhZCBvZiBleGVjdXRpb24gaW4gdGhlIGBHcmVtbGluRXhlY3V0b3JgLgorKiBDYWxscyB0byBgdXNlYCBvbiB0aGUgYERlcGVuZGVuY3lNYW5hZ2VyYCBub3cgcmV0dXJuIHRoZSBsaXN0IG9mIGBHcmVtbGluUGx1Z2luYCBpbnN0YW5jZXMgdG8gaW5pdGlhbGl6ZSBpbnN0ZWFkIG9mIGp1c3QgaW5pdGlhbGl6aW5nIHRoZW0gYXV0b21hdGljYWxseSBiZWNhdXNlIGl0IGNhdXNlcyBwcm9ibGVtcyB3aXRoIGBTY3JpcHRFbmdpbmVgIHNldHVwIGlmIGEgcGx1Z2luIHJlcXVpcmVzIGEgc2NyaXB0IHRvIGJlIGV2YWx1YXRlZCBhbmQgYSByZXF1aXJlZCBkZXBlbmRlbmN5IGlzIG5vdCB5ZXQgbG9hZGVkLgorKiBgVHJhdmVyc2FsLlNpZGVFZmZlY3RzYCBoYXMgYGdldEdyYXBoKClgLCBgc2V0R3JhcGgoKWAsIGFuZCBgcmVtb3ZlR3JhcGgoKWAgZGVmYXVsdCBoZWxwZXJzLgorKiBgVHJhdmVyc2FsLk1lbW9yeWAgLT4gYFRyYXZlcnNhbC5TaWRlRWZmZWN0c2AgYW5kIGBHcmFwaENvbXB1dGVyLlNpZGVFZmZlY3RzYCAtPiBgR3JhcGhDb21wdXRlci5NZW1vcnlgLgorKiBgU3RyYXRlZ3lXcmFwcGVkVmVydGV4YCBhbmQgYFN0cmF0ZWd5V3JhcHBlZEVkZ2VgIHByb3Blcmx5IHdyYXAgYEVsZW1lbnRgIG9iamVjdHMgcmV0dXJuZWQgZnJvbSBub24tdHJhdmVyc2FsIGJhc2VkIG1ldGhvZHMuCisqIEdyZW1saW4tU2VydmVyIG5vdyBzZW5kcyBhIHNpbmdsZSB3cml0ZSB3aXRoIHN0YXR1cyAyMDAgZm9yIE9iamVjdCBhbmQgZW1wdHkgcmVzcG9uc2UgbWVzc2FnZXMuCisqIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBhbGxvd3MgaW1wb3J0cyB0byByZS1pbXBvcnQgZGVwZW5kZW5jaWVzIGFkZGVkIHZpYSAidXNlIi4KKyogQ2hhbmdlZCBvcmRlciBpbiB3aGljaCB0aGUgYEdyZW1saW5FeGVjdXRvcmAgaXMgaW5pdGlhbGl6ZWQgc3VjaCB0aGF0IGRlcGVuZGVuY3kgbG9hZGluZyB2aWEgInVzZSIgYXJlIGhhbmRsZWQgZmlyc3Qgd2hpY2ggZml4ZXMgcHJvYmxlbXMgd2l0aCBzdGFydGluZyBHcmVtbGluIFNlcnZlciB3aXRoIGBncmVtbGluLXNlcnZlci1uZW80ai55YW1sYC4KKyogQ29ycmVjdGVkIGlzc3VlcyB3aXRoIHRoZSAiYnJhbmNoIGZhY3RvciIgcmVsYXRlZCB0cmF2ZXJzYWxzIHVuZGVyIGBTdWJncmFwaFN0cmF0ZWd5YC4gIFRoaXMgY2hhbmdlIGFsc28gYWx0ZXJlZCB0aGUgc2VtYW50aWNzIG9mIHRoZSBgU3ViZ3JhcGhTdHJhdGVneWAgYSBiaXQgYXMgaXQgYmVjYW1lIG1vcmUgcmVzdHJpY3RpdmUgYXJvdW5kIGBFZGdlYCBpbmNsdXNpb24gKHJlcXVpcmVzIGJvdGggdmVydGljZXMgdG8gYmUgaW4gdGhlIHN1YmdyYXBoKS4KKyogVGhlIEdlcGhpIFBsdWdpbiBub3cgdmlzdWFsaXplcyB0cmF2ZXJzYWxzIGFuZCBoYXMgbnVtZXJvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLgorKiBBZGRlZCBtb3JlIHNwZWNpZmljIGZlYXR1cmVzIGFyb3VuZCB0aGUgdHlwZXMgb2YgImlkZW50aWZpZXJzIiBhIGdyYXBoIGNhbiBzdXBwb3J0LgorKiBBZGRlZCBhIG5ldyB0ZXN0IGdyYXBoIGNhbGxlZCBgTU9ERVJOYCB0aGF0IGlzIGNvcHkgb2YgdGhlIGBDTEFTU0lDYCBncmFwaCwgYnV0IHJlcHJlc2VudHMgZmxvYXRzIGFzIGRvdWJsZXMuICBUaGlzIGdyYXBoIHdpbGwgYmUgdGhlIGRlZmF1bHQgZ3JhcGggZm9yIHRlc3RpbmcgZ29pbmcgZm9yd2FyZC4KKyogRml4IGJ1ZyBpbiBgTmVvNGpHcmFwaGAgdGhhdCB3YXMgbm90IHByb2Nlc3NpbmcgbXVsdGlwbGUgdmVydGV4IGxhYmVscyBwcm9wZXJseSB3aGVuIGRvaW5nIGEgYGhhcygpYCBzdGVwIHdpdGggYElOYC4KKyogQ2hhbmdlZCBzZW1hbnRpY3Mgb2YgYEBMb2FkR3JhcGhXaXRoYCBpbiBncmVtbGluLXRlc3QgdG8gb25seSByZWZlciB0byB0aGUgYWJpbGl0eSBvZiBhIHRlc3QgaW1wbGVtZW50YXRpb24gdG8gcHJvY2VzcyB0aGUgZGF0YSB0eXBlcyBvZiB0aGUgdGVzdCBncmFwaCAobm90IHRvIGFjdHVhbGx5IGxvYWQgaXQpLgorKiBgU3RhcnRTdGVwYCBpcyBhIGBTaWRlRWZmZWN0YCBhcyBpdCBpcyBhIHByb2Nlc3MgdG8gZ2V0IGRhdGEgaW50byB0aGUgc3RyZWFtIChsaWtlIGEga2V5Ym9hcmQpIGFuZCBtb3JlIGVmZmljaWVudCBhcyBzdWNoLgorKiBHcmVhdGx5IHNpbXBsaWZpZWQgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgTWFwYCwgYEZsYXRNYXBgLCBgRmlsdGVyYCwgYW5kIGBTaWRlRWZmZWN0YC4KKyogYFBhdGhgIGRhdGEgc3RydWN0dXJlIGNoYW5nZWQgdG8gYW4gb3JkZXJlZCBsaXN0IG9mIG9iamVjdHMgd2l0aCBlYWNoIGFzc29jaWF0ZWQgdG8gYSBgU2V0PFN0cmluZz5gIG9mIGFzLWxhYmVscy4KKyogQWxsIHNpZGVFZmZlY3QtYmFzZWQgc3RlcHMgbm8gbG9uZ2VyIGV4dGVuZCBgRmlsdGVyU3RlcGAgd2l0aCBwcmVkaWNhdGUgZXF1YWwgdHJ1ZSwgYnV0IGEgbW9yZSBlZmZpY2llbnQgYFNpZGVFZmZlY3RTdGVwYC4KKyogYFRyZWVTdGVwYCBub3cgaGFzIGBUcmVlTWFwUmVkdWNlYCBmb3IgZXhlY3V0aW5nIG9uIGBHcmFwaENvbXB1dGVyYC4KKyogYE5lbzRqVHJhdmVyc2FsLmN5cGhlcigpYCBpcyBmbHVlbnQgdGhyb3VnaG91dC4KKyogUmV2ZXJ0ZWQgYmFjayB0byBUUDIgbW9kZWwgb2YgYGFzKClgIHJlZmVycmluZyB0byBzdGVwIG5hbWVzLCBub3QgdmFyaWFibGUgbmFtZXMgb2Ygc2lkZUVmZmVjdHMuCisqIFVwZGF0ZWQgYEFkZEVkZ2VgLXN0ZXAgdG8gc3VwcG9ydCBwcm9wZXJ0eSBrZXkvdmFsdWUgcGFpcnMgZm9yIGFwcGVuZGluZyB0byBuZXdseSBjcmVhdGVkIGVkZ2VzLgorKiBSZW5hbWVkIGBHcmFwaC5nZXRGZWF0dXJlcygpYCB0byBgR3JhcGguZmVhdHVyZXMoKWAgdG8gYmUgY29uc2lzdGVudCB3aXRoIG90aGVyIEFQSSBtZXRob2RzLgorKiBgVmVydGV4YCBhbmQgYEVkZ2VgIG5vdyBpbXBsZW1lbnQgYWxsIGBHcmFwaFRyYXZlcnNhbGAgbWV0aG9kcyB0byBlbnN1cmUgY29uc2lzdGVuY3kgdGhyb3VnaG91dCBzdGFjay4KKyogYE5lbzRqVHJhdmVyc2FsYCBpcyBhdXRvLWdlbmVyYXRlZCBmcm9tIGBOZW80alRyYXZlcnNhbFN0dWJgIHdpdGggdGVjaG5pcXVlIGdlbmVyYWxpemFibGUgdG8gb3RoZXIgdmVuZG9ycy4KKyogQWRkZWQgdGVzdCBzdWl0ZSB0byBlbnN1cmUgdGhhdCBhbGwgdHJhdmVyc2FscyBhcmUgb2YgdGhlIHNhbWUgdHlwZTogYGcuVmAsIGBnLkVgLCBgZy5vZigpYCwgYHYuaWRlbnRpdHkoKWAsIGBlLmlkZW50aXR5KClgLCB2LSwgZS1tZXRob2RzLgorKiBHaXJhcGggSERGUyBoZWxwZXJzIG5vdyBzdXBwb3J0IGBoZGZzLm1rZGlyKHN0cmluZylgIGFuZCBgbG9jYWwubWtkaXIoc3RyaW5nKWAKKyogQWRkZWQgYEBPcHRJbmAgYW5kIGBAT3B0T3V0YCBmb3IgaW1wbGVtZW50ZXJzIHRvIHNwZWNpZnkgb24gdGhlaXIgYEdyYXBoYCBpbXBsZW1lbnRhdGlvbnMgZm9yIHRlc3QgY29tcGxpYW5jZSBpbmZvcm1hdGlvbi4KKyogYEdyYXBoQ29tcHV0ZXJgIGBNZW1vcnlgIG5vdyBpbW11dGFibGUgYWZ0ZXIgY29tcHV0YXRpb24gaXMgY29tcGxldGUuCisqIERlcGVuZGVuY3kgZ3JhYmJpbmcgZm9yIHBsdWdpbnMgZmlsdGVyIG91dCBzbGY0aiBsb2dnaW5nIGRlcGVuZGVuY2llcyBzbyBhcyB0byBhdm9pZCBtdWx0aXBsZSBiaW5kaW5ncyB3aXRoIHRoZSBzdGFuZGFyZCBUaW5rZXJQb3AgZGlzdHJpYnV0aW9ucy4KKyogRml4ZWQgYEdpcmFwaE1lbW9yeWAgdG8gYmUgZnVsbHkgY29uc2lzdGVudCB3aXRoIEdyYXBoQ29tcHV0ZXIgc3BlY2lmaWNhdGlvbi4KKyogUmVtb3ZlZCBmYXRKYXIgYXNzZW1ibHkgZnJvbSBHaXJhcGgtR3JhcGggYXMgaXQgaXMgbm8gbG9uZ2VkIG5lZWRlZCB3aXRoIGRpc3RyaWJ1dGVkIGNhY2hlIG1vZGVsLgorKiBSZXdvcmtlZCBgR2lyYXBoUmVtb3RlQWNjZXB0b3JgIHRvIHByb3ZpZGUgYSBgcmVzdWx0YCB2YXJpYWJsZSBiYWNrIHRvIHRoZSBjb25zb2xlIHdpdGggYENvbXB1dGVyUmVzdWx0YC4KKyogYFZlcnRleFByb2dyYW1gIGlzIG5vIGxvbmdlciBgU2VyaWFsaXphYmxlYCAodXNlIGBsb2FkU3RhdGVgIGFuZCBgc3RvcmVTdGF0ZWAgZm9yIHdpcmUtcHJvcGFnYXRpb24pLgorKiBNb3ZlZCBgR2lyYXBoR3JhcGguZ2V0T3V0cHV0R3JhcGgoKWAgdG8gYEdpcmFwaEhlbHBlcmAuCisqIENoYW5nZWQgYEdJUkFQSF9HUkVNTElOX0hPTUVgIHRvIGBHSVJBUEhfR1JFTUxJTl9MSUJgIHRvIHJlZmVyZW5jZSBkaXJlY3Rvcnkgd2hlcmUgamFycyBhcmUgdG8gYmUgbG9hZGVkLgorKiBVcGRhdGVkIFJFQURNRSB3aXRoIHJlbGVhc2UgaW5zdHJ1Y3Rpb25zLgorCis9PT0gVGlua2VyUG9wIDMuMC4wLk0xIChSZWxlYXNlIERhdGU6IEF1Z3VzdCAxMiwgMjAxNCkKKworKiBGaXJzdCBvZmZpY2lhbCByZWxlYXNlIG9mIFRpbmtlclBvcDMgYW5kIHRodXMsIG5vIGNoYW5nZXMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jIGIvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NDI2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4xLnguYXNjaWlkb2MKQEAgLTAsMCArMSw2MjkgQEAKKy8vLy8KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8KKz09IFRpbmtlclBvcCAzLjEuMCAoQSAxODcgT24gVGhlIFVuZGVyY292ZXIgR3JlbWxpbnopCisKK2ltYWdlOjpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYXBhY2hlL3RpbmtlcnBvcC9tYXN0ZXIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tZ2FuZ3N0ZXIucG5nW3dpZHRoPTE4NV0KKworW1tyZWxlYXNlLTMtMS04XV0KKz09PSBUaW5rZXJQb3AgMy4xLjggKFJlbGVhc2UgRGF0ZTogQXVndXN0IDIxLCAyMDE3KQorCisqIEZpeGVkIGEgYE1lc3NhZ2VTY29wZWAgYnVnIGluIGBUaW5rZXJHcmFwaENvbXB1dGVyYC4KKyogRml4ZWQgYSBidWcgaW4gYEJpZ0RlY2ltYWxgIGRpdmlzaW9ucyBpbiBgTnVtYmVySGVscGVyYCB0aGF0IHBvdGVudGlhbGx5IHRocmV3IGFuIGBBcml0aG1ldGljRXhjZXB0aW9uYC4KKyogTm9uLWRlc2VyaWFsaXphYmxlIGV4Y2VwdGlvbnMgbm8gbG9uZ2VyIGFkZGVkIHRvIFNjcmlwdFJlY29yZFJlYWRlciBJT0V4Y2VwdGlvbnMuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xNTE5IFRpbmtlckdyYXBoQ29tcHV0ZXIgZG9lc24ndCBoYW5kbGUgbXVsdGlwbGUgTWVzc2FnZVNjb3BlcyBpbiBzaW5nbGUgaXRlcmF0aW9uCisqIFRJTktFUlBPUC0xNzM2IFNhY2sgc3RlcCBldmFsdWF0ZWQgYnkgR3Jvb3Z5IGludGVycHJldHMgbnVtYmVycyBpbiBhbiB1bmV4cGVjdGVkIHdheQorKiBUSU5LRVJQT1AtMTc1NCBTcGFyayBjYW4gbm90IGRlc2VyaWFsaXNlIHNvbWUgU2NyaXB0UmVjb3JkUmVhZGVyIHBhcnNlIGV4Y2VwdGlvbnMKKworW1tyZWxlYXNlLTMtMS03XV0KKz09PSBUaW5rZXJQb3AgMy4xLjcgKFJlbGVhc2UgRGF0ZTogSnVuZSAxMiwgMjAxNykKKworKiBDb25maWd1cmVkIE1vZGVybiBhbmQgVGhlIENyZXcgZ3JhcGhzIHRvIHdvcmsgd2l0aCBhIGludGVnZXIgYElkTWFuYWdlcmAgd2hlbiBgVGlua2VyRmFjdG9yeS5jcmVhdGVYWFgoKWAgaXMgY2FsbGVkLgorKiBBZGRlZCBYU0xUIHRyYW5zZm9ybSBvcHRpb24gdG8gY29udmVydCBUaW5rZXJQb3AgMi54IEdyYXBoTUwgdG8gMy54IEdyYXBoTUwuCisqIEFkZGVkIHZhbGlkYXRpb24gdG8gYFN0YXJWZXJ0ZXhQcm9wZXJ0eWAuCisqIEJ1bXBlZCB0byBKYWNrc29uIDIuOC43LgorKiBGaXhlZCBgRXZlbnRTdHJhdGVneWAgc28gdGhhdCBuZXdseSBhZGRlZCBwcm9wZXJ0aWVzIHRyaWdnZXIgZXZlbnRzIHdpdGggdGhlIG5hbWUgb2YgdGhlIGtleSB0aGF0IHdhcyBhZGRlZC4KKyogRHJvcCB1c2Ugb2Ygaml0cGFjayBmb3IgdGhlIGpiY3J5cHQgYXJ0aWZhY3QgLSB1c2luZyB0aGUgb2ZmaWNpYWwgb25lIGluIE1hdmVuIENlbnRyYWwuCisqIEJ1bXBlZCB0byBHcm9vdnkgMi40LjExLgorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0xNTA0IE11dGF0aW9uTGlzdGVuZXIgZG9lc24ndCBwcm92aWRlIHByb3BlcnR5IGtleSBvbiBwcm9wZXJ0eSBhZGRpdGlvbnMKKyogVElOS0VSUE9QLTE2MDggVFAyLXRvLVRQMyBHcmFwaE1MIFhTTFQKKyogVElOS0VSUE9QLTE2MzMgVXNlIG9yZy5taW5kcm90OmpiY3J5cHQgdjAuNAorKiBUSU5LRVJQT1AtMTY0NSBCdW1wIHRvIEdyb292eSAyLjQuOQorKiBUSU5LRVJQT1AtMTY1NCBVcGdyYWRlIHRvIGphY2tzb24tZGF0YWJpbmQgMi44LjYrIGluIGdyZW1saW4tc2hhZGVkCisqIFRJTktFUlBPUC0xNjU5IERvY2tlciBidWlsZCBzaG91bGQgdXNlIG1hdmVuIHNldHRpbmdzLnhtbAorKiBUSU5LRVJQT1AtMTY2NCBTdGFyVmVydGV4UHJvcGVydHkjcHJvcGVydHkgc2hvdWxkIHRocm93IGFuIE5QRSBpZiB0aGUgdmFsdWUgaXMgbnVsbAorCitbW3JlbGVhc2UtMy0xLTZdXQorPT09IFRpbmtlclBvcCAzLjEuNiAoUmVsZWFzZSBEYXRlOiBGZWJydWFyeSAzLCAyMDE3KQorCisqIEZpeGVkIGJ1ZyBpbiBgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lgLCBpdCB3YXMgbWlzc2luZyBzb21lIGludmFsaWRhdGluZyBzdGVwcy4KKyogUmV0dXJuZWQgYSBjb25maXJtYXRpb24gb24gc2Vzc2lvbiBjbG9zZSBmcm9tIEdyZW1saW4gU2VydmVyLgorKiBVc2Ugbm9uLWRlZmF1bHQgcG9ydCBmb3IgcnVubmluZyB0ZXN0cyBvbiBHcmVtbGluIFNlcnZlci4KKyogRnVsbHkgc2h1dGRvd24gbWV0cmljcyBzZXJ2aWNlcyBpbiBHcmVtbGluIFNlcnZlciBvbiBzaHV0ZG93bi4KKyogRGVwcmVjYXRlZCBgdHJ5UmFuZG9tQ29tbWl0KClgIGluIGBBYnN0cmFjdEdyZW1saW5UZXN0YCAtIHRoZSBhbm5vdGF0aW9uIHdhcyBuZXZlciBhZGRlZCBpbiAzLjEuMSwgYW5kIHdhcyBvbmx5IGRlcHJlY2F0ZWQgdmlhIGphdmFkb2MuCisqIE1pbm9yIGZpeGVzIHRvIHZhcmlvdXMgdGVzdCBmZWF0dXJlIHJlcXVpcmVtZW50cyBpbiBgZ3JlbWxpbi10ZXN0YC4KKyogQWxsb3cgZGV2ZWxvcGVycyB0byBwYXNzIG9wdGlvbnMgdG8gYGRvY2tlciBydW5gIHdpdGggVElOS0VSUE9QX0RPQ0tFUl9PUFRTIGVudmlyb25tZW50IHZhcmlhYmxlCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xNDkzIEdyb292eSBwcm9qZWN0IGRvZXNuJ3QgYnVpbGQgb24gV2luZG93cworKiBUSU5LRVJQT1AtMTU0NSBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSBpcyBidWdneQorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0xNTM4IEdyZW1saW4gU2VydmVyIHNwYXduZWQgYnkgdGVzdCBzdWl0ZXMgc2hvdWxkIHVzZSBhIGRpZmZlcmVudCBwb3J0CisqIFRJTktFUlBPUC0xNTQ0IFJldHVybiBhIGNvbmZpcm1hdGlvbiBvZiBzZXNzaW9uIGNsb3NlCisqIFRJTktFUlBPUC0xNTU2IEFsbG93IEhhZG9vcCB0byBydW4gb24gSVB2NiBzeXN0ZW1zCisqIFRJTktFUlBPUC0xNTU3IEltcHJvdmUgZG9ja2VyIGJ1aWxkIHRpbWUgd2l0aCB0aGlzIG9uZSB3ZWlyZCB0cmljayEKKyogVElOS0VSUE9QLTE1OTggQnVtcCB0byBHcm92eSAyLjQuOAorCitbW3JlbGVhc2UtMy0xLTVdXQorPT09IFRpbmtlclBvcCAzLjEuNSAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE3LCAyMDE2KQorCisqIEltcHJvdmVkIGhhbmRsaW5nIG9mIGBDbHVzdGVyLmNsb3NlKClgIGFuZCBgQ2xpZW50LmNsb3NlKClgIHRvIHByZXZlbnQgdGhlIG1ldGhvZHMgZnJvbSBoYW5naW5nLgorKiBGaXhlZCBhIGJ1ZyBpbiBgTm90U3RlcGAgd2hlcmUgY2hpbGQgcmVxdWlyZW1lbnRzIHdlcmUgbm90IGJlaW5nIGFuYWx5emVkLgorKiBGaXhlZCBvdXRwdXQgcmVkaXJlY3Rpb24gYW5kIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpbiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAuCisqIENvcnJlY3RlZCBuYW1pbmcgb2YgYGdfd2l0aFBhdGhfVl9hc1hhWF9vdXRfb3V0X21hcFhhX25hbWVfaXRfbmFtZVhgIGFuZCBgZ193aXRoUGF0aF9WX2FzWGFYX291dF9tYXBYYV9uYW1lWGAgaW4gYE1hcFRlc3RgLgorKiBJbXByb3ZlZCBzZXNzaW9uIGNsZWFudXAgd2hlbiBhIGNsb3NlIGlzIHRyaWdnZXJlZCBieSB0aGUgY2xpZW50LgorKiBSZW1vdmVkIHRoZSBgYXBwdmV5b3IueW1sYCBmaWxlIGFzIHRoZSBBcHBWZXlvciBidWlsZCBpcyBubyBsb25nZXIgZW5hYmxlZCBieSBBcGFjaGUgSW5mcmFzdHJ1Y3R1cmUuCisqIEZpeGVkIFRpbmtlckdyYXBoIHdoaWNoIHdhcyBub3Qgc2F2aW5nIG9uIGBjbG9zZSgpYCBpZiB0aGUgcGF0aCBvbmx5IGNvbnNpc3RlZCBvZiB0aGUgZmlsZSBuYW1lLgorKiBGaXhlZCBhIGJ1ZyBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAgd2hpY2ggZGlkbid0IHVzZSB0aGUgYE5vdFN0ZXBgIHByb3Blcmx5LgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTE1OCBncmVtbGluLnNoIC12IGVtaXRzIGxvZzRqIGluaXRpYWxpemF0aW9uIGVycm9ycworKiBUSU5LRVJQT1AtMTM5MSBpc3N1ZSB3aXRoIHdoZXJlIGZpbHRlcgorKiBUSU5LRVJQT1AtMTQ0MiBLaWxsaW5nIHNlc3Npb24gc2hvdWxkIG1ha2UgYmV0dGVyIGF0dGVtcHQgdG8gY2xlYW51cAorKiBUSU5LRVJQT1AtMTQ1MSBUaW5rZXJHcmFwaCBwZXJzaXN0ZW5jZSBjYW5ub3QgaGFuZGxlIGEgc2luZ2xlIGZpbGUgbmFtZSBhcyB0aGUgZ3JhcGggbG9jYXRpb24KKyogVElOS0VSUE9QLTE0NjcgSW1wcm92ZSBjbG9zZSgpIG9wZXJhdGlvbnMgb24gdGhlIEphdmEgZHJpdmVyCisqIFRJTktFUlBPUC0xNDc4IFByb3BvZ2F0ZSBTY3JpcHRFbmdpbmUgZml4ZXMgZnJvbSBncm9vdnkgdG8gR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZQorKiBUSU5LRVJQT1AtMTUxMiBncmVtbGluLXNlcnZlci1jbGFzc2ljLnlhbWwgaXMgYnJva2VuCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTkyNyBiaW4vcHVibGlzaC1kb2NzLnNoIHNob3VsZCBvbmx5IHVwbG9hZCBkaWZmcy4KKyogVElOS0VSUE9QLTEyNjQgSW1wcm92ZSBCTFZQIGRvY3MKKyogVElOS0VSUE9QLTE0NzcgTWFrZSBEZXBlbmRlbmN5R3JhYmJlclRlc3QgYW4gaW50ZWdyYXRpb24gdGVzdAorCitbW3JlbGVhc2UtMy0xLTRdXQorPT09IFRpbmtlclBvcCAzLjEuNCAoUmVsZWFzZSBEYXRlOiBTZXB0ZW1iZXIgNiwgMjAxNikKKworKiBJbXByb3ZlZCB0aGUgZXJyb3IgcHJvdmlkZWQgYnkgYSBjbGllbnQtc2lkZSBzZXNzaW9uIGlmIG5vIGhvc3RzIHdlcmUgYXZhaWxhYmxlLgorKiBGaXhlZCBhIGJ1ZyBpbiBgUHJvcGVydGllc1Rlc3RgIHdoaWNoIGFzc3VtZWQgbG9uZyBpZCB2YWx1ZXMuCisqIEZpeGVkIGEgYnVnIGluIGBTdGFyR3JhcGhgIGFyb3VuZCBzZWxmLWVkZ2VzLgorKiBGaXhlZCBhIHBvdGVudGlhbCBsZWFrIG9mIGEgYFJlZmVyZW5jZUNvdW50ZWRgIHJlc291cmNlIGluIEdyZW1saW4gU2VydmVyLgorKiBSZW5hbWVkIGRpc3RyaWJ1dGlvbnMgdG8gbWFrZSB0aGUgcHJlZml4ICJhcGFjaGUtdGlua2VycG9wLSIgYXMgb3Bwb3NlZCB0byBqdXN0ICJhcGFjaGUtIi4KKyogRml4ZWQgYSBwcm9ibGVtIChwcmV2aW91c2x5IHRob3VnaHQgcmVzb2x2ZWQgb24gMy4xLjMpIGNhdXNpbmcgR3JlbWxpbiBTZXJ2ZXIgdG8gbG9jayB1cCB3aGVuIHBhcmFsbGVsIHJlcXVlc3RzIHdlcmUgc3VibWl0dGVkIG9uIHRoZSBzYW1lIHNlc3Npb24gaWYgdGhvc2UgcGFyYWxsZWwgcmVxdWVzdHMgaW5jbHVkZWQgYSBzY3JpcHQgdGhhdCBibG9ja2VkIGluZGVmaW5pdGVseS4KKyogRml4ZWQgYnVnIGluIGBUYWlsR2xvYmFsU3RlcGAgd2hlcmUgZXhjZXNzIGJ1bGsgd2FzIG5vdCBhY2NvdW50ZWQgZm9yIGNvcnJlY3RseS4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTEzNTAgU2VydmVyIGxvY2tzIHdoZW4gc3VibWl0dGluZyBwYXJhbGxlbCByZXF1ZXN0cyBvbiBzZXNzaW9uCisqIFRJTktFUlBPUC0xMzc1IFBvc3NpYmxlIEJ5dGVCdWYgbGVhayBmb3IgY2VydGFpbiB0cmFuc2FjdGlvbmFsIHNjZW5hcmlvcworKiBUSU5LRVJQT1AtMTM3NyBDbG9zaW5nIGEgcmVtb3RlIGluICJjb25zb2xlIG1vZGUiIGhhcyBiYWQgbWVzc2FnZQorKiBUSU5LRVJQT1AtMTM3OSB1bmFjY291bnRlZCBleGNlc3MgaW4gVGFpbEdsb2JhbFN0ZXAKKyogVElOS0VSUE9QLTEzOTcgU3RhclZlcnRleCBzZWxmIGVkZ2UgaGFzIGJ1Z2d5IGludGVyYWN0aW9uIHdpdGggZ3JhcGggZmlsdGVycworKiBUSU5LRVJQT1AtMTQxOSBXcm9uZyBleGNlcHRpb24gd2hlbiBhIFNlc3Npb25lZENsaWVudCBpcyBpbml0aWFsaXplZCB3aXRoIG5vIGF2YWlsYWJsZSBob3N0CisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTk4OSBEZWZhdWx0IGRvY3VtZW50YXRpb24gc2hvdWxkIGJlIHJlZmVyZW5jZS9pbmRleC5odG1sCisqIFRJTktFUlBPUC0xMzc2IFJlbmFtZSBUaW5rZXJQb3AgYXJ0aWZhY3RzCisqIFRJTktFUlBPUC0xNDEzIFByb3BlcnRpZXNUZXN0I2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWG5hbWVYIGFzc3VtZXMgdGhhdCBpZHMgYXJlIGxvbmdzCisqIFRJTktFUlBPUC0xNDE2IFdyaXRlIEdyZW1saW4gU2VydmVyIGxvZyBmaWxlcyBzb21ld2hlcmUgZHVyaW5nIGRvYyBnZW5lcmF0aW9uCisqIFRJTktFUlBPUC0xNDE4IENvcmVUcmF2ZXJzYWxUZXN0cyBkZXBlbmQgb24gbWlzc2luZyBmdW5jdGlvbmFsaXR5CisKK1tbcmVsZWFzZS0zLTEtM11dCis9PT0gVGlua2VyUG9wIDMuMS4zIChSZWxlYXNlIERhdGU6IEp1bHkgMTgsIDIwMTYpCisKKyogRml4ZWQgYnVnIGluIGBTdWJncmFwaFN0ZXBgIHdoZXJlIGZlYXR1cmVzIHdlcmUgbm90IGJlaW5nIGNoZWNrZWQgcHJvcGVybHkgcHJpb3IgdG8gcmVhZGluZyBtZXRhLXByb3BlcnRpZXMuCisqIEVuc3VyZWQgY2FsbHMgdG8gYFJlc3VsdC5oYXNOZXh0KClgIHdlcmUgaWRlbXBvdGVudC4KKyogQXZvaWQgaGFtY3Jlc3QgY29uZmxpY3QgYnkgdXNpbmcgbW9ja2l0by1jb3JlIGluc3RlYWQgb2YgbW9ja2l0by1hbGwgZGVwZW5kZW5jeSBpbiBgZ3JlbWxpbi10ZXN0YC4KKyogRml4ZWQgYnVnIGluIGBHcmVtbGluRXhlY3V0b3JgIGNhdXNpbmcgR3JlbWxpbiBTZXJ2ZXIgdG8gbG9jayB1cCB3aGVuIHBhcmFsbGVsIHJlcXVlc3RzIHdlcmUgc3VibWl0dGVkIG9uIHRoZSBzYW1lIHNlc3Npb24gaWYgdGhvc2UgcGFyYWxsZWwgcmVxdWVzdHMgaW5jbHVkZWQgYSBzY3JpcHQgdGhhdCBibG9ja2VkIGluZGVmaW5pdGVseS4KKyogQ2hhbmdlZCBgR3JlbWxpbkV4ZWN1dG9yYCB0aW1lb3V0IHNjaGVkdWxpbmcgc28gdGhhdCB0aGUgdGltZXIgd291bGQgbm90IHN0YXJ0IHVudGlsIGEgdGltZSBjbG9zZXIgdG8gdGhlIGFjdHVhbCBzdGFydCBvZiBzY3JpcHQgZXZhbHVhdGlvbi4KKyogRml4ZWQgYnVnIGluIGBTdWJncmFwaFN0cmF0ZWd5YCB3aGVyZSBzdGVwIGxhYmVscyB3ZXJlIG5vdCBiZWluZyBwcm9wb2dhdGVkIHByb3Blcmx5IHRvIG5ldyBzdGVwcyBpbmplY3RlZCBieSB0aGUgc3RyYXRlZ3kuCisqIEZpeCBpbmNvcnJlY3QgdGVzdCBgRmVhdHVyZVJlcXVpcmVtZW50YCBhbm5vdGF0aW9ucy4KKyogRGVmYXVsdGVkIHRvIGBFZGdlLkRFRkFVTFRgIGlmIG5vIGVkZ2UgbGFiZWwgd2FzIHN1cHBsaWVkIGluIEdyYXBoTUwuCisqIEZpeGVkIGJ1ZyBpbiBgSW9HcmFwaFRlc3RgIGNhdXNpbmcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOiBVUkkgaXMgbm90IGhpZXJhcmNoaWNhbCBlcnJvciBmb3IgZXh0ZXJuYWwgZ3JhcGggaW1wbGVtZW50YXRpb25zLgorKiBGaXhlZCBidWcgaW4gYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVGaWxlU2FuZGJveFRlc3RgIHJlc291cmNlIGxvYWRpbmcKKyogSW1wcm92ZWQgYFRpbmtlckdyYXBoYCBwZXJmb3JtYW5jZSB3aGVuIGl0ZXJhdGluZyB2ZXJ0aWNlcyBhbmQgZWRnZXMuCisqIEZpeGVkIGEgYnVnIHdoZXJlIHRpbWVvdXQgZnVuY3Rpb25zIHByb3ZpZGVkIHRvIHRoZSBgR3JlbWxpbkV4ZWN1dG9yYCB3ZXJlIG5vdCBleGVjdXRpbmcgaW4gdGhlIHNhbWUgdGhyZWFkIGFzIHRoZSBzY3JpcHQgZXZhbHVhdGlvbi4KKyogRml4ZWQgYSBidWcgaW4gdGhlIGRyaXZlciB3aGVyZSBtYW55IHBhcmFsbGVsIHJlcXVlc3RzIG92ZXIgYSBzZXNzaW9uIHdvdWxkIHNvbWV0aW1lcyBmb3JjZSBhIGNvbm5lY3Rpb24gdG8gY2xvc2UgYW5kIHJlcGxhY2UgaXRzZWxmLgorKiBHcmFwaCBwcm92aWRlcnMgc2hvdWxkIG5vIGxvbmdlciByZWx5IG9uIHRoZSB0ZXN0IHN1aXRlIHRvIHZhbGlkYXRlIHRoYXQgaHlwaGVucyB3b3JrIGZvciBwcm9wZXJ0eSBrZXlzLgorKiBPcHRpbWl6ZWQgYSBmZXcgc3BlY2lhbCBjYXNlcyBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAuCisqIEFkZGVkIG1vcmUgImludmFsaWQiIHZhcmlhYmxlIGJpbmRpbmdzIHRvIHRoZSBsaXN0IHVzZWQgYnkgR3JlbWxpbiBTZXJ2ZXIgdG8gdmFsaWRhdGUgaW5jb21pbmcgYmluZGluZ3Mgb24gcmVxdWVzdHMuCisqIEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBgQ29ubmVjdGlvblBvb2xgIGluIHRoZSBkcml2ZXIgd291bGQgbm90IGdyb3cgd2l0aCBjZXJ0YWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyogRml4ZWQgYSBidWcgd2hlcmUgcGF1c2VzIGluIEdyZW1saW4gU2VydmVyIHdyaXRpbmcgdG8gYW4gb3ZlcnRheGVkIGNsaWVudCB3b3VsZCBnZW5lcmF0ZSB1bmV4cGVjdGVkIGBGYXN0Tm9TdWNoRWxlbWVudEV4Y2VwdGlvbmAgZXJyb3JzLgorKiBOYW1lZCB0aGUgdGhyZWFkIHBvb2wgdXNlZCBieSBHcmVtbGluIFNlcnZlciBzZXNzaW9uczogImdyZW1saW4tc2VydmVyLXNlc3Npb24tJG4iLgorKiBGaXhlZCBhIGJ1ZyBpbiBgQnVsa1NldC5lcXVhbHMoKWAgd2hpY2ggbWFkZSBpdHNlbGYgYXBwYXJlbnQgd2hlbiB1c2luZyBgc3RvcmUoKWAgYW5kIGBhZ2dyZWdhdGUoKWAgd2l0aCBsYWJlbGVkIGBjYXAoKWAuCisqIEZpeGVkIGEgYnVnIHdoZXJlIGBSZXN1bHQub25lKClgIGNvdWxkIHBvdGVudGlhbGx5IGJsb2NrIGluZGVmaW5pdGVseSB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCisqIEVuc3VyZWQgdGhhdCBhbGwgYXNzZXJ0cyBvZiB2ZXJ0ZXggYW5kIGVkZ2UgY291bnRzIHdlcmUgYmVpbmcgYXBwbGllZCBwcm9wZXJseSBpbiB0aGUgdGVzdCBzdWl0ZS4KKyogRml4ZWQgYnVnIGluIGBncmVtbGluLWRyaXZlcmAgd2hlcmUgY2VydGFpbiBjaGFubmVsLWxldmVsIGVycm9ycyB3b3VsZCBub3QgYWxsb3cgdGhlIGRyaXZlciB0byByZWNvbm5lY3QuCisqIGBTdWJncmFwaFN0ZXBgIG5vdyBjb25zdWx0cyB0aGUgcGFyZW50IGdyYXBoIGZlYXR1cmVzIHRvIGRldGVybWluZSBjYXJkaW5hbGl0eSBvZiBhIHByb3BlcnR5LgorKiBVc2Ugb2YgYEN0cmwtQ2AgaW4gR3JlbWxpbiBDb25zb2xlIG5vdyB0cmlnZ2VycyBjbG9zaW5nIG9mIG9wZW4gcmVtb3Rlcy4KKyogQnVtcGVkIFNMRjRKIHRvIDEuNy4yMSBhcyBwcmV2aW91cyB2ZXJzaW9ucyBzdWZmZXJlZCBmcm9tIGEgbWVtb3J5IGxlYWsuCisqIEZpeGVkIGEgYnVnIGluIGBOZW80akdyYXBoU3RlcFN0cmF0ZWd5YCB3aGVyZSBpdCB3YXNuJ3QgZGVmaW5lZCBwcm9wZXJseSBhcyBhIGBQcm92aWRlck9wdGltaXphdGlvblN0cmF0ZWd5YC4KKyogUmVuYW1lZCBgQW5kVGVzdC5nZXRfZ19WX2FuZFhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndF8yWF9uYW1lYCB0byBgZ2V0X2dfVl9hbmRYaGFzWGFnZV9ndF8yN1hfX291dEVfY291bnRfZ3RlXzJYX25hbWVgIHRvIG1hdGNoIHRoZSB0cmF2ZXJzYWwgYmVpbmcgdGVzdGVkLgorKiBGaXhlZCBhIHNlbGYtbG9vcCBidWcgaW4gYFN0YXJHcmFwaGAuCisqIEFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBkaXNhYmxpbmcgYDpyZW1vdGVgIHRpbWVvdXQgd2l0aCBgOnJlbW90ZSBjb25maWcgdGltZW91dCBub25lYC4KKyogQWRkZWQgYGluaXQtdHAtc3Bhcmsuc2hgIHRvIEdyZW1saW4gQ29uc29sZSBiaW5hcnkgZGlzdHJpYnV0aW9uLgorKiBGaXhlZCBidWcgd2hlcmUgdXNlIG9mIGA6eGAgaW4gYSBHcmVtbGluIENvbnNvbGUgaW5pdGlhbGl6YXRpb24gc2NyaXB0IHdvdWxkIGdlbmVyYXRlIGEgc3RhY2sgdHJhY2UuCisqIEFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBHcmVtbGluIERyaXZlciBhbmQgU2VydmVyIHRvIG92ZXJyaWRlIHRoZSBTU0wgY29uZmlndXJhdGlvbiB3aXRoIGFuIGBTc2xDb250ZXh0YC4KKyogQWRkZWQgZHJpdmVyIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIFNTTDogYGtleUNlcnRDaGFpbkZpbGVgLCBga2V5RmlsZWAgYW5kIGBrZXlQYXNzd29yZGAuCisqIEZpeGVkIGJ1ZyB3aGVyZSB0cmFuc2FjdGlvbiBtYW5hZ2VkIHNlc3Npb25zIHdlcmUgbm90IHByb3Blcmx5IHJvbGxpbmcgYmFjayB0cmFuc2FjdGlvbnMgZm9yIGV4Y2VwdGlvbnMgZW5jb3VudGVyZWQgZHVyaW5nIHNjcmlwdCBldmFsdWF0aW9uLgorKiBGaXhlZCBidWcgaW4gYDp1bmluc3RhbGxgIGNvbW1hbmQgaWYgdGhlIGRlZmF1bHQgYC9leHRgIGRpcmVjdG9yeSB3YXMgbm90IHVzZWQuCisqIEFkZGVkIHN1cHBvcnQgdG8gR3JlbWxpbiBEcml2ZXIgdG8gYWxsb3cgZWl0aGVyIHBsYWluIHRleHQgb3IgR1NTQVBJIFNBU0wgYXV0aGVudGljYXRpb24gYWxsb3dpbmcgdGhlIGNsaWVudCB0byBwYXNzIHRoZSBTQVNMIG1lY2hhbmlzbSBpbiB0aGUgcmVxdWVzdC4KKyogSW1wcm92ZWQgZHJ5UnVuIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBkb2NzIHByb2Nlc3Nvci4gSXQncyBub3cgcG9zc2libGUgdG8gZHJ5IHJ1biAob3IgZnVsbCBydW4pIG9ubHkgc3BlY2lmaWMgZmlsZXMuCisqIEFkZGVkIHByZWNvbXBpbGUgb2YgYFNjcmlwdElucHV0Rm9ybWF0YCBzY3JpcHRzIHRvIGBTY3JpcHRSZWNvcmRSZWFkZXJgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC05MDYgSW5zdGFsbCBwbHVnaW4gYWx3YXlzIGZhaWxzIGFmdGVyIGZpcnN0IHVucmVzb2x2ZWQgZGVwZW5kZW5jeQorKiBUSU5LRVJQT1AtMTA4OCBQcmVzZXJ2ZSBDYXJkaW5hbGl0eSBpbiBTdWJncmFwaAorKiBUSU5LRVJQT1AtMTA5MiBHcmVtbGluIENvbnNvbGUgaW5pdCBzY3JpcHQgd2l0aCA6eCB0aHJvd3MgZXhjZXB0aW9uCisqIFRJTktFUlBPUC0xMTM5IFtOZW80SkdyYXBoXSBHcmFwaFRyYXZlcnNhbCB3aXRoIFN1YmdyYXBoU3RyYXRlZ3kgcmVtb3ZlcyBhZGRMYWJlbFN0ZXAgKGFzKCJiIikpCisqIFRJTktFUlBPUC0xMTk2IENhbGxzIHRvIFJlc3VsdC5vbmUoKSBtaWdodCBibG9jayBpbmRlZmluaXRlbHkKKyogVElOS0VSUE9QLTEyMTUgTGFiZWxlZCBhIFNpZGVFZmZlY3RDYXBTdGVwIGNhdXNlIHByb2JsZW1zLgorKiBUSU5LRVJQT1AtMTI0MiBTY3JpcHRFbmdpbmVUZXN0IHJhbmRvbWx5IGhhbmdzIGluZGVmaW5hdGVseS4KKyogVElOS0VSUE9QLTEyNTcgQmFkIFNhY2tUZXN0IHZhcmlhYmxlIHVzZS4KKyogVElOS0VSUE9QLTEyNjUgTWFuYWdlZCBTZXNzaW9uIEV2YWwgRXhjZXB0aW9ucyBSb2xsYmFjaworKiBUSU5LRVJQT1AtMTI3MiBHcmVtbGluIENvbnNvbGUgZGlzdHJpYnV0aW9uIG5lZWRzIGJpbi9pbml0LXRwLXNwYXJrLnNoCisqIFRJTktFUlBPUC0xMjg0IFN0YXJHcmFwaCBkb2VzIG5vdCBoYW5kbGUgc2VsZi1sb29wcyBjb3JyZWN0bHkuCisqIFRJTktFUlBPUC0xMzAwIE1hbnkgYXNzZXJ0cyBhcm91bmQgdmVydGV4L2VkZ2UgY291bnRzIG9uIGdyYXBocyBub3QgYXBwbGllZAorKiBUSU5LRVJQT1AtMTMxNyBJb0dyYXBoVGVzdCB0aHJvd3MgZXJyb3I6IFVSSSBpcyBub3QgaGllcmFyY2hpY2FsCisqIFRJTktFUlBPUC0xMzE4IGphdmEubGFuZy5Ob1N1Y2hNZXRob2RFcnJvcjogb3JnL2hhbWNyZXN0L01hdGNoZXIuZGVzY3JpYmVNaXNtYXRjaAorKiBUSU5LRVJQT1AtMTMxOSBzZXZlcmFsIEZlYXR1cmVSZXF1aXJlbWVudCBhbm5vdGF0aW9ucyBhcmUgaW5jb3JyZWN0IGluIGdyZW1saW4tdGVzdAorKiBUSU5LRVJQT1AtMTMyMCBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lRmlsZVNhbmRib3hUZXN0IHRocm93cyBlcnJvcjogVVJJIGlzIG5vdCBoaWVyYXJjaGljYWwKKyogVElOS0VSUE9QLTEzMjQgQmV0dGVyIGVycm9yIGZvciBpbnZhbGlkIGFyZ3MgdG8gYWRkVigpCisqIFRJTktFUlBPUC0xMzUwIFNlcnZlciBsb2NrcyB3aGVuIHN1Ym1pdHRpbmcgcGFyYWxsZWwgcmVxdWVzdHMgb24gc2Vzc2lvbgorKiBUSU5LRVJQT1AtMTM1MSBOdW1iZXIgb2YgY29ubmVjdGlvbnMgZ29pbmcgYmV5b25kIHRoZSBwb29sIG1heCBzaXplCisqIFRJTktFUlBPUC0xMzUyIENvbm5lY3Rpb24gUG9vbCBkb2Vzbid0IGFsd2F5cyBncm93CisqIFRJTktFUlBPUC0xMzU5IEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBjYWxsaW5nIHN1YmdyYXBoKCkgb24gTmVvNGpHcmFwaAorKiBUSU5LRVJQT1AtMTM2MCBpbnRlcm1pdHRlbnQgZXJyb3IgaW4gc3BhcmstZ3JlbWxpbiBpbnRlZ3JhdGlvbiB0ZXN0CisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTkzOSBOZW80akdyYXBoIHNob3VsZCBzdXBwb3J0IEhpZ2hBdmFpbGFiaWxpdHkgKE5lbzRqSEEpLgorKiBUSU5LRVJQT1AtMTAwMyBTZXR0aW5nIHVwIGxhdGVzdC9jdXJyZW50IGxpbmtzIGZvciBiaW5zIGFuZCBkb2NzLgorKiBUSU5LRVJQT1AtMTAyMCBQcm92aWRlIC0tZHJ5UnVuIHNlbGVjdGl2aXR5IGZvciAiaGFsZiBwdWJsaXNoaW5nIiBkb2NzLgorKiBUSU5LRVJQT1AtMTA2MyBUaW5rZXJHcmFwaCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMKKyogVElOS0VSUE9QLTEyMjkgTW9yZSBEZXNjcmlwdGl2ZSBNZXNzYWdpbmcgZm9yIDpyZW1vdGUgY29uc29sZQorKiBUSU5LRVJQT1AtMTI2MCBMb2cgZm9yIHZhbGlkYXRlLWRpc3RyaWJ1dGlvbi5zaAorKiBUSU5LRVJQT1AtMTI2MyBQYXNzIFNBU0wgbWVjaGFuaXNtIG5hbWUgdGhyb3VnaCB3aXRoIGluaXRpYWwgU0FTTCByZXNwb25zZQorKiBUSU5LRVJQT1AtMTI2NyBDb25maWd1cmUgQ29uc29sZSBmb3Igbm8gdGltZW91dCBvbiByZW1vdGUgcmVxdWVzdHMKKyogVElOS0VSUE9QLTEyNjkgTW9yZSBTU0wgc2V0dGluZ3MgZm9yIGRyaXZlcgorKiBUSU5LRVJQT1AtMTI5NSBQcmVjb21waWxlIFNjcmlwdElucHV0Rm9ybWF0IHNjcmlwdHMgb25jZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2YgU2NyaXB0UmVjb3JkUmVhZGVyCisqIFRJTktFUlBPUC0xMzAxIFByb3ZpZGUgSmF2YWRvYyBmb3IgU2NyaXB0SW5wdXQvT3V0cHV0Rm9ybWF0J3MKKyogVElOS0VSUE9QLTEzMDIgQ3RybC1DIHNob3VsZCBraWxsIG9wZW4gcmVtb3RlcyBpbiBDb25zb2xlCisqIFRJTktFUlBPUC0xMzEyIC5jb3VudCgpLmlzKDApIGlzIG5vdCBwcm9wZXJseSBvcHRpbWl6ZWQKKyogVElOS0VSUE9QLTEzMTQgSW1wcm92ZSBlcnJvciBkZXRlY3Rpb24gaW4gZG9jcyBwcmVwcm9jZXNzb3IKKyogVElOS0VSUE9QLTEzNTQgSW5jbHVkZSBhbGwgc3RhdGljIGVudW0gaW1wb3J0cyBpbiByZXF1ZXN0IHZhbGlkYXRpb24gZm9yIGJpbmRpbmdzICooYnJlYWtpbmcpKgorCitbW3JlbGVhc2UtMy0xLTItaW5jdWJhdGluZ11dCis9PT0gVGlua2VyUG9wIDMuMS4yIChSZWxlYXNlIERhdGU6IEFwcmlsIDgsIDIwMTYpCisKKyogRml4ZWQgdHdvIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAtcG90ZW50aWFsIHNpdHVhdGlvbnMgaW4gYE9iamVjdFdyaXRhYmxlYC4KKyogUHJvdmlkZWQgRG9ja2VyIHNjcmlwdCB0aGF0IGFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIHNldmVyYWwgYnVpbGQgdGFza3Mgd2l0aGluIGEgRG9ja2VyIGNvbnRhaW5lci4KKyogQWRkZWQgYSBwZXItcmVxdWVzdCBgc2NyaXB0RXZhbHVhdGlvblRpbWVvdXRgIG9wdGlvbiB0byB0aGUgR3JlbWxpbiBTZXJ2ZXIgcHJvdG9jb2wuCisqIENoYW5nZWQgYERyaXZlclJlbW90ZUFjY2VwdG9yYCB0byBzZW5kIHNjcmlwdHMgYXMgbXVsdGktbGluZS4KKyogRml4ZWQgYSBidWcgaW4gYGdyZW1saW4tZHJpdmVyYCB3aGVyZSBjb25uZWN0aW9ucyB3ZXJlIG5vdCByZXR1cm5pbmcgdG8gdGhlIHBvb2wgYWZ0ZXIgbWFueSBjb25zZWN1dGl2ZSBlcnJvcnMuCisqIEZpeGVkIGEgYnVnIHdoZXJlIGB0cmVlKClgIGRpZCBub3Qgc2VyaWFsaXplIGludG8gR3JhcGhTT04uCisqIEJ1bXBlZCB0byBTTEY0aiAxLjcuMTkuCisqIEJ1bXBlZCB0byBBcGFjaGUgSGFkb29wIDIuNy4yLgorKiBGaXhlZCBhIGJ1ZyBpbiBgZ3JlbWxpbi1kcml2ZXJgIHdoZXJlIGEgcmVhbGx5IGZhc3QgY2FsbCB0byBnZXQgYSBgRnV0dXJlYCB0byB3YWl0IGZvciBhIHJlc3VsdCBtaWdodCBub3QgcmVnaXN0ZXIgYW4gZXJyb3IgcmFpc2VkIGZyb20gdGhlIHNlcnZlci4KKyogRml4ZWQgYSBzZXZlcmUgYnVnIHdoZXJlIGBMUF9PX09CX1BfU19TRV9TTF9UcmF2ZXJzZXJgIHdhcyBub3QgcmVnaXN0ZXJlZCB3aXRoIGBHcnlvTWFwcGVyYC4KKyogVGhlIGZ1dHVyZSBmcm9tIGBHcmVtbGluRXhlY3V0b3IuZXZhbCgpYCBpcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIGVudGlyZSBldmFsdWF0aW9uIGxpZmVjeWxlIGlzIGNvbXBsZXRlZC4KKyogU3BhcmsgYE1lbW9yeWAgdXNlcyBgY29sbGVjdCgpLml0ZXJhdG9yKClgIGluc3RlYWQgb2YgYHRvTG9jYWxJdGVyYXRvcigpYCB0byByZWR1Y2Ugbm9pc2UgaW4gU3BhcmsgVUkuCisqIEFkZGVkIHRoZSBgOnJlbW90ZSBjb25zb2xlYCBvcHRpb24gd2hpY2ggZmxpcHMgdGhlIEdyZW1saW4gQ29uc29sZSBpbnRvIGEgcmVtb3RlLW9ubHkgbW9kZSB3aGVyZSBhbGwgc2NyaXB0IGV2YWx1YXRpb24gaXMgcm91dGVkIHRvIHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCByZW1vdGUsIHdoaWNoIHJlbW92ZXMgdGhlIG5lZWQgdG8gdXNlIHRoZSBgOj5gIGNvbW1hbmQuCisqIEFkZGVkIGBhbGxvd1JlbW90ZUNvbnNvbGUoKWAgdG8gdGhlIGBSZW1vdGVBY2NlcHRvcmAgaW50ZXJmYWNlLgorKiBUaGUgYDpyZW1vdGVgIGZvciBgdGlua2VycG9wLnNlcnZlcmAgbm93IGluY2x1ZGVzIGFuIG9wdGlvbiB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gYXMgYSAic2Vzc2lvbiIuCisqIFByb3ZpZGVkIGFuIGltcGxlbWVudGF0aW9uIGZvciBjYWxscyB0byBgU2Vzc2lvbmVkQ2xpZW50LmFsaWFzKClgLCB3aGljaCBmb3JtZXJseSB0aHJldyBhbiBgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb25gLgorKiBCdW1wZWQgdG8gY29tbW9ucy1jb2xsZWN0aW9ucyAzLjIuMi4KKyogRml4ZWQgYSBidWcgd2hlcmUgYE9yZGVyR2xvYmFsU3RlcGAgYW5kIGBPcmRlckxvY2FsU3RlcGAgd2VyZSBub3QgaW5jb3Jwb3JhdGluZyB0aGVpciBjaGlsZHJlbidzIHRyYXZlcnNlciByZXF1aXJlbWVudHMuCisqIEZpeGVkIGEgY29tcGlsYXRpb24gYnVnIGluIGBUcmF2ZXJzYWxFeHBsYW5hdGlvbmAuCisqIEZpeGVkIGJ1ZyB3aGVyZSBhIHNlc3Npb24gZXhwbGljaXRseSBjbG9zZWQgd2FzIGJlaW5nIGNsb3NlZCBhZ2FpbiBieSBzZXNzaW9uIGV4cGlyYXRpb24uCisqIEltcHJvdmVkIHRoZSByZWNvdmVyeSBvcHRpb25zIGZvciBgZ3JlbWxpbi1kcml2ZXJgIGFmdGVyIGZhaWxlZCByZXF1ZXN0cyB0byBHcmVtbGluIFNlcnZlci4KKyogQWRkZWQgYG1heFdhaXRGb3JTZXNzaW9uQ2xvc2VgIHRvIHRoZSBzZXR0aW5ncyBmb3IgYGdyZW1saW4tZHJpdmVyYC4KKyogQnVtcGVkIHRvIE5ldHR5IDQuMC4zNC5GaW5hbC4KKyogQWRkZWQgImludGVycHJldGVyIG1vZGUiIGZvciB0aGUgYFNjcmlwdEVuZ2luZWAgYW5kIEdyZW1saW4gU2VydmVyIHdoaWNoIGFsbG93cyB2YXJpYWJsZXMgZGVmaW5lZCB3aXRoIGBkZWZgIG9yIGEgdHlwZSB0byBiZSByZWNvZ25pemVkIGFzICJnbG9iYWwiLgorKiBCdW1wZWQgdG8gQXBhY2hlIEdyb292eSAyLjQuNi4KKyogQWRkZWQgdGhlIGBncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXJgIGFyY2hldHlwZSB0aGF0IGRlbW9uc3RyYXRlcworKiBBZGRlZCB0aGUgYGdyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoYCBhcmNoZXR5cGUgdGhhdCBkZW1vbnN0cmF0ZXMgYSBiYXNpYyBwcm9qZWN0IHRoYXQgdXNlcyBUaW5rZXJHcmFwaC4KKyogQWRkZWQgYGdyZW1saW4tYXJjaGV0eXBlYCBtb2R1bGUgdG8gaG91c2UgVGlua2VyUG9wICJleGFtcGxlcyIuCisqIEZpeGVkIGEgY29uZGl0aW9uIHdoZXJlIGBDb25uZWN0aW9uUG9vbGAgaW5pdGlhbGl6YXRpb24gaW4gdGhlIGRyaXZlciB3b3VsZCBwcmVzZW50IGEgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBvbiBpbml0aWFsaXphdGlvbiBpZiB0aGVyZSB3ZXJlIGVycm9ycyBjb25zdHJ1Y3RpbmcgdGhlIHBvb2wgaW4gZnVsbC4KKyogRml4ZWQgYSBidWcgaW4gdGhlIHJvdW5kLXJvYmluIGxvYWQgYmFsYW5jaW5nIHN0cmF0ZWd5IGluIHRoZSBkcml2ZXIgd291bGQgd2FzdGUgcmVxdWVzdHMgcG90ZW50aWFsbHkgc2VuZGluZyBtZXNzYWdlcyB0byBkZWFkIGhvc3RzLgorKiBBZGRlZCBuZXcgUHJvdmlkZXIgRG9jdW1lbnRhdGlvbiBib29rIC0gY29udGVudCBmb3IgdGhpcyBib29rIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24uCisqIEZpeGVkIGEgYnVnIHdoZXJlIG11bHRpcGxlICJjbG9zZSIgcmVxdWVzdHMgd2VyZSBiZWluZyBzZW50IGJ5IHRoZSBkcml2ZXIgb24gYENsaWVudC5jbG9zZSgpYC4KKyogRml4ZWQgYW4gYFByb3BlcnR5YCBhdHRhY2ggYnVnIHRoYXQgc2hvd3MgdXAgaW4gc2VyaWFsaXphdGlvbi1iYXNlZCBgR3JhcGhDb21wdXRlcmAgaW1wbGVtZW50YXRpb25zLgorKiBGaXhlZCBhIHBvbS54bWwgYnVnIHdoZXJlIEdyZW1saW4gQ29uc29sZS9TZXJ2ZXIgd2VyZSBub3QgcHVsbGluZyB0aGUgbGF0ZXN0IE5lbzRqIDIuMy4yLgorKiBGaXhlZCBidWcgaW4gInJvdW5kIHJvYmluIiBsb2FkIGJhbGFuY2luZyBpbiBgZ3JlbWxpbi1kcml2ZXJgIHdoZXJlIHJlcXVlc3RzIHdlcmUgd3JvbmdseSBiZWluZyBzZW50IHRvIHRoZSBzYW1lIGhvc3QuCisqIFByZXZlbnRlZCB0aGUgc3Bhd25pbmcgb2YgdW5uZWVkZWQgcmVjb25uZWN0IHRhc2tzIGluIGBncmVtbGluLWRyaXZlcmAgd2hlbiBhIGhvc3QgZ29lcyBvZmZsaW5lLgorKiBGaXhlZCBidWcgcHJldmVudGluZyBgZ3JlbWxpbi1kcml2ZXJgIGZyb20gcmVjb25uZWN0aW5nIHRvIEdyZW1saW4gU2VydmVyIHdoZW4gaXQgd2FzIHJlc3RhcnRlZC4KKyogQmV0dGVyIGhhbmRsZWQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgb24gY29tbWl0cyBhbmQgc2VyaWFsaXphdGlvbiBpbiBHcmVtbGluIFNlcnZlciB0byBmaXJzdCBicmVhayB0aGUgcmVzdWx0IGl0ZXJhdGlvbiBsb29wIGFuZCB0byBlbnN1cmUgY29tbWl0IGVycm9ycyB3ZXJlIHJlcG9ydGVkIHRvIHRoZSBjbGllbnQuCisqIEFkZGVkIEdyYXBoU09OIHNlcmlhbGl6ZXJzIGZvciB0aGUgYGphdmEudGltZS4qYCBjbGFzc2VzLgorKiBJbXByb3ZlZCB0aGUgbG9nZ2luZyBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIgUkVTVCBlbmRwb2ludCBhcyBpdCBwZXJ0YWluZWQgdG8gc2NyaXB0IGV4ZWN1dGlvbiBmYWlsdXJlcy4KKyogYFRyYXZlcnNhbEV4cGxhbmF0aW9uYCBpcyBub3cgYFNlcmlhbGl6YWJsZWAgYW5kIGNvbXBhdGlibGUgd2l0aCBHcmFwaFNPTiBhbmQgR3J5byBzZXJpYWxpemF0aW9uLgorKiBGaXhlZCBhIHByb2JsZW0gd2l0aCBnbG9iYWwgYmluZGluZ3MgaW4gR3JlbWxpbiBTZXJ2ZXIgd2hpY2ggd2VyZW4ndCBwcm9wZXJseSBkZXNpZ25lZCB0byBoYW5kbGUgY29uY3VycmVudCBtb2RpZmljYXRpb24uCisqIERlcHJlY2F0ZWQgYFNjcmlwdEVsZW1lbnRGYWN0b3J5YCBhbmQgbWFkZSB0aGUgbG9jYWwgYFN0YXJHcmFwaGAgZ2xvYmFsbHkgYXZhaWxhYmxlIGZvciBgYFNjcmlwdElucHV0Rm9ybWF0YGAncyBgcGFyc2UoKWAgbWV0aG9kLgorKiBJbXByb3ZlZCByZXVzYWJpbGl0eSBvZiB1bmlxdWUgdGVzdCBkaXJlY3RvcnkgY3JlYXRpb24gaW4gYC90YXJnZXRgIGZvciBgQWJzdHJhY3RHcmFwaFByb3ZpZGVyYCwgd2hpY2ggd2FzIGZvcm1lcmx5IG9ubHkgYXZhaWxhYmxlIHRvIE5lbzRqLCBieSBhZGRpbmcgYG1ha2VUZXN0RGlyZWN0b3J5KClgLgorKiBPcHRpbWl6ZWQgbWVtb3J5LXVzYWdlIGluIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYC4KKyogYEdyYXBoYCBpbnN0YW5jZXMgYXJlIG5vdCBtZXJlbHkgImNsb3NlZCIgYXQgdGhlIGVuZCBvZiB0ZXN0cywgdGhleSBhcmUgImNsZWFyZWQiIHZpYSBgR3JhcGhQcm92aWRlci5jbGVhcigpYCwgd2hpY2ggc2hvdWxkIGluIHR1cm4gY2xlYW5zIHVwIG9sZCBkYXRhIGZvciBhbiBpbXBsZW1lbnRhdGlvbi4KKyogRXhwYW5kZWQgdGhlIEdyZW1saW4gU2VydmVyIHByb3RvY29sIHRvIGFsbG93IGZvciB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IG9uIGluLXNlc3Npb24gcmVxdWVzdHMgYW5kIHVwZGF0ZWQgdGhlIGBncmVtbGluLWRyaXZlcmAgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdC4KKyogR3JlYXRseSByZWR1Y2VkIHRoZSBhbW91bnQgb2Ygb2JqZWN0cyByZXF1aXJlZCBpbiBPTEFQIGZvciB0aGUgYFJlZHVjaW5nQmFycmllclN0ZXBgIHN0ZXBzLgorKiBJbXByb3ZlZCBtZXNzYWdlcyBmb3IgdGhlIGRpZmZlcmVudCBkaXN0aW5jdCAidGltZW91dHMiIHRoYXQgYSB1c2VyIGNhbiBlbmNvdW50ZXIgd2l0aCBHcmVtbGluIFNlcnZlci4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTEwNDEgU3RydWN0dXJlU3RhbmRhcmRUZXN0U3VpdGUgaGFzIGZpbGUgSS9PIGlzc3VlcyBvbiBXaW5kb3dzCisqIFRJTktFUlBPUC0xMTA1IFNwYXJrR3JhcGhDb21wdXRlciAvIE51bGwgUG9pbnRlciBFeGNlcHRpb25zIGZvciBwcm9wZXJ0aWVzIHRyYXZlcnNhbHMKKyogVElOS0VSUE9QLTExMDYgRXJyb3JzIG9uIGNvbW1pdCBpbiBHcmVtbGluIFNlcnZlciBkb24ndCByZWdpc3RlciBhcyBleGNlcHRpb24gb24gZHJpdmVyCisqIFRJTktFUlBPUC0xMTI1IFJvdW5kUm9iaW4gbG9hZCBiYWxhbmNpbmcgYWx3YXlzIHVzZXMgdGhlIHNlY29uZCBIb3N0IHdoZW4gc2l6ZSA9IDIKKyogVElOS0VSUE9QLTExMjYgQSBzaW5nbGUgSG9zdCBzcGF3bnMgbWFueSByZWNvbm5lY3QgdGFza3MKKyogVElOS0VSUE9QLTExMjcgY2xpZW50IGZhaWxzIHRvIHJlY29ubmVjdCB0byByZXN0YXJ0ZWQgc2VydmVyCisqIFRJTktFUlBPUC0xMTQ2IElvVGVzdCBhcmUgbm90IGNsZWFyaW5nIHRoZSBkYiBhZnRlciB0aGUgdGVzdCBydW4KKyogVElOS0VSUE9QLTExNDggQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiB3aXRoIGJpbmRpbmdzIGluIEdyZW1saW4gU2VydmVyCisqIFRJTktFUlBPUC0xMTUwIFVwZGF0ZSBwb20gZmlsZSBkZXBlbmRlbmNpZXMgdG8gd29yayB3aXRoIE5lbzRqIDIuMy4yCisqIFRJTktFUlBPUC0xMTU5IENsaWVudCBzZW5kcyBtdWx0aXBsZSBzZXNzaW9uIGNsb3NlIG1lc3NhZ2VzIHBlciBob3N0CisqIFRJTktFUlBPUC0xMTY4IFN3aXRjaCBwbHVnaW5zIGluIGRvY3MgcHJlcHJvY2Vzc29yCisqIFRJTktFUlBPUC0xMTcyIFJlY29ubmVjdCB0byBHcmVtbGluIFNlcnZlciBwcmV2aW91c2x5IG1hcmtlZCBhcyBkZWFkCisqIFRJTktFUlBPUC0xMTc1IEFub255bW91cyB0cmF2ZXJzYWxzIGNhbid0IGJlIGV4cGxhaW5lZAorKiBUSU5LRVJQT1AtMTE4NCBTZXNzaW9ucyBub3QgYmVpbmcgY2xvc2VkIHByb3Blcmx5CisqIFRJTktFUlBPUC0xMjE2IE9yZGVyU3RlcCBvciBPX1RyYXZlcnNlciBpcyBicm9rZW4KKyogVElOS0VSUE9QLTEyMzkgRXhjZXNzaXZlIGNvbnRpbnVhbCBmYWlsdXJlIGZvciByZXF1ZXN0cyBjYW4gY2F1c2UgVGltZW91dEV4Y2VwdGlvbiBpbiBkcml2ZXIKKyogVElOS0VSUE9QLTEyNDUgR3JlbWxpbiBzaGVsbCBzdGFydHMgaW5jb3JyZWN0bHkgb24gT1MgWCBkdWUgdG8gYXdrIGRpZmZlcmVuY2UKKyogVElOS0VSUE9QLTEyNTEgTlBFIGluIE9iamVjdFdyaXRhYmxlLnRvU3RyaW5nCisqIFRJTktFUlBPUC0xMjUyIEZhaWxlZCBOZW80aiB0cmFuc2FjdGlvbiBjYW4gbGVhdmUgTmVvNGpUcmFuc2FjdGlvbiBpbiBpbmNvbnNpc3RlbnQgc3RhdGUKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtNzMyIGdyZW1saW4tc2VydmVyIEdyYXBoU09OIHNlcmlhbGl6ZXIgaXNzdWUgd2l0aCB0cmVlKCkKKyogVElOS0VSUE9QLTkxNiBEZXZlbG9wIGEgYmV0dGVyICJzaW1wbGUiIGRyaXZlciBmb3IgdGVzdGluZyBhbmQgZXhhbXBsZSBwdXJwb3NlcworKiBUSU5LRVJQT1AtOTM3IEV4dHJhY3QgdGhlIGltcGxlbWVudGF0aW9ucyBzZWN0aW9ucyBvZiB0aGUgcHJpbWFyeSBkb2N1bWVudGF0aW9uIHRvIGl0cyBvd24gYm9vaworKiBUSU5LRVJQT1AtOTU2IENvbm5lY3Rpb24gZXJyb3JzIHRlbmQgdG8gZm9yY2UgYSBjb21wbGV0ZSBjbG9zZSBvZiB0aGUgY2hhbm5lbAorKiBUSU5LRVJQT1AtMTAzOSBFbmFibGUgYXV0by1jb21taXQgZm9yIHNlc3Npb24nZCByZXF1ZXN0cy4KKyogVElOS0VSUE9QLTEwNjggQnVtcCB0byBzdXBwb3J0IGpiY3J5cHQtMC40bS5qYXIKKyogVElOS0VSUE9QLTEwODAgQnVtcCBOZXR0eSB2ZXJzaW9uIC0gNC4wLjM0LkZpbmFsCisqIFRJTktFUlBPUC0xMDg1IEVzdGFibGlzaCBUaW5rZXJQb3AgImV4YW1wbGUiIHByb2plY3RzCisqIFRJTktFUlBPUC0xMDk2IFN1cHBvcnQgYWxpYXNpbmcgZm9yIHNlc3Npb25zIGluIEdyZW1saW4gU2VydmVyCisqIFRJTktFUlBPUC0xMDk3IEdyZW1saW4gQ29uc29sZSBzdXBwb3J0aW5nIHNlc3Npb25zCisqIFRJTktFUlBPUC0xMTA3IFByb3ZpZGUgYSB3YXkgdG8gc3VwcG9ydCBnbG9iYWwgdmFyaWFibGVzIHdpdGggc2FuZGJveGluZyBlbmFibGVkCisqIFRJTktFUlBPUC0xMTA5IE1ha2UgR3JlbWxpbiBDb25zb2xlIGJldHRlciBzdWl0ZWQgZm9yIHN5c3RlbSBsZXZlbCBpbnN0YWxscworKiBUSU5LRVJQT1AtMTEzMSBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtIHRyYXZlcnNlciBtYW5hZ2VtZW50IGlzIGluZWZmaWNpZW50IG1lbW9yeS13aXNlLgorKiBUSU5LRVJQT1AtMTEzNSBJbXByb3ZlIEdyYXBoU09OIHJlcHJlc2VudGF0aW9uIG9mIGphdmEudGltZS4qIGNsYXNzZXMKKyogVElOS0VSUE9QLTExMzcgRGVwcmVjYXRlIFNjcmlwdEVsZW1lbnRGYWN0b3J5IGFuZCBtYWtlIHN0YXIgZ3JhcGggZ2xvYmFsbHkgYXZhaWxhYmxlCisqIFRJTktFUlBPUC0xMTM4IEltcHJvdmUgbWVzc2FnaW5nIG9uIHNlcnZlciB0aW1lb3V0cworKiBUSU5LRVJQT1AtMTE0NyBBZGQgc2VyaWFsaXphdGlvbiBmb3IgVHJhdmVyc2FsRXhwbGFuYXRpb24KKyogVElOS0VSUE9QLTExNjAgQWRkIHRpbWVvdXQgY29uZmlndXJhdGlvbiBmb3IgdGltZSB0byB3YWl0IGZvciBjb25uZWN0aW9uIGNsb3NlCisqIFRJTktFUlBPUC0xMTY1IFRvb2xpbmcgU3VwcG9ydDogQ29tcGlsZSB3aXRoIC1wYXJhbWV0ZXJzCisqIFRJTktFUlBPUC0xMTc2IEJ1bXAgR3Jvb3Z5IHZlcnNpb24gLSAyLjQuNgorKiBUSU5LRVJQT1AtMTE3NyBJbXByb3ZlIGRvY3VtZW50YXRpb24gYXJvdW5kIFNwYXJrJ3Mgc3RvcmFnZSBsZXZlbHMKKyogVElOS0VSUE9QLTExOTcgRG9jdW1lbnQgR3JlbWxpbiBTZXJ2ZXIgYXZhaWxhYmxlIG1ldHJpY3MKKyogVElOS0VSUE9QLTExOTggQnVtcCBjb21tb25zLWNvbGxlY3Rpb25zIHRvIDMuMi4yCisqIFRJTktFUlBPUC0xMjEzIG1pc3NpbmcgZG9jcyBmb3IgaGFzKGxhYmVsLCBrZXksIHZhbHVlKQorKiBUSU5LRVJQT1AtMTIxOCBVc2FnZSBvZiB0b0xvY2FsSXRlcmF0b3IgUHJvZHVjZXMgbGFyZ2UgYW1vdW50IG9mIFNwYXJrIEpvYnMKKworW1tyZWxlYXNlLTMtMS0xLWluY3ViYXRpbmddXQorPT09IFRpbmtlclBvcCAzLjEuMSAoUmVsZWFzZSBEYXRlOiBGZWJydWFyeSA4LCAyMDE2KQorCisqIE1hZGUgYEdyeW9SZWNvcmRSZWFkZXJgIG1vcmUgcm9idXN0IHRvIDAgYnl0ZSByZWNvcmQgc3BsaXRzLgorKiBGaXhlZCBhIGNvbnN0cnVjdG9yL3NlcmlhbGl6YXRpb24gYnVnIGluIGBMUF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyYC4KKyogQWRkZWQgYSBsYXp5IGl0ZXJhdG9yLCBtZW1vcnkgc2FmZSBpbXBsZW1lbnRhdGlvbiBvZiBNYXBSZWR1Y2UgdG8gYFNwYXJrR3JhcGhDb21wdXRlcmAuCisqIEFkZGVkIGBNYXBSZWR1Y2UuY29tYmluZSgpYCBzdXBwb3J0IHRvIGBTcGFya0dyYXBoQ29tcHV0ZXJgLgorKiBCdW1wZWQgdG8gTmVvNGogMi4zLjIuCisqIEZpeGVkIEphdmEgY29tcGFyYXRvciBjb250cmFjdCBpc3N1ZSBhcm91bmQgYE9yZGVyLnNodWZmbGVgLgorKiBPcHRpbWl6ZWQgYSB2ZXJ5IGluZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mIGBTYW1wbGVMb2NhbFN0ZXBgLgorKiBSZWR1Y2VkIHRoZSBjb21wbGV4aXR5IGFuZCBleGVjdXRpb24gdGltZSBvZiBhbGwgYEFic3RyYWN0TGFtYmRhVHJhdmVyc2FsYCBpbnN0YW5jZXMuCisqIGBEZWZhdWx0VHJhdmVyc2FsYCBoYXMgYSB3ZWxsIGRlZmluZWQgYGhhc2hDb2RlKClgIGFuZCBgZXF1YWxzKClgLgorKiBBZGRlZCBzZXJpYWxpemVycyB0byBHcnlvIGZvciBgamF2YS50aW1lYCByZWxhdGVkIGNsYXNzZXMuCisqIEludGVncmF0ZWQgYE51bWJlckhlbHBlcmAgaW4gYFNhY2tGdW5jdGlvbnNgLgorKiBEZXByZWNhdGVkIGBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzLnN1cHBvcnRzQWRkUHJvcGVydHkoKWAgd2hpY2ggZWZmZWN0aXZlbHkgd2FzIGEgZHVwbGljYXRlIG9mIGBWZXJ0ZXhGZWF0dXJlcy5zdXBwb3J0c01ldGFQcm9wZXJ0aWVzYC4KKyogVGhlIFNwYXJrIHBlcnNpc3RlbmNlIGBTdG9yYWdlTGV2ZWxgIGNhbiBub3cgYmUgc2V0IGZvciBib3RoIGpvYiBncmFwaHMgYW5kIGBQZXJzaXN0ZWRPdXRwdXRSRERgIGRhdGEuCisqIEFkZGVkIHRvIHRoZSBsaXN0IG9mICJpbnZhbGlkIGJpbmRpbmcga2V5cyIgYWxsb3dlZCBieSBHcmVtbGluIFNlcnZlciB0byBjb3ZlciB0aGUgcHJpdmF0ZSBmaWVsZHMgb2YgYFRgIHdoaWNoIGdldCBleHBvc2VkIGluIHRoZSBgU2NyaXB0RW5naW5lYCBvbiBzdGF0aWMgaW1wb3J0cy4KKyogQWRkZWQgYEJ1bGtEdW1wZXJWZXJ0ZXhQcm9ncmFtYCB0aGF0IGFsbG93cyB0byBkdW1wIGEgd2hvbGUgZ3JhcGggaW4gYW55IG9mIHRoZSBzdXBwb3J0ZWQgSU8gZm9ybWF0cyAoR3JhcGhTT04sIEdyeW8sIFNjcmlwdCkuCisqIEZpeGVkIGEgYnVnIGFyb3VuZCBkdXJhdGlvbiBjYWxjdWxhdGlvbnMgb2YgYGNhcCgpYC1zdGVwIGR1cmluZyBwcm9maWxpbmcuCisqIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgYXZvaWQgdXNpbmcgSERGUyB3aXRoIFNwYXJrIGlmIGBQZXJzaXN0ZWRJbnB1dFJERGAgYW5kIGBQZXJzaXN0ZWRPdXRwdVJERGAgYXJlIGxldmVyYWdlZC4KKyogYElucHV0UkREYCBhbmQgYE91dHB1dFJERGAgY2FuIG5vdyBwcm9jZXNzIGJvdGggZ3JhcGhzIGFuZCBtZW1vcnkgKGkuZS4gc2lkZUVmZmVjdHMpLgorKiBSZW1vdmVkIEdyb292eSBzcGVjaWZpYyBtZXRhLXByb2dyYW1taW5nIG92ZXJsb2FkcyBmb3IgaGFuZGxpbmcgSGFkb29wIGBGaWxlU3lzdGVtYCAoaW5zdGVhZCwgaXRzIGFsbCBhY2Nlc3NpYmxlIHZpYSBgRmlsZVN5c3RlbVN0b3JhZ2VgKS4KKyogQWRkZWQgYEZpbGVTeXN0ZW1TdG9yYWdlYCBhbmQgYFNwYXJrQ29udGV4dFN0b3JhZ2VgIHdoaWNoIGJvdGggaW1wbGVtZW50IHRoZSBuZXcgYFN0b3JhZ2VgIEFQSS4KKyogQWRkZWQgYFN0b3JhZ2VgIHRvIHRoZSBncmVtbGluLWNvcmUgaW8tcGFja2FnZSB3aGljaCBwcm92aWRlcnMgY2FuIGltcGxlbWVudCB0byBhbGxvdyBjb252ZW50aW9uYWwgYWNjZXNzIHRvIGRhdGEgc291cmNlcyAoZS5nLiBgbHMoKWAsIGBybSgpYCwgYGNwKClgLCBldGMuKS4KKyogQnVtcGVkIHRvIFNwYXJrIDEuNS4yLgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNC41LgorKiBBZGRlZCBgLS1ub0NsZWFuYCBvcHRpb24gaW4gYGJpbi9wcm9jZXNzLWRvY3Muc2hgIHRvIHByZXZlbnQgdGhlIHNjcmlwdCBmcm9tIGNsZWFuaW5nIEdyYXBlcyBhbmQgSERGUy4KKyogRXhlY3V0ZSB0aGUgYExpZmVDeWNsZS5iZWZvcmVFdmFsKClgIGluIHRoZSBzYW1lIHRocmVhZCB0aGF0IGBldmFsKClgIGlzIGV4ZWN1dGVkIGluIGZvciBgR3JlbWxpbkV4ZWN1dG9yYC4KKyogSW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgb2YgR3JlbWxpbiBDb25zb2xlIGluaXRpYWxpemF0aW9uIHNjcmlwdHMgdG8gYmV0dGVyIHNlcGFyYXRlIGVycm9ycyBpbiBpbml0aWFsaXphdGlvbiBzY3JpcHQgSS9PIHZlcnN1cyBleGVjdXRpb24gb2YgdGhlIHNjcmlwdCBpdHNlbGYuCisqIEZpeGVkIGEgYnVnIGluIGBHcmFwaC5PcHRPdXRgIHdoZW4gdHJ5aW5nIHRvIG9wdC1vdXQgb2YgY2VydGFpbiB0ZXN0IGNhc2VzIHdpdGggdGhlIGBtZXRob2RgIHByb3BlcnR5IHNldCB0byAiKiIuCisqIEFkZGVkIGFub3RoZXIgYEJ1bGtMb2FkZXJgIGltcGxlbWVudGF0aW9uIChgT25lVGltZUJ1bGtMb2FkZXJgKSB0aGF0IGRvZXNuJ3Qgc3RvcmUgdGVtcG9yYXJ5IHByb3BlcnRpZXMgaW4gdGhlIHRhcmdldCBncmFwaC4KKyogQWRkZWQgb3B0aW9uIHRvIGFsbG93IGZvciBhIGN1c3RvbSBgQ2xhc3NSZXNvbHZlcmAgdG8gYmUgYXNzaWduZWQgdG8gYSBgR3J5b01hcHBlcmAgaW5zdGFuY2UuCisqIEZpeGVkIGEgYFNwYXJrR3JhcGhDb21wdXRlcmAgc29ydGluZyBidWcgaW4gTWFwUmVkdWNlIHRoYXQgb2NjdXJyZWQgd2hlbiB0aGVyZSB3YXMgbW9yZSB0aGFuIG9uZSBwYXJ0aXRpb24uCisqIEFkZGVkIGBzdHJpY3RUcmFuc2FjdGlvbk1hbmFnZW1lbnRgIHRvIHRoZSBHcmVtbGluIFNlcnZlciBzZXR0aW5ncyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBgYWxpYXNlc2AgcGFyYW1ldGVyIG11c3QgYmUgcGFzc2VkIG9uIHJlcXVlc3RzIGFuZCB0aGF0IHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgd2lsbCBiZSBzY29wZWQgdG8gdGhlIGdyYXBocyBwcm92aWRlZCBpbiB0aGF0IGFyZ3VtZW50LgorKiBGaXhlZCBhIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAgYnVnIGluIGBQZWVyUHJlc3N1cmVWZXJ0ZXhQcm9ncmFtYCB0aGF0IG9jY3VycmVkIHdoZW4gYW4gYWRqYWNlbmN5IHRyYXZlcnNhbCB3YXMgbm90IHByb3ZpZGVkLgorKiBTdGFuZGFyZGl6ZWQgInRlc3QgZGF0YSBkaXJlY3RvcmllcyIgYWNyb3NzIGFsbCB0ZXN0cyBhcyBnZW5lcmF0ZWQgYnkgYFRlc3RIZWxwZXJgLgorKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluIFNlcnZlciB3aGVyZSBlcnJvciBtZXNzYWdlcyB3ZXJlIG5vdCBhbHdheXMgYmVpbmcgcGFzc2VkIGJhY2sgaW4gdGhlIGBzdGF0dXNNZXNzYWdlYCBmaWVsZCBvZiB0aGUgYFJlc3BvbnNlTWVzc2FnZWAuCisqIEFkZGVkIHZhbGlkYXRpb24gZm9yIHBhcmFtZXRlciBgYmluZGluZ3NgIHRvIGVuc3VyZSB0aGF0IGtleXMgd2VyZSBgU3RyaW5nYCB2YWx1ZXMuCisqIEltcHJvdmVkIFRyYW5zYWN0aW9uIE1hbmFnZW1lbnQgY29uc2lzdGVuY3kgaW4gR3JlbWxpbiBTZXJ2ZXIuCisqIEFkZGVkIGBGaWxlU2FuZGJveEV4dGVuc2lvbmAgd2hpY2ggdGFrZXMgYSBjb25maWd1cmF0aW9uIGZpbGUgdG8gd2hpdGUgbGlzdCBtZXRob2RzIGFuZCBjbGFzc2VzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYFNjcmlwdEVuZ2luZWAgZXhlY3V0aW9uLgorKiBEZXByZWNhdGVkIGBTYW5kYm94RXh0ZW5zaW9uYCBhbmQgYFNpbXBsZVNhbmRib3hFeHRlbnNpb25gIGluIGZhdm9yIG9mIGBBYnN0cmFjdFNhbmRib3hFeHRlbnNpb25gIHdoaWNoIHByb3ZpZGVzIGJldHRlciBhYnN0cmFjdGlvbnMgZm9yIHRob3NlIHdyaXRpbmcgc2FuZGJveGVzLgorKiBGaXhlZCBhIGxvbmcgc3RhbmRpbmcgInZpZXcgbWVyZ2UiIGlzc3VlIHJlcXVpcmluZyBgcmVkdWNlQnlLZXkoKWAgb24gaW5wdXQgZGF0YSB0byBTcGFyay4gSXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLgorKiBBZGRlZCBgU3BhcmtgIHN0YXRpYyBvYmplY3QgdG8gYWxsb3cgImZpbGUgc3lzdGVtIiBjb250cm9sIG9mIHBlcnNpc3RlZCBSRERzIGluIFNwYXJrLgorKiBBZGRlZCBhIFNwYXJrICJqb2Igc2VydmVyIiB0byBlbnN1cmUgdGhhdCBwZXJzaXN0ZWQgUkREcyBhcmUgbm90IGdhcmJhZ2UgY29sbGVjdGVkIGJ5IFNwYXJrLgorKiBJbXByb3ZlZCBsb2dnaW5nIGNvbnRyb2wgZHVyaW5nIGJ1aWxkcyB3aXRoIE1hdmVuLgorKiBGaXhlZCBzZXR0aW5ncyB0aGF0IHdlcmVuJ3QgYmVpbmcgcGFzc2VkIHRvIHRoZSBHcmVtbGluIERyaXZlciBgQ2x1c3RlcmAgdGhyb3VnaCBjb25maWd1cmF0aW9uIGZpbGUuCisqIGBDb2x1bW5gIG5vdyBpbXBsZW1lbnRzIGBGdW5jdGlvbmAuIFRoZSBtb2R1bGF0b3IgYGJ5KHZhbHVlRGVjcilgIGNhbiBiZSByZXBsYWNlZCBieSBgYnkodmFsdWVzLGRlY3IpYCBhbmQgdGh1cywgcHJvamVjdGlvbiBhbmQgb3JkZXIgYXJlIHNlcGFyYXRlZC4KKyogQWRkZWQgYElucHV0UkRERm9ybWF0YCB3aGljaCB3cmFwcyBhbiBgSW5wdXRSRERgIHRvIG1ha2UgaXQgYWNjZXNzaWJsZSB0byBIYWRvb3AgYW5kIG5vdCBqdXN0IFNwYXJrLgorKiBBZGRlZCBgQWJzdHJhY3RTcGFya1Rlc3RgIHdoaWNoIGhhbmRsZXMgY2xvc2luZyBgU3BhcmtDb250ZXh0YCBpbnN0YW5jZXMgYmV0d2VlbiB0ZXN0cyBub3cgdGhhdCB3ZSBzdXBwb3J0IHBlcnNpc3RlZCBjb250ZXh0cy4KKyogRml4ZWQgYSBzZXJpYWxpemF0aW9uIGJ1ZyBpbiBgR3J5b1NlcmlhbGl6ZXJgIHRoYXQgbWFkZSBpdCBkaWZmaWN1bHQgZm9yIGdyYXBoIHByb3ZpZGVycyB0byB5aWVsZCBgSW5wdXRSRERzYCBmb3IgYFNwYXJrR3JhcGhDb21wdXRlcmAuCisqIGBTcGFya0dyYXBoQ29tcHV0ZXJgIGlzIG5vdyB0ZXN0ZWQgYWdhaW5zdCBHcnlvLCBHcmFwaFNPTiwgYW5kIGBJbnB1dFJERGAgZGF0YSBzb3VyY2VzLgorKiBgSGFkb29wRWxlbWVudEl0ZXJhdG9yYCAoZm9yIEhhZG9vcC1HcmVtbGluIE9MVFApIG5vdyB3b3JrcyBmb3IgYW55IGBJbnB1dEZvcm1hdGAsIG5vdCBqdXN0IGBGaWxlSW5wdXRGb3JtYXRzYC4KKyogQWRkZWQgYFRyYXZlcnNlci5BZG1pbi5nZXRUYWdzKClgIHdoaWNoIGFyZSB1c2VkIHRvIG1hcmsgYnJhbmNoZXMgaW4gYSB0cmF2ZXJzYWwgKHVzZWZ1bCBpbiBgbWF0Y2goKWAgYW5kIHJlbGF0ZWQgZnV0dXJlIHN0ZXBzKS4KKyogRml4ZWQgdGhlIGBGdXR1cmVgIG1vZGVsIGZvciBgR2lyYXBoR3JhcGhDb21wdXRlcmAgYW5kIGBTcGFya0dyYXBoQ29tcHV0ZXJgIHNvIHRoYXQgY2xhc3MgbG9hZGVycyBhcmUgcHJlc2VydmVkLgorKiBBZGRlZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgdmVydGV4IElEIHR5cGVzIGluIGBCdWxrTG9hZGVyVmVydGV4UHJvZ3JhbWAuCisqIERlcHJlY2F0ZWQgYGNyZWRlbnRpYWxzRGJMb2NhdGlvbmAgZnJvbSBgU2ltcGxlQXV0aGVudGljYXRvcmAgaW4gR3JlbWxpbiBTZXJ2ZXIuCisqIGBUaW5rZXJHcmFwaGAgaGFzICJuYXRpdmUiIHNlcmlhbGl6YXRpb24gaW4gR3JhcGhTT04sIHdoaWNoIGVuYWJsZXMgaXQgdG8gYmUgYSByZXR1cm4gdmFsdWUgZnJvbSBHcmVtbGluIFNlcnZlci4KKyogSW1wcm92ZWQgdGhlIGFiaWxpdHkgdG8gZW1iZWQgR3JlbWxpbiBTZXJ2ZXIgYnkgcHJvdmlkaW5nIGEgd2F5IHRvIGdldCB0aGUgYFNlcnZlckdyZW1saW5FeGVjdXRvcmAgYW5kIGltcHJvdmUgcmV1c2FiaWxpdHkgb2YgYEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yYCBhbmQgcmVsYXRlZCBjbGFzc2VzLgorKiBBZGRlZCBgQXV0aGVudGljYXRvci5uZXdTYXNsTmVnb3RpYXRvcihJbmV0QWRkcmVzcylgIGFuZCBkZXByZWNhdGVkIHRoZSB6ZXJvLWFyZyB2ZXJzaW9uIG9mIHRoYXQgbWV0aG9kLgorKiBgUHJvZmlsZVN0ZXBgIGlzIG5vdyBhdmFpbGFibGUgb2ZmIG9mIGBUcmF2ZXJzYWxgIHZpYSBgcHJvZmlsZSgpYC4gVG8gYmUgY29uc2lzdGVudCB3aXRoIGBUcmF2ZXJzYWwuZXhwbGFpbigpYC4KKyogSWYgbm8gY29tcGFyYXRvciBpcyBwcm92aWRlZCB0byBgb3JkZXIoKWAsIGBPcmRlci5pbmNyYCBpcyBhc3N1bWVkIChwcmV2aW91c2x5LCBhbiBleGNlcHRpb24gb2NjdXJyZWQpLgorKiBGaXhlZCB2YXJpb3VzIEdyZW1saW4tR3Jvb3Z5IHRlc3RzIHRoYXQgYXNzdW1lZCBgdG9TdHJpbmcoKWAtYWJsZSBpZHMuCisqIFNwbGl0IFRpbmtlclBvcCBkb2N1bWVudGF0aW9uIGludG8gZGlmZmVyZW50IGRpcmVjdG9yaWVzLgorKiBBZGRlZCBgZXhwbGFpbigpYC1zdGVwIHdoaWNoIHlpZWxkcyBhIGBUcmF2ZXJzYWxFeHBsYW5hdGlvbmAgd2l0aCBhIHByZXR0eSBgdG9TdHJpbmcoKWAgZGV0YWlsaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLgorKiBGaXhlZCBhIHRyYXZlcnNhbCBzdHJhdGVneSBvcmRlcmluZyBidWcgaW4gYEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5YCBhbmQgYEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5YC4KKyogTWFkZSBhIG51bWJlciBvZiBjaGFuZ2VzIHRvIGltcHJvdmUgdHJhdmVyc2FsIHN0YXJ0dXAgYW5kIGV4ZWN1dGlvbiBwZXJmb3JtYW5jZS4KKyogQWRkZWQgc3VwcG9ydCBmb3IgJ2dyZW1saW4udGlua2VyZ3JhcGguZ3JhcGhMb2NhdGlvbicgdG8gYWNjZXB0IGEgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgdGhhdCBpbXBsZW1lbnRzIGBJby5CdWlsZGVyYCBpbnRlcmZhY2UuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC03NjMgSXNTdGVwIGJyb2tlbiB3aGVuIHByb2ZpbGluZyBpcyBlbmFibGVkLgorKiBUSU5LRVJQT1AtOTcyIENsdXN0ZXI6OmNsb3NlIGRvZXMgbm90IHNodXQgZG93biBpdHMgZXhlY3V0b3IKKyogVElOS0VSUE9QLTk3MyBCTFZQIHNob3VsZG4ndCBjbGVhciBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMKKyogVElOS0VSUE9QLTk3NiBGYWlsIGVhcmxpZXIgaWYgaW52YWxpZCB2ZXJzaW9uIGlzIHN1cHBsaWVkIGluIHZhbGlkYXRlLWRpc3RyaWJ1dGlvbi5zaAorKiBUSU5LRVJQT1AtOTc3IERlYWQgbGluayB0byB0cmF2ZXJzYWwgamF2YWRvY3MKKyogVElOS0VSUE9QLTk3OSBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5IG5vdCBwaWNraW5nIHVwIE9yZGVyIGxvY2FsIHRyYXZlcnNhbAorKiBUSU5LRVJQT1AtOTg1IHNob3VsZFBlcnNpc3REYXRhT25DbG9zZSBtYWtlcyBpbmNvcnJlY3QgZmVhdHVyZSBjaGVjaworKiBUSU5LRVJQT1AtOTkwIE1peGVkIHR5cGVzIGluIFZlcnRleFByb3BlcnR5VGVzdAorKiBUSU5LRVJQT1AtOTkzIGN5Y2xpY1BhdGggaXMgbm90KHNpbXBsZVBhdGgpCisqIFRJTktFUlBPUC05OTcgRmVhdHVyZVJlcXVpcmVtZW50U2V0LlNJTVBMRSBzaG91bGQgbm90IHJlcXVpcmUgbXVsdGktcHJvcGVydHkgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMDAwIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVPdmVyR3JhcGhUZXN0IGZhaWx1cmVzCisqIFRJTktFUlBPUC0xMDAxIFN1Z2FyTG9hZGVyUGVyZm9ybWFuY2VUZXN0IGNvbnRhaW5zIGhhcmRjb2RlZCB2ZXJ0ZXggaWRzCisqIFRJTktFUlBPUC0xMDAyIFNob3VsZCByb2xsYmFjayB0cmFuc2FjdGlvbiBhZnRlciBjYXRjaGluZyBvbiBjbG9zZQorKiBUSU5LRVJQT1AtMTAwNiBSYW5kb20gZXJyb3IgZHVyaW5nIGJ1aWxkczogc2hvdWxkUmVsb2FkQ2xhc3NMb2FkZXJXaGlsZURvaW5nRXZhbEluU2VwYXJhdGVUaHJlYWQoKQorKiBUSU5LRVJQT1AtMTAxMSBIYWRvb3BHcmFwaCBjYW4ndCByZS1hdHRhY2ggd2hlbiB0aGUgSW5wdXRGb3JtYXQgaXMgbm90IGEgRmlsZUlucHV0Rm9ybWF0CisqIFRJTktFUlBPUC0xMDEyIEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtIHNob3VsZG4ndCBhc3N1bWUgdmVydGV4IElEcyBvZiB0eXBlIExvbmcKKyogVElOS0VSUE9QLTEwMjUgU29sdmUgU3BhcmtDb250ZXh0IFBlcnNpc3RlbmNlIElzc3VlcyB3aXRoIEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtCisqIFRJTktFUlBPUC0xMDI3IE1lcmdlIHZpZXcgcHJpb3IgdG8gd3JpdGluZyBncmFwaFJERCB0byBvdXRwdXQgZm9ybWF0L3JkZAorKiBUSU5LRVJQT1AtMTAzNiBTdXBwb3J0IHNlbGYtbG9vcGluZyBlZGdlcyBpbiBJTworKiBUSU5LRVJQT1AtMTA1MiBAR3JhcGguT3B0T3V0IGNhdXNlcyBFeGNlcHRpb24gZHVyaW5nIFN1aXRlIHNldHVwCisqIFRJTktFUlBPUC0xMDYwIExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kgdG9vIHJlc3RyaWN0aXZlCisqIFRJTktFUlBPUC0xMDc1IFByb2ZpbGUgZHVyYXRpb24gb2YgY2FwIHN0ZXAgc2VlbXMgYnJva2VuLgorKiBUSU5LRVJQT1AtMTA4MyBUcmF2ZXJzYWwgbmVlZHMgYSBoYXNoQ29kZSgpIGFuZCBlcXVhbHMoKSBkZWZpbml0aW9uLgorKiBUSU5LRVJQT1AtMTA4OSBPcmRlci5zaHVmZmxlIGltcGxlbWVudGF0aW9uIGlzIHRvbyBmcmFnaWxlCisqIFRJTktFUlBPUC0xMTE5IExQX09fT0JfU19TRV9TTF9UcmF2ZXJzZXIgZG9lc24ndCBoYXZlIGEgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkuCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTMyMCBCdWxrRHVtcGVyVmVydGV4UHJvZ3JhbQorKiBUSU5LRVJQT1AtMzc5IE1lc3NhZ2VTY29wZS5Mb2NhbC5zZXRTdGF0aWNNZXNzYWdlKE0gbXNnKQorKiBUSU5LRVJQT1AtODI0IERvIHdlIG5lZWQgcnVudGltZSBCaWdEZWNpbWFsIGluIG1vcmUgcGxhY2VzPworKiBUSU5LRVJQT1AtODU5IFByb3ZpZGUgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIHNldCBsb2cgbGV2ZWxzIGluIHBsdWdpbnMKKyogVElOS0VSUE9QLTg2MCBCaW5kaW5ncyBhcHBsaWVkIHRvIHRoZSBQbHVnaW5BY2NlcHRvciBzaG91bGQgYXBwZWFyIHRvIEdyZW1saW4gU2VydmVyCisqIFRJTktFUlBPUC04ODYgQWxsb3cgYW55IEdyYXBoUmVhZGVyL1dyaXRlciB0byBiZSBwZXJzaXN0ZW5jZSBlbmdpbmUgZm9yIFRpbmtlckdyYXBoCisqIFRJTktFUlBPUC04OTEgUmUtZXhhbWluZSBTYW5kYm94aW5nIEFic3RyYWN0aW9ucworKiBUSU5LRVJQT1AtOTEyIEltcHJvdmUgdGhlIGFiaWxpdHkgdG8gZW1iZWQgR3JlbWxpbiBTZXJ2ZXIgd2l0aCBDaGFubmVsaXplciBpbmplY3Rpb24KKyogVElOS0VSUE9QLTkyOCBVc2UgZGlyZWN0b3JpZXMgdG8gc2VwYXJhdGUgZGlmZmVyZW50IGJvb2tzCisqIFRJTktFUlBPUC05MzAgVGllIEFsaWFzIHRvIFRyYW5zYWN0aW9uIE1hbmFnZXIgaW4gR3JlbWxpbiBTZXJ2ZXIKKyogVElOS0VSUE9QLTkzOCBBZGQgYSAiY2xlYXIgU05BUFNIT1QgamFycyIgc2VjdGlvbiB0byB0aGUgcHJvY2Vzcy1kb2NzLnNoLgorKiBUSU5LRVJQT1AtOTQxIEltcHJvdmUgZXJyb3IgbWVzc2FnZSBmb3Igd3Jvbmcgb3JkZXIoKS5ieSgpIGFyZ3VtZW50cworKiBUSU5LRVJQT1AtOTQzIFdhcm4gaWYgR3JlbWxpbiBTZXJ2ZXIgaXMgcnVubmluZyBwcmlvciB0byBnZW5lcmF0aW5nIGRvY3MKKyogVElOS0VSUE9QLTk0NSBFeGNlcHRpb25zIHNob3VsZCBhbGxvdyBtZSB0byBpbmNsdWRlIHJvb3QgY2F1c2UgaWYvd2hlbiBhdmFpbGFibGUKKyogVElOS0VSUE9QLTk1MiBJbmNsdWRlIENhcmRpbmFsaXR5Lmxpc3QgZXhhbXBsZSBpbiBWZXJ0ZXhQcm9wZXJ0eSBzZWN0aW9uIG9mIG1haW4gZG9jcy4KKyogVElOS0VSUE9QLTk1NCBDb25zaXN0ZW50IHRlc3QgZGlyZWN0b3J5IHVzYWdlCisqIFRJTktFUlBPUC05NTcgSW1wcm92ZSBzcGVlZCBvZiBhZGRWKCkKKyogVElOS0VSUE9QLTk2NCBUZXN0IFhYWEdyYXBoQ29tcHV0ZXIgb24gYSBIYWRvb3AyIGNsdXN0ZXIgKG5vbi1wc2V1ZG9jbHVzdGVyKS4KKyogVElOS0VSUE9QLTk3MCBQcm9maWxlU3RlcCBzaG91bGQgYmUgb2ZmIFRyYXZlcnNhbCwgbm90IEdyYXBoVHJhdmVyc2FsCisqIFRJTktFUlBPUC05NzggTmF0aXZlIFRpbmtlckdyYXBoIFNlcmlhbGl6ZXJzIGZvciBHcmFwaFNPTgorKiBUSU5LRVJQT1AtOTgxIERlcHJlY2F0ZSBzdXBwb3J0IGZvciBjcmVkZW50aWFsc0RiTG9jYXRpb24gaW4gR3JlbWxpbiBTZXJ2ZXIgQ29uZmlnCisqIFRJTktFUlBPUC05ODIgdmFsdWVzRGVjciwgdmFsdWVzSW5jciwga2V5c0RlY3IsIGFuZCB2YWx1ZXNEZWNyIGlzIGxhbWUuCisqIFRJTktFUlBPUC05ODMgUHJvdmlkZSBhIHdheSB0byB0cmFjayBvcGVuIEdyYXBoIGluc3RhbmNlcyBpbiB0ZXN0cworKiBUSU5LRVJQT1AtOTg0IFVzZSBHcmFwaFByb3ZpZGVyIGZvciBpZCBjb252ZXJzaW9uIGluIEdyb292eSBFbnZpcm9ubWVudCB0ZXN0IHN1aXRlCisqIFRJTktFUlBPUC05ODcgVXNlIHRpbmtlcnBvcC5hcGFjaGUub3JnIFVSTCBpbiBhbGwgZG9jdW1lbnRhdGlvbiBhbmQgaG9tZXBhZ2UKKyogVElOS0VSUE9QLTk4OCBTcGFya0dyYXBoQ29tcHV0ZXIuc3VibWl0IHNob3VsZG4ndCB1c2UgRm9ya0pvaW5Qb29sLmNvbW1vblBvb2wKKyogVElOS0VSUE9QLTk5MiBCZXR0ZXIgc3VwcG9ydCBmb3Igc2NoZW1hIGRyaXZlbiBHcmFwaHMgaW4gSU8gcmVsYXRlZCB0ZXN0cworKiBUSU5LRVJQT1AtOTk0IERyaXZlciB1c2luZyBkZXByZWNhdGVkIFJlYmluZGluZ3MgU3RpbGwKKyogVElOS0VSUE9QLTk5NSBBZGQgQXV0aGVudGljYXRvci5uZXdTYXNsTmVnb3RpYXRvcihJbmV0QWRkcmVzcykKKyogVElOS0VSUE9QLTk5NiBQbGVhc2UgZGVsZXRlIG9sZCByZWxlYXNlcyBmcm9tIG1pcnJvcmluZyBzeXN0ZW0KKyogVElOS0VSUE9QLTk5OCBEZXByZWNhdGUgVmVydGV4UHJvcGVydHlGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWQorKiBUSU5LRVJQT1AtMTAwOSBBZGQgYSBDQVVUSU9OIHRvIGRvY3VtZW50YXRpb24gYWJvdXQgSGFkb29wR3JhcGggYW5kIGdldHRpbmcgYmFjayBlbGVtZW50cworKiBUSU5LRVJQT1AtMTAxMyBUcmF2ZXJzZXIgdGFncyBhcyBhIHNhZmVyIHdheSBvZiB1c2luZyBwYXRoIGxhYmVscworKiBUSU5LRVJQT1AtMTAxOCBBbGxvdyBzZXR0aW5nIGZvciBtYXhDb250ZW50TGVuZ3RoIHRvIGJlIHNldCBmcm9tIHlhbWwgaW4gZHJpdmVyCisqIFRJTktFUlBPUC0xMDE5IENvbnZlcnQgcHJpbnRsbiBpbiB0ZXN0IHRvIFNMRjRqCisqIFRJTktFUlBPUC0xMDIyIEF1dG9tYXRpY2FsbHkgd2FybSB1cCBvcHMgaGFuZGxlcnMKKyogVElOS0VSUE9QLTEwMjMgQWRkIGEgc3BhcmsgdmFyaWFibGUgaW4gU3BhcmtHcmVtbGluUGx1Z2luIGxpa2Ugd2UgZG8gaGRmcyBmb3IgSGFkb29wR3JlbWxpblBsdWdpbgorKiBUSU5LRVJQT1AtMTAyNiBCVkxQIHNob3VsZCBzdG9yZSB2ZXJ0ZXggSURzIGFzIFN0cmluZworKiBUSU5LRVJQT1AtMTAzMyBTdG9yZSBzaWRlRWZmZWN0cyBhcyBhIHBlcnNpc3RlZCBSREQKKyogVElOS0VSUE9QLTEwMzUgQmV0dGVyIENvbnNpc3RlbmN5IGluIEdyZW1saW4gU2VydmVyIFRyYW5zYWN0aW9uIE1hbmFnZW1lbnQKKyogVElOS0VSUE9QLTEwNDUgQ2xpZW50LVNpZGUgSGFuZ3Mgd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBhIEhhc2hNYXAgd2l0aCBLZXlzIG9mIHR5cGUgSW50ZWdlcgorKiBUSU5LRVJQT1AtMTA0NyBUaW5rZXJHcmFwaCBHcmFwaFNPTiBzdG9yYWdlIGZvcm1hdCBicm9rZW4KKyogVElOS0VSUE9QLTEwNTEgQWRkIG5vdGUgaW4gYmVzdCBwcmFjdGljZSBkb2NzIGFib3V0IGdyZW1saW4gc2VydmVyIGhlYXAgc2V0dGluZworKiBUSU5LRVJQT1AtMTA1NSBHcmVtbGluIENvbnNvbGUgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGNhbiBiZSBtaXNsZWFkaW5nCisqIFRJTktFUlBPUC0xMDYyIE1ha2UgTGlmZUN5Y2xlIGJlZm9yZUV2YWwgZXhlY3V0ZSBpbiBzYW1lIHRocmVhZCBhcyBldmFsIG9wZXJhdGlvbgorKiBUSU5LRVJQT1AtMTA2NCBBbGxvdyBhIENsYXNzUmVzb2x2ZXIgdG8gYmUgYWRkZWQgdG8gR3J5b01hcHBlciBjb25zdHJ1Y3Rpb24KKyogVElOS0VSUE9QLTEwNjUgRml4IHNvbWUgdHlwb3MgYW5kIGNsYXJpZnkgc29tZSB3b3JkaW5nIGluIHRoZSBUaW5rZXJQb3AgZG9jdW1lbnRhdGlvbgorKiBUSU5LRVJQT1AtMTA2NiBBZGQgaW9SZWdpc3RyaWVzIGNvbmZpZ3VyYXRpb24gdG8gR3JhcGhTT04gTWVzc2FnZVNlcmlhbGl6ZXIKKyogVElOS0VSUE9QLTEwNjcgVXBkYXRlIEdyb292eSB0byAyLjQuNQorKiBUSU5LRVJQT1AtMTA3MiBBbGxvdyB0aGUgdXNlciB0byBzZXQgcGVyc2lzdGVuY2Ugb3B0aW9ucyB1c2luZyBTdG9yYWdlTGV2ZWwudmFsdWVPZigpCisqIFRJTktFUlBPUC0xMDczIEhhZG9vcEdyYXBoIHRvU3RyaW5nKCkgaXMgd2VpcmQgZm9yIFNwYXJrIFBlcnNpdGVkUkREIGRhdGEuCisqIFRJTktFUlBPUC0xMDg2IEluY2x1ZGUgZ3J5byBzZXJpYWxpemVycyBmb3IgamF2YS50aW1lIHJlbGF0ZWQgY2xhc3NlcworKiBUSU5LRVJQT1AtMTA4NyBBZGQgaGFzKCkvb3JkZXIoKSB0byBGaWx0ZXJSYW5rU3RyYXRlZ3kKKyogVElOS0VSUE9QLTEwOTMgQWRkIFNwYXJrIGluaXQuc2ggc2NyaXB0IGFuZCB1cGRhdGUgZGV2IGRvY3VtZW50YXRpb24uCisqIFRJTktFUlBPUC0xMTAwIExvb2sgZGVlcGx5IGludG8gYWRkaW5nIGNvbWJpbmUoKS1zdXBwb3J0IGluIFNwYXJrIE1hcFJlZHVjZS4KKyogVElOS0VSUE9QLTExMTcgSW5wdXRGb3JtYXRSREQucmVhZEdyYXBoUkREIHJlcXVpcmVzIGEgdmFsaWQgZ3JlbWxpbi5oYWRvb3AuaW5wdXRMb2NhdGlvbiwgYnJlYWtpbmcgSW5wdXRGb3JtYXRzIChDYXNzYW5kcmEsIEhCYXNlKSB0aGF0IGRvbid0IG5lZWQgb25lCisKK1tbcmVsZWFzZS0zLTEtMC1pbmN1YmF0aW5nXV0KKz09PSBUaW5rZXJQb3AgMy4xLjAgKFJlbGVhc2UgRGF0ZTogTm92ZW1iZXIgMTYsIDIwMTUpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTEtaW5jdWJhdGluZywgMy4wLjEtaW5jdWJhdGluZz4+IGFuZCA8PC4vY2hhbmdlbG9nLTMuMC54LmFzY2lpZG9jI3JlbGVhc2UtMy0wLTItaW5jdWJhdGluZywgMy4wLjItaW5jdWJhdGluZz4+LgorCisqIEZpeGVkIGJ1ZyBpbiBHcnlvIGFuZCBHcmFwaFNPTiAod2l0aCBlbWJlZGRlZCB0eXBlcykgc2VyaWFsaXphdGlvbiBmb3Igc2VyaWFsaXphdGlvbiBvZiByZXN1bHRzIHJldHVybmVkIGZyb20gYE1hcC5lbnRyeVNldCgpYC4KKyogYFRyYW5zYWN0aW9uYCBzZXR0aW5ncyBmb3IgYG9uUmVhZFdyaXRlYCBhbmQgYG9uQ2xvc2VgIGFyZSBub3cgYFRocmVhZExvY2FsYCBpbiBuYXR1cmUgb2Ygc3RhbmRhcmQgdHJhbnNhY3Rpb25zLgorKiBPcHRpbWl6ZWQgYEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtYC4gSXQgbm93IHVzZXMgYEV2ZW50U3RyYXRlZ3lgIHRvIG1vbml0b3Igd2hhdCB0aGUgdW5kZXJseWluZyBgQnVsa0xvYWRlcmAgaW1wbGVtZW50YXRpb24gZG9lcyAoZS5nLiB3aGV0aGVyIGl0IGNyZWF0ZXMgYSBuZXcgdmVydGV4IG9yIHJldHVybnMgYW4gZXhpc3RpbmcpLgorKiBJbnRlZ3JhdGVkIGBOdW1iZXJIZWxwZXJgIGluIGBTdW1TdGVwYCwgYE1pblN0ZXBgLCBgTWF4U3RlcGAgYW5kIGBNZWFuU3RlcGAgKGxvY2FsIGFuZCBnbG9iYWwgc3RlcCB2YXJpYW50cykuCisqIEdyZW1saW4gQ29uc29sZSByZW1vdGluZyB0byBHcmVtbGluIFNlcnZlciBub3cgc3VwcG9ydHMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYXNzaWduaW5nIGFsaWFzZXMuCisqIGBDb3VudE1hdGNoQWxnb3JpdGhtYCwgaW4gT0xBUCwgbm93IGJpYXNlcyB0cmF2ZXJzYWwgc2VsZWN0aW9uIHRvd2FyZHMgdGhvc2UgdHJhdmVyc2FscyB0aGF0IHN0YXJ0IGF0IHRoZSBjdXJyZW50IHRyYXZlcnNlciBsb2NhdGlvbiB0byByZWR1Y2UgbWVzc2FnZSBwYXNzaW5nLgorKiBGaXhlZCBhIGZpbGUgc3RyZWFtIGJ1ZyBpbiBIYWRvb3AgT0xUUCB0aGF0IHNob3dlZCB1cCBpZiB0aGUgc3RyZWFtZWQgZmlsZSB3YXMgbW9yZSB0aGFuIDJHIG9mIGRhdGEuCisqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCB0aHJlYWQgbG9jYWwgcHJvcGVydGllcyBpbiBgU3BhcmtHcmFwaENvbXB1dGVyYCB3aGVuIHVzaW5nIGEgcGVyc2lzdGVudCBjb250ZXh0LgorKiBCdW1wZWQgdG8gTmVvNGogMi4zLjAuCisqIERlcHJlY2F0ZWQgInJlYmluZGluZ3MiIGFzIGFuIGFyZ3VtZW50IHRvIEdyZW1saW4gU2VydmVyIGFuZCByZXBsYWNlZCBpdCB3aXRoICJhbGlhc2VzIi4KKyogQWRkZWQgYFBlcnNpc3RlZElucHV0UkREYCBhbmQgYFBlcnNpc3RlZE91dHB1dFJERGAgd2hpY2ggZW5hYmxlcyBgU3BhcmtHcmFwaENvbXB1dGVyYCB0byBzdG9yZSB0aGUgZ3JhcGggUkREIGluIHRoZSBjb250ZXh0IGJldHdlZW4gam9icyAobm8gSERGUyBzZXJpYWxpemF0aW9uIHJlcXVpcmVkKS4KKyogUmVuYW1lZCB0aGUgYHB1YmxpYyBzdGF0aWMgU3RyaW5nYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIG9mIFRpbmtlckdyYXBoIChkZXByZWNhdGVkIG9sZCB2YXJpYWJsZXMpLgorKiBBZGRlZCBgR3JhcGhDb21wdXRlci5jb25maWd1cmUoa2V5LHZhbHVlKWAgdG8gYWxsb3cgZW5naW5lLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLgorKiBgR3JhcGhTdGVwYCBpcyBubyBsb25nZXIgaW4gdGhlIGBzaWRlRWZmZWN0YC1wYWNrYWdlIGFuZCBpcyBub3cgaW4gYG1hcGAtcGFja2FnZSAoYnJlYWtpbmcgY2hhbmdlKS4KKyogQWRkZWQgc3VwcG9ydCBmb3IgbWlkLXRyYXZlcnNhbCBgVigpYC1zdGVwcyAoYEdyYXBoU3RlcGAgc2VtYW50aWNzIHVwZGF0ZWQpLgorKiBGaXhlZCBgTnVtYmVyYCBoYW5kbGluZyBpbiBgT3BlcmF0b3JgIGVudW1zLiBQcmlvciB0aGlzIGNoYW5nZSBhIGxvdCBvZiBvcGVyYXRpb25zIG9uIG1peGVkIGBOdW1iZXJgIHR5cGVzIHJldHVybmVkIGEgd3JvbmcgcmVzdWx0ICh3cm9uZyBkYXRhIHR5cGUpLgorKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluIFNlcnZlci9Ecml2ZXIgc2VyaWFsaXplciB3aGVyZSBlbXB0eSBidWZmZXJzIHdlcmUgZ2V0dGluZyByZXR1cm5lZCBpbiBjZXJ0YWluIGNhc2VzLgorKiBSZW5hbWVkIGBDb25qdW5jdGlvblhgIHRvIGBDb25uZWN0aXZlWGAgYmVjYXVzZSAiY29uanVuY3Rpb24iIGlzIGFzc3VtZWQgImFuZCIgKGRpc2p1bmN0aW9uICJvciIpLCB3aGVyZSAiY29ubmVjdGl2ZSIgaXMgdGhlIHBhcmVudCBjb25jZXB0LgorKiBSZW1vdmVkIGBQYXRoSWRlbnRpdHlTdGVwYCBhcyBpdCB3YXMgYSBoYWNrIHRoYXQgaXMgbm93IHNvbHZlZCBieSBgVHJhdmVyc2FsLkFkbWluLmFkZFRyYXZlcnNlclJlcXVpcmVtZW50KClgLgorKiBBZGRlZCBgVHJhdmVyc2FsLkFkbWluLmFkZFRyYXZlcnNlclJlcXVpcmVtZW50KClgIHRvIGFsbG93IGEgdHJhdmVyc2FsIHN0cmF0ZWd5IG9yIHNvdXJjZSB0byBhZGQgcmVxdWlyZW1lbnRzIChub3Qgb25seSBzdGVwIGRldGVybWluZWQgYW55bW9yZSkuCisqIEFkZGVkIGBUcmF2ZXJzZXJSZXF1aXJlbWVudC5PTkVfQlVMS2AgdG8gc3RhdGUgdGhlIHRyYXZlcnNlciBkb2VzIG5vdCBoYW5kbGUgYnVsay4KKyogQWRkZWQgYEdyYXBoVHJhdmVyc2FsU291cmNlLndpdGhCdWxrKGJvb2xlYW4pYCB0byBlbmFibGVkIHVzZXJzIHRvIGNvbXB1dGUgb25seSB1c2luZyBgYnVsaz0xYC4KKyogR3JlbWxpbiBTZXJ2ZXIgc3VwcG9ydHMgTmV0dHkgbmF0aXZlIHRyYW5zcG9ydCBvbiBsaW51eC4KKyogUmVtb3ZlZCB0aGUgbmVlZCBmb3IgYEdGdW5jdGlvbmAgKGV0Yy4pIGNsb3N1cmUgd3JhcHBlcnMgaW4gR3JlbWxpbi1Hcm9vdnkgYXMgYGFzIEZ1bmN0aW9uYCBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IGNsb3N1cmVzIGFjY29yZGluZ2x5LgorKiBBZGRlZCBgU2VsZWN0Q29sdW1uU3RlcGAgKGBzZWxlY3Qoa2V5cylgIGFuZCBgc2VsZWN0KHZhbHVlcylgKS4gRGVwcmVjYXRlZCBgbWFwS2V5cygpYCBhbmQgYG1hcFZhbHVlcygpYC4KKyogUmVuYW1lZCBgZ3JlbWxpbi5oYWRvb3AuZ3JhcGhJbnB1dFJERGAgYW5kIGBncmVtbGluLmhhZG9vcC5ncmFwaE91dHB1dFJERGAgdG8gYGdyZW1saW4uc3BhcmsuZ3JhcGhJbnB1dFJERGAgYW5kIGBncmVtbGluLnNwYXJrLmdyYXBoT3V0cHV0UkREYCwgcmVzcGVjdGl2ZWx5LgorKiBGaXhlZCBhIGJ1ZyBpbiBgRm9sZFN0ZXBgIGFyb3VuZCBidWxraW5nLiBUaGlzIGNvdWxkIGJlIGEgYnJlYWtpbmcgY2hhbmdlLCBidXQgaXQgaXMgdGhlIGNvcnJlY3Qgc2VtYW50aWNzLgorKiBQcmV2aW91cyBgZ3JvdXAoKWAtYmVoYXZpb3Igc3RlcHMgYXJlIGFjY2Vzc2libGUgdmlhIHRoZSBkZXByZWNhdGVkIGBncm91cFYzZDAoKWAtc3RlcHMuCisqIGBHcm91cFN0ZXBgIGFuZCBgR3JvdXBTaWRlRWZmZWN0U3RlcGAgbm93IGRvIGxhenkgcmVkdWN0aW9ucyB0byByZWR1Y2UgbWVtb3J5IGZvb3RwcmludC4gQnJlYWtpbmcgY2hhbmdlIGZvciBgZ3JvdXAoKWAgc2VtYW50aWNzLgorKiBBZGRlZCBgR3JvdXBTdGVwSGVscGVyYCB3aXRoIHZhcmlvdXMgc3RhdGljIG1ldGhvZHMgYW5kIGNsYXNzZXMgdGhhdCBhcmUgdXNlZCBieSBib3RoIGBHcm91cFN0ZXBgIGFuZCBgR3JvdXBTaWRlRWZmZWN0U3RlcGAuCisqIEFkZGVkIGBCYXJyaWVyU3RlcGAgaW50ZXJmYWNlIHdpdGggYHByb2Nlc3NBbGxTdGFydHMoKWAgbWV0aG9kIHdoaWNoIHByb2Nlc3MgYWxsIHN0YXJ0cyB1cCB0byB5aWVsZGluZyB0aGUgYmFycmllciByZXN1bHQuCisqIEZpeGVkIGEgc2V2ZXJlIHRocmVhZGluZyBpc3N1ZSBpbiBgVGlua2VyR3JhcGhDb21wdXRlcmAuCisqIFRoZSBsb2NhdGlvbiBvZiB0aGUgamFycyBpbiBIREZTIGlzIG5vdyBgaGFkb29wLWdyZW1saW4teC55LnotbGlic2AgdG8gZW5zdXJlIG11bHRpcGxlIFRpbmtlclBvcCB2ZXJzaW9ucyBkb24ndCBjbGFzaC4KKyogYEdpcmFwaEdyYXBoQ29tcHV0ZXJgIHdpbGwgb25seSB1cGxvYWQgdGhlIGphcnMgdG8gSERGUyBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QgKHRvIGhlbHAgc3BlZWQgdXAgc3RhcnR1cCB0aW1lKS4KKyogYEdpcmFwaEdyYXBoQ29tcHV0ZXIud29ya2VycygpYCBpcyBzbWFydCBhYm91dCB1c2luZyB0aHJlYWRzIGFuZCBtYWNoaW5lcyB0byBsb2FkIGJhbGFuY2UgVGlua2VyUG9wIHdvcmtlcnMgYWNyb3NzIGNsdXN0ZXIuCisqIGBHcmFwaENvbXB1dGVyLndvcmtlcnMoaW50KWAgYWxsb3dzIHRoZSB1c2VyIHRvIHByb2dyYW1tYXRpY2FsbHkgc2V0IHRoZSBudW1iZXIgb2Ygd29ya2VycyB0byBzcGF3bi4KKyogQWRkZWQgYEdyeW9TZXJpYWxpemVyYCBhcyB0aGUgbmV3IHJlY29tbWVuZGVkIFNwYXJrIGBTZXJpYWxpemVyYC4gSGFuZGxlcyBgR3JhcGhgIGFuZCBgR3J5b01hcHBlcmAgcmVnaXN0cmllcy4KKyogYEdyeW9Qb29sYCBub3cgbWFrZXMgdXNlIG9mIGBHcnlvUG9vbC5CdWlsZGVyYCBmb3IgaXRzIGNvbnN0cnVjdGlvbi4KKyogQnVtcGVkIHRvIEFwYWNoZSBIYWRvb3AgMi43LjEuCisqIEJ1bXBlZCB0byBBcGFjaGUgR2lyYXBoIDEuMS4wLgorKiBCdW1wZWQgdG8gQXBhY2hlIFNwYXJrIDEuNS4xLgorKiBTcGxpdCBIYWRvb3AtR3JlbWxpbiBhcGFydCBzdWNoIHRoZXJlIGlzIG5vdyBgaGFkb29wLWdyZW1saW5gLCBgc3BhcmstZ3JlbWxpbmAsIGFuZCBgZ2lyYXBoLWdyZW1saW5gIChhbmQgcmVzcGVjdGl2ZSBgR3JlbWxpblBsdWdpbnNgKS4KKyogQWRkZWQgYExhbWJkYUNvbGxlY3RpbmdCYXJyaWVyU3RlcGAgd2hpY2ggZ2VuZXJhbGl6ZXMgYE5vT3BCYXJyaWVyU3RlcGAgYW5kIGFsbG93cyBmb3IgYGJhcnJpZXIobm9ybVNhY2spYC10eXBlIG9wZXJhdGlvbnMuCisqIEZpeGVkIGJ1Z3MgaW4gdGhlIEdyZW1saW4gU2VydmVyJ3MgTklPIHByb3RvY29sIGJvdGggb24gdGhlIHNlcnZlciBhbmQgZHJpdmVyIHNpZGUuCisqIEFkZGVkIGBQYXRoLnBvcEVxdWFscyhQb3AsT2JqZWN0KWAgdG8gY2hlY2sgZm9yIHBhdGggZXF1YWxpdHkgYmFzZWQgb24gYFBvcGAgKHVzZWZ1bCBmb3IgYFRyYXZlcnNlclJlcXVpcmVtZW50LkxBQkVMRURfUEFUSGApLgorKiBBZGRlZCBgT3BlcmF0b3IuYXNzaWduYCB0byBhbGxvdyBzZXR0aW5nIGEgZGlyZWN0IHZhbHVlLgorKiBgT3BlcmF0b3JgIGlzIG5vdyBhIGBCaW5hcnlPcGVyYXRvcjxPYmplY3Q+YCB3aXRoIGFwcHJvcHJpYXRlIHR5cGVjYXN0aW5nIGZvciByZXNwZWN0aXZlIG51bWJlciBvcGVyYXRvcnMuCisqIFNpbXBsaWZpZWQgYFNhY2tWYWx1ZVN0ZXBgIHNvIGl0IG5vdyBzdXBwb3J0cyBib3RoIGBzYWNrKGZ1bmN0aW9uKWAgYW5kIGBzYWNrKGZ1bmN0aW9uKS5ieSgpYC4gRGVwcmVjYXRlZCBgc2FjayhmdW5jdGlvbixzdHJpbmcpYCAuCisqIEFkZGVkIGBQYXJhbWV0ZXJzYCBvYmplY3QgdG8gYWxsb3cgZm9yIHRoZSBwYXJhbWV0ZXJzIG9mIGEgc3RlcCB0byBiZSByZXRyaWV2ZWQgYXQgcnVudGltZSB2aWEgYSB0cmF2ZXJzYWwuCisqIFJlZGVzaWduZWQgKHRob3VnaCBiYWNrd2FyZHMgY29tcGF0aWJsZSkgYEFkZEVkZ2VTdGVwYCwgYEFkZFZlcnRleFN0ZXBgLCBhbmQgYEFkZFByb3BlcnR5U3RlcGAgKGFuZCByZXNwZWN0aXZlIGBHcmFwaFRyYXZlcnNhbGAgQVBJKS4KKyogQWRkZWQgYEdyYXBoVHJhdmVyc2FsU291cmNlLmluamVjdCgpYCBzbyB1c2VycyBjYW4gc3Bhd24gYSB0cmF2ZXJzZXIgd2l0aCBub24tZ3JhcGggb2JqZWN0cy4KKyogYEdyYXBoU3RlcGAgY2FuIG5vdyB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50IGBDb2xsZWN0aW9uYCB3aGljaCBpcyBlaXRoZXIgZWxlbWVudHMgb3IgZWxlbWVudCBpZHMgKGkuZS4gYGcuVihbMSwyLDNdKWAgaXMgc3VwcG9ydGVkIG5vdykuCisqIEFkZGVkIGBMb29wc1N0ZXBgIHRvIG1ha2UgdGhlIGxvb3AgY291bnRlciBhY2Nlc3NpYmxlIHdpdGhpbiBgcmVwZWF0KClgLCBgdW50aWwoKWAgYW5kIGBlbWl0KClgLgorKiBHZXBoaSBQbHVnaW4gbm8gbG9uZ2VyIHJlcXVpcmVzIG1hbnVhbCBpbnNlcnQgb2YgYHN0b3JlYCBzdGVwcyB0byB2aXN1YWxpemUgYSB0cmF2ZXJzYWwuCisqIEFkZGVkIGEgYFRpbmtlcklvUmVnaXN0cnlgIHRoYXQgcmVnaXN0ZXJzIGEgY3VzdG9tIHNlcmlhbGl6ZXIgZm9yIEdyeW8gdGhhdCB3aWxsIHNlcmlhbGl6ZSBhbiBlbnRpcmUgYFRpbmtlckdyYXBoYCBpbnN0YW5jZS4KKyogQWRkZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIEdlcGhpIFBsdWdpbiBmb3Igc2V0dGluZyB0aGUgc2l6ZSBvZiBub2RlcyB2aXN1YWxpemVkLgorKiBSZXBsYWNlZCBgRGVkdXBCaWplY3Rpb25TdHJhdGVneWAgd2l0aCB0aGUgbW9yZSBlZmZlY3RpdmUgYEZpbHRlclJhbmtpbmdTdHJhdGVneWAuCisqIGBDb21wdXRlckF3YXJlU3RlcHNgIG11c3Qgbm90IG9ubHkgaGFuZGxlIHN0ZXAgaWRzLCBidXQgYWxzbyBzdGVwIGxhYmVscy4KKyogUmVuYW1lZCBgQl9PX1BfU0VfU0xfVHJhdmVyc2VyYCB0byBgQl9MUF9PX1BfU0VfU0xfVHJhdmVyc2VyYCBhcyBpdCBub3cgc3VwcG9ydHMgYFRyYXZlcnNlclJlcXVpcmVtZW50LkxBQkVMRURfUEFUSGAuCisqIEFkZGVkIGBCX0xQX09fU19TRV9TTF9UcmF2ZXJzZXJgIGluIHN1cHBvcnQgb2YgYFRyYXZlcnNlclJlcXVpcmVtZW50LkxBQkVMRURfUEFUSGAuCisqIEFkZGVkIGBUcmF2ZXJzZXJSZXF1aXJlbWVudC5MQUJFTEVEX1BBVEhgIHdoaWNoIG9ubHkgZ2VuZXJhdGVzIHBhdGggZGF0YSBmb3Igc3RlcHMgdGhhdCBhcmUgbGFiZWxlZCAoZ3JlYXRseSBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2Qgb2YgYnVsa2luZykuCisqIEZpeGVkIGEgYnVnIGluIGBQYXRoYCB1c2FnZSB0aGF0IHJlcXVpcmVkIGFuIEFQSSB1cGRhdGU6IGBQYXRoLmFkZExhYmVsKClgIGlzIG5vdyBgUGF0aC5leHRlbmQoU2V0PFN0cmluZz4pYCBhbmQgYFRyYXZlcnNlci5hZGRMYWJlbHMoU2V0PFN0cmluZz4pYC4KKyogTWFkZSBgUGF0aGAgaXRlcmFibGUsIHNvIHRoYXQgaXQgY2FuIGJlIGBgdW5mb2xkKClgYCdlZCBhbmQgdXNlZCBieSBsb2NhbCBzdGVwcyBsaWtlIGBtaW4obG9jYWwpYCwgYG1heChsb2NhbClgLCBldGMuCisqIGBXaGVyZVRyYXZlcnNhbFN0ZXBgIGFuZCBgV2hlcmVQcmVkaWNhdGVTdGVwYCBhcmUgbm93IHRoZSBvbmx5ICJzcGVjaWFsIiBgU2NvcGluZ2Agc3RlcHMgYWZ0ZXIgYE1hdGNoU3RhcnRTdGVwYCBpbiBgbWF0Y2goKWAuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC03NzQgb3JkZXIgLyBkZWR1cCBpc3N1ZXMKKyogVElOS0VSUE9QLTc5OSBbUHJvcG9zYWxdIHdpdGgoKS1tb2R1bGF0b3IgZm9yIHN0cmVhbSBsZXZlbCB2YXJpYWJsZSBiaW5kaW5nLgorKiBUSU5LRVJQT1AtODAxIGdyb3VwQ291bnQoKSBmYWlscyBmb3IgdmVydGljZXMgKGVsZW1lbnRzPykgKHVzaW5nIFNwYXJrKQorKiBUSU5LRVJQT1AtODExIEFkZFByb3BlcnR5U3RlcFRlc3QgZmFpbHMgImFsbCBvZiBhIHN1ZGRlbiIKKyogVElOS0VSUE9QLTgyMyBhZGRWKCkgYnJva2VuIGZvciBtdWx0aS12YWx1ZSBwcm9wZXJ0aWVzCisqIFRJTktFUlBPUC04NDMgTWlzc3BlY2lmaWVkIEhBRE9PUF9HUkVNTElOX0xJQlMgZ2VuZXJhdGVzIE51bGxQb2ludGVyRXhjZXB0aW9uCisqIFRJTktFUlBPUC04NTcgQWRkIEdyYXBoQ29tcHV0ZXIuY29uZmlnKGtleSx2YWx1ZSkKKyogVElOS0VSUE9QLTg5NSBVc2UgImFzIEJpbmFyeU9wZXJhdG9yIiBhbmQgcmVtb3ZlIEdCaW5hcnlPcGVyYXRvcgorKiBUSU5LRVJQT1AtOTAzIEZpeCBlbXB0eSBidWZmZXIgcmV0dXJuIHVwb24gYnVmZmVyIGNhcGFjaXR5IGV4Y2VlZGVkCisqIFRJTktFUlBPUC05MTAgSW4gc2Vzc2lvbiB0cmFuc2FjdGlvbiBvcGVuZWQgZnJvbSBzZXNzaW9ubGVzcyByZXF1ZXN0CisqIFRJTktFUlBPUC05MTggQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSBpcyB0b28gcmVzdHJpY3RpdmUKKyogVElOS0VSUE9QLTkyNiBSZW5hbWVkIFRpbmtlckdyYXBoIHB1YmxpYyBzdGF0aWNzIHRvIGNvbW1vbiBwYXR0ZXJuIHVzZWQgZm9yIG90aGVyIHN0YXRpY3MuCisqIFRJTktFUlBPUC05NDggQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QuY2hlY2tNYXAgbm90IGFzc2VydGVkIGluIEdyb3VwVGVzdAorKiBUSU5LRVJQT1AtOTUzIEFydGlmYWN0IGVxdWFsaXR5IGlzIG5vdCBldmFsdWF0aW5nIHByb3Blcmx5CisqIFRJTktFUlBPUC05NTUgSGFzaE1hcCROb2RlIG5vdCBzZXJpYWxpemFibGUKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjk3IEVuc3VyZSBDb25zaXN0ZW50IEJlaGF2aW9yIE92ZXIgRGVsZXRlZCBFbGVtZW50cyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTMzMyBTdXBwb3J0IFZlcnRleFByb3BlcnR5IGluIFBhcnRpdGlvblN0cmF0ZWd5CisqIFRJTktFUlBPUC0zOTEgTW9yZSBmbHVlbmN5IGluIEdyYXBoQ29tcHV0ZXIgZm9yIHBhcmFtZXRlcml6YXRpb24uCisqIFRJTktFUlBPUC02MTYgVXNlIFNwYXJrIDEuMy4wIGluIEhhZG9vcC1HcmVtbGluLgorKiBUSU5LRVJQT1AtNjI0IFBhc3NpbmcgRGV0YWNoZWQvUmVmZXJlbmNlZCB0byBHcmFwaC52ZXJ0aWNlcy9lZGdlKCkKKyogVElOS0VSUE9QLTY4MCBDb25maWd1cmFibGUgQ2hhbm5lbGl6ZXIgZm9yIEdyZW1saW4gRHJpdmVyCisqIFRJTktFUlBPUC03MjggSW1wcm92ZSBSZW1vdGUgR3JhcGggT2JqZWN0IFRyZWF0bWVudCBpbiBDb25zb2xlCisqIFRJTktFUlBPUC03NTYgUHJvdmlkZSBhIHN0cmljdCBwYXJzaW5nIG9wdGlvbiBmb3IgR3JhcGhNTFJlYWRlcgorKiBUSU5LRVJQT1AtNzYwIE1ha2UgbG9vcCBjb3VudGVyIGFjY2Vzc2libGUgd2l0aGluIHJlcGVhdCgpCisqIFRJTktFUlBPUC03NjIgQWxsb3cgbWlkLXRyYXZlcnNhbCBWKCkgKGFuZCBFKCkpCisqIFRJTktFUlBPUC03NjUgRGVjb21wb3NlIEFic3RyYWN0VHJhbnNhY3Rpb24gZm9yIGRpZmZlcmVudCB0cmFuc2FjdGlvbmFsIGNvbnRleHRzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtNzY3IFBhdGggc2hvdWxkIHBsYXkgd2VsbCB3aXRoICJsb2NhbCIgc3RlcHMuCisqIFRJTktFUlBPUC03NjggTWF0Y2hTdGVwIGluIE9MQVAgc2hvdWxkIGJlIHNtYXJ0IGFib3V0IGN1cnJlbnQgdmVydGV4LgorKiBUSU5LRVJQT1AtNzY5IE1ha2UgdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgVFAzIGRvY3Mgc3RvcnkgYmV0dGVyLgorKiBUSU5LRVJQT1AtNzcyIFRyYXZlcnNlclJlcXVpcmVtZW50LkxBQkVMRURfUEFUSAorKiBUSU5LRVJQT1AtNzk2IFN1cHBvcnQgbWVyZ2UgYmluYXJ5IG9wZXJhdG9yIGZvciBHcmVtbGluIHNhY2tzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtNzk4IFtQcm9wb3NhbF0gUmVuYW1lIG1hcEtleXMoKS9tYXBWYWx1ZXMoKSB0byBzZWxlY3Qoa2V5cykgYW5kIHNlbGVjdCh2YWx1ZXMpLgorKiBUSU5LRVJQT1AtODAyIFByb3ZpZGUgc2FjayhvYmplY3QpIHNvIHRoYXQgdGhlIHNhY2sgY2FuIGJlIGRpcmVjdGx5IHNldC4KKyogVElOS0VSUE9QLTgwMyBBIGJldHRlciBzb2x1dGlvbiB0byBnLlYoc29tZUNvbGxlY3Rpb24udG9BcnJheSgpKQorKiBUSU5LRVJQT1AtODA1IEVuZm9yY2UgQXV0b0Nsb3NlYWJsZSBTZW1hbnRpY3Mgb24gVHJhbnNhY3Rpb24gKihicmVha2luZykqCisqIFRJTktFUlBPUC04MjEgSW1wcm92ZSB0ZXN0aW5nIGFyb3VuZCBUcmF2ZXJzYWxIZWxwZXIgYXJvdW5kIHJlY3Vyc2l2ZSBtZXRob2RzCisqIFRJTktFUlBPUC04MjUgW1Byb3Bvc2FsXSBTZXRCdWxrU3RlcCAoc2lkZUVmZmVjdFN0ZXApCisqIFRJTktFUlBPUC04MjYgT25lVG9NYW55QmFycmllclN0cmF0ZWd5CisqIFRJTktFUlBPUC04MjcgQWRkIGEgY29uc29sZSBzZXNzaW9uIHRvIHRoZSBQYWdlUmFuayBzZWN0aW9uIG9mIHRoZSBkb2NzLgorKiBUSU5LRVJQT1AtODI5IFRpbmtlckdyYXBoQ29tcHV0ZXIgc2hvdWxkIHN1cHBvcnQgdGhlIHVzZXIgc3BlY2lmaWVkIHRocmVhZC93b3JrZXIgY291bnQuCisqIFRJTktFUlBPUC04MzUgU2hhZGUgSmFja3NvbiBEZXBlbmRlbmNpZXMgKihicmVha2luZykqCisqIFRJTktFUlBPUC04MzYgU3VwcG9ydCBIYWRvb3AyIGluIHBsYWNlIG9mIEhhZG9vcDEKKyogVElOS0VSUE9QLTg1MCBSZWR1Y2UgR3JhcGguYWRkVmVydGV4IG92ZXJsb2FkIGFtYmlndWl0eSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTg1MSBHcm91cENvdW50U3RlcCBuZWVkcyBhIGJ5KCkgZm9yIHRoZSBjb3VudC4KKyogVElOS0VSUE9QLTg2MSBTb2x2ZSAiVGhlIE51bWJlciBQcm9ibGVtIiBmb3IgT3BlcmF0b3IgKGFuZCBmb2xsb3cgb24gb3BlcmF0b3JzKQorKiBUSU5LRVJQT1AtODYzIFtQcm9wb3NhbF0gVHVybiBvZmYgYnVsa2luZyAtLSBvciBpcyB0aGVyZSBzb21ldGhpbmcgbW9yZSBnZW5lcmFsPyAoaG9wZSBub3QpLgorKiBUSU5LRVJQT1AtODY2IEdyb3VwU3RlcCBhbmQgVHJhdmVyc2FsLUJhc2VkIFJlZHVjdGlvbnMgKihicmVha2luZykqCisqIFRJTktFUlBPUC04NjggQWxsb3cgU3BhcmsgR3JlbWxpbiBDb21wdXRlciB0byBSZXVzZSBTcGFyayBDb250ZXh0cworKiBUSU5LRVJQT1AtODc0IFJlbmFtZSBHcmVtbGluLVNwYXJrIHByb3BlcnRpZXMgdXNpbmcgZ3JlbWxpbi5zcGFyayBwcmVmaXguICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtODc2IFJlbmFtZSBWZW5kb3JPcHRpbWl6YXRpb25TdHJhdGVneSBYWFhPcHRpbWl6YXRpb25TdHJhdGVneSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTg3OSBSZW1vdmUgZGVwcmVjYXRlZCBwcm9tb3RlQmluZGluZ3MgZnJvbSBHcmVtbGluRXhlY3V0b3IgKihicmVha2luZykqCisqIFRJTktFUlBPUC04ODUgQ2hhbmdlIFRyYW5zYWN0aW9uLm9uUmVhZFdyaXRlKCkgdG8gYmUgYSBUaHJlYWRMb2NhbCBzZXR0aW5nICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtODg4IEdyYXBoVHJhdmVyc2FsLnByb3BlcnR5IG92ZXJsb2FkcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTg5NiBTaW1wbGlmeSB0aGUge3t3aXRoU2Fja319IG1ldGhvZHMgb2Yge3tHcmFwaFRyYXZlcnNhbFNvdXJjZX19LiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTg5NyBSZW1vdmUgZGVwcmVjYXRlZCBHU3VwcGxpZXIsIEdGdW5jdGlvbiwgR0NvbnN1bWVyLCBldGMuIG1ldGhvZHMuICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtODk4IFJlbmFtZSBDb25qdWN0aW9uUCBhbmQgQ29uanVjdGlvblN0ZXAgdG8gQ29ubmVjdGl2ZVAgYW5kIENvbm5lY3RpdmVTdGVwICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtODk5IEJ1bXAgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE5lbzRqLgorKiBUSU5LRVJQT1AtOTAwIFByb3ZpZGUgYnkob2JqZWN0KSB3aGljaCBjb21waWxlcyB0byBieShjb25zdGFudChvYmplY3QpKQorKiBUSU5LRVJQT1AtOTAxIE9wdGlvbiBmb3IgdXNlIG9mIE5ldHR5IGVwb2xsIG9uIExpbnV4IHRvIHJlZHVjZSBHQyBwcmVzc3VyZQorKiBUSU5LRVJQT1AtOTA0IEJ1bGtMb2FkZXJWZXJ0ZXhQcm9ncmFtIG9wdGltaXphdGlvbnMKKyogVElOS0VSUE9QLTkwNSBIYXJkZW4gdGltZSBvcmllbnRlZCB0ZXN0cyBpbiBSZXN1bHRRdWV1ZVRlc3QKKyogVElOS0VSUE9QLTkwNyBnZXR0ZXJzIGZvciBSZXBlYXRTdGVwLnVudGlsVHJhdmVyc2FsIGFuZCBSZXBlYXRTdGVwLmVtaXRUcmF2ZXJzYWwKKyogVElOS0VSUE9QLTkwOCBVc2UgbGluZSBicmVha3MgaW4gZG9jdW1lbnRhdGlvbgorKiBUSU5LRVJQT1AtOTA5IEltcHJvdmUgc3RlcHMgdGhhdCBoYW5kbGUgbnVtZXJpYyBkYXRhCisqIFRJTktFUlBPUC05MTEgQWxsb3cgc2V0dGluZyBUaHJlYWQgU3BlY2lmaWMgU3BhcmsgSm9iR3JvdXAvQ3VzdG9tIFByb3BlcnRpZXMgYmFzZWQgb24gaGFkb29wIGNvbmYKKyogVElOS0VSUE9QLTkxMyBSZW5hbWUgR3JlbWxpbiBTZXJ2ZXIgYXJndW1lbnRzIHJlYmluZGluZyB0byBhbGlhcworKiBUSU5LRVJQT1AtOTE0IERyaXZlclJlbW90ZUFjY2VwdG9yIGluIEdyZW1saW4gQ29uc29sZSBzdXBwb3J0cyBhbGlhc2VzCisqIFRJTktFUlBPUC05MTcgQWRkIEhhZG9vcEdyYXBoLm9wZW4oU3RyaW5nKQorKiBUSU5LRVJQT1AtOTIyIEFkZCBhIGJvb2sgZm9yIERldmVsb3BlciBEb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC05MjMgQWRkIGEgYm9vayBmb3IgVHV0b3JpYWxzCisqIFRJTktFUlBPUC05MjUgVXNlIHBlcnNpc3RlZCBTcGFya0NvbnRleHQgdG8gcGVyc2lzdCBhbiBSREQgYWNyb3NzIFNwYXJrIGpvYnMuCisqIFRJTktFUlBPUC05MzEgTWFrZSBpdCBwb3NzaWJsZSB0byBleHRlbmQgdGhlIGNvcmUgT3BQcm9jZXNzb3IgaW1wbGVtZW50YXRpb25zCisqIFRJTktFUlBPUC05MzMgSW1wcm92ZSByZWxlYXNlIHByb2Nlc3MgdG8gZ2V0IGZpbGVzIG5hbWVkIHByb3Blcmx5CisqIFRJTktFUlBPUC05MzUgQWRkIG1pc3NpbmcgImNsb3NlIiBvcGVyYXRpb24gdG8gdGhlIHNlc3Npb24gb3BQcm9jZXNzb3IgZG9jcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYyBiL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDFkMjJmCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jCkBAIC0wLDAgKzEsMTEzOCBAQAorLy8vLworTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLy8vLworPT0gVGlua2VyUG9wIDMuMi4wIChOaW5lIEluY2ggR3JlbWxpbnMpCisKK2ltYWdlOjpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYXBhY2hlL3RpbmtlcnBvcC9tYXN0ZXIvZG9jcy9zdGF0aWMvaW1hZ2VzL25pbmUtaW5jaC1ncmVtbGlucy5wbmdbd2lkdGg9MTg1XQorCitbW3JlbGVhc2UtMy0yLTExXV0KKz09PSBUaW5rZXJQb3AgMy4yLjExIChSZWxlYXNlIERhdGU6IEphbnVhcnkgMiwgMjAxOSkKKworKiBCdW1wZWQgdG8gSmFja3NvbiBEYXRhYmluZCAyLjkuOAorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0yMDc0IEVuc3VyZSB0aGF0IG9ubHkgTnVHZXQgcGFja2FnZXMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24gYXJlIHB1c2hlZAorKiBUSU5LRVJQT1AtMjEyMSBCdW1wIEphY2tzb24gRGF0YWJpbmQgMi45LjgKKworW1tyZWxlYXNlLTMtMi0xMF1dCis9PT0gVGlua2VyUG9wIDMuMi4xMCAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE1LCAyMDE4KQorCisqIFJlbW92ZWQgY29uZmxpY3Rpbmcgbm9uLWluZHkgZ3Jvb3Z5IGNvcmUgZGVwZW5kZW5jeQorKiBCdW1wZWQganl0aG9uLXN0YW5kYWxvbmUgMi43LjEKKyogQWRkZWQgYSBkZWxlZ2F0ZSB0byB0aGUgR3JlbWxpbi5OZXQgZHJpdmVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4KKyogU1NMIHNlY3VyaXR5IGVuaGFuY2VtZW50cworKiBBZGRlZCBHcmVtbGluIHZlcnNpb24gdG8gR3JlbWxpbiBTZXJ2ZXIgc3RhcnR1cCBsb2dnaW5nIG91dHB1dC4KKyogRml4ZWQgcHJvYmxlbSB3aXRoIEdyZW1saW4gU2VydmVyIHNvbWV0aW1lcyByZXR1cm5pbmcgYW4gYWRkaXRpb25hbCBtZXNzYWdlIGFmdGVyIGEgZmFpbHVyZS4KKyogQWxsb3dlZCBzcGFjZXMgaW4gY2xhc3NwYXRoIGZvciBgZ3JlbWxpbi1zZXJ2ZXIuYmF0YC4KKyogRml4ZWQgYnVnIGluIHRyYXZlcnNhbHMgdGhhdCB1c2VkIFB5dGhvbiBsYW1iZGFzIHdpdGggc3RyYXRlZ2llcyBpbiBgZ3JlbWxpbi1weXRob25gLgorKiBNb2RpZmllZCBNYXZlbiBhcmNoZXR5cGUgZm9yIEdyZW1saW4gU2VydmVyIHRvIHVzZSByZW1vdGUgdHJhdmVyc2FscyByYXRoZXIgdGhhbiBzY3JpcHRzLgorKiBBZGRlZCBhbiBzeXN0ZW0gZXJyb3IgY29kZSBmb3IgZmFpbGVkIHBsdWdpbiBpbnN0YWxscyBmb3IgR3JlbWxpbiBTZXJ2ZXIgYC1pYCBvcHRpb24uCisqIEZpeGVkIGJ1ZyBpbiBrZWVwLWFsaXZlIHJlcXVlc3RzIGZyb20gb3Zlci1xdWV1aW5nIGNhbmNlbGxlZCBqb2JzLgorKiBNYXRjaCBudW1iZXJzIGluIGBjaG9vc2UoKWAgb3B0aW9ucyB1c2luZyBgTnVtYmVySGVscGVyYCAobWF0Y2ggdmFsdWVzLCBpZ25vcmUgZGF0YSB0eXBlKS4KKyogQWRkZWQgc3VwcG9ydCBmb3IgR3JhcGhTT04gc2VyaWFsaXphdGlvbiBvZiBgRGF0ZWAgaW4gSmF2YXNjcmlwdC4KKyogQWRkZWQgc3luY2hyb25pemVkIGBNYXBgIHRvIEdyeW8gMS4wIHJlZ2lzdHJhdGlvbnMuCisqIEFkZGVkIGBUcmlwbGVgIHRvIEdyeW8gMS4wIHJlZ2lzdHJhdGlvbnMuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGBEb3VibGUuTmFOYCwgYERvdWJsZS5QT1NJVElWRV9JTkZJTklUWWAgYW5kIGBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFlgLgorKiBJbXByb3ZlZCBlc2NhcGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gc3RyaW5ncyBwYXNzZWQgdG8gdGhlIGBHcm9vdnlUcmFuc2xhdG9yYC4KKyogQWRkZWQgYENsdXN0ZXJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHNldCBhIGN1c3RvbSB2YWxpZGF0aW9uIHNjcmlwdCB0byB1c2UgdG8gdGVzdCBzZXJ2ZXIgY29ubmVjdGl2aXR5IGluIHRoZSBKYXZhIGRyaXZlci4KKyogSW1wcm92ZWQgYWJpbGl0eSBvZiBgR3Jvb3Z5VHJhbnNsYXRvcmAgdG8gaGFuZGxlIG1vcmUgdHlwZXMgc3VwcG9ydGVkIGJ5IEdyYXBoU09OLgorKiBJbXByb3ZlZCBhYmlsaXR5IG9mIGBHcm9vdnlUcmFuc2xhdG9yYCB0byBoYW5kbGUgY3VzdG9tIHR5cGVzLgorKiBBZGRlZCBiZXR0ZXIgaW50ZXJuYWwgcHJvY2Vzc2luZyBvZiBgQ29sdW1uYCBpbiBgYnkoRnVuY3Rpb24pYC4KKyogQWRkZWQgYGhhc05leHQoKWAgc3VwcG9ydCBvbiBgVHJhdmVyc2FsYCBmb3IgYGdyZW1saW4tcHl0aG9uYC4KKyogQWRkZWQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBleHRlbmRlZCB0eXBlcyBpbiBHcmVtbGluLk5ldCB3aXRoIGBkZWNpbWFsYCwgYFRpbWVTcGFuYCwgYEJpZ0ludGVnZXJgLCBgYnl0ZWAsIGBieXRlW11gLCBgY2hhcmAgYW5kIGBzaG9ydGAuCisqIEZpeGVkIGJ1ZyBpbiBKYXZhIGRyaXZlciB3aGVyZSBhbiBkaXNvcmRlcmx5IHNodXRkb3duIG9mIHRoZSBzZXJ2ZXIgd291bGQgY2F1c2UgdGhlIGNsaWVudCB0byBoYW5nLgorKiBBZGRlZCBhIGRvdG5ldCB0ZW1wbGF0ZSBwcm9qZWN0IHRoYXQgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGdldCBzdGFydGVkIHdpdGggR3JlbWxpbi5OZXQuCisqIFJlbW92ZWQgYFRocmVhZEludGVycnVwdEN1c3RvbWl6ZXJQcm92aWRlcmAgZnJvbSBkb2N1bWVudGF0aW9uIGFzIGEgd2F5IHRvIHRpbWVvdXQuCisqIENoYW5nZWQgYmVoYXZpb3Igb2YgYHdpdGhSZW1vdGUoKWAgaWYgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHNvIGFzIHRvIHNpbXBseSB0aHJvdyBhbiBleGNlcHRpb24gYW5kIG5vdCBwZXJmb3JtIHRoZSBzaWRlLWVmZmVjdCBvZiBhdXRvLWNsb3NpbmcuCisqIEFkZGVkIERvY2tlciBpbWFnZXMgZm9yIEdyZW1saW4gQ29uc29sZSBhbmQgR3JlbWxpbiBTZXJ2ZXIuCisqIEZpeGVkIGJ1ZyBpbiBgYnJhbmNoKClgIHdoZXJlIHJlZHVjaW5nIHN0ZXBzIGFzIG9wdGlvbnMgd291bGQgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cy4KKyogUmVtb3ZlZCByZWN1cnNpdmUgaGFuZGxpbmcgb2Ygc3RyZWFtaW5nIHJlc3VsdHMgZnJvbSBHcmVtbGluLVB5dGhvbiBkcml2ZXIgdG8gYXZvaWQgbWF4IHJlY3Vyc2lvbiBkZXB0aCBlcnJvcnMuCisqIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS4KKyogQ2hlY2tlZCB3ZWIgc29ja2V0IHN0YXRlIGJlZm9yZSBjbG9zaW5nIGNvbm5lY3Rpb24gaW4gdGhlIC5ORVQgZHJpdmVyLgorKiBEZXByZWNhdGVkIGBCdWxrTG9hZGVyVmVydGV4UHJvZ3JhbWAgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCisqIERlcHJlY2F0ZWQgYEJ1bGtEdW1wZXJWZXJ0ZXhQcm9ncmFtYCB3aXRoIHRoZSBtb3JlIGFwdGx5IG5hbWVkIGBDbG9uZVZlcnRleFByb2dyYW1gLgorKiBBZGRlZCBgY3JlYXRlR3JhdGVmdWxEZWFkKClgIHRvIGBUaW5rZXJGYWN0b3J5YCB0byBoZWxwIG1ha2UgaXQgZWFzaWVyIHRvIHRyeSB0byBpbnN0YW50aWF0ZSB0aGF0IHRveSBncmFwaC4KKyogQWRkZWQgaWRlbnRpZmllcnMgdG8gZWRnZXMgaW4gdGhlIEtpdGNoZW4gU2luayB0b3kgZ3JhcGguCisqIE9yZGVyZWQgdGhlIGxvYWRpbmcgb2YgcGx1Z2lucyBpbiB0aGUgR3JlbWxpbiBDb25zb2xlIGJ5IHRoZWlyIHBvc2l0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisqIFJlZmFjdG9yZWQgdGhlIEdyZW1saW4gU2VydmVyIGludGVncmF0aW9uIHRlc3RpbmcgZnJhbWV3b3JrIGFuZCBzdHJlYW1saW5lZCB0aGF0IGluZnJhc3RydWN0dXJlLgorKiBMb2dnZWQgdGhlIHNlZWQgdXNlZCBpbiBpbml0aWFsaXppbmcgYFJhbmRvbWAgZm9yIHRlc3RzLgorKiBGaXhlZCBidWcgaW4gYEdyb292eVRyYW5zbGF0b3JgIHRoYXQgZGlkbid0IHByb3Blcmx5IGhhbmRsZSBlbXB0eSBgTWFwYCBvYmplY3RzLgorKiBBZGRlZCBjb25jcmV0ZSBjb25maWd1cmF0aW9uIG1ldGhvZHMgdG8gYFNwYXJrR3JhcGhDb21wdXRlcmAgdG8gbWFrZSBhIG1vcmUgY2xlYXIgQVBJIGZvciBjb25maWd1cmluZyBpdC4KKyogRml4ZWQgYSBidWcgaW4gYFRpbmtlckdyYXBoQ291bnRTdHJhdGVneWAsIHdoaWNoIGRpZG4ndCBjb25zaWRlciB0aGF0IGNlcnRhaW4gbWFwIHN0ZXBzIG1heSBub3QgZW1pdCBhbiBlbGVtZW50LgorKiBGaXhlZCBhIGJ1ZyBpbiBKYXZhU2NyaXB0IEdMViB3aGVyZSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGNsb3NlKCkgbWV0aG9kIGRpZG4ndCByZXR1cm5lZCBhIFByb21pc2UgaW5zdGFuY2UuCisqIEJ1bXBlZCB0byBKYWNrc29uIDIuOS42LgorKiBTYXNsIFBsYWluIFRleHQgQXV0aGVudGljYXRpb24gYWRkZWQgdG8gR3JlbWxpbiBKYXZhc2NyaXB0LgorKiBBYmlsaXR5IHRvIHNlbmQgc2NyaXB0cyB0byBzZXJ2ZXIgYWRkZWQgdG8gR3JlbWxpbiBKYXZhc2NyaXB0LgorKiBUcmFuc2xhdG9yIGNsYXNzIGFkZGVkIHRvIEdyZW1saW4gSmF2YXNjcmlwdCB0byB0cmFuc2xhdGUgYnl0ZWNvZGUgdG8gc2NyaXB0IGNsaWVudHNpZGUuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xODk4IElzc3VlIHdpdGggYmluZGluZ3MgaW4gc3RyYXRlZ2llcyBhbmQgbGFtYmRhcworKiBUSU5LRVJQT1AtMTkzMyBncmVtbGluLXB5dGhvbiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCBvbiBsYXJnZSByZXNwb25zZXMKKyogVElOS0VSUE9QLTE5NTggVGlua2VyR3JhcGhDb3VudFN0cmF0ZWd5IGNhbiByZXR1cm4gd3JvbmcgY291bnRzCisqIFRJTktFUlBPUC0xOTYxIER1cGxpY2F0ZSBjb3BpZXMgb2YgaW1hZ2VzIGRpcmVjdG9yeSBpbiBkb2NzCisqIFRJTktFUlBPUC0xOTYyIEdyb292eVRyYW5zbGF0b3IgZG9lc24ndCBoYW5kbGUgZW1wdHkgbWFwcworKiBUSU5LRVJQT1AtMTk2MyBVc2Ugb2YgcmVkdWNpbmcgc3RlcCBpbiBjaG9vc2UoKQorKiBUSU5LRVJQT1AtMTk3MiBpbmplY3QoKSB0ZXN0cyBhcmUgdGhyb3dpbmcgZXhjZXB0aW9ucyBpbiAuTkVUIEdMViB0ZXN0cworKiBUSU5LRVJQT1AtMTk3OCBDaGVjayBmb3IgV2Vic29ja2V0IGNvbm5lY3Rpb24gc3RhdGUgd2hlbiByZXRyaWV2ZWQgZnJvbSBDb25uZWN0aW9uIFBvb2wgbWlzc2luZworKiBUSU5LRVJQT1AtMTk4OCBtaW5vciBlcnJvciBpbiBkb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC0xOTk5IFtKYXZhXVtncmVtbGluLWRyaXZlcl0gUXVlcnkgdG8gYSByZW1vdGUgc2VydmVyIHZpYSB0aGUgd2Vic29ja2V0IGNsaWVudCBoYW5ncyBpbmRlZmluaXRlbHkgaWYgdGhlIHNlcnZlciBiZWNvbWVzIHVuYXZhaWxhYmxlCisqIFRJTktFUlBPUC0yMDA1IEludGVybWl0dGVudCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiByZXNwb25zZSBoYW5kbGluZworKiBUSU5LRVJQT1AtMjAwOSBQaWNrLmFueSBhbmQgUGljay5ub25lIHNob3VsZCBiZSBleHBvc2VkIGluIEdyZW1saW4tSmF2YVNjcmlwdAorKiBUSU5LRVJQT1AtMjAzMCBLZWVwQWxpdmUgdGFzayBleGVjdXRlZCBmb3IgZXZlcnkgQ29ubmVjdGlvbi53cml0ZSBjYWxsCisqIFRJTktFUlBPUC0yMDMyIFVwZGF0ZSBqeXRob24tc3RhbmRhbG9uZQorKiBUSU5LRVJQT1AtMjA0NCBDYW5ub3QgcmVjb25uZWN0IHRvIEF6dXJlIGNvc21vcyBob3N0IHRoYXQgYmVjb21lcyBhdmFpbGFibGUgYWdhaW4KKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTExMyBHcmFwaENvbXB1dGVyIHN1YmNsYXNzZXMgc2hvdWxkIHN1cHBvcnQgbmF0aXZlIG1ldGhvZHMKKyogVElOS0VSUE9QLTEzNjUgTG9nIHRoZSBzZWVkIHVzZWQgdG8gaW5pdGlhbGl6ZSBSYW5kb20gaW4gdGVzdHMKKyogVElOS0VSUE9QLTE1OTUgR28gdGhyb3VnaCBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtIHdpdGggYSBwcm9maWxlIGFuZCBvcHRpbWl6ZS4KKyogVElOS0VSUE9QLTE3NzggRG8gbm90IHByb21vdGUgdGltZWRJbnRlcnJ1cHQgb3B0aW9uIGZvciBHcmVtbGluIFNlcnZlciBzY3JpcHQgcHJvY2Vzc2luZworKiBUSU5LRVJQT1AtMTc4MCBBZGQgYXV0aGVudGljYXRpb24gdGVzdHMgZm9yIGdyZW1saW4tcHl0aG9uCisqIFRJTktFUlBPUC0xODM2IC5ORVQgc2FtcGxlIHByb2plY3QKKyogVElOS0VSUE9QLTE4NDEgSW5jbHVkZSBQeXRob24gR0xWIHRlc3RzIG9uIFRyYXZpc0NJCisqIFRJTktFUlBPUC0xODk3IFByb3ZpZGUgRG9ja2VyIGltYWdlcyBvZiBHcmVtbGluIFNlcnZlciBhbmQgQ29uc29sZQorKiBUSU5LRVJQT1AtMTk0NSBBZGQgc3VwcG9ydCBmb3IgZXh0ZW5kZWQgR3JhcGhTb24gdHlwZXMgdG8gR3JlbWxpbi5uZXQKKyogVElOS0VSUE9QLTE5NTEgZ3JlbWxpbi1zZXJ2ZXIuYmF0IGRvZXNuJ3Qgc3VwcG9ydCBwYXRocyBjb250YWluaW5nIHNwYWNlcworKiBUSU5LRVJQT1AtMTk1OSBQcm92aWRlIGEgd2F5IHRvIHN1Ym1pdCBzY3JpcHRzIHRvIHRoZSBzZXJ2ZXIgaW4gZ3JlbWxpbi1qYXZhc2NyaXB0CisqIFRJTktFUlBPUC0xOTY4IFJlZmFjdG9yIGVsZW1lbnRzIG9mIEdyZW1saW4gU2VydmVyIHRlc3RpbmcKKyogVElOS0VSUE9QLTE5NzYgSW5jbHVkZSBDb21wdXRlciB0ZXN0cyBmb3IgR0xWcworKiBUSU5LRVJQT1AtMTk3NyBHcmVtbGluLUphdmFTY3JpcHQ6IFN1cHBvcnQgU0FTTCBhdXRoZW50aWNhdGlvbgorKiBUSU5LRVJQT1AtMTk4NSBVcGRhdGUgcG9zaXRpb24gb24gYnVsayBsb2FkaW5nCisqIFRJTktFUlBPUC0xOTg5IFByZXNlcnZlIG9yZGVyIHRoYXQgcGx1Z2lucyBhcmUgYXBwbGllZCBpbiBHcmVtbGluIENvbnNvbGUKKyogVElOS0VSUE9QLTE5OTUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBjbG9zZSgpIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZAorKiBUSU5LRVJQT1AtMjAxMSBVc2UgTnVtYmVySGVscGVyIG9uIGNob29zZSgpCisqIFRJTktFUlBPUC0yMDEyIFRhcmdldCAuTkVUIFN0YW5kYXJkIDIuMCBmb3IgR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTIwMTUgQWxsb3cgdXNlcnMgdG8gY29uZmlndXJlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbnMKKyogVElOS0VSUE9QLTIwMTYgVXBncmFkZSBKYWNrc29uIEZhc3RlclhNTCB0byAyLjkuNSBvciBsYXRlciB0byBmaXggc2VjdXJpdHkgdnVsbmVyYWJpbGl0eQorKiBUSU5LRVJQT1AtMjAxNyBDaGVjayBmb3IgQ29sdW1uIGluIGJ5KCkKKyogVElOS0VSUE9QLTIwMjIgQ2x1c3RlciBTU0wgc2hvdWxkIHRydXN0IGRlZmF1bHQgY2EgY2VydHMgYnkgZGVmYXVsdAorKiBUSU5LRVJQT1AtMjAyMyBHcmVtbGluIFNlcnZlciBzaG91bGQgbm90IGNyZWF0ZSBzZWxmLXNpZ25lZCBjZXJ0cyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIwMjQgR3JlbWxpbiBTZXJ2ZXIgQXBwbGljYXRpb24gYXJjaGV0eXBlIHNob3VsZCBjb25uZWN0IHZpYSB3aXRoUmVtb3RlCisqIFRJTktFUlBPUC0yMDI1IENoYW5nZSB0byBTSEEtMjU2LzUxMiBhbmQgZHJvcCBTSEEtMSBmb3IgcmVsZWFzZXMKKyogVElOS0VSUE9QLTIwMjYgR3JlbWxpbi5OZXQuRHJpdmVyIHNob3VsZCBjaGVjayBDbGllbnRXZWJTb2NrZXQuU3RhdGUgYmVmb3JlIGNsb3NpbmcKKyogVElOS0VSUE9QLTIwMzQgUmVnaXN0ZXIgc3luY2hyb25pemVkTWFwKCkgd2l0aCBHcnlvCisqIFRJTktFUlBPUC0yMDM1IEdyZW1saW4tSmF2YVNjcmlwdDogUGFzcyBjdXN0b20gaGVhZGVycyB0byB0aGUgd2Vic29ja2V0IGNvbm5lY3Rpb24KKyogVElOS0VSUE9QLTIwNDAgSW1wcm92ZSBmbGV4aWJpbGl0eSBvZiBHcm9vdnlUcmFuc2xhdG9yIHRvIGhhbmRsZSBjdXN0b20gdHlwZXMKKyogVElOS0VSUE9QLTIwNDUgUmVtb3ZlIG5vbi1pbmR5IGdyb292eSBkZXBlbmRlbmNpZXMKKyogVElOS0VSUE9QLTIwNTUgUHJvdmlkZSBzdXBwb3J0IGZvciBzcGVjaWFsIG51bWJlciBjYXNlcyBsaWtlIEluZmluaXR5IGluIEdyYXBoU09OCisqIFRJTktFUlBPUC0yMDU2IFVzZSBOdW1iZXJIZWxwZXIgaW4gQ29tcGFyZQorCitbW3JlbGVhc2UtMy0yLTldXQorPT09IFRpbmtlclBvcCAzLjIuOSAoUmVsZWFzZSBEYXRlOiBNYXkgOCwgMjAxOCkKKworKiBGaXhlZCBidWcgd2hlcmUgcGF0aCBoaXN0b3J5IHdhcyBub3QgYmVpbmcgcHJlc2VydmVkIGZvciBrZXlzIGluIG11dGF0aW9ucy4KKyogQnVtcGVkIHRvIGh0dHBjbGllbnQgNC41LjUuCisqIEJ1bXBlZCB0byBHcm9vdnkgMi40LjE1IC0gZml4ZXMgYnVnIHdpdGggYExhbWJkYWAgY29uc3RydWN0aW9uLgorKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBHcmFwaFNPTiBkZXNlcmlhbGl6YXRpb24gb2YgYEJ5dGVjb2RlYC4KKyogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgdHJhdmVyc2FsIGNvbnN0cnVjdGlvbi4KKworPT09PSAgQnVncworCisqIFRJTktFUlBPUC0xOTQ3IFBhdGggaGlzdG9yeSBpc24ndCBwcmVzZXJ2ZWQgZm9yIGtleXMgaW4gbXV0YXRpb25zCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTE3NTUgTm8gZG9jcyBmb3IgUmVmZXJlbmNlRWxlbWVudHMKKyogVElOS0VSUE9QLTE5MTIgUmVtb3ZlIE1ENSBjaGVja3N1bXMKKyogVElOS0VSUE9QLTE5MzQgQnVtcCB0byBsYXRlc3QgdmVyc2lvbiBvZiBodHRwY2xpZW50CisqIFRJTktFUlBPUC0xOTM2IFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IHRvIEJ5dGVjb2RlIGRlc2VyaWFsaXphdGlvbgorKiBUSU5LRVJQT1AtMTk0NCBKYXZhU2NyaXB0IEdMVjogRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBpcyBub3QgZXhwb3J0ZWQgaW4gdGhlIHJvb3QgbW9kdWxlCisqIFRJTktFUlBPUC0xOTUwIFRyYXZlcnNhbCBjb25zdHJ1Y3Rpb24gcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzCisqIFRJTktFUlBPUC0xOTUzIEJ1bXAgdG8gR3Jvb3Z5IDIuNC4xNQorCitbW3JlbGVhc2UtMy0yLThdXQorPT09IFRpbmtlclBvcCAzLjIuOCAoUmVsZWFzZSBEYXRlOiBBcHJpbCAyLCAyMDE4KQorCisqIEFkZGVkIGEgYExhbWJkYWAgY2xhc3MgdG8gR3JlbWxpbi5OZXQgdGhhdCBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgR3Jvb3Z5IGFuZCBQeXRob24gbGFtYmRhcyB3aXRoIEdyZW1saW4uTmV0LgorKiBFbnVtcyBhcmUgbm93IHJlcHJlc2VudGVkIGFzIGNsYXNzZXMgaW4gR3JlbWxpbi5OZXQgd2hpY2ggYWxsb3dzIHRvIHVzZSB0aGVtIGFzIGFyZ3VtZW50cyBpbiBtb3JlIHN0ZXBzLgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNC4xNC4KKyogQWRkZWQgYGNoZWNrQWRqYWNlbnRWZXJ0aWNlc2Agb3B0aW9uIHRvIGBTdWJncmFwaFN0cmF0ZWd5YC4KKyogTW9kaWZpZWQgYEdyZW1saW5Ec2xQcm9jZXNzb3JgIHNvIHRoYXQgaXQgZ2VuZXJhdGVkIHRoZSBgZ2V0QW5vbnltb3VzVHJhdmVyc2FsQ2xhc3MoKWAgbWV0aG9kIHRvIHJldHVybiB0aGUgRFNMIHZlcnNpb24gb2YgYF9fYC4KKyogQWRkZWQgdGhlICJLaXRjaGVuIFNpbmsiIHRlc3QgZGF0YSBzZXQuCisqIEZpeGVkIGRlc2VyaWFsaXphdGlvbiBvZiBgUC5ub3QoKWAgZm9yIEdyYXBoU09OLgorKiBCdW1wZWQgdG8gSmFja3NvbiAyLjkuNC4KKyogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgYEphdmFUcmFuc2xhdG9yYCBieSBjYWNoaW5nIHJlZmxlY3RlZCBtZXRob2RzIHJlcXVpcmVkIGZvciB0cmF2ZXJzYWwgY29uc3RydWN0aW9uLgorKiBFbnN1cmUgdGhhdCBgUmVtb3RlU3RyYXRlZ3lgIGlzIGFwcGxpZWQgYmVmb3JlIGFsbCBvdGhlciBgRGVjb3JhdGlvblN0cmF0ZWd5YCBpbnN0YW5jZXMuCisqIEFkZGVkIGBpZGxlQ29ubmVjdGlvblRpbWVvdXRgIGFuZCBga2VlcEFsaXZlSW50ZXJ2YWxgIHRvIEdyZW1saW4gU2VydmVyIHRoYXQgZW5hYmxlcyBhICJwaW5nIiBhbmQgYXV0by1jbG9zZSBmb3Igc2VlbWluZ2x5IGRlYWQgY2xpZW50cy4KKyogRml4ZWQgYSBidWcgd2hlcmUgbGFtYmRhcyBpbiBgZ3JlbWxpbi1weXRob25gIHdvdWxkIHRyaWdnZXIgYSBmYWlsdXJlIGlmIHN0ZXBzIHVzaW5nIHB5dGhvbi1vbmx5IHN5bWJvbHMgd2VyZSBwcmVzZW50IChzdWNoIGFzIGBhc18oKWApLgorKiBGaXhlZCBhIGJ1ZyBpbiBgTnVtYmVySGVscGVyYCB0aGF0IGxlZCB0byB3cm9uZyBtaW4vbWF4IHJlc3VsdHMgaWYgbnVtYmVycyBleGNlZWRlZCB0aGUgSW50ZWdlciBsaW1pdHMuCisqIERlbGF5ZWQgc2V0dGluZyBvZiB0aGUgcmVxdWVzdCBpZGVudGlmaWVyIHVudGlsIGBSZXF1ZXN0TWVzc2FnZWAgY29uc3RydWN0aW9uIGJ5IHRoZSBidWlsZGVyLgorKiBgUmVmZXJlbmNlRWxlbWVudGAgYXZvaWRzIGBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbmAgaGFuZGxpbmcgaW4gY29uc3RydWN0aW9uIHRodXMgaW1wcm92aW5nIHBlcmZvcm1hbmNlLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGZhaWxlZCBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24gb2YgcmVxdWVzdC9yZXNwb25zZSBtZXNzYWdlcy4KKyogRml4ZWQgaGFuZGxpbmcgb2YgYERpcmVjdGlvbi5CT1RIYCBpbiBgTWVzc2VuZ2VyYCBpbXBsZW1lbnRhdGlvbnMgdG8gcGFzcyB0aGUgbWVzc2FnZSB0byB0aGUgb3Bwb3NpdGUgc2lkZSBvZiB0aGUgYFN0YXJHcmFwaGAuCisqIFJlbW92ZWQgaGFyZGNvZGVkIGV4cGVjdGF0aW9uIGluIG1ldHJpY3Mgc2VyaWFsaXphdGlvbiB0ZXN0IHN1aXRlIGFzIGRpZmZlcmVudCBwcm92aWRlcnMgbWF5IGhhdmUgZGlmZmVyZW50IG91dHB1dHMuCisqIEFkZGVkIGBJbmRleGVkVHJhdmVyc2VyU2V0YCB3aGljaCBpbmRleGVzIG9uIHRoZSB2YWx1ZSBvZiBhIGBUcmF2ZXJzZXJgIHRodXMgaW1wcm92aW5nIHBlcmZvcm1hbmNlIHdoZW4gdXNlZC4KKyogVXRpbGl6ZWQgYEluZGV4ZWRUcmF2ZXJzZXJTZXRgIGluIGBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtYCB0byBhdm9pZCBleHRyYSBpdGVyYXRpb24gd2hlbiBkb2luZyBgVmVydGV4YCBsb29rdXBzLgorKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjU2LkZpbmFsLgorKiBGaXhlZCAuTkVUIEdyYXBoU09OIHNlcmlhbGl6YXRpb24gb2YgYFAuV2l0aGluKClgIGFuZCBgUC53aXRob3V0KClgIHdoZW4gcGFzc2luZyBhIGBDb2xsZWN0aW9uYCBhcyBhbiBhcmd1bWVudC4KKyogRml4ZWQgYSBidWcgaW4gR3JlbWxpbiBDb25zb2xlIHdoaWNoIHByZXZlbnRlZCBoYW5kbGluZyBvZiBgZ3JlbWxpbi5zaGAgZmxhZ3MgdGhhdCBoYWQgYW4gIj0iIGJldHdlZW4gdGhlIGZsYWcgYW5kIGl0cyBhcmd1bWVudHMuCisqIEZpeGVkIGJ1ZyB3aGVyZSBgU3BhcmtNZXNzZW5nZXJgIHdhcyBub3QgYXBwbHlpbmcgdGhlIGBlZGdlRnVuY3Rpb25gIGZyb20gYE1lc3NhZ2VTY29wZWAuCisqIEZpeGVkIGEgYnVnIGluIGBDb21wdXRlckF3YXJlU3RlcGAgdGhhdCBkaWRuJ3QgaGFuZGxlIGByZXNldCgpYCBwcm9wZXJseSBhbmQgdGh1cyBvY2Nhc2lvbmFsbHkgcHJvZHVjZWQgc29tZSBleHRyYSB0cmF2ZXJzZXJzLgorKiBSZW1vdmVkIGBUcmF2ZXJzYWxQcmVkaWNhdGVgIGNsYXNzIGluIEdyZW1saW4uTmV0LiBJdCBpcyBub3cgaW5jbHVkZWQgaW4gdGhlIGBQYCBjbGFzcyBpbnN0ZWFkLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTA1MyBpbnN0YWxsZWQgcGx1Z2lucyBhcmUgcGxhY2VkIGluIGEgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHdoZXJlIGdyZW1saW4uc2ggaXMgc3RhcnRlZAorKiBUSU5LRVJQT1AtMTUwOSBGYWlsaW5nIHRlc3QgY2FzZSBmb3IgdHJlZSBzZXJpYWxpemF0aW9uCisqIFRJTktFUlBPUC0xNzM4IFByb3BlciBmdW5jdGlvbmluZyBvZiBHcmFwaFNPTlJlYWRlciBkZXBlbmRzIG9uIG9yZGVyIG9mIGVsZW1lbnRzIGluIFN0cmluZyByZXByZXNlbnRhdGlvbgorKiBUSU5LRVJQT1AtMTc1OCBSZW1vdGVTdHJhdGVneSBzaG91bGQgYmUgYmVmb3JlIGFsbCBvdGhlciBEZWNvcmF0aW9uU3RyYXRlZ2llcy4KKyogVElOS0VSUE9QLTE4NTUgVXBkYXRlIFJleHN0ZXIgbGlua3MKKyogVElOS0VSUE9QLTE4NTkgQ29tcGxleCBpbnN0YW5jZSBvZiBQIG5vdCBzZXJpYWxpemluZyB0byBieXRlY29kZSBwcm9wZXJseQorKiBUSU5LRVJQT1AtMTg2MCB2YWx1ZU1hcChUcnVlKSByZXN1bHQgaW4gZXJyb3IgaW4gZ3JlbWxpbi1weXRob24KKyogVElOS0VSUE9QLTE4NjIgVGlua2VyR3JhcGggVmVydGV4UHJvZ3JhbSBtZXNzYWdlIHBhc3NpbmcgZG9lc24ndCB3b3JrIHByb3Blcmx5IHdoZW4gdXNpbmcgRGlyZWN0aW9uLkJPVEgKKyogVElOS0VSUE9QLTE4NjcgdW5pb24oKSBjYW4gcHJvZHVjZSBleHRyYSB0cmF2ZXJzZXJzCisqIFRJTktFUlBPUC0xODcyIEFwcGx5IGVkZ2VGdW5jdGlvbiBpbiBTcGFya01lc3NlbmdlcgorKiBUSU5LRVJQT1AtMTg3MyBtaW4oKSBhbmQgbWF4KCkgd29yayBvbmx5IGluIHRoZSByYW5nZSBvZiBJbnRlZ2VyIHZhbHVlcworKiBUSU5LRVJQT1AtMTg3NCBQIGRvZXMgbm90IGFwcGVhciB0byBiZSBzZXJpYWxpemVkIGNvbnNpc3RlbnRseSBpbiBHcmFwaFNPTgorKiBUSU5LRVJQT1AtMTg3OSBHcmVtbGluIENvbnNvbGUgZG9lcyBub3QgcmVzZXBlY3QgZXF1YWwgc2lnbiBmb3IgZmxhZyBhcmd1bWVudCBhc3NpZ25tZW50cworKiBUSU5LRVJQT1AtMTg4MCBHcmVtbGluLk5FVCBTdHJvbmcgbmFtZSBzaWduYXR1cmUgY291bGQgbm90IGJlIHZlcmlmaWVkLiAoSFJFU1VMVDogMHg4MDEzMTA0NSkKKyogVElOS0VSUE9QLTE4ODMgZ3JlbWxpbnB5dGhvbiBmdXR1cmUgd2lsbCBuZXZlciByZXR1cm4KKyogVElOS0VSUE9QLTE4OTAgZ2V0QW5vbnltb3VzVHJhdmVyc2FsQ2xhc3MoKSBpcyBub3QgYmVpbmcgZ2VuZXJhdGVkIGZvciBKYXZhIERTTHMKKyogVElOS0VSUE9QLTE4OTEgU2VyaWFsaXphdGlvbiBvZiBQLm5vdCgpIGZvciBncmVtbGluLWphdmFzY3JpcHQKKyogVElOS0VSUE9QLTE4OTIgR0xWIHRlc3QgZmFpbHVyZXMgZm9yIC5ORVQKKyogVElOS0VSUE9QLTE4OTQgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyZDAgZmFpbHMgdG8gZGVzZXJpYWxpemUgdmFsaWQgUC5ub3QoKQorKiBUSU5LRVJQT1AtMTg5NiBncmVtbGluLXB5dGhvbiBsYW1iZGFzIGVycm9yCisqIFRJTktFUlBPUC0xOTA3IEZpeCBmYWlsaW5nIEdMViB0ZXN0IGZvciB3aXRoU2FjaygpIGluIC5ORVQKKyogVElOS0VSUE9QLTE5MTcgZ3g6QmlnRGVjaW1hbCBzZXJpYWxpemF0aW9uIGJyb2tlbiBpbiBHcmVtbGluLk5ldCBvbiBzeXN0ZW1zIHdpdGggJywnIGFzIGRlY2ltYWwgc2VwYXJhdG9yCisqIFRJTktFUlBPUC0xOTE4IFNjZW5hcmlvcyBmYWlsIGJlY2F1c2Ugb2Ygd3JvbmcgbnVtZXJpY2FsIHR5cGVzCisqIFRJTktFUlBPUC0xOTE5IEdoZXJraW4gcnVubmVyIGRvZXNuJ3Qgd29yayB3aXRoIFAuQW5kKCkgYW5kIFAuT3IoKSBpbiBHcmVtbGluLk5ldAorKiBUSU5LRVJQT1AtMTkyMCBUZXN0cyBmYWlsIGJlY2F1c2UgUC5XaXRoaW4oKSBhcmd1bWVudHMgYXJlIHdyYXBwZWQgaW4gYW4gYXJyYXkgaW4gR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTE5MjIgR2hlcmtpbiBmZWF0dXJlcyBmYWlsIHRoYXQgY29udGFpbiBQLm5vdCgpIGluIEdyZW1saW4uTmV0CisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTEzNTcgQ2VudHJhbGl0eSBSZWNpcGVzIHNob3VsZCBtZW50aW9uIHBhZ2VSYW5rIGFuZCBPTEFQLgorKiBUSU5LRVJQT1AtMTQ4OSBQcm92aWRlIGEgSmF2YXNjcmlwdCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQKKyogVElOS0VSUE9QLTE1ODYgU3ViZ3JhcGhTdHJhdGVneSBpbiBPTEFQCisqIFRJTktFUlBPUC0xNzI2IFN1cHBvcnQgV2ViU29ja2V0cyBwaW5nL3Bvbmcga2VlcC1hbGl2ZSBpbiBHcmVtbGluIHNlcnZlcgorKiBUSU5LRVJQT1AtMTg0MiBpdGVyYXRlKCkgbWlzc2luZyBpbiB0ZXJtaW5hbCBzdGVwcyBkb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC0xODUwIFJhbmdlIHN0ZXAgaGFzIHVuZG9jdW1lbnRlZCBzcGVjaWFsIHZhbHVlcworKiBUSU5LRVJQT1AtMTg1NCBTdXBwb3J0IGxhbWJkYXMgaW4gR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTE4NTcgR0xWIHRlc3Qgc3VpdGUgY29uc2lzdGVuY3kgYW5kIGNvbXBsZXRlbmVzcworKiBUSU5LRVJQT1AtMTg2MyBEZWxheWluZyB0aGUgc2V0dGluZyBvZiByZXF1ZXN0SWQgdGlsbCB0aGUgUmVxdWVzdE1lc3NhZ2UgaW5zdGFudGlhdGlvbiB0aW1lCisqIFRJTktFUlBPUC0xODY4IFN1cHBvcnQgaW5qZWN0IHNvdXJjZSBzdGVwIGluIEdyZW1saW4uTmV0CisqIFRJTktFUlBPUC0xODcwIG5eMiBzeW5jaHJvbmlvdXMgb3BlcmF0aW9uIGluIE9MQVAgV29ya2VyRXhlY3V0b3IuZXhlY3V0ZSgpIG1ldGhvZAorKiBUSU5LRVJQT1AtMTg3NyBBZGQgbmV3IGdyYXBoIGRhdGEgZm9yIHNwZWNpYWxpemVkIHRlc3Rpbmcgc2NlbmFyaW9zCisqIFRJTktFUlBPUC0xODg0IEJ1bXAgdG8gTmV0dHkgNC4wLjU2LkZpbmFsCisqIFRJTktFUlBPUC0xODg1IFZhcmlvdXMgR3JlbWxpbi5OZXQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzCisqIFRJTktFUlBPUC0xOTAxIEVuYWJsZSB1c2FnZSBvZiBlbnVtcyBpbiBtb3JlIHN0ZXBzIGluIEdyZW1saW4uTmV0CisqIFRJTktFUlBPUC0xOTA4IEJ1bXAgdG8gR3Jvb3Z5IDIuNC4xNAorKiBUSU5LRVJQT1AtMTkxMSBSZWZhY3RvciBKYXZhVHJhbnNsYXRvciB0byBjYWNoZSBhbGwgcmVmbGVjdGl2ZSBjYWxscworCitbW3JlbGVhc2UtMy0yLTddXQorPT09IFRpbmtlclBvcCAzLjIuNyAoUmVsZWFzZSBEYXRlOiBEZWNlbWJlciAxNywgMjAxNykKKworKiBBZGRlZCBjb3JlIEdyYXBoU09OIGNsYXNzZXMgZm9yIEdyZW1saW4tUHl0aG9uOiBgVVVJRGAsIGBEYXRlYCwgYW5kIGBUaW1lc3RhbXBgLgorKiBEb2N1bWVudGVkIHRoZSByZWNvbW1lbmRlZCBtZXRob2QgZm9yIGNvbnN0cnVjdGluZyBEU0xzIHdpdGggR3JlbWxpbi5OZXQuCisqIFByb3ZpZGVkIGEgbWV0aG9kIHRvIGNvbmZpZ3VyZSBkZXRhY2htZW50IG9wdGlvbnMgd2l0aCBgRXZlbnRTdHJhdGVneWAuCisqIEZpeGVkIGEgcmFjZSBjb25kaXRpb24gaW4gYFRpbmtlckluZGV4YC4KKyogRml4ZWQgYnVnIGluIGhhbmRsaW5nIG9mIHRoZSBsb25nIGZvcm1zIG9mIGAtZWAgYW5kIGAtaWAgKGAtLWV4ZWN1dGVgIGFuZCBgLS1pbnRlcmFjdGl2ZWAgcmVzcGVjdGl2ZWx5KSBmb3IgR3JlbWxpbiBDb25zb2xlLgorKiBGaXhlZCBidWcgaW4gYExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lgIHdoZXJlIHRyYXZlcnNhbHMgdXNpbmcgYExhbWJkYWAgc2NyaXB0cyB3ZXJlbid0IGNhdXNpbmcgdGhlIHN0cmF0ZWd5IHRvIHRyaWdnZXIuCisqIEltcHJvdmVkIGVycm9yIG1lc3NhZ2luZyBmb3IgYnl0ZWNvZGUgZGVzZXJpYWxpemF0aW9uIGVycm9ycyBpbiBHcmVtbGluIFNlcnZlci4KKyogRml4ZWQgYW4gYEFycmF5T3V0T2ZCb3VuZHNFeGNlcHRpb25gIGluIGBoYXNJZCgpYCBmb3IgdGhlIHJhcmUgc2l0dWF0aW9uIHdoZW4gdGhlIHByb3ZpZGVkIGNvbGxlY3Rpb24gaXMgZW1wdHkuCisqIEJ1bXBlZCB0byBOZXR0eSA0LjAuNTMKKyogYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIGBwcm9maWxlKClgIG5vdyBhY2NvdW50cyBmb3Igd29ya2VyIGl0ZXJhdGlvbiBpbiBgR3JhcGhDb21wdXRlcmAgT0xBUC4KKyogUmV0dXJuZWQgdGhlIGBCdWlsZGVyYCBpbnN0YW5jZSBmcm9tIHRoZSBgRGV0YWNoZWRFZGdlLkJ1aWxkZXJgIG1ldGhvZHMgb2YgYHNldE91dEVgIGFuZCBgc2V0T3V0VmAuCisqIEFkZGVkIHRlc3QgZnJhbWV3b3JrIGZvciBHTFZzLgorKiBGaXhlZCBidWcgaW4gYFRyYXZlcnNhbEhlbHBlci5yZXBsYWNlU3RlcCgpYCB3aGVyZSB0aGUgc3RlcCBiZWluZyByZXBsYWNlZCBuZWVkZWQgdG8gYmUgcmVtb3ZlZCBwcmlvciB0byB0aGUgbmV3IG9uZSBiZWluZyBhZGRlZC4KKyogQWRkZWQgYWxpYXMgc3VwcG9ydCBpbiB0aGUgLk5FVCBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAuCisqIEFkZGVkIGEgdGVzdCBmb3Igc2VsZi1lZGdlcyBhbmQgZml4ZWQgYE5lbzRqVmVydGV4YCB0byBwcm92aWRlZCByZXBlYXRlZCBzZWxmLWVkZ2VzIG9uIGBCT1RIYC4KKyogQmV0dGVyIHJlc3BlY3RlZCBwZXJtaXNzaW9ucyBvbiB0aGUgYHBsdWdpbnMudHh0YCBmaWxlIGFuZCBwcmV2ZW50ZWQgd3JpdGluZyBpZiBtYXJrZWQgYXMgcmVhZC1vbmx5LgorKiBBZGRlZCBnZXR0ZXJzIGZvciB0aGUgbGFtYmRhcyBoZWxkIGJ5IGBMYW1iZGFDb2xsZWN0aW5nQmFycmllclN0ZXBgLCBgTGFtYmRhRmxhdE1hcFN0ZXBgIGFuZCBgTGFtYmRhU2lkZUVmZmVjdFN0ZXBgLgorKiBGaXhlZCBhbiBvbGQgaGFjayBpbiBgR3Jvb3Z5VHJhbnNsYXRvcmAgYW5kIGBQeXRob25UcmFuc2xhdG9yYCB3aGVyZSBgRWxlbWVudHNgIHdlcmUgYmVpbmcgbWFwcGVkIHRvIHRoZWlyIGlkIG9ubHkuCisqIEZpeGVkIGFuICJhdHRhY2hlbWVudCItYnVnIGluIGBJbmplY3RTdGVwYCB3aXRoIGEgc29sdXRpb24gZ2VuZXJhbGl6ZWQgdG8gYFN0YXJ0U3RlcGAuCisqIFRydW5jYXRlIHRoZSBzY3JpcHQgaW4gZXJyb3IgbG9ncyBhbmQgZXJyb3IgcmV0dXJuIG1lc3NhZ2VzIGZvciAiTWV0aG9kIGNvZGUgdG9vIGxhcmdlIiBlcnJvcnMgaW4gR3JlbWxpbiBTZXJ2ZXIuCisqIEZpeGVkIGEgYnVnIGluIGBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5YCB3aGVyZSBpdCB3YXMgdG9vIGVhZ2VyIHRvIGNvbnNpZGVyIGEgc3RlcCBhcyBiZWluZyBhIGxhbWJkYSBzdGVwLgorKiBgUmVmZXJlbmNlVmVydGV4YCB3YXMgbWlzc2luZyBpdHMgYGxhYmVsKClgIHN0cmluZy4gYFJlZmVyZW5jZUVsZW1lbnRgIG5vdyBzdXBwb3J0cyBhbGwgbGFiZWwgaGFuZGxpbmcuCisqIEZpeGVkIGEgYnVnIHdoZXJlIGJ5dGVjb2RlIGNvbnRhaW5pbmcgbGFtYmRhcyB3b3VsZCByYW5kb21seSBzZWxlY3QgYSB0cmF2ZXJzYWwgc291cmNlIGZyb20gYmluZGluZ3MuCisqIERlcHJlY2F0ZWQgYEdyZW1saW5TY3JpcHRFbmdpbmUuZXZhbCgpYCBtZXRob2RzIGFuZCByZXBsYWNlZCB0aGVtIHdpdGggbmV3IG92ZXJsb2FkcyB0aGF0IGluY2x1ZGUgdGhlIHNwZWNpZmljIGBUcmF2ZXJzYWxTb3VyY2VgIHRvIGJpbmQgdG8uCisqIEFkZGVkIGBHcmFwaEhlbHBlci5jbG9uZUVsZW1lbnRzKEdyYXBoIG9yaWdpbmFsLCBHcmFwaCBjbG9uZSlgIHRvIHRoZSBgZ3JlbWxpbi10ZXN0YCBtb2R1bGUgdG8gcXVpY2tseSBjbG9uZSBhIGdyYXBoLgorKiBBZGRlZCBgR3JlbWxpbkRzbC5Bbm9ueW1vdXNNZXRob2RgIGFubm90YXRpb24gdG8gaGVscCBwcm92aWRlIGV4cGxpY2l0IHR5cGVzIGZvciBhbm9ueW1vdXMgbWV0aG9kcyB3aGVuIHRoZSB0eXBlcyBhcmUgbm90IGVhc2lseSBpbmZlcnJlZC4KKyogQnVtcGVkIHRvIEdNYXZlblBsdXMgMS42LgorKiBBZGRlZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBmb3IgaWxsZWdhbCB1c2Ugb2YgYHJlcGVhdCgpYC1zdGVwLgorKiBGaXhlZCBhIGJ1ZyBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAgdGhhdCBsZWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvcnMgd2hlbiBwcmVkaWNhdGVzIHdlcmUgdXNlZCB3aXRoIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisqIEJ1bXBlZCB0byBKYWNrc29uIDIuOC4xMC4KKyogRGVwcmVjYXRlZCBgTXV0YXRpb25MaXN0ZW5lci52ZXJ0ZXhQcm9wZXJ0eUNoYW5nZWQoKWAgbWV0aG9kIHRoYXQgZGlkIG5vdCB1c2UgYFZlcnRleFByb3BlcnR5YCBhbmQgYWRkZWQgYSBuZXcgbWV0aG9kIHRoYXQgZG9lcy4KKyogQWRkZWQgYW4gYEVtYmVkZGVkUmVtb3RlQ29ubmVjdGlvbmAgc28gdGhhdCBpdCdzIHBvc3NpYmxlIHRvIG1pbWljIGEgcmVtb3RlIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBzYW1lIEpWTS4KKyogU3VwcG9ydGVkIGludGVycnVwdGlvbiBmb3IgcmVtb3RlIHRyYXZlcnNhbHMuCisqIEFsbG93IHRoZSBgOnJlbW90ZWAgY29tbWFuZCB0byBhY2NlcHQgYSBgQ2x1c3RlcmAgb2JqZWN0IGRlZmluZWQgaW4gdGhlIGNvbnNvbGUgaXRzZWxmLgorKiBUaGUgQ29uc29sZSdzIGBwbHVnaW4udHh0YCBmaWxlIGlzIG9ubHkgdXBkYXRlZCBpZiB0aGVyZSB3ZXJlIG1hbnVhbGx5IHVuaW5zdGFsbGVkIHBsdWdpbnMuCisqIEZpeGVkIGEgYnVnIGluIGBNYXRjaFN0ZXBgIHdoZXJlIG1pZC10cmF2ZXJzYWwgYHdoZXJlKClgIHZhcmlhYmxlcyB3ZXJlIG5vdCBiZWluZyBjb25zaWRlcmVkIGluIHN0YXJ0LXNjb3BlLgorKiBHZW5lcmFsaXplZCBgTWF0Y2hTdGVwYCB0byBsb2NhbGx5IGNvbXB1dGUgYWxsIGNsYXVzZXMgd2l0aCBiYXJyaWVycyAobm90IGp1c3QgcmVkdWNpbmcgYmFycmllcnMpLgorKiBFbnN1cmVkIHRoYXQgcGx1Z2lucyB3ZXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBjb25maWd1cmVkLgorKiBGaXhlZCBhIGJ1ZyBpbiBgTmVvNGpHcmVtbGluUGx1Z2luYCB0aGF0IHByZXZlbnRlZCBpdCBmcm9tIGxvYWRpbmcgcHJvcGVybHkgaW4gdGhlIGBHcmVtbGluUHl0aG9uU2NyaXB0RW5naW5lYC4KKyogRml4ZWQgYSBidWcgaW4gYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIHdoZXJlIGNoaWxkIHRyYXZlcnNhbHMgd2VyZSBiZWluZyBhbmFseXplZCBwcmlvciB0byBjb21waWxhdGlvbi4KKyogRml4ZWQgYSBidWcgdGhhdCBwcmV2ZW50ZWQgR3JlbWxpbiBmcm9tIG9yZGVyaW5nIGxpc3RzIGFuZCBzdHJlYW1zIG1hZGUgb2YgbWl4ZWQgbnVtYmVyIHR5cGVzLgorKiBGaXhlZCBhIGJ1ZyB3aGVyZSBga2VlcExhYmVsc2Agd2VyZSBiZWluZyBjb3JydXB0ZWQgYmVjYXVzZSBhIGRlZmVuc2l2ZSBjb3B5IHdhcyBub3QgYmVpbmcgbWFkZSB3aGVuIHRoZXkgd2VyZSBiZWluZyBzZXQgYnkgYFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lgLgorKiBDYW5jZWwgc2NyaXB0IGV2YWx1YXRpb24gdGltZW91dCBpbiBgR3JlbWxpbkV4ZWN1dG9yYCB3aGVuIHNjcmlwdCBldmFsdWF0aW9uIGZpbmlzaGVkLgorKiBBZGRlZCBhIHJlY2lwZSBmb3IgT0xBUCB0cmF2ZXJzYWxzIHdpdGggU3Bhcmsgb24gWUFSTi4KKyogQWRkZWQgYHNwYXJrLXlhcm5gIGRlcGVuZGVuY2llcyB0byB0aGUgbWFuaWZlc3Qgb2YgYHNwYXJrLWdyZW1saW5gLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTY1MCBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5IG1ha2VzIE1hdGNoIHN0ZXBzIHVuc29sdmFibGUKKyogVElOS0VSUE9QLTE3MzEgRG9ja2VyIGJ1aWxkIGRvZXMgbm90IGFwcGVhciB0byB3b3JrIGZvciBncmVtbGluLWRvdG5ldAorKiBUSU5LRVJQT1AtMTc0NSBHcmVtbGluIC5ORVQ6IFVzZSBEYXRlVGltZU9mZnNldCBpbnN0ZWFkIG9mIERhdGVUaW1lIHRvIHJlcHJlc2VudCBnOkRhdGUKKyogVElOS0VSUE9QLTE3NTMgT3JkZXJTdGVwIG5vdCBhYmxlIHRvIG9yZGVyIGJ5IG5vbi1pbnRlZ2VyIG51bWJlcnMKKyogVElOS0VSUE9QLTE3NjAgT0xBUCBjb21waWxhdGlvbiBmYWlsaW5nIGFyb3VuZCBDb25uZWN0aXZlU3RyYXRlZ3kKKyogVElOS0VSUE9QLTE3NjEgR3JlbWxpbkV4ZWN1dG9yOiBUaW1lb3V0IGZ1dHVyZSBub3QgY2FuY2VsbGVkIG9uIHN1Y2Nlc3NmdWwgc2NyaXB0IGV2YWx1YXRpb24KKyogVElOS0VSUE9QLTE3NjIgTWFrZSBNYXRjaFN0ZXAgYW5hbHl6ZSBtaWQtY2xhdXNlIHZhcmlhYmxlcyBmb3IgZXhlY3V0aW5nIG9yZGVyaW5nIHB1cnBvc2VzLgorKiBUSU5LRVJQT1AtMTc2NCBHZW5lcmFsaXplIE1hdGNoU3RlcCB0byBsb2NhbGl6ZSBhbGwgYmFycmllcnMsIG5vdCBqdXN0IHJlZHVjaW5nIGJhcnJpZXJzLgorKiBUSU5LRVJQT1AtMTc2NiBHcmVtbGluLk5ldDogQ2xvc2VkIGNvbm5lY3Rpb25zIHNob3VsZCBub3QgYmUgcmUtdXNlZAorKiBUSU5LRVJQT1AtMTc4MiBSYW5nZUJ5SXNDb3VudFN0cmF0ZWd5IGRvZXNuJ3QgaGFuZGxlIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgcHJvcGVybHkKKyogVElOS0VSUE9QLTE3ODkgUmVmZXJlbmNlIGVsZW1lbnRzIHNob3VsZCBiZSByZXByZXNlbnRlZCBieSBpZCBhbmQgbGFiZWwgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNzkwIEdyYXBoU09OIDMuMCBkb2MgdXBkYXRlcworKiBUSU5LRVJQT1AtMTc5MSBHcmVtbGluRHNsIGN1c3RvbSBzdGVwIHdpdGggZ2VuZXJpYyBlbmQgdHlwZSBwcm9kdWNlcyBpbnZhbGlkIGNvZGUgaW4gX18uamF2YQorKiBUSU5LRVJQT1AtMTc5MiBSYW5kb20gVHJhdmVyc2FsU291cmNlIFNlbGVjdGlvbiBpbiBHcmVtbGluU2NyaXB0RW5naW5lCisqIFRJTktFUlBPUC0xNzk1IEdldHRpbmcgTGFtYmRhIGNvbXBhcmF0b3IgbWVzc2FnZSBmb3IgLnByb2ZpbGUoKSBzdGVwCisqIFRJTktFUlBPUC0xNzk2IERyaXZlciBjb25uZWN0aW9uIHBvb2wgU1NMIHByb3BlcnRpZXMgbWlzc2luZworKiBUSU5LRVJQT1AtMTc5NyBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5IGFuZCBMYW1iZGFNYXBTdGVwIGluIGBieSgpYC1tb2R1bGF0aW9uLgorKiBUSU5LRVJQT1AtMTc5OCBNdXRhdGlvbkxpc3RlbmVyLnZlcnRleFByb3BlcnR5Q2hhbmdlZCBvbGRWYWx1ZSBzaG91bGQgYmUgYSBWZXJ0ZXhQcm9wZXJ0eQorKiBUSU5LRVJQT1AtMTgwMSBPTEFQIHByb2ZpbGUoKSBzdGVwIHJldHVybiBpbmNvcnJlY3QgdGltaW5nCisqIFRJTktFUlBPUC0xODAyIGhhc0lkKCkgZmFpbHMgZm9yIGVtcHR5IGNvbGxlY3Rpb25zCisqIFRJTktFUlBPUC0xODAzIGluamVjdCgpIGRvZXNuJ3QgcmUtYXR0YWNoIHdpdGggcmVtb3RlIHRyYXZlcnNhbHMKKyogVElOS0VSUE9QLTE4MTkgZG9jdW1lbnRhdGlvbiBxdWVyeSBhbmQgZGVzY3JpcHRpb24gbWlzbWF0Y2gKKyogVElOS0VSUE9QLTE4MjEgQ29uc2lzdGVudCBiZWhhdmlvciBvZiBzZWxmLXJlZmVyZW5jaW5nIGVkZ2VzCisqIFRJTktFUlBPUC0xODI1IEdyZW1saW4gLk5FVDogQ29uc3RhbnQoKSBzdGVwIGhhcyBpbmNvcnJlY3QgcGFyYW1ldGVyIGRlZmluZWQKKyogVElOS0VSUE9QLTE4MzAgUmFjZSBjb25kaXRpb24gaW4gVGlua2VyZ3JhcGggaW5kZXggY3JlYXRpb24KKyogVElOS0VSUE9QLTE4MzIgVHJhdmVyc2FsSGVscGVyLnJlcGxhY2VTdGVwIHNldHMgcHJldmlvdXNTdGVwIHRvIHRoZSB3cm9uZyBzdGVwCisqIFRJTktFUlBPUC0xODQ2IExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kgbm90IHRyaWdnZXJpbmcgZm9yIExhbWJkYSBzY3JpcHRzCisqIFRJTktFUlBPUC0xODQ4IEZpeCBnOkRhdGUgYXNzZXJ0aW9uIGluIHB5dGhvbiB0ZXN0cworKiBUSU5LRVJQT1AtMTg1MSBHcmVtbGluIGxvbmcgb3B0aW9ucyBmb3IgLWUgYW5kIC1pIGFyZSBub3Qgd29ya2luZyBwcm9wZXJseQorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0xNjYxIERvY2tlci1idWlsdCBkb2N1bWVudGF0aW9uIGRvZXMgbm90IGFsd2F5cyBwb2ludCBsb2NhbGx5CisqIFRJTktFUlBPUC0xNzI1IERvdE5ldCBHTFY6IE1ha2UgdHJhdmVyc2FsIGdlbmVyYXRpb24gZGV0ZXJtaW5pc3RpYworKiBUSU5LRVJQT1AtMTczNCBEU0wgZm9yIEdyZW1saW4gLk5FVAorKiBUSU5LRVJQT1AtMTc0NiBCZXR0ZXIgZXJyb3IgbWVzc2FnZSBvbiB3cm9uZyBvcmRlcmluZyBvZiBlbWl0KCkvdW50aWwoKS9oYXMoKQorKiBUSU5LRVJQT1AtMTc1MiBHcmVtbGluLk5ldDogR2VuZXJhdGUgY29tcGxldGVseSB0eXBlLXNhZmUgbWV0aG9kcworKiBUSU5LRVJQT1AtMTc1NiBQcm92aWRlIGEgd2F5IHRvIGVhc2lseSBtb2NrIGEgUmVtb3RlQ29ubmVjdGlvbiBmb3IgdGVzdHMKKyogVElOS0VSUE9QLTE3NTkgSW1wcm92ZSBoYXNoY29kZSBhbmQgZXF1YWxzIGZvciBUcmF2ZXJzZXIgaW1wbGVtZW50YXRpb25zCisqIFRJTktFUlBPUC0xNzY4IEJ1bXAgdG8gSmFja3NvbiAyLjguMTAKKyogVElOS0VSUE9QLTE3NzAgUmVtb3RlIHRyYXZlcnNhbCB0aW1lb3V0CisqIFRJTktFUlBPUC0xNzcxIGdyZW1saW4uYmF0IGRvZXNuJ3Qgc3VwcG9ydCBwYXRocyBjb250YWluaW5nIHNwYWNlcworKiBUSU5LRVJQT1AtMTc3OSBCdW1wIHRvIEdNYXZlblBsdXMgMS42CisqIFRJTktFUlBPUC0xNzg0IEdyZW1saW4gTGFuZ3VhZ2UgVGVzdCBTdWl0ZQorKiBUSU5LRVJQT1AtMTc4NSBHcmVtbGluLk5ldCBzaG91bGQgYmUgc3Ryb25nLW5hbWUgc2lnbmVkCisqIFRJTktFUlBPUC0xNzg2IFJlY2lwZSBhbmQgbWlzc2luZyBtYW5pZmVzdCBpdGVtcyBmb3IgU3Bhcmsgb24gWWFybgorKiBUSU5LRVJQT1AtMTc4NyBBbGxvdyA6cmVtb3RlIGNvbW1hbmQgdG8gYWNjZXB0IGEgdXNlciBkZWZpbmVkIENsdXN0ZXIgaW5zdGFuY2UKKyogVElOS0VSUE9QLTE4MDYgQ29uc2lzdGVudGx5IHVzZSBHcmVtbGluLk5ldCBpbnN0ZWFkIG9mIEdyZW1saW4tRG90TmV0CisqIFRJTktFUlBPUC0xODA3IEdyZW1saW4tUHl0aG9uIGRvZXNuJ3Qgc3VwcG9ydCBHcmFwaFNPTiB0eXBlcyBnOkRhdGUsIGc6VGltZXN0YW1wIGFuZCBnOlVVSUQKKyogVElOS0VSUE9QLTE4MDggQWRkIGFiaWxpdHkgdG8gZ2V0IHRoZSBjb25zdW1lciBpbiBMYW1iZGFTaWRlRWZmZWN0U3RlcAorKiBUSU5LRVJQT1AtMTgxMSBJbXByb3ZlIGVycm9yIHJlcG9ydGluZyBmb3Igc2VyaWFsaXphdGlvbiBlcnJvcnMgYmV0d2VlbiBncmVtbGluLXB5dGhvbiBhbmQgZ3JlbWxpbi1zZXJ2ZXIKKyogVElOS0VSUE9QLTE4MTIgUHJvZmlsZVRlc3QgYXNzdW1lcyB0aGF0IGdyYXBoIGltcGxlbWVudGF0aW9ucyB3aWxsIG5vdCBhZGQgdGhlaXIgb3duIHN0ZXBzCisqIFRJTktFUlBPUC0xODEzIFN1YmdyYXBoIHN0ZXAgcmVxdWlyZXMgdGhlIGdyYXBoIEFQSQorKiBUSU5LRVJQT1AtMTgxNCBTb21lIHByb2Nlc3MgdGVzdHMgcmVxdWlyZSB0aGUgZ3JhcGggQVBJCisqIFRJTktFUlBPUC0xODIwIEluY2x1ZGUgLk5FVCBHTFYgdGVzdHMgb24gVHJhdmlzQ0kKKyogVElOS0VSUE9QLTE4MjQgVXBkYXRlIG5ldHR5IHZlcnNpb24gdG8gNC4wLjUyCisqIFRJTktFUlBPUC0xODI3IEdyZW1saW4gLk5FVDogVGVzdCBTdWl0ZSBSdW5uZXIKKyogVElOS0VSUE9QLTE4MjkgSW1wcm92ZSBmbGV4aWJpbGl0eSBvZiBkZXRhY2htZW50IGZvciBFdmVudFN0cmF0ZWd5CisqIFRJTktFUlBPUC0xODMzIERldGFjaGVkRWRnZS5CdWlsZGVyI3NldEluViBhbmQgc2V0T3V0ViBkb2Vzbid0IHJldHVybiB0aGUgYnVpbGRlcgorKiBUSU5LRVJQT1AtMTgzNSBCdW1wIE5ldHR5IDQuMC41MworKiBUSU5LRVJQT1AtMTgzNyBHcmVtbGluIC5ORVQ6IFByb3ZpZGUgdHlwZSBjb2VyY2lvbiBiZXR3ZWVuIElEaWN0aW9uYXJ5PEssIFY+IGluc3RhbmNlcworCitbW3JlbGVhc2UtMy0yLTZdXQorPT09IFRpbmtlclBvcCAzLjIuNiAoUmVsZWFzZSBEYXRlOiBBdWd1c3QgMjEsIDIwMTcpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jI3JlbGVhc2UtMy0xLTgsIDMuMS44Pj4uCisKKyogQnVtcGVkIHRvIE5ldHR5IDQuMC41MAorKiBSZWdpc3RlcmVkIGBIYXNoTWFwJFRyZWVOb2RlYCB0byBHcnlvLgorKiBGaXhlZCBhIGxhbWJkYS1sZWFrIGluIGBTYWNrVmFsdWVTdGVwYCB3aGVyZSBgQmlGdW5jdGlvbmAgbXVzdCBiZSB0ZXN0ZWQgZm9yIHRydWUgbGFtYmRhIHN0YXR1cy4KKyogRml4ZWQgYSBidWcgaW4gYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHRoYXQgYnJva2UgYW55IGBDb25uZWN0aXZlU3RlcGAgdGhhdCBpbmNsdWRlZCBhIGNoaWxkIHRyYXZlcnNhbCB3aXRoIGFuIG9wdGltaXphYmxlIHBhdHRlcm4uCisqIEFsbG93ZWQgYWNjZXNzIHRvIGBJbmplY3RTdGVwLmluamVjdGlvbnNgIGZvciBgVHJhdmVyc2FsU3RyYXRlZ3lgIGFuYWx5c2lzLgorKiBFeGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHJlc3VsdCBpdGVyYXRpb24gaW4gR3JlbWxpbiBTZXJ2ZXIgd2lsbCBub3cgcmV0dXJuIGBTQ1JJUFRfRVZBTFVBVElPTl9FWENFUFRJT05gIHJhdGhlciB0aGFuIGBTRVJWRVJfRVJST1JgLgorKiBgQWRkRWRnZVN0ZXBgIGF0dGFjaGVzIGRldGFjaGVkIHZlcnRpY2VzIHByaW9yIHRvIGVkZ2UgY3JlYXRpb24uCisqIEFkZGVkIGdyYXBoIGVsZW1lbnQgR3JhcGhTT04gc2VyaWFsaXplcnMgaW4gR3JlbWxpbi1QeXRob24uCisqIEluaXRpYWxpemF0aW9uIHNjcmlwdHMgZm9yIEdyZW1saW4gU2VydmVyIHdpbGwgbm90IHRpbWVvdXQuCisqIEFkZGVkIEdyZW1saW4uTmV0LgorKiBgUHJvZmlsZVRlc3RgIGlzIG5vdyBsZXNzIHN0cmluZ2VudCBhYm91dCBhc3NlcnRpb25zIHdoaWNoIHdpbGwgcmVkdWNlIGJ1cmRlbnMgb24gcHJvdmlkZXJzLgorKiBgR3JlbWxpbkV4ZWN1dG9yYCBiZWdpbnMgdGltZW91dCBvZiBzY3JpcHQgZXZhbHVhdGlvbiBhdCB0aGUgdGltZSB0aGUgc2NyaXB0IHdhcyBzdWJtaXR0ZWQgYW5kIG5vdCBmcm9tIHRoZSB0aW1lIGl0IGJlZ2FuIGV2YWx1YXRpb24uCisqIEFkZGVkIEdyZW1saW4uTmV0LgorKiBgUmVmZXJlbmNlRmFjdG9yeWAgYW5kIGBEZXRhY2hlZEZhY3RvcnlgIG5vdyBkZXRhY2ggZWxlbWVudHMgaW4gY29sbGVjdGlvbnMgYWNjb3JkaW5nbHkuCisqIERlcHJlY2F0ZWQgYEdyeW9MaXRlTWVzc2FnZVNlcmlhbGl6ZXJWMWQwYCBpbiBmYXZvciBvZiBgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lgLgorKiBEZXByZWNhdGVkIHRoZSBgdXNlTWFwcGVyRnJvbUdyYXBoYCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgR3JlbWxpbiBTZXJ2ZXIgc2VyaWFsaXplcnMuCisqIGBKYXZhVHJhbnNsYXRvcmAgaXMgbm93IHNtYXJ0IGFib3V0IGhhbmRsaW5nIGBCdWxrU2V0YCBhbmQgYFRyZWVgLgorKiBBZGRlZCBhbm5vdGF0aW9ucyB0byB0aGUgdHJhdmVyc2FsIG1ldHJpY3MgcHJldHR5IHByaW50LgorKiBgRWRnZU90aGVyVmVydGV4U3RlcGAgaXMgbm8gbG9uZ2VyIGZpbmFsIGFuZCBjYW4gYmUgZXh0ZW5kZWQgYnkgcHJvdmlkZXJzLgorKiBgRWRnZVZlcnRleFN0ZXBgIGlzIG5vIGxvbmdlciBmaW5hbCBhbmQgY2FuIGJlIGV4dGVuZGVkIGJ5IHByb3ZpZGVycy4KKyogRGVwcmVjYXRlZCBgVHJhbnNhY3Rpb24uc3VibWl0KEZ1bmN0aW9uKWAuCisqIEZpeGVkIGBIQURPT1BfR1JFTUxJTl9MSUJTYCBwYXJzaW5nIGZvciBXaW5kb3dzLgorKiBJbXByb3ZlZCBHcmFwaFNPTiBzZXJpYWxpemF0aW9uIHBlcmZvcm1hbmNlIGFyb3VuZCBgVmVydGV4UHJvcGVydHlgLgorKiBDaGFuZ2VkIHNvbWUgdGVzdHMgaW4gYEV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdGAgd2hpY2ggd2VyZSBlbmZvcmNpbmcgc29tZSB1bmludGVuZGVkIHNlbWFudGljcyBhcm91bmQgdHJhbnNhY3Rpb24gc3RhdGUuCisqIEFkZGVkIFdzQW5kSHR0cENoYW5uZWxpemVyIGFuZCBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyIHRvIGJlIGFsbG93IGZvciBzZXJ2aWNpbmcgSHR0cCBhbmQgV2Vic29ja2V0IHJlcXVlc3RzIHRvIHRoZSBzYW1lIHNlcnZlcgorKiBBZGRlZCBkZWVwIGNvcHkgb2YgYEJ5dGVjb2RlYCB0byBgRGVmYXVsdFRyYXZlcnNhbC5jbG9uZSgpYC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTEzODUgUmVmYWN0b3IgUHJvZmlsaW5nIHRlc3QgY2FzZXMKKyogVElOS0VSUE9QLTE2NzkgRGV0YWNoZWQgc2lkZS1lZmZlY3RzIGFyZW4ndCBhdHRhY2hlZCB3aGVuIHJlbW90ZWQKKyogVElOS0VSUE9QLTE2ODMgQWJzdHJhY3RIYWRvb3BHcmFwaENvbXB1dGVyIG9uIFdpbmRvd3MKKyogVElOS0VSUE9QLTE2OTEgU29tZSBFdmVudFN0cmF0ZWd5UHJvY2Vzc1Rlc3QgYXNzdW1lIGVsZW1lbnQgc3RhdGUgaXMgc3luY2VkIGluIG1lbW9yeQorKiBUSU5LRVJQT1AtMTcwNCBYWFhUcmFuc2xhdG9ycyBhcmUgbm90IGJlaW5nIHJlc3BlY3RpdmUgb2YgQnVsa1NldCBhbmQgVHJlZS4KKyogVElOS0VSUE9QLTE3MjcgQnl0ZWNvZGUgb2JqZWN0IHNoYWxsb3cgY29waWVkIHdoZW4gdHJhdmVyc2FscyBhcmUgY2xvbmVkCisqIFRJTktFUlBPUC0xNzQyIFJhbmdlQnlJc0NvdW50U3RyYXRlZ3kgZmFpbHMgZm9yIENvbm5lY3RpdmVTdGVwcworKiBUSU5LRVJQT1AtMTc0MyBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5IGRvZXMgbm90IGNhdGNoIGxhbWJkYXMgcGFzc2VkIHRvIHNhY2soKQorKiBUSU5LRVJQT1AtMTc0NCBHcmVtbGluIC5ORVQ6IEV4Y2VwdGlvbiBmcm9tIHN5bmMgZXhlY3V0aW9uIGdldHMgd3JhcHBlZCBpbiBBZ2dyZWdhdGVFeGNlcHRpb24KKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtNzQxIFJlbW92ZSBPcHRpb25zIEZvciBUcmFuc2FjdGlvbiBSZXRyeQorKiBUSU5LRVJQT1AtOTE1IEdyZW1saW4gU2VydmVyIHN1cHBvcnRzIFJFU1QgYW5kIFdlYnNvY2tldHMgc2ltdWx0YW50ZW91c2x5CisqIFRJTktFUlBPUC05MjAgVGVzdCBjYXNlIG5lZWRlZCBmb3IgZW5zdXJpbmcgc2FtZSBjYXJkaW5hbGl0eSBmb3Iga2V5LgorKiBUSU5LRVJQT1AtMTU1MiBDIyBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQKKyogVElOS0VSUE9QLTE2NjkgRWRnZVZlcnRleFN0ZXAgc2hvdWxkIGJlIGRlc2lnbmVkIGZvciBleHRlbnNpb24KKyogVElOS0VSUE9QLTE2NzYgSW1wcm92ZSBHcmFwaFNPTiAyLjAgUGVyZm9ybWFuY2UgICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTY4OCBJbmNsdWRlIFRyYXZlcnNhbE1ldHJpY3MgYW5ub3RhdGlvbiBpbiBwcmV0dHkgcHJpbnQKKyogVElOS0VSUE9QLTE2OTQgRGVwcmVjYXRlIHVzZU1hcHBlckZyb21HcmFwaAorKiBUSU5LRVJQT1AtMTcwMSBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSBzaG91bGQgcmVjdXJzZSBpbnRvIGNvbGxlY3Rpb25zIGZvciBkZXRhY2htZW50LgorKiBUSU5LRVJQT1AtMTcwMyBNYWtlIEVkZ2VPdGhlclZlcnRleFN0ZXAgbm9uLWZpbmFsCisqIFRJTktFUlBPUC0xNzA4IEFkZCBhICJOb3RlIG9uIFNjb3BlcyIgZG9jdW1lbnQKKyogVElOS0VSUE9QLTE3MDkgQWRkIGEgbGlzdCBvZiBhbGwgdGhlIHN0ZXBzIHRoYXQgc3VwcG9ydCBieSgpL2Zyb20oKS90bygpL2FzKCkvb3B0aW9uKCkKKyogVElOS0VSUE9QLTE3MTAgQWRkIGEgbm90ZSBvbiB0cmVlKCkgYnktbW9kdWxhdGlvbiBhbmQgdW5pcXVlbmVzcyBvZiB0cmVlIGJyYW5jaGVzLgorKiBUSU5LRVJQT1AtMTcxNCBHcmVtbGluIFNlcnZlciBzY3JpcHRFdmFsdWF0aW9uVGltZW91dCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQgcmVxdWVzdCBhcnJpdmFsIHRpbWUKKyogVElOS0VSUE9QLTE3MTggRGVwcmVjYXRlIEdyeW9MaXRlTWVzc2FnZVNlcmlhbGl6ZXJWMWQwCisqIFRJTktFUlBPUC0xNzQ4IENhbGxvdXQgY29tbWVudHMgYnJlYWsgY29kZSBzbmlwcGV0cworKiBUSU5LRVJQT1AtMTc0OSBCdW1wIHRvIE5ldHR5IDQuMC41MAorCitbW3JlbGVhc2UtMy0yLTVdXQorPT09IFRpbmtlclBvcCAzLjIuNSAoUmVsZWFzZSBEYXRlOiBKdW5lIDEyLCAyMDE3KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS03LCAzLjEuNz4+LgorCisqIEZpeGVkIGZvbGRpbmcgb2YgbXVsdGlwbGUgYGhhc0lkKClgIHN0ZXBzIGludG8gYEdyYXBoU3RlcGAuCisqIEFkZGVkIHN0cmluZyBwZXJmb3JtYW5jZSBvcHRpb25zIHRvIGBTdGFyR3JhcGhgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgdW50aWwocHJlZGljYXRlKWAgd2hlcmUgaXQgd2FzIGFjdHVhbGx5IGNhbGxpbmcgYGVtaXQocHJlZGljYXRlKWAuCisqIEZpeGVkIGluY29uc2lzdGVuY3kgaW4gR3JhcGhTT04gc2VyaWFsaXphdGlvbiBvZiBgUGF0aGAgd2hlcmUgcHJvcGVydGllcyBvZiBncmFwaCBlbGVtZW50cyB3ZXJlIGJlaW5nIGluY2x1ZGVkIHdoZW4gc2VyaWFsaXplZC4KKyogSW1wcm92ZWQgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSBvZiBHcmFwaFNPTiB3aGVuIHNlcmlhbGl6aW5nIGBUaW5rZXJHcmFwaGAgYW5kIGdyYXBoIGVsZW1lbnRzLgorKiBSZW1vdmVkIHVzZSBvZiBgc3RyZWFtKClgIGluIGBEZXRhY2hlZEVkZ2VgIGFuZCBgRGV0YWNoZWRWZXJ0ZXhgLgorKiBEZXByZWNhdGVkIGEgY29uc3RydWN0b3IgaW4gYERldGFjaGVkRWRnZWAgdGhhdCBtYWRlIHVzZSBvZiBgUGFpcmAgaW4gZmF2b3Igb2YgYSBuZXcgb25lIHRoYXQganVzdCB1c2VzIHRoZSBvYmplY3RzIHRoYXQgd2VyZSBpbiB0aGUgYFBhaXJgLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgb24gdGhlIGBnLmFkZFYoT2JqZWN0Li4uKWAgd2hlbiBwYXNzaW5nIGFuIGludmFsaWQgYXJndW1lbnRzLgorKiBSZWR1Y2VkIG1lbW9yeSB1c2FnZSBmb3IgVGlua2VyR3JhcGggZGVzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OIGJ5IHN0cmVhbWluZyB2ZXJ0aWNlcyBhbmQgZWRnZXMuCisqIEFkZGVkIHRoZSBgZ3JlbWxpbi1hcmNoZXR5cGUtZHNsYCB0byBkZW1vbnN0cmF0ZSBob3cgdG8gc3RydWN0dXJlIGEgTWF2ZW4gcHJvamVjdCBmb3IgYSBEU0wuCisqIERldmVsb3BlZCBhbmQgZG9jdW1lbnRlZCBwYXR0ZXJucyBmb3IgRG9tYWluIFNwZWNpZmljIExhbmd1YWdlIGltcGxlbWVudGF0aW9ucy4KKyogUmVtb3ZlZCB0aGUgR3Jvb3Z5IGRlcGVuZGVuY3kgZnJvbSBgZ3JlbWxpbi1weXRob25gIGFuZCB1c2VkIEdyb292eSBUZW1wbGF0ZXMgYW5kIHRoZSBgZ21hdmVucGx1cy1wbHVnaW5gIHRvIGdlbmVyYXRlIHRoZSBweXRob24gR0xWIGNsYXNzZXMuCisqIE5vdyB1c2luZyBHcm9vdnkgYFsuLi5dYCBtYXAgbm90YXRpb24gaW4gYEdyb292eVRyYW5zbGF0b3JgIGluc3RlYWQgb2YgYG5ldyBMaW5rZWRIYXNoTWFwKCl7eyB9fWAuCisqIE1haW50YWluZWQgdHlwZSBpbmZvcm1hdGlvbiBvbiBgVHJhdmVyc2FsLnByb21pc2UoKWAuCisqIFByb3BhZ2F0ZWQgZXhjZXB0aW9uIHRvIGBGdXR1cmVgIGluc3RlYWQgb2YgY2FsbGluZyB0aHJlYWQgaW4gYFJlbW90ZUNvbm5lY3Rpb25gLgorKiBGaXhlZCBhIGJ1ZyBpbiBgUmVwZWF0VW5yb2xsU3RyYXRlZ3lgIHdoZXJlIGBMb29wc1N0ZXBgIGFuZCBgTGFtYmRhSG9sZGVyYCBzaG91bGQgaW52YWxpZGF0ZSB0aGUgc3RyYXRlZ3kncyBhcHBsaWNhdGlvbi4KKyogRGVwcmVjYXRlZCBgYXV0aGVudGljYXRpb24uY2xhc3NOYW1lYCBzZXR0aW5nIGluIGZhdm9yIG9mIHVzaW5nIGBhdXRoZW50aWNhdGlvbi5hdXRoZW50aWNhdG9yYC4KKyogQWRkZWQgYGF1dGhlbnRpY2F0aW9uLmF1dGhlbnRpY2F0aW9uSGFuZGxlcmAgc2V0dGluZy4KKyogQWRkZWQgYWJzdHJhY3Rpb24gdG8gYXV0aGVudGljYXRpb24gdG8gYWxsb3cgdXNlcnMgdG8gcGx1ZyBpbiB0aGVpciBvd24gYEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyYCBpbXBsZW1lbnRhdGlvbnMuCisqIEZpeGVkIGEgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBidWcgaW4gYEJfTFBfT19TX1NFX1NMX1RyYXZlcnNlcmAuCisqIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBub3cgdXNlcyB0aGUgbWFya2VyLW1vZGVsIHRvIHJlZHVjZSByZWN1cnNpdmUgbG9va3VwcyBvZiBpbnZhbGlkYXRpbmcgc3RlcHMuCisqIGBQcm9maWxlU3RyYXRlZ3lgIG5vdyB1c2VzIHRoZSBtYXJrZXItbW9kZWwgdG8gcmVkdWNlIHJlY3Vyc2l2ZSBsb29rdXBzIG9mIGBQcm9maWxlU2lkZUVmZmVjdFN0ZXBgLgorKiBgTXV0YXRpbmdgIHN0ZXBzIG5vdyBpbXBsZW1lbnQgYFNjb3BpbmdgIGludGVyZmFjZS4KKyogRml4ZWQgYSBzdGVwIGlkIGNvbXBpbGF0aW9uIGJ1ZyBpbiBgQWRkVmVydGV4U3RhcnRTdGVwYCwgYEFkZFZlcnRleFN0ZXBgLCBgQWRkRWRnZVN0ZXBgLCBhbmQgYEFkZFByb3BlcnR5U3RlcGAuCisqIEFkZGVkIG1vcmUgZGV0YWlscyB0byBHcmVtbGluIFNlcnZlciBjbGllbnQgc2lkZSBtZXNzYWdlcyAtIGV4Y2VwdGlvbiBoaWVyYXJjaHkgYW5kIHN0YWNrIHRyYWNlLgorKiBEZXByZWNhdGVkICJFeGNlcHRpb24tQ2xhc3MiIGluIHRoZSBHcmVtbGluIFNlcnZlciBIVFRQIHByb3RvY29sIGluIGZhdm9yIG9mIHRoZSBuZXcgImV4Y2VwdGlvbnMiIGZpZWxkLgorKiBEZS1yZWdpc3RlcmVkIG1ldHJpY3Mgb24gR3JlbWxpbiBTZXJ2ZXIgc2h1dGRvd24uCisqIEFkZGVkICJoZWxwIiBjb21tYW5kIG9wdGlvbiBvbiBgOnJlbW90ZSBjb25maWdgIGZvciBwbHVnaW5zIHRoYXQgc3VwcG9ydCB0aGF0IGZlYXR1cmUgaW4gdGhlIEdyZW1saW4gQ29uc29sZS4KKyogQWxsb3dlZCBmb3IgbXVsdGlwbGUgc2NyaXB0cyBhbmQgcmVsYXRlZCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGBncmVtbGluLnNoYCB2aWEgYC1pYCBhbmQgYC1lYC4KKyogYExBQkVMRURfUEFUSGAgcmVxdWlyZW1lbnQgaXMgbm93IHNldCBpZiBhbnkgc3RlcCBpbiB0aGUgdHJhdmVyc2FsIGlzIGxhYmVsZWQuCisqIFVwZGF0ZWQgYFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lgIHRvIG5vdCBydW4gaWYgdGhlIHByb3ZpZGVkIHRyYXZlcnNhbCBjb250YWlucyBhIGBWZXJ0ZXhQcm9ncmFtU3RlcGAgdGhhdCBoYXMgYSBgTEFCRUxFRF9QQVRIYCByZXF1aXJlbWVudC4KKyogQWRkZWQgdmFyaW91cyBtZXRyaWNzIHRvIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgYXJvdW5kIHNjcmlwdCBjb21waWxhdGlvbiBhbmQgZXhwb3NlZCB0aGVtIGluIEdyZW1saW4gU2VydmVyLgorKiBNb3ZlZCB0aGUgYGNhZmZlaW5lYCBkZXBlbmRlbmN5IGRvd24gdG8gYGdyZW1saW4tZ3Jvb3Z5YCBhbmQgb3V0IG9mIGBncmVtbGluLXNlcnZlcmAuCisqIEltcHJvdmVkIHNjcmlwdCBjb21waWxhdGlvbiBpbiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgdG8gdXNlIGJldHRlciBjYWNoaW5nLCBsb2cgbG9uZyBjb21waWxlIHRpbWVzIGFuZCBwcmV2ZW50IGZhaWxlZCBjb21waWxhdGlvbnMgZnJvbSByZWNvbXBpbGluZyBvbiBmdXR1cmUgcmVxdWVzdHMuCisqIFN5bmNocm9uaXplZCBzY3JpcHQgY29tcGlsYXRpb24uCisqIExvZ2dlZCBTY3JpcHQgY29tcGlsYXRpb24gdGltZXMuCisqIFByZXZlbnRlZCBmYWlsZWQgc2NyaXB0cyBmcm9tIHJlY29tcGlsaW5nLgorKiBMb2dnZWQgd2FybmluZ3MgZm9yIHNjcmlwdHMgdGhhdCB0YWtlICJ0b28gbG9uZyIgdG8gY29tcGlsZS4KKyogSW1wcm92ZWQgbWVtb3J5IHVzYWdlIG9mIHRoZSBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAuCisqIEFkZGVkIGBjeWNsaWNQYXRoKCkuZnJvbSgpLnRvKCkuYnkoKWAgc3VwcG9ydCB0byBgR3JhcGhUcmF2ZXJzYWxgLgorKiBBZGRlZCBgc2ltcGxlUGF0aCgpLmZyb20oKS50bygpLmJ5KClgIHN1cHBvcnQgdG8gYEdyYXBoVHJhdmVyc2FsYC4KKyogQWRkZWQgYHBhdGgoKS5mcm9tKCkudG8oKWAgc3VwcG9ydCB0byBgR3JhcGhUcmF2ZXJzYWxgIHNvIHN1Yi1wYXRocyBjYW4gYmUgaXNvbGF0ZWQgZnJvbSB0aGUgY3VycmVudCBwYXRoLgorKiBBZGRlZCBgRnJvbVRvTW9kdWxhdGluZ2AgaW50ZXJmYWNlIGZvciB1c2Ugd2l0aCBgdG8oKWAtIGFuZCBgZnJvbSgpYC1iYXNlZCBzdGVwIG1vZHVsYXRvcnMuCisqIEFkZGVkIGBQYXRoLnN1YlBhdGgoKWAgd2hpY2ggc3VwcG9ydHMgaXNvbGF0aW5nIGEgc3ViLXBhdGggZnJvbSBgUGF0aGAgdmlhIHRvL2Zyb20tbGFiZWxzLgorKiBGaXhlZCBgTnVsbFBvaW50ZXJFeGNlcHRpb25gIGluIGBHcmFwaE1MUmVhZGVyYCB0aGF0IG9jY3VycmVkIHdoZW4gYW4gYDxlZGdlPmAgZGlkbid0IGhhdmUgYW4gSUQgZmllbGQgYW5kIHRoZSBiYXNlIGdyYXBoIHN1cHBvcnRlZCBJRCBhc3NpZ25tZW50LgorKiBBZGRlZCBgU2NvcGluZ1N0cmF0ZWd5YCB3aGljaCB3aWxsIGNvbXB1dGVyIGFuZCBwcm92aWRlIGFsbCBgU2NvcGluZ2Agc3RlcHMgd2l0aCB0aGUgcGF0aCBsYWJlbHMgb2YgdGhlIGdsb2JhbCBgVHJhdmVyc2FsYC4KKyogU3BsaXQgYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIGludG8gdHdvIHN0cmF0ZWdpZXM6IGBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5YCBhbmQgYENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3lgLgorKiBSZW1vdmVkIGBIYXNUZXN0LmdfVl9oYXNJZF9jb21waWxhdGlvbkVxdWFsaXR5YCBmcm9tIHByb2Nlc3MgdGVzdCBzdWl0ZSBhcyBpdCBtYWtlcyB0b28gbWFueSBhc3N1bXB0aW9ucyBhYm91dCBwcm92aWRlciBjb21waWxhdGlvbi4KKyogRGVwcmVjYXRlZCBgQ3VzdG9taXplclByb3ZpZGVyYCBpbmZyYXN0cnVjdHVyZS4KKyogRGVwcmVjYXRlZCBgUGx1Z2luQWNjZXB0b3JgIGluZnJhc3RydWN0dXJlLgorKiBJbXByb3ZlZCBjb25zaXN0ZW5jeSBvZiB0aGUgYXBwbGljYXRpb24gb2YgYmluZGluZ3MgdG8gYEdyZW1saW5TY3JpcHRFbmdpbmVgIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgYEJpbmRpbmdzR3JlbWxpblBsdWdpbmAuCisqIEZpeGVkIGEgYnVnIGluIE9MQVAgYENvbXB1dGVyQXdhcmVTdGVwYCB3aGVyZSBlbmQtc3RlcCBsYWJlbHMgd2VyZSBub3QgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIHRyYXZlcnNlciBjb3JyZWN0bHkuCisqIFJlZmFjdG9yIGBTcGFya0NvbnRleHRgIGhhbmRsZXIgdG8gc3VwcG9ydCBleHRlcm5hbCBraWxsIGFuZCBzdG9wIG9wZXJhdGlvbnMuCisqIEZpeGVkIGFuIG9wdGltaXphdGlvbiBidWcgaW4gYExhenlCYXJyaWVyU3RyYXRlZ3lgIGFyb3VuZCBhcHBlbmRpbmcgYmFycmllcnMgdG8gdGhlIGVuZCBvZiBhIGBUcmF2ZXJzYWxgLgorKiBGaXhlZCBhbiBvcHRpbWl6YXRpb24gYnVnIGluIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBhcm91bmQgYXBwZW5kaW5nIGJhcnJpZXJzIHRvIHRoZSBlbmQgb2YgYSBgVHJhdmVyc2FsYC4KKyogYFRyYXZlcnNlckl0ZXJhdG9yYCBpbiBHcmVtbGluU2VydmVyIGlzIHNtYXJ0IHRvIHRyeSBhbmQgYnVsayB0cmF2ZXJzZXJzIHByaW9yIHRvIG5ldHdvcmsgSS9PLgorKiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZyBvZiBjb21waWxhdGlvbiBmYWlsdXJlcyBmb3IgdmVyeSBsYXJnZSBvciBoaWdobHkgcGFyYW1ldGVyaXplZCBzY3JpcHQgc2VudCB0byBHcmVtbGluIFNlcnZlci4KKyogRml4ZWQgYSBidWcgaW4gYFJhbmdlQnlJc0NvdW50U3RyYXRlZ3lgIHRoYXQgY2hhbmdlZCB0aGUgbWVhbmluZyBvZiBpbm5lciB0cmF2ZXJzYWxzLgorKiBJbXByb3ZlZCBHcmVtbGluLVB5dGhvbiBEcml2ZXIgaW1wbGVtZW50YXRpb24gYnkgYWRkaW5nIGEgdGhyZWFkZWQgY2xpZW50IHdpdGggYmFzaWMgY29ubmVjdGlvbiBwb29saW5nIGFuZCBzdXBwb3J0IGZvciBwbHVnZ2FibGUgd2Vic29ja2V0IGNsaWVudHMuCisqIENoYW5nZWQgYEdyYXBoTWFuYWdlcmAgZnJvbSBhIGZpbmFsIGNsYXNzIGltcGxlbWVudGF0aW9uIHRvIGFuIGludGVyZmFjZS4KKyogVXBkYXRlZCBgR3JhcGhNYW5hZ2VyYCBpbnRlcmZhY2UgdG8gaW5jbHVkZSBtZXRob2RzIGZvciBvcGVuaW5nL2luc3RhbnRpYXRpbmcgYSBncmFwaCBhbmQgY2xvc2luZyBhIGdyYXBoLgorKiBJbXBsZW1lbnRlZCBgRGVmYXVsdEdyYXBoTWFuYWdlcmAgdG8gaW5jbHVkZSBwcmV2aW91cyBgR3JhcGhNYW5hZ2VyYCBmdW5jdGlvbmFsaXR5IGFuZCBhZGhlcmUgdG8gdXBkYXRlZCBpbnRlcmZhY2UuCisqIERlcHJlY2F0ZWQgYEdyYXBoTWFuYWdlci5nZXRHcmFwaHMoKWAgYW5kIGFkZGVkIGBHcmFwaE1hbmFnZXIuZ2V0R3JhcGhOYW1lcygpYC4KKyogRGVwcmVjYXRlZCBgR3JhcGhNYW5hZ2VyLmdldFRyYXZlcnNhbFNvdXJjZXMoKWAgYW5kIGFkZGVkIGBHcmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlTmFtZXMoKWAuCisqIEZpeGVkIGEgYnVnIHNvIG5vdyB1c2VycyBjYW4gc3VwcGx5IGEgWUFNTCB3aXRoIGFuIGVtcHR5IGBzdGF0aWNWYXJpYWJsZVR5cGVzYCB0byBiZSB1c2VkIGJ5IHRoZSBgRmlsZVNhbmRib3hFeHRlbnNpb25gCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xMjU4IEhhc1Rlc3QuZ19WX2hhc0lkX2NvbXBpbGF0aW9uRXF1YWxpdHkgbWFrZXMgR3JhcGhTdGVwIGFzc3VtcHRpb25zCisqIFRJTktFUlBPUC0xNTI4IENvdW50QnlJc1JhbmdlU3RyYXRlZ3kgZmFpbHMgZm9yIGEgcGFydGljdWxhciBxdWVyeQorKiBUSU5LRVJQT1AtMTYyNiBjaG9vc2UoKSBpcyBidWdneSBpbiBPTEFQCisqIFRJTktFUlBPUC0xNjM4IGNvdW50KCkgaXMgb3B0aW1pemVkIGF3YXkgaW4gd2hlcmUoKQorKiBUSU5LRVJQT1AtMTY0MCBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5IGdpdmVzIGZhbHNlIGVycm9ycworKiBUSU5LRVJQT1AtMTY1MiBEaXNhYmxlIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgaWYgVmVydGV4UHJvZ3JhbVN0ZXAgaGFzIExBQkVMTEVEX1BBVEggcmVxdWlyZW1lbnQKKyogVElOS0VSUE9QLTE2NjAgRG9jdW1lbnRhdGlvbiBsaW5rcyBzaG91bGQgbm90IGxpbmsgdG8gVElOS0VSUE9QLXh4eHggYnJhbmNoZXMKKyogVElOS0VSUE9QLTE2NjYgTlBFIGluIEZpbGVTYW5kYm94RXh0ZW5zaW9uIGlmIHN0YXRpY1ZhcmlhYmxlVHlwZXMgaXMgZW1wdHkgaW4gc3VwcGxpZWQgWUFNTCBmaWxlCisqIFRJTktFUlBPUC0xNjY4IFJlcGVhdFVucm9sbFN0cmF0ZWd5IHNob3VsZCBub3QgZXhlY3V0ZSBpZiB0aGVyZSBpcyBhIExvb3BTdGVwIHVzZWQuCisqIFRJTktFUlBPUC0xNjcwIEVuZCB0eXBlIGxvc3Qgd2hlbiB1c2luZyBwcm9taXNlKCkKKyogVElOS0VSUE9QLTE2NzMgR3Jvb3Z5VHJhbnNsYXRvciBwcm9kdWNlcyBHcmVtbGluIHRoYXQgY2FuJ3QgZXhlY3V0ZSBvbiA6cmVtb3RlCisqIFRJTktFUlBPUC0xNjc1IFJlbW90ZVN0ZXAjcHJvY2Vzc05leHRTdGFydCgpIHRocm93cyBDb21wbGV0aW9uRXhjZXB0aW9uIGluc3RlYWQgb2YgdW5kZXJseWluZyBleGNlcHRpb24KKyogVElOS0VSUE9QLTE2ODEgTXVsdGlwbGUgaGFzSWQncyBhcmUgb3InZCBpbnRvIEdyYXBoU3RlcAorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC03NjEgU29tZSBiYXNpYyBtYXRoZW1hdGljYWwgZnVuY3Rpb25zIC8gc3RlcHMKKyogVElOS0VSUE9QLTc4NiBQYXR0ZXJucyBmb3IgRFNMIERldmVsb3BtZW50CisqIFRJTktFUlBPUC0xMDQ0IFJlc3BvbnNlTWVzc2FnZSBzaG91bGQgY29udGFpbiBzZXJ2ZXItc2lkZSBleGNlcHRpb24gbmFtZS4KKyogVElOS0VSUE9QLTEwOTUgQ3JlYXRlIGEgY3VzdG9tIFNjcmlwdENvbnRleHQKKyogVElOS0VSUE9QLTEyNjYgTWFrZSBtZW1vcnkgYXZhaWxhYmxlIHRvIGJlbmNobWFya3MgY29uZmlndXJhYmxlCisqIFRJTktFUlBPUC0xMzAzIGFkZCBoZWxwIGZvciA6cmVtb3RlIGNvbmZpZyBmb3IgR2VwaGkgUGx1Z2luCisqIFRJTktFUlBPUC0xMzQwIGRvY3MgZG8gbm90IHN0YXRlIGF0IHdoYXQgdmVyc2lvbiBhbiBBUEkgd2FzIGludHJvZHVjZWQgKG9yIGRlcHJlY2F0ZWQpCisqIFRJTktFUlBPUC0xMzg3IGZyb20gYW5kIHRvIG1vZHVsYXRvcnMgZm9yIHBhdGggc3RlcHMKKyogVElOS0VSUE9QLTE0MzggQ29uc2lkZXIgR3JhcGhNYW5hZ2VyIGFzIGFuIGludGVyZmFjZSooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTQ1MyBBbGxvdyBHcmVtbGluLVB5dGhvbiB0byBoYW5kbGUgYXN5bmNocm9ub3VzIGZhaWx1cmUKKyogVElOS0VSUE9QLTE1NzcgUHJvdmlkZSBzdXBwb3J0IGZvciBQeXRob24zIG9yIFB5dGhvbjIgaW4gdGhlIERvY2tlciBidWlsZHMuCisqIFRJTktFUlBPUC0xNTk5IGltcGxlbWVudCByZWFsIGdyZW1saW4tcHl0aG9uIGRyaXZlcgorKiBUSU5LRVJQT1AtMTYxNCBJbXByb3ZlIGRvY3VtZW50YXRpb24gZm9yIEdyYXBoLlYoKSBhbmQgR3JhcGguRSgpIG9uIG1haW4gZG9jcyBwYWdlCisqIFRJTktFUlBPUC0xNjE4IFJlbW92ZSBncm9vdnkgZGVwZW5kZW5jeSBmcm9tIGdyZW1saW4tcHl0aG9uCisqIFRJTktFUlBPUC0xNjI3IExhenlCYXJyaWVyU3RyYXRlZ3kgc2hvdWxkIG5vdCBhcHBlbmQgYW4gZW5kIGJhcnJpZXIuCisqIFRJTktFUlBPUC0xNjMxIEZpeCB2aXNpYmlsaXR5IGlzc3VlcyB3aXRoIHRoZSBCaW5kaW5nc0dyZW1saW5QbHVnaW4KKyogVElOS0VSUE9QLTE2MzQgRGVwcmVjYXRlIG9sZCBtZXRob2RzIG9mIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgY3VzdG9taXphdGlvbgorKiBUSU5LRVJQT1AtMTY0MiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIG11dGF0aW5nIHRyYXZlcnNhbHMKKyogVElOS0VSUE9QLTE2NDQgSW1wcm92ZSBzY3JpcHQgY29tcGlsYXRpb24gcHJvY2VzcyBhbmQgaW5jbHVkZSBtZXRyaWNzCisqIFRJTktFUlBPUC0xNjUzIEFsbG93IG11bHRpcGxlIHNjcmlwdHMgd2l0aCBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25zb2xlCisqIFRJTktFUlBPUC0xNjU3IFByb3ZpZGUgYWJzdHJhY3Rpb24gdG8gZWFzaWx5IGFsbG93IGRpZmZlcmVudCBIdHRwQXV0aCBzY2hlbWVzCisqIFRJTktFUlBPUC0xNjYzIFZhbGlkYXRlIGEgbWF4aW11bSBmb3IgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byBHcmVtbGluIFNlcnZlcgorKiBUSU5LRVJQT1AtMTY2NSBSZW1vdmUgdW5pdHRlc3QgZnJvbSBHcmVtbGluLVB5dGhvbiB0ZXN0cworKiBUSU5LRVJQT1AtMTY3MSBEZWZhdWx0IG1ldGhvZCBmb3IgUmVtb3RlQ29ubmVjdGlvbi5zdWJtaXRBc3luYyB0aHJvd3MgZXhjZXB0aW9uIGZyb20gc3VibWl0IG9uIGNhbGxpbmcgdGhyZWFkIGluc3RlYWQgb2YgZmFpbGluZyB0aGUgZnV0dXJlCisqIFRJTktFUlBPUC0xNjc3IEJ1bXAgR3Jvb3Z5IHRvIDIuNC4xMQorKiBUSU5LRVJQT1AtMTY4MCBBZGQgc3RyaW5nIHBlcmZvcm1hbmNlIG9wdGlvbnMgdG8gU3RhckdyYXBoCisKK1tbcmVsZWFzZS0zLTItNF1dCis9PT0gVGlua2VyUG9wIDMuMi40IChSZWxlYXNlIERhdGU6IEZlYnJ1YXJ5IDgsIDIwMTcpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMS54LmFzY2lpZG9jI3JlbGVhc2UtMy0xLTYsIDMuMS42Pj4uCisKKyogRml4ZWQgYSBidWcgd2hlcmUgYFBhdGhQcm9jZXNzb3Iua2VlcExhYmVsc2Agd2VyZSBub3QgYmVpbmcgcHVzaGVkIGRvd24gaW50byBjaGlsZCB0cmF2ZXJzYWxzIGJ5IGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YC4KKyogQWRkZWQgZGVmYXVsdCBgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneWAgZm9yIGBHcmFwaENvbXB1dGVyYCB0aGF0IGNhbiByZWR1Y2UgdGhlIG51bWJlciBvZiBtZXNzYWdlIHBhc3NpbmcgaXRlcmF0aW9ucy4KKyogRml4ZWQgYSBidWcgYXNzb2NpYXRlZCB3aXRoIHVzZXItcHJvdmlkZWQgbWFwcyBhbmQgYEdyb3VwU2lkZUVmZmVjdFN0ZXBgLgorKiBgR3JvdXBCaU9wZXJhdG9yYCBubyBsb25nZXIgbWFpbnRhaW5zIGEgZGV0YWNoZWQgdHJhdmVyc2FsIGFuZCB0aHVzLCBubyBtb3JlIHNpZGUtZWZmZWN0IHJlbGF0ZWQgT0xBUCBpbmNvbnNpc3RlbmNpZXMuCisqIEFkZGVkIGBQcm9qZWN0ZWRUcmF2ZXJzZXJgIHdoaWNoIHdyYXBzIGEgdHJhdmVyc2VyIHdpdGggYSBgTGlzdDxPYmplY3Q+YCBvZiBwcm9qZWN0ZWQgZGF0YS4KKyogRml4ZWQgYW4gb3B0aW1pemF0aW9uIGJ1ZyBpbiBgQ29sbGVjdGluZ0JhcnJpZXJTdGVwc2Agd2hlcmUgdGhlIGJhcnJpZXIgd2FzIGJlaW5nIGNvbnN1bWVkIG9uIGVhY2ggYGFkZEJhcnJpZXIoKWAuCisqIGBPcmRlckdsb2JhbFN0ZXBgIGFuZCBgU2FtcGxlR2xvYmFsU3RlcGAgdXNlIGBQcm9qZWN0ZWRUcmF2ZXJzZXJgIGFuZCBub3cgY2FuIHdvcmsgdXAgdG8gdGhlIGxvY2FsIHN0YXIgZ3JhcGggaW4gT0xBUC4KKyogU0FTTCBuZWdvdGlhdGlvbiBzdXBwb3J0cyBib3RoIGEgYnl0ZSBhcnJheSBhbmQgQmFzZTY0IGVuY29kZWQgYnl0ZXMgYXMgYSBzdHJpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdyZW1saW4gU2VydmVyLgorKiBEZXByZWNhdGVkIGFsbCB0ZXN0IHN1aXRlcyBpbiBgZ3JlbWxpbi1ncm9vdnktdGVzdGAgLSBHcmFwaCBQcm92aWRlcnMgbm8gbG9uZ2VyIG5lZWQgdG8gaW1wbGVtZW50IHRoZXNlLgorKiBEZXByZWNhdGVkIGBUaW5rZXJJb1JlZ2lzdHJ5YCByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbW9yZSBjb25zaXN0ZW50bHkgbmFtZWQgYFRpbmtlcklvUmVnaXN0cnlWMWQwYC4KKyogTWFkZSBlcnJvciBtZXNzYWdpbmcgbW9yZSBjb25zaXN0ZW50IGR1cmluZyByZXN1bHQgaXRlcmF0aW9uIHRpbWVvdXRzIGluIEdyZW1saW4gU2VydmVyLgorKiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBjbGFzc2xvYWRlciBmb3IgdGhlIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCB3aGVyZSBjbGFzc2VzIGluIHRoZSBsb2FkZXIgd2VyZSBub3QgcmVsZWFzaW5nIGZyb20gbWVtb3J5IGFzIGEgc3Ryb25nIHJlZmVyZW5jZSB3YXMgYWx3YXlzIG1haW50YWluZWQuCisqIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCBkb2VzIG5vdCBhZGQgYSBgTm9PcEJhcnJpZXJTdGVwYCB0byB0aGUgZW5kIG9mIGxvY2FsIGNoaWxkcmVuIGFzIGl0cyB3YXN0ZWQgY29tcHV0YXRpb24gaW4gOTklIG9mIHRyYXZlcnNhbHMuCisqIEZpeGVkIGEgYnVnIGluIGBBZGRWZXJ0ZXhTdGFydFN0ZXBgIHdoZXJlIGlmIGEgc2lkZS1lZmZlY3Qgd2FzIGJlaW5nIHVzZWQgaW4gdGhlIHBhcmFtZXRyaXphdGlvbiwgYW4gTlBFIG9jY3VycmVkLgorKiBGaXhlZCBhIGJ1ZyBpbiBgTGF6eUJhcnJpZXJTdHJhdGVneWAgd2hlcmUgYHByb2ZpbGUoKWAgd2FzIGRlYWN0aXZhdGluZyBpdCBhY2NpZGVudGFsbHkuCisqIEZpeGVkIGEgYnVnIGluIGBSZXBlYXRVbnJvbGxTdHJhdGVneWAgd2hlcmUgc3RhdGVmdWwgYERlZHVwR2xvYmFsU3RlcGAgd2FzIGNsb25lZCBhbmQgdGh1cywgbWFpbnRhaW5lZCB0d28gZGVkdXBsaWNhdGlvbiBzZXRzLgorKiBBZGRlZCBkb2N1bWVudGF0aW9uIGFyb3VuZCAidGVybWluYWwgc3RlcHMiIGluIEdyZW1saW46IGBoYXNOZXh0KClgLCBgbmV4dCgpYCwgYHRvTGlzdCgpYCwgZXRjLgorKiBBZGRlZCBzcGVjaWZpYyBHcmFwaFNPTiBzZXJpYWxpemVycyBmb3IgYFJlcXVlc3RNZXNzYWdlYCBhbmQgYFJlc3BvbnNlTWVzc2FnZWAgaW4gR3JhcGhTT04gMi4wLgorKiBBZGRlZCBgQ2xvc2VhYmxlSXRlcmF0b3JgIHRvIGFsbG93IGBHcmFwaGAgcHJvdmlkZXJzIHdobyBvcGVuIGV4cGVuc2l2ZSByZXNvdXJjZXMgYSB3YXkgdG8gbGV0IHVzZXJzIHJlbGVhc2UgdGhlbS4KKyogRml4ZWQgbWlub3IgYnVnIGluIGBncmVtbGluLWRyaXZlcmAgd2hlcmUgY2xvc2luZyBhIHNlc3Npb24tYmFzZWQgYENsaWVudGAgd2l0aG91dCBpbml0aWFsaXppbmcgaXQgY291bGQgZ2VuZXJhdGUgYW4gZXJyb3IuCisqIFJlbGlldmVkIHN5bmNocm9uaXphdGlvbiBwcmVzc3VyZSBpbiB2YXJpb3VzIGFyZWFzIG9mIGBUaW5rZXJHcmFwaENvbXB1dGVyYC4KKyogRml4ZWQgYW4gb3B0aW1pemF0aW9uIGJ1ZyBpbiBPTEFQLWJhc2VkIGBEZWR1cEdsb2JhbFN0ZXBgIHdoZXJlIGRlZHVwaW5nIG9jY3VycmVkIHR3aWNlLgorKiBgTWVtb3J5Q29tcHV0ZUtleWAgbm93IGltcGxlbWVudHMgYENsb25lYWJsZWAgd2hpY2ggaXMgdXNlZnVsIGZvciBgQmlPcGVyYXRvcmAgcmVkdWNlcnMgdGhhdCBtYWludGFpbiB0aHJlYWQtdW5zYWZlIHN0YXRlLgorKiBgVGlua2VyR3JhcGhDb21wdXRlcmAgbm93IHN1cHBvcnRzIGRpc3RyaWJ1dGVkIGBNZW1vcnlgIHdpdGggbG9jay1mcmVlIHBhcnRpdGlvbiBhZ2dyZWdhdGlvbi4KKyogYFRpbmtlckdyYXBoYCBHcnlvIGFuZCBHcmFwaFNPTiBkZXNlcmlhbGl6YXRpb24gaXMgbm93IGNvbmZpZ3VyZWQgdG8gdXNlIG11bHRpLXByb3BlcnRpZXMuCisqIENoYW5nZWQgYmVoYXZpb3Igb2YgYEVsZW1lbnRIZWxwZXIuYXJlRXF1YWwoUHJvcGVydHksIFByb3BlcnR5KWAgdG8gbm90IHRocm93IGV4Y2VwdGlvbnMgd2l0aCBgbnVsbGAgYXJndW1lbnRzLgorKiBBZGRlZCBgR3J5b1ZlcnNpb25gIGZvciBmdXR1cmUgZmxleGliaWxpdHkgd2hlbiBpbnRyb2R1Y2luZyBhIG5ldyB2ZXJpc29uIG9mIEdyeW8gYW5kIG1vdmVkIHNlcmlhbGl6ZXIgcmVnaXN0cmF0aW9ucyB0byBpdC4KKyogRml4ZWQgR3J5byBzZXJpYWxpemF0aW9uIG9mIGBDb25uZWN0aXZlUGAgaW5zdGFuY2VzLgorKiBMZXNzZW5lZCB0aGUgc2V2ZXJpdHkgb2YgR3JlbWxpbiBTZXJ2ZXIgbG9nZ2luZyB3aGVuIGl0IGVuY291bnRlcnMgdHdvIG9yIG1vcmUgc2VyaWFsaXplcnMgYWRkcmVzc2luZyB0aGUgc2FtZSBtaW1lIHR5cGUuCisqIEJ1bXBlZCB0byBOZXR0eSA0LjAuNDIuZmluYWwuCisqIEFkZGVkIGBCeXRlQnVmZmVyYCwgYEluZXRBZGRyZXNzYCwgYFRpbWVzdGFtcGAgdG8gdGhlIGxpc3Qgb2YgR3J5byBzdXBwb3J0ZWQgY2xhc3Nlcy4KKyogRml4ZWQgR3J5byBzZXJpYWxpemF0aW9uIG9mIGBDbGFzc2AuCisqIEZpeGVkIEdyYXBoU09OIHNlcmlhbGl6YXRpb24gb2YgZW51bXMgbGlrZSBgVGAsIGBQYCwgZXRjLiB3aGVyZSB2YWx1ZXMgd2VyZSBvdmVycmlkaW5nIGVhY2ggb3RoZXIgaW4gdGhlIEdyYXBoU09OIHR5cGUgcmVnaXN0cnkuCisqIEZpeGVkIGEgYnVnIGluIEdyZW1saW4tUHl0aG9uIGFyb3VuZCBgX18uX18oKWAgYW5kIGBfXy5zdGFydCgpYC4KKyogRml4ZWQgYSBidWcgYXJvdW5kIGxvbmcgc2VyaWFsaXphdGlvbiBpbiBHcmVtbGluLVB5dGhvbiB3aGVuIHVzaW5nIFB5dGhvbjMuCisqIERlcHJlY2F0ZWQgYFRyYXZlcnNhbFNvdXJjZS53aXRoQmluZGluZ3MoKWAgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBpbiBHcmVtbGluLUphdmEgYW5kIG5ldmVyIHdhcyBuZWVkZWQgZm9yIG90aGVyIHZhcmlhbnRzLgorKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluLUphdmEgYEJ5dGVjb2RlYCB3aGVyZSBhbm9ueW1vdXMgdHJhdmVyc2FscyB3ZXJlIG5vdCBhd2FyZSBvZiBwYXJlbnQgYmluZGluZ3MuCisqIEZpeGVkIGEgYnVnIGluIEdyZW1saW4tSmF2YSBHcmFwaFNPTiBkZXNlcmlhbGl6YXRpb24gYXJvdW5kIGBQLndpdGhpbigpYCBhbmQgYFAud2l0aG91dCgpYC4KKyogQ29udmVydGVkIFNwYXJrIHByb2Nlc3Mgc3VpdGUgdGVzdHMgdG8gImludGVncmF0aW9uIiB0ZXN0cy4KKyogRml4ZWQgYSBidWcgaW4gYElubGluZUZpbHRlclN0cmF0ZWd5YCBoYXZpbmcgdG8gZG8gd2l0aCBmb2xkaW5nIGBIYXNDb250YWluZXJzYCBpbnRvIGBWZXJ0ZXhTdGVwYC4KKyogRGVwcmVjYXRlZCBgSGFzQ29udGFpbmVyLm1ha2VIYXNDb250YWluZXJzKClgIHdoaWNoIHdhcyB1c2VkIHRvIGRpc3NlY3QgYEFuZFBgIGFuZCBzaG91bGRuJ3QgYmUgdXNlZCBhdCB0aGUgVGlua2VyUG9wLWxldmVsLgorKiBgR3JhcGhUcmF2ZXJzYWwuaGFzKClgIG5vdyB3aWxsIHRyeSBhbmQgZm9sZC1sZWZ0IGBIYXNDb250YWluZXJgIGlmIGVuZCBzdGVwIGlzIGEgYEhhc0NvbnRhaW5lckhvbGRlcmAuCisqIENyZWF0ZWQgZXhwbGljaXQgYFBgLXByZWRpY2F0ZSBtZXRob2RzIGZvciBgR3JhcGhUcmF2ZXJzYWwuaGFzWFhYKClgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgRmlsdGVyUmFua1N0cmF0ZWd5YCBhcm91bmQgYHdoZXJlKCkuYnkoKWAgb3JkZXJpbmcuCisqIEFkZGVkIGFub3RoZXIgb3B0aW1pemF0aW9uIGluIGBSYW5nZUJ5SXNDb3VudFN0cmF0ZWd5YCwgdGhhdCByZW1vdmVzIGBjb3VudCgpLmlzKClgIGFsdG9nZXRoZXIgaWYgaXQncyBub3QgbmVlZGVkLgorKiBGaXhlZCBhIE9MQVAgYE1hdGNoU3RlcC5jbG9uZSgpYC1idWcgdGhhdCBvY2N1cnMgd2hlbiB0aGUgYG1hdGNoKClgIGlzIGluIGEgbG9jYWwgY2hpbGQuCisqIEFkZGVkIGFub3RoZXIgb3B0aW1pemF0aW9uIGluIGBSYW5nZUJ5SXNDb3VudFN0cmF0ZWd5YCwgdGhhdCByZW1vdmVzIGBjb3VudCgpLmlzKClgIGFsdG9nZXRoZXIgaWYgaXQncyBub3QgbmVlZGVkLgorKiBGaXhlZCBhIGJ1ZyBpbiBgUmFuZ2VCeUlzQ291bnRTdHJhdGVneWAgd2hlcmUgbGFiZWxlZCBwYXJlbnRzIHNob3VsZG4ndCBoYXZlIHRoZSBzdHJhdGVneSBhcHBsaWVkIHRvIHRoZWlyIGNoaWxkcmVuLgorKiBGaXhlZCBhIGJ1ZyBpbiBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAgd2hlcmUgYE1hdGNoRW5kU3RlcGAgbGFiZWxzIHdlcmUgYmVpbmcgZHJvcHBlZCB3aGVuIHRoZXkgc2hvdWxkbid0IGJlLgorKiBBZGRlZCBgVGlua2VyR3JhcGhDb3VudFN0cmF0ZWd5YCB3aGljaCB0cmFuc2xhdGVzIGBnLlYoKS5tYXAqLmNvdW50KClgIHBhdHRlcm5zIGludG8gZGlyZWN0IGBNYXAuc2l6ZSgpYCBjYWxscyBpbiBgVGlua2VyR3JhcGhgLgorKiBBZGRlZCBgUGF0aC5oZWFkKClgIGFuZCBgUGF0aC5pc0VtcHR5KClgIHdpdGggZGVmYXVsdCBtZXRob2QgaW1wbGVtZW50YXRpb25zLgorKiBGaXhlZCBhIGBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uYCBidWcgd2l0aCBgR3JvdXBYWFhTdGVwYCB3aGVyZSBpZiB0aGUgcmVkdWNlZCBgVHJhdmVyc2VyU2V0YCBpcyBlbXB0eSwgZG9uJ3QgYWRkIHRoZSBrZXkvdmFsdWUuCisqIEZpeGVkIGEgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBidWcgd2l0aCBwcm9maWxpbmcgYEdyb3VwU2lkZUVmZmVjdFN0ZXBgIGluIE9MVFAuCisqIEltcHJvdmVkIGFiaWxpdHkgdG8gcmVsZWFzZSByZXNvdXJjZXMgaW4gYEdyYXBoUHJvdmlkZXJgIGluc3RhbmNlcyBpbiB0aGUgdGVzdCBzdWl0ZS4KKyogRmFjdG9yZWQgYEdyZW1saW5QbHVnaW5gIGZ1bmN0aW9uYWxpdHkgb3V0IG9mIGdyZW1saW4tZ3Jvb3Z5IGFuZCBpbnRvIGdyZW1saW4tY29yZSAtIHJlbGF0ZWQgY2xhc3NlcyB3ZXJlIGRlcHJlY2F0ZWQuCisqIEFkZGVkIGEgYGZvcmNlYCBvcHRpb24gZm9yIGtpbGxpbmcgc2Vzc2lvbnMgd2l0aG91dCB3YWl0aW5nIGZvciB0cmFuc2FjdGlvbiBjbG9zZSBvciB0aW1lb3V0IG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgam9iIG9yIG11bHRpcGxlIGpvYnMuCisqIERlcHJlY2F0ZWQgYFNlc3Npb24ua2lsbCgpYCBhbmQgYFNlc3Npb24ubWFudWFsS2lsbCgpYC4KKyogQWRkZWQgYFRyYXZlcnNhbC5wcm9taXNlKClgIG1ldGhvZCB0byBhbGxvdyBmb3IgYXN5bmNocm9ub3VzIHRyYXZlcnNhbCBwcm9jZXNzaW5nIG9uICJyZW1vdGUiIHRyYXZlcnNhbHMuCisqIERlcHJlY2F0ZWQgYFJlbW90ZUNvbm5lY3Rpb24uc3VibWl0KEJ5dGVjb2RlKWAgaW4gZmF2b3Igb2YgYHN1Ym1pdEFzeW5jKEJ5dGVjb2RlKWAuCisqIEFkZGVkIGBjaG9vc2UocHJlZGljYXRlLHRyYXZlcnNhbClgIGFuZCBgY2hvb3NlKHRyYXZlcnNhbCx0cmF2ZXJzYWwpYCB0byBlZmZlY3QgaWYvdGhlbi1zZW1hbnRpY3MgKG5vIGVsc2UpLiBFcXVpdmFsZW50IHRvIGBjaG9vc2UoeCx5LGlkZW50aXR5KCkpYC4KKyogUmVtb3ZlZCBgSW1tdXRhYmxlUGF0aC5UYWlsUGF0aGAgYXMgaXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIHdpdGggbmV3IHJlY3Vyc2lvbiBtb2RlbC4KKyogUmVtb3ZlZCBjYWxsIHN0YWNrIHJlY3Vyc2lvbiBpbiBgSW1tdXRhYmxlUGF0aGAuCisqIEdyZW1saW4tUHl0aG9uIHNlcmlhbGl6ZXMgYEJ5dGVjb2RlYCBhcyBhbiBvYmplY3QgKGluc3RlYWQgb2YgYSBKU09OIHN0cmluZykgd2hlbiBzdWJtaXQgb3ZlciB0aGUgYFJlbW90ZUNvbm5lY3Rpb25gLgorKiBGaXhlZCB0aGUgaGFuZGxpbmcgb2YgdGhlIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCBwYXNzLXRocm91Z2ggY29uZmlndXJhdGlvbnMgdG8gdGhlIGRyaXZlci4KKyogYEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5YCBub3cgdXNlcyBhIGhpZGRlbiBsYWJlbCBtYXJrZXIgbW9kZWwgdG8gYXZvaWQgcmVwZWF0ZWQgcmVjdXJzaW9uIGZvciBpbnZhbGlkYXRpbmcgc3RlcHMuCisqIGBQYXRoUHJvY2Vzc29yU3RyYXRlZ3lgIGNhbiBpbmxpbmUgY2VydGFpbiBgd2hlcmUodHJhdmVyc2FsKWAtc3RlcHMgaW4gb3JkZXIgdG8gaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2Qgb2Ygc3Rhci1sb2NhbCBjaGlsZHJlbi4KKyogYFNwYXJrR3JhcGhDb21wdXRlcmAgbm8gbG9uZ2VyIHN0YXJ0cyBhIHdvcmtlciBpdGVyYXRpb24gaWYgdGhlIHdvcmtlcidzIHBhcnRpdGlvbiBpcyBlbXB0eS4KKyogQWRkZWQgYFByb2plY3RTdGVwLmdldFByb2plY3RLZXlzKClgIGZvciBzdHJhdGVnaWVzIHRoYXQgcmVseSBvbiBzdWNoIGluZm9ybWF0aW9uLgorKiBBZGRlZCBgVmVydGV4RmVhdHVyZXMuc3VwcG9ydHNEdXBsaWNhdGVNdWx0aVByb3BlcnRpZXMoKWAgZm9yIGdyYXBocyB0aGF0IG9ubHkgc3VwcG9ydCB1bmlxdWUgdmFsdWVzIGluIG11bHRpLXByb3BlcnRpZXMuCisqIERlcHJlY2F0ZWQgdGhlICJwZXJmb3JtYW5jZSIgdGVzdHMgaW4gYE9wdEluYC4KKyogRGVwcmVjYXRlZCBgZ2V0SW5zdGFuY2UoKWAgbWV0aG9kcyBpbiBmYXZvciBvZiBgaW5zdGFuY2UoKWAgZm9yIGJldHRlciBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBBUEkuCisqIEJsb2NrIGNhbGxzIHRvICJyZW1vdGUiIHRyYXZlcnNhbCBzaWRlLWVmZmVjdHMgdW50aWwgdGhlIHRyYXZlcnNhbCByZWFkIGlzIGNvbXBsZXRlIHdoaWNoIHNpZ25pZmllcyBhbiBlbmQgdG8gaXRlcmF0aW9uLgorKiBBZGRlZCBgUGljay5ub25lYCBhbmQgYFBpY2suYW55YCB0byB0aGUgc2VyaWFsaXplcnMgYW5kIGltcG9ydGVycy4KKyogQWRkZWQgYSBjbGFzcyBsb2FkZXIgdG8gYFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGVgIHdoaWNoIGd1YXJhbnRlZXMgc3RyYXRlZ2llcyBhcmUgcmVnaXN0ZXJlZCBwcmlvciB0byBgR2xvYmFsQ2FjaGUuZ2V0U3RyYXRlZ2llcygpYC4KKyogRml4ZWQgYSBzZXZlcmUgYnVnIHdoZXJlIGBHcmFwaENvbXB1dGVyYCBzdHJhdGVnaWVzIGFyZSBub3QgYmVpbmcgbG9hZGVkIHVudGlsIHRoZSBzZWNvbmQgdXNlIG9mIHRoZSB0cmF2ZXJzYWwgc291cmNlLgorKiBUaGUgcm9vdCB0cmF2ZXJzYWwgbm93IHRocm93cyByZWd1bGFyIGBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uYCBpbnN0ZWFkIG9mIGBGYXN0Tm9TdWNoRWxlbWVudEV4Y2VwdGlvbmAuICgqYnJlYWtpbmcqKQorKiBBZGRlZCBhIHNob3J0IHNsZWVwIHRvIHByZXZlbnQgdHJhdmVyc2FsIGZyb20gZmluaXNoaW5nIGJlZm9yZSBpdCBjYW4gYmUgaW50ZXJydXB0ZWQgZHVyaW5nIGBUcmF2ZXJzYWxJbnRlcnJ1cHRpb25Db21wdXRlclRlc3RgLgorKiBBZGRlZCBzdXBwb3J0IGZvciBTU0wgY2xpZW50IGF1dGhlbnRpY2F0aW9uCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xMzgwIGRlZHVwKCkgZG9lc24ndCBkZWR1cCBpbiByYXJlIGNhc2VzCisqIFRJTktFUlBPUC0xMzg0IERlc2NyaXB0aW9uIG9mIGZpbHRlciBmdW5jdGlvbiBpbiB0cmF2ZXJzYWwgZG9jdW1lbnRhdGlvbgorKiBUSU5LRVJQT1AtMTQyOCBwcm9maWxlKCkgdGhyb3dzIE5QRSBmb3IgdW5pb24oZ3JvdXAsIGdyb3VwKQorKiBUSU5LRVJQT1AtMTUyMSBNdXRhdGluZyBzdGVwcyBkb24ndCByZWNvZ25pemUgc2lkZS1lZmZlY3RzCisqIFRJTktFUlBPUC0xNTI1IFBsdWcgVmVydGV4UHJvZ3JhbSBpdGVyYXRpb24gbGVhayBvbiBlbXB0eSBTcGFyayBSREQgcGFydGl0aW9ucworKiBUSU5LRVJQT1AtMTUzNCBHcmVtbGluIFNlcnZlciBpbnN0YW5jZXMgbGVha2luZyBpbiB0ZXN0cworKiBUSU5LRVJQT1AtMTUzNyBQeXRob24gdGVzdHMgc2hvdWxkIG5vdCB1c2UgaGFyZC1jb2RlZCBudW1iZXIgb2Ygd29ya2VycworKiBUSU5LRVJQT1AtMTU0NyBUd28gYnVncyBmb3VuZCBhc3NvY2lhdGVkIHdpdGggTWF0Y2hTdGVwOiBQYXRoIHJldHJhY3Rpb24gYW5kIHJhbmdlIGNvdW50LgorKiBUSU5LRVJQT1AtMTU0OCBUcmF2ZXJzYWxzIGNhbiBjb21wbGV0ZSBiZWZvcmUgaW50ZXJydXB0ZWQgaW4gVHJhdmVyc2FsSW50ZXJydXB0aW9uQ29tcHV0ZXJUZXN0CisqIFRJTktFUlBPUC0xNTYwIENhY2hlIGluIEdyb292eUNsYXNzTG9hZGVyIG1heSBjb250aW51ZSB0byBncm93CisqIFRJTktFUlBPUC0xNTYxIGdyZW1pbG4tcHl0aG9uIEdyYXBoU09OV3JpdGVyIGRvZXNuJ3QgcHJvcGVybHkgc2VyaWFsaXplIGxvbmcgaW4gUHl0aG9uIDMuNQorKiBUSU5LRVJQT1AtMTU2NyBHcmFwaFNPTiBkZXNlcmlhbGl6YXRpb24gZmFpbHMgd2l0aCB3aXRoaW4oJ2EnKQorKiBUSU5LRVJQT1AtMTU3MyBCaW5kaW5ncyBkb24ndCB3b3JrIGluIGNvYWxlc2NlCisqIFRJTktFUlBPUC0xNTc2IGdyZW1saW4tcHl0aG9uIGNhbGxzIG5vbi1leGlzdGVudCBtZXRob2RzCisqIFRJTktFUlBPUC0xNTgxIEdyZW1saW4tUHl0aG9uIGRyaXZlciBjb25uZWN0aW9uIGlzIG5vdCB0aHJlYWQgc2FmZS4KKyogVElOS0VSUE9QLTE1ODMgUGF0aFJldHJhY3Rpb25TdHJhdGVneSByZXRyYWN0cyBrZXlzIHRoYXQgYXJlIGFjdHVhbGx5IG5lZWRlZAorKiBUSU5LRVJQT1AtMTU4NSBPTEFQIGRlZHVwIG92ZXIgbm9uIGVsZW1lbnRzCisqIFRJTktFUlBPUC0xNTg3IEdyZW1saW4gU2VydmVyIFN1YmdyYXBoIENhcmRpbmFsaXR5IE5vdCBSZXNwZWN0ZWQKKyogVElOS0VSUE9QLTE1OTQgTGF6eUJhcnJpZXJTdHJhdGVneSBkb2VzIG5vdCBhY3RpdmF0ZSB3aXRoIFByb2ZpbGVTdGVwCisqIFRJTktFUlBPUC0xNjA1IGdyZW1saW4tY29uc29sZSAzLjIuMyAtZSBjYW4gbm8gbG9uZ2VyIHRha2UgcGF0aHMgcmVsYXRpdmUgdG8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC04ODcgRmFzdE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gaGlkZXMgc3RhY2sgdHJhY2UgaW4gY2xpZW50IGNvZGUKKyogVElOS0VSUE9QLTkxOSBGZWF0dXJlcyBuZWVkcyB0byBzcGVjaWZ5IHdoZXRoZXIgMiB2ZXJ0ZXggcHJvcGVydGllcyB3aXRoIHNhbWUga2V5L3ZhbHVlIGlzIGFsbG93ZWQuCisqIFRJTktFUlBPUC05MzIgQWRkIGFiaWxpdHkgdG8gY2FuY2VsIHNjcmlwdCBleGVjdXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgR3JlbWxpbiBTZXJ2ZXIgU2Vzc2lvbgorKiBUSU5LRVJQT1AtMTI0OCBPcmRlckdsb2JhbFN0ZXAgc2hvdWxkIHVzZSBsb2NhbCBzdGFyIGdyYXBoIHRvIGNvbXB1dGUgc29ydHMsIHByaW9yIHRvIHJlZHVjdGlvbi4KKyogVElOS0VSUE9QLTEyNjEgU2lkZS1lZmZlY3QgZ3JvdXAoKS5ieSgpIGNhbid0IGhhbmRsZSB1c2VyLWRlZmluZWQgbWFwcworKiBUSU5LRVJQT1AtMTI5MiBUaW5rZXJHcmFwaENvbXB1dGVyIFZlcnRleFByb2dyYW1JbnRlcmNlcHRvcnMKKyogVElOS0VSUE9QLTEzNzIgSW1tdXRhYmxlUGF0aCBzaG91bGQgbm90IHVzZSBKYXZhIHJlY3Vyc2lvbiAoY2FsbCBzdGFja3MgYXJlIHdhY2spCisqIFRJTktFUlBPUC0xNDMzIEFkZCBzdGVwcyB0byBkZXYgZG9jcyB0byBoZWxwIGNvbW1pdHRlcnMgZ2V0IHRoZWlyIGtleXMgaW4gb3JkZXIKKyogVElOS0VSUE9QLTE0MzQgQmxvY2sgY2FsbHMgdG8gdHJhdmVyc2FsIHNpZGUtZWZmZWN0cyB1bnRpbCByZWFkIGlzIGNvbXBsZXRlCisqIFRJTktFUlBPUC0xNDcxIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5IHVzZSBoaWRkZW4gbWFya2VyIHRvIGF2b2lkIHJlcGVhdGVkIHJlY3Vyc2lvbi4KKyogVElOS0VSUE9QLTE0NzMgR2l2ZW4gUGF0aFJldHJhY3Rpb25TdHJhdGVneSwgUGF0aFByb2Nlc3NvclN0cmF0ZWd5IGNhbiBiZSBleHRlbmRlZCB0byBzdXBwb3J0IHBhcnRpYWwgd2hlcmUoKSBpbmxpbmluZy4KKyogVElOS0VSUE9QLTE0ODIgaGFzKHgpLmhhcyh5KSBjaGFpbnMgc2hvdWxkIGJlIGhhcyh4LmFuZCh5KSkKKyogVElOS0VSUE9QLTE0OTAgUHJvdmlkZXIgYSBGdXR1cmUgYmFzZWQgVHJhdmVyc2FsLmFzeW5jKEZ1bmN0aW9uPFRyYXZlcnNhbCxWPikgdGVybWluYWwgc3RlcAorKiBUSU5LRVJQT1AtMTUwMiBDaGFpbmVkIGhhcygpLXN0ZXBzIHNob3VsZCBzaW1wbHkgbGVmdC1hcHBlbmQgSGFzQ29udGFpbmVycyBpbiBHcmVtbGluLUphdmEuCisqIFRJTktFUlBPUC0xNTA3IFBpY2suYW55IGFuZCBQaWNrLm5vbmUgYXJlIG5vdCBpbiBHcmFwaFNPTiBvciBHcmVtbGluLVB5dGhvbgorKiBUSU5LRVJQT1AtMTUwOCBBZGQgY2hvb3NlKHByZWRpY2F0ZSx0cnVlVHJhdmVyc2FsKQorKiBUSU5LRVJQT1AtMTUyNyBEbyBub3Qgb3ZlcnJpZGUgcmVnaXN0ZXJlZCBzdHJhdGVnaWVzIGluIFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUKKyogVElOS0VSUE9QLTE1MzAgQ29uc2lzdGVudCB1c2Ugb2YgaW5zdGFuY2UoKQorKiBUSU5LRVJQT1AtMTUzOSBDcmVhdGUgYSBDb21wbGV4VHJhdmVyc2FsVGVzdCB3aXRoIGNyYXp5IG5lc3RlZCBnbmFybHkgdHJhdmVyc2Fscy4KKyogVElOS0VSUE9QLTE1NDIgQWRkIFBhdGguaXNFbXB0eSgpIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgorKiBUSU5LRVJQT1AtMTU2MiBNaWdyYXRlIFNjcmlwdEVuZ2luZS1yZWxhdGVkIGNvZGUgdG8gZ3JlbWxpbi1jb3JlCisqIFRJTktFUlBPUC0xNTcwIEJ1bXAgdG8gTmV0dHkgNC4wLjQyCisqIFRJTktFUlBPUC0xNTgyIFRyYXZlcnNhbE9wUHJvY2Vzc29yIGRvZXMgbm90IHN1cHBvcnQgY3VzdG9tIHNlcmlhbGl6ZXJzCisqIFRJTktFUlBPUC0xNTg0IEFkZCBncnlvIHNlcmlhbGl6ZXJzIHRvIHN1cHBvcnQgdHlwZXMgY292ZXJlZCBpbiBHcmFwaFNPTgorKiBUSU5LRVJQT1AtMTU4OCBBZGRlZCBUZXJtaW5hbCBTdGVwcyBzZWN0aW9uIHRvIHRoZSBkb2NzCisqIFRJTktFUlBPUC0xNTg5IFJlLUludHJvZHVjZSBDbG9zZWFibGVJdGVyYXRvcgorKiBUSU5LRVJQT1AtMTU5MCBDcmVhdGUgVGlua2VyV29ya2VyTWVtb3J5IGFuZCBQYXJ0aXRpb25lZCBWZXJ0aWNlcworKiBUSU5LRVJQT1AtMTYwMCBDb25zaXN0ZW50IHVzZSBvZiBiYXNlIDY0IGVuY29kZWQgYnl0ZXMgZm9yIFNBU0wgbmVnb3RpYXRpb24KKyogVElOS0VSUE9QLTE2MDIgU3VwcG9ydCBTU0wgY2xpZW50IGNlcnRpZmljYXRlIGF1dGhlbnRpY2F0aW9uCisqIFRJTktFUlBPUC0xNjA2IFJlZmFjdG9yIEdyb3VwU3RlcCB0byBub3QgaGF2ZSB0aGUgcmVkdWN0aW9uIHRyYXZlcnNhbCBpbmNsdWRlZCBpbiBpdHMgQmlPcGVyYXRvci4KKyogVElOS0VSUE9QLTE2MTAgRGVwcmVjYXRlIGdyZW1saW4tZ3Jvb3Z5LXRlc3QgcHJvdmlkZXIgYmFzZWQgdGVzdHMKKyogVElOS0VSUE9QLTE2MTcgQ3JlYXRlIGEgU2luZ2xlSXRlcmF0aW9uU3RyYXRlZ3kgd2hpY2ggd2lsbCBkbyBpdHMgYmVzdCB0byByZXdyaXRlIE9MQVAgdHJhdmVyc2FscyB0byBub3QgbWVzc2FnZSBwYXNzLgorCitbW3JlbGVhc2UtMy0yLTNdXQorPT09IFRpbmtlclBvcCAzLjIuMyAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE3LCAyMDE2KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS01LCAzLjEuNT4+LgorCisqIFJlc3RydWN0dXJlZCBHcmVtbGluLVB5dGhvbidzIEdyYXBoU09OIEkvTyBwYWNrYWdlIHRvIG1ha2UgaXQgZWFzaWVyIGZvciB1c2VycyB0byByZWdpc3RlciBzZXJpYWxpemVycy9kZXNlcmlhbGl6ZXJzLiAoKmJyZWFraW5nKikKKyogRml4ZWQgYSBidWcgd2l0aCBgVHJhdmVyc2FsT3BQcm9jZXNzb3JgIHRoYXQgd2FzIHJldHVybmluZyBhIGZpbmFsIHJlc3VsdCBwcmlvciB0byBjb21taXR0aW5nIHRoZSB0cmFuc2FjdGlvbi4KKyogRml4ZWQgYSBidWcgaW4gYENvbm5lY3RpdmVTdHJhdGVneWAgd2hlcmUgaW5maXggYW5kL29yIHdhcyBub3QgY29ycmVjdGx5IHJlYXNvbmluZyBvbiBgY2hvb3NlKClgIGBIYXNOZXh0U3RlcGAgaW5qZWN0aW9ucy4KKyogSW5jcmVhc2VkIHBlcmZvcm1hbmNlIG9mIGBDcmVkZW50aWFsR3JhcGhgIGF1dGhlbnRpY2F0aW9uLgorKiBSZW1vdmVkIEphdmEgOCBzdHJlYW0gdXNhZ2UgZnJvbSBgVHJhdmVyc2FsSGVscGVyYCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyogRml4ZWQgYSBidWcgaW4gYFJlcGVhdFN0ZXBgIHdoZXJlIGBlbWl0KCkuYXMoJ3gnKWAgd2Fzbid0IGFkZGluZyB0aGUgc3RlcCBsYWJlbHMgdG8gdGhlIGVtaXQtdHJhdmVyc2VyLgorKiBBZGRlZCBgR3JhcGhDb21wdXRpbmcuYXRNYXN0ZXIoYm9vbGVhbilgIHRvIGFsbG93IHN0ZXBzIHRvIGtub3cgd2hldGhlciB0aGV5IGFyZSBleGVjdXRpbmcgYXQgbWFzdGVyIG9yIGRpc3RyaWJ1dGVkIGF0IHdvcmtlcnMuCisqIEZpeGVkIGEgYnVnIGluIE9MQVAgd2hlcmUgYERlZHVwR2xvYmFsU3RlcGAgd2Fzbid0IGRlLWR1cGluZyBsb2NhbCBtYXN0ZXIgdHJhdmVyc2Vycy4KKyogQWRkZWQgYEhhc0NvbnRhaW5lckhvbGRlci5yZW1vdmVIYXNDb250YWluZXIoKWAtbWV0aG9kIHdpdGggZGVmYXVsdCBgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb25gIGltcGxlbWVudGF0aW9uLgorKiBgVHJhdmVyc2FsU291cmNlLndpdGhDb21wdXRlcigpYCBpcyBzaW1wbGlmaWVkIHRvIGFkZCBhIGBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lgLiBFYXNpZXIgZm9yIGxhbmd1YWdlIHZhcmlhbnRzLgorKiBGaXhlZCBhIGBTZXRgLCBgTGlzdGAsIGBNYXBgIGJ1ZyBpbiB0aGUgdmFyaW91cyBgVHJhbnNsYXRvcnNgIHdoZXJlIHN1Y2ggY29sbGVjdGlvbnMgd2VyZSBub3QgYmVpbmcgaW50ZXJuYWxseSB0cmFuc2xhdGVkLgorKiBGaXhlZCBhIGBCeXRlY29kZWAgYnVnIHdoZXJlIG5lc3RlZCBzdHJ1Y3R1cmVzIChtYXAsIGxpc3QsIHNldCkgd2VyZSBub3QgYmVpbmcgYW5hbHl6ZWQgZm9yIGJpbmRpbmdzIGFuZCBieXRlY29kZSBjb252ZXJzaW9ucy4KKyogRml4ZWQgYSBgU3RyaW5nYCBidWcgaW4gYEdyb292eVRyYW5zbGF0b3JgIGFuZCBgUHl0aG9uVHJhbnNsYXRvcmAgd2hlcmUgaWYgdGhlIHN0cmluZyBoYXMgZG91YmxlLXF1b3RlcyBpdCBub3cgdXNlcyAiIiIgIiIiLgorKiBBZGRlZCBhIGRlZmF1bHQgYFRyYXZlcnNhbFN0cmF0ZWd5LmdldENvbmZpZ3VyYXRpb24oKWAgd2hpY2ggcmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBuZWVkZWQgdG8gY29uc3RydWN0IHRoZSBzdHJhdGVneS4KKyogYENvbXB1dGVyYCBpbnN0YW5jZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCBgQ29tcHV0ZXIuY3JlYXRlKENvbmZpZ3VyYXRpb24pYCBhbmQgYWNjZXNzZWQgdmlhIGBDb21wdXRlci5nZXRDb25mKClgLgorKiBFdmVyeSBgVHJhdmVyc2FsU3RyYXRlZ3lgIGNhbiBiZSBjcmVhdGVkIHZpYSBhIGBDb25maWd1cmF0aW9uYCBhbmQgYSBzdGF0aWMgYE15U3RyYXRlZ3kuY3JlYXRlKENvbmZpZ3VyYXRpb24pYC4KKyogQWRkZWQgbGFuZ3VhZ2UtYWdub3N0aWMgYFRyYXZlcnNhbFN0cmF0ZWd5YCBzdXBwb3J0IGluIGBCeXRlY29kZWAuCisqIEFkZGVkIGBQYXJ0aXRpb25TdHJhdGVneS5CdWlsZGVyLnJlYWRQYXJ0aXRpb25zKClgIGFuZCBkZXByZWNhdGVkIGBQYXJ0aXRpb25TdHJhdGVneS5CdWlsZGVyLmFkZFBhcnRpdGlvbigpYC4KKyogQSBuZXcgdmVyc2lvbiBvZiBgTGF6eUJhcnJpZXJTdHJhdGVneWAgaGFzIGJlZW4gY3JlYXRlZCBhbmQgYWRkZWQgdG8gdGhlIGRlZmF1bHQgc3RyYXRlZ2llcy4KKyogYEZpbHRlclJhbmtTdHJhdGVneWAgbm93IHByb3BhZ2F0ZXMgbGFiZWxzICJyaWdodCIgb3ZlciBub24tYFNjb3BpbmdgIGZpbHRlcnMuCisqIEZpeGVkIGEgYnVnIGluIGBDb25uZWN0aXZlUGAgd2hlcmUgbmVzdGVkIGVxdWl2YWxlbnQgY29ubmVjdGl2ZXMgc2hvdWxkIGJlIGlubGluZWQuCisqIEZpeGVkIGEgYnVnIGluIGBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneWAgd2hlcmUgYFRyZWVTdGVwYCB0cmF2ZXJzYWxzIHdlcmUgYWxsb3dlZC4KKyogRml4ZWQgYSBlbmQtc3RlcCBsYWJlbCBidWcgaW4gYE1hdGNoUHJlZGljYXRlU3RyYXRlZ3lgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgTWF0Y2hQcmVkaWNhdGVTdHJhdGVneWAgd2hlcmUgaW5saW5lZCB0cmF2ZXJzYWxzIGRpZCBub3QgaGF2ZSBzdHJhdGVnaWVzIGFwcGxpZWQgdG8gaXQuCisqIEZpeGVkIGEgYnVnIGluIGBSZXBlYXRVbnJvbGxTdHJhdGVneWAgd2hlcmUgaW5saW5lZCB0cmF2ZXJzYWwgZGlkIG5vdCBoYXZlIHN0cmF0ZWdpZXMgYXBwbGllZCB0byBpdC4KKyogRml4ZWQgcGFkZGluZyBvZiBwcm9tcHQgaW4gR3JlbWxpbiBDb25zb2xlIHdoZW4gdGhlIG51bWJlciBvZiBsaW5lcyB3ZW50IGJleW9uZCBhIHNpbmdsZSBkaWdpdC4KKyogRml4ZWQgR3JhcGhTT04gMi4wIG5hbWVzcGFjZSBmb3IgYFRpbmtlckdyYXBoYCB0byBiZSAidGlua2VyIiBpbnN0ZWFkIG9mICJncmVtbGluIi4KKyogRHJvcHBlZCBzZXJpYWxpemF0aW9uIHN1cHBvcnQgaW4gR3JhcGhTT04gMi4wIGZvciBgQ2FsZW5kYXJgLCBgVGltZVpvbmVgLCBhbmQgYFRpbWVzdGFtcGAuCisqIEFkZGVkIGBUcmF2ZXJzYWxIZWxwZXIuY29weUxhYmVscygpYCBmb3IgY29weWluZyAob3IgbW92aW5nKSBsYWJlbHMgZm9ybSBvbmUgc3RlcCB0byBhbm90aGVyLgorKiBBZGRlZCBgVHJhdmVyc2FsSGVscGVyLmFwcGx5U2luZ2xlTGV2ZWxTdHJhdGVnaWVzKClgIHdoaWNoIHdpbGwgYXBwbHkgYSBzdWJzZXQgb2Ygc3RyYXRlZ2llcyBidXQgbm90IHdhbGsgdGhlIGNoaWxkIHRyZWUuCisqIEFkZGVkIHRoZSBjb25jZXB0IHRoYXQgaGlkZGVuIGxhYmVscyB1c2luZyBkdXJpbmcgdHJhdmVyc2FsIGNvbXBpbGF0aW9uIGFyZSByZW1vdmVkIGF0IHRoZSBlbmQgZHVyaW5nIGBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5YC4gKCpicmVha2luZyopCisqIEFkZGVkIGBJbmxpbmVGaWx0ZXJTdHJhdGVneWAgd2hpY2ggd2lsbCBkZXRlcm1pbmUgaWYgdmFyaW91cyBgVHJhdmVyc2FsUGFyZW50YCBjaGlsZHJlbiBhcmUgZmlsdGVycyBhbmQgaWYgc28sIGlubGluZSB0aGVtLgorKiBSZW1vdmVkIGBJZGVudGl0eVJlbW92YWxTdHJhdGVneWAgZnJvbSB0aGUgZGVmYXVsdCBsaXN0aW5nIGFzIGl0cyBub3Qgd29ydGggdGhlIGNsb2NrIGN5Y2xlcy4KKyogUmVtb3ZlZCB0aGUgIiEiIHN5bWJvbCBpbiBgTm90U3RlcC50b1N0cmluZygpYCBhcyBpdCBpcyBjb25mdXNpbmcgYW5kIHRoZSBgTm90U3RlcGAtbmFtZSBpcyBzdWZmaWNpZW50LgorKiBGaXhlZCBhIGJ1ZyBpbiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgKE9MQVApIGFyb3VuZCBvcmRlcmluZyBhbmQgY29ubmVjdGl2ZXMgKGkuZS4gYGFuZCgpYCBhbmQgYG9yKClgKS4KKyogQWRkZWQgYEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0LmNoZWNrT3JkZXJlZFJlc3VsdHMoKWAgdG8gbWFrZSB0ZXN0aW5nIG9yZGVyZWQgcmVzdWx0cyBlYXNpZXIuCisqIGBBYnN0cmFjdExhbWJkYVRyYXZlcnNhbGAgbm93IHN1cHBvcnRzIGEgYGJ5cGFzc1RyYXZlcnNhbGAgd2hlcmUgaXQgaXMgcG9zc2libGUgZm9yIHN0cmF0ZWdpZXMgdG8gcmVkZWZpbmUgc3VjaCBsYW1iZGEgdHJhdmVyc2Fscy4KKyogQWRkZWQgYW4gaW50ZXJuYWwgdXRpbGl0eSBgQ2xhc3NGaWx0ZXJTdGVwYCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSB0cmF2ZXJzZXIgb2JqZWN0J3MgY2xhc3MgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkIGNsYXNzLgorKiBgQ29ubmVjdGl2ZVN0ZXBgIGV4dGVuZHMgYEZpbHRlclN0ZXBgIGFuZCB0aHVzLCBpcyBtb3JlIGFwcHJvcHJpYXRlbHkgY2F0ZWdvcml6ZWQgaW4gdGhlIHN0ZXAgaGllcmFyY2h5LgorKiBgUHJvcGVydHlNYXBTdGVwYCBzdXBwb3J0cyBhIHByb3ZpZGVkIHRyYXZlcnNhbCBmb3IgYWNjZXNzaW5nIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBlbGVtZW50LiAoKmJyZWFraW5nKikKKyogYFN1YmdyYXBoU3RyYXRlZ3lgIG5vdyBzdXBwb3J0cyB2ZXJ0ZXggcHJvcGVydHkgZmlsdGVyaW5nLgorKiBGaXhlZCBhIGJ1ZyBpbiBHcmVtbGluLVB5dGhvbiBgUGAgd2hlcmUgcHJlZGljYXRlcyByZXZlcnNlZCB0aGUgb3JkZXIgb2YgdGhlIHByZWRpY2F0ZXMuCisqIEFkZGVkIHRlc3RzIHRvIGBEZWR1cFRlc3RgIGZvciB0aGUgYGRlZHVwKFNjb3BlLCBTdHJpbmcuLi4pYCBvdmVybG9hZC4KKyogQWRkZWQgbW9yZSBkZXRhaWxlZCByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBmb3IgSU8gZm9ybWF0cy4KKyogRml4ZWQgYSBidWcgaW4gc2VyaWFsaXphdGlvbiBvZiBgTGFtYmRhYCBpbnN0YW5jZXMgaW4gR3JhcGhTT04sIHdoaWNoIHByZXZlbnRlZCB0aGVpciB1c2UgaW4gcmVtb3RlIHRyYXZlcnNhbHMuCisqIEZpeGVkIGEgbmFtaW5nIGJ1ZyBpbiBHcmVtbGluLVB5dGhvbiB3aGVyZSBgUC5fYW5kYCBhbmQgYFAuX29yYCBzaG91bGQgYmUgYFAuYW5kX2AgYW5kIGBQLm9yX2AuICgqYnJlYWtpbmcqKQorKiBgd2hlcmUoKWAgcHJlZGljYXRlLWJhc2VkIHN0ZXBzIG5vdyBzdXBwb3J0IGBieSgpYC1tb2R1bGF0aW9uLgorKiBBZGRlZCBHcnlvIHNlcmlhbGl6YXRpb24gZm9yIGBCeXRlY29kZWAuCisqIE1vdmVkIHV0aWxpdHktYmFzZWQgc2VyaWFsaXplcnMgdG8gYFV0aWxTZXJpYWxpemVyc2AgZm9yIEdyeW8gLSB0aGVzZSBjbGFzc2VzIHdlcmUgcHJpdmF0ZSBhbmQgaGVuY2UgdGhpcyBjaGFuZ2UgaXMgbm9uLWJyZWFraW5nLgorKiBgVHJhdmVyc2FsUmluZ2AgcmV0dXJucyBhIGBudWxsYCBpZiBpdCBkb2VzIG5vdCBjb250YWluIHRyYXZlcnNhbHMgKHByZXZpb3VzbHkgYElkZW50aXR5VHJhdmVyc2FsYCkuCisqIERlcHJlY2F0ZWQgYEdyYXBoLkV4Y2VwdGlvbnMuZWxlbWVudE5vdEZvdW5kRXhjZXB0aW9uKClgIGFzIGl0IHdhcyBub3QgdXNlZCBpbiB0aGUgY29kZSBiYXNlIG91dHNpZGUgb2YgdGhlIHRlc3Qgc3VpdGUuCisqIEZpeGVkIGEgYEphdmFUcmFuc2xhdG9yYCBidWcgd2hlcmUgYEJ5dGVjb2RlYCBpbnN0cnVjdGlvbnMgd2VyZSBiZWluZyBtdXRhdGVkIGR1cmluZyB0cmFuc2xhdGlvbi4KKyogQWRkZWQgYFBhdGhgIHRvIEdyZW1saW4tUHl0aG9uIHdpdGggcmVzcGVjdGl2ZSBHcmFwaFNPTiAyLjAgZGVzZXJpYWxpemVyLgorKiBgVHJhdmVyc2FsYCBhbmQgYFRyYXZlcnNhbFNvdXJjZWAgbm93IGltcGxlbWVudCBgQXV0b0Nsb3NlYWJsZWAuCisqIEFkZGVkICJrZWVwLWFsaXZlIiBmdW5jdGlvbmFsaXR5IHRvIHRoZSBKYXZhIGRyaXZlciwgd2hpY2ggd2lsbCBzZW5kIGEgaGVhcnRiZWF0IHRvIHRoZSBzZXJ2ZXIgd2hlbiBub3JtYWwgcmVxdWVzdCBhY3Rpdml0eSBvbiBhIGNvbm5lY3Rpb24gc3RvcHMgZm9yIGEgcGVyaW9kIG9mIHRpbWUuCisqIFJlbmFtZWQgdGhlIGBlbXB0eS5yZXN1bHQuaW5kaWNhdG9yYCBwcmVmZXJlbmNlIHRvIGByZXN1bHQuaW5kaWNhdG9yLm51bGxgIGluIEdyZW1saW4gQ29uc29sZQorKiBJZiBgcmVzdWx0LmluZGljYXRvci5udWxsYCBpcyBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nLCB0aGVuIG5vICJyZXN1bHQgbGluZSIgaXMgcHJpbnRlZCBpbiBHcmVtbGluIENvbnNvbGUuCisqIERlcHJlY2F0ZWQgYHJlY29ubmVjdEluaXRpYWxEZWxheWAgb24gdGhlIEphdmEgZHJpdmVyLgorKiBBZGRlZCBzb21lIHZhbGlkYXRpb25zIHRvIGBDbHVzdGVyYCBpbnN0YW5jZSBidWlsZGluZy4KKyogUHJvZHVjZWQgYmV0dGVyIGVycm9ycyBpbiBgcmVhZEdyYXBoYCBvZiBgR3J5b1JlYWRlcmAgYW5kIGBHcmFwaFNPTlJlYWRlcmAgaWYgYSBgVmVydGV4YCBjYW5ub3QgYmUgZm91bmQgaW4gdGhlIGNhY2hlIG9uIGVkZ2UgbG9hZGluZy4KKyogVmVydGV4UHJvZ3JhbXMgY2FuIG5vdyBkZWNsYXJlIHRyYXZlcnNlciByZXF1aXJlbWVudHMsIGUuZy4gdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIHBhdGggd2hlbiB1c2VkIHdpdGggYC5wcm9ncmFtKClgLgorKiBOZXcgYnVpbGQgb3B0aW9ucyBmb3IgYGdyZW1saW4tcHl0aG9uYCB3aGVyZSBgLURnbHZQeXRob25gIGlzIG5vIGxvbmdlciByZXF1aXJlZC4KKyogQWRkZWQgbWlzc2luZyBgSW5ldEFkZHJlc3NgIHRvIEdyYXBoU09OIGV4dGVuc2lvbiBtb2R1bGUuCisqIEFkZGVkIG5ldyByZWNpcGUgZm9yICJQYWdpbmF0aW9uIi4KKyogQWRkZWQgbmV3IHJlY2lwZSBmb3IgIlJlY29tbWVuZGF0aW9uIi4KKyogQWRkZWQgZnVuY3Rpb25hbGl0eSB0byBHcmVtbGluLVNlcnZlciBSRVNUIGVuZHBvaW50IHRvIGZvcndhcmQgRXhjZXB0aW9uIE1lc3NhZ2VzIGFuZCBDbGFzcyBpbiBIVFRQIFJlc3BvbnNlCisqIEdyZW1saW4gU2VydmVyIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgbm93IHJldHVybnMgY29uZmlybWF0aW9uIHVwb24gYE9wYCBgY2xvc2VgLgorKiBBZGRlZCBgY2xvc2VgIG1ldGhvZCBKYXZhIGRyaXZlciBhbmQgUHl0aG9uIGRyaXZlciBgRHJpdmVyUmVtb3RlVHJhdmVyc2FsU2lkZUVmZmVjdHNgLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTQyMyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIHRyZWUgc3RlcHMKKyogVElOS0VSUE9QLTE0NDAgZzpQYXRoIG5lZWRzIGEgR3JhcGhTT04gZGVzZXJpYWxpemVyIGluIEdyZW1saW4tUHl0aG9uCisqIFRJTktFUlBPUC0xNDU3IEdyb292eSBMYW1iZGFzIGZvciByZW1vdGUgdHJhdmVyc2FscyBub3Qgc2VyaWFsaXphYmxlCisqIFRJTktFUlBPUC0xNDU4IEdyZW1saW4gU2VydmVyIGRvZXNuJ3QgcmV0dXJuIGNvbmZpcm1hdGlvbiB1cG9uIFRyYXZlcnNhbCBPcFByb2Nlc3NvciAiY2xvc2UiIG9wCisqIFRJTktFUlBPUC0xNDY2IFBlZXJQcmVzc3VyZVRlc3QgaGFzIGJlZW4gZmFpbGluZyByZWNlbnRseQorKiBUSU5LRVJQT1AtMTQ3MiBSZXBlYXRVbnJvbGxTdHJhdGVneSBkb2VzIG5vdCBzZW1pLWNvbXBpbGUgaW5saW5lZCByZXBlYXQgdHJhdmVyc2FsCisqIFRJTktFUlBPUC0xNDc2IFRpbmtlckdyYXBoIGRvZXMgbm90IGdldCB0eXBlZCB3aXRoIHRoZSByaWdodCB0eXBlIG5hbWUgaW4gR3JhcGhTT04KKyogVElOS0VSUE9QLTE0OTUgR2xvYmFsIGxpc3QgZGVkdXBsaWNhdGlvbiBkb2Vzbid0IHdvcmsgaW4gT0xBUAorKiBUSU5LRVJQT1AtMTUwMCBhbmQvb3IgaW5maXggYW5kIGNob29zZSgpIGRvIG5vdCB3b3JrIGNvcnJlY3RseS4KKyogVElOS0VSUE9QLTE1MTEgUmVtb3RlIGNsaWVudCBhZGRWLCBWKCkKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtNzkwIEltcGxlbWVudCBBdXRvQ2xvc2VhYmxlIG9uIFRyYXZlcnNhbFNvdXJjZQorKiBUSU5LRVJQT1AtOTQ0IERlcHJlY2F0ZSBHcmFwaC5FeGNlcHRpb25zLmVsZW1lbnROb3RGb3VuZAorKiBUSU5LRVJQT1AtMTE4OSBTaW1wbGVBdXRoZW50aWNhdG9yIG92ZXIgSHR0cENoYW5uZWxpemVyIG1ha2VzIEdyZW1saW4gU2VydmVyIHByZXR0eSBzbG93IGFuZCBjb25zdW1lcyBtb3JlIENQVQorKiBUSU5LRVJQT1AtMTI0OSBHcmVtbGluIGRyaXZlciB0byBwZXJpb2RpY2FsbHkgaXNzdWUgcGluZyAvIGhlYXJ0YmVhdCB0byBncmVtbGluIHNlcnZlcgorKiBUSU5LRVJQT1AtMTI4MCBWZXJ0ZXhQcm9ncmFtcyBzaG91bGQgZGVjbGFyZSB0cmF2ZXJzZXIgcmVxdWlyZW1lbnRzCisqIFRJTktFUlBPUC0xMzMwIGJ5KCktbW9kdWxhdGlvbiBmb3Igd2hlcmUoKQorKiBUSU5LRVJQT1AtMTQwOSBNYWtlIHRoZSAibnVsbCIgcmV0dXJuIGluIHRoZSBncmVtbGluIGNvbnNvbGUgaW50byBzb21ldGhpbmcgbW9yZSB1bmRlcnN0YW5kYWJsZSAgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNDMxIERvY3VtZW50YXRpb24gZ2VuZXJhdGlvbiByZXF1aXJlcyB0ZXN0cyB0byBleGVjdXRlIG9uIGdyZW1saW4tcHl0aG9uCisqIFRJTktFUlBPUC0xNDM3IEFkZCB0ZXN0cyBmb3IgZGVkdXAoU2NvcGUpIGluIERlZHVwVGVzdAorKiBUSU5LRVJQT1AtMTQ0NCBCZW5jaG1hcmsgYnl0ZWNvZGUtPlRyYXZlcnNhbCBjcmVhdGlvbiBhbmQgaW1wbGVtZW50IEdyZW1saW5TZXJ2ZXIgY2FjaGUgaWYgbmVjZXNzYXJ5LgorKiBUSU5LRVJQT1AtMTQ0OCBncmVtbGluLXB5dGhvbiBzaG91bGQgYmUgUHl0aG9uIDIvMyBjb21wYXRpYmxlCisqIFRJTktFUlBPUC0xNDQ5IFN0cmVhbWxpbmUgZ3JlbWxpbi1weXRob24gYnVpbGQKKyogVElOS0VSUE9QLTE0NTUgUHJvdmlkZSBTdHJpbmctYmFzZWQgd2l0aFN0cmF0ZWd5KCkvd2l0aG91dFN0cmF0ZWd5KCkgZm9yIGxhbmd1YWdlIHZhcmlhbnQgdXNhZ2UKKyogVElOS0VSUE9QLTE0NTYgU3VwcG9ydCBTdWJncmFwaFN0cmF0ZWd5LnZlcnRleFByb3BlcnRpZXMoKS4KKyogVElOS0VSUE9QLTE0NjAgRGVwcmVjYXRlIHJlY29ubmVjdEluaXRpYWxEZWxheSBpbiBKYXZhIGRyaXZlcgorKiBUSU5LRVJQT1AtMTQ2NCBHcnlvIFNlcmlhbGl6YXRpb24gZm9yIEJ5dGVjb2RlCisqIFRJTktFUlBPUC0xNDY5IEdldCByaWQgb2YgU3RyZWFtLXVzYWdlIGluIFRyYXZlcnNhbEhlbHBlcgorKiBUSU5LRVJQT1AtMTQ3MCBJbmxpbmVGaWx0ZXJTdHJhdGVneSBzaG91bGQgdHJ5IGFuZCBQLm9yKCkgaGFzKCkgY2hpbGRyZW4gaW4gT3JTdGVwcy4KKyogVElOS0VSUE9QLTE0ODYgSW1wcm92ZSBBUEkgb2YgUmVtb3RlQ29ubmVjdGlvbgorKiBUSU5LRVJQT1AtMTQ4NyBSZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiBmb3IgSU8KKyogVElOS0VSUE9QLTE0ODggTWFrZSBMYXp5QmFycmllclN0cmF0ZWd5IHBhcnQgb2YgdGhlIGRlZmF1bHQgVHJhdmVyc2FsU3RyYXRlZ2llcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE0OTIgUmVtb3RlU3RyYXRlZ3kgb3IgdGhlIFJlbW90ZUNvbm5lY3Rpb24gc2hvdWxkIGFwcGVuZCBhIGxhenkgYmFycmllcigpLgorKiBUSU5LRVJQT1AtMTQyMyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSBzaG91bGQgYmUgZGlzYWJsZWQgZm9yIHRyZWUgc3RlcHMKKyogVElOS0VSUE9QLTE0NDAgZzpQYXRoIG5lZWRzIGEgR3JhcGhTT04gZGVzZXJpYWxpemVyIGluIEdyZW1saW4tUHl0aG9uCisqIFRJTktFUlBPUC0xNDU3IEdyb292eSBMYW1iZGFzIGZvciByZW1vdGUgdHJhdmVyc2FscyBub3Qgc2VyaWFsaXphYmxlCisqIFRJTktFUlBPUC0xNDU4IEdyZW1saW4gU2VydmVyIGRvZXNuJ3QgcmV0dXJuIGNvbmZpcm1hdGlvbiB1cG9uIFRyYXZlcnNhbCBPcFByb2Nlc3NvciAiY2xvc2UiIG9wCisqIFRJTktFUlBPUC0xNDY2IFBlZXJQcmVzc3VyZVRlc3QgaGFzIGJlZW4gZmFpbGluZyByZWNlbnRseQorKiBUSU5LRVJQT1AtMTQ3MiBSZXBlYXRVbnJvbGxTdHJhdGVneSBkb2VzIG5vdCBzZW1pLWNvbXBpbGUgaW5saW5lZCByZXBlYXQgdHJhdmVyc2FsCisqIFRJTktFUlBPUC0xNDk1IEdsb2JhbCBsaXN0IGRlZHVwbGljYXRpb24gZG9lc24ndCB3b3JrIGluIE9MQVAKKyogVElOS0VSUE9QLTE1MDAgYW5kL29yIGluZml4IGFuZCBjaG9vc2UoKSBkbyBub3Qgd29yayBjb3JyZWN0bHkuCisqIFRJTktFUlBPUC0xNTExIFJlbW90ZSBjbGllbnQgYWRkViwgVigpCisKK1tbcmVsZWFzZS0zLTItMl1dCis9PT0gVGlua2VyUG9wIDMuMi4yIChSZWxlYXNlIERhdGU6IFNlcHRlbWJlciA2LCAyMDE2KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS00LCAzLjEuND4+LgorCisqIEluY2x1ZGVkIEdyYXBoU09OIGFzIGEgZGVmYXVsdCBzZXJpYWxpemVyIChpbiBhZGRpdGlvbiB0byBHcnlvLCB3aGljaCB3YXMgYWxyZWFkeSBwcmVzZW50KSBpbiBHcmVtbGluIFNlcnZlciBpZiBub25lIGFyZSBkZWZpbmVkLgorKiBBZGRlZCBgZ3JlbWxpbi1weXRob25gIHBhY2thZ2UgYXMgYSBHcmVtbGluIGxhbmd1YWdlIHZhcmlhbnQgaW4gUHl0aG9uLgorKiBBZGRlZCBgQnl0ZWNvZGVgIHdoaWNoIHNwZWNpZmllcyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBhcmd1bWVudHMgdXNlZCB0byBjb25zdHJ1Y3QgYSB0cmF2ZXJzYWwuCisqIENyZWF0ZWQgYW4gZXhwZXJpbWVudGFsIEdyYXBoU09OIHJlcHJlc2VudGF0aW9uIG9mIGBCeXRlY29kZWAgdGhhdCB3aWxsIGJlIGNvbnNpZGVyZWQgdW5zdGFibGUgdW50aWwgMy4zLjAuCisqIEFkZGVkIGBUcmFuc2xhdG9yYCB3aGljaCBhbGxvd3MgZnJvbSB0aGUgdHJhbnNsYXRpb24gb2YgYEJ5dGVjb2RlYCBpbnRvIHNvbWUgb3RoZXIgZm9ybSAoZS5nLiBzY3JpcHQsIGBUcmF2ZXJzYWxgLCBldGMuKS4KKyogQWRkZWQgYEphdmFUcmFuc2xhdG9yYCwgYEdyb292eVRyYW5zbGF0b3JgLCBgUHl0aG9uVHJhbnNsYXRvcmAsIGFuZCBgSnl0aG9uVHJhbnNsYXRvcmAgZm9yIHRyYW5zbGF0aW5nIGBCeXRlY29kZWAgYWNjb3JkaW5nbHkuCisqIEFkZGVkIGBUcmFuc2xhdGlvblN0cmF0ZWd5YCB0byBgZ3JlbWxpbi10ZXN0YCBzbyB0cmFuc2xhdG9ycyBjYW4gYmUgdGVzdGVkIGFnYWluc3QgdGhlIHByb2Nlc3MgdGVzdCBzdWl0ZS4KKyogQWRkZWQgYFRyYXZlcnNhbC5BZG1pbi5uZXh0VHJhdmVyc2VyKClgIHRvIGdldCB0aGUgbmV4dCByZXN1bHQgaW4gYnVsay1mb3JtICh3LyBkZWZhdWx0IGltcGxlbWVudGF0aW9uKS4KKyogQWRkZWQgYFRyYXZlcnNhbFNvdXJjZS5nZXRBbm9ueW1vdXNUcmF2ZXJzYWxDbGFzcygpYCAody8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbikuCisqIEFkZGVkIGBHcmVtbGluU2NyaXB0RW5naW5lYCBpbnRlcmZhY2Ugd2hpY2ggc3BlY2lmaWVzIGEgYGV2YWwoQnl0ZWNvZGUsIEJpbmRpbmdzKWAgbWV0aG9kLgorKiBEZXByZWNhdGVkIGBSZW1vdGVHcmFwaGAgaW4gZmF2b3Igb2YgYFRyYXZlcnNhbFNvdXJjZS53aXRoUmVtb3RlKClgIGFzIGl0IGlzIG1vcmUgdGVjaG5pY2FsbHkgY29ycmVjdCB0byB0aWUgYSByZW1vdGUgdHJhdmVyc2FsIHRvIHRoZSBgVHJhdmVyc2FsU291cmNlYCB0aGFuIGEgYEdyYXBoYCBpbnN0YW5jZS4KKyogYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIGltcGxlbWVudHMgYEdyZW1saW5TY3JpcHRFbmdpbmVgLgorKiBBZGRlZCBgR3JlbWxpbkp5dGhvblNjcmlwdEVuZ2luZWAgd2hpY2ggaW1wbGVtZW50cyBgR3JlbWxpblNjcmlwdEVuZ2luZWAuCisqIFJlbW92ZWQgc3VwcG9ydCBmb3Igc3VibWl0dGluZyBhIEphdmEgc2VyaWFsaXplZCBgVHJhdmVyc2FsYCB0byBHcmVtbGluIFNlcnZlci4KKyogUmVtb3ZlZCBhIGxhcmdlbHkgaW50ZXJuYWwgZmVhdHVyZSB0aGF0IHN1cHBvcnRlZCBhdXRvbWF0aWMgdW5yb2xsaW5nIG9mIHRyYXZlcnNlcnMgaW4gdGhlIEdyZW1saW4gRHJpdmVyLgorKiBNYWRlIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IGluaXRpYWxpemUgYE9wUHJvY2Vzc29yYCBpbXBsZW1lbnRhdGlvbnMgd2l0aCBzZXJ2ZXIgYFNldHRpbmdzYC4KKyogSW5jbHVkZWQgR3JhcGhTT04gYXMgYSBkZWZhdWx0IHNlcmlhbGl6ZXIgKGluIGFkZGl0aW9uIHRvIEdyeW8sIHdoaWNoIHdhcyBhbHJlYWR5IHByZXNlbnQpIGluIEdyZW1saW4gU2VydmVyIGlmIG5vbmUgYXJlIGRlZmluZWQKKyogSW50cm9kdWNlZCBHcmFwaFNPTiAyLjAuCisqIERlcHJlY2F0ZWQgYGVtYmVkVHlwZXNgIG9uIHRoZSBidWlsZGVyIGZvciBgR3JhcGhTT05NYXBwZXJgLgorKiBCdW1wZWQgdG8gTmV0dHkgNC4wLjQwLmZpbmFsLgorKiBEZWZhdWx0ZWQgdGhlIGBncmVtbGluUG9vbGAgc2V0dGluZyBpbiBHcmVtbGluIFNlcnZlciB0byBiZSB6ZXJvLCB3aGljaCB3aWxsIGluc3RydWN0cyBpdCB0byB1c2UgYFJ1bnRpbWUuYXZhaWxhYmxlUHJvY2Vzc29ycygpYCBmb3IgdGhhdCBzZXR0aW5ncy4KKyogQ2hhbmdlZCBzY29wZSBvZiBsb2c0aiBkZXBlbmRlbmNpZXMgc28gdGhhdCB0aGV5IHdvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXN0cyBhbmQgdGhlIGJpbmFyeSBkaXN0cmlidXRpb25zIG9mIEdyZW1saW4gQ29uc29sZSBhbmQgU2VydmVyLgorKiBEZXByZWNhdGVkIGBJby5CdWlsZGVyLnJlZ2lzdHJ5KClgIGluIGZhdm9yIG9mIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGBJby5CdWlsZGVyLm9uTWFwcGVyKClgLgorKiBBZGRlZCBuZXcgcmVjaXBlIGZvciAiVHJhdmVyc2FsIEluZHVjZWQgVmFsdWVzIi4KKyogRml4ZWQgYSBwb3RlbnRpYWwgbGVhayBvZiBhIGBSZWZlcmVuY2VDb3VudGVkYCByZXNvdXJjZSBpbiBHcmVtbGluIFNlcnZlci4KKyogQWRkZWQgY2xhc3MgcmVnaXN0cmF0aW9ucyBmb3IgYE1hcC5FbnRyeWAgaW1wbGVtZW50YXRpb25zIHRvIGBHcnlvTWFwcGVyYC4KKyogQWRkZWQgbWV0aG9kcyB0byByZXRyaWV2ZSBgQ2x1c3RlcmAgc2V0dGluZ3MgaW4gYGdyZW1saW4tZHJpdmVyYC4KKyogRml4ZWQgYSBzZXZlcmUgYnVnIGluIGBTdWJncmFwaFN0cmF0ZWd5YC4KKyogRGVwcmVjYXRlZCBgU3ViZ3JhcGhTdHJhdGVneS5CdWlsZGVyLnZlcnRleENyaXRlcmlvbigpL2VkZ2VDcml0ZXJpb24oKWAgaW4gZmF2b3Igb2YgYHZlcnRpY2VzKCkvZWRnZXMoKWAuCisqIEZpeGVkIGEgc21hbGwgYnVnIGluIGBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5YCB0aGF0IGNhdXNlZCB2ZXJpZmljYXRpb24gdG8gZmFpbCB3aGVuIGB3aXRoUGF0aGAgd2FzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgUHJvZmlsZVN0ZXBgLgorKiBBZGRlZCBjb2xvciBwcmVmZXJlbmNlcworKiBBZGRlZCBpbnB1dCwgcmVzdWx0IHByb21wdCBwcmVmZXJlbmNlcworKiBBZGRlZCBtdWx0aS1saW5lIGluZGljYXRvciBpbiBHcmVtbGluIENvbnNvbGUKKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTgxMCBzdG9yZSBub3QgdmlzaWJsZQorKiBUSU5LRVJQT1AtMTE1MSBzbGY0ai1sb2c0ajEyIC8gbG9nNGogaXMgb25seSByZXF1aXJlZCBmb3IgdGVzdGluZyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEzODMgcHVibGlzaC1kb2NzLnNoIG1pZ2h0IHB1Ymxpc2ggdG8gY3VycmVudCB0b28gZWFybHkKKyogVElOS0VSUE9QLTEzOTAgSWRlbnRpdHlSZW1vdmVTdHJhdGVneVRlc3QgZmFpbHMgcmFuZG9tbHkKKyogVElOS0VSUE9QLTE0MDAgU3ViZ3JhcGhTdHJhdGVneSBpbnRyb2R1Y2VzIGluZmluaXRlIHJlY3Vyc2lvbiBpZiBmaWx0ZXIgaGFzIFZlcnRleC9FZGdlIHN0ZXBzLgorKiBUSU5LRVJQT1AtMTQwNSBwcm9maWxlKCkgZG9lc24ndCBsaWtlIHdpdGhQYXRoKCkKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTAzNyBHcmVtbGluIHNoZWxsIG91dHB1dCBjb2xvcmluZworKiBUSU5LRVJQT1AtMTIyNiBHcmVtbGluIENvbnNvbGUgc2hvdWxkIDpjbGVhciBhdXRvbWFnaWNhbGx5IGFmdGVyICJEaXNwbGF5IHN0YWNrIHRyYWNlLiIKKyogVElOS0VSUE9QLTEyMzAgU2VyaWFsaXNpbmcgbGFtYmRhcyBmb3IgUmVtb3RlR3JhcGgKKyogVElOS0VSUE9QLTEyNzQgR3JhcGhTT04gVmVyc2lvbiAyLjAKKyogVElOS0VSUE9QLTEyNzggSW1wbGVtZW50IEdyZW1saW4tUHl0aG9uIGFuZCBnZW5lcmFsIHB1cnBvc2UgbGFuZ3VhZ2UgdmFyaWFudCB0ZXN0IGluZnJhc3RydWN0dXJlCisqIFRJTktFUlBPUC0xMjg1IEdyZW1saW5lIGNvbnNvbGUgZG9lcyBub3QgZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIG11bHRpLWxpbmUgYW5kIHNpbmdsZS1saW5lIGlucHV0CisqIFRJTktFUlBPUC0xMzM0IFByb3ZpZGUgYSB3YXkgdG8gcHVsbCBncmVtbGluLmRyaXZlci5DbHVzdGVyIGNvbm5lY3Rpb24gc2V0dGluZ3MuCisqIFRJTktFUlBPUC0xMzQ3IFJlbW90ZUNvbm5lY3Rpb24gbmVlZHMgdG8gcHJvdmlkZSBUcmF2ZXJzYWxTaWRlRWZmZWN0cy4gKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMzczIERlZmF1bHQgZ3JlbWxpblBvb2wgdG8gbnVtYmVyIG9mIGNvcmVzCisqIFRJTktFUlBPUC0xMzg2IEJ1bXAgdG8gTmV0dHkgNC4wLjQwLkZpbmFsCisqIFRJTktFUlBPUC0xMzkyIFJlbW92ZSBzdXBwb3J0IGZvciBqYXZhIHNlcmlhbGl6ZWQgVHJhdmVyc2FsICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTM5NCBGaXggbGlua3MgaW4gUmVjaXBlcyBkb2MKKyogVElOS0VSUE9QLTEzOTYgVHJhdmVyc2FsIEluZHVjZWQgVmFsdWVzIFJlY2lwZQorKiBUSU5LRVJQT1AtMTQwMiBJbXBvc3NpYmxlIGZvciBncmFwaCBpbXBsZW1lbnRhdGlvbnMgdG8gcHJvdmlkZSBhIGNsYXNzIHJlc29sdmVyIGZvciBHcnlvIElPCisqIFRJTktFUlBPUC0xNDA3IERlZmF1bHQgc2VyaWFsaXplcnMgZm9yIEdyZW1saW4gU2VydmVyCisqIFRJTktFUlBPUC0xNDI1IFVzZSB0cmFpbGluZyB1bmRlcnNjb3JlcyBpbiBncmVtbGluLXB5dGhvbgorCitbW3JlbGVhc2UtMy0yLTFdXQorPT09IFRpbmtlclBvcCAzLjIuMSAoUmVsZWFzZSBEYXRlOiBKdWx5IDE4LCAyMDE2KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS0zLCAzLjEuMz4+LgorCisqIGBQYXRoUHJvY2Vzc29yYCBzdGVwcyBub3cgaGF2ZSB0aGUgYWJpbGl0eSAoaWYgY29uZmlndXJlZCB0aHJvdWdoIGEgc3RyYXRlZ3kpIHRvIGRyb3AgYFRyYXZlcnNlcmAgcGF0aCBzZWdtZW50cy4KKyogYE1hdGNoU3RlcGAgaW4gT0xUUCBoYXMgYSBsYXp5IGJhcnJpZXIgdG8gaW5jcmVhc2UgdGhlIHByb2JhYmlsaXR5IG9mIGJ1bGtpbmcuCisqIEFkZGVkIGBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5YCB3aGljaCB3aWxsIHJlbW92ZSBsYWJlbGVkIHBhdGggc2VnbWVudHMgdGhhdCB3aWxsIG5vIGxvbmdlciBiZSByZWZlcmVuY2VkLgorKiBBZGRlZCBgUGF0aC5yZXRyYWN0KClgIHRvIHN1cHBvcnQgcmV0cmFjdGluZyBwYXRocyBiYXNlZCBvbiBsYWJlbHMuCisqIE9wdGltaXplZCBgSW1tdXRhYmxlUGF0aGAgYW5kIGBNdXRhYmxlUGF0aGAgZXF1YWxpdHkgY29kZSByZW1vdmluZyBzaWduaWZpY2FudCB1bm5lY2Vzc2FyeSBvYmplY3QgY3JlYXRpb24gY29kZS4KKyogQnVtcGVkIHRvIEdyb292eSAyLjQuNy4KKyogQWRkZWQgYFJlcGVhdFVucm9sbFN0cmF0ZWd5YCB0byBsaW5lYXJpemUgYSBgcmVwZWF0KClgLXRyYXZlcnNhbCBpZiBsb29wIGFtb3VudCBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCisqIEZpeGVkIGEgYnVnIGluIGBCcmFuY2hTdGVwYCBhcm91bmQgY2hpbGQgaW50ZWdyYXRpb24gZHVyaW5nIGBjbG9uZSgpYC4KKyogRml4ZWQgYSBidWcgaW4gYEFic3RyYWN0U3RlcGAgYXJvdW5kIGxhYmVsIHNldCBjbG9uaW5nLgorKiBBZGRlZCBgVHJhdmVyc2FsU3RyYXRlZ3lQZXJmb3JtYW5jZVRlc3RgIGZvciB2ZXJpZnlpbmcgdGhlIHBlcmZvcm1hbmNlIGdhaW5zIG9mIG9wdGltaXphdGlvbi1iYXNlZCB0cmF2ZXJzYWwgc3RyYXRlZ2llcy4KKyogYFRyYXZlcnNhbEV4cGxhbmF0aW9uLnByZXR0eVByaW50KClgIGV4aXN0cyB3aGljaCBwcm92aWRlcyB3b3JkIHdyYXBwaW5nIGFuZCBHcmVtbGluQ29uc29sZSBpcyBzbWFydCB0byB1c2UgY29uc29sZSB3aWR0aCB0byBjb250cm9sIGB0b1N0cmluZygpYC4KKyogYFRyYXZlcnNhbE9wUHJvY2Vzc29yYCAoYFJlbW90ZUNvbm5lY3Rpb25gKSB1c2VzIGBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneWAgbWV0YWRhdGEgdG8gZGV0ZXJtaW5lIGRldGFjaG1lbnQgcHJvY2VkdXJlIHByaW9yIHRvIHJldHVybmluZyByZXN1bHRzLgorKiBBbGxvdyBERlMgcGF0aHMgaW4gYEhBRE9PUF9HUkVNTElOX0xJQlNgLgorKiBBZGRlZCBhIHNhZmVyIHNlcmlhbGl6ZXIgaW5mcmFzdHJ1Y3R1cmUgZm9yIHVzZSB3aXRoIGBTcGFya0dyYXBoQ29tcHV0ZXJgIHRoYXQgdXNlcyBgS3J5b1NlcmlhbGl6ZXJgIGFuZCB0aGUgbmV3IGBHcnlvUmVnaXN0cmF0b3JgLgorKiBBZGRlZCBgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lgIHRvIGFsbG93IHVzZXJzIHRvIGdldCBiYWNrIGRpZmZlcmVudCBlbGVtZW50IGRldGFjaG1lbnRzIGluIE9MQVAuCisqIEZpeGVkIGEgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBidWcgYXJvdW5kIG5lc3RlZCBgZ3JvdXAoKWAtc3RlcHMgaW4gT0xBUC4KKyogRml4ZWQgYSBzZXZlcmUgYnVnIGFyb3VuZCBoYWx0ZWQgdHJhdmVyc2VycyBpbiBhIG11bHRpLWpvYiBPTEFQIHRyYXZlcnNhbCBjaGFpbi4KKyogRW5zdXJlIGEgc2VwYXJhdGlvbiBvZiBgR3JhcGhDb21wdXRlcmAgYW5kIGBWZXJ0ZXhQcm9ncmFtYCBjb25maWd1cmF0aW9ucyBpbiBgU3BhcmtHcmFwaENvbXB1dGVyYCBhbmQgYEdpcmFwaEdyYXBoQ29tcHV0ZXJgLgorKiBgUGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbWAgbm93IHN1cHBvcnRzIGR5bmFtaWMgaW5pdGlhbCB2b3RlIHN0cmVuZ3RoIGNhbGN1bGF0aW9ucy4KKyogQWRkZWQgYEVtcHR5TWVtb3J5YCBmb3IgZWFzZSBvZiB1c2Ugd2hlbiBubyBtZW1vcnkgZXhpc3RzLgorKiBVcGRhdGVkIGBWZXJ0ZXhDb21wdXRpbmcuZ2VuZXJhdGVQcm9ncmFtKClgIEFQSSB0byBpbmNsdWRlIGBNZW1vcnlgLiAqKGJyZWFraW5nKSoKKyogYEltbXV0YWJsZVBhdGguVGFpbFBhdGhgIGlzIG5vdyBzZXJpYWxpemFibGUgbGlrZSBgSW1tdXRhYmxlUGF0aGAuCisqIEFkZGVkIGBDb25maWd1cmF0aW9uQ29tcGlsZXJQcm92aWRlcmAgd2hpY2ggYWxsb3dzIGZpbmUtZ3JhaW5lZCBjb250cm9sIG9mIHNvbWUgb2YgdGhlIGludGVybmFsIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBzZXR0aW5ncyBhdCB0aGUgR3Jvb3Z5IGNvbXBpbGF0aW9uIGxldmVsLgorKiBJbnRyb2R1Y2VkIHRoZSBgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjEuMCtncnlvLWxpdGVgIHNlcmlhbGl6YXRpb24gdHlwZSB0byBHcmVtbGluIFNlcnZlciB3aGljaCB1c2VycyAicmVmZXJlbmNlIiBlbGVtZW50cyByYXRoZXIgdGhhbiAiZGV0YWNoZWQiLgorKiBgR3J5b01hcHBlcmAgYWxsb3dzIG92ZXJyaWRlcyBvZiBleGlzdGluZyBzZXJpYWxpemVycyBvbiBjYWxscyB0byBgYWRkQ3VzdG9tYCBvbiB0aGUgYnVpbGRlci4KKyogQWRkZWQgYSB0cmF2ZXJzYWwgc3R5bGUgZ3VpZGUgdG8gdGhlIHJlY2lwZXMgY29va2Jvb2suCisqIEZpeGVkIGEgYnVnIGluIG1hc3Rlci10cmF2ZXJzYWwgdHJhdmVyc2VyIHByb3BhZ2F0aW9uLgorKiBBZGRlZCB1c2VmdWwgbWV0aG9kcyBmb3IgY3VzdG9tIGBWZXJ0ZXhQcm9ncmFtc2AgdG8gYmUgdXNlZCB3aXRoIGBwcm9ncmFtKClgLXN0ZXAuCisqIEluY3JlYXNlZCB0aGUgdGVzdCBjb3ZlcmFnZSBhcm91bmQgdHJhdmVyc2VyIHByb3BhZ2F0aW9uIHdpdGhpbiBhIG11bHRpLWpvYiBPTEFQIHRyYXZlcnNhbC4KKyogQWRkZWQgdGVzdHMgdG8gdmFsaWRhdGUgdGhlIHN0YXR1cyBvZiBhIHRyYW5zYWN0aW9uIGltbWVkaWF0ZWx5IGZvbGxvd2luZyBjYWxscyB0byBjbG9zZS4KKyogQWRkZWQgdGVzdHMgdG8gZW5zdXJlIHRoYXQgdGhyZWFkZWQgdHJhbnNhY3Rpb25zIGNhbm5vdCBiZSByZS11c2VkLgorKiBgR3JhcGhGaWx0ZXJgIGhlbHBlciBtZXRob2RzIGFyZSBub3cgbW9yZSBpbnRlbGxpZ2VudCB3aGVuIGRldGVybWluaW5nIGVkZ2UgZGlyZWN0aW9uL2xhYmVsIGxlZ2FsaXR5LgorKiBBZGRlZCBgR3JhcGhGaWx0ZXJTdHJhdGVneWAgdG8gYXV0b21hdGljYWxseSBjb25zdHJ1Y3QgYEdyYXBoRmlsdGVyc2AgdmlhIHRyYXZlcnNhbCBpbnRyb3NwZWN0aW9uIGluIE9MQVAuCisqIFVwZGF0ZWQgdGhlIEdlcGhpIFBsdWdpbiB0byBzdXBwb3J0IEdlcGhpIDAuOS54LgorKiBJbmNyZWFzZWQgdGhlIHRlc3RpbmcgYW5kIHNjb3BlIG9mIGBUcmF2ZXJzYWxIZWxwZXIuaXNMb2NhbFN0YXJHcmFwaCgpYC4KKyogQ2hhbmdlZCBzaWduYXR1cmUgb2YgYGdldF9nX1ZYbGlzdFh2MV92Ml92M1hYX25hbWVgIGFuZCBgZ2V0X2dfVlhsaXN0WDFfMl8zWFhfbmFtZWAgb2YgYFZlcnRleFRlc3RgIHRvIHRha2UgYXJndW1lbnRzIGZvciB0aGUgYFRyYXZlcnNhbGAgdG8gYmUgY29uc3RydWN0ZWQgYnkgZXh0ZW5kaW5nIGNsYXNzZXMuCisqIEFkZGVkIGBWZXJ0ZXhQcm9ncmFtSW50ZXJjZXB0b3JgIGludGVyZmFjZSBhcyBhIGdlbmVyYWwgcGF0dGVybiBmb3IgYEdyYXBoQ29tcHV0ZXJgIHByb3ZpZGVycyB0byB1c2UgZm9yIGJ5cGFzc2luZyBgR3JhcGhDb21wdXRlcmAgc2VtYW50aWNzIHdoZXJlIGFwcHJvcHJpYXRlLgorKiBBZGRlZCBgU3BhcmtTdGFyQmFycmllckludGVyY2VwdG9yYCB0aGF0IHVzZXMgU3BhcmsgRFNMIGZvciBsb2NhbCBzdGFyIGdyYXBoIHRyYXZlcnNhbHMgdGhhdCBlbmQgd2l0aCBhIGBSZWR1Y2luZ0JhcnJpZXJTdGVwYC4KKyogQWRkZWQgYFNwYXJrSW50ZXJjZXB0b3JTdHJhdGVneWAgd2hpY2ggaWRlbnRpZmllcyB3aGljaCBpbnRlcmNlcHRvciB0byB1c2UgKGlmIGFueSkgZ2l2ZW4gdGhlIHN1Ym1pdHRlZCBgVmVydGV4UHJvZ3JhbWAuCisqIEFkZGVkIGBTcGFya1NpbmdsZUl0ZXJhdGlvblN0cmF0ZWd5YCB0aGF0IGRvZXMgbm90IHBhcnRpdGlvbiBub3IgY2FjaGUgdGhlIGdyYXBoIFJERCBpZiB0aGUgdHJhdmVyc2FsIGRvZXMgbm90IG1lc3NhZ2UgcGFzcy4KKyogQWRkZWQgbW9yZSBoZWxwZXIgbWV0aG9kcyB0byBgVHJhdmVyc2FsSGVscGVyYCBmb3IgaGFuZGxpbmcgc2NvcGVkIHRyYXZlcnNhbCBjaGlsZHJlbi4KKyogRGVwcmVjYXRlZCBhbGwgInBlcmZvcm1hbmNlIiB0ZXN0cyBiYXNlZCBvbiAiSlVuaXQgQmVuY2htYXJrcyIuCisqIGBTcGFya0dyYXBoQ29tcHV0ZXJgIG5vIGxvbmdlciBzaHVmZmxlcyBlbXB0eSB2aWV3cyBvciBlbXB0eSBvdXRnb2luZyBtZXNzYWdlcyBpbiBvcmRlciB0byBzYXZlIHRpbWUgYW5kIHNwYWNlLgorKiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgbm8gbG9uZ2VyIG1haW50YWlucyBlbXB0eSBoYWx0ZWQgdHJhdmVyc2VyIHByb3BlcnRpZXMgaW4gb3JkZXIgdG8gc2F2ZSBzcGFjZS4KKyogQWRkZWQgYExpc3Q8UDxWPj5gIGNvbnN0cnVjdG9ycyB0byBgQ29ubmVjdGl2ZVBgLCBgQW5kUGAsIGFuZCBgT3JQYCBmb3IgZWFzZSBvZiB1c2UuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGludGVyYWN0aXZlIChgLWlgKSBhbmQgZXhlY3V0ZSAoYC1lYCkgbW9kZXMgZm9yIEdyZW1saW4gQ29uc29sZS4KKyogRGlzcGxheWVkIGxpbmUgbnVtYmVycyBmb3Igc2NyaXB0IGV4ZWN1dGlvbiBmYWlsdXJlcyBvZiBgLWVgIGFuZCBgLWlgLgorKiBJbXByb3ZlZCBtZXNzYWdpbmcgYXJvdW5kIHNjcmlwdCBleGVjdXRpb24gZXJyb3JzIGluIEdyZW1saW4gQ29uc29sZS4KKyogQWRkZWQgImhlbHAiIHN1cHBvcnQgdG8gR3JlbWxpbiBDb25zb2xlIHdpdGggdGhlIGAtaGAgZmxhZy4KKyogQWRkZWQgb3B0aW9ucyB0byBiZXR0ZXIgY29udHJvbCB2ZXJib3NpdHkgb2YgR3JlbWxpbiBDb25zb2xlIG91dHB1dCB3aXRoIGAtUWAsIGAtVmAgYW5kIGAtRGAuCisqIERlcHJlY2F0ZWQgdGhlIGBTY3JpcHRFeGVjdXRvcmAgLSB0aGUgYC1lYCBvcHRpb24gdG8gYGdyZW1saW4uc2hgIGlzIG5vdyBoYW5kbGVkIGJ5IGBDb25zb2xlYC4KKyogYFRyYXZlcnNhbGAgbm93IGFsbG93cyBjYW5jZWxsYXRpb24gd2l0aCBgVGhyZWFkLmludGVycnVwdCgpYC4KKyogQWRkZWQgYSBHcmVtbGluIGxhbmd1YWdlIHZhcmlhbnQgdHV0b3JpYWwgdGVhY2hpbmcgcGVvcGxlIGhvdyB0byBlbWJlZCBHcmVtbGluIGluIGEgaG9zdCBwcm9ncmFtbWluZyBsYW5ndWFnZS4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTEyODEgTWVtb3J5LkhBTFRFRF9UUkFWRVJTRVIgdHJhbnNpZW5jZSBpcyBub3Qgc291bmQuCisqIFRJTktFUlBPUC0xMzA1IEhBTFRFRF9UUkFWRVJTRVJTIGhvbGQgd3JvbmcgaW5mb3JtYXRpb24KKyogVElOS0VSUE9QLTEzMDcgTlBFIHdpdGggT0xUUCBuZXN0ZWQgZ3JvdXAoKSBpbiBhbiBPTEFQIGdyb3VwKCkgdHJhdmVyc2FsCisqIFRJTktFUlBPUC0xMzIzIENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kgZmFpbHMgZm9yIG5lc3RlZCBtYXRjaCgpIHN0ZXBzCisqIFRJTktFUlBPUC0xMzQxIFVuc2hhZGVkS3J5b0FkYXB0ZXIgZmFpbHMgdG8gZGVzZXJpYWxpemUgU3RhckdyYXBoIHdoZW4gU3BhcmtDb25mIHNldHMgc3BhcmsucmRkLmNvbXByZXNzPXRydWUgd2hlcmVhcyBHcnlvU2VyaWFsaXplciB3b3JrcworKiBUSU5LRVJQT1AtMTM0OCBUcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0IHN1Y2Nlc3MgZGVwZW5kZW50IG9uIGl0ZXJhdGlvbiBvcmRlcgorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC04MTggQ29uc2lkZXIgYSBQLnR5cGUoKQorKiBUSU5LRVJQT1AtOTQ2IFRyYXZlcnNhbCByZXNwZWN0aW5nIFRocmVhZC5pbnRlcnJ1cHQoKQorKiBUSU5LRVJQT1AtOTQ3IEVuZm9yY2Ugc2VtYW50aWNzIG9mIHRocmVhZGVkIHRyYW5zYWN0aW9ucyBhcyBtYW51YWwgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMDU5IEFkZCB0ZXN0IHRvIGVuc3VyZSB0cmFuc2FjdGlvbiBvcGVuaW5nIGhhcHBlbnMgYXQgcmVhZC93cml0ZSBhbmQgbm90IG9uIGNsb3NlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTA3MSBFbmhhbmNlIHByZS1wcm9jZXNzb3Igb3V0cHV0CisqIFRJTktFUlBPUC0xMDkxIEdldCBLcnlvU2VyaWFsaXplciB0byB3b3JrIG5hdGl2ZWx5LiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTExMjAgSWYgdGhlcmUgaXMgbm8gdmlldyBub3IgbWVzc2FnZXMsIGRvbid0IGNyZWF0ZSBlbXB0eSB2aWV3cy9tZXNzYWdlcyBpbiBTcGFya0V4ZWN1dG9yCisqIFRJTktFUlBPUC0xMTQ0IEltcHJvdmUgU2NyaXB0RWxlbWVudEZhY3RvcnkKKyogVElOS0VSUE9QLTExNTUgZ3JlbWxpbi5zaCAtZSBkb2Vzbid0IGxvZyBsaW5lIG51bWJlcnMgZm9yIGVycm9ycworKiBUSU5LRVJQT1AtMTE1NiBncmVtbGluLnNoIGNvdWxkIHVzZSBhIGhlbHAgdGV4dAorKiBUSU5LRVJQT1AtMTE1NyBncmVtbGluLnNoIHNob3VsZCBhbGxvdyB5b3UgdG8gZXhlY3V0ZSBhIHNjcmlwdCBhbmQgZ28gaW50ZXJhY3RpdmUgb24gZXJyb3Igb3IgY29tcGxldGlvbgorKiBUSU5LRVJQT1AtMTIzMiBXcml0ZSBhIHR1dG9yaWFsIGRlbW9uc3RyYXRpbmcgdGhlIDMgd2F5cyB0byB3cml0ZSBhIEdyZW1saW4gbGFuZ3VhZ2UgdmFyaWFudC4KKyogVElOS0VSUE9QLTEyNTQgU3VwcG9ydCBkcm9wcGluZyB0cmF2ZXJzZXIgcGF0aCBpbmZvcm1hdGlvbiB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCisqIFRJTktFUlBPUC0xMjY4IEltcHJvdmUgc2NyaXB0IGV4ZWN1dGlvbiBvcHRpb25zIGZvciBjb25zb2xlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTI3MyBEZXByZWNhdGUgb2xkIHBlcmZvcm1hbmNlIHRlc3RzCisqIFRJTktFUlBPUC0xMjc2IERlcHJlY2F0ZSBzZXJpYWxpemVkUmVzcG9uc2VUaW1lb3V0CisqIFRJTktFUlBPUC0xMjc5IEFkZCBJdGVyYWJsZTxWPiBwYXJhbWV0ZXIgY29uc3RydWN0b3IgdG8gQ29ubmVjdGl2ZVAgc3ViY2xhc3NlcworKiBUSU5LRVJQT1AtMTI4MiBBZGQgbW9yZSBjb21wbGlhbmNlIHRlc3RzIGFyb3VuZCBob3cgbWVtb3J5IGFuZCB2ZXJ0ZXggY29tcHV0ZSBrZXlzIGFyZSBwcm9wYWdhdGVkIGluIGNoYWluZWQgT0xBUC4KKyogVElOS0VSUE9QLTEyODYgQWRkIFJlY2lwZXMgZG9jdW1lbnRhdGlvbgorKiBUSU5LRVJQT1AtMTI4OCBTdXBwb3J0IGdyZW1saW4uc3Bhcmsuc2tpcFBhcnRpdGlvbmluZyBjb25maWd1cmF0aW9uLgorKiBUSU5LRVJQT1AtMTI5MCBDcmVhdGUgVmVydGV4UHJvZ3JhbUludGVyY2VwdG9yIGFzIGEgcGF0dGVybiBmb3IgR3JhcGhDb21wdXRlciBzdHJhdGVnaWVzLgorKiBUSU5LRVJQT1AtMTI5MyBJbXBsZW1lbnQgR3JhcGhGaWx0ZXJTdHJhdGVneSBhcyBhIGRlZmF1bHQgcmVnaXN0cmF0aW9uIGZvciBHcmFwaENvbXB1dGVyCisqIFRJTktFUlBPUC0xMjk0IERlcHJlY2F0ZSB1c2Ugb2YganVuaXQtYmVuY2htYXJrcworKiBUSU5LRVJQT1AtMTI5NyBHZXBoaSBwbHVnaW4gb24gR2VwaGkgMC45LnggICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTI5OSBSZWZhY3RvciBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisqIFRJTktFUlBPUC0xMzA4IFNlcmlhbGl6ZSB0byAicmVmZXJlbmNlIiBmb3IgR3JlbWxpbiBTZXJ2ZXIKKyogVElOS0VSUE9QLTEzMTAgQWxsb3cgT0xBUCB0byByZXR1cm4gcHJvcGVydGllcyBhcyBEZXRhY2hlZAorKiBUSU5LRVJQT1AtMTMyMSBMb29zZW4gY291cGxpbmcgYmV0d2VlbiBUaW5rZXJQb3Agc2VyaWFsaXphdGlvbiBsb2dpYyBhbmQgc2hhZGVkIEtyeW8KKyogVElOS0VSUE9QLTEzMjIgUHJvdmlkZSBmaW5lLWdyYWluZWQgY29udHJvbCBvZiBDb21waWxlckNvbmZpZ3VyYXRpb24KKyogVElOS0VSUE9QLTEzMjggUHJvdmlkZSBbZ3JlbWxpbi1weXRob25dIGFzIGFuIGNvZGUgZXhlY3V0b3IgaW4gZG9jcworKiBUSU5LRVJQT1AtMTMzMSBIQURPT1BfR1JFTUxJTl9MSUJTIGNhbiBvbmx5IHBvaW50IHRvIGxvY2FsIGZpbGUgc3lzdGVtCisqIFRJTktFUlBPUC0xMzMyIEltcHJvdmUgLmV4cGxhaW4oKSBEaWFsb2d1ZQorKiBUSU5LRVJQT1AtMTMzOCBCdW1wIHRvIEdyb292eSAyLjQuNworKiBUSU5LRVJQT1AtMTM0OSBSZXBlYXRVbnJvbGxTdHJhdGVneSBzaG91bGQgdW5yb2xsIGxvb3BzIHdoaWxlIG1haW50YWluaW5nIGVxdWl2YWxlbnQgc2VtYW50aWNzLgorKiBUSU5LRVJQT1AtMTM1NSBEZXNpZ24gSGFzQ29udGFpbmVyIGZvciBleHRlbnNpb24KKworW1tyZWxlYXNlLTMtMi0wLWluY3ViYXRpbmddXQorPT09IFRpbmtlclBvcCAzLjIuMCAoUmVsZWFzZSBEYXRlOiBBcHJpbCA4LCAyMDE2KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjEueC5hc2NpaWRvYyNyZWxlYXNlLTMtMS0yLWluY3ViYXRpbmcsIDMuMS4yLWluY3ViYXRpbmc+Pi4KKworKiBCdW1wZWQgdG8gTmVvNGogMi4zLjMuCisqIFJlbmFtZWQgdmFyaWFibGUgYGxvY2FsYCB0byBgZnNgIGluIGBIYWRvb3BHcmVtbGluUGx1Z2luYCB0byBhdm9pZCBhIG5hbWluZyBjb25mbGljdCB3aXRoIGBTY29wZS5sb2NhbGAuICooYnJlYWtpbmcpKgorKiBBZGRlZCBgR3JhcGhUcmF2ZXJzYWwub3B0aW9uYWwoKWAgd2hpY2ggd2lsbCB1c2UgdGhlIGlubmVyIHRyYXZlcnNhbCBpZiBpdCByZXR1cm5zIHJlc3VsdHMsIGVsc2UgaXQgd29uJ3QuCisqIGBHcm91cFN0ZXBgIGFuZCBgR3JvdXBTaWRlRWZmZWN0U3RlcGAgbWFrZSB1c2Ugb2YgbWlkLXRyYXZlcnNhbCByZWR1Y2VycyB0byBsaW1pdCBtZW1vcnkgY29uc3VtcHRpb24gaW4gT0xBUC4KKyogQWRkZWQgYEdyYXBoVHJhdmVyc2FsLnByb2dyYW0oVmVydGV4UHJvZ3JhbSlgIHRvIGFsbG93IGFyYml0cmFyeSB1c2VyIHZlcnRleCBwcm9ncmFtcyBpbiBPTEFQLgorKiBBZGRlZCBgR3JhcGhUcmF2ZXJzYWwucHJvamVjdCgpYCBmb3IgY3JlYXRpbmcgYSBgTWFwPFN0cmluZyxFPmAgZ2l2ZW4gdGhlIGN1cnJlbnQgdHJhdmVyc2VyIGFuZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGBieSgpYC1tb2R1bGF0b3JzLgorKiBgSEFET09QX0dSRU1MSU5fTElCU2AgY2FuIG5vdyByZWZlcmVuY2UgYSBkaXJlY3RvcnkgaW4gSERGUyBhbmQgd2lsbCBiZSB1c2VkIGlmIHRoZSBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QgbG9jYWxseS4KKyogQWRkZWQgYGdyZW1saW4tYmVuY2htYXJrYCBtb2R1bGUgd2l0aCBKTUggYmVuY2htYXJraW5nIGJhc2UgY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIGZvciBmdXJ0aGVyIGJlbmNobWFyayBkZXZlbG9wbWVudC4KKyogYFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGVgIHN1cHBvcnRzIGJvdGggYEdyYXBoYCBhbmQgYEdyYXBoQ29tcHV0ZXJgIHN0cmF0ZWd5IHJlZ2lzdHJhdGlvbnMuCisqIGBzZWxlY3QoImEiLCJiIikuYnkoIm5hbWUiKS5ieSgiYWdlIilgLXN0eWxlIHRyYXZlcnNhbHMgbm93IHdvcmsgaW4gT0xBUCB3aXRoIG5ldyBgUGF0aFByb2Nlc3NvclN0cmF0ZWd5YC4KKyogYERlZHVwR2xvYmFsU3RlcGAgY2FuIG5vdyBoYW5kbGUgc3Rhci1ib3VuZCBgYnkoKWAtbW9kdWxhdG9ycyBhbmQgc2NvcGVkIGtleXMgb24gYEdyYXBoQ29tcHV0ZXJgLgorKiBBZGRlZCBgQ29tcHV0ZXJgIHdoaWNoIGlzIGEgYnVpbGRlciBmb3IgYEdyYXBoQ29tcHV0ZXJzYCB0aGF0IGlzIHNlcmlhbGl6YWJsZS4KKyogYFBlcnNpc3RlZE91dHB1dFJERGAgbm93IGltcGxlbWVudHMgYFBlcnNpc3RSZXN1bHRHcmFwaEF3YXJlYCBhbmQgdGh1cywgbm8gbW9yZSB1bm5lZWRlZCB3YXJuaW5ncyB3aGVuIHVzaW5nIGl0LgorKiBSZW5hbWVkIGBTdGFuZGFyZFRyYXZlcnNhbE1ldHJpY3NgIHRvIGBEZWZhdWx0VHJhdmVyc2FsTWV0cmljc2AgZ2l2ZW4gdGhlIGBEZWZhdWx0WFhYYC1jb252ZW50aW9uIHRocm91Z2hvdXQuICooYnJlYWtpbmcpKgorKiBCdW1wZWQgdG8gQXBhY2hlIEhhZG9vcCAyLjcuMi4KKyogRml4ZWQgYSBidWcgYXJvdW5kIHByb2ZpbGluZyBhbmQgbmVzdGVkIHRyYXZlcnNhbHMuCisqIEFkZGVkIGBncmVtbGluLmhhZG9vcC5kZWZhdWx0R3JhcGhDb21wdXRlcmAgc28gdXNlcnMgY2FuIHVzZSBgZ3JhcGguY29tcHV0ZSgpYCB3aXRoIGBIYWRvb3BHcmFwaGAuCisqIEFkZGVkIGBncmVtbGluLmhhZG9vcC5ncmFwaFJlYWRlcmAgYW5kIGBncmVtbGluLmhhZG9vcC5ncmFwaFdyaXRlcmAgd2hpY2ggY2FuIGhhbmRsZWQgYFhYWEZvcm1hdHNgIGFuZCBgWFhYUkREc2AuCisqIERlcHJlY2F0ZWQgYGdyZW1saW4uaGFkb29wLmdyYXBoSW5wdXRGb3JtYXRgLCBgZ3JlbWxpbi5oYWRvb3AuZ3JhcGhPdXRwdXRGb3JtYXRgLCBgZ3JlbWxpbi5zcGFyay5ncmFwaElucHV0UkREYCwgYW5kIGBncmVtbGluLnNwYXJrLmdyYXBoT3V0cHV0UkREYC4KKyogSWYgbm8gY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCB0byBgSGFkb29wUG9vbHNgIGl0IHVzZXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB0byBjcmVhdGUgYSBwb29sIG9uY2UgYW5kIG9ubHkgb25jZSBwZXIgSlZNLgorKiBJbXBsZW1lbnRlZCBgUmVtb3RlR3JhcGhgLCBgUmVtb3RlQ29ubmVjdGlvbmAsIGFuZCBgUmVtb3RlU3RyYXRlZ3lgLgorKiBBZGRlZCB2YWxpZGF0aW9uIHRvIGBHcnlvTWFwcGVyYCBLcnlvIGlkZW50aWZpZXJzIGJlZm9yZSBjb25zdHJ1Y3Rpb24gdG8gcHJldmVudCBhY2NpZGVudGFsIGR1cGxpY2F0ZXMuCisqIEFkZGVkIGBHcmFwaFN0ZXAuYWRkSWRzKClgIHdoaWNoIGlzIHVzZWZ1bCBmb3IgYEhhc0NvbnRhaW5lcmAgImZvbGQgaW5zLiIKKyogQWRkZWQgYSBzdGF0aWMgYEdyYXBoU3RlcC5wcm9jZXNzSGFzaENvbnRhaW5lcklkcygpYCBoZWxwZXIgZm9yIGhhbmRsaW5nIGlkLWJhc2VkIGBIYXNDb250YWluZXJzYC4KKyogYEdyYXBoU3RlcGAgaW1wbGVtZW50YXRpb25zIHNob3VsZCBoYXZlIGBnLlYoKS5oYXNJZCh4KWAgYW5kIGBnLlYoeClgIGNvbXBpbGUgZXF1aXZhbGVudGx5LiAqKGJyZWFraW5nKSoKKyogT3B0aW1pemVkIGBFeHBhbmRhYmxlU3RlcEl0ZXJhdG9yYCB3aXRoIHNpbXBsZXIgbG9naWMgYW5kIGluY3JlYXNlZCB0aGUgbGlrZWxpaG9vZCBvZiBidWxraW5nLgorKiBPcHRpbWl6ZWQgYFRyYXZlcnNlclJlcXVpcmVtZW50YCBjYWxjdWxhdGlvbnMuCisqIGBTdGVwLmFkZFN0YXJ0KClgIGFuZCBgU3RlcC5hZGRTdGFydHMoKWAgbm93IHRha2UgYFRyYXZlcnNlci5BZG1pbjxTPmAgYW5kIGBUcmF2ZXJzZXIuQWRtaW48Uz5gLCByZXNwZWN0aXZlbHkuICooYnJlYWtpbmcpKgorKiBgU3RlcC5wcm9jZXNzTmV4dFN0YXJ0KClgIGFuZCBgU3RlcC5uZXh0KClgIG5vdyByZXR1cm4gYFRyYXZlcnNlci5BZG1pbjxFPmAuICooYnJlYWtpbmcpKgorKiBgVHJhdmVyc2FsLmFkZFRyYXZlcnNlclJlcXVpcmVtZW50KClgIG1ldGhvZCByZW1vdmVkLiAqKGJyZWFraW5nKSoKKyogRml4ZWQgYSBgaGFzaENvZGUoKWAgYnVnIGluIGBPcmRlckdsb2JhbFN0ZXBgIGFuZCBgT3JkZXJMb2NhbFN0ZXBgLgorKiBBZGRlZCBgT3JkZXJMaW1pdFN0cmF0ZWd5YCB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IHBhcnRpdGlvbnMgYXJlIGxpbWl0ZWQgYmVmb3JlIGJlaW5nIG1lcmdlZCBpbiBPTEFQLgorKiBgQ29tcGFyYXRvckhvbGRlcmAgbm93IHNlcGFyYXRlcyB0aGUgdHJhdmVyc2FsIGZyb20gdGhlIGNvbXBhcmF0b3IuICooYnJlYWtpbmcpKgorKiBCdW1wZWQgdG8gQXBhY2hlIFNwYXJrIDEuNi4xLgorKiBJZiBubyBTcGFyayBzZXJpYWxpemVyIGlzIHByb3ZpZGVkIHRoZW4gYEdyeW9TZXJpYWxpemVyYCBpcyB0aGUgZGVmYXVsdCwgbm90IGBKYXZhU2VyaWFsaXplcmAuCisqIEFkZGVkIGBPcGVyYXRvci5zdW1Mb25nYCBhcyBhIG9wdGltaXplZCBiaW5hcnkgb3BlcmF0b3IgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBgTWVtb3J5YCByZWR1Y2VycyB0aGF0IGtub3cgdGhleSBhcmUgZGVhbGluZyB3aXRoIGxvbmdzLgorKiBUcmF2ZXJzZXJzIGZyb20gYENvbXB1dGVyUmVzdWx0U3RlcGAgYXJlIG5vIGxvbmdlciBhdHRhY2hlZC4gQXR0YWNoaW5nIGlzIG9ubHkgdXNlZCBpbiBUaW5rZXJQb3AncyB0ZXN0IHN1aXRlIHZpYSBgU3lzdGVtLmdldFByb3BlcnRpZXMoKWAuCisqIEZpeGVkIGEgYGhhc2hDb2RlKClgL2BlcXVhbHMoKWAgYnVnIGluIGBNZXNzYWdlU2NvcGVgLgorKiBGaXhlZCBhIHNldmVyZSBgVHJhdmVyc2FsYCBjbG9uaW5nIGlzc3VlIHRoYXQgY2F1c2VkIGluY29uc2lzdGVudCBgVHJhdmVyc2FsU2lkZUVmZmVjdHNgLgorKiBgVHJhdmVyc2FsU2lkZUVmZmVjdHNgIHJlbWFpbiBjb25zaXN0ZW50IGFuZCB1c2FibGUgYWNyb3NzIG11bHRpcGxlIGNoYWluZWQgT0xBUCBqb2JzLgorKiBBZGRlZCBgTWVtb3J5VHJhdmVyc2FsU2lkZUVmZmVjdHNgIHdoaWNoIHdyYXBzIGBNZW1vcnlgIGluIGEgYFRyYXZlcnNhbFNpZGVFZmZlY3RzYCBmb3IgdXNlIGluIE9MQVAuCisqIGBUcmF2ZXJzYWxTaWRlRWZmZWN0c2AgYXJlIG5vdyBmdWxseSBmdW5jdGlvbmFsIGluIE9MQVAgc2F2ZSB0aGF0IGFuIGFjY3VyYXRlIGdsb2JhbCB2aWV3IGlzIHBvc3NpYmxlIGF0IHRoZSBzdGFydCBvZiBhbiBpdGVyYXRpb24gKG5vdCBkdXJpbmcpLgorKiBVcGRhdGVkIHRoZSBgVHJhdmVyc2FsU2lkZUVmZmVjdHNgIEFQSSB0byBzdXBwb3J0IHJlZ2lzdGVyZWQgcmVkdWNlcnMgYW5kIHVwZGF0ZWQgYGdldCgpYC1zZW1hbnRpY3MuICooYnJlYWtpbmcpKgorKiBTcGxpdCBleGlzdGluZyBgcHJvZmlsZSgpYCBpbnRvIGBQcm9maWxlU3RlcGAgYW5kIGBQcm9maWxlU2lkZUVmZmVjdFN0ZXBgLgorKiBUaGUgYHByb2ZpbGUoKWAtc3RlcCBhY3RzIGxpa2UgYSByZWR1Y2luZyBiYXJyaWVyIGFuZCBlbWl0cyBgVHJhdmVyc2FsTWV0cmljc2Agd2l0aG91dCB0aGUgbmVlZCBmb3IgYGNhcCgpYC4gKihicmVha2luZykqCisqIEFkZGVkIGBMb2NhbEJhcnJpZXJgIGludGVyZmFjZSB0byBhbGxvdyB0cmF2ZXJzZXJzIHRvIHJlbWFpbiBkaXN0cmlidXRlZCBkdXJpbmcgYW4gaXRlcmF0aW9uIHNvIGFzIHRvIHJlZHVjZSBjbHVzdGVyIHRyYWZmaWMuCisqIEFkZGVkIGBOb09wQmFycmllclN0ZXBgIGFzIGEgYExvY2FsQmFycmllcmAgaW1wbGVtZW50YXRpb24gb2YgYExhbWJkYUNvbGxlY3RpbmdCYXJyaWVyU3RlcChub09wKWAuCisqIGBBZ2dyZWdhdGVTdGVwYCBpbXBsZW1lbnRzIGBMb2NhbEJhcnJpZXJgIGFuZCB0aHVzLCBkb2Vzbid0IG5lZWRsZXNzbHkgY29tbXVuaWNhdGUgaXRzIGJhcnJpZXIgdHJhdmVyc2Vycy4KKyogRml4ZWQgYW4gT0xBUC1iYXNlZCBgQmFycmllcmAgc3luY2hyb25pemF0aW9uIGJ1Zy4KKyogRml4ZWQgYSBzZW1hbnRpYyBidWcgaW4gYEJyYW5jaFN0ZXBgIChhbmQgaW5oZXJpdGluZyBzdGVwcykgd2hlcmUgYmFycmllcnMgcmVhY3RlZCBsb2NhbGx5LiAqKGJyZWFraW5nKSoKKyogQWRkZWQgYE1lbW9yeUNvbXB1dGVLZXlgIGZvciBzcGVjaWZpY2F0aW9uIG9mIGBNZW1vcnlgIGtleXMgaW4gYFZlcnRleFByb2dyYW1gLiAqKGJyZWFraW5nKSoKKyogQWRkZWQgYFZlcnRleENvbXB1dGVLZXlgIGZvciBzcGVjaWZpY2F0aW9uIG9mIHZlcnRleCBjb21wdXRlIHByb3BlcnRpZXMgaW4gYFZlcnRleFByb2dyYW1gLiAqKGJyZWFraW5nKSoKKyogQWRkZWQgYGFuZGAsIGBvcmAsIGFuZCBgYWRkQWxsYCB0byBgT3BlcmF0b3JgLgorKiBgTWVtb3J5YCBBUEkgY2hhbmdlZCB0byBzdXBwb3J0IHNldHRpbmcgYW5kIGFkZGluZyB2YWx1ZXMgZm9yIHJlZHVjdGlvbi4gKihicmVha2luZykqCisqIGBNZW1vcnlgIGtleXMgY2FuIGJlIG1hcmtlZCBhcyBicm9hZGNhc3QgYW5kIG9ubHkgdGhvc2UgdmFsdWVzIGFyZSBzZW50IHRvIHdvcmtlcnMgb24gZWFjaCBpdGVyYXRvci4KKyogYE1lbW9yeWAga2V5cyBjYW4gYmUgbWFya2VkIHRyYW5zaWVudCBhbmQgdGh1cyBkZWxldGVkIGF0IHRoZSBlbmQgb2YgdGhlIE9MQVAgam9iLgorKiBWZXJ0ZXggY29tcHV0ZSBrZXlzIGNhbiBiZSBtYXJrZWQgdHJhbnNpZW50IGFuZCB0aHVzIGRlbGV0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgT0xBUCBqb2IuCisqIGBWZXJ0ZXhQcm9ncmFtYCBBUEkgY2hhbmdlZCB0byBzdXBwb3J0IGBNZW1vcnlDb21wdXRlS2V5YCBhbmQgYFZlcnRleENvbXB1dGVLZXlgLiAqKGJyZWFraW5nKSoKKyogYFRyYXZlcnNhbFZlcnRleFByb2dyYW1gIGFibGUgdG8gZXhlY3V0ZSBPTEFQIGFuZCBPTFRQIHRyYXZlcnNhbCBzZWN0aW9ucyBkeW5hbWljYWxseSB3aXRoaW4gdGhlIHNhbWUgam9iLgorKiBSZW1vdmVkIGBGaW5hbEdldGAgaW50ZXJmYWNlIGFzIGFsbCBwb3N0IHByb2Nlc3Npbmcgb2YgcmVkdWN0aW9ucyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgcmVkdWNpbmcgc3RlcCBleHBsaWNpdGx5LiAqKGJyZWFraW5nKSoKKyogU2ltcGxpZmllZCBhbGwgYFN1cHBseWluZ0JhcnJpZXJTdGVwYCBpbXBsZW1lbnRhdGlvbnMgYXMgdGhleSBubyBsb25nZXIgcmVxdWlyZSBgTWFwUmVkdWNlYCBpbiBPTEFQLgorKiBTaW1wbGlmaWVkIGFsbCBgQ29sbGVjdGluZ0JhcnJpZXJTdGVwYCBpbXBsZW1lbnRhdGlvbnMgYXMgdGhleSBubyBsb25nZXIgcmVxdWlyZSBgTWFwUmVkdWNlYCBpbiBPTEFQLgorKiBTaW1wbGlmaWVkIGFsbCBgUmVkdWNpbmdCYXJyaWVyU3RlcGAgaW1wbGVtZW50YXRpb25zIGFzIHRoZXkgbm8gbG9uZ2VyIHJlcXVpcmUgYE1hcFJlZHVjZWAgaW4gT0xBUC4KKyogQWxsIHN0ZXBzIGluIE9MQVAgdGhhdCB1c2VkIGBNYXBSZWR1Y2VgIG5vdyB1c2UgYE1lbW9yeWAgdG8gZG8gdGhlaXIgcmVkdWN0aW9ucyB3aGljaCBleHBhbmRzIHRoZSBsaXN0IG9mIGxlZ2FsIHRyYXZlcnNhbHMuCisqIGBHcm91cFN0ZXBgIHNpbXBsaWZpZWQgd2l0aCBgR3JvdXBIZWxwZXIuR3JvdXBNYXBgIG5vIGxvbmdlciBiZWluZyBuZWVkZWQuIFJlbGF0ZWQgdG8gdGhlIHJlbW92YWwgb2YgYEZpbmFsR2V0YC4KKyogT0xBUCBzaWRlLWVmZmVjdHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGdlbmVyYXRlZCBieSBgTWFwUmVkdWNlYCBhcmUgc2ltcGx5IHN0b3JlZCBpbiBgQ29tcHV0ZXJSZXN1bHQuTWVtb3J5YCB3LyBubyBkaXNrIHBlcnNpc3RlbmNlIG5lZWRlZC4gKihicmVha2luZykqCisqIEFkZGVkIGBHZW5lcmF0ZWAgc3RlcCBpbnRlcmZhY2Ugd2hpY2ggc3RhdGVzIHRoYXQgdGhlcmUgY291bGQgYmUgYSBmaW5hbCBnZW5lcmF0aW5nIHBoYXNlIHRvIGEgc2lkZS1lZmZlY3Qgb3IgcmVkdWN0aW9uIChlLmcuIGBHcm91cFN0ZXBgKS4KKyogYEJhcnJpZXJgIHN0ZXAgaW50ZXJmYWNlIGlzIG5vdyB0aGUgbWVhbnMgYnkgd2hpY2ggbm9uLXBhcmFsbGVsIHN0ZXBzIGNvbW11bmljYXRlIHdpdGggdGhlaXIgY291bnRlcnBhcnRzIGluIE9MQVAuCisqIEFkZGVkIGBNZW1vcnlDb21wdXRpbmdgIHN0ZXAgaW50ZXJmYWNlIHdoaWNoIHN0YXRlcyB0aGF0IHRoZSBzdGVwIHVzZXMgYE1lbW9yeUNvbXB1dGVLZXlzYCBmb3IgaXRzIGNvbXB1dGF0aW9uIGluIE9MQVAuCisqIEFkZGVkIGBQZWVyUHJlc3N1cmVWZXJ0ZXhQcm9ncmFtU3RlcGAgYW5kIGBHcmFwaFRyYXZlcnNhbC5wZWVyUHJlc3N1cmUoKWAuCisqIEFkZGVkIGBQdXJlVHJhdmVyc2FsYCBmb3IgaGFuZGxpbmcgcHVyZSBhbmQgY29tcGlsZWQgdmVyc2lvbnMgb2YgYSBgVHJhdmVyc2FsYC4gVXNlZnVsIGluIE9MQVAuCisqIEFkZGVkIGBTY3JpcHRUcmF2ZXJzYWxgIHdoaWNoIGFsbG93cyBmb3IgZGVsYXllZCBjb21waWxhdGlvbiBvZiBzY3JpcHQtYmFzZWQgYFRyYXZlcnNhbHNgLgorKiBTaW1wbGlmaWVkIGBWZXJ0ZXhQcm9ncmFtYCBpbXBsZW1lbnRhdGlvbnMgd2l0aCBhIGBQdXJlVHJhdmVyc2FsYC1tb2RlbCBhbmQgZGVwcmVjYXRlZCBgQ29uZmlndXJhdGlvblRyYXZlcnNhbGAuCisqIFNpbXBsaWZpZWQgc2NyaXB0LWJhc2VkIGBUcmF2ZXJzYWxzYCB2aWEgYFNjcmlwdFRyYXZlcnNhbGAgYW5kIGRlcHJlY2F0ZWQgYFRyYXZlcnNhbFNjcmlwdEZ1bmN0aW9uYCBhbmQgYFRyYXZlcnNhbFNjcmlwdEhlbHBlcmAuCisqIEFkZGVkIGBUaW1lc01vZHVsYXRpbmdgIGludGVyZmFjZSB3aGljaCBhbGxvd3MgdGhlIGBTdGVwYCB0byBkZWNpZGUgaG93IGEgYHRpbWVzKClgLW1vZHVsYXRpb24gc2hvdWxkIGJlIGhhbmRsZWQuCisqIEFkZGVkIGBCeU1vZHVsYXRpbmdgIGludGVyZmFjZSB3aGljaCBhbGxvd3MgdGhlIGBTdGVwYCB0byBkZWNpZGUgaG93IGEgYGJ5KClgLW1vZHVsYXRpb24gc2hvdWxkIGJlIGhhbmRsZWQuICooYnJlYWtpbmcpKgorKiBTaW1wbGlmaWVkIHRoZSBgYnkoKWAtbW9kdWxhdGlvbiBwYXR0ZXJucyBvZiBgT3JkZXJHbG9iYWxTdGVwYCBhbmQgYE9yZGVyTG9jYWxTdGVwYC4KKyogQWRkZWQgYEdyYXBoQ29tcHV0ZXJUZXN0LnNob3VsZFN1cHBvcnRQcmVFeGlzdGluZ0NvbXB1dGVLZXlzKClgIHRvIGVuc3VyZSBleGlzdGluZyBjb21wdXRlIGtleXMgYXJlICJyZXZpdmVkLiIgKihicmVha2luZykqCisqIEFkZGVkIGBHcmFwaENvbXB1dGVyVGVzdC5zaG91bGRTdXBwb3J0Sm9iQ2hhaW5pbmcoKWAgdG8gZW5zdXJlIE9MQVAgam9icyBjYW4gYmUgbGluZWFybHkgY2hhaW5lZC4gKihicmVha2luZykqCisqIEZpeGVkIGEgYnVnIGluIGJvdGggYFNwYXJrR3JhcGhDb21wdXRlcmAgYW5kIGBHaXJhcGhHcmFwaENvbXB1dGVyYCByZWdhcmRpbmcgc291cmNlIGRhdGEgYWNjZXNzIGluIGpvYiBjaGFpbnMuCisqIEV4cGFuZGVkIGpvYiBjaGFpbmluZyB0ZXN0IGNvdmVyYWdlIGZvciBgR3JhcGhDb21wdXRlcmAgcHJvdmlkZXJzLgorKiBBZGRlZCBgVHJhdmVyc2FsSGVscGVyLm9uR3JhcGhDb21wdXRlcih0cmF2ZXJzYWwpYC4KKyogYE1hcFJlZHVjZS5tYXAoKWAgbm8gbG9uZ2VyIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uIFRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQuICooYnJlYWtpbmcpKgorKiBgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbWAgY2FuIHdvcmsgd2l0aG91dCBhIGBHcmFwaFN0ZXBgIHN0YXJ0LgorKiBBZGRlZCBgUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtU3RlcGAgYW5kIGBHcmFwaFRyYXZlcnNhbC5wYWdlUmFuaygpYC4KKyogQWRkZWQgYFRyYXZlcnNhbFZlcnRleFByb2dyYW1TdGVwYCB0byBzdXBwb3J0IE9MQVAgdHJhdmVyc2FsIGpvYiBjaGFpbmluZy4KKyogQWRkZWQgYFZlcnRleFByb2dyYW1TdHJhdGVneWAgd2hpY2ggY29tcGlsZXMgbXVsdGlwbGUgT0xBUCBqb2JzIGludG8gYSBzaW5nbGUgdHJhdmVyc2FsLgorKiBTaW1wbGlmaWVkIHRoZSBjb21wYXJhdG9yIG1vZGVsIGluIGBPcmRlckdsb2JhbFN0ZXBgIGFuZCBgT3JkZXJMb2NhbFN0ZXBgLgorKiBSZWZhY3RvcmVkIGBUcmF2ZXJzYWxTb3VyY2VgIG1vZGVsIHRvIGFsbG93IGZsdWVudC1tZXRob2QgY29uc3RydWN0aW9uIG9mIGBUcmF2ZXJzYWxTb3VyY2VzYC4KKyogRGVwcmVjYXRlZCB0aGUgY29uY2VwdCBvZiBhIGBUcmF2ZXJzYWxTb3VyY2UuQnVpbGRlcmAuCisqIFJlbW92ZWQgdGhlIGNvbmNlcHQgb2YgYSBgVHJhdmVyc2FsRW5naW5lYC4gQWxsIGBUcmF2ZXJzYWxgIG1vZHVsYXRpb25zIGFyZSBub3cgbWVkaWF0ZWQgYnkgYFRyYXZlcnNhbFN0cmF0ZWdpZXNgLiAqKGJyZWFraW5nKSoKKyogQWRkZWQgYFNpZGVFZmZlY3RTdHJhdGVneWAgZm9yIHJlZ2lzdGVyaW5nIHNpZGVFZmZlY3RzIGluIGEgc3Bhd25lZCBgVHJhdmVyc2FsYC4KKyogQWRkZWQgYFNhY2tTdHJhdGVneWAgZm9yIHJlZ2lzdGVyaW5nIGEgc2FjayBmb3IgYSBzcGF3bmVkIGBUcmF2ZXJzYWxgLgorKiBBZGRlZCBgUmVxdWlyZW1lbnRzU3RyYXRlZ3lgIGFuZCBgUmVxdWlyZW1lbnRzU3RlcGAgZm9yIGFkZGluZyBkeW5hbWljIGBUcmF2ZXJzZXJSZXF1aXJlbWVudHNgIHRvIGEgYFRyYXZlcnNhbGAuCisqIFJlbW92ZWQgYEVuZ2luZURlcGVuZGVudFN0cmF0ZWd5YC4KKyogUmVuYW1lZCBzdGVwIGludGVyZmFjZSBgRW5naW5lRGVwZW5kZW50YCB0byBgR3JhcGhDb21wdXRpbmdgIHdpdGggbWV0aG9kIGBvbkdyYXBoQ29tcHV0ZXIoKWAuICooYnJlYWtpbmcpKgorKiBDbGVhbmVkIHVwIHZhcmlvdXMgYFRyYXZlcnNhbFN0cmF0ZWd5YCB0ZXN0cyBub3cgdGhhdCBgVHJhdmVyc2FsRW5naW5lYCBubyBsb25nZXIgZXhpc3RzLgorKiBBZGRlZCBgR3JhcGhGaWx0ZXJgIHRvIHN1cHBvcnQgZmlsdGVyaW5nIG91dCB2ZXJ0aWNlcyBhbmQgZWRnZXMgdGhhdCB3b24ndCBiZSB0b3VjaGVkIGJ5IGFuIE9MQVAgam9iLgorKiBBZGRlZCBgR3JhcGhDb21wdXRlci52ZXJ0aWNlcygpYCBhbmQgYEdyYXBoQ29tcHV0ZXIuZWRnZXMoKWAgZm9yIGBHcmFwaEZpbHRlcmAgY29uc3RydWN0aW9uLiAqKGJyZWFraW5nKSoKKyogYFNwYXJrR3JhcGhDb21wdXRlcmAsIGBHaXJhcGhHcmFwaENvbXB1dGVyYCwgYW5kIGBUaW5rZXJHcmFwaENvbXB1dGVyYCBhbGwgc3VwcG9ydCBgR3JhcGhGaWx0ZXJgLgorKiBBZGRlZCBgR3JhcGhDb21wdXRlclRlc3Quc2hvdWxkU3VwcG9ydEdyYXBoRmlsdGVyKClgIHdoaWNoIHZlcmlmaWVzIGFsbCBmaWx0ZXJlZCBncmFwaHMgaGF2ZSB0aGUgc2FtZSB0b3BvbG9neS4KKyogQWRkZWQgYEdyYXBoRmlsdGVyQXdhcmVgIGludGVyZmFjZSB0byBgaGFkb29wLWdyZW1saW4vYCB3aGljaCB0ZWxscyB0aGUgT0xBUCBlbmdpbmUgdGhhdCB0aGUgYElucHV0Rm9ybWF0YCBoYW5kbGVzIGZpbHRlcmluZy4KKyogYEdyeW9JbnB1dEZvcm1hdGAgYW5kIGBTY3JpcHRJbnB1dEZvcm1hdGAgaW1wbGVtZW50IGBHcmFwaEZpbHRlckF3YXJlYC4KKyogQWRkZWQgYEdyYXBoRmlsdGVySW5wdXRGb3JtYXRgIHdoaWNoIGhhbmRsZXMgZ3JhcGggZmlsdGVyaW5nIGZvciBgSW5wdXRGb3JtYXRzYCB0aGF0IGFyZSBub3QgYEdyYXBoRmlsdGVyQXdhcmVgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgVHJhdmVyc2FsSGVscGVyLmlzTG9jYWxTdGFyR3JhcGgoKWAgd2hpY2ggYWxsb3dlZCBjZXJ0YWluIGlsbGVnYWwgdHJhdmVyc2FscyB0byBwYXNzLgorKiBBZGRlZCBgVHJhdmVyc2FsSGVscGVyLmlzTG9jYWxQcm9wZXJ0aWVzKClgIHRvIHZlcmlmeSB0aGF0IHRoZSB0cmF2ZXJzYWwgZG9lcyBub3QgdG91Y2ggaW5jaWRlbnQgZWRnZXMuCisqIGBHcmFwaFJlYWRlcmAgSS9PIGludGVyZmFjZSBub3cgaGFzIGBPcHRpb25hbDxWZXJ0ZXg+IHJlYWRHcmFwaChJbnB1dFN0cmVhbSwgR3JhcGhGaWx0ZXIpYC4gRGVmYXVsdCBgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb25gLgorKiBgR3J5b1JlYWRlcmAgZG9lcyBub3QgbWF0ZXJpYWxpemUgZWRnZXMgdGhhdCB3aWxsIGJlIGZpbHRlcmVkIG91dCBhbmQgdGhpcyBncmVhdGx5IHJlZHVjZXMgR0MgYW5kIGxvYWQgdGltZXMuCisqIENyZWF0ZWQgY3VzdG9tIGBTZXJpYWxpemVyc2AgZm9yIGBTcGFya0dyYXBoQ29tcHV0ZXJgIG1lc3NhZ2UtcGFzc2luZyBjbGFzc2VzIHdoaWNoIHJlZHVjZSBncmFwaCBzaXplcyBzaWduaWZpY2FudGx5LgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtOTUxIEJhcnJpZXIgc3RlcHMgcHJvdmlkZSB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gR3JlbWxpbiBPTEFQCisqIFRJTktFUlBPUC0xMDU3IEdyb3VwU2lkZUVmZmVjdFN0ZXAgZG9lc24ndCB1c2UgcHJvdmlkZWQgbWFwcworKiBUSU5LRVJQT1AtMTEwMyBUd28gb2JqZWN0cyBmaWdodGluZyBmb3IgbG9jYWwgdmFyaWFibGUgbmFtZSBpbiBHcmVtbGluIENvbnNvbGUgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMTQ5IFRyYXZlcnNhbFhYWFN0ZXBzIEFyZW4ndCBQcm92aWRpbmcgU2lkZUVmZmVjdHMKKyogVElOS0VSUE9QLTExODEgc2VsZWN0KENvbHVtbikgc2hvdWxkIG5vdCB1c2UgYSBMYW1iZGFNYXBTdGVwCisqIFRJTktFUlBPUC0xMTg4IFNlbWFudGljcyBvZiBCYXJyaWVyU3RlcHMgaW4gVHJhdmVyc2FsUGFyZW50IGdsb2JhbCB0cmF2ZXJzYWxzIGlzIHdyb25nLiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTExOTQgZXhwbGFpbigpIHNlZW1zIGJyb2tlbgorKiBUSU5LRVJQT1AtMTIxNyBSZXBlYXRlZCBMb2dnaW5nIG9mICJUaGUgSGFkb29wUG9vbHMgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLCB1c2luZyB0aGUgZGVmYXVsdCBwb29sIgorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC01NzAgW1Byb3Bvc2FsXSBQcm92aWRlIHN1cHBvcnQgZm9yIE9MQVAgdG8gT0xUUCB0byBPTEFQIHRvIE9MVFAKKyogVElOS0VSUE9QLTU3NSBJbXBsZW1lbnQgUmVtb3RlR3JhcGgKKyogVElOS0VSUE9QLTgxMyBbUHJvcG9zYWxdIE1ha2UgdGhlIEdyZW1saW4gR3JhcGggVHJhdmVyc2FsIE1hY2hpbmUgYW5kIEluc3RydWN0aW9uIFNldCBFeHBsaWNpdAorKiBUSU5LRVJQT1AtODcyIFJlbW92ZSBHcm91cENvdW50U3RlcCBpbiBmYXZvciBvZiBuZXcgUmVkdWNlLWJhc2VkIEdyb3VwU3RlcAorKiBUSU5LRVJQT1AtODkwIFJlbW92ZSB0aGUgY29uY2VwdCBvZiBicmFuY2gvIHBhY2thZ2UuICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtOTU4IEltcHJvdmUgdXNhYmlsaXR5IG9mIC5wcm9maWxlKCkgc3RlcC4KKyogVElOS0VSUE9QLTk2MiBQcm92aWRlICJ2ZXJ0ZXggcXVlcnkiIHNlbGVjdGl2aXR5IHdoZW4gaW1wb3J0aW5nIGRhdGEgaW4gT0xBUC4gKihicmVha2luZykqCisqIFRJTktFUlBPUC05NjggQWRkIGZpcnN0IGNsYXNzIHN1cHBvcnQgZm9yIGFuIG9wdGlvbmFsIHRyYXZlcnNhbAorKiBUSU5LRVJQT1AtOTcxIFRyYXZlcnNhbFNvdXJjZSBzaG91bGQgYmUgZmx1ZW50IGxpa2UgR3JhcGhDb21wdXRlciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEwMTYgUmVwbGFjZSBqdW5pdC1iZW5jaG1hcmtzIHdpdGggSk1ICisqIFRJTktFUlBPUC0xMDIxIERlcHJlY2F0ZSBPcmRlci52YWx1ZUluY3IsIE9yZGVyLnZhbHVlRGVjciwgT3JkZXIua2V5SW5jciwgYW5kIE9yZGVyLmtleURlY3IgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMDMyIENsZWFuIHVwIHRoZSBjb25mL2hhZG9vcCBjb25maWd1cmF0aW9ucworKiBUSU5LRVJQT1AtMTAzNCBCdW1wIHRvIHN1cHBvcnQgU3BhcmsgMS41LjIKKyogVElOS0VSUE9QLTEwNjkgU3VwcG9ydCBTcGFyayAxLjYuMAorKiBUSU5LRVJQT1AtMTA4MiBJTlBVVF9SREQgYW5kIElOUFVUX0ZPUk1BVCBhcmUgYmFkLCB3ZSBzaG91bGQganVzdCBoYXZlIG9uZSBrZXkuCisqIFRJTktFUlBPUC0xMTEyIENyZWF0ZSBHcnlvU2VyaWFsaXplcnMgZm9yIHRoZSBTcGFyayBQYXlsb2FkIGNsYXNzZXMuCisqIFRJTktFUlBPUC0xMTIxIEZpbGVTeXN0ZW1TdG9yYWdlIG5lZWRzIHRvIGJlIHNtYXJ0IGFib3V0IC8uCisqIFRJTktFUlBPUC0xMTMyIE1lc3Nlbmdlci5yZWNlaXZlTWVzc2FnZXMoKSBJdGVyYXRvciBzaG91bGQgLnJlbW92ZSgpLgorKiBUSU5LRVJQT1AtMTE0MCBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtU3RlcCBpbiBzdXBwb3J0IG9mIE9MQVAvT0xUUCBjb252ZXJzaW9ucy4KKyogVElOS0VSUE9QLTExNTMgQWRkIEJ5TW9kdWxhdGluZyBhbmQgVGltZXNNb2R1bGF0aW5nIGludGVyZmFjZXMuCisqIFRJTktFUlBPUC0xMTU0IENyZWF0ZSBhIFNjcmlwdFRyYXZlcnNhbCB3aGljaCBpcyBTZXJpYWxpemFibGUgYW5kIGF1dG8tY29tcGlsZXMuCisqIFRJTktFUlBPUC0xMTYyIEFkZCBWZXJ0ZXhQcm9ncmFtLmdldFRyYW5zaWVudENvbXB1dGVLZXlzKCkgZm9yIHJlbW92aW5nIHNjcmF0Y2gtZGF0YS4gKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMTYzIEdyYXBoQ29tcHV0ZXIncyBjYW4gaGF2ZSBUcmF2ZXJzYWxTdHJhdGVnaWVzLgorKiBUSU5LRVJQT1AtMTE2NCBSZWR1Y2luZ0JhcnJpZXJzU3RlcHMgc2hvdWxkIHVzZSBDb21wdXRlck1lbW9yeSwgbm90IE1hcFJlZHVjZS4KKyogVElOS0VSUE9QLTExNjYgQWRkIE1lbW9yeS5yZWR1Y2UoKSBhcyBvcHRpb24gdG8gTWVtb3J5IGltcGxlbWVudGF0aW9ucy4gKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMTczIElmIG5vIFNlcmlhbGl6ZXIgaXMgcHJvdmlkZWQgaW4gQ29uZmlndXJhdGlvbiwgdXNlIEdyeW9TZXJpYWxpemVyIGJ5IGRlZmF1bHQgKFNwYXJrKQorKiBUSU5LRVJQT1AtMTE4MCBBZGQgbW9yZSBvcHRpbWl6ZWQgYmluYXJ5IG9wZXJhdG9ycyB0byBPcGVyYXRvci4KKyogVElOS0VSUE9QLTExOTIgVHJhdmVyc2FsU2lkZUVmZmVjdHMgc2hvdWxkIHN1cHBvcnQgcmVnaXN0ZXJlZCByZWR1Y2VycyAoYmluYXJ5IG9wZXJhdG9ycykuCisqIFRJTktFUlBPUC0xMTkzIEFkZCBhIExvY2FsQmFycmllciBpbnRlcmZhY2UuCisqIFRJTktFUlBPUC0xMTk5IFVzZSAiTWljcm9NZXRyaWNzIiBhcyB0aGUgbXV0YXRvciBvZiB0aGUgVHJhdmVyc2FsTWV0cmljcy4KKyogVElOS0VSUE9QLTEyMDYgRXhwYW5kYWJsZUl0ZXJhdG9yIGNhbiB0YWtlIGEgZnVsbCBUcmF2ZXJzZXJTZXQgYXQgb25jZSAtLSBCYXJyaWVycy4KKyogVElOS0VSUE9QLTEyMDkgQ29tcGFyYXRvckhvbGRlciBzaG91bGQgcmV0dXJucyBhIFBhaXI8VHJhdmVyc2FsLENvbXBhcmF0b3I+LiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEyMTAgUHJvdmlkZSBhbiBPcmRlckxpbWl0U3RlcCBhcyBhbiBvcHRpbWl6YXRpb24uCisqIFRJTktFUlBPUC0xMjE5IENyZWF0ZSBhIHRlc3QgY2FzZSB0aGF0IGVuc3VyZXMgdGhlIHByb3ZpZGVyJ3MgY29tcGlsYXRpb24gb2YgZy5WKHgpIGFuZCBnLlYoKS5oYXNJZCh4KSBpcyBpZGVudGljYWwgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMjIyIEFsbG93IGRlZmF1bHQgR3JhcGhDb21wdXRlciBjb25maWd1cmF0aW9uCisqIFRJTktFUlBPUC0xMjIzIEFsbG93IGphcnMgaW4gZ3JlbWxpbi5kaXN0cmlidXRlZEphcnMgdG8gYmUgcmVhZCBmcm9tIEhERlMKKyogVElOS0VSUE9QLTEyMjUgRG8gYSAicm9sbGluZyByZWR1Y2UiIGZvciBHcm91cFhYWFN0ZXAgaW4gT0xBUC4KKyogVElOS0VSUE9QLTEyMjcgQWRkIE1ldHJpY3MgZm9yIHRoZSBUcmF2ZXJzYWxPcFByb2Nlc3NvcgorKiBUSU5LRVJQT1AtMTIzNCBwcm9ncmFtKCkgc3RlcCB0aGF0IHRha2VzIGFyYml0cmFyeSB2ZXJ0ZXggcHJvZ3JhbXMKKyogVElOS0VSUE9QLTEyMzYgU2VsZWN0RGVub3JtYWxpemF0aW9uU3RyYXRlZ3kgZm9yIHNlbGVjdCgpLmJ5KHN0YXJHcmFwaCkgaW4gT0xBUC4KKyogVElOS0VSUE9QLTEyMzcgUHJvamVjdE1hcDogRm9yIHRoZSBMb3ZlIG9mIERpZSBGYXRlcmxhbmQKKyogVElOS0VSUE9QLTEyMzggUmUtdXNlIENsaWVudCBpbnN0YW5jZXMgaW4gUmVtb3RlR3JhcGggdGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MgYi9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2MmY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjMueC5hc2NpaWRvYwpAQCAtMCwwICsxLDc3OSBAQAorLy8vLworTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLy8vLworPT0gVGlua2VyUG9wIDMuMy4wIChHcmVtbGluIFN5bXBob255ICM0MCBpbiBHIE1pbm9yKQorCitpbWFnZTo6aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2FwYWNoZS90aW5rZXJwb3AvbWFzdGVyL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLW1vemFydC5wbmdbd2lkdGg9MTg1XQorCitbW3JlbGVhc2UtMy0zLTExXV0KKz09PSBUaW5rZXJQb3AgMy4zLjExIChSZWxlYXNlIERhdGU6IEp1bmUgMSwgMjAyMCkKKworKiBBZGRlZCBgdHJ1c3RTdG9yZVR5cGVgIHN1Y2ggdGhhdCBrZXlzdG9yZSBhbmQgdHJ1c3RzdG9yZSBjYW4gYmUgb2YgZGlmZmVyZW50IHR5cGVzIGluIHRoZSBKYXZhIGRyaXZlci4KKyogQWRkZWQgc2Vzc2lvbiBzdXBwb3J0IHRvIGFsbCBHTFZzOiBKYXZhc2NyaXB0LCAuTkVUIGFuZCBQeXRob24uCisqIEZpeGVkIGJ1ZyBpbiBHcmVtbGluIFNlcnZlciBzaHV0ZG93biBpZiBmYWlsdXJlcyBvY2N1cnJlZCBkdXJpbmcgYEdyYXBoTWFuYWdlcmAgaW5pdGlhbGl6YXRpb24uCisqIE1vZGlmaWVkIEdyZW1saW4gU2VydmVyIHRvIGNsb3NlIHRoZSBzZXNzaW9uIHdoZW4gdGhlIGNoYW5uZWwgaXRzZWxmIGlzIGNsb3NlZC4KKyogRml4ZWQgYnVnIGluIGBPcmRlcmAgd2hlcmUgY29tcGFyaXNvbnMgb2YgYGVudW1gIHR5cGVzIHdvdWxkbid0IGNvbXBhcmUgd2l0aCBgU3RyaW5nYCB2YWx1ZXMuCisqIEFkZGVkIGBtYXhXYWl0Rm9yQ2xvc2VgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIHRoZSBKYXZhIGRyaXZlci4KKyogRGVwcmVjYXRlZCBgbWF4V2FpdEZvclNlc3Npb25DbG9zZWAgaW4gdGhlIEphdmEgZHJpdmVyLgorKiBCdW1wZWQgdG8gSmFja3NvbiAyLjkuMTAuNC4KKyogUmVtb3ZlIGludmFsaWQgc2VydmljZSBkZXNjcmlwdG9ycyBmcm9tIGdyZW1saW4tc2hhZGVkLgorKiBGaXhlZCBidWcgaW4gUHl0aG9uIGFuZCAuTkVUIHRyYXZlcnNhbCBgY2xvbmUoKWAgd2hlcmUgZGVlcCBjb3BpZXMgb2YgYnl0ZWNvZGUgd2VyZSBub3Qgb2NjdXJyaW5nLgorKiBGaXhlZCBidWcgd2hlcmUgYHByb2ZpbGUoKWAgd2FzIGZvcmNpbmcgYExhenlCYXJyaWVyU3RyYXRlZ3lgIHRvIGFkZCBhbiBleHRyYSBgYmFycmllcigpYCB0byB0aGUgZW5kIG9mIHRyYXZlcnNhbHMuCisqIEZpeGVkIGJ1ZyBpbiBQeXRob24gYWJvdXQgaW50ZWdlciBzZXJpYWxpemVyIHdoaWNoIHdhcyBvdXQgb2YgcmFuZ2Ugb2YgYGc6SW50MzJgCisqIEJ1bXBlZCBjb21tb25zLWNvZGVjIDEuMTQKKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIzNDcgUmVtb3ZlIGludmFsaWQgc2VydmljZSBkZXNjcmlwdG9ycyBmcm9tIGdyZW1saW4tc2hhZGVkCisqIFRJTktFUlBPUC0yMzUwIGNsb25lKCkgaXMgbm90IGRlZXAgY29weWluZyBUcmF2ZXJzYWwgaW50ZXJuYWxzCisqIFRJTktFUlBPUC0yMzUxIExvY2FsIE1hcCBvcmRlcmluZyBvZiBrZXlzIGNhbiBnZW5lcmF0ZSBjYXN0IGVycm9ycworKiBUSU5LRVJQT1AtMjM1MyBFcnJvciB3aGlsZSBTaHV0dGluZyBEb3duIEdyZW1saW4gU2VydmVyCisqIFRJTktFUlBPUC0yMzU1IEphY2tzb24tZGF0YWJpbmQgdmVyc2lvbiBpbiBHcmVtbGluIHNoYWRlZCBkZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGluY3JlYXNlZCAgLSBpbnRyb2R1Y2VzIHZ1bG5lcmFiaWxpdHkgaXNzdWVzCisqIFRJTktFUlBPUC0yMzYwIGZhaWxlZCB0byBkZXNlcmlhbGl6ZXIgaW50MzIgd2hlbiBncmVtbGluLXB5dGhvbiBzdWJtaXQgYnl0ZWNvZGUgd2l0aCBhIGJpZyBpbnQgdmFsdWUKKyogVElOS0VSUE9QLTIzNjUgTGF6eUJhcnJpZXJTdHJhdGVneSBhZGRzIGEgTm9PcEJhcnJpZXJTdGVwIHdoZW4gcHJvZmlsZSgpIGlzIHByZXNlbnQKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjMzNiBBbGxvdyBjbG9zZSBvZiBjaGFubmVsIHdpdGhvdXQgaGF2aW5nIHRvIHdhaXQgZm9yIHNlcnZlcgorKiBUSU5LRVJQT1AtMjMzOSBHcmVtbGluLk5ldDogVXBkYXRlIFN5c3RlbS5OZXQuV2ViU29ja2V0cy5DbGllbnQgZGVwZW5kZW5jeQorKiBUSU5LRVJQT1AtMjM1NCBEb2N1bWVudCByZWNvbW1lbmRhdGlvbiB0byByZXVzZSBncmFwaCB0cmF2ZXJzYWwgc291cmNlCisKK1tbcmVsZWFzZS0zLTMtMTBdXQorPT09IFRpbmtlclBvcCAzLjMuMTAgKFJlbGVhc2UgRGF0ZTogRmVicnVhcnkgMywgMjAyMCkKKworKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGEgYENsdXN0ZXJgIHdpdGggYSBiYWQgYENoYW5uZWxpemVyYCBjb25maWd1cmF0aW9uIGluIHRoZSBKYXZhIGRyaXZlci4KKyogTWFkZSBgQ2x1c3RlcmAgYmUgYWJsZSB0byBvcGVuIGNvbmZpZ3VyYXRpb24gZmlsZSBvbiByZXNvdXJjZXMgZGlyZWN0b3J5LgorKiBJbXBsZW1lbnRlZCBgVHJhdmVyc2FsLmNsb25lKClgIG9wZXJhdGlvbnMgZm9yIGFsbCBsYW5ndWFnZSB2YXJpYW50cy4KKyogUmVmYWN0b3JlZCBgUGF0aFByb2Nlc3NvclN0cmF0ZWd5YCB0byB1c2UgdGhlIG1hcmtlciBtb2RlbC4KKyogQnVtcGVkIHRvIFRvcm5hZG8gNS54IGZvciBncmVtbGluLXB5dGhvbi4KKyogU3RhcnRlZCBrZWVwLWFsaXZlIHBvbGxpbmcgb24gYENvbm5lY3Rpb25gIGNvbnN0cnVjdGlvbiB0byBlbnN1cmUgdGhhdCBhIGBDb25uZWN0aW9uYCBkb2Vzbid0IGRpZSBpbiB0aGUgcG9vbC4KKyogRGVwcmVjYXRlZCBgVHJhdmVyc2FsU3RyYXRlZ2llcy5hcHBseVN0cmF0ZWdpZXMoKWAuCisqIERlcHJlY2F0ZWQgSnl0aG9uIHN1cHBvcnQgaW4gYGdyZW1saW4tcHl0aG9uYC4KKyogRGVwcmVjYXRlZCBgTmlvQ2hhbm5lbGl6ZXJgIGFuZCByZWxhdGVkIGNsYXNzZXMgaW4gYGdyZW1saW4tZHJpdmVyYCBhbmQgYGdyZW1saW4tc2VydmVyYC4KKyogRml4ZWQgYSBidWcgaW4gdGhlIGBDbGFzc0NhY2hlUmVxdWVzdENvdW50YCBtZXRyaWMgZm9yIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCB3aGljaCB3YXNuJ3QgaW5jbHVkaW5nIHRoZSBjYWNoZSBoaXQgY291bnQsIG9ubHkgdGhlIG1pc3Nlcy4KKyogSW1wcm92ZWQgR3JlbWxpbiBTZXJ2ZXIgZXhlY3V0b3IgdGhyZWFkIGhhbmRsaW5nIG9uIGNsaWVudCBjbG9zZSByZXF1ZXN0cy4KKyogUmV2ZXJ0ZWQ6IE1vZGlmaWVkIEphdmEgZHJpdmVyIHRvIHVzZSBJUCBhZGRyZXNzIHJhdGhlciB0aGFuIGhvc3RuYW1lIHRvIGNyZWF0ZSBjb25uZWN0aW9ucy4KKyogQWxsb3cgY3VzdG9tIFhNTElucHV0RmFjdG9yeSB0byBiZSB1c2VkIHdpdGggR3JhcGhNTFJlYWRlci4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIxNzUgRXhlY3V0b3IgdGhyZWFkIGlzIG5vdCByZXR1cm5lZCBvbiBjaGFubmVsIGNsb3NlCisqIFRJTktFUlBPUC0yMjY2IEtlZXAgYWxpdmUgbm90IHN0YXJ0ZWQgYXQgY29ubmVjdGlvbiBjcmVhdGlvbgorKiBUSU5LRVJQT1AtMjI3NCBUZXN0IG9mIFRpbmtlckdyYXBoIEdyZW1saW4gZmFpbCBvbiBXaW5kb3dzIGFuZCBub24gRU4gbG9jYWxlCisqIFRJTktFUlBPUC0yMzMyIEphdmFTY3JpcHQgR0xWOiBzdHJ1Y3R1cmUgZWxlbWVudCB0b1N0cmluZygpIHNob3VsZCBpbnRlcm5hbGx5IGNhbGwgdG9TdHJpbmcoKQorKiBUSU5LRVJQT1AtMjMzMyBKYXZhU2NyaXB0IEdMVjogR3JhcGhTT04yLzMgRWRnZSBkZXNlcmlhbGl6YXRpb24gaXMgaW52YWxpZAorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0yMzA3IEFkZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBmb3IgYmFkbHkgY29uZmlndXJlZCBDaGFubmVsaXplcgorKiBUSU5LRVJQT1AtMjMwOSBCdW1wIGdyZW1saW5weXRob24gdG8gVG9ybmFkbyA1LngKKyogVElOS0VSUE9QLTIzMTUgSW1wbGVtZW50IHNvbWUgZm9ybSBvZiBjbG9uZSgpIG9yIHJlc2V0KCkgZm9yIFRyYXZlcnNhbCBpbiBHTFZzCisqIFRJTktFUlBPUC0yMzIwIFtTRUNVUklUWV0gWE1MSW5wdXRGYWN0b3J5IGluaXRpYWxpemF0aW9uIGluIEdyYXBoTUxSZWFkZXIgaW50cm9kdWNlcworKiBUSU5LRVJQT1AtMjMyMiBEZXByZWNhdGUgSnl0aG9uIHN1cHBvcnQKKyogVElOS0VSUE9QLTIzMjQgRGVwcmVjYXRlIHRoZSByYXcgTklPIHN1cHBvcnQgaW4gdGhlIEphdmEgZHJpdmVyCisqIFRJTktFUlBPUC0yMzI5IEphdmFTY3JpcHQgR0xWOiBVcGRhdGUgd2Vic29ja2V0IGxpYnJhcnkgZGVwZW5kZW5jeQorKiBUSU5LRVJQT1AtMjMzMCBKYXZhU2NyaXB0IEdMViBzaG91bGQgZXhwb3NlIEdyYXBoU09OMldyaXRlciBhbmQgR3JhcGhTT05SZWFkZXIKKworW1tyZWxlYXNlLTMtMy05XV0KKz09PSBUaW5rZXJQb3AgMy4zLjkgKFJlbGVhc2UgRGF0ZTogT2N0b2JlciAxNCwgMjAxOSkKKworKiBFeHBvc2VkIHJlc3BvbnNlIHN0YXR1cyBhdHRyaWJ1dGVzIGluIGEgYFJlc3BvbnNlRXJyb3JgIGluIGdyZW1saW4tamF2YXNjcmlwdC4KKyogQWRkZWQgYEltbXV0YWJsZUV4cGxhbmF0aW9uYCBmb3IgYSBgVHJhdmVyc2FsRXhwbGFuYXRpb25gIHRoYXQganVzdCBjb250YWlucyBkYXRhLgorKiBBZGRlZCBzdXBwb3J0IGZvciBgVW5hcnlPcGVyYXRvcmAgYW5kIGBCaW5hcnlPcGVyYXRvcmAgZm9yIGBMYW1iZGFgIGluc3RhbmNlcy4KKyogRml4ZWQgYFRyYXZlcnNhbEV4cGxhbmF0aW9uYCBkZXNlcmlhbGl6YXRpb24gaW4gR3JhcGhTT04gMiBhbmQgMyB3aGljaCB3YXMgbm90IHN1cHBvcnRlZCBiZWZvcmUgaW4gSmF2YS4KKyogQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIHJlcXVlc3QgaGVhZGVycyBpbiBQeXRob24uCisqIEZpeGVkIEphdmEgRFNMIGFubm90YXRpb24gZm9yIGdlbmVyYXRpb24gb2YgYGFkZEUoKWAgd2hpY2ggd2FzIGZvcm1lcmx5IGNhbGxpbmcgdGhlIHdyb25nIHN0ZXAuCisqIERlcHJlY2F0ZWQgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCBpbiBmYXZvciBvZiB0aGUgbW9yZSBnZW5lcmljIGBldmFsdWF0aW9uVGltZW91dGAuCisqIEJ1bXBlZCBqYWNrc29uLWRhdGFiaW5kIHRvIDIuOS4xMCBkdWUgdG8gQ1ZFLTIwMTktMTQzNzksIENWRS0yMDE5LTE0NTQwLCBDVkUtMjAxOS0xNjMzNS4KKyogQWRkZWQgYFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5YCB0byBhbGxvdyB3YXJuaW5ncyBvciBleGNlcHRpb25zIHdoZW4gY2VydGFpbiBrZXlzIGFyZSB1c2VkIGZvciBwcm9wZXJ0aWVzLgorKiBBZGRlZCB0aGUgYEFic3RyYWN0V2FybmluZ1ZlcmlmaWNhdGlvblN0cmF0ZWd5YCBiYXNlIGNsYXNzIGZvciAid2FybmluZyIgc3R5bGUgYFZlcmlmaWNhdGlvblN0cmF0ZWd5YCBpbXBsZW1lbnRhdGlvbnMuCisqIFJlZmFjdG9yZWQgYEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5YCB0byB1c2UgYEFic3RyYWN0V2FybmluZ1ZlcmlmaWNhdGlvblN0cmF0ZWd5YC4KKyogQWRkZWQgYEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5YCB0byBQeXRob24uCisqIEltcHJvdmVkIGhhbmRsaW5nIG9mIGBudWxsYCB2YWx1ZXMgaW4gYnl0ZWNvZGUgY29uc3RydWN0aW9uLgorKiBGaXhlZCBKYXZhIGRyaXZlciBhdXRoZW50aWNhdGlvbiBwcm9ibGVtcyB3aGVuIGNhbGxpbmcgdGhlIGRyaXZlciBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisqIE1vZGlmaWVkIEphdmEgZHJpdmVyIHRvIHVzZSBJUCBhZGRyZXNzIHJhdGhlciB0aGFuIGhvc3RuYW1lIHRvIGNyZWF0ZSBjb25uZWN0aW9ucy4KKyogRml4ZWQgcG90ZW50aWFsIGZvciBgTnVsbFBvaW50ZXJFeGNlcHRpb25gIHdpdGggZW1wdHkgaWRlbnRpZmllcnMgaW4gYEdyYXBoU3RlcGAuCisqIFBvc3Rwb25lZCB0aGUgdGltaW5nIG9mIHRyYW5zcG9ydCBjcmVhdGlvbiB0byBgY29ubmVjdGlvbi53cml0ZWAgaW4gR3JlbWxpbiBQeXRob24uCisqIE1hZGUgYEV2ZW50U3RyYXRlZ3lgIGNvbXBhdGlibGUgd2l0aCBtdWx0aS12YWx1ZWQgcHJvcGVydGllcy4KKyogQ2hhbmdlZCBgVHJhdmVyc2FsT3BQcm9jZXNzb3JgIHRvIHRocm93IGEgYFNFUlZFUl9FUlJPUl9TQ1JJUFRfRVZBTFVBVElPTmAgKDU5NykgaWYgbGFtYmRhcyBkb24ndCBjb21waWxlLgorKiBCdW1wZWQgYGNvbW1vbnMtY29tcHJlc3NgIHRvIDEuMTkgZHVlIHRvIENWRS0yMDE4LTExNzcxLgorKiBncmVtbGluLWphdmFzY3JpcHQ6IFVzZSBgc29ja2V0RXJyb3JgIENvbm5lY3Rpb24gZXZlbnQgdG8gcHJldmVudCBleGl0IG9uIGVycm9yIGFuZCBleHBvc2UgQ29ubmVjdGlvbiBldmVudHMuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0yMTU5IEV2ZW50U3RyYXRlZ3kgZG9lc24ndCBoYW5kbGUgbXVsdGktdmFsdWVkIHByb3BlcnRpZXMKKyogVElOS0VSUE9QLTIyODMgR3JhcGhTdGVwJ3MgaWRzIG51bGwgZXhjZXB0aW9uCisqIFRJTktFUlBPUC0yMjg1IEVycm9yIG9iamVjdCBpcyB1bnJlYWNoYWJsZQorKiBUSU5LRVJQT1AtMjI4OSBVc2UgYWRkcmVzcyBpbnN0ZWFkIG9mIGhvc3RuYW1lIGZvciBjb25uZWN0aW9uCisqIFRJTktFUlBPUC0yMjkwIEphdmFzY3JpcHQgR0xWIGNvbm5lY3Rpb24gcmVmdXNlZCBlcnJvciBoYW5kbGluZworKiBUSU5LRVJQT1AtMjI5MSBUcmF2ZXJzYWxFeHBsYW5hdGlvbiBkZXNlcmlhbGl6YXRpb24gaW4gR3JhcGhTT04KKyogVElOS0VSUE9QLTIyOTggQnl0ZWNvZGUuamF2YSAgZmxhdHRlbkFyZ3VtZW50cyB0aHJvdyBleGNlcHRpb24gd2hlbiBudWxsCisqIFRJTktFUlBPUC0yMzAzIEdyZW1saW5Ec2wgZ2VuZXJhdGUgYWRkViBpbnN0ZWFkIG9mIGFkZEUKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTgxMCBBZGQgTGFtYmRhLmJpbmFyeU9wZXJhdG9yIGFuZCBMYW1iZGEudW5hcnlPcGVyYXRvcgorKiBUSU5LRVJQT1AtMTgzOCBQeXRob24gc2FtcGxlIHNjcmlwdAorKiBUSU5LRVJQT1AtMjA0NiBHcmVtbGluLVB5dGhvbjogU3VwcG9ydCBjdXN0b20gcmVxdWVzdCBoZWFkZXJzIGluIFdlYlNvY2tldCByZXF1ZXN0CisqIFRJTktFUlBPUC0yMjEzIFJlcGxhY2Ugc2NyaXB0RXZhbHVhdGlvblRpbWVvdXQgaW4gZmF2b3Igb2Ygc29tZXRoaW5nIG1vcmUgc3VpdGFibGUgdG8gYnl0ZWNvZGUKKyogVElOS0VSUE9QLTIyNzUgVXBkYXRlIGphY2tzb24gZGF0YWJpbmQgMi45LjkuMysKKyogVElOS0VSUE9QLTIyNzcgUHl0aG9uIHNkayBwb3N0cG9uZSB0aGUgdGltaW5nIHRvIGNyZWF0ZSB0cmFuc3BvcnQKKyogVElOS0VSUE9QLTIyODAgUHJldmVudCB1c2Ugb2YgVCB2YWx1ZXMgYXMgcHJvcGVydHkga2V5IG92ZXJsb2FkcworCitbW3JlbGVhc2UtMy0zLThdXQorPT09IFRpbmtlclBvcCAzLjMuOCAoUmVsZWFzZSBEYXRlOiBBdWd1c3QgNSwgMjAxOSkKKworKiBQcm92aWRlZCBzdXBwb3J0IGZvciBgd2l0aENvbXB1dGVyKClgIGluIGdyZW1saW4tamF2YXNjcmlwdC4KKyogRGVwcmVjYXRlZCByZW1vdGUgdHJhdmVyc2FsIHNpZGUtZWZmZWN0IHJldHJpZXZhbCBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS4KKyogQnVtcGVkIHRvIEdyb292eSAyLjQuMTcuCisqIEJ1bXBlZCB0byBKYWNrc29uIERhdGFiaW5kIDIuOS45LjEuCisqIEZpeGVkIGJ1ZyB3aXRoIFB5dGhvbiBpbiBgZzpEYXRlYCBvZiBHcmFwaFNPTiB3aGVyZSBsb2NhbCB0aW1lIHpvbmUgd2FzIGJlaW5nIHVzZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gc2VyaWFsaXplIG11bHRpLXByb3BlcnRpZXMgdG8gR3JhcGhNTC4KKyogRGVwcmVjYXRlZCBtdWx0aS9tZXRhLXByb3BlcnR5IHN1cHBvcnQgaW4gYE5lbzRqR3JhcGhgLgorKiBJbXByb3ZlZCBleGNlcHRpb24gYW5kIG1lc3NhZ2luZyBmb3IgZ3QvZ3RlL2x0L2x0ZSB3aGVuIG9uZSBvZiB0aGUgb2JqZWN0IGlzbid0IGEgYENvbXBhcmFibGVgLgorKiBBZGRlZCB0ZXN0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGZvciBzdG9yYWdlIGl0ZXJhdG9yIGxlYWsuCisqIEZpeGVkIG11bHRpcGxlIGl0ZXJhdG9yIGxlYWtzIGluIHF1ZXJ5IHByb2Nlc3Nvci4KKyogRml4ZWQgYG9wdGlvbmFsKClgIHNvIHRoYXQgdGhlIGNoaWxkIHRyYXZlcnNhbCBpcyB0cmVhdGVkIGFzIGxvY2FsLgorKiBDaGFuZ2VkIGRlZmF1bHQga2VlcC1hbGl2ZSB0aW1lIGZvciBkcml2ZXIgdG8gMyBtaW51dGVzLgorKiBGaXhlZCBidWcgd2hlcmUgc2VydmVyLXNpZGUga2VlcC1hbGl2ZSB3YXMgbm90IGFsd2F5cyBkaXNhYmxlZCB3aGVuIGl0cyBzZXR0aW5nIHdhcyB6ZXJvLgorKiBBZGRlZCBzdXBwb3J0IGZvciBgaGFzTmV4dCgpYCBpbiBKYXZhc2NyaXB0IGFuZCAuTkVULgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGludmFsaWQgaW5wdXRzIHRvIHRoZSBUaW5rZXJHcmFwaCBgSWRNYW5hZ2VyYCBpbnN0YW5jZXMuCisqIEZvcmNlZCByZXBsYWNlbWVudCBvZiBjb25uZWN0aW9ucyBpbiBKYXZhIGRyaXZlciBmb3IgY2VydGFpbiBleGNlcHRpb24gdHlwZXMgdGhhdCBzZWVtIHRvIHVsdGltYXRlbHkga2lsbCB0aGUgY29ubmVjdGlvbi4KKyogQ2hhbmdlZCB0aGUgYHJldmVyc2UoKWAgb2YgYGRlc2NgIGFuZCBgYXNjYCBvbiBgT3JkZXJgIHRvIG5vdCB1c2UgdGhlIGRlcHJlY2F0ZWQgYGRlY3JgIGFuZCBgaW5jcmAuCisqIEZpeGVkIGJ1ZyBpbiBgTWF0Y2hTdGVwYCB3aGVyZSB0aGUgY29ycmVjdCB3YXMgbm90IHByb3Blcmx5IGRldGVybWluZWQuCisqIEZpeGVkIGJ1ZyB3aGVyZSBjbGllbnQvc2VydmVyIGV4Y2VwdGlvbiBtaXNtYXRjaCB3aGVuIHNlcnZlciB0aHJvdyBTdGFja092ZXJmbG93RXJyb3IKKyogQWRkZWQgdW5kZXJzY29yZSBzdWZmaXhlZCBzdGVwcyBhbmQgdG9rZW5zIGluIEdyZW1saW4tUHl0aG9uIHRoYXQgY29uZmxpY3Qgd2l0aCBnbG9iYWwgZnVuY3Rpb24gbmFtZXMuCisqIFByZXZlbnQgZXhjZXB0aW9uIHdoZW4gY2xvc2luZyBhIHNlc3Npb24gdGhhdCBkb2Vzbid0IGV4aXN0LgorKiBBbGxvdyBwcmVkaWNhdGVzIGFuZCB0cmF2ZXJzYWxzIHRvIGJlIHVzZWQgYXMgb3B0aW9ucyBpbiBgQnJhbmNoU3RlcGAuCisqIEVuc3VyZSBvbmx5IGEgc2luZ2xlIGZpbmFsIHJlc3BvbnNlIGlzIHNlbnQgdG8gdGhlIGNsaWVudCB3aXRoIEdyZW1saW4gU2VydmVyLgorKiBEZXByZWNhdGVkIGBSZXNwb25zZUhhbmRsZXJDb250ZXh0YCB3aXRoIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUgYW5kIGZvbGRlZCBpdHMgZnVuY3Rpb25hbGl0eSBpbnRvIGBDb250ZXh0YCBpbiBHcmVtbGluIFNlcnZlci4KKyogSW1wcm92ZWQgcGVyZm9ybWFuY2Ugb2YgYGFnZ3JlZ2F0ZSgpYCBieSBhdm9pZGluZyBleGNlc3NpdmUgY2FsbHMgdG8gYGhhc05leHQoKWAgd2hlbiB0aGUgYmFycmllciBpcyBlbXB0eS4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTE2MTkgVGlua2VyR3JhcGhDb21wdXRlciB3b3JrZXIgY291bnQgYWZmZWN0cyBPcHRpb25hbFN0ZXAgcXVlcnkgcmVzdWx0cworKiBUSU5LRVJQT1AtMjIyNCBEZXRlY3QgYW5kIGZpeCByZXNvdXJjZSBsZWFrCisqIFRJTktFUlBPUC0yMjMwIG1hdGNoKCkgc3RlcCB1bmV4cGVjdGVkIGJlaGF2aW91cnMKKyogVElOS0VSUE9QLTIyMzIgUmVtb3RlU3RyYXRlZ3kgZG9lcyBub3QgY2FsbCBwYXJlbnQgY2xhc3MgVHJhdmVyc2FsU3RyYXRlZ3kgX19pbml0X18KKyogVElOS0VSUE9QLTIyMzggRml4IHJlbWFpbmluZyBpdGVyYXRvciBsZWFrcyBtYXJrZWQgYnkgQElnbm9yZUl0ZXJhdG9yTGVhaworKiBUSU5LRVJQT1AtMjI0MSBDbGllbnQgZXhjZXB0aW9uIGRvbid0IG1hdGNoIFNlcnZlciBleGNlcHRpb24gd2hlbiBzZXJ2ZXIgIHRocm93IFN0YWNrT3ZlcmZsb3dFcnJvcgorKiBUSU5LRVJQT1AtMjI0OCBJbnN0YWJpbGl0eSBvZiBkcml2ZXIgZm9yIGJsb2NrZWQgcmVxdWVzdHMKKyogVElOS0VSUE9QLTIyNjQgR3JlbWxpbiBQeXRob24gc2hvdWxkIGRlc2VyaWFsaXplIGc6RGF0ZSB0byBVVEMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTA4NCBCcmFuY2ggb3B0aW9uIHRva2VucyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSB0cmF2ZXJzYWxzLgorKiBUSU5LRVJQT1AtMTkyMSBTdXBwb3J0IGhhc05leHQgdGVybWluYWwgc3RlcCBpbiBHTFZzCisqIFRJTktFUlBPUC0yMDIwIFN1cHBvcnQgd2l0aENvbXB1dGVyKCkgZm9yIGphdmFzY3JpcHQKKyogVElOS0VSUE9QLTIyMjMgVXBkYXRlIGphY2tzb24gZGF0YWJpbmQgdG8gMi45LjkKKyogVElOS0VSUE9QLTIyMzYgSW1wcm92ZSBlcnJvciBtZXNzYWdpbmcgZm9yIFRpbmtlckdyYXBoIElkTWFuYWdlcnMgdGhhdCBmYWlsIG9uIGNvbnZlcnNpb25zCisqIFRJTktFUlBPUC0yMjM3IFByZXZlbnQgZXJyb3Igd2hlbiBjbG9zaW5nIHNlc3Npb25zIHRoYXQgZG9uJ3QgZXhpc3QgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMjQ2IENvbnNvbGlkYXRlIHRoZSBlcnJvciBwcm9wYWdhdGlvbiB0byB0aGUgY2xpZW50CisqIFRJTktFUlBPUC0yMjU2IHByb2Nlc3NBbGxTdGFydHMgb2YgQWdncmVnYXRlU3RlcCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBiYXJyaWVyIGlzIGVtcHR5CisqIFRJTktFUlBPUC0yMjYwIFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIDIuOS45LjEKKyogVElOS0VSUE9QLTIyNjUgRGVwcmVjYXRlIFRyYXZlcnNhbC5nZXRTaWRlRWZmZWN0cygpIGZ1bmN0aW9uYWxpdHkgZm9yIHJlbW90aW5nIHB1cnBvc2VzCisqIFRJTktFUlBPUC0yMjcwIERlcHJlY2F0ZSBtdWx0aS9tZXRhcHJvcGVydHkgc3VwcG9ydCBpbiBOZW80agorKiBUSU5LRVJQT1AtMjI3MiBSZW5hbWUgc3RlcHMgYW5kIHRva2VucyB0aGF0IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgcHl0aG9uIGZ1bmN0aW9ucworCitbW3JlbGVhc2UtMy0zLTddXQorPT09IFRpbmtlclBvcCAzLjMuNyAoUmVsZWFzZSBEYXRlOiBNYXkgMjgsIDIwMTkpCisKKyogRGV2ZWxvcGVkIERTTCBwYXR0ZXJuIGZvciBncmVtbGluLWphdmFzY3JpcHQuCisqIEdlbmVyYXRlZCB1YmVyamFyIGFydGlmYWN0IGZvciBHcmVtbGluIENvbnNvbGUuCisqIEltcHJvdmVkIGZvbGRpbmcgb2YgYHByb3BlcnR5KClgIHN0ZXAgaW50byByZWxhdGVkIG11dGF0aW5nIHN0ZXBzLgorKiBBZGRlZCBgaW5qZWN0KClgIHRvIHN0ZXBzIGdlbmVyYXRlZCBvbiB0aGUgRFNMIGBUcmF2ZXJzYWxTb3VyY2VgLgorKiBSZW1vdmVkIGBncGVyZnV0aWxzYCBkZXBlbmRlbmNpZXMgZnJvbSBHcmVtbGluIENvbnNvbGUuCisqIEZpeGVkIGBQYXJ0aXRpb25TdHJhdGVneWAgd2hlbiBzZXR0aW5nIHZlcnRleCBsYWJlbCBhbmQgaGF2aW5nIGBpbmNsdWRlTWV0YVByb3BlcnRpZXNgIGNvbmZpZ3VyZWQgdG8gYHRydWVgLgorKiBFbnN1cmUgYGdyZW1saW4uc2hgIHdvcmtzIHdoZW4gZGlyZWN0b3JpZXMgY29udGFpbiBzcGFjZXMuCisqIFByZXZlbnRlZCBjbGllbnQtc2lkZSBoYW5ncyBpZiBtZXRhZGF0YSBnZW5lcmF0aW9uIGZhaWxzIG9uIHRoZSBzZXJ2ZXIuCisqIEZpeGVkIGJ1ZyB3aXRoIGBFdmVudFN0cmF0ZWd5YCBpbiByZWxhdGlvbiB0byBgYWRkRSgpYCB3aGVyZSBkZXRhY2htZW50IHdhcyBub3QgaGFwcGVuaW5nIHByb3Blcmx5LgorKiBFbnN1cmVkIHRoYXQgYGdyZW1saW4uc2hgIHdvcmtzIHdoZW4gZGlyZWN0b3JpZXMgY29udGFpbiBzcGFjZXMuCisqIEZpeGVkIGJ1ZyBpbiBkZXRhY2htZW50IG9mIGBQYXRoYCB3aGVyZSBlbWJlZGRlZCBjb2xsZWN0aW9uIG9iamVjdHMgd291bGQgcHJldmVudCB0aGF0IHByb2Nlc3MuCisqIEVuYWJsZWQgYGN0cmwrY2AgdG8gaW50ZXJydXB0IGxvbmcgcnVubmluZyBwcm9jZXNzZXMgaW4gR3JlbWxpbiBDb25zb2xlLgorKiBRdWlldGVkICJob3N0IHVuYXZhaWxhYmxlIiB3YXJuaW5ncyBmb3IgYm90aCB0aGUgZHJpdmVyIGFuZCBHcmVtbGluIENvbnNvbGUuCisqIEZpeGVkIGNvbnN0cnVjdGlvbiBvZiBgZzpMaXN0YCBmcm9tIGFycmF5cyBpbiBncmVtbGluLWphdmFzY3JpcHQuCisqIEZpeGVkIGJ1ZyBpbiBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgaW50ZXJwcmV0ZXIgbW9kZSBhcm91bmQgY2xhc3MgZGVmaW5pdGlvbnMuCisqIEltcGxlbWVudGVkIGBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneWAuCisqIEZpeGVkIGJlaGF2aW9yIG9mIGBQYCBmb3IgYHdpdGhpbigpYCBhbmQgYHdpdGhvdXQoKWAgaW4gR0xWcyB0byBiZSBjb25zaXN0ZW50IHdpdGggSmF2YSB3aGVuIHVzaW5nIHZhcmFyZ3MuCisqIENsZWFyZWQgdGhlIGlucHV0IGJ1ZmZlciBhZnRlciBleGNlcHRpb25zIGluIEdyZW1saW4gQ29uc29sZS4KKyogQWRkZWQgcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZSB0aGUgYHByb2Nlc3NvcmAgaW4gdGhlIGdyZW1saW4tamF2YXNjcmlwdCBgY2xpZW50YCBjb25zdHJ1Y3Rvci4KKyogQnVtcGVkIGBOZXR0eWAgdG8gNC4xLjMyLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjExMiBGb2xkaW5nIGluIHByb3BlcnR5KCkgc3RlcCBpcyBub3QgYmVpbmcgb3B0aW1hbGx5IHBlcmZvcm1lZAorKiBUSU5LRVJQT1AtMjE4MCBncmVtbGluLnNoIGRvZXNuJ3Qgd29yayB3aGVuIGRpcmVjdG9yaWVzIGNvbnRhaW4gc3BhY2VzCisqIFRJTktFUlBPUC0yMTgzIEludGVycHJldGVyTW9kZUFTVFRyYW5zZm9ybWF0aW9uIG5lZWRzIHRvIGJlIG1vcmUgc3BlY2lmaWMgYWJvdXQgd2hhdCBpdCB0cmFuc2Zvcm1zCisqIFRJTktFUlBPUC0yMTk0IEVuZm9yY2luZyBhbiBvcmRlciBvbiBwcm9wZXJ0aWVzIGluIG9uZSB0ZXN0IG1ldGhvZCBvZiBDaG9vc2VUZXN0CisqIFRJTktFUlBPUC0yMTk2IFBhcnRpdGlvblN0cmF0ZWd5IHdpdGggaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpIGNhbid0IGFkZCBsYWJlbGVkIHZlcnRleAorKiBUSU5LRVJQT1AtMjE5OCBEb2N1bWVudGF0aW9uIGZvciBTdG9yZSBjb250cmFkaWN0cyBpdHNlbGYKKyogVElOS0VSUE9QLTIxOTkgd2l0aGluIHN0ZXAgZG9lcyBub3Qgd29yayB3aXRoIG1vcmUgdGhhbiB0d28gcGFyYW1ldGVycyB3aXRoIHB5dGhvbgorKiBUSU5LRVJQT1AtMjIwMCBBZGRFZGdlU3RhcnRTdGVwIHVzZWQgRGV0YWNoZWRGYWN0b3J5LmRldGFjaCBpbnN0ZWFkIG9mIEV2ZW50U3RyYXRlZ3kuZGV0YWNoCisqIFRJTktFUlBPUC0yMjA0IENsaWVudCByZWNlaXZlcyBubyByZXNwb25zZSBvbiBmYWlsZWQgcmVxdWVzdAorKiBUSU5LRVJQT1AtMjIwNiBDZXJ0YWluIHR5cGVzIGluIGphdmFzY3JpcHQgZG9uJ3QgYXBwZWFyIHRvIHNlcmlhbGl6ZSB3aXRoIGEgR3JhcGhTT04gdHlwZQorKiBUSU5LRVJQT1AtMjIxMiBQYXRoIGlzIG5vdCBkZXRhY2hpbmcgcHJvcGVybHkgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTIwODkgSmF2YXNjcmlwdCBEU0wgc3VwcG9ydAorKiBUSU5LRVJQT1AtMjE3OSBIYXZlIG8uYS50LmcuZHJpdmVyLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uIGV4dGVuZCBJT0V4Y2VwdGlvbgorKiBUSU5LRVJQT1AtMjE4MSBBbGxvdyBjdHJsK2MgdG8gYnJlYWsgb3V0IG9mIGEgbG9uZyBydW5uaW5nIHByb2Nlc3MgaW4gR3JlbWxpbiBDb25zb2xlCisqIFRJTktFUlBPUC0yMTgyIFJlbW92ZSBncGVyZnV0aWxzIGZyb20gR3JlbWxpbiBDb25zb2xlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjE5MSBJbXBsZW1lbnQgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kKKyogVElOS0VSUE9QLTIyMTEgUHJvdmlkZSBBUEkgdG8gYWRkIHBlciByZXF1ZXN0IG9wdGlvbiBmb3IgYSBieXRlY29kZQorCitbW3JlbGVhc2UtMy0zLTZdXQorPT09IFRpbmtlclBvcCAzLjMuNiAoUmVsZWFzZSBEYXRlOiBNYXJjaCAxOCwgMjAxOSkKKworKiBEb2NrZXIgaW1hZ2VzIHVzZSB1c2VyIGBncmVtbGluYCBpbnN0ZWFkIG9mIGByb290YAorKiBBZGRlZCBhIG5ldyBgUmVzcG9uc2VTdGF0dXNDb2RlYCBmb3IgY2xpZW50LXNpZGUgc2VyaWFsaXphdGlvbiBlcnJvcnMuCisqIFJlZmFjdG9yZWQgdXNlIG9mIGBjb21tb25zLWxhbmdgIHRvIHVzZSBgY29tbW9uLWxhbmczYCBvbmx5LCB0aG91Z2ggZGVwZW5kZW5jaWVzIG1heSBzdGlsbCB1c2UgYGNvbW1vbnMtbGFuZ2AuCisqIEJ1bXBlZCBgY29tbW9ucy1sYW5nM2AgdG8gMy44LjEuCisqIEltcHJvdmVkIGhhbmRsaW5nIG9mIGNsaWVudC1zaWRlIHNlcmlhbGl6YXRpb24gZXJyb3JzIHRoYXQgd2VyZSBmb3JtZXJseSBqdXN0IGJlaW5nIGxvZ2dlZCByYXRoZXIgdGhhbiBiZWluZyByYWlzZWQuCisqIEFkZCBQeXRob24gYFRyYXZlcnNhbE1ldHJpY3NgIGFuZCBgTWV0cmljc2AgZGVzZXJpYWxpemVycy4KKyogTWFza2VkIHNlbnNpdGl2ZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGxvZ3Mgb2YgYEtyeW9TaGltU2VydmljZUxvYWRlcmAuCisqIEFkZGVkIGBnbG9iYWxGdW5jdGlvbkNhY2hlRW5hYmxlZGAgdG8gdGhlIGBHcm9vdnlDb21waWxlckdyZW1saW5QbHVnaW5gIHRvIGFsbG93IHRoYXQgY2FjaGUgdG8gYmUgZGlzYWJsZWQuCisqIEFkZGVkIGBnbG9iYWxGdW5jdGlvbkNhY2hlRW5hYmxlZGAgb3ZlcnJpZGUgdG8gYFNlc3Npb25PcFByb2Nlc3NvcmAgY29uZmlndXJhdGlvbi4KKyogQWRkZWQgc3RhdHVzIGNvZGUgdG8gYEdyZW1saW5TZXJ2ZXJFcnJvcmAgc28gdGhhdCBpdCB3b3VsZCBiZSBtb3JlIGRpcmVjdGx5IGFjY2Vzc2libGUgZHVyaW5nIGZhaWx1cmVzLgorKiBBZGRlZCBHcmFwaFNPTiBzZXJpYWxpemF0aW9uIHN1cHBvcnQgZm9yIGBEdXJhdGlvbmAsIGBDaGFyYCwgYEJ5dGVCdWZmZXJgLCBgQnl0ZWAsIGBCaWdJbnRlZ2VyYCBhbmQgYEJpZ0RlY2ltYWxgIGluIGBncmVtbGluLXB5dGhvbmAuCisqIEFkZGVkIGBQcm9maWxpbmdBd2FyZWAgaW50ZXJmYWNlIHRvIGFsbG93IHN0ZXBzIHRvIGJlIG5vdGlmaWVkIHRoYXQgYHByb2ZpbGUoKWAgd2FzIGJlaW5nIGNhbGxlZC4KKyogRml4ZWQgYnVnIHdoZXJlIGBwcm9maWxlKClgIGNvdWxkIHByb2R1Y2UgbmVnYXRpdmUgdGltaW5ncyB3aGVuIGBncm91cCgpYCBjb250YWluZWQgYSByZWR1Y2luZyBiYXJyaWVyLgorKiBJbXByb3ZlZCBsb2dpYyBkZXRlcm1pbmluZyB0aGUgZGVhZCBvciBhbGl2ZSBzdGF0ZSBvZiBhIEphdmEgZHJpdmVyIGBDb25uZWN0aW9uYC4KKyogSW1wcm92ZWQgaGFuZGxpbmcgb2YgZGVhZCBjb25uZWN0aW9ucyBhbmQgdGhlIGF2YWlsYWJpbGl0eSBvZiBob3N0cy4KKyogQnVtcGVkIGBodHRwY2xpZW50YCB0byA0LjUuNy4KKyogQnVtcGVkIGBzbGY0amAgdG8gMS43LjI1LgorKiBCdW1wZWQgYGNvbW1vbnMtY29kZWNgIHRvIDEuMTIuCisqIEJ1bXBlZCB0byBHcm9vdnkgMi41LjYuCisqIEJ1bXBlZCB0byBIYWRvb3AgMi43LjcuCisqIEZpeGVkIHBhcnRpYWwgcmVzcG9uc2UgZmFpbHVyZXMgd2hlbiB1c2luZyBhdXRoZW50aWNhdGlvbiBpbiBgZ3JlbWxpbi1weXRob25gLgorKiBGaXhlZCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gYFRyYXZlcnNlclNldC50b1N0cmluZygpYCBhbmQgYE9iamVjdFdyaXRhYmxlLnRvU3RyaW5nKClgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgSW5saW5lRmlsdGVyU3RyYXRlZ3lgIHRoYXQgbWl4ZWQgdXAgYW5kJ3MgYW5kIG9yJ3Mgd2hlbiBmb2xkaW5nIG1lcmdpbmcgY29uZGl0aW9ucyB0b2dldGhlci4KKyogRml4ZWQgYSBidWcgaW4gYFBhcnRpdGlvblN0cmF0ZWd5YCB3aGVyZSBgYWRkRSgpYCBhcyBhIHN0YXJ0IHN0ZXAgd2FzIG5vdCBhcHBseWluZyB0aGUgcGFydGl0aW9uLgorKiBJbXByb3ZlZCBoYW5kbGluZyBvZiBmYWlsaW5nIGBBdXRoZW50aWNhdG9yYCBpbnN0YW5jZXMgdGh1cyBpbXByb3Zpbmcgc2VydmVyIHJlc3BvbnNlcyB0byBkcml2ZXJzLgorKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBgSmF2YVRyYW5zbGF0b3JgIGJ5IHJlZHVjaW5nIGNhbGxzIHRvIGBNZXRob2QuZ2V0UGFyYW1ldGVycygpYC4KKyogSW1wbGVtZW50ZWQgYEVhcmx5TGltaXRTdHJhdGVneWAgd2hpY2ggaXMgc3VwcG9zZWQgdG8gc2lnbmlmaWNhbnRseSByZWR1Y2UgYmFja2VuZCBvcGVyYXRpb25zIGZvciBxdWVyaWVzIHRoYXQgdXNlIGByYW5nZSgpYC4KKyogUmVkdWNlZCBjaGFuY2Ugb2YgaGFzaCBjb2xsaXNpb25zIGluIGBCeXRlY29kZWAgYW5kIGl0cyBpbm5lciBjbGFzc2VzLgorKiBBZGRlZCBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIG1lbWJlciB0byB0aGUgYFRyYXZlcnNhbGAgY2xhc3MgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBgYXdhaXQgLi4uIG9mYCBsb29wcyAoYXN5bmMgaXRlcmFibGVzKS4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIwODEgUGVyc2lzdGVkT3V0cHV0UkREIG1hdGVyaWFsaXNlcyByZGQgbGF6aWx5IHdpdGggU3BhcmsgMi54CisqIFRJTktFUlBPUC0yMDkxIFdyb25nL01pc3NpbmcgZmVhdHVyZSByZXF1aXJlbWVudHMgaW4gU3RydWN0dXJlU3RhbmRhcmRUZXN0U3VpdGUKKyogVElOS0VSUE9QLTIwOTQgR3JlbWxpbiBEcml2ZXIgQ2x1c3RlciBCdWlsZGVyIHNlcmlhbGl6ZXIgbWV0aG9kIGRvZXMgbm90IHVzZSBtaW1lVHlwZSBhcyBzdWdnZXN0ZWQKKyogVElOS0VSUE9QLTIwOTUgR3JvdXBTdGVwIGxvb2tzIGZvciBpcnJlbGV2YW50IGJhcnJpZXIgc3RlcHMKKyogVElOS0VSUE9QLTIwOTYgZ3JlbWxpbnB5dGhvbjogQXR0cmlidXRlRXJyb3Igd2hlbiBjb25uZWN0aW9uIGlzIGNsb3NlZCBiZWZvcmUgcmVzdWx0IGlzIHJlY2VpdmVkCisqIFRJTktFUlBPUC0yMTAwIGNvYWxlc2NlKCkgY3JlYXRpbmcgdW5leHBlY3RlZCByZXN1bHRzIHdoZW4gdXNlZCB3aXRoIG9yZGVyKCkKKyogVElOS0VSUE9QLTIxMDUgR3JlbWxpbi1QeXRob24gY29ubmVjdGlvbiBub3QgcmV0dXJuZWQgYmFjayB0byB0aGUgcG9vbCBvbiBleGNlcHRpb24gZnJvbSBncmVtbGluIHNlcnZlcgorKiBUSU5LRVJQT1AtMjExMyBQLldpdGhpbigpIGRvZXNuJ3Qgd29yayB3aGVuIGdpdmVuIGEgTGlzdCBhcmd1bWVudAorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0xODg5IEphdmFTY3JpcHQgR0xWOiBVc2UgaGVhcnRiZWF0IHRvIHByZXZlbnQgY29ubmVjdGlvbiB0aW1lb3V0CisqIFRJTktFUlBPUC0yMDEwIEdlbmVyYXRlIGpzZG9jIGZvciBncmVtbGluLWphdmFzY3JpcHQKKyogVElOS0VSUE9QLTIwMTMgUHJvY2VzcyB0ZXN0cyB0aGF0IGFyZSBhdXRvLWlnbm9yZWQgc3RpbmsKKyogVElOS0VSUE9QLTIwMTggR2VuZXJhdGUgQVBJIGRvY3MgZm9yIEdyZW1saW4uTmV0CisqIFRJTktFUlBPUC0yMDM4IE1ha2UgZ3Jvb3Z5IHNjcmlwdCBjYWNoZSBzaXplIGNvbmZpZ3VyYWJsZQorKiBUSU5LRVJQT1AtMjA1MCBBZGQgYSA6Ynl0ZWNvZGUgY29tbWFuZCB0byBHcmVtbGluIENvbnNvbGUKKyogVElOS0VSUE9QLTIwNjIgQWRkIFRyYXZlcnNhbCBjbGFzcyB0byBDb3JlSW1wb3J0cworKiBUSU5LRVJQT1AtMjA2NSBPcHRpbWl6ZSBpdGVyYXRlKCkgZm9yIHJlbW90ZSB0cmF2ZXJzYWxzCisqIFRJTktFUlBPUC0yMDY3IEFsbG93IGdldHRpbmcgcmF3IGRhdGEgZnJvbSBHcmVtbGluLk5ldC5Ecml2ZXIuSUdyZW1saW5DbGllbnQKKyogVElOS0VSUE9QLTIwNjggQnVtcCBKYWNrc29uIERhdGFiaW5kIDIuOS43CisqIFRJTktFUlBPUC0yMDY5IERvY3VtZW50IGNvbmZpZ3VyYXRpb24gb2YgR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTIwNzAgZ3JlbWxpbi1qYXZhc2NyaXB0OiBJbnRyb2R1Y2UgQ29ubmVjdGlvbiByZXByZXNlbnRhdGlvbgorKiBUSU5LRVJQT1AtMjA3MSBncmVtbGluLXB5dGhvbjogdGhlIGdyYXBoc29uIGRlc2VyaWFsaXplciBmb3IgZzpTZXQgc2hvdWxkIHJldHVybiBhIHB5dGhvbiBzZXQKKyogVElOS0VSUE9QLTIwNzMgR2VuZXJhdGUgdGFicyBmb3Igc3RhdGljIGNvZGUgYmxvY2tzCisqIFRJTktFUlBPUC0yMDc0IEVuc3VyZSB0aGF0IG9ubHkgTnVHZXQgcGFja2FnZXMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24gYXJlIHB1c2hlZAorKiBUSU5LRVJQT1AtMjA3NyBWZXJ0ZXhQcm9ncmFtLkJ1aWxkZXIgc2hvdWxkIGhhdmUgYSBkZWZhdWx0IGNyZWF0ZSgpIG1ldGhvZCB3aXRoIG5vIEdyYXBoCisqIFRJTktFUlBPUC0yMDc4IEhpZGUgdXNlIG9mIEVtcHR5R3JhcGggb3IgUmVtb3RlR3JhcGggYmVoaW5kIGEgbW9yZSB1bmlmaWVkIG1ldGhvZCBmb3IgVHJhdmVyc2FsU291cmNlIGNvbnN0cnVjdGlvbgorKiBUSU5LRVJQT1AtMjA4NCBGb3IgcmVtb3RlIHJlcXVlc3RzIGluIGNvbnNvbGUgZGlzcGxheSB0aGUgcmVtb3RlIHN0YWNrIHRyYWNlCisqIFRJTktFUlBPUC0yMDkyIERlcHJlY2F0ZSBkZWZhdWx0IEdyYXBoU09OIHNlcmlhbGl6ZXIgZmllbGRzCisqIFRJTktFUlBPUC0yMDk3IENyZWF0ZSBhIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gd2l0aCBhbiBpbml0aWFsaXplZCBDbGllbnQKKyogVElOS0VSUE9QLTIxMDIgRGVwcmVjYXRlIHN0YXRpYyBmaWVsZHMgb24gVHJhdmVyc2FsU291cmNlIHJlbGF0ZWQgdG8gcmVtb3RpbmcKKyogVElOS0VSUE9QLTIxMDYgV2hlbiBncmVtbGluIGV4ZWN1dGVzIHRpbWVvdXQsIHRocm93IFRpbWVvdXRFeGNlcHRpb24gaW5zdGVhZCBvZiBUcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbi9JbnRlcnJ1cHRlZElPRXhjZXB0aW9uCisqIFRJTktFUlBPUC0yMTEwIEFsbG93IENvbm5lY3Rpb24gb24gRGlmZmVyZW50IFBhdGggKGZyb20gL2dyZW1saW4pCisqIFRJTktFUlBPUC0yMTE0IERvY3VtZW50IGNvbW1vbiBHcmVtbGluIGFudGktcGF0dGVybnMKKyogVElOS0VSUE9QLTIxMTggQnVtcCB0byBHcm9vdnkgMi40LjE2CisqIFRJTktFUlBPUC0yMTIxIEJ1bXAgSmFja3NvbiBEYXRhYmluZCAyLjkuOAorCitbW3JlbGVhc2UtMy0zLTVdXQorPT09IFRpbmtlclBvcCAzLjMuNSAoUmVsZWFzZSBEYXRlOiBKYW51YXJ5IDIsIDIwMTkpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTExLCAzLjIuMTE+Pi4KKworKiBGaXhlZCBhbmQvb3IgZm9sZGluZyBpbiBgSW5saW5lRmlsdGVyU3RyYXRlZ3lgLgorKiBGaXhlZCBjb25maWd1cmF0aW9uIGFuZCBzZXJpYWxpemF0aW9uIG9mIGBTdWJncmFwaFN0cmF0ZWd5YCB3aGljaCB3YXMgbWlzc2luZyB0aGUgYGNoZWNrQWRqYWNlbnRWZXJ0aWNlc2AgZmxhZy4KKyogQ2FwdHVyZWQgYFRyYXZlcnNhbEludGVycnVwdGlvbkV4Y2VwdGlvbmAgYW5kIGNvbnZlcnRlZCB0byBgVGltZW91dEV4Y2VwdGlvbmAgZm9yIGBHcmVtbGluRXhlY3V0b3JgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgQ29hbGVzY2VTdGVwYCB3aGljaCBzcXVhcmVkIHRoZSBidWxrIGlmIHRoZSBzdGVwIGZvbGxvd2VkIGEgYEJhcnJpZXJgIHN0ZXAuCisqIEZpeGVkIGEgYnVnIGluIGBHcm91cFN0ZXBgIHRoYXQgYXNzaWduZWQgd3JvbmcgcmVkdWNpbmcgYmktb3BlcmF0b3JzCisqIEFkZGVkIGA6Ynl0ZWNvZGVgIGNvbW1hbmQgdG8gaGVscCBkZXZlbG9wZXJzIGRlYnVnZ2luZyBgQnl0ZWNvZGVgLWJhc2VkIHRyYXZlcnNhbHMuCisqIEFkZGVkIG9wdGlvbiB0byBzZXQgdGhlIHBhdGggZm9yIHRoZSBVUkkgb24gdGhlIEphdmEgZHJpdmVyLgorKiBGaXhlZCBgUGVyc2lzdGVkT3V0cHV0UkREYCB0byBlYWdlciBwZXJzaXN0IFJERCBieSBhZGRpbmcgYGNvdW50KClgIGFjdGlvbiBjYWxscy4KKyogRGVzZXJpYWxpemVkIGBnOlNldGAgdG8gYSBQeXRob24gYFNldGAgaW4gR3JhcGhTT04gaW4gYGdyZW1saW4tcHl0aG9uYC4KKyogRGVwcmVjYXRlZCBgU3RhckdyYXBoLmJ1aWxkZXIoKWAgYW5kIGBTdGFyR3JhcGguQnVpbGRlci5idWlsZCgpYCBpbiBmYXZvciBvZiB0aGUgbW9yZSBjb21tb24gImJ1aWxkZXIiIHBhdHRlcm5zIG9mIGBidWlsZCgpYCBhbmQgYGNyZWF0ZSgpYCByZXNwZWN0aXZlbHkuCisqIERlcHJlY2F0ZWQgYFNlcmlhbGl6ZXJzLkRFRkFVTFRfUkVTVUxUX1NFUklBTElaRVJgIGFuZCBgREVGQVVMVF9SRVFVRVNUX1NFUklBTElaRVJgLgorKiBEZXByZWNhdGVkIGBUcmF2ZXJzYWxTb3VyY2UjR1JFTUxJTl9SRU1PVEVgIGFuZCBgVHJhdmVyc2FsU291cmNlI0dSRU1MSU5fUkVNT1RFX0NPTk5FQ1RJT05fQ0xBU1NgIG1vdmluZyB0aGVtIHRvIGBSZW1vdGVDb25uZWN0aW9uYC4KKyogRml4ZWQgdGhlIHNldHRpbmcgb2YgdGhlIGRlZmF1bHQgbGFiZWwgZm9yIGEgYFJlZmVyZW5jZVZlcnRleGAgd2hlbiB0aGUgb3JpZ2luYWwgdmVydGV4IHdhcyBvZiB0eXBlIGBDb21wdXRlckFkamFjZW50VmVydGV4YC4KKyogQ2hhbmdlZCBKYXZhIGRyaXZlciB0byBleHBlY3QgYSBnZW5lcmljIGBSZW1vdGVUcmF2ZXJzZXJgIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgc3BlY2lmaWMgYERlZmF1bHRSZW1vdGVUcmF2ZXJzZXJgLgorKiBCZXR0ZXIgaGFuZGxlZCBzZXJ2ZXIgZGlzY29ubmVjdCBjb25kaXRpb24gZm9yIHRoZSBgZ3JlbWxpbi1weXRob25gIGRyaXZlciBieSB0aHJvd2luZyBhIGNsZWFyIGV4Y2VwdGlvbi4KKyogRGlzcGxheSB0aGUgcmVtb3RlIHN0YWNrIHRyYWNlIGluIHRoZSBHcmVtbGluIENvbnNvbGUgd2hlbiBzY3JpcHRzIHNlbnQgdG8gdGhlIHNlcnZlciBmYWlsLgorKiBBZGRlZCBgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlYCB3aGljaCBwcm92aWRlcyBhIG1vcmUgdW5pZmllZCBtZWFucyBvZiBjb25zdHJ1Y3RpbmcgYSBgVHJhdmVyc2FsU291cmNlYC4KKyogQWRkZWQgYERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoQ2xpZW50KWAgdG8gcHJvdmlkZSB1c2VycyBiZXR0ZXIgY29udHJvbCBvdmVyIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgYmVpbmcgY3JlYXRlZC4KKyogQ2hhbmdlZCBiZWhhdmlvciBvZiBHcmFwaFNPTiBkZXNlcmlhbGl6ZXIgaW4gZ3JlbWxpbi1weXRob24gc3VjaCB0aGF0IGBnOlNldGAgcmV0dXJucyBhIFB5dGhvbiBgU2V0YC4KKyogQnVtcGVkIHRvIEdyb292eSAyLjQuMTYuCisqIEZpeGVkIGJ1ZyB0aGF0IHByZXZlbnRlZCBgVHJhdmVyc2FsRXhwbGFuYXRpb25gIGZyb20gc2VyaWFsaXppbmcgcHJvcGVybHkgd2l0aCBHcmFwaFNPTi4KKyogQ2hhbmdlZCBiZWhhdmlvciBvZiBgaXRlcmF0ZSgpYCBpbiBQeXRob24sIEphdmFzY3JpcHQgYW5kIC5ORVQgdG8gc2VuZCBgbm9uZSgpYCB0aHVzIGF2b2lkaW5nIHVubmVjZXNzYXJ5IHJlc3VsdHMgYmVpbmcgcmV0dXJuZWQuCisqIFByb3ZpZGVkIGZvciBhIGNvbmZpZ3VyYWJsZSBjbGFzcyBtYXAgY2FjaGUgaW4gdGhlIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBhbmQgZXhwb3NlZCB0aGF0IGluIEdyZW1saW4gU2VydmVyLgorKiBgR3JhcGhQcm92aWRlcmAgaW5zdGFuY2VzIGNhbiBiZSBhbm5vdGF0ZWQgd2l0aCBgT3B0T3V0YCBjb25maWd1cmF0aW9ucyB0aGF0IHdpbGwgYmUgYXBwbGllZCBpbiBhZGRpdGlvbiB0byB0aGUgYE9wdE91dGAgaW5zdGFuY2VzIG9uIGEgYEdyYXBoYC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIwODEgUGVyc2lzdGVkT3V0cHV0UkREIG1hdGVyaWFsaXNlcyByZGQgbGF6aWx5IHdpdGggU3BhcmsgMi54CisqIFRJTktFUlBPUC0yMDkxIFdyb25nL01pc3NpbmcgZmVhdHVyZSByZXF1aXJlbWVudHMgaW4gU3RydWN0dXJlU3RhbmRhcmRUZXN0U3VpdGUKKyogVElOS0VSUE9QLTIwOTQgR3JlbWxpbiBEcml2ZXIgQ2x1c3RlciBCdWlsZGVyIHNlcmlhbGl6ZXIgbWV0aG9kIGRvZXMgbm90IHVzZSBtaW1lVHlwZSBhcyBzdWdnZXN0ZWQKKyogVElOS0VSUE9QLTIwOTUgR3JvdXBTdGVwIGxvb2tzIGZvciBpcnJlbGV2YW50IGJhcnJpZXIgc3RlcHMKKyogVElOS0VSUE9QLTIwOTYgZ3JlbWxpbnB5dGhvbjogQXR0cmlidXRlRXJyb3Igd2hlbiBjb25uZWN0aW9uIGlzIGNsb3NlZCBiZWZvcmUgcmVzdWx0IGlzIHJlY2VpdmVkCisqIFRJTktFUlBPUC0yMTAwIGNvYWxlc2NlKCkgY3JlYXRpbmcgdW5leHBlY3RlZCByZXN1bHRzIHdoZW4gdXNlZCB3aXRoIG9yZGVyKCkKKyogVElOS0VSUE9QLTIxMTMgUC5XaXRoaW4oKSBkb2Vzbid0IHdvcmsgd2hlbiBnaXZlbiBhIExpc3QgYXJndW1lbnQKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTg4OSBKYXZhU2NyaXB0IEdMVjogVXNlIGhlYXJ0YmVhdCB0byBwcmV2ZW50IGNvbm5lY3Rpb24gdGltZW91dAorKiBUSU5LRVJQT1AtMjAxMCBHZW5lcmF0ZSBqc2RvYyBmb3IgZ3JlbWxpbi1qYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yMDEzIFByb2Nlc3MgdGVzdHMgdGhhdCBhcmUgYXV0by1pZ25vcmVkIHN0aW5rCisqIFRJTktFUlBPUC0yMDE4IEdlbmVyYXRlIEFQSSBkb2NzIGZvciBHcmVtbGluLk5ldAorKiBUSU5LRVJQT1AtMjAzOCBNYWtlIGdyb292eSBzY3JpcHQgY2FjaGUgc2l6ZSBjb25maWd1cmFibGUKKyogVElOS0VSUE9QLTIwNTAgQWRkIGEgOmJ5dGVjb2RlIGNvbW1hbmQgdG8gR3JlbWxpbiBDb25zb2xlCisqIFRJTktFUlBPUC0yMDYyIEFkZCBUcmF2ZXJzYWwgY2xhc3MgdG8gQ29yZUltcG9ydHMKKyogVElOS0VSUE9QLTIwNjUgT3B0aW1pemUgaXRlcmF0ZSgpIGZvciByZW1vdGUgdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMjA2NyBBbGxvdyBnZXR0aW5nIHJhdyBkYXRhIGZyb20gR3JlbWxpbi5OZXQuRHJpdmVyLklHcmVtbGluQ2xpZW50CisqIFRJTktFUlBPUC0yMDY5IERvY3VtZW50IGNvbmZpZ3VyYXRpb24gb2YgR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTIwNzAgZ3JlbWxpbi1qYXZhc2NyaXB0OiBJbnRyb2R1Y2UgQ29ubmVjdGlvbiByZXByZXNlbnRhdGlvbgorKiBUSU5LRVJQT1AtMjA3MSBncmVtbGluLXB5dGhvbjogdGhlIGdyYXBoc29uIGRlc2VyaWFsaXplciBmb3IgZzpTZXQgc2hvdWxkIHJldHVybiBhIHB5dGhvbiBzZXQKKyogVElOS0VSUE9QLTIwNzMgR2VuZXJhdGUgdGFicyBmb3Igc3RhdGljIGNvZGUgYmxvY2tzCisqIFRJTktFUlBPUC0yMDc0IEVuc3VyZSB0aGF0IG9ubHkgTnVHZXQgcGFja2FnZXMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24gYXJlIHB1c2hlZAorKiBUSU5LRVJQT1AtMjA3NyBWZXJ0ZXhQcm9ncmFtLkJ1aWxkZXIgc2hvdWxkIGhhdmUgYSBkZWZhdWx0IGNyZWF0ZSgpIG1ldGhvZCB3aXRoIG5vIEdyYXBoCisqIFRJTktFUlBPUC0yMDc4IEhpZGUgdXNlIG9mIEVtcHR5R3JhcGggb3IgUmVtb3RlR3JhcGggYmVoaW5kIGEgbW9yZSB1bmlmaWVkIG1ldGhvZCBmb3IgVHJhdmVyc2FsU291cmNlIGNvbnN0cnVjdGlvbgorKiBUSU5LRVJQT1AtMjA4NCBGb3IgcmVtb3RlIHJlcXVlc3RzIGluIGNvbnNvbGUgZGlzcGxheSB0aGUgcmVtb3RlIHN0YWNrIHRyYWNlCisqIFRJTktFUlBPUC0yMDkyIERlcHJlY2F0ZSBkZWZhdWx0IEdyYXBoU09OIHNlcmlhbGl6ZXIgZmllbGRzCisqIFRJTktFUlBPUC0yMDk3IENyZWF0ZSBhIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gd2l0aCBhbiBpbml0aWFsaXplZCBDbGllbnQKKyogVElOS0VSUE9QLTIxMDIgRGVwcmVjYXRlIHN0YXRpYyBmaWVsZHMgb24gVHJhdmVyc2FsU291cmNlIHJlbGF0ZWQgdG8gcmVtb3RpbmcKKyogVElOS0VSUE9QLTIxMDYgV2hlbiBncmVtbGluIGV4ZWN1dGVzIHRpbWVvdXQsIHRocm93IFRpbWVvdXRFeGNlcHRpb24gaW5zdGVhZCBvZiBUcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbi9JbnRlcnJ1cHRlZElPRXhjZXB0aW9uCisqIFRJTktFUlBPUC0yMTEwIEFsbG93IENvbm5lY3Rpb24gb24gRGlmZmVyZW50IFBhdGggKGZyb20gL2dyZW1saW4pCisqIFRJTktFUlBPUC0yMTE0IERvY3VtZW50IGNvbW1vbiBHcmVtbGluIGFudGktcGF0dGVybnMKKyogVElOS0VSUE9QLTIxMTggQnVtcCB0byBHcm9vdnkgMi40LjE2CisqIFRJTktFUlBPUC0yMTIxIEJ1bXAgSmFja3NvbiBEYXRhYmluZCAyLjkuOAorCitbW3JlbGVhc2UtMy0zLTRdXQorPT09IFRpbmtlclBvcCAzLjMuNCAoUmVsZWFzZSBEYXRlOiBPY3RvYmVyIDE1LCAyMDE4KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjIueC5hc2NpaWRvYyNyZWxlYXNlLTMtMi0xMCwgMy4yLjEwPj4uCisKKyogQWRkZWQgc3luY2hyb25pemVkIGBNYXBgIHRvIEdyeW8gMy4wIHJlZ2lzdHJhdGlvbnMuCisqIFJlbW92ZWQgYHRpbWVkSW50ZXJydXB0YCBmcm9tIGRvY3VtZW50YXRpb24gYXMgYSB3YXkgdG8gdGltZW91dC4KKyogRGVwcmVjYXRlZCBgT3JkZXJgIGZvciBgaW5jcmAgYW5kIGBkZWNyYCBpbiBmYXZvciBvZiBgYXNjYCBhbmQgYGRlc2NgLgorKiBGaXhlZCBidWcgaW4gYG1hdGgoKWAgZm9yIE9MQVAgd2hlcmUgYENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIHdhcyBpbmNvcnJlY3RseSBkZXRlY3RpbmcgcGF0aCBsYWJlbCBhY2Nlc3MgYW5kIHByZXZlbnRpbmcgZXhlY3V0aW9uLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTg5OCBJc3N1ZSB3aXRoIGJpbmRpbmdzIGluIHN0cmF0ZWdpZXMgYW5kIGxhbWJkYXMKKyogVElOS0VSUE9QLTE5MzMgZ3JlbWxpbi1weXRob24gbWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQgb24gbGFyZ2UgcmVzcG9uc2VzCisqIFRJTktFUlBPUC0xOTU4IFRpbmtlckdyYXBoQ291bnRTdHJhdGVneSBjYW4gcmV0dXJuIHdyb25nIGNvdW50cworKiBUSU5LRVJQT1AtMTk2MSBEdXBsaWNhdGUgY29waWVzIG9mIGltYWdlcyBkaXJlY3RvcnkgaW4gZG9jcworKiBUSU5LRVJQT1AtMTk2MiBHcm9vdnlUcmFuc2xhdG9yIGRvZXNuJ3QgaGFuZGxlIGVtcHR5IG1hcHMKKyogVElOS0VSUE9QLTE5NjMgVXNlIG9mIHJlZHVjaW5nIHN0ZXAgaW4gY2hvb3NlKCkKKyogVElOS0VSUE9QLTE5NzIgaW5qZWN0KCkgdGVzdHMgYXJlIHRocm93aW5nIGV4Y2VwdGlvbnMgaW4gLk5FVCBHTFYgdGVzdHMKKyogVElOS0VSUE9QLTE5NzggQ2hlY2sgZm9yIFdlYnNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHdoZW4gcmV0cmlldmVkIGZyb20gQ29ubmVjdGlvbiBQb29sIG1pc3NpbmcKKyogVElOS0VSUE9QLTE5NzkgU2V2ZXJhbCBPTEFQIGlzc3VlcyBpbiBNYXRoU3RlcAorKiBUSU5LRVJQT1AtMTk4OCBtaW5vciBlcnJvciBpbiBkb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC0xOTk5IFtKYXZhXVtncmVtbGluLWRyaXZlcl0gUXVlcnkgdG8gYSByZW1vdGUgc2VydmVyIHZpYSB0aGUgd2Vic29ja2V0IGNsaWVudCBoYW5ncyBpbmRlZmluaXRlbHkgaWYgdGhlIHNlcnZlciBiZWNvbWVzIHVuYXZhaWxhYmxlCisqIFRJTktFUlBPUC0yMDA1IEludGVybWl0dGVudCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiByZXNwb25zZSBoYW5kbGluZworKiBUSU5LRVJQT1AtMjAwOSBQaWNrLmFueSBhbmQgUGljay5ub25lIHNob3VsZCBiZSBleHBvc2VkIGluIEdyZW1saW4tSmF2YVNjcmlwdAorKiBUSU5LRVJQT1AtMjAyMSBQcmV2ZW50IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGZhaWx1cmUKKyogVElOS0VSUE9QLTIwMzAgS2VlcEFsaXZlIHRhc2sgZXhlY3V0ZWQgZm9yIGV2ZXJ5IENvbm5lY3Rpb24ud3JpdGUgY2FsbAorKiBUSU5LRVJQT1AtMjAzMiBVcGRhdGUganl0aG9uLXN0YW5kYWxvbmUKKyogVElOS0VSUE9QLTIwNDQgQ2Fubm90IHJlY29ubmVjdCB0byBBenVyZSBjb3Ntb3MgaG9zdCB0aGF0IGJlY29tZXMgYXZhaWxhYmxlIGFnYWluCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTExMTMgR3JhcGhDb21wdXRlciBzdWJjbGFzc2VzIHNob3VsZCBzdXBwb3J0IG5hdGl2ZSBtZXRob2RzCisqIFRJTktFUlBPUC0xMzY1IExvZyB0aGUgc2VlZCB1c2VkIHRvIGluaXRpYWxpemUgUmFuZG9tIGluIHRlc3RzCisqIFRJTktFUlBPUC0xNDQ3IEFkZCBzb21lIEphdmFTY3JpcHQgaW50ZWxsaWdlbmNlIHRvIHRoZSBkb2N1bWVudGF0aW9uIHNvIHRoYXQgY29tbWVudHMgYW5kIG91dHB1dCBhcmUgbm90IGNvcGllZCBpbiBhIGNvcHkgcGFzdGUKKyogVElOS0VSUE9QLTE1OTUgR28gdGhyb3VnaCBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtIHdpdGggYSBwcm9maWxlIGFuZCBvcHRpbWl6ZS4KKyogVElOS0VSUE9QLTE3NzggRG8gbm90IHByb21vdGUgdGltZWRJbnRlcnJ1cHQgb3B0aW9uIGZvciBHcmVtbGluIFNlcnZlciBzY3JpcHQgcHJvY2Vzc2luZworKiBUSU5LRVJQT1AtMTc4MCBBZGQgYXV0aGVudGljYXRpb24gdGVzdHMgZm9yIGdyZW1saW4tcHl0aG9uCisqIFRJTktFUlBPUC0xODM2IC5ORVQgc2FtcGxlIHByb2plY3QKKyogVElOS0VSUE9QLTE4NDEgSW5jbHVkZSBQeXRob24gR0xWIHRlc3RzIG9uIFRyYXZpc0NJCisqIFRJTktFUlBPUC0xODY0IEdyZW1saW4gUHl0aG9uIHRlc3RzIGZvciBHcmFwaFNPTiAyLjAgYW5kIDMuMAorKiBUSU5LRVJQT1AtMTg5NyBQcm92aWRlIERvY2tlciBpbWFnZXMgb2YgR3JlbWxpbiBTZXJ2ZXIgYW5kIENvbnNvbGUKKyogVElOS0VSUE9QLTE5NDUgQWRkIHN1cHBvcnQgZm9yIGV4dGVuZGVkIEdyYXBoU29uIHR5cGVzIHRvIEdyZW1saW4ubmV0CisqIFRJTktFUlBPUC0xOTUxIGdyZW1saW4tc2VydmVyLmJhdCBkb2Vzbid0IHN1cHBvcnQgcGF0aHMgY29udGFpbmluZyBzcGFjZXMKKyogVElOS0VSUE9QLTE5NTYgRGVwcmVjYXRlIE9yZGVyIGluY3IvZGVjciBmb3IgYXNjL2Rlc2MKKyogVElOS0VSUE9QLTE5NTkgUHJvdmlkZSBhIHdheSB0byBzdWJtaXQgc2NyaXB0cyB0byB0aGUgc2VydmVyIGluIGdyZW1saW4tamF2YXNjcmlwdAorKiBUSU5LRVJQT1AtMTk2OCBSZWZhY3RvciBlbGVtZW50cyBvZiBHcmVtbGluIFNlcnZlciB0ZXN0aW5nCisqIFRJTktFUlBPUC0xOTc2IEluY2x1ZGUgQ29tcHV0ZXIgdGVzdHMgZm9yIEdMVnMKKyogVElOS0VSUE9QLTE5NzcgR3JlbWxpbi1KYXZhU2NyaXB0OiBTdXBwb3J0IFNBU0wgYXV0aGVudGljYXRpb24KKyogVElOS0VSUE9QLTE5ODUgVXBkYXRlIHBvc2l0aW9uIG9uIGJ1bGsgbG9hZGluZworKiBUSU5LRVJQT1AtMTk4OSBQcmVzZXJ2ZSBvcmRlciB0aGF0IHBsdWdpbnMgYXJlIGFwcGxpZWQgaW4gR3JlbWxpbiBDb25zb2xlCisqIFRJTktFUlBPUC0xOTk1IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gY2xvc2UoKSBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQKKyogVElOS0VSUE9QLTIwMTEgVXNlIE51bWJlckhlbHBlciBvbiBjaG9vc2UoKQorKiBUSU5LRVJQT1AtMjAxMiBUYXJnZXQgLk5FVCBTdGFuZGFyZCAyLjAgZm9yIEdyZW1saW4uTmV0CisqIFRJTktFUlBPUC0yMDE1IEFsbG93IHVzZXJzIHRvIGNvbmZpZ3VyZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25zCisqIFRJTktFUlBPUC0yMDE2IFVwZ3JhZGUgSmFja3NvbiBGYXN0ZXJYTUwgdG8gMi45LjUgb3IgbGF0ZXIgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkKKyogVElOS0VSUE9QLTIwMTcgQ2hlY2sgZm9yIENvbHVtbiBpbiBieSgpCisqIFRJTktFUlBPUC0yMDIyIENsdXN0ZXIgU1NMIHNob3VsZCB0cnVzdCBkZWZhdWx0IGNhIGNlcnRzIGJ5IGRlZmF1bHQKKyogVElOS0VSUE9QLTIwMjMgR3JlbWxpbiBTZXJ2ZXIgc2hvdWxkIG5vdCBjcmVhdGUgc2VsZi1zaWduZWQgY2VydHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMDI0IEdyZW1saW4gU2VydmVyIEFwcGxpY2F0aW9uIGFyY2hldHlwZSBzaG91bGQgY29ubmVjdCB2aWEgd2l0aFJlbW90ZQorKiBUSU5LRVJQT1AtMjAyNSBDaGFuZ2UgdG8gU0hBLTI1Ni81MTIgYW5kIGRyb3AgU0hBLTEgZm9yIHJlbGVhc2VzCisqIFRJTktFUlBPUC0yMDI2IEdyZW1saW4uTmV0LkRyaXZlciBzaG91bGQgY2hlY2sgQ2xpZW50V2ViU29ja2V0LlN0YXRlIGJlZm9yZSBjbG9zaW5nCisqIFRJTktFUlBPUC0yMDM0IFJlZ2lzdGVyIHN5bmNocm9uaXplZE1hcCgpIHdpdGggR3J5bworKiBUSU5LRVJQT1AtMjAzNSBHcmVtbGluLUphdmFTY3JpcHQ6IFBhc3MgY3VzdG9tIGhlYWRlcnMgdG8gdGhlIHdlYnNvY2tldCBjb25uZWN0aW9uCisqIFRJTktFUlBPUC0yMDQwIEltcHJvdmUgZmxleGliaWxpdHkgb2YgR3Jvb3Z5VHJhbnNsYXRvciB0byBoYW5kbGUgY3VzdG9tIHR5cGVzCisqIFRJTktFUlBPUC0yMDQ1IFJlbW92ZSBub24taW5keSBncm9vdnkgZGVwZW5kZW5jaWVzCisqIFRJTktFUlBPUC0yMDU1IFByb3ZpZGUgc3VwcG9ydCBmb3Igc3BlY2lhbCBudW1iZXIgY2FzZXMgbGlrZSBJbmZpbml0eSBpbiBHcmFwaFNPTgorKiBUSU5LRVJQT1AtMjA1NiBVc2UgTnVtYmVySGVscGVyIGluIENvbXBhcmUKKworW1tyZWxlYXNlLTMtMy0zXV0KKz09PSBUaW5rZXJQb3AgMy4zLjMgKFJlbGVhc2UgRGF0ZTogTWF5IDgsIDIwMTgpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMi54LmFzY2lpZG9jI3JlbGVhc2UtMy0yLTksIDMuMi45Pj4uCisKKyogSW1wbGVtZW50ZWQgYFRyYXZlcnNhbFNlbGVjdFN0ZXBgIHdoaWNoIGFsbG93cyB0byBgc2VsZWN0KClgIHJ1bnRpbWUtZ2VuZXJhdGVkIGtleXMuCisqIENvZXJjZWQgYEJ1bGtTZXRgIHRvIGBnOkxpc3RgIGluIEdyYXBoU09OIDMuMC4KKyogRGVwcmVjYXRlZCBgQ3JlZGVudGlhbHNHcmFwaGAgRFNMIGluIGZhdm9yIG9mIGBDcmVkZW50aWFsc1RyYXZlcnNhbERzbGAgd2hpY2ggdXNlcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBHcmVtbGluIERTTCBkZXZlbG9wbWVudC4KKyogQWxsb3dlZCBgaXRlcmF0ZSgpYCB0byBiZSBjYWxsZWQgYWZ0ZXIgYHByb2ZpbGUoKWAuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xODY5IFByb2ZpbGUgc3RlcCBhbmQgaXRlcmF0ZSBkbyBub3QgcGxheSBuaWNlbHkgd2l0aCBlYWNoIG90aGVyCisqIFRJTktFUlBPUC0xOTI3IEdoZXJraW4gc2NlbmFyaW8gZXhwZWN0cyBsaXN0IHdpdGggZHVwbGljYXRlcywgYnV0IHJlY2VpdmVzIGc6U2V0CisqIFRJTktFUlBPUC0xOTQ3IFBhdGggaGlzdG9yeSBpc24ndCBwcmVzZXJ2ZWQgZm9yIGtleXMgaW4gbXV0YXRpb25zCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTE2MjggSW1wbGVtZW50IFRyYXZlcnNhbFNlbGVjdFN0ZXAKKyogVElOS0VSUE9QLTE3NTUgTm8gZG9jcyBmb3IgUmVmZXJlbmNlRWxlbWVudHMKKyogVElOS0VSUE9QLTE5MDMgQ3JlZGVudGlhbHMgRFNMIHNob3VsZCB1c2UgdGhlIEphdmEgYW5ub3RhdGlvbiBwcm9jZXNzb3IKKyogVElOS0VSUE9QLTE5MTIgUmVtb3ZlIE1ENSBjaGVja3N1bXMKKyogVElOS0VSUE9QLTE5MzQgQnVtcCB0byBsYXRlc3QgdmVyc2lvbiBvZiBodHRwY2xpZW50CisqIFRJTktFUlBPUC0xOTM2IFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50IHRvIEJ5dGVjb2RlIGRlc2VyaWFsaXphdGlvbgorKiBUSU5LRVJQT1AtMTk0MyBKYXZhU2NyaXB0IEdMVjogU3VwcG9ydCBHcmFwaFNPTjMKKyogVElOS0VSUE9QLTE5NDQgSmF2YVNjcmlwdCBHTFY6IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gaXMgbm90IGV4cG9ydGVkIGluIHRoZSByb290IG1vZHVsZQorKiBUSU5LRVJQT1AtMTk1MCBUcmF2ZXJzYWwgY29uc3RydWN0aW9uIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cworKiBUSU5LRVJQT1AtMTk1MyBCdW1wIHRvIEdyb292eSAyLjQuMTUKKworW1tyZWxlYXNlLTMtMy0yXV0KKz09PSBUaW5rZXJQb3AgMy4zLjIgKFJlbGVhc2UgRGF0ZTogQXByaWwgMiwgMjAxOCkKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4yLnguYXNjaWlkb2MjcmVsZWFzZS0zLTItOCwgMy4yLjg+Pi4KKworKiBGaXhlZCByZWdyZXNzaW9uIGlzc3VlIHdoZXJlIHRoZSBIVFRQQ2hhbm5lbGl6ZXIgZG9lc24ndCBpbnN0YW50aWF0ZSB0aGUgc3BlY2lmaWVkIEF1dGhlbnRpY2F0aW9uSGFuZGxlci4KKyogRGVmYXVsdGVkIEdMViB0ZXN0cyBmb3IgZ3JlbWxpbi1weXRob24gdG8gcnVuIGZvciBHcmFwaFNPTiAzLjAuCisqIEZpeGVkIGEgYnVnIHdpdGggYFRyZWVgIHNlcmlhbGl6YXRpb24gaW4gR3JhcGhTT04gMy4wLgorKiBJbiBncmVtbGluLXB5dGhvbiwgdGhlIEdyYXBoU09OIDMuMCBgZzpTZXRgIHR5cGUgaXMgbm93IGRlc2VyaWFsaXplZCB0byBgTGlzdGAuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0xMDUzIGluc3RhbGxlZCBwbHVnaW5zIGFyZSBwbGFjZWQgaW4gYSBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gd2hlcmUgZ3JlbWxpbi5zaCBpcyBzdGFydGVkCisqIFRJTktFUlBPUC0xNTA5IEZhaWxpbmcgdGVzdCBjYXNlIGZvciB0cmVlIHNlcmlhbGl6YXRpb24KKyogVElOS0VSUE9QLTE3MzggUHJvcGVyIGZ1bmN0aW9uaW5nIG9mIEdyYXBoU09OUmVhZGVyIGRlcGVuZHMgb24gb3JkZXIgb2YgZWxlbWVudHMgaW4gU3RyaW5nIHJlcHJlc2VudGF0aW9uCisqIFRJTktFUlBPUC0xNzU4IFJlbW90ZVN0cmF0ZWd5IHNob3VsZCBiZSBiZWZvcmUgYWxsIG90aGVyIERlY29yYXRpb25TdHJhdGVnaWVzLgorKiBUSU5LRVJQT1AtMTg1NSBVcGRhdGUgUmV4c3RlciBsaW5rcworKiBUSU5LRVJQT1AtMTg1OCBIdHRwQ2hhbm5lbGl6ZXIgcmVncmVzc2lvbjogRG9lcyBub3QgY3JlYXRlIHNwZWNpZmllZCBBdXRoZW50aWNhdGlvbkhhbmRsZXIKKyogVElOS0VSUE9QLTE4NTkgQ29tcGxleCBpbnN0YW5jZSBvZiBQIG5vdCBzZXJpYWxpemluZyB0byBieXRlY29kZSBwcm9wZXJseQorKiBUSU5LRVJQT1AtMTg2MCB2YWx1ZU1hcChUcnVlKSByZXN1bHQgaW4gZXJyb3IgaW4gZ3JlbWxpbi1weXRob24KKyogVElOS0VSUE9QLTE4NjIgVGlua2VyR3JhcGggVmVydGV4UHJvZ3JhbSBtZXNzYWdlIHBhc3NpbmcgZG9lc24ndCB3b3JrIHByb3Blcmx5IHdoZW4gdXNpbmcgRGlyZWN0aW9uLkJPVEgKKyogVElOS0VSUE9QLTE4NjcgdW5pb24oKSBjYW4gcHJvZHVjZSBleHRyYSB0cmF2ZXJzZXJzCisqIFRJTktFUlBPUC0xODcyIEFwcGx5IGVkZ2VGdW5jdGlvbiBpbiBTcGFya01lc3NlbmdlcgorKiBUSU5LRVJQT1AtMTg3MyBtaW4oKSBhbmQgbWF4KCkgd29yayBvbmx5IGluIHRoZSByYW5nZSBvZiBJbnRlZ2VyIHZhbHVlcworKiBUSU5LRVJQT1AtMTg3NCBQIGRvZXMgbm90IGFwcGVhciB0byBiZSBzZXJpYWxpemVkIGNvbnNpc3RlbnRseSBpbiBHcmFwaFNPTgorKiBUSU5LRVJQT1AtMTg3NSBHcmVtbGluLVB5dGhvbiBvbmx5IGFnZ3JlZ2F0ZXMgdG8gbGlzdCB3aGVuIHVzaW5nIEdyYXBoU09OMworKiBUSU5LRVJQT1AtMTg3OSBHcmVtbGluIENvbnNvbGUgZG9lcyBub3QgcmVzZXBlY3QgZXF1YWwgc2lnbiBmb3IgZmxhZyBhcmd1bWVudCBhc3NpZ25tZW50cworKiBUSU5LRVJQT1AtMTg4MCBHcmVtbGluLk5FVCBTdHJvbmcgbmFtZSBzaWduYXR1cmUgY291bGQgbm90IGJlIHZlcmlmaWVkLiAoSFJFU1VMVDogMHg4MDEzMTA0NSkKKyogVElOS0VSUE9QLTE4ODMgZ3JlbWxpbnB5dGhvbiBmdXR1cmUgd2lsbCBuZXZlciByZXR1cm4KKyogVElOS0VSUE9QLTE4OTAgZ2V0QW5vbnltb3VzVHJhdmVyc2FsQ2xhc3MoKSBpcyBub3QgYmVpbmcgZ2VuZXJhdGVkIGZvciBKYXZhIERTTHMKKyogVElOS0VSUE9QLTE4OTEgU2VyaWFsaXphdGlvbiBvZiBQLm5vdCgpIGZvciBncmVtbGluLWphdmFzY3JpcHQKKyogVElOS0VSUE9QLTE4OTIgR0xWIHRlc3QgZmFpbHVyZXMgZm9yIC5ORVQKKyogVElOS0VSUE9QLTE4OTQgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyZDAgZmFpbHMgdG8gZGVzZXJpYWxpemUgdmFsaWQgUC5ub3QoKQorKiBUSU5LRVJQT1AtMTg5NiBncmVtbGluLXB5dGhvbiBsYW1iZGFzIGVycm9yCisqIFRJTktFUlBPUC0xOTA3IEZpeCBmYWlsaW5nIEdMViB0ZXN0IGZvciB3aXRoU2FjaygpIGluIC5ORVQKKyogVElOS0VSUE9QLTE5MTcgZ3g6QmlnRGVjaW1hbCBzZXJpYWxpemF0aW9uIGJyb2tlbiBpbiBHcmVtbGluLk5ldCBvbiBzeXN0ZW1zIHdpdGggJywnIGFzIGRlY2ltYWwgc2VwYXJhdG9yCisqIFRJTktFUlBPUC0xOTE4IFNjZW5hcmlvcyBmYWlsIGJlY2F1c2Ugb2Ygd3JvbmcgbnVtZXJpY2FsIHR5cGVzCisqIFRJTktFUlBPUC0xOTE5IEdoZXJraW4gcnVubmVyIGRvZXNuJ3Qgd29yayB3aXRoIFAuQW5kKCkgYW5kIFAuT3IoKSBpbiBHcmVtbGluLk5ldAorKiBUSU5LRVJQT1AtMTkyMCBUZXN0cyBmYWlsIGJlY2F1c2UgUC5XaXRoaW4oKSBhcmd1bWVudHMgYXJlIHdyYXBwZWQgaW4gYW4gYXJyYXkgaW4gR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTE5MjIgR2hlcmtpbiBmZWF0dXJlcyBmYWlsIHRoYXQgY29udGFpbiBQLm5vdCgpIGluIEdyZW1saW4uTmV0CisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTEzNTcgQ2VudHJhbGl0eSBSZWNpcGVzIHNob3VsZCBtZW50aW9uIHBhZ2VSYW5rIGFuZCBPTEFQLgorKiBUSU5LRVJQT1AtMTQ4OSBQcm92aWRlIGEgSmF2YXNjcmlwdCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQKKyogVElOS0VSUE9QLTE1ODYgU3ViZ3JhcGhTdHJhdGVneSBpbiBPTEFQCisqIFRJTktFUlBPUC0xNzI2IFN1cHBvcnQgV2ViU29ja2V0cyBwaW5nL3Bvbmcga2VlcC1hbGl2ZSBpbiBHcmVtbGluIHNlcnZlcgorKiBUSU5LRVJQT1AtMTg0MiBpdGVyYXRlKCkgbWlzc2luZyBpbiB0ZXJtaW5hbCBzdGVwcyBkb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC0xODQ0IFB5dGhvbiBHTFYgdGVzdCBzaG91bGQgcnVuIGZvciBHcmFwaFNPTiAzLjAgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xODUwIFJhbmdlIHN0ZXAgaGFzIHVuZG9jdW1lbnRlZCBzcGVjaWFsIHZhbHVlcworKiBUSU5LRVJQT1AtMTg1NCBTdXBwb3J0IGxhbWJkYXMgaW4gR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTE4NTcgR0xWIHRlc3Qgc3VpdGUgY29uc2lzdGVuY3kgYW5kIGNvbXBsZXRlbmVzcworKiBUSU5LRVJQT1AtMTg2MyBEZWxheWluZyB0aGUgc2V0dGluZyBvZiByZXF1ZXN0SWQgdGlsbCB0aGUgUmVxdWVzdE1lc3NhZ2UgaW5zdGFudGlhdGlvbiB0aW1lCisqIFRJTktFUlBPUC0xODY1IFJ1biBHcmVtbGluIC5ORVQgR0xWIHRlc3RzIHdpdGggR3JhcGhTT04gMy4wCisqIFRJTktFUlBPUC0xODY2IFN1cHBvcnQgZzpUIGZvciAuTkVUCisqIFRJTktFUlBPUC0xODY4IFN1cHBvcnQgaW5qZWN0IHNvdXJjZSBzdGVwIGluIEdyZW1saW4uTmV0CisqIFRJTktFUlBPUC0xODcwIG5eMiBzeW5jaHJvbmlvdXMgb3BlcmF0aW9uIGluIE9MQVAgV29ya2VyRXhlY3V0b3IuZXhlY3V0ZSgpIG1ldGhvZAorKiBUSU5LRVJQT1AtMTg3MSBFeGNlcHRpb24gaGFuZGxpbmcgaXMgc2xvdyBpbiBlbGVtZW50ICBSZWZlcmVuY2VFbGVtZW50IGNyZWF0aW9uCisqIFRJTktFUlBPUC0xODc3IEFkZCBuZXcgZ3JhcGggZGF0YSBmb3Igc3BlY2lhbGl6ZWQgdGVzdGluZyBzY2VuYXJpb3MKKyogVElOS0VSUE9QLTE4ODQgQnVtcCB0byBOZXR0eSA0LjAuNTYuRmluYWwKKyogVElOS0VSUE9QLTE4ODUgVmFyaW91cyBHcmVtbGluLk5ldCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMKKyogVElOS0VSUE9QLTE5MDEgRW5hYmxlIHVzYWdlIG9mIGVudW1zIGluIG1vcmUgc3RlcHMgaW4gR3JlbWxpbi5OZXQKKyogVElOS0VSUE9QLTE5MDggQnVtcCB0byBHcm9vdnkgMi40LjE0CisqIFRJTktFUlBPUC0xOTExIFJlZmFjdG9yIEphdmFUcmFuc2xhdG9yIHRvIGNhY2hlIGFsbCByZWZsZWN0aXZlIGNhbGxzCisqIFRJTktFUlBPUC0xOTE0IFN1cHBvcnQgY29uc3RydWN0IGEgR3JlbWxpblNlcnZlciBpbnN0YW5jZSBmcm9tIGdyZW1saW4gZXhlY3V0b3Igc2VydmljZQorCitbW3JlbGVhc2UtMy0zLTFdXQorPT09IFRpbmtlclBvcCAzLjMuMSAoUmVsZWFzZSBEYXRlOiBEZWNlbWJlciAxNywgMjAxNykKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4yLnguYXNjaWlkb2MjcmVsZWFzZS0zLTItNywgMy4yLjc+Pi4KKworKiBBZGRlZCBgTm9uZVN0ZXBgIGFuZCBgVHJhdmVyc2FsLm5vbmUoKWAgZm9yIGZ1bGwgZmlsdGVyaW5nIGludGVncmF0aW9uIHdpdGggYGl0ZXJhdGUoKWAuCisqIEZpeGVkIGJ1ZyBpbiBzZXJpYWxpemF0aW9uIG9mIGBQYXRoYCBmb3IgR3JhcGhTT04gMy4wIGluIGBncmVtbGluLXB5dGhvbmAuCisqIEFkZGVkIHN1cHBvcnQgZm9yIEdyYXBoU09OIDMuMCBpbiBHcmVtbGluLk5ldC4KKyogQWRkZWQgYG1hdGgoKWAtc3RlcCB3aGljaCBzdXBwb3J0cyBzY2llbnRpZmljIGNhbGN1bGF0b3IgY2FwYWJpbGl0aWVzIGZvciBudW1iZXJzIHdpdGhpbiBhIHRyYXZlcnNhbC4KKyogQWRkZWQgbWlzc2luZyBgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuYWRkRSgpYC1tZXRob2QgdG8gYEdyZW1saW5Ec2xQcm9jZXNzb3JgLgorKiBDaGFuZ2VkIGB0bygpYCBhbmQgYGZyb20oKWAgdHJhdmVyc2FsLWJhc2VkIHN0ZXBzIHRvIHRha2UgYSB3aWxkY2FyZCBgP2AgaW5zdGVhZCBvZiBvZiBgRWAuCisqIEFkZGVkIGBhZGRWKHRyYXZlcnNhbClgIGFuZCBgYWRkRSh0cmF2ZXJzYWwpYCBzbyB0aGF0IGNyZWF0ZWQgZWxlbWVudCBsYWJlbHMgY2FuIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkuCisqIGBQYWdlUmFua1ZlcnRleFByb2dyYW1gIHN1cHBvcnRzIGBtYXhJdGVyYXRpb25zYCBidXQgd2lsbCBicmVhayBvdXQgZWFybHkgaWYgZXBzaWxvbi1iYXNlZCBjb252ZXJnZW5jZSBvY2N1cnMuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGVwc2lsb24tYmFzZWQgY29udmVyZ2VuY2UgaW4gYFBhZ2VSYW5rVmVydGV4UHJvZ3JhbWAuCisqIEZpeGVkIHR3byBtYWpvciBidWdzIGluIGhvdyBQYWdlUmFuayB3YXMgYmVpbmcgY2FsY3VsYXRlZCBpbiBgUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtYC4KKyogQWRkZWQgYElvLnJlcXVpcmVzVmVyc2lvbihPYmplY3QpYCB0byBhbGxvdyBncmFwaCBwcm92aWRlcnMgYSB3YXkgdG8gY2hlY2sgdGhlIGBJb2AgdHlwZSBhbmQgdmVyc2lvbiBiZWluZyBjb25zdHJ1Y3RlZC4KKyogRGVmYXVsdGVkIGBJb0NvcmUuZ3J5bygpYCBhbmQgYElvQ29yZS5ncmFwaHNvbigpYCB0byBib3RoIHVzZSB0aGVpciAzLjAgZm9ybWF0cyB3aGljaCBtZWFucyB0aGF0IGBHcmFwaC5pbygpYCB3aWxsIHVzZSB0aG9zZSBieSBkZWZhdWx0LgorKiBCdW1wZWQgTmVvNGogMy4yLjMKKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTE3NzMgTG9wIHNob3VsZCBiZSBjcmVhdGVkIGFzIGEgInNvZnR3YXJlIiBhbmQgbm90IGEgInBlcnNvbiIKKyogVElOS0VSUE9QLTE3ODMgUGFnZVJhbmsgZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMgZm9yIGdyYXBocyB3aXRoIHNpbmtzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTc5OSBGYWlsdXJlIHRvIHNlcmlhbGl6ZSBwYXRoKCkgaW4gZ3JlbWxpbi1weXRob24KKyogVElOS0VSUE9QLTE4NDcgdGlua2VyZ3JhcGgtZ3JlbWxpbiBkZXBlbmRlbmN5IG9uIGdyZW1saW4tdGVzdCwgYmFkIHNjb3BlPworCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0xNjMyIENyZWF0ZSBhIHNldCBvZiBkZWZhdWx0IGZ1bmN0aW9ucworKiBUSU5LRVJQT1AtMTY5MiBCdW1wIHRvIE5lbzRqIDMuMi4zCisqIFRJTktFUlBPUC0xNzE3IFVwZGF0ZSBuYW1lIGFuZCBsaW5rIG9mIER5bmFtb0RCIHN0b3JhZ2UgYmFja2VuZCBpbiBsYW5kaW5nIHBhZ2UKKyogVElOS0VSUE9QLTE3MzAgR3JlbWxpbiAuTkVUIHN1cHBvcnQgZm9yIEdyYXBoU09OIDMuMAorKiBUSU5LRVJQT1AtMTc2NyBNZXRob2QgZm9yIGdyYXBoIHByb3ZpZGVycyB0byBjaGVjayBhbiBJTyB2ZXJzaW9uIGFuZCB0eXBlCisqIFRJTktFUlBPUC0xNzkzIGFkZEUoKSBzaG91bGQgYWxsb3cgZHluYW1pYyBlZGdlIGxhYmVscworKiBUSU5LRVJQT1AtMTgzNCBDb25zaWRlciBpdGVyYXRlKCkgYXMgYSBmaXJzdCBjbGFzcyBzdGVwCisKK1tbcmVsZWFzZS0zLTMtMF1dCis9PT0gVGlua2VyUG9wIDMuMy4wIChSZWxlYXNlIERhdGU6IEF1Z3VzdCAyMSwgMjAxNykKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4yLnguYXNjaWlkb2MjcmVsZWFzZS0zLTItNiwgMy4yLjY+Pi4KKworKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgU2NyaXB0RWxlbWVudEZhY3RvcnlgLgorKiBBZGRlZCBgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuYWRkRShTdHJpbmcpYCBpbiBzdXBwb3J0IG9mIGBnLmFkZEUoKS5mcm9tKCkudG8oKWAuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGB0byhWZXJ0ZXgpYCBhbmQgYGZyb20oVmVydGV4KWAgYXMgYSBzaG9ydGhhbmQgZm9yIGB0byhWKGEpKWAgYW5kIGBmcm9tKFYoYikpYC4KKyogQnVtcGVkIHRvIHN1cHBvcnQgU3BhcmsgMi4yLjAuCisqIERldGVjdGVkIGlmIHR5cGUgY2hlY2tpbmcgd2FzIHJlcXVpcmVkIGluIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBhbmQgZGlzYWJsZWQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZSBpZiBub3QuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFRyYXZlcnNhbC5zZWxlY3RWM2QwKClgIHN0ZXAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBEZXRhY2hlZEVkZ2UoT2JqZWN0LFN0cmluZyxNYXAsUGFpcixQYWlyKWAgY29uc3RydWN0b3IuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBCaW5kaW5nc2AgY29uc3RydWN0b3IuIEl0IGlzIG5vdyBhIHByaXZhdGUgY29uc3RydWN0b3IuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBUcmF2ZXJzYWxTb3VyY2Uud2l0aEJpbmRpbmdzKClgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwuc2FjayhCaUZ1bmN0aW9uLFN0cmluZylgLgorKiBgVHJhdmVyc2FsTWV0cmljc2AgYW5kIGBNZXRyaWNzYCBHcnlvIDEuMCBmb3JtYXRzIGNoYW5nZWQgZ2l2ZW4gaW50ZXJuYWwgY2hhbmdlcyB0byB0aGVpciBpbXBsZW1lbnRhdGlvbnMuCisqIE1hZGUgYFRyYXZlcnNhbE1ldHJpY3NgIHNhZmUgdG8gd3JpdGUgdG8gZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhdmVyc2FsU2lkZUVmZmVjdHNgIG1ldGhvZHMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBmaW5hbGl6YXRpb24uTGF6eUJhcnJpZXJTdHJhdGVneWAgKG1vdmVkIHRvIGBvcHRpbWl6YXRpb24uTGF6eUJhcnJpZXJTdHJhdGVneWApLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29uc3RhbnRzYCBpbiBIYWRvb3AuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBWZXJ0ZXhDb21wdXRpbmcuZ2VuZXJhdGVDb21wdXRlcihHcmFwaClgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29uZmlndXJhdGlvblRyYXZlcnNhbGAuCisqIEVzdGFibGlzaGVkIHRoZSBHcnlvIDMuMCBmb3JtYXQuCisqIGBHcnlvVmVyc2lvbmAgbm93IGluY2x1ZGVzIGEgZGVmYXVsdCBgQ2xhc3NSZXNvbHZlcmAgdG8gc3VwcGx5IHRvIHRoZSBgR3J5b01hcHBlcmAuCisqIGBHcnlvQ2xhc3NSZXNvbHZlcmAgcmVuYW1lZCB0byBgR3J5b0NsYXNzUmVzb2x2ZXJWMWQwYCB3aGljaCBoYXMgYW4gYWJzdHJhY3QgY2xhc3MgdGhhdCBmb3IgcHJvdmlkZXJzIHRvIGV4dGVuZCBpbiBgQWJzdHJhY3RHcnlvQ2xhc3NSZXNvbHZlcmAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBPcmRlcmAgZW51bXMgb2YgYGtleUluY3JgLCBga2V5RGVjcmAsIGB2YWx1ZUluY3JgLCBhbmQgYHZhbHVlRGVjci5gCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFRyYXZlcnNhbC5tYXBLZXlzKClgIHN0ZXAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFRyYXZlcnNhbC5tYXBWYWx1ZXMoKWAgc3RlcC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyYXBoVHJhdmVyc2FsI2FkZFYoT2JqZWN0Li4uKWAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFRyYXZlcnNhbCNhZGRFKERpcmVjdGlvbiwgU3RyaW5nLCBTdHJpbmcsIE9iamVjdC4uLilgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwjYWRkT3V0RShTdHJpbmcsIFN0cmluZywgT2JqZWN0Li4uKWAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBHcmFwaFRyYXZlcnNhbCNhZGRJblYoU3RyaW5nLCBTdHJpbmcsIE9iamVjdC4uLilgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JhcGhUcmF2ZXJzYWwuZ3JvdXBWM2QwKClgIGFuZCByZXNwZWN0aXZlIGBHcm91cFNpZGVFZmZlY3RTdGVwVjNkMGAgYW5kIGBHcm91cFN0ZXBWM2QwYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFRyYXZlcnNhbFNvdXJjZS5CdWlsZGVyYCBjbGFzcy4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENvbm5lY3RpdmVQYCwgYEFuZFBgLCBgT3JQYCBjb25zdHJ1Y3RvcnMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBUcmF2ZXJzYWxTY3JpcHRGdW5jdGlvbmAgY2xhc3MuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBUcmF2ZXJzYWxTY3JpcHRIZWxwZXJgIGNsYXNzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgU2NyaXB0RW5naW5lQ2FjaGVgIGNsYXNzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29yZUltcG9ydHNgIGNsYXNzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JlbWxpbkp5dGhvblNjcmlwdEVuZ2luZSMoKWAgY29uc3RydWN0b3IuCisqIFJlbW92ZWQgYWNjZXNzIHRvIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29yZUdyZW1saW5QbHVnaW4jSU5TVEFOQ0VgIGZpZWxkLgorKiBgZ3JlbWxpbi5zaGAgYW5kIGBncmVtbG4uYmF0YCBubyBsb25nZXIgc3VwcG9ydCB0aGUgb3B0aW9uIHRvIHBhc3MgYSBzY3JpcHQgYXMgYW4gYXJndW1lbnQgZm9yIGV4ZWN1dGlvbiBtb2RlIHdpdGhvdXQgdXNpbmcgdGhlIGAtaWAgb3B0aW9uLgorKiBHcmFwaGl0ZSBhbmQgR2FuZ2xpYSBhcmUgbm8gbG9uZ2VyIHBhY2thZ2VkIHdpdGggdGhlIEdyZW1saW4gU2VydmVyIGRpc3RyaWJ1dGlvbi4KKyogYFRyYW5zYWN0aW9uRXhjZXB0aW9uYCBpcyBubyBsb25nZXIgYSBjbGFzcyBvZiBgQWJzdHJhY3RUcmFuc2FjdGlvbmAgYW5kIGl0IGV4dGVuZHMgYFJ1bnRpbWVFeGNlcHRpb25gLgorKiBJbmNsdWRlZCBhbiBlbGxpcHNlIG9uIGxvbmcgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgdHJ1bmNhdGVkLgorKiBSZW5hbWVkIGBSYW5nZUJ5SXNDb3VudFN0cmF0ZWd5YCB0byBgQ291bnRTdHJhdGVneWAuCisqIEFkZGVkIG1vcmUgc3BlY2lmaWMgdHlwaW5nIHRvIHZhcmlvdXMgYF9fYCB0cmF2ZXJzYWwgc3RlcHMuIEUuZy4gYDxBLFZlcnRleD5vdXQoKWAgaXMgYDxWZXJ0ZXgsVmVydGV4Pm91dCgpYC4KKyogVXBkYXRlZCBEb2NrZXIgYnVpbGQgc2NyaXB0cyB0byBpbmNsdWRlIFB5dGhvbiBkZXBlbmRlbmNpZXMgKE5PVEU6IHVzZXJzIHNob3VsZCByZW1vdmUgYW55IHByZXZpb3VzbHkgZ2VuZXJhdGVkIFRpbmtlclBvcCBEb2NrZXIgaW1hZ2VzKS4KKyogQWRkZWQgImF0dGFjaG1lbnQgcmVxdWlzaXRlIiBgVmVydGV4UHJvcGVydHkuZWxlbWVudCgpYCBhbmQgYFByb3BlcnR5LmVsZW1lbnQoKWAgZGF0YSBpbiBHcmFwaFNPTiBzZXJpYWxpemF0aW9uLgorKiBHcmFwaFNPTiAzLjAgaXMgbm93IHRoZSBkZWZhdWx0IHNlcmlhbGl6YXRpb24gZm9ybWF0IGluIFRpbmtlckdyYXBoIGFuZCBHcmVtbGluIFNlcnZlci4KKyogQ2hhbmdlZCBgU2VydmVyR3JlbWxpbkV4ZWN1dG9yYCB0byBub3QgdXNlIGdlbmVyaWNzIHNpbmNlIHRoZXJlIHJlYWxseSBpcyBubyBmbGV4aWJpbGl0eSBpbiB0aGUga2luZCBvZiBgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlYCB0aGF0IHdpbGwgYmUgdXNlZC4KKyogUmVtb3ZlZCBzdXBwb3J0IGZvciBwYXNzaW5nIGEgYnl0ZSBhcnJheSBvbiB0aGUgYHNhc2xgIHBhcmFtZXRlci4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyYXBoU09OTWFwcGVyJEJ1aWxkZXIjZW1iZWRUeXBlc2Agb3B0aW9uLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgOnJlbW90ZSBjb25maWcgdGltZW91dCBtYXhgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29ubmVjdGlvblBvb2xTZXR0aW5ncy5zZXNzaW9uSWRgIGFuZCBgQ29ubmVjdGlvblBvb2xTZXR0aW5ncy5vcHRpb25hbFNlc3Npb25JZCgpYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYHJlY29ubmVjdEluaXRpYWxEZWxheWAgc2V0dGluZyBmcm9tIHRoZSBKYXZhIGRyaXZlci4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYHVzZU1hcHBlckZyb21HcmFwaGAgb3B0aW9uLgorKiBFc3RhYmxpc2hlZCB0aGUgR3JhcGhTT04gMy4wIGZvcm1hdCB3aXRoIG5ldyBgZzpNYXBgLCBgZzpMaXN0YCBhbmQgYGc6U2V0YCB0eXBlcy4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYElvLkJ1aWxkZXIjcmVnaXN0cnkoSW9SZWdpc3RyeSlgIG1ldGhvZC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyeW9NZXNzYWdlU2VyaWFsaXplclYxZDAoR3J5b01hcHBlcilgIGNvbnN0cnVjdG9yLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVGlua2VySW9SZWdpc3RyeWAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBnZXRJbnN0YW5jZSgpYCBtZXRob2RzIG9uIGFsbCBUaW5rZXJQb3AgY2xhc3Nlcy4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFZlcnRleFByb3BlcnR5RmVhdHVyZXMuc3VwcG9ydHNBZGRQcm9wZXJ0eSgpYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgVGlua2VyR3JhcGggY29uZmlndXJhdGlvbiBtZW1iZXIgdmFyaWFibGVzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVHJhbnNhY3Rpb24uc3VibWl0KEZ1bmN0aW9uKWAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBPcFNlbGVjdG9ySGFuZGxlci5lcnJvck1ldGVyYCBhbmQgYEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yLmVycm9yTWV0ZXJgIGZpZWxkcy4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yLnZhbGlkQmluZGluZ05hbWVgIGZpZWxkLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgU2ltcGxlQXV0aGVudGljYXRvci5DT05GSUdfQ1JFREVOVElBTFNfTE9DQVRJT05gIGZpZWxkLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgSXRlcmF0b3JIYW5kbGVyYCwgYE5pb0dyZW1saW5SZXNwb25zZUVuY29kZXJgIGFuZCBgV3NHcmVtbGluUmVzcG9uc2VFbmNvZGVyYCBjbGFzc2VzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgU2Vzc2lvbi5raWxsKClgIGFuZCBgU2Vzc2lvbi5tYW51YWxLaWxsKClgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQXV0aGVudGljYXRvci5uZXdTYXNsTmVnb3RpYXRvcigpYCBhbmQgaXRzIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgaW4gY2xhc3NlcyB0aGF0IHdlcmUgYXNzaWduYWJsZSB0byB0aGF0IGludGVyZmFjZS4KKyogUmVtb3ZlZCBgZ3JlbWxpbi1ncm9vdnktdGVzdGAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkICJHIiBmdW5jdGlvbnMgaW4gYGdyZW1saW4tZ3Jvb3Z5YCAoaS5lLiBgR0Z1bmN0aW9uYCkuCisqIFJlbW92ZWQgcmVmZXJlbmNlcyB0byB0aGUgb2xkIGBHcmVtbGluUGx1Z2luYCBzeXN0ZW0gdGhhdCB3YXMgaW4gYGdyZW1saW4tZ3Jvb3Z5YCAtIHRoZSByZXZpc2VkIGBHcmVtbGluUGx1Z2luYCBzeXN0ZW0gaW4gYGdyZW1saW4tY29yZWAgaXMgdGhlIG9ubHkgb25lIG5vdyBpbiB1c2UuCisqIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBubyBsb25nZXIgaW1wbGVtZW50cyB0aGUgbm93IHJlbW92ZWQgYERlcGVuZGVuY3lNYW5hZ2VyYC4KKyogQWRkZWQgYFZlcnRleGAsIGBFZGdlYCwgYFZlcnRleFByb3BlcnR5YCwgYW5kIGBQcm9wZXJ0eWAgc2VyaWFsaXplcnMgdG8gR3JlbWxpbi1QeXRob24gYW5kIGV4cG9zZWQgdGVzdHMgdGhhdCB1c2UgZ3JhcGggb2JqZWN0IGFyZ3VtZW50cy4KKyogYEJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpYCBhbmQgYEJ5dGVjb2RlLmdldFN0ZXBJbnN0cnVjdGlvbnMoKWAgbm93IHJldHVybnMgYExpc3Q8SW5zdHJ1Y3Rpb24+YCBpbnN0ZWFkIG9mIGBJdGVyYWJsZTxJbnN0cnVjdGlvbj5gLgorKiBBZGRlZCB2YXJpb3VzIGBUcmF2ZXJzYWxTdHJhdGVneWAgcmVnaXN0cmF0aW9ucyB3aXRoIGBHcnlvTWFwcGVyYC4KKyogRml4ZWQgYSBuYW1pbmcgbWlzdGFrZSBpbiBHcmVtbGluLVB5dGhvbjogYElkZW50aXR5UmVtb3ZlU3RyYXRlZ3lgIGlzIG5vdyBjYWxsZWQgYElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5YC4KKyogQWRkZWQgYFRyYW5zbGF0aW9uU3RyYXRlZ3lgIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdGhhdCB2ZXJpZmllcyBgQnl0ZWNvZGVgIGdlbmVyYXRlZCBmcm9tIGEgdHJhbnNsYXRpb24gaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGBCeXRlY29kZWAuCisqIE1vdmVkIGBOdW1iZXJIZWxwZXJgIGludG8gdGhlIGBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWxgIHBhY2thZ2UuCisqIEFkZGVkIGBQb3AubWl4ZWRgIGluc3RlYWQgb2YgdXNpbmcgYG51bGxgIHRvIHJlcHJlc2VudCBzdWNoIHNlbWFudGljcy4KKyogYHNlbGVjdCgpYC1zdGVwIG5vdyBkZWZhdWx0cyB0byB1c2luZyBgUG9wLmxhc3RgIGluc3RlYWQgb2YgYFBvcC5taXhlZGAuCisqIEFkZGVkIGBncmVtbGluLWlvLXRlc3RgIG1vZHVsZSB0byB2YWxpZGF0ZSBJTyBmb3JtYXRzLgorKiBgUmVxdWVzdE1lc3NhZ2VgIGFuZCBgUmVzcG9uc2VNZXNzYWdlYCBhcmUgbm93IHJlZ2lzdGVyZWQgd2l0aCBgR3J5b01hcHBlcmAgYXMgcGFydCBvZiB0aGUgVGlua2VyUG9wIHJhbmdlIG9mIHR5cGUgaWRlbnRpZmllcnMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBDb25zb2xlYCBjb25zdHJ1Y3RvciB0aGF0IHRvb2sgYSBgU3RyaW5nYCBhcyBhbiBhcmd1bWVudCBmcm9tIGBncmVtbGluLWNvbnNvbGVgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQ29uY3VycmVudEJpbmRpbmdzYCBmcm9tIGBncmVtbGluLWdyb292eWAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBTY3JpcHRFeGVjdXRvcmAgZnJvbSBgZ3JlbWxpbi1ncm9vdnlgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgU2FuZGJveEV4dGVuc2lvbmAgZnJvbSBgZ3JlbWxpbi1ncm9vdnlgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgY29uc3RydWN0b3IgdGhhdCB0b29rIGBJbXBvcnRDdXN0b21pemVyUHJvdmlkZXJgIGFzIGFuIGFyZ3VtZW50IGZyb20gYGdyZW1saW4tZ3Jvb3Z5YC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUjcGx1Z2lucygpYCBmcm9tIGBncmVtbGluLWdyb292eWAuCisqIEFkZGVkIGBPcHRpb25hbFN0ZXBgIGZvciB1c2Ugd2l0aCBgb3B0aW9uYWwoKWAgdG8gYmV0dGVyIGhhbmRsZSBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIGJyYW5jaCBzaWRlLWVmZmVjdHMuCisqIGBVbmZvbGRTdGVwYCBub3cgc3VwcG9ydHMgdW5mb2xkaW5nIG9mIGFycmF5cy4KKyogUmVtb3ZlZCBhbGwgcGVyZm9ybWFuY2UgdGVzdHMgdGhhdCB3ZXJlIG5vdCBwYXJ0IG9mIGBncmVtbGluLWJlbmNobWFya2AuCisqIFJlbW92ZWQgZGVwZW5kZW5jeSBvbiBganVuaXQtYmVuY2htYXJrc2AgYW5kIGl0J3MgcmVsYXRlZCByZWZlcmVuY2UgdG8gYGgyYC4KKyogTW92ZWQgdGhlIHNvdXJjZSBmb3IgdGhlICJob21lIHBhZ2UiIGludG8gdGhlIHJlcG9zaXRvcnkgdW5kZXIgYC9zaXRlYCBzbyB0aGF0IGl0IGVhc2llciB0byBhY2NlcHQgY29udHJpYnV0aW9ucy4KKyogQWRkZWQgYFVuc2hhZGVkS3J5b1NoaW1TZXJ2aWNlYCBhcyB0aGUgbmV3IGRlZmF1bHQgc2VyaWFsaXplciBtb2RlbCBmb3IgYFNwYXJrR3JhcGhDb21wdXRlcmAuCisqIGBHcnlvUmVnaXN0cmF0b3JgIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIHByZXZpb3VzIGBHcnlvU2VyaWFsaXplcmAgbW9kZWwgaW4gYFNwYXJrR3JhcGhDb21wdXRlcmAuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGBJb1JlZ2lzdHJ5YCBjdXN0b20gc2VyaWFsaXphdGlvbiBpbiBTcGFyay9HaXJhcGggYW5kIHByb3ZpZGVkIGEgZ2VuZXJhbCBgaGFkb29wLWdyZW1saW5gIHRlc3Qgc3VpdGUuCisqIFJlcGxhY2VkIHRlcm0gYFJFU1RgIHdpdGggYEhUVFBgIHRvIHJlbW92ZSBhbnkgY29uZnVzaW9uIGFzIHRvIHRoZSBkZXNpZ24gb2YgdGhlIEFQSS4KKyogTW92ZWQgYGdyZW1saW4tYmVuY2htYXJrYCB1bmRlciBgZ3JlbWxpbi10b29sc2AgbW9kdWxlLgorKiBBZGRlZCBgZ3JlbWxpbi10b29sc2AgYW5kIGl0cyBzdWJtb2R1bGUgYGdyZW1saW4tY292ZXJhZ2VgLgorKiBSZW1vdmVkIGB0cnlSYW5kb21Db21taXQoKWAgZnJvbSBgQWJzdHJhY3RHcmVtbGluVGVzdGAuCisqIENoYW5nZWQgYGdyZW1saW4tYmVuY2htYXJrYCBzeXN0ZW0gcHJvcGVydHkgZm9yIHRoZSByZXBvcnQgbG9jYXRpb24gdG8gYGJlbmNobWFya1JlcG9ydERpcmAgZm9yIGNvbnNpc3RlbmN5LgorKiBBZGRlZCBTeXNWIGFuZCBzeXN0ZW1kIGluaXQgc2NyaXB0cy4KKyogYEdyYXBoVHJhdmVyc2FsLnZhbHVlTWFwKGluY2x1ZGVUb2tlbnMscHJvcGVydHlLZXlzLi4uKWAgbm93IHJldHVybnMgYSBgTWFwPE9iamVjdCxFPmAgc2luY2Uga2V5cyBjb3VsZCBiZSBgVC5pZGAgb3IgYFQubGFiZWxgLgorKiBBZGRlZCBgc2tpcChsb25nKWAgYW5kIGBza2lwKChTY29wZSxsb25nKWAgd2hpY2ggY2FsbCB0aGUgYHJhbmdlKGxvdyxoaWdoKWAgZXF1aXZhbGVudHMgd2l0aCAtMSBhcyB0aGUgaGlnaC4KKyogQWRkZWQgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gdG8gYGdyZW1saW4tc2VydmVyYCBmb3Igd2Vic29ja2V0cyBhbmQgbmlvIHRyYW5zcG9ydC4KKyogQWRkZWQgYXVkaXQgbG9nZ2luZyBvZiBhdXRoZW50aWNhdGVkIHVzZXJzIGFuZCBncmVtbGluIHF1ZXJpZXMgdG8gYGdyZW1saW4tc2VydmVyYC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTEyMTEgVW5mb2xkU3RlcCBzaG91bGQgdW5mb2xkIGFycmF5cy4gKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNDI2IEdyeW9TZXJpYWxpemVyIHNob3VsZCBpbXBsZW1lbnQgSmF2YSBzZXJpYWxpemF0aW9uIGludGVyZmFjZQorKiBUSU5LRVJQT1AtMTQ2NSBSZW1vdmUgZGVwcmVjYXRlZCBuZXdTYXNsTmVnb3RpYXRvciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE0ODMgUHJvcGVydHlNYXBTdGVwIHJldHVybnMgTWFwPFN0cmluZyxFPiBidXQgcHV0cyBub24gU3RyaW5nIGtleXMgaW4gaXQhCisqIFRJTktFUlBPUC0xNTIwIERpZmZlcmVuY2UgYmV0d2VlbiAnaGFzJyBzdGVwIGdlbmVyYXRlZCBncmFwaHNvbjIuMCBpbiBqYXZhIGFuZCBweXRob24gZ2x2IGltcGxlbWVudGF0aW9uCisqIFRJTktFUlBPUC0xNTMzIFN0b3JhZ2UgYW5kIElvUmVnaXN0cnkKKyogVElOS0VSUE9QLTE1OTcgUGF0aFJldHJhY3Rpb25TdHJhdGVneSBtZXNzaW5nIHVwIGNlcnRhaW4gdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMTYzNSBncmVtbGluLXB5dGhvbjogRHVwbGljYXRlIHNlcmlhbGl6YXRpb24gb2YgZWxlbWVudCBwcm9wZXJ0eSBpbiBQcm9wZXJ0eVNlcmlhbGl6ZXIKKyogVElOS0VSUE9QLTE2NTggR3JhcGhzb24yIG1hcCBrZXlzIGFyZSBzZXJpYWxpc2VkIGFzIHN0cmluZ3MKKyogVElOS0VSUE9QLTE3MTYgVHJhdmVyc2FsIHN0cmF0ZWdpZXMgYXJlIG5vdCBhcHBsaWVkIHdpdGggcmVtb3RlIGluIEdyZW1saW4gQ29uc29sZQorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC04MzIgUmVtb3ZlIGRlcHJlY2F0ZWQgYWRkVi9FL0luRS9PdXRFIG1ldGhvZHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC04MzMgUmVtb3ZlIGRlcHJlY2F0ZWQgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZSBjb25zdHJ1Y3RvciBhbmQgcGx1Z2lucygpICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtODM0IFJlbW92ZSBkZXByZWNhdGVkIHNhY2soKSBtZXRob2QgKihicmVha2luZykqCisqIFRJTktFUlBPUC04ODAgUmVtb3ZlIGRlcHJlY2F0ZWQgR3JvdXBTdGVwVjNkMCBhbmQgR3JvdXBTaWRlRWZmZWN0U3RlcFYzZDAgKihicmVha2luZykqCisqIFRJTktFUlBPUC05MjkgUmVtb3ZlIERlcHJlY2F0ZWQgVGlua2VyR3JhcGggcHVibGljIHN0YXRpYyBtZXRob2RzLiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTk4MCBBZGQgYSBzZXJ2aWNlIHNjcmlwdCBvciBkYWVtb24gbW9kZSBpbiB0aGUgZGlzdHJpYnV0aW9uICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtOTk5IFNlcnZlckdyZW1saW5FeGVjdXRvciBjb25zdHJ1Y3Rpb24gbmVlZCBub3QgdXNlIGdlbmVyaWNzIGZvciBFeGVjdXRvclNlcnZpY2UgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMDA0IE1ha2UgVHJhbnNhY3Rpb24uY29tbWl0KCkgZmFpbHVyZXMgY29uc2lzdGVudCBhY3Jvc3MgaW1wbGVtZW50YXRpb25zLiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEwMTAgUmVtb3ZlIGRlcHJlY2F0ZWQgY3JlZGVudGlhbHNEYkxvY2F0aW9uIGZvciBTaW1wbGVBdXRoZW50aWNhdG9yICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTAyNCBSZW1vdmUgZGVwcmVjYXRlZCB0cnlSYW5kb21Db21taXQoKSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEwMjggUmVtb3ZlIGRlcHJlY2F0ZWQgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyBzZXNzaW9uIHNldHRpbmdzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTA0MCBSZW1vdmUgZGVwcmVjYXRlZCBTYW5kYm94RXh0ZW5zaW9uICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTA0NiBSZW1vdmUgZGVwcmVjYXRlZCBHcmVtbGluIFNlcnZlciBoYW5kbGVyIGltcGxlbWVudGF0aW9ucyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEwNDkgUmVtb3ZlIGRlcHJlY2F0ZWQgZXJyb3IgbWV0ZXIgbWVtYmVyIHZhcmlhYmxlcyBpbiBHcmVtbGluIFNlcnZlciBoYW5kbGVycyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEwOTQgUmVtb3ZlIGRlcHJlY2F0ZWQgVmVydGV4UHJvcGVydHlGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTExMTYgU29tZSBhbm9ueW1vdXMgdHJhdmVyc2FsIHN0ZXBzIGNhbiBiZSBoYXJkIHR5cGVkLiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTExMzAgRWFjaCByZWxlYXNlIHNob3VsZCBzdG9yZSBLcnlvL0dyYXBoU09OL0dyYXBoTUwgdmVyc2lvbnMgdG8gZW5zdXJlIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTE0MiBSZW1vdmUgZGVwcmVjYXRlZCB2YWx1ZUluY3IsIHZhbHVlRGVjciwga2V5SW5jciwga2V5RGVjci4gKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMTY5IFJlbW92ZSBkZXByZWNhdGVkIFRyYXZlcnNhbFNjcmlwdEZ1bmN0aW9uIGFuZCBUcmF2ZXJzYWxTY3JpcHRIZWxwZXIgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMTcwIFJlbW92ZSBkZXByZWNhdGVkIENvbmZpZ3VyYXRpb25UcmF2ZXJzYWwuICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTE3MSBSZW1vdmUgZGVwcmVjYXRlZCBUcmF2ZXJzYWxTb3VyY2UuQnVpbGRlciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEyMzUgUmVtb3ZlIGRlcHJlY2F0ZWQgUHJvY2Vzc1BlcmZvcm1hbmNlU3VpdGUgYW5kIFRyYXZlcnNhbFBlcmZvcm1hbmNlVGVzdCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEyNzUgUmVtb3ZlIGRlcHJlY2F0ZWQgbWF4IHNldHRpbmcgZm9yIDpyZW1vdGUgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMjgzIFJlbW92ZSBkZXByZWNhdGVkIFNjcmlwdEV4ZWN1dG9yICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTI4OSBSZW1vdmUgZGVwcmVjYXRlZCBDb25uZWN0aXZlUCwgQW5kUCwgYW5kIE9yUCBjb25zdHJ1Y3RvcnMuICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTI5MSBSZW1vdmUgZGVwcmVjYXRlZCBtYXBWYWx1ZXMgYW5kIG1hcEtleXMgbWV0aG9kcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEzMTMgUmVuYW1lIFJhbmdlQnlJc0NvdW50U3RyYXRlZ3kgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMzE2IFJlbW92ZSBkZXByZWNhdGVkIGNvbnN0cnVjdG9yIGZyb20gR3J5b01lc3NhZ2VTZXJpYWxpemVycyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEzMjcgQnJpbmcgR3J5b1JlZ2lzdHJhdG9yIHRvIHRoZSBmb3JlZnJvbnQgYW5kIGRlcHJlY2F0ZSBHcnlvU2VyaWFsaXplciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEzNjMgQ2xlYW51cCBEb2NrZXIgYnVpbGQgc2NyaXB0IGZvciBuZXh0IG1ham9yIHJlbGVhc2UgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMzY5IFJlcGxhY2UgUkVTVCBBUEkgd2l0aCBIVFRQIEFQSQorKiBUSU5LRVJQT1AtMTM4OSBTdXBwb3J0IFNwYXJrIDIuMC4wCisqIFRJTktFUlBPUC0xMzk5IE51bWJlckhlbHBlciBuZWVkcyB0byBnbyBpbnRvIHV0aWwgYW5kIGhhdmUgYSBwcml2YXRlIGNvbnN0cnVjdG9yICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTQwNCBQYXRoL2xhYmVsIG9wdGltaXphdGlvbgorKiBUSU5LRVJQT1AtMTQwOCBSZW1vdmUgRGVwcmVjYXRlZCBJby5CdWlsZGVyLnJlZ2lzdHJ5KCkgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNDE0IENoYW5nZSBkZWZhdWx0IEdyYXBoU09OIHZlcnNpb24gdG8gMy4wICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTQyMCBSZW1vdmUgZGVwcmVjYXRlZCBDb25jdXJyZW50QmluZGluZ3MgaW4gZ3JlbWxpbi1ncm9vdnkgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNDIxIFJlbW92ZSBkZXByZWNhdGVkIENvbnRyb2xPcHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNDI3IEdyYXBoU09OIDMuMCBuZWVkcyBjb2xsZWN0aW9uIHR5cGVzIGFuZCBjb25zaXN0ZW50IG51bWJlciB0eXBpbmcuCisqIFRJTktFUlBPUC0xNDQzIFVzZSBhbiBBUEkgY2hlY2tlciBkdXJpbmcgYnVpbGQKKyogVElOS0VSUE9QLTE0NDUgTGFyZ2UgbmVzdGVkIFZlcnRleFByb3BlcnRpZXMgYW5kIFByb3BlcnRpZXMgZG8gbm90IGdldCBwcmludGVkIHdlbGwKKyogVElOS0VSUE9QLTE0NTQgQ3JlYXRlIFNlcmlhbGl6ZXJzIGZvciBHcmFwaCBvYmplY3RzIGluIEdyZW1saW4tUHl0aG9uCisqIFRJTktFUlBPUC0xNDgxIFJlbW92ZSBkZXByZWNhdGVkIHJlY29ubmVjdEluaXRpYWxEZWxheSBpbiBKYXZhIGRyaXZlciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE0ODUgTW92ZSBzb3VyY2UgZm9yIFRpbmtlclBvcCBzaXRlIHRvIHNvdXJjZSBjb2RlIHJlcG8KKyogVElOS0VSUE9QLTE1MDYgT3B0aW9uYWwvQ29hbGVzY2Ugc2hvdWxkIG5vdCBhbGxvdyBzaWRlRWZmZWN0IHRyYXZlcnNhbHMuCisqIFRJTktFUlBPUC0xNTE0IFJlc3RydWN0dXJlIGZvciBncmVtbGluLXRvb2xzIG1vZHVsZSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE1MjQgQnl0ZWNvZGUuZ2V0WFhYSW5zdHJ1Y3Rpb25zIHNob3VsZCByZXR1cm4gYSBMaXN0LCBub3QgSXRlcmFibGUuCisqIFRJTktFUlBPUC0xNTI2IFJlbW92ZSBkZXByZWNhdGVkIFNlc3Npb24ga2lsbCgpIG92ZXJsb2FkcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE1MzYgSW5jbHVkZSBHTFZzIGluIERvY2tlciBidWlsZAorKiBUSU5LRVJQT1AtMTU0MSBTZWxlY3Qgc2hvdWxkIGRlZmF1bHQgdG8gUG9wLmxhc3Qgc2VtYW50aWNzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTU0OSBJbXBsZW1lbnQgc2tpcCgpCisqIFRJTktFUlBPUC0xNTUwIE1ha2UgR3JhcGhpdGUgYW5kIEdhbmdsaWEgb3B0aW9uYWwgZGVwZW5kZW5jaWVzCisqIFRJTktFUlBPUC0xNTYzIFJlbW92ZSBkZXByZWNhdGVkIGdldEluc3RhbmNlKCkgbWV0aG9kcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE1NjUgU2V0dXAgR3JhcGhTT04gMy4wCisqIFRJTktFUlBPUC0xNTY2IEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGZvciBncmVtbGluLXNlcnZlcgorKiBUSU5LRVJQT1AtMTU3NCBHZXQgcmlkIG9mIHVudHlwZWQgR3JhcGhTT04gaW4gMy4wCisqIFRJTktFUlBPUC0xNjAzIFJlbW92ZSBzdXBwb3J0IGZvciBTQVNMIGJ5dGUgYXJyYXkgaW4gcHJvdG9jb2wgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNjEyIFJlbW92ZSBncmVtbGluLWdyb292eS10ZXN0IG1vZHVsZSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE2MjEgUmVtb3ZlIGRlcHJlY2F0ZWQgR3JlbWxuUGx1Z2luIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTYyMiBSZW1vdmUgZGVwcmVjYXRlZCBHIGZ1bmN0aW9ucyBpbiBncmVtbGluLWdyb292eSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE2NTEgUmVtb3ZlIGRlcHJlY2F0ZWQgZ3JlbWxpbi5zaCBpbml0IHN5bnRheCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE2ODYgTWFrZSBUcmF2ZXJzYWxNZXRyaWNzIHRocmVhZCBzYWZlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTY5OCBHcnlvIDMuMAorKiBUSU5LRVJQT1AtMTY5OSBSZW1vdmUgZGVwcmVjYXRlZCB1c2VyTWFwcGVyRnJvbUdyYXBoICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTcwMCBSZW1vdmUgZGVwcmVjYXRlZCBlbWJlZFR5cGVzIG9wdGlvbgorKiBUSU5LRVJQT1AtMTcwNiBSZW1vdmUgZGVwcmVjYXRlZCBTY3JpcHRFbmdpbmVDYWNoZSBhbmQgcmVsYXRlZCBkZWFkIGNvZGUgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNzE1IEJ1bXAgdG8gU3BhcmsgMi4yCisqIFRJTktFUlBPUC0xNzE5IFJlbW92ZSBkZXByZWNhdGVkIFRyYXZlcnNhbCByZWxhdGVkIGNvZGUgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNzIwIFJlbW92ZSBkZXByZWNhdGVkIEhhZG9vcCBjb2RlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTcyMSBSZW1vdmUgZGVwcmVjYXRlZCBCaW5kaW5ncyByZWxhdGVkIGNvZGUgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xNzI0IFJlbW92ZSBkZXByZWNhdGVkIFNjcmlwdEVsZW1lbnRGYWN0b3J5CisqIFRJTktFUlBPUC0xNzI5IFJlbW92ZSBkZXByZWNhdGVkIHNlbGVjdCBzdGVwcy4KKyogVElOS0VSUE9QLTE3NDAgQWRkIHZlcnRleCBwYXJhbWV0ZXIgb3ZlcmxvYWQgdG8gdG8oKSBhbmQgZnJvbSgpCisqIFRJTktFUlBPUC0xNzQ3IFN0cmVhbWxpbmUgaW5oZXJpdGFuY2UgZm9yIGdyZW1saW4tcHl0aG9uIEdyYXBoU09OIHNlcmlhbGl6ZXIgY2xhc3NlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjQueC5hc2NpaWRvYyBiL2RvY3MvYXJjaGl2ZS9jaGFuZ2Vsb2dzL2NoYW5nZWxvZy0zLjQueC5hc2NpaWRvYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGMwZGNlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jCkBAIC0wLDAgKzEsODAyIEBACisvLy8vCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisvLy8vCis9PSBUaW5rZXJQb3AgMy40LjAgKEF2YW50LUdyZW1saW4gQ29uc3RydWN0aW9uICMzIGZvciBUaGVyZW1pbiBhbmQgRmxvd2VycykKKworaW1hZ2U6Omh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hcGFjaGUvdGlua2VycG9wL21hc3Rlci9kb2NzL3N0YXRpYy9pbWFnZXMvYXZhbnQtZ3JlbWxpbi5wbmdbd2lkdGg9MTg1XQorCitbW3JlbGVhc2UtMy00LTEzXV0KKz09PSBUaW5rZXJQb3AgMy40LjEzIChSZWxlYXNlIERhdGU6IEphbnVhcnkgMTAsIDIwMjIpCisKKyogRml4ZWQgYFJhbmdlR2xvYmFsU3RlcGAgd2hpY2ggd2FzIHByZW1hdHVyZWx5IGNsb3NpbmcgdGhlIGl0ZXJhdG9yLgorKiBBZGRlZCBleHBsaWNpdCBzdGF0ZSB0byBgRGVmYXVsdFRyYXZlcnNhbGAgdG8gdHJhY2sgd2hldGhlciBvciBub3QgaXQgd2FzIGZ1bGx5IGl0ZXJhdGVkIGFuZCBjbG9zZWQgdG8gZW5zdXJlIGl0IHJlbGVhc2VkIHJlc291cmNlcyBwcm9wZXJseS4KKyogUHJldmVudGVkIFhNTCBFeHRlcm5hbCBFbnRpdHkgKFhYRSkgc3R5bGUgYXR0YWNrcyB2aWEgYEdyYXBoTUxSZWFkZXJgIGJ5IGRpc2FibGluZyBEVEQgYW5kIGV4dGVybmFsIGVudGl0aWVzIGJ5IGRlZmF1bHQuCisqIEltcHJvdmVkIGVycm9yIG1lc3NhZ2UgZm9yIGZhaWxlZCBzZXJpYWxpemF0aW9uIGZvciBIVFRQLWJhc2VkIHJlcXVlc3RzLgorKiBGaXhlZCBhIGBOdWxsUG9pbnRlckV4Y2VwdGlvbmAgdGhhdCBjb3VsZCBvY2N1ciBkdXJpbmcgYSBmYWlsZWQgYENvbm5lY3Rpb25gIGluaXRpYWxpemF0aW9uIGR1ZSB0byB1bmluc3RhbnRpYXRlZCBgQXRvbWljSW50ZWdlcmAuCisqIE1pbm9yIGNoYW5nZXMgdG8gdGhlIGluaXRpYWxpemF0aW9uIG9mIEphdmEgZHJpdmVyIGBDbHVzdGVyYCBhbmQgYENsaWVudGAgc3VjaCB0aGF0IGhvc3RzIGFyZSBtYXJrZWQgYXMgYXZhaWxhYmxlIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemluZyBjb25uZWN0aW9uIHBvb2xzLgorKiBgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uYCBub3cgY29udGFpbnMgYSBjYXVzZSBmb3IgdGhlIGZhaWx1cmUuCisqIEJ1bXBlZCB0byBOZXR0eSA0LjEuNzIuCisqIEFkZGVkIHVzZXItZnJpZW5kbHkgbWVzc2FnZSBpbiBHcmVtbGluIGNvbnNvbGUgZm9yIHVuYXZhaWxhYmxlIGhvc3RzIHVwb24gaW5pdGlhdGlvbiBhbmQgZml4ZWQgcG9zc2libGUgbGVhayBpbiBgUmVtb3RlQ29tbWFuZC5ncm9vdnlgIHVwb24gYFJlbW90ZUV4Y2VwdGlvbmAuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0yNTY5IFJlY29ubmVjdCB0byBzZXJ2ZXIgaWYgSmF2YSBkcml2ZXIgZmFpbHMgdG8gaW5pdGlhbGl6ZQorKiBUSU5LRVJQT1AtMjU4OSBYTUwgRXh0ZXJuYWwgRW50aXR5IChYWEUpIHZ1bG5lcmFiaWxpdHkKKyogVElOS0VSUE9QLTI1OTcgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hpbGUgaW5pdGlhbGl6aW5nIGNvbm5lY3Rpb24gcG9vbAorKiBUSU5LRVJQT1AtMjYwMyBUaW5rZXJHcmFwaCBzb21ldGltZXMgY291bGQgbm90IHF1ZXJ5IGZsb2F0IHZhbHVlcy4KKyogVElOS0VSUE9QLTI2MDkgSFRUUCByZXR1cm5zIHNlcmlhbGl6YXRpb24gZXhjZXB0aW9ucyBmb3IgdGhlIEdyYXBoVHJhdmVyc2FsU291cmNlCisqIFRJTktFUlBPUC0yNjI2IFJhbmdlR2xvYmFsU3RlcCBjbG9zZXMgdHJhdmVyc2FsIHByZW1hdHVyZWx5CisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTI1MDQgSW50ZXJtaXR0ZW50bHkgZmFpbGluZyBzZXJ2ZXIvZHJpdmVyIGludGVncmF0aW9uIHRlc3RzCisqIFRJTktFUlBPUC0yNjE2IFByb3ZpZGUgYmV0dGVyIGV4Y2VwdGlvbnMgd2l0aCBTU0wgcmVsYXRlZCBmYWlsdXJlcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI2MzAgQ2xhcmlmeSB0aGF0IGEgc2VydmVyIGNhbm5vdCBzdXBwb3J0IEdyYXBoc29uMS4wIG92ZXIgSFRUUAorKiBUSU5LRVJQT1AtMjYzMiBOZXR0eSA0LjEuNjEgZmxhZ2dlZCB3aXRoIHR3byBoaWdoIHNldmVyaXR5IHNlY3VyaXR5IHZpb2xhdGlvbnMKKyogVElOS0VSUE9QLTI2NjkgTmV0dHkgNC4xLjYxIGZsYWdnZWQgd2l0aCBtZWRpdW0gc2V2ZXJpdHkgc2VjdXJpdHkgdmlvbGF0aW9ucworCitbW3JlbGVhc2UtMy00LTEyXV0KKz09PSBUaW5rZXJQb3AgMy40LjEyIChSZWxlYXNlIERhdGU6IEp1bHkgMTksIDIwMjEpCisKKyogQ29lcmNlZCBzaW5nbGUgYHNldGAgYXJndW1lbnRzIHRvIGBQLndpdGhpbmAgYW5kIGBQLndpdGhvdXRgIHRvIGBsaXN0YCBpbiBQeXRob24gd2hpY2ggc2VyaWFsaXplcyB0byBhIG1vcmUgZXhwZWN0ZWQgZm9ybSBmb3IgYFBgIGluc3RhbmNlcy4KKyogRml4ZWQgYnVnIGluIHRoZSBgdmVydGV4TGFiZWxLZXlgIHZhbGlkYXRpb24gZm9yIGBHcmFwaE1MV3JpdGVyYCB3aGljaCB3YXMgaW5hZHZlcnRlbnRseSB2YWxpZGF0aW5nIHRoZSBgZWRnZUxhYmVsS2V5YC4KKyogQ2hhbmdlZCBgSW5kZXhTdGVwYCB0byBtYWtlIGl0IGVhc2llciBmb3IgcHJvdmlkZXJzIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZiBpbmRleGVyIGJlaW5nIHVzZWQuCisqIEFsbG93ZWQgSmF2YXNjcmlwdCBgVHJhbnNsYXRvcmAgdG8gdGFrZSBgQnl0ZWNvZGVgIG9yIGEgYFRyYXZlcnNhbGAuCisqIEFkZHJlc3NlZCBDVkUtMjAyMS0zMjY0MCBmb3IgZ3JlbWxpbi1qYXZhc2NyaXB0LgorKiBBbGxvd2VkIGNvbnN0cnVjdGlvbiBvZiBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgaW4gLk5FVCB0byB1c2UgaG9zdCBhbmQgcG9ydCBzcGVjaWZpY2F0aW9uIHNpbWlsYXIgdG8gSmF2YSBzeW50YXguCisqIERlZmF1bHRlZCBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgdG8gImciIGlmIGl0IHRoZSBgVHJhdmVyc2FsU291cmNlYCBiaW5kaW5nIGlzbid0IHN1cHBsaWVkIGluIFB5dGhvbi4KKyogSW5pdGlhbGl6ZWQgbWV0cmljcyBpbiBgUHJvZmlsZVN0ZXBgIGV2ZW4gaWYgdGhlIHN0ZXAgaGFzbid0IGl0ZXJhdGVkLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjM1OCBQb3RlbnRpYWwgY29ubmVjdGlvbiBsZWFrIG9uIGNsaWVudCBkaXNwb3NpbmcKKyogVElOS0VSUE9QLTI1NTQgRXh0cmFjdGluZyBzdGVwIG1ldHJpY3MgZnJvbSBQcm9maWxlU3RlcCB0aHJvd3MgTlBFIGlmIHRoZSBzdGVwIHdhcyBub3QgdHJpZ2dlcmVkCisqIFRJTktFUlBPUC0yNTY1IEdyYXBoTUxXcml0ZXIgZG9lcyBub3QgY2hlY2sgdmVydGV4TGFiZWxLZXkgY29uZmxpY3QKKyogVElOS0VSUE9QLTI1NzggU2V0IGFyZ3VtZW50cyB0byBQIHdpdGhpbi93aXRob3V0IGFyZSB3cmFwcGVkIGluIExpc3QKKyogVElOS0VSUE9QLTI1ODAgVXBkYXRlIHRoZSBjdXN0b20gRFNMIGRvY3VtZW50YXRpb24KKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjU0OCBBZGQgZ2V0dGVyIGZvciBpbmRleGVyIHVzZWQgaW4gSW5kZXhTdGVwCisqIFRJTktFUlBPUC0yNTc3IFJlbW92ZSB1bnVzZWQgdGVzdCBjb3ZlcmFnZSBkZXBlbmRlbmNpZXMgZnJvbSBHcmVtbGluLk5FVAorCitbW3JlbGVhc2UtMy00LTExXV0KKz09PSBUaW5rZXJQb3AgMy40LjExIChSZWxlYXNlIERhdGU6IE1heSAzLCAyMDIxKQorCisqIFByZXZlbnRlZCBKYXZhIGRyaXZlciBmcm9tIHNlbmRpbmcgbXVsdGlwbGUgcmVxdWVzdCBtZXNzYWdlcyB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIuCisqIEltcHJvdmVkIGVycm9yIG1lc3NhZ2UgZm9yIGBwcm9wZXJ0eShULE9iamVjdClgIHdoZW4gbXV0YXRpbmcgZ3JhcGggZWxlbWVudHMuCisqIEFkZGVkIG1ldGhvZCBjYWNoaW5nIGZvciBHcmFwaFNPTiAzLjAgZGVzZXJpYWxpemF0aW9uIG9mIGBQYCBhbmQgYFRleHRQYCBpbnN0YW5jZXMuCisqIEFsbG93ZWQgc2V0dGluZyBgc3NsX29wdGlvbnNgIGZvciBncmVtbGluLXB5dGhvbi4KKyogRml4ZWQgYnVnIHdpdGggZ2xvYmFsIGBkZWR1cCgpYCB3aGVuIHVzZWQgaW4gcmVkdWNpbmcgYGJ5KClgIG9mIGBncm91cCgpYC4KKyogRml4ZWQgYnVnIHdpdGggSmF2YXNjcmlwdCBHcm9vdnkgYFRyYW5zbGF0b3JgIHdoZW4gZ2VuZXJhdGluZyBHcmVtbGluIHdpdGggbXVsdGlwbGUgZW1iZWRkZWQgdHJhdmVyc2Fscy4KKyogTW9kaWZpZWQgR3JlbWxpbiBTZXJ2ZXIgYFNldHRpbmdzYCB0byBiZSBtb3JlIGV4dGVuc2libGUgYWxsb3dpbmcgZm9yIGN1c3RvbSBvcHRpb25zIHdpdGggdGhlIFlBTUwgcGFyc2VyLgorKiBGaXhlZCBgdG9TdHJpbmcoKWAgcmVwcmVzZW50YXRpb24gb2YgYFBgIHdoZW4gc3RyaW5nIHZhbHVlcyBhcmUgcHJlc2VudCBpbiBKYXZhc2NyaXB0LgorKiBFeHBvc2VkIGJhcnJpZXIgc2l6ZSB3aXRoIGdldHRlciBmb3IgYE5vT3BCYXJyaWVyU3RlcGAuCisqIEJ1bXBlZCB0byBOZXR0eSA0LjEuNjEuCisqIEFkZGVkIGBtYXhfY29udGVudF9sZW5ndGhgIGFzIGEgUHl0aG9uIGRyaXZlciBzZXR0aW5nLgorKiBGaXhlZCBidWcgaW4gSmF2YSBgQ2xpZW50YCBpbml0aWFsaXphdGlvbiwgcmVjb25uZWN0IGFuZCBzaHV0ZG93biB3aGVyZSBjZXJ0YWluIHRocmVhZCBwb29sIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IHByb2R1Y2UgYSBkZWFkbG9jay4KKyogRW5zdXJlZCB0aGF0IGBiYXJyaWVyKClgIGFkZGl0aW9ucyBieSBzdHJhdGVnaWVzIHdlcmUgY29udHJvbGxlZCBzb2xlbHkgYnkgYExhenlCYXJyaWVyU3RyYXRlZ3lgLgorKiBGaXhlZCBgTnVsbFBvaW50ZXJFeGNlcHRpb25gIGluIGBSZXNwb25zZU1lc3NhZ2VgIGRlc2VyaWFsaXphdGlvbiBmb3IgR3JhcGhTT04uCisqIEVuYWJsZWQgdGhlIEdyZW1saW4uTmV0IGRyaXZlciB0byByZXBhaXIgaXRzIGNvbm5lY3Rpb24gcG9vbCBhZnRlciB0aGUgc2VydmVyIHdhcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4KKyogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc3VwcGx5IGEgYEhhbmRzaGFrZUludGVyY2VwdG9yYCB0byBhIGBDbHVzdGVyYCB3aGljaCB3aWxsIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBpbml0aWFsIEhUVFAgcmVxdWVzdCB0aGF0IGVzdGFibGlzaGVzIHRoZSB3ZWJzb2NrZXQuCisqIEZpeGVkIGEgcG9zc2libGUgbGVha2FnZSBvZiBjb25uZWN0aW9ucyBpbiB0aGUgR3JlbWxpbi5ORVQgZHJpdmVyIHRoYXQgY291bGQgaGFwcGVuIGlmIGBEaXNwb3NlKClgIHdhcyBjYWxsZWQgd2hpbGUgdGhlIHBvb2wgd2FzIGNyZWF0aW5nIGNvbm5lY3Rpb25zLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjUxMiBEdXBsaWNhdGUgamFycyBpbiBjbGFzc3BhdGggd2hlbiBydW5uaW5nIGdyZW1saW4tc2VydmVyLnNoCisqIFRJTktFUlBPUC0yNTE0IEphdmEgY2xpZW50IGRyaXZlciByZXF1ZXN0cyB3aXRoIHNhbWUgcmVxdWVzdCBpZHMgaGFuZworKiBUSU5LRVJQT1AtMjUxNiBQcm9wZXJ0eSBmb2xkaW5nIGhhcyB0cm91YmxlIHdpdGggY29hbGVzY2UKKyogVElOS0VSUE9QLTI1MjkgR2xvYmFsIGRlZHVwKCkgaW4gcmVkdWNpbmcgYnkoKSBvZiBncm91cCgpIGRldGFjaGVzIGVsZW1lbnRzIGZvciBPTFRQCisqIFRJTktFUlBPUC0yNTMxIEdyZW1saW4gLk5FVCBkcml2ZXIgQ29ubmVjdGlvblBvb2wgY2FuIHJlbWFpbiB3aXRob3V0IGNvbm5lY3Rpb25zIGlmIHNlcnZlciBpcyBkb3duIGZvciAxLTIgbWludXRlcworCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0xOTk0IExhenlCYXJyaWVyU3RyYXRlZ3kgZnVsbHkgcmVzcG9uc2libGUgZm9yIGJhcnJpZXIoKSBhZGRpdGlvbnMKKyogVElOS0VSUE9QLTIxNjggR3JhcGhTT046IFAgZGVzZXJpYWxpemF0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQKKyogVElOS0VSUE9QLTI0NTcgQWRkIGEgbWF4X2NvbnRlbnRfbGVuZ3RoIHBhcmFtZXRlciB0byBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGluIHRoZSBQeXRob24gY2xpZW50CisqIFRJTktFUlBPUC0yNTMyIE1heEJhcnJpZXJTaXplIG9mIE5vT3BCYXJyaWVyU3RlcCBzaG91bGQgYmUgYWNjZXNzaWJsZQorKiBUSU5LRVJQT1AtMjUzNSBOZXR0eSA0LjEuNTIgZmxhZ2dlZCBhcyBtZWRpdW0gc2VjdXJpdHkgdmlvbGF0aW9uCisqIFRJTktFUlBPUC0yNTQ3IFByb3ZpZGUgYW4gb3B0aW9uIHRvIHN1cHBseSBhIGNhbGxiYWNrIGJlZm9yZSBoYW5kc2hha2Ugc3VibWlzc2lvbgorKiBUSU5LRVJQT1AtMjU1MCBEZWFkbG9jayBvbiBDbGllbnQgaW5pdGlhbGl6YXRpb24KKworW1tyZWxlYXNlLTMtNC0xMF1dCis9PT0gVGlua2VyUG9wIDMuNC4xMCAoUmVsZWFzZSBEYXRlOiBKYW51YXJ5IDE4LCAyMDIxKQorCisqIEFkZGVkIGBHcmVtbGluU2NyaXB0Q2hlY2tlcmAgdG8gcHJvdmlkZSBhIHdheSB0byBleHRyYWN0IHByb3BlcnRpZXMgb2Ygc2NyaXB0cyBiZWZvcmUgZG9pbmcgYW4gYWN0dWFsIGBldmFsKClgLgorKiBBZGRlZCBgbm9uZSgpYCBzdGVwIGZvciBhbGwgbGFuZ3VhZ2UgdmFyaWFudHMuCisqIEZpeGVkIGJ1ZyBpbiBgUHl0aG9uVHJhbnNsYXRvcmAgd2hpY2ggd2FzIGltcHJvcGVybHkgdHJhbnNsYXRpbmcgYExhbWJkYWAgc2NyaXB0cy4KKyogRml4ZWQgYnVnIGluIGBHcmVtbGluRHNsUHJvY2Vzc29yYCB3aGVyZSBjZXJ0YWluIHJldHVybiB0eXBlcyBpbiBgVHJhdmVyc2FsU291cmNlYCBkZWZpbml0aW9ucyB3ZXJlIG5vdCBnZW5lcmF0aW5nIGNvZGUgdGhhdCB3b3VsZCBjb21waWxlLgorKiBDaGFuZ2VkIHRoZSBkZWZhdWx0IHJlYWQgYW5kIHdyaXRlIHRpbWVvdXQgdmFsdWVzIGZvciB0aGUgYFRvcm5hZG9UcmFuc3BvcnRgIHRvIGBOb25lYCB0byBkaXNhYmxlIGl0LgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNS4xNC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI0OTYgR3JlbWxpbkRzbFByb2Nlc3NvciBmYWlscyB3aGVuIFNvY2lhbFRyYXZlcnNhbFNvdXJjZURzbCBvdmVycmlkZXMgY2xvc2UKKyogVElOS0VSUE9QLTI1MDUgR3JlbWxpbiBQeXRob24gQ2xpZW50IFF1ZXJ5IFRpbWVzIG91dCBhdCAzMCBzZWNvbmRzIGluc3RlYWQgb2YgdGhlIHNlcnZlciB0aW1lb3V0CisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTI0NDcgSW1wcm92ZSBoYW5kbGluZyBvZiBTdGFja092ZXJmbG93RXJyb3IgZm9yIGxvbmcgdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMjQ4NSBJbnZhbGlkIGh0dHAgdGVzdHMgd2l0aCA/Z3JlbWxpbj0xLTEKKyogVElOS0VSUE9QLTI1MDAgQWRkIG5vbmUoKSBzdGVwIGZvciBhbGwgR0xWcworCitbW3JlbGVhc2UtMy00LTldXQorPT09IFRpbmtlclBvcCAzLjQuOSAoUmVsZWFzZSBEYXRlOiBEZWNlbWJlciA3LCAyMDIwKQorCisqIE1vZGlmaWVkIHRoZSB0ZXh0IG9mIGBwcm9maWxlKClgIG91dHB1dCB0byBoaWRlIHN0ZXAgaW5zdGFuY2VzIGluamVjdGVkIGZvciBwdXJwb3NlIG9mIGNvbGxlY3RpbmcgbWV0cmljcy4KKyogQnVtcGVkIHRvIEphY2tzb24gMi4xMS54LgorKiBCdW1wZWQgTmV0dHkgNC4xLjUyLgorKiBBZGRlZCBsYW1iZGEgc3VwcG9ydCBmb3IgYGdyZW1saW4tamF2YXNjcmlwdGAuCisqIFByb3ZpZGVkIGEgbW9yZSBjb25jaXNlIHN5bnRheCBmb3IgY29uc3RydWN0aW5nIHN0cmF0ZWdpZXMgaW4gR3Jvb3Z5LgorKiBBbGlnbmVkIGBDb3JlSW1wb3J0c2Agd2l0aCBgR3Jvb3Z5VHJhbnNsYXRvcmAgdG8gZ2VuZXJhdGUgbW9yZSBzdWNjaW5jdCBzeW50YXguCisqIEltcHJvdmVkIGBncmVtbGluLWdyb292eWAgdW5kZXJzdGFuZGluZyBvZiBgd2l0aFNhY2soKWAgb3ZlcmxvYWRzIHRvIGF2b2lkIGZvcmNlZCBjYXN0cy4KKyogTW92ZWQgYFRyYW5zbGF0b3JgIGluc3RhbmNlcyB0byBgZ3JlbWxpbi1jb3JlYC4KKyogUHJldmVudGVkIGJhcnJpZXJzIGZyb20gb3Zlci1yZWFjaGluZyB0aGVpciBsaW1pdHMgYnkgb25lLgorKiBBZGRlZCBgQ2hlY2tlZEdyYXBoTWFuYWdlcmAgdG8gcHJldmVudCBHcmVtbGluIFNlcnZlciBmcm9tIHN0YXJ0aW5nIGlmIHRoZXJlIGFyZSBubyBncmFwaHMgY29uZmlndXJlZC4KKyogRml4ZWQgYnVnIGluIGJ5dGVjb2RlIGBCaW5kaW5nc2Agd2hlcmUgY2FsbGluZyBgb2YoKWAgcHJpb3IgdG8gY2FsbGluZyBhIGNoaWxkIHRyYXZlcnNhbCBpbiB0aGUgc2FtZSBwYXJlbnQgd291bGQgY2F1c2UgdGhlIGluaXRpYWwgYmluZGluZyB0byBiZSBsb3N0LgorKiBFc3RhYmxpc2hlZCBhIGRlZmF1bHQgcmVhZCBhbmQgd3JpdGUgdGltZW91dCBmb3IgdGhlIGBUb3JuYWRvVHJhbnNwb3J0YCBpbiBQeXRob24sIGFsbG93aW5nIGl0IHRvIGJlIGNvbmZpZ3VyYWJsZS4KKyogRGVsZWdhdGVkIGhhbmRsaW5nIG9mIGVycm9uZW91cyByZXNwb25zZSB0byB0aGUgd29ya2VyIHRocmVhZCBwb29sIGluc3RlYWQgb2YgZXZlbnQgbG9vcCB0aHJlYWQgcG9vbCBpbiBKYXZhIERyaXZlci4KKyogUmVtb3ZlZCBgQ29ubmVjdGlvbmAgZnJvbSBgQ29ubmVjdGlvbiBQb29sYCB3aGVuIHNlcnZlciBjbG9zZXMgYSBjb25uZWN0aW9uIHdpdGggbm8gcGVuZGluZyByZXF1ZXN0cyBpbiBKYXZhIERyaXZlci4KKyogSW1wcm92ZWQgaW5pdGlhbGl6YXRpb24gdGltZSBvZiBKYXZhIERyaXZlciBpZiB0aGUgZGVmYXVsdCBzZXJpYWxpemVyIGlzIHJlcGxhY2VkLgorKiBEZXByZWNhdGVkIGB3aXRoR3JhcGgoKWAgaW4gZmF2b3Igb2YgYHdpdGhFbWJlZGRlZCgpYCBvbiBgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlYC4KKyogQWRkZWQgc3VwcG9ydCBmb3IgcGVyLXJlcXVlc3QgbGV2ZWwgY29uZmlndXJhdGlvbnMsIGxpa2UgdGltZW91dHMsIGluIC5ORVQsIFB5dGhvbiBhbmQgSmF2YXNjcmlwdC4KKyogRml4ZWQgYnVnIGluIEphdmFzY3JpcHQgYFRyYW5zbGF0b3JgIHRoYXQgd2Fzbid0IGhhbmRsaW5nIGNoaWxkIHRyYXZlcnNhbHMgd2VsbC4KKyogUHJldmVudGVkIEdyZW1saW4gUHl0aG9uIHN1Z2FyIGZyb20gYmVpbmcgY29uZnVzZWQgYnkgUHl0aG9uIG1hZ2ljIG1ldGhvZHMuCisqIEFsbG93ZWQgR3JlbWxpbiBQeXRob24gc3VnYXIgY2FsbHMgZnJvbSBhbm9ueW1vdXMgY29udGV4dC4KKyogSW1wbGVtZW50ZWQgYEF1dG9DbG9zZWFibGVgIG9uIGBNdWx0aUl0ZXJhdG9yYC4KKyogRml4ZWQgYW4gaXRlcmF0b3IgbGVhayBpbiBgSGFzQ29udGFpbmVyYC4KKyogRml4ZWQgYnVnIGluIGA6Ynl0ZWNvZGVgIGNvbW1hbmQgcHJldmVudGluZyB0cmFuc2xhdGlvbnMgd2l0aCB3aGl0ZXNwYWNlIGZyb20gd29ya2luZyBwcm9wZXJseS4KKyogQWRkZWQgYHJlc2V0YCBhbmQgYGNvbmZpZ2Agb3B0aW9ucyB0byB0aGUgYDpieXRlY29kZWAgY29tbWFuZCB0byBhbGxvdyBmb3IgZ3JlYXRlciBjdXN0b21pemF0aW9uIG9wdGlvbnMuCisqIEFkZGVkIEdyYXBoU09OIGV4dGVuc2lvbiBtb2R1bGUgYW5kIHRoZSBgVGlua2VySW9SZWdpc3RyeWAgdG8gdGhlIGRlZmF1bHQgYEdyYXBoU09OTWFwcGVyYCBjb25maWd1cmF0aW9uIHVzZWQgYnkgdGhlIGA6Ynl0ZWNvZGVgIGNvbW1hbmQuCisqIEFkZGVkIGBHcmVtbGluQVNUQ2hlY2tlcmAgdG8gcHJvdmlkZSBhIHdheSB0byBleHRyYWN0IHByb3BlcnRpZXMgb2Ygc2NyaXB0cyBiZWZvcmUgZG9pbmcgYW4gYWN0dWFsIGBldmFsKClgLgorKiBBdm9pZGVkIGNyZWF0aW5nIHVubmVjZXNzYXJ5IGRldGFjaGVkIG9iamVjdHMgaW4gSlZNLgorKiBBZGRlZCBzdXBwb3J0IGZvciBgVHJhdmVyc2FsU3RyYXRlZ3lgIHVzYWdlIGluIEphdmFzY3JpcHQuCisqIEFkZGVkIGBUcmF2ZXJzYWwuZ2V0VHJhdmVyc2VyU2V0U3VwcGxpZXIoKWAgdG8gYWxsb3cgcHJvdmlkZXJzIHRvIHN1cHBseSB0aGVpciBvd24gYFRyYXZlcnNlclNldGAgaW5zdGFuY2VzLgorKiBSZWxlYXNlIHNlcnZlciB0aHJlYWRzIHdhaXRpbmcgb24gY29ubmVjdGlvbiBpZiB0aGUgY29ubmVjdGlvbiBpcyBkZWFkLgorKiBGaXhlZCBidWcgd2hlcmUgc2VydmVyIGNsb3NlcyBIVFRQIGNvbm5lY3Rpb24gb24gcmVxdWVzdCBlcnJvciBldmVuIGlmIGtlZXAgYWxpdmUgaXMgc2V0IHRvIHRydWUuCisqIERlcHJlY2F0ZWQgZHJpdmVyIGBDaGFubmVsaXplcmAga2VlcC1hbGl2ZSByZWxhdGVkIG1ldGhvZHMuCisqIERlbGVnYXRlIGhhbmRsaW5nIG9mIFdlYlNvY2tldCBoYW5kc2hha2UgdG8gTmV0dHkgaW5zdGVhZCBvZiBjdXN0b20gY29kZSBpbiBKYXZhIERyaXZlci4KKyogRGVsZWdhdGUgZGV0ZWN0aW9uIG9mIGlkbGUgY29ubmVjdGlvbiB0byBOZXR0eSBpbnN0ZWFkIG9mIGN1c3RvbSBrZWVwIGFsaXZlIGxvZ2ljIGZvciBgV2ViU29ja2V0Q2hhbm5lbGl6ZXJgLgorKiBBZGRlZCBzdXBwb3J0IGZvciBXZWJTb2NrZXQgZnJhbWUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICggW1JGQzc2OTJdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NjkyKSApIGZvciBgV2ViU29ja2V0Q2hhbm5lbGl6ZXJgIGluIEphdmEvUHl0aG9uIGRyaXZlci4KKyogQWRkZWQgc2VydmVyIHN1cHBvcnQgZm9yIFdlYlNvY2tldCBjb21wcmVzc2lvbiBleHRlbnNpb24gKCBbUkZDNzY5Ml0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc2OTIpICkuCisqIEZpeGVkIGJ1ZyB3aXRoIEJ5dGVjb2RlIHNlcmlhbGl6YXRpb24gd2hlbiBgQnl0ZWNvZGUudG9TdHJpbmcoKWAgaXMgdXNlZCBpbiBKYXZhc2NyaXB0LgorKiBGaXhlZCAidG9TdHJpbmciIGZvciBQIGFuZCBUZXh0UCB0byBwcm9kdWNlIHZhbGlkIHNjcmlwdCByZXByZXNlbnRhdGlvbiBmcm9tIGJ5dGVjb2RlIGdsdiBzdGVwcyBjb250YWluaW5nIGEgc3RyaW5nIHByZWRpY2F0ZSBpbiBKYXZhc2NyaXB0LgorKiBGaXhlZCBhIGJ1ZyB3aGljaCBjb3VsZCBjYXVzZSBKYXZhIGRyaXZlciB0byBoYW5nIHdoZW4gdXNpbmcgYFJlc3VsdFNldC5zdGF0dXNBdHRyaWJ1dGVzKClgCisqIEFkZGVkIGEgbGlzdGVuZXIgdG8gamF2YXNjcmlwdCdzIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCB0byBmaW5kIG5vdGUgZXJyb3JzIGZyb20gd2Vic29ja2V0IGNvbm5lY3Rpb24gc2V0dXAuCisqIEZpeGVkIGJ1ZyB3aXRoIGBSZXNlcnZlZFZlcmlmaWNhdGlvblN0cmF0ZWd5LmdldENvbmZpZ3VyYXRpb24oKWAgd2hpY2ggd2FzIG9taXR0aW5nIHRoZSByZXNlcnZlZCBga2V5c2AgdmFsdWUuCisqIENoYW5nZWQgYWxsIGNvbmZpZ3VyYXRpb24ga2V5cyBvbiBgQWJzdHJhY3RXYXJuaW5nVmVyaWZpY2F0aW9uU3RyYXRlZ3lgIGltcGxlbWVudGF0aW9ucyB0byBgcHVibGljYC4KKyogRGVwcmVjYXRlZCBgQnl0ZWNvZGVVdGlsYCBhbmQgbWVyZ2VkIGl0cyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBleGlzdGluZyBgQnl0ZWNvZGVIZWxwZXJgLgorKiBBZGRlZCBjb25maWd1cmluZyBpbXBsZW1lbnRhdGlvbiBpbiBIYXNTdGVwCisqIFJlbW92ZSBzdGF0aWMgaW5pdGlhbGl6YXRpb24gZm9yIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjFkMGAgYW5kIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjFkMGAgaW4gSmF2YSBkcml2ZXIuCisqIENvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgaW4gYSBjb25uZWN0aW9uIHBvb2wgYXJlIGNyZWF0ZWQgaW4gcGFyYWxsZWwgaW5zdGVhZCBvZiBzZXJpYWxseSBpbiBKYXZhIERyaXZlci4KKyogQ29ubmVjdGlvbiBwb29scyBmb3IgbXVsdGlwbGUgZW5kcG9pbnRzIGFyZSBjcmVhdGVkIGluIHBhcmFsbGVsIGluc3RlYWQgb2Ygc2VyaWFsbHkgaW4gSmF2YSBEcml2ZXIuCisqIEludHJvZHVjZWQgbmV3IEhvc3ROb3RBdmFpbGFibGUgZXhjZXB0aW9uIHRvIHJlcHJlc2VudCBjYXNlcyB3aGVuIG5vIHNlcnZlciB3aXRoIGFjdGl2ZSBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZS4KKyogRG9uJ3Qgd2FpdCBmb3IgbmV3IHJlcXVlc3RzIGR1cmluZyBzaHV0ZG93biBvZiBldmVudCBsb29wIGdyb3VwIGluIEphdmEgRHJpdmVyLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjM2NCBJbmplY3RlZCBQcm9maWxlU3RlcCBzaG91bGQgbm90IGJlIGRpc3BsYXllZCBpbiBjaGlsZCB0cmF2ZXJzYWxzCisqIFRJTktFUlBPUC0yMzY5IENvbm5lY3Rpb25zIGluIENvbm5lY3Rpb25Qb29sIGFyZSBub3QgcmVwbGFjZWQgaW4gYmFja2dyb3VuZCB3aGVuIHVuZGVybHlpbmcgY2hhbm5lbCBpcyBjbG9zZWQKKyogVElOS0VSUE9QLTI0MDMgR3JlbWxpbiBqYXZhc2NyaXB0IFRyYW5zbGF0b3IgZG9lcyBub3QgaGFuZGxlIGNoaWxkIHRyYXZlcnNhbHMKKyogVElOS0VSUE9QLTI0MDUgZ3JlbWxpbnB5dGhvbjogdHJhdmVyc2FsIGhhbmdzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYnV0IHRoZSBzZXJ2ZXJzIHN0b3BzIHJlc3BvbmRpbmcgbGF0ZXIKKyogVElOS0VSUE9QLTI0MDggSXRlcmF0b3IgbGVhayBpbiBIYXNDb250YWluZXIKKyogVElOS0VSUE9QLTI0MDkganM6IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gbmV2ZXIgdGltZXMgb3V0IGlmIHNlcnZlciB1cmkgbm90IGF2YWlsYWJsZS4KKyogVElOS0VSUE9QLTI0MTAgRnJlZSB1cCBzZXJ2ZXIgdGhyZWFkcyB3aGVuIGNsaWVudCBpcyBjbG9zZWQKKyogVElOS0VSUE9QLTI0MjUgU2VydmVyIGNsb3NlcyBIVFRQIGNvbm5lY3Rpb24gZm9yIGtlZXBBbGl2ZSBhcyB0cnVlCisqIFRJTktFUlBPUC0yNDMyIEdlbmVyYXRlIGNvcnJlY3QgdG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbiBvZiBieXRlY29kZSBpbiBKYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yNDMzIHR5cG8gaW4gamF2YWRvY3MgbWF0Y2goKSBUeXBlIFBhcmFtZXRlcnMKKyogVElOS0VSUE9QLTI0MzUgR3JlbWxpbiBQeXRob24gc3VnYXIgc3ludGF4IGZvciB2YWx1ZXMoKSBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHByb2JsZW1zCisqIFRJTktFUlBPUC0yNDM3IGdyZW1saW4tZHJpdmVyIGhhbmdzIGlmIFJlc3VsdFNldC5zdGF0dXNBdHRyaWJ1dGVzKCkuZ2V0KCkgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgdGhyb3dzCisqIFRJTktFUlBPUC0yNDM5IFAgYW5kIFRleHRQIHRvU3RyaW5nKCkgaXMgYnJva2VuCisqIFRJTktFUlBPUC0yNDU4IEJ5dGVjb2RlIEJpbmRpbmdzIGxvc3Qgd2hlbiBmb2xsb3dlZCBieSBhIGNoaWxkIHRyYXZlcnNhbAorKiBUSU5LRVJQT1AtMjQ2NSBUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UgZmlsZSBoYW5kbGluZyBpcyBpbnZhbGlkIG9uIHdpbmRvd3MKKyogVElOS0VSUE9QLTI0NzUgQmFycmllciBzdGVwIHRvdWNoZXMgb25lIG1vcmUgZWxlbWVudCBvZiBuZXh0IGxvb3AKKyogVElOS0VSUE9QLTI0NzggQ29uc29sZSBieXRlIGNvZGUgdHJhbnNsYXRvciBoYXMgaXNzdWVzIHdpdGggIm5ldyBEYXRlKCkiCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTIwMDEgU3VwcG9ydCBsYW1iZGFzIGluIEphdmFzY3JpcHQKKyogVElOS0VSUE9QLTIwNTQgU3VwcG9ydCBUcmF2ZXJzYWxTdHJhdGVneSBzcGVjaWZpY2F0aW9uIGluIGdyZW1saW4tamF2YXNjcmlwdAorKiBUSU5LRVJQT1AtMjI5NiBQZXIgcXVlcnkgdGltZW91dCBub3Qgd29ya2luZyBmcm9tIFB5dGhvbgorKiBUSU5LRVJQT1AtMjM5MiBJbXByb3ZlIG1vZHVsZSBsZXZlbCBkb2N1bWVudGF0aW9uIGZvciBHTFZzCisqIFRJTktFUlBPUC0yMzk2IFRyYXZlcnNlclNldCBzaG91bGQgYmUgZXh0ZW5kYWJsZSBmb3IgR3JhcGhEQiBwcm92aWRlcgorKiBUSU5LRVJQT1AtMjM5NyBEb24ndCBjcmVhdGUgdGhlIGRlZmF1bHQgR3lybyBzZXJpYWxpemVyIGlmIHRoZSBjYWxsZXIgc3BlY2lmaWVzIGEgZGlmZmVyZW50IG9uZQorKiBUSU5LRVJQT1AtMjQwMSBVcGdyYWRlIEphY2tzb24tZGF0YWJpbmQgdG8gMi4xMS54CisqIFRJTktFUlBPUC0yNDA2IERlbGVnYXRlIHByb2Nlc3NpbmcgZnJvbSBldmVudCBsb29wIHRvIHdvcmtlciB0aHJlYWRzCisqIFRJTktFUlBPUC0yNDEyIEFkZCBtaXNzaW5nIHF1ZXJ5IHRlc3RzCisqIFRJTktFUlBPUC0yNDEzIFByZWZlciB3aXRoRW1iZWRkZWQoKSB0byB3aXRoR3JhcGgoKSBvbiBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UKKyogVElOS0VSUE9QLTI0MTUgQXZvaWQgdW5uZWNlc3NhcnkgZGV0YWNoZWQgb2JqZWN0cyBpZiBub3QgcmVxdWlyZWQKKyogVElOS0VSUE9QLTI0MTYgTXVsdGlJdGVyYXRvciBzaG91bGQgaW1wbGVtZW50IEF1dG9DbG9zZWFibGUKKyogVElOS0VSUE9QLTI0MjAgU3VwcG9ydCBwZXIgcXVlcnkgcmVxdWVzdCBvcHRpb25zIGluIC5ORVQKKyogVElOS0VSUE9QLTI0MjEgU3VwcG9ydCBwZXIgcXVlcnkgb3B0aW9ucyBpbiBqYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yNDI2IFVzZSBOZXR0eSdzIFdlYlNvY2tldENsaWVudFByb3RvY29sSGFuZGxlcgorKiBUSU5LRVJQT1AtMjQyNyBTaW1wbGlmeSBOZXR0eSByZWZlcmVuY2UgY291bnRpbmcKKyogVElOS0VSUE9QLTI0MzAgTG9vcGluZyBSZWNpcGllcworKiBUSU5LRVJQT1AtMjQzMSBPcGVyYXRpbmcgb24gRHJvcHBlZCBFbGVtZW50cyBSZWNpcGVzCisqIFRJTktFUlBPUC0yNDM2IFRoZSBncmVtbGluIHNlcnZlciBzdGFydHMgZXZlbiBpZiBhbGwgZ3JhcGhzIGluc3RhbnRpYXRpb24gaGFzIGZhaWxlZAorKiBUSU5LRVJQT1AtMjQzOCBQcm92aWRlIGEgd2F5IGZvciBzY3JpcHRzIHRvIHJlc3BlY3Qgd2l0aCgpIHNwZWNpZmljYXRpb24gb2YgdGltZW91dAorKiBUSU5LRVJQT1AtMjQ0MCBTaW1wbGlmeSBkcml2ZXIgYnkgZGVsZWdhdGluZyBrZWVwQWxpdmUgbG9naWMgdG8gTmV0dHkKKyogVElOS0VSUE9QLTI0NDEgQWRkIGNvbXByZXNzaW9uIHRvIFdlYlNvY2tldCBmcmFtZXMgc2VudCBmcm9tIGNsaWVudAorKiBUSU5LRVJQT1AtMjQ0MiBNYWtlIFRyYW5zbGF0b3JzIHRoYXQgd29yayBpbiBKYXZhIHBhcnQgb2YgZ3JlbWxpbi1jb3JlCisqIFRJTktFUlBPUC0yNDQ1IFNwZWVkIHVwIGNsaWVudCBpbml0aWFsaXphdGlvbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI0NDYgQWRkIFJlY2lwZSBmb3IgT3B0aW9uYWwgTG9vcGluZworKiBUSU5LRVJQT1AtMjQ1MyBBZGQgV2ViU29ja2V0IGNvbXByZXNzaW9uIHRvIGdyZW1saW4tcHl0aG9uCisqIFRJTktFUlBPUC0yNDYxIEFsaWduIENvcmVJbXBvcnRzIHdpdGggR3Jvb3Z5VHJhbnNsYXRvcgorKiBUSU5LRVJQT1AtMjQ2MiBEdXBsaWNhdGVkIEJ5dGVjb2RlVXRpbCBhbmQgQnl0ZWNvZGVIZWxwZXIgY2xhc3NlcworKiBUSU5LRVJQT1AtMjQ2NiBJbXByb3ZlIHN5bnRheCBmb3IgR3Jvb3Z5IHNjcmlwdHMgdGhhdCB1c2Ugd2l0aFN0cmF0ZWdpZXMoKQorKiBUSU5LRVJQT1AtMjQ2OCBTdGFiaWxpemUgc2hvdWxkUHJvY2Vzc1Nlc3Npb25SZXF1ZXN0c0luT3JkZXIoKSB0ZXN0CisqIFRJTktFUlBPUC0yNDY5IEtyYkV4Y2VwdGlvbiAtIFByaW5jaXBhbCBkb2VzIG5vdCBleGlzdCBpbiB0ZXN0CisqIFRJTktFUlBPUC0yNDc0IHdpdGhTYWNrKCkgR3Jvb3Z5IHRyYW5zbGF0aW9uIG91dHB1dCBjb3VsZCBiZSBzaW1wbGlmaWVkCisqIFRJTktFUlBPUC0yNDc5IFByb3ZpZGUgYSB3YXkgdG8gc2V0IGEgY3VzdG9tIEdyYXBoU09OTWFwcGVyIGZvciA6Ynl0ZWNvZGUgY29tbWFuZAorKiBUSU5LRVJQT1AtMjQ4MiBSZW5hbWUgd3NDb25uZWN0aW9uVGltZW91dCB0byBjb25uZWN0aW9uU2V0dXBUaW1lb3V0CisKK1tbcmVsZWFzZS0zLTQtOF1dCis9PT0gVGlua2VyUG9wIDMuNC44IChSZWxlYXNlIERhdGU6IEF1Z3VzdCAzLCAyMDIwKQorCisqIEZpeGVkIGJ1ZyBpbiBgaGFzKFQsVHJhdmVyc2FsKWAgd2hlcmUgcmVzdWx0cyB3ZXJlIG5vdCBiZWluZyByZXR1cm5lZC4KKyogRml4ZWQgYnVnIGluIGBzZWxlY3QoVHJhdmVyc2FsKWAgd2hlcmUgc2lkZS1lZmZlY3RzIHdlcmUgZ2V0dGluZyBsb3N0IGlmIGFjY2Vzc2VkIGZyb20gdGhlIGNoaWxkIHRyYXZlcnNhbC4KKyogRml4ZWQgYXV0aG9yaXphdGlvbiBidWcgd2hlbiB1c2luZyBgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyYCB3aXRoIGtlZXAtYWxpdmUgZW5hYmxlZC4KKyogRml4ZWQgYnVnIGluIG9wdGlvbi1sZXNzIGNvbnN0cnVjdGlvbiBvZiBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgaW4gSmF2YXNjcmlwdC4KKyogQnVtcGVkIEphY2tzb24gdG8gMi45LjEwLjUuCisqIEltcHJvdmVkIHNhbXBsaW5nIGRpc3RyaWJ1dGlvbiBmb3IgZ2xvYmFsIHNjb3BlIGBzYW1wbGUoKWAgb3BlcmF0aW9ucy4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIyODggR2V0IENvbm5lY3Rpb25Qb29sQnVzeUV4Y2VwdGlvbiBhbmQgdGhlbiBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbnMKKyogVElOS0VSUE9QLTIzNTIgR3JlbWxpbiBQeXRob24gZHJpdmVyIGRlZmF1bHQgcG9vbCBzaXplIG1ha2VzIEdyZW1saW4ga2VlcC1hbGl2ZSBkaWZmaWN1bHQKKyogVElOS0VSUE9QLTIzNzQgU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlciBjYW4ndCBleHRyYWN0IGF1dGhvcml6YXRpb24KKyogVElOS0VSUE9QLTIzODMgaGFzKFQsVHJhdmVyc2FsKSBkb2VzIG5vdCByZXR1cm4gcmVzdWx0cworKiBUSU5LRVJQT1AtMjM4NCBJbmplY3QgYW5kIHdpdGhTaWRlRWZmZWN0IGNhdXNpbmcgZGlmZmVyZW50IG91dGNvbWVzIGluIG9yZGVyIHN0ZXAKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjMyOCBEbyBub3QgY2xvc2UgYWxsIGNvbm5lY3Rpb25zIGlmIGp1c3Qgb25lIGhhcyBiZWNhbWUgY2xvc2VkCisqIFRJTktFUlBPUC0yMzc2IFByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBjb250cm9sbGVkIGJ5IHdlaWdodCB3aGVuIHVzaW5nIHNhbXBsZSBzdGVwCisKK1tbcmVsZWFzZS0zLTQtN11dCis9PT0gVGlua2VyUG9wIDMuNC43IChSZWxlYXNlIERhdGU6IEp1bmUgMSwgMjAyMCkKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtMTEsIDMuMy4xMT4+LgorCisqIEdyZW1saW4uTkVUIGRyaXZlcjogRml4ZWQgYSBgTnVsbFJlZmVyZW5jZUV4Y2VwdGlvbmAgYW5kIHRocm93IGNsZWFyIGV4Y2VwdGlvbiBpZiByZWNlaXZlZCBtZXNzYWdlIGlzIGVtcHR5LgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNS4xMS4KKyogTW9kaWZpZWQgYEltcG9ydEdyZW1saW5QbHVnaW5gIHRvIGFsbG93IGZvciBmaWVsZCBpbXBvcnRzLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGZvciBgbWF0aCgpYCB3aGVuIHRoZSBzZWxlY3RlZCBrZXkgaW4gYSBgTWFwYCBpcyBgbnVsbGAgb3Igbm90IGEgYE51bWJlcmAuCisqIEFkZGVkIGA6Y2xzYCBjb21tYW5kIHRvIEdyZW1saW4gQ29uc29sZSB0byBjbGVhciB0aGUgc2NyZWVuLgorKiBCdW1wZWQgTmV0dHkgNC4xLjQ5LgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjE5MiBHcmVtbGluLk5ldC5Ecml2ZXIuQ29ubmVjdGlvbi5QYXJzZSB0aHJvd3MgYSBOdWxsUmVmZXJlbmNlRXhjZXB0aW9uCisqIFRJTktFUlBPUC0yMzQ1IE51bGxQb2ludGVyRXhjZXB0aW9uIHdoZW4gTWFwIGtleSBpcyBub3QgZm91bmQgZm9yIG1hdGgoKQorKiBUSU5LRVJQT1AtMjM0NyBSZW1vdmUgaW52YWxpZCBzZXJ2aWNlIGRlc2NyaXB0b3JzIGZyb20gZ3JlbWxpbi1zaGFkZWQKKyogVElOS0VSUE9QLTIzNTAgY2xvbmUoKSBpcyBub3QgZGVlcCBjb3B5aW5nIFRyYXZlcnNhbCBpbnRlcm5hbHMKKyogVElOS0VSUE9QLTIzNTEgTG9jYWwgTWFwIG9yZGVyaW5nIG9mIGtleXMgY2FuIGdlbmVyYXRlIGNhc3QgZXJyb3JzCisqIFRJTktFUlBPUC0yMzUzIEVycm9yIHdoaWxlIFNodXR0aW5nIERvd24gR3JlbWxpbiBTZXJ2ZXIKKyogVElOS0VSUE9QLTIzNTUgSmFja3Nvbi1kYXRhYmluZCB2ZXJzaW9uIGluIEdyZW1saW4gc2hhZGVkIGRlcGVuZGVuY3kgbmVlZHMgdG8gYmUgaW5jcmVhc2VkICAtIGludHJvZHVjZXMgdnVsbmVyYWJpbGl0eSBpc3N1ZXMKKyogVElOS0VSUE9QLTIzNjAgZmFpbGVkIHRvIGRlc2VyaWFsaXplciBpbnQzMiB3aGVuIGdyZW1saW4tcHl0aG9uIHN1Ym1pdCBieXRlY29kZSB3aXRoIGEgYmlnIGludCB2YWx1ZQorKiBUSU5LRVJQT1AtMjM2NSBMYXp5QmFycmllclN0cmF0ZWd5IGFkZHMgYSBOb09wQmFycmllclN0ZXAgd2hlbiBwcm9maWxlKCkgaXMgcHJlc2VudAorKiBUSU5LRVJQT1AtMjM2OCBKQVZBX09QVElPTlMgYXJlIG5vdCBwcm9wZXJseSBleHBhbmRlZCBpbiBncmVtbGluLWNvbnNvbGUKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjIxNSBCZXR0ZXIgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIGNvbm5lY3Rpb24gcHJvYmxlbXMKKyogVElOS0VSUE9QLTIzMzYgQWxsb3cgY2xvc2Ugb2YgY2hhbm5lbCB3aXRob3V0IGhhdmluZyB0byB3YWl0IGZvciBzZXJ2ZXIKKyogVElOS0VSUE9QLTIzMzkgR3JlbWxpbi5OZXQ6IFVwZGF0ZSBTeXN0ZW0uTmV0LldlYlNvY2tldHMuQ2xpZW50IGRlcGVuZGVuY3kKKyogVElOS0VSUE9QLTIzNTQgRG9jdW1lbnQgcmVjb21tZW5kYXRpb24gdG8gcmV1c2UgZ3JhcGggdHJhdmVyc2FsIHNvdXJjZQorKiBUSU5LRVJQT1AtMjM1NyBBZGQgYSBjb21tYW5kIHRvIGNsZWFyIHRoZSBHcmVtbGluIENvbnNvbGUgc2NyZWVuCisqIFRJTktFUlBPUC0yMzcxIEFkZCBwb3NzaWJpbGl0eSB0byBpbXBvcnQgY29uc3RhbnRzIHdpdGggSW1wb3J0R3JlbWxpblBsdWdpbgorCitbW3JlbGVhc2UtMy00LTZdXQorPT09IFRpbmtlclBvcCAzLjQuNiAoUmVsZWFzZSBEYXRlOiBGZWJydWFyeSAyMCwgMjAyMCkKKworKiBGaXhlZCBidWcgaW4gYGRyb3AoKWAgb2YgcHJvcGVydGllcyB3aGljaCB3YXMgaW50cm9kdWNlZCBpbiAzLjQuNS4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIzMzggZHJvcCgpIG5vdCByZW1vdmluZyBhbGwgZWRnZS9tZXRhIHByb3BlcnRpZXMKKworW1tyZWxlYXNlLTMtNC01XV0KKz09PSBUaW5rZXJQb3AgMy40LjUgKFJlbGVhc2UgRGF0ZTogRmVicnVhcnkgMywgMjAyMCkKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtMTAsIDMuMy4xMD4+LgorCisqIEV4cGFuZGVkIHRoZSB1c2Ugb2YgYGJ5KFN0cmluZylgIG1vZHVsYXRvciBzbyB0aGF0IGl0IGNhbiB3b3JrIG9uIGBNYXBgIGFzIHdlbGwgYXMgYEVsZW1lbnRgLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdpbmcgZm9yIGBieShTdHJpbmcpYCBzbyB0aGF0IGl0IGlzIG1vcmUgY2xlYXIgYXMgdG8gd2hhdCB0aGUgcHJvYmxlbSBpcworKiBCdW1wZWQgdG8gTmV0dHkgNC4xLjQyCisqIEltcHJvdmVkIFNQQVJRTCBxdWVyeSB0cmFuc2xhdGlvbiB0byBiZXR0ZXIgYWxsb3cgZm9yIGluZGV4IG9wdGltaXphdGlvbnMgZHVyaW5nIGV4ZWN1dGlvbi4KKyogSW1wcm92ZWQgR3JlbWxpbiBTZXJ2ZXIgd2Vic29ja2V0IGhhbmRsaW5nIHByZXZlbnRpbmcgYXV0b21hdGljIHNlcnZlciBjbG9zZSBvZiB0aGUgY2hhbm5lbCBmb3IgcHJvdG9jb2wgZXJyb3JzLgorKiBJbnRyb2R1Y2VkIGludGVybmFsIGBCdWZmZXJgIEFQSSBhcyBhIHdheSB0byB3cmFwIE5ldHR5J3MgQnVmZmVyIEFQSSBhbmQgbW92ZWQgYEdyYXBoQmluYXJ5UmVhZGVyYCwgYEdyYXBoQmluYXJ5V3JpdGVyYCBhbmQgYFR5cGVTZXJpYWxpemVyPFQ+YCB0byBgZ3JlbWxpbi1jb3JlYC4KKyogVW5pZmllZCB0aGUgYmVoYXZpb3Igb2YgcHJvcGVydHkgY29tcGFyaXNvbjogb25seSBjb21wYXJlIGtleSZ2YWx1ZS4KKyogU3VwcG9ydGVkIGBoYXNLZXkoKWAgYW5kIGBoYXNWYWx1ZSgpYCBzdGVwIGZvciBlZGdlIHByb3BlcnR5IGFuZCBtZXRhIHByb3BlcnR5LCBsaWtlIGBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KCd4eCcpYC4KKyogTW9kaWZpZWQgZHJpdmVyIHRvIHNlbmQgYG92ZXJyaWRlUmVxdWVzdElkYCBhbmQgYHVzZXJBZ2VudGAgdG8gc2VydmVyIHdoZW4gdGhleSBhcmUgcHJlc2VudCBpbiBgUmVxdWVzdE9wdGlvbnNgIGZvciBieXRlY29kZSByZXF1ZXN0cy4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIxNzUgRXhlY3V0b3IgdGhyZWFkIGlzIG5vdCByZXR1cm5lZCBvbiBjaGFubmVsIGNsb3NlCisqIFRJTktFUlBPUC0yMjY2IEtlZXAgYWxpdmUgbm90IHN0YXJ0ZWQgYXQgY29ubmVjdGlvbiBjcmVhdGlvbgorKiBUSU5LRVJQT1AtMjI3NCBUZXN0IG9mIFRpbmtlckdyYXBoIEdyZW1saW4gZmFpbCBvbiBXaW5kb3dzIGFuZCBub24gRU4gbG9jYWxlCisqIFRJTktFUlBPUC0yMzE4IEVkZ2UgcHJvcGVydGllcyBkZWR1cCgpIG5vdCB3b3JrIHdpdGggc3BhcmstZ3JlbWxpbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIzMzIgSmF2YVNjcmlwdCBHTFY6IHN0cnVjdHVyZSBlbGVtZW50IHRvU3RyaW5nKCkgc2hvdWxkIGludGVybmFsbHkgY2FsbCB0b1N0cmluZygpCisqIFRJTktFUlBPUC0yMzMzIEphdmFTY3JpcHQgR0xWOiBHcmFwaFNPTjIvMyBFZGdlIGRlc2VyaWFsaXphdGlvbiBpcyBpbnZhbGlkCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTE3MzMgaGFzS2V5LCBoYXNWYWx1ZXMgc2hvdWxkIHdvcmsgb24gRWxlbWVudCBhbmQgUHJvcGVydHkKKyogVElOS0VSUE9QLTIyNjIgSW1wcm92ZSBOZXR0eSBwcm90b2NvbCBoYW5kbGluZworKiBUSU5LRVJQT1AtMjMwNSBHcmFwaEJpbmFyeTogV3JhcCBCdWZmZXIgQVBJCisqIFRJTktFUlBPUC0yMzA3IEFkZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBmb3IgYmFkbHkgY29uZmlndXJlZCBDaGFubmVsaXplcgorKiBUSU5LRVJQT1AtMjMwOSBCdW1wIGdyZW1saW5weXRob24gdG8gVG9ybmFkbyA1LngKKyogVElOS0VSUE9QLTIzMTQgRW1wbG95IGJ5KFN0cmluZykgZm9yIE1hcCB3aGVuIHBvc3NpYmxlIGFuZCBpbXByb3ZlIGVycm9ycyBhcm91bmQgaW5jb3JyZWN0IHR5cGVzCisqIFRJTktFUlBPUC0yMzE1IEltcGxlbWVudCBzb21lIGZvcm0gb2YgY2xvbmUoKSBvciByZXNldCgpIGZvciBUcmF2ZXJzYWwgaW4gR0xWcworKiBUSU5LRVJQT1AtMjMyMCBbU0VDVVJJVFldIFhNTElucHV0RmFjdG9yeSBpbml0aWFsaXphdGlvbiBpbiBHcmFwaE1MUmVhZGVyIGludHJvZHVjZXMKKyogVElOS0VSUE9QLTIzMjIgRGVwcmVjYXRlIEp5dGhvbiBzdXBwb3J0CisqIFRJTktFUlBPUC0yMzI0IERlcHJlY2F0ZSB0aGUgcmF3IE5JTyBzdXBwb3J0IGluIHRoZSBKYXZhIGRyaXZlcgorKiBUSU5LRVJQT1AtMjMyNSBHZW5lcmF0ZSB0cmF2ZXJzYWxzIHRoYXQgd2lsbCBiZXR0ZXIgeWllbGQgaW5kZXggbG9va3VwcyB3aXRoIFNQQVJRTAorKiBUSU5LRVJQT1AtMjMyOSBKYXZhU2NyaXB0IEdMVjogVXBkYXRlIHdlYnNvY2tldCBsaWJyYXJ5IGRlcGVuZGVuY3kKKyogVElOS0VSUE9QLTIzMzAgSmF2YVNjcmlwdCBHTFYgc2hvdWxkIGV4cG9zZSBHcmFwaFNPTjJXcml0ZXIgYW5kIEdyYXBoU09OUmVhZGVyCisKK1tbcmVsZWFzZS0zLTQtNF1dCis9PT0gVGlua2VyUG9wIDMuNC40IChSZWxlYXNlIERhdGU6IE9jdG9iZXIgMTQsIDIwMTkpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTksIDMuMy45Pj4uCisKKyogUHJvdmlkZWQgc3VwcG9ydCBmb3IgRFNMcyBieSB3YXkgb2YgcmVtb3RlIGNvbm5lY3Rpb25zIHRocm91Z2ggYEFub255bW91c1RyYXZlcnNhbFNvdXJjZWAuCisqIEFkZGVkIGBlbGVtZW50TWFwKClgIHN0ZXAuCisqIEFkZGVkIEdyYXBoQmluYXJ5IHN1cHBvcnQgZm9yIFB5dGhvbi4KKyogQWxsb3dlZCBmb3IgZW1iZWRkZWQgbWFwIGFzc2VydGlvbnMgaW4gR0xWIHRlc3RzLgorKiBBZGRlZCBgRGlyZWN0aW9uYCBkZXNlcmlhbGl6YXRpb24gc3VwcG9ydCBpbiBHTFZzLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjE1OSBFdmVudFN0cmF0ZWd5IGRvZXNuJ3QgaGFuZGxlIG11bHRpLXZhbHVlZCBwcm9wZXJ0aWVzCisqIFRJTktFUlBPUC0yMjc2IE5vIGNvbnN0cnVjdG9yIGZvciByZW1vdGUgY29ubmVjdGlvbiBpbiBEU0wgZ2VuZXJhdGVkIHRyYXZlcnNhbCBzb3VyY2UKKyogVElOS0VSUE9QLTIyODMgR3JhcGhTdGVwJ3MgaWRzIG51bGwgZXhjZXB0aW9uCisqIFRJTktFUlBPUC0yMjg1IEVycm9yIG9iamVjdCBpcyB1bnJlYWNoYWJsZQorKiBUSU5LRVJQT1AtMjI4OSBVc2UgYWRkcmVzcyBpbnN0ZWFkIG9mIGhvc3RuYW1lIGZvciBjb25uZWN0aW9uCisqIFRJTktFUlBPUC0yMjkwIEphdmFzY3JpcHQgR0xWIGNvbm5lY3Rpb24gcmVmdXNlZCBlcnJvciBoYW5kbGluZworKiBUSU5LRVJQT1AtMjI5MSBUcmF2ZXJzYWxFeHBsYW5hdGlvbiBkZXNlcmlhbGl6YXRpb24gaW4gR3JhcGhTT04KKyogVElOS0VSUE9QLTIyOTggQnl0ZWNvZGUuamF2YSAgZmxhdHRlbkFyZ3VtZW50cyB0aHJvdyBleGNlcHRpb24gd2hlbiBudWxsCisqIFRJTktFUlBPUC0yMzAzIEdyZW1saW5Ec2wgZ2VuZXJhdGUgYWRkViBpbnN0ZWFkIG9mIGFkZEUKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTgxMCBBZGQgTGFtYmRhLmJpbmFyeU9wZXJhdG9yIGFuZCBMYW1iZGEudW5hcnlPcGVyYXRvcgorKiBUSU5LRVJQT1AtMTgzOCBQeXRob24gc2FtcGxlIHNjcmlwdAorKiBUSU5LRVJQT1AtMjA0NiBHcmVtbGluLVB5dGhvbjogU3VwcG9ydCBjdXN0b20gcmVxdWVzdCBoZWFkZXJzIGluIFdlYlNvY2tldCByZXF1ZXN0CisqIFRJTktFUlBPUC0yMjEzIFJlcGxhY2Ugc2NyaXB0RXZhbHVhdGlvblRpbWVvdXQgaW4gZmF2b3Igb2Ygc29tZXRoaW5nIG1vcmUgc3VpdGFibGUgdG8gYnl0ZWNvZGUKKyogVElOS0VSUE9QLTIyNzUgVXBkYXRlIGphY2tzb24gZGF0YWJpbmQgMi45LjkuMysKKyogVElOS0VSUE9QLTIyNzcgUHl0aG9uIHNkayBwb3N0cG9uZSB0aGUgdGltaW5nIHRvIGNyZWF0ZSB0cmFuc3BvcnQKKyogVElOS0VSUE9QLTIyNzkgR3JhcGhCaW5hcnkgc3VwcG9ydCBpbiBQeXRob24KKyogVElOS0VSUE9QLTIyODAgUHJldmVudCB1c2Ugb2YgVCB2YWx1ZXMgYXMgcHJvcGVydHkga2V5IG92ZXJsb2FkcworKiBUSU5LRVJQT1AtMjI4NCBNYWtlIGl0IGVhc2llciB0byByZXR1cm4gbW9yZSBzdHJ1Y3R1cmUgb2YgZ3JhcGggZWxlbWVudHMKKyogVElOS0VSUE9QLTIzMDIgQWRkIGlzT25HcmFwaENvbXB1dGVyKCkgZmllbGQgYWNjZXNzb3IgdG8gRWxlbWVudE1hcFN0ZXAKKworW1tyZWxlYXNlLTMtNC0zXV0KKz09PSBUaW5rZXJQb3AgMy40LjMgKFJlbGVhc2UgRGF0ZTogQXVndXN0IDUsIDIwMTkpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuMy54LmFzY2lpZG9jI3JlbGVhc2UtMy0zLTgsIDMuMy44Pj4uCisKKyogSW1wcm92ZWQgZXJyb3IgbWVzc2FnaW5nIG9uIHRpbWVvdXRzIHJldHVybmVkIHRvIHRoZSBjb25zb2xlIGZyb20gYDo+YC4KKyogQWRkZWQgYSBgdG9TdHJpbmcoKWAgc2VyaWFsaXplciBmb3IgR3JhcGhCaW5hcnkuCisqIENvbmZpZ3VyZWQgdGhlIEdyZW1saW4gQ29uc29sZSB0byB1c2UgR3JhcGhCaW5hcnkgYnkgZGVmYXVsdC4KKyogRml4ZWQgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBmb3IgZW1wdHkgaXRlcmF0b3JzIGluIEdyZW1saW4gU2VydmVyLgorKiBEZXByZWNhdGVkIGBNZXNzYWdlU2VyaWFsaXplcmAgaW1wbGVtZW50YXRpb25zIGZvciBHcnlvIGluIEdyZW1saW4gU2VydmVyLgorKiBEZXByZWNhdGVkIGBTZXJpYWxpemVyc2AgZW51bSB2YWx1ZXMgb2YgYEdSWU9fVjFEMGAgYW5kIGBHUllPX1YzRDBgLgorKiBEZXByZWNhdGVkIGBTZXJUb2tlbnNgIHZhbHVlcyBvZiBgTUlNRV9HUllPX1YxRDBgIGFuZCBgTUlNRV9HUllPX1YzRDBgLgorKiBBZGRlZCBhIERvY2tlciBjb21tYW5kIHRvIHN0YXJ0IEdyZW1saW4gU2VydmVyIHdpdGggdGhlIHN0YW5kYXJkIEdMViB0ZXN0IGNvbmZpZ3VyYXRpb25zLgorKiBBZGRlZCBgYWdncmVnYXRlKFNjb3BlLFN0cmluZylgIGFuZCBkZXByZWNhdGVkIGBzdG9yZSgpYCBpbiBmYXZvciBvZiBgYWdncmVnYXRlKGxvY2FsKWAuCisqIE1vZGlmaWVkIGBOdW1iZXJIZWxwZXJgIHRvIGJldHRlciBpZ25vcmUgYERvdWJsZS5OYU5gIGluIGBtaW4oKWAgYW5kIGBtYXgoKWAgY29tcGFyaXNvbnMuCisqIEJ1bXBlZCB0byBOZXR0eSA0LjEuMzYuCisqIEJ1bXBlZCB0byBHcm9vdnkgMi41LjcuCisqIEFkZGVkIGB1c2VyQWdlbnRgIHRvIFJlcXVlc3RPcHRpb25zLiBHcmVtbGluIENvbnNvbGUgc2VuZHMgYEdyZW1saW4gQ29uc29sZS88dmVyc2lvbj5gIGFzIHRoZSBgdXNlckFnZW50YC4KKyogRml4ZWQgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBpZ25vcmluZyBgd2l0aGAgYFRva2VuYCBvcHRpb25zIHdoZW4gbXVsdGlwbGUgd2VyZSBzZXQuCisqIEFkZGVkIGA6c2V0IHdhcm5pbmdzIDx0cnVlfGZhbHNlPmAgdG8gR3JlbWxpbiBDb25zb2xlLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTYxOSBUaW5rZXJHcmFwaENvbXB1dGVyIHdvcmtlciBjb3VudCBhZmZlY3RzIE9wdGlvbmFsU3RlcCBxdWVyeSByZXN1bHRzCisqIFRJTktFUlBPUC0yMTU3IFNwYXJrU3RhckJhcnJpZXJJbnRlcmNlcHRvciBpbmplY3RzIChCeXRlKSAwCisqIFRJTktFUlBPUC0yMjI0IERldGVjdCBhbmQgZml4IHJlc291cmNlIGxlYWsKKyogVElOS0VSUE9QLTIyMzAgbWF0Y2goKSBzdGVwIHVuZXhwZWN0ZWQgYmVoYXZpb3VycworKiBUSU5LRVJQT1AtMjIzMiBSZW1vdGVTdHJhdGVneSBkb2VzIG5vdCBjYWxsIHBhcmVudCBjbGFzcyBUcmF2ZXJzYWxTdHJhdGVneSBfX2luaXRfXworKiBUSU5LRVJQT1AtMjIzOCBGaXggcmVtYWluaW5nIGl0ZXJhdG9yIGxlYWtzIG1hcmtlZCBieSBASWdub3JlSXRlcmF0b3JMZWFrCisqIFRJTktFUlBPUC0yMjQxIENsaWVudCBleGNlcHRpb24gZG9uJ3QgbWF0Y2ggU2VydmVyIGV4Y2VwdGlvbiB3aGVuIHNlcnZlciAgdGhyb3cgU3RhY2tPdmVyZmxvd0Vycm9yCisqIFRJTktFUlBPUC0yMjQ4IEluc3RhYmlsaXR5IG9mIGRyaXZlciBmb3IgYmxvY2tlZCByZXF1ZXN0cworKiBUSU5LRVJQT1AtMjI1NyB0cmFuc2FjdGlvbiBpdHR5ICBtYXkgc3RpbGwgYmUgdmlzaXRlZCBhZnRlciBjb21taXQKKyogVElOS0VSUE9QLTIyNjQgR3JlbWxpbiBQeXRob24gc2hvdWxkIGRlc2VyaWFsaXplIGc6RGF0ZSB0byBVVEMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTA4NCBCcmFuY2ggb3B0aW9uIHRva2VucyBzaG91bGQgYmUgYWxsb3dlZCB0byBiZSB0cmF2ZXJzYWxzLgorKiBUSU5LRVJQT1AtMTU1MyBEZXByZWNhdGUgc3RvcmUoKSBpbiBmYXZvciBvZiBhZ2dyZWdhdGUoU2NvcGUpCisqIFRJTktFUlBPUC0xOTIxIFN1cHBvcnQgaGFzTmV4dCB0ZXJtaW5hbCBzdGVwIGluIEdMVnMKKyogVElOS0VSUE9QLTIwMjAgU3VwcG9ydCB3aXRoQ29tcHV0ZXIoKSBmb3IgamF2YXNjcmlwdAorKiBUSU5LRVJQT1AtMjIyMyBVcGRhdGUgamFja3NvbiBkYXRhYmluZCB0byAyLjkuOQorKiBUSU5LRVJQT1AtMjIzNiBJbXByb3ZlIGVycm9yIG1lc3NhZ2luZyBmb3IgVGlua2VyR3JhcGggSWRNYW5hZ2VycyB0aGF0IGZhaWwgb24gY29udmVyc2lvbnMKKyogVElOS0VSUE9QLTIyMzcgUHJldmVudCBlcnJvciB3aGVuIGNsb3Npbmcgc2Vzc2lvbnMgdGhhdCBkb24ndCBleGlzdCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIyNDIgQnVtcCB0byBuZXR0eSA0LjEuMzYKKyogVElOS0VSUE9QLTIyNDMgQWRkIHVzZXItYWdlbnQgdG8gUmVxdWVzdE9wdGlvbnMKKyogVElOS0VSUE9QLTIyNDYgQ29uc29saWRhdGUgdGhlIGVycm9yIHByb3BhZ2F0aW9uIHRvIHRoZSBjbGllbnQKKyogVElOS0VSUE9QLTIyNTAgU3VwcG9ydCB0b1N0cmluZyBzZXJpYWxpemF0aW9uIGluIEdyYXBoQmluYXJ5CisqIFRJTktFUlBPUC0yMjU2IHByb2Nlc3NBbGxTdGFydHMgb2YgQWdncmVnYXRlU3RlcCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBiYXJyaWVyIGlzIGVtcHR5CisqIFRJTktFUlBPUC0yMjYwIFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIDIuOS45LjEKKyogVElOS0VSUE9QLTIyNjUgRGVwcmVjYXRlIFRyYXZlcnNhbC5nZXRTaWRlRWZmZWN0cygpIGZ1bmN0aW9uYWxpdHkgZm9yIHJlbW90aW5nIHB1cnBvc2VzCisqIFRJTktFUlBPUC0yMjcwIERlcHJlY2F0ZSBtdWx0aS9tZXRhcHJvcGVydHkgc3VwcG9ydCBpbiBOZW80agorKiBUSU5LRVJQT1AtMjI3MSBBZGQgY29uc29sZSBwcmVmZXJlbmNlIHRvIGNvbnRyb2wgc2VydmVyLW9yaWdpbmF0ZWQgd2FybmluZyBkaXNwbGF5CisqIFRJTktFUlBPUC0yMjcyIFJlbmFtZSBzdGVwcyBhbmQgdG9rZW5zIHRoYXQgY29uZmxpY3Qgd2l0aCBzdGFuZGFyZCBweXRob24gZnVuY3Rpb25zCisKK1tbcmVsZWFzZS0zLTQtMl1dCis9PT0gVGlua2VyUG9wIDMuNC4yIChSZWxlYXNlIERhdGU6IE1heSAyOCwgMjAxOSkKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtNywgMy4zLjc+Pi4KKworKiBBbGxvdyBhIGBUcmF2ZXJzYWxgIHRvIGtub3cgd2hhdCBgVHJhdmVyc2FsU291cmNlYCBpdCBzcGF3bmVkIGZyb20uCisqIEZpeGVkIHByb2JsZW0gd2l0aCBjb25uZWN0aW9uIHBvb2wgc2l6aW5nIGFuZCByZXRyeS4KKyogQWRkZWQgc3RhdHVzIGF0dHJpYnV0ZSBmb3Igd2FybmluZ3MgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KKyogTW9kaWZpZWQgR3JlbWxpbiBDb25zb2xlIHRvIHJlcG9ydCB3YXJuaW5nIHN0YXR1cyBhdHRyaWJ1dGVzLgorKiBDaGFuZ2VkIGA6PmAgaW4gR3JlbWxpbiBDb25zb2xlIHRvIHN1Ym1pdCB0aGUgY2xpZW50LXNpZGUgdGltZW91dCBvbiBlYWNoIHJlcXVlc3QuCisqIFByb3ZpZGVkIG1ldGhvZCB0byBvdmVycmlkZSB0aGUgcmVxdWVzdCBpZGVudGlmaWVyIHdpdGggYFJlcXVlc3RPcHRpb25zYC4KKyogQWRkZWQgb3B0aW9uIHRvIHNldCBwZXItcmVxdWVzdCBzZXR0aW5ncyBvbiBhIGBUcmF2ZXJzYWxgIHN1Ym1pdHRlZCB2aWEgYEJ5dGVjb2RlYC4KKyogRml4ZWQgdGhlIEdyeW8gcmVnaXN0cmF0aW9uIGZvciBgT3B0aW9uc1N0cmF0ZWd5YCBhcyBpdCB3YXMgbm90IHNlcmlhbGl6aW5nIHN0YXRlIHByb3Blcmx5LgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjA5MCBBZnRlciBydW5uaW5nIGJhY2tlbmQgZm9yIGEgZGF5IG9yIHNvIFN5c3RlbS5JTy5JT0V4Y2VwdGlvbiBrZWVwIHRocm93aW5nCisqIFRJTktFUlBPUC0yMTEyIEZvbGRpbmcgaW4gcHJvcGVydHkoKSBzdGVwIGlzIG5vdCBiZWluZyBvcHRpbWFsbHkgcGVyZm9ybWVkCisqIFRJTktFUlBPUC0yMTgwIGdyZW1saW4uc2ggZG9lc24ndCB3b3JrIHdoZW4gZGlyZWN0b3JpZXMgY29udGFpbiBzcGFjZXMKKyogVElOS0VSUE9QLTIxODMgSW50ZXJwcmV0ZXJNb2RlQVNUVHJhbnNmb3JtYXRpb24gbmVlZHMgdG8gYmUgbW9yZSBzcGVjaWZpYyBhYm91dCB3aGF0IGl0IHRyYW5zZm9ybXMKKyogVElOS0VSUE9QLTIxODkgQ29ubmVjdGVkQ29tcG9uZW50IHRlc3QgYXNzdW1lcyBmaXhlZCBvcmRlciBvZiB2ZXJ0aWNlcworKiBUSU5LRVJQT1AtMjE5NCBFbmZvcmNpbmcgYW4gb3JkZXIgb24gcHJvcGVydGllcyBpbiBvbmUgdGVzdCBtZXRob2Qgb2YgQ2hvb3NlVGVzdAorKiBUSU5LRVJQT1AtMjE5NiBQYXJ0aXRpb25TdHJhdGVneSB3aXRoIGluY2x1ZGVNZXRhUHJvcGVydGllcyh0cnVlKSBjYW4ndCBhZGQgbGFiZWxlZCB2ZXJ0ZXgKKyogVElOS0VSUE9QLTIxOTggRG9jdW1lbnRhdGlvbiBmb3IgU3RvcmUgY29udHJhZGljdHMgaXRzZWxmCisqIFRJTktFUlBPUC0yMTk5IHdpdGhpbiBzdGVwIGRvZXMgbm90IHdvcmsgd2l0aCBtb3JlIHRoYW4gdHdvIHBhcmFtZXRlcnMgd2l0aCBweXRob24KKyogVElOS0VSUE9QLTIyMDAgQWRkRWRnZVN0YXJ0U3RlcCB1c2VkIERldGFjaGVkRmFjdG9yeS5kZXRhY2ggaW5zdGVhZCBvZiBFdmVudFN0cmF0ZWd5LmRldGFjaAorKiBUSU5LRVJQT1AtMjIwNCBDbGllbnQgcmVjZWl2ZXMgbm8gcmVzcG9uc2Ugb24gZmFpbGVkIHJlcXVlc3QKKyogVElOS0VSUE9QLTIyMDYgQ2VydGFpbiB0eXBlcyBpbiBqYXZhc2NyaXB0IGRvbid0IGFwcGVhciB0byBzZXJpYWxpemUgd2l0aCBhIEdyYXBoU09OIHR5cGUKKyogVElOS0VSUE9QLTIyMTIgUGF0aCBpcyBub3QgZGV0YWNoaW5nIHByb3Blcmx5IHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucworKiBUSU5LRVJQT1AtMjIxNyBSYWNlIGNvbmRpdGlvbiBpbiBHcmVtbGluLm5ldCBkcml2ZXIgY29ubmVjdGlvbgorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0yMDg5IEphdmFzY3JpcHQgRFNMIHN1cHBvcnQKKyogVElOS0VSUE9QLTIxNzkgSGF2ZSBvLmEudC5nLmRyaXZlci5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBleHRlbmQgSU9FeGNlcHRpb24KKyogVElOS0VSUE9QLTIxODEgQWxsb3cgY3RybCtjIHRvIGJyZWFrIG91dCBvZiBhIGxvbmcgcnVubmluZyBwcm9jZXNzIGluIEdyZW1saW4gQ29uc29sZQorKiBUSU5LRVJQT1AtMjE4MiBSZW1vdmUgZ3BlcmZ1dGlscyBmcm9tIEdyZW1saW4gQ29uc29sZSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIxOTAgRG9jdW1lbnQgR3JlbWxpbiBzYW5pdGl6YXRpb24gYmVzdCBwcmFjdGljZXMKKyogVElOS0VSUE9QLTIxOTEgSW1wbGVtZW50IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5CisqIFRJTktFUlBPUC0yMTkzIEFsbG93IGEgVHJhdmVyc2FsIHRvIGtub3cgd2hhdCBUcmF2ZXJzYWxTb3VyY2UgaXQgc3Bhd25lZCBmcm9tCisqIFRJTktFUlBPUC0yMjAzIEJpbmQgdGhlIGNvbnNvbGUgdGltZW91dCB0byB0aGUgcmVxdWVzdCB0aW1lb3V0CisqIFRJTktFUlBPUC0yMjA4IEluY2x1ZGUgaW5qZWN0KCkgaW4gRFNMcyBnZW5lcmF0ZWQgd2l0aCBKYXZhIGFubm90YXRpb24gcHJvY2Vzc29yCisqIFRJTktFUlBPUC0yMjExIFByb3ZpZGUgQVBJIHRvIGFkZCBwZXIgcmVxdWVzdCBvcHRpb24gZm9yIGEgYnl0ZWNvZGUKKyogVElOS0VSUE9QLTIyMTYgQ29uc2lkZXIgYWRkaW5nIGNvbnZlbnRpb25hbCBzdGF0dXMgYXR0cmlidXRlIGtleSBmb3Igd2FybmluZ3MKKyogVElOS0VSUE9QLTIyMTkgVXBncmFkZSBOZXR0eSB2ZXJzaW9uCisKK1tbcmVsZWFzZS0zLTQtMV1dCis9PT0gVGlua2VyUG9wIDMuNC4xIChSZWxlYXNlIERhdGU6IE1hcmNoIDE4LCAyMDE5KQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjMueC5hc2NpaWRvYyNyZWxlYXNlLTMtMy02LCAzLjMuNj4+LgorCisqIEdyZW1saW4uTkVUIGRyaXZlcjogRml4ZWQgcmVtb3ZhbCBvZiBjbG9zZWQgY29ubmVjdGlvbnMgYW5kIGFkZGVkIHJvdW5kLXJvYmluIHNjaGVkdWxpbmcuCisqIEFkZGVkIEdyYXBoQmluYXJ5IHNlcmlhbGl6ZXIgZm9yIFRyYXZlcnNhbE1ldHJpY3MKKyogQWRkZWQgcmVnaXN0cmF0aW9uIGZvciBgU3BhcnFsU3RyYXRlZ3lgIGZvciBHcmFwaFNPTi4KKyogRml4ZWQgdXAgYFNwYXJxbFN0cmF0ZWd5YCBzbyB0aGF0IGl0IGNvdWxkIGJlIHVzZWQgcHJvcGVybHkgd2l0aCBgUmVtb3RlU3RyYXRlZ3lgLgorKiBGaXhlZCBgQnl0ZUJ1ZmZlcmAgc2VyaWFsaXphdGlvbiBmb3IgR3JhcGhCaW5hcnkuCisqIEZpeGVkIGBQYXRoLnRvU3RyaW5nKClgIGluIGBncmVtbGluLWphdmFzY3JpcHRgIHdoaWNoIHdhcyByZWZlcmVuY2luZyBhbiBpbnZhbGlkIG9iamVjdC4KKyogRml4ZWQgcG90ZW50aWFsIGZvciBhbiBpbmZpbml0ZSBsb29wIGluIGNvbm5lY3Rpb24gY3JlYXRpb24gZm9yIGBncmVtbGluLWRvdG5ldGAuCisqIEFkZGVkIGZhbGxiYWNrIHJlc29sdmVyIHRvIGBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5YCBmb3IgR3JhcGhCaW5hcnkuCisqIEFkZGVkIGVhc2llciB0byB1bmRlcnN0YW5kIGV4Y2VwdGlvbnMgZm9yIGNvbm5lY3Rpb24gcHJvYmxlbXMgaW4gdGhlIEdyZW1saW4uTmV0IGRyaXZlci4KKyogU3VwcG9ydCBjb25maWd1cmluZyB0aGUgdHlwZSByZWdpc3RyeSBidWlsZGVyIGZvciBHcmFwaEJpbmFyeS4KKyogQnVtcGVkIHRvIEdyb292eSAyLjUuNi4KKyogUmVsZWFzZSB3b3JraW5nIGJ1ZmZlcnMgaW4gY2FzZSBvZiBmYWlsdXJlIGZvciBHcmFwaEJpbmFyeS4KKyogR3JhcGhCaW5hcnk6IFVzZSB0aGUgc2FtZSBgQnl0ZUJ1ZmAgaW5zdGFuY2UgdG8gd3JpdGUgZHVyaW5nIHNlcmlhbGl6YXRpb24uIENoYW5nZWQgc2lnbmF0dXJlIG9mIHdyaXRlIG1ldGhvZHMgaW4gdHlwZSBzZXJpYWxpemVycy4KKyogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgaW4gR3JhcGhCaW5hcnkncyBgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcmAuCisqIENoYW5nZWQgYFNwYXJxbFRyYXZlcnNhbFNvdXJjZWAgc28gYXMgdG8gZW5hYmxlIEdyZW1saW4gc3RlcHMgdG8gYmUgdXNlZCB0byBwcm9jZXNzIHJlc3VsdHMgZnJvbSB0aGUgYHNwYXJxbCgpYCBzdGVwLgorKiBHcmFwaEJpbmFyeTogQ2FjaGUgZXhwcmVzc2lvbiB0byBvYnRhaW4gdGhlIG1ldGhvZCBpbiBgUFNlcmlhbGl6ZXJgLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTk5MiBjb3VudCBoYXMgbmVnYXRpdmUgdGltZSBpbiBwcm9maWxlCisqIFRJTktFUlBPUC0yMTI2IHRvU3RyaW5nKCkgbWV0aG9kcyBub3QgdGhyZWFkLXNhZmUKKyogVElOS0VSUE9QLTIxMzUgR3JlbWxpbi5OZXQgQ29ubmVjdGlvblBvb2wgZG9lc24ndCBoYW5kbGUgY2xvc2VkIGlkbGUgY29ubmVjdGlvbnMgcHJvcGVybHkKKyogVElOS0VSUE9QLTIxMzkgRXJyb3JzIGR1cmluZyByZXF1ZXN0IHNlcmlhbGl6YXRpb24gaW4gV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyL05pb0dyZW1saW5SZXF1ZXN0RW5jb2RlciBhcmUgbm90IHJlcG9ydGVkIHRvIHRoZSBjbGllbnQKKyogVElOS0VSUE9QLTIxNDEgQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIgbW9kaWZpZXMgYnVmZmVyJ3MgcG9zaXRpb24KKyogVElOS0VSUE9QLTIxNDggIm5vIGNvbm5lY3Rpb24gYXZhaWxhYmxlISIgaXMgYmVpbmcgdGhyb3duIGRlc3BpdGUgbG90cyBvZiBmcmVlIGNvbm5lY3Rpb25zCisqIFRJTktFUlBPUC0yMTUyIFBhdGggdG9TdHJpbmcgZmFpbHMgaW4gR3JlbWxpbiBKYXZhU2NyaXB0CisqIFRJTktFUlBPUC0yMTUzIFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGZyb20gUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIxNTQgR3JhcGhCaW5hcnk6IFNlcmlhbGl6ZXJzIHNob3VsZCByZWxlYXNlIHJlc291cmNlcyBpbiBjYXNlIG9mIGZhaWx1cmVzCisqIFRJTktFUlBPUC0yMTU1IFNpdHVhdGlvbiBjYW4gb2NjdXIgdGhhdCBjYXVzZXMgaW5maW5pdGUgYW1vdW50IG9mIGNvbm5lY3Rpb24gdG8gYmUgb3BlbmVkLCBjYXVzaW5nIFN5c3RlbS5OZXQuV2ViU29ja2V0cy5XZWJTb2NrZXRFeGNlcHRpb24KKyogVElOS0VSUE9QLTIxNjEgR3JhcGhCaW5hcnk6IFdyaXRlIHNlcmlhbGl6YXRpb24gcGVyZm9ybWFuY2UgaXNzdWUKKyogVElOS0VSUE9QLTIxNjkgUmVzcG9uc2VzIGV4Y2VlZGluZyBtYXhDb250ZW50TGVuZ3RoIGNhdXNlIHN1YnNlcXVlbnQgcXVlcmllcyB0byBoYW5nCisqIFRJTktFUlBPUC0yMTcyIFBhcnRpdGlvblN0cmF0ZWd5IGRvZXNuJ3QgYXBwbHkgdG8gQWRkRWRnZVN0YXJ0U3RlcAorKiBUSU5LRVJQT1AtMjE3MyBJbmNvcnJlY3QgcmVzZXQgb2YgbG9nIGxldmVsIGluIGludGVncmF0aW9uIHRlc3QKKyogVElOS0VSUE9QLTIxNzcgU3RyZWFtaW5nIHJlc3BvbnNlIGltbWVkaWF0ZWx5IGFmdGVyIGF1dGhlbnRpY2F0aW9uIHN0b3BzIGFmdGVyIGZpcnN0IHBhcnRpYWwgcmVzcG9uc2UKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTQzNSBTdXBwb3J0IGZvciBleHRlbmRlZCBHcmFwaFNPTiBpbiBncmVtbGluLXB5dGhvbgorKiBUSU5LRVJQT1AtMTg4MiBBcHBseSByYW5nZSBhbmQgbGltaXQgc3RlcHMgYXMgZWFybHkgYXMgcG9zc2libGUKKyogVElOS0VSUE9QLTE5OTggSW9HcmFwaFRlc3QgdXNlIGRpZmZlcmVudCBzY2hlbWFzIGZvciBzdGFuZGFyZCBhbmQgcmVhZEdyYXBoIGNvbmZpZ3VyYXRpb25zCisqIFRJTktFUlBPUC0yMDg4IEVuYWJsZSBTb3VyY2VMaW5rIGZvciBHcmVtbGluLk5ldAorKiBUSU5LRVJQT1AtMjA5OCBJbXByb3ZlIGdyZW1saW4tc2VydmVyLnNoIGhlbHAgb3V0cHV0CisqIFRJTktFUlBPUC0yMTIyIEV4cG9zZSBzdGF0dXMgY29kZXMgZnJvbSBzZXJ2ZXIgZXJyb3JzCisqIFRJTktFUlBPUC0yMTI0IElubGluZUZpbHRlclN0cmF0ZWd5IHByb2R1Y2VzIHdyb25nIHJlc3VsdAorKiBUSU5LRVJQT1AtMjEyNSBFeHRlbmQgcmVsZWFzZSB2YWxpZGF0aW9uIHNjcmlwdAorKiBUSU5LRVJQT1AtMjEyNyBBZGQgZzpUcmF2ZXJzYWxNZXRyaWNzIGFuZCBnOk1ldHJpY3MgZGVzZXJpYWxpemVycyBmb3IgZ3JlbWxpbnB5dGhvbgorKiBUSU5LRVJQT1AtMjEyOSBNYXNrIHNlY3VyaXR5IHNlY3JldCBvciBwYXNzd29yZCBpbiBsb2dzCisqIFRJTktFUlBPUC0yMTMwIENhbm5vdCBpbnN0YW50aWF0ZSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHdpdGhvdXQgcGFzc2luZyBhbiBvcHRpb25zIG9iamVjdAorKiBUSU5LRVJQT1AtMjEzMSBOb0Nvbm5lY3Rpb25BdmFpbGFibGVFeGNlcHRpb24gZG9lc24ndCByZXZlYWwgdGhlIHJlYXNvbgorKiBUSU5LRVJQT1AtMjEzNCBCdW1wIHRvIEdyb292eSAyLjUuNgorKiBUSU5LRVJQT1AtMjEzNiBJbnNpZGUgbG93ZXIgYm91bmQgaW5jbHVzaW9uIChkb2N1bWVudGF0aW9uKQorKiBUSU5LRVJQT1AtMjEzOCBQcm92aWRlIGEgY29uZmlndXJhdGlvbiB0byBkaXNhYmxlIHRoZSBnbG9iYWwgY2xvc3VyZSBjYWNoZQorKiBUSU5LRVJQT1AtMjE0MCBUZXN0IGJ1aWxkIHdpdGggRG9ja2VyIGF1dG9tYXRpY2FsbHkKKyogVElOS0VSUE9QLTIxNDQgQmV0dGVyIGhhbmRsZSBBdXRoZW50aWNhdG9yIGluc3RhbmNlIGZhaWx1cmVzCisqIFRJTktFUlBPUC0yMTQ3IEFkZCBHcmFwaEJpbmFyeSBzZXJpYWxpemVyIGZvciBUcmF2ZXJzYWxNZXRyaWNzCisqIFRJTktFUlBPUC0yMTQ5IEdyYXBoQmluYXJ5OiBNYWtlIHR5cGUgc2VyaWFsaXplciByZXNvbHV0aW9uIHBsdWdnYWJsZQorKiBUSU5LRVJQT1AtMjE1MCBHcmFwaEJpbmFyeTogU3VwcG9ydCBjb25maWd1cmluZyB0aGUgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSBidWlsZGVyIGNsYXNzIGluIGNvbmZpZworKiBUSU5LRVJQT1AtMjE2MyBKYXZhVHJhbnNsYXRvciBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMKKyogVElOS0VSUE9QLTIxNjQgQnl0ZWNvZGUncyBoYXNoQ29kZSBpbXBsIChhbmQgaXRzIGlubmVyIGNsYXNzZXMpIGNhbiBwcm9kdWNlIGhhc2ggY29sbGlzaW9ucworKiBUSU5LRVJQT1AtMjE2NSBQcmVmZXIgY29tbW9ucy1sYW5nMyB0byBjb21tb25zLWxhbmcKKyogVElOS0VSUE9QLTIxNjYgR3JhcGhCaW5hcnk6IFAgZGVzZXJpYWxpemF0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQKKyogVElOS0VSUE9QLTIxNjcgR3JlbWxpbiBKYXZhc2NyaXB0IFRyYXZlcnNhbCBhcyBhc3luYyBpdGVyYWJsZQorKiBUSU5LRVJQT1AtMjE3MSBBbGxvdyBTUEFSUUwgdG8gYmUgZXh0ZW5kZWQgd2l0aCBHcmVtbGluIHN0ZXBzCisqIFRJTktFUlBPUC0yMTc0IEltcHJvdmUgRG9ja2VyIEltYWdlIFNlY3VyaXR5CisKK1tbcmVsZWFzZS0zLTQtMF1dCis9PT0gVGlua2VyUG9wIDMuNC4wIChSZWxlYXNlIERhdGU6IEphbnVhcnkgMiwgMjAxOSkKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy4zLnguYXNjaWlkb2MjcmVsZWFzZS0zLTMtNCwgMy4zLjQ+PiBhbmQgPDwuL2NoYW5nZWxvZy0zLjMueC5hc2NpaWRvYyNyZWxlYXNlLTMtMy01LCAzLjMuNT4+LgorCisqIENoYW5nZWQgUHl0aG9uICJiaW5kaW5ncyIgdG8gdXNlIGFuIGFjdHVhbCBgQmluZGluZ3NgIG9iamVjdCByYXRoZXIgdGhhbiBhIDItdHVwbGUuCisqIEltcHJvdmVkIHRoZSBHcmVtbGluLk5FVCBkcml2ZXI6IEl0IG5vdyB1c2VzIHJlcXVlc3QgcGlwZWxpbmluZyBhbmQgaXRzIGBDb25uZWN0aW9uUG9vbGAgaGFzIGEgZml4ZWQgc2l6ZS4KKyogSW1wbGVtZW50ZWQgYEluZGV4U3RlcGAgd2hpY2ggYWxsb3dzIHRvIHRyYW5zZm9ybSBsb2NhbCBjb2xsZWN0aW9ucyBpbnRvIGluZGV4ZWQgY29sbGVjdGlvbnMgb3IgbWFwcy4KKyogTWFkZSBgdmFsdWVNYXAoKWAgYXdhcmUgb2YgYGJ5YCBhbmQgYHdpdGhgIG1vZHVsYXRvcnMgYW5kIGRlcHJlY2F0ZWQgYHZhbHVlTWFwKGJvb2xlYW4pYCBvdmVybG9hZHMuCisqIFVzZSBgQ29tcGFyZS5lcWAgaW4gYENvbnRhaW5zYCBwcmVkaWNhdGVzIHRvIGVuc3VyZSB0aGUgc2FtZSBmaWx0ZXIgYmVoYXZpb3IgZm9yIG51bWVyaWMgdmFsdWVzLgorKiBBZGRlZCBgT3B0aW9uc1N0cmF0ZWd5YCB0byBhbGxvdyB0cmF2ZXJzYWxzIHRvIHRha2UgYXJiaXRyYXJ5IHRyYXZlcnNhbC13aWRlIGNvbmZpZ3VyYXRpb25zLgorKiBBZGRlZCB0ZXh0IHByZWRpY2F0ZXMuCisqIEFkZGVkIGBCdWxrU2V0YCBhcyBhIEdyYXBoU09OIHR5cGUgd2l0aCBzdXBwb3J0IGluIGFsbCBsYW5ndWFnZSB2YXJpYW50cy4KKyogQWRkZWQgYFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneWAgdG8gYXV0by1kZXRhY2ggZWxlbWVudHMgdG8gInJlZmVyZW5jZSIgZnJvbSBhIHRyYXZlcnNhbC4KKyogQWRkZWQgaW5pdGlhbCByZWxlYXNlIG9mIHRoZSBHcmFwaEJpbmFyeSBzZXJpYWxpemF0aW9uIGZvcm1hdCB3aXRoIEphdmEgc3VwcG9ydC4KKyogQWxsb3dlZCBgSW1wb3J0Q3VzdG9taXplcmAgdG8gYWNjZXB0IGZpZWxkcy4KKyogUmVtb3ZlZCBncm9vdnktc3FsIGRlcGVuZGVuY3kuCisqIE1vZGlmaWVkIGBNdXRhdGluZ2Agc3RlcHMgc28gdGhhdCB0aGV5IGFyZSBubyBsb25nZXIgbWFya2VkIGFzIGBmaW5hbGAuCisqIFJld3JvdGUgYENvbm5lY3RpdmVTdHJhdGVneWAgdG8gc3VwcG9ydCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGluZml4IG5vdGF0aW9ucyBpbiBhIHNpbmdsZSB0cmF2ZXJzYWwuCisqIEdyYXBoU09OIGBNZXNzYWdlU2VyaWFsaXplcmAgcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgdGhlIEdyZW1saW5TZXJ2ZXJNb2R1bGUgdG8gYSBwcm92aWRlZCBHcmFwaFNPTk1hcHBlci4KKyogUmVtb3ZlZCBzdXBwb3J0IGZvciBgLWlgIG9wdGlvbiBpbiBHcmVtbGluIFNlcnZlciB3aGljaCB3YXMgcHJldmlvdXNseSBkZXByZWNhdGVkLgorKiBJbXBsZW1lbnRlZCBgU2hvcnRlc3RQYXRoVmVydGV4UHJvZ3JhbWAgYW5kIHRoZSBgc2hvcnRlc3RQYXRoKClgIHN0ZXAuCisqIGBBYnN0cmFjdEdyYXBoUHJvdmlkZXJgIHVzZXMgYGcuaW8oKWAgZm9yIGxvYWRpbmcgdGVzdCBkYXRhLgorKiBBZGRlZCB0aGUgYGlvKClgIHN0YXJ0IHN0ZXAgYW5kIGByZWFkKClgIGFuZCBgd3JpdGUoKWAgdGVybWluYXRpb24gc3RlcHMgdG8gdGhlIEdyZW1saW4gbGFuZ3VhZ2UuCisqIEFkZGVkIGBHcmFwaEZlYXR1cmVzLnN1cHBvcnRzSW9SZWFkKClgIGFuZCBgR3JhcGhGZWF0dXJlcy5zdXBwb3J0c0lvV3JpdGUoKWAuCisqIERlcHJlY2F0ZWQgYEdyYXBoLmlvKClgIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlLgorKiBgR3JhcGhNTFJlYWRlcmAgYmV0dGVyIGhhbmRsZXMgZWRnZSBhbmQgdmVydGV4IHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBuYW1lLgorKiBNYWludGFpbmVkIG9yZGVyIG9mIGFubm90YXRpb25zIGluIG1ldHJpY3MgcmV0dXJuZWQgZnJvbSBgcHJvZmlsZSgpYC1zdGVwLgorKiBSZWZhY3RvcmVkIGBUeXBlVHJhbnNsYXRvcmAgdG8gYmUgZGlyZWN0bHkgZXh0ZW5zaWJsZSBmb3IgYFNjcmlwdFRyYW5zbGF0b3JgIGZ1bmN0aW9ucy4KKyogQnVtcGVkIHRvIE5ldHR5IDQuMS4yNS4KKyogQnVtcGVkIHRvIFNwYXJrIDIuNC4wLgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNS40LgorKiBNb2RpZmllZCBHcmVtbGluIFNlcnZlciB0byByZXR1cm4gYSAiaG9zdCIgc3RhdHVzIGF0dHJpYnV0ZSBvbiByZXNwb25zZXMuCisqIEFkZGVkIGFiaWxpdHkgdG8gdGhlIEphdmEsIC5ORVQsIFB5dGhvbiBhbmQgSmF2YVNjcmlwdCBkcml2ZXJzIHRvIHJldHJpZXZlIHN0YXR1cyBhdHRyaWJ1dGVzIHJldHVybmVkIGZyb20gdGhlIHNlcnZlci4KKyogTW9kaWZpZWQgSmF2YSBhbmQgR3JlbWxpbi5OZXQgYFJlc3BvbnNlRXhjZXB0aW9uYCB0byBpbmNsdWRlIHN0YXR1cyBjb2RlIGFuZCBzdGF0dXMgYXR0cmlidXRlcy4KKyogTW9kaWZpZWQgUHl0aG9uIGBHcmVtbGluU2VydmVyRXJyb3JgIHRvIGluY2x1ZGUgc3RhdHVzIGF0dHJpYnV0ZXMuCisqIE1vZGlmaWVkIHRoZSByZXR1cm4gdHlwZSBmb3IgYElHcmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jKClgIHRvIGJlIGEgYFJlc3VsdFNldGAgcmF0aGVyIHRoYW4gYW4gYElSZWFkT25seUNvbGxlY3Rpb25gLgorKiBEZXByZWNhdGVkIHR3byBgc3VibWl0KClgLXJlbGF0ZWQgbWV0aG9kcyBvbiB0aGUgSmF2YSBkcml2ZXIgYENsaWVudGAgY2xhc3MuCisqIEFkZGVkIGBDbGllbnQuc3VibWl0KClgIG92ZXJsb2FkcyB0aGF0IGFjY2VwdCBwZXItcmVxdWVzdCBgUmVxdWVzdE9wdGlvbnNgLgorKiBBZGRlZCBzcGFycWwtZ3JlbWxpbi4KKyogRml4ZWQgYSBidWcgaW4gZHluYW1pYyBHcnlvIHJlZ2lzdHJhdGlvbiB3aGVyZSByZWdpc3RyYXRpb25zIHRoYXQgZGlkIG5vdCBoYXZlIHNlcmlhbGl6ZXJzIHdvdWxkIGZhaWwuCisqIE1vdmVkIGBQYXJhbWV0ZXJpemluZ2AgaW50ZXJmYWNlIHRvIHRoZSBgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwYCBwYWNrYWdlIHdpdGggb3RoZXIgbWFya2VyIGludGVyZmFjZXMgb2YgaXRzIHR5cGUuCisqIFJlcGxhY2VkIGBQYXJhbWV0ZXJpemluZy5hZGRQcm9wZXJ0eU11dGF0aW9ucygpYCB3aXRoIGBDb25maWd1cmluZy5jb25maWd1cmUoKWAuCisqIENoYW5nZWQgaW50ZXJmYWNlIGhpZXJhcmNoeSBmb3IgYFBhcmFtZXRlcml6aW5nYCBhbmQgYE11dGF0aW5nYCBpbnRlcmZhY2VzIGFzIHRoZXkgYXJlIHRpZ2h0bHkgcmVsYXRlZC4KKyogSW50cm9kdWNlZCB0aGUgYHdpdGgoayx2KWAgYW5kIGB3aXRoKGspYCBzdGVwIG1vZHVsYXRvcnMgd2hpY2ggY2FuIHN1cHBseSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYENvbmZpZ3VyaW5nYCBzdGVwcy4KKyogQWRkZWQgYE9wdGlvbnNTdHJhdGVneWAgdG8gYWxsb3cgdHJhdmVyc2FscyB0byB0YWtlIGFyYml0cmFyeSB0cmF2ZXJzYWwtd2lkZSBjb25maWd1cmF0aW9ucy4KKyogSW50cm9kdWNlZCB0aGUgYHdpdGgoayx2KWAgYW5kIGB3aXRoKGspYCB0cmF2ZXJhbCBzb3VyY2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoIGNhbiBzdXBwbHkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHRoZSB0cmF2ZXJzYWwuCisqIEFkZGVkIGBjb25uZWN0ZWRDb21wb25lbnQoKWAgc3RlcCBhbmQgcmVsYXRlZCBgVmVydGV4UHJvZ3JhbWAuCisqIEFkZGVkIGBzdXBwb3J0c1Vwc2VydCgpYCBvcHRpb24gdG8gYFZlcnRleEZlYXR1cmVzYCBhbmQgYEVkZ2VGZWF0dXJlc2AuCisqIGBtaW4oKWAgYW5kIGBtYXgoKWAgbm93IHN1cHBvcnQgYWxsIHR5cGVzIGltcGxlbWVudGluZyBgQ29tcGFyYWJsZWAuCisqIENoYW5nZSB0aGUgYHRvU3RyaW5nKClgIG9mIGBQYXRoYCB0byBiZSBzdGFuZGFyZGl6ZWQgYXMgb3RoZXIgZ3JhcGggZWxlbWVudHMgYXJlLgorKiBgaGFkb29wLWdyZW1saW5gIG5vIGxvbmdlciBnZW5lcmF0ZXMgYSB0ZXN0IGFydGlmYWN0LgorKiBBbGxvd2VkIGBHcmFwaFByb3ZpZGVyYCB0byBleHBvc2UgYSBjYWNoZWQgYEdyYXBoLkZlYXR1cmVgIG9iamVjdCBzbyB0aGF0IHRoZSB0ZXN0IHN1aXRlIGNvdWxkIHJlLXVzZSB0aGVtIHRvIHNwZWVkIHRlc3QgcnVucy4KKyogRml4ZWQgYSBidWcgaW4gYFJlZHVjaW5nQmFycmllclN0ZXBgLCB0aGF0IHJldHVybmVkIHRoZSBwcm92aWRlZCBzZWVkIHZhbHVlIGRlc3BpdGUgbm8gZWxlbWVudHMgYmVpbmcgYXZhaWxhYmxlLgorKiBDaGFuZ2VkIHRoZSBvcmRlciBvZiBgc2VsZWN0KClgIHNjb3Blcy4gVGhlIG9yZGVyIGlzIG5vdzogbWFwcywgc2lkZS1lZmZlY3RzLCBwYXRocy4KKyogTW92ZWQgYFRyYXZlcnNhbEVuZ2luZWAgdG8gYGdyZW1saW4tdGVzdGAgYXMgaXQgaGFzIGxvbmcgYmVlbiBvbmx5IHVzZWQgaW4gdGVzdGluZyBpbmZyYXN0cnVjdHVyZS4KKyogTmVzdGVkIGxvb3Agc3VwcG9ydCBhZGRlZCBhbGxvd2luZyBgcmVwZWF0KClgIHN0ZXBzIHRvIGJlIG5lc3RlZC4KKyogRXZlbnRzIGZyb20gYEV2ZW50U3RyYXRlZ3lgIHJhaXNlZCBmcm9tICJuZXciIG11dGF0aW9ucyB3aWxsIG5vdyByZXR1cm4gYSBgS2V5ZWRWZXJ0ZXhQcm9wZXJ0eWAgb3IgYEtleWVkUHJvcGVydHlgIGFzIGlzIGFwcHJvcHJpYXRlLgorKiBgTXV0YXRpb25MaXN0ZW5lciN2ZXJ0ZXhQcm9wZXJ0eUNoYW5nZWQoVmVydGV4LCBWZXJ0ZXhQcm9wZXJ0eSwgT2JqZWN0LCBPYmplY3QuLi4pYCBubyBsb25nZXIgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4KKyogRGVwcmVjYXRlZCBgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyZDBgIGFzIGl0IGlzIG5vdyBhbmFsb2dvdXMgdG8gYEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJHcmVtbGluVjJkMGAuCisqIE1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgUmVtb3RlR3JhcGhgIHRvIGBncmVtbGluLXRlc3RgIGFzIGl0IGlzIG5vdyBqdXN0IGEgdGVzdGluZyBjb21wb25lbnQuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBSZW1vdGVTdHJhdGVneS5pbnN0YW5jZSgpYCBhbmQgdGhlIHN0cmF0ZWd5IG5vIGxvbmdlciBoYXMgYW55IGNvbm5lY3Rpb24gdG8gYFJlbW90ZUdyYXBoYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgbWV0aG9kcyBpbiBgU3ViZ3JhcGhTdHJhdGVneWAgYW5kIGBQYXJ0aXRpb25TdHJhdGVneWAgYnVpbGRlcnMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIENyZWRlbnRpYWxzIERTTCBpbmZyYXN0cnVjdHVyZS4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFJlbW90ZUNvbm5lY3Rpb24jc3VibWl0KFRyYXZlcnNhbClgIGFuZCBgUmVtb3RlQ29ubmVjdGlvbiNzdWJtaXQoQnl0ZWNvZGUpYCBtZXRob2RzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgTXV0YXRpb25MaXN0ZW5lciN2ZXJ0ZXhQcm9wZXJ0eUNoYW5nZWQoVmVydGV4LCBQcm9wZXJ0eSwgT2JqZWN0LCBPYmplY3QuLi4pYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYE9wU2VsZWN0b3JIYW5kbGVyYCBjb25zdHJ1Y3Rvci4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYGNsb3NlKClgIGZyb20gYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIHdoaWNoIG5vIGxvbmdlciBpbXBsZW1lbnRzIGBBdXRvQ2xvc2VhYmxlYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYGdldEdyYXBoSW5wdXRGb3JtYXQoKWAgYW5kIGBnZXRHcmFwaE91dHB1dEZvcm1hdCgpYCBmcm9tIGBIYWRvb3BDb25maWd1cmF0aW9uYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEFic3RyYWN0T3BQcm9jZXNzb3IjbWFrZUZyYW1lKClgIG1ldGhvZC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuY2xhc3NOYW1lYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiBHcmVtbGluIFNlcnZlci4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEdyYXBoTWFuYWdlcmAgbWV0aG9kcyBgZ2V0R3JhcGhzKClgIGFuZCBgZ2V0VHJhdmVyc2FsU291cmNlcygpYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3JlbWxpbiBTZXJ2ZXIgc2V0dGluZyBmb3IgYHNlcmlhbGl6ZWRSZXNwb25zZVRpbWVvdXRgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBTdHJ1Y3R1cmUgQVBJIGV4Y2VwdGlvbnMgcmVsYXRlZCB0byAiZWxlbWVudCBub3QgZm91bmQiIHNpdHVhdGlvbnMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGByZWJpbmRpbmdzYCBvcHRpb25zIGZyb20gdGhlIEphdmEgZHJpdmVyIEFQSS4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYExhbWJkYUNvbGxlY3RpbmdCYXJyaWVyU3RlcC5Db25zdW1lcnNgIGVudW0uCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBIYXNDb250YWluZXIjbWFrZUhhc0NvbnRhaW5lcnMoU3RyaW5nLCBQKWAKKyogUmVtb3ZlZCBzdXBwb3J0IGZvciBHaXJhcGguCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIEphdmFTY3JpcHQgRHJpdmVyIHByb3BlcnR5IGB0cmF2ZXJzZXJzYCBvZiB0aGUgYFJlc3VsdFNldGAuCisqIGdyZW1saW4tcHl0aG9uOiB1c2UgZXhwbGljaXQgQmluZGluZ3Mgb2JqZWN0IGZvciBweXRob24gaW5zdGVhZCBvZiBhIDItdHVwbGUKKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTE3NzcgR3JlbWxpbiAubWF4IHN0ZXAgcmV0dXJucyAtMjE0NzQ4MzY0OCBmb3IgZW1wdHkgcmVzdWx0IHNldHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xODY5IFByb2ZpbGUgc3RlcCBhbmQgaXRlcmF0ZSBkbyBub3QgcGxheSBuaWNlbHkgd2l0aCBlYWNoIG90aGVyCisqIFRJTktFUlBPUC0xODk4IElzc3VlIHdpdGggYmluZGluZ3MgaW4gc3RyYXRlZ2llcyBhbmQgbGFtYmRhcworKiBUSU5LRVJQT1AtMTkyNyBHaGVya2luIHNjZW5hcmlvIGV4cGVjdHMgbGlzdCB3aXRoIGR1cGxpY2F0ZXMsIGJ1dCByZWNlaXZlcyBnOlNldAorKiBUSU5LRVJQT1AtMTkzMyBncmVtbGluLXB5dGhvbiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCBvbiBsYXJnZSByZXNwb25zZXMKKyogVElOS0VSUE9QLTE5NDcgUGF0aCBoaXN0b3J5IGlzbid0IHByZXNlcnZlZCBmb3Iga2V5cyBpbiBtdXRhdGlvbnMKKyogVElOS0VSUE9QLTE5NDkgRm9ybWF0dGluZyBlcnJvciBvbiB3ZWJzaXRlCisqIFRJTktFUlBPUC0xOTU4IFRpbmtlckdyYXBoQ291bnRTdHJhdGVneSBjYW4gcmV0dXJuIHdyb25nIGNvdW50cworKiBUSU5LRVJQT1AtMTk2MSBEdXBsaWNhdGUgY29waWVzIG9mIGltYWdlcyBkaXJlY3RvcnkgaW4gZG9jcworKiBUSU5LRVJQT1AtMTk2MiBHcm9vdnlUcmFuc2xhdG9yIGRvZXNuJ3QgaGFuZGxlIGVtcHR5IG1hcHMKKyogVElOS0VSUE9QLTE5NjMgVXNlIG9mIHJlZHVjaW5nIHN0ZXAgaW4gY2hvb3NlKCkKKyogVElOS0VSUE9QLTE5NzIgaW5qZWN0KCkgdGVzdHMgYXJlIHRocm93aW5nIGV4Y2VwdGlvbnMgaW4gLk5FVCBHTFYgdGVzdHMKKyogVElOS0VSUE9QLTE5NzggQ2hlY2sgZm9yIFdlYnNvY2tldCBjb25uZWN0aW9uIHN0YXRlIHdoZW4gcmV0cmlldmVkIGZyb20gQ29ubmVjdGlvbiBQb29sIG1pc3NpbmcKKyogVElOS0VSUE9QLTE5NzkgU2V2ZXJhbCBPTEFQIGlzc3VlcyBpbiBNYXRoU3RlcAorKiBUSU5LRVJQT1AtMTk4OCBtaW5vciBlcnJvciBpbiBkb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC0xOTk5IFtKYXZhXVtncmVtbGluLWRyaXZlcl0gUXVlcnkgdG8gYSByZW1vdGUgc2VydmVyIHZpYSB0aGUgd2Vic29ja2V0IGNsaWVudCBoYW5ncyBpbmRlZmluaXRlbHkgaWYgdGhlIHNlcnZlciBiZWNvbWVzIHVuYXZhaWxhYmxlCisqIFRJTktFUlBPUC0yMDA1IEludGVybWl0dGVudCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiByZXNwb25zZSBoYW5kbGluZworKiBUSU5LRVJQT1AtMjAwNiBHcmFwaE1MIHNlcmlhbGl6YXRpb24gaW52YWxpZCBpZiBhIHZlcnRleCBhbmQgZWRnZSBoYXZlIHNpbWlsYXIgbmFtZWQgcHJvcGVydHkKKyogVElOS0VSUE9QLTIwMDkgUGljay5hbnkgYW5kIFBpY2subm9uZSBzaG91bGQgYmUgZXhwb3NlZCBpbiBHcmVtbGluLUphdmFTY3JpcHQKKyogVElOS0VSUE9QLTIwMjEgUHJldmVudCBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBmYWlsdXJlCisqIFRJTktFUlBPUC0yMDI4IEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyZDAgc2hvdWxkIHJlZ2lzdGVyIEdyZW1saW5TZXJ2ZXJNb2R1bGUgd2hlbiBtYXBwZXIgaXMgcHJvdmlkZWQKKyogVElOS0VSUE9QLTIwMjkgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiBmb3IgSW5saW5lRmlsdGVyU3RyYXRlZ3kKKyogVElOS0VSUE9QLTIwMzAgS2VlcEFsaXZlIHRhc2sgZXhlY3V0ZWQgZm9yIGV2ZXJ5IENvbm5lY3Rpb24ud3JpdGUgY2FsbAorKiBUSU5LRVJQT1AtMjAzMiBVcGRhdGUganl0aG9uLXN0YW5kYWxvbmUKKyogVElOS0VSUE9QLTIwNDQgQ2Fubm90IHJlY29ubmVjdCB0byBBenVyZSBjb3Ntb3MgaG9zdCB0aGF0IGJlY29tZXMgYXZhaWxhYmxlIGFnYWluCisqIFRJTktFUlBPUC0yMDU4IENvbnRhaW5zIHByZWRpY2F0ZXMgc2hvdWxkIHJlbHkgb24gQ29tcGFyZSBwcmVkaWNhdGVzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjA4MSBQZXJzaXN0ZWRPdXRwdXRSREQgbWF0ZXJpYWxpc2VzIHJkZCBsYXppbHkgd2l0aCBTcGFyayAyLngKKyogVElOS0VSUE9QLTIwOTEgV3JvbmcvTWlzc2luZyBmZWF0dXJlIHJlcXVpcmVtZW50cyBpbiBTdHJ1Y3R1cmVTdGFuZGFyZFRlc3RTdWl0ZQorKiBUSU5LRVJQT1AtMjA5NCBHcmVtbGluIERyaXZlciBDbHVzdGVyIEJ1aWxkZXIgc2VyaWFsaXplciBtZXRob2QgZG9lcyBub3QgdXNlIG1pbWVUeXBlIGFzIHN1Z2dlc3RlZAorKiBUSU5LRVJQT1AtMjA5NSBHcm91cFN0ZXAgbG9va3MgZm9yIGlycmVsZXZhbnQgYmFycmllciBzdGVwcworKiBUSU5LRVJQT1AtMjA5NiBncmVtbGlucHl0aG9uOiBBdHRyaWJ1dGVFcnJvciB3aGVuIGNvbm5lY3Rpb24gaXMgY2xvc2VkIGJlZm9yZSByZXN1bHQgaXMgcmVjZWl2ZWQKKyogVElOS0VSUE9QLTIxMDAgY29hbGVzY2UoKSBjcmVhdGluZyB1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB1c2VkIHdpdGggb3JkZXIoKQorKiBUSU5LRVJQT1AtMjExMyBQLldpdGhpbigpIGRvZXNuJ3Qgd29yayB3aGVuIGdpdmVuIGEgTGlzdCBhcmd1bWVudAorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC01NTAgR3JlbWxpbiBJTyBuZWVkcyB0byBzdXBwb3J0IGJvdGggT0xUUCBhbmQgT0xBUCBuYXR1cmFsbHkuCisqIFRJTktFUlBPUC05NjcgU3VwcG9ydCBuZXN0ZWQtcmVwZWF0KCkgc3RydWN0dXJlcworKiBUSU5LRVJQT1AtMTExMyBHcmFwaENvbXB1dGVyIHN1YmNsYXNzZXMgc2hvdWxkIHN1cHBvcnQgbmF0aXZlIG1ldGhvZHMKKyogVElOS0VSUE9QLTExNDMgUmVtb3ZlIGRlcHJlY2F0ZWQgVHJhdmVyc2FsU291cmNlLkJ1aWxkZXIgYW5kIFRyYXZlcnNhbEVuZ2luZS4gKihicmVha2luZykqCisqIFRJTktFUlBPUC0xMjk2IFJlbW92ZSBkZXByZWNhdGVkIHNlcmlhbGl6ZWRSZXNwb25zZVRpbWVvdXQgZnJvbSBHcmVtbGluIFNlcnZlciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTEzNDIgQWxsb3cgc2V0dGluZyBzY3JpcHRFdmFsdWF0aW9uVGltZW91dCBpbiBkcml2ZXIKKyogVElOS0VSUE9QLTEzNjUgTG9nIHRoZSBzZWVkIHVzZWQgdG8gaW5pdGlhbGl6ZSBSYW5kb20gaW4gdGVzdHMKKyogVElOS0VSUE9QLTE0MTAgbXZuIGluc3RhbGwgLURtYXZlbi50ZXN0LnNraXA9dHJ1ZSBkb2Vzbid0IHdvcmsgb24gYSBjbGVhbiBtYWNoaW5lICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTQ0NiBBZGQgYSBTdHJpbmdGYWN0b3J5IGZvciBQYXRoIHdoaWNoIHByZWZpeGVzIHdpdGggdHlwZS4KKyogVElOS0VSUE9QLTE0NDcgQWRkIHNvbWUgSmF2YVNjcmlwdCBpbnRlbGxpZ2VuY2UgdG8gdGhlIGRvY3VtZW50YXRpb24gc28gdGhhdCBjb21tZW50cyBhbmQgb3V0cHV0IGFyZSBub3QgY29waWVkIGluIGEgY29weSBwYXN0ZQorKiBUSU5LRVJQT1AtMTQ5NCBNZWFucyBvZiBleHBvc2luZyBleGVjdXRpb24gaW5mb3JtYXRpb24gZnJvbSBhIHJlc3VsdCBwcm9kdWNlZCBieSBSZW1vdGVDb25uZWN0aW9uCisqIFRJTktFUlBPUC0xNTE4IFByb3ZpZGUgYSB3YXkgZm9yIHByb3ZpZGVycyB0byBleHBvc2Ugc3RhdGljIEdyYXBoLkZlYXR1cmVzIHRvIHRlc3RzCisqIFRJTktFUlBPUC0xNTIyIE9yZGVyIG9mIHNlbGVjdCgpIHNjb3BlcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE1OTUgR28gdGhyb3VnaCBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtIHdpdGggYSBwcm9maWxlIGFuZCBvcHRpbWl6ZS4KKyogVElOS0VSUE9QLTE2MjggSW1wbGVtZW50IFRyYXZlcnNhbFNlbGVjdFN0ZXAKKyogVElOS0VSUE9QLTE2ODUgSW50cm9kdWNlIG9wdGlvbmFsIGZlYXR1cmUgdG8gYWxsb3cgZm9yIHVwc2VydHMgd2l0aG91dCByZWFkLWJlZm9yZS13cml0ZQorKiBUSU5LRVJQT1AtMTcwNSBSZW1vdmUgZGVwcmVjYXRlZCByZWJpbmRpbmdzIG9wdGlvbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE3MDcgUmVtb3ZlIGRlcHJlY2F0ZWQgQXV0aGVudGljYXRpb25TZXR0aW5ncy5jbGFzc05hbWUgb3B0aW9uICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTc1NSBObyBkb2NzIGZvciBSZWZlcmVuY2VFbGVtZW50cworKiBUSU5LRVJQT1AtMTc2OSBQeXRob24gZ3JhcGhbZW1wdHldIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyBjb25mdXNpbmcKKyogVElOS0VSUE9QLTE3NzQgR3JlbWxpbiAuTkVUOiBTdXBwb3J0IG1pbiBhbmQgbWF4IHNpemVzIGluIENvbm5lY3Rpb24gcG9vbAorKiBUSU5LRVJQT1AtMTc3NSBHcmVtbGluIC5ORVQ6IEltcGxlbWVudCBhIENvbm5lY3Rpb24gd3JpdGUgcXVldWUgdG8gc3VwcG9ydCByZXF1ZXN0IHBpcGVsaW5pbmcKKyogVElOS0VSUE9QLTE3NzggRG8gbm90IHByb21vdGUgdGltZWRJbnRlcnJ1cHQgb3B0aW9uIGZvciBHcmVtbGluIFNlcnZlciBzY3JpcHQgcHJvY2Vzc2luZworKiBUSU5LRVJQT1AtMTc4MCBBZGQgYXV0aGVudGljYXRpb24gdGVzdHMgZm9yIGdyZW1saW4tcHl0aG9uCisqIFRJTktFUlBPUC0xODMxIFJlZmFjdG9yIEV2ZW50U3RyYXRlZ3kgICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTgzNiAuTkVUIHNhbXBsZSBwcm9qZWN0CisqIFRJTktFUlBPUC0xODQxIEluY2x1ZGUgUHl0aG9uIEdMViB0ZXN0cyBvbiBUcmF2aXNDSQorKiBUSU5LRVJQT1AtMTg0OSBQcm92aWRlIGEgd2F5IHRvIGZvbGQoKSB3aXRoIGFuIGluZGV4CisqIFRJTktFUlBPUC0xODY0IEdyZW1saW4gUHl0aG9uIHRlc3RzIGZvciBHcmFwaFNPTiAyLjAgYW5kIDMuMAorKiBUSU5LRVJQT1AtMTg3OCBTcGFycWwgdG8gR3JlbWxpbiBDb21waWxlcgorKiBUSU5LRVJQT1AtMTg4OCBFeHRlbmQgbWF4IGFuZCBtaW4gdG8gYWxsIENvbXBhcmFibGUgcHJvcGVydGllcywgbm90IGp1c3QgTnVtYmVycyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE4ODkgSmF2YVNjcmlwdCBHTFY6IFVzZSBoZWFydGJlYXQgdG8gcHJldmVudCBjb25uZWN0aW9uIHRpbWVvdXQKKyogVElOS0VSUE9QLTE4OTcgUHJvdmlkZSBEb2NrZXIgaW1hZ2VzIG9mIEdyZW1saW4gU2VydmVyIGFuZCBDb25zb2xlCisqIFRJTktFUlBPUC0xOTA2IE1ha2UgUmVzcG9uc2VFeGNlcHRpb24gZXhwbG9yYWJsZQorKiBUSU5LRVJQT1AtMTkxMiBSZW1vdmUgTUQ1IGNoZWNrc3VtcworKiBUSU5LRVJQT1AtMTkxMyBFeHBvc2UgbWV0YWRhdGEgZnJvbSBHcmVtbGluIFNlcnZlciB0byBDbGllbnRzCisqIFRJTktFUlBPUC0xOTMwIERyb3Agc3VwcG9ydCBmb3IgR2lyYXBoICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTkzNCBCdW1wIHRvIGxhdGVzdCB2ZXJzaW9uIG9mIGh0dHBjbGllbnQKKyogVElOS0VSUE9QLTE5MzYgUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnQgdG8gQnl0ZWNvZGUgZGVzZXJpYWxpemF0aW9uCisqIFRJTktFUlBPUC0xOTQxIFJlbW92ZSBkZXByZWNhdGVkIFN0cnVjdHVyZSBBUEkgZXhjZXB0aW9uIG1ldGhvZHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xOTQyIEJpbmFyeSBzZXJpYWxpemF0aW9uIGZvcm1hdAorKiBUSU5LRVJQT1AtMTk0NSBBZGQgc3VwcG9ydCBmb3IgZXh0ZW5kZWQgR3JhcGhTb24gdHlwZXMgdG8gR3JlbWxpbi5uZXQKKyogVElOS0VSUE9QLTE5NDYgUmVtb3ZlIHRoZSBkZXByZWNhdGVkIENyZWRlbnRpYWxzIERTTCBpbmZyYXN0cnVjdHVyZSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTE5NTAgVHJhdmVyc2FsIGNvbnN0cnVjdGlvbiBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMKKyogVElOS0VSUE9QLTE5NTEgZ3JlbWxpbi1zZXJ2ZXIuYmF0IGRvZXNuJ3Qgc3VwcG9ydCBwYXRocyBjb250YWluaW5nIHNwYWNlcworKiBUSU5LRVJQT1AtMTk1MyBCdW1wIHRvIEdyb292eSAyLjQuMTUKKyogVElOS0VSUE9QLTE5NTQgUmVtb3ZlIGRlcHJlY2F0ZWQgR3JhcGhNYW5hZ2VyIG1ldGhvZHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xOTU5IFByb3ZpZGUgYSB3YXkgdG8gc3VibWl0IHNjcmlwdHMgdG8gdGhlIHNlcnZlciBpbiBncmVtbGluLWphdmFzY3JpcHQKKyogVElOS0VSUE9QLTE5NjcgQWRkIGEgY29ubmVjdGVkQ29tcG9uZW50KCkgc3RlcAorKiBUSU5LRVJQT1AtMTk2OCBSZWZhY3RvciBlbGVtZW50cyBvZiBHcmVtbGluIFNlcnZlciB0ZXN0aW5nCisqIFRJTktFUlBPUC0xOTc1IEludHJvZHVjZSB3aXRoKCkgc3RlcCBtb2R1bGF0b3IgKihicmVha2luZykqCisqIFRJTktFUlBPUC0xOTc2IEluY2x1ZGUgQ29tcHV0ZXIgdGVzdHMgZm9yIEdMVnMKKyogVElOS0VSUE9QLTE5NzcgR3JlbWxpbi1KYXZhU2NyaXB0OiBTdXBwb3J0IFNBU0wgYXV0aGVudGljYXRpb24KKyogVElOS0VSUE9QLTE5ODQgQWxsb3cgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc2VyaWFsaXplciB2ZXJzaW9ucyBpbiBHcmVtbGluIFNlcnZlciBIVFRQICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTk4NSBVcGRhdGUgcG9zaXRpb24gb24gYnVsayBsb2FkaW5nCisqIFRJTktFUlBPUC0xOTg2IFJlbW92ZSBkZXByZWNhdGlvbiBmcm9tIFBhcnRpdGlvblN0cmF0ZWd5LCBTdWJncmFwaFN0cmF0ZWd5IGFuZCBHcmVtbGluU2NyaXB0RW5naW5lICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTk4NyBCdW1wIHRvIE5ldHR5IDQuMS54CisqIFRJTktFUlBPUC0xOTg5IFByZXNlcnZlIG9yZGVyIHRoYXQgcGx1Z2lucyBhcmUgYXBwbGllZCBpbiBHcmVtbGluIENvbnNvbGUKKyogVElOS0VSUE9QLTE5OTAgQWRkIGEgc2hvcnRlc3RQYXRoKCkgc3RlcAorKiBUSU5LRVJQT1AtMTk5MyBCdW1wIHRvIFNwYXJrIDIuMy4xCisqIFRJTktFUlBPUC0xOTk1IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gY2xvc2UoKSBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQKKyogVElOS0VSUE9QLTE5OTYgSW50cm9kdWNlIHJlYWQoKSBhbmQgd3JpdGUoKSBzdGVwcworKiBUSU5LRVJQT1AtMjAwMiBDcmVhdGUgYSBibG9nIHBvc3QgZXhwbGFpbmluZyB0aGUgdmFsdWUgb2YgdXNpbmcgVGlua2VyUG9wCisqIFRJTktFUlBPUC0yMDEwIEdlbmVyYXRlIGpzZG9jIGZvciBncmVtbGluLWphdmFzY3JpcHQKKyogVElOS0VSUE9QLTIwMTEgVXNlIE51bWJlckhlbHBlciBvbiBjaG9vc2UoKQorKiBUSU5LRVJQT1AtMjAxMiBUYXJnZXQgLk5FVCBTdGFuZGFyZCAyLjAgZm9yIEdyZW1saW4uTmV0CisqIFRJTktFUlBPUC0yMDEzIFByb2Nlc3MgdGVzdHMgdGhhdCBhcmUgYXV0by1pZ25vcmVkIHN0aW5rCisqIFRJTktFUlBPUC0yMDE1IEFsbG93IHVzZXJzIHRvIGNvbmZpZ3VyZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25zCisqIFRJTktFUlBPUC0yMDE2IFVwZ3JhZGUgSmFja3NvbiBGYXN0ZXJYTUwgdG8gMi45LjUgb3IgbGF0ZXIgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkKKyogVElOS0VSUE9QLTIwMTcgQ2hlY2sgZm9yIENvbHVtbiBpbiBieSgpCisqIFRJTktFUlBPUC0yMDE4IEdlbmVyYXRlIEFQSSBkb2NzIGZvciBHcmVtbGluLk5ldAorKiBUSU5LRVJQT1AtMjAyMiBDbHVzdGVyIFNTTCBzaG91bGQgdHJ1c3QgZGVmYXVsdCBjYSBjZXJ0cyBieSBkZWZhdWx0CisqIFRJTktFUlBPUC0yMDIzIEdyZW1saW4gU2VydmVyIHNob3VsZCBub3QgY3JlYXRlIHNlbGYtc2lnbmVkIGNlcnRzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjAyNCBHcmVtbGluIFNlcnZlciBBcHBsaWNhdGlvbiBhcmNoZXR5cGUgc2hvdWxkIGNvbm5lY3QgdmlhIHdpdGhSZW1vdGUKKyogVElOS0VSUE9QLTIwMjUgQ2hhbmdlIHRvIFNIQS0yNTYvNTEyIGFuZCBkcm9wIFNIQS0xIGZvciByZWxlYXNlcworKiBUSU5LRVJQT1AtMjAyNiBHcmVtbGluLk5ldC5Ecml2ZXIgc2hvdWxkIGNoZWNrIENsaWVudFdlYlNvY2tldC5TdGF0ZSBiZWZvcmUgY2xvc2luZworKiBUSU5LRVJQT1AtMjAzMSBSZW1vdmUgc3VwcG9ydCBmb3IgLWkgaW4gZ3JlbWxpbi1zZXJ2ZXIuc2ggKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMDMzIE1haW50YWluIG9yZGVyIG9mIHByb2ZpbGUoKSBhbm5vdGF0aW9ucworKiBUSU5LRVJQT1AtMjAzNCBSZWdpc3RlciBzeW5jaHJvbml6ZWRNYXAoKSB3aXRoIEdyeW8KKyogVElOS0VSUE9QLTIwMzcgUmVtb3ZlIHVudXNlZCBncm9vdnktc3FsIGRlcGVuZGVuY3kKKyogVElOS0VSUE9QLTIwMzggTWFrZSBncm9vdnkgc2NyaXB0IGNhY2hlIHNpemUgY29uZmlndXJhYmxlCisqIFRJTktFUlBPUC0yMDM5IEJ1bXAgdG8gR3Jvb3Z5IDIuNS4yICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjA0MCBJbXByb3ZlIGZsZXhpYmlsaXR5IG9mIEdyb292eVRyYW5zbGF0b3IgdG8gaGFuZGxlIGN1c3RvbSB0eXBlcworKiBUSU5LRVJQT1AtMjA0MSBUZXh0IFByZWRpY2F0ZXMKKyogVElOS0VSUE9QLTIwNDUgUmVtb3ZlIG5vbi1pbmR5IGdyb292eSBkZXBlbmRlbmNpZXMKKyogVElOS0VSUE9QLTIwNDkgU2luZ2xlIGFyZ3VtZW50IHdpdGgoKSBvdmVybG9hZAorKiBUSU5LRVJQT1AtMjA1MCBBZGQgYSA6Ynl0ZWNvZGUgY29tbWFuZCB0byBHcmVtbGluIENvbnNvbGUKKyogVElOS0VSUE9QLTIwNTMgUHJvdmlkZXIgT3B0aW9uc1N0cmF0ZWd5IGZvciB0cmF2ZXJzYWwgY29uZmlndXJhdGlvbnMKKyogVElOS0VSUE9QLTIwNTUgUHJvdmlkZSBzdXBwb3J0IGZvciBzcGVjaWFsIG51bWJlciBjYXNlcyBsaWtlIEluZmluaXR5IGluIEdyYXBoU09OCisqIFRJTktFUlBPUC0yMDU2IFVzZSBOdW1iZXJIZWxwZXIgaW4gQ29tcGFyZQorKiBUSU5LRVJQT1AtMjA1OSBNb2R1bGF0aW9uIG9mIHZhbHVlTWFwKCkgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMDYwIE1ha2UgTXV0YXRpbmcgc3RlcHMgbm9uLWZpbmFsCisqIFRJTktFUlBPUC0yMDYxIEFkZCB3aXRoKCkgY29uZmlndXJhdGlvbiBhcyBnbG9iYWwgdG8gYSB0cmF2ZXJzYWwKKyogVElOS0VSUE9QLTIwNjIgQWRkIFRyYXZlcnNhbCBjbGFzcyB0byBDb3JlSW1wb3J0cworKiBUSU5LRVJQT1AtMjA2NCBBZGQgc3RhdHVzIGF0dHJpYnV0ZXMgdG8gcmVzdWx0cyBmb3IgZ3JlbWxpbi1qYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yMDY1IE9wdGltaXplIGl0ZXJhdGUoKSBmb3IgcmVtb3RlIHRyYXZlcnNhbHMKKyogVElOS0VSUE9QLTIwNjYgQnVtcCB0byBHcm9vdnkgMi41LjMKKyogVElOS0VSUE9QLTIwNjcgQWxsb3cgZ2V0dGluZyByYXcgZGF0YSBmcm9tIEdyZW1saW4uTmV0LkRyaXZlci5JR3JlbWxpbkNsaWVudAorKiBUSU5LRVJQT1AtMjA2OCBCdW1wIEphY2tzb24gRGF0YWJpbmQgMi45LjcKKyogVElOS0VSUE9QLTIwNjkgRG9jdW1lbnQgY29uZmlndXJhdGlvbiBvZiBHcmVtbGluLk5ldAorKiBUSU5LRVJQT1AtMjA3MCBncmVtbGluLWphdmFzY3JpcHQ6IEludHJvZHVjZSBDb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCisqIFRJTktFUlBPUC0yMDcxIGdyZW1saW4tcHl0aG9uOiB0aGUgZ3JhcGhzb24gZGVzZXJpYWxpemVyIGZvciBnOlNldCBzaG91bGQgcmV0dXJuIGEgcHl0aG9uIHNldAorKiBUSU5LRVJQT1AtMjA3MiBSZWZhY3RvciBjdXN0b20gdHlwZSB0cmFuc2xhdGlvbiBmb3IgU2NyaXB0VHJhbnNsYXRvcnMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMDczIEdlbmVyYXRlIHRhYnMgZm9yIHN0YXRpYyBjb2RlIGJsb2NrcworKiBUSU5LRVJQT1AtMjA3NCBFbnN1cmUgdGhhdCBvbmx5IE51R2V0IHBhY2thZ2VzIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uIGFyZSBwdXNoZWQKKyogVElOS0VSUE9QLTIwNzUgSW50cm9kdWNlIFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneQorKiBUSU5LRVJQT1AtMjA3NyBWZXJ0ZXhQcm9ncmFtLkJ1aWxkZXIgc2hvdWxkIGhhdmUgYSBkZWZhdWx0IGNyZWF0ZSgpIG1ldGhvZCB3aXRoIG5vIEdyYXBoCisqIFRJTktFUlBPUC0yMDc4IEhpZGUgdXNlIG9mIEVtcHR5R3JhcGggb3IgUmVtb3RlR3JhcGggYmVoaW5kIGEgbW9yZSB1bmlmaWVkIG1ldGhvZCBmb3IgVHJhdmVyc2FsU291cmNlIGNvbnN0cnVjdGlvbgorKiBUSU5LRVJQT1AtMjA3OSBNb3ZlIFJlbW90ZUdyYXBoIHRvIHRlc3QgcGFja2FnZSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIwODQgRm9yIHJlbW90ZSByZXF1ZXN0cyBpbiBjb25zb2xlIGRpc3BsYXkgdGhlIHJlbW90ZSBzdGFjayB0cmFjZQorKiBUSU5LRVJQT1AtMjA5MiBEZXByZWNhdGUgZGVmYXVsdCBHcmFwaFNPTiBzZXJpYWxpemVyIGZpZWxkcworKiBUSU5LRVJQT1AtMjA5MyBCdW1wIHRvIEdyb292eSAyLjUuNAorKiBUSU5LRVJQT1AtMjA5NyBDcmVhdGUgYSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHdpdGggYW4gaW5pdGlhbGl6ZWQgQ2xpZW50CisqIFRJTktFUlBPUC0yMTAxIFN1cHBvcnQgU3BhcmsgMi40CisqIFRJTktFUlBPUC0yMTAzIFJlbW92ZSBkZXByZWNhdGVkIHN1Ym1pdCgpIG9wdGlvbnMgb24gUmVtb3RlQ29ubmVjdGlvbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIxMDQgQWxsb3cgSW1wb3J0Q3VzdG9taXplciB0byBoYW5kbGUgZmllbGRzCisqIFRJTktFUlBPUC0yMTA2IFdoZW4gZ3JlbWxpbiBleGVjdXRlcyB0aW1lb3V0LCB0aHJvdyBUaW1lb3V0RXhjZXB0aW9uIGluc3RlYWQgb2YgVHJhdmVyc2FsSW50ZXJydXB0ZWRFeGNlcHRpb24vSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbgorKiBUSU5LRVJQT1AtMjExMCBBbGxvdyBDb25uZWN0aW9uIG9uIERpZmZlcmVudCBQYXRoIChmcm9tIC9ncmVtbGluKQorKiBUSU5LRVJQT1AtMjExMSBBZGQgQnVsa1NldCBhcyBhIEdyYXBoU09OIHR5cGUgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMTE0IERvY3VtZW50IGNvbW1vbiBHcmVtbGluIGFudGktcGF0dGVybnMKKyogVElOS0VSUE9QLTIxMTYgRXhwbGljaXQgQmluZGluZ3Mgb2JqZWN0IGZvciBQeXRob24gKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMTE3IGdyZW1saW4tcHl0aG9uOiBQcm92aWRlIGEgYmV0dGVyIGRhdGEgc3RydWN0dXJlIGZvciBhIEJpbmRpbmcKKyogVElOS0VSUE9QLTIxMTkgVmFsaWRhdGUgQyMgY29kZSBzYW1wbGVzIGluIGRvY3MKKyogVElOS0VSUE9QLTIxMjEgQnVtcCBKYWNrc29uIERhdGFiaW5kIDIuOS44ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNS54LmFzY2lpZG9jIGIvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNS54LmFzY2lpZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjUzODUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy41LnguYXNjaWlkb2MKQEAgLTAsMCArMSw3NTAgQEAKKy8vLy8KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8KKz09IFRpbmtlclBvcCAzLjUuMCAoVGhlIFNsZWVwaW5nIEdyZW1saW46IE5vLiAxOCBFbnRyJ2FjdGUgU3ltcGhvbmlxdWUpCisKK2ltYWdlOjpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYXBhY2hlL3RpbmtlcnBvcC9tYXN0ZXIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tc2xlZXBpbmctYmVhdXR5LnBuZ1t3aWR0aD0xODVdCisKK1tbcmVsZWFzZS0zLTUtOF1dCis9PT0gVGlua2VyUG9wIDMuNS44IChSZWxlYXNlIERhdGU6IE5vdmVtYmVyIDIwLCAyMDIzKQorCisqIEZpeGVkIGEgYnVnIGluIEdyZW1saW4uTmV0IHRoYXQgY2FuIGxlYWQgdG8gYW4gYEludmFsaWRPcGVyYXRpb25FeGNlcHRpb25gIGR1ZSB0byBtb2RpZnlpbmcgYSBjb2xsZWN0aW9uIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGl0IGluIHRoZSBzZXJpYWxpemVycy4KKyogQnVtcGVkIE5ldHR5IHRvIDQuMS45NgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjk3NiBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uOiBDb2xsZWN0aW9uIHdhcyBtb2RpZmllZCBpbiBHcmFwaEJpbmFyeSBzZXJpYWxpemF0aW9uCisqIFRJTktFUlBPUC0yOTgzIFVwZ3JhZGUgTmV0dHkgZm9yIFNlY3VyaXR5IFJlYXNvbnMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjk4NCBSZXBsYWNlIE1vcSBtb2NraW5nIGxpYnJhcnkgaW4gLk5FVCB0ZXN0cworKiBUSU5LRVJQT1AtMjk5MSBSZWZvcm1hdCBKYXZhZG9jIGxpbmsgaW4gcmVmZXJlbmNlIGRvY3MKKworCitbW3JlbGVhc2UtMy01LTddXQorPT09IFRpbmtlclBvcCAzLjUuNyAoUmVsZWFzZSBEYXRlOiBKdWx5IDMxLCAyMDIzKQorCisqIEJ1bXBlZCBgamFja3Nvbi1kYXRhYmluZGAgdG8gMi4xNS4yIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorKiBJbnRyb2R1Y2VkIGBtYXhOdW1iZXJMZW5ndGhgLCBgbWF4U3RyaW5nTGVuZ3RoYCwgYW5kIGBtYXhOZXN0aW5nRGVwdGhgIGNvbmZpZ3MgZm9yIGBHcmFwaFNPTmAgc2VyaWFsaXplcnMuCisqIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIEdyZW1saW4uTmV0IGRyaXZlciB0aGF0IG9ubHkgb2NjdXJyZWQgaWYgYSBgQ2FuY2VsbGF0aW9uVG9rZW5gIHdhcyBwcm92aWRlZC4KKyogRml4ZWQgZ3JlbWxpbi1weXRob24gYENsaWVudGAgcHJvYmxlbSB3aGVyZSBjYWxsaW5nIGBzdWJtaXQoKWAgYWZ0ZXJgIGBjbG9zZSgpYCB3b3VsZCBoYW5nIHRoZSBzeXN0ZW0uCisqIEFkZGVkIGBncmVtbGluLnNwYXJrLmRvbnREZWxldGVOb25FbXB0eU91dHB1dGAgdG8gc3RvcCBkZWxldGluZyB0aGUgb3V0cHV0IGZvbGRlciBpZiBpdCBpcyBub3QgZW1wdHkgaW4gYHNwYXJrLWdyZW1saW5gLgorKiBGaXhlZCBhIGJ1ZyBpbiBgU3ViZ3JhcGhTdHJhdGVneWAgd2hlcmUgdGhlIHZlcnRleCBwcm9wZXJ0eSBmaWx0ZXIgcHJvZHVjZWQgZXJyb3JzIGlmIGEgYFZlcnRleGAgd2FzIG1pc3NpbmcgdGhlIGtleSBwcm92aWRlZCB0byBgYnkoKWAgYXMgYSB0b2tlbi4KKyogVXBncmFkZWQgYGdyZW1saW4tamF2YXNjcmlwdGAgYW5kIGBncmVtbGludGAgdG8gTm9kZSAxNi4yMC4wLgorKiBVcGdyYWRlZCBgZ3JlbWxpbi1nb2AgdG8gR28gMS4yMC4KKyogSW1wcm92ZWQgdGhlIHB5dGhvbiBgVHJhbnNsYXRvcmAgY2xhc3Mgd2l0aCBiZXR0ZXIgaGFuZGxpbmcgZm9yIGBQYCwgYE5vbmVgIGFuZCBzdWJjbGFzc2VzIG9mIGBzdHJgLgorKiBGaXhlZCBidWcgaW4gYEZpbHRlclJhbmtpbmdTdHJhdGVneWAgdGhhdCB3YXMgcHJldmVudGluZyBjZXJ0YWluIHRyYXZlcnNhbHMgZnJvbSByZWNvZ25pemluZyBsYWJlbHMgaW4gY2hpbGQgdHJhdmVyc2Fscy4KKyogQWRkZWQgYGdyZW1saW4tamF2YTguYmF0YCBmaWxlIGFzIGEgd29ya2Fyb3VuZCB0byBhbGxvdyBsb2FkaW5nIHRoZSBjb25zb2xlIHVzaW5nIEphdmEgOCBvbiBXaW5kb3dzLgorKiBGaXhlZCBhIGJ1ZyBpbiBgZ3JlbWxpbi1zZXJ2ZXJgIHdoZXJlIHRpbWVvdXQgdGFza3Mgd2VyZSBub3QgY2FuY2VsbGVkIGFuZCBjb3VsZCBjYXVzZSB2ZXJ5IGxhcmdlIG1lbW9yeSB1c2FnZSB3aGVuIHRpbWVvdXQgaXMgbGFyZ2UuCisqIFJlbW92ZWQgYGpjYWJpLW1hbmlmZXN0c2AgZGVwZW5kZW5jeSBmcm9tIGBncmVtbGluLWNvcmVgLCBgZ3JlbWxpbi1kcml2ZXJgLCBhbmQgYGdyZW1saW4tc2VydmVyYC4KKyogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgdGhlIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCB0byB0aHJvdyBhIGBNaXNzaW5nTWV0aG9kRXhjZXB0aW9uYCB3aGVuIGNhbGxpbmcgYSBzdGF0aWMgbWV0aG9kIGluIF9fIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBlbnVtLgorKiBEZXByZWNhdGVkIE5lbzRqLUdyZW1saW4KKyogQWRkZWQgYFZlcnRleFByb3BlcnR5RmlsdGVyYCB0byBgR3JhcGhDb21wdXRlcmAKKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI5MjAgU3ViZ3JhcGhTdHJhdGVneSBmYWlsdXJlIHdoZW4gcHJvcGVydHkga2V5IG5vdCBwcmVzZW50IG9uIHZlcnRleCBpbiBieSgpCisqIFRJTktFUlBPUC0yOTM3IFRocm93IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHVzZSBhIGNsb3NlZCBjb25uZWN0aW9uCisqIFRJTktFUlBPUC0yOTQ0IE1lbW9yeSBsZWFrIGluIEdyZW1saW4uTmV0IGRyaXZlciBpZiBDYW5jZWxsYXRpb25Ub2tlbiBpcyB1c2VkCisqIFRJTktFUlBPUC0yOTQ4IFBSSVNNQSBzZWN1cml0eSB2dWxuZXJhYmlsdHkgZm9yIGphY2tzb24tZGF0YWJpbmQgMi4xNC4wICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjk1MyBTdGF0aWMgaW1wb3J0IGZvciBfXy52YWx1ZXMoKSBvdmVycmlkZW4gYnkgQ29sdW1uLnZhbHVlcygpCisqIFRJTktFUlBPUC0yOTU4IFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBmb3IgdGltZW91dHMgYXJlIG5ldmVyIGNhbmNlbGxlZAorKiBUSU5LRVJQT1AtMjk2NSBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgcmVtb3ZpbmcgbGFiZWxzIGl0IHNob3VsZG4ndCBpbiBjZXJ0YWluIGNvbmRpdGlvbnMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTQwMyBQcm92aWRlIHN1cHBvcnQgZm9yIEdyYXBoRmlsdGVyLnZlcnRleFByb3BlcnRpZXMoKSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI5NDEgRE8gTk9UIHB1cmdlIHRoZSBvdXRwdXQgbG9jYXRpb24gaWYgaXQgaGFzIGNvbnRlbnQgaW4gU3BhcmtHcmFwaENvbXB1dGVyCisqIFRJTktFUlBPUC0yOTU0IFBhc3MgR3JlbWxpbiBWZXJzaW9uIGZyb20gTWF2ZW4gdG8gSmF2YSBXaXRob3V0IE1hbmlmZXN0cworKiBUSU5LRVJQT1AtMjk1NSBTdXBwb3J0IFNTTCBpbiBXZWJTb2NrZXRDbGllbnQKKyogVElOS0VSUE9QLTI5NzcgRGVwcmVjYXRlIE5lbzRqLUdyZW1saW4KKworW1tyZWxlYXNlLTMtNS02XV0KKz09PSBUaW5rZXJQb3AgMy41LjYgKFJlbGVhc2UgRGF0ZTogTWF5IDEsIDIwMjMpCisKKyogQWRkZWQgYEdyYXBoRmlsdGVyYCBzdXBwb3J0IHRvIGBHcmFwaFNPTlJlY29yZFJlYWRlcmAuCisqIGdyZW1saW4tcHl0aG9uIGFpb2h0dHAgZGVwZW5kZW5jeSByZXF1aXJlbWVudCB1cHBlciBib3VuZCByZWxheGVkIHRvIDw0LjAuMC4KKyogRml4ZWQgbmV0d29yayBjb25uZWN0aW9uIGNsb3NpbmcgZm9yIHNlc3Npb25zIGFuZCB0cmFuc2FjdGlvbnMgaW4gYGdyZW1saW4tcHl0aG9uYC4KKyogRml4ZWQgbWVtb3J5IGNsZWFudXAgZm9yIHNlc3Npb25zIGFuZCB0cmFuc2FjdGlvbnMgaW4gYGdyZW1saW4tcHl0aG9uYCBhbmQgYGdyZW1saW4tZ29gLgorKiBGaXhlZCBidWcgaW4gYENvdW50U3RyYXRlZ3lgIHdoZXJlIGBvcigpYCBhbmQgYGFuZCgpYCBmaWx0ZXJzIHdlcmUgbm90IGJlaW5nIHJld3JpdHRlbiBwcm9wZXJseSBmb3Igc29tZSBwYXR0ZXJucy4KKyogQ2hhbmdlZCBgUGFydGl0aW9uU3RyYXRlZ3lgIHRvIGZvcmNlIGl0cyBmaWx0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIGNoYWluIGZvciBgVmVydGV4YCBhbmQgYEVkZ2VgIHJlYWQgc3RlcHMsIHRodXMgcHJlc2VydmluZyBvcmRlciBvZiB0aGUgYGhhcygpYC4KKyogQWRkZWQgYFJlcXVlc3RPcHRpb25zYCBhbmQgYFJlcXVlc3RPcHRpb25zQnVpbGRlcmAgdHlwZXMgdG8gR28gR0xWIHRvIGVuY2Fwc3VsYXRlIHBlci1yZXF1ZXN0IHNldHRpbmdzIGFuZCBiaW5kaW5ncy4KKyogSW1wcm92ZWQgYGFkZEUoKWAgZXJyb3IgbWVzc2FnaW5nIHdoZW4gdHJhdmVyc2VyIGlzIG5vdCBhIGBWZXJ0ZXhgLgorKiBBZGRlZCBgU3VibWl0V2l0aE9wdGlvbnMoKWAgbWV0aG9kcyB0byBgQ2xpZW50YCBhbmQgYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gIGluIEdvIEdMViB0byBwYXNzIGBSZXF1ZXN0T3B0aW9uc2AgdG8gdGhlIHNlcnZlci4KKyogRml4ZWQgYnVnIGluIHdoaWNoIGBncmVtbGluLXNlcnZlcmAgd291bGQgbm90IHJlc3BvbmQgdG8gY2xpZW50cyBpZiBhbiBgRXJyb3JgIHdhcyB0aHJvd24gZHVyaW5nIGJ5dGVjb2RlIHRyYXZlcnNhbHMuCisqIEFkZGVkIGFiaWxpdHkgdG8gZGVwbG95IG11bHRpLWFyY2ggRG9ja2VyIGltYWdlcyBmb3Igc2VydmVyIGFuZCBjb25zb2xlLiBTZXJ2ZXIgaW1hZ2Ugbm93IHN1cHBvcnRzIEFNRDY0IGFuZCBBUk02NC4KKyogQ2hhbmdlZCBgd2l0aCgpYCBjb25maWd1cmF0aW9uIGZvciBgQVJHU19CQVRDSF9TSVpFYCBhbmQgYEFSR1NfRVZBTF9USU1FT1VUYCB0byBiZSBtb3JlIGZvcmdpdmluZyBvbiB0aGUgdHlwZSBvZiBgTnVtYmVyYCB1c2VkIGZvciB0aGUgdmFsdWUuCisqIENoYW5nZWQgYGdyZW1saW4tY29uc29sZWAgdG8gYWRkIGltcG9ydHMgdmlhIGFuIEltcG9ydEN1c3RvbWl6ZXIgdG8gcmVkdWNlIHRpbWUgc3BlbnQgcmVzb2x2aW5nIGltcG9ydHMuCisqIEJ1bXBlZCB0byBHcm9vdnkgMi41LjIyLgorKiBGaXhlZCBgZ2VuZXJhdGVVc2VyQWdlbnQoKWAgaW4gYGdyZW1saW4tamF2YXNjcmlwdGAgYW5kIGBncmVtbGluLWRvdG5ldGAgdG8gaGFuZGxlIG51bGwgYW5kIHVuZGVmaW5lZCBwcm9wZXJseSwgYW5kIHVwZGF0ZWQgSmF2YSBVc2VyQWdlbnQgZXJyb3IgaGFuZGxpbmcKKyogRml4ZWQgYnVnIGluIHBhcnNpbmcgb2YgYG1hdGgoKWAgZXhwcmVzc2lvbnMgd2hlcmUgdmFyaWFibGVzIHdlcmUgbm90IGJlaW5nIGlkZW50aWZpZWQgaWYgdGhleSBjb250YWluZWQgYSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGZ1bmN0aW9uLgorKiBSZWZhY3RvcmVkIGBGaWx0ZXJSYW5raW5nU3RyYXRlZ3lgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGRlZXBseSBuZXN0ZWQgdHJhdmVyc2Fscy4KKyogUmVmYWN0b3JlZCBzdHJhdGVneSBhcHBsaWNhdGlvbiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IGF2b2lkaW5nIHNvbWUgZXhjZXNzaXZlIHJlY3Vyc2lvbi4KKyogQWRkZWQgYFRyYXZlcnNhbC5sb2NrKClgIHRvIHByb3ZpZGUgYW4gZXhwbGljaXQgd2F5IHRvIGZpbmFsaXplIGEgdHJhdmVyc2FsIG9iamVjdC4KKyogQ2hhbmdlZCBgVHJhdmVyc2FsLmdldEdyYXBoKClgIHRvIGdldCBpdHMgYEdyYXBoYCBvYmplY3QgZnJvbSBpdHNlbGYgb3IsIGlmIG5vdCBhdmFpbGFibGUsIGl0cyBwYXJlbnQuCisqIEFkZGVkIGBBdXRoSW5mb1Byb3ZpZGVyYCBpbnRlcmZhY2UgYW5kIGBOZXdEeW5hbWljQXV0aCgpYCB0byBncmVtbGluLWdvIGZvciBkeW5hbWljIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQuCisqIEZpeGVkIGJ1ZyB3aGVyZSBgaGFzSWQoKWAgdW5yb2xscyBpZHMgaW4gSmF2YSBhcnJheXMgdG8gcHV0IGludG8gYFAud2l0aGluYCBidXQgbm90IGlkcyBpbiBsaXN0cywgdGhpcyBhbHNvIGFsaWduZWQgYmVoYXZpb3Igb2Ygc3RhcnQtc3RlcCBhbmQgbWlkLXRyYXZlcnNhbCBoYXNJZCgpLgorKiBCdW1wZWQgdG8gYHNuYWtleWFtbGAgMi4wIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorKiBCdW1wZWQgdG8gQXBhY2hlIGBjb21tb25zLWNvbmZpZ3VyYXRpb25gIDIuOS4wIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorKiBGaXhlZCBgQ291bnRTdHJhdGVneWAgYnVnIGZvciBjYXNlcyB3aGVyZSBwcmVkaWNhdGVzIGNvbnRhaW4gbmVnYXRpdmUgbnVtYmVycyBieSBkaXNhYmxpbmcgdGhlIG9wdGltaXphdGlvbi4KKyogSW1wcm92ZWQgYGNvdW50YCBzdGVwIG9wdGltaXphdGlvbiBmb3IgbmVnYXRpdmUgdmFsdWVzIGluIGlucHV0IGZvciAnZXEnIGNvbXBhcmlzb24uCisqIEZpeGVkIHBlcmZvcm1hbmNlIGlzc3VlIHdoZW4gdXNpbmcgYFNhbXBsZUdsb2JhbFN0ZXBgIHdpdGggYSB0cmF2ZXJzZXIgdGhhdCBoYXMgZWl0aGVyIGEgYExBQkVMRURfUEFUSGAgb3IgYFBBVEhgIHJlcXVpcmVtZW50LgorKiBSZWR1Y2UgdGhlIGB0b1N0cmluZygpYCBvZiBgT2JqZWN0V3JpdGFibGVgIHRvIGF2b2lkIE9PTSBmb3IgcnVubmluZyBPTEFQIHF1ZXJpZXMgb24gU3BhcmsuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0yNTI2IEdyZW1saW4gQ29uc29sZSBwZXJmb3JtYW5jZSB3aXRoIGluY29tcGxldGUgbXVsdGktbGluZSBzY3JpcHRzCisqIFRJTktFUlBPUC0yNzY3IFJlcGVhdCBPdXQgVGltZXMgdHJhdmVyc2FsIGhhbmdzIGluZGVmaW5pdGVseSBvbiBmaXJzdCBleGVjdXRpb24KKyogVElOS0VSUE9QLTI4MjAgZ3JlbWxpbi1weXRob24gX2Nsb3NlX3Nlc3Npb24gcmFjZSBjb25kaXRpb24vRkQgbGVhaworKiBUSU5LRVJQT1AtMjg1NSBQZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBUaW5rZXJHcmFwaCAzLjUuNCBhbmQgMy41LjUKKyogVElOS0VSUE9QLTI4NTYgbWF0aCgpIHN0ZXAgZmFpbHMgaWYgdmFyaWFibGUgbmFtZSBjb250YWlucyBhIGtleXdvcmQKKyogVElOS0VSUE9QLTI4NjEgRml4IGluY29ycmVjdCBzeW1saW5rcyBpbiBzb3VyY2UgcmVsZWFzZSB6aXAKKyogVElOS0VSUE9QLTI4NjMgSGFzSWQgU3RlcCBnZW5lcmF0ZXMgaW5jb3JyZWN0IHJlc3VsdHMgd2hlbiBnaXZlbiBhIGxpc3Qgb2YgSURzIG1pZC10cmF2ZXJzYWwKKyogVElOS0VSUE9QLTI4NzggSW5jb3JyZWN0IGhhbmRsaW5nIG9mIGxvY2FsIG9wZXJhdGlvbnMgd2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlIGVsZW1lbnRzCisqIFRJTktFUlBPUC0yODg4IERlZmF1bHRUcmF2ZXJzYWwncyBhcHBseVN0cmF0ZWdpZXMgcGVyZm9ybWFuY2UgZGVjcmVhc2UKKyogVElOS0VSUE9QLTI4OTEgSW5jb25zaXN0ZW50IGJlaGF2aW9yIHdoZW4gY29tcGFyaW5nIGEgY291bnRlZCB2YWx1ZSB3aXRoIGEgbmVnYXRpdmUgdmFsdWUKKyogVElOS0VSUE9QLTI4OTMgSW5jb3JyZWN0bHkgY29tcGFyaW5nIGEgY291bnRlZCB2YWx1ZSB3aXRoIG11bHRpcGxlIHByZWRpY2F0ZXMKKyogVElOS0VSUE9QLTI5MDIgQ3JpdGljYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBpbiBzbmFrZXlhbWwKKyogVElOS0VSUE9QLTI5MDUgZ3JlbWxpbi1nbyBnb3JpbGxhVHJhbnNwb3J0ZXIubG9nSGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQgY29ycmVjdGx5IGFuZCBsZWFkcyB0byBwYW5pYworKiBUSU5LRVJQT1AtMjkxMSBDb3VudFN0cmF0ZWd5IGNvbnZlcnRzIGNvdW50KCkuaXMoMCkgd3JvbmdseSB1bmRlciBDb25uZWN0aXZlU3RyYXRlZ3kKKyogVElOS0VSUE9QLTI5MTggVXRpbHMuR2VuZXJhdGVVc2VyQWdlbnQgYXNzdW1lcyBHcmVtbGluLk5ldC5kbGwgdG8gYmUgcHJlc2VudCB3aGVuLCBpbiBzb21lIGVudmlyb25tZW50cywgaXQgaXMgbm90LgorCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0yODQxIFRlc3QgYW5kIEZpeCBQZXIgUmVxdWVzdCBTZXR0aW5ncyBpbiBHbworKiBUSU5LRVJQT1AtMjg1MiBVcGRhdGUgTWF2ZW4gcGx1Z2luIGZvciBkb2NrZXItaW1hZ2VzIGJ1aWxkaW5nIGZvciBNMSBjb21wYXRpYmlsaXR5CisqIFRJTktFUlBPUC0yODU3IEdyYXBoU09OUmVjb3JkUmVhZGVyIGRvZXMgbm90IGFsbG93IGNvbmZpZ3VyZSBhIEdyYXBoRmlsdGVyIGR1cmluZyBkZXNlcmlhbGl6YXRpb24KKyogVElOS0VSUE9QLTI4NjUgQWRkIGhhcyBzdGVwcyBpbmplY3RlZCBieSBQYXJ0aXRpb25TdHJhdGVneSBhdCB0aGUgZW5kIG9mIHRoZSBmaWx0ZXIKKyogVElOS0VSUE9QLTI4OTAgQXZvaWQgZXhjZXB0aW9ucyBvbiBsb2NhbCBzY29wZSBiYXNlZCBzdGVwcyB3aGVyZSBwb3NzaWJsZQorKiBUSU5LRVJQT1AtMjg5OSBTYW1wbGVHbG9iYWxTdGVwIHNhbXBsZXMgaW5lZmZpY2llbnRseSB3aXRoIFRyYXZlcnNlclNldCBydW5uaW5nIGludG8gaGFzaCBjb2xsaXNpb25zCisqIFRJTktFUlBPUC0yOTEyIEltcHJvdmUgZXJyb3IgbWVzc2FnZSBmb3IgYWRkRSgpIHdoZW4gdHJhdmVyc2VyIGlzIGluY29ycmVjdAorKiBUSU5LRVJQT1AtMjkxOSBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIEZpbHRlclJhbmtpbmdTdHJhdGVneSBmb3IgZGVlcGx5IG5lc3RlZCB0cmF2ZXJzYWxzCisqIFRJTktFUlBPUC0yOTM0IE9wdGltaXplIE9iamVjdFdyaXRhYmxlIGZvciBkaXNwbGF5aW5nIGNvbnRlbnQgb2YgSmF2YSBDb2xsZWN0aW9uIG9yIE1hcCB0byByZWR1Y2UgT09NCisKK1tbcmVsZWFzZS0zLTUtNV1dCis9PT0gVGlua2VyUG9wIDMuNS41IChSZWxlYXNlIERhdGU6IEphbnVhcnkgMTYsIDIwMjMpCisKKyogQ2hhbmdlZCB0aGUgYFJlc3VsdGAgc3RydWN0IGluIGdyZW1saW4tZ28gdG8gbWFrZSBpdCBtb3JlIHN1aXRhYmxlIGZvciBtb2NraW5nIGluIHRlc3RzLgorKiBDaGFuZ2VkIGxhYmVsIGdlbmVyYXRpb24gaW4gYFBhdGhQcm9jZXNzb3JTdHJhdGVneWAgdG8gYmUgbW9yZSBkZXRlcm1pbmlzdGljLgorKiBCdW1wZWQgdG8gQXBhY2hlIGBjb21tb25zLWNvbmZpZ3VyYXRpb25gIDIuOC4wIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorKiBGaXhlZCBpc3N1ZSB3aGVyZSB0aGUgYEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVgIHJldXNlZCB0aGUgc2FtZSB0cmFuc2xhdG9yIGNvbmN1cnJlbnRseSB3aGljaCBsZWFkIHRvIGluY29ycmVjdCB0cmFuc2xhdGlvbnMuCisqIEZpeGVkIGJ1ZyB3aGVyZSB0YXNrcyB0aGF0IGhhdmVuJ3Qgc3RhcnRlZCBydW5uaW5nIHlldCB0aW1lIG91dCBkdWUgdG8gYGV2YWx1YXRpb25UaW1lb3V0YCBhbmQgbmV2ZXIgc2VuZCBhIHJlc3BvbnNlIGJhY2sgdG8gdGhlIGNsaWVudC4KKyogU2V0IHRoZSBleGFjdCBleGNlcHRpb24gaW4gYGluaXRpYWxpemF0aW9uRmFpbHVyZWAgb24gdGhlIEphdmEgZHJpdmVyIGluc3RlYWQgb2YgdGhlIHJvb3QgY2F1c2UuCisqIEltcHJvdmVkIGVycm9yIG1lc3NhZ2UgZm9yIHdoZW4gYGZyb20oKWAgYW5kIGB0bygpYCBhcmUgdW5wcm9kdWN0aXZlIGZvciBgYWRkRSgpYC4KKyogQWRkZWQgYFNwYXJrSU9VdGlsYCB1dGlsaXR5IHRvIGxvYWQgZ3JhcGggaW50byBTcGFyayBSREQuCisqIEltcHJvdmVkIHBlcmZvcm1hbmNlIG9mIGBDbG9uZVZlcnRleFByb2dyYW1gIGJ5IGJ5cGFzc2luZyB0aGUgc2h1ZmZsZSBzdGF0ZSBvZiBgU3BhcmtHcmFwaENvbXB1dGVyYC4KKyogQ2hhbmdlZCBgSmF2YVRyYW5zbGF0b3JgIGV4Y2VwdGlvbiBoYW5kbGluZyBzbyB0aGF0IGFuIGBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb25gIGlzIHVzZWQgZm9yIGNhc2VzIHdoZXJlIHRoZSBtZXRob2QgZXhpc3RzIGJ1dCB0aGUgc2lnbmF0dXJlIGNhbid0IGJlIGRpc2Nlcm5lZCBnaXZlbiB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLgorKiBEb2NrZXJpemVkIGFsbCB0ZXN0IGVudmlyb25tZW50IGZvciAuTkVULCBKYXZhU2NyaXB0LCBQeXRob24sIEdvLCBhbmQgUHl0aG9uLWJhc2VkIHRlc3RzIGZvciBDb25zb2xlLCBhbmQgYWRkZWQgRG9ja2VyIGFzIGEgYnVpbGQgcmVxdWlyZW1lbnQuCisqIEFzeW5jIG9wZXJhdGlvbnMgaW4gLk5FVCBjYW4gbm93IGJlIGNhbmNlbGxlZC4gVGhpcyBob3dldmVyIGRvZXMgbm90IGNhbmNlbCB3b3JrIHRoYXQgaXMgYWxyZWFkeSBoYXBwZW5pbmcgb24gdGhlIHNlcnZlci4KKyogQnVtcGVkIHRvIGBzbmFrZXlhbWxgIDEuMzIgdG8gZml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkuCisqIFVwZGF0ZSBkb2NrZXIvYnVpbGQuc2ggdG8gd29yayB3aXRoIGRvY2tlci1jb21wb3NlIGRvY2tlcml6ZWQgdGVzdHMgY2hhbmdlcy4KKyogRml4IHBlcm1pc3Npb24gaXNzdWVzIHdpdGggRG9ja2VyIGdlbmVyYXRlZCBmaWxlcyBieSBzZXR0aW5nIHBlcm1pc3Npb24gdG8gY3VycmVudCB1c2VyLCBzbyBzdWRvIGlzbid0IG5lZWRlZCBmb3IgbWF2ZW4gb3BlcmF0aW9ucy4KKyogVXBkYXRlZCBiYXNlIGltYWdlcyBmb3IgZ3JlbWxpbi1zZXJ2ZXIgYW5kIGdyZW1saW4tY29uc29sZSBkb2NrZXIgaW1hZ2VzIHRvIHN1cHBvcnQgYXJtNjQuCisqIFVzZSBHbyBlbWJlZCBmb3IgZXJyb3IvbG9nZ2VyIHJlc291cmNlcyBmb3IgYGdyZW1saW4tZ29gIHRvIGF2b2lkIG1pc3NpbmcgcmVzb3VyY2UgZmlsZXMgd2hlbiB1c2luZyBiaW5hcmllcy4KKyogQWRkZWQgdXNlciBhZ2VudCB0byB3ZWIgc29ja2V0IGhhbmRzaGFrZSBpbiBqYXZhIGRyaXZlci4gQ2FuIGJlIGNvbnRyb2xsZWQgYnkgYSBuZXcgZW5hYmxlVXNlckFnZW50T25Db25uZWN0IGNvbmZpZ3VyYXRpb24uIEl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKyogQWRkZWQgdXNlciBhZ2VudCB0byB3ZWIgc29ja2V0IGhhbmRzaGFrZSBpbiBHcmVtbGluLk5ldCBkcml2ZXIuIENhbiBiZSBjb250cm9sbGVkIGJ5IGBFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3RgIGluIGBDb25uZWN0aW9uUG9vbFNldHRpbmdzYC4gSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorKiBBZGRlZCB1c2VyIGFnZW50IHRvIHdlYiBzb2NrZXQgaGFuZHNoYWtlIGluIGdvIGRyaXZlci4gQ2FuIGJlIGNvbnRyb2xsZWQgYnkgYSBuZXcgYEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdGAgc2V0dGluZy4gSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorKiBBZGRlZCB1c2VyIGFnZW50IHRvIHdlYiBzb2NrZXQgaGFuZHNoYWtlIGluIHB5dGhvbiBkcml2ZXIuIENhbiBiZSBjb250cm9sbGVkIGJ5IGEgbmV3IGBlbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0YCBzZXR0aW5nLiBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisqIEFkZGVkIHVzZXIgYWdlbnQgdG8gd2ViIHNvY2tldCBoYW5kc2hha2UgaW4gamF2YXNjcmlwdCBkcml2ZXIuIENhbiBiZSBjb250cm9sbGVkIGJ5IGEgbmV3IGBlbmFibGVVc2VyQWdlbnRPbkNvbm5lY3RgIG9wdGlvbi4gSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgorKiBBZGRlZCBsb2dnaW5nIGluIC5ORVQuCisqIEFkZGVkIGBhZGREZWZhdWx0WE1vZHVsZWAgdG8gYEdyYXBoU09OTWFwcGVyYCBhcyBhIHNob3J0Y3V0IGZvciBpbmNsdWRpbmcgYSB2ZXJzaW9uIG1hdGNoZWQgR3JhcGhTT04gZXh0ZW5zaW9uIG1vZHVsZS4KKyogTW9kaWZpZWQgYEdyYXBoU09OUmVjb3JkUmVhZGVyYCBhbmQgYEdyYXBoU09OUmVjb3JkV3JpdGVyYCB0byBpbmNsdWRlIHRoZSBHcmFwaFNPTiBleHRlbnNpb24gbW9kdWxlIGJ5IGRlZmF1bHQuCisqIEJ1bXBlZCBgamFja3Nvbi1kYXRhYmluZGAgdG8gMi4xNC4wIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LgorKiBCdW1wZWQgdG8gR3Jvb3Z5IDIuNS4xNS4KKyogQnVtcGVkIHRvIE5ldHR5IDQuMS44Ni4KKyogQnVtcGVkIGBpdnlgIHRvIDIuNS4xIHRvIGZpeCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5CisqIFJlbW92ZWQgZGVmYXVsdCBTU0wgaGFuZHNoYWtlIHRpbWVvdXQuIFRoZSBTU0wgaGFuZHNoYWtlIHRpbWVvdXQgd2lsbCBpbnN0ZWFkIGJlIGNhcHBlZCBieSBzZXR0aW5nIGBjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzYC4KKyogSW1wcm92ZWQgbG9nZ2luZyBmb3IgYGdyZW1saW4tZHJpdmVyYC4KKyogTW9kaWZpZWQgYENvbm5lY3Rpb25gIGFuZCBgSG9zdGAgam9iIHNjaGVkdWxpbmcgaW4gYGdyZW1saW4tZHJpdmVyYCBieSBkaXZpZGluZyB0aGVpciB3b3JrIHRvIHR3byBkaWZmZXJlbnQgdGhyZWFkIHBvb2xzIGFuZCBzcGFyaW5nIHdvcmsgZnJvbSB0aGUgcHJpbWFyeSBwb29sIHJlc3BvbnNpYmxlIGZvciBzdWJtaXR0aW5nIHJlcXVlc3RzIGFuZCByZWFkaW5nIHJlc3VsdHMuCisqIFByZXZlbnRlZCB1c2FnZSBvZiB0aGUgZm9yay1qb2luIHBvb2wgZm9yIGBncmVtbGluLWRyaXZlcmAgam9iIHNjaGVkdWxpbmcuCisqIE1vZGlmaWVkIGBHcmVtbGluU2NyaXB0Q2hlY2tlcmAgdG8gZXh0cmFjdCB0aGUgYFRva2Vucy5SRVFVRVNUX0lEYCBmcm9tIEdyZW1saW4gc2NyaXB0cy4KKyogQ2hhbmdlZCBgSG9zdGAgaW5pdGlhbGl6YXRpb24gd2l0aGluIGEgYENsaWVudGAgdG8gYmUgcGFyYWxsZWwgYWdhaW4gaW4gYGdyZW1saW4tZHJpdmVyYC4KKyogQ2hhbmdlZCBtZWNoYW5pc20gZm9yIGRldGVybWluaW5nIGBIb3N0YCBoZWFsdGggd2hpY2ggc2hvdWxkIG1ha2UgdGhlIGRyaXZlciBtb3JlIHJlc2lsaWVudCB0byBpbnRlcm1pdHRlbnQgbmV0d29yayBmYWlsdXJlcy4KKyogUmVtb3ZlZCB0aGUgZGVsYXkgZm9yIHJlY29ubmVjdGluZyB0byBhIHBvdGVudGlhbGx5IHVuaGVhbHRoeSBgSG9zdGAgb25seSBtYXJraW5nIGl0IGFzIHVuYXZhaWxhYmxlIGFmdGVyIHRoYXQgaW5pdGlhbCByZXRyeSBmYWlscy4KKyogUHJldmVudGVkIGZhc3QgYE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbmAgaW4gZmF2b3Igb2YgbW9yZSBkaXJlY3QgZXhjZXB0aW9ucyB3aGVuIGJvcnJvd2luZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBgQ29ubmVjdGlvblBvb2xgLgorKiBJbXByb3ZlZCBHaGVya2luIHRlc3RzIGZvciBtb3JlIGNvbnNpc3RlbnQgcmVzdWx0cy4KKyogUHJvdmlkZXMgdXNlcnMgd2l0aCBwb3RlbnRpYWxseSBtb3JlIGluZm9ybWF0aW9uIHRvIGRyaXZlciBUaW1lb3V0RXhjZXB0aW9ucy4KKyogRml4ZWQgYW4gaXNzdWUgaW4gR28gYW5kIFB5dGhvbiBHTFZzIHdoZXJlIG1vZGlmeWluZyBwZXIgcmVxdWVzdCBzZXR0aW5ncyB0byBvdmVycmlkZSByZXF1ZXN0X2lkJ3Mgd2FzIG5vdCB3b3JraW5nIGNvcnJlY3RseS4KKyogRml4ZWQgaW5jb3JyZWN0IGltcGxlbWVudGF0aW9uIGZvciBgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuV2l0aGAgaW4gYGdyZW1saW4tZ29gLgorKiBDaGFuZ2VkIGBHcmVtbGluLnZlcnNpb24oKWAgdG8gcmV0dXJuICJWZXJzaW9uTm90Rm91bmQiIGlmIHRoZSB2ZXJzaW9uIGlzIG1pc3NpbmcgZnJvbSB0aGUgbWFuaWZlc3QuCisqIEZpeGVkIGxvY2FsIHN0ZXBzIHRvIGF2b2lkIHRocm93aW5nIGFuIGV4Y2VwdGlvbiBmb3Igbm9uLWl0ZXJhYmxlIGlucHV0LgorKiBGaXhlZCBhIGNhc2Ugc2Vuc2l0aXZpdHkgaXNzdWUgd2hlbiBjb21wYXJpbmcgcmVxdWVzdCBVVUlEcyBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI3NjUgUmFjZSBjb25kaXRpb24gZHVyaW5nIHNjcmlwdCBjcmVhdGlvbiB3aGVuIHVzaW5nIFVuaWZpZWRDaGFubmVsaXplcgorKiBUSU5LRVJQT1AtMjc2OSBncmVtbGluLXNlcnZlciBkb2VzIG5vdCByZXBseSB3aXRoIGEgdGltZW91dCByZXNwb25zZSB0byBhbGwgdGltZWQgb3V0IHJlcXVlc3RzCisqIFRJTktFUlBPUC0yNzcxIENyaXRpY2FsIHNldmVyaXR5IHNlY3VyaXR5IHZ1bG5lcmFiaWx0eSBpbiBjb21tb25zLWNvbmZpZ3VyYXRpb24gMi43CisqIFRJTktFUlBPUC0yNzk2IEhpZ2ggc2V2ZXJpdHkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBmb3VuZCBpbiBzbmFrZXlhbWwKKyogVElOS0VSUE9QLTI4MDMgSW5jb3JyZWN0IGNvdW50KCkgd2l0aCBzYW1wbGUoKSBpbiBUaW5rZXJHcmFwaAorKiBUSU5LRVJQT1AtMjgwOSBIaWdoIHNldmVyaXR5IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgZm91bmQgaW4gamFja3NvbiBkYXRhYmluZAorKiBUSU5LRVJQT1AtMjgxNSBDcml0aWNhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGZvciBhcGFjaGUgY29tbW9ucy10ZXh0CisqIFRJTktFUlBPUC0yODE2IEdoZXJraW4gdGVzdCBpc3N1ZXMgZm9yIGltcGxlbWVudGVycworKiBUSU5LRVJQT1AtMjgxNyBTdXBwb3J0IGphdmEubGFuZy5CeXRlIGluIGhhZG9vcCBHcmFwaFNPTlJlY29yZFdyaXRlci9HcmFwaFNPTlJlY29yZFJlYWRlcgorKiBUSU5LRVJQT1AtMjgyNiBDcml0aWNhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGluIGl2eQorKiBUSU5LRVJQT1AtMjgzNiBHaXRodWIgYWN0aW9ucyBkbyBub3QgcnVuIGphdmEgZHJpdmVyIGludGVncmF0aW9uIHRlc3RzCisqIFRJTktFUlBPUC0yODQwIFRlc3QgRmFpbHVyZXMgb24gTm9uRGV4CisqIFRJTktFUlBPUC0yODQzIFNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBmb3VuZCBpbiBuZXR0eSB2ZXJzaW9uIDQuMS43NworKiBUSU5LRVJQT1AtMjg0OSBJbmNvcnJlY3QgaW1wbGVtZW50YXRpb24gZm9yIEdyYXBoVHJhdmVyc2FsU291cmNlLldpdGggaW4gZ3JlbWxpbi1nbworCis9PT09IEltcHJvdmVtZW50cworCisqIFRJTktFUlBPUC0yNDcxIEFkZCBsb2dnaW5nIHRvIEdyZW1saW4uTmV0IGRyaXZlcgorKiBUSU5LRVJQT1AtMjQ4MCBVc2VyIGFnZW50IGZvciBHcmVtbGluIGRyaXZlcnMKKyogVElOS0VSUE9QLTI3MzcgRG9ja2VyaXplZCBCdWlsZCBhbmQgVGVzdCBFbnZpcm9ubWVudHMKKyogVElOS0VSUE9QLTI3NzIgQWRkIFNwYXJrIHV0aWxpdHkgdG8gbG9hZCB2ZXJ0aWNlcyBhcyBSREQKKyogVElOS0VSUE9QLTI3NzkgRmxvYXRpbmcgQ29ubmVjdGVkQ29tcG9uZW50IEZlYXR1cmUgRmFpbHVyZXMgZm9yIEdpdEh1YiBBY3Rpb25zIG9uIHdpbmRvd3MKKyogVElOS0VSUE9QLTI3ODUgSW5hYmlsaXR5IHRvIE1vY2sgUmV0dXJuZWQgUmVzdWx0IFR5cGVzIGluIEdyZW1saW4tR28gRHJpdmVyCisqIFRJTktFUlBPUC0yNzkyIEJldHRlciBleGNlcHRpb24gd2hlbiBKYXZhVHJhbnNsYXRvciBmaW5kcyBhIG1ldGhvZCBidXQgbm90IHRoZSBvdmVybG9hZAorKiBUSU5LRVJQT1AtMjc5NCBBbGxvdyBjYW5jZWxsYXRpb24gb2YgR3JlbWxpbi5OZXQgYXN5bmMgbWV0aG9kcworKiBUSU5LRVJQT1AtMjgwOCBJbXByb3ZlIENvbXBhdGliaWxpdHkgb24gQVJNIG1hY2hpbmVzCisqIFRJTktFUlBPUC0yODEzIEltcHJvdmUgZHJpdmVyIHVzYWJpbGl0eSBmb3IgY2FzZXMgd2hlcmUgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uIGlzIGN1cnJlbnRseSB0aHJvd24KKyogVElOS0VSUE9QLTI4MTQgQWRkIGEgU1NMIGhhbmRzaGFrZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRyaXZlcgorKiBUSU5LRVJQT1AtMjgzMyBUZXN0U3VwcG9ydCBsb2FkcyBmaWxlcyB0b28gc2xvdworKiBUSU5LRVJQT1AtMjgzNCBDbG9uZVZlcnRleFByb2dyYW0gb3B0aW1pemF0aW9uIG9uIFNwYXJrR3JhcGhDb21wdXRlcgorKiBUSU5LRVJQT1AtMjg0MiBFeHBhbmQgR3JlbWxpblNjcmlwdENoZWNrZXIgdG8gaW5jbHVkZSByZXF1ZXN0IGlkIG92ZXJyaWRlcworCitbW3JlbGVhc2UtMy01LTRdXQorPT09IFRpbmtlclBvcCAzLjUuNCAoUmVsZWFzZSBEYXRlOiBKdWx5IDE4LCAyMDIyKQorCisqIEFkZGVkIGV4Y2VwdGlvbiB0byBHcmVtbGluIFNlcnZlciB0aGF0IGlzIHRocm93biB3aGVuIHVzaW5nIGEgdHJhbnNhY3Rpb24gb24gYSBub24tdHJhbnNhY3Rpb24gZ3JhcGguCisqIEV4cG9zZWQgZXJyb3IgbWVzc2FnZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgYXMgYSBwcm9wZXJ0eSBvbiBgR3JlbWxpblNlcnZlckVycm9yYCBmb3IgZ3JlbWxpbi1weXRob24KKyogQWxsb3dlZCBgZGF0ZXRpbWUoKWAgc3ludGF4IHRvIGFjY2VwdCB6b25lIG9mZnNldCB3aXRoIGNvbG9uIHNlcGFyYXRvcnMgYW5kIHNlY29uZHMuCisqIEZpeGVkIGEgbWlub3IgcHJvYmxlbSBpbiB0aGUgR3JlbWxpbiBwYXJzZXIgd2hlcmUgYSBgR3JhcGhUcmF2ZXJzYWxTb3VyY2VgIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgorKiBBZGRlZCBnZXR0ZXJzIHRvIGhpZ2ggYW5kIGxvdyBwcm9wZXJ0aWVzIGluIGBSYW5nZUxvY2FsU3RlcGAuCisqIEFkZGVkIGBQaWNrYCB0cmF2ZXJzYWwgdG8gdGhlIHJldHVybiBmcm9tIGBnZXRHbG9iYWxDaGlsZHJlbigpYCBmb3IgYEJyYW5jaFN0ZXBgLgorKiBFbnN1cmVkIGBQaWNrYCB0cmF2ZXJzYWwgd2FzIGFuIGludGVncmF0ZWQgY2hpbGQuCisqIEFkZGVkIEdyYXBoQmluYXJ5IHNlcmlhbGl6YXRpb24gc3VwcG9ydCB0byBncmVtbGluLWphdmFzY3JpcHQuCisqIEltcHJvdmVkIHN0YXJ0dXAgdGltZSBieSByZW1vdmluZyB1bm5lY2Vzc2FyeSBETlMgbG9va3VwLgorKiBCdW1wZWQgdG8gbG9nYmFjayAxLjIuOS4KKyogQnVtcGVkIHRvIG5ldHR5IDQuMS43Ny4KKyogRml4ZWQgYnVnIGluIGBzdWJtaXRBc3luYygpYCBpbiBncmVtbGluLXB5dGhvbiB3aGVyZSB0aGUgZGVwcmVjYXRlZCB2ZXJzaW9uIHdhcyBub3QgcmV0dXJuaW5nIGl0cyByZXN1bHQuCisqIEFkZGVkIG1pc3NpbmcgYFJlc3BvbnNlU3RhdHVzQ29kZUVudW1gIGVudHJpZXMgZm9yIDQwMywgNDI5LCA0OTcsIGFuZCA1OTYgZm9yIC5ORVQuCisqIEFkZGVkIEdyYXBoQmluYXJ5IHN1cHBvcnQgaW4gZ3JlbWxpbi1weXRob24gZm9yIHNob3J0LCBiaWdkZWNpbWFsIGFuZCBiaWdpbnRlZ2VyLgorKiBGaXhlZCBidWcgaW4gYFBhcnRpdGlvblN0cmF0ZWd5YCB3aGVyZSB0aGUgdXNlIG9mIGBBYnN0cmFjdExhbWJkYVRyYXZlcnNhbGAgY2F1c2VkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgorKiBGaXhlZCBidWcgd2hlcmUgY2xvc2UgcmVxdWVzdHMgZm9yIHNlc3Npb25zIHdlcmUgaW1wcm9wZXJseSB2YWxpZGF0aW5nIHRoZSByZXF1ZXN0IGluIHRoZSBgVW5pZmllZENoYW5uZWxpemVyYC4KKyogRGVwcmVjYXRlZCBhbmQgcmVtb3ZlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBgY29ubmVjdE9uU3RhcnR1cGAgb3B0aW9uIGluIGBncmVtbGluLWphdmFzY3JpcHRgIHRvIHJlc29sdmUgcG90ZW50aWFsIGB1bmhhbmRsZWRSZWplY3Rpb25gIGFuZCByYWNlIGNvbmRpdGlvbnMuCisqIEVuc3VyZWQgYEdyYXBoYCBpbnN0YW5jZSB3YXMgc2V0IGJldHdlZW4gYFRyYXZlcnNhbFN0cmF0ZWd5YCBleGVjdXRpb25zLgorKiBGaXhlZCBwb3RlbnRpYWwgYE51bGxQb2ludGVyRXhjZXB0aW9uYCBpbiBgZ3JlbWxpbi1kcml2ZXJgIHdoZXJlIGluaXRpYWxpemF0aW9uIG9mIGEgYENvbm5lY3Rpb25Qb29sYCB3b3VsZCBmYWlsIGJ1dCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIGR1ZSB0byBjZW50cmFsaXplZCBlcnJvciBjaGVjayBiZWluZyBzYXRpc2ZpZWQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcy4KKyogRml4ZWQgYSBidWcgd2hlcmUgdGhlIEphdmFTY3JpcHQgY2xpZW50IHdvdWxkIGhhbmcgaW5kZWZpbml0ZWx5IG9uIHRyYXZlcnNhbHMgaWYgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciB3YXMgdGVybWluYXRlZC4KKyogRml4IGEgamF2YWRvYyBjb21tZW50IGluIENsdXN0ZXIuQnVpbGRlciByZWdhcmRpbmcgbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbi4KKyogQWRkZWQgYSBnZXR0ZXIgZm9yIHNlbGVjdEtleXMgaW4gU2VsZWN0U3RlcAorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjczNCBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgQ2xpZW50IGNob29zZUNvbm5lY3Rpb24oKQorKiBUSU5LRVJQT1AtMjczNSBJbGxlZ2FsU3RhdGVFeGNlcHRpb246IFVucmVjb2duaXplZCBjb250ZW50IG9mIHRoZSAnZ3JlbWxpbicgYXJndW1lbnQuLi4gb24gY29ubmVjdGlvbiBjbG9zZQorKiBUSU5LRVJQT1AtMjczNiBQbHVnaW5BY2NlcHRyb3IgaW50ZXJmYWNlIG5vIG1vcmUgYXZhaWxhYmxlIGluIDMuNS4zKyBidXQgcmVmZXJyZWQgaW4gZG9jdW1lbnRhdGlvbgorKiBUSU5LRVJQT1AtMjc0MSBHcmFwaE1MV3JpdGVyIGVycm9yIG1lc3NhZ2UgaXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZAorKiBUSU5LRVJQT1AtMjc1MSBUcmFuc2FjdGlvbjogdHguY29tbWl0KCkgaGFuZ3MgdXAgaW4gamF2YXNjcmlwdCBjbGllbnQtbGliCisqIFRJTktFUlBPUC0yNzU0IEphdmFzY3JpcHQgY2xpZW50IGhhbmdzIGlmIHRoZSBzZXJ2ZXIgcmVzdGFydHMKKyogVElOS0VSUE9QLTI3NjMgY2xpZW50LnN1Ym1pdEFzeW5jIHJldHVybnMgTm9uZSB2YWx1ZQorKiBUSU5LRVJQT1AtMjc2OCBCcmFuY2hTdGVwIHBpY2tUb2tlbiBzaG91bGQgYmUgaW50ZWdyYXRlZCB3aGVuIGFkZGVkIGFzIGEgY2hpbGQgb3B0aW9uCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTIyMjkgSmF2YVNjcmlwdCBHTFY6IEFkZCBHcmFwaEJpbmFyeSBTdXBwb3J0CisqIFRJTktFUlBPUC0yNjMxIEdyYXBoU09OIGZsb2F0IHNlcmlhbGl6YXRpb24gd2hlbiB1anNvbiBpcyB1c2VkIGlzIGltcHJlY2lzZQorKiBUSU5LRVJQT1AtMjY5MyBDb21wbGV0ZSBHcmFwaEJpbmFyeSBzdXBwb3J0IGluIFB5dGhvbgorKiBUSU5LRVJQT1AtMjc0MCBmaXJzdCByZXF1ZXN0IHN1c3BlbmQgbW9yZSB0aGFuIDlzIHdoZW4gdXNpbmcgZ3JlbWxpbi1qYXZhLWRyaXZlcgorKiBUSU5LRVJQT1AtMjc0OCBNZWRpdW0gc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBvbiBuZXR0eS1hbGwgYW5kIG5ldHR5LWNvZGVjCisqIFRJTktFUlBPUC0yNzYyIGdldFNjb3BlS2V5cyBzaG91bGQgcmVzcGVjdCB0aGUgb3JkZXIgb2Yga2V5cyBwYXNzZWQgaW4gU3RlcAorKiBUSU5LRVJQT1AtMjc2NCBBV1MgTmVwdHVuZSByZXR1cm5zIGFuIGluYWNjZXNzaWJsZSBzdHJ1Y3R1cmVkIGVycm9yIHJlc3BvbnNlCisKK1tbcmVsZWFzZS0zLTUtM11dCis9PT0gVGlua2VyUG9wIDMuNS4zIChSZWxlYXNlIERhdGU6IEFwcmlsIDQsIDIwMjIpCisKKyogQWRkZWQgc3VwcG9ydCBmb3IgdXNpbmcgYSByZWFkYWJsZSBzdHJlYW0gd2hlbiBzdWJtaXR0aW5nIHNjcmlwdHMgdGhyb3VnaCB0aGUgSmF2YVNjcmlwdCBkcml2ZXIgd2hpY2ggYWxsb3dzIHByb2Nlc3NpbmcgZWFjaCBiYXRjaCBvZiByZXN1bHQgc2V0cyBhcyB0aGV5IGNvbWUgaW4sIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHRoZSBlbnRpcmUgcmVzdWx0IHNldCB0byBjb21wbGV0ZSBiZWZvcmUgYWxsb3dpbmcgcHJvY2Vzc2luZy4KKyogRml4ZWQgaXNzdWUgd2l0aCBpbXBsaWNpdCBjb252ZXJzaW9uIG9mIGBJbmZpbml0eWAgbnVtYmVyIGluc3RhbmNlcyBpbnRvIGBCaWdEZWNpbWFsYC4KKyogRW5zdXJlZCB0aGF0IG5ldyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCBiZWZvcmUgdHJpZ2dlcmluZyB0aGUgYXNzb2NpYXRlZCBldmVudC4KKyogQWRkZWQgc3VwcG9ydCBmb3IgV2ViU29ja2V0IGNvbXByZXNzaW9uIGluIHRoZSAuTkVUIGRyaXZlci4gKE9ubHkgYXZhaWxhYmxlIG9uIC5ORVQgNi4pCisqIEFkZGVkIEdyb292eSBgVHJhbnNsYXRvcmAgZm9yIC5ORVQuCisqIEJ1bXBlZCB0byBgamFja3Nvbi1kYXRhYmluZGAgMi4xMy4yLjIuCisqIEZpeGVkIGJ1ZyBpbiBgRGVmYXVsdFRyYXZlcnNhbC5jbG9uZSgpYCB3aGVyZSB0aGUgcmVzdWx0aW5nIGBUcmF2ZXJzYWxgIGNvcHkgY291bGQgbm90IGJlIHJlLWl0ZXJhdGVkLgorKiBGaXhlZCBidWcgaW4gYEphdmFUcmFuc2xhdG9yYCB0aGF0IGRpZCBub3QgaGFuZGxlIGBoYXMoKWAgd2VsbCB3aGVyZSBgbnVsbGAgd2FzIHRoZSBmaXJzdCBhcmd1bWVudC4KKyogUmVuYW1lZCBgR3JlbWxpbkJhc2VWaXNpdG9yYCB0byBgRGVmYXVsdEdyZW1saW5CYXNlVmlzaXRvcmAgaW4gYGdyZW1saW4tY29yZWAgdG8gcHJldmVudCBjb25mbGljdCB3aXRoIHRoZSBnZW5lcmF0ZWQgYEdyZW1saW5CYXNlVmlzaXRvcmAgaW4gYGdyZW1saW4tbGFuZ3VhZ2VgLgorKiBUcmFja2VkIHRyYW5zYWN0aW9uIHNwYXduZWQgY29ubmVjdGlvbnMgYW5kIGNsb3NlZCB0aGVtIHdoZW4gdGhlIHBhcmVudCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgZm9yIGBncmVtbGluLXB5dGhvbmAuCisqIFByZXZlbnRlZCB1bmludGVudGlvbmFsbHkgb3BlbmluZyBhbm90aGVyIHRyYW5zYWN0aW9uIGluIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmBgIGFuZCBgU2Vzc2lvbk9wUHJvY2Vzc29yYCBvZiBHcmVtbGluIFNlcnZlci4KKyogRml4ZWQgYnVnIGluIGBUcmFuc2xhdG9yYCBvZiBgZ3JlbWxpbi1weXRob25gIGFyb3VuZCB0cmFuc2xhdGlvbiBvZiBCb29sZWFucy4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI2OTQgQnVnIG9mIFRpbmtlckdyYXBoIGdyZW1saW4gYXBpICJoYXMoKSIKKyogVElOS0VSUE9QLTI3MDYgVHJhdmVyc2FsIGNsb25lKCkgbm90IHJlc2V0dGluZyB0aGUgY2xvc2Ugc3RhdGUKKyogVElOS0VSUE9QLTI3MTIgUHJvcGVydHlDaGFuZ2VkRXZlbnQgaXMgdHJpZ2dlcmVkIGJlZm9yZSBQcm9wZXJ0eSBpcyBhY3R1YWxseSBjaGFuZ2VkCisqIFRJTktFUlBPUC0yNzE3IEdyZW1saW4uTkVUIDogV2ViU29ja2V0Q29ubmVjdGlvbiBkb2VzIG5vdCBjaGVjayBmb3IgTWVzc2FnZVR5cGUuQ2xvc2UsIGNhdXNpbmcgZXJyb3IgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbjogIlJlY2VpdmVkIGRhdGEgZGVzZXJpYWxpemVkIGludG8gbnVsbCBvYmplY3QgbWVzc2FnZS4gQ2Fubm90IG9wZXJhdGUgb24gaXQuIgorKiBUSU5LRVJQT1AtMjcxOSBoYXNOZXh0IGlzIGNhbGxlZCBvbiBUcmF2ZXJzZXJJdGVyYXRvciBhZnRlciB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQKKyogVElOS0VSUE9QLTI3MjYgUHl0aG9uJ3MgR3Jvb3Z5VHJhbnNsYXRvciB0cmFuc2xhdGVzIGJvb2xlYW4gd3JvbmcKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjM2NyBHcmVtbGluIFRyYW5zbGF0b3JzIGZvciAuTkVUCisqIFRJTktFUlBPUC0yNTE4IEVuaGFuY2UgLk5FVCBnaGVya2luIGZyYW1ld29yayB0byBkZWFsIHdpdGggbW9yZSBhZHZhbmNlZCBhc3NlcnRpb25zCisqIFRJTktFUlBPUC0yNjUxIFVwZGF0ZSB0byAuTkVUIDYKKyogVElOS0VSUE9QLTI2NzkgVXBkYXRlIEphdmFTY3JpcHQgZHJpdmVyIHRvIHN1cHBvcnQgcHJvY2Vzc2luZyBtZXNzYWdlcyBhcyBhIHN0cmVhbQorKiBUSU5LRVJQT1AtMjY4MiBFbmFibGUgV2ViU29ja2V0IGNvbXByZXNzaW9uIGluIC5ORVQgYnkgZGVmYXVsdAorKiBUSU5LRVJQT1AtMjcwNyBDbG9zaW5nIHBhcmVudCBjb25uZWN0aW9uIGluIHB5dGhvbiBzaG91bGQgY2xvc2UgdHgoKSBjb25uZWN0aW9ucworKiBUSU5LRVJQT1AtMjcxMSBNYWtlIGdyZW1saW4tbGFuZ3VhZ2Ugb3B0aW9uYWwgYXMgaXQgYnJpbmdzIGluIENEREwvR1BMIGRlcGVuZGVuY2llcworKiBUSU5LRVJQT1AtMjcxNiBFbmFibGUgZXNsaW50IGZvciBncmVtbGluLWphdmFzY3JpcHQgcHJvamVjdAorKiBUSU5LRVJQT1AtMjcyNSBUcmF2ZXJzYWwgU3RyYXRlZ3kgTWl4IFVwIEluIEdyZW1saW4tUHl0aG9uCisqIFRJTktFUlBPUC0yNzI3IEhhc0NvbnRhaW5lciBzaG91bGQgYWxsb3cgYSBudWxsIGtleQorKiBUSU5LRVJQT1AtMjcyOCBqYWNrc29uLWRhdGFiaW5kIGhpZ2ggc2VjdXJpdHkgaXNzdWUgaWRlbnRpZmllZAorCitbW3JlbGVhc2UtMy01LTJdXQorPT09IFRpbmtlclBvcCAzLjUuMiAoUmVsZWFzZSBEYXRlOiBKYW51YXJ5IDEwLCAyMDIyKQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjQueC5hc2NpaWRvYyNyZWxlYXNlLTMtNC0xMywgMy40LjEzPj4uCisKKyogQWRkZWQgYW4gYEFub255bWl6aW5nVHlwZVRyYW5zbGF0b3JgIGZvciB1c2Ugd2l0aCBgR3Jvb3Z5VHJhbnNsYXRvcmAgd2hpY2ggc3RyaXBzIFBJSSAoYW5vbnltaXplcyBhbnkgU3RyaW5nLCBOdW1lcmljLCBEYXRlLCBUaW1lc3RhbXAsIG9yIFVVSUQgZGF0YSkKKyogQWRkZWQgc3VwcG9ydCBmb3IgYGcudHgoKWAgaW4gUHl0aG9uLgorKiBBZGRlZCBsb2dnaW5nIGluIGluIFB5dGhvbi4KKyogQWRkZWQgYHR4KClgIHN5bnRheCB0byBgZ3JlbWxpbi1sYW5ndWFnZWAuCisqIEZpeGVkIHNodXRkb3duIGNsZWFudXAgaXNzdWUgaW4gUHl0aG9uIGFpb2h0dHAgdHJhbnNwb3J0IGxheWVyLgorKiBBZGRlZCBhIGBOb1N1Z2FyVHJhbnNsYXRvcmAgdHJhbnNsYXRvciB0byBgUHl0aG9uVHJhbnNsYXRvcmAgd2hpY2ggdHJhbnNsYXRlcyBHcmVtbGluIHF1ZXJpZXMgdG8gUHl0aG9uIHdpdGhvdXQgc3ludGFjdGljIHN1Z2FyIChleCBgZy5WKCkubGltaXQoMSlgIGluc3RlYWQgb2YgYGcuVigpWzA6MV1gKQorKiBBZGRlZCBzdXBwb3J0IGZvciBgZy5UeCgpYCBpbiAuTkVULgorKiBBZGRlZCBzdXBwb3J0IGZvciBgd2l0aCgpYCBjb25zdGFudCBvcHRpb25zIHRvIGBpbygpYC4KKyogQ2hhbmdlZCBgR3Jvb3Z5VHJhbnNsYXRvcmAgdG8gZ2VuZXJhdGUgY29kZSBtb3JlIGNvbXBhdGlibGUgdG8gSmF2YSB3aXRoIGBEYXRlYCBhbmQgYFRpbWVzdGFtcGAuCisqIEZpeGVkIGJ1ZyBpbiB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgYGlvKClgIHN0ZXAgd2hlbiBjb25zdHJ1Y3RpbmcgYSBgVHJhdmVyc2FsYCBmcm9tIHRoZSBncmFtbWFyLgorKiBBZGRlZCB0aGUgYENvbm5lY3RlZENvbXBvbmVudGAgdG9rZW5zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHByb2Nlc3MgdGhlIGB3aXRoKClgIG9mIHRoZSBgY29ubmVjdGVkQ29tcG9uZW50KClgIHN0ZXAuCisqIEZpeGVkIGBEb3ROZXRUcmFuc2xhdG9yYCBidWdzIHdoZXJlIHRyYW5zbGF0aW9ucyBwcm9kdWNlZCBHcmVtbGluIHRoYXQgZmFpbGVkIGR1ZSB0byBhbWJpZ3VvdXMgc3RlcCBjYWxscyB0byBgaGFzKClgLgorKiBGaXhlZCBidWcgd2hlcmUgYFJlcGVhdFVucm9sbFN0cmF0ZWd5YCwgYElubGluZUZpbHRlclN0cmF0ZWd5YCBhbmQgYE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3lgIHdlcmUgYWxsIGJlaW5nIGFwcGxpZWQgbW9yZSB0aGFuIG5lY2Vzc2FyeS4KKyogTW9kaWZpZWQgZ3JhbW1hciB0byBhY2NlcHQgdGhlIGBkYXRldGltZSgpYCBmdW5jdGlvbiBzbyB0aGF0IEdyZW1saW4gc2NyaXB0cyBoYXZlIGEgd2F5IHRvIG5hdGl2ZWx5IGNvbnN0cnVjdCBhIGBEYXRlYC4KKyogRW5zdXJlZCBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAgaXMgYXBwbGllZCBhZnRlciBgSW5saW5lRmlsdGVyU3RyYXRlZ3lgIHdoaWNoIHByZXZlbnRzIGFuIGVycm9yIGluIHRyYXZlcnNlciBtYXBwaW5nIGluIGNlcnRhaW4gY29uZGl0aW9ucy4KKyogRGVwcmVjYXRlZCBgSnNvbkJ1aWxkZXJgIHNlcmlhbGl6YXRpb24gZm9yIEdyYXBoU09OIGFuZCBHcnlvLgorKiBBZGRlZCBgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lgIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBvZiBgYnkoKWAgbW9kdWxhdG9yIGJlaGF2aW9ycyB3aGVuIGNoaWxkIHRyYXZlcnNhbCBhcmd1bWVudHMgY29udGFpbmVkIG5vIGVsZW1lbnRzLgorKiBDaGFuZ2VkIGRyaXZlcnMgdG8gb25jZSBhZ2FpbiBzZW5kIHRoZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQgImNsb3NlIiBtZXNzYWdlIGZvciBzZXNzaW9ucy4KKyogTW9kaWZpZWQgYGZvbGQoKWAgdG8gbWVyZ2UgYE1hcGAgaW5zdGFuY2VzIHdpdGggYGFkZEFsbGAuCisqIEFsbG93ZWQgYG51bGxgIHN0cmluZyB2YWx1ZXMgaW4gdGhlIEdyZW1saW4gZ3JhbW1hci4KKyogRml4ZWQgc3VwcG9ydCBmb3IgYFNlZWRTdHJhdGVneWAgaW4gdGhlIEdyZW1saW4gR3JhbW1hci4KKyogRml4ZWQgYnVnIGluIGBUcmFuc2xhdG9yYCBvZiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCBhcm91bmQgYXJyYXkgdHJhbnNsYXRpb24uCisqIEZpeGVkIGJ1Z3MgaW4gYFB5dGhvblRyYW5zbGF0b3JgLCBgSmF2YXNjcmlwdFRyYW5zbGF0b3JgIGFuZCBgRG90TmV0VHJhbnNsYXRvcmAgd2hlbiB0cmFuc2xhdGluZyBgVHJhdmVyc2FsU3RyYXRlZ3lgIG9iamVjdHMgdG8gSmF2YXNjcmlwdC4KKyogUHJldmVudGVkIGV4Y2VwdGlvbiB3aXRoIGBoYXNMYWJlbChudWxsKWAgYW5kIGBoYXNLZXkobnVsbClgIGFuZCBpbnN0ZWFkIGZpbHRlciBhd2F5IHRyYXZlcnNlcnMgYXMgdGhlc2Ugc3RydWN0dXJhbCBjb21wb25lbnRzIGNhbid0IGV2ZXIgYmUgbnVsbC4KKyogSW1wcm92ZWQgaGFuZGxpbmcgb2YgYG51bGxgIHdoZW4gcGFzc2VkIHRvIGBQYCBwcmVkaWNhdGVzLgorKiBIYW5kbGVkIGBudWxsYCBmb3IgbWF0aGVtYXRpY2FsIHJlZHVjaW5nIG9wZXJhdGlvbnMgb2YgYHN1bSgpYCwgYG1lYW4oKWAsIGBtYXgoKWAgYW5kIGBtaW4oKWAuCisqIEFsbG93ZWQgYG51bGxgIHZhbHVlcyBpbiBgTWVtb3J5YCBmb3IgYEdyYXBoQ29tcHV0ZXJgLgorKiBBbGxvd2VkIGBudWxsYCBhc3NpZ25tZW50IGluIGB3aXRoU2lkZUVmZmVjdCgpYC4KKyogQWxsb3dlZCBsYWJlbGxpbmcgb2Ygc3RlcHMgdGhhdCBlbWl0IGEgdHJhdmVyc2VyIGNhcnJ5aW5nIGBudWxsYC4KKyogRml4ZWQgYnVnIGluIGZpbHRlcmluZyBmb3IgYG51bGxgIHByb3BlcnR5IGtleSBhcmd1bWVudHMgdG8gYHZhbHVlTWFwKClgLCBgZWxlbWVudE1hcCgpYCwgYHByb3BlcnRpZXMoKWAgYW5kIGB2YWx1ZXMoKWAuCisqIE1vZGlmaWVkIGdyYW1tYXIgdG8gYWxsb3cgYSBjYWxsIHRvIGB3aXRoaW4oKWAgYW5kIGB3aXRob3V0KClgIHdpdGggbm8gYXJndW1lbnRzLgorKiBGaXhlZCBwcm9ibGVtcyB3aXRoIGBpbmplY3QobnVsbClgIHZhcmlhdGlvbnMgd2hlcmUgYG51bGxgIHdhcyB0aGUgb25seSB2YWx1ZSBiZWluZyBzdWJtaXR0ZWQuCisqIEZpeGVkIHByb2JsZW0gd2l0aCBgR3Jvb3Z5VHJhbnNsYXRvcmAgYW5kIGBpbmplY3QobnVsbCxudWxsKWAgd2hpY2ggY291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIEdyb292eSBKREsgZXh0ZW5zaW9uIGBpbmplY3QoT2JqZWN0LENsb3N1cmUpYC4KKyogRml4ZWQgZXJyb3Igd2hlcmUgY2VydGFpbiB2YXJpYW50cyBvZiBgaW5qZWN0KClgIHdpdGggYG51bGxgIG1pZ2h0IG5vdCBwcm9wZXJseSBjb25zdHJ1Y3QgYSB0cmF2ZXJzYWwgaW4gLk5FVC4KKyogUHJldmVudGVkIGV4Y2VwdGlvbiB3aXRoICBgaGFzVmFsdWUobnVsbClgIGFuZCBhbGxvd2VkIGZpbHRlcmluZyBhcyBleHBlY3RlZC4KKyogUmVmaW5lZCBgRG90TmV0VHJhbnNsYXRvcmAgdG8gYmUgbW9yZSBleHBsaWNpdCB3aXRoIGBudWxsYCBhcmd1bWVudHMgdG8gZW5zdXJlIHRoYXQgdGhlIHJpZ2h0IG92ZXJsb2FkcyBhcmUgY2FsbGVkLgorKiBDcmVhdGVkIGBHcmVtbGluUGFyc2VyYCB0byBjb25zdHJ1Y3QgYFRyYXZlcnNhbGAgb2JqZWN0cyBmcm9tIGBncmVtbGluLWxhbmd1YWdlYC4KKyogQWRkZWQgYEdyZW1saW5MYW5nU2NyaXB0RW5naW5lYCBhcyBhIGBHcmVtbGluU2NyaXB0RW5naW5lYCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXJzIHRoZSBncmFtbWFyIGFuZCBgSmF2YVRyYW5zbGF0b3JgIHRvIGV2YWx1YXRlIEdyZW1saW4uCisqIEFkZGVkIGdldHRlciBtZXRob2QgZm9yIGBieXBhc3NUcmF2ZXJzYWxgIGluIGBBYnN0cmFjdExhbWJkYVRyYXZlcnNhbGAuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGN1c3RvbSBHcmFwaEJpbmFyeSB0eXBlcyBpbiAuTkVULgorKiBSZW1vdmVkIHNvbWUgdW5uZWNlc3NhcnkgZXhjZXB0aW9uIHdyYXBwaW5nIGFyb3VuZCBgZ3JlbWxpbi1kcml2ZXJgIGVycm9ycyBub3cgcHJvZHVjaW5nIGEgbW9yZSBpbW1lZGlhdGUgdmlldyBvZiB0aGUgYWN0dWFsIGVycm9yIGNhdXNlLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjU2OSBSZWNvbm5lY3QgdG8gc2VydmVyIGlmIEphdmEgZHJpdmVyIGZhaWxzIHRvIGluaXRpYWxpemUKKyogVElOS0VSUE9QLTI1ODUgVHJhdmVyc2FsIGZhaWxlZCBmb3IgZGlmZmVyZW50IHN0cmF0ZWdpZXMgb3JkZXIKKyogVElOS0VSUE9QLTI1ODkgWE1MIEV4dGVybmFsIEVudGl0eSAoWFhFKSB2dWxuZXJhYmlsaXR5CisqIFRJTktFUlBPUC0yNTk3IE51bGxQb2ludGVyRXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb25uZWN0aW9uIHBvb2wKKyogVElOS0VSUE9QLTI1OTggd2l0aGluKG51bGwpIE5QRQorKiBUSU5LRVJQT1AtMjYwMyBUaW5rZXJHcmFwaCBzb21ldGltZXMgY291bGQgbm90IHF1ZXJ5IGZsb2F0IHZhbHVlcy4KKyogVElOS0VSUE9QLTI2MDkgSFRUUCByZXR1cm5zIHNlcmlhbGl6YXRpb24gZXhjZXB0aW9ucyBmb3IgdGhlIEdyYXBoVHJhdmVyc2FsU291cmNlCisqIFRJTktFUlBPUC0yNjIxIHRvU3RyaW5nIGZvciB0cmF2ZXJzYWxzIHN1Y2ggYXMgd2l0aGluIHdpdGggZW1wdHkgYXJyYXkgcmV0dXJucyBlbXB0eSBzdHJpbmcgYXMgYXJndW1lbnQgaW5zdGVhZCBvZiBicmFja2V0cworKiBUSU5LRVJQT1AtMjYyNiBSYW5nZUdsb2JhbFN0ZXAgY2xvc2VzIHRyYXZlcnNhbCBwcmVtYXR1cmVseQorKiBUSU5LRVJQT1AtMjY0OSBVbmFibGUgdG8gdHJhbnNsYXRlIGdyZW1saW4gcXVlcnkgdG8gamF2YQorKiBUSU5LRVJQT1AtMjY1OCBUcmFuc2xhdG9yIGluIGdyZW1saW4tamF2YXNjcmlwdCBoYXMgdHJvdWJsZSB3aXRoIGFycmF5IGFyZ3VtZW50cworKiBUSU5LRVJQT1AtMjY2MiBVbmNsb3NlZCBjbGllbnQgc2Vzc2lvbiBhbmQgc3RhY2t0cmFjZSBwb3BzIHVwIHdoZW4gY2xlYW51cCBpcyBtaXNzZWQKKyogVElOS0VSUE9QLTI2NzAgSmF2YURvY3MgZG8gbm90IGJ1aWxkIHdoZW4gdXNpbmcgSkRLIDExCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTI1MDQgSW50ZXJtaXR0ZW50bHkgZmFpbGluZyBzZXJ2ZXIvZHJpdmVyIGludGVncmF0aW9uIHRlc3RzCisqIFRJTktFUlBPUC0yNTU1IFN1cHBvcnQgZm9yIHJlbW90ZSB0cmFuc2FjdGlvbnMgaW4gUHl0aG9uCisqIFRJTktFUlBPUC0yNTU2IFN1cHBvcnQgcmVtb3RlIHRyYW5zYWN0aW9ucyBpbiAuTkVUCisqIFRJTktFUlBPUC0yNTcwIFN1cHBvcnQgY3VzdG9tIHR5cGUgaW4gR3JhcGhCaW5hcnkgZm9yIC5ORVQKKyogVElOS0VSUE9QLTI1ODIgQ29uc3RydWN0IHRyYXZlcnNhbHMgZnJvbSBncmVtbGluLWxhbmd1YWdlCisqIFRJTktFUlBPUC0yNTgzIE1ha2UgZ3JlbWxpbi1ncm9vdnkgcHJvY2Vzc2luZyBvcHRpb25hbCBpbiBHcmVtbGluIFNlcnZlcgorKiBUSU5LRVJQT1AtMjU5MSBBZG1pbmlzdHJhdGl2ZSBhZGp1c3RtZW50cyB0byBncmVtbGludCBzaXRlCisqIFRJTktFUlBPUC0yNTkyIEFsaWduIHRoZSBzdHlsZSBndWlkZXMKKyogVElOS0VSUE9QLTI1OTYgZGF0ZXRpbWUgZnVuY3Rpb24KKyogVElOS0VSUE9QLTI2MDUgRnVydGhlciBlbmZvcmNlIGFuZCByZWZpbmUgbnVsbCBzZW1hbnRpY3MKKyogVElOS0VSUE9QLTI2MTUgRXhwYW5kIHRlc3Rpbmcgb2YgcGF0aCgpIHdpdGggbnVsbCB2YWx1ZXMKKyogVElOS0VSUE9QLTI2MTYgUHJvdmlkZSBiZXR0ZXIgZXhjZXB0aW9ucyB3aXRoIFNTTCByZWxhdGVkIGZhaWx1cmVzICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjYyMCBDbGVhbiB1cCBOdWxsUG9pbnRlckV4Y2VwdGlvbnMgcmVsYXRlZCB0byBudWxsIGFyZ3VtZW50cyBvbiBwcm9wZXJ0eSByZWxhdGVkIHN0ZXBzCisqIFRJTktFUlBPUC0yNjMwIENsYXJpZnkgdGhhdCBhIHNlcnZlciBjYW5ub3Qgc3VwcG9ydCBHcmFwaHNvbjEuMCBvdmVyIEhUVFAKKyogVElOS0VSUE9QLTI2MzIgTmV0dHkgNC4xLjYxIGZsYWdnZWQgd2l0aCB0d28gaGlnaCBzZXZlcml0eSBzZWN1cml0eSB2aW9sYXRpb25zCisqIFRJTktFUlBPUC0yNjM3IEVuaGFuY2UgbG9nZ2luZyBpbiB0aGUgUHl0aG9uCisqIFRJTktFUlBPUC0yNjQ2IE1ha2UgLk5FVCBTdHJlYW1FeHRlbnNpb25zIHB1YmxpYyBmb3IgR3JhcGhCaW5hcnkKKyogVElOS0VSUE9QLTI2NTYgUHJvdmlkZSBhIG5vIHN5bnRheCBzdWdhciB0cmFuc2xhdG9yIGZvciBweXRob24KKyogVElOS0VSUE9QLTI2NjAgQnJpbmcgYmFjayBjbG9zZSBtZXNzYWdlIGZvciBkcml2ZXJzCisqIFRJTktFUlBPUC0yNjY2IENyZWF0ZSBhbiBhbm9ueW1pemluZyBUcmFuc2xhdG9yIGZvciBsb2dnaW5nIHRyYXZlcnNhbHMgd2l0aG91dCB1c2VyIGRhdGEKKyogVElOS0VSUE9QLTI2NjcgQWxsb3cgZm9sZCgpIHdpdGggYWRkQWxsIHRvIHdvcmsgb24gTWFwCisqIFRJTktFUlBPUC0yNjY4IFVwZGF0aW5nIGFpb2h0dHAgcmVxdWlyZW1lbnRzIGF0IGdlcm1pbi1weXRob24gZHVlIHRvIHZ1bG5lcmFiaWxpdHkKKyogVElOS0VSUE9QLTI2NjkgTmV0dHkgNC4xLjYxIGZsYWdnZWQgd2l0aCBtZWRpdW0gc2V2ZXJpdHkgc2VjdXJpdHkgdmlvbGF0aW9ucworKiBUSU5LRVJQT1AtMjY3MSBBZGQgdHgoKSBzdXBwb3J0IHRvIGdyYW1tYXIKKworW1tyZWxlYXNlLTMtNS0xXV0KKz09PSBUaW5rZXJQb3AgMy41LjEgKFJlbGVhc2UgRGF0ZTogSnVseSAxOSwgMjAyMSkKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy40LnguYXNjaWlkb2MjcmVsZWFzZS0zLTQtMTIsIDMuNC4xMj4+LgorCisqIEFkZGVkIHN1cHBvcnQgZm9yIGBnLnR4KClgIGluIEphdmFzY3JpcHQuCisqIEZpeGVkIGJ1ZyBpbiBKYXZhc2NyaXB0IGVycm9yIG1lc3NhZ2UgcmVsYXRlZCB0byB2YWxpZGF0aW5nIGFub255bW91cyB0cmF2ZXJzYWwgc3Bhd25zLgorKiBDaGFuZ2VkIGNsb3NlIG9mIFB5dGhvbiBhbmQgSmF2YXNjcmlwdCBjb25uZWN0aW9ucyB0byBubyBsb25nZXIgc2VuZCBhICJjbG9zZSBtZXNzYWdlIiBhcyB0aGUgc2VydmVyIG5vIGxvbmdlciBhY2tub3dsZWRnZXMgaXQgYXMgb2YgMy41LjAuCisqIEZpeGVkIGJ1ZyB3aGVyZSB0aGUgYEdyYXBoYCBpbnN0YW5jZSB3YXMgbm90IGJlaW5nIGFzc2lnbmVkIHRvIGNoaWxkIHRyYXZlcnNhbHMuCisqIFJlbW92ZWQgc2VuZGluZyBvZiBkZXByZWNhdGVkIHNlc3Npb24gY2xvc2UgbWVzc2FnZSBmcm9tIEdyZW1saW4uTmV0IGRyaXZlci4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTIzNTggUG90ZW50aWFsIGNvbm5lY3Rpb24gbGVhayBvbiBjbGllbnQgZGlzcG9zaW5nCisqIFRJTktFUlBPUC0yNTU0IEV4dHJhY3Rpbmcgc3RlcCBtZXRyaWNzIGZyb20gUHJvZmlsZVN0ZXAgdGhyb3dzIE5QRSBpZiB0aGUgc3RlcCB3YXMgbm90IHRyaWdnZXJlZAorKiBUSU5LRVJQT1AtMjU2NSBHcmFwaE1MV3JpdGVyIGRvZXMgbm90IGNoZWNrIHZlcnRleExhYmVsS2V5IGNvbmZsaWN0CisqIFRJTktFUlBPUC0yNTY2IEluY29tcGxldGUgZXJyb3IgbWVzc2FnZSBpbiBieXRlY29kZSBzdGVwIGdlbmVyYXRpb24KKyogVElOS0VSUE9QLTI1NjggR3JhcGggaW5zdGFuY2Ugbm90IHNldCBmb3IgY2hpbGQgdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMjU3OCBTZXQgYXJndW1lbnRzIHRvIFAgd2l0aGluL3dpdGhvdXQgYXJlIHdyYXBwZWQgaW4gTGlzdAorKiBUSU5LRVJQT1AtMjU3OSBFdmVudFN0cmF0ZWd5IGRvZXNuJ3Qgd29yayB3aXRoIGFub255bW91cyB0cmF2ZXJzYWwKKyogVElOS0VSUE9QLTI1ODAgVXBkYXRlIHRoZSBjdXN0b20gRFNMIGRvY3VtZW50YXRpb24KKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjU0OCBBZGQgZ2V0dGVyIGZvciBpbmRleGVyIHVzZWQgaW4gSW5kZXhTdGVwCisqIFRJTktFUlBPUC0yNTUxIFNldHVwIHNjcmlwdHMgdG8gcHVibGlzaCBHcmVtaW50IHRvIG5wbQorKiBUSU5LRVJQT1AtMjU1NyBTdXBwb3J0IHJlbW90ZSB0cmFuc2FjdGlvbnMgaW4gSmF2YXNjcmlwdAorKiBUSU5LRVJQT1AtMjU1OSBTdG9wIHNlbmRpbmcgdGhlIGNsb3NlIG1lc3NhZ2UgZm9yIC5ORVQKKyogVElOS0VSUE9QLTI1NjAgU3RvcCBzZW5kaW5nIGNsb3NlIG1lc3NhZ2UgZm9yIFB5dGhvbgorKiBUSU5LRVJQT1AtMjU2MSBTdG9wIHNlbmRpbmcgY2xvc2UgbWVzc2FnZSBpbiBKYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yNTc2IFNldHVwIGF1dG9tYXRpYyB1cGRhdGVzIHZpYSBEZXBlbmRhYm90IGZvciBHcmVtbGluLk5FVAorKiBUSU5LRVJQT1AtMjU3NyBSZW1vdmUgdW51c2VkIHRlc3QgY292ZXJhZ2UgZGVwZW5kZW5jaWVzIGZyb20gR3JlbWxpbi5ORVQKKworW1tyZWxlYXNlLTMtNS0wXV0KKz09PSBUaW5rZXJQb3AgMy41LjAgKFJlbGVhc2UgRGF0ZTogTWF5IDMsIDIwMjEpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuNC54LmFzY2lpZG9jI3JlbGVhc2UtMy00LTExLCAzLjQuMTE+Pi4KKworKiBDaGFuZ2VkIHRyYW5zcG9ydCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgQUlPSFRUUCBpbnN0ZWFkIG9mIFRvcm5hZG8gZm9yIGdyZW1saW4tcHl0aG9uLgorKiBBZGRlZCBtYXhfY29udGVudF9sZW5ndGggYW5kIHVuaXQgdGVzdCBmb3IgaXQgaW4gZ3JlbWxpbi1weXRob24uCisqIFJlbW92ZWQgY29tcHJlc3Npb25fb3B0aW9uIHN1cHBvcnQgZm9yIHRyYW5zcG9ydCBpbiBncmVtbGluLXB5dGhvbi4KKyogRml4ZWQgZXZlbnQgbG9vcCBpc3N1ZXMgYW5kIGFkZGVkIHVuaXQgdGVzdCBmb3IgaXQgaW4gZ3JlbWxpbi1weXRob24uCisqIEZpeGVkIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gbXVsdGl0aHJlYWRpbmcgaXNzdWVzIGFuZCBhZGRlZCB1bml0IHRlc3QgZm9yIGl0IGluIGdyZW1saW4tcHl0aG9uLgorKiBGaXhlZCBoZWFydGJlYXQgdGltZW91dCBpc3N1ZXMgYW5kIHRlc3RlZCB3aXRoIGxvY2FsIHNlcnZlciBtYW51YWxseSBmb3IgZ3JlbWxpbi1weXRob24uCisqIEZpeGVkIGJ1aWxkIGVycm9ycyBlbWl0dGVkIGZvciBncmVtbGluLXB5dGhvbiAoYXN5bmNpbyB0YXNrIGRlc3Ryb3llZCBidXQgaXMgcGVuZGluZyBlcnJvcikuCisqIEFkZGVkIGBncmVtbGluLWxhbmd1YWdlYCBtb2R1bGUuCisqIEFsbG93ZWQgdGhlIHBvc3NpYmlsaXR5IGZvciB0aGUgcHJvcGFnYXRpb24gb2YgYG51bGxgIGFzIGEgYFRyYXZlcnNlcmAgaW4gR3JlbWxpbi4KKyogQWRkZWQgYSBmdWxseSBzaGFkZWQgdmVyc2lvbiBvZiBgZ3JlbWxpbi1kcml2ZXJgLgorKiBFeHBvc2VkIHdlYnNvY2tldCBjb25uZWN0aW9uIHN0YXR1cyBpbiBKYXZhU2NyaXB0IGRyaXZlci4KKyogRml4ZWQgYSBidWcgd2hlcmUgc3BhcmstZ3JlbWxpbiB3YXMgbm90IHJlLWF0dGFjaGluZyBwcm9wZXJ0aWVzIHdoZW4gdXNpbmcgYGRlZHVwKClgLgorKiBGaXhlZCBhIGJ1ZyBpbiBgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJgIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24gd2hlcmUgZmFpbGVkIG9iamVjdCBhZ2dyZWdhdGlvbiBjb3VsZCBub3Qgd3JpdGUgYmFjayBIVFRQIHJlc3BvbnNlcy4KKyogRW5zdXJlZCBiZXR0ZXIgY29uc2lzdGVuY3kgb2YgdGhlIHVzZSBvZiBgbnVsbGAgYXMgYXJndW1lbnRzIHRvIG11dGF0aW9uIHN0ZXBzLgorKiBBZGRlZCBhIGBSZXNwb25zZVN0YXR1c0NvZGVgIHRvIGluZGljYXRlIHRoYXQgYSBjbGllbnQgc2hvdWxkIHJldHJ5IGl0cyByZXF1ZXN0LgorKiBBZGRlZCBgVGVtcG9yYXJ5RXhjZXB0aW9uYCBpbnRlcmZhY2UgdG8gaW5kaWNhdGUgdGhhdCBhIHRyYW5zYWN0aW9uIGNhbiBiZSByZXRyaWVkLgorKiBQcmV2ZW50ZWQgYFRyYXZlcnNhbFN0cmF0ZWd5YCBpbnN0YW5jZXMgZnJvbSBiZWluZyBhZGRlZCBtb3JlIHRoYW4gb25jZSwgd2hlcmUgdGhlIG5ldyBpbnN0YW5jZSByZXBsYWNlcyB0aGUgb2xkLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGZvciBgYWRkRSgpYCB3aGVuIHRoZSBgZnJvbSgpYCBvciBgdG8oKWAgZG9lcyBub3QgcmVzb2x2ZSB0byBhIGBWZXJ0ZXhgLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGZvciBgYWRkRSgpYCB3aGVuIGNhcmRpbmFsaXR5IGlzIHNwZWNpZmllZCBvbiBgcHJvcGVydHkoKWAgYXNzaWdubWVudHMuCisqIEFsbG93ZWQgYHByb3BlcnR5KFQubGFiZWwsT2JqZWN0KWAgdG8gYmUgdXNlZCBpZiBubyB2YWx1ZSB3YXMgc3VwcGxpZWQgdG8gYGFkZFYoU3RyaW5nKWAuCisqIERyb3BwZWQgc3VwcG9ydCBmb3IgLk5FVCBTdGFuZGFyZCAxLjMgaW4gR3JlbWxpbi5OZXQuIE9ubHkgLk5FVCBTdGFuZGFyZCAyLjAgaXMgc3VwcG9ydGVkIHN0YXJ0aW5nIHdpdGggdGhpcyB2ZXJzaW9uLgorKiBBZGRlZCBHcmFwaEJpbmFyeSBzdXBwb3J0IGZvciAuTkVULgorKiBBZGRlZCBgVW5pZmllZENoYW5uZWxpemVyYCB3aGljaCBleHBvc2VzIEhUVFAgYW5kIFdlYnNvY2tldHMgY29ubmVjdGlvbnMgYW5kIHByb2Nlc3NlcyBib3RoIHNlc3Npb25sZXNzIGFuZCBpbi1zZXNzaW9uIHJlcXVlc3RzIHdpdGggdGhlIHNhbWUgYGdyZW1saW5Qb29sYC4KKyogQm91bmRlZCB0aGUgYGdyZW1saW5Qb29sYCBpbiBHcmVtbGluIFNlcnZlciB0byBlbmZvcmNlIHJhdGUgbGltaXRpbmcgd2hpY2ggd2lsbCB0aGVuIHByb2R1Y2UgYSBgVE9PX01BTllfUkVRVUVTVFNgIHJlc3BvbnNlIHN0YXR1cyBjb2RlLgorKiBTd2l0Y2hlZCBmcm9tIGBOZXd0b25zb2Z0Lkpzb25gIHRvIGBTeXN0ZW0uVGV4dC5Kc29uYCBhcyB0aGUgSlNPTiBsaWJyYXJ5IGZvciBHcmVtbGluLk5ldC4KKyogQWxsb3dlZCBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBgQ2xpZW50LnN1Ym1pdCgpYCBpbiBKYXZhc2NyaXB0IGRyaXZlciB0byBlbmFibGUgc2V0dGluZyBvZiBwYXJhbWV0ZXJzIGxpa2UgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YC4KKyogR3JlbWxpbi5OZXQgZHJpdmVyIG5vIGxvbmdlciBzdXBwb3J0cyBza2lwcGluZyBkZXNlcmlhbGl6YXRpb24gYnkgZGVmYXVsdC4gVXNlcnMgY2FuIGhvd2V2ZXIgY3JlYXRlIHRoZWlyIG93biBgSU1lc3NhZ2VTZXJpYWxpemVyYCBpZiB0aGV5IG5lZWQgdGhpcyBmdW5jdGlvbmFsaXR5LgorKiBTdXBwb3J0ZWQgZGVzZXJpYWxpemF0aW9uIG9mIGBkaWN0YCBhbmQgYGxpc3RgIGFzIGEga2V5IGluIGEgYGRpY3RgIGZvciBQeXRob24uCisqIENoYW5nZWQgdGhlIGFsaWFzZWQgYENsaWVudGAgdG8gcHJveHkgYGNsb3NlKClgIG1ldGhvZHMgdG8gaXRzIHVuZGVybHlpbmcgY2xpZW50LgorKiBBZGRlZCBzdXBwb3J0IGZvciByZW1vdGUgYGcudHgoKWAgdXNhZ2UuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGJ5dGVjb2RlLWJhc2VkIHNlc3Npb25zLgorKiBBZGRlZCBhIGBHcmFwaC5GZWF0dXJlYCBmb3IgYHN1cHBvcnRzTnVsbFByb3BlcnR5VmFsdWVzYC4KKyogTW9kaWZpZWQgYFRva2VuVHJhdmVyc2FsYCB0byBzdXBwb3J0IGBQcm9wZXJ0eWAgdGh1cyBgYnkoa2V5KWAgYW5kIGBieSh2YWx1ZSlgIGNhbiBub3cgYXBwbHkgdG8gYEVkZ2VgIGFuZCBtZXRhLXByb3BlcnRpZXMuCisqIEFkZGVkIGBTZWVkU3RyYXRlZ3lgIHRvIGFsbG93IGRldGVybWluaXN0aWMgYmVoYXZpb3IgZm9yIGBjb2luKClgLCBgc2FtcGxlKClgIGFuZCBgT3JkZXIuc2h1ZmZsZWAuCisqIEFkZGVkIGBHcm91cGluZ2Agc3RlcCBpbnRlcmZhY2UuCisqIEFkZGVkIGBUcmF2ZXJzYWxQYXJlbnQucmVwbGFjZVRyYXZlcnNhbCgpYCB3aGljaCBjYW4gcmVwbGFjZSBhIGRpcmVjdCBjaGlsZCB0cmF2ZXJzYWwuCisqIEFkZGVkIGBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5YCB3aGljaCByZXBsYWNlcyBjZXJ0YWluIHN0YW5kYXJkIHRyYXZlcnNhbHMgdy8gb3B0aW1pemVkIHRyYXZlcnNhbHMgKGUuZy4gYFRva2VuVHJhdmVyc2FsYCkuCisqIEltcHJvdmVkIGBJZGVudGl0eVJlbW92YWxTdHJhdGVneWAgYnkgYWNjb3VudGluZyBmb3IgYEVuZFN0ZXBgIHNpdHVhdGlvbnMuCisqIEFkZGVkIGBJZGVudGl0eVJlbW92YWxTdHJhdGVneWAgdG8gdGhlIHN0YW5kYXJkIGxpc3Qgb2YgYFRyYXZlcnNhbFN0cmF0ZWdpZXNgLgorKiBNb2RpZmllZCBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAgdG8gbGVhdmUgbGFiZWxzIG1vcmUgb2Z0ZW4gd2l0aCBgbWF0Y2goKWAgY2FzZXMgdG8gcmV0dXJuIG1vcmUgY29uc2lzdGVudCByZXN1bHRzLgorKiBSZWZhY3RvcmVkIGBNYXBTdGVwYCB0byBtb3ZlIGl0cyBsb2dpYyB0byBgU2NhbGFyTWFwU3RlcGAgc28gdGhhdCB0aGUgb2xkIGJlaGF2aW9yIGNvdWxkIGJlIHByZXNlcnZlZCB3aGlsZSBhbGxvdyBvdGhlciBpbXBsZW1lbnRhdGlvbnMgdG8gaGF2ZSBtb3JlIGZsZXhpYmlsaXR5LgorKiBNb2RpZmllZCBUaW5rZXJHcmFwaCB0byBzdXBwb3J0IGBudWxsYCBwcm9wZXJ0eSB2YWx1ZXMgYW5kIGNhbiBiZSBjb25maWd1cmVkIHRvIGRpc2FibGUgdGhhdCBmZWF0dXJlLgorKiBNb2RpZmllZCBgbnVsbGAgaGFuZGxpbmcgaW4gbXV0YXRpb25zIHRvIGJlIGNvbnNpc3RlbnQgZm9yIGEgbmV3IGBWZXJ0ZXhgIGFzIHdlbGwgYXMgdXBkYXRlIHRvIGFuIGV4aXN0aW5nIG9uZS4KKyogRW5mb3JjZWQgdXNlIG9mIGFub255bW91cyBjaGlsZCB0cmF2ZXJzYWxzLgorKiBSZW1vdmVkIHN1cHBvcnQgZm9yIFB5dGhvbiAyLnggaW4gZ3JlbWxpbnB5dGhvbi4KKyogVXBncmFkZWQgdG8gQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbjIuCisqIFJlbmFtZWQgYFN0b3JlU3RlcGAgdG8gYEFnZ3JlZ2F0ZUxvY2FsU3RlcGAuCisqIFJlbmFtZWQgYEFnZ3JlZ2F0ZVN0ZXBgIHRvIGBBZ2dyZWdhdGVHbG9iYWxTdGVwYC4KKyogUmVuYW1lZCBgU0VSVkVSX0VSUk9SX1NDUklQVF9FVkFMVUFUSU9OYCB0byBgU0VSVkVSX0VSUk9SX0VWQUxVQVRJT05gIGdpdmVuIHRoYXQgdGhpcyByZXNwb25zZSBjb2RlIGFwcGxpZXMgdG8gcmVtb3RlIHRyYXZlcnNhbHMgYXMgd2VsbCBhcyBzY3JpcHRzLgorKiBSZWZhY3RvcmVkIGBUcmF2ZXJzYWxTdHJhdGVnaWVzYCB0byBpbXBsZW1lbnQgYEl0ZXJhYmxlYC4KKyogUmVmYWN0b3JlZCBgVHJhdmVyc2FsYCBzZW1hbnRpY3MgdG8gYWx3YXlzIGV4cGVjdCBgRW1wdHlTdGVwYCBhcyBhIHBhcmVudCBpZiBpdCBpcyBtZWFudCB0byBiZSB0aGUgcm9vdCBgVHJhdmVyc2FsYC4KKyogQ29uZmlndXJlZCBHcmFwaEJpbmFyeSBhcyB0aGUgZGVmYXVsdCBiaW5hcnkgc2VyaWFsaXphdGlvbiBmb3JtYXQgZm9yIHRoZSBKYXZhIERyaXZlci4KKyogQ29uZmlndXJlZCBHcmFwaFNPTiAzLjAgYXMgdGhlIGRlZmF1bHQgdGV4dCBzZXJpYWxpemF0aW9uIGZvcm1hdCB3aGVuIG5vIHNlcmlhbGl6ZXIgY2FuIGJlIGRldGVybWluZWQuCisqIENvbmZpZ3VyZWQgR3JhcGhTT04gMy4wIGFzIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBgR3JhcGhTT05NYXBwZXJgLgorKiBBZGRlZCBgSmF2YXNjcmlwdFRyYW5zbGF0b3JgIGZvciBKYXZhLgorKiBBZGRlZCBgRG90TmV0VHJhbnNsYXRvcmAgZm9yIEphdmEuCisqIEFkZGVkIEdyb292eSBgVHJhbnNsYXRvcmAgZm9yIFB5dGhvbi4KKyogRml4ZWQgYnVnIGluIGBQeXRob25UcmFuc2xhdG9yYCBmb3IgcHJvY2Vzc2luZyBgVHJhdmVyc2FsU3RyYXRlZ3lgIGluc3RhbmNlcyBpbiBHcmFwaEJpbmFyeS4KKyogRml4ZWQgYnVnIGluIGJ5dGVjb2RlIGBCaW5kaW5nc2Agd2hlcmUgY2FsbGluZyBgb2YoKWAgcHJpb3IgdG8gY2FsbGluZyBhIGNoaWxkIHRyYXZlcnNhbCBpbiB0aGUgc2FtZSBwYXJlbnQgd291bGQgY2F1c2UgdGhlIGluaXRpYWwgYmluZGluZyB0byBiZSBsb3N0LgorKiBNaWdyYXRlZCBmcm9tIFRvcm5hZG8gdG8gQUlPSFRUUCBmb3IgZ3JlbWxpbnB5dGhvbi4KKyogQnVtcGVkIHRvIE5lbzRqIDMuNC4xMS4KKyogQnVtcGVkIHRvIFNwYXJrIDMuMC4wLgorKiBCdW1wZWQgdG8gSmFja3NvbiAyLjExLnguCisqIFN1cHBvcnRlZCBidWlsZCBmb3IgSmF2YSAxMS4KKyogQWRkZWQgYE1lc3NhZ2VTZXJpYWxpemVyLmdldE1hcHBlcigpYCB0byByZXR1cm4gdGhlIHVuZGVybHlpbmcgb2JqZWN0IHRoYXQgaGFuZGxlcyBzZXJpYWxpemF0aW9uIGZvciBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uCisqIEFkZGVkIGEgcGFyYW1ldGVyaXplZCBgVHlwZVRyYW5zbGF0b3JgIGZvciB1c2Ugd2l0aCBgR3Jvb3Z5VHJhbnNsYXRvcmAgdGhhdCBzaG91bGQgcHJvZHVjZSBtb3JlIGNhY2hlIGhpdHMuCisqIEFkZGVkIHN1cHBvcnQgZm9yIGBUZXh0UGAgaW4gTmVvNGogdXNpbmcgaXRzIHN0cmluZyBzZWFyY2ggZnVuY3Rpb25zLgorKiBBZGRlZCBhIGtlcmJlcm9zIEtEQyB0byB0aGUgZG9ja2VyIGNvbnRhaW5lciBmb3IgdGVzdGluZyBHTFYncy4KKyogQWRkZWQga2VyYmVyb3MgYXV0aGVudGljYXRpb24gdG8gR3JlbWxpbi1QeXRob24uCisqIEFkZGVkIGF1ZGl0IGxvZ2dpbmcgdG8gYnl0ZWNvZGUtYmFzZWQgdHJhdmVyc2Fscy4KKyogQ2hhbmdlZCBgVHJhdmVyc2FsU3RyYXRlZ3lgIGFwcGxpY2F0aW9uIG1ldGhvZG9sb2d5IHRvIGFwcGx5IGVhY2ggc3RyYXRlZ3kgaW4gdHVybiB0byBlYWNoIGxldmVsIG9mIHRoZSB0cmF2ZXJzYWwgaGllcmFyY2h5IHN0YXJ0aW5nIGZyb20gcm9vdCBkb3duIHRvIGNoaWxkcmVuLgorKiBBZGRlZCBhIFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LgorKiBQcmV2ZW50ZWQgbW9yZSB0aGFuIG9uZSBgQ2xpZW50YCBmcm9tIGNvbm5lY3RpbmcgdG8gdGhlIHNhbWUgR3JlbWxpbiBTZXJ2ZXIgc2Vzc2lvbi4KKyogQ2hhbmdlZCB0aGUgR3Jvb3Z5IHRvIGFuIG9wdGlvbmFsIGRlcGVuZGVuY3kgaW4gYGdyZW1saW4tZHJpdmVyYC4KKyogQWRkZWQgc3VwcG9ydCBmb3IgY29uZmlndXJpbmcgYW4gYEF1dGhvcml6ZXJgIGltcGxlbWVudGF0aW9uIHRvIEdyZW1saW4gU2VydmVyLCBhbGxvd2luZyBmb3IgYXV0aG9yaXphdGlvbiBvZiBpbmRpdmlkdWFsIGdyZW1saW4gcmVxdWVzdHMuCisqIEFkZGVkIGBncmVtbGludGAgbW9kdWxlIHRvIGhvdXNlIHRoZSBHcmVtbGluIHF1ZXJ5IGZvcm1hdHRpbmcgSmF2YVNjcmlwdCBsaWJyYXJ5IHBvd2VyaW5nIGdyZW1saW50LmNvbS4KKyogUmVtb3ZlZCBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgc2Vzc2lvbiBjbG9zZSBtZXNzYWdlIGluIEdyZW1saW4gU2VydmVyIC0gdGhlIG1lc3NhZ2UgaXMgYWNjZXB0ZWQgYnV0IGlnbm9yZWQgaWYgc2VudC4KKyogUmVtb3ZlZCBgUHJvcGVydHkuRXhjZXB0aW9ucy5wcm9wZXJ0eVZhbHVlQ2FuTm90QmVOdWxsYCBleGNlcHRpb24gdHlwZSBhcyBgbnVsbGAgbm93IGhhcyBtZWFuaW5nIGluIEdyZW1saW4uCisqIFJlbW92ZWQgdGhlICJleHBlcmltZW50YWwiIHN1cHBvcnQgZm9yIG11bHRpL21ldGEtcHJvcGVydGllcyBpbiBOZW80ai4KKyogUmVtb3ZlZCBHcnlvIHNlcmlhbGl6YXRpb24gY29uZmlndXJhdGlvbnMgZnJvbSBHcmVtbGluIFNlcnZlciBzYW1wbGUgY29uZmlndXJhdGlvbnMgYW5kIGRlZmF1bHQgY29uZmlndXJhdGlvbnMuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGN1c3RvbSBrZWVwLWFsaXZlIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIEphdmEgZHJpdmVyLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQnl0ZWNvZGVVdGlsYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYENsdXN0ZXIubWF4V2FpdEZvclNlc3Npb25DbG9zZWAgY29uZmlndXJhdGlvbiBvcHRpb24uCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBUcmF2ZXJzYWxTdHJhdGVnaWVzLmFwcGx5U3RyYXRlZ2llcygpYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYE5pb0NoYW5uZWxpemVyYCBhbmQgcmVsYXRlZCBjbGFzc2VzLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCByZW1vdGUgdHJhdmVyc2FsIHNpZGUtZWZmZWN0cyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFNlcmlhbGl6ZXJzLkRFRkFVTFRfUkVTVUxUX1NFUklBTElaRVJgIGFuZCBgU2VyaWFsaXplcnMuREVGQVVMVF9SRVFVRVNUX1NFUklBTElaRVJgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgZGVjcmAgYW5kIGBpbmNyYCBmcm9tIGBPcmRlcmAuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBUcmF2ZXJzYWxTb3VyY2Uud2l0aFJlbW90ZSgpYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFJlc3BvbnNlSGFuZGxlckNvbnRleHRgIGluZnJhc3RydWN0dXJlLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgVmVydGV4UHJvZ3JhbWAgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZS4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgU1NMIHNldHRpbmdzOiBga2V5Q2VydENoYWluRmlsZWAsIGBrZXlGaWxlYCwgYGtleVBhc3N3b3JkYCBhbmQgYHRydXN0Q2VydENoYWluRmlsZWAgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUuCisqIFJlbW92ZWQgcHJldmlvdXNseSBkZXByZWNhdGVkIGBQcm9wZXJ0eU1hcFN0ZXBgIGNvbnN0cnVjdG9yIGFuZCBgaXNJbmNsdWRlVG9rZW5zYC4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYFN0YXJHcmFwaC5idWlsZGVyKClgIGFuZCBgU3RhckdyYXBoLkJ1aWxkZXIuY3JlYXRlKClgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQWJzdHJhY3RPcFByb2Nlc3Nvci5nZW5lcmF0ZU1ldGFEYXRhKENoYW5uZWxIYW5kbGVyQ29udGV4dCwgUmVxdWVzdE1lc3NhZ2UsIFJlc3BvbnNlU3RhdHVzQ29kZSwgSXRlcmF0b3IpYAorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgQnVsa0R1bXBlclZlcnRleFByb2dyYW1gIGFuZCBgQnVsa0xvYWRlclZlcnRleFByb2dyYW1gLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMTYxOSBUaW5rZXJHcmFwaENvbXB1dGVyIHdvcmtlciBjb3VudCBhZmZlY3RzIE9wdGlvbmFsU3RlcCBxdWVyeSByZXN1bHRzCisqIFRJTktFUlBPUC0yMTA3IFNwYXJrIGZhaWxzIHRvIHJlYXR0YWNoIHByb3BlcnRpZXMKKyogVElOS0VSUE9QLTIxNTcgU3BhcmtTdGFyQmFycmllckludGVyY2VwdG9yIGluamVjdHMgKEJ5dGUpIDAKKyogVElOS0VSUE9QLTIxNTkgRXZlbnRTdHJhdGVneSBkb2Vzbid0IGhhbmRsZSBtdWx0aS12YWx1ZWQgcHJvcGVydGllcworKiBUSU5LRVJQT1AtMjE3NSBFeGVjdXRvciB0aHJlYWQgaXMgbm90IHJldHVybmVkIG9uIGNoYW5uZWwgY2xvc2UKKyogVElOS0VSUE9QLTIxODUgVXNlIGNvbW1vbnMtY29uZmlndXJhdGlvbjIgaW5zdGVhZCBvZiBjb21tb25zLWNvbmZpZ3VyYXRpb24gKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMTkyIEdyZW1saW4uTmV0LkRyaXZlci5Db25uZWN0aW9uLlBhcnNlIHRocm93cyBhIE51bGxSZWZlcmVuY2VFeGNlcHRpb24KKyogVElOS0VSUE9QLTIyMjQgRGV0ZWN0IGFuZCBmaXggcmVzb3VyY2UgbGVhaworKiBUSU5LRVJQT1AtMjIzMCBtYXRjaCgpIHN0ZXAgdW5leHBlY3RlZCBiZWhhdmlvdXJzCisqIFRJTktFUlBPUC0yMjMyIFJlbW90ZVN0cmF0ZWd5IGRvZXMgbm90IGNhbGwgcGFyZW50IGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5IF9faW5pdF9fCisqIFRJTktFUlBPUC0yMjM4IEZpeCByZW1haW5pbmcgaXRlcmF0b3IgbGVha3MgbWFya2VkIGJ5IEBJZ25vcmVJdGVyYXRvckxlYWsKKyogVElOS0VSUE9QLTIyNDEgQ2xpZW50IGV4Y2VwdGlvbiBkb24ndCBtYXRjaCBTZXJ2ZXIgZXhjZXB0aW9uIHdoZW4gc2VydmVyICB0aHJvdyBTdGFja092ZXJmbG93RXJyb3IKKyogVElOS0VSUE9QLTIyNDggSW5zdGFiaWxpdHkgb2YgZHJpdmVyIGZvciBibG9ja2VkIHJlcXVlc3RzCisqIFRJTktFUlBPUC0yMjU3IHRyYW5zYWN0aW9uIGl0dHkgIG1heSBzdGlsbCBiZSB2aXNpdGVkIGFmdGVyIGNvbW1pdAorKiBUSU5LRVJQT1AtMjI2NCBHcmVtbGluIFB5dGhvbiBzaG91bGQgZGVzZXJpYWxpemUgZzpEYXRlIHRvIFVUQworKiBUSU5LRVJQT1AtMjI2NiBLZWVwIGFsaXZlIG5vdCBzdGFydGVkIGF0IGNvbm5lY3Rpb24gY3JlYXRpb24KKyogVElOS0VSUE9QLTIyNzQgVGVzdCBvZiBUaW5rZXJHcmFwaCBHcmVtbGluIGZhaWwgb24gV2luZG93cyBhbmQgbm9uIEVOIGxvY2FsZQorKiBUSU5LRVJQT1AtMjI3NiBObyBjb25zdHJ1Y3RvciBmb3IgcmVtb3RlIGNvbm5lY3Rpb24gaW4gRFNMIGdlbmVyYXRlZCB0cmF2ZXJzYWwgc291cmNlCisqIFRJTktFUlBPUC0yMjgzIEdyYXBoU3RlcCdzIGlkcyBudWxsIGV4Y2VwdGlvbgorKiBUSU5LRVJQT1AtMjI4NSBFcnJvciBvYmplY3QgaXMgdW5yZWFjaGFibGUKKyogVElOS0VSUE9QLTIyODggR2V0IENvbm5lY3Rpb25Qb29sQnVzeUV4Y2VwdGlvbiBhbmQgdGhlbiBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbnMKKyogVElOS0VSUE9QLTIyODkgVXNlIGFkZHJlc3MgaW5zdGVhZCBvZiBob3N0bmFtZSBmb3IgY29ubmVjdGlvbgorKiBUSU5LRVJQT1AtMjI5MCBKYXZhc2NyaXB0IEdMViBjb25uZWN0aW9uIHJlZnVzZWQgZXJyb3IgaGFuZGxpbmcKKyogVElOS0VSUE9QLTIyOTEgVHJhdmVyc2FsRXhwbGFuYXRpb24gZGVzZXJpYWxpemF0aW9uIGluIEdyYXBoU09OCisqIFRJTktFUlBPUC0yMjk4IEJ5dGVjb2RlLmphdmEgIGZsYXR0ZW5Bcmd1bWVudHMgdGhyb3cgZXhjZXB0aW9uIHdoZW4gbnVsbAorKiBUSU5LRVJQT1AtMjMwMyBHcmVtbGluRHNsIGdlbmVyYXRlIGFkZFYgaW5zdGVhZCBvZiBhZGRFCisqIFRJTktFUlBPUC0yMzE4IEVkZ2UgcHJvcGVydGllcyBkZWR1cCgpIG5vdCB3b3JrIHdpdGggc3BhcmstZ3JlbWxpbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIzMzcgSW4gdXBncmFkZSBndWlkZSBmb3IgMy40LjIsIHRoZSBvcHRpb24gUmVtb3RlQ29ubmVjdGlvbi5QRVJfUkVRVUVTVF9USU1FT1VUIGRvZXMgbm90IGV4aXN0CisqIFRJTktFUlBPUC0yMzM4IGRyb3AoKSBub3QgcmVtb3ZpbmcgYWxsIGVkZ2UvbWV0YSBwcm9wZXJ0aWVzCisqIFRJTktFUlBPUC0yMzQxIEdyZW1saW5DbGllbnRFeHRlbnNpb25zLlN1Ym1pdEFzeW5jIGhhbmdzIGFzIGl0IHRyaWVzIHRvIGRpc3Bvc2UgY29ubmVjdGlvbgorKiBUSU5LRVJQT1AtMjM0NSBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIE1hcCBrZXkgaXMgbm90IGZvdW5kIGZvciBtYXRoKCkKKyogVElOS0VSUE9QLTIzNDcgUmVtb3ZlIGludmFsaWQgc2VydmljZSBkZXNjcmlwdG9ycyBmcm9tIGdyZW1saW4tc2hhZGVkCisqIFRJTktFUlBPUC0yMzUwIGNsb25lKCkgaXMgbm90IGRlZXAgY29weWluZyBUcmF2ZXJzYWwgaW50ZXJuYWxzCisqIFRJTktFUlBPUC0yMzUxIExvY2FsIE1hcCBvcmRlcmluZyBvZiBrZXlzIGNhbiBnZW5lcmF0ZSBjYXN0IGVycm9ycworKiBUSU5LRVJQT1AtMjM1MiBHcmVtbGluIFB5dGhvbiBkcml2ZXIgZGVmYXVsdCBwb29sIHNpemUgbWFrZXMgR3JlbWxpbiBrZWVwLWFsaXZlIGRpZmZpY3VsdAorKiBUSU5LRVJQT1AtMjM1MyBFcnJvciB3aGlsZSBTaHV0dGluZyBEb3duIEdyZW1saW4gU2VydmVyCisqIFRJTktFUlBPUC0yMzYwIGZhaWxlZCB0byBkZXNlcmlhbGl6ZXIgaW50MzIgd2hlbiBncmVtbGluLXB5dGhvbiBzdWJtaXQgYnl0ZWNvZGUgd2l0aCBhIGJpZyBpbnQgdmFsdWUKKyogVElOS0VSUE9QLTIzNjQgSW5qZWN0ZWQgUHJvZmlsZVN0ZXAgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQgaW4gY2hpbGQgdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMjM2NSBMYXp5QmFycmllclN0cmF0ZWd5IGFkZHMgYSBOb09wQmFycmllclN0ZXAgd2hlbiBwcm9maWxlKCkgaXMgcHJlc2VudAorKiBUSU5LRVJQT1AtMjM2OCBKQVZBX09QVElPTlMgYXJlIG5vdCBwcm9wZXJseSBleHBhbmRlZCBpbiBncmVtbGluLWNvbnNvbGUKKyogVElOS0VSUE9QLTIzNjkgQ29ubmVjdGlvbnMgaW4gQ29ubmVjdGlvblBvb2wgYXJlIG5vdCByZXBsYWNlZCBpbiBiYWNrZ3JvdW5kIHdoZW4gdW5kZXJseWluZyBjaGFubmVsIGlzIGNsb3NlZAorKiBUSU5LRVJQT1AtMjM3NCBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyIGNhbid0IGV4dHJhY3QgYXV0aG9yaXphdGlvbgorKiBUSU5LRVJQT1AtMjM4MyBoYXMoVCxUcmF2ZXJzYWwpIGRvZXMgbm90IHJldHVybiByZXN1bHRzCisqIFRJTktFUlBPUC0yMzg0IEluamVjdCBhbmQgd2l0aFNpZGVFZmZlY3QgY2F1c2luZyBkaWZmZXJlbnQgb3V0Y29tZXMgaW4gb3JkZXIgc3RlcAorKiBUSU5LRVJQT1AtMjM4OCBncmVtbGlucHl0aG9uOiBDYW4ndCBjbG9zZSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uCisqIFRJTktFUlBPUC0yNDAzIEdyZW1saW4gamF2YXNjcmlwdCBUcmFuc2xhdG9yIGRvZXMgbm90IGhhbmRsZSBjaGlsZCB0cmF2ZXJzYWxzCisqIFRJTktFUlBPUC0yNDA1IGdyZW1saW5weXRob246IHRyYXZlcnNhbCBoYW5ncyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIGJ1dCB0aGUgc2VydmVycyBzdG9wcyByZXNwb25kaW5nIGxhdGVyCisqIFRJTktFUlBPUC0yNDA4IEl0ZXJhdG9yIGxlYWsgaW4gSGFzQ29udGFpbmVyCisqIFRJTktFUlBPUC0yNDA5IGpzOiBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIG5ldmVyIHRpbWVzIG91dCBpZiBzZXJ2ZXIgdXJpIG5vdCBhdmFpbGFibGUuCisqIFRJTktFUlBPUC0yNDEwIEZyZWUgdXAgc2VydmVyIHRocmVhZHMgd2hlbiBjbGllbnQgaXMgY2xvc2VkCisqIFRJTktFUlBPUC0yNDI1IFNlcnZlciBjbG9zZXMgSFRUUCBjb25uZWN0aW9uIGZvciBrZWVwQWxpdmUgYXMgdHJ1ZQorKiBUSU5LRVJQT1AtMjQzMiBHZW5lcmF0ZSBjb3JyZWN0IHRvU3RyaW5nKCkgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWNvZGUgaW4gSmF2YXNjcmlwdAorKiBUSU5LRVJQT1AtMjQzMyB0eXBvIGluIGphdmFkb2NzIG1hdGNoKCkgVHlwZSBQYXJhbWV0ZXJzCisqIFRJTktFUlBPUC0yNDM1IEdyZW1saW4gUHl0aG9uIHN1Z2FyIHN5bnRheCBmb3IgdmFsdWVzKCkgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCBwcm9ibGVtcworKiBUSU5LRVJQT1AtMjQzNyBncmVtbGluLWRyaXZlciBoYW5ncyBpZiBSZXN1bHRTZXQuc3RhdHVzQXR0cmlidXRlcygpLmdldCgpIGlzIGNhbGxlZCB3aGVuIHRoZSByZXF1ZXN0IHRocm93cworKiBUSU5LRVJQT1AtMjQzOSBQIGFuZCBUZXh0UCB0b1N0cmluZygpIGlzIGJyb2tlbgorKiBUSU5LRVJQT1AtMjQ1OCBCeXRlY29kZSBCaW5kaW5ncyBsb3N0IHdoZW4gZm9sbG93ZWQgYnkgYSBjaGlsZCB0cmF2ZXJzYWwKKyogVElOS0VSUE9QLTI0NjUgVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlRnJvbVJlc291cmNlIGZpbGUgaGFuZGxpbmcgaXMgaW52YWxpZCBvbiB3aW5kb3dzCisqIFRJTktFUlBPUC0yNDc1IEJhcnJpZXIgc3RlcCB0b3VjaGVzIG9uZSBtb3JlIGVsZW1lbnQgb2YgbmV4dCBsb29wCisqIFRJTktFUlBPUC0yNDc4IENvbnNvbGUgYnl0ZSBjb2RlIHRyYW5zbGF0b3IgaGFzIGlzc3VlcyB3aXRoICJuZXcgRGF0ZSgpIgorKiBUSU5LRVJQT1AtMjQ5NiBHcmVtbGluRHNsUHJvY2Vzc29yIGZhaWxzIHdoZW4gU29jaWFsVHJhdmVyc2FsU291cmNlRHNsIG92ZXJyaWRlcyBjbG9zZQorKiBUSU5LRVJQT1AtMjUwNSBHcmVtbGluIFB5dGhvbiBDbGllbnQgUXVlcnkgVGltZXMgb3V0IGF0IDMwIHNlY29uZHMgaW5zdGVhZCBvZiB0aGUgc2VydmVyIHRpbWVvdXQKKyogVElOS0VSUE9QLTI1MTIgRHVwbGljYXRlIGphcnMgaW4gY2xhc3NwYXRoIHdoZW4gcnVubmluZyBncmVtbGluLXNlcnZlci5zaAorKiBUSU5LRVJQT1AtMjUxMyBHZW5lcmljcyBpbnN1ZmZpY2llbnRseSBzdHJpY3Qgb24gcHJvcGVydHkoKQorKiBUSU5LRVJQT1AtMjUxNCBKYXZhIGNsaWVudCBkcml2ZXIgcmVxdWVzdHMgd2l0aCBzYW1lIHJlcXVlc3QgaWRzIGhhbmcKKyogVElOS0VSUE9QLTI1MTYgUHJvcGVydHkgZm9sZGluZyBoYXMgdHJvdWJsZSB3aXRoIGNvYWxlc2NlCisqIFRJTktFUlBPUC0yNTI5IEdsb2JhbCBkZWR1cCgpIGluIHJlZHVjaW5nIGJ5KCkgb2YgZ3JvdXAoKSBkZXRhY2hlcyBlbGVtZW50cyBmb3IgT0xUUAorKiBUSU5LRVJQT1AtMjUzMSBHcmVtbGluIC5ORVQgZHJpdmVyIENvbm5lY3Rpb25Qb29sIGNhbiByZW1haW4gd2l0aG91dCBjb25uZWN0aW9ucyBpZiBzZXJ2ZXIgaXMgZG93biBmb3IgMS0yIG1pbnV0ZXMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtNzA5IENvbnNpZGVyIEJvdW5kaW5nIEdyZW1saW4gUG9vbCBRdWV1ZSBTaXplCisqIFRJTktFUlBPUC0xMDg0IEJyYW5jaCBvcHRpb24gdG9rZW5zIHNob3VsZCBiZSBhbGxvd2VkIHRvIGJlIHRyYXZlcnNhbHMuCisqIFRJTktFUlBPUC0xNTUzIERlcHJlY2F0ZSBzdG9yZSgpIGluIGZhdm9yIG9mIGFnZ3JlZ2F0ZShTY29wZSkKKyogVElOS0VSUE9QLTE1NjggQ2hhbmdlIHN0cmF0ZWd5IGFwcGxpY2F0aW9uIG9yZGVyICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMTY0MSBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiBmb3IgZ3JlbWxpbi1weXRob24KKyogVElOS0VSUE9QLTE2ODIgYnktbW9kdWxhdG9yIG9wdGltaXphdGlvbiBzdHJhdGVneQorKiBUSU5LRVJQT1AtMTczMyBoYXNLZXksIGhhc1ZhbHVlcyBzaG91bGQgd29yayBvbiBFbGVtZW50IGFuZCBQcm9wZXJ0eQorKiBUSU5LRVJQT1AtMTgxMCBBZGQgTGFtYmRhLmJpbmFyeU9wZXJhdG9yIGFuZCBMYW1iZGEudW5hcnlPcGVyYXRvcgorKiBUSU5LRVJQT1AtMTgzOCBQeXRob24gc2FtcGxlIHNjcmlwdAorKiBUSU5LRVJQT1AtMTg4NiBHcmVtbGluIFB5dGhvbiBkcml2ZXIgdG8gcGVyaW9kaWNhbGx5IGlzc3VlIHBpbmcgLyBoZWFydGJlYXQgdG8gZ3JlbWxpbiBzZXJ2ZXIKKyogVElOS0VSUE9QLTE5MjEgU3VwcG9ydCBoYXNOZXh0IHRlcm1pbmFsIHN0ZXAgaW4gR0xWcworKiBUSU5LRVJQT1AtMTk5NCBMYXp5QmFycmllclN0cmF0ZWd5IGZ1bGx5IHJlc3BvbnNpYmxlIGZvciBiYXJyaWVyKCkgYWRkaXRpb25zCisqIFRJTktFUlBPUC0yMDAxIFN1cHBvcnQgbGFtYmRhcyBpbiBKYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yMDE0IEFsbG93IGFuIGFiaWxpdHkgdG8gc3BlY2lmeSBzZWVkaW5nIGZvciByYW5kb20gbWV0aG9kcyBzdWNoIGFzIGNvaW4sIHNhbXBsZSBhbmQgT3JkZXIuc2h1ZmZsZQorKiBUSU5LRVJQT1AtMjAyMCBTdXBwb3J0IHdpdGhDb21wdXRlcigpIGZvciBqYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yMDQ2IEdyZW1saW4tUHl0aG9uOiBTdXBwb3J0IGN1c3RvbSByZXF1ZXN0IGhlYWRlcnMgaW4gV2ViU29ja2V0IHJlcXVlc3QKKyogVElOS0VSUE9QLTIwNTQgU3VwcG9ydCBUcmF2ZXJzYWxTdHJhdGVneSBzcGVjaWZpY2F0aW9uIGluIGdyZW1saW4tamF2YXNjcmlwdAorKiBUSU5LRVJQT1AtMjA3NiBCdWlsZCB3aXRoIEphdmEgMTEKKyogVElOS0VSUE9QLTIwODAgUmVtb3ZlIGRlcHJlY2F0ZWQgVHJhdmVyc2FsU291cmNlLndpdGhSZW1vdGUoKSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIwOTkgUHJvcGVydHkgc2V0dGluZyB3aXRoIG51bGwgaGFzIGRpZmZlcmVudCBiZWhhdmlvciBiZXR3ZWVuIGFkZCBhbmQgdXBkYXRlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjEzMyBVc2UgbmVvNGogaW5kZXggbG9va3VwIGluIE5lbzRqR3JhcGhTdGVwIHdpdGggSGFzQ29udGFpbmVycyBjb250YWluaW5nIFRleHRQIHByZWRpY2F0ZXMKKyogVElOS0VSUE9QLTIxNjggR3JhcGhTT046IFAgZGVzZXJpYWxpemF0aW9uIHNob3VsZCBiZSBvcHRpbWl6ZWQKKyogVElOS0VSUE9QLTIyMTMgUmVwbGFjZSBzY3JpcHRFdmFsdWF0aW9uVGltZW91dCBpbiBmYXZvciBvZiBzb21ldGhpbmcgbW9yZSBzdWl0YWJsZSB0byBieXRlY29kZQorKiBUSU5LRVJQT1AtMjIxNSBCZXR0ZXIgZXhjZXB0aW9uIG1lc3NhZ2UgZm9yIGNvbm5lY3Rpb24gcHJvYmxlbXMKKyogVElOS0VSUE9QLTIyMjMgVXBkYXRlIGphY2tzb24gZGF0YWJpbmQgdG8gMi45LjkKKyogVElOS0VSUE9QLTIyMzEgUmVtb3ZlIGRlcHJlY2F0ZWQgYnVsayBkdW1waW5nL2xvYWRpbmcgVmVydGV4UHJvZ3JhbXMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMjMzIFJlbW92ZSBkZXByZWNhdGVkIE9yZGVyIGRlY3IvaW5jciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIyMzUgQmV0dGVyIGhhbmRsZSB0aGUgY29uY2VwdCBvZiBudWxsIGluIHRyYXZlcnNhbHMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMjM2IEltcHJvdmUgZXJyb3IgbWVzc2FnaW5nIGZvciBUaW5rZXJHcmFwaCBJZE1hbmFnZXJzIHRoYXQgZmFpbCBvbiBjb252ZXJzaW9ucworKiBUSU5LRVJQT1AtMjIzNyBQcmV2ZW50IGVycm9yIHdoZW4gY2xvc2luZyBzZXNzaW9ucyB0aGF0IGRvbid0IGV4aXN0ICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjIzOSBSZW1vdmUgcHJldmlvdXNseSBkZXByZWNhdGVkIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMjQyIEJ1bXAgdG8gbmV0dHkgNC4xLjM2CisqIFRJTktFUlBPUC0yMjQzIEFkZCB1c2VyLWFnZW50IHRvIFJlcXVlc3RPcHRpb25zCisqIFRJTktFUlBPUC0yMjQ1IENvbnNvbGlkYXRlIHRoZSBleGVjdXRvciBmb3IgYnl0ZWNvZGUgJiBzdHJpbmcgYmFzZWQgY2xpZW50CisqIFRJTktFUlBPUC0yMjQ2IENvbnNvbGlkYXRlIHRoZSBlcnJvciBwcm9wYWdhdGlvbiB0byB0aGUgY2xpZW50CisqIFRJTktFUlBPUC0yMjUwIFN1cHBvcnQgdG9TdHJpbmcgc2VyaWFsaXphdGlvbiBpbiBHcmFwaEJpbmFyeQorKiBUSU5LRVJQT1AtMjI1MSBSZW1vdmUgZGVwcmVjYXRlZCBWZXJ0ZXhQcm9ncmFtLXJlbGF0ZWQgbWV0aG9kcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIyNTIgQSBtZWFuaW5nZnVsIHdheSB0byBzdXBwb3J0IHNlc3Npb24gYmFzZWQgYnl0ZUNvZGUgaW50ZXJhY3Rpb24gdGhyb3VnaCBncmVtbGluLWRyaXZlcgorKiBUSU5LRVJQT1AtMjI1NCBSZW5hbWUgQWdncmVnYXRlU3RlcCBhbmQgU3RvcmVTdGVwIGdpdmVuIGFnZ3JlZ2F0ZShTY29wZSxTdHJpbmcpICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjI1NiBwcm9jZXNzQWxsU3RhcnRzIG9mIEFnZ3JlZ2F0ZVN0ZXAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYmFycmllciBpcyBlbXB0eQorKiBUSU5LRVJQT1AtMjI1OSBEZWZhdWx0IEphdmEgYmFzZWQgZHJpdmVyIGFuZCBzZXJ2ZXIgb3BlcmF0aW9ucyB0byBHcmFwaEJpbmFyeSBhbmQgcmVtb3ZlIEdyeW8gKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMjYwIFVwZGF0ZSBqYWNrc29uIGRhdGFiaW5kIDIuOS45LjEKKyogVElOS0VSUE9QLTIyNjIgSW1wcm92ZSBOZXR0eSBwcm90b2NvbCBoYW5kbGluZworKiBUSU5LRVJQT1AtMjI2NSBEZXByZWNhdGUgVHJhdmVyc2FsLmdldFNpZGVFZmZlY3RzKCkgZnVuY3Rpb25hbGl0eSBmb3IgcmVtb3RpbmcgcHVycG9zZXMKKyogVElOS0VSUE9QLTIyNjkgUmVtb3ZlIHJlbW90ZSBzaWRlLWVmZmVjdCByZWxhdGVkIGluZnJhc3RydWN0dXJlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjI3MCBEZXByZWNhdGUgbXVsdGkvbWV0YXByb3BlcnR5IHN1cHBvcnQgaW4gTmVvNGoKKyogVElOS0VSUE9QLTIyNzEgQWRkIGNvbnNvbGUgcHJlZmVyZW5jZSB0byBjb250cm9sIHNlcnZlci1vcmlnaW5hdGVkIHdhcm5pbmcgZGlzcGxheQorKiBUSU5LRVJQT1AtMjI3MiBSZW5hbWUgc3RlcHMgYW5kIHRva2VucyB0aGF0IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgcHl0aG9uIGZ1bmN0aW9ucworKiBUSU5LRVJQT1AtMjI3MyBSZW1vdmUgZGVwcmVjYXRlZCBSZXNwb25zZUhhbmRsZXJDb250ZXh0IGluZnJhc3RydWN0dXJlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjI3NyBQeXRob24gc2RrIHBvc3Rwb25lIHRoZSB0aW1pbmcgdG8gY3JlYXRlIHRyYW5zcG9ydAorKiBUSU5LRVJQT1AtMjI3OSBHcmFwaEJpbmFyeSBzdXBwb3J0IGluIFB5dGhvbgorKiBUSU5LRVJQT1AtMjI4MCBQcmV2ZW50IHVzZSBvZiBUIHZhbHVlcyBhcyBwcm9wZXJ0eSBrZXkgb3ZlcmxvYWRzCisqIFRJTktFUlBPUC0yMjg0IE1ha2UgaXQgZWFzaWVyIHRvIHJldHVybiBtb3JlIHN0cnVjdHVyZSBvZiBncmFwaCBlbGVtZW50cworKiBUSU5LRVJQT1AtMjI5NSBSZW1vdmUgZGVwcmVjYXRlZCBzY3JpcHRFdmFsdWF0aW9uVGltZW91dCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIyOTYgUGVyIHF1ZXJ5IHRpbWVvdXQgbm90IHdvcmtpbmcgZnJvbSBQeXRob24KKyogVElOS0VSUE9QLTIzMDIgQWRkIGlzT25HcmFwaENvbXB1dGVyKCkgZmllbGQgYWNjZXNzb3IgdG8gRWxlbWVudE1hcFN0ZXAKKyogVElOS0VSUE9QLTIzMDcgQWRkIGJldHRlciBlcnJvciBtZXNzYWdlIGZvciBiYWRseSBjb25maWd1cmVkIENoYW5uZWxpemVyCisqIFRJTktFUlBPUC0yMzEwIFJlZHVjZSBUcmF2ZXJzYWwuaXNSb290KCkgdG8gYSBjaGVjayBvZiBFbXB0eVN0ZXAgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yMzExIFRyYXZlcnNhbFN0cmF0ZWdpZXMgaW1wbGVtZW50aW5nIEl0ZXJhYmxlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjMxMiBFbXB0eSBrZXlzIHRvIGdyb3VwKCkgc2hvdWxkIGdyb3VwIHRvIG51bGwKKyogVElOS0VSUE9QLTIzMTQgRW1wbG95IGJ5KFN0cmluZykgZm9yIE1hcCB3aGVuIHBvc3NpYmxlIGFuZCBpbXByb3ZlIGVycm9ycyBhcm91bmQgaW5jb3JyZWN0IHR5cGVzCisqIFRJTktFUlBPUC0yMzE1IEltcGxlbWVudCBzb21lIGZvcm0gb2YgY2xvbmUoKSBvciByZXNldCgpIGZvciBUcmF2ZXJzYWwgaW4gR0xWcworKiBUSU5LRVJQT1AtMjMxNyBSZW1vdmUgUHl0aG9uIDIgc3VwcG9ydCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIzMjAgW1NFQ1VSSVRZXSBYTUxJbnB1dEZhY3RvcnkgaW5pdGlhbGl6YXRpb24gaW4gR3JhcGhNTFJlYWRlciBpbnRyb2R1Y2VzCisqIFRJTktFUlBPUC0yMzI1IEdlbmVyYXRlIHRyYXZlcnNhbHMgdGhhdCB3aWxsIGJldHRlciB5aWVsZCBpbmRleCBsb29rdXBzIHdpdGggU1BBUlFMCisqIFRJTktFUlBPUC0yMzI3IFJlbW92ZSBkZXByZWNhdGVkIE5JTyBwcm90b2NvbCBzdXBwb3J0ICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjMyOCBEbyBub3QgY2xvc2UgYWxsIGNvbm5lY3Rpb25zIGlmIGp1c3Qgb25lIGhhcyBiZWNhbWUgY2xvc2VkCisqIFRJTktFUlBPUC0yMzM1IERyb3Agc3VwcG9ydCBmb3Igb2xkZXIgR0xWIHJ1bnRpbWVzCisqIFRJTktFUlBPUC0yMzM2IEFsbG93IGNsb3NlIG9mIGNoYW5uZWwgd2l0aG91dCBoYXZpbmcgdG8gd2FpdCBmb3Igc2VydmVyCisqIFRJTktFUlBPUC0yMzQ5IFN3aXRjaCBmcm9tIE5ld3RvbnNvZnQuSnNvbiB0byBTeXN0ZW0uVGV4dC5Kc29uICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjM1NCBEb2N1bWVudCByZWNvbW1lbmRhdGlvbiB0byByZXVzZSBncmFwaCB0cmF2ZXJzYWwgc291cmNlCisqIFRJTktFUlBPUC0yMzU2IEJ1bXAgdG8gSmFja3NvbiAyLjEwLngKKyogVElOS0VSUE9QLTIzNTcgQWRkIGEgY29tbWFuZCB0byBjbGVhciB0aGUgR3JlbWxpbiBDb25zb2xlIHNjcmVlbgorKiBUSU5LRVJQT1AtMjM2MSBQcmV2ZW50IHVzaW5nIEdyYXBoVHJhdmVyc2FsU291cmNlIHNwYXduZWQgdHJhdmVyc2FscyBhcyBjaGlsZHJlbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTIzNzEgQWRkIHBvc3NpYmlsaXR5IHRvIGltcG9ydCBjb25zdGFudHMgd2l0aCBJbXBvcnRHcmVtbGluUGx1Z2luCisqIFRJTktFUlBPUC0yMzc2IFByb2JhYmlsaXR5IGRpc3RyaWJ1dGlvbiBjb250cm9sbGVkIGJ5IHdlaWdodCB3aGVuIHVzaW5nIHNhbXBsZSBzdGVwCisqIFRJTktFUlBPUC0yMzc3IEludmVzdGlnYXRlIGludGVybWl0dGVudCAuTkVUIEdMViB0ZXN0IGZhaWx1cmVzCisqIFRJTktFUlBPUC0yMzg5IEF1dGhvcml6YXRpb24gc3VwcG9ydCBpbiBUaW5rZXJQb3AKKyogVElOS0VSUE9QLTIzOTEgRHJvcCBHTFYgVGVtcGxhdGluZyBTeXN0ZW0KKyogVElOS0VSUE9QLTIzOTIgSW1wcm92ZSBtb2R1bGUgbGV2ZWwgZG9jdW1lbnRhdGlvbiBmb3IgR0xWcworKiBUSU5LRVJQT1AtMjM5NCBVbmFibGUgdG8gdXNlIF9fIGNsYXNzIG9mIGEgY3VzdG9tIERTTCB3aGVuIHBhc3NpbmcgYSBzY3JpcHQgZXZlbiBpZiB0aGlzIGNsYXNzIGlzIGltcG9ydGVkICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjM5NSBHcmVtbGluIFB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgbGlzdCBhcyBrZXlzIGluIGdyb3VwQ291bnQKKyogVElOS0VSUE9QLTIzOTYgVHJhdmVyc2VyU2V0IHNob3VsZCBiZSBleHRlbmRhYmxlIGZvciBHcmFwaERCIHByb3ZpZGVyCisqIFRJTktFUlBPUC0yMzk3IERvbid0IGNyZWF0ZSB0aGUgZGVmYXVsdCBHeXJvIHNlcmlhbGl6ZXIgaWYgdGhlIGNhbGxlciBzcGVjaWZpZXMgYSBkaWZmZXJlbnQgb25lCisqIFRJTktFUlBPUC0yNDAxIFVwZ3JhZGUgSmFja3Nvbi1kYXRhYmluZCB0byAyLjExLngKKyogVElOS0VSUE9QLTI0MDYgRGVsZWdhdGUgcHJvY2Vzc2luZyBmcm9tIGV2ZW50IGxvb3AgdG8gd29ya2VyIHRocmVhZHMKKyogVElOS0VSUE9QLTI0MDcgU3VwcG9ydCBkZXNlcmlhbGl6YXRpb24gb2YgYSBkaWN0IHRoYXQgaGFzIGEgZGljdCBhcyBhIGtleQorKiBUSU5LRVJQT1AtMjQxMiBBZGQgbWlzc2luZyBxdWVyeSB0ZXN0cworKiBUSU5LRVJQT1AtMjQxMyBQcmVmZXIgd2l0aEVtYmVkZGVkKCkgdG8gd2l0aEdyYXBoKCkgb24gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlCisqIFRJTktFUlBPUC0yNDE1IEF2b2lkIHVubmVjZXNzYXJ5IGRldGFjaGVkIG9iamVjdHMgaWYgbm90IHJlcXVpcmVkCisqIFRJTktFUlBPUC0yNDE2IE11bHRpSXRlcmF0b3Igc2hvdWxkIGltcGxlbWVudCBBdXRvQ2xvc2VhYmxlCisqIFRJTktFUlBPUC0yNDE4IFN0b3JlIGF1dGhlbnRpY2F0ZWQgdXNlciBvbiBzZXJ2ZXIgcGlwZWxpbmUKKyogVElOS0VSUE9QLTI0MjAgU3VwcG9ydCBwZXIgcXVlcnkgcmVxdWVzdCBvcHRpb25zIGluIC5ORVQKKyogVElOS0VSUE9QLTI0MjEgU3VwcG9ydCBwZXIgcXVlcnkgb3B0aW9ucyBpbiBqYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yNDI2IFVzZSBOZXR0eSdzIFdlYlNvY2tldENsaWVudFByb3RvY29sSGFuZGxlcgorKiBUSU5LRVJQT1AtMjQyNyBTaW1wbGlmeSBOZXR0eSByZWZlcmVuY2UgY291bnRpbmcKKyogVElOS0VSUE9QLTI0MzAgTG9vcGluZyBSZWNpcGllcworKiBUSU5LRVJQT1AtMjQzMSBPcGVyYXRpbmcgb24gRHJvcHBlZCBFbGVtZW50cyBSZWNpcGVzCisqIFRJTktFUlBPUC0yNDM2IFRoZSBncmVtbGluIHNlcnZlciBzdGFydHMgZXZlbiBpZiBhbGwgZ3JhcGhzIGluc3RhbnRpYXRpb24gaGFzIGZhaWxlZAorKiBUSU5LRVJQT1AtMjQzOCBQcm92aWRlIGEgd2F5IGZvciBzY3JpcHRzIHRvIHJlc3BlY3Qgd2l0aCgpIHNwZWNpZmljYXRpb24gb2YgdGltZW91dAorKiBUSU5LRVJQT1AtMjQ0MCBTaW1wbGlmeSBkcml2ZXIgYnkgZGVsZWdhdGluZyBrZWVwQWxpdmUgbG9naWMgdG8gTmV0dHkKKyogVElOS0VSUE9QLTI0NDEgQWRkIGNvbXByZXNzaW9uIHRvIFdlYlNvY2tldCBmcmFtZXMgc2VudCBmcm9tIGNsaWVudAorKiBUSU5LRVJQT1AtMjQ0MiBNYWtlIFRyYW5zbGF0b3JzIHRoYXQgd29yayBpbiBKYXZhIHBhcnQgb2YgZ3JlbWxpbi1jb3JlCisqIFRJTktFUlBPUC0yNDQzIEltcHJvdmUgdGVzdGluZyBvZiBUcmFuc2xhdG9yIGluc3RhbmNlcyBmb3Igbm9uLUpWTSBsYW5ndWFnZXMgd2l0aCBmb2N1cyBvbiBQeXRob24gYXMgYSBtb2RlbAorKiBUSU5LRVJQT1AtMjQ0NSBTcGVlZCB1cCBjbGllbnQgaW5pdGlhbGl6YXRpb24gKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNDQ2IEFkZCBSZWNpcGUgZm9yIE9wdGlvbmFsIExvb3BpbmcKKyogVElOS0VSUE9QLTI0NDcgSW1wcm92ZSBoYW5kbGluZyBvZiBTdGFja092ZXJmbG93RXJyb3IgZm9yIGxvbmcgdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMjQ1MSBKYXZhc2NyaXB0VHJhbnNsYXRvciBmb3IgSmF2YQorKiBUSU5LRVJQT1AtMjQ1MiBEb3ROZXRUcmFuc2xhdG9yIGZvciBKYXZhCisqIFRJTktFUlBPUC0yNDUzIEFkZCBXZWJTb2NrZXQgY29tcHJlc3Npb24gdG8gZ3JlbWxpbi1weXRob24KKyogVElOS0VSUE9QLTI0NTUgUmVtb3ZlIGRlcHJlY2F0ZWQgY3VzdG9tIGtlZXAtYWxpdmUgZnVuY3Rpb25hbGl0eSBpbiB0aGUgSmF2YSBkcml2ZXIgQ2hhbm5lbGl6ZXIgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNDU3IEFkZCBhIG1heF9jb250ZW50X2xlbmd0aCBwYXJhbWV0ZXIgdG8gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBpbiB0aGUgUHl0aG9uIGNsaWVudAorKiBUSU5LRVJQT1AtMjQ2MCBDaGFuZ2UgZ3Jvb3Z5IHRvIHByb3ZpZGVkIHNjb3BlIGluIGdyZW1saW4tZHJpdmVyICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjQ2MSBBbGlnbiBDb3JlSW1wb3J0cyB3aXRoIEdyb292eVRyYW5zbGF0b3IKKyogVElOS0VSUE9QLTI0NjIgRHVwbGljYXRlZCBCeXRlY29kZVV0aWwgYW5kIEJ5dGVjb2RlSGVscGVyIGNsYXNzZXMKKyogVElOS0VSUE9QLTI0NjYgSW1wcm92ZSBzeW50YXggZm9yIEdyb292eSBzY3JpcHRzIHRoYXQgdXNlIHdpdGhTdHJhdGVnaWVzKCkKKyogVElOS0VSUE9QLTI0NjggU3RhYmlsaXplIHNob3VsZFByb2Nlc3NTZXNzaW9uUmVxdWVzdHNJbk9yZGVyKCkgdGVzdAorKiBUSU5LRVJQT1AtMjQ2OSBLcmJFeGNlcHRpb24gLSBQcmluY2lwYWwgZG9lcyBub3QgZXhpc3QgaW4gdGVzdAorKiBUSU5LRVJQT1AtMjQ3MCBCdW1wIGdyZW1saW5weXRob24gdG8gdG9ybmFkbyA2LngKKyogVElOS0VSUE9QLTI0NzIgR3JhcGhCaW5hcnkgc3VwcG9ydCBpbiAuTkVUCisqIFRJTktFUlBPUC0yNDczIFByZXZlbnQgVHJhdmVyc2FsU3RyYXRlZ3kgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHR5cGUgdG8gYmUgYWRkZWQgdG8gYSBUcmF2ZXJzYWxTb3VyY2UKKyogVElOS0VSUE9QLTI0NzQgd2l0aFNhY2soKSBHcm9vdnkgdHJhbnNsYXRpb24gb3V0cHV0IGNvdWxkIGJlIHNpbXBsaWZpZWQKKyogVElOS0VSUE9QLTI0NzYgUHJvdmlkZSBmdWxseSBzaGFkZWQgdmVyc2lvbiBvZiBKYXZhIGRyaXZlcgorKiBUSU5LRVJQT1AtMjQ3OSBQcm92aWRlIGEgd2F5IHRvIHNldCBhIGN1c3RvbSBHcmFwaFNPTk1hcHBlciBmb3IgOmJ5dGVjb2RlIGNvbW1hbmQKKyogVElOS0VSUE9QLTI0ODEgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kgbm90IGluc3RhbGxlZCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI0ODIgUmVuYW1lIHdzQ29ubmVjdGlvblRpbWVvdXQgdG8gY29ubmVjdGlvblNldHVwVGltZW91dAorKiBUSU5LRVJQT1AtMjQ4NCBQeXRob24gIElPTG9vcCBjbG9zZSBlcnJvcnMKKyogVElOS0VSUE9QLTI0ODUgSW52YWxpZCBodHRwIHRlc3RzIHdpdGggP2dyZW1saW49MS0xCisqIFRJTktFUlBPUC0yNDk0IERvY3VtZW50IFRyYW5zbGF0b3IgcGFyYW1ldGVyIGV4dHJhY3Rpb24gZnVuY3Rpb25hbGl0eQorKiBUSU5LRVJQT1AtMjQ5OSBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5IHJldHVybnMgaW5jb25zaXN0ZW50IHJlc3VsdHMgd2hlbiBtYXRjaCgpIGlzIG5vdCBkZXRlY3RlZCBhcyB0aGUgZmluYWwgc3RlcCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI1MDAgQWRkIG5vbmUoKSBzdGVwIGZvciBhbGwgR0xWcworKiBUSU5LRVJQT1AtMjUwNiBFeHBvc2UgY2xpZW50IFdlYlNvY2tldCBjb25uZWN0aW9uIHN0YXR1cworKiBUSU5LRVJQT1AtMjUxNyBJbnRyb2R1Y2UgYSByZXRyeSBzdGF0dXMgY29kZSB0byB0aGUgc2VydmVyIHByb3RvY29sCisqIFRJTktFUlBPUC0yNTI3IEFkZCBhIEdyb292eVRyYW5zbGF0b3IgZXF1aXZhbGVudCBtZXRob2QgdG8gdGhlIFB5dGhvbiBjbGllbnQKKyogVElOS0VSUE9QLTI1MzAgVHJhbnNmZXIgT3l2aW5kU2Fiby9ncmVtbGludCBhbmQgT3l2aW5kU2Fiby9ncmVtbGludC5jb20gdG8gYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGludAorKiBUSU5LRVJQT1AtMjUzMiBNYXhCYXJyaWVyU2l6ZSBvZiBOb09wQmFycmllclN0ZXAgc2hvdWxkIGJlIGFjY2Vzc2libGUKKyogVElOS0VSUE9QLTI1MzMgRGV2ZWxvcCBhIGdyYW1tYXIgZm9yIEdyZW1saW4KKyogVElOS0VSUE9QLTI1MzUgTmV0dHkgNC4xLjUyIGZsYWdnZWQgYXMgbWVkaXVtIHNlY3VyaXR5IHZpb2xhdGlvbgorKiBUSU5LRVJQT1AtMjUzNyBTdXBwb3J0IGJ5dGVjb2RlIGJhc2VkIHJlcXVlc3RzIGluIHNlc3Npb25zIGFuZCByZW1vdGUgdHgoKQorKiBUSU5LRVJQT1AtMjU0NCBNb2RpZnkgc2l0ZSBwdWJsaXNoaW5nIHNjcmlwdHMgdG8gaW5jbHVkZSBncmVtbGludAorKiBUSU5LRVJQT1AtMjU0NiBDaGFuZ2UgdHJhbnNwb3J0IGxheWVyIHRvIHVzZSBBSU9IVFRQIGluc3RlYWQgb2YgVG9ybmFkbworKiBUSU5LRVJQT1AtMjU0NyBQcm92aWRlIGFuIG9wdGlvbiB0byBzdXBwbHkgYSBjYWxsYmFjayBiZWZvcmUgaGFuZHNoYWtlIHN1Ym1pc3Npb24KKyogVElOS0VSUE9QLTI1NTAgRGVhZGxvY2sgb24gQ2xpZW50IGluaXRpYWxpemF0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNi54LmFzY2lpZG9jIGIvZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3MvY2hhbmdlbG9nLTMuNi54LmFzY2lpZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjMyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2FyY2hpdmUvY2hhbmdlbG9ncy9jaGFuZ2Vsb2ctMy42LnguYXNjaWlkb2MKQEAgLTAsMCArMSw1MTUgQEAKKy8vLy8KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8KKz09IFRpbmtlclBvcCAzLjYuMCAoVGlua2VyaGVhcnQpCisKK2ltYWdlOjpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYXBhY2hlL3RpbmtlcnBvcC9tYXN0ZXIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tdmljdG9yaWFuLnBuZ1t3aWR0aD0xODVdCisKK1tbcmVsZWFzZS0zLTYtOF1dCis9PT0gVGlua2VyUG9wIDMuNi44IChPY3RvYmVyIDIzLCAyMDI0KQorCisqIEZpeGVkIGEgYnVnIGluIEdyZW1saW5TZXJ2ZXIgbm90IHByb3Blcmx5IHByb3BhZ2F0aW5nIGFyZ3VtZW50cyB3aGVuIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQuCisqIEZpeGVkIGJ1ZyBpbiBKYXZhIGRyaXZlciB3aGVyZSBjb25uZWN0aW9uIHBvb2wgd2FzIG5vdCByZW1vdmluZyBkZWFkIGNvbm5lY3Rpb25zIHVuZGVyIGNlcnRhaW4gZXJyb3IgY29uZGl0aW9ucy4KKyogUmFpc2VkIGhhbmRzaGFrZSBleGNlcHRpb25zIGZvciBKYXZhIGRyaXZlciBmb3IgYE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbmAgc2l0dWF0aW9ucy4KKyogVGhlIGRlZmF1bHQgbG9nZ2luZyBsZXZlbCBmb3IgR3JlbWxpbiBDb25zb2xlIGluIFdpbmRvd3MgaXMgc2V0IHRvIHRoZSBzYW1lIFdBUk4gbGV2ZWwgYXMgZm9yIExpbnV4LgorKiBVcGRhdGVkIHRvIERvY2tlciBDb21wb3NlIFYyIHdpdGggYGRvY2tlci1jb21wb3NlYCBjaGFuZ2VkIHRvIGBkb2NrZXIgY29tcG9zZWAgaW4gcG9tIGFuZCBzY3JpcHQgZmlsZXMuCisqIEFkZCBjb21tYW5kIGxpbmUgb3B0aW9uIGAtbGAgdG8gY2hhbmdlIGxvZ2dpbmcgbGV2ZWwgZm9yIEdyZW1saW4gQ29uc29sZSBpbiBXaW5kb3dzLgorKiBBZGQgYGVuYWJsZUNvbXByZXNzaW9uYCBjb25uZWN0aW9uIHNldHRpbmcgdG8gSmF2YSwgUHl0aG9uLCBhbmQgSlMgR0xWcy4KKyogSW5jcmVhc2VkIG1pbmltdW0gcHl0aG9uIHZlcnNpb24gZnJvbSAzLjggdG8gMy45CisqIFVwZ3JhZGVkIGBncmVtbGluLWdvYCB0byBHbyAxLjIyLgorKiBCdW1wIE5ldHR5IHRvIDQuMS4xMDAKKyogQnVtcCBMb2diYWNrIHRvIDEuMi4xMworKiBCdW1wIEl2eSB0byAyLjUuMgorKiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBKYXZhc2NyaXB0IGRyaXZlciB3aGVuIHRoZXJlIGlzIGEgc2VydmVyIGVycm9yIHJlc3BvbnNlLgorKiBUaHJvdyBtb3JlIGRlc2NyaXB0aXZlIGVycm9yIGluIGBncmVtbGluLWdvYCB3aGVuIHJlcXVlc3Qgc2l6ZSBleGNlZWRzIGBXcml0ZUJ1ZmZlclNpemVgCisqIEZpeGVkIGEgbWlzc2luZyBydW50aW1lIGRlcGVuZGVuY3kgaW4gYGdyZW1saW4tcHl0aG9uYAorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMzAzNSBBZGQgZXhwbGljaXQgcHJvcGVydHkoSURpY3Rpb25hcnkpIGZvciAuTkVUCisqIFRJTktFUlBPUC0zMDUwIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gbG9nYmFjay1jb3JlCisqIFRJTktFUlBPUC0zMDUxIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gbG9nYmFjay1jbGFzc2ljCisqIFRJTktFUlBPUC0zMDUyIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gaXZ5CisqIFRJTktFUlBPUC0zMDUzIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgaW4gbmV0dHktY29kZWMtaHR0cDIKKyogVElOS0VSUE9QLTMwNzYgSW5jb3JyZWN0IGhhbmRsaW5nIG9mIGxhcmdlIHJlcXVlc3RzIGluIEdvIEdMVgorKiBUSU5LRVJQT1AtMzA3NyBKYXZhc2NyaXB0IHRyYW5zbGF0b3IgaW5jb3JyZWN0bHkgaGFuZGxlIHF1b3RlcywgbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcworKiBUSU5LRVJQT1AtMzA3OSBUaGUgdGVzdCBgVHJhdmVyc2FsU3RyYXRlZ2llc1Rlc3Qjc2hvdWxkQWxsb3dVc2VyTWFuaXB1bGF0aW9uT2ZHbG9iYWxDYWNoZWAgaXMgbm90IGlkZW1wb3RlbnQsIGFzIGl0IHBhc3NlcyBpbiB0aGUgZmlyc3QgcnVuIGFuZCBmYWlscyBpbiByZXBlYXRlZCBydW5zIGluIHRoZSBzYW1lIGVudmlyb25tZW50LgorKiBUSU5LRVJQT1AtMzA4MSBXaGVuIHVzaW5nIGF1dGhlbnRpY2F0aW9uLCBldmFsdWF0aW9uVGltZW91dCBpcyBpZ25vcmVkCisqIFRJTktFUlBPUC0zMTE2IGFzeW5jX3RpbWVvdXQgbm90IGRlY2xhcmVkIGluIGdyZW1saW5weXRob24gZGVwZW5kZW5jaWVzCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTI3MDAgV2ViU29ja2V0IGNvbXByZXNzaW9uIG1heSBsZWFkIHRvIGF0dGFja3MgKENSSU1FIC8gQlJFQUNIKQorKiBUSU5LRVJQT1AtMzA4NiBVcGdyYWRlIGdyZW1saW4tcHl0aG9uIHRvIG5ld2VyIFB5dGhvbiBpbnRlcnByZXRlcgorKiBUSU5LRVJQT1AtMzA5OCBHcmVtbGluIENvbnNvbGUgYmF0IGZpbGUgaXMgbWlzc2luZyBsb2cgbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb24KKworW1tyZWxlYXNlLTMtNi03XV0KKz09PSBUaW5rZXJQb3AgMy42LjcgKEFwcmlsIDgsIDIwMjQpCisKKyogRml4ZWQgYSBidWcgaW4gR3JlbWxpbi5OZXQgZm9yIC5ORVQgOCB0aGF0IGxlZCB0byBleGNlcHRpb25zOiBgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbjogRW51bWVyYXRpb24gaGFzIG5vdCBzdGFydGVkLiBDYWxsIE1vdmVOZXh0LmAKKyogRml4ZWQgbWVzc2FnZSByZXF1ZXN0SWQgc2VyaWFsaXphdGlvbiBpbiBgZ3JlbWxpbi1weXRob25gLgorKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBgUGF0aFJldHJhY3Rpb25TdHJhdGVneWAgZm9yIHRyYXZlcnNhbHMgdGhhdCBjYXJyeSBtYW55IGNoaWxkcmVuLCBidXQgZG9uJ3QgaG9sZCBtYW55IGxhYmVscyB0byBwcm9wb2dhdGUuCisqIEZpeGVkIGJ1ZyBpbiBieXRlY29kZSB0cmFuc2xhdGlvbiBvZiBgZy50eCgpLmNvbW1pdCgpYCBhbmQgYGcudHgoKS5yb2xsYmFjaygpYCBpbiBhbGwgbGFuZ3VhZ2VzLgorKiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGZyb20gYEphdmFUcmFuc2xhdG9yYCBieSBpbmNsdWRpbmcgZXhjZXB0aW9uIHNvdXJjZS4KKyogQWRkZWQgbWlzc2luZyBgc2hvcnRgIHNlcmlhbGl6YXRpb24gKGBneDpJbnQxNmApIHRvIEdyYXBoU09OVjIgYW5kIEdyYXBoU09OVjMgaW4gYGdyZW1saW4tcHl0aG9uYC4KKyogQWRkZWQgdGVzdHMgZm9yIGVycm9yIGhhbmRsaW5nIGZvciBHTFYncyBpZiBgdHguY29tbWl0KClgIGlzIGNhbGxlZCByZW1vdGVseSBmb3IgZ3JhcGhzIHdpdGhvdXQgdHJhbnNhY3Rpb25zIHN1cHBvcnQuCisqIEludHJvZHVjZWQgbXVsdGktYXJjaGl0ZWN0dXJlIEFNRDY0L0FSTTY0IGRvY2tlciBpbWFnZXMgZm9yIGdyZW1saW4tY29uc29sZS4KKyogRml4ZWQgYnVnIGluIGBKYXZhVHJhbnNsYXRvcmAgd2hlcmUgYGhhcyhTdHJpbmcsIG51bGwpYCBjb3VsZCBjYWxsIGBoYXMoU3RyaW5nLCBUcmF2ZXJzYWwpYCB0byBnZW5lcmF0ZSBhbiBlcnJvci4KKyogRml4ZWQgaXNzdWUgd2hlcmUgc2VydmVyIGVycm9ycyB3ZXJlbid0IGJlaW5nIHByb3Blcmx5IHBhcnNlZCB3aGVuIHNlbmRpbmcgYnl0ZWNvZGUgb3ZlciBIVFRQLgorKiBJbXByb3ZlZCBgQnVsa3NldGAgY29udGFpbnMgY2hlY2sgZm9yIGVsZW1lbnRzIGlmIGFsbCBlbGVtZW50cyBpbiBgQnVsa3NldGAgYXJlIG9mIHRoZSBzYW1lIHR5cGUuCisqIEZpeGVkIGJ1ZyBpbiBgRWFybHlMaW1pdFN0cmF0ZWd5YCB3aGljaCB3YXMgdG9vIGFnZ3Jlc3NpdmUgd2hlbiBwcm9tb3RpbmcgYGxpbWl0KClgIGJlZm9yZSBgbWFwKClgLgorKiBQcmV2ZW50ZWQgbWlkLXRyYXZlcnNhbCBgbWVyZ2VFKClgIGFuZCBgbWVyZ2VWKClgIGZyb20gb3BlcmF0aW5nIG9uIGFuIGluY29taW5nIGBUcmF2ZXJzZXJgIHRoYXQgY29udGFpbnMgYW4gYEVsZW1lbnRgLgorKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiB0aGUgYXBwbGljYXRpb24gb2YgYEZpbHRlclJhbmtpbmdTdHJhdGVneWAgZm9yIGxhcmdlIHRyYXZlcnNhbHMgd2l0aCBkZWVwbHkgbmVzdGVkIHRyYXZlcnNhbHMgYnkgaW1wcm92aW5nIHRoZSBjYWNoZSBvcGVyYXRpb24uCisqIFVwZGF0ZWQgYWxpYXNlZCBjbGllbnQgdG8gcGFzcyBhbG9uZyBvcHRpb25zIHZpYSBgd2l0aCgpYCB3aGVuIHN1Ym1pdHRpbmcgdHJhdmVyc2Fscy4KKyogVXBncmFkZWQgYGdyZW1saW4tZ29gIHRvIEdvIDEuMjEuCisqIFVwZ3JhZGVkIGBncmVtbGluLWphdmFzY3JpcHRgIGFuZCBgZ3JlbWxpbnRgIHRvIE5vZGUgMTguMTcuMC4KKyogQWxsb3dlZCBwdWJsaWMgYWNjZXNzIGZvciBgc2VydmljZU5hbWVgIGFuZCBgbWVyZ2VkUGFyYW1zYCBpbiBgQ2FsbFN0ZXBgLCBhbmQgY2hlY2tzIG9uIGBQYXJ0aXRpb25TdHJhdGVneWAgdXNhZ2UgaW4gYE1lcmdlU3RlcGAuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0yMzU5IG9uU2h1dERvd24gbm90IGJlaW5nIGNhbGxlZCB3aGVuIGRvY2tlciBjb250YWluZXIgc3RvcHBlZAorKiBUSU5LRVJQT1AtMjkxMyBFbnN1cmUgdGhhdCBpZiB0eC5jb21taXQoKSBpcyBjYWxsZWQgcmVtb3RlbHkgaXQgZG9lcyBub3QgaGFuZyBmb3IgZ3JhcGhzIHdpdGhvdXQgdHJhbnNhY3Rpb25zCisqIFRJTktFUlBPUC0zMDIyIEphdmFUcmFuc2xhdG9yIGZhaWxpbmcgZm9yIGhhcyhTdHJpbmcsIG51bGwpCisqIFRJTktFUlBPUC0zMDI3IFBpY2suYW55IHNob3VsZCBiZSBhbnlfKCkKKyogVElOS0VSUE9QLTMwMjkgR3JlbWxpbi5OZXQ6IFRyYXZlcnNhbCBlbnVtZXJhdGlvbiBmYWlscyBvbiAuTkVUIDgKKyogVElOS0VSUE9QLTMwMzEgQmFkIHRyYW5zbGF0aW9uIGZvciBnLnR4KCkKKyogVElOS0VSUE9QLTMwMzkgSmF2YSBkcml2ZXIgd29uJ3QgcHJvcGFnYXRlIHdpdGggYXJncyB3aGVuIHVzaW5nIGFsaWFzZWQgY2xpZW50IGRpcmVjdGx5CisqIFRJTktFUlBPUC0zMDQ1IEVhcmx5TGltaXRTdHJhdGVneSBpcyB0b28gYWdncmVzaXZlIHRvIHByb21vdGUgTGltaXQgYW5kIHRodXMgY2F1c2luZyBpbmNvcnJlY3QgcmVzdWx0cworKiBUSU5LRVJQT1AtMzA1NCBSZXF1ZXN0SWQgc2VyaWFsaXphdGlvbiBicm9rZW4gaW4gUHl0aG9uIEdMVgorKiBUSU5LRVJQT1AtMzA1NiBtZXJnZUUgaXMgdXBkYXRpbmcgdmVydGljZXMgaW4gY2VydGFpbiBjb25kaXRpb25zCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTI5OTUgQ3JlYXRlIFNhbXBsZSBBcHBsaWNhdGlvbnMgaW4gZWFjaCBHTFYKKyogVElOS0VSUE9QLTMwMjEgUHVibGlzaCBBUk02NCBHcmVtbGluIENvbnNvbGUgSW1hZ2VzCisqIFRJTktFUlBPUC0zMDMwIFVwZGF0ZSB0byAuTkVUIDgKKyogVElOS0VSUE9QLTMwNjggTWFrZSBzZXJ2aWNlTmFtZSBhbmQgbWVyZ2VkUGFyYW1zIHB1YmxpYyBmb3IgcHJvdmlkZXIgdXNhZ2UgaW4gQ2FsbFN0ZXAKKworW1tyZWxlYXNlLTMtNi02XV0KKz09PSBUaW5rZXJQb3AgMy42LjYgKE5vdmVtYmVyIDIwLCAyMDIzKQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS04LCAzLjUuOD4+LgorCisqIEZpeGVkIGEgamF2YWRvYyBjb21tZW50IGluIGBHcmFwaFRyYXZlcnNhbC5ub3QoKWAgbWV0aG9kLgorKiBBbGxvd2VkIGBncmVtbGluLWRyaXZlcmAgdG8gYmUgdXNlZCBvdmVyIEhUVFAgZm9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4KKyogQWRkZWQgdXNlciBhZ2VudCBoYW5kbGluZyB0byBncmVtbGluLXNlcnZlciBmb3IgSFRUUCByZXF1ZXN0cy4KKyogQWxsb3dlZCBgaW8oKWAgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgIi5ncmFwaG1sIiBhcyBhIGZpbGUgZXh0ZW5zaW9uLgorKiBEZXByZWNhdGVkIHRoZSBgSGFuZHNoYWtlSW50ZXJjZXB0b3JgIGluIGZhdm9yIG9mIGEgbW9yZSBnZW5lcmljIGBSZXF1ZXN0SW50ZXJjZXB0b3JgLgorKiBBbGxvd2VkIGBncmVtbGluLXB5dGhvbmAgdG8gYmUgdXNlZCBvdmVyIEhUVFAgZm9yIGV4cGVyaW1lbnRhbCBwdXJwb3Nlcy4KKyogRml4ZWQgdHJhbnNsYXRpb24gb2YgYFBgLCBgVHJhdmVyc2FsU3RyYXRlZ3lgIGFuZCBFbnVtcywgYW5kIGFkZGVkIHRyYW5zbGF0aW9uIGZvciBgVmVydGV4YCwgYEVkZ2VgLCBgVmVydGV4UHJvcGVydHlgLCBsaXN0LCBzZXQsIGRpY3QsIG51bWJlciwgYmluZGluZyBhbmQgbGFtYmRhIGluIEdyb292eSBUcmFuc2xhdG9yIGZvciBQeXRob24uCisqIEZpeGVkIGEgYnVnIGluIGBTdGFyR3JhcGhgIHdoZXJlIGBFZGdlRmlsdGVyYCBkaWQgbm90IHJlbW92ZSBhc3NvY2lhdGVkIEVkZ2UgUHJvcGVydGllcy4KKyogQWRkZWQgR3JlbWxpbiB0cmFuc2xhdG9yIGltcGxlbWVudGF0aW9uIHRvIHRoZSBHbyBHTFYuCisqIEZpeGVkIEdvIHRyYW5zbGF0b3IgdG8gaGFuZGxlIGFycmF5IGFyZ3VtZW50cy4KKyogSW4gR28gR0xWIGBQLldpdGhpbmAgYW5kIGBQLldpdGhvdXRgIGV4dGVuZGVkIHRvIGFjY2VwdCBhcnJheSBhcmd1bWVudHMgc2ltaWxhciB0byBvdGhlciBHTFYncworKiBJbXByb3ZlZCBgU3ViZ3JhcGhTdHJhdGVneWAgYnkgcmVkdWNpbmcgY2hhbmNlIGZvciByZWR1bmRhbnQgZmlsdGVyaW5nIG9mIGFkamFjZW50IHZlcnRpY2VzLgorKiBGaXhlZCBidWcgd2l0aCBmaWx0ZXJpbmcgZm9yIGBncm91cCgpYCB3aGVuIHRoZSBzaWRlLWVmZmVjdCBsYWJlbCB3YXMgZGVmaW5lZCBmb3IgaXQuCisqIFByb2plY3RTdGVwIG5vdyB0aHJvd3MgZXhjZXB0aW9uIHdoZW4gYSBkdXBsaWNhdGUga2V5IGlzIHByb3ZpZGVkIGluIGEgcXVlcnkuCisqIEZpeGVkIGJ1ZyBpbiBgcmVwbGFjZUxvY2FsQ2hpbGRgIHdoZXJlIGNoaWxkIHRyYXZlcnNhbCB3YXMgbm90IGNvcnJlY3RseSBpbnRlZ3JhdGVkLgorKiBGaXhlZCBidWcgaW4gYEVsZW1lbnRJZFN0cmF0ZWd5YCB3aGVyZSB0aGUgb3JkZXIgb2YgYGhhc0lkYCB3YXMgaW1wYWN0aW5nIHByb3BlciBmaWx0ZXJzLgorKiBGaXhlZCBidWcgaW4gdGhlIEphdmEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZm9yIHNlcmlhbGl6YXRpb24gd2hlbiByZWFkaW5nIHNldHRpbmdzIGZyb20gYW4gYElucHV0U3RyZWFtYC4KKyogRml4ZWQgYnVnIGluIGBEb3ROZXRUcmFuc2xhdG9yYCB3aGVyZSBgUGFydGl0aW9uU3RyYXRlZ3lgIHVzYWdlIHdhcyBub3QgdHJhbnNsYXRpbmcgcHJvcGVybHkgd2hlbiBzcGVjaWZ5aW5nIHRoZSBgcmVhZFBhcnRpdGlvbnNgLgorKiBGaXhlZCBidWcgaW4gYFB5dGhvblRyYW5zbGF0b3JgIHdoZXJlIGBTZXRgIHN5bnRheCB3YXMgbm90IGJlaW5nIGdlbmVyYXRlZCBwcm9wZXJseS4KKyogRml4ZWQgYnVnIGluIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGdpdmVuIHRvIGBQYXJ0aXRpb25TdHJhdGVneWAgZm9yIEdvIHRoYXQgcHJldmVudGVkIGByZWFkUGFydGl0aW9uc2AgZnJvbSBiZWhpbmcgc2V0IHByb3Blcmx5LgorKiBGaXhlZCBidWcgd2hlcmUgdGhlIGBwYXJ0aXRpb25LZXlgIHdhcyBub3QgYmVpbmcgd3JpdHRlbiB3aGVuIHVzaW5nIGBQYXJ0aXRpb25TdHJhdGVneWAgd2l0aCBgbWVyZ2VWKClgIGFuZCBgbWVyZ2VFKClgCisqIEFkZGVkIGNoZWNraW5nIGZvciB2YWxpZCBVVUlEIHJlcXVlc3RJZHMgaW4gYGdyZW1saW4tcHl0aG9uYCBhbmQgYGdyZW1saW4tamF2YXNjcmlwdGAuCisqIERvIG5vdCB1c2UgYFhPUmAgZm9yIGhhc2hDb2RlIGNvbXB1dGF0aW9uIG9mIFN0ZXAgd2hlbiBvbmx5IHNpbXBsZSBrZXlzIGFyZSB1c2VkIGFuZCBkdXBsaWNhdGUga2V5cyBhcmUgYWxsb3dlZC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI0MjMgaGFzaENvZGUgY29sbGlzaW9uIGZvciBzdGVwcyB3aXRoIGRpZmZlcmVudCBhdHRyaWJ1dGVzCisqIFRJTktFUlBPUC0yODExIEVsZW1lbnRJZFN0cmF0ZWd5IGRvZXNuJ3QgcmVwbGFjZSBhbGwgcmVmZXJlbmNlcyBvZiBhbiBlbGVtZW50J3MgaWQgd2l0aCB0aGUgc3BlY2lmaWVkIGN1c3RvbSBpZCBwcm9wZXJ0eQorKiBUSU5LRVJQT1AtMjkyMSBGaWx0ZXJzIG5vdCB3b3JraW5nIHdoZW4gc2lkZS1lZmZlY3QgaXMgdXNlZCB3aXRoIGdyb3VwKCkKKyogVElOS0VSUE9QLTI5NzYgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbjogQ29sbGVjdGlvbiB3YXMgbW9kaWZpZWQgaW4gR3JhcGhCaW5hcnkgc2VyaWFsaXphdGlvbgorKiBUSU5LRVJQT1AtMjk4MyBVcGdyYWRlIE5ldHR5IGZvciBTZWN1cml0eSBSZWFzb25zCisqIFRJTktFUlBPUC0yOTk2IEdvbGFuZyBUcmFuc2xhdG9yIGluIGNvcmUgZG9lcyBub3QgcHJvcGVybHkgdHJhbnNsYXRlIGxpc3QgYXJndW1lbnRzCisqIFRJTktFUlBPUC0zMDAxIEdyZW1saW4gQ29uc29sZSBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBzZXJpYWxpemVycyBmaWVsZAorKiBUSU5LRVJQT1AtMzAwOSBTdWJncmFwaFN0cmF0ZWd5IHByb2R1Y2VzIGV4Y2Vzc2l2ZSBmaWx0ZXJpbmcgd2hlbiBtdWx0aXBsZSBsYWJlbHMgYXJlIGZpbHRlcmVkIHVwb24KKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjgwMiBTdXBwb3J0IEFkZGluZyBDdXN0b20gU2VyaWFsaXplciBmb3IgR3JlbWxpbiBHbworKiBUSU5LRVJQT1AtMjgzMCBIYW5kbGUgVXNlci1BZ2VudCBmcm9tIEhUVFAgUmVxdWVzdHMgdG8gc2VydmVyCisqIFRJTktFUlBPUC0yOTUxIEFkZCB0cmFuc2xhdG9yIHRvIHRoZSBHbyBHTFYKKyogVElOS0VSUE9QLTI5NjQgIE1hbnkgVHJhdmVyc2FsUGFyZW50J3Mgc3RlcHMgaGF2ZSBhIHJlcGxhY2VMb2NhbENoaWxkIGxvZ2ljIHRoYXQgY2FuIHJlc3VsdCBpbiBhIG5ldyBDaGlsZFRyYXZlcnNhbCBoYXZpbmcgYW4gSUQgdGhhdCBhbHJlYWR5IGV4aXN0cy4KKyogVElOS0VSUE9QLTI5ODIgQWxsb3cgZ3JlbWxpbi1kcml2ZXIgdXNhZ2Ugb3ZlciBIVFRQCisqIFRJTktFUlBPUC0yOTg0IFJlcGxhY2UgTW9xIG1vY2tpbmcgbGlicmFyeSBpbiAuTkVUIHRlc3RzCisqIFRJTktFUlBPUC0yOTg2IFN0YXJHcmFwaCBzaGFsbCBkcm9wIGVkZ2UgcHJvcGVydGllcyB3aGVuIGRyb3BwaW5nIGVkZ2VzCisqIFRJTktFUlBPUC0yOTg4IFNlcmlhbGl6YXRpb24gZXJyb3IgdGhyb3dzIGFuIEludmFsaWQgT3BQcm9jZXNzb3IgZXhjZXB0aW9uIHdoZW4gdXNpbmcgc3RyZWFtKCkgQVBJCisqIFRJTktFUlBPUC0yOTkxIFJlZm9ybWF0IEphdmFkb2MgbGluayBpbiByZWZlcmVuY2UgZG9jcworKiBUSU5LRVJQT1AtMjk5NCBQYXJ0aXRpb25TdHJhdGVneSBkb2VzIG5vdCB3b3JrIHdpdGggbWVyZ2VWKCkgYW5kIG1lcmdlRSgpCisqIFRJTktFUlBPUC0zMDA2IEFsbG93IGdyZW1saW4tcHl0aG9uIHVzYWdlIG92ZXIgSFRUUAorCitbW3JlbGVhc2UtMy02LTVdXQorPT09IFRpbmtlclBvcCAzLjYuNSAoUmVsZWFzZSBEYXRlOiBKdWx5IDMxLCAyMDIzKQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS03LCAzLjUuNz4+LgorCisqIEFkZGVkIGB0ZXh0L3BsYWluYCBNSU1FIHR5cGUgdG8gdGhlIEhUVFAgZW5kcG9pbnQgdG8gcmV0dXJuIGEgR3JlbWxpbiBDb25zb2xlLWxpa2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEuCisqIEFkZGVkIEdyYXBoQmluYXJ5IHNlcmlhbGl6YXRpb24gb3B0aW9uIHRvIHRoZSBIVFRQIGVuZHBvaW50LgorKiBGaXhlZCBidWcgd2l0aCBgZmFpbGAgc3RlcCBub3Qgd29ya2luZyB3aXRoIGEgYFZlcnRleFByb2dyYW1gIHJ1bm5pbmcgb24gdGhlIHNlcnZlci4KKyogSW50cm9kdWNlZCBtaW1lIHR5cGUgYGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYxLjAranNvbjt0eXBlZD1mYWxzZWAgdG8gYWxsb3cgZGlyZWN0IHNwZWNpZmljYXRpb24gb2YgR3JhcGhTT04gMS4wIHdpdGhvdXQgdHlwZXMuCisqIEludHJvZHVjZWQgbWltZSB0eXBlIGBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12Mi4wK2pzb247dHlwZWQ9ZmFsc2VgIHRvIGFsbG93IGRpcmVjdCBzcGVjaWZpY2F0aW9uIG9mIEdyYXBoU09OIDIuMCB3aXRob3V0IHR5cGVzLgorKiBSZW1vdmVkIGBmaW5hbGAgY2xhc3MgZGVjbGFyYXRpb24gZm9yIGBMYWJlbFN0ZXBgLgorKiBGaXhlZCBNZXJnZUUvTWVyZ2VWIHN0ZXBzIHRvIGFsd2F5cyB0aHJvdyBleGNlcHRpb24gZm9yIGludmFsaWQgYG9uTWF0Y2hgIG9wdGlvbi4KKyogVElOS0VSUE9QLTI4MDI6IEFkZCBzdXBwb3J0IGZvciBjdXN0b20gZGVzZXJpYWxpemVycyB0byB0aGUgR3JlbWxpbi1HbyBEcml2ZXIKKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI5MjAgU3ViZ3JhcGhTdHJhdGVneSBmYWlsdXJlIHdoZW4gcHJvcGVydHkga2V5IG5vdCBwcmVzZW50IG9uIHZlcnRleCBpbiBieSgpCisqIFRJTktFUlBPUC0yOTM3IFRocm93IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIHVzZSBhIGNsb3NlZCBjb25uZWN0aW9uCisqIFRJTktFUlBPUC0yOTQ4IFBSSVNNQSBzZWN1cml0eSB2dWxuZXJhYmlsdHkgZm9yIGphY2tzb24tZGF0YWJpbmQgMi4xNC4wICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjk1MyBTdGF0aWMgaW1wb3J0IGZvciBfXy52YWx1ZXMoKSBvdmVycmlkZW4gYnkgQ29sdW1uLnZhbHVlcygpCisqIFRJTktFUlBPUC0yOTU4IFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBmb3IgdGltZW91dHMgYXJlIG5ldmVyIGNhbmNlbGxlZAorKiBUSU5LRVJQT1AtMjk2NSBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgcmVtb3ZpbmcgbGFiZWxzIGl0IHNob3VsZG4ndCBpbiBjZXJ0YWluIGNvbmRpdGlvbnMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMTQwMyBQcm92aWRlIHN1cHBvcnQgZm9yIEdyYXBoRmlsdGVyLnZlcnRleFByb3BlcnRpZXMoKSAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI5MzggUmV2aXNpdCBtZXJnZSBzdGVwIGZlYXR1cmUgdGVzdHMKKyogVElOS0VSUE9QLTI5MzkgVGhlIE1lcmdlIG9uTWF0Y2ggbWFwIHZhbGlkYXRpb24gaXMgZHVyaW5nIGV4ZWN1dGlvbiBpbnN0ZWFkIG9mIGNvbnN0cnVjdGlvbgorKiBUSU5LRVJQT1AtMjk0MSBETyBOT1QgcHVyZ2UgdGhlIG91dHB1dCBsb2NhdGlvbiBpZiBpdCBoYXMgY29udGVudCBpbiBTcGFya0dyYXBoQ29tcHV0ZXIKKyogVElOS0VSUE9QLTI5NDcgUHJvdmlkZSBhIHBsYWluIHRleHQgc2VyaWFsaXplciBmb3IgSFRUUAorKiBUSU5LRVJQT1AtMjk1NCBQYXNzIEdyZW1saW4gVmVyc2lvbiBmcm9tIE1hdmVuIHRvIEphdmEgV2l0aG91dCBNYW5pZmVzdHMKKyogVElOS0VSUE9QLTI5NTUgU3VwcG9ydCBTU0wgaW4gV2ViU29ja2V0Q2xpZW50CisqIFRJTktFUlBPUC0yOTU2IFVwZGF0ZSBncmVtbGludCB2ZXJzaW9uIGZvciB0aGUgcHVibGlzaGVkIGFwcGxpY2F0aW9uCisqIFRJTktFUlBPUC0yOTYzIEludHJvZHVjZSBuZXcgbWltZVR5cGUgdG8gcmV0dXJuIEdyYXBoU29uLTEuMCBpbiB0ZXh0IGZvcm1hdAorKiBUSU5LRVJQT1AtMjk3NyBEZXByZWNhdGUgTmVvNGotR3JlbWxpbgorCitbW3JlbGVhc2UtMy02LTRdXQorPT09IFRpbmtlclBvcCAzLjYuNCAoUmVsZWFzZSBEYXRlOiBNYXkgMTIsIDIwMjMpCisKKyogRml4ZWQgYnVnIGluIGBUZXh0UC5yZWdleGAgYW5kIGBUZXh0UC5ub3RSZWdleGAgc2VyaWFsaXphdGlvbiBmb3IgSmF2YSBHTFYuCisqIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIEdyZW1saW4uTmV0IGRyaXZlciB0aGF0IG9ubHkgb2NjdXJyZWQgaWYgYSBgQ2FuY2VsbGF0aW9uVG9rZW5gIHdhcyBwcm92aWRlZC4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI5NDUgVGV4dFAucmVnZXgoKSBTZXJpYWxpemF0aW9uIEZhaWxpbmcgaW4gSmF2YSBkcml2ZXIKKyogVElOS0VSUE9QLTI5NDQgTWVtb3J5IGxlYWsgaW4gR3JlbWxpbi5OZXQgZHJpdmVyIGlmIENhbmNlbGxhdGlvblRva2VuIGlzIHVzZWQKKworW1tyZWxlYXNlLTMtNi0zXV0KKz09PSBUaW5rZXJQb3AgMy42LjMgKFJlbGVhc2UgRGF0ZTogTWF5IDEsIDIwMjMpCisKK1RoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIGNoYW5nZXMgZnJvbSA8PC4vY2hhbmdlbG9nLTMuNS54LmFzY2lpZG9jI3JlbGVhc2UtMy01LTYsIDMuNS42Pj4uCisKKyogRml4ZWQgYnVnIGluIGBlbGVtZW50KClgIHdoZW4gdHJhdmVyc2luZyBmcm9tIGVkZ2VzIHdoZXJlIGJ1bGtpbmcgd2FzIGVuYWJsZWQuCisqIFJlZmFjdG9yZWQgYFByb3BlcnR5TWFwU3RlcGAgdG8gaW1wcm92ZSBleHRlbnNpYmlsaXR5IGJ5IHByb3ZpZGVycy4gUmVtb3ZlZCBgZmluYWxgIGNsYXNzIGRlY2xhcmF0aW9uIGZvciBgUHJvamVjdFN0ZXBgIGFuZCBgQ29hbGVzY2VTdGVwYC4KKyogRml4ZWQgYnVnIGluIGdyYW1tYXIgdGhhdCBwcmV2ZW50ZWQgZGVjbGFyYXRpb24gb2YgYSBgTWFwYCBrZXkgbmFtZWQgYG5ld2Agd2l0aG91dCBxdW90ZXMuCisqIEZpeGVkIGJ1ZyBpbiBncmFtbWFyIHRoYXQgcHJldmVudGVkIHBhcnNpbmcgb2YgYE1hcGAga2V5IHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzaXMgd2hpY2ggaXMgYWxsb3dhYmxlIGluIEdyb292eS4KKyogRml4ZWQgYnVnIGluIGBHcm9vdnlUcmFuc2xhdG9yYCB0aGF0IHN1cnJvdW5kZWQgYFN0cmluZ2Aga2V5cyB3aXRoIHBhcmVudGhlc2lzIGZvciBgTWFwYCB3aGVuIG5vdCBuZWNlc3NhcnkuCisqIEFkZGVkIHN1cHBvcnQgdG8gdGhlIGdyYW1tYXIgYWxsb3dpbmcgYExpc3RgIGFuZCBgTWFwYCBrZXkgZGVjbGFyYXRpb25zIGZvciBgTWFwYCBlbnRyaWVzLgorKiBGaXhlZCBgRGlyZWN0aW9uYCBlbnVtIGJ1ZyBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCB3aGVyZSBgRGlyZWN0aW9uLmZyb21fYCBhbmQgYERpcmVjdGlvbi50b2Agd2FzIG5vdCBwcm9wZXJseSBhbGlhc2VkIHRvIGBEaXJlY3Rpb24uT1VUYCBhbmQgYERpcmVjdGlvbi5JTmAKKyogRml4ZWQgYERpcmVjdGlvbmAgZW51bSBpbiBgZ3JlbWxpbi1weXRob25gIHdoZXJlIGBEaXJlY3Rpb24uZnJvbV9gIGFuZCBgRGlyZWN0aW9uLnRvYCB3ZXJlIG5vdCBhZGRlZCwgYW5kIHRoZXkgY2FuIG5vdyBiZSB1c2VkIGluc3RlYWQgb2YgZGVmaW5pbmcgYGZyb21fPURpcmVjdGlvbi5PVVRgIGFuZCBgdG89RGlyZWN0aW9uLklOYAorKiBJbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBjb21wYXJpc29uIChlcXVhbHMpIGJldHdlZW4gbm90IGNvbXBhdGlibGUgdHlwZXMgYW5kIG51bGxzLgorKiBGaXhlZCBgbWVyZ2VWKClgIGFuZCBgbWVyZ2VFKClgIHN0ZXBzIHRvIHdvcmsgd2hlbiBgb25DcmVhdGVgIGlzIGltbXV0YWJsZSBtYXAuCisqIEludHJvZHVjZWQgYFdyaXRpbmdgIGFuZCBgRGVsZXRpbmdgIG1hcmtlciBpbnRlcmZhY2VzIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSBzdGVwIGNhbiBwZXJmb3JtIHdyaXRlIG9yIGRlbGV0ZSBvciBib3RoIG9uIEdyYXBoLgorKiBGb3IgYG1lcmdlVigpYCBhbmQgYG1lcmdlRSgpYCwgYWRkZWQgY2hlY2tzIGZvciBpbGxlZ2FsIGhpZGRlbiBrZXlzIGFuZCByZWZhY3RvcmVkIGBzZWFyY2hWZXJ0aWNlc2AgdG8gYWxsb3cgc3ViY2xhc3NlcyB0byBvdmVycmlkZSBzZWFyY2ggY3JpdGVyaWEuCisqIEFkZGVkIHN0YXRpYyBtYXAgY2FwdHVyaW5nIHBvc3NpYmxlIGBUcmF2ZXJzYWxgIHN0ZXBzIHRoYXQgc2hhbGwgYmUgYWRkZWQgdG8gdHJhdmVyc2FsIGZvciBhIGdpdmVuIG9wZXJhdG9yLgorKiBGaXhlZCBidWcgd2hpY2ggY2F1c2VkIHNvbWUgdHJhdmVyc2FscyB0byB0aHJvdyBgR3JlbWxpblR5cGVFcnJvckV4Y2VwdGlvbmAgdG8gdXNlcnMuCisKKz09PT0gQnVncworCisqIFRJTktFUlBPUC0yNTI2IEdyZW1saW4gQ29uc29sZSBwZXJmb3JtYW5jZSB3aXRoIGluY29tcGxldGUgbXVsdGktbGluZSBzY3JpcHRzCisqIFRJTktFUlBPUC0yNzY3IFJlcGVhdCBPdXQgVGltZXMgdHJhdmVyc2FsIGhhbmdzIGluZGVmaW5pdGVseSBvbiBmaXJzdCBleGVjdXRpb24KKyogVElOS0VSUE9QLTI4MjAgZ3JlbWxpbi1weXRob24gX2Nsb3NlX3Nlc3Npb24gcmFjZSBjb25kaXRpb24vRkQgbGVhaworKiBUSU5LRVJQT1AtMjg1NSBQZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBUaW5rZXJHcmFwaCAzLjUuNCBhbmQgMy41LjUKKyogVElOS0VSUE9QLTI4NTYgbWF0aCgpIHN0ZXAgZmFpbHMgaWYgdmFyaWFibGUgbmFtZSBjb250YWlucyBhIGtleXdvcmQKKyogVElOS0VSUE9QLTI4NjEgRml4IGluY29ycmVjdCBzeW1saW5rcyBpbiBzb3VyY2UgcmVsZWFzZSB6aXAKKyogVElOS0VSUE9QLTI4NjMgSGFzSWQgU3RlcCBnZW5lcmF0ZXMgaW5jb3JyZWN0IHJlc3VsdHMgd2hlbiBnaXZlbiBhIGxpc3Qgb2YgSURzIG1pZC10cmF2ZXJzYWwKKyogVElOS0VSUE9QLTI4NzAgbWVyZ2VWIHJlcXVpcmVzIGtleSBvZiAnbmV3JyB0byBiZSBxdW90ZWQKKyogVElOS0VSUE9QLTI4NzggSW5jb3JyZWN0IGhhbmRsaW5nIG9mIGxvY2FsIG9wZXJhdGlvbnMgd2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlIGVsZW1lbnRzCisqIFRJTktFUlBPUC0yODg4IERlZmF1bHRUcmF2ZXJzYWwncyBhcHBseVN0cmF0ZWdpZXMgcGVyZm9ybWFuY2UgZGVjcmVhc2UKKyogVElOS0VSUE9QLTI4OTEgSW5jb25zaXN0ZW50IGJlaGF2aW9yIHdoZW4gY29tcGFyaW5nIGEgY291bnRlZCB2YWx1ZSB3aXRoIGEgbmVnYXRpdmUgdmFsdWUKKyogVElOS0VSUE9QLTI4OTMgSW5jb3JyZWN0bHkgY29tcGFyaW5nIGEgY291bnRlZCB2YWx1ZSB3aXRoIG11bHRpcGxlIHByZWRpY2F0ZXMKKyogVElOS0VSUE9QLTI5MDEgSW5jb3JyZWN0IHJlc3VsdCBjYXVzZWQgYnkgaGFzKGtleSwgcHJlZGljYXRlKQorKiBUSU5LRVJQT1AtMjkwMiBDcml0aWNhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGluIHNuYWtleWFtbAorKiBUSU5LRVJQT1AtMjkwNSBncmVtbGluLWdvIGdvcmlsbGFUcmFuc3BvcnRlci5sb2dIYW5kbGVyIGlzIG5vdCBpbml0aWFsaXplZCBjb3JyZWN0bHkgYW5kIGxlYWRzIHRvIHBhbmljCisqIFRJTktFUlBPUC0yOTExIENvdW50U3RyYXRlZ3kgY29udmVydHMgY291bnQoKS5pcygwKSB3cm9uZ2x5IHVuZGVyIENvbm5lY3RpdmVTdHJhdGVneQorKiBUSU5LRVJQT1AtMjkxOCBVdGlscy5HZW5lcmF0ZVVzZXJBZ2VudCBhc3N1bWVzIEdyZW1saW4uTmV0LmRsbCB0byBiZSBwcmVzZW50IHdoZW4sIGluIHNvbWUgZW52aXJvbm1lbnRzLCBpdCBpcyBub3QuCisqIFRJTktFUlBPUC0yOTIyIEdyb292eVRyYW5zbGF0b3IgcHJvZHVjZXMgYSBNYXAgbm90IHBhcnNlYWJsZSBieSB0aGUgZ3JhbW1hcgorKiBUSU5LRVJQT1AtMjkyNSBtZXJnZUUoKSBpbiBqYXZhc2NyaXB0IHByb2R1Y2luZyBhbiBlcnJvcgorKiBUSU5LRVJQT1AtMjkyNiBHcmVtbGluLUphdmEgPiBBbiBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBvY2N1cnMgb24gY2FsbGluZyBuZXh0KCkgYWZ0ZXIgYSBtZXJnZSBzdGVwIHdpdGggdGhlIG9wdGlvbiBzdGVwIG1vZHVsYXRvciBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdAorKiBUSU5LRVJQT1AtMjkyOCBlbGVtZW50KCkgbm90IHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBlZGdlIHByb3BlcnRpZXMKKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjg0MSBUZXN0IGFuZCBGaXggUGVyIFJlcXVlc3QgU2V0dGluZ3MgaW4gR28KKyogVElOS0VSUE9QLTI4NTIgVXBkYXRlIE1hdmVuIHBsdWdpbiBmb3IgZG9ja2VyLWltYWdlcyBidWlsZGluZyBmb3IgTTEgY29tcGF0aWJpbGl0eQorKiBUSU5LRVJQT1AtMjg1NyBHcmFwaFNPTlJlY29yZFJlYWRlciBkb2VzIG5vdCBhbGxvdyBjb25maWd1cmUgYSBHcmFwaEZpbHRlciBkdXJpbmcgZGVzZXJpYWxpemF0aW9uCisqIFRJTktFUlBPUC0yODY1IEFkZCBoYXMgc3RlcHMgaW5qZWN0ZWQgYnkgUGFydGl0aW9uU3RyYXRlZ3kgYXQgdGhlIGVuZCBvZiB0aGUgZmlsdGVyCisqIFRJTktFUlBPUC0yODkwIEF2b2lkIGV4Y2VwdGlvbnMgb24gbG9jYWwgc2NvcGUgYmFzZWQgc3RlcHMgd2hlcmUgcG9zc2libGUKKyogVElOS0VSUE9QLTI4OTkgU2FtcGxlR2xvYmFsU3RlcCBzYW1wbGVzIGluZWZmaWNpZW50bHkgd2l0aCBUcmF2ZXJzZXJTZXQgcnVubmluZyBpbnRvIGhhc2ggY29sbGlzaW9ucworKiBUSU5LRVJQT1AtMjkxMiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGFkZEUoKSB3aGVuIHRyYXZlcnNlciBpcyBpbmNvcnJlY3QKKyogVElOS0VSUE9QLTI5MTkgSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgZm9yIGRlZXBseSBuZXN0ZWQgdHJhdmVyc2FscworKiBUSU5LRVJQT1AtMjkyNCBSZWZhY3RvciBQcm9wZXJ0eU1hcFN0ZXAgdG8gYmUgYWJsZSB0byBvdmVyd3JpdGUgbWFwIG1ldGhvZAorKiBUSU5LRVJQT1AtMjkyOSBJbnRyb2R1Y2UgbmV3IG1hcmtlciBpbnRlcmZhY2VzIHRvIGlkZW50aWZ5IHdoZXRoZXIgYSBzdGVwIGNhbiBwZXJmb3JtIHdyaXRlIG9yIGRlbGV0ZSBvciBib3RoCisqIFRJTktFUlBPUC0yOTMxIEZpeCBhIGZldyBtaW5vciBtZXJnZVYvRSBpc3N1ZXMKKyogVElOS0VSUE9QLTI5MzQgT3B0aW1pemUgT2JqZWN0V3JpdGFibGUgZm9yIGRpc3BsYXlpbmcgY29udGVudCBvZiBKYXZhIENvbGxlY3Rpb24gb3IgTWFwIHRvIHJlZHVjZSBPT00KKworW1tyZWxlYXNlLTMtNi0yXV0KKz09PSBUaW5rZXJQb3AgMy42LjIgKFJlbGVhc2UgRGF0ZTogSmFudWFyeSAxNiwgMjAyMykKKworVGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgY2hhbmdlcyBmcm9tIDw8Li9jaGFuZ2Vsb2ctMy41LnguYXNjaWlkb2MjcmVsZWFzZS0zLTUtNSwgMy41LjU+Pi4KKworKiBGaXhlZCBidWcgaW4gdGhlIEdyZW1saW4gZ3JhbW1hciBmb3IgcGFyc2luZyBvZiBlbXB0eSBxdWVyaWVzLgorKiBQcm92aWRlZCBtZWNoYW5pc20gZm9yIHByb3ZpZGVyIHBsdWdpbnMgdG8gZ2V0IG5vdGlmaWVkIG9uIHNjcmlwdC9xdWVyeSBwcm9jZXNzaW5nIHZpYSBgR3JhcGhNYW5hZ2VyYC4KKyogRml4ZWQgYnVnIGluIGBzZWxlY3QoKWAgd2hlbiB1c2luZyBtdWx0aXBsZSBsYWJlbHMuCisqIE1vdmVkIEdoZXJraW4gZmVhdHVyZSB0ZXN0cyB0byBgZ3JlbWxpbi10ZXN0YCByZXNvdXJjZXMgc28gdGhhdCB0aGV5IGFyZSBtb3JlIGVhc2lseSByZWZlcmVuY2VkIGJ5IHByb3ZpZGVycy4KKyogTWFkZSBxdWFsaXR5IG9mIGxpZmUgY2hhbmdlcyB0byBzZW1hbnRpY3MgZm9yIGBtZXJnZVYvRWAgYmFzZWQgb24gaW5pdGlhbCBmZWVkYmFjay4KKworPT09PSBCdWdzCisKKyogVElOS0VSUE9QLTI3NjUgUmFjZSBjb25kaXRpb24gZHVyaW5nIHNjcmlwdCBjcmVhdGlvbiB3aGVuIHVzaW5nIFVuaWZpZWRDaGFubmVsaXplcgorKiBUSU5LRVJQT1AtMjc2OSBncmVtbGluLXNlcnZlciBkb2VzIG5vdCByZXBseSB3aXRoIGEgdGltZW91dCByZXNwb25zZSB0byBhbGwgdGltZWQgb3V0IHJlcXVlc3RzCisqIFRJTktFUlBPUC0yNzcxIENyaXRpY2FsIHNldmVyaXR5IHNlY3VyaXR5IHZ1bG5lcmFiaWx0eSBpbiBjb21tb25zLWNvbmZpZ3VyYXRpb24gMi43CisqIFRJTktFUlBPUC0yNzk2IEhpZ2ggc2V2ZXJpdHkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBmb3VuZCBpbiBzbmFrZXlhbWwKKyogVElOS0VSUE9QLTI4MDEgSW5jb3JyZWN0IGRlcHJlY2F0aW9uIG5vdGljZSBvbiBncmVtbGluLXB5dGhvbgorKiBUSU5LRVJQT1AtMjgwMyBJbmNvcnJlY3QgY291bnQoKSB3aXRoIHNhbXBsZSgpIGluIFRpbmtlckdyYXBoCisqIFRJTktFUlBPUC0yODA1IE5vIHJlc3VsdHMgcmV0dXJuZWQgZm9yIG11bHRpcGxlIGxhYmVscyB0byBzZWxlY3QoKQorKiBUSU5LRVJQT1AtMjgwOSBIaWdoIHNldmVyaXR5IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgZm91bmQgaW4gamFja3NvbiBkYXRhYmluZAorKiBUSU5LRVJQT1AtMjgxNSBDcml0aWNhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGZvciBhcGFjaGUgY29tbW9ucy10ZXh0CisqIFRJTktFUlBPUC0yODE2IEdoZXJraW4gdGVzdCBpc3N1ZXMgZm9yIGltcGxlbWVudGVycworKiBUSU5LRVJQT1AtMjgxNyAgIkNvdWxkIG5vdCBmaW5kIGEgdHlwZSBpZGVudGlmaWVyIGZvciB0aGUgY2xhc3MgOiBjbGFzcyBqYXZhLmxhbmcuQnl0ZSIgb2NjdXJzIHdoZW4gZHVtcGluZyBncmFwaCB0byBncmFwaHNvbiBmb3JtYXQKKyogVElOS0VSUE9QLTI4MjYgQ3JpdGljYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBpbiBpdnkKKyogVElOS0VSUE9QLTI4MzYgR2l0aHViIGFjdGlvbnMgZG8gbm90IHJ1biBqYXZhIGRyaXZlciBpbnRlZ3JhdGlvbiB0ZXN0cworKiBUSU5LRVJQT1AtMjg0MCBUZXN0IEZhaWx1cmVzIG9uIE5vbkRleAorKiBUSU5LRVJQT1AtMjg0MyBTZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgZm91bmQgaW4gbmV0dHkgdmVyc2lvbiA0LjEuNzcKKyogVElOS0VSUE9QLTI4NDkgSW5jb3JyZWN0IGltcGxlbWVudGF0aW9uIGZvciBHcmFwaFRyYXZlcnNhbFNvdXJjZS5XaXRoIGluIGdyZW1saW4tZ28KKworPT09PSBJbXByb3ZlbWVudHMKKworKiBUSU5LRVJQT1AtMjQ3MSBBZGQgbG9nZ2luZyB0byBHcmVtbGluLk5ldCBkcml2ZXIKKyogVElOS0VSUE9QLTI0ODAgVXNlciBhZ2VudCBmb3IgR3JlbWxpbiBkcml2ZXJzCisqIFRJTktFUlBPUC0yNjIyIEVuZm9yY2Ugb3JkZXJpbmcgc2VtYW50aWNzIGluIGZlYXR1cmUgdGVzdHMKKyogVElOS0VSUE9QLTI2OTYgUmVmYWN0b3IgR2hlcmtpbiB0ZXN0IGZyYW1ld29yayB0byBiZXR0ZXIgaGFuZGxlIGJpbmRpbmdzCisqIFRJTktFUlBPUC0yNzM3IERvY2tlcml6ZWQgQnVpbGQgYW5kIFRlc3QgRW52aXJvbm1lbnRzCisqIFRJTktFUlBPUC0yNzcyIEFkZCBTcGFyayB1dGlsaXR5IHRvIGxvYWQgdmVydGljZXMgYXMgUkRECisqIFRJTktFUlBPUC0yNzc5IEZsb2F0aW5nIENvbm5lY3RlZENvbXBvbmVudCBGZWF0dXJlIEZhaWx1cmVzIGZvciBHaXRIdWIgQWN0aW9ucyBvbiB3aW5kb3dzCisqIFRJTktFUlBPUC0yNzg1IEluYWJpbGl0eSB0byBNb2NrIFJldHVybmVkIFJlc3VsdCBUeXBlcyBpbiBHcmVtbGluLUdvIERyaXZlcgorKiBUSU5LRVJQT1AtMjc5MiBCZXR0ZXIgZXhjZXB0aW9uIHdoZW4gSmF2YVRyYW5zbGF0b3IgZmluZHMgYSBtZXRob2QgYnV0IG5vdCB0aGUgb3ZlcmxvYWQKKyogVElOS0VSUE9QLTI3OTQgQWxsb3cgY2FuY2VsbGF0aW9uIG9mIEdyZW1saW4uTmV0IGFzeW5jIG1ldGhvZHMKKyogVElOS0VSUE9QLTI4MDQgZ2hlcmtpbiBmZWF0dXJlIGZpbGVzIHNob3VsZCBiZSBvbiB0aGUgY2xhc3NwYXRoCisqIFRJTktFUlBPUC0yODA2IFByb3ZpZGUgbWV0aG9kIGZvciBwcm92aWRlciBwbHVnaW5zIHRvIGdldCBub3RpZmllZCBvbiBzY3JpcHQvcXVlcnkgcHJvY2Vzc2luZworKiBUSU5LRVJQT1AtMjgwOCBJbXByb3ZlIENvbXBhdGliaWxpdHkgb24gQVJNIG1hY2hpbmVzCisqIFRJTktFUlBPUC0yODEzIEltcHJvdmUgZHJpdmVyIHVzYWJpbGl0eSBmb3IgY2FzZXMgd2hlcmUgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uIGlzIGN1cnJlbnRseSB0aHJvd24KKyogVElOS0VSUE9QLTI4MTQgQWRkIGEgU1NMIGhhbmRzaGFrZSB0aW1lb3V0IGNvbmZpZ3VyYXRpb24gdG8gdGhlIGRyaXZlcgorKiBUSU5LRVJQT1AtMjgxOCBleGNsdWRlIG1vY2tpdG8tY29yZSBpbiBncmVtbGluLWNvcmUgW2NvbXBpbGUgc2NvcGVdIChpbXBvcnQgYnkgamNhYmktbWFuaWZlc3RzKQorKiBUSU5LRVJQT1AtMjgzMyBUZXN0U3VwcG9ydCBsb2FkcyBmaWxlcyB0b28gc2xvdworKiBUSU5LRVJQT1AtMjgzNCBDbG9uZVZlcnRleFByb2dyYW0gb3B0aW1pemF0aW9uIG9uIFNwYXJrR3JhcGhDb21wdXRlcgorKiBUSU5LRVJQT1AtMjg0MiBFeHBhbmQgR3JlbWxpblNjcmlwdENoZWNrZXIgdG8gaW5jbHVkZSByZXF1ZXN0IGlkIG92ZXJyaWRlcworKiBUSU5LRVJQT1AtMjg1MCBNb2RpZmljYXRpb25zIHRvIG1lcmdlVi9FIHNlbWFudGljcworCitbW3JlbGVhc2UtMy02LTFdXQorPT09IFRpbmtlclBvcCAzLjYuMSAoUmVsZWFzZSBEYXRlOiBKdWx5IDE4LCAyMDIyKQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS00LCAzLjUuND4+LgorCisqIE1hZGUgR3JhcGhCaW5hcnkgdGhlIGRlZmF1bHQgc2VyaWFsaXphdGlvbiBmb3JtYXQgZm9yIC5ORVQgYW5kIFB5dGhvbi4KKyogQWRkZWQgbWlzc2luZyBgUmVzcG9uc2VTdGF0dXNDb2RlRW51bWAgZW50cnkgZm9yIDU5NSBmb3IgLk5FVC4KKyogRml4IGEgamF2YWRvYyBjb21tZW50IGluIGBDbHVzdGVyLkJ1aWxkZXJgIHJlZ2FyZGluZyBtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjczNCBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgQ2xpZW50IGNob29zZUNvbm5lY3Rpb24oKQorKiBUSU5LRVJQT1AtMjczNiBQbHVnaW5BY2NlcHRvciBpbnRlcmZhY2Ugbm8gbW9yZSBhdmFpbGFibGUgaW4gMy41LjMrIGJ1dCByZWZlcnJlZCBpbiBkb2N1bWVudGF0aW9uCisqIFRJTktFUlBPUC0yNzQxIEdyYXBoTUxXcml0ZXIgZXJyb3IgbWVzc2FnZSBpcyBub3QgcHJvcGVybHkgZm9ybWF0dGVkCisqIFRJTktFUlBPUC0yNzQ2IE1lZGl1bSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgb24gbG9nYmFjay1jb3JlCisqIFRJTktFUlBPUC0yNzUxIFRyYW5zYWN0aW9uOiB0eC5jb21taXQoKSBoYW5ncyB1cCBpbiBqYXZhc2NyaXB0IGNsaWVudC1saWIKKyogVElOS0VSUE9QLTI3NTQgSmF2YXNjcmlwdCBjbGllbnQgaGFuZ3MgaWYgdGhlIHNlcnZlciByZXN0YXJ0cworKiBUSU5LRVJQT1AtMjc2OCBCcmFuY2hTdGVwIHBpY2tUb2tlbiBzaG91bGQgYmUgaW50ZWdyYXRlZCB3aGVuIGFkZGVkIGFzIGEgY2hpbGQgb3B0aW9uCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTIyMjkgSmF2YVNjcmlwdCBHTFY6IEFkZCBHcmFwaEJpbmFyeSBTdXBwb3J0CisqIFRJTktFUlBPUC0yNjMxIEdyYXBoU09OIGZsb2F0IHNlcmlhbGl6YXRpb24gd2hlbiB1anNvbiBpcyB1c2VkIGlzIGltcHJlY2lzZQorKiBUSU5LRVJQT1AtMjY5MyBDb21wbGV0ZSBHcmFwaEJpbmFyeSBzdXBwb3J0IGluIFB5dGhvbgorKiBUSU5LRVJQT1AtMjcxNSByZW1vdmUgbG9nNGp2MSBkZXBlbmRlbmN5CisqIFRJTktFUlBPUC0yNzIzIE1ha2UgR3JhcGhCaW5hcnkgdGhlIGRlZmF1bHQgc2VyaWFsaXphdGlvbiBmb3JtYXQgZm9yIC5ORVQgYW5kIFB5dGhvbiAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI3NDAgZmlyc3QgcmVxdWVzdCBzdXNwZW5kIG1vcmUgdGhhbiA5cyB3aGVuIHVzaW5nIGdyZW1saW4tamF2YS1kcml2ZXIKKyogVElOS0VSUE9QLTI3NDggTWVkaXVtIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgb24gbmV0dHktYWxsIGFuZCBuZXR0eS1jb2RlYworKiBUSU5LRVJQT1AtMjc2MiBnZXRTY29wZUtleXMgc2hvdWxkIHJlc3BlY3QgdGhlIG9yZGVyIG9mIGtleXMgcGFzc2VkIGluIFN0ZXAKKyogVElOS0VSUE9QLTI3NjQgQVdTIE5lcHR1bmUgcmV0dXJucyBhbiBpbmFjY2Vzc2libGUgc3RydWN0dXJlZCBlcnJvciByZXNwb25zZQorCitbW3JlbGVhc2UtMy02LTBdXQorPT09IFRpbmtlclBvcCAzLjYuMCAoUmVsZWFzZSBEYXRlOiBBcHJpbCA0LCAyMDIyKQorCitUaGlzIHJlbGVhc2UgYWxzbyBpbmNsdWRlcyBjaGFuZ2VzIGZyb20gPDwuL2NoYW5nZWxvZy0zLjUueC5hc2NpaWRvYyNyZWxlYXNlLTMtNS0zLCAzLjUuMz4+LgorCisqIEFkZGVkIHBhcnNlciBzdXBwb3J0IGZvciBgTmFOYCBhbmQgYEluZmluaXR5YC4KKyogSW1wbGVtZW50ZWQgY29tcGFyYWJpbGl0eS9vcmRlcmFiaWxpdHkgc2VtYW50aWNzIGRlZmluZWQgaW4gdGhlIEdyYXBoIFByb3ZpZGVyIGRvY3VtZW50YXRpb24uCisqIEFkZGVkIGBUZXh0UC5yZWdleGAgYW5kIGBUZXh0UC5ub3RSZWdleGAuCisqIENoYW5nZWQgVGlua2VyR3JhcGggdG8gYWxsb3cgaWRlbnRpZmllcnMgdG8gYmUgaGV0ZXJvZ2VuZW91cyB3aGVuIGZpbHRlcmluZy4KKyogUHJldmVudGVkIHZhbHVlcyBvZiBgVGAgdG8gYHByb3BlcnR5KClgIGZyb20gYmVpbmcgYG51bGxgLgorKiBBZGRlZCB0aHJvd2luZyBgQXJpdGhtZXRpY0V4Y2VwdGlvbmAgd2hlbiBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3ZlcmZsb3cgZm9yIGJ5dGUsIHNob3J0LCBpbnQgYW5kIGxvbmcgYXJndW1lbnRzLgorKiBBZGRlZCBgZWxlbWVudCgpYCBzdGVwLgorKiBBZGRlZCBgY2FsbCgpYCBzdGVwLgorKiBBZGRlZCBgZmFpbCgpYCBzdGVwLgorKiBBZGRlZCBgbWVyZ2VWKClgIGFuZCBgbWVyZ2VFKClgIHN0ZXBzLgorKiBBZGRlZCBgRGlyZWN0aW9uYCBhbGlhc2VzIG9mIGBmcm9tYCBhbmQgYHRvYC4KKyogTW92ZWQgYFRyYXZlcnNhbE9wdGlvblBhcmVudC5QaWNrYCB0byBpdHMgb3duIGNsYXNzIGFzIGBQaWNrYC4KKyogSW50cm9kdWNlZCBQeXRob25pYyBHcmVtbGluIHN0ZXAgbmFtZXMgdXNpbmcgc25ha2UgY2FzZSBhbmQgZGVwcmVjYXRlZCBjYW1lbCBjYXNlIG5hbWluZy4KKyogSW1wcm92ZWQgR2hlcmtpbiB0ZXN0IGZyYW1ld29yayB0byBhbGxvdyBmb3IgYXNzZXJ0aW5nIHRyYXZlcnNhbCBleGNlcHRpb25zIGFzIGEgYmVoYXZpb3IuCisqIEZpeGVkIHF1ZXJ5IGluZGVudGF0aW9uIGZvciBwcm9maWxlIG1ldHJpY3Mgd2hlcmUgaW5kZW50IGxldmVscyB3ZXJlIG5vdCBiZWluZyByZXNwZWN0ZWQuCisqIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgbm8gbG9uZ2VyIGFjY2VwdHMgYSBgU3RyaW5nYCByZXByZXNlbnRhdGlvbiBvZiBgQnl0ZWNvZGVgIGZvciB0aGUgImdyZW1saW4iIGFyZ3VtZW50IHdoaWNoIHdhcyBsZWZ0IHRvIHN1cHBvcnQgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIGRyaXZlcnMuCisqIFJlbW92ZWQgcmVxdWlyZW1lbnQgdGhhdCAiaWRzIiB1c2VkIHRvIGZpbHRlciB2ZXJ0aWNlcyBhbmQgZWRnZXMgbmVlZCB0byBiZSBhbGwgb2YgYSBzaW5nbGUgdHlwZS4KKyogQ3JlYXRlZCBgZ3JlbWxpbi1hbm5vdGF0aW9uc2AgbW9kdWxlIHdoZXJlIHRoZSBgQEdyZW1saW5Ec2xgIGFubm90YXRpb24gYW5kIHJlbGF0ZWQgY29kZSBoYXMgYmVlbiBtb3ZlZC4KKyogTW92ZWQgYEdyZW1saW5TY3JpcHRDaGVja2VyYCB0byBgZ3JlbWxpbi1jb3JlYCBmcm9tIGBncmVtbGluLWdyb292eWAgc2luY2UgaXQgaXMgbm90IEdyb292eSBkZXBlbmRlbnQuCisqIFJlbW92ZWQgYGdyb292eWAgYW5kIGBncm9vdnktanNvbmAgZGVwZW5kZW5jaWVzIGZyb20gYGdyZW1saW4tZHJpdmVyYCBhcyB3ZWxsIGFzIHJlbGF0ZWQgYEpzb25CdWlsZGVyYCBzZXJpYWxpemF0aW9uIHN1cHBvcnQuCisqIFJlcGxhY2VkIGxvZzRqIHVzYWdlIHdpdGggbG9nYmFjayB3aGVyZSBidWlsZHMgcmVseSBvbiBhbmQgcGFja2FnZWQgZGlzdHJpYnV0aW9ucyBub3cgY29udGFpbiB0aGUgbGF0dGVyLgorKiBJbXByb3ZlZCBiZWhhdmlvciBvZiBgVigpYCBhbmQgYEUoKWAgd2hlbiBgbnVsbGAgaXMgYW4gYXJndW1lbnQgcHJvZHVjaW5nIGEgZmlsdGVyaW5nIGJlaGF2aW9yIHJhdGhlciB0aGFuIGFuIGV4Y2VwdGlvbi4KKyogUHJldmVudGVkIG1ldHJpY3MgY29tcHV0YXRpb24gdW5sZXNzIHRoZSB0cmF2ZXJzYWwgaXMgaW4gYSBsb2NrZWQgc3RhdGUuCisqIEFkZGVkIHN5bnRheCB0byBHcmVtbGluIGdyYW1tYXIgdG8gZXhwbGljaXRseSBkZWZpbmUgYGJ5dGVgLCBgc2hvcnRgIGFuZCBgQmlnSW50ZWdlcmAuCisqIEFkZGVkIHN5bnRheCB0byBHcmVtbGluIGdyYW1tYXIgdG8gYWxsb3cgY29uc3RydWN0aW9uIG9mIGEgcmVmZXJlbmNlIGBWZXJ0ZXhgLgorKiBDaGFuZ2VkIEdyZW1saW4gZ3JhbW1hciB0byBhbGxvdyBmb3IgR3Jvb3Z5LWxpa2Ugc3ludGF4IHdoZW4gcGFyc2luZyBhIGBNYXBgIGxpdGVyYWwuCisqIENyZWF0ZWQgYSB3YXkgdG8gcHJvZHVjZSBhIGNvcnB1cyBvZiBHcmVtbGluIHRyYXZlcnNhbHMgdmlhIGBGZWF0dXJlUmVhZGVyYCBhbmQgYERvY3VtZW50YXRpb25SZWFkZXJgIGluIGBncmVtbGluLWxhbmd1YWdlYC4KKyogQ2hhbmdlZCBtZWNoYW5pc20gZm9yIGRldGVybWluaW5nIGlmIGBpZGAgZXF1YWxpdHkgd2l0aCBgdG9TdHJpbmcoKWAgaXMgdXNlZCBieSB2YWxpZGF0aW5nIHRoYXQgZWxlbWVudHMgb2YgdGhlIHByZWRpY2F0ZSBjb2xsZWN0aW9uIGFyZSBhbGwgYFN0cmluZ2AgcmF0aGVyIHRoYW4gZW5mb3JjaW5nIGhvbW9nZW5vdXMgY29sbGVjdGlvbnMgaW4gdGhlIHByb2Nlc3MuCisqIEV4cG9zZWQgR2hlcmtpbiB0ZXN0cyBhcyBwYXJ0IG9mIHRoZSBwcm92aWRlciB0ZXN0IHN1aXRlLgorKiBQYWNrYWdlZCBHaGVya2luIHRlc3RzIGFuZCBkYXRhIGFzIHN0YW5kYWxvbmUgcGFja2FnZSBhcyBhIGNvbnZlbmllbmNlIGRpc3RyaWJ1dGlvbi4KKyogUmVtb3ZlZCBgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lgIGFzIGEgc3RyYXRlZ3kgdGhhdCBpcyBhcHBsaWVkIGJ5IGRlZmF1bHQuCisqIENoYW5nZWQgYGJ5KClgIG1vZHVsYXRvciBzZW1hbnRpY3MgdG8gY29uc2lzdGVudGx5IGZpbHRlci4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3J5byBgTWVzc2FnZVNlcmlhbGl6ZXJgIGltcGxlbWVudGF0aW9ucy4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgYEF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZW5hYmxlQXVkaXRMb2dgLgorKiBSZW1vdmVkIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBgR3Jvb3Z5VHJhbnNsYXRvcmAgZnJvbSBgZ3JlbWxpbi1ncm9vdnlgIG1vZHVsZS4KKyogUmVtb3ZlZCBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3JlbWxpbiBzdGVwcyB0aGF0IGNvbmZsaWN0ZWQgd2l0aCBQeXRob24ga2V5d29yZHMuCisqIFJlbW92ZWQgdGhlIGRlcGVuZGVuY3kgb24gYHNpeGAgZnJvbSBgZ3JlbWxpbi1weXRob25gLgorKiBCdW1wZWQgdG8gQXBhY2hlIEhhZG9vcCAzLjMuMS4KKyogQnVtcGVkIHRvIEFwYWNoZSBTcGFyayAzLjIuMC4KKyogQnVtcGVkIG5vZGUuanMgaW4gYGdyZW1saW4tamF2YXNjcmlwdGAgdG8gdjE2LjEzLjAuCisqIENoYW5nZWQgYE51bWJlckhlbHBlcmAgdG8gcHJvcGVybHkgY2FzdCB0byBgYnl0ZWAgYW5kIGBzaG9ydGAgcmF0aGVyIHRoYW4gZGVmYXVsdCBjb2VyY2luZyB0byBgSW50ZWdlcmAuCisqIE1vZGlmaWVkIHNvbWUgZHJpdmVyIGRlZmF1bHRzIChtYXhpbXVtIGNvbnRlbnQgbGVuZ3RoLCBwb29sIHNpemUsIG1heGltdW0gaW4gcHJvY2VzcykgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggb25lIGFub3RoZXIuCisqIEZpeGVkIGEgcG90ZW50aWFsIGNvbm5lY3Rpb24gbG9hZCBiYWxhbmNpbmcgaXNzdWUgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24gbm90IHVwZGF0aW5nIHRoZSB1c2FnZSBjb3VudC4KKyogRXh0ZW5kZWQgYHByb3BlcnR5KClgIHRvIGFsbG93IGZvciBzZXR0aW5nIGEgYE1hcGAgb2YgcHJvcGVydHkgdmFsdWVzLgorCis9PT09IEJ1Z3MKKworKiBUSU5LRVJQT1AtMjM1OCBQb3RlbnRpYWwgY29ubmVjdGlvbiBsZWFrIG9uIGNsaWVudCBkaXNwb3NpbmcKKyogVElOS0VSUE9QLTI0ODYgQ2xpZW50IGRvZXMgbm90IGxvYWQgYmFsYW5jZSByZXF1ZXN0cyBhY3Jvc3MgYXZhaWxhYmxlIGNvbm5lY3Rpb25zCisqIFRJTktFUlBPUC0yNTA3IFJlbW92ZSByZXF1aXJlbWVudCB0aGF0IEdyYXBoIGltcGxlbWVudGF0aW9ucyBtdXN0IGZpbHRlciBvbiBob21vZ2VuZW91cyBpZGVudGlmaWVycyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI1MjIgRGVmYXVsdFRyYXZlcnNhbE1ldHJpY3M6OnRvU3RyaW5nIGRvZXMgbm90IGluZGVudCBhbm5vdGF0aW9ucyBjb3JyZWN0bHkKKyogVElOS0VSUE9QLTI1NTQgRXh0cmFjdGluZyBzdGVwIG1ldHJpY3MgZnJvbSBQcm9maWxlU3RlcCB0aHJvd3MgTlBFIGlmIHRoZSBzdGVwIHdhcyBub3QgdHJpZ2dlcmVkCisqIFRJTktFUlBPUC0yNTY1IEdyYXBoTUxXcml0ZXIgZG9lcyBub3QgY2hlY2sgdmVydGV4TGFiZWxLZXkgY29uZmxpY3QKKyogVElOS0VSUE9QLTI1NjYgSW5jb21wbGV0ZSBlcnJvciBtZXNzYWdlIGluIGJ5dGVjb2RlIHN0ZXAgZ2VuZXJhdGlvbgorKiBUSU5LRVJQT1AtMjU2OCBHcmFwaCBpbnN0YW5jZSBub3Qgc2V0IGZvciBjaGlsZCB0cmF2ZXJzYWxzCisqIFRJTktFUlBPUC0yNTY5IFJlY29ubmVjdCB0byBzZXJ2ZXIgaWYgSmF2YSBkcml2ZXIgZmFpbHMgdG8gaW5pdGlhbGl6ZQorKiBUSU5LRVJQT1AtMjU3OCBTZXQgYXJndW1lbnRzIHRvIFAgd2l0aGluL3dpdGhvdXQgYXJlIHdyYXBwZWQgaW4gTGlzdAorKiBUSU5LRVJQT1AtMjU3OSBFdmVudFN0cmF0ZWd5IGRvZXNuJ3Qgd29yayB3aXRoIGFub255bW91cyB0cmF2ZXJzYWwKKyogVElOS0VSUE9QLTI1ODAgVXBkYXRlIHRoZSBjdXN0b20gRFNMIGRvY3VtZW50YXRpb24KKyogVElOS0VSUE9QLTI1ODUgVHJhdmVyc2FsIGZhaWxlZCBmb3IgZGlmZmVyZW50IHN0cmF0ZWdpZXMgb3JkZXIKKyogVElOS0VSUE9QLTI1ODkgWE1MIEV4dGVybmFsIEVudGl0eSAoWFhFKSB2dWxuZXJhYmlsaXR5CisqIFRJTktFUlBPUC0yNTk3IE51bGxQb2ludGVyRXhjZXB0aW9uIHdoaWxlIGluaXRpYWxpemluZyBjb25uZWN0aW9uIHBvb2wKKyogVElOS0VSUE9QLTI1OTggd2l0aGluKG51bGwpIE5QRQorKiBUSU5LRVJQT1AtMjYwMyBUaW5rZXJHcmFwaCBzb21ldGltZXMgY291bGQgbm90IHF1ZXJ5IGZsb2F0IHZhbHVlcy4KKyogVElOS0VSUE9QLTI2MDQgVGlua2VyR3JhcGggY291bGQgbm90IG9yZGVyIHZlcnRleC9lZGdlIHdpdGhvdXQgc3BlY2lmaWVkIHByb3BlcnR5LgorKiBUSU5LRVJQT1AtMjYwNiBOZW80ai1HcmVtbGluIGNvdWxkIG5vdCBvcmRlciB2ZXJ0ZXgvZWRnZSB3aXRob3V0IHNwZWNpZmllZCBwcm9wZXJ0eQorKiBUSU5LRVJQT1AtMjYwOSBIVFRQIHJldHVybnMgc2VyaWFsaXphdGlvbiBleGNlcHRpb25zIGZvciB0aGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UKKyogVElOS0VSUE9QLTI2MTAgTnVtYmVySGVscGVyIGNhbiByZXR1cm4gdmFsdWVzIGluIHRoZSBmb3JtIG9mIHRoZWlyIG9yaWdpbmFsIHR5cGUgc21hbGxlciB0aGFuIGludCAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI2MjEgdG9TdHJpbmcgZm9yIHRyYXZlcnNhbHMgc3VjaCBhcyB3aXRoaW4gd2l0aCBlbXB0eSBhcnJheSByZXR1cm5zIGVtcHR5IHN0cmluZyBhcyBhcmd1bWVudCBpbnN0ZWFkIG9mIGJyYWNrZXRzCisqIFRJTktFUlBPUC0yNjI2IFJhbmdlR2xvYmFsU3RlcCBjbG9zZXMgdHJhdmVyc2FsIHByZW1hdHVyZWx5CisqIFRJTktFUlBPUC0yNjQ5IFVuYWJsZSB0byB0cmFuc2xhdGUgZ3JlbWxpbiBxdWVyeSB0byBqYXZhCisqIFRJTktFUlBPUC0yNjU4IFRyYW5zbGF0b3IgaW4gZ3JlbWxpbi1qYXZhc2NyaXB0IGhhcyB0cm91YmxlIHdpdGggYXJyYXkgYXJndW1lbnRzCisqIFRJTktFUlBPUC0yNjYxIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgaGFuZGxpbmcgb2YgbnVsbCBhcmd1bWVudHMKKyogVElOS0VSUE9QLTI2NjIgVW5jbG9zZWQgY2xpZW50IHNlc3Npb24gYW5kIHN0YWNrdHJhY2UgcG9wcyB1cCB3aGVuIGNsZWFudXAgaXMgbWlzc2VkCisqIFRJTktFUlBPUC0yNjcwIEphdmFEb2NzIGRvIG5vdCBidWlsZCB3aGVuIHVzaW5nIEpESyAxMQorKiBUSU5LRVJQT1AtMjY5NCBCdWcgb2YgVGlua2VyR3JhcGggZ3JlbWxpbiBhcGkgImhhcygpIgorKiBUSU5LRVJQT1AtMjcwMiBwcm9wZXJ0eShudWxsKSB0aHJvd3MgTlBFCisqIFRJTktFUlBPUC0yNzA2IFRyYXZlcnNhbCBjbG9uZSgpIG5vdCByZXNldHRpbmcgdGhlIGNsb3NlIHN0YXRlCisqIFRJTktFUlBPUC0yNzEyIFByb3BlcnR5Q2hhbmdlZEV2ZW50IGlzIHRyaWdnZXJlZCBiZWZvcmUgUHJvcGVydHkgaXMgYWN0dWFsbHkgY2hhbmdlZAorKiBUSU5LRVJQT1AtMjcxNyBHcmVtbGluLk5FVCA6IFdlYlNvY2tldENvbm5lY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIE1lc3NhZ2VUeXBlLkNsb3NlLCBjYXVzaW5nIGVycm9yIEludmFsaWRPcGVyYXRpb25FeGNlcHRpb246ICJSZWNlaXZlZCBkYXRhIGRlc2VyaWFsaXplZCBpbnRvIG51bGwgb2JqZWN0IG1lc3NhZ2UuIENhbm5vdCBvcGVyYXRlIG9uIGl0LiIKKyogVElOS0VSUE9QLTI3MTkgaGFzTmV4dCBpcyBjYWxsZWQgb24gVHJhdmVyc2VySXRlcmF0b3IgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkCisqIFRJTktFUlBPUC0yNzI2IFB5dGhvbidzIEdyb292eVRyYW5zbGF0b3IgdHJhbnNsYXRlcyBib29sZWFuIHdyb25nCisKKz09PT0gSW1wcm92ZW1lbnRzCisKKyogVElOS0VSUE9QLTIzNjcgR3JlbWxpbiBUcmFuc2xhdG9ycyBmb3IgLk5FVAorKiBUSU5LRVJQT1AtMjM3OSBDb25zaXN0ZW50IGRlZmF1bHRzIGFuZCBpbml0aWFsaXphdGlvbiBBUElzIGZvciBkcml2ZXJzCisqIFRJTktFUlBPUC0yNDExIE1vdmUgR3JlbWxpbkRzbFByb2Nlc3NvciB0byBpdHMgb3duIGFydGlmYWN0ICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjQ2NyBGb2xsb3cgcHl0aG9uIG5hbWluZyBjb252ZW50aW9ucyBmb3IgR3JlbWxpbiBzeW50YXgKKyogVElOS0VSUE9QLTI1MDQgSW50ZXJtaXR0ZW50bHkgZmFpbGluZyBzZXJ2ZXIvZHJpdmVyIGludGVncmF0aW9uIHRlc3RzCisqIFRJTktFUlBPUC0yNTE4IEVuaGFuY2UgLk5FVCBnaGVya2luIGZyYW1ld29yayB0byBkZWFsIHdpdGggbW9yZSBhZHZhbmNlZCBhc3NlcnRpb25zCisqIFRJTktFUlBPUC0yNTI0IEV4cGFuZCBzdXBwb3J0IGZvciBudW1iZXIgdHlwZXMgaW4gZ3JhbW1hcgorKiBUSU5LRVJQT1AtMjUyNSBFeHRlbmQgR2hlcmtpbiB0ZXN0cyB0byBjb3ZlciBzdHJhdGVnaWVzCisqIFRJTktFUlBPUC0yNTM0IExvZzRqIGZsYWdnZWQgYXMgY3JpdGljYWwgc2VjdXJpdHkgdmlvbGF0aW9uCisqIFRJTktFUlBPUC0yNTQ4IEFkZCBnZXR0ZXIgZm9yIGluZGV4ZXIgdXNlZCBpbiBJbmRleFN0ZXAKKyogVElOS0VSUE9QLTI1NTEgU2V0dXAgc2NyaXB0cyB0byBwdWJsaXNoIEdyZW1pbnQgdG8gbnBtCisqIFRJTktFUlBPUC0yNTU1IFN1cHBvcnQgZm9yIHJlbW90ZSB0cmFuc2FjdGlvbnMgaW4gUHl0aG9uCisqIFRJTktFUlBPUC0yNTU2IFN1cHBvcnQgcmVtb3RlIHRyYW5zYWN0aW9ucyBpbiAuTkVUCisqIFRJTktFUlBPUC0yNTU3IFN1cHBvcnQgcmVtb3RlIHRyYW5zYWN0aW9ucyBpbiBKYXZhc2NyaXB0CisqIFRJTktFUlBPUC0yNTU5IFN0b3Agc2VuZGluZyB0aGUgY2xvc2UgbWVzc2FnZSBmb3IgLk5FVAorKiBUSU5LRVJQT1AtMjU2MCBTdG9wIHNlbmRpbmcgY2xvc2UgbWVzc2FnZSBmb3IgUHl0aG9uCisqIFRJTktFUlBPUC0yNTYxIFN0b3Agc2VuZGluZyBjbG9zZSBtZXNzYWdlIGluIEphdmFzY3JpcHQKKyogVElOS0VSUE9QLTI1NjIgUmVtb3ZlIEdyYXBoU09OIDIgb3B0aW9uIGluIFRyYXZlcnNhbE9wUHJvY2Vzc29yICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjU3MCBTdXBwb3J0IGN1c3RvbSB0eXBlIGluIEdyYXBoQmluYXJ5IGZvciAuTkVUCisqIFRJTktFUlBPUC0yNTc2IFNldHVwIGF1dG9tYXRpYyB1cGRhdGVzIHZpYSBEZXBlbmRhYm90IGZvciBHcmVtbGluLk5FVAorKiBUSU5LRVJQT1AtMjU3NyBSZW1vdmUgdW51c2VkIHRlc3QgY292ZXJhZ2UgZGVwZW5kZW5jaWVzIGZyb20gR3JlbWxpbi5ORVQKKyogVElOS0VSUE9QLTI1ODIgQ29uc3RydWN0IHRyYXZlcnNhbHMgZnJvbSBncmVtbGluLWxhbmd1YWdlCisqIFRJTktFUlBPUC0yNTgzIE1ha2UgZ3JlbWxpbi1ncm9vdnkgcHJvY2Vzc2luZyBvcHRpb25hbCBpbiBHcmVtbGluIFNlcnZlcgorKiBUSU5LRVJQT1AtMjU5MSBBZG1pbmlzdHJhdGl2ZSBhZGp1c3RtZW50cyB0byBncmVtbGludCBzaXRlCisqIFRJTktFUlBPUC0yNTkyIEFsaWduIHRoZSBzdHlsZSBndWlkZXMKKyogVElOS0VSUE9QLTI1OTMgUmVtb3ZlIEdyb292eSBhcyBhIGRlcGVuZGVuY3kgZnJvbSBncmVtbGluLWRyaXZlciAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI1OTYgZGF0ZXRpbWUgZnVuY3Rpb24KKyogVElOS0VSUE9QLTI2MDEgVW5pZnkgR3JlbWxpbiB0ZXN0aW5nIGJlaGluZCBHaGVya2luCisqIFRJTktFUlBPUC0yNjA1IEZ1cnRoZXIgZW5mb3JjZSBhbmQgcmVmaW5lIG51bGwgc2VtYW50aWNzCisqIFRJTktFUlBPUC0yNjA4IEVuaGFuY2Ugc2FtcGxlKCkuYnkoKSBzZW1hbnRpY3Mgd2hlbiBieSBwcm9kdWNlcyBhIG51bGwgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNjExIFByZXZlbnQgcHJvcGVydHkoaWQsbnVsbCkgYW5kIGFkZFYobnVsbCkgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNjEzIEltcHJvdmUgYmVoYXZpb3Igb2YgVi9FKG51bGwpCisqIFRJTktFUlBPUC0yNjE1IEV4cGFuZCB0ZXN0aW5nIG9mIHBhdGgoKSB3aXRoIG51bGwgdmFsdWVzCisqIFRJTktFUlBPUC0yNjE2IFByb3ZpZGUgYmV0dGVyIGV4Y2VwdGlvbnMgd2l0aCBTU0wgcmVsYXRlZCBmYWlsdXJlcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI2MjAgQ2xlYW4gdXAgTnVsbFBvaW50ZXJFeGNlcHRpb25zIHJlbGF0ZWQgdG8gbnVsbCBhcmd1bWVudHMgb24gcHJvcGVydHkgcmVsYXRlZCBzdGVwcworKiBUSU5LRVJQT1AtMjYzMCBDbGFyaWZ5IHRoYXQgYSBzZXJ2ZXIgY2Fubm90IHN1cHBvcnQgR3JhcGhzb24xLjAgb3ZlciBIVFRQCisqIFRJTktFUlBPUC0yNjMyIE5ldHR5IDQuMS42MSBmbGFnZ2VkIHdpdGggdHdvIGhpZ2ggc2V2ZXJpdHkgc2VjdXJpdHkgdmlvbGF0aW9ucworKiBUSU5LRVJQT1AtMjYzNSBDb25zaXN0ZW50IGJ5KCkgYmVoYXZpb3IgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNjM2IFJlbW92ZSBQcm9kdWN0aXZlQnlTdHJhdGVneSBhcyBhIGRlZmF1bHQgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNjM3IEVuaGFuY2UgbG9nZ2luZyBpbiB0aGUgUHl0aG9uCisqIFRJTktFUlBPUC0yNjM5IFJlbW92ZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgR3J5b01lc3NhZ2VTZXJpYWxpemVyIGluZnJhc3RydWN0dXJlICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjY0MCBSZW1vdmUgcHJldmlvdXNseSBkZXByZWNhdGVkIEF1dGhlbnRpY2F0aW9uU2V0dGluZ3MuZW5hYmxlQXVkaXRMb2cgc2V0dGluZyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI2NDEgQWxsb3cgb3JkZXJhYmlsaXR5IG9uIGFueSB0eXBlCisqIFRJTktFUlBPUC0yNjQ1IEltcHJvdmUgYmVoYXZpb3Igb2YgaGFzSWQobnVsbCkKKyogVElOS0VSUE9QLTI2NDYgTWFrZSAuTkVUIFN0cmVhbUV4dGVuc2lvbnMgcHVibGljIGZvciBHcmFwaEJpbmFyeQorKiBUSU5LRVJQT1AtMjY1MCBSZW1vdmUgZGVwcmVjYXRlZCBHcmVtbGluIHN0ZXAgb3ZlcmxvYWRzIG9mIHB5dGhvbiBrZXl3b3JkcyAqKGJyZWFraW5nKSoKKyogVElOS0VSUE9QLTI2NTEgVXBkYXRlIHRvIC5ORVQgNgorKiBUSU5LRVJQT1AtMjY1MiBBZGQgVGV4dFAucmVnZXggdG8gdGhlIHRleHQgcHJlZGljYXRlIHNldAorKiBUSU5LRVJQT1AtMjY1NiBQcm92aWRlIGEgbm8gc3ludGF4IHN1Z2FyIHRyYW5zbGF0b3IgZm9yIHB5dGhvbgorKiBUSU5LRVJQT1AtMjY1NyBSZW1vdmUgR3Jvb3Z5VHJhbnNsYXRvciBmcm9tIGdyZW1saW4tZ3Jvb3Z5ICooYnJlYWtpbmcpKgorKiBUSU5LRVJQT1AtMjY1OSBCdW1wIGphdmFzY3JpcHQgcnVudGltZXMgdG8gbm9kZSB2MTYKKyogVElOS0VSUE9QLTI2NjAgQnJpbmcgYmFjayBjbG9zZSBtZXNzYWdlIGZvciBkcml2ZXJzCisqIFRJTktFUlBPUC0yNjYzIFN1cHBvcnQgVmVydGV4IHJlZmVyZW5jZXMgaW4gZ3JhbW1hcgorKiBUSU5LRVJQT1AtMjY2NSBBZGQgdGhlIGFiaWxpdHkgZm9yIHByb3BlcnR5KCkgdG8gdGFrZSBhIG1hcAorKiBUSU5LRVJQT1AtMjY2NiBDcmVhdGUgYW4gYW5vbnltaXppbmcgVHJhbnNsYXRvciBmb3IgbG9nZ2luZyB0cmF2ZXJzYWxzIHdpdGhvdXQgdXNlciBkYXRhCisqIFRJTktFUlBPUC0yNjY3IEFsbG93IGZvbGQoKSB3aXRoIGFkZEFsbCB0byB3b3JrIG9uIE1hcAorKiBUSU5LRVJQT1AtMjY2OCBVcGRhdGluZyBhaW9odHRwIHJlcXVpcmVtZW50cyBhdCBnZXJtaW4tcHl0aG9uIGR1ZSB0byB2dWxuZXJhYmlsaXR5CisqIFRJTktFUlBPUC0yNjY5IE5ldHR5IDQuMS42MSBmbGFnZ2VkIHdpdGggbWVkaXVtIHNldmVyaXR5IHNlY3VyaXR5IHZpb2xhdGlvbnMKKyogVElOS0VSUE9QLTI2NzEgQWRkIHR4KCkgc3VwcG9ydCB0byBncmFtbWFyCisqIFRJTktFUlBPUC0yNjc2IFJlZmFjdG9yIEdyZW1saW5TY3JpcHQgY2hlY2tlciBvdXQgb2YgZ3Jvb3Z5IHBhY2thZ2UgKihicmVha2luZykqCisqIFRJTktFUlBPUC0yNjc4IGphY2tzb24tZGF0YWJpbmQgbWVkaXVtIHNlY3VyaXR5IGlzc3VlIGlkZW50aWZpZWQKKyogVElOS0VSUE9QLTI2NzkgVXBkYXRlIEphdmFTY3JpcHQgZHJpdmVyIHRvIHN1cHBvcnQgcHJvY2Vzc2luZyBtZXNzYWdlcyBhcyBhIHN0cmVhbQorKiBUSU5LRVJQT1AtMjY4MCBDcmVhdGUgY2FsbCgpIHN0ZXAgdG8gYWxsb3cgZm9yIGNhbGxpbmcgcHJvY2VkdXJlcworKiBUSU5LRVJQT1AtMjY4MSBDcmVhdGUgbWVyZ2UoKSBzdGVwIHRvIGNvZGlmeSBiZXN0IHByYWN0aWNlIGZvciB1cHNlcnQgcGF0dGVybgorKiBUSU5LRVJQT1AtMjY4MiBFbmFibGUgV2ViU29ja2V0IGNvbXByZXNzaW9uIGluIC5ORVQgYnkgZGVmYXVsdAorKiBUSU5LRVJQT1AtMjY4NyBHcmVtbGluIEJvb2xlYW4gVmFsdWUgRXhwcmVzc2lvbnMgMi4wIHdpdGggVGVybmFyeSBCb29sZWFuIExvZ2ljcworKiBUSU5LRVJQT1AtMjY4OCBJbnZlc3RpZ2F0ZSB0d28gLk5FVCB0ZXN0IGZhaWx1cmVzCisqIFRJTktFUlBPUC0yNjg5IFZlcnRleFByb3BlcnR5IEdoZXJraW4gc3VwcG9ydCBmb3IgLk5FVAorKiBUSU5LRVJQT1AtMjY5MCBWZXJ0ZXhQcm9wZXJ0eSBHaGVya2luIHN1cHBvcnQgZm9yIEphdmFzY3JpcHQKKyogVElOS0VSUE9QLTI2OTEgVmVydGV4UHJvcGVydHkgR2hlcmtpbiBzdXBwb3J0IGZvciBQeXRob24KKyogVElOS0VSUE9QLTI2OTUgU3VwcG9ydCBOYU4vSW5mIGluIFBhcnNlciBhbmQgR2hlcmtpbgorKiBUSU5LRVJQT1AtMjcwNSBTdXBwb3J0IG51bGwgYXMgYW4gYXJndW1lbnQgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgaW4gR3JlbWxpbi5ORVQKKyogVElOS0VSUE9QLTI3MDcgQ2xvc2luZyBwYXJlbnQgY29ubmVjdGlvbiBpbiBweXRob24gc2hvdWxkIGNsb3NlIHR4KCkgY29ubmVjdGlvbnMKKyogVElOS0VSUE9QLTI3MTEgTWFrZSBncmVtbGluLWxhbmd1YWdlIG9wdGlvbmFsIGFzIGl0IGJyaW5ncyBpbiBDRERML0dQTCBkZXBlbmRlbmNpZXMKKyogVElOS0VSUE9QLTI3MTMgQ3JlYXRlIGFuIGVsZW1lbnQoKSBzdGVwIHRoYXQgbWFwcyBhIFByb3BlcnR5IHRvIGl0cyBFbGVtZW50LgorKiBUSU5LRVJQT1AtMjcxNiBFbmFibGUgZXNsaW50IGZvciBncmVtbGluLWphdmFzY3JpcHQgcHJvamVjdAorKiBUSU5LRVJQT1AtMjcyNSBUcmF2ZXJzYWwgU3RyYXRlZ3kgTWl4IFVwIEluIEdyZW1saW4tUHl0aG9uCisqIFRJTktFUlBPUC0yNzI3IEhhc0NvbnRhaW5lciBzaG91bGQgYWxsb3cgYSBudWxsIGtleQorKiBUSU5LRVJQT1AtMjcyOCBqYWNrc29uLWRhdGFiaW5kIGhpZ2ggc2VjdXJpdHkgaXNzdWUgaWRlbnRpZmllZApkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvLmdpdGlnbm9yZSBiL2RvY3MvZ3JlbWxhdG9yLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZkNWRmOAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3JlbWxhdG9yLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorCitub2RlX21vZHVsZXMKK2J1aWxkCitkaXN0CmRpZmYgLS1naXQgYS9ncmVtbGludC8ucHJldHRpZXJyYyBiL2RvY3MvZ3JlbWxhdG9yLy5wcmV0dGllcnJjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gZ3JlbWxpbnQvLnByZXR0aWVycmMKY29weSB0byBkb2NzL2dyZW1sYXRvci8ucHJldHRpZXJyYwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvTElDRU5TRSBiL2RvY3MvZ3JlbWxhdG9yL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBncmVtbGludC9MSUNFTlNFCmNvcHkgdG8gZG9jcy9ncmVtbGF0b3IvTElDRU5TRQpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvUkVBRE1FLm1kIGIvZG9jcy9ncmVtbGF0b3IvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDg1NGEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9SRUFETUUubWQKQEAgLTAsMCArMSw2MiBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKyMjIyBXaGF0IGlzIEdyZW1sYXRvcj8KKworR3JlbWxhdG9yIGlzIGEgY2xpZW50LXNpZGUgc2luZ2xlLXBhZ2UgYXBwbGljYXRpb24gdGhhdCB0cmFuc2xhdGVzIEdyZW1saW4gcXVlcmllcyBmcm9tIG9uZSBsYW5ndWFnZSB2YXJpYW50IHRvIGFub3RoZXIuIEVudGVyIGEgR3JlbWxpbiBxdWVyeSBhbmQgaW5zdGFudGx5IHNlZSB0aGUgZXF1aXZhbGVudCBmb3JtIGluIENhbm9uaWNhbCwgSmF2YVNjcmlwdCwgUHl0aG9uLCBHbywgLk5FVCwgSmF2YSwgR3Jvb3Z5LCBhbmQgQW5vbnltaXplZCB2YXJpYW50cyDigJQgYWxsIHBvd2VyZWQgYnkgdGhlIEdyZW1saW4gSmF2YVNjcmlwdCBHTFYgcnVubmluZyBlbnRpcmVseSBpbiB0aGUgYnJvd3Nlci4KKworIyMjIEdpdmUgaXQgYSB0cnkhCisKK2h0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZ3JlbWxhdG9yCisKKyMjIEF2YWlsYWJsZSBTY3JpcHRzCisKK0luIHRoZSBwcm9qZWN0IGRpcmVjdG9yeSwgeW91IGNhbiBydW46CisKK2BgYAorbnBtIGluc3RhbGwKK2BgYAorCitJbnN0YWxscyBkZXBlbmRlbmNpZXMuCisKK2BgYAorbnBtIHN0YXJ0CitgYGAKKworUnVucyB0aGUgYXBwIGluIHRoZSBkZXZlbG9wbWVudCBtb2RlLlwKK09wZW4gW2h0dHA6Ly9sb2NhbGhvc3Q6NTE3My9ncmVtbGF0b3JdKGh0dHA6Ly9sb2NhbGhvc3Q6NTE3My9ncmVtbGF0b3IpIHRvIHZpZXcgaXQgaW4gdGhlIGJyb3dzZXIuCisKK1RoZSBwYWdlIHdpbGwgcmVsb2FkIGlmIHlvdSBtYWtlIGVkaXRzLlwKK1lvdSB3aWxsIGFsc28gc2VlIGFueSBsaW50IGVycm9ycyBpbiB0aGUgY29uc29sZS4KKworYGBgCitucG0gdGVzdAorYGBgCisKK0xhdW5jaGVzIHRoZSB0ZXN0IHJ1bm5lciB2aWEgVml0ZXN0LgorCitgYGAKK25wbSBydW4gYnVpbGQKK2BgYAorCitCdWlsZHMgdGhlIGFwcCBmb3IgcHJvZHVjdGlvbiB0byB0aGUgYGRpc3RgIGZvbGRlci5cCitJdCBjb3JyZWN0bHkgYnVuZGxlcyBSZWFjdCBpbiBwcm9kdWN0aW9uIG1vZGUgYW5kIG9wdGltaXplcyB0aGUgYnVpbGQgZm9yIHRoZSBiZXN0IHBlcmZvcm1hbmNlLgorCitUaGUgYnVpbGQgaXMgbWluaWZpZWQgYW5kIHRoZSBmaWxlbmFtZXMgaW5jbHVkZSB0aGUgaGFzaGVzLlwKK1lvdXIgYXBwIGlzIHJlYWR5IHRvIGJlIGRlcGxveWVkIQpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvaW5kZXguaHRtbCBiL2RvY3MvZ3JlbWxhdG9yL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTliMGM1YgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3JlbWxhdG9yL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz4KKyAgICA8bGluayByZWw9Imljb24iIGhyZWY9Ii9mYXZpY29uLmljbyIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIC8+CisgICAgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiIGNvbnRlbnQ9IiMwMDAwMDAiIC8+CisgICAgPG1ldGEKKyAgICAgIG5hbWU9ImRlc2NyaXB0aW9uIgorICAgICAgY29udGVudD0iR3JlbWxhdG9yIC0gR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50IFRyYW5zbGF0b3IuIENvbnZlcnQgR3JlbWxpbiBxdWVyaWVzIGJldHdlZW4gbGFuZ3VhZ2VzOiBKYXZhU2NyaXB0LCBQeXRob24sIEdvLCAuTkVULCBKYXZhLCBHcm9vdnkuIgorICAgIC8+CisgICAgPHRpdGxlPkdyZW1sYXRvciAtIEdyZW1saW4gTGFuZ3VhZ2UgVmFyaWFudCBUcmFuc2xhdG9yPC90aXRsZT4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8bm9zY3JpcHQ+WW91IG5lZWQgdG8gZW5hYmxlIEphdmFTY3JpcHQgdG8gcnVuIHRoaXMgYXBwLjwvbm9zY3JpcHQ+CisgICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CisgICAgPHNjcmlwdCB0eXBlPSJtb2R1bGUiIHNyYz0iL3NyYy9pbmRleC50c3giPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9wYWNrYWdlLWxvY2suanNvbiBiL2RvY3MvZ3JlbWxhdG9yL3BhY2thZ2UtbG9jay5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDcyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9wYWNrYWdlLWxvY2suanNvbgpAQCAtMCwwICsxLDYwMjEgQEAKK3sKKyAgIm5hbWUiOiAiZ3JlbWxhdG9yIiwKKyAgInZlcnNpb24iOiAiMC4xLjAiLAorICAibG9ja2ZpbGVWZXJzaW9uIjogMywKKyAgInJlcXVpcmVzIjogdHJ1ZSwKKyAgInBhY2thZ2VzIjogeworICAgICIiOiB7CisgICAgICAibmFtZSI6ICJncmVtbGF0b3IiLAorICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImdyZW1saW4iOiAiNC4wLjAtYmV0YS4yIiwKKyAgICAgICAgInJlYWN0IjogIl4xOC4zLjEiLAorICAgICAgICAicmVhY3QtZG9tIjogIl4xOC4zLjEiLAorICAgICAgICAic3R5bGVkLWNvbXBvbmVudHMiOiAiXjYuMS4wIiwKKyAgICAgICAgIndlYi12aXRhbHMiOiAiXjUuMi4wIgorICAgICAgfSwKKyAgICAgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tIjogIl42LjYuMyIsCisgICAgICAgICJAdGVzdGluZy1saWJyYXJ5L3JlYWN0IjogIl4xNi4zLjIiLAorICAgICAgICAiQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50IjogIl4xNC42LjEiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiXjI1LjYuMCIsCisgICAgICAgICJAdHlwZXMvcmVhY3QiOiAiXjE4LjMuMTgiLAorICAgICAgICAiQHR5cGVzL3JlYWN0LWRvbSI6ICJeMTguMy41IiwKKyAgICAgICAgIkB2aXRlanMvcGx1Z2luLXJlYWN0IjogIl40LjMuNCIsCisgICAgICAgICJnaC1wYWdlcyI6ICJeNi4zLjAiLAorICAgICAgICAianNkb20iOiAiXjI5LjAuMiIsCisgICAgICAgICJwcmV0dGllciI6ICJeMy4wLjEiLAorICAgICAgICAidHNsaW50IjogIl42LjEuMyIsCisgICAgICAgICJ0c2xpbnQtY29uZmlnLXByZXR0aWVyIjogIl4xLjE4LjAiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICJeNS43LjMiLAorICAgICAgICAidml0ZSI6ICJeNi4xLjAiLAorICAgICAgICAidml0ZXN0IjogIl40LjEuNCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMiIKKyAgICAgIH0KKyAgICB9LAorICAgICIuLi8uLi8uLi8uLi9jcmV3L3NwbS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdCI6IHsKKyAgICAgICJuYW1lIjogImdyZW1saW4iLAorICAgICAgInZlcnNpb24iOiAiNC4wLjAtYWxwaGExIiwKKyAgICAgICJleHRyYW5lb3VzIjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFudGxyNG5nIjogIjMuMC4xNiIsCisgICAgICAgICJidWZmZXIiOiAiXjYuMC4zIiwKKyAgICAgICAgImV2ZW50ZW1pdHRlcjMiOiAiXjUuMC4xIiwKKyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICJeNC41LjIiLAorICAgICAgICAidXVpZCI6ICJeOS4wLjEiCisgICAgICB9LAorICAgICAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjdWN1bWJlci9jdWN1bWJlciI6ICJ+MTIuNy4wIiwKKyAgICAgICAgIkBlc2xpbnQvanMiOiAiXjkuMTYuMCIsCisgICAgICAgICJAa25pZ2h0ZWQvZHVlbCI6ICJeNC4wLjIiLAorICAgICAgICAiQHRzY29uZmlnL25vZGUxOCI6ICJeMTguMi4yIiwKKyAgICAgICAgIkB0eXBlcy9yZWFkYWJsZS1zdHJlYW0iOiAiXjQuMC4xMCIsCisgICAgICAgICJAdHlwZXMvdXVpZCI6ICJeOS4wLjgiLAorICAgICAgICAiYW50bHItbmciOiAiXjEuMC4xMCIsCisgICAgICAgICJjaGFpIjogIn40LjUuMCIsCisgICAgICAgICJjaGFpLXN0cmluZyI6ICJ+MS41LjAiLAorICAgICAgICAiY29sb3JzIjogIjEuNC4wIiwKKyAgICAgICAgImNyb3NzLWVudiI6ICJeMTAuMS4wIiwKKyAgICAgICAgImVzbGludCI6ICJeOS4zNi4wIiwKKyAgICAgICAgImVzbGludC1jb25maWctcHJldHRpZXIiOiAiXjEwLjAuMSIsCisgICAgICAgICJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjogIl41LjAuMCIsCisgICAgICAgICJnbG9iYWxzIjogIl4xNS4xNC4wIiwKKyAgICAgICAgImpzLXlhbWwiOiAiXjMuMTQuMiIsCisgICAgICAgICJqc2RvYyI6ICJeNC4wLjUiLAorICAgICAgICAibW9jaGEiOiAiXjExLjcuNSIsCisgICAgICAgICJwcmV0dGllciI6ICJeMy4wLjAiLAorICAgICAgICAidHMtbm9kZSI6ICJeMTAuOS4yIiwKKyAgICAgICAgInR5cGVzY3JpcHQiOiAiXjUuNC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIyIgorICAgICAgfSwKKyAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzIjogIl4zLjk2Ny4wIiwKKyAgICAgICAgIkBzbWl0aHkvaGFzaC1ub2RlIjogIl40LjIuMTIiLAorICAgICAgICAiQHNtaXRoeS9zaWduYXR1cmUtdjQiOiAiXjUuMy4xMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGFkb2JlL2Nzcy10b29scyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYWRvYmUvY3NzLXRvb2xzLy0vY3NzLXRvb2xzLTQuNC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FbHAraXdVeDVyTjUrWTh4THQ1L0dSb0cyMFdHb0RDUS8xRmIrMUxpR3R2d2JEYXZ1U2swamhEL2VaZGNrSEF1emNEemNjbmt2K3JFanlXZlJ4MThnZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXNhbXV6YWtqcC9jc3MtY29sb3IiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjEuMTEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhc2FtdXpha2pwL2Nzcy1jb2xvci8tL2Nzcy1jb2xvci01LjEuMTEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtWdzZxSWlDVFVRaEJ5ZlRkNzhoMnlEMS8wMHdhVG1tOXV5L1I3Q2svY3RVeUFQaitBRURMa1FJZEpXMFQ4K3FHZ2ozajVicE5LSzdRM0crTGVkSldnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhc2FtdXpha2pwL2dlbmVyYXRpb25hbC1jYWNoZSI6ICJeMS4wLjEiLAorICAgICAgICAiQGNzc3Rvb2xzL2Nzcy1jYWxjIjogIl4zLjIuMCIsCisgICAgICAgICJAY3NzdG9vbHMvY3NzLWNvbG9yLXBhcnNlciI6ICJeNC4xLjAiLAorICAgICAgICAiQGNzc3Rvb2xzL2Nzcy1wYXJzZXItYWxnb3JpdGhtcyI6ICJeNC4wLjAiLAorICAgICAgICAiQGNzc3Rvb2xzL2Nzcy10b2tlbml6ZXIiOiAiXjQuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTIuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGFzYW11emFranAvZG9tLXNlbGVjdG9yIjogeworICAgICAgInZlcnNpb24iOiAiNy4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhc2FtdXpha2pwL2RvbS1zZWxlY3Rvci8tL2RvbS1zZWxlY3Rvci03LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNjdSWkRuWVJjOEgvOE1MRGdRQ0RFLy96b3FWRndhamtlcEhaZ21YcmJ3eWJ6WE9Fd09XR1BZR21BTFlsOUoyRE9MZkZQUHM2a0tDcW1ielY4OTVoVFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGFzYW11emFranAvZ2VuZXJhdGlvbmFsLWNhY2hlIjogIl4xLjAuMSIsCisgICAgICAgICJAYXNhbXV6YWtqcC9ud3NhcGkiOiAiXjIuMy45IiwKKyAgICAgICAgImJpZGktanMiOiAiXjEuMC4zIiwKKyAgICAgICAgImNzcy10cmVlIjogIl4zLjIuMSIsCisgICAgICAgICJpcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZSI6ICJeMS4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8IF4yMi4xMi4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXNhbXV6YWtqcC9nZW5lcmF0aW9uYWwtY2FjaGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGFzYW11emFranAvZ2VuZXJhdGlvbmFsLWNhY2hlLy0vZ2VuZXJhdGlvbmFsLWNhY2hlLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13YWpmQjhLcXpNQ04yS0dORmRMa1JlZUhuY2QwQXNsVVNydkhWdnZZV3VVOGdobmNSSm9BNTBrVDN6UDlNVkwwKzlnNC82N0grY2R2QnNrajlUSFB6Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTIuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGFzYW11emFranAvbndzYXBpIjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhc2FtdXpha2pwL253c2FwaS8tL253c2FwaS0yLjMuOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjhHdVlTckk5YkY3RkZaL1NqaHdldmxIYzh4YVZsYi83SG1IZWxuYy9QWlhCRDJaUjQ5Tm5OOXNNTXVEZEVHUGVlUlE1ZDBocWxTbEVwZ0NYM1dsMFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIvLS9zaGEyNTYtYnJvd3Nlci01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVhmTi9sR290U1F3dTZITmNFc0lBU283a1dYWjVIWVd2Zk9tU05LRHNFcUM0T2FzaFRwOGFsVG1heitGN1RDMkwwODNTRnY1UmRCK3FVM1ZzMWtacXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWpzIjogIl41LjIuMCIsCisgICAgICAgICJAYXdzLWNyeXB0by9zdXBwb3J0cy13ZWItY3J5cHRvIjogIl41LjIuMCIsCisgICAgICAgICJAYXdzLWNyeXB0by91dGlsIjogIl41LjIuMCIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy4yMjIuMCIsCisgICAgICAgICJAYXdzLXNkay91dGlsLWxvY2F0ZS13aW5kb3ciOiAiXjMuMC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl4yLjAuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3NoYTI1Ni1icm93c2VyL25vZGVfbW9kdWxlcy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlci8tL2lzLWFycmF5LWJ1ZmZlci0yLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR0dQM085UUZEMjR1R2VBWFlVandTVFhBUm9xcFp5a0hhZE9tQThHNXZmSlBLMC9EQzY3cWEvLzBxdnFySnpMMXhjOFdRV1g3L3ljN2Z3dWRqUEhQaEE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYnVmZmVyLWZyb20vLS91dGlsLWJ1ZmZlci1mcm9tLTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JSmRXQmJUY01RNkRBMGdkTmhoL0J3ckxrRFIrQURXNUtyMWFabWQ0azNESUY2ZXpNVjRSMk5JQW1UMDh3UUozeVVLODJ0aEhXbUMvVG5LL3dwTU1JQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6ICJeMi4yLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC11dGY4IjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC11dGY4Ly0vdXRpbC11dGY4LTIuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SOFJkbjhIeTcyS0tjZWJnTGl2OGpRY1FrWG9MTU9HR3Y1dUkxL2swbCtzbnFrT3pRMVIwQ2hVQkN4V01sQnNGTWVrV2pxMHdSdWRJd2VGczdzS1Q1QT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3V0aWwtYnVmZmVyLWZyb20iOiAiXjIuMi4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3NoYTI1Ni1qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLWNyeXB0by9zaGEyNTYtanMvLS9zaGEyNTYtanMtNS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZGUVF5dTdlZHU0dWZ2SVorT2FkRnBISE90K2VTVEJhWWFraTQ0Yytha2pnN3FaZzlvT1FlTGxrNzdGNnRTWXFqREFGQ2xySEprOXRNZjBIZFZ5T3ZBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3MtY3J5cHRvL3V0aWwiOiAiXjUuMi4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjIyMi4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3N1cHBvcnRzLXdlYi1jcnlwdG8iOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1jcnlwdG8vc3VwcG9ydHMtd2ViLWNyeXB0by8tL3N1cHBvcnRzLXdlYi1jcnlwdG8tNS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlBdlVvdG0wMjFrTTMzZUNkTmZ3SU4vL0Y3Ny9JQUREU3M1OGkrTURhT3FGclZqWm85YkFhbDBOSzdIdXJSdVdMTHBGMWlMWDdnYldyakhqZW8rWUZnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLWNyeXB0by91dGlsLy0vdXRpbC01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNFJrVTlFc0k2WnBCdmU1ZnNlUWxHTlVXS01hMVJMUFExZG5qblFvZTA3bGRmSXpjc0diNWhDNVcwRG03dTQyM0tXemF3bHJwYmpYQnJYQ0V2OXphelE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuMjIyLjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjIuMC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbC9ub2RlX21vZHVsZXMvQHNtaXRoeS9pcy1hcnJheS1idWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9pcy1hcnJheS1idWZmZXIvLS9pcy1hcnJheS1idWZmZXItMi4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdHUDNPOVFGRDI0dUdlQVhZVWp3U1RYQVJvcXBaeWtIYWRPbUE4RzV2ZkpQSzAvREM2N3FhLy8wcXZxckp6TDF4YzhXUVdYNy95Yzdmd3VkalBIUGhBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYnVmZmVyLWZyb20vLS91dGlsLWJ1ZmZlci1mcm9tLTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JSmRXQmJUY01RNkRBMGdkTmhoL0J3ckxrRFIrQURXNUtyMWFabWQ0azNESUY2ZXpNVjRSMk5JQW1UMDh3UUozeVVLODJ0aEhXbUMvVG5LL3dwTU1JQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6ICJeMi4yLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbC9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXV0ZjgiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLXV0ZjgvLS91dGlsLXV0ZjgtMi4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI4UmRuOEh5NzJLS2NlYmdMaXY4alFjUWtYb0xNT0dHdjV1STEvazBsK3NucWtPelExUjBDaFVCQ3hXTWxCc0ZNZWtXanEwd1J1ZEl3ZUZzN3NLVDVBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6ICJeMi4yLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEwMjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvLS9jbGllbnQtY29nbml0by1pZGVudGl0eS0zLjEwMjcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteEdaZ1lOcVIwbEhWbTNBU20xeS9NWXV0TGdKMkphMmt1ZnJiQlF1d0dEN0tZcmZVVkJuRGdiWWV1RWhoeXpRaE92b0tYcEo3S3JBOHRtdjVSYzNhZ0E9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIiOiAiNS4yLjAiLAorICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWpzIjogIjUuMi4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTczLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZSI6ICJeMy45NzIuMzAiLAorICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlciI6ICJeMy45NzIuOSIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlciI6ICJeMy45NzIuOSIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb24iOiAiXjMuOTcyLjEwIiwKKyAgICAgICAgIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudCI6ICJeMy45NzIuMjkiLAorICAgICAgICAiQGF3cy1zZGsvcmVnaW9uLWNvbmZpZy1yZXNvbHZlciI6ICJeMy45NzIuMTEiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMiOiAiXjMuOTk2LjYiLAorICAgICAgICAiQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LWJyb3dzZXIiOiAiXjMuOTcyLjkiLAorICAgICAgICAiQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGUiOiAiXjMuOTczLjE1IiwKKyAgICAgICAgIkBzbWl0aHkvY29uZmlnLXJlc29sdmVyIjogIl40LjQuMTQiLAorICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvZmV0Y2gtaHR0cC1oYW5kbGVyIjogIl41LjMuMTYiLAorICAgICAgICAiQHNtaXRoeS9oYXNoLW5vZGUiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L2ludmFsaWQtZGVwZW5kZW5jeSI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1jb250ZW50LWxlbmd0aCI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludCI6ICJeNC40LjI5IiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1yZXRyeSI6ICJeNC41LjAiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlIjogIl40LjIuMTciLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLXN0YWNrIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlciI6ICJeNC4zLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXIiOiAiXjQuNS4yIiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvc21pdGh5LWNsaWVudCI6ICJeNC4xMi45IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJAc21pdGh5L3VybC1wYXJzZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYm9keS1sZW5ndGgtYnJvd3NlciI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGUiOiAiXjQuMi4zIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLWJyb3dzZXIiOiAiXjQuMy40NSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlIjogIl40LjIuNDkiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWVuZHBvaW50cyI6ICJeMy4zLjQiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtcmV0cnkiOiAiXjQuMy4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzMuMjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL2NvcmUvLS9jb3JlLTMuOTczLjI3LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DVVo1bThod01DSDZPWUk0TGkvV2dNZklFeDEwUTJQTEk5WTNYT1VUUEdaSjUzYVowMDA3akN2K1gveXdzYUVSeUtQZHc1TVJaV2s4Nzdyb1Frc1E0QT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAYXdzLXNkay94bWwtYnVpbGRlciI6ICJeMy45NzIuMTciLAorICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS9zaWduYXR1cmUtdjQiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3NtaXRoeS1jbGllbnQiOiAiXjQuMTIuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJhc2U2NCI6ICJeNC4zLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXRmOCI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1jb2duaXRvLWlkZW50aXR5IjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eS8tL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eS0zLjk3Mi4yMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaWg2T1JwbWU0aTJxSnFHY2tPUTlMdDJpaVorNXRtM2JuZnNUNVR3b1B5Rm51RFVSWHYzT2RoWWEzTnIvbTBpSnIzOGJpcUtZS2RHS2I1R1IxS0IyaHc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMiOiAiXjMuOTk2LjE5IiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4yNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYvLS9jcmVkZW50aWFsLXByb3ZpZGVyLWVudi0zLjk3Mi4yNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlFmSTB3djRqcEc1Q3JkTy9BTzBKZloydXgrdEt3SlByVXdtdnhYRjUwdkk1S0l5cEtWR05GNmI0dmxrWUVuS3VtRFRJMU5YMnpVQmk4Sm9VNVFVM0E9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzMuMjciLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWh0dHAiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4yNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1odHRwLy0vY3JlZGVudGlhbC1wcm92aWRlci1odHRwLTMuOTcyLjI3LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zVjNVc2o5R3M5M2g4NjVEcU40TTJOV0poQzVrWFU5QnZac2tmTjMrNjlvbXVZbEUzVFp4T0VjVlF0QkdMT2xvSkI3QlZmSktYVkxxZU5oT3pIcVNsUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jb3JlIjogIl4zLjk3My4yNyIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAc21pdGh5L2ZldGNoLWh0dHAtaGFuZGxlciI6ICJeNS4zLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXIiOiAiXjQuNS4yIiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3NtaXRoeS1jbGllbnQiOiAiXjQuMTIuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXN0cmVhbSI6ICJeNC41LjIyIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pLy0vY3JlZGVudGlhbC1wcm92aWRlci1pbmktMy45NzIuMjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNpQnVBblhlY0NiVC9PcEFmM3ZxeUkvQVZFM21UYVlyOVNoWEx5YnhaaVBMQmlQQ0NPSVdTR0F0WVlHUVdNUnZvYkJUaXFPZXdhQit3Y2dNTVpJMkF3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTczLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItZW52IjogIl4zLjk3Mi4yNSIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWh0dHAiOiAiXjMuOTcyLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbG9naW4iOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2VzcyI6ICJeMy45NzIuMjUiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28iOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5IjogIl4zLjk3Mi4yOSIsCisgICAgICAgICJAYXdzLXNkay9uZXN0ZWQtY2xpZW50cyI6ICJeMy45OTYuMTkiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQHNtaXRoeS9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1sb2dpbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjI5IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWxvZ2luLy0vY3JlZGVudGlhbC1wcm92aWRlci1sb2dpbi0zLjk3Mi4yOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT0dPc2xUYk9seFhleEtNcWh4Q0ViQlFiVUlmdWhHeFU1VVh3M0ZtNTZ5cFhIdnJYSDRhVHQveGI1WTg4NExPb3RlUDFRU1QxbFZaekhmY1RuV2hpUFE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzMuMjciLAorICAgICAgICAiQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMiOiAiXjMuOTk2LjE5IiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiAiXjQuNC44IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLW5vZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4zMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlLy0vY3JlZGVudGlhbC1wcm92aWRlci1ub2RlLTMuOTcyLjMwLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GTW5Bbld4YzhQRytacloyT0JLelk0bHVDVUpoZTlDRzBCOVl3WXI0cHpyWUdMWEJTMnJsK1VvVXZqR2JBd2lwdHhSTDZoeUEzbEZuMDNCdjFUTHFUdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWVudiI6ICJeMy45NzIuMjUiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1odHRwIjogIl4zLjk3Mi4yNyIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWluaSI6ICJeMy45NzIuMjkiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzIjogIl4zLjk3Mi4yNSIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzbyI6ICJeMy45NzIuMjkiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkiOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBzbWl0aHkvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvc2hhcmVkLWluaS1maWxlLWxvYWRlciI6ICJeNC40LjgiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2VzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjI1IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MvLS9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MtMy45NzIuMjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhSN3luTlJkTmhOc2RWQ09DZWd5MUhzZnNSem96Q09QdEQzUnp6VDFKb3V1YUhvYld5UmZKekNCdWUvM2pQN2dFQ0h0K2tReVpVdndnL2NZTFd1ck5RPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTczLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiAiXjQuNC44IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzbyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjI5IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzby8tL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvLTMuOTcyLjI5LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IV3Y0U0VxM2paRFlQbHdyeVpWZWY5NytVOEN4eFJvczVtSzhzZ0dPMWRRYUZacFY1Z2laTHpxR0U1aGtEbWgyY3NZY0JPMnVmNVhIalBUcFpjSmxpZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jb3JlIjogIl4zLjk3My4yNyIsCisgICAgICAgICJAYXdzLXNkay9uZXN0ZWQtY2xpZW50cyI6ICJeMy45OTYuMTkiLAorICAgICAgICAiQGF3cy1zZGsvdG9rZW4tcHJvdmlkZXJzIjogIjMuMTAyNi4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiAiXjQuNC44IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjI5IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eS8tL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5LTMuOTcyLjI5LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QZE1CemExV0VLRVVQRkVtTUdDZm5VMlJZQ3o5TXNrVTJlOEp4anlVT3NNS2t1N2o5WWFES3ZiRGkyZHpDMGloRm9NNm9kczJTYmhmQUFybytHd2xldz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jb3JlIjogIl4zLjk3My4yNyIsCisgICAgICAgICJAYXdzLXNkay9uZXN0ZWQtY2xpZW50cyI6ICJeMy45OTYuMTkiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvc2hhcmVkLWluaS1maWxlLWxvYWRlciI6ICJeNC40LjgiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzIjogeworICAgICAgInZlcnNpb24iOiAiMy4xMDI3LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzLy0vY3JlZGVudGlhbC1wcm92aWRlcnMtMy4xMDI3LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFKWnFSODZkRHRsQktUbXB2dnl6cVNTb2FMQkY1dWJtMVJ2RXlkVlhrTE9wYkQ1VmFrcStJYkhSUk1BUnhiUTFFMFFaTTFwL242ejBtbnNqR1diS1l3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NsaWVudC1jb2duaXRvLWlkZW50aXR5IjogIjMuMTAyNy4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTczLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eSI6ICJeMy45NzIuMjIiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYiOiAiXjMuOTcyLjI1IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaHR0cCI6ICJeMy45NzIuMjciLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkiOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbG9naW4iOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZSI6ICJeMy45NzIuMzAiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzIjogIl4zLjk3Mi4yNSIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzbyI6ICJeMy45NzIuMjkiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkiOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL25lc3RlZC1jbGllbnRzIjogIl4zLjk5Ni4xOSIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAc21pdGh5L2NvbmZpZy1yZXNvbHZlciI6ICJeNC40LjE0IiwKKyAgICAgICAgIkBzbWl0aHkvY29yZSI6ICJeMy4yMy4xNCIsCisgICAgICAgICJAc21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcyI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtaG9zdC1oZWFkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi45IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyLy0vbWlkZGxld2FyZS1ob3N0LWhlYWRlci0zLjk3Mi45LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qZTV2UmROdzRTa3VUbm1SYkZaTGR5ZTRzUTBmYUx0OGt3a2E1d25uU1UzMHExbUhPNFgraWRHRUpPT0UrVG4xTUU3T3J5bjA1eHhrRHZJYjNVYUxhUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi45IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlci8tL21pZGRsZXdhcmUtbG9nZ2VyLTMuOTcyLjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhzVmdEcnJ1aHFJMjhSa2FYQUxtOGdySjdBZ2Mxd0Y2RXQweGg2cG9tOE5kTzJWZE8vU0Q5VS90UHdVamV3d0svcFZva2ErRVNoQnh5Q3Znc1BDdG9nPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXJlY3Vyc2lvbi1kZXRlY3Rpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uLy0vbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uLTMuOTcyLjEwLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SVlFRYnE1b3JRL0dIVW5YdnFFT2oySEhQQkptK21NK3lTd1pLUzVVYUxCd3JhNXVnUnRpSDA5UExVb09aUmw3YTFZemFPelhTdUdibjlpRDVqNjBXUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAYXdzL2xhbWJkYS1pbnZva2Utc3RvcmUiOiAiXjAuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4yOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50Ly0vbWlkZGxld2FyZS11c2VyLWFnZW50LTMuOTcyLjI5LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mL3NJUnp1VGZFamc2TnNiTVl2eWUyVnNtblFvTmdudG50bGVReXg1dUdhY1VZenN6YmZJbE8zR2NJNkc2ZGFXVW1UbTBJRFpjMTFxTUhXd0YwbzBtUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jb3JlIjogIl4zLjk3My4yNyIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAYXdzLXNkay91dGlsLWVuZHBvaW50cyI6ICJeMy45OTYuNiIsCisgICAgICAgICJAc21pdGh5L2NvcmUiOiAiXjMuMjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1yZXRyeSI6ICJeNC4zLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk5Ni4xOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMvLS9uZXN0ZWQtY2xpZW50cy0zLjk5Ni4xOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdUZrbUNEWHZtUVlMYW5sWWRPRlMwK01RV2tyajl3UE10L1pDYy8wSjBmalBpbTZGNWpCVkJtRW9tdkdZL2o3N0lMVzZHVFB3TjIySmMxNzRNaGt3NlE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIiOiAiNS4yLjAiLAorICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWpzIjogIjUuMi4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTczLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL21pZGRsZXdhcmUtaG9zdC1oZWFkZXIiOiAiXjMuOTcyLjkiLAorICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS1sb2dnZXIiOiAiXjMuOTcyLjkiLAorICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uIjogIl4zLjk3Mi4xMCIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQiOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIiOiAiXjMuOTcyLjExIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My43IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzIjogIl4zLjk5Ni42IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1icm93c2VyIjogIl4zLjk3Mi45IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlIjogIl4zLjk3My4xNSIsCisgICAgICAgICJAc21pdGh5L2NvbmZpZy1yZXNvbHZlciI6ICJeNC40LjE0IiwKKyAgICAgICAgIkBzbWl0aHkvY29yZSI6ICJeMy4yMy4xNCIsCisgICAgICAgICJAc21pdGh5L2ZldGNoLWh0dHAtaGFuZGxlciI6ICJeNS4zLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvaGFzaC1ub2RlIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9pbnZhbGlkLWRlcGVuZGVuY3kiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtY29udGVudC1sZW5ndGgiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQiOiAiXjQuNC4yOSIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtcmV0cnkiOiAiXjQuNS4wIiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZSI6ICJeNC4yLjE3IiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1zdGFjayI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xMyIsCisgICAgICAgICJAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyIjogIl40LjUuMiIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3NtaXRoeS1jbGllbnQiOiAiXjQuMTIuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91cmwtcGFyc2VyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJhc2U2NCI6ICJeNC4zLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLWJyb3dzZXIiOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1ib2R5LWxlbmd0aC1ub2RlIjogIl40LjIuMyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtZGVmYXVsdHMtbW9kZS1icm93c2VyIjogIl40LjMuNDUiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZSI6ICJeNC4yLjQ5IiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1lbmRwb2ludHMiOiAiXjMuMy40IiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXJldHJ5IjogIl40LjMuMCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXRmOCI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvcmVnaW9uLWNvbmZpZy1yZXNvbHZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjExIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9yZWdpb24tY29uZmlnLXJlc29sdmVyLy0vcmVnaW9uLWNvbmZpZy1yZXNvbHZlci0zLjk3Mi4xMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlE4QjFkY3g2QkJxVVRZMU1jL2VST0tBMEZJbUVFWTVWUFNkNkFHUEVVZjBFcmpFeHo0c25WcWE5a05KU29WRFYxckthTmYzcXJXb2pnY0tXK1NkRGc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQHNtaXRoeS9jb25maWctcmVzb2x2ZXIiOiAiXjQuNC4xNCIsCisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMTAyNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvLS90b2tlbi1wcm92aWRlcnMtMy4xMDI2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUllcS9IaVJyYkV0cllQMzg3TmVzMFhsUjdIMXBKaUpPWkt2K1F5UXpNWXB2VGlEczBWS3kyWkIzRTJaZithRm92V21lRTdsUkU0bFh5RjdkWU02R2dBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTczLjI3IiwKKyAgICAgICAgIkBhd3Mtc2RrL25lc3RlZC1jbGllbnRzIjogIl4zLjk5Ni4xOSIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3My43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay90eXBlcy8tL3R5cGVzLTMuOTczLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJlWFJ3b0o2Q2ZDaG9xQXNCc3pVWWFqQUY4WjJMUkUrQ1JjS29jdkZTTXBJaUxPdFlVM2FKOXRybW42VlZQQXpiYlk1TFhGK0ZmbVVzbGJYazFTWUZnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLWVuZHBvaW50cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTk2LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzLy0vdXRpbC1lbmRwb2ludHMtMy45OTYuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMm5VUSsyaWg3Q1NodUtIcEdTSVl2dkFJT0h5NTJkT1pndVlHMzZ6cHRCdWtodzZpRndjdkdmRzB0ZXMwb1pGV1FxRVd2Z1plOUhMV2FObHZYR2RPcmc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXJsLXBhcnNlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1lbmRwb2ludHMiOiAiXjMuMy40IiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtbG9jYXRlLXdpbmRvdyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTY1LjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3V0aWwtbG9jYXRlLXdpbmRvdy8tL3V0aWwtbG9jYXRlLXdpbmRvdy0zLjk2NS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XaGxKTk5JTlFCKzlxdEx0WkpjcFFkZ1p3M1NDRENwWGRVSlA3Y1RvR3dIYkNXQ25SY2tHbGM2QngvT2hXd0lZRk5BbitGSXlkWThTWjBRbVZ1M3hUUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay91dGlsLXVzZXItYWdlbnQtYnJvd3NlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1icm93c2VyLy0vdXRpbC11c2VyLWFnZW50LWJyb3dzZXItMy45NzIuOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc24vTE16VGJHallxQ0NGMjQzOTBXeFBkNmhrcG9TcHRpVW41RHpWcDRjRDcxeXF3K3lHRUdtMVlDeHlFb1BYeWM4cWNpTThVekxKY1pCRnNseG81VXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjciLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgImJvd3NlciI6ICJeMi4xMS4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3My4xNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvdXRpbC11c2VyLWFnZW50LW5vZGUvLS91dGlsLXVzZXItYWdlbnQtbm9kZS0zLjk3My4xNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZlluM3M5UHRLZGdRa2N6R1pDRk1na05FZThhcTFKQ1ZiblJxanFOOVJTVlc0M3huMlJWOXhkY1ozejAxYTQ4SnBrdWgveENtQktKeGRMT280T3pnN3c9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS11c2VyLWFnZW50IjogIl4zLjk3Mi4yOSIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuNyIsCisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1jb25maWctcHJvdmlkZXIiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhd3MtY3J0IjogIj49MS4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAiYXdzLWNydCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsveG1sLWJ1aWxkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4xNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsveG1sLWJ1aWxkZXIvLS94bWwtYnVpbGRlci0zLjk3Mi4xNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmE3aGpxQVpmMU9YUlJNdWVCMTNxZXg3bUZKUkRLL3BnQ3ZkU0ZlbVhCVDhLQ0duUURQb0t6SFkxU2pOK1RqSlZtbnBTRjE0VzV0SjF2RGFtRnUrR2c9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgImZhc3QteG1sLXBhcnNlciI6ICI1LjUuOCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzL2xhbWJkYS1pbnZva2Utc3RvcmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy9sYW1iZGEtaW52b2tlLXN0b3JlLy0vbGFtYmRhLWludm9rZS1zdG9yZS0wLjIuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaVk4eXZqRTB5NjUxQml4S05QZ212MVdyUWMrR1oxNDJzYjB6NGdZbkNoRERZMllxSTRQL2pzU29wQldyS2ZBdDdMT0pBa09YdDdyQy9obXMrV2NsUVE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb2RlLWZyYW1lIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29kZS1mcmFtZS8tL2NvZGUtZnJhbWUtNy4yOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05TmhDZVlqcTkrM3V4Z2R0cDIwTFNpSlhKdk4wRmVDdE5HcEp4dU1GWjFLdjNjV1VOYjZET2hKd1V2Y1ZDektHUjY2Y3c0bmp3TTZockpMcWdPd2Jjdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjI4LjUiLAorICAgICAgICAianMtdG9rZW5zIjogIl40LjAuMCIsCisgICAgICAgICJwaWNvY29sb3JzIjogIl4xLjEuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2NvbXBhdC1kYXRhIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29tcGF0LWRhdGEvLS9jb21wYXQtZGF0YS03LjI5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVQxTkNKcVQvajkrY244ZnZrdDdqdHdiTEJmTEMvMXkxYzdOdENlWEZSZ3pHVHNhZmk2OE1Sdjh5emtZU2FwQm5GQTZMM1UyVlNjMDJjaUR6b0FKaEpnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29yZS8tL2NvcmUtNy4yOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DR09mT0pxV2pnMnFXL01iNnpOc0RtK3U1dkZROER4WGZiTTA5ejY5cDVaNittRTFpa1AyalVYdytqNDJQZjFYVFlFRDJSbmk1Zjk1bnBZZXV3TURRQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL2hlbHBlcnMiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI5LjAiLAorICAgICAgICAiQGpyaWRnZXdlbGwvcmVtYXBwaW5nIjogIl4yLjMuNSIsCisgICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjIuMC4wIiwKKyAgICAgICAgImRlYnVnIjogIl40LjEuMCIsCisgICAgICAgICJnZW5zeW5jIjogIl4xLjAuMC1iZXRhLjIiLAorICAgICAgICAianNvbjUiOiAiXjIuMi4zIiwKKyAgICAgICAgInNlbXZlciI6ICJeNi4zLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9iYWJlbCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2dlbmVyYXRvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2dlbmVyYXRvci8tL2dlbmVyYXRvci03LjI5LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFzYUYrOVFjbTJRdjhTUklNTXNjQXZHNE8zbEowRjFHdU1vNUhSL0JwMDJMb3BOZ25aQkMvRWtiZXZIRmVHczRscy9vUHo5ditCc216YmtiZSswZFV3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjkuMCIsCisgICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjEyIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4yOCIsCisgICAgICAgICJqc2VzYyI6ICJeMy4wLjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLy0vaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KWXRsczNocWkxNWZjeDVHYVNOTDdTQ1RKMk1ObWpya0hYZzRGU3BPQS9ncnhLOEt3eVo1YnViSHNDcThGWENrdWE2eGh1YWFCaXQrM2I3K1ZaUmZjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjcuMSIsCisgICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjQuMCIsCisgICAgICAgICJscnUtY2FjaGUiOiAiXjUuMS4xIiwKKyAgICAgICAgInNlbXZlciI6ICJeNi4zLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItZ2xvYmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1nbG9iYWxzLy0vaGVscGVyLWdsb2JhbHMtNy4yOC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rVzZjSVNrWEZhMWpYc0RFZFlBOEhlZXZRVC9GVUxoeHpSOTlweHBobHRaY1ZhdWdwczUzVEhDZWlXQThTZ3V4eHBTcDNnS1BpdVlmU1dvcGtMUTRodz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzLy0vaGVscGVyLW1vZHVsZS1pbXBvcnRzLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDVYa1pLN3I3d2E5THVjR3c5THdaeXlDVXNjYjR4MzdKV1RQejdzd3dGRS8wRk1RQUdwaVdVWm44dTlEemtTQldFY0syNWptdnViZnB3MmRuQU1kYnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjYiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMvLS9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02N29YRkFZcjJjRExEVkdMWFRFQUJqZEJKWjZkckVsVVNJN1dLcDcwTnJweUlTc28zcGxHOVNBR0VGNnk3emJoYS93T3pVQnlXV1RKdkVEVk5JVUdjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IiwKKyAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yOC42IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMvLS9oZWxwZXItcGx1Z2luLXV0aWxzLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzlnelovYno4M0dSeXNJN2dBRDR3UFQvQUkzdUNuWSs5eG4rTXgvS1BzMkp3SEpJejFXOFBaa2cyY3F5dDNSTk9CTThlamNYaFY2eThPZzdseS9EdWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIvLS9oZWxwZXItc3RyaW5nLXBhcnNlci03LjI3LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFNbFN4S2JwUmxBcmlkREV4azkyblNvYnlEZHBQaWpVcTJEVzZvRG5VcWQwaU9HeG1RanlxaE1JaWhJOSt6djRMUHlaZFJqZTJjYXZXUGJDYldtM2VBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIvLS9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXItNy4yOC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xU3M0aWZ3ektKU1YzOXVjTmpzdmM2V1ZIczZiN1MwM3NPaDJPY0hGOVVIZlZQcVdXQUxVc05VVnpoU0JpSXRqUlpvTEh4N25JYXJWanFLVnVzVVoxUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi8tL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uLTcuMjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXZqSm93OUZ4YmhGRktEU3VGblZDZTJXeFhrMXpXYzIyZkZlUFZORWFXSkV1OElyWlZsZGE2TjB1SHd6WnJVTTFpbDdOQzlNbHA0TWFKWWJZZDlKU2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI5LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXJzLy0vaGVscGVycy03LjI5LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhvR3VVczRzQ1pOZXpWRUtkVmN3cW1aTjhHb0hpckxVY0xhWVZOQksySjBEYWRHdGRjcWdyM0JDYnZIOCtYVW80TkdqTmwzVk90U2pFS056cWZGZ0t3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGFyc2VyLy0vcGFyc2VyLTcuMjkuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEdnUnp5Lytmc0JhNzIvUlpWSm1HS1BtWnU5QnluOG80TW9McG1OZTFtOFpmWW56NWVtSExRejNVNGdMdWQ2WndsMFJaSWNnaUxEN1VxN3lTRnVETEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI5LjAiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInBhcnNlciI6ICJiaW4vYmFiZWwtcGFyc2VyLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc2VsZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LXNlbGYvLS9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeC1zZWxmLTcuMjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlV6a0NzK2VqR2RaNW1GRkMvT0NVcnYwMjhhYjJmcDF6blptQ1pqQU9CS2lCSzJqWEQxTytCUFNmWDhYMnFqSjc1ZlpCTVNuUW4zUnEybXJCSksybXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjcuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlIjogeworICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlLy0vcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlLTcuMjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItemJ3b1RzQnJ1VGVLQjloU3E3M2hhNjZpRmVKSHVhRmtVYnd2cUVsbnlnb05iai9qSFJzU2Vva293WkZOM0NaNjRJdkVxY21ta1ZlODlPUFhjN2xkQXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjcuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3J1bnRpbWUvLS9ydW50aW1lLTcuMjkuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSmlEU2hINDV6S0hXeUdlNFpOVlJyQ2pCejhOaDlUTW1aRzFraDRRVEs4aENCVFdCaThEYStpN3MxZkp3Ny9sWXBNNGNjZXBTTmZxelovUXZBQkJpNWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3RlbXBsYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvdGVtcGxhdGUvLS90ZW1wbGF0ZS03LjI4LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlBNk1hMktzQ2RHYitXQzZVcEJWRkpHWEw1OE1EQTZveU9OYmp5Ri8rNXNCZ3hZL2R3a2hMb2diTVQyR1hYeVU4NC9JaFJ3LzJEMU9zMUIvZ2l6K0JRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOC42IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdHJhdmVyc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90cmF2ZXJzZS8tL3RyYXZlcnNlLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEhQaVFyMFg3K3dhSGZ5WFBacFdQZldML0o3ZGNOMW14OWdMNldkUVZNYlBuRjMrWmhTTXM4dEN4TjdvSGRkSkU5ZmhORTcrbHhkbmx5ZW1LZkpSdUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci1nbG9iYWxzIjogIl43LjI4LjAiLAorICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIiwKKyAgICAgICAgImRlYnVnIjogIl40LjMuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3R5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvdHlwZXMvLS90eXBlcy03LjI5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUx3ZFpIcFNjTTRRejhYdzJpS1N6UytjZmdsWnpKR3ZvZlFJQ3k3Vzd2NGNhcnU0RWFBbXlVdU82QkdyYnlRMm1ZVjExVzBVOGo1bUJoZDE0ZGQzQjBBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItc3RyaW5nLXBhcnNlciI6ICJeNy4yNy4xIiwKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiAiXjcuMjguNSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJyYW11cy9zcGVjaWZpY2l0eSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYnJhbXVzL3NwZWNpZmljaXR5Ly0vc3BlY2lmaWNpdHktMi40LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWN0eHRKL2VBK3QrNnEyKyt2ajVqN0ZZWDNuUnUzMTFxMXdmWUgzeGpsTE9zY3pobGh4QWcyRldOVVhocEd2QXczQldvMXhCY3ZPVjYvWUxjMnI1Rkp3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNzcy10cmVlIjogIl4zLjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAic3BlY2lmaWNpdHkiOiAiYmluL2NsaS5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL2NvbG9yLWhlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL2NvbG9yLWhlbHBlcnMvLS9jb2xvci1oZWxwZXJzLTYuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MTUdRTFM5RXVBRGxvRUZrY1RCUjNCd1YvQ0dIVjd6eUR4VlJ0VkRUd2RJMkNhNGl0MENDVlRUOXdDa3hTZ29rakU1SG80MWhFUGdiOE9FVXdvWHI2UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Nzc3Rvb2xzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQtMCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4xOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvY3NzLWNhbGMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL2Nzcy1jYWxjLy0vY3NzLWNhbGMtMy4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJSOWU2bzJCREIxMmp6Ti9nSWJqSGE1d0xKNFVqRDFDQjlwTTdlaGxjMGRkazZFQnoreVlTMUVWMk1GNTUvSFV4ckhjQi9oZWhBeXQ1dmhzQTNoeDd3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3NzdG9vbHMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4xOS4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGNzc3Rvb2xzL2Nzcy1wYXJzZXItYWxnb3JpdGhtcyI6ICJeNC4wLjAiLAorICAgICAgICAiQGNzc3Rvb2xzL2Nzcy10b2tlbml6ZXIiOiAiXjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvY3NzLWNvbG9yLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvY3NzLWNvbG9yLXBhcnNlci8tL2Nzcy1jb2xvci1wYXJzZXItNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVUwS2hMWW15MkdWajZxNFQzV2FBZTZOUHVGWUNQUW9FM2IwZFJHeGVqV0RnY1BwOFRQN1M1clZkTTVackZhcXU0TjY3WDhZYVBCdzE0ZFFTWXgzSXlRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3NzdG9vbHMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGNzc3Rvb2xzL2NvbG9yLWhlbHBlcnMiOiAiXjYuMC4yIiwKKyAgICAgICAgIkBjc3N0b29scy9jc3MtY2FsYyI6ICJeMy4yLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMTkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjc3N0b29scy9jc3MtcGFyc2VyLWFsZ29yaXRobXMiOiAiXjQuMC4wIiwKKyAgICAgICAgIkBjc3N0b29scy9jc3MtdG9rZW5pemVyIjogIl40LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL2Nzcy1wYXJzZXItYWxnb3JpdGhtcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvY3NzLXBhcnNlci1hbGdvcml0aG1zLy0vY3NzLXBhcnNlci1hbGdvcml0aG1zLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rQjg3cVM3ZklHM0w1aDNxd0ovSUZiam9Wb09lL2JwT2RoOWhBalhidngwbzhJbUVtVXNHWE4waW5GT25rMkNoQ0ZncWtrR0ZRK1RwTTVyYmhrS2U0dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Nzc3Rvb2xzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMTkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjc3N0b29scy9jc3MtdG9rZW5pemVyIjogIl40LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL2Nzcy1zeW50YXgtcGF0Y2hlcy1mb3ItY3NzdHJlZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvY3NzLXN5bnRheC1wYXRjaGVzLWZvci1jc3N0cmVlLy0vY3NzLXN5bnRheC1wYXRjaGVzLWZvci1jc3N0cmVlLTEuMS4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TSDYwYk1mclJDSkYzbW9yY2RrNTdXa2x1akY0SnIvRXNRVXpxa2FyZkhYRUZjQVIxZ2c3ZlMvY2hBRTkyMlNlaGd6YzEvK1R6NUgzWXBhMUhpRUtyZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Nzc3Rvb2xzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQtMCIsCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNzcy10cmVlIjogIl4zLjIuMSIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJjc3MtdHJlZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL2Nzcy10b2tlbml6ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL2Nzcy10b2tlbml6ZXIvLS9jc3MtdG9rZW5pemVyLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ReFVMSEFtN2NOdTcydzk3SlVOQ0JGT0RGYVhwYkRnK2RQOGIvb1dGQVoyTVRScHBBM1UwMFkyTDFIcWFTNEo2eUJxeHdhL1kzbk1CYXhWS2JCL05zQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Nzc3Rvb2xzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMTkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVtb3Rpb24vaXMtcHJvcC12YWxpZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkLy0vaXMtcHJvcC12YWxpZC0xLjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWdENGZ5c2NHY2JiS3dKbXFOdlVNU0UwMk9zSFVhK2xBV0tkRVVJSktncWU1SXdSU0tkNytLaGliRVdkYUt3Z2pMajBEUlNIQTliaUFJcUdCazA1bHc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlbW90aW9uL21lbW9pemUiOiAiXjAuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplIjogeworICAgICAgInZlcnNpb24iOiAiMC45LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlbW90aW9uL21lbW9pemUvLS9tZW1vaXplLTAuOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zMEZBajcvRW9KNW13VlBPV2hBeUNYK0ZQZk1EclZlY0pBTStJdzlOUm9TbDRCQkFRZXFqNGNBcEhIVVhPVnZJUGdMVkRzQ0Zvei9oR0QrNVFRRDFHUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVtb3Rpb24vdW5pdGxlc3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlbW90aW9uL3VuaXRsZXNzLy0vdW5pdGxlc3MtMC4xMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kRm9NVXVRQTIwenZ0VlR1eFp3dzZPSG9KWWdyemZLTTF0NTJtVnlTREpuTVNFYTA4cnVFdmRZUWJodnl1NnNvVStOZUxWZDN5S2ZUZlQwTmVWNnFHZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvYWl4LXBwYzY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYWl4LXBwYzY0Ly0vYWl4LXBwYzY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhobXdkNkNJblozZHdwdUdURjhmSkc2eW9XbXNUb0UrdllnRDRueXRaVnhjdTF1bEhwVVFSQUIxVUo4K04xQW0zTXo0K3hPQnlvUW9TWmY0RCtDcGtBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgInBwYzY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJhaXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2FuZHJvaWQtYXJtIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYW5kcm9pZC1hcm0vLS9hbmRyb2lkLWFybS0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WSitzS3ZOQS9HRTdDY2FjYzlDaGE3YnBTOG55elZ2MGpkVmd3TkRhUjRnRE1DLzJUVFJjMzNJcDhxck5ZVWNwa09IVVQ1T1owYlVjTk5WWlE5UkxsZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm0iCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImFuZHJvaWQiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2FuZHJvaWQtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9hbmRyb2lkLWFybTY0Ly0vYW5kcm9pZC1hcm02NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02QUFtTEc3endEMVoxNTlqQ0tQdkF4WmQ0eS9WVE8wVmtwcll5KzNOMkZ0SjgrQlFXRlhVK094QVJJd0E0NmM1dGREOVNzS0daLzFvY3FCUy9nQUtIZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvYW5kcm9pZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9hbmRyb2lkLXg2NC8tL2FuZHJvaWQteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVqYmIrMmhoREh4NXBoWVIyQnk4R1RXRXpuNkk5VXFSMTFLd2YyMmlLYk5wWXJzbVJCMThhWC85aXZjNWNhYmNVaUFUL3dNK1lJWjZTRzlRTzZhOGtnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvZGFyd2luLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZGFyd2luLWFybTY0Ly0vZGFyd2luLWFybTY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU4zemwrbHhIQ2lmZ0lsY01VUDUwMTZFU2tlUWpMai85NTlSeHhOWUl0aElnK0NRSEludWpGdVhlV2JXTWduVG80Y3A1WFZIcUZQbXB5dTlKNjVDMVlnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJkYXJ3aW4iCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2Rhcndpbi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9kYXJ3aW4teDY0Ly0vZGFyd2luLXg2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IUTlrYTRLeDIxcUhYd3RsVFVWYktKT0FubUcxaXBYaGRXVG1OWGlQelBmV0twWHFBU1ZjV2RuZjJibkw3M3dnak5yRlhBYTN5WXZCU2Q5cHpmRUlwQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImRhcndpbiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2ZyZWVic2QtYXJtNjQvLS9mcmVlYnNkLWFybTY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdBMEJ4NzU5KzdKdmUwM0sxUzB2a091NUxnLzg1ZG91M0VzZU9HVWVzOGZsVk9HeGJoRERoL2laYW9lazExWThtdHlLUEdGM3ZQOFhobmtERUFtemVnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJmcmVlYnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9mcmVlYnNkLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2ZyZWVic2QteDY0Ly0vZnJlZWJzZC14NjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVEdiTzI2WXcyeHNIenh0YlZGR0VYQkZIMEZSQVA3Z3RjUEU3UDV5UDd3R3k3Y1hLMm9PN1J5T2hMNU5MaXFUbEJoNDdYaG1JVVh1R2NpWEVxWUZmQlE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJmcmVlYnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1hcm0iOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1hcm0vLS9saW51eC1hcm0tMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbFBER3lDMUpQRG91OGtHY3l3WTBZSUx6V2xoaG5SamRvZjNVbGNvcVltUzlFbDgxOExMZkpKYzNQWFhnWkhySENBS3MvWjJTZVp0REpyNU1ya3h0T3c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1hcm02NC8tL2xpbnV4LWFybTY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThid1g3YThGZ2hJZ3J1cGN4YjRhVW1ZRExwOHBYMDZyR2g1SHFEVDdiQis4UmRlbGxzNm1IdnJGSEhXMkpBT1BaVWJualVwS1RMZzZFQ3l6dmFzMkFRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtaWEzMiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWlhMzIvLS9saW51eC1pYTMyLTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTB5OUtyZFZuYk1NMi92RzhLZlUwYnloVU4rRUZDbnk5KzhnMjAyZ1lxU1NWTW9uYnNDZkxqVU8rckNjaTdwTTBXQkV0eitvSy9QSXdIa3p4a3loYXJBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImlhMzIiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1sb29uZzY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtbG9vbmc2NC8tL2xpbnV4LWxvb25nNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaC8vL0xyNWE5cmliL3YxR0dxWFZHempMNFRNdlZUditzMURQb3hRZHo3bC9BWXY2TERTeGRJd3p4a3JQVzQzOG9VWGlEdHdNMTBvOVBtd1MvNlowTmc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAibG9vbmc2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LW1pcHM2NGVsIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtbWlwczY0ZWwvLS9saW51eC1taXBzNjRlbC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1peVJyTTFQenk5R0ZNRExzWG4xaUhVbTE4bmhLbk5NV3Njam1wNCtocGFmY1pqcnIyV2JULy9kMjB4YUdsalhEQllIcVJjbDhIbnhiWDZ1YUEvZUdWdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJtaXBzNjRlbCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXBwYzY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtcHBjNjQvLS9saW51eC1wcGM2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05bWVNL2xSWHhNaTVQU1VxRVhSQ3RWakVaQkd3QjdQL0Q0eVQ4VUcvbXdJZHplMmFWNFZvNlU1Z0QzK1Jzb0hYS2tIQ2ZTeFpLem1Ec3NWbFJqMVFRQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJwcGM2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1yaXNjdjY0Ly0vbGludXgtcmlzY3Y2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1acjdLUjRoZ0tVcFdBd2IxZjNvNXlnVDA0TXpxVnJHRUdYR0xuajE1WVFESkVyWXUvQkdnK3dtRmxJRE9kSnAwUG1CMGxMdnhGSU9YWmdGUnJkalIwdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJyaXNjdjY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtczM5MHgiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1zMzkweC8tL2xpbnV4LXMzOTB4LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1zS25jT2NnVE52ZHRpSVNjL2pacy9aZjhkMGNsL3QzZ1lXWDhKOXViQm5WT3dsazY1VUlFRXZnQk9SVGlsamxvSVduQnpMczRxaHpQa0pjaXRJeklnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgInMzOTB4IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgteDY0Ly0vbGludXgteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVxWk1UTHIvelIvZWQ0aklHbndTTGthSG1Qak9qSnZubTZUVlZpdEFhMDhTTFM5WjBWTTh3SVJ4N2dXYkpCNS9KNTRZdUlNSW5EcXVXeVl2UUxaa2d3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL25ldGJzZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL25ldGJzZC1hcm02NC8tL25ldGJzZC1hcm02NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14WHdjVHE0R2hSTTdKOUE4R3Y1Ym9hbkhoUmEvUTlLTFZtY3lYSENUYU00d0tmSXBXa2RYaU1vZy9Lc254ekowQTErbkQrem9lY3V6cVBtQ1J5QkdqZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibmV0YnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9uZXRic2QteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbmV0YnNkLXg2NC8tL25ldGJzZC14NjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGQ1cFRselB5M1l3R2VjNE91SGgxYUNWQ1J2T1hkSDhEZ1JqZkR5L291bVZvdm11U3pXZm5TSmcrVnRha0I5Q20wZ3hOTzlCeldrajZtdE8xRk1Ya1E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJuZXRic2QiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL29wZW5ic2QtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9vcGVuYnNkLWFybTY0Ly0vb3BlbmJzZC1hcm02NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mRjk2VDZLc0JvL3BrUUk5NTBGQVJVOWFwR05UU2xaR3N2MWpaQkFsY0xMMU1MakxOSVdQQmtqNU5sU3o4YUF6WUtnK2VOcWtuclVKMjRRQnliZVI1QT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAib3BlbmJzZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvb3BlbmJzZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9vcGVuYnNkLXg2NC8tL29wZW5ic2QteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1aeVhVa1pIalF4VXZ6SzdyTjhESjNTUm1yVnJrZThaeVJ1c0hsUCtrdXdxVGNmV0x5cU1PRTNzU2NQUHllSVhOL21ESklmR1h2Y01xQ2dZS2Vrb1F3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAib3BlbmJzZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9vcGVuaGFybW9ueS1hcm02NC8tL29wZW5oYXJtb255LWFybTY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJtMFlXc3FVU1Jyam5jU1hHQTdadjc4TmJudzRYTDYvZHpyMjBjeXJRZjdabVJjc292cGNSQmRoRDQzTnVrM3k3WElvVzJPeE1Wdnd1UnZrOVhkQVNnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJvcGVuaGFybW9ueSIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvc3Vub3MteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvc3Vub3MteDY0Ly0vc3Vub3MteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3R1NDRHl1VEhRVXp0MG5WN2JvY0R5NzJyMmxJMzNRTDNna0ROR2tvZDIyRXNZbDA0c01mMHFMYjhsdU5LVE9tZ0YvZURFRFA1QkZOd29CS0g0NDF3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAic3Vub3MiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL3dpbjMyLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzItYXJtNjQvLS93aW4zMi1hcm02NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yTW1McnVyNjRBNytES2xuU3V3cVVkUkt5ZDNVRTdvUEpabW5sanFFcHRlc0tNOHd4OUo4Z3g1dTArOVBxMGZRUVc4dnFlS2Vid05YZGZPeVArOEJzZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL3dpbjMyLWlhMzIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC93aW4zMi1pYTMyLy0vd2luMzItaWEzMi0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ia3FubW1Cb0NiQ3d4VUtLTlBCaXhpV0RHQ3BRR1ZzclFmSm9WR1lMUFQ0MVhXRjhsSHVFNU42V2hWaWEybjRvNVFLNU00dFlyMjE4MjdmTmhpNGJ5UT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJpYTMyIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvd2luMzIteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzIteDY0Ly0vd2luMzIteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFsSkMwdUNacFRGclNMMENDRGpjZ2xlQlhQbkNyRUFoVEJJTHBlQXA3TS9PRmdvcXRBZXRmQnpYMHhNMDBNVXNWVlBwVmpsUHVNYlJFcW5aQ1hhVG5BPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BleG9kdXMvYnl0ZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjE1LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BleG9kdXMvYnl0ZXMvLS9ieXRlcy0xLjE1LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVZMG5sQStmZUg4MVVHU0h2OTJzTEVQTENlWkZqWE91SGhySW8wSFF5ZFNjdVFjOHMwQTdrTC9VZGd3Z0RxOGc4aWxrc211b0YzNVlWVE5waFYyYUJRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8IF4yMi4xMi4wIHx8ID49MjQuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQG5vYmxlL2hhc2hlcyI6ICJeMS44LjAgfHwgXjIuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgIkBub2JsZS9oYXNoZXMiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMC4zLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy8tL2dlbi1tYXBwaW5nLTAuMy4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmtrdC83bmlKNk1nRVB4RjBiWWRRNmV0WmFBK2ZRdkRjTEtja2h5MXlJUU96YW9LakJCalNqNjMvYUxWallFM3FoUnQ1ZHZNK3VVeWZDZzZVS0NCYkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjIjogIl4xLjUuMCIsCisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3JlbWFwcGluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9yZW1hcHBpbmcvLS9yZW1hcHBpbmctMi4zLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxJOXUvK2xhWUc0RHMxVERLU0pXMllQcklsY1ZZT3dpMmZVQzZ4QjQzbHVlQ2pneFY0bGZmT0NaQ3RZRmlINlROT1grdFFLWHg5N1Q0SUtIYmh5SEVRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuNSIsCisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpLy0vcmVzb2x2ZS11cmktMy4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJSSVNnQ0lqUDIwL3RiV1NQV01FaTU0UVZQUlpFeGt1RDlsSkwrVUl4VUt0d1ZKQTh3VzFUcmIxak1zMVJGWG8xQ0JUTlovNWhwQzlRdm1LV2RvcEt3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMTEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuMy4xMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWk1wMVY4WkZjUEc1ZElXblFMcjNOU0kxTWlDVTdVRVRkUy9BMEc4Vi9YV0h2SnYzWnNGcXV0Sm4xWTVSUG1BUFg2RjNCaUUzOTdPcXZlVS85TkN1SUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgInBlZXIiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuNSIsCisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjUiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMvLS9zb3VyY2VtYXAtY29kZWMtMS41LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNZUTkzMTBncnF4dWVXYmwrV3VJVUlhaVVhRGNqN1dPcTVmVmhFbGpOVmdSZk9VaFk5ZnkyelR2Zm9xV3NuZWJoOFNsNzBWU2NGYklDdkpuTEtCME9nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMzEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvLS90cmFjZS1tYXBwaW5nLTAuMy4zMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItenpOUitTZFFTREp6Yzhqb2FlUDhRUW9DUXI4TnVZeDJkSUl5dGwxUWVCRVpISjl1VzZoZWJzcllnYno4aEp3VVFhbzNUV0NNdG1mVjhOdTF0d09MQXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvcmVzb2x2ZS11cmkiOiAiXjMuMS4wIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICJeMS40LjE0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bub2RlbGliL2ZzLnNjYW5kaXIvLS9mcy5zY2FuZGlyLTIuMS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12cTI0QnEzeW01SEVRbTJOS0NyM3lYRHdqYzd2VHNFVGhSRG5rcDJESzlwMXVxTFIrREh1cm0vTk9UbzBLRzdIWUhVN2VwcEtaajNNeXFZdU1CZjYyZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAbm9kZWxpYi9mcy5zdGF0IjogIjIuMC41IiwKKyAgICAgICAgInJ1bi1wYXJhbGxlbCI6ICJeMS4xLjkiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5vZGVsaWIvZnMuc3RhdC8tL2ZzLnN0YXQtMi4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJraFBQcDJ6cnFEQVFBLzJqTmhuenRjUEFsdjY0WGRoSXA3YTc0NTRBNW92STdCdWt4Z3Q3TVg3dWR3QXUzemcxRGNwUFUwcnozVlYxU2VhcXZZNCtBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5vZGVsaWIvZnMud2Fsay8tL2ZzLndhbGstMS4yLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9HQitVeGxnV2NnUWtnd284R2NFR3dlbW9URnQzRklPOWFiYWJCbWFHd1hJb0JLWitHVHkwcFAxODViZUdnN0xsaWgvTlNIU1YyWEFzMWxuem5vY1NnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBub2RlbGliL2ZzLnNjYW5kaXIiOiAiMi4xLjUiLAorICAgICAgICAiZmFzdHEiOiAiXjEuNi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSA4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbGRvd24vcGx1Z2ludXRpbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMC1iZXRhLjI3IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbGRvd24vcGx1Z2ludXRpbHMvLS9wbHVnaW51dGlscy0xLjAuMC1iZXRhLjI3LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rZDBGNE1LTUNiZVZVSndHOTZ1UTRTZ0F6blpOU3E5M0kzVis5TkhBNE9wdnFHOG1SQ3BHZEttSzhsL2RsMDJoMkNDREh3VzJGcWlsblR5RGNBbnFqQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybS1lYWJpIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybS1lYWJpLy0vcm9sbHVwLWFuZHJvaWQtYXJtLWVhYmktNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kNkZpbkVCTGRJaUsrMXVBQ1V0dEpLZmdaUkVYckYwUWMyU21MSUk3VzJBRDhGZmlaOVdqZCtyRC9pUnVmNXM1ZFdycjFHZ3dYQ3ZQcU91RHF1T293QT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm0iCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImFuZHJvaWQiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtNjQvLS9yb2xsdXAtYW5kcm9pZC1hcm02NC00LjYwLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlqRy9Fd0lEdnZZSTFZdlliSHZEei9CWUh0a1k0eWdVSVhIblRkTGhHK2hLSVFGQmlvc2ZXaUFDV29ydHNLUEtVLytkVXdRUUNLUU0zcXJEZThjOUJBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJhbmRyb2lkIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1kYXJ3aW4tYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWRhcndpbi1hcm02NC8tL3JvbGx1cC1kYXJ3aW4tYXJtNjQtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1takNwRjdHbWtSdFNKd29uK1JxMU44K3BJKzhsN3c1ZzlaM3ZXajRUN2FiZ3VDNEN6d2kzWXUvcEZhTHZBM1RUZU1Wam51M2N0aWd1c3FXVWZqWnp2dz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0Ly0vcm9sbHVwLWRhcndpbi14NjQtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oYVo3aEoxSlQ0ZTlocWtvVDlSLzE5WFcyUUtxamZKVnYraTVBR2c1N1MrbkxrOWxRbkoxRi9lWmxvUk8zbzlTY3k5Q00zd1E5bCtka1h0Y0JnTjVFdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImRhcndpbiIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtZnJlZWJzZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtZnJlZWJzZC1hcm02NC8tL3JvbGx1cC1mcmVlYnNkLWFybTY0LTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY3p3OTB3cFFxM1pzQVZCbGluWmpBWVRLZHVPalR5d2xHN2ZFZVdLVUE3b0NtcEE4eGRUa3haWmx3TkpLV3FJTGxxMHdlaG9aY0pZZkJ2T3loUFRRNnc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImZyZWVic2QiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWZyZWVic2QteDY0IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1mcmVlYnNkLXg2NC8tL3JvbGx1cC1mcmVlYnNkLXg2NC00LjYwLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtWQjJycXN4VEh1QnRmT2V5U0V5ekVPQjdsdGxCL3V4MzhpdTJyQlF6a2pid1JWbGtoQUdJRURpaVluTzJrRk9rSnArWjdwVVhLeXJSUkZ1RlVLdCtnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZnJlZWJzZCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtLWdudWVhYmloZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtLWdudWVhYmloZi8tL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmLTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTCszNFFxaWwrdjV1QzB6RXViVzd1QnlvNzhXT0NJckJ2Y2k2OUU3c0ZBU1JsMFg3Yi9NQjZDcWQxbGt5L0N0Y1NWVHlkV2EyV1p3RnVXZXhqUzVvNmc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtLW11c2xlYWJpaGYiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWFybS1tdXNsZWFiaWhmLy0vcm9sbHVwLWxpbnV4LWFybS1tdXNsZWFiaWhmLTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjgzTzhydDR2MzRoZ0Z6bGtiMXljbmlKaDdJUjVSQ0lxdDZtejFWUkpENnBtaFJpMENYZG1mbkx1OWRJVVM2YnV6aDYwSXZBQ004NDJGZmIzeGQ2R2c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1nbnUvLS9yb2xsdXAtbGludXgtYXJtNjQtZ251LTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnFsN3NUZUF6aFRBamEzUVhlQUk0OCsvK0dqQkorUW1BSDEzc25uMEFKU05MNTBKc0Rxb3R5dWRIeU1iTzJSYkprc2tiTWJGSmZJSktXQTZSMUxDSlE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsLy0vcm9sbHVwLWxpbnV4LWFybTY0LW11c2wtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rcFV5bURoZDB5czlHY0taUFBXbEZpWjY3c1RXVjVVVTZ6T0phdDAyTTErUGl1U0dEeml5UnVJL3BQdWUzaG9Vd20ydUdmeGRMK3RyVDZaOXJ4bmxNQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWxvb25nNjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1sb29uZzY0LWdudS8tL3JvbGx1cC1saW51eC1sb29uZzY0LWdudS00LjYwLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZTdmd2UWVJY3NFdlk0YktESEVEV2NwVzRZdzdCdGxLRzFHVVQ0RnpCVWxFS1FLMHJXSFlCcVF0NkZtMnRhWFMrMWJYdkpUNmtJQ3U1WndxS0NudmxRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImxvb25nNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1sb29uZzY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWxvb25nNjQtbXVzbC8tL3JvbGx1cC1saW51eC1sb29uZzY0LW11c2wtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00THFoVW9tSnF3ZTY0MWdzUHA2eExmaHFXTWJRVjA0S3RQcDcvZElwMG56UHhBa05ZMUFid0w1VzBNUXBjYWxMWWswN3ZhVzlLcDFQQmhkcFpZWWNFdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJsb29uZzY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtcHBjNjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1wcGM2NC1nbnUvLS9yb2xsdXAtbGludXgtcHBjNjQtZ251LTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdExRUTlhUHZrQnhPYy9FVVQ2ajNweWVNRDZIYjhRRjJCVEJuQ1FXUC91dTFsaGM5QUlySWpLbkxZTUVyb0l6L0p2dEdZZ0k5ZEYzQXhIWk5hRUgwcnc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicHBjNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1wcGM2NC1tdXNsIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1wcGM2NC1tdXNsLy0vcm9sbHVwLWxpbnV4LXBwYzY0LW11c2wtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1STXhGaEp3YzlmU1hQNlBxbUF6NGNidjNrQXl2RDFldEpGalR4NE9OcUZQOURrVGtYc0FNVTR2M1Z5YzVCZ3pDK2FuejduUy85dHA0b2JzS2Zxa0RIZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJwcGM2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWxpbnV4LXJpc2N2NjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudS8tL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudS00LjYwLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFLZ0ZsK1ljMWVFazZNbU9CZlJIWUY2bFR4aWlpVjMvei9CUnJiU2lXMkk3QUZUWG9CRnZkTUV5Z2xvaFBqLy8ybVpTNGhET3FlQjBIMUFDaDNzQmJnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgInJpc2N2NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LXJpc2N2NjQtbXVzbC8tL3JvbGx1cC1saW51eC1yaXNjdjY0LW11c2wtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SQWpYalAvOGM2WnR6YXRaY0ExUmFRcjZPMVRSaHpDK2FkbjhZWkRuQ2hsaVpIdmlxSWptdkZ3SGN4aTRKS1BTREF0NlVoZi83dnFjQnpRSnkwUERKZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJyaXNjdjY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtczM5MHgtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1zMzkweC1nbnUvLS9yb2xsdXAtbGludXgtczM5MHgtZ251LTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd2N1b2NwYU9sYUwxQ09CWWlBODlPNnlmamxwM1J3S0RlVElBMGhNN09wbWhSMUJqbzlqMzFHMXVRVnBEbFR2d3hHbjJuUXM2NWZCRkw1VUZkNzZGY1E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiczM5MHgiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC14NjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC14NjQtZ251Ly0vcm9sbHVwLWxpbnV4LXg2NC1nbnUtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03N1Bwc0ZRVUNPaVpSOStMUUVGZzlHQ2x5ZmtOWGoxTVA2d1JuellzMEVlV2JQY0hzMDJBWHU0eHVVYk0xemh3bjN3cWFpemxlM0FFWWc1YWVvb2hoZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC14NjQtbXVzbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2wvLS9yb2xsdXAtbGludXgteDY0LW11c2wtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01Y0lBVGJrNXZ5bkFqcXFteUJqbGNpTUpsMStSL0N3WDlvTGsvRXlpRlhEV2Q5NUtwSGRyT0pULy9yblVsNGNVY3NrcmQwakNDdzN3cFpuaElIZEQ5dz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1vcGVuYnNkLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtb3BlbmJzZC14NjQvLS9yb2xsdXAtb3BlbmJzZC14NjQtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jbDB3MDlXc0NpMTdtY21XcXFnbGV6OUdrOGlzZ2VXdm9VWjNXaUpGWVNSM3pqQlFjMko1L2loU2pwbCtWTGpQcWpRLzFoSlJjcUJmTGpzc1JFUUlMdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIm9wZW5ic2QiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLW9wZW5oYXJtb255LWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1vcGVuaGFybW9ueS1hcm02NC8tL3JvbGx1cC1vcGVuaGFybW9ueS1hcm02NC00LjYwLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRDdjIzWnJPTlJiTnRiWmEzN21MU3VlWFVDdE43TVhjY0NodEtwVW5RTmdGMDEwcmpyamZIeDNReGtTMlBJN0xxR1Q1eFh5WXMxYTdMYnpBd1QwaUNBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJvcGVuaGFybW9ueSIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2YyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2Yy8tL3JvbGx1cC13aW4zMi1hcm02NC1tc3ZjLTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaTFva1dZa0E0RkpJQ3RyN0twWXpGcFJUSGd5NWpkRGJaaVdmdm55MjFpSUtreTVZRXhpRFhQK3piWHptM2RVY0Zwa0VlWU5IZ1E1ZnVHMjM2SlBxMGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIndpbjMyIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC13aW4zMi1pYTMyLW1zdmMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLXdpbjMyLWlhMzItbXN2Yy8tL3JvbGx1cC13aW4zMi1pYTMyLW1zdmMtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11MDltM0N1d0x6U2hBMEVZS01OaUZnY2pqendxdFVNTG11Q0pMZVpXampPWUEzSVQyRGkwOUtheEdCVFA5eFZ6dFd5SVdqVmRzQjJFOWdvTWpadlRRZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJpYTMyIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LWdudSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LWdudS8tL3JvbGx1cC13aW4zMi14NjQtZ251LTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItays2MDBWOVpsMUNNN2VaeEpnTXlUVXptcm1oQi8wWFpuRjRwUnlwS0FsQWd4bWVkVUErMXY5UitYT0Z2NTZXNFNsSEV6ZmVNdHp1akxKRDIyVXo1emc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLXdpbjMyLXg2NC1tc3ZjLy0vcm9sbHVwLXdpbjMyLXg2NC1tc3ZjLTQuNjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbFdNbml4cS9Renh5aFRWNk5qUUo0U0ZvMUo2UHZPWDh2VXg1V2I0YkJQc0ViKzh4Wjg5Qno2a09YcGZYajlhazlBSFRRVlF6bGd6QkVjMVN5TTI3eFE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9jb25maWctcmVzb2x2ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvY29uZmlnLXJlc29sdmVyLy0vY29uZmlnLXJlc29sdmVyLTQuNC4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTjU1ZjhtUEVjY3B6S2V0VWFnZHZtQXk4b29oZjBKNWN1ajlqTEkxVGFTY2VSbHEwcEpzSVplcFkza21BWEFoeXhxWFBWNmhEZXJEUWhxUVBLV2dBb1E9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlciI6ICJeNC4zLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtY29uZmlnLXByb3ZpZGVyIjogIl40LjIuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtZW5kcG9pbnRzIjogIl4zLjMuNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtbWlkZGxld2FyZSI6ICJeNC4yLjEzIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvY29yZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMjMuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvY29yZS8tL2NvcmUtMy4yMy4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkowSWhwWnhaQWtGWU9lZ01LU3J4dzd1amhoVDJwYXNzLzFVRWNaNGtmbDVzclRBcXRQVTVJN01kWVFvcmVWYXMzMjA0eWtDaU5oWTFvN1hsejZZeWc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXJsLXBhcnNlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1iYXNlNjQiOiAiXjQuMy4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1ib2R5LWxlbmd0aC1icm93c2VyIjogIl40LjIuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtbWlkZGxld2FyZSI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1zdHJlYW0iOiAiXjQuNS4yMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXRmOCI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dWlkIjogIl4xLjEuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMvLS9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMtNC4yLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13Ym9DUGlqemY2UkpLTE92bmpEQWlCeEdTbVNuR1hqMzVvNVpBV0tEYUhhL2N2UTVVM1pKMTNENHRNQ0U4Skc0ZHhWQVpGeS9QMHgvVjlDd3dkZlVMUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJAc21pdGh5L3VybC1wYXJzZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2ZldGNoLWh0dHAtaGFuZGxlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMy4xNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9mZXRjaC1odHRwLWhhbmRsZXIvLS9mZXRjaC1odHRwLWhhbmRsZXItNS4zLjE2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uWURSVUl2TmQ0bUZtdVhyYVJXdDZ3NVVzWlROcXRqNGhYSkEvaWlPRDR0dXNlSWRMUDlMcTM4dGVIL1NaVGNJRkNhMmYrMjdvN2hZcElzV2t0SktFUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3F1ZXJ5c3RyaW5nLWJ1aWxkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJhc2U2NCI6ICJeNC4zLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9oYXNoLW5vZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvaGFzaC1ub2RlLy0vaGFzaC1ub2RlLTQuMi4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNC9veTloMGpqbVk4MGEyZ09Jbzc1aUxsOFRPUGhtdHg0RTJIeitQZk1qdngvdkx0R1k0VE1VLzM1V1J5SDJKSFBmVDVDVkIzOHU0SlJvdzdnbm16SkE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvaW52YWxpZC1kZXBlbmRlbmN5IjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L2ludmFsaWQtZGVwZW5kZW5jeS8tL2ludmFsaWQtZGVwZW5kZW5jeS00LjIuMTMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWp2QzBSQi84QkxqMlNNSWtZME5wbDQyNUlkbnhaSnhJbnBaSmJ1NTYzeklSblZqcERNWGV2VTNWTUNSU2FiYUxCMGtmL2VGSU91c2RHc3RyTEo4SURnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlci8tL2lzLWFycmF5LWJ1ZmZlci00LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjZyUTROOEpqNFlUUU8zWUZybGdadXdLb2RmNHpVRnM3RUpJV0g4NnBTQ1dCYUF0QUdCRmZDTTdXeDZEMmJCSjJ4cUZOeEdCU3JVV3N3VDNNMFZKb3c9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L21pZGRsZXdhcmUtY29udGVudC1sZW5ndGgvLS9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoLTQuMi4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSVBNTG0vTEU0QVp3dTZxaUU4UnI4dkpzV2hzOUF0T2R5U1JYck9NN3hudmNscDc3VHloN2hNcy9GUnJNZjI2a2dJZTY3dkZKWFhPU21WeFM3b0tlaWc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNC4yOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50Ly0vbWlkZGxld2FyZS1lbmRwb2ludC00LjQuMjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI5US81OFUrcUJpU0FSR1diQWJGTGN6RUNnL1JteXNSa3NYNlE4QmFRRXB0NzVJN0xJNldHRFpuanVDOUdYU0dLbGpFYkE3TjExOExoR2FNYmZyVFh3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvY29yZSI6ICJeMy4yMy4xNCIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGUiOiAiXjQuMi4xNyIsCisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91cmwtcGFyc2VyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xMyIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5Ly0vbWlkZGxld2FyZS1yZXRyeS00LjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItL056SVNuNGdyai9CUkZWdWEveG5Rd0YrN2Zha1laZ2ltcHcyZGZtbFBnY3FlY0JNS3hwQjlnNW1MWVJybUJENU9yUG9PRG9rdzRWaTFoclNSNHpSeXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3NlcnZpY2UtZXJyb3ItY2xhc3NpZmljYXRpb24iOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3NtaXRoeS1jbGllbnQiOiAiXjQuMTIuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtcmV0cnkiOiAiXjQuMy4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXVpZCI6ICJeMS4xLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLXNlcmRlIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjE3IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L21pZGRsZXdhcmUtc2VyZGUvLS9taWRkbGV3YXJlLXNlcmRlLTQuMi4xNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMFQybWNhTTZ2OVcxeGt1ODZEazBiRVc3YUVzZUc2S2VuRmtQSzk4WE53MFpoT3FPaUQxTXJNc2RuUXc5UXNMMy9PYTg1VDUzaVNNbG0wU1pkU3VJRVE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtc3RhY2siOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvbWlkZGxld2FyZS1zdGFjay8tL21pZGRsZXdhcmUtc3RhY2stNC4yLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nNzJqTi9zR0RMeVRhbnJDTEg5ZmhnM295c08zZjd0UWE2ZVdXc015bjJCaVlOQ2dqRjI0bjQvSTl3ZmYvNVhpZEZ2amo5aWxpcEFvUXJ1clRVckx2dz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlci8tL25vZGUtY29uZmlnLXByb3ZpZGVyLTQuMy4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUd4UTA0RHNLWExja2Jnblg0aXBFbHJPVGsrSUhnVHl1MHEwV3NzWmZZaERtOUNRV0htdTZjT2VJNXdtV1J4cFhiQkRoSUlmWE1XejV0UEV0Y1ZxYnc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvc2hhcmVkLWluaS1maWxlLWxvYWRlciI6ICJeNC40LjgiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjUuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlci8tL25vZGUtaHR0cC1oYW5kbGVyLTQuNS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vb0Q3dThNMG9qMlpURnc3R2t1dUhXcEl4dFdkTGxueU5rYnJXY3lWWWhkNVJKTkR1Y3pka2Iwd2ZuUUlDeU5GclZQbHI4WUhPaGFtak55M3ppZGhtQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3F1ZXJ5c3RyaW5nLWJ1aWxkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlci8tL3Byb3BlcnR5LXByb3ZpZGVyLTQuMi4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkd6VUN0aHhSbWV6dXhrYnU5d0QzM3dXZzlLWDNoSnBDWHBROTN2VmtQckhuOVpXNktOTmRZNXhBVVdOdVJDd1ErVnlib0Z1V2lyRzFsWmhoa2N5UlE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvcHJvdG9jb2wtaHR0cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMy4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9wcm90b2NvbC1odHRwLy0vcHJvdG9jb2wtaHR0cC01LjMuMTMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStIc211SlVGNHU4UE9vNnM4L2EyWWIvQVE1dC9ZZ0xvdkN1SEY5b3hib2NxditTWjZnZDhsQzJkdUJGaUNBL3ZGSG9IUWhvcTdRanFKcVpDNnhPeHhnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3F1ZXJ5c3RyaW5nLWJ1aWxkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlci8tL3F1ZXJ5c3RyaW5nLWJ1aWxkZXItNC4yLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10RzRhT1lGQ1pkUE1qYmdmaG5JUTMyMkgvL29qdWpsZHAxU3JIUEhwQlNiM05xZ1VwM2R3aVVHUkp6aWU4N2hTMURZd1dHcUR1UGFvd29ERityWUNiUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXVyaS1lc2NhcGUiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvcXVlcnlzdHJpbmctcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3F1ZXJ5c3RyaW5nLXBhcnNlci8tL3F1ZXJ5c3RyaW5nLXBhcnNlci00LjIuMTMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhxVzNRNFArQ0R6VXlRODdHcmJvR01lRDdYWU5NT0YrQ3VUd3U5MzZVUVJCL3plWW4zanlzOEMzdyt3TWtEZlk3Q3l5eVZ3WlE1Y05Gb0cweDFwWW1BPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3NlcnZpY2UtZXJyb3ItY2xhc3NpZmljYXRpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvbi8tL3NlcnZpY2UtZXJyb3ItY2xhc3NpZmljYXRpb24tNC4yLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hMHM4WFpNZk9DL3FwcXE3UkNQdkpsazkzcldGckVsSDZPKys4V0pLejBGcW5BNFk3ZmtOaS8wbW5HZ1NIMUM0eDZNRnN1QkE4Vkt1NHp4RnJNZTVWdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyLy0vc2hhcmVkLWluaS1maWxlLWxvYWRlci00LjQuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlpDWngyYlphc3hkcXhWZ0VBaFJFdkRTbGthdFRQbmtkV3kxK0tpeTh3N2tZUEJvc1cwVjVJZUR3ekRVTXZXQnQ1NnpwSzY1OHJ4MWNPQkZPWWFQYXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2lnbmF0dXJlLXY0IjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3NpZ25hdHVyZS12NC8tL3NpZ25hdHVyZS12NC01LjMuMTMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlwWVN5TTB2TUR3S2JIRC9KQTdiVk9GNmtUb1ZScGErRk01YXRlRVZScHNUTnU1NjRnMW11QmxrVHViWGhTS0tZWEluaHBBREY0NkZQeXJaY1RMcFhnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvaXMtYXJyYXktYnVmZmVyIjogIl40LjIuMiIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWhleC1lbmNvZGluZyI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXJpLWVzY2FwZSI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc21pdGh5LWNsaWVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMTIuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9zbWl0aHktY2xpZW50Ly0vc21pdGh5LWNsaWVudC00LjEyLjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW92YUxFY1RVNW9sU2VIY1JYY3hWNnZpYUt0cGtIWnVtbjZQczB5bjdkUmYyclJTZnk3OTR2cGpPdHJXRE8wZDFhdURTdkFxeE8rbHloRVJTWFEwM0VRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvY29yZSI6ICJeMy4yMy4xNCIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQiOiAiXjQuNC4yOSIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtc3RhY2siOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXN0cmVhbSI6ICJeNC41LjIyIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjE0LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdHlwZXMvLS90eXBlcy00LjE0LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9XZ250RkxXODhreDJxdmYvYy82N1ZubzF5dVhtL2Y5TTdRRkF0VmtrTzI5SUpYR0JJZzB5Y0VhQlRIMGt2Q3R3bXZaeFJ1anJnUDVhODZSdnNYSkFRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXJsLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91cmwtcGFyc2VyLy0vdXJsLXBhcnNlci00LjIuMTMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJHMDN5b2JvSVJabFp6ZTIrUFQ0R1pFamd3UXNKalVnbjZpVHN2eEEwMmJWY2VIUjZ2cDRDdWs3VFVuUEZXS0YrZmZOVWsza2o0Q093a0VOUzJLM3Z3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvcXVlcnlzdHJpbmctcGFyc2VyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1iYXNlNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjMuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWJhc2U2NC8tL3V0aWwtYmFzZTY0LTQuMy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YUkg2YjBILzVBM1NnYmxtTWE1RXJYUTJYS2hmYlFCK0ZtL295TFoyTzJrQ1Vyd2dnNTViVTBSZWttekFodXdPakE5cWRONVZVMkJwck92R0dVa09PUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3V0aWwtYnVmZmVyLWZyb20iOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtYm9keS1sZW5ndGgtYnJvd3NlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYm9keS1sZW5ndGgtYnJvd3Nlci8tL3V0aWwtYm9keS1sZW5ndGgtYnJvd3Nlci00LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSktDckxOT3VwM09PZ216ZWFLUXdpNFpDVFdsWVI1SDRHbTFyMnVUTVZCWG9lbW8xVUVnaGs1dnRNaTF4U3UyeW1nS1ZHVzYzMWUyZnA5L1I2MTBaalE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGUvLS91dGlsLWJvZHktbGVuZ3RoLW5vZGUtNC4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVprSkd2cUJ6TUhWSEU3ci9oY3VDeGxUWThwUXIxa010ZHNWUHM3ZXg0bU1VK0VBYmNYcHBmbzVObXl4TVlpMlhVNDllcWF6NTZqMmdzazRkSEhQRy9nPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYnVmZmVyLWZyb20vLS91dGlsLWJ1ZmZlci1mcm9tLTQuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GRFhEN2N2VW9GV3dONnZ0UWZFdGE1NDBZL1lCZTVKbmVLM1NvWmc5YlRoU29PQUMvZUdlWUV1YTZSa0JnS2pHYS9zejZZK0R1QlpqMytZRVkyMXk0UT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWNvbmZpZy1wcm92aWRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtY29uZmlnLXByb3ZpZGVyLy0vdXRpbC1jb25maWctcHJvdmlkZXItNC4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRXVTAzVjNYVXBySndhVUlGVnY0aU9uUzFGQzlIbk1IRGZVcmxORFNoNDMxNXYwY1d5YUlFclA4S2lxR1ZiZjV6K0p1cG9WcE5NN1pCM2pGaVRlanZRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLWJyb3dzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjMuNDUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLWJyb3dzZXIvLS91dGlsLWRlZmF1bHRzLW1vZGUtYnJvd3Nlci00LjMuNDUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFnOXNXYzYvbldaQXVLM1dtOUtsRkpVblJrWExyWG4zM1JGaklBbUNURlRocUxIWSs3d0NzdDEwQkdxNTZGeHNsc0RyamhTaWU0NmM4T1VMUytCaUl3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xMyIsCisgICAgICAgICJAc21pdGh5L3NtaXRoeS1jbGllbnQiOiAiXjQuMTIuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi40OSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZS8tL3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlLTQuMi40OS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItamxONnZId0U4Z1k1QWZpRkJhdnREM1F0Q1gyZjdsTTNCS2t6N25GS1NOZkZSNW5YTFhMZzZzcVhUSkVFeUR3dHhienRJREJRQ2Zqc0dWWGxJcnUybFE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9jb25maWctcmVzb2x2ZXIiOiAiXjQuNC4xNCIsCisgICAgICAgICJAc21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcyI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xMyIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTMiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjkiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1lbmRwb2ludHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjMuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWVuZHBvaW50cy8tL3V0aWwtZW5kcG9pbnRzLTMuMy40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CS29SL3ViUHA5S05LRnhQcGcxSjI4TjErYmd1OE5HQXRKYmxCUDd5SHk4eVFQQldoSUF2OStsOTJTbFFMcG9sR203MUNWTytidEI2MGdUZ3pUMHdvZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTMiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWhleC1lbmNvZGluZy8tL3V0aWwtaGV4LWVuY29kaW5nLTQuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RY3ozVzV2dUhLNHNMUWR5VDkzay9yZnJVd2RKOC9IWituTVVPeUdkcGVHQTFXeHQ2NXpZd2kzb0VsOWtPTStSc3d2WXE5MGZ6a05EYWhQUzhLME9JZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtbWlkZGxld2FyZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUvLS91dGlsLW1pZGRsZXdhcmUtNC4yLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HVG9veXJsbVJUcXZVZW40ZUs3L0sxcDZrcnlGN2JuRGZxNlhzQWJJc2YybW81MUIvdXRhSCtYVGhZNmRLZ05DV3pNQWFILytPTG1xYUJ1TGhMV1Jvdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXJldHJ5IjogeworICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1yZXRyeS8tL3V0aWwtcmV0cnktNC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRTT1BRTlQvNEtmYnZxZU1vdldDM2cyM0tTWXk4Y3pIZDN0bE4rdE9ZVk5JRExTZnhJc3JQSmloWWk1VHBOY29WNzg5S1d0Z0NoVVZlZGgyeTZkRFBnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvbiI6ICJeNC4yLjEzIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiNC41LjIyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtc3RyZWFtLy0vdXRpbC1zdHJlYW0tNC41LjIyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zSDhpcS8wQmZRalVzMi80ZmJIWjlhRzl5TnpjdVpzMjRMUGtjWDFRN1orcXBxYUdNOCtxYkdtRTh6bzltMm5DUmdhbXl2Uzk4Y0hkY1d2UjZZVXNldz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2ZldGNoLWh0dHAtaGFuZGxlciI6ICJeNS4zLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXIiOiAiXjQuNS4yIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYnVmZmVyLWZyb20iOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmciOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtdXJpLWVzY2FwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtdXJpLWVzY2FwZS8tL3V0aWwtdXJpLWVzY2FwZS00LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmtBU3RCbHZxK2xUWEh5QVpZZkpSYi9EZlMzcnNpbkxpd2IrNjlTc3RDOVZiMHM5dk5Xa1J3cG5qOTE4UGZpODVtemk0MnNPcWRWNzJPTHhXQUlTbnc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXV0ZjgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLXV0ZjgvLS91dGlsLXV0ZjgtNC4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTc1TWVZcGpkV1JlOE01RTNBVzBPNEN4M1VhZHdlUytjd2RYandZR0JXNWgvZ3h4bmJlWjg3N3NMUFgvWkpBOUdWVGxML3FHMGRYUDI5SldGQ0QxQXl3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dWlkIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXVpZC8tL3V1aWQtMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU8vSUVkY0NVS2t1Yno2MHRGYkdBN2NlSVRUQUpzdHkrbEJqTm9vclA0WjZYUnFhRmIvT2pRalpPRG9waEVjdXE2OG5LbTYvMHIrNi9sTFErWFZwazhnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzdGFuZGFyZC1zY2hlbWEvc3BlYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3RhbmRhcmQtc2NoZW1hL3NwZWMvLS9zcGVjLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sMmFGeTVqQUxobmlHNUhncXJENmpYTGkvclVXckt2cU4vcUp4NnlvSnNnS2hibFZkK2lxcVU0UkNYYXZtL2pQaXR5RG81VEN2S01ucGpLbk9yaXkwdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdGVzdGluZy1saWJyYXJ5L2RvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHRlc3RpbmctbGlicmFyeS9kb20vLS9kb20tMTAuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vNFBYSlFpZHFKbDgyY2tGYVhVZW9BVytYeXNQTGF1WUk0M0Fia2k1aEFCZDg1M2lNaGl0b29jNnpuT25jemdiVFltRVA2VTYveTFaeUtBSXN2TUtHZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMC40IiwKKyAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjEyLjUiLAorICAgICAgICAiQHR5cGVzL2FyaWEtcXVlcnkiOiAiXjUuMC4xIiwKKyAgICAgICAgImFyaWEtcXVlcnkiOiAiNS4zLjAiLAorICAgICAgICAiZG9tLWFjY2Vzc2liaWxpdHktYXBpIjogIl4wLjUuOSIsCisgICAgICAgICJsei1zdHJpbmciOiAiXjEuNS4wIiwKKyAgICAgICAgInBpY29jb2xvcnMiOiAiMS4xLjEiLAorICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tIjogeworICAgICAgInZlcnNpb24iOiAiNi45LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vLS9qZXN0LWRvbS02LjkuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItekljT05hK2hWdFZTU2VwOVVUM2paNXJpem8yQnN4Z3lEWVU3V0ZENWVJQ0JFN25vMzg4MUhHZWIvUWtHZnNKczZKVGtZMWFRaFQ3cklQQzdlKzBubkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGFkb2JlL2Nzcy10b29scyI6ICJeNC40LjAiLAorICAgICAgICAiYXJpYS1xdWVyeSI6ICJeNS4wLjAiLAorICAgICAgICAiY3NzLmVzY2FwZSI6ICJeMS41LjEiLAorICAgICAgICAiZG9tLWFjY2Vzc2liaWxpdHktYXBpIjogIl4wLjYuMyIsCisgICAgICAgICJwaWNvY29sb3JzIjogIl4xLjEuMSIsCisgICAgICAgICJyZWRlbnQiOiAiXjMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0IiwKKyAgICAgICAgIm5wbSI6ICI+PTYiLAorICAgICAgICAieWFybiI6ICI+PTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vbm9kZV9tb2R1bGVzL2RvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tYWNjZXNzaWJpbGl0eS1hcGkvLS9kb20tYWNjZXNzaWJpbGl0eS1hcGktMC42LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdaZ29nZVRuanVIYm8rY3QxMEc5RmZwMG1pZjE3aWRpMEl5V05WQS93Y3djbTdOUE9EL1dFSFZQM243bjNNaFhxeG9JWW04ZDZNdVpvaFlXSVo0VDN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxNi4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QvLS9yZWFjdC0xNi4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhVNS9TeXRRTSt5a3FNbkFudkIydW1hSk5JT3NMRjNQVnYvLzFFdzRDVGNwejAvQlJ5eS9hZjQwcXFydDdTaktwRGRUMXNhQk1jNDJDVW9rNWdhdytnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjEyLjUiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdGVzdGluZy1saWJyYXJ5L2RvbSI6ICJeMTAuMC4wIiwKKyAgICAgICAgIkB0eXBlcy9yZWFjdCI6ICJeMTguMC4wIHx8IF4xOS4wLjAiLAorICAgICAgICAiQHR5cGVzL3JlYWN0LWRvbSI6ICJeMTguMC4wIHx8IF4xOS4wLjAiLAorICAgICAgICAicmVhY3QiOiAiXjE4LjAuMCB8fCBeMTkuMC4wIiwKKyAgICAgICAgInJlYWN0LWRvbSI6ICJeMTguMC4wIHx8IF4xOS4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAiQHR5cGVzL3JlYWN0IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB0eXBlcy9yZWFjdC1kb20iOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE0LjYuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50Ly0vdXNlci1ldmVudC0xNC42LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZxN2Z2MHJudCtRVFhnUHhyNUhqYzIxMHA2WUtxMmttZHppTGduc1pHZ0xKOWU2VkFTaHgxcEFDTHVSamQvQVMvc3I3cGhBUjU4T0lJcGYwTGxtUU53PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiLAorICAgICAgICAibnBtIjogIj49NiIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0ZXN0aW5nLWxpYnJhcnkvZG9tIjogIj49Ny4yMS40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYXJpYS1xdWVyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYXJpYS1xdWVyeS8tL2FyaWEtcXVlcnktNS4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJmVDkzdWo1czBQUkw3RXpjY0dNczNicnBsaGNyZ2huRG9WMjZOcUtoQ0FTMWhWbytXZE5zUHZFL3liNmlsZnI1aGkyTUVrNmQ1RVdKVEtkeGc4alZ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgInBlZXIiOiB0cnVlCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fY29yZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19jb3JlLy0vYmFiZWxfX2NvcmUtNy4yMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xb1Fwclp2ejV3UUZKd01EcWVzZVJYV3YzcnFNdmhncGJYRmZWeVdoYng5WDQ3UE9JQTZpLytkWGVmRW1aS29BZ09hVGRhSWdOU01xTUlVNjF5Unl6QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIwLjciLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIwLjciLAorICAgICAgICAiQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IiOiAiKiIsCisgICAgICAgICJAdHlwZXMvYmFiZWxfX3RlbXBsYXRlIjogIioiLAorICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICIqIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX2dlbmVyYXRvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IvLS9iYWJlbF9fZ2VuZXJhdG9yLTcuMjcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdWZGZDJYaTkyT0FWUFlzeStQNG43L1U3ZTY4ZmV4MCtFZThnU0c5S1g3ZW8wODRDV2lRNHNkeGt0dmRsMGJPUHVwWHRWSlBZMTl6azZFd1dxVVE4bGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2JhYmVsX190ZW1wbGF0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuNC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RlbXBsYXRlLy0vYmFiZWxfX3RlbXBsYXRlLTcuNC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oL05VYVN5RzVFeXhCSXA4WVJ4bzRSTWUyL3FRZ3Z5b3dSd1ZNemhZaEJDT05iVzhQVXNnNGxrRk1yaGdaaFVlNXozTDNNaUxEdXZ5Si9DYVBhMkE4QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjEuMCIsCisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlLy0vYmFiZWxfX3RyYXZlcnNlLTcuMjguMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOFB2Y1hmNzBnVERaQmd0OXB0eEo4ZWxCZUJqY0xPQWNPdG9PL21QSmp0amkxK0NkR2JIZ203N29tMUdyc1B4c2lFK3VYSXBOU0s2NFVZYUl3UVhkNFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9jaGFpIjogeworICAgICAgInZlcnNpb24iOiAiNS4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9jaGFpLy0vY2hhaS01LjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXc1NThvZUE5ZkZidjY1L3k0bUh0WERzOWJQbkZNWkFML2p4ZFBGVXBPSEhJWFg5MW1jZ0VIYlM1TGFocitwd1pGUjhBN0dRbGVSV2VJNmNHRkMyVUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL2RlZXAtZXFsIjogIioiLAorICAgICAgICAiYXNzZXJ0aW9uLWVycm9yIjogIl4yLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2RlZXAtZXFsIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9kZWVwLWVxbC8tL2RlZXAtZXFsLTQuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jOWg5ZFZWTWlnTVBjNGJ3VHZDNWR4cXRxSlp3UVBlUHNXalBscFNPbm9qYm9yNnBHcWRrNTQxbGZBN0FxRlFyNXBCMUJSZHEwanVZOWRiODFCd3lGdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvZXN0cmVlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc3RyZWUvLS9lc3RyZWUtMS4wLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRXSHpIYTJXcUVYSS9PMUU5T2pyb2NNVEtKbDJtU3JFb2xoMUlvbXJ2NlUrSnVOd2FIWHNYeDliTHU1Z0c3QlVXRklOMHNrSVFKUS9MMXJJZXg0WDZ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlIjogeworICAgICAgInZlcnNpb24iOiAiMjUuNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvbm9kZS8tL25vZGUtMjUuNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rcUlZUktkTllKd1kzdlJDWk1kSmJQTEpBdEdqUUJ1ZHpaemR6d1FZa0VQUWQrUEpHaXhVTDVRZnZDTERhVUxvTHYrUmhUM0xEa3dFZkthQWtnU21OUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ1bmRpY2ktdHlwZXMiOiAifjcuMTkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3Byb3AtdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxNS43LjE1IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcHJvcC10eXBlcy8tL3Byb3AtdHlwZXMtMTUuNy4xNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRjZiRXlhbVY5aktHQUZCRW1sUW5lc1JQR09RcVMyK1V3aTBFbTE1eGVuT3hIYWYyaHY2TDhZQ1ZuM3JQZFBKT2lKZlBpQ25MSVJ5dndWYXFNWTNNSXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3JlYWN0IjogeworICAgICAgInZlcnNpb24iOiAiMTguMy4yOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3JlYWN0Ly0vcmVhY3QtMTguMy4yOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItejlWWHBDN01XcmhmV2lwaXRqTmRnQ2F1b01MUmRJSUxRc0FFVitaZXNJekJxL29VbHhrMG0zQXBadU1GQ1hkblM0VTdLckkrbDNXUlVFR1E4SzFRS3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL3Byb3AtdHlwZXMiOiAiKiIsCisgICAgICAgICJjc3N0eXBlIjogIl4zLjIuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3JlYWN0LWRvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE4LjMuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3JlYWN0LWRvbS8tL3JlYWN0LWRvbS0xOC4zLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1FZTNVZW9FTllWRlh6b1hFV3N2Y3BnNlp2bHJGTmxPUTdFT3N2aEkzQ2ZBWHd6UGZPOFF3dXhkNDBuZXBzWUtxeXlWUW5UZEVmdjY4cTkxeUxjS3JRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvcmVhY3QiOiAiXjE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3N0eWxpcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc3R5bGlzLy0vc3R5bGlzLTQuMi43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WZ0ROb2twQm9LRit3cmR2aEFBZlM1NU9NUXBMNlFSZ2x3VHdOQzNrSWdCcnpaeEE0V3NGaisyZUxmRUEvdU1VRHpCY0VoWW1qU2J3UWFrbi9pM2FqQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHZpdGVqcy9wbHVnaW4tcmVhY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVqcy9wbHVnaW4tcmVhY3QvLS9wbHVnaW4tcmVhY3QtNC43LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdVdTlod2ZXdnZFREJCbWd0QW93UUNvandabUo1bWNMbjNhdWZlQ3NpdGlqczMrZjJOc3JQdGxBV0lSNk9QaXFsamw5NkdWQ1ViTGUwSHlxSXBWYW9BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjI4LjAiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LXNlbGYiOiAiXjcuMjcuMSIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlIjogIl43LjI3LjEiLAorICAgICAgICAiQHJvbGxkb3duL3BsdWdpbnV0aWxzIjogIjEuMC4wLWJldGEuMjciLAorICAgICAgICAiQHR5cGVzL2JhYmVsX19jb3JlIjogIl43LjIwLjUiLAorICAgICAgICAicmVhY3QtcmVmcmVzaCI6ICJeMC4xNy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTQuMTguMCB8fCA+PTE2LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInZpdGUiOiAiXjQuMi4wIHx8IF41LjAuMCB8fCBeNi4wLjAgfHwgXjcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZWpzL3BsdWdpbi1yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtcmVmcmVzaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtcmVmcmVzaC8tL3JlYWN0LXJlZnJlc2gtMC4xNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16NkY3SzliVjg1RWZzZVJDcDJienJweVEwR2t3MXVMb0NlbDlYQlZXUGcvVGpSajk0U2tKelVUR2ZPYTRiczdpSnZCV3RRRzBXcTd3bkkwc3l3M0VCUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHZpdGVzdC9leHBlY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVzdC9leHBlY3QvLS9leHBlY3QtNC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlQQnByYStWRHVYbUJGSTNGTUtIU0ZYcDNHeDVIZm1TQ0U4WDY3RG4rYndlcGhDblFDYUI3cVdLMmxkSGErOG5jTjhoSlU4VlRNY3hqUHB5TWtVand3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzdGFuZGFyZC1zY2hlbWEvc3BlYyI6ICJeMS4xLjAiLAorICAgICAgICAiQHR5cGVzL2NoYWkiOiAiXjUuMi4yIiwKKyAgICAgICAgIkB2aXRlc3Qvc3B5IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvdXRpbHMiOiAiNC4xLjQiLAorICAgICAgICAiY2hhaSI6ICJeNi4yLjIiLAorICAgICAgICAidGlueXJhaW5ib3ciOiAiXjMuMS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3ZpdGVzdCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHZpdGVzdC9tb2NrZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVzdC9tb2NrZXIvLS9tb2NrZXItNC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI5SFRaQmhXNnlDU0diR1FuRG5IM1FIZkp4b2tLTjRLQitZdms5UTFsZTdlUU5Zd2lDeUt4bUxtdXJTcEZ5NkJ6SmFuU0x1RVVEckQrajk3UStaTFBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB2aXRlc3Qvc3B5IjogIjQuMS40IiwKKyAgICAgICAgImVzdHJlZS13YWxrZXIiOiAiXjMuMC4zIiwKKyAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4zMC4yMSIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS92aXRlc3QiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtc3ciOiAiXjIuNC45IiwKKyAgICAgICAgInZpdGUiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAibXN3IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInZpdGUiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B2aXRlc3QvcHJldHR5LWZvcm1hdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Adml0ZXN0L3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTQuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kZG1ESFUwZ2pFVXlFVkx4dFphN3hhbXJwSWVmZEVFVHUzblpqV3RIZVpYNFF4cUo3dFJ4U3RlSFZYSk9jcjhqaGlMb0dBaGtLNFdKM1dxQnBqeDQyQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0aW55cmFpbmJvdyI6ICJeMy4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdml0ZXN0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZXN0L3J1bm5lciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Adml0ZXN0L3J1bm5lci8tL3J1bm5lci00LjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFRwN1ZaNWFYUDVaSnJuMTVVdEpVV2x4NnFYTG5HdEY2ak54SGVwZFBIcE1mei9hVlB4K2h0SHRnY0FMMm1EWEpnS2hwb28yZTkvaFZKc0llRmJ5dFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHZpdGVzdC91dGlscyI6ICI0LjEuNCIsCisgICAgICAgICJwYXRoZSI6ICJeMi4wLjMiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdml0ZXN0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZXN0L3NuYXBzaG90IjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B2aXRlc3Qvc25hcHNob3QvLS9zbmFwc2hvdC00LjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUNqQ0ZnYVM4YVp6K201blRjRWNnay94aFd2MHJFSDRZbDUzUFBsTVhPWjEvS2EyVmNaVTZDSitNZ1lDWmJjSnZ6R2hRUmpWckdRTlpxa0dQdHRJS3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHZpdGVzdC9wcmV0dHktZm9ybWF0IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvdXRpbHMiOiAiNC4xLjQiLAorICAgICAgICAibWFnaWMtc3RyaW5nIjogIl4wLjMwLjIxIiwKKyAgICAgICAgInBhdGhlIjogIl4yLjAuMyIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS92aXRlc3QiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B2aXRlc3Qvc3B5IjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B2aXRlc3Qvc3B5Ly0vc3B5LTQuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YeE5kQXNLVzdDK0ZMeWRxRkpMYjVLaEp0bDNQR0NNbVl3RlJmaHZJZ3hKdkxTWGhoVkkxek04ZjFxRDNaZzdSQ2pUU3pEVnljdDZzZ2hzOVVFZ0JFUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3ZpdGVzdCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHZpdGVzdC91dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Adml0ZXN0L3V0aWxzLy0vdXRpbHMtNC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTEzUU1UK2V5c001dVZHYTFyRzRrZWdHWU5wNmNuUWNzVGM2N0VMRmJoTkxRTyt2Z3N5Z3RZSngya2h2ZHQ0Z1ZRcVNTcEMvS1Q1RlpaeFVwUDNPYXR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB2aXRlc3QvcHJldHR5LWZvcm1hdCI6ICI0LjEuNCIsCisgICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjIuMC4wIiwKKyAgICAgICAgInRpbnlyYWluYm93IjogIl4zLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS92aXRlc3QiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fib3J0LWNvbnRyb2xsZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWJvcnQtY29udHJvbGxlci8tL2Fib3J0LWNvbnRyb2xsZXItMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWg4bFE4dGFjWlluUjN2TlFUZ2liait0T0RISTUvK2wwNkF1MlBjcml2L0dtZXQwZWFqNFR3V0g0MXNPOXduSERpUXNFajE5cTBkcnpkV2RlQUh0d2VnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJldmVudC10YXJnZXQtc2hpbSI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni41IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hY29ybiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4vLS9hY29ybi04LjE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVWSnlFOU10dE9zQlFJREt3MXNrYjluQXdRdVI1d3VHRDMrODJLNkpnSmxtL1krS0k5Mm9Oc01OR1pDWWREc1Z0UkhTYWswcGNWNURubzUrNGpoOXN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJhY29ybiI6ICJiaW4vYWNvcm4iCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC40LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgInBlZXIiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYW50bHI0bmciOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMTYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FudGxyNG5nLy0vYW50bHI0bmctMy4wLjE2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EUXVKa0M3a1gzeHVuZkY0SzJLc1dUU3ZveHhzbHYrRlFwL1dIUVpUSlNzSDJFYzNRZkZtcnhDM05reTJvazl5Z2xYbjZuSE00elVhVkR4Y041ZjZrQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXJncGFyc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMS4wLjEwLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vNVJveTZ0Tkc0U0wvRk9rQ0FONlJ6amlha1pTMjVSTFlGcmNNdHRKcWJkZDhCV3JuQStmR3o1N2lONVBiMDZwdkJHdmw1Z1EwQjQ4ZEpsc2xYdm9UZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzcHJpbnRmLWpzIjogIn4xLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXJpYS1xdWVyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmlhLXF1ZXJ5Ly0vYXJpYS1xdWVyeS01LjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjBQMHNaUEt0eXU4SGtlUkFmQ3EwSWZVUlpLK1N1d01qWTFVWEdCVTI3d3BBaVR3UUFJbHE1NkliSU8reXRrL0pqUzFmTVIxNGVlNVdCQmZLaTVKNkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImRlcXVhbCI6ICJeMi4wLjMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FycmF5LXVuaW9uIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LXVuaW9uLy0vYXJyYXktdW5pb24tMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhHeXhvT1RZVXlDTTZzdFVlNkVKZ25kNEVvZXdBSTd6TWRmcU8ra0dqbmxabUJEei9jUjVwZjhyL2NSNFdxNjBzTC9wMElrY2pVRUVQd1MzR0ZySXl3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXNzZXJ0aW9uLWVycm9yIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fzc2VydGlvbi1lcnJvci8tL2Fzc2VydGlvbi1lcnJvci0yLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSXppOFJRY2ZmcUNlTlZnRmlnS2xpMXNza2xJYnBIbkNZYzZBa25YR1lvQjZnckpxeWVieTdqdjEySlVRZ21UQW5JRG5iY2sxdXhrc1Q0ZHpOM1BXQkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXN5bmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmMvLS9hc3luYy0zLjIuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHRDVURseHl5Q0xNZ2FNM3hYZzBDMExXMnhxZnVRNnAwNXBDRUlzWHV5USthMWtvWUtUdUJNelJOd215YmZMZ3ZKRE1kMHIxTFRuNCtFMFRpNkMyQUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYmFsYW5jZWQtbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM29TZVVPMFRNVjY3aE4xQW1iWHNLNHlhcVU3dGppSGxieFJEWk9wSDBLVzkrQ2VYNGJSQWFYMEFueHQwdHgyTXJwUnBXd1FhUHdJbElTRUpoWVU1UHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYmFzZTY0LWpzIjogeworICAgICAgInZlcnNpb24iOiAiMS41LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jhc2U2NC1qcy8tL2Jhc2U2NC1qcy0xLjUuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUtwYVlsSG44dDRTVmJPSEN5K2I1K0tLZ3ZSNHZyc0Q4dmJ2cmJpUUpwczdmS0RUa2prRHJ5NmppMHJVSmpDMGt6Yk5lUEx3enhxOGl5cG80MXFlV0E9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9iYXNlbGluZS1icm93c2VyLW1hcHBpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEwLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYXNlbGluZS1icm93c2VyLW1hcHBpbmcvLS9iYXNlbGluZS1icm93c2VyLW1hcHBpbmctMi4xMC4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQkwyc1R1SE9keTBZVDFsWWllVXhUdy9RTXRQQkMzcG1sSkM2eGs4QkJZVnY2dmN3M1NHZEtlbVErWHN4OWlrMkYvbFlETzl0cXNGUUgxcjlQRnVIS3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImJhc2VsaW5lLWJyb3dzZXItbWFwcGluZyI6ICJkaXN0L2NsaS5janMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2JpZGktanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmlkaS1qcy8tL2JpZGktanMtMS4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJLc2hRSTFSM1lRK245WUp6MlFRMTQ3UDY2RUxwYTFGUUVnMjBEazhvVzl0MktnTGJwRExMcDlhR1o3eThXSFNzaERrbkcwYmtucUd3NS90eUNzNXR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ib3dzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjE0LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jvd3Nlci8tL2Jvd3Nlci0yLjE0LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXR6UGp6Q3h5Z0FLV0ZPSlAwMTFveEZIczU3SHpJaE9FcmFjSWdBZVBFNHBxQjNMaWtBTEtuU3pVeVU0TUdzOS9pQ0VVdUhsQUpUalRjNU0rdTdZRUdnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMS4xLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05WkxwcldTNkVFTm1oRU9wakNZVzJjOFZrbU92Y2tJSlpma3I3ckJXNmRPYm1mZ0ovTDFHcFNZVzVIcG85bER6NEQxK24wQ2t6OHJVN0Z3SERRaUcvdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYWxhbmNlZC1tYXRjaCI6ICJeMS4wLjAiLAorICAgICAgICAiY29uY2F0LW1hcCI6ICIwLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYnJhY2VzIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlcy8tL2JyYWNlcy0zLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVFiWGdPL09TWlZEMklzaUxscm8rN0hmNlExOEVKcktTRXNkb016S2VQS1hjdDNndkQ4b0xjT1FkSXpHdXByNUZqK0VEZThnTy9seGMxQnpmTXB4dkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmlsbC1yYW5nZSI6ICJeNy4xLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYnJvd3NlcnNsaXN0IjogeworICAgICAgInZlcnNpb24iOiAiNC4yOC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2Vyc2xpc3QvLS9icm93c2Vyc2xpc3QtNC4yOC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00OHhTcmlaWVlnKzhxWG5hOWt3cWpJVnp1UXhpK0tZV3AyKzVuQ1luWUtQVHIwTHZEODlKcWsyT3I1b2d4ejBOVU1mSWpoaDJsSVVYL0x5WDlCNG9JZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9icm93c2Vyc2xpc3QiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vYnJvd3NlcnNsaXN0IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYmFzZWxpbmUtYnJvd3Nlci1tYXBwaW5nIjogIl4yLjEwLjEyIiwKKyAgICAgICAgImNhbml1c2UtbGl0ZSI6ICJeMS4wLjMwMDAxNzgyIiwKKyAgICAgICAgImVsZWN0cm9uLXRvLWNocm9taXVtIjogIl4xLjUuMzI4IiwKKyAgICAgICAgIm5vZGUtcmVsZWFzZXMiOiAiXjIuMC4zNiIsCisgICAgICAgICJ1cGRhdGUtYnJvd3NlcnNsaXN0LWRiIjogIl4xLjIuMyIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiYnJvd3NlcnNsaXN0IjogImNsaS5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjYgfHwgXjcgfHwgXjggfHwgXjkgfHwgXjEwIHx8IF4xMSB8fCBeMTIgfHwgPj0xMy43IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9idWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnVmZmVyLy0vYnVmZmVyLTYuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVGlDcE54dHdpWlpIRVpiY2JUSWNaakVSVklDbjl5cS9wREZrVGw5NS9BeHpEMW5hQmN0TjdZTzY4cmlNL2dMU0RZN3Nkck1ieThob2ZBRFl1dXFPQT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJhc2U2NC1qcyI6ICJeMS4zLjEiLAorICAgICAgICAiaWVlZTc1NCI6ICJeMS4yLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2J1ZmZlci1mcm9tIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1ZmZlci1mcm9tLy0vYnVmZmVyLWZyb20tMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUUrWFFDUndTYmFhaUNodHY2azZEd2djK2J4K0JzNnZ1S0pISGw1a294L0JhS2JoaVh6cVFPd0s0Y08yMnlFbEdwMk9DbWp3VmhUM0hteGd5UEduSmZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9idWlsdGluLW1vZHVsZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnVpbHRpbi1tb2R1bGVzLy0vYnVpbHRpbi1tb2R1bGVzLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13eFhDZGxsd0doSTJrQ0MwTW52VEdZVE12blZaVHZxZ3lwa2lUSThQYTV0Y3oyaTZWcXNxd1lHZ3F3WGppKzRSZ0N6bXM2RWFqRTRJeGlVSDZISDhuUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2FtZWxpemUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxpemUvLS9jYW1lbGl6ZS0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFUrVHgyZnN5cHhUZ3RMb0UzNm5waTNVcWNqU1NNTllma3FnbW9FaHRacnJhUDVWV3EwSzdGa1dWVFlhOGVNUHRuVS9HMnR4VnNmZENKVG45dXpwdVE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2FuaXVzZS1saXRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMwMDAxNzg0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW5pdXNlLWxpdGUvLS9jYW5pdXNlLWxpdGUtMS4wLjMwMDAxNzg0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XVTM0Nm5CVGtsVVY5WWZVbDYwZnFSYlU1WnF5WGxxdm8xU2dpZ0UxT0FYSzViRkw4TEw5cTFLN2FhcDNONzM5bDRCdk5xbmttM1lyR0hpWTlzZlVRdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9icm93c2Vyc2xpc3QiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vY2FuaXVzZS1saXRlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIkNDLUJZLTQuMCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2hhaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFpLy0vY2hhaS02LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTlVQUmx1T2ZPaVRLQkt2V1B0U0Q0UGhGdldDcU9pMEJHU3ROV3M1N1g5anM3WEdUcHJTbUZvejVGMHRXaFI0V1BqTmVSOWpYcWRDNy9VcFNKVG5sUmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY29tbWFuZGVyIjogeworICAgICAgInZlcnNpb24iOiAiMTMuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXItMTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vckZlQ3BOSlFiaFNaakdWd085UkZWM3hQcWJuRVJTOE1tSVF6Q3REL3psNmdwSnVWL2JNTHVOOTJvRzNGN2Q4b0RFSEhScnVqU1hOVXI4ZnBqbnRLdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb21tb25kaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbW9uZGlyLy0vY29tbW9uZGlyLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XOXBBaHcwamExRWRiNUdWZElGMW1qWncvQVNJMEFsU2hYTTgzVVVHZTJEVnI1VGRBUEVBMU9BOG0vZzh6V3A5eDZPbjdncXVmWStGYXREYkMzTURRZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb25jYXQtbWFwIjogeworICAgICAgInZlcnNpb24iOiAiMC4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbmNhdC1tYXAvLS9jb25jYXQtbWFwLTAuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vU3J2NGRzd3lRTkJmb2hHcHo5bzZZYjNHejNTclVEcUJINXJUdWhHUjdhaHRsYllLblZ4dzJiQ0ZNUmxqYUE3RVhIYVhaOHdzSGRvZEZ2YmtoS21xZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb252ZXJ0LXNvdXJjZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jc3MtY29sb3Ita2V5d29yZHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLWNvbG9yLWtleXdvcmRzLy0vY3NzLWNvbG9yLWtleXdvcmRzLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GeXlyREhaS0VqWERwTkpZdlZzVjk2MEZpcVF5WGMvTGxZbXN4bDJCY2RNYjJXUHgwT0dSVmdUZzU1clBTeUxTTk1xUDUyUjlyOGdlU3A3YXBOM09mZz09IiwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jc3MtdG8tcmVhY3QtbmF0aXZlIjogeworICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy10by1yZWFjdC1uYXRpdmUvLS9jc3MtdG8tcmVhY3QtbmF0aXZlLTMuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lOFJLYUxYTU9GaWkrMDJtT2xxd2piRDAwS1NFS3FibG5wTzllKysxYVhTMWZQUU9wUzFZb3FkVkhCcVBqSE5veGVGMm1pbXpWcWF3bTJLQ2JFZHRIUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2FtZWxpemUiOiAiXjEuMC4wIiwKKyAgICAgICAgImNzcy1jb2xvci1rZXl3b3JkcyI6ICJeMS4wLjAiLAorICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jc3MtdHJlZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtdHJlZS8tL2Nzcy10cmVlLTMuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YN3NqUXpjZVVodTF1N1kveWxyUlpGVTJGUzZMUmlGVnA2cktMUGcyM3kzeDNjM0RPS0F3dVhHRHArUEFHamg2Q1NuQ2pZZUF1bDhwY1Q4YkFsK2xTQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtZG4tZGF0YSI6ICIyLjI3LjEiLAorICAgICAgICAic291cmNlLW1hcC1qcyI6ICJeMS4yLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIuMjAuMCB8fCBeMTQuMTMuMCB8fCA+PTE1LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY3NzLmVzY2FwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MuZXNjYXBlLy0vY3NzLmVzY2FwZS0xLjUuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVVpZnNYWHVrbkhsVXNtbGd5WTBQS3pnUE9yNy9GakNlUGZITnQwanhtODN3SFppNDRWRE1RNy9mR05ralkzL2pWMU1DKzFDbVpiYUh6dWd5ZVJ0cGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY3NzdHlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3N0eXBlLy0vY3NzdHlwZS0zLjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItejFIR0tjWXkyeEE4QUdRZndybjBQQXkrUEI3WC9HU2ozVVZKVzlxS3luNDN4V2ErZ2w1blhtVTRxcUxNUnpXVkxGQzhLdXNVWDhULzBrQ2lPWXBBSVE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2RhdGEtdXJscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kYXRhLXVybHMvLS9kYXRhLXVybHMtNy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTIzWEhjQ0YrY29HWWV2aXJaY2VUVkQ3TmRKT3FWbis0OUlIeXhnc3ptK0pJaUhMb0IyVGttUHRzWWtOV1QxcHZSU0drYzM1TDZOSHMweUhrTjJTdW1BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIndoYXR3Zy1taW1ldHlwZSI6ICJeNS4wLjAiLAorICAgICAgICAid2hhdHdnLXVybCI6ICJeMTYuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTIuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZGVidWciOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy00LjQuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkd3d1dud1F2a1ZmYXZLVnQyMkZHTHcreFlTZHpBUndtMHJ1NkRoVFZBM3VtVTVoWmMyOFYza080c3RnWXJ5clRsTHB1dmdJOUdpaWpsdEFqTmJjcUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibXMiOiAiXjIuMS4zIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZGVjaW1hbC5qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVjaW1hbC5qcy8tL2RlY2ltYWwuanMtMTAuNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZcGdRaUlUVzNKWEdudHpkVW15VVIxVjgxMkhuOFQxWVZYaEN1K3dPM09wUzRlVTlsNFlkRDNxanlpS2RWNm12VjI5emFwa01lRDM5MFVWRWYybGtVZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kZXF1YWwiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVxdWFsLy0vZGVxdWFsLTIuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wamUrcVBLSEVNb2h2ZlJUQ0VvM0NyUEc2Y0F6QVlnbXpLeXhSaVlTU0RrUzZlR0pkeVZKbTdXYVlBNUVDYUFEOXdMQjJUNEVFZXltQTVhRlZjWVhDQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2RpZmYiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi8tL2RpZmYtNC4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVgwN250dEpRa3drZktmdlRQRy9LU25FMk9NZGNVQ2FvNitlWEYzd21uSVFSbjJhUEFISDNWeERiRE9kZWdrZDZKYlBzWHFTaHB2RU9IZkFUK25DTndRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4zLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Rpci1nbG9iIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Rpci1nbG9iLy0vZGlyLWdsb2ItMy4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdrcldwOUdSNEtYZktHWXpPTG1UdUdWaTFVV0Zmd3MzNzduOWNjNTUvdGI2RHVxeUY2cGNRNUFiaUhFc2hhRHBZOXY2b2FTcjJYQ0RpZEdtTXdkeklBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInBhdGgtdHlwZSI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZG9tLWFjY2Vzc2liaWxpdHktYXBpIjogeworICAgICAgInZlcnNpb24iOiAiMC41LjE2IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tYWNjZXNzaWJpbGl0eS1hcGkvLS9kb20tYWNjZXNzaWJpbGl0eS1hcGktMC41LjE2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YN0JKMnlFbHNuT0ozMHBaRjR1SUlEZkJFVmdGNFhFQnhMOUJ4aHk2ZG5ybTVoa3pxbXNXSEdUaUhxUmlJVE5oTXlGTHlBaVduZElKUDdaMU5UdGVEZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lbGVjdHJvbi10by1jaHJvbWl1bSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4zMzAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsZWN0cm9uLXRvLWNocm9taXVtLy0vZWxlY3Ryb24tdG8tY2hyb21pdW0tMS41LjMzMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItakZOeWRCNWtGdFlVb2JoNElrV1VuWGV5RGJqZi9yOWdjVUVYZTF4Y3JjVXhJR2ZUZHpQWEErbGQ2ekJSYnd2Z0lHVnpEbGwvTFRJaUR6dEV0Y2tTbkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZW1haWwtYWRkcmVzc2VzIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYWlsLWFkZHJlc3Nlcy8tL2VtYWlsLWFkZHJlc3Nlcy01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNE9JUFlsQTZKWHF0Vm44enBIcEdpSTd2RTZFUU9BZzE2YUduRE1JQWxaVmlubm9aODIwOHRXMWhBYmpXeWRnTi80UExUVDlxK08xSzZBSC92QUxKR3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZW50aXRpZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW50aXRpZXMvLS9lbnRpdGllcy04LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItendmekplY1EvVWVqNnR1c01xd0FxVS82S0wyWGFCMlZaMkpnNTRKZTZhaE5CR05INkVrNmczampOQ0YwZkc5RVdRS0daTmRkTmpVNUYxWlFuL3NCbkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4xOS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYjU1L2VudGl0aWVzP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXMtbW9kdWxlLWxleGVyIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLW1vZHVsZS1sZXhlci8tL2VzLW1vZHVsZS1sZXhlci0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNVBPRWNVdVp5Ykg3SWRtR3NEOHdsZjBBSTU1d01lY005clZCVEkvcUVBeTJjMWtUT20zRGpGWWpyQmRJMkszQmFKakpZZllGZVJ0TTB0OXNzblJ1eHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNidWlsZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzYnVpbGQvLS9lc2J1aWxkLTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJiUEJZWXJ0WmJrdDZPczZGaVRMQ1RGeHZxNHR0M0pLYWxsMXZSd3NoQTNmZFZ6dHNMQWF0RmFab2Joa0JDOC9CclBldG9hMG9rc1lvS1hvRzRyeUpnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImVzYnVpbGQiOiAiYmluL2VzYnVpbGQiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVzYnVpbGQvYWl4LXBwYzY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC1hcm0iOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9hbmRyb2lkLWFybTY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC14NjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9kYXJ3aW4tYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9kYXJ3aW4teDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL2ZyZWVic2QteDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtYXJtIjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9saW51eC1pYTMyIjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtbG9vbmc2NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LW1pcHM2NGVsIjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtcHBjNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9saW51eC1yaXNjdjY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtczM5MHgiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9saW51eC14NjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9uZXRic2QtYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9uZXRic2QteDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvb3BlbmJzZC1hcm02NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL29wZW5ic2QteDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9zdW5vcy14NjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC93aW4zMi1hcm02NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL3dpbjMyLWlhMzIiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC93aW4zMi14NjQiOiAiMC4yNS4xMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNjYWxhZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYWxhZGUvLS9lc2NhbGFkZS0zLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1VqMnFseGFRdE80ZzZQcTVjMjlHVGNXR0R5ZDhpdEw4elRsaXBnRUN6M0plc0FpaU9Lb3RkOEpVNm90QjNQQUNnRzZ4a0pVeVZoYm9NUytiamUvakE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc3ByaW1hIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJpbWEvLS9lc3ByaW1hLTQuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lR3VGRnc3VXBkYStnNHArUUh2blcwUnlUWC9TVmVKQkRNL2dDdE1BUk8wY0x1VDJIY0VLblRQdmhqVjZhR2VxckNCL3NiTm9wMEtzem0wanNhV1U0QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJlc3BhcnNlIjogImJpbi9lc3BhcnNlLmpzIiwKKyAgICAgICAgImVzdmFsaWRhdGUiOiAiYmluL2VzdmFsaWRhdGUuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXN0cmVlLXdhbGtlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyZWUtd2Fsa2VyLy0vZXN0cmVlLXdhbGtlci0zLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItN1JVS2ZYZ1NNTWt6dDZadVhtcWFwT3VyTEdQUGZnajZsOXVSWjdsUkdvbHZrMHkyeW9jYzM1TGRjeEtDNVBRWmRuMkRNcWlvQVEyTm9XY3JUS21tNmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL2VzdHJlZSI6ICJeMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2V2ZW50LXRhcmdldC1zaGltIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50LXRhcmdldC1zaGltLy0vZXZlbnQtdGFyZ2V0LXNoaW0tNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWkvMlhiblN6L3V4UkNVNitOZFZKZ0tXRFRNNDI3K01xWWJrUXpEMzIxRHVDUUpVcU91SktJQTBJTTIrVzJ4dFlIZEtPbVo0ZFI2ZkV4c2Q0U1hMK1dRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnRlbWl0dGVyMy8tL2V2ZW50ZW1pdHRlcjMtNS4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1sc1RSeUdhUEJqUGVkazZCdncrYXFic1hEdG9BeUF6bTVNTzdKZ1UreVZSeU1RNU84YkQ0S2NjaTdCUzg1ZjkzdmVlZ2VDUGtMOFI0R0xDbG5qTEZ3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ldmVudHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnRzLy0vZXZlbnRzLTMuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tUXcrMmZrUWJBTHpRN1YwTVkwSXFkblhOT2VUdFA0cjBsTjl6N0FBYXdDWGdxZWE3YkRpaTIwQVlySUJyRmQvSHgwTTJPY3o2UzExMUNhRmtVY2IwUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjgueCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXhwZWN0LXR5cGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwZWN0LXR5cGUvLS9leHBlY3QtdHlwZS0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIta252eWVhdVlocWpPWXZRNjZNem5TTXM4M3dtSHJDeWNORU42QW8rMkFlWUVmeFVJa3VpVnhkRWExcWxHRVBLK1dlM24wVEhpRGNpWVNzQ2NnVy9Eb0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mYXN0LWdsb2IiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1nbG9iLy0vZmFzdC1nbG9iLTMuMy4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03TXB0TDhVMGNxY0Zkekl6d09USG9pbFg5eDVCck5xeWU3Wi9MdUM3a0NNUmlvMUVNU3lxUkszQkVBVUQ3c1hScTRpVDRBelRWdVpkaGdRMlRDdllMZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAbm9kZWxpYi9mcy5zdGF0IjogIl4yLjAuMiIsCisgICAgICAgICJAbm9kZWxpYi9mcy53YWxrIjogIl4xLjIuMyIsCisgICAgICAgICJnbG9iLXBhcmVudCI6ICJeNS4xLjIiLAorICAgICAgICAibWVyZ2UyIjogIl4xLjMuMCIsCisgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuOCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04LjYuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmFzdC14bWwtYnVpbGRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LXhtbC1idWlsZGVyLy0vZmFzdC14bWwtYnVpbGRlci0xLjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZjJqaHBONEVjY3kwL1V6OWNzeGgzTnU2cTRFckt4ZjBYSXNhc29tZk9paHVTVWEzL3h3Nnc4ZG5PdENEZ0VJdFFGSkc4S3lYUHpRWHpjT0REcnJiT2c9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvTmF0dXJhbEludGVsbGlnZW5jZSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInBhdGgtZXhwcmVzc2lvbi1tYXRjaGVyIjogIl4xLjEuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNS41LjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QteG1sLXBhcnNlci8tL2Zhc3QteG1sLXBhcnNlci01LjUuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWjdGaDJuVlFTYjJkK3BvRFZpTTA2M2l4MlpHdDlqbVkxbldoUGZIQk9LMkhnbmIvT1czUDRFdDNQLzgxU0VlajBKN1FiV3RKcXhPMDVoOFFZZks3TFE9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvTmF0dXJhbEludGVsbGlnZW5jZSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZhc3QteG1sLWJ1aWxkZXIiOiAiXjEuMS40IiwKKyAgICAgICAgInBhdGgtZXhwcmVzc2lvbi1tYXRjaGVyIjogIl4xLjIuMCIsCisgICAgICAgICJzdHJudW0iOiAiXjIuMi4wIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJmeHBhcnNlciI6ICJzcmMvY2xpL2NsaS5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmFzdHEiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIwLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3RxLy0vZmFzdHEtMS4yMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HR1RveEovdzF4MzJzL0QyRUtORDdrVGlsNG44T1ZrLzlteWNUYzRWRHphMTNsT3ZwVVpUR1gzbUZTQ3RWOWtzZEdCVnp2c3lBVkxNNm1IRlRoeFh4dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJyZXVzaWZ5IjogIl4xLjAuNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmlsZW5hbWUtcmVzZXJ2ZWQtcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZW5hbWUtcmVzZXJ2ZWQtcmVnZXgvLS9maWxlbmFtZS1yZXNlcnZlZC1yZWdleC0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGMxYm5zU3I0TDRCZGlmOFhiL3FydG9rR2JxNXpsc21zL0NZSDhQUCtXdENrR05GNjVEUGlRWTh2RzNTYWtFZFJuOERsbm0rZ1cvcVdLS2pTNXNaelE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9maWxlbmFtaWZ5IjogeworICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGVuYW1pZnkvLS9maWxlbmFtaWZ5LTQuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oY0ZLeVVHNTd5V0dBenUxQ010L2RQelladXYrakFKVVQ4NWJMOG1yWHZOZTZoV2o2eUVIRWM0RWRjZ2lBNlozb2kxLzl3WEpkWlBYRjJkWk5nd2dPZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmaWxlbmFtZS1yZXNlcnZlZC1yZWdleCI6ICJeMi4wLjAiLAorICAgICAgICAic3RyaXAtb3V0ZXIiOiAiXjEuMC4xIiwKKyAgICAgICAgInRyaW0tcmVwZWF0ZWQiOiAiXjEuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmlsbC1yYW5nZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxsLXJhbmdlLy0vZmlsbC1yYW5nZS03LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXNHcGUzV0hMSzhaWWk0dFdEZzJKeTNlYlJ6MnJYb3dEeG5sZDRia1FCMDBjYy8xWnc5QVduQzBpOXp0REppdGl2dFF2YUk5S2FMeUtyYytoQlcweWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidG8tcmVnZXgtcmFuZ2UiOiAiXjUuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZpbmQtY2FjaGUtZGlyIjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtY2FjaGUtZGlyLy0vZmluZC1jYWNoZS1kaXItMy4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdYWlY1ZW1GRWpycmlkSWdFRDExT29VS0x4aVlqQWNxb3QvTkpkQWtPaGxKK3ZHendoT0FmY0c1T1gxalArUzBQY2pFbjhiZE1KditnMmp3UTNPbmlnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNvbW1vbmRpciI6ICJeMS4wLjEiLAorICAgICAgICAibWFrZS1kaXIiOiAiXjMuMC4yIiwKKyAgICAgICAgInBrZy1kaXIiOiAiXjQuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2F2YWpzL2ZpbmQtY2FjaGUtZGlyP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmluZC11cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC00LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUHBPd0FkUS9ZbFhRMnZqOGEzaDhJaXBEdVlSaTN3Y2VWUVFHWVd4TklOY2NxNDBBbnc3QmxzRVhDTWJ0MVp0K09MQTZGcTlzdUlwSVdEME9zbklTbHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjUuMC4wIiwKKyAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mcy1leHRyYSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjExLjMuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0xMS4zLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNUWGQ2cmsvTTMvVUxOUWo4RkJxQldIWUJWWXliUTNWUEJ3MHhHS0ZlM3R1SDd5dFQ2QUNudnpwSVEzVVp0Qjh5dlVLQzJjWG4xYSt4KzVFVlFMb3ZBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMCIsCisgICAgICAgICJqc29uZmlsZSI6ICJeNi4wLjEiLAorICAgICAgICAidW5pdmVyc2FsaWZ5IjogIl4yLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4xNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZnMucmVhbHBhdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMucmVhbHBhdGgvLS9mcy5yZWFscGF0aC0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT08wcEgybEs2YTBoWm5BZGF1NUl0ekhQSTZwVWx2STdqTVZueFVRUnR3NG93RjJ3azhsT1NhYnRHRENUUDRHZ3JnMk1iR25XTzlYOEsxdDQrZkdNRHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZnNldmVudHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnNldmVudHMvLS9mc2V2ZW50cy0yLjMuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXhvRGZYK2ZMN2ZhQVRuYWdtV1BwYkZ0d2gvUjc3V21NTXFxSEdTNjVDM3Z2QjBZSHJnRitCMVltWjM0NDF0TWo1bjYzazAyMTJYTm9Kd3psaGZmUXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJoYXNJbnN0YWxsU2NyaXB0IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeOC4xNi4wIHx8IF4xMC42LjAgfHwgPj0xMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnVuY3Rpb24tYmluZC8tL2Z1bmN0aW9uLWJpbmQtMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdYSE54SDdxWDl4RzVtSXd4a2h1bVRveC9NSVJOY09nRHJ4V3NNdDJwQXIyM1dIcDZNclJsTjdGQlNGcENwcitvVk8wRjc0NGlVZ1I4Mm5KTWZHMlNBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2Vuc3luYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wLWJldGEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2Vuc3luYy8tL2dlbnN5bmMtMS4wLjAtYmV0YS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zaE43TmFza1l2TURMUVk1NWduVzNOUSttZXNFQWVwVHFsZytWRWJqN3p6cUVNQlZOaHpjR1lZZXFGby9UbFl6NmVRaUZjcDFIY3NDWk8rbkdnUzh6Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9naC1wYWdlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9naC1wYWdlcy8tL2doLXBhZ2VzLTYuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PdDVsVTZqSzBFYitzc3pHOHBjaVhkak1YZEJKNXdPRHZnalIraW1paFRxc1VXRjJLNmRKOUhTVDU1bGdxY3M4d1djdzZvNndBc1V6ZmNZUmhKUFhiQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhc3luYyI6ICJeMy4yLjQiLAorICAgICAgICAiY29tbWFuZGVyIjogIl4xMy4wLjAiLAorICAgICAgICAiZW1haWwtYWRkcmVzc2VzIjogIl41LjAuMCIsCisgICAgICAgICJmaWxlbmFtaWZ5IjogIl40LjMuMCIsCisgICAgICAgICJmaW5kLWNhY2hlLWRpciI6ICJeMy4zLjEiLAorICAgICAgICAiZnMtZXh0cmEiOiAiXjExLjEuMSIsCisgICAgICAgICJnbG9iYnkiOiAiXjExLjEuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiZ2gtcGFnZXMiOiAiYmluL2doLXBhZ2VzLmpzIiwKKyAgICAgICAgImdoLXBhZ2VzLWNsZWFuIjogImJpbi9naC1wYWdlcy1jbGVhbi5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbkZSMHpMcFUyWUNhUnh3b0NKdkw2VXZDSDJKRnlGVkl2d1RMc0lmMjFBdUhsTXNrQTFoaFRkaytMbFlKdE9sWXQ5djZkdnN6RDJCR1JxQkwraVFLOVE9PSIsCisgICAgICAiZGVwcmVjYXRlZCI6ICJPbGQgdmVyc2lvbnMgb2YgZ2xvYiBhcmUgbm90IHN1cHBvcnRlZCwgYW5kIGNvbnRhaW4gd2lkZWx5IHB1YmxpY2l6ZWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBoYXZlIGJlZW4gZml4ZWQgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi4gUGxlYXNlIHVwZGF0ZS4gU3VwcG9ydCBmb3Igb2xkIHZlcnNpb25zIG1heSBiZSBwdXJjaGFzZWQgKGF0IGV4b3JiaXRhbnQgcmF0ZXMpIGJ5IGNvbnRhY3RpbmcgaUBpenMubWUiLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZzLnJlYWxwYXRoIjogIl4xLjAuMCIsCisgICAgICAgICJpbmZsaWdodCI6ICJeMS4wLjQiLAorICAgICAgICAiaW5oZXJpdHMiOiAiMiIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4xIiwKKyAgICAgICAgIm9uY2UiOiAiXjEuMy4wIiwKKyAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiXjEuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIqIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dsb2ItcGFyZW50IjogeworICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2ItcGFyZW50Ly0vZ2xvYi1wYXJlbnQtNS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFPSWdTUUNlcGlKWXdQM0FSbkd4KzVWblR1MkhCWWR6YkdQNDVlTHcxdnIzekIzdlpMZXllZDFzQzlobmJjT2M5L1NyTXlNNVJQUXJrR3o0YVM5Wm93PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSA2IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9nbG9iYnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMS4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JieS8tL2dsb2JieS0xMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWpoSVhhT3p5MXNiOEl5b2NhcnVXU24xVGptbkJWczhBeWhjeTgzcm14Tko4cTJ1V0tDQWozQ25KWStLcEdTWEN1ZUFQYzBpMDVrVnZWS3RQMXQ5UzNnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFycmF5LXVuaW9uIjogIl4yLjEuMCIsCisgICAgICAgICJkaXItZ2xvYiI6ICJeMy4wLjEiLAorICAgICAgICAiZmFzdC1nbG9iIjogIl4zLjIuOSIsCisgICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKKyAgICAgICAgIm1lcmdlMiI6ICJeMS40LjEiLAorICAgICAgICAic2xhc2giOiAiXjMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjExIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZzLTQuMi4xMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmJKNS9qbUZjTk5DY0RWNW85ZVRuQkxKL0hzeldWMFA3M2JjK0ZmNG5TL3JKaitZYVM2SUd5aU9MMFZvQllYK2wxV3JsM2s2M2gvS3JIK25oSjBYdlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ3JlbWxpbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wLWJldGEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ3JlbWxpbi8tL2dyZW1saW4tNC4wLjAtYmV0YS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VWmpKNFZXNjVIL3owZnQrUEN5K1pwYXY1ZTVMMHIvdUhLUzJiY0RIdEhaVEV6OTB1Tzd1a01GVWZ5SHFxWlg4MDNBQTFKRU4xckxPOE11ME1xMHBZZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFudGxyNG5nIjogIjMuMC4xNiIsCisgICAgICAgICJidWZmZXIiOiAiXjYuMC4zIiwKKyAgICAgICAgImV2ZW50ZW1pdHRlcjMiOiAiXjUuMC4xIiwKKyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICJeNC41LjIiLAorICAgICAgICAidXVpZCI6ICJeOS4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjIiCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMiOiAiXjMuOTY3LjAiLAorICAgICAgICAiQHNtaXRoeS9oYXNoLW5vZGUiOiAiXjQuMi4xMiIsCisgICAgICAgICJAc21pdGh5L3NpZ25hdHVyZS12NCI6ICJeNS4zLjEyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9oYXNvd24iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzb3duLy0vaGFzb3duLTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0waEpVOVNDUHZtTXpJQmRaRnFOUFhXYTZkcWg3V2RIMGNJSTl5K0N5UzhyRzNuTDQ4QmNscmE5SG1LaFZWVUh5UFdOSDVZN3hEd0FCN2JmZ1Nqa1VNUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9odG1sLWVuY29kaW5nLXNuaWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lbmNvZGluZy1zbmlmZmVyLy0vaHRtbC1lbmNvZGluZy1zbmlmZmVyLTYuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DVjlUVzNZM2Y4L3dUMEJSRmMxL0tBVlEzVFVIaVhtYUFiNlZXOXZ0aU1GZjdTTG9NZDFQZEFjNFczS0ZPRkVUQkpVYjkwS2F0SHFsc1pNV1YrUjlHZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXhvZHVzL2J5dGVzIjogIl4xLjYuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgXjIyLjEyLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2llZWU3NTQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWVlZTc1NC8tL2llZWU3NTQtMS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRjeXFoRHZYMUM0NmxYWmNWcUNwSytGdE1SUVZkSU1ONi9EZjVqczJ6b3VVc3FHN0k2c0Z4aXRJQys3S1lLMjlLZFhPTEhkdTl6TDRzRm5vVlFucWFBPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaWdub3JlIjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lnbm9yZS8tL2lnbm9yZS01LjMuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHNCVE5VcVFURHdrV3RjZFlJMmkwNlkvblVCRXNORURKS2pXZGlnTHZlZ3k4a0R1SkFTOHVSbHBra2NRcHlFWEwwWi9wakR5NUhCbU1qUkNKMmdxK2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaW5kZW50LXN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmRlbnQtc3RyaW5nLy0vaW5kZW50LXN0cmluZy00LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWRERFp1NEEyT3lJSzdMci8yekcrdzVqbWJ1azFEVkJuRXdSRVF2QnpzcEJKa0NFYlJhOEd4VTFsZ2hZY2FHSkNuUldpYmpEWGxxNzc5WDEveTV4d2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pbmZsaWdodCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmZsaWdodC8tL2luZmxpZ2h0LTEuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rOTJJL2IwOHE0d3ZGc2NYQ0x2cWZzSENyanJGN3lpWHNRdUlWdlZFN044MlczK2FxcHp1VWRCYmZoV2N5L0ZaUjMvNElnZmxNZ0tMT3N2UERyR0NKQT09IiwKKyAgICAgICJkZXByZWNhdGVkIjogIlRoaXMgbW9kdWxlIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCBsZWFrcyBtZW1vcnkuIERvIG5vdCB1c2UgaXQuIENoZWNrIG91dCBscnUtY2FjaGUgaWYgeW91IHdhbnQgYSBnb29kIGFuZCB0ZXN0ZWQgd2F5IHRvIGNvYWxlc2NlIGFzeW5jIHJlcXVlc3RzIGJ5IGEga2V5IHZhbHVlLCB3aGljaCBpcyBtdWNoIG1vcmUgY29tcHJlaGVuc2l2ZSBhbmQgcG93ZXJmdWwuIiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJvbmNlIjogIl4xLjMuMCIsCisgICAgICAgICJ3cmFwcHkiOiAiMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaW5oZXJpdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5oZXJpdHMvLS9pbmhlcml0cy0yLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItay92R2FYNC9ZbGEzV3p5TUN2VFFPWFllSUh2cU9LdG5xQmR1elRIcHpwUVp6QXNrS01oWjJLK0VuQmlTTTl6R1NvSUZlTXBYS3hhNGRZZVpJUXFld1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtY29yZS1tb2R1bGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjE2LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWNvcmUtbW9kdWxlLy0vaXMtY29yZS1tb2R1bGUtMi4xNi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VZm9lTUE2ZklKOHdUWUZFVWplbG5hR0k2N3Y2K043cVhKRXZRdUlHYTk5bDR4c0NydVNZT1ZTUTB1UEFObjRkQXptOGxrWVBhS0xycmlqTHE3eDIzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJoYXNvd24iOiAiXjIuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtZXh0Z2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRnbG9iLy0vaXMtZXh0Z2xvYi0yLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2JLYkFOa042MDNWaTRqRVp2NDlMZVZKTW40eUd3c2J6WndvckVveUVpdXRzTjNuSllkYk8zNnpmaEdKNlFFRHBPWklGa0R0bnE1SlJ4bXZsM2pzb1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lzLWdsb2IiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2xvYi8tL2lzLWdsb2ItNC4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhlbFNheUhIMzZaZ0U3WldobGk3cFczNGhOYk5sOE9qdjVLVm1rSkQ0aEJkRDN0aDhUZms5dllhc0xNK21YV09aaEZrZ1pmeGhMU25yd1JyNGVsU1NnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImlzLWV4dGdsb2IiOiAiXjIuMS4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtbnVtYmVyIjogeworICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW51bWJlci8tL2lzLW51bWJlci03LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDFDaWZrZzZlOFR5bFNwZHRUcGVMVk1xdlNCRVZ6VHR0SHZFUkQ3NDErcG5aOEFOdjAwMDRNUkw0M1FLUERsSzljR3ZOcDZOWldaVUJsYkdYWXh4bmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lLy0vaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDWWVSQTJyVmliS1pkK3MyNjI1Z0duR0YvdDdEU3FEczRkUDdDckxBMW03aktXejZwcHMwTHBZTEpOOFE2NEh0bVBLSjFock4zbnpQTktGRUtPVWlRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ppdGkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIxLjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ppdGkvLS9qaXRpLTEuMjEuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2ltS05HNEViV05yVmpvTkMvMUg1LzlHRnkrdHFqR0JIQ2FTc04rUDJSblBxanNMbXY2VUQzRWorS2o4bkJXYVJBd3lrN2tLNVpVYytPRWF0blRSM0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgInBlZXIiOiB0cnVlLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImppdGkiOiAiYmluL2ppdGkuanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzLXRva2VucyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkSlVmbGNFM2NVektpTXFRZ3NDdTA2RlB1OVVkSUpPMGJlWWJQaEhONGs2YXBnSnRpZmNvQ3RUOWJjeE9wWUJ0cEQya0NNNlNiemc0Q2F1c1cvUEtRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qcy15YW1sIjogeworICAgICAgInZlcnNpb24iOiAiMy4xNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC0zLjE0LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBNU21rcXhyMTA2WGExNTZjMk0yNjVaK0ZUclBsK294ZC9yZ09ReTJ0aWpRZUs1VHhRNDNwc08xWkN3aFZPU2RubitSemt6bFJ6L2VZNEJnSkJZVnBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFyZ3BhcnNlIjogIl4xLjAuNyIsCisgICAgICAgICJlc3ByaW1hIjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAianMteWFtbCI6ICJiaW4vanMteWFtbC5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNkb20iOiB7CisgICAgICAidmVyc2lvbiI6ICIyOS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZG9tLy0vanNkb20tMjkuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05Vm5HRUJvc2MvWnB3eU9zSkJDUS8zSTVwN1E1bmdPWTE0YTliZjVidGVuQU9SbVpmRHNlMVpFaGVNaVdjSjNoODErRnY3SG1KRmRTMHN6by93YUYydz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXNhbXV6YWtqcC9jc3MtY29sb3IiOiAiXjUuMS41IiwKKyAgICAgICAgIkBhc2FtdXpha2pwL2RvbS1zZWxlY3RvciI6ICJeNy4wLjYiLAorICAgICAgICAiQGJyYW11cy9zcGVjaWZpY2l0eSI6ICJeMi40LjIiLAorICAgICAgICAiQGNzc3Rvb2xzL2Nzcy1zeW50YXgtcGF0Y2hlcy1mb3ItY3NzdHJlZSI6ICJeMS4xLjEiLAorICAgICAgICAiQGV4b2R1cy9ieXRlcyI6ICJeMS4xNS4wIiwKKyAgICAgICAgImNzcy10cmVlIjogIl4zLjIuMSIsCisgICAgICAgICJkYXRhLXVybHMiOiAiXjcuMC4wIiwKKyAgICAgICAgImRlY2ltYWwuanMiOiAiXjEwLjYuMCIsCisgICAgICAgICJodG1sLWVuY29kaW5nLXNuaWZmZXIiOiAiXjYuMC4wIiwKKyAgICAgICAgImlzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lIjogIl4xLjAuMSIsCisgICAgICAgICJscnUtY2FjaGUiOiAiXjExLjIuNyIsCisgICAgICAgICJwYXJzZTUiOiAiXjguMC4wIiwKKyAgICAgICAgInNheGVzIjogIl42LjAuMCIsCisgICAgICAgICJzeW1ib2wtdHJlZSI6ICJeMy4yLjQiLAorICAgICAgICAidG91Z2gtY29va2llIjogIl42LjAuMSIsCisgICAgICAgICJ1bmRpY2kiOiAiXjcuMjQuNSIsCisgICAgICAgICJ3M2MteG1sc2VyaWFsaXplciI6ICJeNS4wLjAiLAorICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl44LjAuMSIsCisgICAgICAgICJ3aGF0d2ctbWltZXR5cGUiOiAiXjUuMC4wIiwKKyAgICAgICAgIndoYXR3Zy11cmwiOiAiXjE2LjAuMSIsCisgICAgICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiAiXjUuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNhbnZhcyI6ICJeMy4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAiY2FudmFzIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qc2RvbS9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogeworICAgICAgInZlcnNpb24iOiAiMTEuMy41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtMTEuMy41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OeFZGd0xBbnJkOWk3S1VCeEM0RHJVaG1nanpPcysxUW01MEQzb0YxL29MK3IxTnBaNGdBN3h2RzAveko4ZXZSN3pJS240dkxmN3FUTmR1V0Z0Q3JSdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQmx1ZU9hay0xLjAuMCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiMjAgfHwgPj0yMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNlc2MiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNlc2MvLS9qc2VzYy0zLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItL3NNM2RPMkZPelhqS1FoSnVvMFExNzN3ZjJLT284dDRJOHZIeTZsRjlwb1VwN2JLVDAvTkhFOGZQWDIzUHdmaG55a2ZxbkMyeFJ4T25WdzVYdUdJYUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAianNlc2MiOiAiYmluL2pzZXNjIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzb241IjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb241Ly0vanNvbjUtMi4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhtT1dlN2V5SFlIMTRjTGRWUG95ZytHT0gzcllYKytLcHpyeWxKd1NXOTh0M05rK1U4WE9sOEZXS09nd3R6ZGI4bFhHZjZ6WXdEVXplSE1XZnhhc3lnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImpzb241IjogImxpYi9jbGkuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNvbmZpbGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbmZpbGUvLS9qc29uZmlsZS02LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRkd1UHczMEFkT0lVVFJNQzJPTVJ0UVYramtWajJjZlBxU2VXWHYxTkVBSjFxWjV6YjFYNnoxbUZoYmZPQi9peTNzc0pDRCszS3VaOHI4QzN1VkZsQWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidW5pdmVyc2FsaWZ5IjogIl4yLjAuMCIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4xLjYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvY2F0ZS1wYXRoIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvY2F0ZS1wYXRoLy0vbG9jYXRlLXBhdGgtNS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ3aHc5cEkrV3Z1d05KWHdrNXpWSHB5aElxemcycVRsa2xKT2YwbVZ4R1NiZTNGcDJWaWVaY2R1TllqYUxEb3k2cDl1R3BRRUdXRzg3V3BNS2xOcThnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInAtbG9jYXRlIjogIl40LjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9sb29zZS1lbnZpZnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9vc2UtZW52aWZ5Ly0vbG9vc2UtZW52aWZ5LTEuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1seXV4UEdyL1dmaHJsZW0yQ0wvVWNuVWMxemNxS0FJbUJEenVrWTdZNUYveVFpTmRrbzYrZlJMZXZsdzFIZ015U3c3ZjYxMVVJWTQwOEV0eFJTb0szUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAianMtdG9rZW5zIjogIl4zLjAuMCB8fCBeNC4wLjAiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImxvb3NlLWVudmlmeSI6ICJjbGkuanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtwTkFSUUEzSXd2K2pUQTB1dFVWVmJyaCtKbHJyMUZ2MGU1NkdHekFGT1hON2RrL0Z2aWFEVzhMSG1LNTJEbGNINFdQMm42Z0k4dk4xYWVzQkZnbzl3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInlhbGxpc3QiOiAiXjMuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9sei1zdHJpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHotc3RyaW5nLy0vbHotc3RyaW5nLTEuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oNWJnSldweEpOc3diVTdxQ3JWMHRJS1FDYVMzYmxQRHJxS1d4K1F4enV6TDF6R1V6aWo5WENXTHJTTHNKUHU1dCtlV0EveWNldHpZQU81SU9NY1dBUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJsei1zdHJpbmciOiAiYmluL2Jpbi5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbWFnaWMtc3RyaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMC4zMC4yMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFnaWMtc3RyaW5nLy0vbWFnaWMtc3RyaW5nLTAuMzAuMjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZkMkY0WVV5RVhLR2NMSG9xK1RFeUNqeHVlU2VIbkZ4eXlqTnA4MHlnMFhWNHZVaG5EZXIvbHZ2bHFNL2FyQjViWFFONUsyLzNvaW55Q1J5eDhUMkNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICJeMS41LjUiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21ha2UtZGlyIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ha2UtZGlyLy0vbWFrZS1kaXItMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWczRmVQMjBMTndoQUxiLzZDejZEZDRGMm5nemUwano3dGJ6ckQyd0FWK285RmVOSGU0ckwreUsybWQwSi9maVNmMXNhMUFEaFhxaTUrb1Z3T00vZUd3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNlbXZlciI6ICJeNi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZG4tZGF0YSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMjcuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWRuLWRhdGEvLS9tZG4tZGF0YS0yLjI3LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlZdWJudDNlOEEwT0t3eFlTWHloTHltR1c0c0N1ZmNMRzZWZGlEZFVHVmtQaHBxTHhsdlA1dmwxOTgzZ1FqSmwzdHFick03MzFtamFaYVA2OEFnb3NRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJDQzAtMS4wIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZXJnZTIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UyLy0vbWVyZ2UyLTEuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04cTdWRWdNSlc0Sjh0Y2ZWUHk4ZzA5TmNRd1pkYndGRXFoZS9XWmtvSXpqbi8zVEdEd3RPQ1l0WEd4QTNPOHRQenBjekNDRGd2K1AyUDV5MDBaSk9PZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSA4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9taWNyb21hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pY3JvbWF0Y2gvLS9taWNyb21hdGNoLTQuMC44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QWHdmQmhZdTBoQkNQdzhEbjBFK1dEWWI3YWYzZFNMVldLaTNIR3Y4NElkRjRUeUZvQzB5c3hGZDBHb3h3N25TdjRUL1B6RUpReHNZc0VpRkNLbzJCQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJicmFjZXMiOiAiXjMuMC4zIiwKKyAgICAgICAgInBpY29tYXRjaCI6ICJeMi4zLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OC42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9taW4taW5kZW50IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbi1pbmRlbnQvLS9taW4taW5kZW50LTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JOWp3TW4wN1N5L0l3T2ozelZrVmlrMkpUdmdwYXlrRFpFaWdMNlJ4Nk45TGJNeXd3VVNNdHhFVCs3bFZvRExMZDNPM0lYd0p3dnV1bnM4VUIvSGVBZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21pbmltYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMy4xLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZnaldVc25uVDZuK05VazZlWnE3N3plRmRwVzJMV0R6UDZ6RkdyQ2JIWGlZTnVsNUR6cWsySEhRNXVGSDJETlc1WGJwOCtqVnphZU50OTRzc0VFbDR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICJeMS4xLjciCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21pbmltaXN0IjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltaXN0Ly0vbWluaW1pc3QtMS4yLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJ5eUFSOHFCa04zWXVoZUphblVwV0M1VTNiYjVvc0R5d05COFJ6RFZsRHdESGJvY0FKdmVxcWoxdTgrU1ZEN2prV1Q0eXZzSENwV3FxV3FBeGIwekNBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbWtkaXJwIjogeworICAgICAgInZlcnNpb24iOiAiMC41LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21rZGlycC8tL21rZGlycC0wLjUuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRlArcDhSQjhPV3BGM1laQkNyUDVndEFEbXRYQXBCNUFNTG4rdmR5QStQeXhDanJDczAwbWp5VW96c3NPMzNjd0RlVDN3TkdkTHhKNU0vL1lxdEhBSnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWluaW1pc3QiOiAiXjEuMi42IgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJta2RpcnAiOiAiYmluL2NtZC5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNkZsenViVExaRzNKMmEvTlZDQWxlRWhqenE1b3hnSHlhQ1U5eVlYdmNMc3ZvVmFISnEvczV4WEk2L1hYUDZ0ejdSOXhBT3RIblNPL3RYdEYzV1JUbEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbmFub2lkIjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjExIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYW5vaWQvLS9uYW5vaWQtMy4zLjExLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OOFNwZlBVblVwMWJLK1BNWVc4cVNXZGw5VSt3d05XSTRRS3hPWUR5OUpBcm8zV01YN3AyT2VWUkY5diszNDdwbmFrTmV2UG1pSGhObVoySGJGQTc2dz09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAibmFub2lkIjogImJpbi9uYW5vaWQuY2pzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8IF4xMy43IHx8IF4xNCB8fCA+PTE1LjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbm9kZS1yZWxlYXNlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4zNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1yZWxlYXNlcy8tL25vZGUtcmVsZWFzZXMtMi4wLjM2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UZEM4RlNnSHo4TXd0dzlnNUw0Z1IvU2g5WGhTUC8wREVrUXhmRUZYT3BpdWw1SWlIZ0hhbjJWaFlZYjZhZ0RTZnA0S3V2bHRtR0FwYzhITWdVcklrQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9vYnVnIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29idWcvLS9vYnVnLTIuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11VHFGOU11UHJhQVErSXNuUGYzNjZSRzRjUDlSdFVpN01MTzFOM0tFYyt3YjBhNnlLcGVMMGxtazJJQjFqWTVLSFBBbFRjNlQvSlJkQy9ZcXhITndrUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc3h6eiIsCisgICAgICAgICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9kZWJ1ZyIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL29uY2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25jZS8tL29uY2UtMS40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxOYUpnSSsyUTVVUlFCa2NjRUtIVFFPUGFYZFV4blpaRWxRVFpZME1GVUF1YUVxZTFFK055dmdkei9hSXlOaTZaOU16TzVkdjFIOG41OC9HRUxwMyt3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIndyYXBweSI6ICIxIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLWxpbWl0IjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTIuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vLzg4bUZXU0p4OGx4Q3p3ZEFBQlRKTDJNeVdCMTIrZUlZN01ETDJTcUxtQWtlS1U5cXhSdld1U3lUam0zRlVtcEJFTXVGZmNrQUlxRWFWR1VEeGI2dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLXRyeSI6ICJeMi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLWxvY2F0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxvY2F0ZS8tL3AtbG9jYXRlLTQuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNzlaWi8wd0F4S0d1M29ZTWx6OGp5L2tiaHNOclM3U0taN1B4RUhCZ0o1K0YybXRGVzJmSzJjT3RCaDFjSFlrUXNiekZWN0krRW9SS2U2WXQwb0s3QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLWxpbWl0IjogIl4yLjIuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLXRyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLXRyeS8tL3AtdHJ5LTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNG5QQVZUQVUwQjlEMzUvR2szdUpmLzdYWWJRY3lvaFNLZHZBeElSU05naEZsNGU3MWhWb0duQk5RejljV2FYeE8ySTEwS1RDKzNqTWR2dm9LdzZkUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhcnNlNSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZTUvLS9wYXJzZTUtOC4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXoxZS9ITUc5MG9iU0dlaWRsbGkzaGo3Y2JvY291MC93YTVIYWN2STNBU3gzNFBlY05qTlFlYUhObzVXSVpwV29mTjlrZ2txVjFxNVl2WGUzRjBGb1B3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVudGl0aWVzIjogIl44LjAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vaW5pa3VsaW4vcGFyc2U1P3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGF0aC1leGlzdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1leGlzdHMvLS9wYXRoLWV4aXN0cy00LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWs5UXk1UTdqWWIyV3djZXk1RnB2ZzJLb0FjL1pJaExTTE9TQm1SbXlnUHNHd2tWVnQwZlphMHFydE16K202dEpUQUhmWlE4Rm5tQjRNRzRMV3k3L3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLWV4cHJlc3Npb24tbWF0Y2hlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4cHJlc3Npb24tbWF0Y2hlci8tL3BhdGgtZXhwcmVzc2lvbi1tYXRjaGVyLTEuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zNERRTXhJZGhqM2pMRldkOUx4SE9wbGo0cDl5UTRmZk1Hb3dGZjNjcEVncnJKakVoTjBWNW54dzRZZTFFVmlBR0RvTDQvMUFlTzZxSHBxWVBPekU0UT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9OYXR1cmFsSW50ZWxsaWdlbmNlIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhdGgtaXMtYWJzb2x1dGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1pcy1hYnNvbHV0ZS8tL3BhdGgtaXMtYWJzb2x1dGUtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFWYnczVUoyZTlicTY0dlNhUzlBbTBmamUxUGE4cGJHcVRUc21YZmFJaU1wbnI1RGxEaGZKT3VMajlTZjk1WlBWREFVZXJEZkVrODhNUG1QZTdVQ1FnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLXBhcnNlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtcGFyc2UvLS9wYXRoLXBhcnNlLTEuMC43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MREp6UFZFRUVQUit5NDh6OTNBMEVkMHlYYjhwQUJ5R1dvL2s1WVlkWWdwWTIvMkVzT3Nrc0pycTdsT0h4cnlyVk9uMWVqRzZvQXA4YWh2T0lRRDhzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLXR5cGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC10eXBlLy0vcGF0aC10eXBlLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nREtiOGFaTURlRC90WldzOVA2K3EwSjlNd2tkbDZ4TVY4VGpuR1AzcUpWSjA2YmRNZ2tiQmxMVThJZGZPc0lzRnoyQlcxck5WVDNYdU5FbDh6UEF2dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhdGhlIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGhlLy0vcGF0aGUtMi4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdVakdjQXFQMWdRYWNvUWUrT0JKc0ZBN0xkNER5WHVVSWpaNWNjNzVjTEh2SjdkdE5zVHVncGh4SUFEd3NwUytBcmFBVWVQQ0tyU1Z0UExGai9GODh3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BpY29jb2xvcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGljb2NvbG9ycy8tL3BpY29jb2xvcnMtMS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhjZUgyc25odGI1TTlsaXFEc21FdzU2bGUzNzZtVFprRVgvakViL1J4TkZ5ZWdOdWw3ZU5zbENYUDlGRGovTGN1MFg4S0V5TWNlUDJudHBhSHJERVZBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9waWNvbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGljb21hdGNoLy0vcGljb21hdGNoLTIuMy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WNyt2UUVKMDZaK2M1dFN5ZThTK25IVWZJNTF4b1hJWGpIUTk5Y1F0S1VrUXFxTzFrTy9LQ0pVZlpYdUI0N2gvWUJsRGhhaDJIM2hkVUdYbjhpZTBvQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTguNiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvam9uc2NobGlua2VydCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGtnLWRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wa2ctZGlyLy0vcGtnLWRpci00LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSFJEemJhS2pDK0FPV1ZYeEFVL3g1NENPR2VJdjllYis2Q2tEU1FvTlR0NFh5V29JSnZ1UHNYaXp4dS9GcjIzRWlla2J0WndtaDFJY0lHL2wvYTEwR1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmluZC11cCI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcG9zdGNzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguNS44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLy0vcG9zdGNzcy04LjUuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1cvclg4Ty9qWG5tODJFeTFrNDRwT2JQdGRibGZpdVducmQ4WDdHSjdlbUltQ09zdHVuR2JYVXBwN0hkQnJGUVg2ckp6bjNzUFQzOTdXcDVhQ3dDSGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcG9zdGNzcy8iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vcG9zdGNzcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvYWkiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5hbm9pZCI6ICJeMy4zLjExIiwKKyAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMS4xIiwKKyAgICAgICAgInNvdXJjZS1tYXAtanMiOiAiXjEuMi4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtdmFsdWUtcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtdmFsdWUtcGFyc2VyLy0vcG9zdGNzcy12YWx1ZS1wYXJzZXItNC4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFOTkNzNnV1cmZrVmJlWEc0UzhKRlQ5dDE5bTQ1SUNuaWY4eldMZDVvUFNaNTBRbndNZksrSDNqdjQwOGQ0ancvN0J0dHY1YXhTNUlpSG9MYVZOSGVRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wcmV0dGllciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dGllci8tL3ByZXR0aWVyLTMuOC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VT25HNkxmdHpiZGFIWmNLb1BGdE9jQ0t6dHJRNTdXa0hEZVJEOXQvUFRRdG1UME5IU2VXV2VwajZwUzB6L043KzA4QkhGRFFWVXJmbWZNUmNad2JNZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJwcmV0dGllciI6ICJiaW4vcHJldHRpZXIuY2pzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9wcmV0dGllci9wcmV0dGllcj9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI3LjUuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWIxZ3k1T3JQNSt6RGYyQnZuemRsM2pzVGYxcVhWTWF6YnZDb0todEtxVnM0L1lLNG96WDRnS1FKSlZ5TmUrY2FqTlBuMEtvQzBNQzNGVW1hSFdFbVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAicGVlciI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiLAorICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKKyAgICAgICAgInJlYWN0LWlzIjogIl4xNy4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvbm9kZV9tb2R1bGVzL3JlYWN0LWlzIjogeworICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE3LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzJHc3l1a0w2MklKbmxhZmYvblJlZ1BRUjk0Qy9YWGFtdk1XbVNIUko0eTdUcy80b2NHUm1USHZPczhQU0U2cEIzZFdPckQvbnVldVU1c2R1QnNRNHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAicGVlciI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHJvY2VzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTEuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb2Nlc3MvLS9wcm9jZXNzLTAuMTEuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNkR2VmL2RyV0ZveWREMUpzTXp1RmY4MTAwblpsK0dUK3lhY2MyYkVjZWQ1ZjlSams0eitXdEZVVEJ1OVBoT2k5ai9qZm1CUHUwbU1FWTR3SWRBRjhBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjYuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHVueWNvZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVueWNvZGUvLS9wdW55Y29kZS0yLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdll0N1VEMVU5V2c2MTM4c2hMdExPdmRBdSs4RHNDL2lsRnRFVkhjSCt3eWRjU3BORTIwQWZTT2R1ZjZNa1JGYWhMNUZZN1gxb1U3bktWWkZ0ZnE4Rmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9xdWV1ZS1taWNyb3Rhc2siOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcXVldWUtbWljcm90YXNrLy0vcXVldWUtbWljcm90YXNrLTEuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OdWFOU2E2ZmxLVDVKYVNZUXpKb2swNEp6VEwxQ0E2YUdodjVyZkxXM1BncUErTTJDaHBaUW5BQzhoOGk0WkZrQlM4WDVScWtEQkhBN3I0aGVqM0s5QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVhY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxOC4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0Ly0vcmVhY3QtMTguMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13UytoQWdKU2hSMEtoRXZQSkFyZnVQVk4xK0h6MXQwWTZuNWpMckdRYmtiNHVyZ1BFLzBSdmUrMWtNQjF2L29XZ0hnbTRXSWNWK2k3RjJwVFZqKzJpUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibG9vc2UtZW52aWZ5IjogIl4xLjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWRvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE4LjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE4LjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNW00blFLcCtyWlJiMDlMTkg1OUdNNEJ4VGg5MjUxL3lsYktJYnBlN1RwR3hmSis5a3Y2QkxrTEJYSWpqc3BiZ2JuSUJOcWxJMjN0Um5UV1Qwc25VSXc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxvb3NlLWVudmlmeSI6ICJeMS4xLjAiLAorICAgICAgICAic2NoZWR1bGVyIjogIl4wLjIzLjIiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJyZWFjdCI6ICJeMTguMy4xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTQuNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vSUdHbWNwVEx3UGdhOEJuNi9aNzVTVmFIMXo1ZFV1dDJpYlN5QU1WaG1VZ2dXcG1EbjJkYXBCMG43Zjhud2FTaVJ0ZXBBc2ZKeWZYSU81RENWQU9EZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYWJvcnQtY29udHJvbGxlciI6ICJeMy4wLjAiLAorICAgICAgICAiYnVmZmVyIjogIl42LjAuMyIsCisgICAgICAgICJldmVudHMiOiAiXjMuMy4wIiwKKyAgICAgICAgInByb2Nlc3MiOiAiXjAuMTEuMTAiLAorICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiXjEuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVkZW50IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZGVudC8tL3JlZGVudC0zLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNnREQThnOThXZTB6ZDBHdlZlTVQ5YXJFT25UdzlxTTAzTDljSlhhQ2pyaXAxT083NjRSREJMQmZyQjRjd3pOR0RqNU9BNWlveW1DOUdraXpnV0pEVWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaW5kZW50LXN0cmluZyI6ICJeNC4wLjAiLAorICAgICAgICAic3RyaXAtaW5kZW50IjogIl4zLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXF1aXJlLWZyb20tc3RyaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZnJvbS1zdHJpbmcvLS9yZXF1aXJlLWZyb20tc3RyaW5nLTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YZjBuV2U2UnNlemlGTXUrQXA5YmlpVWJtcGxxNlM5L3ArN3c3WVhQL0pCSGhyVUREVWh3YSt2QU55dWJ1cWZaV1R2ZVUvL0RZVkdzREc3UktML3ZFdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMjIuMTEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUvLS9yZXNvbHZlLTEuMjIuMTEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJmcUF2TG5NbDMxM3I3YzlvY2xCMUhoVUVBZXpjcExqejk1d0ZINExWdWhrOUpGL3IyMnFtVlA5QU1tT1U0dk1YN1E4cE44andOZy9DU3BkRm5NalRRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImlzLWNvcmUtbW9kdWxlIjogIl4yLjE2LjEiLAorICAgICAgICAicGF0aC1wYXJzZSI6ICJeMS4wLjciLAorICAgICAgICAic3VwcG9ydHMtcHJlc2VydmUtc3ltbGlua3MtZmxhZyI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInJlc29sdmUiOiAiYmluL3Jlc29sdmUiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXVzaWZ5IjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JldXNpZnkvLS9yZXVzaWZ5LTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nNlFVZmYwNG9acEhzMGVHNXA4M3JGTGhIZVYwMHVnL1lmOW5aTTZmTGVVclBndUJUa1RRT2RwQVdXc3BNaDU1VFpmVlFEUGFOM05RSmZiVlJBeGRJdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAiaW9qcyI6ICI+PTEuMC4wIiwKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3J1bi1wYXJhbGxlbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ydW4tcGFyYWxsZWwvLS9ydW4tcGFyYWxsZWwtMS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVsNFZ5WlI4NkxaL2xEeFpUUjZqcUw4QUZFMlMwSUZMTVAyNkFianNMVkFEeEhkaEIvYzBHVXNIK3kzOVVmQ2kzZHp6OE9sUXVQbW5hSk9Nb0RIUUJBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJxdWV1ZS1taWNyb3Rhc2siOiAiXjEuMi4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ycDNTbzA3S2NkbW1LYkd2Z2FOeFFTSnI3YkdWU1ZrNVM5RXExRitwcGJSbzcwK1llYUR4a3c1RGQ4TlBOK0dENmJqblltMlZ1UHVDWG1wdVl2bUNYUT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NheGVzIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheGVzLy0vc2F4ZXMtNi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhBZzdTT25FaHJtNXpJM3B1T09LeXkxT01jTWxJSlpZTkpZN3hMQndTemUwVWpoUExuV2ZqMkdGMkVwVDBqbXphSktJV0tITHNhU1NhamYzNWJjWW5BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInhtbGNoYXJzIjogIl4yLjIuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj12MTIuMjIuNyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2NoZWR1bGVyIjogeworICAgICAgInZlcnNpb24iOiAiMC4yMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zY2hlZHVsZXIvLS9zY2hlZHVsZXItMC4yMy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VT1Noc1B3ejdOck1VcWhSNnQwaFdqRmR1dk96YnR2N3RvREgxL2hJcmZSTklEQm5uQldkMEN3SlRHdlRwbmdWbG13R0NkUDkvWmwvdFZyRHFjdVl6UT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibG9vc2UtZW52aWZ5IjogIl4xLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2VtdmVyIjogeworICAgICAgInZlcnNpb24iOiAiNi4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci02LjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlI3VnZEQ1ZITytxMnhCRVdza3hTNkRKRTFxUm5iN0R4elVyb2diNzFDV29TZmljQnhZc2lBR2QrS2wwbW1xL01wckc5eUFyUmt5clF4VE82WGpNekE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiYmluIjogeworICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NoYWxsb3dlcXVhbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGFsbG93ZXF1YWwvLS9zaGFsbG93ZXF1YWwtMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXkwbTFKb1VaU2xQQWpYVnRQUFc3MGFaV2ZJTC9kU1A3QUZrUm5uaUxDcksvOE1ES29nM1R5U1RCbWNrRCtST2JWeEgwdjRUb3g2NytGMTRQZEVEMm9RPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zaWdpbmZvIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ2luZm8vLS9zaWdpbmZvLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15YngwV08xLzhiU0JMRVdYWnZFZDdnTVczU24zSkZsVzNUdlgxblJFYkRMUk5RTmFlTk44V0swbWVCd1BkQWFPSTdUdFJSUkpuL0VzMXpocnJDSHU3Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zbGFzaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbGFzaC8tL3NsYXNoLTMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nOVExaGFlYnkzNk9TU3R3YjRudENHR0dhS3NhVlNqUTY4ZkJ4b1FjdXRsNWZTMXZ1WTE4SDN3U3QzakZ5RnRya3grS3owVjFHODVBNE15QWRETWkyUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAtanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC1qcy8tL3NvdXJjZS1tYXAtanMtMS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVYV01LaExPd1ZLYjcyOElVdFFQWHhmWVUrdXNkeWJ0VXJLLzh1R0U4Q1FNdnJoT3B3dnpEQndqMFFoU0w3TVFjN3ZJc0lTQkc4VlE4K0lEUXhwZlFBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcC1zdXBwb3J0IjogeworICAgICAgInZlcnNpb24iOiAiMC41LjIxIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXN1cHBvcnQvLS9zb3VyY2UtbWFwLXN1cHBvcnQtMC41LjIxLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11QkhVM0wzY3pzSXlZWEtYODhmZHJHb3Z4ZFNDb1RHRFJaNlNZWHRTUnhMWlV6SGc1UC82Nkh0NnVvVWxIdTlFWm9kK2luWGhLbzNxUWd3WFVUL3kxdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnVmZmVyLWZyb20iOiAiXjEuMC4wIiwKKyAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwLXN1cHBvcnQvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3ByaW50Zi1qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcHJpbnRmLWpzLy0vc3ByaW50Zi1qcy0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDljUGdrdkxsVjN0M0l6TDBEMFlMdkdBOUFoazRQY3ZWd1ViTjBkU0dyMWFQME5ydDRBRW5UVWJ1R3ZxdUVDMG1BNjRHcXQxZnppcmxSczVpYlh4OGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RhY2tiYWNrIjogeworICAgICAgInZlcnNpb24iOiAiMC4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YWNrYmFjay8tL3N0YWNrYmFjay0wLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVhNSkU1ZlFvMWpHSDZZLzdlYm53UE9CRWtJRW5UNFFGMzJkNVIxK1ZYZFh2ZU0wSUJNSnQ4emZheFgxUDNRaFZ3clllKzU3Nitqa0FOdFNTMm1CYnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RkLWVudiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGQtZW52Ly0vc3RkLWVudi00LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUnE3eWJjWDJSdUM1NXI5b2FQVkVXNy94dTN0ajh1NEdlQllIQldDeWNoRnR6TUlyODZBN2UzUFBFQlBUMzdzSFN0S1gzK1RpWC9Gci9BQ21KTFZsTFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nX2RlY29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGtSWDhVMVdqSkZkOExzREoyeVEvd1dXeGFvcEVzQUJVMVhma004QStqMCs4NUpBR3BwdDE2Y3IxV2hnNktJYmI0b2tVNk1xbDZCT2ordXVwL3dLZUE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtaW5kZW50IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWluZGVudC8tL3N0cmlwLWluZGVudC0zLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGFKVGEzSmIrVlFwYUM2RHNlSGhGN2RYVnFIVGZKUENSRGFFYmlkL2RyT2hnaXRnWWt1L2xldE1VcU9YRm9XVjB6SUlVYmpwZEgydCt0WWo0YlFNUlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWluLWluZGVudCI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtb3V0ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtb3V0ZXIvLS9zdHJpcC1vdXRlci0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItazU1eXhLSHdhWG5wWUdzT3pnNFZsOCt0RHJXeWx4REVwa25HamhUaVpCOGRGUlU1clRvOUNBemV5Y2l2eFYzcyt6bFRLd3JzNld4TXhSOTVuMjZrd2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtb3V0ZXIvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMS4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC44LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cm51bSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJudW0vLS9zdHJudW0tMi4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9LeDZSVUN1SGZUM295Vmp0bnJtbjE5SDFTaUNxZ0pTZys1NFhxVVJLcDVhQ01iclhyaExqUk45VGp1d01qaVlzdFowTXpEckhxa0daNWRGVEtkK3pnPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL05hdHVyYWxJbnRlbGxpZ2VuY2UiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdHlsZWQtY29tcG9uZW50cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMy4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3R5bGVkLWNvbXBvbmVudHMvLS9zdHlsZWQtY29tcG9uZW50cy02LjMuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhGUjZ4c1ZrVllic2RjVWx6UFlGdkZmb2M2bzJLbFYwVnZnUklRd1NZTXRkVGhNN1NDeG5qWDllZmgvY1djZTJrVHExNkkvS2wzeE05OHhpTHB0c1hBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkIjogIjEuNC4wIiwKKyAgICAgICAgIkBlbW90aW9uL3VuaXRsZXNzIjogIjAuMTAuMCIsCisgICAgICAgICJAdHlwZXMvc3R5bGlzIjogIjQuMi43IiwKKyAgICAgICAgImNzcy10by1yZWFjdC1uYXRpdmUiOiAiMy4yLjAiLAorICAgICAgICAiY3NzdHlwZSI6ICIzLjIuMyIsCisgICAgICAgICJwb3N0Y3NzIjogIjguNC40OSIsCisgICAgICAgICJzaGFsbG93ZXF1YWwiOiAiMS4xLjAiLAorICAgICAgICAic3R5bGlzIjogIjQuMy42IiwKKyAgICAgICAgInRzbGliIjogIjIuOC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxNiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3N0eWxlZC1jb21wb25lbnRzIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAicmVhY3QiOiAiPj0gMTYuOC4wIiwKKyAgICAgICAgInJlYWN0LWRvbSI6ICI+PSAxNi44LjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAicmVhY3QtZG9tIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdHlsZWQtY29tcG9uZW50cy9ub2RlX21vZHVsZXMvcG9zdGNzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguNC40OSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy8tL3Bvc3Rjc3MtOC40LjQ5LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQ1ZQbklPYnM0TjI5a3hUanpMZlVyeU9rdlpFcStwZjhqVEYwbGc4RTd1RVR1V0hBK3Y3ajNjL3hKbWlxcFg0NTAxOTFMbG1aZlVLa1h4a1RyeTduQT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcG9zdGNzcy8iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vcG9zdGNzcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvYWkiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5hbm9pZCI6ICJeMy4zLjciLAorICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiLAorICAgICAgICAic291cmNlLW1hcC1qcyI6ICJeMS4yLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3R5bGlzIjogeworICAgICAgInZlcnNpb24iOiAiNC4zLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0eWxpcy8tL3N0eWxpcy00LjMuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVEzcndGV1Jmd05VWTdINXZwVTB3ZmRrTlNudm5KaW5oRjk4MzBTd2xheGwwM3pzT2pDZm1YMHVnYWMrM0x0SzBsWVNnd0wvS1hjOG9ZTDNtRzRZRlE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtzLWZsYWciOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtcHJlc2VydmUtc3ltbGlua3MtZmxhZy8tL3N1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtzLWZsYWctMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW90MFduWFM5Zmdka2dJY2VQZTZSSE5rMVdBOCttdVBhNmNTamVSM1Y4SzI3cTlCQjFyVEUzUjFwN0h2MHoxWnlBYzhzNlZ2djhESXlXZjY4MU1BdDB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zeW1ib2wtdHJlZS8tL3N5bWJvbC10cmVlLTMuMi40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05UU5rNUt3REYrQnZ6K1B5T2JrbVNZakk1a3NWVVl0alc3QVUyMnIyTktjZkxKY1hwOTZoa0RXVTMrWG5kT3NVYitBUTlRaGZ6ZkNUMk8rQ05XVDVUdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90ZXJzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjQ2LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RlcnNlci8tL3RlcnNlci01LjQ2LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZ6Q2pRTy9yZ1V1SzlzZjhWSlp2anFpcWlIRmFaTG5PaWltbVV1T0tPRHhXTDhtbS94dWE3dmlUN2FxWDdkZ1BZNjBvdFFqVW90ekZNbUNCNFZkbXFRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAanJpZGdld2VsbC9zb3VyY2UtbWFwIjogIl4wLjMuMyIsCisgICAgICAgICJhY29ybiI6ICJeOC4xNS4wIiwKKyAgICAgICAgImNvbW1hbmRlciI6ICJeMi4yMC4wIiwKKyAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9ydCI6ICJ+MC41LjIwIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ0ZXJzZXIiOiAiYmluL3RlcnNlciIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGVyc2VyL25vZGVfbW9kdWxlcy9jb21tYW5kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIwLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0yLjIwLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdwVmttTTh2RjJ2UVVrajJMdlptRDM1SnhlSk9MQ3dKOWNVa3VneWsybnVoYnYzK21KdnBMWVl0KzArVVNNeEUrb2orZXkvbEpFbmhadzc1eC9PTWNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90aW55YmVuY2giOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGlueWJlbmNoLy0vdGlueWJlbmNoLTIuOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wK0RVdnFXTVZhbExtaGE2bHI0a0Q4aUFNSzFIelYwL2FLbkN0V2I5djk2NDFUblAvTUZiN1BjMmJ4b3hRalRYQUVycnlYVmdVT2Z2MllxTmxscUdlZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90aW55ZXhlYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aW55ZXhlYy8tL3RpbnlleGVjLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WS1MvWmFRaGhrS0ZNQU5tQU9oaFhWb0lmQlhibFF4R1gxbXlDUTJmYVFyZm1vYk1mdFhlSlBjWkdwMGdTMDdvY3ZHSldETFpHeU9aRGFkREJxWUlKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90aW55Z2xvYmJ5IjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjE1IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aW55Z2xvYmJ5Ly0vdGlueWdsb2JieS0wLjIuMTUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWoyWnE0TnlRWUc1WE1TVDRjYnMwMkFrOGlKVWR4Uk0wWEk1UXl4WHVaT3pLT0lObVd1cnAzc21YdTN5NXdEY0pycHR3cFNqZ1hIeklReFIwb21YbGpRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZkaXIiOiAiXjYuNS4wIiwKKyAgICAgICAgInBpY29tYXRjaCI6ICJeNC4wLjMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9TdXBlcmNodXB1RGV2IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90aW55Z2xvYmJ5L25vZGVfbW9kdWxlcy9mZGlyIjogeworICAgICAgInZlcnNpb24iOiAiNi41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZkaXIvLS9mZGlyLTYuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10SWJZdFpidWNPczBCUkdxUEprc2hKVVlkTCtTREg3ZFZNOGdqeStFUnAzV0FVakxFRkpFKzAya2FueUh0d2pXT253cktZQml3QW1NMHA0a0xKQW5YZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyLjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInBpY29tYXRjaCI6ICJeMyB8fCBeNCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJwaWNvbWF0Y2giOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RpbnlnbG9iYnkvbm9kZV9tb2R1bGVzL3BpY29tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvbWF0Y2gvLS9waWNvbWF0Y2gtNC4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFQODhCQUt2TWFtLzNOeEg2dmoybzIxUjZNanhaVUFkNm5sd0FTL3BuR3ZOOUlWTG9jTEh4R1lJekZoZzZmVVErNXRoNlA0ZHY0ZVc5algzRFNJajdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RpbnlyYWluYm93IjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnlyYWluYm93Ly0vdGlueXJhaW5ib3ctMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJmK0lMbUJncmV0VXJkSnh6WE0wU2dYTFozWGZpYVV1T2ovSUtRSHVUWGlwKzA1WG4rdXlFWWRWZzBrWURpcFRCY0xyQ1Z5VXpBUHo3UW1BcmIwbW13PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90bGR0cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC4yOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGxkdHMvLS90bGR0cy03LjAuMjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStaZzN2V2hSVXY4QjFtYUdTVEZkZXY5bWpvbzhFdG4yQXlmczRjbmpsRDNDc0dreFhYNFF5VzNqMldKMHdkalljWW15N0x4MlJEc1pNaGdDV2FmS0l3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRsZHRzLWNvcmUiOiAiXjcuMC4yOCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAidGxkdHMiOiAiYmluL2NsaS5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGxkdHMtY29yZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC4yOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGxkdHMtY29yZS8tL3RsZHRzLWNvcmUtNy4wLjI4LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03VzVFZmpoc2MzY2hWZEZocXRhVTBLdEszMkozN1pjcjlSS3RJRDU0bkcrdElwY1k3OUNRSy92ZVlQT0R4dEQvTEo0THVlNjZqdnJReklYMloyL3BVUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90by1yZWdleC1yYW5nZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90by1yZWdleC1yYW5nZS8tL3RvLXJlZ2V4LXJhbmdlLTUuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02NVA3aXo2WDV5RXIxY3djZ3ZReGJiSXc3VWszZ095NWRJZHRaNHJEdmVMcWhyZEpQK0xpL0h4NnR5SzBORWIrMkdDeW5lQ01KaUdxckFEQ1NOazhzUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpcy1udW1iZXIiOiAiXjcuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdG91Z2gtY29va2llIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvdWdoLWNvb2tpZS8tL3RvdWdoLWNvb2tpZS02LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGt0WlFiM0llb1VXQjlscVI1RVdUSGdXL1ZUSVRDWGc0RDIxTStsdnliUlZkeWxMclJNbnFhSU9OTFZiNW1hdjh2TTE5bTQ0SEljR3E0cUFTZXUyUXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidGxkdHMiOiAiXjcuMC41IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90cjQ2IjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RyNDYvLS90cjQ2LTYuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iTFZNTFB0c3RsWjRpTVFIcEZIVFI3R0FHajJqeGk4RGcwczJoMk1hZkFFNHVTV0Y5OEZDLzNNb21VNTFpUUFNZjgvcURVYktXZjVHeHV2dlZjWEVodz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwdW55Y29kZSI6ICJeMi4zLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RyaW0tcmVwZWF0ZWQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHJpbS1yZXBlYXRlZC8tL3RyaW0tcmVwZWF0ZWQtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBrb252bEtrOC9adVIwRDV0TFc4bGp0NUk4a214cDJYS3ltaGVwVWVPZENFZktwWmFrdFNBcmtMSFp0NzZPQjFadk85YnNzVXNEdHk0U1doTHZacExnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4xLjAuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RyaW0tcmVwZWF0ZWQvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMS4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC44LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGliIjogeworICAgICAgInZlcnNpb24iOiAiMi44LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGliLy0vdHNsaWItMi44LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9KRnU5NEhRYitLVmR1U1VRTDd3bnBtcW5mbUxzT0EvbkFoNmI2RUgwd0NFb0swL21QZVhVNmMzd0tEVjgzTWtPdUhQUkh0U1hLS1U5OUlCYXpTLzJ3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiMEJTRCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHNsaW50IjogeworICAgICAgInZlcnNpb24iOiAiNi4xLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGludC8tL3RzbGludC02LjEuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSWJSNG5rVDk2RVFPdktFMlBXL2RqR3o4aUdOZUo0ckYybUJmaVlhUi9udlVXWUtKaEx3aW1vSktnaklGRUlEaWJCdE9ldmo3QnFDUkw0b0hlV1dVQ2c9PSIsCisgICAgICAiZGVwcmVjYXRlZCI6ICJUU0xpbnQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBFU0xpbnQuIFBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL3RzbGludC9pc3N1ZXMvNDUzNCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4wLjAiLAorICAgICAgICAiYnVpbHRpbi1tb2R1bGVzIjogIl4xLjEuMSIsCisgICAgICAgICJjaGFsayI6ICJeMi4zLjAiLAorICAgICAgICAiY29tbWFuZGVyIjogIl4yLjEyLjEiLAorICAgICAgICAiZGlmZiI6ICJeNC4wLjEiLAorICAgICAgICAiZ2xvYiI6ICJeNy4xLjEiLAorICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjQiLAorICAgICAgICAibWtkaXJwIjogIl4wLjUuMyIsCisgICAgICAgICJyZXNvbHZlIjogIl4xLjMuMiIsCisgICAgICAgICJzZW12ZXIiOiAiXjUuMy4wIiwKKyAgICAgICAgInRzbGliIjogIl4xLjEzLjAiLAorICAgICAgICAidHN1dGlscyI6ICJeMi4yOS4wIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ0c2xpbnQiOiAiYmluL3RzbGludCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInR5cGVzY3JpcHQiOiAiPj0yLjMuMC1kZXYgfHwgPj0yLjQuMC1kZXYgfHwgPj0yLjUuMC1kZXYgfHwgPj0yLjYuMC1kZXYgfHwgPj0yLjcuMC1kZXYgfHwgPj0yLjguMC1kZXYgfHwgPj0yLjkuMC1kZXYgfHwgPj0zLjAuMC1kZXYgfHwgPj0gMy4xLjAtZGV2IHx8ID49IDMuMi4wLWRldiB8fCA+PSA0LjAuMC1kZXYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC1jb25maWctcHJldHRpZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjE4LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGludC1jb25maWctcHJldHRpZXIvLS90c2xpbnQtY29uZmlnLXByZXR0aWVyLTEuMTguMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFB3OVBnTlBMRzNpS1J4bUs3RFdyK0VhL1N6cnZmSHRqRnQ1TEJsNjFnazJVQkcvREI5a0NYUmp2K3h5SVUxclV0bmF5TGVNVVZKQmNNWDhaMTduRGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAidHNsaW50LWNvbmZpZy1wcmV0dGllci1jaGVjayI6ICJiaW4vY2hlY2suanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlQwWkk2a1pSZFRoOFl5SnczU01iWW0vdStOcWZzQXhFcFdPMFBmOXNxOC9lOTRXeHhPcFBLeDlGUjFGbHlDdE9WRE5PUSs4bnRscUZ4aVJjK3I1cUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMS45LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9jaGFsayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTIuNC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAorICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IiwKKyAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjkuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFmQVV0ZCt2RmRBdEZRY0M4Q0N5WXQxZllXeFNxQWlLMmNTRDZ6REI4TjNjcHNFQkF2UnhwOXpPR2c2Ry9TSEhKWUFUODgvYXovSXVER0FMc05WYkdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNvbG9yLW5hbWUiOiAiMS4xLjMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvY29sb3ItbmFtZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzJmU2VuaE13MkhaTVRWSGVDQTlLQ21wRUlieldpUXNqTitCSGNCYlM5dnIxbXR0K3ZKalBka3NJQk5VbUtBVzhURlVEUEpLNVNVVTNRaEU5TkVYRHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9jb21tYW5kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIwLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0yLjIwLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdwVmttTTh2RjJ2UVVrajJMdlptRDM1SnhlSk9MQ3dKOWNVa3VneWsybnVoYnYzK21KdnBMWVl0KzArVVNNeEUrb2orZXkvbEpFbmhadzc1eC9PTWNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmJSb3JCNUZVUVd2bGExNlU4Ui9xZ2FGSXlhMnFHendEck5tQ1p1WUtyYmRTVU1HNkkxWkNHUVJlZmtSVmh1T2tJR1ZuZTdCUTM1RFNmbzFxdkpxRmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9oYXMtZmxhZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxhZy8tL2hhcy1mbGFnLTMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zS0pmMStjZVFCcjRTTWt2UW5CRE5EdGY0VFhwVmhWR2F0ZXUwdDkxOGJsMzBGbmJFMm00dk5MWCtWV2UvZHBqbGIrSHVnR1l6Vzd1UVhIOThIUEVZdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvc2VtdmVyIjogeworICAgICAgInZlcnNpb24iOiAiNS43LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjcuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0J6bm5ROUtqSnFVNjdCNTJSTUM2NUNNYXJLMjYwMFdGbmJrY2Fpd1dxM3h5LzVoYUZKbHNoZ25wam92TVZKK0hmZjQ5ZDhHRW4wYjg3QzVwRFExMGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiYmluIjogeworICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci01LjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWpWandkWEl0NDA4TUlpQXFDWDRvVUtzZ1UyRXFBR3pzMlBwa200YVFZYmptK1pFV0VjVzRTZkZOVHI0dU1OWm1hMGV5NGY1bGdMcmtCMGFYMFFNb3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvdHNsaWIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjE0LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGliLy0vdHNsaWItMS4xNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbmkzNU5LempnTXJ3ZXZ5c0hUQ0FydExEcFB2eWU4elYvMEU0RXlZbjQzUDcvN3F2UXdQaDlCR2tIZXdiTXVsVm50YmlnbWNUN3JkWDNCTm85d1JKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiMEJTRCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy90c3V0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiMi4yOS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c3V0aWxzLy0vdHN1dGlscy0yLjI5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc1SlZIQ0lKd3pmSVNhWHBYRTFxdk5hbGNhNUp3b2I2RmpJNEFvUGxxTXVzSjZmdEZFN0lra0ZvTWhWTFJnSys0S3gzZ2t6YjhVWks1dDV5VFR2RW1BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4xLjguMSIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInR5cGVzY3JpcHQiOiAiPj0yLjEuMCB8fCA+PTIuMS4wLWRldiB8fCA+PTIuMi4wLWRldiB8fCA+PTIuMy4wLWRldiB8fCA+PTIuNC4wLWRldiB8fCA+PTIuNS4wLWRldiB8fCA+PTIuNi4wLWRldiB8fCA+PTIuNy4wLWRldiB8fCA+PTIuOC4wLWRldiB8fCA+PTIuOS4wLWRldiB8fCA+PSAzLjAuMC1kZXYgfHwgPj0gMy4xLjAtZGV2IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90eXBlc2NyaXB0IjogeworICAgICAgInZlcnNpb24iOiAiNS45LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVzY3JpcHQvLS90eXBlc2NyaXB0LTUuOS4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qbDF2WnpQRGluTHI5ZVV0M0ovdDdWNkZnTkV3OVFqdkJQZHlzejlLZlFERDQxZlFyQzJZNHZLUWRpYVVwRlQ0YlhsYjFSSGhMcHA4d3RtNk01VGdTdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiYmluIjogeworICAgICAgICAidHNjIjogImJpbi90c2MiLAorICAgICAgICAidHNzZXJ2ZXIiOiAiYmluL3Rzc2VydmVyIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjE3IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91bmRpY2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI1LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuZGljaS8tL3VuZGljaS03LjI1LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhYbnA0a1R5b3IyWnErSjFGZlBJNkVxM2V3NWg2VmwwRi84ZDlYVTV6WlFmMXRYOXMyU3UxLzNQaU1tVUFORlVMcG1rc3hrQ2xhbUlaY2FVcXJ5SHNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMTguMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdW5kaWNpLXR5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiNy4xOS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmRpY2ktdHlwZXMvLS91bmRpY2ktdHlwZXMtNy4xOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xWVZuVjVPRW0yQVc4Y0pNQ3BkVjIwQ0R5YU4zZzBBakRsT0dmMU9XNGlhREV4OE13ZHRDaFVwNHp1NEgwVlAzbkRSRi84UktXSCtJUHA5dVcwWUdaZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91bml2ZXJzYWxpZnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pdmVyc2FsaWZ5Ly0vdW5pdmVyc2FsaWZ5LTIuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ncHRITlFnaElObmMvdlRHSWswU09GR0ZOWHc3SlZybFJVdENvbkpSbHZhdzZEdVgwd081SmVrbzlzV3JNQmhoK1BzWUFaN29YQWlPbmYvVUtvZ3lpdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBkYXRlLWJyb3dzZXJzbGlzdC1kYi8tL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGItMS4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpzMG05Y3grcU9nRHhvMGVNaUZHRXVlV3p0eitkNCtNM3JHbG1LUFQrVDRJUy9qUDR5bHczTndwdTZjcFRUUDhSMU1BQzFrRjRWYmRMdDNBUmYyMDl3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Jyb3dzZXJzbGlzdCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL25wbS9icm93c2Vyc2xpc3QiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2FpIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc2NhbGFkZSI6ICJeMy4yLjAiLAorICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiY2xpLmpzIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJvd3NlcnNsaXN0IjogIj49IDQuMjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdXVpZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjkuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dWlkLy0vdXVpZC05LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYisxZUpPbHNSOUs4SEpwb3c5T2szZmlXT1dTSWNJelhvZHZ2MHJRalZvT1ZOcFdNcHhmMXdaTnB0NHk5aDEwb2RDTnJxbllwMU9CelJrdGNrQmUzc0E9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9icm9vZmEiLAorICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2N0YXZhbiIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInV1aWQiOiAiZGlzdC9iaW4vdXVpZCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdml0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92aXRlLy0vdml0ZS02LjQuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMk4vNTVyNEpESjRnZHJDdkdnSU5NeStISDNpUnBOSXo4SzZTRndWc0ErSmJRU2NMaUMrY2xtQXhCZ3dpU1BnY0c5VTE1UW12cUNHV3pNYnFkYTV6R1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNidWlsZCI6ICJeMC4yNS4wIiwKKyAgICAgICAgImZkaXIiOiAiXjYuNC40IiwKKyAgICAgICAgInBpY29tYXRjaCI6ICJeNC4wLjIiLAorICAgICAgICAicG9zdGNzcyI6ICJeOC41LjMiLAorICAgICAgICAicm9sbHVwIjogIl40LjM0LjkiLAorICAgICAgICAidGlueWdsb2JieSI6ICJeMC4yLjEzIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ2aXRlIjogImJpbi92aXRlLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMC4wIHx8IF4yMC4wLjAgfHwgPj0yMi4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlP3Nwb25zb3I9MSIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmc2V2ZW50cyI6ICJ+Mi4zLjMiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvbm9kZSI6ICJeMTguMC4wIHx8IF4yMC4wLjAgfHwgPj0yMi4wLjAiLAorICAgICAgICAiaml0aSI6ICI+PTEuMjEuMCIsCisgICAgICAgICJsZXNzIjogIioiLAorICAgICAgICAibGlnaHRuaW5nY3NzIjogIl4xLjIxLjAiLAorICAgICAgICAic2FzcyI6ICIqIiwKKyAgICAgICAgInNhc3MtZW1iZWRkZWQiOiAiKiIsCisgICAgICAgICJzdHlsdXMiOiAiKiIsCisgICAgICAgICJzdWdhcnNzIjogIioiLAorICAgICAgICAidGVyc2VyIjogIl41LjE2LjAiLAorICAgICAgICAidHN4IjogIl40LjguMSIsCisgICAgICAgICJ5YW1sIjogIl4yLjQuMiIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAdHlwZXMvbm9kZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJqaXRpIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImxlc3MiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAibGlnaHRuaW5nY3NzIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInNhc3MiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAic2Fzcy1lbWJlZGRlZCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJzdHlsdXMiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAic3VnYXJzcyI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJ0ZXJzZXIiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAidHN4IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInlhbWwiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3ZpdGUvbm9kZV9tb2R1bGVzL2ZkaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmRpci8tL2ZkaXItNi41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRJYll0WmJ1Y09zMEJSR3FQSmtzaEpVWWRMK1NESDdkVk04Z2p5K0VScDNXQVVqTEVGSkUrMDJrYW55SHR3aldPbndyS1lCaXdBbU0wcDRrTEpBblhnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAicGljb21hdGNoIjogIl4zIHx8IF40IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgInBpY29tYXRjaCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdml0ZS9ub2RlX21vZHVsZXMvcGljb21hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC00LjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUVA4OEJBS3ZNYW0vM054SDZ2ajJvMjFSNk1qeFpVQWQ2bmx3QVMvcG5Hdk45SVZMb2NMSHhHWUl6RmhnNmZVUSs1dGg2UDRkdjRlVzlqWDNEU0lqN0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvam9uc2NobGlua2VydCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdml0ZS9ub2RlX21vZHVsZXMvcm9sbHVwIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yb2xsdXAvLS9yb2xsdXAtNC42MC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WbXRCMnJGVS9Hcm9aNG9MOCtacVhnU0EzOE82R1I4S1NJdldtRUZ2NjNwUTBHNkthQkg5czA3UE84WFRYUDR2SSszVUpVRXlwT2Zqa0dmbVNCQlIwdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvZXN0cmVlIjogIjEuMC44IgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJyb2xsdXAiOiAiZGlzdC9iaW4vcm9sbHVwIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIsCisgICAgICAgICJucG0iOiAiPj04LjAuMCIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybS1lYWJpIjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybTY0IjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4tYXJtNjQiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWRhcndpbi14NjQiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWZyZWVic2QtYXJtNjQiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWZyZWVic2QteDY0IjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmIjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm0tbXVzbGVhYmloZiI6ICI0LjYwLjEiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtZ251IjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsIjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1sb29uZzY0LWdudSI6ICI0LjYwLjEiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtbG9vbmc2NC1tdXNsIjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1wcGM2NC1nbnUiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXBwYzY0LW11c2wiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXJpc2N2NjQtZ251IjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LW11c2wiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXMzOTB4LWdudSI6ICI0LjYwLjEiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudSI6ICI0LjYwLjEiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2wiOiAiNC42MC4xIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLW9wZW5ic2QteDY0IjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1vcGVuaGFybW9ueS1hcm02NCI6ICI0LjYwLjEiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2YyI6ICI0LjYwLjEiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzItaWEzMi1tc3ZjIjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi14NjQtZ251IjogIjQuNjAuMSIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi14NjQtbXN2YyI6ICI0LjYwLjEiLAorICAgICAgICAiZnNldmVudHMiOiAifjIuMy4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy92aXRlc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdml0ZXN0Ly0vdml0ZXN0LTQuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10RnVKcVR4S2I4QXZmeXFNZm5hdlhkemZ5M2gzc1daUld3Zmx1R2JrZVI3bjBIVWV2K0ZtTmdaOFNEclJCVFZyVkNqZ0g1Y0EyMXFHYkNmZk1OdFd2Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdml0ZXN0L2V4cGVjdCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L21vY2tlciI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3ByZXR0eS1mb3JtYXQiOiAiNC4xLjQiLAorICAgICAgICAiQHZpdGVzdC9ydW5uZXIiOiAiNC4xLjQiLAorICAgICAgICAiQHZpdGVzdC9zbmFwc2hvdCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3NweSI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3V0aWxzIjogIjQuMS40IiwKKyAgICAgICAgImVzLW1vZHVsZS1sZXhlciI6ICJeMi4wLjAiLAorICAgICAgICAiZXhwZWN0LXR5cGUiOiAiXjEuMy4wIiwKKyAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4zMC4yMSIsCisgICAgICAgICJvYnVnIjogIl4yLjEuMSIsCisgICAgICAgICJwYXRoZSI6ICJeMi4wLjMiLAorICAgICAgICAicGljb21hdGNoIjogIl40LjAuMyIsCisgICAgICAgICJzdGQtZW52IjogIl40LjAuMC1yYy4xIiwKKyAgICAgICAgInRpbnliZW5jaCI6ICJeMi45LjAiLAorICAgICAgICAidGlueWV4ZWMiOiAiXjEuMC4yIiwKKyAgICAgICAgInRpbnlnbG9iYnkiOiAiXjAuMi4xNSIsCisgICAgICAgICJ0aW55cmFpbmJvdyI6ICJeMy4xLjAiLAorICAgICAgICAidml0ZSI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMCIsCisgICAgICAgICJ3aHktaXMtbm9kZS1ydW5uaW5nIjogIl4yLjMuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAidml0ZXN0IjogInZpdGVzdC5tanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS92aXRlc3QiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZWRnZS1ydW50aW1lL3ZtIjogIioiLAorICAgICAgICAiQG9wZW50ZWxlbWV0cnkvYXBpIjogIl4xLjkuMCIsCisgICAgICAgICJAdHlwZXMvbm9kZSI6ICJeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiLAorICAgICAgICAiQHZpdGVzdC9icm93c2VyLXBsYXl3cmlnaHQiOiAiNC4xLjQiLAorICAgICAgICAiQHZpdGVzdC9icm93c2VyLXByZXZpZXciOiAiNC4xLjQiLAorICAgICAgICAiQHZpdGVzdC9icm93c2VyLXdlYmRyaXZlcmlvIjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvY292ZXJhZ2UtaXN0YW5idWwiOiAiNC4xLjQiLAorICAgICAgICAiQHZpdGVzdC9jb3ZlcmFnZS12OCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3VpIjogIjQuMS40IiwKKyAgICAgICAgImhhcHB5LWRvbSI6ICIqIiwKKyAgICAgICAgImpzZG9tIjogIioiLAorICAgICAgICAidml0ZSI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAZWRnZS1ydW50aW1lL3ZtIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkBvcGVudGVsZW1ldHJ5L2FwaSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAdHlwZXMvbm9kZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAdml0ZXN0L2Jyb3dzZXItcGxheXdyaWdodCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAdml0ZXN0L2Jyb3dzZXItcHJldmlldyI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAdml0ZXN0L2Jyb3dzZXItd2ViZHJpdmVyaW8iOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiQHZpdGVzdC9jb3ZlcmFnZS1pc3RhbmJ1bCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAdml0ZXN0L2NvdmVyYWdlLXY4IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB2aXRlc3QvdWkiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiaGFwcHktZG9tIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImpzZG9tIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInZpdGUiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogZmFsc2UKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy92aXRlc3Qvbm9kZV9tb2R1bGVzL3BpY29tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvbWF0Y2gvLS9waWNvbWF0Y2gtNC4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFQODhCQUt2TWFtLzNOeEg2dmoybzIxUjZNanhaVUFkNm5sd0FTL3BuR3ZOOUlWTG9jTEh4R1lJekZoZzZmVVErNXRoNlA0ZHY0ZVc5algzRFNJajdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3czYy14bWxzZXJpYWxpemVyIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3czYy14bWxzZXJpYWxpemVyLy0vdzNjLXhtbHNlcmlhbGl6ZXItNS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW84cWdobEk4TlpIVTFsTFBycGkyK1VxN2FiaDRHR1BwWUFObGFseld4eVd0ZUpPQ3NyL1Arb1BCQTQ5VE9MdTVGVFpPNGQzRjlNbldKZmlNbzRCa21BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInhtbC1uYW1lLXZhbGlkYXRvciI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dlYi12aXRhbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViLXZpdGFscy8tL3dlYi12aXRhbHMtNS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWkyejk4YkVtYUNxU0RpSEVEdStnSGwvZG1SNFErVHhGbUczLzEzS2tNTytvOFV4UXpDcVdhRFJDaUxnRWE0MW5sTzRWcFhTSTBBU2ExeFdtTzlzQmxBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2ViaWRsLWNvbnZlcnNpb25zIjogeworICAgICAgInZlcnNpb24iOiAiOC4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYmlkbC1jb252ZXJzaW9ucy8tL3dlYmlkbC1jb252ZXJzaW9ucy04LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQk1oTEQvU3crR2JKQzIxQy9VZ3lhWlg0MW5QdDhiVVRnK2pXeURlZzdlN1lONHhPTTA1WVBTSVhjZUFDblhWdHF5RXcvTE1DbFVRTXRNWitQR0dwcVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2hhdHdnLW1pbWV0eXBlIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1taW1ldHlwZS8tL3doYXR3Zy1taW1ldHlwZS01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1hjTmNIT0M1MXVQR0YwUC9ENE5WdHJralNVMmZOc205aW9nNFp2WkpzTDNyam9EQXpYWmhrbTJNV3QxeStQVWRnZ0tBWVZvTUFJWWNzNzh3SjUxQ3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2hhdHdnLXVybCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE2LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLXVybC8tL3doYXR3Zy11cmwtMTYuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xdG80elhCeG1YSFYzSWlTU0VJbnJyZUlsdTAydlVPdnJoeEpKSDV2Y3hZVEJEQXg1MWNxWmlLZHlUeGxlY2RLTlNqajhFY3hHQnhOZjZWZys5NDVndz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXhvZHVzL2J5dGVzIjogIl4xLjExLjAiLAorICAgICAgICAidHI0NiI6ICJeNi4wLjAiLAorICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl44LjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgXjIyLjEyLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3doeS1pcy1ub2RlLXJ1bm5pbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2h5LWlzLW5vZGUtcnVubmluZy8tL3doeS1pcy1ub2RlLXJ1bm5pbmctMi4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhVcm1hV0JkVkRjeHZZcW55aDA5enVuS3pST1dqYlpUaU55OGRCRWprUzdlaEVEUWliWEo3WHZsbXRid3VUY2xVaUl5TitDeVhRRDRWbWtvOGZObTh3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNpZ2luZm8iOiAiXjIuMC4wIiwKKyAgICAgICAgInN0YWNrYmFjayI6ICIwLjAuMiIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAid2h5LWlzLW5vZGUtcnVubmluZyI6ICJjbGkuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd3JhcHB5IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXBweS8tL3dyYXBweS0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDRTcC9EUnNlb3I5d0w2RXZWMitUdVFuNjNkTWtQalovc3A5WGtnaFRFYlY5S2xQUzF4VXNaM3U3L0lRTzR3eHRjRkI0YmdwUVBSY1IzUUN2ZXpQY1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveG1sLW5hbWUtdmFsaWRhdG9yIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbC1uYW1lLXZhbGlkYXRvci8tL3htbC1uYW1lLXZhbGlkYXRvci01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXZHSzhFSjNEaGFIZmJSbEVUT1dBUzVwTzlNWklUZWF1SEtKeWI4d3lhalVmUVVlbmtJZzJNdkxEVFo0VC9UZ0ljbTNIVTBURkJnV1dib0FaMzBVSGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3htbGNoYXJzIjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbGNoYXJzLy0veG1sY2hhcnMtMi4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpabkRLSzhCMFJDRHc4NEZOZERBSXBaSytKdUp3K3M3THo4bmtzSTdTSXVVM1VYSkpzbFV0aHNpK3VXQlVZT3dQRndXN1c3UFJMUmZVS3B4anRqRkN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3lhbGxpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtMy4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWE0VUdRYVdQSDU5bU9YVVluQUcyZXduY1FTNGk0RjQzVHYzSm9BTStzMlZEQW1TOU5zSzhHcERNTHJDSFBrc0ZUN2gzSzZUT29VTm4ycGI3Um9YeDRnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3lhbWwiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjguMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFtbC8tL3lhbWwtMi44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUF2YmFDTE9PMk90dy9sVzVibWg5ZC9XRWRjREZkUXAyWjJaVUgzcFg5VTJpaHlVWTBudkx2N0o2VHJXb3drbFJHUFliQi9JdUlNZllneGFDUGc1QnBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ5YW1sIjogImJpbi5tanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDE0LjYiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2VlbWVsaSIKKyAgICAgIH0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxhdG9yL3BhY2thZ2UuanNvbiBiL2RvY3MvZ3JlbWxhdG9yL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODgyNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3IvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsNTcgQEAKK3sKKyAgImhvbWVwYWdlIjogIi9ncmVtbGF0b3IiLAorICAibmFtZSI6ICJncmVtbGF0b3IiLAorICAidmVyc2lvbiI6ICIwLjEuMCIsCisgICJwcml2YXRlIjogdHJ1ZSwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAiZ3JlbWxpbiI6ICI0LjAuMC1iZXRhLjIiLAorICAgICJyZWFjdCI6ICJeMTguMy4xIiwKKyAgICAicmVhY3QtZG9tIjogIl4xOC4zLjEiLAorICAgICJzdHlsZWQtY29tcG9uZW50cyI6ICJeNi4xLjAiLAorICAgICJ3ZWItdml0YWxzIjogIl41LjIuMCIKKyAgfSwKKyAgInNjcmlwdHMiOiB7CisgICAgInByZWRlcGxveSI6ICJucG0gcnVuIGJ1aWxkIiwKKyAgICAiZGVwbG95IjogImdoLXBhZ2VzIC1kIGRpc3QiLAorICAgICJzdGFydCI6ICJ2aXRlIiwKKyAgICAiYnVpbGQiOiAidHNjICYmIHZpdGUgYnVpbGQiLAorICAgICJwcmV2aWV3IjogInZpdGUgcHJldmlldyIsCisgICAgInRlc3QiOiAidml0ZXN0IgorICB9LAorICAiYnJvd3NlcnNsaXN0IjogeworICAgICJwcm9kdWN0aW9uIjogWworICAgICAgIj4wLjIlIiwKKyAgICAgICJub3QgZGVhZCIsCisgICAgICAibm90IG9wX21pbmkgYWxsIgorICAgIF0sCisgICAgImRldmVsb3BtZW50IjogWworICAgICAgImxhc3QgMSBjaHJvbWUgdmVyc2lvbiIsCisgICAgICAibGFzdCAxIGZpcmVmb3ggdmVyc2lvbiIsCisgICAgICAibGFzdCAxIHNhZmFyaSB2ZXJzaW9uIgorICAgIF0KKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSI6ICJeNi42LjMiLAorICAgICJAdGVzdGluZy1saWJyYXJ5L3JlYWN0IjogIl4xNi4zLjIiLAorICAgICJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQiOiAiXjE0LjYuMSIsCisgICAgIkB0eXBlcy9ub2RlIjogIl4yNS42LjAiLAorICAgICJAdHlwZXMvcmVhY3QiOiAiXjE4LjMuMTgiLAorICAgICJAdHlwZXMvcmVhY3QtZG9tIjogIl4xOC4zLjUiLAorICAgICJAdml0ZWpzL3BsdWdpbi1yZWFjdCI6ICJeNC4zLjQiLAorICAgICJnaC1wYWdlcyI6ICJeNi4zLjAiLAorICAgICJqc2RvbSI6ICJeMjkuMC4yIiwKKyAgICAicHJldHRpZXIiOiAiXjMuMC4xIiwKKyAgICAidHNsaW50IjogIl42LjEuMyIsCisgICAgInRzbGludC1jb25maWctcHJldHRpZXIiOiAiXjEuMTguMCIsCisgICAgInR5cGVzY3JpcHQiOiAiXjUuNy4zIiwKKyAgICAidml0ZSI6ICJeNi4xLjAiLAorICAgICJ2aXRlc3QiOiAiXjQuMS40IgorICB9LAorICAib3ZlcnJpZGVzIjogeworICAgICJyZWFjdCI6ICIkcmVhY3QiLAorICAgICJyZWFjdC1kb20iOiAiJHJlYWN0LWRvbSIKKyAgfSwKKyAgImVuZ2luZXMiOiB7CisgICAgIm5vZGUiOiAiPj0yMiIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvcHVibGljL2Zhdmljb24uaWNvIGIvZG9jcy9ncmVtbGF0b3IvcHVibGljL2Zhdmljb24uaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzNlNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9wdWJsaWMvZmF2aWNvbi5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvcHVibGljL21hbmlmZXN0Lmpzb24gYi9kb2NzL2dyZW1sYXRvci9wdWJsaWMvbWFuaWZlc3QuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTcxMzIxCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3IvcHVibGljL21hbmlmZXN0Lmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAic2hvcnRfbmFtZSI6ICJHcmVtbGF0b3IiLAorICAibmFtZSI6ICJHcmVtbGF0b3IgLSBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQgVHJhbnNsYXRvciIsCisgICJpY29ucyI6IFsKKyAgICB7CisgICAgICAic3JjIjogImZhdmljb24uaWNvIiwKKyAgICAgICJzaXplcyI6ICI2NHg2NCAzMngzMiAyNHgyNCAxNngxNiIsCisgICAgICAidHlwZSI6ICJpbWFnZS94LWljb24iCisgICAgfQorICBdLAorICAic3RhcnRfdXJsIjogIi4iLAorICAiZGlzcGxheSI6ICJzdGFuZGFsb25lIiwKKyAgInRoZW1lX2NvbG9yIjogIiMwMDAwMDAiLAorICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIgorfQpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvcHVibGljL3JvYm90cy50eHQgYi9kb2NzL2dyZW1sYXRvci9wdWJsaWMvcm9ib3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzA0NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3IvcHVibGljL3JvYm90cy50eHQKQEAgLTAsMCArMSwyMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIGh0dHBzOi8vd3d3LnJvYm90c3R4dC5vcmcvcm9ib3RzdHh0Lmh0bWwKK1VzZXItYWdlbnQ6ICoKK0Rpc2FsbG93OgpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3Ivc3JjL0FwcC50c3ggYi9kb2NzL2dyZW1sYXRvci9zcmMvQXBwLnRzeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDMyYWM3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL0FwcC50c3gKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CitpbXBvcnQgc3R5bGVkLCB7IGNyZWF0ZUdsb2JhbFN0eWxlIH0gZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnOworaW1wb3J0IE5hdmlnYXRvciBmcm9tICcuL2NvbXBvbmVudHMvTmF2aWdhdG9yJzsKK2ltcG9ydCBGb290ZXIgZnJvbSAnLi9jb21wb25lbnRzL0Zvb3Rlcic7CitpbXBvcnQgUXVlcnlUcmFuc2xhdG9yIGZyb20gJy4vdmlld3MvUXVlcnlUcmFuc2xhdG9yJzsKKworY29uc3QgR2xvYmFsU3R5bGUgPSBjcmVhdGVHbG9iYWxTdHlsZWAKKyAgKiwgKjo6YmVmb3JlLCAqOjphZnRlciB7CisgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgfQorICBib2R5IHsKKyAgICBtYXJnaW46IDA7CisgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBPeHlnZW4sCisgICAgICBVYnVudHUsIENhbnRhcmVsbCwgc2Fucy1zZXJpZjsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNWY3OworICAgIGNvbG9yOiAjMjIyOworICB9CitgOworCitjb25zdCBNYWluID0gc3R5bGVkLm1haW5gCisgIHBhZGRpbmctdG9wOiA2MHB4OworICBtaW4taGVpZ2h0OiAxMDB2aDsKK2A7CisKK2NvbnN0IEFwcCA9ICgpID0+ICgKKyAgPD4KKyAgICA8R2xvYmFsU3R5bGUgLz4KKyAgICA8TmF2aWdhdG9yIC8+CisgICAgPE1haW4+CisgICAgICA8UXVlcnlUcmFuc2xhdG9yIC8+CisgICAgPC9NYWluPgorICAgIDxGb290ZXIgLz4KKyAgPC8+CispOworCitleHBvcnQgZGVmYXVsdCBBcHA7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9FcnJvckFsZXJ0LnRzeCBiL2RvY3MvZ3JlbWxhdG9yL3NyYy9jb21wb25lbnRzL0Vycm9yQWxlcnQudHN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTcyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9FcnJvckFsZXJ0LnRzeApAQCAtMCwwICsxLDY0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsKK2ltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnOworCitjb25zdCBBbGVydCA9IHN0eWxlZC5kaXZgCisgIGJhY2tncm91bmQtY29sb3I6ICNmOGQ3ZGE7CisgIGNvbG9yOiAjNzIxYzI0OworICBib3JkZXI6IDFweCBzb2xpZCAjZjVjNmNiOworICBib3JkZXItcmFkaXVzOiA0cHg7CisgIHBhZGRpbmc6IDEycHggNDBweCAxMnB4IDE2cHg7CisgIGZvbnQtc2l6ZTogMC44NzVyZW07CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgbGluZS1oZWlnaHQ6IDEuNTsKK2A7CisKK2NvbnN0IERpc21pc3NCdXR0b24gPSBzdHlsZWQuYnV0dG9uYAorICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogOHB4OworICByaWdodDogMTBweDsKKyAgYmFja2dyb3VuZDogbm9uZTsKKyAgYm9yZGVyOiBub25lOworICBmb250LXNpemU6IDEuMXJlbTsKKyAgY29sb3I6ICM3MjFjMjQ7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgbGluZS1oZWlnaHQ6IDE7CisgIHBhZGRpbmc6IDAgNHB4OworCisgICY6aG92ZXIgeworICAgIG9wYWNpdHk6IDAuNzsKKyAgfQorYDsKKworaW50ZXJmYWNlIFByb3BzIHsKKyAgbWVzc2FnZTogc3RyaW5nOworICBvbkRpc21pc3M6ICgpID0+IHZvaWQ7Cit9CisKK2NvbnN0IEVycm9yQWxlcnQgPSAoeyBtZXNzYWdlLCBvbkRpc21pc3MgfTogUHJvcHMpID0+ICgKKyAgPEFsZXJ0IHJvbGU9ImFsZXJ0Ij4KKyAgICA8c3Ryb25nPlRyYW5zbGF0aW9uIGVycm9yOjwvc3Ryb25nPiB7bWVzc2FnZX0KKyAgICA8RGlzbWlzc0J1dHRvbiBvbkNsaWNrPXtvbkRpc21pc3N9IGFyaWEtbGFiZWw9IkRpc21pc3MgZXJyb3IiPgorICAgICAgJnRpbWVzOworICAgIDwvRGlzbWlzc0J1dHRvbj4KKyAgPC9BbGVydD4KKyk7CisKK2V4cG9ydCBkZWZhdWx0IEVycm9yQWxlcnQ7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9Gb290ZXIudHN4IGIvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvRm9vdGVyLnRzeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWU2YmUyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvRm9vdGVyLnRzeApAQCAtMCwwICsxLDQ2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7CitpbXBvcnQgbG9ja0ZpbGUgZnJvbSAnLi4vLi4vcGFja2FnZS1sb2NrLmpzb24nOworCitjb25zdCBncmVtbGluVmVyc2lvbiA9IGxvY2tGaWxlLnBhY2thZ2VzWydub2RlX21vZHVsZXMvZ3JlbWxpbiddLnZlcnNpb247CisKK2NvbnN0IEZvb3RlcldyYXBwZXIgPSBzdHlsZWQuZm9vdGVyYAorICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIHBhZGRpbmc6IDI0cHg7CisgIGZvbnQtc2l6ZTogMC44cmVtOworICBjb2xvcjogIzg4ODsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlMGUwZTA7CisgIG1hcmdpbi10b3A6IDQ4cHg7CisgIGxpbmUtaGVpZ2h0OiAyMHB4OworYDsKKworY29uc3QgRm9vdGVyID0gKCkgPT4gKAorICA8Rm9vdGVyV3JhcHBlcj4KKyAgICA8cD5HcmVtbGluIHZlcnNpb246IHtncmVtbGluVmVyc2lvbn08L3A+CisgICAgPHA+Q29weXJpZ2h0IMKpIDIwMTUtMjAyNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9wPgorICAgIDxwPgorICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciI+CisgICAgICAgIEFwYWNoZSBUaW5rZXJQb3DihKIKKyAgICAgIDwvYT4KKyAgICA8L3A+CisgIDwvRm9vdGVyV3JhcHBlcj4KKyk7CisKK2V4cG9ydCBkZWZhdWx0IEZvb3RlcjsKZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxhdG9yL3NyYy9jb21wb25lbnRzL0xhbmd1YWdlVGFicy50c3ggYi9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9MYW5ndWFnZVRhYnMudHN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNTliNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9MYW5ndWFnZVRhYnMudHN4CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOworaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7CitpbXBvcnQgeyBUcmFuc2xhdG9yS2V5LCBUUkFOU0xBVE9SX0tFWVMsIFRSQU5TTEFUT1JfRElTUExBWV9OQU1FUyB9IGZyb20gJy4uL3N0b3JlL3R5cGVzJzsKKworY29uc3QgVGFiQmFyID0gc3R5bGVkLmRpdmAKKyAgZGlzcGxheTogZmxleDsKKyAgZmxleC13cmFwOiB3cmFwOworICBnYXA6IDRweDsKKyAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlMGUwZTA7CisgIG1hcmdpbi1ib3R0b206IDA7CitgOworCitjb25zdCBUYWIgPSBzdHlsZWQuYnV0dG9uPHsgJGFjdGl2ZTogYm9vbGVhbiB9PmAKKyAgcGFkZGluZzogOHB4IDE2cHg7CisgIGJvcmRlcjogbm9uZTsKKyAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICR7KHsgJGFjdGl2ZSB9KSA9PiAoJGFjdGl2ZSA/ICcjMmM3YmU1JyA6ICd0cmFuc3BhcmVudCcpfTsKKyAgYmFja2dyb3VuZDogbm9uZTsKKyAgZm9udC1zaXplOiAwLjg3NXJlbTsKKyAgZm9udC13ZWlnaHQ6ICR7KHsgJGFjdGl2ZSB9KSA9PiAoJGFjdGl2ZSA/ICc3MDAnIDogJzQwMCcpfTsKKyAgY29sb3I6ICR7KHsgJGFjdGl2ZSB9KSA9PiAoJGFjdGl2ZSA/ICcjMmM3YmU1JyA6ICcjNTU1Jyl9OworICBjdXJzb3I6IHBvaW50ZXI7CisgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzLCBib3JkZXItY29sb3IgMC4xNXM7CisgIG1hcmdpbi1ib3R0b206IC0ycHg7CisKKyAgJjpob3ZlciB7CisgICAgY29sb3I6ICMyYzdiZTU7CisgIH0KK2A7CisKK2ludGVyZmFjZSBQcm9wcyB7CisgIGFjdGl2ZVRhYjogVHJhbnNsYXRvcktleTsKKyAgb25UYWJDaGFuZ2U6ICh0YWI6IFRyYW5zbGF0b3JLZXkpID0+IHZvaWQ7Cit9CisKK2NvbnN0IExhbmd1YWdlVGFicyA9ICh7IGFjdGl2ZVRhYiwgb25UYWJDaGFuZ2UgfTogUHJvcHMpID0+ICgKKyAgPFRhYkJhciByb2xlPSJ0YWJsaXN0Ij4KKyAgICB7VFJBTlNMQVRPUl9LRVlTLm1hcCgoa2V5KSA9PiAoCisgICAgICA8VGFiCisgICAgICAgIGtleT17a2V5fQorICAgICAgICByb2xlPSJ0YWIiCisgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2FjdGl2ZVRhYiA9PT0ga2V5fQorICAgICAgICAkYWN0aXZlPXthY3RpdmVUYWIgPT09IGtleX0KKyAgICAgICAgb25DbGljaz17KCkgPT4gb25UYWJDaGFuZ2Uoa2V5KX0KKyAgICAgID4KKyAgICAgICAge1RSQU5TTEFUT1JfRElTUExBWV9OQU1FU1trZXldfQorICAgICAgPC9UYWI+CisgICAgKSl9CisgIDwvVGFiQmFyPgorKTsKKworZXhwb3J0IGRlZmF1bHQgTGFuZ3VhZ2VUYWJzOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvTmF2aWdhdG9yLnRzeCBiL2RvY3MvZ3JlbWxhdG9yL3NyYy9jb21wb25lbnRzL05hdmlnYXRvci50c3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiMDE3NAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3JlbWxhdG9yL3NyYy9jb21wb25lbnRzL05hdmlnYXRvci50c3gKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7CitpbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJzsKKworY29uc3QgQmFyID0gc3R5bGVkLmhlYWRlcmAKKyAgYmFja2dyb3VuZC1jb2xvcjogIzJjMmYzNjsKKyAgY29sb3I6ICNmMmYyZjI7CisgIHBhZGRpbmc6IDAgMjRweDsKKyAgaGVpZ2h0OiA2MHB4OworICBkaXNwbGF5OiBmbGV4OworICBhbGlnbi1pdGVtczogY2VudGVyOworICBnYXA6IDE2cHg7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgdG9wOiAwOworICBsZWZ0OiAwOworICByaWdodDogMDsKKyAgei1pbmRleDogMTAwOworICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjQpOworYDsKKworY29uc3QgVGl0bGUgPSBzdHlsZWQuaDFgCisgIGZvbnQtc2l6ZTogMS40cmVtOworICBmb250LXdlaWdodDogNzAwOworICBtYXJnaW46IDA7CisgIGNvbG9yOiAjZjJmMmYyOworICBsZXR0ZXItc3BhY2luZzogMC41cHg7CitgOworCitjb25zdCBTdWJ0aXRsZSA9IHN0eWxlZC5zcGFuYAorICBmb250LXNpemU6IDAuOHJlbTsKKyAgY29sb3I6ICNhYWE7CisgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzU1NTsKKyAgcGFkZGluZy1sZWZ0OiAxNnB4OworYDsKKworY29uc3QgTmF2aWdhdG9yID0gKCkgPT4gKAorICA8QmFyPgorICAgIDxUaXRsZT5HcmVtbGF0b3I8L1RpdGxlPgorICAgIDxTdWJ0aXRsZT5HcmVtbGluIExhbmd1YWdlIFZhcmlhbnQgVHJhbnNsYXRvciDigJQgQXBhY2hlIFRpbmtlclBvcDwvU3VidGl0bGU+CisgIDwvQmFyPgorKTsKKworZXhwb3J0IGRlZmF1bHQgTmF2aWdhdG9yOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvUXVlcnlJbnB1dC50c3ggYi9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9RdWVyeUlucHV0LnRzeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTlhZTViCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvUXVlcnlJbnB1dC50c3gKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOworaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7CisKK2NvbnN0IFdyYXBwZXIgPSBzdHlsZWQuZGl2YAorICBkaXNwbGF5OiBmbGV4OworICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOworICBnYXA6IDEycHg7CitgOworCitjb25zdCBMYWJlbCA9IHN0eWxlZC5sYWJlbGAKKyAgZm9udC1zaXplOiAwLjg1cmVtOworICBmb250LXdlaWdodDogNjAwOworICBjb2xvcjogIzQ0NDsKKyAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKKyAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OworYDsKKworY29uc3QgVGV4dEFyZWEgPSBzdHlsZWQudGV4dGFyZWFgCisgIHdpZHRoOiAxMDAlOworICBtaW4taGVpZ2h0OiAxMjBweDsKKyAgcGFkZGluZzogMTJweCAxNHB4OworICBmb250LWZhbWlseTogJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlOworICBmb250LXNpemU6IDAuOTVyZW07CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGJvcmRlci1yYWRpdXM6IDRweDsKKyAgcmVzaXplOiB2ZXJ0aWNhbDsKKyAgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKKyAgY29sb3I6ICMyMjI7CisKKyAgJjpmb2N1cyB7CisgICAgb3V0bGluZTogbm9uZTsKKyAgICBib3JkZXItY29sb3I6ICMyYzdiZTU7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgfQorYDsKKworY29uc3QgVHJhbnNsYXRlQnV0dG9uID0gc3R5bGVkLmJ1dHRvbmAKKyAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKKyAgcGFkZGluZzogMTBweCAyNHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmM3YmU1OworICBjb2xvcjogd2hpdGU7CisgIGJvcmRlcjogbm9uZTsKKyAgYm9yZGVyLXJhZGl1czogNHB4OworICBmb250LXNpemU6IDAuOTVyZW07CisgIGZvbnQtd2VpZ2h0OiA2MDA7CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlOworCisgICY6aG92ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6ICMxYTYzYzQ7CisgIH0KKworICAmOmFjdGl2ZSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogIzE0NTNhODsKKyAgfQorYDsKKworaW50ZXJmYWNlIFByb3BzIHsKKyAgdmFsdWU6IHN0cmluZzsKKyAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkOworICBvblRyYW5zbGF0ZTogKCkgPT4gdm9pZDsKK30KKworY29uc3QgUExBQ0VIT0xERVIgPSBgZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykub3V0KCdrbm93cycpLnZhbHVlcygnbmFtZScpYDsKKworY29uc3QgUXVlcnlJbnB1dCA9ICh7IHZhbHVlLCBvbkNoYW5nZSwgb25UcmFuc2xhdGUgfTogUHJvcHMpID0+ICgKKyAgPFdyYXBwZXI+CisgICAgPExhYmVsIGh0bWxGb3I9ImdyZW1saW4taW5wdXQiPkdyZW1saW4gUXVlcnk8L0xhYmVsPgorICAgIDxUZXh0QXJlYQorICAgICAgaWQ9ImdyZW1saW4taW5wdXQiCisgICAgICB2YWx1ZT17dmFsdWV9CisgICAgICBvbkNoYW5nZT17KGUpID0+IG9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX0KKyAgICAgIHBsYWNlaG9sZGVyPXtQTEFDRUhPTERFUn0KKyAgICAgIHNwZWxsQ2hlY2s9e2ZhbHNlfQorICAgICAgb25LZXlEb3duPXsoZSkgPT4geworICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpKSB7CisgICAgICAgICAgb25UcmFuc2xhdGUoKTsKKyAgICAgICAgfQorICAgICAgfX0KKyAgICAvPgorICAgIDxUcmFuc2xhdGVCdXR0b24gb25DbGljaz17b25UcmFuc2xhdGV9PlRyYW5zbGF0ZTwvVHJhbnNsYXRlQnV0dG9uPgorICA8L1dyYXBwZXI+CispOworCitleHBvcnQgZGVmYXVsdCBRdWVyeUlucHV0OwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvVHJhbnNsYXRpb25SZXN1bHQudHN4IGIvZG9jcy9ncmVtbGF0b3Ivc3JjL2NvbXBvbmVudHMvVHJhbnNsYXRpb25SZXN1bHQudHN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmIxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvY29tcG9uZW50cy9UcmFuc2xhdGlvblJlc3VsdC50c3gKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7CitpbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JLZXksIFRSQU5TTEFUT1JfRElTUExBWV9OQU1FUyB9IGZyb20gJy4uL3N0b3JlL3R5cGVzJzsKKworY29uc3QgV3JhcHBlciA9IHN0eWxlZC5kaXZgCisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsKKyAgYm9yZGVyLXRvcDogbm9uZTsKKyAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmE7CitgOworCitjb25zdCBDb2RlQmxvY2sgPSBzdHlsZWQucHJlYAorICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDE2cHggNDhweCAxNnB4IDE2cHg7CisgIGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBDb3VyaWVyLCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMC45cmVtOworICBsaW5lLWhlaWdodDogMS42OworICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CisgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKKyAgY29sb3I6ICMyMjI7CisgIG1pbi1oZWlnaHQ6IDgwcHg7CitgOworCitjb25zdCBQbGFjZWhvbGRlciA9IHN0eWxlZC5zcGFuYAorICBjb2xvcjogI2FhYTsKKyAgZm9udC1zdHlsZTogaXRhbGljOworYDsKKworY29uc3QgQ29weUJ1dHRvbiA9IHN0eWxlZC5idXR0b248eyBjb3BpZWQ6IGJvb2xlYW4gfT5gCisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAxMHB4OworICByaWdodDogMTBweDsKKyAgcGFkZGluZzogNHB4IDEwcHg7CisgIGZvbnQtc2l6ZTogMC43NXJlbTsKKyAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IGNvcGllZCB9KSA9PiAoY29waWVkID8gJyNkNGVkZGEnIDogJyNmZmYnKX07CisgIGNvbG9yOiAkeyh7IGNvcGllZCB9KSA9PiAoY29waWVkID8gJyMxNTU3MjQnIDogJyM1NTUnKX07CisgIGN1cnNvcjogcG9pbnRlcjsKKyAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjJzLCBjb2xvciAwLjJzOworCisgICY6aG92ZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6ICR7KHsgY29waWVkIH0pID0+IChjb3BpZWQgPyAnI2Q0ZWRkYScgOiAnI2YwZjBmMCcpfTsKKyAgfQorYDsKKworaW50ZXJmYWNlIFByb3BzIHsKKyAgYWN0aXZlVGFiOiBUcmFuc2xhdG9yS2V5OworICB0cmFuc2xhdGlvbnM6IFJlY29yZDxUcmFuc2xhdG9yS2V5LCBzdHJpbmc+OworfQorCitjb25zdCBUcmFuc2xhdGlvblJlc3VsdCA9ICh7IGFjdGl2ZVRhYiwgdHJhbnNsYXRpb25zIH06IFByb3BzKSA9PiB7CisgIGNvbnN0IFtjb3BpZWQsIHNldENvcGllZF0gPSB1c2VTdGF0ZShmYWxzZSk7CisgIGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnNbYWN0aXZlVGFiXTsKKworICBjb25zdCBoYW5kbGVDb3B5ID0gKCkgPT4geworICAgIGlmICghdGV4dCkgcmV0dXJuOworICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oKCkgPT4geworICAgICAgc2V0Q29waWVkKHRydWUpOworICAgICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAxNTAwKTsKKyAgICB9KTsKKyAgfTsKKworICByZXR1cm4gKAorICAgIDxXcmFwcGVyIHJvbGU9InRhYnBhbmVsIj4KKyAgICAgIDxDb2RlQmxvY2s+CisgICAgICAgIHt0ZXh0ID8gKAorICAgICAgICAgIHRleHQKKyAgICAgICAgKSA6ICgKKyAgICAgICAgICA8UGxhY2Vob2xkZXI+CisgICAgICAgICAgICBFbnRlciBhIEdyZW1saW4gcXVlcnkgYWJvdmUgYW5kIGNsaWNrIFRyYW5zbGF0ZSB0byBzZWUgdGhleycgJ30KKyAgICAgICAgICAgIHtUUkFOU0xBVE9SX0RJU1BMQVlfTkFNRVNbYWN0aXZlVGFiXX0gb3V0cHV0LgorICAgICAgICAgIDwvUGxhY2Vob2xkZXI+CisgICAgICAgICl9CisgICAgICA8L0NvZGVCbG9jaz4KKyAgICAgIHt0ZXh0ICYmICgKKyAgICAgICAgPENvcHlCdXR0b24gY29waWVkPXtjb3BpZWR9IG9uQ2xpY2s9e2hhbmRsZUNvcHl9PgorICAgICAgICAgIHtjb3BpZWQgPyAnQ29waWVkIScgOiAnQ29weSd9CisgICAgICAgIDwvQ29weUJ1dHRvbj4KKyAgICAgICl9CisgICAgPC9XcmFwcGVyPgorICApOworfTsKKworZXhwb3J0IGRlZmF1bHQgVHJhbnNsYXRpb25SZXN1bHQ7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvaW5kZXgudHN4IGIvZG9jcy9ncmVtbGF0b3Ivc3JjL2luZGV4LnRzeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmUxOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL2luZGV4LnRzeApAQCAtMCwwICsxLDI3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsKK2ltcG9ydCB7IGNyZWF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JzsKK2ltcG9ydCBBcHAgZnJvbSAnLi9BcHAnOworCitjcmVhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290JykhKS5yZW5kZXIoCisgIDxSZWFjdC5TdHJpY3RNb2RlPgorICAgIDxBcHAgLz4KKyAgPC9SZWFjdC5TdHJpY3RNb2RlPiwKKyk7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvYWN0aW9ucy50cyBiL2RvY3MvZ3JlbWxhdG9yL3NyYy9zdG9yZS9hY3Rpb25zLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkM2ZjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvYWN0aW9ucy50cwpAQCAtMCwwICsxLDIwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworZXhwb3J0IGNvbnN0IFNFVF9RVUVSWV9JTlBVVCA9ICdTRVRfUVVFUllfSU5QVVQnOworZXhwb3J0IGNvbnN0IFRSQU5TTEFURV9RVUVSWSA9ICdUUkFOU0xBVEVfUVVFUlknOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3Ivc3JjL3N0b3JlL2luZGV4LnRzIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL3N0b3JlL2luZGV4LnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmEwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvaW5kZXgudHMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2V4cG9ydCB7IGRlZmF1bHQgYXMgcmVkdWNlciB9IGZyb20gJy4vcmVkdWNlcnMnOworZXhwb3J0IHsgZGVmYXVsdCBhcyBpbml0aWFsU3RhdGUgfSBmcm9tICcuL2luaXRpYWxTdGF0ZSc7CitleHBvcnQgKiBmcm9tICcuL2FjdGlvbnMnOworZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvaW5pdGlhbFN0YXRlLnRzIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL3N0b3JlL2luaXRpYWxTdGF0ZS50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWExNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL3N0b3JlL2luaXRpYWxTdGF0ZS50cwpAQCAtMCwwICsxLDMxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IHsgU3RhdGUsIFRSQU5TTEFUT1JfS0VZUyB9IGZyb20gJy4vdHlwZXMnOworCitjb25zdCBlbXB0eVRyYW5zbGF0aW9ucyA9IE9iamVjdC5mcm9tRW50cmllcygKKyAgVFJBTlNMQVRPUl9LRVlTLm1hcCgoa2V5KSA9PiBba2V5LCAnJ10pCispIGFzIFN0YXRlWyd0cmFuc2xhdGlvbnMnXTsKKworY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZSA9IHsKKyAgcXVlcnlJbnB1dDogJycsCisgIHRyYW5zbGF0aW9uczogZW1wdHlUcmFuc2xhdGlvbnMsCisgIGVycm9yOiBudWxsLAorfTsKKworZXhwb3J0IGRlZmF1bHQgaW5pdGlhbFN0YXRlOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3Ivc3JjL3N0b3JlL3JlZHVjZXJzLnRzIGIvZG9jcy9ncmVtbGF0b3Ivc3JjL3N0b3JlL3JlZHVjZXJzLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTJhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvcmVkdWNlcnMudHMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCB7IEdyZW1saW5UcmFuc2xhdG9yIH0gZnJvbSAnZ3JlbWxpbi9sYW5ndWFnZSc7CitpbXBvcnQgeyBTRVRfUVVFUllfSU5QVVQsIFRSQU5TTEFURV9RVUVSWSB9IGZyb20gJy4vYWN0aW9ucyc7CitpbXBvcnQgaW5pdGlhbFN0YXRlIGZyb20gJy4vaW5pdGlhbFN0YXRlJzsKK2ltcG9ydCB7IFN0YXRlLCBUUkFOU0xBVE9SX0tFWVMsIFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnOworCitjb25zdCBlbXB0eVRyYW5zbGF0aW9ucyA9ICgpOiBUcmFuc2xhdGlvbnMgPT4KKyAgT2JqZWN0LmZyb21FbnRyaWVzKFRSQU5TTEFUT1JfS0VZUy5tYXAoKGspID0+IFtrLCAnJ10pKSBhcyBUcmFuc2xhdGlvbnM7CisKK2NvbnN0IHJlZHVjZXIgPSAoc3RhdGU6IFN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IHsgdHlwZTogc3RyaW5nOyBwYXlsb2FkPzogc3RyaW5nIH0pOiBTdGF0ZSA9PiB7CisgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKKyAgICBjYXNlIFNFVF9RVUVSWV9JTlBVVDoKKyAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBxdWVyeUlucHV0OiBhY3Rpb24ucGF5bG9hZCA/PyAnJywgZXJyb3I6IG51bGwgfTsKKworICAgIGNhc2UgVFJBTlNMQVRFX1FVRVJZOiB7CisgICAgICBjb25zdCBxdWVyeSA9IHN0YXRlLnF1ZXJ5SW5wdXQudHJpbSgpOworICAgICAgaWYgKCFxdWVyeSkgeworICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgdHJhbnNsYXRpb25zOiBlbXB0eVRyYW5zbGF0aW9ucygpLCBlcnJvcjogbnVsbCB9OworICAgICAgfQorICAgICAgdHJ5IHsKKyAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gT2JqZWN0LmZyb21FbnRyaWVzKAorICAgICAgICAgIFRSQU5TTEFUT1JfS0VZUy5tYXAoKGtleSkgPT4gWworICAgICAgICAgICAga2V5LAorICAgICAgICAgICAgR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKHF1ZXJ5LCAnZycsIGtleSkuZ2V0VHJhbnNsYXRlZCgpLAorICAgICAgICAgIF0pCisgICAgICAgICkgYXMgVHJhbnNsYXRpb25zOworICAgICAgICByZXR1cm4geyAuLi5zdGF0ZSwgdHJhbnNsYXRpb25zLCBlcnJvcjogbnVsbCB9OworICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikgeworICAgICAgICByZXR1cm4geworICAgICAgICAgIC4uLnN0YXRlLAorICAgICAgICAgIHRyYW5zbGF0aW9uczogZW1wdHlUcmFuc2xhdGlvbnMoKSwKKyAgICAgICAgICBlcnJvcjogZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpLAorICAgICAgICB9OworICAgICAgfQorICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gc3RhdGU7CisgIH0KK307CisKK2V4cG9ydCBkZWZhdWx0IHJlZHVjZXI7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvdHlwZXMudHMgYi9kb2NzL2dyZW1sYXRvci9zcmMvc3RvcmUvdHlwZXMudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlYWMyZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3JlbWxhdG9yL3NyYy9zdG9yZS90eXBlcy50cwpAQCAtMCwwICsxLDU3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworZXhwb3J0IHR5cGUgVHJhbnNsYXRvcktleSA9CisgIHwgJ0NBTk9OSUNBTCcKKyAgfCAnSkFWQVNDUklQVCcKKyAgfCAnUFlUSE9OJworICB8ICdHTycKKyAgfCAnRE9UTkVUJworICB8ICdKQVZBJworICB8ICdHUk9PVlknCisgIHwgJ0FOT05ZTUlaRUQnOworCitleHBvcnQgY29uc3QgVFJBTlNMQVRPUl9LRVlTOiBUcmFuc2xhdG9yS2V5W10gPSBbCisgICdDQU5PTklDQUwnLAorICAnSkFWQVNDUklQVCcsCisgICdQWVRIT04nLAorICAnR08nLAorICAnRE9UTkVUJywKKyAgJ0pBVkEnLAorICAnR1JPT1ZZJywKKyAgJ0FOT05ZTUlaRUQnLAorXTsKKworZXhwb3J0IGNvbnN0IFRSQU5TTEFUT1JfRElTUExBWV9OQU1FUzogUmVjb3JkPFRyYW5zbGF0b3JLZXksIHN0cmluZz4gPSB7CisgIENBTk9OSUNBTDogJ0Nhbm9uaWNhbCcsCisgIEpBVkFTQ1JJUFQ6ICdKYXZhU2NyaXB0JywKKyAgUFlUSE9OOiAnUHl0aG9uJywKKyAgR086ICdHbycsCisgIERPVE5FVDogJy5ORVQnLAorICBKQVZBOiAnSmF2YScsCisgIEdST09WWTogJ0dyb292eScsCisgIEFOT05ZTUlaRUQ6ICdBbm9ueW1pemVkJywKK307CisKK2V4cG9ydCB0eXBlIFRyYW5zbGF0aW9ucyA9IFJlY29yZDxUcmFuc2xhdG9yS2V5LCBzdHJpbmc+OworCitleHBvcnQgaW50ZXJmYWNlIFN0YXRlIHsKKyAgcXVlcnlJbnB1dDogc3RyaW5nOworICB0cmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9uczsKKyAgZXJyb3I6IHN0cmluZyB8IG51bGw7Cit9CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci9zcmMvdmlld3MvUXVlcnlUcmFuc2xhdG9yL2luZGV4LnRzeCBiL2RvY3MvZ3JlbWxhdG9yL3NyYy92aWV3cy9RdWVyeVRyYW5zbGF0b3IvaW5kZXgudHN4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YWI0MmUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci9zcmMvdmlld3MvUXVlcnlUcmFuc2xhdG9yL2luZGV4LnRzeApAQCAtMCwwICsxLDc2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworaW1wb3J0IFJlYWN0LCB7IHVzZVJlZHVjZXIsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnOworaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7CitpbXBvcnQgUXVlcnlJbnB1dCBmcm9tICcuLi8uLi9jb21wb25lbnRzL1F1ZXJ5SW5wdXQnOworaW1wb3J0IExhbmd1YWdlVGFicyBmcm9tICcuLi8uLi9jb21wb25lbnRzL0xhbmd1YWdlVGFicyc7CitpbXBvcnQgVHJhbnNsYXRpb25SZXN1bHQgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9UcmFuc2xhdGlvblJlc3VsdCc7CitpbXBvcnQgRXJyb3JBbGVydCBmcm9tICcuLi8uLi9jb21wb25lbnRzL0Vycm9yQWxlcnQnOworaW1wb3J0IHsgcmVkdWNlciwgaW5pdGlhbFN0YXRlLCBTRVRfUVVFUllfSU5QVVQsIFRSQU5TTEFURV9RVUVSWSB9IGZyb20gJy4uLy4uL3N0b3JlJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JLZXkgfSBmcm9tICcuLi8uLi9zdG9yZS90eXBlcyc7CisKK2NvbnN0IFdyYXBwZXIgPSBzdHlsZWQuZGl2YAorICBtYXgtd2lkdGg6IDkwMHB4OworICBtYXJnaW46IDAgYXV0bzsKKyAgcGFkZGluZzogMjRweCAyNHB4IDA7CisgIGRpc3BsYXk6IGZsZXg7CisgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CisgIGdhcDogMjRweDsKK2A7CisKK2NvbnN0IE91dHB1dFNlY3Rpb24gPSBzdHlsZWQuZGl2YAorICBkaXNwbGF5OiBmbGV4OworICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOworYDsKKworY29uc3QgUXVlcnlUcmFuc2xhdG9yID0gKCkgPT4geworICBjb25zdCBbc3RhdGUsIGRpc3BhdGNoXSA9IHVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbFN0YXRlKTsKKyAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IHVzZVN0YXRlPFRyYW5zbGF0b3JLZXk+KCdDQU5PTklDQUwnKTsKKworICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAodmFsdWU6IHN0cmluZykgPT4geworICAgIGRpc3BhdGNoKHsgdHlwZTogU0VUX1FVRVJZX0lOUFVULCBwYXlsb2FkOiB2YWx1ZSB9KTsKKyAgfTsKKworICBjb25zdCBoYW5kbGVUcmFuc2xhdGUgPSAoKSA9PiB7CisgICAgZGlzcGF0Y2goeyB0eXBlOiBUUkFOU0xBVEVfUVVFUlkgfSk7CisgIH07CisKKyAgY29uc3QgaGFuZGxlRGlzbWlzc0Vycm9yID0gKCkgPT4geworICAgIGRpc3BhdGNoKHsgdHlwZTogU0VUX1FVRVJZX0lOUFVULCBwYXlsb2FkOiBzdGF0ZS5xdWVyeUlucHV0IH0pOworICB9OworCisgIHJldHVybiAoCisgICAgPFdyYXBwZXI+CisgICAgICB7c3RhdGUuZXJyb3IgJiYgKAorICAgICAgICA8RXJyb3JBbGVydCBtZXNzYWdlPXtzdGF0ZS5lcnJvcn0gb25EaXNtaXNzPXtoYW5kbGVEaXNtaXNzRXJyb3J9IC8+CisgICAgICApfQorICAgICAgPFF1ZXJ5SW5wdXQKKyAgICAgICAgdmFsdWU9e3N0YXRlLnF1ZXJ5SW5wdXR9CisgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9CisgICAgICAgIG9uVHJhbnNsYXRlPXtoYW5kbGVUcmFuc2xhdGV9CisgICAgICAvPgorICAgICAgPE91dHB1dFNlY3Rpb24+CisgICAgICAgIDxMYW5ndWFnZVRhYnMgYWN0aXZlVGFiPXthY3RpdmVUYWJ9IG9uVGFiQ2hhbmdlPXtzZXRBY3RpdmVUYWJ9IC8+CisgICAgICAgIDxUcmFuc2xhdGlvblJlc3VsdCBhY3RpdmVUYWI9e2FjdGl2ZVRhYn0gdHJhbnNsYXRpb25zPXtzdGF0ZS50cmFuc2xhdGlvbnN9IC8+CisgICAgICA8L091dHB1dFNlY3Rpb24+CisgICAgPC9XcmFwcGVyPgorICApOworfTsKKworZXhwb3J0IGRlZmF1bHQgUXVlcnlUcmFuc2xhdG9yOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvdHNjb25maWcuanNvbiBiL2RvY3MvZ3JlbWxhdG9yL3RzY29uZmlnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNiOTc0YwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZ3JlbWxhdG9yL3RzY29uZmlnLmpzb24KQEAgLTAsMCArMSwzMSBAQAoreworICAiY29tcGlsZXJPcHRpb25zIjogeworICAgICJ0YXJnZXQiOiAiRVMyMDIwIiwKKyAgICAibGliIjogWworICAgICAgIkVTMjAyMCIsCisgICAgICAiZG9tIiwKKyAgICAgICJkb20uaXRlcmFibGUiCisgICAgXSwKKyAgICAiYWxsb3dKcyI6IHRydWUsCisgICAgInNraXBMaWJDaGVjayI6IHRydWUsCisgICAgImVzTW9kdWxlSW50ZXJvcCI6IHRydWUsCisgICAgImFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHMiOiB0cnVlLAorICAgICJzdHJpY3QiOiB0cnVlLAorICAgICJmb3JjZUNvbnNpc3RlbnRDYXNpbmdJbkZpbGVOYW1lcyI6IHRydWUsCisgICAgIm5vRmFsbHRocm91Z2hDYXNlc0luU3dpdGNoIjogdHJ1ZSwKKyAgICAibW9kdWxlIjogIkVTTmV4dCIsCisgICAgIm1vZHVsZVJlc29sdXRpb24iOiAiYnVuZGxlciIsCisgICAgInJlc29sdmVKc29uTW9kdWxlIjogdHJ1ZSwKKyAgICAiaXNvbGF0ZWRNb2R1bGVzIjogdHJ1ZSwKKyAgICAibm9FbWl0IjogdHJ1ZSwKKyAgICAianN4IjogInJlYWN0LWpzeCIsCisgICAgInVzZURlZmluZUZvckNsYXNzRmllbGRzIjogdHJ1ZSwKKyAgICAiYmFzZVVybCI6ICIuIiwKKyAgICAicGF0aHMiOiB7CisgICAgICAiZ3JlbWxpbi9sYW5ndWFnZSI6IFsiLi9ub2RlX21vZHVsZXMvZ3JlbWxpbi9saWIvbGFuZ3VhZ2UiXQorICAgIH0KKyAgfSwKKyAgImluY2x1ZGUiOiBbCisgICAgInNyYyIKKyAgXQorfQpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGF0b3IvdHNsaW50Lmpzb24gYi9kb2NzL2dyZW1sYXRvci90c2xpbnQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjdmMzY5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9ncmVtbGF0b3IvdHNsaW50Lmpzb24KQEAgLTAsMCArMSwzIEBACit7CisgICJleHRlbmRzIjogWyJ0c2xpbnQ6cmVjb21tZW5kZWQiLCAidHNsaW50LWNvbmZpZy1wcmV0dGllciJdCit9CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1sYXRvci92aXRlLmNvbmZpZy50cyBiL2RvY3MvZ3JlbWxhdG9yL3ZpdGUuY29uZmlnLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNDY4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1sYXRvci92aXRlLmNvbmZpZy50cwpAQCAtMCwwICsxLDQzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLy8gPHJlZmVyZW5jZSB0eXBlcz0idml0ZXN0IiAvPgoraW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSc7CitpbXBvcnQgcmVhY3QgZnJvbSAnQHZpdGVqcy9wbHVnaW4tcmVhY3QnOworCitleHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoeworICBwbHVnaW5zOiBbcmVhY3QoKV0sCisgIGJhc2U6ICcvZ3JlbWxhdG9yJywKKyAgZXNidWlsZDogeworICAgIGtlZXBOYW1lczogdHJ1ZSwKKyAgfSwKKyAgcmVzb2x2ZTogeworICAgIGRlZHVwZTogWydyZWFjdCcsICdyZWFjdC1kb20nXSwKKyAgICBleHRlbnNpb25zOiBbJy5tanMnLCAnLnRzJywgJy5qcycsICcubXRzJywgJy5qc3gnLCAnLnRzeCcsICcuanNvbiddLAorICB9LAorICBzZXJ2ZXI6IHsKKyAgICBmczogeworICAgICAgYWxsb3c6IFsnLi4nXSwKKyAgICB9LAorICB9LAorICB0ZXN0OiB7CisgICAgZW52aXJvbm1lbnQ6ICdqc2RvbScsCisgICAgZ2xvYmFsczogdHJ1ZSwKKyAgfSwKK30pOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGludC8uZ2l0aWdub3JlIGIvZG9jcy9ncmVtbGludC8uZ2l0aWdub3JlCmluZGV4IGI2NDNhMTQuLmZlZTk0YmEgMTAwNjQ0Ci0tLSBhL2RvY3MvZ3JlbWxpbnQvLmdpdGlnbm9yZQorKysgYi9kb2NzL2dyZW1saW50Ly5naXRpZ25vcmUKQEAgLTE2LDQgKzE2LDUgQEAKICMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKIG5vZGVfbW9kdWxlcwotYnVpbGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitidWlsZAorZGlzdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxpbnQvY29uZmlnLW92ZXJyaWRlcy5qcyBiL2RvY3MvZ3JlbWxpbnQvY29uZmlnLW92ZXJyaWRlcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWZjMmUzMS4uMDAwMDAwMAotLS0gYS9kb2NzL2dyZW1saW50L2NvbmZpZy1vdmVycmlkZXMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1jb25zdCB7IHJlbW92ZU1vZHVsZVNjb3BlUGx1Z2luLCBvdmVycmlkZSwgYmFiZWxJbmNsdWRlIH0gPSByZXF1aXJlKCdjdXN0b21pemUtY3JhJyk7Ci1jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpOwotCi1tb2R1bGUuZXhwb3J0cyA9IG92ZXJyaWRlKAotICByZW1vdmVNb2R1bGVTY29wZVBsdWdpbigpLAotICBiYWJlbEluY2x1ZGUoW3BhdGgucmVzb2x2ZSgnc3JjJyksIHBhdGgucmVzb2x2ZSgnLi9wYWNrYWdlLWxvY2suanNvbicpXSksCi0pOwpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGludC9pbmRleC5odG1sIGIvZG9jcy9ncmVtbGludC9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTI4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1saW50L2luZGV4Lmh0bWwKQEAgLTAsMCArMSwzNyBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz4KKyAgICA8bGluayByZWw9Imljb24iIGhyZWY9Ii9mYXZpY29uLmljbyIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIC8+CisgICAgPG1ldGEgbmFtZT0idGhlbWUtY29sb3IiIGNvbnRlbnQ9IiMwMDAwMDAiIC8+CisgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdyZW1saW50IC0gR3JlbWxpbiBxdWVyeSBmb3JtYXR0ZXIiIC8+CisgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBocmVmPSIvbG9nbzE5Mi5wbmciIC8+CisgICAgPGxpbmsgcmVsPSJtYW5pZmVzdCIgaHJlZj0iL21hbmlmZXN0Lmpzb24iIC8+CisgICAgPHRpdGxlPkdyZW1saW50PC90aXRsZT4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8bm9zY3JpcHQ+WW91IG5lZWQgdG8gZW5hYmxlIEphdmFTY3JpcHQgdG8gcnVuIHRoaXMgYXBwLjwvbm9zY3JpcHQ+CisgICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CisgICAgPHNjcmlwdCB0eXBlPSJtb2R1bGUiIHNyYz0iL3NyYy9pbmRleC50c3giPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1saW50L3BhY2thZ2UtbG9jay5qc29uIGIvZG9jcy9ncmVtbGludC9wYWNrYWdlLWxvY2suanNvbgppbmRleCBlMzcwZjk5Li5hY2NlMWRkIDEwMDY0NAotLS0gYS9kb2NzL2dyZW1saW50L3BhY2thZ2UtbG9jay5qc29uCisrKyBiL2RvY3MvZ3JlbWxpbnQvcGFja2FnZS1sb2NrLmpzb24KQEAgLTEsNyArMSw3IEBACiB7CiAgICJuYW1lIjogImdyZW1saW50LmNvbSIsCiAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgImxvY2tmaWxlVmVyc2lvbiI6IDIsCisgICJsb2NrZmlsZVZlcnNpb24iOiAzLAogICAicmVxdWlyZXMiOiB0cnVlLAogICAicGFja2FnZXMiOiB7CiAgICAgIiI6IHsKQEAgLTksMTY4ICs5LDEwNiBAQAogICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAogICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3VzdG9taXplLWNyYSI6ICJeMS4wLjAiLAotICAgICAgICAiZ3JlbWxpbnQiOiAiXjMuNy4wIiwKLSAgICAgICAgInJlYWN0IjogIl4xNy4wLjIiLAotICAgICAgICAicmVhY3QtYXBwLXJld2lyZWQiOiAiXjIuMi4xIiwKLSAgICAgICAgInJlYWN0LWRvbSI6ICJeMTcuMC4yIiwKLSAgICAgICAgInJlYWN0LXNjcmlwdHMiOiAiXjUuMC4xIiwKKyAgICAgICAgImdyZW1saW50IjogIl4zLjguMSIsCisgICAgICAgICJyZWFjdCI6ICJeMTguMy4xIiwKKyAgICAgICAgInJlYWN0LWRvbSI6ICJeMTguMy4xIiwKICAgICAgICAgInNoYXJwLXJvdXRlciI6ICJeNC4xLjUiLAotICAgICAgICAic3R5bGVkLWNvbXBvbmVudHMiOiAiXjYuMS4wIiwKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiXjQuNy4zIiwKLSAgICAgICAgIndlYi12aXRhbHMiOiAiXjMuNS4wIgorICAgICAgICAic3R5bGVkLWNvbXBvbmVudHMiOiAiXjYuMS4xNCIsCisgICAgICAgICJ3ZWItdml0YWxzIjogIl41LjAuMCIKICAgICAgIH0sCiAgICAgICAiZGV2RGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSI6ICJeNi4xLjAiLAotICAgICAgICAiQHRlc3RpbmctbGlicmFyeS9yZWFjdCI6ICJeMTIuMS41IiwKLSAgICAgICAgIkB0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCI6ICJeMTQuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9qZXN0IjogIl4yOS41LjQiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiXjIwLjguNyIsCi0gICAgICAgICJAdHlwZXMvcmVhY3QiOiAiXjE3LjAuMzgiLAotICAgICAgICAiQHR5cGVzL3JlYWN0LWRvbSI6ICJeMTcuMC4xMSIsCi0gICAgICAgICJAdHlwZXMvc3R5bGVkLWNvbXBvbmVudHMiOiAiXjUuMS4yNiIsCi0gICAgICAgICJnaC1wYWdlcyI6ICJeNi4wLjAiLAotICAgICAgICAicHJldHRpZXIiOiAiXjMuMC4xIiwKLSAgICAgICAgInRzbGludCI6ICJeNi4xLjMiLAotICAgICAgICAidHNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMS4xOC4wIgorICAgICAgICAiQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSI6ICJeNi42LjMiLAorICAgICAgICAiQHRlc3RpbmctbGlicmFyeS9yZWFjdCI6ICJeMTYuMy4yIiwKKyAgICAgICAgIkB0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCI6ICJeMTQuNi4xIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yNS42LjAiLAorICAgICAgICAiQHR5cGVzL3JlYWN0IjogIl4xOC4zLjE4IiwKKyAgICAgICAgIkB0eXBlcy9yZWFjdC1kb20iOiAiXjE4LjMuNSIsCisgICAgICAgICJAdml0ZWpzL3BsdWdpbi1yZWFjdCI6ICJeNC4zLjQiLAorICAgICAgICAiZ2gtcGFnZXMiOiAiXjYuMy4wIiwKKyAgICAgICAgImpzZG9tIjogIl4yNi4wLjAiLAorICAgICAgICAicHJldHRpZXIiOiAiXjMuNC4yIiwKKyAgICAgICAgInR5cGVzY3JpcHQiOiAiXjUuNy4zIiwKKyAgICAgICAgInZpdGUiOiAiXjYuMS4wIiwKKyAgICAgICAgInZpdGVzdCI6ICJeNC4xLjQiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIjE4IgorICAgICAgICAibm9kZSI6ICI+PTIyIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYWRvYmUvY3NzLXRvb2xzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BhZG9iZS9jc3MtdG9vbHMvLS9jc3MtdG9vbHMtNC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS82Mnlpa3o3TkxTY0NHQUFTVDVTSGRuamFESlFCRHEwTTJtdXlSVHBmMlZRaHc2U3RCZzJBTGl1NzN6U0pRNGZNVkxBKzB1QmhCSEFsZTdXZysya1NnPT0iLAorICAgICAgInZlcnNpb24iOiAiNC40LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BhZG9iZS9jc3MtdG9vbHMvLS9jc3MtdG9vbHMtNC40LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTEyV0dLQlF6alVBSTRheXlGNElBdGZ3MlFSL0lEb3FrNmpUZGRYRGh0WVRKRjlBU21vRTF6c3Q3Y1Z0UDBhTC9GMWpVSkw1citKeEtYS0VnSE5iRVVRPT0iLAogICAgICAgImRldiI6IHRydWUKICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGFsbG9jL3F1aWNrLWxydSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYWxsb2MvcXVpY2stbHJ1Ly0vcXVpY2stbHJ1LTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcmNBQkIrNGJVckZBQndibHVUSUJFclh3dmJzVS9WN1RaV2ZtYmdKZmJrd2lCdXppUzlneGRPRFV5dWllY2ZkR1E4NWpnbE1XNmp1UzMrejVUc0tMdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgIm5vZGVfbW9kdWxlcy9AYXNhbXV6YWtqcC9jc3MtY29sb3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGFzYW11emFranAvY3NzLWNvbG9yLy0vY3NzLWNvbG9yLTMuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LMUE2ejh0UzNYc21DTU04NnhvV2RuN0ZrZG45bTZSU1Z0b2NVckpZSXdabkZWa25nL1B2a0VvV3RPV21QK1NjYzZzYVlXSFdaWWJuZEVFWHhsMjRqdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAY3NzdG9vbHMvY3NzLWNhbGMiOiAiXjIuMS4zIiwKKyAgICAgICAgIkBjc3N0b29scy9jc3MtY29sb3ItcGFyc2VyIjogIl4zLjAuOSIsCisgICAgICAgICJAY3NzdG9vbHMvY3NzLXBhcnNlci1hbGdvcml0aG1zIjogIl4zLjAuNCIsCisgICAgICAgICJAY3NzdG9vbHMvY3NzLXRva2VuaXplciI6ICJeMy4wLjMiLAorICAgICAgICAibHJ1LWNhY2hlIjogIl4xMC40LjMiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BhbXBwcm9qZWN0L3JlbWFwcGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYW1wcHJvamVjdC9yZW1hcHBpbmcvLS9yZW1hcHBpbmctMi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxGTWpKVHJGTDNqN0w5eUJ4d1lmQ3EyazZxcXdIeXp1VWwvWEJuaWY3OFBXVEpZeUwvZGZvd1FIV0Uzc3A2VTZaenFXaWlJWm5wVE1POTZ6aGtqd3RnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuMCIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjAuMCIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL0Bhc2FtdXpha2pwL2Nzcy1jb2xvci9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtMTAuNC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KTkF6WmNYckN0NDJWR0x1WXowemZBekRmQXZKV1c2QWZZbERCUXlEVjVEQ2xJMm01c0FtSytPSU83czU5WGZzUnNXSHAwMmpBSnJSYWRQUkdUdDZTUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29kZS1mcmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuMTMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9jb2RlLWZyYW1lLy0vY29kZS1mcmFtZS03LjIyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ya3R1aFdsSjVnKzNUSlhjNXVwZDlLczFIdXRTQXJpazZqZjJlQWpZRnlJT2Y0ZWozUk4rMTg0Y1piekR2YlBudVRKSVVoUEtLSkUzY0lzWVRpQVQzdz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvZGUtZnJhbWUvLS9jb2RlLWZyYW1lLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOU5oQ2VZanE5KzN1eGdkdHAyMExTaUpYSnZOMEZlQ3ROR3BKeHVNRloxS3YzY1dVTmI2RE9oSndVdmNWQ3pLR1I2NmN3NG5qd002aHJKTHFnT3diY3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hpZ2hsaWdodCI6ICJeNy4yMi4xMyIsCi0gICAgICAgICJjaGFsayI6ICJeMi40LjIiCisgICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjI4LjUiLAorICAgICAgICAianMtdG9rZW5zIjogIl40LjAuMCIsCisgICAgICAgICJwaWNvY29sb3JzIjogIl4xLjEuMSIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2NvZGUtZnJhbWUvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMy4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLWNvbnZlcnQiOiAiXjEuOS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb2RlLWZyYW1lL25vZGVfbW9kdWxlcy9jaGFsayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTIuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29kZS1mcmFtZS9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0xLjkuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWZBVXRkK3ZGZEF0RlFjQzhDQ3lZdDFmWVd4U3FBaUsyY1NENnpEQjhOM2Nwc0VCQXZSeHA5ek9HZzZHL1NISEpZQVQ4OC9hei9JdURHQUxzTlZiR2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItbmFtZSI6ICIxLjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2NvZGUtZnJhbWUvbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcyZlNlbmhNdzJIWk1UVkhlQ0E5S0NtcEVJYnpXaVFzak4rQkhjQmJTOXZyMW10dCt2SmpQZGtzSUJOVW1LQVc4VEZVRFBKSzVTVVUzUWhFOU5FWER3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb2RlLWZyYW1lL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YlJvckI1RlVRV3ZsYTE2VThSL3FnYUZJeWEycUd6d0RyTm1DWnVZS3JiZFNVTUc2STFaQ0dRUmVma1JWaHVPa0lHVm5lN0JRMzVEU2ZvMXF2SnFGZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29kZS1mcmFtZS9ub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0tKZjErY2VRQnI0U01rdlFuQkRORHRmNFRYcFZoVkdhdGV1MHQ5MThibDMwRm5iRTJtNHZOTFgrVldlL2RwamxiK0h1Z0dZelc3dVFYSDk4SFBFWXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29kZS1mcmFtZS9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci01LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWpWandkWEl0NDA4TUlpQXFDWDRvVUtzZ1UyRXFBR3pzMlBwa200YVFZYmptK1pFV0VjVzRTZkZOVHI0dU1OWm1hMGV5NGY1bGdMcmtCMGFYMFFNb3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb21wYXQtZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvbXBhdC1kYXRhLy0vY29tcGF0LWRhdGEtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00SmMvWXVJYVlxS25ERHo4OTJrUElsZWR5a0tnMTJBdzFQWVg1aS9UWTI4YW5KdGFjdk0xUnJyOHdiaWVCOUdmRUp3bHpxVDBoVUVhbzBDeEVlYmlEQT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvbXBhdC1kYXRhLy0vY29tcGF0LWRhdGEtNy4yOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UMU5DSnFUL2o5K2NuOGZ2a3Q3anR3YkxCZkxDLzF5MWM3TnRDZVhGUmd6R1RzYWZpNjhNUnY4eXprWVNhcEJuRkE2TDNVMlZTYzAyY2lEem9BSmhKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvcmUvLS9jb3JlLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU0J1VEFqZzkxQTNlS092RCtiUEV6M0xsaEhaUk51MW5GT1Z0czlsekRKVFhzaEhUaklJMEJBdERTM1kyREFrZFpkREtXVlpHVndrRGZjNENseG4xZGc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9jb3JlLy0vY29yZS03LjI5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNHT2ZPSnFXamcycVcvTWI2ek5zRG0rdTV2RlE4RHhYZmJNMDl6NjlwNVo2K21FMWlrUDJqVVh3K2o0MlBmMVhUWUVEMlJuaTVmOTVucFlldXdNRFFBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBhbXBwcm9qZWN0L3JlbWFwcGluZyI6ICJeMi4yLjAiLAotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3JtcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS43LjAiLAorICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3JtcyI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC9oZWxwZXJzIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3JlbWFwcGluZyI6ICJeMi4zLjUiLAorICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCiAgICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAogICAgICAgICAiZ2Vuc3luYyI6ICJeMS4wLjAtYmV0YS4yIiwKLSAgICAgICAgImpzb241IjogIl4yLjIuMiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4wIgorICAgICAgICAianNvbjUiOiAiXjIuMi4zIiwKKyAgICAgICAgInNlbXZlciI6ICJeNi4zLjEiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni45LjAiCkBAIC0xODAsMjM4ICsxMTgsNzQgQEAKICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9iYWJlbCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2VzbGludC1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9lc2xpbnQtcGFyc2VyLy0vZXNsaW50LXBhcnNlci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUM2OVJXWU5ZdHJnSVJFNUNtVGQ3N1ppTERYcWdCaXBhaEpjL2pIUDNzTGNBR2o2QUp6eE5JdUtOcFZuSUNxYnlLN1gzcEZVZkV2TCsrcnZ0YlFwWmtRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBuaWNvbG8tcmliYXVkby9lc2xpbnQtc2NvcGUtNS1pbnRlcm5hbHMiOiAiNS4xLjEtdjEiLAotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMi4xLjAiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgPj0xNC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICI+PTcuMTEuMCIsCi0gICAgICAgICJlc2xpbnQiOiAiXjcuNS4wIHx8IF44LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2VzbGludC1wYXJzZXIvbm9kZV9tb2R1bGVzL2VzbGludC12aXNpdG9yLWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXZpc2l0b3Ita2V5cy8tL2VzbGludC12aXNpdG9yLWtleXMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTByU21SQnpYZ0R6SXNENm1HZEpnZXZ6Z2V6STUzNENlcjVML3Z5TVgwa0h6VC9qaUI0M2pSaGQ5WVVsTUdZTFF5Mnpwck5tb1Q4cWFzQ0d0WStRYUt3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9nZW5lcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9nZW5lcmF0b3IvLS9nZW5lcmF0b3ItNy4yMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sTjg1UVJSKzVJYllyTVdNNlk0cEUvbm9hUXRnNHBOaXFlTkdYNjBlcU9mbzZndEVqNnV3L0phZ2VsQjh2Vnp0U2Q3UjZNNW4xK1BRa0RiSGJCUlU0Zz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2dlbmVyYXRvci8tL2dlbmVyYXRvci03LjI5LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFzYUYrOVFjbTJRdjhTUklNTXNjQXZHNE8zbEowRjFHdU1vNUhSL0JwMDJMb3BOZ25aQkMvRWtiZXZIRmVHczRscy9vUHo5ditCc216YmtiZSswZFV3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMy4wIiwKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuMiIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTciLAotICAgICAgICAianNlc2MiOiAiXjIuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZS8tL2hlbHBlci1hbm5vdGF0ZS1hcy1wdXJlLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTHZCVHh1OGJRU1FrY3lLT1UrYTFidG5ORlExZE1BZDBSNlB5VzNhclhlczA2RjZRTFdMSXJkNjgxYnhSUElYbHJNR1IzWFluVzlKeU1MN2RQM3FneGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItYnVpbGRlci1iaW5hcnktYXNzaWdubWVudC1vcGVyYXRvci12aXNpdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWJ1aWxkZXItYmluYXJ5LWFzc2lnbm1lbnQtb3BlcmF0b3ItdmlzaXRvci8tL2hlbHBlci1idWlsZGVyLWJpbmFyeS1hc3NpZ25tZW50LW9wZXJhdG9yLXZpc2l0b3ItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tMUVQM2xWT1BwdFIrMkR3RDEyNWd6aVpOY21vTlNIR21KUk9Lb3k4N2xvV1VReUphVlhEZ3BtcnVXcURBUlpTbXRZUStEbDI1b2tVOCtxaFZ6dXlrdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKKyAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjkuMCIsCisgICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjEyIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4yOCIsCisgICAgICAgICJqc2VzYyI6ICJeMy4wLjIiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni45LjAiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLy0vaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KaSt5d3BIZXVxeEI4V0R4cmFDaXFSMHhmaFlqaURFL2U2azdGdUlhQU5ub09GeEFIc2tIQ2h6NHZBMW1KQzlMYm0wMXMxUFZBR2hRWTRGVUtTa0dadz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLy0vaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KWXRsczNocWkxNWZjeDVHYVNOTDdTQ1RKMk1ObWpya0hYZzRGU3BPQS9ncnhLOEt3eVo1YnViSHNDcThGWENrdWE2eGh1YWFCaXQrM2I3K1ZaUmZjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuMyIsCisgICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjcuMSIsCisgICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjQuMCIsCiAgICAgICAgICJscnUtY2FjaGUiOiAiXjUuMS4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jcmVhdGUtY2xhc3MtZmVhdHVyZXMtcGx1Z2luLy0vaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14a2I1OE15T1lJc2x4dTNnS21WWG1qVHRVUHZCVTRvZFl6YmlJUWJXd0xLSUhDc3g2VUdaR1g2RjFJem5NRlZuRGRpcnNlVVpvcHpOK1pSdDhYYjMzUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1lbWJlci1leHByZXNzaW9uLXRvLWZ1bmN0aW9ucyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luLy0vaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVZwRUZPSWJNUmFYeURlVXdVZm1USXhFeEx3USt6a1crQmg1elhwQXBBM29RZWRCeDl2L3VwZGl4V3hueC9iWnBLdzd1OFZ4V2piL3FXcEljbVBxOEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1hbm5vdGF0ZS1hcy1wdXJlIjogIl43LjIyLjUiLAotICAgICAgICAicmVnZXhwdS1jb3JlIjogIl41LjMuMSIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLWRlZmluZS1wb2x5ZmlsbC1wcm92aWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWRlZmluZS1wb2x5ZmlsbC1wcm92aWRlci8tL2hlbHBlci1kZWZpbmUtcG9seWZpbGwtcHJvdmlkZXItMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJuYW5MeDVFVGU2YXliUmkxY08vZWRhUkgrYk5ZV2FyeUNFbWpERFl5TnI0d25TenlPcDhUMGRXaXBtcVZIS0VZM0FiVktVb201MEFLU2xqMXptS2JnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4xNy43IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE2LjciLAotICAgICAgICAiZGVidWciOiAiXjQuMS4xIiwKLSAgICAgICAgImxvZGFzaC5kZWJvdW5jZSI6ICJeNC4wLjgiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xNC4yIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4xLjIiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy40LjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi4yMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yLy0vaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3ItNy4yMi4yMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemZlZFNJekZoYXQvZ0ZoV2ZIdGdXdmxlYzBucUI5WUVJVnJwdXdqcnVMbFhmVVNuQThjSkIwbWlIS3dxRG5RN2QzMmFLbzJ4dDg4L3hacHR3eGJmaEE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1mdW5jdGlvbi1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUvLS9oZWxwZXItZnVuY3Rpb24tbmFtZS03LjIzLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9FckVxc3J4alpUSmNpWjRPbytlb1pxZVc5VUlpT2N1WUtSSkE0WkFnVjlteUErcE9YaGhtcGZOQ0tqRUgvYXVWZkVZVkZKNnkxVGM0cjBlSUFwcWl3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yMi4xNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjMuMCIKKyAgICAgICAgInNlbXZlciI6ICJeNi4zLjEiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni45LjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItaG9pc3QtdmFyaWFibGVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWhvaXN0LXZhcmlhYmxlcy8tL2hlbHBlci1ob2lzdC12YXJpYWJsZXMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13R2prOVFaVnp2a25BNnlLSVVVUmI4elkzZ3JYQ2NPWnQrLzdXY3k4TzJ1Y3R4aHBsbVVQa09kbGdvTmhtZFZlZTJjOTJKWGJmMXhwTXRWTmJmb3hSdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1tZW1iZXItZXhwcmVzc2lvbi10by1mdW5jdGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zLy0vaGVscGVyLW1lbWJlci1leHByZXNzaW9uLXRvLWZ1bmN0aW9ucy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFCaUgxTktNRzBIMmNHWnFzcE52c2FCZTZ3TkdqYkpqdUx5MjlhVStlRFpqU2JiTjUzQmF4bHBCMDJ4bTl2MzRwTFRaMW5JUVBGWW4ycU1ab2E1QlFRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItZ2xvYmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1nbG9iYWxzLy0vaGVscGVyLWdsb2JhbHMtNy4yOC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rVzZjSVNrWEZhMWpYc0RFZFlBOEhlZXZRVC9GVUxoeHpSOTlweHBobHRaY1ZhdWdwczUzVEhDZWlXQThTZ3V4eHBTcDNnS1BpdVlmU1dvcGtMUTRodz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzLy0vaGVscGVyLW1vZHVsZS1pbXBvcnRzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOERsNitIRC9jS2lmdXRGNXFHZC84WkppODRRZUFLaCtDRWUxc0J6ejhVYXlCQkdnMWRBSUpyZEhPY09NNWIyTXB6V0wyeXVvdEpUdEdqRVRxMHFqWGc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjI4LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMvLS9oZWxwZXItbW9kdWxlLWltcG9ydHMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sNVhrWks3cjd3YTlMdWNHdzlMd1p5eUNVc2NiNHgzN0pXVFB6N3N3d0ZFLzBGTVFBR3BpV1Vabjh1OUR6a1NCV0VjSzI1am12dWJmcHcyZG5BTWRidz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKKyAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOC42IgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zLy0vaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2hHS0R0L1plOEdGRXhpVkhuby8yZHZHNUlkc3RwekNxMHk0UWM5T0oyNUQ0cTNwS2ZpSVAvNFZwMy9KdmhEa0xLc0RLMmFwaTNxM2ZwSWdpSUY1Ync9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjI4LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMvLS9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02N29YRkFZcjJjRExEVkdMWFRFQUJqZEJKWjZkckVsVVNJN1dLcDcwTnJweUlTc28zcGxHOVNBR0VGNnk3emJoYS93T3pVQnlXV1RKdkVEVk5JVUdjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zaW1wbGUtYWNjZXNzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbi8tL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IQndhb2pOMHhGUng0eUl2cHdHcXhpVjJ0VWZsNzQwMWpsb2s1NjROZ0I5RUhTMXk2UVQxN0ZtS1dtNHp0cWplVmRYTHVDNGZTdkhjNWVQcFFqb1Ridz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzLy0vaGVscGVyLXBsdWdpbi11dGlscy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVMbHMwNlVWS2dGRzlRRDRPZUZZTEVHdGVNSUFhNWtwVFBjRkwyOHl1Q0lJenNmNlp5S1pNbGxLVk9DWkZoaVo1cHRud1g0bXRLZFdDQkUvdVQ0YW1nPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXJlbWFwLWFzeW5jLXRvLWdlbmVyYXRvci8tL2hlbHBlci1yZW1hcC1hc3luYy10by1nZW5lcmF0b3ItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jVTBTcTFSZjRaNTVmZ3o3aGFPYWtJeU03K3gvdUNGd1hwTFBhZVJ6Zm9VdEFFQXVVWmpadkZQakwvcms1clc2OTNkSWduMmhuZzFXN3hiVDdsV1Q0Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXdyYXAtZnVuY3Rpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjI4LjUiLAorICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjI4LjYiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni45LjAiCkBAIC00MjAsMTg3ICsxOTQsNjkgQEAKICAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycy8tL2hlbHBlci1yZXBsYWNlLXN1cGVycy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFMZE5NNUkza2RJL1Y5eEdOeUtTRjNYL2dUeU1VQm9oVForLzNRZFFLQUE5dnhJaXkxMkUrOEUySG9PUDEvRGplcVUrZzZhczM1UUhKTk1ERFlwdUNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZW52aXJvbm1lbnQtdmlzaXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1zaW1wbGUtYWNjZXNzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MvLS9oZWxwZXItc2ltcGxlLWFjY2Vzcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW4wSDk5RS9LK0Jpa2EzKytXTkwxN1BPdm80cktXWjdsWkVwMVErZlN0VmJVaThueFBRRUJPbFRtQ094Vy8wSnNTNTZTS0tRK29qQWUycEhLSkhOMzV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXNraXAtdHJhbnNwYXJlbnQtZXhwcmVzc2lvbi13cmFwcGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1za2lwLXRyYW5zcGFyZW50LWV4cHJlc3Npb24td3JhcHBlcnMvLS9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEsxNHI2NkpaS2lDNDNwOEtpMzN5TEJWSktsUURGb0E4R1lONjdsV0NEQ3FvTDZFTU1TdU05YitJZmYyakhhTS9SUkZZbDdLK2lpcnU3aGJScU54OFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXNwbGl0LWV4cG9ydC1kZWNsYXJhdGlvbi8tL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24tNy4yMi42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Bc1VueHVMaFJZc2lzRmlhSnd2cDFRRitJM0tqRDVGT3h1dDE0cS9Hem92VWU2b3JITGVzVzJDN2Q3NTRrUm01M2g1Z3FyejZzRmw2c3hjNEJWdEUvZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMvLS9oZWxwZXItcGx1Z2luLXV0aWxzLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzlnelovYno4M0dSeXNJN2dBRDR3UFQvQUkzdUNuWSs5eG4rTXgvS1BzMkp3SEpJejFXOFBaa2cyY3F5dDNSTk9CTThlamNYaFY2eThPZzdseS9EdWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIvLS9oZWxwZXItc3RyaW5nLXBhcnNlci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1NNENPamdab3g4VStKY1hRd1BpaklaTEVsa2dFcE81cnNFUlZESlRjMnFmQ0RmRVJ5b2I2azVXZWdTMTRTWDE4SUlqditYRCtHcnFOdW1ZNUpSQ0R3PT0iLAorICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIvLS9oZWxwZXItc3RyaW5nLXBhcnNlci03LjI3LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFNbFN4S2JwUmxBcmlkREV4azkyblNvYnlEZHBQaWpVcTJEVzZvRG5VcWQwaU9HeG1RanlxaE1JaWhJOSt6djRMUHlaZFJqZTJjYXZXUGJDYldtM2VBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni45LjAiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjIwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyLy0vaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyLTcuMjIuMjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVk0T1oreXRsYXRSOEFJKzhLWmZLdUw1dXJLcDdxZXkwOGhhMzFMOGIzQndld0pBb0phbVR6eXZ4UFIvNUQrS2tkSkNHUHEvKzhUdWtIQmxZMTBGWDlBPT0iLAorICAgICAgInZlcnNpb24iOiAiNy4yOC41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyLy0vaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyLTcuMjguNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVNzNGlmd3pLSlNWMzl1Y05qc3ZjNldWSHM2YjdTMDNzT2gyT2NIRjlVSGZWUHFXV0FMVXNOVVZ6aFNCaUl0alJab0xIeDduSWFyVmpxS1Z1c1VaMVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24vLS9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVIzb0I2eGxJVktVbnhOVXhibWdxN3BLanhwcnUyNHpsaW1wRThXSzQ3ZkFDSWxNMElJL0htMVJTOElhT0k3TmdDcjZMTlMramw1bDc1bTIwbnBBeml3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItd3JhcC1mdW5jdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci13cmFwLWZ1bmN0aW9uLy0vaGVscGVyLXdyYXAtZnVuY3Rpb24tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iWXFMSUJTRXNoWWNZUXlma3M4ZXdZQThTMzB5YUdTZVJzbGN2S012b1VrNkhIUHlTYnhIcTlZUmk2Z2hoekVVK3loUXY5YlAvalhueWdrU3RPY3Fadz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCisgICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi8tL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uLTcuMjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXZqSm93OUZ4YmhGRktEU3VGblZDZTJXeFhrMXpXYzIyZkZlUFZORWFXSkV1OElyWlZsZGE2TjB1SHd6WnJVTTFpbDdOQzlNbHA0TWFKWWJZZDlKU2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXJzLy0vaGVscGVycy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBTWFJtZkUxdnpjVUlERlFjU0dBNU1yK0d4QlY5b2lSS0R1RHhYdldRUUJDaDhIb0lqcy8yRGxEQjdIOHNtYWMxSVZyQjkveGRYajJOM1dvbDlDcitRPT0iLAorICAgICAgInZlcnNpb24iOiAiNy4yOS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVycy8tL2hlbHBlcnMtNy4yOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ib0d1VXM0c0NaTmV6VkVLZFZjd3FtWk44R29IaXJMVWNMYVlWTkJLMkowRGFkR3RkY3FncjNCQ2J2SDgrWFVvNE5Hak5sM1ZPdFNqRUtOenFmRmdLdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKKyAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi4yMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hpZ2hsaWdodC8tL2hpZ2hsaWdodC03LjIyLjIwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ka2RNQ04zcHkwK2tzQ2dZbUdHOGpLZUdBLzhUaytnSndTWVlsRkd4RzVsbWhmS05vQXkwMDRZcEx4cFMxVzJKOG0vRUsyRXcreU9zOXBWUndPODltZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjIyLjIwIiwKLSAgICAgICAgImNoYWxrIjogIl4yLjQuMiIsCi0gICAgICAgICJqcy10b2tlbnMiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTMuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WVDBaSTZrWlJkVGg4WXlKdzNTTWJZbS91K05xZnNBeEVwV08wUGY5c3E4L2U5NFd4eE9wUEt4OUZSMUZseUN0T1ZETk9RKzhudGxxRnhpUmMrcjVxQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4xLjkuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9jaGFsayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTIuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMS45LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTEuOS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb2xvci1uYW1lIjogIjEuMS4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9jb2xvci1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLW5hbWUvLS9jb2xvci1uYW1lLTEuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03MmZTZW5oTXcySFpNVFZIZUNBOUtDbXBFSWJ6V2lRc2pOK0JIY0JiUzl2cjFtdHQrdkpqUGRrc0lCTlVtS0FXOFRGVURQSks1U1VVM1FoRTlORVhEdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YlJvckI1RlVRV3ZsYTE2VThSL3FnYUZJeWEycUd6d0RyTm1DWnVZS3JiZFNVTUc2STFaQ0dRUmVma1JWaHVPa0lHVm5lN0JRMzVEU2ZvMXF2SnFGZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9oYXMtZmxhZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxhZy8tL2hhcy1mbGFnLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zS0pmMStjZVFCcjRTTWt2UW5CRE5EdGY0VFhwVmhWR2F0ZXUwdDkxOGJsMzBGbmJFMm00dk5MWCtWV2UvZHBqbGIrSHVnR1l6Vzd1UVhIOThIUEVZdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oaWdobGlnaHQvbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiNS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFqVmp3ZFhJdDQwOE1JaUFxQ1g0b1VLc2dVMkVxQUd6czJQcGttNGFRWWJqbStaRVdFY1c0U2ZGTlRyNHVNTlptYTBleTRmNWxnTHJrQjBhWDBRTW93PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGFyc2VyLy0vcGFyc2VyLTcuMjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnZQS0tkTWVtVTg1VjlXRS9sNXdaRW1JbXBDdExxYm5UdnFEUzJVMWZKOTZLcnhvVzdLclhoTnNOQ2JsUWxnOENrNGI4NXl4ZFR5ZWxzTVVnRlVYaXc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjI5LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wYXJzZXIvLS9wYXJzZXItNy4yOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00R2dSenkvK2ZzQmE3Mi9SWlZKbUdLUG1adTlCeW44bzRNb0xwbU5lMW04WmZZbno1ZW1ITFF6M1U0Z0x1ZDZad2wwUlpJY2dpTEQ3VXE3eVNGdURMQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjkuMCIKKyAgICAgIH0sCiAgICAgICAiYmluIjogewogICAgICAgICAicGFyc2VyIjogImJpbi9iYWJlbC1wYXJzZXIuanMiCiAgICAgICB9LApAQCAtNjA4LDQzICsyNjQsMTQgQEAKICAgICAgICAgIm5vZGUiOiAiPj02LjAuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi1idWdmaXgtc2FmYXJpLWlkLWRlc3RydWN0dXJpbmctY29sbGlzaW9uLWluLWZ1bmN0aW9uLWV4cHJlc3Npb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tYnVnZml4LXNhZmFyaS1pZC1kZXN0cnVjdHVyaW5nLWNvbGxpc2lvbi1pbi1mdW5jdGlvbi1leHByZXNzaW9uLy0vcGx1Z2luLWJ1Z2ZpeC1zYWZhcmktaWQtZGVzdHJ1Y3R1cmluZy1jb2xsaXNpb24taW4tZnVuY3Rpb24tZXhwcmVzc2lvbi03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5QMU01UmYrdTJHdzlxZlNPNGloamNUR1c1elhUaTM2SVRMZDQvRW9BY0VoSVoweWpNcW1mdERObDNRQzE5Q1g3b2xocmpweVU0NTRnLzJXN1gwanZRPT0iLAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LXNlbGYiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeC1zZWxmLy0vcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc2VsZi03LjI3LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZVemtDcytlakdkWjVtRkZDL09DVXJ2MDI4YWIyZnAxem5abUNaakFPQktpQksyalhEMU8rQlBTZlg4WDJxako3NWZaQk1TblFuM1JxMm1yQkpLMm13PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tYnVnZml4LXY4LXNwcmVhZC1wYXJhbWV0ZXJzLWluLW9wdGlvbmFsLWNoYWluaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLWJ1Z2ZpeC12OC1zcHJlYWQtcGFyYW1ldGVycy1pbi1vcHRpb25hbC1jaGFpbmluZy8tL3BsdWdpbi1idWdmaXgtdjgtc3ByZWFkLXBhcmFtZXRlcnMtaW4tb3B0aW9uYWwtY2hhaW5pbmctNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zMUJiNjVhWmFVd3FDYldNblpQZHVJWnhDQm5nSEZsenlONkRxNktBSmp0eCtseDZvaEtIdWJjNjFPb21ZaTdYd1ZENE9sMFhDVno0aCtwWUZSMDQ4Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb3B0aW9uYWwtY2hhaW5pbmciOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjEzLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtY2xhc3MtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTguNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1jbGFzcy1wcm9wZXJ0aWVzLy0vcGx1Z2luLXByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXMtNy4xOC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jdW1mWE9GMCtuelpyck44UmYwdDdNK3RGNnNaYzd2aFF3WVFjazlxMS81dzJPRXhsRCtiNHY0UnBNSkZhVjFaN1djRFJnTzZGcXZ4cXhHbHdvK1JIUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xOC42IgorICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjcuMSIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKQEAgLTY1MywxMzgyICsyODAsMTQgQEAKICAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWRlY29yYXRvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtZGVjb3JhdG9ycy8tL3BsdWdpbi1wcm9wb3NhbC1kZWNvcmF0b3JzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDhobGV6UTRkbDZpeG9kZ1hrSDhsVWZjRDd4K1dBdUlxUFVqd0dvSXR5bnJYT0F2NGE0VGNpMXpBL3FqelFqamNsMHYzUXBMZGMyTE02WkFDUXVZN0E9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlIjogeworICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlLy0vcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlLTcuMjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItemJ3b1RzQnJ1VGVLQjloU3E3M2hhNjZpRmVKSHVhRmtVYnd2cUVsbnlnb05iai9qSFJzU2Vva293WkZOM0NaNjRJdkVxY21ta1ZlODlPUFhjN2xkQXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtY2xhc3MtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXJlcGxhY2Utc3VwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE4LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLy0vcGx1Z2luLXByb3Bvc2FsLW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvci03LjE4LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdReFF6eFllSnFIY2ZwcHpCRG5tMXlBWTBqU1JrVVhSMno4UmVQWllyS3dNS2dNbEU4K1o2TFVubytiZDZMdmJHaDhHbHR2eTc0KzlwSVlrcitYa0tBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE4LjYiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4xOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yLy0vcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yLTcuMTguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb3psWkZvZ1Bxb0xtOFdCcjVaOFVja0lvRTRZUTVLRVNWY051ZHlYT1I4dXFJa2xpVEVnSjNSb2tldGZHNnBtekxkZVpGMEgvd2pFOS9jQ0VpdEJsN1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6ICJeNy4xMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtb3B0aW9uYWwtY2hhaW5pbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIxLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtb3B0aW9uYWwtY2hhaW5pbmcvLS9wbHVnaW4tcHJvcG9zYWwtb3B0aW9uYWwtY2hhaW5pbmctNy4yMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wNHplZWZNNzJncG1FZTJma1VyL09uT1hwV0VmOG5BZ2s3WllWcXFmRml5SUc3b0ZmVlpjQ3JVNjRoV241eHA0dFE5TGtWNGJUSWE1ckQwS0FOcEtOQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMC4yIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzIjogIl43LjIwLjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmciOiAiXjcuOC4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtcHJpdmF0ZS1tZXRob2RzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXByaXZhdGUtbWV0aG9kcy8tL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLW1ldGhvZHMtNy4xOC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1udXRzdmt0REl0c05uNHJwR0l0U05WMnN6MVh3UytuZlUwUmc4YUN4M1czTk9LVnpkTWpKUnUwTzVPa2dEcDNaR0lDU1RiZ1JweFpvV3N4b0tSdmJlQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xOC42IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIxLjAtcGxhY2Vob2xkZXItZm9yLXByZXNldC1lbnYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdC8tL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdC03LjIxLjAtcGxhY2Vob2xkZXItZm9yLXByZXNldC1lbnYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU09Ta2ZKRGRkYU03bWFrNmNQRXBzd3lUUm51Umx0bDQyOWhNcmFRRWdsVytPa292bkN6c2lzelRtc3JsWS8vcUxGakNwUURGUnZqZG0yd0E1cFBtOXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXVuaWNvZGUtcHJvcGVydHktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE4LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtdW5pY29kZS1wcm9wZXJ0eS1yZWdleC8tL3BsdWdpbi1wcm9wb3NhbC11bmljb2RlLXByb3BlcnR5LXJlZ2V4LTcuMTguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMkJTaEcvZDV5b1p5WFpmVmVQSDkxdXJMNXdURzZBU1pVOU00bzAzbEtLOHU4VVcxeTA4T010dEJTT0FEVGNKcm5QTXB2RFhSRzNHOGZ5TGg0b3ZzOHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtcmVnZXhwLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4xOC42IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE4LjYiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMvLS9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMtNy44LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXR5Y21aeGtHZlpheGhNUmJYbFBYdVZGcGRXbFhwaXIyVzRBTWhTSmdSS3prL2VEbElYT2hiMkxIV29McERGN1RFSHlsVjV6Tmh5a1g2S0FnSEptVE53PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1iaWdpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50Ly0vcGx1Z2luLXN5bnRheC1iaWdpbnQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXduVG5GbEcrWXhRbTN2RHhwR0U1N1BqMHNyUlU0c0hFL21Ea3QxcXYyWUpKU2VVQWVjMm1hNFdMVW5VUGVLanlyZm50VndlL042ZENYcFUrekwzTnBnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUzcmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhUUVpZQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xMi4xMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1zdGF0aWMtYmxvY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jay8tL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3RhdGljLWJsb2NrLTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYitZeVBtcjZsZHlObk02c3FZZU1XRStiZ0pjSnBPNnlTNFFEN3lteGdIMzRHQlBORE0vVEhCaDhpdW55dktJWnp0aXdMSDRDSlowUnhUazllbWdwanc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1kZWNvcmF0b3JzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXZwVU9CUzdJVTZhbDhNbUYxWHBBeWo5UVllTFB1U0RKSTVENHBWTVNNZEw3eFFva0txSlBZUUM2N1JDVDBhQ1Rhc2hVWFBpR3dNSjBERVhYQ0VtTUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydC8tL3BsdWdpbi1zeW50YXgtZHluYW1pYy1pbXBvcnQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVnZEdiRm9uK1Bzell6cXM4M1MzRTVtcGk3L3kvOE05ZUM5ME1SVFpmZHVRT1lXNzZpZzZTT1NQTmU0MUlHNUxvUDNGR0JuMk4wUmpWRFNRaVM5NGtRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1leHBvcnQtbmFtZXNwYWNlLWZyb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtZXhwb3J0LW5hbWVzcGFjZS1mcm9tLy0vcGx1Z2luLXN5bnRheC1leHBvcnQtbmFtZXNwYWNlLWZyb20tNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1YZjVsYVhvNmMxSWJFYmVnRG16R1B3R05Uc0habUV5NlFHem51NVNoMlVDV3Z1ZXl3YjJlZStDQ0U0elFpWnN0eFU5Qk1vUU85aTZ6VUZTWTBLajBRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1mbG93IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1mbG93Ly0vcGx1Z2luLXN5bnRheC1mbG93LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOVJkQ2wwaStxMFFFeGF5azJuT1M3ODUzdzA4eUx1Y25uUE1MNkVOOVM4ZmdNUFZ0ZExEQ2R4L2NPUS9pNDRMYjlVZVFYOUEzNXlhcUJCT01NWnhQeFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXNzZXJ0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWFzc2VydGlvbnMvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1hc3NlcnRpb25zLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcmRWOTdON0txc1J6ZU5Hb1dVT0s2eVVzV2FyTGpFNVN1L1NuazlJWVBVOUN3a1dIczR0K3JUR092ZmZUUjhYR2tKTVRBZExmTzB4Vm5YbTh3dWdJSmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXR0cmlidXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWF0dHJpYnV0ZXMvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1hdHRyaWJ1dGVzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3d2b1dEZU5LUEVUbW96eUZFMFAyck9McWgzOUVvUUhOanFpenJJNUI4VnQwWk5TN001NnM3ZEFpQXFiWWZpQVlPdUl6SWg5NnozaVIya3RndTN0RWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXFmbStYRHgwK1ByaDNWU2VFUUNQVTgxeUMrSldaMnBEUEZTUzRaZHBmWmhwNE1rRk1hREMxVXFzZW92RUt3U1VwbklMNyt2SytDbHA3YmZoMGlEN2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzLy0vcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxZNmtkR3BXSHZqb2Uydms0V3JBYXBFdUJSNjlFTXhabCtSb0dSaHJGR05ZVks4bU9QQVc4VmZiVC9aZ3JGYlhsRE5paWF4UW5BdGdWQ1o2anYzMEVBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWpzeC8tL3BsdWdpbi1zeW50YXgtanN4LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3Z5UDRoWnJncnMvd1dNYW9jdnhaNDRIdzBiM1c4UGUrY014YzhWMVVMUTA3b2g4Vk5iSVJhb0QxTFJaVlR2RCswbmllREtqZmdLZzg5c0Q3cnJLcmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZDh3YVNobHBGRGluUTVNdHZHVTl4REFPektINDcrRkZvbmV5MmJhRklvTXI5NTJoS09McDFIUjdWc3pvWnZPc1YvNCtSUnN6Tlk3RDE3YmEwdGUwaWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLy0vcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3ItNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFTZmY0elBJSTF1MlFEN3krRjhvRHN6MTlldzRJR0VKZzlTVlcrYnF3cHd0ZkZsZWlRRE1kekEvUitVbFdEemZuSEZDeHhsZUZUMFBNSXJSMzZYTE5RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IvLS9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOUg2WWRma2NLL3VPblkvSzcvYUEyeHB6YUFna1FuMzd5eldVTVJLN09hUE9xT3BHUzErbjBINWh4VDlBVXc5RXNTalBXOFNWeU1Kd1lSdFdzM1gzdWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkLy0vcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhvcU1pakdaYjl5M3kyWHNrTitQMXdVR2lWd1daNUptb0RSd3g1KzNHbUVwbE55Vk0yczJEZzhJTEZRbThyV000OG9yR3k1WXBJNUJsOFUxeTd5ZGxBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmcvLS9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmctNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZWUEQwUGMxbHBUcXcwYUtvZVJUTWlCK2tXaEFvVDI0UEEra3NXU0JyRnRsNVNJUlZwWmx3TjNOTlBRamVoQTJFLzkxRlYzUmpMV29WVGdsV2NTVjNRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZy8tL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmctNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtvSzlFckgxTUJsQ1B4VjBWQU5rWFcyL2R3NHZsYkdEckZnejhibVVzQkdZa0ZSY2JSd01oNmNJSnViZFBya3hSd3VHZHRDazB2L3dQVEtiUWdCamtnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QvLS9wbHVnaW4tc3ludGF4LXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0LTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHdWbnA5ZHhKNzJaVUpEVjI3WmZiU2o2aUhMb3l0WVptaDNyRmN4Tm52c0pGM2t0a3pMRFpQeS9tQTE3SEdzYVFUMy9EUXNXWVgxZjFRR1drQ29WVWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdC8tL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3YWl0LTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHgrK3VwTHY1VTFyZ1lmd2UxeEJRVWhSbVU0MU5FdnBVdnJwOGprclNDZHZHU25NNS9xZFJNdHlsSjZQRzVPRmtCYUhrYlRBS1RuZDMvWXlFU1JIRnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0Ly0vcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMW1TMm8wM2k3dDFjNlZ6SDZmZFEzT0E4dGNFSXh3RzE4eklQUnArVVkxSWh2NlcrWFp6QkNWeEV4Rjl1cHVzc1BYSjB4RTlYUkh3TW9OczFlcC9uUlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC11bmljb2RlLXNldHMtcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE4LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXVuaWNvZGUtc2V0cy1yZWdleC8tL3BsdWdpbi1zeW50YXgtdW5pY29kZS1zZXRzLXJlZ2V4LTcuMTguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzI3WWtFQVB3U0lRVHY1aW04UUh6M3VwcXA5MkpUV2hpZElDODFUZHg0VkpZSXRlL1ZuZEtmMXFLcmZubmhQTGlQZ2hTdFdmdkMvaUZhTUNRdTdOcWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtcmVnZXhwLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4xOC42IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE4LjYiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWFycm93LWZ1bmN0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYXJyb3ctZnVuY3Rpb25zLy0vcGx1Z2luLXRyYW5zZm9ybS1hcnJvdy1mdW5jdGlvbnMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yNmxUTlhvVlJkQW5zYURYUHB2Q05VcStPVldFVkM2Yng3VnZ6OXJDNTNGMmJhZ1VXVzR1NGlpMitoOEZlamZoN1JZcVB4bitsaWJlRkJCY2s5bXVFdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLWdlbmVyYXRvci1mdW5jdGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLWdlbmVyYXRvci1mdW5jdGlvbnMvLS9wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLWdlbmVyYXRvci1mdW5jdGlvbnMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nR09FdkZ6bTNmV295RDV1WnE3dlZURDU3cFBKM1BjelBVRC94Q0ZHanpCcFVvc25rbG1YeUtuR1FiYmJHczFOUE5Qc2tGZXgwajkzeUtiSHQwY0h5Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6ICJeNy44LjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYXN5bmMtdG8tZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hc3luYy10by1nZW5lcmF0b3IvLS9wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLXRvLWdlbmVyYXRvci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIxQThEOFp6RS9WaE5Eb1YxTVNKVG5wS2tDRzViSm8rMTlSNG80b3kwM3pNN3dzOHlFTUs3NTVqNjFEYzNFeXZkeXNicUg1Qk9PVHF1SjdaWDlDNnZRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGVkLWZ1bmN0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGVkLWZ1bmN0aW9ucy8tL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGVkLWZ1bmN0aW9ucy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRkWFoyVWRrbkVLUVdLSlAxS01ObXVGNUx4M015bXRNTi9wdkErcC9WRWtoSzhqVmNRMWZ6U3k4S005cVJZaEFmMi9sVjMzaG9NUEtJL3hhSTlzQURBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGluZy8tL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGluZy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVjQUNsMWk1ZlNRNmJ0K1lHdVUvWEdDZVpLU3RMbXlWR3l0V2tweWhDTGVRVkEwZXU2V3RpdzkyVitJMVQvaG5lelV2N2o3NGRBL1JvNjlnV2NVK2hnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5Ea1EwTmZrT2hQVHE4WUNMaVdOeHAxK2Y5ZkNvYkVqQ2IwbjhXZGJOVUJjNElCNVY3UDFRblg5SWpwU29xdUtyWEY1U0tvakhsZVZOczJ2R2VIQ0hRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3Mtc3RhdGljLWJsb2NrIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzcy1zdGF0aWMtYmxvY2svLS9wbHVnaW4tdHJhbnNmb3JtLWNsYXNzLXN0YXRpYy1ibG9jay03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNQVG9KNWVZWkx4bG5wMVV6ZEFScE9HZUMyR2JIdnI5ZC9VVjBFdWt1Vng4YXRrdGcxOTRvZStDNUJxUThqUlRrZ0xSVk9QWWVYUlNCZzFJbE1vVlJBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3RhdGljLWJsb2NrIjogIl43LjE0LjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzc2VzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzc2VzLy0vcGx1Z2luLXRyYW5zZm9ybS1jbGFzc2VzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmVkUWhMZmlicFdwc1ZCeDJuL0dLT3o2SmRHUXZMcnVaUWZHcjlsMXFlczJLUWFXc3dqQnpoUUY3VURVWk1OYU1NUWVZblF6eHdPTVBzYllGN3dxUFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1hbm5vdGF0ZS1hcy1wdXJlIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1mdW5jdGlvbi1uYW1lIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNwbGl0LWV4cG9ydC1kZWNsYXJhdGlvbiI6ICJeNy4yMi41IiwKLSAgICAgICAgImdsb2JhbHMiOiAiXjExLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jb21wdXRlZC1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jb21wdXRlZC1wcm9wZXJ0aWVzLy0vcGx1Z2luLXRyYW5zZm9ybS1jb21wdXRlZC1wcm9wZXJ0aWVzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEdIV0JnUmYwa3J4UFgrQWFQdGdCQWxUZ1RlWm1xRHlub2tIT1g3YXFxQUI0dEhzM1UyWTAyekg2RVRGZExaR2NnOVVRU0QxV0Nta1ZyRTlFckhlT2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nLy0vcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2ZxY0Z1R1c4dm5FcVRVQk03VXRQZDVBNHE3OTdMVHZ2d0t4WFRnUnNGam9xYUppRWc5ZGVCRzZrV2VRWWtWRUw1NjlOcG5tcEMwUGtyLzhCTEtHblE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kb3RhbGwtcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWRvdGFsbC1yZWdleC8tL3BsdWdpbi10cmFuc2Zvcm0tZG90YWxsLXJlZ2V4LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNS9ZazlReENRQ2wrc09JQjFXZWxLblZSeFRKRFNBSXh0SkxMMi9wcUwxNFpWbGJIMGZVUVVaYS9UNS9VblF0Qk5nZ2hSN21mQjhFUkJLeUtQQ2k3Vnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtcmVnZXhwLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZHVwbGljYXRlLWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWR1cGxpY2F0ZS1rZXlzLy0vcGx1Z2luLXRyYW5zZm9ybS1kdXBsaWNhdGUta2V5cy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRFbllEKzlCQmdsZDVWQlhIbkYvRGJZR3AzZnFHTXN5eEtidEQxbUR5SUE3QWtUU3BLWEZoQ1Z1ai9vUVZPb0FMZkJzNzdEdWRBMEJFNGQ1bWNwbXF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZHluYW1pYy1pbXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWR5bmFtaWMtaW1wb3J0Ly0vcGx1Z2luLXRyYW5zZm9ybS1keW5hbWljLWltcG9ydC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBNQzNwcFRCMUFNeGQ4ZlhqU3JiUGE3TFQ5aHJJbXQrL2ZjaitQZzVZTUQ3VVF5V3AvMDIrSldwZG5DeW1tc1h3SXg1WitzWW4xYndDbjRaSk52aHFRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZHluYW1pYy1pbXBvcnQiOiAiXjcuOC4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWV4cG9uZW50aWF0aW9uLW9wZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1leHBvbmVudGlhdGlvbi1vcGVyYXRvci8tL3BsdWdpbi10cmFuc2Zvcm0tZXhwb25lbnRpYXRpb24tb3BlcmF0b3ItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12SXBKRk5NL0ZqWjRyaDFteXFJeWE5alh3cnd3Z0ZSSFBqVDNEa1VBOVpMSHV6b3g4amlYa09MdndtMUgrUFFJUDNDcWZDKytXUEtldURpMFNqZGoxZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWJ1aWxkZXItYmluYXJ5LWFzc2lnbm1lbnQtb3BlcmF0b3ItdmlzaXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZXhwb3J0LW5hbWVzcGFjZS1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1leHBvcnQtbmFtZXNwYWNlLWZyb20vLS9wbHVnaW4tdHJhbnNmb3JtLWV4cG9ydC1uYW1lc3BhY2UtZnJvbS03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVg0aGhtN0ZSblBnZDRuREE0Yi81VjI4MHhDeDZvTDdPb2I1KzlxVlM1QzEzWnE0YmgxcXE3TFUwR2dSVTZiNWRCV0J2aEdhWFlWQjRBY042K29sNnZnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZXhwb3J0LW5hbWVzcGFjZS1mcm9tIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzLy0vcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHVqTmJaZHhkRzAvNTRnL291YThJU1RvYVhURkJmOEVuU2I1UGdRU2NpSVhXT1dLWDNTNCtKUjdaRTlvbDhGWndmOWt4aXR6a0dRK1FXZW92L21DaUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1mbG93IjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZm9yLW9mIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mb3Itb2YvLS9wbHVnaW4tdHJhbnNmb3JtLWZvci1vZi03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNreFFqWDFkVTl1dWR3U3NoeUxlRWlwdnJMakJDVnRoQ2dlVHA2Q3pFLzlKWXJsQUlhZWVrVnhScENXc0REZllUZlJaUm9DZVphdENRdndvK3d2SzhBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZnVuY3Rpb24tbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZnVuY3Rpb24tbmFtZS8tL3BsdWdpbi10cmFuc2Zvcm0tZnVuY3Rpb24tbmFtZS03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVJelFOTVMwcDBISGlRbTNvZWx6dGorRUN3Rm5qK1pSVjRLbmd1dmxzRDJvZjF3aFVlTTZvN3dHTmo2b0x3Y0RvQVhROGdFcWZnQzI0RCtWZEljZXZnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tanNvbi1zdHJpbmdzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1qc29uLXN0cmluZ3MvLS9wbHVnaW4tdHJhbnNmb3JtLWpzb24tc3RyaW5ncy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR1Q1JCN2Z1OE15VExiRVFkMWV3M1I4NW54Lzg4eU1vcW8ydVBTamV2TWozeW9ON0NETThqa2dyWTB3bVZ4ZkpaeUovQjlmRTFpcTdFUXBwV1FtUjVBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1saXRlcmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbGl0ZXJhbHMvLS9wbHVnaW4tdHJhbnNmb3JtLWxpdGVyYWxzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZlRMajRENzlNK21lcGN3M2RnRkJUSURZcGJjQjlTbTBicG00cHBYUGFPK1UrUEtGRnlWOU1HUnZTMGd2R3c2MnNkMTBrVDVsUk1LWEFBRGI5cFd5OGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLy0vcGx1Z2luLXRyYW5zZm9ybS1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVFRT1VXMUtMOFgwY0RXZmJ3WVArVGJWYlptMTZRbVFYSlErdm5kUHRIL0JvTzBsT0twVm9FRE1JNytQc2tZeEgrSWlFMHRTOHhaeWUwcXIxbEd6U0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogIl43LjEwLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbWVtYmVyLWV4cHJlc3Npb24tbGl0ZXJhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1lbWJlci1leHByZXNzaW9uLWxpdGVyYWxzLy0vcGx1Z2luLXRyYW5zZm9ybS1tZW1iZXItZXhwcmVzc2lvbi1saXRlcmFscy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJaRWRrTnR6ellDRmw5U0U5QVRhVU1UajJocU1iNFN0YXJPSkxyWlJicXFVNEhTQkU3VWxCdzlXQldRaUR6ckpaSmRVV2lNVFZESTZHdi84RFB2ZmV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy1hbWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtYW1kLy0vcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWFtZC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVIrUFRmTFRjWUVtYjEra0s3Rk5raFExZ1A0S2dqcFNPNkhmSDkrZjgveWZwMk50M2dnQmppVnBSd213VGxmcVpMYWZZS0pBQ3kzNnlEWGxFbUk5SGpRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtY29tbW9uanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtY29tbW9uanMvLS9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtY29tbW9uanMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CNHB6T1hqK09OUm11YVFUZzA1YjN5LzREdUZ6M1djQ05BWFBMYjJRMEdUMFRyR0tHeE5LVjRqd3NYdHMrU3RhTTBMUWN6WmJPcGo4bzFETFBESklpQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzLy0vcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZW10RXBvYVRNc09zNlR6eituYm1jZVBsNkFLVnRTMXlDNFlOQWVNdW45VThZQ3NnYWRQTnhuT1BROEdoSEZCMnFkeCtMWnU5TGdvQzBMdGh1dTA1RFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1ob2lzdC12YXJpYWJsZXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy11bWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtdW1kLy0vcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXVtZC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStTNmt6ZWZOL0UxdmtTc0t4OGttUXVxZVFzdkNLQ2QxZnJhQ003elhtNFNGb2dnSTA5OVRyNEc4VTgxKzVndE1kVWVNUTRpcGRRZmZiS0xYMC83ZEJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW5hbWVkLWNhcHR1cmluZy1ncm91cHMtcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW5hbWVkLWNhcHR1cmluZy1ncm91cHMtcmVnZXgvLS9wbHVnaW4tdHJhbnNmb3JtLW5hbWVkLWNhcHR1cmluZy1ncm91cHMtcmVnZXgtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZZ0xMS21TM2FVQmhIYXhwNWhpMVdKVGdPVWIvTkN1REh6R1Q5ejlXVHQzWUcrQ1BSaEpzNm5wcmJTdHg2RG5XTTRkaDZndDdTVTNzWm9kYlowOGFkUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbmV3LXRhcmdldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbmV3LXRhcmdldC8tL3BsdWdpbi10cmFuc2Zvcm0tbmV3LXRhcmdldC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFzRjdLMEZ4L2NOS1Z5azNhK0RXMEpMbytVYTU5OC9OeE1SdnhEbmtwQ0lHRmg0MytoL3YyeHloUlVZZjZvRDhnRTRRdEw4M0M3elpWZ2hNakhkK2l3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IvLS9wbHVnaW4tdHJhbnNmb3JtLW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZDRjhnNnoxZE5ZWi9WWG9rNXVZa2tCQklDSFpQaUdFbDdvRG5BeDJNdDFobEhWSE9TSUtXSmFYSGpRSkE1VkI0M0tablhaRElleE1jaFk0eTJQR2RBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1udW1lcmljLXNlcGFyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbnVtZXJpYy1zZXBhcmF0b3IvLS9wbHVnaW4tdHJhbnNmb3JtLW51bWVyaWMtc2VwYXJhdG9yLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmJzbEVEMS82TStzWGl3d3RjQUIvbmlleXBHdzAyRWpmNEt0RGVNa0NFcFA2Z1dGTVgxd0k5V0tZdWErNG9CbmVDQ0VtdWxPa1Jwd3l3eXBWWnpzL2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6ICJeNy4xMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9iamVjdC1yZXN0LXNwcmVhZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXJlc3Qtc3ByZWFkLy0vcGx1Z2luLXRyYW5zZm9ybS1vYmplY3QtcmVzdC1zcHJlYWQtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LazNseURtRXNsSDlEbnZDREExczFra2QzWVdRSVRpQk9IbmdPdERMOVB0NkJaanpxYjZoaU9sYjhWZmppaVFKMnVubWVnQnFadTByeDVSeEpiNXZtUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9iamVjdC1yZXN0LXNwcmVhZCI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcGFyYW1ldGVycyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9iamVjdC1zdXBlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXN1cGVyLy0vcGx1Z2luLXRyYW5zZm9ybS1vYmplY3Qtc3VwZXItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rbFhxeWFUOXRyU2pJVXJjc1lJZkVUQXptT0VaTDNjQllxT1lMSnhCSGZNRkZnZ21YT3YrTllTWC9KYnM5bXpNVkVTdy9XeWNMRlBSeDhiYS9iMklwdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jYXRjaC1iaW5kaW5nLy0vcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jYXRjaC1iaW5kaW5nLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcEg4b3JKYWh5K2h6WmplNWI4ZTJRSWxCV1F2R3BlbFM3NkM2M1oramhaS3NtemZOYVBRK0xhVzZkY0o5YnhUcG8xbXRYYmdId3k3NjVSbzNqZnRtVWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jaGFpbmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb3B0aW9uYWwtY2hhaW5pbmcvLS9wbHVnaW4tdHJhbnNmb3JtLW9wdGlvbmFsLWNoYWluaW5nLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQWNvbmJNS09Na3lHK3hDbmcySm9nTUNEY3FXOHdlZFFBcXBWSUw0Y09TZXNjWjcraVc4dXRDNllEWkxNQ1NVSVJlRUE3MzNnelJTYU9TWE1BdC80V1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNraXAtdHJhbnNwYXJlbnQtZXhwcmVzc2lvbi13cmFwcGVycyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wYXJhbWV0ZXJzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wYXJhbWV0ZXJzLy0vcGx1Z2luLXRyYW5zZm9ybS1wYXJhbWV0ZXJzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVZrRlVCdXJPUkJSRU9tSFJLbzA2RmpIWWdqcmFicGRxUlN3cTYrQzdSNWlUQ1pPc000UWJjQjI3U3QwYTRVNmZmZnlBT3FoM3MvcUVmeWJBaGZpdmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcml2YXRlLW1ldGhvZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByaXZhdGUtbWV0aG9kcy8tL3BsdWdpbi10cmFuc2Zvcm0tcHJpdmF0ZS1tZXRob2RzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFBqaDRneXJRbkdlOTdKVGFsZ1JHTXVVNGljc1pGbldremljQi9mVXR6bEtVcXZzV0JLRXBQUGZyNWEySml5aXJaa0h4bkFxa1FNTzVaNUIya0szZkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtY2xhc3MtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QvLS9wbHVnaW4tdHJhbnNmb3JtLXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItLzl4bmFUVEpjVm9CdFNTbXJWeWh0U3ZPM2ticVMyT0RvaDJqdUVVNzJjM2FZb25ORjBPTUdpYXoyZ2p1a3lLTTJ3QkJZSlAzOFM0SmlFMFdmYjVWTVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1hbm5vdGF0ZS1hcy1wdXJlIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtY2xhc3MtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6ICJeNy4xNC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByb3BlcnR5LWxpdGVyYWxzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcm9wZXJ0eS1saXRlcmFscy8tL3BsdWdpbi10cmFuc2Zvcm0tcHJvcGVydHktbGl0ZXJhbHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UaU9BcmdkZEszbUsveDFRd2Y1aGF5MnB4STZ3Q1pudlFxckZTcWJ0ZzFHTGwySmNOTWl0VkgvWW5xalArTTMxcExVZVRmelkxSEFYRkRuVUJWMzByUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWNvbnN0YW50LWVsZW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1jb25zdGFudC1lbGVtZW50cy8tL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtY29uc3RhbnQtZWxlbWVudHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CRjVTWG9PK25YM2g1T2hsTjc4WGJiRHJCT2ZmditBeFBQMkVOYUpPVnFqV0NnQkRlT1kzV2NhVWNkZHV0R1Nmb2FwKzVORVEvcS80STNXWkl2Z2tYQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtZGlzcGxheS1uYW1lLy0vcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1kaXNwbGF5LW5hbWUtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QVmszV1BZdWRSRjV6NEdLTUVZVXJMalBsMzhmSlNLTmFFT2tGdW9wcmlvb3dHdVdONncyUkt6bnVGTlNsSng3cHp6WFhTdFBVbk5TT0VPMGpMNUVWdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4Ly0vcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yb2c1Z1phVmJVaXA1aVdETVRZYlZNMTVYUXErUmtVS2hFVC9JSFI2b2l6UitKRW9ONkNBZlRUdUhjSzR2d1V5emNhMzBxcUhxRXB6Qk9uYVJNV1lNQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtZGV2ZWxvcG1lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeC1kZXZlbG9wbWVudC8tL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LWRldmVsb3BtZW50LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkRodXp3V011SW53Q1llRGVNenlpN1RhQmdSUWVpNkRxeGhieW5pTDcvVkc0UlNTN0h0U0wyUWJZNGVFU3kxS0pxbFd0OGczeGVFQkdQdW8rWHFDOEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4IjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcHVyZS1hbm5vdGF0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcHVyZS1hbm5vdGF0aW9ucy8tL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcHVyZS1hbm5vdGF0aW9ucy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdQNGs4NXd4MDlxK2JyQXJWaW5UWGhXaXl6TGw5VXBtR3ZhMCttV3lLeGs2SlplcXUwNXgzZVVjSVVFK0Z5dHRQS0pGUlJWdEF2UWFKNllGOWgxWnBBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVnZW5lcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlZ2VuZXJhdG9yLy0vcGx1Z2luLXRyYW5zZm9ybS1yZWdlbmVyYXRvci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJSN0tlUE9FN2dmRXROVGg5UXcraU8zUS9lNERFc29RK2hkdk02UVVESDdKUko1cXhxNUFBNTJaekJXYkk1aTlsZk51dnlTZ09HUDhaTjdMQW1haVB3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAicmVnZW5lcmF0b3ItdHJhbnNmb3JtIjogIl4wLjE1LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVzZXJ2ZWQtd29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlc2VydmVkLXdvcmRzLy0vcGx1Z2luLXRyYW5zZm9ybS1yZXNlcnZlZC13b3Jkcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURUdEdLRlJRVURtOHN2aWdKelpIemIvMnhhdFBjNlR6TnZBSUo1R3FPS0RzR0ZZZ0Fza2pSdWxiUi92R3NQS3EzT1BxdGV4bnozMjdxWXBQNTdSRnlBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcnVudGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcnVudGltZS8tL3BsdWdpbi10cmFuc2Zvcm0tcnVudGltZS03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJnNFd4ZDFGV2VGeDNkYUhGVFdrMXBrU1dLL0F5UXVpeUFvZVpBT2tBT1VCam5aUEg2S1Q3ZU14b3VWNDd0UTZobDZheDJ6eUFXQmRXWlhicnZYbGF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMyIjogIl4wLjQuMyIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMyI6ICJeMC44LjEiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXBvbHlmaWxsLXJlZ2VuZXJhdG9yIjogIl4wLjUuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXNob3J0aGFuZC1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zaG9ydGhhbmQtcHJvcGVydGllcy8tL3BsdWdpbi10cmFuc2Zvcm0tc2hvcnRoYW5kLXByb3BlcnRpZXMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12TTRmcTlJWEhzY1hWS3pEdjVpdGtPMVg1MlNtZEZCRmNNSUJaMkZSbjJucVZZcXc2ZEJleFVnTXZBakhXK0tYcFBQVmlEL1lvM0dyREVCYVJDMFFZQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXNwcmVhZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc3ByZWFkLy0vcGx1Z2luLXRyYW5zZm9ybS1zcHJlYWQtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01WnpEUUlHeXZONHc4K2RNbXBvaEw2TUJvK2wyRzd0ZkMvTzJEZzcvaGpwZ2VXdlV4OEZ6ZmVPS3hHb2c5SWltUGE0WWVrYVE5UGxEcVRMT2xqa2N4Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc3RpY2t5LXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zdGlja3ktcmVnZXgvLS9wbHVnaW4tdHJhbnNmb3JtLXN0aWNreS1yZWdleC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpmN0x1TnBIRzBpRWVpeUNOd1g0ajNnRGcxamd0MWszWmRYQktiWlNvQTNCYkdRR3ZNaVN2ZmJaUlIzRHIzYWVKZTNvb1dGWnhPT0czSVJTdFlwMkJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzLy0vcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVjaU9laFJOZitFeVVlZXdvOE5rYlFpVXM0ZDZaeGlIbzZCY0JjbkZsZ2lKZnUxNnEwYlFVdzlKdm8wYjBnQktGRzFTTWhEU2plS1hTWXVKTGVGU01BPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdHlwZW9mLXN5bWJvbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdHlwZW9mLXN5bWJvbC8tL3BsdWdpbi10cmFuc2Zvcm0tdHlwZW9mLXN5bWJvbC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJZa0k1bE16TDRrUGlpNEhIRUVDaGtEMHJrYytudm5sUjYrby9xZHFSNnpybTBTdi9ub2RteUxobHEyRE8wWUtMVU5kMlZlUG1QUmpKWFNCaDlPSWRBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdHlwZXNjcmlwdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdHlwZXNjcmlwdC8tL3BsdWdpbi10cmFuc2Zvcm0tdHlwZXNjcmlwdC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNNdWJBOVM3Q2I1c0dTRkZVbHF4eUNsVEE5eldKOHFHUXJwcE5VbTA1THRGdU4xRUxSRk5uZGtpeDR6VUpyQzlGK1lpdld3YTFkSE1TeW8wZTBOOWRBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdHlwZXNjcmlwdCI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtZXNjYXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1lc2NhcGVzLy0vcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLWVzY2FwZXMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iaUVtVmcxSVlCL3JhVU81d1QxdGdmYWNDZWYxNUZiemhreDQ5M0QzdXJCSSsrNmhwSitSRkc0U3JXTW4wTkVaTGZ2aWxxS2YzUURyUlZaSG8wOEZZZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcHJvcGVydHktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcHJvcGVydHktcmVnZXgvLS9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcHJvcGVydHktcmVnZXgtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IQ0NJYitDYkpJQUU2c1huNUNqRlFYTXdrQ0NsY09mUEN6VGxpbEo4Y1VhdGZ6d0hsV1FrYnRWMHpEMzM4dTlkWnNrd3Z1T1lUdXVhTWFBOEo1RUk1QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXJlZ2V4Ly0vcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXJlZ2V4LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMDI4bGFhT0twdE41dkhKZjkvQXJyL0hpSmVrTWQ0MWhPRVpZdk5zcnNYcUo3WVBZdVgyYlF4aDMxZmtaekdtcTNZcUhSSnpZRkZBVll2S2ZNUEtxeWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtcmVnZXhwLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1zZXRzLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXNldHMtcmVnZXgvLS9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtc2V0cy1yZWdleC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxoTWZpNEZDMTVqMTNlS3JoM0RuWUhqcEdqNlVLUUh0TktUYnRjMWlndkFoUnk0K2tMaFYwN09wTGNzTjBWZ0RFdy9NakF2Sk80QmRNSnNId01oekNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLXJlZ2V4cC1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcHJlc2V0LWVudiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3ByZXNldC1lbnYvLS9wcmVzZXQtZW52LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZmowNmh3ODlkcGlaekdadHhuK1F5YmlmRjA3bk5pWmpaN3NhenMyYVZEY3lzQVpWR2pXNys3aUZZeGc2R0xOTTQ3Ui90aFlmTGRyWGMrMmYxMVZpOUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvbXBhdC1kYXRhIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLWJ1Z2ZpeC1zYWZhcmktaWQtZGVzdHJ1Y3R1cmluZy1jb2xsaXNpb24taW4tZnVuY3Rpb24tZXhwcmVzc2lvbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tYnVnZml4LXY4LXNwcmVhZC1wYXJhbWV0ZXJzLWluLW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6ICI3LjIxLjAtcGxhY2Vob2xkZXItZm9yLXByZXNldC1lbnYuMiIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogIl43LjguNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jayI6ICJeNy4xNC41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWR5bmFtaWMtaW1wb3J0IjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1leHBvcnQtbmFtZXNwYWNlLWZyb20iOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1hc3NlcnRpb25zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWF0dHJpYnV0ZXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6ICJeNy4xMC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWpzb24tc3RyaW5ncyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6ICJeNy4xMC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IiOiAiXjcuMTAuNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6ICJeNy4xNC41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdCI6ICJeNy4xNC41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXVuaWNvZGUtc2V0cy1yZWdleCI6ICJeNy4xOC42IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWFycm93LWZ1bmN0aW9ucyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLWdlbmVyYXRvci1mdW5jdGlvbnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hc3luYy10by1nZW5lcmF0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ibG9jay1zY29wZWQtZnVuY3Rpb25zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGluZyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWNsYXNzLXByb3BlcnRpZXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzcy1zdGF0aWMtYmxvY2siOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzc2VzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY29tcHV0ZWQtcHJvcGVydGllcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWRlc3RydWN0dXJpbmciOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kb3RhbGwtcmVnZXgiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kdXBsaWNhdGUta2V5cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWR5bmFtaWMtaW1wb3J0IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZXhwb25lbnRpYXRpb24tb3BlcmF0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1leHBvcnQtbmFtZXNwYWNlLWZyb20iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mb3Itb2YiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mdW5jdGlvbi1uYW1lIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tanNvbi1zdHJpbmdzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbGl0ZXJhbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbWVtYmVyLWV4cHJlc3Npb24tbGl0ZXJhbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWFtZCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtY29tbW9uanMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy11bWQiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1uYW1lZC1jYXB0dXJpbmctZ3JvdXBzLXJlZ2V4IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbmV3LXRhcmdldCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXJlc3Qtc3ByZWFkIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXN1cGVyIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb3B0aW9uYWwtY2F0Y2gtYmluZGluZyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcGFyYW1ldGVycyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByaXZhdGUtbWV0aG9kcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcHJvcGVydHktbGl0ZXJhbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWdlbmVyYXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlc2VydmVkLXdvcmRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc2hvcnRoYW5kLXByb3BlcnRpZXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zcHJlYWQiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zdGlja3ktcmVnZXgiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXR5cGVvZi1zeW1ib2wiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLWVzY2FwZXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXByb3BlcnR5LXJlZ2V4IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1yZWdleCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtc2V0cy1yZWdleCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wcmVzZXQtbW9kdWxlcyI6ICJeMC4xLjUiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXBvbHlmaWxsLWNvcmVqczIiOiAiXjAuNC4zIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMzIjogIl4wLjguMSIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tcG9seWZpbGwtcmVnZW5lcmF0b3IiOiAiXjAuNS4wIiwKLSAgICAgICAgImNvcmUtanMtY29tcGF0IjogIl4zLjMwLjIiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcHJlc2V0LW1vZHVsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3ByZXNldC1tb2R1bGVzLy0vcHJlc2V0LW1vZHVsZXMtMC4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUE1N3RoNllSRzdvUjNjcS95dC9ZODRNdkdnRTBlSkcyRjFKTGhLdXlHK2pGeEVncmQvSEFNSmF0aUZ0bU9pWnVyeiswRGtydmJoZUNMYVY1ZjJKZmpBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjAuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXVuaWNvZGUtcHJvcGVydHktcmVnZXgiOiAiXjcuNC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWRvdGFsbC1yZWdleCI6ICJeNy40LjQiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjQuNCIsCi0gICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcHJlc2V0LXJlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcHJlc2V0LXJlYWN0Ly0vcHJlc2V0LXJlYWN0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTStJczNXaWtPcEVKSGdSMzg1SGJ1Q0lUUFRhUFJhTmtpYlRFYTlvaW9mbUp2SXNyY2ViNHlwOVJMOUtiK1RFOEx6bm1leVpxcFArTG9wd2N4NTl4UFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1kaXNwbGF5LW5hbWUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3giOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtZGV2ZWxvcG1lbnQiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1wdXJlLWFubm90YXRpb25zIjogIl43LjIyLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3ByZXNldC10eXBlc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcHJlc2V0LXR5cGVzY3JpcHQvLS9wcmVzZXQtdHlwZXNjcmlwdC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVliUGFhbDlMeHp0U0dobW5kUjQ2Rm1BYmtKLzFmQXN3MjkzdFNVK0k1RTVoK2NuSjNkNEdUd3lVZ0dZbU9YSllkR0ErdU5lUGxlNHFiYVJ6ajJOSVNRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanN4IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy1jb21tb25qcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXR5cGVzY3JpcHQiOiAiXjcuMjIuNSIKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjI3LjEiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni45LjAiCkBAIC0yMDM3LDM0NyArMjk2LDE4MyBAQAogICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9yZWdqc2dlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcmVnanNnZW4vLS9yZWdqc2dlbi0wLjguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteC9ycUdNZHpqK2ZXWnZDT1lGb3JUZ2h6YnRxUERaNWdQd2FvTkdIZGdEZkYyUUEvWFpiQ0JwNE1vbzVzY3JrQU1QaEI3ejI2WE0vQWFIdUlKZGdhdUE9PSIKLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9ydW50aW1lLy0vcnVudGltZS03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVjanZZbG5BYVovS1ZuZUUvT2RLWUJZZmdYVjNQdHU2elFXbWdFRjd2d0toUW52VlM2YmpNRDJYWWdqK1NOdlExR2ZLL3BqZ29rZlBrQy8yQ084Q3VBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlZ2VuZXJhdG9yLXJ1bnRpbWUiOiAiXjAuMTMuMTEiCi0gICAgICB9LAorICAgICAgInZlcnNpb24iOiAiNy4yOS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcnVudGltZS8tL3J1bnRpbWUtNy4yOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KaURTaEg0NXpLSFd5R2U0Wk5WUnJDakJ6OE5oOVRNbVpHMWtoNFFUSzhoQ0JUV0JpOERhK2k3czFmSnc3L2xZcE00Y2NlcFNOZnF6Wi9RdkFCQmk1Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdGVtcGxhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjE1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvdGVtcGxhdGUvLS90ZW1wbGF0ZS03LjIyLjE1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RUEVyVVZtNHV5SmE2MHJrSTczcW5lRGFjdmR2enhzaFQza2tzR3FsR1dZZE9USVVPd0o3UkRVTDhzR3FzbFkxdVhXU0w2eE1GS0VYRFMzb3gydUYwdz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RlbXBsYXRlLy0vdGVtcGxhdGUtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQTZNYTJLc0NkR2IrV0M2VXBCVkZKR1hMNThNREE2b3lPTmJqeUYvKzVzQmd4WS9kd2toTG9nYk1UMkdYWHlVODQvSWhSdy8yRDFPczFCL2dpeitCUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yMi4xMyIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIyLjE1IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi4xNSIKKyAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOC42IgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIzLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90cmF2ZXJzZS8tL3RyYXZlcnNlLTcuMjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXpwZTU5U1E0OHFHNm51MkN6Y01MYnhVdWR0TitkT005a0RiVXFHcTNIWFVKUmxvN2k4ZnZQb3hRVXpZZ0xaNGNNVm11WmdtOHZ2QnBOZVJoZDZYU3c9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90cmF2ZXJzZS8tL3RyYXZlcnNlLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEhQaVFyMFg3K3dhSGZ5WFBacFdQZldML0o3ZGNOMW14OWdMNldkUVZNYlBuRjMrWmhTTXM4dEN4TjdvSGRkSkU5ZmhORTcrbHhkbmx5ZW1LZkpSdUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjIuMTMiLAotICAgICAgICAiQGJhYmVsL2dlbmVyYXRvciI6ICJeNy4yMy4wIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZW52aXJvbm1lbnQtdmlzaXRvciI6ICJeNy4yMi4yMCIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiAiXjcuMjMuMCIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWhvaXN0LXZhcmlhYmxlcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogIl43LjIyLjYiLAotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yMy4wIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMy4wIiwKLSAgICAgICAgImRlYnVnIjogIl40LjEuMCIsCi0gICAgICAgICJnbG9iYWxzIjogIl4xMS4xLjAiCisgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLWdsb2JhbHMiOiAiXjcuMjguMCIsCisgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI5LjAiLAorICAgICAgICAiZGVidWciOiAiXjQuMy4xIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90eXBlcy8tL3R5cGVzLTcuMjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMG9JeVVmS29JM21TcU12c3hCZGNsRHd4WEtYQVVBOHYvYXBaYmMraVN5QVJZb3UxbzhaR0R4YlVZeUxGb1cyYXJxUzJqREdxSnVadnYxZC9pbzFheGc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90eXBlcy8tL3R5cGVzLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTHdkWkhwU2NNNFF6OFh3MmlLU3pTK2NmZ2xaekpHdm9mUUlDeTdXN3Y0Y2FydTRFYUFteVV1TzZCR3JieVEybVlWMTFXMFU4ajVtQmhkMTRkZDNCMEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yMi4yMCIsCi0gICAgICAgICJ0by1mYXN0LXByb3BlcnRpZXMiOiAiXjIuMC4wIgorICAgICAgICAiQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogIl43LjI3LjEiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmNvZS92OC1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmNvZS92OC1jb3ZlcmFnZS8tL3Y4LWNvdmVyYWdlLTAuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0waFlROFNCNERiNXp2WkI0YXhkTUhHd0VhUWprWnpGalFpTjlMVll2SUZCMm5TVUhXOXRZcHhXcmlQcldEQVNJeGlhWGF4ODNSRWNMeHVTZG5HUFp0dz09IgorICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL2NvbG9yLWhlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL2NvbG9yLWhlbHBlcnMvLS9jb2xvci1oZWxwZXJzLTUuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TMTFFWFdKeXkwTXo1U1l2Um1ZOG5KWVRGRmQxTENOVis3Y1h5QWdRdE9PdXpiNEVzZ2ZxRHVmTCs5ZXN4NzIvZUxoc1JkR1p3YWxkdS9oK0U0dDRCQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Nzc3Rvb2xzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQtMCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL25vcm1hbGl6ZS5jc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9ub3JtYWxpemUuY3NzLy0vbm9ybWFsaXplLmNzcy0xMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU0wcXF4QWN3Q3NJVmZwRlFTbEdONVhqWFd1OGw1SkRaTitmUHQxTGVXNVNaZXhRVGduYUV2Z1hBWStDZXlnUncwRWVwcFdIaTEySnhFU1dpV3JCMFNnPT0iCisgICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvY3NzLWNhbGMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL2Nzcy1jYWxjLy0vY3NzLWNhbGMtMi4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNOOG9haiswanVVdy8xSDNZd21EREpYQ2dUQjFnS1U2SGMvYkI1MDJ1OXpSMHEydmQ3ODZYSkg5UWZyS0lFZ0ZsWm1oWmlxNmVwWGw0ckhxaHpzSWdRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3NzdG9vbHMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjc3N0b29scy9jc3MtcGFyc2VyLWFsZ29yaXRobXMiOiAiXjMuMC41IiwKKyAgICAgICAgIkBjc3N0b29scy9jc3MtdG9rZW5pemVyIjogIl4zLjAuNCIKKyAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL3Bvc3Rjc3MtY2FzY2FkZS1sYXllcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL3Bvc3Rjc3MtY2FzY2FkZS1sYXllcnMvLS9wb3N0Y3NzLWNhc2NhZGUtbGF5ZXJzLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rS2RZcnBLQzVUZ29tUXIyRGxaRjRsREVwSGNveG5qNUlHZGRZWWZCV0pBS2ZqMUp0dUhVSXFNYStFMXBKSit6M2t2RFZpV01xeXFQbEc0SmE3YW1RQT09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9jc3MtY29sb3ItcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9jc3MtY29sb3ItcGFyc2VyLy0vY3NzLWNvbG9yLXBhcnNlci0zLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbmJ0S3doM2E2eE5WSXAvVlJ1WFY2NHlUS25iMUlqVEFFRWgzaXJ6UytIa0tqQU9ZTFRHTmI5cG1WTm50WjhpVkJIY1dEQTJEb2YwUXRQZ0ZJMUJhVEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9jc3N0b29scyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAY3NzdG9vbHMvc2VsZWN0b3Itc3BlY2lmaWNpdHkiOiAiXjIuMC4yIiwKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTAiCisgICAgICAgICJAY3NzdG9vbHMvY29sb3ItaGVscGVycyI6ICJeNS4xLjAiLAorICAgICAgICAiQGNzc3Rvb2xzL2Nzcy1jYWxjIjogIl4yLjEuNCIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9LAogICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCisgICAgICAgICJAY3NzdG9vbHMvY3NzLXBhcnNlci1hbGdvcml0aG1zIjogIl4zLjAuNSIsCisgICAgICAgICJAY3NzdG9vbHMvY3NzLXRva2VuaXplciI6ICJeMy4wLjQiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9wb3N0Y3NzLWNvbG9yLWZ1bmN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWNvbG9yLWZ1bmN0aW9uLy0vcG9zdGNzcy1jb2xvci1mdW5jdGlvbi0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmMwZjYyV21IZHRSRGpmNWYzZTJTVHdSQWw4OU4yQ0xiKzlpQXd6cnY0TDJobmNyYkR3blFEOVBDcTBndEF0N3BPSTJsZUlWMDhISUJVZDRqeEQ4Y3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvY3NzLXBhcnNlci1hbGdvcml0aG1zIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9jc3MtcGFyc2VyLWFsZ29yaXRobXMvLS9jc3MtcGFyc2VyLWFsZ29yaXRobXMtMy4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURhRGVVa1haS2pkR2hnWWFITkpUVjlwVjdZOUIzYjY0NGpDTHM5VXBjM1ZlTkdnNkxXQVJBVDZPK1ErL0NPbysyZ2cvYk01cmhwTUF0ZjcwV3FmQmRRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3NzdG9vbHMiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9LAogICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCisgICAgICAgICJAY3NzdG9vbHMvY3NzLXRva2VuaXplciI6ICJeMy4wLjQiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9wb3N0Y3NzLWZvbnQtZm9ybWF0LWtleXdvcmRzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWZvbnQtZm9ybWF0LWtleXdvcmRzLy0vcG9zdGNzcy1mb250LWZvcm1hdC1rZXl3b3Jkcy0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWmdybHp1VUFqWElPYzJKdWVLMFg1c1pEakN0Z2ltVnAvTzVDRXFUY3M1U2hXQmE2c21oV1liUzB4NWNWYy8rcnljVERiamp6b1AwS1REblVuZVpHT2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9jc3MtdG9rZW5pemVyIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9jc3MtdG9rZW5pemVyLy0vY3NzLXRva2VuaXplci0zLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmQvOUVWRGl1NlBQSnQ5eUFoNnJvWlA2RWwxeEhyZHZJVkdqeUJzSFIwUll3TkhnTDdGSlB5SUlXNGZBTkpORzZGdHlaZnZsUlBwRkk0Wk0vbHVidnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9jc3N0b29scyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL3Bvc3Rjc3MtaHdiLWZ1bmN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWh3Yi1mdW5jdGlvbi8tL3Bvc3Rjc3MtaHdiLWZ1bmN0aW9uLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZSGRFcnU0bzNSc2JqbXU2dkh5NFVLT1haRCtSbjJ6bWtBbUxSZlBldDYrSno0T2p3OGNiV3hlMW40MlZhWFFoRDNDUVVYWFRvb0l5OE9rVmJVY0wrdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvcG9zdGNzcy1pYy11bml0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWljLXVuaXQvLS9wb3N0Y3NzLWljLXVuaXQtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU90MXJjd1JBYVJITktDOXRBcW9xTlpoamRZQnpLazFQT2dXZmhONHVDT0U0N2ViR2NMUnFYaktrQXBWRHBqaWZMNnUyLzU1ZWtrcG5GY3Arcy9PWlV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLXByb2dyZXNzaXZlLWN1c3RvbS1wcm9wZXJ0aWVzIjogIl4xLjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvcG9zdGNzcy1pcy1wc2V1ZG8tY2xhc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL3Bvc3Rjc3MtaXMtcHNldWRvLWNsYXNzLy0vcG9zdGNzcy1pcy1wc2V1ZG8tY2xhc3MtMi4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdKUGVWVlpIZCtqeFlkVUxsODdsdmpndldsZFl1K0JjNjJzOXZEL0VENi9RVEdqeTBqeTBVUy9mNkJHNTNzVk1UQkoxbHpLWkZwWW1vZkJOOWVhUmlBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjc3N0b29scy9zZWxlY3Rvci1zcGVjaWZpY2l0eSI6ICJeMi4wLjAiLAotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC4xMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9wb3N0Y3NzLW5lc3RlZC1jYWxjIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLW5lc3RlZC1jYWxjLy0vcG9zdGNzcy1uZXN0ZWQtY2FsYy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSkNzUXN3MXdqWXd2MWJKbWdqS1NvWk52ZjdSNit3dUhEQWJpNWYvN01iRmhsMmQvK3YrVHZCVFU0QkpIM0cxWDFIODdkSGwwbWg2VGZZb2diVC9kSlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL3Bvc3Rjc3Mtbm9ybWFsaXplLWRpc3BsYXktdmFsdWVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLW5vcm1hbGl6ZS1kaXNwbGF5LXZhbHVlcy8tL3Bvc3Rjc3Mtbm9ybWFsaXplLWRpc3BsYXktdmFsdWVzLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qY09hbklidjU1T0ZLUTNzWWVGRC9UMFRpN0FNWGM5bk0xaFpXdThtLzI3MjJnT1R4Rmc3eFl1NFJETEpMZVptUFVWUWxHem80amh6dlRVcTN4NFpVdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvcG9zdGNzcy1va2xhYi1mdW5jdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy1va2xhYi1mdW5jdGlvbi8tL3Bvc3Rjc3Mtb2tsYWItZnVuY3Rpb24tMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5KcEpnc2RBM2RBOXk1cGd5Yi9VZkV6RTdXNUthN3UwQ1gwL0hJTVZCTld6V2VtZGNUSDNYd0FORUNVNmFuV3YvYW80dlZOTFRNeGhpUE5ac1RLNmlBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLXByb2dyZXNzaXZlLWN1c3RvbS1wcm9wZXJ0aWVzIjogIl4xLjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvcG9zdGNzcy1wcm9ncmVzc2l2ZS1jdXN0b20tcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy1wcm9ncmVzc2l2ZS1jdXN0b20tcHJvcGVydGllcy8tL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMtMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFTQTlXMWFJeTV5Z3NrWll1V2FtczRCemFmRDEyVUx2U3lwbWFMSlQyanZROEcwTTNJOFBSUWhDMGg3bUcwWjNMSTA1K2FnWmpxU1I5K0s5eWFRUWpBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3NzdG9vbHMvcG9zdGNzcy1zdGVwcGVkLXZhbHVlLWZ1bmN0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy1zdGVwcGVkLXZhbHVlLWZ1bmN0aW9ucy8tL3Bvc3Rjc3Mtc3RlcHBlZC12YWx1ZS1mdW5jdGlvbnMtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWR6MExOb28zaWpwVE9RcUVKTFk4bnlhYXBsNnVtYm1EY2dqNEFEMGxnVlE1NzJiMmVxQTFpR1pZVFRXaHJjckh6dFdERFJBWDJER1l5dzJWQmp2Q3ZRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9wb3N0Y3NzLXRleHQtZGVjb3JhdGlvbi1zaG9ydGhhbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL3Bvc3Rjc3MtdGV4dC1kZWNvcmF0aW9uLXNob3J0aGFuZC8tL3Bvc3Rjc3MtdGV4dC1kZWNvcmF0aW9uLXNob3J0aGFuZC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzFYd0tKMmVNSVdyelFlbk4wWGJjZnpja09MTEppY3pxeStZdmZHbXpvVlhkN3BUOUZmT2JpU0VmenM4NGJwRS9WcWZwRXVBWjl0Q1JiWmtaeHhiZHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGNzc3Rvb2xzL3Bvc3Rjc3MtdHJpZ29ub21ldHJpYy1mdW5jdGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL3Bvc3Rjc3MtdHJpZ29ub21ldHJpYy1mdW5jdGlvbnMvLS9wb3N0Y3NzLXRyaWdvbm9tZXRyaWMtZnVuY3Rpb25zLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13b0thTE8vLy80YmIrelpDMnM4MGwrN2NtMDdNNzI2OE1zeUczTTBBY3RYWEVGaTZTdWh2cmlRWWNiNThpaUtHYmp3d0lVN240NWlSTEVIeXBCNDdPZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9wb3N0Y3NzLXVuc2V0LXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLXVuc2V0LXZhbHVlLy0vcG9zdGNzcy11bnNldC12YWx1ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzhKNHJvUEJJTG5lbEFzZExyNFhPQVIvR3NUbTBHSmk0WHBjZnZvV2szVTZLaVRDcWlGWWM2M0toUk1RUVgzNWpZTXA0QW84SWo5K0laUmdNZkpwMWc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bjc3N0b29scy9zZWxlY3Rvci1zcGVjaWZpY2l0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvc2VsZWN0b3Itc3BlY2lmaWNpdHkvLS9zZWxlY3Rvci1zcGVjaWZpY2l0eS0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK09KOWtvbnY5NUNsU1RPSkNtTVpxcGQ1K1lHc0IyUyt4NnczRTFvYU04VXVSNWo4blROSFlTejhjOUJFUEdET0NNUVlJRUVHbFZQai9WWTY0aVRiR3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0IHx8IF4xNiB8fCA+PTE4IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjEwIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlbW90aW9uL2lzLXByb3AtdmFsaWQvLS9pcy1wcm9wLXZhbGlkLTEuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02MU1mN1VmeDRhRHh4MXhsRGVPbThhRkZpZ0dIRTR6KzBzS0NhK0lIQ2VaS2l5UDlSTEQwTW14N204YjkvQ2YzN2Y3TkF2UU9PSkFiUVFHVnI1dUVSdz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1vdGlvbi9pcy1wcm9wLXZhbGlkLy0vaXMtcHJvcC12YWxpZC0xLjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdU5zb1lkMzdBRm1hQ2RYbGc2RVlEMUthUE9hUldSQnlNQ1l6YktVWDQraGhNZnJ4ZFZTZWxTaHl3TDRKVmFBZU0vZUhVT1NwcllCUWxzKy9uZVgzcHc9PSIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiQGVtb3Rpb24vbWVtb2l6ZSI6ICJeMC44LjEiCiAgICAgICB9CkBAIC0yMzkyLDEzMTIgKzQ4Nyw1MTQgQEAKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1vdGlvbi91bml0bGVzcy8tL3VuaXRsZXNzLTAuOC4xLnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LT0VHTXU2ZG1KWnRwYWRiNDc2SXNaQmNsS3ZJTGpvcGpVaWkzVis3TW5YSVFDWWg4VzNOZ05jZ3dvMjFuOUxYWlg2RURJS3ZxZmpZeFhlYkR3eEttUT09IgogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXV0aWxzLy0vZXNsaW50LXV0aWxzLTQuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xL3NBNGR3cnpCQXllVW9RNm94YWhIS21yWnZzbkxDZzRSZnhXM1pGR0dtUWtTTlFQRk5MVjlDVUVGUVAxeDlFWVhIVG81cDZ4ZGhaTTFOZTlwL0FmQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQtdmlzaXRvci1rZXlzIjogIl4zLjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCA+PTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogewotICAgICAgInZlcnNpb24iOiAiNC41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAvLS9yZWdleHBwLTQuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aNWJhNzNQOThPMUtVWUNDSlRVZVZwamE5UmNHb01kbmNaNlQ0OUZDVWwybE4zOEp0Q0orM1dnSURCdjBBdVk0V0NoVTVQbXRKbU9DVGxONkZaVEZLUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMC4wIHx8IF4xNC4wLjAgfHwgPj0xNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9lc2xpbnRyYy8tL2VzbGludHJjLTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNWd5Nk9RZmsreHgzcTBkNmpHWlpDM2YzS3pBa1hjL0lhblZ4ZDFpcy9WSUl6aVJxcXQzb25nUXowRmlUVVhxVGswYzdhREIzT2FGdUtudVNvSmljUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjYuMTIuNCIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjIiLAotICAgICAgICAiZXNwcmVlIjogIl45LjUuMiIsCi0gICAgICAgICJnbG9iYWxzIjogIl4xMy4xOS4wIiwKLSAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAotICAgICAgICAiaW1wb3J0LWZyZXNoIjogIl4zLjIuMSIsCi0gICAgICAgICJqcy15YW1sIjogIl40LjEuMCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIiwKLSAgICAgICAgInN0cmlwLWpzb24tY29tbWVudHMiOiAiXjMuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2FyZ3BhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgrOVdxZWJiRnpwWDlPUitXYTZPMjlhc0lvZ2VSTXpjR3RBSU5kcE1ISHlBZzEwZjA1YVNGVkJiY0VxR2YvUFh3MUVqQVorcTIvYkVCZzNEdnVySzNRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2dsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMy4yMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xMy4yMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZzVRdFZrQ3kva3YzRlVTbHU0dWtlWkRWZjllZTBpWExBVVlYMTNnYlIxN2JuZWpGVHpyNGlTOWJZN2t3Q2YxTnp0Uk5tMXQ5MWZqT2l5eDRDU3dQUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlLWZlc3QiOiAiXjAuMjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2pzLXlhbWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMteWFtbC8tL2pzLXlhbWwtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdweFpzOU5veFphSkVTSkdJWlR5REVhWXBsMEZLU0ErRkI5YUppeWVtS2hNd2t4UWc2M2g0VDFLSmdVR0hwVHFQRE5SY21tWUx1Z3JSakpsQnRXdlJBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFyZ3BhcnNlIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAianMteWFtbCI6ICJiaW4vanMteWFtbC5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9lc2xpbnRyYy9ub2RlX21vZHVsZXMvdHlwZS1mZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtMC4yMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OZStlRTRyMC9pV25wQXhEODUyejNBK04wQnQ1Uk4vL05qSndSZDJWRkhFbXJ5d3hmNXZzWmxoNFI2bGl4bDZCK3d6LzhkK21hVFNBa04xRklrSTNMUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvanMvLS9qcy04LjQzLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXMyVUhDb2lYZnhNdm1menFvTit2clE4NGFoVVNZZGU5cU5PMU1keG1vRWh5SFdzZm13T3BGbHdZVitlUEpFVmM3Z0ZuQVRHVWkzNzZXb3dYMU43dEZnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaHVtYW53aG9jb2Rlcy9jb25maWctYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaHVtYW53aG9jb2Rlcy9jb25maWctYXJyYXkvLS9jb25maWctYXJyYXktMC4xMS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS1ZWalFtTlVlcERWR1hOdW9SUmRtbUVqcnVqMEtmaUdTYlM4TFZjMTJMTXNXRFF6UlhKMHFkaE44TDh1VWlnS3BmRUhSaGxhUUZZMGliMXRuVWJOZVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGh1bWFud2hvY29kZXMvb2JqZWN0LXNjaGVtYSI6ICJeMS4yLjEiLAotICAgICAgICAiZGVidWciOiAiXjQuMS4xIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlci8tL21vZHVsZS1pbXBvcnRlci0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnh2ZVY0Vjh2NVliNG5jRlRUM3JQU2daQk9wQ2tqZksweTRvVlZWSndJdURWQlJNRFhyUHlYUkw5ODhpNWFwOW05Ym55RUVqV2ZtNVdrQm10ZmZMZkE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMi4yMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnpha2FzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaHVtYW53aG9jb2Rlcy9vYmplY3Qtc2NoZW1hIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL29iamVjdC1zY2hlbWEvLS9vYmplY3Qtc2NoZW1hLTEuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ablFNbkxWNGU3aERsVXZ3OEgrVThBU0wwMlNTMkduNis5QWMzd0dHTEllNytqZTJBZUFPeFBZK2l6SVBKRGZGRGI3ZURqZXYwVXM4TU8xaUZSTjhoQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnLy0vbG9hZC1ueWMtY29uZmlnLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WamVIU2xJenB2L055RDNOMFl1SGZYT1BESWl4Y0ExcTJaVjk4d3NNcWNZbFBtdjJuM1liMmxZUDlYTUVsbmFGVlhnNUE3WUxUZUx1NlY4NHVRRGptUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYW1lbGNhc2UiOiAiXjUuMy4xIiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjQuMS4wIiwKLSAgICAgICAgImdldC1wYWNrYWdlLXR5cGUiOiAiXjAuMS4wIiwKLSAgICAgICAgImpzLXlhbWwiOiAiXjMuMTMuMSIsCi0gICAgICAgICJyZXNvbHZlLWZyb20iOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZy9ub2RlX21vZHVsZXMvY2FtZWxjYXNlIjogewotICAgICAgInZlcnNpb24iOiAiNS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbWVsY2FzZS8tL2NhbWVsY2FzZS01LjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDI4U1RCMTcwbndXUzYzVWp0bEVPRTNkbGRRQXBhSlhaa09JMXVNRmZ6ZjNyUnVQZWdIYUhlc3llZStZeFErVzZTdlJEUVY2VXJkT2RSaVIxNTN3Smc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9zY2hlbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGlzdGFuYnVsanMvc2NoZW1hLy0vc2NoZW1hLTAuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aWFJZNGpOdlZnU1ZROERMM0xUY2FrYUF0WHdUVlV4RTgxaHNsc3lEMkF0b1hXL3dWb2IxMEhrT0oxWC9wQWxjSTdEKzJZb1pLZzVkbzhHL3c2UllnQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvbnNvbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvbnNvbGUvLS9jb25zb2xlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItME4weVpvZjVoaTQ0SEFSMnBQUytpa0ozbnpLTm9aZFZ1OEZmZlJmM3d5NDdJN0RtN2V0ay8zS2V0TWRSVXF6VmQxNlY0TzJtMklTcE5UYm5JdXF5MXc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9haXgtcHBjNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9haXgtcHBjNjQvLS9haXgtcHBjNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSGhtd2Q2Q0luWjNkd3B1R1RGOGZKRzZ5b1dtc1RvRSt2WWdENG55dFpWeGN1MXVsSHBVUVJBQjFVSjgrTjFBbTNNejQreE9CeW9Rb1NaZjREK0Nwa0E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicHBjNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImFpeCIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvbnNvbGUvbm9kZV9tb2R1bGVzL0BqZXN0L3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9hbmRyb2lkLWFybSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQtYXJtLy0vYW5kcm9pZC1hcm0tMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVkorc0t2TkEvR0U3Q2NhY2M5Q2hhN2JwUzhueXpWdjBqZFZnd05EYVI0Z0RNQy8yVFRSYzMzSXA4cXJOWVVjcGtPSFVUNU9aMGJVY05OVlpROVJMbGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJhbmRyb2lkIgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29uc29sZS9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9hbmRyb2lkLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYW5kcm9pZC1hcm02NC8tL2FuZHJvaWQtYXJtNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNkFBbUxHN3p3RDFaMTU5akNLUHZBeFpkNHkvVlRPMFZrcHJZeSszTjJGdEo4K0JRV0ZYVStPeEFSSXdBNDZjNXRkRDlTc0tHWi8xb2NxQlMvZ0FLSGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvbnNvbGUvbm9kZV9tb2R1bGVzL2plc3QtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJhbmRyb2lkIgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvY29yZS8tL2NvcmUtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Pais1QitzRE1pTVdMaFBGRis0L0R2SE9mK1UxMHJndkNMR1BIUDhYbHN5LzdReFM1MWFVL2VCbmd1ZEhsSlhuYVdENUVvaEFnSjRqcytUNnBhK3pPZz09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2FuZHJvaWQteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYW5kcm9pZC14NjQvLS9hbmRyb2lkLXg2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01amJiKzJoaERIeDVwaFlSMkJ5OEdUV0V6bjZJOVVxUjExS3dmMjJpS2JOcFlyc21SQjE4YVgvOWl2YzVjYWJjVWlBVC93TStZSVo2U0c5UU82YThrZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvcmVwb3J0ZXJzIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl40LjIuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtY2hhbmdlZC1maWxlcyI6ICJeMjkuNS4wIiwKLSAgICAgICAgImplc3QtY29uZmlnIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bm5lciI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC13YXRjaGVyIjogIl4yOS42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJhbmRyb2lkIgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9CisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvcmUvbm9kZV9tb2R1bGVzL0BqZXN0L3RyYW5zZm9ybSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHJhbnNmb3JtLy0vdHJhbnNmb3JtLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnFDcUVJU3I1OENlM1UrYnVORkpZVWt0TEpaT2dnZnl2UitiWk1haVYxZThCMVNJdkpid1pNcll6M2d4L0tBUG45RVhtT21OK3VCMDh5TENqV2tRUWc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9kYXJ3aW4tYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9kYXJ3aW4tYXJtNjQvLS9kYXJ3aW4tYXJtNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTjN6bCtseEhDaWZnSWxjTVVQNTAxNkVTa2VRakxqLzk1OVJ4eE5ZSXRoSWcrQ1FISW51akZ1WGVXYldNZ25UbzRjcDVYVkhxRlBtcHl1OUo2NUMxWWc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMi4wLjAiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeNC4wLjIiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZS9ub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2Rhcndpbi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9kYXJ3aW4teDY0Ly0vZGFyd2luLXg2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IUTlrYTRLeDIxcUhYd3RsVFVWYktKT0FubUcxaXBYaGRXVG1OWGlQelBmV0twWHFBU1ZjV2RuZjJibkw3M3dnak5yRlhBYTN5WXZCU2Q5cHpmRUlwQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImRhcndpbiIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvcmUvbm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2ZyZWVic2QtYXJtNjQvLS9mcmVlYnNkLWFybTY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdBMEJ4NzU5KzdKdmUwM0sxUzB2a091NUxnLzg1ZG91M0VzZU9HVWVzOGZsVk9HeGJoRERoL2laYW9lazExWThtdHlLUEdGM3ZQOFhobmtERUFtemVnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImZyZWVic2QiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZS9ub2RlX21vZHVsZXMvY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9mcmVlYnNkLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2ZyZWVic2QteDY0Ly0vZnJlZWJzZC14NjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVEdiTzI2WXcyeHNIenh0YlZGR0VYQkZIMEZSQVA3Z3RjUEU3UDV5UDd3R3k3Y1hLMm9PN1J5T2hMNU5MaXFUbEJoNDdYaG1JVVh1R2NpWEVxWUZmQlE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZS9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImZyZWVic2QiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlL25vZGVfbW9kdWxlcy9qZXN0LWhhc3RlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1oYXN0ZS1tYXAvLS9qZXN0LWhhc3RlLW1hcC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSs1MVhsZVREQUF5c3ZVOHJUNkFuUzFaSitXSFZOcWhqMWs2blR2TjJQWVArSGpVM2txbGFLUTFMbnczTllXM2JtMnI4dnE4MlgwWjFuRERIWk16SFZBPT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtYXJtIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtYXJtLy0vbGludXgtYXJtLTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxQREd5QzFKUERvdThrR2N5d1kwWUlMeldsaGhuUmpkb2YzVWxjb3FZbVM5RWw4MThMTGZKSmMzUFhYZ1pIckhDQUtzL1oyU2VadERKcjVNcmt4dE93PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCiAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFueW1hdGNoIjogIl4zLjAuMyIsCi0gICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAid2Fsa2VyIjogIl4xLjAuOCIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnNldmVudHMiOiAiXjIuMy4yIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlL25vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1hcm02NC8tL2xpbnV4LWFybTY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThid1g3YThGZ2hJZ3J1cGN4YjRhVW1ZRExwOHBYMDZyR2g1SHFEVDdiQis4UmRlbGxzNm1IdnJGSEhXMkpBT1BaVWJualVwS1RMZzZFQ3l6dmFzMkFRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvcmUvbm9kZV9tb2R1bGVzL2plc3QtcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLy0vamVzdC1yZXNvbHZlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRy9pUVV2WldJNWUzU01Gc3NjNHVnNGRIMGFaaVpwc0RxOW8xUHRYVFYxMjEwWnR5YjIrdytaZ1FrQjNpT2lDNVNtQUV6SkJPSFd6Nkh2cmQrUW5OUHc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1pYTMyIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtaWEzMi8tL2xpbnV4LWlhMzItMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHk5S3JkVm5iTU0yL3ZHOEtmVTBieWhVTitFRkNueTkrOGcyMDJnWXFTU1ZNb25ic0NmTGpVTytyQ2NpN3BNMFdCRXR6K29LL1BJd0hrenhreWhhckE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiaWEzMiIKKyAgICAgIF0sCiAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXBucC1yZXNvbHZlciI6ICJeMS4yLjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMjAuMCIsCi0gICAgICAgICJyZXNvbHZlLmV4cG9ydHMiOiAiXjIuMC4wIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvcmUvbm9kZV9tb2R1bGVzL2plc3QtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1sb29uZzY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtbG9vbmc2NC8tL2xpbnV4LWxvb25nNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaC8vL0xyNWE5cmliL3YxR0dxWFZHempMNFRNdlZUditzMURQb3hRZHo3bC9BWXY2TERTeGRJd3p4a3JQVzQzOG9VWGlEdHdNMTBvOVBtd1MvNlowTmc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAibG9vbmc2NCIKKyAgICAgIF0sCiAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlL25vZGVfbW9kdWxlcy9qZXN0LXZhbGlkYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXZhbGlkYXRlLy0vamVzdC12YWxpZGF0ZS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZHejB5TU41ZlVGUlJicEpEUHd4TXBnU1hXMUxES1JPSGZCb3BBdkRjbUQ2cytCL3M4V0pyd2krNGJmSDRTZEluQkE1QzNQM0JJMTlkQnRLengxQXJnPT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtbWlwczY0ZWwiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1taXBzNjRlbC8tL2xpbnV4LW1pcHM2NGVsLTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWl5UnJNMVB6eTlHRk1ETHNYbjFpSFVtMThuaEtuTk1Xc2NqbXA0K2hwYWZjWmpycjJXYlQvL2QyMHhhR2xqWERCWUhxUmNsOEhueGJYNnVhQS9lR1Z3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIm1pcHM2NGVsIgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvcmUvbm9kZV9tb2R1bGVzL2plc3Qtd29ya2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdvcmtlci8tL2plc3Qtd29ya2VyLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDNjY0JPYWJUZGtuZzhJL09SQ2tBRHo0ZVNNS2VqVFl2MXZCL1o4M1VpdWJxaEMxb1E1TGk2ZFdDeXFPSXZTaWZHalVCeHV2eHZsbTZLR0syRHR1QVE9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1wcGM2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXBwYzY0Ly0vbGludXgtcHBjNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOW1lTS9sUlh4TWk1UFNVcUVYUkN0VmpFWkJHd0I3UC9ENHlUOFVHL213SWR6ZTJhVjRWbzZVNWdEMytSc29IWEtrSENmU3haS3ptRHNzVmxSajFRUUE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicHBjNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgfSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZS9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1yaXNjdjY0Ly0vbGludXgtcmlzY3Y2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1acjdLUjRoZ0tVcFdBd2IxZjNvNXlnVDA0TXpxVnJHRUdYR0xuajE1WVFESkVyWXUvQkdnK3dtRmxJRE9kSnAwUG1CMGxMdnhGSU9YWmdGUnJkalIwdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJyaXNjdjY0IgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgfSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZS9ub2RlX21vZHVsZXMvcmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUuZXhwb3J0cy8tL3Jlc29sdmUuZXhwb3J0cy0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDJVVzZOdzNuL2FNZ0RWeSswclNxZ0hsdjM5V1pBbFpyWENkbmJ5RWlLbTE3RFNxSFg0TW1RTWFTVDNGYmVXUjVGVHVSY1V3WUF6aVphamppMFk3bWc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1zMzkweCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXMzOTB4Ly0vbGludXgtczM5MHgtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXNLbmNPY2dUTnZkdGlJU2MvalpzL1pmOGQwY2wvdDNnWVdYOEo5dWJCblZPd2xrNjVVSUVFdmdCT1JUaWxqbG9JV25CekxzNHFoelBrSmNpdEl6SWc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiczM5MHgiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXg2NC8tL2xpbnV4LXg2NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11cVpNVExyL3pSL2VkNGpJR253U0xrYUhtUGpPakp2bm02VFZWaXRBYTA4U0xTOVowVk04d0lSeDdnV2JKQjUvSjU0WXVJTUluRHF1V3lZdlFMWmtndz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yP3Nwb25zb3I9MSIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvY29yZS9ub2RlX21vZHVsZXMvd3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JpdGUtZmlsZS1hdG9taWMvLS93cml0ZS1maWxlLWF0b21pYy00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0t4YXVVZEJtU2RXbm1wYUdGZytwcE5qS0Y4dU5Mcnk4THl6amF1UURPVk9OZkZMTktyS3ZRT3haL1Z1VEljUy9nZ2UvWU5haGY1UklJUVdUU2FybGc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9uZXRic2QtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI1LjEyIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9uZXRic2QtYXJtNjQvLS9uZXRic2QtYXJtNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFh3Y1RxNEdoUk03SjlBOEd2NWJvYW5IaFJhL1E5S0xWbWN5WEhDVGFNNHdLZklwV2tkWGlNb2cvS3NueHpKMEExK25EK3pvZWN1enFQbUNSeUJHamc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpbXVybXVyaGFzaCI6ICJeMC4xLjQiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgfSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIm5ldGJzZCIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNi4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2Vudmlyb25tZW50IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9lbnZpcm9ubWVudC8tL2Vudmlyb25tZW50LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUVjVzQzQzdodUdkL3ZvZ1RkZE5OVERScE82dlEyemFRTnJ0dHZXVjE4QXJCeDlaNTZoN0JJc1hrTkZKVk9PNC9rYmxXRVF6MzBja3cwK0wzaXpjK1E9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9uZXRic2QteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbmV0YnNkLXg2NC8tL25ldGJzZC14NjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGQ1cFRselB5M1l3R2VjNE91SGgxYUNWQ1J2T1hkSDhEZ1JqZkR5L291bVZvdm11U3pXZm5TSmcrVnRha0I5Q20wZ3hOTzlCeldrajZtdE8xRk1Ya1E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yOS42LjIiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAibmV0YnNkIgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvZW52aXJvbm1lbnQvbm9kZV9tb2R1bGVzL0BqZXN0L3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9vcGVuYnNkLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC1hcm02NC8tL29wZW5ic2QtYXJtNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZkY5NlQ2S3NCby9wa1FJOTUwRkFSVTlhcEdOVFNsWkdzdjFqWkJBbGNMTDFNTGpMTklXUEJrajVObFN6OGFBellLZytlTnFrbnJVSjI0UUJ5YmVSNUE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIm9wZW5ic2QiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9lbnZpcm9ubWVudC9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9vcGVuYnNkLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL29wZW5ic2QteDY0Ly0vb3BlbmJzZC14NjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVp5WFVrWkhqUXhVdnpLN3JOOERKM1NSbXJWcmtlOFp5UnVzSGxQK2t1d3FUY2ZXTHlxTU9FM3NTY1BQeWVJWE4vbURKSWZHWHZjTXFDZ1lLZWtvUXc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9leHBlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2V4cGVjdC8tL2V4cGVjdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW02RHJFSnhWS2prRUxUVkF6dFRMeVMvN0M5MlkyYjBWWXFtRFJPWUtMTEFMSG44VC8wNHlQczcwTkFEVVlQclYzcnVJK0gzSjBpVUl1aGtqcDd2a2ZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImV4cGVjdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI5LjYuMiIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJvcGVuYnNkIgorICAgICAgXSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvZXhwZWN0LXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9leHBlY3QtdXRpbHMvLS9leHBlY3QtdXRpbHMtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ekloTThnbzNSVjJJRzRhSVphWmJ4d3BPenozWmlNMjNveEFsa3F1T0lvbGUrRzZUcmJlWG55a3hXWWxxRjdrejJIbEJqZEt0Y2EyMHg5YXRrRVFZZz09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL29wZW5oYXJtb255LWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQvLS9vcGVuaGFybW9ueS1hcm02NC0wLjI1LjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ybTBZV3NxVVNScmpuY1NYR0E3WnY3OE5ibnc0WEw2L2R6cjIwY3lyUWY3Wm1SY3NvdnBjUkJkaEQ0M051azN5N1hJb1cyT3hNVnZ3dVJ2azlYZEFTZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCiAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9leHBlY3QtdXRpbHMvbm9kZV9tb2R1bGVzL2plc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZ2V0LXR5cGUvLS9qZXN0LWdldC10eXBlLTI5LjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ldVpEbUlsV2ptMVowbEoxRDBmN2EwL3k1S2gva29MRk1VQkU1U1VZV3JteThvTmhKcGJUQkRBUDZDeEtuYWRjTUxEb0RmNHdhUllDZTM1Y0g2RzZQQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6ICJeMTAuMC4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIKLSAgICAgIH0sCisgICAgICAib3MiOiBbCisgICAgICAgICJvcGVuaGFybW9ueSIKKyAgICAgIF0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2Zha2UtdGltZXJzL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvc3Vub3MteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvc3Vub3MteDY0Ly0vc3Vub3MteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3R1NDRHl1VEhRVXp0MG5WN2JvY0R5NzJyMmxJMzNRTDNna0ROR2tvZDIyRXNZbDA0c01mMHFMYjhsdU5LVE9tZ0YvZURFRFA1QkZOd29CS0g0NDF3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCiAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAic3Vub3MiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9mYWtlLXRpbWVycy9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC93aW4zMi1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWFybTY0Ly0vd2luMzItYXJtNjQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItck1tTHJ1cjY0QTcrREtsblN1d3FVZFJLeWQzVUU3b1BKWm1ubGpxRXB0ZXNLTTh3eDlKOGd4NXUwKzlQcTBmUVFXOHZxZUtlYndOWGRmT3lQKzhCc2c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2Zha2UtdGltZXJzL25vZGVfbW9kdWxlcy9qZXN0LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9nbG9iYWxzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9nbG9iYWxzLy0vZ2xvYmFscy0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNqdUptTkRqczZhTWlqQ21TYTFnMlRORzRMYnkvQWVVNy8wMlZ0cFcrU0xjWlh6T0xLMkdwTjJuTHFjRmptaHkzQjNBb1BlUVZ4N0JueU9mNjgxYkF3PT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvd2luMzItaWEzMiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjUuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWlhMzIvLS93aW4zMi1pYTMyLTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhrcW5tbUJvQ2JDd3hVS0tOUEJpeGlXREdDcFFHVnNyUWZKb1ZHWUxQVDQxWFdGOGxIdUU1TjZXaFZpYTJuNG81UUs1TTR0WXIyMTgyN2ZOaGk0YnlRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImlhMzIiCisgICAgICBdLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L2V4cGVjdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yOS42LjIiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9nbG9iYWxzL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvd2luMzIteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzIteDY0Ly0vd2luMzIteDY0LTAuMjUuMTIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFsSkMwdUNacFRGclNMMENDRGpjZ2xlQlhQbkNyRUFoVEJJTHBlQXA3TS9PRmdvcXRBZXRmQnpYMHhNMDBNVXNWVlBwVmpsUHVNYlJFcW5aQ1hhVG5BPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCiAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9nbG9iYWxzL25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3JlcG9ydGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvcmVwb3J0ZXJzLy0vcmVwb3J0ZXJzLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1d0aWpydklhdjhMZ2ZKWmxyR0NkTjBuUDJFV2Jha2dsSlk0OUoxWTVRaWhjUUxmeTdvdnl4eGpKQlJYTU5sdGd0NHVQdEVjRm1JTWJWc2hFRGZGV3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJjb2UvdjgtY292ZXJhZ2UiOiAiXjAuMi4zIiwKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogIl41LjEuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItcmVwb3J0IjogIl4zLjAuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItc291cmNlLW1hcHMiOiAiXjQuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMS4zIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNC4wLjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiLAotICAgICAgICAidjgtdG8taXN0YW5idWwiOiAiXjkuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3JlcG9ydGVycy9ub2RlX21vZHVsZXMvQGplc3QvdHJhbnNmb3JtIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1acUNxRUlTcjU4Q2UzVStidU5GSllVa3RMSlpPZ2dmeXZSK2JaTWFpVjFlOEIxU0l2SmJ3Wk1yWXozZ3gvS0FQbjlFWG1PbU4rdUIwOHlMQ2pXa1FRZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMi4wLjAiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeNC4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMvbm9kZV9tb2R1bGVzL0BqZXN0L3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3JlcG9ydGVycy9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMvbm9kZV9tb2R1bGVzL2NvbnZlcnQtc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9jb252ZXJ0LXNvdXJjZS1tYXAtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUt2cDQ1OUhyVjJGRUoxQ0FzaTFLdStNWTNrYXNIMTlURnlrVHoyeFdtTWVxNmJrMk5VM1hYdmZKK1E2MW0weGt0V3d0KzFIU1lmM0pac1RtczNhUkpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3JlcG9ydGVycy9ub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4wLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgIndhbGtlciI6ICJeMS4wLjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMvbm9kZV9tb2R1bGVzL2plc3QtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3JlcG9ydGVycy9ub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy93cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03S3hhdVVkQm1TZFdubXBhR0ZnK3BwTmpLRjh1TkxyeThMeXpqYXVRRE9WT05mRkxOS3JLdlFPeFovVnVUSWNTL2dnZS9ZTmFoZjVSSUlRV1RTYXJsZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpbXVybXVyaGFzaCI6ICJeMC4xLjQiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3Qvc2NoZW1hcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3Qvc2NoZW1hcy8tL3NjaGVtYXMtMjkuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yeExqWHlKQlRMNExRZUpXM2FLbzBNLytHa0NPWHNPKzhpOUl1N2VEYjZLd3RQNjVheW9Ec2l0cmRQQnR1anhRODhrNHdJMkZOWWZhNlRPR3dTbjZjUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBzaW5jbGFpci90eXBlYm94IjogIl4wLjI3LjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0yOS42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9BK0kyU0hIUUd4RENacGJyc0NRU29NTGIzQno1NDdKbk0ralVyOXFFYnV3MHZRbFdaZnBQUzdDTzlKN1hpd0tpY0V6OU9Gbi9JWW9Ma2tpVUQ3YnpBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4xOCIsCi0gICAgICAgICJjYWxsc2l0ZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3Rlc3QtcmVzdWx0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90ZXN0LXJlc3VsdC8tL3Rlc3QtcmVzdWx0LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM1ZLRlh6Y1Y0MkVZaE1Dc0pRVVJwdFNxbnlqcUNHYnRMdVg1WHhiNlBtNmdVZjF3SVJJbCttYW5kSVJHSnlXS2dOS1lGOWNuc3R0aTZMczVla2R1cXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXJlc3VsdC9ub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdGVzdC1yZXN1bHQvbm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdGVzdC1zZXF1ZW5jZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3Rlc3Qtc2VxdWVuY2VyLy0vdGVzdC1zZXF1ZW5jZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HVllpNlBmUHdWZWpPN3NsdzZJRE8wcUtWdW01anRySjNLb0xHYmdCV3lyMnFyNEdheEZWNnN1K1pBamRUWDc1U3IxRGtNRlJrMDlyMlpWYSt3dENHdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3Rlc3Qtc2VxdWVuY2VyL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXNlcXVlbmNlci9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXNlcXVlbmNlci9ub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4wLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgIndhbGtlciI6ICJeMS4wLjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdGVzdC1zZXF1ZW5jZXIvbm9kZV9tb2R1bGVzL2plc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZWdleC11dGlsLy0vamVzdC1yZWdleC11dGlsLTI5LjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRGZ2xaYU1tV1hiR0hTUUluZlhld0lzZDFMTW45cDNaWEIvNnI0Rk9reWhYMi9pUC9zb01HOThqR3ZrL0EzSEFONzgrNVZXY0JHTzBCSkFQUmg0a2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3Rlc3Qtc2VxdWVuY2VyL25vZGVfbW9kdWxlcy9qZXN0LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXNlcXVlbmNlci9ub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdGVzdC1zZXF1ZW5jZXIvbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3RyYW5zZm9ybS8tL3RyYW5zZm9ybS0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlwT042V3RZZ2wvMTMyOWc1QUlKVmJVdUVoMHdaVmJkcEd3Qzk5Snc0THd1b0JOUzk1TVZwaFU2ek9lRDlwRGtvbitMTGJGTDdsT1FSYXBiQjhTQ0h3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjEuMCIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS40LjAiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90cmFuc2Zvcm0vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4NDZpSjlRcHdRVGpJZHE1Vkp1MlFUTU1zM1FsRWpJMHgxUWJCUDVXMStuTXp5YzJYbWltaVJSL0NiWDlUTzBjUFRlVWx4V01PdThtc2xZc0o4REV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTYuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nLy0vZ2VuLW1hcHBpbmctMC4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhMaFNXT0xSaTg3NXpqak1HL3IrTnYwb0NXOHVtR2IwQmdFaHlYM2REWDNlZ3dadEI4UHFMbmp6M3llZHQ4UjVTdEJyemNnNGFCcG5oOFVBOUQxQm9RPT0iLAorICAgICAgInZlcnNpb24iOiAiMC4zLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy8tL2dlbi1tYXBwaW5nLTAuMy4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmtrdC83bmlKNk1nRVB4RjBiWWRRNmV0WmFBK2ZRdkRjTEtja2h5MXlJUU96YW9LakJCalNqNjMvYUxWallFM3FoUnQ1ZHZNK3VVeWZDZzZVS0NCYkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvc2V0LWFycmF5IjogIl4xLjAuMSIsCi0gICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiAiXjEuNC4xMCIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjAuMCIKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICJeMS41LjAiLAorICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9yZW1hcHBpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvcmVtYXBwaW5nLy0vcmVtYXBwaW5nLTIuMy41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MSTl1LytsYVlHNERzMVRES1NKVzJZUHJJbGNWWU93aTJmVUM2eEI0M2x1ZUNqZ3hWNGxmZk9DWkN0WUZpSDZUTk9YK3RRS1h4OTdUNElLSGJoeUhFUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjUiLAorICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI0IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS8tL3Jlc29sdmUtdXJpLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GMm1zbGEzdGFkK01maHQ1Y0pxN0xTWGNkdWRLVFdDVllVZ3c2cExGT09IU1R0WmxqNlNXTllBcCtBaHVxTG1XZEJPMlg1aFByTGN1OGNWUDhmeTI4dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9zZXQtYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvc2V0LWFycmF5Ly0vc2V0LWFycmF5LTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14bmtzZXVOQURNMGd0MmJzK0J2aE8wcDc4TWs3NjJZblpkc3V6RlYwMThOb0cxU2oxU0NRdnBTcWE3WFVhVGFtNXZBR2FzQUJWOXFYQVNNS25GTXdNdz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS8tL3Jlc29sdmUtdXJpLTMuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iUklTZ0NJalAyMC90YldTUFdNRWk1NFFWUFJaRXhrdUQ5bEpMK1VJeFVLdHdWSkE4d1cxVHJiMWpNczFSRlhvMUNCVE5aLzVocEM5UXZtS1dkb3BLdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49Ni4wLjAiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIrZnNaWGVMWWk5ZkVVTG1mQnJoeG40SXJQbElOZjhmaU5hcnpUb2YwMDR2M2xGZG50ZHdhOVBGN3ZGSnFtM21nN3MrU2NKTXhYYUUzQWNwMWlyWmNnPT0iLAorICAgICAgInZlcnNpb24iOiAiMC4zLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuMy42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xWkpUWmViZ3FsbE83OXVlMmJtM3JJR3VkL2JPZTBwUDVCalNSQ1J4eFlrRVpTOFNUVjd6Tjg0VUJiaVl1N2p5K2VDS1NuVklVZ29XV0UvdHQrc2hNUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjAiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjkiCisgICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjUiLAorICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI1IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMTUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYy8tL3NvdXJjZW1hcC1jb2RlYy0xLjQuMTUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVGMnJ4Q1J1bEVLWEhUUmlEckR5NmVyTVlXcU53NExQZFE4VVFBNGh1dXhhUXNWZVJQRmwyb004b0RHeE1GaEpVV1pmOU1jcEx0SmFzRERaYi9CcGVnPT0iCisgICAgICAidmVyc2lvbiI6ICIxLjUuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjLy0vc291cmNlbWFwLWNvZGVjLTEuNS41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jWVE5MzEwZ3JxeHVlV2JsK1d1SVVJYWlVYURjajdXT3E1ZlZoRWxqTlZnUmZPVWhZOWZ5MnpUdmZvcVdzbmViaDhTbDcwVlNjRmJJQ3ZKbkxLQjBPZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjE4IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nLy0vdHJhY2UtbWFwcGluZy0wLjMuMTgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXcrbmlKWXpNSGRkN1VTZGlIMlU2ODY5bnFoRDJuYmZaWE5ENVlwOTNxSWJFbW5ETms3UEQ0OG8rWWNoUlZwek1VN002alZDYmVuVFI3UEExRkxROXBBPT0iLAorICAgICAgInZlcnNpb24iOiAiMC4zLjMxIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC90cmFjZS1tYXBwaW5nLy0vdHJhY2UtbWFwcGluZy0wLjMuMzEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXp6TlIrU2RRU0RKemM4am9hZVA4UVFvQ1FyOE51WXgyZElJeXRsMVFlQkVaSEo5dVc2aGVic3JZZ2J6OGhKd1VRYW8zVFdDTXRtZlY4TnUxdHdPTEF3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpIjogIjMuMS4wIiwKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICIxLjQuMTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4xNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjLy0vc291cmNlbWFwLWNvZGVjLTEuNC4xNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFBTSkhXbWkzOTRmdVV1ekRuR3oxd2lLcVdmbzF5WGVjSFFNUmYybDZoenRUTytuUHJ1NjU4QXlEbmdhQmU3aXNJeEVrUnNQUjNGWmgrczdpVmE0VXc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGxlaWNodGdld2ljaHQvaXAtY29kZWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGxlaWNodGdld2ljaHQvaXAtY29kZWMvLS9pcC1jb2RlYy0yLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSGN2K25WQzBrWm5RM3REOUdWdTV4U01SNFZWWU90ZVFJci9od0ZQVkV2UGRsWHFnR0V1UmppaGVDaEhnZE0rSnlxZGdOY216Wk9YL3RubDBKT2lJN0E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQG5pY29sby1yaWJhdWRvL2VzbGludC1zY29wZS01LWludGVybmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xLXYxIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Abmljb2xvLXJpYmF1ZG8vZXNsaW50LXNjb3BlLTUtaW50ZXJuYWxzLy0vZXNsaW50LXNjb3BlLTUtaW50ZXJuYWxzLTUuMS4xLXYxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01NC9KUnZrTEl6ekRXc2hDV2Z1aGFkZnJmWlZQaUVsWThGY2dtZzFIcm9FbHkvRURTc3p6aEJBc2FyQ3V4K0Qva09zbFRScXVOenV5R1NtVVNUVEhHZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQtc2NvcGUiOiAiNS4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BuaWNvbG8tcmliYXVkby9lc2xpbnQtc2NvcGUtNS1pbnRlcm5hbHMvbm9kZV9tb2R1bGVzL2VzbGludC1zY29wZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtc2NvcGUvLS9lc2xpbnQtc2NvcGUtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJOeHdiRi9oWjBLcGVwWU4wY05ibytGTjZYb0s3R2FIbFFoZ3gvaElabDZWYTBiRjQ1UlFPT3doTEl5OGxRRGJ1Q2lhZFNMQ0JuSDJDRllxdWl0NWJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzcmVjdXJzZSI6ICJeNC4zLjAiLAotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNC4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BuaWNvbG8tcmliYXVkby9lc2xpbnQtc2NvcGUtNS1pbnRlcm5hbHMvbm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM5bm5LZmZXejh4TjFCVS8yYzc5bjluQjlIRHpvMG5pWVVxeDZ4eXFVbnlvQW5ReXlXcE9UZFpFZWlDY2g4QkJ1NTE1dDR3cDlabWdWZlZobjlFQnB3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC4wIgorICAgICAgICAiQGpyaWRnZXdlbGwvcmVzb2x2ZS11cmkiOiAiXjMuMS4wIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICJeMS40LjE0IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyIjogewogICAgICAgInZlcnNpb24iOiAiMi4xLjUiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bub2RlbGliL2ZzLnNjYW5kaXIvLS9mcy5zY2FuZGlyLTIuMS41LnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12cTI0QnEzeW01SEVRbTJOS0NyM3lYRHdqYzd2VHNFVGhSRG5rcDJESzlwMXVxTFIrREh1cm0vTk9UbzBLRzdIWUhVN2VwcEtaajNNeXFZdU1CZjYyZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgIkBub2RlbGliL2ZzLnN0YXQiOiAiMi4wLjUiLAogICAgICAgICAicnVuLXBhcmFsbGVsIjogIl4xLjEuOSIKQEAgLTM3MTAsNiArMTAwNyw3IEBACiAgICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5vZGVsaWIvZnMuc3RhdC8tL2ZzLnN0YXQtMi4wLjUudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJraFBQcDJ6cnFEQVFBLzJqTmhuenRjUEFsdjY0WGRoSXA3YTc0NTRBNW92STdCdWt4Z3Q3TVg3dWR3QXUzemcxRGNwUFUwcnozVlYxU2VhcXZZNCtBPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj0gOCIKICAgICAgIH0KQEAgLTM3MTgsNiArMTAxNiw3IEBACiAgICAgICAidmVyc2lvbiI6ICIxLjIuOCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5vZGVsaWIvZnMud2Fsay8tL2ZzLndhbGstMS4yLjgudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9HQitVeGxnV2NnUWtnd284R2NFR3dlbW9URnQzRklPOWFiYWJCbWFHd1hJb0JLWitHVHkwcFAxODViZUdnN0xsaWgvTlNIU1YyWEFzMWxuem5vY1NnPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiQG5vZGVsaWIvZnMuc2NhbmRpciI6ICIyLjEuNSIsCiAgICAgICAgICJmYXN0cSI6ICJeMS42LjAiCkBAIC0zNzI2LDUwNyArMTAyNSw0MDggQEAKICAgICAgICAgIm5vZGUiOiAiPj0gOCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBtbW13aC9yZWFjdC1yZWZyZXNoLXdlYnBhY2stcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcG1tbXdoL3JlYWN0LXJlZnJlc2gtd2VicGFjay1wbHVnaW4vLS9yZWFjdC1yZWZyZXNoLXdlYnBhY2stcGx1Z2luLTAuNS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItajBZYTBoQ0ZaUGQ0eDQwcUx6YmhHc2g5VE10ZGIrQ0pRaXNvK1d4TE9QTmFzb2hxOWNjNVNOVWN3c1phUkg2KytYaDkxWGttL3hIQ2t1SWlJdTBMVUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1odG1sLWNvbW11bml0eSI6ICJeMC4wLjgiLAotICAgICAgICAiY29tbW9uLXBhdGgtcHJlZml4IjogIl4zLjAuMCIsCi0gICAgICAgICJjb3JlLWpzLXB1cmUiOiAiXjMuMjMuMyIsCi0gICAgICAgICJlcnJvci1zdGFjay1wYXJzZXIiOiAiXjIuMC42IiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKLSAgICAgICAgImh0bWwtZW50aXRpZXMiOiAiXjIuMS4wIiwKLSAgICAgICAgImxvYWRlci11dGlscyI6ICJeMi4wLjQiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjcuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvd2VicGFjayI6ICI0LnggfHwgNS54IiwKLSAgICAgICAgInJlYWN0LXJlZnJlc2giOiAiPj0wLjEwLjAgPDEuMC4wIiwKLSAgICAgICAgInNvY2tqcy1jbGllbnQiOiAiXjEuNC4wIiwKLSAgICAgICAgInR5cGUtZmVzdCI6ICI+PTAuMTcuMCA8NC4wLjAiLAotICAgICAgICAid2VicGFjayI6ICI+PTQuNDMuMCA8Ni4wLjAiLAotICAgICAgICAid2VicGFjay1kZXYtc2VydmVyIjogIjMueCB8fCA0LngiLAotICAgICAgICAid2VicGFjay1ob3QtbWlkZGxld2FyZSI6ICIyLngiLAotICAgICAgICAid2VicGFjay1wbHVnaW4tc2VydmUiOiAiMC54IHx8IDEueCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAdHlwZXMvd2VicGFjayI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzb2NranMtY2xpZW50IjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInR5cGUtZmVzdCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAid2VicGFjay1ob3QtbWlkZGxld2FyZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJ3ZWJwYWNrLXBsdWdpbi1zZXJ2ZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBtbW13aC9yZWFjdC1yZWZyZXNoLXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9maW5kLXVwIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAvLS9maW5kLXVwLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03OC9QWFQxd2xMTERnVHpEczdzanE5aHp6MHZYRCt6bis3d3lwRWU0ZlhReENtZG1xZkdzRVBReG1pQ1NRSTNhakZWOTFiVlNzdk50ckpSaVc2bkduZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2NhdGUtcGF0aCI6ICJeNi4wLjAiLAotICAgICAgICAicGF0aC1leGlzdHMiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvbG9jYXRlLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaVBaSzZlWWpieFJ1M3VCNC9XWjNFc0VJTUpGTXFBb29wbDNSK3p1cTBVamNBbS9NTzZLQ3dlRGdQZlAzZWxUenRvS1AzS3RuVkh4VG4yTkhCU0RWVXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC1sb2NhdGUiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvcC1saW1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFlPYW5NM3dHd05Hc1pOMmNWVFlQQXJ3NDU0eG5YajVxbVdGMWJFb0FjNCtjVS9vbDdHVmg3b2RldmpwMUZOSGR1SGMzS1pNY0ZkdXhVNVhjNnVKUlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieW9jdG8tcXVldWUiOiAiXjAuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvcC1sb2NhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGFOanRSV1VCWSsrekI1bkUvTndjYW9NeWxTUGsrUytaSE5CMVR6ZGJNSk1ueTZkeW5wQUd0N1gvdGwvUVlxM1RJZUU2bnhIcHBibzJMR3ltckc1UHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC1saW1pdCI6ICJeMy4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9wbHVnaW4tYmFiZWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW4tYmFiZWwvLS9wbHVnaW4tYmFiZWwtNS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdGZmRMV1UveFZXS2VSUW5LbUlBUVVMVUk3SWwwZ1puQklIL1pGTzA2OXdZSWZQdSs4enJmcC9LTVcwYXRtRUxvUkRxOEZiaVAzVkNzczlNaEN1dDdRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMiOiAiXjcuMTAuNCIsCi0gICAgICAgICJAcm9sbHVwL3BsdWdpbnV0aWxzIjogIl4zLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4xLjkiLAotICAgICAgICAicm9sbHVwIjogIl4xLjIwLjB8fF4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlLy0vcGx1Z2luLW5vZGUtcmVzb2x2ZS0xMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXljMm40M2pjcVZ5R0Uyc3FWNS9ZQ21vY3k5QXJqVkFQL0JlWHlUdEFEVEJCWDZWMGU1VU1xd084Q2RRMGt6amI2enU1UDFxTXpzU2NDTVJ2RTlPbFZnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkByb2xsdXAvcGx1Z2ludXRpbHMiOiAiXjMuMS4wIiwKLSAgICAgICAgIkB0eXBlcy9yZXNvbHZlIjogIjEuMTcuMSIsCi0gICAgICAgICJidWlsdGluLW1vZHVsZXMiOiAiXjMuMS4wIiwKLSAgICAgICAgImRlZXBtZXJnZSI6ICJeNC4yLjIiLAotICAgICAgICAiaXMtbW9kdWxlIjogIl4xLjAuMCIsCi0gICAgICAgICJyZXNvbHZlIjogIl4xLjE5LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJvbGx1cCI6ICJeMS4yMC4wfHxeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZS9ub2RlX21vZHVsZXMvYnVpbHRpbi1tb2R1bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1aWx0aW4tbW9kdWxlcy8tL2J1aWx0aW4tbW9kdWxlcy0zLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemhhQ0RpY2RMdVdONVViTjVJTW5GcU5NaE5mbzkxOXNIODV5Mi9lYSs1WWc5VHNUa2VaeHBMK0pMYnA2Y2dZRlM0c1JMcDNZVjRTNnlEdXFWV0hZT3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcGx1Z2luLXJlcGxhY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW4tcmVwbGFjZS8tL3BsdWdpbi1yZXBsYWNlLTIuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JR2N1K2N5ZGxVTVo1RW44NWp4SEg0cWoyaHRhLzExQkhxOTVpSEV5YjJzYmdpTjBlQ2R6dlVjSHc1Z3Q5cEJMNWxUaTRKRFlKMWFjQ29NR3BUdkVaZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAcm9sbHVwL3BsdWdpbnV0aWxzIjogIl4zLjEuMCIsCi0gICAgICAgICJtYWdpYy1zdHJpbmciOiAiXjAuMjUuNyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJvbGx1cCI6ICJeMS4yMC4wIHx8IF4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9wbHVnaW51dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3BsdWdpbnV0aWxzLy0vcGx1Z2ludXRpbHMtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdrc1o2cHI2VHBJakhtOGg5bFNROHBpOEJFOVZldWJOVDBPTUozQjV1Wko4cHo3M05QaXFPdENvZy94Mi9Rek0xRU5DaFBLeE1EaGlRdVJIc3FjK2xnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiMC4wLjM5IiwKLSAgICAgICAgImVzdHJlZS13YWxrZXIiOiAiXjEuMC4xIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDguMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicm9sbHVwIjogIl4xLjIwLjB8fF4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9wbHVnaW51dGlscy9ub2RlX21vZHVsZXMvQHR5cGVzL2VzdHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC4zOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2VzdHJlZS8tL2VzdHJlZS0wLjAuMzkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVZTndwM2JVKzk4Y3BVNGxBV1lZTDdaeisyZ3J5V0gxcWJkRFRpZFZkNmhraVI2d2Vrc2RiTWFkeVhLWE5QRWtRRmhYTStoVk85Wnlnb21IWHArQUl3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BydXNoc3RhY2svZXNsaW50LXBhdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BydXNoc3RhY2svZXNsaW50LXBhdGNoLy0vZXNsaW50LXBhdGNoLTEuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WK012R3dhSEgwM2hZaFkrazZFZi94S2Q2UllsYzRxOFdCeCsyQU5taXBISmNLdWt0TmNJL05nRXNKZ2RTVUY2THczMm5qVDZPbnJSc0tZQ2RnSGpZdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac2luY2xhaXIvdHlwZWJveCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjcuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbmNsYWlyL3R5cGVib3gvLS90eXBlYm94LTAuMjcuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK0ZqNDNwU013SnM0S1JySC85MzhVZit1QUVMSWdWQm1RemcvcTFZRzEwZGp5ZkEzVG5yVThOOFh6cUNoL29rWmRzenFCUVRaZjk2aWRNZkU1bG53VEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2NvbW1vbnMvLS9jb21tb25zLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qWEJ0V0FGNHZtZE5tWmdENUZvS3NWTHYzclBnRG5MZ1BiVTg0TElKM290VjQ0dkpsRFJva1ZuZzV2OE5GSmRDZi9kYTlsZWdIY0thUnVaczRMN2ZhQT09IiwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsZG93bi9wbHVnaW51dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4wLWJldGEuMjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsZG93bi9wbHVnaW51dGlscy8tL3BsdWdpbnV0aWxzLTEuMC4wLWJldGEuMjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStkMEY0TUtNQ2JlVlVKd0c5NnVRNFNnQXpuWk5TcTkzSTNWKzlOSEE0T3B2cUc4bVJDcEdkS21LOGwvZGwwMmgyQ0NESHdXMkZxaWxuVHlEY0FucWpBPT0iLAogICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInR5cGUtZGV0ZWN0IjogIjQuMC44IgotICAgICAgfQorICAgICAgImxpY2Vuc2UiOiAiTUlUIgogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9mYWtlLXRpbWVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbm9uanMvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy0xMC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVY0QkcwN2t1WVNVa1RDU0JIRzhHOFROaE0rRjE5alhGV25RdHpqK3dlOERya3BTQkNlZTlaM01zOHlpR2VyL2RsbWhlMzUvWGRneW8zLzByUUtnN1lBPT0iLAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm0tZWFiaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm0tZWFiaS8tL3JvbGx1cC1hbmRyb2lkLWFybS1lYWJpLTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV09oTlc5SzhiUjNrZjR6THhiZmc2UHh1MnliT1ViQjJBak1ESFNReDg2TElGNHJINEZ0N3ZtTXdOdDBsb08wZW9uZ2xTTnk0Y3BEM01LWFhLUXUwL0E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHNpbm9uanMvY29tbW9ucyI6ICJeMy4wLjAiCi0gICAgICB9CisgICAgICAib3MiOiBbCisgICAgICAgICJhbmRyb2lkIgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3VybWEvcm9sbHVwLXBsdWdpbi1vZmYtbWFpbi10aHJlYWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN1cm1hL3JvbGx1cC1wbHVnaW4tb2ZmLW1haW4tdGhyZWFkLy0vcm9sbHVwLXBsdWdpbi1vZmYtbWFpbi10aHJlYWQtMi4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxSOHEvOVc3aFpwTVd3ZU5pQUtVN05RZXJCbnpRUUx2aThxblREVS9meEl0UGh0WlZNYlBWM2xiQ3dqaElsTkJlOUJicjVWK0tIc2h2V21WU0c5Y3hRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVqcyI6ICJeMy4xLjYiLAotICAgICAgICAianNvbjUiOiAiXjIuMi4wIiwKLSAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4yNS4wIiwKLSAgICAgICAgInN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwiOiAiXjQuMC42IgotICAgICAgfQorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm02NC8tL3JvbGx1cC1hbmRyb2lkLWFybTY0LTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdTZKSExsbDVRS1J2amNpRTc4YlFYRG1xUnFOczVNLzNHVnFaZU13dm1qYU5PREppaC9XSXJKbEZWRWlodlYwTWlZRm1kK1p5UHI5d3hPVmJQQUcySXc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImFuZHJvaWQiCisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdmdyL2JhYmVsLXBsdWdpbi1hZGQtanN4LWF0dHJpYnV0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wbHVnaW4tYWRkLWpzeC1hdHRyaWJ1dGUvLS9iYWJlbC1wbHVnaW4tYWRkLWpzeC1hdHRyaWJ1dGUtNS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpGZjJncy84LzZCOFBuU29mSTBpbllYcjJTRE5URFNjUFhoTjdrNUVxRDRhWjNnaTZ1K3JibVpIVkI4SU0zd0R5eDhudEtBQ1pidFhTbTdvWkdScVZnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2dyZWdiZXJnZSIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWRhcndpbi1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtZGFyd2luLWFybTY0Ly0vcm9sbHVwLWRhcndpbi1hcm02NC00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFFRjdDc0tLelNSYzIwQ2l1Mlp3MXdSckJ6NGc1NkY3ci92UndZNDMwVVBwL250MXgyMVEvZnBKOU41bDQ3V1d2SmxrTkNQSnozUVJWdzAwOGZpN3lBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJkYXJ3aW4iCisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdmdyL2JhYmVsLXBsdWdpbi1yZW1vdmUtanN4LWF0dHJpYnV0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1hdHRyaWJ1dGUvLS9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1hdHRyaWJ1dGUtNS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlhUzRvMlBnVXR3TEZHVEtic2lBeTZEMG8zdWdjVWhXSzBaNDV1bUo2NkVQV3VuQXo5ZnVGdzJnSnVqZTZ3cVF2UVdPVEp2SWFoVXduZE9YYjdRQ1BnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2dyZWdiZXJnZSIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWRhcndpbi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWRhcndpbi14NjQvLS9yb2xsdXAtZGFyd2luLXg2NC00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdBRFlveko0UUNuWENINHdQQiszRnVHbURQb0ZzZVZDVXJBTm1BNUxXd0dtQzZGTDE0QldDN3BjcStGc3RPWnYzYmFHWDY1dFozNzh1VDZXRzh5blR3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3Znci9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1lbXB0eS1leHByZXNzaW9uIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL2JhYmVsLXBsdWdpbi1yZW1vdmUtanN4LWVtcHR5LWV4cHJlc3Npb24vLS9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1lbXB0eS1leHByZXNzaW9uLTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MQTcyKzg4QTExTkQveUZJTXp5dUxSU01KK3RSS2VZS2VRK21SM0RjQVo1STRoNUNQV045QUh5VXpKYldTWXAvdTJ1MHhobWdPZTArRTQxK0dqRXVlQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ncmVnYmVyZ2UiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1mcmVlYnNkLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1mcmVlYnNkLWFybTY0Ly0vcm9sbHVwLWZyZWVic2QtYXJtNjQtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02Yjh3R0hKbERyR2VTRTNhSDVtR05IQmpBMFRUa3hkb05IaWs1RWt2UEhDdDM1MVhuaWdBNHBTN1dzai9FbzlZOFJCVTZmMzVjak45U1ltQ0ZCdHp4dz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZnJlZWJzZCIKKyAgICAgIF0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHN2Z3IvYmFiZWwtcGx1Z2luLXJlcGxhY2UtanN4LWF0dHJpYnV0ZS12YWx1ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wbHVnaW4tcmVwbGFjZS1qc3gtYXR0cmlidXRlLXZhbHVlLy0vYmFiZWwtcGx1Z2luLXJlcGxhY2UtanN4LWF0dHJpYnV0ZS12YWx1ZS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUG9pRTZaRDJFaXk1bUsrZmpIcXdHT1MrSVhYMHdxL1lEdE55SWdPcmM2ZWpGbnhONGIxM3BScGlJUGJ0UHdIRWMrTlQyS0NqdGVBY3EzMy9GMVk5S1E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZ3JlZ2JlcmdlIgotICAgICAgfQorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtZnJlZWJzZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWZyZWVic2QteDY0Ly0vcm9sbHVwLWZyZWVic2QteDY0LTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDI1R2EwdDRqYXlsTUI4TS9KS0F5cnZ2ZnhHUmpuUFFJUjhsbkNheXl6RWpFT3gyRUpJbElpTWJocFd4RFJLR0tGOGpiTkgwMU5uTjY2M2RINjM4bUE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJmcmVlYnNkIgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3Znci9iYWJlbC1wbHVnaW4tc3ZnLWR5bmFtaWMtdGl0bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXN2Zy1keW5hbWljLXRpdGxlLy0vYmFiZWwtcGx1Z2luLXN2Zy1keW5hbWljLXRpdGxlLTUuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16U09aSDhQZFpPcHVHMVpWeC9jTFZlUEIyaWJvM1dQcHFvN2dGSWpMVjlhMFFzdVFBekppd3dxbXVFZFRhVzJwZWd5QkUxN1V1MTVtT2dPY2dhYlFaZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ncmVnYmVyZ2UiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmLy0vcm9sbHVwLWxpbnV4LWFybS1nbnVlYWJpaGYtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SemVCd3YwQjNxdFZCV3RjdUFCdFN1Q3pUb28ySUVBSVFyY3lCL2Iyek12QldWYmpvOGJaRGpBQ1VwbmFhZmF4aFR3MlcraW1RYlAyQkQxdXNhc0s0Zz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm0iCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3Znci9iYWJlbC1wbHVnaW4tc3ZnLWVtLWRpbWVuc2lvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXN2Zy1lbS1kaW1lbnNpb25zLy0vYmFiZWwtcGx1Z2luLXN2Zy1lbS1kaW1lbnNpb25zLTUuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jUHpEYkRBNW9UL3NQWERDVVlvVlhFbW0zVklvQVdBUFQ2bVNQVEpOYlFhQk5VdUVLVkt5R0g5M29EWTRlNDJQWUhSVzY3TjVhbEp4L2VFb2wyMGFidz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ncmVnYmVyZ2UiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm0tbXVzbGVhYmloZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtLW11c2xlYWJpaGYvLS9yb2xsdXAtbGludXgtYXJtLW11c2xlYWJpaGYtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TZjd6dXNOSTJDSVUxSEx6dXU5VGM1WUdBSEVaczVMdTdOMXNzSkc0VGt3NmUwTUVzTjdOZGpVRERmR05IeTJJVStFTnlXVCtMMm9iZ1dpZ3VXaWJXUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm0iCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3Znci9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LW5hdGl2ZS1zdmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1uYXRpdmUtc3ZnLy0vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1uYXRpdmUtc3ZnLTUuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVlQL1Nhb3BaNDFHSHdYbWE3Um14Y3Y5dVJzbFJEVFkxZXN0c3BlQjF3MXVlWldkL3RQbE1mRU9vY2NZcEVNWlUzakQ0T1U3WWl0blhjRjVoTFcyUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ncmVnYmVyZ2UiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LWdudS8tL3JvbGx1cC1saW51eC1hcm02NC1nbnUtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EWDJ4N0NNY3JKenNFOTFxNy9PMDJJSlE1L2FMa1Z0WUZyeXFDamR1SmhVZkdLRzZ5SlY4aHhhdzhwWmE5M2xMRXBQVFAvb2hkTjR3Rno3eXAvcnk5QT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdmdyL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tc3ZnLWNvbXBvbmVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN2Zy1jb21wb25lbnQvLS9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN2Zy1jb21wb25lbnQtNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXE0alNIMVVVdmJyc090bG8vdEtjZ1NlaUNIUlNCZFhvSW9xWDFwZ2NLSy9hVTNKRDI3d21NS3dHdHBCOHFSWVVZb3lYdmZHeFVWS2NoTHVSNXBCM3JRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2dyZWdiZXJnZSIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LW11c2wvLS9yb2xsdXAtbGludXgtYXJtNjQtbXVzbC00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTA5RUwreUZWYkpabGhjUWZTaHBzd3dSWjBSZyt6L0NzU0VMRkNuUHQzaUsraXF3R3NJNHpodDNzZWNqNXZMRXM5NTdRdkZGWG56QVQwRkZQSXhTcmtRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHN2Z3IvYmFiZWwtcHJlc2V0IjogewotICAgICAgInZlcnNpb24iOiAiNS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL2JhYmVsLXByZXNldC8tL2JhYmVsLXByZXNldC01LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEZpWEJqdlErejJqN3lBU2VHUEVpOFZELzVyckdRazRYcnEzRWRKbW9aZ3ovdHBxQ2hwbzVoZ1hEdm1FYXV3dHZPYzUycThnaGhaSzRPeTdxcGg0aWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLWFkZC1qc3gtYXR0cmlidXRlIjogIl41LjQuMCIsCi0gICAgICAgICJAc3Znci9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1hdHRyaWJ1dGUiOiAiXjUuNC4wIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1yZW1vdmUtanN4LWVtcHR5LWV4cHJlc3Npb24iOiAiXjUuMC4xIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1yZXBsYWNlLWpzeC1hdHRyaWJ1dGUtdmFsdWUiOiAiXjUuMC4xIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1zdmctZHluYW1pYy10aXRsZSI6ICJeNS40LjAiLAotICAgICAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLXN2Zy1lbS1kaW1lbnNpb25zIjogIl41LjQuMCIsCi0gICAgICAgICJAc3Znci9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LW5hdGl2ZS1zdmciOiAiXjUuNC4wIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tc3ZnLWNvbXBvbmVudCI6ICJeNS41LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2dyZWdiZXJnZSIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWxpbnV4LWxvb25nNjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1sb29uZzY0LWdudS8tL3JvbGx1cC1saW51eC1sb29uZzY0LWdudS00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWk5SWNDTVByM0VYbThFUWc1am5qYTBaeWMxaUZ4SmpaV2xiNHdyN1UyV3gvR3JkZE91RWFmeFJkTVBSWVZhWGpnYmh2cWFscDZucDA3aE4xdzlrQUt3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImxvb25nNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3Znci9jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiNS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL2NvcmUvLS9jb3JlLTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNTJWT2NzSlB2VjNqTzF3a1B0elR1S2x2WDdZM3hJY1dScENNdEJGM01ydGVaSnRCZlF3Lyt1MEIxQkh5NUNvbHBRYzEvWVZUclBFdFNZSU1OWmxyUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAc3Znci9wbHVnaW4tanN4IjogIl41LjUuMCIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgImNvc21pY29uZmlnIjogIl43LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZ3JlZ2JlcmdlIgotICAgICAgfQorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtbG9vbmc2NC1tdXNsIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1sb29uZzY0LW11c2wvLS9yb2xsdXAtbGludXgtbG9vbmc2NC1tdXNsLTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItREd6ZEpLOWt5SitCNzhNQ2tXZUducFhKOTF0Sy9pS0E2SHdIeEY0VEFsUElZN0dYRXZNZThoQkZSZ2RyUjlMeTRxZWJSLzdnZlVzOXkySW9hVkV5b2c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAibG9vbmc2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdmdyL2hhc3QtdXRpbC10by1iYWJlbC1hc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvaGFzdC11dGlsLXRvLWJhYmVsLWFzdC8tL2hhc3QtdXRpbC10by1iYWJlbC1hc3QtNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNBYVIvQ0FpWlJCOEdQMzJOKzFqb2NvdlV0dmxqMCtlNjVUQjUwLzZMY2ltZStFQTQ5bS84bCtQMmtvK1hQSjRkdzN4YVBTM2pPTDRGMlg0S1d4b2VRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xMi42IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9ncmVnYmVyZ2UiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1saW51eC1wcGM2NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LXBwYzY0LWdudS8tL3JvbGx1cC1saW51eC1wcGM2NC1nbnUtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Sd3BuTHNxQzhxYlM4ejFIMUF4QkExSDZxa25SNFlwUFI5dzJYWDB2bzJTejEwbWl1NTdQa05jbkhWYVprYnF5dy9rVVdmS01JNzNqaG1maTlCUk1VUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJwcGM2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdmdyL3BsdWdpbi1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvcGx1Z2luLWpzeC8tL3BsdWdpbi1qc3gtNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVYvd1ZoMzNqMTJoR2gwNUlEZzhHcElVWGJqQVBuVGRQVEt1UDRWTkxnZ253YUhNUE5RTmFlMnBSbnlUQUlMV0NRZHo1R3lNcXRPNDg4ZzdDS004Q0JBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjEyLjMiLAotICAgICAgICAiQHN2Z3IvYmFiZWwtcHJlc2V0IjogIl41LjUuMCIsCi0gICAgICAgICJAc3Znci9oYXN0LXV0aWwtdG8tYmFiZWwtYXN0IjogIl41LjUuMCIsCi0gICAgICAgICJzdmctcGFyc2VyIjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZ3JlZ2JlcmdlIgotICAgICAgfQorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtcHBjNjQtbXVzbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtbGludXgtcHBjNjQtbXVzbC8tL3JvbGx1cC1saW51eC1wcGM2NC1tdXNsLTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWjhwUGY1NEx5M2FxdGRXQzNHNHJGaWdaZ052ZCtxSmxPRTUyZm1rbzNLU1Q5U29HZkFkU1JDd3lveUcwNXExSHJyQWJsTGJrMS9QU0lWKzgwL3B4TGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicHBjNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ac3Znci9wbHVnaW4tc3ZnbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9wbHVnaW4tc3Znby8tL3BsdWdpbi1zdmdvLTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yNXN3S2s0Nkd1UWw0UnJWZWpWd3BlZUpheWRveGtkd2tNMW1CS09nSkxCVUpQR2FMY2k2eWxnL0lqaHJSc1JFS0RrcjRrYk1XZGdPdGJYRWgwZnlMUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb3NtaWNvbmZpZyI6ICJeNy4wLjAiLAotICAgICAgICAiZGVlcG1lcmdlIjogIl40LjIuMiIsCi0gICAgICAgICJzdmdvIjogIl4xLjIuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZ3JlZ2JlcmdlIgotICAgICAgfQorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtcmlzY3Y2NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LXJpc2N2NjQtZ251Ly0vcm9sbHVwLWxpbnV4LXJpc2N2NjQtZ251LTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2EzcVF1c3RwM0NPQ0d2blA0U3ZyTUhuUFE5ZDF2ekNha1FWUlRsaWF6OGNJcC93VUxHamlHcGJjcXJrdjBXckhURXA4YlFEL0IzSEJqenVqVldMT0E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicmlzY3Y2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdmdyL3dlYnBhY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3Ivd2VicGFjay8tL3dlYnBhY2stNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURPQk9LMjU1d2ZReGd1VXRhMklOS2t6UGo2QUlTNmlhZlpZaVltSG42VzNwSGx5Y1NSUmx2V0tDZkxERzEwZlhmTFdxRTNESkhnUlVPeUpZbUFSYTdnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjEyLjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtY29uc3RhbnQtZWxlbWVudHMiOiAiXjcuMTIuMSIsCi0gICAgICAgICJAYmFiZWwvcHJlc2V0LWVudiI6ICJeNy4xMi4xIiwKLSAgICAgICAgIkBiYWJlbC9wcmVzZXQtcmVhY3QiOiAiXjcuMTIuNSIsCi0gICAgICAgICJAc3Znci9jb3JlIjogIl41LjUuMCIsCi0gICAgICAgICJAc3Znci9wbHVnaW4tanN4IjogIl41LjUuMCIsCi0gICAgICAgICJAc3Znci9wbHVnaW4tc3ZnbyI6ICJeNS41LjAiLAotICAgICAgICAibG9hZGVyLXV0aWxzIjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZ3JlZ2JlcmdlIgotICAgICAgfQorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgtcmlzY3Y2NC1tdXNsIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LW11c2wvLS9yb2xsdXAtbGludXgtcmlzY3Y2NC1tdXNsLTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGpaRHNWSC8xVnNnaE1KMi9rQWF4dDZkTDBwc1Q2WmV4UVZyaWpjek9mK1BlUDJCVXFUSFllamszbDZUbFBSeWRnZ0lOT2VOUmh2cExhMEFZcENXU1E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicmlzY3Y2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLWxpbnV4LXMzOTB4LWdudSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtbGludXgtczM5MHgtZ251Ly0vcm9sbHVwLWxpbnV4LXMzOTB4LWdudS00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNPYlFzMEJodlBnaVVWWnJON2dxQ1N2bUZ1TVd2V3Zzakc1YXlKM0xyYXF2KzJLaE9zcCtwVWJpZ3FiZVdxdWVHSXNubiswOUhCdzI3ckorZ1lLNFZRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgInMzOTB4IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudS8tL3JvbGx1cC1saW51eC14NjQtZ251LTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXR5bHByRHRRUGRTNXJYdkFheXJORFlvSmhJejEvdnpOMmZFdWJvM3lMRTd0ZkF3Kzk0OGRPMGc0TTB2a1RWRmhLb2puRituNkM4YkROZStnRFJkVGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1tdXNsLy0vcm9sbHVwLWxpbnV4LXg2NC1tdXNsLTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItazA5b2lSQ2kvYkhVOVVWRnFEMTdyM2VKUjlibjAzVHlLcmFDcmx6NVVMRkpHZEpHaTdWT21tOWpsNDR2T0p2Uko2UDdXdUJpL3MyQTk3THh4SEdJZHc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtb3BlbmJzZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLW9wZW5ic2QteDY0Ly0vcm9sbHVwLW9wZW5ic2QteDY0LTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMW8vMC9wSWhvem9TYURKb0RjZWMrSVZMYm5SdFFtSHdQVjczMCtBT0QyOWxIRUVvNEY1QkVVQjI0SDBPQmRoYkJCRHdJT1N1Zjd2Z2cwWXd4ZGZpaXc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJvcGVuYnNkIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Acm9sbHVwL3JvbGx1cC1vcGVuaGFybW9ueS1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9yb2xsdXAtb3Blbmhhcm1vbnktYXJtNjQvLS9yb2xsdXAtb3Blbmhhcm1vbnktYXJtNjQtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wRVNEa29zL1BEell3dHl6QjVwL1VvTlUvOGZKbzY4dmNYTTlaVzJWMGtqWWF5ajFLYWFVZmkxTm1UVVRVcE1uNFVoVTRnVHVLOGdJYUZPNFVHdU1iQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAib3Blbmhhcm1vbnkiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLXdpbjMyLWFybTY0LW1zdmMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLXdpbjMyLWFybTY0LW1zdmMvLS9yb2xsdXAtd2luMzItYXJtNjQtbXN2Yy00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhqMXdGU3REN0IxWUJlWW12WStsV1haN2V5NzNZR1BjVmlNU2hZaWtxS1QxR3RzdElLUUF0ZlVJNnlyelBqQXkvTzdwTzBWTFhHbVVWV1hRTWFZZ1RRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHJvbGx1cC9yb2xsdXAtd2luMzItaWEzMi1tc3ZjIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC13aW4zMi1pYTMyLW1zdmMvLS9yb2xsdXAtd2luMzItaWEzMi1tc3ZjLTQuNjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU3lhSVBGb3htVVBsTkRxNUVIa1RiaUt6bVNFbXEvZ09ZRkkvM0hISjhpUy92MW1idWdWYTdkWFV6Y0pHUWZveXRwOURKRkxoSEg0VTMvZVR5MkJxNHc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiaWEzMiIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLXdpbjMyLXg2NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYwLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Byb2xsdXAvcm9sbHVwLXdpbjMyLXg2NC1nbnUvLS9yb2xsdXAtd2luMzIteDY0LWdudS00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkY3J5RWZ6WnIrbEFyNWtSbTJ1Y045YVZsQ0NhMlFOcTRoWGVsWnhiOEdHME5KU2F6cTQ0WjNQQ0NjOHdJU1J1Q1ZuR3MwbFFKVlg1VnA2ZktBK0lBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Byb2xsdXAvcm9sbHVwLXdpbjMyLXg2NC1tc3ZjIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Acm9sbHVwL3JvbGx1cC13aW4zMi14NjQtbXN2Yy8tL3JvbGx1cC13aW4zMi14NjQtbXN2Yy00LjYwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVByc1dOUThCdUUwME8zWHN4M0FMaDJEZjhmQWo5K2N2dlg5QUlBNm80S3BBVFI5OGM5bXVkNFh0RFdWdnNFdXlpYTVVNHRWU1RLeWdhd3lKa2ptNjB3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzdGFuZGFyZC1zY2hlbWEvc3BlYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3RhbmRhcmQtc2NoZW1hL3NwZWMvLS9zcGVjLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sMmFGeTVqQUxobmlHNUhncXJENmpYTGkvclVXckt2cU4vcUp4NnlvSnNnS2hibFZkK2lxcVU0UkNYYXZtL2pQaXR5RG81VEN2S01ucGpLbk9yaXkwdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdGVzdGluZy1saWJyYXJ5L2RvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L2RvbS8tL2RvbS05LjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMERHUGQ5QVIzK2lEVGpHb01weElrQXNVaWhIWjNBaTZDbmVVNmJSUnJmZlhNZ3pDZGxOazQzalRyRDIvNUxUNkNCYjNNV1RQOHY1MTBKell0YWhEMnc9PSIsCisgICAgICAidmVyc2lvbiI6ICIxMC40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvZG9tLy0vZG9tLTEwLjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGVtbHpyU0VTV2JkQWxvWW1sM2JBSk1FZk5oMVo3RWR1enFQS3ByQ0g1UzM0MWZybHBZblVFVzBINzJkTHhhNklzWXIrbVBubzIwR2lTbStoOWRFZFE9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJwZWVyIjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMC40IiwKICAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjEyLjUiLAogICAgICAgICAiQHR5cGVzL2FyaWEtcXVlcnkiOiAiXjUuMC4xIiwKLSAgICAgICAgImFyaWEtcXVlcnkiOiAiNS4xLjMiLAorICAgICAgICAiYXJpYS1xdWVyeSI6ICI1LjMuMCIsCiAgICAgICAgICJjaGFsayI6ICJeNC4xLjAiLAogICAgICAgICAiZG9tLWFjY2Vzc2liaWxpdHktYXBpIjogIl4wLjUuOSIsCiAgICAgICAgICJsei1zdHJpbmciOiAiXjEuNS4wIiwKICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjAuMiIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tLy0vamVzdC1kb20tNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVVQWc5cHZPa3ptR1hVU3lBUHQwaDZ5QVhIeHNuK0ZNTlMxbzdPWDhURXJtbGRaTUwyeXd0MTBsb3RaWHgvYTFQRGlTbnEwZkdHeUVWL3liS1NMUFdRPT0iLAorICAgICAgInZlcnNpb24iOiAiNi42LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvamVzdC1kb20vLS9qZXN0LWRvbS02LjYuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSXRlQmhsNFhxWU5rTTU0ZjRlamhMUkppWk5xY1NDb1hVT0cyQ1BLN3FiRDMyMktqUW96TTRrSFFPZmtHMm9sbjliOUhUWXFzK1NhZTh2QkFUdWJ4eEE9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYWRvYmUvY3NzLXRvb2xzIjogIl40LjAuMSIsCi0gICAgICAgICJAYmFiZWwvcnVudGltZSI6ICJeNy45LjIiLAorICAgICAgICAiQGFkb2JlL2Nzcy10b29scyI6ICJeNC40LjAiLAogICAgICAgICAiYXJpYS1xdWVyeSI6ICJeNS4wLjAiLAogICAgICAgICAiY2hhbGsiOiAiXjMuMC4wIiwKICAgICAgICAgImNzcy5lc2NhcGUiOiAiXjEuNS4xIiwKLSAgICAgICAgImRvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6ICJeMC41LjYiLAotICAgICAgICAibG9kYXNoIjogIl40LjE3LjE1IiwKKyAgICAgICAgImRvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6ICJeMC42LjMiLAorICAgICAgICAibG9kYXNoIjogIl40LjE3LjIxIiwKICAgICAgICAgInJlZGVudCI6ICJeMy4wLjAiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49MTQiLAogICAgICAgICAibnBtIjogIj49NiIsCiAgICAgICAgICJ5YXJuIjogIj49MSIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2dsb2JhbHMiOiAiPj0gMjgiLAotICAgICAgICAiQHR5cGVzL2plc3QiOiAiPj0gMjgiLAotICAgICAgICAiamVzdCI6ICI+PSAyOCIsCi0gICAgICAgICJ2aXRlc3QiOiAiPj0gMC4zMiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAamVzdC9nbG9iYWxzIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgIkB0eXBlcy9qZXN0IjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidml0ZXN0IjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tL25vZGVfbW9kdWxlcy9jaGFsayI6IHsKQEAgLTQyNDIsNDcgKzE0NDIsNDQgQEAKICAgICAgICAgIm5vZGUiOiAiPj04IgogICAgICAgfQogICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tL25vZGVfbW9kdWxlcy9kb20tYWNjZXNzaWJpbGl0eS1hcGkiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjYuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tLWFjY2Vzc2liaWxpdHktYXBpLy0vZG9tLWFjY2Vzc2liaWxpdHktYXBpLTAuNi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03WmdvZ2VUbmp1SGJvK2N0MTBHOUZmcDBtaWYxN2lkaTBJeVdOVkEvd2N3Y203TlBPRC9XRUhWUDNuN24zTWhYcXhvSVltOGQ2TXVab2hZV0laNFQzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMi4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QvLS9yZWFjdC0xMi4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9mVFhDSlVGZ2pkL2RpZ0xVdVB4YTArLzNaeHNRbUU3dWI5a2NiVy93aTk2Qmgzby9wNXZyRVRjQkdmUDE3TldQR3FlWVlsNUxUUnB3eUdvTUM0eXNnPT0iLAorICAgICAgInZlcnNpb24iOiAiMTYuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L3JlYWN0Ly0vcmVhY3QtMTYuMy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YVTUvU3l0UU0reWtxTW5BbnZCMnVtYUpOSU9zTEYzUFZ2Ly8xRXc0Q1RjcHowL0JSeXkvYWY0MHFxcnQ3U2pLcERkVDFzYUJNYzQyQ1VvazVnYXcrZz09IiwKICAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcnVudGltZSI6ICJeNy4xMi41IiwKLSAgICAgICAgIkB0ZXN0aW5nLWxpYnJhcnkvZG9tIjogIl44LjAuMCIsCi0gICAgICAgICJAdHlwZXMvcmVhY3QtZG9tIjogIjwxOC4wLjAiCisgICAgICAgICJAYmFiZWwvcnVudGltZSI6ICJeNy4xMi41IgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfSwKICAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmVhY3QiOiAiPDE4LjAuMCIsCi0gICAgICAgICJyZWFjdC1kb20iOiAiPDE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHRlc3RpbmctbGlicmFyeS9yZWFjdC9ub2RlX21vZHVsZXMvQHRlc3RpbmctbGlicmFyeS9kb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjIwLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvZG9tLy0vZG9tLTguMjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL0RpT1E1eEJ4Z2RZUkM4TE5rN1UrUldhdDBTM3FSTGVJdzNaSWtNUTlra1ZsUm13RC9FZzhrOENxSXBENkdXN3UyMEpJVU9mTUtieHRpTHV0cGpRNGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMC40IiwKLSAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjEyLjUiLAotICAgICAgICAiQHR5cGVzL2FyaWEtcXVlcnkiOiAiXjUuMC4xIiwKLSAgICAgICAgImFyaWEtcXVlcnkiOiAiNS4xLjMiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4wIiwKLSAgICAgICAgImRvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6ICJeMC41LjkiLAotICAgICAgICAibHotc3RyaW5nIjogIl4xLjUuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy4wLjIiCisgICAgICAgICJAdGVzdGluZy1saWJyYXJ5L2RvbSI6ICJeMTAuMC4wIiwKKyAgICAgICAgIkB0eXBlcy9yZWFjdCI6ICJeMTguMC4wIHx8IF4xOS4wLjAiLAorICAgICAgICAiQHR5cGVzL3JlYWN0LWRvbSI6ICJeMTguMC4wIHx8IF4xOS4wLjAiLAorICAgICAgICAicmVhY3QiOiAiXjE4LjAuMCB8fCBeMTkuMC4wIiwKKyAgICAgICAgInJlYWN0LWRvbSI6ICJeMTguMC4wIHx8IF4xOS4wLjAiCiAgICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAdHlwZXMvcmVhY3QiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiQHR5cGVzL3JlYWN0LWRvbSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQHRlc3RpbmctbGlicmFyeS91c2VyLWV2ZW50IjogewotICAgICAgInZlcnNpb24iOiAiMTQuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQvLS91c2VyLWV2ZW50LTE0LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVUNjVUtyVVlHajdDbG9tT28yU3BOVnZ4NC9ma2QvMkJiSUhEQ2xlOEEwYXgrUDNiVTd5SndEQkRyUzZad2RUTUFSV1RHT0RYMWhFc0NjTys3YmVKamc9PSIsCisgICAgICAidmVyc2lvbiI6ICIxNC42LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudC8tL3VzZXItZXZlbnQtMTQuNi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12cTdmdjBybnQrUVRYZ1B4cjVIamMyMTBwNllLcTJrbWR6aUxnbnNaR2dMSjllNlZBU2h4MXBBQ0x1UmpkL0FTL3NyN3BoQVI1OE9JSXBmMExsbVFOdz09IiwKICAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49MTIiLApAQCAtNDI5MiwzMiArMTQ4OSwxOCBAQAogICAgICAgICAiQHRlc3RpbmctbGlicmFyeS9kb20iOiAiPj03LjIxLjQiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0b290YWxsbmF0ZS9vbmNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0b290YWxsbmF0ZS9vbmNlLy0vb25jZS0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmJ6SnZsTnptUnE1YzNPMDlVaXBldVhubzR0QTFGRTZpa09qeFpLMHR1eFZ2MzQxMmw2NGw1dDFXNXBqNCtySnE5dnBrbS9rd2lSMDdhWlhuc0tQeHc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHRyeXNvdW5kL3NheCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHJ5c291bmQvc2F4Ly0vc2F4LTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MN3o5QmdyTkVjWXlVWXRGK0hhRWZpUzVlYmtoOWpYcWJzeno3cEMwaFJCUGFhdFYwWGpTRDMrZUhycHFGZW1RZmd3aUZGMFFQSWFybklpaElEbjdPQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEzLjAiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9hcmlhLXF1ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9hcmlhLXF1ZXJ5Ly0vYXJpYS1xdWVyeS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFRJaWVFWStndkozOUNoTGNCNElmNXpIdFB4dDNTeWo1cmdaUitlMWN0cG1LOE5qUGYwekZxc3o0SnBMSlQweGxhOUdGREtqeThDcHUzMzFucm1FMVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQorICAgICAgInZlcnNpb24iOiAiNS4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9hcmlhLXF1ZXJ5Ly0vYXJpYS1xdWVyeS01LjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcmZUOTN1ajVzMFBSTDdFemNjR01zM2JycGxoY3JnaG5Eb1YyNk5xS2hDQVMxaFZvK1dkTnNQdkUveWI2aWxmcjVoaTJNRWs2ZDVFV0pUS2R4ZzhqVnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIwLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fY29yZS8tL2JhYmVsX19jb3JlLTcuMjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUFDdS9VL29taGRrMTVPNE5mYitmSGdIL3ozUXNmUXpwbnZSWmhZaFRobXM4M1puQU9aejd6WkFXTzdtbjJ5eU5RYUE0eFRPOEdMSzN1cUZVNGJZWXc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjIwLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fY29yZS8tL2JhYmVsX19jb3JlLTcuMjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcW9RcHJadno1d1FGSndNRHFlc2VSWFd2M3JxTXZoZ3BiWEZmVnlXaGJ4OVg0N1BPSUE2aS8rZFhlZkVtWktvQWdPYVRkYUlnTlNNcU1JVTYxeVJ5ekE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIwLjciLAogICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIwLjciLApAQCAtNDMyNyw4NzEgKzE1MTAsMjYyIEBACiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy42LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fZ2VuZXJhdG9yLy0vYmFiZWxfX2dlbmVyYXRvci03LjYuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEZrY2lCOWoySzc1NXlyVEFMeEQ0NE1jT3JrK2dmcElwdkMzc3hIalJhd2o2UGZuUXhyc2U0Q2xxNXkvUnErRzNtckJ1ck1heC9sRzhRbjJ0OW1Tc2c9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjYuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IvLS9iYWJlbF9fZ2VuZXJhdG9yLTcuNi44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BU3NqK3RwRURzRWlGcjFhcldybE42VjNtZGZqUk1adDZMdEsvVnAva3JlRkxucjVRSDUrRGh2RDVuSU5ZWlh6d0p2WGVHcSswNWlVWGNBelZycVd0dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fdGVtcGxhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX190ZW1wbGF0ZS8tL2JhYmVsX190ZW1wbGF0ZS03LjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXpCRktlbVg2a01nNUlvKy9yZEdUMGRrR3JlYm9VVlIwQ2RtM2Z6OVFKV3BhUUdKUlFYbDdDKzZoT1RDWmNNbGw3S0Z5RVFwZ2JZSTJsSGRzUzRVN2c9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjQuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX190ZW1wbGF0ZS8tL2JhYmVsX190ZW1wbGF0ZS03LjQuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaC9OVWFTeUc1RXl4QklwOFlSeG80Uk1lMi9xUWd2eW93UndWTXpoWWhCQ09OYlc4UFVzZzRsa0ZNcmhnWmhVZTV6M0wzTWlMRHV2eUovQ2FQYTJBOEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjEuMCIsCiAgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlLy0vYmFiZWxfX3RyYXZlcnNlLTcuMjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTWl0SEZYbmh0Z3dzR1pXdFQ2OFVScE92TE40RVJFaWgxdTNRdFFpTjRWZEF4V0tSVnZHQ1N2dy9RdGgwTTBRcTNwSnBuR091NUphTS95ZEs3T0dicWc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjIwLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fdHJhdmVyc2UvLS9iYWJlbF9fdHJhdmVyc2UtNy4yMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yMWJ6ZnJtMHRvbU9JOGcxU3p2Q2FRSG82TGN2Nnp1MEVBK1cya0hydDhkeXJIUXhHekJCTDRrZGt6SVMrakJNVitFWWNNQUVBcVhxWWFMSnE1ck9aZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMC43IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYm9keS1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjE5LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ib2R5LXBhcnNlci8tL2JvZHktcGFyc2VyLTEuMTkuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUxZb25lNnBtNlFtd1pvQWdleU5rc2NjVDlRNEFXWlE2UHZmd1IzN0dUNnI2RldVUGd1cTZzVW1OR1NNVjJXcjc2MW9Rb0J4d0dHYTZEUjVvMURDOWc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvY2hhaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvY2hhaS8tL2NoYWktNS4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU13NTU4b2VBOWZGYnY2NS95NG1IdFhEczliUG5GTVpBTC9qeGRQRlVwT0hISVhYOTFtY2dFSGJTNUxhaHIrcHdaRlI4QTdHUWxlUldlSTZjR0ZDMlVBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9jb25uZWN0IjogIioiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKKyAgICAgICAgIkB0eXBlcy9kZWVwLWVxbCI6ICIqIiwKKyAgICAgICAgImFzc2VydGlvbi1lcnJvciI6ICJeMi4wLjEiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ib25qb3VyIjogewotICAgICAgInZlcnNpb24iOiAiMy41LjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYm9uam91ci8tL2JvbmpvdXItMy41LjEwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wN2llblJNaVM0MU51Mi9pZ2JKeHhMRFdyU1owV3hNOFVRZ0NlTzlLaG9WRjdjT1ZGa3JLc2lEcjFFc0pJbGE4dlYzb0VFakdjejExamM1eWltaHpadz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvY29ubmVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNC4zNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2Nvbm5lY3QvLS9jb25uZWN0LTMuNC4zNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2RlWXl2NEtXb0VncEJJU1R4V3ZxWXNWeTQ0NERPcWVoaUYzZk0zbmUxMEFtSjYyUlN5TmtVbnhNSlhIUVdSUVFYMmVSOTRtNXkxSVp5RHdCalY5RlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2svLS9jb25uZWN0LWhpc3RvcnktYXBpLWZhbGxiYWNrLTEuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00eDVGa1BwTGlwcXd0aGpQc0Y3WlJiT3YzdW9MVUZrVEE5Rzl2NTgzcWk0cEFDdnEwdVRFTHJCOE9MVXpQV1VJNElKSXl2TTg1dnprVjFueWlJMkxpZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvZXhwcmVzcy1zZXJ2ZS1zdGF0aWMtY29yZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9lc2xpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc2xpbnQvLS9lc2xpbnQtOC40MC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QUlZqUTRFaDl6OXBtbXRhcThuVGpaalF3S0ZrN1lJSEl1ZDNsUm9LUkJnVVFqZ2pSbW9HeHhHRVBYUWtGK2xIN1FrSEpSTnI1RjRhQmdZQ1cwbHFwUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvZXN0cmVlIjogIioiLAotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9lc2xpbnQtc2NvcGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjcuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2VzbGludC1zY29wZS8tL2VzbGludC1zY29wZS0zLjcuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOUs0em9JbWlaYzNIbElwNkFWVURFNENXWXgyMmErbGhTWk1ZTnBialcwNCtZRjBLV2o0cEpYbkVNamRuRlRpUWliRkZtRWxjc2FzSlhEYmRJL0VQaEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2VzbGludCI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiKiIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9kZWVwLWVxbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZGVlcC1lcWwvLS9kZWVwLWVxbC00LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzloOWRWVk1pZ01QYzRid1R2QzVkeHF0cUpad1FQZVBzV2pQbHBTT25vamJvcjZwR3FkazU0MWxmQTdBcUZRcjVwQjFCUmRxMGp1WTlkYjgxQnd5Rnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2VzdHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZXN0cmVlLy0vZXN0cmVlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MRzRvcFZzMkFOV1oxVEpvS2M5MzdpTW1Oc3RNL2QwYWUxdk5ibkJ2QmhxQ1NlemdWVU96Y0xDcWJJNWVsVjhWeTZXS3dLamFxUit6TzlWS2lyQkJDQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvZXhwcmVzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMTcuMTciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9leHByZXNzLy0vZXhwcmVzcy00LjE3LjE3LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RNEZtbXVMR0JHNThidFVuZlMxYzFyL05RZGxwM0RNZkdER2lnOFdoZnBBMllSVXRFa3hBamtaYjB5dnBsSkdZZEYxZnNRODFpTURjSDI0c1NDTkMvUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvYm9keS1wYXJzZXIiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvZXhwcmVzcy1zZXJ2ZS1zdGF0aWMtY29yZSI6ICJeNC4xNy4zMyIsCi0gICAgICAgICJAdHlwZXMvcXMiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvc2VydmUtc3RhdGljIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9leHByZXNzLXNlcnZlLXN0YXRpYy1jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiNC4xNy4zNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2V4cHJlc3Mtc2VydmUtc3RhdGljLWNvcmUvLS9leHByZXNzLXNlcnZlLXN0YXRpYy1jb3JlLTQuMTcuMzUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdBTFdRd3JnaUIyQVdUVDkxQ0I2MmI2WXQwc05IcHpuVVhlWkVjblBVM0RSZGxESXo3NHg4UWcxVVVZS1NWRmkrdmE1dktPTFlSQkkxYlJLaUxMS0lnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3FzIjogIioiLAotICAgICAgICAiQHR5cGVzL3JhbmdlLXBhcnNlciI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9zZW5kIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ncmFjZWZ1bC1mcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZ3JhY2VmdWwtZnMvLS9ncmFjZWZ1bC1mcy00LjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2lnMFNOT1JYOWZkVytiUXVURW92S2ozdUhjVUw2TFFLYkNycnFiMVg3SjYvUmVBYmhDWFJBaGMrU01lamhMRUxGajJRY3l1eG1Vb29aNGJ0NVJlU3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy8tL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLTMuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pTUlxaWtvNm9vTHJUaDFqb1hvZEpLNVg5eGVFQUxUMWtNNUczWkxoRDNoc3p4QmRJRWQ1Qzc1VTgzNEQ5bUxjSU5nRDRPeVpmNXVRWGprdVl5ZFd2QT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZXN0cmVlLy0vZXN0cmVlLTEuMC44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kV0h6SGEyV3FFWEkvTzFFOU9qcm9jTVRLSmwybVNyRW9saDFJb21ydjZVK0p1TndhSFhzWHg5Ykx1NWdHN0JVV0ZJTjBza0lRSlEvTDFySWV4NFg2dz09IiwKICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9yZWFjdCI6ICIqIiwKLSAgICAgICAgImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIjogIl4zLjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2h0bWwtbWluaWZpZXItdGVyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9odG1sLW1pbmlmaWVyLXRlcnNlci8tL2h0bWwtbWluaWZpZXItdGVyc2VyLTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vaC82YnlEUG5MMXplTlhGckRYRkx5WmprcjFNc0JHNjY3SU03OTJjYWYxTDJVUE9PTWY2NU5GempVSC9sdHlmd2pBR2ZzMXJzWDFlZnRLMGpDL0tJZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvaHR0cC1wcm94eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTcuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9odHRwLXByb3h5Ly0vaHR0cC1wcm94eS0xLjE3LjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IQzhHN2MxV21hRjJla3FwbkZxNjI2eGQzWnowdXZhcUZtQkpOUlpDR0VaQ1hrdlNkSm9ORm4vOFlnYmQ5ZktOUWo4VXpMZENFVGFJMFVXUEFqSzdJQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UvLS9pc3RhbmJ1bC1saWItY292ZXJhZ2UtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXovUVQxWE40SzRLWXVzbFMyM2s2MnlESURMd0xGa3p4T3VNcGxEdE9iejAreTdWcUpDYU8ybytTUHdIQ3ZMRlpoN3hhenZ2b29yMnRBL2hQejllZTdnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9pc3RhbmJ1bC1saWItcmVwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9pc3RhbmJ1bC1saWItcmVwb3J0Ly0vaXN0YW5idWwtbGliLXJlcG9ydC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGxHZ1hBUGZWS0ZvWWZhOU5wWURBa3NlRytnNkpyMjk0UnFlcWNxRGl4U2JVMzRNWlZKUmkvUCs3WThHRHB6a0V3TGFHWlpPcEtJRW1lVlpOdEtzcmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaXN0YW5idWwtcmVwb3J0cy8tL2lzdGFuYnVsLXJlcG9ydHMtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWMzbUFaRXVLMGx2QnA4dG11TDc0WFJLbjEreTJkY3dPVXBIN3g0V3JGNmdrMUdJZ2lsdURSZ01ZUXR3Mk9GY0J2QUpXbHQ2QVNVM3RTcXhwMFV1MEF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItcmVwb3J0IjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvamVzdC8tL2plc3QtMjkuNS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QaGdsR21oV2VENDZGWU9WTHQzWDdUaVdqend1VkdXOXdHLzRxb2NQZXZYTWpDbXJJYzViNmRiOVdqZUdFNFFZVnBVQVdNRHYzdjBJaUJ3T2JZMjg5QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImV4cGVjdCI6ICJeMjkuMC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2plc3Qvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvamVzdC9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03alJqK3lYTzBXN2U0L3RTSktvUjdIUklITFBQanROYVVHRzJ4eEtRbkd2UE5Sa2dXY1EwQVpYNlA0S0JSSk40RmNUQldiM3NhN0RWVUptb2NZdW9vZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9qc29uLXNjaGVtYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2pzb24tc2NoZW1hLy0vanNvbi1zY2hlbWEtNy4wLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IcjVKZmhjOWVZT1FOUFlPNVdMRHEvbjRqcWlqZEhObERYanVBUWtrdCttV2RRUitYSlRvT0hyc0Q0Y1BhTVhwbjZLTzd5Mit3TThBWkVzOFZwQkxWQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvanNvbjUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuMjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9qc29uNS8tL2pzb241LTAuMC4yOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFJMakNXSFlnNG9hQTc3Y3hPNjRvTys3SndDd25JemtaUGRyckM3MWpRbVF0bGhNNTU2cHdLbzViVXpxdlpuZGtWYmVGTElJaSs5VEM0MEpORjVoTlE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL21pbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL21pbWUvLS9taW1lLTEuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQVR4VnhnUnFOSDZuSEVJc3ZnNmsyQm9jMUpISTlaYkg1aVdGRnYvTVRrY2h6M2IxaWVHRGE1VDBhOVJ6bk5kSTBLaFZiZGJXU04rS1dXclFaUnhUdz09IgorICAgICAgImxpY2Vuc2UiOiAiTUlUIgogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIwLjguNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL25vZGUvLS9ub2RlLTIwLjguNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMjFUS0hIaDNlVUhJaTJNbG9lcHRKV0FMdUN1NUg3SFFUZFRyV0lGUmVBOGFkK2FnZ29YK2xSZXMzZXg3L0Z0cEMrc1ZVcEZNUStRVGZZcjc0bXJ1aVE9PSIsCisgICAgICAidmVyc2lvbiI6ICIyNS42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ub2RlLy0vbm9kZS0yNS42LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStxSVlSS2ROWUp3WTN2UkNaTWRKYlBMSkF0R2pRQnVkelp6ZHp3UVlrRVBRZCtQSkdpeFVMNVFmdkNMRGFVTG9MditSaFQzTERrd0VmS2FBa2dTbU5RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInVuZGljaS10eXBlcyI6ICJ+NS4yNS4xIgorICAgICAgICAidW5kaWNpLXR5cGVzIjogIn43LjE5LjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9wYXJzZS1qc29uIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItLy9vb3JFWmpMNnNiUGNLVWFDZElHbElVZUgyNm1nemltakJCNzdHNlhSZ25EbC9MNXdPbnB5QkdSZS9NbWY1Q1ZXM1B3RUJFMU5qaU1aL3NzRmg0d0E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3ByZXR0aWVyIjogewotICAgICAgInZlcnNpb24iOiAiMi43LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wcmV0dGllci8tL3ByZXR0aWVyLTIuNy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNjhrUDl5enM0TE1wN1ZOaDhnZHpNU1BaRkw0NE1MR3FpSFd2dHRZSmUrNnFudVZyNEVrOXdTQlFvdmVxWS9yK0x3akNjVTI5a05Wa2lkd2ltK2tZQT09IgotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvcHJvcC10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE1LjcuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3Byb3AtdHlwZXMvLS9wcm9wLXR5cGVzLTE1LjcuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSkNCOEM2U25Eb1FmMGNOeWNxZC8zNUE3TWpjbksrWlRxRTdqdWRTNm83dXR4VUNnNmltSmczUUsycXpIS3N6bFRqY2oyY24rTndNQjJpOTZ1YnBqN3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3EiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3EvLS9xLTEuNS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MMjhqMkZjSmZTWk9uTDFXQmpEWXAydlVIQ2VJRmx5WUkvNTNFd0QvcktVQlE3TXRVVWZiUVdpeUtKR3BjbnY0L1dncmhXc0ZLcmNQc3RjQXQvSjB0UT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvcXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjkuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3FzLy0vcXMtNi45LjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZHYTFGNjJGVDA5cWNydWVCQTZxWVRySlBWRHphaDlhKzQ5MytvMlBDWHNlc1dISW4yN0c5OFRzU01zM1dQTmJaSUVqNCtWSmY2c2FTRnB2RCszWnN3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9yYW5nZS1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3JhbmdlLXBhcnNlci8tL3JhbmdlLXBhcnNlci0xLjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRUVoc0xzRDZVc0RNMXlGaEF2eTBDanI2VndtcE1XcUZCQ2I5dzA3d1Z1Z0Y3dzluZmFqeEx1Vm1uZ1RJcGdTNnN2Q25tNlZhdytNWmhvRENLbk9mc3c9PSIKKyAgICAgICJ2ZXJzaW9uIjogIjE1LjcuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wcm9wLXR5cGVzLy0vcHJvcC10eXBlcy0xNS43LjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nTk12Tkg0OURKN09KWXYrS0FLbjBYcDQ1cDhQTGw2em8yWW52REliVGQ0SjZNRVIyQm1XTjQ5VEc3bjlMdmt5aWhJTnhlS1c4KzNiZlMyeURDOWR6UT09IgogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvcmVhY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjYyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVhY3QvLS9yZWFjdC0xNy4wLjYyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lQU5DeXo5REc4cC9WZGhyMFpLU1Q4SlYxMlBoSDJBQ0NEWWxGdzZESU8rRCtjYSt1UDRqdEVERXBWcVhacmgvdVpkWFFHd2s3d2hKYTNhaDVEdHlMdz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjE4LjMuMjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9yZWFjdC8tL3JlYWN0LTE4LjMuMjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXo5VlhwQzdNV3JoZldpcGl0ak5kZ0NhdW9NTFJkSUlMUXNBRVYrWmVzSXpCcS9vVWx4azBtM0FwWnVNRkNYZG5TNFU3S3JJK2wzV1JVRUdROEsxUUt3PT0iLAogICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgIkB0eXBlcy9wcm9wLXR5cGVzIjogIioiLAotICAgICAgICAiQHR5cGVzL3NjaGVkdWxlciI6ICIqIiwKLSAgICAgICAgImNzc3R5cGUiOiAiXjMuMC4yIgorICAgICAgICAiY3NzdHlwZSI6ICJeMy4yLjIiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9yZWFjdC1kb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjIwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE3LjAuMjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRweklqU3hEdWVaWjkwRjUybVUzYVBvb2drSElvU0lERytvUSt3UUs3Q3kyQjlTK012T3FZMHVFQS9xYXdLejM4MXFyRURrdnB3eXQ4Qm0zMUk4c2JBPT0iLAorICAgICAgInZlcnNpb24iOiAiMTguMy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE4LjMuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUVlM1Vlb0VOWVZGWHpvWEVXc3ZjcGc2WnZsckZObE9RN0VPc3ZoSTNDZkFYd3pQZk84UXd1eGQ0MG5lcHNZS3F5eVZRblRkRWZ2NjhxOTF5TGNLclE9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvcmVhY3QiOiAiXjE3IgorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL3JlYWN0IjogIl4xOC4wLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVzb2x2ZS8tL3Jlc29sdmUtMS4xNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15eTdIdXpRaGowZGhHcEQ4UkxYU1pXRWtMc1Y5aWJ2eHZpNkVpSjNia3FMQU8xUkdvMFdia1dRaXdwUmxTRnltVEpSejBkM2s1TE0za2t4OEFyRGJMdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvcmV0cnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9yZXRyeS8tL3JldHJ5LTAuMTIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1dLT0NsVFRpaXpjWmhYblBZNHdpa1ZBd21kWUhwOHE2RG1DK0VKVXpBTXN5Y2I3SEIzMktoOVJONCswZ0V4am1QbVpTQVFqZ1VSWElHQVRQZWdBdkE9PSIKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9yZWFjdC9ub2RlX21vZHVsZXMvY3NzdHlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3N0eXBlLy0vY3NzdHlwZS0zLjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItejFIR0tjWXkyeEE4QUdRZndybjBQQXkrUEI3WC9HU2ozVVZKVzlxS3luNDN4V2ErZ2w1blhtVTRxcUxNUnpXVkxGQzhLdXNVWDhULzBrQ2lPWXBBSVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3NjaGVkdWxlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3NjaGVkdWxlci8tL3NjaGVkdWxlci0wLjE2LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVjSjhDQjR5QXg3Qkgxb012ZFUwSmg5bHJFWHlQa2FyNkY5Ry9FUnN3a0N1dlA0S1FaZlprU2pjTWJBSUNDcFFUTjRPdVpuOHR6MEhpS3Y5VEdaZ3JRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3NlbXZlci8tL3NlbXZlci03LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRzhoWjZYSmlIbnVoUUtSN1pteXNDZUpXRTA4bzhUMEFYdGs1ZGFyc0NhVFZzWVpoaGdVcnE1M2ppemFSMkZ2c29lQ3dKaGxtd1Rqa1hCWTVQbi9aSHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3NlbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE3LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zZW5kLy0vc2VuZC0wLjE3LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN3bzhMRS8wcm52WDdrSUlhM1FIQ2tjdUYyMWMwNUF5YjBaZnhQaXYwVzhWUmlaaU5XL1d1UnVwSEtwcXFHVkdmN1NVQTQ0UVNPVUthRWQ5bElyZC9RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9taW1lIjogIl4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9zZXJ2ZS1pbmRleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc2VydmUtaW5kZXgvLS9zZXJ2ZS1pbmRleC0xLjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZC9IczNuV0R4TkwyeEFjem1PVlpOajkyWVpDUzZSR3hmQlBqS3p1dS9YaXJDZ1hkcEtFYjg4ZFlOYnJZR2ludDZJVldMTlAreW9ud1ZBdVJDMFQyRGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2V4cHJlc3MiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3NlcnZlLXN0YXRpYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3NlcnZlLXN0YXRpYy8tL3NlcnZlLXN0YXRpYy0xLjE1LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5VbzVYTmlBZFVMckpFTnRKWFpaM2ZIdGZNb2x6WndjenpCYm5BZUJicUJ3RytMYUc2WWFKdHV3endHU1FaMndzQ3J4akVoTk5qQWtLaWd5M244dGVRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9taW1lIjogIioiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3NvY2tqcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4zMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3NvY2tqcy8tL3NvY2tqcy0wLjMuMzMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYwS0VFZTA1TnZVbmF0K2JvUFRaMGRnYUxaNFNmU291WFVndjVub1VpZWZHMmFqZ0tqbUVUbzlaSnl1cXNsN2RmbDJhSGxMSlVpa2k2QjRaWWxkaWl3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9zdGFjay11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc3RhY2stdXRpbHMvLS9zdGFjay11dGlscy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSGwyMTkvQlQ1ZkxBYXo2TkRrU3VoemFzeTQ5ZHdRUy9EU2R1NE1kZ2dGQjh6Y1h2N3ZmbEJJM3hwN0ZFbWttZERrQlVJMmJQVU5lTXR0cDJrbllkeHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3N0eWxlZC1jb21wb25lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjI2IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc3R5bGVkLWNvbXBvbmVudHMvLS9zdHlsZWQtY29tcG9uZW50cy01LjEuMjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUt1S0o5WjZ4YjkzdUppSXl4by8ra3NTN3lMalMxS3pHNml2NWk3OGRoVmcvWDN1NXQxSDdqdVJXcVZtb2RJZHo2d0dWYUlBcG8xdTAxa21GUmRKSFZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIjogIioiLAotICAgICAgICAiQHR5cGVzL3JlYWN0IjogIioiLAotICAgICAgICAiY3NzdHlwZSI6ICJeMy4wLjIiCi0gICAgICB9CisgICAgICAidmVyc2lvbiI6ICIwLjE2LjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zY2hlZHVsZXIvLS9zY2hlZHVsZXItMC4xNi44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XWkxpd1NoaHdMUm1lVjZ6SCtHa2JPRlQ2WjZWa2xDSXRyRGlveFVudit1NExsKzh2S2VGeVNvRnlLLzBjdGNScE9td0FpY0VMZm15czFzRGMvUncrQT09IgogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvc3R5bGlzIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zdHlsaXMvLS9zdHlsaXMtNC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW40c3gyYnFMMG1XMXR2RGYvbG9RK2FNWDdHUUQzbGMzZmtDTUM1NVZGTkR1L3ZCT2FiTytMVEllWEtNMTR4SzBwcGs1VFVHY1dSamlTcElsVXBnaEt3PT0iCisgICAgICAidmVyc2lvbiI6ICI0LjIuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3N0eWxpcy8tL3N0eWxpcy00LjIuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVh2ZStOTU43RldqWTE0dkxvWTV0TDNCVkVRL240MllMd2FxSklQWWhvdFo5dUJIdDg3VmNlTXdXUXB6bWRFdDJUTlhJb3JJRkcrWWVDVVVXN1JJbnc9PSIKICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3RydXN0ZWQtdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3RydXN0ZWQtdHlwZXMvLS90cnVzdGVkLXR5cGVzLTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OZlE0Z3l6MzhTTDhzRE5yU2l4eFUyT3MxYTV4Y2RGeGlwQUZ4WUV1TFVsdlUydUR3UzROVXBzSW1jZjEvL1NsV0l0Q1ZNTUxpeWxzeGJtTk1Ub1YvZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvd3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjUuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3dzLy0vd3MtOC41LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWx3aHM4aGt0d3hTamY5VWFaOXRHNU0wM1BHb2d2RmFIOGdVZ0xOYk45SEtJZzBkdnY2cStna1N1SjhITjQvVmJ5eGt1THpDamxON0dxdVEwZ1VKZklnPT0iLAorICAgICJub2RlX21vZHVsZXMvQHZpdGVqcy9wbHVnaW4tcmVhY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVqcy9wbHVnaW4tcmVhY3QvLS9wbHVnaW4tcmVhY3QtNC43LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdVdTlod2ZXdnZFREJCbWd0QW93UUNvandabUo1bWNMbjNhdWZlQ3NpdGlqczMrZjJOc3JQdGxBV0lSNk9QaXFsamw5NkdWQ1ViTGUwSHlxSXBWYW9BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE2LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTYuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BeE8vQURKT0JGSlNjSGJXaHEyeEFobFdQMjRyWTRhQ0VHL05GYU12YlQzWDJNZ1JzTGpoalF3c24wWmk1em4wTEc5alVoQ0NaTWVYOURrdXc2ayt2UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy1wYXJzZXIvLS95YXJncy1wYXJzZXItMjEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pTzlaUUhrWnhIbjRtU2FrWVYwdkZIQVZEeUVPSUpRclYydVowNkh4RVBjeCttdDhzd1hvWkhJYmFhSjJjckpZRmZFcnlTZ2t0dVRaM0JlTHorWG1GQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luLy0vZXNsaW50LXBsdWdpbi01LjU5LjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YeHVPZlRrQ1VpT1N5QldJdkhsVXJhTHcvSlQvNklvMTM2NVJPNlp1STg4U1RLTWF2SlpQTk1VMGxGY1VUZVFYRWhIaXY2NENieFl4Qk5vRFZTbWdoZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogIl40LjQuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlciI6ICI1LjU5LjExIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlLXV0aWxzIjogIjUuNTkuMTEiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogIjUuNTkuMTEiLAotICAgICAgICAiZGVidWciOiAiXjQuMy40IiwKLSAgICAgICAgImdyYXBoZW1lLXNwbGl0dGVyIjogIl4xLjAuNCIsCi0gICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKLSAgICAgICAgIm5hdHVyYWwtY29tcGFyZS1saXRlIjogIl4xLjQuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy43IiwKLSAgICAgICAgInRzdXRpbHMiOiAiXjMuMjEuMCIKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjI4LjAiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LXNlbGYiOiAiXjcuMjcuMSIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtc291cmNlIjogIl43LjI3LjEiLAorICAgICAgICAiQHJvbGxkb3duL3BsdWdpbnV0aWxzIjogIjEuMC4wLWJldGEuMjciLAorICAgICAgICAiQHR5cGVzL2JhYmVsX19jb3JlIjogIl43LjIwLjUiLAorICAgICAgICAicmVhY3QtcmVmcmVzaCI6ICJeMC4xNy4wIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgorICAgICAgICAibm9kZSI6ICJeMTQuMTguMCB8fCA+PTE2LjAuMCIKICAgICAgIH0sCiAgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiAiXjUuMC4wIiwKLSAgICAgICAgImVzbGludCI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMCIKKyAgICAgICAgInZpdGUiOiAiXjQuMi4wIHx8IF41LjAuMCB8fCBeNi4wLjAgfHwgXjcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZWpzL3BsdWdpbi1yZWFjdC9ub2RlX21vZHVsZXMvcmVhY3QtcmVmcmVzaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtcmVmcmVzaC8tL3JlYWN0LXJlZnJlc2gtMC4xNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16NkY3SzliVjg1RWZzZVJDcDJienJweVEwR2t3MXVMb0NlbDlYQlZXUGcvVGpSajk0U2tKelVUR2ZPYTRiczdpSnZCV3RRRzBXcTd3bkkwc3l3M0VCUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHZpdGVzdC9leHBlY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVzdC9leHBlY3QvLS9leHBlY3QtNC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlQQnByYStWRHVYbUJGSTNGTUtIU0ZYcDNHeDVIZm1TQ0U4WDY3RG4rYndlcGhDblFDYUI3cVdLMmxkSGErOG5jTjhoSlU4VlRNY3hqUHB5TWtVand3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzdGFuZGFyZC1zY2hlbWEvc3BlYyI6ICJeMS4xLjAiLAorICAgICAgICAiQHR5cGVzL2NoYWkiOiAiXjUuMi4yIiwKKyAgICAgICAgIkB2aXRlc3Qvc3B5IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvdXRpbHMiOiAiNC4xLjQiLAorICAgICAgICAiY2hhaSI6ICJeNi4yLjIiLAorICAgICAgICAidGlueXJhaW5ib3ciOiAiXjMuMS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3ZpdGVzdCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHZpdGVzdC9tb2NrZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVzdC9tb2NrZXIvLS9tb2NrZXItNC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI5SFRaQmhXNnlDU0diR1FuRG5IM1FIZkp4b2tLTjRLQitZdms5UTFsZTdlUU5Zd2lDeUt4bUxtdXJTcEZ5NkJ6SmFuU0x1RVVEckQrajk3UStaTFBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB2aXRlc3Qvc3B5IjogIjQuMS40IiwKKyAgICAgICAgImVzdHJlZS13YWxrZXIiOiAiXjMuMC4zIiwKKyAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4zMC4yMSIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS92aXRlc3QiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtc3ciOiAiXjIuNC45IiwKKyAgICAgICAgInZpdGUiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiCiAgICAgICB9LAogICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAidHlwZXNjcmlwdCI6IHsKKyAgICAgICAgIm1zdyI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJ2aXRlIjogewogICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKICAgICAgICAgfQogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZXN0L3ByZXR0eS1mb3JtYXQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVzdC9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC00LjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZGRtREhVMGdqRVV5RVZMeHRaYTd4YW1ycEllZmRFRVR1M25aald0SGVaWDRReHFKN3RSeFN0ZUhWWEpPY3I4amhpTG9HQWhrSzRXSjNXcUJwang0MkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luL25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjUuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Tb2Z0dVRST3YvY1JqQ3plL3Njakd5aUR0Y1V5eHcxcmdZUVNaWTdYVG10UjVoWCtkbTc2aURiVEg4VGtMUEhDUW1sYlFWU1NiTlpDUE0yaGIwa25uUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlci5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4vbm9kZV9tb2R1bGVzL3lhbGxpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9leHBlcmltZW50YWwtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvZXhwZXJpbWVudGFsLXV0aWxzLy0vZXhwZXJpbWVudGFsLXV0aWxzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdrUUdWMFVGL1Y1UmE3Z1pNQm1pRDFXcllVRk9KTnZDWnMrWFFuVXlKb3htcWZXTVhWTnlCMk5WQ1BSS2Vmb1FjcHZUdjlVcEp5ZkN2c0pGczhOenpRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC91dGlscyI6ICI1LjU5LjExIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKKyAgICAgICAgInRpbnlyYWluYm93IjogIl4zLjEuMCIKICAgICAgIH0sCiAgICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNsaW50IjogIl42LjAuMCB8fCBeNy4wLjAgfHwgXjguMC4wIgorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3ZpdGVzdCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIvLS9wYXJzZXItNS41OS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItczlaRjNNK055bTZDQVpFa0pKZU8yVEZISERzS0FNM2VjTmtMdUg0aTRzOC9SQ1BuRjVKUmlwMkd5dmlZa2VFQWN3R01KeGtxRzloMmRBc25BMW5acEE9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZXN0L3J1bm5lciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Adml0ZXN0L3J1bm5lci8tL3J1bm5lci00LjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFRwN1ZaNWFYUDVaSnJuMTVVdEpVV2x4NnFYTG5HdEY2ak54SGVwZFBIcE1mei9hVlB4K2h0SHRnY0FMMm1EWEpnS2hwb28yZTkvaFZKc0llRmJ5dFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiNS41OS4xMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgorICAgICAgICAiQHZpdGVzdC91dGlscyI6ICI0LjEuNCIsCisgICAgICAgICJwYXRoZSI6ICJeMi4wLjMiCiAgICAgICB9LAogICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3ZpdGVzdCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlci8tL3Njb3BlLW1hbmFnZXItNS41OS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZEhGT3N4b0xGdHJJY1NqNWgwUW9CVC84OWh4UU9Od21uM0ZPUTBHT1FjTE9PWG0rTUlyUzh6RUFoczR0V2w1TXJheENZM1pKcGFYUVFkRk1jMlR1K1E9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZXN0L3NuYXBzaG90IjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B2aXRlc3Qvc25hcHNob3QvLS9zbmFwc2hvdC00LjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUNqQ0ZnYVM4YVp6K201blRjRWNnay94aFd2MHJFSDRZbDUzUFBsTVhPWjEvS2EyVmNaVTZDSitNZ1lDWmJjSnZ6R2hRUmpWckdRTlpxa0dQdHRJS3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogIjUuNTkuMTEiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Zpc2l0b3Ita2V5cyI6ICI1LjU5LjExIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKKyAgICAgICAgIkB2aXRlc3QvcHJldHR5LWZvcm1hdCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3V0aWxzIjogIjQuMS40IiwKKyAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4zMC4yMSIsCisgICAgICAgICJwYXRoZSI6ICJeMi4wLjMiCiAgICAgICB9LAogICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS92aXRlc3QiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC90eXBlLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNS41OS4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGUtdXRpbHMvLS90eXBlLXV0aWxzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxacVZZOGhNaVZSRjJhNy9zd21rU3RNWVNvWE1GbHpMNnNYVjZVLzJnTDVjd25MV1FnTEVHOHRqV1BwYUU0ck1JZFo2VktXd2NmZlBsbzFqUGZrNDNnPT0iLAorICAgICJub2RlX21vZHVsZXMvQHZpdGVzdC9zcHkiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHZpdGVzdC9zcHkvLS9zcHktNC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVh4TmRBc0tXN0MrRkx5ZHFGSkxiNUtoSnRsM1BHQ01tWXdGUmZodklneEp2TFNYaGhWSTF6TThmMXFEM1pnN1JDalRTekRWeWN0NnNnaHM5VUVnQkVRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdml0ZXN0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Adml0ZXN0L3V0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B2aXRlc3QvdXRpbHMvLS91dGlscy00LjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMTNRTVQrZXlzTTV1VkdhMXJHNGtlZ0dZTnA2Y25RY3NUYzY3RUxGYmhOTFFPK3Znc3lndFlKeDJraHZkdDRnVlFxU1NwQy9LVDVGWlp4VXBQM09hdHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjUuNTkuMTEiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogIjUuNTkuMTEiLAotICAgICAgICAiZGVidWciOiAiXjQuMy40IiwKLSAgICAgICAgInRzdXRpbHMiOiAiXjMuMjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCisgICAgICAgICJAdml0ZXN0L3ByZXR0eS1mb3JtYXQiOiAiNC4xLjQiLAorICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCisgICAgICAgICJ0aW55cmFpbmJvdyI6ICJeMy4xLjAiCiAgICAgICB9LAogICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICIqIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgInR5cGVzY3JpcHQiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC90eXBlcy8tL3R5cGVzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVwb042UjZ0a3ZCWVNjK2NsbHJ6K2Myc09GV2tiaXNKWldrT0UreTN4SHR2WWFPRTZXazZCOGUxMTRNY1JKd0ZSakd2WWRKd0xYUUg1Yzlvc01FL0FBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZS8tL3R5cGVzY3JpcHQtZXN0cmVlLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVl1cE9wb3Q1aEpPMG1hdXBKWGl4aTZsNUVUZHJJVHhlbzVlQk9ldVY3UlNLZ1lkVTNHNWN4TzQ5LzlXUm5KcTlFTXJCN0F1VFNMSC9icU9zWGk3d1BBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI1LjU5LjExIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiLAotICAgICAgICAiZ2xvYmJ5IjogIl4xMS4xLjAiLAotICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjMiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuNyIsCi0gICAgICAgICJ0c3V0aWxzIjogIl4zLjIxLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAidHlwZXNjcmlwdCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlL25vZGVfbW9kdWxlcy9hcnJheS11bmlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS11bmlvbi8tL2FycmF5LXVuaW9uLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IR3l4b09UWVV5Q002c3RVZTZFSmduZDRFb2V3QUk3ek1kZnFPK2tHam5sWm1CRHovY1I1cGY4ci9jUjRXcTYwc0wvcDBJa2NqVUVFUHdTM0dGckl5dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZS9ub2RlX21vZHVsZXMvZ2xvYmJ5IjogewotICAgICAgInZlcnNpb24iOiAiMTEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYnkvLS9nbG9iYnktMTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qaElYYU96eTFzYjhJeW9jYXJ1V1NuMVRqbW5CVnM4QXloY3k4M3JteE5KOHEydVdLQ0FqM0NuSlkrS3BHU1hDdWVBUGMwaTA1a1Z2Vkt0UDF0OVMzZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS11bmlvbiI6ICJeMi4xLjAiLAotICAgICAgICAiZGlyLWdsb2IiOiAiXjMuMC4xIiwKLSAgICAgICAgImZhc3QtZ2xvYiI6ICJeMy4yLjkiLAotICAgICAgICAiaWdub3JlIjogIl41LjIuMCIsCi0gICAgICAgICJtZXJnZTIiOiAiXjEuNC4xIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUvbm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpvNmRKMDRDbVNqdXpud0pTUzNwVWVXbWQvSDBmZlRsa1hYZ3daaStlcTFVQ21xUXdDaCtlTHNZT1lDd1k5OTFpMkZhaDRoMUJFTUN4NHFUaEdic2lBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUvbm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNvZnR1VFJPdi9jUmpDemUvc2NqR3lpRHRjVXl4dzFyZ1lRU1pZN1hUbXRSNWhYK2RtNzZpRGJUSDhUa0xQSENRbWxiUVZTU2JOWkNQTTJoYjBrbm5RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUvbm9kZV9tb2R1bGVzL3lhbGxpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC91dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC91dGlscy8tL3V0aWxzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRpZHUyckhTT01VZEpUaExrNGFaMU9yOEljTzNIekN3L1p2RWpUVElmaklyY2RkNWN2U0l3d0R5MkFPbEU3aHRTTnA3UUlaMTBmTE15UkN2ZWVzTUxnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6ICJeNC4yLjAiLAotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuOSIsCi0gICAgICAgICJAdHlwZXMvc2VtdmVyIjogIl43LjMuMTIiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiNS41OS4xMSIsCi0gICAgICAgICJlc2xpbnQtc2NvcGUiOiAiXjUuMS4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNy4zLjciCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC91dGlscy9ub2RlX21vZHVsZXMvZXNsaW50LXNjb3BlIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1zY29wZS8tL2VzbGludC1zY29wZS01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMk54d2JGL2haMEtwZXBZTjBjTmJvK0ZONlhvSzdHYUhsUWhneC9oSVpsNlZhMGJGNDVSUU9Pd2hMSXk4bFFEYnVDaWFkU0xDQm5IMkNGWXF1aXQ1Ync9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNyZWN1cnNlIjogIl40LjMuMCIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl40LjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzL25vZGVfbW9kdWxlcy9lc3RyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJhdmVyc2UvLS9lc3RyYXZlcnNlLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zOW5uS2ZmV3o4eE4xQlUvMmM3OW45bkI5SER6bzBuaVlVcXg2eHlxVW55b0FuUXl5V3BPVGRaRWVpQ2NoOEJCdTUxNXQ0d3A5Wm1nVmZWaG45RUJwdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzL25vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ5YWxsaXN0IjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzL25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjUuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Tb2Z0dVRST3YvY1JqQ3plL3Njakd5aUR0Y1V5eHcxcmdZUVNaWTdYVG10UjVoWCtkbTc2aURiVEg4VGtMUEhDUW1sYlFWU1NiTlpDUE0yaGIwa25uUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlci5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzL25vZGVfbW9kdWxlcy95YWxsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zd2RHaWRaeXE1UEIwODRYTEVTNVRwT1NSQTN3alhBbElXTWh1bTJrUmN2LzQxU24yZW1RMGR5Y1FXNHVaWExlandLdmc2RXN2YmRsVkwrRllFY3Q3QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzIjogewotICAgICAgInZlcnNpb24iOiAiNS41OS4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3Zpc2l0b3Ita2V5cy8tL3Zpc2l0b3Ita2V5cy01LjU5LjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LR1luaVRHRzNBTVR1S0Y5UUJEN0VJcnZ1ZmtCNk82dVgza25QNzN4YktMTXBIK1FSUGNnbkN4aldYU0hqTVJ1T3hGTG92bGpxUWdRcFIwYzdHdmpvQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJlc2xpbnQtdmlzaXRvci1rZXlzIjogIl4zLjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHdlYmFzc2VtYmx5anMvYXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy9hc3QvLS9hc3QtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JTjF4STdQd092TFBnamNmMTgwZ0MxYnFuM3EvUWFPQ3dZVWFoSU9oYllVdThLQS8zdHcyUlQvVDBHaWRpMWw3SGhqNUQvSU5oSnhpSUNPYnFwTXU0UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItbnVtYmVycyI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaGVscGVyLXdhc20tYnl0ZWNvZGUiOiAiMS4xMS42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ad2ViYXNzZW1ibHlqcy9mbG9hdGluZy1wb2ludC1oZXgtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy9mbG9hdGluZy1wb2ludC1oZXgtcGFyc2VyLy0vZmxvYXRpbmctcG9pbnQtaGV4LXBhcnNlci0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVqQWo5aGZSSjJYTXNOSGsvdjZGdTJkR1MraTRVYVhCWEdlbU9mUS9KZlE2bWRRZy9XWHR3bGVRUkxMUzRPdmZEaHY4clluVndIMjdZSkxNeVlzeGh3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IvLS9oZWxwZXItYXBpLWVycm9yLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzBZa29QNHBWdTRyTjhhVEpnQXlqOWhDMlN2NVVsa3pDSGh4cVdqOGJ1dGFMdm5wZGMyak93aDRld0U2Q1gwdHhTZkxuL1VZYVYvcGhlUzJUeGcvL1E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHdlYmFzc2VtYmx5anMvaGVscGVyLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvaGVscGVyLWJ1ZmZlci8tL2hlbHBlci1idWZmZXItMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16M25GemRjcDFtYjhuRU9GRms4RHJZTHBIdmhLQzNnckpEMmFyZGZLT3ptYm1KdkVmL3RQSXFDWStzTmN3WklZOFpEN0lrQjJsNy9wcWhVaHFtN2hMQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ad2ViYXNzZW1ibHlqcy9oZWxwZXItbnVtYmVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvaGVscGVyLW51bWJlcnMvLS9oZWxwZXItbnVtYmVycy0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZVSWhaOExab0lXSEJvaGlFT2J4Vm02aHdQMDM0andtYzlrdXE1R2RIWkgwd2lMVkxJUGNNQ2RwSnpHNEMxMWNIb1EyNVRGSVFqOWthVkFEVlg3TjNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2Zsb2F0aW5nLXBvaW50LWhleC1wYXJzZXIiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IiOiAiMS4xMS42IiwKLSAgICAgICAgIkB4dHVjL2xvbmciOiAiNC4yLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLWJ5dGVjb2RlIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy9oZWxwZXItd2FzbS1ieXRlY29kZS8tL2hlbHBlci13YXNtLWJ5dGVjb2RlLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0ZGSEt3Y21CcHJPOWU3SWNmMCtnZGR5V1lEVmlMOGJwUGpKSmwwV0h4Q2RFVGt0WGRtdFdMR1Z6b0hicVVjWTRCZTFMa05md1RtWE9KVUZaWVNKZEE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHdlYmFzc2VtYmx5anMvaGVscGVyLXdhc20tc2VjdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvaGVscGVyLXdhc20tc2VjdGlvbi8tL2hlbHBlci13YXNtLXNlY3Rpb24tMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MUHBaYlNPd1RwRUMyY2duNGhUeWR5U3kxS2UrWEV1K0VUWHVveXZ1eWV6SE8zS2pkdTkwS0s5NVNoOXhUYm1qckNzVXd2V3dDT1FRTnRhMzdWclM5Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9hc3QiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1idWZmZXIiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLWJ5dGVjb2RlIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLWdlbiI6ICIxLjExLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B3ZWJhc3NlbWJseWpzL2llZWU3NTQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL2llZWU3NTQvLS9pZWVlNzU0LTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTE00cDJjc1BOdmJpajZVMWYxOXY2V1I1NlFaOEpjSGczUUlKVGxTd3pGY214NldTT1JpY1lqNkk2M2Y5eVUxa0VVdHJwRytramtpSUFrZXZIcERYcmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHh0dWMvaWVlZTc1NCI6ICJeMS4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B3ZWJhc3NlbWJseWpzL2xlYjEyOCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvbGViMTI4Ly0vbGViMTI4LTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbTdhMEZoRTY3RFFYZ291ZjF0Yk41WFFjZFdvTmdhQXVvVUxISWZHRklFVktBNnR1L2VkbHM2WG5JbGttUzZGclhBcXVKUlBuaTNaWktqdzZGU1BqUFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHh0dWMvbG9uZyI6ICI0LjIuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHdlYmFzc2VtYmx5anMvdXRmOCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvdXRmOC8tL3V0ZjgtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12dFhmMndUUTMrdXA5WnNnOHNhMnlXaVFwelNzTXlYajBxVmlWUDZ4S0dDVVQ4cDhZSjZIcUk3bDVlQ25XeDFUL0ZZZHN2MDdIUXMyd1RGYmJvZi9SQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Ad2ViYXNzZW1ibHlqcy93YXNtLWVkaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL3dhc20tZWRpdC8tL3dhc20tZWRpdC0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlibjJJNmZuZklHdUNSK0ZhYXo3WWN2dEJLeHZvTFYzTGVibjF0TTRvL0lBSnptaTlBV1lJUFdweUJmVThjQytKeEFPNTdiazQremRzVGpKUitWVE93PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2FzdCI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaGVscGVyLWJ1ZmZlciI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaGVscGVyLXdhc20tYnl0ZWNvZGUiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLXNlY3Rpb24iOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3dhc20tZ2VuIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLW9wdCI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvd2FzbS1wYXJzZXIiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3dhc3QtcHJpbnRlciI6ICIxLjExLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B3ZWJhc3NlbWJseWpzL3dhc20tZ2VuIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy93YXNtLWdlbi8tL3dhc20tZ2VuLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM1hPcWtaUC95NkI0RjBQQkFYdkkxL2JreTdHcnlvb2dVdGZ3RXhlUC92N056d28xUUxjcTVvUW1wS2xmdFpMYlQrRVJVT0FaVlFqdU5WYWs2VVhqUEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItd2FzbS1ieXRlY29kZSI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaWVlZTc1NCI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvbGViMTI4IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy91dGY4IjogIjEuMTEuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHdlYmFzc2VtYmx5anMvd2FzbS1vcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL3dhc20tb3B0Ly0vd2FzbS1vcHQtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jT3JLdUxSRTdQQ2U2QXNPVmw3V2FzWWYzd2JTbzRDZU9rNlBrcmpTN2c1N01GZlZVRjl1NnlzUUJCT0RYMExkZ1N2UXFSaUd6M0NYdklES2NQTnk0Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9hc3QiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1idWZmZXIiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3dhc20tZ2VuIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLXBhcnNlciI6ICIxLjExLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B3ZWJhc3NlbWJseWpzL3dhc20tcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy93YXNtLXBhcnNlci8tL3dhc20tcGFyc2VyLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlp3UGVHek1KTTNEcXAzaENzTGdFU3hCR3RUL09lQ3ZDWjRUQTFKVVBZZ21oQXgzOHRUUFI5SmFLeTBTNUgzZXZRcE8vaDJ1V3MyajZZYy9mamtwVFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItYXBpLWVycm9yIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItd2FzbS1ieXRlY29kZSI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaWVlZTc1NCI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvbGViMTI4IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy91dGY4IjogIjEuMTEuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHdlYmFzc2VtYmx5anMvd2FzdC1wcmludGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy93YXN0LXByaW50ZXIvLS93YXN0LXByaW50ZXItMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KTTdBaFJjRSt5VzJHV1lhS2VITDV2dDR4cWVlNU4yV2NlenB0bWd5aE5TK1NjZ2dxY1QxT3RYeWtoQWIxM1NuNVlhczBqMnV2OXRIZ3Jqd3Z6QVA0QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9hc3QiOiAiMS4xMS42IiwKLSAgICAgICAgIkB4dHVjL2xvbmciOiAiNC4yLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B4dHVjL2llZWU3NTQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHh0dWMvaWVlZTc1NC8tL2llZWU3NTQtMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURYOG5LZ3FjR3dzYzBlSlNxWXQ1bHdQNERINUZsSG5tdVdXQlJ5N1gwTmNhR1IwWnR1eWVFU2dNd1RZVkV0eG1zTkdZK3FpdDRRWVQvTUlZVE9UUGVBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B4dHVjL2xvbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHh0dWMvbG9uZy8tL2xvbmctNC4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU51SHFCWTFQQi9EOHhVNnMvdGhCZ09BaUFQN0hPWURRMzIrQkZaSUxKOGl2a1VrQUhRbldmbjZXaEw3OU93ajFxbVVub04vWVBoa3RkSW91Y2lwa0FRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FiYWIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWJhYi8tL2FiYWItMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWoyYWZTc2FJRU52SFpOMkI4R09wRjU2NnZaNVdWazVvcEFpTVR2V2dhUVQ4RGtiT3FzVGZ2TkF2SG9SR1UyenpQOGNQb3F5cyt4SFRSRFdXOEwrL0JBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FjY2VwdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNjZXB0cy8tL2FjY2VwdHMtMS4zLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBZQXRoVGEybTJWS3h1dlNEM0RQQy9HeStVK3NPQTFMQXVUOG1rbVJ1dncrTkFDU2FlWEVRK05IY1ZGN3JPTmw2cWNheFYzVXVlbXdhd2srNytTSkx3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAifjIuMS4zNCIsCi0gICAgICAgICJuZWdvdGlhdG9yIjogIjAuNi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdml0ZXN0IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9hY29ybiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi8tL2Fjb3JuLTguOS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qYVZOQUZCSE5MWHNwTzU0M1duTk5QWkZSdGF2aDNza0FrSVRxRDAvMmFlTWtLWlROKzI1NFB5aHd4RllyazN2UTF4ZlkrMndiZXNKTXMvSkM4L1B3UT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjguMTQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4vLS9hY29ybi04LjE0LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNsNjY5bkNKVFpCc0w5N09GNGtVUW01ZzVoQzJ1aWhrME54WTNXRU5BQzBUWWRJTFZrQXlIeW1BbnRneEdrbDdLK3QwY1hJckg1c2l5NVM0WGtGeWNBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgInBlZXIiOiB0cnVlLAogICAgICAgImJpbiI6IHsKICAgICAgICAgImFjb3JuIjogImJpbi9hY29ybiIKICAgICAgIH0sCkBAIC01MTk5LDE2OSArMTc3MywyMiBAQAogICAgICAgICAibm9kZSI6ICI+PTAuNC4wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybi1nbG9iYWxzIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLWdsb2JhbHMvLS9hY29ybi1nbG9iYWxzLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aUWw3TE9XYUY1ZVBxcWNYNGhMdXYvYkxYWVFOZk5XdzJjMC95WC9Uc1BSS2FtekhjVEdRbmxDakhUM1RzbWtPVVZFUFMzY3JDeGlQZmR6RS9UcmxoZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY29ybiI6ICJeNy4xLjEiLAotICAgICAgICAiYWNvcm4td2FsayI6ICJeNy4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fjb3JuLWdsb2JhbHMvbm9kZV9tb2R1bGVzL2Fjb3JuIjogewotICAgICAgInZlcnNpb24iOiAiNy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLy0vYWNvcm4tNy40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5ReXAwbzEvbU5kYlRPMVBPNmtIa3dTcm1nWjBNVC9qQ0NwTml3YlVqR29STjRkbEJocUp0b1F1Q25FT0t6Z1RWd2cwWldpQ29ReTZTeE1lYlFWaDhBPT0iLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImFjb3JuIjogImJpbi9hY29ybiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWNvcm4taW1wb3J0LWFzc2VydGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjkuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4taW1wb3J0LWFzc2VydGlvbnMvLS9hY29ybi1pbXBvcnQtYXNzZXJ0aW9ucy0xLjkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY21Nd29wOXgrOEtGaHh2S3JLZlBZbU42L3BLVFlZSEJxTGEwRGZ2VlpjS01KV055V0xuYXFORDdkeC9xbjY2Ujdld00xVVg1WE1hRFZQNXdsVlRhVkE9PSIsCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFjb3JuIjogIl44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybi1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4tanN4Ly0vYWNvcm4tanN4LTUuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ycTlzK0pOaGYwSUNoanREWHhsbEo3ZzQxb1prNVNsWHRwMExId3lBNWNlanduN3ZLbUtwNHBQcmk2WUVlUHYyUFU2NXNBc2VnYlh0SWlubURGRFhnUT09IiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWNvcm4iOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fjb3JuLXdhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4td2Fsay8tL2Fjb3JuLXdhbGstNy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9QZENGNkdzTUlQK0F6K2FXZkFBT0V0Mi8raVZES0U3b3k2bEowOThhb2U1OW9BbUs3NnFWNkd3NjBTYlo4akh1RzJ3SDA1OEdGNHBMRmJZYW1ZclZBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC40LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FkZHJlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWRkcmVzcy8tL2FkZHJlc3MtMS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRCL3FLQ2ZlRS9PRFVhQVVwU3dmemF6bzV4MjlXRDRyM3ZYaVdzQjdJMm1TREFpaHdFcUtPK2c4R0VMWlVRU1NBbzVlMVhUWWgzWlZmTHl4QmMxMm5BPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWRqdXN0LXNvdXJjZW1hcC1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWRqdXN0LXNvdXJjZW1hcC1sb2FkZXIvLS9hZGp1c3Qtc291cmNlbWFwLWxvYWRlci00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1h3TjViOXBDVVhOUUhKcHd3RDJxUDQwYnlFbVNnemo4QjR5ZFNOMHVNTllXaUZtSjZ4Nkt3VWxsTW1mazhSd3UvSEpERlI3VTh1YnNXQm9OMFhwMEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9hZGVyLXV0aWxzIjogIl4yLjAuMCIsCi0gICAgICAgICJyZWdleC1wYXJzZXIiOiAiXjIuMi4xMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjkiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2FnZW50LWJhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWdlbnQtYmFzZS8tL2FnZW50LWJhc2UtNi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJaTndOY2xGNytNUy84YkRnNzBhbWczMmR5ZVpHWnhpRHVRbVp4S0xBbFFqcjNqR3lMeCs0S2trNThVTzdEMlFkZ0ZJUUNvdnVTdVpFU25lNlJHNlhRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogIjQiCi0gICAgICB9LAorICAgICAgInZlcnNpb24iOiAiNy4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FnZW50LWJhc2UvLS9hZ2VudC1iYXNlLTcuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NbkErWVQ4ZndmSlBnQngzbTYwTU5xYWttMzBYT2t5SW9IMXk2aHVUUXZDMFB3Wkc3a2k4TmFjTEJjclBiTm9vOHZFWnk3SnB1azcrak1PK0NVb3ZUUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWp2IjogewotICAgICAgInZlcnNpb24iOiAiNi4xMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYvLS9hanYtNi4xMi42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qM2ZWTGd2VG81MjdhbnlZeUpPR1RZSmJHK3ZublFZdkUwbTVtbWtjMVRLK254QXBwa0NMTUlMMGFaNGRibFZDTm9HU2hobStrekU0WlV5a0JvTWc0Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4xIiwKLSAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIl4yLjAuMCIsCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMC40LjEiLAotICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZXBvYmVyZXpraW4iCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi1mb3JtYXRzLy0vYWp2LWZvcm1hdHMtMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVd4MEt4NTJoeEU3QzE4aGtNRWdnWWxFaWZxV1p0WWFSZ291Sm9yK1dNZFBuUXlFSzEzdmdFV3lWTnVwN1NvZWVvTE1zcjRrZjVoNmRPVzExSTE1TVVBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFqdiI6ICJeOC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgImFqdiI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWp2LWZvcm1hdHMvbm9kZV9tb2R1bGVzL2FqdiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMTIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2Ly0vYWp2LTguMTIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1J1MWtwY085eUx0WXhCS3ZxZlRlaDlLelpFd08zU1R5WDFIVCs0Q2FEekM2SHBUR1loSWhQSXpqOVh1S1U3S1lEd25hZWg1aGNPd2p5MVF1SnpCUEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMS4wLjAiLAotICAgICAgICAicmVxdWlyZS1mcm9tLXN0cmluZyI6ICJeMi4wLjIiLAotICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZXBvYmVyZXpraW4iCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXNjaGVtYS10cmF2ZXJzZS8tL2pzb24tc2NoZW1hLXRyYXZlcnNlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hanYta2V5d29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjUuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2LWtleXdvcmRzLy0vYWp2LWtleXdvcmRzLTMuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01cDZXVE4wRGRUR1ZRazZWamNFanUxOUlnYUh1ZGFsY2ZhYkQ3eWhER2VBNmJjUW5tTCtDcHZlTEpxLzNodmZ3ZDFhb2Y2TDM4Nk91Z2t4NlJmeU1JUT09IiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogIl42LjkuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYW5zaS1lc2NhcGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktZXNjYXBlcy8tL2Fuc2ktZXNjYXBlcy00LjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0tYajVBTHJLV1FMc1lHOWpsVFJtUi94S2x1eEhWK1o5UUV3TklnQ2ZNMS91d1BNQ3V6VlZuaDVtd1RkK091Qlpjd1NJTWJxc3NOV1JtMWxFNTFRYVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjIxLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hbnNpLWh0bWwtY29tbXVuaXR5IjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktaHRtbC1jb21tdW5pdHkvLS9hbnNpLWh0bWwtY29tbXVuaXR5LTAuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xQVBIQXlyMytQQ2Ftd053M2JYQ1BwNEhGTE9OWnQveUlIMHNacDAvNDY5S1dOVEV5K3FONWpRM0dWWDZETVoxVVhBaTM0eVZ3dFRlYUcvSHBCdXV6dz09IiwKLSAgICAgICJlbmdpbmVzIjogWwotICAgICAgICAibm9kZSA+PSAwLjguMCIKLSAgICAgIF0sCi0gICAgICAiYmluIjogewotICAgICAgICAiYW5zaS1odG1sIjogImJpbi9hbnNpLWh0bWwiCisgICAgICAgICJub2RlIjogIj49IDE0IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewogICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInBlZXIiOiB0cnVlLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49OCIKICAgICAgIH0KQEAgLTUzNzAsNiArMTc5Nyw3IEBACiAgICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy00LjMuMC50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItemJCOXJDSkFUMXJiamlWRGIyaHFLRkhOWUx4Z3RrOE5VUnhaM0lad0QzRjZOdHhiWFpRQ25uU2kxTGt4K0lEb2hkUGxGcDIyMndWQUxJaGVaSlFTRWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKICAgICAgIH0sCkBAIC01MzgwLDYwNCArMTgwOCw1NyBAQAogICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FueS1wcm9taXNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueS1wcm9taXNlLy0vYW55LXByb21pc2UtMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdVdm1LYWxXUnQxd2dqTDFSckd4b1NKVy8wUVpGSWVncGVHdlpHOWtqcDh2clJ1NTVYVEhid25xcTJHcFhtOXVMYmN1aHhtM0lxWDlPQjRNWlIxYjJBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FueW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueW1hdGNoLy0vYW55bWF0Y2gtMy4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtNUmVGVXIwQjR0K0QrT0JralIzS1lxdm9jcDJYYVN6TzU1VWNCNm1nUU1kM0tiY0UrbVdUeXZWVjdEL3pzZEViTm5WNmFjWlV1dGtpSFFYdlRyMVJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vcm1hbGl6ZS1wYXRoIjogIl4zLjAuMCIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hcmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJnLy0vYXJnLTUuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QWWp5Rk9MS1E5eTU3SnZRNlFMbzhkQWdOcXN3aDhNMVJNSllkUWR1VDZ4YldTZ0szNlAvWi92K3A4ODhwTTY5ak1NZlM4WGQ4RjZJMWtRL0k5SFVHZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hcmdwYXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJncGFyc2UvLS9hcmdwYXJzZS0xLjAuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW81Um95NnRORzRTTC9GT2tDQU42UnpqaWFrWlMyNVJMWUZyY010dEpxYmRkOEJXcm5BK2ZHejU3aU41UGIwNnB2Qkd2bDVnUTBCNDhkSmxzbFh2b1RnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNwcmludGYtanMiOiAifjEuMC4yIgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9hcmlhLXF1ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyaWEtcXVlcnkvLS9hcmlhLXF1ZXJ5LTUuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNWlKNWxrdUh5Ynp0VWZ1T0F6bm1ib3lqV3E4TzZzcU5xdEs3Q0xPcWR5ZGk1NFZOYk9ScDQ5bWIxNEtiV2dHMVFEM0pGTzloSmRaK3k0S3V0ZmRPUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWVwLWVxdWFsIjogIl4yLjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXJyYXktYnVmZmVyLWJ5dGUtbGVuZ3RoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LWJ1ZmZlci1ieXRlLWxlbmd0aC8tL2FycmF5LWJ1ZmZlci1ieXRlLWxlbmd0aC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTFB1d2IyUCtOclF3M1hoeEdjMzYrWFN2dUJQb3BvdlhZVFI5RXcrK0R1OVliL2J4NUF6QmZySXNCb2owRVpVaWZqUVUrc0hMMjFzc2VaM2plcldPL0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJpcy1hcnJheS1idWZmZXIiOiAiXjMuMC4xIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FycmF5LWZsYXR0ZW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktZmxhdHRlbi8tL2FycmF5LWZsYXR0ZW4tMi4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhOZnpjT1Y4VzROZHVhbHRxQkZQeVZPKzU0RFNKdVpHWTlxVDRwUnJvQjZTOWUzaWlpZG8ySVNJQzVoOVIyc1BKOEgzRkhDSWlFbnN2MWxQWE8zS3RRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FycmF5LWluY2x1ZGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LWluY2x1ZGVzLy0vYXJyYXktaW5jbHVkZXMtMy4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNnVGJMdkw2Y05udzI0Rm5iYUR5am12ZGRRMk1MOGFyWnNnYUpob0FCTW9wbHovNFFSaHRyWVMrYWxyMUJVTTFCd3A2ZGh4OHZWQ0JTTEcrU3R3T0Z3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4xLjMiLAotICAgICAgICAiaXMtc3RyaW5nIjogIl4xLjAuNyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FycmF5LXVuaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LXVuaW9uLy0vYXJyYXktdW5pb24tMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR4cjZRSmovUmRVL2hDYUJqT2Z4VytxNmx5dVZFNkpGV0lyQVVwdU9PaG9KSm9ROTljVW4zaWdSYUhWQjVQOVdyZ0ZWTjBGZkFyTTN4MGN1ZU9VOG5nPT0iLAorICAgICAgInZlcnNpb24iOiAiNS4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyaWEtcXVlcnkvLS9hcmlhLXF1ZXJ5LTUuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iMFAwc1pQS3R5dThIa2VSQWZDcTBJZlVSWksrU3V3TWpZMVVYR0JVMjd3cEFpVHdRQUlscTU2SWJJTyt5dGsvSmpTMWZNUjE0ZWU1V0JCZktpNUo2QT09IiwKICAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFycmF5LXVuaXEiOiAiXjEuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXJyYXktdW5pcSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS11bmlxLy0vYXJyYXktdW5pcS0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTU5oYTRCV1E2SmJ3aEZoajAzWUs1NTJmN2NiM0F6b0U4U3plbGpnQ2h2TDFkbDNJY3ZnZ1hWejFEaWx6eVNaa0NqYStDWHVaYmRXN3lBVGNoV244L1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZsYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXkucHJvdG90eXBlLmZsYXQvLS9hcnJheS5wcm90b3R5cGUuZmxhdC0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcm9UVTBLV0lPbUo0RFJMbXdLZDE5T3RnMC9tVDNxUE50MFFiM0dXVzhpT2J1Wlh4cmpCL3B6bjBSM2hxcFJTV2c0SEN3cXgrMHZ3T25XbnZsT3llSUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIsCi0gICAgICAgICJlcy1zaGltLXVuc2NvcGFibGVzIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5mbGF0bWFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LnByb3RvdHlwZS5mbGF0bWFwLy0vYXJyYXkucHJvdG90eXBlLmZsYXRtYXAtMS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThVR245TzFGRFZ2TU5CMFVsTHY0dm94Uk16ZTcrRnBIeUY1bVNNUmpXSFVNbHBvRFZpbml5MDU4NzBWbHhoZmdUbkxicHV3VHp2RDc2TVR0V3hCL21RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiLAotICAgICAgICAiZXMtc2hpbS11bnNjb3BhYmxlcyI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUucmVkdWNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LnByb3RvdHlwZS5yZWR1Y2UvLS9hcnJheS5wcm90b3R5cGUucmVkdWNlLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rRGR1Z01sN2lkOUNPRThSN01IRjVqV2s3RHF0L2ZzNFB2K0pYb0lDbll3cXBqampiVXVyejZ3NWZUNUlHNmJyTGRKaHY2L1ZvSEIwSDdveUlCWGQrUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IiwKLSAgICAgICAgImVzLWFycmF5LW1ldGhvZC1ib3hlcy1wcm9wZXJseSI6ICJeMS4wLjAiLAotICAgICAgICAiaXMtc3RyaW5nIjogIl4xLjAuNyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS50b3NvcnRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS5wcm90b3R5cGUudG9zb3J0ZWQvLS9hcnJheS5wcm90b3R5cGUudG9zb3J0ZWQtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBaWVBYUFJsMlBxV2NzVXM2TE9NbisxZjE1MzJuRW9QVFlvd0J0cUx3QVcrVzh2U1Zoa0lHbm1PWDF0L1VRakQ2WUdJMHZjRDJCMVU3WkZHUUg5am5RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiLAotICAgICAgICAiZXMtc2hpbS11bnNjb3BhYmxlcyI6ICJeMS4wLjAiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FzYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXNhcC8tL2FzYXAtMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJTSFdnRFNBaUtzNTBvMlJlOHBwdnAzc2VWSFhTUk00NGNkU3NUOUZmTkVVVVpMT0dXVkNzaVdhUlBXTTFabm4rbXFaMU9mVlozejNEV0V6U3A3aFJBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FzdC10eXBlcy1mbG93IjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzdC10eXBlcy1mbG93Ly0vYXN0LXR5cGVzLWZsb3ctMC4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVCdlduMWx2SUFwWU1oelFNc3U5Y2lMZmtCWTQ5OW1GWmxOcUcrLzlXUjdQVmxyb1F3MHZHMzBjT1FRYmFLejNzQ0VjNDRUQU91MnlrenFYU05ud2FnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FzeW5jIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzeW5jLy0vYXN5bmMtMy4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlBQitKYkRFR1hoeUlVYXZvRGw5V1AvSmoxMDZLejlERW4xRFBnWXc1cnVEbjBlM1dnaTNzS0ZtNTVzQVNkR0JOT1FCOEY1OWQ5cVE3ZGVxckhBOHdRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FzeW5ja2l0IjogewotICAgICAgInZlcnNpb24iOiAiMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzeW5ja2l0Ly0vYXN5bmNraXQtMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9laTlPSDR0UmgwWXFVM0d4aFg3OWRNL213Vmd2YlpKYVNOYVJrK2JzaGtqMFM1Y2ZIY2dZYWtyZUJqckh3YXRYS2J6K0lvSWRZTHhyS2ltMk1qVzBRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2F0LWxlYXN0LW5vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXQtbGVhc3Qtbm9kZS8tL2F0LWxlYXN0LW5vZGUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStxL3Q3RWt2MUVEWTJsNkdkYTZMTGlYMTRyVTlUVjIwV2Ezb2ZlUW13UEZaYk9NbzlEWHJMYk9qRmFhY2xrWEtXaWRJYW9wd0FPYlFEcXdXdEdVanFnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hdXRvcHJlZml4ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC40LjE0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hdXRvcHJlZml4ZXIvLS9hdXRvcHJlZml4ZXItMTAuNC4xNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRlF6eWZPc1Rsd1Z6akh4S0VxUklBZEp4OW5pTzZWQ0JDb0V3YXgvVkxTb1FGMjlnZ0VDY1B1QnFVTVordThqQ1pPUFN5OGI4LzhLbnVGYnAwU2FGWlE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3Bvc3Rjc3MvIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvbnBtL2F1dG9wcmVmaXhlciIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNSIsCi0gICAgICAgICJjYW5pdXNlLWxpdGUiOiAiXjEuMC4zMDAwMTQ2NCIsCi0gICAgICAgICJmcmFjdGlvbi5qcyI6ICJeNC4yLjAiLAotICAgICAgICAibm9ybWFsaXplLXJhbmdlIjogIl4wLjEuMiIsCi0gICAgICAgICJwaWNvY29sb3JzIjogIl4xLjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImF1dG9wcmVmaXhlciI6ICJiaW4vYXV0b3ByZWZpeGVyIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXZhaWxhYmxlLXR5cGVkLWFycmF5cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hdmFpbGFibGUtdHlwZWQtYXJyYXlzLy0vYXZhaWxhYmxlLXR5cGVkLWFycmF5cy0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRE1EMEtpTjQ2ZWlwZXppU1QxTFBQL1NUZkRVMHN1ZklTWG1qU2d2VnNvVTJ0cXhjdFFlQVNlaldjZk50eFlLcUVUTTFVeFE4c3AyT3JTQldwSFk2c3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2F4ZS1jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiNC43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2F4ZS1jb3JlLy0vYXhlLWNvcmUtNC43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpJVVJHSVMxRTFRNHBjck1qcCtubkVoKzE2RzU2ZUcvTVVsbEpIOHlFdnc3YXNEbzdBYzl1aEM5S0lINWp6cElUdWVFWm9sZllnbG5DR0l1U0J6MzlnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXhvYmplY3QtcXVlcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXhvYmplY3QtcXVlcnkvLS9heG9iamVjdC1xdWVyeS0zLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItanN5SHU2MWU2TjRWYnovdjE4REh3V1lLSzBiU1dMcW40N2VlRFNLUEI3bTh0cU1IRjlZSittaElrMmxWdGV5WnJZOHRuU2ovakhPdjRZaVRDdUNKZ2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiZGVxdWFsIjogIl4yLjAuMyIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtamVzdC8tL2JhYmVsLWplc3QtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jZFE1ZFhqR1JkMElCUkFUaVE0bVpHbEdsUkU4a0pwalBPaXhkTlJkVCttM1VjTnFtWVdONnJLNm52dFhZZlkzRDc2Y2I4cy9PMVNzOGVhMjRQSXdjZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4xLjE0IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LWplc3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1sb2FkZXIvLS9iYWJlbC1sb2FkZXItOC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUg4U3ZzTUYrbTl0MTVITkxNaXBwcHprQytZMllxK3YzU29uWnlVNzBSQkwvaDFneFBrSDA4T3Q4cEVFOVo0S2QrY3p5V0pDbG1GUzhxeklQOU9aMDRRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZpbmQtY2FjaGUtZGlyIjogIl4zLjMuMSIsCi0gICAgICAgICJsb2FkZXItdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgIm1ha2UtZGlyIjogIl4zLjEuMCIsCi0gICAgICAgICJzY2hlbWEtdXRpbHMiOiAiXjIuNi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4LjkiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAiLAotICAgICAgICAid2VicGFjayI6ICI+PTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi43LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy0yLjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU0hpTnRNT1VHV0JRSnd6SVNpVllLdTgyR2lWNFFZR2VQcDNvZGxZMXR1S083Z1B0cGhBVDVSL3B5MGZBNnh0YmdMTC9SdnRKWm5VOWI4czBGMXEwWGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuNSIsCi0gICAgICAgICJhanYiOiAiXjYuMTIuNCIsCi0gICAgICAgICJhanYta2V5d29yZHMiOiAiXjMuNS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4LjkuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4taXN0YW5idWwvLS9iYWJlbC1wbHVnaW4taXN0YW5idWwtNi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkxSVFvazk4MjFjQzlvbkN4NW90Z0ZmUm03TG0rSSt3d3hPeDczOE0vV0xQWjlRNDJtNElHNVcwRk5YOFdMTDJnWU1abzNKa3VYSUgyRE9wV00rcXdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjAuMCIsCi0gICAgICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWciOiAiXjEuMC4wIiwKLSAgICAgICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6ICJeMC4xLjIiLAotICAgICAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiAiXjUuMC40IiwKLSAgICAgICAgInRlc3QtZXhjbHVkZSI6ICJeNi4wLjAiCi0gICAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXJyYXktdW5pb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktdW5pb24vLS9hcnJheS11bmlvbi0yLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSEd5eG9PVFlVeUNNNnN0VWU2RUpnbmQ0RW9ld0FJN3pNZGZxTytrR2pubFptQkR6L2NSNXBmOHIvY1I0V3E2MHNML3AwSWtjalVFRVB3UzNHRnJJeXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tamVzdC1ob2lzdC8tL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNTB3Q3dENUVNTlc0YVJwT3d0cXp5WkhJZXdUWU54TEE0bmhCKzA5ZDhCSXNzZk5mekJSaGtCSUhpYVB2MVNpMjI2VFFTdnA4Z3hBSm0yaVkycXMyaFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjMuMyIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMy4zIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4wLjAiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICJeNy4wLjYiCi0gICAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXNzZXJ0aW9uLWVycm9yIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fzc2VydGlvbi1lcnJvci8tL2Fzc2VydGlvbi1lcnJvci0yLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSXppOFJRY2ZmcUNlTlZnRmlnS2xpMXNza2xJYnBIbkNZYzZBa25YR1lvQjZnckpxeWVieTdqdjEySlVRZ21UQW5JRG5iY2sxdXhrc1Q0ZHpOM1BXQkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCisgICAgICAgICJub2RlIjogIj49MTIiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLXBsdWdpbi1tYWNyb3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLW1hY3Jvcy8tL2JhYmVsLXBsdWdpbi1tYWNyb3MtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNnN1RGR3BJcjAxdk9RTk9EWE9PYUd6Mk5wQ1U1Z2w4eDFxSkZiYjZoYlp4UjdYcmNFMnZ0YkFzVEFiSjcveHdKdFV1SkV3OEs4WnIvQUUwTEhsZXNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjEyLjUiLAotICAgICAgICAiY29zbWljb25maWciOiAiXjcuMC4wIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMTkuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIsCi0gICAgICAgICJucG0iOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wbHVnaW4tbmFtZWQtYXNzZXQtaW1wb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1uYW1lZC1hc3NldC1pbXBvcnQvLS9iYWJlbC1wbHVnaW4tbmFtZWQtYXNzZXQtaW1wb3J0LTAuMy44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XWGlBYysrcW83WGNKMVpuVFlHdEx4bUJDVmJkZEFtbDNDRVhnV2FCek56TE5veHRROEFpR0VGRE1PaG90OVhqVENRYnZQNUU3N0ZqOUdrOTI0ZjAwUT09IiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMi8tL2JhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMyLTAuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iTTNnSGMzMzdEdGE0OTBnZysvQXNlTkI5TDRZTEh4cTFuR0taWlNIYmhYdjRhVFlVMk1EMmNqemExUnU0UzY5NzVZTFRhTDFLOHVKZjZ1a0poaG10dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMTcuNyIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWRlZmluZS1wb2x5ZmlsbC1wcm92aWRlciI6ICJeMC40LjAiLAotICAgICAgICAic2VtdmVyIjogIl42LjEuMSIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMy8tL2JhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMzLTAuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pa0ZyWklUS2cxeEg2cExORDh6VDE0VVBnaktIaUdMcWV4N3JHRVpDSDJFdmhzbmVKYUpQZW1tcFFhSVpWNUFMMDNJSStsWHlsdzNVbWRkREs4UlU1UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWRlZmluZS1wb2x5ZmlsbC1wcm92aWRlciI6ICJeMC40LjAiLAotICAgICAgICAiY29yZS1qcy1jb21wYXQiOiAiXjMuMzAuMSIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wbHVnaW4tcG9seWZpbGwtcmVnZW5lcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLXBvbHlmaWxsLXJlZ2VuZXJhdG9yLy0vYmFiZWwtcGx1Z2luLXBvbHlmaWxsLXJlZ2VuZXJhdG9yLTAuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oREp0S2pNTFZhN1orTHduVEN4b0RMUWo2d2RjK0I4ZHVuN2F5RjJmWWllSTZPemZ1dmNMTUIzMmloSlo0VWhDQndOWUdsNWJnL3gvUDljTWRua2MyZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWRlZmluZS1wb2x5ZmlsbC1wcm92aWRlciI6ICJeMC40LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1yZW1vdmUtcHJvcC10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1yZW1vdmUtcHJvcC10eXBlcy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcmVtb3ZlLXByb3AtdHlwZXMtMC40LjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lcWowaFZjSlVSNTcvVWcyekUxWXN3c3c0TGh1cXFIaEQrOHYxMjBUMWNsM2tqZzc2UXd0eUJyZElrNFdWd0srbEFoQkpWWUNkL3YrNG5jNHkrOEpzQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheC8tL2JhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NN0xRMGJ4YXJreFFvTit2ejVhSlBzTEJuNzduOFFnVEZtbzhXSzAvNDRhdUsyeGxDWHJZY1V4SEZ4Z1U3cVc1WXp3L0NqbUxSSzJ1SnphQ2Q3THZxUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogIl43LjguNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1iaWdpbnQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXByb3BlcnRpZXMiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWxvZ2ljYWwtYXNzaWdubWVudC1vcGVyYXRvcnMiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9iamVjdC1yZXN0LXNwcmVhZCI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2F0Y2gtYmluZGluZyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmciOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdCI6ICJeNy44LjMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLXByZXNldC1qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtamVzdC8tL2JhYmVsLXByZXNldC1qZXN0LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnB0ZjJGemxQQ1dZdUpnNDFIQnFYVlQ4eW02YlhPZXZ1Q1RiaHhsVXBqd3R5c0dhSVdGdkRFanA0eStHN2ZsMTNGZ09kanM3UC9EbUVycUg3ZGEwQWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wcmVzZXQtcmVhY3QtYXBwIjogewotICAgICAgInZlcnNpb24iOiAiMTAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtcmVhY3QtYXBwLy0vYmFiZWwtcHJlc2V0LXJlYWN0LWFwcC0xMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIwRDlJWjFXaGhDV2tyVFh5RnVJSWdxR3pTa1JJSDVENUFtQjBiWGJ6WUFCMU9CQXdIY1VleVdXMkxvcnV0TFdGNWJ0Tm8vTjdyL2NJZG12dktKbFlnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1jbGFzcy1wcm9wZXJ0aWVzIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1kZWNvcmF0b3JzIjogIl43LjE2LjQiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtcHJpdmF0ZS1tZXRob2RzIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZmxvdy1zdHJpcC10eXBlcyI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJ1bnRpbWUiOiAiXjcuMTYuNCIsCi0gICAgICAgICJAYmFiZWwvcHJlc2V0LWVudiI6ICJeNy4xNi40IiwKLSAgICAgICAgIkBiYWJlbC9wcmVzZXQtcmVhY3QiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcHJlc2V0LXR5cGVzY3JpcHQiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcnVudGltZSI6ICJeNy4xNi4zIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1tYWNyb3MiOiAiXjMuMS4wIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcmVtb3ZlLXByb3AtdHlwZXMiOiAiXjAuNC4yNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFsYW5jZWQtbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM29TZVVPMFRNVjY3aE4xQW1iWHNLNHlhcVU3dGppSGxieFJEWk9wSDBLVzkrQ2VYNGJSQWFYMEFueHQwdHgyTXJwUnBXd1FhUHdJbElTRUpoWVU1UHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmF0Y2gvLS9iYXRjaC0wLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteCtWQWlNUkw2VVBreCtrdWROdnhUbDZoQjJYTk5DRzJyKzd3aXhWZklZd3UvMkhLUlhpbXdReWF1bUxqTXZlV3ZUMkhrZC9jQUp3K1FCTWZKL0VLVnc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmZqIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jmai8tL2Jmai03LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2UvVXFVendtekphbU5GNTB0QlY2dFpQVE9Sb3c3Z1E5NmlGb3crOGI1NjJPZE1wRUswQmNKRXEyT1NQRURtQWJTTUJRN1BLWjg3dWJGa2d4cFlXZ3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmx1ZWJpcmQiOiAiXjMuNS41IiwKLSAgICAgICAgImNoZWNrLXR5cGVzIjogIl4xMS4xLjEiLAotICAgICAgICAiaG9vcHkiOiAiXjAuMS40IiwKLSAgICAgICAgInRyeWVyIjogIl4xLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JpZy5qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iaWcuanMvLS9iaWcuanMtNS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZ5TDJPeW1KeG1hck84Z3hNcjBtaENoc085UUd3aHluZnV1NCtNSFRBVzZjemZxOWh1bUNCN3JLcFVqRGQ5WVVpRFBVNG16cHl1cEZTdk9DbEF3Ym1RPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JpbmFyeS1leHRlbnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JpbmFyeS1leHRlbnNpb25zLy0vYmluYXJ5LWV4dGVuc2lvbnMtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWpEY3RKL0lWUWJab0p5a29lSGJoWHBPbE5CcUdOY3dYSktKb2c0MkU1SERQVXdRVFNkakNIZGloamowRGxuaGVRN2JsYlQ2ZEhPYWZOQWlTOG9vUUtBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmx1ZWJpcmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjcuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmx1ZWJpcmQvLS9ibHVlYmlyZC0zLjcuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWHBOajZHRFF6ZGZXK3IyV25uN3hpU0FkN1RNM2p6a3hHWEJHVHRXS3VTWHYxeFVWK2F6eEFtOGpkV1pOMDZRVFFrKzJOMlhCOWpSRGt2Ym1RbWNSdGc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYm9keS1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIwLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JvZHktcGFyc2VyLy0vYm9keS1wYXJzZXItMS4yMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qV2k3YWJUYll3YWpPeXRXQ1FjMzdWdWxtV2lSYWU1UnlUcGFDeURjUzUvbE1kdHdTejVsT3BERTY3c3J3L0hZZTM1ZjF6M2ZEUXcrM3R4ZzdnTnRXdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJieXRlcyI6ICIzLjEuMiIsCi0gICAgICAgICJjb250ZW50LXR5cGUiOiAifjEuMC40IiwKLSAgICAgICAgImRlYnVnIjogIjIuNi45IiwKLSAgICAgICAgImRlcGQiOiAiMi4wLjAiLAotICAgICAgICAiZGVzdHJveSI6ICIxLjIuMCIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICIyLjAuMCIsCi0gICAgICAgICJpY29udi1saXRlIjogIjAuNC4yNCIsCi0gICAgICAgICJvbi1maW5pc2hlZCI6ICIyLjQuMSIsCi0gICAgICAgICJxcyI6ICI2LjExLjAiLAotICAgICAgICAicmF3LWJvZHkiOiAiMi41LjEiLAotICAgICAgICAidHlwZS1pcyI6ICJ+MS42LjE4IiwKLSAgICAgICAgInVucGlwZSI6ICIxLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IiwKLSAgICAgICAgIm5wbSI6ICIxLjIuODAwMCB8fCA+PSAxLjQuMTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JvZHktcGFyc2VyL25vZGVfbW9kdWxlcy9ieXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ieXRlcy8tL2J5dGVzLTMuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vTmY3VHl6VHg2UzN5UkpPYk9BVjc5NTZyOGNyMitPajhBQzVkdDh3U1AzQlFBb2VYNThOb0h5Q1U4UDh6R2tOWFN0alRTaTZmek82RjBwQmRjWWJFZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JvZHktcGFyc2VyL25vZGVfbW9kdWxlcy9kZWJ1ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iQzdFbHJkSmFKblBiQVArMUVvdFl2cVpzYjNlY2w1d2k2QmZpNkJKVFVjTm93cDZjdnNwZzBqWHpuUlRLRGptL0U3QWRnRkJWZUFQVk1OY0tHc0hNQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICIyLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYm9keS1wYXJzZXIvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdjNNWG5aQWN2bnl3a1RVRVpvbUlBY3RsZTdSWFhlZWRPUjMxd3dsN1ZseW9YTzRRaTlhcnZTZW5OUVduZTFUY1J3aENMMUh3TEkyMWJFcWRwajgvckE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2FmZXItYnVmZmVyIjogIj49IDIuMS4yIDwgMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JvZHktcGFyc2VyL25vZGVfbW9kdWxlcy9tcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UcHA2MFA2SVVKRFR1T3EvNVo4Y2Rza3pKdWpmd3FmT1RrcndJd2o3SVJJU3Bua0puVDZTeUo0UENQbkdNb0ZqQzlkZGhhbDVLVklZdEF0OTdpeDA1QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ib25qb3VyLXNlcnZpY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYm9uam91ci1zZXJ2aWNlLy0vYm9uam91ci1zZXJ2aWNlLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aLzVsUVJNT0c5azdXK0ZrZUdUTmpoN2h0cW4vMkxNbmZPdkJaOHB5bk5aQ005TXdrUWtJM3plSTRvejA5dVdkY2dtZ0h1Z1Z2QnF4R2c0VlFKNVBDZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS1mbGF0dGVuIjogIl4yLjEuMiIsCi0gICAgICAgICJkbnMtZXF1YWwiOiAiXjEuMC4wIiwKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiLAotICAgICAgICAibXVsdGljYXN0LWRucyI6ICJeNy4yLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Jvb2xiYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jvb2xiYXNlLy0vYm9vbGJhc2UtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpaT1NBN01vOXNOR0I4K1VqU2d6ZEx0b2tXQWt5MXpienRNM1dSTENiWjcwLzNjVEFObVFtT2RSN3kyZytKMGUyV1h5d3kxeVM0Njh0WStJcnVxRXd3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTEuMS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUN1UEhERmdySFg3SDJ2RUkvNXhwejA3elNIQjAwVHB1Z3FobVl0Vm1NTzY1MThtQ3VSTW9PWUZsZEVCbDBnMTg3dWZvemRhSGdXS2NZRmI2MXFHaUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIiwKLSAgICAgICAgImNvbmNhdC1tYXAiOiAiMC4wLjEiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy9hc3luYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3luYy8tL2FzeW5jLTMuMi42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1odENVRGx4eXlDTE1nYU0zeFhnMEMwTFcyeHFmdVE2cDA1cENFSXNYdXlRK2Exa29ZS1R1Qk16Uk53bXliZkxndkpETWQwcjFMVG40K0UwVGk2QzJBQT09IiwKKyAgICAgICJkZXYiOiB0cnVlCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2JyYWNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZXMvLS9icmFjZXMtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWI4dW0rTDFSek0zV0RTenZobTZnSXoxeWZUYkJ0NllUbGNFS0F2c21xQ1paRnc0Nno2MjZsVmo5ajF5RVBXMzNINUgrbEJRcFpNUDFrOGwrNzhIYTBBPT0iLAorICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlcy8tL2JyYWNlcy0zLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVFiWGdPL09TWlZEMklzaUxscm8rN0hmNlExOEVKcktTRXNkb016S2VQS1hjdDNndkQ4b0xjT1FkSXpHdXByNUZqK0VEZThnTy9seGMxQnpmTXB4dkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmaWxsLXJhbmdlIjogIl43LjAuMSIKKyAgICAgICAgImZpbGwtcmFuZ2UiOiAiXjcuMS4xIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvd3Nlci1wcm9jZXNzLWhydGltZS8tL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlvNVVlY0kzR2hrcE02RHJYcjY5UGJsSXVXeFBLazlZMGpIQlJoZG9jWjJ5N1lFQ0JGQ3NIbTc5UHIzT3lSMkF2amhEa2FiRkphREpNWVJhekhnc293PT0iCi0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2Jyb3dzZXJzbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMjEuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJvd3NlcnNsaXN0Ly0vYnJvd3NlcnNsaXN0LTQuMjEuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTTBNRm9aemJVclJVNEtOZkNyRExudnlFN2d1YitwZWV0b1RpZDNUQklxdHVuYURKeVhsd2hha1QrL1ZrdlNYY2ZJekZmSy9ua0NzNG5teVRteGROU2c9PSIsCisgICAgICAidmVyc2lvbiI6ICI0LjI0LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb3dzZXJzbGlzdC8tL2Jyb3dzZXJzbGlzdC00LjI0LjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtEaTFOeTFnU2VQaTF2bTBxNG94U0Y4YjREUjQ0R0Y0QmJtUzJZZGhQTE9FcWQ4cER2aVpPR0gvR3NtUndvV0oyKzVMcjA4NVg3bmFvd013S0hERzFBPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgewogICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKQEAgLTU5OTMsMTAgKzE4NzQsMTAgQEAKICAgICAgICAgfQogICAgICAgXSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYW5pdXNlLWxpdGUiOiAiXjEuMC4zMDAwMTUwMyIsCi0gICAgICAgICJlbGVjdHJvbi10by1jaHJvbWl1bSI6ICJeMS40LjQzMSIsCi0gICAgICAgICJub2RlLXJlbGVhc2VzIjogIl4yLjAuMTIiLAotICAgICAgICAidXBkYXRlLWJyb3dzZXJzbGlzdC1kYiI6ICJeMS4wLjExIgorICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDE2ODgiLAorICAgICAgICAiZWxlY3Ryb24tdG8tY2hyb21pdW0iOiAiXjEuNS43MyIsCisgICAgICAgICJub2RlLXJlbGVhc2VzIjogIl4yLjAuMTkiLAorICAgICAgICAidXBkYXRlLWJyb3dzZXJzbGlzdC1kYiI6ICJeMS4xLjEiCiAgICAgICB9LAogICAgICAgImJpbiI6IHsKICAgICAgICAgImJyb3dzZXJzbGlzdCI6ICJjbGkuanMiCkBAIC02MDA1LDgzICsxODg2LDEzIEBACiAgICAgICAgICJub2RlIjogIl42IHx8IF43IHx8IF44IHx8IF45IHx8IF4xMCB8fCBeMTEgfHwgXjEyIHx8ID49MTMuNyIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvYnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ic2VyLy0vYnNlci0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1F4VE5FL0dBZklJcm1ITFVFM29KeXA1Rk82SFJCZmhqbnc0L3dNbUE2M1pHREpuV0JtZ1kvbHlRQnBuRFVrR21BaGJTZTM5dHgyZC9pVE9BZmdsd1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1pbnQ2NCI6ICJeMC40LjAiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2J1ZmZlci1mcm9tIjogewogICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1ZmZlci1mcm9tLy0vYnVmZmVyLWZyb20tMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUUrWFFDUndTYmFhaUNodHY2azZEd2djK2J4K0JzNnZ1S0pISGw1a294L0JhS2JoaVh6cVFPd0s0Y08yMnlFbEdwMk9DbWp3VmhUM0hteGd5UEduSmZRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2J1aWx0aW4tbW9kdWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9idWlsdGluLW1vZHVsZXMvLS9idWlsdGluLW1vZHVsZXMtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXd4WENkbGx3R2hJMmtDQzBNbnZUR1lUTXZuVlpUdnFneXBraVRJOFBhNXRjejJpNlZxc3F3WUdncXdYamkrNFJnQ3ptczZFYWpFNEl4aVVINkhIOG5RPT0iLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRStYUUNSd1NiYWFpQ2h0djZrNkR3Z2MrYngrQnM2dnVLSkhIbDVrb3gvQmFLYmhpWHpxUU93SzRjTzIyeUVsR3AyT0NtandWaFQzSG14Z3lQR25KZlE9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYnl0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnl0ZXMvLS9ieXRlcy0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcE1oT2ZGRFBpdjl0NWpqSVhrSG9zV21rU3lRYnZzZ0VWTmt6MEVSSGJ1TGgyVC83ajRNcXFwejUyM0ZlOE1WWTg5S0M2U2gvUWZTMnNNK1NqZ0ZEY3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYWxsLWJpbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbC1iaW5kLy0vY2FsbC1iaW5kLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03TytGYkNpaHJCNVdHYkZZZXNjdHdtVEthZTZyT2lJem16MWljcmVXSiswYUE3TEpmdXFoRXNvMlQ5bmNwY0Z0ek1RdHpYZjJRR0d1ZVdKR1RZc3FyQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMSIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYWxsc2l0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbHNpdGVzLy0vY2FsbHNpdGVzLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QOEJqQXNYdlpTK1ZJRFVJMTFoSENRRXY3NFlUNjdZVWk1SkpGTldJcUwyMzVzQm1qWDQrcXg5TXV2bHM1aXZ5TkVOY3R4NDZ4UUxRM2FUdUU3c3NhUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhbWVsLWNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWwtY2FzZS8tL2NhbWVsLWNhc2UtNC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWd4R1dCclRUMUp1TXg2UitvNVBUWE1tVW5oblZ6TFE5U051dEQ0WXFLdEk2YXA4OTd0M3RLRUNZbGE2Z0NXRWtwbFhubE55YkVrWmc5R0VHeEtGQ2d3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBhc2NhbC1jYXNlIjogIl4zLjEuMiIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhbWVsY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW1lbGNhc2UvLS9jYW1lbGNhc2UtNi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdteTZGaFlsQ1k3dU9FbFpVU2J4bzJVQ0RIOG93RWs5OTZna2JycHNnR3RySkxNM0o3akd4bDlJYzdRd3dqNGl2T0U1QVdaV1JNZWNEZEY3aHFHakZBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2FtZWxjYXNlLWNzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW1lbGNhc2UtY3NzLy0vY2FtZWxjYXNlLWNzcy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUU9TdmV2aHNsaWpnWXdSeDZSdjd6S2RNRjhsYlJteCt1UUd4Mit2RGMrS0kvZUJuc3k5a2l0NWFqMjNBZ0d1M3BhNHQ5QWd3Ym5YV3FTK2lPWSsyYUE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvY2FtZWxpemUiOiB7CiAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCkBAIC02MDkxLDIxICsxOTAyLDExIEBACiAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2FuaXVzZS1hcGkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FuaXVzZS1hcGkvLS9jYW5pdXNlLWFwaS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnNUd3VJZy9CWlpLL3ZyZVZUWVliU1dvZTJGKzcxUDdLNVFHRVgrcFQyNTBEWmJmVTFNUTVwck9LcFBSK0xMNnVXS0szS013TUNBUzc0UUIzVW0xdXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjAuMCIsCi0gICAgICAgICJjYW5pdXNlLWxpdGUiOiAiXjEuMC4wIiwKLSAgICAgICAgImxvZGFzaC5tZW1vaXplIjogIl40LjEuMiIsCi0gICAgICAgICJsb2Rhc2gudW5pcSI6ICJeNC41LjAiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2Nhbml1c2UtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zMDAwMTUwMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FuaXVzZS1saXRlLy0vY2FuaXVzZS1saXRlLTEuMC4zMDAwMTUwMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2Y5TmlGK3daeFBmenY4WjNpUzByWE0xRG8raU95Mkx4dmliMzhnbEZYKzA4VENZWVlHUjVmUkpYazRkNzdDNEFZd2hVamdZZ01zTXVkYmgyVHFDS3c9PSIsCisgICAgICAidmVyc2lvbiI6ICIxLjAuMzAwMDE2OTYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nhbml1c2UtbGl0ZS8tL2Nhbml1c2UtbGl0ZS0xLjAuMzAwMDE2OTYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBEQ1BrdnpmYTM5ZWhKdEorT3dHVC8yeXZUMlNiamZIaGlJVzJMV09BY01RN0J6d3hUL1h1eVVwNE9UT2QwWEZXQTZCS3cwSmFsbkJIZ1NpNURHSkJRPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgewogICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKQEAgLTYxMjEsMTggKzE5MjIsMjIgQEAKICAgICAgICAgfQogICAgICAgXQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYXNlLXNlbnNpdGl2ZS1wYXRocy13ZWJwYWNrLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYXNlLXNlbnNpdGl2ZS1wYXRocy13ZWJwYWNrLXBsdWdpbi8tL2Nhc2Utc2Vuc2l0aXZlLXBhdGhzLXdlYnBhY2stcGx1Z2luLTIuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yb0lGT05oY3hvZzBKU1NXYnZWQWgzT29jdWttU2dwcU9INllwTWtDdmF2L3lTSVYzSktnNERjOHZZdFFqWWkvVXhwTkUzNnIvOXYrVnFUUXFna1ltdz09IiwKKyAgICAibm9kZV9tb2R1bGVzL2NoYWkiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhaS8tL2NoYWktNi4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5VUFJsdU9mT2lUS0JLdldQdFNENFBoRnZXQ3FPaTBCR1N0TldzNTdYOWpzN1hHVHByU21Gb3o1RjB0V2hSNFdQak5lUjlqWHFkQzcvVXBTSlRubFJnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvY2hhbGsiOiB7CiAgICAgICAidmVyc2lvbiI6ICI0LjEuMiIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay00LjEuMi50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0tuYmhGeVJJWHBVdWV6OGlCTW15RWE0bmJqNElPUXl1aGMvd3k5a1k3L1dWUGN3SU85VkE2NjhQdThSa083KzBHNzZTTFJPZXl3OUNwUTA2MWk0bUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4xLjAiLAogICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMS4wIgpAQCAtNjE0NCwyMTMgKzE5NDksMTEgQEAKICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGs/c3BvbnNvcj0xIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jaGFyLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXItcmVnZXgvLS9jaGFyLXJlZ2V4LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rV1dYenR2WjVTQlFWK2VSZ0tGZWg4cTVzTHVaWTIrOFdVSXpseFdWVGcrb0d3WTE0cXlseDFLYkt6SGQ4UDZaWWtBZzB4eUlEVTlKTUhoeUpNWjFqdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jaGVjay10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hlY2stdHlwZXMvLS9jaGVjay10eXBlcy0xMS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhCaVl2WHZuOVo3MFo4OFhLanozQUVLZDRISmhCWHNhM2o3eEZuSVRBem9TOCtxNmVJR2k4cURCOEZLUEJBanR1eGpJL3pGcHd1aUNiOG9EdEtPWXJBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nob2tpZGFyIjogewotICAgICAgInZlcnNpb24iOiAiMy41LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nob2tpZGFyLy0vY2hva2lkYXItMy41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURyM3NmS1JQNm9UY2pmMkptVW1GSmZlVk12WEJkZWd4QjBpVlE1ZWIyVjEwdUZKVUNBUzhPQnlaZFZBeVZiOHhYTnozR2pqVGdqOWtMV3NaVHFFNmt3PT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vcGF1bG1pbGxyLmNvbS9mdW5kaW5nLyIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnltYXRjaCI6ICJ+My4xLjIiLAotICAgICAgICAiYnJhY2VzIjogIn4zLjAuMiIsCi0gICAgICAgICJnbG9iLXBhcmVudCI6ICJ+NS4xLjIiLAotICAgICAgICAiaXMtYmluYXJ5LXBhdGgiOiAifjIuMS4wIiwKLSAgICAgICAgImlzLWdsb2IiOiAifjQuMC4xIiwKLSAgICAgICAgIm5vcm1hbGl6ZS1wYXRoIjogIn4zLjAuMCIsCi0gICAgICAgICJyZWFkZGlycCI6ICJ+My42LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDguMTAuMCIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmc2V2ZW50cyI6ICJ+Mi4zLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nob2tpZGFyL25vZGVfbW9kdWxlcy9nbG9iLXBhcmVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BT0lnU1FDZXBpSll3UDNBUm5HeCs1Vm5UdTJIQllkemJHUDQ1ZUx3MXZyM3pCM3ZaTGV5ZWQxc0M5aG5iY09jOS9Tck15TTVSUFFya0d6NGFTOVpvdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2hyb21lLXRyYWNlLWV2ZW50IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nocm9tZS10cmFjZS1ldmVudC8tL2Nocm9tZS10cmFjZS1ldmVudC0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDNLVUx5UWc0UzdOSUhpeGR3YkdYK25GSGtvQmlBNFlRbXlXdGpiOFhuZ1NLVjEyNG5KbVJ5c2dBZXVqYlVWYjE1dmgrUnZGVWZDUHFVN3JYaytoWmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NpLWluZm8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2ktaW5mby8tL2NpLWluZm8tMy44LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVYVGdnSFdTb29ZaHE0OUYyb3BRaHVIV2d6dWNmRjJZZ09ESzRlMTU2NkdRczVCSWZQMzBCMG9lbndCSkhmV3hBczJmeVBCMXM3TWc5NDl6TGY2MVl3PT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpYmlyYWotcyIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nqcy1tb2R1bGUtbGV4ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2pzLW1vZHVsZS1sZXhlci8tL2Nqcy1tb2R1bGUtbGV4ZXItMS4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBUTmlHc3RiUW1DRnd0NGFrampCZzVwTFJUU3lqL1BrV1ExWm9PMnpudG1nOXlMcVNSeHdFYTRpQ2ZRTEdqcWhpcUJmT0phN1cvRTh3ZkdyVERtbFpRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NsZWFuLWNzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGVhbi1jc3MvLS9jbGVhbi1jc3MtNS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpWSmJNK2YzZDNRNzA0ckY0YnFRNVVVeVR0dUowSlJLTmJUS1ZFZXVqQ0NCb01ka0VpK1YrZThva3RPOXFHUU5TdkhyRlRNNkpaUlhyVXZHUjFjend3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiAifjAuNi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGVhbi1jc3Mvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGl1aSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGl1aS8tL2NsaXVpLTguMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CU2VObnl1czc1QzQvL05ROWdRdDEvY3NUWHlvLzhTYithZkxBa3pBcHRGdU1zb2Q5SEZva0dOdWRacGkvb1FWNzNoblZLK3NSKzVQVlJNZCtEcjdZUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvIjogewotICAgICAgInZlcnNpb24iOiAiNC42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvLy0vY28tNC42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFWYjBkTTVIdkcrdWF4aXRtOHdPTmw3amx0eDhkcWhmVTMzRGNxdE9aY0xTVklLU0RETERpNyswTGJBS2l5SThoRDl1NDJtMll4WFNrTUdXVGhhZWNRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJpb2pzIjogIj49IDEuMC4wIiwKLSAgICAgICAgIm5vZGUiOiAiPj0gMC4xMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2EiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29hLy0vY29hLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNS9qRytZUW5TeTRuUlRWNEY3bFBlcEJKWjhxQk5KSkRCdUpkb2VqRHlMWGdtTDdJRW8rTGUySkRadWRGVEZ0N21yQ3FJUmFTandzNHlnUkNUQ0FYQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvcSI6ICJeMS41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjIuNC4xIiwKLSAgICAgICAgInEiOiAiXjEuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA0LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvYS9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlQwWkk2a1pSZFRoOFl5SnczU01iWW0vdStOcWZzQXhFcFdPMFBmOXNxOC9lOTRXeHhPcFBLeDlGUjFGbHlDdE9WRE5PUSs4bnRscUZ4aVJjK3I1cUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMS45LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29hL25vZGVfbW9kdWxlcy9jaGFsayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTIuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2Evbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjkuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFmQVV0ZCt2RmRBdEZRY0M4Q0N5WXQxZllXeFNxQWlLMmNTRDZ6REI4TjNjcHNFQkF2UnhwOXpPR2c2Ry9TSEhKWUFUODgvYXovSXVER0FMc05WYkdnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAiMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvYS9ub2RlX21vZHVsZXMvY29sb3ItbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzJmU2VuaE13MkhaTVRWSGVDQTlLQ21wRUlieldpUXNqTitCSGNCYlM5dnIxbXR0K3ZKalBka3NJQk5VbUtBVzhURlVEUEpLNVNVVTNRaEU5TkVYRHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29hL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YlJvckI1RlVRV3ZsYTE2VThSL3FnYUZJeWEycUd6d0RyTm1DWnVZS3JiZFNVTUc2STFaQ0dRUmVma1JWaHVPa0lHVm5lN0JRMzVEU2ZvMXF2SnFGZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2Evbm9kZV9tb2R1bGVzL2hhcy1mbGFnIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNLSmYxK2NlUUJyNFNNa3ZRbkJETkR0ZjRUWHBWaFZHYXRldTB0OTE4YmwzMEZuYkUybTR2TkxYK1ZXZS9kcGpsYitIdWdHWXpXN3VRWEg5OEhQRVl3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29hL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sbGVjdC12OC1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xsZWN0LXY4LWNvdmVyYWdlLy0vY29sbGVjdC12OC1jb3ZlcmFnZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUJQdGxqZkNOY1RLTkF0bzBLRXREZlozcXpqSnZxRTNhVEdac2JoalNCbG9ycXBYSmxhV1d0UE8zNUQrWkltb0MzS1dlalg2NG8reVBHeGhXU1R6Zmc9PSIKLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvY29sb3ItY29udmVydCI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0yLjAuMS50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItUlJFQ1BzajdpdS94YjVvS1ljc0ZIU3BwRk5uc2ovNTJPVlRSS2I0elA1b25Yd1ZGM3pWbW1Ub05jT2ZHQytDUkRwZksvVTU4NGZNZzM4WkhDYUVsS1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJjb2xvci1uYW1lIjogIn4xLjEuNCIKICAgICAgIH0sCkBAIC02MzYxLDI0MiArMTk2NCwyOSBAQAogICAgICJub2RlX21vZHVsZXMvY29sb3ItbmFtZSI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjEuMS40IiwKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZE95KzNBdVczYTJ3TmJaSEl1TVpwVGNnakd1TFUvdUJML3ViY1pGOU9YYkRvOGZmNE84eVZwNUJmMGVmUzh1RW9ZbzVxNEZ4N2RZOU9nUUdYZ0FzUUE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3JkIjogewotICAgICAgInZlcnNpb24iOiAiMi45LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yZC8tL2NvbG9yZC0yLjkuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItamVDMWF4WHBuYjAvMm5uL1kxTFB1TGRnWEJMSDdhRGNIdTRLRUtmcXczQ1VoWDdacGZCU2xQS3lxWEU2YnRJZ0V6Zld0clgzL3R5QkNhQ3ZYdk1rT3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3JldHRlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvcmV0dGUvLS9jb2xvcmV0dGUtMi4wLjIwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JZkVEeHdvV0lqa2VYTDFlWGNEaW93NFViS2poTGRxNi9FdVNWUjlHTU43S1ZIM3I5Z1E4M2U3M2hzejFOZDFUM2lqZDV4djF3Y1dSWU8rRDZrQ0kydz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tYmluZWQtc3RyZWFtLy0vY29tYmluZWQtc3RyZWFtLTEuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GUU40TVJmdUplSGY3Y0JiQk1KRlhoS1NEcSsya0FBckJsbVJCdmN2RkU1QkIxSFpLWHRTRkFTRGhkbHo5ek9Zd3hoOGxEZG52bU1PZS8rNWNkb0VkZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWxheWVkLXN0cmVhbSI6ICJ+MS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRPeSszQXVXM2Eyd05iWkhJdU1acFRjZ2pHdUxVL3VCTC91YmNaRjlPWGJEbzhmZjRPOHlWcDVCZjBlZlM4dUVvWW81cTRGeDdkWTlPZ1FHWGdBc1FBPT0iLAorICAgICAgImRldiI6IHRydWUKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXItMi4yMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HcFZrbU04dkYydlFVa2oyTHZabUQzNUp4ZUpPTEN3SjljVWt1Z3lrMm51aGJ2MyttSnZwTFlZdCswK1VTTXhFK29qK2V5L2xKRW5oWnc3NXgvT01jUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb21tb24tcGF0aC1wcmVmaXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbW9uLXBhdGgtcHJlZml4Ly0vY29tbW9uLXBhdGgtcHJlZml4LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RRTMzaFRvWnNlQ0gzalMwcU45Nk8vYlNoM2thdy9oK1RxN25neVk5ZVdEVW5UbFROVXlxZnF2Q1hpb0xlNU5hNWpGc0w3OHJhL3d1QlU0aXVFZ2Q0dz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb21tb24tdGFncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tb24tdGFncy8tL2NvbW1vbi10YWdzLTEuOC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nay9aODUyRDJXdGIvLzBJK2tSRk5LS0U5ZElJVmlyam9xUG9BMXdKVStYZVBWWFpmR2VCcGs0NStBMXJLTzRRNDNwcnFXQk5ZL01pSWVSTGJQV1VhQT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjEzLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTEzLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItL3JGZUNwTkpRYmhTWmpHVndPOVJGVjN4UHFibkVSUzhNbUlRekN0RC96bDZncEp1Vi9iTUx1Tjkyb0czRjdkOG9ERUhIUnJ1alNYTlVyOGZwam50S3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMC4wIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9jb21tb25kaXIiOiB7CiAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbW9uZGlyLy0vY29tbW9uZGlyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XOXBBaHcwamExRWRiNUdWZElGMW1qWncvQVNJMEFsU2hYTTgzVVVHZTJEVnI1VGRBUEVBMU9BOG0vZzh6V3A5eDZPbjdncXVmWStGYXREYkMzTURRZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb21wcmVzc2libGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMTgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXByZXNzaWJsZS8tL2NvbXByZXNzaWJsZS0yLjAuMTgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFGM3I3UDVkV3hMOE14eUlUUk1sT1JRTmFPQTJJa0FGYVRyNGs3QlV1bWpQdFJwR0RUWnBsMFBiMVhDTzZKZURDQmRwMTI2Q2dzOXNNeHFTamdZeVJnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbWUtZGIiOiAiPj0gMS40My4wIDwgMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb21wcmVzc2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21wcmVzc2lvbi8tL2NvbXByZXNzaW9uLTEuNy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qYVNJRHpQOXBaVlM0WmZRK1R6dnRpV2hkcEZoRTJSREh6OFFKa3BYOVNJcExxODhWdWVGNWpKdzZ0KzZDVVFjQW9BNnQreDg5TUxyV0FxcGZERThpUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY2NlcHRzIjogIn4xLjMuNSIsCi0gICAgICAgICJieXRlcyI6ICIzLjAuMCIsCi0gICAgICAgICJjb21wcmVzc2libGUiOiAifjIuMC4xNiIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOSIsCi0gICAgICAgICJvbi1oZWFkZXJzIjogIn4xLjAuMiIsCi0gICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjEuMiIsCi0gICAgICAgICJ2YXJ5IjogIn4xLjEuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbXByZXNzaW9uL25vZGVfbW9kdWxlcy9kZWJ1ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iQzdFbHJkSmFKblBiQVArMUVvdFl2cVpzYjNlY2w1d2k2QmZpNkJKVFVjTm93cDZjdnNwZzBqWHpuUlRLRGptL0U3QWRnRkJWZUFQVk1OY0tHc0hNQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICIyLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29tcHJlc3Npb24vbm9kZV9tb2R1bGVzL21zIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwcDYwUDZJVUpEVHVPcS81WjhjZHNrekp1amZ3cWZPVGtyd0l3ajdJUklTcG5rSm5UNlN5SjRQQ1BuR01vRmpDOWRkaGFsNUtWSVl0QXQ5N2l4MDVBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbXByZXNzaW9uL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HZDJVWkJKRGtYbFk3R2JKeGZzRTgvbnZLa1VFVTFHMzhjMXNpTjZRUDZhOVBUOU1tSEI4R25wc2NTbU1KU29GOExPSXJ0OHVkL3dQdG9qeXM0RzYrZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb25jYXQtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbmNhdC1tYXAvLS9jb25jYXQtbWFwLTAuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vU3J2NGRzd3lRTkJmb2hHcHo5bzZZYjNHejNTclVEcUJINXJUdWhHUjdhaHRsYllLblZ4dzJiQ0ZNUmxqYUE3RVhIYVhaOHdzSGRvZEZ2YmtoS21xZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb25mdXNpbmctYnJvd3Nlci1nbG9iYWxzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25mdXNpbmctYnJvd3Nlci1nbG9iYWxzLy0vY29uZnVzaW5nLWJyb3dzZXItZ2xvYmFscy0xLjAuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpzUEtkbWg4Wmttbkh4RGs1NUZaMVRxVkx2RVFUdm9CeUpaUk45anpJMFVqeEsvUWdBbXNwaHo3UEd0cWdQaWVRWi9DUWNIV1hDUjdBVEROaEdlK1lBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29ubmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFjay8tL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2stMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVU3Mys2bFFGbWZpTlByWWJYcXI2a1oxaTF3aVJxWG5wMm5oTXNJTnNlV1hPOGxEYXUwTEdFZmZKOGtRaTRFakxaeW1wVmdSZHZxakFnaVoxdGd6RERBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb250ZW50LWRpc3Bvc2l0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtZGlzcG9zaXRpb24vLS9jb250ZW50LWRpc3Bvc2l0aW9uLTAuNS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GdmVaVE51R3cwNGN4bEFpV2J6aTZ6VEFML2xoZWhhV2JUdGdsdUpoNC9FOTVEcU13VG1oYTNLWk4xYUFXQThjRkloSHpNWlV2TGV2a3c1UnFrK3RTUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjIuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb250ZW50LXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udGVudC10eXBlLy0vY29udGVudC10eXBlLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uVGpxZmNCRkVpcEtkWEN2NFlEUVdDZm1jTFpLbTgxbGRGMHBBb3BUdnlyRkdWYmNSNlAvVkFBZDVHN04rMHRUcjhRcWlVMHRGYWRENkZLNE50SndPQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9CisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XOXBBaHcwamExRWRiNUdWZElGMW1qWncvQVNJMEFsU2hYTTgzVVVHZTJEVnI1VGRBUEVBMU9BOG0vZzh6V3A5eDZPbjdncXVmWStGYXREYkMzTURRZz09IiwKKyAgICAgICJkZXYiOiB0cnVlCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2NvbnZlcnQtc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9jb252ZXJ0LXNvdXJjZS1tYXAtMS45LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFTRkJ1cDBNejF1eWlJakFOYW4xanpMUWFtaTl6MVBvWVNaQ2lpWVcyRmN6UGJlblhjNDVGWmRCWkx6T1QrcjYraWNpdUVNb2R0bUN0aStoamFBazBBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nvb2tpZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb29raWUvLS9jb29raWUtMC41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlaM0dVeW4vbzhnZktKbG5sWDdnN3hxNGd5TzZPU3VoR1BLYWFHc3NHQjJxZ0RVUzBnUGd0VHZveVpMVHQ5QWI2ZEM0aGZjOWRWNWFya3ZjL09DbXJ3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29va2llLXNpZ25hdHVyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb29raWUtc2lnbmF0dXJlLy0vY29va2llLXNpZ25hdHVyZS0xLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUUFEemxhSGM4aWNWOEk3dmJhSlhKd29kOUhXWXA4dUNxZjF4YTRPZk51MVQ3SlZ4UUlyVWdPV3RIZE5EdFBpeXdtRmJpUzEyVmpvdElYTHJLTTNvclE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29yZS1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMzEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS1qcy8tL2NvcmUtanMtMy4zMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OSXAyVFFTR2ZSNmJhNWFhbFpEK1pRMWZTeEdoRG8vczF3MG54M1JZemYycG5KeHQ3WXlueEZsRlNjUDZlVjcrR1pzS085NU5Takd4eUpzVTNEWmdlUT09IiwKLSAgICAgICJoYXNJbnN0YWxsU2NyaXB0IjogdHJ1ZSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY29yZS1qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29yZS1qcy1jb21wYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMxLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvcmUtanMtY29tcGF0Ly0vY29yZS1qcy1jb21wYXQtMy4zMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oTTdZQ3UxY1U2T3B4N01YTnUwTnV1bU0wZXpOZUFlUkthZGl4eWlRRUxXWTN2VDNEZTlTNEo1WkJNcmFXVjJ2Wm5yRTFDaXJsMEd0RnREdE1VWHpQdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNSIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2NvcmUtanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvcmUtanMtcHVyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMzEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS1qcy1wdXJlLy0vY29yZS1qcy1wdXJlLTMuMzEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL0FuRTlZNE9zSlppY0N6SWU5N0pQNVhvUEtRSmZUdUVHNDNhRVZMRkpHT0pweXFFTG9kK3BFNkxFbDYzRGZHMU1wOHdYOTdMRGFEcHkxR21MRVV4bGc9PSIsCi0gICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2NvcmUtanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvcmUtdXRpbC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3JlLXV0aWwtaXMvLS9jb3JlLXV0aWwtaXMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpRQnZpMURjcEo0R0RxYW5qdWNaMkhqM3dFTzVwWkRTODlCV2JrY3J2ZHhrc0pvcndVRERaYW1YOWxkRmtwOWF3MmxtQkRMZ2tPYkVBNERXTko5RllRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nvc21pY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvc21pY29uZmlnLy0vY29zbWljb25maWctNy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFkbVg2eFV6ZE5BU3N3c0Z0bXdTdDdWajhwbzlJdXFYbTBVWHo3UUtQdUVVbVBCNFh5akdmYUFyMlBTdUVMTXdrUk1WSDFFcElrWDViVFpHUkIzZUNBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9wYXJzZS1qc29uIjogIl40LjAuMCIsCi0gICAgICAgICJpbXBvcnQtZnJlc2giOiAiXjMuMi4xIiwKLSAgICAgICAgInBhcnNlLWpzb24iOiAiXjUuMC4wIiwKLSAgICAgICAgInBhdGgtdHlwZSI6ICJeNC4wLjAiLAotICAgICAgICAieWFtbCI6ICJeMS4xMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jcm9zcy1zcGF3biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1zcGF3bi8tL2Nyb3NzLXNwYXduLTcuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pUkRQSktVUFZFTkQ3ZEhQTzhya2JPblBweUR5Z2NERnRXanBlV05DZ3k4V1AyclhjeFhMOFRza1JlUWw2T3JCMkc3K1VKcmFnczFxMTVGdWRjN0c2dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwYXRoLWtleSI6ICJeMy4xLjAiLAotICAgICAgICAic2hlYmFuZy1jb21tYW5kIjogIl4yLjAuMCIsCi0gICAgICAgICJ3aGljaCI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NyeXB0by1yYW5kb20tc3RyaW5nIjogewogICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NyeXB0by1yYW5kb20tc3RyaW5nLy0vY3J5cHRvLXJhbmRvbS1zdHJpbmctMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXYxcGxJRDN5OXIvbFBodmlKMXdyWHBMZXlVSUdBWjJTSE5ZVEVhcG03LzhBOW5MUG95dlZwM1JLL0VQRnFuNWtFem55V2dZWk5zUnRZWUlXYnVHOEtBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzLWJsYW5rLXBzZXVkbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtYmxhbmstcHNldWRvLy0vY3NzLWJsYW5rLXBzZXVkby0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlM5MFhXdHNIR3FvTTB0NEtwSDA1M2M0ZWh4WjJFNkh0R0k3eDY4WUZWMHBUby9RbWtWL1lGQStObmx2SzhndXhaVk5XR1FoVk5KR0MzOVE4WEY0T1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC45IgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJjc3MtYmxhbmstcHNldWRvIjogImRpc3QvY2xpLmNqcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC40IgotICAgICAgfQorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9jc3MtY29sb3Ita2V5d29yZHMiOiB7CiAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCkBAIC02NjA2LDIxNyArMTk5Niw2IEBACiAgICAgICAgICJub2RlIjogIj49NCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzLWRlY2xhcmF0aW9uLXNvcnRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtZGVjbGFyYXRpb24tc29ydGVyLy0vY3NzLWRlY2xhcmF0aW9uLXNvcnRlci02LjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItakRmc2F0d1dNV04wTU9EQUZ1SHN6ZmpwaEVYZk53OUpVQWhtWTRwTHUzVHlUVStvaFVwc2JWdGJVKzFNWm40YTQ3RDlrcWgwM2k0ZXlPbSs3NCt6ZXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwIHx8IF4xMiB8fCA+PTE0IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4wLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzcy1oYXMtcHNldWRvIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy1oYXMtcHNldWRvLy0vY3NzLWhhcy1wc2V1ZG8tMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZzZTB4cFIxSzlNTmxwMmo1dzFwZ1dJSnRtMWE4cVMwSndTOWdvRlljSW1qbEhFbXl3UDlWVUYwNWFHQlh6R3BESkY4NlFYazRMMHlwQm13UGhHQXJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuOSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiY3NzLWhhcy1wc2V1ZG8iOiAiZGlzdC9jbGkuY2pzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLWxvYWRlci8tL2Nzcy1sb2FkZXItNi44LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhEQVh0RVZHbEQwZ0owN2ljbHdXVmtMb1pPcEV2QVdhU3lmNlcxOFMycE9DLy9LOCtxVURJeDhJSVQzRCtIam5ta0pQUWVlc09QdjVhaVVhSnNDTTJnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImljc3MtdXRpbHMiOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNC4yMSIsCi0gICAgICAgICJwb3N0Y3NzLW1vZHVsZXMtZXh0cmFjdC1pbXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLW1vZHVsZXMtbG9jYWwtYnktZGVmYXVsdCI6ICJeNC4wLjMiLAotICAgICAgICAicG9zdGNzcy1tb2R1bGVzLXNjb3BlIjogIl4zLjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLW1vZHVsZXMtdmFsdWVzIjogIl40LjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuOCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3ZWJwYWNrIjogIl41LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzLWxvYWRlci9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNvZnR1VFJPdi9jUmpDemUvc2NqR3lpRHRjVXl4dzFyZ1lRU1pZN1hUbXRSNWhYK2RtNzZpRGJUSDhUa0xQSENRbWxiUVZTU2JOWkNQTTJoYjBrbm5RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL25vZGVfbW9kdWxlcy95YWxsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zd2RHaWRaeXE1UEIwODRYTEVTNVRwT1NSQTN3alhBbElXTWh1bTJrUmN2LzQxU24yZW1RMGR5Y1FXNHVaWExlandLdmc2RXN2YmRsVkwrRllFY3Q3QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3MtbWluaW1pemVyLXdlYnBhY2stcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy1taW5pbWl6ZXItd2VicGFjay1wbHVnaW4vLS9jc3MtbWluaW1pemVyLXdlYnBhY2stcGx1Z2luLTMuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xdTZENzF6ZUlmZ25nTjJYTlJKZWZjL2hZN1lic3hkNzRKbTRxbmdJWHlVRWs3ZnNzM1ZVenVIeExBcS9SOE5BYmE0UVU5T1VTYU1abGJwUmM3Yk00UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjc3NuYW5vIjogIl41LjAuNiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjcuMC4yIiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMy41IiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeNC4wLjAiLAotICAgICAgICAic2VyaWFsaXplLWphdmFzY3JpcHQiOiAiXjYuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMi4xMy4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vd2VicGFjayIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndlYnBhY2siOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIkBwYXJjZWwvY3NzIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImNsZWFuLWNzcyI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJjc3NvIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImVzYnVpbGQiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzcy1taW5pbWl6ZXItd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL2FqdiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMTIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2Ly0vYWp2LTguMTIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1J1MWtwY085eUx0WXhCS3ZxZlRlaDlLelpFd08zU1R5WDFIVCs0Q2FEekM2SHBUR1loSWhQSXpqOVh1S1U3S1lEd25hZWg1aGNPd2p5MVF1SnpCUEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMS4wLjAiLAotICAgICAgICAicmVxdWlyZS1mcm9tLXN0cmluZyI6ICJeMi4wLjIiLAotICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZXBvYmVyZXpraW4iCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzcy1taW5pbWl6ZXItd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3JkcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYta2V5d29yZHMvLS9hanYta2V5d29yZHMtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlDUy9KTkZBVXlyNXZBdWhrMURXbTFDQnhSSFc5TGJKMm96V2VlbXJJcXBic3FLakhWeFlQeWk1R0MwcmpaSVQ1SnhKM3ZpclZUUzh3azRpL1ora3J3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjguOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3MtbWluaW1pemVyLXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXNjaGVtYS10cmF2ZXJzZS8tL2pzb24tc2NoZW1hLXRyYXZlcnNlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3MtbWluaW1pemVyLXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9zY2hlbWEtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MMGpSc3JQcGpkY2tQM29QdWczL1Z4Tkt0MnRyUjhUY2Fick02Rk9BQWx2Qy85UGhjbW0rY3VBZ1RseEJxZEJSMVdKeDdOYWo5V0h3K2FPbWhlU1Zidz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC45IiwKLSAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAiYWp2LWZvcm1hdHMiOiAiXjIuMS4xIiwKLSAgICAgICAgImFqdi1rZXl3b3JkcyI6ICJeNS4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS93ZWJwYWNrIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3MtbWluaW1pemVyLXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzLXByZWZlcnMtY29sb3Itc2NoZW1lIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy1wcmVmZXJzLWNvbG9yLXNjaGVtZS8tL2Nzcy1wcmVmZXJzLWNvbG9yLXNjaGVtZS02LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEJxTWJaa3NSa0pReDJ6QWpyb2tpR01kMDdScU9hMkl4SXJyTjEwbHlCZTl4aG45REV2alVLNzlKNmprZWl2OUQ5aFFGWEtiNmcxandVNjJqemlKWkE9PSIsCi0gICAgICAiYmluIjogewotICAgICAgICAiY3NzLXByZWZlcnMtY29sb3Itc2NoZW1lIjogImRpc3QvY2xpLmNqcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy1zZWxlY3QvLS9jc3Mtc2VsZWN0LTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13UHBPWXRuc1ZvbnR1Mm1PRGhBMTlKcnFXeE5zZmRhdFJLZDY0a21wUmJRZ2gxS3RJdGtvNXNUbkVwUGRwU2FKc3pUT2hFTWxGL1JQejI4cWo0SHFoUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJib29sYmFzZSI6ICJeMS4wLjAiLAotICAgICAgICAiY3NzLXdoYXQiOiAiXjYuMC4xIiwKLSAgICAgICAgImRvbWhhbmRsZXIiOiAiXjQuMy4xIiwKLSAgICAgICAgImRvbXV0aWxzIjogIl4yLjguMCIsCi0gICAgICAgICJudGgtY2hlY2siOiAiXjIuMC4xIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mYjU1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3Mtc2VsZWN0LWJhc2UtYWRhcHRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3Mtc2VsZWN0LWJhc2UtYWRhcHRlci8tL2Nzcy1zZWxlY3QtYmFzZS1hZGFwdGVyLTAuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qUVZlZVJHNzBRSTA4dlNUd2Yxakh4cDc0Sm9ac3IyWFNnRVRhZTgveEM4b3ZTbkwyV0Y4N0dUTE84NlNid2R0MmxLNFVtZzRIbm53TU80WUYzQ2U3dz09IgotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9jc3MtdG8tcmVhY3QtbmF0aXZlIjogewogICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy10by1yZWFjdC1uYXRpdmUvLS9jc3MtdG8tcmVhY3QtbmF0aXZlLTMuMi4wLnRneiIsCkBAIC02ODI3LDIzNiArMjAwNiw1MyBAQAogICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMC4yIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3MtdHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wLWFscGhhLjM3IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtdHJlZS8tL2Nzcy10cmVlLTEuMC4wLWFscGhhLjM3LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ETXhXSmcwcm56N1VneEtUMFExSFUvTDlCZUpJME02a3NvcjBPZ3FPbkYrYVJDRFdnL04yNjQxSG1WeVU5S1ZJdTBPVlZXT2IySXBDOUErQkpSbmVqZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtZG4tZGF0YSI6ICIyLjAuNCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzLXRyZWUvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3Mtd2hhdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3Mtd2hhdC8tL2Nzcy13aGF0LTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IVFVyZ1JKN3I0ZHNaS1U2R2ptcGZSSzFPNzZoOTdaOE1mUzFHMEZvelIrb0Yya0c2VmZlOEpFNnp3cmtieGlnemlQSGluQ0orZ0NQakE5RWFCRHRSdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mYjU1IgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9jc3MuZXNjYXBlIjogewogICAgICAgInZlcnNpb24iOiAiMS41LjEiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy5lc2NhcGUvLS9jc3MuZXNjYXBlLTEuNS4xLnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZVWlmc1hYdWtuSGxVc21sZ3lZMFBLemdQT3I3L0ZqQ2VQZkhOdDBqeG04M3dIWmk0NFZETVE3L2ZHTmtqWTMvalYxTUMrMUNtWmJhSHp1Z3llUnRwZz09IiwKICAgICAgICJkZXYiOiB0cnVlCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzc2RiIjogewotICAgICAgInZlcnNpb24iOiAiNy42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc2RiLy0vY3NzZGItNy42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5uYTdycGg4VjBqQzYrSkJZNFZrNG5kRXJVbWZKZlY2TkpDYVpkdXJMMG9tZ2dhYml5K1FCMkhDUXR1NWMvQUNMWjBJN1JFdjdBNFF5UElvWXpaeDB3PT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3NzdG9vbHMiCi0gICAgICAgIH0KLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzZXNjIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc2VzYy8tL2Nzc2VzYy0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL1RiL0pjaksxMTFuTlNjR29iNU1OdHNudE5NMWFDTlVEaXBCL1Rrd1pGaHlEcnJFNDdTT3gvMTh3RjJiYmpnYzNaekNTS1cxVDVudDVFYkZvQXovVmc9PSIsCi0gICAgICAiYmluIjogewotICAgICAgICAiY3NzZXNjIjogImJpbi9jc3Nlc2MiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzbmFubyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzbmFuby8tL2Nzc25hbm8tNS4xLjE1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qK0JLZ0RjTERRQStlRGlmTHgwRU80WFNBNTZiN3V1dDNCUUZIK3diU2FTVHVHTHVpeVRhL3diUll0aFVYWDhMQzltTGcrV1dLZThoK3FKdXdUQWJIdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjc3NuYW5vLXByZXNldC1kZWZhdWx0IjogIl41LjIuMTQiLAotICAgICAgICAibGlsY29uZmlnIjogIl4yLjAuMyIsCi0gICAgICAgICJ5YW1sIjogIl4xLjEwLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzbmFubyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzbmFuby1wcmVzZXQtZGVmYXVsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4xNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzbmFuby1wcmVzZXQtZGVmYXVsdC8tL2Nzc25hbm8tcHJlc2V0LWRlZmF1bHQtNS4yLjE0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10MFNGZXNqL1pWMk9UeWxxUVZPckZnRWg1dWFueGJPNlpBZGVDck5zVVE2ZlZ1WHdZVHhKUE5BR3ZHVHhIYkQ2OGxkSUpOZWM3UHlZWkRCcmZEUSs2QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjc3MtZGVjbGFyYXRpb24tc29ydGVyIjogIl42LjMuMSIsCi0gICAgICAgICJjc3NuYW5vLXV0aWxzIjogIl4zLjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLWNhbGMiOiAiXjguMi4zIiwKLSAgICAgICAgInBvc3Rjc3MtY29sb3JtaW4iOiAiXjUuMy4xIiwKLSAgICAgICAgInBvc3Rjc3MtY29udmVydC12YWx1ZXMiOiAiXjUuMS4zIiwKLSAgICAgICAgInBvc3Rjc3MtZGlzY2FyZC1jb21tZW50cyI6ICJeNS4xLjIiLAotICAgICAgICAicG9zdGNzcy1kaXNjYXJkLWR1cGxpY2F0ZXMiOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtZGlzY2FyZC1lbXB0eSI6ICJeNS4xLjEiLAotICAgICAgICAicG9zdGNzcy1kaXNjYXJkLW92ZXJyaWRkZW4iOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtbWVyZ2UtbG9uZ2hhbmQiOiAiXjUuMS43IiwKLSAgICAgICAgInBvc3Rjc3MtbWVyZ2UtcnVsZXMiOiAiXjUuMS40IiwKLSAgICAgICAgInBvc3Rjc3MtbWluaWZ5LWZvbnQtdmFsdWVzIjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLW1pbmlmeS1ncmFkaWVudHMiOiAiXjUuMS4xIiwKLSAgICAgICAgInBvc3Rjc3MtbWluaWZ5LXBhcmFtcyI6ICJeNS4xLjQiLAotICAgICAgICAicG9zdGNzcy1taW5pZnktc2VsZWN0b3JzIjogIl41LjIuMSIsCi0gICAgICAgICJwb3N0Y3NzLW5vcm1hbGl6ZS1jaGFyc2V0IjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLW5vcm1hbGl6ZS1kaXNwbGF5LXZhbHVlcyI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtcG9zaXRpb25zIjogIl41LjEuMSIsCi0gICAgICAgICJwb3N0Y3NzLW5vcm1hbGl6ZS1yZXBlYXQtc3R5bGUiOiAiXjUuMS4xIiwKLSAgICAgICAgInBvc3Rjc3Mtbm9ybWFsaXplLXN0cmluZyI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtdGltaW5nLWZ1bmN0aW9ucyI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtdW5pY29kZSI6ICJeNS4xLjEiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtdXJsIjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLW5vcm1hbGl6ZS13aGl0ZXNwYWNlIjogIl41LjEuMSIsCi0gICAgICAgICJwb3N0Y3NzLW9yZGVyZWQtdmFsdWVzIjogIl41LjEuMyIsCi0gICAgICAgICJwb3N0Y3NzLXJlZHVjZS1pbml0aWFsIjogIl41LjEuMiIsCi0gICAgICAgICJwb3N0Y3NzLXJlZHVjZS10cmFuc2Zvcm1zIjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLXN2Z28iOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdW5pcXVlLXNlbGVjdG9ycyI6ICJeNS4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3NuYW5vLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc25hbm8tdXRpbHMvLS9jc3NuYW5vLXV0aWxzLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KUU5SMTkvWVpoejRwc0xYL3JROU04M2UzejJXZi9IZEpicnl6dGU0YTNOU3VhZnlwOXcvSTRVK2h4NUMyUzlnNDFxbHN0SDdERVduWmFhajgzT3VFQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3NzbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NvLy0vY3Nzby00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd3ZsY2RJYmY2cHdLRWs3dkhqOC9Ca2MwQjR5bFhacnVMdk9nczlkb1M1ZU9zT3B1b2RPVjJ6SkNoU3BrcCtwUnBZUUxRTWVGMDRucjNaNjhTdGE5akE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3NzLXRyZWUiOiAiXjEuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3NvL25vZGVfbW9kdWxlcy9jc3MtdHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtdHJlZS8tL2Nzcy10cmVlLTEuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UnBkcHBGN1RSYXpacmpKNnYzc3R6djkzcXhSY1NzRm1XNmNYMFptMk5WS3B4RTFXVjFIYmxuZ2hWdjlUcmVpcmVIa3FJL1ZERXNmb2xSRjFwNnk3UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtZG4tZGF0YSI6ICIyLjAuMTQiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzc28vbm9kZV9tb2R1bGVzL21kbi1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjE0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZG4tZGF0YS8tL21kbi1kYXRhLTIuMC4xNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZG42d2QwdXc1R3Nkc3dQRmZzZ01wNU5TQjAvYURlNmZLOTRZSlYvQUpEWVhMNkhWTFdCc3hlcTdqczdBZCttVTJLOUxBbHdwazZrTjJENW13Q1BWb3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3Nzby9ub2RlX21vZHVsZXMvc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzc29tIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc29tLy0vY3Nzb20tMC40LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXAzcHZVN3IxTXl5cWJUaytXYk5KSWdKakcyVm1USWFCMTBySTkzTHpWUHJtREpLa3pLWU10eHh5QXZRWFIvTlM2b3R1enZlSTcrN0JCcTNTakJTMm13PT0iCi0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2Nzc3N0eWxlIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc3N0eWxlLy0vY3Nzc3R5bGUtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFaTDY3YWJrVXpJdXZjSHFrN2MwOWNlenBHTmN4VXhVNElvaS8wNXhIazREUWVUa1dtR1lmdElFNmN0VTZBRXQrR240bjFsRFN0T3RqN0ZLeWNQNzFBPT0iLAorICAgICAgInZlcnNpb24iOiAiNC42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc3N0eWxlLy0vY3Nzc3R5bGUtNC42LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJ6K3JXZHpiYlNadjYvcmh0dnp2cWVaUUhyQmFxZ29ncXQ4NXNxRk5iYWJaT3VGYkNWRmI4a1BlRXRaamlLa2JybTM5NWlycE5LaVllRmVMaVFuRlBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNzc29tIjogIn4wLjMuNiIKKyAgICAgICAgIkBhc2FtdXpha2pwL2Nzcy1jb2xvciI6ICJeMy4yLjAiLAorICAgICAgICAicnJ3ZWItY3Nzb20iOiAiXjAuOC4wIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nzc3N0eWxlL25vZGVfbW9kdWxlcy9jc3NvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NvbS8tL2Nzc29tLTAuMy44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iMHRHSGJmZWdiaFBKcHhwaUJQVTJzQ2tpZ0FxdE05TzEyMWxlNmJiT2xneVYrTnlHeUNtVmZKNlFXOWVSano4Q3BOZldFT1lCSU1JR1JZa0x3c0lZZz09IgotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9jc3N0eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc3R5cGUvLS9jc3N0eXBlLTMuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JN0sxVXUwTUJQemFGS2c0bkk1UTdWczJ0KzNnV1dXNjQ4c3BhRitSZzdwSTlkczE4VWduK2x2ZzRTSGN6VWRLbEhJNUxXQlh5cWZTOCtEdWZ5QnNnUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jdXN0b21pemUtY3JhIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2N1c3RvbWl6ZS1jcmEvLS9jdXN0b21pemUtY3JhLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EYnRhTHV5NTkyMjRVK3hDaXVra3hTcThjbHErK01PdEoxRXQ3TEVEMWZMc3pXZTg4RW9ibEVZRkJKODk1c0IxbUM2QjR1dTN4UFQvSWpDbEVMaE1iQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2Rhc2guZmxvdyI6ICJeMy41LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RhbWVyYXUtbGV2ZW5zaHRlaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGFtZXJhdS1sZXZlbnNodGVpbi8tL2RhbWVyYXUtbGV2ZW5zaHRlaW4tMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNkUVNGQjcrbGxmVWNRSFVRTzMrQjhFUlJqME9hNHc5UE9XTUkvcHVHdHVmN2dGeXdHbWthTENFbG51ZGZUaUtaVitOdkhxTDBpZnpkckk4Um83RVNBPT0iCisgICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzdHlwZS8tL2Nzc3R5cGUtMy4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU0xdVFrTWw4clFLL3N6RDBMTmh0cXhJUExwaW1HbThzT0J3VTdsTG5DcFNiVHlZM3llVTFWYzdsNEtUNXpUNHMveU94SEg1Tzd0SXV1TE9DbkxBRFJ3PT0iCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2RhdGEtdXJscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kYXRhLXVybHMvLS9kYXRhLXVybHMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVg1ZVdUU1hPL0JKbXBkSUtDUnVLVWdTQ2dBTjBPd2xpVkszeVBLYndJV1UxVGR3NUJSYWp4bHpNaWR2aCtnd2tvOUFmUTl6SWo1MnB6RjkxUTNZQXZRPT0iLAorICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RhdGEtdXJscy8tL2RhdGEtdXJscy01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWllQNVZCSHNoYURBaVZaeGpiUlZjRkpwYys0eEdnVDBiSzN2enkxSExOOGpUTzk3NUhFYnVZelpKY0hvUUVZNUsxYTB6OFlheUpreVZFVGEwOGVOVGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWJhYiI6ICJeMi4wLjMiLAotICAgICAgICAid2hhdHdnLW1pbWV0eXBlIjogIl4yLjMuMCIsCi0gICAgICAgICJ3aGF0d2ctdXJsIjogIl44LjAuMCIKKyAgICAgICAgIndoYXR3Zy1taW1ldHlwZSI6ICJeNC4wLjAiLAorICAgICAgICAid2hhdHdnLXVybCI6ICJeMTQuMC4wIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9kZWJ1ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTQuMy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QUldGSHVTVTNlRHRRSlB2bk5ZN0pja2V0MWowdDVPdU9zRnpQUHpzZWtENTJabDhxVWZGSVBFaXN3WHFJdkhXR1ZIT2dYKzdHL3ZDTk5oZWh3eGZrUT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjQuNC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTQuNC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SR3d3V253UXZrVmZhdktWdDIyRkdMdyt4WVNkekFSd20wcnU2RGhUVkEzdW1VNWhaYzI4VjNrTzRzdGdZcnlyVGxMcHV2Z0k5R2lpamx0QWpOYmNxQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICIyLjEuMiIKKyAgICAgICAgIm1zIjogIl4yLjEuMyIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj02LjAiCkBAIC03MDY4LDIwMyArMjA2NCwyNSBAQAogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzIjogewotICAgICAgInZlcnNpb24iOiAiMTAuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWNpbWFsLmpzLy0vZGVjaW1hbC5qcy0xMC40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZCQmFMYzFNZ0w1WHB6Z0lQN255NVo2TngzVXJSa0lWaVVrUFVkdGw5YXlhNWFteTNEZTFnc1VVU0IxZzMrM3NFeFlOakNBc0F6bm11a3l4Q2IxR1JBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlZGVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWRlbnQvLS9kZWRlbnQtMS41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStMeFcrS0xXeHUzSFczTTJ3MnltcHd0cVBycVlSelU4ZnFpNkZoZDE4ZkJBTGUxNWJsSlBJL0k0K1VIdmVNVkc2bEpxQjRKTmQ0VUcwUzVjblZId0lnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJiYWJlbC1wbHVnaW4tbWFjcm9zIjogIl4zLjEuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJiYWJlbC1wbHVnaW4tbWFjcm9zIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWVwLWVxdWFsIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZXAtZXF1YWwvLS9kZWVwLWVxdWFsLTIuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sS2RrZFY2RU9Hb1ZuNjVYYU9zUGRINHJNeFRaT25tRnl1SWtNak0xaTVISENiZmpDOTdkYXdnVEF5MGRlWU5mdXFVcVcrUTVWclZhUVl0VXBTZDZ5UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS1idWZmZXItYnl0ZS1sZW5ndGgiOiAiXjEuMC4wIiwKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZXMtZ2V0LWl0ZXJhdG9yIjogIl4xLjEuMyIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuMCIsCi0gICAgICAgICJpcy1hcmd1bWVudHMiOiAiXjEuMS4xIiwKLSAgICAgICAgImlzLWFycmF5LWJ1ZmZlciI6ICJeMy4wLjIiLAotICAgICAgICAiaXMtZGF0ZS1vYmplY3QiOiAiXjEuMC41IiwKLSAgICAgICAgImlzLXJlZ2V4IjogIl4xLjEuNCIsCi0gICAgICAgICJpcy1zaGFyZWQtYXJyYXktYnVmZmVyIjogIl4xLjAuMiIsCi0gICAgICAgICJpc2FycmF5IjogIl4yLjAuNSIsCi0gICAgICAgICJvYmplY3QtaXMiOiAiXjEuMS41IiwKLSAgICAgICAgIm9iamVjdC1rZXlzIjogIl4xLjEuMSIsCi0gICAgICAgICJvYmplY3QuYXNzaWduIjogIl40LjEuNCIsCi0gICAgICAgICJyZWdleHAucHJvdG90eXBlLmZsYWdzIjogIl4xLjUuMCIsCi0gICAgICAgICJzaWRlLWNoYW5uZWwiOiAiXjEuMC40IiwKLSAgICAgICAgIndoaWNoLWJveGVkLXByaW1pdGl2ZSI6ICJeMS4wLjIiLAotICAgICAgICAid2hpY2gtY29sbGVjdGlvbiI6ICJeMS4wLjEiLAotICAgICAgICAid2hpY2gtdHlwZWQtYXJyYXkiOiAiXjEuMS45IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlZXAtaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVlcC1pcy8tL2RlZXAtaXMtMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9JUHprc21UZzQvTXJpaWFZR08rb2tYRFQ3enRuL3czRXB0di8rZ1NJZE1kS3NKbzB1NENmWU5GSlB5KzRTS011Q3FHdzJ3eG5BK1VSTWczdDhhL2JRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlZXBtZXJnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwbWVyZ2UvLS9kZWVwbWVyZ2UtNC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNzVXFiTUVjNzdYcXBkTk83RlJ5Um9nK2VXM3BoK0dZQ2JqK3JLK3VZeVJNdXdzVnkwck1pVnRQbitRSmxLRnZXUC8xUFlwYXBxWW4wTWUya25GbitBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWZhdWx0LWdhdGV3YXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1nYXRld2F5Ly0vZGVmYXVsdC1nYXRld2F5LTYuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1md1NPSnNiYk56Wi9DVUZwcUZCcVlmWU5MajFOYk1QbThNTUNJekhqQzgzaVNKUkJFR21EVXhVK1dQNjYxQmFCUUltZUMyeUh3WHR6K1AvTzlvK1hFZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJleGVjYSI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWZpbmUtbGF6eS1wcm9wIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1sYXp5LXByb3AvLS9kZWZpbmUtbGF6eS1wcm9wLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EczA5cU5oOHl3M2toU2ppSmppVUluYUdYOXhscVpEWTdKVnJ5R3hkeFY3TlBldXFRZnBsT3BRNjZ5SkZadXQzakxhNXpPd2tYdzFnOUVJMnVLaDRPZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1wcm9wZXJ0aWVzLy0vZGVmaW5lLXByb3BlcnRpZXMtMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXh2cUFWS0dmVDErVUF2UHdLVFZ3L25qaGRROFpoWEs0bEkwYkNJdUNNcnAydXA5blBuYURmdHJMdG1wVGF6cWQxbytVWTR6Z3pVK2F2dE1iRFArbGRBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycyI6ICJeMS4wLjAiLAotICAgICAgICAib2JqZWN0LWtleXMiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVsYXllZC1zdHJlYW0vLS9kZWxheWVkLXN0cmVhbS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnlTRDdOZjkxYUxCMFJ4TDRLR3JLSEJYbDdFZHMxREFtRWRjb1Zhd1huTEQ3U0RocE5ndHVJSTJhQWtnN2E3UVM0MWp4UFNaMTdwNFZkR25NSGszTVE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVwZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXBkLy0vZGVwZC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzduSDZQNmR5RGlvSm9nQUFHcHJHcEN0VkltSmhwUGsvcm9DemRiM2ZJaDYxL3MvblBzZlI2b255TXdrQ0FSL09sQzN5QkMwbEVTdlVvUUVBc3NJcnc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQorICAgICAgInZlcnNpb24iOiAiMTAuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWNpbWFsLmpzLy0vZGVjaW1hbC5qcy0xMC41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTh2RGE4UXh2ci8rZDk0aFNoNVAzSUp3STV0OC9jMEtzTXArZzhiTnc5Y1kyaWNPTmE1YVBmdktlaWVXMVdsRzBXUVl3d2hKN21qdWkyeHRpZVBRU1h3PT0iLAorICAgICAgImRldiI6IHRydWUKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvZGVxdWFsIjogewogICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlcXVhbC8tL2RlcXVhbC0yLjAuMy50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGplK3FQS0hFTW9odmZSVENFbzNDclBHNmNBekFZZ216S3l4UmlZU1NEa1M2ZUdKZHlWSm03V2FZQTVFQ2FBRDl3TEIyVDRFRWV5bUE1YUZWY1lYQ0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Rlc3Ryb3kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVzdHJveS8tL2Rlc3Ryb3ktMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJzSkdKVGFYSUlhUjF3NGlKU05vTjBobk1ZN0dwYy9uOEQ0cVNDSnc4UXFGV1hmN2N1QWduRUh4QnB3ZWFWY1BldkMybDNLcGpZQ3gzTnlwUVFnYUpnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIsCi0gICAgICAgICJucG0iOiAiMS4yLjgwMDAgfHwgPj0gMS40LjE2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZXRlY3QtbmV3bGluZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXRlY3QtbmV3bGluZS8tL2RldGVjdC1uZXdsaW5lLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UTHoreC92RVhtL1k3UDd3bjFFSkZOTHhZcFVENFRnTW9zeFk2ZkFWSlVuSk1idXBIQk9uY3h5V1VHOU9wVGFIOUVCRDd1Rkk1TGZFZ21NT2M1NERzQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RldGVjdC1ub2RlIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1ub2RlLy0vZGV0ZWN0LW5vZGUtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVQwTkl1UXBuVHZGREFUTnVITjVyb1B3U0JHODNyRnN1TytNWFhIOS8zTjFlRmJuNHdjUGp0dHZqTUxFUFdKMFJHVVlnUUU3Y0dnUzN0TnhicUNHTTdnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RldGVjdC1wb3J0LWFsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXRlY3QtcG9ydC1hbHQvLS9kZXRlY3QtcG9ydC1hbHQtMS4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV0UXlrdCtMcWZKRkJFWWFESVR4N1M3Y1I3bUovelFtTFhaMnF0NXcwNGFpblladzZ0QmY5ZEJ1bk1qVmVWT2RZVlJVelVPRTRIa1k1SjcrdXR0YjVRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFkZHJlc3MiOiAiXjEuMC4xIiwKLSAgICAgICAgImRlYnVnIjogIl4yLjYuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiZGV0ZWN0IjogImJpbi9kZXRlY3QtcG9ydCIsCi0gICAgICAgICJkZXRlY3QtcG9ydCI6ICJiaW4vZGV0ZWN0LXBvcnQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDQuMi4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZXRlY3QtcG9ydC1hbHQvbm9kZV9tb2R1bGVzL2RlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMi42LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZXRlY3QtcG9ydC1hbHQvbm9kZV9tb2R1bGVzL21zIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwcDYwUDZJVUpEVHVPcS81WjhjZHNrekp1amZ3cWZPVGtyd0l3ajdJUklTcG5rSm5UNlN5SjRQQ1BuR01vRmpDOWRkaGFsNUtWSVl0QXQ5N2l4MDVBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RpZHlvdW1lYW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlkeW91bWVhbi8tL2RpZHlvdW1lYW4tMS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWd4dHlmcU1nN0dLeWhRbWIwNTZLN00zeHN6eS9teUg4dytCNFJUK1FYQlFzdkFPZGMzWHltcUREUEh4MUJnUGdzZEFBNVNJaWZvbmE4OVl0UkFURHp3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi8tL2RpZmYtNC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTU4bG14S1NBNEJOeUx6K0hITVV6bE9FcGcwOUZWK2V2NlpNZTN2SmloZ2R4emdjd1o4Vm9FRVBtQUxDWkc5TG1xZlZvTk1NS3B0dElZVFZHNnVEWTdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjMuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGlmZi1zZXF1ZW5jZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYtc2VxdWVuY2VzLy0vZGlmZi1zZXF1ZW5jZXMtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vZnJCZ3dwUGhDRDg1a01LdEU5UllGRnE2T0MxQTg5b1cydnZnV1pOQ3d4clVwUlVJTG9wWTdsc1l5TURTamM4ZzZVNmFpTzBRdWJnNnI0V2d0NVpuQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9kaXItZ2xvYiI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kaXItZ2xvYi8tL2Rpci1nbG9iLTMuMC4xLnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Xa3JXcDlHUjRLWGZLR1l6T0xtVHVHVmkxVVdGZndzMzc3bjljYzU1L3RiNkR1cXlGNnBjUTVBYmlIRXNoYURwWTl2Nm9hU3IyWENEaWRHbU13ZHpJQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgInBhdGgtdHlwZSI6ICJeNC4wLjAiCiAgICAgICB9LApAQCAtNzI3MiwxNzIgKzIwOTAsMTggQEAKICAgICAgICAgIm5vZGUiOiAiPj04IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kbHYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGx2Ly0vZGx2LTEuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rSGx5dHlqbFBLbklHOFh1Ukc4V3ZtQlA4eHM4UDcxeStTS0tTNlpYV29FZ0x1ZVB4dERvVUVpSDdXa2RlUFdyUTVKQnBFNmFvVnFmWmZKVVFralh3QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kbnMtZXF1YWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG5zLWVxdWFsLy0vZG5zLWVxdWFsLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16K3BhRDZZVVFzaytBYkdDRU00UHJPWFNzczVnZDY2UWZjVkJGVEtSL0hwRkw5akNxaWtTOTRIWXdLd3c2ZlF5TzdJeHJJSXlVdStnMEthOXRVUzJDZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kbnMtcGFja2V0IjogewotICAgICAgInZlcnNpb24iOiAiNS42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Rucy1wYWNrZXQvLS9kbnMtcGFja2V0LTUuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yemEzVUgxTHdkSGg5cXlQWHA4bGt3cGpTTmsvQU1EM2RQeXRVb1JvcW55cERVaFkweHZiZG1WaFdPZnhPNjhmckVmVjlCVThWMTJFejdac0hHWnBDUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAbGVpY2h0Z2V3aWNodC9pcC1jb2RlYyI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZG9jdHJpbmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9jdHJpbmUvLS9kb2N0cmluZS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVMrUTVpM2hCZjdHQmtkNEtHOGE3ZUJOTldOR0xUYUV3d1lXVWlqSVlNN3pybFlETTBCRlhIampQV2xXWjFSZzdVYWRkWmVJRG1pOWpGM0htcWlRMnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXN1dGlscyI6ICJeMi4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wLjAiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2RvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjAuNS4xNiIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tLWFjY2Vzc2liaWxpdHktYXBpLy0vZG9tLWFjY2Vzc2liaWxpdHktYXBpLTAuNS4xNi50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDdCSjJ5RWxzbk9KMzBwWkY0dUlJRGZCRVZnRjRYRUJ4TDlCeGh5NmRucm01aGt6cW1zV0hHVGlIcVJpSVROaE15Rkx5QWlXbmRJSlA3WjFOVHRlRGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kb20tY29udmVydGVyIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvbS1jb252ZXJ0ZXIvLS9kb20tY29udmVydGVyLTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nZDN5cElQZk9NcjloNWpJS3E4RTNzSE9UQ2plaXJubDBXSzVaZFMxQVcwT2R0MGIxUGFXYUhkSjRRazRrbHYrWUI5YUpCUzdtRVNYakZvRFFQdTZEQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ1dGlsYSI6ICJ+MC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kb20tc2VyaWFsaXplciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tc2VyaWFsaXplci8tL2RvbS1zZXJpYWxpemVyLTEuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WSHdCM0tmcmNPT2tlbEVHMlpPZnhxTFpkZmtpbDhQdEppNFA4TjJNTVh1Y1pxMnlMcDc1Q2xWaVVsT1Z3eW9IRURqWVU0MzNBcSs1eldQNjErUkdhZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkb21lbGVtZW50dHlwZSI6ICJeMi4wLjEiLAotICAgICAgICAiZG9taGFuZGxlciI6ICJeNC4yLjAiLAotICAgICAgICAiZW50aXRpZXMiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGVlcmlvanMvZG9tLXNlcmlhbGl6ZXI/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kb21lbGVtZW50dHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb21lbGVtZW50dHlwZS8tL2RvbWVsZW1lbnR0eXBlLTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PTEVUQmo2dzBPc2FnQndkWG5QZE4wY25NZkY5b3BONjljbys3WnJiZlBHcmRwUFZOQlVqMDJzcGk2QjFON3dDaExRaVBuNENTSC96SnZYdzU2Z21Idz09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mYjU1IgotICAgICAgICB9Ci0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RvbWV4Y2VwdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb21leGNlcHRpb24vLS9kb21leGNlcHRpb24tMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXl4SjJtRnkvc2liVlFsdTVxSGpPa2Y5SjNLNnpnbUN4Z0o5NHUyRWR2RE9WMDlIKzMyTHRSc3dFY1VzbVVXTjcycFZMT0VuVFNSYUlWVnpWUWdTMGRnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndlYmlkbC1jb252ZXJzaW9ucyI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZG9tZXhjZXB0aW9uL25vZGVfbW9kdWxlcy93ZWJpZGwtY29udmVyc2lvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViaWRsLWNvbnZlcnNpb25zLy0vd2ViaWRsLWNvbnZlcnNpb25zLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WbFp3S1BDa1lLeFFnZVNiSDVFeW5nT21ScDdXdzdJOXJRTEVSRVR0ZjVvZmQ5cEdlc3dXaU90b2dwRU84NTBqemlQUmFycmVHeG41UUlpVHFwYjJ3QT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9taGFuZGxlci8tL2RvbWhhbmRsZXItNC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdyd294WU4rdVdsek84dWhVWFJsMFAra0hFNEd0VlBmWXpWTGNVeFBMN0tOZEhLajY2dnZsaGl3ZUlIcVlZWFdsdytUOGlMTXA0MkxtNjdnaHc0V01RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRvbWVsZW1lbnR0eXBlIjogIl4yLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmI1NS9kb21oYW5kbGVyP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZG9tdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tdXRpbHMvLS9kb211dGlscy0yLjguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzk2Q2pvZnA3Mk01SUlocGpnb2JCaW1ZRWZvUGp4MVZ4MEJTWDlQMzBXQmRaVzJXSUtVMFQxQmQwa3oyZU5aOWlraktnSGJFeUt4OEJCNkgxTDNoM0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZG9tLXNlcmlhbGl6ZXIiOiAiXjEuMC4xIiwKLSAgICAgICAgImRvbWVsZW1lbnR0eXBlIjogIl4yLjIuMCIsCi0gICAgICAgICJkb21oYW5kbGVyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmI1NS9kb211dGlscz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RvdC1jYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvdC1jYXNlLy0vZG90LWNhc2UtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUt2NW5LbGg2eVJyZHJHdnhlSjJlNXkyZVJVcGtVb3NJVzRBMkFTMzh6d1N6Mjd6dTd1ZkR3UVBpNUpoczNYQWxHTmV0bDNibW5HaFFzTXRrS0puajN3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vLWNhc2UiOiAiXjMuMC40IiwKLSAgICAgICAgInRzbGliIjogIl4yLjAuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZG90ZW52IjogewotICAgICAgInZlcnNpb24iOiAiMTAuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb3RlbnYvLS9kb3RlbnYtMTAuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ybEJpOWQ4anB2OVNmMWtsUGpOZkZBdVdEaktMd1RJSkovVnh0b1R3SVI2aG5aeGNFT1FDWmcyb0lMM01XQll3NUdwVURLT0VuTkQ3TFhUYklwUTAzUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kb3RlbnYtZXhwYW5kIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvdGVudi1leHBhbmQvLS9kb3RlbnYtZXhwYW5kLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZWFFsMURTYTQvUFF5UmZncnY2YW9Oamhhc3AvcDRxczlGako0cTRjUWsrOG00cjZrNFpTaUV5eXRLRzhmOFc5Z2k4V3NRdElPYk5tS2QrdE16TlRtQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kdXBsZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kdXBsZXhlci8tL2R1cGxleGVyLTAuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qdEQ2WUczNzBaQ0lpLzlHVGFKS1F4V1RaRDA0NSs0UjRoVGsveDFVeW9xYWR5Sjl4OUNnU2kxUmxWRFFGOFUyc3hMTFNuRmtDYU1paHFsakhJV2dNZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lZS1maXJzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lZS1maXJzdC8tL2VlLWZpcnN0LTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XTXdtOUxoUlVvK1dVYVJOK3ZSdUVUcUc4OUlnWnBoVlNOa2RGZ2ViNnNTL0U0T3JESU43dDQ4Q0Fld1NIWGM2QzhsZWZEOEtLZnI1dlk2MWJyUWxvdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWpzLy0vZWpzLTMuMS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yQytRVk5NSld2K010UGdrdDB5KzByVkVJZGJ0eFZBREFwVzlKWHJVVmx6SGV0Z2N5Y3pQL0U3REptV0o0ZkpDWkYyY1BjQmswbGFXTzlaSE1HM0RtUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqYWtlIjogIl4xMC44LjUiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImVqcyI6ICJiaW4vY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgInBlZXIiOiB0cnVlCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2VsZWN0cm9uLXRvLWNocm9taXVtIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjQzMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxlY3Ryb24tdG8tY2hyb21pdW0vLS9lbGVjdHJvbi10by1jaHJvbWl1bS0xLjQuNDMzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NR08xazB3MVJncmZkYkxWd21YY0RoSEh1eENuMnFSZ1I3ZFlzSnZXRktEdHR2WVB4NkZOekNHRzBjL2ZCQnZ6SzJMRGgzVVY3VHQ5YXduSG52QUFVUT09IgorICAgICAgInZlcnNpb24iOiAiMS41LjkwIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGVjdHJvbi10by1jaHJvbWl1bS8tL2VsZWN0cm9uLXRvLWNocm9taXVtLTEuNS45MC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQzNQTjRheWRmVzkxTmF0ZHlkNDQ5S3crQnpoTG1vZjZ0enk1VzFwRkM1U3BReFZYVCtveWl5T0c5QWdZWVNOOU9kQS9pazNZa0NycHdxSTh1ZzVUdWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9lbWFpbC1hZGRyZXNzZXMiOiB7CiAgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCkBAIC03NDQ1LDExNjIgKzIxMDksMTA5IEBACiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00T0lQWWxBNkpYcXRWbjh6cEhwR2lJN3ZFNkVRT0FnMTZhR25ETUlBbFpWaW5ub1o4MjA4dFcxaEFiald5ZGdOLzRQTFRUOXErTzFLNkFIL3ZBTEpHdz09IiwKICAgICAgICJkZXYiOiB0cnVlCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VtaXR0ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWl0dGVyeS8tL2VtaXR0ZXJ5LTAuMTMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGVXd2F3azZyNXlSOWpGZ25ES1l0NHNMUzBMbUhKSmkzWk9uYjUvSmRiWXdqM25XK0Z4UW5ISWpoQkt6OFlMQzdvUk5QVk05TlE0N0kzQ1Z4MzRlcVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VtaXR0ZXJ5P3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW1vamktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC05LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDE4RGFKc1hTVWsyKzQycHY4bUxzNWpKVDJocUZrRkU0ajIxd09tZ2JVcXNaMmhMNzJOc1VVNzg1ZzlSWGdvM3MwWk5nVmw0MlRpSHAzWnRPdi9WeWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW1vamlzLWxpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamlzLWxpc3QvLS9lbW9qaXMtbGlzdC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2t5TTE4RWZpbndYWmJubzlGeVVHZUZoODdLQzhIUlFCUUdpbGRIWmJFdVJ5V0ZPbXYxVTEwbzlCQnA4WFZaRFZOTnVRS3lJR0l1NVpZQUFYSjBWMlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW5jb2RldXJsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFBKWHE4SnFGYVZZbTJDV21Qdm5QMkl5bzRaU003L1FLY1NtdU1MRE9iZnBINWZpN1JVR21kL3JURGYrcnV0L3NhaURpUUVlVlROZ0FtSkVkQU94MHc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lbmhhbmNlZC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiNS4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmhhbmNlZC1yZXNvbHZlLy0vZW5oYW5jZWQtcmVzb2x2ZS01LjE1LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxYWVQ0MktKN2xwSUtFQ3IybUFYSWFNbGRjTkNoLzdFMEtCS091NEtTZmtIbVArbVptU3MrOFY1Z0JBcWlzV0J5ME9PNFc1T3l5czBHTzFZOEt0ZEtnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJ0YXBhYmxlIjogIl4yLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMC4xMy4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lbnRpdGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0aWVzLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wOTJpZjVOejYxOUkwdytha0pyTFpIME1YMFBiNURYMzlYT3dRVHRYU2RRUU9hWUgwM1MxdUlRcDRtaE9adEFYcnhxNFZpTzY3WVRpTEJvMjYzOG85QT09IiwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYjU1L2VudGl0aWVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXJyb3ItZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXJyb3ItZXgvLS9lcnJvci1leC0xLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2RGSE5tcWVGU0V0MlpCc0NyaW9yS25uM1oycGorZmQ5a21JNlFvV3c0Ly9ETCtpY0VCZmMwVTdxSkNpc3FyVHNLVGp3NGZORnkycFc5T3FTdEQ4NGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYXJyYXlpc2giOiAiXjAuMi4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcnJvci1zdGFjay1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXJyb3Itc3RhY2stcGFyc2VyLy0vZXJyb3Itc3RhY2stcGFyc2VyLTIuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TazVWNndWYXpQaHE1TWhwTytBVXhKbjV4N1hTWEdsMVI5M1ZuN2krelMxNUtEVnhRaWplak5Dcno4MzQwLzJiZ0xCalI5R3RFRzhaVktPTkRqY3FHUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzdGFja2ZyYW1lIjogIl4xLjMuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIxLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLWFic3RyYWN0Ly0vZXMtYWJzdHJhY3QtMS4yMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15L0I1UE9NMmlCbkl4Q2llcm5IMUc3ckM5cVFvTTc3bExJTVFMdW9iMHpocDhDNTZQbzgxKzJOajBXRktuZDBwTlJlRFRua1lyeWMremhPenBFSVJPZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS1idWZmZXItYnl0ZS1sZW5ndGgiOiAiXjEuMC4wIiwKLSAgICAgICAgImF2YWlsYWJsZS10eXBlZC1hcnJheXMiOiAiXjEuMC41IiwKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZXMtc2V0LXRvc3RyaW5ndGFnIjogIl4yLjAuMSIsCi0gICAgICAgICJlcy10by1wcmltaXRpdmUiOiAiXjEuMi4xIiwKLSAgICAgICAgImZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lIjogIl4xLjEuNSIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuMCIsCi0gICAgICAgICJnZXQtc3ltYm9sLWRlc2NyaXB0aW9uIjogIl4xLjAuMCIsCi0gICAgICAgICJnbG9iYWx0aGlzIjogIl4xLjAuMyIsCi0gICAgICAgICJnb3BkIjogIl4xLjAuMSIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgImhhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycyI6ICJeMS4wLjAiLAotICAgICAgICAiaGFzLXByb3RvIjogIl4xLjAuMSIsCi0gICAgICAgICJoYXMtc3ltYm9scyI6ICJeMS4wLjMiLAotICAgICAgICAiaW50ZXJuYWwtc2xvdCI6ICJeMS4wLjUiLAotICAgICAgICAiaXMtYXJyYXktYnVmZmVyIjogIl4zLjAuMiIsCi0gICAgICAgICJpcy1jYWxsYWJsZSI6ICJeMS4yLjciLAotICAgICAgICAiaXMtbmVnYXRpdmUtemVybyI6ICJeMi4wLjIiLAotICAgICAgICAiaXMtcmVnZXgiOiAiXjEuMS40IiwKLSAgICAgICAgImlzLXNoYXJlZC1hcnJheS1idWZmZXIiOiAiXjEuMC4yIiwKLSAgICAgICAgImlzLXN0cmluZyI6ICJeMS4wLjciLAotICAgICAgICAiaXMtdHlwZWQtYXJyYXkiOiAiXjEuMS4xMCIsCi0gICAgICAgICJpcy13ZWFrcmVmIjogIl4xLjAuMiIsCi0gICAgICAgICJvYmplY3QtaW5zcGVjdCI6ICJeMS4xMi4zIiwKLSAgICAgICAgIm9iamVjdC1rZXlzIjogIl4xLjEuMSIsCi0gICAgICAgICJvYmplY3QuYXNzaWduIjogIl40LjEuNCIsCi0gICAgICAgICJyZWdleHAucHJvdG90eXBlLmZsYWdzIjogIl4xLjQuMyIsCi0gICAgICAgICJzYWZlLXJlZ2V4LXRlc3QiOiAiXjEuMC4wIiwKLSAgICAgICAgInN0cmluZy5wcm90b3R5cGUudHJpbSI6ICJeMS4yLjciLAotICAgICAgICAic3RyaW5nLnByb3RvdHlwZS50cmltZW5kIjogIl4xLjAuNiIsCi0gICAgICAgICJzdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydCI6ICJeMS4wLjYiLAotICAgICAgICAidHlwZWQtYXJyYXktbGVuZ3RoIjogIl4xLjAuNCIsCi0gICAgICAgICJ1bmJveC1wcmltaXRpdmUiOiAiXjEuMC4yIiwKLSAgICAgICAgIndoaWNoLXR5cGVkLWFycmF5IjogIl4xLjEuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzLWFycmF5LW1ldGhvZC1ib3hlcy1wcm9wZXJseSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcy1hcnJheS1tZXRob2QtYm94ZXMtcHJvcGVybHkvLS9lcy1hcnJheS1tZXRob2QtYm94ZXMtcHJvcGVybHktMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdkNkpYVW15SG10OFQ1YTJ4cmVVd0tjR1BxNmYxZitXd0lKa2lqVXFpR2NKejFxcW5aZ1A2WElLK1F5SVdVNWxUN2ltZU54VWxsNDhiemlHK1RTWWNBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzLWdldC1pdGVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcy1nZXQtaXRlcmF0b3IvLS9lcy1nZXQtaXRlcmF0b3ItMS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNQWm1xSEJlNkpJaVRmTjVxMnBFaS8vVHd4bUFGSHdqL1hFdVlqVHVzZTc4aThLeGFxTVRUenhQb0ZLdXpScERwVEorME5BYnBmZW5rbUgycmVQdHV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4xLjMiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIiwKLSAgICAgICAgImlzLWFyZ3VtZW50cyI6ICJeMS4xLjEiLAotICAgICAgICAiaXMtbWFwIjogIl4yLjAuMiIsCi0gICAgICAgICJpcy1zZXQiOiAiXjIuMC4yIiwKLSAgICAgICAgImlzLXN0cmluZyI6ICJeMS4wLjciLAotICAgICAgICAiaXNhcnJheSI6ICJeMi4wLjUiLAotICAgICAgICAic3RvcC1pdGVyYXRpb24taXRlcmF0b3IiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2VzLW1vZHVsZS1sZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcy1tb2R1bGUtbGV4ZXIvLS9lcy1tb2R1bGUtbGV4ZXItMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZaSzdUME4yQ0JtQk9peGhtamRxeDJnV1ZiRlo0RFhaL055Uk1aVmxKWFBhN0N5RlMrL2E0UVFzREdEUXk5WmZFenhGdU5Fc01MZVFKbktQMnA1L0pBPT0iCisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtbW9kdWxlLWxleGVyLy0vZXMtbW9kdWxlLWxleGVyLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01UE9FY1V1WnliSDdJZG1Hc0Q4d2xmMEFJNTV3TWVjTTlyVkJUSS9xRUF5MmMxa1RPbTNEakZZanJCZEkySzNCYUpqSllmWUZlUnRNMHQ5c3NuUnV4dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcy1zZXQtdG9zdHJpbmd0YWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtc2V0LXRvc3RyaW5ndGFnLy0vZXMtc2V0LXRvc3RyaW5ndGFnLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nM09NYnRsd1kzUWV3bHFBaU1MSTQ3S3l3aldab0V5dEtyOHBmNmlUQzh1SnE1YklBSDUyWjlwblE4cFZMNndockN0bzUzSlpEdVVJc2lmR2VMb3JUZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMyIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgImhhcy10b3N0cmluZ3RhZyI6ICJeMS4wLjAiCisgICAgIm5vZGVfbW9kdWxlcy9lc2J1aWxkIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNidWlsZC8tL2VzYnVpbGQtMC4yNS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYmJQQllZcnRaYmt0Nk9zNkZpVExDVEZ4dnE0dHQzSkthbGwxdlJ3c2hBM2ZkVnp0c0xBYXRGYVpvYmhrQkM4L0JyUGV0b2Ewb2tzWW9LWG9HNHJ5Smc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJoYXNJbnN0YWxsU2NyaXB0IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAiZXNidWlsZCI6ICJiaW4vZXNidWlsZCIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcy1zaGltLXVuc2NvcGFibGVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLXNoaW0tdW5zY29wYWJsZXMvLS9lcy1zaGltLXVuc2NvcGFibGVzLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbTZHUGNDZEMzMGVNTGJaMng4ejJXdVJ3QXdzM3pUQkJLdXVzZmZZVlVyTmovR1ZTVUFaK3hLTWFVcGZORFI1SWJ5TkE1TEpiYWVjb1VWYm1VY0Ixdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMiOiAiXjEuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtdG8tcHJpbWl0aXZlLy0vZXMtdG8tcHJpbWl0aXZlLTEuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RQ09sbGdaSnRhVW85bWlZQmNMQ2hUVWFITmpKRjNQWXMxVmlkRDdBd2lFajFrWXhLZVFUY3RMQWV6QU9INVpLUkgwZzJJZ1BuNkt3QjRJVDhpUnB2QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1jYWxsYWJsZSI6ICJeMS4xLjQiLAotICAgICAgICAiaXMtZGF0ZS1vYmplY3QiOiAiXjEuMC4xIiwKLSAgICAgICAgImlzLXN5bWJvbCI6ICJeMS4wLjIiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVzYnVpbGQvYWl4LXBwYzY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC1hcm0iOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9hbmRyb2lkLWFybTY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC14NjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9kYXJ3aW4tYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9kYXJ3aW4teDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL2ZyZWVic2QteDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtYXJtIjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9saW51eC1pYTMyIjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtbG9vbmc2NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LW1pcHM2NGVsIjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtcHBjNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9saW51eC1yaXNjdjY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtczM5MHgiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9saW51eC14NjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9uZXRic2QtYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9uZXRic2QteDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvb3BlbmJzZC1hcm02NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL29wZW5ic2QteDY0IjogIjAuMjUuMTIiLAorICAgICAgICAiQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC9zdW5vcy14NjQiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC93aW4zMi1hcm02NCI6ICIwLjI1LjEyIiwKKyAgICAgICAgIkBlc2J1aWxkL3dpbjMyLWlhMzIiOiAiMC4yNS4xMiIsCisgICAgICAgICJAZXNidWlsZC93aW4zMi14NjQiOiAiMC4yNS4xMiIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvZXNjYWxhZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYWxhZGUvLS9lc2NhbGFkZS0zLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazBlcjJnVWtMZjhPMHpLSmlBaG1rVG5KbFR2SU5Hdjd5Z0ROUGJlSXNYL1RKakdKWkh1aDlCMlV4YnNhRWttbEVvOU1maHJTem1oSWxoUmxJMkdYbnc9PSIsCisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYWxhZGUvLS9lc2NhbGFkZS0zLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1VqMnFseGFRdE80ZzZQcTVjMjlHVGNXR0R5ZDhpdEw4elRsaXBnRUN6M0plc0FpaU9Lb3RkOEpVNm90QjNQQUNnRzZ4a0pVeVZoYm9NUytiamUvakE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzY2FwZS1odG1sIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1odG1sLy0vZXNjYXBlLWh0bWwtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5pU3VwWjRPZXVHd3I2OGxHSWV5bS9rc0laTUpvZFVHT1NDWi9GU25UeGNyZWtidnFyZ2RVeGxKT01waWphS1pWakFKcldyR3MvNkp5OE9NdXlqOW93PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVR0cGNOSjNYQXp4M0dxOHNXUnpKYVZhalJzMHVWeEEyWUFrZGIxam0yWWtQejRHNmVnVUZBeUEzbjV2dEVJWmVmUGs1V2E0VVhiS3VTNWZLa0pXZGdBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNjb2RlZ2VuIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY29kZWdlbi8tL2VzY29kZWdlbi0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMk5sSURUd1VXSk4wbVJQUU9kdFFCemJVSHZkR1kyUDFWWFN5VTgzUTN4S3hNN1dIWDJRbDhkS3E3ODJROVRnUVVOT0xFekVZdTliekxOajFxODhJNXc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9lc3RyZWUtd2Fsa2VyIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJlZS13YWxrZXIvLS9lc3RyZWUtd2Fsa2VyLTMuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03UlVLZlhnU01Na3p0Nlp1WG1xYXBPdXJMR1BQZmdqNmw5dVJaN2xSR29sdmsweTJ5b2NjMzVMZGN4S0M1UFFaZG4yRE1xaW9BUTJOb1djclRLbW02Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3ByaW1hIjogIl40LjAuMSIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjIuMCIsCi0gICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiZXNjb2RlZ2VuIjogImJpbi9lc2NvZGVnZW4uanMiLAotICAgICAgICAiZXNnZW5lcmF0ZSI6ICJiaW4vZXNnZW5lcmF0ZS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjAiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAic291cmNlLW1hcCI6ICJ+MC42LjEiCisgICAgICAgICJAdHlwZXMvZXN0cmVlIjogIl4xLjAuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNjb2RlZ2VuL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNDMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50Ly0vZXNsaW50LTguNDMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWFDcGYySnFxS2VzTUZHZ21SUGVzc21WS2pjR1hxZGxBWUxMQzNUSE04dDVuQlJaUlErc3Q1V00vaG9KWGtkaW9FWExMYlhnY2xVcE0wVFhvNUhYNVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXV0aWxzIjogIl40LjIuMCIsCi0gICAgICAgICJAZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogIl40LjQuMCIsCi0gICAgICAgICJAZXNsaW50L2VzbGludHJjIjogIl4yLjAuMyIsCi0gICAgICAgICJAZXNsaW50L2pzIjogIjguNDMuMCIsCi0gICAgICAgICJAaHVtYW53aG9jb2Rlcy9jb25maWctYXJyYXkiOiAiXjAuMTEuMTAiLAotICAgICAgICAiQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogIl4xLjAuMSIsCi0gICAgICAgICJAbm9kZWxpYi9mcy53YWxrIjogIl4xLjIuOCIsCi0gICAgICAgICJhanYiOiAiXjYuMTAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC4yIiwKLSAgICAgICAgImRlYnVnIjogIl40LjMuMiIsCi0gICAgICAgICJkb2N0cmluZSI6ICJeMy4wLjAiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjQuMC4wIiwKLSAgICAgICAgImVzbGludC1zY29wZSI6ICJeNy4yLjAiLAotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMy40LjEiLAotICAgICAgICAiZXNwcmVlIjogIl45LjUuMiIsCi0gICAgICAgICJlc3F1ZXJ5IjogIl4xLjQuMiIsCi0gICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIsCi0gICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIiwKLSAgICAgICAgImZpbGUtZW50cnktY2FjaGUiOiAiXjYuMC4xIiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKLSAgICAgICAgImdsb2ItcGFyZW50IjogIl42LjAuMiIsCi0gICAgICAgICJnbG9iYWxzIjogIl4xMy4xOS4wIiwKLSAgICAgICAgImdyYXBoZW1lciI6ICJeMS40LjAiLAotICAgICAgICAiaWdub3JlIjogIl41LjIuMCIsCi0gICAgICAgICJpbXBvcnQtZnJlc2giOiAiXjMuMC4wIiwKLSAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMCIsCi0gICAgICAgICJpcy1wYXRoLWluc2lkZSI6ICJeMy4wLjMiLAotICAgICAgICAianMteWFtbCI6ICJeNC4xLjAiLAotICAgICAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSI6ICJeMS4wLjEiLAotICAgICAgICAibGV2biI6ICJeMC40LjEiLAotICAgICAgICAibG9kYXNoLm1lcmdlIjogIl40LjYuMiIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIiwKLSAgICAgICAgIm5hdHVyYWwtY29tcGFyZSI6ICJeMS40LjAiLAotICAgICAgICAib3B0aW9uYXRvciI6ICJeMC45LjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjEiLAotICAgICAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICJeMy4xLjAiLAotICAgICAgICAidGV4dC10YWJsZSI6ICJeMC4yLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImVzbGludCI6ICJiaW4vZXNsaW50LmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1jb25maWctcmVhY3QtYXBwIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1jb25maWctcmVhY3QtYXBwLy0vZXNsaW50LWNvbmZpZy1yZWFjdC1hcHAtNy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUs2ck56dmtJZUhhVGQ4bS9RRWgxWmtvMEtJN0JBQ1dra25lU3M2czljS1pDL0oyN1gzZVpSNlVwdDFqa21aLzRGSytYVU9QUHhNRU43K2xiVVhmU2xBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL2VzbGludC1wYXJzZXIiOiAiXjcuMTYuMyIsCi0gICAgICAgICJAcnVzaHN0YWNrL2VzbGludC1wYXRjaCI6ICJeMS4xLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4iOiAiXjUuNS4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiAiXjUuNS4wIiwKLSAgICAgICAgImJhYmVsLXByZXNldC1yZWFjdC1hcHAiOiAiXjEwLjAuMSIsCi0gICAgICAgICJjb25mdXNpbmctYnJvd3Nlci1nbG9iYWxzIjogIl4xLjAuMTEiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi1mbG93dHlwZSI6ICJeOC4wLjMiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi1pbXBvcnQiOiAiXjIuMjUuMyIsCi0gICAgICAgICJlc2xpbnQtcGx1Z2luLWplc3QiOiAiXjI1LjMuMCIsCi0gICAgICAgICJlc2xpbnQtcGx1Z2luLWpzeC1hMTF5IjogIl42LjUuMSIsCi0gICAgICAgICJlc2xpbnQtcGx1Z2luLXJlYWN0IjogIl43LjI3LjEiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI6ICJeNC4zLjAiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi10ZXN0aW5nLWxpYnJhcnkiOiAiXjUuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICJeOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1pbXBvcnQtcmVzb2x2ZXItbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUvLS9lc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUtMC4zLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdvelcyYmxNTEpDZUZwQnd1Z0xUR3l2VmpOb2VvMWtub25YQWNhdEM2YmpQQlppdG90eGRXZjdHaW1yMjVONGMwQUFPbzRlT1VmYUc4MklKUERwcUNBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogIl4zLjIuNyIsCi0gICAgICAgICJpcy1jb3JlLW1vZHVsZSI6ICJeMi4xMS4wIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMjIuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LWltcG9ydC1yZXNvbHZlci1ub2RlL25vZGVfbW9kdWxlcy9kZWJ1ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTMuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DRmp6WVlBaTRUaGZpUXZpenJGUWV2VFRYSHRuQ3FXZmU3eDFBaGdFc2NUejZaYkxiZm9MUkxQdWdUUXlCdGg2ZjhaRVJWVVN5V0hGRC83V3U0dDFYUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICJeMi4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1tb2R1bGUtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LW1vZHVsZS11dGlscy8tL2VzbGludC1tb2R1bGUtdXRpbHMtMi44LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFXYWpJWWZzcUNLUkRnVWZqRVhOTi9KbHJ6YXVNdVNFeTVzYmQ3V1hidFczRUg2QTZNcHdFaDQyYzdxRCtNcVFvOVFNSjZmV0xBZUlKeW54MGc2T0F3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogIl4zLjIuNyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgImVzbGludCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LW1vZHVsZS11dGlscy9ub2RlX21vZHVsZXMvZGVidWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0zLjIuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ0ZqellZQWk0VGhmaVF2aXpyRlFldlRUWEh0bkNxV2ZlN3gxQWhnRXNjVHo2WmJMYmZvTFJMUHVnVFF5QnRoNmY4WkVSVlVTeVdIRkQvN1d1NHQxWFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXMiOiAiXjIuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtcGx1Z2luLWZsb3d0eXBlIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1wbHVnaW4tZmxvd3R5cGUvLS9lc2xpbnQtcGx1Z2luLWZsb3d0eXBlLTguMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kWDhsNnFVTDZPK2ZZUHRwTlJpZGVDRlNwbVdPVVZ4NVFjYUdMVnFlL3ZsRGlCU2U0dllsakRXREVUd255RnpwbDdCeS9XVkl1NnJjcm5pQ2dIOUJxUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2Rhc2giOiAiXjQuMTcuMjEiLAotICAgICAgICAic3RyaW5nLW5hdHVyYWwtY29tcGFyZSI6ICJeMy4wLjEiCi0gICAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXhwZWN0LXR5cGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwZWN0LXR5cGUvLS9leHBlY3QtdHlwZS0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIta252eWVhdVlocWpPWXZRNjZNem5TTXM4M3dtSHJDeWNORU42QW8rMkFlWUVmeFVJa3VpVnhkRWExcWxHRVBLK1dlM24wVEhpRGNpWVNzQ2NnVy9Eb0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49MTIuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZmxvdyI6ICJeNy4xNC41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeCI6ICJeNy4xNC45IiwKLSAgICAgICAgImVzbGludCI6ICJeOC4xLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4taW1wb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMi4yNy41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLWltcG9ydC8tL2VzbGludC1wbHVnaW4taW1wb3J0LTIuMjcuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTG1FdDNHVm9mZ2lHdWlFK09ScG52UCtrQW0zaDZNTFpKNFE1SEN5SEFEb2ZzYjRWelhGc1JpV2ozYzBPRmlWKzNEV0ZoMHFnM3Y5Z2NQbGZjM3pSb3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJyYXktaW5jbHVkZXMiOiAiXjMuMS42IiwKLSAgICAgICAgImFycmF5LnByb3RvdHlwZS5mbGF0IjogIl4xLjMuMSIsCi0gICAgICAgICJhcnJheS5wcm90b3R5cGUuZmxhdG1hcCI6ICJeMS4zLjEiLAotICAgICAgICAiZGVidWciOiAiXjMuMi43IiwKLSAgICAgICAgImRvY3RyaW5lIjogIl4yLjEuMCIsCi0gICAgICAgICJlc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUiOiAiXjAuMy43IiwKLSAgICAgICAgImVzbGludC1tb2R1bGUtdXRpbHMiOiAiXjIuNy40IiwKLSAgICAgICAgImhhcyI6ICJeMS4wLjMiLAotICAgICAgICAiaXMtY29yZS1tb2R1bGUiOiAiXjIuMTEuMCIsCi0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMyIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIiwKLSAgICAgICAgIm9iamVjdC52YWx1ZXMiOiAiXjEuMS42IiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMjIuMSIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4wIiwKLSAgICAgICAgInRzY29uZmlnLXBhdGhzIjogIl4zLjE0LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICJeMiB8fCBeMyB8fCBeNCB8fCBeNSB8fCBeNiB8fCBeNy4yLjAgfHwgXjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4taW1wb3J0L25vZGVfbW9kdWxlcy9kZWJ1ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTMuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DRmp6WVlBaTRUaGZpUXZpenJGUWV2VFRYSHRuQ3FXZmU3eDFBaGdFc2NUejZaYkxiZm9MUkxQdWdUUXlCdGg2ZjhaRVJWVVN5V0hGRC83V3U0dDFYUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICJeMi4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4taW1wb3J0L25vZGVfbW9kdWxlcy9kb2N0cmluZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb2N0cmluZS8tL2RvY3RyaW5lLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zNW1Ta3U0WlhLMHZmQ3VIRURBd3Q1NWRnMmpOYWpIWjFvZHZGKzhTU3I4MkVzWlk0UW1YZnVXc284b0VkOHpSaFZPYlNOMThhTTBDalNkb0JYN3pJdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4tamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI1LjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXBsdWdpbi1qZXN0Ly0vZXNsaW50LXBsdWdpbi1qZXN0LTI1LjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFdMVUVYZWVGN0M5UUdLcXZkU2J6TE9pTFR4K2JubzcvSEM5ZWVmZVBmRWIyNTdRRkhnN3llM2RoODBBWlZrYWEvUlFzQkIxUS9PUlF2ZzJYN0YwTlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2V4cGVyaW1lbnRhbC11dGlscyI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4iOiAiXjQuMC4wIHx8IF41LjAuMCIsCi0gICAgICAgICJlc2xpbnQiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4iOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LXBsdWdpbi1qc3gtYTExeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLWpzeC1hMTF5Ly0vZXNsaW50LXBsdWdpbi1qc3gtYTExeS02LjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNjNCb2c0aUlldGh5bzhzbUJrbE9Sa25WakIwVDJkd0I4TXIvaElDK2ZCUzB1eUhkWVlwek0vRWQrWUM4VnhUamxYSEVXRk9kbWd3Y0RuMVUyTDlWQ0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuMjAuNyIsCi0gICAgICAgICJhcmlhLXF1ZXJ5IjogIl41LjEuMyIsCi0gICAgICAgICJhcnJheS1pbmNsdWRlcyI6ICJeMy4xLjYiLAotICAgICAgICAiYXJyYXkucHJvdG90eXBlLmZsYXRtYXAiOiAiXjEuMy4xIiwKLSAgICAgICAgImFzdC10eXBlcy1mbG93IjogIl4wLjAuNyIsCi0gICAgICAgICJheGUtY29yZSI6ICJeNC42LjIiLAotICAgICAgICAiYXhvYmplY3QtcXVlcnkiOiAiXjMuMS4xIiwKLSAgICAgICAgImRhbWVyYXUtbGV2ZW5zaHRlaW4iOiAiXjEuMC44IiwKLSAgICAgICAgImVtb2ppLXJlZ2V4IjogIl45LjIuMiIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgImpzeC1hc3QtdXRpbHMiOiAiXjMuMy4zIiwKLSAgICAgICAgImxhbmd1YWdlLXRhZ3MiOiAiPTEuMC41IiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4xLjIiLAotICAgICAgICAib2JqZWN0LmVudHJpZXMiOiAiXjEuMS42IiwKLSAgICAgICAgIm9iamVjdC5mcm9tZW50cmllcyI6ICJeMi4wLjYiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjMgfHwgXjQgfHwgXjUgfHwgXjYgfHwgXjcgfHwgXjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4tcmVhY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjMyLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1wbHVnaW4tcmVhY3QvLS9lc2xpbnQtcGx1Z2luLXJlYWN0LTcuMzIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDJmQk1hK1h6b25yck5reVZpcnpLbHZuNVJYenpQd1JIdE12TEF0VlpydDhveGduVFFhWWJVNlNYVE9PMW13UWdwMXk1K3RvTVNLSW5uekdyMEtucWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJyYXktaW5jbHVkZXMiOiAiXjMuMS42IiwKLSAgICAgICAgImFycmF5LnByb3RvdHlwZS5mbGF0bWFwIjogIl4xLjMuMSIsCi0gICAgICAgICJhcnJheS5wcm90b3R5cGUudG9zb3J0ZWQiOiAiXjEuMS4xIiwKLSAgICAgICAgImRvY3RyaW5lIjogIl4yLjEuMCIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjMuMCIsCi0gICAgICAgICJqc3gtYXN0LXV0aWxzIjogIl4yLjQuMSB8fCBeMy4wLjAiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMiIsCi0gICAgICAgICJvYmplY3QuZW50cmllcyI6ICJeMS4xLjYiLAotICAgICAgICAib2JqZWN0LmZyb21lbnRyaWVzIjogIl4yLjAuNiIsCi0gICAgICAgICJvYmplY3QuaGFzb3duIjogIl4xLjEuMiIsCi0gICAgICAgICJvYmplY3QudmFsdWVzIjogIl4xLjEuNiIsCi0gICAgICAgICJwcm9wLXR5cGVzIjogIl4xNS44LjEiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMi4wLjAtbmV4dC40IiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiLAotICAgICAgICAic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbCI6ICJeNC4wLjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICJeMyB8fCBeNCB8fCBeNSB8fCBeNiB8fCBeNyB8fCBeOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzLy0vZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcy00LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0ZjN0l0ejlReGgyeDRnTkhTdHYzQnFKcTU0RXhYbWZDK2ExTmpBdGE2NklBTjg3V3UwUi9RQXJnSVM5cUt6WDNkWEtQSTlINWNybDlRY2hOTVk5K2c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICJeMy4wLjAgfHwgXjQuMC4wIHx8IF41LjAuMCB8fCBeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtcGx1Z2luLXJlYWN0L25vZGVfbW9kdWxlcy9kb2N0cmluZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb2N0cmluZS8tL2RvY3RyaW5lLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zNW1Ta3U0WlhLMHZmQ3VIRURBd3Q1NWRnMmpOYWpIWjFvZHZGKzhTU3I4MkVzWlk0UW1YZnVXc284b0VkOHpSaFZPYlNOMThhTTBDalNkb0JYN3pJdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4tcmVhY3Qvbm9kZV9tb2R1bGVzL3Jlc29sdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMC1uZXh0LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUvLS9yZXNvbHZlLTIuMC4wLW5leHQuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaU1EYm1BV3RmVStNSHB4dC9JNWlXSTdjWTZZVkVaVVEzTUJnUFErK1hEMVBFTHVKSElsODJ4Qm1PYnlQMkt5UW1rTkIyZHNxRjdzZW9RUWlBbjV5RFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtY29yZS1tb2R1bGUiOiAiXjIuOS4wIiwKLSAgICAgICAgInBhdGgtcGFyc2UiOiAiXjEuMC43IiwKLSAgICAgICAgInN1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtzLWZsYWciOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJyZXNvbHZlIjogImJpbi9yZXNvbHZlIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4tdGVzdGluZy1saWJyYXJ5IjogewotICAgICAgInZlcnNpb24iOiAiNS4xMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLXRlc3RpbmctbGlicmFyeS8tL2VzbGludC1wbHVnaW4tdGVzdGluZy1saWJyYXJ5LTUuMTEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRUxZN0dlZm8rNjFPZlhLbFFlWE5JRFZWTFBjdktUZWlRT29NWkc5VGV1V2E3TG40ZFVOUnY4SmRSV0JRSTlNYmI0MjdYR2xWQjFhYTFRUFp4QkpNOFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogIl41LjU4LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIiwKLSAgICAgICAgIm5wbSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjcuNS4wIHx8IF44LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LXNjb3BlIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1zY29wZS8tL2VzbGludC1zY29wZS03LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRFlqNWRlR2xIQmZNdDE1SjdyZHR5S05xL05xbHY1S2ZVNGlvZHJRMDE5WEVTc1Jud1hIOUtBRTB5M2N3dFVIRG8yb2I3Q3lwQW5DcWVmaDZ2aW9XUnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNyZWN1cnNlIjogIl40LjMuMCIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtdmlzaXRvci1rZXlzIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC12aXNpdG9yLWtleXMvLS9lc2xpbnQtdmlzaXRvci1rZXlzLTMuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wWm5tbUx3WXpmK2tXYU0vUWdydnBlbjUxdXBBa3RhYWlJMDFuc0pEL1lyM2xNT2ROdHEwY3hrcnJnMTZ3NjRWdGlzTjZva2JzN1E4QWZHcWo0YzlmQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC13ZWJwYWNrLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtd2VicGFjay1wbHVnaW4vLS9lc2xpbnQtd2VicGFjay1wbHVnaW4tMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2cktjR25jcFBiUFNVSFg2QjNzdE5HemtLRnRvM2VMK0RLTTQrVnlNclZuaFBjM3ZSY3pWbENxM3VodUZPZFJ2REhUVlh1endrMVpLVXJxRFFIUTl3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9lc2xpbnQiOiAiXjcuMjkuMCB8fCBeOC40LjEiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI4LjAuMiIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNSIsCi0gICAgICAgICJub3JtYWxpemUtcGF0aCI6ICJeMy4wLjAiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjcuMC4wIHx8IF44LjAuMCIsCi0gICAgICAgICJ3ZWJwYWNrIjogIl41LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9hanYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNSdTFrcGNPOXlMdFl4Qkt2cWZUZWg5S3paRXdPM1NUeVgxSFQrNENhRHpDNkhwVEdZaEloUEl6ajlYdUtVN0tZRHduYWVoNWhjT3dqeTFRdUp6QlBBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIiwKLSAgICAgICAgInVyaS1qcyI6ICJeNC4yLjIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Vwb2JlcmV6a2luIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3JkcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYta2V5d29yZHMvLS9hanYta2V5d29yZHMtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlDUy9KTkZBVXlyNXZBdWhrMURXbTFDQnhSSFc5TGJKMm96V2VlbXJJcXBic3FLakhWeFlQeWk1R0MwcmpaSVQ1SnhKM3ZpclZUUzh3azRpL1ora3J3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjguOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL2plc3Qtd29ya2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjguMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdvcmtlci8tL2plc3Qtd29ya2VyLTI4LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3FSQTIyMFlWLzZqQ284Vld2QXQxS0t4NmVlazFWSUhNUGVMRWJwY2ZTZmtFZVd5Qk5wcHluTS9vNnErV213K3NPaG9zMm1sMzR3WmJTWDNHMTMvL2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl44LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTk04L1A5bjNYalhoSVpuMWxMaGtGYUFDVE9VUlFYaldoVjRCQS9Sbk92OHh2Z3F0cXBBWDlJTzRtUlF4U3gxUmxvNHRxemVxYjBzT2xydWFPeTNkdWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9zY2hlbWEtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MMGpSc3JQcGpkY2tQM29QdWczL1Z4Tkt0MnRyUjhUY2Fick02Rk9BQWx2Qy85UGhjbW0rY3VBZ1RseEJxZEJSMVdKeDdOYWo5V0h3K2FPbWhlU1Zidz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC45IiwKLSAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAiYWp2LWZvcm1hdHMiOiAiXjIuMS4xIiwKLSAgICAgICAgImFqdi1rZXl3b3JkcyI6ICJeNS4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS93ZWJwYWNrIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL2FyZ3BhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgrOVdxZWJiRnpwWDlPUitXYTZPMjlhc0lvZ2VSTXpjR3RBSU5kcE1ISHlBZzEwZjA1YVNGVkJiY0VxR2YvUFh3MUVqQVorcTIvYkVCZzNEdnVySzNRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC9ub2RlX21vZHVsZXMvZmluZC11cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzgvUFhUMXdsTExEZ1R6RHM3c2pxOWh6ejB2WEQrem4rN3d5cEVlNGZYUXhDbWRtcWZHc0VQUXhtaUNTUUkzYWpGVjkxYlZTc3ZOdHJKUmlXNm5Hbmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjYuMC4wIiwKLSAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL2dsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMy4yMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xMy4yMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZzVRdFZrQ3kva3YzRlVTbHU0dWtlWkRWZjllZTBpWExBVVlYMTNnYlIxN2JuZWpGVHpyNGlTOWJZN2t3Q2YxTnp0Uk5tMXQ5MWZqT2l5eDRDU3dQUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlLWZlc3QiOiAiXjAuMjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC9ub2RlX21vZHVsZXMvanMteWFtbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC00LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd3B4WnM5Tm94WmFKRVNKR0laVHlERWFZcGwwRktTQStGQjlhSml5ZW1LaE13a3hRZzYzaDRUMUtKZ1VHSHBUcVBETlJjbW1ZTHVnclJqSmxCdFd2UkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJncGFyc2UiOiAiXjIuMC4xIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL2xvY2F0ZS1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvY2F0ZS1wYXRoLy0vbG9jYXRlLXBhdGgtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlQWks2ZVlqYnhSdTN1QjQvV1ozRXNFSU1KRk1xQW9vcGwzUit6dXEwVWpjQW0vTU82S0N3ZURnUGZQM2VsVHp0b0tQM0t0blZIeFRuMk5IQlNEVlV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbG9jYXRlIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL3AtbGltaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRZT2FuTTN3R3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1ZoN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL3AtbG9jYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxhTmp0UldVQlkrK3pCNW5FL053Y2FvTXlsU1BrK1MrWkhOQjFUemRiTUpNbnk2ZHlucEFHdDdYL3RsL1FZcTNUSWVFNm54SHBwYm8yTEd5bXJHNVB3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbGltaXQiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC9ub2RlX21vZHVsZXMvdHlwZS1mZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtMC4yMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OZStlRTRyMC9pV25wQXhEODUyejNBK04wQnQ1Uk4vL05qSndSZDJWRkhFbXJ5d3hmNXZzWmxoNFI2bGl4bDZCK3d6LzhkK21hVFNBa04xRklrSTNMUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzcHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtOS41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdPQVNOMVdtYTVmdW01U3JOaEZNQU1KeE9VQWJoeWZROGRRLy9QSmFKYk53MFVSVFBXcUlnaEhXdDFNbUFBTktoSFpJWU9IcnVXNEt3NHJ1VVdPZEd3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFjb3JuIjogIl44LjguMCIsCi0gICAgICAgICJhY29ybi1qc3giOiAiXjUuMy4yIiwKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjMuNC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzcHJpbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNwcmltYS8tL2VzcHJpbWEtNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVHdUZGdzdVcGRhK2c0cCtRSHZuVzBSeVRYL1NWZUpCRE0vZ0N0TUFSTzBjTHVUMkhjRUtuVFB2aGpWNmFHZXFyQ0Ivc2JOb3AwS3N6bTBqc2FXVTRBPT0iLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImVzcGFyc2UiOiAiYmluL2VzcGFyc2UuanMiLAotICAgICAgICAiZXN2YWxpZGF0ZSI6ICJiaW4vZXN2YWxpZGF0ZS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3F1ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcXVlcnkvLS9lc3F1ZXJ5LTEuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZUUxYVXBsQXdKZ0N5ZFE3OElNSnl3WkNjZW9xazFvSDAxT0VSZFNBSmMvN1UyQXlsd2poU0NMREV0cXdnODExaWRJUy85ZklVNUdqRzczSWdqS01WZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3JlY3Vyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNyZWN1cnNlLy0vZXNyZWN1cnNlLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LbWZLTDNiNkcrUlh2UDhOMXZyM1RxMWtML29DRmduMk5ZWEV0cVA4L0wzcEthcFVBNEc4Y0ZWYW9GM1NVMzIzQ0Q0WHlwUi9mZmlvSG1rdGk2L1RhZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtNS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1NZEFSdVZFUXppTlRlSkQ4RGdNcW1od1IxMUJSUS9jQlArcEx0WWRTVG5mM01JTzhmRmVpSU5FYlgzNlpkTmxmVS83QTlmM2dVdzQ5QjNvUXN2d0JBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3RyZWUtd2Fsa2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJlZS13YWxrZXIvLS9lc3RyZWUtd2Fsa2VyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xZk1YRjNZUDRwWlpWb3pGOGovWkxmdm5SOE5TSWxqdDU2VWhiWjVQZWVEbW1HSHBncGR3UXQ3SVRsR3ZZYVF1a0N2dUJSTUxFaUtpWUMrb2VJZzRjZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3V0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdXRpbHMvLS9lc3V0aWxzLTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rVnNjcVhrNE9DcDY4U1owZGtnRUtWaTYvOGlqMzAwS0JXVEpxMzJQL2RZZVdUU3dLNDFXeVR4YWxOMWVSbUE1WjlVVS9MWDlEN0ZXU21WOVNBWXg2Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXRhZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldGFnLy0vZXRhZy0xLjguMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUlMNUZ4N21hd1ZhMzAwYWwyQm5FRTRpTnZvMXFFVHhMclBJL28wNUw3ejZnbzdmQ3cxSjZFUW1iSzRGbUoyQVM3a2dWRi9LRVpXdWZCZmRDbE1jUGc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50ZW1pdHRlcjMvLS9ldmVudGVtaXR0ZXIzLTQuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04Z3VIQlpDd0tuRmhZZEhyMnlzdVJXRXJUd2hvTjJYOFhFTFJsclJ3cG1mZVkyamp1VU40dGFRTXNVTEtVVm8xSzREdlpsKzBwZ2Z5b3lzSHh2bXZFdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ldmVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnRzLy0vZXZlbnRzLTMuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tUXcrMmZrUWJBTHpRN1YwTVkwSXFkblhOT2VUdFA0cjBsTjl6N0FBYXdDWGdxZWE3YkRpaTIwQVlySUJyRmQvSHgwTTJPY3o2UzExMUNhRmtVY2IwUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC54IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leGVjYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjYS8tL2V4ZWNhLTUuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04dVNwWlpvY0FaUkJBUElFSU5KajNMbzlIeUdpdGxsY3pjMjdFaDVZWW9qak1GTW44eUhNRE1hVUhFMkpxZnEwNUQvd3Vjd0k0SkdVUnlYdDF2Y2h5Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjMiLAotICAgICAgICAiZ2V0LXN0cmVhbSI6ICJeNi4wLjAiLAotICAgICAgICAiaHVtYW4tc2lnbmFscyI6ICJeMi4xLjAiLAotICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICJeNC4wLjEiLAotICAgICAgICAib25ldGltZSI6ICJeNS4xLjIiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC4zIiwKLSAgICAgICAgInN0cmlwLWZpbmFsLW5ld2xpbmUiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXhlY2E/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leGl0IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4aXQvLS9leGl0LTAuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aay9lTktWMnpianBLenJzUStuMUc2cG9WYkVyUXhKMExCT0pYYUtaMUVWaUx6SCtockx1OWNkWEk0enc5ZEJRSnNsd0JFcGJRMlAxb1M3bkR4czZqUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHBlY3QvLS9leHBlY3QtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pQUVyc0x4SjhDK1MwMlFiTEF3Z1NHU2V6TFFLK1hYUkR0OEl1RlhGcHdDTncyRUNtelpTbWpLY0NhRlZwNVZSTWsrV0F2ejZoNmpva3pFekJGWkV1QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2V4cGVjdC11dGlscyI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBlY3Qvbm9kZV9tb2R1bGVzL0BqZXN0L3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwZWN0L25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwZWN0L25vZGVfbW9kdWxlcy9qZXN0LWdldC10eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo1WGV6NG5SUk1qazhlbW5UcFdybGt5YjlwZlJRUWFuRHJ2V0hoc1IxK1ZVZmJ3eGkzMGVWY1pGbGNkR0luUmliVTRHNUx3SFhwSTdJUkhVMENZK2dnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cGVjdC9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHByZXNzIjogewotICAgICAgInZlcnNpb24iOiAiNC4xOC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHByZXNzLy0vZXhwcmVzcy00LjE4LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTUvUHNMNmlHUGRmUS9sS00xVXVpZWxZZ3YzQlVvSmZ6MWFVd1U5dkhaK0o3Z3l2d2RRWEZFQklFSWF4ZUdmMEdJY3JlQVROeUJFeHRhbGlzRGJ1TXFRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFjY2VwdHMiOiAifjEuMy44IiwKLSAgICAgICAgImFycmF5LWZsYXR0ZW4iOiAiMS4xLjEiLAotICAgICAgICAiYm9keS1wYXJzZXIiOiAiMS4yMC4xIiwKLSAgICAgICAgImNvbnRlbnQtZGlzcG9zaXRpb24iOiAiMC41LjQiLAotICAgICAgICAiY29udGVudC10eXBlIjogIn4xLjAuNCIsCi0gICAgICAgICJjb29raWUiOiAiMC41LjAiLAotICAgICAgICAiY29va2llLXNpZ25hdHVyZSI6ICIxLjAuNiIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOSIsCi0gICAgICAgICJkZXBkIjogIjIuMC4wIiwKLSAgICAgICAgImVuY29kZXVybCI6ICJ+MS4wLjIiLAotICAgICAgICAiZXNjYXBlLWh0bWwiOiAifjEuMC4zIiwKLSAgICAgICAgImV0YWciOiAifjEuOC4xIiwKLSAgICAgICAgImZpbmFsaGFuZGxlciI6ICIxLjIuMCIsCi0gICAgICAgICJmcmVzaCI6ICIwLjUuMiIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICIyLjAuMCIsCi0gICAgICAgICJtZXJnZS1kZXNjcmlwdG9ycyI6ICIxLjAuMSIsCi0gICAgICAgICJtZXRob2RzIjogIn4xLjEuMiIsCi0gICAgICAgICJvbi1maW5pc2hlZCI6ICIyLjQuMSIsCi0gICAgICAgICJwYXJzZXVybCI6ICJ+MS4zLjMiLAotICAgICAgICAicGF0aC10by1yZWdleHAiOiAiMC4xLjciLAotICAgICAgICAicHJveHktYWRkciI6ICJ+Mi4wLjciLAotICAgICAgICAicXMiOiAiNi4xMS4wIiwKLSAgICAgICAgInJhbmdlLXBhcnNlciI6ICJ+MS4yLjEiLAotICAgICAgICAic2FmZS1idWZmZXIiOiAiNS4yLjEiLAotICAgICAgICAic2VuZCI6ICIwLjE4LjAiLAotICAgICAgICAic2VydmUtc3RhdGljIjogIjEuMTUuMCIsCi0gICAgICAgICJzZXRwcm90b3R5cGVvZiI6ICIxLjIuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIyLjAuMSIsCi0gICAgICAgICJ0eXBlLWlzIjogIn4xLjYuMTgiLAotICAgICAgICAidXRpbHMtbWVyZ2UiOiAiMS4wLjEiLAotICAgICAgICAidmFyeSI6ICJ+MS4xLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwcmVzcy9ub2RlX21vZHVsZXMvYXJyYXktZmxhdHRlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS1mbGF0dGVuLy0vYXJyYXktZmxhdHRlbi0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUENWQVFzd1dlbXU2VWR4c0RGRlgvK2dWZVlxS0FvZDNEM1VWbTkxakh3eW5ndU93QXZZUGh4OG5ObE0rK05xUmNLNkN4eHBVYWZqbWhJZEtpSGlicWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwcmVzcy9ub2RlX21vZHVsZXMvZGVidWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjYuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXMiOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cHJlc3Mvbm9kZV9tb2R1bGVzL21zIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwcDYwUDZJVUpEVHVPcS81WjhjZHNrekp1amZ3cWZPVGtyd0l3ajdJUklTcG5rSm5UNlN5SjRQQ1BuR01vRmpDOWRkaGFsNUtWSVl0QXQ5N2l4MDVBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LWRlZXAtZXF1YWwvLS9mYXN0LWRlZXAtZXF1YWwtMy4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYzcVE5b1F5OWoyQWhCZS9IOVZDOTF3TG1LQkNDVS9nRE9uS05BWUc1aHN3TzdCTEtqMDlIYzVIWU56OWNHSSsreGxwRENJZ0RhaXRWczAzQVRSODRRPT0iCi0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1nbG9iLy0vZmFzdC1nbG9iLTMuMi4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRFZqNENRSVlZb3cwQmxhZWx3SzFwSGw1bjVjUlNKZk02MFVBMHpLODkxc1ZJbm9QcmkyRWtqNytlMUNUMy8zcXhYZW5wSStuQkJtUUFjSlBKZ2FqNHc9PSIsCisgICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1nbG9iLy0vZmFzdC1nbG9iLTMuMy4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03TXB0TDhVMGNxY0Zkekl6d09USG9pbFg5eDVCck5xeWU3Wi9MdUM3a0NNUmlvMUVNU3lxUkszQkVBVUQ3c1hScTRpVDRBelRWdVpkaGdRMlRDdllMZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgIkBub2RlbGliL2ZzLnN0YXQiOiAiXjIuMC4yIiwKICAgICAgICAgIkBub2RlbGliL2ZzLndhbGsiOiAiXjEuMi4zIiwKICAgICAgICAgImdsb2ItcGFyZW50IjogIl41LjEuMiIsCiAgICAgICAgICJtZXJnZTIiOiAiXjEuMy4wIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IgorICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjgiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49OC42LjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtZ2xvYi9ub2RlX21vZHVsZXMvZ2xvYi1wYXJlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi1wYXJlbnQvLS9nbG9iLXBhcmVudC01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQU9JZ1NRQ2VwaUpZd1AzQVJuR3grNVZuVHUySEJZZHpiR1A0NWVMdzF2cjN6QjN2WkxleWVkMXNDOWhuYmNPYzkvU3JNeU01UlBRcmtHejRhUzlab3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5Ly0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnktMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxoZC93RitMazk4SFpvVEN0bFZyYUh0Zmg1WFlpaklqYWxYY2s3c2FVdHVhblNEeUxNeG5IaFNYRURKcUh4RDdtc1I4RDB1Q21xbGt3akNWOHh2d0h3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtbGV2ZW5zaHRlaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1sZXZlbnNodGVpbi8tL2Zhc3QtbGV2ZW5zaHRlaW4tMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURDWHU2SWZocWNrczdUWktZM0h4cDN5NnFwaFk1U0pabXJXTURyS2NFUlNPWFdRZE1oVTlJZy9QWXJ6eXcvdWw5ak9JeWgwTjRNMHRiQzVob2RnOGR3PT0iCi0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2Zhc3RxIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0cS8tL2Zhc3RxLTEuMTUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0Jyb2NVMkxDWFhhK2xXQnQ4Um9JUkQ4OUZpOE9kQUJPRGEva0VueWV5alM1YVpPNS9HTnZJNXNFSU5BRHFQL2g4TTI5VUhUSFViNTNzVXU1SWhxZHc9PSIsCisgICAgICAidmVyc2lvbiI6ICIxLjE5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3RxLy0vZmFzdHEtMS4xOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03U0ZTUkNOakJRSVpIL3haUjNpeTVpUVlSOGFHQkUwaDNWRzYvY3dsYnJwZGNpTllCTW90UWF2OGMxWEkzSGpISCtOaWtVcFA1M25QZGxaU2RXbUZ6QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgInJldXNpZnkiOiAiXjEuMC40IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mYXllLXdlYnNvY2tldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmF5ZS13ZWJzb2NrZXQvLS9mYXllLXdlYnNvY2tldC0wLjExLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN6YkNsd2xYQXVpUlFBbFV5ZnFQZ3ZQb05LVGNrVFBHZndaVjRaZEFoVmNQMmxoOUtVeEpnMmI1R2tFN1hiaktRM1lKblE5ejZEOW50TEFsQit0UDhnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndlYnNvY2tldC1kcml2ZXIiOiAiPj0wLjUuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmItd2F0Y2htYW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmItd2F0Y2htYW4vLS9mYi13YXRjaG1hbi0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDUxNjFCcWJ1Q2FTbkI4aklielFIT2xwZ3NQbUs1ckpWRGZES085MUF4czVOQzF1dTNIUlFtNnd0OWNkOS8rR3RRUUlPNTNKZEdYWG95RHBUQXNnWUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnNlciI6ICIyLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmlsZS1lbnRyeS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlLWVudHJ5LWNhY2hlLy0vZmlsZS1lbnRyeS1jYWNoZS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0dwcy9YV3ltYkxrMlFMWUs0TnpwTU9yWWpNaGRJeFh1SXZ5MlFCc0xFNmxqdW9kS3Zka1dzL2NweUpKM0NWSVZwSDBPaTFIdmcxb3ZiTXpMZEZCQmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmxhdC1jYWNoZSI6ICJeMy4wLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMi4wIHx8ID49MTIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9maWxlLWxvYWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlLWxvYWRlci8tL2ZpbGUtbG9hZGVyLTYuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xbzNnbHF5VGE2MVl0ZzR1NzNHdWx0akhHamRSeWlnM3RHNmxQdHlYL2pPRUp2SGlmOXVCMC9PQ0kyS2lmNmN0RjNjYVFUVzJHNWd5bTIxb0FzSTRwdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2FkZXItdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS93ZWJwYWNrIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2VicGFjayI6ICJeNC4wLjAgfHwgXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9maWxlbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlbGlzdC8tL2ZpbGVsaXN0LTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13MWNFdWYzUytEckxDUUw3RVQ2a3orZ21sSmRicTlKN3lYQ1NqSy9PWkNQQStxRU4xV3lGNFpBZjBZWUphNC9zaEhKcmEydC9kL3I4U1Y0SmkreCs4UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW5pbWF0Y2giOiAiXjUuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9maWxlbGlzdC9ub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWG5BSXZROGVNK2tDNmFVTHg2d3VRaXdWc256c2k5ZDNXeHpWM0ZwV1RHQTE5RjYyMWt3ZGJzQWNGS1hnS1VIWldzeSttWTZpTDFzSFR4V0VGQ3l0REE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9maWxlbGlzdC9ub2RlX21vZHVsZXMvbWluaW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC01LjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbEt3Vi8xYnJwRzZtQlVGSHRiN05VbXRBQkNiMldaWm1tMndOaU9BNWhBYjhWZENTNEIzZHRNV3l2Y29WaWNjd0FXL0NPRVJqWEx0MHpQMXpYVU4yNmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvZmlsZW5hbWUtcmVzZXJ2ZWQtcmVnZXgiOiB7CiAgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZW5hbWUtcmVzZXJ2ZWQtcmVnZXgvLS9maWxlbmFtZS1yZXNlcnZlZC1yZWdleC0yLjAuMC50Z3oiLApAQCAtODYyNywxOCArMjIzOCwxMSBAQAogICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbGVzaXplIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGVzaXplLy0vZmlsZXNpemUtOC4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBqbUMrYmtJRjhYSTdmV2FIOEt4SGNaTDNEUHliczFyb1NLUDRyS0R2eTIwdEFXd0lPYkU0K0pJc2VHMmJ5ZkdLaHVkNVpuTTRZU0dLQno3U2gwbmRRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNC4wIgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9maWxsLXJhbmdlIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGwtcmFuZ2UvLS9maWxsLXJhbmdlLTcuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xT285RitkTVVtQzJMY2I0QmJWdm5LSnhUUGpDbStSUnBlNGdEdUdyemtMN21FVmwvZGpZU3UyT2RRMlBhMzAyTjRvcWtTZzlpcjZqYUxXSjJVU1ZwUT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxsLXJhbmdlLy0vZmlsbC1yYW5nZS03LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXNHcGUzV0hMSzhaWWk0dFdEZzJKeTNlYlJ6MnJYb3dEeG5sZDRia1FCMDBjYy8xWnc5QVduQzBpOXp0REppdGl2dFF2YUk5S2FMeUtyYytoQlcweWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJ0by1yZWdleC1yYW5nZSI6ICJeNS4wLjEiCiAgICAgICB9LApAQCAtODY0Niw0MCArMjI1MCwxMSBAQAogICAgICAgICAibm9kZSI6ICI+PTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmFsaGFuZGxlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5hbGhhbmRsZXIvLS9maW5hbGhhbmRsZXItMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV1WGNVVmZ0bFFNRm5XQzlxdS9zdmtXdjNHVGQyUGZVaEsvM1BMa1lOQWU3RmJxSk10MzUxNUhheEU2ZVJMNzRHZHNyaWl3dWppYXdkYUIxQnBFSVNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogIjIuNi45IiwKLSAgICAgICAgImVuY29kZXVybCI6ICJ+MS4wLjIiLAotICAgICAgICAiZXNjYXBlLWh0bWwiOiAifjEuMC4zIiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIjIuNC4xIiwKLSAgICAgICAgInBhcnNldXJsIjogIn4xLjMuMyIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIyLjAuMSIsCi0gICAgICAgICJ1bnBpcGUiOiAifjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmFsaGFuZGxlci9ub2RlX21vZHVsZXMvZGVidWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjYuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXMiOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmFsaGFuZGxlci9ub2RlX21vZHVsZXMvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHBwNjBQNklVSkRUdU9xLzVaOGNkc2t6SnVqZndxZk9Ua3J3SXdqN0lSSVNwbmtKblQ2U3lKNFBDUG5HTW9GakM5ZGRoYWw1S1ZJWXRBdDk3aXgwNUE9PSIKLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvZmluZC1jYWNoZS1kaXIiOiB7CiAgICAgICAidmVyc2lvbiI6ICIzLjMuMiIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC1jYWNoZS1kaXIvLS9maW5kLWNhY2hlLWRpci0zLjMuMi50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1haVjVlbUZFanJyaWRJZ0VEMTFPb1VLTHhpWWpBY3FvdC9OSmRBa09obEordkd6d2hPQWZjRzVPWDFqUCtTMFBjakVuOGJkTUp2K2cyandRM09uaWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJjb21tb25kaXIiOiAiXjEuMC4xIiwKICAgICAgICAgIm1ha2UtZGlyIjogIl4zLjAuMiIsCkBAIC04Njk2LDYgKzIyNzEsNyBAQAogICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAvLS9maW5kLXVwLTQuMS4wLnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QcE93QWRRL1lsWFEydmo4YTNoOElpcER1WVJpM3djZVZRUUdZV3hOSU5jY3E0MEFudzdCbHNFWENNYnQxWnQrT0xBNkZxOXN1SXBJV0QwT3NuSVNsdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgImxvY2F0ZS1wYXRoIjogIl41LjAuMCIsCiAgICAgICAgICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiCkBAIC04NzA0LDIxNyArMjI4MCwxMCBAQAogICAgICAgICAibm9kZSI6ICI+PTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZsYXQtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmxhdC1jYWNoZS8tL2ZsYXQtY2FjaGUtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRtOXM1UHc3SmMwR3ZNWWJzaE42emNoQ0E5UmdRbHp6RVpYM3Z5bFI5SXFGZlM4WGNpYmxVWE9LZlc2U2l1SjBlMTNlRFlab1pWNXdkcmV2N1AzTndnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZsYXR0ZWQiOiAiXjMuMS4wIiwKLSAgICAgICAgInJpbXJhZiI6ICJeMy4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMi4wIHx8ID49MTIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mbGF0dGVkIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZsYXR0ZWQvLS9mbGF0dGVkLTMuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01bnFEU3hsOG5uNUJTTnh5UjNuNEk2ZURtYm9sSTZXVCtRcVI1NDdSd3hRYXBnalFCbXRrdGRQK0hUQmIvYS96THNiekVSVE9OeVVCNXBlZmg1VHRqUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb2xsb3ctcmVkaXJlY3RzLy0vZm9sbG93LXJlZGlyZWN0cy0xLjE1LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZRTEczM28wNEthUTh1WWkydFZOYmRyV3AxUVd4Tk5lYStubUlCNEVWTTI4djBobVAxN3o3YUcxK3dBa056VnE0S2VYVHEzMjIxeWU1cVRKUDkxSndBPT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9SdWJlblZlcmJvcmdoIgotICAgICAgICB9Ci0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mb3ItZWFjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3ItZWFjaC8tL2Zvci1lYWNoLTAuMy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qcVlmTHA3bW85dkl5UWY4eWtXMnY3QSsyTjRRamVDZUk1K0R6OVhyYWlPMWlnbjgxd2ppSDdGYjl2U09XdlFmTnRtU2E0SDJSb1FUcnJYaXZkVVptdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1jYWxsYWJsZSI6ICJeMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3JrLXRzLWNoZWNrZXItd2VicGFjay1wbHVnaW4vLS9mb3JrLXRzLWNoZWNrZXItd2VicGFjay1wbHVnaW4tNi41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNiSC9sOWlrbU1XeWNkNXB1SEpLVGtaSktkZEY0aVJMeVczRGVaMDhIVEk3Tkd5TFMzOE1YZC9LR2dlV3VtUU83WU5RYlcydS9OdFBUMllvd2JQYUdRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjguMyIsCi0gICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC41IiwKLSAgICAgICAgImNoYWxrIjogIl40LjEuMCIsCi0gICAgICAgICJjaG9raWRhciI6ICJeMy40LjIiLAotICAgICAgICAiY29zbWljb25maWciOiAiXjYuMC4wIiwKLSAgICAgICAgImRlZXBtZXJnZSI6ICJeNC4yLjIiLAotICAgICAgICAiZnMtZXh0cmEiOiAiXjkuMC4wIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS42IiwKLSAgICAgICAgIm1lbWZzIjogIl4zLjEuMiIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC40IiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICIyLjcuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy4yIiwKLSAgICAgICAgInRhcGFibGUiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIiwKLSAgICAgICAgInlhcm4iOiAiPj0xLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICI+PSA2IiwKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiPj0gMi43IiwKLSAgICAgICAgInZ1ZS10ZW1wbGF0ZS1jb21waWxlciI6ICIqIiwKLSAgICAgICAgIndlYnBhY2siOiAiPj0gNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJlc2xpbnQiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidnVlLXRlbXBsYXRlLWNvbXBpbGVyIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mb3JrLXRzLWNoZWNrZXItd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL2Nvc21pY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvc21pY29uZmlnLy0vY29zbWljb25maWctNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhiM1pMNitMOGI5SkxMQ3gzWmRvWnk0KzJFQ3BoQ01vMlB3cWdQMXRsZlZxNk02WVJleXpCSnR2V1d0YkRTcE5yOWhuOTZwa0NpWnFVY0ZFYys1NFFnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9wYXJzZS1qc29uIjogIl40LjAuMCIsCi0gICAgICAgICJpbXBvcnQtZnJlc2giOiAiXjMuMS4wIiwKLSAgICAgICAgInBhcnNlLWpzb24iOiAiXjUuMC4wIiwKLSAgICAgICAgInBhdGgtdHlwZSI6ICJeNC4wLjAiLAotICAgICAgICAieWFtbCI6ICJeMS43LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZm9yay10cy1jaGVja2VyLXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9mcy1leHRyYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTkuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oY2czWm1lcFMzMC83QlNGcVJ2b28zRE9NUXU3SWpxeE81bkNEdCt6TTlYV2piMzNXZzd6aU5UK1F2cWJ1YzMrZ1dwek8wMkp1YlZ5azJHNFp2bzFPUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhdC1sZWFzdC1ub2RlIjogIl4xLjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjAiLAotICAgICAgICAianNvbmZpbGUiOiAiXjYuMC4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi43LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy0yLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGlsS0ZJNlFRRjVueERaTEZuMmRNanZjNGhqZy9Xa2c3ckhkM2pLNi9BNGExSGw5VkZkUVd2Z0IxVU1Hb1U5NHBhZDFQLzhON2ZNY0VuTG5TaWp1OEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuNCIsCi0gICAgICAgICJhanYiOiAiXjYuMTIuMiIsCi0gICAgICAgICJhanYta2V5d29yZHMiOiAiXjMuNC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4LjkuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy41LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU29mdHVUUk92L2NSakN6ZS9zY2pHeWlEdGNVeXh3MXJnWVFTWlk3WFRtdFI1aFgrZG03NmlEYlRIOFRrTFBIQ1FtbGJRVlNTYk5aQ1BNMmhiMGtublE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvdGFwYWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90YXBhYmxlLy0vdGFwYWJsZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNFdLL2JZWm1qOHhMcitIVUNPREhHRjFaRnpzWWZmYXNMVWdFaU1CWTRmZ3RsdGRPNkI0V0p0bFNiUGFEVExwWVRjR1Z3TTJxTG5GVElDRWNOeHMza0E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mb3JrLXRzLWNoZWNrZXItd2VicGFjay1wbHVnaW4vbm9kZV9tb2R1bGVzL3lhbGxpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zvcm0tZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3JtLWRhdGEvLS9mb3JtLWRhdGEtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJIa0JLdExXVVZ3ZDdTcVJJdkNaTUV2QU1vR1VwMFhVK3NlUWlaZWpqMENPejNSSTNoV1A0c0N2M2daV1dMakpUZDdyR3djc0Y1ZUtaR2lpMHIvaGJnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFzeW5ja2l0IjogIl4wLjQuMCIsCi0gICAgICAgICJjb21iaW5lZC1zdHJlYW0iOiAiXjEuMC44IiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAiXjIuMS4xMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZm9yd2FyZGVkIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcndhcmRlZC8tL2ZvcndhcmRlZC0wLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnVSRzBmcEJ0UkhTVENPQVNlNmhEMjU4dEV1YkZvUkxiNFpOQTZOeE1WSE53MmdPY3dIbzl3eWFibHpNek9BNXo5eEE5TDFLTmprL050Nk1UOWFZb3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mcmFjdGlvbi5qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcmFjdGlvbi5qcy8tL2ZyYWN0aW9uLmpzLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NaEx1SysyZ1VjblplOFpIbGFhSU5uUUxsMHhSSUdSZmNHazJ5bDh4b1FBZkhyU3NMM3JZdTZGQ21CZGtkYmhjOUVQbHd5R0hld2FSc3Z3Uk1KdEFsQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9pbmZ1c2lvbiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZnJlc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJlc2gvLS9mcmVzaC0wLjUuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItekoybVFZTTE4ckVGT3VkZVY0R1NoVEdJUTdSYnpBN296YlU5SS9YQnBtN2txZ015d2dteWxNd1hIeFpKbWtWb1lrbmE5ZDJwVlhWWFBkWVRQOWVqOFE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9mcy1leHRyYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0xMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1HSUU0SE92UUNlVUN6bWxIczB2WHBpaDR5c3o0d2c5cWlTQXU2Y2Q0MmxWd1BiVE0xVGpWN1J1c295UXFNbWsvOTVnZFFaWDcydStZVytjM2VFcEZRPT0iLAorICAgICAgInZlcnNpb24iOiAiMTEuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTExLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWjRYYUNMNmRVREhmUC9qVDI1akpLTW10eHZ1d2JrckQxdk5TTUZsbzlsTkxZMmM1RkhZU1FnSFBSWlVqQUIyNlRwREVvVzlIQ09ncGxyZGJhUFYvZXc9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjAiLApAQCAtODkyNSwyMCArMjI5NCwxMSBAQAogICAgICAgICAibm9kZSI6ICI+PTE0LjE0IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mcy1tb25rZXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtbW9ua2V5Ly0vZnMtbW9ua2V5LTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JTk0vZldBeE1JQ2p0dG5EMERYMXJCdmluS3NrajVHMXcrb3kvcG5tOXUvdFNsbkJyekZvbkpNY2FsS0ozMFA4UlJzUHpLY0NHN1E4bDBqeDVGaDlZUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mcy5yZWFscGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy5yZWFscGF0aC8tL2ZzLnJlYWxwYXRoLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PTzBwSDJsSzZhMGhabkFkYXU1SXR6SFBJNnBVbHZJN2pNVm54VVFSdHc0b3dGMndrOGxPU2FidEdEQ1RQNEdncmcyTWJHbldPOVg4SzF0NCtmR01Edz09IgotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9mc2V2ZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mc2V2ZW50cy8tL2ZzZXZlbnRzLTIuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14aXFNUVI0eEFlSFR1Qjl1V20rZkZSY0lPZ0tCTWlPQlArZVhpeVQ3anNnVkNxMWJrVnlndDAwb0FTb3dCN0VkdHBPSGFhUGdLdDgxMlA5YWIrRERLQT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mc2V2ZW50cy8tL2ZzZXZlbnRzLTIuMy4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01eG9EZlgrZkw3ZmFBVG5hZ21XUHBiRnR3aC9SNzdXbU1NcXFIR1M2NUMzdnZCMFlIcmdGK0IxWW1aMzQ0MXRNajVuNjNrMDIxMlhOb0p3emxoZmZRdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImhhc0luc3RhbGxTY3JpcHQiOiB0cnVlLAogICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKICAgICAgICJvcyI6IFsKQEAgLTg5NDgsMTE4ICsyMzA4LDI4IEBACiAgICAgICAgICJub2RlIjogIl44LjE2LjAgfHwgXjEwLjYuMCB8fCA+PTExLjAuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mdW5jdGlvbi1iaW5kLy0vZnVuY3Rpb24tYmluZC0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteUlvdkF6TVg0OXNGOFlsNThmU0NXSjVzdlNMdWFpYlB4WFFKRkxtQk9iVHVDcjBNZjFLaVBvcEdNOU5pRmppWUJDYmZhYTJGaDZicmVRNkFOVlRJMEE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvLS9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS0xLjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdU43bS9CelZLUW5DVUYvaVc4alllYTY3disrMnU3bTVVZ0VOYkhSdGREVmNsT1VQK0ZNUGxDTmRtazBoL3lzR3lvMnRhdk1KRURxSkFrSmRSYTF2TUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjMiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMTkuMCIsCi0gICAgICAgICJmdW5jdGlvbnMtaGF2ZS1uYW1lcyI6ICJeMS4yLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mdW5jdGlvbnMtaGF2ZS1uYW1lcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mdW5jdGlvbnMtaGF2ZS1uYW1lcy8tL2Z1bmN0aW9ucy1oYXZlLW5hbWVzLTEuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14Y2tCVVh5VElxVDk3dHEyeDJBTWIrZzE2M2I1SkZ5c1lrMHg0cXhORndiZlFrbU5ab2lSSGI2c1B6STkvUVYzM1dldXZWWUJVSWlENE56Tkl5cWFSUT09IiwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2dlbnN5bmMiOiB7CiAgICAgICAidmVyc2lvbiI6ICIxLjAuMC1iZXRhLjIiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dlbnN5bmMvLS9nZW5zeW5jLTEuMC4wLWJldGEuMi50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2hON05hc2tZdk1ETFFZNTVnblczTlErbWVzRUFlcFRxbGcrVkViajd6enFFTUJWTmh6Y0dZWWVxRm8vVGxZejZlUWlGY3AxSGNzQ1pPK25HZ1M4emc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtY2FsbGVyLWZpbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LWNhbGxlci1maWxlLy0vZ2V0LWNhbGxlci1maWxlLTIuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EeUZQM0JNLzNZSFRRT0NVTC93ME9aSFIwbHBLZUdyeG90Y0hXY3FORWRubHRxRndYVmZoRUJROTRlSW8zNEFmUXBvMHJHa2k0Y3lJaWZ0WTA2aDJGZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI2LiogfHwgOC4qIHx8ID49IDEwLioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LWludHJpbnNpYy8tL2dldC1pbnRyaW5zaWMtMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJEY3N5ZkFCbCtnVkhFZkNPYVRyV2d5dCt0YjZNU0VHbUtxK2tJNUh3TGJJWWdqZ21NY1Y4S1E0MXVhS3oxeHhVY245dEp0Z0ZiUVVFVmNFYmQwRll3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4xIiwKLSAgICAgICAgImhhcyI6ICJeMS4wLjMiLAotICAgICAgICAiaGFzLXByb3RvIjogIl4xLjAuMSIsCi0gICAgICAgICJoYXMtc3ltYm9scyI6ICJeMS4wLjMiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LW93bi1lbnVtZXJhYmxlLXByb3BlcnR5LXN5bWJvbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LW93bi1lbnVtZXJhYmxlLXByb3BlcnR5LXN5bWJvbHMvLS9nZXQtb3duLWVudW1lcmFibGUtcHJvcGVydHktc3ltYm9scy0zLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSTBVQlYvWE96MVhrSUpIRVVETVpBYnpDVGhVL0g4RHhtU2ZtZEdjS1BuVmh1MlZmRnFyMzRqcjk3NzdJeWFUWXZ4amVkV2hxVklpbEVEc0NkUDVHNmc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LXBhY2thZ2UtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtcGFja2FnZS10eXBlLy0vZ2V0LXBhY2thZ2UtdHlwZS0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGp6dUt0WTY0R1lmV2l6TkFKMGZyOVZxdHRaa05pSzJpUzQzMEx0SUh6akJFcjZiWDhBbTJ6bTRzVzRSbzV3aldXNWNBbFJMMXFBTVRjWGJqTkFPMlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtc3RyZWFtLy0vZ2V0LXN0cmVhbS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHM2V2krMmozalFqcWk3MHc1QWxOOERGbmtTd0MrTXFteEV6ZEVBTEIycVhaWVYzWC9iMUNUZmdQTEdKTk1lQVd4ZFBmVThGTzFtczNOVWZhSENQWWc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtc3ltYm9sLWRlc2NyaXB0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1zeW1ib2wtZGVzY3JpcHRpb24vLS9nZXQtc3ltYm9sLWRlc2NyaXB0aW9uLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yRW1kSDFZdklRaVpwbHRDTmdrdWlVbnl1a3p4TS9SNk5ESlgzMUtlM0JHMU5xNWIwUzJQaFg1OVVLaTl2WnBQRFFWZHFuKzFJY2FBd256VFQ1dkNqdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvZ2gtcGFnZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2gtcGFnZXMvLS9naC1wYWdlcy02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRlhaV0pSc3ZQL2ZLMkhKR1krRGk2RlJOSHZxRkY2Z09JRUxhb3BEalhYZ2plT1lTTlVSY3VZd0VPLzZid3VxNmtvUDVMbmt2bnI1R1ZpWHp1T0I4OWc9PSIsCisgICAgICAidmVyc2lvbiI6ICI2LjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2gtcGFnZXMvLS9naC1wYWdlcy02LjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT3Q1bFU2akswRWIrc3N6RzhwY2lYZGpNWGRCSjV3T0R2Z2pSK2ltaWhUcXNVV0YySzZkSjlIU1Q1NWxncWNzOHdXY3c2bzZ3QXNVemZjWVJoSlBYYkE9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJhc3luYyI6ICJeMy4yLjQiLAotICAgICAgICAiY29tbWFuZGVyIjogIl4xMS4wLjAiLAorICAgICAgICAiY29tbWFuZGVyIjogIl4xMy4wLjAiLAogICAgICAgICAiZW1haWwtYWRkcmVzc2VzIjogIl41LjAuMCIsCiAgICAgICAgICJmaWxlbmFtaWZ5IjogIl40LjMuMCIsCiAgICAgICAgICJmaW5kLWNhY2hlLWRpciI6ICJeMy4zLjEiLAogICAgICAgICAiZnMtZXh0cmEiOiAiXjExLjEuMSIsCi0gICAgICAgICJnbG9iYnkiOiAiXjYuMS4wIgorICAgICAgICAiZ2xvYmJ5IjogIl4xMS4xLjAiCiAgICAgICB9LAogICAgICAgImJpbiI6IHsKICAgICAgICAgImdoLXBhZ2VzIjogImJpbi9naC1wYWdlcy5qcyIsCkBAIC05MDY5LDY3OTQgKzIzMzksMjMgQEAKICAgICAgICAgIm5vZGUiOiAiPj0xMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2gtcGFnZXMvbm9kZV9tb2R1bGVzL2NvbW1hbmRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTExLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOUhNbFh0dC9CTm9Zcjhvb3lqak5SZElpbE9Ua1ZKWEIrR2h4TVR0T0t3azBSNGo0bFM0TnBqdXFtUnhyb0JmbmZUU0hRSUhRQjd3cnlIaFhhck5qbVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nbG9iIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2IvLS9nbG9iLTcuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uRlIwekxwVTJZQ2FSeHdvQ0p2TDZVdkNIMkpGeUZWSXZ3VExzSWYyMUF1SGxNc2tBMWhoVGRrK0xsWUp0T2xZdDl2NmR2c3pEMkJHUnFCTCtpUUs5UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmcy5yZWFscGF0aCI6ICJeMS4wLjAiLAotICAgICAgICAiaW5mbGlnaHQiOiAiXjEuMC40IiwKLSAgICAgICAgImluaGVyaXRzIjogIjIiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMSIsCi0gICAgICAgICJvbmNlIjogIl4xLjMuMCIsCi0gICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiKiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9nbG9iLXBhcmVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YeHdJOEVPaFZRZ1dwNmlETCszYjByODZmNGQ2QVg2elNVNTVIZkI0eWRDRXVYTFhjNUZjWWVPdStubkdmdFM0VEVqdS8xMXJ0NEtKUFRNZ2JmbXY0QT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTUuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BT0lnU1FDZXBpSll3UDNBUm5HeCs1Vm5UdTJIQllkemJHUDQ1ZUx3MXZyM3pCM3ZaTGV5ZWQxc0M5aG5iY09jOS9Tck15TTVSUFFya0d6NGFTOVpvdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIgorICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjEiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYi10by1yZWdleHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi10by1yZWdleHAvLS9nbG9iLXRvLXJlZ2V4cC0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGtYMUhKWHd5TWNwcncvNVlVWmMyczdEcnBBaUhCMjEvVitFMXJIVXJWTm9ra3ZCNmJxTXpUMFZmVjYvODZaTmFidDFrMTRZT0lhVDduRHZPWDNJaXc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYmFsLW1vZHVsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFsLW1vZHVsZXMvLS9nbG9iYWwtbW9kdWxlcy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdiZm1KQnA5eDhJeHlKU2QxUCtvdFlLOHZvbm9KYWN0T29nclZmRlJJQUVZMXVraWw4UlNLRHoyWW83d2gxb2lobDUxbC9yNlc0ZXBrZUtKSHFMOEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2xvYmFsLXByZWZpeCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYmFsLXByZWZpeCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWwtcHJlZml4Ly0vZ2xvYmFsLXByZWZpeC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXdDb25KU1ZDSFZHTkQ2eDN0bU1hS2NRdndYTGhqZGttb215MlcrR29hdWk4WVBnWWdYSlpld2hnM2ZXQytEbGZxcVF1V2c4QXdxakdURDJuQVBWV2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaW5pIjogIl4xLjMuNSIsCi0gICAgICAgICJraW5kLW9mIjogIl42LjAuMiIsCi0gICAgICAgICJ3aGljaCI6ICJeMS4zLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYmFsLXByZWZpeC9ub2RlX21vZHVsZXMvd2hpY2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSHhKZFlXcTFNVElRYkozbncwY3Fzc0hvVE5VMjY3S2xyRHVHWjFXWWx4RFN0VXRLVWhPYUptaDExMi9UWm1IeHhVZnVKcVBYU09tN3REeWFzME9TSVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXNleGUiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ3aGljaCI6ICJiaW4vd2hpY2giCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMS4xMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xMS4xMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XT0JwL0VFR1VpSXNKU3A3d2N2L3k2TU8rbFY5VW9uY1dxeHVGZm04ZUJ3eldOZ3lmQmQ2R3orSWVLUTlqQ215aG9IOTlnMTVNM1QrUWFWSEZqaXpWQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2JhbHRoaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFsdGhpcy8tL2dsb2JhbHRoaXMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNGZEk1THlCaU5USGpSZDdjR1BXYXBpSFdNT1hLeXVCTlgvY1dKM05menJaUVZhOEdJLzhjb2ZDbDc0QU9WcXE5VzVrTm1ndVRJekovMXMyZ3lJOXdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICAgICJub2RlIjogIj49IDYiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL2dsb2JieSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYnkvLS9nbG9iYnktNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtWYkZ2MlRRdGJ6Q294QW5mRDZKY0haVFlDenlsaUVhYWVNL2dIOHFRZGtLcjVzME9QOXNjRWd2ZGNuZ3lrN0FWZFk2WVZXL1RKSGQrbFEvRGYzRGF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJyYXktdW5pb24iOiAiXjEuMC4xIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMC4zIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMC4xIiwKLSAgICAgICAgInBpZnkiOiAiXjIuMC4wIiwKLSAgICAgICAgInBpbmtpZS1wcm9taXNlIjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dvcGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ29wZC8tL2dvcGQtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWQ2NWJObElhZHh2cGIvQTJhYlZkbHFLcVY1NjNqdVJuWjFXdGs2czFzSVI4dU5zWFI3MHhxSXpWcXhWZjFlVHFEdW53VDJNa2N6RWVhZXpDS1RaaHdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4zIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dyYWNlZnVsLWZzIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZzLTQuMi4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmJKNS9qbUZjTk5DY0RWNW85ZVRuQkxKL0hzeldWMFA3M2JjK0ZmNG5TL3JKaitZYVM2SUd5aU9MMFZvQllYK2wxV3JsM2s2M2gvS3JIK25oSjBYdlE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ3JhcGhlbWUtc3BsaXR0ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ3JhcGhlbWUtc3BsaXR0ZXIvLS9ncmFwaGVtZS1zcGxpdHRlci0xLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnpoNTBEVzlrVFBNMDBUOHk0bzh2UWc4OURpOW9MSlZMVy9LYU9HSVhKV1AvaXFDTjZXS1lrYk5PRjA0dkZMSmh3Y3BZVWg5eWRoLys1dnBPcVY0WVE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ3JhcGhlbWVyIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYXBoZW1lci8tL2dyYXBoZW1lci0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXRLd29PNmt4Q0w5V081eGlwaUhUWmxTekJtN1dMVDYyN1RxQy91VlJkMEhLbXE4Tlh5ZWJuTll4RG9CaTd3dDhlVFdyVXJLWENPVmFGcTl4MWtnYWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ3JlbWxpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ3JlbWxpbnQvLS9ncmVtbGludC0zLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItajBQTWtGV09OUEVlbWlDZzcxSzl1ZnVncGZDK1BwU0VSbzB3QzJMWkUzV3doOHdGM0xjNFd4bXN6bWN0U0JyVnByYVZGalVJVTFkMDlKSUZqejVsRXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ3ppcC1zaXplIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2d6aXAtc2l6ZS8tL2d6aXAtc2l6ZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXg3WllvbWY2anFQVFE0K1hDcFVHeVhLSGs1V3dlUytlMDVNQk80L3kzV0o1UmttUFhOS3ZYK2J4MWJlaFZJTFZ3cjZKU1F2WkFrdTAyMUNIUFhHM1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZHVwbGV4ZXIiOiAiXjAuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhbmRsZS10aGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYW5kbGUtdGhpbmcvLS9oYW5kbGUtdGhpbmctMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlRbjR5QnhlbHhvaDJPdzYyblArS2Eva01uT1hSaThCWG5SYVV3ZXpMTmhxZWxuTjQ5eEt6NEYvZFBQOE9ZTHhMeHE2SkR0WmIyaTlYem5VUWJOUFRnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcm1vbnktcmVmbGVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXJtb255LXJlZmxlY3QvLS9oYXJtb255LXJlZmxlY3QtMS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhJcC9uMzhSOWtRakRFemlYeURUdVczdnZveHh5eGp4RnpYTHJCcjE4dUI0N0duU3QrRzlEMjlmcXJwTTVaa3NwTWNQSUN1ZDNYc0JKUTRZMlVSZzhnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMvLS9oYXMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYyZHZPMFZVNk9lajdSa1dKR3JlaGpiek1BakZwNS9WS1BwNXRUcFdJVjRKSEhaSzEvQnhiRlJ0Zi9zaUEyU1dUZTA5Y2FEbVZ0WVl6V0VJYkJTNHp3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLWJpZ2ludHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWJpZ2ludHMvLS9oYXMtYmlnaW50cy0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFN2Q0t0QnI5bGtGMEV4MGFRaVA5TitPcFY0emkyci9OZWU1VmtSRGJhcXYzNVJMWU16YndRZkZTWlpIMGtSK1JkNjMwMlVKWjJwL2JKQ0VvUjNWb1E9PSIsCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9oYXMtZmxhZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxhZy8tL2hhcy1mbGFnLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FeWtKVC9RMUtqVFdjdHBwZ0lBZ2ZTTzB0S1Z1WlVqaGdNcjE3a3FUdW1NbDZBZnYzRUlTbGVVN3FaVXpvWERGVEFIVERDNE5Pb0cvWnhVM0V2bE1QUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcy1wcm9wZXJ0eS1kZXNjcmlwdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvLS9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTYyRFZMWkdvaUVCREhReXFHNHc5eEN1WjdlSkV3Tm1KUld3MlZZODRPZWRiN1dGY0EyN2ZpRVZlOG9VUXg5aEFVSjRla3VycXV1Y1RHd3N5TzFYR2RRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcy1wcm90byI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvdG8vLS9oYXMtcHJvdG8tMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdxRStpUCtPK2JnRjljbEU1K1VvQkZ6RTY1bWxCaVZqM3RLQ3JsTlEwT2d3bTBCanBUL2dLNFNsTFlETXliRGg1STNUQ1RLblBQYTBvTUc3SkRZcmhnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9oYXMtc3ltYm9scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtc3ltYm9scy8tL2hhcy1zeW1ib2xzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM0xDdUY2TWdETndUREtrZFlHRWloWWp0NXBSUGJFZzQ2cnRsbW5TUGxVYmdtQjhMT0lyS0piWVlGQlNiblBhSmV4TUt0aVBPOGhtZVJqUnoyVGQrQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy10b3N0cmluZ3RhZy8tL2hhcy10b3N0cmluZ3RhZy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0ZqY1NOaG5sR1Yxa3lvR2s3T1hLU2F3SDVKT2IvTHpVYzV3OUIwMmhPVE8wZGZGUmpiSFFLdmcxZDZjZjNIYmVVbXRVOVZiYlYzcXpaMlRlaDk3V1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGUvLS9oZS0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRi8xRG5VR1BvcE9SWmkwbmkrQ3ZyQ2dIUTVGeUVBSFJMU0FwdVlXTW1yYlN3b04yTW4vN2srR2wzOGdKblI3eXlEWms2V0xYd2lHb2QxSk9XTkRLR3c9PSIsCi0gICAgICAiYmluIjogewotICAgICAgICAiaGUiOiAiYmluL2hlIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy8tL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLTMuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vZ0dpdnhpOEpQS1dObS9XMGpTbXpjTVBwZnBQTGMzZFkvNkd4aFgyaFE5aUdqM2FEZmtsVjRFVDdOaktwU2luTHBKNXZhZmE5aWlHSUVaZzEwU2ZCdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlYWN0LWlzIjogIl4xNi43LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL25vZGVfbW9kdWxlcy9yZWFjdC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE2LjEzLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0LWlzLy0vcmVhY3QtaXMtMTYuMTMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMjRlNnluRTJIK09LdDRrcXNPdk5kOGtCcFY2NXpveGJBNEJWc0VPQjNBUlZXUWtpL0RIemFVb0M1S3VPTi9CaWNjRGFDQ1RaQnVPY2Zaczcwa1I4YlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ob29weSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob29weS8tL2hvb3B5LTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IUmNzKzJtcjUyVzBLK3g4UnpjTHp1UFBtVklLTVN2OTdSR0h5MEVhOXkvbXBjYUsreFRyaklDQTA0S0FIaTRHUnp4bGlOcU5KRUZZV0hnaHkzclNmUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHBhY2suanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHBhY2suanMvLS9ocGFjay5qcy0yLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItekp4VmVoVWRNR0lLc1JhTnQ3YXBPMkdxcDBCZHFXNXlhaUdIWFhtYnB2eGdCWVZabkFxbCtCSmI0Uk81YWQyTWdwYlpLbjVHNm5NbmVnckgxRmNOWVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaW5oZXJpdHMiOiAiXjIuMC4xIiwKLSAgICAgICAgIm9idWYiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICJeMi4wLjEiLAotICAgICAgICAid2J1ZiI6ICJeMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hwYWNrLmpzL25vZGVfbW9kdWxlcy9pc2FycmF5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WTGdoSVdOTTZFTFF6bzd6d21jZzBObVRWeVdLWWp2SWVNODN5anAwd1JEVG1VbnJNNjc4ZlFiY0tCbzZuMkNKRUYwc3pvRy8veXRnK1RLbGE4OUFMUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ocGFjay5qcy9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS0yLjMuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOHAwQVVrNFhPRGdJZXdTaTBsOEVwanMrRVZuV2lLN05vRElFR1UwSGhFNytaeVk4RDFJTVk3b2R1NWxSckZYR2c3MUwxNUtHOFFyUG11bTQ1UlR0ZEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29yZS11dGlsLWlzIjogIn4xLjAuMCIsCi0gICAgICAgICJpbmhlcml0cyI6ICJ+Mi4wLjMiLAotICAgICAgICAiaXNhcnJheSI6ICJ+MS4wLjAiLAotICAgICAgICAicHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOiAifjIuMC4wIiwKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjEuMSIsCi0gICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICJ+MS4xLjEiLAotICAgICAgICAidXRpbC1kZXByZWNhdGUiOiAifjEuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ocGFjay5qcy9ub2RlX21vZHVsZXMvc2FmZS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2QyVVpCSkRrWGxZN0diSnhmc0U4L252S2tVRVUxRzM4YzFzaU42UVA2YTlQVDlNbUhCOEducHNjU21NSlNvRjhMT0lydDh1ZC93UHRvanlzNEc2K2c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHBhY2suanMvbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZ19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW4vU2hudkRpNkZIYmJWZnZpcm8rV29qaUZ6ditzOE1QTUhCY3pWZVBmVXBESkx3b0xUMGh0MWw0WXdCQ2JpOHBKQXZlRUVkbmtIeVB5VFAvbXpSZndnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHRtbC1lbmNvZGluZy1zbmlmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0bWwtZW5jb2Rpbmctc25pZmZlci8tL2h0bWwtZW5jb2Rpbmctc25pZmZlci0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDVKYk9NQklSL1RWWmt1YkhUK095VDI3MDVRdm9nVVc0SUJuNm5IZDc1Nk93aWVTRjlhRFlGajRkdjZISEVWR1liSGFMRVRhM1dnZ1pZV1dNeXkzWlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2hhdHdnLWVuY29kaW5nIjogIl4xLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHRtbC1lbnRpdGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odG1sLWVudGl0aWVzLy0vaHRtbC1lbnRpdGllcy0yLjMuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOW8wK2RjcEl3Mi9IeGtOdVlLeFNKVUYvTU1SWlFFQ0s0R25GK29RT21KODN5Q1ZIVFdnQ0g1YU9YeEs1Ym96TlJtTTh3dGdyeWpIRDN1bG9QQkRFR3c9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbWRldmlscyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9wYXRyZW9uLmNvbS9tZGV2aWxzIgotICAgICAgICB9Ci0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h0bWwtZXNjYXBlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odG1sLWVzY2FwZXIvLS9odG1sLWVzY2FwZXItMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUgyaU10ZDBJNE10NWVZaWFwUmRJRGpwK1h6ZWxYUTB0RkU0SlM3WUZ3RmV2WFhNbU9wOW15TnJVdkNnMEQ2d3M4aXFrUlBCZktIZ2J3aWcxU21sTGZnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h0bWwtbWluaWZpZXItdGVyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0bWwtbWluaWZpZXItdGVyc2VyLy0vaHRtbC1taW5pZmllci10ZXJzZXItNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlYeFNsSkJaVFA3UlMzdFduUXc3NG9vS2E2TDliOWk5UVlYWTIxZVVFdmhaM3U5WExmdjZPbkZzUXE2UnhraEh5Z3NhVU12WXNaUlY1clUvT1ZOWnh3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbWVsLWNhc2UiOiAiXjQuMS4yIiwKLSAgICAgICAgImNsZWFuLWNzcyI6ICJeNS4yLjIiLAotICAgICAgICAiY29tbWFuZGVyIjogIl44LjMuMCIsCi0gICAgICAgICJoZSI6ICJeMS4yLjAiLAotICAgICAgICAicGFyYW0tY2FzZSI6ICJeMy4wLjQiLAotICAgICAgICAicmVsYXRldXJsIjogIl4wLjIuNyIsCi0gICAgICAgICJ0ZXJzZXIiOiAiXjUuMTAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiaHRtbC1taW5pZmllci10ZXJzZXIiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9odG1sLW1pbmlmaWVyLXRlcnNlci9ub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiOC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci04LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT2tUTDl1bWYrSGUyRFprVXE4ZjhKOW9mN3lMNlJKS0kyNGRWSVRCbU5mWkJtcmk5ellaUXJLa3VYaUtoeWZQU3U4dFVoblZCQjFpS1hldnZubFI0V3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h0bWwtd2VicGFjay1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC13ZWJwYWNrLXBsdWdpbi8tL2h0bWwtd2VicGFjay1wbHVnaW4tNS41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZZckRLVHVxYVAvVHF1Rkg3aDRzcllXc1p4K3g2azYrRmJzVG0wemlDd0dIRFA3OFVucjFyOUYvSDQrc0dtTWJYMDhHUWNKK0s2NHg1NWIrN1ZNL2pnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9odG1sLW1pbmlmaWVyLXRlcnNlciI6ICJeNi4wLjAiLAotICAgICAgICAiaHRtbC1taW5pZmllci10ZXJzZXIiOiAiXjYuMC4yIiwKLSAgICAgICAgImxvZGFzaCI6ICJeNC4xNy4yMSIsCi0gICAgICAgICJwcmV0dHktZXJyb3IiOiAiXjQuMC4wIiwKLSAgICAgICAgInRhcGFibGUiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9odG1sLXdlYnBhY2stcGx1Z2luIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2VicGFjayI6ICJeNS4yMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9odG1scGFyc2VyMiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odG1scGFyc2VyMi8tL2h0bWxwYXJzZXIyLTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1neXlQazZyZ29uTEZFREdvZVJnUU5hRVV2ZEo0a3RUbW1VaC9oMnQ3cytNOG9QcElQeGdOQUNXYSs2RVNSNTdrWHN0d3FQaUN1dDBWOE5ScGN3Z1U3QT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL2ZiNTUvaHRtbHBhcnNlcjI/c3BvbnNvcj0xIiwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmI1NSIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkb21lbGVtZW50dHlwZSI6ICJeMi4wLjEiLAotICAgICAgICAiZG9taGFuZGxlciI6ICJeNC4wLjAiLAotICAgICAgICAiZG9tdXRpbHMiOiAiXjIuNS4yIiwKLSAgICAgICAgImVudGl0aWVzIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1kZWNlaXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLWRlY2VpdmVyLy0vaHR0cC1kZWNlaXZlci0xLjIuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTG1wT0d4VGZicGd0R1Z4SnJqNWs3YXNYSENnTlpwNW5MZnAraFdjOFFRUnF0YjdmVXk2a1JZM0JPMWg5ZGRGNnlJUFlVQVJneEdPd0I0MkRueElhTnc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1lcnJvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cC1lcnJvcnMvLS9odHRwLWVycm9ycy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRnR3ckcvZXVCemFFalllUnFPZ2x5N0cwcXZpaVhvSldudkVIMloxcGxCZFhnYnlqdjM0cEhUU2I5em9lSE15RHkzMytEV3k1V3Q5V28rVFVSdE9ZU1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVwZCI6ICIyLjAuMCIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyLjAuNCIsCi0gICAgICAgICJzZXRwcm90b3R5cGVvZiI6ICIxLjIuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIyLjAuMSIsCi0gICAgICAgICJ0b2lkZW50aWZpZXIiOiAiMS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1wYXJzZXItanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cC1wYXJzZXItanMvLS9odHRwLXBhcnNlci1qcy0wLjUuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU0dlQlg1NEY5NFdndTVSSDNYNWpzRHRmNGVIeVJvZ1dYMVhHVDNiNEh1VzN0UVBNNEFhQnpvVWppLzRBQUpOWENFT1daNU8wRGdabUp3MTk0N2dENVE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1wcm94eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cC1wcm94eS8tL2h0dHAtcHJveHktMS4xOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03bXovNzIxQWJuSndJVmJuYVN2MUN6M0FtMFpMVC9VQndrQzkyVmx4aFh2L2svQkJRZk0yZlhFbFFOQzI3QlZHcjB1d1VwcGxZUFFNOUxuYUJNUjVOUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJldmVudGVtaXR0ZXIzIjogIl40LjAuMCIsCi0gICAgICAgICJmb2xsb3ctcmVkaXJlY3RzIjogIl4xLjAuMCIsCi0gICAgICAgICJyZXF1aXJlcy1wb3J0IjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1wcm94eS1hZ2VudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLXByb3h5LWFnZW50Ly0vaHR0cC1wcm94eS1hZ2VudC00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazB6ZE5ncVdUR0E2YWVJUlZwdmZWb2I0Zkw1MmRUZmFlaHlsZzBZNFV2U3lTdk9xL1krQk95UHJncFVyQTdIeWxxdlU4dklaR3NSdVhtc3Bza1YwVGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHRvb3RhbGxuYXRlL29uY2UiOiAiMSIsCi0gICAgICAgICJhZ2VudC1iYXNlIjogIjYiLAotICAgICAgICAiZGVidWciOiAiNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1wcm94eS1taWRkbGV3YXJlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtcHJveHktbWlkZGxld2FyZS8tL2h0dHAtcHJveHktbWlkZGxld2FyZS0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWEvVWVKNkhWQll4cmdZb3RBWm8xS3ZQV2xnQjQ4a1VKTERlUEZlbmVIc1Z1akZhVzVXTmoyTmdXQ0FFLy9CMURsMDJCSWZZbHBOZ0J5OEtmOFJqbXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2h0dHAtcHJveHkiOiAiXjEuMTcuOCIsCi0gICAgICAgICJodHRwLXByb3h5IjogIl4xLjE4LjEiLAotICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjEiLAotICAgICAgICAiaXMtcGxhaW4tb2JqIjogIl4zLjAuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMi4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvZXhwcmVzcyI6ICJeNC4xNy4xMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAdHlwZXMvZXhwcmVzcyI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cHMtcHJveHktYWdlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cHMtcHJveHktYWdlbnQvLS9odHRwcy1wcm94eS1hZ2VudC01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZEZjQWpwVFFGZ29MTXpDMlZ3VStDL0NiUzd1UkwwbFdteERJVG1xbTdDKzdGME9kbWo2czlsNmFsWmM2QUVMWGhybmdnTTJDZVdTWEhHT2RYMll0d0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWdlbnQtYmFzZSI6ICI2IiwKLSAgICAgICAgImRlYnVnIjogIjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h1bWFuLXNpZ25hbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHVtYW4tc2lnbmFscy8tL2h1bWFuLXNpZ25hbHMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUI0RkZaNnEvVDJqaGhrc2drYkVXM0hCdldJZkRXODVzbmtRZ2F3dDA3UzdKNVFYVGs2QmtOVisweUFlWnJNNVFwTUFkWWxvY0dvbGpuMHNKL1dRa0Z3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTcuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGZDazc5d3NoTWR6TXAyckgwNnFXckpFNGlvbHFMaENVSCtPaXVJZ1UrK1JCMCs5NE5sREw4MWF0TzdHWDU1dVVLdWVvMHR4SE50dkV5STZEN1dkTXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2FmZXItYnVmZmVyIjogIj49IDIuMS4yIDwgMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pY3NzLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljc3MtdXRpbHMvLS9pY3NzLXV0aWxzLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zb0ZoZmxDVldMZlJOT1BVM2l2NVo5VlVkVDQ0eEZSYnpqTHNFelNyNUFRbWdxUE1USGRVM1BNVDFDZjFzc3g4ZkxOSkRBMWp1ZnRZbCtQVWN2M01xQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49IDE0IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lkYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pZGIvLS9pZGItNy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdjaGVzV0J6eXZHSFJPOVc4dHpVV0ZEeWNvdzVnd2p2RktmeVY5RkYzMlk3RjUweVpNcDdtUCtUMm1KSVdGeDQ5emljcXlDNHVlZkhNMTdvNnhLSVZRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lkZW50aXR5LW9iai1wcm94eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pZGVudGl0eS1vYmotcHJveHkvLS9pZGVudGl0eS1vYmotcHJveHktMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTAwbjZZblZIS3JpblQ5dDBkOSs1eVpDNlVCTkpBTnBZRVF2TDJMbFg2QWI5bG5teHpJUmNFbVRQdXlHU2N2bDErakt1Q0lDWDFaMEFiMXBQS0tkaWtBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcm1vbnktcmVmbGVjdCI6ICJeMS40LjYiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaWdub3JlIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lnbm9yZS8tL2lnbm9yZS01LjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUFiMzhCY1NiSDBlSE5CeG43cWwyTkgva1gzM09rQjNsWjFCTmRoN0VOZVJDaEhUWXNUdldyTXViaUlBTU5TMmxsWEVFZ1oxTVVPQnRYQ2hQM2thRlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW1tZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuMjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltbWVyLy0vaW1tZXItOS4wLjIxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iYzROQkhxT3FTZlJXN1BPTWtIZDUxTHZDbGFlTVhwbThkeDBlOG9FMkdPUmJxNWFSSzdCeGw0Rnl6VkxkR3RMbXZMS0w3QlREQkc1QUNRbTRIV2pUQT09IiwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vaW1tZXIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ltcG9ydC1mcmVzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbXBvcnQtZnJlc2gvLS9pbXBvcnQtZnJlc2gtMy4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZlWVloUWErRDFRQkt6bnZoVUh4YjhmYXhscndVbnhzZURBYkFwNDU3RTB3TE5pbzJiT1NLbmpZRGhNaitZaUFxNjF4ck1HaFFrOWlYVms1RnpnUU13PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBhcmVudC1tb2R1bGUiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbXBvcnQtZnJlc2gvbm9kZV9tb2R1bGVzL3Jlc29sdmUtZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWZyb20vLS9yZXNvbHZlLWZyb20tNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBiL01ZbVhzdEFreXNSRng4cGlOSTF0R0ZOUUlGQTN2a0UzR3E0RXVBMWRGNmdIcC8rdmdacXNDR0phcHZ5OE4zUSs0bzdGd3ZxdVBKY25aN1JZeTRnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW1wb3J0LWxvY2FsIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltcG9ydC1sb2NhbC8tL2ltcG9ydC1sb2NhbC0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVNCMDd1THRuRHMxbzZFSGpLcFgzNEJLWURTcW5GZXJmVE9KTDJIdk1xRjcwTG54cGprekRCOEo0NG9UOXB1NEFNUGtRd2Y4amw2c3pndk5kMnRSSWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGtnLWRpciI6ICJeNC4yLjAiLAotICAgICAgICAicmVzb2x2ZS1jd2QiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJpbXBvcnQtbG9jYWwtZml4dHVyZSI6ICJmaXh0dXJlcy9jbGkuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbXVybXVyaGFzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbXVybXVyaGFzaC8tL2ltdXJtdXJoYXNoLTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbVhNWjZ3dXZEbUxpSEVtbDl5a3pxTzZsd0Zib2YwR0c0SWtjR2FFTmRDUkREbU1Wbm55N3M1SHNJZ0hDYmFxMHcyTXlQaERxa2hUVWdTMkxVMlBIQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4xOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW5kZW50LXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmRlbnQtc3RyaW5nLy0vaW5kZW50LXN0cmluZy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWRERFp1NEEyT3lJSzdMci8yekcrdzVqbWJ1azFEVkJuRXdSRVF2QnpzcEJKa0NFYlJhOEd4VTFsZ2hZY2FHSkNuUldpYmpEWGxxNzc5WDEveTV4d2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2luZmxpZ2h0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luZmxpZ2h0Ly0vaW5mbGlnaHQtMS4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWs5MkkvYjA4cTR3dkZzY1hDTHZxZnNIQ3JqckY3eWlYc1F1SVZ2VkU3TjgyVzMrYXFwenVVZEJiZmhXY3kvRlpSMy80SWdmbE1nS0xPc3ZQRHJHQ0pBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm9uY2UiOiAiXjEuMy4wIiwKLSAgICAgICAgIndyYXBweSI6ICIxIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbmhlcml0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmhlcml0cy8tL2luaGVyaXRzLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rL3ZHYVg0L1lsYTNXenlNQ3ZUUU9YWWVJSHZxT0t0bnFCZHV6VEhwenBRWnpBc2tLTWhaMksrRW5CaVNNOXpHU29JRmVNcFhLeGE0ZFllWklRcWV3UT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbmkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5pLy0vaW5pLTEuMy44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KVi95dWdWMnV6VzVpTVJTaVpBeUR0UWQrbnh0VW5qZUx0MGFjTmR3OThrS0xydnVSVnlCODB0c1JFT0U3eXZHVmdhbGhaNlJOWENtRUhrVUtCS3hldz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbnRlcm5hbC1zbG90IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ludGVybmFsLXNsb3QvLS9pbnRlcm5hbC1zbG90LTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZK1I1aEpyenM1MlFDRzJsYUxuNHVkWVZueHNmbnk5Q3BPaE5oVXZrL1NTU1Z5RjZUMjdGelJiRjBzcm9QaWRTdTNYOG9FQWtPbjJLODA0bWpwdDZVUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuMCIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgInNpZGUtY2hhbm5lbCI6ICJeMS4wLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXBhZGRyLmpzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lwYWRkci5qcy8tL2lwYWRkci5qcy0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGxieFE3eEt6ZkJ1c292NlVNaTRNRnBFZzBtK21BbTl4eU5HRWR1d1hNRUR1ZjRXZnpCL1Jad01WWUVkN0lLR3ZoNElVa0VYWXh0QVZ1OVQzT2VsSlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWFyZ3VtZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hcmd1bWVudHMvLS9pcy1hcmd1bWVudHMtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThRN0VBUmp6RW5LcHQvUENEN2UxY2dVUzBhNlg4dTV0ZFNpTXFYaG9qT2RvVjlUc01zaU8rOVZMQzV2QW1POE43L0dtWG43eWpSOHFuQTZiVkFFemZBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWFycmF5LWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hcnJheS1idWZmZXIvLS9pcy1hcnJheS1idWZmZXItMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXkrRnl5Ui93OHZmSVJxNGVRY00xRVlnU1RubUhYUHFhRitJZ3pncmF5dENGcTVYaDhsbGxEVm1BWm9sUEppWnR0WkxlRlNJTlBZTWFFSjcvdldVYTF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4yLjAiLAotICAgICAgICAiaXMtdHlwZWQtYXJyYXkiOiAiXjEuMS4xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1hcnJheWlzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hcnJheWlzaC8tL2lzLWFycmF5aXNoLTAuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ejA2Uzh0MG96b0RYTUcrdWJlMjZ6ZUNUTlhjS0lQSlpKaThoQnJGNGlkQ0xtczRDRzlRdEs3cUJsMWJvaTVPRHpGcGpzd2I1SlBtSENiTXBqYVl6Zz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1iaWdpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYmlnaW50Ly0vaXMtYmlnaW50LTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16QjlDcnVNYW1qeW04MWkySlozVU1uNTRQS0dzUXpzSmVvNnh2TjNISko0Q0FzUU5CNmlSdXRwMlRvNzdPZkNOdW94c3BzSWh6YVBvTzF6eUNFaEZPZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtYmlnaW50cyI6ICJeMS4wLjEiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtYmluYXJ5LXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYmluYXJ5LXBhdGgvLS9pcy1iaW5hcnktcGF0aC0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWk1FUlllczZwRHlkeXVHaWRzZTdPc0h4dGJJN1dWZVVFb3pnUi9nN3JkMHhVaW1ZTmx2WlJFL0syTWdaVGpXeTcyNUlmZWxMZVZjRU05N21tdFJHWHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmluYXJ5LWV4dGVuc2lvbnMiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWJvb2xlYW4tb2JqZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWJvb2xlYW4tb2JqZWN0Ly0vaXMtYm9vbGVhbi1vYmplY3QtMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdEWWFLSEptbmo0YVd4eWo2WUh5WFZwZFFhd3RWTEhVNWNiK2V6dFBHY3pmNmNqdVRkd3ZlNVpJRWZnWHFINGU1N0FuMUQxQUtmOENaM2tZclFScVlBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWNhbGxhYmxlIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWNhbGxhYmxlLy0vaXMtY2FsbGFibGUtMS4yLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFCQzBCVkZoUy9wMHF0dzZlbnA4ZSs4T0QwVXJLMG9GTHp0U2pOemhjS0EzV0R1Snh4QVBYelB1UHRLa2pFWTlVVW9FV2xYLzhmZ0tldTJTOGk5SlRBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1jb3JlLW1vZHVsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMTIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtY29yZS1tb2R1bGUvLS9pcy1jb3JlLW1vZHVsZS0yLjEyLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVE0WnVCQWUyRlVzS3R5UUpvUUhsdlA4T3ZCRVJ4TzNqRW15MUk3aGNSWGNKQkdHSEZoL2FKQnN3Ylh1UzlzZ3JESDJRVU84aWxrd05QSHZITWQ4Y2xnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcyI6ICJeMS4wLjMiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0ZS1vYmplY3QvLS9pcy1kYXRlLW9iamVjdC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOVlRYVN4c0FpU3djdlMzM01CazN3VENWbldLK0hoRjhWWlIyalJ4ZWhNMTZRY1ZPZEhxUG40VlBIbVJLNGxTcjM4bjlKcml1ckluTGNQOTB4c1lOZlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWRvY2tlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kb2NrZXIvLS9pcy1kb2NrZXItMi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYraTJCS3NGckg2NmlhVUZjMHdvRDhzTHk4Z2V0a3dUd3RPQmp2czU2Q3g0Q2dKRGVLUWVxZno4d0FZaVNiOEpPcHJXaEhINXA3N1BibVlDdnZVdVhRPT0iLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImlzLWRvY2tlciI6ICJjbGkuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1leHRnbG9iIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGdsb2IvLS9pcy1leHRnbG9iLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TYktiQU5rTjYwM1ZpNGpFWnY0OUxlVkpNbjR5R3dzYnpad29yRW95RWl1dHNOM25KWWRiTzM2emZoR0o2UUVEcE9aSUZrRHRucTVKUnhtdmwzanNvUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItenltbTUrdStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25TdUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1nZW5lcmF0b3ItZm4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2VuZXJhdG9yLWZuLy0vaXMtZ2VuZXJhdG9yLWZuLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jVElCNHlQWUwvR3J3MEVhU3pBU3pnNmJCeTlncUNvZnZXTjhva1RoQVlJeEtKWkMrdWRsUkFtR2JNMFhMZW5pRUpTczh1RWdIUEd1SFNlMVhzT0xTUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWdsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2xvYi8tL2lzLWdsb2ItNC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhlbFNheUhIMzZaZ0U3WldobGk3cFczNGhOYk5sOE9qdjVLVm1rSkQ0aEJkRDN0aDhUZms5dllhc0xNK21YV09aaEZrZ1pmeGhMU25yd1JyNGVsU1NnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWV4dGdsb2IiOiAiXjIuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW1hcC8tL2lzLW1hcC0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY09aRlFRb3pUaGExZjRNeExGemxnS1lQVHlqMjZwaWNkWlR4ODJoYmMvWGY0Sy90Wk9PWFNDa012VTRwS2lvUlhHRExKUm4wR003VXBlN2tSNzIxeWc9PSIsCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1tb2R1bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbW9kdWxlLy0vaXMtbW9kdWxlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01MXlwUFNQQ29URUlOOWR5NU95K2g0cFNoZ0ptUEN5Z0tmeVJDSVNCSStKb1dULzJvSnZLOFFQeG13djdiL3AyMzlqWHJtOU0xbWxRYnlLSjVBMTUyZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1uZWdhdGl2ZS16ZXJvIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW5lZ2F0aXZlLXplcm8vLS9pcy1uZWdhdGl2ZS16ZXJvLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kcUp2YXJMYXdYc0ZiTkRlSlc3ekF6OEl0SjljZDI4WXVmdXVGemgwRzhwTkhqSk1uWTA4RHY3c1lYMnVGNVVwUU93aWVBZU9FeEVZQVdXZnU3WlpVQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtbnVtYmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW51bWJlci8tL2lzLW51bWJlci03LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDFDaWZrZzZlOFR5bFNwZHRUcGVMVk1xdlNCRVZ6VHR0SHZFUkQ3NDErcG5aOEFOdjAwMDRNUkw0M1FLUERsSzljR3ZOcDZOWldaVUJsYkdYWXh4bmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEyLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLW51bWJlci1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbnVtYmVyLW9iamVjdC8tL2lzLW51bWJlci1vYmplY3QtMS4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWsxVTBJUnpMTW83WmxZSWZ6UnUyM09oNk1pSUZhc2dwYjlYNzZlcWZGWkFxd0g0NFVJNEtUQnZCWUlaMWRTTDlaekNoVEI5U2hIZkxrUjRwZFc1a3JRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy10b3N0cmluZ3RhZyI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1vYmoiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtb2JqLy0vaXMtb2JqLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sNFJ5SGdScUdONFkzKzlKSFZyTnFPK3ROMHJWNU15NzZ1VzUvbnVPNEsxYjZ2dzVHOGQvY21GalA5dFJmRXNkaFpOdDBJRmRadUsvYzJWcjROYitRZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtcGF0aC1pbnNpZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtcGF0aC1pbnNpZGUvLS9pcy1wYXRoLWluc2lkZS0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRmQ0Z0FCYit5Y0dBbUtvdThlTWZ0Q3VwU2lyNWxSeHFmNGFEL3ZkMGNEMnFjNEhMMDdPakNldUhNcjhSbzRDb01hZUNLREIwL0VDQk9WV2pUd1V2UFE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmoiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtcGxhaW4tb2JqLy0vaXMtcGxhaW4tb2JqLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nd3NPRTI4aysyM0dQMUI2dkZsMW9WaC9XT3ptYXdCckt3bzVFdjZ3TUt6UGthWGFDRElRS3pMbnZzQTQyRFJsYlZUV29ya2dUS0l2aUFLQ1drZlV3QT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lLy0vaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDWWVSQTJyVmliS1pkK3MyNjI1Z0duR0YvdDdEU3FEczRkUDdDckxBMW03aktXejZwcHMwTHBZTEpOOFE2NEh0bVBLSjFock4zbnpQTktGRUtPVWlRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXJlZ2V4Ly0vaXMtcmVnZXgtMS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWt2UmR4RHN4WmpoelVYMDdabkx5ZHpTMVRVL1RKbFRVSEhZNFlMTDg3ZTM3b1VBNDlEZmtMcWd5K1ZqRm9jb3d5MjljS3ZjU2l1K2tJdjcyOGpUVFZnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1yZWdleHAvLS9pcy1yZWdleHAtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTd6akZBUE80L2d3eVFBQWdSUm1xZUVleUlJQ1NkbUNxYTN0c1ZITWRCemFYWFJpcW9wWkw0Q3lnaGcvWHVsR1dydEFCVHBibllZenpJUmZmTGtQNG9BPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1yb290IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXJvb3QvLS9pcy1yb290LTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BR09yaU5wOTZ2TkJkM0h0VStSekZFYzc1RmZSNXltaVl2OEU1NTNJNzFTQ2VYQmlNc1ZEVXRkaW8xT0VGdnJQeUxJUTl0VlI1UnhYSUZlNVBVRmpNZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXNldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zZXQvLS9pcy1zZXQtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSsyY25URVplWTV6L2lYR2JMaFByT0FhSy9NYXU1azVlWHE5ajE0Q3BSVGZ0cTBwQUp1Mk13VlJTWmh5WldCengzbzZYNzk1THo2QnBiNlIwR0tmMzdnPT0iLAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtc2hhcmVkLWFycmF5LWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zaGFyZWQtYXJyYXktYnVmZmVyLy0vaXMtc2hhcmVkLWFycmF5LWJ1ZmZlci0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc3FOMlVEdTEvMHk2dXZYeVN0Q096eWhBakNTbEhjZUZvTUtKVzhXOUVVOWN2aWMvUWRzWjBrRVU5M0hFeTNJVUVGWklpSC8zdytBSC9VUWJQSE5kaEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtc3RyZWFtLy0vaXMtc3RyZWFtLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oRm9pSmlUbDYzbm4ra3N0SEdCdGV3V1NLblFMcHliMTU1S0hoZUExbDM5dXZ0TzluV0lvcDFwM3VkcVBjVWQveGJGMVZMTU80bjdPSTZwN1JibmdEZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXN0cmluZy8tL2lzLXN0cmluZy0xLjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEUyVVh6aXZqZTZvZlBXN2wyM2NqRE9NYTA5Z2I3eGxBcUc2akc1ZWo2dVBWMzJUbFdQM05LUGlndGFHZUhOdTlmb2hjY1JZdklpWk1mT09uT1lVdGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXN5bWJvbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zeW1ib2wvLS9pcy1zeW1ib2wtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUMvQ1BCcUtXbnZkY3hxSUFSeHlPaDR2MVVVRU9DSHBnRGEwV1lncEtERk1zemNyUGNmZmc1dWh3U2dQQ0xEMldXeG1xNmlzaXN6ODd0elQwMXR1R2hnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1zeW1ib2xzIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXR5cGVkLWFycmF5IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy10eXBlZC1hcnJheS8tL2lzLXR5cGVkLWFycmF5LTEuMS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUEpxZ0VIaVdadk1wYUZaM3VUYzhrSFBNNCs0QURUbERuaXVRTDdjVS9VREEwUWw3RjcweUdmSHBoM2NMTmUrYzl0b2FpZ3YrREZ6VEpLaGMyQ3RPNkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXZhaWxhYmxlLXR5cGVkLWFycmF5cyI6ICJeMS4wLjUiLAotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJmb3ItZWFjaCI6ICJeMC4zLjMiLAotICAgICAgICAiZ29wZCI6ICJeMS4wLjEiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXR5cGVkYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtdHlwZWRhcnJheS8tL2lzLXR5cGVkYXJyYXktMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWN5QTU2aUNNSEFoNUNkempKSWE0YW9oSnllTzFZYndMaTNKYzM1TW1SVTZwb3JvRmpJR1p6VXp1cEdpUlBPamdIZzlUTHU0M3hicHdYazUyM2ZNeEtBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXdlYWttYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd2Vha21hcC8tL2lzLXdlYWttYXAtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5TQlI0a0g1b1ZqMVV3dnY5NzBydVVrQ1Y3TzFtemdWRk80L3JldjJjTFJkYTlUbTlIckw3MFpQdXQ0ck9IZ1kwRk5yVXU5QkNiWEEyc2RRK3gwY2hBPT0iLAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtd2Vha3JlZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy13ZWFrcmVmLy0vaXMtd2Vha3JlZi0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcWN0c3VMWm1JUTArdlNTTWZvVnZ5RmUyK0dTRXZubVoyZXpUdXAxU0JzZTkrdHdDQ2VpYWw2RUVpM05jMktGY2Y2K3F6MkZCUG5qWHNrOHhoS1NhUFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy13ZWFrc2V0IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXdlYWtzZXQvLS9pcy13ZWFrc2V0LTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10MnlWdnR0SGtRa3R3bk5ObUJROThBaEVOTGRQVVREVEUyMXVQcUFRMEFSd1FmR2VRS1JWUzBOTnVySDdiVGY3UnJ2Y1ZuMU9PZ2U0NUNuQmVIQ1NtZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXdzbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy13c2wvLS9pcy13c2wtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZLekFyYTByR0pVVUJ3R0JnTmtIWnVUb1pjbitUdFhIcGVDZ21rTUpNTVl4MXNRRFlhQ1N5akpCU0NhMm5IMURHbTdzM24xb0Jub2hvVlRCYU43THd3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWRvY2tlciI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXNhcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2FycmF5Ly0vaXNhcnJheS0yLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteEhqaERyM2NOQkswQnpkVUpTUFhabnRRVXgvbXdNUzVSdzRBN2xQSjkwWEdBTzZJU1AvZVBETnVvMHZocU9aVStVRDVKb29kd0NBQW9aUWQzRmVBS3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXNleGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNleGUvLS9pc2V4ZS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkh4TUxwOWxuS0hHSFJuZzlRRmhSQ01iWUFjVnBuNjlzbVNHY3EzZjM2eGpnVlZXVGhqNHFxTGJUTGxxN1NzajhCK2ZJUTFFdUNFR0kybEtzeVFlSXc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS8tL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS0zLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZU9lSjVCSENtSFl2UUs3eHQ5R2tkSHV6dUNHUzFZNmc5R3ZueDNZbTMzZnovSHBMUll4aVMwd0hOcittL01CQzhCNjQ3WHQ2MDh2Q0RFdmhsOWM2TXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudC8tL2lzdGFuYnVsLWxpYi1pbnN0cnVtZW50LTUuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wenF0cDMxbkx2L1hGT3pYR3V2aENiOHFoam1UVm81dmpWazE5WEU0Q1JsU1d6MEtvZUozYnc5WHNBN25PcDlZQmY0cUhqd0J4a0R6S2NNRS9KMjlZZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMi4zIiwKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMTQuNyIsCi0gICAgICAgICJAaXN0YW5idWxqcy9zY2hlbWEiOiAiXjAuMS4yIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4yLjAiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItcmVwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1yZXBvcnQvLS9pc3RhbmJ1bC1saWItcmVwb3J0LTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HQ2ZFMW10c0hHT0VMQ1U4ZS9aN1lXenBteWJyeC8rZFNUZkxydlk4cVJtYVk2elhUS1duNldRSWphQUZ3MDY5aWNtNkdWTU5rZ3UwTnpJNGlQWlVOdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgIm1ha2UtZGlyIjogIl40LjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQvbm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpvNmRKMDRDbVNqdXpud0pTUzNwVWVXbWQvSDBmZlRsa1hYZ3daaStlcTFVQ21xUXdDaCtlTHNZT1lDd1k5OTFpMkZhaDRoMUJFTUN4NHFUaEdic2lBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItcmVwb3J0L25vZGVfbW9kdWxlcy9tYWtlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oWGRVVFpZSVZPdDFFeC8vakFRaSt3VFpacFVwd0JqLzBRc096cWVnYjNyR01NZUppU0V1NXhMSG5ZZkJyUlY0UkgyK09DU09POTVJcy83eDFXSjRidz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiXjcuNS4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQvbm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy41LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFiQ1NFU1Y2UHYraTIxSHZweHAzRHgrcFNEOGxJUHQ4dVZqUnJ4QVV0L25ic3dZYyt0SzZZMmJ0aVVMamQ0K2ZucTE1UFgrbnFRREM3T2Z0N1drd2NBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItcmVwb3J0L25vZGVfbW9kdWxlcy95YWxsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zd2RHaWRaeXE1UEIwODRYTEVTNVRwT1NSQTN3alhBbElXTWh1bTJrUmN2LzQxU24yZW1RMGR5Y1FXNHVaWExlandLdmc2RXN2YmRsVkwrRllFY3Q3QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItc291cmNlLW1hcHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzLy0vaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uM3M4RXdrZEZJSkNHM0JQS0JZdnNrZ1hHb3k4OEFSenZlZ2tpdGs2ME54UmR3bHRMT1RhSDdDVWlNUlh2d1lvcmwwUTcxMmlFamNXQitmSy9NcldWdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjEiLAotICAgICAgICAiaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtcmVwb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1yZXBvcnRzLy0vaXN0YW5idWwtcmVwb3J0cy0zLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVExnbk1rS2czaVREc1E5UGJQVGRwZkFLMkR6akY5bXFVRzdSTWdjUWw4b0ZqYWQ4b2I0bGFHeHY1WFY1VTlNQWZ4OEQ2dFNKaVV5dUF3ekxpY2F4bGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaHRtbC1lc2NhcGVyIjogIl4yLjAuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItcmVwb3J0IjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qYWtlIjogewotICAgICAgInZlcnNpb24iOiAiMTAuOC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qYWtlLy0vamFrZS0xMC44LjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpEaTNhUCtmRy9MY2h5QnpVTTgwNFZqZGRud2ZTZnNkZVlrd3Q4TmNiS1J2bzRyRmtqaHM0NTZpTEZuM2syWlVXdk5lNGk0OFdBQ0RiemE4ZmhxMit3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFzeW5jIjogIl4zLjIuMyIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjIiLAotICAgICAgICAiZmlsZWxpc3QiOiAiXjEuMC40IiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4xLjIiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImpha2UiOiAiYmluL2NsaS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC8tL2plc3QtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04ZVFnMm1xRmJhUDdDd2ZzVHBDeFErc0h6dzFXdU5XTDVVVXZqbldQNGh4MnJpR3o5ZlBTellPYVU1cTgvR3FXbjFUZmdaSVZUcVlKeWdiR2JXQUFOZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb3JlIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJpbXBvcnQtbG9jYWwiOiAiXjMuMC4yIiwKLSAgICAgICAgImplc3QtY2xpIjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImplc3QiOiAiYmluL2plc3QuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1ub3RpZmllciI6ICJeOC4wLjEgfHwgXjkuMC4wIHx8IF4xMC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAibm9kZS1ub3RpZmllciI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jaGFuZ2VkLWZpbGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNoYW5nZWQtZmlsZXMvLS9qZXN0LWNoYW5nZWQtZmlsZXMtMjkuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JRkczNElVTVVhTkJJeGpRWEYvaXU3ZzZFY2RNckdSUnhhVVN3OTJJLzJnMllDNnZDZFRsdGw0bkh2dDdDaTVuU0p3WElrQ3U4S2ExREtGK1g3WjFBZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJleGVjYSI6ICJeNS4wLjAiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNoYW5nZWQtZmlsZXMvbm9kZV9tb2R1bGVzL3AtbGltaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRZT2FuTTN3R3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1ZoN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNpcmN1cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jaXJjdXMvLS9qZXN0LWNpcmN1cy0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUc5bU4rS09ZSVVlMnNCOWtwSmtPOUJrMThKNGRUREFyTkZQd29aN1dLSEtlbDU1ZUtJUy91MmJMdGh4Z29qd2xmOU5MQ1ZRZmd6TS9Xc09Wdm9DNkZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvZXhwZWN0IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvIjogIl40LjYuMCIsCi0gICAgICAgICJkZWRlbnQiOiAiXjEuMC4wIiwKLSAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4wLjAiLAotICAgICAgICAiamVzdC1lYWNoIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInB1cmUtcmFuZCI6ICJeNi4wLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2lyY3VzL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNpcmN1cy9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNpcmN1cy9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNpcmN1cy9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jaXJjdXMvbm9kZV9tb2R1bGVzL3AtbGltaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRZT2FuTTN3R3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1ZoN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNpcmN1cy9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNsaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jbGkvLS9qZXN0LWNsaS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRUNk8yNDd2NmRDRVgyVUdIR3lmbE1weGhuckwwRE5xUDJmUlRLWW0zbkpKcENUZlhYM0dDTVFQR0ZqWERvajBpNS9CbHAzanJpS1hGZ2RmbWJZQjZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvcmUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJpbXBvcnQtbG9jYWwiOiAiXjMuMC4yIiwKLSAgICAgICAgImplc3QtY29uZmlnIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgInByb21wdHMiOiAiXjIuMC4xIiwKLSAgICAgICAgInlhcmdzIjogIl4xNy4zLjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImplc3QiOiAiYmluL2plc3QuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1ub3RpZmllciI6ICJeOC4wLjEgfHwgXjkuMC4wIHx8IF4xMC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAibm9kZS1ub3RpZmllciI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jbGkvbm9kZV9tb2R1bGVzL0BqZXN0L3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2xpL25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2xpL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2xpL25vZGVfbW9kdWxlcy9qZXN0LWdldC10eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo1WGV6NG5SUk1qazhlbW5UcFdybGt5YjlwZlJRUWFuRHJ2V0hoc1IxK1ZVZmJ3eGkzMGVWY1pGbGNkR0luUmliVTRHNUx3SFhwSTdJUkhVMENZK2dnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNsaS9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jbGkvbm9kZV9tb2R1bGVzL2plc3QtdmFsaWRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkd6MHlNTjVmVUZSUmJwSkRQd3hNcGdTWFcxTERLUk9IZkJvcEF2RGNtRDZzK0IvczhXSnJ3aSs0YmZINFNkSW5CQTVDM1AzQkkxOWRCdEt6eDFBcmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2xpL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNvbmZpZy8tL2plc3QtY29uZmlnLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVnh3Rk9DOGdraUpidW9kRzlDUHRNUmpCVU5aRUh4d2ZRWG1JdWRTVHpGV3hhY2kzUXViMWRkVFJiRk5RbEQvelVlYWlmTG5kaC9lRGNjRlg0d0NNUXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTEuNiIsCi0gICAgICAgICJAamVzdC90ZXN0LXNlcXVlbmNlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiYmFiZWwtamVzdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICJkZWVwbWVyZ2UiOiAiXjQuMi4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWNpcmN1cyI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bm5lciI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJwYXJzZS1qc29uIjogIl41LjIuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWpzb24tY29tbWVudHMiOiAiXjMuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAidHMtbm9kZSI6ICI+PTkuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInRzLW5vZGUiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9AamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3RyYW5zZm9ybS8tL3RyYW5zZm9ybS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpxQ3FFSVNyNThDZTNVK2J1TkZKWVVrdExKWk9nZ2Z5dlIrYlpNYWlWMWU4QjFTSXZKYndaTXJZejNneC9LQVBuOUVYbU9tTit1QjA4eUxDaldrUVFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjYiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTgiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjEuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicGlyYXRlcyI6ICJeNC4wLjQiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl40LjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvYmFiZWwtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtamVzdC8tL2JhYmVsLWplc3QtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CWUN6SW1Mb3M2SjNCSC8rSHZVQ0hHMWRUZjJNem1BQjRqYVZ4SFYrMjlSWkxqUjI5WHVZVG1zZjJzZER3a3JiK0ZjemtHbzNrT2hFN2dhNnNJMFA0QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI5LjYuMiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMS4xNCIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4taXN0YW5idWwiOiAiXjYuMS4xIiwKLSAgICAgICAgImJhYmVsLXByZXNldC1qZXN0IjogIl4yOS41LjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0Ly0vYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QtMjkuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16U3V1dUFsVE1UNG16TGoyblBuVW02ZnNFNjI3MHZkT2ZucGJKK1JtcnVVNzVVaExGdkwwTjJOZ0k3eHBlUzdOYUI2aEdxbWQ1cFZwR1REWXZpNFEzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMy4zIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjMiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX19jb3JlIjogIl43LjEuMTQiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICJeNy4wLjYiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvYmFiZWwtcHJlc2V0LWplc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXByZXNldC1qZXN0Ly0vYmFiZWwtcHJlc2V0LWplc3QtMjkuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KT01sb3hPcWRpQlN4TUF6alJhSDAyMy92dmNhU2FlYzQ5enZnKzJMbU5za3RDN2VpMzlMVEpHdzAySis5dVV0VFpVcTZ4Ykx5SjRkeGU5c1NtSXVBZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJiYWJlbC1wbHVnaW4tamVzdC1ob2lzdCI6ICJeMjkuNS4wIiwKLSAgICAgICAgImJhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4IjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9jb252ZXJ0LXNvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jb25maWcvbm9kZV9tb2R1bGVzL2plc3QtaGFzdGUtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWhhc3RlLW1hcC8tL2plc3QtaGFzdGUtbWFwLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzUxWGxlVERBQXlzdlU4clQ2QW5TMVpKK1dIVk5xaGoxazZuVHZOMlBZUCtIalUza3FsYUtRMUxudzNOWVczYm0ycjh2cTgyWDBaMW5EREhaTXpIVkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvZ3JhY2VmdWwtZnMiOiAiXjQuMS4zIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiYW55bWF0Y2giOiAiXjMuMC4zIiwKLSAgICAgICAgImZiLXdhdGNobWFuIjogIl4yLjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI5LjYuMiIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJ3YWxrZXIiOiAiXjEuMC44IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmc2V2ZW50cyI6ICJeMi4zLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvamVzdC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUvLS9qZXN0LXJlc29sdmUtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HL2lRVXZaV0k1ZTNTTUZzc2M0dWc0ZEgwYVppWnBzRHE5bzFQdFhUVjEyMTBadHliMit3K1pnUWtCM2lPaUM1U21BRXpKQk9IV3o2SHZyZCtRbk5Qdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1wbnAtcmVzb2x2ZXIiOiAiXjEuMi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJyZXNvbHZlIjogIl4xLjIwLjAiLAotICAgICAgICAicmVzb2x2ZS5leHBvcnRzIjogIl4yLjAuMCIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jb25maWcvbm9kZV9tb2R1bGVzL2plc3QtdmFsaWRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkd6MHlNTjVmVUZSUmJwSkRQd3hNcGdTWFcxTERLUk9IZkJvcEF2RGNtRDZzK0IvczhXSnJ3aSs0YmZINFNkSW5CQTVDM1AzQkkxOWRCdEt6eDFBcmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9qZXN0LXdvcmtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWwzY2NCT2FiVGRrbmc4SS9PUkNrQUR6NGVTTUtlalRZdjF2Qi9aODNVaXVicWhDMW9RNUxpNmRXQ3lxT0l2U2lmR2pVQnh1dnh2bG02S0dLMkR0dUFRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvcmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUuZXhwb3J0cy8tL3Jlc29sdmUuZXhwb3J0cy0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDJVVzZOdzNuL2FNZ0RWeSswclNxZ0hsdjM5V1pBbFpyWENkbmJ5RWlLbTE3RFNxSFg0TW1RTWFTVDNGYmVXUjVGVHVSY1V3WUF6aVphamppMFk3bWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jb25maWcvbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvd3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JpdGUtZmlsZS1hdG9taWMvLS93cml0ZS1maWxlLWF0b21pYy00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0t4YXVVZEJtU2RXbm1wYUdGZytwcE5qS0Y4dU5Mcnk4THl6amF1UURPVk9OZkZMTktyS3ZRT3haL1Z1VEljUy9nZ2UvWU5haGY1UklJUVdUU2FybGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKLSAgICAgICAgInNpZ25hbC1leGl0IjogIl4zLjAuNyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdCtTVDdDQjlHWDVGMnhLd2h3Q2YwVEFSMTd1TkRpYVBUWm5WeW1QOWx3MGxzc2E5dkcrQUZ5RFpvZUlIU3RVM1dvd0ZGd1Qra3krZXIwV1ZsMnlHaEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZGlmZi1zZXF1ZW5jZXMiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1kaWZmL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1kaWZmL25vZGVfbW9kdWxlcy9qZXN0LWdldC10eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo1WGV6NG5SUk1qazhlbW5UcFdybGt5YjlwZlJRUWFuRHJ2V0hoc1IxK1ZVZmJ3eGkzMGVWY1pGbGNkR0luUmliVTRHNUx3SFhwSTdJUkhVMENZK2dnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZGlmZi9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZG9jYmxvY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZG9jYmxvY2svLS9qZXN0LWRvY2Jsb2NrLTI5LjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZnpkVGZ0VGhjemVTRDluWjNmekEvNEtrSHRubWxsYXdXclhPNjl2dEkrTDlXakVJdVhXczRBbXlNRTdsTjVoVTdkQjBzSGh1UGZjS29mUnNVYi8yRmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGV0ZWN0LW5ld2xpbmUiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWVhY2gvLS9qZXN0LWVhY2gtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Nc3JzcUEwSWE5OWNJcEFCQmMzaXpTMVpZb1lmaEl5ME5OV3FQU0UwWVhiUWp3Y2h5dDZCMUhEMmtoenlQZTFXaUpBN2hieFh5Nzdab1VReG44VWxTdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWVhY2gvbm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZWFjaC9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoL25vZGVfbW9kdWxlcy9qZXN0LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWVhY2gvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lbnZpcm9ubWVudC1qc2RvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1qc2RvbS8tL2plc3QtZW52aXJvbm1lbnQtanNkb20tMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1URkJ2a1RDMUhubm5ya2EvZlViNTZhdGZEdEo5Vk1aOTRKa2pUYmdnbDFQRXB3cll0VUJLTWV6QjNpbkxtV3FRc1hZTGNNd05vRFF3b0JUQXZGZnNmdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImpzZG9tIjogIl4xNi42LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWVudmlyb25tZW50LWpzZG9tL25vZGVfbW9kdWxlcy9AamVzdC9lbnZpcm9ubWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9XUWpoUEplMy9naGFvbC80QnE0ODBKS1hWL1JmdzhuUWRON2Y0MWZNOFZESExjeEtYb3U2UXlYQWgzRUZyOS9iVkczeDc0ejFOV0RrUDg3RWlZOGdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lbnZpcm9ubWVudC1qc2RvbS9ub2RlX21vZHVsZXMvQGplc3QvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vYVBvd29vbHdhMDdrNy9vTTNhQVNuZU5lQkdDbUdRc2MzdWdONHU2czRDLytzNU02NE1Gby8rZGpUZGl3Y2JRbFJmRkVsR3VEWFd6YVdqNlFnS09iUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogIl44LjAuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWVudmlyb25tZW50LWpzZG9tL25vZGVfbW9kdWxlcy9Ac2lub25qcy9jb21tb25zIjogewotICAgICAgInZlcnNpb24iOiAiMS44LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2NvbW1vbnMvLS9jb21tb25zLTEuOC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LeStYa0FrcVBaU20zTkxCZVVuZzc3RUJRbDNjbWVKaElUYUdIZFlIOGtqVkIrYXVuM1M0WEJSdGkyenQxN210dDBtSVVEaU54WWVvSm02ZHJWdkJKUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlLWRldGVjdCI6ICI0LjAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lbnZpcm9ubWVudC1qc2RvbS9ub2RlX21vZHVsZXMvQHNpbm9uanMvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbm9uanMvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy04LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT0FQSlVBdGdlSU5oaC9UQWxVSUQ0UVRzNTNOam03eHpkZGFWbEVzL1NYd2d0aUQxdFcyMnpBQi9XMXdkcWZycG1pa2dhV1E5Rnc2V3MraHNpUm01Vmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHNpbm9uanMvY29tbW9ucyI6ICJeMS43LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtanNkb20vbm9kZV9tb2R1bGVzL2plc3QtbWVzc2FnZS11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1lc3NhZ2UtdXRpbC8tL2plc3QtbWVzc2FnZS11dGlsLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItck15RmUxK2pueUFBZitOSHdUY2xEejBlQWFMa1ZEZEtWSEhCRldzQldIbm5oNVllSk1OV1dzdjdBYkZZWGZLM29UcXZMN1ZUV2toTkx1MWpYMjREK2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvc3RhY2stdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdGFjay11dGlscyI6ICJeMi4wLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWVudmlyb25tZW50LWpzZG9tL25vZGVfbW9kdWxlcy9qZXN0LW1vY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbW9jay8tL2plc3QtbW9jay0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUs0aktiWTFkNEVOaGJyRzJ6dVBXYVFCdkRseStpWjJ5QVcrVDFmQVRONzhoYzBzSW53bjd3WkI4WHRsTm52SHVnNVJNd1Y4OTdYbTRMcW1QTTRlMk9nPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWUdkRmVaM1Q5YSsvNjEyYzVtVFFJbGx2V2tkZFBiWWNOMnY5NVpIMjRvV01iR0E0R0dTMlhkSUY5MlFNaFVodnJqanVRV1lnVUdXMnphd095SDYzTVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtbm9kZS9ub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lbnZpcm9ubWVudC1ub2RlL25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtbm9kZS9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yS1k5NWtzWVNhSzdETUJXUW42ZFF6M2txQWYzQkI2NHkydWRlRytodjRLZlNPYjlxd2NZUXN0VEpjMUtDYnNpeCt3TFpXWllOOHQ3bndYM0dPQkxSdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03R2drWjRGdzRORmJNU0RTcFp3WGVCaUlieCt0LzQ2bkoyUWl0a09qdndQWXlabXF0dHUyVERTaW1NSFAxRWtQT2k0eFVaQU4xZG9FNVZkMjVINEpuZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4wLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXNlcmlhbGl6ZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjcuNS4xIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgIndhbGtlciI6ICJeMS4wLjciCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1qYXNtaW5lMi8tL2plc3QtamFzbWluZTItMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qdHE3VlZ5RzhTcUFvckRwQXB3aUpKSW1kMFYyd3YxeHpkaGVHSFJHeXVUN2dabTZnRzQ3UUVza09senNOMVBHLzZXTmFDbzVwbXdNSERmM0FrRzJwUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY28iOiAiXjQuNi4wIiwKLSAgICAgICAgImV4cGVjdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4wLjAiLAotICAgICAgICAiamVzdC1lYWNoIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgInRocm9hdCI6ICJeNi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9AamVzdC9jb25zb2xlIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb25zb2xlLy0vY29uc29sZS0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtaL3ROcFMzTlhuMG1sWFhYUE51RFpuYjRjMG9aMjByNEs1ZWVtTTJrMzBaQzNHMFQwMm5YVXZ5aGY1WWRiWFdIUEVKTGM5cUdMeEVaMjE2TWRMK1pnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9AamVzdC9lbnZpcm9ubWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9XUWpoUEplMy9naGFvbC80QnE0ODBKS1hWL1JmdzhuUWRON2Y0MWZNOFZESExjeEtYb3U2UXlYQWgzRUZyOS9iVkczeDc0ejFOV0RrUDg3RWlZOGdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMi9ub2RlX21vZHVsZXMvQGplc3QvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vYVBvd29vbHdhMDdrNy9vTTNhQVNuZU5lQkdDbUdRc2MzdWdONHU2czRDLytzNU02NE1Gby8rZGpUZGl3Y2JRbFJmRkVsR3VEWFd6YVdqNlFnS09iUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogIl44LjAuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9AamVzdC9nbG9iYWxzIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9nbG9iYWxzLy0vZ2xvYmFscy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpFSk5CNDFPQlFRZ0d6Z3lJbkF2MFVVZkREajN1cG1IeWRqaWVTeEZ2VFJ1WkVscng3dFhnL3VWUTVoWVZFd2lYczMrYU1zQWVFYzlYN3hpU0tDbTRRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJleHBlY3QiOiAiXjI3LjUuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtamFzbWluZTIvbm9kZV9tb2R1bGVzL0BqZXN0L3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteTlOSUhVWUYzUEpSbEhrOThOZEMvTjFnbDg4QkwwOGFRUWd1NGs0Wm9wUWtDdzl0OWNWOG10bDNUVjhiL1lDQjhYYVZURnJtVVRBSnZqc250RGlyZWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbHNpdGVzIjogIl4zLjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXJlc3VsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1yZXN1bHQvLS90ZXN0LXJlc3VsdC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVXMzVsMlJZRlVjVVF4Rkp6NUN2NU1UT3hsSklRczRJN2d4emkyelZVN1BKaE93ZllxMU1kQzVuaFNtWWpYMWdtTW1MUHZCM3NJYUMrQmtjSFJCZmFnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMi9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0xLjguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3krWGtBa3FQWlNtM05MQmVVbmc3N0VCUWwzY21lSmhJVGFHSGRZSDhralZCK2F1bjNTNFhCUnRpMnp0MTdtdHQwbUlVRGlOeFllb0ptNmRyVnZCSlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1kZXRlY3QiOiAiNC4wLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtamFzbWluZTIvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtOC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9BUEpVQXRnZUlOaGgvVEFsVUlENFFUczUzTmptN3h6ZGRhVmxFcy9TWHdndGlEMXRXMjJ6QUIvVzF3ZHFmcnBtaWtnYVdROUZ3NldzK2hzaVJtNVZnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBzaW5vbmpzL2NvbW1vbnMiOiAiXjEuNy4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9kaWZmLXNlcXVlbmNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi1zZXF1ZW5jZXMvLS9kaWZmLXNlcXVlbmNlcy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWsxZ0NBWEFzTmdMd0VMK1k4V3ZsK002b0VGajViZ2F6ZlpVTHBTNUNuZW9QUFhSYUNDVzdkbStxMjFLeTJWRUU1WCtWZVJEQlZnMVBjdnZzcjRUdE5RPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9leHBlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGVjdC8tL2V4cGVjdC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUUxcTVoU1VHMkFtWVF3UUowNDFudmdwa09ESFF2QitSS2xCNElZZHJ1NnVKc3lGVFJ5WkFQNDYzTSsxbElOb3J3YnFBbVVnZ2k2K1d3a0Q4bENTL0R3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9qZXN0LWRpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZGlmZi8tL2plc3QtZGlmZi0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW0wTnZrWDU1TER0OVQ0bWN0VEVnblprM2ZtRWczTlJZdXR2TVBXTS8waVBua0ZqMndJZUY0NU8xNzE4Y01TT0ZPMXZJTmtxbXhxRDh2RTM3dVRFYnF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJkaWZmLXNlcXVlbmNlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9qZXN0LWVhY2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZWFjaC8tL2plc3QtZWFjaC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFGZjZwK0ZiaFQvYlhRbkVvdVl5MDBia05TWTdPVXBmSWNtZGw4dlozMUExVVVhdXJPTFBBOGE4QmJKT0YyUkRVRWx3SmhtZWFWN0xuYWdJKzVVd05RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9qZXN0LW1hdGNoZXItdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWF0Y2hlci11dGlscy8tL2plc3QtbWF0Y2hlci11dGlscy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXoydVR4L1Q2TEJhQ29OV05GV3dDaExCS1l4VE1jR0JSakF0KzJTYlA5MjkvRmZsYjlhYTVMR21hNjU0Uno4ejlITHhzclVhWXp4RTlUL0VGSUwvUEF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNy41LjEiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMi9ub2RlX21vZHVsZXMvamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWVzc2FnZS11dGlsLy0vamVzdC1tZXNzYWdlLXV0aWwtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yTXlGZTEram55QUFmK05Id1RjbER6MGVBYUxrVkRkS1ZISEJGV3NCV0hubmg1WWVKTU5XV3N2N0FiRllYZkszb1Rxdkw3VlRXa2hOTHUxalgyNEQrZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtamFzbWluZTIvbm9kZV9tb2R1bGVzL2plc3QtbW9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tb2NrLy0vamVzdC1tb2NrLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSzRqS2JZMWQ0RU5oYnJHMnp1UFdhUUJ2RGx5K2laMnlBVytUMWZBVE43OGhjMHNJbnduN3daQjhYdGxObnZIdWc1Uk13Vjg5N1htNExxbVBNNGUyT2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMi9ub2RlX21vZHVsZXMvamVzdC1ydW50aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bnRpbWUvLS9qZXN0LXJ1bnRpbWUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vN2d4dzNHZitIMklHdDhmdjBSaXlFMStyODNGSkJScnVvQStGWHJsSHc2eEV5QnNVOHVnQTZJUGZUZFZ5QTB3OEhDbHBiSytER0p4SDU5VXJOTXg4QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvZ2xvYmFscyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNqcy1tb2R1bGUtbGV4ZXIiOiAiXjEuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImV4ZWNhIjogIl41LjAuMCIsCi0gICAgICAgICJnbG9iIjogIl43LjEuMyIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtYm9tIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtamFzbWluZTIvbm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc25hcHNob3QvLS9qZXN0LXNuYXBzaG90LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVl5a1hJNWEwSTMxeFg2N21nZUx3MURaMGJKQitncHE1SXBTdUNBb3lEaTArQmhnVS9SSXJMK1JUekRta05UY2h2REZXS1A4bHArdy80MlozdXM1c0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQiOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy43LjIiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiAiXjcuMC40IiwKLSAgICAgICAgIkB0eXBlcy9wcmV0dGllciI6ICJeMi4xLjUiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgiOiAiXjEuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJleHBlY3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1kaWZmIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjUuMSIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMi9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtamFzbWluZTIvbm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy41LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFiQ1NFU1Y2UHYraTIxSHZweHAzRHgrcFNEOGxJUHQ4dVZqUnJ4QVV0L25ic3dZYyt0SzZZMmJ0aVVMamQ0K2ZucTE1UFgrbnFRREM3T2Z0N1drd2NBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWphc21pbmUyL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1qYXNtaW5lMi9ub2RlX21vZHVsZXMveWFsbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1sZWFrLWRldGVjdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWxlYWstZGV0ZWN0b3IvLS9qZXN0LWxlYWstZGV0ZWN0b3ItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hTnFZaGZwNXVZRU8zdGRXTWIyYmZXdjZmMGI0STBMT3hWUnBuUkxBZXF1ZTJ1cU9WVk1MaDZraG5UY0UycUo1d0FLb3AwSGNyZU0xYnRveXNENmJQUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1sZWFrLWRldGVjdG9yL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbGVhay1kZXRlY3Rvci9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1sZWFrLWRldGVjdG9yL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbWF0Y2hlci11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tYXRjaGVyLXV0aWxzLy0vamVzdC1tYXRjaGVyLXV0aWxzLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNExpQWszaFNTb2J0b21lSUF6RlRlK044a0w2ejBKdEYzbjZJNGZnMjlpSVc3dHQ5OVI3WmNJRlczNFFrWCtEdVZyZitDVWU2d3VWT3BtN1pLRkp6WlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1kaWZmIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjkuNC4zIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbWF0Y2hlci11dGlscy9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbWF0Y2hlci11dGlscy9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1hdGNoZXItdXRpbHMvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1lc3NhZ2UtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tZXNzYWdlLXV0aWwvLS9qZXN0LW1lc3NhZ2UtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZuSUdZRWpvUFN1UnFWOFc5dCtXb3c5NVNEcDZLUFgyVWY3RW9lRzlHOTlKMk9WaDdPU3dwUzRCNkowTmZwRUlwZmtCTkhsQlpwQTJyYmxFdUVGaFpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvc3RhY2stdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdGFjay11dGlscyI6ICJeMi4wLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1lc3NhZ2UtdXRpbC9ub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1lc3NhZ2UtdXRpbC9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbWVzc2FnZS11dGlsL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1tZXNzYWdlLXV0aWwvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1vY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbW9jay8tL2plc3QtbW9jay0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhvU3YzbGIzYnl6ZEtmd3FDdVQ2dVRzY2FuNDcxR1VFQ3FnTll5a2c2b2IweWlBdzN6WWM3T3JQbkk5UXY4V3dvYTRsQzdBWjloeVM0QWlJeDVVMnpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbW9jay9ub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1tb2NrL25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbW9jay9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1wbnAtcmVzb2x2ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1wbnAtcmVzb2x2ZXIvLS9qZXN0LXBucC1yZXNvbHZlci0xLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzNOcHdRRW5Sb0lCdHg0ZnloYmxRRFBnSkkwSDFJRUlrWDdTaExValBHQTdUdFVUdkkxb2lLaTNTUjRvQlIwaFFoUVI4MGw0V0FlNVJyWEJ3V01BOHc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiamVzdC1yZXNvbHZlIjogIioiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiamVzdC1yZXNvbHZlIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRiZktxMnppZSt4MTZva3FEWGpYbjlxbDJCMGRTY1F1K3Zjd2U0VHZGVmhrVnl1V0xxcFpyWnRYeExMV29YWWduMEU4N0k2cjZHUllIRjd3RlpCVXZnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJlc29sdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVzb2x2ZS8tL2plc3QtcmVzb2x2ZS0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZGRHk4LzlFNkNWODNJTWJEcGNqT2h1bUFRUER5RVRuVTJLWjFPOThEd1RuejhBT0JzVy9YdjNHeVNyMW1PWmRJdExSK3pEWjdJL1VkVEZiZ1NPVkN3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNy41LjEiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMC4wIiwKLSAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6ICJeMS4xLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy8tL2plc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MR3FqRFd4ZzJmdVFRbTd5cER4ZHVMdS9tNCs0TGI0Z2N6YzEzdjUxVk1aYlZQNXRTQklMcVZ4OHFmV2NzZFA4ZjBHN2FJcUJ5SUFMREIwUjkzeUwrdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzL25vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1ydW5uZXIvLS9qZXN0LXJ1bm5lci0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdYT1QvYTBFc3BZZ2ZNaVlIeHdHTFBDWmZDMGMzOE1pdkFsYjJsTUVBbHdISU5LZW1ydHR1MXVTYmNHYmZEVjMxc0ZhUFduV0pQbWIycVhNOHBxWjR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJlbWl0dGVyeSI6ICJeMC4xMy4xIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWRvY2Jsb2NrIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC1lbnZpcm9ubWVudC1ub2RlIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LWxlYWstZGV0ZWN0b3IiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtd2F0Y2hlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiLAotICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIjAuNS4xMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyL25vZGVfbW9kdWxlcy9AamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3RyYW5zZm9ybS8tL3RyYW5zZm9ybS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpxQ3FFSVNyNThDZTNVK2J1TkZKWVVrdExKWk9nZ2Z5dlIrYlpNYWlWMWU4QjFTSXZKYndaTXJZejNneC9LQVBuOUVYbU9tTit1QjA4eUxDaldrUVFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjYiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTgiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjEuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicGlyYXRlcyI6ICJeNC4wLjQiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl40LjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIvbm9kZV9tb2R1bGVzL2plc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZ2V0LXR5cGUvLS9qZXN0LWdldC10eXBlLTI5LjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyL25vZGVfbW9kdWxlcy9qZXN0LWhhc3RlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1oYXN0ZS1tYXAvLS9qZXN0LWhhc3RlLW1hcC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSs1MVhsZVREQUF5c3ZVOHJUNkFuUzFaSitXSFZOcWhqMWs2blR2TjJQWVArSGpVM2txbGFLUTFMbnczTllXM2JtMnI4dnE4MlgwWjFuRERIWk16SFZBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFueW1hdGNoIjogIl4zLjAuMyIsCi0gICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAid2Fsa2VyIjogIl4xLjAuOCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnNldmVudHMiOiAiXjIuMy4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvamVzdC1yZWdleC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PNEZnbFphTW1XWGJHSFNRSW5mWGV3SXNkMUxNbjlwM1pYQi82cjRGT2t5aFgyL2lQL3NvTUc5OGpHdmsvQTNIQU43OCs1VldjQkdPMEJKQVBSaDRrZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIvbm9kZV9tb2R1bGVzL2plc3QtcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLy0vamVzdC1yZXNvbHZlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRy9pUVV2WldJNWUzU01Gc3NjNHVnNGRIMGFaaVpwc0RxOW8xUHRYVFYxMjEwWnR5YjIrdytaZ1FrQjNpT2lDNVNtQUV6SkJPSFd6Nkh2cmQrUW5OUHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yOS42LjIiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMC4wIiwKLSAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6ICJeMi4wLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIvbm9kZV9tb2R1bGVzL2plc3QtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyL25vZGVfbW9kdWxlcy9qZXN0LXZhbGlkYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXZhbGlkYXRlLy0vamVzdC12YWxpZGF0ZS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZHejB5TU41ZlVGUlJicEpEUHd4TXBnU1hXMUxES1JPSGZCb3BBdkRjbUQ2cytCL3M4V0pyd2krNGJmSDRTZEluQkE1QzNQM0JJMTlkQnRLengxQXJnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiY2FtZWxjYXNlIjogIl42LjIuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjkuNC4zIiwKLSAgICAgICAgImxldmVuIjogIl4zLjEuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIvbm9kZV9tb2R1bGVzL3AtbGltaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRZT2FuTTN3R3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1ZoN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvcmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUuZXhwb3J0cy8tL3Jlc29sdmUuZXhwb3J0cy0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDJVVzZOdzNuL2FNZ0RWeSswclNxZ0hsdjM5V1pBbFpyWENkbmJ5RWlLbTE3RFNxSFg0TW1RTWFTVDNGYmVXUjVGVHVSY1V3WUF6aVphamppMFk3bWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lci9ub2RlX21vZHVsZXMvc291cmNlLW1hcC1zdXBwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMC41LjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXN1cHBvcnQvLS9zb3VyY2UtbWFwLXN1cHBvcnQtMC41LjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TSFNLRkhhZGpWQTVvUjRQUHFodEFWZGNCV3dSWVZkNmc2Y0FYbkliUmlJd2MyRWhQclR1S1VCZFNMdmxFS3lJUDNHQ2Y4OWZsdHZjWmlQOU1NRkExdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJidWZmZXItZnJvbSI6ICJeMS4wLjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIvbm9kZV9tb2R1bGVzL3dyaXRlLWZpbGUtYXRvbWljIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyaXRlLWZpbGUtYXRvbWljLy0vd3JpdGUtZmlsZS1hdG9taWMtNC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdLeGF1VWRCbVNkV25tcGFHRmcrcHBOaktGOHVOTHJ5OEx5emphdVFET1ZPTmZGTE5Lckt2UU94Wi9WdVRJY1MvZ2dlL1lOYWhmNVJJSVFXVFNhcmxnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjciCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcnVudGltZS8tL2plc3QtcnVudGltZS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJYOWRxSzc2OEt1ZkdKeUllTG1JelRvRG1zTjBtN0llazhRTnhSU0kvMitpUEZZSEYwalR3bE8zZnRuN2dkS2Q5OEcvVlF3OVhKQ2s3N3JiVEdabkpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC9nbG9iYWxzIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6ICJeMjkuNi4wIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjanMtbW9kdWxlLWxleGVyIjogIl4xLjAuMCIsCi0gICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIsCi0gICAgICAgICJnbG9iIjogIl43LjEuMyIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtYm9tIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVudGltZS9ub2RlX21vZHVsZXMvQGplc3QvdHJhbnNmb3JtIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1acUNxRUlTcjU4Q2UzVStidU5GSllVa3RMSlpPZ2dmeXZSK2JaTWFpVjFlOEIxU0l2SmJ3Wk1yWXozZ3gvS0FQbjlFWG1PbU4rdUIwOHlMQ2pXa1FRZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMi4wLjAiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeNC4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL0BqZXN0L3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVudGltZS9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9jb252ZXJ0LXNvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2plc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZ2V0LXR5cGUvLS9qZXN0LWdldC10eXBlLTI5LjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVudGltZS9ub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4wLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgIndhbGtlciI6ICJeMS4wLjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2plc3QtcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLy0vamVzdC1yZXNvbHZlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRy9pUVV2WldJNWUzU01Gc3NjNHVnNGRIMGFaaVpwc0RxOW8xUHRYVFYxMjEwWnR5YjIrdytaZ1FrQjNpT2lDNVNtQUV6SkJPSFd6Nkh2cmQrUW5OUHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yOS42LjIiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMC4wIiwKLSAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6ICJeMi4wLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9qZXN0LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2plc3QtdmFsaWRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkd6MHlNTjVmVUZSUmJwSkRQd3hNcGdTWFcxTERLUk9IZkJvcEF2RGNtRDZzK0IvczhXSnJ3aSs0YmZINFNkSW5CQTVDM1AzQkkxOWRCdEt6eDFBcmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVudGltZS9ub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVudGltZS9ub2RlX21vZHVsZXMvcmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUuZXhwb3J0cy8tL3Jlc29sdmUuZXhwb3J0cy0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDJVVzZOdzNuL2FNZ0RWeSswclNxZ0hsdjM5V1pBbFpyWENkbmJ5RWlLbTE3RFNxSFg0TW1RTWFTVDNGYmVXUjVGVHVSY1V3WUF6aVphamppMFk3bWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy93cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03S3hhdVVkQm1TZFdubXBhR0ZnK3BwTmpLRjh1TkxyeThMeXpqYXVRRE9WT05mRkxOS3JLdlFPeFovVnVUSWNTL2dnZS9ZTmFoZjVSSUlRV1RTYXJsZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpbXVybXVyaGFzaCI6ICJeMC4xLjQiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zZXJpYWxpemVyIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXNlcmlhbGl6ZXIvLS9qZXN0LXNlcmlhbGl6ZXItMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qWkN5bzZpSXhPMWFxVXhwdUJsd1RETWt6T0FKUzRhM2VZejNZemd4eFZRRndMZVNBN0pmcTVjYnFDWStKTHZURHJXaXJndXNJLzBLd3hLTWdyZGY3dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc25hcHNob3QvLS9qZXN0LXNuYXBzaG90LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMU9kanF2cW1SZEdOdldYci9ZWkh1eWhoNURlYUxwMXAvRjhUaHQvTXJNdzRLcjFVdS9qNGxSRytpS2wxREFxVUpEV3h0UUJNazQxTG5mL0pFVFlCUkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTEuNiIsCi0gICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjcuMiIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQiOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjMiLAotICAgICAgICAiQGplc3QvZXhwZWN0LXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImV4cGVjdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuNS4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvQGplc3QvdHJhbnNmb3JtIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1acUNxRUlTcjU4Q2UzVStidU5GSllVa3RMSlpPZ2dmeXZSK2JaTWFpVjFlOEIxU0l2SmJ3Wk1yWXozZ3gvS0FQbjlFWG1PbU4rdUIwOHlMQ2pXa1FRZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMi4wLjAiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeNC4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXNuYXBzaG90L25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXNuYXBzaG90L25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3Qvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4wLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgIndhbGtlciI6ICJeMS4wLjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvamVzdC1yZWdleC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PNEZnbFphTW1XWGJHSFNRSW5mWGV3SXNkMUxNbjlwM1pYQi82cjRGT2t5aFgyL2lQL3NvTUc5OGpHdmsvQTNIQU43OCs1VldjQkdPMEJKQVBSaDRrZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3Qvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy41LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWJDU0VTVjZQditpMjFIdnB4cDNEeCtwU0Q4bElQdDh1VmpScnhBVXQvbmJzd1ljK3RLNlkyYnRpVUxqZDQrZm5xMTVQWCtucVFEQzdPZnQ3V2t3Y0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3Qvbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXNuYXBzaG90L25vZGVfbW9kdWxlcy93cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03S3hhdVVkQm1TZFdubXBhR0ZnK3BwTmpLRjh1TkxyeThMeXpqYXVRRE9WT05mRkxOS3JLdlFPeFovVnVUSWNTL2dnZS9ZTmFoZjVSSUlRV1RTYXJsZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpbXVybXVyaGFzaCI6ICJeMC4xLjQiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdC9ub2RlX21vZHVsZXMveWFsbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdjJvLzhqTnZYMU1RMEtHdHc0ODBFL3c0ZkJDRE9uSDYrNkRtZUtpNkxaVUlsS0E1a3dZMFlOZGx6YVdUaVZneHFBcWlrMTFReXhET0trNTQzYUtYdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC12YWxpZGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC12YWxpZGF0ZS8tL2plc3QtdmFsaWRhdGUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10aGtObGkwTFlUbU9JMXREQjNGSTFTMVJUcC9CcXlkOXBUYXJKd0w4N09JQkZ1cUViNUFwdjVFYUFwRXVkWWc0Zzg2ZTNDVDZrTTBSb3draHRFbkNCUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImNhbWVsY2FzZSI6ICJeNi4yLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJsZXZlbiI6ICJeMy4xLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC13YXRjaGVyIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdhdGNoZXIvLS9qZXN0LXdhdGNoZXItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HWml0bHFrTWtoa2VmamZOL3AzU0pqckRheFBmbHF4RUF2My9pazEwT2lyWnFKR1lINXJQaUlzZ1ZjZm9mMFRkcWczc2hRR2RFSXhEQngrQjR0dUx6QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJlbWl0dGVyeSI6ICJeMC4xMy4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInN0cmluZy1sZW5ndGgiOiAiXjQuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC13YXRjaGVyL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXdhdGNoZXIvbm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC13YXRjaGVyL25vZGVfbW9kdWxlcy9qZXN0LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXdvcmtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTd2dWg4NVY1Y2REb2ZQeXhuNThuclBqQmt0Wm8wdTl4MWc4V3RqUW9sK2paRGFFK2ZoTitjSXZUajExR25kQm5NbnlmclVPRzFzWlF4Q2RqS2grREtnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjEzLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtd29ya2VyL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC9ub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC9ub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qaXRpIjogewotICAgICAgInZlcnNpb24iOiAiMS4xOC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qaXRpLy0vaml0aS0xLjE4LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFBZE9wdG5hMk5ZaVNTcHYwTy9Cd29IQlNtejRZaHB6Skh5aStmbk1SVFhGanA3QjhpL1lHNVo4SWZ1c3hCMXVmamNEMlNyZTFGM1IrblgzZnZ5N2dnPT0iLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImppdGkiOiAiYmluL2ppdGkuanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzLXRva2VucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkSlVmbGNFM2NVektpTXFRZ3NDdTA2RlB1OVVkSUpPMGJlWWJQaEhONGs2YXBnSnRpZmNvQ3RUOWJjeE9wWUJ0cEQya0NNNlNiemc0Q2F1c1cvUEtRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzLXlhbWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjE0LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzLXlhbWwvLS9qcy15YW1sLTMuMTQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb2tNSDdPWFhKN1lyTjlPazMvU1hybnU0aVg5eU9rKzI1bnFYNGltUzJucHV2VFlEbW8vUUVab3F3WmtZYUlEazNqVnZCT1RPSUVnRWhhTE95bkJTOWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJncGFyc2UiOiAiXjEuMC43IiwKLSAgICAgICAgImVzcHJpbWEiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc2RvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE2LjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNkb20vLS9qc2RvbS0xNi43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXU5U21jMkcxVVNTdE0rcy94MXJ1NVN4cmw2bVBZQ2JCeUcxVS9oVW1xYVZzbTR0Yk55UzdDaWNPU1J5dUdRWVpoVHUwaDg0cWtaWlEvSStkeml6U1Z3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFiYWIiOiAiXjIuMC41IiwKLSAgICAgICAgImFjb3JuIjogIl44LjIuNCIsCi0gICAgICAgICJhY29ybi1nbG9iYWxzIjogIl42LjAuMCIsCi0gICAgICAgICJjc3NvbSI6ICJeMC40LjQiLAotICAgICAgICAiY3Nzc3R5bGUiOiAiXjIuMy4wIiwKLSAgICAgICAgImRhdGEtdXJscyI6ICJeMi4wLjAiLAotICAgICAgICAiZGVjaW1hbC5qcyI6ICJeMTAuMi4xIiwKLSAgICAgICAgImRvbWV4Y2VwdGlvbiI6ICJeMi4wLjEiLAotICAgICAgICAiZXNjb2RlZ2VuIjogIl4yLjAuMCIsCi0gICAgICAgICJmb3JtLWRhdGEiOiAiXjMuMC4wIiwKLSAgICAgICAgImh0bWwtZW5jb2Rpbmctc25pZmZlciI6ICJeMi4wLjEiLAotICAgICAgICAiaHR0cC1wcm94eS1hZ2VudCI6ICJeNC4wLjEiLAotICAgICAgICAiaHR0cHMtcHJveHktYWdlbnQiOiAiXjUuMC4wIiwKLSAgICAgICAgImlzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lIjogIl4xLjAuMSIsCi0gICAgICAgICJud3NhcGkiOiAiXjIuMi4wIiwKLSAgICAgICAgInBhcnNlNSI6ICI2LjAuMSIsCi0gICAgICAgICJzYXhlcyI6ICJeNS4wLjEiLAotICAgICAgICAic3ltYm9sLXRyZWUiOiAiXjMuMi40IiwKLSAgICAgICAgInRvdWdoLWNvb2tpZSI6ICJeNC4wLjAiLAotICAgICAgICAidzNjLWhyLXRpbWUiOiAiXjEuMC4yIiwKLSAgICAgICAgInczYy14bWxzZXJpYWxpemVyIjogIl4yLjAuMCIsCi0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjYuMS4wIiwKLSAgICAgICAgIndoYXR3Zy1lbmNvZGluZyI6ICJeMS4wLjUiLAotICAgICAgICAid2hhdHdnLW1pbWV0eXBlIjogIl4yLjMuMCIsCi0gICAgICAgICJ3aGF0d2ctdXJsIjogIl44LjUuMCIsCi0gICAgICAgICJ3cyI6ICJeNy40LjYiLAotICAgICAgICAieG1sLW5hbWUtdmFsaWRhdG9yIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbnZhcyI6ICJeMi41LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiY2FudmFzIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc2VzYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc2VzYy8tL2pzZXNjLTIuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PWXU3WEV6amtDUTNDNVBzM1FJWnNRZk5wcW9KeVpaQTk5d2Q5YVdkMDVOQ3RDNXBXT2tTaEsybWtMNkhYUVI2L0N5MmxiTmRQbFpCcHVRSFhFNjNnQT09IiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqc2VzYyI6ICJiaW4vanNlc2MiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMvLS9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycy0yLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHlGd3locm8vSkVvZjZHaGUyaXoyTmNYb2oyc2xvTnNXci9Yc0VSREsvb2lQQ2ZhTmhsNU9OZnAralFkQVpSUVEwSUpXTnpIOXpJWkY3bGk5MWtoMnc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEvLS9qc29uLXNjaGVtYS0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZXM5NE0zblRJZnNFUGlzUmFmYWsrSERMZkhYbktCaFYzdlU1ZXFQY1MzZmxJV3FjeEpXZ1hIWGlleTNZcnBhTnNhblk1ZWkxVm9ZRWJPemlqdXE5QkE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGJiQ0g1ZENZVTVUOExjRWhodWg3SEo4OEhYdVczcXNJM1kwek9aRktmWkVIY3BXaUhVL0p4ems2MjlCcnNhYi9tTWlIUXRpOXdNUCs4NDVSUGUzVmc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5Ly0vanNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmRib3krbDd0QTNPR1c2Rmp5RkhXa1A1THVCeWoxVGszM0xqeXEwYXh5emRrOS8vSlNpMnUzZlAxUVNtZDFLTndxNlZPS1lHbEF1ODdDaXNWaXI2UHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbjUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbjUvLS9qc29uNS0yLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWG1PV2U3ZXlIWUgxNGNMZFZQb3lnK0dPSDNyWVgrK0twenJ5bEp3U1c5OHQzTmsrVThYT2w4RldLT2d3dHpkYjhsWEdmNnpZd0RVemVITVdmeGFzeWc9PSIsCi0gICAgICAiYmluIjogewotICAgICAgICAianNvbjUiOiAibGliL2NsaS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29uZmlsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uZmlsZS8tL2pzb25maWxlLTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01ZGduZFdPcmlZU201Y25ZYUpOaGFsTE5ES09xRnd5REIvcnIxRTlac0djaUd2S1BzOFIyeFlHQ2FjdWYzejZLMVlLRHoxODJmZCtmWTNjbjNwTXFYUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ1bml2ZXJzYWxpZnkiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjEuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbnBvaW50ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbnBvaW50ZXIvLS9qc29ucG9pbnRlci01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcC9uWGJoU0VjdTNwWlJka1cxT2ZKaHBzVnRXMWdkNFdhMWZuUWM5WUxpVGZBam4wMzEyZU1LaW1iZElRenVabDlhYTl4VUdhUmxQOVQvQ0pFL2RpdFE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzeC1hc3QtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanN4LWFzdC11dGlscy8tL2pzeC1hc3QtdXRpbHMtMy4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZZUUhaVFo4alNmbVdaMGl5emZ3aVU0V0RYNEhwSGJNQ1ozZ1BsV1lpQ2wzQm9lT1RzcUtCcW5UVmZIMnJZVDdlUDVjM3NWYmVTUEhubkpPYVRyV2l3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFycmF5LWluY2x1ZGVzIjogIl4zLjEuNSIsCi0gICAgICAgICJvYmplY3QuYXNzaWduIjogIl40LjEuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtNi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRjUzF1bCs5dG1lRDk1VCt4MjgvZWhMZ2Q5bUVOYTNMc3ZEVHR6bTN2eUJFTzdSUHB0dkFEK3Q0NFdWWGFValRCUmNycEZlRmxDOFdDcnVVUjQ1Nmh3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9rbGV1ciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9rbGV1ci8tL2tsZXVyLTMuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lVEl6bFZPU1VSK0p4ZERGZXBFWWNCTXRaOVFxZGVmK3JueldkUlp1TWJPeXd1NXRPMncyTjdycWpvQU5aNWs5dnl3aEw2QnIxVlJqVUlnVFF4NEU4dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2tsb25hIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tsb25hLy0va2xvbmEtMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRoRzM0RFhBVEw1aFN4SmJJZXhDZnQ4RkNoRlh0bXNrb1pZbm9QV2pYUXVlYldZQ05rVmVWM0trR2VnQ0s5Q1Axb3N3SS92UWliUzJHWTdFbS9zSkpBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4yMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5Ly0vbGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5LTAuMy4yMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdE4wTUN6eVdub3ovNG5IUzZ1eGRsRldvVVpUN0FCcHR3S1BRNTJFYTdVUms2dmxsODhiV0JWaG9kdG5sZkV1Q2NLV05Hb2MrdUdidzFjd2E5SUtoL3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGFuZ3VhZ2UtdGFncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sYW5ndWFnZS10YWdzLy0vbGFuZ3VhZ2UtdGFncy0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcUpobE85Y0dYaTZoQkdLb3hFRy9zS1pEQUhENUhudTlIczRXYk9ZM3BDV1hEaHcwTjh4MU5lbk56bTJFbk5Ma0xrazdKMlNkeEFrRFNiYjZmdFQrVVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibGFuZ3VhZ2Utc3VidGFnLXJlZ2lzdHJ5IjogIn4wLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGF1bmNoLWVkaXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sYXVuY2gtZWRpdG9yLy0vbGF1bmNoLWVkaXRvci0yLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSnBEQ2NRbnlBQXpaWmFaN3ZFaVNxTDY5MHc3ZEFFeUxhbytLQzk2ekJwbG5ZYkpTN1RZTmp2TTNNN3kzZEd6K3Y3YUlzSmszaGxsV3VjMGtXQWp5UlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4wLjAiLAotICAgICAgICAic2hlbGwtcXVvdGUiOiAiXjEuNy4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sZXZlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZlbi8tL2xldmVuLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xc2RhK0g4alRhVWFOL3g1dnpXMnJ6Yys4Unc0VEFRLzRLakI0Nkl3SzVWSCtJbFZlZWVqZS9Fb1pScGlYdklxakZnSzg0UWZmcVB6dEdJM1ZCTEcxQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xldm4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGV2bi8tL2xldm4tMC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStiVDJ1SDRFNUxHRTdoL24zZXZjUy9zUWxKWENwSXA2eW04T1dKNWVWNis2N0RzcWwvTGFhVDdxSkJBdDJyemZvYS81UUJHQmh4RGl4MWRNdDJrUUtRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIiwKLSAgICAgICAgInR5cGUtY2hlY2siOiAifjAuNC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGlsY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpbGNvbmZpZy8tL2xpbGNvbmZpZy0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdXRXT3QvR0h6dVV4bkxLeEI2ZGs4MVJvT2VvTmVIZ2JyWGl1R2s0eXlGNXFsUnoraUlWV3U1NkUyZnFHSEZyWHowUU5VaExCLzhuS3F2Ukg2NkpLR1E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGluZXMtYW5kLWNvbHVtbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGluZXMtYW5kLWNvbHVtbnMvLS9saW5lcy1hbmQtY29sdW1ucy0xLjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3lseWxlc1pRL1BWMjlqaEVEbDNVZmpvNlpYN2dDcUpyNUY3UEtycWM5M3Y3ZnpTeW10MUJwd0VVOG5BVVhzOHF6enZxaGJqaEs1UVpnNk10L0hrQmc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9hZGVyLXJ1bm5lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2FkZXItcnVubmVyLy0vbG9hZGVyLXJ1bm5lci00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM1IvMU0reVMzajVvdTgwTWU1OWo3RjlJTXM0UFhzM1ZxUnJtMFRVM0FiS1B4bG1wb1kxVE5zY0pWL29HSlhvOHFDYXRGR1RmRGJZNlc2aXBHT1lYZmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjExLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvYWRlci11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2FkZXItdXRpbHMvLS9sb2FkZXItdXRpbHMtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhYcXBYb0lOZkZoZ3VhOXhpcUQ4ZlBGSGdrb3ExbW1tcEU5MldsRGJtOXJOUmQvRWJSYitHcWY5MDhUMkRNZnVIampKbGtzaUsyUmJIVk9kRC9NcVN3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJpZy5qcyI6ICJeNS4yLjIiLAotICAgICAgICAiZW1vamlzLWxpc3QiOiAiXjMuMC4wIiwKLSAgICAgICAgImpzb241IjogIl4yLjEuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9jYXRlLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDdodzlwSStXdnV3TkpYd2s1elZIcHloSXF6ZzJxVGxrbEpPZjBtVnhHU2JlM0ZwMlZpZVpjZHVOWWphTERveTZwOXVHcFFFR1dHODdXcE1LbE5xOGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC1sb2NhdGUiOiAiXjQuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZGFzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMTcuMjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC8tL2xvZGFzaC00LjE3LjIxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12MmtERWU1N2xlY1R1bGFESXVOVFB5M1J5NGdMR0o2WjFPM3ZFMWtyZ1haTnJzUStMRlRHSFZ4VmpjWFBzMTdMaGJaVkdlZEFKdjhYWjF0dmo1RnZTZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2guZGVib3VuY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmRlYm91bmNlLy0vbG9kYXNoLmRlYm91bmNlLTQuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVDF5RHpEWUVvWVdoblNHbnBFLzRLajFmTFprREZ5cVJiN2ZOdDZGZFlPU3hsVVdBdHA0MkVoNldiMHJHSXYvbTlCZ283eDRHaFFibTVZczRTRzVvdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2guZmxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guZmxvdy8tL2xvZGFzaC5mbG93LTMuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mZjNCWC90U2lvbytYb2pYNE1Pc09NaEp3MG5ab1VFRjAxMUxYOGc4ZDNndmpWYnhkODljQ2lvNEJDWHJvbmp4Y1RVSUpVb3FLRVVBK240Q3F2dlJQdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2gubWVtb2l6ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gubWVtb2l6ZS8tL2xvZGFzaC5tZW1vaXplLTQuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2orTnptZ25RelRBWVhjc0hZTGdpbWx0T1YxTVhIdGxPV2Y2R2pMOUtqOEdLNUZJbnc1Sm90eHZiT3MrSXZWMS9Eem8wNC9mQ0dmTFZzN2FYYjRBZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2gubWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lcmdlLy0vbG9kYXNoLm1lcmdlLTQuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wS3BqcVhSVnZyWXlDc1gxc3dSL1hUSzB2YTZWUWtRTTZNTm83UHFXNzdCeWpBaG9BUkE4RWZyUDFONCtLbEtqOFlTMFpVQ3RSVC9ZVXVoeVlEdWpJUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2guc29ydGJ5IjogewotICAgICAgInZlcnNpb24iOiAiNC43LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5zb3J0YnkvLS9sb2Rhc2guc29ydGJ5LTQuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IRFdYRzhpc01udEF5UkY1dlo3eEt1RXZPaFQ0QWhsUnQvM2N6VFNqdkdVeGpZQ0JWUlFZNDhWaURIeWZZejlWSW9Ca1c0VE1HUU5hcHgrbDNSVXdkQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2gudW5pcSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gudW5pcS8tL2xvZGFzaC51bmlxLTQuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14ZkJhWFFkOXJ5ZDlkbFNEdm52STBsdnhmTEpsWUFaelhvbVVZekxLdFVlT1F2T1A1cGlxQVd1R3RyaFdlcWFYSzloaG9NL2l5SmM1QVYrWGZzWDNIUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb29zZS1lbnZpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9vc2UtZW52aWZ5Ly0vbG9vc2UtZW52aWZ5LTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1seXV4UEdyL1dmaHJsZW0yQ0wvVWNuVWMxemNxS0FJbUJEenVrWTdZNUYveVFpTmRrbzYrZlJMZXZsdzFIZ015U3c3ZjYxMVVJWTQwOEV0eFJTb0szUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqcy10b2tlbnMiOiAiXjMuMC4wIHx8IF40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAibG9vc2UtZW52aWZ5IjogImNsaS5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG93ZXItY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb3dlci1jYXNlLy0vbG93ZXItY2FzZS0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2ZtM2wzTkFGOVdmTjZXM0pPbWY1ZHJ3cFZxWDc4SnRvR0ozQTZXMGE2Wm5sZE00MXcyZlY1RDQ5MHBzS0ZUcE1kczhUSnNlL2VITEZGc05ISGpIZ2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTUuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LcE5BUlFBM0l3ditqVEEwdXRVVlZicmgrSmxycjFGdjBlNTZHR3pBRk9YTjdkay9GdmlhRFc4TEhtSzUyRGxjSDRXUDJuNmdJOHZOMWFlc0JGZ285dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ5YWxsaXN0IjogIl4zLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbHotc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2x6LXN0cmluZy8tL2x6LXN0cmluZy0xLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDViZ0pXcHhKTnN3YlU3cUNyVjB0SUtRQ2FTM2JsUERycUtXeCtReHp1ekwxekdVemlqOVhDV0xyU0xzSlB1NXQrZVdBL3ljZXR6WUFPNUlPTWNXQVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJsei1zdHJpbmciOiAiYmluL2Jpbi5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWFnaWMtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWdpYy1zdHJpbmcvLS9tYWdpYy1zdHJpbmctMC4yNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SbUYwQXNNemd0MjVxenFxTGMxK01iSG1oZHgwb2pGMkZ2czRYbk9xejJaT0JYenprRXdjL2RKUVpDWUhBbjd2MWpiVk9qQVpmSzhtc1JuNEJ4TzRWUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzb3VyY2VtYXAtY29kZWMiOiAiXjEuNC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYWtlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nM0ZlUDIwTE53aEFMYi82Q3o2RGQ0RjJuZ3plMGp6N3RienJEMndBVitvOUZlTkhlNHJMK3lLMm1kMEovZmlTZjFzYTFBRGhYcWk1K29Wd09NL2VHdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWFrZWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlZXJyb3IvLS9tYWtlZXJyb3ItMS4wLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbXFDdlVobXQ0M21hZGxwRnpHNEJRekcyWjNtNnR2UUROS2RDbFpuTzNWYkl1ZEpZbXhzVDBGTkpNZWlCMitKVFNsVFFUU2JVOFFkZXNWbXdKY21MZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0bXBsIjogIjEuMC41IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZG4tZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZG4tZGF0YS8tL21kbi1kYXRhLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pVjNYTkt3MDZqNVE3bWk2aCs5dmJ4MjNUdjdKa2pFVmdLSFc0cGltd3lER1dtME9JUW50SkordTFDNm1nNm1LMUVhVHY0MlhRN3c3Nnl1ekg3TTJjQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZWRpYS10eXBlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZWRpYS10eXBlci8tL21lZGlhLXR5cGVyLTAuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kcStxZWxROWFrSHBjT2wvZ1VWUlR4VklPa0FKMXdSM1FBdmI0UnNWalM4b1ZvRmpER1RjNjc5d0pZbVVta25VRjVId01MT2diNU8rYTNLeGZXYXBQUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21lbWZzIjogewotICAgICAgInZlcnNpb24iOiAiMy41LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lbWZzLy0vbWVtZnMtMy41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVFUnpMc3h6bGxjaGFkdmJQczVhb2xIaDY1SVNwS3BNK2NjTGJPSjgvdnZwQkttQVdmK2xhN2RYRnk3TXIweVNIYmRIckZ2NWtHRkNVSEhlNkdGRW13PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZzLW1vbmtleSI6ICJeMS4wLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1kZXNjcmlwdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXJnZS1kZXNjcmlwdG9ycy8tL21lcmdlLWRlc2NyaXB0b3JzLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jQ2k2ZzMvWnIxaXFRaTZ5U2JzZU0xWHZvb2E5OE4wdzMxanpVWXJYUFgyeHFPYm1GR0hKMHRRNXU3NEgzbVZoN3dMb3VUc2VaeVlJcTM5ZzhjTnAxdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2Utc3RyZWFtLy0vbWVyZ2Utc3RyZWFtLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hYnYvcU9jdVBmazNVUlBmRHptWlUxTEttdXc4a1QrMG5JSHZLcktnRnJ3aWZvbC9kb1djZEE0WnFzV1E4RU5yRktrZDY3TWZwby9Mb3ZiSVVzYnQzdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZTIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UyLy0vbWVyZ2UyLTEuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04cTdWRWdNSlc0Sjh0Y2ZWUHk4ZzA5TmNRd1pkYndGRXFoZS9XWmtvSXpqbi8zVEdEd3RPQ1l0WEd4QTNPOHRQenBjekNDRGd2K1AyUDV5MDBaSk9PZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXRob2RzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ldGhvZHMvLS9tZXRob2RzLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pY2xBSGVOcU5tNjh6RnRuWjBlKzFMMnlVSWR2ek5vYXVLVTRXQkEzVnZIL3ZQRmllRjdxZlJsd1VaVStEQTlQOWJQWElTOTB1bHhvVW9DSDIzc1Yydz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pY3JvbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWljcm9tYXRjaC8tL21pY3JvbWF0Y2gtNC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURNeStFUmNFVzJxOFoyUG8rV05YdXczYzVZYVVTRmpBTzVHc0pxZkVsN1VqdnRJdUZLTzZackt2Y0l0ZHk5OGR3RkkyTjF0ZzN6TklkS2FRVCthTmRBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJyYWNlcyI6ICJeMy4wLjIiLAotICAgICAgICAicGljb21hdGNoIjogIl4yLjMuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS8tL21pbWUtMS42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXgwVm44c3BJK3d1SjFPNlM3Z25iYVFnOFB4aDROTkhiN0tTSU5tRVdLaVBFNFJLT3BsdmlqbitOa21ZbW1SZ1A2OG1jNzBqMkViZVRGUnNyc3dhUWVnPT0iLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgIm1pbWUiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbWUtZGIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWUtZGIvLS9taW1lLWRiLTEuNTIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1BVNHVWN2RZbHZ0V0p4d3d4SEQwUHVpaFZOaUU3VHlBYlE1U1d4RENCOW1VWXZPZ3JvUU93WVFRT0tQSjhDSWJFKzFFVFZsT29LMVVDMm5VM2dZdmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW1lLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjM1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLXR5cGVzLy0vbWltZS10eXBlcy0yLjEuMzUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpEWStiUG01elRURitZcENyQVU5bkswVWdJQ1lQVDBRdFQxTlpXRnY0cysrVE5rY2dWYVQwZzYrNFIydUk0TWpRanp5c0hCMXp4dVdMNTBoemFlWGl3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbWUtZGIiOiAiMS41Mi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbWljLWZuIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWljLWZuLy0vbWltaWMtZm4tMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9xYk9rNW9FUWVBWjhXWFd5ZGx1OUhKano5V1ZkRUl2YW1NQ2NYbXVxVVlqVGtuSC9zcXNXdmhRM3Znd0tGUlIxSHBqdk5CS1EzN25iSmdZekdxR2NnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWluLWluZGVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW4taW5kZW50Ly0vbWluLWluZGVudC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSTlqd01uMDdTeS9Jd09qM3pWa1ZpazJKVHZncGF5a0RaRWlnTDZSeDZOOUxiTXl3d1VTTXR4RVQrN2xWb0RMTGQzTzNJWHdKd3Z1dW5zOFVCL0hlQWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiMi43LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luLy0vbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4tMi43LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFrN0hjZ2FQa0dHNmVENzdtTHZaUzFubXhsYW8zais5UGtyVDlVYzdIQUUxaWQzRjQxK0RkQlJZUllrYnlmTlJHem04L1lXdHpodzduVlBtd2hxVFF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS93ZWJwYWNrIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2VicGFjayI6ICJeNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL25vZGVfbW9kdWxlcy9hanYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNSdTFrcGNPOXlMdFl4Qkt2cWZUZWg5S3paRXdPM1NUeVgxSFQrNENhRHpDNkhwVEdZaEloUEl6ajlYdUtVN0tZRHduYWVoNWhjT3dqeTFRdUp6QlBBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIiwKLSAgICAgICAgInVyaS1qcyI6ICJeNC4yLjIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Vwb2JlcmV6a2luIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi1rZXl3b3Jkcy8tL2Fqdi1rZXl3b3Jkcy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWUNTL0pORkFVeXI1dkF1aGsxRFdtMUNCeFJIVzlMYkoyb3pXZWVtcklxcGJzcUtqSFZ4WVB5aTVHQzByalpJVDVKeEozdmlyVlRTOHdrNGkvWitrcnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFqdiI6ICJeOC44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL25vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXNjaGVtYS10cmF2ZXJzZS8tL2pzb24tc2NoZW1hLXRyYXZlcnNlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuOSIsCi0gICAgICAgICJhanYiOiAiXjguOS4wIiwKLSAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICJhanYta2V5d29yZHMiOiAiXjUuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMi4xMy4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vd2VicGFjayIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWluaW1hbGlzdGljLWFzc2VydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWFsaXN0aWMtYXNzZXJ0Ly0vbWluaW1hbGlzdGljLWFzc2VydC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVXRKY0FENHlFYUd0alBleld1Tzl3QzRud1VuVkgvOC9JbTN5RUhRUDRiNjdjWGxEL1FyOWhkSVRDVTF4RGJTRVhnMlhLTmFQOGpzUmVWN3ZRZDAwL0E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWluaW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0zLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjdwNjNoUmlBancxTkRFd3cxVzdpMzcrQnlJck9XTzVYUVFBelozVk9jTDBQTnlid3BmbVYvTjA1ekZBendROVVTeUVjWDZ0M1VPK0s1YXFCUU9JSHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl4xLjEuNyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWluaW1pc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1pc3QvLS9taW5pbWlzdC0xLjIuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMnl5QVI4cUJrTjNZdWhlSmFuVXBXQzVVM2JiNW9zRHl3TkI4UnpEVmxEd0RIYm9jQUp2ZXFxajF1OCtTVkQ3amtXVDR5dnNIQ3BXcXFXcUF4YjB6Q0E9PSIsCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ta2RpcnAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTAuNS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GUCtwOFJCOE9XcEYzWVpCQ3JQNWd0QURtdFhBcEI1QU1Mbit2ZHlBK1B5eENqckNzMDBtanlVb3pzc08zM2N3RGVUM3dOR2RMeEo1TS8vWXF0SEFKdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW5pbWlzdCI6ICJeMS4yLjYiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgIm1rZGlycCI6ICJiaW4vY21kLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zR2tQeCtWak10bUE2TVgyN29BNEZCRkVMRkNaWjRTNFhxZUdPWEN2Njh0VCtqYjN2ay9SeWFLV1AwUFRLeVd0bUxTTTBiK2FkVVRFdmJzMVBFYUgydz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tdWx0aWNhc3QtZG5zIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL211bHRpY2FzdC1kbnMvLS9tdWx0aWNhc3QtZG5zLTcuMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yZXpuUEpQOHoyQkZMWDUwdGYwTHVPRHJwSU5xUDFSVkltL0NPYmJUY0JSSVRRZ21DL1RqY1JFRjFOZVRCekljUjVYTy91a1dvK1lIT2pCYkZ3SXVwZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkbnMtcGFja2V0IjogIl41LjIuMiIsCi0gICAgICAgICJ0aHVua3kiOiAiXjEuMC4yIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJtdWx0aWNhc3QtZG5zIjogImNsaS5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbXoiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXovLS9tei0yLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItejgxR05PN25uWU1FaHJHaDlMZXltb0U0K1lyMFduNU1jSElaTUs1Y2ZRQ2wrTkRYMDhzQ1pnVWM5LzZNSG5pOUlXdUZMbTFaM0hUQ1h1Mno5Zk42MlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW55LXByb21pc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMC4xIiwKLSAgICAgICAgInRoZW5pZnktYWxsIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbmFub2lkIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25hbm9pZC8tL25hbm9pZC0zLjMuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQkdjcU1NSnVUb0Y3aTFydCsyUFdTTlZuV0lrR0NVNzhqQkczUnhPL2JabG5aUEsyQ21pMlFhZmZ4R08vMlJ2V2k5c0wrRkFpUmlYTWdzeXhRMURJREE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvYWkiCi0gICAgICAgIH0KLSAgICAgIF0sCi0gICAgICAiYmluIjogewotICAgICAgICAibmFub2lkIjogImJpbi9uYW5vaWQuY2pzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8IF4xMy43IHx8IF4xNCB8fCA+PTE1LjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbmF0dXJhbC1jb21wYXJlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25hdHVyYWwtY29tcGFyZS8tL25hdHVyYWwtY29tcGFyZS0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1dORDhlaTNWdE5DOWg3VjYwcWZmM1NWb2JIcjk5NkNUd2d4dWJneVFZRXBnMjkwaDlKMGJ1eUVDTk5KZXhrRm01c09hamg1RzExNlJZQTFjOFpNU3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbmF0dXJhbC1jb21wYXJlLWxpdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmF0dXJhbC1jb21wYXJlLWxpdGUvLS9uYXR1cmFsLWNvbXBhcmUtbGl0ZS0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVGorSFREU0pKS2FabmZpdXcraWFGOXNrZFBwVG8yR3RFbHk1SkhuV1YvaGZ2MlFqLzlSS3NHSVNRdExoMm94M2w1RUFHdzQ4N2huQmVlMHNJSjZ2Mmc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbmVnb3RpYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uZWdvdGlhdG9yLy0vbmVnb3RpYXRvci0wLjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK0VVc3FHUExzTStqL3pkQ2haanNuWDUxZzRYckhGT0lYd2ZuQ1ZQR2xRay9rNWdpYWtjS3N1eENPYkJSdTZEU205b3B3L082c2xXYkpkZ2hRTTRiQmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9uZW8tYXN5bmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVvLWFzeW5jLy0vbmVvLWFzeW5jLTIuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZZDNVRVM1bVdDU3FSK3FOVDkzUzNVb1lVa3FBWjlsTGc4YTdnOXJpbXNXbVlHSzhjVlRvQTQvc0YzUnJzaGR5VjNzQUdNWFZVbXBNWU93K2RMcE91dz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9uby1jYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vLWNhc2UvLS9uby1jYXNlLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mZ0FOM2pHQWgrUm94VUdaSFRTT0xKSXFVYzJ3bW9Cd0dSNHRicE5BS21tb3ZGb1dxME9kUmtiMFZrbGRSZU8yYTJpQlQvT0V1bEc5WFNVYzEwcjN6Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb3dlci1jYXNlIjogIl4yLjAuMiIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25vZGUtZm9yZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1mb3JnZS8tL25vZGUtZm9yZ2UtMS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRQRXRPZU12RjlWTWNZVi8xV2I4Q1BvVkFYdHA2TUtNbGNiQXQ0ZGRxbUdxVUo2ZlFaRlhrTlpOa05sZmV2dE5rR3RhU29YZi92Tk5OU3ZncmRYd3RBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYuMTMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1pbnQ2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWludDY0Ly0vbm9kZS1pbnQ2NC0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzVsejkxeFNPZW9YUDZEdWx5SGZsbHBxK0VnMDBNV2l0WklidFBmb1NFdnFJSGRsNWdmY1k2aFl6RFduajBxRDV0ejUyUEkwOHU5cVV2U1ZlVUJlSHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1yZWxlYXNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1yZWxlYXNlcy8tL25vZGUtcmVsZWFzZXMtMi4wLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RenNZS1doWFRXeDhoMWtJdnFmbkMrK28wcEVtcFJRQS9hZW5BTHNMMkY0cHFOVnI3WXpjZE1sRGlqNVdCbndmdFJiSkNOSkwvTzd6ZEtheEtQSHFnUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ub3JtYWxpemUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtcGF0aC8tL25vcm1hbGl6ZS1wYXRoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZVpzNUxzM1d0Q2lzSFdwOVMyR1V5OGRxa3BHaTRCVlN6M0dhcWlFNmV6dWIwNTEyRVN6dFhVd1VCNkM2SUtiUWtZMlBuYi9tRDRXWW9qQ1J3Y3dMQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9ybWFsaXplLXJhbmdlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vcm1hbGl6ZS1yYW5nZS8tL25vcm1hbGl6ZS1yYW5nZS0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYmRvay9YdktJSTNuVXBrbG5WNlAyaHh0TU5yQ2JvT2pBY3lCdVFuV0VoTzY2NUZ3clNOUnhVK0FxcHN5dk82TGdHWVBzcE4rbHU1Q0x0dzRqUFJLTkE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25vcm1hbGl6ZS11cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9ybWFsaXplLXVybC8tL25vcm1hbGl6ZS11cmwtNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURsTCtYd095M054QVE4eHVDMG9rUGdLNDZpdVZOQUswMVlON1J1ZVlCcXFGZUdzQmpWOVhtQ0F6QWRndCs2NjdiQ2w1a1BoOUVxS0tEd25hUEcxSTdBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbnBtLXJ1bi1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25wbS1ydW4tcGF0aC8tL25wbS1ydW4tcGF0aC00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzQ4V3paVzc3N3poTklybjdneE9sSVNOQXFpOVpDL3VRRm5SZGJlSUhoWmhDQTZVcXBrT1Q4VDFHN0J2ZmRnUDRFcjhnRjRzVWJhUzBpN1F2SWZDV3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGF0aC1rZXkiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL250aC1jaGVjayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9udGgtY2hlY2svLS9udGgtY2hlY2stMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxxanJqbWFPb0FuV2ZNbUJQTCtYTm55blpoMitzd3hpWDNXVUUwczR5RUhJNm0rQXdySzJVWk9pbUlSbDNYLzRRY3RWcVM4QWlaakZxeU9Hck1YYi93PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJvb2xiYXNlIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmI1NS9udGgtY2hlY2s/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ud3NhcGkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbndzYXBpLy0vbndzYXBpLTIuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11YjVFNCtGQlBLd0FaeDBVd0lRT2pZV0dIVEVxNXNQcUhRTlJOOFo5ZTRBN3UzVGoxd2VMSnNMNTl5SDl2bXZxRXRCSGFPbVQ2Y1lRS0laT3hwMzVGUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1hc3NpZ24vLS9vYmplY3QtYXNzaWduLTQuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ySmdUUW5rVW5IMXNGdzh5VDZWU1UzekQzc1dtdTZzWmhJc2VZOFZYK0dSdTNQNkY3RnUrSk5Eb1hma2xFbGJMSlNuYzNGVVFIVmU0Y1U1aGorQmNVZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWhhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWhhc2gvLS9vYmplY3QtaGFzaC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUlNuOUY2OFBqSDlIcXRsdHNTbnFZQzFYWG9XZTlCanU1KzIxM1I5OGNOR3R0YWc5cTl5QU9UemRic3F2SWE3YU5tNVdmZkJaRnBXWXIyYVdya2xXQXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWluc3BlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEyLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1pbnNwZWN0Ly0vb2JqZWN0LWluc3BlY3QtMS4xMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nZVV2ZGs3YytlaXpNTlVEa1JwVzF3SndnZk9pT2VIYnhCUi9oTFhLMWFUNnptVlNPMGpzUWNzN2ZqNk1Hdzg5akMvY2pHZkxjTk9ydE1ZdEdxbTgxZz09IiwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtaXMvLS9vYmplY3QtaXMtMS4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNjeURzeUhndG1pN0k3RGZTU0kyTERwNlNLMmx3dnRiZzBwMFIxZTBSdlRxRjVjZUd4K0syZGZTam0xYktETVZDRkVEQVF2eStvOGM2YTdWdWpPZGR3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWtleXMvLS9vYmplY3Qta2V5cy0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnVBRVNVT1VNcmxJWE9mSEt6RDZicFB1M3RZdDN4dmpOZFJJUStGZVQwbE5iNEs4V1I3MENhRHhodU5ndVMyWEcrR2preU13T3pzTjVaa3RJbWZoTEE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QuYXNzaWduIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC5hc3NpZ24vLS9vYmplY3QuYXNzaWduLTQuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xbXhLZjBlNThidnlqU0N0S1lZNHNSZTlpdFJrM1BKcHF1Sk9qZUlrejg4NUNjemNJNEl2SkpETFBTNzJvb3d1U2grcEJ4VUZST3BYK1RVKytoeGhaUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJoYXMtc3ltYm9scyI6ICJeMS4wLjMiLAotICAgICAgICAib2JqZWN0LWtleXMiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LmVudHJpZXMvLS9vYmplY3QuZW50cmllcy0xLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGVUUHpvNFp2ZzNwbWJRM3JESzY5Umw4R1F2SXFNV3Vicmt4T05HOS9vanRGRTJyRDlmak1LZlNJNUJ4VzNvc1JIMW02VmR6bXFLOG9BWTlhVDR4NXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QuZnJvbWVudHJpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LmZyb21lbnRyaWVzLy0vb2JqZWN0LmZyb21lbnRyaWVzLTIuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WY2lEMTNkc3dDNGoxWHQ1Mzk0V1I0TXptQVFtbGdONzJwaGQvcmlOcDl2dEQ3dHA0UVFXSjBSNHd2Y2xYY2FmZ2NZSzh2ZUhSZWQyVzZYZUdCdmNmZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnMvLS9vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9ycy0yLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbHErNjFnMjZFL0JnSHYwWlRGZ1J2aTdOTUVQdUF4TGtGVTdydWtYamMvQWx3SDRBbTV4WFZuSVh5M3VuMWJnL0pQYlhIcml4UmtLMWl0VXp6UGlJalE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJyYXkucHJvdG90eXBlLnJlZHVjZSI6ICJeMS4wLjUiLAotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4yLjAiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjEuMiIsCi0gICAgICAgICJzYWZlLWFycmF5LWNvbmNhdCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QuaGFzb3duIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC5oYXNvd24vLS9vYmplY3QuaGFzb3duLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CNVVJVDNKMVcrV3VXSVU1NWgwbWpsd2FxeGlFNXZZRU5KWElYWjRWRmUwNXBOWXJrS3VLMFUvNmFGY2IwcEt5d1lKaDdJaGZvcVVmS1ZtckpKSFpIdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC52YWx1ZXMvLS9vYmplY3QudmFsdWVzLTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVlZUa0QxdkVOQ3NBY3dOczlrNmplYTJ1SEMvWDArSmNqRzhZQTYwRk41Q01hSm1HOTV3VDlqZWsveFg5bm9ybnFHUnJCa0t0enVBdTJ3dUhwS3F2dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2J1ZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYnVmLy0vb2J1Zi0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFgxd3UwQW1BZFBxT0wxbVdocW1sT2Q4a09JWlF3R1p3NnJoN3VieTlmVGM1bGhhT1dGTFgzSTZSMWhyRjlrM3pVWTQwZTZpZ3NMR2tEWEs5MkxKTmc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb24tZmluaXNoZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb1ZsemtnM0VOQWhDazJ6ZHY3SUp3ZC9RVUQ0ejJSeFJ3cGtjR1k4cHNDVmNDWVpOcTR3WW5WV0FMSE0rYnJ0dUpqZVBXaVlGL0NsbXVEcjhDaDUra2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZWUtZmlyc3QiOiAiMS4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb24taGVhZGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbi1oZWFkZXJzLy0vb24taGVhZGVycy0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcFpBRStGSkxveUlUeXRkcUswVTVzK0ZJcGpOMEpQM096RmkvdThSeCtFVjUvVytKVFdHWEc4eEZ6ZXZFN0FqQmZEcUh2Lzh2TDhxUXNJaEhucVJrckE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vbmNlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uY2UvLS9vbmNlLTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sTmFKZ0krMlE1VVJRQmtjY0VLSFRRT1BhWGRVeG5aWkVsUVRaWTBNRlVBdWFFcWUxRStOeXZnZHovYUl5Tmk2WjlNek81ZHYxSDhuNTgvR0VMcDMrdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3cmFwcHkiOiAiMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb25ldGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbmV0aW1lLy0vb25ldGltZS01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta2JwYVNTR0pUV2RBWTVLUFZlTU9LWFNyUHRyOEM4Qzd3b2RKYmNzZDUxalJubUQrR1p1OFkwVm9VNkRtNVo0dldyMElnLzFOS3VXUktmN2o1YWFZU2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWltaWMtZm4iOiAiXjIuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb3BlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vcGVuLy0vb3Blbi04LjQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3g4MU5DTDcxOW9OYnNxLzNtaCtoVnJBV21GdUVZVXFycS9JdzNrVXpIOFJleXBUOVFRMEJMb0pTNy9HOWs2TjgxWGpXNHFIV3RqV3dlLzllTHkxRVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLWxhenktcHJvcCI6ICJeMi4wLjAiLAotICAgICAgICAiaXMtZG9ja2VyIjogIl4yLjEuMSIsCi0gICAgICAgICJpcy13c2wiOiAiXjIuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29wdGlvbmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjkuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3B0aW9uYXRvci8tL29wdGlvbmF0b3ItMC45LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTc0UmxZNUZDbmhxNGpSeFZVUEtEYVJ3clZOWE1xc0dzaVc2QUp3NFhLOGhtdG0xMHdDMHlwWkJMdzVJSXA4NU5aTXI5MStxZDFSdnZFTndnN2pqUkZ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlZXAtaXMiOiAiXjAuMS4zIiwKLSAgICAgICAgImZhc3QtbGV2ZW5zaHRlaW4iOiAiXjIuMC42IiwKLSAgICAgICAgImxldm4iOiAiXjAuNC4xIiwKLSAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIiwKLSAgICAgICAgInR5cGUtY2hlY2siOiAiXjAuNC4wIiwKLSAgICAgICAgIndvcmQtd3JhcCI6ICJeMS4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wLWxpbWl0IjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vLzg4bUZXU0p4OGx4Q3p3ZEFBQlRKTDJNeVdCMTIrZUlZN01ETDJTcUxtQWtlS1U5cXhSdld1U3lUam0zRlVtcEJFTXVGZmNrQUlxRWFWR1VEeGI2dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLXRyeSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wLWxvY2F0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxvY2F0ZS8tL3AtbG9jYXRlLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNzlaWi8wd0F4S0d1M29ZTWx6OGp5L2tiaHNOclM3U0taN1B4RUhCZ0o1K0YybXRGVzJmSzJjT3RCaDFjSFlrUXNiekZWN0krRW9SS2U2WXQwb0s3QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4yLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wLXJldHJ5IjogewotICAgICAgInZlcnNpb24iOiAiNC42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtcmV0cnkvLS9wLXJldHJ5LTQuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zMTJJZDM5NkViSmR2Uk9ObG5nVXgwTnlkZnJJUTVsc1l1MHpuS1ZVelZ2QXJ6RUl0MDhWMXFodHlFU2JHVmQxRkdYN1VLdGlGcDV1d0taZE04d0l1UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvcmV0cnkiOiAiMC4xMi4wIiwKLSAgICAgICAgInJldHJ5IjogIl4wLjEzLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcC10cnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC10cnkvLS9wLXRyeS0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjRuUEFWVEFVMEI5RDM1L0drM3VKZi83WFliUWN5b2hTS2R2QXhJUlNOZ2hGbDRlNzFoVm9HbkJOUXo5Y1dhWHhPMkkxMEtUQyszak1kdnZvS3c2ZFE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXJhbS1jYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcmFtLWNhc2UvLS9wYXJhbS1jYXNlLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SWGxqN3pDWW9rUmVxV3BPUEg5b1lpdlV6TFlaNXZBUElmRW1DVE5WaW9zQzc4RjhGMEg5eTdUN2dHMk0zOXltZ3V0eEY1Z2NGRXN5WlFTcGg5QnAzQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkb3QtY2FzZSI6ICJeMy4wLjQiLAotICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXJlbnQtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcmVudC1tb2R1bGUvLS9wYXJlbnQtbW9kdWxlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HUTJFV1JwUVY4L28rQXc4WXF0ZlpaUGZOUldaWWtiaWRFOWs1cnBsL2hDM3Z0SEhCZkdtMklmaTZxV1YrY29ER2tyVUtaQXhFM0xvdDVrY3NSbGgrZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsc2l0ZXMiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhcnNlLWpzb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2UtanNvbi8tL3BhcnNlLWpzb24tNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF5Q0t2bS9waENHeE9rWVJTQ004MmlEd2N0OC9Fb25TRWdDU3hXeEQ3dmU2akhnZ3NGbDRmWlZRQlBSTmdRb0tpdVYvb2RoRnJHelFYWndiaWZDOFJnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjAuMCIsCi0gICAgICAgICJlcnJvci1leCI6ICJeMS4zLjEiLAotICAgICAgICAianNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMiOiAiXjIuMy4wIiwKLSAgICAgICAgImxpbmVzLWFuZC1jb2x1bW5zIjogIl4xLjEuNiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhcnNlNSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZTUvLS9wYXJzZTUtNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9mbi9DVEZ6UkdUVHh3cE5FczlQUDkzZ1hTaEhjVHEyNTVuelJZU0tlOEFrVnBaWTdlMWZwbVRmT3lvSXZqUDVIRzdaMlpNN1ZTOVBQaFFHVzJwT3B3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhcnNldXJsIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcnNldXJsLy0vcGFyc2V1cmwtMS4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNpeWVPeEZUL0paeU41bTB6OVBmWHc0U0NCSjZTeWd6MURwbDB3cWpsaERFR0dCUDFHbnNVVkVMMHA2M2hvRzFmY2ozZkh5blhpOU5ZTzRuV09MK3FRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGFzY2FsLWNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFzY2FsLWNhc2UvLS9wYXNjYWwtY2FzZS0zLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdVdsR1QzWVNuSzl4M0JRSmFPZGNad3JuVjZoUHBkOGpGSDEvdWNwaUxSUGgvMnpDVkpLUzE5RTRHdllIdmFDY0FDbjNmb1haMGNMQjlXcngxS0dlNWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm8tY2FzZSI6ICJeMy4wLjQiLAotICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLWV4aXN0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4aXN0cy8tL3BhdGgtZXhpc3RzLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hazlReTVRN2pZYjJXd2NleTVGcHZnMktvQWMvWkloTFNMT1NCbVJteWdQc0d3a1ZWdDBmWmEwcXJ0TXorbTZ0SlRBSGZaUThGbm1CNE1HNExXeTcvdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGgtaXMtYWJzb2x1dGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1pcy1hYnNvbHV0ZS8tL3BhdGgtaXMtYWJzb2x1dGUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFWYnczVUoyZTlicTY0dlNhUzlBbTBmamUxUGE4cGJHcVRUc21YZmFJaU1wbnI1RGxEaGZKT3VMajlTZjk1WlBWREFVZXJEZkVrODhNUG1QZTdVQ1FnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLWtleSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWtleS8tL3BhdGgta2V5LTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vam1lTjBxZCt5MGpzekV0b1k0OHIwUGVxNWR3TUVrSWxDT3U2UTVmNDFsZmtzd1h1S3RZcmhnb1RwTG55SWNIbTI0VWhxeCs1VHFtMkluU3dMaEU2UT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGgtcGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1wYXJzZS8tL3BhdGgtcGFyc2UtMS4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxESnpQVkVFRVBSK3k0OHo5M0EwRWQweVhiOHBBQnlHV28vazVZWWRZZ3BZMi8yRXNPc2tzSnJxN2xPSHhyeXJWT24xZWpHNm9BcDhhaHZPSVFEOHN3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGgtdG8tcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtdG8tcmVnZXhwLy0vcGF0aC10by1yZWdleHAtMC4xLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVERmt1b3FsdjF1WVFLeHk4b21GQmVKUFFjZG9FMDdLdjJzZmVyRENyQXExb2hPVStNU0Rzd0RJYm54M1lBTTYwcUlPbllhNTN3QmhYVzBFYk1vbnJRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGgtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLXR5cGUvLS9wYXRoLXR5cGUtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdES2I4YVpNRGVEL3RaV3M5UDYrcTBKOU13a2RsNnhNVjhUam5HUDNxSlZKMDZiZE1na2JCbExVOElkZk9zSXNGejJCVzFyTlZUM1h1TkVsOHpQQXZ3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGVyZm9ybWFuY2Utbm93IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BlcmZvcm1hbmNlLW5vdy8tL3BlcmZvcm1hbmNlLW5vdy0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0VBSGx5TEhJNTZWRUlkSzU3dXdIZEhLSWFBR2JuWFBpdzB5V2JhclFaT0thS3B2VUlnVzBqV1JWTGlhdG5NK1hYbFN3c2FuSUJIL2h6R01KdWxNb3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGljb2NvbG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvY29sb3JzLy0vcGljb2NvbG9ycy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWZ5Z3JvVExsSHU2NnppMjZWb1REdjh5UmdtMEZjY2Vjc3N0bytNaHNaMEQvREdXMnNtOEU4QWpXN05VNVZWVFJ0NUd4YmVaNXFCdUpyK0h5TFlralE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGljb21hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC0yLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSlUzdGVIVE5qbUUyVkNHRnp1WThFWHpDRFZ3RXFCMmE4ZnNJdndhU3RIaEFXSkVlVmQxbzFRRDgwQ1U2K1pkRVhYU0xiU3N1THdKamtDQldxUlFVVkE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlmeS8tL3BpZnktMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVkZ3NBWStmVG52djdrSTdhYXhicXdXTmIwQUhpQjBxQk84OVBaS1Brb1RtR09nZGJySERLRCswQjJYNHVUZkovRlQxUjA5cjlnVHNqVWpOSm90dW9nPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9waW5raWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlua2llLy0vcGlua2llLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NblV1RXljQWVtdFNhZUZTalhLVy9hcm9WN2FrQmJZK1N2K1JreXFGamdBZTczRitNUjBUQldLQlJEa21mV3EvSGlGbWRhdmZaMUc3aDRTUFpYYUNTZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9waW5raWUtcHJvbWlzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waW5raWUtcHJvbWlzZS8tL3BpbmtpZS1wcm9taXNlLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wR25pNkQ0VWNMVGJ2OWM1N0RmeERHZHI0MVhmZ1VqcVdadTQ5MmYwY0lHcjE2ekRVMDZCV1AvUkFFdk91bzdDUTBDTmpIYUxsTTU5WUpKRm0zTldsdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBpbmtpZSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9waXJhdGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpcmF0ZXMvLS9waXJhdGVzLTQuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04VjkrSFFQdXBuYVhNQTIzYzVodmw2OXpYdlR3VHp5QVlhc25rYjBUdHM0WHZPNENsaXFPTk1PbnZscTI2cmtoTEMzbldERkJKZjczTFUxZTFWWkxhUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wa2ctZGlyIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BrZy1kaXIvLS9wa2ctZGlyLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IUkR6YmFLakMrQU9XVlh4QVUveDU0Q09HZUl2OWViKzZDa0RTUW9OVHQ0WHlXb0lKdnVQc1hpenh1L0ZyMjNFaWVrYnRad21oMUljSUcvbC9hMTBHUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmaW5kLXVwIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wa2ctdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGtnLXVwLy0vcGtnLXVwLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uRHl3VGhGazFpNEJRSzR0d1BRNlRBNFJUOGJEWTk2eWV1Q1ZCV0wzZVBBUkNpRUtEUlNyTkdiRklnVUpwTHArWGVJUjY1djhyYTdXdUpPRlVCdGtNQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmaW5kLXVwIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wa2ctdXAvbm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTF5RDZSbUxJMVhCZnh1Z3ZPUndsY2s2Zjc1dFlMK2lSMGpxd3NPck94TVp5R1lxVXVEaEowbDRBWGRPMWlYL0ZUczljQkFNRWsxZ1dTRXgxa1NieWxnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxvY2F0ZS1wYXRoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wa2ctdXAvbm9kZV9tb2R1bGVzL2xvY2F0ZS1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvY2F0ZS1wYXRoLy0vbG9jYXRlLXBhdGgtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdBTzc0OHdXbkloTnFBdWF0eTJaV0hrUUhSU05mUFZJc1BJZndFT1dPMjJBbWFvVnJXYXZsT2NNUjVuelRMTll2cDM2WDIyMC9tYWFSc3JlYzFHNjVBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbG9jYXRlIjogIl4zLjAuMCIsCi0gICAgICAgICJwYXRoLWV4aXN0cyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGtnLXVwL25vZGVfbW9kdWxlcy9wLWxvY2F0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxvY2F0ZS8tL3AtbG9jYXRlLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14KzEydy9Ubys0R0ZmZ0poQkVwaURjTG96UkpHZWdZK0VpNy96MHRTTGtNbXhHWk55YlZNU2ZXajlhSm44WjVGYzdkQlVOSk9PVmdQdjJIN0l3dWxTUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wa2ctdXAvbm9kZV9tb2R1bGVzL3BhdGgtZXhpc3RzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtZXhpc3RzLy0vcGF0aC1leGlzdHMtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJwQzdHWXdpRFlRNHdZTGUrRkE4bGhSamhRQ01jUUd1U2dHR3FEa2cvUWVyUld3OUNtR1JUMGlTT1ZSU1pKMjlOTUxaZ0l6cWFsako2M29hTDROSUpRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNC4zMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy8tL3Bvc3Rjc3MtOC40LjMxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QUzA4SWJvaWE5bXRzLzJ5Z1YzZUxwWTVnaG5VY2ZMVi9FWFRPVzFFMnFZeEpLR0dCVXROak43NkZZSG5NczM2Um1BUm40MWJDMEFabW4rclIwT1ZwUT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcG9zdGNzcy8iCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vcG9zdGNzcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvYWkiCi0gICAgICAgIH0KLSAgICAgIF0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibmFub2lkIjogIl4zLjMuNiIsCi0gICAgICAgICJwaWNvY29sb3JzIjogIl4xLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwLWpzIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwIHx8IF4xMiB8fCA+PTE0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWF0dHJpYnV0ZS1jYXNlLWluc2Vuc2l0aXZlIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtYXR0cmlidXRlLWNhc2UtaW5zZW5zaXRpdmUvLS9wb3N0Y3NzLWF0dHJpYnV0ZS1jYXNlLWluc2Vuc2l0aXZlLTUuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YSWlkWFY4ZkRyMGtLdDI4dnFraTg0ZlJLOFZXOGVUdUlhNFBDaHYyTXFLdVQ2QzlVam1TS3plbjZLYVdoV0VvWXZ3eEZDYTduL3RDMVNaM3R5cTRTUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjEwIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1icm93c2VyLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtYnJvd3Nlci1jb21tZW50cy8tL3Bvc3Rjc3MtYnJvd3Nlci1jb21tZW50cy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDlYOS9XTjNLSXZZOStoTkVSVXFYOWduY3NnQkEyNVhhZVIranNoSHoyajgrc1l5SGt0SHcxSmRLdU1qZUxwR2t0WGlkcURoQTdiL3FtMW1yQkRtZ2c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIj49NCIsCi0gICAgICAgICJwb3N0Y3NzIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jYWxjIjogewotICAgICAgInZlcnNpb24iOiAiOC4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY2FsYy8tL3Bvc3Rjc3MtY2FsYy04LjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU21XTVNKbUI4TVJublVMbGR4MGxRSXloU052dURsOUhmclprYXFxRS9XSEFoVG9Zc0F2RHEreUFzQS9rSXlJTkRzek9wM1JoMEdGb051SDVZcHNtM1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC45IiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWNsYW1wIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY2xhbXAvLS9wb3N0Y3NzLWNsYW1wLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yeTRiMUxsby85enorUEtDKzAzMEtVblBJVFRKQUhlT3dqZkF5eUI2MGVUMEFvckdMZHpwNTJzMzFPc1BSSFJmOE5jaGtnRm9HMnk2ZkNmbjFJVjFPdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ny42LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjQuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jb2xvci1mdW5jdGlvbmFsLW5vdGF0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY29sb3ItZnVuY3Rpb25hbC1ub3RhdGlvbi8tL3Bvc3Rjc3MtY29sb3ItZnVuY3Rpb25hbC1ub3RhdGlvbi00LjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMnlyVEFVWlVhYjlzNkNweGt4QzRyVmdGRVZhUjYvMlBpcHZpNnFjZ3ZuWWlWcVpjYkRIRW9CRGhyWHp5YjdFZmgyQ0NmSFFOdGNxV2NJcnVEVElVZWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jb2xvci1oZXgtYWxwaGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1jb2xvci1oZXgtYWxwaGEvLS9wb3N0Y3NzLWNvbG9yLWhleC1hbHBoYS04LjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbkxvMkRDUkM5ZUU0dzJKbXVLZ1ZBM2ZHTDNkMDFrR3E3NTJwVkFMRjY4cXBHTG14MlFyazkxUVRLa2RVcXFwNDVUMUsxWFY4SWhRcGN1MWhvQVFmbFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jb2xvci1yZWJlY2NhcHVycGxlIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY29sb3ItcmViZWNjYXB1cnBsZS8tL3Bvc3Rjc3MtY29sb3ItcmViZWNjYXB1cnBsZS03LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcEd4a3VWRUlud0xIZ2tOeFVjNHNkZzRnM3B5N3pVZUNROXNNZnd5SEFUK0V6azhhNE9hYVZaOGxJWTUrb05xQS9CWFhnTHlYdjArNXdIUDY4Ujc5aGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jb2xvcm1pbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWNvbG9ybWluLy0vcG9zdGNzcy1jb2xvcm1pbi01LjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVXNXUUcwQXFURlFtcEJlZ2VMTGMxK2MzaklxQk5CMHpsREdSV1IrZFEzcFJLSkwxb2VNenlxbUgzbzJQSWZuOU1CZE5yVlBXaERiVDc2OUx4Q1RMSlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAiY2FuaXVzZS1hcGkiOiAiXjMuMC4wIiwKLSAgICAgICAgImNvbG9yZCI6ICJeMi45LjEiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jb252ZXJ0LXZhbHVlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWNvbnZlcnQtdmFsdWVzLy0vcG9zdGNzcy1jb252ZXJ0LXZhbHVlcy01LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItODJwQzF4a0padGNKRWZpTHc2VVhuWFZYU2NndEJyamxPNUNCbXVEUWMrZGxiODhaWWhlRnNqVG40MCt6QlZpM0RrZkY3aWV6TzBuSlVQTGNKSzNwdkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jdXN0b20tbWVkaWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1jdXN0b20tbWVkaWEvLS9wb3N0Y3NzLWN1c3RvbS1tZWRpYS04LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3lpMjV2REFvSEFrYmhBelg5ZEh4MnljNm50UzRqUXZlanJOY0MrY3NRSkFYamoxNWU3VmNXZk1nTHFCTkFiT3ZxaTV1SWE5aHVPVndkSGJmK3NLcWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1jdXN0b20tcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEyLjEuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY3VzdG9tLXByb3BlcnRpZXMvLS9wb3N0Y3NzLWN1c3RvbS1wcm9wZXJ0aWVzLTEyLjEuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBJREpZaGdVOHhEdjFLWTYrVmdVd3VRa1Z0bVl6Und1K2RNam5tZE1hZlhZdjg2U1dxZnhrYzdxZER2V1MzOHZzamFFdHY4ZTB2R09VUXJBaU1CTHBRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtY3VzdG9tLXNlbGVjdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWN1c3RvbS1zZWxlY3RvcnMvLS9wb3N0Y3NzLWN1c3RvbS1zZWxlY3RvcnMtNi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZnVmtteWlXRHdtRDNKYnBDbUI0NVN2dmxDRDZ6OUNHNkllNkllcmUyMlc1YUhlYTZvV2E3RU0yYnBudjJGajNJOTRMM1ZidHZYOUtxd1NpNWFGelNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtZGlyLXBzZXVkby1jbGFzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWRpci1wc2V1ZG8tY2xhc3MvLS9wb3N0Y3NzLWRpci1wc2V1ZG8tY2xhc3MtNi4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVxbjRtNzBQMDMxUEY3WlFJdlNneTlSU0o1dUkyMTcxTy9PTy96Y1JOWXBKYnZhZUtGVWxhcjFhSjdybWdpUXRibTBGU1BzUmV3anBkUzBPZXc3TVBBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWRpc2NhcmQtY29tbWVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1kaXNjYXJkLWNvbW1lbnRzLy0vcG9zdGNzcy1kaXNjYXJkLWNvbW1lbnRzLTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rTDgyMDhPVmJIVkYyVVFmMWlEbVJjYmRqSmt1QkY2SVMyOXlCRFNpV1VJenBZYUFodE5sNkpZblltMTJGbmtlQ3dRcUY1TGVrbE91NnJBcWdmQlpxUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1kaXNjYXJkLWR1cGxpY2F0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1kaXNjYXJkLWR1cGxpY2F0ZXMvLS9wb3N0Y3NzLWRpc2NhcmQtZHVwbGljYXRlcy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItem1YM0lvU0kyYW9lbnhIVjZDN3BsbmdIV1doVU9WM3NQMVQ4eTJpZnp4emJ0bnVoazFFZFB3bTBTMWJJVU5hSjJlTmJXZUdMRXd6dzhodVBENjdhUXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwIHx8IF4xMiB8fCA+PTE0LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIuMTUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtZGlzY2FyZC1lbXB0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWRpc2NhcmQtZW1wdHkvLS9wb3N0Y3NzLWRpc2NhcmQtZW1wdHktNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpQejRXbGppU3VMV3NJMGlyNE1jbnI0cVFRNWUxVWtjM2k3VWZFMlhjcndLSzJMSVBJcUU1anhNUnhPNkdiSTNjdi8venRYRHNYd0VXVDNCSE9HaDNBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWRpc2NhcmQtb3ZlcnJpZGRlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWRpc2NhcmQtb3ZlcnJpZGRlbi8tL3Bvc3Rjc3MtZGlzY2FyZC1vdmVycmlkZGVuLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yMW5PTDdScVdSMWthc0lWZEtzOEhOcVFKaEZ4THN5UmZBblVEbTRGZTR0NG1DV0w5T0ppSHZsSFBqY2Q4emM1TXl1ODliLzd3WkRuT1NqRmdlV1J0dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1kb3VibGUtcG9zaXRpb24tZ3JhZGllbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZG91YmxlLXBvc2l0aW9uLWdyYWRpZW50cy8tL3Bvc3Rjc3MtZG91YmxlLXBvc2l0aW9uLWdyYWRpZW50cy0zLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1grRnVFL3VCUjZlc2tPSys0dmtYZ1Q2cERrZXhMb2tQYXovQWJKbmE5czVLenAveWw0ODhwS1BqaHkwb2JCNDc1b3ZmVDFXdjhobzdVL2NITmFSZ1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtZW52LWZ1bmN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZW52LWZ1bmN0aW9uLy0vcG9zdGNzcy1lbnYtZnVuY3Rpb24tNC4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtwQTZGc0xyYStOcWNGbkw4MVRuc1UrWjdvckd0RFR4Y09obDZwd1hlRXExeUZQcFJNa0NEcEhocno4Q0ZRRHIvV2ZtMGpMaU5RMU9zR0dQamxxUHdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWZsZXhidWdzLWZpeGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZmxleGJ1Z3MtZml4ZXMvLS9wb3N0Y3NzLWZsZXhidWdzLWZpeGVzLTUuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xOGY5dm9CeWFrN2JUa3RSMlFnRHZlZ2xwbjlEVGJCV1BVelNPZTlnME40V1IvMmVTdDZWcmNiZjBobXNwdk1JNllXR3l3ejZCOWY3anpwRk5KSmduUT09IiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4xLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtZm9jdXMtdmlzaWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWZvY3VzLXZpc2libGUvLS9wb3N0Y3NzLWZvY3VzLXZpc2libGUtNi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFjS3VVVS9kZ05zc3RJSzZIRUxGUlQ1WTNsYnJNTEVPd0crQTRzNWNBK2Z4M0EzeS9KVHEzWDlMYU9qM09DM0FMSDBYcXlyZ1FJZ2V5L01JWjhXY3p3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWZvY3VzLXdpdGhpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWZvY3VzLXdpdGhpbi8tL3Bvc3Rjc3MtZm9jdXMtd2l0aGluLTUuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12dmpETisrQzBtdThqejRhZjVkNTJDQjE4NG9nZy9zU3hBRlMrb1VKUXEyU3VDZTdUNVUyaUlzVkp0c0NwMmQ2UjRqMGpyNStxM3JQa0JWWmtYRDlmUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjkiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1mb250LXZhcmlhbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1mb250LXZhcmlhbnQvLS9wb3N0Y3NzLWZvbnQtdmFyaWFudC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWZta0JhQ0FMRDcyQ0syYTlpNDY4bUEvK3RyOS8xY0J4UlJNWE9VYVpxTzQzb1dQUjVpbWN5UGpYd3V2N1BYYkNpZDRuZGxQNXpXaGlkUVZWYTNobUE9PSIsCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWdhcC1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZ2FwLXByb3BlcnRpZXMvLS9wb3N0Y3NzLWdhcC1wcm9wZXJ0aWVzLTMuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JdUU2Z0tTZG9VTmN2a0dJcWR0anRjTXRaSUZ5WFpobUZkNVJVbGc5N2lWRXZwMUJaS1Y1bmdzQWpDanJWeSsxNHVoR0JRbDl0em1pMVF3cTRrcVZPZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1pbWFnZS1zZXQtZnVuY3Rpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1pbWFnZS1zZXQtZnVuY3Rpb24vLS9wb3N0Y3NzLWltYWdlLXNldC1mdW5jdGlvbi00LjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOVQycjlyc3ZZem01bmRzQkU4V2d0ck1sSVQ3VmJ0VGZFN2IzQlFudWRVcW5CY0JvN0w3NThvYytvK3Bkai9kVVYwbDV3andTZGplT0gyRFp0ZnY4cXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jc3N0b29scyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1pbXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtaW1wb3J0Ly0vcG9zdGNzcy1pbXBvcnQtMTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ocHIrSjA1QjJGVllVQVhIZUsxWXlJMjY3Si9kRERoTVU2QjZjaXZtOGhTWTFqWUpuQlh4ektES0Rzd3pKbXRMSHJ5cmpobkRqcXFwLzQ5dDhGQUxldz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4wLjAiLAotICAgICAgICAicmVhZC1jYWNoZSI6ICJeMS4wLjAiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xLjciCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtaW5pdGlhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWluaXRpYWwvLS9wb3N0Y3NzLWluaXRpYWwtNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTB1ZUQ3clBxWDhQbjF4SklqYXkwQVplSXVEb0YrVitWdk10L3VPbm4rNGV6VUtoWk0vTm9rRGVQNkR3TU55SW9ZQnl1Ti85NElRbnQ1RkVrYU41OXhRPT0iLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWpzLy0vcG9zdGNzcy1qcy00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZERMRjhwRU8xOTFoSk10bEhGUFJhOHhzaXpIYU04Mk1MZk5rVUhkVXRWRVYzdGdUcDVvais4cWJFcVlNNTdTTGZjNzRLU2J3Ly80U2VKbWEyTFJWSXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FtZWxjYXNlLWNzcyI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0gMTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wb3N0Y3NzLyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNC4yMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1sYWItZnVuY3Rpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1sYWItZnVuY3Rpb24vLS9wb3N0Y3NzLWxhYi1mdW5jdGlvbi00LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHVYbGw0aXNSMDNDclFzbXh5ejkyTEpCMnhYOW4rcFpKNWpFOUpnY25tc0NhbW1MeUtkbHpyQmluKzI1ZHk2d0lqZmhKcEtCQU44MGdzVGxDZ1JrMnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZC1jb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1sb2FkLWNvbmZpZy8tL3Bvc3Rjc3MtbG9hZC1jb25maWctNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZFSkljOFJkaUJSdTNvUkFJMHltZXJPbis3clB1TXZSWHNsVHZaVUtab25ESEZJY3p4enRJeUoxdXJ4TTF4OUpYRWlrdnBXV1RVVXFhbDVqLzhRZ3ZBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxpbGNvbmZpZyI6ICJeMi4wLjUiLAotICAgICAgICAieWFtbCI6ICJeMi4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDE0IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcG9zdGNzcy8iCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIj49OC4wLjkiLAotICAgICAgICAidHMtbm9kZSI6ICI+PTkuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidHMtbm9kZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkLWNvbmZpZy9ub2RlX21vZHVsZXMveWFtbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YW1sLy0veWFtbC0yLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmVIV2ZqYW9YZ1RCQzJqTk0xTFJlZjYyVlFhMHVtdHZSaURTazZIU3pXN1J2UzVZdGthYkpyd1lMTEVLV0JjOGE1VTJQVFNDcytkSmpVVEpkbEhzV1E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyIjogewotICAgICAgInZlcnNpb24iOiAiNi4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbG9hZGVyLy0vcG9zdGNzcy1sb2FkZXItNi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdiYllwbUFhS2N1eC9QNjZiWjQwYnBXc0J1Y2p4L1RUZ1ZWelJaOXlVTzh5UWZWQmxhbWVKMFpHVmFQZkg2NGhOU0JoNjNhK0lDUDVucU9wQkEwdytRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvc21pY29uZmlnIjogIl43LjAuMCIsCi0gICAgICAgICJrbG9uYSI6ICJeMi4wLjUiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl43LjAuMCB8fCBeOC4wLjEiLAotICAgICAgICAid2VicGFjayI6ICJeNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL25vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ5YWxsaXN0IjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvbm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNvZnR1VFJPdi9jUmpDemUvc2NqR3lpRHRjVXl4dzFyZ1lRU1pZN1hUbXRSNWhYK2RtNzZpRGJUSDhUa0xQSENRbWxiUVZTU2JOWkNQTTJoYjBrbm5RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9ub2RlX21vZHVsZXMveWFsbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1sb2dpY2FsIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbG9naWNhbC8tL3Bvc3Rjc3MtbG9naWNhbC01LjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkhYeHBsQ2VMaDlWamludk1yWk9OcTdpbTR3aldHbFJKQXFtQVZMWHlaYVh3ZkRXUDczL29xNE5kSXArT1p3aFFVTWowempxRGZNNUZqN3FieStCNGc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW1lZGlhLW1pbm1heCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW1lZGlhLW1pbm1heC8tL3Bvc3Rjc3MtbWVkaWEtbWlubWF4LTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15RFV2RmY5UWRGWlR1Q1VnMGcwdU5TSFZsSjVYMWxTekRaalBTRmFpQ1d2amdzdnU4dkVWeHRhaFByTE1pbklERUVHbng2Y0JlNmlxZHg1WVd6MDh3UT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW1lcmdlLWxvbmdoYW5kIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbWVyZ2UtbG9uZ2hhbmQvLS9wb3N0Y3NzLW1lcmdlLWxvbmdoYW5kLTUuMS43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ0k5Z1pCK1BMTnNrckswQkIzLzJPelBuR2hQa0JFd213aGZZazFpbEJIWVZBWkI3L3RrVEhGQkFuQ3J2QkJPbWVZeU1ZdzNETWpUNTVTeXhNQnpqUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiLAotICAgICAgICAic3R5bGVoYWNrcyI6ICJeNS4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW1lcmdlLXJ1bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbWVyZ2UtcnVsZXMvLS9wb3N0Y3NzLW1lcmdlLXJ1bGVzLTUuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wUjJJdVlwZ1U5M3k5bGhWYk8vT3lsVHRLTVZjSGI2N3pqV0lmQ2lLUjlyV0wzR1VrMTY3N0xBcUQvQmNIaXp1a2RaRWpUOFJ1M29IUm9BWW9KeTQ0Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNCIsCi0gICAgICAgICJjYW5pdXNlLWFwaSI6ICJeMy4wLjAiLAotICAgICAgICAiY3NzbmFuby11dGlscyI6ICJeMy4xLjAiLAotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1taW5pZnktZm9udC12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1taW5pZnktZm9udC12YWx1ZXMvLS9wb3N0Y3NzLW1pbmlmeS1mb250LXZhbHVlcy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZWwzbVlUZ3gxM1pBUFBpclNWc0hxRnpsK0JCQkRyWHZieVN2UEdGblFjVEk0aU5zbHJQYUZxNG11VGtMWm1LbEdrNGd5RkFZVUJNSDMwK0h1clJFeUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1taW5pZnktZ3JhZGllbnRzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbWluaWZ5LWdyYWRpZW50cy8tL3Bvc3Rjc3MtbWluaWZ5LWdyYWRpZW50cy01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVkd2WE1UcENFbzRxSFROU2E5QTBhM0QrZHhHRlpDWXdSNkpva2srLzNvQjZmbHUyL1BuUFhBaDJ4N3g1MkVrWTV4bElITG0rTGU4dEp4ZS83VE5oenc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3JkIjogIl4yLjkuMSIsCi0gICAgICAgICJjc3NuYW5vLXV0aWxzIjogIl4zLjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW1pbmlmeS1wYXJhbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1taW5pZnktcGFyYW1zLy0vcG9zdGNzcy1taW5pZnktcGFyYW1zLTUuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rbWVQQTNNZ2RtVm12NmcrMzBybjU3VVNqT0dTQXl1eFVta2ZpV3B6YWxaOGFpQmtkUFlqWFd0SHV3SkdtMXY1T2p5MFowTGFTWWhIYUxKUUIwUDhKdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNCIsCi0gICAgICAgICJjc3NuYW5vLXV0aWxzIjogIl4zLjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW1pbmlmeS1zZWxlY3RvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1taW5pZnktc2VsZWN0b3JzLy0vcG9zdGNzcy1taW5pZnktc2VsZWN0b3JzLTUuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uUEp1N09qWkpUc1ZVbVBkbTJUY2Fpb2hJd3hQK3Y4aGE5TmVoUTJ5ZTlzenY0b3JpclJVM1NEZHRVbUtIKzEwbnpuMGJBeU9YWjBVRXI3T3B2TGVoZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW1vZHVsZXMtZXh0cmFjdC1pbXBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbW9kdWxlcy1leHRyYWN0LWltcG9ydHMvLS9wb3N0Y3NzLW1vZHVsZXMtZXh0cmFjdC1pbXBvcnRzLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iZEhsZUZuUDNrWjROWURodUdsVksrQ01yUS9wcVVtOGJ4L29HTDkzSzZnVndpY2x2WDV4MG43NmZZTUt1SUdLemxBQk95MTN6c3ZxamIwZjkyVEVYdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49IDE0IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbW9kdWxlcy1sb2NhbC1ieS1kZWZhdWx0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbW9kdWxlcy1sb2NhbC1ieS1kZWZhdWx0Ly0vcG9zdGNzcy1tb2R1bGVzLWxvY2FsLWJ5LWRlZmF1bHQtNC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTIvdTJ6cmFzcG9BQ3RyYkZSblRpak1pUXRiNEdXNEJ2YXRqYUcvYkNqWVFvOGtMVGRldkNVbHd1Qkh4MnNDblN5ckkzeDNxajRaSzFqNUxRQmd6bXdBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImljc3MtdXRpbHMiOiAiXjUuMC4wIiwKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMiIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0gMTQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1tb2R1bGVzLXNjb3BlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbW9kdWxlcy1zY29wZS8tL3Bvc3Rjc3MtbW9kdWxlcy1zY29wZS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaG5jaWh3RkEyeVBhdGg4b1oxNVBacXZXR2tXZitYVWZRZ1VHYW1TNExxb1AxYW5RTE9zT0p3MHZyN0o3SXdMcG9ZOWZhdEEycWlHVUdtdVpMMElxbGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49IDE0IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbW9kdWxlcy12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1tb2R1bGVzLXZhbHVlcy8tL3Bvc3Rjc3MtbW9kdWxlcy12YWx1ZXMtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJEeEhrQWlFR0k3OGdTMm9meXZDc3U3aXljUnY3b3F3NXhNV245aU1vUjBOLzdtZjlENTBlY1FxVW81Qlo5Wmgydkg0YkNVUi9rdENxYkI5bTh2SmpRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImljc3MtdXRpbHMiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49IDE0IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbmVzdGVkIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbmVzdGVkLy0vcG9zdGNzcy1uZXN0ZWQtNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1FcDR4UE1pNWJTV2lNYnNnb1BmY1A3NGxzV0xIa1FiWmMzc1kraldZZDY1Q1V3WHJVYVRwMGZtTnBhMDFaY0VUS2xJZ1VkRk4vTXBTMnhadHFMOWRRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3Bvc3Rjc3MvIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW5lc3RpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbmVzdGluZy8tL3Bvc3Rjc3MtbmVzdGluZy0xMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUV3TWtZY2h4aURpS1VobEpHeldzRDliMnp2cS9yMlNTdWJjUnJnUCtqdWpNWEZ6cXZBTkx0MTZsSkFOQys1dVo2aGpJN2xwUm1JNk84SklsKzhsMUtBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjc3N0b29scy9zZWxlY3Rvci1zcGVjaWZpY2l0eSI6ICJeMi4wLjAiLAotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC4xMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtbm9ybWFsaXplIjogewotICAgICAgInZlcnNpb24iOiAiMTAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS8tL3Bvc3Rjc3Mtbm9ybWFsaXplLTEwLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzV3MTgvckRldjVtcUVSY0czVzVHWk5NSmExZW9ZWU5HbzhnQjd0RXdhb3MwYWprM1pYQUk0bUhHY05UNDdORStablpEMXBFcFVPRkx2bHRJd21lSkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL25vcm1hbGl6ZS5jc3MiOiAiKiIsCi0gICAgICAgICJwb3N0Y3NzLWJyb3dzZXItY29tbWVudHMiOiAiXjQiLAotICAgICAgICAic2FuaXRpemUuY3NzIjogIioiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIj49IDQiLAotICAgICAgICAicG9zdGNzcyI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLW5vcm1hbGl6ZS1jaGFyc2V0IjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtbm9ybWFsaXplLWNoYXJzZXQvLS9wb3N0Y3NzLW5vcm1hbGl6ZS1jaGFyc2V0LTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tU2dVSitwZC9sZFJHVngyNnAyd3o5ZE5aN2ppNlBuOFZXQmFqTVhGZjhqazd2VW9TcloybHQvd1pSN0R0bFpZS2VzbVpJNjgwcWpyMkNlRkYyZmJVZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtZGlzcGxheS12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1ub3JtYWxpemUtZGlzcGxheS12YWx1ZXMvLS9wb3N0Y3NzLW5vcm1hbGl6ZS1kaXNwbGF5LXZhbHVlcy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1A0S0lNNG8yZGF6UVhXbUZhcU1tY3ZzS21oZElORmJsZ1NlUmduOEJKNnZ4YU15YUprd0F6cFBwdXZTSW9HL3JtWDNNK0lyUlpFejJIMGdsclFORUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtcG9zaXRpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtbm9ybWFsaXplLXBvc2l0aW9ucy8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXBvc2l0aW9ucy01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlVwQ2IwRzRlb2ZUQ1FMRlZ1STNFVk5aekJOUGlJS2NBMUFLVmthKzMxZlRWeVNwaHIzVlVnQUlVTEJoeFprS2d3TEltaHpNUjJCdzFPUksrMzdJTmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtcmVwZWF0LXN0eWxlIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtbm9ybWFsaXplLXJlcGVhdC1zdHlsZS8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXJlcGVhdC1zdHlsZS01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbUZwTHNwR1drUXRCY1dJUkZMbWV3bzhhQzNJbU4yaS9KM3Y4WUNGVXdEblB1M1h6NHJMb2hETzI2bEdqd05zUXhCM1lGMEtLUndzcEd6RTJKRXVTMGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtbm9ybWFsaXplLXN0cmluZy8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXN0cmluZy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb1lpSUpPZjRUOVQxTjRpK2FiZUljN1ZnbS94UENHaWg0Ylp6NU5tMC9BUlZKN0s2eHJEbEx3dndxT3lkdnlMM1JITmY4cVprNnZvM2FhdGl3L2dvM3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtdGltaW5nLWZ1bmN0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS10aW1pbmctZnVuY3Rpb25zLy0vcG9zdGNzcy1ub3JtYWxpemUtdGltaW5nLWZ1bmN0aW9ucy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRE9Fa3pKNFNBWHY1eGtIbDBXYTljWkxGM1dDQmhGM28xU0tWeEtRQWErMHBZS2x1ZVRwQ2d2a0ZBSGZrK1k2NGV6WDkrbklUR3JEWmVWR2dJVEpYamc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtdW5pY29kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS11bmljb2RlLy0vcG9zdGNzcy1ub3JtYWxpemUtdW5pY29kZS01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcW5DTDVqemtOVW1LVmhab0VOcDFtSmlHTlBjc0pDczFhYVJtVVJtZUpHRVMyM1ovYWphbG4rRVBURCtyQmVOa1NyeUkrMldUZFcrbHdjVmRPaWtycEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtdXJsIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtbm9ybWFsaXplLXVybC8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXVybC01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXVwR2VETytQVnRoT3hTbWRzNDNaZU1lWmZLSCsvREtnR1JEN1RFbGtreVM0NkpYQVVoTXpJS2lDYTdCYWJQZUl5M0FRY1RrWHdWVk43RGJxc2lDZXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9ybWFsaXplLXVybCI6ICJeNi4wLjEiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1ub3JtYWxpemUtd2hpdGVzcGFjZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS13aGl0ZXNwYWNlLy0vcG9zdGNzcy1ub3JtYWxpemUtd2hpdGVzcGFjZS01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItODNaSjR0M05VREVUSUhUYTN1RWc2YXNXalNCWUw1RWRrVkIwc0RuY3g5RVJ6T0tCVkpJVWVETzlSeUE5Wnd0aWc4RWwxZDc5SEJwMEpFaTh3dkdRbkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1vcGFjaXR5LXBlcmNlbnRhZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1vcGFjaXR5LXBlcmNlbnRhZ2UvLS9wb3N0Y3NzLW9wYWNpdHktcGVyY2VudGFnZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQW42QmE0cEhCaUR0eVZwU0x5bVVVRVJNbzJjVTdzK09iejZCVHJTK2d4a2JuU0JOS1N1RDBBVlVjK0NwQk1ycFZQS0tmb1Z6MFdRQ1grVG5zdDBpNEE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImtvZmkiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9rby1maS5jb20vbXJjZ3J0eiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImxpYmVyYXBheSIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2xpYmVyYXBheS5jb20vbXJjZ3J0eiIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIgfHwgXjE0IHx8ID49MTYiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtb3JkZXJlZC12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1vcmRlcmVkLXZhbHVlcy8tL3Bvc3Rjc3Mtb3JkZXJlZC12YWx1ZXMtNS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlVTzc5VlVoUHdFa3piYjNSTnBxcWdoYzZsY1llajFhdmVRdGVXWSs0UE9Jd2xxa1lFMjFIS1dhTERGNmxXTnVxQ29iRUF5VG92Vmh0STMyUmJ2MlJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNzc25hbm8tdXRpbHMiOiAiXjMuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwIHx8IF4xMiB8fCA+PTE0LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIuMTUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtb3ZlcmZsb3ctc2hvcnRoYW5kIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtb3ZlcmZsb3ctc2hvcnRoYW5kLy0vcG9zdGNzcy1vdmVyZmxvdy1zaG9ydGhhbmQtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW90WWwveWxISzhZOWJjQm5QTG8zZm9ZRkxMNmE2QWsrM0VRQlBPVFI3bHVNWUNPc2lWVFVrMWlMdk5mNnRWUE5HWGNvTDlIb3ozN2twZnJpUklGYjRBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtcGFnZS1icmVhayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXBhZ2UtYnJlYWsvLS9wb3N0Y3NzLXBhZ2UtYnJlYWstMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFKR3U4b0NqVlhMYTlxOXJGVG80TWJlZUE1Rk1lMDAvOUM3bE40dmE2MDZSZGIrSGt4WHRYc21FRHJJcmFRMTFmR3ovV3ZLV2E4Z011Q0trclhwVHNRPT0iLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXBsYWNlIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtcGxhY2UvLS9wb3N0Y3NzLXBsYWNlLTcuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13UjhpZ2FaUk9BNlo0cHYwZCtidlZydkdZNEdWSGloQkNCUWllWEZZM2t1U3VNeU9tRW5uZkZ6SGwvdFF1cUhaa2ZrSVZCRWJEdlljRmZIbXBTZXQ5Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXByZXNldC1lbnYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1wcmVzZXQtZW52Ly0vcG9zdGNzcy1wcmVzZXQtZW52LTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UMUxnUm01dUVWRlNFRjgzdkhaSlYyejE5bEhnNHlKdVo2Z1haWmtxVnNxdjYzbmxyNnphYk1IM2w0UGMwMUZRQ3lmV1ZyaDJHYVVlQ1Z5OVBvK0FhZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1jYXNjYWRlLWxheWVycyI6ICJeMS4xLjEiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtY29sb3ItZnVuY3Rpb24iOiAiXjEuMS4xIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLWZvbnQtZm9ybWF0LWtleXdvcmRzIjogIl4xLjAuMSIsCi0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1od2ItZnVuY3Rpb24iOiAiXjEuMC4yIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLWljLXVuaXQiOiAiXjEuMC4xIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLWlzLXBzZXVkby1jbGFzcyI6ICJeMi4wLjciLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtbmVzdGVkLWNhbGMiOiAiXjEuMC4wIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLW5vcm1hbGl6ZS1kaXNwbGF5LXZhbHVlcyI6ICJeMS4wLjEiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3Mtb2tsYWItZnVuY3Rpb24iOiAiXjEuMS4xIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLXByb2dyZXNzaXZlLWN1c3RvbS1wcm9wZXJ0aWVzIjogIl4xLjMuMCIsCi0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1zdGVwcGVkLXZhbHVlLWZ1bmN0aW9ucyI6ICJeMS4wLjEiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtdGV4dC1kZWNvcmF0aW9uLXNob3J0aGFuZCI6ICJeMS4wLjAiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtdHJpZ29ub21ldHJpYy1mdW5jdGlvbnMiOiAiXjEuMC4yIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLXVuc2V0LXZhbHVlIjogIl4xLjAuMiIsCi0gICAgICAgICJhdXRvcHJlZml4ZXIiOiAiXjEwLjQuMTMiLAotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAiY3NzLWJsYW5rLXBzZXVkbyI6ICJeMy4wLjMiLAotICAgICAgICAiY3NzLWhhcy1wc2V1ZG8iOiAiXjMuMC40IiwKLSAgICAgICAgImNzcy1wcmVmZXJzLWNvbG9yLXNjaGVtZSI6ICJeNi4wLjMiLAotICAgICAgICAiY3NzZGIiOiAiXjcuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtYXR0cmlidXRlLWNhc2UtaW5zZW5zaXRpdmUiOiAiXjUuMC4yIiwKLSAgICAgICAgInBvc3Rjc3MtY2xhbXAiOiAiXjQuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtY29sb3ItZnVuY3Rpb25hbC1ub3RhdGlvbiI6ICJeNC4yLjQiLAotICAgICAgICAicG9zdGNzcy1jb2xvci1oZXgtYWxwaGEiOiAiXjguMC40IiwKLSAgICAgICAgInBvc3Rjc3MtY29sb3ItcmViZWNjYXB1cnBsZSI6ICJeNy4xLjEiLAotICAgICAgICAicG9zdGNzcy1jdXN0b20tbWVkaWEiOiAiXjguMC4yIiwKLSAgICAgICAgInBvc3Rjc3MtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEyLjEuMTAiLAotICAgICAgICAicG9zdGNzcy1jdXN0b20tc2VsZWN0b3JzIjogIl42LjAuMyIsCi0gICAgICAgICJwb3N0Y3NzLWRpci1wc2V1ZG8tY2xhc3MiOiAiXjYuMC41IiwKLSAgICAgICAgInBvc3Rjc3MtZG91YmxlLXBvc2l0aW9uLWdyYWRpZW50cyI6ICJeMy4xLjIiLAotICAgICAgICAicG9zdGNzcy1lbnYtZnVuY3Rpb24iOiAiXjQuMC42IiwKLSAgICAgICAgInBvc3Rjc3MtZm9jdXMtdmlzaWJsZSI6ICJeNi4wLjQiLAotICAgICAgICAicG9zdGNzcy1mb2N1cy13aXRoaW4iOiAiXjUuMC40IiwKLSAgICAgICAgInBvc3Rjc3MtZm9udC12YXJpYW50IjogIl41LjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLWdhcC1wcm9wZXJ0aWVzIjogIl4zLjAuNSIsCi0gICAgICAgICJwb3N0Y3NzLWltYWdlLXNldC1mdW5jdGlvbiI6ICJeNC4wLjciLAotICAgICAgICAicG9zdGNzcy1pbml0aWFsIjogIl40LjAuMSIsCi0gICAgICAgICJwb3N0Y3NzLWxhYi1mdW5jdGlvbiI6ICJeNC4yLjEiLAotICAgICAgICAicG9zdGNzcy1sb2dpY2FsIjogIl41LjAuNCIsCi0gICAgICAgICJwb3N0Y3NzLW1lZGlhLW1pbm1heCI6ICJeNS4wLjAiLAotICAgICAgICAicG9zdGNzcy1uZXN0aW5nIjogIl4xMC4yLjAiLAotICAgICAgICAicG9zdGNzcy1vcGFjaXR5LXBlcmNlbnRhZ2UiOiAiXjEuMS4yIiwKLSAgICAgICAgInBvc3Rjc3Mtb3ZlcmZsb3ctc2hvcnRoYW5kIjogIl4zLjAuNCIsCi0gICAgICAgICJwb3N0Y3NzLXBhZ2UtYnJlYWsiOiAiXjMuMC40IiwKLSAgICAgICAgInBvc3Rjc3MtcGxhY2UiOiAiXjcuMC41IiwKLSAgICAgICAgInBvc3Rjc3MtcHNldWRvLWNsYXNzLWFueS1saW5rIjogIl43LjEuNiIsCi0gICAgICAgICJwb3N0Y3NzLXJlcGxhY2Utb3ZlcmZsb3ctd3JhcCI6ICJeNC4wLjAiLAotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1ub3QiOiAiXjYuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyIHx8IF4xNCB8fCA+PTE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vY3NzdG9vbHMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3MtcHNldWRvLWNsYXNzLWFueS1saW5rIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtcHNldWRvLWNsYXNzLWFueS1saW5rLy0vcG9zdGNzcy1wc2V1ZG8tY2xhc3MtYW55LWxpbmstNy4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlzQ3Raa082Zi81TUw5V2NUTGNJeVYxeXo5RDFyZjB0V2MrdWxLY3ZWMzBzMGlaS1MvT055RVR2b1dzcjZ2bnJtVytYK0ttdUszZ1YvdzVFV25UMzd3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXJlZHVjZS1pbml0aWFsIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtcmVkdWNlLWluaXRpYWwvLS9wb3N0Y3NzLXJlZHVjZS1pbml0aWFsLTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kRS95MlhSYXFBaTZPdmp6RDIycGpUVVE4ZU9mYzZtL25hdEdIZ0tGQks5RHhGbUltNjlZbWFSVlFyR2dGbEVmYzFIZVBJdXJZMFRtRGVST0swNXJJZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNCIsCi0gICAgICAgICJjYW5pdXNlLWFwaSI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXJlZHVjZS10cmFuc2Zvcm1zIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtcmVkdWNlLXRyYW5zZm9ybXMvLS9wb3N0Y3NzLXJlZHVjZS10cmFuc2Zvcm1zLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yZmJkYm1naXI1QXZwVzlSTHRkT054MVFvWUcyL0V0cXBOUWJGQVNEbGl4QmJBWXVUY0owZEVDd2xxTnFIN1ZiYVVuRW5oOFNyeE9lMnNSSW4yNFh5UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXJlcGxhY2Utb3ZlcmZsb3ctd3JhcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXJlcGxhY2Utb3ZlcmZsb3ctd3JhcC8tL3Bvc3Rjc3MtcmVwbGFjZS1vdmVyZmxvdy13cmFwLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LbUY3U0JQcGhUNGdQUGNLWmM3YURrd2VIaUtFRU84Y2xhL0dqY0JLK2NrS3hpWnNsSXUzQzRHQ1JXM0ROZkwwbzd5VzdrTVF1OXhsWjFrWFJYTFh0dz09IiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtc2VsZWN0b3Itbm90IjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtc2VsZWN0b3Itbm90Ly0vcG9zdGNzcy1zZWxlY3Rvci1ub3QtNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFpOWFmZmpBZTl4dS95OXVxV0grdEQ0cjYvaERhWEpydWs4eG4yeDF2enhDMlUzSjNMS08zekpXNEN5eGxOaEE1NnBBREovZGpwRXdwSDFSQ2xJMnJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMiB8fCBeMTQgfHwgPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Nzc3Rvb2xzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIvLS9wb3N0Y3NzLXNlbGVjdG9yLXBhcnNlci02LjAuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVhVjFHbDRtVUVWNGRkaERudi94dGo3c3h3cnd4ZGV0SGRXVUduVDRWSlFmKzRkMDV2NmxIWVpyOE41NzNrNVowQlZpc3M3QkRoZld0S1MzK3NmQXFRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNzc2VzYyI6ICJeMy4wLjAiLAotICAgICAgICAidXRpbC1kZXByZWNhdGUiOiAiXjEuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtc3ZnbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXN2Z28vLS9wb3N0Y3NzLXN2Z28tNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUQ3NUtzSDF6bTVackh5eFBha0F4Sld0a3lYZXc1cXdTNzB2NTZleHd2dzU0MmQ5Q1J0VG83OEswV2VGeFpCNEc3SlhLS01iRVp0WmF5VEdkSWt5L2VBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIsCi0gICAgICAgICJzdmdvIjogIl4yLjcuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwIHx8IF4xMiB8fCA+PTE0LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzIjogIl44LjIuMTUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtc3Znby9ub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci03LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUXJXWEIrWlFTVlBtSVdJaHRFTzlIK2d3SGFNR1lpRjVDaHZvSitLOVpHSEcvc1ZzYTZ5aWVzQUQxR0MveDQ2c0VUMDBYbHdvMXU0OVJWVlZ6dmNTa3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bvc3Rjc3Mtc3Znby9ub2RlX21vZHVsZXMvY3NzLXRyZWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLXRyZWUvLS9jc3MtdHJlZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFJwZHBwRjdUUmF6WnJqSjZ2M3N0enY5M3F4UmNTc0ZtVzZjWDBabTJOVktweEUxV1YxSGJsbmdoVnY5VHJlaXJlSGtxSS9WREVzZm9sUkYxcDZ5N1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWRuLWRhdGEiOiAiMi4wLjE0IiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wb3N0Y3NzLXN2Z28vbm9kZV9tb2R1bGVzL21kbi1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjE0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZG4tZGF0YS8tL21kbi1kYXRhLTIuMC4xNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZG42d2QwdXc1R3Nkc3dQRmZzZ01wNU5TQjAvYURlNmZLOTRZSlYvQUpEWVhMNkhWTFdCc3hlcTdqczdBZCttVTJLOUxBbHdwazZrTjJENW13Q1BWb3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1zdmdvL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy1zdmdvL25vZGVfbW9kdWxlcy9zdmdvIjogewotICAgICAgInZlcnNpb24iOiAiMi44LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N2Z28vLS9zdmdvLTIuOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rTi9ROWtWMStGK1VlV1lvU2lVTFlvNHhZU0RRbFRnYitheU1vYkFYUHdNbkx2b3A3b3hLTW85T3pJclg1eDNlUzRMNGYyVUhoYzlheFh3WThEcENoZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHJ5c291bmQvc2F4IjogIjAuMi4wIiwKLSAgICAgICAgImNvbW1hbmRlciI6ICJeNy4yLjAiLAotICAgICAgICAiY3NzLXNlbGVjdCI6ICJeNC4xLjMiLAotICAgICAgICAiY3NzLXRyZWUiOiAiXjEuMS4zIiwKLSAgICAgICAgImNzc28iOiAiXjQuMi4wIiwKLSAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMC4wIiwKLSAgICAgICAgInN0YWJsZSI6ICJeMC4xLjgiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInN2Z28iOiAiYmluL3N2Z28iCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy11bmlxdWUtc2VsZWN0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtdW5pcXVlLXNlbGVjdG9ycy8tL3Bvc3Rjc3MtdW5pcXVlLXNlbGVjdG9ycy01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNUppT0RsRUxyejhMMkh3eGZQbmhPV1pZV0R4VkhXTDgzdWZPdjg0TnJjZ2lwSTdUYWVSc2F0QWhLNFRyMi9aaVlsZHBLL3dCdnc1QkQzcWZhSzk2R0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy12YWx1ZS1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy12YWx1ZS1wYXJzZXIvLS9wb3N0Y3NzLXZhbHVlLXBhcnNlci00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMU5OQ3M2dXVyZmtWYmVYRzRTOEpGVDl0MTltNDVJQ25pZjh6V0xkNW9QU1o1MFFud01mSytIM2p2NDA4ZDRqdy83QnR0djVheFM1SWlIb0xhVk5IZVE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJlbHVkZS1scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmVsdWRlLWxzLy0vcHJlbHVkZS1scy0xLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmtjRFByUlpvMVFaTGJuNVJMR1BwZy9XbUlRNjVxb1dXaGNHS2YvYjVlcGxra2FyWDBtOXo4cHBDYXQ0bWxPcVVzV3B5TnVZZ08zVlJ5cllIU3pYNWc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ByZXR0aWVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0aWVyLy0vcHJldHRpZXItMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZjT1dTbm5wQ3JvdkJzbUZaSUdJeTlVcUsyRmFJN0hxYXgrRElPMEE5VXhlVm9ZNGl3ZXlhRmpTNVRhdlpOOTdIZmVocGgwbmhzWm5qbFZLekVRU3JRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAicHJldHRpZXIiOiAiYmluL3ByZXR0aWVyLmNqcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcHJldHRpZXIvcHJldHRpZXI/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcmV0dHktYnl0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWJ5dGVzLy0vcHJldHR5LWJ5dGVzLTUuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GRncwMzlUbXJCcUZLOG1hLzdPTDNzRHovVnl0ZHRKcjA0NC9RVUp0SDB3SzlsYjlqTHE5dEp5SXhVd3RRSkh3YXIyQnF0aUE0aUNXU3dvOUpMa3pGZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJldHR5LWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1lcnJvci8tL3ByZXR0eS1lcnJvci00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQW9KNVlNQWNYS1l4S2h1SkdkY3ZzZStWb2M2djFSZ25zUjNuV2NZVTdxNHQ2ejBRNlQ4NnN2NVpxOFZJUmJPV1dGcHZkR0U4M0x0ZFNNTmQrNlkweHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjE3LjIwIiwKLSAgICAgICAgInJlbmRlcmtpZCI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWIxZ3k1T3JQNSt6RGYyQnZuemRsM2pzVGYxcVhWTWF6YnZDb0todEtxVnM0L1lLNG96WDRnS1FKSlZ5TmUrY2FqTlBuMEtvQzBNQzNGVW1hSFdFbVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xNy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvbm9kZV9tb2R1bGVzL3JlYWN0LWlzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE3LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzJHc3l1a0w2MklKbmxhZmYvblJlZ1BRUjk0Qy9YWGFtdk1XbVNIUko0eTdUcy80b2NHUm1USHZPczhQU0U2cEIzZFdPckQvbnVldVU1c2R1QnNRNHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJvY2Vzcy1uZXh0aWNrLWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvY2Vzcy1uZXh0aWNrLWFyZ3MvLS9wcm9jZXNzLW5leHRpY2stYXJncy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM291VU9wUWh0Z3JiT2ExN0o3K3V4T1RwSVRZV2FHUDcvQWhvUjMrQSsvMWU5c2tyemVsR2kvZFh6RVl5dmJ4dWJFRjZXbjJ5cHNjVEtpS0pGRm4xYWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJvbWlzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9taXNlLy0vcHJvbWlzZS04LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItclpQTlBLVE9ZVk5FRUtGYXExSHFUZ093WkQrNC9ZSFM1dWtMelFDeXBraitPa1l4N2l2MG1BOTFsSmxwUFBaOHZNYXUzSUlHajVRbHdyeCs4aWlTbWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXNhcCI6ICJ+Mi4wLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Byb21wdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvbXB0cy8tL3Byb21wdHMtMi40LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU54TnYva0xndUNBN3AzakU4b0wyYUVCc3JKV2dBYWtCcGdtZ0s2bHBQV1YrV3VPbVk2cjIvemJBVm5QK1Q4YlFsQTBuekhYU0pTSlcwSHE3eWxhRDJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtsZXVyIjogIl4zLjAuMyIsCi0gICAgICAgICJzaXN0ZXJhbnNpIjogIl4xLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJvcC10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE1LjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvcC10eXBlcy8tL3Byb3AtdHlwZXMtMTUuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vajg3Q2daSUNkdWxVb2hvZ1ZBUjdBamxDMDMyN1U0ZWw0TDZlQXZPcUNldWRNRFZVME5UaE5hVitiOURmNGRYZ1NQMWdYTVRuUGRoZmUvMnFESDVjZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb29zZS1lbnZpZnkiOiAiXjEuNC4wIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMS4xIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xNi4xMy4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL25vZGVfbW9kdWxlcy9yZWFjdC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE2LjEzLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0LWlzLy0vcmVhY3QtaXMtMTYuMTMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMjRlNnluRTJIK09LdDRrcXNPdk5kOGtCcFY2NXpveGJBNEJWc0VPQjNBUlZXUWtpL0RIemFVb0M1S3VPTi9CaWNjRGFDQ1RaQnVPY2Zaczcwa1I4YlE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJveHktYWRkciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm94eS1hZGRyLy0vcHJveHktYWRkci0yLjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGxRc01MU1VEVVBUNDRqZHJVL08zN3FsbmlmaXREUCtad3JtbVpjb1NLeUxLdnRaeHB5VjBuMi9iRC9ONHRCQUFaL2dKRWRaVTdLTXJhb0sxK1hZQWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZm9yd2FyZGVkIjogIjAuMi4wIiwKLSAgICAgICAgImlwYWRkci5qcyI6ICIxLjkuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJveHktYWRkci9ub2RlX21vZHVsZXMvaXBhZGRyLmpzIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lwYWRkci5qcy8tL2lwYWRkci5qcy0xLjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMEtJLzYwN3hveFNUb0g3R2pOMUZmU2JMb1UwK2J0VGljanNRU1dRbGgvaFp5a044S3BtTWY3dVl3UFczUitha1o2Ui93MThabFhTSEJZWGlZVVBPM2c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHNsIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BzbC8tL3BzbC0xLjkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRS9ac2RVNEhMcy82OGdZemdHVGtNaWNXVExQZEFmdEpMZkpGbExVQUFLWkdrU3ROVTcyc1pqVDY2U25NRFZPZk9XWS9ZQW9pRDdKeGE5aUh2bmdjYWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHVueWNvZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVueWNvZGUvLS9wdW55Y29kZS0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItclJWK3pRRDh0VkZ5czI2bEFHUjlXVXVTNGlVQW5nSlNjTStaUlNLdHZsNXRLZVoydDVidmRORmROSEJXOUZXUjRndUdIbGdtc1oxRzdCU20yd1RidUE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wdXJlLXJhbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVyZS1yYW5kLy0vcHVyZS1yYW5kLTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02WWcwZWtwS0lDU2pQc3dZT3VDNXNrdS9UU1dhUllsQTBxc1hxSmdNL2QvNHBMUEhQdVR4SzdOYmY3akZLekFlZWRVaFI4QzdLOVV2NjNGQnNTbzh4UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9kdWJ6enoiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9mYXN0LWNoZWNrIgotICAgICAgICB9Ci0gICAgICBdLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9xIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3EvLS9xLTEuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rVi9DVGhrWG82eHlGRVpVdWd3LytwSU95d1hjRGJGWWdTY3Q1Y1QzZ3FsYmtCRTFTSmR3eTZVUW9adm9kaVdGL2NrUUxaeURFL0J1MU02Z1Z1NWxWdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNi4wIiwKLSAgICAgICAgInRlbGVwb3J0IjogIj49MC4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3FzIjogewotICAgICAgInZlcnNpb24iOiAiNi4xMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9xcy8tL3FzLTYuMTEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXZqb01DSndFYXJTYlVZazVPK25tb1N6U3V0U3NUd0Y4NXpjSFBROU9ybEZvWk9ZSWphcUJBSklxSVhqcHR5RDV2VGh4R3E1Mlh1L01hSnpSa0lrNFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2lkZS1jaGFubmVsIjogIl4xLjAuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcXVlcnlzdHJpbmdpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcXVlcnlzdHJpbmdpZnkvLS9xdWVyeXN0cmluZ2lmeS0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRklxZ2oyRVV2VGE3UjUwdTByR3N5VGZ0empZbXYvYTNoTzM0NWJaTnJxYWJOcWp0Z2lETWdtbzRta1VqZCtuelU1b0YzZENsS3FGSVBVS3liVXlxb1E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcXVldWUtbWljcm90YXNrIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3F1ZXVlLW1pY3JvdGFzay8tL3F1ZXVlLW1pY3JvdGFzay0xLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnVhTlNhNmZsS1Q1SmFTWVF6Sm9rMDRKelRMMUNBNmFHaHY1cmZMVzNQZ3FBK00yQ2hwWlFuQUM4aDhpNFpGa0JTOFg1UnFrREJIQTdyNGhlajNLOUE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgotICAgICAgICB9Ci0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JhZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYWYvLS9yYWYtMy40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNxNENXNFFod09IRTh1Y242SjM0TXF0WkNlV0ZQMmFRU21ybHJvWWdxQVYxUGpTdEloSlh4WXVUZ1VJZmtFazd6VExqbUlqTG1VNXErZmJEMU5uT0pBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBlcmZvcm1hbmNlLW5vdyI6ICJeMi4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JhbmRvbWJ5dGVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JhbmRvbWJ5dGVzLy0vcmFuZG9tYnl0ZXMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZZbDNpT1grNENLVVd1eEdpOVVraGllNmZzcVhxUzlGRTJaYWljNHRORkQyTjJRUWFYT01GYnVLSzRRbURIQzBKTzZCMVpwNDFKMExwVDBvUjY4YW1RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIl41LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmFuZ2UtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JhbmdlLXBhcnNlci8tL3JhbmdlLXBhcnNlci0xLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSHJnc3grb3Jxb3lnbm1oRmJLYUhFNmMyOTZKK0hUQVFYb3hFRjZnTnVwUk9tbUdKUm95emZHM2NjQXZlcUNCcndyLzJ5eFE1QlZkL0dUbDVhZ093U2c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yYXctYm9keSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYXctYm9keS8tL3Jhdy1ib2R5LTIuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xcUpCdEV5VmdTMFptUEdkQ0ZQV0ozRnJlb3F2RzRNVlFsbi9rQ2dGN09scTk1SWJPcDAvQld5TXdiZHRuNFZUdmtNOFk3a2hDUTJYZ2svdGNyQ1hpZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJieXRlcyI6ICIzLjEuMiIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICIyLjAuMCIsCi0gICAgICAgICJpY29udi1saXRlIjogIjAuNC4yNCIsCi0gICAgICAgICJ1bnBpcGUiOiAiMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2J5dGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J5dGVzLy0vYnl0ZXMtMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9OZjdUeXpUeDZTM3lSSk9iT0FWNzk1NnI4Y3IyK09qOEFDNWR0OHdTUDNCUUFvZVg1OE5vSHlDVThQOHpHa05YU3RqVFNpNmZ6TzZGMHBCZGNZYkVnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdjNNWG5aQWN2bnl3a1RVRVpvbUlBY3RsZTdSWFhlZWRPUjMxd3dsN1ZseW9YTzRRaTlhcnZTZW5OUVduZTFUY1J3aENMMUh3TEkyMWJFcWRwajgvckE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2FmZXItYnVmZmVyIjogIj49IDIuMS4yIDwgMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC8tL3JlYWN0LTE3LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ25oUHQ3NWkvZHEvejMvNnEvMGFzUDc4RDB1NTkyRDVMMXBkN004UCtkY2s2RnUvakplTDZpVlZLMjNmcHRTVVpqOFZqZisrN3dYQThVTmNsR1FjYkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9vc2UtZW52aWZ5IjogIl4xLjEuMCIsCi0gICAgICAgICJvYmplY3QtYXNzaWduIjogIl40LjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWFwcC1wb2x5ZmlsbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1hcHAtcG9seWZpbGwvLS9yZWFjdC1hcHAtcG9seWZpbGwtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNaNDFjeGlVNWxsSUIwMDN5eHhRQllyQVJCcWUwcmVwcVBUVFlCVG1NcVR6OXN6ZUJiRTM3QmVoQ0U4OTFOWnNtZFpxcVAreFdLZFQzZW8zdk96Tjh3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvcmUtanMiOiAiXjMuMTkuMiIsCi0gICAgICAgICJvYmplY3QtYXNzaWduIjogIl40LjEuMSIsCi0gICAgICAgICJwcm9taXNlIjogIl44LjEuMCIsCi0gICAgICAgICJyYWYiOiAiXjMuNC4xIiwKLSAgICAgICAgInJlZ2VuZXJhdG9yLXJ1bnRpbWUiOiAiXjAuMTMuOSIsCi0gICAgICAgICJ3aGF0d2ctZmV0Y2giOiAiXjMuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1hcHAtcmV3aXJlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1hcHAtcmV3aXJlZC8tL3JlYWN0LWFwcC1yZXdpcmVkLTIuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11RlFXVEVyWGVMRHJNek9KSEtwMGg4UDF6MExWOUh6UEdzSjZhZE90R2xBL0I5V2ZUNlNoaDRqMnRMVFRHbFhPZmlWeDZ3NmlXcHA3U09DNXB2aytnQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiXjUuNi4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJyZWFjdC1hcHAtcmV3aXJlZCI6ICJiaW4vaW5kZXguanMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZWFjdC1zY3JpcHRzIjogIj49Mi4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWFwcC1yZXdpcmVkL25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjcuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTUuNy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jQnpublE5S2pKcVU2N0I1MlJNQzY1Q01hcksyNjAwV0ZuYmtjYWl3V3EzeHkvNWhhRkpsc2hnbnBqb3ZNVkorSGZmNDlkOEdFbjBiODdDNXBEUTEwZz09IiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlciIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3QtZGV2LXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMTIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1kZXYtdXRpbHMvLS9yZWFjdC1kZXYtdXRpbHMtMTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04NEl2eG1yMTdLalV1cHlxekZvZGU2eEtoand1RUpEUk9XS0p5L0J0aGtMN1duNk5KOGg0V0U2ay9leEF2NkltUyswb1pMUlJXNWovYUlOTUh5ZUdlUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xNi4wIiwKLSAgICAgICAgImFkZHJlc3MiOiAiXjEuMS4yIiwKLSAgICAgICAgImJyb3dzZXJzbGlzdCI6ICJeNC4xOC4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCi0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjMiLAotICAgICAgICAiZGV0ZWN0LXBvcnQtYWx0IjogIl4xLjEuNiIsCi0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeNC4wLjAiLAotICAgICAgICAiZmlsZXNpemUiOiAiXjguMC42IiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKLSAgICAgICAgImZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbiI6ICJeNi41LjAiLAotICAgICAgICAiZ2xvYmFsLW1vZHVsZXMiOiAiXjIuMC4wIiwKLSAgICAgICAgImdsb2JieSI6ICJeMTEuMC40IiwKLSAgICAgICAgImd6aXAtc2l6ZSI6ICJeNi4wLjAiLAotICAgICAgICAiaW1tZXIiOiAiXjkuMC43IiwKLSAgICAgICAgImlzLXJvb3QiOiAiXjIuMS4wIiwKLSAgICAgICAgImxvYWRlci11dGlscyI6ICJeMy4yLjAiLAotICAgICAgICAib3BlbiI6ICJeOC40LjAiLAotICAgICAgICAicGtnLXVwIjogIl4zLjEuMCIsCi0gICAgICAgICJwcm9tcHRzIjogIl4yLjQuMiIsCi0gICAgICAgICJyZWFjdC1lcnJvci1vdmVybGF5IjogIl42LjAuMTEiLAotICAgICAgICAicmVjdXJzaXZlLXJlYWRkaXIiOiAiXjIuMi4yIiwKLSAgICAgICAgInNoZWxsLXF1b3RlIjogIl4xLjcuMyIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMSIsCi0gICAgICAgICJ0ZXh0LXRhYmxlIjogIl4wLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3QtZGV2LXV0aWxzL25vZGVfbW9kdWxlcy9hcnJheS11bmlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS11bmlvbi8tL2FycmF5LXVuaW9uLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IR3l4b09UWVV5Q002c3RVZTZFSmduZDRFb2V3QUk3ek1kZnFPK2tHam5sWm1CRHovY1I1cGY4ci9jUjRXcTYwc0wvcDBJa2NqVUVFUHdTM0dGckl5dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWRldi11dGlscy9ub2RlX21vZHVsZXMvZmluZC11cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzgvUFhUMXdsTExEZ1R6RHM3c2pxOWh6ejB2WEQrem4rN3d5cEVlNGZYUXhDbWRtcWZHc0VQUXhtaUNTUUkzYWpGVjkxYlZTc3ZOdHJKUmlXNm5Hbmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjYuMC4wIiwKLSAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1kZXYtdXRpbHMvbm9kZV9tb2R1bGVzL2dsb2JieSI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjExLjEuMCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmJ5Ly0vZ2xvYmJ5LTExLjEuMC50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItamhJWGFPenkxc2I4SXlvY2FydVdTbjFUam1uQlZzOEF5aGN5ODNybXhOSjhxMnVXS0NBajNDbkpZK0twR1NYQ3VlQVBjMGkwNWtWdlZLdFAxdDlTM2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJhcnJheS11bmlvbiI6ICJeMi4xLjAiLAogICAgICAgICAiZGlyLWdsb2IiOiAiXjMuMC4xIiwKQEAgLTE1ODcyLDM5MiArMjM3MSw1NjggQEAKICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1kZXYtdXRpbHMvbm9kZV9tb2R1bGVzL2xvYWRlci11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2FkZXItdXRpbHMvLS9sb2FkZXItdXRpbHMtMy4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVp2RncxS1dTM0dWeVlCWWI3cWttUk0vV3dMMlRRUUJ4Z0NLNjJybHZtNFdwVlEyM05iNHRZakFwVWxmanJFR3ZPczdLSEVzbXlVbjc1T0hackpNV1B3PT0iLAorICAgICJub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYWNlZnVsLWZzLy0vZ3JhY2VmdWwtZnMtNC4yLjExLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SYko1L2ptRmNOTkNjRFY1bzllVG5CTEovSHN6V1YwUDczYmMrRmY0blMvckpqK1lhUzZJR3lpT0wwVm9CWVgrbDFXcmwzazYzaC9LckgrbmhKMFh2UT09IiwKKyAgICAgICJkZXYiOiB0cnVlCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dyZW1saW50IjogeworICAgICAgInZlcnNpb24iOiAiMy44LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyZW1saW50Ly0vZ3JlbWxpbnQtMy44LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlTbkRXNGt4Y2hTSmg2VnpIalI2TU53MEZ3MXUxYXJkVHBoZGVSdlBPSFRWbmFsTG9FaXNYbnlkTFc3MHFwNkNLaUxLQTA1SWFTcFNqdWJja2ZlMVhBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3QtZGV2LXV0aWxzL25vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pUFpLNmVZamJ4UnUzdUI0L1daM0VzRUlNSkZNcUFvb3BsM1IrenVxMFVqY0FtL01PNktDd2VEZ1BmUDNlbFR6dG9LUDNLdG5WSHhUbjJOSEJTRFZVdz09IiwKKyAgICAibm9kZV9tb2R1bGVzL2hhcy1mbGFnIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUV5a0pUL1ExS2pUV2N0cHBnSUFnZlNPMHRLVnVaVWpoZ01yMTdrcVR1bU1sNkFmdjNFSVNsZVU3cVpVem9YREZUQUhUREM0Tk9vRy9aeFUzRXZsTVBRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9odG1sLWVuY29kaW5nLXNuaWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lbmNvZGluZy1zbmlmZmVyLy0vaHRtbC1lbmNvZGluZy1zbmlmZmVyLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMjJvVHFJVTR1dVBnRWVtZno3TkRKejZPZUtmMTJMc3UrUUMrczNCVnBkYTY0bFRpTVlDeUd3ZzVraTR2RnhrTXdRZGVaRGwyYWRab3FVZ2RGdVRnUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxvY2F0ZSI6ICJeNS4wLjAiCisgICAgICAgICJ3aGF0d2ctZW5jb2RpbmciOiAiXjMuMS4xIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWRldi11dGlscy9ub2RlX21vZHVsZXMvcC1saW1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFlPYW5NM3dHd05Hc1pOMmNWVFlQQXJ3NDU0eG5YajVxbVdGMWJFb0FjNCtjVS9vbDdHVmg3b2RldmpwMUZOSGR1SGMzS1pNY0ZkdXhVNVhjNnVKUlE9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9odHRwLXByb3h5LWFnZW50IjogeworICAgICAgInZlcnNpb24iOiAiNy4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtcHJveHktYWdlbnQvLS9odHRwLXByb3h5LWFnZW50LTcuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UMWdrQWlZWURXWXgzVjVCbXl1N0hjZmN2TDdtVXJUV2lNNnlPZmEzUElwaFZpSi9nRlBidmlkUSt2ZXFTT0hjaS9QeEJjRGFiZVVOQ3pwT09ESlppZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ5b2N0by1xdWV1ZSI6ICJeMC4xLjAiCisgICAgICAgICJhZ2VudC1iYXNlIjogIl43LjEuMCIsCisgICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgICAgIm5vZGUiOiAiPj0gMTQiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWRldi11dGlscy9ub2RlX21vZHVsZXMvcC1sb2NhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGFOanRSV1VCWSsrekI1bkUvTndjYW9NeWxTUGsrUytaSE5CMVR6ZGJNSk1ueTZkeW5wQUd0N1gvdGwvUVlxM1RJZUU2bnhIcHBibzJMR3ltckc1UHc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9odHRwcy1wcm94eS1hZ2VudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwcy1wcm94eS1hZ2VudC8tL2h0dHBzLXByb3h5LWFnZW50LTcuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12SzlQNS9pVWZkbDk1QUkrSlZ5VXVJY1Z0ZDRvZnZ0ck9yM0hOdE0yeXhDOWJuTWJFZHAzeDAxT2hRTm5qYjhJSllpMzhWbFRFM21CWHdjZnZ5d3VTdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4zLjAuMiIKKyAgICAgICAgImFnZW50LWJhc2UiOiAiXjcuMS4yIiwKKyAgICAgICAgImRlYnVnIjogIjQiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgICAgIm5vZGUiOiAiPj0gMTQiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWRvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE3LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItczRoOTZLdExEVVFsc0VOaE1uMWFyOHQyYkVhK3EvWUF0ajhwUFBkSWpQREdCRElWTnNyRDlhWE5XcXNwVWU2QXpLQ0lHMEMxSFpaTHFMVjdxcE9CR0E9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9pY29udi1saXRlIjogeworICAgICAgInZlcnNpb24iOiAiMC42LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00ZkNrNzl3c2hNZHpNcDJySDA2cVdySkU0aW9scUxoQ1VIK09pdUlnVSsrUkIwKzk0TmxETDgxYXRPN0dYNTV1VUt1ZW8wdHhITnR2RXlJNkQ3V2RNdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxvb3NlLWVudmlmeSI6ICJeMS4xLjAiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICJeNC4xLjEiLAotICAgICAgICAic2NoZWR1bGVyIjogIl4wLjIwLjIiCisgICAgICAgICJzYWZlci1idWZmZXIiOiAiPj0gMi4xLjIgPCAzLjAuMCIKICAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlYWN0IjogIjE3LjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3QtZXJyb3Itb3ZlcmxheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZXJyb3Itb3ZlcmxheS8tL3JlYWN0LWVycm9yLW92ZXJsYXktNi4wLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vNlVaMnFnRXlIMmFxellaZ1FQeEVuejMzTkoyZ05zbkhBMm81K280d1c5YkxNL0pZUWl0TlA5eFBoc1h3QzA4aE1Nb3ZmR2UvOHJldHNkRHNjelBSZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE4LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtaXMvLS9yZWFjdC1pcy0xOC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhXR0RJVzZ4OTIxeHR6UGtoaVVMdHRoSkhvSnZCYkYzcTI2Znpsb1BDSzBoc3Z4dFBWZWx2ZnR3M3pqYkhXU2tSMmttOVorNHV4YkRESy82Wnc5Qjh3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXJlZnJlc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0LXJlZnJlc2gvLS9yZWFjdC1yZWZyZXNoLTAuMTEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRjI3cVpyOHVVcXdoV1pib29uZHNQeDh0bkMzQ3QzU3haQTNWNVd5RXZ1alJ5eU52MFZZUGhvQmcxZ1o4L01WNXR1YlFwNzZUcnc4bFR2OWh6UkJhK0E9PSIsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3Qtc2NyaXB0cy8tL3JlYWN0LXNjcmlwdHMtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThWQW1FbS9aQXdRekorR09NTGJCc1RkREtPcHVaaDdSUHMwVXltdkJSMnZSazRpWldDc2tqYkZueHFqcnpvSXZsTk5SWjNRSkZ4Ni9xRFNpNnpTbmFRPT0iLAorICAgICJub2RlX21vZHVsZXMvaWdub3JlIjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lnbm9yZS8tL2lnbm9yZS01LjMuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHNCVE5VcVFURHdrV3RjZFlJMmkwNlkvblVCRXNORURKS2pXZGlnTHZlZ3k4a0R1SkFTOHVSbHBra2NRcHlFWEwwWi9wakR5NUhCbU1qUkNKMmdxK2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSA0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pbmRlbnQtc3RyaW5nIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luZGVudC1zdHJpbmcvLS9pbmRlbnQtc3RyaW5nLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FZEREWnU0QTJPeUlLN0xyLzJ6Ryt3NWptYnVrMURWQm5Fd1JFUXZCenNwQkprQ0ViUmE4R3hVMWxnaFljYUdKQ25SV2liakRYbHE3NzlYMS95NXh3Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtZXh0Z2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRnbG9iLy0vaXMtZXh0Z2xvYi0yLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2JLYkFOa042MDNWaTRqRVp2NDlMZVZKTW40eUd3c2J6WndvckVveUVpdXRzTjNuSllkYk8zNnpmaEdKNlFFRHBPWklGa0R0bnE1SlJ4bXZsM2pzb1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtZ2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1nbG9iLy0vaXMtZ2xvYi00LjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGVsU2F5SEgzNlpnRTdaV2hsaTdwVzM0aE5iTmw4T2p2NUtWbWtKRDRoQmREM3RoOFRmazl2WWFzTE0rbVhXT1poRmtnWmZ4aExTbnJ3UnI0ZWxTU2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbiI6ICJeMC41LjMiLAotICAgICAgICAiQHN2Z3Ivd2VicGFjayI6ICJeNS41LjAiLAotICAgICAgICAiYmFiZWwtamVzdCI6ICJeMjcuNC4yIiwKLSAgICAgICAgImJhYmVsLWxvYWRlciI6ICJeOC4yLjMiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLW5hbWVkLWFzc2V0LWltcG9ydCI6ICJeMC4zLjgiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LXJlYWN0LWFwcCI6ICJeMTAuMC4xIiwKLSAgICAgICAgImJmaiI6ICJeNy4wLjIiLAotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjE4LjEiLAotICAgICAgICAiY2FtZWxjYXNlIjogIl42LjIuMSIsCi0gICAgICAgICJjYXNlLXNlbnNpdGl2ZS1wYXRocy13ZWJwYWNrLXBsdWdpbiI6ICJeMi40LjAiLAotICAgICAgICAiY3NzLWxvYWRlciI6ICJeNi41LjEiLAotICAgICAgICAiY3NzLW1pbmltaXplci13ZWJwYWNrLXBsdWdpbiI6ICJeMy4yLjAiLAotICAgICAgICAiZG90ZW52IjogIl4xMC4wLjAiLAotICAgICAgICAiZG90ZW52LWV4cGFuZCI6ICJeNS4xLjAiLAotICAgICAgICAiZXNsaW50IjogIl44LjMuMCIsCi0gICAgICAgICJlc2xpbnQtY29uZmlnLXJlYWN0LWFwcCI6ICJeNy4wLjEiLAotICAgICAgICAiZXNsaW50LXdlYnBhY2stcGx1Z2luIjogIl4zLjEuMSIsCi0gICAgICAgICJmaWxlLWxvYWRlciI6ICJeNi4yLjAiLAotICAgICAgICAiZnMtZXh0cmEiOiAiXjEwLjAuMCIsCi0gICAgICAgICJodG1sLXdlYnBhY2stcGx1Z2luIjogIl41LjUuMCIsCi0gICAgICAgICJpZGVudGl0eS1vYmotcHJveHkiOiAiXjMuMC4wIiwKLSAgICAgICAgImplc3QiOiAiXjI3LjQuMyIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI3LjQuMiIsCi0gICAgICAgICJqZXN0LXdhdGNoLXR5cGVhaGVhZCI6ICJeMS4wLjAiLAotICAgICAgICAibWluaS1jc3MtZXh0cmFjdC1wbHVnaW4iOiAiXjIuNC41IiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNC40IiwKLSAgICAgICAgInBvc3Rjc3MtZmxleGJ1Z3MtZml4ZXMiOiAiXjUuMC4yIiwKLSAgICAgICAgInBvc3Rjc3MtbG9hZGVyIjogIl42LjIuMSIsCi0gICAgICAgICJwb3N0Y3NzLW5vcm1hbGl6ZSI6ICJeMTAuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtcHJlc2V0LWVudiI6ICJeNy4wLjEiLAotICAgICAgICAicHJvbXB0cyI6ICJeMi40LjIiLAotICAgICAgICAicmVhY3QtYXBwLXBvbHlmaWxsIjogIl4zLjAuMCIsCi0gICAgICAgICJyZWFjdC1kZXYtdXRpbHMiOiAiXjEyLjAuMSIsCi0gICAgICAgICJyZWFjdC1yZWZyZXNoIjogIl4wLjExLjAiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMC4wIiwKLSAgICAgICAgInJlc29sdmUtdXJsLWxvYWRlciI6ICJeNC4wLjAiLAotICAgICAgICAic2Fzcy1sb2FkZXIiOiAiXjEyLjMuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy41IiwKLSAgICAgICAgInNvdXJjZS1tYXAtbG9hZGVyIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHlsZS1sb2FkZXIiOiAiXjMuMy4xIiwKLSAgICAgICAgInRhaWx3aW5kY3NzIjogIl4zLjAuMiIsCi0gICAgICAgICJ0ZXJzZXItd2VicGFjay1wbHVnaW4iOiAiXjUuMi41IiwKLSAgICAgICAgIndlYnBhY2siOiAiXjUuNjQuNCIsCi0gICAgICAgICJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiAiXjQuNi4wIiwKLSAgICAgICAgIndlYnBhY2stbWFuaWZlc3QtcGx1Z2luIjogIl40LjAuMiIsCi0gICAgICAgICJ3b3JrYm94LXdlYnBhY2stcGx1Z2luIjogIl42LjQuMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAicmVhY3Qtc2NyaXB0cyI6ICJiaW4vcmVhY3Qtc2NyaXB0cy5qcyIKKyAgICAgICAgImlzLWV4dGdsb2IiOiAiXjIuMS4xIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lzLW51bWJlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1udW1iZXIvLS9pcy1udW1iZXItNy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTQxQ2lma2c2ZThUeWxTcGR0VHBlTFZNcXZTQkVWelR0dEh2RVJENzQxK3BuWjhBTnYwMDA0TVJMNDNRS1BEbEs5Y0d2TnA2TlpXWlVCbGJHWFl4eG5nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lLy0vaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDWWVSQTJyVmliS1pkK3MyNjI1Z0duR0YvdDdEU3FEczRkUDdDckxBMW03aktXejZwcHMwTHBZTEpOOFE2NEh0bVBLSjFock4zbnpQTktGRUtPVWlRPT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaml0aSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMjEuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaml0aS8tL2ppdGktMS4yMS43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vaW1LTkc0RWJXTnJWam9OQy8xSDUvOUdGeSt0cWpHQkhDYVNzTitQMlJuUHFqc0xtdjZVRDNFaitLajhuQldhUkF3eWs3a0s1WlVjK09FYXRuVFIzQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJqaXRpIjogImJpbi9qaXRpLmpzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qcy10b2tlbnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMtdG9rZW5zLy0vanMtdG9rZW5zLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SZEpVZmxjRTNjVXpLaU1xUWdzQ3UwNkZQdTlVZElKTzBiZVliUGhITjRrNmFwZ0p0aWZjb0N0VDliY3hPcFlCdHBEMmtDTTZTYnpnNENhdXNXL1BLUT09IgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qc2RvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjI2LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNkb20vLS9qc2RvbS0yNi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN2YzlXVWh4U01FbzRNY0VTM1A3b0szUWFYbGRDZk5XcDdwbDJOTmVpSUZsQ29McjNrZnE5a2IxZnhmdGl3azFGTFY3Q3ZwdkRmb254dHpVRGVTT1BnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNzc3N0eWxlIjogIl40LjIuMSIsCisgICAgICAgICJkYXRhLXVybHMiOiAiXjUuMC4wIiwKKyAgICAgICAgImRlY2ltYWwuanMiOiAiXjEwLjUuMCIsCisgICAgICAgICJodG1sLWVuY29kaW5nLXNuaWZmZXIiOiAiXjQuMC4wIiwKKyAgICAgICAgImh0dHAtcHJveHktYWdlbnQiOiAiXjcuMC4yIiwKKyAgICAgICAgImh0dHBzLXByb3h5LWFnZW50IjogIl43LjAuNiIsCisgICAgICAgICJpcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZSI6ICJeMS4wLjEiLAorICAgICAgICAibndzYXBpIjogIl4yLjIuMTYiLAorICAgICAgICAicGFyc2U1IjogIl43LjIuMSIsCisgICAgICAgICJycndlYi1jc3NvbSI6ICJeMC44LjAiLAorICAgICAgICAic2F4ZXMiOiAiXjYuMC4wIiwKKyAgICAgICAgInN5bWJvbC10cmVlIjogIl4zLjIuNCIsCisgICAgICAgICJ0b3VnaC1jb29raWUiOiAiXjUuMS4xIiwKKyAgICAgICAgInczYy14bWxzZXJpYWxpemVyIjogIl41LjAuMCIsCisgICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjcuMC4wIiwKKyAgICAgICAgIndoYXR3Zy1lbmNvZGluZyI6ICJeMy4xLjEiLAorICAgICAgICAid2hhdHdnLW1pbWV0eXBlIjogIl40LjAuMCIsCisgICAgICAgICJ3aGF0d2ctdXJsIjogIl4xNC4xLjEiLAorICAgICAgICAid3MiOiAiXjguMTguMCIsCisgICAgICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiAiXjUuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2FudmFzIjogIl4zLjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJjYW52YXMiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzZXNjIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZXNjLy0vanNlc2MtMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9zTTNkTzJGT3pYaktRaEp1bzBRMTczd2YyS09vOHQ0STh2SHk2bEY5cG9VcDdiS1QwL05IRThmUFgyM1B3ZmhueWtmcW5DMnhSeE9uVnc1WHVHSWFBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiYmluIjogeworICAgICAgICAianNlc2MiOiAiYmluL2pzZXNjIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzb241IjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb241Ly0vanNvbjUtMi4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhtT1dlN2V5SFlIMTRjTGRWUG95ZytHT0gzcllYKytLcHpyeWxKd1NXOTh0M05rK1U4WE9sOEZXS09nd3R6ZGI4bFhHZjZ6WXdEVXplSE1XZnhhc3lnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiYmluIjogeworICAgICAgICAianNvbjUiOiAibGliL2NsaS5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qc29uZmlsZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uZmlsZS8tL2pzb25maWxlLTYuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01ZGduZFdPcmlZU201Y25ZYUpOaGFsTE5ES09xRnd5REIvcnIxRTlac0djaUd2S1BzOFIyeFlHQ2FjdWYzejZLMVlLRHoxODJmZCtmWTNjbjNwTXFYUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCiAgICAgICB9LAogICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnNldmVudHMiOiAiXjIuMy4yIgorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMS42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInAtbG9jYXRlIjogIl40LjEuMCIKICAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlYWN0IjogIj49IDE2IiwKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiXjMuMi4xIHx8IF40IgorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbG9kYXNoIjogeworICAgICAgInZlcnNpb24iOiAiNC4xNy4yMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLy0vbG9kYXNoLTQuMTcuMjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxnVlRNcFF0SW9wQ2k3OVNKZURpUDBUZldpNUNORWMvTC9hUmRUaDN5SXZtWlhUbmhlV3BLalNaaG52TWw4aVhiQzF0Rmc5Z2RISERNTG9WN0NuRyt3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvb3NlLWVudmlmeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb29zZS1lbnZpZnkvLS9sb29zZS1lbnZpZnktMS40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWx5dXhQR3IvV2ZocmxlbTJDTC9VY25VYzF6Y3FLQUltQkR6dWtZN1k1Ri95UWlOZGtvNitmUkxldmx3MUhnTXlTdzdmNjExVUlZNDA4RXR4UlNvSzNRPT0iLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImpzLXRva2VucyI6ICJeMy4wLjAgfHwgXjQuMC4wIgogICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgInR5cGVzY3JpcHQiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgImJpbiI6IHsKKyAgICAgICAgImxvb3NlLWVudmlmeSI6ICJjbGkuanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtwTkFSUUEzSXd2K2pUQTB1dFVWVmJyaCtKbHJyMUZ2MGU1NkdHekFGT1hON2RrL0Z2aWFEVzhMSG1LNTJEbGNINFdQMm42Z0k4dk4xYWVzQkZnbzl3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAieWFsbGlzdCI6ICJeMy4wLjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2x6LXN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sei1zdHJpbmcvLS9sei1zdHJpbmctMS41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWg1YmdKV3B4Sk5zd2JVN3FDclYwdElLUUNhUzNibFBEcnFLV3grUXh6dXpMMXpHVXppajlYQ1dMclNMc0pQdTV0K2VXQS95Y2V0ellBTzVJT01jV0FRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUsCisgICAgICAiYmluIjogeworICAgICAgICAibHotc3RyaW5nIjogImJpbi9iaW4uanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21hZ2ljLXN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMzAuMjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hZ2ljLXN0cmluZy8tL21hZ2ljLXN0cmluZy0wLjMwLjIxLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12ZDJGNFlVeUVYS0djTEhvcStURXlDanh1ZVNlSG5GeHl5ak5wODB5ZzBYVjR2VWhuRGVyL2x2dmxxTS9hckI1YlhRTjVLMi8zb2lueUNSeXg4VDJDUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiAiXjEuNS41IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tYWtlLWRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nM0ZlUDIwTE53aEFMYi82Q3o2RGQ0RjJuZ3plMGp6N3RienJEMndBVitvOUZlTkhlNHJMK3lLMm1kMEovZmlTZjFzYTFBRGhYcWk1K29Wd09NL2VHdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNlbXZlciI6ICJeNi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZXJnZTIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UyLy0vbWVyZ2UyLTEuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04cTdWRWdNSlc0Sjh0Y2ZWUHk4ZzA5TmNRd1pkYndGRXFoZS9XWmtvSXpqbi8zVEdEd3RPQ1l0WEd4QTNPOHRQenBjekNDRGd2K1AyUDV5MDBaSk9PZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21pY3JvbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWljcm9tYXRjaC8tL21pY3JvbWF0Y2gtNC4wLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBYd2ZCaFl1MGhCQ1B3OERuMEUrV0RZYjdhZjNkU0xWV0tpM0hHdjg0SWRGNFR5Rm9DMHlzeEZkMEdveHc3blN2NFQvUHpFSlF4c1lzRWlGQ0tvMkJBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJhY2VzIjogIl4zLjAuMyIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMy4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTguNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbWluLWluZGVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW4taW5kZW50Ly0vbWluLWluZGVudC0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSTlqd01uMDdTeS9Jd09qM3pWa1ZpazJKVHZncGF5a0RaRWlnTDZSeDZOOUxiTXl3d1VTTXR4RVQrN2xWb0RMTGQzTzNJWHdKd3Z1dW5zOFVCL0hlQWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21zIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZGbHp1YlRMWkczSjJhL05WQ0FsZUVoanpxNW94Z0h5YUNVOXlZWHZjTHN2b1ZhSEpxL3M1eFhJNi9YWFA2dHo3Ujl4QU90SG5TTy90WHRGM1dSVGxBPT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbmFub2lkIjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjExIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYW5vaWQvLS9uYW5vaWQtMy4zLjExLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OOFNwZlBVblVwMWJLK1BNWVc4cVNXZGw5VSt3d05XSTRRS3hPWUR5OUpBcm8zV01YN3AyT2VWUkY5diszNDdwbmFrTmV2UG1pSGhObVoySGJGQTc2dz09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKICAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9AamVzdC9jb25zb2xlIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb25zb2xlLy0vY29uc29sZS0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtaL3ROcFMzTlhuMG1sWFhYUE51RFpuYjRjMG9aMjByNEs1ZWVtTTJrMzBaQzNHMFQwMm5YVXZ5aGY1WWRiWFdIUEVKTGM5cUdMeEVaMjE2TWRMK1pnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJuYW5vaWQiOiAiYmluL25hbm9pZC5janMiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgorICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8IF4xMy43IHx8IF4xNCB8fCA+PTE1LjAuMSIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvQGplc3QvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvY29yZS8tL2NvcmUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BSzYvVVRydlFEMENkMjROU3FtSUE2cktzdTB0S0l4ZmlDZHVjWnZxeFlkbU1pc09ZQXNkSXRzcFQrZlFEUVlBUlBmOFhnakFGWmkwb2dXMmFnSDVuUT09IiwKKyAgICAibm9kZV9tb2R1bGVzL25vZGUtcmVsZWFzZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMTkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtcmVsZWFzZXMvLS9ub2RlLXJlbGVhc2VzLTIuMC4xOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHhPV0pzQkt0ekFxN0RZMEorRFR6dXo1OEs4ZTdzSmJkZ3drYk1XUWU4VVlCNmVrbXNRNDVxME0vdEpEc0dhWm1iQytsN241N1VWOEhsNXRIeE85dXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ud3NhcGkiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMTYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL253c2FwaS8tL253c2FwaS0yLjIuMTYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYxSS9iaW1EcGozbmNhTkRoZnlNV3VGcW1RREJ3REIwRm9nYzJxcEwzQld2a1F0ZUZELzhCeld1SVJsODNycTBEWGZtOFNHdC9IRmhMWFp5bGpUWGNRPT0iLAorICAgICAgImRldiI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvb2J1ZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYnVnLy0vb2J1Zy0yLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdVRxRjlNdVByYUFRK0lzblBmMzY2Ukc0Y1A5UnRVaTdNTE8xTjNLRWMrd2IwYTZ5S3BlTDBsbWsySUIxalk1S0hQQWxUYzZUL0pSZEMvWXF4SE53a1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3N4enoiLAorICAgICAgICAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZGVidWciCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLWxpbWl0IjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTIuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vLzg4bUZXU0p4OGx4Q3p3ZEFBQlRKTDJNeVdCMTIrZUlZN01ETDJTcUxtQWtlS1U5cXhSdld1U3lUam0zRlVtcEJFTXVGZmNrQUlxRWFWR1VEeGI2dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC9yZXBvcnRlcnMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJlbWl0dGVyeSI6ICJeMC44LjEiLAotICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtY2hhbmdlZC1maWxlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtY29uZmlnIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXJ1bm5lciI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC13YXRjaGVyIjogIl4yNy41LjEiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicmltcmFmIjogIl4zLjAuMCIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCisgICAgICAgICJwLXRyeSI6ICJeMi4wLjAiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgorICAgICAgICAibm9kZSI6ICI+PTYiCiAgICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJub2RlLW5vdGlmaWVyIjogIl44LjAuMSB8fCBeOS4wLjAgfHwgXjEwLjAuMCIKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3AtbG9jYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI3OVpaLzB3QXhLR3Uzb1lNbHo4ankva2Joc05yUzdTS1o3UHhFSEJnSjUrRjJtdEZXMmZLMmNPdEJoMWNIWWtRc2J6RlY3SStFb1JLZTZZdDBvSzdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicC1saW1pdCI6ICJeMi4yLjAiCiAgICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAibm9kZS1ub3RpZmllciI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLXRyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLXRyeS8tL3AtdHJ5LTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNG5QQVZUQVUwQjlEMzUvR2szdUpmLzdYWWJRY3lvaFNLZHZBeElSU05naEZsNGU3MWhWb0duQk5RejljV2FYeE8ySTEwS1RDKzNqTWR2dm9LdzZkUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGFyc2U1IjogeworICAgICAgInZlcnNpb24iOiAiNy4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcnNlNS8tL3BhcnNlNS03LjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSUludlU3ZmFibDM0cW1pOWdZOFhPVnhoWXlNeXVIMnhVTnBiMnE4L1krNzU1MktsZWprUnZxdkQxOW5Nb1VXL3VRR0dicU5wQTZUdWZ1NUZMNUJaZ3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZW50aXRpZXMiOiAiXjYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9pbmlrdWxpbi9wYXJzZTU/c3BvbnNvcj0xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXJzZTUvbm9kZV9tb2R1bGVzL2VudGl0aWVzIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VudGl0aWVzLy0vZW50aXRpZXMtNi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFOOTdOWFdGNkFXQlRhaGZWT0lyQi9OU2hremk1SDdGOXIxczltRDNjRGo0S281ZjJxaGhWb1lNaWJYRjdHbEx2ZWIvRDJpb1dheThseEk5N1ZlbjNnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmI1NS9lbnRpdGllcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhdGgtZXhpc3RzIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtZXhpc3RzLy0vcGF0aC1leGlzdHMtNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFrOVF5NVE3alliMld3Y2V5NUZwdmcyS29BYy9aSWhMU0xPU0JtUm15Z1BzR3drVlZ0MGZaYTBxcnRNeittNnRKVEFIZlpROEZubUI0TUc0TFd5Ny93PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLXR5cGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC10eXBlLy0vcGF0aC10eXBlLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nREtiOGFaTURlRC90WldzOVA2K3EwSjlNd2tkbDZ4TVY4VGpuR1AzcUpWSjA2YmRNZ2tiQmxMVThJZGZPc0lzRnoyQlcxck5WVDNYdU5FbDh6UEF2dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGF0aGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aGUvLS9wYXRoZS0yLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1VqR2NBcVAxZ1FhY29RZStPQkpzRkE3TGQ0RHlYdVVJalo1Y2M3NWNMSHZKN2R0TnNUdWdwaHhJQUR3c3BTK0FyYUFVZVBDS3JTVnRQTEZqL0Y4OHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGljb2NvbG9ycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvY29sb3JzLy0vcGljb2NvbG9ycy0xLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGNlSDJzbmh0YjVNOWxpcURzbUV3NTZsZTM3Nm1UWmtFWC9qRWIvUnhORnllZ051bDdlTnNsQ1hQOUZEai9MY3UwWDhLRXlNY2VQMm50cGFIckRFVkE9PSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGljb21hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC0yLjMuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVjcrdlFFSjA2WitjNXRTeWU4UytuSFVmSTUxeG9YSVhqSFE5OWNRdEtVa1FxcU8xa08vS0NKVWZaWHVCNDdoL1lCbERoYWgySDNoZFVHWG44aWUwb0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04LjYiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BrZy1kaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGtnLWRpci8tL3BrZy1kaXItNC4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhSRHpiYUtqQytBT1dWWHhBVS94NTRDT0dlSXY5ZWIrNkNrRFNRb05UdDRYeVdvSUp2dVBzWGl6eHUvRnIyM0VpZWtidFp3bWgxSWNJRy9sL2ExMEdRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmluZC11cCI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcG9zdGNzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguNS44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLy0vcG9zdGNzcy04LjUuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1cvclg4Ty9qWG5tODJFeTFrNDRwT2JQdGRibGZpdVducmQ4WDdHSjdlbUltQ09zdHVuR2JYVXBwN0hkQnJGUVg2ckp6bjNzUFQzOTdXcDVhQ3dDSGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcG9zdGNzcy8iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vcG9zdGNzcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvYWkiCiAgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5hbm9pZCI6ICJeMy4zLjExIiwKKyAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMS4xIiwKKyAgICAgICAgInNvdXJjZS1tYXAtanMiOiAiXjEuMi4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL0BqZXN0L2Vudmlyb25tZW50IjogeworICAgICJub2RlX21vZHVsZXMvcG9zdGNzcy12YWx1ZS1wYXJzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy12YWx1ZS1wYXJzZXIvLS9wb3N0Y3NzLXZhbHVlLXBhcnNlci00LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMU5OQ3M2dXVyZmtWYmVYRzRTOEpGVDl0MTltNDVJQ25pZjh6V0xkNW9QU1o1MFFud01mSytIM2p2NDA4ZDRqdy83QnR0djVheFM1SWlIb0xhVk5IZVE9PSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHJldHRpZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjQuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHRpZXIvLS9wcmV0dGllci0zLjQuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZTlNZXdidEZvK0Zldnl1eG4vNHJyY0RBYXEwSVl4UEdMdk9icFFqaVpCTUF6QjlJR216bG5HOVJaeTNGRmFzK2VCTXUydkEwQ3N6TWVkdW93NWRJdVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJwcmV0dGllciI6ICJiaW4vcHJldHRpZXIuY2pzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9wcmV0dGllci9wcmV0dGllcj9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7CiAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Vudmlyb25tZW50Ly0vZW52aXJvbm1lbnQtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vV1FqaFBKZTMvZ2hhb2wvNEJxNDgwSktYVi9SZnc4blFkTjdmNDFmTThWREhMY3hLWG91NlF5WEFoM0VGcjkvYlZHM3g3NHoxTldEa1A4N0VpWThnQT09IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yNy41LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFiMWd5NU9yUDUrekRmMkJ2bnpkbDNqc1RmMXFYVk1hemJ2Q29LaHRLcVZzNC9ZSzRvelg0Z0tRSkpWeU5lK2Nhak5QbjBLb0MwTUMzRlVtYUhXRW1RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiCisgICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIsCisgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAorICAgICAgICAicmVhY3QtaXMiOiAiXjE3LjAuMSIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL0BqZXN0L2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9mYWtlLXRpbWVycy8tL2Zha2UtdGltZXJzLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2FQb3dvb2x3YTA3azcvb00zYUFTbmVOZUJHQ21HUXNjM3VnTjR1NnM0Qy8rczVNNjRNRm8vK2RqVGRpd2NiUWxSZkZFbEd1RFhXemFXajZRZ0tPYlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6ICJeOC4wLjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvQGplc3QvZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2xvYmFscy8tL2dsb2JhbHMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aRUpOQjQxT0JRUWdHemd5SW5BdjBVVWZERGozdXBtSHlkamllU3hGdlRSdVpFbHJ4N3RYZy91VlE1aFlWRXdpWHMzK2FNc0FlRWM5WDd4aVNLQ200UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiZXhwZWN0IjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3JlcG9ydGVycy8tL3JlcG9ydGVycy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNQWGg5aFdJbFZKTVFrVms4NGFJdlh1QkI0dVFRbUZxWmlhY2xvRnVHaVAzYWgxc2JDeENvc2lkWEZEZnFHOCs2Zk8xb1IyZFRKVGxzT3k0VkZtVWZ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiY29lL3Y4LWNvdmVyYWdlIjogIl4wLjIuMyIsCi0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogIl41LjEuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItcmVwb3J0IjogIl4zLjAuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItc291cmNlLW1hcHMiOiAiXjQuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMS4zIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjAiLAotICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNC4wLjEiLAotICAgICAgICAidGVybWluYWwtbGluayI6ICJeMi4wLjAiLAotICAgICAgICAidjgtdG8taXN0YW5idWwiOiAiXjguMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL0BqZXN0L3NjaGVtYXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NjaGVtYXMvLS9zY2hlbWFzLTI4LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2wvVldzZHQvYUJYZ2pzaExXT0Z5RnQzSVZkWXlwdTV5MlduMnJPTzF1bjZua3FJbjhTTFh6Z0lNWVhGeVlzUldEeUY1RXRobUtKTUlkSnZrMDhncmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHNpbmNsYWlyL3R5cGVib3giOiAiXjAuMjQuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL0BqZXN0L3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteTlOSUhVWUYzUEpSbEhrOThOZEMvTjFnbDg4QkwwOGFRUWd1NGs0Wm9wUWtDdzl0OWNWOG10bDNUVjhiL1lDQjhYYVZURnJtVVRBSnZqc250RGlyZWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbHNpdGVzIjogIl4zLjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXJlc3VsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1yZXN1bHQvLS90ZXN0LXJlc3VsdC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVXMzVsMlJZRlVjVVF4Rkp6NUN2NU1UT3hsSklRczRJN2d4emkyelZVN1BKaE93ZllxMU1kQzVuaFNtWWpYMWdtTW1MUHZCM3NJYUMrQmtjSFJCZmFnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvQGplc3QvdGVzdC1zZXF1ZW5jZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3Rlc3Qtc2VxdWVuY2VyLy0vdGVzdC1zZXF1ZW5jZXItMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MQ2hlSkY3V0IyKzlKdUNTN1ZCL0VtR0lkUXVodHFqUk5JOUE0M2lkSHYzRTRLbHRDVHNQc0x4dmRhdWJGSFNZd1kvZk5qTVdqbDZ2TlJoRGlON3ZwUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvQHNpbmNsYWlyL3R5cGVib3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI0LjUxIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2luY2xhaXIvdHlwZWJveC8tL3R5cGVib3gtMC4yNC41MS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVAxT1JPbS9yZHViUDVhRkRTWlFJTFUwdnJMQ0o0ZnZIdDZFb3FIRU0rMkQvRzVNSzNiSWF5bVVLTGl0OEpzOWdibnM1VXlKbmtQL1RaUk9MdzR0VUE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0xLjguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3krWGtBa3FQWlNtM05MQmVVbmc3N0VCUWwzY21lSmhJVGFHSGRZSDhralZCK2F1bjNTNFhCUnRpMnp0MTdtdHQwbUlVRGlOeFllb0ptNmRyVnZCSlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1kZXRlY3QiOiAiNC4wLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL0BzaW5vbmpzL2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtOC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9BUEpVQXRnZUlOaGgvVEFsVUlENFFUczUzTmptN3h6ZGRhVmxFcy9TWHdndGlEMXRXMjJ6QUIvVzF3ZHFmcnBtaWtnYVdROUZ3NldzK2hzaVJtNVZnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBzaW5vbmpzL2NvbW1vbnMiOiAiXjEuNy4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogeworICAgICJub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdC9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7CiAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTEwIgogICAgICAgfSwKQEAgLTE2MjY1LDgyMSArMjk0MCw2NSBAQAogICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2NsaXVpIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaXVpLy0vY2xpdWktNy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9jUkU2OGNPc1ZNWHAxWXZvbmwvZnprUU95akxTdS84YmhQRGZRdDBlMC9FYjI4M1RLUDIwRnMyTXFvUHNyOVN3QTU5NXJSQ0ErUU16WWM5bkJQK0pRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4yLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiLAotICAgICAgICAid3JhcC1hbnNpIjogIl43LjAuMCIKKyAgICAibm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQvbm9kZV9tb2R1bGVzL3JlYWN0LWlzIjogeworICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE3LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzJHc3l1a0w2MklKbmxhZmYvblJlZ1BRUjk0Qy9YWGFtdk1XbVNIUko0eTdUcy80b2NHUm1USHZPczhQU0U2cEIzZFdPckQvbnVldVU1c2R1QnNRNHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJwZWVyIjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wdW55Y29kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdW55Y29kZS8tL3B1bnljb2RlLTIuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12WXQ3VUQxVTlXZzYxMzhzaEx0TE92ZEF1KzhEc0MvaWxGdEVWSGNIK3d5ZGNTcE5FMjBBZlNPZHVmNk1rUkZhaEw1Rlk3WDFvVTduS1ZaRnRmcThGZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvZGVkZW50IjogewotICAgICAgInZlcnNpb24iOiAiMC43LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZGVudC8tL2RlZGVudC0wLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUTZmS1VQcW5BSEF5aGlVZ0ZVN0JVekxpdjBrZDhzYUg5YWw3dG51NVEvb2tqNmRudXB4eVRnRklCalZ6SkFUZGZJQW05TkFzdlhOemphS2ErYnhWeUE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvZGlmZi1zZXF1ZW5jZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYtc2VxdWVuY2VzLy0vZGlmZi1zZXF1ZW5jZXMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rMWdDQVhBc05nTHdFTCtZOFd2bCtNNm9FRmo1YmdhemZaVUxwUzVDbmVvUFBYUmFDQ1c3ZG0rcTIxS3kyVkVFNVgrVmVSREJWZzFQY3Z2c3I0VHROUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvZW1pdHRlcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1pdHRlcnkvLS9lbWl0dGVyeS0wLjguMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdURmdlVqVnJmR0pKaHlteC9rejZwcmx0ZW53MXU3V3JDZzFvYTk0ellZOHh4VnBMTFV1MDQ1TEFUMGRoRFpkWEc1OC9FcFBMLzVrQTE4MGZRL3F1ZGc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VtaXR0ZXJ5P3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvZXhwZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHBlY3QvLS9leHBlY3QtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FMXE1aFNVRzJBbVlRd1FKMDQxbnZncGtPREhRdkIrUktsQjRJWWRydTZ1SnN5RlRSeVpBUDQ2M00rMWxJTm9yd2JxQW1VZ2dpNitXd2tEOGxDUy9Edz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvZnMtZXh0cmEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLWV4dHJhLy0vZnMtZXh0cmEtMTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vUlhBcHE1NEVUUmo0ZU1pRnpHbkhXR3krem81cmF1ZGp1eE4wYjhIN3MvUlUyb1cwV3ZzeDlPMEFDUk4va1JxOUU4VnUvUmVza0dCNW8zamkrRnpIUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjAiLAotICAgICAgICAianNvbmZpbGUiOiAiXjYuMC4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QvLS9qZXN0LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWW4wbUFEWkI4OXpUdGprUEpFWHdyYWMzTEh1ZGtRTVIrUGFxYTh1eEpIQ0JyOWFneHp0VWlmV0N5aVlyamhNUEJvVVZCanlueTBJN1hINm96RHI3UVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29yZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImltcG9ydC1sb2NhbCI6ICJeMy4wLjIiLAotICAgICAgICAiamVzdC1jbGkiOiAiXjI3LjUuMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiamVzdCI6ICJiaW4vamVzdC5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJub2RlLW5vdGlmaWVyIjogIl44LjAuMSB8fCBeOS4wLjAgfHwgXjEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJub2RlLW5vdGlmaWVyIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAibm9kZV9tb2R1bGVzL3F1ZXVlLW1pY3JvdGFzayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9xdWV1ZS1taWNyb3Rhc2svLS9xdWV1ZS1taWNyb3Rhc2stMS4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU51YU5TYTZmbEtUNUphU1lRekpvazA0SnpUTDFDQTZhR2h2NXJmTFczUGdxQStNMkNocFpRbkFDOGg4aTRaRmtCUzhYNVJxa0RCSEE3cjRoZWozSzlBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgogICAgICAgICB9Ci0gICAgICB9CisgICAgICBdCiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3QtY2hhbmdlZC1maWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jaGFuZ2VkLWZpbGVzLy0vamVzdC1jaGFuZ2VkLWZpbGVzLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnVCTE1pQnlmV0dDb01zTEx6R1VVU3BBbUlBR25iUjJLSm9NTjEwemlMaE9MdlA0ZTBTbHlwSG5BZWw4aXFRWFRyY2JtZkVZOXNTcWFlNXNnVXNUdnc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy9yZWFjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE4LjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QvLS9yZWFjdC0xOC4zLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdTK2hBZ0pTaFIwS2hFdlBKQXJmdVBWTjErSHoxdDBZNm41akxyR1Fia2I0dXJnUEUvMFJ2ZSsxa01CMXYvb1dnSGdtNFdJY1YraTdGMnBUVmorMmlRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImV4ZWNhIjogIl41LjAuMCIsCi0gICAgICAgICJ0aHJvYXQiOiAiXjYuMC4xIgorICAgICAgICAibG9vc2UtZW52aWZ5IjogIl4xLjEuMCIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3QtY2lyY3VzIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNpcmN1cy8tL2plc3QtY2lyY3VzLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDk1Ujd4NVV0bE1BNWlCWXNPSEZGYk1EL0dWQTRSL0tkcTE1Zjd4WVdVZldIQnRvOU5ZUnNPdm5TYXVUZ2RGK29nQ3BKNHR5S09YaFVpZnhTNjVnZHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY28iOiAiXjQuNi4wIiwKLSAgICAgICAgImRlZGVudCI6ICJeMC43LjAiLAotICAgICAgICAiZXhwZWN0IjogIl4yNy41LjEiLAotICAgICAgICAiaXMtZ2VuZXJhdG9yLWZuIjogIl4yLjAuMCIsCi0gICAgICAgICJqZXN0LWVhY2giOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIsCi0gICAgICAgICJ0aHJvYXQiOiAiXjYuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC1jbGkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtY2xpLy0vamVzdC1jbGktMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IYzZIT093WXE0Lzc0L2M2MmRFRTNyNWVseDh3allxeFkwcjBHL25GckxEUE1GUnU2UkEvdThxSU5PSWt2aHhHN21NUTVFSnNPR2ZScEk4TDZlRlVWdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb3JlIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJleGl0IjogIl4wLjEuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiaW1wb3J0LWxvY2FsIjogIl4zLjAuMiIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcm9tcHRzIjogIl4yLjAuMSIsCi0gICAgICAgICJ5YXJncyI6ICJeMTYuMi4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqZXN0IjogImJpbi9qZXN0LmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3QtY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNvbmZpZy8tL2plc3QtY29uZmlnLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXNBc2ptNnRHZHNWYlc5YWhjQ2hQQUZDazRJbGtRVWtuSDVBdktqdUxUU2xjTy93Q1pLeUZkbjdSZzBFa0MrT0dnV09ERXkyaERwV0IxUGd6SDBKTkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuOC4wIiwKLSAgICAgICAgIkBqZXN0L3Rlc3Qtc2VxdWVuY2VyIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJiYWJlbC1qZXN0IjogIl4yNy41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImRlZXBtZXJnZSI6ICJeNC4yLjIiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjEiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgImplc3QtY2lyY3VzIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1lbnZpcm9ubWVudC1qc2RvbSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWphc21pbmUyIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1ydW5uZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNy41LjEiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAicGFyc2UtanNvbiI6ICJeNS4yLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIl4zLjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0cy1ub2RlIjogIj49OS4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAidHMtbm9kZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC1kaWZmIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWRpZmYvLS9qZXN0LWRpZmYtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tME52a1g1NUxEdDlUNG1jdFRFZ25aazNmbUVnM05SWXV0dk1QV00vMGlQbmtGajJ3SWVGNDVPMTcxOGNNU09GTzF2SU5rcW14cUQ4dkUzN3VURWJxdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZGlmZi1zZXF1ZW5jZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNy41LjEiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC1kb2NibG9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kb2NibG9jay8tL2plc3QtZG9jYmxvY2stMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ybDdobEFCZVRzUll4S2lVZnBIclFyRzRlMm9iT2lUUVdmTUVIM1B4UGpPdGRzZkxRTzRSZVdTWmFRN0RFVG00eHUwN3JsNHEvaDR6Y0tYeVUwL096UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZXRlY3QtbmV3bGluZSI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LWVhY2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZWFjaC8tL2plc3QtZWFjaC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFGZjZwK0ZiaFQvYlhRbkVvdVl5MDBia05TWTdPVXBmSWNtZGw4dlozMUExVVVhdXJPTFBBOGE4QmJKT0YyUkRVRWx3SmhtZWFWN0xuYWdJKzVVd05RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LWVudmlyb25tZW50LW5vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZW52aXJvbm1lbnQtbm9kZS8tL2plc3QtZW52aXJvbm1lbnQtbm9kZS0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUp0NFpVbnhkT3NUR3dTUkFmS0VuRTZCY3dzU1BOT2lqandpZnE1c0RGU0Eya2VzblhUdk5xS0hZZ00waERxMzU0OVVmL0t6ZFhOWW40d01aSlBsRkx3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LWxlYWstZGV0ZWN0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbGVhay1kZXRlY3Rvci8tL2plc3QtbGVhay1kZXRlY3Rvci0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBPWGZXQU12ZlU2V01VWGZ0VjRIb2xuSmZuUE9HRXUxMGZzY05DQTc2S0JwUlJoY01OMmM4ZDNpVDJweFFTM0hMYkErNVg0c09VUHpZTzJOVXlJbEhRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LW1hdGNoZXItdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWF0Y2hlci11dGlscy8tL2plc3QtbWF0Y2hlci11dGlscy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXoydVR4L1Q2TEJhQ29OV05GV3dDaExCS1l4VE1jR0JSakF0KzJTYlA5MjkvRmZsYjlhYTVMR21hNjU0Uno4ejlITHhzclVhWXp4RTlUL0VGSUwvUEF3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNy41LjEiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWVzc2FnZS11dGlsLy0vamVzdC1tZXNzYWdlLXV0aWwtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yTXlGZTEram55QUFmK05Id1RjbER6MGVBYUxrVkRkS1ZISEJGV3NCV0hubmg1WWVKTU5XV3N2N0FiRllYZkszb1Rxdkw3VlRXa2hOTHUxalgyNEQrZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3QtbW9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tb2NrLy0vamVzdC1tb2NrLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSzRqS2JZMWQ0RU5oYnJHMnp1UFdhUUJ2RGx5K2laMnlBVytUMWZBVE43OGhjMHNJbnduN3daQjhYdGxObnZIdWc1Uk13Vjg5N1htNExxbVBNNGUyT2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy8tL2plc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RUU9PZFk0UEUzOWlhd0RuNXJ6YkllUE5pZ2ZlNUI5WjkxR0REMWFlL3hORGx1OWthYXQ4UVE1RUtuTm1WV1BWNTRoVWR4Q1Z3d2o2WU1nUjJPN0lPZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3QtcnVubmVyIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bm5lci8tL2plc3QtcnVubmVyLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzROUHNNNG1GQ093RktYTzRwL0gva1dHZEpwOVY4a1VSWTJsWDhNZTJkcmdYcUc3cnJaQXg1a3YrNUg3d3R0L2NkRklqaHFZeDFIcmxxV0hhT3ZEYVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImVtaXR0ZXJ5IjogIl4wLjguMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1kb2NibG9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtanNkb20iOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWVudmlyb25tZW50LW5vZGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbGVhay1kZXRlY3RvciI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1ydW50aW1lIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiAiXjAuNS42IiwKLSAgICAgICAgInRocm9hdCI6ICJeNi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcnVudGltZS8tL2plc3QtcnVudGltZS0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW83Z3h3M0dmK0gySUd0OGZ2MFJpeUUxK3I4M0ZKQlJydW9BK0ZYcmxIdzZ4RXlCc1U4dWdBNklQZlRkVnlBMHc4SENscGJLK0RHSnhINTlVck5NeDhBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC9nbG9iYWxzIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2pzLW1vZHVsZS1sZXhlciI6ICJeMS4wLjAiLAotICAgICAgICAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiLAotICAgICAgICAiZXhlY2EiOiAiXjUuMC4wIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1zbmFwc2hvdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1ib20iOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1zbmFwc2hvdC8tL2plc3Qtc25hcHNob3QtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15WXlrWEk1YTBJMzF4WDY3bWdlTHcxRFowYkpCK2dwcTVJcFN1Q0FveURpMCtCaGdVL1JJckwrUlR6RG1rTlRjaHZERldLUDhscCt3LzQyWjN1czVzQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy43LjIiLAotICAgICAgICAiQGJhYmVsL2dlbmVyYXRvciI6ICJeNy43LjIiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdHlwZXNjcmlwdCI6ICJeNy43LjIiLAotICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjcuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICJeNy4wLjQiLAotICAgICAgICAiQHR5cGVzL3ByZXR0aWVyIjogIl4yLjEuNSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImV4cGVjdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIm5hdHVyYWwtY29tcGFyZSI6ICJeMS40LjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNy4zLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdhdGNoLXR5cGVhaGVhZC8tL2plc3Qtd2F0Y2gtdHlwZWFoZWFkLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WYTVuTFNKVE43WUZ0QzJqZCs3d3NvZTFwTmU1SzRTaEx1eC9FNWlIRXdsQjlBeGF4bWdnWTd0bzlLVXFLb2poYUp3M2FYcXQ1V0FiNGpHUE9vbHBFdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMy4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI4LjAuMCIsCi0gICAgICAgICJqZXN0LXdhdGNoZXIiOiAiXjI4LjAuMCIsCi0gICAgICAgICJzbGFzaCI6ICJeNC4wLjAiLAotICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNS4wLjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiamVzdCI6ICJeMjcuMC4wIHx8IF4yOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2gtdHlwZWFoZWFkL25vZGVfbW9kdWxlcy9AamVzdC9jb25zb2xlIjogewotICAgICAgInZlcnNpb24iOiAiMjguMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb25zb2xlLy0vY29uc29sZS0yOC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFQQWtQNUV3S2RLL2J4SXI2QzFJNFZzMHJtMm5IaUFOemovWjVYMkpRa3JabzZJcXZDNGxkWjlLOTV0RjBIZGlkaEE4Qm82ZWd4U3pVRlBZS2NFWEx3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOC4xLjMiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI4LjEuMyIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI4LjEuMyIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvQGplc3QvY29uc29sZS9ub2RlX21vZHVsZXMvc2xhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xhc2gvLS9zbGFzaC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzlRMWhhZWJ5MzZPU1N0d2I0bnRDR0dHYUtzYVZTalE2OGZCeG9RY3V0bDVmUzF2dVkxOEgzd1N0M2pGeUZ0cmt4K0t6MFYxRzg1QTRNeUFkRE1pMlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvQGplc3QvdGVzdC1yZXN1bHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3Rlc3QtcmVzdWx0Ly0vdGVzdC1yZXN1bHQtMjguMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rWkFreG5TRStGcUU4WWpXOGdOdW9Wa2tDOUk3UzFxbWVubDhzR2NET0xyb3BBU1ArQmtjR0t3aFhveXFRdUdPR2VZWTB5L2l4anJkL2lFUnBFWEhOZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yOC4xLjMiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI4LjEuMyIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2gtdHlwZWFoZWFkL25vZGVfbW9kdWxlcy9AamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI4LjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJ5aml5TVVackt6L2MremxNRk8xcG03MERjSWxTVDhBZVdUa29VZFpldmV3NDR3Y05aUUhzRVZPaUNWdGdWbmxGRkQ4MkZQYVh5Y3lzNThjZjJtdVZRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI4LjEuMyIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvZW1pdHRlcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEwLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtaXR0ZXJ5Ly0vZW1pdHRlcnktMC4xMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hSVRxT3duTGFucEhMTlhaSkVOYk9nalVCZUhvY0QreHNTSm1OcmpvdktCVzVIYlNwVzNkMXBFbHM3R0ZRUFVXWGl3RzkrMFA0R3RIZkVxQy80TTBJdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZW1pdHRlcnk/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWVzc2FnZS11dGlsLy0vamVzdC1tZXNzYWdlLXV0aWwtMjguMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QRmRuOUlld2J0NTc1ektQZjEyODZIdDlFUG9KbVlUN1Awa1krUmliZVlaMlh0T3I1M3BETEVGb1RXWGJkMWg0SmlHaVdwVEJDODRmYzh4TVhRTWI3Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjguMS4zIiwKLSAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOC4xLjMiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2gtdHlwZWFoZWFkL25vZGVfbW9kdWxlcy9qZXN0LW1lc3NhZ2UtdXRpbC9ub2RlX21vZHVsZXMvc2xhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xhc2gvLS9zbGFzaC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzlRMWhhZWJ5MzZPU1N0d2I0bnRDR0dHYUtzYVZTalE2OGZCeG9RY3V0bDVmUzF2dVkxOEgzd1N0M2pGeUZ0cmt4K0t6MFYxRzg1QTRNeUFkRE1pMlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvamVzdC1yZWdleC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjguMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjguMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00czBJZ3lOSXkweTlGSytjam9WWW94YW1UN1plbzdNaHpxUkd4N1lEWW1hUW4xd3VjWTlyb3RpR2tCenpjTVhUdGpyQ0FQL2Y3ZitFMEY3K2Z4UE5kdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE3LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC13YXRjaC10eXBlYWhlYWQvbm9kZV9tb2R1bGVzL2plc3QtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI4LjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI4LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWGRxZnBId3BjU1Jrby9DMzV1TFlGTTJlbVJBbHRJSUtaaUo5ZUFtaGpzajBDcVpNYTBwMWliMFI1ZldJcUdobjFhMTAzRGViVGJwcUlhUDFxQ1E2dFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI4LjEuMyIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgPj0xNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2gtdHlwZWFoZWFkL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd2F0Y2hlci8tL2plc3Qtd2F0Y2hlci0yOC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ0cWNxajloemUranZpRlBVTjNZQXRBRWVGbnIvYXpJVFhRRU1BUmY1Y013S1kyU01CUm5DUVRYTGl4VGwyME9SNm1MaDlLTE1yZ1ZKZ0pJU3ltKzFnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yOC4xLjMiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI4LjEuMyIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4yLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImVtaXR0ZXJ5IjogIl4wLjEwLjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOC4xLjMiLAotICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNC4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8IF4xNi4xMC4wIHx8ID49MTcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvamVzdC13YXRjaGVyL25vZGVfbW9kdWxlcy9zdHJpbmctbGVuZ3RoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy1sZW5ndGgvLS9zdHJpbmctbGVuZ3RoLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rbDZyTk41ZllITmhaWnk0MVJYc1lwdENqQTJJZ21xNEVHN2taQVlGUUkxRTFWVFhhcnI2WlBYQmc2ZXE3WTZlSzRGRWhZNkFKbHl1RkliL3YvUzBWUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFyLXJlZ2V4IjogIl4xLjAuMiIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC13YXRjaC10eXBlYWhlYWQvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2hlci9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWTM4VlBTSGNxa0ZyQ3BGblE5dnVTWG1xdXV2NW9YT0twR2VUNmFHcnIzbzNHYzlBbFZhNkpCZlVTT0NuYnhHR1pGKy8wb29JN0tyUHVVU3p0VWRVNUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC13YXRjaC10eXBlYWhlYWQvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI4LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOGdGYi9UbzBPbXhIUjkrWlRiMTREZjJ2TnhkR0NYOGcxeFdHVVRxVXc1VGladmNRZjVzSEtPYmQ1VWNQeUxMeW93TndEQU1URjNYV09HMUI2bXhsMVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjguMS4zIiwKLSAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIiwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCBeMTYuMTAuMCB8fCA+PTE3LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC13YXRjaC10eXBlYWhlYWQvbm9kZV9tb2R1bGVzL3NsYXNoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsYXNoLy0vc2xhc2gtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNkT3NBSFhYVWtRVHBPWWNvQXhMSW9yTVRwNGdJUXI1SVczaVZiN0E3bEZJcDBWSGhueW5tOWl6eDZUc3NkckljVklFU0FsVmp0bk8ySzhiZytDb2V3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvamVzdC13YXRjaC10eXBlYWhlYWQvbm9kZV9tb2R1bGVzL3N0cmluZy1sZW5ndGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLWxlbmd0aC8tL3N0cmluZy1sZW5ndGgtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlFcDA4S0FNVW4wT2FkblZhQnVSZEUybDYxNUNRNTA4a3IwWE1hZGpDbGZZcGRDeXZyYkZwNlRhZWJvOHl5eG9rUTR2aVVkL3hQUFVBNEZHZ1VhMG93PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYXItcmVnZXgiOiAiXjIuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjcuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyLjIwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2gtdHlwZWFoZWFkL25vZGVfbW9kdWxlcy9zdHJpbmctbGVuZ3RoL25vZGVfbW9kdWxlcy9jaGFyLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXItcmVnZXgvLS9jaGFyLXJlZ2V4LTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vU3ZFZW82WlVEN05lcHFBYXQzUnFvdWNaNVNlcUxKZ092Vkl3a2FmdTZJUDNWMHBPMzhzL3lwZFZVbURESzZxSUlITmxZSEpBS1g5RTdSN0hvS0Vsdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyLjIwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS03LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaXE2ZVZWSTY0blFRVFJZcTJLdEVnMmQydVU3TEVsaFRKd3NINFl6SUhac2h4bGdabXMvd0ljNFZvRFFUbEcvSXZWSXJCS0cwNkNyWm5wMHF2N2hrY1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N0cmlwLWFuc2k/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9qZXN0LXdhdGNoLXR5cGVhaGVhZC9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9ub2RlX21vZHVsZXMvYW5zaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjVNODU1ZktiMlNzZk1JaUZGb1ZyQUJISkM4UXRId1Z4K21IV1AzUWNFcUJIWWllbmo1ZEhTZ2pieHRDMFdFWlhZdDR3Y0Q2enJRRWxEUGhGdVpnZkE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1yZWdleD9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2hlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13YXRjaGVyLy0vamVzdC13YXRjaGVyLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItejY3NlN1RDZaOG84cWJtRUdob0VVRk9NMStqZkVpTDNEWEhLL3hnRWlHMkV5TllmRkc2MGpsdVdjdXBZNmRBVGpmRXNLUXVpYlJlUzFkakluUW5vVnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl40LjIuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNC4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ5YWxsaXN0IjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy41LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU29mdHVUUk92L2NSakN6ZS9zY2pHeWlEdGNVeXh3MXJnWVFTWlk3WFRtdFI1aFgrZG03NmlEYlRIOFRrTFBIQ1FtbGJRVlNTYk5aQ1BNMmhiMGtublE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49MC4xMC4wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy92OC10by1pc3RhbmJ1bCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92OC10by1pc3RhbmJ1bC8tL3Y4LXRvLWlzdGFuYnVsLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GR3RLdHYzeElwUjZCWWh2Z0g4TUkveTc4b1Q3ZDhBdTN3dzRRSXh5bXJDdFpFaDViOGdDdzJzaXl3RStwdWhFbXVXS0R0bWZydkY1VWxCMjk4dXQzdz09IiwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWRvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE4LjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE4LjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNW00blFLcCtyWlJiMDlMTkg1OUdNNEJ4VGg5MjUxL3lsYktJYnBlN1RwR3hmSis5a3Y2QkxrTEJYSWpqc3BiZ2JuSUJOcWxJMjN0Um5UV1Qwc25VSXc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4xIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS42LjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC43LjMiCisgICAgICAgICJsb29zZS1lbnZpZnkiOiAiXjEuMS4wIiwKKyAgICAgICAgInNjaGVkdWxlciI6ICJeMC4yMy4yIgogICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEyLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWN0LXNjcmlwdHMvbm9kZV9tb2R1bGVzL3Y4LXRvLWlzdGFuYnVsL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM0Jpa1V4dlBPY241RTc0ZFppcTVCR3NUYjV5RXdoYVRTemNjVTZ0NHNET0g4TldKQ3N0S081UVQyQ3Z0Rm9LNkYwc2FMN3A5eEhBcUhPbENQSnlnQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy95YWxsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zd2RHaWRaeXE1UEIwODRYTEVTNVRwT1NSQTN3alhBbElXTWh1bTJrUmN2LzQxU24yZW1RMGR5Y1FXNHVaWExlandLdmc2RXN2YmRsVkwrRllFY3Q3QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1zY3JpcHRzL25vZGVfbW9kdWxlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE2LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MvLS95YXJncy0xNi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUQxbXZ2dERHMEw1ZnQvakdXa0xwRzErbTBlUXhPZmFCdlRORUxyYVdqMjJ3U1ZVTVd4WlV2WWdKWWNLaDZqR0dJa0pGaEg0SVpQUWhSNFRLcGM4bUJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNsaXVpIjogIl43LjAuMiIsCi0gICAgICAgICJlc2NhbGFkZSI6ICJeMy4xLjEiLAotICAgICAgICAiZ2V0LWNhbGxlci1maWxlIjogIl4yLjAuNSIsCi0gICAgICAgICJyZXF1aXJlLWRpcmVjdG9yeSI6ICJeMi4xLjEiLAotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl40LjIuMCIsCi0gICAgICAgICJ5MThuIjogIl41LjAuNSIsCi0gICAgICAgICJ5YXJncy1wYXJzZXIiOiAiXjIwLjIuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3Qtc2NyaXB0cy9ub2RlX21vZHVsZXMveWFyZ3MtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjAuMi45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy1wYXJzZXIvLS95YXJncy1wYXJzZXItMjAuMi45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15MTFuR0VsVElWK0NUM1p2OXQ3VktsK1EzaFRRb1Q5YTFRemV6aGhsNlJwMjFnSi9JVlRXN1ozeTlFV1hodVVCQzJTaG5mK0RYMGFudGVjcEF3U1A4dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFkLWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtY2FjaGUvLS9yZWFkLWNhY2hlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Pd2R2L0Z0N0lqT2dtL2kweHZORFoxTHJSQU5SZmV3NGIycHJGM09XTVFMeExmdTNiUzhGVmhDc3JTQ01LNGxSNTZZOXlhK0FUaG9UcERDVHhDbXBSQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwaWZ5IjogIl4yLjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMy42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS0zLjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOXUvc25pQ3JZM0Q1V2RzRVJIekhFNEcyWUNYcW9HNUZUSFVpQ0M0U0licjZYY0xaQlkwNXlhOUVLalllazlPNXhPQXdqR3ErMUpkR0JBUzdROVNjb0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaW5oZXJpdHMiOiAiXjIuMC4zIiwKLSAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIl4xLjEuMSIsCi0gICAgICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICJeMS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWRkaXJwIjogewotICAgICAgInZlcnNpb24iOiAiMy42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRkaXJwLy0vcmVhZGRpcnAtMy42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhPUzA4OW9uOFJkdXFkYmh2UTVaMzdBMEVTanNxejZxblJjZmZzTVUzNDk1RnVUZHFTbSs3YmhKMjlKdklPc0JERUVuYW41RFB1OXQzVG85VlJsTXpBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWN1cnNpdmUtcmVhZGRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWN1cnNpdmUtcmVhZGRpci8tL3JlY3Vyc2l2ZS1yZWFkZGlyLTIuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04SHJGNVpzWGs1RkFIOWRnc3gzQmxVZXI3M25JaHVqKzlPclF3RWJMVFBPQnpHa0wxbHNGQ1IwMWFtK3YrMG0yQ21iczFuUDEyaExEbDVGQTdFc3pLQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJyZWFjdCI6ICJeMTguMy4xIgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9yZWRlbnQiOiB7CkBAIC0xNzA5NSwzMTYgKzMwMTQsMjggQEAKICAgICAgICAgIm5vZGUiOiAiPj04IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdlbmVyYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2VuZXJhdGUvLS9yZWdlbmVyYXRlLTEuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16cmNlUi9YaEdZVS9kL29wcjJFS083YVJIVWVpQkk4cWp0ZkhxQURUd1pkNlN6ZnkxNmxhNmtxRDBNSVVzNXo1aHg2QWFLYStQaXhwUHJSMjg5K0kwQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdlbmVyYXRlLXVuaWNvZGUtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZW5lcmF0ZS11bmljb2RlLXByb3BlcnRpZXMvLS9yZWdlbmVyYXRlLXVuaWNvZGUtcHJvcGVydGllcy0xMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWQxVnVkQ0xvSUdpdGNVL2hFZzJRcXZ5R1pRbWRDMExmOEJxZE9NWEdGU3ZKUDRiTlYxK1hxYlBRZUhITEQ1MUpoNFFKSjIyNWRsSUZ2WTRMeTZNWG1RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlZ2VuZXJhdGUiOiAiXjEuNC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEzLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdlbmVyYXRvci1ydW50aW1lLy0vcmVnZW5lcmF0b3ItcnVudGltZS0wLjEzLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rWTFBWlZyMlJhK3QrcGlWYUo0Z3hhRmFSZVpWSDQwQUtObzdVQ1g2VytkRXdCby8yb1pKenFmdU4xcUxxMW9MNDVvNTZjUGFUWEVMd3JUaDhGcGdnZz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci10cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE1LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2VuZXJhdG9yLXRyYW5zZm9ybS8tL3JlZ2VuZXJhdG9yLXRyYW5zZm9ybS0wLjE1LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtuem1OQWN1eXhWK2dRQ3Vma1ljdk9xWC9xSUlmSEx2MHU1eDc5a1J4dUdvamZZVmt5MWYxNVR6WkV1MkF2dGU4UUdlcHZVTlRuTHNrZjhFNlg2VnlnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjguNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVnZXgtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdleC1wYXJzZXIvLS9yZWdleC1wYXJzZXItMi4yLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qYkQvRlQwKzlNQlUyWEFabHVJN3cyT0JzMVJCaTZwOU04M25rb1pheVFYWFU5ZThSb2J0NjlGY1pjN3dVNGVKRC9ZRlRqbjFKZENrM3JiTUphano4UT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdleHAucHJvdG90eXBlLmZsYWdzIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3MvLS9yZWdleHAucHJvdG90eXBlLmZsYWdzLTEuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wU3V0QzNwTnVkUktncXV4R29SR0l6OTQ2TVpWSHFiTmZQakJkeGVPaEJyZGdES2xSb1htWUxRTjl4UmJyUjA5WlhXZUdBZFB1aWY3ZWdvZm42djVMQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjIuMCIsCi0gICAgICAgICJmdW5jdGlvbnMtaGF2ZS1uYW1lcyI6ICJeMS4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdleHB1LWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZXhwdS1jb3JlLy0vcmVnZXhwdS1jb3JlLTUuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SQU01RmxaeitMaG1vN2RiOUwyOThwMnZIUDVaeXdyVlhtVlhwbUFEOUd1TDVNUEg2dDlST3cxaUEvd2ZIa1E3NlFlN0FhUEYwbkd1aW05Ni9JclFNUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcmVnanNnZW4iOiAiXjAuOC4wIiwKLSAgICAgICAgInJlZ2VuZXJhdGUiOiAiXjEuNC4yIiwKLSAgICAgICAgInJlZ2VuZXJhdGUtdW5pY29kZS1wcm9wZXJ0aWVzIjogIl4xMC4xLjAiLAotICAgICAgICAicmVnanNwYXJzZXIiOiAiXjAuOS4xIiwKLSAgICAgICAgInVuaWNvZGUtbWF0Y2gtcHJvcGVydHktZWNtYXNjcmlwdCI6ICJeMi4wLjAiLAotICAgICAgICAidW5pY29kZS1tYXRjaC1wcm9wZXJ0eS12YWx1ZS1lY21hc2NyaXB0IjogIl4yLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdqc3BhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdqc3BhcnNlci8tL3JlZ2pzcGFyc2VyLTAuOS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kUVV0bjkwV2FuU05sKzdtUUtjWEFnWnh2VWU3WjBTcVhsZ3p2MHphNEx3aVVoeXpCQzU4eVFPM2xpRm9VZ3U4R2lKVkluQWhKamtqMU4wRXRRNW5rUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqc2VzYyI6ICJ+MC41LjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInJlZ2pzcGFyc2VyIjogImJpbi9wYXJzZXIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlZ2pzcGFyc2VyL25vZGVfbW9kdWxlcy9qc2VzYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc2VzYy8tL2pzZXNjLTAuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11Wno1VW5CN3U0VDlMdndtRnFYaWk3cFpTb3VhUlBvckdzNXdobzFJcDdWTzB3eGFuRnZCTDdHa002ZFRIbGdYK2poQkFwUmV0YVdwbkRhYk9lVGNuQT09IiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqc2VzYyI6ICJiaW4vanNlc2MiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlbGF0ZXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWxhdGV1cmwvLS9yZWxhdGV1cmwtMC4yLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUcwOER4dm00aUROM01MTTBFc1A2MkVEVjlJdWhYUFI2YmxOejZVdGNwN3p5VjN0cjRIVk5JTnQ2TXBhUldieG9PSFQzUTdZTjJQK2phSFg4dlViZ29nPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlbmRlcmtpZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZW5kZXJraWQvLS9yZW5kZXJraWQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXEvN1ZJUUE4bG1NMWhGK2puK3NGU1BXR2xNa1NBZU5ZY1BMbURReDJ6enVpRGZhTHJPbXVtUjhpYVVLbGVuRmdoMFhSUElVZVNQbEgzQStBVzNaNXBnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNzcy1zZWxlY3QiOiAiXjQuMS4zIiwKLSAgICAgICAgImRvbS1jb252ZXJ0ZXIiOiAiXjAuMi4wIiwKLSAgICAgICAgImh0bWxwYXJzZXIyIjogIl42LjEuMCIsCi0gICAgICAgICJsb2Rhc2giOiAiXjQuMTcuMjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcXVpcmUtZGlyZWN0b3J5IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZGlyZWN0b3J5Ly0vcmVxdWlyZS1kaXJlY3RvcnktMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZHeEVJNyt3c0c5eHJ2ZGpzcmxtTDIyT01UVGlIUndBTXJvaUVlTWdxOGd6b0xDL1BRcjdSc1JEU1RMVWcvYlpBWnRGK1RWSWtIYzYvNFJJS3J1aStRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXF1aXJlLWZyb20tc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZnJvbS1zdHJpbmcvLS9yZXF1aXJlLWZyb20tc3RyaW5nLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YZjBuV2U2UnNlemlGTXUrQXA5YmlpVWJtcGxxNlM5L3ArN3c3WVhQL0pCSGhyVUREVWh3YSt2QU55dWJ1cWZaV1R2ZVUvL0RZVkdzREc3UktML3ZFdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVxdWlyZXMtcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlcy1wb3J0Ly0vcmVxdWlyZXMtcG9ydC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS2lnT0NIY29jVTNYT0RKeHN1OGkvajhUOXR6VDRhZEhpZWN3T1JSUTBaWkZjcDdhaHdYdVJVMW0reXVPOTBDNVpVeUdlR2ZvY0hESTE0TTNMM3lEQVE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS8tL3Jlc29sdmUtMS4yMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TYittak5IT1VMc0J2ODE4VDQwcVNQZVJpdVdMeWFHTWE1ZXd5ZFJMRmltbmVpeG1WeTJ6ZGl2UmwrQUY2amFZUEM4RVJ4R0RtRlNpcXVpNlNmUGQrZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1jb3JlLW1vZHVsZSI6ICJeMi4xMS4wIiwKLSAgICAgICAgInBhdGgtcGFyc2UiOiAiXjEuMC43IiwKLSAgICAgICAgInN1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtzLWZsYWciOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJyZXNvbHZlIjogImJpbi9yZXNvbHZlIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Jlc29sdmUtY3dkIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtY3dkLy0vcmVzb2x2ZS1jd2QtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9yWmFYMk1iK3JKQ3BILzZDcFNxdDl4RlZwTisreDAxWG5OMmllOWc2UDUvM3hlbExBa1hXVkFEcGR6MUlIRC9LRmZFWHlFNlYwVTAxT1EzVU8yckVnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtZnJvbS8tL3Jlc29sdmUtZnJvbS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVlnOUtQMjRkRDVxa2E5SjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlEbmpCNXdha3NpQzQ5cnZNQjBQclVKUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZWnc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXNvbHZlLXVybC1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS11cmwtbG9hZGVyLy0vcmVzb2x2ZS11cmwtbG9hZGVyLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wNVZFTWN6VlJFY2J0VDdCeitDKzk2ZVVPNUhETnZkdGhJaU1CMzR0N0ZjRjhlaGN1NHdDMHNTZ1BVdWJzM1hXMlEzQ05MSmsvQkpyQ1U5d1ZSeW1pQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhZGp1c3Qtc291cmNlbWFwLWxvYWRlciI6ICJeNC4wLjAiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjcuMCIsCi0gICAgICAgICJsb2FkZXItdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjcuMC4zNSIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIjAuNi4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguOSIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJld29yayI6ICIxLjAuMSIsCi0gICAgICAgICJyZXdvcmstdmlzaXQiOiAiMS4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAicmV3b3JrIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInJld29yay12aXNpdCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS11cmwtbG9hZGVyL25vZGVfbW9kdWxlcy9waWNvY29sb3JzIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29jb2xvcnMvLS9waWNvY29sb3JzLTAuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jTWxEcWFMRXFmU2FXOFo3TjVKdytseUlXODY5RXpUNzMvRjVsaHRZOWNMR29WeFNYem5mZ2ZYTU8wWjVLMG8wUTJUa1RYcSswS0ZzZG5TZTNqRFZpQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXNvbHZlLXVybC1sb2FkZXIvbm9kZV9tb2R1bGVzL3Bvc3Rjc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMzkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MvLS9wb3N0Y3NzLTcuMC4zOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWlvYXlqTmJIbjZ6MS9CeXd5YjJZNHMzeXZEQWVYR095eHFEK0xuVk9pbnE2TWRtZCsrU1cyd1VOVnphdnl5SHhkNitEeHpXR0l1b3NnNlAxUmo4dUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGljb2NvbG9ycyI6ICJeMC4yLjEiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wb3N0Y3NzLyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS11cmwtbG9hZGVyL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUuZXhwb3J0cy8tL3Jlc29sdmUuZXhwb3J0cy0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL050cEhORE43aldoQWFROUJ2QlVZWjZZVFhzUkJnZnFXRldQN0JaQmFvTUpPL0kzRzVPRnp2VHVXTmxaQzNhUGppbnMxRitUTnJMS3NHYkg0cmZzUlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmV0cnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEzLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JldHJ5Ly0vcmV0cnktMC4xMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YUUJRM0k4VzFDZ2UwU2VoKzZnamowM0xibVJGV3Vvc3pnSzlvb0Nwd1lJcmhob084MHBmcTRjVWtVNURra253Zk9mRnRlUndsWjU2UFlPR1l5RldkZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA0IgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9yZXVzaWZ5IjogewogICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JldXNpZnkvLS9yZXVzaWZ5LTEuMC40LnRneiIsCiAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VOW5IODhhM2ZjL2VrQ0YxbDAvVVAxSW9zaXVJanlUaDdoQnZYVk1IWWdWY2ZHdnQ4OTdYZ3VqMlVPTERlSTVCRzJtNy91d3lhTFZUNmZidEN3VHl6dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJpb2pzIjogIj49MS4wLjAiLAogICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmltcmFmIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JpbXJhZi8tL3JpbXJhZi0zLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSlprSk1aa0FHRkZQUDJZcVhaWFBiTWxNQmdzeHpFOElMczRsTUlYLzJvMEw5VUJ3OU8vWTNvNndGdy9pOVlMYXBjVUpXd3FiaTNrZHhJUGRDNjJUSUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2xvYiI6ICJeNy4xLjMiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInJpbXJhZiI6ICJiaW4uanMiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcm9sbHVwIjogewotICAgICAgInZlcnNpb24iOiAiMi43OS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yb2xsdXAvLS9yb2xsdXAtMi43OS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11S3hiZDBJaE1aT2hqQWlENW9BRnA3QnF2a0E0RHY0N3FwT0N0YU52bmc0SEJ3ZGJXdGRPaDhmNW5aTnVrMnJwNTFQTUdrM2J6Zld1NW9heU5FdVludz09IiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJyb2xsdXAiOiAiZGlzdC9iaW4vcm9sbHVwIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmc2V2ZW50cyI6ICJ+Mi4zLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JvbGx1cC1wbHVnaW4tdGVyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JvbGx1cC1wbHVnaW4tdGVyc2VyLy0vcm9sbHVwLXBsdWdpbi10ZXJzZXItNy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXczaUlhVTRPeGNGNTJVVVhpWk5zTmV1WElNRHZGcnIrWlhLNmJGWjBRNjBxeVZmcTR1THB0b1M0YmJxM3BhRzN4MjE2ZVFsbEZaWDd6dDZUSUltZ3VRPT0iLAotICAgICAgImRlcHJlY2F0ZWQiOiAiVGhpcyBwYWNrYWdlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkLiBQbGVhc2UgdXNlIEByb2xsdXAvcGx1Z2luLXRlcnNlciIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTAuNCIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjYuMi4xIiwKLSAgICAgICAgInNlcmlhbGl6ZS1qYXZhc2NyaXB0IjogIl40LjAuMCIsCi0gICAgICAgICJ0ZXJzZXIiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicm9sbHVwIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcm9sbHVwLXBsdWdpbi10ZXJzZXIvbm9kZV9tb2R1bGVzL2plc3Qtd29ya2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdvcmtlci8tL2plc3Qtd29ya2VyLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS1dZVlYxYzRpK2piTXBhQkMrVSsrNFZhMGNwOE9pc1UxODVvNzNUMXZvOTlocWk3dzh0U0pmVVhZc3d3cXFyanp3eGE2S3BSSzU0V2hQdndmNXc2UFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcm9sbHVwLXBsdWdpbi10ZXJzZXIvbm9kZV9tb2R1bGVzL3NlcmlhbGl6ZS1qYXZhc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlcmlhbGl6ZS1qYXZhc2NyaXB0Ly0vc2VyaWFsaXplLWphdmFzY3JpcHQtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdhTkE1NDM4MHVGZWZXZ2hPREJXRUdpc0xaRmowMG5TNUFDczZ5SGE5bkxxbExwVkxPOENoREdlS1JqWm5WNE5oNG4wUWk3bmhZWkQvOWZDUHpFcWt3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJhbmRvbWJ5dGVzIjogIl4yLjEuMCIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL3Jyd2ViLWNzc29tIjogeworICAgICAgInZlcnNpb24iOiAiMC44LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jyd2ViLWNzc29tLy0vcnJ3ZWItY3Nzb20tMC44LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWd1b2x0UUV4KzlhTWYyZ0RaMHM2MkVjVjhsc1hSKzB3ODkxNVRDM0lUZG4yWXVldU5qZEFZaC9sZXZwVTluRmFvQ2hoOVJVUzVaZFFNcktmVkVOOXR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3J1bi1wYXJhbGxlbCI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ydW4tcGFyYWxsZWwvLS9ydW4tcGFyYWxsZWwtMS4yLjAudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVsNFZ5WlI4NkxaL2xEeFpUUjZqcUw4QUZFMlMwSUZMTVAyNkFianNMVkFEeEhkaEIvYzBHVXNIK3kzOVVmQ2kzZHp6OE9sUXVQbW5hSk9Nb0RIUUJBPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZnVuZGluZyI6IFsKICAgICAgICAgewogICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCkBAIC0xNzQyMywzMDYgKzMwNTQsNDMgQEAKICAgICAgICAgInF1ZXVlLW1pY3JvdGFzayI6ICJeMS4yLjIiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhZmUtYXJyYXktY29uY2F0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtYXJyYXktY29uY2F0Ly0vc2FmZS1hcnJheS1jb25jYXQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlkVkVGcnVXSXNuaWU4OXl5bSt4V1RBWUFTZHB3M0NKVjdMaS82ekJld0dmOXoyaTFqMzFyUDZqblkwcEhFTzRRWmg2TjBLMTFiRmpXbWRSOFVHZFBRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4yLjAiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIiwKLSAgICAgICAgImlzYXJyYXkiOiAiXjIuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ycDNTbzA3S2NkbW1LYkd2Z2FOeFFTSnI3YkdWU1ZrNVM5RXExRitwcGJSbzcwK1llYUR4a3c1RGQ4TlBOK0dENmJqblltMlZ1UHVDWG1wdVl2bUNYUT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCi0gICAgICAgIH0KLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FmZS1yZWdleC10ZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtcmVnZXgtdGVzdC8tL3NhZmUtcmVnZXgtdGVzdC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSkJVVXp5T2dFd1hRWTFOdVB0dmNqL3FjQkRiRG1Fdld1ZmhsblhaSW03NURFSHArYWZNMXIxdWpKcEpzVi9nU000dDU5dHBEeVBpMXNkNlphUEZmc0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMyIsCi0gICAgICAgICJpcy1yZWdleCI6ICJeMS4xLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvc2FmZXItYnVmZmVyIjogewogICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmVyLWJ1ZmZlci8tL3NhZmVyLWJ1ZmZlci0yLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVpvM0s4MlNEN1JpeWkwRTFFUVBvakx6N2twZXBuU1FJOUl5UGJISGcxWFhYZXZiNWRKSTd0cHlOMkFEeEdjUWJIRzd2Y3lSSGswY2J3cWNRcmlVdGc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuaXRpemUuY3NzIjogewotICAgICAgInZlcnNpb24iOiAiMTMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYW5pdGl6ZS5jc3MvLS9zYW5pdGl6ZS5jc3MtMTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aUndLYmgvZVE2dzl2bVRqa3VHMElvaTNIQndQRmNlME8rdi8vdmUrYU9xMW9lQ3k3ak1WMnF6ekFscHNOdXFwcUNCampyaU0xbGJ0WmJGL1E4alZ5QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYXNzLWxvYWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEyLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2Fzcy1sb2FkZXIvLS9zYXNzLWxvYWRlci0xMi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9MVGFIMFlDdFg0Y2ZuSlp4S1NMQXlnbEVEMG5haVlmTkcxaVhmVTV3MUxOWit1a29BNUR0eURJTjV6bUtWWndZTkpQNEtSYzVZM2hrV2dhKzd0WWZBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtsb25hIjogIl4yLjAuNCIsCi0gICAgICAgICJuZW8tYXN5bmMiOiAiXjIuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMi4xMy4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vd2VicGFjayIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZpYmVycyI6ICI+PSAzLjEuMCIsCi0gICAgICAgICJub2RlLXNhc3MiOiAiXjQuMC4wIHx8IF41LjAuMCB8fCBeNi4wLjAgfHwgXjcuMC4wIiwKLSAgICAgICAgInNhc3MiOiAiXjEuMy4wIiwKLSAgICAgICAgInNhc3MtZW1iZWRkZWQiOiAiKiIsCi0gICAgICAgICJ3ZWJwYWNrIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJmaWJlcnMiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAibm9kZS1zYXNzIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInNhc3MiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAic2Fzcy1lbWJlZGRlZCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2F4IjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheC8tL3NheC0xLjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnFWRHY5VHBBTlVqRm0wTjh1TTVHeEwzNlVnS2k5L2F0WncreDdZRm5ROGNrd0ZHS3JsNHhYNHlXdHJleTNVSm01blAxa1VibllnTG9wcVdOU1JoV3c9PSIKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlabzNLODJTRDdSaXlpMEUxRVFQb2pMejdrcGVwblNRSTlJeVBiSEhnMVhYWGV2YjVkSkk3dHB5TjJBRHhHY1FiSEc3dmN5UkhrMGNid3FjUXJpVXRnPT0iLAorICAgICAgImRldiI6IHRydWUKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvc2F4ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2F4ZXMvLS9zYXhlcy01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNUxCaDFUbHM4Yzl4Z0dqdzNRck13RVRtVE1WazBvRmd2ckZTdld4NjJsbFIyaGNFSW5yS05aMkdaQ0N1dXkybHZXcmRsNWpoYnBlcWM1aFJZS0ZPY3c9PSIsCisgICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2F4ZXMvLS9zYXhlcy02LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteEFnN1NPbkVocm01ekkzcHVPT0t5eTFPTWNNbElKWllOSlk3eExCd1N6ZTBVamhQTG5XZmoyR0YyRXBUMGptemFKS0lXS0hMc2FTU2FqZjM1YmNZbkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAieG1sY2hhcnMiOiAiXjIuMi4wIgogICAgICAgfSwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgICAibm9kZSI6ICI+PXYxMi4yMi43IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9zY2hlZHVsZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIwLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVkdWxlci8tL3NjaGVkdWxlci0wLjIwLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJlV2ZHZ0FxcVdGR3F0ZE1tY0w1ekNNSzFVOEtsWHY4U1FGR2dsTDNDRXRkMGFEVkRXZ2VGL1lvQ212bG41NW01elNrM0ovMjBoVGFTQmVTT2JzUURRPT0iLAorICAgICAgInZlcnNpb24iOiAiMC4yMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zY2hlZHVsZXIvLS9zY2hlZHVsZXItMC4yMy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VT1Noc1B3ejdOck1VcWhSNnQwaFdqRmR1dk96YnR2N3RvREgxL2hJcmZSTklEQm5uQldkMEN3SlRHdlRwbmdWbG13R0NkUDkvWmwvdFZyRHFjdVl6UT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9vc2UtZW52aWZ5IjogIl4xLjEuMCIsCi0gICAgICAgICJvYmplY3QtYXNzaWduIjogIl40LjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy0zLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcE4veU9BdmNDKzVyUTVuRVJHdXdyakxsWXZMVGJDaWJuWjFJN0IxTGFpQXo5QlJCbEU5R01nRS9lcVYzMFA3YUpRVWY3RGRpbXkvUnNiWU8vR3JWR2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuOCIsCi0gICAgICAgICJhanYiOiAiXjYuMTIuNSIsCi0gICAgICAgICJhanYta2V5d29yZHMiOiAiXjMuNS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xMy4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vd2VicGFjayIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VsZWN0LWhvc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VsZWN0LWhvc2UvLS9zZWxlY3QtaG9zZS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbUV1Z2FMSytZZmtpakI0ZngwZTZrSW11SmRDSXQyTHhDUmNiRVlQcVJHQ3M0RjJvZ3lmWlU1SUFaUmRqQ1A4SlBxMkF0ZE5vQy9EdXg2M2Q5S2lyeWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VsZnNpZ25lZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZWxmc2lnbmVkLy0vc2VsZnNpZ25lZC0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1NMM2Fvd2lGN3dhL1d0U0Z3blVybHVkV0ZvTmhmdHE4YlVrSDlwa3pqcE4yWFNQT0FZRWdnNmUwc1M5czByWndnSnpKaVFSUFUxOEE2Y2xub1c1d1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1mb3JnZSI6ICJeMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgICAgImxvb3NlLWVudmlmeSI6ICJeMS4xLjAiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjYuMy4xIiwKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNi4zLjEudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJSN1Z2RENWSE8rcTJ4QkVXc2t4UzZESkUxcVJuYjdEeHpVcm9nYjcxQ1dvU2ZpY0J4WXNpQUdkK0tsMG1tcS9NcHJHOXlBclJreXJReFRPNlhqTXpBPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiYmluIjogewogICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE4LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbmQvLS9zZW5kLTAuMTguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXFXenVPalNGT3VxUGpGZTROT3NNTGFmVG9RUXdCU09FcFMrRndFdDNBMlYzdkt1YlRxdVQzdm1MVFFwRmdNWHA4QWxGV0Z1UDFxS2FKWk90UHBWWGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiAiMi42LjkiLAotICAgICAgICAiZGVwZCI6ICIyLjAuMCIsCi0gICAgICAgICJkZXN0cm95IjogIjEuMi4wIiwKLSAgICAgICAgImVuY29kZXVybCI6ICJ+MS4wLjIiLAotICAgICAgICAiZXNjYXBlLWh0bWwiOiAifjEuMC4zIiwKLSAgICAgICAgImV0YWciOiAifjEuOC4xIiwKLSAgICAgICAgImZyZXNoIjogIjAuNS4yIiwKLSAgICAgICAgImh0dHAtZXJyb3JzIjogIjIuMC4wIiwKLSAgICAgICAgIm1pbWUiOiAiMS42LjAiLAotICAgICAgICAibXMiOiAiMi4xLjMiLAotICAgICAgICAib24tZmluaXNoZWQiOiAiMi40LjEiLAotICAgICAgICAicmFuZ2UtcGFyc2VyIjogIn4xLjIuMSIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIyLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlbmQvbm9kZV9tb2R1bGVzL2RlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMi42LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZW5kL25vZGVfbW9kdWxlcy9kZWJ1Zy9ub2RlX21vZHVsZXMvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHBwNjBQNklVSkRUdU9xLzVaOGNkc2t6SnVqZndxZk9Ua3J3SXdqN0lSSVNwbmtKblQ2U3lKNFBDUG5HTW9GakM5ZGRoYWw1S1ZJWXRBdDk3aXgwNUE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VuZC9ub2RlX21vZHVsZXMvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNkZsenViVExaRzNKMmEvTlZDQWxlRWhqenE1b3hnSHlhQ1U5eVlYdmNMc3ZvVmFISnEvczV4WEk2L1hYUDZ0ejdSOXhBT3RIblNPL3RYdEYzV1JUbEE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VyaWFsaXplLWphdmFzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VyaWFsaXplLWphdmFzY3JpcHQvLS9zZXJpYWxpemUtamF2YXNjcmlwdC02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb3dvWEVGaldSbGxpczgvTTFRK0N3NWs4Wkg0MGUzemhwL292WCtYci92aTFxajZRZXNieVhYVmlGYnBOdld2UE5BRDYyU3V0d0VYYXZlZnJMSldqN3c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmFuZG9tYnl0ZXMiOiAiXjIuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXJ2ZS1pbmRleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXJ2ZS1pbmRleC8tL3NlcnZlLWluZGV4LTEuOS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wWEhmS05QNHF1anJ0dGVNclNCYjByYzhISjlNcy9Hclh3Y1V0VXRENXM0ZXdESkk4YlQzQ3oyelRWUk1LdHJpNDlwTHgyZTBZYTh6aVA1WWEycFpadz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY2NlcHRzIjogIn4xLjMuNCIsCi0gICAgICAgICJiYXRjaCI6ICIwLjYuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOSIsCi0gICAgICAgICJlc2NhcGUtaHRtbCI6ICJ+MS4wLjMiLAotICAgICAgICAiaHR0cC1lcnJvcnMiOiAifjEuNi4yIiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAifjIuMS4xNyIsCi0gICAgICAgICJwYXJzZXVybCI6ICJ+MS4zLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXJ2ZS1pbmRleC9ub2RlX21vZHVsZXMvZGVidWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjYuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXMiOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlcnZlLWluZGV4L25vZGVfbW9kdWxlcy9kZXBkIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlcGQvLS9kZXBkLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03ZW1QVGw2RHBvNkpSWE9YakxSeGNrK0ZsTFJYNTg0N2NMS0VuMDBQTEFnYzNnMmhUWlpncitlNGMydjZRcFNtTGVGUDNuNXlVbzdmdDZhdkJLLzVqUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlcnZlLWluZGV4L25vZGVfbW9kdWxlcy9odHRwLWVycm9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLWVycm9ycy8tL2h0dHAtZXJyb3JzLTEuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sa3MrbFZDOGRnR3loOTdqeHZ4ZVlUV1FGdmg0dXc0eUMxMmdWbDYzQ2czMHNqUFg0d3VHY2RrSUNWWERBRVNyNk9KR2pxR0E4SXo1bWtlTjZ6bEQ3QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZXBkIjogIn4xLjEuMiIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICJzZXRwcm90b3R5cGVvZiI6ICIxLjEuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICI+PSAxLjQuMCA8IDIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VydmUtaW5kZXgvbm9kZV9tb2R1bGVzL2luaGVyaXRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXgwMElSTlhOeTYzandHa0ptelBpZ295U0hiYXFwTnV6S2JCT216SytnMk9kWnBROXcrc3hDTitWU0IzamE3SUFnZTJPUDJxcGZ4VGplTmN5am1XMXV3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlcnZlLWluZGV4L25vZGVfbW9kdWxlcy9tcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UcHA2MFA2SVVKRFR1T3EvNVo4Y2Rza3pKdWpmd3FmT1RrcndJd2o3SVJJU3Bua0puVDZTeUo0UENQbkdNb0ZqQzlkZGhhbDVLVklZdEF0OTdpeDA1QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXJ2ZS1pbmRleC9ub2RlX21vZHVsZXMvc2V0cHJvdG90eXBlb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0cHJvdG90eXBlb2YvLS9zZXRwcm90b3R5cGVvZi0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnZFL1R3cFpYNEZYRXh4T3haeVJHUVF2NjUxTVN3bVdLWkdxdm1QY1JJakRxV3ViNjdrVEt1SU14NDNjWlpyUy9jQkJ6d0JjTkRXb0Z4dDJYRUZJcFE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VydmUtaW5kZXgvbm9kZV9tb2R1bGVzL3N0YXR1c2VzIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9wWjN6UCtqVDFQSTdJOG5lbUpYNEFLbUFYMDcwWmtZUFZXVi9BYUtUSmwrdFhDVEd5VmRDMWE0U0w4UlVRWUV3ay9mMzRaWDhVVHlrTjY4RndycUFBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VydmUtc3RhdGljIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXJ2ZS1zdGF0aWMvLS9zZXJ2ZS1zdGF0aWMtMS4xNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YR3VSRE5qWFVpanNVTDB2bDZuU0Q3Y3dVUnV6RWdnbGJPYUZ1Wk05ZzNrd0RYT1dWVGNrMGpMempQekdEK1RheldiYm9aWXU1Mi85L1hQZFVnbmU5Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbmNvZGV1cmwiOiAifjEuMC4yIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIn4xLjAuMyIsCi0gICAgICAgICJwYXJzZXVybCI6ICJ+MS4zLjMiLAotICAgICAgICAic2VuZCI6ICIwLjE4LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXRwcm90b3R5cGVvZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FNUxEWDdXcnA4NUtpbDViaFp2NDZqOGpPZWJvS3E1Sk1tWU0zZ1ZHZEdIOHhGcFBXWFVNc05ybE9EQ3Jrb3hNRWVOaS9YWkl3dVJ2WTRYTndZTUpwdz09IgotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9zaGFsbG93ZXF1YWwiOiB7CiAgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hhbGxvd2VxdWFsLy0vc2hhbGxvd2VxdWFsLTEuMS4wLnRneiIsCkBAIC0xNzczOCwxMjggKzMxMDYsNDYgQEAKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvc2hhcnAtcm91dGVyL25vZGVfbW9kdWxlcy9AdHlwZXMvcmVhY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNi4xNC40MyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3JlYWN0Ly0vcmVhY3QtMTYuMTQuNDMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTd6ZGp2N2p2b0xMUWcxdFR2cFFzbStoeU5VTVQybVBsTlYxK2QwSThmYkdoa0psODJzcG9wTXlCbHU0d2IxZHZpWkF4cEdkazVlSHUvbXVhY2tubmZ3PT0iLAorICAgICAgInZlcnNpb24iOiAiMTYuMTQuNjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9yZWFjdC8tL3JlYWN0LTE2LjE0LjYyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CV2Y3aHFuaW5aYXY2bmVyeFhqK05lWlQvbVRwRGVHNkxrMnpSRUhBeTYzQ3JuWG9PR1BHdE5xVEZZRk4vc3FwU2FSRURQNW90VlY4OGF4SVhtS2ZHQT09IiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgICJAdHlwZXMvcHJvcC10eXBlcyI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9zY2hlZHVsZXIiOiAiKiIsCisgICAgICAgICJAdHlwZXMvc2NoZWR1bGVyIjogIl4wLjE2IiwKICAgICAgICAgImNzc3R5cGUiOiAiXjMuMC4yIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zaGViYW5nLWNvbW1hbmQiOiB7CisgICAgIm5vZGVfbW9kdWxlcy9zaWdpbmZvIjogewogICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctY29tbWFuZC8tL3NoZWJhbmctY29tbWFuZC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0h4cjJ6WnBZdGRtck4xcURqcnJYL1oxclIxa0c4RHgrZ2twSzFHNGVYbXZYc3dtY0UxaFRXQldZVXpscmFZdzEveVpwNll1RFk3N1l0dmJOMGRtREE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2hlYmFuZy1yZWdleCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2hlYmFuZy1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGViYW5nLXJlZ2V4Ly0vc2hlYmFuZy1yZWdleC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNysrZEZodGN4MzM1M3VCYXE4RERSNE51eEJldEJ6QzdaUU9obVRRSW5IRWQ2YlNyWGRpRXl6Q3ZHMDdaNDRVWWRMU2hXVXlYdDVNL3loejhla2NiMUE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zaGVsbC1xdW90ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGVsbC1xdW90ZS8tL3NoZWxsLXF1b3RlLTEuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ajFXOWwxaUFzLzR4WUJJMVNZT1ZaeUZjQ2lzOWI0S0NMUThmZ0FHRzA3UXZ6YVJMVlZSUXZBeTg1eU5tbVpTallqZzRNV2g0Z052bFB1alUvNUxwQT09IiwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaWRlLWNoYW5uZWwvLS9zaWRlLWNoYW5uZWwtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXE1WFB5dHFGRUlLSGtHZGlNSXJZMTBtdkxSdm5RaDQyLytHb0JsRlczYjJMWExFMnh4SnBaRmRtOTR3ZTBCYW9WM1J3SnlHcWc1d1M3ZXB4VHYwWnZ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjAiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4wLjIiLAotICAgICAgICAib2JqZWN0LWluc3BlY3QiOiAiXjEuOS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQtMy4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXduRDJaRStsK1NQQy91b1MwdlhlRTlMMSswd3VhTXFLbGZ6OUFNVW8zOEpzeUxTQldTRmNIUjFScmk2MkxaYzEydkxyMWdiM2psN2l3UWhnd3BBYkdRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Npc3RlcmFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lzdGVyYW5zaS8tL3Npc3RlcmFuc2ktMS4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJMR0dsUjFReEJjeW5uMmQ1WW1EWDRNR2psWnZ5Mk1SQkRSTkhMSjhWSTZsNis5RlVpeVRGTkowSXZlT1NQMGJjWGdWRFBSY2ZHcUEwcGphcVVwZlZnPT0iCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lnaW5mby8tL3NpZ2luZm8tMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlieDBXTzEvOGJTQkxFV1hadkVkN2dNVzNTbjNKRmxXM1R2WDFuUkViRExSTlFOYWVOTjhXSzBtZUJ3UGRBYU9JN1R0UlJSSm4vRXMxemhyckNIdTdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3NsYXNoIjogewogICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsYXNoLy0vc2xhc2gtMy4wLjAudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc5UTFoYWVieTM2T1NTdHdiNG50Q0dHR2FLc2FWU2pRNjhmQnhvUWN1dGw1ZlMxdnVZMThIM3dTdDNqRnlGdHJreCtLejBWMUc4NUE0TXlBZERNaTJRPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj04IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zb2NranMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvY2tqcy8tL3NvY2tqcy0wLjMuMjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdKZ0xUWjd2WWIvSnRQU1NaMTBoc09ZSXZFWXNqYk5VK3pQZElIY1VhV1ZOVUVQaXZ6eGt1MzE4NjVzU1N1ZDBEYTBXNGxFZU9QbG13OTN6TFFjaHVRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZheWUtd2Vic29ja2V0IjogIl4wLjExLjMiLAotICAgICAgICAidXVpZCI6ICJeOC4zLjIiLAotICAgICAgICAid2Vic29ja2V0LWRyaXZlciI6ICJeMC43LjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1saXN0LW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbGlzdC1tYXAvLS9zb3VyY2UtbGlzdC1tYXAtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFuUTdnVk14R054c2lMNGxFdUp3ZS9UbzhVbks3ZkFubWJHRUVIOFJwTG91dUtiZUVtMGxoYlFWRklyTlN1QitHN3RWckFsVnNaZ0VUVDVubGpmK0l3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjcuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC43LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWwzQmlrVXh2UE9jbjVFNzRkWmlxNUJHc1RiNXlFd2hhVFN6Y2NVNnQ0c0RPSDhOV0pDc3RLTzVRVDJDdnRGb0s2RjBzYUw3cDl4SEFxSE9sQ1BKeWdBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAtanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC1qcy8tL3NvdXJjZS1tYXAtanMtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVIwWHZWSjlXdXNMaXFUQ0VpR0NtSUNDTXBsY0NrSXd3UjExbU9TRDlDUjV1K0lYWWRpc2VlRXVYQ1ZBalM1NHpxd2tMY1BObm1VNE9lSjZ0VXJXaER3PT0iLAorICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtanMvLS9zb3VyY2UtbWFwLWpzLTEuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VWFdNS2hMT3dWS2I3MjhJVXRRUFh4ZllVK3VzZHlidFVySy84dUdFOENRTXZyaE9wd3Z6REJ3ajBRaFNMN01RYzd2SXNJU0JHOFZROCtJRFF4cGZRQT09IiwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcC1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC1sb2FkZXIvLS9zb3VyY2UtbWFwLWxvYWRlci0zLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQm9reFBvTGp5bDNpT3Jna1dhYWtheHFuZWxBSlNTKzBWK0RlMGtLSXE2bHlXclh1aVBnWVRHcDZ6M2lIbXFsaktBYUxYd1phK2N0RDhHY2NSSmVWdmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWJhYiI6ICJeMi4wLjUiLAotICAgICAgICAiaWNvbnYtbGl0ZSI6ICJeMC42LjMiLAotICAgICAgICAic291cmNlLW1hcC1qcyI6ICJeMS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS93ZWJwYWNrIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2VicGFjayI6ICJeNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAtc3VwcG9ydCI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjAuNS4yMSIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC1zdXBwb3J0Ly0vc291cmNlLW1hcC1zdXBwb3J0LTAuNS4yMS50Z3oiLAogICAgICAgImludGVncml0eSI6ICJzaGE1MTItdUJIVTNMM2N6c0l5WVhLWDg4ZmRyR292eGRTQ29UR0RSWjZTWVh0U1J4TFpVekhnNVAvNjZIdDZ1b1VsSHU5RVpvZCtpblhoS28zcVFnd1hVVC95MXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiYnVmZmVyLWZyb20iOiAiXjEuMC4wIiwKICAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4wIgpAQCAtMTc4NjksMjQ4ICszMTU1LDI2IEBACiAgICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgInBlZXIiOiB0cnVlLAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49MC4xMC4wIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zb3VyY2VtYXAtY29kZWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlbWFwLWNvZGVjLy0vc291cmNlbWFwLWNvZGVjLTEuNC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05Tnlrb2pWNVVpaDRsZ281U281ZHR3K2YwSmdKWDMwS0NOSThnd2h6Mko5QTE1d0QwTWw2dGpIS3dmNmZUU2E2ZkFkVkJkWmVOT3M5ZUo3MXFDazh2QT09IiwKLSAgICAgICJkZXByZWNhdGVkIjogIlBsZWFzZSB1c2UgQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjIGluc3RlYWQiCisgICAgIm5vZGVfbW9kdWxlcy9zdGFja2JhY2siOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhY2tiYWNrLy0vc3RhY2tiYWNrLTAuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xWE1KRTVmUW8xakdINlkvN2VibndQT0JFa0lFblQ0UUYzMmQ1UjErVlhkWHZlTTBJQk1KdDh6ZmF4WDFQM1FoVndyWWUrNTc2K2prQU50U1MybUJidz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcGR5IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHkvLS9zcGR5LTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yNDZnWlFaUVYrS2w5b0l0dmwxSlpacUpLR3Irb0VrQjA4QTZCemtpUjc1OTMvN0lidHVuY1hIZDJZb1llVHNHNDE1N1pzc011OUtZdlVITGNqY0RvQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAotICAgICAgICAiaGFuZGxlLXRoaW5nIjogIl4yLjAuMCIsCi0gICAgICAgICJodHRwLWRlY2VpdmVyIjogIl4xLjIuNyIsCi0gICAgICAgICJzZWxlY3QtaG9zZSI6ICJeMi4wLjAiLAotICAgICAgICAic3BkeS10cmFuc3BvcnQiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcGR5LXRyYW5zcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR5LXRyYW5zcG9ydC8tL3NwZHktdHJhbnNwb3J0LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oc0xWRkU1U2pBNlRDaXNXZUpYRktuaUdHT3BCZ01MbWVyZk8yYUN5Q1U1czduSi9ycEFlcHFtRmlmdi9HQ2JTYnVlRWVBSkpubVNRMnJLQy9nOEZjdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAotICAgICAgICAiZGV0ZWN0LW5vZGUiOiAiXjIuMC40IiwKLSAgICAgICAgImhwYWNrLmpzIjogIl4yLjEuNiIsCi0gICAgICAgICJvYnVmIjogIl4xLjEuMiIsCi0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiXjMuMC42IiwKLSAgICAgICAgIndidWYiOiAiXjEuNy4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EOWNQZ2t2TGxWM3QzSXpMMEQwWUx2R0E5QWhrNFBjdlZ3VWJOMGRTR3IxYVAwTnJ0NEFFblRVYnVHdnF1RUMwbUE2NEdxdDFmemlybFJzNWliWHg4Zz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhYmxlLy0vc3RhYmxlLTAuMS44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qaTlxeFJuT1ZmY3VMRHlTajlxemhHU0VGVm9ieXQxa0lPU2tqMXFaellMenE3VG9zL29VVVd2b3RVUFFMbHJzaWRxc0s2dEJIODlCYzlrTDV6SEE2dz09IiwKLSAgICAgICJkZXByZWNhdGVkIjogIk1vZGVybiBKUyBhbHJlYWR5IGd1YXJhbnRlZXMgQXJyYXkjc29ydCgpIGlzIGEgc3RhYmxlIHNvcnQsIHNvIHRoaXMgbGlicmFyeSBpcyBkZXByZWNhdGVkLiBTZWUgdGhlIGNvbXBhdGliaWxpdHkgdGFibGUgb24gTUROOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9zb3J0I2Jyb3dzZXJfY29tcGF0aWJpbGl0eSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RhY2stdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhY2stdXRpbHMvLS9zdGFjay11dGlscy0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWGxrV3ZmSW02Um1zV3ROSngrdXF0S0xTOGVxRmJ4VWcwWnpMWHFZMGNhRXk5bDdocnVYOElwaURuanNMYXZvQmdxQ0NSNzFUcVdPOE1hWFloZUozUlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFjay11dGlscy9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVXB6Y0xDWG9sVVdjTnU1SHRWTUhZZFhKakFyanNGOUMwYU5ucXVaWVk0dVcvVnUwbWl5NVlvV3ZiVjM0NUhhdVZ2Y0FVbnBSdWhNTWNxVGNHT1kyK3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YWNrZnJhbWUvLS9zdGFja2ZyYW1lLTEuMy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vZVZ0dDdlV1FTK05hNkYvL1M0a0oySzJWYlJsUzlENDNtQWxNeVZwVldvdnk5bytqZmdIOE85YWd6QU56YWlMamNsQTBvWXpVWEVNNFB1cmhTVUNodz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGF0dXNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGF0dXNlcy8tL3N0YXR1c2VzLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Sd05BOVovN1BySzA2cllMSXpGTWxhRitsNzNpd3B6c3FSSUZnYk1MYlRjTEQ2Y09hbzgyVGFXZWZQWFF2QjJmT0M0QWp1WVNFbmRTN04vbVRDYmtkUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0b3AtaXRlcmF0aW9uLWl0ZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0b3AtaXRlcmF0aW9uLWl0ZXJhdG9yLy0vc3RvcC1pdGVyYXRpb24taXRlcmF0b3ItMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlDR1FqKzBsMEhPZFoyQUVlQkFEbHNSQyt2c25Ec1pzYmRTaUgxeU5TamNmS003ZmRwQ01mcUFML2R3RjVCTGl3L1hoUmZ0L1dheDZ6UWJocTJCY2pRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImludGVybmFsLXNsb3QiOiAiXjEuMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZ19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhrUlg4VTFXakpGZDhMc0RKMnlRL3dXV3hhb3BFc0FCVTFYZmtNOEErajArODVKQUdwcHQxNmNyMVdoZzZLSWJiNG9rVTZNcWw2Qk9qK3V1cC93S2VBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLWxlbmd0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctbGVuZ3RoLy0vc3RyaW5nLWxlbmd0aC00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2w2ck5ONWZZSE5oWlp5NDFSWHNZcHRDakEySWdtcTRFRzdrWkFZRlFJMUUxVlRYYXJyNlpQWEJnNmVxN1k2ZUs0RkVoWTZBSmx5dUZJYi92L1MwVlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2hhci1yZWdleCI6ICJeMS4wLjIiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy1uYXR1cmFsLWNvbXBhcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLW5hdHVyYWwtY29tcGFyZS8tL3N0cmluZy1uYXR1cmFsLWNvbXBhcmUtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW4zc1B3eW5MMW53S2kzV0o2QUlzQ2x3Qk1hMHpUaTU0Zm4yb0xVNm5kZlRTSU8wNXhhem5qU2YxNVBjQlpVNkZOV2JtTjVRNmN4VDRWNWhHdkI0dGF3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctd2lkdGgvLS9zdHJpbmctd2lkdGgtNC4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdLeVFSUXBqSjBzSXA2MkVyU1pkR3NqTUpXc2FwNW9STmloSGh1Nkc3SlZPLzlqSUI2VXlldkwrdFh1T3Fybmc4ai9jeEtUV3lXVXd2U1RyaWlaei9nPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVtb2ppLXJlZ2V4IjogIl44LjAuMCIsCi0gICAgICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTguMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NU2pZemNXTk9BMGV3QUhwejBNeHBZRnZ3ZzZ5ankxTkczeHRlb3F6NjQ0VkNvL1JQZ25yMS9HR3QraWMzaUpUelE4RXUzVGRNMTRTYXduVlVtR0U2QT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy5wcm90b3R5cGUubWF0Y2hhbGwvLS9zdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsLTQuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ek9DT2NKK1JKQVFzaGNUdlhQSG94b1FHT05hM2UvTHF4OTB3VUErd0V6WDc4c2c1Qm8rMXRRbzROMHBvaFMwZXJHOXF0Q3FKRGpOQ1FCamVXVnh5Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IiwKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4zIiwKLSAgICAgICAgImhhcy1zeW1ib2xzIjogIl4xLjAuMyIsCi0gICAgICAgICJpbnRlcm5hbC1zbG90IjogIl4xLjAuMyIsCi0gICAgICAgICJyZWdleHAucHJvdG90eXBlLmZsYWdzIjogIl4xLjQuMyIsCi0gICAgICAgICJzaWRlLWNoYW5uZWwiOiAiXjEuMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmcucHJvdG90eXBlLnRyaW0vLS9zdHJpbmcucHJvdG90eXBlLnRyaW0tMS4yLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXA2VG1lVDFUMzQxMU04Q2dnOXdCVE1SdFkycTkrUE55OUVWMWkybElYVU4vYnR0NzYzb0lmeHdOM1JSOFZVNndIWDhqLzFDRnkwTCtZdVRobTZiZ09nPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpbmcucHJvdG90eXBlLnRyaW1lbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLnByb3RvdHlwZS50cmltZW5kLy0vc3RyaW5nLnByb3RvdHlwZS50cmltZW5kLTEuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KeVNxKzRtclBmOUVzREJFRFlNT2IvbE03WFFMdWx3ZzVSL20xcjBQWEVGcXJWMHFIdmw1OHNkVGlsU1h0S09mbENzSzJFOGp4ZitHS0MwVDA3Uld3UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0Ly0vc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnQtMS4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9tcWpNRGFZOTJwYm41SE9YN2Y5SWNjTEErVTF0QTlHdnRVNEpyb2RpWEZmWUI3alB6ekhwUnpwZ2xMQWp0VVY2YkI1NTd6d0NsSmV6VHFuQWlZblFBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5naWZ5LW9iamVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmdpZnktb2JqZWN0Ly0vc3RyaW5naWZ5LW9iamVjdC0zLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItckhxaUZoMWVscUNROVdQTElDOEkwUS9nL3dqNUoxZU1reW9pRDZlb1FBcFdIUDBGdGxLN3JxbmhtYWJMNVZVWTlKUUNjcXd3dmxPYVN1dXRla2d5cnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2V0LW93bi1lbnVtZXJhYmxlLXByb3BlcnR5LXN5bWJvbHMiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzLW9iaiI6ICJeMS4wLjEiLAotICAgICAgICAiaXMtcmVnZXhwIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1ib20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYm9tLy0vc3RyaXAtYm9tLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zeHVyRnY1dEVnaWkzM1ppOEp0cDU1d0VJSUxSOWVoMzRGQVcwMFBaZitKblNzVG1WL2lvZXdTZ1FsOTdKSHZnam9SR3dQU2hzV20rSWRyeEIzNWQwdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWNvbW1lbnRzLy0vc3RyaXAtY29tbWVudHMtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpwckt4K2JCTFh2MDY3V1RDQUx2OFNTejVsMitYaHBZQ3NWdFNxbE1ua0FYTVdEcSsvZWtWYmwxZ2hxUDlyVUhUenY2c20vRHdDT2lZdXRVL3lwMWZ3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWZpbmFsLW5ld2xpbmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtZmluYWwtbmV3bGluZS8tL3N0cmlwLWZpbmFsLW5ld2xpbmUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJycHZmTkFFM2RjdnE3bGwzeFZ1bXpqS2paUTV0STFzRVVJS3IzVW9rczBYVWw0NVN0M0ZsYXRWcWVmOXByazRqUkR6aFc2V1pnKzNiazkzeTZwTGpBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KKyAgICAibm9kZV9tb2R1bGVzL3N0ZC1lbnYiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RkLWVudi8tL3N0ZC1lbnYtNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJxN3liY1gyUnVDNTVyOW9hUFZFVzcveHUzdGo4dTRHZUJZSEJXQ3ljaEZ0ek1Jcjg2QTdlM1BQRUJQVDM3c0hTdEtYMytUaVgvRnIvQUNtSkxWbExRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWluZGVudCI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKQEAgLTE4MTI0LDE3ICszMTg4LDYgQEAKICAgICAgICAgIm5vZGUiOiAiPj04IgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1qc29uLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWpzb24tY29tbWVudHMvLS9zdHJpcC1qc29uLWNvbW1lbnRzLTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZlBjK1I0aWh3cVA2Ti9hSXYyZjFnTUg4bE9WdFdRSG9xQzR5SzZvU0RWVm9jdW1Bc2ZDcWprWG5xaVlNaG1Nd1MvbUVITHA3VmVobHQzcWw2bEVpZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvc3RyaXAtb3V0ZXIiOiB7CiAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtb3V0ZXIvLS9zdHJpcC1vdXRlci0xLjAuMS50Z3oiLApAQCAtMTgxNTYsMzUgKzMyMDksMjAgQEAKICAgICAgICAgIm5vZGUiOiAiPj0wLjguMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0eWxlLWxvYWRlci8tL3N0eWxlLWxvYWRlci0zLjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNTNCaUdMWEFjbGw5bWFDWXRaaTJSQ1FaS2E4TlFRYWk1QzRob3JxS3lSbUhqOUg3UW1jVXl1Y3JIKzRLVy9nQlFiWE0yQXNCMGF4b0VjRlpQbGZQY3c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3ZWJwYWNrIjogIl41LjAuMCIKLSAgICAgIH0KLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvc3R5bGVkLWNvbXBvbmVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3R5bGVkLWNvbXBvbmVudHMvLS9zdHlsZWQtY29tcG9uZW50cy02LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVldOZllZQnVYenVMUy9RWUVlb1BnTUVyUDI2V0wrZFg5Ly9yRWg4MEIybW1sUzF5UnhSeHVMNWVheDRtNnliWUVVb0hXbFR5MlhPVTMyNzY3bWxNa2c9PSIsCisgICAgICAidmVyc2lvbiI6ICI2LjEuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0eWxlZC1jb21wb25lbnRzLy0vc3R5bGVkLWNvbXBvbmVudHMtNi4xLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdGZ3aFU1anc3VW94ZE0wZzZYVTlWWlFGVjRkbytLck04aWRpVkNINWg0djQ5VyszcDN5TWUwaWNZd0pnWlFaZXBhNURiSDA0UXY4UDAvUmRjTGNnZz09IiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkIjogIl4xLjIuMSIsCi0gICAgICAgICJAZW1vdGlvbi91bml0bGVzcyI6ICJeMC44LjAiLAotICAgICAgICAiQHR5cGVzL3N0eWxpcyI6ICJeNC4wLjIiLAotICAgICAgICAiY3NzLXRvLXJlYWN0LW5hdGl2ZSI6ICJeMy4yLjAiLAotICAgICAgICAiY3NzdHlwZSI6ICJeMy4xLjIiLAotICAgICAgICAicG9zdGNzcyI6ICJeOC40LjMxIiwKLSAgICAgICAgInNoYWxsb3dlcXVhbCI6ICJeMS4xLjAiLAotICAgICAgICAic3R5bGlzIjogIl40LjMuMCIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi41LjAiCisgICAgICAgICJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkIjogIjEuMi4yIiwKKyAgICAgICAgIkBlbW90aW9uL3VuaXRsZXNzIjogIjAuOC4xIiwKKyAgICAgICAgIkB0eXBlcy9zdHlsaXMiOiAiNC4yLjUiLAorICAgICAgICAiY3NzLXRvLXJlYWN0LW5hdGl2ZSI6ICIzLjIuMCIsCisgICAgICAgICJjc3N0eXBlIjogIjMuMS4zIiwKKyAgICAgICAgInBvc3Rjc3MiOiAiOC40LjM4IiwKKyAgICAgICAgInNoYWxsb3dlcXVhbCI6ICIxLjEuMCIsCisgICAgICAgICJzdHlsaXMiOiAiNC4zLjIiLAorICAgICAgICAidHNsaWIiOiAiMi42LjIiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7CiAgICAgICAgICJub2RlIjogIj49IDE2IgpAQCAtMTgxOTgsNzggKzMyMzYsNDggQEAKICAgICAgICAgInJlYWN0LWRvbSI6ICI+PSAxNi44LjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0eWxlaGFja3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3R5bGVoYWNrcy8tL3N0eWxlaGFja3MtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNCcGNkNUh4N0c2c2VvN2IxTGtwdHR2VHo3aWtEMExsSDVSbWRjQk5iNmZGUjBGbDdMUXdIREZyMzAwcTRjd1VxaStJWXJGR21zSUhpZU1CZm5OL0J3PT0iLAorICAgICJub2RlX21vZHVsZXMvc3R5bGVkLWNvbXBvbmVudHMvbm9kZV9tb2R1bGVzL3Bvc3Rjc3MiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjQuMzgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MvLS9wb3N0Y3NzLTguNC4zOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV2dscGRrMDNCU2ZYa0hvUWEzYi9vdWxyb3RBa3dybExEUlNPYjlEMGJOODZGZFJ5RTlscHBTcDMzYUhOUGdCYTBKS0NvQitkckZMWmtRb1JSWWFlNUE9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3Bvc3Rjc3MvIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAidGlkZWxpZnQiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aWRlbGlmdC5jb20vZnVuZGluZy9naXRodWIvbnBtL3Bvc3Rjc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2FpIgorICAgICAgICB9CisgICAgICBdLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJyb3dzZXJzbGlzdCI6ICJeNC4yMS40IiwKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuNCIKKyAgICAgICAgIm5hbm9pZCI6ICJeMy4zLjciLAorICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4wLjAiLAorICAgICAgICAic291cmNlLW1hcC1qcyI6ICJeMS4yLjAiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMCB8fCBeMTIgfHwgPj0xNC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAicG9zdGNzcyI6ICJeOC4yLjE1IgorICAgICAgICAibm9kZSI6ICJeMTAgfHwgXjEyIHx8ID49MTQiCiAgICAgICB9CiAgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0eWxlZC1jb21wb25lbnRzL25vZGVfbW9kdWxlcy90c2xpYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpYi8tL3RzbGliLTIuNi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BRVl4SDkzakdGUG4vYTJpVkF3Vzg3VnVVSWtSMUZWVUtCNzdOd01GN25CVERrRHJyVC9IcHQvSXJDSjBRWGhXMjdqVEJEY2Y1Wlk3dzZSaXFUTXcyUT09IgorICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9zdHlsaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3R5bGlzLy0vc3R5bGlzLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FODdwSW9ncHdVc1V3WHc3ZE55VTRRRGpkZ1ZNeTUybStYRU9QRUtVbjE2MWNDeldqamhQU1FoQnlmZDFDY052ck9MblhRNk9ublpEd25KcnovWjRZUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdWNyYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4zMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdWNyYXNlLy0vc3VjcmFzZS0zLjMyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlkUU9VMzRycFN5ajJUR3l6NEQycDhyYmt0SU9aOFFZOXMrREdMdkZVMWk1cFdKRTh2a3BydUNqR0NNSHNkWHduRDdKRGNTK25vU3dNL2E3enlORkRRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuMiIsCi0gICAgICAgICJjb21tYW5kZXIiOiAiXjQuMC4wIiwKLSAgICAgICAgImdsb2IiOiAiNy4xLjYiLAotICAgICAgICAibGluZXMtYW5kLWNvbHVtbnMiOiAiXjEuMS42IiwKLSAgICAgICAgIm16IjogIl4yLjcuMCIsCi0gICAgICAgICJwaXJhdGVzIjogIl40LjAuMSIsCi0gICAgICAgICJ0cy1pbnRlcmZhY2UtY2hlY2tlciI6ICJeMC4xLjkiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInN1Y3Jhc2UiOiAiYmluL3N1Y3Jhc2UiLAotICAgICAgICAic3VjcmFzZS1ub2RlIjogImJpbi9zdWNyYXNlLW5vZGUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3VjcmFzZS9ub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci00LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTk9LbTh4aGt6QWp6Rng4QjJ2NU9BSFQrdTVwUlFjMlVDYTJWcTlqWUwvMzFvMndpOW14QkE3TElGczNzVjVWU0M0OXo2cEVoZmJNVUx2U2hLajI2V0E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3VjcmFzZS9ub2RlX21vZHVsZXMvZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTHdheHd5WjcyTGs3dlpJTnROTnJ5d1gwWnVMeVN0cmREdGFiZWZaS0FZNVpHSmhWdGdkem5sdVJlc3hObVBpdEUwU0FPK08yNnNXVEhlS1NJMndNQkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnMucmVhbHBhdGgiOiAiXjEuMC4wIiwKLSAgICAgICAgImluZmxpZ2h0IjogIl4xLjAuNCIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjQiLAotICAgICAgICAib25jZSI6ICJeMS4zLjAiLAotICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIioiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHlsaXMvLS9zdHlsaXMtNC4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJodFVqV2QvejZsdEppUXdnMGRVZnhFSitXK2pkcVFkOFRiV0xXeWVJSkhsbnNxbUdMUkZGZDhlNW1BMEFaaS96eDkwc21YUmxONjZZTVRjYVNGaWZnPT0iCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewogICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNy4yLjAudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFwQ0F2Umw5c3R1T0h2ZUtzbjdIbmNKUnZ2NTAxcUlhY0t6UWxPLytMd3hjOSswcTJ3THl2NERmdnQ4MC9EUG4ycHFPQnNKZERpb2dYR1I5K092d1J3PT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgogICAgICAgfSwKQEAgLTE4Mjc3LDI4MyArMzI4NSwxOSBAQAogICAgICAgICAibm9kZSI6ICI+PTgiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N1cHBvcnRzLWh5cGVybGlua3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtaHlwZXJsaW5rcy8tL3N1cHBvcnRzLWh5cGVybGlua3MtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJwc0FabHBXY0R3T1BRQTIyYUNINEowdDdMOEptQXZzQ3hmT1NFd203Y1FzM0xzaE4zNlFhVGt3ZDcwRG5CT1hEV0dzc3cyZVVvYzhDYVJXVDBYdW5BPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3VwcG9ydHMtcHJlc2VydmUtc3ltbGlua3MtZmxhZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1wcmVzZXJ2ZS1zeW1saW5rcy1mbGFnLy0vc3VwcG9ydHMtcHJlc2VydmUtc3ltbGlua3MtZmxhZy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb3QwV25YUzlmZ2RrZ0ljZVBlNlJITmsxV0E4K211UGE2Y1NqZVIzVjhLMjdxOUJCMXJURTNSMXA3SHYwejFaeUFjOHM2VnZ2OERJeVdmNjgxTUF0MHc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N2Zy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3ZnLXBhcnNlci8tL3N2Zy1wYXJzZXItMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWU0aEcxaFJ3b09kUmIzN2NJTVNnek5zeHl6S2ZheVc2Vk9mbHJ3dlIrL2J6cmt5eFkvMzFXa2JnblFwZ3RyTnAxU2RwSnZwVUFHVGEvWm9pUE5EdVJRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N2Z28iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3Znby8tL3N2Z28tMS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXloeS9zUVl4UjVCa0M5OENZN28zMVZHc2cwMTRBS0xFUHhkZmhvcmE3NmwzNmhEOVJkeTVOWkEvT2NuNnlheU5QZ1NhbVlkdFgyckZKZGN2MDdBWVZ3PT0iLAotICAgICAgImRlcHJlY2F0ZWQiOiAiVGhpcyBTVkdPIHZlcnNpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVXBncmFkZSB0byB2Mi54LnguIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeMi40LjEiLAotICAgICAgICAiY29hIjogIl4yLjAuMiIsCi0gICAgICAgICJjc3Mtc2VsZWN0IjogIl4yLjAuMCIsCi0gICAgICAgICJjc3Mtc2VsZWN0LWJhc2UtYWRhcHRlciI6ICJeMC4xLjEiLAotICAgICAgICAiY3NzLXRyZWUiOiAiMS4wLjAtYWxwaGEuMzciLAotICAgICAgICAiY3NzbyI6ICJeNC4wLjIiLAotICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKLSAgICAgICAgIm1rZGlycCI6ICJ+MC41LjEiLAotICAgICAgICAib2JqZWN0LnZhbHVlcyI6ICJeMS4xLjAiLAotICAgICAgICAic2F4IjogIn4xLjIuNCIsCi0gICAgICAgICJzdGFibGUiOiAiXjAuMS44IiwKLSAgICAgICAgInVucXVvdGUiOiAifjEuMS4xIiwKLSAgICAgICAgInV0aWwucHJvbWlzaWZ5IjogIn4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAic3ZnbyI6ICJiaW4vc3ZnbyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlQwWkk2a1pSZFRoOFl5SnczU01iWW0vdStOcWZzQXhFcFdPMFBmOXNxOC9lOTRXeHhPcFBLeDlGUjFGbHlDdE9WRE5PUSs4bnRscUZ4aVJjK3I1cUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMS45LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvY2hhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0yLjQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXRpK2Y5bHBKTmN3RjR0V1Y4L09yVFR0RjFnWmkrZjhGcWx5QWRvdXJhbGNGV0ZRV0YyK05nQ0hTaGprQ2IrSUZCTHE5YnVad0UxeGNrUVU0cGVTdVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjMuMi4xIiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4xLjAuNSIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNS4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0xLjkuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWZBVXRkK3ZGZEF0RlFjQzhDQ3lZdDFmWVd4U3FBaUsyY1NENnpEQjhOM2Nwc0VCQXZSeHA5ek9HZzZHL1NISEpZQVQ4OC9hei9JdURHQUxzTlZiR2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItbmFtZSI6ICIxLjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvY29sb3ItbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzJmU2VuaE13MkhaTVRWSGVDQTlLQ21wRUlieldpUXNqTitCSGNCYlM5dnIxbXR0K3ZKalBka3NJQk5VbUtBVzhURlVEUEpLNVNVVTNRaEU5TkVYRHc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvY3NzLXNlbGVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3Mtc2VsZWN0Ly0vY3NzLXNlbGVjdC0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRHFrN0xRS3B3TG9IM1Zvdnpabmt6ZWdxTlN1QXppUXlOWlVjcmRETTQwMWlZK1I1TmtHQlhHbXRPMDUveWFYUXppQUx1UG9nZUcwYjdVQWdqblRKVFE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYm9vbGJhc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImNzcy13aGF0IjogIl4zLjIuMSIsCi0gICAgICAgICJkb211dGlscyI6ICJeMS43LjAiLAotICAgICAgICAibnRoLWNoZWNrIjogIl4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvY3NzLXdoYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLXdoYXQvLS9jc3Mtd2hhdC0zLjQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUNVbTNMMC9qaVpUcWZ6Uk0zSGk5UThlWnFkNklLMzdtTVdQTHo5UEp4a0xXbGxZZVJmK0VIVVNIWUV0Rm9wMkVxeXRhcTFGaXpGVmg3WGZCblhDRFE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmI1NSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvZG9tLXNlcmlhbGl6ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tLXNlcmlhbGl6ZXIvLS9kb20tc2VyaWFsaXplci0wLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMi94UGIzT1JzUTQybkhZaVN1blhrRGpQTEJhRWoveFR3VU80QjdYQ1pRVFJrN0VCdFRPUGF5Z2gxMFlBQWgyT0kxUXJwNk5XZnBBaHpzd2oweWR0OWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZG9tZWxlbWVudHR5cGUiOiAiXjIuMC4xIiwKLSAgICAgICAgImVudGl0aWVzIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvZG9tdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tdXRpbHMvLS9kb211dGlscy0xLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGdkMlhjSi9OakV3Kzd0RnZmS3hPekNZS1pzZGN0NWxjelEyWmFRWThEano3cGZBRDNHYnA4eVNKV3RyZUlJL3ZEbE1WbXh3YTZwSG1keElZZ3R0RGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZG9tLXNlcmlhbGl6ZXIiOiAiMCIsCi0gICAgICAgICJkb21lbGVtZW50dHlwZSI6ICIxIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdmdvL25vZGVfbW9kdWxlcy9kb211dGlscy9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tZWxlbWVudHR5cGUvLS9kb21lbGVtZW50dHlwZS0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlNLQitUU3BNcEZJL0hPeENOcjFPOGFNT1RaOGhUM3BNM0dRMHcvbVdSbWtoRURTRkpra3l6ejRYUXNCVjQ0QkNod0drckRmTXlqVkQwZUEyYUZWM3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmJSb3JCNUZVUVd2bGExNlU4Ui9xZ2FGSXlhMnFHendEck5tQ1p1WUtyYmRTVU1HNkkxWkNHUVJlZmtSVmh1T2tJR1ZuZTdCUTM1RFNmbzFxdkpxRmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3Znby9ub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0tKZjErY2VRQnI0U01rdlFuQkRORHRmNFRYcFZoVkdhdGV1MHQ5MThibDMwRm5iRTJtNHZOTFgrVldlL2RwamxiK0h1Z0dZelc3dVFYSDk4SFBFWXc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdmdvL25vZGVfbW9kdWxlcy9udGgtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnRoLWNoZWNrLy0vbnRoLWNoZWNrLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XZUJPZGp1OFNuelBONXZUVUpZeFlVeExlWHBDYVZQNWk1ZTBMRjhmZzdXT1JGMldkN3dGWC9wazB0WVprN3M4VCtKN1ZMeTBEYTZKMSt3Q1QwQXRIZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJib29sYmFzZSI6ICJ+MS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N2Z28vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiNS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFqVmp3ZFhJdDQwOE1JaUFxQ1g0b1VLc2dVMkVxQUd6czJQcGttNGFRWWJqbStaRVdFY1c0U2ZGTlRyNHVNTlptYTBleTRmNWxnTHJrQjBhWDBRTW93PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZSI6IHsKICAgICAgICJ2ZXJzaW9uIjogIjMuMi40IiwKICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zeW1ib2wtdHJlZS8tL3N5bWJvbC10cmVlLTMuMi40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05UU5rNUt3REYrQnZ6K1B5T2JrbVNZakk1a3NWVVl0alc3QVUyMnIyTktjZkxKY1hwOTZoa0RXVTMrWG5kT3NVYitBUTlRaGZ6ZkNUMk8rQ05XVDVUdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90YWlsd2luZGNzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90YWlsd2luZGNzcy8tL3RhaWx3aW5kY3NzLTMuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05alBrTWlJQlh2UGMyS3l3a3JhcXNVZmJmaitkSERiK0pQV3RTSmE5TUxGZHJQeWF6STdxNldYMnNVcm03UjllVlI3cXF2M1BhczdFdlFGenhLbkk2dz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYWxsb2MvcXVpY2stbHJ1IjogIl41LjIuMCIsCi0gICAgICAgICJhcmciOiAiXjUuMC4yIiwKLSAgICAgICAgImNob2tpZGFyIjogIl4zLjUuMyIsCi0gICAgICAgICJkaWR5b3VtZWFuIjogIl4xLjIuMiIsCi0gICAgICAgICJkbHYiOiAiXjEuMS4zIiwKLSAgICAgICAgImZhc3QtZ2xvYiI6ICJeMy4yLjEyIiwKLSAgICAgICAgImdsb2ItcGFyZW50IjogIl42LjAuMiIsCi0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMyIsCi0gICAgICAgICJqaXRpIjogIl4xLjE4LjIiLAotICAgICAgICAibGlsY29uZmlnIjogIl4yLjEuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNSIsCi0gICAgICAgICJub3JtYWxpemUtcGF0aCI6ICJeMy4wLjAiLAotICAgICAgICAib2JqZWN0LWhhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNC4yMyIsCi0gICAgICAgICJwb3N0Y3NzLWltcG9ydCI6ICJeMTUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtanMiOiAiXjQuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtbG9hZC1jb25maWciOiAiXjQuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtbmVzdGVkIjogIl42LjAuMSIsCi0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjExIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIsCi0gICAgICAgICJyZXNvbHZlIjogIl4xLjIyLjIiLAotICAgICAgICAic3VjcmFzZSI6ICJeMy4zMi4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ0YWlsd2luZCI6ICJsaWIvY2xpLmpzIiwKLSAgICAgICAgInRhaWx3aW5kY3NzIjogImxpYi9jbGkuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90YXBhYmxlIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RhcGFibGUvLS90YXBhYmxlLTIuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HTnpRdlFUT0lQNlJ5VGZFMlF4YjhaVmxObXcwbjg4dnAxc3p3V1JpbVAwMm1uVHN4M1d0bjVxUmRxWTl3MlhkdUZOVWd2T3doTm5Rc2p3Q3Ara3FhUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RlbXAtZGlyIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RlbXAtZGlyLy0vdGVtcC1kaXItMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFvQkFuaVFtbXd0Y0twLzdCenNIOEN4enY4T0w3MzZwN3YxaWhHYjVlOURKOWtUd0dXSHJRclZCNStsZlZEemZHcmRSelhjaCtpZzdMSGFZMUpUT3JnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGVtcHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGVtcHkvLS90ZW1weS0wLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRzEzdnRNWVBUL0o4QTRYMlNqZHRCVHBoWmxycDFnS3Y2aFppT2p3MTRSQ1dnNkdiSHVRQkd0amx4NzV4TGJZVi93RWMwRDdHNUs0cnhLUC9jWGs4Qnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJ0ZW1wLWRpciI6ICJeMi4wLjAiLAotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjE2LjAiLAotICAgICAgICAidW5pcXVlLXN0cmluZyI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGVtcHkvbm9kZV9tb2R1bGVzL3R5cGUtZmVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuMTYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZWFCekc2TXhOekVuOWtpd3Z0cmU5MGNYYU5Ma21hZE1XYTF6UU1zM1hPUkNYTmJzSC9PZXd3YnhDNWlhOWRDeEl4blRBc1N4WEphYS9wNXk4RGx2Smc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90ZXJtaW5hbC1saW5rIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rlcm1pbmFsLWxpbmsvLS90ZXJtaW5hbC1saW5rLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11bjBGbWlSVVFOcjVQSnF5OWtQN2M0MEY1Qk9mcEdsWVRyeG9uRENoRVpCN3B6WnhSTnAvYnQreW1peTkvbnB3WHlhOUtIOTluSi9HWEZJaVVrWUdGUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgInN1cHBvcnRzLWh5cGVybGlua3MiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlRTms1S3dERitCdnorUHlPYmttU1lqSTVrc1ZVWXRqVzdBVTIycjJOS2NmTEpjWHA5NmhrRFdVMytYbmRPc1ViK0FROVFoZnpmQ1QyTytDTldUNVR3PT0iLAorICAgICAgImRldiI6IHRydWUKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvdGVyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNS4xOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXJzZXIvLS90ZXJzZXItNS4xOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wZEw3NTdJZzVhMEkrb3dBNDJsNnRJdUV5Y1J1TTdGUFk0bjYyaDQ0bVJMUmZuT3hKa2tPSGQ2aTg5ZE9wd1pscEY2SlhCd2FBSEY2eVd6RnJ0K1F5QT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjUuMzcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGVyc2VyLy0vdGVyc2VyLTUuMzcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQjh3UlJrbXJlNEVSdWNMTS91WHg0TU9WNWNibk9sVkFxVXN0KzEraUxLUEkwZE9nRk8yOGY4NHB0b1F0OUhFSTUzN1BNemZZYS9kK0dFUEtUUlhtWUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiQGpyaWRnZXdlbGwvc291cmNlLW1hcCI6ICJeMC4zLjMiLAogICAgICAgICAiYWNvcm4iOiAiXjguOC4yIiwKQEAgLTE4NTY3LDEwMyArMzMxMSwxMTQgQEAKICAgICAgICAgIm5vZGUiOiAiPj0xMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGVyc2VyLXdlYnBhY2stcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiNS4zLjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RlcnNlci13ZWJwYWNrLXBsdWdpbi8tL3RlcnNlci13ZWJwYWNrLXBsdWdpbi01LjMuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnVYc3FFMDdFY2dnVFdRalhVaitBb3QvT01jRDBiTUtHZ0Y2M2Y3VXhZY3U1L0FKRjUzYUlwSzFZb1A1eFI5bDZzL0h5MmIrdDFBTTBiTE5QUnVod0E9PSIsCisgICAgIm5vZGVfbW9kdWxlcy90ZXJzZXIvbm9kZV9tb2R1bGVzL2NvbW1hbmRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTIuMjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3BWa21NOHZGMnZRVWtqMkx2Wm1EMzVKeGVKT0xDd0o5Y1VrdWd5azJudWhidjMrbUp2cExZWXQrMCtVU014RStvaitleS9sSkVuaFp3NzV4L09NY1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAicGVlciI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueWJlbmNoIjogeworICAgICAgInZlcnNpb24iOiAiMi45LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnliZW5jaC8tL3RpbnliZW5jaC0yLjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMCtEVXZxV01WYWxMbWhhNmxyNGtEOGlBTUsxSHpWMC9hS25DdFdiOXY5NjQxVG5QL01GYjdQYzJieG94UWpUWEFFcnJ5WFZnVU9mdjJZcU5sbHFHZWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueWV4ZWMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGlueWV4ZWMvLS90aW55ZXhlYy0xLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVktTL1phUWhoa0tGTUFObUFPaGhYVm9JZkJYYmxReEdYMW15Q1EyZmFRcmZtb2JNZnRYZUpQY1pHcDBnUzA3b2N2R0pXRExaR3lPWkRhZERCcVlJSmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueWdsb2JieSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4xNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGlueWdsb2JieS8tL3RpbnlnbG9iYnktMC4yLjE1LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qMlpxNE55UVlHNVhNU1Q0Y2JzMDJBazhpSlVkeFJNMFhJNVF5eFh1Wk96S09JTm1XdXJwM3NtWHUzeTV3RGNKcnB0d3BTamdYSHpJUXhSMG9tWGxqUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTciLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI3LjQuNSIsCi0gICAgICAgICJzY2hlbWEtdXRpbHMiOiAiXjMuMS4xIiwKLSAgICAgICAgInNlcmlhbGl6ZS1qYXZhc2NyaXB0IjogIl42LjAuMSIsCi0gICAgICAgICJ0ZXJzZXIiOiAiXjUuMTYuOCIKKyAgICAgICAgImZkaXIiOiAiXjYuNS4wIiwKKyAgICAgICAgInBpY29tYXRjaCI6ICJeNC4wLjMiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjEzLjAiCisgICAgICAgICJub2RlIjogIj49MTIuMC4wIgogICAgICAgfSwKICAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vd2VicGFjayIKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvU3VwZXJjaHVwdURldiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueWdsb2JieS9ub2RlX21vZHVsZXMvZmRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mZGlyLy0vZmRpci02LjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEliWXRaYnVjT3MwQlJHcVBKa3NoSlVZZEwrU0RIN2RWTThnankrRVJwM1dBVWpMRUZKRSswMmthbnlIdHdqV09ud3JLWUJpd0FtTTBwNGtMSkFuWGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMi4wLjAiCiAgICAgICB9LAogICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3ZWJwYWNrIjogIl41LjEuMCIKKyAgICAgICAgInBpY29tYXRjaCI6ICJeMyB8fCBeNCIKICAgICAgIH0sCiAgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAc3djL2NvcmUiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiZXNidWlsZCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJ1Z2xpZnktanMiOiB7CisgICAgICAgICJwaWNvbWF0Y2giOiB7CiAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQogICAgICAgICB9CiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Rlc3QtZXhjbHVkZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXN0LWV4Y2x1ZGUvLS90ZXN0LWV4Y2x1ZGUtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNBR1dQSXlPSFU2emxtZzg4andtN1ZSeVhuTU43aVY2OE9HQWJZRGsvTWgveEMvcHpWUGxRdFk2bmdvSUgvNS90Y2l1aEdmdkVTVThHckhyY3hENTZ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6ICJeMC4xLjIiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjQiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjAuNCIKKyAgICAibm9kZV9tb2R1bGVzL3RpbnlnbG9iYnkvbm9kZV9tb2R1bGVzL3BpY29tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvbWF0Y2gvLS9waWNvbWF0Y2gtNC4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFQODhCQUt2TWFtLzNOeEg2dmoybzIxUjZNanhaVUFkNm5sd0FTL3BuR3ZOOUlWTG9jTEh4R1lJekZoZzZmVVErNXRoNlA0ZHY0ZVc5algzRFNJajdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCiAgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RpbnlyYWluYm93IjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnlyYWluYm93Ly0vdGlueXJhaW5ib3ctMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJmK0lMbUJncmV0VXJkSnh6WE0wU2dYTFozWGZpYVV1T2ovSUtRSHVUWGlwKzA1WG4rdXlFWWRWZzBrWURpcFRCY0xyQ1Z5VXpBUHo3UW1BcmIwbW13PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RleHQtdGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGV4dC10YWJsZS8tL3RleHQtdGFibGUtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU4rOFVpc0FYREdrOFBGWFA0SEF6VlI5bmJmbVZKM3pZTEFXaVRJb3FDNXY1aXNpbmhyK3I1dWFPOCs3cjNCTWZ1Tkl1ZklzQTdSZHBWZ2FjQzJjU3B3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RoZW5pZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhlbmlmeS8tL3RoZW5pZnktMy4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJWWlNJVjVJRzEwSGszZW5vdHJodnowVDllbTZjeUhCTGtIL1lBWnVLcWQ4aFJrS2hTZkNHSWNQMktVWTBFUHhuZHpBTkJtTmxseldQd2FrK2JoZVN3PT0iLAorICAgICJub2RlX21vZHVsZXMvdGxkdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjEuODYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RsZHRzLy0vdGxkdHMtNi4xLjg2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XTWkvT1EyYXhWVGYveWtxQ1FnWGlJY3QrbVNRREZkSDJma3doUHdnRXd2SjFrU3paUmlpbmIwekYyWGI4dTQrT3FQQ2hteUk2TUV1NEVlek5KeitGUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnktcHJvbWlzZSI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RoZW5pZnktYWxsIjogewotICAgICAgInZlcnNpb24iOiAiMS42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RoZW5pZnktYWxsLy0vdGhlbmlmeS1hbGwtMS42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJOeFFIL3FJOC90M3RoWEpEd2NzdFVPNHplcW82NCtVeS8rc05WUkJ4NFhuMk9YK09aOW9QK2lKbk5GcXBsRnJhMlpVVmVLQ1NhMm9WV2kzVDR1Vm1BPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRoZW5pZnkiOiAiPj0gMy4xLjAgPCA0IgorICAgICAgICAidGxkdHMtY29yZSI6ICJeNi4xLjg2IgogICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOCIKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ0bGR0cyI6ICJiaW4vY2xpLmpzIgogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90aHJvYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhyb2F0Ly0vdGhyb2F0LTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XS2V4TW9KajN2RXVLMHlGRWFwajh5NjRWMEE2eGN1UHVLOUd0MWQwUitkekNTSmMwbEhxUXl0QWJTQjRjREFLMGRXaDRUMEUyRVRrb0xFMldaNDFPUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90aHVua3kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGh1bmt5Ly0vdGh1bmt5LTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lSFk3bkJmdGdUaEJxT3lIR1ZOK2w4Z0YwQnVjUDA5Zk1vMG9PL0xiMHcxT0Y4MGRKditsRFZwWEc2MFdNUXZrY3hBa055YktzckVJRTNadEtHbVByQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90bXBsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RtcGwvLS90bXBsLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZjB1T0VBUXdJcUd1V1cyTVZ6WWc4ZlYvUU5uYy9JcHVKTkc4MzdyTHVjekFhTFZIc2xXSFpRajRJR2lFbDVIczNra2Jod0w5QWI3SHJzbXVqK1Ntdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90by1mYXN0LXByb3BlcnRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tZmFzdC1wcm9wZXJ0aWVzLy0vdG8tZmFzdC1wcm9wZXJ0aWVzLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vT2FLSzB4WXJzM0RteFJZcUwveURjK0Z4RlVWWWhEbFhNaFJtdjN6OTE1dzJIRjF0bk4xb21CMzU0ajhWVUdPL2hiUnp5RDZZM3NBN3Y3R1MvY2VvZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9CisgICAgIm5vZGVfbW9kdWxlcy90bGR0cy1jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiNi4xLjg2IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90bGR0cy1jb3JlLy0vdGxkdHMtY29yZS02LjEuODYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUplNnA3cGtrK0tNek12MlhYS21BRTNNY21vbE9RRmR4a0t3MFI4RVlOcjdzRUxXNDZKcW5OZVRYOHliUGlRZ3ZnMXltQ29GOExYczVmekZhWnZKUFRBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3RvLXJlZ2V4LXJhbmdlIjogewogICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAogICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvLXJlZ2V4LXJhbmdlLy0vdG8tcmVnZXgtcmFuZ2UtNS4wLjEudGd6IiwKICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTY1UDdpejZYNXlFcjFjd2NndlF4YmJJdzdVazNnT3k1ZElkdFo0ckR2ZUxxaHJkSlArTGkvSHg2dHlLME5FYisyR0N5bmVDTUppR3FyQURDU05rOHNRPT0iLAorICAgICAgImRldiI6IHRydWUsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewogICAgICAgICAiaXMtbnVtYmVyIjogIl43LjAuMCIKICAgICAgIH0sCkBAIC0xODY3MSw0NSArMzQyNiwzMCBAQAogICAgICAgICAibm9kZSI6ICI+PTguMCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvdG9pZGVudGlmaWVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvaWRlbnRpZmllci8tL3RvaWRlbnRpZmllci0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzVzU1BLRWtnL0RJUU5tSDQzVjAvdWVyTHJwelZlZGtVaDh0R052YWVYcGZwdXdqS2VubFNveC8yTy9CVGxaVXRFZStKRzdzNVloRXo2MDhQbEFIUkE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjYiCi0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b3VnaC1jb29raWUvLS90b3VnaC1jb29raWUtNC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFYL3k1cFZSa2ZSbmZtdVgrT2RiU2RYdlBlNmllS1gvRzJzN2U5OGY0cG9KSG5xSDMyODFnRFBtL21ldG02RS9XUmFtZng3V0M0SFVxa1dIZlFIcHJ3PT0iLAorICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvdWdoLWNvb2tpZS8tL3RvdWdoLWNvb2tpZS01LjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRlZEWWR4dG5qMEc2UW0vRGhOUFNiOEp1NTlVTGN1cDN0dUp4a0ZiNUs4QnYycFVYSUxiZjB4WldVOFBYOE92MTlPWGxqYlV5dmVPRndSTXdrWHpPK0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHNsIjogIl4xLjEuMzMiLAotICAgICAgICAicHVueWNvZGUiOiAiXjIuMS4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMC4yLjAiLAotICAgICAgICAidXJsLXBhcnNlIjogIl4xLjUuMyIKKyAgICAgICAgInRsZHRzIjogIl42LjEuMzIiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdG91Z2gtY29va2llL25vZGVfbW9kdWxlcy91bml2ZXJzYWxpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pdmVyc2FsaWZ5Ly0vdW5pdmVyc2FsaWZ5LTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DSjFRZ0ttTmczQ3d2QXYva09GbXRuRU4wNWYwRC9jbjlRbnRnTk9RbFFGOWRndlZUSGozdCs4SlBkanFhd0NIazdWL0tBK2ZiVXF6WjlYV2hjcVBVZz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA0LjAuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xNiIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvdHI0NiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cjQ2Ly0vdHI0Ni0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMTVJaDdwaGZjZFA1WXhxaUIraUR0TG9hVHo0TmQzNStJaUF2MGtRNUZOS0h6WGdkV3FQb1RJcUVEREptWGNlUXQ0SlprNmxWUFQ4bG5EbFBwR0RwcHc9PSIsCisgICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHI0Ni8tL3RyNDYtNS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhkRjVaZ2pUcWdBbnRLa2tsWXcwUjAzTUcyeC9iU3pUdGt4bUlSdy9zVE5WOFlYc0NKMXRmTEFYMjNsaHhoSEpsRWYzQ1JDT0NHR1d3M3ZJM0dhU1B3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAogICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInB1bnljb2RlIjogIl4yLjEuMSIKKyAgICAgICAgInB1bnljb2RlIjogIl4yLjMuMSIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgICAibm9kZSI6ICI+PTE4IgogICAgICAgfQogICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy90cmltLXJlcGVhdGVkIjogewpAQCAtMTg3MzMsMzg2ICszNDczLDQxIEBACiAgICAgICAgICJub2RlIjogIj49MC44LjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RyeWVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RyeWVyLy0vdHJ5ZXItMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWMzemF5Yjgva1dXcHljV1lnODdQNzFFMVMxWkw2YjZJSnhmYjVmdnNVZ3NmMFMyTVZHYURoRFhYakRNcGRDcGZXWHFwdGMrNG1Yd21peTF5cFhxUkFBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzLWludGVyZmFjZS1jaGVja2VyIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cy1pbnRlcmZhY2UtY2hlY2tlci8tL3RzLWludGVyZmFjZS1jaGVja2VyLTAuMS4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWS9hcnZibitycnozSkNLbDlDNGtWTmZUZlNtMi9tRXA1RlN6NUVzWlNBTkdQU2xRcnBSSTVNNFBLRittSm5FNTJqT085MFBuUFNjM1VyM2JUUXcwZ0E9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNjb25maWctcGF0aHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjE0LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzY29uZmlnLXBhdGhzLy0vdHNjb25maWctcGF0aHMtMy4xNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vLzlpWGdDWWM1TC9KeENIUGUzSHZoOFEvMnhtNVorcDE4UEVTQlU2RmYzMzY5NVFuQ0hCRWpjeXRZMnExOXVhN01ibC9EYXZ0Qk9McStvRzBSQ0wrZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvanNvbjUiOiAiXjAuMC4yOSIsCi0gICAgICAgICJqc29uNSI6ICJeMS4wLjIiLAotICAgICAgICAibWluaW1pc3QiOiAiXjEuMi42IiwKLSAgICAgICAgInN0cmlwLWJvbSI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzY29uZmlnLXBhdGhzL25vZGVfbW9kdWxlcy9qc29uNSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uNS8tL2pzb241LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nMU1XTUxCaXo4RktpMWU0dzBVeVZMM3craUpjZVdBRkJBYUJubkdLT3BOYTVmOFRMa3RrYnJlMStzNm9JQ3lkV0FtK0hSVUdUbUkrLy94djJodlhZQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW5pbWlzdCI6ICJeMS4yLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImpzb241IjogImxpYi9jbGkuanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzY29uZmlnLXBhdGhzL25vZGVfbW9kdWxlcy9zdHJpcC1ib20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYm9tLy0vc3RyaXAtYm9tLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YXZBTVJYT2dCVk5GNm55RUVtTDNEQksxOWlScERjb0l3Vytzd1ErQ2JHaXU3bGp1NnQrSmtsQTFNSHdlb1d0YWRndDRJU1ZVc1hMeURxMzRkZGN3QT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGliIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGliLy0vdHNsaWItMi41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1TeGxKSndsM0JNRVFDVU5ueFhCVTlqUDRKQmt0Y0VHaFVSY1BSNlZRVmxuUDBGZERFc0lhejBDMzVkWE5HTHlSZnJBVE5vZkYwRjVwMktQeFFnQit3PT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpbnQvLS90c2xpbnQtNi4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUliUjRua1Q5NkVRT3ZLRTJQVy9kakd6OGlHTmVKNHJGMm1CZmlZYVIvbnZVV1lLSmhMd2ltb0pLZ2pJRkVJRGliQnRPZXZqN0JxQ1JMNG9IZVdXVUNnPT0iLAotICAgICAgImRlcHJlY2F0ZWQiOiAiVFNMaW50IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgRVNMaW50LiBQbGVhc2Ugc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYWxhbnRpci90c2xpbnQvaXNzdWVzLzQ1MzQgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjAuMCIsCi0gICAgICAgICJidWlsdGluLW1vZHVsZXMiOiAiXjEuMS4xIiwKLSAgICAgICAgImNoYWxrIjogIl4yLjMuMCIsCi0gICAgICAgICJjb21tYW5kZXIiOiAiXjIuMTIuMSIsCi0gICAgICAgICJkaWZmIjogIl40LjAuMSIsCi0gICAgICAgICJnbG9iIjogIl43LjEuMSIsCi0gICAgICAgICJqcy15YW1sIjogIl4zLjEzLjEiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjAuNCIsCi0gICAgICAgICJta2RpcnAiOiAiXjAuNS4zIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMy4yIiwKLSAgICAgICAgInNlbXZlciI6ICJeNS4zLjAiLAotICAgICAgICAidHNsaWIiOiAiXjEuMTMuMCIsCi0gICAgICAgICJ0c3V0aWxzIjogIl4yLjI5LjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInRzbGludCI6ICJiaW4vdHNsaW50IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuOC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTIuMy4wLWRldiB8fCA+PTIuNC4wLWRldiB8fCA+PTIuNS4wLWRldiB8fCA+PTIuNi4wLWRldiB8fCA+PTIuNy4wLWRldiB8fCA+PTIuOC4wLWRldiB8fCA+PTIuOS4wLWRldiB8fCA+PTMuMC4wLWRldiB8fCA+PSAzLjEuMC1kZXYgfHwgPj0gMy4yLjAtZGV2IHx8ID49IDQuMC4wLWRldiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50LWNvbmZpZy1wcmV0dGllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHNsaW50LWNvbmZpZy1wcmV0dGllci8tL3RzbGludC1jb25maWctcHJldHRpZXItMS4xOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14UHc5UGdOUExHM2lLUnhtSzdEV3IrRWEvU3pydmZIdGpGdDVMQmw2MWdrMlVCRy9EQjlrQ1hSanYreHlJVTFyVXRuYXlMZU1VVkpCY01YOFoxN25EZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInRzbGludC1jb25maWctcHJldHRpZXItY2hlY2siOiAiYmluL2NoZWNrLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMy4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMS45LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9jaGFsayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTIuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl4zLjIuMSIsCi0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjUiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjUuMy4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvY29sb3ItY29udmVydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0xLjkuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWZBVXRkK3ZGZEF0RlFjQzhDQ3lZdDFmWVd4U3FBaUsyY1NENnpEQjhOM2Nwc0VCQXZSeHA5ek9HZzZHL1NISEpZQVQ4OC9hei9JdURHQUxzTlZiR2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb2xvci1uYW1lIjogIjEuMS4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcyZlNlbmhNdzJIWk1UVkhlQ0E5S0NtcEVJYnpXaVFzak4rQkhjQmJTOXZyMW10dCt2SmpQZGtzSUJOVW1LQVc4VEZVRFBKSzVTVVUzUWhFOU5FWER3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YlJvckI1RlVRV3ZsYTE2VThSL3FnYUZJeWEycUd6d0RyTm1DWnVZS3JiZFNVTUc2STFaQ0dRUmVma1JWaHVPa0lHVm5lN0JRMzVEU2ZvMXF2SnFGZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0tKZjErY2VRQnI0U01rdlFuQkRORHRmNFRYcFZoVkdhdGV1MHQ5MThibDMwRm5iRTJtNHZOTFgrVldlL2RwamxiK0h1Z0dZelc3dVFYSDk4SFBFWXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNS43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjcuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0J6bm5ROUtqSnFVNjdCNTJSTUM2NUNNYXJLMjYwMFdGbmJrY2Fpd1dxM3h5LzVoYUZKbHNoZ25wam92TVZKK0hmZjQ5ZDhHRW4wYjg3QzVwRFExMGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlciIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL3RzbGliIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpYi8tL3RzbGliLTEuMTQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWG5pMzVOS3pqZ01yd2V2eXNIVENBcnRMRHBQdnllOHpWLzBFNEV5WW40M1A3LzdxdlF3UGg5QkdrSGV3Yk11bFZudGJpZ21jVDdyZFgzQk5vOXdSSmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL3RzdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjI5LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzdXRpbHMvLS90c3V0aWxzLTIuMjkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzVKVkhDSUp3emZJU2FYcFhFMXF2TmFsY2E1SndvYjZGakk0QW9QbHFNdXNKNmZ0RkU3SWtrRm9NaFZMUmdLKzRLeDNna3piOFVaSzV0NXlUVHZFbUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0c2xpYiI6ICJeMS44LjEiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49Mi4xLjAgfHwgPj0yLjEuMC1kZXYgfHwgPj0yLjIuMC1kZXYgfHwgPj0yLjMuMC1kZXYgfHwgPj0yLjQuMC1kZXYgfHwgPj0yLjUuMC1kZXYgfHwgPj0yLjYuMC1kZXYgfHwgPj0yLjcuMC1kZXYgfHwgPj0yLjguMC1kZXYgfHwgPj0yLjkuMC1kZXYgfHwgPj0gMy4wLjAtZGV2IHx8ID49IDMuMS4wLWRldiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHN1dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHN1dGlscy8tL3RzdXRpbHMtMy4yMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tSEtLM2lVWEwrM1VGNnhMNWswUEVoS1JVQktQQkN2LytSa0VPcGpSV3h4eDI3S0tSQm1tQTYwQTlwZ09Vdk1pOEdLaFJNUEVtakJSUHpzMlc3TzFPQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0c2xpYiI6ICJeMS44LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49Mi44LjAgfHwgPj0gMy4yLjAtZGV2IHx8ID49IDMuMy4wLWRldiB8fCA+PSAzLjQuMC1kZXYgfHwgPj0gMy41LjAtZGV2IHx8ID49IDMuNi4wLWRldiB8fCA+PSAzLjYuMC1iZXRhIHx8ID49IDMuNy4wLWRldiB8fCA+PSAzLjcuMC1iZXRhIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c3V0aWxzL25vZGVfbW9kdWxlcy90c2xpYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHNsaWIvLS90c2xpYi0xLjE0LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhuaTM1Tkt6amdNcndldnlzSFRDQXJ0TERwUHZ5ZTh6Vi8wRTRFeVluNDNQNy83cXZRd1BoOUJHa0hld2JNdWxWbnRiaWdtY1Q3cmRYM0JObzl3UkpnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGUtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1jaGVjay8tL3R5cGUtY2hlY2stMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhsZVVvYzl1d0dYcWpXd1hhVVRaQW16TWNGWjU4NThRQTJ2dngxVXI1eEljaXhYSVArOExuRkRnUnBsVTMwdXM2dGVxZGxza0ZmdSthZTRLNzlPb2V3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1kZXRlY3QvLS90eXBlLWRldGVjdC00LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGZyL21JSDFkbE8reDdUbGNNeStiSURxS1Bzdy83MHRWeWVIVzc4N2dvUWpobXFhWmUxMHV3THVqdWJLOXE5TGc2RmlobzFLVUtEWXowWjdrN2c1L2c9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIxLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC0wLjIxLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQwcnpCcTg3bTNmVmNkdUhEVUZoS215eVgrOWVvNldRalp2ZjUxRWEvTTBRNytUMzc0SnAxYVVpeVVsMEdLeHA4TS9PRVRWSFNEdm1reVBndlgrWDJ3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZS1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4xOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1pcy8tL3R5cGUtaXMtMS42LjE4LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ua1JLcjlzVVR4RUg4TWRmdUNTUDdWaXpKeXpSTk1qajJKMmRvMkpyM0t5bTU5OEpWZEVrc3V6UFFDbmxGUFc0a3k5UStpQSttYTlCR20wNlhRQnk4Zz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtZWRpYS10eXBlciI6ICIwLjMuMCIsCi0gICAgICAgICJtaW1lLXR5cGVzIjogIn4yLjEuMjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZWQtYXJyYXktbGVuZ3RoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVkLWFycmF5LWxlbmd0aC8tL3R5cGVkLWFycmF5LWxlbmd0aC0xLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS2paeXBHcStJL0g3SEk1SGxPb0dIa1dVVUdxK1EwVFBoUXVyTGJ5clZydm5LVEJnekxoSUo3ajZKL1hUUU9pMGQxUmp5WjB3ZGFzOGJLczJwMHgzTmc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJmb3ItZWFjaCI6ICJeMC4zLjMiLAotICAgICAgICAiaXMtdHlwZWQtYXJyYXkiOiAiXjEuMS45IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGVkYXJyYXktdG8tYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVkYXJyYXktdG8tYnVmZmVyLy0vdHlwZWRhcnJheS10by1idWZmZXItMy4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpkdThYTU5FRGVwS0tSK1hZT1hBVlB0V3VpMGx5ME50b2hVc2N3K1VtYUhpQVdUOGhyVjFyci8vSDZWKzBEdkozT1ExOVM5NzlNMGxhTGZYOHJtODJRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLXR5cGVkYXJyYXkiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCiAgICAgIm5vZGVfbW9kdWxlcy90eXBlc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiNC45LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVzY3JpcHQvLS90eXBlc2NyaXB0LTQuOS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xRlhrOUUySG0rUXpaUTd6K01jSmlITDROVzFGMkV6TXU5TnE5aTN6QWFHcWliYWZxWXdDVlU2V3lXQXV5UVJSek9seG91OHhaU3lYTEVOOG9LajI0Zz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjUuOS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlc2NyaXB0Ly0vdHlwZXNjcmlwdC01LjkuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItamwxdlp6UERpbkxyOWVVdDNKL3Q3VjZGZ05FdzlRanZCUGR5c3o5S2ZRREQ0MWZRckMyWTR2S1FkaWFVcEZUNGJYbGIxUkhoTHBwOHd0bTZNNVRnU3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAogICAgICAgImJpbiI6IHsKICAgICAgICAgInRzYyI6ICJiaW4vdHNjIiwKICAgICAgICAgInRzc2VydmVyIjogImJpbi90c3NlcnZlciIKICAgICAgIH0sCiAgICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5ib3gtcHJpbWl0aXZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuYm94LXByaW1pdGl2ZS8tL3VuYm94LXByaW1pdGl2ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNjFwUGxDRDloNTFWb3JleUowQlJlaWRlTTNNREtNS25oNitWOUwwODMzMWlwcTZROE9GWFpZaXFQNm4vdGJIeDRzNUk5dVJoY3llNkJyYmtpemtCRHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJoYXMtYmlnaW50cyI6ICJeMS4wLjIiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIiwKLSAgICAgICAgIndoaWNoLWJveGVkLXByaW1pdGl2ZSI6ICJeMS4wLjIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4xNyIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvdW5kaWNpLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yNS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmRpY2ktdHlwZXMvLS91bmRpY2ktdHlwZXMtNS4yNS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HYTFqZll3Um43K2NQOXY4YXV2RVhOMXJYM3NXcWxheWQ0SFA3T0trNG1aV3lsRW11M0t6WERVR3JRVU42T2w3cW8xZ1B2QjJlNWdYNnVkbnlFUGdkQT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bmljb2RlLWNhbm9uaWNhbC1wcm9wZXJ0eS1uYW1lcy1lY21hc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaWNvZGUtY2Fub25pY2FsLXByb3BlcnR5LW5hbWVzLWVjbWFzY3JpcHQvLS91bmljb2RlLWNhbm9uaWNhbC1wcm9wZXJ0eS1uYW1lcy1lY21hc2NyaXB0LTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15WTVQcERsZlZJVTUreS9CU0N4QUpSQklTMVpjMmRERzNVanErc1IwVStKalVldlcySmhvY09GK3NvUk9ZRFNhQWV6T3pPS3V5eWl4aEQ2bUJrblNtUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VuaWNvZGUtbWF0Y2gtcHJvcGVydHktZWNtYXNjcmlwdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmljb2RlLW1hdGNoLXByb3BlcnR5LWVjbWFzY3JpcHQvLS91bmljb2RlLW1hdGNoLXByb3BlcnR5LWVjbWFzY3JpcHQtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVrYVpDcmJwNW1tYno1dWxCa0RrYlkwU3NQT2pLcVZTMzVWcEw5dWxNUGZTbDBKMFhzbSs5RXZwaHY5Q29JWkZ3cmU3YUpvYTk0QVk2c2VNS0dWTjVRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInVuaWNvZGUtY2Fub25pY2FsLXByb3BlcnR5LW5hbWVzLWVjbWFzY3JpcHQiOiAiXjIuMC4wIiwKLSAgICAgICAgInVuaWNvZGUtcHJvcGVydHktYWxpYXNlcy1lY21hc2NyaXB0IjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bmljb2RlLW1hdGNoLXByb3BlcnR5LXZhbHVlLWVjbWFzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pY29kZS1tYXRjaC1wcm9wZXJ0eS12YWx1ZS1lY21hc2NyaXB0Ly0vdW5pY29kZS1tYXRjaC1wcm9wZXJ0eS12YWx1ZS1lY21hc2NyaXB0LTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xeGtqUXQ2cWpnL21Zc2NZTUMwWEtSbjNSaDB3RlBsZnhCMHhrdDlDZnlUdnBYMVJhMCtyQW1kWDJReUFvYnB0U0V2dXk0UnRwUFJ1aTZYa1YrOHdqQT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VuaWNvZGUtcHJvcGVydHktYWxpYXNlcy1lY21hc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaWNvZGUtcHJvcGVydHktYWxpYXNlcy1lY21hc2NyaXB0Ly0vdW5pY29kZS1wcm9wZXJ0eS1hbGlhc2VzLWVjbWFzY3JpcHQtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZ0M2ZvVFFJOXFuZStPWm9WUUIvOHg4cmsyazFlVnkxZ1JYaFYzb0ZRNVQ2UjFkcVExeHRpbjNYcVNseDMrQVRCa2xpVGFSL2hIeUpCbStMVlBOTTh3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5pcXVlLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmlxdWUtc3RyaW5nLy0vdW5pcXVlLXN0cmluZy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdU5hZWlyRVB2cFpXU2d6d3NQR3RVMnpWU1Rybi84TDVxL0lleFptSDBlSDZTQTczQ21BQTVVNEd3T1JUeFFBWnM5NVRBWExOcWVMb1BQTk81Z1pmV2c9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3J5cHRvLXJhbmRvbS1zdHJpbmciOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9CisgICAgICAidmVyc2lvbiI6ICI3LjE5LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuZGljaS10eXBlcy8tL3VuZGljaS10eXBlcy03LjE5LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFZVm5WNU9FbTJBVzhjSk1DcGRWMjBDRHlhTjNnMEFqRGxPR2YxT1c0aWFERXg4TXdkdENoVXA0enU0SDBWUDNuRFJGLzhSS1dIK0lQcDl1VzBZR1pnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3VuaXZlcnNhbGlmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bml2ZXJzYWxpZnkvLS91bml2ZXJzYWxpZnktMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhBWnNLcTdZeTExWnUxREUwT3pXanc3bm5MWm1KWllURFpaeUVGSFpkVWhWOEZrSDVNQ2ZvVTFYTWF4WG92cHlXNW5xNXNjUHFxMFpEUDlaeWwwNG9RPT0iLAorICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaXZlcnNhbGlmeS8tL3VuaXZlcnNhbGlmeS0yLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3B0SE5RZ2hJTm5jL3ZUR0lrMFNPRkdGTlh3N0pWcmxSVXRDb25KUmx2YXc2RHVYMHdPNUpla285c1dyTUJoaCtQc1lBWjdvWEFpT25mL1VLb2d5aXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJlbmdpbmVzIjogewogICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VucGlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bnBpcGUvLS91bnBpcGUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBqeTJiWWhTc3Vmd1dsS3dQYytsM2NONyt3dUpsSzZ1ejBZZEpFT2xRRGJsNmpvL1lsUGk0bWI4YWdVa1ZDOEJGN1Y4TnV6ZXlQTnFSa3NBM2h6dEtRPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5xdW90ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bnF1b3RlLy0vdW5xdW90ZS0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdlJDcUZ2NlVoWHBXeFpQeUdEaC9GM1pwTnY4L3FvN3c2aXVmTHBRZzlhS25RNzFxTTRCNUtpSTdNaWE5Q09jakVock85THVlSHBNWWpZenNXSDNPSWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBhdGgvLS91cGF0aC0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYVp3R3BhbUZPNjFnM09sZlQ3T1FDSHFoR25XNDNpZUg5V1plUDdReE4vRy9qUzRqZnFVa1p4b3J5dkpnVlBFY3JsNU5ML2dnSHNTbUxNSHVINjRMaGc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IiwKLSAgICAgICAgInlhcm4iOiAiKiIKLSAgICAgIH0KLSAgICB9LAogICAgICJub2RlX21vZHVsZXMvdXBkYXRlLWJyb3dzZXJzbGlzdC1kYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBkYXRlLWJyb3dzZXJzbGlzdC1kYi8tL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGItMS4wLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kQ3dFRmYwL29UODVNMWZIQmc0RjBqdEx3SnJ1dEdvSFNRWENoN3U0bzJ0MWRyRytjMGE5RmxucXd3NlhVS1NmUU1QcEpCUmpVOGQ0UlhCMDlxdHZhQT09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91cGRhdGUtYnJvd3NlcnNsaXN0LWRiLy0vdXBkYXRlLWJyb3dzZXJzbGlzdC1kYi0xLjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFB5cEFtNXF2bEQ3WE1aQzNCdWplY25hT3h3aHJ0b0ZSK0Rxa2s1QWEvNkRzc2lIMGliS29rZXRhajl3OExQN0JvbnQxclllb1Y1cGx4RDdSVEVQUmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKICAgICAgICJmdW5kaW5nIjogWwogICAgICAgICB7CiAgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLApAQCAtMTkxMjgsOCArMzUyMyw4IEBACiAgICAgICAgIH0KICAgICAgIF0sCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNjYWxhZGUiOiAiXjMuMS4xIiwKLSAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMC4wIgorICAgICAgICAiZXNjYWxhZGUiOiAiXjMuMi4wIiwKKyAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMS4xIgogICAgICAgfSwKICAgICAgICJiaW4iOiB7CiAgICAgICAgICJ1cGRhdGUtYnJvd3NlcnNsaXN0LWRiIjogImNsaS5qcyIKQEAgLTE5MTM4LDM3NiArMzUzMywzNTAgQEAKICAgICAgICAgImJyb3dzZXJzbGlzdCI6ICI+PSA0LjIxLjAiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VyaS1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91cmktanMvLS91cmktanMtNC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdyS1V5eTMzUTF5Yzk4cFExREFtTHR3WDEwOUY3VElmV2xXMVlkbzhXbDFpaTFTZUhpZWVoMEhIZlBlTDJmTVhLNnowczhlY0tzOWZyQ3VMSnZuZEJnPT0iLAorICAgICJub2RlX21vZHVsZXMvdml0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92aXRlLy0vdml0ZS02LjQuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMk4vNTVyNEpESjRnZHJDdkdnSU5NeStISDNpUnBOSXo4SzZTRndWc0ErSmJRU2NMaUMrY2xtQXhCZ3dpU1BnY0c5VTE1UW12cUNHV3pNYnFkYTV6R1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHVueWNvZGUiOiAiXjIuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91cmwtcGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuMTAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VybC1wYXJzZS8tL3VybC1wYXJzZS0xLjUuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVd5cGNmaVJoZmVVUDl2dkYwajZydzBKM2hyV3J3NmladjMrMjJoNmlSTUovOHoxVGo2WGZMUDREc1VpeDVNaE1QblhwaUhEb0t5b1ovYmRDa3dCQ2lRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInF1ZXJ5c3RyaW5naWZ5IjogIl4yLjEuMSIsCi0gICAgICAgICJyZXF1aXJlcy1wb3J0IjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbC1kZXByZWNhdGUvLS91dGlsLWRlcHJlY2F0ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRVBENXExdVh5RnhKcENyTG5DYzFuSG5xM2dPYTZEWkJvY0FJaUkyVGFTQ0E3VkNKMVVKRE1hZ0N6SWtYTnNVWWZEMWRhSy8vTFRFUTh4aUlickh0Y3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdXRpbC5wcm9taXNpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbC5wcm9taXNpZnkvLS91dGlsLnByb21pc2lmeS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzlKcEMvM0hlM2JtMzh6c0x1cFdyeVhIb0VjUzIyWUh0aHVQUVNKZE15NktOcnpJUnpXcWNzSHpEL1dVbnFlNDV3aFZvdTRWSXNQZXczN0RvWFdOckE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS4zIiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjE3LjIiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4xIiwKLSAgICAgICAgIm9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzIjogIl4yLjEuMCIKKyAgICAgICAgImVzYnVpbGQiOiAiXjAuMjUuMCIsCisgICAgICAgICJmZGlyIjogIl42LjQuNCIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4yIiwKKyAgICAgICAgInBvc3Rjc3MiOiAiXjguNS4zIiwKKyAgICAgICAgInJvbGx1cCI6ICJeNC4zNC45IiwKKyAgICAgICAgInRpbnlnbG9iYnkiOiAiXjAuMi4xMyIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAidml0ZSI6ICJiaW4vdml0ZS5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjAuMCB8fCBeMjAuMC4wIHx8ID49MjIuMC4wIgogICAgICAgfSwKICAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy92aXRlP3Nwb25zb3I9MSIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmc2V2ZW50cyI6ICJ+Mi4zLjMiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvbm9kZSI6ICJeMTguMC4wIHx8IF4yMC4wLjAgfHwgPj0yMi4wLjAiLAorICAgICAgICAiaml0aSI6ICI+PTEuMjEuMCIsCisgICAgICAgICJsZXNzIjogIioiLAorICAgICAgICAibGlnaHRuaW5nY3NzIjogIl4xLjIxLjAiLAorICAgICAgICAic2FzcyI6ICIqIiwKKyAgICAgICAgInNhc3MtZW1iZWRkZWQiOiAiKiIsCisgICAgICAgICJzdHlsdXMiOiAiKiIsCisgICAgICAgICJzdWdhcnNzIjogIioiLAorICAgICAgICAidGVyc2VyIjogIl41LjE2LjAiLAorICAgICAgICAidHN4IjogIl40LjguMSIsCisgICAgICAgICJ5YW1sIjogIl4yLjQuMiIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAdHlwZXMvbm9kZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJqaXRpIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImxlc3MiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAibGlnaHRuaW5nY3NzIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInNhc3MiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAic2Fzcy1lbWJlZGRlZCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJzdHlsdXMiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAic3VnYXJzcyI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJ0ZXJzZXIiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAidHN4IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgInlhbWwiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3V0aWxhIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V0aWxhLy0vdXRpbGEtMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVowRGJnRUxTOS9MLzc1d1picm84eEFuVDUwcEJWRlFaK2hVRXVlR0RVNUZONTFZU0NZTStqZHhzZkNpSGp3TlAvNExDREQwaS9ncmFLcGVCbk9YS1JBPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3V0aWxzLW1lcmdlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V0aWxzLW1lcmdlLy0vdXRpbHMtbWVyZ2UtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBNWlR2SWtUMWQrVEZHdkRPcW9kT2NseDBRV2trZ2k2VGRvYThnQzhmZkdBQXF6OXB6UFRaV0F5YmJzSEhvRUQvenRNdGt2L1ZvWVRZeVNoVW44MWhBPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91dWlkIjogewotICAgICAgInZlcnNpb24iOiAiOC4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V1aWQvLS91dWlkLTguMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rTllzMlFlTVd5K0dXRk9FbTl4bm42SENEcDBsN1FCRDdtbDh6TFVtSis5M1E1TkYwTm9jRXJud2tUa1hWRk5pWDMvZnBDNmFmUzhEaGIvZ3o3UjdlZz09IiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ1dWlkIjogImRpc3QvYmluL3V1aWQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Y4LXRvLWlzdGFuYnVsIjogewotICAgICAgInZlcnNpb24iOiAiOS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Y4LXRvLWlzdGFuYnVsLy0vdjgtdG8taXN0YW5idWwtOS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZ6M0dXOXg4RzFnZCtKSUlnUVFReFh1aUp0Q1hlQWpwNlJhUEVQTHY2Mm1IM2lQSFB4VjZXM3JvYnh0Q3pORXJSbzZad1Rteldoc2JOdmp5RUJLektBPT0iLAorICAgICJub2RlX21vZHVsZXMvdml0ZS9ub2RlX21vZHVsZXMvZmRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mZGlyLy0vZmRpci02LjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEliWXRaYnVjT3MwQlJHcVBKa3NoSlVZZEwrU0RIN2RWTThnankrRVJwM1dBVWpMRUZKRSswMmthbnlIdHdqV09ud3JLWUJpd0FtTTBwNGtMSkFuWGc9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAicGljb21hdGNoIjogIl4zIHx8IF40IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgInBpY29tYXRjaCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdml0ZS9ub2RlX21vZHVsZXMvcGljb21hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC00LjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUVA4OEJBS3ZNYW0vM054SDZ2ajJvMjFSNk1qeFpVQWQ2bmx3QVMvcG5Hdk45SVZMb2NMSHhHWUl6RmhnNmZVUSs1dGg2UDRkdjRlVzlqWDNEU0lqN0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvam9uc2NobGlua2VydCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdml0ZS9ub2RlX21vZHVsZXMvcm9sbHVwIjogeworICAgICAgInZlcnNpb24iOiAiNC42MC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yb2xsdXAvLS9yb2xsdXAtNC42MC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15cWp4cnVNR0JRSjJnRzRIdGpadEFmWEFySG9tYXpESG9Gd0ZGbVpabDByN1BkbzdxQ0lYS3FLSFpjOHllb01nekpKK3BPNnBFRUhhK1Y3dXpXbHJBUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTIiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjEiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjYuMCIKKyAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiMS4wLjgiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInJvbGx1cCI6ICJkaXN0L2Jpbi9yb2xsdXAiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTIuMCIKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiLAorICAgICAgICAibnBtIjogIj49OC4wLjAiCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm0tZWFiaSI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm02NCI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtZGFyd2luLWFybTY0IjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0IjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1mcmVlYnNkLWFybTY0IjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1mcmVlYnNkLXg2NCI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtLWdudWVhYmloZiI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtLW11c2xlYWJpaGYiOiAiNC42MC4wIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LWdudSI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtbXVzbCI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtbG9vbmc2NC1nbnUiOiAiNC42MC4wIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWxvb25nNjQtbXVzbCI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtcHBjNjQtZ251IjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1wcGM2NC1tdXNsIjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudSI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtcmlzY3Y2NC1tdXNsIjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1zMzkweC1nbnUiOiAiNC42MC4wIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1nbnUiOiAiNC42MC4wIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1tdXNsIjogIjQuNjAuMCIsCisgICAgICAgICJAcm9sbHVwL3JvbGx1cC1vcGVuYnNkLXg2NCI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtb3Blbmhhcm1vbnktYXJtNjQiOiAiNC42MC4wIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLXdpbjMyLWFybTY0LW1zdmMiOiAiNC42MC4wIiwKKyAgICAgICAgIkByb2xsdXAvcm9sbHVwLXdpbjMyLWlhMzItbXN2YyI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LWdudSI6ICI0LjYwLjAiLAorICAgICAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmMiOiAiNC42MC4wIiwKKyAgICAgICAgImZzZXZlbnRzIjogIn4yLjMuMiIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvdmFyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92YXJ5Ly0vdmFyeS0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQk5HYldMZmQwZVVQYWJoa1hVVm0wajh1dXZSRXlUaDVvdlJhL2R5b3cvQnFBYlpKeUMrNWZVK0l6UU96bUFLellxWVJBSVNvUmhkUXIzZUlaL1BYcWc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93M2MtaHItdGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93M2MtaHItdGltZS8tL3czYy1oci10aW1lLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16OFA1RHZETmpLRG9GSUhLN3E4cjhsYWNrVDZsK2pvL1llM0hPbGU3bDluSUNQOWxmMUNpMjVmeTl2SGQwSk9XZXdrSUZ6WElFaWczVGRLVDdKUTVmUT09IiwKLSAgICAgICJkZXByZWNhdGVkIjogIlVzZSB5b3VyIHBsYXRmb3JtJ3MgbmF0aXZlIHBlcmZvcm1hbmNlLm5vdygpIGFuZCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luLiIsCisgICAgIm5vZGVfbW9kdWxlcy92aXRlc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdml0ZXN0Ly0vdml0ZXN0LTQuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10RnVKcVR4S2I4QXZmeXFNZm5hdlhkemZ5M2gzc1daUld3Zmx1R2JrZVI3bjBIVWV2K0ZtTmdaOFNEclJCVFZyVkNqZ0g1Y0EyMXFHYkNmZk1OdFd2Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2VyLXByb2Nlc3MtaHJ0aW1lIjogIl4xLjAuMCIKKyAgICAgICAgIkB2aXRlc3QvZXhwZWN0IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvbW9ja2VyIjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvcHJldHR5LWZvcm1hdCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3J1bm5lciI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L3NuYXBzaG90IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3Qvc3B5IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvdXRpbHMiOiAiNC4xLjQiLAorICAgICAgICAiZXMtbW9kdWxlLWxleGVyIjogIl4yLjAuMCIsCisgICAgICAgICJleHBlY3QtdHlwZSI6ICJeMS4zLjAiLAorICAgICAgICAibWFnaWMtc3RyaW5nIjogIl4wLjMwLjIxIiwKKyAgICAgICAgIm9idWciOiAiXjIuMS4xIiwKKyAgICAgICAgInBhdGhlIjogIl4yLjAuMyIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4zIiwKKyAgICAgICAgInN0ZC1lbnYiOiAiXjQuMC4wLXJjLjEiLAorICAgICAgICAidGlueWJlbmNoIjogIl4yLjkuMCIsCisgICAgICAgICJ0aW55ZXhlYyI6ICJeMS4wLjIiLAorICAgICAgICAidGlueWdsb2JieSI6ICJeMC4yLjE1IiwKKyAgICAgICAgInRpbnlyYWluYm93IjogIl4zLjEuMCIsCisgICAgICAgICJ2aXRlIjogIl42LjAuMCB8fCBeNy4wLjAgfHwgXjguMC4wIiwKKyAgICAgICAgIndoeS1pcy1ub2RlLXJ1bm5pbmciOiAiXjIuMy4wIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ2aXRlc3QiOiAidml0ZXN0Lm1qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3ZpdGVzdCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlZGdlLXJ1bnRpbWUvdm0iOiAiKiIsCisgICAgICAgICJAb3BlbnRlbGVtZXRyeS9hcGkiOiAiXjEuOS4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIsCisgICAgICAgICJAdml0ZXN0L2Jyb3dzZXItcGxheXdyaWdodCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L2Jyb3dzZXItcHJldmlldyI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L2Jyb3dzZXItd2ViZHJpdmVyaW8iOiAiNC4xLjQiLAorICAgICAgICAiQHZpdGVzdC9jb3ZlcmFnZS1pc3RhbmJ1bCI6ICI0LjEuNCIsCisgICAgICAgICJAdml0ZXN0L2NvdmVyYWdlLXY4IjogIjQuMS40IiwKKyAgICAgICAgIkB2aXRlc3QvdWkiOiAiNC4xLjQiLAorICAgICAgICAiaGFwcHktZG9tIjogIioiLAorICAgICAgICAianNkb20iOiAiKiIsCisgICAgICAgICJ2aXRlIjogIl42LjAuMCB8fCBeNy4wLjAgfHwgXjguMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgIkBlZGdlLXJ1bnRpbWUvdm0iOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiQG9wZW50ZWxlbWV0cnkvYXBpIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB2aXRlc3QvYnJvd3Nlci1wbGF5d3JpZ2h0IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB2aXRlc3QvYnJvd3Nlci1wcmV2aWV3IjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB2aXRlc3QvYnJvd3Nlci13ZWJkcml2ZXJpbyI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAdml0ZXN0L2NvdmVyYWdlLWlzdGFuYnVsIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgIkB2aXRlc3QvY292ZXJhZ2UtdjgiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiQHZpdGVzdC91aSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJoYXBweS1kb20iOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAianNkb20iOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAidml0ZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiBmYWxzZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3ZpdGVzdC9ub2RlX21vZHVsZXMvcGljb21hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC00LjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUVA4OEJBS3ZNYW0vM054SDZ2ajJvMjFSNk1qeFpVQWQ2bmx3QVMvcG5Hdk45SVZMb2NMSHhHWUl6RmhnNmZVUSs1dGg2UDRkdjRlVzlqWDNEU0lqN0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvam9uc2NobGlua2VydCIKICAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMvdzNjLXhtbHNlcmlhbGl6ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdzNjLXhtbHNlcmlhbGl6ZXIvLS93M2MteG1sc2VyaWFsaXplci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNHR6RDBtRjhpU2lNaU5zMzBCaUxPM0VwZkdMWlVUMk1TWC9HK283Wnl3RHpsaVdRM09QdFRaMFBUQzNCM2NhMVVBZjRjSk1IQisyQmY1NkVyaUp1UkE9PSIsCisgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdzNjLXhtbHNlcmlhbGl6ZXIvLS93M2MteG1sc2VyaWFsaXplci01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzhxZ2hsSThOWkhVMWxMUHJwaTIrVXE3YWJoNEdHUHBZQU5sYWx6V3h5V3RlSk9Dc3IvUCtvUEJBNDlUT0x1NUZUWk80ZDNGOU1uV0pmaU1vNEJrbUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieG1sLW5hbWUtdmFsaWRhdG9yIjogIl4zLjAuMCIKKyAgICAgICAgInhtbC1uYW1lLXZhbGlkYXRvciI6ICJeNS4wLjAiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dhbGtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YWxrZXIvLS93YWxrZXItMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRzLzhFOGw1YjdrWTB2bFdMZXdPa0RYTW1QZExjVlY0R21PUUx5eHVTc3dJSnN3ZWVGWnRBc01GN2sxTnN6eitUWUJRcmxZUm16T25yMzk4eTFKZW1RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1ha2VlcnJvciI6ICIxLjAuMTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dhdGNocGFjayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YXRjaHBhY2svLS93YXRjaHBhY2stMi40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxjdm03TUdTVC80ZnVwK2lmeUtpMmhqeUlBd2NkSTRIUmd0dlRwSVV4QlJoQitSRnRVaDhYdERPeFVmY3RWQ25oVmkrUVFqNDlpOTFPeXZ6a0psNmNnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdsb2ItdG8tcmVnZXhwIjogIl4wLjQuMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4xLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2J1ZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YnVmLy0vd2J1Zi0xLjcuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzg0UU9ucjBpY3NiRkdMUzBPM2JJNUZzd3h6UnI4L2dId1drRGxRRnNraFNQcnlRWHZyVE14anhHUDQraVdZb2F1TG9CdmZEcGtyT2F1WiswaVpwREE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWluaW1hbGlzdGljLWFzc2VydCI6ICJeMS4wLjAiCisgICAgICAgICJub2RlIjogIj49MTgiCiAgICAgICB9CiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3dlYi12aXRhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViLXZpdGFscy8tL3dlYi12aXRhbHMtMy41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWY1WW5DSFZHOVk2dUxDZVBENHRZOGJPL0dlMTVOUEVRV3R2bTN0UHpES3lnbG9pcXRiNFNWcVJIQmNySUFxbzJ6dHFYNVh1ZXFEbjk3ekhGMExkVDZ3PT0iCisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViLXZpdGFscy8tL3dlYi12aXRhbHMtNS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWkyejk4YkVtYUNxU0RpSEVEdStnSGwvZG1SNFErVHhGbUczLzEzS2tNTytvOFV4UXpDcVdhRFJDaUxnRWE0MW5sTzRWcFhTSTBBU2ExeFdtTzlzQmxBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIKICAgICB9LAogICAgICJub2RlX21vZHVsZXMvd2ViaWRsLWNvbnZlcnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYmlkbC1jb252ZXJzaW9ucy8tL3dlYmlkbC1jb252ZXJzaW9ucy02LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcUJJdkZMR2lCcExqZndtWUFhSFBYc24raG81eFpuR3Z5R3ZzYXJ5d0dOYzhWeVFKVU1ISjhPQktHR3JQRVIwb2tCZU1EYWFuNG1OQmxnQlJPeHVJOHc9PSIsCisgICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViaWRsLWNvbnZlcnNpb25zLy0vd2ViaWRsLWNvbnZlcnNpb25zLTcuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Wd2RkQnVrRHp1NzFvZmZBUVI5NzV1bkJJR3FmS1pwTSs4Wlg2eVNrOG5ZaFZvbzVDWWFaeXp0M1lCdll0UnRPK2FvR2xxeFBnL0I4N05HVlovZnU2Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKICAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjQiCisgICAgICAgICJub2RlIjogIj49MTIiCiAgICAgICB9CiAgICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dlYnBhY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1Ljg3LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnBhY2svLS93ZWJwYWNrLTUuODcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR091MXROYlE3cDFiREVvRlJzMllQY2Z5R3M4eHE1Mnl5UEJaM20yVkduWEd0VjlNeGpya0FCSG00VjlJYTI4ME9lZnNTTHp2YlZvWGNmTHhqS1kvSXc9PSIsCisgICAgIm5vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLWVuY29kaW5nLy0vd2hhdHdnLWVuY29kaW5nLTMuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02cU40aEpkTXdmWUJ0RTNZQlRUSGhvZXVVckRCUFptYlFheFdBcVNBTFYvTWVFblI1ejF4ZDhVS3VkMlJBa0ZvUGttQitobGkxVFpTbnlpODR4ejF2UT09IiwKKyAgICAgICJkZXByZWNhdGVkIjogIlVzZSBAZXhvZHVzL2J5dGVzIGluc3RlYWQgZm9yIGEgbW9yZSBzcGVjLWNvbmZvcm1hbnQgYW5kIGZhc3RlciBpbXBsZW1lbnRhdGlvbiIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2VzbGludC1zY29wZSI6ICJeMy43LjMiLAotICAgICAgICAiQHR5cGVzL2VzdHJlZSI6ICJeMS4wLjAiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogIl4xLjExLjUiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvd2FzbS1lZGl0IjogIl4xLjExLjUiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvd2FzbS1wYXJzZXIiOiAiXjEuMTEuNSIsCi0gICAgICAgICJhY29ybiI6ICJeOC43LjEiLAotICAgICAgICAiYWNvcm4taW1wb3J0LWFzc2VydGlvbnMiOiAiXjEuOS4wIiwKLSAgICAgICAgImJyb3dzZXJzbGlzdCI6ICJeNC4xNC41IiwKLSAgICAgICAgImNocm9tZS10cmFjZS1ldmVudCI6ICJeMS4wLjIiLAotICAgICAgICAiZW5oYW5jZWQtcmVzb2x2ZSI6ICJeNS4xNS4wIiwKLSAgICAgICAgImVzLW1vZHVsZS1sZXhlciI6ICJeMS4yLjEiLAotICAgICAgICAiZXNsaW50LXNjb3BlIjogIjUuMS4xIiwKLSAgICAgICAgImV2ZW50cyI6ICJeMy4yLjAiLAotICAgICAgICAiZ2xvYi10by1yZWdleHAiOiAiXjAuNC4xIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6ICJeMi4zLjEiLAotICAgICAgICAibG9hZGVyLXJ1bm5lciI6ICJeNC4yLjAiLAotICAgICAgICAibWltZS10eXBlcyI6ICJeMi4xLjI3IiwKLSAgICAgICAgIm5lby1hc3luYyI6ICJeMi42LjIiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl4zLjIuMCIsCi0gICAgICAgICJ0YXBhYmxlIjogIl4yLjEuMSIsCi0gICAgICAgICJ0ZXJzZXItd2VicGFjay1wbHVnaW4iOiAiXjUuMy43IiwKLSAgICAgICAgIndhdGNocGFjayI6ICJeMi40LjAiLAotICAgICAgICAid2VicGFjay1zb3VyY2VzIjogIl4zLjIuMyIKKyAgICAgICAgImljb252LWxpdGUiOiAiMC42LjMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3doYXR3Zy1taW1ldHlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGF0d2ctbWltZXR5cGUvLS93aGF0d2ctbWltZXR5cGUtNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFhS3hoMGVOSWkybUU5cDJ2RWR6ZmFnT0tIQ2NqMXBKNTZFRUhHUU9WeHA4cjkvaXN6TFVVVjd2ODl4OU8xcC9UK05sVE01VzdqVzYrY3o0RnExWVZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwiOiB7CisgICAgICAidmVyc2lvbiI6ICIxNC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy11cmwvLS93aGF0d2ctdXJsLTE0LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGU3MkdkUVp6TlRVQkJDaHNYdWVRVW5QS0RrZy81QTV6cDdwRkR1UUFqNVVGb0VOcGlBQ1Uwd2xDdnpwQUduVGtqKytpaHBLd0t5WWV3bi9YTlViS3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHI0NiI6ICJeNS4xLjAiLAorICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl43LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2h5LWlzLW5vZGUtcnVubmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aHktaXMtbm9kZS1ydW5uaW5nLy0vd2h5LWlzLW5vZGUtcnVubmluZy0yLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaFVybWFXQmRWRGN4dllxbnloMDl6dW5LelJPV2piWlRpTnk4ZEJFamtTN2VoRURRaWJYSjdYdmxtdGJ3dVRjbFVpSXlOK0N5WFFENFZta284Zk5tOHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAic2lnaW5mbyI6ICJeMi4wLjAiLAorICAgICAgICAic3RhY2tiYWNrIjogIjAuMC4yIgogICAgICAgfSwKICAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ3ZWJwYWNrIjogImJpbi93ZWJwYWNrLmpzIgorICAgICAgICAid2h5LWlzLW5vZGUtcnVubmluZyI6ICJjbGkuanMiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAid2VicGFjay1jbGkiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9CisgICAgICAgICJub2RlIjogIj49OCIKICAgICAgIH0KICAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1kZXYtbWlkZGxld2FyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLWRldi1taWRkbGV3YXJlLy0vd2VicGFjay1kZXYtbWlkZGxld2FyZS01LjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGo1Q1lyWTBiWkxCK2VUTyt4L2o2N1BrcnF1aXk3a1dlcE1IbVVNb1BzbWNVYWVFblFKcUZ6SEpPeXhnV2xxNzQ2L3dVdUE2NHA5dGEzNEt5YjAxcEE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3JldHRlIjogIl4yLjAuMTAiLAotICAgICAgICAibWVtZnMiOiAiXjMuNC4zIiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAiXjIuMS4zMSIsCi0gICAgICAgICJyYW5nZS1wYXJzZXIiOiAiXjEuMi4xIiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjEzLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS93ZWJwYWNrIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2VicGFjayI6ICJeNC4wLjAgfHwgXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1taWRkbGV3YXJlL25vZGVfbW9kdWxlcy9hanYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNSdTFrcGNPOXlMdFl4Qkt2cWZUZWg5S3paRXdPM1NUeVgxSFQrNENhRHpDNkhwVEdZaEloUEl6ajlYdUtVN0tZRHduYWVoNWhjT3dqeTFRdUp6QlBBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIiwKLSAgICAgICAgInVyaS1qcyI6ICJeNC4yLjIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Vwb2JlcmV6a2luIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1taWRkbGV3YXJlL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2LWtleXdvcmRzLy0vYWp2LWtleXdvcmRzLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ1MvSk5GQVV5cjV2QXVoazFEV20xQ0J4UkhXOUxiSjJveldlZW1ySXFwYnNxS2pIVnhZUHlpNUdDMHJqWklUNUp4SjN2aXJWVFM4d2s0aS9aK2tydz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogIl44LjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1kZXYtbWlkZGxld2FyZS9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTk04L1A5bjNYalhoSVpuMWxMaGtGYUFDVE9VUlFYaldoVjRCQS9Sbk92OHh2Z3F0cXBBWDlJTzRtUlF4U3gxUmxvNHRxemVxYjBzT2xydWFPeTNkdWc9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1kZXYtbWlkZGxld2FyZS9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuOSIsCi0gICAgICAgICJhanYiOiAiXjguOS4wIiwKLSAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICJhanYta2V5d29yZHMiOiAiXjUuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMi4xMy4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vd2VicGFjayIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyIjogewotICAgICAgInZlcnNpb24iOiAiNC4xNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLWRldi1zZXJ2ZXIvLS93ZWJwYWNrLWRldi1zZXJ2ZXItNC4xNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01aGJBc3QzaDNDM0w4dzZXNFA5Nkw1dmFWMFB4U21KaHhadldLWUlkZ3hPUW04cE5aNWRFT21tU0xCVnBQODVSZWV5UnQ2QVMxUUpOeW8vb0ZGUGVWQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvYm9uam91ciI6ICJeMy41LjkiLAotICAgICAgICAiQHR5cGVzL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2siOiAiXjEuMy41IiwKLSAgICAgICAgIkB0eXBlcy9leHByZXNzIjogIl40LjE3LjEzIiwKLSAgICAgICAgIkB0eXBlcy9zZXJ2ZS1pbmRleCI6ICJeMS45LjEiLAotICAgICAgICAiQHR5cGVzL3NlcnZlLXN0YXRpYyI6ICJeMS4xMy4xMCIsCi0gICAgICAgICJAdHlwZXMvc29ja2pzIjogIl4wLjMuMzMiLAotICAgICAgICAiQHR5cGVzL3dzIjogIl44LjUuNSIsCi0gICAgICAgICJhbnNpLWh0bWwtY29tbXVuaXR5IjogIl4wLjAuOCIsCi0gICAgICAgICJib25qb3VyLXNlcnZpY2UiOiAiXjEuMC4xMSIsCi0gICAgICAgICJjaG9raWRhciI6ICJeMy41LjMiLAotICAgICAgICAiY29sb3JldHRlIjogIl4yLjAuMTAiLAotICAgICAgICAiY29tcHJlc3Npb24iOiAiXjEuNy40IiwKLSAgICAgICAgImNvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2siOiAiXjIuMC4wIiwKLSAgICAgICAgImRlZmF1bHQtZ2F0ZXdheSI6ICJeNi4wLjMiLAotICAgICAgICAiZXhwcmVzcyI6ICJeNC4xNy4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNiIsCi0gICAgICAgICJodG1sLWVudGl0aWVzIjogIl4yLjMuMiIsCi0gICAgICAgICJodHRwLXByb3h5LW1pZGRsZXdhcmUiOiAiXjIuMC4zIiwKLSAgICAgICAgImlwYWRkci5qcyI6ICJeMi4wLjEiLAotICAgICAgICAibGF1bmNoLWVkaXRvciI6ICJeMi42LjAiLAotICAgICAgICAib3BlbiI6ICJeOC4wLjkiLAotICAgICAgICAicC1yZXRyeSI6ICJeNC41LjAiLAotICAgICAgICAicmltcmFmIjogIl4zLjAuMiIsCi0gICAgICAgICJzY2hlbWEtdXRpbHMiOiAiXjQuMC4wIiwKLSAgICAgICAgInNlbGZzaWduZWQiOiAiXjIuMS4xIiwKLSAgICAgICAgInNlcnZlLWluZGV4IjogIl4xLjkuMSIsCi0gICAgICAgICJzb2NranMiOiAiXjAuMy4yNCIsCi0gICAgICAgICJzcGR5IjogIl40LjAuMiIsCi0gICAgICAgICJ3ZWJwYWNrLWRldi1taWRkbGV3YXJlIjogIl41LjMuMSIsCi0gICAgICAgICJ3cyI6ICJeOC4xMy4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiAiYmluL3dlYnBhY2stZGV2LXNlcnZlci5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3ZWJwYWNrIjogIl40LjM3LjAgfHwgXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIndlYnBhY2siOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAid2VicGFjay1jbGkiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dlYnBhY2stZGV2LXNlcnZlci9ub2RlX21vZHVsZXMvYWp2IjogewotICAgICAgInZlcnNpb24iOiAiOC4xMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYvLS9hanYtOC4xMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zUnUxa3BjTzl5THRZeEJLdnFmVGVoOUt6WkV3TzNTVHlYMUhUKzRDYUR6QzZIcFRHWWhJaFBJemo5WHVLVTdLWUR3bmFlaDVoY093ankxUXVKekJQQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4xIiwKLSAgICAgICAgImpzb24tc2NoZW1hLXRyYXZlcnNlIjogIl4xLjAuMCIsCi0gICAgICAgICJyZXF1aXJlLWZyb20tc3RyaW5nIjogIl4yLjAuMiIsCi0gICAgICAgICJ1cmktanMiOiAiXjQuMi4yIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9lcG9iZXJlemtpbiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2LWtleXdvcmRzLy0vYWp2LWtleXdvcmRzLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ1MvSk5GQVV5cjV2QXVoazFEV20xQ0J4UkhXOUxiSjJveldlZW1ySXFwYnNxS2pIVnhZUHlpNUdDMHJqWklUNUp4SjN2aXJWVFM4d2s0aS9aK2tydz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogIl44LjguMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1kZXYtc2VydmVyL25vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXNjaGVtYS10cmF2ZXJzZS8tL2pzb24tc2NoZW1hLXRyYXZlcnNlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJwYWNrLWRldi1zZXJ2ZXIvbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zY2hlbWEtdXRpbHMvLS9zY2hlbWEtdXRpbHMtNC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwwalJzclBwamRja1Azb1B1ZzMvVnhOS3QydHJSOFRjYWJyTTZGT0FBbHZDLzlQaGNtbStjdUFnVGx4QnFkQlIxV0p4N05hajlXSHcrYU9taGVTVmJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjkiLAotICAgICAgICAiYWp2IjogIl44LjkuMCIsCi0gICAgICAgICJhanYtZm9ybWF0cyI6ICJeMi4xLjEiLAotICAgICAgICAiYWp2LWtleXdvcmRzIjogIl41LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3dlYnBhY2siCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dlYnBhY2stZGV2LXNlcnZlci9ub2RlX21vZHVsZXMvd3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtOC4xMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14OXZjWllUckZQQzdhU0liajdzUkNZbzdML1hiOEl5K3BXMG5nMHd0MnZDSnY3TTlIT015MFVvTjNycitJRkM3aGI3dlhvcVMrUDlrdHlMTExoTytMQT09IiwKKyAgICAibm9kZV9tb2R1bGVzL3dzIjogeworICAgICAgInZlcnNpb24iOiAiOC4yMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cy8tL3dzLTguMjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0F0OEJoZ05iekN0Z0didDJPeG1wdXJ5TzYzWm9Eay9zcWFCL3puUW05NFQ0ZkNFc3kveVYrN0NkQzFrSmhPVTlsYm9BRVU3UjNrcXV1eWNEb2liVkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAgICAiZW5naW5lcyI6IHsKICAgICAgICAgIm5vZGUiOiAiPj0xMC4wLjAiCiAgICAgICB9LApAQCAtMTk1MjQsMTUzNDIgKzM4OTMsNDYgQEAKICAgICAgICAgfQogICAgICAgfQogICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbi8tL3dlYnBhY2stbWFuaWZlc3QtcGx1Z2luLTQuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZWFVBd3h0ZktJSklLa2hnMDNNS3VpRkFENzJQbHJxQ2l3ZHdPNFZFWGRSTzVWME9SQ053YU93QVphd1BaYWxDYm1IOWtCRG1Ybk5lUU93K0JJRWlvdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0YXBhYmxlIjogIl4yLjAuMCIsCi0gICAgICAgICJ3ZWJwYWNrLXNvdXJjZXMiOiAiXjIuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyLjIyLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3ZWJwYWNrIjogIl40LjQ0LjIgfHwgXjUuNDcuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2VicGFjay1tYW5pZmVzdC1wbHVnaW4vbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbi9ub2RlX21vZHVsZXMvd2VicGFjay1zb3VyY2VzIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnBhY2stc291cmNlcy8tL3dlYnBhY2stc291cmNlcy0yLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteTlFSTlBTzQySmpFY3JUSkZPWW1WeXdWWmRLVlVmT3ZEVVBzSmVhNUdJcjFKT0VHRlZxd2xZMkswOThmRm9Jak9rRHpIbjJBalJ2TThkc0JadStnQ0E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic291cmNlLWxpc3QtbWFwIjogIl4yLjAuMSIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMC4xMy4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJwYWNrLXNvdXJjZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2VicGFjay1zb3VyY2VzLy0vd2VicGFjay1zb3VyY2VzLTMuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vRHlNRU9yRGdMS0tJRzBmbXZ0eis0ZFVYLzNHaG96d2dtNmlQcDhLUmh2bitlUWY5K1E3R1d4Vk5NazMrdUNQV2ZkWFlDNEV4R0Jja0lYZEZFZkgxdz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEzLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dlYnBhY2svbm9kZV9tb2R1bGVzL2VzbGludC1zY29wZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtc2NvcGUvLS9lc2xpbnQtc2NvcGUtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJOeHdiRi9oWjBLcGVwWU4wY05ibytGTjZYb0s3R2FIbFFoZ3gvaElabDZWYTBiRjQ1UlFPT3doTEl5OGxRRGJ1Q2lhZFNMQ0JuSDJDRllxdWl0NWJ3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzcmVjdXJzZSI6ICJeNC4zLjAiLAotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNC4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dlYnBhY2svbm9kZV9tb2R1bGVzL2VzdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM5bm5LZmZXejh4TjFCVS8yYzc5bjluQjlIRHpvMG5pWVVxeDZ4eXFVbnlvQW5ReXlXcE9UZFpFZWlDY2g4QkJ1NTE1dDR3cDlabWdWZlZobjlFQnB3PT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93ZWJzb2NrZXQtZHJpdmVyIjogewotICAgICAgInZlcnNpb24iOiAiMC43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnNvY2tldC1kcml2ZXIvLS93ZWJzb2NrZXQtZHJpdmVyLTAuNy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iMTdLZURJUVZqdmIwc3N1U0RGMmNZWFNnMml6dGxpSjRCOVdkc3VCNko5NTJxQ1BLbW5WcTREeVc1bW90SW1YSERDMWNCVC8xVWV6ckpWc0t3NXpqZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJodHRwLXBhcnNlci1qcyI6ICI+PTAuNS4xIiwKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIj49NS4xLjAiLAotICAgICAgICAid2Vic29ja2V0LWV4dGVuc2lvbnMiOiAiPj0wLjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2Vic29ja2V0LWV4dGVuc2lvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2Vic29ja2V0LWV4dGVuc2lvbnMvLS93ZWJzb2NrZXQtZXh0ZW5zaW9ucy0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT3FlZFBJR09mc0RsbzMxVU53WWJDRk1TYU85bTlHLzBmYUlIajUvZFpGRE1GcVBUY3g2VXdxeU95M0NPRWFFT2cvOVZzR0lwZHFuNjJXNUtob0tTcGc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2hhdHdnLWVuY29kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1lbmNvZGluZy8tL3doYXR3Zy1lbmNvZGluZy0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjVsaW01NEpPUE45SHR6dks5SEZYdkJtYS9ybmZGZXFzaWMwaFNwanREYlZ4UjNkSktMYytLQjRWNkdnaUdPdmw3Q1kvS05oOHJ4U285REtRcm5VRXc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaWNvbnYtbGl0ZSI6ICIwLjQuMjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3doYXR3Zy1lbmNvZGluZy9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWNvbnYtbGl0ZS8tL2ljb252LWxpdGUtMC40LjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12M01YblpBY3ZueXdrVFVFWm9tSUFjdGxlN1JYWGVlZE9SMzF3d2w3Vmx5b1hPNFFpOWFydlNlbk5RV25lMVRjUndoQ0wxSHdMSTIxYkVxZHBqOC9yQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzYWZlci1idWZmZXIiOiAiPj0gMi4xLjIgPCAzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2hhdHdnLWZldGNoIjogewotICAgICAgInZlcnNpb24iOiAiMy42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1mZXRjaC8tL3doYXR3Zy1mZXRjaC0zLjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkpsZW4wRmN1VS8wRU1McmRiSjd6T25XNklUWkxyWk1JYXJNVVZtZEt0c0d2Wm5hOHZ4S1lhZXhJQ1dQZlo4cXdmOWZ6TnErVUVJWnJuU2FBcHQ2UkE9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2hhdHdnLW1pbWV0eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1taW1ldHlwZS8tL3doYXR3Zy1taW1ldHlwZS0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTTR5TXdyNm1BblF6NzZUYkptOTE0K2dQcEIvbkN3dlpiSlUyOGNVRDZkUjAwNFNBeERMT09TVWFCMUpEUnFMdGFPVi92aTBJQzVsRUFHRmdyakd2L2c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2hhdHdnLXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGF0d2ctdXJsLy0vd2hhdHdnLXVybC04LjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0FvanFiL205UThhNUlWOTZFM2ZISk03MEF6Q2tndDR1WFlYMk83RW11eU9uTHJWaUNRbHNFQm1GOVVRSXUzL2FlQUlwMlUxN3J0YnBaV05udFFxZGc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjcuMCIsCi0gICAgICAgICJ0cjQ2IjogIl4yLjEuMCIsCi0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjYuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGljaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGljaC8tL3doaWNoLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTEkzVGwxVFczUHZsNzBsM3lxM1k2NGkrYXdwd1hxc0dCWVdra3FNdG5iWGdyTUQreWo3cmhXMGt1RUR4ekphWVhHakVXNW9nYXBLTk1FS05NamliQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc2V4ZSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgIm5vZGUtd2hpY2giOiAiYmluL25vZGUtd2hpY2giCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3doaWNoLWJveGVkLXByaW1pdGl2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGljaC1ib3hlZC1wcmltaXRpdmUvLS93aGljaC1ib3hlZC1wcmltaXRpdmUtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ3WmR2MEFLTHBwbEZZMktaUlg2VHZ5dU43b2pqcjdsd2tnNm1sMHJvSXk5WWV1U3I3SlMzNzJxbE5XMThVUVl6Z1lLOXppR2NlcldxWk9tRW45Vk5nPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWJpZ2ludCI6ICJeMS4wLjEiLAotICAgICAgICAiaXMtYm9vbGVhbi1vYmplY3QiOiAiXjEuMS4wIiwKLSAgICAgICAgImlzLW51bWJlci1vYmplY3QiOiAiXjEuMC40IiwKLSAgICAgICAgImlzLXN0cmluZyI6ICJeMS4wLjUiLAotICAgICAgICAiaXMtc3ltYm9sIjogIl4xLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGljaC1jb2xsZWN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLWNvbGxlY3Rpb24vLS93aGljaC1jb2xsZWN0aW9uLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XOHhlVFV3YWxuOGkzSy9jWTFuR1h6ZG5WWmxpZEJjYWd5TkZ0QmRENWt4bmI0VHZHS1I3RmZTSVMzbVlwd1dTMVFVQ3V0Zkt6OElZOFJqZnRCMCsxQT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1tYXAiOiAiXjIuMC4xIiwKLSAgICAgICAgImlzLXNldCI6ICJeMi4wLjEiLAotICAgICAgICAiaXMtd2Vha21hcCI6ICJeMi4wLjEiLAotICAgICAgICAiaXMtd2Vha3NldCI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2hpY2gtdHlwZWQtYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gtdHlwZWQtYXJyYXkvLS93aGljaC10eXBlZC1hcnJheS0xLjEuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzljNHhreDZtUGlkd3A3MTgwY2tZV2ZNbXZ4cGpsWnVJdWROdERmNE4vdFRBVUI4VkpiWDI1cVpvQXNydEd1WU5uR3czcGEwQVhnYkdLUkI4L0VjZUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXZhaWxhYmxlLXR5cGVkLWFycmF5cyI6ICJeMS4wLjUiLAotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJmb3ItZWFjaCI6ICJeMC4zLjMiLAotICAgICAgICAiZ29wZCI6ICJeMS4wLjEiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIsCi0gICAgICAgICJpcy10eXBlZC1hcnJheSI6ICJeMS4xLjEwIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29yZC13cmFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmQtd3JhcC8tL3dvcmQtd3JhcC0xLjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQk4yMkI1ZWFNTUk5VU10anJHZDVnNWVDWVBwQ1BEVXkwRkpYYllzYVQ1ell4akZPY2tTNTNTUURFM3BXa1ZvV3BIWFZiM0JyWWNFTjRUd2E1NUI1Y0E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtYmFja2dyb3VuZC1zeW5jIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtYmFja2dyb3VuZC1zeW5jLy0vd29ya2JveC1iYWNrZ3JvdW5kLXN5bmMtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWprZjRaZGdPSnhDOXUydnp0eEx1UFQvVWpsSDdtL25XUlEvTWdHTDB2OEJKSG9aZFZHSmQxOEtjaythMGU1NXdHWGRxeUhPKzRJUVRrMDY4NWc0TVV3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlkYiI6ICJeNy4wLjEiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LWJyb2FkY2FzdC11cGRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1icm9hZGNhc3QtdXBkYXRlLy0vd29ya2JveC1icm9hZGNhc3QtdXBkYXRlLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ubSt2NlFtcklGYUIveW9rSm1RLzkzcUlKN243Mk5JQ3hJd1F3ZTV4c1ppVjJhSTkzTUdHeUV5ek96RFBWejVUSEVyNXJDM0ZKU3NPMzM0NmNJZDY0UT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3b3JrYm94LWNvcmUiOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtYnVpbGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1idWlsZC8tL3dvcmtib3gtYnVpbGQtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRqZitnQndPVHVHeVp3TXoyTmsvQjEzRnV5ZW8wUTg0VysrYmViYlZzZnI5aUxrRFNvNmo2UFNUOHRFVDlIWUE1OG1sUlh3bE1HcHlXTzhFVEppWGRRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBhcGlkZWNrL2JldHRlci1hanYtZXJyb3JzIjogIl4wLjMuMSIsCi0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS4xIiwKLSAgICAgICAgIkBiYWJlbC9wcmVzZXQtZW52IjogIl43LjExLjAiLAotICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuMTEuMiIsCi0gICAgICAgICJAcm9sbHVwL3BsdWdpbi1iYWJlbCI6ICJeNS4yLjAiLAotICAgICAgICAiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlIjogIl4xMS4yLjEiLAotICAgICAgICAiQHJvbGx1cC9wbHVnaW4tcmVwbGFjZSI6ICJeMi40LjEiLAotICAgICAgICAiQHN1cm1hL3JvbGx1cC1wbHVnaW4tb2ZmLW1haW4tdGhyZWFkIjogIl4yLjIuMyIsCi0gICAgICAgICJhanYiOiAiXjguNi4wIiwKLSAgICAgICAgImNvbW1vbi10YWdzIjogIl4xLjguMCIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAiZnMtZXh0cmEiOiAiXjkuMC4xIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS42IiwKLSAgICAgICAgImxvZGFzaCI6ICJeNC4xNy4yMCIsCi0gICAgICAgICJwcmV0dHktYnl0ZXMiOiAiXjUuMy4wIiwKLSAgICAgICAgInJvbGx1cCI6ICJeMi40My4xIiwKLSAgICAgICAgInJvbGx1cC1wbHVnaW4tdGVyc2VyIjogIl43LjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjguMC1iZXRhLjAiLAotICAgICAgICAic3RyaW5naWZ5LW9iamVjdCI6ICJeMy4zLjAiLAotICAgICAgICAic3RyaXAtY29tbWVudHMiOiAiXjIuMC4xIiwKLSAgICAgICAgInRlbXB5IjogIl4wLjYuMCIsCi0gICAgICAgICJ1cGF0aCI6ICJeMS4yLjAiLAotICAgICAgICAid29ya2JveC1iYWNrZ3JvdW5kLXN5bmMiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1icm9hZGNhc3QtdXBkYXRlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtY2FjaGVhYmxlLXJlc3BvbnNlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LWV4cGlyYXRpb24iOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1nb29nbGUtYW5hbHl0aWNzIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtbmF2aWdhdGlvbi1wcmVsb2FkIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtcHJlY2FjaGluZyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXJhbmdlLXJlcXVlc3RzIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtcmVjaXBlcyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXJvdXRpbmciOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1zdHJhdGVnaWVzIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtc3RyZWFtcyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXN3IjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtd2luZG93IjogIjYuNi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1idWlsZC9ub2RlX21vZHVsZXMvQGFwaWRlY2svYmV0dGVyLWFqdi1lcnJvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGFwaWRlY2svYmV0dGVyLWFqdi1lcnJvcnMvLS9iZXR0ZXItYWp2LWVycm9ycy0wLjMuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUCtaeWdCTFp0a3AwcXFPQUpKVlg0b1gvc0ZvNUpSM2VCV3d3dXFISGhLMEdJZ1FPS1dyQWZpQWFXWDBhQXJIa1JXSE11Z2dGRWdBWk54VlB3UFpZYUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAianNvbi1zY2hlbWEiOiAiXjAuNC4wIiwKLSAgICAgICAgImpzb25wb2ludGVyIjogIl41LjAuMCIsCi0gICAgICAgICJsZXZlbiI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LWJ1aWxkL25vZGVfbW9kdWxlcy9hanYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNSdTFrcGNPOXlMdFl4Qkt2cWZUZWg5S3paRXdPM1NUeVgxSFQrNENhRHpDNkhwVEdZaEloUEl6ajlYdUtVN0tZRHduYWVoNWhjT3dqeTFRdUp6QlBBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIiwKLSAgICAgICAgInVyaS1qcyI6ICJeNC4yLjIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Vwb2JlcmV6a2luIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LWJ1aWxkL25vZGVfbW9kdWxlcy9mcy1leHRyYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTkuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oY2czWm1lcFMzMC83QlNGcVJ2b28zRE9NUXU3SWpxeE81bkNEdCt6TTlYV2piMzNXZzd6aU5UK1F2cWJ1YzMrZ1dwek8wMkp1YlZ5azJHNFp2bzFPUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhdC1sZWFzdC1ub2RlIjogIl4xLjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjAiLAotICAgICAgICAianNvbmZpbGUiOiAiXjYuMC4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtYnVpbGQvbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5NOC9QOW4zWGpYaElabjFsTGhrRmFBQ1RPVVJRWGpXaFY0QkEvUm5Pdjh4dmdxdHFwQVg5SU80bVJReFN4MVJsbzR0cXplcWIwc09scnVhT3kzZHVnPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtYnVpbGQvbm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjguMC1iZXRhLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuOC4wLWJldGEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMnltZzZvUkJwZWJlWmk5VVVOc2dRODliaHgwMVRjVGttTlRHbk5PODhpbVRtYlNneTRuZnVqcmdWRUZLV3BNVEVHQTExRURrVHQ3bXFPYlRQZGlnSUE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2hhdHdnLXVybCI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtYnVpbGQvbm9kZV9tb2R1bGVzL3RyNDYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHI0Ni8tL3RyNDYtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRUcG93RWpjbFE3S2d4NVNkQmtxUnpWaEVSUVhvdjgvbDlGdDlkVk05Zm1nMFcwS1FTVmFYWDlUNGk2dHdDUE50WWlaTTUzbHBTU1VBd0piRlBPSHhBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInB1bnljb2RlIjogIl4yLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1idWlsZC9ub2RlX21vZHVsZXMvd2ViaWRsLWNvbnZlcnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYmlkbC1jb252ZXJzaW9ucy8tL3dlYmlkbC1jb252ZXJzaW9ucy00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVErQm14dVRnZDZVWFpXMytJQ0dmeXFSeUhYVmxENUd0UXI1K3FqaU5XN2JGMGNxcnpYNTAwSFZYUEJPdmdYYjVZbnpEZCtoMHpxeXY2MUtVRDcrU2c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1idWlsZC9ub2RlX21vZHVsZXMvd2hhdHdnLXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGF0d2ctdXJsLy0vd2hhdHdnLXVybC03LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1V1N1JnMURyb003b1F2R1dmT2lBSzIxbjc0R2crVDRlbFhFUVlrT2h0eUxlV2lKRm9PR0xYUEtJLzlneklpZTlDdHdWTG04d3R3NllKZEt5eFNqZWc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9kYXNoLnNvcnRieSI6ICJeNC43LjAiLAotICAgICAgICAidHI0NiI6ICJeMS4wLjEiLAotICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl40LjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1jYWNoZWFibGUtcmVzcG9uc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1jYWNoZWFibGUtcmVzcG9uc2UvLS93b3JrYm94LWNhY2hlYWJsZS1yZXNwb25zZS02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSmZoSlVTUUR3c0YxWHYzRVYxdld6U3NDT1puNG1RMzhiV0VCUjNMZHZPeFNQZ0I2NWdBTTZjUzJDWDhya2tLSFJnaUxyTjdXeG95dStUdUg2N2tIcnc9PSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJ3b3JrYm94LWJhY2tncm91bmQtc3luY0A2LjYuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1jb3JlLy0vd29ya2JveC1jb3JlLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HRHRGUkY3WWczREQ4NTlQTWJQQVlQZUp5ZzVnSllYdUJRQUMrd3lyV3V1WGdwZm9PcklRSXZGUlpuUTcrY3pUSVFqSXIxRGhMRUdGelphbkFULzNiUT09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LWV4cGlyYXRpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1leHBpcmF0aW9uLy0vd29ya2JveC1leHBpcmF0aW9uLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iYXBsWVhjREhiZTh2QW83R1l2eUFtbFM0ZjY5OThKZmY1MTNMNFh2bHpBT3hjbDhGNjIwTzkxZ3VvSjVFT2Y1cWVYRzRjR2ROWkhra1ZBUG91RkNwdz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpZGIiOiAiXjcuMC4xIiwKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1nb29nbGUtYW5hbHl0aWNzIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtZ29vZ2xlLWFuYWx5dGljcy8tL3dvcmtib3gtZ29vZ2xlLWFuYWx5dGljcy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDRESmE2T2xkWFdkNk05elJsMEg2dkI5bGtybXFZRmtSUTJ4RWlOZEJGcDlVMExoc0dPN2hzQnNjVkV5SDlIMi8zZVpadDhjOTdOQjJGRDlVMk5KK1E9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid29ya2JveC1iYWNrZ3JvdW5kLXN5bmMiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtcm91dGluZyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXN0cmF0ZWdpZXMiOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtbmF2aWdhdGlvbi1wcmVsb2FkIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtbmF2aWdhdGlvbi1wcmVsb2FkLy0vd29ya2JveC1uYXZpZ2F0aW9uLXByZWxvYWQtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXV0TkVXRyt1T2ZYZGFabXZoc2hyaDdLemhEdS8xaU1IeVFPVjZBcXVwOE1tNzhEMjg2dWd1NWs5TUZEOVN6QlQ1VGN3Z3dTT1JWdkluYVhXYnZLejlRPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1wcmVjYWNoaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtcHJlY2FjaGluZy8tL3dvcmtib3gtcHJlY2FjaGluZy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZVl1LzdNcXRSWk4xSUR0dGwvVVFjU1pGa0hQN2RudnIvWDNWbjZJdzZPc1BNcnVRSGlWampvbURGQ050ZDhrMlJkakxzMHhpejlucSt0M1lWQmNXUHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtcm91dGluZyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXN0cmF0ZWdpZXMiOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtcmFuZ2UtcmVxdWVzdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1yYW5nZS1yZXF1ZXN0cy8tL3dvcmtib3gtcmFuZ2UtcmVxdWVzdHMtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVYzYUlDejVmTEdxNURwU1lFVThMeGVYdnNULy9tUld6S3JmQk9JeHpJZFFuVi9XajdSK0x5SlZUY3ppNENRNE53S2hBYUJWYVN1akkxY0VqWFcraFR3PT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1yZWNpcGVzIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtcmVjaXBlcy8tL3dvcmtib3gtcmVjaXBlcy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVEZpM2tUZ1l3NzN0NXRnNzN5UFZxUUM4UVFqeEpTZXFqWFJPNG91RS9DZXlwbVAyTy94cW1CL1pGQkJRYXpMVFB4SUxVUTBiOGFlaDBJdXhWbjlhNkE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid29ya2JveC1jYWNoZWFibGUtcmVzcG9uc2UiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtZXhwaXJhdGlvbiI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXByZWNhY2hpbmciOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1yb3V0aW5nIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtc3RyYXRlZ2llcyI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC1yb3V0aW5nIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtcm91dGluZy8tL3dvcmtib3gtcm91dGluZy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteDhnZE43VkRCaUxDMDNpekFaUmZVK1dLVVhKbmJxdDZQRzlVaDBYdVBSekpQcFpHTEtjZS9Ga09YOTVkV0hScE9IV0xFcThSWHpqVzBPK1BPU2tLdnc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LXN0cmF0ZWdpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1zdHJhdGVnaWVzLy0vd29ya2JveC1zdHJhdGVnaWVzLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lQzA3WEd1SU5BS1VXRG5aZUlQZFJkVmphNEpRdFR1YzM1VFo4U3dNYjF6dGpwN0RkcTJDSjR5cUx2V3pGV0dsWUk3Q0cvWUdxYUVUbnRUeEJHZEtnUT09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3b3JrYm94LWNvcmUiOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtc3RyZWFtcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LXN0cmVhbXMvLS93b3JrYm94LXN0cmVhbXMtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJmTUpMVnZ3dUVEMDlDbkgxUm5JZXA3TDkrbWo0dWZrVHlEUFZhWFBLbGhpOSswY3pDdStTSmdnV0NJRmJQcEphQVptcDJpeVZHTHFTM1JVbVkzZnhnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXJvdXRpbmciOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtc3ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1zdy8tL3dvcmtib3gtc3ctNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVIySWt3RG9rYnRIVUU0S3VzOHBLTzUrVmtQSEQyb3FUZ2wrWEp3aDR6YkYxSHlqQWJnTm1LL0ZuZVpIVlU3cDAzWFV0OUlDZnVHRFlJU1dHOXFWL0NRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dvcmtib3gtd2VicGFjay1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC13ZWJwYWNrLXBsdWdpbi8tL3dvcmtib3gtd2VicGFjay1wbHVnaW4tNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhOWklaSGFsYm9aVTY2V2E3eDFZa2pJcUV5MWdUUit6UE0ra2pyWUp6cU43aXVyWVpCY3RCTElTeVNjamhrSktZdVJyWlVQMGlxVmlaVGg4clMwKzNBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIl4yLjEuMCIsCi0gICAgICAgICJwcmV0dHktYnl0ZXMiOiAiXjUuNC4xIiwKLSAgICAgICAgInVwYXRoIjogIl4xLjIuMCIsCi0gICAgICAgICJ3ZWJwYWNrLXNvdXJjZXMiOiAiXjEuNC4zIiwKLSAgICAgICAgIndvcmtib3gtYnVpbGQiOiAiNi42LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2VicGFjayI6ICJeNC40LjAgfHwgXjUuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JrYm94LXdlYnBhY2stcGx1Z2luL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC13ZWJwYWNrLXBsdWdpbi9ub2RlX21vZHVsZXMvd2VicGFjay1zb3VyY2VzIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnBhY2stc291cmNlcy8tL3dlYnBhY2stc291cmNlcy0xLjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGdUUzNYaHYxbENPS283U0E1VGpLWE1qcFNNNHNCak5WNStxMmJxZXNiU1BzNUZqR21VNmpqdEJTa1g5YjRxVzg3dkRJc0NJbFVQT0VoYlpyTWRqZVE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic291cmNlLWxpc3QtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIn4wLjYuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2JveC13aW5kb3ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC13aW5kb3cvLS93b3JrYm94LXdpbmRvdy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDROOSt2a2ExN2QxNmdlYUpYWFJqRU5MRmxkdmtXeTdKeUd4RWxSRDBKdkJ4dkZFZDhMT2hyK3VYQ2Nhci9OekFtSUJSdjlFWitNK1FyNG1Pb0JJVHc9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3RydXN0ZWQtdHlwZXMiOiAiXjIuMC4yIiwKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS03LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVZHSWoya2FtTFNUeHc2TnNaam9CeGZTd3NuMHljZGVzbWM0cCtRMjFjNXpQdVoxcGwrTmZ4VmR4UHRkSHZtTlZPUTZYU1lHNEFVdHl0L0ZpN0QxNlE9PSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMC4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4xLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyYXBweSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cmFwcHkvLS93cmFwcHktMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWw0U3AvRFJzZW9yOXdMNkV2VjIrVHVRbjYzZE1rUGpaL3NwOVhrZ2hURWJWOUtsUFMxeFVzWjN1Ny9JUU80d3h0Y0ZCNGJncFFQUmNSM1FDdmV6UGNRPT0iCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyaXRlLWZpbGUtYXRvbWljIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyaXRlLWZpbGUtYXRvbWljLy0vd3JpdGUtZmlsZS1hdG9taWMtMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUF2SGN5WjVKblNmcTNpb1N5anJCa0g5eVc0bTdBeWs4LzlNeS9ERDlvbktldS85NGZ3ck1vY2VtTzJRQUpGQWxubkROK1pEUytaakFSNXVhMS9QVi9RPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICJpcy10eXBlZGFycmF5IjogIl4xLjAuMCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjIiLAotICAgICAgICAidHlwZWRhcnJheS10by1idWZmZXIiOiAiXjMuMS41IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cy8tL3dzLTcuNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GK1A5SmlsN1VpU0tTa3BwSWlEOTRkTjA3QXd2Rml4dkxJajFPZzFSbDlHR011TmlwSm5WOUp6akQ2WHVxbUFlaXN3R3ZVbU5ManI1Y0Z1WHdOUzc3UT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguMy4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnVmZmVydXRpbCI6ICJeNC4wLjEiLAotICAgICAgICAidXRmLTgtdmFsaWRhdGUiOiAiXjUuMC4yIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgImJ1ZmZlcnV0aWwiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidXRmLTgtdmFsaWRhdGUiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3htbC1uYW1lLXZhbGlkYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWwtbmFtZS12YWxpZGF0b3IvLS94bWwtbmFtZS12YWxpZGF0b3ItMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUE1Q1VwdHhEc3Z4S0pFVTN5TzZEdVdCU0p6L3FpenF6SktPTUlmVUpIRVRiQncvc0ZhRHhnZDZmeG0xZXdVYU0walo0NDRGYzV2QzVST1l1cmcvNFB3PT0iCisgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sLW5hbWUtdmFsaWRhdG9yLy0veG1sLW5hbWUtdmFsaWRhdG9yLTUuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FdkdLOEVKM0RoYUhmYlJsRVRPV0FTNXBPOU1aSVRlYXVIS0p5Yjh3eWFqVWZRVWVua0lnMk12TERUWjRUL1RnSWNtM0hVMFRGQmdXV2JvQVozMFVIZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KICAgICB9LAogICAgICJub2RlX21vZHVsZXMveG1sY2hhcnMiOiB7CiAgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sY2hhcnMvLS94bWxjaGFycy0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSlpuREtLOEIwUkNEdzg0Rk5kREFJcFpLK0p1SncrczdMejhua3NJN1NJdVUzVVhKSnNsVXRoc2krdVdCVVlPd1BGd1c3VzdQUkxSZlVLcHhqdGpGQ3c9PSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveTE4biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95MThuLy0veTE4bi01LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHBmRnplZ2VEV0pISklBbVRMUlAyRHdIamRGNXM3am85dHV6dGRReEFoSU5DZHZTKzNuR0lOcVBkMDBBcGhxSlIvMExoQU5VUzYvKzdTQ2I5OFlPZkE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpabkRLSzhCMFJDRHc4NEZOZERBSXBaSytKdUp3K3M3THo4bmtzSTdTSXVVM1VYSkpzbFV0aHNpK3VXQlVZT3dQRndXN1c3UFJMUmZVS3B4anRqRkN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3lhbGxpc3QiOiB7CiAgICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCiAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWE0VUdRYVdQSDU5bU9YVVluQUcyZXduY1FTNGk0RjQzVHYzSm9BTStzMlZEQW1TOU5zSzhHcERNTHJDSFBrc0ZUN2gzSzZUT29VTm4ycGI3Um9YeDRnPT0iCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hNFVHUWFXUEg1OW1PWFVZbkFHMmV3bmNRUzRpNEY0M1R2M0pvQU0rczJWREFtUzlOc0s4R3BETUxyQ0hQa3NGVDdoM0s2VE9vVU5uMnBiN1JvWHg0Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlCiAgICAgfSwKICAgICAibm9kZV9tb2R1bGVzL3lhbWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEwLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbWwvLS95YW1sLTEuMTAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcjN2WHlFclJDWUo3d2cyOHl2Qlk1VlNvQUY4WnZsY1c5L0J3VXpFdFVzanZYL0RLczI0ZElrdXdqdHVwcndKSkhzYnlVYkxBcGVwWVRSMUJONHVIcmc9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLy0veWFyZ3MtMTcuNy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03ZFN6elJRKytDS25OSS9rcktuWVJWN0pLS1BVWE1FaDYxc29hSEtnOW1yV0VoekZXaEZueFB4R2wrNjljRDFPdTYzQzEzTlVQQ25tSWNydnFDdU02dz09IiwKKyAgICAgICJ2ZXJzaW9uIjogIjIuOC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YW1sLy0veWFtbC0yLjguMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXZiYUNMT08yT3R3L2xXNWJtaDlkL1dFZGNERmRRcDJaMlpVSDNwWDlVMmloeVVZMG52THY3SjZUcldvd2tsUkdQWWJCL0l1SU1mWWd4YUNQZzVCcGc9PSIsCiAgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCiAgICAgICAib3B0aW9uYWwiOiB0cnVlLAogICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNsaXVpIjogIl44LjAuMSIsCi0gICAgICAgICJlc2NhbGFkZSI6ICJeMy4xLjEiLAotICAgICAgICAiZ2V0LWNhbGxlci1maWxlIjogIl4yLjAuNSIsCi0gICAgICAgICJyZXF1aXJlLWRpcmVjdG9yeSI6ICJeMi4xLjEiLAotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl40LjIuMyIsCi0gICAgICAgICJ5MThuIjogIl41LjAuNSIsCi0gICAgICAgICJ5YXJncy1wYXJzZXIiOiAiXjIxLjEuMSIKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ5YW1sIjogImJpbi5tanMiCiAgICAgICB9LAogICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MtcGFyc2VyLy0veWFyZ3MtcGFyc2VyLTIxLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFZwc0pXN0RkamVjQWlGcGJJQjFlM3F4SVFzRTZOb1BjNS9lVGRyYmJJQzRoMExWc1dobm9hM2crbTJIY2xCSXVqSHpzeFo0VkpWQStHVXVjMi9MQnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveW9jdG8tcXVldWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveW9jdG8tcXVldWUvLS95b2N0by1xdWV1ZS0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItclZrc3Zzbk5DZEovb2hHYzZ4Z1B3eU44ZWhlQ3hzaUxNOG14dUUvdC9tT1ZxSmV3UHVPMW1pTHBUSFFpUmdUS0NMZXhMNE1lQUZWYWd0czdIbU5aMlE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgICAgIm5vZGUiOiAiPj0gMTQuNiIKICAgICAgIH0sCiAgICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0KLSAgfSwKLSAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAiQGFkb2JlL2Nzcy10b29scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYWRvYmUvY3NzLXRvb2xzLy0vY3NzLXRvb2xzLTQuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vNjJ5aWt6N05MU2NDR0FBU1Q1U0hkbmphREpRQkRxME0ybXV5UlRwZjJWUWh3NlN0QmcyQUxpdTczelNKUTRmTVZMQSswdUJoQkhBbGU3V2crMmtTZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQGFsbG9jL3F1aWNrLWxydSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYWxsb2MvcXVpY2stbHJ1Ly0vcXVpY2stbHJ1LTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcmNBQkIrNGJVckZBQndibHVUSUJFclh3dmJzVS9WN1RaV2ZtYmdKZmJrd2lCdXppUzlneGRPRFV5dWllY2ZkR1E4NWpnbE1XNmp1UzMrejVUc0tMdz09IgotICAgIH0sCi0gICAgIkBhbXBwcm9qZWN0L3JlbWFwcGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYW1wcHJvamVjdC9yZW1hcHBpbmcvLS9yZW1hcHBpbmctMi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxGTWpKVHJGTDNqN0w5eUJ4d1lmQ3EyazZxcXdIeXp1VWwvWEJuaWY3OFBXVEpZeUwvZGZvd1FIV0Uzc3A2VTZaenFXaWlJWm5wVE1POTZ6aGtqd3RnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmciOiAiXjAuMy4wIiwKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy45IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvZGUtZnJhbWUvLS9jb2RlLWZyYW1lLTcuMjIuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhrdHVoV2xKNWcrM1RKWGM1dXBkOUtzMUh1dFNBcmlrNmpmMmVBallGeUlPZjRlajNSTisxODRjWmJ6RHZiUG51VEpJVWhQS0tKRTNjSXNZVGlBVDN3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hpZ2hsaWdodCI6ICJeNy4yMi4xMyIsCi0gICAgICAgICJjaGFsayI6ICJeMi40LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4xLjkuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjaGFsayI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstMi40LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjMuMi4xIiwKLSAgICAgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjUiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1jb252ZXJ0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY29sb3ItbmFtZSI6ICIxLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1uYW1lIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03MmZTZW5oTXcySFpNVFZIZUNBOUtDbXBFSWJ6V2lRc2pOK0JIY0JiUzl2cjFtdHQrdkpqUGRrc0lCTlVtS0FXOFRGVURQSks1U1VVM1FoRTlORVhEdz09IgotICAgICAgICB9LAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmJSb3JCNUZVUVd2bGExNlU4Ui9xZ2FGSXlhMnFHendEck5tQ1p1WUtyYmRTVU1HNkkxWkNHUVJlZmtSVmh1T2tJR1ZuZTdCUTM1RFNmbzFxdkpxRmc9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImhhcy1mbGFnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy0zLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNLSmYxK2NlUUJyNFNNa3ZRbkJETkR0ZjRUWHBWaFZHYXRldTB0OTE4YmwzMEZuYkUybTR2TkxYK1ZXZS9kcGpsYitIdWdHWXpXN3VRWEg5OEhQRVl3PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9jb21wYXQtZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvbXBhdC1kYXRhLy0vY29tcGF0LWRhdGEtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00SmMvWXVJYVlxS25ERHo4OTJrUElsZWR5a0tnMTJBdzFQWVg1aS9UWTI4YW5KdGFjdk0xUnJyOHdiaWVCOUdmRUp3bHpxVDBoVUVhbzBDeEVlYmlEQT09IgotICAgIH0sCi0gICAgIkBiYWJlbC9jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29yZS8tL2NvcmUtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TQnVUQWpnOTFBM2VLT3ZEK2JQRXozTGxoSFpSTnUxbkZPVnRzOWx6REpUWHNoSFRqSUkwQkF0RFMzWTJEQWtkWmRES1dWWkdWd2tEZmM0Q2x4bjFkZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBhbXBwcm9qZWN0L3JlbWFwcGluZyI6ICJeMi4yLjAiLAotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3JtcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS43LjAiLAotICAgICAgICAiZGVidWciOiAiXjQuMS4wIiwKLSAgICAgICAgImdlbnN5bmMiOiAiXjEuMC4wLWJldGEuMiIsCi0gICAgICAgICJqc29uNSI6ICJeMi4yLjIiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvZXNsaW50LXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2VzbGludC1wYXJzZXIvLS9lc2xpbnQtcGFyc2VyLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQzY5UldZTll0cmdJUkU1Q21UZDc3WmlMRFhxZ0JpcGFoSmMvakhQM3NMY0FHajZBSnp4Tkl1S05wVm5JQ3FieUs3WDNwRlVmRXZMKytydnRiUXBaa1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAbmljb2xvLXJpYmF1ZG8vZXNsaW50LXNjb3BlLTUtaW50ZXJuYWxzIjogIjUuMS4xLXYxIiwKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjIuMS4wIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtdmlzaXRvci1rZXlzLy0vZXNsaW50LXZpc2l0b3Ita2V5cy0yLjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTByU21SQnpYZ0R6SXNENm1HZEpnZXZ6Z2V6STUzNENlcjVML3Z5TVgwa0h6VC9qaUI0M2pSaGQ5WVVsTUdZTFF5Mnpwck5tb1Q4cWFzQ0d0WStRYUt3PT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvZ2VuZXJhdG9yLy0vZ2VuZXJhdG9yLTcuMjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbE44NVFSUis1SWJZck1XTTZZNHBFL25vYVF0ZzRwTmlxZU5HWDYwZXFPZm82Z3RFajZ1dy9KYWdlbEI4dlZ6dFNkN1I2TTVuMStQUWtEYkhiQlJVNGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjMuMCIsCi0gICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjIiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE3IiwKLSAgICAgICAgImpzZXNjIjogIl4yLjUuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZS8tL2hlbHBlci1hbm5vdGF0ZS1hcy1wdXJlLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTHZCVHh1OGJRU1FrY3lLT1UrYTFidG5ORlExZE1BZDBSNlB5VzNhclhlczA2RjZRTFdMSXJkNjgxYnhSUElYbHJNR1IzWFluVzlKeU1MN2RQM3FneGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWJ1aWxkZXItYmluYXJ5LWFzc2lnbm1lbnQtb3BlcmF0b3ItdmlzaXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1idWlsZGVyLWJpbmFyeS1hc3NpZ25tZW50LW9wZXJhdG9yLXZpc2l0b3IvLS9oZWxwZXItYnVpbGRlci1iaW5hcnktYXNzaWdubWVudC1vcGVyYXRvci12aXNpdG9yLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbTFFUDNsVk9QcHRSKzJEd0QxMjVnemlaTmNtb05TSEdtSlJPS295ODdsb1dVUXlKYVZYRGdwbXJ1V3FEQVJaU210WVErRGwyNW9rVTgrcWhWenV5a3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cy8tL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSmkreXdwSGV1cXhCOFdEeHJhQ2lxUjB4ZmhZamlERS9lNms3RnVJYUFObm9PRnhBSHNrSENoejR2QTFtSkM5TGJtMDFzMVBWQUdoUVk0RlVLU2tHWnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuMyIsCi0gICAgICAgICJscnUtY2FjaGUiOiAiXjUuMS4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtY2xhc3MtZmVhdHVyZXMtcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4vLS9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbi03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhrYjU4TXlPWUlzbHh1M2dLbVZYbWpUdFVQdkJVNG9kWXpiaUlRYld3TEtJSENzeDZVR1pHWDZGMUl6bk1GVm5EZGlyc2VVWm9wek4rWlJ0OFhiMzNRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1hbm5vdGF0ZS1hcy1wdXJlIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1mdW5jdGlvbi1uYW1lIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1tZW1iZXItZXhwcmVzc2lvbi10by1mdW5jdGlvbnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNraXAtdHJhbnNwYXJlbnQtZXhwcmVzc2lvbi13cmFwcGVycyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogIl43LjIyLjUiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luLy0vaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVZwRUZPSWJNUmFYeURlVXdVZm1USXhFeEx3USt6a1crQmg1elhwQXBBM29RZWRCeDl2L3VwZGl4V3hueC9iWnBLdzd1OFZ4V2piL3FXcEljbVBxOEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJyZWdleHB1LWNvcmUiOiAiXjUuMy4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1kZWZpbmUtcG9seWZpbGwtcHJvdmlkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1kZWZpbmUtcG9seWZpbGwtcHJvdmlkZXIvLS9oZWxwZXItZGVmaW5lLXBvbHlmaWxsLXByb3ZpZGVyLTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SbmFuTHg1RVRlNmF5YlJpMWNPL2VkYVJIK2JOWVdhcnlDRW1qRERZeU5yNHduU3p5T3A4VDBkV2lwbXFWSEtFWTNBYlZLVW9tNTBBS1NsajF6bUtiZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4xNy43IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE2LjciLAotICAgICAgICAiZGVidWciOiAiXjQuMS4xIiwKLSAgICAgICAgImxvZGFzaC5kZWJvdW5jZSI6ICJeNC4wLjgiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xNC4yIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4xLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi4yMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yLy0vaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3ItNy4yMi4yMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemZlZFNJekZoYXQvZ0ZoV2ZIdGdXdmxlYzBucUI5WUVJVnJwdXdqcnVMbFhmVVNuQThjSkIwbWlIS3dxRG5RN2QzMmFLbzJ4dDg4L3hacHR3eGJmaEE9PSIKLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZS8tL2hlbHBlci1mdW5jdGlvbi1uYW1lLTcuMjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT0VyRXFzcnhqWlRKY2laNE9vK2VvWnFlVzlVSWlPY3VZS1JKQTRaQWdWOW15QStwT1hoaG1wZk5DS2pFSC9hdVZmRVlWRko2eTFUYzRyMGVJQXBxaXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuMTUiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIzLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1ob2lzdC12YXJpYWJsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItaG9pc3QtdmFyaWFibGVzLy0vaGVscGVyLWhvaXN0LXZhcmlhYmxlcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdHams5UVpWenZrbkE2eUtJVVVSYjh6WTNnclhDY09adCsvN1djeThPMnVjdHhocGxtVVBrT2RsZ29OaG1kVmVlMmM5MkpYYmYxeHBNdFZOYmZveFJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1tZW1iZXItZXhwcmVzc2lvbi10by1mdW5jdGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zLy0vaGVscGVyLW1lbWJlci1leHByZXNzaW9uLXRvLWZ1bmN0aW9ucy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFCaUgxTktNRzBIMmNHWnFzcE52c2FCZTZ3TkdqYkpqdUx5MjlhVStlRFpqU2JiTjUzQmF4bHBCMDJ4bTl2MzRwTFRaMW5JUVBGWW4ycU1ab2E1QlFRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cy8tL2hlbHBlci1tb2R1bGUtaW1wb3J0cy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThEbDYrSEQvY0tpZnV0RjVxR2QvOFpKaTg0UWVBS2grQ0VlMXNCeno4VWF5QkJHZzFkQUlKcmRIT2NPTTViMk1weldMMnl1b3RKVHRHakVUcTBxalhnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3JtcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3Jtcy8tL2hlbHBlci1tb2R1bGUtdHJhbnNmb3Jtcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStoR0tEdC9aZThHRkV4aVZIbm8vMmR2RzVJZHN0cHpDcTB5NFFjOU9KMjVENHEzcEtmaUlQLzRWcDMvSnZoRGtMS3NESzJhcGkzcTNmcElnaUlGNWJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc2ltcGxlLWFjY2VzcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbi8tL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IQndhb2pOMHhGUng0eUl2cHdHcXhpVjJ0VWZsNzQwMWpsb2s1NjROZ0I5RUhTMXk2UVQxN0ZtS1dtNHp0cWplVmRYTHVDNGZTdkhjNWVQcFFqb1Ridz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscy8tL2hlbHBlci1wbHVnaW4tdXRpbHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11TGxzMDZVVktnRkc5UUQ0T2VGWUxFR3RlTUlBYTVrcFRQY0ZMMjh5dUNJSXpzZjZaeUtaTWxsS1ZPQ1pGaGlaNXB0bndYNG10S2RXQ0JFL3VUNGFtZz09IgotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXJlbWFwLWFzeW5jLXRvLWdlbmVyYXRvci8tL2hlbHBlci1yZW1hcC1hc3luYy10by1nZW5lcmF0b3ItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jVTBTcTFSZjRaNTVmZ3o3aGFPYWtJeU03K3gvdUNGd1hwTFBhZVJ6Zm9VdEFFQXVVWmpadkZQakwvcms1clc2OTNkSWduMmhuZzFXN3hiVDdsV1Q0Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZW52aXJvbm1lbnQtdmlzaXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItd3JhcC1mdW5jdGlvbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMvLS9oZWxwZXItcmVwbGFjZS1zdXBlcnMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hTGROTTVJM2tkSS9WOXhHTnlLU0YzWC9nVHlNVUJvaFRaKy8zUWRRS0FBOXZ4SWl5MTJFKzhFMkhvT1AxL0RqZXFVK2c2YXMzNVFISk5NRERZcHVDZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZW52aXJvbm1lbnQtdmlzaXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItc2ltcGxlLWFjY2Vzcy8tL2hlbHBlci1zaW1wbGUtYWNjZXNzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjBIOTlFL0srQmlrYTMrK1dOTDE3UE92bzRyS1daN2xaRXAxUStmU3RWYlVpOG54UFFFQk9sVG1DT3hXLzBKc1M1NlNLS1Erb2pBZTJwSEtKSE4zNXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXNraXAtdHJhbnNwYXJlbnQtZXhwcmVzc2lvbi13cmFwcGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1za2lwLXRyYW5zcGFyZW50LWV4cHJlc3Npb24td3JhcHBlcnMvLS9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEsxNHI2NkpaS2lDNDNwOEtpMzN5TEJWSktsUURGb0E4R1lONjdsV0NEQ3FvTDZFTU1TdU05YitJZmYyakhhTS9SUkZZbDdLK2lpcnU3aGJScU54OFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXNwbGl0LWV4cG9ydC1kZWNsYXJhdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24vLS9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uLTcuMjIuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXNVbnh1TGhSWXNpc0ZpYUp3dnAxUUYrSTNLakQ1Rk94dXQxNHEvR3pvdlVlNm9ySExlc1cyQzdkNzU0a1JtNTNoNWdxcno2c0ZsNnN4YzRCVnRFL2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItc3RyaW5nLXBhcnNlci8tL2hlbHBlci1zdHJpbmctcGFyc2VyLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbU00Q09qZ1pveDhVK0pjWFF3UGlqSVpMRWxrZ0VwTzVyc0VSVkRKVGMycWZDRGZFUnlvYjZrNVdlZ1MxNFNYMThJSWp2K1hEK0dycU51bVk1SlJDRHc9PSIKLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi4yMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllci8tL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllci03LjIyLjIwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZNE9aK3l0bGF0UjhBSSs4S1pmS3VMNXVyS3A3cWV5MDhoYTMxTDhiM0J3ZXdKQW9KYW1Uenl2eFBSLzVEK0trZEpDR1BxLys4VHVrSEJsWTEwRlg5QT09IgotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uLy0vaGVscGVyLXZhbGlkYXRvci1vcHRpb24tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SM29CNnhsSVZLVW54TlV4Ym1ncTdwS2p4cHJ1MjR6bGltcEU4V0s0N2ZBQ0lsTTBJSS9IbTFSUzhJYU9JN05nQ3I2TE5TK2psNWw3NW0yMG5wQXppdz09IgotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItd3JhcC1mdW5jdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci13cmFwLWZ1bmN0aW9uLy0vaGVscGVyLXdyYXAtZnVuY3Rpb24tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iWXFMSUJTRXNoWWNZUXlma3M4ZXdZQThTMzB5YUdTZVJzbGN2S012b1VrNkhIUHlTYnhIcTlZUmk2Z2hoekVVK3loUXY5YlAvalhueWdrU3RPY3Fadz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXJzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVycy8tL2hlbHBlcnMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wU1hSbWZFMXZ6Y1VJREZRY1NHQTVNcitHeEJWOW9pUktEdUR4WHZXUVFCQ2g4SG9JanMvMkRsREI3SDhzbWFjMUlWckI5L3hkWGoyTjNXb2w5Q3IrUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oaWdobGlnaHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjIwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGlnaGxpZ2h0Ly0vaGlnaGxpZ2h0LTcuMjIuMjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRrZE1DTjNweTAra3NDZ1ltR0c4aktlR0EvOFRrK2dKd1NZWWxGR3hHNWxtaGZLTm9BeTAwNFlwTHhwUzFXMko4bS9FSzJFdyt5T3M5cFZSd084OW1nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yMi4yMCIsCi0gICAgICAgICJjaGFsayI6ICJeMi40LjIiLAotICAgICAgICAianMtdG9rZW5zIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4yLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTMuMi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlQwWkk2a1pSZFRoOFl5SnczU01iWW0vdStOcWZzQXhFcFdPMFBmOXNxOC9lOTRXeHhPcFBLeDlGUjFGbHlDdE9WRE5PUSs4bnRscUZ4aVJjK3I1cUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNvbG9yLWNvbnZlcnQiOiAiXjEuOS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImNoYWxrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0yLjQuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU10aStmOWxwSk5jd0Y0dFdWOC9PclRUdEYxZ1ppK2Y4RnFseUFkb3VyYWxjRldGUVdGMitOZ0NIU2hqa0NiK0lGQkxxOWJ1WndFMXhja1FVNHBlU3VRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAotICAgICAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4xLjAuNSIsCi0gICAgICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjUuMy4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImNvbG9yLWNvbnZlcnQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS45LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0xLjkuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFmQVV0ZCt2RmRBdEZRY0M4Q0N5WXQxZllXeFNxQWlLMmNTRDZ6REI4TjNjcHNFQkF2UnhwOXpPR2c2Ry9TSEhKWUFUODgvYXovSXVER0FMc05WYkdnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb2xvci1uYW1lIjogIjEuMS4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImNvbG9yLW5hbWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcyZlNlbmhNdzJIWk1UVkhlQ0E5S0NtcEVJYnpXaVFzak4rQkhjQmJTOXZyMW10dCt2SmpQZGtzSUJOVW1LQVc4VEZVRFBKSzVTVVUzUWhFOU5FWER3PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMS4wLjUudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YlJvckI1RlVRV3ZsYTE2VThSL3FnYUZJeWEycUd6d0RyTm1DWnVZS3JiZFNVTUc2STFaQ0dRUmVma1JWaHVPa0lHVm5lN0JRMzVEU2ZvMXF2SnFGZz09IgotICAgICAgICB9LAotICAgICAgICAiaGFzLWZsYWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxhZy8tL2hhcy1mbGFnLTMuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0tKZjErY2VRQnI0U01rdlFuQkRORHRmNFRYcFZoVkdhdGV1MHQ5MThibDMwRm5iRTJtNHZOTFgrVldlL2RwamxiK0h1Z0dZelc3dVFYSDk4SFBFWXc9PSIKLSAgICAgICAgfSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci01LjUuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFqVmp3ZFhJdDQwOE1JaUFxQ1g0b1VLc2dVMkVxQUd6czJQcGttNGFRWWJqbStaRVdFY1c0U2ZGTlRyNHVNTlptYTBleTRmNWxnTHJrQjBhWDBRTW93PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeMy4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BhcnNlci8tL3BhcnNlci03LjIzLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZ2UEtLZE1lbVU4NVY5V0UvbDV3WkVtSW1wQ3RMcWJuVHZxRFMyVTFmSjk2S3J4b1c3S3JYaE5zTkNibFFsZzhDazRiODV5eGRUeWVsc01VZ0ZVWGl3PT0iCi0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1idWdmaXgtc2FmYXJpLWlkLWRlc3RydWN0dXJpbmctY29sbGlzaW9uLWluLWZ1bmN0aW9uLWV4cHJlc3Npb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tYnVnZml4LXNhZmFyaS1pZC1kZXN0cnVjdHVyaW5nLWNvbGxpc2lvbi1pbi1mdW5jdGlvbi1leHByZXNzaW9uLy0vcGx1Z2luLWJ1Z2ZpeC1zYWZhcmktaWQtZGVzdHJ1Y3R1cmluZy1jb2xsaXNpb24taW4tZnVuY3Rpb24tZXhwcmVzc2lvbi03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5QMU01UmYrdTJHdzlxZlNPNGloamNUR1c1elhUaTM2SVRMZDQvRW9BY0VoSVoweWpNcW1mdERObDNRQzE5Q1g3b2xocmpweVU0NTRnLzJXN1gwanZRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLWJ1Z2ZpeC12OC1zcHJlYWQtcGFyYW1ldGVycy1pbi1vcHRpb25hbC1jaGFpbmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1idWdmaXgtdjgtc3ByZWFkLXBhcmFtZXRlcnMtaW4tb3B0aW9uYWwtY2hhaW5pbmcvLS9wbHVnaW4tYnVnZml4LXY4LXNwcmVhZC1wYXJhbWV0ZXJzLWluLW9wdGlvbmFsLWNoYWluaW5nLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMzFCYjY1YVphVXdxQ2JXTW5aUGR1SVp4Q0JuZ0hGbHp5TjZEcTZLQUpqdHgrbHg2b2hLSHViYzYxT29tWWk3WHdWRDRPbDBYQ1Z6NGgrcFlGUjA0OGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc2tpcC10cmFuc3BhcmVudC1leHByZXNzaW9uLXdyYXBwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb3B0aW9uYWwtY2hhaW5pbmciOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE4LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tcHJvcG9zYWwtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1wcm9wb3NhbC1jbGFzcy1wcm9wZXJ0aWVzLTcuMTguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY3VtZlhPRjArbnpacnJOOFJmMHQ3TSt0RjZzWmM3dmhRd1lRY2s5cTEvNXcyT0V4bEQrYjR2NFJwTUpGYVYxWjdXY0RSZ082RnF2eHF4R2x3bytSSFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xOC42IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtZGVjb3JhdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1kZWNvcmF0b3JzLy0vcGx1Z2luLXByb3Bvc2FsLWRlY29yYXRvcnMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oOGhsZXpRNGRsNml4b2RnWGtIOGxVZmNEN3grV0F1SXFQVWp3R29JdHluclhPQXY0YTRUY2kxekEvcWp6UWpqY2wwdjNRcExkYzJMTTZaQUNRdVk3QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZGVjb3JhdG9ycyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4xOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvci8tL3BsdWdpbi1wcm9wb3NhbC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3ItNy4xOC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13UXhRenhZZUpxSGNmcHB6QkRubTF5QVkwalNSa1VYUjJ6OFJlUFpZckt3TUtnTWxFOCtaNkxVbm8rYmQ2THZiR2g4R2x0dnk3NCs5cElZa3IrWGtLQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE4LjYiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogIl43LjguMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4xOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yLy0vcGx1Z2luLXByb3Bvc2FsLW51bWVyaWMtc2VwYXJhdG9yLTcuMTguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb3psWkZvZ1Bxb0xtOFdCcjVaOFVja0lvRTRZUTVLRVNWY051ZHlYT1I4dXFJa2xpVEVnSjNSb2tldGZHNnBtekxkZVpGMEgvd2pFOS9jQ0VpdEJsN1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xOC42IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjEwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1vcHRpb25hbC1jaGFpbmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1vcHRpb25hbC1jaGFpbmluZy8tL3BsdWdpbi1wcm9wb3NhbC1vcHRpb25hbC1jaGFpbmluZy03LjIxLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXA0emVlZk03MmdwbUVlMmZrVXIvT25PWHBXRWY4bkFnazdaWVZxcWZGaXlJRzdvRmZWWmNDclU2NGhXbjV4cDR0UTlMa1Y0YlRJYTVyRDBLQU5wS05BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjAuMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNraXAtdHJhbnNwYXJlbnQtZXhwcmVzc2lvbi13cmFwcGVycyI6ICJeNy4yMC4wIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjguMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXByaXZhdGUtbWV0aG9kcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTguNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLW1ldGhvZHMvLS9wbHVnaW4tcHJvcG9zYWwtcHJpdmF0ZS1tZXRob2RzLTcuMTguNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbnV0c3ZrdERJdHNObjRycEdJdFNOVjJzejFYd1MrbmZVMFJnOGFDeDNXM05PS1Z6ZE1qSlJ1ME81T2tnRHAzWkdJQ1NUYmdScHhab1dzeG9LUnZiZUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xOC42IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIxLjAtcGxhY2Vob2xkZXItZm9yLXByZXNldC1lbnYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdC8tL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdC03LjIxLjAtcGxhY2Vob2xkZXItZm9yLXByZXNldC1lbnYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU09Ta2ZKRGRkYU03bWFrNmNQRXBzd3lUUm51Umx0bDQyOWhNcmFRRWdsVytPa292bkN6c2lzelRtc3JsWS8vcUxGakNwUURGUnZqZG0yd0E1cFBtOXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtdW5pY29kZS1wcm9wZXJ0eS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTguNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC11bmljb2RlLXByb3BlcnR5LXJlZ2V4Ly0vcGx1Z2luLXByb3Bvc2FsLXVuaWNvZGUtcHJvcGVydHktcmVnZXgtNy4xOC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yQlNoRy9kNXlvWnlYWmZWZVBIOTF1ckw1d1RHNkFTWlU5TTRvMDNsS0s4dThVVzF5MDhPTXR0QlNPQURUY0pyblBNcHZEWFJHM0c4ZnlMaDRvdnM4dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLXJlZ2V4cC1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xOC42IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycy8tL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycy03LjguNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHljbVp4a0dmWmF4aE1SYlhsUFh1VkZwZFdsWHBpcjJXNEFNaFNKZ1JLemsvZURsSVhPaGIyTEhXb0xwREY3VEVIeWxWNXpOaHlrWDZLQWdISm1UTnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50IjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWJpZ2ludC8tL3BsdWdpbi1zeW50YXgtYmlnaW50LTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13blRuRmxHK1l4UW0zdkR4cEdFNTdQajBzclJVNHNIRS9tRGt0MXF2MllKSlNlVUFlYzJtYTRXTFVuVVBlS2p5cmZudFZ3ZS9ONmRDWHBVK3pMM05wZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUzcmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhUUVpZQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEyLjEzIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3RhdGljLWJsb2NrLy0vcGx1Z2luLXN5bnRheC1jbGFzcy1zdGF0aWMtYmxvY2stNy4xNC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iK1l5UG1yNmxkeU5uTTZzcVllTVdFK2JnSmNKcE82eVM0UUQ3eW14Z0gzNEdCUE5ETS9USEJoOGl1bnl2S0laenRpd0xINENKWjBSeFRrOWVtZ3Bqdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE0LjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZGVjb3JhdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtZGVjb3JhdG9ycy8tL3BsdWdpbi1zeW50YXgtZGVjb3JhdG9ycy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2cFVPQlM3SVU2YWw4TW1GMVhwQXlqOVFZZUxQdVNESkk1RDRwVk1TTWRMN3hRb2tLcUpQWVFDNjdSQ1QwYUNUYXNoVVhQaUd3TUowREVYWENFbU1BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydC8tL3BsdWdpbi1zeW50YXgtZHluYW1pYy1pbXBvcnQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVnZEdiRm9uK1Bzell6cXM4M1MzRTVtcGk3L3kvOE05ZUM5ME1SVFpmZHVRT1lXNzZpZzZTT1NQTmU0MUlHNUxvUDNGR0JuMk4wUmpWRFNRaVM5NGtRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWV4cG9ydC1uYW1lc3BhY2UtZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1leHBvcnQtbmFtZXNwYWNlLWZyb20vLS9wbHVnaW4tc3ludGF4LWV4cG9ydC1uYW1lc3BhY2UtZnJvbS03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVhmNWxhWG82YzFJYkViZWdEbXpHUHdHTlRzSFptRXk2UUd6bnU1U2gyVUNXdnVleXdiMmVlK0NDRTR6UWlac3R4VTlCTW9RTzlpNnpVRlNZMEtqMFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZmxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtZmxvdy8tL3BsdWdpbi1zeW50YXgtZmxvdy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlSZENsMGkrcTBRRXhheWsybk9TNzg1M3cwOHlMdWNublBNTDZFTjlTOGZnTVBWdGRMRENkeC9jT1EvaTQ0TGI5VWVRWDlBMzV5YXFCQk9NTVp4UHhRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXNzZXJ0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWFzc2VydGlvbnMvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1hc3NlcnRpb25zLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcmRWOTdON0txc1J6ZU5Hb1dVT0s2eVVzV2FyTGpFNVN1L1NuazlJWVBVOUN3a1dIczR0K3JUR092ZmZUUjhYR2tKTVRBZExmTzB4Vm5YbTh3dWdJSmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1hdHRyaWJ1dGVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXR0cmlidXRlcy8tL3BsdWdpbi1zeW50YXgtaW1wb3J0LWF0dHJpYnV0ZXMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ld3ZvV0RlTktQRVRtb3p5RkUwUDJyT0xxaDM5RW9RSE5qcWl6ckk1QjhWdDBaTlM3TTU2czdkQWlBcWJZZmlBWU91SXpJaDk2ejNpUjJrdGd1M3RFZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEwLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhLy0vcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YS03LjEwLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlxZm0rWER4MCtQcmgzVlNlRVFDUFU4MXlDK0pXWjJwRFBGU1M0WmRwZlpocDRNa0ZNYURDMVVxc2VvdkVLd1NVcG5JTDcrdksrQ2xwN2JmaDBpRDdnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzLy0vcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxZNmtkR3BXSHZqb2Uydms0V3JBYXBFdUJSNjlFTXhabCtSb0dSaHJGR05ZVks4bU9QQVc4VmZiVC9aZ3JGYlhsRE5paWF4UW5BdGdWQ1o2anYzMEVBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWpzeCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtanN4Ly0vcGx1Z2luLXN5bnRheC1qc3gtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ndnlQNGhacmdycy93V01hb2N2eFo0NEh3MGIzVzhQZStjTXhjOFYxVUxRMDdvaDhWTmJJUmFvRDFMUlpWVHZEKzBuaWVES2pmZ0tnODlzRDdycktyZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycy8tL3BsdWdpbi1zeW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycy03LjEwLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWQ4d2FTaGxwRkRpblE1TXR2R1U5eERBT3pLSDQ3K0ZGb25leTJiYUZJb01yOTUyaEtPTHAxSFI3VnN6b1p2T3NWLzQrUlJzek5ZN0QxN2JhMHRlMGlnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLy0vcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3ItNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFTZmY0elBJSTF1MlFEN3krRjhvRHN6MTlldzRJR0VKZzlTVlcrYnF3cHd0ZkZsZWlRRE1kekEvUitVbFdEemZuSEZDeHhsZUZUMFBNSXJSMzZYTE5RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvci8tL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3ItNy4xMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05SDZZZGZrY0svdU9uWS9LNy9hQTJ4cHphQWdrUW4zN3l6V1VNUks3T2FQT3FPcEdTMStuMEg1aHhUOUFVdzlFc1NqUFc4U1Z5TUp3WVJ0V3MzWDN1Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9iamVjdC1yZXN0LXNwcmVhZC8tL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkLTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Yb3FNaWpHWmI5eTN5Mlhza04rUDF3VUdpVndXWjVKbW9EUnd4NSszR21FcGxOeVZNMnMyRGc4SUxGUW04cldNNDhvckd5NVlwSTVCbDhVMXk3eWRsQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmcvLS9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmctNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZWUEQwUGMxbHBUcXcwYUtvZVJUTWlCK2tXaEFvVDI0UEEra3NXU0JyRnRsNVNJUlZwWmx3TjNOTlBRamVoQTJFLzkxRlYzUmpMV29WVGdsV2NTVjNRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nLy0vcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZy03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS29LOUVySDFNQmxDUHhWMFZBTmtYVzIvZHc0dmxiR0RyRmd6OGJtVXNCR1lrRlJjYlJ3TWg2Y0lKdWJkUHJreFJ3dUdkdENrMHYvd1BUS2JRZ0Jqa2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0Ly0vcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdC03LjE0LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTB3Vm5wOWR4SjcyWlVKRFYyN1pmYlNqNmlITG95dFlabWgzckZjeE5udnNKRjNrdGt6TERaUHkvbUExN0hHc2FRVDMvRFFzV1lYMWYxUUdXa0NvVlVnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdC8tL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3YWl0LTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHgrK3VwTHY1VTFyZ1lmd2UxeEJRVWhSbVU0MU5FdnBVdnJwOGprclNDZHZHU25NNS9xZFJNdHlsSjZQRzVPRmtCYUhrYlRBS1RuZDMvWXlFU1JIRnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xNC41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQvLS9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xbVMybzAzaTd0MWM2VnpINmZkUTNPQTh0Y0VJeHdHMTh6SVBScCtVWTFJaHY2VytYWnpCQ1Z4RXhGOXVwdXNzUFhKMHhFOVhSSHdNb05zMWVwL25SUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdW5pY29kZS1zZXRzLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNy4xOC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC11bmljb2RlLXNldHMtcmVnZXgvLS9wbHVnaW4tc3ludGF4LXVuaWNvZGUtc2V0cy1yZWdleC03LjE4LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcyN1lrRUFQd1NJUVR2NWltOFFIejN1cHFwOTJKVFdoaWRJQzgxVGR4NFZKWUl0ZS9WbmRLZjFxS3Jmbm5oUExpUGdoU3RXZnZDL2lGYU1DUXU3TnFnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtcmVnZXhwLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4xOC42IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjE4LjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYXJyb3ctZnVuY3Rpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hcnJvdy1mdW5jdGlvbnMvLS9wbHVnaW4tdHJhbnNmb3JtLWFycm93LWZ1bmN0aW9ucy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTI2bFROWG9WUmRBbnNhRFhQcHZDTlVxK09WV0VWQzZieDdWdno5ckM1M0YyYmFnVVdXNHU0aWkyK2g4RmVqZmg3UllxUHhuK2xpYmVGQkJjazltdUV3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hc3luYy1nZW5lcmF0b3ItZnVuY3Rpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hc3luYy1nZW5lcmF0b3ItZnVuY3Rpb25zLy0vcGx1Z2luLXRyYW5zZm9ybS1hc3luYy1nZW5lcmF0b3ItZnVuY3Rpb25zLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0dPRXZGem0zZldveUQ1dVpxN3ZWVEQ1N3BQSjNQY3pQVUQveENGR2p6QnBVb3Nua2xtWHlLbkdRYmJiR3MxTlBOUHNrRmV4MGo5M3lLYkh0MGNIeWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWVudmlyb25tZW50LXZpc2l0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVtYXAtYXN5bmMtdG8tZ2VuZXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6ICJeNy44LjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYXN5bmMtdG8tZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hc3luYy10by1nZW5lcmF0b3IvLS9wbHVnaW4tdHJhbnNmb3JtLWFzeW5jLXRvLWdlbmVyYXRvci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIxQThEOFp6RS9WaE5Eb1YxTVNKVG5wS2tDRzViSm8rMTlSNG80b3kwM3pNN3dzOHlFTUs3NTVqNjFEYzNFeXZkeXNicUg1Qk9PVHF1SjdaWDlDNnZRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1yZW1hcC1hc3luYy10by1nZW5lcmF0b3IiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ibG9jay1zY29wZWQtZnVuY3Rpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ibG9jay1zY29wZWQtZnVuY3Rpb25zLy0vcGx1Z2luLXRyYW5zZm9ybS1ibG9jay1zY29wZWQtZnVuY3Rpb25zLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdGRYWjJVZGtuRUtRV0tKUDFLTU5tdUY1THgzTXltdE1OL3B2QStwL1ZFa2hLOGpWY1ExZnpTeThLTTlxUlloQWYyL2xWMzNob01QS0kveGFJOXNBREE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWJsb2NrLXNjb3BpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWJsb2NrLXNjb3BpbmcvLS9wbHVnaW4tdHJhbnNmb3JtLWJsb2NrLXNjb3BpbmctNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FY0FDbDFpNWZTUTZidCtZR3VVL1hHQ2VaS1N0TG15Vkd5dFdrcHloQ0xlUVZBMGV1Nld0aXc5MlYrSTFUL2huZXpVdjdqNzRkQS9SbzY5Z1djVStoZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3MtcHJvcGVydGllcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5Ea1EwTmZrT2hQVHE4WUNMaVdOeHAxK2Y5ZkNvYkVqQ2IwbjhXZGJOVUJjNElCNVY3UDFRblg5SWpwU29xdUtyWEY1U0tvakhsZVZOczJ2R2VIQ0hRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1jcmVhdGUtY2xhc3MtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzcy1zdGF0aWMtYmxvY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWNsYXNzLXN0YXRpYy1ibG9jay8tL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3Mtc3RhdGljLWJsb2NrLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU1BUb0o1ZVlaTHhsbnAxVXpkQVJwT0dlQzJHYkh2cjlkL1VWMEV1a3VWeDhhdGt0ZzE5NG9lK0M1QnFROGpSVGtnTFJWT1BZZVhSU0JnMUlsTW9WUkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jayI6ICJeNy4xNC41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWNsYXNzZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWNsYXNzZXMvLS9wbHVnaW4tdHJhbnNmb3JtLWNsYXNzZXMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yZWRRaExmaWJwV3BzVkJ4Mm4vR0tPejZKZEdRdkxydVpRZkdyOWwxcWVzMktRYVdzd2pCemhRRjdVRFVaTU5hTU1RZVluUXp4d09NUHNiWUY3d3FQUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZW52aXJvbm1lbnQtdmlzaXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXJlcGxhY2Utc3VwZXJzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJnbG9iYWxzIjogIl4xMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY29tcHV0ZWQtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY29tcHV0ZWQtcHJvcGVydGllcy8tL3BsdWdpbi10cmFuc2Zvcm0tY29tcHV0ZWQtcHJvcGVydGllcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRHSFdCZ1JmMGtyeFBYK0FhUHRnQkFsVGdUZVptcUR5bm9rSE9YN2FxcUFCNHRIczNVMlkwMnpINkVURmRMWkdjZzlVUVNEMVdDbWtWckU5RXJIZU9nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nLy0vcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2ZxY0Z1R1c4dm5FcVRVQk03VXRQZDVBNHE3OTdMVHZ2d0t4WFRnUnNGam9xYUppRWc5ZGVCRzZrV2VRWWtWRUw1NjlOcG5tcEMwUGtyLzhCTEtHblE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWRvdGFsbC1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZG90YWxsLXJlZ2V4Ly0vcGx1Z2luLXRyYW5zZm9ybS1kb3RhbGwtcmVnZXgtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01L1lrOVF4Q1FDbCtzT0lCMVdlbEtuVlJ4VEpEU0FJeHRKTEwyL3BxTDE0WlZsYkgwZlVRVVphL1Q1L1VuUXRCTmdnaFI3bWZCOEVSQkt5S1BDaTdWdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLXJlZ2V4cC1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWR1cGxpY2F0ZS1rZXlzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kdXBsaWNhdGUta2V5cy8tL3BsdWdpbi10cmFuc2Zvcm0tZHVwbGljYXRlLWtleXMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kRW5ZRCs5QkJnbGQ1VkJYSG5GL0RiWUdwM2ZxR01zeXhLYnREMW1EeUlBN0FrVFNwS1hGaENWdWovb1FWT29BTGZCczc3RHVkQTBCRTRkNW1jcG1xdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZHluYW1pYy1pbXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWR5bmFtaWMtaW1wb3J0Ly0vcGx1Z2luLXRyYW5zZm9ybS1keW5hbWljLWltcG9ydC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBNQzNwcFRCMUFNeGQ4ZlhqU3JiUGE3TFQ5aHJJbXQrL2ZjaitQZzVZTUQ3VVF5V3AvMDIrSldwZG5DeW1tc1h3SXg1WitzWW4xYndDbjRaSk52aHFRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydCI6ICJeNy44LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZXhwb25lbnRpYXRpb24tb3BlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWV4cG9uZW50aWF0aW9uLW9wZXJhdG9yLy0vcGx1Z2luLXRyYW5zZm9ybS1leHBvbmVudGlhdGlvbi1vcGVyYXRvci03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZJcEpGTk0vRmpaNHJoMW15cUl5YTlqWHdyd3dnRlJIUGpUM0RrVUE5WkxIdXpveDhqaVhrT0x2d20xSCtQUUlQM0NxZkMrK1dQS2V1RGkwU2pkajFnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1idWlsZGVyLWJpbmFyeS1hc3NpZ25tZW50LW9wZXJhdG9yLXZpc2l0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWV4cG9ydC1uYW1lc3BhY2UtZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZXhwb3J0LW5hbWVzcGFjZS1mcm9tLy0vcGx1Z2luLXRyYW5zZm9ybS1leHBvcnQtbmFtZXNwYWNlLWZyb20tNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YNGhobTdGUm5QZ2Q0bkRBNGIvNVYyODB4Q3g2b0w3T29iNSs5cVZTNUMxM1pxNGJoMXFxN0xVMEdnUlU2YjVkQldCdmhHYVhZVkI0QWNONitvbDZ2Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZXhwb3J0LW5hbWVzcGFjZS1mcm9tIjogIl43LjguMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzLy0vcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHVqTmJaZHhkRzAvNTRnL291YThJU1RvYVhURkJmOEVuU2I1UGdRU2NpSVhXT1dLWDNTNCtKUjdaRTlvbDhGWndmOWt4aXR6a0dRK1FXZW92L21DaUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWZsb3ciOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mb3Itb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWZvci1vZi8tL3BsdWdpbi10cmFuc2Zvcm0tZm9yLW9mLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2t4UWpYMWRVOXV1ZHdTc2h5TGVFaXB2ckxqQkNWdGhDZ2VUcDZDekUvOUpZcmxBSWFlZWtWeFJwQ1dzRERmWVRmUlpSb0NlWmF0Q1F2d28rd3ZLOEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWZ1bmN0aW9uLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWZ1bmN0aW9uLW5hbWUvLS9wbHVnaW4tdHJhbnNmb3JtLWZ1bmN0aW9uLW5hbWUtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VSXpRTk1TMHAwSEhpUW0zb2VsenRqK0VDd0ZuaitaUlY0S25ndXZsc0Qyb2Yxd2hVZU02bzd3R05qNm9Md2NEb0FYUThnRXFmZ0MyNEQrVmRJY2V2Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tanNvbi1zdHJpbmdzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1qc29uLXN0cmluZ3MvLS9wbHVnaW4tdHJhbnNmb3JtLWpzb24tc3RyaW5ncy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR1Q1JCN2Z1OE15VExiRVFkMWV3M1I4NW54Lzg4eU1vcW8ydVBTamV2TWozeW9ON0NETThqa2dyWTB3bVZ4ZkpaeUovQjlmRTFpcTdFUXBwV1FtUjVBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiAiXjcuOC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWxpdGVyYWxzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1saXRlcmFscy8tL3BsdWdpbi10cmFuc2Zvcm0tbGl0ZXJhbHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mVExqNEQ3OU0rbWVwY3czZGdGQlRJRFlwYmNCOVNtMGJwbTRwcFhQYU8rVStQS0ZGeVY5TUdSdlMwZ3ZHdzYyc2QxMGtUNWxSTUtYQUFEYjlwV3k4Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycy8tL3BsdWdpbi10cmFuc2Zvcm0tbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1RUU9VVzFLTDhYMGNEV2Zid1lQK1RiVmJabTE2UW1RWEpRK3ZuZFB0SC9Cb08wbE9LcFZvRURNSTcrUHNrWXhIK0lpRTB0Uzh4WnllMHFyMWxHelNBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogIl43LjEwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbWVtYmVyLWV4cHJlc3Npb24tbGl0ZXJhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1lbWJlci1leHByZXNzaW9uLWxpdGVyYWxzLy0vcGx1Z2luLXRyYW5zZm9ybS1tZW1iZXItZXhwcmVzc2lvbi1saXRlcmFscy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJaRWRrTnR6ellDRmw5U0U5QVRhVU1UajJocU1iNFN0YXJPSkxyWlJicXFVNEhTQkU3VWxCdzlXQldRaUR6ckpaSmRVV2lNVFZESTZHdi84RFB2ZmV3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWFtZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy1hbWQvLS9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtYW1kLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUitQVGZMVGNZRW1iMStrSzdGTmtoUTFnUDRLZ2pwU082SGZIOStmOC95ZnAyTnQzZ2dCamlWcFJ3bXdUbGZxWkxhZllLSkFDeTM2eURYbEVtSTlIalE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWNvbW1vbmpzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWNvbW1vbmpzLy0vcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWNvbW1vbmpzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQjRwek9YaitPTlJtdWFRVGcwNWIzeS80RHVGejNXY0NOQVhQTGIyUTBHVDBUckdLR3hOS1Y0andzWHRzK1N0YU0wTFFjelpiT3BqOG8xRExQREpJaUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzLy0vcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXN5c3RlbWpzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZW10RXBvYVRNc09zNlR6eituYm1jZVBsNkFLVnRTMXlDNFlOQWVNdW45VThZQ3NnYWRQTnhuT1BROEdoSEZCMnFkeCtMWnU5TGdvQzBMdGh1dTA1RFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWhvaXN0LXZhcmlhYmxlcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLXVtZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy11bWQvLS9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtdW1kLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK1M2a3plZk4vRTF2a1NzS3g4a21RdXFlUXN2Q0tDZDFmcmFDTTd6WG00U0ZvZ2dJMDk5VHI0RzhVODErNWd0TWRVZU1RNGlwZFFmZmJLTFgwLzdkQlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1uYW1lZC1jYXB0dXJpbmctZ3JvdXBzLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1uYW1lZC1jYXB0dXJpbmctZ3JvdXBzLXJlZ2V4Ly0vcGx1Z2luLXRyYW5zZm9ybS1uYW1lZC1jYXB0dXJpbmctZ3JvdXBzLXJlZ2V4LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWWdMTEttUzNhVUJoSGF4cDVoaTFXSlRnT1ViL05DdURIekdUOXo5V1R0M1lHK0NQUmhKczZucHJiU3R4NkRuV000ZGg2Z3Q3U1Uzc1pvZGJaMDhhZFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1yZWdleHAtZmVhdHVyZXMtcGx1Z2luIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1uZXctdGFyZ2V0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1uZXctdGFyZ2V0Ly0vcGx1Z2luLXRyYW5zZm9ybS1uZXctdGFyZ2V0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXNGN0swRngvY05LVnlrM2ErRFcwSkxvK1VhNTk4L054TVJ2eERua3BDSUdGaDQzK2gvdjJ4eWhSVVlmNm9EOGdFNFF0TDgzQzd6WlZnaE1qSGQraXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLy0vcGx1Z2luLXRyYW5zZm9ybS1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3ItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02Q0Y4ZzZ6MWROWVovVlhvazV1WWtrQkJJQ0haUGlHRWw3b0RuQXgyTXQxaGxIVkhPU0lLV0phWEhqUUpBNVZCNDNLWm5YWkRJZXhNY2hZNHkyUEdkQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogIl43LjguMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1udW1lcmljLXNlcGFyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbnVtZXJpYy1zZXBhcmF0b3IvLS9wbHVnaW4tdHJhbnNmb3JtLW51bWVyaWMtc2VwYXJhdG9yLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmJzbEVEMS82TStzWGl3d3RjQUIvbmlleXBHdzAyRWpmNEt0RGVNa0NFcFA2Z1dGTVgxd0k5V0tZdWErNG9CbmVDQ0VtdWxPa1Jwd3l3eXBWWnpzL2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjEwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXJlc3Qtc3ByZWFkIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vYmplY3QtcmVzdC1zcHJlYWQvLS9wbHVnaW4tdHJhbnNmb3JtLW9iamVjdC1yZXN0LXNwcmVhZC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtrM2x5RG1Fc2xIOURudkNEQTFzMWtrZDNZV1FJVGlCT0huZ090REw5UHQ2QlpqenFiNmhpT2xiOFZmamlpUUoydW5tZWdCcVp1MHJ4NVJ4SmI1dm1RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvbXBhdC1kYXRhIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXBhcmFtZXRlcnMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vYmplY3Qtc3VwZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9iamVjdC1zdXBlci8tL3BsdWdpbi10cmFuc2Zvcm0tb2JqZWN0LXN1cGVyLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta2xYcXlhVDl0clNqSVVyY3NZSWZFVEF6bU9FWkwzY0JZcU9ZTEp4QkhmTUZGZ2dtWE92K05ZU1gvSmJzOW16TVZFU3cvV3ljTEZQUng4YmEvYjJJcHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jYXRjaC1iaW5kaW5nLy0vcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jYXRjaC1iaW5kaW5nLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcEg4b3JKYWh5K2h6WmplNWI4ZTJRSWxCV1F2R3BlbFM3NkM2M1oramhaS3NtemZOYVBRK0xhVzZkY0o5YnhUcG8xbXRYYmdId3k3NjVSbzNqZnRtVWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiAiXjcuOC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9wdGlvbmFsLWNoYWluaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jaGFpbmluZy8tL3BsdWdpbi10cmFuc2Zvcm0tb3B0aW9uYWwtY2hhaW5pbmctNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BY29uYk1LT01reUcreENuZzJKb2dNQ0RjcVc4d2VkUUFxcFZJTDRjT1Nlc2NaNytpVzh1dEM2WURaTE1DU1VJUmVFQTczM2d6UlNhT1NYTUF0LzRXUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1za2lwLXRyYW5zcGFyZW50LWV4cHJlc3Npb24td3JhcHBlcnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy44LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcGFyYW1ldGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcGFyYW1ldGVycy8tL3BsdWdpbi10cmFuc2Zvcm0tcGFyYW1ldGVycy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFWa0ZVQnVyT1JCUkVPbUhSS28wNkZqSFlnanJhYnBkcVJTd3E2K0M3UjVpVENaT3NNNFFiY0IyN1N0MGE0VTZmZmZ5QU9xaDNzL3FFZnliQWhmaXZnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcml2YXRlLW1ldGhvZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByaXZhdGUtbWV0aG9kcy8tL3BsdWdpbi10cmFuc2Zvcm0tcHJpdmF0ZS1tZXRob2RzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFBqaDRneXJRbkdlOTdKVGFsZ1JHTXVVNGljc1pGbldremljQi9mVXR6bEtVcXZzV0JLRXBQUGZyNWEySml5aXJaa0h4bkFxa1FNTzVaNUIya0szZkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdC8tL3BsdWdpbi10cmFuc2Zvcm0tcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vOXhuYVRUSmNWb0J0U1NtclZ5aHRTdk8za2JxUzJPRG9oMmp1RVU3MmMzYVlvbk5GME9NR2lhejJnanVreUtNMndCQllKUDM4UzRKaUUwV2ZiNVZNUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItYW5ub3RhdGUtYXMtcHVyZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLWNsYXNzLWZlYXR1cmVzLXBsdWdpbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiAiXjcuMTQuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcm9wZXJ0eS1saXRlcmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcHJvcGVydHktbGl0ZXJhbHMvLS9wbHVnaW4tdHJhbnNmb3JtLXByb3BlcnR5LWxpdGVyYWxzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVGlPQXJnZGRLM21LL3gxUXdmNWhheTJweEk2d0NabnZRcXJGU3FidGcxR0xsMkpjTk1pdFZIL1lucWpQK00zMXBMVWVUZnpZMUhBWEZEblVCVjMwclE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWNvbnN0YW50LWVsZW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1jb25zdGFudC1lbGVtZW50cy8tL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtY29uc3RhbnQtZWxlbWVudHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CRjVTWG9PK25YM2g1T2hsTjc4WGJiRHJCT2ZmditBeFBQMkVOYUpPVnFqV0NnQkRlT1kzV2NhVWNkZHV0R1Nmb2FwKzVORVEvcS80STNXWkl2Z2tYQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtZGlzcGxheS1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1kaXNwbGF5LW5hbWUvLS9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZS03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBWazNXUFl1ZFJGNXo0R0tNRVlVckxqUGwzOGZKU0tOYUVPa0Z1b3ByaW9vd0d1V042dzJSS3pudUZOU2xKeDdwenpYWFN0UFVuTlNPRU8wakw1RVZ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeC8tL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcm9nNWdaYVZiVWlwNWlXRE1UWWJWTTE1WFFxK1JrVUtoRVQvSUhSNm9pelIrSkVvTjZDQWZUVHVIY0s0dndVeXpjYTMwcXFIcUVwekJPbmFSTVdZTUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3gtZGV2ZWxvcG1lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeC1kZXZlbG9wbWVudC8tL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtanN4LWRldmVsb3BtZW50LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkRodXp3V011SW53Q1llRGVNenlpN1RhQmdSUWVpNkRxeGhieW5pTDcvVkc0UlNTN0h0U0wyUWJZNGVFU3kxS0pxbFd0OGczeGVFQkdQdW8rWHFDOEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1qc3giOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1wdXJlLWFubm90YXRpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1wdXJlLWFubm90YXRpb25zLy0vcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1wdXJlLWFubm90YXRpb25zLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1A0azg1d3gwOXErYnJBclZpblRYaFdpeXpMbDlVcG1HdmEwK21XeUt4azZKWmVxdTA1eDNlVWNJVUUrRnl0dFBLSkZSUlZ0QXZRYUo2WUY5aDFacEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZWdlbmVyYXRvci8tL3BsdWdpbi10cmFuc2Zvcm0tcmVnZW5lcmF0b3ItNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yUjdLZVBPRTdnZkV0TlRoOVF3K2lPM1EvZTRERXNvUStoZHZNNlFVREg3SlJKNXF4cTVBQTUyWnpCV2JJNWk5bGZOdXZ5U2dPR1A4Wk43TEFtYWlQdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAicmVnZW5lcmF0b3ItdHJhbnNmb3JtIjogIl4wLjE1LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVzZXJ2ZWQtd29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlc2VydmVkLXdvcmRzLy0vcGx1Z2luLXRyYW5zZm9ybS1yZXNlcnZlZC13b3Jkcy03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURUdEdLRlJRVURtOHN2aWdKelpIemIvMnhhdFBjNlR6TnZBSUo1R3FPS0RzR0ZZZ0Fza2pSdWxiUi92R3NQS3EzT1BxdGV4bnozMjdxWXBQNTdSRnlBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lLy0vcGx1Z2luLXRyYW5zZm9ybS1ydW50aW1lLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYmc0V3hkMUZXZUZ4M2RhSEZUV2sxcGtTV0svQXlRdWl5QW9lWkFPa0FPVUJqblpQSDZLVDdlTXhvdVY0N3RRNmhsNmF4Mnp5QVdCZFdaWGJydlhsYXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMiI6ICJeMC40LjMiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXBvbHlmaWxsLWNvcmVqczMiOiAiXjAuOC4xIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1wb2x5ZmlsbC1yZWdlbmVyYXRvciI6ICJeMC41LjAiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zaG9ydGhhbmQtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc2hvcnRoYW5kLXByb3BlcnRpZXMvLS9wbHVnaW4tdHJhbnNmb3JtLXNob3J0aGFuZC1wcm9wZXJ0aWVzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdk00ZnE5SVhIc2NYVkt6RHY1aXRrTzFYNTJTbWRGQkZjTUlCWjJGUm4ybnFWWXF3NmRCZXhVZ012QWpIVytLWHBQUFZpRC9ZbzNHckRFQmFSQzBRWUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXNwcmVhZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc3ByZWFkLy0vcGx1Z2luLXRyYW5zZm9ybS1zcHJlYWQtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01WnpEUUlHeXZONHc4K2RNbXBvaEw2TUJvK2wyRzd0ZkMvTzJEZzcvaGpwZ2VXdlV4OEZ6ZmVPS3hHb2c5SWltUGE0WWVrYVE5UGxEcVRMT2xqa2N4Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1za2lwLXRyYW5zcGFyZW50LWV4cHJlc3Npb24td3JhcHBlcnMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1zdGlja3ktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXN0aWNreS1yZWdleC8tL3BsdWdpbi10cmFuc2Zvcm0tc3RpY2t5LXJlZ2V4LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemY3THVOcEhHMGlFZWl5Q053WDRqM2dEZzFqZ3QxazNaZFhCS2JaU29BM0JiR1FHdk1pU3ZmYlpSUjNEcjNhZUplM29vV0ZaeE9PRzNJUlN0WXAyQnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXRlbXBsYXRlLWxpdGVyYWxzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10ZW1wbGF0ZS1saXRlcmFscy8tL3BsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01Y2lPZWhSTmYrRXlVZWV3bzhOa2JRaVVzNGQ2WnhpSG82QmNCY25GbGdpSmZ1MTZxMGJRVXc5SnZvMGIwZ0JLRkcxU01oRFNqZUtYU1l1SkxlRlNNQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdHlwZW9mLXN5bWJvbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdHlwZW9mLXN5bWJvbC8tL3BsdWdpbi10cmFuc2Zvcm0tdHlwZW9mLXN5bWJvbC03LjIyLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJZa0k1bE16TDRrUGlpNEhIRUVDaGtEMHJrYytudm5sUjYrby9xZHFSNnpybTBTdi9ub2RteUxobHEyRE8wWUtMVU5kMlZlUG1QUmpKWFNCaDlPSWRBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10eXBlc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10eXBlc2NyaXB0Ly0vcGx1Z2luLXRyYW5zZm9ybS10eXBlc2NyaXB0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU011YkE5UzdDYjVzR1NGRlVscXh5Q2xUQTl6V0o4cUdRcnBwTlVtMDVMdEZ1TjFFTFJGTm5ka2l4NHpVSnJDOUYrWWl2V3dhMWRITVN5bzBlME45ZEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWFubm90YXRlLWFzLXB1cmUiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWNyZWF0ZS1jbGFzcy1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLWVzY2FwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtZXNjYXBlcy8tL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1lc2NhcGVzLTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYmlFbVZnMUlZQi9yYVVPNXdUMXRnZmFjQ2VmMTVGYnpoa3g0OTNEM3VyQkkrKzZocEorUkZHNFNyV01uME5FWkxmdmlscUtmM1FEclJWWkhvMDhGWWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcHJvcGVydHktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcHJvcGVydHktcmVnZXgvLS9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcHJvcGVydHktcmVnZXgtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IQ0NJYitDYkpJQUU2c1huNUNqRlFYTXdrQ0NsY09mUEN6VGxpbEo4Y1VhdGZ6d0hsV1FrYnRWMHpEMzM4dTlkWnNrd3Z1T1lUdXVhTWFBOEo1RUk1QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLXJlZ2V4cC1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcmVnZXgvLS9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcmVnZXgtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wMjhsYWFPS3B0TjV2SEpmOS9BcnIvSGlKZWtNZDQxaE9FWll2TnNyc1hxSjdZUFl1WDJiUXhoMzFma1p6R21xM1lxSFJKellGRkFWWXZLZk1QS3F5Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLXJlZ2V4cC1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtc2V0cy1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1zZXRzLXJlZ2V4Ly0vcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXNldHMtcmVnZXgtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1saE1maTRGQzE1ajEzZUtyaDNEbllIanBHajZVS1FIdE5LVGJ0YzFpZ3ZBaFJ5NCtrTGhWMDdPcExjc04wVmdERXcvTWpBdkpPNEJkTUpzSHdNaHpDZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY3JlYXRlLXJlZ2V4cC1mZWF0dXJlcy1wbHVnaW4iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wcmVzZXQtZW52IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcHJlc2V0LWVudi8tL3ByZXNldC1lbnYtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1majA2aHc4OWRwaVp6R1p0eG4rUXliaWZGMDduTmlaalo3c2F6czJhVkRjeXNBWlZHalc3KzdpRll4ZzZHTE5NNDdSL3RoWWZMZHJYYysyZjExVmk5QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb21wYXQtZGF0YSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1idWdmaXgtc2FmYXJpLWlkLWRlc3RydWN0dXJpbmctY29sbGlzaW9uLWluLWZ1bmN0aW9uLWV4cHJlc3Npb24iOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLWJ1Z2ZpeC12OC1zcHJlYWQtcGFyYW1ldGVycy1pbi1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiAiNy4yMS4wLXBsYWNlaG9sZGVyLWZvci1wcmVzZXQtZW52LjIiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6ICJeNy44LjQiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcyI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1zdGF0aWMtYmxvY2siOiAiXjcuMTQuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1keW5hbWljLWltcG9ydCI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtZXhwb3J0LW5hbWVzcGFjZS1mcm9tIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXNzZXJ0aW9ucyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1hdHRyaWJ1dGVzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEiOiAiXjcuMTAuNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWxvZ2ljYWwtYXNzaWdubWVudC1vcGVyYXRvcnMiOiAiXjcuMTAuNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjEwLjQiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiAiXjcuMTQuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiAiXjcuMTQuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC11bmljb2RlLXNldHMtcmVnZXgiOiAiXjcuMTguNiIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hcnJvdy1mdW5jdGlvbnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1hc3luYy1nZW5lcmF0b3ItZnVuY3Rpb25zIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYXN5bmMtdG8tZ2VuZXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tYmxvY2stc2NvcGVkLWZ1bmN0aW9ucyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWJsb2NrLXNjb3BpbmciOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1jbGFzcy1wcm9wZXJ0aWVzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3Mtc3RhdGljLWJsb2NrIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tY2xhc3NlcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWNvbXB1dGVkLXByb3BlcnRpZXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1kZXN0cnVjdHVyaW5nIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZG90YWxsLXJlZ2V4IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZHVwbGljYXRlLWtleXMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1keW5hbWljLWltcG9ydCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWV4cG9uZW50aWF0aW9uLW9wZXJhdG9yIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZXhwb3J0LW5hbWVzcGFjZS1mcm9tIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZm9yLW9mIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tZnVuY3Rpb24tbmFtZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWpzb24tc3RyaW5ncyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWxpdGVyYWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1lbWJlci1leHByZXNzaW9uLWxpdGVyYWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy1hbWQiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1tb2R1bGVzLWNvbW1vbmpzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbW9kdWxlcy1zeXN0ZW1qcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtdW1kIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tbmFtZWQtY2FwdHVyaW5nLWdyb3Vwcy1yZWdleCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW5ldy10YXJnZXQiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1udW1lcmljLXNlcGFyYXRvciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9iamVjdC1yZXN0LXNwcmVhZCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9iamVjdC1zdXBlciI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXBhcmFtZXRlcnMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcml2YXRlLW1ldGhvZHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXByb3BlcnR5LWxpdGVyYWxzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVnZW5lcmF0b3IiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1yZXNlcnZlZC13b3JkcyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXNob3J0aGFuZC1wcm9wZXJ0aWVzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc3ByZWFkIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tc3RpY2t5LXJlZ2V4IjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdGVtcGxhdGUtbGl0ZXJhbHMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10eXBlb2Ytc3ltYm9sIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1lc2NhcGVzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tdW5pY29kZS1wcm9wZXJ0eS1yZWdleCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXVuaWNvZGUtcmVnZXgiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS11bmljb2RlLXNldHMtcmVnZXgiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcHJlc2V0LW1vZHVsZXMiOiAiXjAuMS41IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi41IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMyIjogIl4wLjQuMyIsCi0gICAgICAgICJiYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMyI6ICJeMC44LjEiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXBvbHlmaWxsLXJlZ2VuZXJhdG9yIjogIl4wLjUuMCIsCi0gICAgICAgICJjb3JlLWpzLWNvbXBhdCI6ICJeMy4zMC4yIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3ByZXNldC1tb2R1bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wcmVzZXQtbW9kdWxlcy8tL3ByZXNldC1tb2R1bGVzLTAuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BNTd0aDZZUkc3b1IzY3EveXQvWTg0TXZHZ0UwZUpHMkYxSkxoS3V5RytqRnhFZ3JkL0hBTUphdGlGdG1PaVp1cnorMERrcnZiaGVDTGFWNWYySmZqQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjAuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLXVuaWNvZGUtcHJvcGVydHktcmVnZXgiOiAiXjcuNC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLWRvdGFsbC1yZWdleCI6ICJeNy40LjQiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjQuNCIsCi0gICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcHJlc2V0LXJlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcHJlc2V0LXJlYWN0Ly0vcHJlc2V0LXJlYWN0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTStJczNXaWtPcEVKSGdSMzg1SGJ1Q0lUUFRhUFJhTmtpYlRFYTlvaW9mbUp2SXNyY2ViNHlwOVJMOUtiK1RFOEx6bm1leVpxcFArTG9wd2N4NTl4UFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWRpc3BsYXktbmFtZSI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWpzeC1kZXZlbG9wbWVudCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LXB1cmUtYW5ub3RhdGlvbnMiOiAiXjcuMjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcHJlc2V0LXR5cGVzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIyLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wcmVzZXQtdHlwZXNjcmlwdC8tL3ByZXNldC10eXBlc2NyaXB0LTcuMjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWWJQYWFsOUx4enRTR2htbmRSNDZGbUFia0ovMWZBc3cyOTN0U1UrSTVFNWgrY25KM2Q0R1R3eVVnR1ltT1hKWWRHQSt1TmVQbGU0cWJhUnpqMk5JU1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbiI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWpzeCI6ICJeNy4yMi41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLW1vZHVsZXMtY29tbW9uanMiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10eXBlc2NyaXB0IjogIl43LjIyLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3JlZ2pzZ2VuIjogewotICAgICAgInZlcnNpb24iOiAiMC44LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9yZWdqc2dlbi8tL3JlZ2pzZ2VuLTAuOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14L3JxR01kemorZldadkNPWUZvclRnaHpidHFQRFo1Z1B3YW9OR0hkZ0RmRjJRQS9YWmJDQnA0TW9vNXNjcmtBTVBoQjd6MjZYTS9BYUh1SUpkZ2F1QT09IgotICAgIH0sCi0gICAgIkBiYWJlbC9ydW50aW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcnVudGltZS8tL3J1bnRpbWUtNy4yMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lY2p2WWxuQWFaL0tWbmVFL09kS1lCWWZnWFYzUHR1NnpRV21nRUY3dndLaFFudlZTNmJqTUQyWFlnaitTTnZRMUdmSy9wamdva2ZQa0MvMkNPOEN1QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInJlZ2VuZXJhdG9yLXJ1bnRpbWUiOiAiXjAuMTMuMTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3RlbXBsYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNy4yMi4xNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RlbXBsYXRlLy0vdGVtcGxhdGUtNy4yMi4xNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUVBFclVWbTR1eUphNjBya0k3M3FuZURhY3Zkdnp4c2hUM2trc0dxbEdXWWRPVElVT3dKN1JEVUw4c0dxc2xZMXVYV1NMNnhNRktFWERTM294MnVGMHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yMi4xMyIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIyLjE1IiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yMi4xNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIzLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90cmF2ZXJzZS8tL3RyYXZlcnNlLTcuMjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXpwZTU5U1E0OHFHNm51MkN6Y01MYnhVdWR0TitkT005a0RiVXFHcTNIWFVKUmxvN2k4ZnZQb3hRVXpZZ0xaNGNNVm11WmdtOHZ2QnBOZVJoZDZYU3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yMi4xMyIsCi0gICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjIzLjAiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1lbnZpcm9ubWVudC12aXNpdG9yIjogIl43LjIyLjIwIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZSI6ICJeNy4yMy4wIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItaG9pc3QtdmFyaWFibGVzIjogIl43LjIyLjUiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMjIuNiIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIzLjAiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIzLjAiLAotICAgICAgICAiZGVidWciOiAiXjQuMS4wIiwKLSAgICAgICAgImdsb2JhbHMiOiAiXjExLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90eXBlcy8tL3R5cGVzLTcuMjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMG9JeVVmS29JM21TcU12c3hCZGNsRHd4WEtYQVVBOHYvYXBaYmMraVN5QVJZb3UxbzhaR0R4YlVZeUxGb1cyYXJxUzJqREdxSnVadnYxZC9pbzFheGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIiOiAiXjcuMjIuNSIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjIyLjIwIiwKLSAgICAgICAgInRvLWZhc3QtcHJvcGVydGllcyI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJjb2UvdjgtY292ZXJhZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJjb2UvdjgtY292ZXJhZ2UvLS92OC1jb3ZlcmFnZS0wLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGhZUThTQjREYjV6dlpCNGF4ZE1IR3dFYVFqa1p6RmpRaU45TFZZdklGQjJuU1VIVzl0WXB4V3JpUHJXREFTSXhpYVhheDgzUkVjTHh1U2RuR1BadHc9PSIKLSAgICB9LAotICAgICJAY3NzdG9vbHMvbm9ybWFsaXplLmNzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL25vcm1hbGl6ZS5jc3MvLS9ub3JtYWxpemUuY3NzLTEyLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTTBxcXhBY3dDc0lWZnBGUVNsR041WGpYV3U4bDVKRFpOK2ZQdDFMZVc1U1pleFFUZ25hRXZnWEFZK0NleWdSdzBFZXBwV0hpMTJKeEVTV2lXckIwU2c9PSIKLSAgICB9LAotICAgICJAY3NzdG9vbHMvcG9zdGNzcy1jYXNjYWRlLWxheWVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy1jYXNjYWRlLWxheWVycy8tL3Bvc3Rjc3MtY2FzY2FkZS1sYXllcnMtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStLZFlycEtDNVRnb21RcjJEbFpGNGxERXBIY294bmo1SUdkZFlZZkJXSkFLZmoxSnR1SFVJcU1hK0UxcEpKK3oza3ZEVmlXTXF5cVBsRzRKYTdhbVFBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3NlbGVjdG9yLXNwZWNpZmljaXR5IjogIl4yLjAuMiIsCi0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjEwIgotICAgICAgfQotICAgIH0sCi0gICAgIkBjc3N0b29scy9wb3N0Y3NzLWNvbG9yLWZ1bmN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWNvbG9yLWZ1bmN0aW9uLy0vcG9zdGNzcy1jb2xvci1mdW5jdGlvbi0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmMwZjYyV21IZHRSRGpmNWYzZTJTVHdSQWw4OU4yQ0xiKzlpQXd6cnY0TDJobmNyYkR3blFEOVBDcTBndEF0N3BPSTJsZUlWMDhISUJVZDRqeEQ4Y3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1wcm9ncmVzc2l2ZS1jdXN0b20tcHJvcGVydGllcyI6ICJeMS4xLjAiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBjc3N0b29scy9wb3N0Y3NzLWZvbnQtZm9ybWF0LWtleXdvcmRzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWZvbnQtZm9ybWF0LWtleXdvcmRzLy0vcG9zdGNzcy1mb250LWZvcm1hdC1rZXl3b3Jkcy0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWmdybHp1VUFqWElPYzJKdWVLMFg1c1pEakN0Z2ltVnAvTzVDRXFUY3M1U2hXQmE2c21oV1liUzB4NWNWYy8rcnljVERiamp6b1AwS1REblVuZVpHT2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtaHdiLWZ1bmN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWh3Yi1mdW5jdGlvbi8tL3Bvc3Rjc3MtaHdiLWZ1bmN0aW9uLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZSGRFcnU0bzNSc2JqbXU2dkh5NFVLT1haRCtSbjJ6bWtBbUxSZlBldDYrSno0T2p3OGNiV3hlMW40MlZhWFFoRDNDUVVYWFRvb0l5OE9rVmJVY0wrdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAY3NzdG9vbHMvcG9zdGNzcy1pYy11bml0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLWljLXVuaXQvLS9wb3N0Y3NzLWljLXVuaXQtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU90MXJjd1JBYVJITktDOXRBcW9xTlpoamRZQnpLazFQT2dXZmhONHVDT0U0N2ViR2NMUnFYaktrQXBWRHBqaWZMNnUyLzU1ZWtrcG5GY3Arcy9PWlV3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAY3NzdG9vbHMvcG9zdGNzcy1pcy1wc2V1ZG8tY2xhc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNzc3Rvb2xzL3Bvc3Rjc3MtaXMtcHNldWRvLWNsYXNzLy0vcG9zdGNzcy1pcy1wc2V1ZG8tY2xhc3MtMi4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdKUGVWVlpIZCtqeFlkVUxsODdsdmpndldsZFl1K0JjNjJzOXZEL0VENi9RVEdqeTBqeTBVUy9mNkJHNTNzVk1UQkoxbHpLWkZwWW1vZkJOOWVhUmlBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3NlbGVjdG9yLXNwZWNpZmljaXR5IjogIl4yLjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjEwIgotICAgICAgfQotICAgIH0sCi0gICAgIkBjc3N0b29scy9wb3N0Y3NzLW5lc3RlZC1jYWxjIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLW5lc3RlZC1jYWxjLy0vcG9zdGNzcy1uZXN0ZWQtY2FsYy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSkNzUXN3MXdqWXd2MWJKbWdqS1NvWk52ZjdSNit3dUhEQWJpNWYvN01iRmhsMmQvK3YrVHZCVFU0QkpIM0cxWDFIODdkSGwwbWg2VGZZb2diVC9kSlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3Mtbm9ybWFsaXplLWRpc3BsYXktdmFsdWVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLW5vcm1hbGl6ZS1kaXNwbGF5LXZhbHVlcy8tL3Bvc3Rjc3Mtbm9ybWFsaXplLWRpc3BsYXktdmFsdWVzLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qY09hbklidjU1T0ZLUTNzWWVGRC9UMFRpN0FNWGM5bk0xaFpXdThtLzI3MjJnT1R4Rmc3eFl1NFJETEpMZVptUFVWUWxHem80amh6dlRVcTN4NFpVdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAY3NzdG9vbHMvcG9zdGNzcy1va2xhYi1mdW5jdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy1va2xhYi1mdW5jdGlvbi8tL3Bvc3Rjc3Mtb2tsYWItZnVuY3Rpb24tMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5KcEpnc2RBM2RBOXk1cGd5Yi9VZkV6RTdXNUthN3UwQ1gwL0hJTVZCTld6V2VtZGNUSDNYd0FORUNVNmFuV3YvYW80dlZOTFRNeGhpUE5ac1RLNmlBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAY3NzdG9vbHMvcG9zdGNzcy1wcm9ncmVzc2l2ZS1jdXN0b20tcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy1wcm9ncmVzc2l2ZS1jdXN0b20tcHJvcGVydGllcy8tL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMtMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFTQTlXMWFJeTV5Z3NrWll1V2FtczRCemFmRDEyVUx2U3lwbWFMSlQyanZROEcwTTNJOFBSUWhDMGg3bUcwWjNMSTA1K2FnWmpxU1I5K0s5eWFRUWpBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBjc3N0b29scy9wb3N0Y3NzLXN0ZXBwZWQtdmFsdWUtZnVuY3Rpb25zIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLXN0ZXBwZWQtdmFsdWUtZnVuY3Rpb25zLy0vcG9zdGNzcy1zdGVwcGVkLXZhbHVlLWZ1bmN0aW9ucy0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZHowTE5vbzNpanBUT1FxRUpMWThueWFhcGw2dW1ibURjZ2o0QUQwbGdWUTU3MmIyZXFBMWlHWllUVFdocmNySHp0V0REUkFYMkRHWXl3MlZCanZDdlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtdGV4dC1kZWNvcmF0aW9uLXNob3J0aGFuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy10ZXh0LWRlY29yYXRpb24tc2hvcnRoYW5kLy0vcG9zdGNzcy10ZXh0LWRlY29yYXRpb24tc2hvcnRoYW5kLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jMVh3S0oyZU1JV3J6UWVuTjBYYmNmemNrT0xMSmljenF5K1l2Zkdtem9WWGQ3cFQ5RmZPYmlTRWZ6czg0YnBFL1ZxZnBFdUFaOXRDUmJaa1p4eGJkdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAY3NzdG9vbHMvcG9zdGNzcy10cmlnb25vbWV0cmljLWZ1bmN0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvcG9zdGNzcy10cmlnb25vbWV0cmljLWZ1bmN0aW9ucy8tL3Bvc3Rjc3MtdHJpZ29ub21ldHJpYy1mdW5jdGlvbnMtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdvS2FMTy8vLzRiYit6WkMyczgwbCs3Y20wN003MjY4TXN5RzNNMEFjdFhYRUZpNlN1aHZyaVFZY2I1OGlpS0diand3SVU3bjQ1aVJMRUh5cEI0N09nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBjc3N0b29scy9wb3N0Y3NzLXVuc2V0LXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjc3N0b29scy9wb3N0Y3NzLXVuc2V0LXZhbHVlLy0vcG9zdGNzcy11bnNldC12YWx1ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzhKNHJvUEJJTG5lbEFzZExyNFhPQVIvR3NUbTBHSmk0WHBjZnZvV2szVTZLaVRDcWlGWWM2M0toUk1RUVgzNWpZTXA0QW84SWo5K0laUmdNZkpwMWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgIkBjc3N0b29scy9zZWxlY3Rvci1zcGVjaWZpY2l0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3NzdG9vbHMvc2VsZWN0b3Itc3BlY2lmaWNpdHkvLS9zZWxlY3Rvci1zcGVjaWZpY2l0eS0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK09KOWtvbnY5NUNsU1RPSkNtTVpxcGQ1K1lHc0IyUyt4NnczRTFvYU04VXVSNWo4blROSFlTejhjOUJFUEdET0NNUVlJRUVHbFZQai9WWTY0aVRiR3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgIkBlbW90aW9uL2lzLXByb3AtdmFsaWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVtb3Rpb24vaXMtcHJvcC12YWxpZC8tL2lzLXByb3AtdmFsaWQtMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTYxTWY3VWZ4NGFEeHgxeGxEZU9tOGFGRmlnR0hFNHorMHNLQ2ErSUhDZVpLaXlQOVJMRDBNbXg3bThiOS9DZjM3ZjdOQXZRT09KQWJRUUdWcjV1RVJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGVtb3Rpb24vbWVtb2l6ZSI6ICJeMC44LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGVtb3Rpb24vbWVtb2l6ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1vdGlvbi9tZW1vaXplLy0vbWVtb2l6ZS0wLjguMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVzJQMmMvVlJXMS8xdExveDBtVlVhbHZuV1h4YXZtdi9PdW0yYVBzUmNvREp1b2I3NUZDM1k4RmJwZkx3VWVnUmN4SU50R1VNUHEwdEZDdllOVEJYTkE9PSIKLSAgICB9LAotICAgICJAZW1vdGlvbi91bml0bGVzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1vdGlvbi91bml0bGVzcy8tL3VuaXRsZXNzLTAuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LT0VHTXU2ZG1KWnRwYWRiNDc2SXNaQmNsS3ZJTGpvcGpVaWkzVis3TW5YSVFDWWg4VzNOZ05jZ3dvMjFuOUxYWlg2RURJS3ZxZmpZeFhlYkR3eEttUT09IgotICAgIH0sCi0gICAgIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMvLS9lc2xpbnQtdXRpbHMtNC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTEvc0E0ZHdyekJBeWVVb1E2b3hhaEhLbXJadnNuTENnNFJmeFczWkZHR21Ra1NOUVBGTkxWOUNVRUZRUDF4OUVZWEhUbzVwNnhkaFpNMU5lOXAvQWZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMy4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50LWNvbW11bml0eS9yZWdleHBwLy0vcmVnZXhwcC00LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWjViYTczUDk4TzFLVVlDQ0pUVWVWcGphOVJjR29NZG5jWjZUNDlGQ1VsMmxOMzhKdENKKzNXZ0lEQnYwQXVZNFdDaFU1UG10Sm1PQ1RsTjZGWlRGS1E9PSIKLSAgICB9LAotICAgICJAZXNsaW50L2VzbGludHJjIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvZXNsaW50cmMvLS9lc2xpbnRyYy0yLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzVneTZPUWZrK3h4M3EwZDZqR1paQzNmM0t6QWtYYy9JYW5WeGQxaXMvVklJemlScXF0M29uZ1F6MEZpVFVYcVRrMGM3YURCM09hRnVLbnVTb0ppY1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjYuMTIuNCIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjIiLAotICAgICAgICAiZXNwcmVlIjogIl45LjUuMiIsCi0gICAgICAgICJnbG9iYWxzIjogIl4xMy4xOS4wIiwKLSAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAotICAgICAgICAiaW1wb3J0LWZyZXNoIjogIl4zLjIuMSIsCi0gICAgICAgICJqcy15YW1sIjogIl40LjEuMCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIiwKLSAgICAgICAgInN0cmlwLWpzb24tY29tbWVudHMiOiAiXjMuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcmdwYXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMi4wLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04KzlXcWViYkZ6cFg5T1IrV2E2TzI5YXNJb2dlUk16Y0d0QUlOZHBNSEh5QWcxMGYwNWFTRlZCYmNFcUdmL1BYdzFFakFaK3EyL2JFQmczRHZ1ckszUT09IgotICAgICAgICB9LAotICAgICAgICAiZ2xvYmFscyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxMy4yMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFscy8tL2dsb2JhbHMtMTMuMjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFnNVF0VmtDeS9rdjNGVVNsdTR1a2VaRFZmOWVlMGlYTEFVWVgxM2diUjE3Ym5lakZUenI0aVM5Ylk3a3dDZjFOenRSTm0xdDkxZmpPaXl4NENTd1BRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJ0eXBlLWZlc3QiOiAiXjAuMjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqcy15YW1sIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMteWFtbC8tL2pzLXlhbWwtNC4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13cHhaczlOb3haYUpFU0pHSVpUeURFYVlwbDBGS1NBK0ZCOWFKaXllbUtoTXdreFFnNjNoNFQxS0pnVUdIcFRxUEROUmNtbVlMdWdyUmpKbEJ0V3ZSQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYXJncGFyc2UiOiAiXjIuMC4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInR5cGUtZmVzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjIwLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtMC4yMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmUrZUU0cjAvaVducEF4RDg1MnozQStOMEJ0NVJOLy9Oakp3UmQyVkZIRW1yeXd4ZjV2c1psaDRSNmxpeGw2Qit3ei84ZCttYVRTQWtOMUZJa0kzTFE9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkBlc2xpbnQvanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQzLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvanMvLS9qcy04LjQzLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXMyVUhDb2lYZnhNdm1menFvTit2clE4NGFoVVNZZGU5cU5PMU1keG1vRWh5SFdzZm13T3BGbHdZVitlUEpFVmM3Z0ZuQVRHVWkzNzZXb3dYMU43dEZnPT0iCi0gICAgfSwKLSAgICAiQGh1bWFud2hvY29kZXMvY29uZmlnLWFycmF5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMS4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFud2hvY29kZXMvY29uZmlnLWFycmF5Ly0vY29uZmlnLWFycmF5LTAuMTEuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtWVmpRbU5VZXBEVkdYTnVvUlJkbW1FanJ1ajBLZmlHU2JTOExWYzEyTE1zV0RRelJYSjBxZGhOOEw4dVVpZ0twZkVIUmhsYVFGWTBpYjF0blViTmVRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGh1bWFud2hvY29kZXMvb2JqZWN0LXNjaGVtYSI6ICJeMS4yLjEiLAotICAgICAgICAiZGVidWciOiAiXjQuMS4xIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlci8tL21vZHVsZS1pbXBvcnRlci0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnh2ZVY0Vjh2NVliNG5jRlRUM3JQU2daQk9wQ2tqZksweTRvVlZWSndJdURWQlJNRFhyUHlYUkw5ODhpNWFwOW05Ym55RUVqV2ZtNVdrQm10ZmZMZkE9PSIKLSAgICB9LAotICAgICJAaHVtYW53aG9jb2Rlcy9vYmplY3Qtc2NoZW1hIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL29iamVjdC1zY2hlbWEvLS9vYmplY3Qtc2NoZW1hLTEuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ablFNbkxWNGU3aERsVXZ3OEgrVThBU0wwMlNTMkduNis5QWMzd0dHTEllNytqZTJBZUFPeFBZK2l6SVBKRGZGRGI3ZURqZXYwVXM4TU8xaUZSTjhoQT09IgotICAgIH0sCi0gICAgIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvLS9sb2FkLW55Yy1jb25maWctMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZqZUhTbEl6cHYvTnlEM04wWXVIZlhPUERJaXhjQTFxMlpWOTh3c01xY1lsUG12Mm4zWWIybFlQOVhNRWxuYUZWWGc1QTdZTFRlTHU2Vjg0dVFEam1RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FtZWxjYXNlIjogIl41LjMuMSIsCi0gICAgICAgICJmaW5kLXVwIjogIl40LjEuMCIsCi0gICAgICAgICJnZXQtcGFja2FnZS10eXBlIjogIl4wLjEuMCIsCi0gICAgICAgICJqcy15YW1sIjogIl4zLjEzLjEiLAotICAgICAgICAicmVzb2x2ZS1mcm9tIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FtZWxjYXNlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLy0vY2FtZWxjYXNlLTUuMy4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDI4U1RCMTcwbndXUzYzVWp0bEVPRTNkbGRRQXBhSlhaa09JMXVNRmZ6ZjNyUnVQZWdIYUhlc3llZStZeFErVzZTdlJEUVY2VXJkT2RSaVIxNTN3Smc9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXN0YW5idWxqcy9zY2hlbWEvLS9zY2hlbWEtMC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpYUlk0ak52VmdTVlE4REwzTFRjYWthQXRYd1RWVXhFODFoc2xzeUQyQXRvWFcvd1ZvYjEwSGtPSjFYL3BBbGNJN0QrMllvWktnNWRvOEcvdzZSWWdBPT0iCi0gICAgfSwKLSAgICAiQGplc3QvY29uc29sZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvY29uc29sZS8tL2NvbnNvbGUtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wTjB5Wm9mNWhpNDRIQVIycFBTK2lrSjNuektOb1pkVnU4RmZmUmYzd3k0N0k3RG03ZXRrLzNLZXRNZFJVcXpWZDE2VjRPMm0ySVNwTlRibkl1cXkxdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb3JlLy0vY29yZS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9qKzVCK3NETWlNV0xoUEZGKzQvRHZIT2YrVTEwcmd2Q0xHUEhQOFhsc3kvN1F4UzUxYVUvZUJuZ3VkSGxKWG5hV0Q1RW9oQWdKNGpzK1Q2cGErek9nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3JlcG9ydGVycyI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4yLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWNoYW5nZWQtZmlsZXMiOiAiXjI5LjUuMCIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1ydW5uZXIiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3Qtd2F0Y2hlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnFDcUVJU3I1OENlM1UrYnVORkpZVWt0TEpaT2dnZnl2UitiWk1haVYxZThCMVNJdkpid1pNcll6M2d4L0tBUG45RVhtT21OK3VCMDh5TENqV2tRUWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjYiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4xOCIsCi0gICAgICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjEuMSIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAicGlyYXRlcyI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAid3JpdGUtZmlsZS1hdG9taWMiOiAiXjQuMC4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9jb252ZXJ0LXNvdXJjZS1tYXAtMi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1oYXN0ZS1tYXAvLS9qZXN0LWhhc3RlLW1hcC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiYW55bWF0Y2giOiAiXjMuMC4zIiwKLSAgICAgICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJ3YWxrZXIiOiAiXjEuMC44IgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRGZ2xaYU1tV1hiR0hTUUluZlhld0lzZDFMTW45cDNaWEIvNnI0Rk9reWhYMi9pUC9zb01HOThqR3ZrL0EzSEFONzgrNVZXY0JHTzBCSkFQUmg0a2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUvLS9qZXN0LXJlc29sdmUtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItRy9pUVV2WldJNWUzU01Gc3NjNHVnNGRIMGFaaVpwc0RxOW8xUHRYVFYxMjEwWnR5YjIrdytaZ1FrQjNpT2lDNVNtQUV6SkJPSFd6Nkh2cmQrUW5OUHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXBucC1yZXNvbHZlciI6ICJeMS4yLjIiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yOS42LjIiLAotICAgICAgICAgICAgInJlc29sdmUiOiAiXjEuMjAuMCIsCi0gICAgICAgICAgICAicmVzb2x2ZS5leHBvcnRzIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZHejB5TU41ZlVGUlJicEpEUHd4TXBnU1hXMUxES1JPSGZCb3BBdkRjbUQ2cytCL3M4V0pyd2krNGJmSDRTZEluQkE1QzNQM0JJMTlkQnRLengxQXJnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIsCi0gICAgICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC13b3JrZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl44LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJyZXNvbHZlLmV4cG9ydHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLmV4cG9ydHMvLS9yZXNvbHZlLmV4cG9ydHMtMi4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YMlVXNk53M24vYU1nRFZ5KzByU3FnSGx2MzlXWkFsWnJYQ2RuYnlFaUttMTdEU3FIWDRNbVFNYVNUM0ZiZVdSNUZUdVJjVXdZQXppWmFqamkwWTdtZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXBVRU4yT29kdFV6eHZLUWw3MmNVRjdSUTVFaUhzR3ZTc1ZHMGlhOWM1UmJXR0wyQ0k0QzdFcFBTOFVUQklwbG5selppTnVWNTZ3K0Z1Tnh5M3R5MlE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyaXRlLWZpbGUtYXRvbWljLy0vd3JpdGUtZmlsZS1hdG9taWMtNC4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03S3hhdVVkQm1TZFdubXBhR0ZnK3BwTmpLRjh1TkxyeThMeXpqYXVRRE9WT05mRkxOS3JLdlFPeFovVnVUSWNTL2dnZS9ZTmFoZjVSSUlRV1RTYXJsZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKLSAgICAgICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjciCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQGplc3QvZW52aXJvbm1lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Vudmlyb25tZW50Ly0vZW52aXJvbm1lbnQtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BRWNXNDNDN2h1R2Qvdm9nVGRkTk5URFJwTzZ2UTJ6YVFOcnR0dldWMThBckJ4OVo1Nmg3QklzWGtORkpWT080L2tibFdFUXozMGNrdzArTDNpemMrUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9leHBlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2V4cGVjdC8tL2V4cGVjdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW02RHJFSnhWS2prRUxUVkF6dFRMeVMvN0M5MlkyYjBWWXFtRFJPWUtMTEFMSG44VC8wNHlQczcwTkFEVVlQclYzcnVJK0gzSjBpVUl1aGtqcDd2a2ZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXhwZWN0IjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1zbmFwc2hvdCI6ICJeMjkuNi4yIgotICAgICAgfQotICAgIH0sCi0gICAgIkBqZXN0L2V4cGVjdC11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZXhwZWN0LXV0aWxzLy0vZXhwZWN0LXV0aWxzLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNnpJaE04Z28zUlYySUc0YUlaYVpieHdwT3p6M1ppTTIzb3hBbGtxdU9Jb2xlK0c2VHJiZVhueWt4V1lscUY3a3oySGxCamRLdGNhMjB4OWF0a0VRWWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQGplc3QvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ldVpEbUlsV2ptMVowbEoxRDBmN2EwL3k1S2gva29MRk1VQkU1U1VZV3JteThvTmhKcGJUQkRBUDZDeEtuYWRjTUxEb0RmNHdhUllDZTM1Y0g2RzZQQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHNpbm9uanMvZmFrZS10aW1lcnMiOiAiXjEwLjAuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9nbG9iYWxzIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9nbG9iYWxzLy0vZ2xvYmFscy0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNqdUptTkRqczZhTWlqQ21TYTFnMlRORzRMYnkvQWVVNy8wMlZ0cFcrU0xjWlh6T0xLMkdwTjJuTHFjRmptaHkzQjNBb1BlUVZ4N0JueU9mNjgxYkF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC9leHBlY3QiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9yZXBvcnRlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3JlcG9ydGVycy8tL3JlcG9ydGVycy0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNXdGlqcnZJYXY4TGdmSlpsckdDZE4wblAyRVdiYWtnbEpZNDlKMVk1UWloY1FMZnk3b3Z5eHhqSkJSWE1ObHRndDR1UHRFY0ZtSU1iVnNoRURmRld3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJjb2UvdjgtY292ZXJhZ2UiOiAiXjAuMi4zIiwKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjE4IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogIl41LjEuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItcmVwb3J0IjogIl4zLjAuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItc291cmNlLW1hcHMiOiAiXjQuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMS4zIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNC4wLjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiLAotICAgICAgICAidjgtdG8taXN0YW5idWwiOiAiXjkuMC4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHJhbnNmb3JtLy0vdHJhbnNmb3JtLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpxQ3FFSVNyNThDZTNVK2J1TkZKWVVrdExKWk9nZ2Z5dlIrYlpNYWlWMWU4QjFTSXZKYndaTXJZejNneC9LQVBuOUVYbU9tTit1QjA4eUxDaldrUVFnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTgiLAotICAgICAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl40LjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9jb252ZXJ0LXNvdXJjZS1tYXAtMi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1oYXN0ZS1tYXAvLS9qZXN0LWhhc3RlLW1hcC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiYW55bWF0Y2giOiAiXjMuMC4zIiwKLSAgICAgICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJ3YWxrZXIiOiAiXjEuMC44IgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRGZ2xaYU1tV1hiR0hTUUluZlhld0lzZDFMTW45cDNaWEIvNnI0Rk9reWhYMi9pUC9zb01HOThqR3ZrL0EzSEFONzgrNVZXY0JHTzBCSkFQUmg0a2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXdvcmtlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdvcmtlci8tL2plc3Qtd29ya2VyLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWwzY2NCT2FiVGRrbmc4SS9PUkNrQUR6NGVTTUtlalRZdjF2Qi9aODNVaXVicWhDMW9RNUxpNmRXQ3lxT0l2U2lmR2pVQnh1dnh2bG02S0dLMkR0dUFRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci04LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAid3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTQuMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0t4YXVVZEJtU2RXbm1wYUdGZytwcE5qS0Y4dU5Mcnk4THl6amF1UURPVk9OZkZMTktyS3ZRT3haL1Z1VEljUy9nZ2UvWU5haGY1UklJUVdUU2FybGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkBqZXN0L3NjaGVtYXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NjaGVtYXMvLS9zY2hlbWFzLTI5LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcnhMalh5SkJUTDRMUWVKVzNhS28wTS8rR2tDT1hzTys4aTlJdTdlRGI2S3d0UDY1YXlvRHNpdHJkUEJ0dWp4UTg4azR3STJGTllmYTZUT0d3U242Y1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBzaW5jbGFpci90eXBlYm94IjogIl4wLjI3LjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGplc3Qvc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3Qvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMjkuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vQStJMlNISFFHeERDWnBicnNDUVNvTUxiM0J6NTQ3Sm5NK2pVcjlxRWJ1dzB2UWxXWmZwUFM3Q085SjdYaXdLaWNFejlPRm4vSVlvTGtraVVEN2J6QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4xOCIsCi0gICAgICAgICJjYWxsc2l0ZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC90ZXN0LXJlc3VsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1yZXN1bHQvLS90ZXN0LXJlc3VsdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNWS0ZYemNWNDJFWWhNQ3NKUVVScHRTcW55anFDR2J0THVYNVh4YjZQbTZnVWYxd0lSSWwrbWFuZElSR0p5V0tnTktZRjljbnN0dGk2THM1ZWtkdXF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkBqZXN0L3Rlc3Qtc2VxdWVuY2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90ZXN0LXNlcXVlbmNlci8tL3Rlc3Qtc2VxdWVuY2VyLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1ZZaTZQZlB3VmVqTzdzbHc2SURPMHFLVnVtNWp0ckozS29MR2JnQld5cjJxcjRHYXhGVjZzdStaQWpkVFg3NVNyMURrTUZSazA5cjJaVmErd3RDR3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1oYXN0ZS1tYXAvLS9qZXN0LWhhc3RlLW1hcC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiYW55bWF0Y2giOiAiXjMuMC4zIiwKLSAgICAgICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJ3YWxrZXIiOiAiXjEuMC44IgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRGZ2xaYU1tV1hiR0hTUUluZlhld0lzZDFMTW45cDNaWEIvNnI0Rk9reWhYMi9pUC9zb01HOThqR3ZrL0EzSEFONzgrNVZXY0JHTzBCSkFQUmg0a2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXdvcmtlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdvcmtlci8tL2plc3Qtd29ya2VyLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWwzY2NCT2FiVGRrbmc4SS9PUkNrQUR6NGVTTUtlalRZdjF2Qi9aODNVaXVicWhDMW9RNUxpNmRXQ3lxT0l2U2lmR2pVQnh1dnh2bG02S0dLMkR0dUFRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci04LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQGplc3QvdHJhbnNmb3JtIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pcE9ONld0WWdsLzEzMjlnNUFJSlZiVXVFaDB3WlZiZHBHd0M5OUp3NEx3dW9CTlM5NU1WcGhVNnpPZUQ5cERrb24rTExiRkw3bE9RUmFwYkI4U0NIdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjEuMCIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS40LjAiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4NDZpSjlRcHdRVGpJZHE1Vkp1MlFUTU1zM1FsRWpJMHgxUWJCUDVXMStuTXp5YzJYbWltaVJSL0NiWDlUTzBjUFRlVWx4V01PdThtc2xZc0o4REV3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNi4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nLy0vZ2VuLW1hcHBpbmctMC4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhMaFNXT0xSaTg3NXpqak1HL3IrTnYwb0NXOHVtR2IwQmdFaHlYM2REWDNlZ3dadEI4UHFMbmp6M3llZHQ4UjVTdEJyemNnNGFCcG5oOFVBOUQxQm9RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvc2V0LWFycmF5IjogIl4xLjAuMSIsCi0gICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiAiXjEuNC4xMCIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJAanJpZGdld2VsbC9yZXNvbHZlLXVyaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9yZXNvbHZlLXVyaS8tL3Jlc29sdmUtdXJpLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GMm1zbGEzdGFkK01maHQ1Y0pxN0xTWGNkdWRLVFdDVllVZ3c2cExGT09IU1R0WmxqNlNXTllBcCtBaHVxTG1XZEJPMlg1aFByTGN1OGNWUDhmeTI4dz09IgotICAgIH0sCi0gICAgIkBqcmlkZ2V3ZWxsL3NldC1hcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9zZXQtYXJyYXkvLS9zZXQtYXJyYXktMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhua3NldU5BRE0wZ3QyYnMrQnZoTzBwNzhNazc2MlluWmRzdXpGVjAxOE5vRzFTajFTQ1F2cFNxYTdYVWFUYW01dkFHYXNBQlY5cVhBU01LbkZNd013PT0iCi0gICAgfSwKLSAgICAiQGpyaWRnZXdlbGwvc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYitmc1pYZUxZaTlmRVVMbWZCcmh4bjRJclBsSU5mOGZpTmFyelRvZjAwNHYzbEZkbnRkd2E5UEY3dkZKcW0zbWc3cytTY0pNeFhhRTNBY3AxaXJaY2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjAiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjE1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMvLS9zb3VyY2VtYXAtY29kZWMtMS40LjE1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lRjJyeENSdWxFS1hIVFJpRHJEeTZlck1ZV3FOdzRMUGRROFVRQTRodXV4YVFzVmVSUEZsMm9NOG9ER3hNRmhKVVdaZjlNY3BMdEphc0REWmIvQnBlZz09IgotICAgIH0sCi0gICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMTgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvLS90cmFjZS1tYXBwaW5nLTAuMy4xOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdytuaUpZek1IZGQ3VVNkaUgyVTY4NjlucWhEMm5iZlpYTkQ1WXA5M3FJYkVtbkROazdQRDQ4bytZY2hSVnB6TVU3TTZqVkNiZW5UUjdQQTFGTFE5cEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC9yZXNvbHZlLXVyaSI6ICIzLjEuMCIsCi0gICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiAiMS40LjE0IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS40LjE0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjLy0vc291cmNlbWFwLWNvZGVjLTEuNC4xNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhQU0pIV21pMzk0ZnVVdXpEbkd6MXdpS3FXZm8xeVhlY0hRTVJmMmw2aHp0VE8rblBydTY1OEF5RG5nYUJlN2lzSXhFa1JzUFIzRlpoK3M3aVZhNFV3PT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAbGVpY2h0Z2V3aWNodC9pcC1jb2RlYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbGVpY2h0Z2V3aWNodC9pcC1jb2RlYy8tL2lwLWNvZGVjLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IY3YrblZDMGtablEzdEQ5R1Z1NXhTTVI0VlZZT3RlUUlyL2h3RlBWRXZQZGxYcWdHRXVSamloZUNoSGdkTStKeXFkZ05jbXpaT1gvdG5sMEpPaUk3QT09IgotICAgIH0sCi0gICAgIkBuaWNvbG8tcmliYXVkby9lc2xpbnQtc2NvcGUtNS1pbnRlcm5hbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMS12MSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5pY29sby1yaWJhdWRvL2VzbGludC1zY29wZS01LWludGVybmFscy8tL2VzbGludC1zY29wZS01LWludGVybmFscy01LjEuMS12MS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNTQvSlJ2a0xJenpEV3NoQ1dmdWhhZGZyZlpWUGlFbFk4RmNnbWcxSHJvRWx5L0VEU3N6emhCQXNhckN1eCtEL2tPc2xUUnF1Tnp1eUdTbVVTVFRIR2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlc2xpbnQtc2NvcGUiOiAiNS4xLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludC1zY29wZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1zY29wZS8tL2VzbGludC1zY29wZS01LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJOeHdiRi9oWjBLcGVwWU4wY05ibytGTjZYb0s3R2FIbFFoZ3gvaElabDZWYTBiRjQ1UlFPT3doTEl5OGxRRGJ1Q2lhZFNMQ0JuSDJDRllxdWl0NWJ3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJlc3JlY3Vyc2UiOiAiXjQuMy4wIiwKLSAgICAgICAgICAgICJlc3RyYXZlcnNlIjogIl40LjEuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJlc3RyYXZlcnNlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtNC4zLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zOW5uS2ZmV3o4eE4xQlUvMmM3OW45bkI5SER6bzBuaVlVcXg2eHlxVW55b0FuUXl5V3BPVGRaRWVpQ2NoOEJCdTUxNXQ0d3A5Wm1nVmZWaG45RUJwdz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQG5vZGVsaWIvZnMuc2NhbmRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Abm9kZWxpYi9mcy5zY2FuZGlyLy0vZnMuc2NhbmRpci0yLjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnEyNEJxM3ltNUhFUW0yTktDcjN5WER3amM3dlRzRVRoUkRua3AyREs5cDF1cUxSK0RIdXJtL05PVG8wS0c3SFlIVTdlcHBLWmozTXlxWXVNQmY2Mmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAbm9kZWxpYi9mcy5zdGF0IjogIjIuMC41IiwKLSAgICAgICAgInJ1bi1wYXJhbGxlbCI6ICJeMS4xLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQG5vZGVsaWIvZnMuc3RhdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Abm9kZWxpYi9mcy5zdGF0Ly0vZnMuc3RhdC0yLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmtoUFBwMnpycURBUUEvMmpOaG56dGNQQWx2NjRYZGhJcDdhNzQ1NEE1b3ZJN0J1a3hndDdNWDd1ZHdBdTN6ZzFEY3BQVTByejNWVjFTZWFxdlk0K0E9PSIKLSAgICB9LAotICAgICJAbm9kZWxpYi9mcy53YWxrIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bub2RlbGliL2ZzLndhbGsvLS9mcy53YWxrLTEuMi44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vR0IrVXhsZ1djZ1FrZ3dvOEdjRUd3ZW1vVEZ0M0ZJTzlhYmFiQm1hR3dYSW9CS1orR1R5MHBQMTg1YmVHZzdMbGloL05TSFNWMlhBczFsbnpub2NTZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBub2RlbGliL2ZzLnNjYW5kaXIiOiAiMi4xLjUiLAotICAgICAgICAiZmFzdHEiOiAiXjEuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBtbW13aC9yZWFjdC1yZWZyZXNoLXdlYnBhY2stcGx1Z2luLy0vcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbi0wLjUuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWowWWEwaENGWlBkNHg0MHFMemJoR3NoOVRNdGRiK0NKUWlzbytXeExPUE5hc29ocTljYzVTTlVjd3NaYVJINisrWGg5MVhrbS94SENrdUlpSXUwTFVBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW5zaS1odG1sLWNvbW11bml0eSI6ICJeMC4wLjgiLAotICAgICAgICAiY29tbW9uLXBhdGgtcHJlZml4IjogIl4zLjAuMCIsCi0gICAgICAgICJjb3JlLWpzLXB1cmUiOiAiXjMuMjMuMyIsCi0gICAgICAgICJlcnJvci1zdGFjay1wYXJzZXIiOiAiXjIuMC42IiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKLSAgICAgICAgImh0bWwtZW50aXRpZXMiOiAiXjIuMS4wIiwKLSAgICAgICAgImxvYWRlci11dGlscyI6ICJeMi4wLjQiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjcuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmluZC11cCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAvLS9maW5kLXVwLTUuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzgvUFhUMXdsTExEZ1R6RHM3c2pxOWh6ejB2WEQrem4rN3d5cEVlNGZYUXhDbWRtcWZHc0VQUXhtaUNTUUkzYWpGVjkxYlZTc3ZOdHJKUmlXNm5Hbmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxvY2F0ZS1wYXRoIjogIl42LjAuMCIsCi0gICAgICAgICAgICAicGF0aC1leGlzdHMiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImxvY2F0ZS1wYXRoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC02LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlQWks2ZVlqYnhSdTN1QjQvV1ozRXNFSU1KRk1xQW9vcGwzUit6dXEwVWpjQW0vTU82S0N3ZURnUGZQM2VsVHp0b0tQM0t0blZIeFRuMk5IQlNEVlV3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJwLWxvY2F0ZSI6ICJeNS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicC1saW1pdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTMuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFlPYW5NM3dHd05Hc1pOMmNWVFlQQXJ3NDU0eG5YajVxbVdGMWJFb0FjNCtjVS9vbDdHVmg3b2RldmpwMUZOSGR1SGMzS1pNY0ZkdXhVNVhjNnVKUlE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwLWxvY2F0ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MYU5qdFJXVUJZKyt6QjVuRS9Od2Nhb015bFNQaytTK1pITkIxVHpkYk1KTW55NmR5bnBBR3Q3WC90bC9RWXEzVEllRTZueEhwcGJvMkxHeW1yRzVQdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAicC1saW1pdCI6ICJeMy4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQHJvbGx1cC9wbHVnaW4tYmFiZWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW4tYmFiZWwvLS9wbHVnaW4tYmFiZWwtNS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdGZmRMV1UveFZXS2VSUW5LbUlBUVVMVUk3SWwwZ1puQklIL1pGTzA2OXdZSWZQdSs4enJmcC9LTVcwYXRtRUxvUkRxOEZiaVAzVkNzczlNaEN1dDdRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cyI6ICJeNy4xMC40IiwKLSAgICAgICAgIkByb2xsdXAvcGx1Z2ludXRpbHMiOiAiXjMuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkByb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlLy0vcGx1Z2luLW5vZGUtcmVzb2x2ZS0xMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXljMm40M2pjcVZ5R0Uyc3FWNS9ZQ21vY3k5QXJqVkFQL0JlWHlUdEFEVEJCWDZWMGU1VU1xd084Q2RRMGt6amI2enU1UDFxTXpzU2NDTVJ2RTlPbFZnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHJvbGx1cC9wbHVnaW51dGlscyI6ICJeMy4xLjAiLAotICAgICAgICAiQHR5cGVzL3Jlc29sdmUiOiAiMS4xNy4xIiwKLSAgICAgICAgImJ1aWx0aW4tbW9kdWxlcyI6ICJeMy4xLjAiLAotICAgICAgICAiZGVlcG1lcmdlIjogIl40LjIuMiIsCi0gICAgICAgICJpcy1tb2R1bGUiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMTkuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnVpbHRpbi1tb2R1bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnVpbHRpbi1tb2R1bGVzLy0vYnVpbHRpbi1tb2R1bGVzLTMuMy4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItemhhQ0RpY2RMdVdONVViTjVJTW5GcU5NaE5mbzkxOXNIODV5Mi9lYSs1WWc5VHNUa2VaeHBMK0pMYnA2Y2dZRlM0c1JMcDNZVjRTNnlEdXFWV0hZT3c9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkByb2xsdXAvcGx1Z2luLXJlcGxhY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW4tcmVwbGFjZS8tL3BsdWdpbi1yZXBsYWNlLTIuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JR2N1K2N5ZGxVTVo1RW44NWp4SEg0cWoyaHRhLzExQkhxOTVpSEV5YjJzYmdpTjBlQ2R6dlVjSHc1Z3Q5cEJMNWxUaTRKRFlKMWFjQ29NR3BUdkVaZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkByb2xsdXAvcGx1Z2ludXRpbHMiOiAiXjMuMS4wIiwKLSAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4yNS43IgotICAgICAgfQotICAgIH0sCi0gICAgIkByb2xsdXAvcGx1Z2ludXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJvbGx1cC9wbHVnaW51dGlscy8tL3BsdWdpbnV0aWxzLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ha3NaNnByNlRwSWpIbThoOWxTUThwaThCRTlWZXViTlQwT01KM0I1dVpKOHB6NzNOUGlxT3RDb2cveDIvUXpNMUVOQ2hQS3hNRGhpUXVSSHNxYytsZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiMC4wLjM5IiwKLSAgICAgICAgImVzdHJlZS13YWxrZXIiOiAiXjEuMC4xIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4wLjM5IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2VzdHJlZS8tL2VzdHJlZS0wLjAuMzkudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FWU53cDNiVSs5OGNwVTRsQVdZWUw3WnorMmdyeVdIMXFiZERUaWRWZDZoa2lSNndla3NkYk1hZHlYS1hOUEVrUUZoWE0raFZPOVp5Z29tSFhwK0FJdz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQHJ1c2hzdGFjay9lc2xpbnQtcGF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHJ1c2hzdGFjay9lc2xpbnQtcGF0Y2gvLS9lc2xpbnQtcGF0Y2gtMS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVYrTXZHd2FISDAzaFloWStrNkVmL3hLZDZSWWxjNHE4V0J4KzJBTm1pcEhKY0t1a3ROY0kvTmdFc0pnZFNVRjZMdzMybmpUNk9uclJzS1lDZGdIall3PT0iCi0gICAgfSwKLSAgICAiQHNpbmNsYWlyL3R5cGVib3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI3LjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5jbGFpci90eXBlYm94Ly0vdHlwZWJveC0wLjI3LjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStGajQzcFNNd0pzNEtSckgvOTM4VWYrdUFFTElnVkJtUXpnL3ExWUcxMGRqeWZBM1RuclU4TjhYenFDaC9va1pkc3pxQlFUWmY5NmlkTWZFNWxud1RBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJAc2lub25qcy9jb21tb25zIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2NvbW1vbnMvLS9jb21tb25zLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qWEJ0V0FGNHZtZE5tWmdENUZvS3NWTHYzclBnRG5MZ1BiVTg0TElKM290VjQ0dkpsRFJva1ZuZzV2OE5GSmRDZi9kYTlsZWdIY0thUnVaczRMN2ZhQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInR5cGUtZGV0ZWN0IjogIjQuMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMTAuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9mYWtlLXRpbWVycy8tL2Zha2UtdGltZXJzLTEwLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVjRCRzA3a3VZU1VrVENTQkhHOEc4VE5oTStGMTlqWEZXblF0emord2U4RHJrcFNCQ2VlOVozTXM4eWlHZXIvZGxtaGUzNS9YZGd5bzMvMHJRS2c3WUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAc2lub25qcy9jb21tb25zIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAc3VybWEvcm9sbHVwLXBsdWdpbi1vZmYtbWFpbi10aHJlYWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN1cm1hL3JvbGx1cC1wbHVnaW4tb2ZmLW1haW4tdGhyZWFkLy0vcm9sbHVwLXBsdWdpbi1vZmYtbWFpbi10aHJlYWQtMi4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxSOHEvOVc3aFpwTVd3ZU5pQUtVN05RZXJCbnpRUUx2aThxblREVS9meEl0UGh0WlZNYlBWM2xiQ3dqaElsTkJlOUJicjVWK0tIc2h2V21WU0c5Y3hRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZWpzIjogIl4zLjEuNiIsCi0gICAgICAgICJqc29uNSI6ICJeMi4yLjAiLAotICAgICAgICAibWFnaWMtc3RyaW5nIjogIl4wLjI1LjAiLAotICAgICAgICAic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbCI6ICJeNC4wLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLWFkZC1qc3gtYXR0cmlidXRlIjogewotICAgICAgInZlcnNpb24iOiAiNS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL2JhYmVsLXBsdWdpbi1hZGQtanN4LWF0dHJpYnV0ZS8tL2JhYmVsLXBsdWdpbi1hZGQtanN4LWF0dHJpYnV0ZS01LjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWkZmMmdzLzgvNkI4UG5Tb2ZJMGluWVhyMlNETlREU2NQWGhON2s1RXFENGFaM2dpNnUrcmJtWkhWQjhJTTN3RHl4OG50S0FDWmJ0WFNtN29aR1JxVmc9PSIKLSAgICB9LAotICAgICJAc3Znci9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1hdHRyaWJ1dGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXJlbW92ZS1qc3gtYXR0cmlidXRlLy0vYmFiZWwtcGx1Z2luLXJlbW92ZS1qc3gtYXR0cmlidXRlLTUuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15YVM0bzJQZ1V0d0xGR1RLYnNpQXk2RDBvM3VnY1VoV0swWjQ1dW1KNjZFUFd1bkF6OWZ1RncyZ0p1amU2d3FRdlFXT1RKdklhaFV3bmRPWGI3UUNQZz09IgotICAgIH0sCi0gICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1yZW1vdmUtanN4LWVtcHR5LWV4cHJlc3Npb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXJlbW92ZS1qc3gtZW1wdHktZXhwcmVzc2lvbi8tL2JhYmVsLXBsdWdpbi1yZW1vdmUtanN4LWVtcHR5LWV4cHJlc3Npb24tNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxBNzIrODhBMTFORC95RklNenl1TFJTTUordFJLZVlLZVErbVIzRGNBWjVJNGg1Q1BXTjlBSHlVekpiV1NZcC91MnUweGhtZ09lMCtFNDErR2pFdWVBPT0iCi0gICAgfSwKLSAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLXJlcGxhY2UtanN4LWF0dHJpYnV0ZS12YWx1ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wbHVnaW4tcmVwbGFjZS1qc3gtYXR0cmlidXRlLXZhbHVlLy0vYmFiZWwtcGx1Z2luLXJlcGxhY2UtanN4LWF0dHJpYnV0ZS12YWx1ZS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUG9pRTZaRDJFaXk1bUsrZmpIcXdHT1MrSVhYMHdxL1lEdE55SWdPcmM2ZWpGbnhONGIxM3BScGlJUGJ0UHdIRWMrTlQyS0NqdGVBY3EzMy9GMVk5S1E9PSIKLSAgICB9LAotICAgICJAc3Znci9iYWJlbC1wbHVnaW4tc3ZnLWR5bmFtaWMtdGl0bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXN2Zy1keW5hbWljLXRpdGxlLy0vYmFiZWwtcGx1Z2luLXN2Zy1keW5hbWljLXRpdGxlLTUuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16U09aSDhQZFpPcHVHMVpWeC9jTFZlUEIyaWJvM1dQcHFvN2dGSWpMVjlhMFFzdVFBekppd3dxbXVFZFRhVzJwZWd5QkUxN1V1MTVtT2dPY2dhYlFaZz09IgotICAgIH0sCi0gICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1zdmctZW0tZGltZW5zaW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wbHVnaW4tc3ZnLWVtLWRpbWVuc2lvbnMvLS9iYWJlbC1wbHVnaW4tc3ZnLWVtLWRpbWVuc2lvbnMtNS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNQekRiREE1b1Qvc1BYRENVWW9WWEVtbTNWSW9BV0FQVDZtU1BUSk5iUWFCTlV1RUtWS3lHSDkzb0RZNGU0MlBZSFJXNjdONWFsSngvZUVvbDIwYWJ3PT0iCi0gICAgfSwKLSAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1uYXRpdmUtc3ZnIjogewotICAgICAgInZlcnNpb24iOiAiNS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVhY3QtbmF0aXZlLXN2Zy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVhY3QtbmF0aXZlLXN2Zy01LjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VZUC9TYW9wWjQxR0h3WG1hN1JteGN2OXVSc2xSRFRZMWVzdHNwZUIxdzF1ZVpXZC90UGxNZkVPb2NjWXBFTVpVM2pENE9VN1lpdG5YY0Y1aExXMlE9PSIKLSAgICB9LAotICAgICJAc3Znci9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXN2Zy1jb21wb25lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1zdmctY29tcG9uZW50Ly0vYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1zdmctY29tcG9uZW50LTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNGpTSDFVVXZicnNPdGxvL3RLY2dTZWlDSFJTQmRYb0lvcVgxcGdjS0svYVUzSkQyN3dtTUt3R3RwQjhxUllVWW95WHZmR3hVVktjaEx1UjVwQjNyUT09IgotICAgIH0sCi0gICAgIkBzdmdyL2JhYmVsLXByZXNldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9iYWJlbC1wcmVzZXQvLS9iYWJlbC1wcmVzZXQtNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRGaVhCanZRK3oyajd5QVNlR1BFaThWRC81cnJHUWs0WHJxM0VkSm1vWmd6L3RwcUNocG81aGdYRHZtRWF1d3R2T2M1MnE4Z2hoWks0T3k3cXBoNGlnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLWFkZC1qc3gtYXR0cmlidXRlIjogIl41LjQuMCIsCi0gICAgICAgICJAc3Znci9iYWJlbC1wbHVnaW4tcmVtb3ZlLWpzeC1hdHRyaWJ1dGUiOiAiXjUuNC4wIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1yZW1vdmUtanN4LWVtcHR5LWV4cHJlc3Npb24iOiAiXjUuMC4xIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1yZXBsYWNlLWpzeC1hdHRyaWJ1dGUtdmFsdWUiOiAiXjUuMC4xIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi1zdmctZHluYW1pYy10aXRsZSI6ICJeNS40LjAiLAotICAgICAgICAiQHN2Z3IvYmFiZWwtcGx1Z2luLXN2Zy1lbS1kaW1lbnNpb25zIjogIl41LjQuMCIsCi0gICAgICAgICJAc3Znci9iYWJlbC1wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LW5hdGl2ZS1zdmciOiAiXjUuNC4wIiwKLSAgICAgICAgIkBzdmdyL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tc3ZnLWNvbXBvbmVudCI6ICJeNS41LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHN2Z3IvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci9jb3JlLy0vY29yZS01LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcTUyVk9jc0pQdlYzak8xd2tQdHpUdUtsdlg3WTN4SWNXUnBDTXRCRjNNcnRlWkp0QmZRdy8rdTBCMUJIeTVDb2xwUWMxL1lWVHJQRXRTWUlNTlpsclE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAc3Znci9wbHVnaW4tanN4IjogIl41LjUuMCIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgImNvc21pY29uZmlnIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAc3Znci9oYXN0LXV0aWwtdG8tYmFiZWwtYXN0IjogewotICAgICAgInZlcnNpb24iOiAiNS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL2hhc3QtdXRpbC10by1iYWJlbC1hc3QvLS9oYXN0LXV0aWwtdG8tYmFiZWwtYXN0LTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jQWFSL0NBaVpSQjhHUDMyTisxam9jb3ZVdHZsajArZTY1VEI1MC82TGNpbWUrRUE0OW0vOGwrUDJrbytYUEo0ZHczeGFQUzNqT0w0RjJYNEtXeG9lUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xMi42IgotICAgICAgfQotICAgIH0sCi0gICAgIkBzdmdyL3BsdWdpbi1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN2Z3IvcGx1Z2luLWpzeC8tL3BsdWdpbi1qc3gtNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVYvd1ZoMzNqMTJoR2gwNUlEZzhHcElVWGJqQVBuVGRQVEt1UDRWTkxnZ253YUhNUE5RTmFlMnBSbnlUQUlMV0NRZHo1R3lNcXRPNDg4ZzdDS004Q0JBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTIuMyIsCi0gICAgICAgICJAc3Znci9iYWJlbC1wcmVzZXQiOiAiXjUuNS4wIiwKLSAgICAgICAgIkBzdmdyL2hhc3QtdXRpbC10by1iYWJlbC1hc3QiOiAiXjUuNS4wIiwKLSAgICAgICAgInN2Zy1wYXJzZXIiOiAiXjIuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIkBzdmdyL3BsdWdpbi1zdmdvIjogewotICAgICAgInZlcnNpb24iOiAiNS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzdmdyL3BsdWdpbi1zdmdvLy0vcGx1Z2luLXN2Z28tNS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXI1c3dLazQ2R3VRbDRSclZlalZ3cGVlSmF5ZG94a2R3a00xbUJLT2dKTEJVSlBHYUxjaTZ5bGcvSWpoclJzUkVLRGtyNGtiTVdkZ090YlhFaDBmeUxRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY29zbWljb25maWciOiAiXjcuMC4wIiwKLSAgICAgICAgImRlZXBtZXJnZSI6ICJeNC4yLjIiLAotICAgICAgICAic3ZnbyI6ICJeMS4yLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHN2Z3Ivd2VicGFjayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3Znci93ZWJwYWNrLy0vd2VicGFjay01LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRE9CT0syNTV3ZlF4Z3VVdGEySU5La3pQajZBSVM2aWFmWllpWW1IbjZXM3BIbHljU1JSbHZXS0NmTERHMTBmWGZMV3FFM0RKSGdSVU95SlltQVJhN2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMi4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tdHJhbnNmb3JtLXJlYWN0LWNvbnN0YW50LWVsZW1lbnRzIjogIl43LjEyLjEiLAotICAgICAgICAiQGJhYmVsL3ByZXNldC1lbnYiOiAiXjcuMTIuMSIsCi0gICAgICAgICJAYmFiZWwvcHJlc2V0LXJlYWN0IjogIl43LjEyLjUiLAotICAgICAgICAiQHN2Z3IvY29yZSI6ICJeNS41LjAiLAotICAgICAgICAiQHN2Z3IvcGx1Z2luLWpzeCI6ICJeNS41LjAiLAotICAgICAgICAiQHN2Z3IvcGx1Z2luLXN2Z28iOiAiXjUuNS4wIiwKLSAgICAgICAgImxvYWRlci11dGlscyI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHRlc3RpbmctbGlicmFyeS9kb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHRlc3RpbmctbGlicmFyeS9kb20vLS9kb20tOS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBER1BkOUFSMytpRFRqR29NcHhJa0FzVWloSFozQWk2Q25lVTZiUlJyZmZYTWd6Q2RsTms0M2pUckQyLzVMVDZDQmIzTVdUUDh2NTEwSnpZdGFoRDJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMC40IiwKLSAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjEyLjUiLAotICAgICAgICAiQHR5cGVzL2FyaWEtcXVlcnkiOiAiXjUuMC4xIiwKLSAgICAgICAgImFyaWEtcXVlcnkiOiAiNS4xLjMiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4wIiwKLSAgICAgICAgImRvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6ICJeMC41LjkiLAotICAgICAgICAibHotc3RyaW5nIjogIl4xLjUuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHRlc3RpbmctbGlicmFyeS9qZXN0LWRvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tLy0vamVzdC1kb20tNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVVQWc5cHZPa3ptR1hVU3lBUHQwaDZ5QVhIeHNuK0ZNTlMxbzdPWDhURXJtbGRaTUwyeXd0MTBsb3RaWHgvYTFQRGlTbnEwZkdHeUVWL3liS1NMUFdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYWRvYmUvY3NzLXRvb2xzIjogIl40LjAuMSIsCi0gICAgICAgICJAYmFiZWwvcnVudGltZSI6ICJeNy45LjIiLAotICAgICAgICAiYXJpYS1xdWVyeSI6ICJeNS4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjMuMC4wIiwKLSAgICAgICAgImNzcy5lc2NhcGUiOiAiXjEuNS4xIiwKLSAgICAgICAgImRvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6ICJeMC41LjYiLAotICAgICAgICAibG9kYXNoIjogIl40LjE3LjE1IiwKLSAgICAgICAgInJlZGVudCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0zLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTREM0I2V2Y0MUtPWVJGZHN6bURxTUNHcTVWVi91TUFCMjczSklMbU8rM2pBbGg4WDRxRHRkdGdDUjNmeHRiTEVNelN4MjJRZGhuRGNKdnUydTFmVndnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4xLjAiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAdGVzdGluZy1saWJyYXJ5L3JlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiMTIuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L3JlYWN0Ly0vcmVhY3QtMTIuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PZlRYQ0pVRmdqZC9kaWdMVXVQeGEwKy8zWnhzUW1FN3ViOWtjYlcvd2k5NkJoM28vcDV2ckVUY0JHZlAxN05XUEdxZVlZbDVMVFJwd3lHb01DNHlzZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuMTIuNSIsCi0gICAgICAgICJAdGVzdGluZy1saWJyYXJ5L2RvbSI6ICJeOC4wLjAiLAotICAgICAgICAiQHR5cGVzL3JlYWN0LWRvbSI6ICI8MTguMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdGVzdGluZy1saWJyYXJ5L2RvbSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjIwLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVzdGluZy1saWJyYXJ5L2RvbS8tL2RvbS04LjIwLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vRGlPUTV4QnhnZFlSQzhMTms3VStSV2F0MFMzcVJMZUl3M1pJa01ROWtrVmxSbXdEL0VnOGs4Q3FJcEQ2R1c3dTIwSklVT2ZNS2J4dGlMdXRwalE0Zz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTAuNCIsCi0gICAgICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuMTIuNSIsCi0gICAgICAgICAgICAiQHR5cGVzL2FyaWEtcXVlcnkiOiAiXjUuMC4xIiwKLSAgICAgICAgICAgICJhcmlhLXF1ZXJ5IjogIjUuMS4zIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4xLjAiLAotICAgICAgICAgICAgImRvbS1hY2Nlc3NpYmlsaXR5LWFwaSI6ICJeMC41LjkiLAotICAgICAgICAgICAgImx6LXN0cmluZyI6ICJeMS41LjAiLAotICAgICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNC41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudC8tL3VzZXItZXZlbnQtMTQuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VQ2NVS3JVWUdqN0Nsb21PbzJTcE5Wdng0L2ZrZC8yQmJJSERDbGU4QTBheCtQM2JVN3lKd0RCRHJTNlp3ZFRNQVJXVEdPRFgxaEVzQ2NPKzdiZUpqZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJAdG9vdGFsbG5hdGUvb25jZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdG9vdGFsbG5hdGUvb25jZS8tL29uY2UtMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJiekp2bE56bVJxNWMzTzA5VWlwZXVYbm80dEExRkU2aWtPanhaSzB0dXhWdjM0MTJsNjRsNXQxVzVwajQrckpxOXZwa20va3dpUjA3YVpYbnNLUHh3PT0iCi0gICAgfSwKLSAgICAiQHRyeXNvdW5kL3NheCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHJ5c291bmQvc2F4Ly0vc2F4LTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MN3o5QmdyTkVjWXlVWXRGK0hhRWZpUzVlYmtoOWpYcWJzeno3cEMwaFJCUGFhdFYwWGpTRDMrZUhycHFGZW1RZmd3aUZGMFFQSWFybklpaElEbjdPQT09IgotICAgIH0sCi0gICAgIkB0eXBlcy9hcmlhLXF1ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9hcmlhLXF1ZXJ5Ly0vYXJpYS1xdWVyeS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFRJaWVFWStndkozOUNoTGNCNElmNXpIdFB4dDNTeWo1cmdaUitlMWN0cG1LOE5qUGYwekZxc3o0SnBMSlQweGxhOUdGREtqeThDcHUzMzFucm1FMVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19jb3JlLy0vYmFiZWxfX2NvcmUtNy4yMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hQUN1L1Uvb21oZGsxNU80TmZiK2ZIZ0gvejNRc2ZRenBudlJaaFloVGhtczgzWm5BT1p6N3paQVdPN21uMnl5TlFhQTR4VE84R0xLM3VxRlU0YllZdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjAuNyIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjAuNyIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX2dlbmVyYXRvciI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fdGVtcGxhdGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjYuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IvLS9iYWJlbF9fZ2VuZXJhdG9yLTcuNi40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10RmtjaUI5ajJLNzU1eXJUQUx4RDQ0TWNPcmsrZ2ZwSXB2QzNzeEhqUmF3ajZQZm5ReHJzZTRDbHE1eS9ScStHM21yQnVyTWF4L2xHOFFuMnQ5bVNzZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2JhYmVsX190ZW1wbGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RlbXBsYXRlLy0vYmFiZWxfX3RlbXBsYXRlLTcuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hekJGS2VtWDZrTWc1SW8rL3JkR1QwZGtHcmVib1VWUjBDZG0zZno5UUpXcGFRR0pSUVhsN0MrNmhPVENaY01sbDdLRnlFUXBnYllJMmxIZHNTNFU3Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX190cmF2ZXJzZS8tL2JhYmVsX190cmF2ZXJzZS03LjIwLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1pdEhGWG5odGd3c0daV3RUNjhVUnBPdkxONEVSRWloMXUzUXRRaU40VmRBeFdLUlZ2R0NTdncvUXRoME0wUXEzcEpwbkdPdTVKYU0veWRLN09HYnFnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIwLjciCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2JvZHktcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xOS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYm9keS1wYXJzZXIvLS9ib2R5LXBhcnNlci0xLjE5LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFMWW9uZTZwbTZRbXdab0FnZXlOa3NjY1Q5UTRBV1pRNlB2ZndSMzdHVDZyNkZXVVBndXE2c1VtTkdTTVYyV3I3NjFvUW9CeHdHR2E2RFI1bzFEQzlnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2Nvbm5lY3QiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9ib25qb3VyIjogewotICAgICAgInZlcnNpb24iOiAiMy41LjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYm9uam91ci8tL2JvbmpvdXItMy41LjEwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wN2llblJNaVM0MU51Mi9pZ2JKeHhMRFdyU1owV3hNOFVRZ0NlTzlLaG9WRjdjT1ZGa3JLc2lEcjFFc0pJbGE4dlYzb0VFakdjejExamM1eWltaHpadz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2Nvbm5lY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjQuMzUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9jb25uZWN0Ly0vY29ubmVjdC0zLjQuMzUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNkZVl5djRLV29FZ3BCSVNUeFd2cVlzVnk0NDRET3FlaGlGM2ZNM25lMTBBbUo2MlJTeU5rVW54TUpYSFFXUlFRWDJlUjk0bTV5MUlaeUR3QmpWOUZRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvY29ubmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFjayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvY29ubmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFjay8tL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2stMS41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTR4NUZrUHBMaXBxd3RoalBzRjdaUmJPdjN1b0xVRmtUQTlHOXY1ODNxaTRwQUN2cTB1VEVMckI4T0xVelBXVUk0SUpJeXZNODV2emtWMW55aUkyTGlnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2V4cHJlc3Mtc2VydmUtc3RhdGljLWNvcmUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9lc2xpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc2xpbnQvLS9lc2xpbnQtOC40MC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QUlZqUTRFaDl6OXBtbXRhcThuVGpaalF3S0ZrN1lJSEl1ZDNsUm9LUkJnVVFqZ2pSbW9HeHhHRVBYUWtGK2xIN1FrSEpSTnI1RjRhQmdZQ1cwbHFwUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvZXNsaW50LXNjb3BlIjogewotICAgICAgInZlcnNpb24iOiAiMy43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc2xpbnQtc2NvcGUvLS9lc2xpbnQtc2NvcGUtMy43LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlLNHpvSW1pWmMzSGxJcDZBVlVERTRDV1l4MjJhK2xoU1pNWU5wYmpXMDQrWUYwS1dqNHBKWG5FTWpkbkZUaVFpYkZGbUVsY3Nhc0pYRGJkSS9FUGhBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2VzbGludCI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvZXN0cmVlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc3RyZWUvLS9lc3RyZWUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxHNG9wVnMyQU5XWjFUSm9LYzkzN2lNbU5zdE0vZDBhZTF2TmJuQnZCaHFDU2V6Z1ZVT3pjTENxYkk1ZWxWOFZ5NldLd0tqYXFSK3pPOVZLaXJCQkNBPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL2V4cHJlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE3LjE3IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZXhwcmVzcy8tL2V4cHJlc3MtNC4xNy4xNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUTRGbW11TEdCRzU4YnRVbmZTMWMxci9OUWRscDNETWZHREdpZzhXaGZwQTJZUlV0RWt4QWprWmIweXZwbEpHWWRGMWZzUTgxaU1EY0gyNHNTQ05DL1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvYm9keS1wYXJzZXIiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvZXhwcmVzcy1zZXJ2ZS1zdGF0aWMtY29yZSI6ICJeNC4xNy4zMyIsCi0gICAgICAgICJAdHlwZXMvcXMiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvc2VydmUtc3RhdGljIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2V4cHJlc3Mtc2VydmUtc3RhdGljLWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE3LjM1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZXhwcmVzcy1zZXJ2ZS1zdGF0aWMtY29yZS8tL2V4cHJlc3Mtc2VydmUtc3RhdGljLWNvcmUtNC4xNy4zNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0FMV1F3cmdpQjJBV1RUOTFDQjYyYjZZdDBzTkhwem5VWGVaRWNuUFUzRFJkbERJejc0eDhRZzFVVVlLU1ZGaSt2YTV2S09MWVJCSTFiUktpTExLSWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9xcyI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy9yYW5nZS1wYXJzZXIiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvc2VuZCI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZ3JhY2VmdWwtZnMvLS9ncmFjZWZ1bC1mcy00LjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2lnMFNOT1JYOWZkVytiUXVURW92S2ozdUhjVUw2TFFLYkNycnFiMVg3SjYvUmVBYmhDWFJBaGMrU01lamhMRUxGajJRY3l1eG1Vb29aNGJ0NVJlU3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvLS9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy0zLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaU1JcWlrbzZvb0xyVGgxam9Yb2RKSzVYOXhlRUFMVDFrTTVHM1pMaEQzaHN6eEJkSUVkNUM3NVU4MzREOW1MY0lOZ0Q0T3laZjV1UVhqa3VZeWRXdkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9yZWFjdCI6ICIqIiwKLSAgICAgICAgImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIjogIl4zLjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvaHRtbC1taW5pZmllci10ZXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2h0bWwtbWluaWZpZXItdGVyc2VyLy0vaHRtbC1taW5pZmllci10ZXJzZXItNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9oLzZieURQbkwxemVOWEZyRFhGTHlaamtyMU1zQkc2NjdJTTc5MmNhZjFMMlVQT09NZjY1TkZ6alVIL2x0eWZ3akFHZnMxcnNYMWVmdEswakMvS0lnPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL2h0dHAtcHJveHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjE3LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaHR0cC1wcm94eS8tL2h0dHAtcHJveHktMS4xNy4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSEM4RzdjMVdtYUYyZWtxcG5GcTYyNnhkM1p6MHV2YXFGbUJKTlJaQ0dFWkNYa3ZTZEpvTkZuLzhZZ2JkOWZLTlFqOFV6TGRDRVRhSTBVV1BBaks3SUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS8tL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS0yLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItei9RVDFYTjRLNEtZdXNsUzIzazYyeURJREx3TEZrenhPdU1wbER0T2J6MCt5N1ZxSkNhTzJvK1NQd0hDdkxGWmg3eGF6dnZvb3IydEEvaFB6OWVlN2c9PSIKLSAgICB9LAotICAgICJAdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydC8tL2lzdGFuYnVsLWxpYi1yZXBvcnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBsR2dYQVBmVktGb1lmYTlOcFlEQWtzZUcrZzZKcjI5NFJxZXFjcURpeFNiVTM0TVpWSlJpL1ArN1k4R0RwemtFd0xhR1paT3BLSUVtZVZaTnRLc3JnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzLy0vaXN0YW5idWwtcmVwb3J0cy0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzNtQVpFdUswbHZCcDh0bXVMNzRYUktuMSt5MmRjd09VcEg3eDRXckY2Z2sxR0lnaWx1RFJnTVlRdHcyT0ZjQnZBSldsdDZBU1UzdFNxeHAwVXUwQXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvamVzdC8tL2plc3QtMjkuNS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QaGdsR21oV2VENDZGWU9WTHQzWDdUaVdqend1VkdXOXdHLzRxb2NQZXZYTWpDbXJJYzViNmRiOVdqZUdFNFFZVnBVQVdNRHYzdjBJaUJ3T2JZMjg5QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXhwZWN0IjogIl4yOS4wLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03alJqK3lYTzBXN2U0L3RTSktvUjdIUklITFBQanROYVVHRzJ4eEtRbkd2UE5Sa2dXY1EwQVpYNlA0S0JSSk40RmNUQldiM3NhN0RWVUptb2NZdW9vZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvanNvbi1zY2hlbWEvLS9qc29uLXNjaGVtYS03LjAuMTIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhyNUpmaGM5ZVlPUU5QWU81V0xEcS9uNGpxaWpkSE5sRFhqdUFRa2t0K21XZFFSK1hKVG9PSHJzRDRjUGFNWHBuNktPN3kyK3dNOEFaRXM4VnBCTFZBPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL2pzb241IjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjI5IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvanNvbjUvLS9qc29uNS0wLjAuMjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRSTGpDV0hZZzRvYUE3N2N4TzY0b08rN0p3Q3duSXprWlBkcnJDNzFqUW1RdGxoTTU1NnB3S281YlV6cXZabmRrVmJlRkxJSWkrOVRDNDBKTkY1aE5RPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL21pbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL21pbWUvLS9taW1lLTEuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQVR4VnhnUnFOSDZuSEVJc3ZnNmsyQm9jMUpISTlaYkg1aVdGRnYvTVRrY2h6M2IxaWVHRGE1VDBhOVJ6bk5kSTBLaFZiZGJXU04rS1dXclFaUnhUdz09IgotICAgIH0sCi0gICAgIkB0eXBlcy9ub2RlIjogewotICAgICAgInZlcnNpb24iOiAiMjAuOC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvbm9kZS8tL25vZGUtMjAuOC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yMVRLSEhoM2VVSElpMk1sb2VwdEpXQUx1Q3U1SDdIUVRkVHJXSUZSZUE4YWQrYWdnb1grbFJlczNleDcvRnRwQytzVlVwRk1RK1FUZllyNzRtcnVpUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInVuZGljaS10eXBlcyI6ICJ+NS4yNS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9wYXJzZS1qc29uIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItLy9vb3JFWmpMNnNiUGNLVWFDZElHbElVZUgyNm1nemltakJCNzdHNlhSZ25EbC9MNXdPbnB5QkdSZS9NbWY1Q1ZXM1B3RUJFMU5qaU1aL3NzRmg0d0E9PSIKLSAgICB9LAotICAgICJAdHlwZXMvcHJldHRpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjcuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3ByZXR0aWVyLy0vcHJldHRpZXItMi43LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSs2OGtQOXl6czRMTXA3Vk5oOGdkek1TUFpGTDQ0TUxHcWlIV3Z0dFlKZSs2cW51VnI0RWs5d1NCUW92ZXFZL3IrTHdqQ2NVMjlrTlZraWR3aW0ra1lBPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL3Byb3AtdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNS43LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wcm9wLXR5cGVzLy0vcHJvcC10eXBlcy0xNS43LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpDQjhDNlNuRG9RZjBjTnljcWQvMzVBN01qY25LK1pUcUU3anVkUzZvN3V0eFVDZzZpbUpnM1FLMnF6SEtzemxUamNqMmNuK053TUIyaTk2dWJwajd3PT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL3EiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3EvLS9xLTEuNS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MMjhqMkZjSmZTWk9uTDFXQmpEWXAydlVIQ2VJRmx5WUkvNTNFd0QvcktVQlE3TXRVVWZiUVdpeUtKR3BjbnY0L1dncmhXc0ZLcmNQc3RjQXQvSjB0UT09IgotICAgIH0sCi0gICAgIkB0eXBlcy9xcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuOS43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcXMvLS9xcy02LjkuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRkdhMUY2MkZUMDlxY3J1ZUJBNnFZVHJKUFZEemFoOWErNDkzK28yUENYc2VzV0hJbjI3Rzk4VHNTTXMzV1BOYlpJRWo0K1ZKZjZzYVNGcHZEKzNac3c9PSIKLSAgICB9LAotICAgICJAdHlwZXMvcmFuZ2UtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVFaHNMc0Q2VXNETTF5RmhBdnkwQ2pyNlZ3bXBNV3FGQkNiOXcwN3dWdWdGN3c5bmZhanhMdVZtbmdUSXBnUzZzdkNubTZWYXcrTVpob0RDS25PZnN3PT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL3JlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC42MiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3JlYWN0Ly0vcmVhY3QtMTcuMC42Mi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUFOQ3l6OURHOHAvVmRocjBaS1NUOEpWMTJQaEgyQUNDRFlsRnc2RElPK0QrY2ErdVA0anRFREVwVnFYWnJoL3VaZFhRR3drN3doSmEzYWg1RHR5THc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9wcm9wLXR5cGVzIjogIioiLAotICAgICAgICAiQHR5cGVzL3NjaGVkdWxlciI6ICIqIiwKLSAgICAgICAgImNzc3R5cGUiOiAiXjMuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9yZWFjdC1kb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjIwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVhY3QtZG9tLy0vcmVhY3QtZG9tLTE3LjAuMjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRweklqU3hEdWVaWjkwRjUybVUzYVBvb2drSElvU0lERytvUSt3UUs3Q3kyQjlTK012T3FZMHVFQS9xYXdLejM4MXFyRURrdnB3eXQ4Qm0zMUk4c2JBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvcmVhY3QiOiAiXjE3IgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVzb2x2ZS8tL3Jlc29sdmUtMS4xNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15eTdIdXpRaGowZGhHcEQ4UkxYU1pXRWtMc1Y5aWJ2eHZpNkVpSjNia3FMQU8xUkdvMFdia1dRaXdwUmxTRnltVEpSejBkM2s1TE0za2t4OEFyRGJMdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL3JldHJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmV0cnkvLS9yZXRyeS0wLjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdXS09DbFRUaWl6Y1poWG5QWTR3aWtWQXdtZFlIcDhxNkRtQytFSlV6QU1zeWNiN0hCMzJLaDlSTjQrMGdFeGptUG1aU0FRamdVUlhJR0FUUGVnQXZBPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL3NjaGVkdWxlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3NjaGVkdWxlci8tL3NjaGVkdWxlci0wLjE2LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVjSjhDQjR5QXg3Qkgxb012ZFUwSmg5bHJFWHlQa2FyNkY5Ry9FUnN3a0N1dlA0S1FaZlprU2pjTWJBSUNDcFFUTjRPdVpuOHR6MEhpS3Y5VEdaZ3JRPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc2VtdmVyLy0vc2VtdmVyLTcuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HOGhaNlhKaUhudWhRS1I3Wm15c0NlSldFMDhvOFQwQVh0azVkYXJzQ2FUVnNZWmhoZ1VycTUzaml6YVIyRnZzb2VDd0pobG13VGprWEJZNVBuL1pIdz09IgotICAgIH0sCi0gICAgIkB0eXBlcy9zZW5kIjogewotICAgICAgInZlcnNpb24iOiAiMC4xNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc2VuZC8tL3NlbmQtMC4xNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Dd284TEUvMHJudlg3a0lJYTNRSENrY3VGMjFjMDVBeWIwWmZ4UGl2MFc4VlJpWmlOVy9XdVJ1cEhLcHFxR1ZHZjdTVUE0NFFTT1VLYUVkOWxJcmQvUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9taW1lIjogIl4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL3NlcnZlLWluZGV4IjogewotICAgICAgInZlcnNpb24iOiAiMS45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zZXJ2ZS1pbmRleC8tL3NlcnZlLWluZGV4LTEuOS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kL0hzM25XRHhOTDJ4QWN6bU9WWk5qOTJZWkNTNlJHeGZCUGpLenV1L1hpckNnWGRwS0ViODhkWU5icllHaW50NklWV0xOUCt5b253VkF1UkMwVDJEZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9leHByZXNzIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL3NlcnZlLXN0YXRpYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3NlcnZlLXN0YXRpYy8tL3NlcnZlLXN0YXRpYy0xLjE1LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5VbzVYTmlBZFVMckpFTnRKWFpaM2ZIdGZNb2x6WndjenpCYm5BZUJicUJ3RytMYUc2WWFKdHV3endHU1FaMndzQ3J4akVoTk5qQWtLaWd5M244dGVRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL21pbWUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9zb2NranMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMzMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zb2NranMvLS9zb2NranMtMC4zLjMzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMEtFRWUwNU52VW5hdCtib1BUWjBkZ2FMWjRTZlNvdVhVZ3Y1bm9VaWVmRzJhamdLam1FVG85Wkp5dXFzbDdkZmwyYUhsTEpVaWtpNkI0WllsZGlpdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL3N0YWNrLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zdGFjay11dGlscy8tL3N0YWNrLXV0aWxzLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IbDIxOS9CVDVmTEFhejZORGtTdWh6YXN5NDlkd1FTL0RTZHU0TWRnZ0ZCOHpjWHY3dmZsQkkzeHA3RkVta21kRGtCVUkyYlBVTmVNdHRwMmtuWWR4dz09IgotICAgIH0sCi0gICAgIkB0eXBlcy9zdHlsZWQtY29tcG9uZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3N0eWxlZC1jb21wb25lbnRzLy0vc3R5bGVkLWNvbXBvbmVudHMtNS4xLjI2LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdUtKOVo2eGI5M3VKaUl5eG8vK2tzUzd5TGpTMUt6RzZpdjVpNzhkaFZnL1gzdTV0MUg3anVSV3FWbW9kSWR6NndHVmFJQXBvMXUwMWttRlJkSkhWdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIjogIioiLAotICAgICAgICAiQHR5cGVzL3JlYWN0IjogIioiLAotICAgICAgICAiY3NzdHlwZSI6ICJeMy4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL3N0eWxpcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc3R5bGlzLy0vc3R5bGlzLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uNHN4MmJxTDBtVzF0dkRmL2xvUSthTVg3R1FEM2xjM2ZrQ01DNTVWRk5EdS92Qk9hYk8rTFRJZVhLTTE0eEswcHBrNVRVR2NXUmppU3BJbFVwZ2hLdz09IgotICAgIH0sCi0gICAgIkB0eXBlcy90cnVzdGVkLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy90cnVzdGVkLXR5cGVzLy0vdHJ1c3RlZC10eXBlcy0yLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmZRNGd5ejM4U0w4c0ROclNpeHhVMk9zMWE1eGNkRnhpcEFGeFlFdUxVbHZVMnVEd1M0TlVwc0ltY2YxLy9TbFdJdENWTU1MaXlsc3hibU5NVG9WL2c9PSIKLSAgICB9LAotICAgICJAdHlwZXMvd3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjUuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3dzLy0vd3MtOC41LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWx3aHM4aGt0d3hTamY5VWFaOXRHNU0wM1BHb2d2RmFIOGdVZ0xOYk45SEtJZzBkdnY2cStna1N1SjhITjQvVmJ5eGt1THpDamxON0dxdVEwZ1VKZklnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNi4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE2LjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXhPL0FESk9CRkpTY0hiV2hxMnhBaGxXUDI0clk0YUNFRy9ORmFNdmJUM1gyTWdSc0xqaGpRd3NuMFppNXpuMExHOWpVaENDWk1lWDlEa3V3NmsrdlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlPOVpRSGtaeEhuNG1TYWtZVjB2RkhBVkR5RU9JSlFyVjJ1WjA2SHhFUGN4K210OHN3WG9aSEliYWFKMmNySllGZkVyeVNna3R1VFozQmVMeitYbUZBPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbi8tL2VzbGludC1wbHVnaW4tNS41OS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWHh1T2ZUa0NVaU9TeUJXSXZIbFVyYUx3L0pULzZJbzEzNjVSTzZadUk4OFNUS01hdkpaUE5NVTBsRmNVVGVRWEVoSGl2NjRDYnhZeEJOb0RWU21naGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogIl40LjQuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlciI6ICI1LjU5LjExIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlLXV0aWxzIjogIjUuNTkuMTEiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogIjUuNTkuMTEiLAotICAgICAgICAiZGVidWciOiAiXjQuMy40IiwKLSAgICAgICAgImdyYXBoZW1lLXNwbGl0dGVyIjogIl4xLjAuNCIsCi0gICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKLSAgICAgICAgIm5hdHVyYWwtY29tcGFyZS1saXRlIjogIl4xLjQuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy43IiwKLSAgICAgICAgInRzdXRpbHMiOiAiXjMuMjEuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjUuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNvZnR1VFJPdi9jUmpDemUvc2NqR3lpRHRjVXl4dzFyZ1lRU1pZN1hUbXRSNWhYK2RtNzZpRGJUSDhUa0xQSENRbWxiUVZTU2JOWkNQTTJoYjBrbm5RPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInlhbGxpc3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvZXhwZXJpbWVudGFsLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNS41OS4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L2V4cGVyaW1lbnRhbC11dGlscy8tL2V4cGVyaW1lbnRhbC11dGlscy01LjU5LjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ha1FHVjBVRi9WNVJhN2daTUJtaUQxV3JZVUZPSk52Q1pzK1hRblV5Sm94bXFmV01YVk55QjJOVkNQUktlZm9RY3B2VHY5VXBKeWZDdnNKRnM4Tnp6UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC91dGlscyI6ICI1LjU5LjExIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyLy0vcGFyc2VyLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXM5WkYzTStOeW02Q0FaRWtKSmVPMlRGSEhEc0tBTTNlY05rTHVINGk0czgvUkNQbkY1SlJpcDJHeXZpWWtlRUFjd0dNSnhrcUc5aDJkQXNuQTFuWnBBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiNS41OS4xMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlci8tL3Njb3BlLW1hbmFnZXItNS41OS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZEhGT3N4b0xGdHJJY1NqNWgwUW9CVC84OWh4UU9Od21uM0ZPUTBHT1FjTE9PWG0rTUlyUzh6RUFoczR0V2w1TXJheENZM1pKcGFYUVFkRk1jMlR1K1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzIjogIjUuNTkuMTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGUtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZS11dGlscy8tL3R5cGUtdXRpbHMtNS41OS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTFpxVlk4aE1pVlJGMmE3L3N3bWtTdE1ZU29YTUZsekw2c1hWNlUvMmdMNWN3bkxXUWdMRUc4dGpXUHBhRTRyTUlkWjZWS1d3Y2ZmUGxvMWpQZms0M2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMiOiAiNS41OS4xMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiLAotICAgICAgICAidHN1dGlscyI6ICJeMy4yMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC90eXBlcy8tL3R5cGVzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVwb042UjZ0a3ZCWVNjK2NsbHJ6K2Myc09GV2tiaXNKWldrT0UreTN4SHR2WWFPRTZXazZCOGUxMTRNY1JKd0ZSakd2WWRKd0xYUUg1Yzlvc01FL0FBPT0iCi0gICAgfSwKLSAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogewotICAgICAgInZlcnNpb24iOiAiNS41OS4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlLy0vdHlwZXNjcmlwdC1lc3RyZWUtNS41OS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXVwT3BvdDVoSk8wbWF1cEpYaXhpNmw1RVRkcklUeGVvNWVCT2V1VjdSU0tnWWRVM0c1Y3hPNDkvOVdSbkpxOUVNckI3QXVUU0xIL2JxT3NYaTd3UEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiNS41OS4xMSIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzIjogIjUuNTkuMTEiLAotICAgICAgICAiZGVidWciOiAiXjQuMy40IiwKLSAgICAgICAgImdsb2JieSI6ICJeMTEuMS4wIiwKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIiwKLSAgICAgICAgInNlbXZlciI6ICJeNy4zLjciLAotICAgICAgICAidHN1dGlscyI6ICJeMy4yMS4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS11bmlvbiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LXVuaW9uLy0vYXJyYXktdW5pb24tMi4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IR3l4b09UWVV5Q002c3RVZTZFSmduZDRFb2V3QUk3ek1kZnFPK2tHam5sWm1CRHovY1I1cGY4ci9jUjRXcTYwc0wvcDBJa2NqVUVFUHdTM0dGckl5dz09IgotICAgICAgICB9LAotICAgICAgICAiZ2xvYmJ5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjExLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JieS8tL2dsb2JieS0xMS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qaElYYU96eTFzYjhJeW9jYXJ1V1NuMVRqbW5CVnM4QXloY3k4M3JteE5KOHEydVdLQ0FqM0NuSlkrS3BHU1hDdWVBUGMwaTA1a1Z2Vkt0UDF0OVMzZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYXJyYXktdW5pb24iOiAiXjIuMS4wIiwKLSAgICAgICAgICAgICJkaXItZ2xvYiI6ICJeMy4wLjEiLAotICAgICAgICAgICAgImZhc3QtZ2xvYiI6ICJeMy4yLjkiLAotICAgICAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAotICAgICAgICAgICAgIm1lcmdlMiI6ICJeMS40LjEiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJscnUtY2FjaGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItU29mdHVUUk92L2NSakN6ZS9zY2pHeWlEdGNVeXh3MXJnWVFTWlk3WFRtdFI1aFgrZG03NmlEYlRIOFRrTFBIQ1FtbGJRVlNTYk5aQ1BNMmhiMGtublE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAieWFsbGlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlc2NyaXB0LWVzbGludC91dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNTkuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC91dGlscy8tL3V0aWxzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRpZHUyckhTT01VZEpUaExrNGFaMU9yOEljTzNIekN3L1p2RWpUVElmaklyY2RkNWN2U0l3d0R5MkFPbEU3aHRTTnA3UUlaMTBmTE15UkN2ZWVzTUxnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXV0aWxzIjogIl40LjIuMCIsCi0gICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC45IiwKLSAgICAgICAgIkB0eXBlcy9zZW12ZXIiOiAiXjcuMy4xMiIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlciI6ICI1LjU5LjExIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI1LjU5LjExIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZSI6ICI1LjU5LjExIiwKLSAgICAgICAgImVzbGludC1zY29wZSI6ICJeNS4xLjEiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuNyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNsaW50LXNjb3BlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXNjb3BlLy0vZXNsaW50LXNjb3BlLTUuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMk54d2JGL2haMEtwZXBZTjBjTmJvK0ZONlhvSzdHYUhsUWhneC9oSVpsNlZhMGJGNDVSUU9Pd2hMSXk4bFFEYnVDaWFkU0xDQm5IMkNGWXF1aXQ1Ync9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImVzcmVjdXJzZSI6ICJeNC4zLjAiLAotICAgICAgICAgICAgImVzdHJhdmVyc2UiOiAiXjQuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImVzdHJhdmVyc2UiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS00LjMuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM5bm5LZmZXejh4TjFCVS8yYzc5bjluQjlIRHpvMG5pWVVxeDZ4eXFVbnlvQW5ReXlXcE9UZFpFZWlDY2g4QkJ1NTE1dDR3cDlabWdWZlZobjlFQnB3PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJscnUtY2FjaGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItU29mdHVUUk92L2NSakN6ZS9zY2pHeWlEdGNVeXh3MXJnWVFTWlk3WFRtdFI1aFgrZG03NmlEYlRIOFRrTFBIQ1FtbGJRVlNTYk5aQ1BNMmhiMGtublE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAieWFsbGlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjU5LjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzLy0vdmlzaXRvci1rZXlzLTUuNTkuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtHWW5pVEdHM0FNVHVLRjlRQkQ3RUlydnVma0I2TzZ1WDNrblA3M3hiS0xNcEgrUVJQY2duQ3hqV1hTSGpNUnVPeEZMb3ZsanFRZ1FwUjBjN0d2am9BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogIjUuNTkuMTEiLAotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMy4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy9hc3QvLS9hc3QtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JTjF4STdQd092TFBnamNmMTgwZ0MxYnFuM3EvUWFPQ3dZVWFoSU9oYllVdThLQS8zdHcyUlQvVDBHaWRpMWw3SGhqNUQvSU5oSnhpSUNPYnFwTXU0UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1udW1iZXJzIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItd2FzbS1ieXRlY29kZSI6ICIxLjExLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHdlYmFzc2VtYmx5anMvZmxvYXRpbmctcG9pbnQtaGV4LXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvZmxvYXRpbmctcG9pbnQtaGV4LXBhcnNlci8tL2Zsb2F0aW5nLXBvaW50LWhleC1wYXJzZXItMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lakFqOWhmUkoyWE1zTkhrL3Y2RnUyZEdTK2k0VWFYQlhHZW1PZlEvSmZRNm1kUWcvV1h0d2xlUVJMTFM0T3ZmRGh2OHJZblZ3SDI3WUpMTXlZc3hodz09IgotICAgIH0sCi0gICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IvLS9oZWxwZXItYXBpLWVycm9yLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzBZa29QNHBWdTRyTjhhVEpnQXlqOWhDMlN2NVVsa3pDSGh4cVdqOGJ1dGFMdm5wZGMyak93aDRld0U2Q1gwdHhTZkxuL1VZYVYvcGhlUzJUeGcvL1E9PSIKLSAgICB9LAotICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy9oZWxwZXItYnVmZmVyLy0vaGVscGVyLWJ1ZmZlci0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXozbkZ6ZGNwMW1iOG5FT0ZGazhEcllMcEh2aEtDM2dySkQyYXJkZktPem1ibUp2RWYvdFBJcUNZK3NOY3daSVk4WkQ3SWtCMmw3L3BxaFVocW03aExBPT0iCi0gICAgfSwKLSAgICAiQHdlYmFzc2VtYmx5anMvaGVscGVyLW51bWJlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL2hlbHBlci1udW1iZXJzLy0vaGVscGVyLW51bWJlcnMtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12VUloWjhMWm9JV0hCb2hpRU9ieFZtNmh3UDAzNGp3bWM5a3VxNUdkSFpIMHdpTFZMSVBjTUNkcEp6RzRDMTFjSG9RMjVURklRajlrYVZBRFZYN04zZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2Zsb2F0aW5nLXBvaW50LWhleC1wYXJzZXIiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IiOiAiMS4xMS42IiwKLSAgICAgICAgIkB4dHVjL2xvbmciOiAiNC4yLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHdlYmFzc2VtYmx5anMvaGVscGVyLXdhc20tYnl0ZWNvZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLWJ5dGVjb2RlLy0vaGVscGVyLXdhc20tYnl0ZWNvZGUtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zRkZIS3djbUJwck85ZTdJY2YwK2dkZHlXWURWaUw4YnBQakpKbDBXSHhDZEVUa3RYZG10V0xHVnpvSGJxVWNZNEJlMUxrTmZ3VG1YT0pVRlpZU0pkQT09IgotICAgIH0sCi0gICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLXNlY3Rpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLXNlY3Rpb24vLS9oZWxwZXItd2FzbS1zZWN0aW9uLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTFBwWmJTT3dUcEVDMmNnbjRoVHlkeVN5MUtlK1hFdStFVFh1b3l2dXllekhPM0tqZHU5MEtLOTVTaDl4VGJtanJDc1V3dld3Q09RUU50YTM3VnJTOWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9hc3QiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1idWZmZXIiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLWJ5dGVjb2RlIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLWdlbiI6ICIxLjExLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHdlYmFzc2VtYmx5anMvaWVlZTc1NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvaWVlZTc1NC8tL2llZWU3NTQtMS4xMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MTTRwMmNzUE52YmlqNlUxZjE5djZXUjU2UVo4SmNIZzNRSUpUbFN3ekZjbXg2V1NPUmljWWo2STYzZjl5VTFrRVV0cnBHK2tqa2lJQWtldkhwRFhyZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB4dHVjL2llZWU3NTQiOiAiXjEuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkB3ZWJhc3NlbWJseWpzL2xlYjEyOCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvbGViMTI4Ly0vbGViMTI4LTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbTdhMEZoRTY3RFFYZ291ZjF0Yk41WFFjZFdvTmdhQXVvVUxISWZHRklFVktBNnR1L2VkbHM2WG5JbGttUzZGclhBcXVKUlBuaTNaWktqdzZGU1BqUFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAeHR1Yy9sb25nIjogIjQuMi4yIgotICAgICAgfQotICAgIH0sCi0gICAgIkB3ZWJhc3NlbWJseWpzL3V0ZjgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL3V0ZjgvLS91dGY4LTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnRYZjJ3VFEzK3VwOVpzZzhzYTJ5V2lRcHpTc015WGowcVZpVlA2eEtHQ1VUOHA4WUo2SHFJN2w1ZUNuV3gxVC9GWWRzdjA3SFFzMndURmJib2YvUkE9PSIKLSAgICB9LAotICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLWVkaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B3ZWJhc3NlbWJseWpzL3dhc20tZWRpdC8tL3dhc20tZWRpdC0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlibjJJNmZuZklHdUNSK0ZhYXo3WWN2dEJLeHZvTFYzTGVibjF0TTRvL0lBSnptaTlBV1lJUFdweUJmVThjQytKeEFPNTdiazQremRzVGpKUitWVE93PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItYnVmZmVyIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItd2FzbS1ieXRlY29kZSI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaGVscGVyLXdhc20tc2VjdGlvbiI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvd2FzbS1nZW4iOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3dhc20tb3B0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLXBhcnNlciI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvd2FzdC1wcmludGVyIjogIjEuMTEuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLWdlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvd2FzbS1nZW4vLS93YXNtLWdlbi0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNYT3FrWlAveTZCNEYwUEJBWHZJMS9ia3k3R3J5b29nVXRmd0V4ZVAvdjdOendvMVFMY3E1b1FtcEtsZnRaTGJUK0VSVU9BWlZRanVOVmFrNlVYalBBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItd2FzbS1ieXRlY29kZSI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvaWVlZTc1NCI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvbGViMTI4IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy91dGY4IjogIjEuMTEuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLW9wdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvd2FzbS1vcHQvLS93YXNtLW9wdC0xLjExLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNPckt1TFJFN1BDZTZBc09WbDdXYXNZZjN3YlNvNENlT2s2UGtyalM3ZzU3TUZmVlVGOXU2eXNRQkJPRFgwTGRnU3ZRcVJpR3ozQ1h2SURLY1BOeTRnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHdlYmFzc2VtYmx5anMvYXN0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9oZWxwZXItYnVmZmVyIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy93YXNtLWdlbiI6ICIxLjExLjYiLAotICAgICAgICAiQHdlYmFzc2VtYmx5anMvd2FzbS1wYXJzZXIiOiAiMS4xMS42IgotICAgICAgfQotICAgIH0sCi0gICAgIkB3ZWJhc3NlbWJseWpzL3dhc20tcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ad2ViYXNzZW1ibHlqcy93YXNtLXBhcnNlci8tL3dhc20tcGFyc2VyLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlp3UGVHek1KTTNEcXAzaENzTGdFU3hCR3RUL09lQ3ZDWjRUQTFKVVBZZ21oQXgzOHRUUFI5SmFLeTBTNUgzZXZRcE8vaDJ1V3MyajZZYy9mamtwVFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9hc3QiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci1hcGktZXJyb3IiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2hlbHBlci13YXNtLWJ5dGVjb2RlIjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9pZWVlNzU0IjogIjEuMTEuNiIsCi0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9sZWIxMjgiOiAiMS4xMS42IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3V0ZjgiOiAiMS4xMS42IgotICAgICAgfQotICAgIH0sCi0gICAgIkB3ZWJhc3NlbWJseWpzL3dhc3QtcHJpbnRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHdlYmFzc2VtYmx5anMvd2FzdC1wcmludGVyLy0vd2FzdC1wcmludGVyLTEuMTEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSk03QWhSY0UreVcyR1dZYUtlSEw1dnQ0eHFlZTVOMldjZXpwdG1neWhOUytTY2dncWNUMU90WHlraEFiMTNTbjVZYXMwajJ1djl0SGdyand2ekFQNEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAd2ViYXNzZW1ibHlqcy9hc3QiOiAiMS4xMS42IiwKLSAgICAgICAgIkB4dHVjL2xvbmciOiAiNC4yLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHh0dWMvaWVlZTc1NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AeHR1Yy9pZWVlNzU0Ly0vaWVlZTc1NC0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRFg4bktncWNHd3NjMGVKU3FZdDVsd1A0REg1RmxIbm11V1dCUnk3WDBOY2FHUjBadHV5ZUVTZ013VFlWRXR4bXNOR1krcWl0NFFZVC9NSVlUT1RQZUE9PSIKLSAgICB9LAotICAgICJAeHR1Yy9sb25nIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B4dHVjL2xvbmcvLS9sb25nLTQuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OdUhxQlkxUEIvRDh4VTZzL3RoQmdPQWlBUDdIT1lEUTMyK0JGWklMSjhpdmtVa0FIUW5XZm42V2hMNzlPd2oxcW1Vbm9OL1lQaGt0ZElvdWNpcGtBUT09IgotICAgIH0sCi0gICAgImFiYWIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWJhYi8tL2FiYWItMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWoyYWZTc2FJRU52SFpOMkI4R09wRjU2NnZaNVdWazVvcEFpTVR2V2dhUVQ4RGtiT3FzVGZ2TkF2SG9SR1UyenpQOGNQb3F5cyt4SFRSRFdXOEwrL0JBPT0iCi0gICAgfSwKLSAgICAiYWNjZXB0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY2NlcHRzLy0vYWNjZXB0cy0xLjMuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFlBdGhUYTJtMlZLeHV2U0QzRFBDL0d5K1Urc09BMUxBdVQ4bWttUnV2dytOQUNTYWVYRVErTkhjVkY3ck9ObDZxY2F4VjNVdWVtd2F3ays3K1NKTHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtaW1lLXR5cGVzIjogIn4yLjEuMzQiLAotICAgICAgICAibmVnb3RpYXRvciI6ICIwLjYuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJhY29ybiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi8tL2Fjb3JuLTguOS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qYVZOQUZCSE5MWHNwTzU0M1duTk5QWkZSdGF2aDNza0FrSVRxRDAvMmFlTWtLWlROKzI1NFB5aHd4RllyazN2UTF4ZlkrMndiZXNKTXMvSkM4L1B3UT09IgotICAgIH0sCi0gICAgImFjb3JuLWdsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4tZ2xvYmFscy8tL2Fjb3JuLWdsb2JhbHMtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpRbDdMT1dhRjVlUHFxY1g0aEx1di9iTFhZUU5mTld3MmMwL3lYL1RzUFJLYW16SGNUR1FubENqSFQzVHNta09VVkVQUzNjckN4aVBmZHpFL1RybGhnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWNvcm4iOiAiXjcuMS4xIiwKLSAgICAgICAgImFjb3JuLXdhbGsiOiAiXjcuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY29ybiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjQuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLy0vYWNvcm4tNy40LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uUXlwMG8xL21OZGJUTzFQTzZrSGt3U3JtZ1owTVQvakNDcE5pd2JVakdvUk40ZGxCaHFKdG9RdUNuRU9LemdUVndnMFpXaUNvUXk2U3hNZWJRVmg4QT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiYWNvcm4taW1wb3J0LWFzc2VydGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjkuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4taW1wb3J0LWFzc2VydGlvbnMvLS9hY29ybi1pbXBvcnQtYXNzZXJ0aW9ucy0xLjkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY21Nd29wOXgrOEtGaHh2S3JLZlBZbU42L3BLVFlZSEJxTGEwRGZ2VlpjS01KV055V0xuYXFORDdkeC9xbjY2Ujdld00xVVg1WE1hRFZQNXdsVlRhVkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgImFjb3JuLWpzeCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi1qc3gvLS9hY29ybi1qc3gtNS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJxOXMrSk5oZjBJQ2hqdERYeGxsSjdnNDFvWms1U2xYdHAwTEh3eUE1Y2Vqd243dkttS3A0cFByaTZZRWVQdjJQVTY1c0FzZWdiWHRJaW5tREZEWGdRPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJhY29ybi13YWxrIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLXdhbGsvLS9hY29ybi13YWxrLTcuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PUGRDRjZHc01JUCtBeithV2ZBQU9FdDIvK2lWREtFN295NmxKMDk4YW9lNTlvQW1LNzZxVjZHdzYwU2JaOGpIdUcyd0gwNThHRjRwTEZiWWFtWXJWQT09IgotICAgIH0sCi0gICAgImFkZHJlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWRkcmVzcy8tL2FkZHJlc3MtMS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRCL3FLQ2ZlRS9PRFVhQVVwU3dmemF6bzV4MjlXRDRyM3ZYaVdzQjdJMm1TREFpaHdFcUtPK2c4R0VMWlVRU1NBbzVlMVhUWWgzWlZmTHl4QmMxMm5BPT0iCi0gICAgfSwKLSAgICAiYWRqdXN0LXNvdXJjZW1hcC1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWRqdXN0LXNvdXJjZW1hcC1sb2FkZXIvLS9hZGp1c3Qtc291cmNlbWFwLWxvYWRlci00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1h3TjViOXBDVVhOUUhKcHd3RDJxUDQwYnlFbVNnemo4QjR5ZFNOMHVNTllXaUZtSjZ4Nkt3VWxsTW1mazhSd3UvSEpERlI3VTh1YnNXQm9OMFhwMEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb2FkZXItdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgInJlZ2V4LXBhcnNlciI6ICJeMi4yLjExIgotICAgICAgfQotICAgIH0sCi0gICAgImFnZW50LWJhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWdlbnQtYmFzZS8tL2FnZW50LWJhc2UtNi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJaTndOY2xGNytNUy84YkRnNzBhbWczMmR5ZVpHWnhpRHVRbVp4S0xBbFFqcjNqR3lMeCs0S2trNThVTzdEMlFkZ0ZJUUNvdnVTdVpFU25lNlJHNlhRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJhanYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEyLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi02LjEyLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWozZlZMZ3ZUbzUyN2FueVl5Sk9HVFlKYkcrdm5uUVl2RTBtNW1ta2MxVEsrbnhBcHBrQ0xNSUwwYVo0ZGJsVkNOb0dTaGhtK2t6RTRaVXlrQm9NZzRnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4wLjAiLAotICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjAuNC4xIiwKLSAgICAgICAgInVyaS1qcyI6ICJeNC4yLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYWp2LWZvcm1hdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2LWZvcm1hdHMvLS9hanYtZm9ybWF0cy0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV3gwS3g1Mmh4RTdDMThoa01FZ2dZbEVpZnFXWnRZYVJnb3VKb3IrV01kUG5ReUVLMTN2Z0VXeVZOdXA3U29lZW9MTXNyNGtmNWg2ZE9XMTFJMTVNVUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjguMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiOC4xMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2Ly0vYWp2LTguMTIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNSdTFrcGNPOXlMdFl4Qkt2cWZUZWg5S3paRXdPM1NUeVgxSFQrNENhRHpDNkhwVEdZaEloUEl6ajlYdUtVN0tZRHduYWVoNWhjT3dqeTFRdUp6QlBBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4xIiwKLSAgICAgICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMS4wLjAiLAotICAgICAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIiwKLSAgICAgICAgICAgICJ1cmktanMiOiAiXjQuMi4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImpzb24tc2NoZW1hLXRyYXZlcnNlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0xLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5NOC9QOW4zWGpYaElabjFsTGhrRmFBQ1RPVVJRWGpXaFY0QkEvUm5Pdjh4dmdxdHFwQVg5SU80bVJReFN4MVJsbzR0cXplcWIwc09scnVhT3kzZHVnPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJhanYta2V5d29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjUuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2LWtleXdvcmRzLy0vYWp2LWtleXdvcmRzLTMuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01cDZXVE4wRGRUR1ZRazZWamNFanUxOUlnYUh1ZGFsY2ZhYkQ3eWhER2VBNmJjUW5tTCtDcHZlTEpxLzNodmZ3ZDFhb2Y2TDM4Nk91Z2t4NlJmeU1JUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAiYW5zaS1lc2NhcGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktZXNjYXBlcy8tL2Fuc2ktZXNjYXBlcy00LjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0tYajVBTHJLV1FMc1lHOWpsVFJtUi94S2x1eEhWK1o5UUV3TklnQ2ZNMS91d1BNQ3V6VlZuaDVtd1RkK091Qlpjd1NJTWJxc3NOV1JtMWxFNTFRYVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ0eXBlLWZlc3QiOiAiXjAuMjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJhbnNpLWh0bWwtY29tbXVuaXR5IjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktaHRtbC1jb21tdW5pdHkvLS9hbnNpLWh0bWwtY29tbXVuaXR5LTAuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xQVBIQXlyMytQQ2Ftd053M2JYQ1BwNEhGTE9OWnQveUlIMHNacDAvNDY5S1dOVEV5K3FONWpRM0dWWDZETVoxVVhBaTM0eVZ3dFRlYUcvSHBCdXV6dz09IgotICAgIH0sCi0gICAgImFuc2ktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iCi0gICAgfSwKLSAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemJCOXJDSkFUMXJiamlWRGIyaHFLRkhOWUx4Z3RrOE5VUnhaM0lad0QzRjZOdHhiWFpRQ25uU2kxTGt4K0lEb2hkUGxGcDIyMndWQUxJaGVaSlFTRWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJhbnktcHJvbWlzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnktcHJvbWlzZS8tL2FueS1wcm9taXNlLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03VXZtS2FsV1J0MXdnakwxUnJHeG9TSlcvMFFaRkllZ3BlR3ZaRzlranA4dnJSdTU1WFRIYnducXEyR3BYbTl1TGJjdWh4bTNJcVg5T0I0TVpSMWIyQT09IgotICAgIH0sCi0gICAgImFueW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueW1hdGNoLy0vYW55bWF0Y2gtMy4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtNUmVGVXIwQjR0K0QrT0JralIzS1lxdm9jcDJYYVN6TzU1VWNCNm1nUU1kM0tiY0UrbVdUeXZWVjdEL3pzZEViTm5WNmFjWlV1dGtpSFFYdlRyMVJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibm9ybWFsaXplLXBhdGgiOiAiXjMuMC4wIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYXJnIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZy8tL2FyZy01LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFlqeUZPTEtROXk1N0p2UTZRTG84ZEFnTnFzd2g4TTFSTUpZZFFkdVQ2eGJXU2dLMzZQL1ovditwODg4cE02OWpNTWZTOFhkOEY2STFrUS9JOUhVR2c9PSIKLSAgICB9LAotICAgICJhcmdwYXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJncGFyc2UvLS9hcmdwYXJzZS0xLjAuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW81Um95NnRORzRTTC9GT2tDQU42UnpqaWFrWlMyNVJMWUZyY010dEpxYmRkOEJXcm5BK2ZHejU3aU41UGIwNnB2Qkd2bDVnUTBCNDhkSmxzbFh2b1RnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic3ByaW50Zi1qcyI6ICJ+MS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYXJpYS1xdWVyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmlhLXF1ZXJ5Ly0vYXJpYS1xdWVyeS01LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjVpSjVsa3VIeWJ6dFVmdU9Bem5tYm95aldxOE82c3FOcXRLN0NMT3FkeWRpNTRWTmJPUnA0OW1iMTRLYldnRzFRRDNKRk85aEpkWit5NEt1dGZkT1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWVwLWVxdWFsIjogIl4yLjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJhcnJheS1idWZmZXItYnl0ZS1sZW5ndGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktYnVmZmVyLWJ5dGUtbGVuZ3RoLy0vYXJyYXktYnVmZmVyLWJ5dGUtbGVuZ3RoLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MUHV3YjJQK05yUXczWGh4R2MzNitYU3Z1QlBvcG92WFlUUjlFdysrRHU5WWIvYng1QXpCZnJJc0JvajBFWlVpZmpRVStzSEwyMXNzZVozamVyV08vQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiaXMtYXJyYXktYnVmZmVyIjogIl4zLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJhcnJheS1mbGF0dGVuIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LWZsYXR0ZW4vLS9hcnJheS1mbGF0dGVuLTIuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oTmZ6Y09WOFc0TmR1YWx0cUJGUHlWTys1NERTSnVaR1k5cVQ0cFJyb0I2UzllM2lpaWRvMklTSUM1aDlSMnNQSjhIM0ZIQ0lpRW5zdjFsUFhPM0t0UT09IgotICAgIH0sCi0gICAgImFycmF5LWluY2x1ZGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LWluY2x1ZGVzLy0vYXJyYXktaW5jbHVkZXMtMy4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNnVGJMdkw2Y05udzI0Rm5iYUR5am12ZGRRMk1MOGFyWnNnYUpob0FCTW9wbHovNFFSaHRyWVMrYWxyMUJVTTFCd3A2ZGh4OHZWQ0JTTEcrU3R3T0Z3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMyIsCi0gICAgICAgICJpcy1zdHJpbmciOiAiXjEuMC43IgotICAgICAgfQotICAgIH0sCi0gICAgImFycmF5LXVuaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LXVuaW9uLy0vYXJyYXktdW5pb24tMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR4cjZRSmovUmRVL2hDYUJqT2Z4VytxNmx5dVZFNkpGV0lyQVVwdU9PaG9KSm9ROTljVW4zaWdSYUhWQjVQOVdyZ0ZWTjBGZkFyTTN4MGN1ZU9VOG5nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnJheS11bmlxIjogIl4xLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJhcnJheS11bmlxIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LXVuaXEvLS9hcnJheS11bmlxLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NTmhhNEJXUTZKYndoRmhqMDNZSzU1MmY3Y2IzQXpvRThTemVsamdDaHZMMWRsM0ljdmdnWFZ6MURpbHp5U1prQ2phK0NYdVpiZFc3eUFUY2hXbjgvUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYXJyYXkucHJvdG90eXBlLmZsYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXkucHJvdG90eXBlLmZsYXQvLS9hcnJheS5wcm90b3R5cGUuZmxhdC0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcm9UVTBLV0lPbUo0RFJMbXdLZDE5T3RnMC9tVDNxUE50MFFiM0dXVzhpT2J1Wlh4cmpCL3B6bjBSM2hxcFJTV2c0SEN3cXgrMHZ3T25XbnZsT3llSUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IiwKLSAgICAgICAgImVzLXNoaW0tdW5zY29wYWJsZXMiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImFycmF5LnByb3RvdHlwZS5mbGF0bWFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LnByb3RvdHlwZS5mbGF0bWFwLy0vYXJyYXkucHJvdG90eXBlLmZsYXRtYXAtMS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThVR245TzFGRFZ2TU5CMFVsTHY0dm94Uk16ZTcrRnBIeUY1bVNNUmpXSFVNbHBvRFZpbml5MDU4NzBWbHhoZmdUbkxicHV3VHp2RDc2TVR0V3hCL21RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIsCi0gICAgICAgICJlcy1zaGltLXVuc2NvcGFibGVzIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJhcnJheS5wcm90b3R5cGUucmVkdWNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LnByb3RvdHlwZS5yZWR1Y2UvLS9hcnJheS5wcm90b3R5cGUucmVkdWNlLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rRGR1Z01sN2lkOUNPRThSN01IRjVqV2s3RHF0L2ZzNFB2K0pYb0lDbll3cXBqampiVXVyejZ3NWZUNUlHNmJyTGRKaHY2L1ZvSEIwSDdveUlCWGQrUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiLAotICAgICAgICAiZXMtYXJyYXktbWV0aG9kLWJveGVzLXByb3Blcmx5IjogIl4xLjAuMCIsCi0gICAgICAgICJpcy1zdHJpbmciOiAiXjEuMC43IgotICAgICAgfQotICAgIH0sCi0gICAgImFycmF5LnByb3RvdHlwZS50b3NvcnRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnJheS5wcm90b3R5cGUudG9zb3J0ZWQvLS9hcnJheS5wcm90b3R5cGUudG9zb3J0ZWQtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBaWVBYUFJsMlBxV2NzVXM2TE9NbisxZjE1MzJuRW9QVFlvd0J0cUx3QVcrVzh2U1Zoa0lHbm1PWDF0L1VRakQ2WUdJMHZjRDJCMVU3WkZHUUg5am5RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIsCi0gICAgICAgICJlcy1zaGltLXVuc2NvcGFibGVzIjogIl4xLjAuMCIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJhc2FwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzYXAvLS9hc2FwLTIuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CU0hXZ0RTQWlLczUwbzJSZThwcHZwM3NlVkhYU1JNNDRjZFNzVDlGZk5FVVVaTE9HV1ZDc2lXYVJQV00xWm5uK21xWjFPZlZaM3ozRFdFelNwN2hSQT09IgotICAgIH0sCi0gICAgImFzdC10eXBlcy1mbG93IjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzdC10eXBlcy1mbG93Ly0vYXN0LXR5cGVzLWZsb3ctMC4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVCdlduMWx2SUFwWU1oelFNc3U5Y2lMZmtCWTQ5OW1GWmxOcUcrLzlXUjdQVmxyb1F3MHZHMzBjT1FRYmFLejNzQ0VjNDRUQU91MnlrenFYU05ud2FnPT0iCi0gICAgfSwKLSAgICAiYXN5bmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmMvLS9hc3luYy0zLjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUFCK0piREVHWGh5SVVhdm9EbDlXUC9KajEwNkt6OURFbjFEUGdZdzVydURuMGUzV2dpM3NLRm01NXNBU2RHQk5PUUI4RjU5ZDlxUTdkZXFySEE4d1E9PSIKLSAgICB9LAotICAgICJhc3luY2tpdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3luY2tpdC8tL2FzeW5ja2l0LTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PZWk5T0g0dFJoMFlxVTNHeGhYNzlkTS9td1ZndmJaSmFTTmFSaytic2hrajBTNWNmSGNnWWFrcmVCanJId2F0WEtieitJb0lkWUx4cktpbTJNalcwUT09IgotICAgIH0sCi0gICAgImF0LWxlYXN0LW5vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXQtbGVhc3Qtbm9kZS8tL2F0LWxlYXN0LW5vZGUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStxL3Q3RWt2MUVEWTJsNkdkYTZMTGlYMTRyVTlUVjIwV2Ezb2ZlUW13UEZaYk9NbzlEWHJMYk9qRmFhY2xrWEtXaWRJYW9wd0FPYlFEcXdXdEdVanFnPT0iCi0gICAgfSwKLSAgICAiYXV0b3ByZWZpeGVyIjogewotICAgICAgInZlcnNpb24iOiAiMTAuNC4xNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXV0b3ByZWZpeGVyLy0vYXV0b3ByZWZpeGVyLTEwLjQuMTQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZRenlmT3NUbHdWempIeEtFcVJJQWRKeDluaU82VkNCQ29Fd2F4L1ZMU29RRjI5Z2dFQ2NQdUJxVU1aK3U4akNaT1BTeThiOC84S251RmJwMFNhRlpRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjUiLAotICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDE0NjQiLAotICAgICAgICAiZnJhY3Rpb24uanMiOiAiXjQuMi4wIiwKLSAgICAgICAgIm5vcm1hbGl6ZS1yYW5nZSI6ICJeMC4xLjIiLAotICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4wLjAiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgImF2YWlsYWJsZS10eXBlZC1hcnJheXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXZhaWxhYmxlLXR5cGVkLWFycmF5cy8tL2F2YWlsYWJsZS10eXBlZC1hcnJheXMtMS4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURNRDBLaU40NmVpcGV6aVNUMUxQUC9TVGZEVTBzdWZJU1htalNndlZzb1UydHF4Y3RRZUFTZWpXY2ZOdHhZS3FFVE0xVXhROHNwMk9yU0JXcEhZNnN3PT0iCi0gICAgfSwKLSAgICAiYXhlLWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjcuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXhlLWNvcmUvLS9heGUtY29yZS00LjcuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteklVUkdJUzFFMVE0cGNyTWpwK25uRWgrMTZHNTZlRy9NVWxsSkg4eUV2dzdhc0RvN0FjOXVoQzlLSUg1anpwSVR1ZUVab2xmWWdsbkNHSXVTQnozOWc9PSIKLSAgICB9LAotICAgICJheG9iamVjdC1xdWVyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9heG9iamVjdC1xdWVyeS8tL2F4b2JqZWN0LXF1ZXJ5LTMuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qc3lIdTYxZTZONFZiei92MThESHdXWUtLMGJTV0xxbjQ3ZWVEU0tQQjdtOHRxTUhGOVlKK21oSWsybFZ0ZXlaclk4dG5Tai9qSE92NFlpVEN1Q0pnZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlcXVhbCI6ICJeMi4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtamVzdC8tL2JhYmVsLWplc3QtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jZFE1ZFhqR1JkMElCUkFUaVE0bVpHbEdsUkU4a0pwalBPaXhkTlJkVCttM1VjTnFtWVdONnJLNm52dFhZZlkzRDc2Y2I4cy9PMVNzOGVhMjRQSXdjZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX19jb3JlIjogIl43LjEuMTQiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjEuMSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtamVzdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLWxvYWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1sb2FkZXIvLS9iYWJlbC1sb2FkZXItOC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUg4U3ZzTUYrbTl0MTVITkxNaXBwcHprQytZMllxK3YzU29uWnlVNzBSQkwvaDFneFBrSDA4T3Q4cEVFOVo0S2QrY3p5V0pDbG1GUzhxeklQOU9aMDRRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZmluZC1jYWNoZS1kaXIiOiAiXjMuMy4xIiwKLSAgICAgICAgImxvYWRlci11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAibWFrZS1kaXIiOiAiXjMuMS4wIiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeMi42LjUiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNjaGVtYS11dGlscyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjcuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy0yLjcuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNIaU50TU9VR1dCUUp3eklTaVZZS3U4MkdpVjRRWUdlUHAzb2RsWTF0dUtPN2dQdHBoQVQ1Ui9weTBmQTZ4dGJnTEwvUnZ0SlpuVTliOHMwRjFxMFhnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC41IiwKLSAgICAgICAgICAgICJhanYiOiAiXjYuMTIuNCIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl4zLjUuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJlbC1wbHVnaW4taXN0YW5idWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLWlzdGFuYnVsLy0vYmFiZWwtcGx1Z2luLWlzdGFuYnVsLTYuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMUlRb2s5ODIxY0M5b25DeDVvdGdGZlJtN0xtK0krd3d4T3g3MzhNL1dMUFo5UTQybTRJRzVXMEZOWDhXTEwyZ1lNWm8zSmt1WElIMkRPcFdNK3F3QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjAuMCIsCi0gICAgICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWciOiAiXjEuMC4wIiwKLSAgICAgICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6ICJeMC4xLjIiLAotICAgICAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiAiXjUuMC40IiwKLSAgICAgICAgInRlc3QtZXhjbHVkZSI6ICJeNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0Ly0vYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01MHdDd0Q1RU1OVzRhUnBPd3RxenlaSElld1RZTnhMQTRuaEIrMDlkOEJJc3NmTmZ6QlJoa0JJSGlhUHYxU2kyMjZUUVN2cDhneEFKbTJpWTJxczJoUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4zLjMiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjMuMyIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiAiXjcuMC42IgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1tYWNyb3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLW1hY3Jvcy8tL2JhYmVsLXBsdWdpbi1tYWNyb3MtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNnN1RGR3BJcjAxdk9RTk9EWE9PYUd6Mk5wQ1U1Z2w4eDFxSkZiYjZoYlp4UjdYcmNFMnZ0YkFzVEFiSjcveHdKdFV1SkV3OEs4WnIvQUUwTEhsZXNnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuMTIuNSIsCi0gICAgICAgICJjb3NtaWNvbmZpZyI6ICJeNy4wLjAiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1uYW1lZC1hc3NldC1pbXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLW5hbWVkLWFzc2V0LWltcG9ydC8tL2JhYmVsLXBsdWdpbi1uYW1lZC1hc3NldC1pbXBvcnQtMC4zLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdYaUFjKytxbzdYY0oxWm5UWUd0THhtQkNWYmRkQW1sM0NFWGdXYUJ6TnpMTm94dFE4QWlHRUZETU9ob3Q5WGpUQ1FidlA1RTc3Rmo5R2s5MjRmMDBRPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJiYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tcG9seWZpbGwtY29yZWpzMi8tL2JhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMyLTAuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iTTNnSGMzMzdEdGE0OTBnZysvQXNlTkI5TDRZTEh4cTFuR0taWlNIYmhYdjRhVFlVMk1EMmNqemExUnU0UzY5NzVZTFRhTDFLOHVKZjZ1a0poaG10dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb21wYXQtZGF0YSI6ICJeNy4xNy43IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZGVmaW5lLXBvbHlmaWxsLXByb3ZpZGVyIjogIl4wLjQuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMzIjogewotICAgICAgInZlcnNpb24iOiAiMC44LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1wb2x5ZmlsbC1jb3JlanMzLy0vYmFiZWwtcGx1Z2luLXBvbHlmaWxsLWNvcmVqczMtMC44LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlrRnJaSVRLZzF4SDZwTE5EOHpUMTRVUGdqS0hpR0xxZXg3ckdFWkNIMkV2aHNuZUphSlBlbW1wUWFJWlY1QUwwM0lJK2xYeWx3M1VtZGRESzhSVTVRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1kZWZpbmUtcG9seWZpbGwtcHJvdmlkZXIiOiAiXjAuNC4wIiwKLSAgICAgICAgImNvcmUtanMtY29tcGF0IjogIl4zLjMwLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwtcGx1Z2luLXBvbHlmaWxsLXJlZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1wb2x5ZmlsbC1yZWdlbmVyYXRvci8tL2JhYmVsLXBsdWdpbi1wb2x5ZmlsbC1yZWdlbmVyYXRvci0wLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaERKdEtqTUxWYTdaK0x3blRDeG9ETFFqNndkYytCOGR1bjdheUYyZllpZUk2T3pmdXZjTE1CMzJpaEpaNFVoQ0J3TllHbDViZy94L1A5Y01kbmtjMmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWRlZmluZS1wb2x5ZmlsbC1wcm92aWRlciI6ICJeMC40LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1yZW1vdmUtcHJvcC10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1yZW1vdmUtcHJvcC10eXBlcy8tL2JhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcmVhY3QtcmVtb3ZlLXByb3AtdHlwZXMtMC40LjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lcWowaFZjSlVSNTcvVWcyekUxWXN3c3c0TGh1cXFIaEQrOHYxMjBUMWNsM2tqZzc2UXd0eUJyZElrNFdWd0srbEFoQkpWWUNkL3YrNG5jNHkrOEpzQT09IgotICAgIH0sCi0gICAgImJhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4Ly0vYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU03TFEwYnhhcmt4UW9OK3Z6NWFKUHNMQm43N244UWdURm1vOFdLMC80NGF1SzJ4bENYclljVXhIRnhnVTdxVzVZencvQ2ptTFJLMnVKemFDZDdMdnFRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6ICJeNy44LjQiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50IjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiAiXjcuOC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXByZXNldC1qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtamVzdC8tL2JhYmVsLXByZXNldC1qZXN0LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnB0ZjJGemxQQ1dZdUpnNDFIQnFYVlQ4eW02YlhPZXZ1Q1RiaHhsVXBqd3R5c0dhSVdGdkRFanA0eStHN2ZsMTNGZ09kanM3UC9EbUVycUg3ZGEwQWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJiYWJlbC1wbHVnaW4tamVzdC1ob2lzdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImJhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4IjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJlbC1wcmVzZXQtcmVhY3QtYXBwIjogewotICAgICAgInZlcnNpb24iOiAiMTAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtcmVhY3QtYXBwLy0vYmFiZWwtcHJlc2V0LXJlYWN0LWFwcC0xMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIwRDlJWjFXaGhDV2tyVFh5RnVJSWdxR3pTa1JJSDVENUFtQjBiWGJ6WUFCMU9CQXdIY1VleVdXMkxvcnV0TFdGNWJ0Tm8vTjdyL2NJZG12dktKbFlnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWNsYXNzLXByb3BlcnRpZXMiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLWRlY29yYXRvcnMiOiAiXjcuMTYuNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tcHJvcG9zYWwtbnVtZXJpYy1zZXBhcmF0b3IiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXByb3Bvc2FsLW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1wcm9wb3NhbC1wcml2YXRlLW1ldGhvZHMiOiAiXjcuMTYuMCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS1mbG93LXN0cmlwLXR5cGVzIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcmVhY3QtZGlzcGxheS1uYW1lIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi10cmFuc2Zvcm0tcnVudGltZSI6ICJeNy4xNi40IiwKLSAgICAgICAgIkBiYWJlbC9wcmVzZXQtZW52IjogIl43LjE2LjQiLAotICAgICAgICAiQGJhYmVsL3ByZXNldC1yZWFjdCI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBiYWJlbC9wcmVzZXQtdHlwZXNjcmlwdCI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBiYWJlbC9ydW50aW1lIjogIl43LjE2LjMiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLW1hY3JvcyI6ICJeMy4xLjAiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLXRyYW5zZm9ybS1yZWFjdC1yZW1vdmUtcHJvcC10eXBlcyI6ICJeMC40LjI0IgotICAgICAgfQotICAgIH0sCi0gICAgImJhbGFuY2VkLW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iCi0gICAgfSwKLSAgICAiYmF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmF0Y2gvLS9iYXRjaC0wLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteCtWQWlNUkw2VVBreCtrdWROdnhUbDZoQjJYTk5DRzJyKzd3aXhWZklZd3UvMkhLUlhpbXdReWF1bUxqTXZlV3ZUMkhrZC9jQUp3K1FCTWZKL0VLVnc9PSIKLSAgICB9LAotICAgICJiZmoiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmZqLy0vYmZqLTcuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rZS9VcVV6d216SmFtTkY1MHRCVjZ0WlBUT1JvdzdnUTk2aUZvdys4YjU2Mk9kTXBFSzBCY0pFcTJPU1BFRG1BYlNNQlE3UEtaODd1YkZrZ3hwWVdndz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJsdWViaXJkIjogIl4zLjUuNSIsCi0gICAgICAgICJjaGVjay10eXBlcyI6ICJeMTEuMS4xIiwKLSAgICAgICAgImhvb3B5IjogIl4wLjEuNCIsCi0gICAgICAgICJ0cnllciI6ICJeMS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYmlnLmpzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JpZy5qcy8tL2JpZy5qcy01LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnlMMk95bUp4bWFyTzhneE1yMG1oQ2hzTzlRR3doeW5mdXU0K01IVEFXNmN6ZnE5aHVtQ0I3cktwVWpEZDlZVWlEUFU0bXpweXVwRlN2T0NsQXdibVE9PSIKLSAgICB9LAotICAgICJiaW5hcnktZXh0ZW5zaW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iaW5hcnktZXh0ZW5zaW9ucy8tL2JpbmFyeS1leHRlbnNpb25zLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qRGN0Si9JVlFiWm9KeWtvZUhiaFhwT2xOQnFHTmN3WEpLSm9nNDJFNUhEUFV3UVRTZGpDSGRpaGpqMERsbmhlUTdibGJUNmRIT2FmTkFpUzhvb1FLQT09IgotICAgIH0sCi0gICAgImJsdWViaXJkIjogewotICAgICAgInZlcnNpb24iOiAiMy43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JsdWViaXJkLy0vYmx1ZWJpcmQtMy43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhwTmo2R0RRemRmVytyMldubjd4aVNBZDdUTTNqemt4R1hCR1R0V0t1U1h2MXhVVithenhBbThqZFdaTjA2UVRRaysyTjJYQjlqUkRrdmJtUW1jUnRnPT0iCi0gICAgfSwKLSAgICAiYm9keS1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIwLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JvZHktcGFyc2VyLy0vYm9keS1wYXJzZXItMS4yMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qV2k3YWJUYll3YWpPeXRXQ1FjMzdWdWxtV2lSYWU1UnlUcGFDeURjUzUvbE1kdHdTejVsT3BERTY3c3J3L0hZZTM1ZjF6M2ZEUXcrM3R4ZzdnTnRXdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJ5dGVzIjogIjMuMS4yIiwKLSAgICAgICAgImNvbnRlbnQtdHlwZSI6ICJ+MS4wLjQiLAotICAgICAgICAiZGVidWciOiAiMi42LjkiLAotICAgICAgICAiZGVwZCI6ICIyLjAuMCIsCi0gICAgICAgICJkZXN0cm95IjogIjEuMi4wIiwKLSAgICAgICAgImh0dHAtZXJyb3JzIjogIjIuMC4wIiwKLSAgICAgICAgImljb252LWxpdGUiOiAiMC40LjI0IiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIjIuNC4xIiwKLSAgICAgICAgInFzIjogIjYuMTEuMCIsCi0gICAgICAgICJyYXctYm9keSI6ICIyLjUuMSIsCi0gICAgICAgICJ0eXBlLWlzIjogIn4xLjYuMTgiLAotICAgICAgICAidW5waXBlIjogIjEuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJieXRlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J5dGVzLy0vYnl0ZXMtMy4xLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vTmY3VHl6VHg2UzN5UkpPYk9BVjc5NTZyOGNyMitPajhBQzVkdDh3U1AzQlFBb2VYNThOb0h5Q1U4UDh6R2tOWFN0alRTaTZmek82RjBwQmRjWWJFZz09IgotICAgICAgICB9LAotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImljb252LWxpdGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC40LjI0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWNvbnYtbGl0ZS8tL2ljb252LWxpdGUtMC40LjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdjNNWG5aQWN2bnl3a1RVRVpvbUlBY3RsZTdSWFhlZWRPUjMxd3dsN1ZseW9YTzRRaTlhcnZTZW5OUVduZTFUY1J3aENMMUh3TEkyMWJFcWRwajgvckE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInNhZmVyLWJ1ZmZlciI6ICI+PSAyLjEuMiA8IDMiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHBwNjBQNklVSkRUdU9xLzVaOGNkc2t6SnVqZndxZk9Ua3J3SXdqN0lSSVNwbmtKblQ2U3lKNFBDUG5HTW9GakM5ZGRoYWw1S1ZJWXRBdDk3aXgwNUE9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImJvbmpvdXItc2VydmljZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ib25qb3VyLXNlcnZpY2UvLS9ib25qb3VyLXNlcnZpY2UtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVovNWxRUk1PRzlrN1crRmtlR1ROamg3aHRxbi8yTE1uZk92Qlo4cHluTlpDTTlNd2tRa0kzemVJNG96MDl1V2RjZ21nSHVnVnZCcXhHZzRWUUo1UENnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXJyYXktZmxhdHRlbiI6ICJeMi4xLjIiLAotICAgICAgICAiZG5zLWVxdWFsIjogIl4xLjAuMCIsCi0gICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIiwKLSAgICAgICAgIm11bHRpY2FzdC1kbnMiOiAiXjcuMi41IgotICAgICAgfQotICAgIH0sCi0gICAgImJvb2xiYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jvb2xiYXNlLy0vYm9vbGJhc2UtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpaT1NBN01vOXNOR0I4K1VqU2d6ZEx0b2tXQWt5MXpienRNM1dSTENiWjcwLzNjVEFObVFtT2RSN3kyZytKMGUyV1h5d3kxeVM0Njh0WStJcnVxRXd3PT0iCi0gICAgfSwKLSAgICAiYnJhY2UtZXhwYW5zaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMS4xLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pQ3VQSERGZ3JIWDdIMnZFSS81eHB6MDd6U0hCMDBUcHVncWhtWXRWbU1PNjUxOG1DdVJNb09ZRmxkRUJsMGcxODd1Zm96ZGFIZ1dLY1lGYjYxcUdpQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIsCi0gICAgICAgICJjb25jYXQtbWFwIjogIjAuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJyYWNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZXMvLS9icmFjZXMtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWI4dW0rTDFSek0zV0RTenZobTZnSXoxeWZUYkJ0NllUbGNFS0F2c21xQ1paRnc0Nno2MjZsVmo5ajF5RVBXMzNINUgrbEJRcFpNUDFrOGwrNzhIYTBBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZmlsbC1yYW5nZSI6ICJeNy4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYnJvd3Nlci1wcm9jZXNzLWhydGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2VyLXByb2Nlc3MtaHJ0aW1lLy0vYnJvd3Nlci1wcm9jZXNzLWhydGltZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOW81VWVjSTNHaGtwTTZEclhyNjlQYmxJdVd4UEtrOVkwakhCUmhkb2NaMnk3WUVDQkZDc0htNzlQcjNPeVIyQXZqaERrYWJGSmFESk1ZUmF6SGdzb3c9PSIKLSAgICB9LAotICAgICJicm93c2Vyc2xpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIxLjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb3dzZXJzbGlzdC8tL2Jyb3dzZXJzbGlzdC00LjIxLjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU0wTUZvWnpiVXJSVTRLTmZDckRMbnZ5RTdndWIrcGVldG9UaWQzVEJJcXR1bmFESnlYbHdoYWtUKy9Wa3ZTWGNmSXpGZksvbmtDczRubXlUbXhkTlNnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDE1MDMiLAotICAgICAgICAiZWxlY3Ryb24tdG8tY2hyb21pdW0iOiAiXjEuNC40MzEiLAotICAgICAgICAibm9kZS1yZWxlYXNlcyI6ICJeMi4wLjEyIiwKLSAgICAgICAgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiXjEuMC4xMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJic2VyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JzZXIvLS9ic2VyLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nUXhUTkUvR0FmSUlybUhMVUUzb0p5cDVGTzZIUkJmaGpudzQvd01tQTYzWkdESm5XQm1nWS9seVFCcG5EVWtHbUFoYlNlMzl0eDJkL2lUT0FmZ2x3UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm5vZGUtaW50NjQiOiAiXjAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJ1ZmZlci1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1ZmZlci1mcm9tLy0vYnVmZmVyLWZyb20tMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUUrWFFDUndTYmFhaUNodHY2azZEd2djK2J4K0JzNnZ1S0pISGw1a294L0JhS2JoaVh6cVFPd0s0Y08yMnlFbEdwMk9DbWp3VmhUM0hteGd5UEduSmZRPT0iCi0gICAgfSwKLSAgICAiYnVpbHRpbi1tb2R1bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1aWx0aW4tbW9kdWxlcy8tL2J1aWx0aW4tbW9kdWxlcy0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd3hYQ2RsbHdHaEkya0NDME1udlRHWVRNdm5WWlR2cWd5cGtpVEk4UGE1dGN6Mmk2VnFzcXdZR2dxd1hqaSs0UmdDem1zNkVhakU0SXhpVUg2SEg4blE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImJ5dGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J5dGVzLy0vYnl0ZXMtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBNaE9mRkRQaXY5dDVqaklYa0hvc1dta1N5UWJ2c2dFVk5rejBFUkhidUxoMlQvN2o0TXFxcHo1MjNGZThNVlk4OUtDNlNoL1FmUzJzTStTamdGRGN3PT0iCi0gICAgfSwKLSAgICAiY2FsbC1iaW5kIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbGwtYmluZC8tL2NhbGwtYmluZC0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN08rRmJDaWhyQjVXR2JGWWVzY3R3bVRLYWU2ck9pSXptejFpY3JlV0orMGFBN0xKZnVxaEVzbzJUOW5jcGNGdHpNUXR6WGYyUUdHdWVXSkdUWXNxckE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMSIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJjYWxsc2l0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbHNpdGVzLy0vY2FsbHNpdGVzLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QOEJqQXNYdlpTK1ZJRFVJMTFoSENRRXY3NFlUNjdZVWk1SkpGTldJcUwyMzVzQm1qWDQrcXg5TXV2bHM1aXZ5TkVOY3R4NDZ4UUxRM2FUdUU3c3NhUT09IgotICAgIH0sCi0gICAgImNhbWVsLWNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWwtY2FzZS8tL2NhbWVsLWNhc2UtNC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWd4R1dCclRUMUp1TXg2UitvNVBUWE1tVW5oblZ6TFE5U051dEQ0WXFLdEk2YXA4OTd0M3RLRUNZbGE2Z0NXRWtwbFhubE55YkVrWmc5R0VHeEtGQ2d3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicGFzY2FsLWNhc2UiOiAiXjMuMS4yIiwKLSAgICAgICAgInRzbGliIjogIl4yLjAuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJjYW1lbGNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLy0vY2FtZWxjYXNlLTYuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HbXk2RmhZbENZN3VPRWxaVVNieG8yVUNESDhvd0VrOTk2Z2ticnBzZ0d0ckpMTTNKN2pHeGw5SWM3UXd3ajRpdk9FNUFXWldSTWVjRGRGN2hxR2pGQT09IgotICAgIH0sCi0gICAgImNhbWVsY2FzZS1jc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLWNzcy8tL2NhbWVsY2FzZS1jc3MtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFPU3ZldmhzbGlqZ1l3Ung2UnY3ektkTUY4bGJSbXgrdVFHeDIrdkRjK0tJL2VCbnN5OWtpdDVhajIzQWdHdTNwYTR0OUFnd2JuWFdxUytpT1krMmFBPT0iCi0gICAgfSwKLSAgICAiY2FtZWxpemUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxpemUvLS9jYW1lbGl6ZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFUrVHgyZnN5cHhUZ3RMb0UzNm5waTNVcWNqU1NNTllma3FnbW9FaHRacnJhUDVWV3EwSzdGa1dWVFlhOGVNUHRuVS9HMnR4VnNmZENKVG45dXpwdVE9PSIKLSAgICB9LAotICAgICJjYW5pdXNlLWFwaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW5pdXNlLWFwaS8tL2Nhbml1c2UtYXBpLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ic1R3dUlnL0JaWksvdnJlVlRZWWJTV29lMkYrNzFQN0s1UUdFWCtwVDI1MERaYmZVMU1RNXByT0twUFIrTEw2dVdLSzNLTXdNQ0FTNzRRQjNVbTF1dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJyb3dzZXJzbGlzdCI6ICJeNC4wLjAiLAotICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMCIsCi0gICAgICAgICJsb2Rhc2gubWVtb2l6ZSI6ICJeNC4xLjIiLAotICAgICAgICAibG9kYXNoLnVuaXEiOiAiXjQuNS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImNhbml1c2UtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zMDAwMTUwMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FuaXVzZS1saXRlLy0vY2FuaXVzZS1saXRlLTEuMC4zMDAwMTUwMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2Y5TmlGK3daeFBmenY4WjNpUzByWE0xRG8raU95Mkx4dmliMzhnbEZYKzA4VENZWVlHUjVmUkpYazRkNzdDNEFZd2hVamdZZ01zTXVkYmgyVHFDS3c9PSIKLSAgICB9LAotICAgICJjYXNlLXNlbnNpdGl2ZS1wYXRocy13ZWJwYWNrLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYXNlLXNlbnNpdGl2ZS1wYXRocy13ZWJwYWNrLXBsdWdpbi8tL2Nhc2Utc2Vuc2l0aXZlLXBhdGhzLXdlYnBhY2stcGx1Z2luLTIuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yb0lGT05oY3hvZzBKU1NXYnZWQWgzT29jdWttU2dwcU9INllwTWtDdmF2L3lTSVYzSktnNERjOHZZdFFqWWkvVXhwTkUzNnIvOXYrVnFUUXFna1ltdz09IgotICAgIH0sCi0gICAgImNoYWxrIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstNC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9LbmJoRnlSSVhwVXVlejhpQk1teUVhNG5iajRJT1F5dWhjL3d5OWtZNy9XVlBjd0lPOVZBNjY4UHU4UmtPNyswRzc2U0xST2V5dzlDcFEwNjFpNG1BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMS4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJjaGFyLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXItcmVnZXgvLS9jaGFyLXJlZ2V4LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rV1dYenR2WjVTQlFWK2VSZ0tGZWg4cTVzTHVaWTIrOFdVSXpseFdWVGcrb0d3WTE0cXlseDFLYkt6SGQ4UDZaWWtBZzB4eUlEVTlKTUhoeUpNWjFqdz09IgotICAgIH0sCi0gICAgImNoZWNrLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMTEuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGVjay10eXBlcy8tL2NoZWNrLXR5cGVzLTExLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSEJpWXZYdm45WjcwWjg4WEtqejNBRUtkNEhKaEJYc2Ezajd4Rm5JVEF6b1M4K3E2ZUlHaThxREI4RktQQkFqdHV4akkvekZwd3VpQ2I4b0R0S09ZckE9PSIKLSAgICB9LAotICAgICJjaG9raWRhciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaG9raWRhci8tL2Nob2tpZGFyLTMuNS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EcjNzZktSUDZvVGNqZjJKbVVtRkpmZVZNdlhCZGVneEIwaVZRNWViMlYxMHVGSlVDQVM4T0J5WmRWQXlWYjh4WE56M0dqalRnajlrTFdzWlRxRTZrdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFueW1hdGNoIjogIn4zLjEuMiIsCi0gICAgICAgICJicmFjZXMiOiAifjMuMC4yIiwKLSAgICAgICAgImZzZXZlbnRzIjogIn4yLjMuMiIsCi0gICAgICAgICJnbG9iLXBhcmVudCI6ICJ+NS4xLjIiLAotICAgICAgICAiaXMtYmluYXJ5LXBhdGgiOiAifjIuMS4wIiwKLSAgICAgICAgImlzLWdsb2IiOiAifjQuMC4xIiwKLSAgICAgICAgIm5vcm1hbGl6ZS1wYXRoIjogIn4zLjAuMCIsCi0gICAgICAgICJyZWFkZGlycCI6ICJ+My42LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdsb2ItcGFyZW50IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi1wYXJlbnQvLS9nbG9iLXBhcmVudC01LjEuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFPSWdTUUNlcGlKWXdQM0FSbkd4KzVWblR1MkhCWWR6YkdQNDVlTHcxdnIzekIzdlpMZXllZDFzQzlobmJjT2M5L1NyTXlNNVJQUXJrR3o0YVM5Wm93PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1nbG9iIjogIl40LjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJjaHJvbWUtdHJhY2UtZXZlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hyb21lLXRyYWNlLWV2ZW50Ly0vY2hyb21lLXRyYWNlLWV2ZW50LTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wM0tVTHlRZzRTN05JSGl4ZHdiR1grbkZIa29CaUE0WVFteVd0amI4WG5nU0tWMTI0bkptUnlzZ0FldWpiVVZiMTV2aCtSdkZVZkNQcVU3clhrK2haZz09IgotICAgIH0sCi0gICAgImNpLWluZm8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2ktaW5mby8tL2NpLWluZm8tMy44LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVYVGdnSFdTb29ZaHE0OUYyb3BRaHVIV2d6dWNmRjJZZ09ESzRlMTU2NkdRczVCSWZQMzBCMG9lbndCSkhmV3hBczJmeVBCMXM3TWc5NDl6TGY2MVl3PT0iCi0gICAgfSwKLSAgICAiY2pzLW1vZHVsZS1sZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9janMtbW9kdWxlLWxleGVyLy0vY2pzLW1vZHVsZS1sZXhlci0xLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMFROaUdzdGJRbUNGd3Q0YWtqakJnNXBMUlRTeWovUGtXUTFab08yem50bWc5eUxxU1J4d0VhNGlDZlFMR2pxaGlxQmZPSmE3Vy9FOHdmR3JURG1sWlE9PSIKLSAgICB9LAotICAgICJjbGVhbi1jc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xlYW4tY3NzLy0vY2xlYW4tY3NzLTUuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KVkpiTStmM2QzUTcwNHJGNGJxUTVVVXlUdHVKMEpSS05iVEtWRWV1akNDQm9NZGtFaStWK2U4b2t0TzlxR1FOU3ZIckZUTTZKWlJYclV2R1IxY3p3dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiAifjAuNi4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiY2xpdWkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xpdWkvLS9jbGl1aS04LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlNlTm55dXM3NUM0Ly9OUTlnUXQxL2NzVFh5by84U2IrYWZMQWt6QXB0RnVNc29kOUhGb2tHTnVkWnBpL29RVjczaG5WSytzUis1UFZSTWQrRHI3WVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiY28iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY28vLS9jby00LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUVZiMGRNNUh2Ryt1YXhpdG04d09ObDdqbHR4OGRxaGZVMzNEY3F0T1pjTFNWSUtTRERMRGk3KzBMYkFLaXlJOGhEOXU0Mm0yWXhYU2tNR1dUaGFlY1E9PSIKLSAgICB9LAotICAgICJjb2EiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29hLy0vY29hLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNS9qRytZUW5TeTRuUlRWNEY3bFBlcEJKWjhxQk5KSkRCdUpkb2VqRHlMWGdtTDdJRW8rTGUySkRadWRGVEZ0N21yQ3FJUmFTandzNHlnUkNUQ0FYQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9xIjogIl4xLjUuMSIsCi0gICAgICAgICJjaGFsayI6ICJeMi40LjEiLAotICAgICAgICAicSI6ICJeMS4xLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4xLjkuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjaGFsayI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstMi40LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjMuMi4xIiwKLSAgICAgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjUiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1jb252ZXJ0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY29sb3ItbmFtZSI6ICIxLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1uYW1lIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03MmZTZW5oTXcySFpNVFZIZUNBOUtDbXBFSWJ6V2lRc2pOK0JIY0JiUzl2cjFtdHQrdkpqUGRrc0lCTlVtS0FXOFRGVURQSks1U1VVM1FoRTlORVhEdz09IgotICAgICAgICB9LAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmJSb3JCNUZVUVd2bGExNlU4Ui9xZ2FGSXlhMnFHendEck5tQ1p1WUtyYmRTVU1HNkkxWkNHUVJlZmtSVmh1T2tJR1ZuZTdCUTM1RFNmbzFxdkpxRmc9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImhhcy1mbGFnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy0zLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNLSmYxK2NlUUJyNFNNa3ZRbkJETkR0ZjRUWHBWaFZHYXRldTB0OTE4YmwzMEZuYkUybTR2TkxYK1ZXZS9kcGpsYitIdWdHWXpXN3VRWEg5OEhQRVl3PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sbGVjdC12OC1jb3ZlcmFnZS8tL2NvbGxlY3QtdjgtY292ZXJhZ2UtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlCUHRsamZDTmNUS05BdG8wS0V0RGZaM3F6akp2cUUzYVRHWnNiaGpTQmxvcnFwWEpsYVdXdFBPMzVEK1pJbW9DM0tXZWpYNjRvK3lQR3hoV1NUemZnPT0iCi0gICAgfSwKLSAgICAiY29sb3ItY29udmVydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUlJFQ1BzajdpdS94YjVvS1ljc0ZIU3BwRk5uc2ovNTJPVlRSS2I0elA1b25Yd1ZGM3pWbW1Ub05jT2ZHQytDUkRwZksvVTU4NGZNZzM4WkhDYUVsS1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb2xvci1uYW1lIjogIn4xLjEuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJjb2xvci1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLW5hbWUvLS9jb2xvci1uYW1lLTEuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kT3krM0F1VzNhMndOYlpISXVNWnBUY2dqR3VMVS91QkwvdWJjWkY5T1hiRG84ZmY0Tzh5VnA1QmYwZWZTOHVFb1lvNXE0Rng3ZFk5T2dRR1hnQXNRQT09IgotICAgIH0sCi0gICAgImNvbG9yZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuOS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvcmQvLS9jb2xvcmQtMi45LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWplQzFheFhwbmIwLzJubi9ZMUxQdUxkZ1hCTEg3YURjSHU0S0VLZnF3M0NVaFg3WnBmQlNsUEt5cVhFNmJ0SWdFemZXdHJYMy90eUJDYUN2WHZNa093PT0iCi0gICAgfSwKLSAgICAiY29sb3JldHRlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvcmV0dGUvLS9jb2xvcmV0dGUtMi4wLjIwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JZkVEeHdvV0lqa2VYTDFlWGNEaW93NFViS2poTGRxNi9FdVNWUjlHTU43S1ZIM3I5Z1E4M2U3M2hzejFOZDFUM2lqZDV4djF3Y1dSWU8rRDZrQ0kydz09IgotICAgIH0sCi0gICAgImNvbWJpbmVkLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21iaW5lZC1zdHJlYW0vLS9jb21iaW5lZC1zdHJlYW0tMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZRTjRNUmZ1SmVIZjdjQmJCTUpGWGhLU0RxKzJrQUFyQmxtUkJ2Y3ZGRTVCQjFIWktYdFNGQVNEaGRsejl6T1l3eGg4bERkbnZtTU9lLys1Y2RvRWRnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVsYXllZC1zdHJlYW0iOiAifjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImNvbW1hbmRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTIuMjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3BWa21NOHZGMnZRVWtqMkx2Wm1EMzVKeGVKT0xDd0o5Y1VrdWd5azJudWhidjMrbUp2cExZWXQrMCtVU014RStvaitleS9sSkVuaFp3NzV4L09NY1E9PSIKLSAgICB9LAotICAgICJjb21tb24tcGF0aC1wcmVmaXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbW9uLXBhdGgtcHJlZml4Ly0vY29tbW9uLXBhdGgtcHJlZml4LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RRTMzaFRvWnNlQ0gzalMwcU45Nk8vYlNoM2thdy9oK1RxN25neVk5ZVdEVW5UbFROVXlxZnF2Q1hpb0xlNU5hNWpGc0w3OHJhL3d1QlU0aXVFZ2Q0dz09IgotICAgIH0sCi0gICAgImNvbW1vbi10YWdzIjogewotICAgICAgInZlcnNpb24iOiAiMS44LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1vbi10YWdzLy0vY29tbW9uLXRhZ3MtMS44LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdrL1o4NTJEMld0Yi8vMEkra1JGTktLRTlkSUlWaXJqb3FQb0Exd0pVK1hlUFZYWmZHZUJwazQ1K0ExcktPNFE0M3BycVdCTlkvTWlJZVJMYlBXVWFBPT0iCi0gICAgfSwKLSAgICAiY29tbW9uZGlyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1vbmRpci8tL2NvbW1vbmRpci0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVzlwQWh3MGphMUVkYjVHVmRJRjFtalp3L0FTSTBBbFNoWE04M1VVR2UyRFZyNVRkQVBFQTFPQThtL2c4eldwOXg2T243Z3F1ZlkrRmF0RGJDM01EUWc9PSIKLSAgICB9LAotICAgICJjb21wcmVzc2libGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMTgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXByZXNzaWJsZS8tL2NvbXByZXNzaWJsZS0yLjAuMTgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFGM3I3UDVkV3hMOE14eUlUUk1sT1JRTmFPQTJJa0FGYVRyNGs3QlV1bWpQdFJwR0RUWnBsMFBiMVhDTzZKZURDQmRwMTI2Q2dzOXNNeHFTamdZeVJnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibWltZS1kYiI6ICI+PSAxLjQzLjAgPCAyIgotICAgICAgfQotICAgIH0sCi0gICAgImNvbXByZXNzaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXByZXNzaW9uLy0vY29tcHJlc3Npb24tMS43LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWphU0lEelA5cFpWUzRaZlErVHp2dGlXaGRwRmhFMlJESHo4UUprcFg5U0lwTHE4OFZ1ZUY1akp3NnQrNkNVUWNBb0E2dCt4ODlNTHJXQXFwZkRFOGlRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWNjZXB0cyI6ICJ+MS4zLjUiLAotICAgICAgICAiYnl0ZXMiOiAiMy4wLjAiLAotICAgICAgICAiY29tcHJlc3NpYmxlIjogIn4yLjAuMTYiLAotICAgICAgICAiZGVidWciOiAiMi42LjkiLAotICAgICAgICAib24taGVhZGVycyI6ICJ+MS4wLjIiLAotICAgICAgICAic2FmZS1idWZmZXIiOiAiNS4xLjIiLAotICAgICAgICAidmFyeSI6ICJ+MS4xLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtcyI6ICIyLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJtcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UcHA2MFA2SVVKRFR1T3EvNVo4Y2Rza3pKdWpmd3FmT1RrcndJd2o3SVJJU3Bua0puVDZTeUo0UENQbkdNb0ZqQzlkZGhhbDVLVklZdEF0OTdpeDA1QT09IgotICAgICAgICB9LAotICAgICAgICAic2FmZS1idWZmZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2QyVVpCSkRrWGxZN0diSnhmc0U4L252S2tVRVUxRzM4YzFzaU42UVA2YTlQVDlNbUhCOEducHNjU21NSlNvRjhMT0lydDh1ZC93UHRvanlzNEc2K2c9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImNvbmNhdC1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uY2F0LW1hcC8tL2NvbmNhdC1tYXAtMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9TcnY0ZHN3eVFOQmZvaEdwejlvNlliM0d6M1NyVURxQkg1clR1aEdSN2FodGxiWUtuVnh3MmJDRk1SbGphQTdFWEhhWFo4d3NIZG9kRnZia2hLbXFnPT0iCi0gICAgfSwKLSAgICAiY29uZnVzaW5nLWJyb3dzZXItZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uZnVzaW5nLWJyb3dzZXItZ2xvYmFscy8tL2NvbmZ1c2luZy1icm93c2VyLWdsb2JhbHMtMS4wLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Kc1BLZG1oOFprbW5IeERrNTVGWjFUcVZMdkVRVHZvQnlKWlJOOWp6STBVanhLL1FnQW1zcGh6N1BHdHFnUGllUVovQ1FjSFdYQ1I3QVRETmhHZStZQT09IgotICAgIH0sCi0gICAgImNvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29ubmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFjay8tL2Nvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2stMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVU3Mys2bFFGbWZpTlByWWJYcXI2a1oxaTF3aVJxWG5wMm5oTXNJTnNlV1hPOGxEYXUwTEdFZmZKOGtRaTRFakxaeW1wVmdSZHZxakFnaVoxdGd6RERBPT0iCi0gICAgfSwKLSAgICAiY29udGVudC1kaXNwb3NpdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb250ZW50LWRpc3Bvc2l0aW9uLy0vY29udGVudC1kaXNwb3NpdGlvbi0wLjUuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRnZlWlROdUd3MDRjeGxBaVdiemk2elRBTC9saGVoYVdiVHRnbHVKaDQvRTk1RHFNd1RtaGEzS1pOMWFBV0E4Y0ZJaEh6TVpVdkxldmt3NVJxayt0U1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzYWZlLWJ1ZmZlciI6ICI1LjIuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJjb250ZW50LXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udGVudC10eXBlLy0vY29udGVudC10eXBlLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uVGpxZmNCRkVpcEtkWEN2NFlEUVdDZm1jTFpLbTgxbGRGMHBBb3BUdnlyRkdWYmNSNlAvVkFBZDVHN04rMHRUcjhRcWlVMHRGYWRENkZLNE50SndPQT09IgotICAgIH0sCi0gICAgImNvbnZlcnQtc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9jb252ZXJ0LXNvdXJjZS1tYXAtMS45LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFTRkJ1cDBNejF1eWlJakFOYW4xanpMUWFtaTl6MVBvWVNaQ2lpWVcyRmN6UGJlblhjNDVGWmRCWkx6T1QrcjYraWNpdUVNb2R0bUN0aStoamFBazBBPT0iCi0gICAgfSwKLSAgICAiY29va2llIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvb2tpZS8tL2Nvb2tpZS0wLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVozR1V5bi9vOGdmS0psbmxYN2c3eHE0Z3lPNk9TdWhHUEthYUdzc0dCMnFnRFVTMGdQZ3RUdm95WkxUdDlBYjZkQzRoZmM5ZFY1YXJrdmMvT0Ntcnc9PSIKLSAgICB9LAotICAgICJjb29raWUtc2lnbmF0dXJlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvb2tpZS1zaWduYXR1cmUvLS9jb29raWUtc2lnbmF0dXJlLTEuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RQUR6bGFIYzhpY1Y4STd2YmFKWEp3b2Q5SFdZcDh1Q3FmMXhhNE9mTnUxVDdKVnhRSXJVZ09XdEhkTkR0UGl5d21GYmlTMTJWam90SVhMcktNM29yUT09IgotICAgIH0sCi0gICAgImNvcmUtanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMxLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvcmUtanMvLS9jb3JlLWpzLTMuMzEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTklwMlRRU0dmUjZiYTVhYWxaRCtaUTFmU3hHaERvL3MxdzBueDNSWXpmMnBuSnh0N1l5bnhGbEZTY1A2ZVY3K0dac0tPOTVOU2pHeHlKc1UzRFpnZVE9PSIKLSAgICB9LAotICAgICJjb3JlLWpzLWNvbXBhdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMzEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS1qcy1jb21wYXQvLS9jb3JlLWpzLWNvbXBhdC0zLjMxLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhNN1lDdTFjVTZPcHg3TVhOdTBOdXVtTTBlek5lQWVSS2FkaXh5aVFFTFdZM3ZUM0RlOVM0SjVaQk1yYVdWMnZabnJFMUNpcmwwR3RGdER0TVVYelB3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiY29yZS1qcy1wdXJlIjogewotICAgICAgInZlcnNpb24iOiAiMy4zMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3JlLWpzLXB1cmUvLS9jb3JlLWpzLXB1cmUtMy4zMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vQW5FOVk0T3NKWmljQ3pJZTk3SlA1WG9QS1FKZlR1RUc0M2FFVkxGSkdPSnB5cUVMb2QrcEU2TEVsNjNEZkcxTXA4d1g5N0xEYURweTFHbUxFVXhsZz09IgotICAgIH0sCi0gICAgImNvcmUtdXRpbC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3JlLXV0aWwtaXMvLS9jb3JlLXV0aWwtaXMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpRQnZpMURjcEo0R0RxYW5qdWNaMkhqM3dFTzVwWkRTODlCV2JrY3J2ZHhrc0pvcndVRERaYW1YOWxkRmtwOWF3MmxtQkRMZ2tPYkVBNERXTko5RllRPT0iCi0gICAgfSwKLSAgICAiY29zbWljb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29zbWljb25maWcvLS9jb3NtaWNvbmZpZy03LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQWRtWDZ4VXpkTkFTc3dzRnRtd1N0N1ZqOHBvOUl1cVhtMFVYejdRS1B1RVVtUEI0WHlqR2ZhQXIyUFN1RUxNd2tSTVZIMUVwSWtYNWJUWkdSQjNlQ0E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvcGFyc2UtanNvbiI6ICJeNC4wLjAiLAotICAgICAgICAiaW1wb3J0LWZyZXNoIjogIl4zLjIuMSIsCi0gICAgICAgICJwYXJzZS1qc29uIjogIl41LjAuMCIsCi0gICAgICAgICJwYXRoLXR5cGUiOiAiXjQuMC4wIiwKLSAgICAgICAgInlhbWwiOiAiXjEuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJjcm9zcy1zcGF3biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1zcGF3bi8tL2Nyb3NzLXNwYXduLTcuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pUkRQSktVUFZFTkQ3ZEhQTzhya2JPblBweUR5Z2NERnRXanBlV05DZ3k4V1AyclhjeFhMOFRza1JlUWw2T3JCMkc3K1VKcmFnczFxMTVGdWRjN0c2dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBhdGgta2V5IjogIl4zLjEuMCIsCi0gICAgICAgICJzaGViYW5nLWNvbW1hbmQiOiAiXjIuMC4wIiwKLSAgICAgICAgIndoaWNoIjogIl4yLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJjcnlwdG8tcmFuZG9tLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcnlwdG8tcmFuZG9tLXN0cmluZy8tL2NyeXB0by1yYW5kb20tc3RyaW5nLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12MXBsSUQzeTlyL2xQaHZpSjF3clhwTGV5VUlHQVoyU0hOWVRFYXBtNy84QTluTFBveXZWcDNSSy9FUEZxbjVrRXpueVdnWVpOc1J0WVlJV2J1RzhLQT09IgotICAgIH0sCi0gICAgImNzcy1ibGFuay1wc2V1ZG8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLWJsYW5rLXBzZXVkby8tL2Nzcy1ibGFuay1wc2V1ZG8tMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZTOTBYV3RzSEdxb00wdDRLcEgwNTNjNGVoeFoyRTZIdEdJN3g2OFlGVjBwVG8vUW1rVi9ZRkErTm5sdks4Z3V4WlZOV0dRaFZOSkdDMzlROFhGNE9RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC45IgotICAgICAgfQotICAgIH0sCi0gICAgImNzcy1jb2xvci1rZXl3b3JkcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtY29sb3Ita2V5d29yZHMvLS9jc3MtY29sb3Ita2V5d29yZHMtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZ5eXJESFpLRWpYRHBOSll2VnNWOTYwRmlxUXlYYy9MbFltc3hsMkJjZE1iMldQeDBPR1JWZ1RnNTVyUFN5TFNOTXFQNTJSOXI4Z2VTcDdhcE4zT2ZnPT0iCi0gICAgfSwKLSAgICAiY3NzLWRlY2xhcmF0aW9uLXNvcnRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtZGVjbGFyYXRpb24tc29ydGVyLy0vY3NzLWRlY2xhcmF0aW9uLXNvcnRlci02LjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItakRmc2F0d1dNV04wTU9EQUZ1SHN6ZmpwaEVYZk53OUpVQWhtWTRwTHUzVHlUVStvaFVwc2JWdGJVKzFNWm40YTQ3RDlrcWgwM2k0ZXlPbSs3NCt6ZXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgImNzcy1oYXMtcHNldWRvIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy1oYXMtcHNldWRvLy0vY3NzLWhhcy1wc2V1ZG8tMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZzZTB4cFIxSzlNTmxwMmo1dzFwZ1dJSnRtMWE4cVMwSndTOWdvRlljSW1qbEhFbXl3UDlWVUYwNWFHQlh6R3BESkY4NlFYazRMMHlwQm13UGhHQXJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC45IgotICAgICAgfQotICAgIH0sCi0gICAgImNzcy1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLWxvYWRlci8tL2Nzcy1sb2FkZXItNi44LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhEQVh0RVZHbEQwZ0owN2ljbHdXVmtMb1pPcEV2QVdhU3lmNlcxOFMycE9DLy9LOCtxVURJeDhJSVQzRCtIam5ta0pQUWVlc09QdjVhaVVhSnNDTTJnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaWNzcy11dGlscyI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcyI6ICJeOC40LjIxIiwKLSAgICAgICAgInBvc3Rjc3MtbW9kdWxlcy1leHRyYWN0LWltcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MtbW9kdWxlcy1sb2NhbC1ieS1kZWZhdWx0IjogIl40LjAuMyIsCi0gICAgICAgICJwb3N0Y3NzLW1vZHVsZXMtc2NvcGUiOiAiXjMuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MtbW9kdWxlcy12YWx1ZXMiOiAiXjQuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy44IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJscnUtY2FjaGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItU29mdHVUUk92L2NSakN6ZS9zY2pHeWlEdGNVeXh3MXJnWVFTWlk3WFRtdFI1aFgrZG03NmlEYlRIOFRrTFBIQ1FtbGJRVlNTYk5aQ1BNMmhiMGtublE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAieWFsbGlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImNzcy1taW5pbWl6ZXItd2VicGFjay1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLW1pbmltaXplci13ZWJwYWNrLXBsdWdpbi8tL2Nzcy1taW5pbWl6ZXItd2VicGFjay1wbHVnaW4tMy40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTF1NkQ3MXplSWZnbmdOMlhOUkplZmMvaFk3WWJzeGQ3NEptNHFuZ0lYeVVFazdmc3MzVlV6dUh4TEFxL1I4TkFiYTRRVTlPVVNhTVpsYnBSYzdiTTRRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY3NzbmFubyI6ICJeNS4wLjYiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI3LjAuMiIsCi0gICAgICAgICJwb3N0Y3NzIjogIl44LjMuNSIsCi0gICAgICAgICJzY2hlbWEtdXRpbHMiOiAiXjQuMC4wIiwKLSAgICAgICAgInNlcmlhbGl6ZS1qYXZhc2NyaXB0IjogIl42LjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMTIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zUnUxa3BjTzl5THRZeEJLdnFmVGVoOUt6WkV3TzNTVHlYMUhUKzRDYUR6QzZIcFRHWWhJaFBJemo5WHVLVTdLWUR3bmFlaDVoY093ankxUXVKekJQQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJyZXF1aXJlLWZyb20tc3RyaW5nIjogIl4yLjAuMiIsCi0gICAgICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhanYta2V5d29yZHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYta2V5d29yZHMvLS9hanYta2V5d29yZHMtNS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ1MvSk5GQVV5cjV2QXVoazFEV20xQ0J4UkhXOUxiSjJveldlZW1ySXFwYnNxS2pIVnhZUHlpNUdDMHJqWklUNUp4SjN2aXJWVFM4d2s0aS9aK2tydz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgICAgICB9LAotICAgICAgICAic2NoZW1hLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjkiLAotICAgICAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl41LjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJzb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiY3NzLXByZWZlcnMtY29sb3Itc2NoZW1lIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy1wcmVmZXJzLWNvbG9yLXNjaGVtZS8tL2Nzcy1wcmVmZXJzLWNvbG9yLXNjaGVtZS02LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEJxTWJaa3NSa0pReDJ6QWpyb2tpR01kMDdScU9hMkl4SXJyTjEwbHlCZTl4aG45REV2alVLNzlKNmprZWl2OUQ5aFFGWEtiNmcxandVNjJqemlKWkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgImNzcy1zZWxlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLXNlbGVjdC8tL2Nzcy1zZWxlY3QtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdQcE9ZdG5zVm9udHUybU9EaEExOUpycVd4TnNmZGF0UktkNjRrbXBSYlFnaDFLdEl0a281c1RuRXBQZHBTYUpzelRPaEVNbEYvUlB6MjhxajRIcWhRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYm9vbGJhc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImNzcy13aGF0IjogIl42LjAuMSIsCi0gICAgICAgICJkb21oYW5kbGVyIjogIl40LjMuMSIsCi0gICAgICAgICJkb211dGlscyI6ICJeMi44LjAiLAotICAgICAgICAibnRoLWNoZWNrIjogIl4yLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJjc3Mtc2VsZWN0LWJhc2UtYWRhcHRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3Mtc2VsZWN0LWJhc2UtYWRhcHRlci8tL2Nzcy1zZWxlY3QtYmFzZS1hZGFwdGVyLTAuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qUVZlZVJHNzBRSTA4dlNUd2Yxakh4cDc0Sm9ac3IyWFNnRVRhZTgveEM4b3ZTbkwyV0Y4N0dUTE84NlNid2R0MmxLNFVtZzRIbm53TU80WUYzQ2U3dz09IgotICAgIH0sCi0gICAgImNzcy10by1yZWFjdC1uYXRpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLXRvLXJlYWN0LW5hdGl2ZS8tL2Nzcy10by1yZWFjdC1uYXRpdmUtMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWU4UkthTFhNT0ZpaSswMm1PbHF3amJEMDBLU0VLcWJsbnBPOWUrKzFhWFMxZlBRT3BTMVlvcWRWSEJxUGpITm94ZUYybWltelZxYXdtMktDYkVkdEhRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FtZWxpemUiOiAiXjEuMC4wIiwKLSAgICAgICAgImNzcy1jb2xvci1rZXl3b3JkcyI6ICJeMS4wLjAiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgImNzcy10cmVlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAtYWxwaGEuMzciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy10cmVlLy0vY3NzLXRyZWUtMS4wLjAtYWxwaGEuMzcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURNeFdKZzBybno3VWd4S1QwUTFIVS9MOUJlSkkwTTZrc29yME9ncU9uRithUkNEV2cvTjI2NDFIbVZ5VTlLVkl1ME9WVldPYjJJcEM5QStCSlJuZWpnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibWRuLWRhdGEiOiAiMi4wLjQiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJjc3Mtd2hhdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3Mtd2hhdC8tL2Nzcy13aGF0LTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IVFVyZ1JKN3I0ZHNaS1U2R2ptcGZSSzFPNzZoOTdaOE1mUzFHMEZvelIrb0Yya0c2VmZlOEpFNnp3cmtieGlnemlQSGluQ0orZ0NQakE5RWFCRHRSdz09IgotICAgIH0sCi0gICAgImNzcy5lc2NhcGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLmVzY2FwZS8tL2Nzcy5lc2NhcGUtMS41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlVaWZzWFh1a25IbFVzbWxneVkwUEt6Z1BPcjcvRmpDZVBmSE50MGp4bTgzd0haaTQ0VkRNUTcvZkdOa2pZMy9qVjFNQysxQ21aYmFIenVneWVSdHBnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjc3NkYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NkYi8tL2Nzc2RiLTcuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ObmE3cnBoOFYwakM2K0pCWTRWazRuZEVyVW1mSmZWNk5KQ2FaZHVyTDBvbWdnYWJpeStRQjJIQ1F0dTVjL0FDTFowSTdSRXY3QTRReVBJb1l6Wngwdz09IgotICAgIH0sCi0gICAgImNzc2VzYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3Nlc2MvLS9jc3Nlc2MtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9UYi9KY2pLMTExbk5TY0dvYjVNTnRzbnROTTFhQ05VRGlwQi9Ua3daRmh5RHJyRTQ3U094LzE4d0YyYmJqZ2MzWnpDU0tXMVQ1bnQ1RWJGb0F6L1ZnPT0iCi0gICAgfSwKLSAgICAiY3NzbmFubyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzbmFuby8tL2Nzc25hbm8tNS4xLjE1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qK0JLZ0RjTERRQStlRGlmTHgwRU80WFNBNTZiN3V1dDNCUUZIK3diU2FTVHVHTHVpeVRhL3diUll0aFVYWDhMQzltTGcrV1dLZThoK3FKdXdUQWJIdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNzc25hbm8tcHJlc2V0LWRlZmF1bHQiOiAiXjUuMi4xNCIsCi0gICAgICAgICJsaWxjb25maWciOiAiXjIuMC4zIiwKLSAgICAgICAgInlhbWwiOiAiXjEuMTAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJjc3NuYW5vLXByZXNldC1kZWZhdWx0IjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjE0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NuYW5vLXByZXNldC1kZWZhdWx0Ly0vY3NzbmFuby1wcmVzZXQtZGVmYXVsdC01LjIuMTQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQwU0Zlc2ovWlYyT1R5bHFRVk9yRmdFaDV1YW54Yk82WkFkZUNyTnNVUTZmVnVYd1lUeEpQTkFHdkdUeEhiRDY4bGRJSk5lYzdQeVlaREJyZkRRKzZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY3NzLWRlY2xhcmF0aW9uLXNvcnRlciI6ICJeNi4zLjEiLAotICAgICAgICAiY3NzbmFuby11dGlscyI6ICJeMy4xLjAiLAotICAgICAgICAicG9zdGNzcy1jYWxjIjogIl44LjIuMyIsCi0gICAgICAgICJwb3N0Y3NzLWNvbG9ybWluIjogIl41LjMuMSIsCi0gICAgICAgICJwb3N0Y3NzLWNvbnZlcnQtdmFsdWVzIjogIl41LjEuMyIsCi0gICAgICAgICJwb3N0Y3NzLWRpc2NhcmQtY29tbWVudHMiOiAiXjUuMS4yIiwKLSAgICAgICAgInBvc3Rjc3MtZGlzY2FyZC1kdXBsaWNhdGVzIjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLWRpc2NhcmQtZW1wdHkiOiAiXjUuMS4xIiwKLSAgICAgICAgInBvc3Rjc3MtZGlzY2FyZC1vdmVycmlkZGVuIjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLW1lcmdlLWxvbmdoYW5kIjogIl41LjEuNyIsCi0gICAgICAgICJwb3N0Y3NzLW1lcmdlLXJ1bGVzIjogIl41LjEuNCIsCi0gICAgICAgICJwb3N0Y3NzLW1pbmlmeS1mb250LXZhbHVlcyI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1taW5pZnktZ3JhZGllbnRzIjogIl41LjEuMSIsCi0gICAgICAgICJwb3N0Y3NzLW1pbmlmeS1wYXJhbXMiOiAiXjUuMS40IiwKLSAgICAgICAgInBvc3Rjc3MtbWluaWZ5LXNlbGVjdG9ycyI6ICJeNS4yLjEiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtY2hhcnNldCI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtZGlzcGxheS12YWx1ZXMiOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3Mtbm9ybWFsaXplLXBvc2l0aW9ucyI6ICJeNS4xLjEiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtcmVwZWF0LXN0eWxlIjogIl41LjEuMSIsCi0gICAgICAgICJwb3N0Y3NzLW5vcm1hbGl6ZS1zdHJpbmciOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3Mtbm9ybWFsaXplLXRpbWluZy1mdW5jdGlvbnMiOiAiXjUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3Mtbm9ybWFsaXplLXVuaWNvZGUiOiAiXjUuMS4xIiwKLSAgICAgICAgInBvc3Rjc3Mtbm9ybWFsaXplLXVybCI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUtd2hpdGVzcGFjZSI6ICJeNS4xLjEiLAotICAgICAgICAicG9zdGNzcy1vcmRlcmVkLXZhbHVlcyI6ICJeNS4xLjMiLAotICAgICAgICAicG9zdGNzcy1yZWR1Y2UtaW5pdGlhbCI6ICJeNS4xLjIiLAotICAgICAgICAicG9zdGNzcy1yZWR1Y2UtdHJhbnNmb3JtcyI6ICJeNS4xLjAiLAotICAgICAgICAicG9zdGNzcy1zdmdvIjogIl41LjEuMCIsCi0gICAgICAgICJwb3N0Y3NzLXVuaXF1ZS1zZWxlY3RvcnMiOiAiXjUuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImNzc25hbm8tdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzbmFuby11dGlscy8tL2Nzc25hbm8tdXRpbHMtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpRTlIxOS9ZWmh6NHBzTFgvclE5TTgzZTN6MldmL0hkSmJyeXp0ZTRhM05TdWFmeXA5dy9JNFUraHg1QzJTOWc0MXFsc3RIN0RFV25aYWFqODNPdUVBPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJjc3NvIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc28vLS9jc3NvLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13dmxjZEliZjZwd0tFazd2SGo4L0JrYzBCNHlsWFpydUx2T2dzOWRvUzVlT3NPcHVvZE9WMnpKQ2hTcGtwK3BScFlRTFFNZUYwNG5yM1o2OFN0YTlqQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNzcy10cmVlIjogIl4xLjEuMiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3NzLXRyZWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3MtdHJlZS8tL2Nzcy10cmVlLTEuMS4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFJwZHBwRjdUUmF6WnJqSjZ2M3N0enY5M3F4UmNTc0ZtVzZjWDBabTJOVktweEUxV1YxSGJsbmdoVnY5VHJlaXJlSGtxSS9WREVzZm9sUkYxcDZ5N1E9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1kbi1kYXRhIjogIjIuMC4xNCIsCi0gICAgICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibWRuLWRhdGEiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjE0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWRuLWRhdGEvLS9tZG4tZGF0YS0yLjAuMTQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kbjZ3ZDB1dzVHc2Rzd1BGZnNnTXA1TlNCMC9hRGU2Zks5NFlKVi9BSkRZWEw2SFZMV0JzeGVxN2pzN0FkK21VMks5TEFsd3BrNmtOMkQ1bXdDUFZvdz09IgotICAgICAgICB9LAotICAgICAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImNzc29tIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc29tLy0vY3Nzb20tMC40LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXAzcHZVN3IxTXl5cWJUaytXYk5KSWdKakcyVm1USWFCMTBySTkzTHpWUHJtREpLa3pLWU10eHh5QXZRWFIvTlM2b3R1enZlSTcrN0JCcTNTakJTMm13PT0iCi0gICAgfSwKLSAgICAiY3Nzc3R5bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Nzc3R5bGUvLS9jc3NzdHlsZS0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVpMNjdhYmtVekl1dmNIcWs3YzA5Y2V6cEdOY3hVeFU0SW9pLzA1eEhrNERRZVRrV21HWWZ0SUU2Y3RVNkFFdCtHbjRuMWxEU3RPdGo3Rkt5Y1A3MUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjc3NvbSI6ICJ+MC4zLjYiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNzc29tIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMy44IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Nzb20vLS9jc3NvbS0wLjMuOC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIwdEdIYmZlZ2JoUEpweHBpQlBVMnNDa2lnQXF0TTlPMTIxbGU2YmJPbGd5VitOeUd5Q21WZko2UVc5ZVJqejhDcE5mV0VPWUJJTUlHUllrTHdzSVlnPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJjc3N0eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzc3R5cGUvLS9jc3N0eXBlLTMuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JN0sxVXUwTUJQemFGS2c0bkk1UTdWczJ0KzNnV1dXNjQ4c3BhRitSZzdwSTlkczE4VWduK2x2ZzRTSGN6VWRLbEhJNUxXQlh5cWZTOCtEdWZ5QnNnUT09IgotICAgIH0sCi0gICAgImN1c3RvbWl6ZS1jcmEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3VzdG9taXplLWNyYS8tL2N1c3RvbWl6ZS1jcmEtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURidGFMdXk1OTIyNFUreENpdWtreFNxOGNscSsrTU90SjFFdDdMRUQxZkxzeldlODhFb2JsRVlGQko4OTVzQjFtQzZCNHV1M3hQVC9JakNsRUxoTWJBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibG9kYXNoLmZsb3ciOiAiXjMuNS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRhbWVyYXUtbGV2ZW5zaHRlaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGFtZXJhdS1sZXZlbnNodGVpbi8tL2RhbWVyYXUtbGV2ZW5zaHRlaW4tMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNkUVNGQjcrbGxmVWNRSFVRTzMrQjhFUlJqME9hNHc5UE9XTUkvcHVHdHVmN2dGeXdHbWthTENFbG51ZGZUaUtaVitOdkhxTDBpZnpkckk4Um83RVNBPT0iCi0gICAgfSwKLSAgICAiZGF0YS11cmxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RhdGEtdXJscy8tL2RhdGEtdXJscy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDVlV1RTWE8vQkptcGRJS0NSdUtVZ1NDZ0FOME93bGlWSzN5UEtid0lXVTFUZHc1QlJhanhsek1pZHZoK2d3a285QWZROXpJajUycHpGOTFRM1lBdlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhYmFiIjogIl4yLjAuMyIsCi0gICAgICAgICJ3aGF0d2ctbWltZXR5cGUiOiAiXjIuMy4wIiwKLSAgICAgICAgIndoYXR3Zy11cmwiOiAiXjguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctNC4zLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBSV0ZIdVNVM2VEdFFKUHZuTlk3SmNrZXQxajB0NU91T3NGelBQenNla0Q1MlpsOHFVZkZJUEVpc3dYcUl2SFdHVkhPZ1grN0cvdkNOTmhlaHd4ZmtRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibXMiOiAiMi4xLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZGVjaW1hbC5qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVjaW1hbC5qcy8tL2RlY2ltYWwuanMtMTAuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WQkJhTGMxTWdMNVhwemdJUDdueTVaNk54M1VyUmtJVmlVa1BVZHRsOWF5YTVhbXkzRGUxZ3NVVVNCMWczKzNzRXhZTmpDQXNBem5tdWt5eENiMUdSQT09IgotICAgIH0sCi0gICAgImRlZGVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWRlbnQvLS9kZWRlbnQtMS41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStMeFcrS0xXeHUzSFczTTJ3MnltcHd0cVBycVlSelU4ZnFpNkZoZDE4ZkJBTGUxNWJsSlBJL0k0K1VIdmVNVkc2bEpxQjRKTmQ0VUcwUzVjblZId0lnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJkZWVwLWVxdWFsIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZXAtZXF1YWwvLS9kZWVwLWVxdWFsLTIuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sS2RrZFY2RU9Hb1ZuNjVYYU9zUGRINHJNeFRaT25tRnl1SWtNak0xaTVISENiZmpDOTdkYXdnVEF5MGRlWU5mdXFVcVcrUTVWclZhUVl0VXBTZDZ5UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFycmF5LWJ1ZmZlci1ieXRlLWxlbmd0aCI6ICJeMS4wLjAiLAotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJlcy1nZXQtaXRlcmF0b3IiOiAiXjEuMS4zIiwKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMi4wIiwKLSAgICAgICAgImlzLWFyZ3VtZW50cyI6ICJeMS4xLjEiLAotICAgICAgICAiaXMtYXJyYXktYnVmZmVyIjogIl4zLjAuMiIsCi0gICAgICAgICJpcy1kYXRlLW9iamVjdCI6ICJeMS4wLjUiLAotICAgICAgICAiaXMtcmVnZXgiOiAiXjEuMS40IiwKLSAgICAgICAgImlzLXNoYXJlZC1hcnJheS1idWZmZXIiOiAiXjEuMC4yIiwKLSAgICAgICAgImlzYXJyYXkiOiAiXjIuMC41IiwKLSAgICAgICAgIm9iamVjdC1pcyI6ICJeMS4xLjUiLAotICAgICAgICAib2JqZWN0LWtleXMiOiAiXjEuMS4xIiwKLSAgICAgICAgIm9iamVjdC5hc3NpZ24iOiAiXjQuMS40IiwKLSAgICAgICAgInJlZ2V4cC5wcm90b3R5cGUuZmxhZ3MiOiAiXjEuNS4wIiwKLSAgICAgICAgInNpZGUtY2hhbm5lbCI6ICJeMS4wLjQiLAotICAgICAgICAid2hpY2gtYm94ZWQtcHJpbWl0aXZlIjogIl4xLjAuMiIsCi0gICAgICAgICJ3aGljaC1jb2xsZWN0aW9uIjogIl4xLjAuMSIsCi0gICAgICAgICJ3aGljaC10eXBlZC1hcnJheSI6ICJeMS4xLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZGVlcC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwLWlzLy0vZGVlcC1pcy0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0lQemtzbVRnNC9NcmlpYVlHTytva1hEVDd6dG4vdzNFcHR2LytnU0lkTWRLc0pvMHU0Q2ZZTkZKUHkrNFNLTXVDcUd3Mnd4bkErVVJNZzN0OGEvYlE9PSIKLSAgICB9LAotICAgICJkZWVwbWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVlcG1lcmdlLy0vZGVlcG1lcmdlLTQuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zc1VxYk1FYzc3WHFwZE5PN0ZSeVJvZytlVzNwaCtHWUNiaitySyt1WXlSTXV3c1Z5MHJNaVZ0UG4rUUpsS0Z2V1AvMVBZcGFwcVluME1lMmtuRm4rQT09IgotICAgIH0sCi0gICAgImRlZmF1bHQtZ2F0ZXdheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZhdWx0LWdhdGV3YXkvLS9kZWZhdWx0LWdhdGV3YXktNi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZ3U09Kc2JiTnpaL0NVRnBxRkJxWWZZTkxqMU5iTVBtOE1NQ0l6SGpDODNpU0pSQkVHbURVeFUrV1A2NjFCYUJRSW1lQzJ5SHdYdHorUC9POW8rWEVnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXhlY2EiOiAiXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRlZmluZS1sYXp5LXByb3AiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLWxhenktcHJvcC8tL2RlZmluZS1sYXp5LXByb3AtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURzMDlxTmg4eXcza2hTamlKamlVSW5hR1g5eGxxWkRZN0pWcnlHeGR4VjdOUGV1cVFmcGxPcFE2NnlKRlp1dDNqTGE1ek93a1h3MWc5RUkydUtoNE9nPT0iCi0gICAgfSwKLSAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnRpZXMvLS9kZWZpbmUtcHJvcGVydGllcy0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHZxQVZLR2ZUMStVQXZQd0tUVncvbmpoZFE4WmhYSzRsSTBiQ0l1Q01ycDJ1cDluUG5hRGZ0ckx0bXBUYXpxZDFvK1VZNHpnelUrYXZ0TWJEUCtsZEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoYXMtcHJvcGVydHktZGVzY3JpcHRvcnMiOiAiXjEuMC4wIiwKLSAgICAgICAgIm9iamVjdC1rZXlzIjogIl4xLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJkZWxheWVkLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWxheWVkLXN0cmVhbS8tL2RlbGF5ZWQtc3RyZWFtLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aeVNEN05mOTFhTEIwUnhMNEtHcktIQlhsN0VkczFEQW1FZGNvVmF3WG5MRDdTRGhwTmd0dUlJMmFBa2c3YTdRUzQxanhQU1oxN3A0VmRHbk1IazNNUT09IgotICAgIH0sCi0gICAgImRlcGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwZC8tL2RlcGQtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc3bkg2UDZkeURpb0pvZ0FBR3ByR3BDdFZJbUpocFBrL3JvQ3pkYjNmSWg2MS9zL25Qc2ZSNm9ueU13a0NBUi9PbEMzeUJDMGxFU3ZVb1FFQXNzSXJ3PT0iCi0gICAgfSwKLSAgICAiZGVxdWFsIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlcXVhbC8tL2RlcXVhbC0yLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGplK3FQS0hFTW9odmZSVENFbzNDclBHNmNBekFZZ216S3l4UmlZU1NEa1M2ZUdKZHlWSm03V2FZQTVFQ2FBRDl3TEIyVDRFRWV5bUE1YUZWY1lYQ0E9PSIKLSAgICB9LAotICAgICJkZXN0cm95IjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Rlc3Ryb3kvLS9kZXN0cm95LTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yc0pHSlRhWElJYVIxdzRpSlNOb04waG5NWTdHcGMvbjhENHFTQ0p3OFFxRldYZjdjdUFnbkVIeEJwd2VhVmNQZXZDMmwzS3BqWUN4M055cFFRZ2FKZz09IgotICAgIH0sCi0gICAgImRldGVjdC1uZXdsaW5lIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1uZXdsaW5lLy0vZGV0ZWN0LW5ld2xpbmUtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRMeit4L3ZFWG0vWTdQN3duMUVKRk5MeFlwVUQ0VGdNb3N4WTZmQVZKVW5KTWJ1cEhCT25jeHlXVUc5T3BUYUg5RUJEN3VGSTVMZkVnbU1PYzU0RHNBPT0iCi0gICAgfSwKLSAgICAiZGV0ZWN0LW5vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGV0ZWN0LW5vZGUvLS9kZXRlY3Qtbm9kZS0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVDBOSXVRcG5UdkZEQVROdUhONXJvUHdTQkc4M3JGc3VPK01YWEg5LzNOMWVGYm40d2NQanR0dmpNTEVQV0owUkdVWWdRRTdjR2dTM3ROeGJxQ0dNN2c9PSIKLSAgICB9LAotICAgICJkZXRlY3QtcG9ydC1hbHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGV0ZWN0LXBvcnQtYWx0Ly0vZGV0ZWN0LXBvcnQtYWx0LTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01dFF5a3QrTHFmSkZCRVlhRElUeDdTN2NSN21KL3pRbUxYWjJxdDV3MDRhaW5ZWnc2dEJmOWRCdW5NalZlVk9kWVZSVXpVT0U0SGtZNUo3K3V0dGI1UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFkZHJlc3MiOiAiXjEuMC4xIiwKLSAgICAgICAgImRlYnVnIjogIl4yLjYuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm1zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwcDYwUDZJVUpEVHVPcS81WjhjZHNrekp1amZ3cWZPVGtyd0l3ajdJUklTcG5rSm5UNlN5SjRQQ1BuR01vRmpDOWRkaGFsNUtWSVl0QXQ5N2l4MDVBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJkaWR5b3VtZWFuIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZHlvdW1lYW4vLS9kaWR5b3VtZWFuLTEuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1neHR5ZnFNZzdHS3loUW1iMDU2SzdNM3hzenkvbXlIOHcrQjRSVCtRWEJRc3ZBT2RjM1h5bXFERFBIeDFCZ1Bnc2RBQTVTSWlmb25hODlZdFJBVER6dz09IgotICAgIH0sCi0gICAgImRpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi8tL2RpZmYtNC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTU4bG14S1NBNEJOeUx6K0hITVV6bE9FcGcwOUZWK2V2NlpNZTN2SmloZ2R4emdjd1o4Vm9FRVBtQUxDWkc5TG1xZlZvTk1NS3B0dElZVFZHNnVEWTdBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJkaWZmLXNlcXVlbmNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi1zZXF1ZW5jZXMvLS9kaWZmLXNlcXVlbmNlcy0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9mckJnd3BQaENEODVrTUt0RTlSWUZGcTZPQzFBODlvVzJ2dmdXWk5Dd3hyVXBSVUlMb3BZN2xzWXlNRFNqYzhnNlU2YWlPMFF1Ymc2cjRXZ3Q1Wm5BPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJkaXItZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kaXItZ2xvYi8tL2Rpci1nbG9iLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Xa3JXcDlHUjRLWGZLR1l6T0xtVHVHVmkxVVdGZndzMzc3bjljYzU1L3RiNkR1cXlGNnBjUTVBYmlIRXNoYURwWTl2Nm9hU3IyWENEaWRHbU13ZHpJQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBhdGgtdHlwZSI6ICJeNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZGx2IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Rsdi8tL2Rsdi0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK0hseXR5amxQS25JRzhYdVJHOFd2bUJQOHhzOFA3MXkrU0tLUzZaWFdvRWdMdWVQeHREb1VFaUg3V2tkZVBXclE1SkJwRTZhb1ZxZlpmSlVRa2pYd0E9PSIKLSAgICB9LAotICAgICJkbnMtZXF1YWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG5zLWVxdWFsLy0vZG5zLWVxdWFsLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16K3BhRDZZVVFzaytBYkdDRU00UHJPWFNzczVnZDY2UWZjVkJGVEtSL0hwRkw5akNxaWtTOTRIWXdLd3c2ZlF5TzdJeHJJSXlVdStnMEthOXRVUzJDZz09IgotICAgIH0sCi0gICAgImRucy1wYWNrZXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG5zLXBhY2tldC8tL2Rucy1wYWNrZXQtNS42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJ6YTNVSDFMd2RIaDlxeVBYcDhsa3dwalNOay9BTUQzZFB5dFVvUm9xbnlwRFVoWTB4dmJkbVZoV09meE82OGZyRWZWOUJVOFYxMkV6N1pzSEdacENRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGxlaWNodGdld2ljaHQvaXAtY29kZWMiOiAiXjIuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImRvY3RyaW5lIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvY3RyaW5lLy0vZG9jdHJpbmUtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlTK1E1aTNoQmY3R0JrZDRLRzhhN2VCTk5XTkdMVGFFd3dZV1VpaklZTTd6cmxZRE0wQkZYSGpqUFdsV1oxUmc3VWFkZFplSURtaTlqRjNIbXFpUTJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXN1dGlscyI6ICJeMi4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZG9tLWFjY2Vzc2liaWxpdHktYXBpIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjE2IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tYWNjZXNzaWJpbGl0eS1hcGkvLS9kb20tYWNjZXNzaWJpbGl0eS1hcGktMC41LjE2LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YN0JKMnlFbHNuT0ozMHBaRjR1SUlEZkJFVmdGNFhFQnhMOUJ4aHk2ZG5ybTVoa3pxbXNXSEdUaUhxUmlJVE5oTXlGTHlBaVduZElKUDdaMU5UdGVEZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZG9tLWNvbnZlcnRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tY29udmVydGVyLy0vZG9tLWNvbnZlcnRlci0wLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ2QzeXBJUGZPTXI5aDVqSUtxOEUzc0hPVENqZWlybmwwV0s1WmRTMUFXME9kdDBiMVBhV2FIZEo0UWs0a2x2K1lCOWFKQlM3bUVTWGpGb0RRUHU2REE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ1dGlsYSI6ICJ+MC40IgotICAgICAgfQotICAgIH0sCi0gICAgImRvbS1zZXJpYWxpemVyIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvbS1zZXJpYWxpemVyLy0vZG9tLXNlcmlhbGl6ZXItMS40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZId0IzS2ZyY09Pa2VsRUcyWk9meHFMWmRma2lsOFB0Smk0UDhOMk1NWHVjWnEyeUxwNzVDbFZpVWxPVnd5b0hFRGpZVTQzM0FxKzV6V1A2MStSR2FnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZG9tZWxlbWVudHR5cGUiOiAiXjIuMC4xIiwKLSAgICAgICAgImRvbWhhbmRsZXIiOiAiXjQuMi4wIiwKLSAgICAgICAgImVudGl0aWVzIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJkb21lbGVtZW50dHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb21lbGVtZW50dHlwZS8tL2RvbWVsZW1lbnR0eXBlLTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PTEVUQmo2dzBPc2FnQndkWG5QZE4wY25NZkY5b3BONjljbys3WnJiZlBHcmRwUFZOQlVqMDJzcGk2QjFON3dDaExRaVBuNENTSC96SnZYdzU2Z21Idz09IgotICAgIH0sCi0gICAgImRvbWV4Y2VwdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb21leGNlcHRpb24vLS9kb21leGNlcHRpb24tMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXl4SjJtRnkvc2liVlFsdTVxSGpPa2Y5SjNLNnpnbUN4Z0o5NHUyRWR2RE9WMDlIKzMyTHRSc3dFY1VzbVVXTjcycFZMT0VuVFNSYUlWVnpWUWdTMGRnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViaWRsLWNvbnZlcnNpb25zLy0vd2ViaWRsLWNvbnZlcnNpb25zLTUuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmxad0tQQ2tZS3hRZ2VTYkg1RXluZ09tUnA3V3c3STlyUUxFUkVUdGY1b2ZkOXBHZXN3V2lPdG9ncEVPODUwanppUFJhcnJlR3huNVFJaVRxcGIyd0E9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImRvbWhhbmRsZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9taGFuZGxlci8tL2RvbWhhbmRsZXItNC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdyd294WU4rdVdsek84dWhVWFJsMFAra0hFNEd0VlBmWXpWTGNVeFBMN0tOZEhLajY2dnZsaGl3ZUlIcVlZWFdsdytUOGlMTXA0MkxtNjdnaHc0V01RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZG9tZWxlbWVudHR5cGUiOiAiXjIuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRvbXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi44LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvbXV0aWxzLy0vZG9tdXRpbHMtMi44LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXc5NkNqb2ZwNzJNNUlJaHBqZ29iQmltWUVmb1BqeDFWeDBCU1g5UDMwV0JkWlcyV0lLVTBUMUJkMGt6MmVOWjlpa2pLZ0hiRXlLeDhCQjZIMUwzaDNBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZG9tLXNlcmlhbGl6ZXIiOiAiXjEuMC4xIiwKLSAgICAgICAgImRvbWVsZW1lbnR0eXBlIjogIl4yLjIuMCIsCi0gICAgICAgICJkb21oYW5kbGVyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJkb3QtY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb3QtY2FzZS8tL2RvdC1jYXNlLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdjVuS2xoNnlScmRyR3Z4ZUoyZTV5MmVSVXBrVW9zSVc0QTJBUzM4endTejI3enU3dWZEd1FQaTVKaHMzWEFsR05ldGwzYm1uR2hRc010a0tKbmozdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm5vLWNhc2UiOiAiXjMuMC40IiwKLSAgICAgICAgInRzbGliIjogIl4yLjAuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJkb3RlbnYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvdGVudi8tL2RvdGVudi0xMC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJsQmk5ZDhqcHY5U2Yxa2xQak5mRkF1V0RqS0x3VElKSi9WeHRvVHdJUjZoblp4Y0VPUUNaZzJvSUwzTVdCWXc1R3BVREtPRW5ORDdMWFRiSXBRMDNRPT0iCi0gICAgfSwKLSAgICAiZG90ZW52LWV4cGFuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb3RlbnYtZXhwYW5kLy0vZG90ZW52LWV4cGFuZC01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVhRbDFEU2E0L1BReVJmZ3J2NmFvTmpoYXNwL3A0cXM5RmpKNHE0Y1FrKzhtNHI2azRaU2lFeXl0S0c4ZjhXOWdpOFdzUXRJT2JObUtkK3RNek5UbUE9PSIKLSAgICB9LAotICAgICJkdXBsZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kdXBsZXhlci8tL2R1cGxleGVyLTAuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qdEQ2WUczNzBaQ0lpLzlHVGFKS1F4V1RaRDA0NSs0UjRoVGsveDFVeW9xYWR5Sjl4OUNnU2kxUmxWRFFGOFUyc3hMTFNuRmtDYU1paHFsakhJV2dNZz09IgotICAgIH0sCi0gICAgImVlLWZpcnN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VlLWZpcnN0Ly0vZWUtZmlyc3QtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdNd205TGhSVW8rV1VhUk4rdlJ1RVRxRzg5SWdacGhWU05rZEZnZWI2c1MvRTRPckRJTjd0NDhDQWV3U0hYYzZDOGxlZkQ4S0tmcjV2WTYxYnJRbG93PT0iCi0gICAgfSwKLSAgICAiZWpzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vqcy8tL2Vqcy0zLjEuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItckMrUVZOTUpXditNdFBna3QweSswclZFSWRidHhWQURBcFc5SlhyVVZsekhldGdjeWN6UC9FN0RKbVdKNGZKQ1pGMmNQY0JrMGxhV085WkhNRzNEbVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJqYWtlIjogIl4xMC44LjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZWxlY3Ryb24tdG8tY2hyb21pdW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuNDMzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGVjdHJvbi10by1jaHJvbWl1bS8tL2VsZWN0cm9uLXRvLWNocm9taXVtLTEuNC40MzMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1HTzFrMHcxUmdyZmRiTFZ3bVhjRGhISHV4Q24ycVJnUjdkWXNKdldGS0R0dHZZUHg2Rk56Q0dHMGMvZkJCdnpLMkxEaDNVVjdUdDlhd25IbnZBQVVRPT0iCi0gICAgfSwKLSAgICAiZW1haWwtYWRkcmVzc2VzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtYWlsLWFkZHJlc3Nlcy8tL2VtYWlsLWFkZHJlc3Nlcy01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNE9JUFlsQTZKWHF0Vm44enBIcEdpSTd2RTZFUU9BZzE2YUduRE1JQWxaVmlubm9aODIwOHRXMWhBYmpXeWRnTi80UExUVDlxK08xSzZBSC92QUxKR3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImVtaXR0ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWl0dGVyeS8tL2VtaXR0ZXJ5LTAuMTMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGVXd2F3azZyNXlSOWpGZ25ES1l0NHNMUzBMbUhKSmkzWk9uYjUvSmRiWXdqM25XK0Z4UW5ISWpoQkt6OFlMQzdvUk5QVk05TlE0N0kzQ1Z4MzRlcVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUKLSAgICB9LAotICAgICJlbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTkuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MMThEYUpzWFNVazIrNDJwdjhtTHM1akpUMmhxRmtGRTRqMjF3T21nYlVxc1oyaEw3Mk5zVVU3ODVnOVJYZ28zczBaTmdWbDQyVGlIcDNadE92L1Z5Zz09IgotICAgIH0sCi0gICAgImVtb2ppcy1saXN0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vtb2ppcy1saXN0Ly0vZW1vamlzLWxpc3QtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9reU0xOEVmaW53WFpibm85RnlVR2VGaDg3S0M4SFJRQlFHaWxkSFpiRXVSeVdGT212MVUxMG85QkJwOFhWWkRWTk51UUt5SUdJdTVaWUFBWEowVjJRPT0iCi0gICAgfSwKLSAgICAiZW5jb2RldXJsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFBKWHE4SnFGYVZZbTJDV21Qdm5QMkl5bzRaU003L1FLY1NtdU1MRE9iZnBINWZpN1JVR21kL3JURGYrcnV0L3NhaURpUUVlVlROZ0FtSkVkQU94MHc9PSIKLSAgICB9LAotICAgICJlbmhhbmNlZC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiNS4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmhhbmNlZC1yZXNvbHZlLy0vZW5oYW5jZWQtcmVzb2x2ZS01LjE1LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxYWVQ0MktKN2xwSUtFQ3IybUFYSWFNbGRjTkNoLzdFMEtCS091NEtTZmtIbVArbVptU3MrOFY1Z0JBcWlzV0J5ME9PNFc1T3l5czBHTzFZOEt0ZEtnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgInRhcGFibGUiOiAiXjIuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgImVudGl0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VudGl0aWVzLy0vZW50aXRpZXMtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXA5MmlmNU56NjE5STB3K2FrSnJMWkgwTVgwUGI1RFgzOVhPd1FUdFhTZFFRT2FZSDAzUzF1SVFwNG1oT1p0QVhyeHE0VmlPNjdZVGlMQm8yNjM4bzlBPT0iCi0gICAgfSwKLSAgICAiZXJyb3ItZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXJyb3ItZXgvLS9lcnJvci1leC0xLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2RGSE5tcWVGU0V0MlpCc0NyaW9yS25uM1oycGorZmQ5a21JNlFvV3c0Ly9ETCtpY0VCZmMwVTdxSkNpc3FyVHNLVGp3NGZORnkycFc5T3FTdEQ4NGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1hcnJheWlzaCI6ICJeMC4yLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXJyb3Itc3RhY2stcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vycm9yLXN0YWNrLXBhcnNlci8tL2Vycm9yLXN0YWNrLXBhcnNlci0yLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2s1VjZ3VmF6UGhxNU1ocE8rQVV4Sm41eDdYU1hHbDFSOTNWbjdpK3pTMTVLRFZ4UWlqZWpOQ3J6ODM0MC8yYmdMQmpSOUd0RUc4WlZLT05EamNxR1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzdGFja2ZyYW1lIjogIl4xLjMuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlcy1hYnN0cmFjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtYWJzdHJhY3QvLS9lcy1hYnN0cmFjdC0xLjIxLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXkvQjVQT00yaUJuSXhDaWVybkgxRzdyQzlxUW9NNzdsTElNUUx1b2IwemhwOEM1NlBvODErMk5qMFdGS25kMHBOUmVEVG5rWXJ5Yyt6aE96cEVJUk9nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXJyYXktYnVmZmVyLWJ5dGUtbGVuZ3RoIjogIl4xLjAuMCIsCi0gICAgICAgICJhdmFpbGFibGUtdHlwZWQtYXJyYXlzIjogIl4xLjAuNSIsCi0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImVzLXNldC10b3N0cmluZ3RhZyI6ICJeMi4wLjEiLAotICAgICAgICAiZXMtdG8tcHJpbWl0aXZlIjogIl4xLjIuMSIsCi0gICAgICAgICJmdW5jdGlvbi5wcm90b3R5cGUubmFtZSI6ICJeMS4xLjUiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4yLjAiLAotICAgICAgICAiZ2V0LXN5bWJvbC1kZXNjcmlwdGlvbiI6ICJeMS4wLjAiLAotICAgICAgICAiZ2xvYmFsdGhpcyI6ICJeMS4wLjMiLAotICAgICAgICAiZ29wZCI6ICJeMS4wLjEiLAotICAgICAgICAiaGFzIjogIl4xLjAuMyIsCi0gICAgICAgICJoYXMtcHJvcGVydHktZGVzY3JpcHRvcnMiOiAiXjEuMC4wIiwKLSAgICAgICAgImhhcy1wcm90byI6ICJeMS4wLjEiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIiwKLSAgICAgICAgImludGVybmFsLXNsb3QiOiAiXjEuMC41IiwKLSAgICAgICAgImlzLWFycmF5LWJ1ZmZlciI6ICJeMy4wLjIiLAotICAgICAgICAiaXMtY2FsbGFibGUiOiAiXjEuMi43IiwKLSAgICAgICAgImlzLW5lZ2F0aXZlLXplcm8iOiAiXjIuMC4yIiwKLSAgICAgICAgImlzLXJlZ2V4IjogIl4xLjEuNCIsCi0gICAgICAgICJpcy1zaGFyZWQtYXJyYXktYnVmZmVyIjogIl4xLjAuMiIsCi0gICAgICAgICJpcy1zdHJpbmciOiAiXjEuMC43IiwKLSAgICAgICAgImlzLXR5cGVkLWFycmF5IjogIl4xLjEuMTAiLAotICAgICAgICAiaXMtd2Vha3JlZiI6ICJeMS4wLjIiLAotICAgICAgICAib2JqZWN0LWluc3BlY3QiOiAiXjEuMTIuMyIsCi0gICAgICAgICJvYmplY3Qta2V5cyI6ICJeMS4xLjEiLAotICAgICAgICAib2JqZWN0LmFzc2lnbiI6ICJeNC4xLjQiLAotICAgICAgICAicmVnZXhwLnByb3RvdHlwZS5mbGFncyI6ICJeMS40LjMiLAotICAgICAgICAic2FmZS1yZWdleC10ZXN0IjogIl4xLjAuMCIsCi0gICAgICAgICJzdHJpbmcucHJvdG90eXBlLnRyaW0iOiAiXjEuMi43IiwKLSAgICAgICAgInN0cmluZy5wcm90b3R5cGUudHJpbWVuZCI6ICJeMS4wLjYiLAotICAgICAgICAic3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnQiOiAiXjEuMC42IiwKLSAgICAgICAgInR5cGVkLWFycmF5LWxlbmd0aCI6ICJeMS4wLjQiLAotICAgICAgICAidW5ib3gtcHJpbWl0aXZlIjogIl4xLjAuMiIsCi0gICAgICAgICJ3aGljaC10eXBlZC1hcnJheSI6ICJeMS4xLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXMtYXJyYXktbWV0aG9kLWJveGVzLXByb3Blcmx5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLWFycmF5LW1ldGhvZC1ib3hlcy1wcm9wZXJseS8tL2VzLWFycmF5LW1ldGhvZC1ib3hlcy1wcm9wZXJseS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd2Q2SlhVbXlIbXQ4VDVhMnhyZVV3S2NHUHE2ZjFmK1d3SUpraWpVcWlHY0p6MXFxblpnUDZYSUsrUXlJV1U1bFQ3aW1lTnhVbGw0OGJ6aUcrVFNZY0E9PSIKLSAgICB9LAotICAgICJlcy1nZXQtaXRlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZ2V0LWl0ZXJhdG9yLy0vZXMtZ2V0LWl0ZXJhdG9yLTEuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zUFptcUhCZTZKSWlUZk41cTJwRWkvL1R3eG1BRkh3ai9YRXVZalR1c2U3OGk4S3hhcU1UVHp4UG9GS3V6UnBEcFRKKzBOQWJwZmVua21IMnJlUHR1dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4xLjMiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIiwKLSAgICAgICAgImlzLWFyZ3VtZW50cyI6ICJeMS4xLjEiLAotICAgICAgICAiaXMtbWFwIjogIl4yLjAuMiIsCi0gICAgICAgICJpcy1zZXQiOiAiXjIuMC4yIiwKLSAgICAgICAgImlzLXN0cmluZyI6ICJeMS4wLjciLAotICAgICAgICAiaXNhcnJheSI6ICJeMi4wLjUiLAotICAgICAgICAic3RvcC1pdGVyYXRpb24taXRlcmF0b3IiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImVzLW1vZHVsZS1sZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcy1tb2R1bGUtbGV4ZXIvLS9lcy1tb2R1bGUtbGV4ZXItMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZaSzdUME4yQ0JtQk9peGhtamRxeDJnV1ZiRlo0RFhaL055Uk1aVmxKWFBhN0N5RlMrL2E0UVFzREdEUXk5WmZFenhGdU5Fc01MZVFKbktQMnA1L0pBPT0iCi0gICAgfSwKLSAgICAiZXMtc2V0LXRvc3RyaW5ndGFnIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLXNldC10b3N0cmluZ3RhZy8tL2VzLXNldC10b3N0cmluZ3RhZy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzNPTWJ0bHdZM1Fld2xxQWlNTEk0N0t5d2pXWm9FeXRLcjhwZjZpVEM4dUpxNWJJQUg1Mlo5cG5ROHBWTDZ3aHJDdG81M0paRHVVSXNpZkdlTG9yVGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMyIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgImhhcy10b3N0cmluZ3RhZyI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXMtc2hpbS11bnNjb3BhYmxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcy1zaGltLXVuc2NvcGFibGVzLy0vZXMtc2hpbS11bnNjb3BhYmxlcy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm02R1BjQ2RDMzBlTUxiWjJ4OHoyV3VSd0F3czN6VEJCS3V1c2ZmWVZVck5qL0dWU1VBWit4S01hVXBmTkRSNUlieU5BNUxKYmFlY29VVmJtVWNCMXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoYXMiOiAiXjEuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImVzLXRvLXByaW1pdGl2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcy10by1wcmltaXRpdmUvLS9lcy10by1wcmltaXRpdmUtMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFDT2xsZ1pKdGFVbzltaVlCY0xDaFRVYUhOakpGM1BZczFWaWREN0F3aUVqMWtZeEtlUVRjdExBZXpBT0g1WktSSDBnMklnUG42S3dCNElUOGlScHZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMtY2FsbGFibGUiOiAiXjEuMS40IiwKLSAgICAgICAgImlzLWRhdGUtb2JqZWN0IjogIl4xLjAuMSIsCi0gICAgICAgICJpcy1zeW1ib2wiOiAiXjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgImVzY2FsYWRlIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FsYWRlLy0vZXNjYWxhZGUtMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWswZXIyZ1VrTGY4TzB6S0ppQWhta1RuSmxUdklOR3Y3eWdETlBiZUlzWC9USmpHSlpIdWg5QjJVeGJzYUVrbWxFbzlNZmhyU3ptaElsaFJsSTJHWG53PT0iCi0gICAgfSwKLSAgICAiZXNjYXBlLWh0bWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLWh0bWwvLS9lc2NhcGUtaHRtbC0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmlTdXBaNE9ldUd3cjY4bEdJZXltL2tzSVpNSm9kVUdPU0NaL0ZTblR4Y3Jla2J2cXJnZFV4bEpPTXBpamFLWlZqQUpyV3JHcy82Snk4T011eWo5b3c9PSIKLSAgICB9LAotICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UdHBjTkozWEF6eDNHcThzV1J6SmFWYWpSczB1VnhBMllBa2RiMWptMllrUHo0RzZlZ1VGQXlBM241dnRFSVplZlBrNVdhNFVYYkt1UzVmS2tKV2RnQT09IgotICAgIH0sCi0gICAgImVzY29kZWdlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NvZGVnZW4vLS9lc2NvZGVnZW4tMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJObElEVHdVV0pOMG1SUFFPZHRRQnpiVUh2ZEdZMlAxVlhTeVU4M1EzeEt4TTdXSFgyUWw4ZEtxNzgyUTlUZ1FVTk9MRXpFWXU5YnpMTmoxcTg4STV3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXNwcmltYSI6ICJeNC4wLjEiLAotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNS4yLjAiLAotICAgICAgICAiZXN1dGlscyI6ICJeMi4wLjIiLAotICAgICAgICAic291cmNlLW1hcCI6ICJ+MC42LjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNDMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50Ly0vZXNsaW50LTguNDMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWFDcGYySnFxS2VzTUZHZ21SUGVzc21WS2pjR1hxZGxBWUxMQzNUSE04dDVuQlJaUlErc3Q1V00vaG9KWGtkaW9FWExMYlhnY2xVcE0wVFhvNUhYNVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMiOiAiXjQuMi4wIiwKLSAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAiOiAiXjQuNC4wIiwKLSAgICAgICAgIkBlc2xpbnQvZXNsaW50cmMiOiAiXjIuMC4zIiwKLSAgICAgICAgIkBlc2xpbnQvanMiOiAiOC40My4wIiwKLSAgICAgICAgIkBodW1hbndob2NvZGVzL2NvbmZpZy1hcnJheSI6ICJeMC4xMS4xMCIsCi0gICAgICAgICJAaHVtYW53aG9jb2Rlcy9tb2R1bGUtaW1wb3J0ZXIiOiAiXjEuMC4xIiwKLSAgICAgICAgIkBub2RlbGliL2ZzLndhbGsiOiAiXjEuMi44IiwKLSAgICAgICAgImFqdiI6ICJeNi4xMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjIiLAotICAgICAgICAiZGVidWciOiAiXjQuMy4yIiwKLSAgICAgICAgImRvY3RyaW5lIjogIl4zLjAuMCIsCi0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeNC4wLjAiLAotICAgICAgICAiZXNsaW50LXNjb3BlIjogIl43LjIuMCIsCi0gICAgICAgICJlc2xpbnQtdmlzaXRvci1rZXlzIjogIl4zLjQuMSIsCi0gICAgICAgICJlc3ByZWUiOiAiXjkuNS4yIiwKLSAgICAgICAgImVzcXVlcnkiOiAiXjEuNC4yIiwKLSAgICAgICAgImVzdXRpbHMiOiAiXjIuMC4yIiwKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiLAotICAgICAgICAiZmlsZS1lbnRyeS1jYWNoZSI6ICJeNi4wLjEiLAotICAgICAgICAiZmluZC11cCI6ICJeNS4wLjAiLAotICAgICAgICAiZ2xvYi1wYXJlbnQiOiAiXjYuMC4yIiwKLSAgICAgICAgImdsb2JhbHMiOiAiXjEzLjE5LjAiLAotICAgICAgICAiZ3JhcGhlbWVyIjogIl4xLjQuMCIsCi0gICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKLSAgICAgICAgImltcG9ydC1mcmVzaCI6ICJeMy4wLjAiLAotICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4wIiwKLSAgICAgICAgImlzLXBhdGgtaW5zaWRlIjogIl4zLjAuMyIsCi0gICAgICAgICJqcy15YW1sIjogIl40LjEuMCIsCi0gICAgICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5IjogIl4xLjAuMSIsCi0gICAgICAgICJsZXZuIjogIl4wLjQuMSIsCi0gICAgICAgICJsb2Rhc2gubWVyZ2UiOiAiXjQuNi4yIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4xLjIiLAotICAgICAgICAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsCi0gICAgICAgICJvcHRpb25hdG9yIjogIl4wLjkuMSIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMSIsCi0gICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIl4zLjEuMCIsCi0gICAgICAgICJ0ZXh0LXRhYmxlIjogIl4wLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJncGFyc2UiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmdwYXJzZS8tL2FyZ3BhcnNlLTIuMC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItOCs5V3FlYmJGenBYOU9SK1dhNk8yOWFzSW9nZVJNemNHdEFJTmRwTUhIeUFnMTBmMDVhU0ZWQmJjRXFHZi9QWHcxRWpBWitxMi9iRUJnM0R2dXJLM1E9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImZpbmQtdXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC01LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTc4L1BYVDF3bExMRGdUekRzN3NqcTloenowdlhEK3puKzd3eXBFZTRmWFF4Q21kbXFmR3NFUFF4bWlDU1FJM2FqRlY5MWJWU3N2TnRySlJpVzZuR25nPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJsb2NhdGUtcGF0aCI6ICJeNi4wLjAiLAotICAgICAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJnbG9iYWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEzLjIwLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xMy4yMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWc1UXRWa0N5L2t2M0ZVU2x1NHVrZVpEVmY5ZWUwaVhMQVVZWDEzZ2JSMTdibmVqRlR6cjRpUzliWTdrd0NmMU56dFJObTF0OTFmak9peXg0Q1N3UFE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInR5cGUtZmVzdCI6ICJeMC4yMC4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImpzLXlhbWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC00LjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdweFpzOU5veFphSkVTSkdJWlR5REVhWXBsMEZLU0ErRkI5YUppeWVtS2hNd2t4UWc2M2g0VDFLSmdVR0hwVHFQRE5SY21tWUx1Z3JSakpsQnRXdlJBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhcmdwYXJzZSI6ICJeMi4wLjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibG9jYXRlLXBhdGgiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItaVBaSzZlWWpieFJ1M3VCNC9XWjNFc0VJTUpGTXFBb29wbDNSK3p1cTBVamNBbS9NTzZLQ3dlRGdQZlAzZWxUenRvS1AzS3RuVkh4VG4yTkhCU0RWVXc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInAtbG9jYXRlIjogIl41LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwLWxpbWl0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UWU9hbk0zd0d3TkdzWk4yY1ZUWVBBcnc0NTR4blhqNXFtV0YxYkVvQWM0K2NVL29sN0dWaDdvZGV2anAxRk5IZHVIYzNLWk1jRmR1eFU1WGM2dUpSUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieW9jdG8tcXVldWUiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInAtbG9jYXRlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS01LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxhTmp0UldVQlkrK3pCNW5FL053Y2FvTXlsU1BrK1MrWkhOQjFUemRiTUpNbnk2ZHlucEFHdDdYL3RsL1FZcTNUSWVFNm54SHBwYm8yTEd5bXJHNVB3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJwLWxpbWl0IjogIl4zLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ0eXBlLWZlc3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4yMC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuMjAuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5lK2VFNHIwL2lXbnBBeEQ4NTJ6M0ErTjBCdDVSTi8vTmpKd1JkMlZGSEVtcnl3eGY1dnNabGg0UjZsaXhsNkIrd3ovOGQrbWFUU0FrTjFGSWtJM0xRPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJlc2xpbnQtY29uZmlnLXJlYWN0LWFwcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtY29uZmlnLXJlYWN0LWFwcC8tL2VzbGludC1jb25maWctcmVhY3QtYXBwLTcuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LNnJOenZrSWVIYVRkOG0vUUVoMVprbzBLSTdCQUNXa2tuZVNzNnM5Y0taQy9KMjdYM2VaUjZVcHQxamttWi80RksrWFVPUFB4TUVONytsYlVYZlNsQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjE2LjAiLAotICAgICAgICAiQGJhYmVsL2VzbGludC1wYXJzZXIiOiAiXjcuMTYuMyIsCi0gICAgICAgICJAcnVzaHN0YWNrL2VzbGludC1wYXRjaCI6ICJeMS4xLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4iOiAiXjUuNS4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiAiXjUuNS4wIiwKLSAgICAgICAgImJhYmVsLXByZXNldC1yZWFjdC1hcHAiOiAiXjEwLjAuMSIsCi0gICAgICAgICJjb25mdXNpbmctYnJvd3Nlci1nbG9iYWxzIjogIl4xLjAuMTEiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi1mbG93dHlwZSI6ICJeOC4wLjMiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi1pbXBvcnQiOiAiXjIuMjUuMyIsCi0gICAgICAgICJlc2xpbnQtcGx1Z2luLWplc3QiOiAiXjI1LjMuMCIsCi0gICAgICAgICJlc2xpbnQtcGx1Z2luLWpzeC1hMTF5IjogIl42LjUuMSIsCi0gICAgICAgICJlc2xpbnQtcGx1Z2luLXJlYWN0IjogIl43LjI3LjEiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi1yZWFjdC1ob29rcyI6ICJeNC4zLjAiLAotICAgICAgICAiZXNsaW50LXBsdWdpbi10ZXN0aW5nLWxpYnJhcnkiOiAiXjUuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludC1pbXBvcnQtcmVzb2x2ZXItbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUvLS9lc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUtMC4zLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdvelcyYmxNTEpDZUZwQnd1Z0xUR3l2VmpOb2VvMWtub25YQWNhdEM2YmpQQlppdG90eGRXZjdHaW1yMjVONGMwQUFPbzRlT1VmYUc4MklKUERwcUNBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiXjMuMi43IiwKLSAgICAgICAgImlzLWNvcmUtbW9kdWxlIjogIl4yLjExLjAiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMi4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuNyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMy4yLjcudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DRmp6WVlBaTRUaGZpUXZpenJGUWV2VFRYSHRuQ3FXZmU3eDFBaGdFc2NUejZaYkxiZm9MUkxQdWdUUXlCdGg2ZjhaRVJWVVN5V0hGRC83V3U0dDFYUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibXMiOiAiXjIuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludC1tb2R1bGUtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LW1vZHVsZS11dGlscy8tL2VzbGludC1tb2R1bGUtdXRpbHMtMi44LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFXYWpJWWZzcUNLUkRnVWZqRVhOTi9KbHJ6YXVNdVNFeTVzYmQ3V1hidFczRUg2QTZNcHdFaDQyYzdxRCtNcVFvOVFNSjZmV0xBZUlKeW54MGc2T0F3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiXjMuMi43IgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuNyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMy4yLjcudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DRmp6WVlBaTRUaGZpUXZpenJGUWV2VFRYSHRuQ3FXZmU3eDFBaGdFc2NUejZaYkxiZm9MUkxQdWdUUXlCdGg2ZjhaRVJWVVN5V0hGRC83V3U0dDFYUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibXMiOiAiXjIuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludC1wbHVnaW4tZmxvd3R5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXBsdWdpbi1mbG93dHlwZS8tL2VzbGludC1wbHVnaW4tZmxvd3R5cGUtOC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRYOGw2cVVMNk8rZllQdHBOUmlkZUNGU3BtV09VVng1UWNhR0xWcWUvdmxEaUJTZTR2WWxqRFdERVR3bnlGenBsN0J5L1dWSXU2cmNybmlDZ0g5QnFRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjE3LjIxIiwKLSAgICAgICAgInN0cmluZy1uYXR1cmFsLWNvbXBhcmUiOiAiXjMuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludC1wbHVnaW4taW1wb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMi4yNy41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLWltcG9ydC8tL2VzbGludC1wbHVnaW4taW1wb3J0LTIuMjcuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTG1FdDNHVm9mZ2lHdWlFK09ScG52UCtrQW0zaDZNTFpKNFE1SEN5SEFEb2ZzYjRWelhGc1JpV2ozYzBPRmlWKzNEV0ZoMHFnM3Y5Z2NQbGZjM3pSb3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnJheS1pbmNsdWRlcyI6ICJeMy4xLjYiLAotICAgICAgICAiYXJyYXkucHJvdG90eXBlLmZsYXQiOiAiXjEuMy4xIiwKLSAgICAgICAgImFycmF5LnByb3RvdHlwZS5mbGF0bWFwIjogIl4xLjMuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeMy4yLjciLAotICAgICAgICAiZG9jdHJpbmUiOiAiXjIuMS4wIiwKLSAgICAgICAgImVzbGludC1pbXBvcnQtcmVzb2x2ZXItbm9kZSI6ICJeMC4zLjciLAotICAgICAgICAiZXNsaW50LW1vZHVsZS11dGlscyI6ICJeMi43LjQiLAotICAgICAgICAiaGFzIjogIl4xLjAuMyIsCi0gICAgICAgICJpcy1jb3JlLW1vZHVsZSI6ICJeMi4xMS4wIiwKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4xLjIiLAotICAgICAgICAib2JqZWN0LnZhbHVlcyI6ICJeMS4xLjYiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMi4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiLAotICAgICAgICAidHNjb25maWctcGF0aHMiOiAiXjMuMTQuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4yLjciLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTMuMi43LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ0ZqellZQWk0VGhmaVF2aXpyRlFldlRUWEh0bkNxV2ZlN3gxQWhnRXNjVHo2WmJMYmZvTFJMUHVnVFF5QnRoNmY4WkVSVlVTeVdIRkQvN1d1NHQxWFE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1zIjogIl4yLjEuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJkb2N0cmluZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvY3RyaW5lLy0vZG9jdHJpbmUtMi4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zNW1Ta3U0WlhLMHZmQ3VIRURBd3Q1NWRnMmpOYWpIWjFvZHZGKzhTU3I4MkVzWlk0UW1YZnVXc284b0VkOHpSaFZPYlNOMThhTTBDalNkb0JYN3pJdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZXN1dGlscyI6ICJeMi4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZXNsaW50LXBsdWdpbi1qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjUuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLWplc3QvLS9lc2xpbnQtcGx1Z2luLWplc3QtMjUuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QV0xVRVhlZUY3QzlRR0txdmRTYnpMT2lMVHgrYm5vNy9IQzllZWZlUGZFYjI1N1FGSGc3eWUzZGg4MEFaVmthYS9SUXNCQjFRL09SUXZnMlg3RjBOUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC9leHBlcmltZW50YWwtdXRpbHMiOiAiXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludC1wbHVnaW4tanN4LWExMXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXBsdWdpbi1qc3gtYTExeS8tL2VzbGludC1wbHVnaW4tanN4LWExMXktNi43LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTYzQm9nNGlJZXRoeW84c21Ca2xPUmtuVmpCMFQyZHdCOE1yL2hJQytmQlMwdXlIZFlZcHpNL0VkK1lDOFZ4VGpsWEhFV0ZPZG1nd2NEbjFVMkw5VkNBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuMjAuNyIsCi0gICAgICAgICJhcmlhLXF1ZXJ5IjogIl41LjEuMyIsCi0gICAgICAgICJhcnJheS1pbmNsdWRlcyI6ICJeMy4xLjYiLAotICAgICAgICAiYXJyYXkucHJvdG90eXBlLmZsYXRtYXAiOiAiXjEuMy4xIiwKLSAgICAgICAgImFzdC10eXBlcy1mbG93IjogIl4wLjAuNyIsCi0gICAgICAgICJheGUtY29yZSI6ICJeNC42LjIiLAotICAgICAgICAiYXhvYmplY3QtcXVlcnkiOiAiXjMuMS4xIiwKLSAgICAgICAgImRhbWVyYXUtbGV2ZW5zaHRlaW4iOiAiXjEuMC44IiwKLSAgICAgICAgImVtb2ppLXJlZ2V4IjogIl45LjIuMiIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgImpzeC1hc3QtdXRpbHMiOiAiXjMuMy4zIiwKLSAgICAgICAgImxhbmd1YWdlLXRhZ3MiOiAiPTEuMC41IiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4xLjIiLAotICAgICAgICAib2JqZWN0LmVudHJpZXMiOiAiXjEuMS42IiwKLSAgICAgICAgIm9iamVjdC5mcm9tZW50cmllcyI6ICJeMi4wLjYiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlc2xpbnQtcGx1Z2luLXJlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiNy4zMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLXJlYWN0Ly0vZXNsaW50LXBsdWdpbi1yZWFjdC03LjMyLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQyZkJNYStYem9ucnJOa3lWaXJ6S2x2bjVSWHp6UHdSSHRNdkxBdFZacnQ4b3hnblRRYVliVTZTWFRPTzFtd1FncDF5NSt0b01TS0lubnpHcjBLbnFnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXJyYXktaW5jbHVkZXMiOiAiXjMuMS42IiwKLSAgICAgICAgImFycmF5LnByb3RvdHlwZS5mbGF0bWFwIjogIl4xLjMuMSIsCi0gICAgICAgICJhcnJheS5wcm90b3R5cGUudG9zb3J0ZWQiOiAiXjEuMS4xIiwKLSAgICAgICAgImRvY3RyaW5lIjogIl4yLjEuMCIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjMuMCIsCi0gICAgICAgICJqc3gtYXN0LXV0aWxzIjogIl4yLjQuMSB8fCBeMy4wLjAiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMiIsCi0gICAgICAgICJvYmplY3QuZW50cmllcyI6ICJeMS4xLjYiLAotICAgICAgICAib2JqZWN0LmZyb21lbnRyaWVzIjogIl4yLjAuNiIsCi0gICAgICAgICJvYmplY3QuaGFzb3duIjogIl4xLjEuMiIsCi0gICAgICAgICJvYmplY3QudmFsdWVzIjogIl4xLjEuNiIsCi0gICAgICAgICJwcm9wLXR5cGVzIjogIl4xNS44LjEiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMi4wLjAtbmV4dC40IiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiLAotICAgICAgICAic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbCI6ICJeNC4wLjgiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRvY3RyaW5lIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9jdHJpbmUvLS9kb2N0cmluZS0yLjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM1bVNrdTRaWEswdmZDdUhFREF3dDU1ZGcyak5hakhaMW9kdkYrOFNTcjgyRXNaWTRRbVhmdVdzbzhvRWQ4elJoVk9iU04xOGFNMENqU2RvQlg3ekl3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJyZXNvbHZlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wLW5leHQuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUvLS9yZXNvbHZlLTIuMC4wLW5leHQuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlNRGJtQVd0ZlUrTUhweHQvSTVpV0k3Y1k2WVZFWlVRM01CZ1BRKytYRDFQRUx1SkhJbDgyeEJtT2J5UDJLeVFta05CMmRzcUY3c2VvUVFpQW41eURRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1jb3JlLW1vZHVsZSI6ICJeMi45LjAiLAotICAgICAgICAgICAgInBhdGgtcGFyc2UiOiAiXjEuMC43IiwKLSAgICAgICAgICAgICJzdXBwb3J0cy1wcmVzZXJ2ZS1zeW1saW5rcy1mbGFnIjogIl4xLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJlc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzIjogewotICAgICAgInZlcnNpb24iOiAiNC42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1wbHVnaW4tcmVhY3QtaG9va3MvLS9lc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzLTQuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vRmM3SXR6OVF4aDJ4NGdOSFN0djNCcUpxNTRFeFhtZkMrYTFOakF0YTY2SUFOODdXdTBSL1FBcmdJUzlxS3pYM2RYS1BJOUg1Y3JsOVFjaE5NWTkrZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAiZXNsaW50LXBsdWdpbi10ZXN0aW5nLWxpYnJhcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjExLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1wbHVnaW4tdGVzdGluZy1saWJyYXJ5Ly0vZXNsaW50LXBsdWdpbi10ZXN0aW5nLWxpYnJhcnktNS4xMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FTFk3R2Vmbys2MU9mWEtsUWVYTklEVlZMUGN2S1RlaVFPb01aRzlUZXVXYTdMbjRkVU5SdjhKZFJXQlFJOU1iYjQyN1hHbFZCMWFhMVFQWnhCSk04UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC91dGlscyI6ICJeNS41OC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImVzbGludC1zY29wZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtc2NvcGUvLS9lc2xpbnQtc2NvcGUtNy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURZajVkZUdsSEJmTXQxNUo3cmR0eUtOcS9OcWx2NUtmVTRpb2RyUTAxOVhFU3NSbndYSDlLQUUweTNjd3RVSERvMm9iN0N5cEFuQ3FlZmg2dmlvV1J3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXNyZWN1cnNlIjogIl40LjMuMCIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJlc2xpbnQtdmlzaXRvci1rZXlzIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC12aXNpdG9yLWtleXMvLS9lc2xpbnQtdmlzaXRvci1rZXlzLTMuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wWm5tbUx3WXpmK2tXYU0vUWdydnBlbjUxdXBBa3RhYWlJMDFuc0pEL1lyM2xNT2ROdHEwY3hrcnJnMTZ3NjRWdGlzTjZva2JzN1E4QWZHcWo0YzlmQT09IgotICAgIH0sCi0gICAgImVzbGludC13ZWJwYWNrLXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtd2VicGFjay1wbHVnaW4vLS9lc2xpbnQtd2VicGFjay1wbHVnaW4tMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2cktjR25jcFBiUFNVSFg2QjNzdE5HemtLRnRvM2VMK0RLTTQrVnlNclZuaFBjM3ZSY3pWbENxM3VodUZPZFJ2REhUVlh1endrMVpLVXJxRFFIUTl3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2VzbGludCI6ICJeNy4yOS4wIHx8IF44LjQuMSIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjguMC4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC41IiwKLSAgICAgICAgIm5vcm1hbGl6ZS1wYXRoIjogIl4zLjAuMCIsCi0gICAgICAgICJzY2hlbWEtdXRpbHMiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiOC4xMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2Ly0vYWp2LTguMTIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNSdTFrcGNPOXlMdFl4Qkt2cWZUZWg5S3paRXdPM1NUeVgxSFQrNENhRHpDNkhwVEdZaEloUEl6ajlYdUtVN0tZRHduYWVoNWhjT3dqeTFRdUp6QlBBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4xIiwKLSAgICAgICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMS4wLjAiLAotICAgICAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIiwKLSAgICAgICAgICAgICJ1cmktanMiOiAiXjQuMi4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImFqdi1rZXl3b3JkcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi1rZXl3b3Jkcy8tL2Fqdi1rZXl3b3Jkcy01LjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlDUy9KTkZBVXlyNXZBdWhrMURXbTFDQnhSSFc5TGJKMm96V2VlbXJJcXBic3FLakhWeFlQeWk1R0MwcmpaSVQ1SnhKM3ZpclZUUzh3azRpL1ora3J3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3Qtd29ya2VyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI4LjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjguMS4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3FSQTIyMFlWLzZqQ284Vld2QXQxS0t4NmVlazFWSUhNUGVMRWJwY2ZTZmtFZVd5Qk5wcHluTS9vNnErV213K3NPaG9zMm1sMzR3WmJTWDNHMTMvL2c9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl44LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgICAgICB9LAotICAgICAgICAic2NoZW1hLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjkiLAotICAgICAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl41LjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImVzcHJlZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtOS41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdPQVNOMVdtYTVmdW01U3JOaEZNQU1KeE9VQWJoeWZROGRRLy9QSmFKYk53MFVSVFBXcUlnaEhXdDFNbUFBTktoSFpJWU9IcnVXNEt3NHJ1VVdPZEd3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWNvcm4iOiAiXjguOC4wIiwKLSAgICAgICAgImFjb3JuLWpzeCI6ICJeNS4zLjIiLAotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMy40LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXNwcmltYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUd1RkZ3N1VwZGErZzRwK1FIdm5XMFJ5VFgvU1ZlSkJETS9nQ3RNQVJPMGNMdVQySGNFS25UUHZoalY2YUdlcXJDQi9zYk5vcDBLc3ptMGpzYVdVNEE9PSIKLSAgICB9LAotICAgICJlc3F1ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcXVlcnkvLS9lc3F1ZXJ5LTEuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZUUxYVXBsQXdKZ0N5ZFE3OElNSnl3WkNjZW9xazFvSDAxT0VSZFNBSmMvN1UyQXlsd2poU0NMREV0cXdnODExaWRJUy85ZklVNUdqRzczSWdqS01WZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImVzcmVjdXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3JlY3Vyc2UvLS9lc3JlY3Vyc2UtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUttZktMM2I2RytSWHZQOE4xdnIzVHExa0wvb0NGZ24yTllYRXRxUDgvTDNwS2FwVUE0RzhjRlZhb0YzU1UzMjNDRDRYeXBSL2ZmaW9IbWt0aTYvVGFnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNS4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXN0cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS01LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTU1kQVJ1VkVRemlOVGVKRDhEZ01xbWh3UjExQlJRL2NCUCtwTHRZZFNUbmYzTUlPOGZGZWlJTkViWDM2WmRObGZVLzdBOWYzZ1V3NDlCM29Rc3Z3QkE9PSIKLSAgICB9LAotICAgICJlc3RyZWUtd2Fsa2VyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJlZS13YWxrZXIvLS9lc3RyZWUtd2Fsa2VyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xZk1YRjNZUDRwWlpWb3pGOGovWkxmdm5SOE5TSWxqdDU2VWhiWjVQZWVEbW1HSHBncGR3UXQ3SVRsR3ZZYVF1a0N2dUJSTUxFaUtpWUMrb2VJZzRjZz09IgotICAgIH0sCi0gICAgImVzdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN1dGlscy8tL2VzdXRpbHMtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtWc2NxWGs0T0NwNjhTWjBka2dFS1ZpNi84aWozMDBLQldUSnEzMlAvZFllV1RTd0s0MVd5VHhhbE4xZVJtQTVaOVVVL0xYOUQ3RldTbVY5U0FZeDZnPT0iCi0gICAgfSwKLSAgICAiZXRhZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldGFnLy0vZXRhZy0xLjguMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUlMNUZ4N21hd1ZhMzAwYWwyQm5FRTRpTnZvMXFFVHhMclBJL28wNUw3ejZnbzdmQ3cxSjZFUW1iSzRGbUoyQVM3a2dWRi9LRVpXdWZCZmRDbE1jUGc9PSIKLSAgICB9LAotICAgICJldmVudGVtaXR0ZXIzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50ZW1pdHRlcjMvLS9ldmVudGVtaXR0ZXIzLTQuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04Z3VIQlpDd0tuRmhZZEhyMnlzdVJXRXJUd2hvTjJYOFhFTFJsclJ3cG1mZVkyamp1VU40dGFRTXNVTEtVVm8xSzREdlpsKzBwZ2Z5b3lzSHh2bXZFdz09IgotICAgIH0sCi0gICAgImV2ZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudHMvLS9ldmVudHMtMy4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1RdysyZmtRYkFMelE3VjBNWTBJcWRuWE5PZVR0UDRyMGxOOXo3QUFhd0NYZ3FlYTdiRGlpMjBBWXJJQnJGZC9IeDBNMk9jejZTMTExQ2FGa1VjYjBRPT0iCi0gICAgfSwKLSAgICAiZXhlY2EiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhlY2EvLS9leGVjYS01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOHVTcFpab2NBWlJCQVBJRUlOSmozTG85SHlHaXRsbGN6YzI3RWg1WVlvampNRk1uOHlITURNYVVIRTJKcWZxMDVEL3d1Y3dJNEpHVVJ5WHQxdmNoeWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjMiLAotICAgICAgICAiZ2V0LXN0cmVhbSI6ICJeNi4wLjAiLAotICAgICAgICAiaHVtYW4tc2lnbmFscyI6ICJeMi4xLjAiLAotICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICJeNC4wLjEiLAotICAgICAgICAib25ldGltZSI6ICJeNS4xLjIiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC4zIiwKLSAgICAgICAgInN0cmlwLWZpbmFsLW5ld2xpbmUiOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImV4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhpdC8tL2V4aXQtMC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVprL2VOS1YyemJqcEt6cnNRK24xRzZwb1ZiRXJReEowTEJPSlhhS1oxRVZpTHpIK2hyTHU5Y2RYSTR6dzlkQlFKc2x3QkVwYlEyUDFvUzduRHhzNmpRPT0iCi0gICAgfSwKLSAgICAiZXhwZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHBlY3QvLS9leHBlY3QtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pQUVyc0x4SjhDK1MwMlFiTEF3Z1NHU2V6TFFLK1hYUkR0OEl1RlhGcHdDTncyRUNtelpTbWpLY0NhRlZwNVZSTWsrV0F2ejZoNmpva3pFekJGWkV1QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvZXhwZWN0LXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC11dGlsIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImV4cHJlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE4LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MvLS9leHByZXNzLTQuMTguMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNS9Qc0w2aUdQZGZRL2xLTTFVdWllbFlndjNCVW9KZnoxYVV3VTl2SForSjdneXZ3ZFFYRkVCSUVJYXhlR2YwR0ljcmVBVE55QkV4dGFsaXNEYnVNcVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhY2NlcHRzIjogIn4xLjMuOCIsCi0gICAgICAgICJhcnJheS1mbGF0dGVuIjogIjEuMS4xIiwKLSAgICAgICAgImJvZHktcGFyc2VyIjogIjEuMjAuMSIsCi0gICAgICAgICJjb250ZW50LWRpc3Bvc2l0aW9uIjogIjAuNS40IiwKLSAgICAgICAgImNvbnRlbnQtdHlwZSI6ICJ+MS4wLjQiLAotICAgICAgICAiY29va2llIjogIjAuNS4wIiwKLSAgICAgICAgImNvb2tpZS1zaWduYXR1cmUiOiAiMS4wLjYiLAotICAgICAgICAiZGVidWciOiAiMi42LjkiLAotICAgICAgICAiZGVwZCI6ICIyLjAuMCIsCi0gICAgICAgICJlbmNvZGV1cmwiOiAifjEuMC4yIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIn4xLjAuMyIsCi0gICAgICAgICJldGFnIjogIn4xLjguMSIsCi0gICAgICAgICJmaW5hbGhhbmRsZXIiOiAiMS4yLjAiLAotICAgICAgICAiZnJlc2giOiAiMC41LjIiLAotICAgICAgICAiaHR0cC1lcnJvcnMiOiAiMi4wLjAiLAotICAgICAgICAibWVyZ2UtZGVzY3JpcHRvcnMiOiAiMS4wLjEiLAotICAgICAgICAibWV0aG9kcyI6ICJ+MS4xLjIiLAotICAgICAgICAib24tZmluaXNoZWQiOiAiMi40LjEiLAotICAgICAgICAicGFyc2V1cmwiOiAifjEuMy4zIiwKLSAgICAgICAgInBhdGgtdG8tcmVnZXhwIjogIjAuMS43IiwKLSAgICAgICAgInByb3h5LWFkZHIiOiAifjIuMC43IiwKLSAgICAgICAgInFzIjogIjYuMTEuMCIsCi0gICAgICAgICJyYW5nZS1wYXJzZXIiOiAifjEuMi4xIiwKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIjUuMi4xIiwKLSAgICAgICAgInNlbmQiOiAiMC4xOC4wIiwKLSAgICAgICAgInNlcnZlLXN0YXRpYyI6ICIxLjE1LjAiLAotICAgICAgICAic2V0cHJvdG90eXBlb2YiOiAiMS4yLjAiLAotICAgICAgICAic3RhdHVzZXMiOiAiMi4wLjEiLAotICAgICAgICAidHlwZS1pcyI6ICJ+MS42LjE4IiwKLSAgICAgICAgInV0aWxzLW1lcmdlIjogIjEuMC4xIiwKLSAgICAgICAgInZhcnkiOiAifjEuMS4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS1mbGF0dGVuIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktZmxhdHRlbi8tL2FycmF5LWZsYXR0ZW4tMS4xLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QQ1ZBUXN3V2VtdTZVZHhzREZGWC8rZ1ZlWXFLQW9kM0QzVVZtOTFqSHd5bmd1T3dBdllQaHg4bk5sTSsrTnFSY0s2Q3h4cFVhZmptaElkS2lIaWJxZz09IgotICAgICAgICB9LAotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm1zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwcDYwUDZJVUpEVHVPcS81WjhjZHNrekp1amZ3cWZPVGtyd0l3ajdJUklTcG5rSm5UNlN5SjRQQ1BuR01vRmpDOWRkaGFsNUtWSVl0QXQ5N2l4MDVBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJmYXN0LWRlZXAtZXF1YWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1kZWVwLWVxdWFsLy0vZmFzdC1kZWVwLWVxdWFsLTMuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mM3FROW9ReTlqMkFoQmUvSDlWQzkxd0xtS0JDQ1UvZ0RPbktOQVlHNWhzd083QkxLajA5SGM1SFlOejljR0krK3hscERDSWdEYWl0VnMwM0FUUjg0UT09IgotICAgIH0sCi0gICAgImZhc3QtZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1nbG9iLy0vZmFzdC1nbG9iLTMuMi4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRFZqNENRSVlZb3cwQmxhZWx3SzFwSGw1bjVjUlNKZk02MFVBMHpLODkxc1ZJbm9QcmkyRWtqNytlMUNUMy8zcXhYZW5wSStuQkJtUUFjSlBKZ2FqNHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAbm9kZWxpYi9mcy5zdGF0IjogIl4yLjAuMiIsCi0gICAgICAgICJAbm9kZWxpYi9mcy53YWxrIjogIl4xLjIuMyIsCi0gICAgICAgICJnbG9iLXBhcmVudCI6ICJeNS4xLjIiLAotICAgICAgICAibWVyZ2UyIjogIl4xLjMuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2xvYi1wYXJlbnQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTUuMS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQU9JZ1NRQ2VwaUpZd1AzQVJuR3grNVZuVHUySEJZZHpiR1A0NWVMdzF2cjN6QjN2WkxleWVkMXNDOWhuYmNPYzkvU3JNeU01UlBRcmtHejRhUzlab3c9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5Ly0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnktMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxoZC93RitMazk4SFpvVEN0bFZyYUh0Zmg1WFlpaklqYWxYY2s3c2FVdHVhblNEeUxNeG5IaFNYRURKcUh4RDdtc1I4RDB1Q21xbGt3akNWOHh2d0h3PT0iCi0gICAgfSwKLSAgICAiZmFzdC1sZXZlbnNodGVpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LWxldmVuc2h0ZWluLy0vZmFzdC1sZXZlbnNodGVpbi0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRENYdTZJZmhxY2tzN1RaS1kzSHhwM3k2cXBoWTVTSlptcldNRHJLY0VSU09YV1FkTWhVOUlnL1BZcnp5dy91bDlqT0l5aDBONE0wdGJDNWhvZGc4ZHc9PSIKLSAgICB9LAotICAgICJmYXN0cSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdHEvLS9mYXN0cS0xLjE1LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdCcm9jVTJMQ1hYYStsV0J0OFJvSVJEODlGaThPZEFCT0RhL2tFbnlleWpTNWFaTzUvR052STVzRUlOQURxUC9oOE0yOVVIVEhVYjUzc1V1NUlocWR3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicmV1c2lmeSI6ICJeMS4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZmF5ZS13ZWJzb2NrZXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZheWUtd2Vic29ja2V0Ly0vZmF5ZS13ZWJzb2NrZXQtMC4xMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DemJDbHdsWEF1aVJRQWxVeWZxUGd2UG9OS1Rja1RQR2Z3WlY0WmRBaFZjUDJsaDlLVXhKZzJiNUdrRTdYYmpLUTNZSm5ROXo2RDludExBbEIrdFA4Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndlYnNvY2tldC1kcml2ZXIiOiAiPj0wLjUuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJmYi13YXRjaG1hbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYi13YXRjaG1hbi8tL2ZiLXdhdGNobWFuLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wNTE2MUJxYnVDYVNuQjhqSWJ6UUhPbHBnc1BtSzVySlZEZkRLTzkxQXhzNU5DMXV1M0hSUW02d3Q5Y2Q5LytHdFFRSU81M0pkR1hYb3lEcFRBc2dZQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJzZXIiOiAiMi4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZmlsZS1lbnRyeS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlLWVudHJ5LWNhY2hlLy0vZmlsZS1lbnRyeS1jYWNoZS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0dwcy9YV3ltYkxrMlFMWUs0TnpwTU9yWWpNaGRJeFh1SXZ5MlFCc0xFNmxqdW9kS3Zka1dzL2NweUpKM0NWSVZwSDBPaTFIdmcxb3ZiTXpMZEZCQmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmbGF0LWNhY2hlIjogIl4zLjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJmaWxlLWxvYWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlLWxvYWRlci8tL2ZpbGUtbG9hZGVyLTYuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xbzNnbHF5VGE2MVl0ZzR1NzNHdWx0akhHamRSeWlnM3RHNmxQdHlYL2pPRUp2SGlmOXVCMC9PQ0kyS2lmNmN0RjNjYVFUVzJHNWd5bTIxb0FzSTRwdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxvYWRlci11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJmaWxlbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlbGlzdC8tL2ZpbGVsaXN0LTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13MWNFdWYzUytEckxDUUw3RVQ2a3orZ21sSmRicTlKN3lYQ1NqSy9PWkNQQStxRU4xV3lGNFpBZjBZWUphNC9zaEhKcmEydC9kL3I4U1Y0SmkreCs4UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeNS4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0yLjAuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhuQUl2UThlTStrQzZhVUx4Nnd1UWl3VnNuenNpOWQzV3h6VjNGcFdUR0ExOUY2MjFrd2Ric0FjRktYZ0tVSFpXc3krbVk2aUwxc0hUeFdFRkN5dERBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJiYWxhbmNlZC1tYXRjaCI6ICJeMS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibWluaW1hdGNoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMS42IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTUuMS42LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbEt3Vi8xYnJwRzZtQlVGSHRiN05VbXRBQkNiMldaWm1tMndOaU9BNWhBYjhWZENTNEIzZHRNV3l2Y29WaWNjd0FXL0NPRVJqWEx0MHpQMXpYVU4yNmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICJeMi4wLjEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZmlsZW5hbWUtcmVzZXJ2ZWQtcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZW5hbWUtcmVzZXJ2ZWQtcmVnZXgvLS9maWxlbmFtZS1yZXNlcnZlZC1yZWdleC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGMxYm5zU3I0TDRCZGlmOFhiL3FydG9rR2JxNXpsc21zL0NZSDhQUCtXdENrR05GNjVEUGlRWTh2RzNTYWtFZFJuOERsbm0rZ1cvcVdLS2pTNXNaelE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImZpbGVuYW1pZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZW5hbWlmeS8tL2ZpbGVuYW1pZnktNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhjRkt5VUc1N3lXR0F6dTFDTXQvZFB6WVp1ditqQUpVVDg1Ykw4bXJYdk5lNmhXajZ5RUhFYzRFZGNnaUE2WjNvaTEvOXdYSmRaUFhGMmRaTmd3Z09nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmaWxlbmFtZS1yZXNlcnZlZC1yZWdleCI6ICJeMi4wLjAiLAotICAgICAgICAic3RyaXAtb3V0ZXIiOiAiXjEuMC4xIiwKLSAgICAgICAgInRyaW0tcmVwZWF0ZWQiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImZpbGVzaXplIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGVzaXplLy0vZmlsZXNpemUtOC4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBqbUMrYmtJRjhYSTdmV2FIOEt4SGNaTDNEUHliczFyb1NLUDRyS0R2eTIwdEFXd0lPYkU0K0pJc2VHMmJ5ZkdLaHVkNVpuTTRZU0dLQno3U2gwbmRRPT0iCi0gICAgfSwKLSAgICAiZmlsbC1yYW5nZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxsLXJhbmdlLy0vZmlsbC1yYW5nZS03LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcU9vOUYrZE1VbUMyTGNiNEJiVnZuS0p4VFBqQ20rUlJwZTRnRHVHcnprTDdtRVZsL2RqWVN1Mk9kUTJQYTMwMk40b3FrU2c5aXI2amFMV0oyVVNWcFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ0by1yZWdleC1yYW5nZSI6ICJeNS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZmluYWxoYW5kbGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmFsaGFuZGxlci8tL2ZpbmFsaGFuZGxlci0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXVYY1VWZnRsUU1GbldDOXF1L3N2a1d2M0dUZDJQZlVoSy8zUExrWU5BZTdGYnFKTXQzNTE1SGF4RTZlUkw3NEdkc3JpaXd1amlhd2RhQjFCcEVJU2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOSIsCi0gICAgICAgICJlbmNvZGV1cmwiOiAifjEuMC4yIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIn4xLjAuMyIsCi0gICAgICAgICJvbi1maW5pc2hlZCI6ICIyLjQuMSIsCi0gICAgICAgICJwYXJzZXVybCI6ICJ+MS4zLjMiLAotICAgICAgICAic3RhdHVzZXMiOiAiMi4wLjEiLAotICAgICAgICAidW5waXBlIjogIn4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkM3RWxyZEphSm5QYkFQKzFFb3RZdnFac2IzZWNsNXdpNkJmaTZCSlRVY05vd3A2Y3ZzcGcwalh6blJUS0RqbS9FN0FkZ0ZCVmVBUFZNTmNLR3NITUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm1zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwcDYwUDZJVUpEVHVPcS81WjhjZHNrekp1amZ3cWZPVGtyd0l3ajdJUklTcG5rSm5UNlN5SjRQQ1BuR01vRmpDOWRkaGFsNUtWSVl0QXQ5N2l4MDVBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJmaW5kLWNhY2hlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLWNhY2hlLWRpci8tL2ZpbmQtY2FjaGUtZGlyLTMuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13WFpWNWVtRkVqcnJpZElnRUQxMU9vVUtMeGlZakFjcW90L05KZEFrT2hsSit2R3p3aE9BZmNHNU9YMWpQK1MwUGNqRW44YmRNSnYrZzJqd1EzT25pZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvbW1vbmRpciI6ICJeMS4wLjEiLAotICAgICAgICAibWFrZS1kaXIiOiAiXjMuMC4yIiwKLSAgICAgICAgInBrZy1kaXIiOiAiXjQuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImZpbmQtdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBwT3dBZFEvWWxYUTJ2ajhhM2g4SWlwRHVZUmkzd2NlVlFRR1lXeE5JTmNjcTQwQW53N0Jsc0VYQ01idDFadCtPTEE2RnE5c3VJcElXRDBPc25JU2x3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjUuMC4wIiwKLSAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJmbGF0LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZsYXQtY2FjaGUvLS9mbGF0LWNhY2hlLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kbTlzNVB3N0pjMEd2TVlic2hONnpjaENBOVJnUWx6ekVaWDN2eWxSOUlxRmZTOFhjaWJsVVhPS2ZXNlNpdUowZTEzZURZWm9aVjV3ZHJldjdQM053Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZsYXR0ZWQiOiAiXjMuMS4wIiwKLSAgICAgICAgInJpbXJhZiI6ICJeMy4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZmxhdHRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mbGF0dGVkLy0vZmxhdHRlZC0zLjIuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNW5xRFN4bDhubjVCU054eVIzbjRJNmVEbWJvbEk2V1QrUXFSNTQ3Und4UWFwZ2pRQm10a3RkUCtIVEJiL2EvekxzYnpFUlRPTnlVQjVwZWZoNVR0alE9PSIKLSAgICB9LAotICAgICJmb2xsb3ctcmVkaXJlY3RzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb2xsb3ctcmVkaXJlY3RzLy0vZm9sbG93LXJlZGlyZWN0cy0xLjE1LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZRTEczM28wNEthUTh1WWkydFZOYmRyV3AxUVd4Tk5lYStubUlCNEVWTTI4djBobVAxN3o3YUcxK3dBa056VnE0S2VYVHEzMjIxeWU1cVRKUDkxSndBPT0iCi0gICAgfSwKLSAgICAiZm9yLWVhY2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9yLWVhY2gvLS9mb3ItZWFjaC0wLjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItanFZZkxwN21vOXZJeVFmOHlrVzJ2N0ErMk40UWplQ2VJNStEejlYcmFpTzFpZ244MXdqaUg3RmI5dlNPV3ZRZk50bVNhNEgyUm9RVHJyWGl2ZFVabXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1jYWxsYWJsZSI6ICJeMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZm9yay10cy1jaGVja2VyLXdlYnBhY2stcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiNi41LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbi8tL2ZvcmstdHMtY2hlY2tlci13ZWJwYWNrLXBsdWdpbi02LjUuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2JIL2w5aWttTVd5Y2Q1cHVISktUa1pKS2RkRjRpUkx5VzNEZVowOEhUSTdOR3lMUzM4TVhkL0tHZ2VXdW1RTzdZTlFiVzJ1L050UFQyWW93YlBhR1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy44LjMiLAotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuNSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjAiLAotICAgICAgICAiY2hva2lkYXIiOiAiXjMuNC4yIiwKLSAgICAgICAgImNvc21pY29uZmlnIjogIl42LjAuMCIsCi0gICAgICAgICJkZWVwbWVyZ2UiOiAiXjQuMi4yIiwKLSAgICAgICAgImZzLWV4dHJhIjogIl45LjAuMCIsCi0gICAgICAgICJnbG9iIjogIl43LjEuNiIsCi0gICAgICAgICJtZW1mcyI6ICJeMy4xLjIiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjAuNCIsCi0gICAgICAgICJzY2hlbWEtdXRpbHMiOiAiMi43LjAiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuMiIsCi0gICAgICAgICJ0YXBhYmxlIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29zbWljb25maWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3NtaWNvbmZpZy8tL2Nvc21pY29uZmlnLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGIzWkw2K0w4YjlKTExDeDNaZG9aeTQrMkVDcGhDTW8yUHdxZ1AxdGxmVnE2TTZZUmV5ekJKdHZXV3RiRFNwTnI5aG45NnBrQ2lacVVjRkVjKzU0UWc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9wYXJzZS1qc29uIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiaW1wb3J0LWZyZXNoIjogIl4zLjEuMCIsCi0gICAgICAgICAgICAicGFyc2UtanNvbiI6ICJeNS4wLjAiLAotICAgICAgICAgICAgInBhdGgtdHlwZSI6ICJeNC4wLjAiLAotICAgICAgICAgICAgInlhbWwiOiAiXjEuNy4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImZzLWV4dHJhIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjkuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS05LjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhjZzNabWVwUzMwLzdCU0ZxUnZvbzNET01RdTdJanF4TzVuQ0R0K3pNOVhXamIzM1dnN3ppTlQrUXZxYnVjMytnV3B6TzAySnViVnlrMkc0WnZvMU9RPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhdC1sZWFzdC1ub2RlIjogIl4xLjAuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4wIiwKLSAgICAgICAgICAgICJqc29uZmlsZSI6ICJeNi4wLjEiLAotICAgICAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibHJ1LWNhY2hlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNjaGVtYS11dGlscyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjcuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NjaGVtYS11dGlscy8tL3NjaGVtYS11dGlscy0yLjcuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBpbEtGSTZRUUY1bnhEWkxGbjJkTWp2YzRoamcvV2tnN3JIZDNqSzYvQTRhMUhsOVZGZFFXdmdCMVVNR29VOTRwYWQxUC84TjdmTWNFbkxuU2lqdThBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC40IiwKLSAgICAgICAgICAgICJhanYiOiAiXjYuMTIuMiIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl4zLjQuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJzZW12ZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy41LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy41LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Tb2Z0dVRST3YvY1JqQ3plL3Njakd5aUR0Y1V5eHcxcmdZUVNaWTdYVG10UjVoWCtkbTc2aURiVEg4VGtMUEhDUW1sYlFWU1NiTlpDUE0yaGIwa25uUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibHJ1LWNhY2hlIjogIl42LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ0YXBhYmxlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGFwYWJsZS8tL3RhcGFibGUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00V0svYllabWo4eExyK0hVQ09ESEdGMVpGenNZZmZhc0xVZ0VpTUJZNGZndGx0ZE82QjRXSnRsU2JQYURUTHBZVGNHVndNMnFMbkZUSUNFY054czNrQT09IgotICAgICAgICB9LAotICAgICAgICAieWFsbGlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImZvcm0tZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3JtLWRhdGEvLS9mb3JtLWRhdGEtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJIa0JLdExXVVZ3ZDdTcVJJdkNaTUV2QU1vR1VwMFhVK3NlUWlaZWpqMENPejNSSTNoV1A0c0N2M2daV1dMakpUZDdyR3djc0Y1ZUtaR2lpMHIvaGJnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXN5bmNraXQiOiAiXjAuNC4wIiwKLSAgICAgICAgImNvbWJpbmVkLXN0cmVhbSI6ICJeMS4wLjgiLAotICAgICAgICAibWltZS10eXBlcyI6ICJeMi4xLjEyIgotICAgICAgfQotICAgIH0sCi0gICAgImZvcndhcmRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3J3YXJkZWQvLS9mb3J3YXJkZWQtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ1UkcwZnBCdFJIU1RDT0FTZTZoRDI1OHRFdWJGb1JMYjRaTkE2TnhNVkhOdzJnT2N3SG85d3lhYmx6TXpPQTV6OXhBOUwxS05qay9OdDZNVDlhWW93PT0iCi0gICAgfSwKLSAgICAiZnJhY3Rpb24uanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJhY3Rpb24uanMvLS9mcmFjdGlvbi5qcy00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTWhMdUsrMmdVY25aZThaSGxhYUlOblFMbDB4UklHUmZjR2syeWw4eG9RQWZIclNzTDNyWXU2RkNtQmRrZGJoYzlFUGx3eUdIZXdhUnN2d1JNSnRBbEE9PSIKLSAgICB9LAotICAgICJmcmVzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcmVzaC8tL2ZyZXNoLTAuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16SjJtUVlNMThyRUZPdWRlVjRHU2hUR0lRN1JiekE3b3piVTlJL1hCcG03a3FnTXl3Z215bE13WEh4Wkpta1ZvWWtuYTlkMnBWWFZYUGRZVFA5ZWo4UT09IgotICAgIH0sCi0gICAgImZzLWV4dHJhIjogewotICAgICAgInZlcnNpb24iOiAiMTEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTExLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUdJRTRIT3ZRQ2VVQ3ptbEhzMHZYcGloNHlzejR3ZzlxaVNBdTZjZDQybFZ3UGJUTTFUalY3UnVzb3lRcU1tay85NWdkUVpYNzJ1K1lXK2MzZUVwRlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMCIsCi0gICAgICAgICJqc29uZmlsZSI6ICJeNi4wLjEiLAotICAgICAgICAidW5pdmVyc2FsaWZ5IjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJmcy1tb25rZXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtbW9ua2V5Ly0vZnMtbW9ua2V5LTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JTk0vZldBeE1JQ2p0dG5EMERYMXJCdmluS3NrajVHMXcrb3kvcG5tOXUvdFNsbkJyekZvbkpNY2FsS0ozMFA4UlJzUHpLY0NHN1E4bDBqeDVGaDlZUT09IgotICAgIH0sCi0gICAgImZzLnJlYWxwYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLnJlYWxwYXRoLy0vZnMucmVhbHBhdGgtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9PMHBIMmxLNmEwaFpuQWRhdTVJdHpIUEk2cFVsdkk3ak1WbnhVUVJ0dzRvd0Yyd2s4bE9TYWJ0R0RDVFA0R2dyZzJNYkduV085WDhLMXQ0K2ZHTUR3PT0iCi0gICAgfSwKLSAgICAiZnNldmVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnNldmVudHMvLS9mc2V2ZW50cy0yLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGlxTVFSNHhBZUhUdUI5dVdtK2ZGUmNJT2dLQk1pT0JQK2VYaXlUN2pzZ1ZDcTFia1Z5Z3QwMG9BU293QjdFZHRwT0hhYVBnS3Q4MTJQOWFiK0RES0E9PSIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgfSwKLSAgICAiZnVuY3Rpb24tYmluZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mdW5jdGlvbi1iaW5kLy0vZnVuY3Rpb24tYmluZC0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteUlvdkF6TVg0OXNGOFlsNThmU0NXSjVzdlNMdWFpYlB4WFFKRkxtQk9iVHVDcjBNZjFLaVBvcEdNOU5pRmppWUJDYmZhYTJGaDZicmVRNkFOVlRJMEE9PSIKLSAgICB9LAotICAgICJmdW5jdGlvbi5wcm90b3R5cGUubmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS8tL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lLTEuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11TjdtL0J6VktRbkNVRi9pVzhqWWVhNjd2KysydTdtNVVnRU5iSFJ0ZERWY2xPVVArRk1QbENOZG1rMGgveXNHeW8ydGF2TUpFRHFKQWtKZFJhMXZNQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS4zIiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjE5LjAiLAotICAgICAgICAiZnVuY3Rpb25zLWhhdmUtbmFtZXMiOiAiXjEuMi4yIgotICAgICAgfQotICAgIH0sCi0gICAgImZ1bmN0aW9ucy1oYXZlLW5hbWVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Z1bmN0aW9ucy1oYXZlLW5hbWVzLy0vZnVuY3Rpb25zLWhhdmUtbmFtZXMtMS4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhja0JVWHlUSXFUOTd0cTJ4MkFNYitnMTYzYjVKRnlzWWsweDRxeE5Gd2JmUWttTlpvaVJIYjZzUHpJOS9RVjMzV2V1dlZZQlVJaUQ0TnpOSXlxYVJRPT0iCi0gICAgfSwKLSAgICAiZ2Vuc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wLWJldGEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2Vuc3luYy8tL2dlbnN5bmMtMS4wLjAtYmV0YS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zaE43TmFza1l2TURMUVk1NWduVzNOUSttZXNFQWVwVHFsZytWRWJqN3p6cUVNQlZOaHpjR1lZZXFGby9UbFl6NmVRaUZjcDFIY3NDWk8rbkdnUzh6Zz09IgotICAgIH0sCi0gICAgImdldC1jYWxsZXItZmlsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtY2FsbGVyLWZpbGUvLS9nZXQtY2FsbGVyLWZpbGUtMi4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR5RlAzQk0vM1lIVFFPQ1VML3cwT1pIUjBscEtlR3J4b3RjSFdjcU5FZG5sdHFGd1hWZmhFQlE5NGVJbzM0QWZRcG8wckdraTRjeUlpZnRZMDZoMkZnPT0iCi0gICAgfSwKLSAgICAiZ2V0LWludHJpbnNpYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtaW50cmluc2ljLy0vZ2V0LWludHJpbnNpYy0xLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMkRjc3lmQUJsK2dWSEVmQ09hVHJXZ3l0K3RiNk1TRUdtS3Era0k1SHdMYklZZ2pnbU1jVjhLUTQxdWFLejF4eFVjbjl0SnRnRmJRVUVWY0ViZDBGWXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMSIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgImhhcy1wcm90byI6ICJeMS4wLjEiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImdldC1vd24tZW51bWVyYWJsZS1wcm9wZXJ0eS1zeW1ib2xzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1vd24tZW51bWVyYWJsZS1wcm9wZXJ0eS1zeW1ib2xzLy0vZ2V0LW93bi1lbnVtZXJhYmxlLXByb3BlcnR5LXN5bWJvbHMtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUkwVUJWL1hPejFYa0lKSEVVRE1aQWJ6Q1RoVS9IOER4bVNmbWRHY0tQblZodTJWZkZxcjM0anI5Nzc3SXlhVFl2eGplZFdocVZJaWxFRHNDZFA1RzZnPT0iCi0gICAgfSwKLSAgICAiZ2V0LXBhY2thZ2UtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtcGFja2FnZS10eXBlLy0vZ2V0LXBhY2thZ2UtdHlwZS0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGp6dUt0WTY0R1lmV2l6TkFKMGZyOVZxdHRaa05pSzJpUzQzMEx0SUh6akJFcjZiWDhBbTJ6bTRzVzRSbzV3aldXNWNBbFJMMXFBTVRjWGJqTkFPMlE9PSIKLSAgICB9LAotICAgICJnZXQtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1zdHJlYW0vLS9nZXQtc3RyZWFtLTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10czZXaSsyajNqUWpxaTcwdzVBbE44REZua1N3QytNcW14RXpkRUFMQjJxWFpZVjNYL2IxQ1RmZ1BMR0pOTWVBV3hkUGZVOEZPMW1zM05VZmFIQ1BZZz09IgotICAgIH0sCi0gICAgImdldC1zeW1ib2wtZGVzY3JpcHRpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LXN5bWJvbC1kZXNjcmlwdGlvbi8tL2dldC1zeW1ib2wtZGVzY3JpcHRpb24tMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJFbWRIMVl2SVFpWnBsdENOZ2t1aVVueXVrenhNL1I2TkRKWDMxS2UzQkcxTnE1YjBTMlBoWDU5VUtpOXZacFBEUVZkcW4rMUljYUF3bnpUVDV2Q2p3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJnaC1wYWdlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9naC1wYWdlcy8tL2doLXBhZ2VzLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GWFpXSlJzdlAvZksySEpHWStEaTZGUk5IdnFGRjZnT0lFTGFvcERqWFhnamVPWVNOVVJjdVl3RU8vNmJ3dXE2a29QNUxua3ZucjVHVmlYenVPQjg5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXN5bmMiOiAiXjMuMi40IiwKLSAgICAgICAgImNvbW1hbmRlciI6ICJeMTEuMC4wIiwKLSAgICAgICAgImVtYWlsLWFkZHJlc3NlcyI6ICJeNS4wLjAiLAotICAgICAgICAiZmlsZW5hbWlmeSI6ICJeNC4zLjAiLAotICAgICAgICAiZmluZC1jYWNoZS1kaXIiOiAiXjMuMy4xIiwKLSAgICAgICAgImZzLWV4dHJhIjogIl4xMS4xLjEiLAotICAgICAgICAiZ2xvYmJ5IjogIl42LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29tbWFuZGVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjExLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0xMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05SE1sWHR0L0JOb1lyOG9veWpqTlJkSWlsT1RrVkpYQitHaHhNVHRPS3drMFI0ajRsUzROcGp1cW1SeHJvQmZuZlRTSFFJSFFCN3dyeUhoWGFyTmptUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbkZSMHpMcFUyWUNhUnh3b0NKdkw2VXZDSDJKRnlGVkl2d1RMc0lmMjFBdUhsTXNrQTFoaFRkaytMbFlKdE9sWXQ5djZkdnN6RDJCR1JxQkwraVFLOVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmcy5yZWFscGF0aCI6ICJeMS4wLjAiLAotICAgICAgICAiaW5mbGlnaHQiOiAiXjEuMC40IiwKLSAgICAgICAgImluaGVyaXRzIjogIjIiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMSIsCi0gICAgICAgICJvbmNlIjogIl4xLjMuMCIsCi0gICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJnbG9iLXBhcmVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YeHdJOEVPaFZRZ1dwNmlETCszYjByODZmNGQ2QVg2elNVNTVIZkI0eWRDRXVYTFhjNUZjWWVPdStubkdmdFM0VEVqdS8xMXJ0NEtKUFRNZ2JmbXY0QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImdsb2ItdG8tcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2ItdG8tcmVnZXhwLy0vZ2xvYi10by1yZWdleHAtMC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxrWDFISlh3eU1jcHJ3LzVZVVpjMnM3RHJwQWlIQjIxL1YrRTFySFVyVk5va2t2QjZicU16VDBWZlY2Lzg2Wk5hYnQxazE0WU9JYVQ3bkR2T1gzSWl3PT0iCi0gICAgfSwKLSAgICAiZ2xvYmFsLW1vZHVsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFsLW1vZHVsZXMvLS9nbG9iYWwtbW9kdWxlcy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdiZm1KQnA5eDhJeHlKU2QxUCtvdFlLOHZvbm9KYWN0T29nclZmRlJJQUVZMXVraWw4UlNLRHoyWW83d2gxb2lobDUxbC9yNlc0ZXBrZUtKSHFMOEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJnbG9iYWwtcHJlZml4IjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJnbG9iYWwtcHJlZml4IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbC1wcmVmaXgvLS9nbG9iYWwtcHJlZml4LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hd0NvbkpTVkNIVkdORDZ4M3RtTWFLY1F2d1hMaGpka21vbXkyVytHb2F1aThZUGdZZ1hKWmV3aGczZldDK0RsZnFxUXVXZzhBd3FqR1REMm5BUFZXZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImluaSI6ICJeMS4zLjUiLAotICAgICAgICAia2luZC1vZiI6ICJeNi4wLjIiLAotICAgICAgICAid2hpY2giOiAiXjEuMy4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3aGljaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLy0vd2hpY2gtMS4zLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IeEpkWVdxMU1USVFiSjNudzBjcXNzSG9UTlUyNjdLbHJEdUdaMVdZbHhEU3RVdEtVaE9hSm1oMTEyL1RabUh4eFVmdUpxUFhTT203dER5YXMwT1NJUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXNleGUiOiAiXjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImdsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMS4xMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xMS4xMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XT0JwL0VFR1VpSXNKU3A3d2N2L3k2TU8rbFY5VW9uY1dxeHVGZm04ZUJ3eldOZ3lmQmQ2R3orSWVLUTlqQ215aG9IOTlnMTVNM1QrUWFWSEZqaXpWQT09IgotICAgIH0sCi0gICAgImdsb2JhbHRoaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFsdGhpcy8tL2dsb2JhbHRoaXMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNGZEk1THlCaU5USGpSZDdjR1BXYXBpSFdNT1hLeXVCTlgvY1dKM05menJaUVZhOEdJLzhjb2ZDbDc0QU9WcXE5VzVrTm1ndVRJekovMXMyZ3lJOXdBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS4zIgotICAgICAgfQotICAgIH0sCi0gICAgImdsb2JieSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYnkvLS9nbG9iYnktNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtWYkZ2MlRRdGJ6Q294QW5mRDZKY0haVFlDenlsaUVhYWVNL2dIOHFRZGtLcjVzME9QOXNjRWd2ZGNuZ3lrN0FWZFk2WVZXL1RKSGQrbFEvRGYzRGF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnJheS11bmlvbiI6ICJeMS4wLjEiLAotICAgICAgICAiZ2xvYiI6ICJeNy4wLjMiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICJeNC4wLjEiLAotICAgICAgICAicGlmeSI6ICJeMi4wLjAiLAotICAgICAgICAicGlua2llLXByb21pc2UiOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImdvcGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ29wZC8tL2dvcGQtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWQ2NWJObElhZHh2cGIvQTJhYlZkbHFLcVY1NjNqdVJuWjFXdGs2czFzSVI4dU5zWFI3MHhxSXpWcXhWZjFlVHFEdW53VDJNa2N6RWVhZXpDS1RaaHdBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZ3JhY2VmdWwtZnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYWNlZnVsLWZzLy0vZ3JhY2VmdWwtZnMtNC4yLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SYko1L2ptRmNOTkNjRFY1bzllVG5CTEovSHN6V1YwUDczYmMrRmY0blMvckpqK1lhUzZJR3lpT0wwVm9CWVgrbDFXcmwzazYzaC9LckgrbmhKMFh2UT09IgotICAgIH0sCi0gICAgImdyYXBoZW1lLXNwbGl0dGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYXBoZW1lLXNwbGl0dGVyLy0vZ3JhcGhlbWUtc3BsaXR0ZXItMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ6aDUwRFc5a1RQTTAwVDh5NG84dlFnODlEaTlvTEpWTFcvS2FPR0lYSldQL2lxQ042V0tZa2JOT0YwNHZGTEpod2NwWVVoOXlkaC8rNXZwT3FWNFlRPT0iCi0gICAgfSwKLSAgICAiZ3JhcGhlbWVyIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYXBoZW1lci8tL2dyYXBoZW1lci0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXRLd29PNmt4Q0w5V081eGlwaUhUWmxTekJtN1dMVDYyN1RxQy91VlJkMEhLbXE4Tlh5ZWJuTll4RG9CaTd3dDhlVFdyVXJLWENPVmFGcTl4MWtnYWc9PSIKLSAgICB9LAotICAgICJncmVtbGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmVtbGludC8tL2dyZW1saW50LTMuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qMFBNa0ZXT05QRWVtaUNnNzFLOXVmdWdwZkMrUHBTRVJvMHdDMkxaRTNXd2g4d0YzTGM0V3htc3ptY3RTQnJWcHJhVkZqVUlVMWQwOUpJRmp6NWxFdz09IgotICAgIH0sCi0gICAgImd6aXAtc2l6ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nemlwLXNpemUvLS9nemlwLXNpemUtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF4N1pZb21mNmpxUFRRNCtYQ3BVR3lYS0hrNVd3ZVMrZTA1TUJPNC95M1dKNVJrbVBYTkt2WCtieDFiZWhWSUxWd3I2SlNRdlpBa3UwMjFDSFBYRzNRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZHVwbGV4ZXIiOiAiXjAuMS4yIgotICAgICAgfQotICAgIH0sCi0gICAgImhhbmRsZS10aGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYW5kbGUtdGhpbmcvLS9oYW5kbGUtdGhpbmctMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlRbjR5QnhlbHhvaDJPdzYyblArS2Eva01uT1hSaThCWG5SYVV3ZXpMTmhxZWxuTjQ5eEt6NEYvZFBQOE9ZTHhMeHE2SkR0WmIyaTlYem5VUWJOUFRnPT0iCi0gICAgfSwKLSAgICAiaGFybW9ueS1yZWZsZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcm1vbnktcmVmbGVjdC8tL2hhcm1vbnktcmVmbGVjdC0xLjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSElwL24zOFI5a1FqREV6aVh5RFR1VzN2dm94eHl4anhGelhMckJyMTh1QjQ3R25TdCtHOUQyOWZxcnBNNVprc3BNY1BJQ3VkM1hzQkpRNFkyVVJnOGc9PSIKLSAgICB9LAotICAgICJoYXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLy0vaGFzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMmR2TzBWVTZPZWo3UmtXSkdyZWhqYnpNQWpGcDUvVktQcDV0VHBXSVY0SkhIWksxL0J4YkZSdGYvc2lBMlNXVGUwOWNhRG1WdFlZeldFSWJCUzR6dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImhhcy1iaWdpbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1iaWdpbnRzLy0vaGFzLWJpZ2ludHMtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRTdkNLdEJyOWxrRjBFeDBhUWlQOU4rT3BWNHppMnIvTmVlNVZrUkRiYXF2MzVSTFlNemJ3UWZGU1paSDBrUitSZDYzMDJVSloycC9iSkNFb1IzVm9RPT0iCi0gICAgfSwKLSAgICAiaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXlrSlQvUTFLalRXY3RwcGdJQWdmU08wdEtWdVpVamhnTXIxN2txVHVtTWw2QWZ2M0VJU2xlVTdxWlV6b1hERlRBSFREQzROT29HL1p4VTNFdmxNUFE9PSIKLSAgICB9LAotICAgICJoYXMtcHJvcGVydHktZGVzY3JpcHRvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzLy0vaGFzLXByb3BlcnR5LWRlc2NyaXB0b3JzLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02MkRWTFpHb2lFQkRIUXlxRzR3OXhDdVo3ZUpFd05tSlJXdzJWWTg0T2VkYjdXRmNBMjdmaUVWZThvVVF4OWhBVUo0ZWt1cnF1dWNUR3dzeU8xWEdkUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImhhcy1wcm90byI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvdG8vLS9oYXMtcHJvdG8tMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdxRStpUCtPK2JnRjljbEU1K1VvQkZ6RTY1bWxCaVZqM3RLQ3JsTlEwT2d3bTBCanBUL2dLNFNsTFlETXliRGg1STNUQ1RLblBQYTBvTUc3SkRZcmhnPT0iCi0gICAgfSwKLSAgICAiaGFzLXN5bWJvbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXN5bWJvbHMvLS9oYXMtc3ltYm9scy0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDNMQ3VGNk1nRE53VERLa2RZR0VpaFlqdDVwUlBiRWc0NnJ0bG1uU1BsVWJnbUI4TE9JcktKYllZRkJTYm5QYUpleE1LdGlQTzhobWVSalJ6MlRkK0E9PSIKLSAgICB9LAotICAgICJoYXMtdG9zdHJpbmd0YWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXRvc3RyaW5ndGFnLy0vaGFzLXRvc3RyaW5ndGFnLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rRmpjU05obmxHVjFreW9HazdPWEtTYXdINUpPYi9MelVjNXc5QjAyaE9UTzBkZkZSamJIUUt2ZzFkNmNmM0hiZVVtdFU5VmJiVjNxeloyVGVoOTdXUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImhhcy1zeW1ib2xzIjogIl4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oZS8tL2hlLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GLzFEblVHUG9wT1JaaTBuaStDdnJDZ0hRNUZ5RUFIUkxTQXB1WVdNbXJiU3dvTjJNbi83aytHbDM4Z0puUjd5eURaazZXTFh3aUdvZDFKT1dOREtHdz09IgotICAgIH0sCi0gICAgImhvaXN0LW5vbi1yZWFjdC1zdGF0aWNzIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLy0vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MtMy4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9nR2l2eGk4SlBLV05tL1cwalNtemNNUHBmcFBMYzNkWS82R3hoWDJoUTlpR2ozYURma2xWNEVUN05qS3BTaW5McEo1dmFmYTlpaUdJRVpnMTBTZkJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyZWFjdC1pcyI6ICJeMTYuNy4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZWFjdC1pcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNi4xMy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtaXMvLS9yZWFjdC1pcy0xNi4xMy4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMjRlNnluRTJIK09LdDRrcXNPdk5kOGtCcFY2NXpveGJBNEJWc0VPQjNBUlZXUWtpL0RIemFVb0M1S3VPTi9CaWNjRGFDQ1RaQnVPY2Zaczcwa1I4YlE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImhvb3B5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hvb3B5Ly0vaG9vcHktMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhSY3MrMm1yNTJXMEsreDhSemNMenVQUG1WSUtNU3Y5N1JHSHkwRWE5eS9tcGNhSyt4VHJqSUNBMDRLQUhpNEdSenhsaU5xTkpFRllXSGdoeTNyU2ZRPT0iCi0gICAgfSwKLSAgICAiaHBhY2suanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHBhY2suanMvLS9ocGFjay5qcy0yLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItekp4VmVoVWRNR0lLc1JhTnQ3YXBPMkdxcDBCZHFXNXlhaUdIWFhtYnB2eGdCWVZabkFxbCtCSmI0Uk81YWQyTWdwYlpLbjVHNm5NbmVnckgxRmNOWVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpbmhlcml0cyI6ICJeMi4wLjEiLAotICAgICAgICAib2J1ZiI6ICJeMS4wLjAiLAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIl4yLjAuMSIsCi0gICAgICAgICJ3YnVmIjogIl4xLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXNhcnJheSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTEuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVkxnaElXTk02RUxRem83endtY2cwTm1UVnlXS1lqdkllTTgzeWpwMHdSRFRtVW5yTTY3OGZRYmNLQm82bjJDSkVGMHN6b0cvL3l0ZytUS2xhODlBTFE9PSIKLSAgICAgICAgfSwKLSAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjMuOCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS0yLjMuOC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThwMEFVazRYT0RnSWV3U2kwbDhFcGpzK0VWbldpSzdOb0RJRUdVMEhoRTcrWnlZOEQxSU1ZN29kdTVsUnJGWEdnNzFMMTVLRzhRclBtdW00NVJUdGRBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb3JlLXV0aWwtaXMiOiAifjEuMC4wIiwKLSAgICAgICAgICAgICJpbmhlcml0cyI6ICJ+Mi4wLjMiLAotICAgICAgICAgICAgImlzYXJyYXkiOiAifjEuMC4wIiwKLSAgICAgICAgICAgICJwcm9jZXNzLW5leHRpY2stYXJncyI6ICJ+Mi4wLjAiLAotICAgICAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjEuMSIsCi0gICAgICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAifjEuMS4xIiwKLSAgICAgICAgICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICJ+MS4wLjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic2FmZS1idWZmZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2QyVVpCSkRrWGxZN0diSnhmc0U4L252S2tVRVUxRzM4YzFzaU42UVA2YTlQVDlNbUhCOEducHNjU21NSlNvRjhMT0lydDh1ZC93UHRvanlzNEc2K2c9PSIKLSAgICAgICAgfSwKLSAgICAgICAgInN0cmluZ19kZWNvZGVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nX2RlY29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW4vU2hudkRpNkZIYmJWZnZpcm8rV29qaUZ6ditzOE1QTUhCY3pWZVBmVXBESkx3b0xUMGh0MWw0WXdCQ2JpOHBKQXZlRUVkbmtIeVB5VFAvbXpSZndnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzYWZlLWJ1ZmZlciI6ICJ+NS4xLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiaHRtbC1lbmNvZGluZy1zbmlmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0bWwtZW5jb2Rpbmctc25pZmZlci8tL2h0bWwtZW5jb2Rpbmctc25pZmZlci0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDVKYk9NQklSL1RWWmt1YkhUK095VDI3MDVRdm9nVVc0SUJuNm5IZDc1Nk93aWVTRjlhRFlGajRkdjZISEVWR1liSGFMRVRhM1dnZ1pZV1dNeXkzWlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ3aGF0d2ctZW5jb2RpbmciOiAiXjEuMC41IgotICAgICAgfQotICAgIH0sCi0gICAgImh0bWwtZW50aXRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lbnRpdGllcy8tL2h0bWwtZW50aXRpZXMtMi4zLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlvMCtkY3BJdzIvSHhrTnVZS3hTSlVGL01NUlpRRUNLNEduRitvUU9tSjgzeUNWSFRXZ0NINWFPWHhLNWJvek5SbU04d3RncnlqSEQzdWxvUEJERUd3PT0iCi0gICAgfSwKLSAgICAiaHRtbC1lc2NhcGVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0bWwtZXNjYXBlci8tL2h0bWwtZXNjYXBlci0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSDJpTXRkMEk0TXQ1ZVlpYXBSZElEanArWHplbFhRMHRGRTRKUzdZRndGZXZYWE1tT3A5bXlOclV2Q2cwRDZ3czhpcWtSUEJmS0hnYndpZzFTbWxMZmc9PSIKLSAgICB9LAotICAgICJodG1sLW1pbmlmaWVyLXRlcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odG1sLW1pbmlmaWVyLXRlcnNlci8tL2h0bWwtbWluaWZpZXItdGVyc2VyLTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZWHhTbEpCWlRQN1JTM3RXblF3NzRvb0thNkw5YjlpOVFZWFkyMWVVRXZoWjN1OVhMZnY2T25Gc1FxNlJ4a2hIeWdzYVVNdllzWlJWNXJVL09WTlp4dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbWVsLWNhc2UiOiAiXjQuMS4yIiwKLSAgICAgICAgImNsZWFuLWNzcyI6ICJeNS4yLjIiLAotICAgICAgICAiY29tbWFuZGVyIjogIl44LjMuMCIsCi0gICAgICAgICJoZSI6ICJeMS4yLjAiLAotICAgICAgICAicGFyYW0tY2FzZSI6ICJeMy4wLjQiLAotICAgICAgICAicmVsYXRldXJsIjogIl4wLjIuNyIsCi0gICAgICAgICJ0ZXJzZXIiOiAiXjUuMTAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29tbWFuZGVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTguMy4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItT2tUTDl1bWYrSGUyRFprVXE4ZjhKOW9mN3lMNlJKS0kyNGRWSVRCbU5mWkJtcmk5ellaUXJLa3VYaUtoeWZQU3U4dFVoblZCQjFpS1hldnZubFI0V3c9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImh0bWwtd2VicGFjay1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC13ZWJwYWNrLXBsdWdpbi8tL2h0bWwtd2VicGFjay1wbHVnaW4tNS41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZZckRLVHVxYVAvVHF1Rkg3aDRzcllXc1p4K3g2azYrRmJzVG0wemlDd0dIRFA3OFVucjFyOUYvSDQrc0dtTWJYMDhHUWNKK0s2NHg1NWIrN1ZNL2pnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2h0bWwtbWluaWZpZXItdGVyc2VyIjogIl42LjAuMCIsCi0gICAgICAgICJodG1sLW1pbmlmaWVyLXRlcnNlciI6ICJeNi4wLjIiLAotICAgICAgICAibG9kYXNoIjogIl40LjE3LjIxIiwKLSAgICAgICAgInByZXR0eS1lcnJvciI6ICJeNC4wLjAiLAotICAgICAgICAidGFwYWJsZSI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaHRtbHBhcnNlcjIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbHBhcnNlcjIvLS9odG1scGFyc2VyMi02LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3l5UGs2cmdvbkxGRURHb2VSZ1FOYUVVdmRKNGt0VG1tVWgvaDJ0N3MrTThvUHBJUHhnTkFDV2ErNkVTUjU3a1hzdHdxUGlDdXQwVjhOUnBjd2dVN0E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkb21lbGVtZW50dHlwZSI6ICJeMi4wLjEiLAotICAgICAgICAiZG9taGFuZGxlciI6ICJeNC4wLjAiLAotICAgICAgICAiZG9tdXRpbHMiOiAiXjIuNS4yIiwKLSAgICAgICAgImVudGl0aWVzIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJodHRwLWRlY2VpdmVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtZGVjZWl2ZXIvLS9odHRwLWRlY2VpdmVyLTEuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MbXBPR3hUZmJwZ3RHVnhKcmo1azdhc1hIQ2dOWnA1bkxmcCtoV2M4UVFScXRiN2ZVeTZrUlkzQk8xaDlkZEY2eUlQWVVBUmd4R093QjQyRG54SWFOdz09IgotICAgIH0sCi0gICAgImh0dHAtZXJyb3JzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtZXJyb3JzLy0vaHR0cC1lcnJvcnMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZ0d3JHL2V1QnphRWpZZVJxT2dseTdHMHF2aWlYb0pXbnZFSDJaMXBsQmRYZ2J5anYzNHBIVFNiOXpvZUhNeUR5MzMrRFd5NVd0OVdvK1RVUnRPWVNRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVwZCI6ICIyLjAuMCIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyLjAuNCIsCi0gICAgICAgICJzZXRwcm90b3R5cGVvZiI6ICIxLjIuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIyLjAuMSIsCi0gICAgICAgICJ0b2lkZW50aWZpZXIiOiAiMS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaHR0cC1wYXJzZXItanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cC1wYXJzZXItanMvLS9odHRwLXBhcnNlci1qcy0wLjUuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU0dlQlg1NEY5NFdndTVSSDNYNWpzRHRmNGVIeVJvZ1dYMVhHVDNiNEh1VzN0UVBNNEFhQnpvVWppLzRBQUpOWENFT1daNU8wRGdabUp3MTk0N2dENVE9PSIKLSAgICB9LAotICAgICJodHRwLXByb3h5IjogewotICAgICAgInZlcnNpb24iOiAiMS4xOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLXByb3h5Ly0vaHR0cC1wcm94eS0xLjE4LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdtei83MjFBYm5Kd0lWYm5hU3YxQ3ozQW0wWkxUL1VCd2tDOTJWbHhoWHYvay9CQlFmTTJmWEVsUU5DMjdCVkdyMHV3VXBwbFlQUU05TG5hQk1SNU5RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXZlbnRlbWl0dGVyMyI6ICJeNC4wLjAiLAotICAgICAgICAiZm9sbG93LXJlZGlyZWN0cyI6ICJeMS4wLjAiLAotICAgICAgICAicmVxdWlyZXMtcG9ydCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaHR0cC1wcm94eS1hZ2VudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLXByb3h5LWFnZW50Ly0vaHR0cC1wcm94eS1hZ2VudC00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazB6ZE5ncVdUR0E2YWVJUlZwdmZWb2I0Zkw1MmRUZmFlaHlsZzBZNFV2U3lTdk9xL1krQk95UHJncFVyQTdIeWxxdlU4dklaR3NSdVhtc3Bza1YwVGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdG9vdGFsbG5hdGUvb25jZSI6ICIxIiwKLSAgICAgICAgImFnZW50LWJhc2UiOiAiNiIsCi0gICAgICAgICJkZWJ1ZyI6ICI0IgotICAgICAgfQotICAgIH0sCi0gICAgImh0dHAtcHJveHktbWlkZGxld2FyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLXByb3h5LW1pZGRsZXdhcmUvLS9odHRwLXByb3h5LW1pZGRsZXdhcmUtMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlhL1VlSjZIVkJZeHJnWW90QVpvMUt2UFdsZ0I0OGtVSkxEZVBGZW5lSHNWdWpGYVc1V05qMk5nV0NBRS8vQjFEbDAyQklmWWxwTmdCeThLZjhSam13PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2h0dHAtcHJveHkiOiAiXjEuMTcuOCIsCi0gICAgICAgICJodHRwLXByb3h5IjogIl4xLjE4LjEiLAotICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjEiLAotICAgICAgICAiaXMtcGxhaW4tb2JqIjogIl4zLjAuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJodHRwcy1wcm94eS1hZ2VudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwcy1wcm94eS1hZ2VudC8tL2h0dHBzLXByb3h5LWFnZW50LTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kRmNBanBUUUZnb0xNekMyVndVK0MvQ2JTN3VSTDBsV214RElUbXFtN0MrN0YwT2RtajZzOWw2YWxaYzZBRUxYaHJuZ2dNMkNlV1NYSEdPZFgyWXR3QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFnZW50LWJhc2UiOiAiNiIsCi0gICAgICAgICJkZWJ1ZyI6ICI0IgotICAgICAgfQotICAgIH0sCi0gICAgImh1bWFuLXNpZ25hbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHVtYW4tc2lnbmFscy8tL2h1bWFuLXNpZ25hbHMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUI0RkZaNnEvVDJqaGhrc2drYkVXM0hCdldJZkRXODVzbmtRZ2F3dDA3UzdKNVFYVGs2QmtOVisweUFlWnJNNVFwTUFkWWxvY0dvbGpuMHNKL1dRa0Z3PT0iCi0gICAgfSwKLSAgICAiaWNvbnYtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGZDazc5d3NoTWR6TXAyckgwNnFXckpFNGlvbHFMaENVSCtPaXVJZ1UrK1JCMCs5NE5sREw4MWF0TzdHWDU1dVVLdWVvMHR4SE50dkV5STZEN1dkTXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzYWZlci1idWZmZXIiOiAiPj0gMi4xLjIgPCAzLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpY3NzLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljc3MtdXRpbHMvLS9pY3NzLXV0aWxzLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zb0ZoZmxDVldMZlJOT1BVM2l2NVo5VlVkVDQ0eEZSYnpqTHNFelNyNUFRbWdxUE1USGRVM1BNVDFDZjFzc3g4ZkxOSkRBMWp1ZnRZbCtQVWN2M01xQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAiaWRiIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lkYi8tL2lkYi03LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ2NoZXNXQnp5dkdIUk85Vzh0elVXRkR5Y293NWd3anZGS2Z5VjlGRjMyWTdGNTB5Wk1wN21QK1QybUpJV0Z4NDl6aWNxeUM0dWVmSE0xN282eEtJVlE9PSIKLSAgICB9LAotICAgICJpZGVudGl0eS1vYmotcHJveHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWRlbnRpdHktb2JqLXByb3h5Ly0vaWRlbnRpdHktb2JqLXByb3h5LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wMG42WW5WSEtyaW5UOXQwZDkrNXlaQzZVQk5KQU5wWUVRdkwyTGxYNkFiOWxubXh6SVJjRW1UUHV5R1NjdmwxK2pLdUNJQ1gxWjBBYjFwUEtLZGlrQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImhhcm1vbnktcmVmbGVjdCI6ICJeMS40LjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaWdub3JlIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lnbm9yZS8tL2lnbm9yZS01LjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUFiMzhCY1NiSDBlSE5CeG43cWwyTkgva1gzM09rQjNsWjFCTmRoN0VOZVJDaEhUWXNUdldyTXViaUlBTU5TMmxsWEVFZ1oxTVVPQnRYQ2hQM2thRlE9PSIKLSAgICB9LAotICAgICJpbW1lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMC4yMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW1tZXIvLS9pbW1lci05LjAuMjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJjNE5CSHFPcVNmUlc3UE9Na0hkNTFMdkNsYWVNWHBtOGR4MGU4b0UyR09SYnE1YVJLN0J4bDRGeXpWTGRHdExtdkxLTDdCVERCRzVBQ1FtNEhXalRBPT0iCi0gICAgfSwKLSAgICAiaW1wb3J0LWZyZXNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltcG9ydC1mcmVzaC8tL2ltcG9ydC1mcmVzaC0zLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmVZWWhRYStEMVFCS3pudmhVSHhiOGZheGxyd1VueHNlREFiQXA0NTdFMHdMTmlvMmJPU0tuallEaE1qK1lpQXE2MXhyTUdoUWs5aVhWazVGemdRTXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwYXJlbnQtbW9kdWxlIjogIl4xLjAuMCIsCi0gICAgICAgICJyZXNvbHZlLWZyb20iOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZXNvbHZlLWZyb20iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWZyb20vLS9yZXNvbHZlLWZyb20tNC4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wYi9NWW1Yc3RBa3lzUkZ4OHBpTkkxdEdGTlFJRkEzdmtFM0dxNEV1QTFkRjZnSHAvK3ZnWnFzQ0dKYXB2eThOM1ErNG83Rnd2cXVQSmNuWjdSWXk0Zz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiaW1wb3J0LWxvY2FsIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltcG9ydC1sb2NhbC8tL2ltcG9ydC1sb2NhbC0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVNCMDd1THRuRHMxbzZFSGpLcFgzNEJLWURTcW5GZXJmVE9KTDJIdk1xRjcwTG54cGprekRCOEo0NG9UOXB1NEFNUGtRd2Y4amw2c3pndk5kMnRSSWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwa2ctZGlyIjogIl40LjIuMCIsCi0gICAgICAgICJyZXNvbHZlLWN3ZCI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaW11cm11cmhhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW11cm11cmhhc2gvLS9pbXVybXVyaGFzaC0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm1YTVo2d3V2RG1MaUhFbWw5eWt6cU82bHdGYm9mMEdHNElrY0dhRU5kQ1JERG1NVm5ueTdzNUhzSWdIQ2JhcTB3Mk15UGhEcWtoVFVnUzJMVTJQSEE9PSIKLSAgICB9LAotICAgICJpbmRlbnQtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luZGVudC1zdHJpbmcvLS9pbmRlbnQtc3RyaW5nLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FZEREWnU0QTJPeUlLN0xyLzJ6Ryt3NWptYnVrMURWQm5Fd1JFUXZCenNwQkprQ0ViUmE4R3hVMWxnaFljYUdKQ25SV2liakRYbHE3NzlYMS95NXh3Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaW5mbGlnaHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5mbGlnaHQvLS9pbmZsaWdodC0xLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazkySS9iMDhxNHd2RnNjWENMdnFmc0hDcmpyRjd5aVhzUXVJVnZWRTdOODJXMythcXB6dVVkQmJmaFdjeS9GWlIzLzRJZ2ZsTWdLTE9zdlBEckdDSkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJvbmNlIjogIl4xLjMuMCIsCi0gICAgICAgICJ3cmFwcHkiOiAiMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJpbmhlcml0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmhlcml0cy8tL2luaGVyaXRzLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rL3ZHYVg0L1lsYTNXenlNQ3ZUUU9YWWVJSHZxT0t0bnFCZHV6VEhwenBRWnpBc2tLTWhaMksrRW5CaVNNOXpHU29JRmVNcFhLeGE0ZFllWklRcWV3UT09IgotICAgIH0sCi0gICAgImluaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmkvLS9pbmktMS4zLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpWL3l1Z1YydXpXNWlNUlNpWkF5RHRRZCtueHRVbmplTHQwYWNOZHc5OGtLTHJ2dVJWeUI4MHRzUkVPRTd5dkdWZ2FsaFo2Uk5YQ21FSGtVS0JLeGV3PT0iCi0gICAgfSwKLSAgICAiaW50ZXJuYWwtc2xvdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbnRlcm5hbC1zbG90Ly0vaW50ZXJuYWwtc2xvdC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWStSNWhKcnpzNTJRQ0cybGFMbjR1ZFlWbnhzZm55OUNwT2hOaFV2ay9TU1NWeUY2VDI3RnpSYkYwc3JvUGlkU3UzWDhvRUFrT24ySzgwNG1qcHQ2VVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuMCIsCi0gICAgICAgICJoYXMiOiAiXjEuMC4zIiwKLSAgICAgICAgInNpZGUtY2hhbm5lbCI6ICJeMS4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXBhZGRyLmpzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lwYWRkci5qcy8tL2lwYWRkci5qcy0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGxieFE3eEt6ZkJ1c292NlVNaTRNRnBFZzBtK21BbTl4eU5HRWR1d1hNRUR1ZjRXZnpCL1Jad01WWUVkN0lLR3ZoNElVa0VYWXh0QVZ1OVQzT2VsSlE9PSIKLSAgICB9LAotICAgICJpcy1hcmd1bWVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYXJndW1lbnRzLy0vaXMtYXJndW1lbnRzLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04UTdFQVJqekVuS3B0L1BDRDdlMWNnVVMwYTZYOHU1dGRTaU1xWGhvak9kb1Y5VHNNc2lPKzlWTEM1dkFtTzhONy9HbVhuN3lqUjhxbkE2YlZBRXpmQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1hcnJheS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYXJyYXktYnVmZmVyLy0vaXMtYXJyYXktYnVmZmVyLTMuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15K0Z5eVIvdzh2ZklScTRlUWNNMUVZZ1NUbm1IWFBxYUYrSWd6Z3JheXRDRnE1WGg4bGxsRFZtQVpvbFBKaVp0dFpMZUZTSU5QWU1hRUo3L3ZXVWExdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4yLjAiLAotICAgICAgICAiaXMtdHlwZWQtYXJyYXkiOiAiXjEuMS4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1hcnJheWlzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hcnJheWlzaC8tL2lzLWFycmF5aXNoLTAuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ejA2Uzh0MG96b0RYTUcrdWJlMjZ6ZUNUTlhjS0lQSlpKaThoQnJGNGlkQ0xtczRDRzlRdEs3cUJsMWJvaTVPRHpGcGpzd2I1SlBtSENiTXBqYVl6Zz09IgotICAgIH0sCi0gICAgImlzLWJpZ2ludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1iaWdpbnQvLS9pcy1iaWdpbnQtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpCOUNydU1hbWp5bTgxaTJKWjNVTW41NFBLR3NRenNKZW82eHZOM0hKSjRDQXNRTkI2aVJ1dHAyVG83N09mQ051b3hzcHNJaHphUG9PMXp5Q0VoRk9nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaGFzLWJpZ2ludHMiOiAiXjEuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWJpbmFyeS1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWJpbmFyeS1wYXRoLy0vaXMtYmluYXJ5LXBhdGgtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpNRVJZZXM2cER5ZHl1R2lkc2U3T3NIeHRiSTdXVmVVRW96Z1IvZzdyZDB4VWltWU5sdlpSRS9LMk1nWlRqV3k3MjVJZmVsTGVWY0VNOTdtbXRSR1h3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYmluYXJ5LWV4dGVuc2lvbnMiOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWJvb2xlYW4tb2JqZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWJvb2xlYW4tb2JqZWN0Ly0vaXMtYm9vbGVhbi1vYmplY3QtMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdEWWFLSEptbmo0YVd4eWo2WUh5WFZwZFFhd3RWTEhVNWNiK2V6dFBHY3pmNmNqdVRkd3ZlNVpJRWZnWHFINGU1N0FuMUQxQUtmOENaM2tZclFScVlBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJoYXMtdG9zdHJpbmd0YWciOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWNhbGxhYmxlIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWNhbGxhYmxlLy0vaXMtY2FsbGFibGUtMS4yLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFCQzBCVkZoUy9wMHF0dzZlbnA4ZSs4T0QwVXJLMG9GTHp0U2pOemhjS0EzV0R1Snh4QVBYelB1UHRLa2pFWTlVVW9FV2xYLzhmZ0tldTJTOGk5SlRBPT0iCi0gICAgfSwKLSAgICAiaXMtY29yZS1tb2R1bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEyLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWNvcmUtbW9kdWxlLy0vaXMtY29yZS1tb2R1bGUtMi4xMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RNFp1QkFlMkZVc0t0eVFKb1FIbHZQOE92QkVSeE8zakVteTFJN2hjUlhjSkJHR0hGaC9hSkJzd2JYdVM5c2dyREgyUVVPOGlsa3dOUEh2SE1kOGNsZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImhhcyI6ICJeMS4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXMtZGF0ZS1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0ZS1vYmplY3QvLS9pcy1kYXRlLW9iamVjdC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOVlRYVN4c0FpU3djdlMzM01CazN3VENWbldLK0hoRjhWWlIyalJ4ZWhNMTZRY1ZPZEhxUG40VlBIbVJLNGxTcjM4bjlKcml1ckluTGNQOTB4c1lOZlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoYXMtdG9zdHJpbmd0YWciOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWRvY2tlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kb2NrZXIvLS9pcy1kb2NrZXItMi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYraTJCS3NGckg2NmlhVUZjMHdvRDhzTHk4Z2V0a3dUd3RPQmp2czU2Q3g0Q2dKRGVLUWVxZno4d0FZaVNiOEpPcHJXaEhINXA3N1BibVlDdnZVdVhRPT0iCi0gICAgfSwKLSAgICAiaXMtZXh0Z2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRnbG9iLy0vaXMtZXh0Z2xvYi0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2JLYkFOa042MDNWaTRqRVp2NDlMZVZKTW40eUd3c2J6WndvckVveUVpdXRzTjNuSllkYk8zNnpmaEdKNlFFRHBPWklGa0R0bnE1SlJ4bXZsM2pzb1E9PSIKLSAgICB9LAotICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC8tL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16eW1tNSt1K3NDc1NXeUQ5cU5hZWpWM0RGdmhDS2NsS2RpellhSlV1SEE4M1JMamI3blN1R25kZENIR3YwaGsrS1k3Qk1BbHNXZUs0VWVnNkVWNlhRZz09IgotICAgIH0sCi0gICAgImlzLWdlbmVyYXRvci1mbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1nZW5lcmF0b3ItZm4vLS9pcy1nZW5lcmF0b3ItZm4tMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNUSUI0eVBZTC9HcncwRWFTekFTemc2YkJ5OWdxQ29mdldOOG9rVGhBWUl4S0paQyt1ZGxSQW1HYk0wWExlbmlFSlNzOHVFZ0hQR3VIU2UxWHNPTFNRPT0iCi0gICAgfSwKLSAgICAiaXMtZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1nbG9iLy0vaXMtZ2xvYi00LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGVsU2F5SEgzNlpnRTdaV2hsaTdwVzM0aE5iTmw4T2p2NUtWbWtKRDRoQmREM3RoOFRmazl2WWFzTE0rbVhXT1poRmtnWmZ4aExTbnJ3UnI0ZWxTU2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1leHRnbG9iIjogIl4yLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbWFwLy0vaXMtbWFwLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jT1pGUVFvelRoYTFmNE14TEZ6bGdLWVBUeWoyNnBpY2RaVHg4MmhiYy9YZjRLL3RaT09YU0NrTXZVNHBLaW9SWEdETEpSbjBHTTdVcGU3a1I3MjF5Zz09IgotICAgIH0sCi0gICAgImlzLW1vZHVsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1tb2R1bGUvLS9pcy1tb2R1bGUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTUxeXBQU1BDb1RFSU45ZHk1T3kraDRwU2hnSm1QQ3lnS2Z5UkNJU0JJK0pvV1QvMm9Kdks4UVB4bXd2N2IvcDIzOWpYcm05TTFtbFFieUtKNUExNTJnPT0iCi0gICAgfSwKLSAgICAiaXMtbmVnYXRpdmUtemVybyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1uZWdhdGl2ZS16ZXJvLy0vaXMtbmVnYXRpdmUtemVyby0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZHFKdmFyTGF3WHNGYk5EZUpXN3pBejhJdEo5Y2QyOFl1ZnV1RnpoMEc4cE5IakpNblkwOER2N3NZWDJ1RjVVcFFPd2llQWVPRXhFWUFXV2Z1N1paVUE9PSIKLSAgICB9LAotICAgICJpcy1udW1iZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbnVtYmVyLy0vaXMtbnVtYmVyLTcuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00MUNpZmtnNmU4VHlsU3BkdFRwZUxWTXF2U0JFVnpUdHRIdkVSRDc0MStwblo4QU52MDAwNE1STDQzUUtQRGxLOWNHdk5wNk5aV1pVQmxiR1hZeHhuZz09IgotICAgIH0sCi0gICAgImlzLW51bWJlci1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbnVtYmVyLW9iamVjdC8tL2lzLW51bWJlci1vYmplY3QtMS4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWsxVTBJUnpMTW83WmxZSWZ6UnUyM09oNk1pSUZhc2dwYjlYNzZlcWZGWkFxd0g0NFVJNEtUQnZCWUlaMWRTTDlaekNoVEI5U2hIZkxrUjRwZFc1a3JRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1vYmoiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtb2JqLy0vaXMtb2JqLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sNFJ5SGdScUdONFkzKzlKSFZyTnFPK3ROMHJWNU15NzZ1VzUvbnVPNEsxYjZ2dzVHOGQvY21GalA5dFJmRXNkaFpOdDBJRmRadUsvYzJWcjROYitRZz09IgotICAgIH0sCi0gICAgImlzLXBhdGgtaW5zaWRlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBhdGgtaW5zaWRlLy0vaXMtcGF0aC1pbnNpZGUtMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZkNGdBQmIreWNHQW1Lb3U4ZU1mdEN1cFNpcjVsUnhxZjRhRC92ZDBjRDJxYzRITDA3T2pDZXVITXI4Um80Q29NYWVDS0RCMC9FQ0JPVldqVHdVdlBRPT0iCi0gICAgfSwKLSAgICAiaXMtcGxhaW4tb2JqIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBsYWluLW9iai8tL2lzLXBsYWluLW9iai0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3dzT0UyOGsrMjNHUDFCNnZGbDFvVmgvV096bWF3QnJLd281RXY2d01LelBrYVhhQ0RJUUt6TG52c0E0MkRSbGJWVFdvcmtnVEtJdmlBS0NXa2ZVd0E9PSIKLSAgICB9LAotICAgICJpcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZS8tL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iQ1llUkEyclZpYktaZCtzMjYyNWdHbkdGL3Q3RFNxRHM0ZFA3Q3JMQTFtN2pLV3o2cHBzMExwWUxKTjhRNjRIdG1QS0oxaHJOM256UE5LRkVLT1VpUT09IgotICAgIH0sCi0gICAgImlzLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXJlZ2V4Ly0vaXMtcmVnZXgtMS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWt2UmR4RHN4WmpoelVYMDdabkx5ZHpTMVRVL1RKbFRVSEhZNFlMTDg3ZTM3b1VBNDlEZmtMcWd5K1ZqRm9jb3d5MjljS3ZjU2l1K2tJdjcyOGpUVFZnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJoYXMtdG9zdHJpbmd0YWciOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1yZWdleHAvLS9pcy1yZWdleHAtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTd6akZBUE80L2d3eVFBQWdSUm1xZUVleUlJQ1NkbUNxYTN0c1ZITWRCemFYWFJpcW9wWkw0Q3lnaGcvWHVsR1dydEFCVHBibllZenpJUmZmTGtQNG9BPT0iCi0gICAgfSwKLSAgICAiaXMtcm9vdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1yb290Ly0vaXMtcm9vdC0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUdPcmlOcDk2dk5CZDNIdFUrUnpGRWM3NUZmUjV5bWlZdjhFNTUzSTcxU0NlWEJpTXNWRFV0ZGlvMU9FRnZyUHlMSVE5dFZSNVJ4WElGZTVQVUZqTWc9PSIKLSAgICB9LAotICAgICJpcy1zZXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtc2V0Ly0vaXMtc2V0LTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rMmNuVEVaZVk1ei9pWEdiTGhQck9BYUsvTWF1NWs1ZVhxOWoxNENwUlRmdHEwcEFKdTJNd1ZSU1poeVpXQnp4M282WDc5NUx6NkJwYjZSMEdLZjM3Zz09IgotICAgIH0sCi0gICAgImlzLXNoYXJlZC1hcnJheS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtc2hhcmVkLWFycmF5LWJ1ZmZlci8tL2lzLXNoYXJlZC1hcnJheS1idWZmZXItMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNxTjJVRHUxLzB5NnV2WHlTdENPenloQWpDU2xIY2VGb01LSlc4VzlFVTljdmljL1Fkc1owa0VVOTNIRXkzSVVFRlpJaUgvM3crQUgvVVFiUEhOZGhBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtc3RyZWFtLy0vaXMtc3RyZWFtLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oRm9pSmlUbDYzbm4ra3N0SEdCdGV3V1NLblFMcHliMTU1S0hoZUExbDM5dXZ0TzluV0lvcDFwM3VkcVBjVWQveGJGMVZMTU80bjdPSTZwN1JibmdEZz09IgotICAgIH0sCi0gICAgImlzLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJpbmcvLS9pcy1zdHJpbmctMS4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRFMlVYeml2amU2b2ZQVzdsMjNjakRPTWEwOWdiN3hsQXFHNmpHNWVqNnVQVjMyVGxXUDNOS1BpZ3RhR2VITnU5Zm9oY2NSWXZJaVpNZk9Pbk9ZVXRnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1zeW1ib2wiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtc3ltYm9sLy0vaXMtc3ltYm9sLTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DL0NQQnFLV252ZGN4cUlBUnh5T2g0djFVVUVPQ0hwZ0RhMFdZZ3BLREZNc3pjclBjZmZnNXVod1NnUENMRDJXV3htcTZpc2lzejg3dHpUMDF0dUdoZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImhhcy1zeW1ib2xzIjogIl4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy10eXBlZC1hcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtdHlwZWQtYXJyYXkvLS9pcy10eXBlZC1hcnJheS0xLjEuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBKcWdFSGlXWnZNcGFGWjN1VGM4a0hQTTQrNEFEVGxEbml1UUw3Y1UvVURBMFFsN0Y3MHlHZkhwaDNjTE5lK2M5dG9haWd2K0RGelRKS2hjMkN0TzZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXZhaWxhYmxlLXR5cGVkLWFycmF5cyI6ICJeMS4wLjUiLAotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJmb3ItZWFjaCI6ICJeMC4zLjMiLAotICAgICAgICAiZ29wZCI6ICJeMS4wLjEiLAotICAgICAgICAiaGFzLXRvc3RyaW5ndGFnIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy10eXBlZGFycmF5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXR5cGVkYXJyYXkvLS9pcy10eXBlZGFycmF5LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jeUE1NmlDTUhBaDVDZHpqSklhNGFvaEp5ZU8xWWJ3TGkzSmMzNU1tUlU2cG9yb0ZqSUdaelV6dXBHaVJQT2pnSGc5VEx1NDN4YnB3WGs1MjNmTXhLQT09IgotICAgIH0sCi0gICAgImlzLXdlYWttYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd2Vha21hcC8tL2lzLXdlYWttYXAtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5TQlI0a0g1b1ZqMVV3dnY5NzBydVVrQ1Y3TzFtemdWRk80L3JldjJjTFJkYTlUbTlIckw3MFpQdXQ0ck9IZ1kwRk5yVXU5QkNiWEEyc2RRK3gwY2hBPT0iCi0gICAgfSwKLSAgICAiaXMtd2Vha3JlZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy13ZWFrcmVmLy0vaXMtd2Vha3JlZi0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcWN0c3VMWm1JUTArdlNTTWZvVnZ5RmUyK0dTRXZubVoyZXpUdXAxU0JzZTkrdHdDQ2VpYWw2RUVpM05jMktGY2Y2K3F6MkZCUG5qWHNrOHhoS1NhUFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLXdlYWtzZXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd2Vha3NldC8tL2lzLXdlYWtzZXQtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQyeVZ2dHRIa1FrdHduTk5tQlE5OEFoRU5MZFBVVERURTIxdVBxQVEwQVJ3UWZHZVFLUlZTME5OdXJIN2JUZjdScnZjVm4xT09nZTQ1Q25CZUhDU21nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy13c2wiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd3NsLy0vaXMtd3NsLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mS3pBcmEwckdKVVVCd0dCZ05rSFp1VG9aY24rVHRYSHBlQ2dta01KTU1ZeDFzUURZYUNTeWpKQlNDYTJuSDFER203czNuMW9Cbm9ob1ZUQmFON0x3dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLWRvY2tlciI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXNhcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2FycmF5Ly0vaXNhcnJheS0yLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteEhqaERyM2NOQkswQnpkVUpTUFhabnRRVXgvbXdNUzVSdzRBN2xQSjkwWEdBTzZJU1AvZVBETnVvMHZocU9aVStVRDVKb29kd0NBQW9aUWQzRmVBS3c9PSIKLSAgICB9LAotICAgICJpc2V4ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SSHhNTHA5bG5LSEdIUm5nOVFGaFJDTWJZQWNWcG42OXNtU0djcTNmMzZ4amdWVldUaGo0cXFMYlRMbHE3U3NqOEIrZklRMUV1Q0VHSTJsS3N5UWVJdz09IgotICAgIH0sCi0gICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItY292ZXJhZ2UvLS9pc3RhbmJ1bC1saWItY292ZXJhZ2UtMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVPZUo1QkhDbUhZdlFLN3h0OUdrZEh1enVDR1MxWTZnOUd2bngzWW0zM2Z6L0hwTFJZeGlTMHdITnIrbS9NQkM4QjY0N1h0NjA4dkNERXZobDljNk13PT0iCi0gICAgfSwKLSAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLWluc3RydW1lbnQvLS9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudC01LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcHpxdHAzMW5Mdi9YRk96WEd1dmhDYjhxaGptVFZvNXZqVmsxOVhFNENSbFNXejBLb2VKM2J3OVhzQTduT3A5WUJmNHFIandCeGtEektjTUUvSjI5WWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMi4zIiwKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMTQuNyIsCi0gICAgICAgICJAaXN0YW5idWxqcy9zY2hlbWEiOiAiXjAuMS4yIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4yLjAiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpc3RhbmJ1bC1saWItcmVwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1yZXBvcnQvLS9pc3RhbmJ1bC1saWItcmVwb3J0LTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HQ2ZFMW10c0hHT0VMQ1U4ZS9aN1lXenBteWJyeC8rZFNUZkxydlk4cVJtYVk2elhUS1duNldRSWphQUZ3MDY5aWNtNkdWTU5rZ3UwTnpJNGlQWlVOdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAibWFrZS1kaXIiOiAiXjQuMC4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm1ha2UtZGlyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFrZS1kaXIvLS9tYWtlLWRpci00LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhYZFVUWllJVk90MUV4Ly9qQVFpK3dUWlpwVXB3QmovMFFzT3pxZWdiM3JHTU1lSmlTRXU1eExIbllmQnJSVjRSSDIrT0NTT085NUlzLzd4MVdKNGJ3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzZW12ZXIiOiAiXjcuNS4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjUuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFiQ1NFU1Y2UHYraTIxSHZweHAzRHgrcFNEOGxJUHQ4dVZqUnJ4QVV0L25ic3dZYyt0SzZZMmJ0aVVMamQ0K2ZucTE1UFgrbnFRREM3T2Z0N1drd2NBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInlhbGxpc3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJpc3RhbmJ1bC1saWItc291cmNlLW1hcHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzLy0vaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uM3M4RXdrZEZJSkNHM0JQS0JZdnNrZ1hHb3k4OEFSenZlZ2tpdGs2ME54UmR3bHRMT1RhSDdDVWlNUlh2d1lvcmwwUTcxMmlFamNXQitmSy9NcldWdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlYnVnIjogIl40LjEuMSIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiaXN0YW5idWwtcmVwb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1yZXBvcnRzLy0vaXN0YW5idWwtcmVwb3J0cy0zLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVExnbk1rS2czaVREc1E5UGJQVGRwZkFLMkR6akY5bXFVRzdSTWdjUWw4b0ZqYWQ4b2I0bGFHeHY1WFY1VTlNQWZ4OEQ2dFNKaVV5dUF3ekxpY2F4bGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJodG1sLWVzY2FwZXIiOiAiXjIuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1yZXBvcnQiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImpha2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC44LjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pha2UvLS9qYWtlLTEwLjguNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWkRpM2FQK2ZHL0xjaHlCelVNODA0VmpkZG53ZlNmc2RlWWt3dDhOY2JLUnZvNHJGa2poczQ1NmlMRm4zazJaVVd2TmU0aTQ4V0FDRGJ6YThmaHEyK3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhc3luYyI6ICJeMy4yLjMiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4yIiwKLSAgICAgICAgImZpbGVsaXN0IjogIl4xLjAuNCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QvLS9qZXN0LTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOGVRZzJtcUZiYVA3Q3dmc1RwQ3hRK3NIencxV3VOV0w1VVV2am5XUDRoeDJyaUd6OWZQU3pZT2FVNXE4L0dxV24xVGZnWklWVHFZSnlnYkdiV0FBTmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb3JlIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJpbXBvcnQtbG9jYWwiOiAiXjMuMC4yIiwKLSAgICAgICAgImplc3QtY2xpIjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtY2hhbmdlZC1maWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jaGFuZ2VkLWZpbGVzLy0vamVzdC1jaGFuZ2VkLWZpbGVzLTI5LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSUZHMzRJVU1VYU5CSXhqUVhGL2l1N2c2RWNkTXJHUlJ4YVVTdzkySS8yZzJZQzZ2Q2RUbHRsNG5IdnQ3Q2k1blNKd1hJa0N1OEthMURLRitYN1oxQWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJleGVjYSI6ICJeNS4wLjAiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbGltaXQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0zLjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRZT2FuTTN3R3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1ZoN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJ5b2N0by1xdWV1ZSI6ICJeMC4xLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1jaXJjdXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtY2lyY3VzLy0vamVzdC1jaXJjdXMtMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HOW1OK0tPWUlVZTJzQjlrcEprTzlCazE4SjRkVERBck5GUHdvWjdXS0hLZWw1NWVLSVMvdTJiTHRoeGdvandsZjlOTENWUWZnek0vV3NPVnZvQzZGdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvZXhwZWN0IjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvIjogIl40LjYuMCIsCi0gICAgICAgICJkZWRlbnQiOiAiXjEuMC4wIiwKLSAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4wLjAiLAotICAgICAgICAiamVzdC1lYWNoIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInB1cmUtcmFuZCI6ICJeNi4wLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwLWxpbWl0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UWU9hbk0zd0d3TkdzWk4yY1ZUWVBBcnc0NTR4blhqNXFtV0YxYkVvQWM0K2NVL29sN0dWaDdvZGV2anAxRk5IZHVIYzNLWk1jRmR1eFU1WGM2dUpSUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieW9jdG8tcXVldWUiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtY2xpIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNsaS8tL2plc3QtY2xpLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFQ2TzI0N3Y2ZENFWDJVR0hHeWZsTXB4aG5yTDBETnFQMmZSVEtZbTNuSkpwQ1RmWFgzR0NNUVBHRmpYRG9qMGk1L0JscDNqcmlLWEZnZGZtYllCNlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb3JlIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJleGl0IjogIl4wLjEuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiaW1wb3J0LWxvY2FsIjogIl4zLjAuMiIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJwcm9tcHRzIjogIl4yLjAuMSIsCi0gICAgICAgICJ5YXJncyI6ICJeMTcuMy4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC11dGlsIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC12YWxpZGF0ZS8tL2plc3QtdmFsaWRhdGUtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkd6MHlNTjVmVUZSUmJwSkRQd3hNcGdTWFcxTERLUk9IZkJvcEF2RGNtRDZzK0IvczhXSnJ3aSs0YmZINFNkSW5CQTVDM1AzQkkxOWRCdEt6eDFBcmc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgImNhbWVsY2FzZSI6ICJeNi4yLjAiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjkuNC4zIiwKLSAgICAgICAgICAgICJsZXZlbiI6ICJeMy4xLjAiLAotICAgICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LWNvbmZpZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jb25maWcvLS9qZXN0LWNvbmZpZy0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZ4d0ZPQzhna2lKYnVvZEc5Q1B0TVJqQlVOWkVIeHdmUVhtSXVkU1R6Rld4YWNpM1F1YjFkZFRSYkZOUWxEL3pVZWFpZkxuZGgvZURjY0ZYNHdDTVF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTEuNiIsCi0gICAgICAgICJAamVzdC90ZXN0LXNlcXVlbmNlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiYmFiZWwtamVzdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICJkZWVwbWVyZ2UiOiAiXjQuMi4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWNpcmN1cyI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bm5lciI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJwYXJzZS1qc29uIjogIl41LjIuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWpzb24tY29tbWVudHMiOiAiXjMuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHJhbnNmb3JtLy0vdHJhbnNmb3JtLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpxQ3FFSVNyNThDZTNVK2J1TkZKWVVrdExKWk9nZ2Z5dlIrYlpNYWlWMWU4QjFTSXZKYndaTXJZejNneC9LQVBuOUVYbU9tTit1QjA4eUxDaldrUVFnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTgiLAotICAgICAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl40LjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiYmFiZWwtamVzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1qZXN0Ly0vYmFiZWwtamVzdC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CWUN6SW1Mb3M2SjNCSC8rSHZVQ0hHMWRUZjJNem1BQjRqYVZ4SFYrMjlSWkxqUjI5WHVZVG1zZjJzZER3a3JiK0ZjemtHbzNrT2hFN2dhNnNJMFA0QT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4xLjE0IiwKLSAgICAgICAgICAgICJiYWJlbC1wbHVnaW4taXN0YW5idWwiOiAiXjYuMS4xIiwKLSAgICAgICAgICAgICJiYWJlbC1wcmVzZXQtamVzdCI6ICJeMjkuNS4wIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0Ly0vYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QtMjkuNS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItelN1dXVBbFRNVDRtekxqMm5QblVtNmZzRTYyNzB2ZE9mbnBiSitSbXJ1VTc1VWhMRnZMME4yTmdJN3hwZVM3TmFCNmhHcW1kNXBWcEdURFl2aTRRM3c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4zLjMiLAotICAgICAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjMiLAotICAgICAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4xLjE0IiwKLSAgICAgICAgICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogIl43LjAuNiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJiYWJlbC1wcmVzZXQtamVzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS41LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtamVzdC8tL2JhYmVsLXByZXNldC1qZXN0LTI5LjUuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpPTWxveE9xZGlCU3hNQXpqUmFIMDIzL3Z2Y2FTYWVjNDl6dmcrMkxtTnNrdEM3ZWkzOUxUSkd3MDJKKzl1VXRUWlVxNnhiTHlKNGR4ZTlzU21JdUFnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJiYWJlbC1wbHVnaW4tamVzdC1ob2lzdCI6ICJeMjkuNS4wIiwKLSAgICAgICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzUxWGxlVERBQXlzdlU4clQ2QW5TMVpKK1dIVk5xaGoxazZuVHZOMlBZUCtIalUza3FsYUtRMUxudzNOWVczYm0ycjh2cTgyWDBaMW5EREhaTXpIVkE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImFueW1hdGNoIjogIl4zLjAuMyIsCi0gICAgICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJmc2V2ZW50cyI6ICJeMi4zLjIiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAid2Fsa2VyIjogIl4xLjAuOCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZWdleC11dGlsLy0vamVzdC1yZWdleC11dGlsLTI5LjQuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLy0vamVzdC1yZXNvbHZlLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUcvaVFVdlpXSTVlM1NNRnNzYzR1ZzRkSDBhWmlacHNEcTlvMVB0WFRWMTIxMFp0eWIyK3crWmdRa0IzaU9pQzVTbUFFekpCT0hXejZIdnJkK1FuTlB3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAiamVzdC1wbnAtcmVzb2x2ZXIiOiAiXjEuMi4yIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJyZXNvbHZlIjogIl4xLjIwLjAiLAotICAgICAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXZhbGlkYXRlLy0vamVzdC12YWxpZGF0ZS0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12R3oweU1ONWZVRlJSYnBKRFB3eE1wZ1NYVzFMREtST0hmQm9wQXZEY21ENnMrQi9zOFdKcndpKzRiZkg0U2RJbkJBNUMzUDNCSTE5ZEJ0S3p4MUFyZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiY2FtZWxjYXNlIjogIl42LjIuMCIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImxldmVuIjogIl4zLjEuMCIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3Qtd29ya2VyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDNjY0JPYWJUZGtuZzhJL09SQ2tBRHo0ZVNNS2VqVFl2MXZCL1o4M1VpdWJxaEMxb1E1TGk2ZFdDeXFPSXZTaWZHalVCeHV2eHZsbTZLR0syRHR1QVE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS5leHBvcnRzLy0vcmVzb2x2ZS5leHBvcnRzLTIuMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDJVVzZOdzNuL2FNZ0RWeSswclNxZ0hsdjM5V1pBbFpyWENkbmJ5RWlLbTE3RFNxSFg0TW1RTWFTVDNGYmVXUjVGVHVSY1V3WUF6aVphamppMFk3bWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci04LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAid3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTQuMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0t4YXVVZEJtU2RXbm1wYUdGZytwcE5qS0Y4dU5Mcnk4THl6amF1UURPVk9OZkZMTktyS3ZRT3haL1Z1VEljUy9nZ2UvWU5haGY1UklJUVdUU2FybGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdCtTVDdDQjlHWDVGMnhLd2h3Q2YwVEFSMTd1TkRpYVBUWm5WeW1QOWx3MGxzc2E5dkcrQUZ5RFpvZUlIU3RVM1dvd0ZGd1Qra3krZXIwV1ZsMnlHaEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJkaWZmLXNlcXVlbmNlcyI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZ2V0LXR5cGUvLS9qZXN0LWdldC10eXBlLTI5LjQuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo1WGV6NG5SUk1qazhlbW5UcFdybGt5YjlwZlJRUWFuRHJ2V0hoc1IxK1ZVZmJ3eGkzMGVWY1pGbGNkR0luUmliVTRHNUx3SFhwSTdJUkhVMENZK2dnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LWRvY2Jsb2NrIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWRvY2Jsb2NrLy0vamVzdC1kb2NibG9jay0yOS40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZ6ZFRmdFRoY3plU0Q5blozZnpBLzRLa0h0bm1sbGF3V3JYTzY5dnRJK0w5V2pFSXVYV3M0QW15TUU3bE41aFU3ZEIwc0hodVBmY0tvZlJzVWIvMkZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGV0ZWN0LW5ld2xpbmUiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZWFjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lYWNoLy0vamVzdC1lYWNoLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXNyc3FBMElhOTljSXBBQkJjM2l6UzFaWW9ZZmhJeTBOTldxUFNFMFlYYlFqd2NoeXQ2QjFIRDJraHp5UGUxV2lKQTdoYnhYeTc3Wm9VUXhuOFVsU3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC11dGlsIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZW52aXJvbm1lbnQtanNkb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZW52aXJvbm1lbnQtanNkb20vLS9qZXN0LWVudmlyb25tZW50LWpzZG9tLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVEZCdmtUQzFIbm5ucmthL2ZVYjU2YXRmRHRKOVZNWjk0SmtqVGJnZ2wxUEVwd3JZdFVCS01lekIzaW5MbVdxUXNYWUxjTXdOb0RRd29CVEF2RmZzZnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImpzZG9tIjogIl4xNi42LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Vudmlyb25tZW50Ly0vZW52aXJvbm1lbnQtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItL1dRamhQSmUzL2doYW9sLzRCcTQ4MEpLWFYvUmZ3OG5RZE43ZjQxZk04VkRITGN4S1hvdTZReVhBaDNFRnI5L2JWRzN4NzR6MU5XRGtQODdFaVk4Z0E9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2FQb3dvb2x3YTA3azcvb00zYUFTbmVOZUJHQ21HUXNjM3VnTjR1NnM0Qy8rczVNNjRNRm8vK2RqVGRpd2NiUWxSZkZFbEd1RFhXemFXajZRZ0tPYlE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogIl44LjAuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBzaW5vbmpzL2NvbW1vbnMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS44LjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0xLjguNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUt5K1hrQWtxUFpTbTNOTEJlVW5nNzdFQlFsM2NtZUpoSVRhR0hkWUg4a2pWQithdW4zUzRYQlJ0aTJ6dDE3bXR0MG1JVURpTnhZZW9KbTZkclZ2QkpRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJ0eXBlLWRldGVjdCI6ICI0LjAuOCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtOC4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQVBKVUF0Z2VJTmhoL1RBbFVJRDRRVHM1M05qbTd4emRkYVZsRXMvU1h3Z3RpRDF0VzIyekFCL1cxd2RxZnJwbWlrZ2FXUTlGdzZXcytoc2lSbTVWZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHNpbm9uanMvY29tbW9ucyI6ICJeMS43LjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tZXNzYWdlLXV0aWwvLS9qZXN0LW1lc3NhZ2UtdXRpbC0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yTXlGZTEram55QUFmK05Id1RjbER6MGVBYUxrVkRkS1ZISEJGV3NCV0hubmg1WWVKTU5XV3N2N0FiRllYZkszb1Rxdkw3VlRXa2hOTHUxalgyNEQrZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LW1vY2siOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tb2NrLy0vamVzdC1tb2NrLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUs0aktiWTFkNEVOaGJyRzJ6dVBXYVFCdkRseStpWjJ5QVcrVDFmQVRONzhoYzBzSW53bjd3WkI4WHRsTm52SHVnNVJNd1Y4OTdYbTRMcW1QTTRlMk9nPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWUdkRmVaM1Q5YSsvNjEyYzVtVFFJbGx2V2tkZFBiWWNOMnY5NVpIMjRvV01iR0E0R0dTMlhkSUY5MlFNaFVodnJqanVRV1lnVUdXMnphd095SDYzTVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yS1k5NWtzWVNhSzdETUJXUW42ZFF6M2txQWYzQkI2NHkydWRlRytodjRLZlNPYjlxd2NZUXN0VEpjMUtDYnNpeCt3TFpXWllOOHQ3bndYM0dPQkxSdz09IgotICAgIH0sCi0gICAgImplc3QtaGFzdGUtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWhhc3RlLW1hcC8tL2plc3QtaGFzdGUtbWFwLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0dna1o0Rnc0TkZiTVNEU3Bad1hlQmlJYngrdC80Nm5KMlFpdGtPanZ3UFl5Wm1xdHR1MlREU2ltTUhQMUVrUE9pNHhVWkFOMWRvRTVWZDI1SDRKbmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4wLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1zZXJpYWxpemVyIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICJ3YWxrZXIiOiAiXjEuMC43IgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtamFzbWluZTIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtamFzbWluZTIvLS9qZXN0LWphc21pbmUyLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItanRxN1ZWeUc4U3FBb3JEcEFwd2lKSkltZDBWMnd2MXh6ZGhlR0hSR3l1VDdnWm02Z0c0N1FFc2tPbHpzTjFQRy82V05hQ281cG13TUhEZjNBa0cycFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY28iOiAiXjQuNi4wIiwKLSAgICAgICAgImV4cGVjdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4wLjAiLAotICAgICAgICAiamVzdC1lYWNoIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yNy41LjEiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgInRocm9hdCI6ICJeNi4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvY29uc29sZS8tL2NvbnNvbGUtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1ovdE5wUzNOWG4wbWxYWFhQTnVEWm5iNGMwb1oyMHI0SzVlZW1NMmszMFpDM0cwVDAyblhVdnloZjVZZGJYV0hQRUpMYzlxR0x4RVoyMTZNZEwrWmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9lbnZpcm9ubWVudC8tL2Vudmlyb25tZW50LTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9XUWpoUEplMy9naGFvbC80QnE0ODBKS1hWL1JmdzhuUWRON2Y0MWZNOFZESExjeEtYb3U2UXlYQWgzRUZyOS9iVkczeDc0ejFOV0RrUDg3RWlZOGdBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJqZXN0LW1vY2siOiAiXjI3LjUuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9mYWtlLXRpbWVycy8tL2Zha2UtdGltZXJzLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9hUG93b29sd2EwN2s3L29NM2FBU25lTmVCR0NtR1FzYzN1Z040dTZzNEMvK3M1TTY0TUZvLytkalRkaXdjYlFsUmZGRWxHdURYV3phV2o2UWdLT2JRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6ICJeOC4wLjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC9nbG9iYWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2dsb2JhbHMvLS9nbG9iYWxzLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpFSk5CNDFPQlFRZ0d6Z3lJbkF2MFVVZkREajN1cG1IeWRqaWVTeEZ2VFJ1WkVscng3dFhnL3VWUTVoWVZFd2lYczMrYU1zQWVFYzlYN3hpU0tDbTRRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJleHBlY3QiOiAiXjI3LjUuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC9zb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXk5TklIVVlGM1BKUmxIazk4TmRDL04xZ2w4OEJMMDhhUVFndTRrNFpvcFFrQ3c5dDljVjhtdGwzVFY4Yi9ZQ0I4WGFWVEZybVVUQUp2anNudERpcmVnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjYWxsc2l0ZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3Rlc3QtcmVzdWx0Ly0vdGVzdC1yZXN1bHQtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItRVczNWwyUllGVWNVUXhGSno1Q3Y1TVRPeGxKSVFzNEk3Z3h6aTJ6VlU3UEpoT3dmWXExTWRDNW5oU21ZalgxZ21NbUxQdkIzc0lhQytCa2NIUkJmYWc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBzaW5vbmpzL2NvbW1vbnMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS44LjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0xLjguNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUt5K1hrQWtxUFpTbTNOTEJlVW5nNzdFQlFsM2NtZUpoSVRhR0hkWUg4a2pWQithdW4zUzRYQlJ0aTJ6dDE3bXR0MG1JVURpTnhZZW9KbTZkclZ2QkpRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJ0eXBlLWRldGVjdCI6ICI0LjAuOCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtOC4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQVBKVUF0Z2VJTmhoL1RBbFVJRDRRVHM1M05qbTd4emRkYVZsRXMvU1h3Z3RpRDF0VzIyekFCL1cxd2RxZnJwbWlrZ2FXUTlGdzZXcytoc2lSbTVWZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHNpbm9uanMvY29tbW9ucyI6ICJeMS43LjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiZGlmZi1zZXF1ZW5jZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi1zZXF1ZW5jZXMvLS9kaWZmLXNlcXVlbmNlcy0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rMWdDQVhBc05nTHdFTCtZOFd2bCtNNm9FRmo1YmdhemZaVUxwUzVDbmVvUFBYUmFDQ1c3ZG0rcTIxS3kyVkVFNVgrVmVSREJWZzFQY3Z2c3I0VHROUT09IgotICAgICAgICB9LAotICAgICAgICAiZXhwZWN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGVjdC8tL2V4cGVjdC0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FMXE1aFNVRzJBbVlRd1FKMDQxbnZncGtPREhRdkIrUktsQjRJWWRydTZ1SnN5RlRSeVpBUDQ2M00rMWxJTm9yd2JxQW1VZ2dpNitXd2tEOGxDUy9Edz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWRpZmYiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW0wTnZrWDU1TER0OVQ0bWN0VEVnblprM2ZtRWczTlJZdXR2TVBXTS8waVBua0ZqMndJZUY0NU8xNzE4Y01TT0ZPMXZJTmtxbXhxRDh2RTM3dVRFYnF3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImRpZmYtc2VxdWVuY2VzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZWFjaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWVhY2gvLS9qZXN0LWVhY2gtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMUZmNnArRmJoVC9iWFFuRW91WXkwMGJrTlNZN09VcGZJY21kbDh2WjMxQTFVVWF1ck9MUEE4YThCYkpPRjJSRFVFbHdKaG1lYVY3TG5hZ0krNVV3TlE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1hdGNoZXItdXRpbHMvLS9qZXN0LW1hdGNoZXItdXRpbHMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItejJ1VHgvVDZMQmFDb05XTkZXd0NoTEJLWXhUTWNHQlJqQXQrMlNiUDkyOS9GZmxiOWFhNUxHbWE2NTRSejh6OUhMeHNyVWFZenhFOVQvRUZJTC9QQXc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiamVzdC1kaWZmIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWVzc2FnZS11dGlsLy0vamVzdC1tZXNzYWdlLXV0aWwtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItck15RmUxK2pueUFBZitOSHdUY2xEejBlQWFMa1ZEZEtWSEhCRldzQldIbm5oNVllSk1OV1dzdjdBYkZZWGZLM29UcXZMN1ZUV2toTkx1MWpYMjREK2c9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjEyLjEzIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvc3RhY2stdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJzdGFjay11dGlscyI6ICJeMi4wLjMiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1tb2NrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbW9jay8tL2plc3QtbW9jay0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LNGpLYlkxZDRFTmhickcyenVQV2FRQnZEbHkraVoyeUFXK1QxZkFUTjc4aGMwc0lud243d1pCOFh0bE5udkh1ZzVSTXdWODk3WG00THFtUE00ZTJPZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1ydW50aW1lLy0vamVzdC1ydW50aW1lLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW83Z3h3M0dmK0gySUd0OGZ2MFJpeUUxK3I4M0ZKQlJydW9BK0ZYcmxIdzZ4RXlCc1U4dWdBNklQZlRkVnlBMHc4SENscGJLK0RHSnhINTlVck5NeDhBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC9nbG9iYWxzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2pzLW1vZHVsZS1sZXhlciI6ICJeMS4wLjAiLAotICAgICAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJleGVjYSI6ICJeNS4wLjAiLAotICAgICAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAic3RyaXAtYm9tIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc25hcHNob3QvLS9qZXN0LXNuYXBzaG90LTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlZeWtYSTVhMEkzMXhYNjdtZ2VMdzFEWjBiSkIrZ3BxNUlwU3VDQW95RGkwK0JoZ1UvUklyTCtSVHpEbWtOVGNodkRGV0tQOGxwK3cvNDJaM3VzNXNBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy43LjIiLAotICAgICAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuNy4yIiwKLSAgICAgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0IjogIl43LjcuMiIsCi0gICAgICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjcuMiIsCi0gICAgICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIsCi0gICAgICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiAiXjcuMC40IiwKLSAgICAgICAgICAgICJAdHlwZXMvcHJldHRpZXIiOiAiXjIuMS41IiwKLSAgICAgICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZXhwZWN0IjogIl4yNy41LjEiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1kaWZmIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNlbXZlciI6ICJeNy4zLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibHJ1LWNhY2hlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjUuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFiQ1NFU1Y2UHYraTIxSHZweHAzRHgrcFNEOGxJUHQ4dVZqUnJ4QVV0L25ic3dZYyt0SzZZMmJ0aVVMamQ0K2ZucTE1UFgrbnFRREM3T2Z0N1drd2NBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJ5YWxsaXN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtNC4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zd2RHaWRaeXE1UEIwODRYTEVTNVRwT1NSQTN3alhBbElXTWh1bTJrUmN2LzQxU24yZW1RMGR5Y1FXNHVaWExlandLdmc2RXN2YmRsVkwrRllFY3Q3QT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1sZWFrLWRldGVjdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWxlYWstZGV0ZWN0b3IvLS9qZXN0LWxlYWstZGV0ZWN0b3ItMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hTnFZaGZwNXVZRU8zdGRXTWIyYmZXdjZmMGI0STBMT3hWUnBuUkxBZXF1ZTJ1cU9WVk1MaDZraG5UY0UycUo1d0FLb3AwSGNyZU0xYnRveXNENmJQUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjQuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZ2V0LXR5cGUvLS9qZXN0LWdldC10eXBlLTI5LjQuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo1WGV6NG5SUk1qazhlbW5UcFdybGt5YjlwZlJRUWFuRHJ2V0hoc1IxK1ZVZmJ3eGkzMGVWY1pGbGNkR0luUmliVTRHNUx3SFhwSTdJUkhVMENZK2dnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFxMG9DOGVSdmVUZzVubkJFV01YQVUycXB2NjVHbnVmMmVDUXpTanhwV0ZrUGFQQVJ3cVpaREd1TkUwelBBWmZUQ0h6SWszQThkSWp3bFFLS0xwaHlnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWF0Y2hlci11dGlscy8tL2plc3QtbWF0Y2hlci11dGlscy0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRMaUFrM2hTU29idG9tZUlBekZUZStOOGtMNnowSnRGM242STRmZzI5aUlXN3R0OTlSN1pjSUZXMzRRa1grRHVWcmYrQ1VlNnd1Vk9wbTdaS0ZKelpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1kaWZmIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjkuNC4zIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtbWVzc2FnZS11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1lc3NhZ2UtdXRpbC8tL2plc3QtbWVzc2FnZS11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdm5JR1lFam9QU3VScVY4Vzl0K1dvdzk1U0RwNktQWDJVZjdFb2VHOUc5OUoyT1ZoN09Td3BTNEI2SjBOZnBFSXBma0JOSGxCWnBBMnJibEV1RUZoWlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL3N0YWNrLXV0aWxzIjogIl4yLjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RhY2stdXRpbHMiOiAiXjIuMC4zIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1tb2NrIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1vY2svLS9qZXN0LW1vY2stMjkuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ob1N2M2xiM2J5emRLZndxQ3VUNnVUc2NhbjQ3MUdVRUNxZ05ZeWtnNm9iMHlpQXczelljN09yUG5JOVF2OFd3b2E0bEM3QVo5aHlTNEFpSXg1VTJ6Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yOS42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UEtRTk1QdVhndmRPbjIvTGc5SE5mVXZqWVZHb2x0MDRIcDAzZjVoQWs4Nzh1d09MaWtOK0p6ZUxZMEhjVmdLZ0ZsOUhzM0VJcXB1M1dYMjdYTmhudz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuOCIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC11dGlsIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZVgxcWI2TDg4bEpOQ0ZsRUFES09ranBYSlF5WlJpYXZYMUlOWjR0Um5yQlZyMkNPZDNSZ2NUTHlVaUVYTU5CbERVL2NnWXE2dGFVUzBmRXhyV1c0dz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjaS1pbmZvIjogIl4zLjIuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtcG5wLXJlc29sdmVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcG5wLXJlc29sdmVyLy0vamVzdC1wbnAtcmVzb2x2ZXItMS4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSszTnB3UUVuUm9JQnR4NGZ5aGJsUURQZ0pJMEgxSUVJa1g3U2hMVWpQR0E3VHRVVHZJMW9pS2kzU1I0b0JSMGhRaFFSODBsNFdBZTVSclhCd1dNQTh3PT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJqZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRiZktxMnppZSt4MTZva3FEWGpYbjlxbDJCMGRTY1F1K3Zjd2U0VHZGVmhrVnl1V0xxcFpyWnRYeExMV29YWWduMEU4N0k2cjZHUllIRjd3RlpCVXZnPT0iCi0gICAgfSwKLSAgICAiamVzdC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUvLS9qZXN0LXJlc29sdmUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GRkR5OC85RTZDVjgzSU1iRHBjak9odW1BUVBEeUVUblUyS1oxTzk4RHdUbno4QU9Cc1cvWHYzR3lTcjFtT1pkSXRMUit6RFo3SS9VZFRGYmdTT1ZDdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNy41LjEiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4yMC4wIiwKLSAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6ICJeMS4xLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMvLS9qZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTEdxakRXeGcyZnVRUW03eXBEeGR1THUvbTQrNExiNGdjemMxM3Y1MVZNWmJWUDV0U0JJTHFWeDhxZldjc2RQOGYwRzdhSXFCeUlBTERCMFI5M3lMK3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yOS42LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRGZ2xaYU1tV1hiR0hTUUluZlhld0lzZDFMTW45cDNaWEIvNnI0Rk9reWhYMi9pUC9zb01HOThqR3ZrL0EzSEFONzgrNVZXY0JHTzBCSkFQUmg0a2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtcnVubmVyIjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bm5lci8tL2plc3QtcnVubmVyLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1hPVC9hMEVzcFlnZk1pWUh4d0dMUENaZkMwYzM4TWl2QWxiMmxNRUFsd0hJTktlbXJ0dHUxdVNiY0diZkRWMzFzRmFQV25XSlBtYjJxWE04cHFaNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZW1pdHRlcnkiOiAiXjAuMTMuMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAiamVzdC1kb2NibG9jayI6ICJeMjkuNC4zIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1sZWFrLWRldGVjdG9yIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXdhdGNoZXIiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgInAtbGltaXQiOiAiXjMuMS4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9ydCI6ICIwLjUuMTMiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnFDcUVJU3I1OENlM1UrYnVORkpZVWt0TEpaT2dnZnl2UitiWk1haVYxZThCMVNJdkpid1pNcll6M2d4L0tBUG45RVhtT21OK3VCMDh5TENqV2tRUWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjYiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4xOCIsCi0gICAgICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjEuMSIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAicGlyYXRlcyI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAid3JpdGUtZmlsZS1hdG9taWMiOiAiXjQuMC4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjkuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdFBLUU5NUHVYZ3ZkT24yL0xnOUhOZlV2allWR29sdDA0SHAwM2Y1aEFrODc4dXdPTGlrTitKemVMWTBIY1ZnS2dGbDlIczNFSXFwdTNXWDI3WE5obnc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzIjogIl4xNy4wLjgiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTcuMC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02aTBhQzdqVjZRelFCOG5lMWpvVlowZVNGSXN0SHNDcm9ibU90Z2hNMTF5R2xIMGo0M0ZLTDJVaFdkRUxreXBzMHp1ZjdxVlRVVkNDUit0Z1NseUxMdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3lhcmdzLXBhcnNlciI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb252ZXJ0LXNvdXJjZS1tYXAvLS9jb252ZXJ0LXNvdXJjZS1tYXAtMi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yOS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNVhlejRuUlJNams4ZW1uVHBXcmxreWI5cGZSUVFhbkRydldIaHNSMStWVWZid3hpMzBlVmNaRmxjZEdJblJpYlU0RzVMd0hYcEk3SVJIVTBDWStnZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1oYXN0ZS1tYXAvLS9qZXN0LWhhc3RlLW1hcC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rNTFYbGVUREFBeXN2VThyVDZBblMxWkorV0hWTnFoajFrNm5Udk4yUFlQK0hqVTNrcWxhS1ExTG53M05ZVzNibTJyOHZxODJYMFoxbkRESFpNekhWQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMyIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiYW55bWF0Y2giOiAiXjMuMC4zIiwKLSAgICAgICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImZzZXZlbnRzIjogIl4yLjMuMiIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI5LjQuMyIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3Qtd29ya2VyIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJ3YWxrZXIiOiAiXjEuMC44IgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRGZ2xaYU1tV1hiR0hTUUluZlhld0lzZDFMTW45cDNaWEIvNnI0Rk9reWhYMi9pUC9zb01HOThqR3ZrL0EzSEFONzgrNVZXY0JHTzBCSkFQUmg0a2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUvLS9qZXN0LXJlc29sdmUtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItRy9pUVV2WldJNWUzU01Gc3NjNHVnNGRIMGFaaVpwc0RxOW8xUHRYVFYxMjEwWnR5YjIrdytaZ1FrQjNpT2lDNVNtQUV6SkJPSFd6Nkh2cmQrUW5OUHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXBucC1yZXNvbHZlciI6ICJeMS4yLjIiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yOS42LjIiLAotICAgICAgICAgICAgInJlc29sdmUiOiAiXjEuMjAuMCIsCi0gICAgICAgICAgICAicmVzb2x2ZS5leHBvcnRzIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2VYMXFiNkw4OGxKTkNGbEVBREtPa2pwWEpReVpSaWF2WDFJTlo0dFJuckJWcjJDT2QzUmdjVEx5VWlFWE1OQmxEVS9jZ1lxNnRhVVMwZkV4cldXNHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2ktaW5mbyI6ICJeMy4yLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZHejB5TU41ZlVGUlJicEpEUHd4TXBnU1hXMUxES1JPSGZCb3BBdkRjbUQ2cytCL3M4V0pyd2krNGJmSDRTZEluQkE1QzNQM0JJMTlkQnRLengxQXJnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMi4wIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI5LjQuMyIsCi0gICAgICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOS42LjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC13b3JrZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl44LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwLWxpbWl0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UWU9hbk0zd0d3TkdzWk4yY1ZUWVBBcnc0NTR4blhqNXFtV0YxYkVvQWM0K2NVL29sN0dWaDdvZGV2anAxRk5IZHVIYzNLWk1jRmR1eFU1WGM2dUpSUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieW9jdG8tcXVldWUiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXEwb0M4ZVJ2ZVRnNW5uQkVXTVhBVTJxcHY2NUdudWYyZUNRelNqeHBXRmtQYVBBUndxWlpER3VORTB6UEFaZlRDSHpJazNBOGRJandsUUtLTHBoeWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI5LjYuMCIsCi0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgICAgICJyZWFjdC1pcyI6ICJeMTguMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUuZXhwb3J0cy8tL3Jlc29sdmUuZXhwb3J0cy0yLjAuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVgyVVc2Tnczbi9hTWdEVnkrMHJTcWdIbHYzOVdaQWxaclhDZG5ieUVpS20xN0RTcUhYNE1tUU1hU1QzRmJlV1I1RlR1UmNVd1lBemlaYWpqaTBZN21nPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNS4xMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjUuMTMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TSFNLRkhhZGpWQTVvUjRQUHFodEFWZGNCV3dSWVZkNmc2Y0FYbkliUmlJd2MyRWhQclR1S1VCZFNMdmxFS3lJUDNHQ2Y4OWZsdHZjWmlQOU1NRkExdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYnVmZmVyLWZyb20iOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JpdGUtZmlsZS1hdG9taWMvLS93cml0ZS1maWxlLWF0b21pYy00LjAuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdLeGF1VWRCbVNkV25tcGFHRmcrcHBOaktGOHVOTHJ5OEx5emphdVFET1ZPTmZGTE5Lckt2UU94Wi9WdVRJY1MvZ2dlL1lOYWhmNVJJSVFXVFNhcmxnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpbXVybXVyaGFzaCI6ICJeMC4xLjQiLAotICAgICAgICAgICAgInNpZ25hbC1leGl0IjogIl4zLjAuNyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcnVudGltZS8tL2plc3QtcnVudGltZS0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJYOWRxSzc2OEt1ZkdKeUllTG1JelRvRG1zTjBtN0llazhRTnhSU0kvMitpUEZZSEYwalR3bE8zZnRuN2dkS2Q5OEcvVlF3OVhKQ2s3N3JiVEdabkpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L2dsb2JhbHMiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC9zb3VyY2UtbWFwIjogIl4yOS42LjAiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI5LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNqcy1tb2R1bGUtbGV4ZXIiOiAiXjEuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1zbmFwc2hvdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1ib20iOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHJhbnNmb3JtLy0vdHJhbnNmb3JtLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpxQ3FFSVNyNThDZTNVK2J1TkZKWVVrdExKWk9nZ2Z5dlIrYlpNYWlWMWU4QjFTSXZKYndaTXJZejNneC9LQVBuOUVYbU9tTit1QjA4eUxDaldrUVFnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTgiLAotICAgICAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl40LjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzUxWGxlVERBQXlzdlU4clQ2QW5TMVpKK1dIVk5xaGoxazZuVHZOMlBZUCtIalUza3FsYUtRMUxudzNOWVczYm0ycjh2cTgyWDBaMW5EREhaTXpIVkE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImFueW1hdGNoIjogIl4zLjAuMyIsCi0gICAgICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJmc2V2ZW50cyI6ICJeMi4zLjIiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAid2Fsa2VyIjogIl4xLjAuOCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZWdleC11dGlsLy0vamVzdC1yZWdleC11dGlsLTI5LjQuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLy0vamVzdC1yZXNvbHZlLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUcvaVFVdlpXSTVlM1NNRnNzYzR1ZzRkSDBhWmlacHNEcTlvMVB0WFRWMTIxMFp0eWIyK3crWmdRa0IzaU9pQzVTbUFFekpCT0hXejZIdnJkK1FuTlB3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAiamVzdC1wbnAtcmVzb2x2ZXIiOiAiXjEuMi4yIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJyZXNvbHZlIjogIl4xLjIwLjAiLAotICAgICAgICAgICAgInJlc29sdmUuZXhwb3J0cyI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXZhbGlkYXRlLy0vamVzdC12YWxpZGF0ZS0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12R3oweU1ONWZVRlJSYnBKRFB3eE1wZ1NYVzFMREtST0hmQm9wQXZEY21ENnMrQi9zOFdKcndpKzRiZkg0U2RJbkJBNUMzUDNCSTE5ZEJ0S3p4MUFyZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICAgICAiY2FtZWxjYXNlIjogIl42LjIuMCIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImxldmVuIjogIl4zLjEuMCIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjkuNi4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3Qtd29ya2VyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDNjY0JPYWJUZGtuZzhJL09SQ2tBRHo0ZVNNS2VqVFl2MXZCL1o4M1VpdWJxaEMxb1E1TGk2ZFdDeXFPSXZTaWZHalVCeHV2eHZsbTZLR0syRHR1QVE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicmVzb2x2ZS5leHBvcnRzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS5leHBvcnRzLy0vcmVzb2x2ZS5leHBvcnRzLTIuMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWDJVVzZOdzNuL2FNZ0RWeSswclNxZ0hsdjM5V1pBbFpyWENkbmJ5RWlLbTE3RFNxSFg0TW1RTWFTVDNGYmVXUjVGVHVSY1V3WUF6aVphamppMFk3bWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci04LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAid3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTQuMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0t4YXVVZEJtU2RXbm1wYUdGZytwcE5qS0Y4dU5Mcnk4THl6amF1UURPVk9OZkZMTktyS3ZRT3haL1Z1VEljUy9nZ2UvWU5haGY1UklJUVdUU2FybGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC43IgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3Qtc2VyaWFsaXplciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1zZXJpYWxpemVyLy0vamVzdC1zZXJpYWxpemVyLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItalpDeW82aUl4TzFhcVV4cHVCbHdURE1rek9BSlM0YTNlWXozWXpneHhWUUZ3TGVTQTdKZnE1Y2JxQ1krSkx2VERyV2lyZ3VzSS8wS3d4S01ncmRmN3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXNuYXBzaG90IjogewotICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXNuYXBzaG90Ly0vamVzdC1zbmFwc2hvdC0yOS42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFPZGpxdnFtUmRHTnZXWHIvWVpIdXloaDVEZWFMcDFwL0Y4VGh0L01yTXc0S3IxVXUvajRsUkcraUtsMURBcVVKRFd4dFFCTWs0MUxuZi9KRVRZQlJBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTEuNiIsCi0gICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjcuMiIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXR5cGVzY3JpcHQiOiAiXjcuNy4yIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjMiLAotICAgICAgICAiQGplc3QvZXhwZWN0LXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yOS42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjYuMSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImV4cGVjdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yOS40LjMiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yOS42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI5LjYuMiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuNS4zIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHJhbnNmb3JtLy0vdHJhbnNmb3JtLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpxQ3FFSVNyNThDZTNVK2J1TkZKWVVrdExKWk9nZ2Z5dlIrYlpNYWlWMWU4QjFTSXZKYndaTXJZejNneC9LQVBuOUVYbU9tTit1QjA4eUxDaldrUVFnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS42IiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTgiLAotICAgICAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4xLjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMS4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yOS42LjIiLAotICAgICAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjkuNC4zIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI5LjYuMiIsCi0gICAgICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl40LjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjkuNC4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSjVYZXo0blJSTWprOGVtblRwV3Jsa3liOXBmUlFRYW5EcnZXSGhzUjErVlVmYnd4aTMwZVZjWkZsY2RHSW5SaWJVNEc1THdIWHBJN0lSSFUwQ1krZ2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjkuNi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzUxWGxlVERBQXlzdlU4clQ2QW5TMVpKK1dIVk5xaGoxazZuVHZOMlBZUCtIalUza3FsYUtRMUxudzNOWVczYm0ycjh2cTgyWDBaMW5EREhaTXpIVkE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ncmFjZWZ1bC1mcyI6ICJeNC4xLjMiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImFueW1hdGNoIjogIl4zLjAuMyIsCi0gICAgICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJmc2V2ZW50cyI6ICJeMi4zLjIiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOS40LjMiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjkuNi4yIiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAid2Fsa2VyIjogIl4xLjAuOCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNC4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZWdleC11dGlsLy0vamVzdC1yZWdleC11dGlsLTI5LjQuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU80RmdsWmFNbVdYYkdIU1FJbmZYZXdJc2QxTE1uOXAzWlhCLzZyNEZPa3loWDIvaVAvc29NRzk4akd2ay9BM0hBTjc4KzVWV2NCR08wQkpBUFJoNGtnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC13b3JrZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sM2NjQk9hYlRka25nOEkvT1JDa0FEejRlU01LZWpUWXYxdkIvWjgzVWl1YnFoQzFvUTVMaTZkV0N5cU9JdlNpZkdqVUJ4dXZ4dmxtNktHSzJEdHVBUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOS42LjIiLAotICAgICAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl44LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJscnUtY2FjaGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yOS42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xcTBvQzhlUnZlVGc1bm5CRVdNWEFVMnFwdjY1R251ZjJlQ1F6U2p4cFdGa1BhUEFSd3FaWkRHdU5FMHpQQVpmVENIeklrM0E4ZElqd2xRS0tMcGh5Zz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3Qvc2NoZW1hcyI6ICJeMjkuNi4wIiwKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAgICAgInJlYWN0LWlzIjogIl4xOC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuNS40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS40LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWJDU0VTVjZQditpMjFIdnB4cDNEeCtwU0Q4bElQdDh1VmpScnhBVXQvbmJzd1ljK3RLNlkyYnRpVUxqZDQrZm5xMTVQWCtucVFEQzdPZnQ3V2t3Y0E9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXBVRU4yT29kdFV6eHZLUWw3MmNVRjdSUTVFaUhzR3ZTc1ZHMGlhOWM1UmJXR0wyQ0k0QzdFcFBTOFVUQklwbG5selppTnVWNTZ3K0Z1Tnh5M3R5MlE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyaXRlLWZpbGUtYXRvbWljLy0vd3JpdGUtZmlsZS1hdG9taWMtNC4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03S3hhdVVkQm1TZFdubXBhR0ZnK3BwTmpLRjh1TkxyeThMeXpqYXVRRE9WT05mRkxOS3JLdlFPeFovVnVUSWNTL2dnZS9ZTmFoZjVSSUlRV1RTYXJsZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKLSAgICAgICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjciCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAieWFsbGlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3Yyby84ak52WDFNUTBLR3R3NDgwRS93NGZCQ0RPbkg2KzZEbWVLaTZMWlVJbEtBNWt3WTBZTmRsemFXVGlWZ3hxQXFpazExUXl4RE9LazU0M2FLWHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtdmFsaWRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdGhrTmxpMExZVG1PSTF0REIzRkkxUzFSVHAvQnF5ZDlwVGFySndMODdPSUJGdXFFYjVBcHY1RWFBcEV1ZFlnNGc4NmUzQ1Q2a00wUm93a2h0RW5DQlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImNhbWVsY2FzZSI6ICJeNi4yLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJsZXZlbiI6ICJeMy4xLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3Qtd2F0Y2hlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI5LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13YXRjaGVyLy0vamVzdC13YXRjaGVyLTI5LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1ppdGxxa01raGtlZmpmTi9wM1NKanJEYXhQZmxxeEVBdjMvaWsxME9pclpxSkdZSDVyUGlJc2dWY2ZvZjBUZHFnM3NoUUdkRUl4REJ4K0I0dHVMekE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjkuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOS42LjEiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJlbWl0dGVyeSI6ICJeMC4xMy4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuNi4yIiwKLSAgICAgICAgInN0cmluZy1sZW5ndGgiOiAiXjQuMC4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyOS42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90eXBlcy8tL3R5cGVzLTI5LjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRQS1FOTVB1WGd2ZE9uMi9MZzlITmZVdmpZVkdvbHQwNEhwMDNmNWhBazg3OHV3T0xpa04rSnplTFkwSGNWZ0tnRmw5SHMzRUlxcHUzV1gyN1hOaG53PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9zY2hlbWFzIjogIl4yOS42LjAiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNy4wLjI0LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmkwYUM3alY2UXpRQjhuZTFqb1ZaMGVTRklzdEhzQ3JvYm1PdGdoTTExeUdsSDBqNDNGS0wyVWhXZEVMa3lwczB6dWY3cVZUVVZDQ1IrdGdTbHlMTHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICAgICAicGVlciI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjkuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI5LjYuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNlWDFxYjZMODhsSk5DRmxFQURLT2tqcFhKUXlaUmlhdlgxSU5aNHRSbnJCVnIyQ09kM1JnY1RMeVVpRVhNTkJsRFUvY2dZcTZ0YVVTMGZFeHJXVzR3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjkuNi4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03dnVoODVWNWNkRG9mUHl4bjU4bnJQakJrdFpvMHU5eDFnOFd0alFvbCtqWkRhRStmaE4rY0l2VGoxMUduZEJuTW55ZnJVT0cxc1pReENkaktoK0RLZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeOC4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci04LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiaml0aSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTguMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaml0aS8tL2ppdGktMS4xOC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RQWRPcHRuYTJOWWlTU3B2ME8vQndvSEJTbXo0WWhwekpIeWkrZm5NUlRYRmpwN0I4aS9ZRzVaOElmdXN4QjF1ZmpjRDJTcmUxRjNSK25YM2Z2eTdnZz09IgotICAgIH0sCi0gICAgImpzLXRva2VucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkSlVmbGNFM2NVektpTXFRZ3NDdTA2RlB1OVVkSUpPMGJlWWJQaEhONGs2YXBnSnRpZmNvQ3RUOWJjeE9wWUJ0cEQya0NNNlNiemc0Q2F1c1cvUEtRPT0iCi0gICAgfSwKLSAgICAianMteWFtbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMTQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMteWFtbC8tL2pzLXlhbWwtMy4xNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1va01IN09YWEo3WXJOOU9rMy9TWHJudTRpWDl5T2srMjVucVg0aW1TMm5wdXZUWURtby9RRVpvcXdaa1lhSURrM2pWdkJPVE9JRWdFaGFMT3luQlM5Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFyZ3BhcnNlIjogIl4xLjAuNyIsCi0gICAgICAgICJlc3ByaW1hIjogIl40LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJqc2RvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE2LjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNkb20vLS9qc2RvbS0xNi43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXU5U21jMkcxVVNTdE0rcy94MXJ1NVN4cmw2bVBZQ2JCeUcxVS9oVW1xYVZzbTR0Yk55UzdDaWNPU1J5dUdRWVpoVHUwaDg0cWtaWlEvSStkeml6U1Z3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWJhYiI6ICJeMi4wLjUiLAotICAgICAgICAiYWNvcm4iOiAiXjguMi40IiwKLSAgICAgICAgImFjb3JuLWdsb2JhbHMiOiAiXjYuMC4wIiwKLSAgICAgICAgImNzc29tIjogIl4wLjQuNCIsCi0gICAgICAgICJjc3NzdHlsZSI6ICJeMi4zLjAiLAotICAgICAgICAiZGF0YS11cmxzIjogIl4yLjAuMCIsCi0gICAgICAgICJkZWNpbWFsLmpzIjogIl4xMC4yLjEiLAotICAgICAgICAiZG9tZXhjZXB0aW9uIjogIl4yLjAuMSIsCi0gICAgICAgICJlc2NvZGVnZW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImZvcm0tZGF0YSI6ICJeMy4wLjAiLAotICAgICAgICAiaHRtbC1lbmNvZGluZy1zbmlmZmVyIjogIl4yLjAuMSIsCi0gICAgICAgICJodHRwLXByb3h5LWFnZW50IjogIl40LjAuMSIsCi0gICAgICAgICJodHRwcy1wcm94eS1hZ2VudCI6ICJeNS4wLjAiLAotICAgICAgICAiaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUiOiAiXjEuMC4xIiwKLSAgICAgICAgIm53c2FwaSI6ICJeMi4yLjAiLAotICAgICAgICAicGFyc2U1IjogIjYuMC4xIiwKLSAgICAgICAgInNheGVzIjogIl41LjAuMSIsCi0gICAgICAgICJzeW1ib2wtdHJlZSI6ICJeMy4yLjQiLAotICAgICAgICAidG91Z2gtY29va2llIjogIl40LjAuMCIsCi0gICAgICAgICJ3M2MtaHItdGltZSI6ICJeMS4wLjIiLAotICAgICAgICAidzNjLXhtbHNlcmlhbGl6ZXIiOiAiXjIuMC4wIiwKLSAgICAgICAgIndlYmlkbC1jb252ZXJzaW9ucyI6ICJeNi4xLjAiLAotICAgICAgICAid2hhdHdnLWVuY29kaW5nIjogIl4xLjAuNSIsCi0gICAgICAgICJ3aGF0d2ctbWltZXR5cGUiOiAiXjIuMy4wIiwKLSAgICAgICAgIndoYXR3Zy11cmwiOiAiXjguNS4wIiwKLSAgICAgICAgIndzIjogIl43LjQuNiIsCi0gICAgICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImpzZXNjIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZXNjLy0vanNlc2MtMi41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9ZdTdYRXpqa0NRM0M1UHMzUUlac1FmTnBxb0p5WlpBOTl3ZDlhV2QwNU5DdEM1cFdPa1NoSzJta0w2SFhRUjYvQ3kybGJOZFBsWkJwdVFIWEU2M2dBPT0iCi0gICAgfSwKLSAgICAianNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMvLS9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycy0yLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHlGd3locm8vSkVvZjZHaGUyaXoyTmNYb2oyc2xvTnNXci9Yc0VSREsvb2lQQ2ZhTmhsNU9OZnAralFkQVpSUVEwSUpXTnpIOXpJWkY3bGk5MWtoMnc9PSIKLSAgICB9LAotICAgICJqc29uLXNjaGVtYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXNjaGVtYS8tL2pzb24tc2NoZW1hLTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lczk0TTNuVElmc0VQaXNSYWZhaytIRExmSFhuS0JoVjN2VTVlcVBjUzNmbElXcWN4SldnWEhYaWV5M1lycGFOc2FuWTVlaTFWb1lFYk96aWp1cTlCQT09IgotICAgIH0sCi0gICAgImpzb24tc2NoZW1hLXRyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhiYkNINWRDWVU1VDhMY0VoaHVoN0hKODhIWHVXM3FzSTNZMHpPWkZLZlpFSGNwV2lIVS9KeHprNjI5QnJzYWIvbU1pSFF0aTl3TVArODQ1UlBlM1ZnPT0iCi0gICAgfSwKLSAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5Ly0vanNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmRib3krbDd0QTNPR1c2Rmp5RkhXa1A1THVCeWoxVGszM0xqeXEwYXh5emRrOS8vSlNpMnUzZlAxUVNtZDFLTndxNlZPS1lHbEF1ODdDaXNWaXI2UHc9PSIKLSAgICB9LAotICAgICJqc29uNSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uNS8tL2pzb241LTIuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbU9XZTdleUhZSDE0Y0xkVlBveWcrR09IM3JZWCsrS3B6cnlsSndTVzk4dDNOaytVOFhPbDhGV0tPZ3d0emRiOGxYR2Y2ell3RFV6ZUhNV2Z4YXN5Zz09IgotICAgIH0sCi0gICAgImpzb25maWxlIjogewotICAgICAgInZlcnNpb24iOiAiNi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb25maWxlLy0vanNvbmZpbGUtNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVkZ25kV09yaVlTbTVjbllhSk5oYWxMTkRLT3FGd3lEQi9ycjFFOVpzR2NpR3ZLUHM4UjJ4WUdDYWN1ZjN6NksxWUtEejE4MmZkK2ZZM2NuM3BNcVhRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMS42IiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAianNvbnBvaW50ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbnBvaW50ZXIvLS9qc29ucG9pbnRlci01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcC9uWGJoU0VjdTNwWlJka1cxT2ZKaHBzVnRXMWdkNFdhMWZuUWM5WUxpVGZBam4wMzEyZU1LaW1iZElRenVabDlhYTl4VUdhUmxQOVQvQ0pFL2RpdFE9PSIKLSAgICB9LAotICAgICJqc3gtYXN0LXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzeC1hc3QtdXRpbHMvLS9qc3gtYXN0LXV0aWxzLTMuMy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mWVFIWlRaOGpTZm1XWjBpeXpmd2lVNFdEWDRIcEhiTUNaM2dQbFdZaUNsM0JvZU9Uc3FLQnFuVFZmSDJyWVQ3ZVA1YzNzVmJlU1BIbm5KT2FUcldpdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFycmF5LWluY2x1ZGVzIjogIl4zLjEuNSIsCi0gICAgICAgICJvYmplY3QuYXNzaWduIjogIl40LjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJraW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTYuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kY1MxdWwrOXRtZUQ5NVQreDI4L2VoTGdkOW1FTmEzTHN2RFR0em0zdnlCRU83UlBwdHZBRCt0NDRXVlhhVWpUQlJjcnBGZUZsQzhXQ3J1VVI0NTZodz09IgotICAgIH0sCi0gICAgImtsZXVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tsZXVyLy0va2xldXItMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVUSXpsVk9TVVIrSnhkREZlcEVZY0JNdFo5UXFkZWYrcm56V2RSWnVNYk95d3U1dE8ydzJON3Jxam9BTlo1azl2eXdoTDZCcjFWUmpVSWdUUXg0RTh3PT0iCi0gICAgfSwKLSAgICAia2xvbmEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2xvbmEvLS9rbG9uYS0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZGhHMzREWEFUTDVoU3hKYklleENmdDhGQ2hGWHRtc2tvWllub1BXalhRdWViV1lDTmtWZVYzS2tHZWdDSzlDUDFvc3dJL3ZRaWJTMkdZN0VtL3NKSkE9PSIKLSAgICB9LAotICAgICJsYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeS8tL2xhbmd1YWdlLXN1YnRhZy1yZWdpc3RyeS0wLjMuMjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXROME1DenlXbm96LzRuSFM2dXhkbEZXb1VaVDdBQnB0d0tQUTUyRWE3VVJrNnZsbDg4YldCVmhvZHRubGZFdUNjS1dOR29jK3VHYncxY3dhOUlLaC93PT0iCi0gICAgfSwKLSAgICAibGFuZ3VhZ2UtdGFncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sYW5ndWFnZS10YWdzLy0vbGFuZ3VhZ2UtdGFncy0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcUpobE85Y0dYaTZoQkdLb3hFRy9zS1pEQUhENUhudTlIczRXYk9ZM3BDV1hEaHcwTjh4MU5lbk56bTJFbk5Ma0xrazdKMlNkeEFrRFNiYjZmdFQrVVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsYW5ndWFnZS1zdWJ0YWctcmVnaXN0cnkiOiAifjAuMy4yIgotICAgICAgfQotICAgIH0sCi0gICAgImxhdW5jaC1lZGl0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGF1bmNoLWVkaXRvci8tL2xhdW5jaC1lZGl0b3ItMi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpwRENjUW55QUF6WlphWjd2RWlTcUw2OTB3N2RBRXlMYW8rS0M5NnpCcGxuWWJKUzdUWU5qdk0zTTd5M2RHeit2N2FJc0prM2hsbFd1YzBrV0FqeVJRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4wLjAiLAotICAgICAgICAic2hlbGwtcXVvdGUiOiAiXjEuNy4zIgotICAgICAgfQotICAgIH0sCi0gICAgImxldmVuIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xldmVuLy0vbGV2ZW4tMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFzZGErSDhqVGFVYU4veDV2elcycnpjKzhSdzRUQVEvNEtqQjQ2SXdLNVZIK0lsVmVlZWplL0VvWlJwaVh2SXFqRmdLODRRZmZxUHp0R0kzVkJMRzFBPT0iCi0gICAgfSwKLSAgICAibGV2biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZuLy0vbGV2bi0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2JUMnVINEU1TEdFN2gvbjNldmNTL3NRbEpYQ3BJcDZ5bThPV0o1ZVY2KzY3RHNxbC9MYWFUN3FKQkF0MnJ6Zm9hLzVRQkdCaHhEaXgxZE10MmtRS1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwcmVsdWRlLWxzIjogIl4xLjIuMSIsCi0gICAgICAgICJ0eXBlLWNoZWNrIjogIn4wLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJsaWxjb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGlsY29uZmlnLy0vbGlsY29uZmlnLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11dFdPdC9HSHp1VXhuTEt4QjZkazgxUm9PZW9OZUhnYnJYaXVHazR5eUY1cWxSeitpSVZXdTU2RTJmcUdIRnJYejBRTlVoTEIvOG5LcXZSSDY2SktHUT09IgotICAgIH0sCi0gICAgImxpbmVzLWFuZC1jb2x1bW5zIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpbmVzLWFuZC1jb2x1bW5zLy0vbGluZXMtYW5kLWNvbHVtbnMtMS4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTd5bHlsZXNaUS9QVjI5amhFRGwzVWZqbzZaWDdnQ3FKcjVGN1BLcnFjOTN2N2Z6U3ltdDFCcHdFVThuQVVYczhxenp2cWhiamhLNVFaZzZNdC9Ia0JnPT0iCi0gICAgfSwKLSAgICAibG9hZGVyLXJ1bm5lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2FkZXItcnVubmVyLy0vbG9hZGVyLXJ1bm5lci00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM1IvMU0reVMzajVvdTgwTWU1OWo3RjlJTXM0UFhzM1ZxUnJtMFRVM0FiS1B4bG1wb1kxVE5zY0pWL29HSlhvOHFDYXRGR1RmRGJZNlc2aXBHT1lYZmc9PSIKLSAgICB9LAotICAgICJsb2FkZXItdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9hZGVyLXV0aWxzLy0vbG9hZGVyLXV0aWxzLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14WHFwWG9JTmZGaGd1YTl4aXFEOGZQRkhna29xMW1tbXBFOTJXbERibTlyTlJkL0ViUmIrR3FmOTA4VDJETWZ1SGpqSmxrc2lLMlJiSFZPZEQvTXFTdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJpZy5qcyI6ICJeNS4yLjIiLAotICAgICAgICAiZW1vamlzLWxpc3QiOiAiXjMuMC4wIiwKLSAgICAgICAgImpzb241IjogIl4yLjEuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2NhdGUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInAtbG9jYXRlIjogIl40LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2Rhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE3LjIxIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtNC4xNy4yMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdjJrREVlNTdsZWNUdWxhREl1TlRQeTNSeTRnTEdKNloxTzN2RTFrcmdYWk5yc1ErTEZUR0hWeFZqY1hQczE3TGhiWlZHZWRBSnY4WFoxdHZqNUZ2U2c9PSIKLSAgICB9LAotICAgICJsb2Rhc2guZGVib3VuY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLmRlYm91bmNlLy0vbG9kYXNoLmRlYm91bmNlLTQuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVDF5RHpEWUVvWVdoblNHbnBFLzRLajFmTFprREZ5cVJiN2ZOdDZGZFlPU3hsVVdBdHA0MkVoNldiMHJHSXYvbTlCZ283eDRHaFFibTVZczRTRzVvdz09IgotICAgIH0sCi0gICAgImxvZGFzaC5mbG93IjogewotICAgICAgInZlcnNpb24iOiAiMy41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5mbG93Ly0vbG9kYXNoLmZsb3ctMy41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZmM0JYL3RTaW9vK1hvalg0TU9zT01oSncwblpvVUVGMDExTFg4ZzhkM2d2alZieGQ4OWNDaW80QkNYcm9uanhjVFVJSlVvcUtFVUErbjRDcXZ2UlB3PT0iCi0gICAgfSwKLSAgICAibG9kYXNoLm1lbW9pemUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lbW9pemUvLS9sb2Rhc2gubWVtb2l6ZS00LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDdqK056bWduUXpUQVlYY3NIWUxnaW1sdE9WMU1YSHRsT1dmNkdqTDlLajhHSzVGSW53NUpvdHh2Yk9zK0l2VjEvRHpvMDQvZkNHZkxWczdhWGI0QWc9PSIKLSAgICB9LAotICAgICJsb2Rhc2gubWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lcmdlLy0vbG9kYXNoLm1lcmdlLTQuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wS3BqcVhSVnZyWXlDc1gxc3dSL1hUSzB2YTZWUWtRTTZNTm83UHFXNzdCeWpBaG9BUkE4RWZyUDFONCtLbEtqOFlTMFpVQ3RSVC9ZVXVoeVlEdWpJUT09IgotICAgIH0sCi0gICAgImxvZGFzaC5zb3J0YnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnNvcnRieS8tL2xvZGFzaC5zb3J0YnktNC43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhEV1hHOGlzTW50QXlSRjV2Wjd4S3VFdk9oVDRBaGxSdC8zY3pUU2p2R1V4allDQlZSUVk0OFZpREh5Zll6OVZJb0JrVzRUTUdRTmFweCtsM1JVd2RBPT0iCi0gICAgfSwKLSAgICAibG9kYXNoLnVuaXEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnVuaXEvLS9sb2Rhc2gudW5pcS00LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGZCYVhRZDlyeWQ5ZGxTRHZudkkwbHZ4ZkxKbFlBWnpYb21VWXpMS3RVZU9Rdk9QNXBpcUFXdUd0cmhXZXFhWEs5aGhvTS9peUpjNUFWK1hmc1gzSFE9PSIKLSAgICB9LAotICAgICJsb29zZS1lbnZpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9vc2UtZW52aWZ5Ly0vbG9vc2UtZW52aWZ5LTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1seXV4UEdyL1dmaHJsZW0yQ0wvVWNuVWMxemNxS0FJbUJEenVrWTdZNUYveVFpTmRrbzYrZlJMZXZsdzFIZ015U3c3ZjYxMVVJWTQwOEV0eFJTb0szUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImpzLXRva2VucyI6ICJeMy4wLjAgfHwgXjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImxvd2VyLWNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG93ZXItY2FzZS8tL2xvd2VyLWNhc2UtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdmbTNsM05BRjlXZk42VzNKT21mNWRyd3BWcVg3OEp0b0dKM0E2VzBhNlpubGRNNDF3MmZWNUQ0OTBwc0tGVHBNZHM4VEpzZS9lSExGRnNOSEhqSGdnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImxydS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtwTkFSUUEzSXd2K2pUQTB1dFVWVmJyaCtKbHJyMUZ2MGU1NkdHekFGT1hON2RrL0Z2aWFEVzhMSG1LNTJEbGNINFdQMm42Z0k4dk4xYWVzQkZnbzl3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeMy4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibHotc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2x6LXN0cmluZy8tL2x6LXN0cmluZy0xLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDViZ0pXcHhKTnN3YlU3cUNyVjB0SUtRQ2FTM2JsUERycUtXeCtReHp1ekwxekdVemlqOVhDV0xyU0xzSlB1NXQrZVdBL3ljZXR6WUFPNUlPTWNXQVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm1hZ2ljLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjUuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFnaWMtc3RyaW5nLy0vbWFnaWMtc3RyaW5nLTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUm1GMEFzTXpndDI1cXpxcUxjMStNYkhtaGR4MG9qRjJGdnM0WG5PcXoyWk9CWHp6a0V3Yy9kSlFaQ1lIQW43djFqYlZPakFaZks4bXNSbjRCeE80VlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzb3VyY2VtYXAtY29kZWMiOiAiXjEuNC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm1ha2UtZGlyIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ha2UtZGlyLy0vbWFrZS1kaXItMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWczRmVQMjBMTndoQUxiLzZDejZEZDRGMm5nemUwano3dGJ6ckQyd0FWK285RmVOSGU0ckwreUsybWQwSi9maVNmMXNhMUFEaFhxaTUrb1Z3T00vZUd3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2VtdmVyIjogIl42LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJtYWtlZXJyb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ha2VlcnJvci8tL21ha2VlcnJvci0xLjAuMTIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUptcUN2VWhtdDQzbWFkbHBGekc0QlF6RzJaM202dHZRRE5LZENsWm5PM1ZiSXVkSllteHNUMEZOSk1laUIyK0pUU2xUUVRTYlU4UWRlc1Ztd0pjbUxnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAidG1wbCI6ICIxLjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJtZG4tZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZG4tZGF0YS8tL21kbi1kYXRhLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pVjNYTkt3MDZqNVE3bWk2aCs5dmJ4MjNUdjdKa2pFVmdLSFc0cGltd3lER1dtME9JUW50SkordTFDNm1nNm1LMUVhVHY0MlhRN3c3Nnl1ekg3TTJjQT09IgotICAgIH0sCi0gICAgIm1lZGlhLXR5cGVyIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lZGlhLXR5cGVyLy0vbWVkaWEtdHlwZXItMC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRxK3FlbFE5YWtIcGNPbC9nVVZSVHhWSU9rQUoxd1IzUUF2YjRSc1ZqUzhvVm9GakRHVGM2Nzl3SlltVW1rblVGNUh3TUxPZ2I1TythM0t4ZldhcFBRPT0iCi0gICAgfSwKLSAgICAibWVtZnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjUuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVtZnMvLS9tZW1mcy0zLjUuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVUVSekxzeHpsbGNoYWR2YlBzNWFvbEhoNjVJU3BLcE0rY2NMYk9KOC92dnBCS21BV2YrbGE3ZFhGeTdNcjB5U0hiZEhyRnY1a0dGQ1VISGU2R0ZFbXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmcy1tb25rZXkiOiAiXjEuMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm1lcmdlLWRlc2NyaXB0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lcmdlLWRlc2NyaXB0b3JzLy0vbWVyZ2UtZGVzY3JpcHRvcnMtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNDaTZnMy9acjFpcVFpNnlTYnNlTTFYdm9vYTk4TjB3MzFqelVZclhQWDJ4cU9ibUZHSEowdFE1dTc0SDNtVmg3d0xvdVRzZVp5WUlxMzlnOGNOcDF3PT0iCi0gICAgfSwKLSAgICAibWVyZ2Utc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lcmdlLXN0cmVhbS8tL21lcmdlLXN0cmVhbS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWJ2L3FPY3VQZmszVVJQZkR6bVpVMUxLbXV3OGtUKzBuSUh2S3JLZ0Zyd2lmb2wvZG9XY2RBNFpxc1dROEVOckZLa2Q2N01mcG8vTG92YklVc2J0M3c9PSIKLSAgICB9LAotICAgICJtZXJnZTIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UyLy0vbWVyZ2UyLTEuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04cTdWRWdNSlc0Sjh0Y2ZWUHk4ZzA5TmNRd1pkYndGRXFoZS9XWmtvSXpqbi8zVEdEd3RPQ1l0WEd4QTNPOHRQenBjekNDRGd2K1AyUDV5MDBaSk9PZz09IgotICAgIH0sCi0gICAgIm1ldGhvZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWV0aG9kcy8tL21ldGhvZHMtMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWljbEFIZU5xTm02OHpGdG5aMGUrMUwyeVVJZHZ6Tm9hdUtVNFdCQTNWdkgvdlBGaWVGN3FmUmx3VVpVK0RBOVA5YlBYSVM5MHVseG9Vb0NIMjNzVjJ3PT0iCi0gICAgfSwKLSAgICAibWljcm9tYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taWNyb21hdGNoLy0vbWljcm9tYXRjaC00LjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRE15K0VSY0VXMnE4WjJQbytXTlh1dzNjNVlhVVNGakFPNUdzSnFmRWw3VWp2dEl1RktPNlpyS3ZjSXRkeTk4ZHdGSTJOMXRnM3pOSWRLYVFUK2FOZEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicmFjZXMiOiAiXjMuMC4yIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4zLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLy0vbWltZS0xLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteDBWbjhzcEkrd3VKMU82UzdnbmJhUWc4UHhoNE5OSGI3S1NJTm1FV0tpUEU0UktPcGx2aWpuK05rbVltbVJnUDY4bWM3MGoyRWJlVEZSc3Jzd2FRZWc9PSIKLSAgICB9LAotICAgICJtaW1lLWRiIjogewotICAgICAgInZlcnNpb24iOiAiMS41Mi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLWRiLy0vbWltZS1kYi0xLjUyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNQVTR1VjdkWWx2dFdKeHd3eEhEMFB1aWhWTmlFN1R5QWJRNVNXeERDQjltVVl2T2dyb1FPd1lRUU9LUEo4Q0liRSsxRVRWbE9vSzFVQzJuVTNnWXZnPT0iCi0gICAgfSwKLSAgICAibWltZS10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4zNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS10eXBlcy8tL21pbWUtdHlwZXMtMi4xLjM1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aRFkrYlBtNXpUVEYrWXBDckFVOW5LMFVnSUNZUFQwUXRUMU5aV0Z2NHMrK1ROa2NnVmFUMGc2KzRSMnVJNE1qUWp6eXNIQjF6eHVXTDUwaHphZVhpdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1pbWUtZGIiOiAiMS41Mi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm1pbWljLWZuIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWljLWZuLy0vbWltaWMtZm4tMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9xYk9rNW9FUWVBWjhXWFd5ZGx1OUhKano5V1ZkRUl2YW1NQ2NYbXVxVVlqVGtuSC9zcXNXdmhRM3Znd0tGUlIxSHBqdk5CS1EzN25iSmdZekdxR2NnPT0iCi0gICAgfSwKLSAgICAibWluLWluZGVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW4taW5kZW50Ly0vbWluLWluZGVudC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSTlqd01uMDdTeS9Jd09qM3pWa1ZpazJKVHZncGF5a0RaRWlnTDZSeDZOOUxiTXl3d1VTTXR4RVQrN2xWb0RMTGQzTzNJWHdKd3Z1dW5zOFVCL0hlQWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiMi43LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luLy0vbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4tMi43LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFrN0hjZ2FQa0dHNmVENzdtTHZaUzFubXhsYW8zais5UGtyVDlVYzdIQUUxaWQzRjQxK0RkQlJZUllrYnlmTlJHem04L1lXdHpodzduVlBtd2hxVFF3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMTIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zUnUxa3BjTzl5THRZeEJLdnFmVGVoOUt6WkV3TzNTVHlYMUhUKzRDYUR6QzZIcFRHWWhJaFBJemo5WHVLVTdLWUR3bmFlaDVoY093ankxUXVKekJQQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJyZXF1aXJlLWZyb20tc3RyaW5nIjogIl4yLjAuMiIsCi0gICAgICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhanYta2V5d29yZHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYta2V5d29yZHMvLS9hanYta2V5d29yZHMtNS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ1MvSk5GQVV5cjV2QXVoazFEV20xQ0J4UkhXOUxiSjJveldlZW1ySXFwYnNxS2pIVnhZUHlpNUdDMHJqWklUNUp4SjN2aXJWVFM4d2s0aS9aK2tydz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgICAgICB9LAotICAgICAgICAic2NoZW1hLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjkiLAotICAgICAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl41LjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJtaW5pbWFsaXN0aWMtYXNzZXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYWxpc3RpYy1hc3NlcnQvLS9taW5pbWFsaXN0aWMtYXNzZXJ0LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VdEpjQUQ0eUVhR3RqUGV6V3VPOXdDNG53VW5WSC84L0ltM3lFSFFQNGI2N2NYbEQvUXI5aGRJVENVMXhEYlNFWGcyWEtOYVA4anNSZVY3dlFkMDAvQT09IgotICAgIH0sCi0gICAgIm1pbmltYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo3cDYzaFJpQWp3MU5ERXd3MVc3aTM3K0J5SXJPV081WFFRQXpaM1ZPY0wwUE55YndwZm1WL04wNXpGQXp3UTlVU3lFY1g2dDNVTytLNWFxQlFPSUh3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl4xLjEuNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJtaW5pbWlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0LTEuMi44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yeXlBUjhxQmtOM1l1aGVKYW5VcFdDNVUzYmI1b3NEeXdOQjhSekRWbER3REhib2NBSnZlcXFqMXU4K1NWRDdqa1dUNHl2c0hDcFdxcVdxQXhiMHpDQT09IgotICAgIH0sCi0gICAgIm1rZGlycCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ta2RpcnAvLS9ta2RpcnAtMC41LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZQK3A4UkI4T1dwRjNZWkJDclA1Z3RBRG10WEFwQjVBTUxuK3ZkeUErUHl4Q2pyQ3MwMG1qeVVvenNzTzMzY3dEZVQzd05HZEx4SjVNLy9ZcXRIQUp3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibWluaW1pc3QiOiAiXjEuMi42IgotICAgICAgfQotICAgIH0sCi0gICAgIm1zIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNHa1B4K1ZqTXRtQTZNWDI3b0E0RkJGRUxGQ1paNFM0WHFlR09YQ3Y2OHRUK2piM3ZrL1J5YUtXUDBQVEt5V3RtTFNNMGIrYWRVVEV2YnMxUEVhSDJ3PT0iCi0gICAgfSwKLSAgICAibXVsdGljYXN0LWRucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tdWx0aWNhc3QtZG5zLy0vbXVsdGljYXN0LWRucy03LjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmV6blBKUDh6MkJGTFg1MHRmMEx1T0RycElOcVAxUlZJbS9DT2JiVGNCUklUUWdtQy9UamNSRUYxTmVUQnpJY1I1WE8vdWtXbytZSE9qQmJGd0l1cGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkbnMtcGFja2V0IjogIl41LjIuMiIsCi0gICAgICAgICJ0aHVua3kiOiAiXjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm16IjogewotICAgICAgInZlcnNpb24iOiAiMi43LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL216Ly0vbXotMi43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXo4MUdOTzdubllNRWhyR2g5TGV5bW9FNCtZcjBXbjVNY0hJWk1LNWNmUUNsK05EWDA4c0NaZ1VjOS82TUhuaTlJV3VGTG0xWjNIVENYdTJ6OWZONjJRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW55LXByb21pc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMC4xIiwKLSAgICAgICAgInRoZW5pZnktYWxsIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJuYW5vaWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmFub2lkLy0vbmFub2lkLTMuMy42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CR2NxTU1KdVRvRjdpMXJ0KzJQV1NOVm5XSWtHQ1U3OGpCRzNSeE8vYlpsblpQSzJDbWkyUWFmZnhHTy8yUnZXaTlzTCtGQWlSaVhNZ3N5eFExRElEQT09IgotICAgIH0sCi0gICAgIm5hdHVyYWwtY29tcGFyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYXR1cmFsLWNvbXBhcmUvLS9uYXR1cmFsLWNvbXBhcmUtMS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9XTkQ4ZWkzVnROQzloN1Y2MHFmZjNTVm9iSHI5OTZDVHdneHViZ3lRWUVwZzI5MGg5SjBidXlFQ05OSmV4a0ZtNXNPYWpoNUcxMTZSWUExYzhaTVN3PT0iCi0gICAgfSwKLSAgICAibmF0dXJhbC1jb21wYXJlLWxpdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmF0dXJhbC1jb21wYXJlLWxpdGUvLS9uYXR1cmFsLWNvbXBhcmUtbGl0ZS0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVGorSFREU0pKS2FabmZpdXcraWFGOXNrZFBwVG8yR3RFbHk1SkhuV1YvaGZ2MlFqLzlSS3NHSVNRdExoMm94M2w1RUFHdzQ4N2huQmVlMHNJSjZ2Mmc9PSIKLSAgICB9LAotICAgICJuZWdvdGlhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25lZ290aWF0b3IvLS9uZWdvdGlhdG9yLTAuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rRVVzcUdQTHNNK2ovemRDaFpqc25YNTFnNFhySEZPSVh3Zm5DVlBHbFFrL2s1Z2lha2NLc3V4Q09iQlJ1NkRTbTlvcHcvTzZzbFdiSmRnaFFNNGJCZz09IgotICAgIH0sCi0gICAgIm5lby1hc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uZW8tYXN5bmMvLS9uZW8tYXN5bmMtMi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlkM1VFUzVtV0NTcVIrcU5UOTNTM1VvWVVrcUFaOWxMZzhhN2c5cmltc1dtWUdLOGNWVG9BNC9zRjNScnNoZHlWM3NBR01YVlVtcE1ZT3crZExwT3V3PT0iCi0gICAgfSwKLSAgICAibm8tY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uby1jYXNlLy0vbm8tY2FzZS0zLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZmdBTjNqR0FoK1JveFVHWkhUU09MSklxVWMyd21vQndHUjR0YnBOQUttbW92Rm9XcTBPZFJrYjBWa2xkUmVPMmEyaUJUL09FdWxHOVhTVWMxMHIzemc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb3dlci1jYXNlIjogIl4yLjAuMiIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZS1mb3JnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWZvcmdlLy0vbm9kZS1mb3JnZS0xLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFBFdE9lTXZGOVZNY1lWLzFXYjhDUG9WQVh0cDZNS01sY2JBdDRkZHFtR3FVSjZmUVpGWGtOWk5rTmxmZXZ0TmtHdGFTb1hmL3ZOTk5TdmdyZFh3dEE9PSIKLSAgICB9LAotICAgICJub2RlLWludDY0IjogewotICAgICAgInZlcnNpb24iOiAiMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtaW50NjQvLS9ub2RlLWludDY0LTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PNWx6OTF4U09lb1hQNkR1bHlIZmxscHErRWcwME1XaXRaSWJ0UGZvU0V2cUlIZGw1Z2ZjWTZoWXpEV25qMHFENXR6NTJQSTA4dTlxVXZTVmVVQmVIdz09IgotICAgIH0sCi0gICAgIm5vZGUtcmVsZWFzZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtcmVsZWFzZXMvLS9ub2RlLXJlbGVhc2VzLTIuMC4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUXpzWUtXaFhUV3g4aDFrSXZxZm5DKytvMHBFbXBSUUEvYWVuQUxzTDJGNHBxTlZyN1l6Y2RNbERpajVXQm53ZnRSYkpDTkpML083emRLYXhLUEhxZ1E9PSIKLSAgICB9LAotICAgICJub3JtYWxpemUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtcGF0aC8tL25vcm1hbGl6ZS1wYXRoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZVpzNUxzM1d0Q2lzSFdwOVMyR1V5OGRxa3BHaTRCVlN6M0dhcWlFNmV6dWIwNTEyRVN6dFhVd1VCNkM2SUtiUWtZMlBuYi9tRDRXWW9qQ1J3Y3dMQT09IgotICAgIH0sCi0gICAgIm5vcm1hbGl6ZS1yYW5nZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtcmFuZ2UvLS9ub3JtYWxpemUtcmFuZ2UtMC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJkb2svWHZLSUkzblVwa2xuVjZQMmh4dE1OckNib09qQWN5QnVRbldFaE82NjVGd3JTTlJ4VStBcXBzeXZPNkxnR1lQc3BOK2x1NUNMdHc0alBSS05BPT0iCi0gICAgfSwKLSAgICAibm9ybWFsaXplLXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtdXJsLy0vbm9ybWFsaXplLXVybC02LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGxMK1h3T3kzTnhBUTh4dUMwb2tQZ0s0Nml1Vk5BSzAxWU43UnVlWUJxcUZlR3NCalY5WG1DQXpBZGd0KzY2N2JDbDVrUGg5RXFLS0R3bmFQRzFJN0E9PSIKLSAgICB9LAotICAgICJucG0tcnVuLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnBtLXJ1bi1wYXRoLy0vbnBtLXJ1bi1wYXRoLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TNDhXelpXNzc3emhOSXJuN2d4T2xJU05BcWk5WkMvdVFGblJkYmVJSGhaaENBNlVxcGtPVDhUMUc3QnZmZGdQNEVyOGdGNHNVYmFTMGk3UXZJZkNXdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBhdGgta2V5IjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJudGgtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnRoLWNoZWNrLy0vbnRoLWNoZWNrLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1scWpyam1hT29BbldmTW1CUEwrWE5ueW5aaDIrc3d4aVgzV1VFMHM0eUVISTZtK0F3cksyVVpPaW1JUmwzWC80UWN0VnFTOEFpWmpGcXlPR3JNWGIvdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJvb2xiYXNlIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJud3NhcGkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbndzYXBpLy0vbndzYXBpLTIuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11YjVFNCtGQlBLd0FaeDBVd0lRT2pZV0dIVEVxNXNQcUhRTlJOOFo5ZTRBN3UzVGoxd2VMSnNMNTl5SDl2bXZxRXRCSGFPbVQ2Y1lRS0laT3hwMzVGUT09IgotICAgIH0sCi0gICAgIm9iamVjdC1hc3NpZ24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWFzc2lnbi8tL29iamVjdC1hc3NpZ24tNC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJKZ1RRbmtVbkgxc0Z3OHlUNlZTVTN6RDNzV211NnNaaElzZVk4VlgrR1J1M1A2RjdGdStKTkRvWGZrbEVsYkxKU25jM0ZVUUhWZTRjVTVoaitCY1VnPT0iCi0gICAgfSwKLSAgICAib2JqZWN0LWhhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWhhc2gvLS9vYmplY3QtaGFzaC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUlNuOUY2OFBqSDlIcXRsdHNTbnFZQzFYWG9XZTlCanU1KzIxM1I5OGNOR3R0YWc5cTl5QU9UemRic3F2SWE3YU5tNVdmZkJaRnBXWXIyYVdya2xXQXc9PSIKLSAgICB9LAotICAgICJvYmplY3QtaW5zcGVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWluc3BlY3QvLS9vYmplY3QtaW5zcGVjdC0xLjEyLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdlVXZkazdjK2Vpek1OVURrUnBXMXdKd2dmT2lPZUhieEJSL2hMWEsxYVQ2em1WU08wanNRY3M3Zmo2TUd3ODlqQy9jakdmTGNOT3J0TVl0R3FtODFnPT0iCi0gICAgfSwKLSAgICAib2JqZWN0LWlzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1pcy8tL29iamVjdC1pcy0xLjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2N5RHN5SGd0bWk3STdEZlNTSTJMRHA2U0sybHd2dGJnMHAwUjFlMFJ2VHFGNWNlR3grSzJkZlNqbTFiS0RNVkNGRURBUXZ5K284YzZhN1Z1ak9kZHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJvYmplY3Qta2V5cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3Qta2V5cy8tL29iamVjdC1rZXlzLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OdUFFU1VPVU1ybElYT2ZIS3pENmJwUHUzdFl0M3h2ak5kUklRK0ZlVDBsTmI0SzhXUjcwQ2FEeGh1Tmd1UzJYRytHamt5TXdPenNONVprdEltZmhMQT09IgotICAgIH0sCi0gICAgIm9iamVjdC5hc3NpZ24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LmFzc2lnbi8tL29iamVjdC5hc3NpZ24tNC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFteEtmMGU1OGJ2eWpTQ3RLWVk0c1JlOWl0UmszUEpwcXVKT2plSWt6ODg1Q2N6Y0k0SXZKSkRMUFM3Mm9vd3VTaCtwQnhVRlJPcFgrVFUrK2h4aFpRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMC4zIiwKLSAgICAgICAgIm9iamVjdC1rZXlzIjogIl4xLjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJvYmplY3QuZW50cmllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QuZW50cmllcy8tL29iamVjdC5lbnRyaWVzLTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sZVRQem80WnZnM3BtYlEzckRLNjlSbDhHUXZJcU1XdWJya3hPTkc5L29qdEZFMnJEOWZqTUtmU0k1QnhXM29zUkgxbTZWZHptcUs4b0FZOWFUNHg1dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAib2JqZWN0LmZyb21lbnRyaWVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC5mcm9tZW50cmllcy8tL29iamVjdC5mcm9tZW50cmllcy0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmNpRDEzZHN3QzRqMVh0NTM5NFdSNE16bUFRbWxnTjcycGhkL3JpTnA5dnREN3RwNFFRV0owUjR3dmNsWGNhZmdjWUs4dmVIUmVkMlc2WGVHQnZjZmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzLy0vb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnMtMi4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxxKzYxZzI2RS9CZ0h2MFpURmdSdmk3Tk1FUHVBeExrRlU3cnVrWGpjL0Fsd0g0QW01eFhWbklYeTN1bjFiZy9KUGJYSHJpeFJrSzFpdFV6elBpSWpRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXJyYXkucHJvdG90eXBlLnJlZHVjZSI6ICJeMS4wLjUiLAotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4yLjAiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjEuMiIsCi0gICAgICAgICJzYWZlLWFycmF5LWNvbmNhdCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAib2JqZWN0Lmhhc293biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QuaGFzb3duLy0vb2JqZWN0Lmhhc293bi0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQjVVSVQzSjFXK1d1V0lVNTVoMG1qbHdhcXhpRTV2WUVOSlhJWFo0VkZlMDVwTllya0t1SzBVLzZhRmNiMHBLeXdZSmg3SWhmb3FVZktWbXJKSkhaSHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJvYmplY3QudmFsdWVzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC52YWx1ZXMvLS9vYmplY3QudmFsdWVzLTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVlZUa0QxdkVOQ3NBY3dOczlrNmplYTJ1SEMvWDArSmNqRzhZQTYwRk41Q01hSm1HOTV3VDlqZWsveFg5bm9ybnFHUnJCa0t0enVBdTJ3dUhwS3F2dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAib2J1ZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYnVmLy0vb2J1Zi0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFgxd3UwQW1BZFBxT0wxbVdocW1sT2Q4a09JWlF3R1p3NnJoN3VieTlmVGM1bGhhT1dGTFgzSTZSMWhyRjlrM3pVWTQwZTZpZ3NMR2tEWEs5MkxKTmc9PSIKLSAgICB9LAotICAgICJvbi1maW5pc2hlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbi1maW5pc2hlZC8tL29uLWZpbmlzaGVkLTIuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vVmx6a2czRU5BaENrMnpkdjdJSndkL1FVRDR6MlJ4Undwa2NHWThwc0NWY0NZWk5xNHdZblZXQUxITSticnR1SmplUFdpWUYvQ2xtdURyOENoNStrZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImVlLWZpcnN0IjogIjEuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm9uLWhlYWRlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb24taGVhZGVycy8tL29uLWhlYWRlcnMtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBaQUUrRkpMb3lJVHl0ZHFLMFU1cytGSXBqTjBKUDNPekZpL3U4UngrRVY1L1crSlRXR1hHOHhGemV2RTdBakJmRHFIdi84dkw4cVFzSWhIbnFSa3JBPT0iCi0gICAgfSwKLSAgICAib25jZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbmNlLy0vb25jZS0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbE5hSmdJKzJRNVVSUUJrY2NFS0hUUU9QYVhkVXhuWlpFbFFUWlkwTUZVQXVhRXFlMUUrTnl2Z2R6L2FJeU5pNlo5TXpPNWR2MUg4bjU4L0dFTHAzK3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ3cmFwcHkiOiAiMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJvbmV0aW1lIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uZXRpbWUvLS9vbmV0aW1lLTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rYnBhU1NHSlRXZEFZNUtQVmVNT0tYU3JQdHI4QzhDN3dvZEpiY3NkNTFqUm5tRCtHWnU4WTBWb1U2RG01WjR2V3IwSWcvMU5LdVdSS2Y3ajVhYVlTZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1pbWljLWZuIjogIl4yLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJvcGVuIjogewotICAgICAgInZlcnNpb24iOiAiOC40LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wZW4vLS9vcGVuLTguNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03eDgxTkNMNzE5b05ic3EvM21oK2hWckFXbUZ1RVlVcXJxL0l3M2tVekg4UmV5cFQ5UVEwQkxvSlM3L0c5azZOODFYalc0cUhXdGpXd2UvOWVMeTFFUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlZmluZS1sYXp5LXByb3AiOiAiXjIuMC4wIiwKLSAgICAgICAgImlzLWRvY2tlciI6ICJeMi4xLjEiLAotICAgICAgICAiaXMtd3NsIjogIl4yLjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJvcHRpb25hdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wdGlvbmF0b3IvLS9vcHRpb25hdG9yLTAuOS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03NFJsWTVGQ25ocTRqUnhWVVBLRGFSd3JWTlhNcXNHc2lXNkFKdzRYSzhobXRtMTB3QzB5cFpCTHc1SUlwODVOWk1yOTErcWQxUnZ2RU53ZzdqalJGdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlZXAtaXMiOiAiXjAuMS4zIiwKLSAgICAgICAgImZhc3QtbGV2ZW5zaHRlaW4iOiAiXjIuMC42IiwKLSAgICAgICAgImxldm4iOiAiXjAuNC4xIiwKLSAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIiwKLSAgICAgICAgInR5cGUtY2hlY2siOiAiXjAuNC4wIiwKLSAgICAgICAgIndvcmQtd3JhcCI6ICJeMS4yLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicC1saW1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItLy84OG1GV1NKeDhseEN6d2RBQUJUSkwyTXlXQjEyK2VJWTdNREwyU3FMbUFrZUtVOXF4UnZXdVN5VGptM0ZVbXBCRU11RmZja0FJcUVhVkdVRHhiNnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwLXRyeSI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicC1sb2NhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS00LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjc5WlovMHdBeEtHdTNvWU1sejhqeS9rYmhzTnJTN1NLWjdQeEVIQmdKNStGMm10RlcyZksyY090QmgxY0hZa1FzYnpGVjdJK0VvUktlNll0MG9LN0E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4yLjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwLXJldHJ5IjogewotICAgICAgInZlcnNpb24iOiAiNC42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtcmV0cnkvLS9wLXJldHJ5LTQuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zMTJJZDM5NkViSmR2Uk9ObG5nVXgwTnlkZnJJUTVsc1l1MHpuS1ZVelZ2QXJ6RUl0MDhWMXFodHlFU2JHVmQxRkdYN1VLdGlGcDV1d0taZE04d0l1UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9yZXRyeSI6ICIwLjEyLjAiLAotICAgICAgICAicmV0cnkiOiAiXjAuMTMuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJwLXRyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLXRyeS8tL3AtdHJ5LTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNG5QQVZUQVUwQjlEMzUvR2szdUpmLzdYWWJRY3lvaFNLZHZBeElSU05naEZsNGU3MWhWb0duQk5RejljV2FYeE8ySTEwS1RDKzNqTWR2dm9LdzZkUT09IgotICAgIH0sCi0gICAgInBhcmFtLWNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyYW0tY2FzZS8tL3BhcmFtLWNhc2UtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJYbGo3ekNZb2tSZXFXcE9QSDlvWWl2VXpMWVo1dkFQSWZFbUNUTlZpb3NDNzhGOEYwSDl5N1Q3Z0cyTTM5eW1ndXR4RjVnY0ZFc3laUVNwaDlCcDNBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZG90LWNhc2UiOiAiXjMuMC40IiwKLSAgICAgICAgInRzbGliIjogIl4yLjAuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJwYXJlbnQtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcmVudC1tb2R1bGUvLS9wYXJlbnQtbW9kdWxlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HUTJFV1JwUVY4L28rQXc4WXF0ZlpaUGZOUldaWWtiaWRFOWs1cnBsL2hDM3Z0SEhCZkdtMklmaTZxV1YrY29ER2tyVUtaQXhFM0xvdDVrY3NSbGgrZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGxzaXRlcyI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicGFyc2UtanNvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXlDS3ZtL3BoQ0d4T2tZUlNDTTgyaUR3Y3Q4L0VvblNFZ0NTeFd4RDd2ZTZqSGdnc0ZsNGZaVlFCUFJOZ1FvS2l1Vi9vZGhGckd6UVhad2JpZkM4Umc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4wLjAiLAotICAgICAgICAiZXJyb3ItZXgiOiAiXjEuMy4xIiwKLSAgICAgICAgImpzb24tcGFyc2UtZXZlbi1iZXR0ZXItZXJyb3JzIjogIl4yLjMuMCIsCi0gICAgICAgICJsaW5lcy1hbmQtY29sdW1ucyI6ICJeMS4xLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicGFyc2U1IjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcnNlNS8tL3BhcnNlNS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT2ZuL0NURnpSR1RUeHdwTkVzOVBQOTNnWFNoSGNUcTI1NW56UllTS2U4QWtWcFpZN2UxZnBtVGZPeW9JdmpQNUhHN1oyWk03VlM5UFBoUUdXMnBPcHc9PSIKLSAgICB9LAotICAgICJwYXJzZXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZXVybC8tL3BhcnNldXJsLTEuMy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DaXllT3hGVC9KWnlONW0wejlQZlh3NFNDQko2U3lnejFEcGwwd3FqbGhERUdHQlAxR25zVVZFTDBwNjNob0cxZmNqM2ZIeW5YaTlOWU80bldPTCtxUT09IgotICAgIH0sCi0gICAgInBhc2NhbC1jYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bhc2NhbC1jYXNlLy0vcGFzY2FsLWNhc2UtMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVXbEdUM1lTbks5eDNCUUphT2RjWndyblY2aFBwZDhqRkgxL3VjcGlMUlBoLzJ6Q1ZKS1MxOUU0R3ZZSHZhQ2NBQ24zZm9YWjBjTEI5V3J4MUtHZTVnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibm8tY2FzZSI6ICJeMy4wLjQiLAotICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgInBhdGgtZXhpc3RzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtZXhpc3RzLy0vcGF0aC1leGlzdHMtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFrOVF5NVE3alliMld3Y2V5NUZwdmcyS29BYy9aSWhMU0xPU0JtUm15Z1BzR3drVlZ0MGZaYTBxcnRNeittNnRKVEFIZlpROEZubUI0TUc0TFd5Ny93PT0iCi0gICAgfSwKLSAgICAicGF0aC1pcy1hYnNvbHV0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWlzLWFic29sdXRlLy0vcGF0aC1pcy1hYnNvbHV0ZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVZidzNVSjJlOWJxNjR2U2FTOUFtMGZqZTFQYThwYkdxVFRzbVhmYUlpTXBucjVEbERoZkpPdUxqOVNmOTVaUFZEQVVlckRmRWs4OE1QbVBlN1VDUWc9PSIKLSAgICB9LAotICAgICJwYXRoLWtleSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWtleS8tL3BhdGgta2V5LTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vam1lTjBxZCt5MGpzekV0b1k0OHIwUGVxNWR3TUVrSWxDT3U2UTVmNDFsZmtzd1h1S3RZcmhnb1RwTG55SWNIbTI0VWhxeCs1VHFtMkluU3dMaEU2UT09IgotICAgIH0sCi0gICAgInBhdGgtcGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1wYXJzZS8tL3BhdGgtcGFyc2UtMS4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxESnpQVkVFRVBSK3k0OHo5M0EwRWQweVhiOHBBQnlHV28vazVZWWRZZ3BZMi8yRXNPc2tzSnJxN2xPSHhyeXJWT24xZWpHNm9BcDhhaHZPSVFEOHN3PT0iCi0gICAgfSwKLSAgICAicGF0aC10by1yZWdleHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC10by1yZWdleHAvLS9wYXRoLXRvLXJlZ2V4cC0wLjEuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNURGa3VvcWx2MXVZUUt4eThvbUZCZUpQUWNkb0UwN0t2MnNmZXJEQ3JBcTFvaE9VK01TRHN3RElibngzWUFNNjBxSU9uWWE1M3dCaFhXMEViTW9uclE9PSIKLSAgICB9LAotICAgICJwYXRoLXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC10eXBlLy0vcGF0aC10eXBlLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nREtiOGFaTURlRC90WldzOVA2K3EwSjlNd2tkbDZ4TVY4VGpuR1AzcUpWSjA2YmRNZ2tiQmxMVThJZGZPc0lzRnoyQlcxck5WVDNYdU5FbDh6UEF2dz09IgotICAgIH0sCi0gICAgInBlcmZvcm1hbmNlLW5vdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wZXJmb3JtYW5jZS1ub3cvLS9wZXJmb3JtYW5jZS1ub3ctMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdFQUhseUxISTU2VkVJZEs1N3V3SGRIS0lhQUdiblhQaXcweVdiYXJRWk9LYUtwdlVJZ1cwaldSVkxpYXRuTStYWGxTd3NhbklCSC9oekdNSnVsTW93PT0iCi0gICAgfSwKLSAgICAicGljb2NvbG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvY29sb3JzLy0vcGljb2NvbG9ycy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWZ5Z3JvVExsSHU2NnppMjZWb1REdjh5UmdtMEZjY2Vjc3N0bytNaHNaMEQvREdXMnNtOEU4QWpXN05VNVZWVFJ0NUd4YmVaNXFCdUpyK0h5TFlralE9PSIKLSAgICB9LAotICAgICJwaWNvbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGljb21hdGNoLy0vcGljb21hdGNoLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KVTN0ZUhUTmptRTJWQ0dGenVZOEVYekNEVndFcUIyYThmc0l2d2FTdEhoQVdKRWVWZDFvMVFEODBDVTYrWmRFWFhTTGJTc3VMd0pqa0NCV3FSUVVWQT09IgotICAgIH0sCi0gICAgInBpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlmeS8tL3BpZnktMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVkZ3NBWStmVG52djdrSTdhYXhicXdXTmIwQUhpQjBxQk84OVBaS1Brb1RtR09nZGJySERLRCswQjJYNHVUZkovRlQxUjA5cjlnVHNqVWpOSm90dW9nPT0iCi0gICAgfSwKLSAgICAicGlua2llIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpbmtpZS8tL3BpbmtpZS0yLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTW5VdUV5Y0FlbXRTYWVGU2pYS1cvYXJvVjdha0JiWStTditSa3lxRmpnQWU3M0YrTVIwVEJXS0JSRGttZldxL0hpRm1kYXZmWjFHN2g0U1BaWGFDU2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInBpbmtpZS1wcm9taXNlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpbmtpZS1wcm9taXNlLy0vcGlua2llLXByb21pc2UtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBHbmk2RDRVY0xUYnY5YzU3RGZ4REdkcjQxWGZnVWpxV1p1NDkyZjBjSUdyMTZ6RFUwNkJXUC9SQUV2T3VvN0NRMENOakhhTGxNNTlZSkpGbTNOV2x3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwaW5raWUiOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBpcmF0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlyYXRlcy8tL3BpcmF0ZXMtNC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThWOStIUVB1cG5hWE1BMjNjNWh2bDY5elh2VHdUenlBWWFzbmtiMFR0czRYdk80Q2xpcU9OTU9udmxxMjZya2hMQzNuV0RGQkpmNzNMVTFlMVZaTGFRPT0iCi0gICAgfSwKLSAgICAicGtnLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wa2ctZGlyLy0vcGtnLWRpci00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSFJEemJhS2pDK0FPV1ZYeEFVL3g1NENPR2VJdjllYis2Q2tEU1FvTlR0NFh5V29JSnZ1UHNYaXp4dS9GcjIzRWlla2J0WndtaDFJY0lHL2wvYTEwR1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmaW5kLXVwIjogIl40LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwa2ctdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGtnLXVwLy0vcGtnLXVwLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uRHl3VGhGazFpNEJRSzR0d1BRNlRBNFJUOGJEWTk2eWV1Q1ZCV0wzZVBBUkNpRUtEUlNyTkdiRklnVUpwTHArWGVJUjY1djhyYTdXdUpPRlVCdGtNQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZpbmQtdXAiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmaW5kLXVwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtMy4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xeUQ2Um1MSTFYQmZ4dWd2T1J3bGNrNmY3NXRZTCtpUjBqcXdzT3JPeE1aeUdZcVV1RGhKMGw0QVhkTzFpWC9GVHM5Y0JBTUVrMWdXU0V4MWtTYnlsZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImxvY2F0ZS1wYXRoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC0zLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdBTzc0OHdXbkloTnFBdWF0eTJaV0hrUUhSU05mUFZJc1BJZndFT1dPMjJBbWFvVnJXYXZsT2NNUjVuelRMTll2cDM2WDIyMC9tYWFSc3JlYzFHNjVBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJwLWxvY2F0ZSI6ICJeMy4wLjAiLAotICAgICAgICAgICAgInBhdGgtZXhpc3RzIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwLWxvY2F0ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtMy4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14KzEydy9Ubys0R0ZmZ0poQkVwaURjTG96UkpHZWdZK0VpNy96MHRTTGtNbXhHWk55YlZNU2ZXajlhSm44WjVGYzdkQlVOSk9PVmdQdjJIN0l3dWxTUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAicC1saW1pdCI6ICJeMi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicGF0aC1leGlzdHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4aXN0cy8tL3BhdGgtZXhpc3RzLTMuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnBDN0dZd2lEWVE0d1lMZStGQThsaFJqaFFDTWNRR3VTZ0dHcURrZy9RZXJSV3c5Q21HUlQwaVNPVlJTWkoyOU5NTFpnSXpxYWxqSjYzb2FMNE5JSlE9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQuMzEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MvLS9wb3N0Y3NzLTguNC4zMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFMwOElib2lhOW10cy8yeWdWM2VMcFk1Z2huVWNmTFYvRVhUT1cxRTJxWXhKS0dHQlV0TmpONzZGWUhuTXMzNlJtQVJuNDFiQzBBWm1uK3JSME9WcFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJuYW5vaWQiOiAiXjMuMy42IiwKLSAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAtanMiOiAiXjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtYXR0cmlidXRlLWNhc2UtaW5zZW5zaXRpdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1hdHRyaWJ1dGUtY2FzZS1pbnNlbnNpdGl2ZS8tL3Bvc3Rjc3MtYXR0cmlidXRlLWNhc2UtaW5zZW5zaXRpdmUtNS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhJaWRYVjhmRHIwa0t0Mjh2cWtpODRmUks4Vlc4ZVR1SWE0UENodjJNcUt1VDZDOVVqbVNLemVuNkthV2hXRW9Zdnd4RkNhN24vdEMxU1ozdHlxNFNRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWJyb3dzZXItY29tbWVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1icm93c2VyLWNvbW1lbnRzLy0vcG9zdGNzcy1icm93c2VyLWNvbW1lbnRzLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YOVg5L1dOM0tJdlk5K2hORVJVcVg5Z25jc2dCQTI1WGFlUitqc2hIejJqOCtzWXlIa3RIdzFKZEt1TWplTHBHa3RYaWRxRGhBN2IvcW0xbXJCRG1nZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1jYWxjIjogewotICAgICAgInZlcnNpb24iOiAiOC4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY2FsYy8tL3Bvc3Rjc3MtY2FsYy04LjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU21XTVNKbUI4TVJublVMbGR4MGxRSXloU052dURsOUhmclprYXFxRS9XSEFoVG9Zc0F2RHEreUFzQS9rSXlJTkRzek9wM1JoMEdGb051SDVZcHNtM1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjkiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY2xhbXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1jbGFtcC8tL3Bvc3Rjc3MtY2xhbXAtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJ5NGIxTGxvLzl6eitQS0MrMDMwS1VuUElUVEpBSGVPd2pmQXl5QjYwZVQwQW9yR0xkenA1MnMzMU9zUFJIUmY4TmNoa2dGb0cyeTZmQ2ZuMUlWMU93PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY29sb3ItZnVuY3Rpb25hbC1ub3RhdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWNvbG9yLWZ1bmN0aW9uYWwtbm90YXRpb24vLS9wb3N0Y3NzLWNvbG9yLWZ1bmN0aW9uYWwtbm90YXRpb24tNC4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJ5clRBVVpVYWI5czZDcHhreEM0clZnRkVWYVI2LzJQaXB2aTZxY2d2bllpVnFaY2JESEVvQkRoclh6eWI3RWZoMkNDZkhRTnRjcVdjSXJ1RFRJVWVnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY29sb3ItaGV4LWFscGhhIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY29sb3ItaGV4LWFscGhhLy0vcG9zdGNzcy1jb2xvci1oZXgtYWxwaGEtOC4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5MbzJEQ1JDOWVFNHcySm11S2dWQTNmR0wzZDAxa0dxNzUycFZBTEY2OHFwR0xteDJRcms5MVFUS2tkVXFxcDQ1VDFLMVhWOEloUXBjdTFob0FRZmxRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY29sb3ItcmViZWNjYXB1cnBsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWNvbG9yLXJlYmVjY2FwdXJwbGUvLS9wb3N0Y3NzLWNvbG9yLXJlYmVjY2FwdXJwbGUtNy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBHeGt1VkVJbndMSGdrTnhVYzRzZGc0ZzNweTd6VWVDUTlzTWZ3eUhBVCtFems4YTRPYWFWWjhsSVk1K29OcUEvQlhYZ0x5WHYwKzV3SFA2OFI3OWhnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY29sb3JtaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1jb2xvcm1pbi8tL3Bvc3Rjc3MtY29sb3JtaW4tNS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVzV1FHMEFxVEZRbXBCZWdlTExjMStjM2pJcUJOQjB6bERHUldSK2RRM3BSS0pMMW9lTXp5cW1IM28yUElmbjlNQmROclZQV2hEYlQ3NjlMeENUTEpRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAiY2FuaXVzZS1hcGkiOiAiXjMuMC4wIiwKLSAgICAgICAgImNvbG9yZCI6ICJeMi45LjEiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY29udmVydC12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1jb252ZXJ0LXZhbHVlcy8tL3Bvc3Rjc3MtY29udmVydC12YWx1ZXMtNS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgycEMxeGtKWnRjSkVmaUx3NlVYblhWWFNjZ3RCcmpsTzVDQm11RFFjK2RsYjg4WlloZUZzalRuNDArekJWaTNEa2ZGN2llek8wbkpVUExjSkszcHZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY3VzdG9tLW1lZGlhIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtY3VzdG9tLW1lZGlhLy0vcG9zdGNzcy1jdXN0b20tbWVkaWEtOC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTd5aTI1dkRBb0hBa2JoQXpYOWRIeDJ5YzZudFM0alF2ZWpyTmNDK2NzUUpBWGpqMTVlN1ZjV2ZNZ0xxQk5BYk92cWk1dUlhOWh1T1Z3ZEhiZitzS3FnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtY3VzdG9tLXByb3BlcnRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMi4xLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWN1c3RvbS1wcm9wZXJ0aWVzLy0vcG9zdGNzcy1jdXN0b20tcHJvcGVydGllcy0xMi4xLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wSURKWWhnVTh4RHYxS1k2K1ZnVXd1UWtWdG1ZelJ3dStkTWpubWRNYWZYWXY4NlNXcWZ4a2M3cWREdldTMzh2c2phRXR2OGUwdkdPVVFyQWlNQkxwUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWN1c3RvbS1zZWxlY3RvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1jdXN0b20tc2VsZWN0b3JzLy0vcG9zdGNzcy1jdXN0b20tc2VsZWN0b3JzLTYuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mZ1ZrbXlpV0R3bUQzSmJwQ21CNDVTdnZsQ0Q2ejlDRzZJZTZJZXJlMjJXNWFIZWE2b1dhN0VNMmJwbnYyRmozSTk0TDNWYnR2WDlLcXdTaTVhRnpTZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWRpci1wc2V1ZG8tY2xhc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1kaXItcHNldWRvLWNsYXNzLy0vcG9zdGNzcy1kaXItcHNldWRvLWNsYXNzLTYuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lcW40bTcwUDAzMVBGN1pRSXZTZ3k5UlNKNXVJMjE3MU8vT08vemNSTllwSmJ2YWVLRlVsYXIxYUo3cm1naVF0Ym0wRlNQc1Jld2pwZFMwT2V3N01QQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1kaXNjYXJkLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZGlzY2FyZC1jb21tZW50cy8tL3Bvc3Rjc3MtZGlzY2FyZC1jb21tZW50cy01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK0w4MjA4T1ZiSFZGMlVRZjFpRG1SY2JkakprdUJGNklTMjl5QkRTaVdVSXpwWWFBaHRObDZKWW5ZbTEyRm5rZUN3UXFGNUxla2xPdTZyQXFnZkJacVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInBvc3Rjc3MtZGlzY2FyZC1kdXBsaWNhdGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZGlzY2FyZC1kdXBsaWNhdGVzLy0vcG9zdGNzcy1kaXNjYXJkLWR1cGxpY2F0ZXMtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXptWDNJb1NJMmFvZW54SFY2QzdwbG5nSFdXaFVPVjNzUDFUOHkyaWZ6eHpidG51aGsxRWRQd20wUzFiSVVOYUoyZU5iV2VHTEV3enc4aHVQRDY3YVF3PT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJwb3N0Y3NzLWRpc2NhcmQtZW1wdHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1kaXNjYXJkLWVtcHR5Ly0vcG9zdGNzcy1kaXNjYXJkLWVtcHR5LTUuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16UHo0V2xqaVN1TFdzSTBpcjRNY25yNHFRUTVlMVVrYzNpN1VmRTJYY3J3S0syTElQSXFFNWp4TVJ4TzZHYkkzY3YvL3p0WERzWHdFV1QzQkhPR2gzQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1kaXNjYXJkLW92ZXJyaWRkZW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1kaXNjYXJkLW92ZXJyaWRkZW4vLS9wb3N0Y3NzLWRpc2NhcmQtb3ZlcnJpZGRlbi01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMjFuT0w3UnFXUjFrYXNJVmRLczhITnFRSmhGeExzeVJmQW5VRG00RmU0dDRtQ1dMOU9KaUh2bEhQamNkOHpjNU15dTg5Yi83d1pEbk9TakZnZVdSdHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInBvc3Rjc3MtZG91YmxlLXBvc2l0aW9uLWdyYWRpZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWRvdWJsZS1wb3NpdGlvbi1ncmFkaWVudHMvLS9wb3N0Y3NzLWRvdWJsZS1wb3NpdGlvbi1ncmFkaWVudHMtMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdYK0Z1RS91QlI2ZXNrT0srNHZrWGdUNnBEa2V4TG9rUGF6L0FiSm5hOXM1S3pwL3lsNDg4cEtQamh5MG9iQjQ3NW92ZlQxV3Y4aG83VS9jSE5hUmdRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWVudi1mdW5jdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWVudi1mdW5jdGlvbi8tL3Bvc3Rjc3MtZW52LWZ1bmN0aW9uLTQuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rcEE2RnNMcmErTnFjRm5MODFUbnNVK1o3b3JHdERUeGNPaGw2cHdYZUVxMXlGUHBSTWtDRHBIaHJ6OENGUURyL1dmbTBqTGlOUTFPc0dHUGpscVB3QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWZsZXhidWdzLWZpeGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZmxleGJ1Z3MtZml4ZXMvLS9wb3N0Y3NzLWZsZXhidWdzLWZpeGVzLTUuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xOGY5dm9CeWFrN2JUa3RSMlFnRHZlZ2xwbjlEVGJCV1BVelNPZTlnME40V1IvMmVTdDZWcmNiZjBobXNwdk1JNllXR3l3ejZCOWY3anpwRk5KSmduUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1mb2N1cy12aXNpYmxlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtZm9jdXMtdmlzaWJsZS8tL3Bvc3Rjc3MtZm9jdXMtdmlzaWJsZS02LjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWNLdVVVL2RnTnNzdElLNkhFTEZSVDVZM2xick1MRU93RytBNHM1Y0ErZngzQTN5L0pUcTNYOUxhT2ozT0MzQUxIMFhxeXJnUUlnZXkvTUlaOFdjenc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1mb2N1cy13aXRoaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1mb2N1cy13aXRoaW4vLS9wb3N0Y3NzLWZvY3VzLXdpdGhpbi01LjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnZqRE4rK0MwbXU4ano0YWY1ZDUyQ0IxODRvZ2cvc1N4QUZTK29VSlFxMlN1Q2U3VDVVMmlJc1ZKdHNDcDJkNlI0ajBqcjUrcTNyUGtCVlprWEQ5ZlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1mb250LXZhcmlhbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1mb250LXZhcmlhbnQvLS9wb3N0Y3NzLWZvbnQtdmFyaWFudC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWZta0JhQ0FMRDcyQ0syYTlpNDY4bUEvK3RyOS8xY0J4UlJNWE9VYVpxTzQzb1dQUjVpbWN5UGpYd3V2N1BYYkNpZDRuZGxQNXpXaGlkUVZWYTNobUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInBvc3Rjc3MtZ2FwLXByb3BlcnRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1nYXAtcHJvcGVydGllcy8tL3Bvc3Rjc3MtZ2FwLXByb3BlcnRpZXMtMy4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUl1RTZnS1Nkb1VOY3ZrR0lxZHRqdGNNdFpJRnlYWmhtRmQ1UlVsZzk3aVZFdnAxQlpLVjVuZ3NBakNqclZ5KzE0dWhHQlFsOXR6bWkxUXdxNGtxVk9nPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJwb3N0Y3NzLWltYWdlLXNldC1mdW5jdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWltYWdlLXNldC1mdW5jdGlvbi8tL3Bvc3Rjc3MtaW1hZ2Utc2V0LWZ1bmN0aW9uLTQuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05VDJyOXJzdll6bTVuZHNCRThXZ3RyTWxJVDdWYnRUZkU3YjNCUW51ZFVxbkJjQm83TDc1OG9jK28rcGRqL2RVVjBsNXdqd1NkamVPSDJEWnRmdjhxdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWltcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1pbXBvcnQvLS9wb3N0Y3NzLWltcG9ydC0xNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhwcitKMDVCMkZWWVVBWEhlSzFZeUkyNjdKL2RERGhNVTZCNmNpdm04aFNZMWpZSm5CWHh6S0RLRHN3ekptdExIcnlyamhuRGpxcXAvNDl0OEZBTGV3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMC4wIiwKLSAgICAgICAgInJlYWQtY2FjaGUiOiAiXjEuMC4wIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMS43IgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtaW5pdGlhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWluaXRpYWwvLS9wb3N0Y3NzLWluaXRpYWwtNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTB1ZUQ3clBxWDhQbjF4SklqYXkwQVplSXVEb0YrVitWdk10L3VPbm4rNGV6VUtoWk0vTm9rRGVQNkR3TU55SW9ZQnl1Ti85NElRbnQ1RkVrYU41OXhRPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJwb3N0Y3NzLWpzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtanMvLS9wb3N0Y3NzLWpzLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kRExGOHBFTzE5MWhKTXRsSEZQUmE4eHNpekhhTTgyTUxmTmtVSGRVdFZFVjN0Z1RwNW9qKzhxYkVxWU01N1NMZmM3NEtTYncvLzRTZUptYTJMUlZJdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbWVsY2FzZS1jc3MiOiAiXjIuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtbGFiLWZ1bmN0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbGFiLWZ1bmN0aW9uLy0vcG9zdGNzcy1sYWItZnVuY3Rpb24tNC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXh1WGxsNGlzUjAzQ3JRc214eXo5MkxKQjJ4WDluK3BaSjVqRTlKZ2NubXNDYW1tTHlLZGx6ckJpbisyNWR5NndJamZoSnBLQkFOODBnc1RsQ2dSazJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtcHJvZ3Jlc3NpdmUtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWxvYWQtY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbG9hZC1jb25maWcvLS9wb3N0Y3NzLWxvYWQtY29uZmlnLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12RUpJYzhSZGlCUnUzb1JBSTB5bWVyT24rN3JQdU12UlhzbFR2WlVLWm9uREhGSWN6eHp0SXlKMXVyeE0xeDlKWEVpa3ZwV1dUVVVxYWw1ai84UWd2QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxpbGNvbmZpZyI6ICJeMi4wLjUiLAotICAgICAgICAieWFtbCI6ICJeMi4xLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlhbWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4zLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YW1sLy0veWFtbC0yLjMuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJlSFdmamFvWGdUQkMyak5NMUxSZWY2MlZRYTB1bXR2UmlEU2s2SFN6VzdSdlM1WXRrYWJKcndZTExFS1dCYzhhNVUyUFRTQ3MrZEpqVVRKZGxIc1dRPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWxvYWRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLWxvYWRlci8tL3Bvc3Rjc3MtbG9hZGVyLTYuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XYmJZcG1BYUtjdXgvUDY2Ylo0MGJwV3NCdWNqeC9UVGdWVnpSWjl5VU84eVFmVkJsYW1lSjBaR1ZhUGZINjRoTlNCaDYzYStJQ1A1bnFPcEJBMHcrUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvc21pY29uZmlnIjogIl43LjAuMCIsCi0gICAgICAgICJrbG9uYSI6ICJeMi4wLjUiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuNSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm82ZEowNENtU2p1em53SlNTM3BVZVdtZC9IMGZmVGxrWFhnd1ppK2VxMVVDbXFRd0NoK2VMc1lPWUN3WTk5MWkyRmFoNGgxQkVNQ3g0cVRoR2JzaUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjUuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjUuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNvZnR1VFJPdi9jUmpDemUvc2NqR3lpRHRjVXl4dzFyZ1lRU1pZN1hUbXRSNWhYK2RtNzZpRGJUSDhUa0xQSENRbWxiUVZTU2JOWkNQTTJoYjBrbm5RPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInlhbGxpc3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLWxvZ2ljYWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1sb2dpY2FsLy0vcG9zdGNzcy1sb2dpY2FsLTUuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SSFh4cGxDZUxoOVZqaW52TXJaT05xN2ltNHdqV0dsUkpBcW1BVkxYeVphWHdmRFdQNzMvb3E0TmRJcCtPWndoUVVNajB6anFEZk01Rmo3cWJ5K0I0Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1tZWRpYS1taW5tYXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1tZWRpYS1taW5tYXgvLS9wb3N0Y3NzLW1lZGlhLW1pbm1heC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteURVdkZmOVFkRlpUdUNVZzBnMHVOU0hWbEo1WDFsU3pEWmpQU0ZhaUNXdmpnc3Z1OHZFVnh0YWhQckxNaW5JREVFR254NmNCZTZpcWR4NVlXejA4d1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInBvc3Rjc3MtbWVyZ2UtbG9uZ2hhbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1tZXJnZS1sb25naGFuZC8tL3Bvc3Rjc3MtbWVyZ2UtbG9uZ2hhbmQtNS4xLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlDSTlnWkIrUExOc2tySzBCQjMvMk96UG5HaFBrQkV3bXdoZllrMWlsQkhZVkFaQjcvdGtUSEZCQW5DcnZCQk9tZVl5TVl3M0RNalQ1NVN5eE1CempRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIiwKLSAgICAgICAgInN0eWxlaGFja3MiOiAiXjUuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtbWVyZ2UtcnVsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1tZXJnZS1ydWxlcy8tL3Bvc3Rjc3MtbWVyZ2UtcnVsZXMtNS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBSMkl1WXBnVTkzeTlsaFZiTy9PeWxUdEtNVmNIYjY3empXSWZDaUtSOXJXTDNHVWsxNjc3TEFxRC9CY0hpenVrZFpFalQ4UnUzb0hSb0FZb0p5NDRnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAiY2FuaXVzZS1hcGkiOiAiXjMuMC4wIiwKLSAgICAgICAgImNzc25hbm8tdXRpbHMiOiAiXjMuMS4wIiwKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLW1pbmlmeS1mb250LXZhbHVlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW1pbmlmeS1mb250LXZhbHVlcy8tL3Bvc3Rjc3MtbWluaWZ5LWZvbnQtdmFsdWVzLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lbDNtWVRneDEzWkFQUGlyU1ZzSHFGemwrQkJCRHJYdmJ5U3ZQR0ZuUWNUSTRpTnNsclBhRnE0bXVUa0xabUtsR2s0Z3lGQVlVQk1IMzArSHVyUkV5QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLW1pbmlmeS1ncmFkaWVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1taW5pZnktZ3JhZGllbnRzLy0vcG9zdGNzcy1taW5pZnktZ3JhZGllbnRzLTUuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WR3ZYTVRwQ0VvNHFIVE5TYTlBMGEzRCtkeEdGWkNZd1I2Sm9raysvM29CNmZsdTIvUG5QWEFoMng3eDUyRWtZNXhsSUhMbStMZTh0SnhlLzdUTmh6dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvbG9yZCI6ICJeMi45LjEiLAotICAgICAgICAiY3NzbmFuby11dGlscyI6ICJeMy4xLjAiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtbWluaWZ5LXBhcmFtcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW1pbmlmeS1wYXJhbXMvLS9wb3N0Y3NzLW1pbmlmeS1wYXJhbXMtNS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSttZVBBM01nZG1WbXY2ZyszMHJuNTdVU2pPR1NBeXV4VW1rZmlXcHphbFo4YWlCa2RQWWpYV3RIdXdKR20xdjVPankwWjBMYVNZaEhhTEpRQjBQOEp3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAiY3NzbmFuby11dGlscyI6ICJeMy4xLjAiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtbWluaWZ5LXNlbGVjdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW1pbmlmeS1zZWxlY3RvcnMvLS9wb3N0Y3NzLW1pbmlmeS1zZWxlY3RvcnMtNS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5QSnU3T2paSlRzVlVtUGRtMlRjYWlvaEl3eFArdjhoYTlOZWhRMnllOXN6djRvcmlyUlUzU0RkdFVtS0grMTBuem4wYkF5T1haMFVFcjdPcHZMZWhnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC41IgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3MtbW9kdWxlcy1leHRyYWN0LWltcG9ydHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1tb2R1bGVzLWV4dHJhY3QtaW1wb3J0cy8tL3Bvc3Rjc3MtbW9kdWxlcy1leHRyYWN0LWltcG9ydHMtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJkSGxlRm5QM2taNE5ZRGh1R2xWSytDTXJRL3BxVW04Yngvb0dMOTNLNmdWd2ljbHZYNXgwbjc2ZllNS3VJR0t6bEFCT3kxM3pzdnFqYjBmOTJURVh3PT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJwb3N0Y3NzLW1vZHVsZXMtbG9jYWwtYnktZGVmYXVsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW1vZHVsZXMtbG9jYWwtYnktZGVmYXVsdC8tL3Bvc3Rjc3MtbW9kdWxlcy1sb2NhbC1ieS1kZWZhdWx0LTQuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yL3UyenJhc3BvQUN0cmJGUm5UaWpNaVF0YjRHVzRCdmF0amFHL2JDallRbzhrTFRkZXZDVWx3dUJIeDJzQ25TeXJJM3gzcWo0WksxajVMUUJnem13QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImljc3MtdXRpbHMiOiAiXjUuMC4wIiwKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMiIsCi0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1tb2R1bGVzLXNjb3BlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtbW9kdWxlcy1zY29wZS8tL3Bvc3Rjc3MtbW9kdWxlcy1zY29wZS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaG5jaWh3RkEyeVBhdGg4b1oxNVBacXZXR2tXZitYVWZRZ1VHYW1TNExxb1AxYW5RTE9zT0p3MHZyN0o3SXdMcG9ZOWZhdEEycWlHVUdtdVpMMElxbGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1tb2R1bGVzLXZhbHVlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW1vZHVsZXMtdmFsdWVzLy0vcG9zdGNzcy1tb2R1bGVzLXZhbHVlcy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkR4SGtBaUVHSTc4Z1Myb2Z5dkNzdTdpeWNSdjdvcXc1eE1XbjlpTW9SME4vN21mOUQ1MGVjUXFVbzVCWjlaaDJ2SDRiQ1VSL2t0Q3FiQjltOHZKalE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpY3NzLXV0aWxzIjogIl41LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLW5lc3RlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5lc3RlZC8tL3Bvc3Rjc3MtbmVzdGVkLTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tRXA0eFBNaTViU1dpTWJzZ29QZmNQNzRsc1dMSGtRYlpjM3NZK2pXWWQ2NUNVd1hyVWFUcDBmbU5wYTAxWmNFVEtsSWdVZEZOL01wUzJ4WnRxTDlkUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1uZXN0aW5nIjogewotICAgICAgInZlcnNpb24iOiAiMTAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5lc3RpbmcvLS9wb3N0Y3NzLW5lc3RpbmctMTAuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Fd01rWWNoeGlEaUtVaGxKR3pXc0Q5YjJ6dnEvcjJTU3ViY1JyZ1AranVqTVhGenF2QU5MdDE2bEpBTkMrNXVaNmhqSTdscFJtSTZPOEpJbCs4bDFLQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBjc3N0b29scy9zZWxlY3Rvci1zcGVjaWZpY2l0eSI6ICJeMi4wLjAiLAotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLW5vcm1hbGl6ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1ub3JtYWxpemUvLS9wb3N0Y3NzLW5vcm1hbGl6ZS0xMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSs1dzE4L3JEZXY1bXFFUmNHM1c1R1pOTUphMWVvWVlOR284Z0I3dEV3YW9zMGFqazNaWEFJNG1IR2NOVDQ3TkUrWm5aRDFwRXBVT0ZMdmx0SXdtZUpBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGNzc3Rvb2xzL25vcm1hbGl6ZS5jc3MiOiAiKiIsCi0gICAgICAgICJwb3N0Y3NzLWJyb3dzZXItY29tbWVudHMiOiAiXjQiLAotICAgICAgICAic2FuaXRpemUuY3NzIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1ub3JtYWxpemUtY2hhcnNldCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS1jaGFyc2V0Ly0vcG9zdGNzcy1ub3JtYWxpemUtY2hhcnNldC01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbVNnVUorcGQvbGRSR1Z4MjZwMnd6OWROWjdqaTZQbjhWV0Jhak1YRmY4ams3dlVvU3JaMmx0L3daUjdEdGxaWUtlc21aSTY4MHFqcjJDZUZGMmZiVWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLWRpc3BsYXktdmFsdWVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtbm9ybWFsaXplLWRpc3BsYXktdmFsdWVzLy0vcG9zdGNzcy1ub3JtYWxpemUtZGlzcGxheS12YWx1ZXMtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdQNEtJTTRvMmRhelFYV21GYXFNbWN2c0ttaGRJTkZibGdTZVJnbjhCSjZ2eGFNeWFKa3dBenBQcHV2U0lvRy9ybVgzTStJclJaRXoySDBnbHJRTkVBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXBvc2l0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS1wb3NpdGlvbnMvLS9wb3N0Y3NzLW5vcm1hbGl6ZS1wb3NpdGlvbnMtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZVcENiMEc0ZW9mVENRTEZWdUkzRVZOWnpCTlBpSUtjQTFBS1ZrYSszMWZUVnlTcGhyM1ZVZ0FJVUxCaHhaa0tnd0xJbWh6TVIyQncxT1JLKzM3SU5nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXJlcGVhdC1zdHlsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS1yZXBlYXQtc3R5bGUvLS9wb3N0Y3NzLW5vcm1hbGl6ZS1yZXBlYXQtc3R5bGUtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1GcExzcEdXa1F0QmNXSVJGTG1ld284YUMzSW1OMmkvSjN2OFlDRlV3RG5QdTNYejRyTG9oRE8yNmxHandOc1F4QjNZRjBLS1J3c3BHekUySkV1UzBnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS1zdHJpbmcvLS9wb3N0Y3NzLW5vcm1hbGl6ZS1zdHJpbmctNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9ZaUlKT2Y0VDlUMU40aSthYmVJYzdWZ20veFBDR2loNGJaejVObTAvQVJWSjdLNnhyRGxMd3Z3cU95ZHZ5TDNSSE5mOHFaazZ2bzNhYXRpdy9nbzN3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXRpbWluZy1mdW5jdGlvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1ub3JtYWxpemUtdGltaW5nLWZ1bmN0aW9ucy8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXRpbWluZy1mdW5jdGlvbnMtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURPRWt6SjRTQVh2NXhrSGwwV2E5Y1pMRjNXQ0JoRjNvMVNLVnhLUUFhKzBwWUtsdWVUcENndmtGQUhmaytZNjRlelg5K25JVEdyRFplVkdnSVRKWGpnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXVuaWNvZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1ub3JtYWxpemUtdW5pY29kZS8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXVuaWNvZGUtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFuQ0w1anprTlVtS1ZoWm9FTnAxbUppR05QY3NKQ3MxYWFSbVVSbWVKR0VTMjNaL2FqYWxuK0VQVEQrckJlTmtTcnlJKzJXVGRXK2x3Y1ZkT2lrcnBBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW5vcm1hbGl6ZS11cmwvLS9wb3N0Y3NzLW5vcm1hbGl6ZS11cmwtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV1cEdlRE8rUFZ0aE94U21kczQzWmVNZVpmS0grL0RLZ0dSRDdURWxra3lTNDZKWEFVaE16SUtpQ2E3QmFiUGVJeTNBUWNUa1h3VlZON0RicXNpQ2V3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibm9ybWFsaXplLXVybCI6ICJeNi4wLjEiLAotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtbm9ybWFsaXplLXdoaXRlc3BhY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1ub3JtYWxpemUtd2hpdGVzcGFjZS8tL3Bvc3Rjc3Mtbm9ybWFsaXplLXdoaXRlc3BhY2UtNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgzWko0dDNOVURFVElIVGEzdUVnNmFzV2pTQllMNUVka1ZCMHNEbmN4OUVSek9LQlZKSVVlRE85UnlBOVp3dGlnOEVsMWQ3OUhCcDBKRWk4d3ZHUW5BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy12YWx1ZS1wYXJzZXIiOiAiXjQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc3Rjc3Mtb3BhY2l0eS1wZXJjZW50YWdlIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtb3BhY2l0eS1wZXJjZW50YWdlLy0vcG9zdGNzcy1vcGFjaXR5LXBlcmNlbnRhZ2UtMS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFuNkJhNHBIQmlEdHlWcFNMeW1VVUVSTW8yY1U3cytPYno2QlRyUytneGtiblNCTktTdUQwQVZVYytDcEJNcnBWUEtLZm9WejBXUUNYK1Ruc3QwaTRBPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJwb3N0Y3NzLW9yZGVyZWQtdmFsdWVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtb3JkZXJlZC12YWx1ZXMvLS9wb3N0Y3NzLW9yZGVyZWQtdmFsdWVzLTUuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05VU83OVZVaFB3RWt6YmIzUk5wcXFnaGM2bGNZZWoxYXZlUXRlV1krNFBPSXdscWtZRTIxSEtXYUxERjZsV051cUNvYkVBeVRvdlZodEkzMlJidjJSUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNzc25hbm8tdXRpbHMiOiAiXjMuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLW92ZXJmbG93LXNob3J0aGFuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLW92ZXJmbG93LXNob3J0aGFuZC8tL3Bvc3Rjc3Mtb3ZlcmZsb3ctc2hvcnRoYW5kLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vdFlsL3lsSEs4WTliY0JuUExvM2ZvWUZMTDZhNkFrKzNFUUJQT1RSN2x1TVlDT3NpVlRVazFpTHZOZjZ0VlBOR1hjb0w5SG96MzdrcGZyaVJJRmI0QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLXBhZ2UtYnJlYWsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1wYWdlLWJyZWFrLy0vcG9zdGNzcy1wYWdlLWJyZWFrLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xSkd1OG9DalZYTGE5cTlyRlRvNE1iZWVBNUZNZTAwLzlDN2xONHZhNjA2UmRiK0hreFh0WHNtRURySXJhUTExZkd6L1d2S1dhOGdNdUNLa3JYcFRzUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1wbGFjZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXBsYWNlLy0vcG9zdGNzcy1wbGFjZS03LjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1I4aWdhWlJPQTZaNHB2MGQrYnZWcnZHWTRHVkhpaEJDQlFpZVhGWTNrdVN1TXlPbUVubmZGekhsL3RRdXFIWmtma0lWQkViRHZZY0ZmSG1wU2V0OWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1wcmVzZXQtZW52IjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3MtcHJlc2V0LWVudi8tL3Bvc3Rjc3MtcHJlc2V0LWVudi03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVDFMZ1JtNXVFVkZTRUY4M3ZIWkpWMnoxOWxIZzR5SnVaNmdYWlprcVZzcXY2M25scjZ6YWJNSDNsNFBjMDFGUUN5ZldWcmgyR2FVZUNWeTlQbytBYWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1jYXNjYWRlLWxheWVycyI6ICJeMS4xLjEiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtY29sb3ItZnVuY3Rpb24iOiAiXjEuMS4xIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLWZvbnQtZm9ybWF0LWtleXdvcmRzIjogIl4xLjAuMSIsCi0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1od2ItZnVuY3Rpb24iOiAiXjEuMC4yIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLWljLXVuaXQiOiAiXjEuMC4xIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLWlzLXBzZXVkby1jbGFzcyI6ICJeMi4wLjciLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtbmVzdGVkLWNhbGMiOiAiXjEuMC4wIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLW5vcm1hbGl6ZS1kaXNwbGF5LXZhbHVlcyI6ICJeMS4wLjEiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3Mtb2tsYWItZnVuY3Rpb24iOiAiXjEuMS4xIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLXByb2dyZXNzaXZlLWN1c3RvbS1wcm9wZXJ0aWVzIjogIl4xLjMuMCIsCi0gICAgICAgICJAY3NzdG9vbHMvcG9zdGNzcy1zdGVwcGVkLXZhbHVlLWZ1bmN0aW9ucyI6ICJeMS4wLjEiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtdGV4dC1kZWNvcmF0aW9uLXNob3J0aGFuZCI6ICJeMS4wLjAiLAotICAgICAgICAiQGNzc3Rvb2xzL3Bvc3Rjc3MtdHJpZ29ub21ldHJpYy1mdW5jdGlvbnMiOiAiXjEuMC4yIiwKLSAgICAgICAgIkBjc3N0b29scy9wb3N0Y3NzLXVuc2V0LXZhbHVlIjogIl4xLjAuMiIsCi0gICAgICAgICJhdXRvcHJlZml4ZXIiOiAiXjEwLjQuMTMiLAotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjIxLjQiLAotICAgICAgICAiY3NzLWJsYW5rLXBzZXVkbyI6ICJeMy4wLjMiLAotICAgICAgICAiY3NzLWhhcy1wc2V1ZG8iOiAiXjMuMC40IiwKLSAgICAgICAgImNzcy1wcmVmZXJzLWNvbG9yLXNjaGVtZSI6ICJeNi4wLjMiLAotICAgICAgICAiY3NzZGIiOiAiXjcuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtYXR0cmlidXRlLWNhc2UtaW5zZW5zaXRpdmUiOiAiXjUuMC4yIiwKLSAgICAgICAgInBvc3Rjc3MtY2xhbXAiOiAiXjQuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtY29sb3ItZnVuY3Rpb25hbC1ub3RhdGlvbiI6ICJeNC4yLjQiLAotICAgICAgICAicG9zdGNzcy1jb2xvci1oZXgtYWxwaGEiOiAiXjguMC40IiwKLSAgICAgICAgInBvc3Rjc3MtY29sb3ItcmViZWNjYXB1cnBsZSI6ICJeNy4xLjEiLAotICAgICAgICAicG9zdGNzcy1jdXN0b20tbWVkaWEiOiAiXjguMC4yIiwKLSAgICAgICAgInBvc3Rjc3MtY3VzdG9tLXByb3BlcnRpZXMiOiAiXjEyLjEuMTAiLAotICAgICAgICAicG9zdGNzcy1jdXN0b20tc2VsZWN0b3JzIjogIl42LjAuMyIsCi0gICAgICAgICJwb3N0Y3NzLWRpci1wc2V1ZG8tY2xhc3MiOiAiXjYuMC41IiwKLSAgICAgICAgInBvc3Rjc3MtZG91YmxlLXBvc2l0aW9uLWdyYWRpZW50cyI6ICJeMy4xLjIiLAotICAgICAgICAicG9zdGNzcy1lbnYtZnVuY3Rpb24iOiAiXjQuMC42IiwKLSAgICAgICAgInBvc3Rjc3MtZm9jdXMtdmlzaWJsZSI6ICJeNi4wLjQiLAotICAgICAgICAicG9zdGNzcy1mb2N1cy13aXRoaW4iOiAiXjUuMC40IiwKLSAgICAgICAgInBvc3Rjc3MtZm9udC12YXJpYW50IjogIl41LjAuMCIsCi0gICAgICAgICJwb3N0Y3NzLWdhcC1wcm9wZXJ0aWVzIjogIl4zLjAuNSIsCi0gICAgICAgICJwb3N0Y3NzLWltYWdlLXNldC1mdW5jdGlvbiI6ICJeNC4wLjciLAotICAgICAgICAicG9zdGNzcy1pbml0aWFsIjogIl40LjAuMSIsCi0gICAgICAgICJwb3N0Y3NzLWxhYi1mdW5jdGlvbiI6ICJeNC4yLjEiLAotICAgICAgICAicG9zdGNzcy1sb2dpY2FsIjogIl41LjAuNCIsCi0gICAgICAgICJwb3N0Y3NzLW1lZGlhLW1pbm1heCI6ICJeNS4wLjAiLAotICAgICAgICAicG9zdGNzcy1uZXN0aW5nIjogIl4xMC4yLjAiLAotICAgICAgICAicG9zdGNzcy1vcGFjaXR5LXBlcmNlbnRhZ2UiOiAiXjEuMS4yIiwKLSAgICAgICAgInBvc3Rjc3Mtb3ZlcmZsb3ctc2hvcnRoYW5kIjogIl4zLjAuNCIsCi0gICAgICAgICJwb3N0Y3NzLXBhZ2UtYnJlYWsiOiAiXjMuMC40IiwKLSAgICAgICAgInBvc3Rjc3MtcGxhY2UiOiAiXjcuMC41IiwKLSAgICAgICAgInBvc3Rjc3MtcHNldWRvLWNsYXNzLWFueS1saW5rIjogIl43LjEuNiIsCi0gICAgICAgICJwb3N0Y3NzLXJlcGxhY2Utb3ZlcmZsb3ctd3JhcCI6ICJeNC4wLjAiLAotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1ub3QiOiAiXjYuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLXBzZXVkby1jbGFzcy1hbnktbGluayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXBzZXVkby1jbGFzcy1hbnktbGluay8tL3Bvc3Rjc3MtcHNldWRvLWNsYXNzLWFueS1saW5rLTcuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05c0N0WmtPNmYvNU1MOVdjVExjSXlWMXl6OUQxcmYwdFdjK3VsS2N2VjMwczBpWktTL09OeUVUdm9Xc3I2dm5ybVcrWCtLbXVLM2dWL3c1RVduVDM3dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1yZWR1Y2UtaW5pdGlhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXJlZHVjZS1pbml0aWFsLy0vcG9zdGNzcy1yZWR1Y2UtaW5pdGlhbC01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZEUveTJYUmFxQWk2T3ZqekQyMnBqVFVROGVPZmM2bS9uYXRHSGdLRkJLOUR4Rm1JbTY5WW1hUlZRckdnRmxFZmMxSGVQSXVyWTBUbURlUk9LMDVySWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNCIsCi0gICAgICAgICJjYW5pdXNlLWFwaSI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1yZWR1Y2UtdHJhbnNmb3JtcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXJlZHVjZS10cmFuc2Zvcm1zLy0vcG9zdGNzcy1yZWR1Y2UtdHJhbnNmb3Jtcy01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmZiZGJtZ2lyNUF2cFc5Ukx0ZE9OeDFRb1lHMi9FdHFwTlFiRkFTRGxpeEJiQVl1VGNKMGRFQ3dscU5xSDdWYmFVbkVuaDhTcnhPZTJzUkluMjRYeVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1yZXBsYWNlLW92ZXJmbG93LXdyYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1yZXBsYWNlLW92ZXJmbG93LXdyYXAvLS9wb3N0Y3NzLXJlcGxhY2Utb3ZlcmZsb3ctd3JhcC00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS21GN1NCUHBoVDRnUFBjS1pjN2FEa3dlSGlLRUVPOGNsYS9HamNCSytja0t4aVpzbEl1M0M0R0NSVzNETmZMMG83eVc3a01RdTl4bFoxa1hSWExYdHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInBvc3Rjc3Mtc2VsZWN0b3Itbm90IjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtc2VsZWN0b3Itbm90Ly0vcG9zdGNzcy1zZWxlY3Rvci1ub3QtNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFpOWFmZmpBZTl4dS95OXVxV0grdEQ0cjYvaERhWEpydWs4eG4yeDF2enhDMlUzSjNMS08zekpXNEN5eGxOaEE1NnBBREovZGpwRXdwSDFSQ2xJMnJRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIiOiAiXjYuMC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy1zZWxlY3Rvci1wYXJzZXIvLS9wb3N0Y3NzLXNlbGVjdG9yLXBhcnNlci02LjAuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVhVjFHbDRtVUVWNGRkaERudi94dGo3c3h3cnd4ZGV0SGRXVUduVDRWSlFmKzRkMDV2NmxIWVpyOE41NzNrNVowQlZpc3M3QkRoZld0S1MzK3NmQXFRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY3NzZXNjIjogIl4zLjAuMCIsCi0gICAgICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICJeMS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicG9zdGNzcy1zdmdvIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc3Rjc3Mtc3Znby8tL3Bvc3Rjc3Mtc3Znby01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDc1S3NIMXptNVpySHl4UGFrQXhKV3RreVhldzVxd1M3MHY1NmV4d3Z3NTQyZDlDUnRUbzc4SzBXZUZ4WkI0RzdKWEtLTWJFWnRaYXlUR2RJa3kvZUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6ICJeNC4yLjAiLAotICAgICAgICAic3ZnbyI6ICJeMi43LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbW1hbmRlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci03LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFyV1hCK1pRU1ZQbUlXSWh0RU85SCtnd0hhTUdZaUY1Q2h2b0orSzlaR0hHL3NWc2E2eWllc0FEMUdDL3g0NnNFVDAwWGx3bzF1NDlSVlZWenZjU2t3PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJjc3MtdHJlZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy10cmVlLy0vY3NzLXRyZWUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10UnBkcHBGN1RSYXpacmpKNnYzc3R6djkzcXhSY1NzRm1XNmNYMFptMk5WS3B4RTFXVjFIYmxuZ2hWdjlUcmVpcmVIa3FJL1ZERXNmb2xSRjFwNnk3UT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibWRuLWRhdGEiOiAiMi4wLjE0IiwKLSAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJtZG4tZGF0YSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMTQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZG4tZGF0YS8tL21kbi1kYXRhLTIuMC4xNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRuNndkMHV3NUdzZHN3UEZmc2dNcDVOU0IwL2FEZTZmSzk0WUpWL0FKRFlYTDZIVkxXQnN4ZXE3anM3QWQrbVUySzlMQWx3cGs2a04yRDVtd0NQVm93PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJzb3VyY2UtbWFwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IgotICAgICAgICB9LAotICAgICAgICAic3ZnbyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjguMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N2Z28vLS9zdmdvLTIuOC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItK04vUTlrVjErRitVZVdZb1NpVUxZbzR4WVNEUWxUZ2IrYXlNb2JBWFB3TW5Mdm9wN294S01vOU96SXJYNXgzZVM0TDRmMlVIaGM5YXhYd1k4RHBDaGc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0cnlzb3VuZC9zYXgiOiAiMC4yLjAiLAotICAgICAgICAgICAgImNvbW1hbmRlciI6ICJeNy4yLjAiLAotICAgICAgICAgICAgImNzcy1zZWxlY3QiOiAiXjQuMS4zIiwKLSAgICAgICAgICAgICJjc3MtdHJlZSI6ICJeMS4xLjMiLAotICAgICAgICAgICAgImNzc28iOiAiXjQuMi4wIiwKLSAgICAgICAgICAgICJwaWNvY29sb3JzIjogIl4xLjAuMCIsCi0gICAgICAgICAgICAic3RhYmxlIjogIl4wLjEuOCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLXVuaXF1ZS1zZWxlY3RvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zdGNzcy11bmlxdWUtc2VsZWN0b3JzLy0vcG9zdGNzcy11bmlxdWUtc2VsZWN0b3JzLTUuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01SmlPRGxFTHJ6OEwySHd4ZlBuaE9XWllXRHhWSFdMODN1Zk92ODROcmNnaXBJN1RhZVJzYXRBaEs0VHIyL1ppWWxkcEsvd0J2dzVCRDNxZmFLOTZHQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBvc3Rjc3Mtc2VsZWN0b3ItcGFyc2VyIjogIl42LjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJwb3N0Y3NzLXZhbHVlLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLXZhbHVlLXBhcnNlci8tL3Bvc3Rjc3MtdmFsdWUtcGFyc2VyLTQuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xTk5DczZ1dXJma1ZiZVhHNFM4SkZUOXQxOW00NUlDbmlmOHpXTGQ1b1BTWjUwUW53TWZLK0gzanY0MDhkNGp3LzdCdHR2NWF4UzVJaUhvTGFWTkhlUT09IgotICAgIH0sCi0gICAgInByZWx1ZGUtbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJlbHVkZS1scy8tL3ByZWx1ZGUtbHMtMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZrY0RQclJabzFRWkxibjVSTEdQcGcvV21JUTY1cW9XV2hjR0tmL2I1ZXBsa2thclgwbTl6OHBwQ2F0NG1sT3FVc1dweU51WWdPM1ZSeXJZSFN6WDVnPT0iCi0gICAgfSwKLSAgICAicHJldHRpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHRpZXIvLS9wcmV0dGllci0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZmNPV1NubnBDcm92QnNtRlpJR0l5OVVxSzJGYUk3SHFheCtESU8wQTlVeGVWb1k0aXdleWFGalM1VGF2Wk45N0hmZWhwaDBuaHNabmpsVkt6RVFTclE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInByZXR0eS1ieXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktYnl0ZXMvLS9wcmV0dHktYnl0ZXMtNS42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZGdzAzOVRtckJxRks4bWEvN09MM3NEei9WeXRkdEpyMDQ0L1FVSnRIMHdLOWxiOWpMcTl0SnlJeFV3dFFKSHdhcjJCcXRpQTRpQ1dTd285SkxrekZnPT0iCi0gICAgfSwKLSAgICAicHJldHR5LWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1lcnJvci8tL3ByZXR0eS1lcnJvci00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQW9KNVlNQWNYS1l4S2h1SkdkY3ZzZStWb2M2djFSZ25zUjNuV2NZVTdxNHQ2ejBRNlQ4NnN2NVpxOFZJUmJPV1dGcHZkR0U4M0x0ZFNNTmQrNlkweHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb2Rhc2giOiAiXjQuMTcuMjAiLAotICAgICAgICAicmVuZGVya2lkIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwcmV0dHktZm9ybWF0IjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yNy41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFiMWd5NU9yUDUrekRmMkJ2bnpkbDNqc1RmMXFYVk1hemJ2Q29LaHRLcVZzNC9ZSzRvelg0Z0tRSkpWeU5lK2Nhak5QbjBLb0MwTUMzRlVtYUhXRW1RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xNy4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJyZWFjdC1pcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNy4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE3LjAuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXcyR3N5dWtMNjJJSm5sYWZmL25SZWdQUVI5NEMvWFhhbXZNV21TSFJKNHk3VHMvNG9jR1JtVEh2T3M4UFNFNnBCM2RXT3JEL251ZXVVNXNkdUJzUTR3PT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJwcm9jZXNzLW5leHRpY2stYXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9jZXNzLW5leHRpY2stYXJncy8tL3Byb2Nlc3MtbmV4dGljay1hcmdzLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zb3VVT3BRaHRncmJPYTE3SjcrdXhPVHBJVFlXYUdQNy9BaG9SMytBKy8xZTlza3J6ZWxHaS9kWHpFWXl2Ynh1YkVGNlduMnlwc2NUS2lLSkZGbjFhZz09IgotICAgIH0sCi0gICAgInByb21pc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvbWlzZS8tL3Byb21pc2UtOC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJaUE5QS1RPWVZORUVLRmFxMUhxVGdPd1pEKzQvWUhTNXVrTHpRQ3lwa2orT2tZeDdpdjBtQTkxbEpscFBQWjh2TWF1M0lJR2o1UWx3cngrOGlpU21nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXNhcCI6ICJ+Mi4wLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicHJvbXB0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9tcHRzLy0vcHJvbXB0cy0yLjQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnhOdi9rTGd1Q0E3cDNqRThvTDJhRUJzckpXZ0Fha0JwZ21nSzZscFBXVitXdU9tWTZyMi96YkFWblArVDhiUWxBMG56SFhTSlNKVzBIcTd5bGFEMlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJrbGV1ciI6ICJeMy4wLjMiLAotICAgICAgICAic2lzdGVyYW5zaSI6ICJeMS4wLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicHJvcC10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE1LjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvcC10eXBlcy8tL3Byb3AtdHlwZXMtMTUuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vajg3Q2daSUNkdWxVb2hvZ1ZBUjdBamxDMDMyN1U0ZWw0TDZlQXZPcUNldWRNRFZVME5UaE5hVitiOURmNGRYZ1NQMWdYTVRuUGRoZmUvMnFESDVjZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxvb3NlLWVudmlmeSI6ICJeMS40LjAiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICJeNC4xLjEiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE2LjEzLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlYWN0LWlzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE2LjEzLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE2LjEzLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yNGU2eW5FMkgrT0t0NGtxc092TmQ4a0JwVjY1em94YkE0QlZzRU9CM0FSVldRa2kvREh6YVVvQzVLdU9OL0JpY2NEYUNDVFpCdU9jZlpzNzBrUjhiUT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicHJveHktYWRkciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm94eS1hZGRyLy0vcHJveHktYWRkci0yLjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGxRc01MU1VEVVBUNDRqZHJVL08zN3FsbmlmaXREUCtad3JtbVpjb1NLeUxLdnRaeHB5VjBuMi9iRC9ONHRCQUFaL2dKRWRaVTdLTXJhb0sxK1hZQWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmb3J3YXJkZWQiOiAiMC4yLjAiLAotICAgICAgICAiaXBhZGRyLmpzIjogIjEuOS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcGFkZHIuanMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS45LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcGFkZHIuanMvLS9pcGFkZHIuanMtMS45LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wS0kvNjA3eG94U1RvSDdHak4xRmZTYkxvVTArYnRUaWNqc1FTV1FsaC9oWnlrTjhLcG1NZjd1WXdQVzNSK2FrWjZSL3cxOFpsWFNIQllYaVlVUE8zZz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicHNsIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BzbC8tL3BzbC0xLjkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRS9ac2RVNEhMcy82OGdZemdHVGtNaWNXVExQZEFmdEpMZkpGbExVQUFLWkdrU3ROVTcyc1pqVDY2U25NRFZPZk9XWS9ZQW9pRDdKeGE5aUh2bmdjYWc9PSIKLSAgICB9LAotICAgICJwdW55Y29kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdW55Y29kZS8tL3B1bnljb2RlLTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yUlYrelFEOHRWRnlzMjZsQUdSOVdVdVM0aVVBbmdKU2NNK1pSU0t0dmw1dEtlWjJ0NWJ2ZE5GZE5IQlc5RldSNGd1R0hsZ21zWjFHN0JTbTJ3VGJ1QT09IgotICAgIH0sCi0gICAgInB1cmUtcmFuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdXJlLXJhbmQvLS9wdXJlLXJhbmQtNi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZZZzBla3BLSUNTalBzd1lPdUM1c2t1L1RTV2FSWWxBMHFzWHFKZ00vZC80cExQSFB1VHhLN05iZjdqRkt6QWVlZFVoUjhDN0s5VXY2M0ZCc1NvOHhRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlCi0gICAgfSwKLSAgICAicSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9xLy0vcS0xLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1YvQ1Roa1hvNnh5RkVaVXVndy8rcElPeXdYY0RiRllnU2N0NWNUM2dxbGJrQkUxU0pkd3k2VVFvWnZvZGlXRi9ja1FMWnlERS9CdTFNNmdWdTVsVnc9PSIKLSAgICB9LAotICAgICJxcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMTEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcXMvLS9xcy02LjExLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU12am9NQ0p3RWFyU2JVWWs1TytubW9TelN1dFNzVHdGODV6Y0hQUTlPcmxGb1pPWUlqYXFCQUpJcUlYanB0eUQ1dlRoeEdxNTJYdS9NYUp6UmtJazRRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2lkZS1jaGFubmVsIjogIl4xLjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJxdWVyeXN0cmluZ2lmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9xdWVyeXN0cmluZ2lmeS8tL3F1ZXJ5c3RyaW5naWZ5LTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GSXFnajJFVXZUYTdSNTB1MHJHc3lUZnR6alltdi9hM2hPMzQ1YlpOcnFhYk5xanRnaURNZ21vNG1rVWpkK256VTVvRjNkQ2xLcUZJUFVLeWJVeXFvUT09IgotICAgIH0sCi0gICAgInF1ZXVlLW1pY3JvdGFzayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9xdWV1ZS1taWNyb3Rhc2svLS9xdWV1ZS1taWNyb3Rhc2stMS4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU51YU5TYTZmbEtUNUphU1lRekpvazA0SnpUTDFDQTZhR2h2NXJmTFczUGdxQStNMkNocFpRbkFDOGg4aTRaRmtCUzhYNVJxa0RCSEE3cjRoZWozSzlBPT0iCi0gICAgfSwKLSAgICAicmFmIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JhZi8tL3JhZi0zLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU3E0Q1c0UWh3T0hFOHVjbjZKMzRNcXRaQ2VXRlAyYVFTbXJscm9ZZ3FBVjFQalN0SWhKWHhZdVRnVUlma0VrN3pUTGptSWpMbVU1cStmYkQxTm5PSkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwZXJmb3JtYW5jZS1ub3ciOiAiXjIuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInJhbmRvbWJ5dGVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JhbmRvbWJ5dGVzLy0vcmFuZG9tYnl0ZXMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZZbDNpT1grNENLVVd1eEdpOVVraGllNmZzcVhxUzlGRTJaYWljNHRORkQyTjJRUWFYT01GYnVLSzRRbURIQzBKTzZCMVpwNDFKMExwVDBvUjY4YW1RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2FmZS1idWZmZXIiOiAiXjUuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInJhbmdlLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhyZ3N4K29ycW95Z25taEZiS2FIRTZjMjk2SitIVEFRWG94RUY2Z051cFJPbW1HSlJveXpmRzNjY0F2ZXFDQnJ3ci8yeXhRNUJWZC9HVGw1YWdPd1NnPT0iCi0gICAgfSwKLSAgICAicmF3LWJvZHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmF3LWJvZHkvLS9yYXctYm9keS0yLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXFKQnRFeVZnUzBabVBHZENGUFdKM0ZyZW9xdkc0TVZRbG4va0NnRjdPbHE5NUliT3AwL0JXeU13YmR0bjRWVHZrTThZN2toQ1EyWGdrL3RjckNYaWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJieXRlcyI6ICIzLjEuMiIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICIyLjAuMCIsCi0gICAgICAgICJpY29udi1saXRlIjogIjAuNC4yNCIsCi0gICAgICAgICJ1bnBpcGUiOiAiMS4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJ5dGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnl0ZXMvLS9ieXRlcy0zLjEuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9OZjdUeXpUeDZTM3lSSk9iT0FWNzk1NnI4Y3IyK09qOEFDNWR0OHdTUDNCUUFvZVg1OE5vSHlDVThQOHpHa05YU3RqVFNpNmZ6TzZGMHBCZGNZYkVnPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJpY29udi1saXRlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNC4yNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNC4yNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXYzTVhuWkFjdm55d2tUVUVab21JQWN0bGU3UlhYZWVkT1IzMXd3bDdWbHlvWE80UWk5YXJ2U2VuTlFXbmUxVGNSd2hDTDFId0xJMjFiRXFkcGo4L3JBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzYWZlci1idWZmZXIiOiAiPj0gMi4xLjIgPCAzIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInJlYWN0IjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC8tL3JlYWN0LTE3LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ25oUHQ3NWkvZHEvejMvNnEvMGFzUDc4RDB1NTkyRDVMMXBkN004UCtkY2s2RnUvakplTDZpVlZLMjNmcHRTVVpqOFZqZisrN3dYQThVTmNsR1FjYkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb29zZS1lbnZpZnkiOiAiXjEuMS4wIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgInJlYWN0LWFwcC1wb2x5ZmlsbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1hcHAtcG9seWZpbGwvLS9yZWFjdC1hcHAtcG9seWZpbGwtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNaNDFjeGlVNWxsSUIwMDN5eHhRQllyQVJCcWUwcmVwcVBUVFlCVG1NcVR6OXN6ZUJiRTM3QmVoQ0U4OTFOWnNtZFpxcVAreFdLZFQzZW8zdk96Tjh3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY29yZS1qcyI6ICJeMy4xOS4yIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMS4xIiwKLSAgICAgICAgInByb21pc2UiOiAiXjguMS4wIiwKLSAgICAgICAgInJhZiI6ICJeMy40LjEiLAotICAgICAgICAicmVnZW5lcmF0b3ItcnVudGltZSI6ICJeMC4xMy45IiwKLSAgICAgICAgIndoYXR3Zy1mZXRjaCI6ICJeMy42LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVhY3QtYXBwLXJld2lyZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtYXBwLXJld2lyZWQvLS9yZWFjdC1hcHAtcmV3aXJlZC0yLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdUZRV1RFclhlTERyTXpPSkhLcDBoOFAxejBMVjlIelBHc0o2YWRPdEdsQS9COVdmVDZTaGg0ajJ0TFRUR2xYT2ZpVng2dzZpV3BwN1NPQzVwdmsrZ0E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiXjUuNi4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS43LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNS43LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jQnpublE5S2pKcVU2N0I1MlJNQzY1Q01hcksyNjAwV0ZuYmtjYWl3V3EzeHkvNWhhRkpsc2hnbnBqb3ZNVkorSGZmNDlkOEdFbjBiODdDNXBEUTEwZz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicmVhY3QtZGV2LXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMTIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1kZXYtdXRpbHMvLS9yZWFjdC1kZXYtdXRpbHMtMTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04NEl2eG1yMTdLalV1cHlxekZvZGU2eEtoand1RUpEUk9XS0p5L0J0aGtMN1duNk5KOGg0V0U2ay9leEF2NkltUyswb1pMUlJXNWovYUlOTUh5ZUdlUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjE2LjAiLAotICAgICAgICAiYWRkcmVzcyI6ICJeMS4xLjIiLAotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjE4LjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImNyb3NzLXNwYXduIjogIl43LjAuMyIsCi0gICAgICAgICJkZXRlY3QtcG9ydC1hbHQiOiAiXjEuMS42IiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl40LjAuMCIsCi0gICAgICAgICJmaWxlc2l6ZSI6ICJeOC4wLjYiLAotICAgICAgICAiZmluZC11cCI6ICJeNS4wLjAiLAotICAgICAgICAiZm9yay10cy1jaGVja2VyLXdlYnBhY2stcGx1Z2luIjogIl42LjUuMCIsCi0gICAgICAgICJnbG9iYWwtbW9kdWxlcyI6ICJeMi4wLjAiLAotICAgICAgICAiZ2xvYmJ5IjogIl4xMS4wLjQiLAotICAgICAgICAiZ3ppcC1zaXplIjogIl42LjAuMCIsCi0gICAgICAgICJpbW1lciI6ICJeOS4wLjciLAotICAgICAgICAiaXMtcm9vdCI6ICJeMi4xLjAiLAotICAgICAgICAibG9hZGVyLXV0aWxzIjogIl4zLjIuMCIsCi0gICAgICAgICJvcGVuIjogIl44LjQuMCIsCi0gICAgICAgICJwa2ctdXAiOiAiXjMuMS4wIiwKLSAgICAgICAgInByb21wdHMiOiAiXjIuNC4yIiwKLSAgICAgICAgInJlYWN0LWVycm9yLW92ZXJsYXkiOiAiXjYuMC4xMSIsCi0gICAgICAgICJyZWN1cnNpdmUtcmVhZGRpciI6ICJeMi4yLjIiLAotICAgICAgICAic2hlbGwtcXVvdGUiOiAiXjEuNy4zIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwKLSAgICAgICAgInRleHQtdGFibGUiOiAiXjAuMi4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnJheS11bmlvbiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FycmF5LXVuaW9uLy0vYXJyYXktdW5pb24tMi4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IR3l4b09UWVV5Q002c3RVZTZFSmduZDRFb2V3QUk3ek1kZnFPK2tHam5sWm1CRHovY1I1cGY4ci9jUjRXcTYwc0wvcDBJa2NqVUVFUHdTM0dGckl5dz09IgotICAgICAgICB9LAotICAgICAgICAiZmluZC11cCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAvLS9maW5kLXVwLTUuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzgvUFhUMXdsTExEZ1R6RHM3c2pxOWh6ejB2WEQrem4rN3d5cEVlNGZYUXhDbWRtcWZHc0VQUXhtaUNTUUkzYWpGVjkxYlZTc3ZOdHJKUmlXNm5Hbmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxvY2F0ZS1wYXRoIjogIl42LjAuMCIsCi0gICAgICAgICAgICAicGF0aC1leGlzdHMiOiAiXjQuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImdsb2JieSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxMS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYnkvLS9nbG9iYnktMTEuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItamhJWGFPenkxc2I4SXlvY2FydVdTbjFUam1uQlZzOEF5aGN5ODNybXhOSjhxMnVXS0NBajNDbkpZK0twR1NYQ3VlQVBjMGkwNWtWdlZLdFAxdDlTM2c9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImFycmF5LXVuaW9uIjogIl4yLjEuMCIsCi0gICAgICAgICAgICAiZGlyLWdsb2IiOiAiXjMuMC4xIiwKLSAgICAgICAgICAgICJmYXN0LWdsb2IiOiAiXjMuMi45IiwKLSAgICAgICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKLSAgICAgICAgICAgICJtZXJnZTIiOiAiXjEuNC4xIiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibG9hZGVyLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9hZGVyLXV0aWxzLy0vbG9hZGVyLXV0aWxzLTMuMi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnZGdzFLV1MzR1Z5WUJZYjdxa21STS9Xd0wyVFFRQnhnQ0s2MnJsdm00V3BWUTIzTmI0dFlqQXBVbGZqckVHdk9zN0tIRXNteVVuNzVPSFpySk1XUHc9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImxvY2F0ZS1wYXRoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC02LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlQWks2ZVlqYnhSdTN1QjQvV1ozRXNFSU1KRk1xQW9vcGwzUit6dXEwVWpjQW0vTU82S0N3ZURnUGZQM2VsVHp0b0tQM0t0blZIeFRuMk5IQlNEVlV3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJwLWxvY2F0ZSI6ICJeNS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicC1saW1pdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTMuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFlPYW5NM3dHd05Hc1pOMmNWVFlQQXJ3NDU0eG5YajVxbVdGMWJFb0FjNCtjVS9vbDdHVmg3b2RldmpwMUZOSGR1SGMzS1pNY0ZkdXhVNVhjNnVKUlE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwLWxvY2F0ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MYU5qdFJXVUJZKyt6QjVuRS9Od2Nhb015bFNQaytTK1pITkIxVHpkYk1KTW55NmR5bnBBR3Q3WC90bC9RWXEzVEllRTZueEhwcGJvMkxHeW1yRzVQdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAicC1saW1pdCI6ICJeMy4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicmVhY3QtZG9tIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1kb20vLS9yZWFjdC1kb20tMTcuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zNGg5Nkt0TERVUWxzRU5oTW4xYXI4dDJiRWErcS9ZQXRqOHBQUGRJalBER0JESVZOc3JEOWFYTldxc3BVZTZBektDSUcwQzFIWlpMcUxWN3FwT0JHQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImxvb3NlLWVudmlmeSI6ICJeMS4xLjAiLAotICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICJeNC4xLjEiLAotICAgICAgICAic2NoZWR1bGVyIjogIl4wLjIwLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVhY3QtZXJyb3Itb3ZlcmxheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtZXJyb3Itb3ZlcmxheS8tL3JlYWN0LWVycm9yLW92ZXJsYXktNi4wLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vNlVaMnFnRXlIMmFxellaZ1FQeEVuejMzTkoyZ05zbkhBMm81K280d1c5YkxNL0pZUWl0TlA5eFBoc1h3QzA4aE1Nb3ZmR2UvOHJldHNkRHNjelBSZz09IgotICAgIH0sCi0gICAgInJlYWN0LWlzIjogewotICAgICAgInZlcnNpb24iOiAiMTguMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE4LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFdHRElXNng5MjF4dHpQa2hpVUx0dGhKSG9KdkJiRjNxMjZmemxvUENLMGhzdnh0UFZlbHZmdHczempiSFdTa1Iya205Wis0dXhiRERLLzZadzlCOHc9PSIKLSAgICB9LAotICAgICJyZWFjdC1yZWZyZXNoIjogewotICAgICAgInZlcnNpb24iOiAiMC4xMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1yZWZyZXNoLy0vcmVhY3QtcmVmcmVzaC0wLjExLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYyN3Facjh1VXF3aFdaYm9vbmRzUHg4dG5DM0N0M1N4WkEzVjVXeUV2dWpSeXlOdjBWWVBob0JnMWdaOC9NVjV0dWJRcDc2VHJ3OGxUdjloelJCYStBPT0iCi0gICAgfSwKLSAgICAicmVhY3Qtc2NyaXB0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1zY3JpcHRzLy0vcmVhY3Qtc2NyaXB0cy01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOFZBbUVtL1pBd1F6SitHT01MYkJzVGRES09wdVpoN1JQczBVeW12QlIydlJrNGlaV0Nza2piRm54cWpyem9JdmxOTlJaM1FKRng2L3FEU2k2elNuYVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xNi4wIiwKLSAgICAgICAgIkBwbW1td2gvcmVhY3QtcmVmcmVzaC13ZWJwYWNrLXBsdWdpbiI6ICJeMC41LjMiLAotICAgICAgICAiQHN2Z3Ivd2VicGFjayI6ICJeNS41LjAiLAotICAgICAgICAiYmFiZWwtamVzdCI6ICJeMjcuNC4yIiwKLSAgICAgICAgImJhYmVsLWxvYWRlciI6ICJeOC4yLjMiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLW5hbWVkLWFzc2V0LWltcG9ydCI6ICJeMC4zLjgiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LXJlYWN0LWFwcCI6ICJeMTAuMC4xIiwKLSAgICAgICAgImJmaiI6ICJeNy4wLjIiLAotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjE4LjEiLAotICAgICAgICAiY2FtZWxjYXNlIjogIl42LjIuMSIsCi0gICAgICAgICJjYXNlLXNlbnNpdGl2ZS1wYXRocy13ZWJwYWNrLXBsdWdpbiI6ICJeMi40LjAiLAotICAgICAgICAiY3NzLWxvYWRlciI6ICJeNi41LjEiLAotICAgICAgICAiY3NzLW1pbmltaXplci13ZWJwYWNrLXBsdWdpbiI6ICJeMy4yLjAiLAotICAgICAgICAiZG90ZW52IjogIl4xMC4wLjAiLAotICAgICAgICAiZG90ZW52LWV4cGFuZCI6ICJeNS4xLjAiLAotICAgICAgICAiZXNsaW50IjogIl44LjMuMCIsCi0gICAgICAgICJlc2xpbnQtY29uZmlnLXJlYWN0LWFwcCI6ICJeNy4wLjEiLAotICAgICAgICAiZXNsaW50LXdlYnBhY2stcGx1Z2luIjogIl4zLjEuMSIsCi0gICAgICAgICJmaWxlLWxvYWRlciI6ICJeNi4yLjAiLAotICAgICAgICAiZnMtZXh0cmEiOiAiXjEwLjAuMCIsCi0gICAgICAgICJmc2V2ZW50cyI6ICJeMi4zLjIiLAotICAgICAgICAiaHRtbC13ZWJwYWNrLXBsdWdpbiI6ICJeNS41LjAiLAotICAgICAgICAiaWRlbnRpdHktb2JqLXByb3h5IjogIl4zLjAuMCIsCi0gICAgICAgICJqZXN0IjogIl4yNy40LjMiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy40LjIiLAotICAgICAgICAiamVzdC13YXRjaC10eXBlYWhlYWQiOiAiXjEuMC4wIiwKLSAgICAgICAgIm1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIjogIl4yLjQuNSIsCi0gICAgICAgICJwb3N0Y3NzIjogIl44LjQuNCIsCi0gICAgICAgICJwb3N0Y3NzLWZsZXhidWdzLWZpeGVzIjogIl41LjAuMiIsCi0gICAgICAgICJwb3N0Y3NzLWxvYWRlciI6ICJeNi4yLjEiLAotICAgICAgICAicG9zdGNzcy1ub3JtYWxpemUiOiAiXjEwLjAuMSIsCi0gICAgICAgICJwb3N0Y3NzLXByZXNldC1lbnYiOiAiXjcuMC4xIiwKLSAgICAgICAgInByb21wdHMiOiAiXjIuNC4yIiwKLSAgICAgICAgInJlYWN0LWFwcC1wb2x5ZmlsbCI6ICJeMy4wLjAiLAotICAgICAgICAicmVhY3QtZGV2LXV0aWxzIjogIl4xMi4wLjEiLAotICAgICAgICAicmVhY3QtcmVmcmVzaCI6ICJeMC4xMS4wIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMjAuMCIsCi0gICAgICAgICJyZXNvbHZlLXVybC1sb2FkZXIiOiAiXjQuMC4wIiwKLSAgICAgICAgInNhc3MtbG9hZGVyIjogIl4xMi4zLjAiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuNSIsCi0gICAgICAgICJzb3VyY2UtbWFwLWxvYWRlciI6ICJeMy4wLjAiLAotICAgICAgICAic3R5bGUtbG9hZGVyIjogIl4zLjMuMSIsCi0gICAgICAgICJ0YWlsd2luZGNzcyI6ICJeMy4wLjIiLAotICAgICAgICAidGVyc2VyLXdlYnBhY2stcGx1Z2luIjogIl41LjIuNSIsCi0gICAgICAgICJ3ZWJwYWNrIjogIl41LjY0LjQiLAotICAgICAgICAid2VicGFjay1kZXYtc2VydmVyIjogIl40LjYuMCIsCi0gICAgICAgICJ3ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbiI6ICJeNC4wLjIiLAotICAgICAgICAid29ya2JveC13ZWJwYWNrLXBsdWdpbiI6ICJeNi40LjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvY29uc29sZS8tL2NvbnNvbGUtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1ovdE5wUzNOWG4wbWxYWFhQTnVEWm5iNGMwb1oyMHI0SzVlZW1NMmszMFpDM0cwVDAyblhVdnloZjVZZGJYV0hQRUpMYzlxR0x4RVoyMTZNZEwrWmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC9jb3JlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvcmUvLS9jb3JlLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFLNi9VVHJ2UUQwQ2QyNE5TcW1JQTZyS3N1MHRLSXhmaUNkdWNadnF4WWRtTWlzT1lBc2RJdHNwVCtmUURRWUFSUGY4WGdqQUZaaTBvZ1cyYWdINW5RPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3JlcG9ydGVycyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl40LjIuMSIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJlbWl0dGVyeSI6ICJeMC44LjEiLAotICAgICAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtY2hhbmdlZC1maWxlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1ydW5uZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1ydW50aW1lIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC13YXRjaGVyIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC40IiwKLSAgICAgICAgICAgICJyaW1yYWYiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Vudmlyb25tZW50Ly0vZW52aXJvbm1lbnQtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItL1dRamhQSmUzL2doYW9sLzRCcTQ4MEpLWFYvUmZ3OG5RZE43ZjQxZk04VkRITGN4S1hvdTZReVhBaDNFRnI5L2JWRzN4NzR6MU5XRGtQODdFaVk4Z0E9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2FQb3dvb2x3YTA3azcvb00zYUFTbmVOZUJHQ21HUXNjM3VnTjR1NnM0Qy8rczVNNjRNRm8vK2RqVGRpd2NiUWxSZkZFbEd1RFhXemFXajZRZ0tPYlE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogIl44LjAuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tb2NrIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L2dsb2JhbHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2xvYmFscy8tL2dsb2JhbHMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWkVKTkI0MU9CUVFnR3pneUluQXYwVVVmRERqM3VwbUh5ZGppZVN4RnZUUnVaRWxyeDd0WGcvdVZRNWhZVkV3aVhzMythTXNBZUVjOVg3eGlTS0NtNFE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImV4cGVjdCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L3JlcG9ydGVycyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9yZXBvcnRlcnMvLS9yZXBvcnRlcnMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItY1BYaDloV0lsVkpNUWtWazg0YUl2WHVCQjR1UVFtRnFaaWFjbG9GdUdpUDNhaDFzYkN4Q29zaWRYRkRmcUc4KzZmTzFvUjJkVEpUbHNPeTRWRm1VZnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBiY29lL3Y4LWNvdmVyYWdlIjogIl4wLjIuMyIsCi0gICAgICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIsCi0gICAgICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAgICAgImdsb2IiOiAiXjcuMS4yIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAgICAgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogIl41LjEuMCIsCi0gICAgICAgICAgICAiaXN0YW5idWwtbGliLXJlcG9ydCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgImlzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcyI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImlzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMS4zIiwKLSAgICAgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3Qtd29ya2VyIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjAiLAotICAgICAgICAgICAgInN0cmluZy1sZW5ndGgiOiAiXjQuMC4xIiwKLSAgICAgICAgICAgICJ0ZXJtaW5hbC1saW5rIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAidjgtdG8taXN0YW5idWwiOiAiXjguMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjguMS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3Qvc2NoZW1hcy8tL3NjaGVtYXMtMjguMS4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItL2wvVldzZHQvYUJYZ2pzaExXT0Z5RnQzSVZkWXlwdTV5MlduMnJPTzF1bjZua3FJbjhTTFh6Z0lNWVhGeVlzUldEeUY1RXRobUtKTUlkSnZrMDhncmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBzaW5jbGFpci90eXBlYm94IjogIl4wLjI0LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15OU5JSFVZRjNQSlJsSGs5OE5kQy9OMWdsODhCTDA4YVFRZ3U0azRab3BRa0N3OXQ5Y1Y4bXRsM1RWOGIvWUNCOFhhVlRGcm1VVEFKdmpzbnREaXJlZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY2FsbHNpdGVzIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90ZXN0LXJlc3VsdC8tL3Rlc3QtcmVzdWx0LTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVXMzVsMlJZRlVjVVF4Rkp6NUN2NU1UT3hsSklRczRJN2d4emkyelZVN1BKaE93ZllxMU1kQzVuaFNtWWpYMWdtTW1MUHZCM3NJYUMrQmtjSFJCZmFnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90ZXN0LXNlcXVlbmNlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90ZXN0LXNlcXVlbmNlci8tL3Rlc3Qtc2VxdWVuY2VyLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxDaGVKRjdXQjIrOUp1Q1M3VkIvRW1HSWRRdWh0cWpSTkk5QTQzaWRIdjNFNEtsdENUc1BzTHh2ZGF1YkZIU1l3WS9mTmpNV2psNnZOUmhEaU43dnBRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkBzaW5jbGFpci90eXBlYm94IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMjQuNTEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2luY2xhaXIvdHlwZWJveC8tL3R5cGVib3gtMC4yNC41MS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFQMU9ST20vcmR1YlA1YUZEU1pRSUxVMHZyTENKNGZ2SHQ2RW9xSEVNKzJEL0c1TUszYklheW1VS0xpdDhKczlnYm5zNVV5Sm5rUC9UWlJPTHc0dFVBPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJAc2lub25qcy9jb21tb25zIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuOC42IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbm9uanMvY29tbW9ucy8tL2NvbW1vbnMtMS44LjYudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LeStYa0FrcVBaU20zTkxCZVVuZzc3RUJRbDNjbWVKaElUYUdIZFlIOGtqVkIrYXVuM1M0WEJSdGkyenQxN210dDBtSVVEaU54WWVvSm02ZHJWdkJKUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAidHlwZS1kZXRlY3QiOiAiNC4wLjgiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiQHNpbm9uanMvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiOC4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9mYWtlLXRpbWVycy8tL2Zha2UtdGltZXJzLTguMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItT0FQSlVBdGdlSU5oaC9UQWxVSUQ0UVRzNTNOam03eHpkZGFWbEVzL1NYd2d0aUQxdFcyMnpBQi9XMXdkcWZycG1pa2dhV1E5Rnc2V3MraHNpUm01Vmc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBzaW5vbmpzL2NvbW1vbnMiOiAiXjEuNy4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxNy4wLjI0IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTcuMC4yNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZpMGFDN2pWNlF6UUI4bmUxam9WWjBlU0ZJc3RIc0Nyb2JtT3RnaE0xMXlHbEgwajQzRktMMlVoV2RFTGt5cHMwenVmN3FWVFVWQ0NSK3RnU2x5TEx3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogIioiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImNsaXVpIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMC40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xpdWkvLS9jbGl1aS03LjAuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9jUkU2OGNPc1ZNWHAxWXZvbmwvZnprUU95akxTdS84YmhQRGZRdDBlMC9FYjI4M1RLUDIwRnMyTXFvUHNyOVN3QTU5NXJSQ0ErUU16WWM5bkJQK0pRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIsCi0gICAgICAgICAgICAid3JhcC1hbnNpIjogIl43LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJkZWRlbnQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC43LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWRlbnQvLS9kZWRlbnQtMC43LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RNmZLVVBxbkFIQXloaVVnRlU3QlV6TGl2MGtkOHNhSDlhbDd0bnU1US9va2o2ZG51cHh5VGdGSUJqVnpKQVRkZklBbTlOQXN2WE56amFLYStieFZ5QT09IgotICAgICAgICB9LAotICAgICAgICAiZGlmZi1zZXF1ZW5jZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi1zZXF1ZW5jZXMvLS9kaWZmLXNlcXVlbmNlcy0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rMWdDQVhBc05nTHdFTCtZOFd2bCtNNm9FRmo1YmdhemZaVUxwUzVDbmVvUFBYUmFDQ1c3ZG0rcTIxS3kyVkVFNVgrVmVSREJWZzFQY3Z2c3I0VHROUT09IgotICAgICAgICB9LAotICAgICAgICAiZW1pdHRlcnkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC44LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWl0dGVyeS8tL2VtaXR0ZXJ5LTAuOC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItdURmdlVqVnJmR0pKaHlteC9rejZwcmx0ZW53MXU3V3JDZzFvYTk0ellZOHh4VnBMTFV1MDQ1TEFUMGRoRFpkWEc1OC9FcFBMLzVrQTE4MGZRL3F1ZGc9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImV4cGVjdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHBlY3QvLS9leHBlY3QtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItRTFxNWhTVUcyQW1ZUXdRSjA0MW52Z3BrT0RIUXZCK1JLbEI0SVlkcnU2dUpzeUZUUnlaQVA0NjNNKzFsSU5vcndicUFtVWdnaTYrV3drRDhsQ1MvRHc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiZnMtZXh0cmEiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMTAuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMtZXh0cmEvLS9mcy1leHRyYS0xMC4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vUlhBcHE1NEVUUmo0ZU1pRnpHbkhXR3krem81cmF1ZGp1eE4wYjhIN3MvUlUyb1cwV3ZzeDlPMEFDUk4va1JxOUU4VnUvUmVza0dCNW8zamkrRnpIUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4wIiwKLSAgICAgICAgICAgICJqc29uZmlsZSI6ICJeNi4wLjEiLAotICAgICAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0Ly0vamVzdC0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZbjBtQURaQjg5elR0amtQSkVYd3JhYzNMSHVka1FNUitQYXFhOHV4SkhDQnI5YWd4enRVaWZXQ3lpWXJqaE1QQm9VVkJqeW55MEk3WEg2b3pEcjdRUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvY29yZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJpbXBvcnQtbG9jYWwiOiAiXjMuMC4yIiwKLSAgICAgICAgICAgICJqZXN0LWNsaSI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtY2hhbmdlZC1maWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNoYW5nZWQtZmlsZXMvLS9qZXN0LWNoYW5nZWQtZmlsZXMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnVCTE1pQnlmV0dDb01zTEx6R1VVU3BBbUlBR25iUjJLSm9NTjEwemlMaE9MdlA0ZTBTbHlwSG5BZWw4aXFRWFRyY2JtZkVZOXNTcWFlNXNnVXNUdnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImV4ZWNhIjogIl41LjAuMCIsCi0gICAgICAgICAgICAidGhyb2F0IjogIl42LjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWNpcmN1cyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNpcmN1cy8tL2plc3QtY2lyY3VzLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUQ5NVI3eDVVdGxNQTVpQllzT0hGRmJNRC9HVkE0Ui9LZHExNWY3eFlXVWZXSEJ0bzlOWVJzT3ZuU2F1VGdkRitvZ0NwSjR0eUtPWGhVaWZ4UzY1Z2R3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNvIjogIl40LjYuMCIsCi0gICAgICAgICAgICAiZGVkZW50IjogIl4wLjcuMCIsCi0gICAgICAgICAgICAiZXhwZWN0IjogIl4yNy41LjEiLAotICAgICAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImplc3QtZWFjaCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1ydW50aW1lIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJzdGFjay11dGlscyI6ICJeMi4wLjMiLAotICAgICAgICAgICAgInRocm9hdCI6ICJeNi4wLjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1jbGkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jbGkvLS9qZXN0LWNsaS0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IYzZIT093WXE0Lzc0L2M2MmRFRTNyNWVseDh3allxeFkwcjBHL25GckxEUE1GUnU2UkEvdThxSU5PSWt2aHhHN21NUTVFSnNPR2ZScEk4TDZlRlVWdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvY29yZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImltcG9ydC1sb2NhbCI6ICJeMy4wLjIiLAotICAgICAgICAgICAgImplc3QtY29uZmlnIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInByb21wdHMiOiAiXjIuMC4xIiwKLSAgICAgICAgICAgICJ5YXJncyI6ICJeMTYuMi4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtY29uZmlnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtY29uZmlnLy0vamVzdC1jb25maWctMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXNBc2ptNnRHZHNWYlc5YWhjQ2hQQUZDazRJbGtRVWtuSDVBdktqdUxUU2xjTy93Q1pLeUZkbjdSZzBFa0MrT0dnV09ERXkyaERwV0IxUGd6SDBKTkE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjguMCIsCi0gICAgICAgICAgICAiQGplc3QvdGVzdC1zZXF1ZW5jZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiYmFiZWwtamVzdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICJkZWVwbWVyZ2UiOiAiXjQuMi4yIiwKLSAgICAgICAgICAgICJnbG9iIjogIl43LjEuMSIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJqZXN0LWNpcmN1cyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWVudmlyb25tZW50LWpzZG9tIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtamFzbWluZTIiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXJ1bm5lciI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAicGFyc2UtanNvbiI6ICJeNS4yLjAiLAotICAgICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIl4zLjEuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWRpZmYiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW0wTnZrWDU1TER0OVQ0bWN0VEVnblprM2ZtRWczTlJZdXR2TVBXTS8waVBua0ZqMndJZUY0NU8xNzE4Y01TT0ZPMXZJTmtxbXhxRDh2RTM3dVRFYnF3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImRpZmYtc2VxdWVuY2VzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZG9jYmxvY2siOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kb2NibG9jay8tL2plc3QtZG9jYmxvY2stMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItcmw3aGxBQmVUc1JZeEtpVWZwSHJRckc0ZTJvYk9pVFFXZk1FSDNQeFBqT3Rkc2ZMUU80UmVXU1phUTdERVRtNHh1MDdybDRxL2g0emNLWHlVMC9PelE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImRldGVjdC1uZXdsaW5lIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWVhY2giOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lYWNoLy0vamVzdC1lYWNoLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFGZjZwK0ZiaFQvYlhRbkVvdVl5MDBia05TWTdPVXBmSWNtZGw4dlozMUExVVVhdXJPTFBBOGE4QmJKT0YyUkRVRWx3SmhtZWFWN0xuYWdJKzVVd05RPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjUuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LWVudmlyb25tZW50LW5vZGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUp0NFpVbnhkT3NUR3dTUkFmS0VuRTZCY3dzU1BOT2lqandpZnE1c0RGU0Eya2VzblhUdk5xS0hZZ00waERxMzU0OVVmL0t6ZFhOWW40d01aSlBsRkx3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJqZXN0LW1vY2siOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1sZWFrLWRldGVjdG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbGVhay1kZXRlY3Rvci8tL2plc3QtbGVhay1kZXRlY3Rvci0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QT1hmV0FNdmZVNldNVVhmdFY0SG9sbkpmblBPR0V1MTBmc2NOQ0E3NktCcFJSaGNNTjJjOGQzaVQycHhRUzNITGJBKzVYNHNPVVB6WU8yTlV5SWxIUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWF0Y2hlci11dGlscy8tL2plc3QtbWF0Y2hlci11dGlscy0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16MnVUeC9UNkxCYUNvTldORld3Q2hMQktZeFRNY0dCUmpBdCsyU2JQOTI5L0ZmbGI5YWE1TEdtYTY1NFJ6OHo5SEx4c3JVYVl6eEU5VC9FRklML1BBdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJqZXN0LWRpZmYiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tZXNzYWdlLXV0aWwvLS9qZXN0LW1lc3NhZ2UtdXRpbC0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yTXlGZTEram55QUFmK05Id1RjbER6MGVBYUxrVkRkS1ZISEJGV3NCV0hubmg1WWVKTU5XV3N2N0FiRllYZkszb1Rxdkw3VlRXa2hOTHUxalgyNEQrZz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNCIsCi0gICAgICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LW1vY2siOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tb2NrLy0vamVzdC1tb2NrLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUs0aktiWTFkNEVOaGJyRzJ6dVBXYVFCdkRseStpWjJ5QVcrVDFmQVRONzhoYzBzSW53bjd3WkI4WHRsTm52SHVnNVJNd1Y4OTdYbTRMcW1QTTRlMk9nPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy8tL2plc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItUVFPT2RZNFBFMzlpYXdEbjVyemJJZVBOaWdmZTVCOVo5MUdERDFhZS94TkRsdTlrYWF0OFFRNUVLbk5tVldQVjU0aFVkeENWd3dqNllNZ1IyTzdJT2c9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1ydW5uZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1ydW5uZXIvLS9qZXN0LXJ1bm5lci0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nNE5Qc000bUZDT3dGS1hPNHAvSC9rV0dkSnA5VjhrVVJZMmxYOE1lMmRyZ1hxRzdyclpBeDVrdis1SDd3dHQvY2RGSWpocVl4MUhybHFXSGFPdkRhUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJlbWl0dGVyeSI6ICJeMC44LjEiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1kb2NibG9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWVudmlyb25tZW50LWpzZG9tIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LWxlYWstZGV0ZWN0b3IiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIl4wLjUuNiIsCi0gICAgICAgICAgICAidGhyb2F0IjogIl42LjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1ydW50aW1lLy0vamVzdC1ydW50aW1lLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW83Z3h3M0dmK0gySUd0OGZ2MFJpeUUxK3I4M0ZKQlJydW9BK0ZYcmxIdzZ4RXlCc1U4dWdBNklQZlRkVnlBMHc4SENscGJLK0RHSnhINTlVck5NeDhBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC9nbG9iYWxzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiY2pzLW1vZHVsZS1sZXhlciI6ICJeMS4wLjAiLAotICAgICAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJleGVjYSI6ICJeNS4wLjAiLAotICAgICAgICAgICAgImdsb2IiOiAiXjcuMS4zIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbW9jayI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAic3RyaXAtYm9tIjogIl40LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc25hcHNob3QvLS9qZXN0LXNuYXBzaG90LTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlZeWtYSTVhMEkzMXhYNjdtZ2VMdzFEWjBiSkIrZ3BxNUlwU3VDQW95RGkwK0JoZ1UvUklyTCtSVHpEbWtOVGNodkRGV0tQOGxwK3cvNDJaM3VzNXNBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy43LjIiLAotICAgICAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuNy4yIiwKLSAgICAgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0IjogIl43LjcuMiIsCi0gICAgICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjcuMiIsCi0gICAgICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIsCi0gICAgICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgIkB0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiAiXjcuMC40IiwKLSAgICAgICAgICAgICJAdHlwZXMvcHJldHRpZXIiOiAiXjIuMS41IiwKLSAgICAgICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4wLjAiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZXhwZWN0IjogIl4yNy41LjEiLAotICAgICAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuOSIsCi0gICAgICAgICAgICAiamVzdC1kaWZmIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNy41LjEiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiLAotICAgICAgICAgICAgInNlbXZlciI6ICJeNy4zLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC13YXRjaC10eXBlYWhlYWQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdhdGNoLXR5cGVhaGVhZC8tL2plc3Qtd2F0Y2gtdHlwZWFoZWFkLTEuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmE1bkxTSlRON1lGdEMyamQrN3dzb2UxcE5lNUs0U2hMdXgvRTVpSEV3bEI5QXhheG1nZ1k3dG85S1VxS29qaGFKdzNhWHF0NVdBYjRqR1BPb2xwRXc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4zLjEiLAotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yOC4wLjAiLAotICAgICAgICAgICAgImplc3Qtd2F0Y2hlciI6ICJeMjguMC4wIiwKLSAgICAgICAgICAgICJzbGFzaCI6ICJeNC4wLjAiLAotICAgICAgICAgICAgInN0cmluZy1sZW5ndGgiOiAiXjUuMC4xIiwKLSAgICAgICAgICAgICJzdHJpcC1hbnNpIjogIl43LjAuMSIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAiQGplc3QvY29uc29sZSI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMjguMS4zIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvbnNvbGUvLS9jb25zb2xlLTI4LjEuMy50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RUEFrUDVFd0tkSy9ieElyNkMxSTRWczBybTJuSGlBTnpqL1o1WDJKUWtyWm82SXF2QzRsZFo5Szk1dEYwSGRpZGhBOEJvNmVneFN6VUZQWUtjRVhMdz09IiwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjguMS4zIiwKLSAgICAgICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yOC4xLjMiLAotICAgICAgICAgICAgICAgICJqZXN0LXV0aWwiOiAiXjI4LjEuMyIsCi0gICAgICAgICAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICAgICAic2xhc2giOiB7Ci0gICAgICAgICAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xhc2gvLS9zbGFzaC0zLjAuMC50Z3oiLAotICAgICAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzlRMWhhZWJ5MzZPU1N0d2I0bnRDR0dHYUtzYVZTalE2OGZCeG9RY3V0bDVmUzF2dVkxOEgzd1N0M2pGeUZ0cmt4K0t6MFYxRzg1QTRNeUFkRE1pMlE9PSIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjI4LjEuMyIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90ZXN0LXJlc3VsdC8tL3Rlc3QtcmVzdWx0LTI4LjEuMy50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rWkFreG5TRStGcUU4WWpXOGdOdW9Wa2tDOUk3UzFxbWVubDhzR2NET0xyb3BBU1ArQmtjR0t3aFhveXFRdUdPR2VZWTB5L2l4anJkL2lFUnBFWEhOZz09IiwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yOC4xLjMiLAotICAgICAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjguMS4zIiwKLSAgICAgICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjAiLAotICAgICAgICAgICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMjguMS4zIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjguMS4zLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJ5aml5TVVackt6L2MremxNRk8xcG03MERjSWxTVDhBZVdUa29VZFpldmV3NDR3Y05aUUhzRVZPaUNWdGdWbmxGRkQ4MkZQYVh5Y3lzNThjZjJtdVZRPT0iLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI4LjEuMyIsCi0gICAgICAgICAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTcuMC44IiwKLSAgICAgICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImVtaXR0ZXJ5IjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIwLjEwLjIiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1pdHRlcnkvLS9lbWl0dGVyeS0wLjEwLjIudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUlUcU93bkxhbnBITE5YWkpFTmJPZ2pVQmVIb2NEK3hzU0ptTnJqb3ZLQlc1SGJTcFczZDFwRWxzN0dGUVBVV1hpd0c5KzBQNEd0SGZFcUMvNE0wSXc9PSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjI4LjEuMyIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1lc3NhZ2UtdXRpbC8tL2plc3QtbWVzc2FnZS11dGlsLTI4LjEuMy50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QRmRuOUlld2J0NTc1ektQZjEyODZIdDlFUG9KbVlUN1Awa1krUmliZVlaMlh0T3I1M3BETEVGb1RXWGJkMWg0SmlHaVdwVEJDODRmYzh4TVhRTWI3Zz09IiwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yOC4xLjMiLAotICAgICAgICAgICAgICAgICJAdHlwZXMvc3RhY2stdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjQiLAotICAgICAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yOC4xLjMiLAotICAgICAgICAgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAgICAgICAgICJzdGFjay11dGlscyI6ICJeMi4wLjMiCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAgICAgInNsYXNoIjogewotICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsYXNoLy0vc2xhc2gtMy4wLjAudGd6IiwKLSAgICAgICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc5UTFoYWVieTM2T1NTdHdiNG50Q0dHR2FLc2FWU2pRNjhmQnhvUWN1dGw1ZlMxdnVZMThIM3dTdDNqRnlGdHJreCtLejBWMUc4NUE0TXlBZERNaTJRPT0iCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMjguMC4yIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0yOC4wLjIudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNHMwSWd5Tkl5MHk5RksrY2pvVllveGFtVDdaZW83TWh6cVJHeDdZRFltYVFuMXd1Y1k5cm90aUdrQnp6Y01YVHRqckNBUC9mN2YrRTBGNytmeFBOZHc9PSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiamVzdC11dGlsIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC11dGlsLy0vamVzdC11dGlsLTI4LjEuMy50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YZHFmcEh3cGNTUmtvL0MzNXVMWUZNMmVtUkFsdElJS1ppSjllQW1oanNqMENxWk1hMHAxaWIwUjVmV0lxR2huMWExMDNEZWJUYnBxSWFQMXFDUTZ0UT09IiwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjguMS4zIiwKLSAgICAgICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAgICAgImNpLWluZm8iOiAiXjMuMi4wIiwKLSAgICAgICAgICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi45IiwKLSAgICAgICAgICAgICAgICAicGljb21hdGNoIjogIl4yLjIuMyIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJqZXN0LXdhdGNoZXIiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjI4LjEuMyIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXdhdGNoZXIvLS9qZXN0LXdhdGNoZXItMjguMS4zLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ0cWNxajloemUranZpRlBVTjNZQXRBRWVGbnIvYXpJVFhRRU1BUmY1Y013S1kyU01CUm5DUVRYTGl4VGwyME9SNm1MaDlLTE1yZ1ZKZ0pJU3ltKzFnPT0iLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yOC4xLjMiLAotICAgICAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjguMS4zIiwKLSAgICAgICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4yLjEiLAotICAgICAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgICAgICJlbWl0dGVyeSI6ICJeMC4xMC4yIiwKLSAgICAgICAgICAgICAgICAiamVzdC11dGlsIjogIl4yOC4xLjMiLAotICAgICAgICAgICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMSIKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICAgICAic3RyaW5nLWxlbmd0aCI6IHsKLSAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctbGVuZ3RoLy0vc3RyaW5nLWxlbmd0aC00LjAuMi50Z3oiLAotICAgICAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2w2ck5ONWZZSE5oWlp5NDFSWHNZcHRDakEySWdtcTRFRzdrWkFZRlFJMUUxVlRYYXJyNlpQWEJnNmVxN1k2ZUs0RkVoWTZBSmx5dUZJYi92L1MwVlE9PSIsCi0gICAgICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICJjaGFyLXJlZ2V4IjogIl4xLjAuMiIsCi0gICAgICAgICAgICAgICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJzdHJpcC1hbnNpIjogewotICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCi0gICAgICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKLSAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIgotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIyOC4xLjMiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjguMS4zLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThnRmIvVG8wT214SFI5K1pUYjE0RGYydk54ZEdDWDhnMXhXR1VUcVV3NVRpWnZjUWY1c0hLT2JkNVVjUHlMTHlvd053REFNVEYzWFdPRzFCNm14bDFRPT0iLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgIkBqZXN0L3NjaGVtYXMiOiAiXjI4LjEuMyIsCi0gICAgICAgICAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIiwKLSAgICAgICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjAuMCIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJzbGFzaCI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xhc2gvLS9zbGFzaC00LjAuMC50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZE9zQUhYWFVrUVRwT1ljb0F4TElvck1UcDRnSVFyNUlXM2lWYjdBN2xGSXAwVkhobnlubTlpeng2VHNzZHJJY1ZJRVNBbFZqdG5PMks4YmcrQ29ldz09IgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJzdHJpbmctbGVuZ3RoIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctbGVuZ3RoLy0vc3RyaW5nLWxlbmd0aC01LjAuMS50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05RXAwOEtBTVVuME9hZG5WYUJ1UmRFMmw2MTVDUTUwOGtyMFhNYWRqQ2xmWXBkQ3l2cmJGcDZUYWVibzh5eXhva1E0dmlVZC94UFBVQTRGR2dVYTBvdz09IiwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJjaGFyLXJlZ2V4IjogIl4yLjAuMCIsCi0gICAgICAgICAgICAgICAgInN0cmlwLWFuc2kiOiAiXjcuMC4xIgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgICAgICJjaGFyLXJlZ2V4IjogewotICAgICAgICAgICAgICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXItcmVnZXgvLS9jaGFyLXJlZ2V4LTIuMC4xLnRneiIsCi0gICAgICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vU3ZFZW82WlVEN05lcHFBYXQzUnFvdWNaNVNlcUxKZ092Vkl3a2FmdTZJUDNWMHBPMzhzL3lwZFZVbURESzZxSUlITmxZSEpBS1g5RTdSN0hvS0Vsdz09IgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJzdHJpcC1hbnNpIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICI3LjEuMCIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS03LjEuMC50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pcTZlVlZJNjRuUVFUUllxMkt0RWcyZDJ1VTdMRWxoVEp3c0g0WXpJSFpzaHhsZ1ptcy93SWM0Vm9EUVRsRy9JdlZJckJLRzA2Q3JabnAwcXY3aGtjUT09IiwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJhbnNpLXJlZ2V4IjogIl42LjAuMSIKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICAgICAiYW5zaS1yZWdleCI6IHsKLSAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC02LjAuMS50Z3oiLAotICAgICAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjVNODU1ZktiMlNzZk1JaUZGb1ZyQUJISkM4UXRId1Z4K21IV1AzUWNFcUJIWWllbmo1ZEhTZ2pieHRDMFdFWlhZdDR3Y0Q2enJRRWxEUGhGdVpnZkE9PSIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqZXN0LXdhdGNoZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13YXRjaGVyLy0vamVzdC13YXRjaGVyLTI3LjUuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXo2NzZTdUQ2WjhvOHFibUVHaG9FVUZPTTEramZFaUwzRFhISy94Z0VpRzJFeU5ZZkZHNjBqbHVXY3VwWTZkQVRqZkVzS1F1aWJSZVMxZGpJblFub1Z3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAamVzdC90eXBlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImplc3QtdXRpbCI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJscnUtY2FjaGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAieWFsbGlzdCI6ICJeNC4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuNS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuNS4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItU29mdHVUUk92L2NSakN6ZS9zY2pHeWlEdGNVeXh3MXJnWVFTWlk3WFRtdFI1aFgrZG03NmlEYlRIOFRrTFBIQ1FtbGJRVlNTYk5aQ1BNMmhiMGtublE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIKLSAgICAgICAgfSwKLSAgICAgICAgInY4LXRvLWlzdGFuYnVsIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdjgtdG8taXN0YW5idWwvLS92OC10by1pc3RhbmJ1bC04LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZHdEt0djN4SXBSNkJZaHZnSDhNSS95NzhvVDdkOEF1M3d3NFFJeHltckN0WkVoNWI4Z0N3MnNpeXdFK3B1aEVtdVdLRHRtZnJ2RjVVbEIyOTh1dDN3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMSIsCi0gICAgICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjYuMCIsCi0gICAgICAgICAgICAic291cmNlLW1hcCI6ICJeMC43LjMiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNy40IiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNy40LnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWwzQmlrVXh2UE9jbjVFNzRkWmlxNUJHc1RiNXlFd2hhVFN6Y2NVNnQ0c0RPSDhOV0pDc3RLTzVRVDJDdnRGb0s2RjBzYUw3cDl4SEFxSE9sQ1BKeWdBPT0iCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAieWFsbGlzdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIKLSAgICAgICAgfSwKLSAgICAgICAgInlhcmdzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE2LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLy0veWFyZ3MtMTYuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDFtdnZ0REcwTDVmdC9qR1drTHBHMSttMGVReE9mYUJ2VE5FTHJhV2oyMndTVlVNV3haVXZZZ0pZY0toNmpHR0lrSkZoSDRJWlBRaFI0VEtwYzhtQnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNsaXVpIjogIl43LjAuMiIsCi0gICAgICAgICAgICAiZXNjYWxhZGUiOiAiXjMuMS4xIiwKLSAgICAgICAgICAgICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwKLSAgICAgICAgICAgICJyZXF1aXJlLWRpcmVjdG9yeSI6ICJeMi4xLjEiLAotICAgICAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4yLjAiLAotICAgICAgICAgICAgInkxOG4iOiAiXjUuMC41IiwKLSAgICAgICAgICAgICJ5YXJncy1wYXJzZXIiOiAiXjIwLjIuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ5YXJncy1wYXJzZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjAuMi45IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MtcGFyc2VyLy0veWFyZ3MtcGFyc2VyLTIwLjIuOS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXkxMW5HRWxUSVYrQ1QzWnY5dDdWS2wrUTNoVFFvVDlhMVF6ZXpoaGw2UnAyMWdKL0lWVFc3WjN5OUVXWGh1VUJDMlNobmYrRFgwYW50ZWNwQXdTUDh3PT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJyZWFkLWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtY2FjaGUvLS9yZWFkLWNhY2hlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Pd2R2L0Z0N0lqT2dtL2kweHZORFoxTHJSQU5SZmV3NGIycHJGM09XTVFMeExmdTNiUzhGVmhDc3JTQ01LNGxSNTZZOXlhK0FUaG9UcERDVHhDbXBSQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBpZnkiOiAiXjIuMy4wIgotICAgICAgfQotICAgIH0sCi0gICAgInJlYWRhYmxlLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMy42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTl1L3NuaUNyWTNENVdkc0VSSHpIRTRHMllDWHFvRzVGVEhVaUNDNFNJYnI2WGNMWkJZMDV5YTlFS2pZZWs5TzV4T0F3akdxKzFKZEdCQVM3UTlTY29BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaW5oZXJpdHMiOiAiXjIuMC4zIiwKLSAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIl4xLjEuMSIsCi0gICAgICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICJeMS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVhZGRpcnAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGRpcnAvLS9yZWFkZGlycC0zLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaE9TMDg5b244UmR1cWRiaHZRNVozN0EwRVNqc3F6NnFuUmNmZnNNVTM0OTVGdVRkcVNtKzdiaEoyOUp2SU9zQkRFRW5hbjVEUHU5dDNUbzlWUmxNekE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4xIgotICAgICAgfQotICAgIH0sCi0gICAgInJlY3Vyc2l2ZS1yZWFkZGlyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlY3Vyc2l2ZS1yZWFkZGlyLy0vcmVjdXJzaXZlLXJlYWRkaXItMi4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThIckY1WnNYazVGQUg5ZGdzeDNCbFVlcjczbklodWorOU9yUXdFYkxUUE9CekdrTDFsc0ZDUjAxYW0rdiswbTJDbWJzMW5QMTJoTERsNUZBN0VzektBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibWluaW1hdGNoIjogIl4zLjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJyZWRlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVkZW50Ly0vcmVkZW50LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02dERBOGc5OFdlMHpkMEd2VmVNVDlhckVPblR3OXFNMDNMOWNKWGFDanJpcDFPTzc2NFJEQkxCZnJCNGN3ek5HRGo1T0E1aW95bUM5R2tpemdXSkRVZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaW5kZW50LXN0cmluZyI6ICJeNC4wLjAiLAotICAgICAgICAic3RyaXAtaW5kZW50IjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJyZWdlbmVyYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2VuZXJhdGUvLS9yZWdlbmVyYXRlLTEuNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16cmNlUi9YaEdZVS9kL29wcjJFS083YVJIVWVpQkk4cWp0ZkhxQURUd1pkNlN6ZnkxNmxhNmtxRDBNSVVzNXo1aHg2QWFLYStQaXhwUHJSMjg5K0kwQT09IgotICAgIH0sCi0gICAgInJlZ2VuZXJhdGUtdW5pY29kZS1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiMTAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdlbmVyYXRlLXVuaWNvZGUtcHJvcGVydGllcy8tL3JlZ2VuZXJhdGUtdW5pY29kZS1wcm9wZXJ0aWVzLTEwLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZDFWdWRDTG9JR2l0Y1UvaEVnMlFxdnlHWlFtZEMwTGY4QnFkT01YR0ZTdkpQNGJOVjErWHFiUFFlSEhMRDUxSmg0UUpKMjI1ZGxJRnZZNEx5Nk1YbVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyZWdlbmVyYXRlIjogIl4xLjQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJyZWdlbmVyYXRvci1ydW50aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMC4xMy4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZW5lcmF0b3ItcnVudGltZS8tL3JlZ2VuZXJhdG9yLXJ1bnRpbWUtMC4xMy4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1kxQVpWcjJSYSt0K3BpVmFKNGd4YUZhUmVaVkg0MEFLTm83VUNYNlcrZEV3Qm8vMm9aSnpxZnVOMXFMcTFvTDQ1bzU2Y1BhVFhFTHdyVGg4RnBnZ2c9PSIKLSAgICB9LAotICAgICJyZWdlbmVyYXRvci10cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE1LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2VuZXJhdG9yLXRyYW5zZm9ybS8tL3JlZ2VuZXJhdG9yLXRyYW5zZm9ybS0wLjE1LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtuem1OQWN1eXhWK2dRQ3Vma1ljdk9xWC9xSUlmSEx2MHU1eDc5a1J4dUdvamZZVmt5MWYxNVR6WkV1MkF2dGU4UUdlcHZVTlRuTHNrZjhFNlg2VnlnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3J1bnRpbWUiOiAiXjcuOC40IgotICAgICAgfQotICAgIH0sCi0gICAgInJlZ2V4LXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZXgtcGFyc2VyLy0vcmVnZXgtcGFyc2VyLTIuMi4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItamJEL0ZUMCs5TUJVMlhBWmx1STd3Mk9CczFSQmk2cDlNODNua29aYXlRWFhVOWU4Um9idDY5RmNaYzd3VTRlSkQvWUZUam4xSmRDazNyYk1KYWp6OFE9PSIKLSAgICB9LAotICAgICJyZWdleHAucHJvdG90eXBlLmZsYWdzIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2V4cC5wcm90b3R5cGUuZmxhZ3MvLS9yZWdleHAucHJvdG90eXBlLmZsYWdzLTEuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wU3V0QzNwTnVkUktncXV4R29SR0l6OTQ2TVpWSHFiTmZQakJkeGVPaEJyZGdES2xSb1htWUxRTjl4UmJyUjA5WlhXZUdBZFB1aWY3ZWdvZm42djVMQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMi4wIiwKLSAgICAgICAgImZ1bmN0aW9ucy1oYXZlLW5hbWVzIjogIl4xLjIuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJyZWdleHB1LWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZXhwdS1jb3JlLy0vcmVnZXhwdS1jb3JlLTUuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SQU01RmxaeitMaG1vN2RiOUwyOThwMnZIUDVaeXdyVlhtVlhwbUFEOUd1TDVNUEg2dDlST3cxaUEvd2ZIa1E3NlFlN0FhUEYwbkd1aW05Ni9JclFNUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9yZWdqc2dlbiI6ICJeMC44LjAiLAotICAgICAgICAicmVnZW5lcmF0ZSI6ICJeMS40LjIiLAotICAgICAgICAicmVnZW5lcmF0ZS11bmljb2RlLXByb3BlcnRpZXMiOiAiXjEwLjEuMCIsCi0gICAgICAgICJyZWdqc3BhcnNlciI6ICJeMC45LjEiLAotICAgICAgICAidW5pY29kZS1tYXRjaC1wcm9wZXJ0eS1lY21hc2NyaXB0IjogIl4yLjAuMCIsCi0gICAgICAgICJ1bmljb2RlLW1hdGNoLXByb3BlcnR5LXZhbHVlLWVjbWFzY3JpcHQiOiAiXjIuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInJlZ2pzcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMC45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2pzcGFyc2VyLy0vcmVnanNwYXJzZXItMC45LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRRVXRuOTBXYW5TTmwrN21RS2NYQWdaeHZVZTdaMFNxWGxnenYwemE0THdpVWh5ekJDNTh5UU8zbGlGb1VndThHaUpWSW5BaEpqa2oxTjBFdFE1bmtRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAianNlc2MiOiAifjAuNS4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqc2VzYyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZXNjLy0vanNlc2MtMC41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11Wno1VW5CN3U0VDlMdndtRnFYaWk3cFpTb3VhUlBvckdzNXdobzFJcDdWTzB3eGFuRnZCTDdHa002ZFRIbGdYK2poQkFwUmV0YVdwbkRhYk9lVGNuQT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicmVsYXRldXJsIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlbGF0ZXVybC8tL3JlbGF0ZXVybC0wLjIuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRzA4RHh2bTRpRE4zTUxNMEVzUDYyRURWOUl1aFhQUjZibE56NlV0Y3A3enlWM3RyNEhWTklOdDZNcGFSV2J4b09IVDNRN1lOMlAramFIWDh2VWJnb2c9PSIKLSAgICB9LAotICAgICJyZW5kZXJraWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVuZGVya2lkLy0vcmVuZGVya2lkLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xLzdWSVFBOGxtTTFoRitqbitzRlNQV0dsTWtTQWVOWWNQTG1EUXgyenp1aURmYUxyT211bVI4aWFVS2xlbkZnaDBYUlBJVWVTUGxIM0ErQVczWjVwZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNzcy1zZWxlY3QiOiAiXjQuMS4zIiwKLSAgICAgICAgImRvbS1jb252ZXJ0ZXIiOiAiXjAuMi4wIiwKLSAgICAgICAgImh0bWxwYXJzZXIyIjogIl42LjEuMCIsCi0gICAgICAgICJsb2Rhc2giOiAiXjQuMTcuMjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVxdWlyZS1kaXJlY3RvcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVxdWlyZS1kaXJlY3RvcnkvLS9yZXF1aXJlLWRpcmVjdG9yeS0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZkd4RUk3K3dzRzl4cnZkanNybG1MMjJPTVRUaUhSd0FNcm9pRWVNZ3E4Z3pvTEMvUFFyN1JzUkRTVExVZy9iWkFadEYrVFZJa0hjNi80UklLcnVpK1E9PSIKLSAgICB9LAotICAgICJyZXF1aXJlLWZyb20tc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZnJvbS1zdHJpbmcvLS9yZXF1aXJlLWZyb20tc3RyaW5nLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YZjBuV2U2UnNlemlGTXUrQXA5YmlpVWJtcGxxNlM5L3ArN3c3WVhQL0pCSGhyVUREVWh3YSt2QU55dWJ1cWZaV1R2ZVUvL0RZVkdzREc3UktML3ZFdz09IgotICAgIH0sCi0gICAgInJlcXVpcmVzLXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVxdWlyZXMtcG9ydC8tL3JlcXVpcmVzLXBvcnQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtpZ09DSGNvY1UzWE9ESnhzdThpL2o4VDl0elQ0YWRIaWVjd09SUlEwWlpGY3A3YWh3WHVSVTFtK3l1TzkwQzVaVXlHZUdmb2NIREkxNE0zTDN5REFRPT0iCi0gICAgfSwKLSAgICAicmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS8tL3Jlc29sdmUtMS4yMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TYittak5IT1VMc0J2ODE4VDQwcVNQZVJpdVdMeWFHTWE1ZXd5ZFJMRmltbmVpeG1WeTJ6ZGl2UmwrQUY2amFZUEM4RVJ4R0RtRlNpcXVpNlNmUGQrZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLWNvcmUtbW9kdWxlIjogIl4yLjExLjAiLAotICAgICAgICAicGF0aC1wYXJzZSI6ICJeMS4wLjciLAotICAgICAgICAic3VwcG9ydHMtcHJlc2VydmUtc3ltbGlua3MtZmxhZyI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVzb2x2ZS1jd2QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS1jd2QvLS9yZXNvbHZlLWN3ZC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT3JaYVgyTWIrckpDcEgvNkNwU3F0OXhGVnBOKyt4MDFYbk4yaWU5ZzZQNS8zeGVsTEFrWFdWQURwZHoxSUhEL0tGZkVYeUU2VjBVMDFPUTNVTzJyRWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyZXNvbHZlLWZyb20iOiAiXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInJlc29sdmUtZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWZyb20vLS9yZXNvbHZlLWZyb20tNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFZZzlLUDI0ZEQ1cWthOUo0N2QwYVZreTBOK2I0ZlRVODlMTjlpRG5qQjV3YWtzaUM0OXJ2TUIwUHJVSlFHb1RtSDUwWFBpcU92QWpEZmFpakd4WVp3PT0iCi0gICAgfSwKLSAgICAicmVzb2x2ZS11cmwtbG9hZGVyIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtdXJsLWxvYWRlci8tL3Jlc29sdmUtdXJsLWxvYWRlci00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMDVWRU1jelZSRWNidFQ3QnorQys5NmVVTzVIRE52ZHRoSWlNQjM0dDdGY0Y4ZWhjdTR3QzBzU2dQVXViczNYVzJRM0NOTEprL0JKckNVOXdWUnltaUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhZGp1c3Qtc291cmNlbWFwLWxvYWRlciI6ICJeNC4wLjAiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjcuMCIsCi0gICAgICAgICJsb2FkZXItdXRpbHMiOiAiXjIuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjcuMC4zNSIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIjAuNi4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwaWNvY29sb3JzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGljb2NvbG9ycy8tL3BpY29jb2xvcnMtMC4yLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jTWxEcWFMRXFmU2FXOFo3TjVKdytseUlXODY5RXpUNzMvRjVsaHRZOWNMR29WeFNYem5mZ2ZYTU8wWjVLMG8wUTJUa1RYcSswS0ZzZG5TZTNqRFZpQT09IgotICAgICAgICB9LAotICAgICAgICAicG9zdGNzcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjAuMzkiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wb3N0Y3NzLy0vcG9zdGNzcy03LjAuMzkudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15aW9heWpOYkhuNnoxL0J5d3liMlk0czN5dkRBZVhHT3l4cUQrTG5WT2lucTZNZG1kKytTVzJ3VU5WemF2eXlIeGQ2K0R4eldHSXVvc2c2UDFSajh1QT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAicGljb2NvbG9ycyI6ICJeMC4yLjEiLAotICAgICAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJyZXNvbHZlLmV4cG9ydHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS5leHBvcnRzLy0vcmVzb2x2ZS5leHBvcnRzLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vTnRwSE5ETjdqV2hBYVE5QnZCVVlaNllUWHNSQmdmcVdGV1A3QlpCYW9NSk8vSTNHNU9GenZUdVdObFpDM2FQamluczFGK1ROckxLc0diSDRyZnNSUT09IgotICAgIH0sCi0gICAgInJldHJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXRyeS8tL3JldHJ5LTAuMTMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFFCUTNJOFcxQ2dlMFNlaCs2Z2pqMDNMYm1SRld1b3N6Z0s5b29DcHdZSXJoaG9PODBwZnE0Y1VrVTVEa2tud2ZPZkZ0ZVJ3bFo1NlBZT0dZeUZXZGc9PSIKLSAgICB9LAotICAgICJyZXVzaWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JldXNpZnkvLS9yZXVzaWZ5LTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VOW5IODhhM2ZjL2VrQ0YxbDAvVVAxSW9zaXVJanlUaDdoQnZYVk1IWWdWY2ZHdnQ4OTdYZ3VqMlVPTERlSTVCRzJtNy91d3lhTFZUNmZidEN3VHl6dz09IgotICAgIH0sCi0gICAgInJpbXJhZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yaW1yYWYvLS9yaW1yYWYtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpaa0pNWmtBR0ZGUFAyWXFYWlhQYk1sTUJnc3h6RThJTHM0bE1JWC8ybzBMOVVCdzlPL1kzbzZ3RncvaTlZTGFwY1VKV3dxYmkza2R4SVBkQzYyVElBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ2xvYiI6ICJeNy4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicm9sbHVwIjogewotICAgICAgInZlcnNpb24iOiAiMi43OS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yb2xsdXAvLS9yb2xsdXAtMi43OS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11S3hiZDBJaE1aT2hqQWlENW9BRnA3QnF2a0E0RHY0N3FwT0N0YU52bmc0SEJ3ZGJXdGRPaDhmNW5aTnVrMnJwNTFQTUdrM2J6Zld1NW9heU5FdVludz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZzZXZlbnRzIjogIn4yLjMuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJyb2xsdXAtcGx1Z2luLXRlcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yb2xsdXAtcGx1Z2luLXRlcnNlci8tL3JvbGx1cC1wbHVnaW4tdGVyc2VyLTcuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13M2lJYVU0T3hjRjUyVVVYaVpOc05ldVhJTUR2RnJyK1pYSzZiRlowUTYwcXlWZnE0dUxwdG9TNGJicTNwYUczeDIxNmVRbGxGWlg3enQ2VElJbWd1UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjEwLjQiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI2LjIuMSIsCi0gICAgICAgICJzZXJpYWxpemUtamF2YXNjcmlwdCI6ICJeNC4wLjAiLAotICAgICAgICAidGVyc2VyIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiamVzdC13b3JrZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yNi42LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LV1lWVjFjNGkramJNcGFCQytVKys0VmEwY3A4T2lzVTE4NW83M1Qxdm85OWhxaTd3OHRTSmZVWFlzd3dxcXJqend4YTZLcFJLNTRXaFB2d2Y1dzZQUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNlcmlhbGl6ZS1qYXZhc2NyaXB0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VyaWFsaXplLWphdmFzY3JpcHQvLS9zZXJpYWxpemUtamF2YXNjcmlwdC00LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdhTkE1NDM4MHVGZWZXZ2hPREJXRUdpc0xaRmowMG5TNUFDczZ5SGE5bkxxbExwVkxPOENoREdlS1JqWm5WNE5oNG4wUWk3bmhZWkQvOWZDUHpFcWt3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJyYW5kb21ieXRlcyI6ICJeMi4xLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAicnVuLXBhcmFsbGVsIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3J1bi1wYXJhbGxlbC8tL3J1bi1wYXJhbGxlbC0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWw0VnlaUjg2TFovbER4WlRSNmpxTDhBRkUyUzBJRkxNUDI2QWJqc0xWQUR4SGRoQi9jMEdVc0greTM5VWZDaTNkeno4T2xRdVBtbmFKT01vREhRQkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJxdWV1ZS1taWNyb3Rhc2siOiAiXjEuMi4yIgotICAgICAgfQotICAgIH0sCi0gICAgInNhZmUtYXJyYXktY29uY2F0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtYXJyYXktY29uY2F0Ly0vc2FmZS1hcnJheS1jb25jYXQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlkVkVGcnVXSXNuaWU4OXl5bSt4V1RBWUFTZHB3M0NKVjdMaS82ekJld0dmOXoyaTFqMzFyUDZqblkwcEhFTzRRWmg2TjBLMTFiRmpXbWRSOFVHZFBRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuMCIsCi0gICAgICAgICJoYXMtc3ltYm9scyI6ICJeMS4wLjMiLAotICAgICAgICAiaXNhcnJheSI6ICJeMi4wLjUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic2FmZS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcnAzU28wN0tjZG1tS2JHdmdhTnhRU0pyN2JHVlNWazVTOUVxMUYrcHBiUm83MCtZZWFEeGt3NURkOE5QTitHRDZiam5ZbTJWdVB1Q1htcHVZdm1DWFE9PSIKLSAgICB9LAotICAgICJzYWZlLXJlZ2V4LXRlc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1yZWdleC10ZXN0Ly0vc2FmZS1yZWdleC10ZXN0LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KQlVVenlPZ0V3WFFZMU51UHR2Y2ovcWNCRGJEbUV2V3VmaGxuWFpJbTc1REVIcCthZk0xcjF1akpwSnNWL2dTTTR0NTl0cER5UGkxc2Q2WmFQRmZzQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4xLjMiLAotICAgICAgICAiaXMtcmVnZXgiOiAiXjEuMS40IgotICAgICAgfQotICAgIH0sCi0gICAgInNhZmVyLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlci1idWZmZXIvLS9zYWZlci1idWZmZXItMi4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlabzNLODJTRDdSaXlpMEUxRVFQb2pMejdrcGVwblNRSTlJeVBiSEhnMVhYWGV2YjVkSkk3dHB5TjJBRHhHY1FiSEc3dmN5UkhrMGNid3FjUXJpVXRnPT0iCi0gICAgfSwKLSAgICAic2FuaXRpemUuY3NzIjogewotICAgICAgInZlcnNpb24iOiAiMTMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYW5pdGl6ZS5jc3MvLS9zYW5pdGl6ZS5jc3MtMTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aUndLYmgvZVE2dzl2bVRqa3VHMElvaTNIQndQRmNlME8rdi8vdmUrYU9xMW9lQ3k3ak1WMnF6ekFscHNOdXFwcUNCampyaU0xbGJ0WmJGL1E4alZ5QT09IgotICAgIH0sCi0gICAgInNhc3MtbG9hZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMTIuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYXNzLWxvYWRlci8tL3Nhc3MtbG9hZGVyLTEyLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0xUYUgwWUN0WDRjZm5KWnhLU0xBeWdsRUQwbmFpWWZORzFpWGZVNXcxTE5aK3Vrb0E1RHR5RElONXptS1Zad1lOSlA0S1JjNVkzaGtXZ2ErN3RZZkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJrbG9uYSI6ICJeMi4wLjQiLAotICAgICAgICAibmVvLWFzeW5jIjogIl4yLjYuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJzYXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2F4Ly0vc2F4LTEuMi40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OcVZEdjlUcEFOVWpGbTBOOHVNNUd4TDM2VWdLaTkvYXRadyt4N1lGblE4Y2t3RkdLcmw0eFg0eVd0cmV5M1VKbTVuUDFrVWJuWWdMb3BxV05TUmhXdz09IgotICAgIH0sCi0gICAgInNheGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheGVzLy0vc2F4ZXMtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVMQmgxVGxzOGM5eGdHanczUXJNd0VUbVRNVmswb0ZndnJGU3ZXeDYybGxSMmhjRUlucktOWjJHWkNDdXV5Mmx2V3JkbDVqaGJwZXFjNWhSWUtGT2N3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAieG1sY2hhcnMiOiAiXjIuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInNjaGVkdWxlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZWR1bGVyLy0vc2NoZWR1bGVyLTAuMjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmVXZkdnQXFxV0ZHcXRkTW1jTDV6Q01LMVU4S2xYdjhTUUZHZ2xMM0NFdGQwYURWRFdnZUYvWW9DbXZsbjU1bTV6U2szSi8yMGhUYVNCZVNPYnNRRFE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb29zZS1lbnZpZnkiOiAiXjEuMS4wIiwKLSAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgInNjaGVtYS11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zY2hlbWEtdXRpbHMvLS9zY2hlbWEtdXRpbHMtMy4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBOL3lPQXZjQys1clE1bkVSR3V3cmpMbFl2TFRiQ2libloxSTdCMUxhaUF6OUJSQmxFOUdNZ0UvZXFWMzBQN2FKUVVmN0RkaW15L1JzYllPL0dyVkdnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuOCIsCi0gICAgICAgICJhanYiOiAiXjYuMTIuNSIsCi0gICAgICAgICJhanYta2V5d29yZHMiOiAiXjMuNS4yIgotICAgICAgfQotICAgIH0sCi0gICAgInNlbGVjdC1ob3NlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbGVjdC1ob3NlLy0vc2VsZWN0LWhvc2UtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1FdWdhTEsrWWZraWpCNGZ4MGU2a0ltdUpkQ0l0Mkx4Q1JjYkVZUHFSR0NzNEYyb2d5ZlpVNUlBWlJkakNQOEpQcTJBdGROb0MvRHV4NjNkOUtpcnlnPT0iCi0gICAgfSwKLSAgICAic2VsZnNpZ25lZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZWxmc2lnbmVkLy0vc2VsZnNpZ25lZC0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1NMM2Fvd2lGN3dhL1d0U0Z3blVybHVkV0ZvTmhmdHE4YlVrSDlwa3pqcE4yWFNQT0FZRWdnNmUwc1M5czByWndnSnpKaVFSUFUxOEE2Y2xub1c1d1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJub2RlLWZvcmdlIjogIl4xIgotICAgICAgfQotICAgIH0sCi0gICAgInNlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNi4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJSN1Z2RENWSE8rcTJ4QkVXc2t4UzZESkUxcVJuYjdEeHpVcm9nYjcxQ1dvU2ZpY0J4WXNpQUdkK0tsMG1tcS9NcHJHOXlBclJreXJReFRPNlhqTXpBPT0iCi0gICAgfSwKLSAgICAic2VuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VuZC8tL3NlbmQtMC4xOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xcVd6dU9qU0ZPdXFQakZlNE5Pc01MYWZUb1FRd0JTT0VwUytGd0V0M0EyVjN2S3ViVHF1VDN2bUxUUXBGZ01YcDhBbEZXRnVQMXFLYUpaT3RQcFZYZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlYnVnIjogIjIuNi45IiwKLSAgICAgICAgImRlcGQiOiAiMi4wLjAiLAotICAgICAgICAiZGVzdHJveSI6ICIxLjIuMCIsCi0gICAgICAgICJlbmNvZGV1cmwiOiAifjEuMC4yIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIn4xLjAuMyIsCi0gICAgICAgICJldGFnIjogIn4xLjguMSIsCi0gICAgICAgICJmcmVzaCI6ICIwLjUuMiIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICIyLjAuMCIsCi0gICAgICAgICJtaW1lIjogIjEuNi4wIiwKLSAgICAgICAgIm1zIjogIjIuMS4zIiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIjIuNC4xIiwKLSAgICAgICAgInJhbmdlLXBhcnNlciI6ICJ+MS4yLjEiLAotICAgICAgICAic3RhdHVzZXMiOiAiMi4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtcyI6ICIyLjAuMCIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAibXMiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHBwNjBQNklVSkRUdU9xLzVaOGNkc2t6SnVqZndxZk9Ua3J3SXdqN0lSSVNwbmtKblQ2U3lKNFBDUG5HTW9GakM5ZGRoYWw1S1ZJWXRBdDk3aXgwNUE9PSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJtcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02Rmx6dWJUTFpHM0oyYS9OVkNBbGVFaGp6cTVveGdIeWFDVTl5WVh2Y0xzdm9WYUhKcS9zNXhYSTYvWFhQNnR6N1I5eEFPdEhuU08vdFh0RjNXUlRsQT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic2VyaWFsaXplLWphdmFzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VyaWFsaXplLWphdmFzY3JpcHQvLS9zZXJpYWxpemUtamF2YXNjcmlwdC02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb3dvWEVGaldSbGxpczgvTTFRK0N3NWs4Wkg0MGUzemhwL292WCtYci92aTFxajZRZXNieVhYVmlGYnBOdld2UE5BRDYyU3V0d0VYYXZlZnJMSldqN3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyYW5kb21ieXRlcyI6ICJeMi4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic2VydmUtaW5kZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjkuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VydmUtaW5kZXgvLS9zZXJ2ZS1pbmRleC0xLjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcFhIZktOUDRxdWpydHRlTXJTQmIwcmM4SEo5TXMvR3JYd2NVdFV0RDVzNGV3REpJOGJUM0N6MnpUVlJNS3RyaTQ5cEx4MmUwWWE4emlQNVlhMnBaWnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhY2NlcHRzIjogIn4xLjMuNCIsCi0gICAgICAgICJiYXRjaCI6ICIwLjYuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICIyLjYuOSIsCi0gICAgICAgICJlc2NhcGUtaHRtbCI6ICJ+MS4wLjMiLAotICAgICAgICAiaHR0cC1lcnJvcnMiOiAifjEuNi4yIiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAifjIuMS4xNyIsCi0gICAgICAgICJwYXJzZXVybCI6ICJ+MS4zLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtcyI6ICIyLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJkZXBkIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwZC8tL2RlcGQtMS4xLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03ZW1QVGw2RHBvNkpSWE9YakxSeGNrK0ZsTFJYNTg0N2NMS0VuMDBQTEFnYzNnMmhUWlpncitlNGMydjZRcFNtTGVGUDNuNXlVbzdmdDZhdkJLLzVqUT09IgotICAgICAgICB9LAotICAgICAgICAiaHR0cC1lcnJvcnMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS42LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLWVycm9ycy8tL2h0dHAtZXJyb3JzLTEuNi4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGtzK2xWQzhkZ0d5aDk3anh2eGVZVFdRRnZoNHV3NHlDMTJnVmw2M0NnMzBzalBYNHd1R2Nka0lDVlhEQUVTcjZPSkdqcUdBOEl6NW1rZU42emxEN0E9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImRlcGQiOiAifjEuMS4yIiwKLSAgICAgICAgICAgICJpbmhlcml0cyI6ICIyLjAuMyIsCi0gICAgICAgICAgICAic2V0cHJvdG90eXBlb2YiOiAiMS4xLjAiLAotICAgICAgICAgICAgInN0YXR1c2VzIjogIj49IDEuNC4wIDwgMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpbmhlcml0cyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14MDBJUk5YTnk2M2p3R2tKbXpQaWdveVNIYmFxcE51ektiQk9teksrZzJPZFpwUTl3K3N4Q04rVlNCM2phN0lBZ2UyT1AycXBmeFRqZU5jeWptVzF1dz09IgotICAgICAgICB9LAotICAgICAgICAibXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHBwNjBQNklVSkRUdU9xLzVaOGNkc2t6SnVqZndxZk9Ua3J3SXdqN0lSSVNwbmtKblQ2U3lKNFBDUG5HTW9GakM5ZGRoYWw1S1ZJWXRBdDk3aXgwNUE9PSIKLSAgICAgICAgfSwKLSAgICAgICAgInNldHByb3RvdHlwZW9mIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0cHJvdG90eXBlb2YvLS9zZXRwcm90b3R5cGVvZi0xLjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJ2RS9Ud3BaWDRGWEV4eE94WnlSR1FRdjY1MU1Td21XS1pHcXZtUGNSSWpEcVd1YjY3a1RLdUlNeDQzY1paclMvY0JCendCY05EV29GeHQyWEVGSXBRPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJzdGF0dXNlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMS41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PcFozelAralQxUEk3SThuZW1KWDRBS21BWDA3MFprWVBWV1YvQWFLVEpsK3RYQ1RHeVZkQzFhNFNMOFJVUVlFd2svZjM0Wlg4VVR5a042OEZ3cnFBQT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic2VydmUtc3RhdGljIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXJ2ZS1zdGF0aWMvLS9zZXJ2ZS1zdGF0aWMtMS4xNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YR3VSRE5qWFVpanNVTDB2bDZuU0Q3Y3dVUnV6RWdnbGJPYUZ1Wk05ZzNrd0RYT1dWVGNrMGpMempQekdEK1RheldiYm9aWXU1Mi85L1hQZFVnbmU5Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImVuY29kZXVybCI6ICJ+MS4wLjIiLAotICAgICAgICAiZXNjYXBlLWh0bWwiOiAifjEuMC4zIiwKLSAgICAgICAgInBhcnNldXJsIjogIn4xLjMuMyIsCi0gICAgICAgICJzZW5kIjogIjAuMTguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzZXRwcm90b3R5cGVvZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FNUxEWDdXcnA4NUtpbDViaFp2NDZqOGpPZWJvS3E1Sk1tWU0zZ1ZHZEdIOHhGcFBXWFVNc05ybE9EQ3Jrb3hNRWVOaS9YWkl3dVJ2WTRYTndZTUpwdz09IgotICAgIH0sCi0gICAgInNoYWxsb3dlcXVhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGFsbG93ZXF1YWwvLS9zaGFsbG93ZXF1YWwtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXkwbTFKb1VaU2xQQWpYVnRQUFc3MGFaV2ZJTC9kU1A3QUZrUm5uaUxDcksvOE1ES29nM1R5U1RCbWNrRCtST2JWeEgwdjRUb3g2NytGMTRQZEVEMm9RPT0iCi0gICAgfSwKLSAgICAic2hhcnAtcm91dGVyIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoYXJwLXJvdXRlci8tL3NoYXJwLXJvdXRlci00LjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMDhCcVgwYVdvaHk0YzlaZUc1c3FQeFRrZG9DYlZ5cEVpSTdrUXJEWS9sUlYwbjFqYXZMYzhMTEo3WHFGODBVbnMwak1JUE1SUHA5STVQVEJaWlhBd3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvcmVhY3QiOiAiXjE2LjkuNTUiLAotICAgICAgICAicmVhY3QiOiAiXjE3LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL3JlYWN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE2LjE0LjQzIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3JlYWN0Ly0vcmVhY3QtMTYuMTQuNDMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03emRqdjdqdm9MTFFnMXRUdnBRc20raHlOVU1UMm1QbE5WMStkMEk4ZmJHaGtKbDgyc3BvcE15Qmx1NHdiMWR2aVpBeHBHZGs1ZUh1L211YWNrbm5mdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiQHR5cGVzL3Byb3AtdHlwZXMiOiAiKiIsCi0gICAgICAgICAgICAiQHR5cGVzL3NjaGVkdWxlciI6ICIqIiwKLSAgICAgICAgICAgICJjc3N0eXBlIjogIl4zLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzaGViYW5nLWNvbW1hbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlYmFuZy1jb21tYW5kLy0vc2hlYmFuZy1jb21tYW5kLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rSHhyMnpacFl0ZG1yTjFxRGpyclgvWjFyUjFrRzhEeCtna3BLMUc0ZVhtdlhzd21jRTFoVFdCV1lVemxyYVl3MS95WnA2WXVEWTc3WXR2Yk4wZG1EQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInNoZWJhbmctcmVnZXgiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInNoZWJhbmctcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlYmFuZy1yZWdleC8tL3NoZWJhbmctcmVnZXgtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcrK2RGaHRjeDMzNTN1QmFxOEREUjROdXhCZXRCekM3WlFPaG1UUUluSEVkNmJTclhkaUV5ekN2RzA3WjQ0VVlkTFNoV1V5WHQ1TS95aHo4ZWtjYjFBPT0iCi0gICAgfSwKLSAgICAic2hlbGwtcXVvdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlbGwtcXVvdGUvLS9zaGVsbC1xdW90ZS0xLjguMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNmoxVzlsMWlBcy80eFlCSTFTWU9WWnlGY0NpczliNEtDTFE4ZmdBR0cwN1F2emFSTFZWUlF2QXk4NXlObW1aU2pZamc0TVdoNGdOdmxQdWpVLzVMcEE9PSIKLSAgICB9LAotICAgICJzaWRlLWNoYW5uZWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lkZS1jaGFubmVsLy0vc2lkZS1jaGFubmVsLTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNVhQeXRxRkVJS0hrR2RpTUlyWTEwbXZMUnZuUWg0Mi8rR29CbEZXM2IyTFhMRTJ4eEpwWkZkbTk0d2UwQmFvVjNSd0p5R3FnNXdTN2VweFR2MFp2dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjAiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4wLjIiLAotICAgICAgICAib2JqZWN0LWluc3BlY3QiOiAiXjEuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInNpZ25hbC1leGl0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQtMy4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXduRDJaRStsK1NQQy91b1MwdlhlRTlMMSswd3VhTXFLbGZ6OUFNVW8zOEpzeUxTQldTRmNIUjFScmk2MkxaYzEydkxyMWdiM2psN2l3UWhnd3BBYkdRPT0iCi0gICAgfSwKLSAgICAic2lzdGVyYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaXN0ZXJhbnNpLy0vc2lzdGVyYW5zaS0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkxHR2xSMVF4QmN5bm4yZDVZbURYNE1HamxadnkyTVJCRFJOSExKOFZJNmw2KzlGVWl5VEZOSjBJdmVPU1AwYmNYZ1ZEUFJjZkdxQTBwamFxVXBmVmc9PSIKLSAgICB9LAotICAgICJzbGFzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbGFzaC8tL3NsYXNoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nOVExaGFlYnkzNk9TU3R3YjRudENHR0dhS3NhVlNqUTY4ZkJ4b1FjdXRsNWZTMXZ1WTE4SDN3U3QzakZ5RnRya3grS3owVjFHODVBNE15QWRETWkyUT09IgotICAgIH0sCi0gICAgInNvY2tqcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc29ja2pzLy0vc29ja2pzLTAuMy4yNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR0pnTFRaN3ZZYi9KdFBTU1oxMGhzT1lJdkVZc2piTlUrelBkSUhjVWFXVk5VRVBpdnp4a3UzMTg2NXNTU3VkMERhMFc0bEVlT1BsbXc5M3pMUWNodVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmYXllLXdlYnNvY2tldCI6ICJeMC4xMS4zIiwKLSAgICAgICAgInV1aWQiOiAiXjguMy4yIiwKLSAgICAgICAgIndlYnNvY2tldC1kcml2ZXIiOiAiXjAuNy40IgotICAgICAgfQotICAgIH0sCi0gICAgInNvdXJjZS1saXN0LW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbGlzdC1tYXAvLS9zb3VyY2UtbGlzdC1tYXAtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFuUTdnVk14R054c2lMNGxFdUp3ZS9UbzhVbks3ZkFubWJHRUVIOFJwTG91dUtiZUVtMGxoYlFWRklyTlN1QitHN3RWckFsVnNaZ0VUVDVubGpmK0l3PT0iCi0gICAgfSwKLSAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNy40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjcuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDNCaWtVeHZQT2NuNUU3NGRaaXE1QkdzVGI1eUV3aGFUU3pjY1U2dDRzRE9IOE5XSkNzdEtPNVFUMkN2dEZvSzZGMHNhTDdwOXhIQXFIT2xDUEp5Z0E9PSIKLSAgICB9LAotICAgICJzb3VyY2UtbWFwLWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtanMvLS9zb3VyY2UtbWFwLWpzLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SMFh2Vko5V3VzTGlxVENFaUdDbUlDQ01wbGNDa0l3d1IxMW1PU0Q5Q1I1dStJWFlkaXNlZUV1WENWQWpTNTR6cXdrTGNQTm5tVTRPZUo2dFVyV2hEdz09IgotICAgIH0sCi0gICAgInNvdXJjZS1tYXAtbG9hZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtbG9hZGVyLy0vc291cmNlLW1hcC1sb2FkZXItMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJva3hQb0xqeWwzaU9yZ2tXYWFrYXhxbmVsQUpTUyswVitEZTBrS0lxNmx5V3JYdWlQZ1lUR3A2ejNpSG1xbGpLQWFMWHdaYStjdEQ4R2NjUkplVnZnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWJhYiI6ICJeMi4wLjUiLAotICAgICAgICAiaWNvbnYtbGl0ZSI6ICJeMC42LjMiLAotICAgICAgICAic291cmNlLW1hcC1qcyI6ICJeMS4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic291cmNlLW1hcC1zdXBwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMC41LjIxIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXN1cHBvcnQvLS9zb3VyY2UtbWFwLXN1cHBvcnQtMC41LjIxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11QkhVM0wzY3pzSXlZWEtYODhmZHJHb3Z4ZFNDb1RHRFJaNlNZWHRTUnhMWlV6SGc1UC82Nkh0NnVvVWxIdTlFWm9kK2luWGhLbzNxUWd3WFVUL3kxdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJ1ZmZlci1mcm9tIjogIl4xLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInNvdXJjZW1hcC1jb2RlYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2VtYXAtY29kZWMvLS9zb3VyY2VtYXAtY29kZWMtMS40LjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlOeWtvalY1VWloNGxnbzVTbzVkdHcrZjBKZ0pYMzBLQ05JOGd3aHoySjlBMTV3RDBNbDZ0akhLd2Y2ZlRTYTZmQWRWQmRaZU5PczllSjcxcUNrOHZBPT0iCi0gICAgfSwKLSAgICAic3BkeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR5Ly0vc3BkeS00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcjQ2Z1pRWlFWK0tsOW9JdHZsMUpaWnFKS0dyK29Fa0IwOEE2QnpraVI3NTkzLzdJYnR1bmNYSGQyWW9ZZVRzRzQxNTdac3NNdTlLWXZVSExjamNEb0E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAotICAgICAgICAiaGFuZGxlLXRoaW5nIjogIl4yLjAuMCIsCi0gICAgICAgICJodHRwLWRlY2VpdmVyIjogIl4xLjIuNyIsCi0gICAgICAgICJzZWxlY3QtaG9zZSI6ICJeMi4wLjAiLAotICAgICAgICAic3BkeS10cmFuc3BvcnQiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInNwZHktdHJhbnNwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHktdHJhbnNwb3J0Ly0vc3BkeS10cmFuc3BvcnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhzTFZGRTVTakE2VENpc1dlSlhGS25pR0dPcEJnTUxtZXJmTzJhQ3lDVTVzN25KL3JwQWVwcW1GaWZ2L0dDYlNidWVFZUFKSm5tU1EycktDL2c4RmN3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiXjQuMS4wIiwKLSAgICAgICAgImRldGVjdC1ub2RlIjogIl4yLjAuNCIsCi0gICAgICAgICJocGFjay5qcyI6ICJeMi4xLjYiLAotICAgICAgICAib2J1ZiI6ICJeMS4xLjIiLAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIl4zLjAuNiIsCi0gICAgICAgICJ3YnVmIjogIl4xLjcuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJzcHJpbnRmLWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EOWNQZ2t2TGxWM3QzSXpMMEQwWUx2R0E5QWhrNFBjdlZ3VWJOMGRTR3IxYVAwTnJ0NEFFblRVYnVHdnF1RUMwbUE2NEdxdDFmemlybFJzNWliWHg4Zz09IgotICAgIH0sCi0gICAgInN0YWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGFibGUvLS9zdGFibGUtMC4xLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWppOXF4Um5PVmZjdUxEeVNqOXF6aEdTRUZWb2J5dDFrSU9Ta2oxcVp6WUx6cTdUb3Mvb1VVV3ZvdFVQUUxscnNpZHFzSzZ0Qkg4OUJjOWtMNXpIQTZ3PT0iCi0gICAgfSwKLSAgICAic3RhY2stdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhY2stdXRpbHMvLS9zdGFjay11dGlscy0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWGxrV3ZmSW02Um1zV3ROSngrdXF0S0xTOGVxRmJ4VWcwWnpMWHFZMGNhRXk5bDdocnVYOElwaURuanNMYXZvQmdxQ0NSNzFUcVdPOE1hWFloZUozUlE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0yLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVwemNMQ1hvbFVXY051NUh0Vk1IWWRYSmpBcmpzRjlDMGFObnF1WllZNHVXL1Z1MG1peTVZb1d2YlYzNDVIYXVWdmNBVW5wUnVoTU1jcVRjR09ZMit3PT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzdGFja2ZyYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YWNrZnJhbWUvLS9zdGFja2ZyYW1lLTEuMy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vZVZ0dDdlV1FTK05hNkYvL1M0a0oySzJWYlJsUzlENDNtQWxNeVZwVldvdnk5bytqZmdIOE85YWd6QU56YWlMamNsQTBvWXpVWEVNNFB1cmhTVUNodz09IgotICAgIH0sCi0gICAgInN0YXR1c2VzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJ3TkE5Wi83UHJLMDZyWUxJekZNbGFGK2w3M2l3cHpzcVJJRmdiTUxiVGNMRDZjT2FvODJUYVdlZlBYUXZCMmZPQzRBanVZU0VuZFM3Ti9tVENia2RRPT0iCi0gICAgfSwKLSAgICAic3RvcC1pdGVyYXRpb24taXRlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RvcC1pdGVyYXRpb24taXRlcmF0b3IvLS9zdG9wLWl0ZXJhdGlvbi1pdGVyYXRvci0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUNHUWorMGwwSE9kWjJBRWVCQURsc1JDK3ZzbkRzWnNiZFNpSDF5TlNqY2ZLTTdmZHBDTWZxQUwvZHdGNUJMaXcvWGhSZnQvV2F4NnpRYmhxMkJjalE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpbnRlcm5hbC1zbG90IjogIl4xLjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpbmdfZGVjb2RlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmdfZGVjb2Rlci8tL3N0cmluZ19kZWNvZGVyLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oa1JYOFUxV2pKRmQ4THNESjJ5US93V1d4YW9wRXNBQlUxWGZrTThBK2owKzg1SkFHcHB0MTZjcjFXaGc2S0liYjRva1U2TXFsNkJPait1dXAvd0tlQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpbmctbGVuZ3RoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy1sZW5ndGgvLS9zdHJpbmctbGVuZ3RoLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rbDZyTk41ZllITmhaWnk0MVJYc1lwdENqQTJJZ21xNEVHN2taQVlGUUkxRTFWVFhhcnI2WlBYQmc2ZXE3WTZlSzRGRWhZNkFKbHl1RkliL3YvUzBWUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYXItcmVnZXgiOiAiXjEuMC4yIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInN0cmluZy1uYXR1cmFsLWNvbXBhcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLW5hdHVyYWwtY29tcGFyZS8tL3N0cmluZy1uYXR1cmFsLWNvbXBhcmUtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW4zc1B3eW5MMW53S2kzV0o2QUlzQ2x3Qk1hMHpUaTU0Zm4yb0xVNm5kZlRTSU8wNXhhem5qU2YxNVBjQlpVNkZOV2JtTjVRNmN4VDRWNWhHdkI0dGF3PT0iCi0gICAgfSwKLSAgICAic3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0t5UVJRcGpKMHNJcDYyRXJTWmRHc2pNSldzYXA1b1JOaWhIaHU2RzdKVk8vOWpJQjZVeWV2TCt0WHVPcXJuZzhqL2N4S1RXeVdVd3ZTVHJpaVp6L2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vtb2ppLXJlZ2V4Ly0vZW1vamktcmVnZXgtOC4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NU2pZemNXTk9BMGV3QUhwejBNeHBZRnZ3ZzZ5ankxTkczeHRlb3F6NjQ0VkNvL1JQZ25yMS9HR3QraWMzaUpUelE4RXUzVGRNMTRTYXduVlVtR0U2QT09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsLy0vc3RyaW5nLnByb3RvdHlwZS5tYXRjaGFsbC00LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNnpPQ09jSitSSkFRc2hjVHZYUEhveG9RR09OYTNlL0xxeDkwd1VBK3dFelg3OHNnNUJvKzF0UW80TjBwb2hTMGVyRzlxdENxSkRqTkNRQmplV1Z4eWc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IiwKLSAgICAgICAgImdldC1pbnRyaW5zaWMiOiAiXjEuMS4zIiwKLSAgICAgICAgImhhcy1zeW1ib2xzIjogIl4xLjAuMyIsCi0gICAgICAgICJpbnRlcm5hbC1zbG90IjogIl4xLjAuMyIsCi0gICAgICAgICJyZWdleHAucHJvdG90eXBlLmZsYWdzIjogIl4xLjQuMyIsCi0gICAgICAgICJzaWRlLWNoYW5uZWwiOiAiXjEuMC40IgotICAgICAgfQotICAgIH0sCi0gICAgInN0cmluZy5wcm90b3R5cGUudHJpbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmcucHJvdG90eXBlLnRyaW0vLS9zdHJpbmcucHJvdG90eXBlLnRyaW0tMS4yLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXA2VG1lVDFUMzQxMU04Q2dnOXdCVE1SdFkycTkrUE55OUVWMWkybElYVU4vYnR0NzYzb0lmeHdOM1JSOFZVNndIWDhqLzFDRnkwTCtZdVRobTZiZ09nPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FsbC1iaW5kIjogIl4xLjAuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydGllcyI6ICJeMS4xLjQiLAotICAgICAgICAiZXMtYWJzdHJhY3QiOiAiXjEuMjAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpbmcucHJvdG90eXBlLnRyaW1lbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLnByb3RvdHlwZS50cmltZW5kLy0vc3RyaW5nLnByb3RvdHlwZS50cmltZW5kLTEuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KeVNxKzRtclBmOUVzREJFRFlNT2IvbE03WFFMdWx3ZzVSL20xcjBQWEVGcXJWMHFIdmw1OHNkVGlsU1h0S09mbENzSzJFOGp4ZitHS0MwVDA3Uld3UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnRpZXMiOiAiXjEuMS40IiwKLSAgICAgICAgImVzLWFic3RyYWN0IjogIl4xLjIwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnQvLS9zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydC0xLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb21xak1EYVk5MnBibjVIT1g3ZjlJY2NMQStVMXRBOUd2dFU0SnJvZGlYRmZZQjdqUHp6SHBSenBnbExBanRVVjZiQjU1N3p3Q2xKZXpUcW5BaVluUUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuNCIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4yMC40IgotICAgICAgfQotICAgIH0sCi0gICAgInN0cmluZ2lmeS1vYmplY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5naWZ5LW9iamVjdC8tL3N0cmluZ2lmeS1vYmplY3QtMy4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJIcWlGaDFlbHFDUTlXUExJQzhJMFEvZy93ajVKMWVNa3lvaUQ2ZW9RQXBXSFAwRnRsSzdycW5obWFiTDVWVVk5SlFDY3F3d3ZsT2FTdXV0ZWtneXJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ2V0LW93bi1lbnVtZXJhYmxlLXByb3BlcnR5LXN5bWJvbHMiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzLW9iaiI6ICJeMS4wLjEiLAotICAgICAgICAiaXMtcmVnZXhwIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgInN0cmlwLWJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1ib20vLS9zdHJpcC1ib20tNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN4dXJGdjV0RWdpaTMzWmk4SnRwNTV3RUlJTFI5ZWgzNEZBVzAwUFpmK0puU3NUbVYvaW9ld1NnUWw5N0pIdmdqb1JHd1BTaHNXbStJZHJ4QjM1ZDB3PT0iCi0gICAgfSwKLSAgICAic3RyaXAtY29tbWVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtY29tbWVudHMvLS9zdHJpcC1jb21tZW50cy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWnByS3grYkJMWHYwNjdXVENBTHY4U1N6NWwyK1hocFlDc1Z0U3FsTW5rQVhNV0RxKy9la1ZibDFnaHFQOXJVSFR6djZzbS9Ed0NPaVl1dFUveXAxZnc9PSIKLSAgICB9LAotICAgICJzdHJpcC1maW5hbC1uZXdsaW5lIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWZpbmFsLW5ld2xpbmUvLS9zdHJpcC1maW5hbC1uZXdsaW5lLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CcnB2Zk5BRTNkY3ZxN2xsM3hWdW16aktqWlE1dEkxc0VVSUtyM1Vva3MwWFVsNDVTdDNGbGF0VnFlZjlwcms0alJEemhXNldaZyszYms5M3k2cExqQT09IgotICAgIH0sCi0gICAgInN0cmlwLWluZGVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1pbmRlbnQvLS9zdHJpcC1pbmRlbnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxhSlRhM0piK1ZRcGFDNkRzZUhoRjdkWFZxSFRmSlBDUkRhRWJpZC9kck9oZ2l0Z1lrdS9sZXRNVXFPWEZvV1YweklJVWJqcGRIMnQrdFlqNGJRTVJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtaW4taW5kZW50IjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWpzb24tY29tbWVudHMvLS9zdHJpcC1qc29uLWNvbW1lbnRzLTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZlBjK1I0aWh3cVA2Ti9hSXYyZjFnTUg4bE9WdFdRSG9xQzR5SzZvU0RWVm9jdW1Bc2ZDcWprWG5xaVlNaG1Nd1MvbUVITHA3VmVobHQzcWw2bEVpZz09IgotICAgIH0sCi0gICAgInN0cmlwLW91dGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLW91dGVyLy0vc3RyaXAtb3V0ZXItMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWs1NXl4S0h3YVhucFlHc096ZzRWbDgrdERyV3lseERFcGtuR2poVGlaQjhkRlJVNXJUbzlDQXpleWNpdnhWM3MremxUS3dyczZXeE14Ujk1bjI2a3dnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzdHlsZS1sb2FkZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3R5bGUtbG9hZGVyLy0vc3R5bGUtbG9hZGVyLTMuMy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01M0JpR0xYQWNsbDltYUNZdFppMlJDUVpLYThOUVFhaTVDNGhvcnFLeVJtSGo5SDdRbWNVeXVjckgrNEtXL2dCUWJYTTJBc0IwYXhvRWNGWlBsZlBjdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAic3R5bGVkLWNvbXBvbmVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3R5bGVkLWNvbXBvbmVudHMvLS9zdHlsZWQtY29tcG9uZW50cy02LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVldOZllZQnVYenVMUy9RWUVlb1BnTUVyUDI2V0wrZFg5Ly9yRWg4MEIybW1sUzF5UnhSeHVMNWVheDRtNnliWUVVb0hXbFR5MlhPVTMyNzY3bWxNa2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAZW1vdGlvbi9pcy1wcm9wLXZhbGlkIjogIl4xLjIuMSIsCi0gICAgICAgICJAZW1vdGlvbi91bml0bGVzcyI6ICJeMC44LjAiLAotICAgICAgICAiQHR5cGVzL3N0eWxpcyI6ICJeNC4wLjIiLAotICAgICAgICAiY3NzLXRvLXJlYWN0LW5hdGl2ZSI6ICJeMy4yLjAiLAotICAgICAgICAiY3NzdHlwZSI6ICJeMy4xLjIiLAotICAgICAgICAicG9zdGNzcyI6ICJeOC40LjMxIiwKLSAgICAgICAgInNoYWxsb3dlcXVhbCI6ICJeMS4xLjAiLAotICAgICAgICAic3R5bGlzIjogIl40LjMuMCIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi41LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic3R5bGVoYWNrcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHlsZWhhY2tzLy0vc3R5bGVoYWNrcy01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0JwY2Q1SHg3RzZzZW83YjFMa3B0dHZUejdpa0QwTGxINVJtZGNCTmI2ZkZSMEZsN0xRd0hERnIzMDBxNGN3VXFpK0lZckZHbXNJSGllTUJmbk4vQnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjEuNCIsCi0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic3R5bGlzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0eWxpcy8tL3N0eWxpcy00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRTg3cElvZ3B3VXNVd1h3N2ROeVU0UURqZGdWTXk1Mm0rWEVPUEVLVW4xNjFjQ3pXampoUFNRaEJ5ZmQxQ2NOdnJPTG5YUTZPbm5aRHduSnJ6L1o0WVE9PSIKLSAgICB9LAotICAgICJzdWNyYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4zMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdWNyYXNlLy0vc3VjcmFzZS0zLjMyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlkUU9VMzRycFN5ajJUR3l6NEQycDhyYmt0SU9aOFFZOXMrREdMdkZVMWk1cFdKRTh2a3BydUNqR0NNSHNkWHduRDdKRGNTK25vU3dNL2E3enlORkRRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmciOiAiXjAuMy4yIiwKLSAgICAgICAgImNvbW1hbmRlciI6ICJeNC4wLjAiLAotICAgICAgICAiZ2xvYiI6ICI3LjEuNiIsCi0gICAgICAgICJsaW5lcy1hbmQtY29sdW1ucyI6ICJeMS4xLjYiLAotICAgICAgICAibXoiOiAiXjIuNy4wIiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC4xIiwKLSAgICAgICAgInRzLWludGVyZmFjZS1jaGVja2VyIjogIl4wLjEuOSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29tbWFuZGVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTQuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTk9LbTh4aGt6QWp6Rng4QjJ2NU9BSFQrdTVwUlFjMlVDYTJWcTlqWUwvMzFvMndpOW14QkE3TElGczNzVjVWU0M0OXo2cEVoZmJNVUx2U2hLajI2V0E9PSIKLSAgICAgICAgfSwKLSAgICAgICAgImdsb2IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy4xLjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjEuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUx3YXh3eVo3MkxrN3ZaSU50Tk5yeXdYMFp1THlTdHJkRHRhYmVmWktBWTVaR0poVnRnZHpubHVSZXN4Tm1QaXRFMFNBTytPMjZzV1RIZUtTSTJ3TUJBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJmcy5yZWFscGF0aCI6ICJeMS4wLjAiLAotICAgICAgICAgICAgImluZmxpZ2h0IjogIl4xLjAuNCIsCi0gICAgICAgICAgICAiaW5oZXJpdHMiOiAiMiIsCi0gICAgICAgICAgICAibWluaW1hdGNoIjogIl4zLjAuNCIsCi0gICAgICAgICAgICAib25jZSI6ICJeMS4zLjAiLAotICAgICAgICAgICAgInBhdGgtaXMtYWJzb2x1dGUiOiAiXjEuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFwQ0F2Umw5c3R1T0h2ZUtzbjdIbmNKUnZ2NTAxcUlhY0t6UWxPLytMd3hjOSswcTJ3THl2NERmdnQ4MC9EUG4ycHFPQnNKZERpb2dYR1I5K092d1J3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInN1cHBvcnRzLWh5cGVybGlua3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtaHlwZXJsaW5rcy8tL3N1cHBvcnRzLWh5cGVybGlua3MtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJwc0FabHBXY0R3T1BRQTIyYUNINEowdDdMOEptQXZzQ3hmT1NFd203Y1FzM0xzaE4zNlFhVGt3ZDcwRG5CT1hEV0dzc3cyZVVvYzhDYVJXVDBYdW5BPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzdXBwb3J0cy1wcmVzZXJ2ZS1zeW1saW5rcy1mbGFnIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLXByZXNlcnZlLXN5bWxpbmtzLWZsYWcvLS9zdXBwb3J0cy1wcmVzZXJ2ZS1zeW1saW5rcy1mbGFnLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vdDBXblhTOWZnZGtnSWNlUGU2UkhOazFXQTgrbXVQYTZjU2plUjNWOEsyN3E5QkIxclRFM1IxcDdIdjB6MVp5QWM4czZWdnY4REl5V2Y2ODFNQXQwdz09IgotICAgIH0sCi0gICAgInN2Zy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3ZnLXBhcnNlci8tL3N2Zy1wYXJzZXItMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWU0aEcxaFJ3b09kUmIzN2NJTVNnek5zeHl6S2ZheVc2Vk9mbHJ3dlIrL2J6cmt5eFkvMzFXa2JnblFwZ3RyTnAxU2RwSnZwVUFHVGEvWm9pUE5EdVJRPT0iCi0gICAgfSwKLSAgICAic3ZnbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdmdvLy0vc3Znby0xLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWh5L3NRWXhSNUJrQzk4Q1k3bzMxVkdzZzAxNEFLTEVQeGRmaG9yYTc2bDM2aEQ5UmR5NU5aQS9PY242eWF5TlBnU2FtWWR0WDJyRkpkY3YwN0FZVnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeMi40LjEiLAotICAgICAgICAiY29hIjogIl4yLjAuMiIsCi0gICAgICAgICJjc3Mtc2VsZWN0IjogIl4yLjAuMCIsCi0gICAgICAgICJjc3Mtc2VsZWN0LWJhc2UtYWRhcHRlciI6ICJeMC4xLjEiLAotICAgICAgICAiY3NzLXRyZWUiOiAiMS4wLjAtYWxwaGEuMzciLAotICAgICAgICAiY3NzbyI6ICJeNC4wLjIiLAotICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKLSAgICAgICAgIm1rZGlycCI6ICJ+MC41LjEiLAotICAgICAgICAib2JqZWN0LnZhbHVlcyI6ICJeMS4xLjAiLAotICAgICAgICAic2F4IjogIn4xLjIuNCIsCi0gICAgICAgICJzdGFibGUiOiAiXjAuMS44IiwKLSAgICAgICAgInVucXVvdGUiOiAifjEuMS4xIiwKLSAgICAgICAgInV0aWwucHJvbWlzaWZ5IjogIn4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4yLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTMuMi4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlQwWkk2a1pSZFRoOFl5SnczU01iWW0vdStOcWZzQXhFcFdPMFBmOXNxOC9lOTRXeHhPcFBLeDlGUjFGbHlDdE9WRE5PUSs4bnRscUZ4aVJjK3I1cUE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNvbG9yLWNvbnZlcnQiOiAiXjEuOS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImNoYWxrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0yLjQuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU10aStmOWxwSk5jd0Y0dFdWOC9PclRUdEYxZ1ppK2Y4RnFseUFkb3VyYWxjRldGUVdGMitOZ0NIU2hqa0NiK0lGQkxxOWJ1WndFMXhja1FVNHBlU3VRPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAotICAgICAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4xLjAuNSIsCi0gICAgICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjUuMy4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImNvbG9yLWNvbnZlcnQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS45LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0xLjkuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFmQVV0ZCt2RmRBdEZRY0M4Q0N5WXQxZllXeFNxQWlLMmNTRDZ6REI4TjNjcHNFQkF2UnhwOXpPR2c2Ry9TSEhKWUFUODgvYXovSXVER0FMc05WYkdnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb2xvci1uYW1lIjogIjEuMS4zIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImNvbG9yLW5hbWUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xLjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcyZlNlbmhNdzJIWk1UVkhlQ0E5S0NtcEVJYnpXaVFzak4rQkhjQmJTOXZyMW10dCt2SmpQZGtzSUJOVW1LQVc4VEZVRFBKSzVTVVUzUWhFOU5FWER3PT0iCi0gICAgICAgIH0sCi0gICAgICAgICJjc3Mtc2VsZWN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3NzLXNlbGVjdC8tL2Nzcy1zZWxlY3QtMi4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EcWs3TFFLcHdMb0gzVm92elpua3plZ3FOU3VBemlReU5aVWNyZERNNDAxaVkrUjVOa0dCWEdtdE8wNS95YVhRemlBTHVQb2dlRzBiN1VBZ2puVEpUUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYm9vbGJhc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJjc3Mtd2hhdCI6ICJeMy4yLjEiLAotICAgICAgICAgICAgImRvbXV0aWxzIjogIl4xLjcuMCIsCi0gICAgICAgICAgICAibnRoLWNoZWNrIjogIl4xLjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjc3Mtd2hhdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjQuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nzcy13aGF0Ly0vY3NzLXdoYXQtMy40LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BQ1VtM0wwL2ppWlRxZnpSTTNIaTlROGVacWQ2SUszN21NV1BMejlQSnhrTFdsbFllUmYrRUhVU0hZRXRGb3AyRXF5dGFxMUZpekZWaDdYZkJuWENEUT09IgotICAgICAgICB9LAotICAgICAgICAiZG9tLXNlcmlhbGl6ZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kb20tc2VyaWFsaXplci8tL2RvbS1zZXJpYWxpemVyLTAuMi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItMi94UGIzT1JzUTQybkhZaVN1blhrRGpQTEJhRWoveFR3VU80QjdYQ1pRVFJrN0VCdFRPUGF5Z2gxMFlBQWgyT0kxUXJwNk5XZnBBaHpzd2oweWR0OWc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImRvbWVsZW1lbnR0eXBlIjogIl4yLjAuMSIsCi0gICAgICAgICAgICAiZW50aXRpZXMiOiAiXjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImRvbXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuNy4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tdXRpbHMvLS9kb211dGlscy0xLjcuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxnZDJYY0ovTmpFdys3dEZ2Zkt4T3pDWUtac2RjdDVsY3pRMlphUVk4RGp6N3BmQUQzR2JwOHlTSld0cmVJSS92RGxNVm14d2E2cEhtZHhJWWd0dERnPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJkb20tc2VyaWFsaXplciI6ICIwIiwKLSAgICAgICAgICAgICJkb21lbGVtZW50dHlwZSI6ICIxIgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJkb21lbGVtZW50dHlwZSI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZG9tZWxlbWVudHR5cGUvLS9kb21lbGVtZW50dHlwZS0xLjMuMS50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CU0tCK1RTcE1wRkkvSE94Q05yMU84YU1PVFo4aFQzcE0zR1Ewdy9tV1Jta2hFRFNGSmtreXp6NFhRc0JWNDRCQ2h3R2tyRGZNeWpWRDBlQTJhRlYzdz09IgotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJoYXMtZmxhZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctMy4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zS0pmMStjZVFCcjRTTWt2UW5CRE5EdGY0VFhwVmhWR2F0ZXUwdDkxOGJsMzBGbmJFMm00dk5MWCtWV2UvZHBqbGIrSHVnR1l6Vzd1UVhIOThIUEVZdz09IgotICAgICAgICB9LAotICAgICAgICAibnRoLWNoZWNrIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnRoLWNoZWNrLy0vbnRoLWNoZWNrLTEuMC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItV2VCT2RqdThTbnpQTjV2VFVKWXhZVXhMZVhwQ2FWUDVpNWUwTEY4Zmc3V09SRjJXZDd3RlgvcGswdFlaazdzOFQrSjdWTHkwRGE2SjErd0NUMEF0SGc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImJvb2xiYXNlIjogIn4xLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInN5bWJvbC10cmVlIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N5bWJvbC10cmVlLy0vc3ltYm9sLXRyZWUtMy4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlRTms1S3dERitCdnorUHlPYmttU1lqSTVrc1ZVWXRqVzdBVTIycjJOS2NmTEpjWHA5NmhrRFdVMytYbmRPc1ViK0FROVFoZnpmQ1QyTytDTldUNVR3PT0iCi0gICAgfSwKLSAgICAidGFpbHdpbmRjc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGFpbHdpbmRjc3MvLS90YWlsd2luZGNzcy0zLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOWpQa01pSUJYdlBjMkt5d2tyYXFzVWZiZmorZEhEYitKUFd0U0phOU1MRmRyUHlhekk3cTZXWDJzVXJtN1I5ZVZSN3FxdjNQYXM3RXZRRnp4S25JNnc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYWxsb2MvcXVpY2stbHJ1IjogIl41LjIuMCIsCi0gICAgICAgICJhcmciOiAiXjUuMC4yIiwKLSAgICAgICAgImNob2tpZGFyIjogIl4zLjUuMyIsCi0gICAgICAgICJkaWR5b3VtZWFuIjogIl4xLjIuMiIsCi0gICAgICAgICJkbHYiOiAiXjEuMS4zIiwKLSAgICAgICAgImZhc3QtZ2xvYiI6ICJeMy4yLjEyIiwKLSAgICAgICAgImdsb2ItcGFyZW50IjogIl42LjAuMiIsCi0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMyIsCi0gICAgICAgICJqaXRpIjogIl4xLjE4LjIiLAotICAgICAgICAibGlsY29uZmlnIjogIl4yLjEuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNSIsCi0gICAgICAgICJub3JtYWxpemUtcGF0aCI6ICJeMy4wLjAiLAotICAgICAgICAib2JqZWN0LWhhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMC4wIiwKLSAgICAgICAgInBvc3Rjc3MiOiAiXjguNC4yMyIsCi0gICAgICAgICJwb3N0Y3NzLWltcG9ydCI6ICJeMTUuMS4wIiwKLSAgICAgICAgInBvc3Rjc3MtanMiOiAiXjQuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtbG9hZC1jb25maWciOiAiXjQuMC4xIiwKLSAgICAgICAgInBvc3Rjc3MtbmVzdGVkIjogIl42LjAuMSIsCi0gICAgICAgICJwb3N0Y3NzLXNlbGVjdG9yLXBhcnNlciI6ICJeNi4wLjExIiwKLSAgICAgICAgInBvc3Rjc3MtdmFsdWUtcGFyc2VyIjogIl40LjIuMCIsCi0gICAgICAgICJyZXNvbHZlIjogIl4xLjIyLjIiLAotICAgICAgICAic3VjcmFzZSI6ICJeMy4zMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgInRhcGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGFwYWJsZS8tL3RhcGFibGUtMi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdOelF2UVRPSVA2UnlUZkUyUXhiOFpWbE5tdzBuODh2cDFzendXUmltUDAybW5Uc3gzV3RuNXFSZHFZOXcyWGR1Rk5VZ3ZPd2hOblFzandDcCtrcWFRPT0iCi0gICAgfSwKLSAgICAidGVtcC1kaXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGVtcC1kaXIvLS90ZW1wLWRpci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYW9CQW5pUW1td3RjS3AvN0J6c0g4Q3h6djhPTDczNnA3djFpaEdiNWU5REo5a1R3R1dIclFyVkI1K2xmVkR6ZkdyZFJ6WGNoK2lnN0xIYVkxSlRPcmc9PSIKLSAgICB9LAotICAgICJ0ZW1weSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZW1weS8tL3RlbXB5LTAuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HMTN2dE1ZUFQvSjhBNFgyU2pkdEJUcGhabHJwMWdLdjZoWmlPancxNFJDV2c2R2JIdVFCR3RqbHg3NXhMYllWL3dFYzBEN0c1SzRyeEtQL2NYazhCdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAidGVtcC1kaXIiOiAiXjIuMC4wIiwKLSAgICAgICAgInR5cGUtZmVzdCI6ICJeMC4xNi4wIiwKLSAgICAgICAgInVuaXF1ZS1zdHJpbmciOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlLWZlc3QiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xNi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuMTYuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVhQnpHNk14TnpFbjlraXd2dHJlOTBjWGFOTGttYWRNV2ExelFNczNYT1JDWE5ic0gvT2V3d2J4QzVpYTlkQ3hJeG5UQXNTeFhKYWEvcDV5OERsdkpnPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ0ZXJtaW5hbC1saW5rIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rlcm1pbmFsLWxpbmsvLS90ZXJtaW5hbC1saW5rLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11bjBGbWlSVVFOcjVQSnF5OWtQN2M0MEY1Qk9mcEdsWVRyeG9uRENoRVpCN3B6WnhSTnAvYnQreW1peTkvbnB3WHlhOUtIOTluSi9HWEZJaVVrWUdGUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4yLjEiLAotICAgICAgICAic3VwcG9ydHMtaHlwZXJsaW5rcyI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidGVyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNS4xOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXJzZXIvLS90ZXJzZXItNS4xOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wZEw3NTdJZzVhMEkrb3dBNDJsNnRJdUV5Y1J1TTdGUFk0bjYyaDQ0bVJMUmZuT3hKa2tPSGQ2aTg5ZE9wd1pscEY2SlhCd2FBSEY2eVd6RnJ0K1F5QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZS1tYXAiOiAiXjAuMy4zIiwKLSAgICAgICAgImFjb3JuIjogIl44LjguMiIsCi0gICAgICAgICJjb21tYW5kZXIiOiAiXjIuMjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiAifjAuNS4yMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0ZXJzZXItd2VicGFjay1wbHVnaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGVyc2VyLXdlYnBhY2stcGx1Z2luLy0vdGVyc2VyLXdlYnBhY2stcGx1Z2luLTUuMy45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1adVhzcUUwN0VjZ2dUV1FqWFVqK0FvdC9PTWNEMGJNS0dnRjYzZjdVeFljdTUvQUpGNTNhSXBLMVlvUDV4UjlsNnMvSHkyYit0MUFNMGJMTlBSdWh3QT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4xNyIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjcuNC41IiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeMy4xLjEiLAotICAgICAgICAic2VyaWFsaXplLWphdmFzY3JpcHQiOiAiXjYuMC4xIiwKLSAgICAgICAgInRlcnNlciI6ICJeNS4xNi44IgotICAgICAgfQotICAgIH0sCi0gICAgInRlc3QtZXhjbHVkZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXN0LWV4Y2x1ZGUvLS90ZXN0LWV4Y2x1ZGUtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNBR1dQSXlPSFU2emxtZzg4andtN1ZSeVhuTU43aVY2OE9HQWJZRGsvTWgveEMvcHpWUGxRdFk2bmdvSUgvNS90Y2l1aEdmdkVTVThHckhyY3hENTZ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCi0gICAgICAgICJnbG9iIjogIl43LjEuNCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC40IgotICAgICAgfQotICAgIH0sCi0gICAgInRleHQtdGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGV4dC10YWJsZS8tL3RleHQtdGFibGUtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU4rOFVpc0FYREdrOFBGWFA0SEF6VlI5bmJmbVZKM3pZTEFXaVRJb3FDNXY1aXNpbmhyK3I1dWFPOCs3cjNCTWZ1Tkl1ZklzQTdSZHBWZ2FjQzJjU3B3PT0iCi0gICAgfSwKLSAgICAidGhlbmlmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aGVuaWZ5Ly0vdGhlbmlmeS0zLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUlZaU0lWNUlHMTBIazNlbm90cmh2ejBUOWVtNmN5SEJMa0gvWUFadUtxZDhoUmtLaFNmQ0dJY1AyS1VZMEVQeG5kekFOQm1ObGx6V1B3YWsrYmhlU3c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhbnktcHJvbWlzZSI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidGhlbmlmeS1hbGwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhlbmlmeS1hbGwvLS90aGVuaWZ5LWFsbC0xLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUk54UUgvcUk4L3QzdGhYSkR3Y3N0VU80emVxbzY0K1V5LytzTlZSQng0WG4yT1grT1o5b1AraUpuTkZxcGxGcmEyWlVWZUtDU2Eyb1ZXaTNUNHVWbUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ0aGVuaWZ5IjogIj49IDMuMS4wIDwgNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0aHJvYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhyb2F0Ly0vdGhyb2F0LTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XS2V4TW9KajN2RXVLMHlGRWFwajh5NjRWMEE2eGN1UHVLOUd0MWQwUitkekNTSmMwbEhxUXl0QWJTQjRjREFLMGRXaDRUMEUyRVRrb0xFMldaNDFPUT09IgotICAgIH0sCi0gICAgInRodW5reSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aHVua3kvLS90aHVua3ktMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVIWTduQmZ0Z1RoQnFPeUhHVk4rbDhnRjBCdWNQMDlmTW8wb08vTGIwdzFPRjgwZEp2K2xEVnBYRzYwV01RdmtjeEFrTnliS3NyRUlFM1p0S0dtUHJBPT0iCi0gICAgfSwKLSAgICAidG1wbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90bXBsLy0vdG1wbC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2YwdU9FQVF3SXFHdVdXMk1WellnOGZWL1FObmMvSXB1Sk5HODM3ckx1Y3pBYUxWSHNsV0haUWo0SUdpRWw1SHMza2tiaHdMOUFiN0hyc211aitTbXc9PSIKLSAgICB9LAotICAgICJ0by1mYXN0LXByb3BlcnRpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tZmFzdC1wcm9wZXJ0aWVzLy0vdG8tZmFzdC1wcm9wZXJ0aWVzLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vT2FLSzB4WXJzM0RteFJZcUwveURjK0Z4RlVWWWhEbFhNaFJtdjN6OTE1dzJIRjF0bk4xb21CMzU0ajhWVUdPL2hiUnp5RDZZM3NBN3Y3R1MvY2VvZz09IgotICAgIH0sCi0gICAgInRvLXJlZ2V4LXJhbmdlIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvLXJlZ2V4LXJhbmdlLy0vdG8tcmVnZXgtcmFuZ2UtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTY1UDdpejZYNXlFcjFjd2NndlF4YmJJdzdVazNnT3k1ZElkdFo0ckR2ZUxxaHJkSlArTGkvSHg2dHlLME5FYisyR0N5bmVDTUppR3FyQURDU05rOHNRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMtbnVtYmVyIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0b2lkZW50aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9pZGVudGlmaWVyLy0vdG9pZGVudGlmaWVyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vNXNTUEtFa2cvRElRTm1INDNWMC91ZXJMcnB6VmVka1VoOHRHTnZhZVhwZnB1d2pLZW5sU294LzJPL0JUbFpVdEVlK0pHN3M1WWhFejYwOFBsQUhSQT09IgotICAgIH0sCi0gICAgInRvdWdoLWNvb2tpZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b3VnaC1jb29raWUvLS90b3VnaC1jb29raWUtNC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFYL3k1cFZSa2ZSbmZtdVgrT2RiU2RYdlBlNmllS1gvRzJzN2U5OGY0cG9KSG5xSDMyODFnRFBtL21ldG02RS9XUmFtZng3V0M0SFVxa1dIZlFIcHJ3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicHNsIjogIl4xLjEuMzMiLAotICAgICAgICAicHVueWNvZGUiOiAiXjIuMS4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMC4yLjAiLAotICAgICAgICAidXJsLXBhcnNlIjogIl4xLjUuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidW5pdmVyc2FsaWZ5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pdmVyc2FsaWZ5Ly0vdW5pdmVyc2FsaWZ5LTAuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ0oxUWdLbU5nM0N3dkF2L2tPRm10bkVOMDVmMEQvY245UW50Z05PUWxRRjlkZ3ZWVEhqM3QrOEpQZGpxYXdDSGs3Vi9LQStmYlVxelo5WFdoY3FQVWc9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInRyNDYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHI0Ni8tL3RyNDYtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTE1SWg3cGhmY2RQNVl4cWlCK2lEdExvYVR6NE5kMzUrSWlBdjBrUTVGTktIelhnZFdxUG9USXFFRERKbVhjZVF0NEpaazZsVlBUOGxuRGxQcEdEcHB3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicHVueWNvZGUiOiAiXjIuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgInRyaW0tcmVwZWF0ZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHJpbS1yZXBlYXRlZC8tL3RyaW0tcmVwZWF0ZWQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBrb252bEtrOC9adVIwRDV0TFc4bGp0NUk4a214cDJYS3ltaGVwVWVPZENFZktwWmFrdFNBcmtMSFp0NzZPQjFadk85YnNzVXNEdHk0U1doTHZacExnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ0cnllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cnllci8tL3RyeWVyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jM3pheWI4L2tXV3B5Y1dZZzg3UDcxRTFTMVpMNmI2SUp4ZmI1ZnZzVWdzZjBTMk1WR2FEaERYWGpETXBkQ3BmV1hxcHRjKzRtWHdtaXkxeXBYcVJBQT09IgotICAgIH0sCi0gICAgInRzLWludGVyZmFjZS1jaGVja2VyIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cy1pbnRlcmZhY2UtY2hlY2tlci8tL3RzLWludGVyZmFjZS1jaGVja2VyLTAuMS4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWS9hcnZibitycnozSkNLbDlDNGtWTmZUZlNtMi9tRXA1RlN6NUVzWlNBTkdQU2xRcnBSSTVNNFBLRittSm5FNTJqT085MFBuUFNjM1VyM2JUUXcwZ0E9PSIKLSAgICB9LAotICAgICJ0c2NvbmZpZy1wYXRocyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMTQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHNjb25maWctcGF0aHMvLS90c2NvbmZpZy1wYXRocy0zLjE0LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW8vOWlYZ0NZYzVML0p4Q0hQZTNIdmg4US8yeG01WitwMThQRVNCVTZGZjMzNjk1UW5DSEJFamN5dFkycTE5dWE3TWJsL0RhdnRCT0xxK29HMFJDTCtnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2pzb241IjogIl4wLjAuMjkiLAotICAgICAgICAianNvbjUiOiAiXjEuMC4yIiwKLSAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNiIsCi0gICAgICAgICJzdHJpcC1ib20iOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqc29uNSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb241Ly0vanNvbjUtMS4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nMU1XTUxCaXo4RktpMWU0dzBVeVZMM3craUpjZVdBRkJBYUJubkdLT3BOYTVmOFRMa3RrYnJlMStzNm9JQ3lkV0FtK0hSVUdUbUkrLy94djJodlhZQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibWluaW1pc3QiOiAiXjEuMi4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInN0cmlwLWJvbSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWJvbS8tL3N0cmlwLWJvbS0zLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZhdkFNUlhPZ0JWTkY2bnlFRW1MM0RCSzE5aVJwRGNvSXdXK3N3UStDYkdpdTdsanU2dCtKa2xBMU1Id2VvV3RhZGd0NElTVlVzWEx5RHEzNGRkY3dBPT0iCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ0c2xpYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpYi8tL3RzbGliLTIuNS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tU3hsSkp3bDNCTUVRQ1VObnhYQlU5alA0SkJrdGNFR2hVUmNQUjZWUVZsblAwRmRERXNJYXowQzM1ZFhOR0x5UmZyQVROb2ZGMEY1cDJLUHhRZ0Irdz09IgotICAgIH0sCi0gICAgInRzbGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpbnQvLS90c2xpbnQtNi4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUliUjRua1Q5NkVRT3ZLRTJQVy9kakd6OGlHTmVKNHJGMm1CZmlZYVIvbnZVV1lLSmhMd2ltb0pLZ2pJRkVJRGliQnRPZXZqN0JxQ1JMNG9IZVdXVUNnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4wLjAiLAotICAgICAgICAiYnVpbHRpbi1tb2R1bGVzIjogIl4xLjEuMSIsCi0gICAgICAgICJjaGFsayI6ICJeMi4zLjAiLAotICAgICAgICAiY29tbWFuZGVyIjogIl4yLjEyLjEiLAotICAgICAgICAiZGlmZiI6ICJeNC4wLjEiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjEiLAotICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjQiLAotICAgICAgICAibWtkaXJwIjogIl4wLjUuMyIsCi0gICAgICAgICJyZXNvbHZlIjogIl4xLjMuMiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjUuMy4wIiwKLSAgICAgICAgInRzbGliIjogIl4xLjEzLjAiLAotICAgICAgICAidHN1dGlscyI6ICJeMi4yOS4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMy4yLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WVDBaSTZrWlJkVGg4WXlKdzNTTWJZbS91K05xZnNBeEVwV08wUGY5c3E4L2U5NFd4eE9wUEt4OUZSMUZseUN0T1ZETk9RKzhudGxxRnhpUmMrcjVxQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMS45LjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiY2hhbGsiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi40LjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTIuNC4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXRpK2Y5bHBKTmN3RjR0V1Y4L09yVFR0RjFnWmkrZjhGcWx5QWRvdXJhbGNGV0ZRV0YyK05nQ0hTaGprQ2IrSUZCTHE5YnVad0UxeGNrUVU0cGVTdVE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIl4zLjIuMSIsCi0gICAgICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IiwKLSAgICAgICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNS4zLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiY29sb3ItY29udmVydCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjkuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTEuOS4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWZBVXRkK3ZGZEF0RlFjQzhDQ3lZdDFmWVd4U3FBaUsyY1NENnpEQjhOM2Nwc0VCQXZSeHA5ek9HZzZHL1NISEpZQVQ4OC9hei9JdURHQUxzTlZiR2c9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNvbG9yLW5hbWUiOiAiMS4xLjMiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiY29sb3ItbmFtZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLW5hbWUvLS9jb2xvci1uYW1lLTEuMS4zLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzJmU2VuaE13MkhaTVRWSGVDQTlLQ21wRUlieldpUXNqTitCSGNCYlM5dnIxbXR0K3ZKalBka3NJQk5VbUtBVzhURlVEUEpLNVNVVTNRaEU5TkVYRHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJoYXMtZmxhZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctMy4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zS0pmMStjZVFCcjRTTWt2UW5CRE5EdGY0VFhwVmhWR2F0ZXUwdDkxOGJsMzBGbmJFMm00dk5MWCtWV2UvZHBqbGIrSHVnR1l6Vzd1UVhIOThIUEVZdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuNy4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTUuNy4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0J6bm5ROUtqSnFVNjdCNTJSTUM2NUNNYXJLMjYwMFdGbmJrY2Fpd1dxM3h5LzVoYUZKbHNoZ25wam92TVZKK0hmZjQ5ZDhHRW4wYjg3QzVwRFExMGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci01LjUuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFqVmp3ZFhJdDQwOE1JaUFxQ1g0b1VLc2dVMkVxQUd6czJQcGttNGFRWWJqbStaRVdFY1c0U2ZGTlRyNHVNTlptYTBleTRmNWxnTHJrQjBhWDBRTW93PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJoYXMtZmxhZyI6ICJeMy4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAidHNsaWIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4xNC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHNsaWIvLS90c2xpYi0xLjE0LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbmkzNU5LempnTXJ3ZXZ5c0hUQ0FydExEcFB2eWU4elYvMEU0RXlZbjQzUDcvN3F2UXdQaDlCR2tIZXdiTXVsVm50YmlnbWNUN3JkWDNCTm85d1JKZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidHN1dGlscyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjI5LjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c3V0aWxzLy0vdHN1dGlscy0yLjI5LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nNUpWSENJSnd6ZklTYVhwWEUxcXZOYWxjYTVKd29iNkZqSTRBb1BscU11c0o2ZnRGRTdJa2tGb01oVkxSZ0srNEt4M2dremI4VVpLNXQ1eVRUdkVtQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAidHNsaWIiOiAiXjEuOC4xIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInRzbGludC1jb25maWctcHJldHRpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjE4LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGludC1jb25maWctcHJldHRpZXIvLS90c2xpbnQtY29uZmlnLXByZXR0aWVyLTEuMTguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFB3OVBnTlBMRzNpS1J4bUs3RFdyK0VhL1N6cnZmSHRqRnQ1TEJsNjFnazJVQkcvREI5a0NYUmp2K3h5SVUxclV0bmF5TGVNVVZKQmNNWDhaMTduRGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInRzdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIxLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzdXRpbHMvLS90c3V0aWxzLTMuMjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbUhLSzNpVVhMKzNVRjZ4TDVrMFBFaEtSVUJLUEJDdi8rUmtFT3BqUld4eHgyN0tLUkJtbUE2MEE5cGdPVXZNaThHS2hSTVBFbWpCUlB6czJXN08xT0E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ0c2xpYiI6ICJeMS44LjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRzbGliIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMTQuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGliLy0vdHNsaWItMS4xNC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItWG5pMzVOS3pqZ01yd2V2eXNIVENBcnRMRHBQdnllOHpWLzBFNEV5WW40M1A3LzdxdlF3UGg5QkdrSGV3Yk11bFZudGJpZ21jVDdyZFgzQk5vOXdSSmc9PSIKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInR5cGUtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1jaGVjay8tL3R5cGUtY2hlY2stMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhsZVVvYzl1d0dYcWpXd1hhVVRaQW16TWNGWjU4NThRQTJ2dngxVXI1eEljaXhYSVArOExuRkRnUnBsVTMwdXM2dGVxZGxza0ZmdSthZTRLNzlPb2V3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicHJlbHVkZS1scyI6ICJeMS4yLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidHlwZS1kZXRlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1kZXRlY3QvLS90eXBlLWRldGVjdC00LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGZyL21JSDFkbE8reDdUbGNNeStiSURxS1Bzdy83MHRWeWVIVzc4N2dvUWpobXFhWmUxMHV3THVqdWJLOXE5TGc2RmlobzFLVUtEWXowWjdrN2c1L2c9PSIKLSAgICB9LAotICAgICJ0eXBlLWZlc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIxLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC0wLjIxLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQwcnpCcTg3bTNmVmNkdUhEVUZoS215eVgrOWVvNldRalp2ZjUxRWEvTTBRNytUMzc0SnAxYVVpeVVsMEdLeHA4TS9PRVRWSFNEdm1reVBndlgrWDJ3PT0iCi0gICAgfSwKLSAgICAidHlwZS1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4xOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1pcy8tL3R5cGUtaXMtMS42LjE4LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ua1JLcjlzVVR4RUg4TWRmdUNTUDdWaXpKeXpSTk1qajJKMmRvMkpyM0t5bTU5OEpWZEVrc3V6UFFDbmxGUFc0a3k5UStpQSttYTlCR20wNlhRQnk4Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1lZGlhLXR5cGVyIjogIjAuMy4wIiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAifjIuMS4yNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0eXBlZC1hcnJheS1sZW5ndGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZWQtYXJyYXktbGVuZ3RoLy0vdHlwZWQtYXJyYXktbGVuZ3RoLTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Lalp5cEdxK0kvSDdISTVIbE9vR0hrV1VVR3ErUTBUUGhRdXJMYnlyVnJ2bktUQmd6TGhJSjdqNkovWFRRT2kwZDFSanlaMHdkYXM4YktzMnAweDNOZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNhbGwtYmluZCI6ICJeMS4wLjIiLAotICAgICAgICAiZm9yLWVhY2giOiAiXjAuMy4zIiwKLSAgICAgICAgImlzLXR5cGVkLWFycmF5IjogIl4xLjEuOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0eXBlZGFycmF5LXRvLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlZGFycmF5LXRvLWJ1ZmZlci8tL3R5cGVkYXJyYXktdG8tYnVmZmVyLTMuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ZHU4WE1ORURlcEtLUitYWU9YQVZQdFd1aTBseTBOdG9oVXNjdytVbWFIaUFXVDhoclYxcnIvL0g2ViswRHZKM09RMTlTOTc5TTBsYUxmWDhybTgyUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLXR5cGVkYXJyYXkiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInR5cGVzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjkuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZXNjcmlwdC8tL3R5cGVzY3JpcHQtNC45LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFGWGs5RTJIbStRelpRN3orTWNKaUhMNE5XMUYyRXpNdTlOcTlpM3pBYUdxaWJhZnFZd0NWVTZXeVdBdXlRUlJ6T2x4b3U4eFpTeVhMRU44b0tqMjRnPT0iCi0gICAgfSwKLSAgICAidW5ib3gtcHJpbWl0aXZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuYm94LXByaW1pdGl2ZS8tL3VuYm94LXByaW1pdGl2ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNjFwUGxDRDloNTFWb3JleUowQlJlaWRlTTNNREtNS25oNitWOUwwODMzMWlwcTZROE9GWFpZaXFQNm4vdGJIeDRzNUk5dVJoY3llNkJyYmtpemtCRHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImhhcy1iaWdpbnRzIjogIl4xLjAuMiIsCi0gICAgICAgICJoYXMtc3ltYm9scyI6ICJeMS4wLjMiLAotICAgICAgICAid2hpY2gtYm94ZWQtcHJpbWl0aXZlIjogIl4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJ1bmRpY2ktdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjI1LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuZGljaS10eXBlcy8tL3VuZGljaS10eXBlcy01LjI1LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdhMWpmWXdSbjcrY1A5djhhdXZFWE4xclgzc1dxbGF5ZDRIUDdPS2s0bVpXeWxFbXUzS3pYRFVHclFVTjZPbDdxbzFnUHZCMmU1Z1g2dWRueUVQZ2RBPT0iCi0gICAgfSwKLSAgICAidW5pY29kZS1jYW5vbmljYWwtcHJvcGVydHktbmFtZXMtZWNtYXNjcmlwdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmljb2RlLWNhbm9uaWNhbC1wcm9wZXJ0eS1uYW1lcy1lY21hc2NyaXB0Ly0vdW5pY29kZS1jYW5vbmljYWwtcHJvcGVydHktbmFtZXMtZWNtYXNjcmlwdC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVk1UHBEbGZWSVU1K3kvQlNDeEFKUkJJUzFaYzJkREczVWpxK3NSMFUrSmpVZXZXMkpob2NPRitzb1JPWURTYUFlek96T0t1eXlpeGhENm1Ca25TbVE9PSIKLSAgICB9LAotICAgICJ1bmljb2RlLW1hdGNoLXByb3BlcnR5LWVjbWFzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pY29kZS1tYXRjaC1wcm9wZXJ0eS1lY21hc2NyaXB0Ly0vdW5pY29kZS1tYXRjaC1wcm9wZXJ0eS1lY21hc2NyaXB0LTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01a2FaQ3JicDVtbWJ6NXVsQmtEa2JZMFNzUE9qS3FWUzM1VnBMOXVsTVBmU2wwSjBYc20rOUV2cGh2OUNvSVpGd3JlN2FKb2E5NEFZNnNlTUtHVk41UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInVuaWNvZGUtY2Fub25pY2FsLXByb3BlcnR5LW5hbWVzLWVjbWFzY3JpcHQiOiAiXjIuMC4wIiwKLSAgICAgICAgInVuaWNvZGUtcHJvcGVydHktYWxpYXNlcy1lY21hc2NyaXB0IjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ1bmljb2RlLW1hdGNoLXByb3BlcnR5LXZhbHVlLWVjbWFzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pY29kZS1tYXRjaC1wcm9wZXJ0eS12YWx1ZS1lY21hc2NyaXB0Ly0vdW5pY29kZS1tYXRjaC1wcm9wZXJ0eS12YWx1ZS1lY21hc2NyaXB0LTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xeGtqUXQ2cWpnL21Zc2NZTUMwWEtSbjNSaDB3RlBsZnhCMHhrdDlDZnlUdnBYMVJhMCtyQW1kWDJReUFvYnB0U0V2dXk0UnRwUFJ1aTZYa1YrOHdqQT09IgotICAgIH0sCi0gICAgInVuaWNvZGUtcHJvcGVydHktYWxpYXNlcy1lY21hc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaWNvZGUtcHJvcGVydHktYWxpYXNlcy1lY21hc2NyaXB0Ly0vdW5pY29kZS1wcm9wZXJ0eS1hbGlhc2VzLWVjbWFzY3JpcHQtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZ0M2ZvVFFJOXFuZStPWm9WUUIvOHg4cmsyazFlVnkxZ1JYaFYzb0ZRNVQ2UjFkcVExeHRpbjNYcVNseDMrQVRCa2xpVGFSL2hIeUpCbStMVlBOTTh3PT0iCi0gICAgfSwKLSAgICAidW5pcXVlLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmlxdWUtc3RyaW5nLy0vdW5pcXVlLXN0cmluZy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdU5hZWlyRVB2cFpXU2d6d3NQR3RVMnpWU1Rybi84TDVxL0lleFptSDBlSDZTQTczQ21BQTVVNEd3T1JUeFFBWnM5NVRBWExOcWVMb1BQTk81Z1pmV2c9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjcnlwdG8tcmFuZG9tLXN0cmluZyI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidW5pdmVyc2FsaWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaXZlcnNhbGlmeS8tL3VuaXZlcnNhbGlmeS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaEFac0txN1l5MTFadTFERTBPeldqdzdubkxabUpaWVREWlp5RUZIWmRVaFY4RmtINU1DZm9VMVhNYXhYb3ZweVc1bnE1c2NQcXEwWkRQOVp5bDA0b1E9PSIKLSAgICB9LAotICAgICJ1bnBpcGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5waXBlLy0vdW5waXBlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wankyYlloU3N1ZndXbEt3UGMrbDNjTjcrd3VKbEs2dXowWWRKRU9sUURibDZqby9ZbFBpNG1iOGFnVWtWQzhCRjdWOE51emV5UE5xUmtzQTNoenRLUT09IgotICAgIH0sCi0gICAgInVucXVvdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5xdW90ZS8tL3VucXVvdGUtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZSQ3FGdjZVaFhwV3haUHlHRGgvRjNacE52OC9xbzd3Nml1ZkxwUWc5YUtuUTcxcU00QjVLaUk3TWlhOUNPY2pFaHJPOUx1ZUhwTVlqWXpzV0gzT0lnPT0iCi0gICAgfSwKLSAgICAidXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBhdGgvLS91cGF0aC0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYVp3R3BhbUZPNjFnM09sZlQ3T1FDSHFoR25XNDNpZUg5V1plUDdReE4vRy9qUzRqZnFVa1p4b3J5dkpnVlBFY3JsNU5ML2dnSHNTbUxNSHVINjRMaGc9PSIKLSAgICB9LAotICAgICJ1cGRhdGUtYnJvd3NlcnNsaXN0LWRiIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91cGRhdGUtYnJvd3NlcnNsaXN0LWRiLy0vdXBkYXRlLWJyb3dzZXJzbGlzdC1kYi0xLjAuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRDd0VGZjAvb1Q4NU0xZkhCZzRGMGp0THdKcnV0R29IU1FYQ2g3dTRvMnQxZHJHK2MwYTlGbG5xd3c2WFVLU2ZRTVBwSkJSalU4ZDRSWEIwOXF0dmFBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXNjYWxhZGUiOiAiXjMuMS4xIiwKLSAgICAgICAgInBpY29jb2xvcnMiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInVyaS1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91cmktanMvLS91cmktanMtNC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdyS1V5eTMzUTF5Yzk4cFExREFtTHR3WDEwOUY3VElmV2xXMVlkbzhXbDFpaTFTZUhpZWVoMEhIZlBlTDJmTVhLNnowczhlY0tzOWZyQ3VMSnZuZEJnPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicHVueWNvZGUiOiAiXjIuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgInVybC1wYXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXJsLXBhcnNlLy0vdXJsLXBhcnNlLTEuNS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV3lwY2ZpUmhmZVVQOXZ2RjBqNnJ3MEozaHJXcnc2aVp2MysyMmg2aVJNSi84ejFUajZYZkxQNERzVWl4NU1oTVBuWHBpSERvS3lvWi9iZENrd0JDaVE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJxdWVyeXN0cmluZ2lmeSI6ICJeMi4xLjEiLAotICAgICAgICAicmVxdWlyZXMtcG9ydCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidXRpbC1kZXByZWNhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbC1kZXByZWNhdGUvLS91dGlsLWRlcHJlY2F0ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRVBENXExdVh5RnhKcENyTG5DYzFuSG5xM2dPYTZEWkJvY0FJaUkyVGFTQ0E3VkNKMVVKRE1hZ0N6SWtYTnNVWWZEMWRhSy8vTFRFUTh4aUlickh0Y3c9PSIKLSAgICB9LAotICAgICJ1dGlsLnByb21pc2lmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlsLnByb21pc2lmeS8tL3V0aWwucHJvbWlzaWZ5LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nOUpwQy8zSGUzYm0zOHpzTHVwV3J5WEhvRWNTMjJZSHRodVBRU0pkTXk2S05yeklSeldxY3NIekQvV1VucWU0NXdoVm91NFZJc1BldzM3RG9YV05yQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0aWVzIjogIl4xLjEuMyIsCi0gICAgICAgICJlcy1hYnN0cmFjdCI6ICJeMS4xNy4yIiwKLSAgICAgICAgImhhcy1zeW1ib2xzIjogIl4xLjAuMSIsCi0gICAgICAgICJvYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9ycyI6ICJeMi4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidXRpbGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbGEvLS91dGlsYS0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWjBEYmdFTFM5L0wvNzV3WmJybzh4QW5UNTBwQlZGUVoraFVFdWVHRFU1Rk41MVlTQ1lNK2pkeHNmQ2lIandOUC80TENERDBpL2dyYUtwZUJuT1hLUkE9PSIKLSAgICB9LAotICAgICJ1dGlscy1tZXJnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlscy1tZXJnZS8tL3V0aWxzLW1lcmdlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wTVpUdklrVDFkK1RGR3ZET3FvZE9jbHgwUVdra2dpNlRkb2E4Z0M4ZmZHQUFxejlwelBUWldBeWJic0hIb0VEL3p0TXRrdi9Wb1lUWXlTaFVuODFoQT09IgotICAgIH0sCi0gICAgInV1aWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXVpZC8tL3V1aWQtOC4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStOWXMyUWVNV3krR1dGT0VtOXhubjZIQ0RwMGw3UUJEN21sOHpMVW1KKzkzUTVORjBOb2NFcm53a1RrWFZGTmlYMy9mcEM2YWZTOERoYi9nejdSN2VnPT0iCi0gICAgfSwKLSAgICAidjgtdG8taXN0YW5idWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdjgtdG8taXN0YW5idWwvLS92OC10by1pc3RhbmJ1bC05LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNnozR1c5eDhHMWdkK0pJSWdRUVF4WHVpSnRDWGVBanA2UmFQRVBMdjYybUgzaVBIUHhWNlczcm9ieHRDek5FclJvNlp3VG16V2hzYk52anlFQkt6S0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTIiLAotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjEiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ2YXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhcnkvLS92YXJ5LTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTkdiV0xmZDBlVVBhYmhrWFVWbTBqOHV1dlJFeVRoNW92UmEvZHlvdy9CcUFiWkp5Qys1ZlUrSXpRT3ptQUt6WXFZUkFJU29SaGRRcjNlSVovUFhxZz09IgotICAgIH0sCi0gICAgInczYy1oci10aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3czYy1oci10aW1lLy0vdzNjLWhyLXRpbWUtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXo4UDVEdkROaktEb0ZJSEs3cThyOGxhY2tUNmwram8vWWUzSE9sZTdsOW5JQ1A5bGYxQ2kyNWZ5OXZIZDBKT1dld2tJRnpYSUVpZzNUZEtUN0pRNWZRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnJvd3Nlci1wcm9jZXNzLWhydGltZSI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidzNjLXhtbHNlcmlhbGl6ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdzNjLXhtbHNlcmlhbGl6ZXIvLS93M2MteG1sc2VyaWFsaXplci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNHR6RDBtRjhpU2lNaU5zMzBCaUxPM0VwZkdMWlVUMk1TWC9HK283Wnl3RHpsaVdRM09QdFRaMFBUQzNCM2NhMVVBZjRjSk1IQisyQmY1NkVyaUp1UkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndhbGtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YWxrZXIvLS93YWxrZXItMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRzLzhFOGw1YjdrWTB2bFdMZXdPa0RYTW1QZExjVlY0R21PUUx5eHVTc3dJSnN3ZWVGWnRBc01GN2sxTnN6eitUWUJRcmxZUm16T25yMzk4eTFKZW1RPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibWFrZWVycm9yIjogIjEuMC4xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3YXRjaHBhY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2F0Y2hwYWNrLy0vd2F0Y2hwYWNrLTIuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MY3ZtN01HU1QvNGZ1cCtpZnlLaTJoanlJQXdjZEk0SFJndHZUcElVeEJSaEIrUkZ0VWg4WHRET3hVZmN0VkNuaFZpK1FRajQ5aTkxT3l2emtKbDZjZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdsb2ItdG8tcmVnZXhwIjogIl4wLjQuMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4xLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2J1ZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YnVmLy0vd2J1Zi0xLjcuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzg0UU9ucjBpY3NiRkdMUzBPM2JJNUZzd3h6UnI4L2dId1drRGxRRnNraFNQcnlRWHZyVE14anhHUDQraVdZb2F1TG9CdmZEcGtyT2F1WiswaVpwREE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtaW5pbWFsaXN0aWMtYXNzZXJ0IjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3ZWItdml0YWxzIjogewotICAgICAgInZlcnNpb24iOiAiMy41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYi12aXRhbHMvLS93ZWItdml0YWxzLTMuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mNVluQ0hWRzlZNnVMQ2VQRDR0WThiTy9HZTE1TlBFUVd0dm0zdFB6REt5Z2xvaXF0YjRTVnFSSEJjcklBcW8yenRxWDVYdWVxRG45N3pIRjBMZFQ2dz09IgotICAgIH0sCi0gICAgIndlYmlkbC1jb252ZXJzaW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJpZGwtY29udmVyc2lvbnMvLS93ZWJpZGwtY29udmVyc2lvbnMtNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFCSXZGTEdpQnBMamZ3bVlBYUhQWHNuK2hvNXhabkd2eUd2c2FyeXdHTmM4VnlRSlVNSEo4T0JLR0dyUEVSMG9rQmVNRGFhbjRtTkJsZ0JST3h1STh3PT0iCi0gICAgfSwKLSAgICAid2VicGFjayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuODcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2VicGFjay8tL3dlYnBhY2stNS44Ny4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HT3UxdE5iUTdwMWJERW9GUnMyWVBjZnlHczh4cTUyeXlQQlozbTJWR25YR3RWOU14anJrQUJIbTRWOUlhMjgwT2Vmc1NMenZiVm9YY2ZMeGpLWS9Jdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9lc2xpbnQtc2NvcGUiOiAiXjMuNy4zIiwKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiXjEuMC4wIiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL2FzdCI6ICJeMS4xMS41IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3dhc20tZWRpdCI6ICJeMS4xMS41IiwKLSAgICAgICAgIkB3ZWJhc3NlbWJseWpzL3dhc20tcGFyc2VyIjogIl4xLjExLjUiLAotICAgICAgICAiYWNvcm4iOiAiXjguNy4xIiwKLSAgICAgICAgImFjb3JuLWltcG9ydC1hc3NlcnRpb25zIjogIl4xLjkuMCIsCi0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMTQuNSIsCi0gICAgICAgICJjaHJvbWUtdHJhY2UtZXZlbnQiOiAiXjEuMC4yIiwKLSAgICAgICAgImVuaGFuY2VkLXJlc29sdmUiOiAiXjUuMTUuMCIsCi0gICAgICAgICJlcy1tb2R1bGUtbGV4ZXIiOiAiXjEuMi4xIiwKLSAgICAgICAgImVzbGludC1zY29wZSI6ICI1LjEuMSIsCi0gICAgICAgICJldmVudHMiOiAiXjMuMi4wIiwKLSAgICAgICAgImdsb2ItdG8tcmVnZXhwIjogIl4wLjQuMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjkiLAotICAgICAgICAianNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMiOiAiXjIuMy4xIiwKLSAgICAgICAgImxvYWRlci1ydW5uZXIiOiAiXjQuMi4wIiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAiXjIuMS4yNyIsCi0gICAgICAgICJuZW8tYXN5bmMiOiAiXjIuNi4yIiwKLSAgICAgICAgInNjaGVtYS11dGlscyI6ICJeMy4yLjAiLAotICAgICAgICAidGFwYWJsZSI6ICJeMi4xLjEiLAotICAgICAgICAidGVyc2VyLXdlYnBhY2stcGx1Z2luIjogIl41LjMuNyIsCi0gICAgICAgICJ3YXRjaHBhY2siOiAiXjIuNC4wIiwKLSAgICAgICAgIndlYnBhY2stc291cmNlcyI6ICJeMy4yLjMiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludC1zY29wZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1zY29wZS8tL2VzbGludC1zY29wZS01LjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJOeHdiRi9oWjBLcGVwWU4wY05ibytGTjZYb0s3R2FIbFFoZ3gvaElabDZWYTBiRjQ1UlFPT3doTEl5OGxRRGJ1Q2lhZFNMQ0JuSDJDRllxdWl0NWJ3PT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJlc3JlY3Vyc2UiOiAiXjQuMy4wIiwKLSAgICAgICAgICAgICJlc3RyYXZlcnNlIjogIl40LjEuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJlc3RyYXZlcnNlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtNC4zLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zOW5uS2ZmV3o4eE4xQlUvMmM3OW45bkI5SER6bzBuaVlVcXg2eHlxVW55b0FuUXl5V3BPVGRaRWVpQ2NoOEJCdTUxNXQ0d3A5Wm1nVmZWaG45RUJwdz09IgotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAid2VicGFjay1kZXYtbWlkZGxld2FyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLWRldi1taWRkbGV3YXJlLy0vd2VicGFjay1kZXYtbWlkZGxld2FyZS01LjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGo1Q1lyWTBiWkxCK2VUTyt4L2o2N1BrcnF1aXk3a1dlcE1IbVVNb1BzbWNVYWVFblFKcUZ6SEpPeXhnV2xxNzQ2L3dVdUE2NHA5dGEzNEt5YjAxcEE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb2xvcmV0dGUiOiAiXjIuMC4xMCIsCi0gICAgICAgICJtZW1mcyI6ICJeMy40LjMiLAotICAgICAgICAibWltZS10eXBlcyI6ICJeMi4xLjMxIiwKLSAgICAgICAgInJhbmdlLXBhcnNlciI6ICJeMS4yLjEiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMTIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zUnUxa3BjTzl5THRZeEJLdnFmVGVoOUt6WkV3TzNTVHlYMUhUKzRDYUR6QzZIcFRHWWhJaFBJemo5WHVLVTdLWUR3bmFlaDVoY093ankxUXVKekJQQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJyZXF1aXJlLWZyb20tc3RyaW5nIjogIl4yLjAuMiIsCi0gICAgICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhanYta2V5d29yZHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYta2V5d29yZHMvLS9hanYta2V5d29yZHMtNS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ1MvSk5GQVV5cjV2QXVoazFEV20xQ0J4UkhXOUxiSjJveldlZW1ySXFwYnNxS2pIVnhZUHlpNUdDMHJqWklUNUp4SjN2aXJWVFM4d2s0aS9aK2tydz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgICAgICB9LAotICAgICAgICAic2NoZW1hLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjkiLAotICAgICAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl41LjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ3ZWJwYWNrLWRldi1zZXJ2ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE1LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnBhY2stZGV2LXNlcnZlci8tL3dlYnBhY2stZGV2LXNlcnZlci00LjE1LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVoYkFzdDNoM0MzTDh3Nlc0UDk2TDV2YVYwUHhTbUpoeFp2V0tZSWRneE9RbThwTlo1ZEVPbW1TTEJWcFA4NVJlZXlSdDZBUzFRSk55by9vRkZQZVZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2JvbmpvdXIiOiAiXjMuNS45IiwKLSAgICAgICAgIkB0eXBlcy9jb25uZWN0LWhpc3RvcnktYXBpLWZhbGxiYWNrIjogIl4xLjMuNSIsCi0gICAgICAgICJAdHlwZXMvZXhwcmVzcyI6ICJeNC4xNy4xMyIsCi0gICAgICAgICJAdHlwZXMvc2VydmUtaW5kZXgiOiAiXjEuOS4xIiwKLSAgICAgICAgIkB0eXBlcy9zZXJ2ZS1zdGF0aWMiOiAiXjEuMTMuMTAiLAotICAgICAgICAiQHR5cGVzL3NvY2tqcyI6ICJeMC4zLjMzIiwKLSAgICAgICAgIkB0eXBlcy93cyI6ICJeOC41LjUiLAotICAgICAgICAiYW5zaS1odG1sLWNvbW11bml0eSI6ICJeMC4wLjgiLAotICAgICAgICAiYm9uam91ci1zZXJ2aWNlIjogIl4xLjAuMTEiLAotICAgICAgICAiY2hva2lkYXIiOiAiXjMuNS4zIiwKLSAgICAgICAgImNvbG9yZXR0ZSI6ICJeMi4wLjEwIiwKLSAgICAgICAgImNvbXByZXNzaW9uIjogIl4xLjcuNCIsCi0gICAgICAgICJjb25uZWN0LWhpc3RvcnktYXBpLWZhbGxiYWNrIjogIl4yLjAuMCIsCi0gICAgICAgICJkZWZhdWx0LWdhdGV3YXkiOiAiXjYuMC4zIiwKLSAgICAgICAgImV4cHJlc3MiOiAiXjQuMTcuMyIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjYiLAotICAgICAgICAiaHRtbC1lbnRpdGllcyI6ICJeMi4zLjIiLAotICAgICAgICAiaHR0cC1wcm94eS1taWRkbGV3YXJlIjogIl4yLjAuMyIsCi0gICAgICAgICJpcGFkZHIuanMiOiAiXjIuMC4xIiwKLSAgICAgICAgImxhdW5jaC1lZGl0b3IiOiAiXjIuNi4wIiwKLSAgICAgICAgIm9wZW4iOiAiXjguMC45IiwKLSAgICAgICAgInAtcmV0cnkiOiAiXjQuNS4wIiwKLSAgICAgICAgInJpbXJhZiI6ICJeMy4wLjIiLAotICAgICAgICAic2NoZW1hLXV0aWxzIjogIl40LjAuMCIsCi0gICAgICAgICJzZWxmc2lnbmVkIjogIl4yLjEuMSIsCi0gICAgICAgICJzZXJ2ZS1pbmRleCI6ICJeMS45LjEiLAotICAgICAgICAic29ja2pzIjogIl4wLjMuMjQiLAotICAgICAgICAic3BkeSI6ICJeNC4wLjIiLAotICAgICAgICAid2VicGFjay1kZXYtbWlkZGxld2FyZSI6ICJeNS4zLjEiLAotICAgICAgICAid3MiOiAiXjguMTMuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjguMTIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjEyLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zUnUxa3BjTzl5THRZeEJLdnFmVGVoOUt6WkV3TzNTVHlYMUhUKzRDYUR6QzZIcFRHWWhJaFBJemo5WHVLVTdLWUR3bmFlaDVoY093ankxUXVKekJQQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMSIsCi0gICAgICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJyZXF1aXJlLWZyb20tc3RyaW5nIjogIl4yLjAuMiIsCi0gICAgICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJhanYta2V5d29yZHMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYta2V5d29yZHMvLS9hanYta2V5d29yZHMtNS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZQ1MvSk5GQVV5cjV2QXVoazFEV20xQ0J4UkhXOUxiSjJveldlZW1ySXFwYnNxS2pIVnhZUHlpNUdDMHJqWklUNUp4SjN2aXJWVFM4d2s0aS9aK2tydz09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgICAgICB9LAotICAgICAgICAic2NoZW1hLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2NoZW1hLXV0aWxzLy0vc2NoZW1hLXV0aWxzLTQuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDBqUnNyUHBqZGNrUDNvUHVnMy9WeE5LdDJ0clI4VGNhYnJNNkZPQUFsdkMvOVBoY21tK2N1QWdUbHhCcWRCUjFXSng3TmFqOVdIdythT21oZVNWYnc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjkiLAotICAgICAgICAgICAgImFqdiI6ICJeOC45LjAiLAotICAgICAgICAgICAgImFqdi1mb3JtYXRzIjogIl4yLjEuMSIsCi0gICAgICAgICAgICAiYWp2LWtleXdvcmRzIjogIl41LjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ3cyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjEzLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cy8tL3dzLTguMTMuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXg5dmNaWVRyRlBDN2FTSWJqN3NSQ1lvN0wvWGI4SXkrcFcwbmcwd3QydkNKdjdNOUhPTXkwVW9OM3JyK0lGQzdoYjd2WG9xUytQOWt0eUxMTGhPK0xBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ3ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLW1hbmlmZXN0LXBsdWdpbi8tL3dlYnBhY2stbWFuaWZlc3QtcGx1Z2luLTQuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZWFVBd3h0ZktJSklLa2hnMDNNS3VpRkFENzJQbHJxQ2l3ZHdPNFZFWGRSTzVWME9SQ053YU93QVphd1BaYWxDYm1IOWtCRG1Ybk5lUU93K0JJRWlvdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInRhcGFibGUiOiAiXjIuMC4wIiwKLSAgICAgICAgIndlYnBhY2stc291cmNlcyI6ICJeMi4yLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJ3ZWJwYWNrLXNvdXJjZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4zLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLXNvdXJjZXMvLS93ZWJwYWNrLXNvdXJjZXMtMi4zLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15OUVJOUFPNDJKakVjclRKRk9ZbVZ5d1ZaZEtWVWZPdkRVUHNKZWE1R0lyMUpPRUdGVnF3bFkySzA5OGZGb0lqT2tEekhuMkFqUnZNOGRzQlp1K2dDQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAic291cmNlLWxpc3QtbWFwIjogIl4yLjAuMSIsCi0gICAgICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAid2VicGFjay1zb3VyY2VzIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnBhY2stc291cmNlcy8tL3dlYnBhY2stc291cmNlcy0zLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL0R5TUVPckRnTEtLSUcwZm12dHorNGRVWC8zR2hvendnbTZpUHA4S1Jodm4rZVFmOStRN0dXeFZOTWszK3VDUFdmZFhZQzRFeEdCY2tJWGRGRWZIMXc9PSIKLSAgICB9LAotICAgICJ3ZWJzb2NrZXQtZHJpdmVyIjogewotICAgICAgInZlcnNpb24iOiAiMC43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnNvY2tldC1kcml2ZXIvLS93ZWJzb2NrZXQtZHJpdmVyLTAuNy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iMTdLZURJUVZqdmIwc3N1U0RGMmNZWFNnMml6dGxpSjRCOVdkc3VCNko5NTJxQ1BLbW5WcTREeVc1bW90SW1YSERDMWNCVC8xVWV6ckpWc0t3NXpqZz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImh0dHAtcGFyc2VyLWpzIjogIj49MC41LjEiLAotICAgICAgICAic2FmZS1idWZmZXIiOiAiPj01LjEuMCIsCi0gICAgICAgICJ3ZWJzb2NrZXQtZXh0ZW5zaW9ucyI6ICI+PTAuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIndlYnNvY2tldC1leHRlbnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYnNvY2tldC1leHRlbnNpb25zLy0vd2Vic29ja2V0LWV4dGVuc2lvbnMtMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9xZWRQSUdPZnNEbG8zMVVOd1liQ0ZNU2FPOW05Ry8wZmFJSGo1L2RaRkRNRnFQVGN4NlV3cXlPeTNDT0VhRU9nLzlWc0dJcGRxbjYyVzVLaG9LU3BnPT0iCi0gICAgfSwKLSAgICAid2hhdHdnLWVuY29kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1lbmNvZGluZy8tL3doYXR3Zy1lbmNvZGluZy0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjVsaW01NEpPUE45SHR6dks5SEZYdkJtYS9ybmZGZXFzaWMwaFNwanREYlZ4UjNkSktMYytLQjRWNkdnaUdPdmw3Q1kvS05oOHJ4U285REtRcm5VRXc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpY29udi1saXRlIjogIjAuNC4yNCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaWNvbnYtbGl0ZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12M01YblpBY3ZueXdrVFVFWm9tSUFjdGxlN1JYWGVlZE9SMzF3d2w3Vmx5b1hPNFFpOWFydlNlbk5RV25lMVRjUndoQ0wxSHdMSTIxYkVxZHBqOC9yQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAic2FmZXItYnVmZmVyIjogIj49IDIuMS4yIDwgMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ3aGF0d2ctZmV0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLWZldGNoLy0vd2hhdHdnLWZldGNoLTMuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iSmxlbjBGY3VVLzBFTUxyZGJKN3pPblc2SVRaTHJaTUlhck1VVm1kS3RzR3ZabmE4dnhLWWFleElDV1BmWjhxd2Y5ZnpOcStVRUlacm5TYUFwdDZSQT09IgotICAgIH0sCi0gICAgIndoYXR3Zy1taW1ldHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGF0d2ctbWltZXR5cGUvLS93aGF0d2ctbWltZXR5cGUtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU00eU13cjZtQW5Rejc2VGJKbTkxNCtnUHBCL25Dd3ZaYkpVMjhjVUQ2ZFIwMDRTQXhETE9PU1VhQjFKRFJxTHRhT1YvdmkwSUM1bEVBR0ZncmpHdi9nPT0iCi0gICAgfSwKLSAgICAid2hhdHdnLXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGF0d2ctdXJsLy0vd2hhdHdnLXVybC04LjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0FvanFiL205UThhNUlWOTZFM2ZISk03MEF6Q2tndDR1WFlYMk83RW11eU9uTHJWaUNRbHNFQm1GOVVRSXUzL2FlQUlwMlUxN3J0YnBaV05udFFxZGc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJsb2Rhc2giOiAiXjQuNy4wIiwKLSAgICAgICAgInRyNDYiOiAiXjIuMS4wIiwKLSAgICAgICAgIndlYmlkbC1jb252ZXJzaW9ucyI6ICJeNi4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2hpY2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQkxJM1RsMVRXM1B2bDcwbDN5cTNZNjRpK2F3cHdYcXNHQllXa2txTXRuYlhnck1EK3lqN3JoVzBrdUVEeHpKYVlYR2pFVzVvZ2FwS05NRUtOTWppYkE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpc2V4ZSI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2hpY2gtYm94ZWQtcHJpbWl0aXZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLWJveGVkLXByaW1pdGl2ZS8tL3doaWNoLWJveGVkLXByaW1pdGl2ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYndaZHYwQUtMcHBsRlkyS1pSWDZUdnl1TjdvampyN2x3a2c2bWwwcm9JeTlZZXVTcjdKUzM3MnFsTlcxOFVRWXpnWUs5emlHY2VyV3FaT21FbjlWTmc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1iaWdpbnQiOiAiXjEuMC4xIiwKLSAgICAgICAgImlzLWJvb2xlYW4tb2JqZWN0IjogIl4xLjEuMCIsCi0gICAgICAgICJpcy1udW1iZXItb2JqZWN0IjogIl4xLjAuNCIsCi0gICAgICAgICJpcy1zdHJpbmciOiAiXjEuMC41IiwKLSAgICAgICAgImlzLXN5bWJvbCI6ICJeMS4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2hpY2gtY29sbGVjdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGljaC1jb2xsZWN0aW9uLy0vd2hpY2gtY29sbGVjdGlvbi0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVzh4ZVRVd2FsbjhpM0svY1kxbkdYemRuVlpsaWRCY2FneU5GdEJkRDVreG5iNFR2R0tSN0ZmU0lTM21ZcHdXUzFRVUN1dGZLejhJWThSamZ0QjArMUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1tYXAiOiAiXjIuMC4xIiwKLSAgICAgICAgImlzLXNldCI6ICJeMi4wLjEiLAotICAgICAgICAiaXMtd2Vha21hcCI6ICJeMi4wLjEiLAotICAgICAgICAiaXMtd2Vha3NldCI6ICJeMi4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2hpY2gtdHlwZWQtYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gtdHlwZWQtYXJyYXkvLS93aGljaC10eXBlZC1hcnJheS0xLjEuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzljNHhreDZtUGlkd3A3MTgwY2tZV2ZNbXZ4cGpsWnVJdWROdERmNE4vdFRBVUI4VkpiWDI1cVpvQXNydEd1WU5uR3czcGEwQVhnYkdLUkI4L0VjZUE9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhdmFpbGFibGUtdHlwZWQtYXJyYXlzIjogIl4xLjAuNSIsCi0gICAgICAgICJjYWxsLWJpbmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImZvci1lYWNoIjogIl4wLjMuMyIsCi0gICAgICAgICJnb3BkIjogIl4xLjAuMSIsCi0gICAgICAgICJoYXMtdG9zdHJpbmd0YWciOiAiXjEuMC4wIiwKLSAgICAgICAgImlzLXR5cGVkLWFycmF5IjogIl4xLjEuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid29yZC13cmFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmQtd3JhcC8tL3dvcmQtd3JhcC0xLjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQk4yMkI1ZWFNTUk5VU10anJHZDVnNWVDWVBwQ1BEVXkwRkpYYllzYVQ1ell4akZPY2tTNTNTUURFM3BXa1ZvV3BIWFZiM0JyWWNFTjRUd2E1NUI1Y0E9PSIKLSAgICB9LAotICAgICJ3b3JrYm94LWJhY2tncm91bmQtc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LWJhY2tncm91bmQtc3luYy8tL3dvcmtib3gtYmFja2dyb3VuZC1zeW5jLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qa2Y0WmRnT0p4Qzl1MnZ6dHhMdVBUL1VqbEg3bS9uV1JRL01nR0wwdjhCSkhvWmRWR0pkMThLY2srYTBlNTV3R1hkcXlITys0SVFUazA2ODVnNE1Vdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlkYiI6ICJeNy4wLjEiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndvcmtib3gtYnJvYWRjYXN0LXVwZGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LWJyb2FkY2FzdC11cGRhdGUvLS93b3JrYm94LWJyb2FkY2FzdC11cGRhdGUtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5tK3Y2UW1ySUZhQi95b2tKbVEvOTNxSUo3bjcyTklDeEl3UXdlNXhzWmlWMmFJOTNNR0d5RXl6T3pEUFZ6NVRIRXI1ckMzRkpTc08zMzQ2Y0lkNjRRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndvcmtib3gtYnVpbGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1idWlsZC8tL3dvcmtib3gtYnVpbGQtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRqZitnQndPVHVHeVp3TXoyTmsvQjEzRnV5ZW8wUTg0VysrYmViYlZzZnI5aUxrRFNvNmo2UFNUOHRFVDlIWUE1OG1sUlh3bE1HcHlXTzhFVEppWGRRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGFwaWRlY2svYmV0dGVyLWFqdi1lcnJvcnMiOiAiXjAuMy4xIiwKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjEiLAotICAgICAgICAiQGJhYmVsL3ByZXNldC1lbnYiOiAiXjcuMTEuMCIsCi0gICAgICAgICJAYmFiZWwvcnVudGltZSI6ICJeNy4xMS4yIiwKLSAgICAgICAgIkByb2xsdXAvcGx1Z2luLWJhYmVsIjogIl41LjIuMCIsCi0gICAgICAgICJAcm9sbHVwL3BsdWdpbi1ub2RlLXJlc29sdmUiOiAiXjExLjIuMSIsCi0gICAgICAgICJAcm9sbHVwL3BsdWdpbi1yZXBsYWNlIjogIl4yLjQuMSIsCi0gICAgICAgICJAc3VybWEvcm9sbHVwLXBsdWdpbi1vZmYtbWFpbi10aHJlYWQiOiAiXjIuMi4zIiwKLSAgICAgICAgImFqdiI6ICJeOC42LjAiLAotICAgICAgICAiY29tbW9uLXRhZ3MiOiAiXjEuOC4wIiwKLSAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIl4yLjEuMCIsCi0gICAgICAgICJmcy1leHRyYSI6ICJeOS4wLjEiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjYiLAotICAgICAgICAibG9kYXNoIjogIl40LjE3LjIwIiwKLSAgICAgICAgInByZXR0eS1ieXRlcyI6ICJeNS4zLjAiLAotICAgICAgICAicm9sbHVwIjogIl4yLjQzLjEiLAotICAgICAgICAicm9sbHVwLXBsdWdpbi10ZXJzZXIiOiAiXjcuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuOC4wLWJldGEuMCIsCi0gICAgICAgICJzdHJpbmdpZnktb2JqZWN0IjogIl4zLjMuMCIsCi0gICAgICAgICJzdHJpcC1jb21tZW50cyI6ICJeMi4wLjEiLAotICAgICAgICAidGVtcHkiOiAiXjAuNi4wIiwKLSAgICAgICAgInVwYXRoIjogIl4xLjIuMCIsCi0gICAgICAgICJ3b3JrYm94LWJhY2tncm91bmQtc3luYyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LWJyb2FkY2FzdC11cGRhdGUiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1jYWNoZWFibGUtcmVzcG9uc2UiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtZXhwaXJhdGlvbiI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LWdvb2dsZS1hbmFseXRpY3MiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1uYXZpZ2F0aW9uLXByZWxvYWQiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1wcmVjYWNoaW5nIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtcmFuZ2UtcmVxdWVzdHMiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1yZWNpcGVzIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtcm91dGluZyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXN0cmF0ZWdpZXMiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1zdHJlYW1zIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtc3ciOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC13aW5kb3ciOiAiNi42LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBhcGlkZWNrL2JldHRlci1hanYtZXJyb3JzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMy42IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGFwaWRlY2svYmV0dGVyLWFqdi1lcnJvcnMvLS9iZXR0ZXItYWp2LWVycm9ycy0wLjMuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVArWnlnQkxadGtwMHFxT0FKSlZYNG9YL3NGbzVKUjNlQld3d3VxSEhoSzBHSWdRT0tXckFmaUFhV1gwYUFySGtSV0hNdWdnRkVnQVpOeFZQd1BaWWFBPT0iLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJqc29uLXNjaGVtYSI6ICJeMC40LjAiLAotICAgICAgICAgICAgImpzb25wb2ludGVyIjogIl41LjAuMCIsCi0gICAgICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImFqdiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI4LjEyLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYvLS9hanYtOC4xMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1J1MWtwY085eUx0WXhCS3ZxZlRlaDlLelpFd08zU1R5WDFIVCs0Q2FEekM2SHBUR1loSWhQSXpqOVh1S1U3S1lEd25hZWg1aGNPd2p5MVF1SnpCUEE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAgICAgImpzb24tc2NoZW1hLXRyYXZlcnNlIjogIl4xLjAuMCIsCi0gICAgICAgICAgICAicmVxdWlyZS1mcm9tLXN0cmluZyI6ICJeMi4wLjIiLAotICAgICAgICAgICAgInVyaS1qcyI6ICJeNC4yLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiZnMtZXh0cmEiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiOS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy1leHRyYS8tL2ZzLWV4dHJhLTkuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGNnM1ptZXBTMzAvN0JTRnFSdm9vM0RPTVF1N0lqcXhPNW5DRHQrek05WFdqYjMzV2c3emlOVCtRdnFidWMzK2dXcHpPMDJKdWJWeWsyRzRadm8xT1E9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImF0LWxlYXN0LW5vZGUiOiAiXjEuMC4wIiwKLSAgICAgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjAiLAotICAgICAgICAgICAgImpzb25maWxlIjogIl42LjAuMSIsCi0gICAgICAgICAgICAidW5pdmVyc2FsaWZ5IjogIl4yLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc2NoZW1hLXRyYXZlcnNlLy0vanNvbi1zY2hlbWEtdHJhdmVyc2UtMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OTTgvUDluM1hqWGhJWm4xbExoa0ZhQUNUT1VSUVhqV2hWNEJBL1JuT3Y4eHZncXRxcEFYOUlPNG1SUXhTeDFSbG80dHF6ZXFiMHNPbHJ1YU95M2R1Zz09IgotICAgICAgICB9LAotICAgICAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjguMC1iZXRhLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjguMC1iZXRhLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yeW1nNm9SQnBlYmVaaTlVVU5zZ1E4OWJoeDAxVGNUa21OVEduTk84OGltVG1iU2d5NG5mdWpyZ1ZFRktXcE1URUdBMTFFRGtUdDdtcU9iVFBkaWdJQT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAid2hhdHdnLXVybCI6ICJeNy4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAidHI0NiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RyNDYvLS90cjQ2LTEuMC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFRwb3dFamNsUTdLZ3g1U2RCa3FSelZoRVJRWG92OC9sOUZ0OWRWTTlmbWcwVzBLUVNWYVhYOVQ0aTZ0d0NQTnRZaVpNNTNscFNTVUF3SmJGUE9IeEE9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInB1bnljb2RlIjogIl4yLjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJpZGwtY29udmVyc2lvbnMvLS93ZWJpZGwtY29udmVyc2lvbnMtNC4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZUStCbXh1VGdkNlVYWlczK0lDR2Z5cVJ5SFhWbEQ1R3RRcjUrcWppTlc3YkYwY3Fyelg1MDBIVlhQQk92Z1hiNVluekRkK2gwenF5djYxS1VENytTZz09IgotICAgICAgICB9LAotICAgICAgICAid2hhdHdnLXVybCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI3LjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy11cmwvLS93aGF0d2ctdXJsLTcuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1V1N1JnMURyb003b1F2R1dmT2lBSzIxbjc0R2crVDRlbFhFUVlrT2h0eUxlV2lKRm9PR0xYUEtJLzlneklpZTlDdHdWTG04d3R3NllKZEt5eFNqZWc9PSIsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxvZGFzaC5zb3J0YnkiOiAiXjQuNy4wIiwKLSAgICAgICAgICAgICJ0cjQ2IjogIl4xLjAuMSIsCi0gICAgICAgICAgICAid2ViaWRsLWNvbnZlcnNpb25zIjogIl40LjAuMiIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LWNhY2hlYWJsZS1yZXNwb25zZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LWNhY2hlYWJsZS1yZXNwb25zZS8tL3dvcmtib3gtY2FjaGVhYmxlLXJlc3BvbnNlLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KZmhKVVNRRHdzRjFYdjNFVjF2V3pTc0NPWm40bVEzOGJXRUJSM0xkdk94U1BnQjY1Z0FNNmNTMkNYOHJra0tIUmdpTHJON1d4b3l1K1R1SDY3a0hydz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LWNvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1jb3JlLy0vd29ya2JveC1jb3JlLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HRHRGUkY3WWczREQ4NTlQTWJQQVlQZUp5ZzVnSllYdUJRQUMrd3lyV3V1WGdwZm9PcklRSXZGUlpuUTcrY3pUSVFqSXIxRGhMRUdGelphbkFULzNiUT09IgotICAgIH0sCi0gICAgIndvcmtib3gtZXhwaXJhdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LWV4cGlyYXRpb24vLS93b3JrYm94LWV4cGlyYXRpb24tNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJhcGxZWGNESGJlOHZBbzdHWXZ5QW1sUzRmNjk5OEpmZjUxM0w0WHZsekFPeGNsOEY2MjBPOTFndW9KNUVPZjVxZVhHNGNHZE5aSGtrVkFQb3VGQ3B3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaWRiIjogIl43LjAuMSIsCi0gICAgICAgICJ3b3JrYm94LWNvcmUiOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid29ya2JveC1nb29nbGUtYW5hbHl0aWNzIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtZ29vZ2xlLWFuYWx5dGljcy8tL3dvcmtib3gtZ29vZ2xlLWFuYWx5dGljcy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDRESmE2T2xkWFdkNk05elJsMEg2dkI5bGtybXFZRmtSUTJ4RWlOZEJGcDlVMExoc0dPN2hzQnNjVkV5SDlIMi8zZVpadDhjOTdOQjJGRDlVMk5KK1E9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ3b3JrYm94LWJhY2tncm91bmQtc3luYyI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LWNvcmUiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1yb3V0aW5nIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtc3RyYXRlZ2llcyI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LW5hdmlnYXRpb24tcHJlbG9hZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LW5hdmlnYXRpb24tcHJlbG9hZC8tL3dvcmtib3gtbmF2aWdhdGlvbi1wcmVsb2FkLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11dE5FV0crdU9mWGRhWm12aHNocmg3S3poRHUvMWlNSHlRT1Y2QXF1cDhNbTc4RDI4NnVndTVrOU1GRDlTekJUNVRjd2d3U09SVnZJbmFYV2J2S3o5UT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LXByZWNhY2hpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1wcmVjYWNoaW5nLy0vd29ya2JveC1wcmVjYWNoaW5nLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lWXUvN01xdFJaTjFJRHR0bC9VUWNTWkZrSFA3ZG52ci9YM1ZuNkl3Nk9zUE1ydVFIaVZqam9tREZDTnRkOGsyUmRqTHMweGl6OW5xK3QzWVZCY1dQdz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXJvdXRpbmciOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1zdHJhdGVnaWVzIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndvcmtib3gtcmFuZ2UtcmVxdWVzdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1yYW5nZS1yZXF1ZXN0cy8tL3dvcmtib3gtcmFuZ2UtcmVxdWVzdHMtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVYzYUlDejVmTEdxNURwU1lFVThMeGVYdnNULy9tUld6S3JmQk9JeHpJZFFuVi9XajdSK0x5SlZUY3ppNENRNE53S2hBYUJWYVN1akkxY0VqWFcraFR3PT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndvcmtib3gtcmVjaXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LXJlY2lwZXMvLS93b3JrYm94LXJlY2lwZXMtNi42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRGaTNrVGdZdzczdDV0ZzczeVBWcVFDOFFRanhKU2VxalhSTzRvdUUvQ2V5cG1QMk8veHFtQi9aRkJCUWF6TFRQeElMVVEwYjhhZWgwSXV4Vm45YTZBPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid29ya2JveC1jYWNoZWFibGUtcmVzcG9uc2UiOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtZXhwaXJhdGlvbiI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXByZWNhY2hpbmciOiAiNi42LjAiLAotICAgICAgICAid29ya2JveC1yb3V0aW5nIjogIjYuNi4wIiwKLSAgICAgICAgIndvcmtib3gtc3RyYXRlZ2llcyI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LXJvdXRpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1yb3V0aW5nLy0vd29ya2JveC1yb3V0aW5nLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14OGdkTjdWREJpTEMwM2l6QVpSZlUrV0tVWEpuYnF0NlBHOVVoMFh1UFJ6SlBwWkdMS2NlL0ZrT1g5NWRXSFJwT0hXTEVxOFJYempXME8rUE9Ta0t2dz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LXN0cmF0ZWdpZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1zdHJhdGVnaWVzLy0vd29ya2JveC1zdHJhdGVnaWVzLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lQzA3WEd1SU5BS1VXRG5aZUlQZFJkVmphNEpRdFR1YzM1VFo4U3dNYjF6dGpwN0RkcTJDSjR5cUx2V3pGV0dsWUk3Q0cvWUdxYUVUbnRUeEJHZEtnUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3b3JrYm94LXN0cmVhbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC1zdHJlYW1zLy0vd29ya2JveC1zdHJlYW1zLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yZk1KTFZ2d3VFRDA5Q25IMVJuSWVwN0w5K21qNHVma1R5RFBWYVhQS2xoaTkrMGN6Q3UrU0pnZ1dDSUZiUHBKYUFabXAyaXlWR0xxUzNSVW1ZM2Z4Zz09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndvcmtib3gtY29yZSI6ICI2LjYuMCIsCi0gICAgICAgICJ3b3JrYm94LXJvdXRpbmciOiAiNi42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid29ya2JveC1zdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrYm94LXN3Ly0vd29ya2JveC1zdy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjJJa3dEb2tidEhVRTRLdXM4cEtPNStWa1BIRDJvcVRnbCtYSndoNHpiRjFIeWpBYmdObUsvRm5lWkhWVTdwMDNYVXQ5SUNmdUdEWUlTV0c5cVYvQ1E9PSIKLSAgICB9LAotICAgICJ3b3JrYm94LXdlYnBhY2stcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmtib3gtd2VicGFjay1wbHVnaW4vLS93b3JrYm94LXdlYnBhY2stcGx1Z2luLTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14TlpJWkhhbGJvWlU2NldhN3gxWWtqSXFFeTFnVFIrelBNK2tqcllKenFON2l1cllaQmN0QkxJU3lTY2poa0pLWXVSclpVUDBpcVZpWlRoOHJTMCszQT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIl4yLjEuMCIsCi0gICAgICAgICJwcmV0dHktYnl0ZXMiOiAiXjUuNC4xIiwKLSAgICAgICAgInVwYXRoIjogIl4xLjIuMCIsCi0gICAgICAgICJ3ZWJwYWNrLXNvdXJjZXMiOiAiXjEuNC4zIiwKLSAgICAgICAgIndvcmtib3gtYnVpbGQiOiAiNi42LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iCi0gICAgICAgIH0sCi0gICAgICAgICJ3ZWJwYWNrLXNvdXJjZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS40LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJwYWNrLXNvdXJjZXMvLS93ZWJwYWNrLXNvdXJjZXMtMS40LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sZ1RTM1hodjFsQ09LbzdTQTVUaktYTWpwU000c0JqTlY1K3EyYnFlc2JTUHM1RmpHbVU2amp0QlNrWDliNHFXODd2RElzQ0lsVVBPRWhiWnJNZGplUT09IiwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAic291cmNlLWxpc3QtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICAgICAic291cmNlLW1hcCI6ICJ+MC42LjEiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAid29ya2JveC13aW5kb3ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2JveC13aW5kb3cvLS93b3JrYm94LXdpbmRvdy02LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDROOSt2a2ExN2QxNmdlYUpYWFJqRU5MRmxkdmtXeTdKeUd4RWxSRDBKdkJ4dkZFZDhMT2hyK3VYQ2Nhci9OekFtSUJSdjlFWitNK1FyNG1Pb0JJVHc9PSIsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvdHJ1c3RlZC10eXBlcyI6ICJeMi4wLjIiLAotICAgICAgICAid29ya2JveC1jb3JlIjogIjYuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndyYXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cmFwLWFuc2kvLS93cmFwLWFuc2ktNy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlWR0lqMmthbUxTVHh3Nk5zWmpvQnhmU3dzbjB5Y2Rlc21jNHArUTIxYzV6UHVaMXBsK05meFZkeFB0ZEh2bU5WT1E2WFNZRzRBVXR5dC9GaTdEMTZRPT0iLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMC4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4xLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid3JhcHB5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXBweS8tL3dyYXBweS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDRTcC9EUnNlb3I5d0w2RXZWMitUdVFuNjNkTWtQalovc3A5WGtnaFRFYlY5S2xQUzF4VXNaM3U3L0lRTzR3eHRjRkI0YmdwUVBSY1IzUUN2ZXpQY1E9PSIKLSAgICB9LAotICAgICJ3cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTMuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BdkhjeVo1Sm5TZnEzaW9TeWpyQmtIOXlXNG03QXlrOC85TXkvREQ5b25LZXUvOTRmd3JNb2NlbU8yUUFKRkFsbm5ETitaRFMrWmpBUjV1YTEvUFYvUT09IiwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICJpcy10eXBlZGFycmF5IjogIl4xLjAuMCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjIiLAotICAgICAgICAidHlwZWRhcnJheS10by1idWZmZXIiOiAiXjMuMS41IgotICAgICAgfQotICAgIH0sCi0gICAgIndzIjogewotICAgICAgInZlcnNpb24iOiAiNy41LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtNy41LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYrUDlKaWw3VWlTS1NrcHBJaUQ5NGROMDdBd3ZGaXh2TElqMU9nMVJsOUdHTXVOaXBKblY5SnpqRDZYdXFtQWVpc3dHdlVtTkxqcjVjRnVYd05TNzdRPT0iLAotICAgICAgInJlcXVpcmVzIjoge30KLSAgICB9LAotICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sLW5hbWUtdmFsaWRhdG9yLy0veG1sLW5hbWUtdmFsaWRhdG9yLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BNUNVcHR4RHN2eEtKRVUzeU82RHVXQlNKei9xaXpxekpLT01JZlVKSEVUYkJ3L3NGYUR4Z2Q2ZnhtMWV3VWFNMGpaNDQ0RmM1dkM1Uk9ZdXJnLzRQdz09IgotICAgIH0sCi0gICAgInhtbGNoYXJzIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbGNoYXJzLy0veG1sY2hhcnMtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpabkRLSzhCMFJDRHc4NEZOZERBSXBaSytKdUp3K3M3THo4bmtzSTdTSXVVM1VYSkpzbFV0aHNpK3VXQlVZT3dQRndXN1c3UFJMUmZVS3B4anRqRkN3PT0iCi0gICAgfSwKLSAgICAieTE4biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95MThuLy0veTE4bi01LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHBmRnplZ2VEV0pISklBbVRMUlAyRHdIamRGNXM3am85dHV6dGRReEFoSU5DZHZTKzNuR0lOcVBkMDBBcGhxSlIvMExoQU5VUzYvKzdTQ2I5OFlPZkE9PSIKLSAgICB9LAotICAgICJ5YWxsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hNFVHUWFXUEg1OW1PWFVZbkFHMmV3bmNRUzRpNEY0M1R2M0pvQU0rczJWREFtUzlOc0s4R3BETUxyQ0hQa3NGVDdoM0s2VE9vVU5uMnBiN1JvWHg0Zz09IgotICAgIH0sCi0gICAgInlhbWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEwLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbWwvLS95YW1sLTEuMTAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcjN2WHlFclJDWUo3d2cyOHl2Qlk1VlNvQUY4WnZsY1c5L0J3VXpFdFVzanZYL0RLczI0ZElrdXdqdHVwcndKSkhzYnlVYkxBcGVwWVRSMUJONHVIcmc9PSIKLSAgICB9LAotICAgICJ5YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjcuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MvLS95YXJncy0xNy43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdkU3p6UlErK0NLbk5JL2tyS25ZUlY3SktLUFVYTUVoNjFzb2FIS2c5bXJXRWh6RldoRm54UHhHbCs2OWNEMU91NjNDMTNOVVBDbm1JY3J2cUN1TTZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2xpdWkiOiAiXjguMC4xIiwKLSAgICAgICAgImVzY2FsYWRlIjogIl4zLjEuMSIsCi0gICAgICAgICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwKLSAgICAgICAgInJlcXVpcmUtZGlyZWN0b3J5IjogIl4yLjEuMSIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4zIiwKLSAgICAgICAgInkxOG4iOiAiXjUuMC41IiwKLSAgICAgICAgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIgorICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9lZW1lbGkiCiAgICAgICB9Ci0gICAgfSwKLSAgICAieWFyZ3MtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy1wYXJzZXIvLS95YXJncy1wYXJzZXItMjEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10VnBzSlc3RGRqZWNBaUZwYklCMWUzcXhJUXNFNk5vUGM1L2VUZHJiYklDNGgwTFZzV2hub2EzZyttMkhjbEJJdWpIenN4WjRWSlZBK0dVdWMyL0xCdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJwZWVyIjogdHJ1ZQotICAgIH0sCi0gICAgInlvY3RvLXF1ZXVlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lvY3RvLXF1ZXVlLy0veW9jdG8tcXVldWUtMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJWa3N2c25OQ2RKL29oR2M2eGdQd3lOOGVoZUN4c2lMTThteHVFL3QvbU9WcUpld1B1TzFtaUxwVEhRaVJnVEtDTGV4TDRNZUFGVmFndHM3SG1OWjJRPT0iCiAgICAgfQogICB9CiB9CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1saW50L3BhY2thZ2UuanNvbiBiL2RvY3MvZ3JlbWxpbnQvcGFja2FnZS5qc29uCmluZGV4IDIyMGUxZTQuLmMyZjAyM2UgMTAwNjQ0Ci0tLSBhL2RvY3MvZ3JlbWxpbnQvcGFja2FnZS5qc29uCisrKyBiL2RvY3MvZ3JlbWxpbnQvcGFja2FnZS5qc29uCkBAIC00LDMzICs0LDIzIEBACiAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKICAgInByaXZhdGUiOiB0cnVlLAogICAiZGVwZW5kZW5jaWVzIjogewotICAgICJjdXN0b21pemUtY3JhIjogIl4xLjAuMCIsCi0gICAgImdyZW1saW50IjogIl4zLjcuMCIsCi0gICAgInJlYWN0IjogIl4xNy4wLjIiLAotICAgICJyZWFjdC1hcHAtcmV3aXJlZCI6ICJeMi4yLjEiLAotICAgICJyZWFjdC1kb20iOiAiXjE3LjAuMiIsCi0gICAgInJlYWN0LXNjcmlwdHMiOiAiXjUuMC4xIiwKKyAgICAiZ3JlbWxpbnQiOiAiXjMuOC4xIiwKKyAgICAicmVhY3QiOiAiXjE4LjMuMSIsCisgICAgInJlYWN0LWRvbSI6ICJeMTguMy4xIiwKICAgICAic2hhcnAtcm91dGVyIjogIl40LjEuNSIsCi0gICAgInN0eWxlZC1jb21wb25lbnRzIjogIl42LjEuMCIsCi0gICAgInR5cGVzY3JpcHQiOiAiXjQuNy4zIiwKLSAgICAid2ViLXZpdGFscyI6ICJeMy41LjAiCisgICAgInN0eWxlZC1jb21wb25lbnRzIjogIl42LjEuMTQiLAorICAgICJ3ZWItdml0YWxzIjogIl41LjAuMCIKICAgfSwKICAgInNjcmlwdHMiOiB7CiAgICAgInByZWRlcGxveSI6ICJucG0gcnVuIGJ1aWxkIiwKLSAgICAiZGVwbG95IjogImdoLXBhZ2VzIC1kIGJ1aWxkIiwKLSAgICAic3RhcnQiOiAicmVhY3QtYXBwLXJld2lyZWQgc3RhcnQiLAotICAgICJidWlsZCI6ICJyZWFjdC1hcHAtcmV3aXJlZCBidWlsZCIsCi0gICAgInRlc3QiOiAicmVhY3Qtc2NyaXB0cyB0ZXN0IiwKLSAgICAiZWplY3QiOiAicmVhY3Qtc2NyaXB0cyBlamVjdCIKKyAgICAiZGVwbG95IjogImdoLXBhZ2VzIC1kIGRpc3QiLAorICAgICJzdGFydCI6ICJ2aXRlIiwKKyAgICAiYnVpbGQiOiAidHNjICYmIHZpdGUgYnVpbGQiLAorICAgICJwcmV2aWV3IjogInZpdGUgcHJldmlldyIsCisgICAgInRlc3QiOiAidml0ZXN0IgogICB9LAogICAiYXV0aG9yIjogIsOYeXZpbmQgU8OmYsO4IiwKICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICJlc2xpbnRDb25maWciOiB7Ci0gICAgImV4dGVuZHMiOiBbCi0gICAgICAicmVhY3QtYXBwIiwKLSAgICAgICJyZWFjdC1hcHAvamVzdCIKLSAgICBdCi0gIH0sCiAgICJicm93c2Vyc2xpc3QiOiB7CiAgICAgInByb2R1Y3Rpb24iOiBbCiAgICAgICAiPjAuMiUiLApAQCAtNDQsMjAgKzM0LDI1IEBACiAgICAgXQogICB9LAogICAiZGV2RGVwZW5kZW5jaWVzIjogewotICAgICJAdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tIjogIl42LjEuMCIsCi0gICAgIkB0ZXN0aW5nLWxpYnJhcnkvcmVhY3QiOiAiXjEyLjEuNSIsCi0gICAgIkB0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCI6ICJeMTQuNS4xIiwKLSAgICAiQHR5cGVzL2plc3QiOiAiXjI5LjUuNCIsCi0gICAgIkB0eXBlcy9ub2RlIjogIl4yMC44LjciLAotICAgICJAdHlwZXMvcmVhY3QiOiAiXjE3LjAuMzgiLAotICAgICJAdHlwZXMvcmVhY3QtZG9tIjogIl4xNy4wLjExIiwKLSAgICAiQHR5cGVzL3N0eWxlZC1jb21wb25lbnRzIjogIl41LjEuMjYiLAotICAgICJnaC1wYWdlcyI6ICJeNi4wLjAiLAotICAgICJwcmV0dGllciI6ICJeMy4wLjEiLAotICAgICJ0c2xpbnQiOiAiXjYuMS4zIiwKLSAgICAidHNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMS4xOC4wIgorICAgICJAdGVzdGluZy1saWJyYXJ5L2plc3QtZG9tIjogIl42LjYuMyIsCisgICAgIkB0ZXN0aW5nLWxpYnJhcnkvcmVhY3QiOiAiXjE2LjMuMiIsCisgICAgIkB0ZXN0aW5nLWxpYnJhcnkvdXNlci1ldmVudCI6ICJeMTQuNi4xIiwKKyAgICAiQHR5cGVzL25vZGUiOiAiXjI1LjYuMCIsCisgICAgIkB0eXBlcy9yZWFjdCI6ICJeMTguMy4xOCIsCisgICAgIkB0eXBlcy9yZWFjdC1kb20iOiAiXjE4LjMuNSIsCisgICAgIkB2aXRlanMvcGx1Z2luLXJlYWN0IjogIl40LjMuNCIsCisgICAgImdoLXBhZ2VzIjogIl42LjMuMCIsCisgICAgImpzZG9tIjogIl4yNi4wLjAiLAorICAgICJwcmV0dGllciI6ICJeMy40LjIiLAorICAgICJ0eXBlc2NyaXB0IjogIl41LjcuMyIsCisgICAgInZpdGUiOiAiXjYuMS4wIiwKKyAgICAidml0ZXN0IjogIl40LjEuNCIKKyAgfSwKKyAgIm92ZXJyaWRlcyI6IHsKKyAgICAicmVhY3QiOiAiJHJlYWN0IiwKKyAgICAicmVhY3QtZG9tIjogIiRyZWFjdC1kb20iCiAgIH0sCiAgICJlbmdpbmVzIjogewotICAgICJub2RlIjogIjE4IgorICAgICJub2RlIjogIj49MjIiCiAgIH0KIH0KZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxpbnQvcHVibGljL2luZGV4Lmh0bWwgYi9kb2NzL2dyZW1saW50L3B1YmxpYy9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjk5NzkzLi4wMDAwMDAwCi0tLSBhL2RvY3MvZ3JlbWxpbnQvcHVibGljL2luZGV4Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPCFET0NUWVBFIGh0bWw+Ci08aHRtbCBsYW5nPSJlbiI+Ci0gIDxoZWFkPgotICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgotICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iJVBVQkxJQ19VUkwlL2Zhdmljb24uaWNvIiAvPgotICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSIgLz4KLSAgICA8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iIzAwMDAwMCIgLz4KLSAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iV2ViIHNpdGUgY3JlYXRlZCB1c2luZyBjcmVhdGUtcmVhY3QtYXBwIiAvPgotICAgIDxtZXRhIG5hbWU9Imdvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbiIgY29udGVudD0iOHJra2lRa1phQndWVUFVQnhTWTZOal9FQkhxQ0dQRVluRUptbHlYdUxudyIgLz4KLSAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9IiVQVUJMSUNfVVJMJS9sb2dvMTkyLnBuZyIgLz4KLSAgICA8IS0tCi0gICAgICBtYW5pZmVzdC5qc29uIHByb3ZpZGVzIG1ldGFkYXRhIHVzZWQgd2hlbiB5b3VyIHdlYiBhcHAgaXMgaW5zdGFsbGVkIG9uIGEKLSAgICAgIHVzZXIncyBtb2JpbGUgZGV2aWNlIG9yIGRlc2t0b3AuIFNlZSBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS93ZWIvZnVuZGFtZW50YWxzL3dlYi1hcHAtbWFuaWZlc3QvCi0gICAgLS0+Ci0gICAgPGxpbmsgcmVsPSJtYW5pZmVzdCIgaHJlZj0iJVBVQkxJQ19VUkwlL21hbmlmZXN0Lmpzb24iIC8+Ci0gICAgPCEtLQotICAgICAgTm90aWNlIHRoZSB1c2Ugb2YgJVBVQkxJQ19VUkwlIGluIHRoZSB0YWdzIGFib3ZlLgotICAgICAgSXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBVUkwgb2YgdGhlIGBwdWJsaWNgIGZvbGRlciBkdXJpbmcgdGhlIGJ1aWxkLgotICAgICAgT25seSBmaWxlcyBpbnNpZGUgdGhlIGBwdWJsaWNgIGZvbGRlciBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIHRoZSBIVE1MLgotCi0gICAgICBVbmxpa2UgIi9mYXZpY29uLmljbyIgb3IgImZhdmljb24uaWNvIiwgIiVQVUJMSUNfVVJMJS9mYXZpY29uLmljbyIgd2lsbAotICAgICAgd29yayBjb3JyZWN0bHkgYm90aCB3aXRoIGNsaWVudC1zaWRlIHJvdXRpbmcgYW5kIGEgbm9uLXJvb3QgcHVibGljIFVSTC4KLSAgICAgIExlYXJuIGhvdyB0byBjb25maWd1cmUgYSBub24tcm9vdCBwdWJsaWMgVVJMIGJ5IHJ1bm5pbmcgYG5wbSBydW4gYnVpbGRgLgotICAgIC0tPgotICAgIDx0aXRsZT5SZWFjdCBBcHA8L3RpdGxlPgotICA8L2hlYWQ+Ci0gIDxib2R5PgotICAgIDxub3NjcmlwdD5Zb3UgbmVlZCB0byBlbmFibGUgSmF2YVNjcmlwdCB0byBydW4gdGhpcyBhcHAuPC9ub3NjcmlwdD4KLSAgICA8ZGl2IGlkPSJyb290Ij48L2Rpdj4KLSAgICA8IS0tCi0gICAgICBUaGlzIEhUTUwgZmlsZSBpcyBhIHRlbXBsYXRlLgotICAgICAgSWYgeW91IG9wZW4gaXQgZGlyZWN0bHkgaW4gdGhlIGJyb3dzZXIsIHlvdSB3aWxsIHNlZSBhbiBlbXB0eSBwYWdlLgotCi0gICAgICBZb3UgY2FuIGFkZCB3ZWJmb250cywgbWV0YSB0YWdzLCBvciBhbmFseXRpY3MgdG8gdGhpcyBmaWxlLgotICAgICAgVGhlIGJ1aWxkIHN0ZXAgd2lsbCBwbGFjZSB0aGUgYnVuZGxlZCBzY3JpcHRzIGludG8gdGhlIDxib2R5PiB0YWcuCi0KLSAgICAgIFRvIGJlZ2luIHRoZSBkZXZlbG9wbWVudCwgcnVuIGBucG0gc3RhcnRgIG9yIGB5YXJuIHN0YXJ0YC4KLSAgICAgIFRvIGNyZWF0ZSBhIHByb2R1Y3Rpb24gYnVuZGxlLCB1c2UgYG5wbSBydW4gYnVpbGRgIG9yIGB5YXJuIGJ1aWxkYC4KLSAgICAtLT4KLSAgPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvZG9jcy9ncmVtbGludC9zcmMvQXBwLnRlc3QudHN4IGIvZG9jcy9ncmVtbGludC9zcmMvQXBwLnRlc3QudHN4CmluZGV4IGI2ODc5MjEuLjIyMTI5NzkgMTAwNjQ0Ci0tLSBhL2RvY3MvZ3JlbWxpbnQvc3JjL0FwcC50ZXN0LnRzeAorKysgYi9kb2NzL2dyZW1saW50L3NyYy9BcHAudGVzdC50c3gKQEAgLTIxLDggKzIxLDcgQEAKIGltcG9ydCB7IHJlbmRlciwgc2NyZWVuIH0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7CiBpbXBvcnQgQXBwIGZyb20gJy4vQXBwJzsKIAotdGVzdCgncmVuZGVycyBsZWFybiByZWFjdCBsaW5rJywgKCkgPT4gewotICByZW5kZXIoPEFwcCAvPik7Ci0gIGNvbnN0IGxpbmtFbGVtZW50ID0gc2NyZWVuLmdldEJ5VGV4dCgvbGVhcm4gcmVhY3QvaSk7Ci0gIGV4cGVjdChsaW5rRWxlbWVudCkudG9CZUluVGhlRG9jdW1lbnQoKTsKK3Rlc3QoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHsKKyAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8QXBwIC8+KTsKKyAgZXhwZWN0KGNvbnRhaW5lcikudG9CZVRydXRoeSgpOwogfSk7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1saW50L3NyYy9jb21wb25lbnRzL0Zvb3Rlci50c3ggYi9kb2NzL2dyZW1saW50L3NyYy9jb21wb25lbnRzL0Zvb3Rlci50c3gKaW5kZXggNGNlZGZkMy4uNjhiNmNlNCAxMDA2NDQKLS0tIGEvZG9jcy9ncmVtbGludC9zcmMvY29tcG9uZW50cy9Gb290ZXIudHN4CisrKyBiL2RvY3MvZ3JlbWxpbnQvc3JjL2NvbXBvbmVudHMvRm9vdGVyLnRzeApAQCAtMzcsNiArMzcsMTEgQEAKICAgICA8Rm9vdGVyQ29udGVudD4KICAgICAgIDxwPkdyZW1saW50IHZlcnNpb246IHtncmVtbGludFZlcnNpb259PC9wPgogICAgICAgPHA+Q29weXJpZ2h0IMKpIDIwMTUtMjAyNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9wPgorICAgICAgPHA+CisgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIiPgorICAgICAgICAgIEFwYWNoZSBUaW5rZXJQb3DihKIKKyAgICAgICAgPC9hPgorICAgICAgPC9wPgogICAgIDwvRm9vdGVyQ29udGVudD4KICAgPC9DZW50ZXJlZENvbnRhaW5lcj4KICk7CmRpZmYgLS1naXQgYS9kb2NzL2dyZW1saW50L3NyYy9pbmRleC50c3ggYi9kb2NzL2dyZW1saW50L3NyYy9pbmRleC50c3gKaW5kZXggNjZhOTdkYy4uYzNhYmJjMiAxMDA2NDQKLS0tIGEvZG9jcy9ncmVtbGludC9zcmMvaW5kZXgudHN4CisrKyBiL2RvY3MvZ3JlbWxpbnQvc3JjL2luZGV4LnRzeApAQCAtMTgsMTYgKzE4LDE3IEBACiAgKi8KIAogaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsKLWltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nOworaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnOwogaW1wb3J0ICcuL2luZGV4LmNzcyc7CiBpbXBvcnQgQXBwIGZyb20gJy4vQXBwJzsKIGltcG9ydCByZXBvcnRXZWJWaXRhbHMgZnJvbSAnLi9yZXBvcnRXZWJWaXRhbHMnOwogCi1SZWFjdERPTS5yZW5kZXIoCitjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpITsKK2NvbnN0IHJvb3QgPSBjcmVhdGVSb290KGNvbnRhaW5lcik7Cityb290LnJlbmRlcigKICAgPFJlYWN0LlN0cmljdE1vZGU+CiAgICAgPEFwcCAvPgogICA8L1JlYWN0LlN0cmljdE1vZGU+LAotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpLAogKTsKIAogLy8gSWYgeW91IHdhbnQgdG8gc3RhcnQgbWVhc3VyaW5nIHBlcmZvcm1hbmNlIGluIHlvdXIgYXBwLCBwYXNzIGEgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxpbnQvc3JjL3JlYWN0LWFwcC1lbnYuZC50cyBiL2RvY3MvZ3JlbWxpbnQvc3JjL3JlYWN0LWFwcC1lbnYuZC50cwppbmRleCA4ZDEwY2QzLi4xYTNiZGMyIDEwMDY0NAotLS0gYS9kb2NzL2dyZW1saW50L3NyYy9yZWFjdC1hcHAtZW52LmQudHMKKysrIGIvZG9jcy9ncmVtbGludC9zcmMvcmVhY3QtYXBwLWVudi5kLnRzCkBAIC0xNyw0ICsxNyw0IEBACiAgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0vLy8gPHJlZmVyZW5jZSB0eXBlcz0icmVhY3Qtc2NyaXB0cyIgLz4KKy8vLyA8cmVmZXJlbmNlIHR5cGVzPSJ2aXRlL2NsaWVudCIgLz4KZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxpbnQvc3JjL3JlcG9ydFdlYlZpdGFscy50cyBiL2RvY3MvZ3JlbWxpbnQvc3JjL3JlcG9ydFdlYlZpdGFscy50cwppbmRleCBkZDk5NWQwLi42MTFlMmJmIDEwMDY0NAotLS0gYS9kb2NzL2dyZW1saW50L3NyYy9yZXBvcnRXZWJWaXRhbHMudHMKKysrIGIvZG9jcy9ncmVtbGludC9zcmMvcmVwb3J0V2ViVml0YWxzLnRzCkBAIC0xNywxNiArMTcsMTYgQEAKICAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLWltcG9ydCB7IFJlcG9ydEhhbmRsZXIgfSBmcm9tICd3ZWItdml0YWxzJzsKK2ltcG9ydCB7IE1ldHJpY1R5cGUgfSBmcm9tICd3ZWItdml0YWxzJzsKIAotY29uc3QgcmVwb3J0V2ViVml0YWxzID0gKG9uUGVyZkVudHJ5PzogUmVwb3J0SGFuZGxlcikgPT4geworY29uc3QgcmVwb3J0V2ViVml0YWxzID0gKG9uUGVyZkVudHJ5PzogKG1ldHJpYzogTWV0cmljVHlwZSkgPT4gdm9pZCkgPT4gewogICBpZiAob25QZXJmRW50cnkgJiYgb25QZXJmRW50cnkgaW5zdGFuY2VvZiBGdW5jdGlvbikgewotICAgIGltcG9ydCgnd2ViLXZpdGFscycpLnRoZW4oKHsgZ2V0Q0xTLCBnZXRGSUQsIGdldEZDUCwgZ2V0TENQLCBnZXRUVEZCIH0pID0+IHsKLSAgICAgIGdldENMUyhvblBlcmZFbnRyeSk7Ci0gICAgICBnZXRGSUQob25QZXJmRW50cnkpOwotICAgICAgZ2V0RkNQKG9uUGVyZkVudHJ5KTsKLSAgICAgIGdldExDUChvblBlcmZFbnRyeSk7Ci0gICAgICBnZXRUVEZCKG9uUGVyZkVudHJ5KTsKKyAgICBpbXBvcnQoJ3dlYi12aXRhbHMnKS50aGVuKCh7IG9uQ0xTLCBvbkZDUCwgb25JTlAsIG9uTENQLCBvblRURkIgfSkgPT4geworICAgICAgb25DTFMob25QZXJmRW50cnkpOworICAgICAgb25GQ1Aob25QZXJmRW50cnkpOworICAgICAgb25JTlAob25QZXJmRW50cnkpOworICAgICAgb25MQ1Aob25QZXJmRW50cnkpOworICAgICAgb25UVEZCKG9uUGVyZkVudHJ5KTsKICAgICB9KTsKICAgfQogfTsKZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxpbnQvdHNjb25maWcuanNvbiBiL2RvY3MvZ3JlbWxpbnQvdHNjb25maWcuanNvbgppbmRleCBhMjczYjBjLi41MTRhOWNhIDEwMDY0NAotLS0gYS9kb2NzL2dyZW1saW50L3RzY29uZmlnLmpzb24KKysrIGIvZG9jcy9ncmVtbGludC90c2NvbmZpZy5qc29uCkBAIC0xLDEwICsxLDEwIEBACiB7CiAgICJjb21waWxlck9wdGlvbnMiOiB7Ci0gICAgInRhcmdldCI6ICJlczUiLAorICAgICJ0YXJnZXQiOiAiRVMyMDIwIiwKICAgICAibGliIjogWworICAgICAgIkVTMjAyMCIsCiAgICAgICAiZG9tIiwKLSAgICAgICJkb20uaXRlcmFibGUiLAotICAgICAgImVzbmV4dCIKKyAgICAgICJkb20uaXRlcmFibGUiCiAgICAgXSwKICAgICAiYWxsb3dKcyI6IHRydWUsCiAgICAgInNraXBMaWJDaGVjayI6IHRydWUsCkBAIC0xMywxNCArMTMsMTkgQEAKICAgICAic3RyaWN0IjogdHJ1ZSwKICAgICAiZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXMiOiB0cnVlLAogICAgICJub0ZhbGx0aHJvdWdoQ2FzZXNJblN3aXRjaCI6IHRydWUsCi0gICAgIm1vZHVsZSI6ICJlc25leHQiLAotICAgICJtb2R1bGVSZXNvbHV0aW9uIjogIm5vZGUiLAorICAgICJtb2R1bGUiOiAiRVNOZXh0IiwKKyAgICAibW9kdWxlUmVzb2x1dGlvbiI6ICJidW5kbGVyIiwKICAgICAicmVzb2x2ZUpzb25Nb2R1bGUiOiB0cnVlLAogICAgICJpc29sYXRlZE1vZHVsZXMiOiB0cnVlLAogICAgICJub0VtaXQiOiB0cnVlLAotICAgICJqc3giOiAicmVhY3QtanN4IgorICAgICJqc3giOiAicmVhY3QtanN4IiwKKyAgICAidXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHMiOiB0cnVlCiAgIH0sCiAgICJpbmNsdWRlIjogWwogICAgICJzcmMiCisgIF0sCisgICJleGNsdWRlIjogWworICAgICJzcmMvKiovKi50ZXN0LnRzeCIsCisgICAgInNyYy8qKi8qLnRlc3QudHMiCiAgIF0KIH0KZGlmZiAtLWdpdCBhL2RvY3MvZ3JlbWxpbnQvdml0ZS5jb25maWcudHMgYi9kb2NzL2dyZW1saW50L3ZpdGUuY29uZmlnLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZGRkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2dyZW1saW50L3ZpdGUuY29uZmlnLnRzCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vLyA8cmVmZXJlbmNlIHR5cGVzPSJ2aXRlc3QiIC8+CitpbXBvcnQgcGF0aCBmcm9tICdwYXRoJzsKK2ltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gJ3ZpdGUnOworaW1wb3J0IHJlYWN0IGZyb20gJ0B2aXRlanMvcGx1Z2luLXJlYWN0JzsKKworZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHsKKyAgcGx1Z2luczogW3JlYWN0KCldLAorICBiYXNlOiAnL2dyZW1saW50JywKKyAgcmVzb2x2ZTogeworICAgIGRlZHVwZTogWydyZWFjdCcsICdyZWFjdC1kb20nXSwKKyAgICBhbGlhczogeworICAgICAgcmVhY3Q6IHBhdGgucmVzb2x2ZSgnLi9ub2RlX21vZHVsZXMvcmVhY3QnKSwKKyAgICAgICdyZWFjdC1kb20nOiBwYXRoLnJlc29sdmUoJy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRvbScpLAorICAgIH0sCisgIH0sCisgIHRlc3Q6IHsKKyAgICBlbnZpcm9ubWVudDogJ2pzZG9tJywKKyAgICBzZXR1cEZpbGVzOiBbJy4vc3JjL3NldHVwVGVzdHMudHMnXSwKKyAgICBnbG9iYWxzOiB0cnVlLAorICAgIHNlcnZlcjogeworICAgICAgZGVwczogeworICAgICAgICBpbmxpbmU6IFsnc2hhcnAtcm91dGVyJ10sCisgICAgICB9LAorICAgIH0sCisgIH0sCit9KTsKZGlmZiAtLWdpdCBhL2RvY3MvcHJlcHJvY2Vzc29yL2F3ay9pbml0LWNvZGUtYmxvY2tzLmF3ayBiL2RvY3MvcHJlcHJvY2Vzc29yL2F3ay9pbml0LWNvZGUtYmxvY2tzLmF3awppbmRleCA4MzQ5ZDZlLi5hNDIwYTdmIDEwMDY0NAotLS0gYS9kb2NzL3ByZXByb2Nlc3Nvci9hd2svaW5pdC1jb2RlLWJsb2Nrcy5hd2sKKysrIGIvZG9jcy9wcmVwcm9jZXNzb3IvYXdrL2luaXQtY29kZS1ibG9ja3MuYXdrCkBAIC00NSw4ICs0NSw2IEBACiAgICAgfQogICAgIHByaW50ICJnID0gZ3JhcGgudHJhdmVyc2FsKCkiCiAgICAgcHJpbnQgIm1hcmtvID0gZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykudHJ5TmV4dCgpLm9yRWxzZShudWxsKSIKLSAgICBwcmludCAiZiA9IG5ldyBGaWxlKCcvdG1wL25lbzRqJykiCi0gICAgcHJpbnQgImlmIChmLmV4aXN0cygpKSBmLmRlbGV0ZURpcigpIgogICAgIHByaW50ICJmID0gbmV3IEZpbGUoJy90bXAvdGlua2VyZ3JhcGgua3J5bycpIgogICAgIHByaW50ICJpZiAoZi5leGlzdHMoKSkgZi5kZWxldGVEaXIoKSIKICAgICBwcmludCAiOnNldCBtYXgtaXRlcmF0aW9uIDEwMCIKZGlmZiAtLWdpdCBhL2RvY3MvcHJlcHJvY2Vzc29yL2luc3RhbGwtcGx1Z2lucy5zaCBiL2RvY3MvcHJlcHJvY2Vzc29yL2luc3RhbGwtcGx1Z2lucy5zaAppbmRleCBiYTg4MjEzLi43YTAzZDFkIDEwMDc1NQotLS0gYS9kb2NzL3ByZXByb2Nlc3Nvci9pbnN0YWxsLXBsdWdpbnMuc2gKKysrIGIvZG9jcy9wcmVwcm9jZXNzb3IvaW5zdGFsbC1wbHVnaW5zLnNoCkBAIC0yNSw3ICsyNSw3IEBACiBJTlNUQUxMX1RFTVBMQVRFPSJkb2NzL3ByZXByb2Nlc3Nvci9pbnN0YWxsLXBsdWdpbnMuZ3Jvb3Z5IgogSU5TVEFMTF9GSUxFPSIke1RNUF9ESVJ9L2luc3RhbGwtcGx1Z2lucy5ncm9vdnkiCiAKLXBsdWdpbnM9KCJoYWRvb3AtZ3JlbWxpbiIgInNwYXJrLWdyZW1saW4iICJuZW80ai1ncmVtbGluIiAic3BhcnFsLWdyZW1saW4iKQorcGx1Z2lucz0oImhhZG9vcC1ncmVtbGluIiAic3BhcmstZ3JlbWxpbiIgInNwYXJxbC1ncmVtbGluIikKICMgcGx1Z2lucz0oKQogcGx1Z2luc0NvdW50PSR7I3BsdWdpbnNbQF19CiAKZGlmZiAtLWdpdCBhL2RvY3MvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MtZmlsZS5zaCBiL2RvY3MvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MtZmlsZS5zaAppbmRleCA5YWU0M2MyLi5kMTEyOTBhIDEwMDc1NQotLS0gYS9kb2NzL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLWZpbGUuc2gKKysrIGIvZG9jcy9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy1maWxlLnNoCkBAIC0xMDQsMjUgKzEwNCwxMiBAQAogICBkb2M9YGJhc2VuYW1lICR7aW5wdXR9IC5hc2NpaWRvY2AKIAogICBjYXNlICIke2RvY30iIGluCi0gICAgImltcGxlbWVudGF0aW9ucy1uZW80aiIpCi0gICAgICAjIGRlYWN0aXZhdGUgU3BhcmsgcGx1Z2luIHRvIHByZXZlbnQgdmVyc2lvbiBjb25mbGljdHMgYmV0d2VlbiBUaW5rZXJQb3AncyBTcGFyayBqYXJzIGFuZCBOZW80aidzIFNwYXJrIGphcnMKLSAgICAgIG1rZGlyIC5leHQKLSAgICAgIG12IGV4dC9zcGFyay1ncmVtbGluIC5leHQvCi0gICAgICBjYXQgZXh0L3BsdWdpbnMudHh0IHwgdGVlIC5leHQvcGx1Z2lucy5hbGwgfCBncmVwIC1GdiAnU3BhcmtHcmVtbGluUGx1Z2luJyA+IC5leHQvcGx1Z2lucy50eHQKLSAgICAgIDs7Ci0gICAgImltcGxlbWVudGF0aW9ucy1oYWRvb3Atc3RhcnQiIHwgImltcGxlbWVudGF0aW9ucy1oYWRvb3AtZW5kIiB8ICJpbXBsZW1lbnRhdGlvbnMtc3BhcmsiIHwgIm9sYXAtc3BhcmsteWFybiIpCi0gICAgICAjIGRlYWN0aXZhdGUgTmVvNGogcGx1Z2luIHRvIHByZXZlbnQgdmVyc2lvbiBjb25mbGljdHMgYmV0d2VlbiBUaW5rZXJQb3AncyBTcGFyayBqYXJzIGFuZCBOZW80aidzIFNwYXJrIGphcnMKLSAgICAgIG1rZGlyIC5leHQKLSAgICAgIG12IGV4dC9uZW80ai1ncmVtbGluIC5leHQvCi0gICAgICBjYXQgZXh0L3BsdWdpbnMudHh0IHwgdGVlIC5leHQvcGx1Z2lucy5hbGwgfCBncmVwIC1GdiAnTmVvNGpHcmVtbGluUGx1Z2luJyA+IC5leHQvcGx1Z2lucy50eHQKLSAgICAgIDs7CiAgICAgImdyZW1saW4tdmFyaWFudHMiKQogICAgICAgIyBkZWFjdGl2YXRlIHBsdWdpbiB0byBwcmV2ZW50IHZlcnNpb24gY29uZmxpY3RzCiAgICAgICBta2RpciAuZXh0Ci0gICAgICBtdiBleHQvbmVvNGotZ3JlbWxpbiAuZXh0LwogICAgICAgbXYgZXh0L3NwYXJrLWdyZW1saW4gLmV4dC8KICAgICAgIG12IGV4dC9oYWRvb3AtZ3JlbWxpbiAuZXh0LwotICAgICAgY2F0IGV4dC9wbHVnaW5zLnR4dCB8IHRlZSAuZXh0L3BsdWdpbnMuYWxsIHwgZ3JlcCAtdiAnTmVvNGpHcmVtbGluUGx1Z2luXHxTcGFya0dyZW1saW5QbHVnaW5cfEhhZG9vcEdyZW1saW5QbHVnaW4nID4gLmV4dC9wbHVnaW5zLnR4dAorICAgICAgY2F0IGV4dC9wbHVnaW5zLnR4dCB8IHRlZSAuZXh0L3BsdWdpbnMuYWxsIHwgZ3JlcCAtdiAnU3BhcmtHcmVtbGluUGx1Z2luXHxIYWRvb3BHcmVtbGluUGx1Z2luJyA+IC5leHQvcGx1Z2lucy50eHQKICAgICAgIDs7CiAgIGVzYWMKIApkaWZmIC0tZ2l0IGEvZG9jcy9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5zaCBiL2RvY3MvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3Muc2gKaW5kZXggM2MwNWQ5NC4uOWRmMjk4NiAxMDA3NTUKLS0tIGEvZG9jcy9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5zaAorKysgYi9kb2NzL3ByZXByb2Nlc3Nvci9wcmVwcm9jZXNzLnNoCkBAIC00NiwxMSArNDYsNiBAQAogICAgIGV4aXQgMQogICB9CiAKLSAgaWYgWyAtZSAvdG1wL25lbzRqIF07IHRoZW4KLSAgICBlY2hvICJUaGUgZGlyZWN0b3J5ICcvdG1wL25lbzRqJyBpcyByZXF1aXJlZCBieSB0aGUgcHJlLXByb2Nlc3NvciwgYmUgc3VyZSB0byBkZWxldGUgaXQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGRvY3MuIgotICAgIGV4aXQgMQotICBmaQotCiAgIGlmIFsgLWUgL3RtcC90aW5rZXJncmFwaC5rcnlvIF07IHRoZW4KICAgICBlY2hvICJUaGUgZmlsZSAnL3RtcC90aW5rZXJncmFwaC5rcnlvJyBpcyByZXF1aXJlZCBieSB0aGUgcHJlLXByb2Nlc3NvciwgYmUgc3VyZSB0byBkZWxldGUgaXQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGRvY3MuIgogICAgIGV4aXQgMQpAQCAtMTQ4LDcgKzE0Myw3IEBACiB0cHV0IHNtYW0KIFtbICIke0NPTFVNTlN9IiAhPSAiIiBdXSAmJiBzdHR5IGNvbHMgJHtDT0xTfQogCi1ybSAtcmYgL3RtcC9uZW80aiAvdG1wL3RpbmtlcmdyYXBoLmtyeW8KK3JtIC1yZiAvdG1wL3RpbmtlcmdyYXBoLmtyeW8KIAogWyAke2VjfSAtZXEgMCBdIHx8IGV4aXQgMQogCmRpZmYgLS1naXQgYS9kb2NzL3NpdGUvaG9tZS9iZW5lZml0cy11c2UtY2FzZXMuaHRtbCBiL2RvY3Mvc2l0ZS9ob21lL2JlbmVmaXRzLXVzZS1jYXNlcy5odG1sCmluZGV4IGQ0NDVlOTguLjQzMjhkMzUgMTAwNjQ0Ci0tLSBhL2RvY3Mvc2l0ZS9ob21lL2JlbmVmaXRzLXVzZS1jYXNlcy5odG1sCisrKyBiL2RvY3Mvc2l0ZS9ob21lL2JlbmVmaXRzLXVzZS1jYXNlcy5odG1sCkBAIC0yMywxMCArMjMsMjYgQEAKICAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vIj4KKyAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9ImluZGV4LCBmb2xsb3ciPgogICAgIDxsaW5rIGhyZWY9ImltZy9mYXZpY29uLnBuZyIgcmVsPSJzaG9ydGN1dCBpY29uIi8+Ci0gICAgPHRpdGxlPkFwYWNoZSBUaW5rZXJQb3A6IEJlbmVmaXRzIGFuZCBVc2UgQ2FzZXM8L3RpdGxlPgotICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgorICAgIDx0aXRsZT5HcmFwaCBEYXRhYmFzZSBCZW5lZml0cyAmYW1wOyBVc2UgQ2FzZXMgfCBBcGFjaGUgVGlua2VyUG9wPC90aXRsZT4KKyAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR3JhcGggZGF0YWJhc2UgYWR2YW50YWdlcyBmb3Igc29jaWFsIG5ldHdvcmtzLCBmcmF1ZCBkZXRlY3Rpb24sIGFuZCByZWNvbW1lbmRhdGlvbiBlbmdpbmVzLiBEaXNjb3ZlciBob3cgZ3JhcGggY29tcHV0aW5nIHNvbHZlcyBjb21wbGV4IHJlbGF0aW9uc2hpcCBjaGFsbGVuZ2VzLiI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImdyYXBoIGRhdGFiYXNlLCB1c2UgY2FzZXMsIHJlbGF0aW9uc2hpcHMsIFRpbmtlclBvcCI+CisgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvYmVuZWZpdHMtdXNlLWNhc2VzLmh0bWwiPgorCisgICAgPCEtLSBPcGVuIEdyYXBoIC8gRmFjZWJvb2sgLS0+CisgICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvYmVuZWZpdHMtdXNlLWNhc2VzLmh0bWwiPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iR3JhcGggRGF0YWJhc2UgQmVuZWZpdHMgJmFtcDsgVXNlIENhc2VzIHwgQXBhY2hlIFRpbmtlclBvcCI+CisgICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJHcmFwaCBkYXRhYmFzZSBhZHZhbnRhZ2VzIGZvciBzb2NpYWwgbmV0d29ya3MsIGZyYXVkIGRldGVjdGlvbiwgYW5kIHJlY29tbWVuZGF0aW9uIGVuZ2luZXMuIERpc2NvdmVyIGhvdyBncmFwaCBjb21wdXRpbmcgc29sdmVzIGNvbXBsZXggcmVsYXRpb25zaGlwIGNoYWxsZW5nZXMuIj4KKyAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL3VzZS1jYXNlcy9iZy5wbmciPgorCisgICAgPCEtLSBUd2l0dGVyIC0tPgorICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeV9sYXJnZV9pbWFnZSI+CisgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAYXBhY2hldGlua2VycG9wIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJHcmFwaCBEYXRhYmFzZSBCZW5lZml0cyAmYW1wOyBVc2UgQ2FzZXMgfCBBcGFjaGUgVGlua2VyUG9wIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmRlc2NyaXB0aW9uIiBjb250ZW50PSJHcmFwaCBkYXRhYmFzZSBhZHZhbnRhZ2VzIGZvciBzb2NpYWwgbmV0d29ya3MsIGZyYXVkIGRldGVjdGlvbiwgYW5kIHJlY29tbWVuZGF0aW9uIGVuZ2luZXMuIERpc2NvdmVyIGhvdyBncmFwaCBjb21wdXRpbmcgc29sdmVzIGNvbXBsZXggcmVsYXRpb25zaGlwIGNoYWxsZW5nZXMuIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmltYWdlIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2ltZy91c2UtY2FzZXMvYmcucG5nIj4KICAgICA8bGluayBocmVmPSJjc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CiAgICAgPGxpbmsgaHJlZj0iY3NzL2ZvbnQtYXdlc29tZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIvPgogICAgIDxsaW5rIGhyZWY9ImNzcy9jdXN0b21lLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KQEAgLTUwLDYgKzY2LDExMCBAQAogICAgICAgICB9KSgpOwogICAgIDwvc2NyaXB0PgogICAgIDwhLS0gRW5kIE1hdG9tbyBDb2RlIC0tPgorCisgICAgPCEtLSBTdHJ1Y3R1cmVkIERhdGEgLyBKU09OLUxEIC0tPgorICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CisgICAgeworICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCisgICAgICAiQGdyYXBoIjogWworICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogIk9yZ2FuaXphdGlvbiIsCisgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNvcmdhbml6YXRpb24iLAorICAgICAgICAgICJuYW1lIjogIkFwYWNoZSBUaW5rZXJQb3AiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAgICAgICAgICJsb2dvIjogeworICAgICAgICAgICAgIkB0eXBlIjogIkltYWdlT2JqZWN0IiwKKyAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9pbWcvbG9nby5wbmciLAorICAgICAgICAgICAgIndpZHRoIjogMjgwLAorICAgICAgICAgICAgImhlaWdodCI6IDYwCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogIldlYlNpdGUiLAorICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jd2Vic2l0ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgIm5hbWUiOiAiQXBhY2hlIFRpbmtlclBvcCIsCisgICAgICAgICAgInB1Ymxpc2hlciI6IHsKKyAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jb3JnYW5pemF0aW9uIgorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKKyAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvYmVuZWZpdHMtdXNlLWNhc2VzLmh0bWwiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9iZW5lZml0cy11c2UtY2FzZXMuaHRtbCIsCisgICAgICAgICAgIm5hbWUiOiAiR3JhcGggRGF0YWJhc2UgQmVuZWZpdHMgJiBVc2UgQ2FzZXMgfCBBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAiaXNQYXJ0T2YiOiB7CisgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI3dlYnNpdGUiCisgICAgICAgICAgfSwKKyAgICAgICAgICAiYWJvdXQiOiB7CisgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiQnJlYWRjcnVtYkxpc3QiLAorICAgICAgICAgICJpdGVtTGlzdEVsZW1lbnQiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJMaXN0SXRlbSIsCisgICAgICAgICAgICAgICJwb3NpdGlvbiI6IDEsCisgICAgICAgICAgICAgICJpdGVtIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKKyAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJIb21lIgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiTGlzdEl0ZW0iLAorICAgICAgICAgICAgICAicG9zaXRpb24iOiAyLAorICAgICAgICAgICAgICAiaXRlbSI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2JlbmVmaXRzLXVzZS1jYXNlcy5odG1sIiwKKyAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvYmVuZWZpdHMtdXNlLWNhc2VzLmh0bWwiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkJlbmVmaXRzICYgVXNlIENhc2VzIgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogIkZBUVBhZ2UiLAorICAgICAgICAgICJtYWluRW50aXR5IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAorICAgICAgICAgICAgICAibmFtZSI6ICJXaGF0IGlzIGEgZ3JhcGggZGF0YWJhc2U/IiwKKyAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAorICAgICAgICAgICAgICAgICJ0ZXh0IjogIkEgZ3JhcGggZGF0YWJhc2UgaXMgYSBzdHJ1Y3R1cmUgY29tcG9zZWQgb2YgdmVydGljZXMgYW5kIGVkZ2VzLCB3aGVyZSB2ZXJ0aWNlcyBkZW5vdGUgZGlzY3JldGUgb2JqZWN0cyBzdWNoIGFzIGEgcGVyc29uLCBhIHBsYWNlLCBvciBhbiBldmVudCwgYW5kIGVkZ2VzIGRlbm90ZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdmVydGljZXMuIEJvdGggdmVydGljZXMgYW5kIGVkZ2VzIGNhbiBoYXZlIHByb3BlcnRpZXMsIHdoaWNoIGFyZSBrZXkvdmFsdWUtcGFpcnMgdGhhdCBleHByZXNzIG5vbi1yZWxhdGlvbmFsIGluZm9ybWF0aW9uLiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiV2hlbiBzaG91bGQgSSB1c2UgYSBncmFwaCBkYXRhYmFzZT8iLAorICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCisgICAgICAgICAgICAgICAgInRleHQiOiAiSWYgeW91ciBkb21haW4gaXMgY29tcG9zZWQgb2YgYSBoZXRlcm9nZW5lb3VzIHNldCBvZiBvYmplY3RzICh2ZXJ0aWNlcykgdGhhdCBjYW4gYmUgcmVsYXRlZCB0byBvbmUgYW5vdGhlciBpbiBhIG11bHRpdHVkZSBvZiB3YXlzIChlZGdlcyksIHRoZW4gYSBncmFwaCBtYXkgYmUgdGhlIHJpZ2h0IHJlcHJlc2VudGF0aW9uIHRvIHVzZS4gR3JhcGggZGF0YWJhc2VzIGFyZSBwYXJ0aWN1bGFybHkgZWZmZWN0aXZlIGZvciBkYXRhIG1vZGVscyB3aXRoIGNvbXBsZXggcmVsYXRpb25zaGlwcy4iCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJRdWVzdGlvbiIsCisgICAgICAgICAgICAgICJuYW1lIjogIldoYXQgYXJlIGNvbW1vbiB1c2UgY2FzZXMgZm9yIGdyYXBoIGRhdGFiYXNlcz8iLAorICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCisgICAgICAgICAgICAgICAgInRleHQiOiAiQ29tbW9uIHVzZSBjYXNlcyBmb3IgZ3JhcGggZGF0YWJhc2VzIGluY2x1ZGUgc29jaWFsIG5ldHdvcmtzLCBmcmF1ZCBkZXRlY3Rpb24sIGtub3dsZWRnZSBncmFwaHMsIHJlY29tbWVuZGF0aW9uIGVuZ2luZXMsIGlkZW50aXR5L2FjY2VzcyBtYW5hZ2VtZW50LCBjdXN0b21lciAzNjAgdmlld3MsIG1hc3RlciBkYXRhIG1hbmFnZW1lbnQsIHN1cHBseSBjaGFpbiBtYW5hZ2VtZW50LCBhbmQgY29tcGxpYW5jZSBzeXN0ZW1zLiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiV2hhdCBhZHZhbnRhZ2VzIGRvIGdyYXBoIGRhdGFiYXNlcyBvZmZlciBvdmVyIHJlbGF0aW9uYWwgZGF0YWJhc2VzPyIsCisgICAgICAgICAgICAgICJhY2NlcHRlZEFuc3dlciI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiQW5zd2VyIiwKKyAgICAgICAgICAgICAgICAidGV4dCI6ICJHcmFwaCBkYXRhYmFzZXMgYWxsb3cgeW91IHRvIHRoaW5rIGluIHRlcm1zIG9mIGFjdG9ycyB3aXRoaW4gYSB3b3JsZCBvZiBjb21wbGV4IHJlbGF0aW9ucyBhcyBvcHBvc2VkIHRvIHN0YXRpY2FsbHktdHlwZWQgdGFibGVzIGpvaW5lZCBpbiBhZ2dyZWdhdGUuIFRoZXkgb2ZmZXIgYSBmbGV4aWJsZSwgaW50dWl0aXZlIGRhdGEgc3RydWN0dXJlIGFsb25nIHdpdGggYWxnb3JpdGhtcyBmb3IgY29tcGxleCByZWFzb25pbmc6IHBhdGggYW5hbHlzaXMsIHZlcnRleCBjbHVzdGVyaW5nIGFuZCByYW5raW5nLCBzdWJncmFwaCBpZGVudGlmaWNhdGlvbiwgYW5kIG1vcmUuIgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdCisgICAgfQorICAgIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CiA8IS0tIGhlYWRlciAtLT4KQEAgLTU4LDcgKzE3OCw3IEBACiAgICAgICAgIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnICAiPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSJpbmRleC5odG1sIj4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9sb2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2xvZ28ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IkFwYWNoZSBUaW5rZXJQb3AgR3JhcGggQ29tcHV0aW5nIEZyYW1ld29yayBMb2dvIj4KICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9IiNuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWNvbnRyb2xzPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50IgpAQCAtMTM0LDcgKzI1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8va3JsYXdyZW5jZS5naXRodWIuaW8vZ3JhcGgvIj5Cb29rOiBQcmFjdGljYWwgR3JlbWxpbjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHA6Ly9zcWwyZ3JlbWxpbi5jb20vIj5TUUwyR3JlbWxpbjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ka3VwcGl0ei9zcWwyZ3JlbWxpbiI+U1FMMkdyZW1saW48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpAQCAtMTUxLDYgKzI3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AvIj48aW1nIHNyYz0iaW1nL2ppcmEtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPklzc3VlIFRyYWNrZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC8iPjxpbWcgc3JjPSJpbWcvZ2l0aHViLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5HaXRIdWI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3R3aXRjaC1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+VHdpdGNoPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL2xpbmtlZGluLWxvZ28uc3ZnIiBjbGFzcz0ibmF2LWljb24iLz5MaW5rZWRJbjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3R3aXR0ZXItbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPlR3aXR0ZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3lvdXR1YmUtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPllvdVR1YmU8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxociBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9saT4KQEAgLTE4Niw3ICszMDcsNyBAQAogCiA8IS0tIGhlcm8gLS0+CiA8ZGl2IGNsYXNzPSJjb250YWluZXIgaGVyby1pbm5lciI+Ci0gICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvYmcucG5nIiBjbGFzcz0iaW1nLWZsdWlkIHctMTAwIiBhbHQ9ImltZyI+CisgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvYmcucG5nIiBjbGFzcz0iaW1nLWZsdWlkIHctMTAwIiBhbHQ9IlRpbmtlclBvcCBVc2UgQ2FzZXMgQmFubmVyIj4KIDwvZGl2PgogCiA8IS0tIENvbnRlbnQgLS0+CkBAIC0xOTcsNyArMzE4LDcgQEAKICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9ImZ0LTQwIGJvbGQgYmxhY2sgbWItMyBtZC1tZC01Ij5CZW5lZml0cyAmIFVzZSBDYXNlczwvaDE+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02IG1iLTQgbWQtbGctMCI+Ci0gICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvZ3JlbWxpbi1tYWluLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB3LTEwMCIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdXNlLWNhc2VzL2dyZW1saW4tbWFpbi5wbmciIGNsYXNzPSJpbWctZmx1aWQgdy0xMDAiIGFsdD0iVGlua2VyUG9wIEdyZW1saW4iPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctNiAiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZS1jYXNlLXBhZ2UtcGwtMyI+CkBAIC0yMzUsNyArMzU2LDcgQEAKICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVjLWJveCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdXNlLWNhc2VzL25ldHdvcmsucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvbmV0d29yay5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJTb2NpYWwgTmV0d29ya3MgSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZnQtMTggYm9sZCB0ZXh0LWJsdWUiPlNvY2lhbCBOZXR3b3JrczwvaDM+CiAgICAgICAgICAgICAgICAgICAgIDxwPlVubGVhc2ggdGhlIHBvd2VyIG9mIGEgc29jaWFsIG5ldHdvcmsgYnkgdXNpbmcgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGluZGl2aWR1YWxzIHRvIGluZmVyIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kIGNvbm5lY3Rpb25zLjwvcD4KQEAgLTI0NCw3ICszNjUsNyBAQAogCiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idWMtYm94Ij4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvZnJhdWQucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvZnJhdWQucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iRnJhdWQgRGV0ZWN0aW9uIEljb24iPgogICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImZ0LTE4IGJvbGQgdGV4dC1ibHVlIj5GcmF1ZCBEZXRlY3Rpb248L2gzPgogICAgICAgICAgICAgICAgICAgICA8cD5MZXZlcmFnZSB0aGUgY29ubmVjdGlvbnMgaW5oZXJlbnQgaW4gYSBmaW5hbmNpYWwgdHJhbnNhY3Rpb24gdG8gcHJvdmlkZSByZWFsLXRpbWUgYW5hbHlzaXMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3Rpb24gZm9yIGtub3duIGZyYXVkdWxlbnQgcGF0dGVybnMgb2YgYWN0aXZpdHkuPC9wPgpAQCAtMjUzLDcgKzM3NCw3IEBACiAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00Ij4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1Yy1ib3giPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3VzZS1jYXNlcy9rbm93bGVkZ2UucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMva25vd2xlZGdlLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtYi0zIiBhbHQ9Iktub3dsZWRnZSBHcmFwaHMgSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZnQtMTggYm9sZCB0ZXh0LWJsdWUiPktub3dsZWRnZSBHcmFwaHM8L2gzPgogICAgICAgICAgICAgICAgICAgICA8cD5Vbml0ZSBkaXNwZXJhdGUgZGF0YSBzb3VyY2VzIGFuZCBkYXRhIHNpbG9zIHRvIHByb3ZpZGUgY29udGV4dHVhbGx5IHJlbGV2YW50IGluZm9ybWF0aW9uIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyaWVzLjwvcD4KQEAgLTI2Miw3ICszODMsNyBAQAogCiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idWMtYm94Ij4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvcmVjb21tZW5kYXRpb24ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvcmVjb21tZW5kYXRpb24ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iUmVjb21tZW5kYXRpb24gRW5naW5lcyBJY29uIj4KICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJmdC0xOCBib2xkIHRleHQtYmx1ZSI+UmVjb21tZW5kYXRpb24gRW5naW5lczwvaDM+CiAgICAgICAgICAgICAgICAgICAgIDxwPlByb3ZpZGUgcmVhbC10aW1lIHBlcnNvbmFsaXplZCByZWNvbW1lbmRhdGlvbnMgZm9yIHByb2R1Y3RzLCBzZXJ2aWNlcyBhbmQgY29udGVudCBieSB1dGlsaXppbmcKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zIHdpdGhpbiBkYXRhLjwvcD4KQEAgLTI3MSw3ICszOTIsNyBAQAogCiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCI+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idWMtYm94Ij4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvaWRlbnRpZnkucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy91c2UtY2FzZXMvaWRlbnRpZnkucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IEljb24iPgogICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9ImZ0LTE4IGJvbGQgdGV4dC1ibHVlIj5JZGVudGl0eS9BY2Nlc3MgTWFuYWdlbWVudDwvaDM+CiAgICAgICAgICAgICAgICAgICAgIDxwPkVmZmVjdGl2ZWx5IGFuZCBlZmZjaWVudGx5IHRyYWNrIHVzZXIgYWN0aXZpdHkgYW5kIGFjY2VzcyB1c2luZyBhIGdyYXBoIG9mIGFzc2V0cyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcHMuPC9wPgpAQCAtMjgwLDcgKzQwMSw3IEBACiAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00Ij4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1Yy1ib3giPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3VzZS1jYXNlcy8zNjAtdmlldy5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3VzZS1jYXNlcy8zNjAtdmlldy5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJDdXN0b21lciAzNjAgVmlldyBJY29uIj4KICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJmdC0xOCBib2xkIHRleHQtYmx1ZSI+Q3VzdG9tZXIgMzYwPC9oMz4KICAgICAgICAgICAgICAgICAgICAgPHA+TGV2ZXJhZ2UgZGlzY29ubmVjdGVkIGRhdGEgc291cmNlcyB0byBwcm92aWRlIGEgaG9saXNpdGljIDM2MCBkZWdyZWUgdmlldyBvZiBjdXN0b21lcgogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RvbnM8L3A+CkBAIC0yODgsNyArNDA5LDcgQEAKICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVjLWJveCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdXNlLWNhc2VzL21hc3Rlci1kYXRhLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtYi0zIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdXNlLWNhc2VzL21hc3Rlci1kYXRhLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtYi0zIiBhbHQ9Ik1hc3RlciBEYXRhIE1hbmFnZW1lbnQgSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZnQtMTggYm9sZCB0ZXh0LWJsdWUiPk1hc3RlciBEYXRhIE1hbmFnZW1lbnQ8L2gzPgogICAgICAgICAgICAgICAgICAgICA8cD5Pcmdhbml6ZSBhbmQgcHJvdmlkZSBhY2Nlc3MgdG8gY2Fub25pY2FsIG1hc3RlciBkYXRhIGJ5IGNvbWJpbmluZyBkYXRhIGluIGEgc2NoZW1hbGVzcyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgIGZsZXhpYmxlIG1hbm5lci48L3A+CkBAIC0yOTgsNyArNDE5LDcgQEAKIAogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVjLWJveCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdXNlLWNhc2VzL3N1cHBseS1jaGFpbi5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3VzZS1jYXNlcy9zdXBwbHktY2hhaW4ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iU3VwcGx5IENoYWluIE1hbmFnZW1lbnQgSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZnQtMTggYm9sZCB0ZXh0LWJsdWUiPlN1cHBseSBDaGFpbiBNYW5hZ2VtZW50PC9oMz4KICAgICAgICAgICAgICAgICAgICAgPHA+TWFuYWdlIGFuZCB2aXN1YWxpemUgY29tcGxleCBpbnRlcmNvbm5lY3RlZCBzdXBwbHkgY2hhaW5zIHRvIGlkZW50aWZ5IG9wdGltaXphdGlvbnMgYW5kIGFzc2VzcwogICAgICAgICAgICAgICAgICAgICAgICAgcmlzay48L3A+CkBAIC0zMDgsNyArNDI5LDcgQEAKIAogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVjLWJveCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdXNlLWNhc2VzL2NvbXBsaWFudC5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3VzZS1jYXNlcy9jb21wbGlhbnQucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iQ29tcGxpYW5jZSBJY29uIj4KICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJmdC0xOCBib2xkIHRleHQtYmx1ZSI+Q29tcGxpYW5jZTwvaDM+CiAgICAgICAgICAgICAgICAgICAgIDxwPkVuc3VyZSBlZmZlY3RpdmUgY29tcGxpYW5jZSBieSBleGFtaW5pbmcgYW5kIGV2YWx1YXRpbmcgZW50aXRpZXMgYWdhaW5zdCBhIG5ldHdvcmsgb2YgYXBwbGljYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjb25uZWN0ZWQgcmVndWxhdGlvbnMuPC9wPgpAQCAtMzI5LDcgKzQ1MCw3IEBACiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ianUtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC00MCB0ZXh0LWJsdWUgYm9sZCI+Sm9pbiBVczwvaDI+CiAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJib2xkIj5Kb2luIHVzIG9uIG91ciBEaXNjb3JkIFNlcnZlcjwvcD4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90cHZld3gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG10LTMiIGFsdD0iaW1nIj48L2E+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHB2ZXd4LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtdC0zIiBhbHQ9IlRpbmtlclBvcCBEaXNjb3JkIGludml0YXRpb24iPjwvYT4KICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KQEAgLTM0NSwxMSArNDY2LDExIEBACiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvbGQgZnQtMjUiPkFwYWNoZSBUaW5rZXJQb3DihKI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im10LTIgbWItNCI+QXBhY2hlIFRpbmtlclBvcOKEoiBpcyBhIGdyYXBoIGNvbXB1dGluZyBmcmFtZXdvcmsgZm9yIGJvdGggZ3JhcGggZGF0YWJhc2VzIChPTFRQKSBhbmQgZ3JhcGggYW5hbHl0aWMgc3lzdGVtcyAoT0xBUCkuPC9wPgogICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Imxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmUgaG92ZXItb3AtbG93Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZGlzY29yZC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL2dpdGh1Yi1ib3guc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnR3aXRjaC50di9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3R3aXRjaC5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3R3aXR0ZXItc3F1YXJlLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC95b3V0dWJlLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC9kaXNjb3JkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJUaW5rZXJQb3AgRGlzY29yZCI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC9naXRodWItYm94LnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJUaW5rZXJQb3AgR2l0SHViIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudHdpdGNoLnR2L2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdGNoLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJUaW5rZXJQb3AgVHdpdGNoIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3R3aXR0ZXItc3F1YXJlLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJUaW5rZXJQb3AgVHdpdHRlciI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3lvdXR1YmUucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBZb3VUdWJlIj48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCBmdC1saW5rcyI+CkBAIC0zOTEsNyArNTEyLDcgQEAKICAgICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiA8L2Zvb3Rlcj4KLTxzY3JpcHQgc3JjPSJqcy9qcXVlcnktMS4xMS4xLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ianMvYm9vdHN0cmFwLmJ1bmRsZS5taW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImpzL3dvdy5taW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImpzL215LmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2RvY3Mvc2l0ZS9ob21lL2NvbW11bml0eS5odG1sIGIvZG9jcy9zaXRlL2hvbWUvY29tbXVuaXR5Lmh0bWwKaW5kZXggNzEyODE4Yy4uMzhkYjY5YiAxMDA2NDQKLS0tIGEvZG9jcy9zaXRlL2hvbWUvY29tbXVuaXR5Lmh0bWwKKysrIGIvZG9jcy9zaXRlL2hvbWUvY29tbXVuaXR5Lmh0bWwKQEAgLTIyLDEwICsyMiwyNiBAQAogICAgIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiAgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm8iPgorICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIGZvbGxvdyI+CiAgICAgPGxpbmsgaHJlZj0iaW1nL2Zhdmljb24ucG5nIiByZWw9InNob3J0Y3V0IGljb24iLz4KLSAgICA8dGl0bGU+QXBhY2hlIFRpbmtlclBvcDogQ29tbXVuaXR5PC90aXRsZT4KLSAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLSAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iIj4KKyAgICA8dGl0bGU+R3JhcGggQ29tcHV0aW5nIENvbW11bml0eSB8IEFwYWNoZSBUaW5rZXJQb3A8L3RpdGxlPgorICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJKb2luIHRoZSBBcGFjaGUgVGlua2VyUG9wIGNvbW11bml0eSB0byBjb2xsYWJvcmF0ZSBvbiBncmFwaCB0ZWNobm9sb2d5LiBDb25uZWN0IHdpdGggZGV2ZWxvcGVycyBhbmQgY29udHJpYnV0ZSB0byB0aGUgb3Blbi1zb3VyY2UgZ3JhcGggZWNvc3lzdGVtLiI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImdyYXBoIGNvbW11bml0eSwgVGlua2VyUG9wLCBvcGVuIHNvdXJjZSwgZGV2ZWxvcGVycyI+CisgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvY29tbXVuaXR5Lmh0bWwiPgorCisgICAgPCEtLSBPcGVuIEdyYXBoIC8gRmFjZWJvb2sgLS0+CisgICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzp1cmwiIGNvbnRlbnQ9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvY29tbXVuaXR5Lmh0bWwiPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iR3JhcGggQ29tcHV0aW5nIENvbW11bml0eSB8IEFwYWNoZSBUaW5rZXJQb3AiPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iSm9pbiB0aGUgQXBhY2hlIFRpbmtlclBvcCBjb21tdW5pdHkgdG8gY29sbGFib3JhdGUgb24gZ3JhcGggdGVjaG5vbG9neS4gQ29ubmVjdCB3aXRoIGRldmVsb3BlcnMgYW5kIGNvbnRyaWJ1dGUgdG8gdGhlIG9wZW4tc291cmNlIGdyYXBoIGVjb3N5c3RlbS4iPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9pbWcvY29tbXVuaXR5L2NvbW11bml0eS1iYW5uZXIucG5nIj4KKworICAgIDwhLS0gVHdpdHRlciAtLT4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InN1bW1hcnlfbGFyZ2VfaW1hZ2UiPgorICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6c2l0ZSIgY29udGVudD0iQGFwYWNoZXRpbmtlcnBvcCI+CisgICAgPG1ldGEgbmFtZT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0iR3JhcGggQ29tcHV0aW5nIENvbW11bml0eSB8IEFwYWNoZSBUaW5rZXJQb3AiPgorICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkpvaW4gdGhlIEFwYWNoZSBUaW5rZXJQb3AgY29tbXVuaXR5IHRvIGNvbGxhYm9yYXRlIG9uIGdyYXBoIHRlY2hub2xvZ3kuIENvbm5lY3Qgd2l0aCBkZXZlbG9wZXJzIGFuZCBjb250cmlidXRlIHRvIHRoZSBvcGVuLXNvdXJjZSBncmFwaCBlY29zeXN0ZW0uIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmltYWdlIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2ltZy9jb21tdW5pdHkvY29tbXVuaXR5LWJhbm5lci5wbmciPgogICAgIDxsaW5rIGhyZWY9ImNzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgICA8bGluayBocmVmPSJjc3MvZm9udC1hd2Vzb21lLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ii8+CiAgICAgPGxpbmsgaHJlZj0iY3NzL2N1c3RvbWUuY3NzIiByZWw9InN0eWxlc2hlZXQiPgpAQCAtNTAsNiArNjYsMTE0IEBACiAgICAgICAgIH0pKCk7CiAgICAgPC9zY3JpcHQ+CiAgICAgPCEtLSBFbmQgTWF0b21vIENvZGUgLS0+CisKKyAgICA8IS0tIFN0cnVjdHVyZWQgRGF0YSAvIEpTT04tTEQgLS0+CisgICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4KKyAgICB7CisgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKKyAgICAgICJAZ3JhcGgiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiT3JnYW5pemF0aW9uIiwKKyAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIsCisgICAgICAgICAgIm5hbWUiOiAiQXBhY2hlIFRpbmtlclBvcCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgImxvZ28iOiB7CisgICAgICAgICAgICAiQHR5cGUiOiAiSW1hZ2VPYmplY3QiLAorICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2ltZy9sb2dvLnBuZyIsCisgICAgICAgICAgICAid2lkdGgiOiAyODAsCisgICAgICAgICAgICAiaGVpZ2h0IjogNjAKKyAgICAgICAgICB9LAorICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcGFjaGUgVGlua2VyUG9wIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zIChPTEFQKS4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCisgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyN3ZWJzaXRlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAicHVibGlzaGVyIjogeworICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNvcmdhbml6YXRpb24iCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogIldlYlBhZ2UiLAorICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9jb21tdW5pdHkuaHRtbCN3ZWJwYWdlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvY29tbXVuaXR5Lmh0bWwiLAorICAgICAgICAgICJuYW1lIjogIkdyYXBoIENvbXB1dGluZyBDb21tdW5pdHkgfCBBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAiaXNQYXJ0T2YiOiB7CisgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI3dlYnNpdGUiCisgICAgICAgICAgfSwKKyAgICAgICAgICAiYWJvdXQiOiB7CisgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIKKyAgICAgICAgICB9LAorICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJKb2luIHRoZSBBcGFjaGUgVGlua2VyUG9wIGNvbW11bml0eSB0byBjb2xsYWJvcmF0ZSBvbiBncmFwaCBkYXRhYmFzZSB0ZWNobm9sb2d5LiBDb25uZWN0IHdpdGggZGV2ZWxvcGVycywgZmluZCByZXNvdXJjZXMsIGFuZCBjb250cmlidXRlIHRvIHRoZSBvcGVuLXNvdXJjZSBncmFwaCBjb21wdXRpbmcgZWNvc3lzdGVtLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJCcmVhZGNydW1iTGlzdCIsCisgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2NvbW11bml0eS5odG1sI2JyZWFkY3J1bWJsaXN0IiwKKyAgICAgICAgICAiaXRlbUxpc3RFbGVtZW50IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiTGlzdEl0ZW0iLAorICAgICAgICAgICAgICAicG9zaXRpb24iOiAxLAorICAgICAgICAgICAgICAiaXRlbSI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgICAgICAgIm5hbWUiOiAiSG9tZSIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgInBvc2l0aW9uIjogMiwKKyAgICAgICAgICAgICAgIml0ZW0iOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIldlYlBhZ2UiLAorICAgICAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9jb21tdW5pdHkuaHRtbCIsCisgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2NvbW11bml0eS5odG1sIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJDb21tdW5pdHkiCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiRkFRUGFnZSIsCisgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2NvbW11bml0eS5odG1sI2ZhcXBhZ2UiLAorICAgICAgICAgICJtYWluRW50aXR5IjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAorICAgICAgICAgICAgICAibmFtZSI6ICJXaGF0IHByb2dyYW1taW5nIGxhbmd1YWdlcyBhcmUgc3VwcG9ydGVkIGJ5IFRpbmtlclBvcD8iLAorICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCisgICAgICAgICAgICAgICAgInRleHQiOiAiQXBhY2hlIFRpbmtlclBvcCBvZmZpY2lhbGx5IHN1cHBvcnRzIEphdmEsIEdyb292eSwgUHl0aG9uLCAuTkVUIChDIyksIEphdmFTY3JpcHQsIGFuZCBHby4gVGhlcmUgYXJlIGFsc28gY29tbXVuaXR5LXN1cHBvcnRlZCBsaWJyYXJpZXMgZm9yIG1hbnkgb3RoZXIgbGFuZ3VhZ2VzIGluY2x1ZGluZyBTY2FsYSwgUnVieSwgUEhQLCBDbG9qdXJlLCBFbGl4aXIsIEhhc2tlbGwsIGFuZCBSdXN0LiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiSG93IGRvIEkgY29udHJpYnV0ZSB0byBBcGFjaGUgVGlua2VyUG9wPyIsCisgICAgICAgICAgICAgICJhY2NlcHRlZEFuc3dlciI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiQW5zd2VyIiwKKyAgICAgICAgICAgICAgICAidGV4dCI6ICJZb3UgY2FuIGNvbnRyaWJ1dGUgdG8gQXBhY2hlIFRpbmtlclBvcCBieSBwYXJ0aWNpcGF0aW5nIGluIGRpc2N1c3Npb25zIG9uIERpc2NvcmQgb3IgbWFpbGluZyBsaXN0cywgc3VibWl0dGluZyBidWcgcmVwb3J0cyBvciBmZWF0dXJlIHJlcXVlc3RzIHRvIHRoZSBpc3N1ZSB0cmFja2VyLCBjb250cmlidXRpbmcgY29kZSBvciBkb2N1bWVudGF0aW9uIHZpYSBwdWxsIHJlcXVlc3RzIG9uIEdpdEh1Yiwgb3IgaGVscGluZyBvdGhlciB1c2VycyBpbiB0aGUgY29tbXVuaXR5LiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiV2hlcmUgY2FuIEkgZ2V0IGhlbHAgd2l0aCBUaW5rZXJQb3AgYW5kIEdyZW1saW4/IiwKKyAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAorICAgICAgICAgICAgICAgICJ0ZXh0IjogIlRoZSBUaW5rZXJQb3AgY29tbXVuaXR5IG9mZmVycyB2YXJpb3VzIHN1cHBvcnQgY2hhbm5lbHMgaW5jbHVkaW5nIERpc2NvcmQsIEFuc3dlciBPdmVyZmxvdywgU3RhY2sgT3ZlcmZsb3csIHVzZXIgbWFpbGluZyBsaXN0cywgYW5kIGRldmVsb3BlciBtYWlsaW5nIGxpc3RzLiBZb3UgY2FuIGFsc28gZmluZCBkb2N1bWVudGF0aW9uLCB0dXRvcmlhbHMsIGFuZCBleGFtcGxlcyBvbiB0aGUgVGlua2VyUG9wIHdlYnNpdGUuIgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAorICAgICAgICAgICAgICAibmFtZSI6ICJXaGF0IHRvb2xzIGFyZSBhdmFpbGFibGUgZm9yIHdvcmtpbmcgd2l0aCBUaW5rZXJQb3A/IiwKKyAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAorICAgICAgICAgICAgICAgICJ0ZXh0IjogIlRoZXJlIGFyZSBtYW55IHRvb2xzIGF2YWlsYWJsZSBmb3Igd29ya2luZyB3aXRoIFRpbmtlclBvcCBpbmNsdWRpbmcgdmlzdWFsaXphdGlvbiB0b29scyBsaWtlIEdyYXBoZXhwLCBLZXlMaW5lcywgYW5kIExpbmt1cmlvdXMsIGRldmVsb3BtZW50IHRvb2xzIGxpa2UgR3JlbWxpbnQgYW5kIEdyZW1sYXRvciwgRG9ja2VyIGNvbnRhaW5lcnMsIGFuZCBsYW5ndWFnZS1zcGVjaWZpYyBsaWJyYXJpZXMgYW5kIGZyYW1ld29ya3MgZm9yIHZhcmlvdXMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgICA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgogPCEtLSBoZWFkZXIgLS0+CkBAIC01OCw3ICsxODIsNyBAQAogICAgICAgICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyAgIj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iaW5kZXguaHRtbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvbG9nby5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9sb2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJBcGFjaGUgVGlua2VyUG9wIEdyYXBoIENvbXB1dGluZyBGcmFtZXdvcmsgTG9nbyI+CiAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdmJhci10b2dnbGVyIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIKQEAgLTEzNCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2tybGF3cmVuY2UuZ2l0aHViLmlvL2dyYXBoLyI+Qm9vazogUHJhY3RpY2FsIEdyZW1saW48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwOi8vc3FsMmdyZW1saW4uY29tLyI+U1FMMkdyZW1saW48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZGt1cHBpdHovc3FsMmdyZW1saW4iPlNRTDJHcmVtbGluPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KIAogICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KQEAgLTE1MSw2ICsyNzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLyI+PGltZyBzcmM9ImltZy9qaXJhLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Jc3N1ZSBUcmFja2VyPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvIj48aW1nIHNyYz0iaW1nL2dpdGh1Yi1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+R2l0SHViPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cudHdpdGNoLnR2L2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90d2l0Y2gtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPlR3aXRjaDwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9saW5rZWRpbi1sb2dvLnN2ZyIgY2xhc3M9Im5hdi1pY29uIi8+TGlua2VkSW48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90d2l0dGVyLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Ud2l0dGVyPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy95b3V0dWJlLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Zb3VUdWJlPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48aHIgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvbGk+CkBAIC0xODYsNyArMzExLDcgQEAKIAogPCEtLSBoZXJvIC0tPgogPGRpdiBjbGFzcz0iY29udGFpbmVyIGhlcm8taW5uZXIiPgotICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2JnLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB3LTEwMCIgYWx0PSJpbWciPgorICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2JnLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB3LTEwMCIgYWx0PSJUaW5rZXJQb3AgQ29tbXVuaXR5IEJhbm5lciI+CiA8L2Rpdj4KIAogPCEtLSBDb250ZW50IC0tPgpAQCAtMjEzLDcgKzMzOCw3IEBACiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC02IGNvbC1sZy0zIG1iLTMiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3RpbmtlcnBvcC5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS90aW5rZXJwb3AucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMiIGFsdD0iVGlua2VyUG9wIE9mZmljaWFsIFN1cHBvcnQgSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtYmx1ZSBib2xkIGZ0LTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIE9mZmljaWFsIFRpbmtlclBvcCBTdXBwb3J0CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpAQCAtMjIxLDcgKzM0Niw3IEBACiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC02IGNvbC1sZy0zIG1iLTMiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3RoaXJkLXBhcnR5LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0zIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3RoaXJkLXBhcnR5LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0zIiBhbHQ9IkNvbW11bml0eSBTdXBwb3J0IEljb24iPgogICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWJsdWUgYm9sZCBmdC0xNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICBDb21tdW5pdHkgc3VwcG9ydAogICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KQEAgLTIyOSw3ICszNTQsNyBAQAogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctMyBtYi0zIj4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQiPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS90b29scy5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS90b29scy5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJTb21lIFRvb2xzIGFuZCBMaWJyYXJpZXMgSWNvbiI+CiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtYmx1ZSBib2xkIGZ0LTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgdG9vbHMgYW5kIGxpYnJhcmllcwogICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KQEAgLTIzNyw3ICszNjIsNyBAQAogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctMyBtYi0zIj4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQiPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS90b29sLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0zIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3Rvb2wucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMiIGFsdD0iTWFueSBUb29scyBhbmQgTGlicmFyaWVzIEljb24iPgogICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWJsdWUgYm9sZCBmdC0xNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICBNYW55IHRvb2xzIGFuZCBsaWJyYXJpZXMKICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkBAIC0yNTQsNyArMzc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uLWJ1dHRvbiBjb2xsYXBzZWQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9IiNjb2xsYXBzZU9uZSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtY29udHJvbHM9ImNvbGxhcHNlT25lIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jb21tdW5pdHkvY2xvanVyZS5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJpbWciPkNsb2p1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jb21tdW5pdHkvY2xvanVyZS5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJDbG9qdXJlIExvZ28iPkNsb2p1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1pbmxpbmUtYmxvY2sgbXMtNCAiPjxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3RoaXJkLXBhcnR5LnBuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImltZy1mbHVpZCAiIGFsdD0iaW1nIj4gPGltZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaW1nL2NvbW11bml0eS90b29scy5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiAiIGFsdD0iaW1nIj48L2Rpdj4KQEAgLTI4MywxMiArNDA4LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAKLSAgICAgICAgICAgICAgICAgICAgPCEtLSBlbGl4ZXIgLS0+CisgICAgICAgICAgICAgICAgICAgIDwhLS0gZWxpeGlyIC0tPgogICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taXRlbSIgaWQ9ImxhbmctZWxpeGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRlciIgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjY29yZGlvbi1idXR0b24gY29sbGFwc2VkIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PSIjY29sbGFwc2VUd28iIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBhcmlhLWNvbnRyb2xzPSJjb2xsYXBzZVR3byI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2VsaXhlci5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJpbWciPkVsaXhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS9lbGl4ZXIucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMiIGFsdD0iRWxpeGlyIExvZ28iPkVsaXhpcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWlubGluZS1ibG9jayBtcy00ICI+PGltZyBzcmM9ImltZy9jb21tdW5pdHkvdGhpcmQtcGFydHkucG5nIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW1nLWZsdWlkICIgYWx0PSJpbWciPiA8aW1nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJpbWcvY29tbXVuaXR5L3Rvb2xzLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yICIgYWx0PSJpbWciPjwvZGl2PgpAQCAtMzA1LDcgKzQzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXJkLVBhcnR5IExpYnJhcmllcyBhbmQgVG9vbHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZ0LTE3Ij4tIDxhIGNsYXNzPSJ0ZXh0LWJsdWUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9SZXZtYWtlci9ncmVtbGV4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY29pbmdhbWluZy9ncmVtbGV4IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+R3JlbWxleDwvYT46IEEgR3JlbWxpbiBTZXJ2ZXIgZHJpdmVyIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGl4aXIuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkBAIC0zMTksNyArNDQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uLWJ1dHRvbiBjb2xsYXBzZWQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9IiNjb2xsYXBzZTMiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBhcmlhLWNvbnRyb2xzPSJjb2xsYXBzZTMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS9nby5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJpbWciPkdvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0zIiBhbHQ9IkdvIExvZ28iPkdvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtaW5saW5lLWJsb2NrIG1zLTQgIj48aW1nIHNyYz0iaW1nL2NvbW11bml0eS90aW5rZXJwb3AucG5nIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW1nLWZsdWlkIG1lLTIgIiBhbHQ9ImltZyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS90aGlyZC1wYXJ0eS5wbmciCkBAIC0zNTEsNyArNDc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiBtYi00IG1iLWxnLTAgY29sLWxnLTYgdGV4dC1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib3giPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJsYW5ndWFnZS1nby1tb2R1bGUiPmdvIGdldCBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92MyYjNjQ7djMuNy4wPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJsYW5ndWFnZS1nby1tb2R1bGUiPmdvIGdldCBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92MyYjNjQ7djMuOC4xPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWVkaXVtIGJsYWNrIj5HbyBNb2R1bGU8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpAQCAtMzYxLDcgKzQ4Niw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC00IHRleHQtY2VudGVyIHRleHQtYmx1ZSBmdC0xNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1nbyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPjx1PkxlYXJuIE1vcmU8L3U+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+R3JlbWxpbi1HbyBEb2N1bWVudGF0aW9uICYgUmVmZXJlbmNlPC91PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCI+CkBAIC0zOTIsNyArNTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iYWNjb3JkaW9uLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uLWJ1dHRvbiBjb2xsYXBzZWQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9IiNjb2xsYXBzZTQiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBhcmlhLWNvbnRyb2xzPSJjb2xsYXBzZTQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2NvbW11bml0eS9ncm9vdnkucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMiIGFsdD0iaW1nIj5Hcm9vdnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jb21tdW5pdHkvZ3Jvb3Z5LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0zIiBhbHQ9Ikdyb292eSBMb2dvIj5Hcm9vdnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1pbmxpbmUtYmxvY2sgbXMtNCAiPjxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3RpbmtlcnBvcC5wbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpbWctZmx1aWQgbWUtMiAiIGFsdD0iaW1nIj4gPGltZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaW1nL2NvbW11bml0eS90b29scy5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiAiIGFsdD0iaW1nIj48L2Rpdj4KQEAgLTQyMyw3ICs1NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIgbWItNCBtYi1sZy0wIGNvbC1sZy02IHRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZSBjbGFzcz0ibGFuZ3VhZ2UtZ3Jvb3Z5Ij5pbXBsZW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JnLmFwYWNoZS50aW5rZXJwb3A6Z3JlbWxpbi1ncm9vdnk6My43LjAnPC9jb2RlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JnLmFwYWNoZS50aW5rZXJwb3A6Z3JlbWxpbi1ncm9vdnk6My44LjEnPC9jb2RlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWVkaXVtIGJsYWNrIj5HcmFkbGU8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpAQCAtNDM0LDcgKzU1OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCB0ZXh0LWNlbnRlciB0ZXh0LWJsdWUgZnQtMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLWdyb292eSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIj48dT5MZWFybiBNb3JlPC91PjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIj48dT5HcmVtbGluLUdyb292eSBEb2N1bWVudGF0aW9uICYgUmVmZXJlbmNlPC91PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KQEAgLTQ0NSw3ICs1NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJhY2NvcmRpb24taGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24tYnV0dG9uIGNvbGxhcHNlZCIgdHlwZT0iYnV0dG9uIiBkYXRhLWJzLXRvZ2dsZT0iY29sbGFwc2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJzLXRhcmdldD0iI2NvbGxhcHNlNSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiIGFyaWEtY29udHJvbHM9ImNvbGxhcHNlNSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2hhc2tlbGwucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMiIGFsdD0iaW1nIj5IYXNrZWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2hhc2tlbGwucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMiIGFsdD0iSGFza2VsbCBMb2dvIj5IYXNrZWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtaW5saW5lLWJsb2NrIG1zLTQgIj48aW1nIHNyYz0iaW1nL2NvbW11bml0eS90aGlyZC1wYXJ0eS5wbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpbWctZmx1aWQgIiBhbHQ9ImltZyI+IDxpbWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9ImltZy9jb21tdW5pdHkvdG9vbHMucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIgIiBhbHQ9ImltZyI+PC9kaXY+CkBAIC01MTEsNyArNjM2LDcgQEAKICZsdDtkZXBlbmRlbmN5Jmd0OwogICAmbHQ7Z3JvdXBJZCZndDtvcmcuYXBhY2hlLnRpbmtlcnBvcCZsdDsvZ3JvdXBJZCZndDsKICAgJmx0O2FydGlmYWN0SWQmZ3Q7Z3JlbWxpbi1kcml2ZXImbHQ7L2FydGlmYWN0SWQmZ3Q7Ci0gICZsdDt2ZXJzaW9uJmd0OzMuNy4wJmx0Oy92ZXJzaW9uJmd0OworICAmbHQ7dmVyc2lvbiZndDszLjguMSZsdDsvdmVyc2lvbiZndDsKICZsdDsvZGVwZW5kZW5jeSZndDs8L2NvZGU+PC9wcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtZWRpdW0gYmxhY2siPk1hdmVuPC9wPgpAQCAtNTI0LDcgKzY0OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCB0ZXh0LWNlbnRlciB0ZXh0LWJsdWUgZnQtMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLWphdmEiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+TGVhcm4gTW9yZTwvdT48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+R3JlbWxpbi1KYXZhIERvY3VtZW50YXRpb24gJiBSZWZlcmVuY2U8L3U+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQiPgpAQCAtNTYyLDcgKzY4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImFjY29yZGlvbi1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjY29yZGlvbi1idXR0b24gY29sbGFwc2VkIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PSIjY29sbGFwc2U3IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1jb250cm9scz0iY29sbGFwc2U3Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jb21tdW5pdHkvamF2YXNjcmlwdC5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJpbWciPkphdmFzY3JpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jb21tdW5pdHkvamF2YXNjcmlwdC5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMyIgYWx0PSJKYXZhU2NyaXB0IExvZ28iPkphdmFzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1pbmxpbmUtYmxvY2sgbXMtNCAiPjxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L3RpbmtlcnBvcC5wbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpbWctZmx1aWQgbWUtMiAiIGFsdD0iaW1nIj4gPGltZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaW1nL2NvbW11bml0eS90aGlyZC1wYXJ0eS5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiAiIGFsdD0iaW1nIj4gPGltZwpAQCAtNjAxLDcgKzcyNiw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCB0ZXh0LWNlbnRlciB0ZXh0LWJsdWUgZnQtMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLWphdmFzY3JpcHQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+TGVhcm4gTW9yZTwvdT48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+R3JlbWxpbi1KYXZhU2NyaXB0IERvY3VtZW50YXRpb24gJiBSZWZlcmVuY2U8L3U+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQiPgpAQCAtNjIwLDYgKzc0NSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9jb21tdW5pdHkvYXJyb3ctcmlnaHQtY2lyY2xlLWZpbGwuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTMgcHQtMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJpbWciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZnQtMTciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGluLW1jcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ0ZXh0LWJsdWUiPmdyZW1saW4tbWNwPC9hPjogTW9kZWwgQ29udGV4dCBQcm90b2NvbCAoTUNQKSBTZXJ2ZXIgZm9yIEdyZW1saW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvY29tbXVuaXR5L2Fycm93LXJpZ2h0LWNpcmNsZS1maWxsLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0zIHB0LTEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZ0LTE3IG1iLTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlyZC1QYXJ0eSBMaWJyYXJpZXMgYW5kIFRvb2xzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgpAQCAtNzA0LDcgKzg0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTIgbWItNCBtYi1sZy0wIGNvbC1sZy02IHRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS1wbGFpbiI+ZG90bmV0IGFkZCBwYWNrYWdlIEdyZW1saW4uTmV0IC0tdmVyc2lvbiAzLjcuMDwvY29kZT48L3ByZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIGNsYXNzPSJsYW5ndWFnZS1wbGFpbiI+ZG90bmV0IGFkZCBwYWNrYWdlIEdyZW1saW4uTmV0IC0tdmVyc2lvbiAzLjguMTwvY29kZT48L3ByZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1lZGl1bSBibGFjayI+TnVHZXQ8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgpAQCAtNzE0LDcgKzg1MCw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtNCB0ZXh0LWNlbnRlciB0ZXh0LWJsdWUgZnQtMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLWRvdG5ldCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIj48dT5MZWFybiBNb3JlPC91PjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIj48dT5HcmVtbGluLk5FVCBEb2N1bWVudGF0aW9uICYgUmVmZXJlbmNlPC91PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0Ij4KQEAgLTc4MSw3ICs5MTcsNyBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im10LTQgdGV4dC1jZW50ZXIgdGV4dC1ibHVlIGZ0LTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1weXRob24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+TGVhcm4gTW9yZTwvdT48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+PHU+R3JlbWxpbi1QeXRob24gRG9jdW1lbnRhdGlvbiAmIFJlZmVyZW5jZTwvdT48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCI+CkBAIC0xMDc4LDggKzEyMTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZ0LTE3Ij4tIDxhIGNsYXNzPSJ0ZXh0LWJsdWUiIGhyZWY9Imh0dHBzOi8vd3d3LmV4YWthdC5pby8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPmV4YWthdC5pbzwvYT46IFN0YXRpYyBhbmFseXNpcyBlbmdpbmUgZm9yIFBIUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3dlcmVkIGJ5IEdyZW1saW4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPi0gPGEgY2xhc3M9InRleHQtYmx1ZSIgaHJlZj0iaHR0cHM6Ly9nZG90di5jb20vIiB0YXJnZXQ9Il9ibGFuayI+Ry5WKCk8L2E+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcuVigpIGlzIGFuIGFsbC1pbi1vbmUgR3JlbWxpbiBJREUgYW5kIGdyYXBoIHZpc3VhbGl6YXRpb24gc29mdHdhcmUgZm9yIFdpbmRvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPi0gPGEgY2xhc3M9InRleHQtYmx1ZSIgaHJlZj0iaHR0cHM6Ly9nZG90di5jb20vIiB0YXJnZXQ9Il9ibGFuayI+Z2RvdHY8L2E+OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3R2IGlzIGFuIGFsbC1pbi1vbmUgR3JlbWxpbiBJREUgYW5kIGdyYXBoIHZpc3VhbGl6YXRpb24gc29mdHdhcmUgZm9yIFdpbmRvd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjT1MgYW5kIExpbnV4LiBJdCBvZmZlcnMgcG93ZXJmdWwgR3JlbWxpbiBRdWVyeSBjb21wbGV0aW9uIGZlYXR1cmVzIGJhc2VkIG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91ciBncmFwaCBzdHJ1Y3R1cmUgYW5kIGludHVpdGl2ZSByZXN1bHRzIHZpc3VhbGl6YXRpb24gb3B0aW9ucy4gSXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlIHdpdGggQXBhY2hlIFRpbmtlclBvcC1lbmFibGVkIGdyYXBoIGRhdGFiYXNlcyBvdmVyIEdyZW1saW4gU2VydmVyCkBAIC0xMTU4LDcgKzEyOTQsNyBAQAogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imp1LWJveCI+CiAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZnQtNDAgdGV4dC1ibHVlIGJvbGQiPkpvaW4gVXM8L2gyPgogICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYm9sZCI+Sm9pbiB1cyBvbiBvdXIgRGlzY29yZCBTZXJ2ZXI8L3A+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHB2ZXd4LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtdC0zIiBhbHQ9ImltZyI+PC9hPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3RwdmV3eC5wbmciIGNsYXNzPSJpbWctZmx1aWQgbXQtMyIgYWx0PSJEaXNjb3JkIGxvZ28iPjwvYT4KICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KQEAgLTExNzQsMTEgKzEzMTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9sZCBmdC0yNSI+QXBhY2hlIFRpbmtlclBvcOKEojwvZGl2PgogICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMiBtYi00Ij5BcGFjaGUgVGlua2VyUG9w4oSiIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zIChPTEFQKS48L3A+CiAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBob3Zlci1vcC1sb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC9kaXNjb3JkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZ2l0aHViLWJveC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudHdpdGNoLnR2L2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdGNoLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdHRlci1zcXVhcmUuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3lvdXR1YmUucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL2Rpc2NvcmQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBEaXNjb3JkIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL2dpdGh1Yi1ib3guc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBHaXRIdWIiPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0Y2gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBUd2l0Y2giPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdHRlci1zcXVhcmUuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBUd2l0dGVyIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwveW91dHViZS5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIFlvdVR1YmUiPjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00IGZ0LWxpbmtzIj4KQEAgLTEyMjAsNyArMTM1Niw3IEBACiAgICAgICAgIDwvZGl2PgogICAgIDwvZGl2PgogPC9mb290ZXI+Ci08c2NyaXB0IHNyYz0ianMvanF1ZXJ5LTEuMTEuMS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LTEuMTIuNC5taW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImpzL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJqcy93b3cubWluLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJqcy9teS5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9kb2NzL3NpdGUvaG9tZS9jc3MvcHJpc20uY3NzIGIvZG9jcy9zaXRlL2hvbWUvY3NzL3ByaXNtLmNzcwppbmRleCAzNGY4Yjg1Li43ODQyMjhhIDEwMDY0NAotLS0gYS9kb2NzL3NpdGUvaG9tZS9jc3MvcHJpc20uY3NzCisrKyBiL2RvY3Mvc2l0ZS9ob21lL2Nzcy9wcmlzbS5jc3MKQEAgLTMsOCArMyw4IEBACiAgKiB0aGUgVGlua2VyUG9wIHdlYnNpdGUgc3R5bGUuCiAgKi8KIAotLyogUHJpc21KUyAxLjI3LjAKLWh0dHBzOi8vcHJpc21qcy5jb20vZG93bmxvYWQuaHRtbCN0aGVtZXM9cHJpc20tdG9tb3Jyb3cmbGFuZ3VhZ2VzPW1hcmt1cCtjc3MrY2xpa2UramF2YXNjcmlwdCtjc2hhcnArZ28rZ28tbW9kdWxlK2dyb292eStqYXZhK3B5dGhvbiAqLworLyogUHJpc21KUyAxLjMwLjAKK2h0dHBzOi8vcHJpc21qcy5jb20vZG93bmxvYWQjdGhlbWVzPXByaXNtLXRvbW9ycm93Jmxhbmd1YWdlcz1tYXJrdXArY3NzK2NsaWtlK2phdmFzY3JpcHQrY3NoYXJwK2dvK2dvLW1vZHVsZStncm9vdnkramF2YStweXRob24reG1sLWRvYyAqLwogLyoqCiAgKiBwcmlzbS5qcyB0b21vcnJvdyBuaWdodCBlaWdodGllcyBmb3IgSmF2YVNjcmlwdCwgQ29mZmVlU2NyaXB0LCBDU1MgYW5kIEhUTUwKICAqIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2tlbXBzb24vdG9tb3Jyb3ctdGhlbWUKZGlmZiAtLWdpdCBhL2RvY3Mvc2l0ZS9ob21lL2Rvd25sb2FkLmh0bWwgYi9kb2NzL3NpdGUvaG9tZS9kb3dubG9hZC5odG1sCmluZGV4IGMxNDI5MGEuLjU5MTA1ZjQgMTAwNjQ0Ci0tLSBhL2RvY3Mvc2l0ZS9ob21lL2Rvd25sb2FkLmh0bWwKKysrIGIvZG9jcy9zaXRlL2hvbWUvZG93bmxvYWQuaHRtbApAQCAtMjIsMTAgKzIyLDI2IEBACiAgICAgICAgIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgc2hyaW5rLXRvLWZpdD1ubyI+CisgICAgICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIGZvbGxvdyI+CiAgICAgICAgIDxsaW5rIGhyZWY9ImltZy9mYXZpY29uLnBuZyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPgotICAgICAgICA8dGl0bGU+QXBhY2hlIFRpbmtlclBvcDogRG93bmxvYWRzPC90aXRsZT4KLSAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Ci0gICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgorICAgICAgICA8dGl0bGU+RG93bmxvYWQgR3JhcGggQ29tcHV0aW5nIFRvb2xzIHwgQXBhY2hlIFRpbmtlclBvcDwvdGl0bGU+CisgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJEb3dubG9hZCBUaW5rZXJQb3AgZ3JhcGggdG9vbHMgaW5jbHVkaW5nIEdyZW1saW4gQ29uc29sZSwgU2VydmVyLCBhbmQgc291cmNlIGNvZGUuIEdldCBzdGFydGVkIHdpdGggdGhlIGxlYWRpbmcgZ3JhcGggZnJhbWV3b3JrIGZvciB5b3VyIGFwcGxpY2F0aW9ucy4iPgorICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iZG93bmxvYWQsIFRpbmtlclBvcCwgR3JlbWxpbiwgZ3JhcGggdG9vbHMiPgorICAgICAgICA8bGluayByZWw9ImNhbm9uaWNhbCIgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb3dubG9hZC5odG1sIj4KKworICAgICAgICA8IS0tIE9wZW4gR3JhcGggLyBGYWNlYm9vayAtLT4KKyAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgorICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWwiPgorICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRvd25sb2FkIEdyYXBoIENvbXB1dGluZyBUb29scyB8IEFwYWNoZSBUaW5rZXJQb3AiPgorICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkRvd25sb2FkIFRpbmtlclBvcCBncmFwaCB0b29scyBpbmNsdWRpbmcgR3JlbWxpbiBDb25zb2xlLCBTZXJ2ZXIsIGFuZCBzb3VyY2UgY29kZS4gR2V0IHN0YXJ0ZWQgd2l0aCB0aGUgbGVhZGluZyBncmFwaCBmcmFtZXdvcmsgZm9yIHlvdXIgYXBwbGljYXRpb25zLiI+CisgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9pbWcvZG93bmxvYWQvZG93bmxvYWRzLWhlYWRlci5wbmciPgorCisgICAgICAgIDwhLS0gVHdpdHRlciAtLT4KKyAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpjYXJkIiBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIj4KKyAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAYXBhY2hldGlua2VycG9wIj4KKyAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0iRG93bmxvYWQgR3JhcGggQ29tcHV0aW5nIFRvb2xzIHwgQXBhY2hlIFRpbmtlclBvcCI+CisgICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6ZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkRvd25sb2FkIFRpbmtlclBvcCBncmFwaCB0b29scyBpbmNsdWRpbmcgR3JlbWxpbiBDb25zb2xlLCBTZXJ2ZXIsIGFuZCBzb3VyY2UgY29kZS4gR2V0IHN0YXJ0ZWQgd2l0aCB0aGUgbGVhZGluZyBncmFwaCBmcmFtZXdvcmsgZm9yIHlvdXIgYXBwbGljYXRpb25zLiI+CisgICAgICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL2Rvd25sb2FkL2Rvd25sb2Fkcy1oZWFkZXIucG5nIj4KICAgICAgICAgPGxpbmsgaHJlZj0iY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPgogICAgICAgICA8bGluayBocmVmPSJjc3MvZm9udC1hd2Vzb21lLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ii8+CiAgICAgICAgIDxsaW5rIGhyZWY9ImNzcy9jdXN0b21lLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KQEAgLTQ5LDYgKzY1LDg1IEBACiAgICAgICAgICAgICB9KSgpOwogICAgICAgICA8L3NjcmlwdD4KICAgICAgICAgPCEtLSBFbmQgTWF0b21vIENvZGUgLS0+CisKKyAgICAgICAgPCEtLSBTdHJ1Y3R1cmVkIERhdGEgLyBKU09OLUxEIC0tPgorICAgICAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPgorICAgICAgICB7CisgICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCisgICAgICAgICAgIkBncmFwaCI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlNvZnR3YXJlQXBwbGljYXRpb24iLAorICAgICAgICAgICAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAgICAgImFwcGxpY2F0aW9uQ2F0ZWdvcnkiOiAiR3JhcGhEYXRhYmFzZSIsCisgICAgICAgICAgICAgICJvcGVyYXRpbmdTeXN0ZW0iOiAiSmF2YSAxMS8xNyIsCisgICAgICAgICAgICAgICJzb2Z0d2FyZVZlcnNpb24iOiAiMy44LjEiLAorICAgICAgICAgICAgICAiZG93bmxvYWRVcmwiOiAiaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy44LjEvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLWNvbnNvbGUtMy44LjEtYmluLnppcCIsCisgICAgICAgICAgICAgICJsaWNlbnNlIjogImh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiLAorICAgICAgICAgICAgICAib2ZmZXJzIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJPZmZlciIsCisgICAgICAgICAgICAgICAgInByaWNlIjogIjAiLAorICAgICAgICAgICAgICAgICJwcmljZUN1cnJlbmN5IjogIlVTRCIKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFwYWNoZSBUaW5rZXJQb3AgaXMgYSBncmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGZvciBib3RoIGdyYXBoIGRhdGFiYXNlcyAoT0xUUCkgYW5kIGdyYXBoIGFuYWx5dGljIHN5c3RlbXMgKE9MQVApLiIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJCcmVhZGNydW1iTGlzdCIsCisgICAgICAgICAgICAgICJpdGVtTGlzdEVsZW1lbnQiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6IDEsCisgICAgICAgICAgICAgICAgICAibmFtZSI6ICJIb21lIiwKKyAgICAgICAgICAgICAgICAgICJpdGVtIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6IDIsCisgICAgICAgICAgICAgICAgICAibmFtZSI6ICJEb3dubG9hZHMiLAorICAgICAgICAgICAgICAgICAgIml0ZW0iOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb3dubG9hZC5odG1sIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIkZBUVBhZ2UiLAorICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG93bmxvYWQuaHRtbCNmYXFwYWdlIiwKKyAgICAgICAgICAgICAgIm1haW5FbnRpdHkiOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICJuYW1lIjogIldoYXQgYXJlIHRoZSBzeXN0ZW0gcmVxdWlyZW1lbnRzIGZvciBydW5uaW5nIFRpbmtlclBvcCB0b29scz8iLAorICAgICAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiQW5zd2VyIiwKKyAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiR3JlbWxpbiBDb25zb2xlIGFuZCBHcmVtbGluIFNlcnZlciBhcmUgY29tcGF0aWJsZSB3aXRoIEphdmEgOC8xMS4gRW5zdXJlIHlvdSBoYXZlIGEgY29tcGF0aWJsZSBKYXZhIHZlcnNpb24gaW5zdGFsbGVkIGJlZm9yZSBkb3dubG9hZGluZy4iCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAorICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiV2hpY2ggVGlua2VyUG9wIHZlcnNpb24gc2hvdWxkIEkgZG93bmxvYWQ/IiwKKyAgICAgICAgICAgICAgICAgICJhY2NlcHRlZEFuc3dlciI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCisgICAgICAgICAgICAgICAgICAgICJ0ZXh0IjogIkZvciBtb3N0IHVzZXJzLCB3ZSByZWNvbW1lbmQgdGhlIGxhdGVzdCBzdGFibGUgcmVsZWFzZS4iCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiUXVlc3Rpb24iLAorICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSG93IGRvIEkgdmVyaWZ5IHRoZSBpbnRlZ3JpdHkgb2YgbXkgZG93bmxvYWQ/IiwKKyAgICAgICAgICAgICAgICAgICJhY2NlcHRlZEFuc3dlciI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCisgICAgICAgICAgICAgICAgICAgICJ0ZXh0IjogIllvdSBjYW4gdmVyaWZ5IGRvd25sb2FkcyB1c2luZyBQR1Agc2lnbmF0dXJlcyBvciBTSEE1MTIgY2hlY2tzdW1zLiBGaXJzdCBkb3dubG9hZCB0aGUgS0VZUyBmaWxlIGZyb20gdGhlIEFwYWNoZSBkaXN0cmlidXRpb24gZGlyZWN0b3J5LCB0aGVuIHZlcmlmeSB1c2luZyBjb21tYW5kcyBsaWtlICdncGcgLS1pbXBvcnQgS0VZUycgZm9sbG93ZWQgYnkgJ2dwZyAtLXZlcmlmeSBbZG93bmxvYWQtZmlsZV0uYXNjIFtkb3dubG9hZC1maWxlXScuIgorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFyZSB0aGVyZSBwYWNrYWdlZCBhcnRpZmFjdHMgYXZhaWxhYmxlIGluIG90aGVyIHJlcG9zaXRvcmllcz8iLAorICAgICAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiQW5zd2VyIiwKKyAgICAgICAgICAgICAgICAgICAgInRleHQiOiAiWWVzLCBUaW5rZXJQb3AgYXJ0aWZhY3RzIGFyZSBhdmFpbGFibGUgaW4gRG9ja2VyLCBNYXZlbiBDZW50cmFsLCBQeVBJLCBucG0sIGFuZCBOdUdldC4gTGFuZ3VhZ2Utc3BlY2lmaWMgZHJpdmVycyBjYW4gYmUgaW5zdGFsbGVkIHRocm91Z2ggdGhlc2UgcmVzcGVjdGl2ZSBwYWNrYWdlIG1hbmFnZXJzLiIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CiAgICAgPC9oZWFkPgogICAgIDxib2R5PgogICAgIDwhLS0gaGVhZGVyIC0tPgpAQCAtNTcsNyArMTUyLDcgQEAKICAgICAgICAgICAgIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnICAiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9ImluZGV4Lmh0bWwiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9sb2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9sb2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJBcGFjaGUgVGlua2VyUG9wIEdyYXBoIENvbXB1dGluZyBGcmFtZXdvcmsgTG9nbyI+CiAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIKQEAgLTEzMyw3ICsyMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2tybGF3cmVuY2UuZ2l0aHViLmlvL2dyYXBoLyI+Qm9vazogUHJhY3RpY2FsIEdyZW1saW48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cDovL3NxbDJncmVtbGluLmNvbS8iPlNRTDJHcmVtbGluPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ka3VwcGl0ei9zcWwyZ3JlbWxpbiI+U1FMMkdyZW1saW48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CkBAIC0xNTAsNiArMjQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AvIj48aW1nIHNyYz0iaW1nL2ppcmEtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPklzc3VlIFRyYWNrZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvIj48aW1nIHNyYz0iaW1nL2dpdGh1Yi1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+R2l0SHViPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LnR3aXRjaC50di9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHdpdGNoLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Ud2l0Y2g8L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL2xpbmtlZGluLWxvZ28uc3ZnIiBjbGFzcz0ibmF2LWljb24iLz5MaW5rZWRJbjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90d2l0dGVyLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Ud2l0dGVyPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcveW91dHViZS1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+WW91VHViZTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxociBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9saT4KQEAgLTE4NSw3ICsyODEsNyBAQAogICAgICAgICAKICAgICAgICAgPCEtLSBoZXJvIC0tPgogICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIgaGVyby1pbm5lciI+Ci0gICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2JnLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB3LTEwMCIgYWx0PSJpbWciPgorICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9iZy5wbmciIGNsYXNzPSJpbWctZmx1aWQgdy0xMDAiIGFsdD0iQXBhY2hlIFRpbmtlclBvcCBHcmFwaCBEYXRhYmFzZSBEb3dubG9hZCBCYWNrZ3JvdW5kIj4KICAgICAgICAgPC9kaXY+CiAKICAgICAgICAgPCEtLSBDb250ZW50IC0tPgpAQCAtMjA1LDUzICszMDEsNzMgQEAKICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciI+CiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIGNvbC1tZC02IG1iLTIgbWItbGctMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2ljb24ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj4gPHNwYW4gY2xhc3M9ImJvbGQiPjMuNy4wPC9zcGFuPiAobGF0ZXN0LCBzdGFibGUpIDxwIGNsYXNzPSJkLWlubGluZS1ibG9jayBtcy00IG1iLTAiPjMxLUp1bHktMjAyMzwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvZG93bmxvYWQvaWNvbi5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJpbWciPiA8c3BhbiBjbGFzcz0iYm9sZCI+My44LjE8L3NwYW4+IChsYXRlc3QsIHN0YWJsZSkgPHAgY2xhc3M9ImQtaW5saW5lLWJsb2NrIG1zLTQgbWItMCI+MS1BcHJpbC0yMDI2PC9wPgogICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTQgY29sLW1kLTYgbWItMiBtYi1sZy0wIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWJsdWUgbWItMCI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvYmxvYi8zLjcuMC9DSEFOR0VMT0cuYXNjaWlkb2MjcmVsZWFzZS0zLTctMCI+cmVsZWFzZSBub3RlczwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy43LjAvdXBncmFkZS8jX3RpbmtlcnBvcF8zXzctMCI+dXBncmFkZTwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy43LjAvIj5kb2N1bWVudGF0aW9uPC9hPiB8IDxhIGhyZWY9IiMiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiNjb250cmlidXRvcnMtM183XzAiPmNvbnRyaWJ1dG9yczwvYT48L3A+CisgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0idGV4dC1ibHVlIG1iLTAiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2Jsb2IvMy44LjEvQ0hBTkdFTE9HLmFzY2lpZG9jI3JlbGVhc2UtMy04LTEiPnJlbGVhc2Ugbm90ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuOC4xL3VwZ3JhZGUvI190aW5rZXJwb3BfM184XzEiPnVwZ3JhZGU8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuOC4xLyI+ZG9jdW1lbnRhdGlvbjwvYT4gfCA8YSBocmVmPSIjIiBkYXRhLWJzLXRvZ2dsZT0ibW9kYWwiIGRhdGEtYnMtdGFyZ2V0PSIjY29udHJpYnV0b3JzLTNfOF8xIj5jb250cmlidXRvcnM8L2E+PC9wPgogICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTUgY29sLW1kLTEyIG1iLTIgbWItbGctMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjcuMC9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tY29uc29sZS0zLjcuMC1iaW4uemlwIj48aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2J4LWRvd25sb2FkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9ImltZyI+R3JlbWxpbiBDb25zb2xlPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tdGhlbWUgbWUtMiIgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy43LjAvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLXNlcnZlci0zLjcuMC1iaW4uemlwIj48aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2J4LWRvd25sb2FkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9ImltZyI+R3JlbWxpbiBTZXJ2ZXI8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjcuMC9hcGFjaGUtdGlua2VycG9wLTMuNy4wLXNyYy56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5Tb3VyY2U8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjguMS9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tY29uc29sZS0zLjguMS1iaW4uemlwIj48aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2J4LWRvd25sb2FkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9ImltZyI+R3JlbWxpbiBDb25zb2xlPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tdGhlbWUgbWUtMiIgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy44LjEvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLXNlcnZlci0zLjguMS1iaW4uemlwIj48aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2J4LWRvd25sb2FkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9ImltZyI+R3JlbWxpbiBTZXJ2ZXI8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjguMS9hcGFjaGUtdGlua2VycG9wLTMuOC4xLXNyYy56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5Tb3VyY2U8L2E+CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTMgY29sLW1kLTYgbWItMiBtYi1sZy0wIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvZG93bmxvYWQvaWNvbi5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJpbWciPiA8c3BhbiBjbGFzcz0iYm9sZCI+My42LjU8L3NwYW4+IChtYWludGVuYW5jZSkgPHAgY2xhc3M9ImQtaW5saW5lLWJsb2NrIG1zLTQgbWItMCI+MzEtSnVseS0yMDIzPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pY29uLnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9ImltZyI+IDxzcGFuIGNsYXNzPSJib2xkIj4zLjcuNjwvc3Bhbj4gKG1haW50ZW5hbmNlKSA8cCBjbGFzcz0iZC1pbmxpbmUtYmxvY2sgbXMtNCBtYi0wIj4xLUFwcmlsLTIwMjY8L3A+CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTQgY29sLW1kLTYgbWItMiBtYi1sZy0wIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWJsdWUgbWItMCI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvYmxvYi8zLjYuNS9DSEFOR0VMT0cuYXNjaWlkb2MjcmVsZWFzZS0zLTYtNSI+cmVsZWFzZSBub3RlczwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy42LjUvdXBncmFkZS8jX3RpbmtlcnBvcF8zXzZfNSI+dXBncmFkZTwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy42LjUvIj5kb2N1bWVudGF0aW9uPC9hPiB8IDxhIGhyZWY9IiMiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiNjb250cmlidXRvcnMtM182XzUiPmNvbnRyaWJ1dG9yczwvYT48L3A+Ci0gICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctNSBjb2wtbWQtMTIgbWItMiBtYi1sZy0yIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzMuNi41L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1jb25zb2xlLTMuNi41LWJpbi56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5HcmVtbGluIENvbnNvbGU8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjYuNS9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tc2VydmVyLTMuNi41LWJpbi56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5HcmVtbGluIFNlcnZlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzMuNi41L2FwYWNoZS10aW5rZXJwb3AtMy42LjUtc3JjLnppcCI+PGltZyBzcmM9ImltZy9kb3dubG9hZC9ieC1kb3dubG9hZC5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJpbWciPlNvdXJjZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTQgY29sLW1kLTYgbWItMiBtYi1sZy0wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWJsdWUgbWItMCI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvYmxvYi8zLjcuNi9DSEFOR0VMT0cuYXNjaWlkb2MjcmVsZWFzZS0zLTctNiI+cmVsZWFzZSBub3RlczwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy43LjYvdXBncmFkZS8jX3RpbmtlcnBvcF8zXzdfNiI+dXBncmFkZTwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy43LjYvIj5kb2N1bWVudGF0aW9uPC9hPiB8IDxhIGhyZWY9IiMiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiNjb250cmlidXRvcnMtM183XzYiPmNvbnRyaWJ1dG9yczwvYT48L3A+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctNSBjb2wtbWQtMTIgbWItMiBtYi1sZy0wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzMuNy42L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1jb25zb2xlLTMuNy42LWJpbi56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5HcmVtbGluIENvbnNvbGU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjcuNi9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tc2VydmVyLTMuNy42LWJpbi56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5HcmVtbGluIFNlcnZlcjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzMuNy42L2FwYWNoZS10aW5rZXJwb3AtMy43LjYtc3JjLnppcCI+PGltZyBzcmM9ImltZy9kb3dubG9hZC9ieC1kb3dubG9hZC5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJpbWciPlNvdXJjZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IGQtZmxleCBtdC00IG10LW1kLTUiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIgbWItM3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC0yNSBibGFjayBib2xkIj5CZXRhIFJlbGVhc2VzPC9oMj4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiPgorICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMyBtYi1tZC0zIG1lZGl1bSBibGFjayI+QmV0YSByZWxlYXNlcyBvZmZlciBhIHB1YmxpYyBwcmV2aWV3IG9mIGFuIHVwY29taW5nIGZ1bGwgcmVsZWFzZS4gU29tZSBmZWF0dXJlcyBtYXkgYmUgbWlzc2luZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyBtYXkgYmUgc3ViamVjdCB0byBjaGFuZ2UgaW4gZnV0dXJlIGJldGFzIG9yIGEgZmluYWwgcmVsZWFzZS48L3A+CiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIGNvbC1tZC02IG1iLTIgbWItbGctMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2ljb24ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj4gPHNwYW4gY2xhc3M9ImJvbGQiPjMuNS43PC9zcGFuPiAobWFpbnRlbmFuY2UpIDxwIGNsYXNzPSJkLWlubGluZS1ibG9jayBtcy00IG1iLTAiPjMxLUp1bHktMjAyMzwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvZG93bmxvYWQvaWNvbi5wbmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJUaW5rZXJQb3AgVmVyc2lvbiBJY29uIj4gPHNwYW4gY2xhc3M9ImJvbGQiPjQuMC4wLWJldGEuMjwvc3Bhbj4gKHByZS1yZWxlYXNlKSA8cCBjbGFzcz0iZC1pbmxpbmUtYmxvY2sgbXMtNCBtYi0wIj4xLUFwcmlsLTIwMjY8L3A+CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTQgY29sLW1kLTYgbWItMiBtYi1sZy0wIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWJsdWUgbWItMCI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvYmxvYi8zLjUuNy9DSEFOR0VMT0cuYXNjaWlkb2MjcmVsZWFzZS0zLTUtNyI+cmVsZWFzZSBub3RlczwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy41LjcvdXBncmFkZS8jX3RpbmtlcnBvcF8zXzVfNyI+dXBncmFkZTwvYT4gfCA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy41LjcvIj5kb2N1bWVudGF0aW9uPC9hPiB8IDxhIGhyZWY9IiMiIGRhdGEtYnMtdG9nZ2xlPSJtb2RhbCIgZGF0YS1icy10YXJnZXQ9IiNjb250cmlidXRvcnMtM181XzciPmNvbnRyaWJ1dG9yczwvYT48L3A+Ci0gICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctNSBjb2wtbWQtMTIgbWItMiBtYi1sZy0wIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzMuNS43L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1jb25zb2xlLTMuNS43LWJpbi56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5HcmVtbGluIENvbnNvbGU8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjUuNy9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tc2VydmVyLTMuNS43LWJpbi56aXAiPjxpbWcgc3JjPSJpbWcvZG93bmxvYWQvYngtZG93bmxvYWQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj5HcmVtbGluIFNlcnZlcjwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzMuNS43L2FwYWNoZS10aW5rZXJwb3AtMy41Ljctc3JjLnppcCI+PGltZyBzcmM9ImltZy9kb3dubG9hZC9ieC1kb3dubG9hZC5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJpbWciPlNvdXJjZTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTQgY29sLW1kLTYgbWItMiBtYi1sZy0wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJ0ZXh0LWJsdWUgbWItMCI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvYmxvYi80LjAuMC1iZXRhLjIvQ0hBTkdFTE9HLmFzY2lpZG9jI3JlbGVhc2UtNC0wLTAtYmV0YS0yIj5yZWxlYXNlIG5vdGVzPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy80LjAuMC1iZXRhLjIvdXBncmFkZS8jX3RpbmtlcnBvcF80XzBfMF9iZXRhXzIiPnVwZ3JhZGU8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzQuMC4wLWJldGEuMi8iPmRvY3VtZW50YXRpb248L2E+IHwgPGEgaHJlZj0iIyIgZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI2NvbnRyaWJ1dG9ycy00XzBfMF9iZXRhXzIiPmNvbnRyaWJ1dG9yczwvYT48L3A+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctNSBjb2wtbWQtMTIgbWItMiBtYi1sZy0yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzQuMC4wLWJldGEuMi9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tY29uc29sZS00LjAuMC1iZXRhLjItYmluLnppcCI+PGltZyBzcmM9ImltZy9kb3dubG9hZC9ieC1kb3dubG9hZC5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJEb3dubG9hZCBJY29uIj5HcmVtbGluIENvbnNvbGU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBtZS0yIiBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC80LjAuMC1iZXRhLjIvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLXNlcnZlci00LjAuMC1iZXRhLjItYmluLnppcCI+PGltZyBzcmM9ImltZy9kb3dubG9hZC9ieC1kb3dubG9hZC5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJEb3dubG9hZCBJY29uIj5HcmVtbGluIFNlcnZlcjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJidG4gYnRuLXRoZW1lIG1lLTIiIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5sdWEvdGlua2VycG9wLzQuMC4wLWJldGEuMi9hcGFjaGUtdGlua2VycG9wLTQuMC4wLWJldGEuMi1zcmMuemlwIj48aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2J4LWRvd25sb2FkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9IkRvd25sb2FkIEljb24iPlNvdXJjZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtNCBtdC1tZC01Ij4KICAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZnQtMjUgYmxhY2sgYm9sZCBtYi00Ij5BcmNoaXZlZCBSZWxlYXNlczwvaDI+CiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0zIGNvbC1tZC02IG1iLTIgbWItbGctMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2Rvd25sb2FkL2ljb24ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgIGlkPSJkcm9wZG93bkFyY2hpdmVzIiBjbGFzcz0iZm9ybS1zZWxlY3QgZC1pbmxpaW5lLWJsb2NrIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPjMuNi40ICgxMi1NYXktMjAyMyk8L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZD0ic2VsZWN0ZWQiPjMuOC4wICgxMi1Ob3ZlbWJlci0yMDI1KTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPjMuNy41ICgxMi1Ob3ZlbWJlci0yMDI1KTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPjMuNy40ICgwMS1BdWd1c3QtMjAyNSk8L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4zLjcuMyAoMjMtT2N0b2Jlci0yMDI0KTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPjMuNy4yICg4LUFwcmlsLTIwMjQpPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My43LjEgKDIwLU5vdmVtYmVyLTIwMjMpPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My43LjAgKDMxLUp1bHktMjAyMyk8L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4zLjYuOCAoMjMtT2N0b2Jlci0yMDI0KTwvb3B0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPjMuNi43ICg4LUFwcmlsLTIwMjQpPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My42LjYgKDIwLU5vdmVtYmVyLTIwMjMpPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My42LjUgKDMxLUp1bHktMjAyMyk8L29wdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4zLjYuNCAoMTItTWF5LTIwMjMpPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My42LjMgKDEtTWF5LTIwMjMpPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My42LjIgKDE2LUphbnVhcnktMjAyMyk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4zLjYuMSAoMTgtSnVseS0yMDIyKTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPjMuNi4wICg0LUFwcmlsLTIwMjIpPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My41LjggKDIwLU5vdmVtYmVyLTIwMjMpPC9vcHRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+My41LjcgKDMxLUp1bHktMjAyMyk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4zLjUuNiAoMS1NYXktMjAyMyk8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4zLjUuNSAoMTYtSmFudWFyeS0yMDIzKTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPjMuNS40ICgxOC1KdWx5LTIwMjIpPC9vcHRpb24+CkBAIC0zMzAsMjAgKzQ0NiwyMCBAQAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0xMSBjb2wtbWQtMTIiPgogICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvLWJveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggbWItMyBhbGlnbi1pdGVtcy1zdGFydCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pbmZvcm1hdGlvbi1jaXJjbGUtb3V0bGluZS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiBwdC0xIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pbmZvcm1hdGlvbi1jaXJjbGUtb3V0bGluZS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiBwdC0xIiBhbHQ9IkluZm9ybWF0aW9uIEljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZW1saW4gQ29uc29sZSBhbmQgR3JlbWxpbiBTZXJ2ZXIgYXJlIGNvbXBhdGlibGUgd2l0aCBKYXZhIDExLzE3LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggbWItMyBhbGlnbi1pdGVtcy1zdGFydCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pbmZvcm1hdGlvbi1jaXJjbGUtb3V0bGluZS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiBwdC0xIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pbmZvcm1hdGlvbi1jaXJjbGUtb3V0bGluZS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiBwdC0xIiBhbHQ9IkluZm9ybWF0aW9uIEljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVwZ3JhZGUgZG9jdW1lbnRhdGlvbiB3YXMgb25seSBpbnRyb2R1Y2VkIGF0IDMuMS4xLWluY3ViYXRpbmcgd2hpY2ggaXMgd2h5IHRoZXJlIGFyZSBubyAidXBncmFkZSIgbGlua3MgaW4gdmVyc2lvbnMgcHJpb3IgdG8gdGhhdCBvbmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIAogICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4ICBhbGlnbi1pdGVtcy1zdGFydCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pbmZvcm1hdGlvbi1jaXJjbGUtb3V0bGluZS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiBwdC0xIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9kb3dubG9hZC9pbmZvcm1hdGlvbi1jaXJjbGUtb3V0bGluZS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiBwdC0xIiBhbHQ9IkluZm9ybWF0aW9uIEljb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFnZSBsaXN0cyBvZmZpY2lhbCBBcGFjaGUgcmVsZWFzZXMgb25seS4gVGlua2VyUG9wIG9jY2FzaW9uYWxseSBwcm9kdWNlcyB1bm9mZmljaWFsIGJpbmFyeSByZWxlYXNlIGNhbmRpZGF0ZXMgKGRlbm90ZWQgYnkgdGhlIHN1ZmZpeCAiLVJDIikgd2hpY2ggYXJlIE5PVCBwcm9tb3RlZCBvciBhbm5vdW5jZWQgYXMgYWN0dWFsIHJlbGVhc2UgdmVyc2lvbnMuIFN1Y2ggcmVsZWFzZXMgYXJlIGZvciBlYXJseSBkZXZlbG9wbWVudCBhbmQgZXZhbHVhdGlvbiBwdXJwb3NlcyBvbmx5LiBUaGV5IGFyZSBub3Qgc3VpdGFibGUgZm9yIHByb2R1Y3Rpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkBAIC0zODEsMTEgKzQ5NywxMSBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1sYWJlbD0iUmVwb3NpdG9yeSIgY2xhc3M9ImJvbGQiPkdvIE1vZHVsZTwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJSZWNvbW1lbmRlZCBSdW50aW1lIj5HbyAxLjI0PC90ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtbGFiZWw9IlJlY29tbWVuZGVkIFJ1bnRpbWUiPkdvIDEuMjU8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1sYWJlbD0iQXJ0aWZhY3RzIj48YSBocmVmPSJodHRwczovL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMiIGNsYXNzPSJ0ZXh0LWJsdWUiPmdyZW1saW4tZ288L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtbGFiZWw9IiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvIGdldCBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92MyYjNjQ7djMuNy40CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28gZ2V0IGdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzJiM2NDt2My44LjEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CkBAIC00MDAsNyArNTE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7ZGVwZW5kZW5jeT4gPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyAmbHQ7Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcCZsdDsvZ3JvdXBJZD4gPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyAmbHQ7YXJ0aWZhY3RJZD5ncmVtbGluLWRyaXZlciZsdDsvYXJ0aWZhY3RJZD4gPGJyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7ICAmbHQ7dmVyc2lvbj4zLjcuNCZsdDsvdmVyc2lvbj4gPGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7ICAmbHQ7dmVyc2lvbj4zLjguMSZsdDsvdmVyc2lvbj4gPGJyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdDsvZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CkBAIC00MDksMTAgKzUyNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJSZXBvc2l0b3J5IiBjbGFzcz0iYm9sZCI+bnBtPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJSZWNvbW1lbmRlZCBSdW50aW1lIj5Ob2RlLmpzIDIwPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJBcnRpZmFjdHMiPjxhIGhyZWY9Imh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2dyZW1saW4iIGNsYXNzPSJ0ZXh0LWJsdWUiPmdyZW1saW4gIDwvYT4gPGJyPiA8YSBocmVmPSJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGludCIgY2xhc3M9InRleHQtYmx1ZSI+Z3JlbWxpbnQgPC9hPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1sYWJlbD0iQXJ0aWZhY3RzIj48YSBocmVmPSJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGluIiBjbGFzcz0idGV4dC1ibHVlIj5ncmVtbGluICA8L2E+IDxicj4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZ3JlbWxpbnQiIGNsYXNzPSJ0ZXh0LWJsdWUiPmdyZW1saW50IDwvYT4gPGJyPiA8YSBocmVmPSJodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGluLW1jcCIgY2xhc3M9InRleHQtYmx1ZSI+Z3JlbWwtbWNwIDwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtbGFiZWw9IiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib3gxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wbSBpIGdyZW1saW4gPGJyPiBucG0gaSBncmVtbGludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnBtIGkgZ3JlbWxpbiA8YnIvPiBucG0gaSBncmVtbGludCA8YnIvPiBucG0gaSBncmVtbGluLW1jcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpAQCAtNDIzLDE0ICs1MzksMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJBcnRpZmFjdHMiPjxhIGhyZWY9Imh0dHBzOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9HcmVtbGluLk5ldC8iIGNsYXNzPSJ0ZXh0LWJsdWUiPkdyZW1saW4uTmV0IDwvYT4gPGJyPiA8YSBocmVmPSJodHRwczovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvR3JlbWxpbi5OZXQuVGVtcGxhdGUvIiBjbGFzcz0idGV4dC1ibHVlIj5HcmVtbGluLk5ldC5UZW1wbGF0ZSA8L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdG5ldCBhZGQgcGFja2FnZSBHcmVtbGluLk5ldCAtLXZlcnNpb24gMy43LjQgPGJyPmRvdG5ldCBhZGQgcGFja2FnZSBHcmVtbGluLk5ldC50ZW1wbGF0ZSAtLXZlcnNpb24gMy43LjQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90bmV0IGFkZCBwYWNrYWdlIEdyZW1saW4uTmV0IC0tdmVyc2lvbiAzLjguMSA8YnI+ZG90bmV0IGFkZCBwYWNrYWdlIEdyZW1saW4uTmV0LnRlbXBsYXRlIC0tdmVyc2lvbiAzLjguMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1sYWJlbD0iUmVwb3NpdG9yeSIgY2xhc3M9ImJvbGQiPlB5UEk8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1sYWJlbD0iUmVjb21tZW5kZWQgUnVudGltZSI+UHl0aG9uIDMuOTwvdGQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJSZWNvbW1lbmRlZCBSdW50aW1lIj5QeXRob24gMy4xMDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWxhYmVsPSJBcnRpZmFjdHMiPjxhIGhyZWY9Imh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvZ3JlbWxpbnB5dGhvbi8iIGNsYXNzPSJ0ZXh0LWJsdWUiPmdyZW1saW5weXRob24gPC9hPiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1sYWJlbD0iIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+CkBAIC00OTQsNiArNjEwLDM2OCBAQAogCiAgICAKICAgICA8IS0tIENvbnRyaWJ1dG9yIE1vZGFscyAtLT4KKworICAgIDwhLS0gNC4wLjAtYmV0YS4yIC0tPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjb250cmlidXRvcnMtNF8wXzBfYmV0YV8yIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibW9kYWwtdGl0bGUgYm9sZCBibGFjayBtYi0yICI+NC4wLjAtYmV0YS4yPC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBZYW5nIFhpYTwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDQuMC4wLWJldGEuMS4uNC4wLjAtYmV0YS4yCisgICA0MTYJU3RlcGhlbiBNYWxsZXR0ZQorICAgMTU1CUNvbGUgR3JlZXIKKyAgIDEwNAlZYW5nIFhpYQorICAgIDgxCUFuZHJlYSBDaGlsZAorICAgIDc1CUtlbiBIdQorICAgIDE3CWRlcGVuZGFib3RbYm90XQorICAgIDExCWtpcmlsbC1zdGVwYW5pc2hpbgorICAgICA2CUZsb3JhIEppbgorICAgICA2CVBldGVyIFRyaWJlCisgICAgIDQJQW5kcmlpIExvbWFraW4KKyAgICAgMwlWYWxlbnR5biBLYWhhbWx5aworICAgICAzCW5ubXZhCisgICAgIDIJQ2xlbWVudCBkZSBHcm9jCisgICAgIDIJRFIxTjAKKyAgICAgMglKYW1lcyBUaG9tcHNvbgorICAgICAyCUt5bGVCb3llcgorICAgICAyCVZhaWJoYXYgTWFsaG90cmEKKyAgICAgMQlBbGV4ZXkgVGVtbmlrb3YKKyAgICAgMQlBbmljYWFPdk8KKyAgICAgMQlEeWxhbiBXZXJuZXItTWVpZXIKKyAgICAgMQlIYWtreTU0CisgICAgIDEJSG9uZ2ppYW5nIFpoYW5nCisgICAgIDEJSHViZXJ0eSBYYXZpZXIKKyAgICAgMQlKb3NodWEgU2hpbmF2aWVyCisgICAgIDEJS2FuZ3dlaSBaaHUKKyAgICAgMQlOZWVsIFNoYWgKKyAgICAgMQlQZXRyIExhbmdyCisgICAgIDEJUHJhdGFwIE5hcnJhCisgICAgIDEJUHJpdGFtIEthZGFtCisgICAgIDEJUm9pIE1lbmFzaGUKKyAgICAgMQlTY2htaWR0CisgICAgIDEJU2ltb24gT2xzZW4KKyAgICAgMQlqb2Utc3RhaW5rZS1nZG90djwvY29kZT48L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDwhLS0gMy44LjEgLS0+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzhfMSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjMuOC4xPC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBZYW5nIFhpYTwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDMuOC4wLi4zLjguMQorICAgIDc2CVN0ZXBoZW4gTWFsbGV0dGUKKyAgICAxNglDb2xlIEdyZWVyCisgICAgMTUJWWFuZyBYaWEKKyAgICAxMwlLZW4gSHUKKyAgICAgNQlkZXBlbmRhYm90W2JvdF0KKyAgICAgNQlraXJpbGwtc3RlcGFuaXNoaW4KKyAgICAgMglEUjFOMAorICAgICAxCUFuZHJlYSBDaGlsZAorICAgICAxCU5lZWwgU2hhaAorICAgICAxCVByYXRhcCBOYXJyYTwvY29kZT48L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDwhLS0gMy43LjYgLS0+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzdfNiIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjMuNy42PC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBZYW5nIFhpYTwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDMuNy41Li4zLjcuNgorICAgIDI5CVN0ZXBoZW4gTWFsbGV0dGUKKyAgICAgNglZYW5nIFhpYQorICAgICA1CUtlbiBIdQorICAgICA1CWRlcGVuZGFib3RbYm90XQorICAgICA1CWtpcmlsbC1zdGVwYW5pc2hpbgorICAgICA0CUNvbGUgR3JlZXIKKyAgICAgMQlOZWVsIFNoYWgKKyAgICAgMQlQcmF0YXAgTmFycmE8L2NvZGU+PC9wcmU+PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKyAgICA8IS0tIDQuMC4wLWJldGEuMSAtLT4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29udHJpYnV0b3JzLTRfMF8wX2JldGFfMSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjQuMC4wLWJldGEuMTwvaDQ+CisgICAgICAgICAgICAgICAgICAgIDxwPlJlbGVhc2UgTWFuYWdlcjogQ29sZSBHcmVlcjwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDMuNy4zLi40LjAuMC1iZXRhLjEKKyAgICA4OCAgU3RlcGhlbiBNYWxsZXR0ZQorICAgIDgxICBDb2xlLUdyZWVyCisgICAgNzAgIEtlbiBIdQorICAgIDYzICBZYW5nIFhpYQorICAgIDM2ICBWYWxlbnR5biBLYWhhbWx5aworICAgIDIzICBGbG9yaWFuIEhvY2ttYW5uCisgICAgMjAgIGRlcGVuZGFib3RbYm90XQorICAgIDIwICBrZW5odXV1CisgICAgIDcgIENvbGUgR3JlZXIKKyAgICAgNiAgYW5kcmVhY2hpbGQKKyAgICAgNCAgUnlhbiBUYW4KKyAgICAgMiAgREtaZWQKKyAgICAgMiAgUWlhbnRvbmcgWmhvbmcKKyAgICAgMiAgVGnhur9uIE5ndXnhu4VuIEto4bqvYworICAgICAyICBkaC1jbG91ZAorICAgICAyICBzcG1hbGxldHRlCisgICAgIDEgIEFuZHJlYSBDaGlsZAorICAgICAxICBGbG9yYSBKaW4KKyAgICAgMSAgSm9uWmVvbGxhCisgICAgIDEgIEt5bGVCb3llcgorICAgICAxICBOb3JpbyBBa2FnaQorICAgICAxICBRaWFudG9uZworICAgICAxICBTaW1vbiBaaGFvPC9jb2RlPjwvcHJlPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPCEtLSAzLjguMCAtLT4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29udHJpYnV0b3JzLTNfOF8wIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibW9kYWwtdGl0bGUgYm9sZCBibGFjayBtYi0yICI+My44LjA8L2g0PgorICAgICAgICAgICAgICAgICAgICA8cD5SZWxlYXNlIE1hbmFnZXI6IENvbGUgR3JlZXI8L3A+CisKKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib3gxIj48cHJlPjxjb2RlPiQgZ2l0IHNob3J0bG9nIC1zbiAzLjcuNS4uMy44LjAKKyAgICAxMDIgIFN0ZXBoZW4gTWFsbGV0dGUKKyAgICAzNyAgQ29sZSBHcmVlcgorICAgIDM0ICBBbmRyZWEgQ2hpbGQKKyAgICAzNCAgWWFuZyBYaWEKKyAgICAxOSAgS2VuIEh1CisgICAgIDYgIFBldGVyIFRyaWJlCisgICAgIDQgIEFuZHJpaSBMb21ha2luCisgICAgIDEgIENsZW1lbnQgZGUgR3JvYworICAgICAxICBGbG9yYSBKaW4KKyAgICAgMSAgSmFtZXMgVGhvbXBzb24KKyAgICAgMSAgUHJpdGFtIEthZGFtCisgICAgIDEgIFNjaG1pZHQKKyAgICAgMSAgVmFsZW50eW4gS2FoYW1seWsKKyAgICAgMSAgZGVwZW5kYWJvdFtib3RdCis8L2NvZGU+PC9wcmU+PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKyAgICA8IS0tIDMuNy41IC0tPgorICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjb250cmlidXRvcnMtM183XzUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIiByb2xlPSJkb2N1bWVudCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWJzLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+PHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+PC9idXR0b24+CisKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSBib2xkIGJsYWNrIG1iLTIgIj4zLjcuNTwvaDQ+CisgICAgICAgICAgICAgICAgICAgIDxwPlJlbGVhc2UgTWFuYWdlcjogQ29sZSBHcmVlcjwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDMuNy40Li4zLjcuNQorICAgIDE1ICBTdGVwaGVuIE1hbGxldHRlCisgICAgIDQgIEtlbiBIdQorICAgICAzICBBbmRyZWEgQ2hpbGQKKyAgICAgMyAgQ29sZSBHcmVlcgorICAgICAzICBZYW5nIFhpYQorICAgICAyICBkZXBlbmRhYm90W2JvdF0KKyAgICAgMSAgQW5pY2FhT3ZPCisgICAgIDEgIEhha2t5NTQKKyAgICAgMSAgSHViZXJ0eSBYYXZpZXIKKyAgICAgMSAgS2FuZ3dlaSBaaHUKKyAgICAgMSAgU2ltb24gT2xzZW4KKyAgICAgMSAga2lyaWxsLXN0ZXBhbmlzaGluPC9jb2RlPjwvcHJlPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPCEtLSAzLjcuNCAtLT4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29udHJpYnV0b3JzLTNfN180IiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibW9kYWwtdGl0bGUgYm9sZCBibGFjayBtYi0yICI+My43LjQ8L2g0PgorICAgICAgICAgICAgICAgICAgICA8cD5SZWxlYXNlIE1hbmFnZXI6IFlhbmcgWGlhPC9wPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+PHByZT48Y29kZT4kIGdpdCBzaG9ydGxvZyAtc24gMy43LjMuLjMuNy40CisgICAgMzcgIFN0ZXBoZW4gTWFsbGV0dGUKKyAgICAxNCAgZGVwZW5kYWJvdFtib3RdCisgICAgIDggIENvbGUtR3JlZXIKKyAgICAgOCAgYW5kcmVhY2hpbGQKKyAgICAgNSAgRmxvcmEgSmluCisgICAgIDQgIENvbGUgR3JlZXIKKyAgICAgNCAgeGlhemN5CisgICAgIDMgIG5ubXZhCisgICAgIDIgIEt5bGVCb3llcgorICAgICAyICBRaWFudG9uZyBaaG9uZworICAgICAxICBDbGVtZW50IGRlIEdyb2MKKyAgICAgMSAgREtaZWQKKyAgICAgMSAgRHlsYW4gV2VybmVyLU1laWVyCisgICAgIDEgIEhvbmdqaWFuZyBaaGFuZworICAgICAxICBOb3JpbyBBa2FnaQorICAgICAxICBQZXRyIExhbmdyCisgICAgIDEgIFNpbW9uIFpoYW8KKyAgICAgMSAgVmFpYmhhdiBNYWxob3RyYQorICAgICAxICBWYWxlbnR5biBLYWhhbWx5aworICAgICAxICBkaC1jbG91ZDwvY29kZT48L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDwhLS0gMy43LjMgLS0+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzdfMyIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjMuNy4zPC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBDb2xlIEdyZWVyPC9wPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+PHByZT48Y29kZT4kIGdpdCBzaG9ydGxvZyAtc24gMy43LjIuLjMuNy4zCisgICAgNTEgIGRlcGVuZGFib3RbYm90XQorICAgIDI5ICBDb2xlLUdyZWVyCisgICAgMjcgIFN0ZXBoZW4gTWFsbGV0dGUKKyAgICAyMyAgRmxvcmlhbiBIb2NrbWFubgorICAgICA5ICBZYW5nIFhpYQorICAgICA5ICBseW5kb24KKyAgICAgOCAgS2VuIEh1CisgICAgIDggIGtlbmh1dXUKKyAgICAgNyAgUHJhc2hhbnQgVXBhZGh5YXkKKyAgICAgNSAgQ29sZSBHcmVlcgorICAgICA1ICBOb3JpbyBBa2FnaQorICAgICA0ICBWYWxlbnR5biBLYWhhbWx5aworICAgICAyICBEYW5pZWwgV2ViZXIKKyAgICAgMiAgT2xla3NhbmRyIFBvcnVub3YKKyAgICAgMiAgeGlhemN5CisgICAgIDEgIEhvbmdqaWFuZyBaaGFuZworICAgICAxICBIdWdvIHZhbiBLZW1lbmFkZQorICAgICAxICBKb25aZW9sbGEKKyAgICAgMSAgUWlhbnRvbmcKKyAgICAgMSAgU2Fpa2lyYW4gQm9nYQorICAgICAxICBUb21lciBPaGFuYQorICAgICAxICBrYWl5YW9rMgorICAgICAxICBzYWlraXJhbmJvZ2EKKyAgICAgMSAgdGhvbWFzIGRnCisgICAgIDEgIHRob21hcy1kZzwvY29kZT48L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDwhLS0gMy43LjIgLS0+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzdfMiIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjMuNy4yPC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBZYW5nIFhpYTwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDMuNy4xLi4zLjcuMgorICAgIDQ3ICBkZXBlbmRhYm90W2JvdF0KKyAgICAzMSAgRmxvcmlhbiBIb2NrbWFubgorICAgIDI3ICBTdGVwaGVuIE1hbGxldHRlCisgICAgMTcgIENvbGUtR3JlZXIKKyAgICAxNiAgWWFuZyBYaWEKKyAgICAxNCAgUnlhbiBUYW4KKyAgICAgNiAgVmFsZW50eW4gS2FoYW1seWsKKyAgICAgNCAgeGlhemN5CisgICAgIDQgIEtlbiBIdQorICAgICAyICBzdGVpZ21hCisgICAgIDIgIGtlbmh1dXUKKyAgICAgMSAgVGnhur9uIE5ndXnhu4VuIEto4bqvYworICAgICAxICBQcmFzaGFudCBVcGFkaHlheQorICAgICAxICBTYWlraXJhbiBCb2dhCisgICAgIDEgIENvbGUgR3JlZXIKKyAgICAgMSAgV2lsbGVtIEJyb2VrZW1hPC9jb2RlPjwvcHJlPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPCEtLSAzLjcuMSAtLT4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29udHJpYnV0b3JzLTNfN18xIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibW9kYWwtdGl0bGUgYm9sZCBibGFjayBtYi0yICI+My43LjE8L2g0PgorICAgICAgICAgICAgICAgICAgICA8cD5SZWxlYXNlIE1hbmFnZXI6IFlhbmcgWGlhPC9wPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+PHByZT48Y29kZT4kIGdpdCBzaG9ydGxvZyAtc24gMy43LjAuLjMuNy4xCisgICAgNDggIFN0ZXBoZW4gTWFsbGV0dGUKKyAgICA0OCAgQ29sZS1HcmVlcgorICAgIDQzICBGbG9yaWFuIEhvY2ttYW5uCisgICAgMzggIGRlcGVuZGFib3RbYm90XQorICAgIDMxICBZYW5nIFhpYQorICAgIDE4ICBWYWxlbnR5biBLYWhhbWx5aworICAgIDEwICBLZW4gSHUKKyAgICAgNiAga2VuaHV1dQorICAgICA1ICBSeWFuIFRhbgorICAgICAzICB4aWF6Y3kKKyAgICAgMyAgTm9yaW8gQWthZ2kKKyAgICAgMiAgQ29sZSBHcmVlcgorICAgICAxICBUaG9tYXMKKyAgICAgMSAgSXRheSBXb2xmaXNoCisgICAgIDEgIEhhcHB5SGFja2VyMTIzCisgICAgIDEgIERhbmllbCBXZWJlcgorICAgICAxICBzcG1hbGxldHRlCisgICAgIDEgIEplc3NlIFdoaXRlCisgICAgIDEgIEJveHVhbiBMaTwvY29kZT48L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKwogICAgIDwhLS0gMy43LjAgLS0+CiAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzdfMCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgogICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KQEAgLTUzNCw2ICsxMDEyLDEwNyBAQAogICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KIAorICAgIDwhLS0gMy42LjggLS0+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzZfOCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjMuNi44PC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBDb2xlIEdyZWVyPC9wPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+PHByZT48Y29kZT4kIGdpdCBzaG9ydGxvZyAtc24gMy42LjcuLjMuNi44CisgICAgNDggIGRlcGVuZGFib3RbYm90XQorICAgIDE2ICBGbG9yaWFuIEhvY2ttYW5uCisgICAgIDkgIGx5bmRvbgorICAgICA4ICBDb2xlLUdyZWVyCisgICAgIDQgIENvbGUgR3JlZXIKKyAgICAgMyAgU3RlcGhlbiBNYWxsZXR0ZQorICAgICAyICBLZW4gSHUKKyAgICAgMiAgWWFuZyBYaWEKKyAgICAgMiAga2VuaHV1dQorICAgICAxICBIdWdvIHZhbiBLZW1lbmFkZQorICAgICAxICBKb25aZW9sbGEKKyAgICAgMSAgUHJhc2hhbnQgVXBhZGh5YXkKKyAgICAgMSAgUWlhbnRvbmcKKyAgICAgMSAgVG9tZXIgT2hhbmEKKyAgICAgMSAgVmFsZW50eW4gS2FoYW1seWsKKyAgICAgMSAga2FpeWFvazIKKyAgICAgMSAgeGlhemN5PC9jb2RlPjwvcHJlPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPCEtLSAzLjYuNyAtLT4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29udHJpYnV0b3JzLTNfNl83IiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibW9kYWwtdGl0bGUgYm9sZCBibGFjayBtYi0yICI+My42Ljc8L2g0PgorICAgICAgICAgICAgICAgICAgICA8cD5SZWxlYXNlIE1hbmFnZXI6IFlhbmcgWGlhPC9wPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+PHByZT48Y29kZT4kIGdpdCBzaG9ydGxvZyAtc24gMy42LjYuLjMuNi43CisgICAgNDYgIGRlcGVuZGFib3RbYm90XQorICAgIDE3ICBGbG9yaWFuIEhvY2ttYW5uCisgICAgMTEgIFN0ZXBoZW4gTWFsbGV0dGUKKyAgICAgOCAgUnlhbiBUYW4KKyAgICAgNSAgWWFuZyBYaWEKKyAgICAgMiAgeGlhemN5CisgICAgIDIgIENvbGUtR3JlZXIKKyAgICAgMiAgc3RlaWdtYQorICAgICAxICBWYWxlbnR5biBLYWhhbWx5aworICAgICAxICBXaWxsZW0gQnJvZWtlbWEKKyAgICAgMSAgUHJhc2hhbnQgVXBhZGh5YXkKKyAgICAgMSAgS2VuIEh1CisgICAgIDEgIGtlbmh1dXUKKyAgICAgMSAgQ29sZSBHcmVlcgorICAgICAxICBTYWlraXJhbiBCb2dhPC9jb2RlPjwvcHJlPjwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPCEtLSAzLjYuNiAtLT4KKyAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iY29udHJpYnV0b3JzLTNfNl82IiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyIgcm9sZT0iZG9jdW1lbnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibW9kYWwtdGl0bGUgYm9sZCBibGFjayBtYi0yICI+My42LjY8L2g0PgorICAgICAgICAgICAgICAgICAgICA8cD5SZWxlYXNlIE1hbmFnZXI6IFlhbmcgWGlhPC9wPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYm94MSI+PHByZT48Y29kZT4kIGdpdCBzaG9ydGxvZyAtc24gMy42LjUuLjMuNi42CisgICAgMzQgIGRlcGVuZGFib3RbYm90XQorICAgIDMwICBGbG9yaWFuIEhvY2ttYW5uCisgICAgMTkgIENvbGUtR3JlZXIKKyAgICAxNiAgU3RlcGhlbiBNYWxsZXR0ZQorICAgIDExICBZYW5nIFhpYQorICAgICAzICBOb3JpbyBBa2FnaQorICAgICAzICBWYWxlbnR5biBLYWhhbWx5aworICAgICAyICB4aWF6Y3kKKyAgICAgMiAgUnlhbiBUYW4KKyAgICAgMiAga2VuaHV1dQorICAgICAxICBKZXNzZSBXaGl0ZQorICAgICAxICBJdGF5IFdvbGZpc2gKKyAgICAgMSAgRGFuaWVsIFdlYmVyCisgICAgIDEgIEJveHVhbiBMaQorICAgICAxICBLZW4gSHU8L2NvZGU+PC9wcmU+PC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKICAgICA8IS0tIDMuNi41IC0tPgogICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjb250cmlidXRvcnMtM182XzUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIj4KICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIiByb2xlPSJkb2N1bWVudCI+CkBAIC03NjEsNyArMTM0MCwzMyBAQAogICAgICAgICAgIDwvZGl2PgogICAgICAgPC9kaXY+CiAKLSAgICA8IS0tIDMuNS42IC0tPgorICAgIDwhLS0gMy41LjggLS0+CisgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzVfOCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtYnMtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj48c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj48L2J1dHRvbj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9Im1vZGFsLXRpdGxlIGJvbGQgYmxhY2sgbWItMiAiPjMuNS44PC9oND4KKyAgICAgICAgICAgICAgICAgICAgPHA+UmVsZWFzZSBNYW5hZ2VyOiBZYW5nIFhpYTwvcD4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJveDEiPjxwcmU+PGNvZGU+JCBnaXQgc2hvcnRsb2cgLXNuIDMuNS43Li4zLjUuOAorICAgIDM0ICBkZXBlbmRhYm90W2JvdF0KKyAgICAxOCAgRmxvcmlhbiBIb2NrbWFubgorICAgICAzICBZYW5nIFhpYQorICAgICAzICBDb2xlLUdyZWVyCisgICAgIDEgIHhpYXpjeQorICAgICAxICBEYW5pZWwgV2ViZXIKKyAgICAgMSAgUnlhbiBUYW4KKyAgICAgMSAgU3RlcGhlbiBNYWxsZXR0ZTwvY29kZT48L3ByZT48L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKworICAgIDwhLS0gMy41LjcgLS0+CiAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImNvbnRyaWJ1dG9ycy0zXzVfNyIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgogICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgpAQCAtMjU0MCw3ICszMTQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imp1LWJveCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC00MCB0ZXh0LWJsdWUgYm9sZCI+Sm9pbiBVczwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImJvbGQiPkpvaW4gdXMgb24gb3VyIERpc2NvcmQgU2VydmVyPC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHB2ZXd4LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtdC0zIiBhbHQ9ImltZyI+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHB2ZXd4LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtdC0zIiBhbHQ9IkRpc2NvcmQgbG9nbyI+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDwvZGl2PgpAQCAtMjU1NywxMSArMzE2MiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvbGQgZnQtMjUiPkFwYWNoZSBUaW5rZXJQb3DihKI8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMiBtYi00Ij5BcGFjaGUgVGlua2VyUG9w4oSiIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zIChPTEFQKS48L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lIGhvdmVyLW9wLWxvdyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZGlzY29yZC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZ2l0aHViLWJveC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0Y2gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3R3aXR0ZXItc3F1YXJlLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3lvdXR1YmUucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZGlzY29yZC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIERpc2NvcmQiPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC9naXRodWItYm94LnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJUaW5rZXJQb3AgR2l0SHViIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0Y2gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBUd2l0Y2giPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0dGVyLXNxdWFyZS5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIFR3aXR0ZXIiPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3lvdXR1YmUucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBZb3VUdWJlIj48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCBmdC1saW5rcyI+CkBAIC0yNjAwLDkgKzMyMDUsOSBAQAogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9vdGVyPgotICAgICAgICA8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LTEuMTEuMS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyI+PC9zY3JpcHQ+Ci0gICAgICA8c2NyaXB0IHNyYz0ianMvd293Lm1pbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy93b3cubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImpzL215LmpzIj48L3NjcmlwdD4KICAgICA8L2JvZHk+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9kb2NzL3NpdGUvaG9tZS9ncmVtbGluLmh0bWwgYi9kb2NzL3NpdGUvaG9tZS9ncmVtbGluLmh0bWwKaW5kZXggOWE4YzJkNi4uZDA3OGE1NSAxMDA2NDQKLS0tIGEvZG9jcy9zaXRlL2hvbWUvZ3JlbWxpbi5odG1sCisrKyBiL2RvY3Mvc2l0ZS9ob21lL2dyZW1saW4uaHRtbApAQCAtMjIsMTAgKzIyLDI3IEBACiAgICAgICAgIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgc2hyaW5rLXRvLWZpdD1ubyI+CisgICAgICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIGZvbGxvdyI+CiAgICAgICAgIDxsaW5rIGhyZWY9ImltZy9mYXZpY29uLnBuZyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPgotICAgICAgICA8dGl0bGU+QXBhY2hlIFRpbmtlclBvcDogR3JlbWxpbjwvdGl0bGU+Ci0gICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iIj4KKyAgICAgICAgPHRpdGxlPkdyYXBoIFF1ZXJ5IExhbmd1YWdlIC0gR3JlbWxpbiB8IEFwYWNoZSBUaW5rZXJQb3A8L3RpdGxlPgorICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iR3JlbWxpbiBpcyBhIGdyYXBoIHRyYXZlcnNhbCBsYW5ndWFnZSBmb3IgcXVlcnlpbmcgZGF0YWJhc2VzIHdpdGggYSBmdW5jdGlvbmFsLCBkYXRhLWZsb3cgYXBwcm9hY2guIExlYXJuIGhvdyB0byB1c2UgdGhpcyBwb3dlcmZ1bCBxdWVyeSBsYW5ndWFnZS4iPgorICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iZ3JhcGggcXVlcnksIEdyZW1saW4sIHRyYXZlcnNhbCwgVGlua2VyUG9wIj4KKyAgICAgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZ3JlbWxpbi5odG1sIj4KKworICAgICAgICA8IS0tIE9wZW4gR3JhcGggLyBGYWNlYm9vayAtLT4KKyAgICAgICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgorICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2dyZW1saW4uaHRtbCI+CisgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iR3JhcGggUXVlcnkgTGFuZ3VhZ2UgLSBHcmVtbGluIHwgQXBhY2hlIFRpbmtlclBvcCI+CisgICAgICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iR3JlbWxpbiBpcyBhIGdyYXBoIHRyYXZlcnNhbCBsYW5ndWFnZSBmb3IgcXVlcnlpbmcgZGF0YWJhc2VzIHdpdGggYSBmdW5jdGlvbmFsLCBkYXRhLWZsb3cgYXBwcm9hY2guIExlYXJuIGhvdyB0byB1c2UgdGhpcyBwb3dlcmZ1bCBxdWVyeSBsYW5ndWFnZS4iPgorICAgICAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL2dyZW1saW4vZ3JlbWxpbi1sb2dvLnBuZyI+CisKKyAgICAgICAgPCEtLSBUd2l0dGVyIC0tPgorICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InN1bW1hcnlfbGFyZ2VfaW1hZ2UiPgorICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnNpdGUiIGNvbnRlbnQ9IkBhcGFjaGV0aW5rZXJwb3AiPgorICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJHcmFwaCBRdWVyeSBMYW5ndWFnZSAtIEdyZW1saW4gfCBBcGFjaGUgVGlua2VyUG9wIj4KKyAgICAgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpkZXNjcmlwdGlvbiIgY29udGVudD0iR3JlbWxpbiBpcyBhIGdyYXBoIHRyYXZlcnNhbCBsYW5ndWFnZSBmb3IgcXVlcnlpbmcgZGF0YWJhc2VzIHdpdGggYSBmdW5jdGlvbmFsLCBkYXRhLWZsb3cgYXBwcm9hY2guIExlYXJuIGhvdyB0byB1c2UgdGhpcyBwb3dlcmZ1bCBxdWVyeSBsYW5ndWFnZS4iPgorICAgICAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmltYWdlIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2ltZy9ncmVtbGluL2dyZW1saW4tbG9nby5wbmciPgorCiAgICAgICAgIDxsaW5rIGhyZWY9ImNzcy9ib290c3RyYXAubWluLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgICAgICAgPGxpbmsgaHJlZj0iY3NzL2ZvbnQtYXdlc29tZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIvPgogICAgICAgICA8bGluayBocmVmPSJjc3MvY3VzdG9tZS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CkBAIC0zMyw2ICs1MCw3IEBACiAgICAgICAgIDxsaW5rIGhyZWY9ImNzcy9hbmltYXRlLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ii8+CiAgICAgICAgIDxsaW5rIGhyZWY9ImNzcy9wcmlzbS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CiAgICAgICAgIDxsaW5rIGhyZWY9ImNzcy9mb250cy5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CisKICAgICAgICAgPCEtLSBNYXRvbW8gLS0+CiAgICAgICAgIDxzY3JpcHQ+CiAgICAgICAgICAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107CkBAIC01MCw2ICs2OCw5MyBAQAogICAgICAgICAgICAgfSkoKTsKICAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAgIDwhLS0gRW5kIE1hdG9tbyBDb2RlIC0tPgorCisgICAgICAgIDwhLS0gU3RydWN0dXJlZCBEYXRhIC8gSlNPTi1MRCAtLT4KKyAgICAgICAgPHNjcmlwdCB0eXBlPSJhcHBsaWNhdGlvbi9sZCtqc29uIj4KKyAgICAgICAgeworICAgICAgICAgICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAorICAgICAgICAgICJAZ3JhcGgiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJPcmdhbml6YXRpb24iLAorICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIsCisgICAgICAgICAgICAgICJuYW1lIjogIkFwYWNoZSBUaW5rZXJQb3AiLAorICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgImxvZ28iOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIkltYWdlT2JqZWN0IiwKKyAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL2xvZ28ucG5nIiwKKyAgICAgICAgICAgICAgICAid2lkdGgiOiAyODAsCisgICAgICAgICAgICAgICAgImhlaWdodCI6IDYwCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcGFjaGUgVGlua2VyUG9wIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zIChPTEFQKS4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCisgICAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jd2Vic2l0ZSIsCisgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAgICAgICAgICAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAgICAgInB1Ymxpc2hlciI6IHsKKyAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlRlY2hBcnRpY2xlIiwKKyAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2dyZW1saW4uaHRtbCNhcnRpY2xlIiwKKyAgICAgICAgICAgICAgImhlYWRsaW5lIjogIkdyYXBoIFF1ZXJ5IExhbmd1YWdlIC0gR3JlbWxpbiIsCisgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHcmVtbGluIGlzIGEgZ3JhcGggdHJhdmVyc2FsIGxhbmd1YWdlIHRoYXQgZW5hYmxlcyBkZXZlbG9wZXJzIHRvIHF1ZXJ5IGdyYXBoIGRhdGFiYXNlcyB3aXRoIGEgZnVuY3Rpb25hbCwgZGF0YS1mbG93IGFwcHJvYWNoLiBMZWFybiBob3cgdG8gdXNlIHRoaXMgcG93ZXJmdWwgZ3JhcGggcXVlcnkgbGFuZ3VhZ2UgZm9yIHlvdXIgZGF0YSByZWxhdGlvbnNoaXBzLiIsCisgICAgICAgICAgICAgICJpc1BhcnRPZiI6IHsKKyAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI3dlYnNpdGUiCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJwdWJsaXNoZXIiOiB7CisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNvcmdhbml6YXRpb24iCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJtYWluRW50aXR5T2ZQYWdlIjogeworICAgICAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9ncmVtbGluLmh0bWwjd2VicGFnZSIKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgImluTGFuZ3VhZ2UiOiAiZW4iLAorICAgICAgICAgICAgICAidGVjaG5pY2FsQXJ0aWNsZSI6IHRydWUKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKKyAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2dyZW1saW4uaHRtbCN3ZWJwYWdlIiwKKyAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2dyZW1saW4uaHRtbCIsCisgICAgICAgICAgICAgICJuYW1lIjogIkdyYXBoIFF1ZXJ5IExhbmd1YWdlIC0gR3JlbWxpbiB8IEFwYWNoZSBUaW5rZXJQb3AiLAorICAgICAgICAgICAgICAiaXNQYXJ0T2YiOiB7CisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyN3ZWJzaXRlIgorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAiYWJvdXQiOiB7CisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNvcmdhbml6YXRpb24iCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHcmVtbGluIGlzIGEgZ3JhcGggdHJhdmVyc2FsIGxhbmd1YWdlIHRoYXQgZW5hYmxlcyBkZXZlbG9wZXJzIHRvIHF1ZXJ5IGdyYXBoIGRhdGFiYXNlcyB3aXRoIGEgZnVuY3Rpb25hbCwgZGF0YS1mbG93IGFwcHJvYWNoLiBMZWFybiBob3cgdG8gdXNlIHRoaXMgcG93ZXJmdWwgZ3JhcGggcXVlcnkgbGFuZ3VhZ2UgZm9yIHlvdXIgZGF0YSByZWxhdGlvbnNoaXBzLiIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJCcmVhZGNydW1iTGlzdCIsCisgICAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9ncmVtbGluLmh0bWwjYnJlYWRjcnVtYmxpc3QiLAorICAgICAgICAgICAgICAiaXRlbUxpc3RFbGVtZW50IjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJMaXN0SXRlbSIsCisgICAgICAgICAgICAgICAgICAicG9zaXRpb24iOiAxLAorICAgICAgICAgICAgICAgICAgIml0ZW0iOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJIb21lIgorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6IDIsCisgICAgICAgICAgICAgICAgICAiaXRlbSI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIldlYlBhZ2UiLAorICAgICAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZ3JlbWxpbi5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2dyZW1saW4uaHRtbCIsCisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkdyZW1saW4gUXVlcnkgTGFuZ3VhZ2UiCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgogICAgIDwvaGVhZD4KICAgICA8Ym9keT4KICAgICA8IS0tIGhlYWRlciAtLT4KQEAgLTEzNCw3ICsyMzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2tybGF3cmVuY2UuZ2l0aHViLmlvL2dyYXBoLyI+Qm9vazogUHJhY3RpY2FsIEdyZW1saW48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cDovL3NxbDJncmVtbGluLmNvbS8iPlNRTDJHcmVtbGluPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ka3VwcGl0ei9zcWwyZ3JlbWxpbiI+U1FMMkdyZW1saW48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CkBAIC0xNTEsNiArMjU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AvIj48aW1nIHNyYz0iaW1nL2ppcmEtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPklzc3VlIFRyYWNrZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvIj48aW1nIHNyYz0iaW1nL2dpdGh1Yi1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+R2l0SHViPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LnR3aXRjaC50di9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHdpdGNoLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Ud2l0Y2g8L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL2xpbmtlZGluLWxvZ28uc3ZnIiBjbGFzcz0ibmF2LWljb24iLz5MaW5rZWRJbjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90d2l0dGVyLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Ud2l0dGVyPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcveW91dHViZS1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+WW91VHViZTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxociBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9saT4KQEAgLTY1Myw5ICs3NTksOSBAQAogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZm9vdGVyPgotICAgICAgICA8c2NyaXB0IHNyYz0ianMvanF1ZXJ5LTEuMTEuMS5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyI+PC9zY3JpcHQ+Ci0gICAgICA8c2NyaXB0IHNyYz0ianMvd293Lm1pbi5qcyI+PC9zY3JpcHQ+CisgICAgICAgIDxzY3JpcHQgc3JjPSJqcy93b3cubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImpzL215LmpzIj48L3NjcmlwdD4KICAgICAgICAgPHNjcmlwdCBzcmM9ImpzL3ByaXNtLmpzIj48L3NjcmlwdD4KICAgICA8L2JvZHk+CmRpZmYgLS1naXQgYS9kb2NzL3NpdGUvaG9tZS9pbWcvbGlua2VkaW4tbG9nby5zdmcgYi9kb2NzL3NpdGUvaG9tZS9pbWcvbGlua2VkaW4tbG9nby5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJjYjYwNAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc2l0ZS9ob21lL2ltZy9saW5rZWRpbi1sb2dvLnN2ZwpAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHN2ZworICAgaGVpZ2h0PSI3MiIKKyAgIHZpZXdCb3g9IjAgMCA3MiA3MiIKKyAgIHdpZHRoPSI3MiIKKyAgIHZlcnNpb249IjEuMSIKKyAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CisgIDxnCisgICAgIGZpbGw9Im5vbmUiCisgICAgIGZpbGwtcnVsZT0iZXZlbm9kZCI+CisgICAgPHBhdGgKKyAgICAgICBkPSJtIDgsNzIgaCA1NiBjIDQuNDE4Mjc4LDAgOCwtMy41ODE3MjIgOCwtOCBWIDggQyA3MiwzLjU4MTcyMiA2OC40MTgyNzgsMCA2NCwwIEggOCBDIDMuNTgxNzIyLDAgMCwzLjU4MTcyMiAwLDggdiA1NiBjIDAsNC40MTgyNzggMy41ODE3MjIsOCA4LDggeiIKKyAgICAgICBmaWxsPSIjMDAwMDAwIiAvPgorICAgIDxwYXRoCisgICAgICAgZD0iTTYyLDYyIEw1MS4zMTU2MjUsNjIgTDUxLjMxNTYyNSw0My44MDIxMTQ5IEM1MS4zMTU2MjUsMzguODEyNzU0MiA0OS40MTk3OTE3LDM2LjAyNDUzMjMgNDUuNDcwNzAzMSwzNi4wMjQ1MzIzIEM0MS4xNzQ2MDk0LDM2LjAyNDUzMjMgMzguOTMwMDc4MSwzOC45MjYxMTAzIDM4LjkzMDA3ODEsNDMuODAyMTE0OSBMMzguOTMwMDc4MSw2MiBMMjguNjMzMzMzMyw2MiBMMjguNjMzMzMzMywyNy4zMzMzMzMzIEwzOC45MzAwNzgxLDI3LjMzMzMzMzMgTDM4LjkzMDA3ODEsMzIuMDAyOTI4MyBDMzguOTMwMDc4MSwzMi4wMDI5MjgzIDQyLjAyNjA0MTcsMjYuMjc0MjE1MSA0OS4zODI1NTIxLDI2LjI3NDIxNTEgQzU2LjczNTY3NzEsMjYuMjc0MjE1MSA2MiwzMC43NjQ0NzA1IDYyLDQwLjA1MTIxMiBMNjIsNjIgWiBNMTYuMzQ5MzQ5LDIyLjc5NDAxMzMgQzEyLjg0MjA1NzMsMjIuNzk0MDEzMyAxMCwxOS45Mjk2NTY3IDEwLDE2LjM5NzAwNjcgQzEwLDEyLjg2NDM1NjYgMTIuODQyMDU3MywxMCAxNi4zNDkzNDksMTAgQzE5Ljg1NjY0MDYsMTAgMjIuNjk3MDA1MiwxMi44NjQzNTY2IDIyLjY5NzAwNTIsMTYuMzk3MDA2NyBDMjIuNjk3MDA1MiwxOS45Mjk2NTY3IDE5Ljg1NjY0MDYsMjIuNzk0MDEzMyAxNi4zNDkzNDksMjIuNzk0MDEzMyBaIE0xMS4wMzI1NTIxLDYyIEwyMS43Njk0MDEsNjIgTDIxLjc2OTQwMSwyNy4zMzMzMzMzIEwxMS4wMzI1NTIxLDI3LjMzMzMzMzMgTDExLjAzMjU1MjEsNjIgWiIKKyAgICAgICBmaWxsPSIjRkZGIiAvPgorICA8L2c+Cis8L3N2Zz4KZGlmZiAtLWdpdCBhL2RvY3Mvc2l0ZS9ob21lL2ltZy9wcm92aWRlcnMvMjUucG5nIGIvZG9jcy9zaXRlL2hvbWUvaW1nL3Byb3ZpZGVycy8yNS5wbmcKaW5kZXggZTAwNzNhMS4uMjE4MGNjZSAxMDA2NDQKLS0tIGEvZG9jcy9zaXRlL2hvbWUvaW1nL3Byb3ZpZGVycy8yNS5wbmcKKysrIGIvZG9jcy9zaXRlL2hvbWUvaW1nL3Byb3ZpZGVycy8yNS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9zaXRlL2hvbWUvaW5kZXguaHRtbCBiL2RvY3Mvc2l0ZS9ob21lL2luZGV4Lmh0bWwKaW5kZXggYWEyYjg1Zi4uMThkZjY1NyAxMDA2NDQKLS0tIGEvZG9jcy9zaXRlL2hvbWUvaW5kZXguaHRtbAorKysgYi9kb2NzL3NpdGUvaG9tZS9pbmRleC5odG1sCkBAIC0yMiwxMCArMjIsMjcgQEAKICAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vIj4KKyAgICA8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9ImluZGV4LCBmb2xsb3ciPgogICAgIDxsaW5rIGhyZWY9ImltZy9mYXZpY29uLnBuZyIgcmVsPSJzaG9ydGN1dCBpY29uIi8+Ci0gICAgPHRpdGxlPkFwYWNoZSBUaW5rZXJQb3A6IEhvbWU8L3RpdGxlPgotICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgorICAgIDx0aXRsZT5HcmFwaCBDb21wdXRpbmcgRnJhbWV3b3JrIHwgQXBhY2hlIFRpbmtlclBvcDwvdGl0bGU+CisgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkdyYXBoIGNvbXB1dGluZyBmcmFtZXdvcmsgZm9yIGRhdGFiYXNlcyBhbmQgYW5hbHl0aWNzIHN5c3RlbXMuIEFwYWNoZSBUaW5rZXJQb3AgcG93ZXJzIGdyYXBoIGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBHcmVtbGluIHF1ZXJ5IGxhbmd1YWdlLiI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImdyYXBoIGNvbXB1dGluZywgZ3JhcGggZGF0YWJhc2UsIEdyZW1saW4sIFRpbmtlclBvcCI+CisgICAgPGxpbmsgcmVsPSJjYW5vbmljYWwiIGhyZWY9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIj4KKworICAgIDwhLS0gT3BlbiBHcmFwaCAvIEZhY2Vib29rIC0tPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIj4KKyAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyI+CisgICAgPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJHcmFwaCBDb21wdXRpbmcgRnJhbWV3b3JrIHwgQXBhY2hlIFRpbmtlclBvcCI+CisgICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJHcmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGZvciBkYXRhYmFzZXMgYW5kIGFuYWx5dGljcyBzeXN0ZW1zLiBBcGFjaGUgVGlua2VyUG9wIHBvd2VycyBncmFwaCBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgR3JlbWxpbiBxdWVyeSBsYW5ndWFnZS4iPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9pbWcvdGlua2VycG9wLXNwbGFzaC5wbmciPgorCisgICAgPCEtLSBUd2l0dGVyIC0tPgorICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6Y2FyZCIgY29udGVudD0ic3VtbWFyeV9sYXJnZV9pbWFnZSI+CisgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpzaXRlIiBjb250ZW50PSJAYXBhY2hldGlua2VycG9wIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOnRpdGxlIiBjb250ZW50PSJHcmFwaCBDb21wdXRpbmcgRnJhbWV3b3JrIHwgQXBhY2hlIFRpbmtlclBvcCI+CisgICAgPG1ldGEgbmFtZT0idHdpdHRlcjpkZXNjcmlwdGlvbiIgY29udGVudD0iR3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgZGF0YWJhc2VzIGFuZCBhbmFseXRpY3Mgc3lzdGVtcy4gQXBhY2hlIFRpbmtlclBvcCBwb3dlcnMgZ3JhcGggYXBwbGljYXRpb25zIHdpdGggdGhlIEdyZW1saW4gcXVlcnkgbGFuZ3VhZ2UuIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmltYWdlIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2ltZy90aW5rZXJwb3Atc3BsYXNoLnBuZyI+CisKICAgICA8bGluayBocmVmPSJjc3MvYm9vdHN0cmFwLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CiAgICAgPGxpbmsgaHJlZj0iY3NzL2ZvbnQtYXdlc29tZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIvPgogICAgIDxsaW5rIGhyZWY9ImNzcy9jdXN0b21lLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KQEAgLTUwLDYgKzY3LDcwIEBACiAgICAgICAgIH0pKCk7CiAgICAgPC9zY3JpcHQ+CiAgICAgPCEtLSBFbmQgTWF0b21vIENvZGUgLS0+CisKKyAgICA8IS0tIFN0cnVjdHVyZWQgRGF0YSAvIEpTT04tTEQ6IFVzZWQgZm9yIFNFTyBhbmQgcmljaCBzZWFyY2ggcmVzdWx0cyAtLT4KKyAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPgorICAgIHsKKyAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCisgICAgICAgICJAZ3JhcGgiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIk9yZ2FuaXphdGlvbiIsCisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNvcmdhbml6YXRpb24iLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkFwYWNoZSBUaW5rZXJQb3AiLAorICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAgICAgICAgICAgICAgICJsb2dvIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiSW1hZ2VPYmplY3QiLAorICAgICAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL2xvZ28ucG5nIiwKKyAgICAgICAgICAgICAgICAgICAgIndpZHRoIjogMjgwLAorICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0IjogNjAKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcGFjaGUgVGlua2VyUG9wIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zIChPTEFQKS4iLAorICAgICAgICAgICAgICAgICJzYW1lQXMiOiBbCisgICAgICAgICAgICAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC8iLAorICAgICAgICAgICAgICAgICAgICAiaHR0cHM6Ly90d2l0dGVyLmNvbS9hcGFjaGV0aW5rZXJwb3AiCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiV2ViU2l0ZSIsCisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyN3ZWJzaXRlIiwKKyAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAgICAgICAicHVibGlzaGVyIjogeworICAgICAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKKyAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI3dlYnBhZ2UiLAorICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYXBoIENvbXB1dGluZyBGcmFtZXdvcmsgfCBBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAgICAgICAiaXNQYXJ0T2YiOiB7CisgICAgICAgICAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jd2Vic2l0ZSIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJhYm91dCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNvcmdhbml6YXRpb24iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXBhY2hlIFRpbmtlclBvcCBpcyBhIHBvd2VyZnVsIG9wZW4tc291cmNlIGdyYXBoIGNvbXB1dGluZyBmcmFtZXdvcmsgZm9yIGJvdGggZ3JhcGggZGF0YWJhc2VzIChPTFRQKSBhbmQgZ3JhcGggYW5hbHl0aWMgc3lzdGVtcyAoT0xBUCkuIEJ1aWxkIG1vZGVybiBncmFwaCBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgR3JlbWxpbiBxdWVyeSBsYW5ndWFnZS4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJCcmVhZGNydW1iTGlzdCIsCisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyNicmVhZGNydW1ibGlzdCIsCisgICAgICAgICAgICAgICAgIml0ZW1MaXN0RWxlbWVudCI6IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiI6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAiaXRlbSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSG9tZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0KKyAgICA8L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgogPCEtLSBoZWFkZXIgLS0+CkBAIC01OCw3ICsxMzksNyBAQAogICAgICAgICA8bmF2IGNsYXNzPSJuYXZiYXIgbmF2YmFyLWV4cGFuZC1sZyAgIj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iaW5kZXguaHRtbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvbG9nby5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9sb2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJBcGFjaGUgVGlua2VyUG9wIEdyYXBoIENvbXB1dGluZyBGcmFtZXdvcmsgTG9nbyI+CiAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdmJhci10b2dnbGVyIiB0eXBlPSJidXR0b24iIGRhdGEtYnMtdG9nZ2xlPSJjb2xsYXBzZSIKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PSIjbmF2YmFyU3VwcG9ydGVkQ29udGVudCIgYXJpYS1jb250cm9scz0ibmF2YmFyU3VwcG9ydGVkQ29udGVudCIKQEAgLTEzNCw3ICsyMTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2tybGF3cmVuY2UuZ2l0aHViLmlvL2dyYXBoLyI+Qm9vazogUHJhY3RpY2FsIEdyZW1saW48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwOi8vc3FsMmdyZW1saW4uY29tLyI+U1FMMkdyZW1saW48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZGt1cHBpdHovc3FsMmdyZW1saW4iPlNRTDJHcmVtbGluPC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KIAogICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KQEAgLTE0MywxNiArMjI0LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW11bml0eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiIGFyaWEtbGFiZWxsZWRieT0ibmF2YmFyRHJvcGRvd24zIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9ImltZy9kaXNjb3JkLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5EaXNjb3JkPC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cuYW5zd2Vyb3ZlcmZsb3cuY29tL2MvODM4OTEwMjc5NTUwMjM4NzIwIj48aW1nIHNyYz0iaW1nL2Fuc3dlci1vdmVyZmxvdy1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+QW5zd2VyIE92ZXJmbG93PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvdGFnZ2VkL2dyZW1saW4iPjxpbWcgc3JjPSJpbWcvc3RhY2stb3ZlcmZsb3ctbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPlN0YWNrIE92ZXJmbG93PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9ncmVtbGluLXVzZXJzIj48aW1nIHNyYz0iaW1nL21haWwucG5nIiBjbGFzcz0ibmF2LWljb24iLz5Vc2VyIE1haWxpbmcgTGlzdDwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vbGlzdHMuYXBhY2hlLm9yZy9saXN0Lmh0bWw/ZGV2QHRpbmtlcnBvcC5hcGFjaGUub3JnIj48aW1nIHNyYz0iaW1nL21haWwucG5nIiBjbGFzcz0ibmF2LWljb24iLz5EZXZlbG9wZXIgTWFpbGluZyBMaXN0PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AvIj48aW1nIHNyYz0iaW1nL2ppcmEtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPklzc3VlIFRyYWNrZXI8L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC8iPjxpbWcgc3JjPSJpbWcvZ2l0aHViLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5HaXRIdWI8L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3R3aXRjaC1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+VHdpdGNoPC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly90d2l0dGVyLmNvbS9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHdpdHRlci1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+VHdpdHRlcjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcveW91dHViZS1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+WW91VHViZTwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaW1nL2Rpc2NvcmQtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIgYWx0PSJEaXNjb3JkIGxvZ28iLz5EaXNjb3JkPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cuYW5zd2Vyb3ZlcmZsb3cuY29tL2MvODM4OTEwMjc5NTUwMjM4NzIwIj48aW1nIHNyYz0iaW1nL2Fuc3dlci1vdmVyZmxvdy1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIiBhbHQ9IkFuc3dlciBPdmVyZmxvdyBsb2dvIi8+QW5zd2VyIE92ZXJmbG93PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvdGFnZ2VkL2dyZW1saW4iPjxpbWcgc3JjPSJpbWcvc3RhY2stb3ZlcmZsb3ctbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIgYWx0PSJTdGFjayBPdmVyZmxvdyBsb2dvIi8+U3RhY2sgT3ZlcmZsb3c8L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2dyZW1saW4tdXNlcnMiPjxpbWcgc3JjPSJpbWcvbWFpbC5wbmciIGNsYXNzPSJuYXYtaWNvbiIgYWx0PSJFbWFpbCBpY29uIGZvciB1c2VyIG1haWxpbmcgbGlzdCIvPlVzZXIgTWFpbGluZyBMaXN0PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9saXN0cy5hcGFjaGUub3JnL2xpc3QuaHRtbD9kZXZAdGlua2VycG9wLmFwYWNoZS5vcmciPjxpbWcgc3JjPSJpbWcvbWFpbC5wbmciIGNsYXNzPSJuYXYtaWNvbiIgYWx0PSJFbWFpbCBpY29uIGZvciBkZXZlbG9wZXIgbWFpbGluZyBsaXN0Ii8+RGV2ZWxvcGVyIE1haWxpbmcgTGlzdDwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLyI+PGltZyBzcmM9ImltZy9qaXJhLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iIGFsdD0iSklSQSBpc3N1ZSB0cmFja2VyIGxvZ28iLz5Jc3N1ZSBUcmFja2VyPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvIj48aW1nIHNyYz0iaW1nL2dpdGh1Yi1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIiBhbHQ9IkdpdEh1YiBsb2dvIi8+R2l0SHViPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cudHdpdGNoLnR2L2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90d2l0Y2gtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIgYWx0PSJUd2l0Y2ggbG9nbyIvPlR3aXRjaDwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9saW5rZWRpbi1sb2dvLnN2ZyIgY2xhc3M9Im5hdi1pY29uIiBhbHQ9IkxpbmtlZEluIGxvZ28iLz5MaW5rZWRJbjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3R3aXR0ZXItbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIgYWx0PSJUd2l0dGVyIGxvZ28iLz5Ud2l0dGVyPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy95b3V0dWJlLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iIGFsdD0iWW91VHViZSBsb2dvIi8+WW91VHViZTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGhyIGNsYXNzPSJkcm9wZG93bi1kaXZpZGVyIj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9kZXYvZGV2ZWxvcGVyLyNfY29udHJpYnV0aW5nIj5Db250cmlidXRpbmc8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhICBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvZGV2L3Byb3ZpZGVyLyNwb2xpY2llcyI+UG9saWNpZXM8L2E+PC9saT4KQEAgLTE5Miw3ICsyNzQsNyBAQAogICAgICAgICAgICAgICAgIDxoMSBjbGFzcz0iZnQtNDAgYm9sZCBibGFjayBtYi0zIj5BcGFjaGUgVGlua2VyUG9w4oSiPC9oMT4KICAgICAgICAgICAgICAgICA8cD5BcGFjaGUgVGlua2VyUG9w4oSiIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYwogICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zIChPTEFQKS48L3A+Ci0gICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJpbWcvZGlzY29yZC1idXR0b24ucG5nIiBhbHQ9ImltZyIKKyAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9ImltZy9kaXNjb3JkLWJ1dHRvbi5wbmciIGFsdD0iSm9pbiB0aGUgVGlua2VyUG9wIERpc2NvcmQgQ29tbXVuaXR5IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaW1nLWZsdWlkIj48L2E+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+CkBAIC0yMDIsNyArMjg0LDcgQEAKIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgPGRpdiBjbGFzcz0iY29sLTEyIHRleHQtY2VudGVyIj4KLSAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvdGlua2VycG9wLXNwbGFzaC5wbmciIGNsYXNzPSJpbWctZmx1aWQgdGlua2VycG9wLXNwbGFzaCIgYWx0PSJpbWciPgorICAgICAgICAgICAgPGltZyBzcmM9ImltZy90aW5rZXJwb3Atc3BsYXNoLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB0aW5rZXJwb3Atc3BsYXNoIiBhbHQ9IlRpbmtlclBvcCBDaGFyYWN0ZXIgU3BsYXNoIj4KICAgICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiA8L2Rpdj4KQEAgLTIxMywzMiArMjk1LDMyIEBACiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGQtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC0zMCBib2xkIGJsYWNrIG1iLTIiPkRvd25sb2FkcyAmIERvY3VtZW50YXRpb248L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTMgbWItbWQtNSBtZWRpdW0gIj5SZWxlYXNlZDogMzEtSnVseS0yMDIzPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTMgbWItbWQtNSBtZWRpdW0gIj5SZWxlYXNlZDogMS1BcHJpbC0yMDI2PC9wPgogICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02IGJvcmRlci1yaWdodCB0ZXh0LWNlbnRlciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJmdC0yNSBib2xkIGJsYWNrIG1iLTYiPlRpbmtlclBvcCAzLjcuMCBEb3dubG9hZHM8L2gzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0iZnQtMjUgYm9sZCBibGFjayBtYi02Ij5UaW5rZXJQb3AgMy44LjEgRG93bmxvYWRzPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNCBtYi0zIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvZ3JvdXAtMjQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTIiIGFsdD0iaW1nIj48YnI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2dyb3VwLTI0LnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtYi0yIiBhbHQ9IkdyZW1saW4gQ29uc29sZSBpY29uIj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idGV4dC1ibHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy43LjAvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLWNvbnNvbGUtMy43LjAtYmluLnppcCI+PGltZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9ImltZy9kb3dubG9hZC1jbG91ZC1saW5lLnN2ZyIgY2xhc3M9Im1lLTIgaW1nLWZsdWlkIiBhbHQ9ImltZyI+R3JlbWxpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy44LjEvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLWNvbnNvbGUtMy44LjEtYmluLnppcCI+PGltZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9ImltZy9kb3dubG9hZC1jbG91ZC1saW5lLnN2ZyIgY2xhc3M9Im1lLTIgaW1nLWZsdWlkIiBhbHQ9IkRvd25sb2FkIGljb24iPkdyZW1saW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQgbWItMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2dyb3VwLTI1LnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtYi0yIiBhbHQ9ImltZyI+PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9ncm91cC0yNS5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWItMiIgYWx0PSJHcmVtbGluIFNlcnZlciBpY29uIj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idGV4dC1ibHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy43LjAvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLXNlcnZlci0zLjcuMC1iaW4uemlwIj48aW1nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0iaW1nL2Rvd25sb2FkLWNsb3VkLWxpbmUuc3ZnIiBjbGFzcz0ibWUtMiBpbWctZmx1aWQiIGFsdD0iaW1nIj5HcmVtbGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjguMS9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tc2VydmVyLTMuOC4xLWJpbi56aXAiPjxpbWcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJpbWcvZG93bmxvYWQtY2xvdWQtbGluZS5zdmciIGNsYXNzPSJtZS0yIGltZy1mbHVpZCIgYWx0PSJEb3dubG9hZCBpY29uIj5HcmVtbGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmVyPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQgbWItMyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2dyb3VwLTI2LnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtYi0yIiBhbHQ9ImltZyI+PGJyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9ncm91cC0yNi5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWItMiIgYWx0PSJTb3VyY2UgY29kZSBpY29uIj48YnI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idGV4dC1ibHVlIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmx1YS90aW5rZXJwb3AvMy43LjAvYXBhY2hlLXRpbmtlcnBvcC0zLjcuMC1zcmMuemlwIj48aW1nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIubHVhL3RpbmtlcnBvcC8zLjguMS9hcGFjaGUtdGlua2VycG9wLTMuOC4xLXNyYy56aXAiPjxpbWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJpbWcvZG93bmxvYWQtY2xvdWQtbGluZS5zdmciIGNsYXNzPSJtZS0yIGltZy1mbHVpZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJpbWciPlNvdXJjZTwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJEb3dubG9hZCBpY29uIj5Tb3VyY2U8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkBAIC0yNTAsNyArMzMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLXRoZW1lIGJ0bi1jdXN0IHctMTAwIGRyb3Bkb3duLXRvZ2dsZSB0ZXh0LXN0YXJ0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIiBpZD0iZHJvcGRvd25NZW51QnV0dG9uMSIgZGF0YS1icy10b2dnbGU9ImRyb3Bkb3duIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2xpbmsuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iaW1nIj4gRG9jdW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2xpbmsuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIG1lLTIiIGFsdD0iTGluayBpY29uIj4gRG9jdW1lbnRhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSB3LTEwMCIgYXJpYS1sYWJlbGxlZGJ5PSJkcm9wZG93bk1lbnVCdXR0b24xIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIgpAQCAtMjY5LDcgKzM1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiBtYi0zIj48YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBidG4tY3VzdCB3LTEwMCB0ZXh0LXN0YXJ0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2phdmFkb2NzL2N1cnJlbnQvY29yZS8iPjxpbWcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9ImltZy9saW5rLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIiBhbHQ9ImltZyI+SmF2YWRvYyAtIENvcmU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSJpbWcvbGluay5zdmciIGNsYXNzPSJpbWctZmx1aWQgbWUtMiIgYWx0PSJMaW5rIGljb24iPkphdmFkb2MgLSBDb3JlPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTYgbWItMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYnRuIGJ0bi10aGVtZSBidG4tY3VzdCB3LTEwMCB0ZXh0LXN0YXJ0IgpAQCAtMzUxLDcgKzQzMyw3IEBACiAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02IG1iLTQgbWItbGctMCI+Ci0gICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9ncmVtbGluLWxvZ28ucG5nIiBhbHQ9ImltZyIgY2xhc3M9ImltZy1mbHVpZCI+CisgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9ncmVtbGluLWxvZ28ucG5nIiBhbHQ9IkdyZW1saW4gR3JhcGggUXVlcnkgTGFuZ3VhZ2UgTG9nbyIgY2xhc3M9ImltZy1mbHVpZCI+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02ICI+CiAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC0zMCBib2xkIHRleHQtd2hpdGUgbWItMyI+R3JlbWxpbiBRdWVyeSBMYW5ndWFnZTwvaDI+CkBAIC00NjMsNyArNTQ1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImJ0biBidG4tdGhlbWUgYnRuLWN1c3QiIGhyZWY9ImdyZW1saW4uaHRtbCI+PGltZyBzcmM9ImltZy9saW5rLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCBtZS0yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJpbWciPkxlYXJuIE1vcmU8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9ImltZyI+RXhwbG9yZSBHcmVtbGluIEdyYXBoIFF1ZXJ5IExhbmd1YWdlPC9hPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgogICAgIDwvZGl2PgpAQCAtNDc1LDE2ICs1NTcsMTYgQEAKICAgICAgICAgPGRpdiBjbGFzcz0icm93IGQtZmxleCI+CiAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy0xMiI+Ci0gICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy90aW5rZXJwb3BmdXR1cmUtaG9tZS5wbmciIGNsYXNzPSJpbWctZmx1aWQgdy0xMDAiIGFsdD0iaW1nIj4KKyAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3RpbmtlcnBvcGZ1dHVyZS1ob21lLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB3LTEwMCIgYWx0PSJUaW5rZXJQb3AgQmFubmVyIj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KIDwvZGl2PgogPGRpdiBjbGFzcz0ic2VjLXBhZCBwdC0wIj4KICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgZC1mbGV4Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgZC1mbGV4Ij4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02IG1iLTQgbWItbGctMCI+Ci0gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC0zMCBib2xkIGJsYWNrIG1iLTMgIj5CZW5lZml0cyAmIFVzZSBDYXNlczwvaDI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJmdC0zMCBib2xkIGJsYWNrIG1iLTMgbXQtNCI+QmVuZWZpdHMgJiBVc2UgQ2FzZXM8L2gyPgogICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0zIj5BIGdyYXBoIGlzIGEgc3RydWN0dXJlIGNvbXBvc2VkIG9mIHZlcnRpY2VzIGFuZCBlZGdlcy4gQm90aCB2ZXJ0aWNlcyBhbmQgZWRnZXMgY2FuIGhhdmUKICAgICAgICAgICAgICAgICAgICAgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBrZXkvdmFsdWUtcGFpcnMgY2FsbGVkIHByb3BlcnRpZXMuIFZlcnRpY2VzIGRlbm90ZSBkaXNjcmV0ZSBvYmplY3RzIHN1Y2ggYXMgYQogICAgICAgICAgICAgICAgICAgICBwZXJzb24sIGEgcGxhY2UsIG9yIGFuIGV2ZW50LiBFZGdlcyBkZW5vdGUgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZlcnRpY2VzLiBGb3IgaW5zdGFuY2UsIGEgcGVyc29uCkBAIC00OTUsNyArNTc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYSBncmFwaCwgZWFjaCB2ZXJ0ZXggaXMgc2VlbiBhcyBhbiBhdG9taWMgZW50aXR5IChub3Qgc2ltcGx5IGEgInJvdyBpbiBhIHRhYmxlIikgdGhhdCBjYW4gYmUgbGlua2VkCiAgICAgICAgICAgICAgICAgICAgIHRvIGFueSBvdGhlciB2ZXJ0ZXggb3IgaGF2ZSBwcm9wZXJ0aWVzIGFkZGVkIG9yIHJlbW92ZWQgYXQgd2lsbC48L3A+CiAKLSAgICAgICAgICAgICAgICA8YSBocmVmPSJiZW5lZml0cy11c2UtY2FzZXMuaHRtbCIgY2xhc3M9InRleHQtYmx1ZSBmdC0xNyI+PHU+TGVhcm4gTW9yZTwvdT48L2E+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iYmVuZWZpdHMtdXNlLWNhc2VzLmh0bWwiIGNsYXNzPSJ0ZXh0LWJsdWUgZnQtMTciPjx1PkV4cGxvcmUgR3JhcGggRGF0YWJhc2UgQmVuZWZpdHMgJiBVc2UgQ2FzZXM8L3U+PC9hPgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbGctNiAgIj4KICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImZ0LTMwIGJvbGQgYmxhY2sgbWItMyI+SG93IHRvIHVzZSBUaW5rZXJQb3A8L2gyPgpAQCAtNTA1LDcgKzU4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMiB0ZXh0LWJsdWUgYm9sZCI+RGF0YWJhc2UgU3VwcG9ydDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0yIj5UaW5rZXJQb3AgaXMgd2lkZWx5IHN1cHBvcnRlZCBieSBtb3JlIHRoYW4gdHdvIGRvemVuIGNvbW1lcmNpYWwgYW5kIG9wZW4gc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGggZGF0YWJhc2VzPC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0icHJvdmlkZXJzLmh0bWwiIGNsYXNzPSJ0ZXh0LWJsdWUgZnQtMTciPjx1PkxlYXJuIE1vcmU8L3U+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0icHJvdmlkZXJzLmh0bWwiIGNsYXNzPSJ0ZXh0LWJsdWUgZnQtMTciPjx1PkV4cGxvcmUgR3JhcGggRGF0YWJhc2UgUHJvdmlkZXJzPC91PjwvYT4KICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAKQEAgLTUxNyw3ICs1OTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVKUyB3aXRoIGFkZGl0aW9uYWwgZHJpdmVycyBwcm92aWRlZCB0aHJvdWdoIGNvbW11bml0eSBjb250cmlidXRpb25zPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTIiPlRoZXJlIGlzIGEgd2lkZSBhcnJheSBvZiB0aGlyZC1wYXJ0eSBtYW5hZ2VkIHRvb2xzIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW5rZXJQb3AtY29tcGF0aWJsZTwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImNvbW11bml0eS5odG1sIiBjbGFzcz0idGV4dC1ibHVlIGZ0LTE3Ij48dT5MZWFybiBNb3JlPC91PjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImNvbW11bml0eS5odG1sIiBjbGFzcz0idGV4dC1ibHVlIGZ0LTE3Ij48dT5FeHBsb3JlIEdyYXBoIFByb2dyYW1taW5nIExhbmd1YWdlcyAmIFRvb2xzPC91PjwvYT4KICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KQEAgLTgwMyw3ICs4ODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+VmFsZW50eW4gS2FoYW1seWsgPC9hPjxzcGFuIGNsYXNzPSJtZWRpdW0iPihDb21taXR0ZXIpPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMCI+PHNwYW4gY2xhc3M9Im1lZGl1bSI+WWVhciA6IDIwMjI8L3NwYW4+PC9wPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0wIj5HbyBhbmQgUHl0aG9uIEdMViBkZXZlbG9wbWVudCwgPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0wIj5HcmVtbGluTGFuZywgVGlua2VyVHJhbnNhY3Rpb25HcmFwaCwgUHJvcGVydGllcyBvbiBFbGVtZW50cywgc29tZSBTdGVwczwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTYiPgpAQCAtODI5LDEwICs5MTEsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAiPjxhIGNsYXNzPSJtZWRpdW0gdGV4dC1ibHVlIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vQ29sZS1HcmVlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PSJfYmxhbmsiPkNvbGUgR3JlZXIgPC9hPjxzcGFuIGNsYXNzPSJtZWRpdW0iPihDb21taXR0ZXIpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9Il9ibGFuayI+Q29sZSBHcmVlciA8L2E+PHNwYW4gY2xhc3M9Im1lZGl1bSI+KFBNQyk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0wIj48c3BhbiBjbGFzcz0ibWVkaXVtIj5ZZWFyIDogMjAyMzwvc3Bhbj48L3A+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAiPkFSTSBTdXBwb3J0LCBHZW5lcmFsIE1haW50ZW5hbmNlIG9mIFNlcnZlci9Db3JlL0dMVnM8L3A+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAiPkdyZW1saW4gbGFuZ3VhZ2UsIEdlbmVyYWwgTWFpbnRlbmFuY2Ugb2YgU2VydmVyL0NvcmUvR0xWczwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLWxnLTYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWItMyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAiPjxhIGNsYXNzPSJtZWRpdW0gdGV4dC1ibHVlIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYW5kcmVhY2hpbGQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIj5BbmRyZWEgQ2hpbGQgPC9hPjxzcGFuIGNsYXNzPSJtZWRpdW0iPihDb21taXR0ZXIpPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMCI+PHNwYW4gY2xhc3M9Im1lZGl1bSI+WWVhciA6IDIwMjU8L3NwYW4+PC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtYi0wIj5HZW5lcmFsIHByb2plY3QgbWFpbnRlbmFuY2U8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CkBAIC0xMDAzLDcgKzEwOTQsNyBAQAogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imp1LWJveCI+CiAgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iZnQtNDAgdGV4dC1ibHVlIGJvbGQiPkpvaW4gVXM8L2gyPgogICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYm9sZCI+Sm9pbiB1cyBvbiBvdXIgRGlzY29yZCBTZXJ2ZXI8L3A+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHB2ZXd4LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtdC0zIiBhbHQ9ImltZyI+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvdHB2ZXd4LnBuZyIgY2xhc3M9ImltZy1mbHVpZCBtdC0zIiBhbHQ9IkRpc2NvcmQgbG9nbyI+PC9hPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgpAQCAtMTAxOSwxMSArMTExMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib2xkIGZ0LTI1Ij5BcGFjaGUgVGlua2VyUG9w4oSiPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJtdC0yIG1iLTQiPkFwYWNoZSBUaW5rZXJQb3DihKIgaXMgYSBncmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGZvciBib3RoIGdyYXBoIGRhdGFiYXNlcyAoT0xUUCkgYW5kIGdyYXBoIGFuYWx5dGljIHN5c3RlbXMgKE9MQVApLjwvcD4KICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lIGhvdmVyLW9wLWxvdyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL2Rpc2NvcmQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC9naXRodWItYm94LnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0Y2gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0dGVyLXNxdWFyZS5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwveW91dHViZS5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZGlzY29yZC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIERpc2NvcmQiPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZ2l0aHViLWJveC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIEdpdEh1YiI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnR3aXRjaC50di9hcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3R3aXRjaC5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIFR3aXRjaCI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0dGVyLXNxdWFyZS5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIFR3aXR0ZXIiPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC95b3V0dWJlLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJUaW5rZXJQb3AgWW91VHViZSI+PC9hPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQgZnQtbGlua3MiPgpAQCAtMTA2NSwxMSArMTE1NiwxMCBAQAogICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KIDwvZm9vdGVyPgotPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS0xLjExLjEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJqcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ianMvd293Lm1pbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ianMvbXkuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9ImpzL3ByaXNtLmpzIj48L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KLQpkaWZmIC0tZ2l0IGEvZG9jcy9zaXRlL2hvbWUvanMvanF1ZXJ5LTEuMTEuMS5qcyBiL2RvY3Mvc2l0ZS9ob21lL2pzL2pxdWVyeS0xLjExLjEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4N2JmZGMuLjAwMDAwMDAKLS0tIGEvZG9jcy9zaXRlL2hvbWUvanMvanF1ZXJ5LTEuMTEuMS5qcworKysgL2Rldi9udWxsCkBAIC0xLDYzOSArMCwwIEBACi0oZnVuY3Rpb24oZ2xvYmFsLGZhY3Rvcnkpe2lmKHR5cGVvZiBtb2R1bGU9PT0ib2JqZWN0IiYmdHlwZW9mIG1vZHVsZS5leHBvcnRzPT09Im9iamVjdCIpe21vZHVsZS5leHBvcnRzPWdsb2JhbC5kb2N1bWVudD9mYWN0b3J5KGdsb2JhbCx0cnVlKTpmdW5jdGlvbih3KXtpZighdy5kb2N1bWVudCl7dGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7fQotcmV0dXJuIGZhY3Rvcnkodyk7fTt9ZWxzZXtmYWN0b3J5KGdsb2JhbCk7fX0odHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiP3dpbmRvdzp0aGlzLGZ1bmN0aW9uKHdpbmRvdyxub0dsb2JhbCl7dmFyIGRlbGV0ZWRJZHM9W107dmFyIHNsaWNlPWRlbGV0ZWRJZHMuc2xpY2U7dmFyIGNvbmNhdD1kZWxldGVkSWRzLmNvbmNhdDt2YXIgcHVzaD1kZWxldGVkSWRzLnB1c2g7dmFyIGluZGV4T2Y9ZGVsZXRlZElkcy5pbmRleE9mO3ZhciBjbGFzczJ0eXBlPXt9O3ZhciB0b1N0cmluZz1jbGFzczJ0eXBlLnRvU3RyaW5nO3ZhciBoYXNPd249Y2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgc3VwcG9ydD17fTt2YXIKLXZlcnNpb249IjEuMTEuMSIsalF1ZXJ5PWZ1bmN0aW9uKHNlbGVjdG9yLGNvbnRleHQpe3JldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoc2VsZWN0b3IsY29udGV4dCk7fSxydHJpbT0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscm1zUHJlZml4PS9eLW1zLS8scmRhc2hBbHBoYT0vLShbXGRhLXpdKS9naSxmY2FtZWxDYXNlPWZ1bmN0aW9uKGFsbCxsZXR0ZXIpe3JldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTt9O2pRdWVyeS5mbj1qUXVlcnkucHJvdG90eXBlPXtqcXVlcnk6dmVyc2lvbixjb25zdHJ1Y3RvcjpqUXVlcnksc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBzbGljZS5jYWxsKHRoaXMpO30sZ2V0OmZ1bmN0aW9uKG51bSl7cmV0dXJuIG51bSE9bnVsbD8obnVtPDA/dGhpc1tudW0rdGhpcy5sZW5ndGhdOnRoaXNbbnVtXSk6c2xpY2UuY2FsbCh0aGlzKTt9LHB1c2hTdGFjazpmdW5jdGlvbihlbGVtcyl7dmFyIHJldD1qUXVlcnkubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGVsZW1zKTtyZXQucHJldk9iamVjdD10aGlzO3JldC5jb250ZXh0PXRoaXMuY29udGV4dDtyZXR1cm4gcmV0O30sZWFjaDpmdW5jdGlvbihjYWxsYmFjayxhcmdzKXtyZXR1cm4galF1ZXJ5LmVhY2godGhpcyxjYWxsYmFjayxhcmdzKTt9LG1hcDpmdW5jdGlvbihjYWxsYmFjayl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS5tYXAodGhpcyxmdW5jdGlvbihlbGVtLGkpe3JldHVybiBjYWxsYmFjay5jYWxsKGVsZW0saSxlbGVtKTt9KSk7fSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhzbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpO30sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKTt9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSk7fSxlcTpmdW5jdGlvbihpKXt2YXIgbGVuPXRoaXMubGVuZ3RoLGo9K2krKGk8MD9sZW46MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGo+PTAmJmo8bGVuP1t0aGlzW2pdXTpbXSk7fSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpO30scHVzaDpwdXNoLHNvcnQ6ZGVsZXRlZElkcy5zb3J0LHNwbGljZTpkZWxldGVkSWRzLnNwbGljZX07alF1ZXJ5LmV4dGVuZD1qUXVlcnkuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIHNyYyxjb3B5SXNBcnJheSxjb3B5LG5hbWUsb3B0aW9ucyxjbG9uZSx0YXJnZXQ9YXJndW1lbnRzWzBdfHx7fSxpPTEsbGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGgsZGVlcD1mYWxzZTtpZih0eXBlb2YgdGFyZ2V0PT09ImJvb2xlYW4iKXtkZWVwPXRhcmdldDt0YXJnZXQ9YXJndW1lbnRzW2ldfHx7fTtpKys7fQotaWYodHlwZW9mIHRhcmdldCE9PSJvYmplY3QiJiYhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSl7dGFyZ2V0PXt9O30KLWlmKGk9PT1sZW5ndGgpe3RhcmdldD10aGlzO2ktLTt9Ci1mb3IoO2k8bGVuZ3RoO2krKyl7aWYoKG9wdGlvbnM9YXJndW1lbnRzW2ldKSE9bnVsbCl7Zm9yKG5hbWUgaW4gb3B0aW9ucyl7c3JjPXRhcmdldFtuYW1lXTtjb3B5PW9wdGlvbnNbbmFtZV07aWYodGFyZ2V0PT09Y29weSl7Y29udGludWU7fQotaWYoZGVlcCYmY29weSYmKGpRdWVyeS5pc1BsYWluT2JqZWN0KGNvcHkpfHwoY29weUlzQXJyYXk9alF1ZXJ5LmlzQXJyYXkoY29weSkpKSl7aWYoY29weUlzQXJyYXkpe2NvcHlJc0FycmF5PWZhbHNlO2Nsb25lPXNyYyYmalF1ZXJ5LmlzQXJyYXkoc3JjKT9zcmM6W107fWVsc2V7Y2xvbmU9c3JjJiZqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpP3NyYzp7fTt9Ci10YXJnZXRbbmFtZV09alF1ZXJ5LmV4dGVuZChkZWVwLGNsb25lLGNvcHkpO31lbHNlIGlmKGNvcHkhPT11bmRlZmluZWQpe3RhcmdldFtuYW1lXT1jb3B5O319fX0KLXJldHVybiB0YXJnZXQ7fTtqUXVlcnkuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyh2ZXJzaW9uK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6dHJ1ZSxlcnJvcjpmdW5jdGlvbihtc2cpe3Rocm93IG5ldyBFcnJvcihtc2cpO30sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlvbihvYmope3JldHVybiBqUXVlcnkudHlwZShvYmopPT09ImZ1bmN0aW9uIjt9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24ob2JqKXtyZXR1cm4galF1ZXJ5LnR5cGUob2JqKT09PSJhcnJheSI7fSxpc1dpbmRvdzpmdW5jdGlvbihvYmope3JldHVybiBvYmohPW51bGwmJm9iaj09b2JqLndpbmRvdzt9LGlzTnVtZXJpYzpmdW5jdGlvbihvYmope3JldHVybiFqUXVlcnkuaXNBcnJheShvYmopJiZvYmotcGFyc2VGbG9hdChvYmopPj0wO30saXNFbXB0eU9iamVjdDpmdW5jdGlvbihvYmope3ZhciBuYW1lO2ZvcihuYW1lIGluIG9iail7cmV0dXJuIGZhbHNlO30KLXJldHVybiB0cnVlO30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihvYmope3ZhciBrZXk7aWYoIW9ianx8alF1ZXJ5LnR5cGUob2JqKSE9PSJvYmplY3QifHxvYmoubm9kZVR5cGV8fGpRdWVyeS5pc1dpbmRvdyhvYmopKXtyZXR1cm4gZmFsc2U7fQotdHJ5e2lmKG9iai5jb25zdHJ1Y3RvciYmIWhhc093bi5jYWxsKG9iaiwiY29uc3RydWN0b3IiKSYmIWhhc093bi5jYWxsKG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSl7cmV0dXJuIGZhbHNlO319Y2F0Y2goZSl7cmV0dXJuIGZhbHNlO30KLWlmKHN1cHBvcnQub3duTGFzdCl7Zm9yKGtleSBpbiBvYmope3JldHVybiBoYXNPd24uY2FsbChvYmosa2V5KTt9fQotZm9yKGtleSBpbiBvYmope30KLXJldHVybiBrZXk9PT11bmRlZmluZWR8fGhhc093bi5jYWxsKG9iaixrZXkpO30sdHlwZTpmdW5jdGlvbihvYmope2lmKG9iaj09bnVsbCl7cmV0dXJuIG9iaisiIjt9Ci1yZXR1cm4gdHlwZW9mIG9iaj09PSJvYmplY3QifHx0eXBlb2Ygb2JqPT09ImZ1bmN0aW9uIj9jbGFzczJ0eXBlW3RvU3RyaW5nLmNhbGwob2JqKV18fCJvYmplY3QiOnR5cGVvZiBvYmo7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGRhdGEpe2lmKGRhdGEmJmpRdWVyeS50cmltKGRhdGEpKXsod2luZG93LmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGRhdGEpe3dpbmRvd1siZXZhbCJdLmNhbGwod2luZG93LGRhdGEpO30pKGRhdGEpO319LGNhbWVsQ2FzZTpmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcucmVwbGFjZShybXNQcmVmaXgsIm1zLSIpLnJlcGxhY2UocmRhc2hBbHBoYSxmY2FtZWxDYXNlKTt9LG5vZGVOYW1lOmZ1bmN0aW9uKGVsZW0sbmFtZSl7cmV0dXJuIGVsZW0ubm9kZU5hbWUmJmVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PW5hbWUudG9Mb3dlckNhc2UoKTt9LGVhY2g6ZnVuY3Rpb24ob2JqLGNhbGxiYWNrLGFyZ3Mpe3ZhciB2YWx1ZSxpPTAsbGVuZ3RoPW9iai5sZW5ndGgsaXNBcnJheT1pc0FycmF5bGlrZShvYmopO2lmKGFyZ3Mpe2lmKGlzQXJyYXkpe2Zvcig7aTxsZW5ndGg7aSsrKXt2YWx1ZT1jYWxsYmFjay5hcHBseShvYmpbaV0sYXJncyk7aWYodmFsdWU9PT1mYWxzZSl7YnJlYWs7fX19ZWxzZXtmb3IoaSBpbiBvYmope3ZhbHVlPWNhbGxiYWNrLmFwcGx5KG9ialtpXSxhcmdzKTtpZih2YWx1ZT09PWZhbHNlKXticmVhazt9fX19ZWxzZXtpZihpc0FycmF5KXtmb3IoO2k8bGVuZ3RoO2krKyl7dmFsdWU9Y2FsbGJhY2suY2FsbChvYmpbaV0saSxvYmpbaV0pO2lmKHZhbHVlPT09ZmFsc2Upe2JyZWFrO319fWVsc2V7Zm9yKGkgaW4gb2JqKXt2YWx1ZT1jYWxsYmFjay5jYWxsKG9ialtpXSxpLG9ialtpXSk7aWYodmFsdWU9PT1mYWxzZSl7YnJlYWs7fX19fQotcmV0dXJuIG9iajt9LHRyaW06ZnVuY3Rpb24odGV4dCl7cmV0dXJuIHRleHQ9PW51bGw/IiI6KHRleHQrIiIpLnJlcGxhY2UocnRyaW0sIiIpO30sbWFrZUFycmF5OmZ1bmN0aW9uKGFycixyZXN1bHRzKXt2YXIgcmV0PXJlc3VsdHN8fFtdO2lmKGFyciE9bnVsbCl7aWYoaXNBcnJheWxpa2UoT2JqZWN0KGFycikpKXtqUXVlcnkubWVyZ2UocmV0LHR5cGVvZiBhcnI9PT0ic3RyaW5nIj9bYXJyXTphcnIpO31lbHNle3B1c2guY2FsbChyZXQsYXJyKTt9fQotcmV0dXJuIHJldDt9LGluQXJyYXk6ZnVuY3Rpb24oZWxlbSxhcnIsaSl7dmFyIGxlbjtpZihhcnIpe2lmKGluZGV4T2Ype3JldHVybiBpbmRleE9mLmNhbGwoYXJyLGVsZW0saSk7fQotbGVuPWFyci5sZW5ndGg7aT1pP2k8MD9NYXRoLm1heCgwLGxlbitpKTppOjA7Zm9yKDtpPGxlbjtpKyspe2lmKGkgaW4gYXJyJiZhcnJbaV09PT1lbGVtKXtyZXR1cm4gaTt9fX0KLXJldHVybi0xO30sbWVyZ2U6ZnVuY3Rpb24oZmlyc3Qsc2Vjb25kKXt2YXIgbGVuPStzZWNvbmQubGVuZ3RoLGo9MCxpPWZpcnN0Lmxlbmd0aDt3aGlsZShqPGxlbil7Zmlyc3RbaSsrXT1zZWNvbmRbaisrXTt9Ci1pZihsZW4hPT1sZW4pe3doaWxlKHNlY29uZFtqXSE9PXVuZGVmaW5lZCl7Zmlyc3RbaSsrXT1zZWNvbmRbaisrXTt9fQotZmlyc3QubGVuZ3RoPWk7cmV0dXJuIGZpcnN0O30sZ3JlcDpmdW5jdGlvbihlbGVtcyxjYWxsYmFjayxpbnZlcnQpe3ZhciBjYWxsYmFja0ludmVyc2UsbWF0Y2hlcz1bXSxpPTAsbGVuZ3RoPWVsZW1zLmxlbmd0aCxjYWxsYmFja0V4cGVjdD0haW52ZXJ0O2Zvcig7aTxsZW5ndGg7aSsrKXtjYWxsYmFja0ludmVyc2U9IWNhbGxiYWNrKGVsZW1zW2ldLGkpO2lmKGNhbGxiYWNrSW52ZXJzZSE9PWNhbGxiYWNrRXhwZWN0KXttYXRjaGVzLnB1c2goZWxlbXNbaV0pO319Ci1yZXR1cm4gbWF0Y2hlczt9LG1hcDpmdW5jdGlvbihlbGVtcyxjYWxsYmFjayxhcmcpe3ZhciB2YWx1ZSxpPTAsbGVuZ3RoPWVsZW1zLmxlbmd0aCxpc0FycmF5PWlzQXJyYXlsaWtlKGVsZW1zKSxyZXQ9W107aWYoaXNBcnJheSl7Zm9yKDtpPGxlbmd0aDtpKyspe3ZhbHVlPWNhbGxiYWNrKGVsZW1zW2ldLGksYXJnKTtpZih2YWx1ZSE9bnVsbCl7cmV0LnB1c2godmFsdWUpO319fWVsc2V7Zm9yKGkgaW4gZWxlbXMpe3ZhbHVlPWNhbGxiYWNrKGVsZW1zW2ldLGksYXJnKTtpZih2YWx1ZSE9bnVsbCl7cmV0LnB1c2godmFsdWUpO319fQotcmV0dXJuIGNvbmNhdC5hcHBseShbXSxyZXQpO30sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGZuLGNvbnRleHQpe3ZhciBhcmdzLHByb3h5LHRtcDtpZih0eXBlb2YgY29udGV4dD09PSJzdHJpbmciKXt0bXA9Zm5bY29udGV4dF07Y29udGV4dD1mbjtmbj10bXA7fQotaWYoIWpRdWVyeS5pc0Z1bmN0aW9uKGZuKSl7cmV0dXJuIHVuZGVmaW5lZDt9Ci1hcmdzPXNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO3Byb3h5PWZ1bmN0aW9uKCl7cmV0dXJuIGZuLmFwcGx5KGNvbnRleHR8fHRoaXMsYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7fTtwcm94eS5ndWlkPWZuLmd1aWQ9Zm4uZ3VpZHx8alF1ZXJ5Lmd1aWQrKztyZXR1cm4gcHJveHk7fSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4rKG5ldyBEYXRlKCkpO30sc3VwcG9ydDpzdXBwb3J0fSk7alF1ZXJ5LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oaSxuYW1lKXtjbGFzczJ0eXBlWyJbb2JqZWN0ICIrbmFtZSsiXSJdPW5hbWUudG9Mb3dlckNhc2UoKTt9KTtmdW5jdGlvbiBpc0FycmF5bGlrZShvYmope3ZhciBsZW5ndGg9b2JqLmxlbmd0aCx0eXBlPWpRdWVyeS50eXBlKG9iaik7aWYodHlwZT09PSJmdW5jdGlvbiJ8fGpRdWVyeS5pc1dpbmRvdyhvYmopKXtyZXR1cm4gZmFsc2U7fQotaWYob2JqLm5vZGVUeXBlPT09MSYmbGVuZ3RoKXtyZXR1cm4gdHJ1ZTt9Ci1yZXR1cm4gdHlwZT09PSJhcnJheSJ8fGxlbmd0aD09PTB8fHR5cGVvZiBsZW5ndGg9PT0ibnVtYmVyIiYmbGVuZ3RoPjAmJihsZW5ndGgtMSlpbiBvYmo7fQotdmFyIFNpenpsZT0oZnVuY3Rpb24od2luZG93KXt2YXIgaSxzdXBwb3J0LEV4cHIsZ2V0VGV4dCxpc1hNTCx0b2tlbml6ZSxjb21waWxlLHNlbGVjdCxvdXRlcm1vc3RDb250ZXh0LHNvcnRJbnB1dCxoYXNEdXBsaWNhdGUsc2V0RG9jdW1lbnQsZG9jdW1lbnQsZG9jRWxlbSxkb2N1bWVudElzSFRNTCxyYnVnZ3lRU0EscmJ1Z2d5TWF0Y2hlcyxtYXRjaGVzLGNvbnRhaW5zLGV4cGFuZG89InNpenpsZSIrLShuZXcgRGF0ZSgpKSxwcmVmZXJyZWREb2M9d2luZG93LmRvY3VtZW50LGRpcnJ1bnM9MCxkb25lPTAsY2xhc3NDYWNoZT1jcmVhdGVDYWNoZSgpLHRva2VuQ2FjaGU9Y3JlYXRlQ2FjaGUoKSxjb21waWxlckNhY2hlPWNyZWF0ZUNhY2hlKCksc29ydE9yZGVyPWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2hhc0R1cGxpY2F0ZT10cnVlO30KLXJldHVybiAwO30sc3RydW5kZWZpbmVkPXR5cGVvZiB1bmRlZmluZWQsTUFYX05FR0FUSVZFPTE8PDMxLGhhc093bj0oe30pLmhhc093blByb3BlcnR5LGFycj1bXSxwb3A9YXJyLnBvcCxwdXNoX25hdGl2ZT1hcnIucHVzaCxwdXNoPWFyci5wdXNoLHNsaWNlPWFyci5zbGljZSxpbmRleE9mPWFyci5pbmRleE9mfHxmdW5jdGlvbihlbGVtKXt2YXIgaT0wLGxlbj10aGlzLmxlbmd0aDtmb3IoO2k8bGVuO2krKyl7aWYodGhpc1tpXT09PWVsZW0pe3JldHVybiBpO319Ci1yZXR1cm4tMTt9LGJvb2xlYW5zPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsd2hpdGVzcGFjZT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsY2hhcmFjdGVyRW5jb2Rpbmc9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixpZGVudGlmaWVyPWNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoInciLCJ3IyIpLGF0dHJpYnV0ZXM9IlxcWyIrd2hpdGVzcGFjZSsiKigiK2NoYXJhY3RlckVuY29kaW5nKyIpKD86Iit3aGl0ZXNwYWNlKyIqKFsqXiR8IX5dPz0pIit3aGl0ZXNwYWNlKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIraWRlbnRpZmllcisiKSl8KSIrd2hpdGVzcGFjZSsiKlxcXSIscHNldWRvcz0iOigiK2NoYXJhY3RlckVuY29kaW5nKyIpKD86XFwoKCIrIignKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8IisiKCg/OlxcXFwufFteXFxcXCgpW1xcXV18IithdHRyaWJ1dGVzKyIpKil8IisiLioiKyIpXFwpfCkiLHJ0cmltPW5ldyBSZWdFeHAoIl4iK3doaXRlc3BhY2UrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrd2hpdGVzcGFjZSsiKyQiLCJnIikscmNvbW1hPW5ldyBSZWdFeHAoIl4iK3doaXRlc3BhY2UrIiosIit3aGl0ZXNwYWNlKyIqIikscmNvbWJpbmF0b3JzPW5ldyBSZWdFeHAoIl4iK3doaXRlc3BhY2UrIiooWz4rfl18Iit3aGl0ZXNwYWNlKyIpIit3aGl0ZXNwYWNlKyIqIikscmF0dHJpYnV0ZVF1b3Rlcz1uZXcgUmVnRXhwKCI9Iit3aGl0ZXNwYWNlKyIqKFteXFxdJ1wiXSo/KSIrd2hpdGVzcGFjZSsiKlxcXSIsImciKSxycHNldWRvPW5ldyBSZWdFeHAocHNldWRvcykscmlkZW50aWZpZXI9bmV3IFJlZ0V4cCgiXiIraWRlbnRpZmllcisiJCIpLG1hdGNoRXhwcj17IklEIjpuZXcgUmVnRXhwKCJeIygiK2NoYXJhY3RlckVuY29kaW5nKyIpIiksIkNMQVNTIjpuZXcgUmVnRXhwKCJeXFwuKCIrY2hhcmFjdGVyRW5jb2RpbmcrIikiKSwiVEFHIjpuZXcgUmVnRXhwKCJeKCIrY2hhcmFjdGVyRW5jb2RpbmcucmVwbGFjZSgidyIsIncqIikrIikiKSwiQVRUUiI6bmV3IFJlZ0V4cCgiXiIrYXR0cmlidXRlcyksIlBTRVVETyI6bmV3IFJlZ0V4cCgiXiIrcHNldWRvcyksIkNISUxEIjpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK3doaXRlc3BhY2UrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK3doaXRlc3BhY2UrIiooPzooWystXXwpIit3aGl0ZXNwYWNlKyIqKFxcZCspfCkpIit3aGl0ZXNwYWNlKyIqXFwpfCkiLCJpIiksImJvb2wiOm5ldyBSZWdFeHAoIl4oPzoiK2Jvb2xlYW5zKyIpJCIsImkiKSwibmVlZHNDb250ZXh0IjpuZXcgUmVnRXhwKCJeIit3aGl0ZXNwYWNlKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK3doaXRlc3BhY2UrIiooKD86LVxcZCk/XFxkKikiK3doaXRlc3BhY2UrIipcXCl8KSg/PVteLV18JCkiLCJpIil9LHJpbnB1dHM9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxyaGVhZGVyPS9eaFxkJC9pLHJuYXRpdmU9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLHJxdWlja0V4cHI9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxyc2libGluZz0vWyt+XS8scmVzY2FwZT0vJ3xcXC9nLHJ1bmVzY2FwZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK3doaXRlc3BhY2UrIj98KCIrd2hpdGVzcGFjZSsiKXwuKSIsImlnIiksZnVuZXNjYXBlPWZ1bmN0aW9uKF8sZXNjYXBlZCxlc2NhcGVkV2hpdGVzcGFjZSl7dmFyIGhpZ2g9IjB4Iitlc2NhcGVkLTB4MTAwMDA7cmV0dXJuIGhpZ2ghPT1oaWdofHxlc2NhcGVkV2hpdGVzcGFjZT9lc2NhcGVkOmhpZ2g8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKGhpZ2grMHgxMDAwMCk6U3RyaW5nLmZyb21DaGFyQ29kZShoaWdoPj4xMHwweEQ4MDAsaGlnaCYweDNGRnwweERDMDApO307dHJ5e3B1c2guYXBwbHkoKGFycj1zbGljZS5jYWxsKHByZWZlcnJlZERvYy5jaGlsZE5vZGVzKSkscHJlZmVycmVkRG9jLmNoaWxkTm9kZXMpO2FycltwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlO31jYXRjaChlKXtwdXNoPXthcHBseTphcnIubGVuZ3RoP2Z1bmN0aW9uKHRhcmdldCxlbHMpe3B1c2hfbmF0aXZlLmFwcGx5KHRhcmdldCxzbGljZS5jYWxsKGVscykpO306ZnVuY3Rpb24odGFyZ2V0LGVscyl7dmFyIGo9dGFyZ2V0Lmxlbmd0aCxpPTA7d2hpbGUoKHRhcmdldFtqKytdPWVsc1tpKytdKSl7fQotdGFyZ2V0Lmxlbmd0aD1qLTE7fX07fQotZnVuY3Rpb24gU2l6emxlKHNlbGVjdG9yLGNvbnRleHQscmVzdWx0cyxzZWVkKXt2YXIgbWF0Y2gsZWxlbSxtLG5vZGVUeXBlLGksZ3JvdXBzLG9sZCxuaWQsbmV3Q29udGV4dCxuZXdTZWxlY3RvcjtpZigoY29udGV4dD9jb250ZXh0Lm93bmVyRG9jdW1lbnR8fGNvbnRleHQ6cHJlZmVycmVkRG9jKSE9PWRvY3VtZW50KXtzZXREb2N1bWVudChjb250ZXh0KTt9Ci1jb250ZXh0PWNvbnRleHR8fGRvY3VtZW50O3Jlc3VsdHM9cmVzdWx0c3x8W107aWYoIXNlbGVjdG9yfHx0eXBlb2Ygc2VsZWN0b3IhPT0ic3RyaW5nIil7cmV0dXJuIHJlc3VsdHM7fQotaWYoKG5vZGVUeXBlPWNvbnRleHQubm9kZVR5cGUpIT09MSYmbm9kZVR5cGUhPT05KXtyZXR1cm5bXTt9Ci1pZihkb2N1bWVudElzSFRNTCYmIXNlZWQpe2lmKChtYXRjaD1ycXVpY2tFeHByLmV4ZWMoc2VsZWN0b3IpKSl7aWYoKG09bWF0Y2hbMV0pKXtpZihub2RlVHlwZT09PTkpe2VsZW09Y29udGV4dC5nZXRFbGVtZW50QnlJZChtKTtpZihlbGVtJiZlbGVtLnBhcmVudE5vZGUpe2lmKGVsZW0uaWQ9PT1tKXtyZXN1bHRzLnB1c2goZWxlbSk7cmV0dXJuIHJlc3VsdHM7fX1lbHNle3JldHVybiByZXN1bHRzO319ZWxzZXtpZihjb250ZXh0Lm93bmVyRG9jdW1lbnQmJihlbGVtPWNvbnRleHQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChtKSkmJmNvbnRhaW5zKGNvbnRleHQsZWxlbSkmJmVsZW0uaWQ9PT1tKXtyZXN1bHRzLnB1c2goZWxlbSk7cmV0dXJuIHJlc3VsdHM7fX19ZWxzZSBpZihtYXRjaFsyXSl7cHVzaC5hcHBseShyZXN1bHRzLGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoc2VsZWN0b3IpKTtyZXR1cm4gcmVzdWx0czt9ZWxzZSBpZigobT1tYXRjaFszXSkmJnN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtwdXNoLmFwcGx5KHJlc3VsdHMsY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG0pKTtyZXR1cm4gcmVzdWx0czt9fQotaWYoc3VwcG9ydC5xc2EmJighcmJ1Z2d5UVNBfHwhcmJ1Z2d5UVNBLnRlc3Qoc2VsZWN0b3IpKSl7bmlkPW9sZD1leHBhbmRvO25ld0NvbnRleHQ9Y29udGV4dDtuZXdTZWxlY3Rvcj1ub2RlVHlwZT09PTkmJnNlbGVjdG9yO2lmKG5vZGVUeXBlPT09MSYmY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe2dyb3Vwcz10b2tlbml6ZShzZWxlY3Rvcik7aWYoKG9sZD1jb250ZXh0LmdldEF0dHJpYnV0ZSgiaWQiKSkpe25pZD1vbGQucmVwbGFjZShyZXNjYXBlLCJcXCQmIik7fWVsc2V7Y29udGV4dC5zZXRBdHRyaWJ1dGUoImlkIixuaWQpO30KLW5pZD0iW2lkPSciK25pZCsiJ10gIjtpPWdyb3Vwcy5sZW5ndGg7d2hpbGUoaS0tKXtncm91cHNbaV09bmlkK3RvU2VsZWN0b3IoZ3JvdXBzW2ldKTt9Ci1uZXdDb250ZXh0PXJzaWJsaW5nLnRlc3Qoc2VsZWN0b3IpJiZ0ZXN0Q29udGV4dChjb250ZXh0LnBhcmVudE5vZGUpfHxjb250ZXh0O25ld1NlbGVjdG9yPWdyb3Vwcy5qb2luKCIsIik7fQotaWYobmV3U2VsZWN0b3Ipe3RyeXtwdXNoLmFwcGx5KHJlc3VsdHMsbmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKG5ld1NlbGVjdG9yKSk7cmV0dXJuIHJlc3VsdHM7fWNhdGNoKHFzYUVycm9yKXt9ZmluYWxseXtpZighb2xkKXtjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTt9fX19fQotcmV0dXJuIHNlbGVjdChzZWxlY3Rvci5yZXBsYWNlKHJ0cmltLCIkMSIpLGNvbnRleHQscmVzdWx0cyxzZWVkKTt9Ci1mdW5jdGlvbiBjcmVhdGVDYWNoZSgpe3ZhciBrZXlzPVtdO2Z1bmN0aW9uIGNhY2hlKGtleSx2YWx1ZSl7aWYoa2V5cy5wdXNoKGtleSsiICIpPkV4cHIuY2FjaGVMZW5ndGgpe2RlbGV0ZSBjYWNoZVtrZXlzLnNoaWZ0KCldO30KLXJldHVybihjYWNoZVtrZXkrIiAiXT12YWx1ZSk7fQotcmV0dXJuIGNhY2hlO30KLWZ1bmN0aW9uIG1hcmtGdW5jdGlvbihmbil7Zm5bZXhwYW5kb109dHJ1ZTtyZXR1cm4gZm47fQotZnVuY3Rpb24gYXNzZXJ0KGZuKXt2YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWZuKGRpdik7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9ZmluYWxseXtpZihkaXYucGFyZW50Tm9kZSl7ZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGl2KTt9Ci1kaXY9bnVsbDt9fQotZnVuY3Rpb24gYWRkSGFuZGxlKGF0dHJzLGhhbmRsZXIpe3ZhciBhcnI9YXR0cnMuc3BsaXQoInwiKSxpPWF0dHJzLmxlbmd0aDt3aGlsZShpLS0pe0V4cHIuYXR0ckhhbmRsZVthcnJbaV1dPWhhbmRsZXI7fX0KLWZ1bmN0aW9uIHNpYmxpbmdDaGVjayhhLGIpe3ZhciBjdXI9YiYmYSxkaWZmPWN1ciYmYS5ub2RlVHlwZT09PTEmJmIubm9kZVR5cGU9PT0xJiYofmIuc291cmNlSW5kZXh8fE1BWF9ORUdBVElWRSktKH5hLnNvdXJjZUluZGV4fHxNQVhfTkVHQVRJVkUpO2lmKGRpZmYpe3JldHVybiBkaWZmO30KLWlmKGN1cil7d2hpbGUoKGN1cj1jdXIubmV4dFNpYmxpbmcpKXtpZihjdXI9PT1iKXtyZXR1cm4tMTt9fX0KLXJldHVybiBhPzE6LTE7fQotZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8odHlwZSl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3ZhciBuYW1lPWVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbmFtZT09PSJpbnB1dCImJmVsZW0udHlwZT09PXR5cGU7fTt9Ci1mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8odHlwZSl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3ZhciBuYW1lPWVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4obmFtZT09PSJpbnB1dCJ8fG5hbWU9PT0iYnV0dG9uIikmJmVsZW0udHlwZT09PXR5cGU7fTt9Ci1mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZuKXtyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKGFyZ3VtZW50KXthcmd1bWVudD0rYXJndW1lbnQ7cmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbihzZWVkLG1hdGNoZXMpe3ZhciBqLG1hdGNoSW5kZXhlcz1mbihbXSxzZWVkLmxlbmd0aCxhcmd1bWVudCksaT1tYXRjaEluZGV4ZXMubGVuZ3RoO3doaWxlKGktLSl7aWYoc2VlZFsoaj1tYXRjaEluZGV4ZXNbaV0pXSl7c2VlZFtqXT0hKG1hdGNoZXNbal09c2VlZFtqXSk7fX19KTt9KTt9Ci1mdW5jdGlvbiB0ZXN0Q29udGV4dChjb250ZXh0KXtyZXR1cm4gY29udGV4dCYmdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1zdHJ1bmRlZmluZWQmJmNvbnRleHQ7fQotc3VwcG9ydD1TaXp6bGUuc3VwcG9ydD17fTtpc1hNTD1TaXp6bGUuaXNYTUw9ZnVuY3Rpb24oZWxlbSl7dmFyIGRvY3VtZW50RWxlbWVudD1lbGVtJiYoZWxlbS5vd25lckRvY3VtZW50fHxlbGVtKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGRvY3VtZW50RWxlbWVudD9kb2N1bWVudEVsZW1lbnQubm9kZU5hbWUhPT0iSFRNTCI6ZmFsc2U7fTtzZXREb2N1bWVudD1TaXp6bGUuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24obm9kZSl7dmFyIGhhc0NvbXBhcmUsZG9jPW5vZGU/bm9kZS5vd25lckRvY3VtZW50fHxub2RlOnByZWZlcnJlZERvYyxwYXJlbnQ9ZG9jLmRlZmF1bHRWaWV3O2lmKGRvYz09PWRvY3VtZW50fHxkb2Mubm9kZVR5cGUhPT05fHwhZG9jLmRvY3VtZW50RWxlbWVudCl7cmV0dXJuIGRvY3VtZW50O30KLWRvY3VtZW50PWRvYztkb2NFbGVtPWRvYy5kb2N1bWVudEVsZW1lbnQ7ZG9jdW1lbnRJc0hUTUw9IWlzWE1MKGRvYyk7aWYocGFyZW50JiZwYXJlbnQhPT1wYXJlbnQudG9wKXtpZihwYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcil7cGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZnVuY3Rpb24oKXtzZXREb2N1bWVudCgpO30sZmFsc2UpO31lbHNlIGlmKHBhcmVudC5hdHRhY2hFdmVudCl7cGFyZW50LmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXtzZXREb2N1bWVudCgpO30pO319Ci1zdXBwb3J0LmF0dHJpYnV0ZXM9YXNzZXJ0KGZ1bmN0aW9uKGRpdil7ZGl2LmNsYXNzTmFtZT0iaSI7cmV0dXJuIWRpdi5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpO30pO3N1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWU9YXNzZXJ0KGZ1bmN0aW9uKGRpdil7ZGl2LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVDb21tZW50KCIiKSk7cmV0dXJuIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aDt9KTtzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWU9cm5hdGl2ZS50ZXN0KGRvYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSYmYXNzZXJ0KGZ1bmN0aW9uKGRpdil7ZGl2LmlubmVySFRNTD0iPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iO2Rpdi5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSI7cmV0dXJuIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpIikubGVuZ3RoPT09Mjt9KTtzdXBwb3J0LmdldEJ5SWQ9YXNzZXJ0KGZ1bmN0aW9uKGRpdil7ZG9jRWxlbS5hcHBlbmRDaGlsZChkaXYpLmlkPWV4cGFuZG87cmV0dXJuIWRvYy5nZXRFbGVtZW50c0J5TmFtZXx8IWRvYy5nZXRFbGVtZW50c0J5TmFtZShleHBhbmRvKS5sZW5ndGg7fSk7aWYoc3VwcG9ydC5nZXRCeUlkKXtFeHByLmZpbmRbIklEIl09ZnVuY3Rpb24oaWQsY29udGV4dCl7aWYodHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQhPT1zdHJ1bmRlZmluZWQmJmRvY3VtZW50SXNIVE1MKXt2YXIgbT1jb250ZXh0LmdldEVsZW1lbnRCeUlkKGlkKTtyZXR1cm4gbSYmbS5wYXJlbnROb2RlP1ttXTpbXTt9fTtFeHByLmZpbHRlclsiSUQiXT1mdW5jdGlvbihpZCl7dmFyIGF0dHJJZD1pZC5yZXBsYWNlKHJ1bmVzY2FwZSxmdW5lc2NhcGUpO3JldHVybiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIik9PT1hdHRySWQ7fTt9O31lbHNle2RlbGV0ZSBFeHByLmZpbmRbIklEIl07RXhwci5maWx0ZXJbIklEIl09ZnVuY3Rpb24oaWQpe3ZhciBhdHRySWQ9aWQucmVwbGFjZShydW5lc2NhcGUsZnVuZXNjYXBlKTtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7dmFyIG5vZGU9dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSE9PXN0cnVuZGVmaW5lZCYmZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBub2RlJiZub2RlLnZhbHVlPT09YXR0cklkO307fTt9Ci1FeHByLmZpbmRbIlRBRyJdPXN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24odGFnLGNvbnRleHQpe2lmKHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lIT09c3RydW5kZWZpbmVkKXtyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO319OmZ1bmN0aW9uKHRhZyxjb250ZXh0KXt2YXIgZWxlbSx0bXA9W10saT0wLHJlc3VsdHM9Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWcpO2lmKHRhZz09PSIqIil7d2hpbGUoKGVsZW09cmVzdWx0c1tpKytdKSl7aWYoZWxlbS5ub2RlVHlwZT09PTEpe3RtcC5wdXNoKGVsZW0pO319Ci1yZXR1cm4gdG1wO30KLXJldHVybiByZXN1bHRzO307RXhwci5maW5kWyJDTEFTUyJdPXN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oY2xhc3NOYW1lLGNvbnRleHQpe2lmKHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1zdHJ1bmRlZmluZWQmJmRvY3VtZW50SXNIVE1MKXtyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7fX07cmJ1Z2d5TWF0Y2hlcz1bXTtyYnVnZ3lRU0E9W107aWYoKHN1cHBvcnQucXNhPXJuYXRpdmUudGVzdChkb2MucXVlcnlTZWxlY3RvckFsbCkpKXthc3NlcnQoZnVuY3Rpb24oZGl2KXtkaXYuaW5uZXJIVE1MPSI8c2VsZWN0IG1zYWxsb3djbGlwPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IjtpZihkaXYucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djbGlwXj0nJ10iKS5sZW5ndGgpe3JidWdneVFTQS5wdXNoKCJbKl4kXT0iK3doaXRlc3BhY2UrIiooPzonJ3xcIlwiKSIpO30KLWlmKCFkaXYucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCl7cmJ1Z2d5UVNBLnB1c2goIlxcWyIrd2hpdGVzcGFjZSsiKig/OnZhbHVlfCIrYm9vbGVhbnMrIikiKTt9Ci1pZighZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoKXtyYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTt9fSk7YXNzZXJ0KGZ1bmN0aW9uKGRpdil7dmFyIGlucHV0PWRvYy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2lucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpO2Rpdi5hcHBlbmRDaGlsZChpbnB1dCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpO2lmKGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCl7cmJ1Z2d5UVNBLnB1c2goIm5hbWUiK3doaXRlc3BhY2UrIipbKl4kfCF+XT89Iik7fQotaWYoIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCl7cmJ1Z2d5UVNBLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIik7fQotZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKTtyYnVnZ3lRU0EucHVzaCgiLC4qOiIpO30pO30KLWlmKChzdXBwb3J0Lm1hdGNoZXNTZWxlY3Rvcj1ybmF0aXZlLnRlc3QoKG1hdGNoZXM9ZG9jRWxlbS5tYXRjaGVzfHxkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3J8fGRvY0VsZW0ub01hdGNoZXNTZWxlY3Rvcnx8ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvcikpKSl7YXNzZXJ0KGZ1bmN0aW9uKGRpdil7c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaD1tYXRjaGVzLmNhbGwoZGl2LCJkaXYiKTttYXRjaGVzLmNhbGwoZGl2LCJbcyE9JyddOngiKTtyYnVnZ3lNYXRjaGVzLnB1c2goIiE9Iixwc2V1ZG9zKTt9KTt9Ci1yYnVnZ3lRU0E9cmJ1Z2d5UVNBLmxlbmd0aCYmbmV3IFJlZ0V4cChyYnVnZ3lRU0Euam9pbigifCIpKTtyYnVnZ3lNYXRjaGVzPXJidWdneU1hdGNoZXMubGVuZ3RoJiZuZXcgUmVnRXhwKHJidWdneU1hdGNoZXMuam9pbigifCIpKTtoYXNDb21wYXJlPXJuYXRpdmUudGVzdChkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKTtjb250YWlucz1oYXNDb21wYXJlfHxybmF0aXZlLnRlc3QoZG9jRWxlbS5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYWRvd249YS5ub2RlVHlwZT09PTk/YS5kb2N1bWVudEVsZW1lbnQ6YSxidXA9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09YnVwfHwhIShidXAmJmJ1cC5ub2RlVHlwZT09PTEmJihhZG93bi5jb250YWlucz9hZG93bi5jb250YWlucyhidXApOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYnVwKSYxNikpO306ZnVuY3Rpb24oYSxiKXtpZihiKXt3aGlsZSgoYj1iLnBhcmVudE5vZGUpKXtpZihiPT09YSl7cmV0dXJuIHRydWU7fX19Ci1yZXR1cm4gZmFsc2U7fTtzb3J0T3JkZXI9aGFzQ29tcGFyZT9mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoYXNEdXBsaWNhdGU9dHJ1ZTtyZXR1cm4gMDt9Ci12YXIgY29tcGFyZT0hYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtpZihjb21wYXJlKXtyZXR1cm4gY29tcGFyZTt9Ci1jb21wYXJlPShhLm93bmVyRG9jdW1lbnR8fGEpPT09KGIub3duZXJEb2N1bWVudHx8Yik/YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKToxO2lmKGNvbXBhcmUmMXx8KCFzdXBwb3J0LnNvcnREZXRhY2hlZCYmYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihhKT09PWNvbXBhcmUpKXtpZihhPT09ZG9jfHxhLm93bmVyRG9jdW1lbnQ9PT1wcmVmZXJyZWREb2MmJmNvbnRhaW5zKHByZWZlcnJlZERvYyxhKSl7cmV0dXJuLTE7fQotaWYoYj09PWRvY3x8Yi5vd25lckRvY3VtZW50PT09cHJlZmVycmVkRG9jJiZjb250YWlucyhwcmVmZXJyZWREb2MsYikpe3JldHVybiAxO30KLXJldHVybiBzb3J0SW5wdXQ/KGluZGV4T2YuY2FsbChzb3J0SW5wdXQsYSktaW5kZXhPZi5jYWxsKHNvcnRJbnB1dCxiKSk6MDt9Ci1yZXR1cm4gY29tcGFyZSY0Py0xOjE7fTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtoYXNEdXBsaWNhdGU9dHJ1ZTtyZXR1cm4gMDt9Ci12YXIgY3VyLGk9MCxhdXA9YS5wYXJlbnROb2RlLGJ1cD1iLnBhcmVudE5vZGUsYXA9W2FdLGJwPVtiXTtpZighYXVwfHwhYnVwKXtyZXR1cm4gYT09PWRvYz8tMTpiPT09ZG9jPzE6YXVwPy0xOmJ1cD8xOnNvcnRJbnB1dD8oaW5kZXhPZi5jYWxsKHNvcnRJbnB1dCxhKS1pbmRleE9mLmNhbGwoc29ydElucHV0LGIpKTowO31lbHNlIGlmKGF1cD09PWJ1cCl7cmV0dXJuIHNpYmxpbmdDaGVjayhhLGIpO30KLWN1cj1hO3doaWxlKChjdXI9Y3VyLnBhcmVudE5vZGUpKXthcC51bnNoaWZ0KGN1cik7fQotY3VyPWI7d2hpbGUoKGN1cj1jdXIucGFyZW50Tm9kZSkpe2JwLnVuc2hpZnQoY3VyKTt9Ci13aGlsZShhcFtpXT09PWJwW2ldKXtpKys7fQotcmV0dXJuIGk/c2libGluZ0NoZWNrKGFwW2ldLGJwW2ldKTphcFtpXT09PXByZWZlcnJlZERvYz8tMTpicFtpXT09PXByZWZlcnJlZERvYz8xOjA7fTtyZXR1cm4gZG9jO307U2l6emxlLm1hdGNoZXM9ZnVuY3Rpb24oZXhwcixlbGVtZW50cyl7cmV0dXJuIFNpenpsZShleHByLG51bGwsbnVsbCxlbGVtZW50cyk7fTtTaXp6bGUubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGVsZW0sZXhwcil7aWYoKGVsZW0ub3duZXJEb2N1bWVudHx8ZWxlbSkhPT1kb2N1bWVudCl7c2V0RG9jdW1lbnQoZWxlbSk7fQotZXhwcj1leHByLnJlcGxhY2UocmF0dHJpYnV0ZVF1b3RlcywiPSckMSddIik7aWYoc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3ImJmRvY3VtZW50SXNIVE1MJiYoIXJidWdneU1hdGNoZXN8fCFyYnVnZ3lNYXRjaGVzLnRlc3QoZXhwcikpJiYoIXJidWdneVFTQXx8IXJidWdneVFTQS50ZXN0KGV4cHIpKSl7dHJ5e3ZhciByZXQ9bWF0Y2hlcy5jYWxsKGVsZW0sZXhwcik7aWYocmV0fHxzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNofHxlbGVtLmRvY3VtZW50JiZlbGVtLmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpe3JldHVybiByZXQ7fX1jYXRjaChlKXt9fQotcmV0dXJuIFNpenpsZShleHByLGRvY3VtZW50LG51bGwsW2VsZW1dKS5sZW5ndGg+MDt9O1NpenpsZS5jb250YWlucz1mdW5jdGlvbihjb250ZXh0LGVsZW0pe2lmKChjb250ZXh0Lm93bmVyRG9jdW1lbnR8fGNvbnRleHQpIT09ZG9jdW1lbnQpe3NldERvY3VtZW50KGNvbnRleHQpO30KLXJldHVybiBjb250YWlucyhjb250ZXh0LGVsZW0pO307U2l6emxlLmF0dHI9ZnVuY3Rpb24oZWxlbSxuYW1lKXtpZigoZWxlbS5vd25lckRvY3VtZW50fHxlbGVtKSE9PWRvY3VtZW50KXtzZXREb2N1bWVudChlbGVtKTt9Ci12YXIgZm49RXhwci5hdHRySGFuZGxlW25hbWUudG9Mb3dlckNhc2UoKV0sdmFsPWZuJiZoYXNPd24uY2FsbChFeHByLmF0dHJIYW5kbGUsbmFtZS50b0xvd2VyQ2FzZSgpKT9mbihlbGVtLG5hbWUsIWRvY3VtZW50SXNIVE1MKTp1bmRlZmluZWQ7cmV0dXJuIHZhbCE9PXVuZGVmaW5lZD92YWw6c3VwcG9ydC5hdHRyaWJ1dGVzfHwhZG9jdW1lbnRJc0hUTUw/ZWxlbS5nZXRBdHRyaWJ1dGUobmFtZSk6KHZhbD1lbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpJiZ2YWwuc3BlY2lmaWVkP3ZhbC52YWx1ZTpudWxsO307U2l6emxlLmVycm9yPWZ1bmN0aW9uKG1zZyl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK21zZyk7fTtTaXp6bGUudW5pcXVlU29ydD1mdW5jdGlvbihyZXN1bHRzKXt2YXIgZWxlbSxkdXBsaWNhdGVzPVtdLGo9MCxpPTA7aGFzRHVwbGljYXRlPSFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7c29ydElucHV0PSFzdXBwb3J0LnNvcnRTdGFibGUmJnJlc3VsdHMuc2xpY2UoMCk7cmVzdWx0cy5zb3J0KHNvcnRPcmRlcik7aWYoaGFzRHVwbGljYXRlKXt3aGlsZSgoZWxlbT1yZXN1bHRzW2krK10pKXtpZihlbGVtPT09cmVzdWx0c1tpXSl7aj1kdXBsaWNhdGVzLnB1c2goaSk7fX0KLXdoaWxlKGotLSl7cmVzdWx0cy5zcGxpY2UoZHVwbGljYXRlc1tqXSwxKTt9fQotc29ydElucHV0PW51bGw7cmV0dXJuIHJlc3VsdHM7fTtnZXRUZXh0PVNpenpsZS5nZXRUZXh0PWZ1bmN0aW9uKGVsZW0pe3ZhciBub2RlLHJldD0iIixpPTAsbm9kZVR5cGU9ZWxlbS5ub2RlVHlwZTtpZighbm9kZVR5cGUpe3doaWxlKChub2RlPWVsZW1baSsrXSkpe3JldCs9Z2V0VGV4dChub2RlKTt9fWVsc2UgaWYobm9kZVR5cGU9PT0xfHxub2RlVHlwZT09PTl8fG5vZGVUeXBlPT09MTEpe2lmKHR5cGVvZiBlbGVtLnRleHRDb250ZW50PT09InN0cmluZyIpe3JldHVybiBlbGVtLnRleHRDb250ZW50O31lbHNle2ZvcihlbGVtPWVsZW0uZmlyc3RDaGlsZDtlbGVtO2VsZW09ZWxlbS5uZXh0U2libGluZyl7cmV0Kz1nZXRUZXh0KGVsZW0pO319fWVsc2UgaWYobm9kZVR5cGU9PT0zfHxub2RlVHlwZT09PTQpe3JldHVybiBlbGVtLm5vZGVWYWx1ZTt9Ci1yZXR1cm4gcmV0O307RXhwcj1TaXp6bGUuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86bWFya0Z1bmN0aW9uLG1hdGNoOm1hdGNoRXhwcixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDp0cnVlfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OnRydWV9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOnsiQVRUUiI6ZnVuY3Rpb24obWF0Y2gpe21hdGNoWzFdPW1hdGNoWzFdLnJlcGxhY2UocnVuZXNjYXBlLGZ1bmVzY2FwZSk7bWF0Y2hbM109KG1hdGNoWzNdfHxtYXRjaFs0XXx8bWF0Y2hbNV18fCIiKS5yZXBsYWNlKHJ1bmVzY2FwZSxmdW5lc2NhcGUpO2lmKG1hdGNoWzJdPT09In49Iil7bWF0Y2hbM109IiAiK21hdGNoWzNdKyIgIjt9Ci1yZXR1cm4gbWF0Y2guc2xpY2UoMCw0KTt9LCJDSElMRCI6ZnVuY3Rpb24obWF0Y2gpe21hdGNoWzFdPW1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7aWYobWF0Y2hbMV0uc2xpY2UoMCwzKT09PSJudGgiKXtpZighbWF0Y2hbM10pe1NpenpsZS5lcnJvcihtYXRjaFswXSk7fQotbWF0Y2hbNF09KyhtYXRjaFs0XT9tYXRjaFs1XSsobWF0Y2hbNl18fDEpOjIqKG1hdGNoWzNdPT09ImV2ZW4ifHxtYXRjaFszXT09PSJvZGQiKSk7bWF0Y2hbNV09KygobWF0Y2hbN10rbWF0Y2hbOF0pfHxtYXRjaFszXT09PSJvZGQiKTt9ZWxzZSBpZihtYXRjaFszXSl7U2l6emxlLmVycm9yKG1hdGNoWzBdKTt9Ci1yZXR1cm4gbWF0Y2g7fSwiUFNFVURPIjpmdW5jdGlvbihtYXRjaCl7dmFyIGV4Y2Vzcyx1bnF1b3RlZD0hbWF0Y2hbNl0mJm1hdGNoWzJdO2lmKG1hdGNoRXhwclsiQ0hJTEQiXS50ZXN0KG1hdGNoWzBdKSl7cmV0dXJuIG51bGw7fQotaWYobWF0Y2hbM10pe21hdGNoWzJdPW1hdGNoWzRdfHxtYXRjaFs1XXx8IiI7fWVsc2UgaWYodW5xdW90ZWQmJnJwc2V1ZG8udGVzdCh1bnF1b3RlZCkmJihleGNlc3M9dG9rZW5pemUodW5xdW90ZWQsdHJ1ZSkpJiYoZXhjZXNzPXVucXVvdGVkLmluZGV4T2YoIikiLHVucXVvdGVkLmxlbmd0aC1leGNlc3MpLXVucXVvdGVkLmxlbmd0aCkpe21hdGNoWzBdPW1hdGNoWzBdLnNsaWNlKDAsZXhjZXNzKTttYXRjaFsyXT11bnF1b3RlZC5zbGljZSgwLGV4Y2Vzcyk7fQotcmV0dXJuIG1hdGNoLnNsaWNlKDAsMyk7fX0sZmlsdGVyOnsiVEFHIjpmdW5jdGlvbihub2RlTmFtZVNlbGVjdG9yKXt2YXIgbm9kZU5hbWU9bm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKHJ1bmVzY2FwZSxmdW5lc2NhcGUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3I9PT0iKiI/ZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZTt9OmZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLm5vZGVOYW1lJiZlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ub2RlTmFtZTt9O30sIkNMQVNTIjpmdW5jdGlvbihjbGFzc05hbWUpe3ZhciBwYXR0ZXJuPWNsYXNzQ2FjaGVbY2xhc3NOYW1lKyIgIl07cmV0dXJuIHBhdHRlcm58fChwYXR0ZXJuPW5ldyBSZWdFeHAoIihefCIrd2hpdGVzcGFjZSsiKSIrY2xhc3NOYW1lKyIoIit3aGl0ZXNwYWNlKyJ8JCkiKSkmJmNsYXNzQ2FjaGUoY2xhc3NOYW1lLGZ1bmN0aW9uKGVsZW0pe3JldHVybiBwYXR0ZXJuLnRlc3QodHlwZW9mIGVsZW0uY2xhc3NOYW1lPT09InN0cmluZyImJmVsZW0uY2xhc3NOYW1lfHx0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUhPT1zdHJ1bmRlZmluZWQmJmVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIik7fSk7fSwiQVRUUiI6ZnVuY3Rpb24obmFtZSxvcGVyYXRvcixjaGVjayl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3ZhciByZXN1bHQ9U2l6emxlLmF0dHIoZWxlbSxuYW1lKTtpZihyZXN1bHQ9PW51bGwpe3JldHVybiBvcGVyYXRvcj09PSIhPSI7fQotaWYoIW9wZXJhdG9yKXtyZXR1cm4gdHJ1ZTt9Ci1yZXN1bHQrPSIiO3JldHVybiBvcGVyYXRvcj09PSI9Ij9yZXN1bHQ9PT1jaGVjazpvcGVyYXRvcj09PSIhPSI/cmVzdWx0IT09Y2hlY2s6b3BlcmF0b3I9PT0iXj0iP2NoZWNrJiZyZXN1bHQuaW5kZXhPZihjaGVjayk9PT0wOm9wZXJhdG9yPT09Iio9Ij9jaGVjayYmcmVzdWx0LmluZGV4T2YoY2hlY2spPi0xOm9wZXJhdG9yPT09IiQ9Ij9jaGVjayYmcmVzdWx0LnNsaWNlKC1jaGVjay5sZW5ndGgpPT09Y2hlY2s6b3BlcmF0b3I9PT0ifj0iPygiICIrcmVzdWx0KyIgIikuaW5kZXhPZihjaGVjayk+LTE6b3BlcmF0b3I9PT0ifD0iP3Jlc3VsdD09PWNoZWNrfHxyZXN1bHQuc2xpY2UoMCxjaGVjay5sZW5ndGgrMSk9PT1jaGVjaysiLSI6ZmFsc2U7fTt9LCJDSElMRCI6ZnVuY3Rpb24odHlwZSx3aGF0LGFyZ3VtZW50LGZpcnN0LGxhc3Qpe3ZhciBzaW1wbGU9dHlwZS5zbGljZSgwLDMpIT09Im50aCIsZm9yd2FyZD10eXBlLnNsaWNlKC00KSE9PSJsYXN0IixvZlR5cGU9d2hhdD09PSJvZi10eXBlIjtyZXR1cm4gZmlyc3Q9PT0xJiZsYXN0PT09MD9mdW5jdGlvbihlbGVtKXtyZXR1cm4hIWVsZW0ucGFyZW50Tm9kZTt9OmZ1bmN0aW9uKGVsZW0sY29udGV4dCx4bWwpe3ZhciBjYWNoZSxvdXRlckNhY2hlLG5vZGUsZGlmZixub2RlSW5kZXgsc3RhcnQsZGlyPXNpbXBsZSE9PWZvcndhcmQ/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixwYXJlbnQ9ZWxlbS5wYXJlbnROb2RlLG5hbWU9b2ZUeXBlJiZlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksdXNlQ2FjaGU9IXhtbCYmIW9mVHlwZTtpZihwYXJlbnQpe2lmKHNpbXBsZSl7d2hpbGUoZGlyKXtub2RlPWVsZW07d2hpbGUoKG5vZGU9bm9kZVtkaXJdKSl7aWYob2ZUeXBlP25vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PW5hbWU6bm9kZS5ub2RlVHlwZT09PTEpe3JldHVybiBmYWxzZTt9fQotc3RhcnQ9ZGlyPXR5cGU9PT0ib25seSImJiFzdGFydCYmIm5leHRTaWJsaW5nIjt9Ci1yZXR1cm4gdHJ1ZTt9Ci1zdGFydD1bZm9yd2FyZD9wYXJlbnQuZmlyc3RDaGlsZDpwYXJlbnQubGFzdENoaWxkXTtpZihmb3J3YXJkJiZ1c2VDYWNoZSl7b3V0ZXJDYWNoZT1wYXJlbnRbZXhwYW5kb118fChwYXJlbnRbZXhwYW5kb109e30pO2NhY2hlPW91dGVyQ2FjaGVbdHlwZV18fFtdO25vZGVJbmRleD1jYWNoZVswXT09PWRpcnJ1bnMmJmNhY2hlWzFdO2RpZmY9Y2FjaGVbMF09PT1kaXJydW5zJiZjYWNoZVsyXTtub2RlPW5vZGVJbmRleCYmcGFyZW50LmNoaWxkTm9kZXNbbm9kZUluZGV4XTt3aGlsZSgobm9kZT0rK25vZGVJbmRleCYmbm9kZSYmbm9kZVtkaXJdfHwoZGlmZj1ub2RlSW5kZXg9MCl8fHN0YXJ0LnBvcCgpKSl7aWYobm9kZS5ub2RlVHlwZT09PTEmJisrZGlmZiYmbm9kZT09PWVsZW0pe291dGVyQ2FjaGVbdHlwZV09W2RpcnJ1bnMsbm9kZUluZGV4LGRpZmZdO2JyZWFrO319fWVsc2UgaWYodXNlQ2FjaGUmJihjYWNoZT0oZWxlbVtleHBhbmRvXXx8KGVsZW1bZXhwYW5kb109e30pKVt0eXBlXSkmJmNhY2hlWzBdPT09ZGlycnVucyl7ZGlmZj1jYWNoZVsxXTt9ZWxzZXt3aGlsZSgobm9kZT0rK25vZGVJbmRleCYmbm9kZSYmbm9kZVtkaXJdfHwoZGlmZj1ub2RlSW5kZXg9MCl8fHN0YXJ0LnBvcCgpKSl7aWYoKG9mVHlwZT9ub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1uYW1lOm5vZGUubm9kZVR5cGU9PT0xKSYmKytkaWZmKXtpZih1c2VDYWNoZSl7KG5vZGVbZXhwYW5kb118fChub2RlW2V4cGFuZG9dPXt9KSlbdHlwZV09W2RpcnJ1bnMsZGlmZl07fQotaWYobm9kZT09PWVsZW0pe2JyZWFrO319fX0KLWRpZmYtPWxhc3Q7cmV0dXJuIGRpZmY9PT1maXJzdHx8KGRpZmYlZmlyc3Q9PT0wJiZkaWZmL2ZpcnN0Pj0wKTt9fTt9LCJQU0VVRE8iOmZ1bmN0aW9uKHBzZXVkbyxhcmd1bWVudCl7dmFyIGFyZ3MsZm49RXhwci5wc2V1ZG9zW3BzZXVkb118fEV4cHIuc2V0RmlsdGVyc1twc2V1ZG8udG9Mb3dlckNhc2UoKV18fFNpenpsZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK3BzZXVkbyk7aWYoZm5bZXhwYW5kb10pe3JldHVybiBmbihhcmd1bWVudCk7fQotaWYoZm4ubGVuZ3RoPjEpe2FyZ3M9W3BzZXVkbyxwc2V1ZG8sIiIsYXJndW1lbnRdO3JldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkocHNldWRvLnRvTG93ZXJDYXNlKCkpP21hcmtGdW5jdGlvbihmdW5jdGlvbihzZWVkLG1hdGNoZXMpe3ZhciBpZHgsbWF0Y2hlZD1mbihzZWVkLGFyZ3VtZW50KSxpPW1hdGNoZWQubGVuZ3RoO3doaWxlKGktLSl7aWR4PWluZGV4T2YuY2FsbChzZWVkLG1hdGNoZWRbaV0pO3NlZWRbaWR4XT0hKG1hdGNoZXNbaWR4XT1tYXRjaGVkW2ldKTt9fSk6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGZuKGVsZW0sMCxhcmdzKTt9O30KLXJldHVybiBmbjt9fSxwc2V1ZG9zOnsibm90IjptYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBpbnB1dD1bXSxyZXN1bHRzPVtdLG1hdGNoZXI9Y29tcGlsZShzZWxlY3Rvci5yZXBsYWNlKHJ0cmltLCIkMSIpKTtyZXR1cm4gbWF0Y2hlcltleHBhbmRvXT9tYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VlZCxtYXRjaGVzLGNvbnRleHQseG1sKXt2YXIgZWxlbSx1bm1hdGNoZWQ9bWF0Y2hlcihzZWVkLG51bGwseG1sLFtdKSxpPXNlZWQubGVuZ3RoO3doaWxlKGktLSl7aWYoKGVsZW09dW5tYXRjaGVkW2ldKSl7c2VlZFtpXT0hKG1hdGNoZXNbaV09ZWxlbSk7fX19KTpmdW5jdGlvbihlbGVtLGNvbnRleHQseG1sKXtpbnB1dFswXT1lbGVtO21hdGNoZXIoaW5wdXQsbnVsbCx4bWwscmVzdWx0cyk7cmV0dXJuIXJlc3VsdHMucG9wKCk7fTt9KSwiaGFzIjptYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VsZWN0b3Ipe3JldHVybiBmdW5jdGlvbihlbGVtKXtyZXR1cm4gU2l6emxlKHNlbGVjdG9yLGVsZW0pLmxlbmd0aD4wO307fSksImNvbnRhaW5zIjptYXJrRnVuY3Rpb24oZnVuY3Rpb24odGV4dCl7cmV0dXJuIGZ1bmN0aW9uKGVsZW0pe3JldHVybihlbGVtLnRleHRDb250ZW50fHxlbGVtLmlubmVyVGV4dHx8Z2V0VGV4dChlbGVtKSkuaW5kZXhPZih0ZXh0KT4tMTt9O30pLCJsYW5nIjptYXJrRnVuY3Rpb24oZnVuY3Rpb24obGFuZyl7aWYoIXJpZGVudGlmaWVyLnRlc3QobGFuZ3x8IiIpKXtTaXp6bGUuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrbGFuZyk7fQotbGFuZz1sYW5nLnJlcGxhY2UocnVuZXNjYXBlLGZ1bmVzY2FwZSkudG9Mb3dlckNhc2UoKTtyZXR1cm4gZnVuY3Rpb24oZWxlbSl7dmFyIGVsZW1MYW5nO2Rve2lmKChlbGVtTGFuZz1kb2N1bWVudElzSFRNTD9lbGVtLmxhbmc6ZWxlbS5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGVsZW0uZ2V0QXR0cmlidXRlKCJsYW5nIikpKXtlbGVtTGFuZz1lbGVtTGFuZy50b0xvd2VyQ2FzZSgpO3JldHVybiBlbGVtTGFuZz09PWxhbmd8fGVsZW1MYW5nLmluZGV4T2YobGFuZysiLSIpPT09MDt9fXdoaWxlKChlbGVtPWVsZW0ucGFyZW50Tm9kZSkmJmVsZW0ubm9kZVR5cGU9PT0xKTtyZXR1cm4gZmFsc2U7fTt9KSwidGFyZ2V0IjpmdW5jdGlvbihlbGVtKXt2YXIgaGFzaD13aW5kb3cubG9jYXRpb24mJndpbmRvdy5sb2NhdGlvbi5oYXNoO3JldHVybiBoYXNoJiZoYXNoLnNsaWNlKDEpPT09ZWxlbS5pZDt9LCJyb290IjpmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbT09PWRvY0VsZW07fSwiZm9jdXMiOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtPT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmKCFkb2N1bWVudC5oYXNGb2N1c3x8ZG9jdW1lbnQuaGFzRm9jdXMoKSkmJiEhKGVsZW0udHlwZXx8ZWxlbS5ocmVmfHx+ZWxlbS50YWJJbmRleCk7fSwiZW5hYmxlZCI6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVsZW0uZGlzYWJsZWQ9PT1mYWxzZTt9LCJkaXNhYmxlZCI6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVsZW0uZGlzYWJsZWQ9PT10cnVlO30sImNoZWNrZWQiOmZ1bmN0aW9uKGVsZW0pe3ZhciBub2RlTmFtZT1lbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKG5vZGVOYW1lPT09ImlucHV0IiYmISFlbGVtLmNoZWNrZWQpfHwobm9kZU5hbWU9PT0ib3B0aW9uIiYmISFlbGVtLnNlbGVjdGVkKTt9LCJzZWxlY3RlZCI6ZnVuY3Rpb24oZWxlbSl7aWYoZWxlbS5wYXJlbnROb2RlKXtlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDt9Ci1yZXR1cm4gZWxlbS5zZWxlY3RlZD09PXRydWU7fSwiZW1wdHkiOmZ1bmN0aW9uKGVsZW0pe2ZvcihlbGVtPWVsZW0uZmlyc3RDaGlsZDtlbGVtO2VsZW09ZWxlbS5uZXh0U2libGluZyl7aWYoZWxlbS5ub2RlVHlwZTw2KXtyZXR1cm4gZmFsc2U7fX0KLXJldHVybiB0cnVlO30sInBhcmVudCI6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIUV4cHIucHNldWRvc1siZW1wdHkiXShlbGVtKTt9LCJoZWFkZXIiOmZ1bmN0aW9uKGVsZW0pe3JldHVybiByaGVhZGVyLnRlc3QoZWxlbS5ub2RlTmFtZSk7fSwiaW5wdXQiOmZ1bmN0aW9uKGVsZW0pe3JldHVybiByaW5wdXRzLnRlc3QoZWxlbS5ub2RlTmFtZSk7fSwiYnV0dG9uIjpmdW5jdGlvbihlbGVtKXt2YXIgbmFtZT1lbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIG5hbWU9PT0iaW5wdXQiJiZlbGVtLnR5cGU9PT0iYnV0dG9uInx8bmFtZT09PSJidXR0b24iO30sInRleHQiOmZ1bmN0aW9uKGVsZW0pe3ZhciBhdHRyO3JldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiZlbGVtLnR5cGU9PT0idGV4dCImJigoYXR0cj1lbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpKT09bnVsbHx8YXR0ci50b0xvd2VyQ2FzZSgpPT09InRleHQiKTt9LCJmaXJzdCI6Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpe3JldHVyblswXTt9KSwibGFzdCI6Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbihtYXRjaEluZGV4ZXMsbGVuZ3RoKXtyZXR1cm5bbGVuZ3RoLTFdO30pLCJlcSI6Y3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbihtYXRjaEluZGV4ZXMsbGVuZ3RoLGFyZ3VtZW50KXtyZXR1cm5bYXJndW1lbnQ8MD9hcmd1bWVudCtsZW5ndGg6YXJndW1lbnRdO30pLCJldmVuIjpjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKG1hdGNoSW5kZXhlcyxsZW5ndGgpe3ZhciBpPTA7Zm9yKDtpPGxlbmd0aDtpKz0yKXttYXRjaEluZGV4ZXMucHVzaChpKTt9Ci1yZXR1cm4gbWF0Y2hJbmRleGVzO30pLCJvZGQiOmNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24obWF0Y2hJbmRleGVzLGxlbmd0aCl7dmFyIGk9MTtmb3IoO2k8bGVuZ3RoO2krPTIpe21hdGNoSW5kZXhlcy5wdXNoKGkpO30KLXJldHVybiBtYXRjaEluZGV4ZXM7fSksImx0IjpjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKG1hdGNoSW5kZXhlcyxsZW5ndGgsYXJndW1lbnQpe3ZhciBpPWFyZ3VtZW50PDA/YXJndW1lbnQrbGVuZ3RoOmFyZ3VtZW50O2Zvcig7LS1pPj0wOyl7bWF0Y2hJbmRleGVzLnB1c2goaSk7fQotcmV0dXJuIG1hdGNoSW5kZXhlczt9KSwiZ3QiOmNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24obWF0Y2hJbmRleGVzLGxlbmd0aCxhcmd1bWVudCl7dmFyIGk9YXJndW1lbnQ8MD9hcmd1bWVudCtsZW5ndGg6YXJndW1lbnQ7Zm9yKDsrK2k8bGVuZ3RoOyl7bWF0Y2hJbmRleGVzLnB1c2goaSk7fQotcmV0dXJuIG1hdGNoSW5kZXhlczt9KX19O0V4cHIucHNldWRvc1sibnRoIl09RXhwci5wc2V1ZG9zWyJlcSJdO2ZvcihpIGlue3JhZGlvOnRydWUsY2hlY2tib3g6dHJ1ZSxmaWxlOnRydWUscGFzc3dvcmQ6dHJ1ZSxpbWFnZTp0cnVlfSl7RXhwci5wc2V1ZG9zW2ldPWNyZWF0ZUlucHV0UHNldWRvKGkpO30KLWZvcihpIGlue3N1Ym1pdDp0cnVlLHJlc2V0OnRydWV9KXtFeHByLnBzZXVkb3NbaV09Y3JlYXRlQnV0dG9uUHNldWRvKGkpO30KLWZ1bmN0aW9uIHNldEZpbHRlcnMoKXt9Ci1zZXRGaWx0ZXJzLnByb3RvdHlwZT1FeHByLmZpbHRlcnM9RXhwci5wc2V1ZG9zO0V4cHIuc2V0RmlsdGVycz1uZXcgc2V0RmlsdGVycygpO3Rva2VuaXplPVNpenpsZS50b2tlbml6ZT1mdW5jdGlvbihzZWxlY3RvcixwYXJzZU9ubHkpe3ZhciBtYXRjaGVkLG1hdGNoLHRva2Vucyx0eXBlLHNvRmFyLGdyb3VwcyxwcmVGaWx0ZXJzLGNhY2hlZD10b2tlbkNhY2hlW3NlbGVjdG9yKyIgIl07aWYoY2FjaGVkKXtyZXR1cm4gcGFyc2VPbmx5PzA6Y2FjaGVkLnNsaWNlKDApO30KLXNvRmFyPXNlbGVjdG9yO2dyb3Vwcz1bXTtwcmVGaWx0ZXJzPUV4cHIucHJlRmlsdGVyO3doaWxlKHNvRmFyKXtpZighbWF0Y2hlZHx8KG1hdGNoPXJjb21tYS5leGVjKHNvRmFyKSkpe2lmKG1hdGNoKXtzb0Zhcj1zb0Zhci5zbGljZShtYXRjaFswXS5sZW5ndGgpfHxzb0Zhcjt9Ci1ncm91cHMucHVzaCgodG9rZW5zPVtdKSk7fQotbWF0Y2hlZD1mYWxzZTtpZigobWF0Y2g9cmNvbWJpbmF0b3JzLmV4ZWMoc29GYXIpKSl7bWF0Y2hlZD1tYXRjaC5zaGlmdCgpO3Rva2Vucy5wdXNoKHt2YWx1ZTptYXRjaGVkLHR5cGU6bWF0Y2hbMF0ucmVwbGFjZShydHJpbSwiICIpfSk7c29GYXI9c29GYXIuc2xpY2UobWF0Y2hlZC5sZW5ndGgpO30KLWZvcih0eXBlIGluIEV4cHIuZmlsdGVyKXtpZigobWF0Y2g9bWF0Y2hFeHByW3R5cGVdLmV4ZWMoc29GYXIpKSYmKCFwcmVGaWx0ZXJzW3R5cGVdfHwobWF0Y2g9cHJlRmlsdGVyc1t0eXBlXShtYXRjaCkpKSl7bWF0Y2hlZD1tYXRjaC5zaGlmdCgpO3Rva2Vucy5wdXNoKHt2YWx1ZTptYXRjaGVkLHR5cGU6dHlwZSxtYXRjaGVzOm1hdGNofSk7c29GYXI9c29GYXIuc2xpY2UobWF0Y2hlZC5sZW5ndGgpO319Ci1pZighbWF0Y2hlZCl7YnJlYWs7fX0KLXJldHVybiBwYXJzZU9ubHk/c29GYXIubGVuZ3RoOnNvRmFyP1NpenpsZS5lcnJvcihzZWxlY3Rvcik6dG9rZW5DYWNoZShzZWxlY3Rvcixncm91cHMpLnNsaWNlKDApO307ZnVuY3Rpb24gdG9TZWxlY3Rvcih0b2tlbnMpe3ZhciBpPTAsbGVuPXRva2Vucy5sZW5ndGgsc2VsZWN0b3I9IiI7Zm9yKDtpPGxlbjtpKyspe3NlbGVjdG9yKz10b2tlbnNbaV0udmFsdWU7fQotcmV0dXJuIHNlbGVjdG9yO30KLWZ1bmN0aW9uIGFkZENvbWJpbmF0b3IobWF0Y2hlcixjb21iaW5hdG9yLGJhc2Upe3ZhciBkaXI9Y29tYmluYXRvci5kaXIsY2hlY2tOb25FbGVtZW50cz1iYXNlJiZkaXI9PT0icGFyZW50Tm9kZSIsZG9uZU5hbWU9ZG9uZSsrO3JldHVybiBjb21iaW5hdG9yLmZpcnN0P2Z1bmN0aW9uKGVsZW0sY29udGV4dCx4bWwpe3doaWxlKChlbGVtPWVsZW1bZGlyXSkpe2lmKGVsZW0ubm9kZVR5cGU9PT0xfHxjaGVja05vbkVsZW1lbnRzKXtyZXR1cm4gbWF0Y2hlcihlbGVtLGNvbnRleHQseG1sKTt9fX06ZnVuY3Rpb24oZWxlbSxjb250ZXh0LHhtbCl7dmFyIG9sZENhY2hlLG91dGVyQ2FjaGUsbmV3Q2FjaGU9W2RpcnJ1bnMsZG9uZU5hbWVdO2lmKHhtbCl7d2hpbGUoKGVsZW09ZWxlbVtkaXJdKSl7aWYoZWxlbS5ub2RlVHlwZT09PTF8fGNoZWNrTm9uRWxlbWVudHMpe2lmKG1hdGNoZXIoZWxlbSxjb250ZXh0LHhtbCkpe3JldHVybiB0cnVlO319fX1lbHNle3doaWxlKChlbGVtPWVsZW1bZGlyXSkpe2lmKGVsZW0ubm9kZVR5cGU9PT0xfHxjaGVja05vbkVsZW1lbnRzKXtvdXRlckNhY2hlPWVsZW1bZXhwYW5kb118fChlbGVtW2V4cGFuZG9dPXt9KTtpZigob2xkQ2FjaGU9b3V0ZXJDYWNoZVtkaXJdKSYmb2xkQ2FjaGVbMF09PT1kaXJydW5zJiZvbGRDYWNoZVsxXT09PWRvbmVOYW1lKXtyZXR1cm4obmV3Q2FjaGVbMl09b2xkQ2FjaGVbMl0pO31lbHNle291dGVyQ2FjaGVbZGlyXT1uZXdDYWNoZTtpZigobmV3Q2FjaGVbMl09bWF0Y2hlcihlbGVtLGNvbnRleHQseG1sKSkpe3JldHVybiB0cnVlO319fX19fTt9Ci1mdW5jdGlvbiBlbGVtZW50TWF0Y2hlcihtYXRjaGVycyl7cmV0dXJuIG1hdGNoZXJzLmxlbmd0aD4xP2Z1bmN0aW9uKGVsZW0sY29udGV4dCx4bWwpe3ZhciBpPW1hdGNoZXJzLmxlbmd0aDt3aGlsZShpLS0pe2lmKCFtYXRjaGVyc1tpXShlbGVtLGNvbnRleHQseG1sKSl7cmV0dXJuIGZhbHNlO319Ci1yZXR1cm4gdHJ1ZTt9Om1hdGNoZXJzWzBdO30KLWZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoc2VsZWN0b3IsY29udGV4dHMscmVzdWx0cyl7dmFyIGk9MCxsZW49Y29udGV4dHMubGVuZ3RoO2Zvcig7aTxsZW47aSsrKXtTaXp6bGUoc2VsZWN0b3IsY29udGV4dHNbaV0scmVzdWx0cyk7fQotcmV0dXJuIHJlc3VsdHM7fQotZnVuY3Rpb24gY29uZGVuc2UodW5tYXRjaGVkLG1hcCxmaWx0ZXIsY29udGV4dCx4bWwpe3ZhciBlbGVtLG5ld1VubWF0Y2hlZD1bXSxpPTAsbGVuPXVubWF0Y2hlZC5sZW5ndGgsbWFwcGVkPW1hcCE9bnVsbDtmb3IoO2k8bGVuO2krKyl7aWYoKGVsZW09dW5tYXRjaGVkW2ldKSl7aWYoIWZpbHRlcnx8ZmlsdGVyKGVsZW0sY29udGV4dCx4bWwpKXtuZXdVbm1hdGNoZWQucHVzaChlbGVtKTtpZihtYXBwZWQpe21hcC5wdXNoKGkpO319fX0KLXJldHVybiBuZXdVbm1hdGNoZWQ7fQotZnVuY3Rpb24gc2V0TWF0Y2hlcihwcmVGaWx0ZXIsc2VsZWN0b3IsbWF0Y2hlcixwb3N0RmlsdGVyLHBvc3RGaW5kZXIscG9zdFNlbGVjdG9yKXtpZihwb3N0RmlsdGVyJiYhcG9zdEZpbHRlcltleHBhbmRvXSl7cG9zdEZpbHRlcj1zZXRNYXRjaGVyKHBvc3RGaWx0ZXIpO30KLWlmKHBvc3RGaW5kZXImJiFwb3N0RmluZGVyW2V4cGFuZG9dKXtwb3N0RmluZGVyPXNldE1hdGNoZXIocG9zdEZpbmRlcixwb3N0U2VsZWN0b3IpO30KLXJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VlZCxyZXN1bHRzLGNvbnRleHQseG1sKXt2YXIgdGVtcCxpLGVsZW0scHJlTWFwPVtdLHBvc3RNYXA9W10scHJlZXhpc3Rpbmc9cmVzdWx0cy5sZW5ndGgsZWxlbXM9c2VlZHx8bXVsdGlwbGVDb250ZXh0cyhzZWxlY3Rvcnx8IioiLGNvbnRleHQubm9kZVR5cGU/W2NvbnRleHRdOmNvbnRleHQsW10pLG1hdGNoZXJJbj1wcmVGaWx0ZXImJihzZWVkfHwhc2VsZWN0b3IpP2NvbmRlbnNlKGVsZW1zLHByZU1hcCxwcmVGaWx0ZXIsY29udGV4dCx4bWwpOmVsZW1zLG1hdGNoZXJPdXQ9bWF0Y2hlcj9wb3N0RmluZGVyfHwoc2VlZD9wcmVGaWx0ZXI6cHJlZXhpc3Rpbmd8fHBvc3RGaWx0ZXIpP1tdOnJlc3VsdHM6bWF0Y2hlckluO2lmKG1hdGNoZXIpe21hdGNoZXIobWF0Y2hlckluLG1hdGNoZXJPdXQsY29udGV4dCx4bWwpO30KLWlmKHBvc3RGaWx0ZXIpe3RlbXA9Y29uZGVuc2UobWF0Y2hlck91dCxwb3N0TWFwKTtwb3N0RmlsdGVyKHRlbXAsW10sY29udGV4dCx4bWwpO2k9dGVtcC5sZW5ndGg7d2hpbGUoaS0tKXtpZigoZWxlbT10ZW1wW2ldKSl7bWF0Y2hlck91dFtwb3N0TWFwW2ldXT0hKG1hdGNoZXJJbltwb3N0TWFwW2ldXT1lbGVtKTt9fX0KLWlmKHNlZWQpe2lmKHBvc3RGaW5kZXJ8fHByZUZpbHRlcil7aWYocG9zdEZpbmRlcil7dGVtcD1bXTtpPW1hdGNoZXJPdXQubGVuZ3RoO3doaWxlKGktLSl7aWYoKGVsZW09bWF0Y2hlck91dFtpXSkpe3RlbXAucHVzaCgobWF0Y2hlckluW2ldPWVsZW0pKTt9fQotcG9zdEZpbmRlcihudWxsLChtYXRjaGVyT3V0PVtdKSx0ZW1wLHhtbCk7fQotaT1tYXRjaGVyT3V0Lmxlbmd0aDt3aGlsZShpLS0pe2lmKChlbGVtPW1hdGNoZXJPdXRbaV0pJiYodGVtcD1wb3N0RmluZGVyP2luZGV4T2YuY2FsbChzZWVkLGVsZW0pOnByZU1hcFtpXSk+LTEpe3NlZWRbdGVtcF09IShyZXN1bHRzW3RlbXBdPWVsZW0pO319fX1lbHNle21hdGNoZXJPdXQ9Y29uZGVuc2UobWF0Y2hlck91dD09PXJlc3VsdHM/bWF0Y2hlck91dC5zcGxpY2UocHJlZXhpc3RpbmcsbWF0Y2hlck91dC5sZW5ndGgpOm1hdGNoZXJPdXQpO2lmKHBvc3RGaW5kZXIpe3Bvc3RGaW5kZXIobnVsbCxyZXN1bHRzLG1hdGNoZXJPdXQseG1sKTt9ZWxzZXtwdXNoLmFwcGx5KHJlc3VsdHMsbWF0Y2hlck91dCk7fX19KTt9Ci1mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2Vucyh0b2tlbnMpe3ZhciBjaGVja0NvbnRleHQsbWF0Y2hlcixqLGxlbj10b2tlbnMubGVuZ3RoLGxlYWRpbmdSZWxhdGl2ZT1FeHByLnJlbGF0aXZlW3Rva2Vuc1swXS50eXBlXSxpbXBsaWNpdFJlbGF0aXZlPWxlYWRpbmdSZWxhdGl2ZXx8RXhwci5yZWxhdGl2ZVsiICJdLGk9bGVhZGluZ1JlbGF0aXZlPzE6MCxtYXRjaENvbnRleHQ9YWRkQ29tYmluYXRvcihmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbT09PWNoZWNrQ29udGV4dDt9LGltcGxpY2l0UmVsYXRpdmUsdHJ1ZSksbWF0Y2hBbnlDb250ZXh0PWFkZENvbWJpbmF0b3IoZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGluZGV4T2YuY2FsbChjaGVja0NvbnRleHQsZWxlbSk+LTE7fSxpbXBsaWNpdFJlbGF0aXZlLHRydWUpLG1hdGNoZXJzPVtmdW5jdGlvbihlbGVtLGNvbnRleHQseG1sKXtyZXR1cm4oIWxlYWRpbmdSZWxhdGl2ZSYmKHhtbHx8Y29udGV4dCE9PW91dGVybW9zdENvbnRleHQpKXx8KChjaGVja0NvbnRleHQ9Y29udGV4dCkubm9kZVR5cGU/bWF0Y2hDb250ZXh0KGVsZW0sY29udGV4dCx4bWwpOm1hdGNoQW55Q29udGV4dChlbGVtLGNvbnRleHQseG1sKSk7fV07Zm9yKDtpPGxlbjtpKyspe2lmKChtYXRjaGVyPUV4cHIucmVsYXRpdmVbdG9rZW5zW2ldLnR5cGVdKSl7bWF0Y2hlcnM9W2FkZENvbWJpbmF0b3IoZWxlbWVudE1hdGNoZXIobWF0Y2hlcnMpLG1hdGNoZXIpXTt9ZWxzZXttYXRjaGVyPUV4cHIuZmlsdGVyW3Rva2Vuc1tpXS50eXBlXS5hcHBseShudWxsLHRva2Vuc1tpXS5tYXRjaGVzKTtpZihtYXRjaGVyW2V4cGFuZG9dKXtqPSsraTtmb3IoO2o8bGVuO2orKyl7aWYoRXhwci5yZWxhdGl2ZVt0b2tlbnNbal0udHlwZV0pe2JyZWFrO319Ci1yZXR1cm4gc2V0TWF0Y2hlcihpPjEmJmVsZW1lbnRNYXRjaGVyKG1hdGNoZXJzKSxpPjEmJnRvU2VsZWN0b3IodG9rZW5zLnNsaWNlKDAsaS0xKS5jb25jYXQoe3ZhbHVlOnRva2Vuc1tpLTJdLnR5cGU9PT0iICI/IioiOiIifSkpLnJlcGxhY2UocnRyaW0sIiQxIiksbWF0Y2hlcixpPGomJm1hdGNoZXJGcm9tVG9rZW5zKHRva2Vucy5zbGljZShpLGopKSxqPGxlbiYmbWF0Y2hlckZyb21Ub2tlbnMoKHRva2Vucz10b2tlbnMuc2xpY2UoaikpKSxqPGxlbiYmdG9TZWxlY3Rvcih0b2tlbnMpKTt9Ci1tYXRjaGVycy5wdXNoKG1hdGNoZXIpO319Ci1yZXR1cm4gZWxlbWVudE1hdGNoZXIobWF0Y2hlcnMpO30KLWZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyhlbGVtZW50TWF0Y2hlcnMsc2V0TWF0Y2hlcnMpe3ZhciBieVNldD1zZXRNYXRjaGVycy5sZW5ndGg+MCxieUVsZW1lbnQ9ZWxlbWVudE1hdGNoZXJzLmxlbmd0aD4wLHN1cGVyTWF0Y2hlcj1mdW5jdGlvbihzZWVkLGNvbnRleHQseG1sLHJlc3VsdHMsb3V0ZXJtb3N0KXt2YXIgZWxlbSxqLG1hdGNoZXIsbWF0Y2hlZENvdW50PTAsaT0iMCIsdW5tYXRjaGVkPXNlZWQmJltdLHNldE1hdGNoZWQ9W10sY29udGV4dEJhY2t1cD1vdXRlcm1vc3RDb250ZXh0LGVsZW1zPXNlZWR8fGJ5RWxlbWVudCYmRXhwci5maW5kWyJUQUciXSgiKiIsb3V0ZXJtb3N0KSxkaXJydW5zVW5pcXVlPShkaXJydW5zKz1jb250ZXh0QmFja3VwPT1udWxsPzE6TWF0aC5yYW5kb20oKXx8MC4xKSxsZW49ZWxlbXMubGVuZ3RoO2lmKG91dGVybW9zdCl7b3V0ZXJtb3N0Q29udGV4dD1jb250ZXh0IT09ZG9jdW1lbnQmJmNvbnRleHQ7fQotZm9yKDtpIT09bGVuJiYoZWxlbT1lbGVtc1tpXSkhPW51bGw7aSsrKXtpZihieUVsZW1lbnQmJmVsZW0pe2o9MDt3aGlsZSgobWF0Y2hlcj1lbGVtZW50TWF0Y2hlcnNbaisrXSkpe2lmKG1hdGNoZXIoZWxlbSxjb250ZXh0LHhtbCkpe3Jlc3VsdHMucHVzaChlbGVtKTticmVhazt9fQotaWYob3V0ZXJtb3N0KXtkaXJydW5zPWRpcnJ1bnNVbmlxdWU7fX0KLWlmKGJ5U2V0KXtpZigoZWxlbT0hbWF0Y2hlciYmZWxlbSkpe21hdGNoZWRDb3VudC0tO30KLWlmKHNlZWQpe3VubWF0Y2hlZC5wdXNoKGVsZW0pO319fQotbWF0Y2hlZENvdW50Kz1pO2lmKGJ5U2V0JiZpIT09bWF0Y2hlZENvdW50KXtqPTA7d2hpbGUoKG1hdGNoZXI9c2V0TWF0Y2hlcnNbaisrXSkpe21hdGNoZXIodW5tYXRjaGVkLHNldE1hdGNoZWQsY29udGV4dCx4bWwpO30KLWlmKHNlZWQpe2lmKG1hdGNoZWRDb3VudD4wKXt3aGlsZShpLS0pe2lmKCEodW5tYXRjaGVkW2ldfHxzZXRNYXRjaGVkW2ldKSl7c2V0TWF0Y2hlZFtpXT1wb3AuY2FsbChyZXN1bHRzKTt9fX0KLXNldE1hdGNoZWQ9Y29uZGVuc2Uoc2V0TWF0Y2hlZCk7fQotcHVzaC5hcHBseShyZXN1bHRzLHNldE1hdGNoZWQpO2lmKG91dGVybW9zdCYmIXNlZWQmJnNldE1hdGNoZWQubGVuZ3RoPjAmJihtYXRjaGVkQ291bnQrc2V0TWF0Y2hlcnMubGVuZ3RoKT4xKXtTaXp6bGUudW5pcXVlU29ydChyZXN1bHRzKTt9fQotaWYob3V0ZXJtb3N0KXtkaXJydW5zPWRpcnJ1bnNVbmlxdWU7b3V0ZXJtb3N0Q29udGV4dD1jb250ZXh0QmFja3VwO30KLXJldHVybiB1bm1hdGNoZWQ7fTtyZXR1cm4gYnlTZXQ/bWFya0Z1bmN0aW9uKHN1cGVyTWF0Y2hlcik6c3VwZXJNYXRjaGVyO30KLWNvbXBpbGU9U2l6emxlLmNvbXBpbGU9ZnVuY3Rpb24oc2VsZWN0b3IsbWF0Y2gpe3ZhciBpLHNldE1hdGNoZXJzPVtdLGVsZW1lbnRNYXRjaGVycz1bXSxjYWNoZWQ9Y29tcGlsZXJDYWNoZVtzZWxlY3RvcisiICJdO2lmKCFjYWNoZWQpe2lmKCFtYXRjaCl7bWF0Y2g9dG9rZW5pemUoc2VsZWN0b3IpO30KLWk9bWF0Y2gubGVuZ3RoO3doaWxlKGktLSl7Y2FjaGVkPW1hdGNoZXJGcm9tVG9rZW5zKG1hdGNoW2ldKTtpZihjYWNoZWRbZXhwYW5kb10pe3NldE1hdGNoZXJzLnB1c2goY2FjaGVkKTt9ZWxzZXtlbGVtZW50TWF0Y2hlcnMucHVzaChjYWNoZWQpO319Ci1jYWNoZWQ9Y29tcGlsZXJDYWNoZShzZWxlY3RvcixtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoZWxlbWVudE1hdGNoZXJzLHNldE1hdGNoZXJzKSk7Y2FjaGVkLnNlbGVjdG9yPXNlbGVjdG9yO30KLXJldHVybiBjYWNoZWQ7fTtzZWxlY3Q9U2l6emxlLnNlbGVjdD1mdW5jdGlvbihzZWxlY3Rvcixjb250ZXh0LHJlc3VsdHMsc2VlZCl7dmFyIGksdG9rZW5zLHRva2VuLHR5cGUsZmluZCxjb21waWxlZD10eXBlb2Ygc2VsZWN0b3I9PT0iZnVuY3Rpb24iJiZzZWxlY3RvcixtYXRjaD0hc2VlZCYmdG9rZW5pemUoKHNlbGVjdG9yPWNvbXBpbGVkLnNlbGVjdG9yfHxzZWxlY3RvcikpO3Jlc3VsdHM9cmVzdWx0c3x8W107aWYobWF0Y2gubGVuZ3RoPT09MSl7dG9rZW5zPW1hdGNoWzBdPW1hdGNoWzBdLnNsaWNlKDApO2lmKHRva2Vucy5sZW5ndGg+MiYmKHRva2VuPXRva2Vuc1swXSkudHlwZT09PSJJRCImJnN1cHBvcnQuZ2V0QnlJZCYmY29udGV4dC5ub2RlVHlwZT09PTkmJmRvY3VtZW50SXNIVE1MJiZFeHByLnJlbGF0aXZlW3Rva2Vuc1sxXS50eXBlXSl7Y29udGV4dD0oRXhwci5maW5kWyJJRCJdKHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsZnVuZXNjYXBlKSxjb250ZXh0KXx8W10pWzBdO2lmKCFjb250ZXh0KXtyZXR1cm4gcmVzdWx0czt9ZWxzZSBpZihjb21waWxlZCl7Y29udGV4dD1jb250ZXh0LnBhcmVudE5vZGU7fQotc2VsZWN0b3I9c2VsZWN0b3Iuc2xpY2UodG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoKTt9Ci1pPW1hdGNoRXhwclsibmVlZHNDb250ZXh0Il0udGVzdChzZWxlY3Rvcik/MDp0b2tlbnMubGVuZ3RoO3doaWxlKGktLSl7dG9rZW49dG9rZW5zW2ldO2lmKEV4cHIucmVsYXRpdmVbKHR5cGU9dG9rZW4udHlwZSldKXticmVhazt9Ci1pZigoZmluZD1FeHByLmZpbmRbdHlwZV0pKXtpZigoc2VlZD1maW5kKHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsZnVuZXNjYXBlKSxyc2libGluZy50ZXN0KHRva2Vuc1swXS50eXBlKSYmdGVzdENvbnRleHQoY29udGV4dC5wYXJlbnROb2RlKXx8Y29udGV4dCkpKXt0b2tlbnMuc3BsaWNlKGksMSk7c2VsZWN0b3I9c2VlZC5sZW5ndGgmJnRvU2VsZWN0b3IodG9rZW5zKTtpZighc2VsZWN0b3Ipe3B1c2guYXBwbHkocmVzdWx0cyxzZWVkKTtyZXR1cm4gcmVzdWx0czt9Ci1icmVhazt9fX19Ci0oY29tcGlsZWR8fGNvbXBpbGUoc2VsZWN0b3IsbWF0Y2gpKShzZWVkLGNvbnRleHQsIWRvY3VtZW50SXNIVE1MLHJlc3VsdHMscnNpYmxpbmcudGVzdChzZWxlY3RvcikmJnRlc3RDb250ZXh0KGNvbnRleHQucGFyZW50Tm9kZSl8fGNvbnRleHQpO3JldHVybiByZXN1bHRzO307c3VwcG9ydC5zb3J0U3RhYmxlPWV4cGFuZG8uc3BsaXQoIiIpLnNvcnQoc29ydE9yZGVyKS5qb2luKCIiKT09PWV4cGFuZG87c3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzPSEhaGFzRHVwbGljYXRlO3NldERvY3VtZW50KCk7c3VwcG9ydC5zb3J0RGV0YWNoZWQ9YXNzZXJ0KGZ1bmN0aW9uKGRpdjEpe3JldHVybiBkaXYxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSYxO30pO2lmKCFhc3NlcnQoZnVuY3Rpb24oZGl2KXtkaXYuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IjtyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIik9PT0iIyI7fSkpe2FkZEhhbmRsZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZWxlbSxuYW1lLGlzWE1MKXtpZighaXNYTUwpe3JldHVybiBlbGVtLmdldEF0dHJpYnV0ZShuYW1lLG5hbWUudG9Mb3dlckNhc2UoKT09PSJ0eXBlIj8xOjIpO319KTt9Ci1pZighc3VwcG9ydC5hdHRyaWJ1dGVzfHwhYXNzZXJ0KGZ1bmN0aW9uKGRpdil7ZGl2LmlubmVySFRNTD0iPGlucHV0Lz4iO2Rpdi5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKTtyZXR1cm4gZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09IiI7fSkpe2FkZEhhbmRsZSgidmFsdWUiLGZ1bmN0aW9uKGVsZW0sbmFtZSxpc1hNTCl7aWYoIWlzWE1MJiZlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiKXtyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7fX0pO30KLWlmKCFhc3NlcnQoZnVuY3Rpb24oZGl2KXtyZXR1cm4gZGl2LmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09bnVsbDt9KSl7YWRkSGFuZGxlKGJvb2xlYW5zLGZ1bmN0aW9uKGVsZW0sbmFtZSxpc1hNTCl7dmFyIHZhbDtpZighaXNYTUwpe3JldHVybiBlbGVtW25hbWVdPT09dHJ1ZT9uYW1lLnRvTG93ZXJDYXNlKCk6KHZhbD1lbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpJiZ2YWwuc3BlY2lmaWVkP3ZhbC52YWx1ZTpudWxsO319KTt9Ci1yZXR1cm4gU2l6emxlO30pKHdpbmRvdyk7alF1ZXJ5LmZpbmQ9U2l6emxlO2pRdWVyeS5leHByPVNpenpsZS5zZWxlY3RvcnM7alF1ZXJ5LmV4cHJbIjoiXT1qUXVlcnkuZXhwci5wc2V1ZG9zO2pRdWVyeS51bmlxdWU9U2l6emxlLnVuaXF1ZVNvcnQ7alF1ZXJ5LnRleHQ9U2l6emxlLmdldFRleHQ7alF1ZXJ5LmlzWE1MRG9jPVNpenpsZS5pc1hNTDtqUXVlcnkuY29udGFpbnM9U2l6emxlLmNvbnRhaW5zO3ZhciBybmVlZHNDb250ZXh0PWpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDt2YXIgcnNpbmdsZVRhZz0oL148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyk7dmFyIHJpc1NpbXBsZT0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHdpbm5vdyhlbGVtZW50cyxxdWFsaWZpZXIsbm90KXtpZihqUXVlcnkuaXNGdW5jdGlvbihxdWFsaWZpZXIpKXtyZXR1cm4galF1ZXJ5LmdyZXAoZWxlbWVudHMsZnVuY3Rpb24oZWxlbSxpKXtyZXR1cm4hIXF1YWxpZmllci5jYWxsKGVsZW0saSxlbGVtKSE9PW5vdDt9KTt9Ci1pZihxdWFsaWZpZXIubm9kZVR5cGUpe3JldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cyxmdW5jdGlvbihlbGVtKXtyZXR1cm4oZWxlbT09PXF1YWxpZmllcikhPT1ub3Q7fSk7fQotaWYodHlwZW9mIHF1YWxpZmllcj09PSJzdHJpbmciKXtpZihyaXNTaW1wbGUudGVzdChxdWFsaWZpZXIpKXtyZXR1cm4galF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsZWxlbWVudHMsbm90KTt9Ci1xdWFsaWZpZXI9alF1ZXJ5LmZpbHRlcihxdWFsaWZpZXIsZWxlbWVudHMpO30KLXJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cyxmdW5jdGlvbihlbGVtKXtyZXR1cm4oalF1ZXJ5LmluQXJyYXkoZWxlbSxxdWFsaWZpZXIpPj0wKSE9PW5vdDt9KTt9Ci1qUXVlcnkuZmlsdGVyPWZ1bmN0aW9uKGV4cHIsZWxlbXMsbm90KXt2YXIgZWxlbT1lbGVtc1swXTtpZihub3Qpe2V4cHI9Ijpub3QoIitleHByKyIpIjt9Ci1yZXR1cm4gZWxlbXMubGVuZ3RoPT09MSYmZWxlbS5ub2RlVHlwZT09PTE/alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVsZW0sZXhwcik/W2VsZW1dOltdOmpRdWVyeS5maW5kLm1hdGNoZXMoZXhwcixqUXVlcnkuZ3JlcChlbGVtcyxmdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5ub2RlVHlwZT09PTE7fSkpO307alF1ZXJ5LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihzZWxlY3Rvcil7dmFyIGkscmV0PVtdLHNlbGY9dGhpcyxsZW49c2VsZi5sZW5ndGg7aWYodHlwZW9mIHNlbGVjdG9yIT09InN0cmluZyIpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqUXVlcnkoc2VsZWN0b3IpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihpPTA7aTxsZW47aSsrKXtpZihqUXVlcnkuY29udGFpbnMoc2VsZltpXSx0aGlzKSl7cmV0dXJuIHRydWU7fX19KSk7fQotZm9yKGk9MDtpPGxlbjtpKyspe2pRdWVyeS5maW5kKHNlbGVjdG9yLHNlbGZbaV0scmV0KTt9Ci1yZXQ9dGhpcy5wdXNoU3RhY2sobGVuPjE/alF1ZXJ5LnVuaXF1ZShyZXQpOnJldCk7cmV0LnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrc2VsZWN0b3I6c2VsZWN0b3I7cmV0dXJuIHJldDt9LGZpbHRlcjpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHdpbm5vdyh0aGlzLHNlbGVjdG9yfHxbXSxmYWxzZSkpO30sbm90OmZ1bmN0aW9uKHNlbGVjdG9yKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sod2lubm93KHRoaXMsc2VsZWN0b3J8fFtdLHRydWUpKTt9LGlzOmZ1bmN0aW9uKHNlbGVjdG9yKXtyZXR1cm4hIXdpbm5vdyh0aGlzLHR5cGVvZiBzZWxlY3Rvcj09PSJzdHJpbmciJiZybmVlZHNDb250ZXh0LnRlc3Qoc2VsZWN0b3IpP2pRdWVyeShzZWxlY3Rvcik6c2VsZWN0b3J8fFtdLGZhbHNlKS5sZW5ndGg7fX0pO3ZhciByb290alF1ZXJ5LGRvY3VtZW50PXdpbmRvdy5kb2N1bWVudCxycXVpY2tFeHByPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8saW5pdD1qUXVlcnkuZm4uaW5pdD1mdW5jdGlvbihzZWxlY3Rvcixjb250ZXh0KXt2YXIgbWF0Y2gsZWxlbTtpZighc2VsZWN0b3Ipe3JldHVybiB0aGlzO30KLWlmKHR5cGVvZiBzZWxlY3Rvcj09PSJzdHJpbmciKXtpZihzZWxlY3Rvci5jaGFyQXQoMCk9PT0iPCImJnNlbGVjdG9yLmNoYXJBdChzZWxlY3Rvci5sZW5ndGgtMSk9PT0iPiImJnNlbGVjdG9yLmxlbmd0aD49Myl7bWF0Y2g9W251bGwsc2VsZWN0b3IsbnVsbF07fWVsc2V7bWF0Y2g9cnF1aWNrRXhwci5leGVjKHNlbGVjdG9yKTt9Ci1pZihtYXRjaCYmKG1hdGNoWzFdfHwhY29udGV4dCkpe2lmKG1hdGNoWzFdKXtjb250ZXh0PWNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnk/Y29udGV4dFswXTpjb250ZXh0O2pRdWVyeS5tZXJnZSh0aGlzLGpRdWVyeS5wYXJzZUhUTUwobWF0Y2hbMV0sY29udGV4dCYmY29udGV4dC5ub2RlVHlwZT9jb250ZXh0Lm93bmVyRG9jdW1lbnR8fGNvbnRleHQ6ZG9jdW1lbnQsdHJ1ZSkpO2lmKHJzaW5nbGVUYWcudGVzdChtYXRjaFsxXSkmJmpRdWVyeS5pc1BsYWluT2JqZWN0KGNvbnRleHQpKXtmb3IobWF0Y2ggaW4gY29udGV4dCl7aWYoalF1ZXJ5LmlzRnVuY3Rpb24odGhpc1ttYXRjaF0pKXt0aGlzW21hdGNoXShjb250ZXh0W21hdGNoXSk7fWVsc2V7dGhpcy5hdHRyKG1hdGNoLGNvbnRleHRbbWF0Y2hdKTt9fX0KLXJldHVybiB0aGlzO31lbHNle2VsZW09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWF0Y2hbMl0pO2lmKGVsZW0mJmVsZW0ucGFyZW50Tm9kZSl7aWYoZWxlbS5pZCE9PW1hdGNoWzJdKXtyZXR1cm4gcm9vdGpRdWVyeS5maW5kKHNlbGVjdG9yKTt9Ci10aGlzLmxlbmd0aD0xO3RoaXNbMF09ZWxlbTt9Ci10aGlzLmNvbnRleHQ9ZG9jdW1lbnQ7dGhpcy5zZWxlY3Rvcj1zZWxlY3RvcjtyZXR1cm4gdGhpczt9fWVsc2UgaWYoIWNvbnRleHR8fGNvbnRleHQuanF1ZXJ5KXtyZXR1cm4oY29udGV4dHx8cm9vdGpRdWVyeSkuZmluZChzZWxlY3Rvcik7fWVsc2V7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoY29udGV4dCkuZmluZChzZWxlY3Rvcik7fX1lbHNlIGlmKHNlbGVjdG9yLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9dGhpc1swXT1zZWxlY3Rvcjt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzO31lbHNlIGlmKGpRdWVyeS5pc0Z1bmN0aW9uKHNlbGVjdG9yKSl7cmV0dXJuIHR5cGVvZiByb290alF1ZXJ5LnJlYWR5IT09InVuZGVmaW5lZCI/cm9vdGpRdWVyeS5yZWFkeShzZWxlY3Rvcik6c2VsZWN0b3IoalF1ZXJ5KTt9Ci1pZihzZWxlY3Rvci5zZWxlY3RvciE9PXVuZGVmaW5lZCl7dGhpcy5zZWxlY3Rvcj1zZWxlY3Rvci5zZWxlY3Rvcjt0aGlzLmNvbnRleHQ9c2VsZWN0b3IuY29udGV4dDt9Ci1yZXR1cm4galF1ZXJ5Lm1ha2VBcnJheShzZWxlY3Rvcix0aGlzKTt9O2luaXQucHJvdG90eXBlPWpRdWVyeS5mbjtyb290alF1ZXJ5PWpRdWVyeShkb2N1bWVudCk7dmFyIHJwYXJlbnRzcHJldj0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxndWFyYW50ZWVkVW5pcXVlPXtjaGlsZHJlbjp0cnVlLGNvbnRlbnRzOnRydWUsbmV4dDp0cnVlLHByZXY6dHJ1ZX07alF1ZXJ5LmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGVsZW0sZGlyLHVudGlsKXt2YXIgbWF0Y2hlZD1bXSxjdXI9ZWxlbVtkaXJdO3doaWxlKGN1ciYmY3VyLm5vZGVUeXBlIT09OSYmKHVudGlsPT09dW5kZWZpbmVkfHxjdXIubm9kZVR5cGUhPT0xfHwhalF1ZXJ5KGN1cikuaXModW50aWwpKSl7aWYoY3VyLm5vZGVUeXBlPT09MSl7bWF0Y2hlZC5wdXNoKGN1cik7fQotY3VyPWN1cltkaXJdO30KLXJldHVybiBtYXRjaGVkO30sc2libGluZzpmdW5jdGlvbihuLGVsZW0pe3ZhciByPVtdO2Zvcig7bjtuPW4ubmV4dFNpYmxpbmcpe2lmKG4ubm9kZVR5cGU9PT0xJiZuIT09ZWxlbSl7ci5wdXNoKG4pO319Ci1yZXR1cm4gcjt9fSk7alF1ZXJ5LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKHRhcmdldCl7dmFyIGksdGFyZ2V0cz1qUXVlcnkodGFyZ2V0LHRoaXMpLGxlbj10YXJnZXRzLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoaT0wO2k8bGVuO2krKyl7aWYoalF1ZXJ5LmNvbnRhaW5zKHRoaXMsdGFyZ2V0c1tpXSkpe3JldHVybiB0cnVlO319fSk7fSxjbG9zZXN0OmZ1bmN0aW9uKHNlbGVjdG9ycyxjb250ZXh0KXt2YXIgY3VyLGk9MCxsPXRoaXMubGVuZ3RoLG1hdGNoZWQ9W10scG9zPXJuZWVkc0NvbnRleHQudGVzdChzZWxlY3RvcnMpfHx0eXBlb2Ygc2VsZWN0b3JzIT09InN0cmluZyI/alF1ZXJ5KHNlbGVjdG9ycyxjb250ZXh0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtpPGw7aSsrKXtmb3IoY3VyPXRoaXNbaV07Y3VyJiZjdXIhPT1jb250ZXh0O2N1cj1jdXIucGFyZW50Tm9kZSl7aWYoY3VyLm5vZGVUeXBlPDExJiYocG9zP3Bvcy5pbmRleChjdXIpPi0xOmN1ci5ub2RlVHlwZT09PTEmJmpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvcihjdXIsc2VsZWN0b3JzKSkpe21hdGNoZWQucHVzaChjdXIpO2JyZWFrO319fQotcmV0dXJuIHRoaXMucHVzaFN0YWNrKG1hdGNoZWQubGVuZ3RoPjE/alF1ZXJ5LnVuaXF1ZShtYXRjaGVkKTptYXRjaGVkKTt9LGluZGV4OmZ1bmN0aW9uKGVsZW0pe2lmKCFlbGVtKXtyZXR1cm4odGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMTt9Ci1pZih0eXBlb2YgZWxlbT09PSJzdHJpbmciKXtyZXR1cm4galF1ZXJ5LmluQXJyYXkodGhpc1swXSxqUXVlcnkoZWxlbSkpO30KLXJldHVybiBqUXVlcnkuaW5BcnJheShlbGVtLmpxdWVyeT9lbGVtWzBdOmVsZW0sdGhpcyk7fSxhZGQ6ZnVuY3Rpb24oc2VsZWN0b3IsY29udGV4dCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGpRdWVyeS51bmlxdWUoalF1ZXJ5Lm1lcmdlKHRoaXMuZ2V0KCksalF1ZXJ5KHNlbGVjdG9yLGNvbnRleHQpKSkpO30sYWRkQmFjazpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMuYWRkKHNlbGVjdG9yPT1udWxsP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKHNlbGVjdG9yKSk7fX0pO2Z1bmN0aW9uIHNpYmxpbmcoY3VyLGRpcil7ZG97Y3VyPWN1cltkaXJdO313aGlsZShjdXImJmN1ci5ub2RlVHlwZSE9PTEpO3JldHVybiBjdXI7fQotalF1ZXJ5LmVhY2goe3BhcmVudDpmdW5jdGlvbihlbGVtKXt2YXIgcGFyZW50PWVsZW0ucGFyZW50Tm9kZTtyZXR1cm4gcGFyZW50JiZwYXJlbnQubm9kZVR5cGUhPT0xMT9wYXJlbnQ6bnVsbDt9LHBhcmVudHM6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicGFyZW50Tm9kZSIpO30scGFyZW50c1VudGlsOmZ1bmN0aW9uKGVsZW0saSx1bnRpbCl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicGFyZW50Tm9kZSIsdW50aWwpO30sbmV4dDpmdW5jdGlvbihlbGVtKXtyZXR1cm4gc2libGluZyhlbGVtLCJuZXh0U2libGluZyIpO30scHJldjpmdW5jdGlvbihlbGVtKXtyZXR1cm4gc2libGluZyhlbGVtLCJwcmV2aW91c1NpYmxpbmciKTt9LG5leHRBbGw6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwibmV4dFNpYmxpbmciKTt9LHByZXZBbGw6ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicHJldmlvdXNTaWJsaW5nIik7fSxuZXh0VW50aWw6ZnVuY3Rpb24oZWxlbSxpLHVudGlsKXtyZXR1cm4galF1ZXJ5LmRpcihlbGVtLCJuZXh0U2libGluZyIsdW50aWwpO30scHJldlVudGlsOmZ1bmN0aW9uKGVsZW0saSx1bnRpbCl7cmV0dXJuIGpRdWVyeS5kaXIoZWxlbSwicHJldmlvdXNTaWJsaW5nIix1bnRpbCk7fSxzaWJsaW5nczpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoKGVsZW0ucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZWxlbSk7fSxjaGlsZHJlbjpmdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LnNpYmxpbmcoZWxlbS5maXJzdENoaWxkKTt9LGNvbnRlbnRzOmZ1bmN0aW9uKGVsZW0pe3JldHVybiBqUXVlcnkubm9kZU5hbWUoZWxlbSwiaWZyYW1lIik/ZWxlbS5jb250ZW50RG9jdW1lbnR8fGVsZW0uY29udGVudFdpbmRvdy5kb2N1bWVudDpqUXVlcnkubWVyZ2UoW10sZWxlbS5jaGlsZE5vZGVzKTt9fSxmdW5jdGlvbihuYW1lLGZuKXtqUXVlcnkuZm5bbmFtZV09ZnVuY3Rpb24odW50aWwsc2VsZWN0b3Ipe3ZhciByZXQ9alF1ZXJ5Lm1hcCh0aGlzLGZuLHVudGlsKTtpZihuYW1lLnNsaWNlKC01KSE9PSJVbnRpbCIpe3NlbGVjdG9yPXVudGlsO30KLWlmKHNlbGVjdG9yJiZ0eXBlb2Ygc2VsZWN0b3I9PT0ic3RyaW5nIil7cmV0PWpRdWVyeS5maWx0ZXIoc2VsZWN0b3IscmV0KTt9Ci1pZih0aGlzLmxlbmd0aD4xKXtpZighZ3VhcmFudGVlZFVuaXF1ZVtuYW1lXSl7cmV0PWpRdWVyeS51bmlxdWUocmV0KTt9Ci1pZihycGFyZW50c3ByZXYudGVzdChuYW1lKSl7cmV0PXJldC5yZXZlcnNlKCk7fX0KLXJldHVybiB0aGlzLnB1c2hTdGFjayhyZXQpO307fSk7dmFyIHJub3R3aGl0ZT0oL1xTKy9nKTt2YXIgb3B0aW9uc0NhY2hlPXt9O2Z1bmN0aW9uIGNyZWF0ZU9wdGlvbnMob3B0aW9ucyl7dmFyIG9iamVjdD1vcHRpb25zQ2FjaGVbb3B0aW9uc109e307alF1ZXJ5LmVhY2gob3B0aW9ucy5tYXRjaChybm90d2hpdGUpfHxbXSxmdW5jdGlvbihfLGZsYWcpe29iamVjdFtmbGFnXT10cnVlO30pO3JldHVybiBvYmplY3Q7fQotalF1ZXJ5LkNhbGxiYWNrcz1mdW5jdGlvbihvcHRpb25zKXtvcHRpb25zPXR5cGVvZiBvcHRpb25zPT09InN0cmluZyI/KG9wdGlvbnNDYWNoZVtvcHRpb25zXXx8Y3JlYXRlT3B0aW9ucyhvcHRpb25zKSk6alF1ZXJ5LmV4dGVuZCh7fSxvcHRpb25zKTt2YXIKLWZpcmluZyxtZW1vcnksZmlyZWQsZmlyaW5nTGVuZ3RoLGZpcmluZ0luZGV4LGZpcmluZ1N0YXJ0LGxpc3Q9W10sc3RhY2s9IW9wdGlvbnMub25jZSYmW10sZmlyZT1mdW5jdGlvbihkYXRhKXttZW1vcnk9b3B0aW9ucy5tZW1vcnkmJmRhdGE7ZmlyZWQ9dHJ1ZTtmaXJpbmdJbmRleD1maXJpbmdTdGFydHx8MDtmaXJpbmdTdGFydD0wO2ZpcmluZ0xlbmd0aD1saXN0Lmxlbmd0aDtmaXJpbmc9dHJ1ZTtmb3IoO2xpc3QmJmZpcmluZ0luZGV4PGZpcmluZ0xlbmd0aDtmaXJpbmdJbmRleCsrKXtpZihsaXN0W2ZpcmluZ0luZGV4XS5hcHBseShkYXRhWzBdLGRhdGFbMV0pPT09ZmFsc2UmJm9wdGlvbnMuc3RvcE9uRmFsc2Upe21lbW9yeT1mYWxzZTticmVhazt9fQotZmlyaW5nPWZhbHNlO2lmKGxpc3Qpe2lmKHN0YWNrKXtpZihzdGFjay5sZW5ndGgpe2ZpcmUoc3RhY2suc2hpZnQoKSk7fX1lbHNlIGlmKG1lbW9yeSl7bGlzdD1bXTt9ZWxzZXtzZWxmLmRpc2FibGUoKTt9fX0sc2VsZj17YWRkOmZ1bmN0aW9uKCl7aWYobGlzdCl7dmFyIHN0YXJ0PWxpc3QubGVuZ3RoOyhmdW5jdGlvbiBhZGQoYXJncyl7alF1ZXJ5LmVhY2goYXJncyxmdW5jdGlvbihfLGFyZyl7dmFyIHR5cGU9alF1ZXJ5LnR5cGUoYXJnKTtpZih0eXBlPT09ImZ1bmN0aW9uIil7aWYoIW9wdGlvbnMudW5pcXVlfHwhc2VsZi5oYXMoYXJnKSl7bGlzdC5wdXNoKGFyZyk7fX1lbHNlIGlmKGFyZyYmYXJnLmxlbmd0aCYmdHlwZSE9PSJzdHJpbmciKXthZGQoYXJnKTt9fSk7fSkoYXJndW1lbnRzKTtpZihmaXJpbmcpe2ZpcmluZ0xlbmd0aD1saXN0Lmxlbmd0aDt9ZWxzZSBpZihtZW1vcnkpe2ZpcmluZ1N0YXJ0PXN0YXJ0O2ZpcmUobWVtb3J5KTt9fQotcmV0dXJuIHRoaXM7fSxyZW1vdmU6ZnVuY3Rpb24oKXtpZihsaXN0KXtqUXVlcnkuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oXyxhcmcpe3ZhciBpbmRleDt3aGlsZSgoaW5kZXg9alF1ZXJ5LmluQXJyYXkoYXJnLGxpc3QsaW5kZXgpKT4tMSl7bGlzdC5zcGxpY2UoaW5kZXgsMSk7aWYoZmlyaW5nKXtpZihpbmRleDw9ZmlyaW5nTGVuZ3RoKXtmaXJpbmdMZW5ndGgtLTt9Ci1pZihpbmRleDw9ZmlyaW5nSW5kZXgpe2ZpcmluZ0luZGV4LS07fX19fSk7fQotcmV0dXJuIHRoaXM7fSxoYXM6ZnVuY3Rpb24oZm4pe3JldHVybiBmbj9qUXVlcnkuaW5BcnJheShmbixsaXN0KT4tMTohIShsaXN0JiZsaXN0Lmxlbmd0aCk7fSxlbXB0eTpmdW5jdGlvbigpe2xpc3Q9W107ZmlyaW5nTGVuZ3RoPTA7cmV0dXJuIHRoaXM7fSxkaXNhYmxlOmZ1bmN0aW9uKCl7bGlzdD1zdGFjaz1tZW1vcnk9dW5kZWZpbmVkO3JldHVybiB0aGlzO30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hbGlzdDt9LGxvY2s6ZnVuY3Rpb24oKXtzdGFjaz11bmRlZmluZWQ7aWYoIW1lbW9yeSl7c2VsZi5kaXNhYmxlKCk7fQotcmV0dXJuIHRoaXM7fSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc3RhY2s7fSxmaXJlV2l0aDpmdW5jdGlvbihjb250ZXh0LGFyZ3Mpe2lmKGxpc3QmJighZmlyZWR8fHN0YWNrKSl7YXJncz1hcmdzfHxbXTthcmdzPVtjb250ZXh0LGFyZ3Muc2xpY2U/YXJncy5zbGljZSgpOmFyZ3NdO2lmKGZpcmluZyl7c3RhY2sucHVzaChhcmdzKTt9ZWxzZXtmaXJlKGFyZ3MpO319Ci1yZXR1cm4gdGhpczt9LGZpcmU6ZnVuY3Rpb24oKXtzZWxmLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpczt9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFmaXJlZDt9fTtyZXR1cm4gc2VsZjt9O2pRdWVyeS5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGZ1bmMpe3ZhciB0dXBsZXM9W1sicmVzb2x2ZSIsImRvbmUiLGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLGpRdWVyeS5DYWxsYmFja3MoIm1lbW9yeSIpXV0sc3RhdGU9InBlbmRpbmciLHByb21pc2U9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHN0YXRlO30sYWx3YXlzOmZ1bmN0aW9uKCl7ZGVmZXJyZWQuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKTtyZXR1cm4gdGhpczt9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZm5zPWFyZ3VtZW50cztyZXR1cm4galF1ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKG5ld0RlZmVyKXtqUXVlcnkuZWFjaCh0dXBsZXMsZnVuY3Rpb24oaSx0dXBsZSl7dmFyIGZuPWpRdWVyeS5pc0Z1bmN0aW9uKGZuc1tpXSkmJmZuc1tpXTtkZWZlcnJlZFt0dXBsZVsxXV0oZnVuY3Rpb24oKXt2YXIgcmV0dXJuZWQ9Zm4mJmZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihyZXR1cm5lZCYmalF1ZXJ5LmlzRnVuY3Rpb24ocmV0dXJuZWQucHJvbWlzZSkpe3JldHVybmVkLnByb21pc2UoKS5kb25lKG5ld0RlZmVyLnJlc29sdmUpLmZhaWwobmV3RGVmZXIucmVqZWN0KS5wcm9ncmVzcyhuZXdEZWZlci5ub3RpZnkpO31lbHNle25ld0RlZmVyW3R1cGxlWzBdKyJXaXRoIl0odGhpcz09PXByb21pc2U/bmV3RGVmZXIucHJvbWlzZSgpOnRoaXMsZm4/W3JldHVybmVkXTphcmd1bWVudHMpO319KTt9KTtmbnM9bnVsbDt9KS5wcm9taXNlKCk7fSxwcm9taXNlOmZ1bmN0aW9uKG9iail7cmV0dXJuIG9iaiE9bnVsbD9qUXVlcnkuZXh0ZW5kKG9iaixwcm9taXNlKTpwcm9taXNlO319LGRlZmVycmVkPXt9O3Byb21pc2UucGlwZT1wcm9taXNlLnRoZW47alF1ZXJ5LmVhY2godHVwbGVzLGZ1bmN0aW9uKGksdHVwbGUpe3ZhciBsaXN0PXR1cGxlWzJdLHN0YXRlU3RyaW5nPXR1cGxlWzNdO3Byb21pc2VbdHVwbGVbMV1dPWxpc3QuYWRkO2lmKHN0YXRlU3RyaW5nKXtsaXN0LmFkZChmdW5jdGlvbigpe3N0YXRlPXN0YXRlU3RyaW5nO30sdHVwbGVzW2leMV1bMl0uZGlzYWJsZSx0dXBsZXNbMl1bMl0ubG9jayk7fQotZGVmZXJyZWRbdHVwbGVbMF1dPWZ1bmN0aW9uKCl7ZGVmZXJyZWRbdHVwbGVbMF0rIldpdGgiXSh0aGlzPT09ZGVmZXJyZWQ/cHJvbWlzZTp0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXM7fTtkZWZlcnJlZFt0dXBsZVswXSsiV2l0aCJdPWxpc3QuZmlyZVdpdGg7fSk7cHJvbWlzZS5wcm9taXNlKGRlZmVycmVkKTtpZihmdW5jKXtmdW5jLmNhbGwoZGVmZXJyZWQsZGVmZXJyZWQpO30KLXJldHVybiBkZWZlcnJlZDt9LHdoZW46ZnVuY3Rpb24oc3Vib3JkaW5hdGUpe3ZhciBpPTAscmVzb2x2ZVZhbHVlcz1zbGljZS5jYWxsKGFyZ3VtZW50cyksbGVuZ3RoPXJlc29sdmVWYWx1ZXMubGVuZ3RoLHJlbWFpbmluZz1sZW5ndGghPT0xfHwoc3Vib3JkaW5hdGUmJmpRdWVyeS5pc0Z1bmN0aW9uKHN1Ym9yZGluYXRlLnByb21pc2UpKT9sZW5ndGg6MCxkZWZlcnJlZD1yZW1haW5pbmc9PT0xP3N1Ym9yZGluYXRlOmpRdWVyeS5EZWZlcnJlZCgpLHVwZGF0ZUZ1bmM9ZnVuY3Rpb24oaSxjb250ZXh0cyx2YWx1ZXMpe3JldHVybiBmdW5jdGlvbih2YWx1ZSl7Y29udGV4dHNbaV09dGhpczt2YWx1ZXNbaV09YXJndW1lbnRzLmxlbmd0aD4xP3NsaWNlLmNhbGwoYXJndW1lbnRzKTp2YWx1ZTtpZih2YWx1ZXM9PT1wcm9ncmVzc1ZhbHVlcyl7ZGVmZXJyZWQubm90aWZ5V2l0aChjb250ZXh0cyx2YWx1ZXMpO31lbHNlIGlmKCEoLS1yZW1haW5pbmcpKXtkZWZlcnJlZC5yZXNvbHZlV2l0aChjb250ZXh0cyx2YWx1ZXMpO319O30scHJvZ3Jlc3NWYWx1ZXMscHJvZ3Jlc3NDb250ZXh0cyxyZXNvbHZlQ29udGV4dHM7aWYobGVuZ3RoPjEpe3Byb2dyZXNzVmFsdWVzPW5ldyBBcnJheShsZW5ndGgpO3Byb2dyZXNzQ29udGV4dHM9bmV3IEFycmF5KGxlbmd0aCk7cmVzb2x2ZUNvbnRleHRzPW5ldyBBcnJheShsZW5ndGgpO2Zvcig7aTxsZW5ndGg7aSsrKXtpZihyZXNvbHZlVmFsdWVzW2ldJiZqUXVlcnkuaXNGdW5jdGlvbihyZXNvbHZlVmFsdWVzW2ldLnByb21pc2UpKXtyZXNvbHZlVmFsdWVzW2ldLnByb21pc2UoKS5kb25lKHVwZGF0ZUZ1bmMoaSxyZXNvbHZlQ29udGV4dHMscmVzb2x2ZVZhbHVlcykpLmZhaWwoZGVmZXJyZWQucmVqZWN0KS5wcm9ncmVzcyh1cGRhdGVGdW5jKGkscHJvZ3Jlc3NDb250ZXh0cyxwcm9ncmVzc1ZhbHVlcykpO31lbHNley0tcmVtYWluaW5nO319fQotaWYoIXJlbWFpbmluZyl7ZGVmZXJyZWQucmVzb2x2ZVdpdGgocmVzb2x2ZUNvbnRleHRzLHJlc29sdmVWYWx1ZXMpO30KLXJldHVybiBkZWZlcnJlZC5wcm9taXNlKCk7fX0pO3ZhciByZWFkeUxpc3Q7alF1ZXJ5LmZuLnJlYWR5PWZ1bmN0aW9uKGZuKXtqUXVlcnkucmVhZHkucHJvbWlzZSgpLmRvbmUoZm4pO3JldHVybiB0aGlzO307alF1ZXJ5LmV4dGVuZCh7aXNSZWFkeTpmYWxzZSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oaG9sZCl7aWYoaG9sZCl7alF1ZXJ5LnJlYWR5V2FpdCsrO31lbHNle2pRdWVyeS5yZWFkeSh0cnVlKTt9fSxyZWFkeTpmdW5jdGlvbih3YWl0KXtpZih3YWl0PT09dHJ1ZT8tLWpRdWVyeS5yZWFkeVdhaXQ6alF1ZXJ5LmlzUmVhZHkpe3JldHVybjt9Ci1pZighZG9jdW1lbnQuYm9keSl7cmV0dXJuIHNldFRpbWVvdXQoalF1ZXJ5LnJlYWR5KTt9Ci1qUXVlcnkuaXNSZWFkeT10cnVlO2lmKHdhaXQhPT10cnVlJiYtLWpRdWVyeS5yZWFkeVdhaXQ+MCl7cmV0dXJuO30KLXJlYWR5TGlzdC5yZXNvbHZlV2l0aChkb2N1bWVudCxbalF1ZXJ5XSk7aWYoalF1ZXJ5LmZuLnRyaWdnZXJIYW5kbGVyKXtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpO2pRdWVyeShkb2N1bWVudCkub2ZmKCJyZWFkeSIpO319fSk7ZnVuY3Rpb24gZGV0YWNoKCl7aWYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsY29tcGxldGVkLGZhbHNlKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsY29tcGxldGVkLGZhbHNlKTt9ZWxzZXtkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixjb21wbGV0ZWQpO3dpbmRvdy5kZXRhY2hFdmVudCgib25sb2FkIixjb21wbGV0ZWQpO319Ci1mdW5jdGlvbiBjb21wbGV0ZWQoKXtpZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyfHxldmVudC50eXBlPT09ImxvYWQifHxkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIil7ZGV0YWNoKCk7alF1ZXJ5LnJlYWR5KCk7fX0KLWpRdWVyeS5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKG9iail7aWYoIXJlYWR5TGlzdCl7cmVhZHlMaXN0PWpRdWVyeS5EZWZlcnJlZCgpO2lmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXtzZXRUaW1lb3V0KGpRdWVyeS5yZWFkeSk7fWVsc2UgaWYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcil7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsY29tcGxldGVkLGZhbHNlKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsY29tcGxldGVkLGZhbHNlKTt9ZWxzZXtkb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixjb21wbGV0ZWQpO3dpbmRvdy5hdHRhY2hFdmVudCgib25sb2FkIixjb21wbGV0ZWQpO3ZhciB0b3A9ZmFsc2U7dHJ5e3RvcD13aW5kb3cuZnJhbWVFbGVtZW50PT1udWxsJiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7fWNhdGNoKGUpe30KLWlmKHRvcCYmdG9wLmRvU2Nyb2xsKXsoZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpe2lmKCFqUXVlcnkuaXNSZWFkeSl7dHJ5e3RvcC5kb1Njcm9sbCgibGVmdCIpO31jYXRjaChlKXtyZXR1cm4gc2V0VGltZW91dChkb1Njcm9sbENoZWNrLDUwKTt9Ci1kZXRhY2goKTtqUXVlcnkucmVhZHkoKTt9fSkoKTt9fX0KLXJldHVybiByZWFkeUxpc3QucHJvbWlzZShvYmopO307dmFyIHN0cnVuZGVmaW5lZD10eXBlb2YgdW5kZWZpbmVkO3ZhciBpO2ZvcihpIGluIGpRdWVyeShzdXBwb3J0KSl7YnJlYWs7fQotc3VwcG9ydC5vd25MYXN0PWkhPT0iMCI7c3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWZhbHNlO2pRdWVyeShmdW5jdGlvbigpe3ZhciB2YWwsZGl2LGJvZHksY29udGFpbmVyO2JvZHk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZighYm9keXx8IWJvZHkuc3R5bGUpe3JldHVybjt9Ci1kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnRhaW5lci5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCI7Ym9keS5hcHBlbmRDaGlsZChjb250YWluZXIpLmFwcGVuZENoaWxkKGRpdik7aWYodHlwZW9mIGRpdi5zdHlsZS56b29tIT09c3RydW5kZWZpbmVkKXtkaXYuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSI7c3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PXZhbD1kaXYub2Zmc2V0V2lkdGg9PT0zO2lmKHZhbCl7Ym9keS5zdHlsZS56b29tPTE7fX0KLWJvZHkucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTt9KTsoZnVuY3Rpb24oKXt2YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKHN1cHBvcnQuZGVsZXRlRXhwYW5kbz09bnVsbCl7c3VwcG9ydC5kZWxldGVFeHBhbmRvPXRydWU7dHJ5e2RlbGV0ZSBkaXYudGVzdDt9Y2F0Y2goZSl7c3VwcG9ydC5kZWxldGVFeHBhbmRvPWZhbHNlO319Ci1kaXY9bnVsbDt9KSgpO2pRdWVyeS5hY2NlcHREYXRhPWZ1bmN0aW9uKGVsZW0pe3ZhciBub0RhdGE9alF1ZXJ5Lm5vRGF0YVsoZWxlbS5ub2RlTmFtZSsiICIpLnRvTG93ZXJDYXNlKCldLG5vZGVUeXBlPStlbGVtLm5vZGVUeXBlfHwxO3JldHVybiBub2RlVHlwZSE9PTEmJm5vZGVUeXBlIT09OT9mYWxzZTohbm9EYXRhfHxub0RhdGEhPT10cnVlJiZlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09bm9EYXRhO307dmFyIHJicmFjZT0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLHJtdWx0aURhc2g9LyhbQS1aXSkvZztmdW5jdGlvbiBkYXRhQXR0cihlbGVtLGtleSxkYXRhKXtpZihkYXRhPT09dW5kZWZpbmVkJiZlbGVtLm5vZGVUeXBlPT09MSl7dmFyIG5hbWU9ImRhdGEtIitrZXkucmVwbGFjZShybXVsdGlEYXNoLCItJDEiKS50b0xvd2VyQ2FzZSgpO2RhdGE9ZWxlbS5nZXRBdHRyaWJ1dGUobmFtZSk7aWYodHlwZW9mIGRhdGE9PT0ic3RyaW5nIil7dHJ5e2RhdGE9ZGF0YT09PSJ0cnVlIj90cnVlOmRhdGE9PT0iZmFsc2UiP2ZhbHNlOmRhdGE9PT0ibnVsbCI/bnVsbDorZGF0YSsiIj09PWRhdGE/K2RhdGE6cmJyYWNlLnRlc3QoZGF0YSk/alF1ZXJ5LnBhcnNlSlNPTihkYXRhKTpkYXRhO31jYXRjaChlKXt9Ci1qUXVlcnkuZGF0YShlbGVtLGtleSxkYXRhKTt9ZWxzZXtkYXRhPXVuZGVmaW5lZDt9fQotcmV0dXJuIGRhdGE7fQotZnVuY3Rpb24gaXNFbXB0eURhdGFPYmplY3Qob2JqKXt2YXIgbmFtZTtmb3IobmFtZSBpbiBvYmope2lmKG5hbWU9PT0iZGF0YSImJmpRdWVyeS5pc0VtcHR5T2JqZWN0KG9ialtuYW1lXSkpe2NvbnRpbnVlO30KLWlmKG5hbWUhPT0idG9KU09OIil7cmV0dXJuIGZhbHNlO319Ci1yZXR1cm4gdHJ1ZTt9Ci1mdW5jdGlvbiBpbnRlcm5hbERhdGEoZWxlbSxuYW1lLGRhdGEscHZ0KXtpZighalF1ZXJ5LmFjY2VwdERhdGEoZWxlbSkpe3JldHVybjt9Ci12YXIgcmV0LHRoaXNDYWNoZSxpbnRlcm5hbEtleT1qUXVlcnkuZXhwYW5kbyxpc05vZGU9ZWxlbS5ub2RlVHlwZSxjYWNoZT1pc05vZGU/alF1ZXJ5LmNhY2hlOmVsZW0saWQ9aXNOb2RlP2VsZW1baW50ZXJuYWxLZXldOmVsZW1baW50ZXJuYWxLZXldJiZpbnRlcm5hbEtleTtpZigoIWlkfHwhY2FjaGVbaWRdfHwoIXB2dCYmIWNhY2hlW2lkXS5kYXRhKSkmJmRhdGE9PT11bmRlZmluZWQmJnR5cGVvZiBuYW1lPT09InN0cmluZyIpe3JldHVybjt9Ci1pZighaWQpe2lmKGlzTm9kZSl7aWQ9ZWxlbVtpbnRlcm5hbEtleV09ZGVsZXRlZElkcy5wb3AoKXx8alF1ZXJ5Lmd1aWQrKzt9ZWxzZXtpZD1pbnRlcm5hbEtleTt9fQotaWYoIWNhY2hlW2lkXSl7Y2FjaGVbaWRdPWlzTm9kZT97fTp7dG9KU09OOmpRdWVyeS5ub29wfTt9Ci1pZih0eXBlb2YgbmFtZT09PSJvYmplY3QifHx0eXBlb2YgbmFtZT09PSJmdW5jdGlvbiIpe2lmKHB2dCl7Y2FjaGVbaWRdPWpRdWVyeS5leHRlbmQoY2FjaGVbaWRdLG5hbWUpO31lbHNle2NhY2hlW2lkXS5kYXRhPWpRdWVyeS5leHRlbmQoY2FjaGVbaWRdLmRhdGEsbmFtZSk7fX0KLXRoaXNDYWNoZT1jYWNoZVtpZF07aWYoIXB2dCl7aWYoIXRoaXNDYWNoZS5kYXRhKXt0aGlzQ2FjaGUuZGF0YT17fTt9Ci10aGlzQ2FjaGU9dGhpc0NhY2hlLmRhdGE7fQotaWYoZGF0YSE9PXVuZGVmaW5lZCl7dGhpc0NhY2hlW2pRdWVyeS5jYW1lbENhc2UobmFtZSldPWRhdGE7fQotaWYodHlwZW9mIG5hbWU9PT0ic3RyaW5nIil7cmV0PXRoaXNDYWNoZVtuYW1lXTtpZihyZXQ9PW51bGwpe3JldD10aGlzQ2FjaGVbalF1ZXJ5LmNhbWVsQ2FzZShuYW1lKV07fX1lbHNle3JldD10aGlzQ2FjaGU7fQotcmV0dXJuIHJldDt9Ci1mdW5jdGlvbiBpbnRlcm5hbFJlbW92ZURhdGEoZWxlbSxuYW1lLHB2dCl7aWYoIWpRdWVyeS5hY2NlcHREYXRhKGVsZW0pKXtyZXR1cm47fQotdmFyIHRoaXNDYWNoZSxpLGlzTm9kZT1lbGVtLm5vZGVUeXBlLGNhY2hlPWlzTm9kZT9qUXVlcnkuY2FjaGU6ZWxlbSxpZD1pc05vZGU/ZWxlbVtqUXVlcnkuZXhwYW5kb106alF1ZXJ5LmV4cGFuZG87aWYoIWNhY2hlW2lkXSl7cmV0dXJuO30KLWlmKG5hbWUpe3RoaXNDYWNoZT1wdnQ/Y2FjaGVbaWRdOmNhY2hlW2lkXS5kYXRhO2lmKHRoaXNDYWNoZSl7aWYoIWpRdWVyeS5pc0FycmF5KG5hbWUpKXtpZihuYW1lIGluIHRoaXNDYWNoZSl7bmFtZT1bbmFtZV07fWVsc2V7bmFtZT1qUXVlcnkuY2FtZWxDYXNlKG5hbWUpO2lmKG5hbWUgaW4gdGhpc0NhY2hlKXtuYW1lPVtuYW1lXTt9ZWxzZXtuYW1lPW5hbWUuc3BsaXQoIiAiKTt9fX1lbHNle25hbWU9bmFtZS5jb25jYXQoalF1ZXJ5Lm1hcChuYW1lLGpRdWVyeS5jYW1lbENhc2UpKTt9Ci1pPW5hbWUubGVuZ3RoO3doaWxlKGktLSl7ZGVsZXRlIHRoaXNDYWNoZVtuYW1lW2ldXTt9Ci1pZihwdnQ/IWlzRW1wdHlEYXRhT2JqZWN0KHRoaXNDYWNoZSk6IWpRdWVyeS5pc0VtcHR5T2JqZWN0KHRoaXNDYWNoZSkpe3JldHVybjt9fX0KLWlmKCFwdnQpe2RlbGV0ZSBjYWNoZVtpZF0uZGF0YTtpZighaXNFbXB0eURhdGFPYmplY3QoY2FjaGVbaWRdKSl7cmV0dXJuO319Ci1pZihpc05vZGUpe2pRdWVyeS5jbGVhbkRhdGEoW2VsZW1dLHRydWUpO31lbHNlIGlmKHN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8Y2FjaGUhPWNhY2hlLndpbmRvdyl7ZGVsZXRlIGNhY2hlW2lkXTt9ZWxzZXtjYWNoZVtpZF09bnVsbDt9fQotalF1ZXJ5LmV4dGVuZCh7Y2FjaGU6e30sbm9EYXRhOnsiYXBwbGV0ICI6dHJ1ZSwiZW1iZWQgIjp0cnVlLCJvYmplY3QgIjoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIn0saGFzRGF0YTpmdW5jdGlvbihlbGVtKXtlbGVtPWVsZW0ubm9kZVR5cGU/alF1ZXJ5LmNhY2hlW2VsZW1balF1ZXJ5LmV4cGFuZG9dXTplbGVtW2pRdWVyeS5leHBhbmRvXTtyZXR1cm4hIWVsZW0mJiFpc0VtcHR5RGF0YU9iamVjdChlbGVtKTt9LGRhdGE6ZnVuY3Rpb24oZWxlbSxuYW1lLGRhdGEpe3JldHVybiBpbnRlcm5hbERhdGEoZWxlbSxuYW1lLGRhdGEpO30scmVtb3ZlRGF0YTpmdW5jdGlvbihlbGVtLG5hbWUpe3JldHVybiBpbnRlcm5hbFJlbW92ZURhdGEoZWxlbSxuYW1lKTt9LF9kYXRhOmZ1bmN0aW9uKGVsZW0sbmFtZSxkYXRhKXtyZXR1cm4gaW50ZXJuYWxEYXRhKGVsZW0sbmFtZSxkYXRhLHRydWUpO30sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZWxlbSxuYW1lKXtyZXR1cm4gaW50ZXJuYWxSZW1vdmVEYXRhKGVsZW0sbmFtZSx0cnVlKTt9fSk7alF1ZXJ5LmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihrZXksdmFsdWUpe3ZhciBpLG5hbWUsZGF0YSxlbGVtPXRoaXNbMF0sYXR0cnM9ZWxlbSYmZWxlbS5hdHRyaWJ1dGVzO2lmKGtleT09PXVuZGVmaW5lZCl7aWYodGhpcy5sZW5ndGgpe2RhdGE9alF1ZXJ5LmRhdGEoZWxlbSk7aWYoZWxlbS5ub2RlVHlwZT09PTEmJiFqUXVlcnkuX2RhdGEoZWxlbSwicGFyc2VkQXR0cnMiKSl7aT1hdHRycy5sZW5ndGg7d2hpbGUoaS0tKXtpZihhdHRyc1tpXSl7bmFtZT1hdHRyc1tpXS5uYW1lO2lmKG5hbWUuaW5kZXhPZigiZGF0YS0iKT09PTApe25hbWU9alF1ZXJ5LmNhbWVsQ2FzZShuYW1lLnNsaWNlKDUpKTtkYXRhQXR0cihlbGVtLG5hbWUsZGF0YVtuYW1lXSk7fX19Ci1qUXVlcnkuX2RhdGEoZWxlbSwicGFyc2VkQXR0cnMiLHRydWUpO319Ci1yZXR1cm4gZGF0YTt9Ci1pZih0eXBlb2Yga2V5PT09Im9iamVjdCIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZGF0YSh0aGlzLGtleSk7fSk7fQotcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZGF0YSh0aGlzLGtleSx2YWx1ZSk7fSk6ZWxlbT9kYXRhQXR0cihlbGVtLGtleSxqUXVlcnkuZGF0YShlbGVtLGtleSkpOnVuZGVmaW5lZDt9LHJlbW92ZURhdGE6ZnVuY3Rpb24oa2V5KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LnJlbW92ZURhdGEodGhpcyxrZXkpO30pO319KTtqUXVlcnkuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlbGVtLHR5cGUsZGF0YSl7dmFyIHF1ZXVlO2lmKGVsZW0pe3R5cGU9KHR5cGV8fCJmeCIpKyJxdWV1ZSI7cXVldWU9alF1ZXJ5Ll9kYXRhKGVsZW0sdHlwZSk7aWYoZGF0YSl7aWYoIXF1ZXVlfHxqUXVlcnkuaXNBcnJheShkYXRhKSl7cXVldWU9alF1ZXJ5Ll9kYXRhKGVsZW0sdHlwZSxqUXVlcnkubWFrZUFycmF5KGRhdGEpKTt9ZWxzZXtxdWV1ZS5wdXNoKGRhdGEpO319Ci1yZXR1cm4gcXVldWV8fFtdO319LGRlcXVldWU6ZnVuY3Rpb24oZWxlbSx0eXBlKXt0eXBlPXR5cGV8fCJmeCI7dmFyIHF1ZXVlPWpRdWVyeS5xdWV1ZShlbGVtLHR5cGUpLHN0YXJ0TGVuZ3RoPXF1ZXVlLmxlbmd0aCxmbj1xdWV1ZS5zaGlmdCgpLGhvb2tzPWpRdWVyeS5fcXVldWVIb29rcyhlbGVtLHR5cGUpLG5leHQ9ZnVuY3Rpb24oKXtqUXVlcnkuZGVxdWV1ZShlbGVtLHR5cGUpO307aWYoZm49PT0iaW5wcm9ncmVzcyIpe2ZuPXF1ZXVlLnNoaWZ0KCk7c3RhcnRMZW5ndGgtLTt9Ci1pZihmbil7aWYodHlwZT09PSJmeCIpe3F1ZXVlLnVuc2hpZnQoImlucHJvZ3Jlc3MiKTt9Ci1kZWxldGUgaG9va3Muc3RvcDtmbi5jYWxsKGVsZW0sbmV4dCxob29rcyk7fQotaWYoIXN0YXJ0TGVuZ3RoJiZob29rcyl7aG9va3MuZW1wdHkuZmlyZSgpO319LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGVsZW0sdHlwZSl7dmFyIGtleT10eXBlKyJxdWV1ZUhvb2tzIjtyZXR1cm4galF1ZXJ5Ll9kYXRhKGVsZW0sa2V5KXx8alF1ZXJ5Ll9kYXRhKGVsZW0sa2V5LHtlbXB0eTpqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe2pRdWVyeS5fcmVtb3ZlRGF0YShlbGVtLHR5cGUrInF1ZXVlIik7alF1ZXJ5Ll9yZW1vdmVEYXRhKGVsZW0sa2V5KTt9KX0pO319KTtqUXVlcnkuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbih0eXBlLGRhdGEpe3ZhciBzZXR0ZXI9MjtpZih0eXBlb2YgdHlwZSE9PSJzdHJpbmciKXtkYXRhPXR5cGU7dHlwZT0iZngiO3NldHRlci0tO30KLWlmKGFyZ3VtZW50cy5sZW5ndGg8c2V0dGVyKXtyZXR1cm4galF1ZXJ5LnF1ZXVlKHRoaXNbMF0sdHlwZSk7fQotcmV0dXJuIGRhdGE9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcXVldWU9alF1ZXJ5LnF1ZXVlKHRoaXMsdHlwZSxkYXRhKTtqUXVlcnkuX3F1ZXVlSG9va3ModGhpcyx0eXBlKTtpZih0eXBlPT09ImZ4IiYmcXVldWVbMF0hPT0iaW5wcm9ncmVzcyIpe2pRdWVyeS5kZXF1ZXVlKHRoaXMsdHlwZSk7fX0pO30sZGVxdWV1ZTpmdW5jdGlvbih0eXBlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7alF1ZXJ5LmRlcXVldWUodGhpcyx0eXBlKTt9KTt9LGNsZWFyUXVldWU6ZnVuY3Rpb24odHlwZSl7cmV0dXJuIHRoaXMucXVldWUodHlwZXx8ImZ4IixbXSk7fSxwcm9taXNlOmZ1bmN0aW9uKHR5cGUsb2JqKXt2YXIgdG1wLGNvdW50PTEsZGVmZXI9alF1ZXJ5LkRlZmVycmVkKCksZWxlbWVudHM9dGhpcyxpPXRoaXMubGVuZ3RoLHJlc29sdmU9ZnVuY3Rpb24oKXtpZighKC0tY291bnQpKXtkZWZlci5yZXNvbHZlV2l0aChlbGVtZW50cyxbZWxlbWVudHNdKTt9fTtpZih0eXBlb2YgdHlwZSE9PSJzdHJpbmciKXtvYmo9dHlwZTt0eXBlPXVuZGVmaW5lZDt9Ci10eXBlPXR5cGV8fCJmeCI7d2hpbGUoaS0tKXt0bXA9alF1ZXJ5Ll9kYXRhKGVsZW1lbnRzW2ldLHR5cGUrInF1ZXVlSG9va3MiKTtpZih0bXAmJnRtcC5lbXB0eSl7Y291bnQrKzt0bXAuZW1wdHkuYWRkKHJlc29sdmUpO319Ci1yZXNvbHZlKCk7cmV0dXJuIGRlZmVyLnByb21pc2Uob2JqKTt9fSk7dmFyIHBudW09KC9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8pLnNvdXJjZTt2YXIgY3NzRXhwYW5kPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il07dmFyIGlzSGlkZGVuPWZ1bmN0aW9uKGVsZW0sZWwpe2VsZW09ZWx8fGVsZW07cmV0dXJuIGpRdWVyeS5jc3MoZWxlbSwiZGlzcGxheSIpPT09Im5vbmUifHwhalF1ZXJ5LmNvbnRhaW5zKGVsZW0ub3duZXJEb2N1bWVudCxlbGVtKTt9O3ZhciBhY2Nlc3M9alF1ZXJ5LmFjY2Vzcz1mdW5jdGlvbihlbGVtcyxmbixrZXksdmFsdWUsY2hhaW5hYmxlLGVtcHR5R2V0LHJhdyl7dmFyIGk9MCxsZW5ndGg9ZWxlbXMubGVuZ3RoLGJ1bGs9a2V5PT1udWxsO2lmKGpRdWVyeS50eXBlKGtleSk9PT0ib2JqZWN0Iil7Y2hhaW5hYmxlPXRydWU7Zm9yKGkgaW4ga2V5KXtqUXVlcnkuYWNjZXNzKGVsZW1zLGZuLGksa2V5W2ldLHRydWUsZW1wdHlHZXQscmF3KTt9fWVsc2UgaWYodmFsdWUhPT11bmRlZmluZWQpe2NoYWluYWJsZT10cnVlO2lmKCFqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkpe3Jhdz10cnVlO30KLWlmKGJ1bGspe2lmKHJhdyl7Zm4uY2FsbChlbGVtcyx2YWx1ZSk7Zm49bnVsbDt9ZWxzZXtidWxrPWZuO2ZuPWZ1bmN0aW9uKGVsZW0sa2V5LHZhbHVlKXtyZXR1cm4gYnVsay5jYWxsKGpRdWVyeShlbGVtKSx2YWx1ZSk7fTt9fQotaWYoZm4pe2Zvcig7aTxsZW5ndGg7aSsrKXtmbihlbGVtc1tpXSxrZXkscmF3P3ZhbHVlOnZhbHVlLmNhbGwoZWxlbXNbaV0saSxmbihlbGVtc1tpXSxrZXkpKSk7fX19Ci1yZXR1cm4gY2hhaW5hYmxlP2VsZW1zOmJ1bGs/Zm4uY2FsbChlbGVtcyk6bGVuZ3RoP2ZuKGVsZW1zWzBdLGtleSk6ZW1wdHlHZXQ7fTt2YXIgcmNoZWNrYWJsZVR5cGU9KC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pKTsoZnVuY3Rpb24oKXt2YXIgaW5wdXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZnJhZ21lbnQ9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2Rpdi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7c3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZT1kaXYuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTM7c3VwcG9ydC50Ym9keT0hZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aDtzdXBwb3J0Lmh0bWxTZXJpYWxpemU9ISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGg7c3VwcG9ydC5odG1sNUNsb25lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSh0cnVlKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86bmF2PiI7aW5wdXQudHlwZT0iY2hlY2tib3giO2lucHV0LmNoZWNrZWQ9dHJ1ZTtmcmFnbWVudC5hcHBlbmRDaGlsZChpbnB1dCk7c3VwcG9ydC5hcHBlbmRDaGVja2VkPWlucHV0LmNoZWNrZWQ7ZGl2LmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiI7c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZD0hIWRpdi5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtmcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpO2Rpdi5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgY2hlY2tlZD0nY2hlY2tlZCcgbmFtZT0ndCcvPiI7c3VwcG9ydC5jaGVja0Nsb25lPWRpdi5jbG9uZU5vZGUodHJ1ZSkuY2xvbmVOb2RlKHRydWUpLmxhc3RDaGlsZC5jaGVja2VkO3N1cHBvcnQubm9DbG9uZUV2ZW50PXRydWU7aWYoZGl2LmF0dGFjaEV2ZW50KXtkaXYuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7c3VwcG9ydC5ub0Nsb25lRXZlbnQ9ZmFsc2U7fSk7ZGl2LmNsb25lTm9kZSh0cnVlKS5jbGljaygpO30KLWlmKHN1cHBvcnQuZGVsZXRlRXhwYW5kbz09bnVsbCl7c3VwcG9ydC5kZWxldGVFeHBhbmRvPXRydWU7dHJ5e2RlbGV0ZSBkaXYudGVzdDt9Y2F0Y2goZSl7c3VwcG9ydC5kZWxldGVFeHBhbmRvPWZhbHNlO319fSkoKTsoZnVuY3Rpb24oKXt2YXIgaSxldmVudE5hbWUsZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihpIGlue3N1Ym1pdDp0cnVlLGNoYW5nZTp0cnVlLGZvY3VzaW46dHJ1ZX0pe2V2ZW50TmFtZT0ib24iK2k7aWYoIShzdXBwb3J0W2krIkJ1YmJsZXMiXT1ldmVudE5hbWUgaW4gd2luZG93KSl7ZGl2LnNldEF0dHJpYnV0ZShldmVudE5hbWUsInQiKTtzdXBwb3J0W2krIkJ1YmJsZXMiXT1kaXYuYXR0cmlidXRlc1tldmVudE5hbWVdLmV4cGFuZG89PT1mYWxzZTt9fQotZGl2PW51bGw7fSkoKTt2YXIgcmZvcm1FbGVtcz0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2kscmtleUV2ZW50PS9ea2V5LyxybW91c2VFdmVudD0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnUpfGNsaWNrLyxyZm9jdXNNb3JwaD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8scnR5cGVuYW1lc3BhY2U9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiByZXR1cm5UcnVlKCl7cmV0dXJuIHRydWU7fQotZnVuY3Rpb24gcmV0dXJuRmFsc2UoKXtyZXR1cm4gZmFsc2U7fQotZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKXt0cnl7cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7fWNhdGNoKGVycil7fX0KLWpRdWVyeS5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlbGVtLHR5cGVzLGhhbmRsZXIsZGF0YSxzZWxlY3Rvcil7dmFyIHRtcCxldmVudHMsdCxoYW5kbGVPYmpJbixzcGVjaWFsLGV2ZW50SGFuZGxlLGhhbmRsZU9iaixoYW5kbGVycyx0eXBlLG5hbWVzcGFjZXMsb3JpZ1R5cGUsZWxlbURhdGE9alF1ZXJ5Ll9kYXRhKGVsZW0pO2lmKCFlbGVtRGF0YSl7cmV0dXJuO30KLWlmKGhhbmRsZXIuaGFuZGxlcil7aGFuZGxlT2JqSW49aGFuZGxlcjtoYW5kbGVyPWhhbmRsZU9iakluLmhhbmRsZXI7c2VsZWN0b3I9aGFuZGxlT2JqSW4uc2VsZWN0b3I7fQotaWYoIWhhbmRsZXIuZ3VpZCl7aGFuZGxlci5ndWlkPWpRdWVyeS5ndWlkKys7fQotaWYoIShldmVudHM9ZWxlbURhdGEuZXZlbnRzKSl7ZXZlbnRzPWVsZW1EYXRhLmV2ZW50cz17fTt9Ci1pZighKGV2ZW50SGFuZGxlPWVsZW1EYXRhLmhhbmRsZSkpe2V2ZW50SGFuZGxlPWVsZW1EYXRhLmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGpRdWVyeSE9PXN0cnVuZGVmaW5lZCYmKCFlfHxqUXVlcnkuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlKT9qUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoZXZlbnRIYW5kbGUuZWxlbSxhcmd1bWVudHMpOnVuZGVmaW5lZDt9O2V2ZW50SGFuZGxlLmVsZW09ZWxlbTt9Ci10eXBlcz0odHlwZXN8fCIiKS5tYXRjaChybm90d2hpdGUpfHxbIiJdO3Q9dHlwZXMubGVuZ3RoO3doaWxlKHQtLSl7dG1wPXJ0eXBlbmFtZXNwYWNlLmV4ZWModHlwZXNbdF0pfHxbXTt0eXBlPW9yaWdUeXBlPXRtcFsxXTtuYW1lc3BhY2VzPSh0bXBbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKTtpZighdHlwZSl7Y29udGludWU7fQotc3BlY2lhbD1qUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8e307dHlwZT0oc2VsZWN0b3I/c3BlY2lhbC5kZWxlZ2F0ZVR5cGU6c3BlY2lhbC5iaW5kVHlwZSl8fHR5cGU7c3BlY2lhbD1qUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8e307aGFuZGxlT2JqPWpRdWVyeS5leHRlbmQoe3R5cGU6dHlwZSxvcmlnVHlwZTpvcmlnVHlwZSxkYXRhOmRhdGEsaGFuZGxlcjpoYW5kbGVyLGd1aWQ6aGFuZGxlci5ndWlkLHNlbGVjdG9yOnNlbGVjdG9yLG5lZWRzQ29udGV4dDpzZWxlY3RvciYmalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3Qoc2VsZWN0b3IpLG5hbWVzcGFjZTpuYW1lc3BhY2VzLmpvaW4oIi4iKX0saGFuZGxlT2JqSW4pO2lmKCEoaGFuZGxlcnM9ZXZlbnRzW3R5cGVdKSl7aGFuZGxlcnM9ZXZlbnRzW3R5cGVdPVtdO2hhbmRsZXJzLmRlbGVnYXRlQ291bnQ9MDtpZighc3BlY2lhbC5zZXR1cHx8c3BlY2lhbC5zZXR1cC5jYWxsKGVsZW0sZGF0YSxuYW1lc3BhY2VzLGV2ZW50SGFuZGxlKT09PWZhbHNlKXtpZihlbGVtLmFkZEV2ZW50TGlzdGVuZXIpe2VsZW0uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLGV2ZW50SGFuZGxlLGZhbHNlKTt9ZWxzZSBpZihlbGVtLmF0dGFjaEV2ZW50KXtlbGVtLmF0dGFjaEV2ZW50KCJvbiIrdHlwZSxldmVudEhhbmRsZSk7fX19Ci1pZihzcGVjaWFsLmFkZCl7c3BlY2lhbC5hZGQuY2FsbChlbGVtLGhhbmRsZU9iaik7aWYoIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQpe2hhbmRsZU9iai5oYW5kbGVyLmd1aWQ9aGFuZGxlci5ndWlkO319Ci1pZihzZWxlY3Rvcil7aGFuZGxlcnMuc3BsaWNlKGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywwLGhhbmRsZU9iaik7fWVsc2V7aGFuZGxlcnMucHVzaChoYW5kbGVPYmopO30KLWpRdWVyeS5ldmVudC5nbG9iYWxbdHlwZV09dHJ1ZTt9Ci1lbGVtPW51bGw7fSxyZW1vdmU6ZnVuY3Rpb24oZWxlbSx0eXBlcyxoYW5kbGVyLHNlbGVjdG9yLG1hcHBlZFR5cGVzKXt2YXIgaixoYW5kbGVPYmosdG1wLG9yaWdDb3VudCx0LGV2ZW50cyxzcGVjaWFsLGhhbmRsZXJzLHR5cGUsbmFtZXNwYWNlcyxvcmlnVHlwZSxlbGVtRGF0YT1qUXVlcnkuaGFzRGF0YShlbGVtKSYmalF1ZXJ5Ll9kYXRhKGVsZW0pO2lmKCFlbGVtRGF0YXx8IShldmVudHM9ZWxlbURhdGEuZXZlbnRzKSl7cmV0dXJuO30KLXR5cGVzPSh0eXBlc3x8IiIpLm1hdGNoKHJub3R3aGl0ZSl8fFsiIl07dD10eXBlcy5sZW5ndGg7d2hpbGUodC0tKXt0bXA9cnR5cGVuYW1lc3BhY2UuZXhlYyh0eXBlc1t0XSl8fFtdO3R5cGU9b3JpZ1R5cGU9dG1wWzFdO25hbWVzcGFjZXM9KHRtcFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpO2lmKCF0eXBlKXtmb3IodHlwZSBpbiBldmVudHMpe2pRdWVyeS5ldmVudC5yZW1vdmUoZWxlbSx0eXBlK3R5cGVzW3RdLGhhbmRsZXIsc2VsZWN0b3IsdHJ1ZSk7fQotY29udGludWU7fQotc3BlY2lhbD1qUXVlcnkuZXZlbnQuc3BlY2lhbFt0eXBlXXx8e307dHlwZT0oc2VsZWN0b3I/c3BlY2lhbC5kZWxlZ2F0ZVR5cGU6c3BlY2lhbC5iaW5kVHlwZSl8fHR5cGU7aGFuZGxlcnM9ZXZlbnRzW3R5cGVdfHxbXTt0bXA9dG1wWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIituYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpO29yaWdDb3VudD1qPWhhbmRsZXJzLmxlbmd0aDt3aGlsZShqLS0pe2hhbmRsZU9iaj1oYW5kbGVyc1tqXTtpZigobWFwcGVkVHlwZXN8fG9yaWdUeXBlPT09aGFuZGxlT2JqLm9yaWdUeXBlKSYmKCFoYW5kbGVyfHxoYW5kbGVyLmd1aWQ9PT1oYW5kbGVPYmouZ3VpZCkmJighdG1wfHx0bXAudGVzdChoYW5kbGVPYmoubmFtZXNwYWNlKSkmJighc2VsZWN0b3J8fHNlbGVjdG9yPT09aGFuZGxlT2JqLnNlbGVjdG9yfHxzZWxlY3Rvcj09PSIqKiImJmhhbmRsZU9iai5zZWxlY3Rvcikpe2hhbmRsZXJzLnNwbGljZShqLDEpO2lmKGhhbmRsZU9iai5zZWxlY3Rvcil7aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO30KLWlmKHNwZWNpYWwucmVtb3ZlKXtzcGVjaWFsLnJlbW92ZS5jYWxsKGVsZW0saGFuZGxlT2JqKTt9fX0KLWlmKG9yaWdDb3VudCYmIWhhbmRsZXJzLmxlbmd0aCl7aWYoIXNwZWNpYWwudGVhcmRvd258fHNwZWNpYWwudGVhcmRvd24uY2FsbChlbGVtLG5hbWVzcGFjZXMsZWxlbURhdGEuaGFuZGxlKT09PWZhbHNlKXtqUXVlcnkucmVtb3ZlRXZlbnQoZWxlbSx0eXBlLGVsZW1EYXRhLmhhbmRsZSk7fQotZGVsZXRlIGV2ZW50c1t0eXBlXTt9fQotaWYoalF1ZXJ5LmlzRW1wdHlPYmplY3QoZXZlbnRzKSl7ZGVsZXRlIGVsZW1EYXRhLmhhbmRsZTtqUXVlcnkuX3JlbW92ZURhdGEoZWxlbSwiZXZlbnRzIik7fX0sdHJpZ2dlcjpmdW5jdGlvbihldmVudCxkYXRhLGVsZW0sb25seUhhbmRsZXJzKXt2YXIgaGFuZGxlLG9udHlwZSxjdXIsYnViYmxlVHlwZSxzcGVjaWFsLHRtcCxpLGV2ZW50UGF0aD1bZWxlbXx8ZG9jdW1lbnRdLHR5cGU9aGFzT3duLmNhbGwoZXZlbnQsInR5cGUiKT9ldmVudC50eXBlOmV2ZW50LG5hbWVzcGFjZXM9aGFzT3duLmNhbGwoZXZlbnQsIm5hbWVzcGFjZSIpP2V2ZW50Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2N1cj10bXA9ZWxlbT1lbGVtfHxkb2N1bWVudDtpZihlbGVtLm5vZGVUeXBlPT09M3x8ZWxlbS5ub2RlVHlwZT09PTgpe3JldHVybjt9Ci1pZihyZm9jdXNNb3JwaC50ZXN0KHR5cGUralF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCkpe3JldHVybjt9Ci1pZih0eXBlLmluZGV4T2YoIi4iKT49MCl7bmFtZXNwYWNlcz10eXBlLnNwbGl0KCIuIik7dHlwZT1uYW1lc3BhY2VzLnNoaWZ0KCk7bmFtZXNwYWNlcy5zb3J0KCk7fQotb250eXBlPXR5cGUuaW5kZXhPZigiOiIpPDAmJiJvbiIrdHlwZTtldmVudD1ldmVudFtqUXVlcnkuZXhwYW5kb10/ZXZlbnQ6bmV3IGpRdWVyeS5FdmVudCh0eXBlLHR5cGVvZiBldmVudD09PSJvYmplY3QiJiZldmVudCk7ZXZlbnQuaXNUcmlnZ2VyPW9ubHlIYW5kbGVycz8yOjM7ZXZlbnQubmFtZXNwYWNlPW5hbWVzcGFjZXMuam9pbigiLiIpO2V2ZW50Lm5hbWVzcGFjZV9yZT1ldmVudC5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIrbmFtZXNwYWNlcy5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2V2ZW50LnJlc3VsdD11bmRlZmluZWQ7aWYoIWV2ZW50LnRhcmdldCl7ZXZlbnQudGFyZ2V0PWVsZW07fQotZGF0YT1kYXRhPT1udWxsP1tldmVudF06alF1ZXJ5Lm1ha2VBcnJheShkYXRhLFtldmVudF0pO3NwZWNpYWw9alF1ZXJ5LmV2ZW50LnNwZWNpYWxbdHlwZV18fHt9O2lmKCFvbmx5SGFuZGxlcnMmJnNwZWNpYWwudHJpZ2dlciYmc3BlY2lhbC50cmlnZ2VyLmFwcGx5KGVsZW0sZGF0YSk9PT1mYWxzZSl7cmV0dXJuO30KLWlmKCFvbmx5SGFuZGxlcnMmJiFzcGVjaWFsLm5vQnViYmxlJiYhalF1ZXJ5LmlzV2luZG93KGVsZW0pKXtidWJibGVUeXBlPXNwZWNpYWwuZGVsZWdhdGVUeXBlfHx0eXBlO2lmKCFyZm9jdXNNb3JwaC50ZXN0KGJ1YmJsZVR5cGUrdHlwZSkpe2N1cj1jdXIucGFyZW50Tm9kZTt9Ci1mb3IoO2N1cjtjdXI9Y3VyLnBhcmVudE5vZGUpe2V2ZW50UGF0aC5wdXNoKGN1cik7dG1wPWN1cjt9Ci1pZih0bXA9PT0oZWxlbS5vd25lckRvY3VtZW50fHxkb2N1bWVudCkpe2V2ZW50UGF0aC5wdXNoKHRtcC5kZWZhdWx0Vmlld3x8dG1wLnBhcmVudFdpbmRvd3x8d2luZG93KTt9fQotaT0wO3doaWxlKChjdXI9ZXZlbnRQYXRoW2krK10pJiYhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7ZXZlbnQudHlwZT1pPjE/YnViYmxlVHlwZTpzcGVjaWFsLmJpbmRUeXBlfHx0eXBlO2hhbmRsZT0oalF1ZXJ5Ll9kYXRhKGN1ciwiZXZlbnRzIil8fHt9KVtldmVudC50eXBlXSYmalF1ZXJ5Ll9kYXRhKGN1ciwiaGFuZGxlIik7aWYoaGFuZGxlKXtoYW5kbGUuYXBwbHkoY3VyLGRhdGEpO30KLWhhbmRsZT1vbnR5cGUmJmN1cltvbnR5cGVdO2lmKGhhbmRsZSYmaGFuZGxlLmFwcGx5JiZqUXVlcnkuYWNjZXB0RGF0YShjdXIpKXtldmVudC5yZXN1bHQ9aGFuZGxlLmFwcGx5KGN1cixkYXRhKTtpZihldmVudC5yZXN1bHQ9PT1mYWxzZSl7ZXZlbnQucHJldmVudERlZmF1bHQoKTt9fX0KLWV2ZW50LnR5cGU9dHlwZTtpZighb25seUhhbmRsZXJzJiYhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKCghc3BlY2lhbC5fZGVmYXVsdHx8c3BlY2lhbC5fZGVmYXVsdC5hcHBseShldmVudFBhdGgucG9wKCksZGF0YSk9PT1mYWxzZSkmJmpRdWVyeS5hY2NlcHREYXRhKGVsZW0pKXtpZihvbnR5cGUmJmVsZW1bdHlwZV0mJiFqUXVlcnkuaXNXaW5kb3coZWxlbSkpe3RtcD1lbGVtW29udHlwZV07aWYodG1wKXtlbGVtW29udHlwZV09bnVsbDt9Ci1qUXVlcnkuZXZlbnQudHJpZ2dlcmVkPXR5cGU7dHJ5e2VsZW1bdHlwZV0oKTt9Y2F0Y2goZSl7fQotalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZD11bmRlZmluZWQ7aWYodG1wKXtlbGVtW29udHlwZV09dG1wO319fX0KLXJldHVybiBldmVudC5yZXN1bHQ7fSxkaXNwYXRjaDpmdW5jdGlvbihldmVudCl7ZXZlbnQ9alF1ZXJ5LmV2ZW50LmZpeChldmVudCk7dmFyIGkscmV0LGhhbmRsZU9iaixtYXRjaGVkLGosaGFuZGxlclF1ZXVlPVtdLGFyZ3M9c2xpY2UuY2FsbChhcmd1bWVudHMpLGhhbmRsZXJzPShqUXVlcnkuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtldmVudC50eXBlXXx8W10sc3BlY2lhbD1qUXVlcnkuZXZlbnQuc3BlY2lhbFtldmVudC50eXBlXXx8e307YXJnc1swXT1ldmVudDtldmVudC5kZWxlZ2F0ZVRhcmdldD10aGlzO2lmKHNwZWNpYWwucHJlRGlzcGF0Y2gmJnNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGV2ZW50KT09PWZhbHNlKXtyZXR1cm47fQotaGFuZGxlclF1ZXVlPWpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsZXZlbnQsaGFuZGxlcnMpO2k9MDt3aGlsZSgobWF0Y2hlZD1oYW5kbGVyUXVldWVbaSsrXSkmJiFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtldmVudC5jdXJyZW50VGFyZ2V0PW1hdGNoZWQuZWxlbTtqPTA7d2hpbGUoKGhhbmRsZU9iaj1tYXRjaGVkLmhhbmRsZXJzW2orK10pJiYhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl7aWYoIWV2ZW50Lm5hbWVzcGFjZV9yZXx8ZXZlbnQubmFtZXNwYWNlX3JlLnRlc3QoaGFuZGxlT2JqLm5hbWVzcGFjZSkpe2V2ZW50LmhhbmRsZU9iaj1oYW5kbGVPYmo7ZXZlbnQuZGF0YT1oYW5kbGVPYmouZGF0YTtyZXQ9KChqUXVlcnkuZXZlbnQuc3BlY2lhbFtoYW5kbGVPYmoub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxoYW5kbGVPYmouaGFuZGxlcikuYXBwbHkobWF0Y2hlZC5lbGVtLGFyZ3MpO2lmKHJldCE9PXVuZGVmaW5lZCl7aWYoKGV2ZW50LnJlc3VsdD1yZXQpPT09ZmFsc2Upe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fX19fX0KLWlmKHNwZWNpYWwucG9zdERpc3BhdGNoKXtzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZXZlbnQpO30KLXJldHVybiBldmVudC5yZXN1bHQ7fSxoYW5kbGVyczpmdW5jdGlvbihldmVudCxoYW5kbGVycyl7dmFyIHNlbCxoYW5kbGVPYmosbWF0Y2hlcyxpLGhhbmRsZXJRdWV1ZT1bXSxkZWxlZ2F0ZUNvdW50PWhhbmRsZXJzLmRlbGVnYXRlQ291bnQsY3VyPWV2ZW50LnRhcmdldDtpZihkZWxlZ2F0ZUNvdW50JiZjdXIubm9kZVR5cGUmJighZXZlbnQuYnV0dG9ufHxldmVudC50eXBlIT09ImNsaWNrIikpe2Zvcig7Y3VyIT10aGlzO2N1cj1jdXIucGFyZW50Tm9kZXx8dGhpcyl7aWYoY3VyLm5vZGVUeXBlPT09MSYmKGN1ci5kaXNhYmxlZCE9PXRydWV8fGV2ZW50LnR5cGUhPT0iY2xpY2siKSl7bWF0Y2hlcz1bXTtmb3IoaT0wO2k8ZGVsZWdhdGVDb3VudDtpKyspe2hhbmRsZU9iaj1oYW5kbGVyc1tpXTtzZWw9aGFuZGxlT2JqLnNlbGVjdG9yKyIgIjtpZihtYXRjaGVzW3NlbF09PT11bmRlZmluZWQpe21hdGNoZXNbc2VsXT1oYW5kbGVPYmoubmVlZHNDb250ZXh0P2pRdWVyeShzZWwsdGhpcykuaW5kZXgoY3VyKT49MDpqUXVlcnkuZmluZChzZWwsdGhpcyxudWxsLFtjdXJdKS5sZW5ndGg7fQotaWYobWF0Y2hlc1tzZWxdKXttYXRjaGVzLnB1c2goaGFuZGxlT2JqKTt9fQotaWYobWF0Y2hlcy5sZW5ndGgpe2hhbmRsZXJRdWV1ZS5wdXNoKHtlbGVtOmN1cixoYW5kbGVyczptYXRjaGVzfSk7fX19fQotaWYoZGVsZWdhdGVDb3VudDxoYW5kbGVycy5sZW5ndGgpe2hhbmRsZXJRdWV1ZS5wdXNoKHtlbGVtOnRoaXMsaGFuZGxlcnM6aGFuZGxlcnMuc2xpY2UoZGVsZWdhdGVDb3VudCl9KTt9Ci1yZXR1cm4gaGFuZGxlclF1ZXVlO30sZml4OmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudFtqUXVlcnkuZXhwYW5kb10pe3JldHVybiBldmVudDt9Ci12YXIgaSxwcm9wLGNvcHksdHlwZT1ldmVudC50eXBlLG9yaWdpbmFsRXZlbnQ9ZXZlbnQsZml4SG9vaz10aGlzLmZpeEhvb2tzW3R5cGVdO2lmKCFmaXhIb29rKXt0aGlzLmZpeEhvb2tzW3R5cGVdPWZpeEhvb2s9cm1vdXNlRXZlbnQudGVzdCh0eXBlKT90aGlzLm1vdXNlSG9va3M6cmtleUV2ZW50LnRlc3QodHlwZSk/dGhpcy5rZXlIb29rczp7fTt9Ci1jb3B5PWZpeEhvb2sucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZml4SG9vay5wcm9wcyk6dGhpcy5wcm9wcztldmVudD1uZXcgalF1ZXJ5LkV2ZW50KG9yaWdpbmFsRXZlbnQpO2k9Y29weS5sZW5ndGg7d2hpbGUoaS0tKXtwcm9wPWNvcHlbaV07ZXZlbnRbcHJvcF09b3JpZ2luYWxFdmVudFtwcm9wXTt9Ci1pZighZXZlbnQudGFyZ2V0KXtldmVudC50YXJnZXQ9b3JpZ2luYWxFdmVudC5zcmNFbGVtZW50fHxkb2N1bWVudDt9Ci1pZihldmVudC50YXJnZXQubm9kZVR5cGU9PT0zKXtldmVudC50YXJnZXQ9ZXZlbnQudGFyZ2V0LnBhcmVudE5vZGU7fQotZXZlbnQubWV0YUtleT0hIWV2ZW50Lm1ldGFLZXk7cmV0dXJuIGZpeEhvb2suZmlsdGVyP2ZpeEhvb2suZmlsdGVyKGV2ZW50LG9yaWdpbmFsRXZlbnQpOmV2ZW50O30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGV2ZW50LG9yaWdpbmFsKXtpZihldmVudC53aGljaD09bnVsbCl7ZXZlbnQud2hpY2g9b3JpZ2luYWwuY2hhckNvZGUhPW51bGw/b3JpZ2luYWwuY2hhckNvZGU6b3JpZ2luYWwua2V5Q29kZTt9Ci1yZXR1cm4gZXZlbnQ7fX0sbW91c2VIb29rczp7cHJvcHM6ImJ1dHRvbiBidXR0b25zIGNsaWVudFggY2xpZW50WSBmcm9tRWxlbWVudCBvZmZzZXRYIG9mZnNldFkgcGFnZVggcGFnZVkgc2NyZWVuWCBzY3JlZW5ZIHRvRWxlbWVudCIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZXZlbnQsb3JpZ2luYWwpe3ZhciBib2R5LGV2ZW50RG9jLGRvYyxidXR0b249b3JpZ2luYWwuYnV0dG9uLGZyb21FbGVtZW50PW9yaWdpbmFsLmZyb21FbGVtZW50O2lmKGV2ZW50LnBhZ2VYPT1udWxsJiZvcmlnaW5hbC5jbGllbnRYIT1udWxsKXtldmVudERvYz1ldmVudC50YXJnZXQub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7ZG9jPWV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDtib2R5PWV2ZW50RG9jLmJvZHk7ZXZlbnQucGFnZVg9b3JpZ2luYWwuY2xpZW50WCsoZG9jJiZkb2Muc2Nyb2xsTGVmdHx8Ym9keSYmYm9keS5zY3JvbGxMZWZ0fHwwKS0oZG9jJiZkb2MuY2xpZW50TGVmdHx8Ym9keSYmYm9keS5jbGllbnRMZWZ0fHwwKTtldmVudC5wYWdlWT1vcmlnaW5hbC5jbGllbnRZKyhkb2MmJmRvYy5zY3JvbGxUb3B8fGJvZHkmJmJvZHkuc2Nyb2xsVG9wfHwwKS0oZG9jJiZkb2MuY2xpZW50VG9wfHxib2R5JiZib2R5LmNsaWVudFRvcHx8MCk7fQotaWYoIWV2ZW50LnJlbGF0ZWRUYXJnZXQmJmZyb21FbGVtZW50KXtldmVudC5yZWxhdGVkVGFyZ2V0PWZyb21FbGVtZW50PT09ZXZlbnQudGFyZ2V0P29yaWdpbmFsLnRvRWxlbWVudDpmcm9tRWxlbWVudDt9Ci1pZighZXZlbnQud2hpY2gmJmJ1dHRvbiE9PXVuZGVmaW5lZCl7ZXZlbnQud2hpY2g9KGJ1dHRvbiYxPzE6KGJ1dHRvbiYyPzM6KGJ1dHRvbiY0PzI6MCkpKTt9Ci1yZXR1cm4gZXZlbnQ7fX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6dHJ1ZX0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09c2FmZUFjdGl2ZUVsZW1lbnQoKSYmdGhpcy5mb2N1cyl7dHJ5e3RoaXMuZm9jdXMoKTtyZXR1cm4gZmFsc2U7fWNhdGNoKGUpe319fSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcz09PXNhZmVBY3RpdmVFbGVtZW50KCkmJnRoaXMuYmx1cil7dGhpcy5ibHVyKCk7cmV0dXJuIGZhbHNlO319LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKGpRdWVyeS5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpJiZ0aGlzLnR5cGU9PT0iY2hlY2tib3giJiZ0aGlzLmNsaWNrKXt0aGlzLmNsaWNrKCk7cmV0dXJuIGZhbHNlO319LF9kZWZhdWx0OmZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4galF1ZXJ5Lm5vZGVOYW1lKGV2ZW50LnRhcmdldCwiYSIpO319LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5yZXN1bHQhPT11bmRlZmluZWQmJmV2ZW50Lm9yaWdpbmFsRXZlbnQpe2V2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZXZlbnQucmVzdWx0O319fX0sc2ltdWxhdGU6ZnVuY3Rpb24odHlwZSxlbGVtLGV2ZW50LGJ1YmJsZSl7dmFyIGU9alF1ZXJ5LmV4dGVuZChuZXcgalF1ZXJ5LkV2ZW50KCksZXZlbnQse3R5cGU6dHlwZSxpc1NpbXVsYXRlZDp0cnVlLG9yaWdpbmFsRXZlbnQ6e319KTtpZihidWJibGUpe2pRdWVyeS5ldmVudC50cmlnZ2VyKGUsbnVsbCxlbGVtKTt9ZWxzZXtqUXVlcnkuZXZlbnQuZGlzcGF0Y2guY2FsbChlbGVtLGUpO30KLWlmKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpe2V2ZW50LnByZXZlbnREZWZhdWx0KCk7fX19O2pRdWVyeS5yZW1vdmVFdmVudD1kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGVsZW0sdHlwZSxoYW5kbGUpe2lmKGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcil7ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsaGFuZGxlLGZhbHNlKTt9fTpmdW5jdGlvbihlbGVtLHR5cGUsaGFuZGxlKXt2YXIgbmFtZT0ib24iK3R5cGU7aWYoZWxlbS5kZXRhY2hFdmVudCl7aWYodHlwZW9mIGVsZW1bbmFtZV09PT1zdHJ1bmRlZmluZWQpe2VsZW1bbmFtZV09bnVsbDt9Ci1lbGVtLmRldGFjaEV2ZW50KG5hbWUsaGFuZGxlKTt9fTtqUXVlcnkuRXZlbnQ9ZnVuY3Rpb24oc3JjLHByb3BzKXtpZighKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpKXtyZXR1cm4gbmV3IGpRdWVyeS5FdmVudChzcmMscHJvcHMpO30KLWlmKHNyYyYmc3JjLnR5cGUpe3RoaXMub3JpZ2luYWxFdmVudD1zcmM7dGhpcy50eXBlPXNyYy50eXBlO3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXNyYy5kZWZhdWx0UHJldmVudGVkfHxzcmMuZGVmYXVsdFByZXZlbnRlZD09PXVuZGVmaW5lZCYmc3JjLnJldHVyblZhbHVlPT09ZmFsc2U/cmV0dXJuVHJ1ZTpyZXR1cm5GYWxzZTt9ZWxzZXt0aGlzLnR5cGU9c3JjO30KLWlmKHByb3BzKXtqUXVlcnkuZXh0ZW5kKHRoaXMscHJvcHMpO30KLXRoaXMudGltZVN0YW1wPXNyYyYmc3JjLnRpbWVTdGFtcHx8alF1ZXJ5Lm5vdygpO3RoaXNbalF1ZXJ5LmV4cGFuZG9dPXRydWU7fTtqUXVlcnkuRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6cmV0dXJuRmFsc2UsaXNQcm9wYWdhdGlvblN0b3BwZWQ6cmV0dXJuRmFsc2UsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6cmV0dXJuRmFsc2UscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9cmV0dXJuVHJ1ZTtpZighZSl7cmV0dXJuO30KLWlmKGUucHJldmVudERlZmF1bHQpe2UucHJldmVudERlZmF1bHQoKTt9ZWxzZXtlLnJldHVyblZhbHVlPWZhbHNlO319LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXJldHVyblRydWU7aWYoIWUpe3JldHVybjt9Ci1pZihlLnN0b3BQcm9wYWdhdGlvbil7ZS5zdG9wUHJvcGFnYXRpb24oKTt9Ci1lLmNhbmNlbEJ1YmJsZT10cnVlO30sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9cmV0dXJuVHJ1ZTtpZihlJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbil7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt9Ci10aGlzLnN0b3BQcm9wYWdhdGlvbigpO319O2pRdWVyeS5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihvcmlnLGZpeCl7alF1ZXJ5LmV2ZW50LnNwZWNpYWxbb3JpZ109e2RlbGVnYXRlVHlwZTpmaXgsYmluZFR5cGU6Zml4LGhhbmRsZTpmdW5jdGlvbihldmVudCl7dmFyIHJldCx0YXJnZXQ9dGhpcyxyZWxhdGVkPWV2ZW50LnJlbGF0ZWRUYXJnZXQsaGFuZGxlT2JqPWV2ZW50LmhhbmRsZU9iajtpZighcmVsYXRlZHx8KHJlbGF0ZWQhPT10YXJnZXQmJiFqUXVlcnkuY29udGFpbnModGFyZ2V0LHJlbGF0ZWQpKSl7ZXZlbnQudHlwZT1oYW5kbGVPYmoub3JpZ1R5cGU7cmV0PWhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtldmVudC50eXBlPWZpeDt9Ci1yZXR1cm4gcmV0O319O30pO2lmKCFzdXBwb3J0LnN1Ym1pdEJ1YmJsZXMpe2pRdWVyeS5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtpZihqUXVlcnkubm9kZU5hbWUodGhpcywiZm9ybSIpKXtyZXR1cm4gZmFsc2U7fQotalF1ZXJ5LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciBlbGVtPWUudGFyZ2V0LGZvcm09alF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImlucHV0Iil8fGpRdWVyeS5ub2RlTmFtZShlbGVtLCJidXR0b24iKT9lbGVtLmZvcm06dW5kZWZpbmVkO2lmKGZvcm0mJiFqUXVlcnkuX2RhdGEoZm9ybSwic3VibWl0QnViYmxlcyIpKXtqUXVlcnkuZXZlbnQuYWRkKGZvcm0sInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihldmVudCl7ZXZlbnQuX3N1Ym1pdF9idWJibGU9dHJ1ZTt9KTtqUXVlcnkuX2RhdGEoZm9ybSwic3VibWl0QnViYmxlcyIsdHJ1ZSk7fX0pO30scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5fc3VibWl0X2J1YmJsZSl7ZGVsZXRlIGV2ZW50Ll9zdWJtaXRfYnViYmxlO2lmKHRoaXMucGFyZW50Tm9kZSYmIWV2ZW50LmlzVHJpZ2dlcil7alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxldmVudCx0cnVlKTt9fX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihqUXVlcnkubm9kZU5hbWUodGhpcywiZm9ybSIpKXtyZXR1cm4gZmFsc2U7fQotalF1ZXJ5LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpO319O30KLWlmKCFzdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe2pRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZihyZm9ybUVsZW1zLnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpe2pRdWVyeS5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50Lm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiKXt0aGlzLl9qdXN0X2NoYW5nZWQ9dHJ1ZTt9fSk7alF1ZXJ5LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihldmVudCl7aWYodGhpcy5fanVzdF9jaGFuZ2VkJiYhZXZlbnQuaXNUcmlnZ2VyKXt0aGlzLl9qdXN0X2NoYW5nZWQ9ZmFsc2U7fQotalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZXZlbnQsdHJ1ZSk7fSk7fQotcmV0dXJuIGZhbHNlO30KLWpRdWVyeS5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dmFyIGVsZW09ZS50YXJnZXQ7aWYocmZvcm1FbGVtcy50ZXN0KGVsZW0ubm9kZU5hbWUpJiYhalF1ZXJ5Ll9kYXRhKGVsZW0sImNoYW5nZUJ1YmJsZXMiKSl7alF1ZXJ5LmV2ZW50LmFkZChlbGVtLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZXZlbnQpe2lmKHRoaXMucGFyZW50Tm9kZSYmIWV2ZW50LmlzU2ltdWxhdGVkJiYhZXZlbnQuaXNUcmlnZ2VyKXtqUXVlcnkuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGV2ZW50LHRydWUpO319KTtqUXVlcnkuX2RhdGEoZWxlbSwiY2hhbmdlQnViYmxlcyIsdHJ1ZSk7fX0pO30saGFuZGxlOmZ1bmN0aW9uKGV2ZW50KXt2YXIgZWxlbT1ldmVudC50YXJnZXQ7aWYodGhpcyE9PWVsZW18fGV2ZW50LmlzU2ltdWxhdGVkfHxldmVudC5pc1RyaWdnZXJ8fChlbGVtLnR5cGUhPT0icmFkaW8iJiZlbGVtLnR5cGUhPT0iY2hlY2tib3giKSl7cmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fSx0ZWFyZG93bjpmdW5jdGlvbigpe2pRdWVyeS5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKTtyZXR1cm4hcmZvcm1FbGVtcy50ZXN0KHRoaXMubm9kZU5hbWUpO319O30KLWlmKCFzdXBwb3J0LmZvY3VzaW5CdWJibGVzKXtqUXVlcnkuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24ob3JpZyxmaXgpe3ZhciBoYW5kbGVyPWZ1bmN0aW9uKGV2ZW50KXtqUXVlcnkuZXZlbnQuc2ltdWxhdGUoZml4LGV2ZW50LnRhcmdldCxqUXVlcnkuZXZlbnQuZml4KGV2ZW50KSx0cnVlKTt9O2pRdWVyeS5ldmVudC5zcGVjaWFsW2ZpeF09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGRvYz10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsYXR0YWNoZXM9alF1ZXJ5Ll9kYXRhKGRvYyxmaXgpO2lmKCFhdHRhY2hlcyl7ZG9jLmFkZEV2ZW50TGlzdGVuZXIob3JpZyxoYW5kbGVyLHRydWUpO30KLWpRdWVyeS5fZGF0YShkb2MsZml4LChhdHRhY2hlc3x8MCkrMSk7fSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBkb2M9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGF0dGFjaGVzPWpRdWVyeS5fZGF0YShkb2MsZml4KS0xO2lmKCFhdHRhY2hlcyl7ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIob3JpZyxoYW5kbGVyLHRydWUpO2pRdWVyeS5fcmVtb3ZlRGF0YShkb2MsZml4KTt9ZWxzZXtqUXVlcnkuX2RhdGEoZG9jLGZpeCxhdHRhY2hlcyk7fX19O30pO30KLWpRdWVyeS5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKHR5cGVzLHNlbGVjdG9yLGRhdGEsZm4sb25lKXt2YXIgdHlwZSxvcmlnRm47aWYodHlwZW9mIHR5cGVzPT09Im9iamVjdCIpe2lmKHR5cGVvZiBzZWxlY3RvciE9PSJzdHJpbmciKXtkYXRhPWRhdGF8fHNlbGVjdG9yO3NlbGVjdG9yPXVuZGVmaW5lZDt9Ci1mb3IodHlwZSBpbiB0eXBlcyl7dGhpcy5vbih0eXBlLHNlbGVjdG9yLGRhdGEsdHlwZXNbdHlwZV0sb25lKTt9Ci1yZXR1cm4gdGhpczt9Ci1pZihkYXRhPT1udWxsJiZmbj09bnVsbCl7Zm49c2VsZWN0b3I7ZGF0YT1zZWxlY3Rvcj11bmRlZmluZWQ7fWVsc2UgaWYoZm49PW51bGwpe2lmKHR5cGVvZiBzZWxlY3Rvcj09PSJzdHJpbmciKXtmbj1kYXRhO2RhdGE9dW5kZWZpbmVkO31lbHNle2ZuPWRhdGE7ZGF0YT1zZWxlY3RvcjtzZWxlY3Rvcj11bmRlZmluZWQ7fX0KLWlmKGZuPT09ZmFsc2Upe2ZuPXJldHVybkZhbHNlO31lbHNlIGlmKCFmbil7cmV0dXJuIHRoaXM7fQotaWYob25lPT09MSl7b3JpZ0ZuPWZuO2ZuPWZ1bmN0aW9uKGV2ZW50KXtqUXVlcnkoKS5vZmYoZXZlbnQpO3JldHVybiBvcmlnRm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO307Zm4uZ3VpZD1vcmlnRm4uZ3VpZHx8KG9yaWdGbi5ndWlkPWpRdWVyeS5ndWlkKyspO30KLXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQuYWRkKHRoaXMsdHlwZXMsZm4sZGF0YSxzZWxlY3Rvcik7fSk7fSxvbmU6ZnVuY3Rpb24odHlwZXMsc2VsZWN0b3IsZGF0YSxmbil7cmV0dXJuIHRoaXMub24odHlwZXMsc2VsZWN0b3IsZGF0YSxmbiwxKTt9LG9mZjpmdW5jdGlvbih0eXBlcyxzZWxlY3Rvcixmbil7dmFyIGhhbmRsZU9iaix0eXBlO2lmKHR5cGVzJiZ0eXBlcy5wcmV2ZW50RGVmYXVsdCYmdHlwZXMuaGFuZGxlT2JqKXtoYW5kbGVPYmo9dHlwZXMuaGFuZGxlT2JqO2pRdWVyeSh0eXBlcy5kZWxlZ2F0ZVRhcmdldCkub2ZmKGhhbmRsZU9iai5uYW1lc3BhY2U/aGFuZGxlT2JqLm9yaWdUeXBlKyIuIitoYW5kbGVPYmoubmFtZXNwYWNlOmhhbmRsZU9iai5vcmlnVHlwZSxoYW5kbGVPYmouc2VsZWN0b3IsaGFuZGxlT2JqLmhhbmRsZXIpO3JldHVybiB0aGlzO30KLWlmKHR5cGVvZiB0eXBlcz09PSJvYmplY3QiKXtmb3IodHlwZSBpbiB0eXBlcyl7dGhpcy5vZmYodHlwZSxzZWxlY3Rvcix0eXBlc1t0eXBlXSk7fQotcmV0dXJuIHRoaXM7fQotaWYoc2VsZWN0b3I9PT1mYWxzZXx8dHlwZW9mIHNlbGVjdG9yPT09ImZ1bmN0aW9uIil7Zm49c2VsZWN0b3I7c2VsZWN0b3I9dW5kZWZpbmVkO30KLWlmKGZuPT09ZmFsc2Upe2ZuPXJldHVybkZhbHNlO30KLXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQucmVtb3ZlKHRoaXMsdHlwZXMsZm4sc2VsZWN0b3IpO30pO30sdHJpZ2dlcjpmdW5jdGlvbih0eXBlLGRhdGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtqUXVlcnkuZXZlbnQudHJpZ2dlcih0eXBlLGRhdGEsdGhpcyk7fSk7fSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbih0eXBlLGRhdGEpe3ZhciBlbGVtPXRoaXNbMF07aWYoZWxlbSl7cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKHR5cGUsZGF0YSxlbGVtLHRydWUpO319fSk7ZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50KGRvY3VtZW50KXt2YXIgbGlzdD1ub2RlTmFtZXMuc3BsaXQoInwiKSxzYWZlRnJhZz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoc2FmZUZyYWcuY3JlYXRlRWxlbWVudCl7d2hpbGUobGlzdC5sZW5ndGgpe3NhZmVGcmFnLmNyZWF0ZUVsZW1lbnQobGlzdC5wb3AoKSk7fX0KLXJldHVybiBzYWZlRnJhZzt9Ci12YXIgbm9kZU5hbWVzPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfCIrImhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixyaW5saW5lalF1ZXJ5PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2cscm5vc2hpbWNhY2hlPW5ldyBSZWdFeHAoIjwoPzoiK25vZGVOYW1lcysiKVtcXHMvPl0iLCJpIikscmxlYWRpbmdXaGl0ZXNwYWNlPS9eXHMrLyxyeGh0bWxUYWc9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxydGFnTmFtZT0vPChbXHc6XSspLyxydGJvZHk9Lzx0Ym9keS9pLHJodG1sPS88fCYjP1x3KzsvLHJub0lubmVyaHRtbD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLHJjaGVja2VkPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHJzY3JpcHRUeXBlPS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxyc2NyaXB0VHlwZU1hc2tlZD0vXnRydWVcLyguKikvLHJjbGVhblNjcmlwdD0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csd3JhcE1hcD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLHBhcmFtOlsxLCI8b2JqZWN0PiIsIjwvb2JqZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6c3VwcG9ydC5odG1sU2VyaWFsaXplP1swLCIiLCIiXTpbMSwiWDxkaXY+IiwiPC9kaXY+Il19LHNhZmVGcmFnbWVudD1jcmVhdGVTYWZlRnJhZ21lbnQoZG9jdW1lbnQpLGZyYWdtZW50RGl2PXNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7d3JhcE1hcC5vcHRncm91cD13cmFwTWFwLm9wdGlvbjt3cmFwTWFwLnRib2R5PXdyYXBNYXAudGZvb3Q9d3JhcE1hcC5jb2xncm91cD13cmFwTWFwLmNhcHRpb249d3JhcE1hcC50aGVhZDt3cmFwTWFwLnRoPXdyYXBNYXAudGQ7ZnVuY3Rpb24gZ2V0QWxsKGNvbnRleHQsdGFnKXt2YXIgZWxlbXMsZWxlbSxpPTAsZm91bmQ9dHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1zdHJ1bmRlZmluZWQ/Y29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWd8fCIqIik6dHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCE9PXN0cnVuZGVmaW5lZD9jb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwodGFnfHwiKiIpOnVuZGVmaW5lZDtpZighZm91bmQpe2Zvcihmb3VuZD1bXSxlbGVtcz1jb250ZXh0LmNoaWxkTm9kZXN8fGNvbnRleHQ7KGVsZW09ZWxlbXNbaV0pIT1udWxsO2krKyl7aWYoIXRhZ3x8alF1ZXJ5Lm5vZGVOYW1lKGVsZW0sdGFnKSl7Zm91bmQucHVzaChlbGVtKTt9ZWxzZXtqUXVlcnkubWVyZ2UoZm91bmQsZ2V0QWxsKGVsZW0sdGFnKSk7fX19Ci1yZXR1cm4gdGFnPT09dW5kZWZpbmVkfHx0YWcmJmpRdWVyeS5ub2RlTmFtZShjb250ZXh0LHRhZyk/alF1ZXJ5Lm1lcmdlKFtjb250ZXh0XSxmb3VuZCk6Zm91bmQ7fQotZnVuY3Rpb24gZml4RGVmYXVsdENoZWNrZWQoZWxlbSl7aWYocmNoZWNrYWJsZVR5cGUudGVzdChlbGVtLnR5cGUpKXtlbGVtLmRlZmF1bHRDaGVja2VkPWVsZW0uY2hlY2tlZDt9fQotZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KGVsZW0sY29udGVudCl7cmV0dXJuIGpRdWVyeS5ub2RlTmFtZShlbGVtLCJ0YWJsZSIpJiZqUXVlcnkubm9kZU5hbWUoY29udGVudC5ub2RlVHlwZSE9PTExP2NvbnRlbnQ6Y29udGVudC5maXJzdENoaWxkLCJ0ciIpP2VsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGVsZW0uYXBwZW5kQ2hpbGQoZWxlbS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmVsZW07fQotZnVuY3Rpb24gZGlzYWJsZVNjcmlwdChlbGVtKXtlbGVtLnR5cGU9KGpRdWVyeS5maW5kLmF0dHIoZWxlbSwidHlwZSIpIT09bnVsbCkrIi8iK2VsZW0udHlwZTtyZXR1cm4gZWxlbTt9Ci1mdW5jdGlvbiByZXN0b3JlU2NyaXB0KGVsZW0pe3ZhciBtYXRjaD1yc2NyaXB0VHlwZU1hc2tlZC5leGVjKGVsZW0udHlwZSk7aWYobWF0Y2gpe2VsZW0udHlwZT1tYXRjaFsxXTt9ZWxzZXtlbGVtLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpO30KLXJldHVybiBlbGVtO30KLWZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoZWxlbXMscmVmRWxlbWVudHMpe3ZhciBlbGVtLGk9MDtmb3IoOyhlbGVtPWVsZW1zW2ldKSE9bnVsbDtpKyspe2pRdWVyeS5fZGF0YShlbGVtLCJnbG9iYWxFdmFsIiwhcmVmRWxlbWVudHN8fGpRdWVyeS5fZGF0YShyZWZFbGVtZW50c1tpXSwiZ2xvYmFsRXZhbCIpKTt9fQotZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoc3JjLGRlc3Qpe2lmKGRlc3Qubm9kZVR5cGUhPT0xfHwhalF1ZXJ5Lmhhc0RhdGEoc3JjKSl7cmV0dXJuO30KLXZhciB0eXBlLGksbCxvbGREYXRhPWpRdWVyeS5fZGF0YShzcmMpLGN1ckRhdGE9alF1ZXJ5Ll9kYXRhKGRlc3Qsb2xkRGF0YSksZXZlbnRzPW9sZERhdGEuZXZlbnRzO2lmKGV2ZW50cyl7ZGVsZXRlIGN1ckRhdGEuaGFuZGxlO2N1ckRhdGEuZXZlbnRzPXt9O2Zvcih0eXBlIGluIGV2ZW50cyl7Zm9yKGk9MCxsPWV2ZW50c1t0eXBlXS5sZW5ndGg7aTxsO2krKyl7alF1ZXJ5LmV2ZW50LmFkZChkZXN0LHR5cGUsZXZlbnRzW3R5cGVdW2ldKTt9fX0KLWlmKGN1ckRhdGEuZGF0YSl7Y3VyRGF0YS5kYXRhPWpRdWVyeS5leHRlbmQoe30sY3VyRGF0YS5kYXRhKTt9fQotZnVuY3Rpb24gZml4Q2xvbmVOb2RlSXNzdWVzKHNyYyxkZXN0KXt2YXIgbm9kZU5hbWUsZSxkYXRhO2lmKGRlc3Qubm9kZVR5cGUhPT0xKXtyZXR1cm47fQotbm9kZU5hbWU9ZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCFzdXBwb3J0Lm5vQ2xvbmVFdmVudCYmZGVzdFtqUXVlcnkuZXhwYW5kb10pe2RhdGE9alF1ZXJ5Ll9kYXRhKGRlc3QpO2ZvcihlIGluIGRhdGEuZXZlbnRzKXtqUXVlcnkucmVtb3ZlRXZlbnQoZGVzdCxlLGRhdGEuaGFuZGxlKTt9Ci1kZXN0LnJlbW92ZUF0dHJpYnV0ZShqUXVlcnkuZXhwYW5kbyk7fQotaWYobm9kZU5hbWU9PT0ic2NyaXB0IiYmZGVzdC50ZXh0IT09c3JjLnRleHQpe2Rpc2FibGVTY3JpcHQoZGVzdCkudGV4dD1zcmMudGV4dDtyZXN0b3JlU2NyaXB0KGRlc3QpO31lbHNlIGlmKG5vZGVOYW1lPT09Im9iamVjdCIpe2lmKGRlc3QucGFyZW50Tm9kZSl7ZGVzdC5vdXRlckhUTUw9c3JjLm91dGVySFRNTDt9Ci1pZihzdXBwb3J0Lmh0bWw1Q2xvbmUmJihzcmMuaW5uZXJIVE1MJiYhalF1ZXJ5LnRyaW0oZGVzdC5pbm5lckhUTUwpKSl7ZGVzdC5pbm5lckhUTUw9c3JjLmlubmVySFRNTDt9fWVsc2UgaWYobm9kZU5hbWU9PT0iaW5wdXQiJiZyY2hlY2thYmxlVHlwZS50ZXN0KHNyYy50eXBlKSl7ZGVzdC5kZWZhdWx0Q2hlY2tlZD1kZXN0LmNoZWNrZWQ9c3JjLmNoZWNrZWQ7aWYoZGVzdC52YWx1ZSE9PXNyYy52YWx1ZSl7ZGVzdC52YWx1ZT1zcmMudmFsdWU7fX1lbHNlIGlmKG5vZGVOYW1lPT09Im9wdGlvbiIpe2Rlc3QuZGVmYXVsdFNlbGVjdGVkPWRlc3Quc2VsZWN0ZWQ9c3JjLmRlZmF1bHRTZWxlY3RlZDt9ZWxzZSBpZihub2RlTmFtZT09PSJpbnB1dCJ8fG5vZGVOYW1lPT09InRleHRhcmVhIil7ZGVzdC5kZWZhdWx0VmFsdWU9c3JjLmRlZmF1bHRWYWx1ZTt9fQotalF1ZXJ5LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZWxlbSxkYXRhQW5kRXZlbnRzLGRlZXBEYXRhQW5kRXZlbnRzKXt2YXIgZGVzdEVsZW1lbnRzLG5vZGUsY2xvbmUsaSxzcmNFbGVtZW50cyxpblBhZ2U9alF1ZXJ5LmNvbnRhaW5zKGVsZW0ub3duZXJEb2N1bWVudCxlbGVtKTtpZihzdXBwb3J0Lmh0bWw1Q2xvbmV8fGpRdWVyeS5pc1hNTERvYyhlbGVtKXx8IXJub3NoaW1jYWNoZS50ZXN0KCI8IitlbGVtLm5vZGVOYW1lKyI+Iikpe2Nsb25lPWVsZW0uY2xvbmVOb2RlKHRydWUpO31lbHNle2ZyYWdtZW50RGl2LmlubmVySFRNTD1lbGVtLm91dGVySFRNTDtmcmFnbWVudERpdi5yZW1vdmVDaGlsZChjbG9uZT1mcmFnbWVudERpdi5maXJzdENoaWxkKTt9Ci1pZigoIXN1cHBvcnQubm9DbG9uZUV2ZW50fHwhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihlbGVtLm5vZGVUeXBlPT09MXx8ZWxlbS5ub2RlVHlwZT09PTExKSYmIWpRdWVyeS5pc1hNTERvYyhlbGVtKSl7ZGVzdEVsZW1lbnRzPWdldEFsbChjbG9uZSk7c3JjRWxlbWVudHM9Z2V0QWxsKGVsZW0pO2ZvcihpPTA7KG5vZGU9c3JjRWxlbWVudHNbaV0pIT1udWxsOysraSl7aWYoZGVzdEVsZW1lbnRzW2ldKXtmaXhDbG9uZU5vZGVJc3N1ZXMobm9kZSxkZXN0RWxlbWVudHNbaV0pO319fQotaWYoZGF0YUFuZEV2ZW50cyl7aWYoZGVlcERhdGFBbmRFdmVudHMpe3NyY0VsZW1lbnRzPXNyY0VsZW1lbnRzfHxnZXRBbGwoZWxlbSk7ZGVzdEVsZW1lbnRzPWRlc3RFbGVtZW50c3x8Z2V0QWxsKGNsb25lKTtmb3IoaT0wOyhub2RlPXNyY0VsZW1lbnRzW2ldKSE9bnVsbDtpKyspe2Nsb25lQ29weUV2ZW50KG5vZGUsZGVzdEVsZW1lbnRzW2ldKTt9fWVsc2V7Y2xvbmVDb3B5RXZlbnQoZWxlbSxjbG9uZSk7fX0KLWRlc3RFbGVtZW50cz1nZXRBbGwoY2xvbmUsInNjcmlwdCIpO2lmKGRlc3RFbGVtZW50cy5sZW5ndGg+MCl7c2V0R2xvYmFsRXZhbChkZXN0RWxlbWVudHMsIWluUGFnZSYmZ2V0QWxsKGVsZW0sInNjcmlwdCIpKTt9Ci1kZXN0RWxlbWVudHM9c3JjRWxlbWVudHM9bm9kZT1udWxsO3JldHVybiBjbG9uZTt9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZWxlbXMsY29udGV4dCxzY3JpcHRzLHNlbGVjdGlvbil7dmFyIGosZWxlbSxjb250YWlucyx0bXAsdGFnLHRib2R5LHdyYXAsbD1lbGVtcy5sZW5ndGgsc2FmZT1jcmVhdGVTYWZlRnJhZ21lbnQoY29udGV4dCksbm9kZXM9W10saT0wO2Zvcig7aTxsO2krKyl7ZWxlbT1lbGVtc1tpXTtpZihlbGVtfHxlbGVtPT09MCl7aWYoalF1ZXJ5LnR5cGUoZWxlbSk9PT0ib2JqZWN0Iil7alF1ZXJ5Lm1lcmdlKG5vZGVzLGVsZW0ubm9kZVR5cGU/W2VsZW1dOmVsZW0pO31lbHNlIGlmKCFyaHRtbC50ZXN0KGVsZW0pKXtub2Rlcy5wdXNoKGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoZWxlbSkpO31lbHNle3RtcD10bXB8fHNhZmUuYXBwZW5kQ2hpbGQoY29udGV4dC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7dGFnPShydGFnTmFtZS5leGVjKGVsZW0pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpO3dyYXA9d3JhcE1hcFt0YWddfHx3cmFwTWFwLl9kZWZhdWx0O3RtcC5pbm5lckhUTUw9d3JhcFsxXStlbGVtLnJlcGxhY2UocnhodG1sVGFnLCI8JDE+PC8kMj4iKSt3cmFwWzJdO2o9d3JhcFswXTt3aGlsZShqLS0pe3RtcD10bXAubGFzdENoaWxkO30KLWlmKCFzdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZybGVhZGluZ1doaXRlc3BhY2UudGVzdChlbGVtKSl7bm9kZXMucHVzaChjb250ZXh0LmNyZWF0ZVRleHROb2RlKHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBdKSk7fQotaWYoIXN1cHBvcnQudGJvZHkpe2VsZW09dGFnPT09InRhYmxlIiYmIXJ0Ym9keS50ZXN0KGVsZW0pP3RtcC5maXJzdENoaWxkOndyYXBbMV09PT0iPHRhYmxlPiImJiFydGJvZHkudGVzdChlbGVtKT90bXA6MDtqPWVsZW0mJmVsZW0uY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoai0tKXtpZihqUXVlcnkubm9kZU5hbWUoKHRib2R5PWVsZW0uY2hpbGROb2Rlc1tqXSksInRib2R5IikmJiF0Ym9keS5jaGlsZE5vZGVzLmxlbmd0aCl7ZWxlbS5yZW1vdmVDaGlsZCh0Ym9keSk7fX19Ci1qUXVlcnkubWVyZ2Uobm9kZXMsdG1wLmNoaWxkTm9kZXMpO3RtcC50ZXh0Q29udGVudD0iIjt3aGlsZSh0bXAuZmlyc3RDaGlsZCl7dG1wLnJlbW92ZUNoaWxkKHRtcC5maXJzdENoaWxkKTt9Ci10bXA9c2FmZS5sYXN0Q2hpbGQ7fX19Ci1pZih0bXApe3NhZmUucmVtb3ZlQ2hpbGQodG1wKTt9Ci1pZighc3VwcG9ydC5hcHBlbmRDaGVja2VkKXtqUXVlcnkuZ3JlcChnZXRBbGwobm9kZXMsImlucHV0IiksZml4RGVmYXVsdENoZWNrZWQpO30KLWk9MDt3aGlsZSgoZWxlbT1ub2Rlc1tpKytdKSl7aWYoc2VsZWN0aW9uJiZqUXVlcnkuaW5BcnJheShlbGVtLHNlbGVjdGlvbikhPT0tMSl7Y29udGludWU7fQotY29udGFpbnM9alF1ZXJ5LmNvbnRhaW5zKGVsZW0ub3duZXJEb2N1bWVudCxlbGVtKTt0bXA9Z2V0QWxsKHNhZmUuYXBwZW5kQ2hpbGQoZWxlbSksInNjcmlwdCIpO2lmKGNvbnRhaW5zKXtzZXRHbG9iYWxFdmFsKHRtcCk7fQotaWYoc2NyaXB0cyl7aj0wO3doaWxlKChlbGVtPXRtcFtqKytdKSl7aWYocnNjcmlwdFR5cGUudGVzdChlbGVtLnR5cGV8fCIiKSl7c2NyaXB0cy5wdXNoKGVsZW0pO319fX0KLXRtcD1udWxsO3JldHVybiBzYWZlO30sY2xlYW5EYXRhOmZ1bmN0aW9uKGVsZW1zLGFjY2VwdERhdGEpe3ZhciBlbGVtLHR5cGUsaWQsZGF0YSxpPTAsaW50ZXJuYWxLZXk9alF1ZXJ5LmV4cGFuZG8sY2FjaGU9alF1ZXJ5LmNhY2hlLGRlbGV0ZUV4cGFuZG89c3VwcG9ydC5kZWxldGVFeHBhbmRvLHNwZWNpYWw9alF1ZXJ5LmV2ZW50LnNwZWNpYWw7Zm9yKDsoZWxlbT1lbGVtc1tpXSkhPW51bGw7aSsrKXtpZihhY2NlcHREYXRhfHxqUXVlcnkuYWNjZXB0RGF0YShlbGVtKSl7aWQ9ZWxlbVtpbnRlcm5hbEtleV07ZGF0YT1pZCYmY2FjaGVbaWRdO2lmKGRhdGEpe2lmKGRhdGEuZXZlbnRzKXtmb3IodHlwZSBpbiBkYXRhLmV2ZW50cyl7aWYoc3BlY2lhbFt0eXBlXSl7alF1ZXJ5LmV2ZW50LnJlbW92ZShlbGVtLHR5cGUpO31lbHNle2pRdWVyeS5yZW1vdmVFdmVudChlbGVtLHR5cGUsZGF0YS5oYW5kbGUpO319fQotaWYoY2FjaGVbaWRdKXtkZWxldGUgY2FjaGVbaWRdO2lmKGRlbGV0ZUV4cGFuZG8pe2RlbGV0ZSBlbGVtW2ludGVybmFsS2V5XTt9ZWxzZSBpZih0eXBlb2YgZWxlbS5yZW1vdmVBdHRyaWJ1dGUhPT1zdHJ1bmRlZmluZWQpe2VsZW0ucmVtb3ZlQXR0cmlidXRlKGludGVybmFsS2V5KTt9ZWxzZXtlbGVtW2ludGVybmFsS2V5XT1udWxsO30KLWRlbGV0ZWRJZHMucHVzaChpZCk7fX19fX19KTtqUXVlcnkuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gYWNjZXNzKHRoaXMsZnVuY3Rpb24odmFsdWUpe3JldHVybiB2YWx1ZT09PXVuZGVmaW5lZD9qUXVlcnkudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KS5jcmVhdGVUZXh0Tm9kZSh2YWx1ZSkpO30sbnVsbCx2YWx1ZSxhcmd1bWVudHMubGVuZ3RoKTt9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlbGVtKXtpZih0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExfHx0aGlzLm5vZGVUeXBlPT09OSl7dmFyIHRhcmdldD1tYW5pcHVsYXRpb25UYXJnZXQodGhpcyxlbGVtKTt0YXJnZXQuYXBwZW5kQ2hpbGQoZWxlbSk7fX0pO30scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlbGVtKXtpZih0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExfHx0aGlzLm5vZGVUeXBlPT09OSl7dmFyIHRhcmdldD1tYW5pcHVsYXRpb25UYXJnZXQodGhpcyxlbGVtKTt0YXJnZXQuaW5zZXJ0QmVmb3JlKGVsZW0sdGFyZ2V0LmZpcnN0Q2hpbGQpO319KTt9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlbGVtKXtpZih0aGlzLnBhcmVudE5vZGUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWxlbSx0aGlzKTt9fSk7fSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlbGVtKXtpZih0aGlzLnBhcmVudE5vZGUpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWxlbSx0aGlzLm5leHRTaWJsaW5nKTt9fSk7fSxyZW1vdmU6ZnVuY3Rpb24oc2VsZWN0b3Isa2VlcERhdGEpe3ZhciBlbGVtLGVsZW1zPXNlbGVjdG9yP2pRdWVyeS5maWx0ZXIoc2VsZWN0b3IsdGhpcyk6dGhpcyxpPTA7Zm9yKDsoZWxlbT1lbGVtc1tpXSkhPW51bGw7aSsrKXtpZigha2VlcERhdGEmJmVsZW0ubm9kZVR5cGU9PT0xKXtqUXVlcnkuY2xlYW5EYXRhKGdldEFsbChlbGVtKSk7fQotaWYoZWxlbS5wYXJlbnROb2RlKXtpZihrZWVwRGF0YSYmalF1ZXJ5LmNvbnRhaW5zKGVsZW0ub3duZXJEb2N1bWVudCxlbGVtKSl7c2V0R2xvYmFsRXZhbChnZXRBbGwoZWxlbSwic2NyaXB0IikpO30KLWVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtKTt9fQotcmV0dXJuIHRoaXM7fSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlbGVtLGk9MDtmb3IoOyhlbGVtPXRoaXNbaV0pIT1udWxsO2krKyl7aWYoZWxlbS5ub2RlVHlwZT09PTEpe2pRdWVyeS5jbGVhbkRhdGEoZ2V0QWxsKGVsZW0sZmFsc2UpKTt9Ci13aGlsZShlbGVtLmZpcnN0Q2hpbGQpe2VsZW0ucmVtb3ZlQ2hpbGQoZWxlbS5maXJzdENoaWxkKTt9Ci1pZihlbGVtLm9wdGlvbnMmJmpRdWVyeS5ub2RlTmFtZShlbGVtLCJzZWxlY3QiKSl7ZWxlbS5vcHRpb25zLmxlbmd0aD0wO319Ci1yZXR1cm4gdGhpczt9LGNsb25lOmZ1bmN0aW9uKGRhdGFBbmRFdmVudHMsZGVlcERhdGFBbmRFdmVudHMpe2RhdGFBbmRFdmVudHM9ZGF0YUFuZEV2ZW50cz09bnVsbD9mYWxzZTpkYXRhQW5kRXZlbnRzO2RlZXBEYXRhQW5kRXZlbnRzPWRlZXBEYXRhQW5kRXZlbnRzPT1udWxsP2RhdGFBbmRFdmVudHM6ZGVlcERhdGFBbmRFdmVudHM7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGpRdWVyeS5jbG9uZSh0aGlzLGRhdGFBbmRFdmVudHMsZGVlcERhdGFBbmRFdmVudHMpO30pO30saHRtbDpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIGFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHZhbHVlKXt2YXIgZWxlbT10aGlzWzBdfHx7fSxpPTAsbD10aGlzLmxlbmd0aDtpZih2YWx1ZT09PXVuZGVmaW5lZCl7cmV0dXJuIGVsZW0ubm9kZVR5cGU9PT0xP2VsZW0uaW5uZXJIVE1MLnJlcGxhY2UocmlubGluZWpRdWVyeSwiIik6dW5kZWZpbmVkO30KLWlmKHR5cGVvZiB2YWx1ZT09PSJzdHJpbmciJiYhcm5vSW5uZXJodG1sLnRlc3QodmFsdWUpJiYoc3VwcG9ydC5odG1sU2VyaWFsaXplfHwhcm5vc2hpbWNhY2hlLnRlc3QodmFsdWUpKSYmKHN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFybGVhZGluZ1doaXRlc3BhY2UudGVzdCh2YWx1ZSkpJiYhd3JhcE1hcFsocnRhZ05hbWUuZXhlYyh2YWx1ZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXt2YWx1ZT12YWx1ZS5yZXBsYWNlKHJ4aHRtbFRhZywiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7aTxsO2krKyl7ZWxlbT10aGlzW2ldfHx7fTtpZihlbGVtLm5vZGVUeXBlPT09MSl7alF1ZXJ5LmNsZWFuRGF0YShnZXRBbGwoZWxlbSxmYWxzZSkpO2VsZW0uaW5uZXJIVE1MPXZhbHVlO319Ci1lbGVtPTA7fWNhdGNoKGUpe319Ci1pZihlbGVtKXt0aGlzLmVtcHR5KCkuYXBwZW5kKHZhbHVlKTt9fSxudWxsLHZhbHVlLGFyZ3VtZW50cy5sZW5ndGgpO30scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgYXJnPWFyZ3VtZW50c1swXTt0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlbGVtKXthcmc9dGhpcy5wYXJlbnROb2RlO2pRdWVyeS5jbGVhbkRhdGEoZ2V0QWxsKHRoaXMpKTtpZihhcmcpe2FyZy5yZXBsYWNlQ2hpbGQoZWxlbSx0aGlzKTt9fSk7cmV0dXJuIGFyZyYmKGFyZy5sZW5ndGh8fGFyZy5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpO30sZGV0YWNoOmZ1bmN0aW9uKHNlbGVjdG9yKXtyZXR1cm4gdGhpcy5yZW1vdmUoc2VsZWN0b3IsdHJ1ZSk7fSxkb21NYW5pcDpmdW5jdGlvbihhcmdzLGNhbGxiYWNrKXthcmdzPWNvbmNhdC5hcHBseShbXSxhcmdzKTt2YXIgZmlyc3Qsbm9kZSxoYXNTY3JpcHRzLHNjcmlwdHMsZG9jLGZyYWdtZW50LGk9MCxsPXRoaXMubGVuZ3RoLHNldD10aGlzLGlOb0Nsb25lPWwtMSx2YWx1ZT1hcmdzWzBdLGlzRnVuY3Rpb249alF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpO2lmKGlzRnVuY3Rpb258fChsPjEmJnR5cGVvZiB2YWx1ZT09PSJzdHJpbmciJiYhc3VwcG9ydC5jaGVja0Nsb25lJiZyY2hlY2tlZC50ZXN0KHZhbHVlKSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaW5kZXgpe3ZhciBzZWxmPXNldC5lcShpbmRleCk7aWYoaXNGdW5jdGlvbil7YXJnc1swXT12YWx1ZS5jYWxsKHRoaXMsaW5kZXgsc2VsZi5odG1sKCkpO30KLXNlbGYuZG9tTWFuaXAoYXJncyxjYWxsYmFjayk7fSk7fQotaWYobCl7ZnJhZ21lbnQ9alF1ZXJ5LmJ1aWxkRnJhZ21lbnQoYXJncyx0aGlzWzBdLm93bmVyRG9jdW1lbnQsZmFsc2UsdGhpcyk7Zmlyc3Q9ZnJhZ21lbnQuZmlyc3RDaGlsZDtpZihmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aD09PTEpe2ZyYWdtZW50PWZpcnN0O30KLWlmKGZpcnN0KXtzY3JpcHRzPWpRdWVyeS5tYXAoZ2V0QWxsKGZyYWdtZW50LCJzY3JpcHQiKSxkaXNhYmxlU2NyaXB0KTtoYXNTY3JpcHRzPXNjcmlwdHMubGVuZ3RoO2Zvcig7aTxsO2krKyl7bm9kZT1mcmFnbWVudDtpZihpIT09aU5vQ2xvbmUpe25vZGU9alF1ZXJ5LmNsb25lKG5vZGUsdHJ1ZSx0cnVlKTtpZihoYXNTY3JpcHRzKXtqUXVlcnkubWVyZ2Uoc2NyaXB0cyxnZXRBbGwobm9kZSwic2NyaXB0IikpO319Ci1jYWxsYmFjay5jYWxsKHRoaXNbaV0sbm9kZSxpKTt9Ci1pZihoYXNTY3JpcHRzKXtkb2M9c2NyaXB0c1tzY3JpcHRzLmxlbmd0aC0xXS5vd25lckRvY3VtZW50O2pRdWVyeS5tYXAoc2NyaXB0cyxyZXN0b3JlU2NyaXB0KTtmb3IoaT0wO2k8aGFzU2NyaXB0cztpKyspe25vZGU9c2NyaXB0c1tpXTtpZihyc2NyaXB0VHlwZS50ZXN0KG5vZGUudHlwZXx8IiIpJiYhalF1ZXJ5Ll9kYXRhKG5vZGUsImdsb2JhbEV2YWwiKSYmalF1ZXJ5LmNvbnRhaW5zKGRvYyxub2RlKSl7aWYobm9kZS5zcmMpe2lmKGpRdWVyeS5fZXZhbFVybCl7alF1ZXJ5Ll9ldmFsVXJsKG5vZGUuc3JjKTt9fWVsc2V7alF1ZXJ5Lmdsb2JhbEV2YWwoKG5vZGUudGV4dHx8bm9kZS50ZXh0Q29udGVudHx8bm9kZS5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKHJjbGVhblNjcmlwdCwiIikpO319fX0KLWZyYWdtZW50PWZpcnN0PW51bGw7fX0KLXJldHVybiB0aGlzO319KTtqUXVlcnkuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKG5hbWUsb3JpZ2luYWwpe2pRdWVyeS5mbltuYW1lXT1mdW5jdGlvbihzZWxlY3Rvcil7dmFyIGVsZW1zLGk9MCxyZXQ9W10saW5zZXJ0PWpRdWVyeShzZWxlY3RvciksbGFzdD1pbnNlcnQubGVuZ3RoLTE7Zm9yKDtpPD1sYXN0O2krKyl7ZWxlbXM9aT09PWxhc3Q/dGhpczp0aGlzLmNsb25lKHRydWUpO2pRdWVyeShpbnNlcnRbaV0pW29yaWdpbmFsXShlbGVtcyk7cHVzaC5hcHBseShyZXQsZWxlbXMuZ2V0KCkpO30KLXJldHVybiB0aGlzLnB1c2hTdGFjayhyZXQpO307fSk7dmFyIGlmcmFtZSxlbGVtZGlzcGxheT17fTtmdW5jdGlvbiBhY3R1YWxEaXNwbGF5KG5hbWUsZG9jKXt2YXIgc3R5bGUsZWxlbT1qUXVlcnkoZG9jLmNyZWF0ZUVsZW1lbnQobmFtZSkpLmFwcGVuZFRvKGRvYy5ib2R5KSxkaXNwbGF5PXdpbmRvdy5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSYmKHN0eWxlPXdpbmRvdy5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZShlbGVtWzBdKSk/c3R5bGUuZGlzcGxheTpqUXVlcnkuY3NzKGVsZW1bMF0sImRpc3BsYXkiKTtlbGVtLmRldGFjaCgpO3JldHVybiBkaXNwbGF5O30KLWZ1bmN0aW9uIGRlZmF1bHREaXNwbGF5KG5vZGVOYW1lKXt2YXIgZG9jPWRvY3VtZW50LGRpc3BsYXk9ZWxlbWRpc3BsYXlbbm9kZU5hbWVdO2lmKCFkaXNwbGF5KXtkaXNwbGF5PWFjdHVhbERpc3BsYXkobm9kZU5hbWUsZG9jKTtpZihkaXNwbGF5PT09Im5vbmUifHwhZGlzcGxheSl7aWZyYW1lPShpZnJhbWV8fGpRdWVyeSgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhkb2MuZG9jdW1lbnRFbGVtZW50KTtkb2M9KGlmcmFtZVswXS5jb250ZW50V2luZG93fHxpZnJhbWVbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudDtkb2Mud3JpdGUoKTtkb2MuY2xvc2UoKTtkaXNwbGF5PWFjdHVhbERpc3BsYXkobm9kZU5hbWUsZG9jKTtpZnJhbWUuZGV0YWNoKCk7fQotZWxlbWRpc3BsYXlbbm9kZU5hbWVdPWRpc3BsYXk7fQotcmV0dXJuIGRpc3BsYXk7fQotKGZ1bmN0aW9uKCl7dmFyIHNocmlua1dyYXBCbG9ja3NWYWw7c3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzPWZ1bmN0aW9uKCl7aWYoc2hyaW5rV3JhcEJsb2Nrc1ZhbCE9bnVsbCl7cmV0dXJuIHNocmlua1dyYXBCbG9ja3NWYWw7fQotc2hyaW5rV3JhcEJsb2Nrc1ZhbD1mYWxzZTt2YXIgZGl2LGJvZHksY29udGFpbmVyO2JvZHk9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZighYm9keXx8IWJvZHkuc3R5bGUpe3JldHVybjt9Ci1kaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnRhaW5lci5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCI7Ym9keS5hcHBlbmRDaGlsZChjb250YWluZXIpLmFwcGVuZENoaWxkKGRpdik7aWYodHlwZW9mIGRpdi5zdHlsZS56b29tIT09c3RydW5kZWZpbmVkKXtkaXYuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDsiKyJib3gtc2l6aW5nOmNvbnRlbnQtYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7Ym9yZGVyOjA7IisicGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSI7ZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS53aWR0aD0iNXB4IjtzaHJpbmtXcmFwQmxvY2tzVmFsPWRpdi5vZmZzZXRXaWR0aCE9PTM7fQotYm9keS5yZW1vdmVDaGlsZChjb250YWluZXIpO3JldHVybiBzaHJpbmtXcmFwQmxvY2tzVmFsO307fSkoKTt2YXIgcm1hcmdpbj0oL15tYXJnaW4vKTt2YXIgcm51bW5vbnB4PW5ldyBSZWdFeHAoIl4oIitwbnVtKyIpKD8hcHgpW2EteiVdKyQiLCJpIik7dmFyIGdldFN0eWxlcyxjdXJDU1MscnBvc2l0aW9uPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLztpZih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSl7Z2V0U3R5bGVzPWZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLG51bGwpO307Y3VyQ1NTPWZ1bmN0aW9uKGVsZW0sbmFtZSxjb21wdXRlZCl7dmFyIHdpZHRoLG1pbldpZHRoLG1heFdpZHRoLHJldCxzdHlsZT1lbGVtLnN0eWxlO2NvbXB1dGVkPWNvbXB1dGVkfHxnZXRTdHlsZXMoZWxlbSk7cmV0PWNvbXB1dGVkP2NvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUobmFtZSl8fGNvbXB1dGVkW25hbWVdOnVuZGVmaW5lZDtpZihjb21wdXRlZCl7aWYocmV0PT09IiImJiFqUXVlcnkuY29udGFpbnMoZWxlbS5vd25lckRvY3VtZW50LGVsZW0pKXtyZXQ9alF1ZXJ5LnN0eWxlKGVsZW0sbmFtZSk7fQotaWYocm51bW5vbnB4LnRlc3QocmV0KSYmcm1hcmdpbi50ZXN0KG5hbWUpKXt3aWR0aD1zdHlsZS53aWR0aDttaW5XaWR0aD1zdHlsZS5taW5XaWR0aDttYXhXaWR0aD1zdHlsZS5tYXhXaWR0aDtzdHlsZS5taW5XaWR0aD1zdHlsZS5tYXhXaWR0aD1zdHlsZS53aWR0aD1yZXQ7cmV0PWNvbXB1dGVkLndpZHRoO3N0eWxlLndpZHRoPXdpZHRoO3N0eWxlLm1pbldpZHRoPW1pbldpZHRoO3N0eWxlLm1heFdpZHRoPW1heFdpZHRoO319Ci1yZXR1cm4gcmV0PT09dW5kZWZpbmVkP3JldDpyZXQrIiI7fTt9ZWxzZSBpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlKXtnZXRTdHlsZXM9ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVsZW0uY3VycmVudFN0eWxlO307Y3VyQ1NTPWZ1bmN0aW9uKGVsZW0sbmFtZSxjb21wdXRlZCl7dmFyIGxlZnQscnMscnNMZWZ0LHJldCxzdHlsZT1lbGVtLnN0eWxlO2NvbXB1dGVkPWNvbXB1dGVkfHxnZXRTdHlsZXMoZWxlbSk7cmV0PWNvbXB1dGVkP2NvbXB1dGVkW25hbWVdOnVuZGVmaW5lZDtpZihyZXQ9PW51bGwmJnN0eWxlJiZzdHlsZVtuYW1lXSl7cmV0PXN0eWxlW25hbWVdO30KLWlmKHJudW1ub25weC50ZXN0KHJldCkmJiFycG9zaXRpb24udGVzdChuYW1lKSl7bGVmdD1zdHlsZS5sZWZ0O3JzPWVsZW0ucnVudGltZVN0eWxlO3JzTGVmdD1ycyYmcnMubGVmdDtpZihyc0xlZnQpe3JzLmxlZnQ9ZWxlbS5jdXJyZW50U3R5bGUubGVmdDt9Ci1zdHlsZS5sZWZ0PW5hbWU9PT0iZm9udFNpemUiPyIxZW0iOnJldDtyZXQ9c3R5bGUucGl4ZWxMZWZ0KyJweCI7c3R5bGUubGVmdD1sZWZ0O2lmKHJzTGVmdCl7cnMubGVmdD1yc0xlZnQ7fX0KLXJldHVybiByZXQ9PT11bmRlZmluZWQ/cmV0OnJldCsiInx8ImF1dG8iO307fQotZnVuY3Rpb24gYWRkR2V0SG9va0lmKGNvbmRpdGlvbkZuLGhvb2tGbil7cmV0dXJue2dldDpmdW5jdGlvbigpe3ZhciBjb25kaXRpb249Y29uZGl0aW9uRm4oKTtpZihjb25kaXRpb249PW51bGwpe3JldHVybjt9Ci1pZihjb25kaXRpb24pe2RlbGV0ZSB0aGlzLmdldDtyZXR1cm47fQotcmV0dXJuKHRoaXMuZ2V0PWhvb2tGbikuYXBwbHkodGhpcyxhcmd1bWVudHMpO319O30KLShmdW5jdGlvbigpe3ZhciBkaXYsc3R5bGUsYSxwaXhlbFBvc2l0aW9uVmFsLGJveFNpemluZ1JlbGlhYmxlVmFsLHJlbGlhYmxlSGlkZGVuT2Zmc2V0c1ZhbCxyZWxpYWJsZU1hcmdpblJpZ2h0VmFsO2Rpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkaXYuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iO2E9ZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07c3R5bGU9YSYmYS5zdHlsZTtpZighc3R5bGUpe3JldHVybjt9Ci1zdHlsZS5jc3NUZXh0PSJmbG9hdDpsZWZ0O29wYWNpdHk6LjUiO3N1cHBvcnQub3BhY2l0eT1zdHlsZS5vcGFjaXR5PT09IjAuNSI7c3VwcG9ydC5jc3NGbG9hdD0hIXN0eWxlLmNzc0Zsb2F0O2Rpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giO2Rpdi5jbG9uZU5vZGUodHJ1ZSkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiI7c3VwcG9ydC5jbGVhckNsb25lU3R5bGU9ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwPT09ImNvbnRlbnQtYm94IjtzdXBwb3J0LmJveFNpemluZz1zdHlsZS5ib3hTaXppbmc9PT0iInx8c3R5bGUuTW96Qm94U2l6aW5nPT09IiJ8fHN0eWxlLldlYmtpdEJveFNpemluZz09PSIiO2pRdWVyeS5leHRlbmQoc3VwcG9ydCx7cmVsaWFibGVIaWRkZW5PZmZzZXRzOmZ1bmN0aW9uKCl7aWYocmVsaWFibGVIaWRkZW5PZmZzZXRzVmFsPT1udWxsKXtjb21wdXRlU3R5bGVUZXN0cygpO30KLXJldHVybiByZWxpYWJsZUhpZGRlbk9mZnNldHNWYWw7fSxib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe2lmKGJveFNpemluZ1JlbGlhYmxlVmFsPT1udWxsKXtjb21wdXRlU3R5bGVUZXN0cygpO30KLXJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDt9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtpZihwaXhlbFBvc2l0aW9uVmFsPT1udWxsKXtjb21wdXRlU3R5bGVUZXN0cygpO30KLXJldHVybiBwaXhlbFBvc2l0aW9uVmFsO30scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe2lmKHJlbGlhYmxlTWFyZ2luUmlnaHRWYWw9PW51bGwpe2NvbXB1dGVTdHlsZVRlc3RzKCk7fQotcmV0dXJuIHJlbGlhYmxlTWFyZ2luUmlnaHRWYWw7fX0pO2Z1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCl7dmFyIGRpdixib2R5LGNvbnRhaW5lcixjb250ZW50cztib2R5PWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoIWJvZHl8fCFib2R5LnN0eWxlKXtyZXR1cm47fQotZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb250YWluZXIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHgiO2JvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKS5hcHBlbmRDaGlsZChkaXYpO2Rpdi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDsiKyJib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjElO3RvcDoxJTsiKyJib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjRweDtwb3NpdGlvbjphYnNvbHV0ZSI7cGl4ZWxQb3NpdGlvblZhbD1ib3hTaXppbmdSZWxpYWJsZVZhbD1mYWxzZTtyZWxpYWJsZU1hcmdpblJpZ2h0VmFsPXRydWU7aWYod2luZG93LmdldENvbXB1dGVkU3R5bGUpe3BpeGVsUG9zaXRpb25WYWw9KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpdixudWxsKXx8e30pLnRvcCE9PSIxJSI7Ym94U2l6aW5nUmVsaWFibGVWYWw9KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRpdixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGg9PT0iNHB4Ijtjb250ZW50cz1kaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO2NvbnRlbnRzLnN0eWxlLmNzc1RleHQ9ZGl2LnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7IisiYm94LXNpemluZzpjb250ZW50LWJveDtkaXNwbGF5OmJsb2NrO21hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MCI7Y29udGVudHMuc3R5bGUubWFyZ2luUmlnaHQ9Y29udGVudHMuc3R5bGUud2lkdGg9IjAiO2Rpdi5zdHlsZS53aWR0aD0iMXB4IjtyZWxpYWJsZU1hcmdpblJpZ2h0VmFsPSFwYXJzZUZsb2F0KCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250ZW50cyxudWxsKXx8e30pLm1hcmdpblJpZ2h0KTt9Ci1kaXYuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+Ijtjb250ZW50cz1kaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Y29udGVudHNbMF0uc3R5bGUuY3NzVGV4dD0ibWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzowO2Rpc3BsYXk6bm9uZSI7cmVsaWFibGVIaWRkZW5PZmZzZXRzVmFsPWNvbnRlbnRzWzBdLm9mZnNldEhlaWdodD09PTA7aWYocmVsaWFibGVIaWRkZW5PZmZzZXRzVmFsKXtjb250ZW50c1swXS5zdHlsZS5kaXNwbGF5PSIiO2NvbnRlbnRzWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3JlbGlhYmxlSGlkZGVuT2Zmc2V0c1ZhbD1jb250ZW50c1swXS5vZmZzZXRIZWlnaHQ9PT0wO30KLWJvZHkucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTt9fSkoKTtqUXVlcnkuc3dhcD1mdW5jdGlvbihlbGVtLG9wdGlvbnMsY2FsbGJhY2ssYXJncyl7dmFyIHJldCxuYW1lLG9sZD17fTtmb3IobmFtZSBpbiBvcHRpb25zKXtvbGRbbmFtZV09ZWxlbS5zdHlsZVtuYW1lXTtlbGVtLnN0eWxlW25hbWVdPW9wdGlvbnNbbmFtZV07fQotcmV0PWNhbGxiYWNrLmFwcGx5KGVsZW0sYXJnc3x8W10pO2ZvcihuYW1lIGluIG9wdGlvbnMpe2VsZW0uc3R5bGVbbmFtZV09b2xkW25hbWVdO30KLXJldHVybiByZXQ7fTt2YXIKLXJhbHBoYT0vYWxwaGFcKFteKV0qXCkvaSxyb3BhY2l0eT0vb3BhY2l0eVxzKj1ccyooW14pXSopLyxyZGlzcGxheXN3YXA9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLHJudW1zcGxpdD1uZXcgUmVnRXhwKCJeKCIrcG51bSsiKSguKikkIiwiaSIpLHJyZWxOdW09bmV3IFJlZ0V4cCgiXihbKy1dKT0oIitwbnVtKyIpIiwiaSIpLGNzc1Nob3c9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGNzc05vcm1hbFRyYW5zZm9ybT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn0sY3NzUHJlZml4ZXM9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXTtmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZShzdHlsZSxuYW1lKXtpZihuYW1lIGluIHN0eWxlKXtyZXR1cm4gbmFtZTt9Ci12YXIgY2FwTmFtZT1uYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK25hbWUuc2xpY2UoMSksb3JpZ05hbWU9bmFtZSxpPWNzc1ByZWZpeGVzLmxlbmd0aDt3aGlsZShpLS0pe25hbWU9Y3NzUHJlZml4ZXNbaV0rY2FwTmFtZTtpZihuYW1lIGluIHN0eWxlKXtyZXR1cm4gbmFtZTt9fQotcmV0dXJuIG9yaWdOYW1lO30KLWZ1bmN0aW9uIHNob3dIaWRlKGVsZW1lbnRzLHNob3cpe3ZhciBkaXNwbGF5LGVsZW0saGlkZGVuLHZhbHVlcz1bXSxpbmRleD0wLGxlbmd0aD1lbGVtZW50cy5sZW5ndGg7Zm9yKDtpbmRleDxsZW5ndGg7aW5kZXgrKyl7ZWxlbT1lbGVtZW50c1tpbmRleF07aWYoIWVsZW0uc3R5bGUpe2NvbnRpbnVlO30KLXZhbHVlc1tpbmRleF09alF1ZXJ5Ll9kYXRhKGVsZW0sIm9sZGRpc3BsYXkiKTtkaXNwbGF5PWVsZW0uc3R5bGUuZGlzcGxheTtpZihzaG93KXtpZighdmFsdWVzW2luZGV4XSYmZGlzcGxheT09PSJub25lIil7ZWxlbS5zdHlsZS5kaXNwbGF5PSIiO30KLWlmKGVsZW0uc3R5bGUuZGlzcGxheT09PSIiJiZpc0hpZGRlbihlbGVtKSl7dmFsdWVzW2luZGV4XT1qUXVlcnkuX2RhdGEoZWxlbSwib2xkZGlzcGxheSIsZGVmYXVsdERpc3BsYXkoZWxlbS5ub2RlTmFtZSkpO319ZWxzZXtoaWRkZW49aXNIaWRkZW4oZWxlbSk7aWYoZGlzcGxheSYmZGlzcGxheSE9PSJub25lInx8IWhpZGRlbil7alF1ZXJ5Ll9kYXRhKGVsZW0sIm9sZGRpc3BsYXkiLGhpZGRlbj9kaXNwbGF5OmpRdWVyeS5jc3MoZWxlbSwiZGlzcGxheSIpKTt9fX0KLWZvcihpbmRleD0wO2luZGV4PGxlbmd0aDtpbmRleCsrKXtlbGVtPWVsZW1lbnRzW2luZGV4XTtpZighZWxlbS5zdHlsZSl7Y29udGludWU7fQotaWYoIXNob3d8fGVsZW0uc3R5bGUuZGlzcGxheT09PSJub25lInx8ZWxlbS5zdHlsZS5kaXNwbGF5PT09IiIpe2VsZW0uc3R5bGUuZGlzcGxheT1zaG93P3ZhbHVlc1tpbmRleF18fCIiOiJub25lIjt9fQotcmV0dXJuIGVsZW1lbnRzO30KLWZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKGVsZW0sdmFsdWUsc3VidHJhY3Qpe3ZhciBtYXRjaGVzPXJudW1zcGxpdC5leGVjKHZhbHVlKTtyZXR1cm4gbWF0Y2hlcz9NYXRoLm1heCgwLG1hdGNoZXNbMV0tKHN1YnRyYWN0fHwwKSkrKG1hdGNoZXNbMl18fCJweCIpOnZhbHVlO30KLWZ1bmN0aW9uIGF1Z21lbnRXaWR0aE9ySGVpZ2h0KGVsZW0sbmFtZSxleHRyYSxpc0JvcmRlckJveCxzdHlsZXMpe3ZhciBpPWV4dHJhPT09KGlzQm9yZGVyQm94PyJib3JkZXIiOiJjb250ZW50Iik/NDpuYW1lPT09IndpZHRoIj8xOjAsdmFsPTA7Zm9yKDtpPDQ7aSs9Mil7aWYoZXh0cmE9PT0ibWFyZ2luIil7dmFsKz1qUXVlcnkuY3NzKGVsZW0sZXh0cmErY3NzRXhwYW5kW2ldLHRydWUsc3R5bGVzKTt9Ci1pZihpc0JvcmRlckJveCl7aWYoZXh0cmE9PT0iY29udGVudCIpe3ZhbC09alF1ZXJ5LmNzcyhlbGVtLCJwYWRkaW5nIitjc3NFeHBhbmRbaV0sdHJ1ZSxzdHlsZXMpO30KLWlmKGV4dHJhIT09Im1hcmdpbiIpe3ZhbC09alF1ZXJ5LmNzcyhlbGVtLCJib3JkZXIiK2Nzc0V4cGFuZFtpXSsiV2lkdGgiLHRydWUsc3R5bGVzKTt9fWVsc2V7dmFsKz1qUXVlcnkuY3NzKGVsZW0sInBhZGRpbmciK2Nzc0V4cGFuZFtpXSx0cnVlLHN0eWxlcyk7aWYoZXh0cmEhPT0icGFkZGluZyIpe3ZhbCs9alF1ZXJ5LmNzcyhlbGVtLCJib3JkZXIiK2Nzc0V4cGFuZFtpXSsiV2lkdGgiLHRydWUsc3R5bGVzKTt9fX0KLXJldHVybiB2YWw7fQotZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodChlbGVtLG5hbWUsZXh0cmEpe3ZhciB2YWx1ZUlzQm9yZGVyQm94PXRydWUsdmFsPW5hbWU9PT0id2lkdGgiP2VsZW0ub2Zmc2V0V2lkdGg6ZWxlbS5vZmZzZXRIZWlnaHQsc3R5bGVzPWdldFN0eWxlcyhlbGVtKSxpc0JvcmRlckJveD1zdXBwb3J0LmJveFNpemluZyYmalF1ZXJ5LmNzcyhlbGVtLCJib3hTaXppbmciLGZhbHNlLHN0eWxlcyk9PT0iYm9yZGVyLWJveCI7aWYodmFsPD0wfHx2YWw9PW51bGwpe3ZhbD1jdXJDU1MoZWxlbSxuYW1lLHN0eWxlcyk7aWYodmFsPDB8fHZhbD09bnVsbCl7dmFsPWVsZW0uc3R5bGVbbmFtZV07fQotaWYocm51bW5vbnB4LnRlc3QodmFsKSl7cmV0dXJuIHZhbDt9Ci12YWx1ZUlzQm9yZGVyQm94PWlzQm9yZGVyQm94JiYoc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpfHx2YWw9PT1lbGVtLnN0eWxlW25hbWVdKTt2YWw9cGFyc2VGbG9hdCh2YWwpfHwwO30KLXJldHVybih2YWwrYXVnbWVudFdpZHRoT3JIZWlnaHQoZWxlbSxuYW1lLGV4dHJhfHwoaXNCb3JkZXJCb3g/ImJvcmRlciI6ImNvbnRlbnQiKSx2YWx1ZUlzQm9yZGVyQm94LHN0eWxlcykpKyJweCI7fQotalF1ZXJ5LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlbGVtLGNvbXB1dGVkKXtpZihjb21wdXRlZCl7dmFyIHJldD1jdXJDU1MoZWxlbSwib3BhY2l0eSIpO3JldHVybiByZXQ9PT0iIj8iMSI6cmV0O319fX0sY3NzTnVtYmVyOnsiY29sdW1uQ291bnQiOnRydWUsImZpbGxPcGFjaXR5Ijp0cnVlLCJmbGV4R3JvdyI6dHJ1ZSwiZmxleFNocmluayI6dHJ1ZSwiZm9udFdlaWdodCI6dHJ1ZSwibGluZUhlaWdodCI6dHJ1ZSwib3BhY2l0eSI6dHJ1ZSwib3JkZXIiOnRydWUsIm9ycGhhbnMiOnRydWUsIndpZG93cyI6dHJ1ZSwiekluZGV4Ijp0cnVlLCJ6b29tIjp0cnVlfSxjc3NQcm9wczp7ImZsb2F0IjpzdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlbGVtLG5hbWUsdmFsdWUsZXh0cmEpe2lmKCFlbGVtfHxlbGVtLm5vZGVUeXBlPT09M3x8ZWxlbS5ub2RlVHlwZT09PTh8fCFlbGVtLnN0eWxlKXtyZXR1cm47fQotdmFyIHJldCx0eXBlLGhvb2tzLG9yaWdOYW1lPWpRdWVyeS5jYW1lbENhc2UobmFtZSksc3R5bGU9ZWxlbS5zdHlsZTtuYW1lPWpRdWVyeS5jc3NQcm9wc1tvcmlnTmFtZV18fChqUXVlcnkuY3NzUHJvcHNbb3JpZ05hbWVdPXZlbmRvclByb3BOYW1lKHN0eWxlLG9yaWdOYW1lKSk7aG9va3M9alF1ZXJ5LmNzc0hvb2tzW25hbWVdfHxqUXVlcnkuY3NzSG9va3Nbb3JpZ05hbWVdO2lmKHZhbHVlIT09dW5kZWZpbmVkKXt0eXBlPXR5cGVvZiB2YWx1ZTtpZih0eXBlPT09InN0cmluZyImJihyZXQ9cnJlbE51bS5leGVjKHZhbHVlKSkpe3ZhbHVlPShyZXRbMV0rMSkqcmV0WzJdK3BhcnNlRmxvYXQoalF1ZXJ5LmNzcyhlbGVtLG5hbWUpKTt0eXBlPSJudW1iZXIiO30KLWlmKHZhbHVlPT1udWxsfHx2YWx1ZSE9PXZhbHVlKXtyZXR1cm47fQotaWYodHlwZT09PSJudW1iZXIiJiYhalF1ZXJ5LmNzc051bWJlcltvcmlnTmFtZV0pe3ZhbHVlKz0icHgiO30KLWlmKCFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSYmdmFsdWU9PT0iIiYmbmFtZS5pbmRleE9mKCJiYWNrZ3JvdW5kIik9PT0wKXtzdHlsZVtuYW1lXT0iaW5oZXJpdCI7fQotaWYoIWhvb2tzfHwhKCJzZXQiaW4gaG9va3MpfHwodmFsdWU9aG9va3Muc2V0KGVsZW0sdmFsdWUsZXh0cmEpKSE9PXVuZGVmaW5lZCl7dHJ5e3N0eWxlW25hbWVdPXZhbHVlO31jYXRjaChlKXt9fX1lbHNle2lmKGhvb2tzJiYiZ2V0ImluIGhvb2tzJiYocmV0PWhvb2tzLmdldChlbGVtLGZhbHNlLGV4dHJhKSkhPT11bmRlZmluZWQpe3JldHVybiByZXQ7fQotcmV0dXJuIHN0eWxlW25hbWVdO319LGNzczpmdW5jdGlvbihlbGVtLG5hbWUsZXh0cmEsc3R5bGVzKXt2YXIgbnVtLHZhbCxob29rcyxvcmlnTmFtZT1qUXVlcnkuY2FtZWxDYXNlKG5hbWUpO25hbWU9alF1ZXJ5LmNzc1Byb3BzW29yaWdOYW1lXXx8KGpRdWVyeS5jc3NQcm9wc1tvcmlnTmFtZV09dmVuZG9yUHJvcE5hbWUoZWxlbS5zdHlsZSxvcmlnTmFtZSkpO2hvb2tzPWpRdWVyeS5jc3NIb29rc1tuYW1lXXx8alF1ZXJ5LmNzc0hvb2tzW29yaWdOYW1lXTtpZihob29rcyYmImdldCJpbiBob29rcyl7dmFsPWhvb2tzLmdldChlbGVtLHRydWUsZXh0cmEpO30KLWlmKHZhbD09PXVuZGVmaW5lZCl7dmFsPWN1ckNTUyhlbGVtLG5hbWUsc3R5bGVzKTt9Ci1pZih2YWw9PT0ibm9ybWFsIiYmbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0pe3ZhbD1jc3NOb3JtYWxUcmFuc2Zvcm1bbmFtZV07fQotaWYoZXh0cmE9PT0iInx8ZXh0cmEpe251bT1wYXJzZUZsb2F0KHZhbCk7cmV0dXJuIGV4dHJhPT09dHJ1ZXx8alF1ZXJ5LmlzTnVtZXJpYyhudW0pP251bXx8MDp2YWw7fQotcmV0dXJuIHZhbDt9fSk7alF1ZXJ5LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGksbmFtZSl7alF1ZXJ5LmNzc0hvb2tzW25hbWVdPXtnZXQ6ZnVuY3Rpb24oZWxlbSxjb21wdXRlZCxleHRyYSl7aWYoY29tcHV0ZWQpe3JldHVybiByZGlzcGxheXN3YXAudGVzdChqUXVlcnkuY3NzKGVsZW0sImRpc3BsYXkiKSkmJmVsZW0ub2Zmc2V0V2lkdGg9PT0wP2pRdWVyeS5zd2FwKGVsZW0sY3NzU2hvdyxmdW5jdGlvbigpe3JldHVybiBnZXRXaWR0aE9ySGVpZ2h0KGVsZW0sbmFtZSxleHRyYSk7fSk6Z2V0V2lkdGhPckhlaWdodChlbGVtLG5hbWUsZXh0cmEpO319LHNldDpmdW5jdGlvbihlbGVtLHZhbHVlLGV4dHJhKXt2YXIgc3R5bGVzPWV4dHJhJiZnZXRTdHlsZXMoZWxlbSk7cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKGVsZW0sdmFsdWUsZXh0cmE/YXVnbWVudFdpZHRoT3JIZWlnaHQoZWxlbSxuYW1lLGV4dHJhLHN1cHBvcnQuYm94U2l6aW5nJiZqUXVlcnkuY3NzKGVsZW0sImJveFNpemluZyIsZmFsc2Usc3R5bGVzKT09PSJib3JkZXItYm94IixzdHlsZXMpOjApO319O30pO2lmKCFzdXBwb3J0Lm9wYWNpdHkpe2pRdWVyeS5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oZWxlbSxjb21wdXRlZCl7cmV0dXJuIHJvcGFjaXR5LnRlc3QoKGNvbXB1dGVkJiZlbGVtLmN1cnJlbnRTdHlsZT9lbGVtLmN1cnJlbnRTdHlsZS5maWx0ZXI6ZWxlbS5zdHlsZS5maWx0ZXIpfHwiIik/KDAuMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKSsiIjpjb21wdXRlZD8iMSI6IiI7fSxzZXQ6ZnVuY3Rpb24oZWxlbSx2YWx1ZSl7dmFyIHN0eWxlPWVsZW0uc3R5bGUsY3VycmVudFN0eWxlPWVsZW0uY3VycmVudFN0eWxlLG9wYWNpdHk9alF1ZXJ5LmlzTnVtZXJpYyh2YWx1ZSk/ImFscGhhKG9wYWNpdHk9Iit2YWx1ZSoxMDArIikiOiIiLGZpbHRlcj1jdXJyZW50U3R5bGUmJmN1cnJlbnRTdHlsZS5maWx0ZXJ8fHN0eWxlLmZpbHRlcnx8IiI7c3R5bGUuem9vbT0xO2lmKCh2YWx1ZT49MXx8dmFsdWU9PT0iIikmJmpRdWVyeS50cmltKGZpbHRlci5yZXBsYWNlKHJhbHBoYSwiIikpPT09IiImJnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSl7c3R5bGUucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKTtpZih2YWx1ZT09PSIifHxjdXJyZW50U3R5bGUmJiFjdXJyZW50U3R5bGUuZmlsdGVyKXtyZXR1cm47fX0KLXN0eWxlLmZpbHRlcj1yYWxwaGEudGVzdChmaWx0ZXIpP2ZpbHRlci5yZXBsYWNlKHJhbHBoYSxvcGFjaXR5KTpmaWx0ZXIrIiAiK29wYWNpdHk7fX07fQotalF1ZXJ5LmNzc0hvb2tzLm1hcmdpblJpZ2h0PWFkZEdldEhvb2tJZihzdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oZWxlbSxjb21wdXRlZCl7aWYoY29tcHV0ZWQpe3JldHVybiBqUXVlcnkuc3dhcChlbGVtLHsiZGlzcGxheSI6ImlubGluZS1ibG9jayJ9LGN1ckNTUyxbZWxlbSwibWFyZ2luUmlnaHQiXSk7fX0pO2pRdWVyeS5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24ocHJlZml4LHN1ZmZpeCl7alF1ZXJ5LmNzc0hvb2tzW3ByZWZpeCtzdWZmaXhdPXtleHBhbmQ6ZnVuY3Rpb24odmFsdWUpe3ZhciBpPTAsZXhwYW5kZWQ9e30scGFydHM9dHlwZW9mIHZhbHVlPT09InN0cmluZyI/dmFsdWUuc3BsaXQoIiAiKTpbdmFsdWVdO2Zvcig7aTw0O2krKyl7ZXhwYW5kZWRbcHJlZml4K2Nzc0V4cGFuZFtpXStzdWZmaXhdPXBhcnRzW2ldfHxwYXJ0c1tpLTJdfHxwYXJ0c1swXTt9Ci1yZXR1cm4gZXhwYW5kZWQ7fX07aWYoIXJtYXJnaW4udGVzdChwcmVmaXgpKXtqUXVlcnkuY3NzSG9va3NbcHJlZml4K3N1ZmZpeF0uc2V0PXNldFBvc2l0aXZlTnVtYmVyO319KTtqUXVlcnkuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24obmFtZSx2YWx1ZSl7cmV0dXJuIGFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGVsZW0sbmFtZSx2YWx1ZSl7dmFyIHN0eWxlcyxsZW4sbWFwPXt9LGk9MDtpZihqUXVlcnkuaXNBcnJheShuYW1lKSl7c3R5bGVzPWdldFN0eWxlcyhlbGVtKTtsZW49bmFtZS5sZW5ndGg7Zm9yKDtpPGxlbjtpKyspe21hcFtuYW1lW2ldXT1qUXVlcnkuY3NzKGVsZW0sbmFtZVtpXSxmYWxzZSxzdHlsZXMpO30KLXJldHVybiBtYXA7fQotcmV0dXJuIHZhbHVlIT09dW5kZWZpbmVkP2pRdWVyeS5zdHlsZShlbGVtLG5hbWUsdmFsdWUpOmpRdWVyeS5jc3MoZWxlbSxuYW1lKTt9LG5hbWUsdmFsdWUsYXJndW1lbnRzLmxlbmd0aD4xKTt9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gc2hvd0hpZGUodGhpcyx0cnVlKTt9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gc2hvd0hpZGUodGhpcyk7fSx0b2dnbGU6ZnVuY3Rpb24oc3RhdGUpe2lmKHR5cGVvZiBzdGF0ZT09PSJib29sZWFuIil7cmV0dXJuIHN0YXRlP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpO30KLXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihpc0hpZGRlbih0aGlzKSl7alF1ZXJ5KHRoaXMpLnNob3coKTt9ZWxzZXtqUXVlcnkodGhpcykuaGlkZSgpO319KTt9fSk7ZnVuY3Rpb24gVHdlZW4oZWxlbSxvcHRpb25zLHByb3AsZW5kLGVhc2luZyl7cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdChlbGVtLG9wdGlvbnMscHJvcCxlbmQsZWFzaW5nKTt9Ci1qUXVlcnkuVHdlZW49VHdlZW47VHdlZW4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpUd2Vlbixpbml0OmZ1bmN0aW9uKGVsZW0sb3B0aW9ucyxwcm9wLGVuZCxlYXNpbmcsdW5pdCl7dGhpcy5lbGVtPWVsZW07dGhpcy5wcm9wPXByb3A7dGhpcy5lYXNpbmc9ZWFzaW5nfHwic3dpbmciO3RoaXMub3B0aW9ucz1vcHRpb25zO3RoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKTt0aGlzLmVuZD1lbmQ7dGhpcy51bml0PXVuaXR8fChqUXVlcnkuY3NzTnVtYmVyW3Byb3BdPyIiOiJweCIpO30sY3VyOmZ1bmN0aW9uKCl7dmFyIGhvb2tzPVR3ZWVuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBob29rcyYmaG9va3MuZ2V0P2hvb2tzLmdldCh0aGlzKTpUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpO30scnVuOmZ1bmN0aW9uKHBlcmNlbnQpe3ZhciBlYXNlZCxob29rcz1Ud2Vlbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtpZih0aGlzLm9wdGlvbnMuZHVyYXRpb24pe3RoaXMucG9zPWVhc2VkPWpRdWVyeS5lYXNpbmdbdGhpcy5lYXNpbmddKHBlcmNlbnQsdGhpcy5vcHRpb25zLmR1cmF0aW9uKnBlcmNlbnQsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7fWVsc2V7dGhpcy5wb3M9ZWFzZWQ9cGVyY2VudDt9Ci10aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqZWFzZWQrdGhpcy5zdGFydDtpZih0aGlzLm9wdGlvbnMuc3RlcCl7dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyk7fQotaWYoaG9va3MmJmhvb2tzLnNldCl7aG9va3Muc2V0KHRoaXMpO31lbHNle1R3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyk7fQotcmV0dXJuIHRoaXM7fX07VHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVR3ZWVuLnByb3RvdHlwZTtUd2Vlbi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24odHdlZW4pe3ZhciByZXN1bHQ7aWYodHdlZW4uZWxlbVt0d2Vlbi5wcm9wXSE9bnVsbCYmKCF0d2Vlbi5lbGVtLnN0eWxlfHx0d2Vlbi5lbGVtLnN0eWxlW3R3ZWVuLnByb3BdPT1udWxsKSl7cmV0dXJuIHR3ZWVuLmVsZW1bdHdlZW4ucHJvcF07fQotcmVzdWx0PWpRdWVyeS5jc3ModHdlZW4uZWxlbSx0d2Vlbi5wcm9wLCIiKTtyZXR1cm4hcmVzdWx0fHxyZXN1bHQ9PT0iYXV0byI/MDpyZXN1bHQ7fSxzZXQ6ZnVuY3Rpb24odHdlZW4pe2lmKGpRdWVyeS5meC5zdGVwW3R3ZWVuLnByb3BdKXtqUXVlcnkuZnguc3RlcFt0d2Vlbi5wcm9wXSh0d2Vlbik7fWVsc2UgaWYodHdlZW4uZWxlbS5zdHlsZSYmKHR3ZWVuLmVsZW0uc3R5bGVbalF1ZXJ5LmNzc1Byb3BzW3R3ZWVuLnByb3BdXSE9bnVsbHx8alF1ZXJ5LmNzc0hvb2tzW3R3ZWVuLnByb3BdKSl7alF1ZXJ5LnN0eWxlKHR3ZWVuLmVsZW0sdHdlZW4ucHJvcCx0d2Vlbi5ub3crdHdlZW4udW5pdCk7fWVsc2V7dHdlZW4uZWxlbVt0d2Vlbi5wcm9wXT10d2Vlbi5ub3c7fX19fTtUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wPVR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24odHdlZW4pe2lmKHR3ZWVuLmVsZW0ubm9kZVR5cGUmJnR3ZWVuLmVsZW0ucGFyZW50Tm9kZSl7dHdlZW4uZWxlbVt0d2Vlbi5wcm9wXT10d2Vlbi5ub3c7fX19O2pRdWVyeS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihwKXtyZXR1cm4gcDt9LHN3aW5nOmZ1bmN0aW9uKHApe3JldHVybiAwLjUtTWF0aC5jb3MocCpNYXRoLlBJKS8yO319O2pRdWVyeS5meD1Ud2Vlbi5wcm90b3R5cGUuaW5pdDtqUXVlcnkuZnguc3RlcD17fTt2YXIKLWZ4Tm93LHRpbWVySWQscmZ4dHlwZXM9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHJmeG51bT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrcG51bSsiKShbYS16JV0qKSQiLCJpIikscnJ1bj0vcXVldWVIb29rcyQvLGFuaW1hdGlvblByZWZpbHRlcnM9W2RlZmF1bHRQcmVmaWx0ZXJdLHR3ZWVuZXJzPXsiKiI6W2Z1bmN0aW9uKHByb3AsdmFsdWUpe3ZhciB0d2Vlbj10aGlzLmNyZWF0ZVR3ZWVuKHByb3AsdmFsdWUpLHRhcmdldD10d2Vlbi5jdXIoKSxwYXJ0cz1yZnhudW0uZXhlYyh2YWx1ZSksdW5pdD1wYXJ0cyYmcGFydHNbM118fChqUXVlcnkuY3NzTnVtYmVyW3Byb3BdPyIiOiJweCIpLHN0YXJ0PShqUXVlcnkuY3NzTnVtYmVyW3Byb3BdfHx1bml0IT09InB4IiYmK3RhcmdldCkmJnJmeG51bS5leGVjKGpRdWVyeS5jc3ModHdlZW4uZWxlbSxwcm9wKSksc2NhbGU9MSxtYXhJdGVyYXRpb25zPTIwO2lmKHN0YXJ0JiZzdGFydFszXSE9PXVuaXQpe3VuaXQ9dW5pdHx8c3RhcnRbM107cGFydHM9cGFydHN8fFtdO3N0YXJ0PSt0YXJnZXR8fDE7ZG97c2NhbGU9c2NhbGV8fCIuNSI7c3RhcnQ9c3RhcnQvc2NhbGU7alF1ZXJ5LnN0eWxlKHR3ZWVuLmVsZW0scHJvcCxzdGFydCt1bml0KTt9d2hpbGUoc2NhbGUhPT0oc2NhbGU9dHdlZW4uY3VyKCkvdGFyZ2V0KSYmc2NhbGUhPT0xJiYtLW1heEl0ZXJhdGlvbnMpO30KLWlmKHBhcnRzKXtzdGFydD10d2Vlbi5zdGFydD0rc3RhcnR8fCt0YXJnZXR8fDA7dHdlZW4udW5pdD11bml0O3R3ZWVuLmVuZD1wYXJ0c1sxXT9zdGFydCsocGFydHNbMV0rMSkqcGFydHNbMl06K3BhcnRzWzJdO30KLXJldHVybiB0d2Vlbjt9XX07ZnVuY3Rpb24gY3JlYXRlRnhOb3coKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZnhOb3c9dW5kZWZpbmVkO30pO3JldHVybihmeE5vdz1qUXVlcnkubm93KCkpO30KLWZ1bmN0aW9uIGdlbkZ4KHR5cGUsaW5jbHVkZVdpZHRoKXt2YXIgd2hpY2gsYXR0cnM9e2hlaWdodDp0eXBlfSxpPTA7aW5jbHVkZVdpZHRoPWluY2x1ZGVXaWR0aD8xOjA7Zm9yKDtpPDQ7aSs9Mi1pbmNsdWRlV2lkdGgpe3doaWNoPWNzc0V4cGFuZFtpXTthdHRyc1sibWFyZ2luIit3aGljaF09YXR0cnNbInBhZGRpbmciK3doaWNoXT10eXBlO30KLWlmKGluY2x1ZGVXaWR0aCl7YXR0cnMub3BhY2l0eT1hdHRycy53aWR0aD10eXBlO30KLXJldHVybiBhdHRyczt9Ci1mdW5jdGlvbiBjcmVhdGVUd2Vlbih2YWx1ZSxwcm9wLGFuaW1hdGlvbil7dmFyIHR3ZWVuLGNvbGxlY3Rpb249KHR3ZWVuZXJzW3Byb3BdfHxbXSkuY29uY2F0KHR3ZWVuZXJzWyIqIl0pLGluZGV4PTAsbGVuZ3RoPWNvbGxlY3Rpb24ubGVuZ3RoO2Zvcig7aW5kZXg8bGVuZ3RoO2luZGV4Kyspe2lmKCh0d2Vlbj1jb2xsZWN0aW9uW2luZGV4XS5jYWxsKGFuaW1hdGlvbixwcm9wLHZhbHVlKSkpe3JldHVybiB0d2Vlbjt9fX0KLWZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoZWxlbSxwcm9wcyxvcHRzKXt2YXIgcHJvcCx2YWx1ZSx0b2dnbGUsdHdlZW4saG9va3Msb2xkZmlyZSxkaXNwbGF5LGNoZWNrRGlzcGxheSxhbmltPXRoaXMsb3JpZz17fSxzdHlsZT1lbGVtLnN0eWxlLGhpZGRlbj1lbGVtLm5vZGVUeXBlJiZpc0hpZGRlbihlbGVtKSxkYXRhU2hvdz1qUXVlcnkuX2RhdGEoZWxlbSwiZnhzaG93Iik7aWYoIW9wdHMucXVldWUpe2hvb2tzPWpRdWVyeS5fcXVldWVIb29rcyhlbGVtLCJmeCIpO2lmKGhvb2tzLnVucXVldWVkPT1udWxsKXtob29rcy51bnF1ZXVlZD0wO29sZGZpcmU9aG9va3MuZW1wdHkuZmlyZTtob29rcy5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aWYoIWhvb2tzLnVucXVldWVkKXtvbGRmaXJlKCk7fX07fQotaG9va3MudW5xdWV1ZWQrKzthbmltLmFsd2F5cyhmdW5jdGlvbigpe2FuaW0uYWx3YXlzKGZ1bmN0aW9uKCl7aG9va3MudW5xdWV1ZWQtLTtpZighalF1ZXJ5LnF1ZXVlKGVsZW0sImZ4IikubGVuZ3RoKXtob29rcy5lbXB0eS5maXJlKCk7fX0pO30pO30KLWlmKGVsZW0ubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiBwcm9wc3x8IndpZHRoImluIHByb3BzKSl7b3B0cy5vdmVyZmxvdz1bc3R5bGUub3ZlcmZsb3csc3R5bGUub3ZlcmZsb3dYLHN0eWxlLm92ZXJmbG93WV07ZGlzcGxheT1qUXVlcnkuY3NzKGVsZW0sImRpc3BsYXkiKTtjaGVja0Rpc3BsYXk9ZGlzcGxheT09PSJub25lIj9qUXVlcnkuX2RhdGEoZWxlbSwib2xkZGlzcGxheSIpfHxkZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKTpkaXNwbGF5O2lmKGNoZWNrRGlzcGxheT09PSJpbmxpbmUiJiZqUXVlcnkuY3NzKGVsZW0sImZsb2F0Iik9PT0ibm9uZSIpe2lmKCFzdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGRlZmF1bHREaXNwbGF5KGVsZW0ubm9kZU5hbWUpPT09ImlubGluZSIpe3N0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI7fWVsc2V7c3R5bGUuem9vbT0xO319fQotaWYob3B0cy5vdmVyZmxvdyl7c3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7aWYoIXN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcygpKXthbmltLmFsd2F5cyhmdW5jdGlvbigpe3N0eWxlLm92ZXJmbG93PW9wdHMub3ZlcmZsb3dbMF07c3R5bGUub3ZlcmZsb3dYPW9wdHMub3ZlcmZsb3dbMV07c3R5bGUub3ZlcmZsb3dZPW9wdHMub3ZlcmZsb3dbMl07fSk7fX0KLWZvcihwcm9wIGluIHByb3BzKXt2YWx1ZT1wcm9wc1twcm9wXTtpZihyZnh0eXBlcy5leGVjKHZhbHVlKSl7ZGVsZXRlIHByb3BzW3Byb3BdO3RvZ2dsZT10b2dnbGV8fHZhbHVlPT09InRvZ2dsZSI7aWYodmFsdWU9PT0oaGlkZGVuPyJoaWRlIjoic2hvdyIpKXtpZih2YWx1ZT09PSJzaG93IiYmZGF0YVNob3cmJmRhdGFTaG93W3Byb3BdIT09dW5kZWZpbmVkKXtoaWRkZW49dHJ1ZTt9ZWxzZXtjb250aW51ZTt9fQotb3JpZ1twcm9wXT1kYXRhU2hvdyYmZGF0YVNob3dbcHJvcF18fGpRdWVyeS5zdHlsZShlbGVtLHByb3ApO31lbHNle2Rpc3BsYXk9dW5kZWZpbmVkO319Ci1pZighalF1ZXJ5LmlzRW1wdHlPYmplY3Qob3JpZykpe2lmKGRhdGFTaG93KXtpZigiaGlkZGVuImluIGRhdGFTaG93KXtoaWRkZW49ZGF0YVNob3cuaGlkZGVuO319ZWxzZXtkYXRhU2hvdz1qUXVlcnkuX2RhdGEoZWxlbSwiZnhzaG93Iix7fSk7fQotaWYodG9nZ2xlKXtkYXRhU2hvdy5oaWRkZW49IWhpZGRlbjt9Ci1pZihoaWRkZW4pe2pRdWVyeShlbGVtKS5zaG93KCk7fWVsc2V7YW5pbS5kb25lKGZ1bmN0aW9uKCl7alF1ZXJ5KGVsZW0pLmhpZGUoKTt9KTt9Ci1hbmltLmRvbmUoZnVuY3Rpb24oKXt2YXIgcHJvcDtqUXVlcnkuX3JlbW92ZURhdGEoZWxlbSwiZnhzaG93Iik7Zm9yKHByb3AgaW4gb3JpZyl7alF1ZXJ5LnN0eWxlKGVsZW0scHJvcCxvcmlnW3Byb3BdKTt9fSk7Zm9yKHByb3AgaW4gb3JpZyl7dHdlZW49Y3JlYXRlVHdlZW4oaGlkZGVuP2RhdGFTaG93W3Byb3BdOjAscHJvcCxhbmltKTtpZighKHByb3AgaW4gZGF0YVNob3cpKXtkYXRhU2hvd1twcm9wXT10d2Vlbi5zdGFydDtpZihoaWRkZW4pe3R3ZWVuLmVuZD10d2Vlbi5zdGFydDt0d2Vlbi5zdGFydD1wcm9wPT09IndpZHRoInx8cHJvcD09PSJoZWlnaHQiPzE6MDt9fX19ZWxzZSBpZigoZGlzcGxheT09PSJub25lIj9kZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKTpkaXNwbGF5KT09PSJpbmxpbmUiKXtzdHlsZS5kaXNwbGF5PWRpc3BsYXk7fX0KLWZ1bmN0aW9uIHByb3BGaWx0ZXIocHJvcHMsc3BlY2lhbEVhc2luZyl7dmFyIGluZGV4LG5hbWUsZWFzaW5nLHZhbHVlLGhvb2tzO2ZvcihpbmRleCBpbiBwcm9wcyl7bmFtZT1qUXVlcnkuY2FtZWxDYXNlKGluZGV4KTtlYXNpbmc9c3BlY2lhbEVhc2luZ1tuYW1lXTt2YWx1ZT1wcm9wc1tpbmRleF07aWYoalF1ZXJ5LmlzQXJyYXkodmFsdWUpKXtlYXNpbmc9dmFsdWVbMV07dmFsdWU9cHJvcHNbaW5kZXhdPXZhbHVlWzBdO30KLWlmKGluZGV4IT09bmFtZSl7cHJvcHNbbmFtZV09dmFsdWU7ZGVsZXRlIHByb3BzW2luZGV4XTt9Ci1ob29rcz1qUXVlcnkuY3NzSG9va3NbbmFtZV07aWYoaG9va3MmJiJleHBhbmQiaW4gaG9va3Mpe3ZhbHVlPWhvb2tzLmV4cGFuZCh2YWx1ZSk7ZGVsZXRlIHByb3BzW25hbWVdO2ZvcihpbmRleCBpbiB2YWx1ZSl7aWYoIShpbmRleCBpbiBwcm9wcykpe3Byb3BzW2luZGV4XT12YWx1ZVtpbmRleF07c3BlY2lhbEVhc2luZ1tpbmRleF09ZWFzaW5nO319fWVsc2V7c3BlY2lhbEVhc2luZ1tuYW1lXT1lYXNpbmc7fX19Ci1mdW5jdGlvbiBBbmltYXRpb24oZWxlbSxwcm9wZXJ0aWVzLG9wdGlvbnMpe3ZhciByZXN1bHQsc3RvcHBlZCxpbmRleD0wLGxlbmd0aD1hbmltYXRpb25QcmVmaWx0ZXJzLmxlbmd0aCxkZWZlcnJlZD1qUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgdGljay5lbGVtO30pLHRpY2s9ZnVuY3Rpb24oKXtpZihzdG9wcGVkKXtyZXR1cm4gZmFsc2U7fQotdmFyIGN1cnJlbnRUaW1lPWZ4Tm93fHxjcmVhdGVGeE5vdygpLHJlbWFpbmluZz1NYXRoLm1heCgwLGFuaW1hdGlvbi5zdGFydFRpbWUrYW5pbWF0aW9uLmR1cmF0aW9uLWN1cnJlbnRUaW1lKSx0ZW1wPXJlbWFpbmluZy9hbmltYXRpb24uZHVyYXRpb258fDAscGVyY2VudD0xLXRlbXAsaW5kZXg9MCxsZW5ndGg9YW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7Zm9yKDtpbmRleDxsZW5ndGg7aW5kZXgrKyl7YW5pbWF0aW9uLnR3ZWVuc1tpbmRleF0ucnVuKHBlcmNlbnQpO30KLWRlZmVycmVkLm5vdGlmeVdpdGgoZWxlbSxbYW5pbWF0aW9uLHBlcmNlbnQscmVtYWluaW5nXSk7aWYocGVyY2VudDwxJiZsZW5ndGgpe3JldHVybiByZW1haW5pbmc7fWVsc2V7ZGVmZXJyZWQucmVzb2x2ZVdpdGgoZWxlbSxbYW5pbWF0aW9uXSk7cmV0dXJuIGZhbHNlO319LGFuaW1hdGlvbj1kZWZlcnJlZC5wcm9taXNlKHtlbGVtOmVsZW0scHJvcHM6alF1ZXJ5LmV4dGVuZCh7fSxwcm9wZXJ0aWVzKSxvcHRzOmpRdWVyeS5leHRlbmQodHJ1ZSx7c3BlY2lhbEVhc2luZzp7fX0sb3B0aW9ucyksb3JpZ2luYWxQcm9wZXJ0aWVzOnByb3BlcnRpZXMsb3JpZ2luYWxPcHRpb25zOm9wdGlvbnMsc3RhcnRUaW1lOmZ4Tm93fHxjcmVhdGVGeE5vdygpLGR1cmF0aW9uOm9wdGlvbnMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKHByb3AsZW5kKXt2YXIgdHdlZW49alF1ZXJ5LlR3ZWVuKGVsZW0sYW5pbWF0aW9uLm9wdHMscHJvcCxlbmQsYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1twcm9wXXx8YW5pbWF0aW9uLm9wdHMuZWFzaW5nKTthbmltYXRpb24udHdlZW5zLnB1c2godHdlZW4pO3JldHVybiB0d2Vlbjt9LHN0b3A6ZnVuY3Rpb24oZ290b0VuZCl7dmFyIGluZGV4PTAsbGVuZ3RoPWdvdG9FbmQ/YW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg6MDtpZihzdG9wcGVkKXtyZXR1cm4gdGhpczt9Ci1zdG9wcGVkPXRydWU7Zm9yKDtpbmRleDxsZW5ndGg7aW5kZXgrKyl7YW5pbWF0aW9uLnR3ZWVuc1tpbmRleF0ucnVuKDEpO30KLWlmKGdvdG9FbmQpe2RlZmVycmVkLnJlc29sdmVXaXRoKGVsZW0sW2FuaW1hdGlvbixnb3RvRW5kXSk7fWVsc2V7ZGVmZXJyZWQucmVqZWN0V2l0aChlbGVtLFthbmltYXRpb24sZ290b0VuZF0pO30KLXJldHVybiB0aGlzO319KSxwcm9wcz1hbmltYXRpb24ucHJvcHM7cHJvcEZpbHRlcihwcm9wcyxhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2luZGV4PGxlbmd0aDtpbmRleCsrKXtyZXN1bHQ9YW5pbWF0aW9uUHJlZmlsdGVyc1tpbmRleF0uY2FsbChhbmltYXRpb24sZWxlbSxwcm9wcyxhbmltYXRpb24ub3B0cyk7aWYocmVzdWx0KXtyZXR1cm4gcmVzdWx0O319Ci1qUXVlcnkubWFwKHByb3BzLGNyZWF0ZVR3ZWVuLGFuaW1hdGlvbik7aWYoalF1ZXJ5LmlzRnVuY3Rpb24oYW5pbWF0aW9uLm9wdHMuc3RhcnQpKXthbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKGVsZW0sYW5pbWF0aW9uKTt9Ci1qUXVlcnkuZngudGltZXIoalF1ZXJ5LmV4dGVuZCh0aWNrLHtlbGVtOmVsZW0sYW5pbTphbmltYXRpb24scXVldWU6YW5pbWF0aW9uLm9wdHMucXVldWV9KSk7cmV0dXJuIGFuaW1hdGlvbi5wcm9ncmVzcyhhbmltYXRpb24ub3B0cy5wcm9ncmVzcykuZG9uZShhbmltYXRpb24ub3B0cy5kb25lLGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlKS5mYWlsKGFuaW1hdGlvbi5vcHRzLmZhaWwpLmFsd2F5cyhhbmltYXRpb24ub3B0cy5hbHdheXMpO30KLWpRdWVyeS5BbmltYXRpb249alF1ZXJ5LmV4dGVuZChBbmltYXRpb24se3R3ZWVuZXI6ZnVuY3Rpb24ocHJvcHMsY2FsbGJhY2spe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKHByb3BzKSl7Y2FsbGJhY2s9cHJvcHM7cHJvcHM9WyIqIl07fWVsc2V7cHJvcHM9cHJvcHMuc3BsaXQoIiAiKTt9Ci12YXIgcHJvcCxpbmRleD0wLGxlbmd0aD1wcm9wcy5sZW5ndGg7Zm9yKDtpbmRleDxsZW5ndGg7aW5kZXgrKyl7cHJvcD1wcm9wc1tpbmRleF07dHdlZW5lcnNbcHJvcF09dHdlZW5lcnNbcHJvcF18fFtdO3R3ZWVuZXJzW3Byb3BdLnVuc2hpZnQoY2FsbGJhY2spO319LHByZWZpbHRlcjpmdW5jdGlvbihjYWxsYmFjayxwcmVwZW5kKXtpZihwcmVwZW5kKXthbmltYXRpb25QcmVmaWx0ZXJzLnVuc2hpZnQoY2FsbGJhY2spO31lbHNle2FuaW1hdGlvblByZWZpbHRlcnMucHVzaChjYWxsYmFjayk7fX19KTtqUXVlcnkuc3BlZWQ9ZnVuY3Rpb24oc3BlZWQsZWFzaW5nLGZuKXt2YXIgb3B0PXNwZWVkJiZ0eXBlb2Ygc3BlZWQ9PT0ib2JqZWN0Ij9qUXVlcnkuZXh0ZW5kKHt9LHNwZWVkKTp7Y29tcGxldGU6Zm58fCFmbiYmZWFzaW5nfHxqUXVlcnkuaXNGdW5jdGlvbihzcGVlZCkmJnNwZWVkLGR1cmF0aW9uOnNwZWVkLGVhc2luZzpmbiYmZWFzaW5nfHxlYXNpbmcmJiFqUXVlcnkuaXNGdW5jdGlvbihlYXNpbmcpJiZlYXNpbmd9O29wdC5kdXJhdGlvbj1qUXVlcnkuZngub2ZmPzA6dHlwZW9mIG9wdC5kdXJhdGlvbj09PSJudW1iZXIiP29wdC5kdXJhdGlvbjpvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcz9qUXVlcnkuZnguc3BlZWRzW29wdC5kdXJhdGlvbl06alF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtpZihvcHQucXVldWU9PW51bGx8fG9wdC5xdWV1ZT09PXRydWUpe29wdC5xdWV1ZT0iZngiO30KLW9wdC5vbGQ9b3B0LmNvbXBsZXRlO29wdC5jb21wbGV0ZT1mdW5jdGlvbigpe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKG9wdC5vbGQpKXtvcHQub2xkLmNhbGwodGhpcyk7fQotaWYob3B0LnF1ZXVlKXtqUXVlcnkuZGVxdWV1ZSh0aGlzLG9wdC5xdWV1ZSk7fX07cmV0dXJuIG9wdDt9O2pRdWVyeS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihzcGVlZCx0byxlYXNpbmcsY2FsbGJhY2spe3JldHVybiB0aGlzLmZpbHRlcihpc0hpZGRlbikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0b30sc3BlZWQsZWFzaW5nLGNhbGxiYWNrKTt9LGFuaW1hdGU6ZnVuY3Rpb24ocHJvcCxzcGVlZCxlYXNpbmcsY2FsbGJhY2spe3ZhciBlbXB0eT1qUXVlcnkuaXNFbXB0eU9iamVjdChwcm9wKSxvcHRhbGw9alF1ZXJ5LnNwZWVkKHNwZWVkLGVhc2luZyxjYWxsYmFjayksZG9BbmltYXRpb249ZnVuY3Rpb24oKXt2YXIgYW5pbT1BbmltYXRpb24odGhpcyxqUXVlcnkuZXh0ZW5kKHt9LHByb3ApLG9wdGFsbCk7aWYoZW1wdHl8fGpRdWVyeS5fZGF0YSh0aGlzLCJmaW5pc2giKSl7YW5pbS5zdG9wKHRydWUpO319O2RvQW5pbWF0aW9uLmZpbmlzaD1kb0FuaW1hdGlvbjtyZXR1cm4gZW1wdHl8fG9wdGFsbC5xdWV1ZT09PWZhbHNlP3RoaXMuZWFjaChkb0FuaW1hdGlvbik6dGhpcy5xdWV1ZShvcHRhbGwucXVldWUsZG9BbmltYXRpb24pO30sc3RvcDpmdW5jdGlvbih0eXBlLGNsZWFyUXVldWUsZ290b0VuZCl7dmFyIHN0b3BRdWV1ZT1mdW5jdGlvbihob29rcyl7dmFyIHN0b3A9aG9va3Muc3RvcDtkZWxldGUgaG9va3Muc3RvcDtzdG9wKGdvdG9FbmQpO307aWYodHlwZW9mIHR5cGUhPT0ic3RyaW5nIil7Z290b0VuZD1jbGVhclF1ZXVlO2NsZWFyUXVldWU9dHlwZTt0eXBlPXVuZGVmaW5lZDt9Ci1pZihjbGVhclF1ZXVlJiZ0eXBlIT09ZmFsc2Upe3RoaXMucXVldWUodHlwZXx8ImZ4IixbXSk7fQotcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkZXF1ZXVlPXRydWUsaW5kZXg9dHlwZSE9bnVsbCYmdHlwZSsicXVldWVIb29rcyIsdGltZXJzPWpRdWVyeS50aW1lcnMsZGF0YT1qUXVlcnkuX2RhdGEodGhpcyk7aWYoaW5kZXgpe2lmKGRhdGFbaW5kZXhdJiZkYXRhW2luZGV4XS5zdG9wKXtzdG9wUXVldWUoZGF0YVtpbmRleF0pO319ZWxzZXtmb3IoaW5kZXggaW4gZGF0YSl7aWYoZGF0YVtpbmRleF0mJmRhdGFbaW5kZXhdLnN0b3AmJnJydW4udGVzdChpbmRleCkpe3N0b3BRdWV1ZShkYXRhW2luZGV4XSk7fX19Ci1mb3IoaW5kZXg9dGltZXJzLmxlbmd0aDtpbmRleC0tOyl7aWYodGltZXJzW2luZGV4XS5lbGVtPT09dGhpcyYmKHR5cGU9PW51bGx8fHRpbWVyc1tpbmRleF0ucXVldWU9PT10eXBlKSl7dGltZXJzW2luZGV4XS5hbmltLnN0b3AoZ290b0VuZCk7ZGVxdWV1ZT1mYWxzZTt0aW1lcnMuc3BsaWNlKGluZGV4LDEpO319Ci1pZihkZXF1ZXVlfHwhZ290b0VuZCl7alF1ZXJ5LmRlcXVldWUodGhpcyx0eXBlKTt9fSk7fSxmaW5pc2g6ZnVuY3Rpb24odHlwZSl7aWYodHlwZSE9PWZhbHNlKXt0eXBlPXR5cGV8fCJmeCI7fQotcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpbmRleCxkYXRhPWpRdWVyeS5fZGF0YSh0aGlzKSxxdWV1ZT1kYXRhW3R5cGUrInF1ZXVlIl0saG9va3M9ZGF0YVt0eXBlKyJxdWV1ZUhvb2tzIl0sdGltZXJzPWpRdWVyeS50aW1lcnMsbGVuZ3RoPXF1ZXVlP3F1ZXVlLmxlbmd0aDowO2RhdGEuZmluaXNoPXRydWU7alF1ZXJ5LnF1ZXVlKHRoaXMsdHlwZSxbXSk7aWYoaG9va3MmJmhvb2tzLnN0b3Ape2hvb2tzLnN0b3AuY2FsbCh0aGlzLHRydWUpO30KLWZvcihpbmRleD10aW1lcnMubGVuZ3RoO2luZGV4LS07KXtpZih0aW1lcnNbaW5kZXhdLmVsZW09PT10aGlzJiZ0aW1lcnNbaW5kZXhdLnF1ZXVlPT09dHlwZSl7dGltZXJzW2luZGV4XS5hbmltLnN0b3AodHJ1ZSk7dGltZXJzLnNwbGljZShpbmRleCwxKTt9fQotZm9yKGluZGV4PTA7aW5kZXg8bGVuZ3RoO2luZGV4Kyspe2lmKHF1ZXVlW2luZGV4XSYmcXVldWVbaW5kZXhdLmZpbmlzaCl7cXVldWVbaW5kZXhdLmZpbmlzaC5jYWxsKHRoaXMpO319Ci1kZWxldGUgZGF0YS5maW5pc2g7fSk7fX0pO2pRdWVyeS5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihpLG5hbWUpe3ZhciBjc3NGbj1qUXVlcnkuZm5bbmFtZV07alF1ZXJ5LmZuW25hbWVdPWZ1bmN0aW9uKHNwZWVkLGVhc2luZyxjYWxsYmFjayl7cmV0dXJuIHNwZWVkPT1udWxsfHx0eXBlb2Ygc3BlZWQ9PT0iYm9vbGVhbiI/Y3NzRm4uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShnZW5GeChuYW1lLHRydWUpLHNwZWVkLGVhc2luZyxjYWxsYmFjayk7fTt9KTtqUXVlcnkuZWFjaCh7c2xpZGVEb3duOmdlbkZ4KCJzaG93Iiksc2xpZGVVcDpnZW5GeCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmdlbkZ4KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKG5hbWUscHJvcHMpe2pRdWVyeS5mbltuYW1lXT1mdW5jdGlvbihzcGVlZCxlYXNpbmcsY2FsbGJhY2spe3JldHVybiB0aGlzLmFuaW1hdGUocHJvcHMsc3BlZWQsZWFzaW5nLGNhbGxiYWNrKTt9O30pO2pRdWVyeS50aW1lcnM9W107alF1ZXJ5LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgdGltZXIsdGltZXJzPWpRdWVyeS50aW1lcnMsaT0wO2Z4Tm93PWpRdWVyeS5ub3coKTtmb3IoO2k8dGltZXJzLmxlbmd0aDtpKyspe3RpbWVyPXRpbWVyc1tpXTtpZighdGltZXIoKSYmdGltZXJzW2ldPT09dGltZXIpe3RpbWVycy5zcGxpY2UoaS0tLDEpO319Ci1pZighdGltZXJzLmxlbmd0aCl7alF1ZXJ5LmZ4LnN0b3AoKTt9Ci1meE5vdz11bmRlZmluZWQ7fTtqUXVlcnkuZngudGltZXI9ZnVuY3Rpb24odGltZXIpe2pRdWVyeS50aW1lcnMucHVzaCh0aW1lcik7aWYodGltZXIoKSl7alF1ZXJ5LmZ4LnN0YXJ0KCk7fWVsc2V7alF1ZXJ5LnRpbWVycy5wb3AoKTt9fTtqUXVlcnkuZnguaW50ZXJ2YWw9MTM7alF1ZXJ5LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7aWYoIXRpbWVySWQpe3RpbWVySWQ9c2V0SW50ZXJ2YWwoalF1ZXJ5LmZ4LnRpY2ssalF1ZXJ5LmZ4LmludGVydmFsKTt9fTtqUXVlcnkuZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGltZXJJZCk7dGltZXJJZD1udWxsO307alF1ZXJ5LmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfTtqUXVlcnkuZm4uZGVsYXk9ZnVuY3Rpb24odGltZSx0eXBlKXt0aW1lPWpRdWVyeS5meD9qUXVlcnkuZnguc3BlZWRzW3RpbWVdfHx0aW1lOnRpbWU7dHlwZT10eXBlfHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKHR5cGUsZnVuY3Rpb24obmV4dCxob29rcyl7dmFyIHRpbWVvdXQ9c2V0VGltZW91dChuZXh0LHRpbWUpO2hvb2tzLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGltZW91dCk7fTt9KTt9OyhmdW5jdGlvbigpe3ZhciBpbnB1dCxkaXYsc2VsZWN0LGEsb3B0O2Rpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkaXYuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0Iik7ZGl2LmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IjthPWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdO3NlbGVjdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTtvcHQ9c2VsZWN0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtpbnB1dD1kaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF07YS5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4IjtzdXBwb3J0LmdldFNldEF0dHJpYnV0ZT1kaXYuY2xhc3NOYW1lIT09InQiO3N1cHBvcnQuc3R5bGU9L3RvcC8udGVzdChhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSk7c3VwcG9ydC5ocmVmTm9ybWFsaXplZD1hLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIjtzdXBwb3J0LmNoZWNrT249ISFpbnB1dC52YWx1ZTtzdXBwb3J0Lm9wdFNlbGVjdGVkPW9wdC5zZWxlY3RlZDtzdXBwb3J0LmVuY3R5cGU9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZTtzZWxlY3QuZGlzYWJsZWQ9dHJ1ZTtzdXBwb3J0Lm9wdERpc2FibGVkPSFvcHQuZGlzYWJsZWQ7aW5wdXQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtpbnB1dC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIik7c3VwcG9ydC5pbnB1dD1pbnB1dC5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT0iIjtpbnB1dC52YWx1ZT0idCI7aW5wdXQuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKTtzdXBwb3J0LnJhZGlvVmFsdWU9aW5wdXQudmFsdWU9PT0idCI7fSkoKTt2YXIgcnJldHVybj0vXHIvZztqUXVlcnkuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24odmFsdWUpe3ZhciBob29rcyxyZXQsaXNGdW5jdGlvbixlbGVtPXRoaXNbMF07aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2lmKGVsZW0pe2hvb2tzPWpRdWVyeS52YWxIb29rc1tlbGVtLnR5cGVdfHxqUXVlcnkudmFsSG9va3NbZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihob29rcyYmImdldCJpbiBob29rcyYmKHJldD1ob29rcy5nZXQoZWxlbSwidmFsdWUiKSkhPT11bmRlZmluZWQpe3JldHVybiByZXQ7fQotcmV0PWVsZW0udmFsdWU7cmV0dXJuIHR5cGVvZiByZXQ9PT0ic3RyaW5nIj9yZXQucmVwbGFjZShycmV0dXJuLCIiKTpyZXQ9PW51bGw/IiI6cmV0O30KLXJldHVybjt9Ci1pc0Z1bmN0aW9uPWpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe3ZhciB2YWw7aWYodGhpcy5ub2RlVHlwZSE9PTEpe3JldHVybjt9Ci1pZihpc0Z1bmN0aW9uKXt2YWw9dmFsdWUuY2FsbCh0aGlzLGksalF1ZXJ5KHRoaXMpLnZhbCgpKTt9ZWxzZXt2YWw9dmFsdWU7fQotaWYodmFsPT1udWxsKXt2YWw9IiI7fWVsc2UgaWYodHlwZW9mIHZhbD09PSJudW1iZXIiKXt2YWwrPSIiO31lbHNlIGlmKGpRdWVyeS5pc0FycmF5KHZhbCkpe3ZhbD1qUXVlcnkubWFwKHZhbCxmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlPT1udWxsPyIiOnZhbHVlKyIiO30pO30KLWhvb2tzPWpRdWVyeS52YWxIb29rc1t0aGlzLnR5cGVdfHxqUXVlcnkudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZighaG9va3N8fCEoInNldCJpbiBob29rcyl8fGhvb2tzLnNldCh0aGlzLHZhbCwidmFsdWUiKT09PXVuZGVmaW5lZCl7dGhpcy52YWx1ZT12YWw7fX0pO319KTtqUXVlcnkuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZWxlbSl7dmFyIHZhbD1qUXVlcnkuZmluZC5hdHRyKGVsZW0sInZhbHVlIik7cmV0dXJuIHZhbCE9bnVsbD92YWw6alF1ZXJ5LnRyaW0oalF1ZXJ5LnRleHQoZWxlbSkpO319LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGVsZW0pe3ZhciB2YWx1ZSxvcHRpb24sb3B0aW9ucz1lbGVtLm9wdGlvbnMsaW5kZXg9ZWxlbS5zZWxlY3RlZEluZGV4LG9uZT1lbGVtLnR5cGU9PT0ic2VsZWN0LW9uZSJ8fGluZGV4PDAsdmFsdWVzPW9uZT9udWxsOltdLG1heD1vbmU/aW5kZXgrMTpvcHRpb25zLmxlbmd0aCxpPWluZGV4PDA/bWF4Om9uZT9pbmRleDowO2Zvcig7aTxtYXg7aSsrKXtvcHRpb249b3B0aW9uc1tpXTtpZigob3B0aW9uLnNlbGVjdGVkfHxpPT09aW5kZXgpJiYoc3VwcG9ydC5vcHREaXNhYmxlZD8hb3B0aW9uLmRpc2FibGVkOm9wdGlvbi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWpRdWVyeS5ub2RlTmFtZShvcHRpb24ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe3ZhbHVlPWpRdWVyeShvcHRpb24pLnZhbCgpO2lmKG9uZSl7cmV0dXJuIHZhbHVlO30KLXZhbHVlcy5wdXNoKHZhbHVlKTt9fQotcmV0dXJuIHZhbHVlczt9LHNldDpmdW5jdGlvbihlbGVtLHZhbHVlKXt2YXIgb3B0aW9uU2V0LG9wdGlvbixvcHRpb25zPWVsZW0ub3B0aW9ucyx2YWx1ZXM9alF1ZXJ5Lm1ha2VBcnJheSh2YWx1ZSksaT1vcHRpb25zLmxlbmd0aDt3aGlsZShpLS0pe29wdGlvbj1vcHRpb25zW2ldO2lmKGpRdWVyeS5pbkFycmF5KGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KG9wdGlvbiksdmFsdWVzKT49MCl7dHJ5e29wdGlvbi5zZWxlY3RlZD1vcHRpb25TZXQ9dHJ1ZTt9Y2F0Y2goXyl7b3B0aW9uLnNjcm9sbEhlaWdodDt9fWVsc2V7b3B0aW9uLnNlbGVjdGVkPWZhbHNlO319Ci1pZighb3B0aW9uU2V0KXtlbGVtLnNlbGVjdGVkSW5kZXg9LTE7fQotcmV0dXJuIG9wdGlvbnM7fX19fSk7alF1ZXJ5LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtqUXVlcnkudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlbGVtLHZhbHVlKXtpZihqUXVlcnkuaXNBcnJheSh2YWx1ZSkpe3JldHVybihlbGVtLmNoZWNrZWQ9alF1ZXJ5LmluQXJyYXkoalF1ZXJ5KGVsZW0pLnZhbCgpLHZhbHVlKT49MCk7fX19O2lmKCFzdXBwb3J0LmNoZWNrT24pe2pRdWVyeS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oZWxlbSl7cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmVsZW0udmFsdWU7fTt9fSk7dmFyIG5vZGVIb29rLGJvb2xIb29rLGF0dHJIYW5kbGU9alF1ZXJ5LmV4cHIuYXR0ckhhbmRsZSxydXNlRGVmYXVsdD0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLGdldFNldEF0dHJpYnV0ZT1zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSxnZXRTZXRJbnB1dD1zdXBwb3J0LmlucHV0O2pRdWVyeS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24obmFtZSx2YWx1ZSl7cmV0dXJuIGFjY2Vzcyh0aGlzLGpRdWVyeS5hdHRyLG5hbWUsdmFsdWUsYXJndW1lbnRzLmxlbmd0aD4xKTt9LHJlbW92ZUF0dHI6ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2pRdWVyeS5yZW1vdmVBdHRyKHRoaXMsbmFtZSk7fSk7fX0pO2pRdWVyeS5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZWxlbSxuYW1lLHZhbHVlKXt2YXIgaG9va3MscmV0LG5UeXBlPWVsZW0ubm9kZVR5cGU7aWYoIWVsZW18fG5UeXBlPT09M3x8blR5cGU9PT04fHxuVHlwZT09PTIpe3JldHVybjt9Ci1pZih0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGU9PT1zdHJ1bmRlZmluZWQpe3JldHVybiBqUXVlcnkucHJvcChlbGVtLG5hbWUsdmFsdWUpO30KLWlmKG5UeXBlIT09MXx8IWpRdWVyeS5pc1hNTERvYyhlbGVtKSl7bmFtZT1uYW1lLnRvTG93ZXJDYXNlKCk7aG9va3M9alF1ZXJ5LmF0dHJIb29rc1tuYW1lXXx8KGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdChuYW1lKT9ib29sSG9vazpub2RlSG9vayk7fQotaWYodmFsdWUhPT11bmRlZmluZWQpe2lmKHZhbHVlPT09bnVsbCl7alF1ZXJ5LnJlbW92ZUF0dHIoZWxlbSxuYW1lKTt9ZWxzZSBpZihob29rcyYmInNldCJpbiBob29rcyYmKHJldD1ob29rcy5zZXQoZWxlbSx2YWx1ZSxuYW1lKSkhPT11bmRlZmluZWQpe3JldHVybiByZXQ7fWVsc2V7ZWxlbS5zZXRBdHRyaWJ1dGUobmFtZSx2YWx1ZSsiIik7cmV0dXJuIHZhbHVlO319ZWxzZSBpZihob29rcyYmImdldCJpbiBob29rcyYmKHJldD1ob29rcy5nZXQoZWxlbSxuYW1lKSkhPT1udWxsKXtyZXR1cm4gcmV0O31lbHNle3JldD1qUXVlcnkuZmluZC5hdHRyKGVsZW0sbmFtZSk7cmV0dXJuIHJldD09bnVsbD91bmRlZmluZWQ6cmV0O319LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZWxlbSx2YWx1ZSl7dmFyIG5hbWUscHJvcE5hbWUsaT0wLGF0dHJOYW1lcz12YWx1ZSYmdmFsdWUubWF0Y2gocm5vdHdoaXRlKTtpZihhdHRyTmFtZXMmJmVsZW0ubm9kZVR5cGU9PT0xKXt3aGlsZSgobmFtZT1hdHRyTmFtZXNbaSsrXSkpe3Byb3BOYW1lPWpRdWVyeS5wcm9wRml4W25hbWVdfHxuYW1lO2lmKGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdChuYW1lKSl7aWYoZ2V0U2V0SW5wdXQmJmdldFNldEF0dHJpYnV0ZXx8IXJ1c2VEZWZhdWx0LnRlc3QobmFtZSkpe2VsZW1bcHJvcE5hbWVdPWZhbHNlO31lbHNle2VsZW1balF1ZXJ5LmNhbWVsQ2FzZSgiZGVmYXVsdC0iK25hbWUpXT1lbGVtW3Byb3BOYW1lXT1mYWxzZTt9fWVsc2V7alF1ZXJ5LmF0dHIoZWxlbSxuYW1lLCIiKTt9Ci1lbGVtLnJlbW92ZUF0dHJpYnV0ZShnZXRTZXRBdHRyaWJ1dGU/bmFtZTpwcm9wTmFtZSk7fX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGVsZW0sdmFsdWUpe2lmKCFzdXBwb3J0LnJhZGlvVmFsdWUmJnZhbHVlPT09InJhZGlvIiYmalF1ZXJ5Lm5vZGVOYW1lKGVsZW0sImlucHV0Iikpe3ZhciB2YWw9ZWxlbS52YWx1ZTtlbGVtLnNldEF0dHJpYnV0ZSgidHlwZSIsdmFsdWUpO2lmKHZhbCl7ZWxlbS52YWx1ZT12YWw7fQotcmV0dXJuIHZhbHVlO319fX19KTtib29sSG9vaz17c2V0OmZ1bmN0aW9uKGVsZW0sdmFsdWUsbmFtZSl7aWYodmFsdWU9PT1mYWxzZSl7alF1ZXJ5LnJlbW92ZUF0dHIoZWxlbSxuYW1lKTt9ZWxzZSBpZihnZXRTZXRJbnB1dCYmZ2V0U2V0QXR0cmlidXRlfHwhcnVzZURlZmF1bHQudGVzdChuYW1lKSl7ZWxlbS5zZXRBdHRyaWJ1dGUoIWdldFNldEF0dHJpYnV0ZSYmalF1ZXJ5LnByb3BGaXhbbmFtZV18fG5hbWUsbmFtZSk7fWVsc2V7ZWxlbVtqUXVlcnkuY2FtZWxDYXNlKCJkZWZhdWx0LSIrbmFtZSldPWVsZW1bbmFtZV09dHJ1ZTt9Ci1yZXR1cm4gbmFtZTt9fTtqUXVlcnkuZWFjaChqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGksbmFtZSl7dmFyIGdldHRlcj1hdHRySGFuZGxlW25hbWVdfHxqUXVlcnkuZmluZC5hdHRyO2F0dHJIYW5kbGVbbmFtZV09Z2V0U2V0SW5wdXQmJmdldFNldEF0dHJpYnV0ZXx8IXJ1c2VEZWZhdWx0LnRlc3QobmFtZSk/ZnVuY3Rpb24oZWxlbSxuYW1lLGlzWE1MKXt2YXIgcmV0LGhhbmRsZTtpZighaXNYTUwpe2hhbmRsZT1hdHRySGFuZGxlW25hbWVdO2F0dHJIYW5kbGVbbmFtZV09cmV0O3JldD1nZXR0ZXIoZWxlbSxuYW1lLGlzWE1MKSE9bnVsbD9uYW1lLnRvTG93ZXJDYXNlKCk6bnVsbDthdHRySGFuZGxlW25hbWVdPWhhbmRsZTt9Ci1yZXR1cm4gcmV0O306ZnVuY3Rpb24oZWxlbSxuYW1lLGlzWE1MKXtpZighaXNYTUwpe3JldHVybiBlbGVtW2pRdWVyeS5jYW1lbENhc2UoImRlZmF1bHQtIituYW1lKV0/bmFtZS50b0xvd2VyQ2FzZSgpOm51bGw7fX07fSk7aWYoIWdldFNldElucHV0fHwhZ2V0U2V0QXR0cmlidXRlKXtqUXVlcnkuYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oZWxlbSx2YWx1ZSxuYW1lKXtpZihqUXVlcnkubm9kZU5hbWUoZWxlbSwiaW5wdXQiKSl7ZWxlbS5kZWZhdWx0VmFsdWU9dmFsdWU7fWVsc2V7cmV0dXJuIG5vZGVIb29rJiZub2RlSG9vay5zZXQoZWxlbSx2YWx1ZSxuYW1lKTt9fX07fQotaWYoIWdldFNldEF0dHJpYnV0ZSl7bm9kZUhvb2s9e3NldDpmdW5jdGlvbihlbGVtLHZhbHVlLG5hbWUpe3ZhciByZXQ9ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO2lmKCFyZXQpe2VsZW0uc2V0QXR0cmlidXRlTm9kZSgocmV0PWVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUobmFtZSkpKTt9Ci1yZXQudmFsdWU9dmFsdWUrPSIiO2lmKG5hbWU9PT0idmFsdWUifHx2YWx1ZT09PWVsZW0uZ2V0QXR0cmlidXRlKG5hbWUpKXtyZXR1cm4gdmFsdWU7fX19O2F0dHJIYW5kbGUuaWQ9YXR0ckhhbmRsZS5uYW1lPWF0dHJIYW5kbGUuY29vcmRzPWZ1bmN0aW9uKGVsZW0sbmFtZSxpc1hNTCl7dmFyIHJldDtpZighaXNYTUwpe3JldHVybihyZXQ9ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpKSYmcmV0LnZhbHVlIT09IiI/cmV0LnZhbHVlOm51bGw7fX07alF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGVsZW0sbmFtZSl7dmFyIHJldD1lbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7aWYocmV0JiZyZXQuc3BlY2lmaWVkKXtyZXR1cm4gcmV0LnZhbHVlO319LHNldDpub2RlSG9vay5zZXR9O2pRdWVyeS5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtzZXQ6ZnVuY3Rpb24oZWxlbSx2YWx1ZSxuYW1lKXtub2RlSG9vay5zZXQoZWxlbSx2YWx1ZT09PSIiP2ZhbHNlOnZhbHVlLG5hbWUpO319O2pRdWVyeS5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihpLG5hbWUpe2pRdWVyeS5hdHRySG9va3NbbmFtZV09e3NldDpmdW5jdGlvbihlbGVtLHZhbHVlKXtpZih2YWx1ZT09PSIiKXtlbGVtLnNldEF0dHJpYnV0ZShuYW1lLCJhdXRvIik7cmV0dXJuIHZhbHVlO319fTt9KTt9Ci1pZighc3VwcG9ydC5zdHlsZSl7alF1ZXJ5LmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLnN0eWxlLmNzc1RleHR8fHVuZGVmaW5lZDt9LHNldDpmdW5jdGlvbihlbGVtLHZhbHVlKXtyZXR1cm4oZWxlbS5zdHlsZS5jc3NUZXh0PXZhbHVlKyIiKTt9fTt9Ci12YXIgcmZvY3VzYWJsZT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSxyY2xpY2thYmxlPS9eKD86YXxhcmVhKSQvaTtqUXVlcnkuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKG5hbWUsdmFsdWUpe3JldHVybiBhY2Nlc3ModGhpcyxqUXVlcnkucHJvcCxuYW1lLHZhbHVlLGFyZ3VtZW50cy5sZW5ndGg+MSk7fSxyZW1vdmVQcm9wOmZ1bmN0aW9uKG5hbWUpe25hbWU9alF1ZXJ5LnByb3BGaXhbbmFtZV18fG5hbWU7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW25hbWVdPXVuZGVmaW5lZDtkZWxldGUgdGhpc1tuYW1lXTt9Y2F0Y2goZSl7fX0pO319KTtqUXVlcnkuZXh0ZW5kKHtwcm9wRml4OnsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIn0scHJvcDpmdW5jdGlvbihlbGVtLG5hbWUsdmFsdWUpe3ZhciByZXQsaG9va3Msbm90eG1sLG5UeXBlPWVsZW0ubm9kZVR5cGU7aWYoIWVsZW18fG5UeXBlPT09M3x8blR5cGU9PT04fHxuVHlwZT09PTIpe3JldHVybjt9Ci1ub3R4bWw9blR5cGUhPT0xfHwhalF1ZXJ5LmlzWE1MRG9jKGVsZW0pO2lmKG5vdHhtbCl7bmFtZT1qUXVlcnkucHJvcEZpeFtuYW1lXXx8bmFtZTtob29rcz1qUXVlcnkucHJvcEhvb2tzW25hbWVdO30KLWlmKHZhbHVlIT09dW5kZWZpbmVkKXtyZXR1cm4gaG9va3MmJiJzZXQiaW4gaG9va3MmJihyZXQ9aG9va3Muc2V0KGVsZW0sdmFsdWUsbmFtZSkpIT09dW5kZWZpbmVkP3JldDooZWxlbVtuYW1lXT12YWx1ZSk7fWVsc2V7cmV0dXJuIGhvb2tzJiYiZ2V0ImluIGhvb2tzJiYocmV0PWhvb2tzLmdldChlbGVtLG5hbWUpKSE9PW51bGw/cmV0OmVsZW1bbmFtZV07fX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGVsZW0pe3ZhciB0YWJpbmRleD1qUXVlcnkuZmluZC5hdHRyKGVsZW0sInRhYmluZGV4Iik7cmV0dXJuIHRhYmluZGV4P3BhcnNlSW50KHRhYmluZGV4LDEwKTpyZm9jdXNhYmxlLnRlc3QoZWxlbS5ub2RlTmFtZSl8fHJjbGlja2FibGUudGVzdChlbGVtLm5vZGVOYW1lKSYmZWxlbS5ocmVmPzA6LTE7fX19fSk7aWYoIXN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQpe2pRdWVyeS5lYWNoKFsiaHJlZiIsInNyYyJdLGZ1bmN0aW9uKGksbmFtZSl7alF1ZXJ5LnByb3BIb29rc1tuYW1lXT17Z2V0OmZ1bmN0aW9uKGVsZW0pe3JldHVybiBlbGVtLmdldEF0dHJpYnV0ZShuYW1lLDQpO319O30pO30KLWlmKCFzdXBwb3J0Lm9wdFNlbGVjdGVkKXtqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZWxlbSl7dmFyIHBhcmVudD1lbGVtLnBhcmVudE5vZGU7aWYocGFyZW50KXtwYXJlbnQuc2VsZWN0ZWRJbmRleDtpZihwYXJlbnQucGFyZW50Tm9kZSl7cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDt9fQotcmV0dXJuIG51bGw7fX07fQotalF1ZXJ5LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe2pRdWVyeS5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpczt9KTtpZighc3VwcG9ydC5lbmN0eXBlKXtqUXVlcnkucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyI7fQotdmFyIHJjbGFzcz0vW1x0XHJcblxmXS9nO2pRdWVyeS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHZhbHVlKXt2YXIgY2xhc3NlcyxlbGVtLGN1cixjbGF6eixqLGZpbmFsVmFsdWUsaT0wLGxlbj10aGlzLmxlbmd0aCxwcm9jZWVkPXR5cGVvZiB2YWx1ZT09PSJzdHJpbmciJiZ2YWx1ZTtpZihqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oail7alF1ZXJ5KHRoaXMpLmFkZENsYXNzKHZhbHVlLmNhbGwodGhpcyxqLHRoaXMuY2xhc3NOYW1lKSk7fSk7fQotaWYocHJvY2VlZCl7Y2xhc3Nlcz0odmFsdWV8fCIiKS5tYXRjaChybm90d2hpdGUpfHxbXTtmb3IoO2k8bGVuO2krKyl7ZWxlbT10aGlzW2ldO2N1cj1lbGVtLm5vZGVUeXBlPT09MSYmKGVsZW0uY2xhc3NOYW1lPygiICIrZWxlbS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHJjbGFzcywiICIpOiIgIik7aWYoY3VyKXtqPTA7d2hpbGUoKGNsYXp6PWNsYXNzZXNbaisrXSkpe2lmKGN1ci5pbmRleE9mKCIgIitjbGF6eisiICIpPDApe2N1cis9Y2xhenorIiAiO319Ci1maW5hbFZhbHVlPWpRdWVyeS50cmltKGN1cik7aWYoZWxlbS5jbGFzc05hbWUhPT1maW5hbFZhbHVlKXtlbGVtLmNsYXNzTmFtZT1maW5hbFZhbHVlO319fX0KLXJldHVybiB0aGlzO30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odmFsdWUpe3ZhciBjbGFzc2VzLGVsZW0sY3VyLGNsYXp6LGosZmluYWxWYWx1ZSxpPTAsbGVuPXRoaXMubGVuZ3RoLHByb2NlZWQ9YXJndW1lbnRzLmxlbmd0aD09PTB8fHR5cGVvZiB2YWx1ZT09PSJzdHJpbmciJiZ2YWx1ZTtpZihqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oail7alF1ZXJ5KHRoaXMpLnJlbW92ZUNsYXNzKHZhbHVlLmNhbGwodGhpcyxqLHRoaXMuY2xhc3NOYW1lKSk7fSk7fQotaWYocHJvY2VlZCl7Y2xhc3Nlcz0odmFsdWV8fCIiKS5tYXRjaChybm90d2hpdGUpfHxbXTtmb3IoO2k8bGVuO2krKyl7ZWxlbT10aGlzW2ldO2N1cj1lbGVtLm5vZGVUeXBlPT09MSYmKGVsZW0uY2xhc3NOYW1lPygiICIrZWxlbS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHJjbGFzcywiICIpOiIiKTtpZihjdXIpe2o9MDt3aGlsZSgoY2xheno9Y2xhc3Nlc1tqKytdKSl7d2hpbGUoY3VyLmluZGV4T2YoIiAiK2NsYXp6KyIgIik+PTApe2N1cj1jdXIucmVwbGFjZSgiICIrY2xhenorIiAiLCIgIik7fX0KLWZpbmFsVmFsdWU9dmFsdWU/alF1ZXJ5LnRyaW0oY3VyKToiIjtpZihlbGVtLmNsYXNzTmFtZSE9PWZpbmFsVmFsdWUpe2VsZW0uY2xhc3NOYW1lPWZpbmFsVmFsdWU7fX19fQotcmV0dXJuIHRoaXM7fSx0b2dnbGVDbGFzczpmdW5jdGlvbih2YWx1ZSxzdGF0ZVZhbCl7dmFyIHR5cGU9dHlwZW9mIHZhbHVlO2lmKHR5cGVvZiBzdGF0ZVZhbD09PSJib29sZWFuIiYmdHlwZT09PSJzdHJpbmciKXtyZXR1cm4gc3RhdGVWYWw/dGhpcy5hZGRDbGFzcyh2YWx1ZSk6dGhpcy5yZW1vdmVDbGFzcyh2YWx1ZSk7fQotaWYoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2pRdWVyeSh0aGlzKS50b2dnbGVDbGFzcyh2YWx1ZS5jYWxsKHRoaXMsaSx0aGlzLmNsYXNzTmFtZSxzdGF0ZVZhbCksc3RhdGVWYWwpO30pO30KLXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZih0eXBlPT09InN0cmluZyIpe3ZhciBjbGFzc05hbWUsaT0wLHNlbGY9alF1ZXJ5KHRoaXMpLGNsYXNzTmFtZXM9dmFsdWUubWF0Y2gocm5vdHdoaXRlKXx8W107d2hpbGUoKGNsYXNzTmFtZT1jbGFzc05hbWVzW2krK10pKXtpZihzZWxmLmhhc0NsYXNzKGNsYXNzTmFtZSkpe3NlbGYucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTt9ZWxzZXtzZWxmLmFkZENsYXNzKGNsYXNzTmFtZSk7fX19ZWxzZSBpZih0eXBlPT09c3RydW5kZWZpbmVkfHx0eXBlPT09ImJvb2xlYW4iKXtpZih0aGlzLmNsYXNzTmFtZSl7alF1ZXJ5Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKTt9Ci10aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8dmFsdWU9PT1mYWxzZT8iIjpqUXVlcnkuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIjt9fSk7fSxoYXNDbGFzczpmdW5jdGlvbihzZWxlY3Rvcil7dmFyIGNsYXNzTmFtZT0iICIrc2VsZWN0b3IrIiAiLGk9MCxsPXRoaXMubGVuZ3RoO2Zvcig7aTxsO2krKyl7aWYodGhpc1tpXS5ub2RlVHlwZT09PTEmJigiICIrdGhpc1tpXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHJjbGFzcywiICIpLmluZGV4T2YoY2xhc3NOYW1lKT49MCl7cmV0dXJuIHRydWU7fX0KLXJldHVybiBmYWxzZTt9fSk7alF1ZXJ5LmVhY2goKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayAiKyJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiKyJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSxmdW5jdGlvbihpLG5hbWUpe2pRdWVyeS5mbltuYW1lXT1mdW5jdGlvbihkYXRhLGZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24obmFtZSxudWxsLGRhdGEsZm4pOnRoaXMudHJpZ2dlcihuYW1lKTt9O30pO2pRdWVyeS5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGZuT3Zlcixmbk91dCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihmbk92ZXIpLm1vdXNlbGVhdmUoZm5PdXR8fGZuT3Zlcik7fSxiaW5kOmZ1bmN0aW9uKHR5cGVzLGRhdGEsZm4pe3JldHVybiB0aGlzLm9uKHR5cGVzLG51bGwsZGF0YSxmbik7fSx1bmJpbmQ6ZnVuY3Rpb24odHlwZXMsZm4pe3JldHVybiB0aGlzLm9mZih0eXBlcyxudWxsLGZuKTt9LGRlbGVnYXRlOmZ1bmN0aW9uKHNlbGVjdG9yLHR5cGVzLGRhdGEsZm4pe3JldHVybiB0aGlzLm9uKHR5cGVzLHNlbGVjdG9yLGRhdGEsZm4pO30sdW5kZWxlZ2F0ZTpmdW5jdGlvbihzZWxlY3Rvcix0eXBlcyxmbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3RoaXMub2ZmKHNlbGVjdG9yLCIqKiIpOnRoaXMub2ZmKHR5cGVzLHNlbGVjdG9yfHwiKioiLGZuKTt9fSk7dmFyIG5vbmNlPWpRdWVyeS5ub3coKTt2YXIgcnF1ZXJ5PSgvXD8vKTt2YXIgcnZhbGlkdG9rZW5zPS8oLCl8KFxbfHspfCh9fF0pfCIoPzpbXiJcXFxyXG5dfFxcWyJcXFwvYmZucnRdfFxcdVtcZGEtZkEtRl17NH0pKiJccyo6P3x0cnVlfGZhbHNlfG51bGx8LT8oPyEwXGQpXGQrKD86XC5cZCt8KSg/OltlRV1bKy1dP1xkK3wpL2c7alF1ZXJ5LnBhcnNlSlNPTj1mdW5jdGlvbihkYXRhKXtpZih3aW5kb3cuSlNPTiYmd2luZG93LkpTT04ucGFyc2Upe3JldHVybiB3aW5kb3cuSlNPTi5wYXJzZShkYXRhKyIiKTt9Ci12YXIgcmVxdWlyZU5vbkNvbW1hLGRlcHRoPW51bGwsc3RyPWpRdWVyeS50cmltKGRhdGErIiIpO3JldHVybiBzdHImJiFqUXVlcnkudHJpbShzdHIucmVwbGFjZShydmFsaWR0b2tlbnMsZnVuY3Rpb24odG9rZW4sY29tbWEsb3BlbixjbG9zZSl7aWYocmVxdWlyZU5vbkNvbW1hJiZjb21tYSl7ZGVwdGg9MDt9Ci1pZihkZXB0aD09PTApe3JldHVybiB0b2tlbjt9Ci1yZXF1aXJlTm9uQ29tbWE9b3Blbnx8Y29tbWE7ZGVwdGgrPSFjbG9zZS0hb3BlbjtyZXR1cm4iIjt9KSk/KEZ1bmN0aW9uKCJyZXR1cm4gIitzdHIpKSgpOmpRdWVyeS5lcnJvcigiSW52YWxpZCBKU09OOiAiK2RhdGEpO307alF1ZXJ5LnBhcnNlWE1MPWZ1bmN0aW9uKGRhdGEpe3ZhciB4bWwsdG1wO2lmKCFkYXRhfHx0eXBlb2YgZGF0YSE9PSJzdHJpbmciKXtyZXR1cm4gbnVsbDt9Ci10cnl7aWYod2luZG93LkRPTVBhcnNlcil7dG1wPW5ldyBET01QYXJzZXIoKTt4bWw9dG1wLnBhcnNlRnJvbVN0cmluZyhkYXRhLCJ0ZXh0L3htbCIpO31lbHNle3htbD1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO3htbC5hc3luYz0iZmFsc2UiO3htbC5sb2FkWE1MKGRhdGEpO319Y2F0Y2goZSl7eG1sPXVuZGVmaW5lZDt9Ci1pZigheG1sfHwheG1sLmRvY3VtZW50RWxlbWVudHx8eG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCl7alF1ZXJ5LmVycm9yKCJJbnZhbGlkIFhNTDogIitkYXRhKTt9Ci1yZXR1cm4geG1sO307dmFyCi1hamF4TG9jUGFydHMsYWpheExvY2F0aW9uLHJoYXNoPS8jLiokLyxydHM9LyhbPyZdKV89W14mXSovLHJoZWFkZXJzPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcscmxvY2FsUHJvdG9jb2w9L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8scm5vQ29udGVudD0vXig/OkdFVHxIRUFEKSQvLHJwcm90b2NvbD0vXlwvXC8vLHJ1cmw9L14oW1x3ListXSs6KSg/OlwvXC8oPzpbXlwvPyNdKkB8KShbXlwvPyM6XSopKD86OihcZCspfCl8KS8scHJlZmlsdGVycz17fSx0cmFuc3BvcnRzPXt9LGFsbFR5cGVzPSIqLyIuY29uY2F0KCIqIik7dHJ5e2FqYXhMb2NhdGlvbj1sb2NhdGlvbi5ocmVmO31jYXRjaChlKXthamF4TG9jYXRpb249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2FqYXhMb2NhdGlvbi5ocmVmPSIiO2FqYXhMb2NhdGlvbj1hamF4TG9jYXRpb24uaHJlZjt9Ci1hamF4TG9jUGFydHM9cnVybC5leGVjKGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKHN0cnVjdHVyZSl7cmV0dXJuIGZ1bmN0aW9uKGRhdGFUeXBlRXhwcmVzc2lvbixmdW5jKXtpZih0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uIT09InN0cmluZyIpe2Z1bmM9ZGF0YVR5cGVFeHByZXNzaW9uO2RhdGFUeXBlRXhwcmVzc2lvbj0iKiI7fQotdmFyIGRhdGFUeXBlLGk9MCxkYXRhVHlwZXM9ZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2gocm5vdHdoaXRlKXx8W107aWYoalF1ZXJ5LmlzRnVuY3Rpb24oZnVuYykpe3doaWxlKChkYXRhVHlwZT1kYXRhVHlwZXNbaSsrXSkpe2lmKGRhdGFUeXBlLmNoYXJBdCgwKT09PSIrIil7ZGF0YVR5cGU9ZGF0YVR5cGUuc2xpY2UoMSl8fCIqIjsoc3RydWN0dXJlW2RhdGFUeXBlXT1zdHJ1Y3R1cmVbZGF0YVR5cGVdfHxbXSkudW5zaGlmdChmdW5jKTt9ZWxzZXsoc3RydWN0dXJlW2RhdGFUeXBlXT1zdHJ1Y3R1cmVbZGF0YVR5cGVdfHxbXSkucHVzaChmdW5jKTt9fX19O30KLWZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKHN0cnVjdHVyZSxvcHRpb25zLG9yaWdpbmFsT3B0aW9ucyxqcVhIUil7dmFyIGluc3BlY3RlZD17fSxzZWVraW5nVHJhbnNwb3J0PShzdHJ1Y3R1cmU9PT10cmFuc3BvcnRzKTtmdW5jdGlvbiBpbnNwZWN0KGRhdGFUeXBlKXt2YXIgc2VsZWN0ZWQ7aW5zcGVjdGVkW2RhdGFUeXBlXT10cnVlO2pRdWVyeS5lYWNoKHN0cnVjdHVyZVtkYXRhVHlwZV18fFtdLGZ1bmN0aW9uKF8scHJlZmlsdGVyT3JGYWN0b3J5KXt2YXIgZGF0YVR5cGVPclRyYW5zcG9ydD1wcmVmaWx0ZXJPckZhY3Rvcnkob3B0aW9ucyxvcmlnaW5hbE9wdGlvbnMsanFYSFIpO2lmKHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0PT09InN0cmluZyImJiFzZWVraW5nVHJhbnNwb3J0JiYhaW5zcGVjdGVkW2RhdGFUeXBlT3JUcmFuc3BvcnRdKXtvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KGRhdGFUeXBlT3JUcmFuc3BvcnQpO2luc3BlY3QoZGF0YVR5cGVPclRyYW5zcG9ydCk7cmV0dXJuIGZhbHNlO31lbHNlIGlmKHNlZWtpbmdUcmFuc3BvcnQpe3JldHVybiEoc2VsZWN0ZWQ9ZGF0YVR5cGVPclRyYW5zcG9ydCk7fX0pO3JldHVybiBzZWxlY3RlZDt9Ci1yZXR1cm4gaW5zcGVjdChvcHRpb25zLmRhdGFUeXBlc1swXSl8fCFpbnNwZWN0ZWRbIioiXSYmaW5zcGVjdCgiKiIpO30KLWZ1bmN0aW9uIGFqYXhFeHRlbmQodGFyZ2V0LHNyYyl7dmFyIGRlZXAsa2V5LGZsYXRPcHRpb25zPWpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihrZXkgaW4gc3JjKXtpZihzcmNba2V5XSE9PXVuZGVmaW5lZCl7KGZsYXRPcHRpb25zW2tleV0/dGFyZ2V0OihkZWVwfHwoZGVlcD17fSkpKVtrZXldPXNyY1trZXldO319Ci1pZihkZWVwKXtqUXVlcnkuZXh0ZW5kKHRydWUsdGFyZ2V0LGRlZXApO30KLXJldHVybiB0YXJnZXQ7fQotZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyhzLGpxWEhSLHJlc3BvbnNlcyl7dmFyIGZpcnN0RGF0YVR5cGUsY3QsZmluYWxEYXRhVHlwZSx0eXBlLGNvbnRlbnRzPXMuY29udGVudHMsZGF0YVR5cGVzPXMuZGF0YVR5cGVzO3doaWxlKGRhdGFUeXBlc1swXT09PSIqIil7ZGF0YVR5cGVzLnNoaWZ0KCk7aWYoY3Q9PT11bmRlZmluZWQpe2N0PXMubWltZVR5cGV8fGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKTt9fQotaWYoY3Qpe2Zvcih0eXBlIGluIGNvbnRlbnRzKXtpZihjb250ZW50c1t0eXBlXSYmY29udGVudHNbdHlwZV0udGVzdChjdCkpe2RhdGFUeXBlcy51bnNoaWZ0KHR5cGUpO2JyZWFrO319fQotaWYoZGF0YVR5cGVzWzBdaW4gcmVzcG9uc2VzKXtmaW5hbERhdGFUeXBlPWRhdGFUeXBlc1swXTt9ZWxzZXtmb3IodHlwZSBpbiByZXNwb25zZXMpe2lmKCFkYXRhVHlwZXNbMF18fHMuY29udmVydGVyc1t0eXBlKyIgIitkYXRhVHlwZXNbMF1dKXtmaW5hbERhdGFUeXBlPXR5cGU7YnJlYWs7fQotaWYoIWZpcnN0RGF0YVR5cGUpe2ZpcnN0RGF0YVR5cGU9dHlwZTt9fQotZmluYWxEYXRhVHlwZT1maW5hbERhdGFUeXBlfHxmaXJzdERhdGFUeXBlO30KLWlmKGZpbmFsRGF0YVR5cGUpe2lmKGZpbmFsRGF0YVR5cGUhPT1kYXRhVHlwZXNbMF0pe2RhdGFUeXBlcy51bnNoaWZ0KGZpbmFsRGF0YVR5cGUpO30KLXJldHVybiByZXNwb25zZXNbZmluYWxEYXRhVHlwZV07fX0KLWZ1bmN0aW9uIGFqYXhDb252ZXJ0KHMscmVzcG9uc2UsanFYSFIsaXNTdWNjZXNzKXt2YXIgY29udjIsY3VycmVudCxjb252LHRtcCxwcmV2LGNvbnZlcnRlcnM9e30sZGF0YVR5cGVzPXMuZGF0YVR5cGVzLnNsaWNlKCk7aWYoZGF0YVR5cGVzWzFdKXtmb3IoY29udiBpbiBzLmNvbnZlcnRlcnMpe2NvbnZlcnRlcnNbY29udi50b0xvd2VyQ2FzZSgpXT1zLmNvbnZlcnRlcnNbY29udl07fX0KLWN1cnJlbnQ9ZGF0YVR5cGVzLnNoaWZ0KCk7d2hpbGUoY3VycmVudCl7aWYocy5yZXNwb25zZUZpZWxkc1tjdXJyZW50XSl7anFYSFJbcy5yZXNwb25zZUZpZWxkc1tjdXJyZW50XV09cmVzcG9uc2U7fQotaWYoIXByZXYmJmlzU3VjY2VzcyYmcy5kYXRhRmlsdGVyKXtyZXNwb25zZT1zLmRhdGFGaWx0ZXIocmVzcG9uc2Uscy5kYXRhVHlwZSk7fQotcHJldj1jdXJyZW50O2N1cnJlbnQ9ZGF0YVR5cGVzLnNoaWZ0KCk7aWYoY3VycmVudCl7aWYoY3VycmVudD09PSIqIil7Y3VycmVudD1wcmV2O31lbHNlIGlmKHByZXYhPT0iKiImJnByZXYhPT1jdXJyZW50KXtjb252PWNvbnZlcnRlcnNbcHJldisiICIrY3VycmVudF18fGNvbnZlcnRlcnNbIiogIitjdXJyZW50XTtpZighY29udil7Zm9yKGNvbnYyIGluIGNvbnZlcnRlcnMpe3RtcD1jb252Mi5zcGxpdCgiICIpO2lmKHRtcFsxXT09PWN1cnJlbnQpe2NvbnY9Y29udmVydGVyc1twcmV2KyIgIit0bXBbMF1dfHxjb252ZXJ0ZXJzWyIqICIrdG1wWzBdXTtpZihjb252KXtpZihjb252PT09dHJ1ZSl7Y29udj1jb252ZXJ0ZXJzW2NvbnYyXTt9ZWxzZSBpZihjb252ZXJ0ZXJzW2NvbnYyXSE9PXRydWUpe2N1cnJlbnQ9dG1wWzBdO2RhdGFUeXBlcy51bnNoaWZ0KHRtcFsxXSk7fQotYnJlYWs7fX19fQotaWYoY29udiE9PXRydWUpe2lmKGNvbnYmJnNbInRocm93cyJdKXtyZXNwb25zZT1jb252KHJlc3BvbnNlKTt9ZWxzZXt0cnl7cmVzcG9uc2U9Y29udihyZXNwb25zZSk7fWNhdGNoKGUpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmNvbnY/ZToiTm8gY29udmVyc2lvbiBmcm9tICIrcHJldisiIHRvICIrY3VycmVudH07fX19fX19Ci1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6cmVzcG9uc2V9O30KLWpRdWVyeS5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOmFqYXhMb2NhdGlvbix0eXBlOiJHRVQiLGlzTG9jYWw6cmxvY2FsUHJvdG9jb2wudGVzdChhamF4TG9jUGFydHNbMV0pLGdsb2JhbDp0cnVlLHByb2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6YWxsVHlwZXMsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjp0cnVlLCJ0ZXh0IGpzb24iOmpRdWVyeS5wYXJzZUpTT04sInRleHQgeG1sIjpqUXVlcnkucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6dHJ1ZSxjb250ZXh0OnRydWV9fSxhamF4U2V0dXA6ZnVuY3Rpb24odGFyZ2V0LHNldHRpbmdzKXtyZXR1cm4gc2V0dGluZ3M/YWpheEV4dGVuZChhamF4RXh0ZW5kKHRhcmdldCxqUXVlcnkuYWpheFNldHRpbmdzKSxzZXR0aW5ncyk6YWpheEV4dGVuZChqUXVlcnkuYWpheFNldHRpbmdzLHRhcmdldCk7fSxhamF4UHJlZmlsdGVyOmFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyhwcmVmaWx0ZXJzKSxhamF4VHJhbnNwb3J0OmFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyh0cmFuc3BvcnRzKSxhamF4OmZ1bmN0aW9uKHVybCxvcHRpb25zKXtpZih0eXBlb2YgdXJsPT09Im9iamVjdCIpe29wdGlvbnM9dXJsO3VybD11bmRlZmluZWQ7fQotb3B0aW9ucz1vcHRpb25zfHx7fTt2YXIKLXBhcnRzLGksY2FjaGVVUkwscmVzcG9uc2VIZWFkZXJzU3RyaW5nLHRpbWVvdXRUaW1lcixmaXJlR2xvYmFscyx0cmFuc3BvcnQscmVzcG9uc2VIZWFkZXJzLHM9alF1ZXJ5LmFqYXhTZXR1cCh7fSxvcHRpb25zKSxjYWxsYmFja0NvbnRleHQ9cy5jb250ZXh0fHxzLGdsb2JhbEV2ZW50Q29udGV4dD1zLmNvbnRleHQmJihjYWxsYmFja0NvbnRleHQubm9kZVR5cGV8fGNhbGxiYWNrQ29udGV4dC5qcXVlcnkpP2pRdWVyeShjYWxsYmFja0NvbnRleHQpOmpRdWVyeS5ldmVudCxkZWZlcnJlZD1qUXVlcnkuRGVmZXJyZWQoKSxjb21wbGV0ZURlZmVycmVkPWpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksc3RhdHVzQ29kZT1zLnN0YXR1c0NvZGV8fHt9LHJlcXVlc3RIZWFkZXJzPXt9LHJlcXVlc3RIZWFkZXJzTmFtZXM9e30sc3RhdGU9MCxzdHJBYm9ydD0iY2FuY2VsZWQiLGpxWEhSPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oa2V5KXt2YXIgbWF0Y2g7aWYoc3RhdGU9PT0yKXtpZighcmVzcG9uc2VIZWFkZXJzKXtyZXNwb25zZUhlYWRlcnM9e307d2hpbGUoKG1hdGNoPXJoZWFkZXJzLmV4ZWMocmVzcG9uc2VIZWFkZXJzU3RyaW5nKSkpe3Jlc3BvbnNlSGVhZGVyc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXT1tYXRjaFsyXTt9fQotbWF0Y2g9cmVzcG9uc2VIZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXTt9Ci1yZXR1cm4gbWF0Y2g9PW51bGw/bnVsbDptYXRjaDt9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiBzdGF0ZT09PTI/cmVzcG9uc2VIZWFkZXJzU3RyaW5nOm51bGw7fSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKG5hbWUsdmFsdWUpe3ZhciBsbmFtZT1uYW1lLnRvTG93ZXJDYXNlKCk7aWYoIXN0YXRlKXtuYW1lPXJlcXVlc3RIZWFkZXJzTmFtZXNbbG5hbWVdPXJlcXVlc3RIZWFkZXJzTmFtZXNbbG5hbWVdfHxuYW1lO3JlcXVlc3RIZWFkZXJzW25hbWVdPXZhbHVlO30KLXJldHVybiB0aGlzO30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbih0eXBlKXtpZighc3RhdGUpe3MubWltZVR5cGU9dHlwZTt9Ci1yZXR1cm4gdGhpczt9LHN0YXR1c0NvZGU6ZnVuY3Rpb24obWFwKXt2YXIgY29kZTtpZihtYXApe2lmKHN0YXRlPDIpe2Zvcihjb2RlIGluIG1hcCl7c3RhdHVzQ29kZVtjb2RlXT1bc3RhdHVzQ29kZVtjb2RlXSxtYXBbY29kZV1dO319ZWxzZXtqcVhIUi5hbHdheXMobWFwW2pxWEhSLnN0YXR1c10pO319Ci1yZXR1cm4gdGhpczt9LGFib3J0OmZ1bmN0aW9uKHN0YXR1c1RleHQpe3ZhciBmaW5hbFRleHQ9c3RhdHVzVGV4dHx8c3RyQWJvcnQ7aWYodHJhbnNwb3J0KXt0cmFuc3BvcnQuYWJvcnQoZmluYWxUZXh0KTt9Ci1kb25lKDAsZmluYWxUZXh0KTtyZXR1cm4gdGhpczt9fTtkZWZlcnJlZC5wcm9taXNlKGpxWEhSKS5jb21wbGV0ZT1jb21wbGV0ZURlZmVycmVkLmFkZDtqcVhIUi5zdWNjZXNzPWpxWEhSLmRvbmU7anFYSFIuZXJyb3I9anFYSFIuZmFpbDtzLnVybD0oKHVybHx8cy51cmx8fGFqYXhMb2NhdGlvbikrIiIpLnJlcGxhY2Uocmhhc2gsIiIpLnJlcGxhY2UocnByb3RvY29sLGFqYXhMb2NQYXJ0c1sxXSsiLy8iKTtzLnR5cGU9b3B0aW9ucy5tZXRob2R8fG9wdGlvbnMudHlwZXx8cy5tZXRob2R8fHMudHlwZTtzLmRhdGFUeXBlcz1qUXVlcnkudHJpbShzLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2gocm5vdHdoaXRlKXx8WyIiXTtpZihzLmNyb3NzRG9tYWluPT1udWxsKXtwYXJ0cz1ydXJsLmV4ZWMocy51cmwudG9Mb3dlckNhc2UoKSk7cy5jcm9zc0RvbWFpbj0hIShwYXJ0cyYmKHBhcnRzWzFdIT09YWpheExvY1BhcnRzWzFdfHxwYXJ0c1syXSE9PWFqYXhMb2NQYXJ0c1syXXx8KHBhcnRzWzNdfHwocGFydHNbMV09PT0iaHR0cDoiPyI4MCI6IjQ0MyIpKSE9PShhamF4TG9jUGFydHNbM118fChhamF4TG9jUGFydHNbMV09PT0iaHR0cDoiPyI4MCI6IjQ0MyIpKSkpO30KLWlmKHMuZGF0YSYmcy5wcm9jZXNzRGF0YSYmdHlwZW9mIHMuZGF0YSE9PSJzdHJpbmciKXtzLmRhdGE9alF1ZXJ5LnBhcmFtKHMuZGF0YSxzLnRyYWRpdGlvbmFsKTt9Ci1pbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyhwcmVmaWx0ZXJzLHMsb3B0aW9ucyxqcVhIUik7aWYoc3RhdGU9PT0yKXtyZXR1cm4ganFYSFI7fQotZmlyZUdsb2JhbHM9cy5nbG9iYWw7aWYoZmlyZUdsb2JhbHMmJmpRdWVyeS5hY3RpdmUrKz09PTApe2pRdWVyeS5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTt9Ci1zLnR5cGU9cy50eXBlLnRvVXBwZXJDYXNlKCk7cy5oYXNDb250ZW50PSFybm9Db250ZW50LnRlc3Qocy50eXBlKTtjYWNoZVVSTD1zLnVybDtpZighcy5oYXNDb250ZW50KXtpZihzLmRhdGEpe2NhY2hlVVJMPShzLnVybCs9KHJxdWVyeS50ZXN0KGNhY2hlVVJMKT8iJiI6Ij8iKStzLmRhdGEpO2RlbGV0ZSBzLmRhdGE7fQotaWYocy5jYWNoZT09PWZhbHNlKXtzLnVybD1ydHMudGVzdChjYWNoZVVSTCk/Y2FjaGVVUkwucmVwbGFjZShydHMsIiQxXz0iK25vbmNlKyspOmNhY2hlVVJMKyhycXVlcnkudGVzdChjYWNoZVVSTCk/IiYiOiI/IikrIl89Iitub25jZSsrO319Ci1pZihzLmlmTW9kaWZpZWQpe2lmKGpRdWVyeS5sYXN0TW9kaWZpZWRbY2FjaGVVUkxdKXtqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsalF1ZXJ5Lmxhc3RNb2RpZmllZFtjYWNoZVVSTF0pO30KLWlmKGpRdWVyeS5ldGFnW2NhY2hlVVJMXSl7anFYSFIuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsalF1ZXJ5LmV0YWdbY2FjaGVVUkxdKTt9fQotaWYocy5kYXRhJiZzLmhhc0NvbnRlbnQmJnMuY29udGVudFR5cGUhPT1mYWxzZXx8b3B0aW9ucy5jb250ZW50VHlwZSl7anFYSFIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixzLmNvbnRlbnRUeXBlKTt9Ci1qcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHMuZGF0YVR5cGVzWzBdJiZzLmFjY2VwdHNbcy5kYXRhVHlwZXNbMF1dP3MuYWNjZXB0c1tzLmRhdGFUeXBlc1swXV0rKHMuZGF0YVR5cGVzWzBdIT09IioiPyIsICIrYWxsVHlwZXMrIjsgcT0wLjAxIjoiIik6cy5hY2NlcHRzWyIqIl0pO2ZvcihpIGluIHMuaGVhZGVycyl7anFYSFIuc2V0UmVxdWVzdEhlYWRlcihpLHMuaGVhZGVyc1tpXSk7fQotaWYocy5iZWZvcmVTZW5kJiYocy5iZWZvcmVTZW5kLmNhbGwoY2FsbGJhY2tDb250ZXh0LGpxWEhSLHMpPT09ZmFsc2V8fHN0YXRlPT09Mikpe3JldHVybiBqcVhIUi5hYm9ydCgpO30KLXN0ckFib3J0PSJhYm9ydCI7Zm9yKGkgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pe2pxWEhSW2ldKHNbaV0pO30KLXRyYW5zcG9ydD1pbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyh0cmFuc3BvcnRzLHMsb3B0aW9ucyxqcVhIUik7aWYoIXRyYW5zcG9ydCl7ZG9uZSgtMSwiTm8gVHJhbnNwb3J0Iik7fWVsc2V7anFYSFIucmVhZHlTdGF0ZT0xO2lmKGZpcmVHbG9iYWxzKXtnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlcigiYWpheFNlbmQiLFtqcVhIUixzXSk7fQotaWYocy5hc3luYyYmcy50aW1lb3V0PjApe3RpbWVvdXRUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7anFYSFIuYWJvcnQoInRpbWVvdXQiKTt9LHMudGltZW91dCk7fQotdHJ5e3N0YXRlPTE7dHJhbnNwb3J0LnNlbmQocmVxdWVzdEhlYWRlcnMsZG9uZSk7fWNhdGNoKGUpe2lmKHN0YXRlPDIpe2RvbmUoLTEsZSk7fWVsc2V7dGhyb3cgZTt9fX0KLWZ1bmN0aW9uIGRvbmUoc3RhdHVzLG5hdGl2ZVN0YXR1c1RleHQscmVzcG9uc2VzLGhlYWRlcnMpe3ZhciBpc1N1Y2Nlc3Msc3VjY2VzcyxlcnJvcixyZXNwb25zZSxtb2RpZmllZCxzdGF0dXNUZXh0PW5hdGl2ZVN0YXR1c1RleHQ7aWYoc3RhdGU9PT0yKXtyZXR1cm47fQotc3RhdGU9MjtpZih0aW1lb3V0VGltZXIpe2NsZWFyVGltZW91dCh0aW1lb3V0VGltZXIpO30KLXRyYW5zcG9ydD11bmRlZmluZWQ7cmVzcG9uc2VIZWFkZXJzU3RyaW5nPWhlYWRlcnN8fCIiO2pxWEhSLnJlYWR5U3RhdGU9c3RhdHVzPjA/NDowO2lzU3VjY2Vzcz1zdGF0dXM+PTIwMCYmc3RhdHVzPDMwMHx8c3RhdHVzPT09MzA0O2lmKHJlc3BvbnNlcyl7cmVzcG9uc2U9YWpheEhhbmRsZVJlc3BvbnNlcyhzLGpxWEhSLHJlc3BvbnNlcyk7fQotcmVzcG9uc2U9YWpheENvbnZlcnQocyxyZXNwb25zZSxqcVhIUixpc1N1Y2Nlc3MpO2lmKGlzU3VjY2Vzcyl7aWYocy5pZk1vZGlmaWVkKXttb2RpZmllZD1qcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpO2lmKG1vZGlmaWVkKXtqUXVlcnkubGFzdE1vZGlmaWVkW2NhY2hlVVJMXT1tb2RpZmllZDt9Ci1tb2RpZmllZD1qcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpO2lmKG1vZGlmaWVkKXtqUXVlcnkuZXRhZ1tjYWNoZVVSTF09bW9kaWZpZWQ7fX0KLWlmKHN0YXR1cz09PTIwNHx8cy50eXBlPT09IkhFQUQiKXtzdGF0dXNUZXh0PSJub2NvbnRlbnQiO31lbHNlIGlmKHN0YXR1cz09PTMwNCl7c3RhdHVzVGV4dD0ibm90bW9kaWZpZWQiO31lbHNle3N0YXR1c1RleHQ9cmVzcG9uc2Uuc3RhdGU7c3VjY2Vzcz1yZXNwb25zZS5kYXRhO2Vycm9yPXJlc3BvbnNlLmVycm9yO2lzU3VjY2Vzcz0hZXJyb3I7fX1lbHNle2Vycm9yPXN0YXR1c1RleHQ7aWYoc3RhdHVzfHwhc3RhdHVzVGV4dCl7c3RhdHVzVGV4dD0iZXJyb3IiO2lmKHN0YXR1czwwKXtzdGF0dXM9MDt9fX0KLWpxWEhSLnN0YXR1cz1zdGF0dXM7anFYSFIuc3RhdHVzVGV4dD0obmF0aXZlU3RhdHVzVGV4dHx8c3RhdHVzVGV4dCkrIiI7aWYoaXNTdWNjZXNzKXtkZWZlcnJlZC5yZXNvbHZlV2l0aChjYWxsYmFja0NvbnRleHQsW3N1Y2Nlc3Msc3RhdHVzVGV4dCxqcVhIUl0pO31lbHNle2RlZmVycmVkLnJlamVjdFdpdGgoY2FsbGJhY2tDb250ZXh0LFtqcVhIUixzdGF0dXNUZXh0LGVycm9yXSk7fQotanFYSFIuc3RhdHVzQ29kZShzdGF0dXNDb2RlKTtzdGF0dXNDb2RlPXVuZGVmaW5lZDtpZihmaXJlR2xvYmFscyl7Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoaXNTdWNjZXNzPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW2pxWEhSLHMsaXNTdWNjZXNzP3N1Y2Nlc3M6ZXJyb3JdKTt9Ci1jb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKGNhbGxiYWNrQ29udGV4dCxbanFYSFIsc3RhdHVzVGV4dF0pO2lmKGZpcmVHbG9iYWxzKXtnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbanFYSFIsc10pO2lmKCEoLS1qUXVlcnkuYWN0aXZlKSl7alF1ZXJ5LmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIik7fX19Ci1yZXR1cm4ganFYSFI7fSxnZXRKU09OOmZ1bmN0aW9uKHVybCxkYXRhLGNhbGxiYWNrKXtyZXR1cm4galF1ZXJ5LmdldCh1cmwsZGF0YSxjYWxsYmFjaywianNvbiIpO30sZ2V0U2NyaXB0OmZ1bmN0aW9uKHVybCxjYWxsYmFjayl7cmV0dXJuIGpRdWVyeS5nZXQodXJsLHVuZGVmaW5lZCxjYWxsYmFjaywic2NyaXB0Iik7fX0pO2pRdWVyeS5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGksbWV0aG9kKXtqUXVlcnlbbWV0aG9kXT1mdW5jdGlvbih1cmwsZGF0YSxjYWxsYmFjayx0eXBlKXtpZihqUXVlcnkuaXNGdW5jdGlvbihkYXRhKSl7dHlwZT10eXBlfHxjYWxsYmFjaztjYWxsYmFjaz1kYXRhO2RhdGE9dW5kZWZpbmVkO30KLXJldHVybiBqUXVlcnkuYWpheCh7dXJsOnVybCx0eXBlOm1ldGhvZCxkYXRhVHlwZTp0eXBlLGRhdGE6ZGF0YSxzdWNjZXNzOmNhbGxiYWNrfSk7fTt9KTtqUXVlcnkuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGksdHlwZSl7alF1ZXJ5LmZuW3R5cGVdPWZ1bmN0aW9uKGZuKXtyZXR1cm4gdGhpcy5vbih0eXBlLGZuKTt9O30pO2pRdWVyeS5fZXZhbFVybD1mdW5jdGlvbih1cmwpe3JldHVybiBqUXVlcnkuYWpheCh7dXJsOnVybCx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOmZhbHNlLGdsb2JhbDpmYWxzZSwidGhyb3dzIjp0cnVlfSk7fTtqUXVlcnkuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGh0bWwpe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKGh0bWwpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2pRdWVyeSh0aGlzKS53cmFwQWxsKGh0bWwuY2FsbCh0aGlzLGkpKTt9KTt9Ci1pZih0aGlzWzBdKXt2YXIgd3JhcD1qUXVlcnkoaHRtbCx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKHRydWUpO2lmKHRoaXNbMF0ucGFyZW50Tm9kZSl7d3JhcC5pbnNlcnRCZWZvcmUodGhpc1swXSk7fQotd3JhcC5tYXAoZnVuY3Rpb24oKXt2YXIgZWxlbT10aGlzO3doaWxlKGVsZW0uZmlyc3RDaGlsZCYmZWxlbS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSl7ZWxlbT1lbGVtLmZpcnN0Q2hpbGQ7fQotcmV0dXJuIGVsZW07fSkuYXBwZW5kKHRoaXMpO30KLXJldHVybiB0aGlzO30sd3JhcElubmVyOmZ1bmN0aW9uKGh0bWwpe2lmKGpRdWVyeS5pc0Z1bmN0aW9uKGh0bWwpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2pRdWVyeSh0aGlzKS53cmFwSW5uZXIoaHRtbC5jYWxsKHRoaXMsaSkpO30pO30KLXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgc2VsZj1qUXVlcnkodGhpcyksY29udGVudHM9c2VsZi5jb250ZW50cygpO2lmKGNvbnRlbnRzLmxlbmd0aCl7Y29udGVudHMud3JhcEFsbChodG1sKTt9ZWxzZXtzZWxmLmFwcGVuZChodG1sKTt9fSk7fSx3cmFwOmZ1bmN0aW9uKGh0bWwpe3ZhciBpc0Z1bmN0aW9uPWpRdWVyeS5pc0Z1bmN0aW9uKGh0bWwpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSl7alF1ZXJ5KHRoaXMpLndyYXBBbGwoaXNGdW5jdGlvbj9odG1sLmNhbGwodGhpcyxpKTpodG1sKTt9KTt9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtpZighalF1ZXJ5Lm5vZGVOYW1lKHRoaXMsImJvZHkiKSl7alF1ZXJ5KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyk7fX0pLmVuZCgpO319KTtqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlbGVtKXtyZXR1cm4gZWxlbS5vZmZzZXRXaWR0aDw9MCYmZWxlbS5vZmZzZXRIZWlnaHQ8PTB8fCghc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMoKSYmKChlbGVtLnN0eWxlJiZlbGVtLnN0eWxlLmRpc3BsYXkpfHxqUXVlcnkuY3NzKGVsZW0sImRpc3BsYXkiKSk9PT0ibm9uZSIpO307alF1ZXJ5LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGVsZW0pe3JldHVybiFqUXVlcnkuZXhwci5maWx0ZXJzLmhpZGRlbihlbGVtKTt9O3ZhciByMjA9LyUyMC9nLHJicmFja2V0PS9cW1xdJC8sckNSTEY9L1xyP1xuL2cscnN1Ym1pdHRlclR5cGVzPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxyc3VibWl0dGFibGU9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIGJ1aWxkUGFyYW1zKHByZWZpeCxvYmosdHJhZGl0aW9uYWwsYWRkKXt2YXIgbmFtZTtpZihqUXVlcnkuaXNBcnJheShvYmopKXtqUXVlcnkuZWFjaChvYmosZnVuY3Rpb24oaSx2KXtpZih0cmFkaXRpb25hbHx8cmJyYWNrZXQudGVzdChwcmVmaXgpKXthZGQocHJlZml4LHYpO31lbHNle2J1aWxkUGFyYW1zKHByZWZpeCsiWyIrKHR5cGVvZiB2PT09Im9iamVjdCI/aToiIikrIl0iLHYsdHJhZGl0aW9uYWwsYWRkKTt9fSk7fWVsc2UgaWYoIXRyYWRpdGlvbmFsJiZqUXVlcnkudHlwZShvYmopPT09Im9iamVjdCIpe2ZvcihuYW1lIGluIG9iail7YnVpbGRQYXJhbXMocHJlZml4KyJbIituYW1lKyJdIixvYmpbbmFtZV0sdHJhZGl0aW9uYWwsYWRkKTt9fWVsc2V7YWRkKHByZWZpeCxvYmopO319Ci1qUXVlcnkucGFyYW09ZnVuY3Rpb24oYSx0cmFkaXRpb25hbCl7dmFyIHByZWZpeCxzPVtdLGFkZD1mdW5jdGlvbihrZXksdmFsdWUpe3ZhbHVlPWpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKT92YWx1ZSgpOih2YWx1ZT09bnVsbD8iIjp2YWx1ZSk7c1tzLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGtleSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7fTtpZih0cmFkaXRpb25hbD09PXVuZGVmaW5lZCl7dHJhZGl0aW9uYWw9alF1ZXJ5LmFqYXhTZXR0aW5ncyYmalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDt9Ci1pZihqUXVlcnkuaXNBcnJheShhKXx8KGEuanF1ZXJ5JiYhalF1ZXJ5LmlzUGxhaW5PYmplY3QoYSkpKXtqUXVlcnkuZWFjaChhLGZ1bmN0aW9uKCl7YWRkKHRoaXMubmFtZSx0aGlzLnZhbHVlKTt9KTt9ZWxzZXtmb3IocHJlZml4IGluIGEpe2J1aWxkUGFyYW1zKHByZWZpeCxhW3ByZWZpeF0sdHJhZGl0aW9uYWwsYWRkKTt9fQotcmV0dXJuIHMuam9pbigiJiIpLnJlcGxhY2UocjIwLCIrIik7fTtqUXVlcnkuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4galF1ZXJ5LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSk7fSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlbGVtZW50cz1qUXVlcnkucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBlbGVtZW50cz9qUXVlcnkubWFrZUFycmF5KGVsZW1lbnRzKTp0aGlzO30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciB0eXBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhalF1ZXJ5KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmcnN1Ym1pdHRhYmxlLnRlc3QodGhpcy5ub2RlTmFtZSkmJiFyc3VibWl0dGVyVHlwZXMudGVzdCh0eXBlKSYmKHRoaXMuY2hlY2tlZHx8IXJjaGVja2FibGVUeXBlLnRlc3QodHlwZSkpO30pLm1hcChmdW5jdGlvbihpLGVsZW0pe3ZhciB2YWw9alF1ZXJ5KHRoaXMpLnZhbCgpO3JldHVybiB2YWw9PW51bGw/bnVsbDpqUXVlcnkuaXNBcnJheSh2YWwpP2pRdWVyeS5tYXAodmFsLGZ1bmN0aW9uKHZhbCl7cmV0dXJue25hbWU6ZWxlbS5uYW1lLHZhbHVlOnZhbC5yZXBsYWNlKHJDUkxGLCJcclxuIil9O30pOntuYW1lOmVsZW0ubmFtZSx2YWx1ZTp2YWwucmVwbGFjZShyQ1JMRiwiXHJcbiIpfTt9KS5nZXQoKTt9fSk7alF1ZXJ5LmFqYXhTZXR0aW5ncy54aHI9d2luZG93LkFjdGl2ZVhPYmplY3QhPT11bmRlZmluZWQ/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiYvXihnZXR8cG9zdHxoZWFkfHB1dHxkZWxldGV8b3B0aW9ucykkL2kudGVzdCh0aGlzLnR5cGUpJiZjcmVhdGVTdGFuZGFyZFhIUigpfHxjcmVhdGVBY3RpdmVYSFIoKTt9OmNyZWF0ZVN0YW5kYXJkWEhSO3ZhciB4aHJJZD0wLHhockNhbGxiYWNrcz17fSx4aHJTdXBwb3J0ZWQ9alF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtpZih3aW5kb3cuQWN0aXZlWE9iamVjdCl7alF1ZXJ5KHdpbmRvdykub24oInVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGtleSBpbiB4aHJDYWxsYmFja3Mpe3hockNhbGxiYWNrc1trZXldKHVuZGVmaW5lZCx0cnVlKTt9fSk7fQotc3VwcG9ydC5jb3JzPSEheGhyU3VwcG9ydGVkJiYoIndpdGhDcmVkZW50aWFscyJpbiB4aHJTdXBwb3J0ZWQpO3hoclN1cHBvcnRlZD1zdXBwb3J0LmFqYXg9ISF4aHJTdXBwb3J0ZWQ7aWYoeGhyU3VwcG9ydGVkKXtqUXVlcnkuYWpheFRyYW5zcG9ydChmdW5jdGlvbihvcHRpb25zKXtpZighb3B0aW9ucy5jcm9zc0RvbWFpbnx8c3VwcG9ydC5jb3JzKXt2YXIgY2FsbGJhY2s7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaGVhZGVycyxjb21wbGV0ZSl7dmFyIGkseGhyPW9wdGlvbnMueGhyKCksaWQ9Kyt4aHJJZDt4aHIub3BlbihvcHRpb25zLnR5cGUsb3B0aW9ucy51cmwsb3B0aW9ucy5hc3luYyxvcHRpb25zLnVzZXJuYW1lLG9wdGlvbnMucGFzc3dvcmQpO2lmKG9wdGlvbnMueGhyRmllbGRzKXtmb3IoaSBpbiBvcHRpb25zLnhockZpZWxkcyl7eGhyW2ldPW9wdGlvbnMueGhyRmllbGRzW2ldO319Ci1pZihvcHRpb25zLm1pbWVUeXBlJiZ4aHIub3ZlcnJpZGVNaW1lVHlwZSl7eGhyLm92ZXJyaWRlTWltZVR5cGUob3B0aW9ucy5taW1lVHlwZSk7fQotaWYoIW9wdGlvbnMuY3Jvc3NEb21haW4mJiFoZWFkZXJzWyJYLVJlcXVlc3RlZC1XaXRoIl0pe2hlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiO30KLWZvcihpIGluIGhlYWRlcnMpe2lmKGhlYWRlcnNbaV0hPT11bmRlZmluZWQpe3hoci5zZXRSZXF1ZXN0SGVhZGVyKGksaGVhZGVyc1tpXSsiIik7fX0KLXhoci5zZW5kKChvcHRpb25zLmhhc0NvbnRlbnQmJm9wdGlvbnMuZGF0YSl8fG51bGwpO2NhbGxiYWNrPWZ1bmN0aW9uKF8saXNBYm9ydCl7dmFyIHN0YXR1cyxzdGF0dXNUZXh0LHJlc3BvbnNlcztpZihjYWxsYmFjayYmKGlzQWJvcnR8fHhoci5yZWFkeVN0YXRlPT09NCkpe2RlbGV0ZSB4aHJDYWxsYmFja3NbaWRdO2NhbGxiYWNrPXVuZGVmaW5lZDt4aHIub25yZWFkeXN0YXRlY2hhbmdlPWpRdWVyeS5ub29wO2lmKGlzQWJvcnQpe2lmKHhoci5yZWFkeVN0YXRlIT09NCl7eGhyLmFib3J0KCk7fX1lbHNle3Jlc3BvbnNlcz17fTtzdGF0dXM9eGhyLnN0YXR1cztpZih0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dD09PSJzdHJpbmciKXtyZXNwb25zZXMudGV4dD14aHIucmVzcG9uc2VUZXh0O30KLXRyeXtzdGF0dXNUZXh0PXhoci5zdGF0dXNUZXh0O31jYXRjaChlKXtzdGF0dXNUZXh0PSIiO30KLWlmKCFzdGF0dXMmJm9wdGlvbnMuaXNMb2NhbCYmIW9wdGlvbnMuY3Jvc3NEb21haW4pe3N0YXR1cz1yZXNwb25zZXMudGV4dD8yMDA6NDA0O31lbHNlIGlmKHN0YXR1cz09PTEyMjMpe3N0YXR1cz0yMDQ7fX19Ci1pZihyZXNwb25zZXMpe2NvbXBsZXRlKHN0YXR1cyxzdGF0dXNUZXh0LHJlc3BvbnNlcyx4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO319O2lmKCFvcHRpb25zLmFzeW5jKXtjYWxsYmFjaygpO31lbHNlIGlmKHhoci5yZWFkeVN0YXRlPT09NCl7c2V0VGltZW91dChjYWxsYmFjayk7fWVsc2V7eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZT14aHJDYWxsYmFja3NbaWRdPWNhbGxiYWNrO319LGFib3J0OmZ1bmN0aW9uKCl7aWYoY2FsbGJhY2spe2NhbGxiYWNrKHVuZGVmaW5lZCx0cnVlKTt9fX07fX0pO30KLWZ1bmN0aW9uIGNyZWF0ZVN0YW5kYXJkWEhSKCl7dHJ5e3JldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7fWNhdGNoKGUpe319Ci1mdW5jdGlvbiBjcmVhdGVBY3RpdmVYSFIoKXt0cnl7cmV0dXJuIG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTt9Y2F0Y2goZSl7fX0KLWpRdWVyeS5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbih0ZXh0KXtqUXVlcnkuZ2xvYmFsRXZhbCh0ZXh0KTtyZXR1cm4gdGV4dDt9fX0pO2pRdWVyeS5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKHMpe2lmKHMuY2FjaGU9PT11bmRlZmluZWQpe3MuY2FjaGU9ZmFsc2U7fQotaWYocy5jcm9zc0RvbWFpbil7cy50eXBlPSJHRVQiO3MuZ2xvYmFsPWZhbHNlO319KTtqUXVlcnkuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihzKXtpZihzLmNyb3NzRG9tYWluKXt2YXIgc2NyaXB0LGhlYWQ9ZG9jdW1lbnQuaGVhZHx8alF1ZXJ5KCJoZWFkIilbMF18fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihfLGNhbGxiYWNrKXtzY3JpcHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7c2NyaXB0LmFzeW5jPXRydWU7aWYocy5zY3JpcHRDaGFyc2V0KXtzY3JpcHQuY2hhcnNldD1zLnNjcmlwdENoYXJzZXQ7fQotc2NyaXB0LnNyYz1zLnVybDtzY3JpcHQub25sb2FkPXNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oXyxpc0Fib3J0KXtpZihpc0Fib3J0fHwhc2NyaXB0LnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qoc2NyaXB0LnJlYWR5U3RhdGUpKXtzY3JpcHQub25sb2FkPXNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDtpZihzY3JpcHQucGFyZW50Tm9kZSl7c2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTt9Ci1zY3JpcHQ9bnVsbDtpZighaXNBYm9ydCl7Y2FsbGJhY2soMjAwLCJzdWNjZXNzIik7fX19O2hlYWQuaW5zZXJ0QmVmb3JlKHNjcmlwdCxoZWFkLmZpcnN0Q2hpbGQpO30sYWJvcnQ6ZnVuY3Rpb24oKXtpZihzY3JpcHQpe3NjcmlwdC5vbmxvYWQodW5kZWZpbmVkLHRydWUpO319fTt9fSk7dmFyIG9sZENhbGxiYWNrcz1bXSxyanNvbnA9Lyg9KVw/KD89JnwkKXxcP1w/LztqUXVlcnkuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgY2FsbGJhY2s9b2xkQ2FsbGJhY2tzLnBvcCgpfHwoalF1ZXJ5LmV4cGFuZG8rIl8iKyhub25jZSsrKSk7dGhpc1tjYWxsYmFja109dHJ1ZTtyZXR1cm4gY2FsbGJhY2s7fX0pO2pRdWVyeS5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihzLG9yaWdpbmFsU2V0dGluZ3MsanFYSFIpe3ZhciBjYWxsYmFja05hbWUsb3ZlcndyaXR0ZW4scmVzcG9uc2VDb250YWluZXIsanNvblByb3A9cy5qc29ucCE9PWZhbHNlJiYocmpzb25wLnRlc3Qocy51cmwpPyJ1cmwiOnR5cGVvZiBzLmRhdGE9PT0ic3RyaW5nIiYmIShzLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJnJqc29ucC50ZXN0KHMuZGF0YSkmJiJkYXRhIik7aWYoanNvblByb3B8fHMuZGF0YVR5cGVzWzBdPT09Impzb25wIil7Y2FsbGJhY2tOYW1lPXMuanNvbnBDYWxsYmFjaz1qUXVlcnkuaXNGdW5jdGlvbihzLmpzb25wQ2FsbGJhY2spP3MuanNvbnBDYWxsYmFjaygpOnMuanNvbnBDYWxsYmFjaztpZihqc29uUHJvcCl7c1tqc29uUHJvcF09c1tqc29uUHJvcF0ucmVwbGFjZShyanNvbnAsIiQxIitjYWxsYmFja05hbWUpO31lbHNlIGlmKHMuanNvbnAhPT1mYWxzZSl7cy51cmwrPShycXVlcnkudGVzdChzLnVybCk/IiYiOiI/Iikrcy5qc29ucCsiPSIrY2FsbGJhY2tOYW1lO30KLXMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe2lmKCFyZXNwb25zZUNvbnRhaW5lcil7alF1ZXJ5LmVycm9yKGNhbGxiYWNrTmFtZSsiIHdhcyBub3QgY2FsbGVkIik7fQotcmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWzBdO307cy5kYXRhVHlwZXNbMF09Impzb24iO292ZXJ3cml0dGVuPXdpbmRvd1tjYWxsYmFja05hbWVdO3dpbmRvd1tjYWxsYmFja05hbWVdPWZ1bmN0aW9uKCl7cmVzcG9uc2VDb250YWluZXI9YXJndW1lbnRzO307anFYSFIuYWx3YXlzKGZ1bmN0aW9uKCl7d2luZG93W2NhbGxiYWNrTmFtZV09b3ZlcndyaXR0ZW47aWYoc1tjYWxsYmFja05hbWVdKXtzLmpzb25wQ2FsbGJhY2s9b3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO29sZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrTmFtZSk7fQotaWYocmVzcG9uc2VDb250YWluZXImJmpRdWVyeS5pc0Z1bmN0aW9uKG92ZXJ3cml0dGVuKSl7b3ZlcndyaXR0ZW4ocmVzcG9uc2VDb250YWluZXJbMF0pO30KLXJlc3BvbnNlQ29udGFpbmVyPW92ZXJ3cml0dGVuPXVuZGVmaW5lZDt9KTtyZXR1cm4ic2NyaXB0Ijt9fSk7alF1ZXJ5LnBhcnNlSFRNTD1mdW5jdGlvbihkYXRhLGNvbnRleHQsa2VlcFNjcmlwdHMpe2lmKCFkYXRhfHx0eXBlb2YgZGF0YSE9PSJzdHJpbmciKXtyZXR1cm4gbnVsbDt9Ci1pZih0eXBlb2YgY29udGV4dD09PSJib29sZWFuIil7a2VlcFNjcmlwdHM9Y29udGV4dDtjb250ZXh0PWZhbHNlO30KLWNvbnRleHQ9Y29udGV4dHx8ZG9jdW1lbnQ7dmFyIHBhcnNlZD1yc2luZ2xlVGFnLmV4ZWMoZGF0YSksc2NyaXB0cz0ha2VlcFNjcmlwdHMmJltdO2lmKHBhcnNlZCl7cmV0dXJuW2NvbnRleHQuY3JlYXRlRWxlbWVudChwYXJzZWRbMV0pXTt9Ci1wYXJzZWQ9alF1ZXJ5LmJ1aWxkRnJhZ21lbnQoW2RhdGFdLGNvbnRleHQsc2NyaXB0cyk7aWYoc2NyaXB0cyYmc2NyaXB0cy5sZW5ndGgpe2pRdWVyeShzY3JpcHRzKS5yZW1vdmUoKTt9Ci1yZXR1cm4galF1ZXJ5Lm1lcmdlKFtdLHBhcnNlZC5jaGlsZE5vZGVzKTt9O3ZhciBfbG9hZD1qUXVlcnkuZm4ubG9hZDtqUXVlcnkuZm4ubG9hZD1mdW5jdGlvbih1cmwscGFyYW1zLGNhbGxiYWNrKXtpZih0eXBlb2YgdXJsIT09InN0cmluZyImJl9sb2FkKXtyZXR1cm4gX2xvYWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KLXZhciBzZWxlY3RvcixyZXNwb25zZSx0eXBlLHNlbGY9dGhpcyxvZmY9dXJsLmluZGV4T2YoIiAiKTtpZihvZmY+PTApe3NlbGVjdG9yPWpRdWVyeS50cmltKHVybC5zbGljZShvZmYsdXJsLmxlbmd0aCkpO3VybD11cmwuc2xpY2UoMCxvZmYpO30KLWlmKGpRdWVyeS5pc0Z1bmN0aW9uKHBhcmFtcykpe2NhbGxiYWNrPXBhcmFtcztwYXJhbXM9dW5kZWZpbmVkO31lbHNlIGlmKHBhcmFtcyYmdHlwZW9mIHBhcmFtcz09PSJvYmplY3QiKXt0eXBlPSJQT1NUIjt9Ci1pZihzZWxmLmxlbmd0aD4wKXtqUXVlcnkuYWpheCh7dXJsOnVybCx0eXBlOnR5cGUsZGF0YVR5cGU6Imh0bWwiLGRhdGE6cGFyYW1zfSkuZG9uZShmdW5jdGlvbihyZXNwb25zZVRleHQpe3Jlc3BvbnNlPWFyZ3VtZW50cztzZWxmLmh0bWwoc2VsZWN0b3I/alF1ZXJ5KCI8ZGl2PiIpLmFwcGVuZChqUXVlcnkucGFyc2VIVE1MKHJlc3BvbnNlVGV4dCkpLmZpbmQoc2VsZWN0b3IpOnJlc3BvbnNlVGV4dCk7fSkuY29tcGxldGUoY2FsbGJhY2smJmZ1bmN0aW9uKGpxWEhSLHN0YXR1cyl7c2VsZi5lYWNoKGNhbGxiYWNrLHJlc3BvbnNlfHxbanFYSFIucmVzcG9uc2VUZXh0LHN0YXR1cyxqcVhIUl0pO30pO30KLXJldHVybiB0aGlzO307alF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlbGVtKXtyZXR1cm4galF1ZXJ5LmdyZXAoalF1ZXJ5LnRpbWVycyxmdW5jdGlvbihmbil7cmV0dXJuIGVsZW09PT1mbi5lbGVtO30pLmxlbmd0aDt9O3ZhciBkb2NFbGVtPXdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZ2V0V2luZG93KGVsZW0pe3JldHVybiBqUXVlcnkuaXNXaW5kb3coZWxlbSk/ZWxlbTplbGVtLm5vZGVUeXBlPT09OT9lbGVtLmRlZmF1bHRWaWV3fHxlbGVtLnBhcmVudFdpbmRvdzpmYWxzZTt9Ci1qUXVlcnkub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZWxlbSxvcHRpb25zLGkpe3ZhciBjdXJQb3NpdGlvbixjdXJMZWZ0LGN1ckNTU1RvcCxjdXJUb3AsY3VyT2Zmc2V0LGN1ckNTU0xlZnQsY2FsY3VsYXRlUG9zaXRpb24scG9zaXRpb249alF1ZXJ5LmNzcyhlbGVtLCJwb3NpdGlvbiIpLGN1ckVsZW09alF1ZXJ5KGVsZW0pLHByb3BzPXt9O2lmKHBvc2l0aW9uPT09InN0YXRpYyIpe2VsZW0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjt9Ci1jdXJPZmZzZXQ9Y3VyRWxlbS5vZmZzZXQoKTtjdXJDU1NUb3A9alF1ZXJ5LmNzcyhlbGVtLCJ0b3AiKTtjdXJDU1NMZWZ0PWpRdWVyeS5jc3MoZWxlbSwibGVmdCIpO2NhbGN1bGF0ZVBvc2l0aW9uPShwb3NpdGlvbj09PSJhYnNvbHV0ZSJ8fHBvc2l0aW9uPT09ImZpeGVkIikmJmpRdWVyeS5pbkFycmF5KCJhdXRvIixbY3VyQ1NTVG9wLGN1ckNTU0xlZnRdKT4tMTtpZihjYWxjdWxhdGVQb3NpdGlvbil7Y3VyUG9zaXRpb249Y3VyRWxlbS5wb3NpdGlvbigpO2N1clRvcD1jdXJQb3NpdGlvbi50b3A7Y3VyTGVmdD1jdXJQb3NpdGlvbi5sZWZ0O31lbHNle2N1clRvcD1wYXJzZUZsb2F0KGN1ckNTU1RvcCl8fDA7Y3VyTGVmdD1wYXJzZUZsb2F0KGN1ckNTU0xlZnQpfHwwO30KLWlmKGpRdWVyeS5pc0Z1bmN0aW9uKG9wdGlvbnMpKXtvcHRpb25zPW9wdGlvbnMuY2FsbChlbGVtLGksY3VyT2Zmc2V0KTt9Ci1pZihvcHRpb25zLnRvcCE9bnVsbCl7cHJvcHMudG9wPShvcHRpb25zLnRvcC1jdXJPZmZzZXQudG9wKStjdXJUb3A7fQotaWYob3B0aW9ucy5sZWZ0IT1udWxsKXtwcm9wcy5sZWZ0PShvcHRpb25zLmxlZnQtY3VyT2Zmc2V0LmxlZnQpK2N1ckxlZnQ7fQotaWYoInVzaW5nImluIG9wdGlvbnMpe29wdGlvbnMudXNpbmcuY2FsbChlbGVtLHByb3BzKTt9ZWxzZXtjdXJFbGVtLmNzcyhwcm9wcyk7fX19O2pRdWVyeS5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihvcHRpb25zKXtpZihhcmd1bWVudHMubGVuZ3RoKXtyZXR1cm4gb3B0aW9ucz09PXVuZGVmaW5lZD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihpKXtqUXVlcnkub2Zmc2V0LnNldE9mZnNldCh0aGlzLG9wdGlvbnMsaSk7fSk7fQotdmFyIGRvY0VsZW0sd2luLGJveD17dG9wOjAsbGVmdDowfSxlbGVtPXRoaXNbMF0sZG9jPWVsZW0mJmVsZW0ub3duZXJEb2N1bWVudDtpZighZG9jKXtyZXR1cm47fQotZG9jRWxlbT1kb2MuZG9jdW1lbnRFbGVtZW50O2lmKCFqUXVlcnkuY29udGFpbnMoZG9jRWxlbSxlbGVtKSl7cmV0dXJuIGJveDt9Ci1pZih0eXBlb2YgZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPT1zdHJ1bmRlZmluZWQpe2JveD1lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO30KLXdpbj1nZXRXaW5kb3coZG9jKTtyZXR1cm57dG9wOmJveC50b3ArKHdpbi5wYWdlWU9mZnNldHx8ZG9jRWxlbS5zY3JvbGxUb3ApLShkb2NFbGVtLmNsaWVudFRvcHx8MCksbGVmdDpib3gubGVmdCsod2luLnBhZ2VYT2Zmc2V0fHxkb2NFbGVtLnNjcm9sbExlZnQpLShkb2NFbGVtLmNsaWVudExlZnR8fDApfTt9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pe3JldHVybjt9Ci12YXIgb2Zmc2V0UGFyZW50LG9mZnNldCxwYXJlbnRPZmZzZXQ9e3RvcDowLGxlZnQ6MH0sZWxlbT10aGlzWzBdO2lmKGpRdWVyeS5jc3MoZWxlbSwicG9zaXRpb24iKT09PSJmaXhlZCIpe29mZnNldD1lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO31lbHNle29mZnNldFBhcmVudD10aGlzLm9mZnNldFBhcmVudCgpO29mZnNldD10aGlzLm9mZnNldCgpO2lmKCFqUXVlcnkubm9kZU5hbWUob2Zmc2V0UGFyZW50WzBdLCJodG1sIikpe3BhcmVudE9mZnNldD1vZmZzZXRQYXJlbnQub2Zmc2V0KCk7fQotcGFyZW50T2Zmc2V0LnRvcCs9alF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sImJvcmRlclRvcFdpZHRoIix0cnVlKTtwYXJlbnRPZmZzZXQubGVmdCs9alF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sImJvcmRlckxlZnRXaWR0aCIsdHJ1ZSk7fQotcmV0dXJue3RvcDpvZmZzZXQudG9wLXBhcmVudE9mZnNldC50b3AtalF1ZXJ5LmNzcyhlbGVtLCJtYXJnaW5Ub3AiLHRydWUpLGxlZnQ6b2Zmc2V0LmxlZnQtcGFyZW50T2Zmc2V0LmxlZnQtalF1ZXJ5LmNzcyhlbGVtLCJtYXJnaW5MZWZ0Iix0cnVlKX07fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgb2Zmc2V0UGFyZW50PXRoaXMub2Zmc2V0UGFyZW50fHxkb2NFbGVtO3doaWxlKG9mZnNldFBhcmVudCYmKCFqUXVlcnkubm9kZU5hbWUob2Zmc2V0UGFyZW50LCJodG1sIikmJmpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50LCJwb3NpdGlvbiIpPT09InN0YXRpYyIpKXtvZmZzZXRQYXJlbnQ9b2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDt9Ci1yZXR1cm4gb2Zmc2V0UGFyZW50fHxkb2NFbGVtO30pO319KTtqUXVlcnkuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihtZXRob2QscHJvcCl7dmFyIHRvcD0vWS8udGVzdChwcm9wKTtqUXVlcnkuZm5bbWV0aG9kXT1mdW5jdGlvbih2YWwpe3JldHVybiBhY2Nlc3ModGhpcyxmdW5jdGlvbihlbGVtLG1ldGhvZCx2YWwpe3ZhciB3aW49Z2V0V2luZG93KGVsZW0pO2lmKHZhbD09PXVuZGVmaW5lZCl7cmV0dXJuIHdpbj8ocHJvcCBpbiB3aW4pP3dpbltwcm9wXTp3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W21ldGhvZF06ZWxlbVttZXRob2RdO30KLWlmKHdpbil7d2luLnNjcm9sbFRvKCF0b3A/dmFsOmpRdWVyeSh3aW4pLnNjcm9sbExlZnQoKSx0b3A/dmFsOmpRdWVyeSh3aW4pLnNjcm9sbFRvcCgpKTt9ZWxzZXtlbGVtW21ldGhvZF09dmFsO319LG1ldGhvZCx2YWwsYXJndW1lbnRzLmxlbmd0aCxudWxsKTt9O30pO2pRdWVyeS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGkscHJvcCl7alF1ZXJ5LmNzc0hvb2tzW3Byb3BdPWFkZEdldEhvb2tJZihzdXBwb3J0LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZWxlbSxjb21wdXRlZCl7aWYoY29tcHV0ZWQpe2NvbXB1dGVkPWN1ckNTUyhlbGVtLHByb3ApO3JldHVybiBybnVtbm9ucHgudGVzdChjb21wdXRlZCk/alF1ZXJ5KGVsZW0pLnBvc2l0aW9uKClbcHJvcF0rInB4Ijpjb21wdXRlZDt9fSk7fSk7alF1ZXJ5LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihuYW1lLHR5cGUpe2pRdWVyeS5lYWNoKHtwYWRkaW5nOiJpbm5lciIrbmFtZSxjb250ZW50OnR5cGUsIiI6Im91dGVyIituYW1lfSxmdW5jdGlvbihkZWZhdWx0RXh0cmEsZnVuY05hbWUpe2pRdWVyeS5mbltmdW5jTmFtZV09ZnVuY3Rpb24obWFyZ2luLHZhbHVlKXt2YXIgY2hhaW5hYmxlPWFyZ3VtZW50cy5sZW5ndGgmJihkZWZhdWx0RXh0cmF8fHR5cGVvZiBtYXJnaW4hPT0iYm9vbGVhbiIpLGV4dHJhPWRlZmF1bHRFeHRyYXx8KG1hcmdpbj09PXRydWV8fHZhbHVlPT09dHJ1ZT8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIGFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGVsZW0sdHlwZSx2YWx1ZSl7dmFyIGRvYztpZihqUXVlcnkuaXNXaW5kb3coZWxlbSkpe3JldHVybiBlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IituYW1lXTt9Ci1pZihlbGVtLm5vZGVUeXBlPT09OSl7ZG9jPWVsZW0uZG9jdW1lbnRFbGVtZW50O3JldHVybiBNYXRoLm1heChlbGVtLmJvZHlbInNjcm9sbCIrbmFtZV0sZG9jWyJzY3JvbGwiK25hbWVdLGVsZW0uYm9keVsib2Zmc2V0IituYW1lXSxkb2NbIm9mZnNldCIrbmFtZV0sZG9jWyJjbGllbnQiK25hbWVdKTt9Ci1yZXR1cm4gdmFsdWU9PT11bmRlZmluZWQ/alF1ZXJ5LmNzcyhlbGVtLHR5cGUsZXh0cmEpOmpRdWVyeS5zdHlsZShlbGVtLHR5cGUsdmFsdWUsZXh0cmEpO30sdHlwZSxjaGFpbmFibGU/bWFyZ2luOnVuZGVmaW5lZCxjaGFpbmFibGUsbnVsbCk7fTt9KTt9KTtqUXVlcnkuZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aDt9O2pRdWVyeS5mbi5hbmRTZWxmPWpRdWVyeS5mbi5hZGRCYWNrO2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4galF1ZXJ5O30pO30KLXZhcgotX2pRdWVyeT13aW5kb3cualF1ZXJ5LF8kPXdpbmRvdy4kO2pRdWVyeS5ub0NvbmZsaWN0PWZ1bmN0aW9uKGRlZXApe2lmKHdpbmRvdy4kPT09alF1ZXJ5KXt3aW5kb3cuJD1fJDt9Ci1pZihkZWVwJiZ3aW5kb3cualF1ZXJ5PT09alF1ZXJ5KXt3aW5kb3cualF1ZXJ5PV9qUXVlcnk7fQotcmV0dXJuIGpRdWVyeTt9O2lmKHR5cGVvZiBub0dsb2JhbD09PXN0cnVuZGVmaW5lZCl7d2luZG93LmpRdWVyeT13aW5kb3cuJD1qUXVlcnk7fQotcmV0dXJuIGpRdWVyeTt9KSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9zaXRlL2hvbWUvanMvanF1ZXJ5LTEuMTIuNC5taW4uanMgYi9kb2NzL3NpdGUvaG9tZS9qcy9qcXVlcnktMS4xMi40Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODM2NDc1Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zaXRlL2hvbWUvanMvanF1ZXJ5LTEuMTIuNC5taW4uanMKQEAgLTAsMCArMSw1IEBACisvKiEgalF1ZXJ5IHYxLjEyLjQgfCAoYykgalF1ZXJ5IEZvdW5kYXRpb24gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKyFmdW5jdGlvbihhLGIpeyJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPWEuZG9jdW1lbnQ/YihhLCEwKTpmdW5jdGlvbihhKXtpZighYS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gYihhKX06YihhKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1jLnNsaWNlLGY9Yy5jb25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWkudG9TdHJpbmcsaz1pLmhhc093blByb3BlcnR5LGw9e30sbT0iMS4xMi40IixuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBuLmZuLmluaXQoYSxiKX0sbz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscD0vXi1tcy0vLHE9Ly0oW1xkYS16XSkvZ2kscj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O24uZm49bi5wcm90b3R5cGU9e2pxdWVyeTptLGNvbnN0cnVjdG9yOm4sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBlLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOmUuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPW4ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZWFjaCh0aGlzLGEpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4ubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmxlbmd0aCxjPSthKygwPmE/YjowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYz49MCYmYj5jP1t0aGlzW2NdXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpnLHNvcnQ6Yy5zb3J0LHNwbGljZTpjLnNwbGljZX0sbi5leHRlbmQ9bi5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxiLGMsZCxlLGYsZz1hcmd1bWVudHNbMF18fHt9LGg9MSxpPWFyZ3VtZW50cy5sZW5ndGgsaj0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSwib2JqZWN0Ij09dHlwZW9mIGd8fG4uaXNGdW5jdGlvbihnKXx8KGc9e30pLGg9PT1pJiYoZz10aGlzLGgtLSk7aT5oO2grKylpZihudWxsIT0oZT1hcmd1bWVudHNbaF0pKWZvcihkIGluIGUpYT1nW2RdLGM9ZVtkXSxnIT09YyYmKGomJmMmJihuLmlzUGxhaW5PYmplY3QoYyl8fChiPW4uaXNBcnJheShjKSkpPyhiPyhiPSExLGY9YSYmbi5pc0FycmF5KGEpP2E6W10pOmY9YSYmbi5pc1BsYWluT2JqZWN0KGEpP2E6e30sZ1tkXT1uLmV4dGVuZChqLGYsYykpOnZvaWQgMCE9PWMmJihnW2RdPWMpKTtyZXR1cm4gZ30sbi5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKG0rTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PW4udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4iYXJyYXkiPT09bi50eXBlKGEpfSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YSYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXt2YXIgYj1hJiZhLnRvU3RyaW5nKCk7cmV0dXJuIW4uaXNBcnJheShhKSYmYi1wYXJzZUZsb2F0KGIpKzE+PTB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7Zm9yKGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtpZighYXx8Im9iamVjdCIhPT1uLnR5cGUoYSl8fGEubm9kZVR5cGV8fG4uaXNXaW5kb3coYSkpcmV0dXJuITE7dHJ5e2lmKGEuY29uc3RydWN0b3ImJiFrLmNhbGwoYSwiY29uc3RydWN0b3IiKSYmIWsuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKGMpe3JldHVybiExfWlmKCFsLm93bkZpcnN0KWZvcihiIGluIGEpcmV0dXJuIGsuY2FsbChhLGIpO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxrLmNhbGwoYSxiKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT9hKyIiOiJvYmplY3QiPT10eXBlb2YgYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGE/aVtqLmNhbGwoYSldfHwib2JqZWN0Ijp0eXBlb2YgYX0sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZuLnRyaW0oYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UocCwibXMtIikucmVwbGFjZShxLHIpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTA7aWYocyhhKSl7Zm9yKGM9YS5sZW5ndGg7Yz5kO2QrKylpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoZCBpbiBhKWlmKGIuY2FsbChhW2RdLGQsYVtkXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8iIjooYSsiIikucmVwbGFjZShvLCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8W107cmV0dXJuIG51bGwhPWEmJihzKE9iamVjdChhKSk/bi5tZXJnZShjLCJzdHJpbmciPT10eXBlb2YgYT9bYV06YSk6Zy5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKGgpcmV0dXJuIGguY2FsbChiLGEsYyk7Zm9yKGQ9Yi5sZW5ndGgsYz1jPzA+Yz9NYXRoLm1heCgwLGQrYyk6YzowO2Q+YztjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz0rYi5sZW5ndGgsZD0wLGU9YS5sZW5ndGg7d2hpbGUoYz5kKWFbZSsrXT1iW2QrK107aWYoYyE9PWMpd2hpbGUodm9pZCAwIT09YltkXSlhW2UrK109YltkKytdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGc9MCxoPVtdO2lmKHMoYSkpZm9yKGQ9YS5sZW5ndGg7ZD5nO2crKyllPWIoYVtnXSxnLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihnIGluIGEpZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGYuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGImJihmPWFbYl0sYj1hLGE9Ziksbi5pc0Z1bmN0aW9uKGEpPyhjPWUuY2FsbChhcmd1bWVudHMsMiksZD1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGJ8fHRoaXMsYy5jb25jYXQoZS5jYWxsKGFyZ3VtZW50cykpKX0sZC5ndWlkPWEuZ3VpZD1hLmd1aWR8fG4uZ3VpZCsrLGQpOnZvaWQgMH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSxzdXBwb3J0Omx9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYobi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJhdG9yXSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2lbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gcyhhKXt2YXIgYj0hIWEmJiJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2EoKSx6PWdhKCksQT1nYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49IlxcWyIrTCsiKigiK00rIikoPzoiK0wrIiooWypeJHwhfl0/PSkiK0wrIiooPzonKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcInwoIitNKyIpKXwpIitMKyIqXFxdIixPPSI6KCIrTSsiKSg/OlxcKCgoJygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCIpfCgoPzpcXFxcLnxbXlxcXFwoKVtcXF1dfCIrTisiKSopfC4qKVxcKXwpIixQPW5ldyBSZWdFeHAoTCsiKyIsImciKSxRPW5ldyBSZWdFeHAoIl4iK0wrIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrTCsiKyQiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIqLCIrTCsiKiIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKihbPit+XXwiK0wrIikiK0wrIioiKSxUPW5ldyBSZWdFeHAoIj0iK0wrIiooW15cXF0nXCJdKj8pIitMKyIqXFxdIiwiZyIpLFU9bmV3IFJlZ0V4cChPKSxWPW5ldyBSZWdFeHAoIl4iK00rIiQiKSxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK04pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitPKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWT0vXmhcZCQvaSxaPS9eW157XStce1xzKlxbbmF0aXZlIFx3LywkPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFwvZyxiYT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK0wrIj98KCIrTCsiKXwuKSIsImlnIiksY2E9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPSIweCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGRhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3PWImJmIub3duZXJEb2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10sInN0cmluZyIhPXR5cGVvZiBhfHwhYXx8MSE9PXgmJjkhPT14JiYxMSE9PXgpcmV0dXJuIGQ7aWYoIWUmJigoYj9iLm93bmVyRG9jdW1lbnR8fGI6dikhPT1uJiZtKGIpLGI9Ynx8bixwKSl7aWYoMTEhPT14JiYobz0kLmV4ZWMoYSkpKWlmKGY9b1sxXSl7aWYoOT09PXgpe2lmKCEoaj1iLmdldEVsZW1lbnRCeUlkKGYpKSlyZXR1cm4gZDtpZihqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZSBpZih3JiYoaj13LmdldEVsZW1lbnRCeUlkKGYpKSYmdChiLGopJiZqLmlkPT09ZilyZXR1cm4gZC5wdXNoKGopLGR9ZWxzZXtpZihvWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoZj1vWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZikpLGR9aWYoYy5xc2EmJiFBW2ErIiAiXSYmKCFxfHwhcS50ZXN0KGEpKSl7aWYoMSE9PXgpdz1iLHM9YTtlbHNlIGlmKCJvYmplY3QiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/az1rLnJlcGxhY2UoYWEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLGs9dSkscj1nKGEpLGg9ci5sZW5ndGgsbD1WLnRlc3Qoayk/IiMiK2s6IltpZD0nIitrKyInXSI7d2hpbGUoaC0tKXJbaF09bCsiICIrcWEocltoXSk7cz1yLmpvaW4oIiwiKSx3PV8udGVzdChhKSYmb2EoYi5wYXJlbnROb2RlKXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbChzKSksZH1jYXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gaShhLnJlcGxhY2UoUSwiJDEiKSxiLGQsZSl9ZnVuY3Rpb24gZ2EoKXt2YXIgYT1bXTtmdW5jdGlvbiBiKGMsZSl7cmV0dXJuIGEucHVzaChjKyIgIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrIiAiXT1lfXJldHVybiBifWZ1bmN0aW9uIGhhKGEpe3JldHVybiBhW3VdPSEwLGF9ZnVuY3Rpb24gaWEoYSl7dmFyIGI9bi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsfX1mdW5jdGlvbiBqYShhLGIpe3ZhciBjPWEuc3BsaXQoInwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YyYmYi50eXBlPT09YX19ZnVuY3Rpb24gbWEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PWN8fCJidXR0b24iPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBoYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmF9Yz1mYS5zdXBwb3J0PXt9LGY9ZmEuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9YSYmKGEub3duZXJEb2N1bWVudHx8YSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiPyJIVE1MIiE9PWIubm9kZU5hbWU6ITF9LG09ZmEuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZSxnPWE/YS5vd25lckRvY3VtZW50fHxhOnY7cmV0dXJuIGchPT1uJiY5PT09Zy5ub2RlVHlwZSYmZy5kb2N1bWVudEVsZW1lbnQ/KG49ZyxvPW4uZG9jdW1lbnRFbGVtZW50LHA9IWYobiksKGU9bi5kZWZhdWx0VmlldykmJmUudG9wIT09ZSYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixkYSkpLGMuYXR0cmlidXRlcz1pYShmdW5jdGlvbihhKXtyZXR1cm4gYS5jbGFzc05hbWU9ImkiLCFhLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVoudGVzdChuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGMuZ2V0QnlJZD1pYShmdW5jdGlvbihhKXtyZXR1cm4gby5hcHBlbmRDaGlsZChhKS5pZD11LCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZSh1KS5sZW5ndGh9KSxjLmdldEJ5SWQ/KGQuZmluZC5JRD1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifX0pOihkZWxldGUgZC5maW5kLklELGQuZmlsdGVyLklEPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPSJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGVOb2RlJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZT9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpOmMucXNhP2IucXVlcnlTZWxlY3RvckFsbChhKTp2b2lkIDB9OmZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPTAsZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKCIqIj09PWEpe3doaWxlKGM9ZltlKytdKTE9PT1jLm5vZGVUeXBlJiZkLnB1c2goYyk7cmV0dXJuIGR9cmV0dXJuIGZ9LGQuZmluZC5DTEFTUz1jLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGEsYil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT1aLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD0iPGEgaWQ9JyIrdSsiJz48L2E+PHNlbGVjdCBpZD0nIit1KyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGlhKGZ1bmN0aW9uKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPVoudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmaWEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLE8pfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHxaLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PW58fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1uPy0xOmI9PT1uPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGthKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQrKztyZXR1cm4gZD9rYShnW2RdLGhbZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0sZmEubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFQsIj0nJDEnXSIpLGMubWF0Y2hlc1NlbGVjdG9yJiZwJiYhQVtiKyIgIl0mJighcnx8IXIudGVzdChiKSkmJighcXx8IXEudGVzdChiKSkpdHJ5e3ZhciBkPXMuY2FsbChhLGIpO2lmKGR8fGMuZGlzY29ubmVjdGVkTWF0Y2h8fGEuZG9jdW1lbnQmJjExIT09YS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gZH1jYXRjaChlKXt9cmV0dXJuIGZhKGIsbixudWxsLFthXSkubGVuZ3RoPjB9LGZhLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLHQoYSxiKX0sZmEuYXR0cj1mdW5jdGlvbihhLGIpeyhhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKTt2YXIgZT1kLmF0dHJIYW5kbGVbYi50b0xvd2VyQ2FzZSgpXSxmPWUmJkQuY2FsbChkLmF0dHJIYW5kbGUsYi50b0xvd2VyQ2FzZSgpKT9lKGEsYiwhcCk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1mP2Y6Yy5hdHRyaWJ1dGVzfHwhcD9hLmdldEF0dHJpYnV0ZShiKTooZj1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZmLnNwZWNpZmllZD9mLnZhbHVlOm51bGx9LGZhLmVycm9yPWZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithKX0sZmEudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz0iIixkPTAsZj1hLm5vZGVUeXBlO2lmKGYpe2lmKDE9PT1mfHw5PT09Znx8MTE9PT1mKXtpZigic3RyaW5nIj09dHlwZW9mIGEudGV4dENvbnRlbnQpcmV0dXJuIGEudGV4dENvbnRlbnQ7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWMrPWUoYSl9ZWxzZSBpZigzPT09Znx8ND09PWYpcmV0dXJuIGEubm9kZVZhbHVlfWVsc2Ugd2hpbGUoYj1hW2QrK10pYys9ZShiKTtyZXR1cm4gY30sZD1mYS5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpoYSxtYXRjaDpXLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnJlcGxhY2UoYmEsY2EpLGFbM109KGFbM118fGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGJhLGNhKSwifj0iPT09YVsyXSYmKGFbM109IiAiK2FbM10rIiAiKSxhLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZmEuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooImV2ZW4iPT09YVszXXx8Im9kZCI9PT1hWzNdKSksYVs1XT0rKGFbN10rYVs4XXx8Im9kZCI9PT1hWzNdKSk6YVszXSYmZmEuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFcuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8IiI6YyYmVS50ZXN0KGMpJiYoYj1nKGMsITApKSYmKGI9Yy5pbmRleE9mKCIpIixjLmxlbmd0aC1iKS1jLmxlbmd0aCkmJihhWzBdPWFbMF0uc2xpY2UoMCxiKSxhWzJdPWMuc2xpY2UoMCxiKSksYS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthKyIgIl07cmV0dXJuIGJ8fChiPW5ldyBSZWdFeHAoIihefCIrTCsiKSIrYSsiKCIrTCsifCQpIikpJiZ5KGEsZnVuY3Rpb24oYSl7cmV0dXJuIGIudGVzdCgic3RyaW5nIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3JldHVybiBudWxsPT1lPyIhPSI9PT1iOmI/KGUrPSIiLCI9Ij09PWI/ZT09PWM6IiE9Ij09PWI/ZSE9PWM6Il49Ij09PWI/YyYmMD09PWUuaW5kZXhPZihjKToiKj0iPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6IiQ9Ij09PWI/YyYmZS5zbGljZSgtYy5sZW5ndGgpPT09Yzoifj0iPT09Yj8oIiAiK2UucmVwbGFjZShQLCIgIikrIiAiKS5pbmRleE9mKGMpPi0xOiJ8PSI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmPSJudGgiIT09YS5zbGljZSgwLDMpLGc9Imxhc3QiIT09YS5zbGljZSgtNCksaD0ib2YtdHlwZSI9PT1iO3JldHVybiAxPT09ZCYmMD09PWU/ZnVuY3Rpb24oYSl7cmV0dXJuISFhLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGIsYyxpKXt2YXIgaixrLGwsbSxuLG8scD1mIT09Zz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPSJvbmx5Ij09PWEmJiFvJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKG89W2c/cS5maXJzdENoaWxkOnEubGFzdENoaWxkXSxnJiZzKXttPXEsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biYmalsyXSxtPW4mJnEuY2hpbGROb2Rlc1tuXTt3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigxPT09bS5ub2RlVHlwZSYmKyt0JiZtPT09Yil7a1thXT1bdyxuLHRdO2JyZWFrfX1lbHNlIGlmKHMmJihtPWIsbD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksaj1rW2FdfHxbXSxuPWpbMF09PT13JiZqWzFdLHQ9biksdD09PSExKXdoaWxlKG09KytuJiZtJiZtW3BdfHwodD1uPTApfHxvLnBvcCgpKWlmKChoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpJiYrK3QmJihzJiYobD1tW3VdfHwobVt1XT17fSksaz1sW20udW5pcXVlSURdfHwobFttLnVuaXF1ZUlEXT17fSksa1thXT1bdyx0XSksbT09PWIpKWJyZWFrO3JldHVybiB0LT1lLHQ9PT1kfHx0JWQ9PT0wJiZ0L2Q+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGEsYil7dmFyIGMsZT1kLnBzZXVkb3NbYV18fGQuc2V0RmlsdGVyc1thLnRvTG93ZXJDYXNlKCldfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLCIiLGJdLGQuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShhLnRvTG93ZXJDYXNlKCkpP2hhKGZ1bmN0aW9uKGEsYyl7dmFyIGQsZj1lKGEsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pZD1KKGEsZltnXSksYVtkXT0hKGNbZF09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLDAsYyl9KTplfX0scHNldWRvczp7bm90OmhhKGZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM9W10sZD1oKGEucmVwbGFjZShRLCIkMSIpKTtyZXR1cm4gZFt1XT9oYShmdW5jdGlvbihhLGIsYyxlKXt2YXIgZixnPWQoYSxudWxsLGUsW10pLGg9YS5sZW5ndGg7d2hpbGUoaC0tKShmPWdbaF0pJiYoYVtoXT0hKGJbaF09ZikpfSk6ZnVuY3Rpb24oYSxlLGYpe3JldHVybiBiWzBdPWEsZChiLG51bGwsZixjKSxiWzBdPW51bGwsIWMucG9wKCl9fSksaGFzOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gZmEoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczpoYShmdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoYmEsY2EpLGZ1bmN0aW9uKGIpe3JldHVybihiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dHx8ZShiKSkuaW5kZXhPZihhKT4tMX19KSxsYW5nOmhhKGZ1bmN0aW9uKGEpe3JldHVybiBWLnRlc3QoYXx8IiIpfHxmYS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIithKSxhPWEucmVwbGFjZShiYSxjYSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXt2YXIgYztkbyBpZihjPXA/Yi5sYW5nOmIuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxiLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhKyItIik7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmMT09PWIubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihiKXt2YXIgYz1hLmxvY2F0aW9uJiZhLmxvY2F0aW9uLmhhc2g7cmV0dXJuIGMmJmMuc2xpY2UoMSk9PT1iLmlkfSxyb290OmZ1bmN0aW9uKGEpe3JldHVybiBhPT09b30sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1uLmFjdGl2ZUVsZW1lbnQmJighbi5oYXNGb2N1c3x8bi5oYXNGb2N1cygpKSYmISEoYS50eXBlfHxhLmhyZWZ8fH5hLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmISFhLmNoZWNrZWR8fCJvcHRpb24iPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09YiYmImJ1dHRvbiI9PT1hLnR5cGV8fCJidXR0b24iPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4iaW5wdXQiPT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1hLnR5cGUmJihudWxsPT0oYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09Yi50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6bmEoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Om5hKGZ1bmN0aW9uKGEsYil7cmV0dXJuW2ItMV19KSxlcTpuYShmdW5jdGlvbihhLGIsYyl7cmV0dXJuWzA+Yz9jK2I6Y119KSxldmVuOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTA7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksb2RkOm5hKGZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yj5jO2MrPTIpYS5wdXNoKGMpO3JldHVybiBhfSksbHQ6bmEoZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZD0wPmM/YytiOmM7LS1kPj0wOylhLnB1c2goZCk7cmV0dXJuIGF9KSxndDpuYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzsrK2Q8YjspYS5wdXNoKGQpO3JldHVybiBhfSl9fSxkLnBzZXVkb3MubnRoPWQucHNldWRvcy5lcTtmb3IoYiBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlkLnBzZXVkb3NbYl09bGEoYik7Zm9yKGIgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlkLnBzZXVkb3NbYl09bWEoYik7ZnVuY3Rpb24gcGEoKXt9cGEucHJvdG90eXBlPWQuZmlsdGVycz1kLnBzZXVkb3MsZC5zZXRGaWx0ZXJzPW5ldyBwYSxnPWZhLnRva2VuaXplPWZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz16W2ErIiAiXTtpZihrKXJldHVybiBiPzA6ay5zbGljZSgwKTtoPWEsaT1bXSxqPWQucHJlRmlsdGVyO3doaWxlKGgpe2MmJiEoZT1SLmV4ZWMoaCkpfHwoZSYmKGg9aC5zbGljZShlWzBdLmxlbmd0aCl8fGgpLGkucHVzaChmPVtdKSksYz0hMSwoZT1TLmV4ZWMoaCkpJiYoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZVswXS5yZXBsYWNlKFEsIiAiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1XW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBxYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9IiI7Yz5iO2IrKylkKz1hW2JdLnZhbHVlO3JldHVybiBkfWZ1bmN0aW9uIHJhKGEsYixjKXt2YXIgZD1iLmRpcixlPWMmJiJwYXJlbnROb2RlIj09PWQsZj14Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGYpe3doaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSlyZXR1cm4gYShiLGMsZil9OmZ1bmN0aW9uKGIsYyxnKXt2YXIgaCxpLGosaz1bdyxmXTtpZihnKXt3aGlsZShiPWJbZF0paWYoKDE9PT1iLm5vZGVUeXBlfHxlKSYmYShiLGMsZykpcmV0dXJuITB9ZWxzZSB3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpe2lmKGo9Ylt1XXx8KGJbdV09e30pLGk9altiLnVuaXF1ZUlEXXx8KGpbYi51bmlxdWVJRF09e30pLChoPWlbZF0pJiZoWzBdPT09dyYmaFsxXT09PWYpcmV0dXJuIGtbMl09aFsyXTtpZihpW2RdPWssa1syXT1hKGIsYyxnKSlyZXR1cm4hMH19fWZ1bmN0aW9uIHNhKGEpe3JldHVybiBhLmxlbmd0aD4xP2Z1bmN0aW9uKGIsYyxkKXt2YXIgZT1hLmxlbmd0aDt3aGlsZShlLS0paWYoIWFbZV0oYixjLGQpKXJldHVybiExO3JldHVybiEwfTphWzBdfWZ1bmN0aW9uIHRhKGEsYixjKXtmb3IodmFyIGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspZmEoYSxiW2RdLGMpO3JldHVybiBjfWZ1bmN0aW9uIHVhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1udWxsIT1iO2k+aDtoKyspKGY9YVtoXSkmJihjJiYhYyhmLGQsZSl8fChnLnB1c2goZiksaiYmYi5wdXNoKGgpKSk7cmV0dXJuIGd9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFt1XSYmKGQ9dmEoZCkpLGUmJiFlW3VdJiYoZT12YShlLGYpKSxoYShmdW5jdGlvbihmLGcsaCxpKXt2YXIgaixrLGwsbT1bXSxuPVtdLG89Zy5sZW5ndGgscD1mfHx0YShifHwiKiIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp1YShwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dWEocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlWyIgIl0saT1nPzE6MCxrPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yn0saCwhMCksbD1yYShmdW5jdGlvbihhKXtyZXR1cm4gSihiLGEpPi0xfSxoLCEwKSxtPVtmdW5jdGlvbihhLGMsZCl7dmFyIGU9IWcmJihkfHxjIT09ail8fCgoYj1jKS5ub2RlVHlwZT9rKGEsYyxkKTpsKGEsYyxkKSk7cmV0dXJuIGI9bnVsbCxlfV07Zj5pO2krKylpZihjPWQucmVsYXRpdmVbYVtpXS50eXBlXSltPVtyYShzYShtKSxjKV07ZWxzZXtpZihjPWQuZmlsdGVyW2FbaV0udHlwZV0uYXBwbHkobnVsbCxhW2ldLm1hdGNoZXMpLGNbdV0pe2ZvcihlPSsraTtmPmU7ZSsrKWlmKGQucmVsYXRpdmVbYVtlXS50eXBlXSlicmVhaztyZXR1cm4gdmEoaT4xJiZzYShtKSxpPjEmJnFhKGEuc2xpY2UoMCxpLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09YVtpLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoUSwiJDEiKSxjLGU+aSYmd2EoYS5zbGljZShpLGUpKSxmPmUmJndhKGE9YS5zbGljZShlKSksZj5lJiZxYShhKSl9bS5wdXNoKGMpfXJldHVybiBzYShtKX1mdW5jdGlvbiB4YShhLGIpe3ZhciBjPWIubGVuZ3RoPjAsZT1hLmxlbmd0aD4wLGY9ZnVuY3Rpb24oZixnLGgsaSxrKXt2YXIgbCxvLHEscj0wLHM9IjAiLHQ9ZiYmW10sdT1bXSx2PWoseD1mfHxlJiZkLmZpbmQuVEFHKCIqIixrKSx5PXcrPW51bGw9PXY/MTpNYXRoLnJhbmRvbSgpfHwuMSx6PXgubGVuZ3RoO2ZvcihrJiYoaj1nPT09bnx8Z3x8ayk7cyE9PXomJm51bGwhPShsPXhbc10pO3MrKyl7aWYoZSYmbCl7bz0wLGd8fGwub3duZXJEb2N1bWVudD09PW58fChtKGwpLGg9IXApO3doaWxlKHE9YVtvKytdKWlmKHEobCxnfHxuLGgpKXtpLnB1c2gobCk7YnJlYWt9ayYmKHc9eSl9YyYmKChsPSFxJiZsKSYmci0tLGYmJnQucHVzaChsKSl9aWYocis9cyxjJiZzIT09cil7bz0wO3doaWxlKHE9YltvKytdKXEodCx1LGcsaCk7aWYoZil7aWYocj4wKXdoaWxlKHMtLSl0W3NdfHx1W3NdfHwodVtzXT1GLmNhbGwoaSkpO3U9dWEodSl9SC5hcHBseShpLHUpLGsmJiFmJiZ1Lmxlbmd0aD4wJiZyK2IubGVuZ3RoPjEmJmZhLnVuaXF1ZVNvcnQoaSl9cmV0dXJuIGsmJih3PXksaj12KSx0fTtyZXR1cm4gYz9oYShmKTpmfXJldHVybiBoPWZhLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1BW2ErIiAiXTtpZighZil7Ynx8KGI9ZyhhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj13YShiW2NdKSxmW3VdP2QucHVzaChmKTplLnB1c2goZik7Zj1BKGEseGEoZSxkKSksZi5zZWxlY3Rvcj1hfXJldHVybiBmfSxpPWZhLnNlbGVjdD1mdW5jdGlvbihhLGIsZSxmKXt2YXIgaSxqLGssbCxtLG49ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiYiSUQiPT09KGs9alswXSkudHlwZSYmYy5nZXRCeUlkJiY5PT09Yi5ub2RlVHlwZSYmcCYmZC5yZWxhdGl2ZVtqWzFdLnR5cGVdKXtpZihiPShkLmZpbmQuSUQoay5tYXRjaGVzWzBdLnJlcGxhY2UoYmEsY2EpLGIpfHxbXSlbMF0sIWIpcmV0dXJuIGU7biYmKGI9Yi5wYXJlbnROb2RlKSxhPWEuc2xpY2Uoai5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1XLm5lZWRzQ29udGV4dC50ZXN0KGEpPzA6ai5sZW5ndGg7d2hpbGUoaS0tKXtpZihrPWpbaV0sZC5yZWxhdGl2ZVtsPWsudHlwZV0pYnJlYWs7aWYoKG09ZC5maW5kW2xdKSYmKGY9bShrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksXy50ZXN0KGpbMF0udHlwZSkmJm9hKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZxYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSwhYnx8Xy50ZXN0KGEpJiZvYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGphKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGphKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGlhKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxqYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxmYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlU29ydD1uLnVuaXF1ZT10LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1MRG9jPXQuaXNYTUwsbi5jb250YWlucz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sdj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHg9L148KFtcdy1dKylccypcLz8+KD86PFwvXDE+fCkkLyx5PS9eLlteOiNcW1wuLF0qJC87ZnVuY3Rpb24geihhLGIsYyl7aWYobi5pc0Z1bmN0aW9uKGIpKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiEhYi5jYWxsKGEsZCxhKSE9PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWIhPT1jfSk7aWYoInN0cmluZyI9PXR5cGVvZiBiKXtpZih5LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBuLmluQXJyYXkoYSxiKT4tMSE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksMT09PWIubGVuZ3RoJiYxPT09ZC5ub2RlVHlwZT9uLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGQsYSk/W2RdOltdOm4uZmluZC5tYXRjaGVzKGEsbi5ncmVwKGIsZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfSkpfSxuLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYixjPVtdLGQ9dGhpcyxlPWQubGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2U+YjtiKyspaWYobi5jb250YWlucyhkW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7ZT5iO2IrKyluLmZpbmQoYSxkW2JdLGMpO3JldHVybiBjPXRoaXMucHVzaFN0YWNrKGU+MT9uLnVuaXF1ZShjKTpjKSxjLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcisiICIrYTphLGN9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeih0aGlzLGF8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEheih0aGlzLCJzdHJpbmciPT10eXBlb2YgYSYmdy50ZXN0KGEpP24oYSk6YXx8W10sITEpLmxlbmd0aH19KTt2YXIgQSxCPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKikpJC8sQz1uLmZuLmluaXQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBlLGY7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYz1jfHxBLCJzdHJpbmciPT10eXBlb2YgYSl7aWYoZT0iPCI9PT1hLmNoYXJBdCgwKSYmIj4iPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVsbF06Qi5leGVjKGEpLCFlfHwhZVsxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fGMpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGVbMV0pe2lmKGI9YiBpbnN0YW5jZW9mIG4/YlswXTpiLG4ubWVyZ2UodGhpcyxuLnBhcnNlSFRNTChlWzFdLGImJmIubm9kZVR5cGU/Yi5vd25lckRvY3VtZW50fHxiOmQsITApKSx4LnRlc3QoZVsxXSkmJm4uaXNQbGFpbk9iamVjdChiKSlmb3IoZSBpbiBiKW4uaXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKGJbZV0pOnRoaXMuYXR0cihlLGJbZV0pO3JldHVybiB0aGlzfWlmKGY9ZC5nZXRFbGVtZW50QnlJZChlWzJdKSxmJiZmLnBhcmVudE5vZGUpe2lmKGYuaWQhPT1lWzJdKXJldHVybiBBLmZpbmQoYSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPWZ9cmV0dXJuIHRoaXMuY29udGV4dD1kLHRoaXMuc2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6bi5pc0Z1bmN0aW9uKGEpPyJ1bmRlZmluZWQiIT10eXBlb2YgYy5yZWFkeT9jLnJlYWR5KGEpOmEobik6KHZvaWQgMCE9PWEuc2VsZWN0b3ImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCksbi5tYWtlQXJyYXkoYSx0aGlzKSl9O0MucHJvdG90eXBlPW4uZm4sQT1uKGQpO3ZhciBEPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLEU9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07bi5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihhKXt2YXIgYixjPW4oYSx0aGlzKSxkPWMubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTA7ZD5iO2IrKylpZihuLmNvbnRhaW5zKHRoaXMsY1tiXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dy50ZXN0KGEpfHwic3RyaW5nIiE9dHlwZW9mIGE/bihhLGJ8fHRoaXMuY29udGV4dCk6MDtlPmQ7ZCsrKWZvcihjPXRoaXNbZF07YyYmYyE9PWI7Yz1jLnBhcmVudE5vZGUpaWYoYy5ub2RlVHlwZTwxMSYmKGc/Zy5pbmRleChjKT4tMToxPT09Yy5ub2RlVHlwZSYmbi5maW5kLm1hdGNoZXNTZWxlY3RvcihjLGEpKSl7Zi5wdXNoKGMpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhmLmxlbmd0aD4xP24udW5pcXVlU29ydChmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP24uaW5BcnJheSh0aGlzWzBdLG4oYSkpOm4uaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWVTb3J0KG4ubWVyZ2UodGhpcy5nZXQoKSxuKGEsYikpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWE/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pO2Z1bmN0aW9uIEYoYSxiKXtkbyBhPWFbYl07d2hpbGUoYSYmMSE9PWEubm9kZVR5cGUpO3JldHVybiBhfW4uZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmMTEhPT1iLm5vZGVUeXBlP2I6bnVsbH0scGFyZW50czpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gRihhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGEpe3JldHVybiB1KGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB1KGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLCJwcmV2aW91c1NpYmxpbmciLGMpfSxzaWJsaW5nczpmdW5jdGlvbihhKXtyZXR1cm4gdigoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHYoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihFW2FdfHwoZT1uLnVuaXF1ZVNvcnQoZSkpLEQudGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRz0vXFMrL2c7ZnVuY3Rpb24gSChhKXt2YXIgYj17fTtyZXR1cm4gbi5lYWNoKGEubWF0Y2goRyl8fFtdLGZ1bmN0aW9uKGEsYyl7YltjXT0hMH0pLGJ9bi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT0ic3RyaW5nIj09dHlwZW9mIGE/SChhKTpuLmV4dGVuZCh7fSxhKTt2YXIgYixjLGQsZSxmPVtdLGc9W10saD0tMSxpPWZ1bmN0aW9uKCl7Zm9yKGU9YS5vbmNlLGQ9Yj0hMDtnLmxlbmd0aDtoPS0xKXtjPWcuc2hpZnQoKTt3aGlsZSgrK2g8Zi5sZW5ndGgpZltoXS5hcHBseShjWzBdLGNbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2UmJihoPWYubGVuZ3RoLGM9ITEpfWEubWVtb3J5fHwoYz0hMSksYj0hMSxlJiYoZj1jP1tdOiIiKX0saj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihjJiYhYiYmKGg9Zi5sZW5ndGgtMSxnLnB1c2goYykpLGZ1bmN0aW9uIGQoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXtuLmlzRnVuY3Rpb24oYyk/YS51bmlxdWUmJmouaGFzKGMpfHxmLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09bi50eXBlKGMpJiZkKGMpfSl9KGFyZ3VtZW50cyksYyYmIWImJmkoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIG4uZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oYSxiKXt2YXIgYzt3aGlsZSgoYz1uLmluQXJyYXkoYixmLGMpKT4tMSlmLnNwbGljZShjLDEpLGg+PWMmJmgtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihhKXtyZXR1cm4gYT9uLmluQXJyYXkoYSxmKT4tMTpmLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBmJiYoZj1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBlPWc9W10sZj1jPSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZT0hMCxjfHxqLmRpc2FibGUoKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIGV8fChjPWN8fFtdLGM9W2EsYy5zbGljZT9jLnNsaWNlKCk6Y10sZy5wdXNoKGMpLGJ8fGkoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBqLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBqfSxuLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsbi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsbi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBuLkRlZmVycmVkKGZ1bmN0aW9uKGMpe24uZWFjaChiLGZ1bmN0aW9uKGIsZil7dmFyIGc9bi5pc0Z1bmN0aW9uKGFbYl0pJiZhW2JdO2VbZlsxXV0oZnVuY3Rpb24oKXt2YXIgYT1nJiZnLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5wcm9ncmVzcyhjLm5vdGlmeSkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpOmNbZlswXSsiV2l0aCJdKHRoaXM9PT1kP2MucHJvbWlzZSgpOnRoaXMsZz9bYV06YXJndW1lbnRzKX0pfSksYT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hP24uZXh0ZW5kKGEsZCk6ZH19LGU9e307cmV0dXJuIGQucGlwZT1kLnRoZW4sbi5lYWNoKGIsZnVuY3Rpb24oYSxmKXt2YXIgZz1mWzJdLGg9ZlszXTtkW2ZbMV1dPWcuYWRkLGgmJmcuYWRkKGZ1bmN0aW9uKCl7Yz1ofSxiWzFeYV1bMl0uZGlzYWJsZSxiWzJdWzJdLmxvY2spLGVbZlswXV09ZnVuY3Rpb24oKXtyZXR1cm4gZVtmWzBdKyJXaXRoIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdKyJXaXRoIl09Zy5maXJlV2l0aH0pLGQucHJvbWlzZShlKSxhJiZhLmNhbGwoZSxlKSxlfSx3aGVuOmZ1bmN0aW9uKGEpe3ZhciBiPTAsYz1lLmNhbGwoYXJndW1lbnRzKSxkPWMubGVuZ3RoLGY9MSE9PWR8fGEmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2Q6MCxnPTE9PT1mP2E6bi5EZWZlcnJlZCgpLGg9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXtiW2FdPXRoaXMsY1thXT1hcmd1bWVudHMubGVuZ3RoPjE/ZS5jYWxsKGFyZ3VtZW50cyk6ZCxjPT09aT9nLm5vdGlmeVdpdGgoYixjKTotLWZ8fGcucmVzb2x2ZVdpdGgoYixjKX19LGksaixrO2lmKGQ+MSlmb3IoaT1uZXcgQXJyYXkoZCksaj1uZXcgQXJyYXkoZCksaz1uZXcgQXJyYXkoZCk7ZD5iO2IrKyljW2JdJiZuLmlzRnVuY3Rpb24oY1tiXS5wcm9taXNlKT9jW2JdLnByb21pc2UoKS5wcm9ncmVzcyhoKGIsaixpKSkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCk6LS1mO3JldHVybiBmfHxnLnJlc29sdmVXaXRoKGssYyksZy5wcm9taXNlKCl9fSk7dmFyIEk7bi5mbi5yZWFkeT1mdW5jdGlvbihhKXtyZXR1cm4gbi5yZWFkeS5wcm9taXNlKCkuZG9uZShhKSx0aGlzfSxuLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oYSl7YT9uLnJlYWR5V2FpdCsrOm4ucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihhKXsoYT09PSEwPy0tbi5yZWFkeVdhaXQ6bi5pc1JlYWR5KXx8KG4uaXNSZWFkeT0hMCxhIT09ITAmJi0tbi5yZWFkeVdhaXQ+MHx8KEkucmVzb2x2ZVdpdGgoZCxbbl0pLG4uZm4udHJpZ2dlckhhbmRsZXImJihuKGQpLnRyaWdnZXJIYW5kbGVyKCJyZWFkeSIpLG4oZCkub2ZmKCJyZWFkeSIpKSkpfX0pO2Z1bmN0aW9uIEooKXtkLmFkZEV2ZW50TGlzdGVuZXI/KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixLKSk6KGQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5kZXRhY2hFdmVudCgib25sb2FkIixLKSl9ZnVuY3Rpb24gSygpeyhkLmFkZEV2ZW50TGlzdGVuZXJ8fCJsb2FkIj09PWEuZXZlbnQudHlwZXx8ImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZSkmJihKKCksbi5yZWFkeSgpKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIUkpaWYoST1uLkRlZmVycmVkKCksImNvbXBsZXRlIj09PWQucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09ZC5yZWFkeVN0YXRlJiYhZC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwpYS5zZXRUaW1lb3V0KG4ucmVhZHkpO2Vsc2UgaWYoZC5hZGRFdmVudExpc3RlbmVyKWQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSyksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixLKTtlbHNle2QuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsSyksYS5hdHRhY2hFdmVudCgib25sb2FkIixLKTt2YXIgYz0hMTt0cnl7Yz1udWxsPT1hLmZyYW1lRWxlbWVudCYmZC5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZSl7fWMmJmMuZG9TY3JvbGwmJiFmdW5jdGlvbiBmKCl7aWYoIW4uaXNSZWFkeSl7dHJ5e2MuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChiKXtyZXR1cm4gYS5zZXRUaW1lb3V0KGYsNTApfUooKSxuLnJlYWR5KCl9fSgpfXJldHVybiBJLnByb21pc2UoYil9LG4ucmVhZHkucHJvbWlzZSgpO3ZhciBMO2ZvcihMIGluIG4obCkpYnJlYWs7bC5vd25GaXJzdD0iMCI9PT1MLGwuaW5saW5lQmxvY2tOZWVkc0xheW91dD0hMSxuKGZ1bmN0aW9uKCl7dmFyIGEsYixjLGU7Yz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZSYmKGI9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3RvcDowO2xlZnQ6LTk5OTlweCIsYy5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGIuc3R5bGUuem9vbSYmKGIuc3R5bGUuY3NzVGV4dD0iZGlzcGxheTppbmxpbmU7bWFyZ2luOjA7Ym9yZGVyOjA7cGFkZGluZzoxcHg7d2lkdGg6MXB4O3pvb206MSIsbC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWE9Mz09PWIub2Zmc2V0V2lkdGgsYSYmKGMuc3R5bGUuem9vbT0xKSksYy5yZW1vdmVDaGlsZChlKSl9KSxmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5kZWxldGVFeHBhbmRvPSEwO3RyeXtkZWxldGUgYS50ZXN0fWNhdGNoKGIpe2wuZGVsZXRlRXhwYW5kbz0hMX1hPW51bGx9KCk7dmFyIE09ZnVuY3Rpb24oYSl7dmFyIGI9bi5ub0RhdGFbKGEubm9kZU5hbWUrIiAiKS50b0xvd2VyQ2FzZSgpXSxjPSthLm5vZGVUeXBlfHwxO3JldHVybiAxIT09YyYmOSE9PWM/ITE6IWJ8fGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9LE49L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gUChhLGIsYyl7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpe3ZhciBkPSJkYXRhLSIrYi5yZXBsYWNlKE8sIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoYz1hLmdldEF0dHJpYnV0ZShkKSwic3RyaW5nIj09dHlwZW9mIGMpe3RyeXtjPSJ0cnVlIj09PWM/ITA6ImZhbHNlIj09PWM/ITE6Im51bGwiPT09Yz9udWxsOitjKyIiPT09Yz8rYzpOLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6Y31jYXRjaChlKXt9bi5kYXRhKGEsYixjKX1lbHNlIGM9dm9pZCAwOworfXJldHVybiBjfWZ1bmN0aW9uIFEoYSl7dmFyIGI7Zm9yKGIgaW4gYSlpZigoImRhdGEiIT09Ynx8IW4uaXNFbXB0eU9iamVjdChhW2JdKSkmJiJ0b0pTT04iIT09YilyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBSKGEsYixkLGUpe2lmKE0oYSkpe3ZhciBmLGcsaD1uLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9uLmNhY2hlOmEsaz1pP2FbaF06YVtoXSYmaDtpZihrJiZqW2tdJiYoZXx8altrXS5kYXRhKXx8dm9pZCAwIT09ZHx8InN0cmluZyIhPXR5cGVvZiBiKXJldHVybiBrfHwoaz1pP2FbaF09Yy5wb3AoKXx8bi5ndWlkKys6aCksaltrXXx8KGpba109aT97fTp7dG9KU09OOm4ubm9vcH0pLCJvYmplY3QiIT10eXBlb2YgYiYmImZ1bmN0aW9uIiE9dHlwZW9mIGJ8fChlP2pba109bi5leHRlbmQoaltrXSxiKTpqW2tdLmRhdGE9bi5leHRlbmQoaltrXS5kYXRhLGIpKSxnPWpba10sZXx8KGcuZGF0YXx8KGcuZGF0YT17fSksZz1nLmRhdGEpLHZvaWQgMCE9PWQmJihnW24uY2FtZWxDYXNlKGIpXT1kKSwic3RyaW5nIj09dHlwZW9mIGI/KGY9Z1tiXSxudWxsPT1mJiYoZj1nW24uY2FtZWxDYXNlKGIpXSkpOmY9ZyxmfX1mdW5jdGlvbiBTKGEsYixjKXtpZihNKGEpKXt2YXIgZCxlLGY9YS5ub2RlVHlwZSxnPWY/bi5jYWNoZTphLGg9Zj9hW24uZXhwYW5kb106bi5leHBhbmRvO2lmKGdbaF0pe2lmKGImJihkPWM/Z1toXTpnW2hdLmRhdGEpKXtuLmlzQXJyYXkoYik/Yj1iLmNvbmNhdChuLm1hcChiLG4uY2FtZWxDYXNlKSk6YiBpbiBkP2I9W2JdOihiPW4uY2FtZWxDYXNlKGIpLGI9YiBpbiBkP1tiXTpiLnNwbGl0KCIgIikpLGU9Yi5sZW5ndGg7d2hpbGUoZS0tKWRlbGV0ZSBkW2JbZV1dO2lmKGM/IVEoZCk6IW4uaXNFbXB0eU9iamVjdChkKSlyZXR1cm59KGN8fChkZWxldGUgZ1toXS5kYXRhLFEoZ1toXSkpKSYmKGY/bi5jbGVhbkRhdGEoW2FdLCEwKTpsLmRlbGV0ZUV4cGFuZG98fGchPWcud2luZG93P2RlbGV0ZSBnW2hdOmdbaF09dm9pZCAwKX19fW4uZXh0ZW5kKHtjYWNoZTp7fSxub0RhdGE6eyJhcHBsZXQgIjohMCwiZW1iZWQgIjohMCwib2JqZWN0ICI6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCJ9LGhhc0RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5ub2RlVHlwZT9uLmNhY2hlW2Fbbi5leHBhbmRvXV06YVtuLmV4cGFuZG9dLCEhYSYmIVEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBSKGEsYixjKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhLGIpe3JldHVybiBTKGEsYil9LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gUihhLGIsYywhMCl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFMoYSxiLCEwKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhpcy5sZW5ndGgmJihlPW4uZGF0YShmKSwxPT09Zi5ub2RlVHlwZSYmIW4uX2RhdGEoZiwicGFyc2VkQXR0cnMiKSkpe2M9Zy5sZW5ndGg7d2hpbGUoYy0tKWdbY10mJihkPWdbY10ubmFtZSwwPT09ZC5pbmRleE9mKCJkYXRhLSIpJiYoZD1uLmNhbWVsQ2FzZShkLnNsaWNlKDUpKSxQKGYsZCxlW2RdKSkpO24uX2RhdGEoZiwicGFyc2VkQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kYXRhKHRoaXMsYSl9KTphcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kYXRhKHRoaXMsYSxiKX0pOmY/UChmLGEsbi5kYXRhKGYsYSkpOnZvaWQgMH0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsicXVldWUiLGQ9bi5fZGF0YShhLGIpLGMmJighZHx8bi5pc0FycmF5KGMpP2Q9bi5fZGF0YShhLGIsbi5tYWtlQXJyYXkoYykpOmQucHVzaChjKSksZHx8W10pOnZvaWQgMH0sZGVxdWV1ZTpmdW5jdGlvbihhLGIpe2I9Ynx8ImZ4Ijt2YXIgYz1uLnF1ZXVlKGEsYiksZD1jLmxlbmd0aCxlPWMuc2hpZnQoKSxmPW4uX3F1ZXVlSG9va3MoYSxiKSxnPWZ1bmN0aW9uKCl7bi5kZXF1ZXVlKGEsYil9OyJpbnByb2dyZXNzIj09PWUmJihlPWMuc2hpZnQoKSxkLS0pLGUmJigiZngiPT09YiYmYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIGYuc3RvcCxlLmNhbGwoYSxnLGYpKSwhZCYmZiYmZi5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGEsYil7dmFyIGM9YisicXVldWVIb29rcyI7cmV0dXJuIG4uX2RhdGEoYSxjKXx8bi5fZGF0YShhLGMse2VtcHR5Om4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe24uX3JlbW92ZURhdGEoYSxiKyJxdWV1ZSIpLG4uX3JlbW92ZURhdGEoYSxjKX0pfSl9fSksbi5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYil7dmFyIGM9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihiPWEsYT0iZngiLGMtLSksYXJndW1lbnRzLmxlbmd0aDxjP24ucXVldWUodGhpc1swXSxhKTp2b2lkIDA9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9bi5xdWV1ZSh0aGlzLGEsYik7bi5fcXVldWVIb29rcyh0aGlzLGEpLCJmeCI9PT1hJiYiaW5wcm9ncmVzcyIhPT1jWzBdJiZuLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmRlcXVldWUodGhpcyxhKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0xLGU9bi5EZWZlcnJlZCgpLGY9dGhpcyxnPXRoaXMubGVuZ3RoLGg9ZnVuY3Rpb24oKXstLWR8fGUucmVzb2x2ZVdpdGgoZixbZl0pfTsic3RyaW5nIiE9dHlwZW9mIGEmJihiPWEsYT12b2lkIDApLGE9YXx8ImZ4Ijt3aGlsZShnLS0pYz1uLl9kYXRhKGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pLGZ1bmN0aW9uKCl7dmFyIGE7bC5zaHJpbmtXcmFwQmxvY2tzPWZ1bmN0aW9uKCl7aWYobnVsbCE9YSlyZXR1cm4gYTthPSExO3ZhciBiLGMsZTtyZXR1cm4gYz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0sYyYmYy5zdHlsZT8oYj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4IixjLmFwcGVuZENoaWxkKGUpLmFwcGVuZENoaWxkKGIpLCJ1bmRlZmluZWQiIT10eXBlb2YgYi5zdHlsZS56b29tJiYoYi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjFweDt3aWR0aDoxcHg7em9vbToxIixiLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgiZGl2IikpLnN0eWxlLndpZHRoPSI1cHgiLGE9MyE9PWIub2Zmc2V0V2lkdGgpLGMucmVtb3ZlQ2hpbGQoZSksYSk6dm9pZCAwfX0oKTt2YXIgVD0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxVPW5ldyBSZWdFeHAoIl4oPzooWystXSk9fCkoIitUKyIpKFthLXolXSopJCIsImkiKSxWPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sVz1mdW5jdGlvbihhLGIpe3JldHVybiBhPWJ8fGEsIm5vbmUiPT09bi5jc3MoYSwiZGlzcGxheSIpfHwhbi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSl9O2Z1bmN0aW9uIFgoYSxiLGMsZCl7dmFyIGUsZj0xLGc9MjAsaD1kP2Z1bmN0aW9uKCl7cmV0dXJuIGQuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIG4uY3NzKGEsYiwiIil9LGk9aCgpLGo9YyYmY1szXXx8KG4uY3NzTnVtYmVyW2JdPyIiOiJweCIpLGs9KG4uY3NzTnVtYmVyW2JdfHwicHgiIT09aiYmK2kpJiZVLmV4ZWMobi5jc3MoYSxiKSk7aWYoayYma1szXSE9PWope2o9anx8a1szXSxjPWN8fFtdLGs9K2l8fDE7ZG8gZj1mfHwiLjUiLGsvPWYsbi5zdHlsZShhLGIsaytqKTt3aGlsZShmIT09KGY9aCgpL2kpJiYxIT09ZiYmLS1nKX1yZXR1cm4gYyYmKGs9K2t8fCtpfHwwLGU9Y1sxXT9rKyhjWzFdKzEpKmNbMl06K2NbMl0sZCYmKGQudW5pdD1qLGQuc3RhcnQ9ayxkLmVuZD1lKSksZX12YXIgWT1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKCJvYmplY3QiPT09bi50eXBlKGMpKXtlPSEwO2ZvcihoIGluIGMpWShhLGIsaCxjW2hdLCEwLGYsZyl9ZWxzZSBpZih2b2lkIDAhPT1kJiYoZT0hMCxuLmlzRnVuY3Rpb24oZCl8fChnPSEwKSxqJiYoZz8oYi5jYWxsKGEsZCksYj1udWxsKTooaj1iLGI9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwobihhKSxjKX0pKSxiKSlmb3IoO2k+aDtoKyspYihhW2hdLGMsZz9kOmQuY2FsbChhW2hdLGgsYihhW2hdLGMpKSk7cmV0dXJuIGU/YTpqP2IuY2FsbChhKTppP2IoYVswXSxjKTpmfSxaPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLCQ9LzwoW1x3Oi1dKykvLF89L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLGFhPS9eXHMrLyxiYT0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGRpYWxvZ3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYWlufG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwaWN0dXJlfHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0ZW1wbGF0ZXx0aW1lfHZpZGVvIjtmdW5jdGlvbiBjYShhKXt2YXIgYj1iYS5zcGxpdCgifCIpLGM9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYy5jcmVhdGVFbGVtZW50KXdoaWxlKGIubGVuZ3RoKWMuY3JlYXRlRWxlbWVudChiLnBvcCgpKTtyZXR1cm4gY30hZnVuY3Rpb24oKXt2YXIgYT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGI9ZC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYz1kLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7YS5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsbC5sZWFkaW5nV2hpdGVzcGFjZT0zPT09YS5maXJzdENoaWxkLm5vZGVUeXBlLGwudGJvZHk9IWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGwuaHRtbFNlcmlhbGl6ZT0hIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsbC5odG1sNUNsb25lPSI8Om5hdj48LzpuYXY+IiE9PWQuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsYy50eXBlPSJjaGVja2JveCIsYy5jaGVja2VkPSEwLGIuYXBwZW5kQ2hpbGQoYyksbC5hcHBlbmRDaGVja2VkPWMuY2hlY2tlZCxhLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsbC5ub0Nsb25lQ2hlY2tlZD0hIWEuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlLGIuYXBwZW5kQ2hpbGQoYSksYz1kLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGEuYXBwZW5kQ2hpbGQoYyksbC5jaGVja0Nsb25lPWEuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGwubm9DbG9uZUV2ZW50PSEhYS5hZGRFdmVudExpc3RlbmVyLGFbbi5leHBhbmRvXT0xLGwuYXR0cmlidXRlcz0hYS5nZXRBdHRyaWJ1dGUobi5leHBhbmRvKX0oKTt2YXIgZGE9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxwYXJhbTpbMSwiPG9iamVjdD4iLCI8L29iamVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OmwuaHRtbFNlcmlhbGl6ZT9bMCwiIiwiIl06WzEsIlg8ZGl2PiIsIjwvZGl2PiJdfTtkYS5vcHRncm91cD1kYS5vcHRpb24sZGEudGJvZHk9ZGEudGZvb3Q9ZGEuY29sZ3JvdXA9ZGEuY2FwdGlvbj1kYS50aGVhZCxkYS50aD1kYS50ZDtmdW5jdGlvbiBlYShhLGIpe3ZhciBjLGQsZT0wLGY9InVuZGVmaW5lZCIhPXR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYnx8IioiKToidW5kZWZpbmVkIiE9dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbD9hLnF1ZXJ5U2VsZWN0b3JBbGwoYnx8IioiKTp2b2lkIDA7aWYoIWYpZm9yKGY9W10sYz1hLmNoaWxkTm9kZXN8fGE7bnVsbCE9KGQ9Y1tlXSk7ZSsrKSFifHxuLm5vZGVOYW1lKGQsYik/Zi5wdXNoKGQpOm4ubWVyZ2UoZixlYShkLGIpKTtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmbi5ub2RlTmFtZShhLGIpP24ubWVyZ2UoW2FdLGYpOmZ9ZnVuY3Rpb24gZmEoYSxiKXtmb3IodmFyIGMsZD0wO251bGwhPShjPWFbZF0pO2QrKyluLl9kYXRhKGMsImdsb2JhbEV2YWwiLCFifHxuLl9kYXRhKGJbZF0sImdsb2JhbEV2YWwiKSl9dmFyIGdhPS88fCYjP1x3KzsvLGhhPS88dGJvZHkvaTtmdW5jdGlvbiBpYShhKXtaLnRlc3QoYS50eXBlKSYmKGEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkKX1mdW5jdGlvbiBqYShhLGIsYyxkLGUpe2Zvcih2YXIgZixnLGgsaSxqLGssbSxvPWEubGVuZ3RoLHA9Y2EoYikscT1bXSxyPTA7bz5yO3IrKylpZihnPWFbcl0sZ3x8MD09PWcpaWYoIm9iamVjdCI9PT1uLnR5cGUoZykpbi5tZXJnZShxLGcubm9kZVR5cGU/W2ddOmcpO2Vsc2UgaWYoZ2EudGVzdChnKSl7aT1pfHxwLmFwcGVuZENoaWxkKGIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGo9KCQuZXhlYyhnKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxtPWRhW2pdfHxkYS5fZGVmYXVsdCxpLmlubmVySFRNTD1tWzFdK24uaHRtbFByZWZpbHRlcihnKSttWzJdLGY9bVswXTt3aGlsZShmLS0paT1pLmxhc3RDaGlsZDtpZighbC5sZWFkaW5nV2hpdGVzcGFjZSYmYWEudGVzdChnKSYmcS5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoYWEuZXhlYyhnKVswXSkpLCFsLnRib2R5KXtnPSJ0YWJsZSIhPT1qfHxoYS50ZXN0KGcpPyI8dGFibGU+IiE9PW1bMV18fGhhLnRlc3QoZyk/MDppOmkuZmlyc3RDaGlsZCxmPWcmJmcuY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoZi0tKW4ubm9kZU5hbWUoaz1nLmNoaWxkTm9kZXNbZl0sInRib2R5IikmJiFrLmNoaWxkTm9kZXMubGVuZ3RoJiZnLnJlbW92ZUNoaWxkKGspfW4ubWVyZ2UocSxpLmNoaWxkTm9kZXMpLGkudGV4dENvbnRlbnQ9IiI7d2hpbGUoaS5maXJzdENoaWxkKWkucmVtb3ZlQ2hpbGQoaS5maXJzdENoaWxkKTtpPXAubGFzdENoaWxkfWVsc2UgcS5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZykpO2kmJnAucmVtb3ZlQ2hpbGQoaSksbC5hcHBlbmRDaGVja2VkfHxuLmdyZXAoZWEocSwiaW5wdXQiKSxpYSkscj0wO3doaWxlKGc9cVtyKytdKWlmKGQmJm4uaW5BcnJheShnLGQpPi0xKWUmJmUucHVzaChnKTtlbHNlIGlmKGg9bi5jb250YWlucyhnLm93bmVyRG9jdW1lbnQsZyksaT1lYShwLmFwcGVuZENoaWxkKGcpLCJzY3JpcHQiKSxoJiZmYShpKSxjKXtmPTA7d2hpbGUoZz1pW2YrK10pXy50ZXN0KGcudHlwZXx8IiIpJiZjLnB1c2goZyl9cmV0dXJuIGk9bnVsbCxwfSFmdW5jdGlvbigpe3ZhciBiLGMsZT1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihiIGlue3N1Ym1pdDohMCxjaGFuZ2U6ITAsZm9jdXNpbjohMH0pYz0ib24iK2IsKGxbYl09YyBpbiBhKXx8KGUuc2V0QXR0cmlidXRlKGMsInQiKSxsW2JdPWUuYXR0cmlidXRlc1tjXS5leHBhbmRvPT09ITEpO2U9bnVsbH0oKTt2YXIga2E9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWEpJC9pLGxhPS9ea2V5LyxtYT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sbmE9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLG9hPS9eKFteLl0qKSg/OlwuKC4rKXwpLztmdW5jdGlvbiBwYSgpe3JldHVybiEwfWZ1bmN0aW9uIHFhKCl7cmV0dXJuITF9ZnVuY3Rpb24gcmEoKXt0cnl7cmV0dXJuIGQuYWN0aXZlRWxlbWVudH1jYXRjaChhKXt9fWZ1bmN0aW9uIHNhKGEsYixjLGQsZSxmKXt2YXIgZyxoO2lmKCJvYmplY3QiPT10eXBlb2YgYil7InN0cmluZyIhPXR5cGVvZiBjJiYoZD1kfHxjLGM9dm9pZCAwKTtmb3IoaCBpbiBiKXNhKGEsaCxjLGQsYltoXSxmKTtyZXR1cm4gYX1pZihudWxsPT1kJiZudWxsPT1lPyhlPWMsZD1jPXZvaWQgMCk6bnVsbD09ZSYmKCJzdHJpbmciPT10eXBlb2YgYz8oZT1kLGQ9dm9pZCAwKTooZT1kLGQ9YyxjPXZvaWQgMCkpLGU9PT0hMSllPXFhO2Vsc2UgaWYoIWUpcmV0dXJuIGE7cmV0dXJuIDE9PT1mJiYoZz1lLGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG4oKS5vZmYoYSksZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUuZ3VpZD1nLmd1aWR8fChnLmd1aWQ9bi5ndWlkKyspKSxhLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LmFkZCh0aGlzLGIsZSxkLGMpfSl9bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1uLl9kYXRhKGEpO2lmKHIpe2MuaGFuZGxlciYmKGk9YyxjPWkuaGFuZGxlcixlPWkuc2VsZWN0b3IpLGMuZ3VpZHx8KGMuZ3VpZD1uLmd1aWQrKyksKGc9ci5ldmVudHMpfHwoZz1yLmV2ZW50cz17fSksKGs9ci5oYW5kbGUpfHwoaz1yLmhhbmRsZT1mdW5jdGlvbihhKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG58fGEmJm4uZXZlbnQudHJpZ2dlcmVkPT09YS50eXBlP3ZvaWQgMDpuLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGsuZWxlbSxhcmd1bWVudHMpfSxrLmVsZW09YSksYj0oYnx8IiIpLm1hdGNoKEcpfHxbIiJdLGg9Yi5sZW5ndGg7d2hpbGUoaC0tKWY9b2EuZXhlYyhiW2hdKXx8W10sbz1xPWZbMV0scD0oZlsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLG8mJihqPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZT9qLmRlbGVnYXRlVHlwZTpqLmJpbmRUeXBlKXx8byxqPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbD1uLmV4dGVuZCh7dHlwZTpvLG9yaWdUeXBlOnEsZGF0YTpkLGhhbmRsZXI6YyxndWlkOmMuZ3VpZCxzZWxlY3RvcjplLG5lZWRzQ29udGV4dDplJiZuLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoZSksbmFtZXNwYWNlOnAuam9pbigiLiIpfSxpKSwobT1nW29dKXx8KG09Z1tvXT1bXSxtLmRlbGVnYXRlQ291bnQ9MCxqLnNldHVwJiZqLnNldHVwLmNhbGwoYSxkLHAsaykhPT0hMXx8KGEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobyxrLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbyxrKSkpLGouYWRkJiYoai5hZGQuY2FsbChhLGwpLGwuaGFuZGxlci5ndWlkfHwobC5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGwpOm0ucHVzaChsKSxuLmV2ZW50Lmdsb2JhbFtvXT0hMCk7YT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPW4uaGFzRGF0YShhKSYmbi5fZGF0YShhKTtpZihyJiYoaz1yLmV2ZW50cykpe2I9KGJ8fCIiKS5tYXRjaChHKXx8WyIiXSxqPWIubGVuZ3RoO3doaWxlKGotLSlpZihoPW9hLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8byxtPWtbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxpPWY9bS5sZW5ndGg7d2hpbGUoZi0tKWc9bVtmXSwhZSYmcSE9PWcub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWcuZ3VpZHx8aCYmIWgudGVzdChnLm5hbWVzcGFjZSl8fGQmJmQhPT1nLnNlbGVjdG9yJiYoIioqIiE9PWR8fCFnLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksZy5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxnKSk7aSYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEscCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBrW29dKX1lbHNlIGZvcihvIGluIGspbi5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaykmJihkZWxldGUgci5oYW5kbGUsbi5fcmVtb3ZlRGF0YShhLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKGIsYyxlLGYpe3ZhciBnLGgsaSxqLGwsbSxvLHA9W2V8fGRdLHE9ay5jYWxsKGIsInR5cGUiKT9iLnR5cGU6YixyPWsuY2FsbChiLCJuYW1lc3BhY2UiKT9iLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGk9bT1lPWV8fGQsMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiYhbmEudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhPZigiLiIpPi0xJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkpLGg9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3IG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWY/MjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIucm5hbWVzcGFjZT1iLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIityLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsYi5yZXN1bHQ9dm9pZCAwLGIudGFyZ2V0fHwoYi50YXJnZXQ9ZSksYz1udWxsPT1jP1tiXTpuLm1ha2VBcnJheShjLFtiXSksbD1uLmV2ZW50LnNwZWNpYWxbcV18fHt9LGZ8fCFsLnRyaWdnZXJ8fGwudHJpZ2dlci5hcHBseShlLGMpIT09ITEpKXtpZighZiYmIWwubm9CdWJibGUmJiFuLmlzV2luZG93KGUpKXtmb3Ioaj1sLmRlbGVnYXRlVHlwZXx8cSxuYS50ZXN0KGorcSl8fChpPWkucGFyZW50Tm9kZSk7aTtpPWkucGFyZW50Tm9kZSlwLnB1c2goaSksbT1pO209PT0oZS5vd25lckRvY3VtZW50fHxkKSYmcC5wdXNoKG0uZGVmYXVsdFZpZXd8fG0ucGFyZW50V2luZG93fHxhKX1vPTA7d2hpbGUoKGk9cFtvKytdKSYmIWIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSliLnR5cGU9bz4xP2o6bC5iaW5kVHlwZXx8cSxnPShuLl9kYXRhKGksImV2ZW50cyIpfHx7fSlbYi50eXBlXSYmbi5fZGF0YShpLCJoYW5kbGUiKSxnJiZnLmFwcGx5KGksYyksZz1oJiZpW2hdLGcmJmcuYXBwbHkmJk0oaSkmJihiLnJlc3VsdD1nLmFwcGx5KGksYyksYi5yZXN1bHQ9PT0hMSYmYi5wcmV2ZW50RGVmYXVsdCgpKTtpZihiLnR5cGU9cSwhZiYmIWIuaXNEZWZhdWx0UHJldmVudGVkKCkmJighbC5fZGVmYXVsdHx8bC5fZGVmYXVsdC5hcHBseShwLnBvcCgpLGMpPT09ITEpJiZNKGUpJiZoJiZlW3FdJiYhbi5pc1dpbmRvdyhlKSl7bT1lW2hdLG0mJihlW2hdPW51bGwpLG4uZXZlbnQudHJpZ2dlcmVkPXE7dHJ5e2VbcV0oKX1jYXRjaChzKXt9bi5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLG0mJihlW2hdPW0pfXJldHVybiBiLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGEpe2E9bi5ldmVudC5maXgoYSk7dmFyIGIsYyxkLGYsZyxoPVtdLGk9ZS5jYWxsKGFyZ3VtZW50cyksaj0obi5fZGF0YSh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVudC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEpIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hpbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJyZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYmIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlhLnJuYW1lc3BhY2UmJiFhLnJuYW1lc3BhY2UudGVzdChnLm5hbWVzcGFjZSl8fChhLmhhbmRsZU9iaj1nLGEuZGF0YT1nLmRhdGEsZD0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9pZCAwIT09ZCYmKGEucmVzdWx0PWQpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9YS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCJjbGljayIhPT1hLnR5cGV8fGlzTmFOKGEuYnV0dG9uKXx8YS5idXR0b248MSkpZm9yKDtpIT10aGlzO2k9aS5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1pLm5vZGVUeXBlJiYoaS5kaXNhYmxlZCE9PSEwfHwiY2xpY2siIT09YS50eXBlKSl7Zm9yKGQ9W10sYz0wO2g+YztjKyspZj1iW2NdLGU9Zi5zZWxlY3RvcisiICIsdm9pZCAwPT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/bihlLHRoaXMpLmluZGV4KGkpPi0xOm4uZmluZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5wdXNoKGYpO2QubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZSxmPWEudHlwZSxnPWEsaD10aGlzLmZpeEhvb2tzW2ZdO2h8fCh0aGlzLmZpeEhvb2tzW2ZdPWg9bWEudGVzdChmKT90aGlzLm1vdXNlSG9va3M6bGEudGVzdChmKT90aGlzLmtleUhvb2tzOnt9KSxlPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBuLkV2ZW50KGcpLGI9ZS5sZW5ndGg7d2hpbGUoYi0tKWM9ZVtiXSxhW2NdPWdbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9Zy5zcmNFbGVtZW50fHxkKSwzPT09YS50YXJnZXQubm9kZVR5cGUmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9ISFhLm1ldGFLZXksaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGV0YWlsIGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hpY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnPWIuYnV0dG9uLGg9Yi5mcm9tRWxlbWVudDtyZXR1cm4gbnVsbD09YS5wYWdlWCYmbnVsbCE9Yi5jbGllbnRYJiYoZT1hLnRhcmdldC5vd25lckRvY3VtZW50fHxkLGY9ZS5kb2N1bWVudEVsZW1lbnQsYz1lLmJvZHksYS5wYWdlWD1iLmNsaWVudFgrKGYmJmYuc2Nyb2xsTGVmdHx8YyYmYy5zY3JvbGxMZWZ0fHwwKS0oZiYmZi5jbGllbnRMZWZ0fHxjJiZjLmNsaWVudExlZnR8fDApLGEucGFnZVk9Yi5jbGllbnRZKyhmJiZmLnNjcm9sbFRvcHx8YyYmYy5zY3JvbGxUb3B8fDApLShmJiZmLmNsaWVudFRvcHx8YyYmYy5jbGllbnRUb3B8fDApKSwhYS5yZWxhdGVkVGFyZ2V0JiZoJiYoYS5yZWxhdGVkVGFyZ2V0PWg9PT1hLnRhcmdldD9iLnRvRWxlbWVudDpoKSxhLndoaWNofHx2b2lkIDA9PT1nfHwoYS53aGljaD0xJmc/MToyJmc/Mzo0Jmc/MjowKSxhfX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PXJhKCkmJnRoaXMuZm9jdXMpdHJ5e3JldHVybiB0aGlzLmZvY3VzKCksITF9Y2F0Y2goYSl7fX0sZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09cmEoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbi5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpJiYiY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0JiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9YS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1uLmV4dGVuZChuZXcgbi5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITB9KTtuLmV2ZW50LnRyaWdnZXIoZCxudWxsLGIpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZC5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMpfTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Im9uIitiO2EuZGV0YWNoRXZlbnQmJigidW5kZWZpbmVkIj09dHlwZW9mIGFbZF0mJihhW2RdPW51bGwpLGEuZGV0YWNoRXZlbnQoZCxjKSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP3BhOnFhKTp0aGlzLnR5cGU9YSxiJiZuLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxuLm5vdygpLHZvaWQodGhpc1tuLmV4cGFuZG9dPSEwKSk6bmV3IG4uRXZlbnQoYSxiKX0sbi5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4uRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOnFhLGlzUHJvcGFnYXRpb25TdG9wcGVkOnFhLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOnFhLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXBhLGEmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9cGEsYSYmIXRoaXMuaXNTaW11bGF0ZWQmJihhLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXBhLGEmJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxuLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQiLHBvaW50ZXJlbnRlcjoicG9pbnRlcm92ZXIiLHBvaW50ZXJsZWF2ZToicG9pbnRlcm91dCJ9LGZ1bmN0aW9uKGEsYil7bi5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4gZSYmKGU9PT1kfHxuLmNvbnRhaW5zKGQsZSkpfHwoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxsLnN1Ym1pdHx8KG4uZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIG4ubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOnZvaWQgbi5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPW4ubm9kZU5hbWUoYiwiaW5wdXQiKXx8bi5ub2RlTmFtZShiLCJidXR0b24iKT9uLnByb3AoYiwiZm9ybSIpOnZvaWQgMDtjJiYhbi5fZGF0YShjLCJzdWJtaXQiKSYmKG4uZXZlbnQuYWRkKGMsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihhKXthLl9zdWJtaXRCdWJibGU9ITB9KSxuLl9kYXRhKGMsInN1Ym1pdCIsITApKX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YS5fc3VibWl0QnViYmxlJiYoZGVsZXRlIGEuX3N1Ym1pdEJ1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmbi5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBuLm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTp2b2lkIG4uZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksbC5jaGFuZ2V8fChuLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBrYS50ZXN0KHRoaXMubm9kZU5hbWUpPygiY2hlY2tib3giIT09dGhpcy50eXBlJiYicmFkaW8iIT09dGhpcy50eXBlfHwobi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7ImNoZWNrZWQiPT09YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSYmKHRoaXMuX2p1c3RDaGFuZ2VkPSEwKX0pLG4uZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RDaGFuZ2VkJiYhYS5pc1RyaWdnZXImJih0aGlzLl9qdXN0Q2hhbmdlZD0hMSksbi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLGEpfSkpLCExKTp2b2lkIG4uZXZlbnQuYWRkKHRoaXMsImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O2thLnRlc3QoYi5ub2RlTmFtZSkmJiFuLl9kYXRhKGIsImNoYW5nZSIpJiYobi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpeyF0aGlzLnBhcmVudE5vZGV8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHxuLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxhKX0pLG4uX2RhdGEoYiwiY2hhbmdlIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtyZXR1cm4gdGhpcyE9PWJ8fGEuaXNTaW11bGF0ZWR8fGEuaXNUcmlnZ2VyfHwicmFkaW8iIT09Yi50eXBlJiYiY2hlY2tib3giIT09Yi50eXBlP2EuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnZvaWQgMH0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gbi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwha2EudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxsLmZvY3VzaW58fG4uZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgYz1mdW5jdGlvbihhKXtuLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsbi5ldmVudC5maXgoYSkpfTtuLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9bi5fZGF0YShkLGIpO2V8fGQuYWRkRXZlbnRMaXN0ZW5lcihhLGMsITApLG4uX2RhdGEoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1uLl9kYXRhKGQsYiktMTtlP24uX2RhdGEoZCxiLGUpOihkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCEwKSxuLl9yZW1vdmVEYXRhKGQsYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHNhKHRoaXMsYSxiLGMsZCl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gc2EodGhpcyxhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosbihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZSsiLiIrZC5uYW1lc3BhY2U6ZC5vcmlnVHlwZSxkLnNlbGVjdG9yLGQuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGEpe2ZvcihlIGluIGEpdGhpcy5vZmYoZSxiLGFbZV0pO3JldHVybiB0aGlzfXJldHVybiBiIT09ITEmJiJmdW5jdGlvbiIhPXR5cGVvZiBifHwoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPXFhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzWzBdO3JldHVybiBjP24uZXZlbnQudHJpZ2dlcihhLGIsYywhMCk6dm9pZCAwfX0pO3ZhciB0YT0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLHVhPW5ldyBSZWdFeHAoIjwoPzoiK2JhKyIpW1xccy8+XSIsImkiKSx2YT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6LV0rKVtePl0qKVwvPi9naSx3YT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSx4YT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSx5YT0vXnRydWVcLyguKikvLHphPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxBYT1jYShkKSxCYT1BYS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtmdW5jdGlvbiBDYShhLGIpe3JldHVybiBuLm5vZGVOYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gRGEoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PW4uZmluZC5hdHRyKGEsInR5cGUiKSkrIi8iK2EudHlwZSxhfWZ1bmN0aW9uIEVhKGEpe3ZhciBiPXlhLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGF9ZnVuY3Rpb24gRmEoYSxiKXtpZigxPT09Yi5ub2RlVHlwZSYmbi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZj1uLl9kYXRhKGEpLGc9bi5fZGF0YShiLGYpLGg9Zi5ldmVudHM7aWYoaCl7ZGVsZXRlIGcuaGFuZGxlLGcuZXZlbnRzPXt9O2ZvcihjIGluIGgpZm9yKGQ9MCxlPWhbY10ubGVuZ3RoO2U+ZDtkKyspbi5ldmVudC5hZGQoYixjLGhbY11bZF0pfWcuZGF0YSYmKGcuZGF0YT1uLmV4dGVuZCh7fSxnLmRhdGEpKX19ZnVuY3Rpb24gR2EoYSxiKXt2YXIgYyxkLGU7aWYoMT09PWIubm9kZVR5cGUpe2lmKGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCFsLm5vQ2xvbmVFdmVudCYmYltuLmV4cGFuZG9dKXtlPW4uX2RhdGEoYik7Zm9yKGQgaW4gZS5ldmVudHMpbi5yZW1vdmVFdmVudChiLGQsZS5oYW5kbGUpO2IucmVtb3ZlQXR0cmlidXRlKG4uZXhwYW5kbyl9InNjcmlwdCI9PT1jJiZiLnRleHQhPT1hLnRleHQ/KERhKGIpLnRleHQ9YS50ZXh0LEVhKGIpKToib2JqZWN0Ij09PWM/KGIucGFyZW50Tm9kZSYmKGIub3V0ZXJIVE1MPWEub3V0ZXJIVE1MKSxsLmh0bWw1Q2xvbmUmJmEuaW5uZXJIVE1MJiYhbi50cmltKGIuaW5uZXJIVE1MKSYmKGIuaW5uZXJIVE1MPWEuaW5uZXJIVE1MKSk6ImlucHV0Ij09PWMmJloudGVzdChhLnR5cGUpPyhiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQsYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpKToib3B0aW9uIj09PWM/Yi5kZWZhdWx0U2VsZWN0ZWQ9Yi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDoiaW5wdXQiIT09YyYmInRleHRhcmVhIiE9PWN8fChiLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZSl9fWZ1bmN0aW9uIEhhKGEsYixjLGQpe2I9Zi5hcHBseShbXSxiKTt2YXIgZSxnLGgsaSxqLGssbT0wLG89YS5sZW5ndGgscD1vLTEscT1iWzBdLHI9bi5pc0Z1bmN0aW9uKHEpO2lmKHJ8fG8+MSYmInN0cmluZyI9PXR5cGVvZiBxJiYhbC5jaGVja0Nsb25lJiZ4YS50ZXN0KHEpKXJldHVybiBhLmVhY2goZnVuY3Rpb24oZSl7dmFyIGY9YS5lcShlKTtyJiYoYlswXT1xLmNhbGwodGhpcyxlLGYuaHRtbCgpKSksSGEoZixiLGMsZCl9KTtpZihvJiYoaz1qYShiLGFbMF0ub3duZXJEb2N1bWVudCwhMSxhLGQpLGU9ay5maXJzdENoaWxkLDE9PT1rLmNoaWxkTm9kZXMubGVuZ3RoJiYoaz1lKSxlfHxkKSl7Zm9yKGk9bi5tYXAoZWEoaywic2NyaXB0IiksRGEpLGg9aS5sZW5ndGg7bz5tO20rKylnPWssbSE9PXAmJihnPW4uY2xvbmUoZywhMCwhMCksaCYmbi5tZXJnZShpLGVhKGcsInNjcmlwdCIpKSksYy5jYWxsKGFbbV0sZyxtKTtpZihoKWZvcihqPWlbaS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxuLm1hcChpLEVhKSxtPTA7aD5tO20rKylnPWlbbV0sXy50ZXN0KGcudHlwZXx8IiIpJiYhbi5fZGF0YShnLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaixnKSYmKGcuc3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoZy5zcmMpOm4uZ2xvYmFsRXZhbCgoZy50ZXh0fHxnLnRleHRDb250ZW50fHxnLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoemEsIiIpKSk7az1lPW51bGx9cmV0dXJuIGF9ZnVuY3Rpb24gSWEoYSxiLGMpe2Zvcih2YXIgZCxlPWI/bi5maWx0ZXIoYixhKTphLGY9MDtudWxsIT0oZD1lW2ZdKTtmKyspY3x8MSE9PWQubm9kZVR5cGV8fG4uY2xlYW5EYXRhKGVhKGQpKSxkLnBhcmVudE5vZGUmJihjJiZuLmNvbnRhaW5zKGQub3duZXJEb2N1bWVudCxkKSYmZmEoZWEoZCwic2NyaXB0IikpLGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKSk7cmV0dXJuIGF9bi5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSh2YSwiPCQxPjwvJDI+Iil9LGNsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGk9bi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk7aWYobC5odG1sNUNsb25lfHxuLmlzWE1MRG9jKGEpfHwhdWEudGVzdCgiPCIrYS5ub2RlTmFtZSsiPiIpP2Y9YS5jbG9uZU5vZGUoITApOihCYS5pbm5lckhUTUw9YS5vdXRlckhUTUwsQmEucmVtb3ZlQ2hpbGQoZj1CYS5maXJzdENoaWxkKSksIShsLm5vQ2xvbmVFdmVudCYmbC5ub0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8bi5pc1hNTERvYyhhKSkpZm9yKGQ9ZWEoZiksaD1lYShhKSxnPTA7bnVsbCE9KGU9aFtnXSk7KytnKWRbZ10mJkdhKGUsZFtnXSk7aWYoYilpZihjKWZvcihoPWh8fGVhKGEpLGQ9ZHx8ZWEoZiksZz0wO251bGwhPShlPWhbZ10pO2crKylGYShlLGRbZ10pO2Vsc2UgRmEoYSxmKTtyZXR1cm4gZD1lYShmLCJzY3JpcHQiKSxkLmxlbmd0aD4wJiZmYShkLCFpJiZlYShhLCJzY3JpcHQiKSksZD1oPWU9bnVsbCxmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGQsZSxmLGcsaD0wLGk9bi5leHBhbmRvLGo9bi5jYWNoZSxrPWwuYXR0cmlidXRlcyxtPW4uZXZlbnQuc3BlY2lhbDtudWxsIT0oZD1hW2hdKTtoKyspaWYoKGJ8fE0oZCkpJiYoZj1kW2ldLGc9ZiYmaltmXSkpe2lmKGcuZXZlbnRzKWZvcihlIGluIGcuZXZlbnRzKW1bZV0/bi5ldmVudC5yZW1vdmUoZCxlKTpuLnJlbW92ZUV2ZW50KGQsZSxnLmhhbmRsZSk7altmXSYmKGRlbGV0ZSBqW2ZdLGt8fCJ1bmRlZmluZWQiPT10eXBlb2YgZC5yZW1vdmVBdHRyaWJ1dGU/ZFtpXT12b2lkIDA6ZC5yZW1vdmVBdHRyaWJ1dGUoaSksYy5wdXNoKGYpKX19fSksbi5mbi5leHRlbmQoe2RvbU1hbmlwOkhhLGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gSWEodGhpcyxhLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3JldHVybiBJYSh0aGlzLGEpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBZKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8ZCkuY3JlYXRlVGV4dE5vZGUoYSkpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBIYSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9Q2EodGhpcyxhKTtiLmFwcGVuZENoaWxkKGEpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1DYSh0aGlzLGEpO2IuaW5zZXJ0QmVmb3JlKGEsYi5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhLGI9MDtudWxsIT0oYT10aGlzW2JdKTtiKyspezE9PT1hLm5vZGVUeXBlJiZuLmNsZWFuRGF0YShlYShhLCExKSk7d2hpbGUoYS5maXJzdENoaWxkKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKTthLm9wdGlvbnMmJm4ubm9kZU5hbWUoYSwic2VsZWN0IikmJihhLm9wdGlvbnMubGVuZ3RoPTApfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hKXJldHVybiAxPT09Yi5ub2RlVHlwZT9iLmlubmVySFRNTC5yZXBsYWNlKHRhLCIiKTp2b2lkIDA7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhd2EudGVzdChhKSYmKGwuaHRtbFNlcmlhbGl6ZXx8IXVhLnRlc3QoYSkpJiYobC5sZWFkaW5nV2hpdGVzcGFjZXx8IWFhLnRlc3QoYSkpJiYhZGFbKCQuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9bi5odG1sUHJlZmlsdGVyKGEpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKGVhKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9W107cmV0dXJuIEhhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMucGFyZW50Tm9kZTtuLmluQXJyYXkodGhpcyxhKTwwJiYobi5jbGVhbkRhdGEoZWEodGhpcykpLGMmJmMucmVwbGFjZUNoaWxkKGIsdGhpcykpfSxhKX19KSxuLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYSl7Zm9yKHZhciBjLGQ9MCxlPVtdLGY9bihhKSxoPWYubGVuZ3RoLTE7aD49ZDtkKyspYz1kPT09aD90aGlzOnRoaXMuY2xvbmUoITApLG4oZltkXSlbYl0oYyksZy5hcHBseShlLGMuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgSmEsS2E9e0hUTUw6ImJsb2NrIixCT0RZOiJibG9jayJ9O2Z1bmN0aW9uIExhKGEsYil7dmFyIGM9bihiLmNyZWF0ZUVsZW1lbnQoYSkpLmFwcGVuZFRvKGIuYm9keSksZD1uLmNzcyhjWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGMuZGV0YWNoKCksZH1mdW5jdGlvbiBNYShhKXt2YXIgYj1kLGM9S2FbYV07cmV0dXJuIGN8fChjPUxhKGEsYiksIm5vbmUiIT09YyYmY3x8KEphPShKYXx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj0oSmFbMF0uY29udGVudFdpbmRvd3x8SmFbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9TGEoYSxiKSxKYS5kZXRhY2goKSksS2FbYV09YyksY312YXIgTmE9L15tYXJnaW4vLE9hPW5ldyBSZWdFeHAoIl4oIitUKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksUGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9LFFhPWQuZG9jdW1lbnRFbGVtZW50OyFmdW5jdGlvbigpe3ZhciBiLGMsZSxmLGcsaCxpPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksaj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGouc3R5bGUpe2ouc3R5bGUuY3NzVGV4dD0iZmxvYXQ6bGVmdDtvcGFjaXR5Oi41IixsLm9wYWNpdHk9IjAuNSI9PT1qLnN0eWxlLm9wYWNpdHksbC5jc3NGbG9hdD0hIWouc3R5bGUuY3NzRmxvYXQsai5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGouY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIixsLmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09ai5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxpPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksaS5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZSIsai5pbm5lckhUTUw9IiIsaS5hcHBlbmRDaGlsZChqKSxsLmJveFNpemluZz0iIj09PWouc3R5bGUuYm94U2l6aW5nfHwiIj09PWouc3R5bGUuTW96Qm94U2l6aW5nfHwiIj09PWouc3R5bGUuV2Via2l0Qm94U2l6aW5nLG4uZXh0ZW5kKGwse3JlbGlhYmxlSGlkZGVuT2Zmc2V0czpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksZn0sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YiYmaygpLGV9LHBpeGVsTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YiYmaygpLGN9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YiYmaygpLGJ9LHJlbGlhYmxlTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YiYmaygpLGd9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1iJiZrKCksaH19KTtmdW5jdGlvbiBrKCl7dmFyIGssbCxtPWQuZG9jdW1lbnRFbGVtZW50O20uYXBwZW5kQ2hpbGQoaSksai5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3RvcDoxJTt3aWR0aDo1MCUiLGI9ZT1oPSExLGM9Zz0hMCxhLmdldENvbXB1dGVkU3R5bGUmJihsPWEuZ2V0Q29tcHV0ZWRTdHlsZShqKSxiPSIxJSIhPT0obHx8e30pLnRvcCxoPSIycHgiPT09KGx8fHt9KS5tYXJnaW5MZWZ0LGU9IjRweCI9PT0obHx8e3dpZHRoOiI0cHgifSkud2lkdGgsai5zdHlsZS5tYXJnaW5SaWdodD0iNTAlIixjPSI0cHgiPT09KGx8fHttYXJnaW5SaWdodDoiNHB4In0pLm1hcmdpblJpZ2h0LGs9ai5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxrLnN0eWxlLmNzc1RleHQ9ai5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjAiLGsuc3R5bGUubWFyZ2luUmlnaHQ9ay5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS53aWR0aD0iMXB4IixnPSFwYXJzZUZsb2F0KChhLmdldENvbXB1dGVkU3R5bGUoayl8fHt9KS5tYXJnaW5SaWdodCksai5yZW1vdmVDaGlsZChrKSksai5zdHlsZS5kaXNwbGF5PSJub25lIixmPTA9PT1qLmdldENsaWVudFJlY3RzKCkubGVuZ3RoLGYmJihqLnN0eWxlLmRpc3BsYXk9IiIsai5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iLGouY2hpbGROb2Rlc1swXS5zdHlsZS5ib3JkZXJDb2xsYXBzZT0ic2VwYXJhdGUiLGs9ai5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKSxrWzBdLnN0eWxlLmNzc1RleHQ9Im1hcmdpbjowO2JvcmRlcjowO3BhZGRpbmc6MDtkaXNwbGF5Om5vbmUiLGY9MD09PWtbMF0ub2Zmc2V0SGVpZ2h0LGYmJihrWzBdLnN0eWxlLmRpc3BsYXk9IiIsa1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIixmPTA9PT1rWzBdLm9mZnNldEhlaWdodCkpLG0ucmVtb3ZlQ2hpbGQoaSl9fX0oKTt2YXIgUmEsU2EsVGE9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvO2EuZ2V0Q29tcHV0ZWRTdHlsZT8oUmE9ZnVuY3Rpb24oYil7dmFyIGM9Yi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiBjJiZjLm9wZW5lcnx8KGM9YSksYy5nZXRDb21wdXRlZFN0eWxlKGIpfSxTYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fFJhKGEpLGc9Yz9jLmdldFByb3BlcnR5VmFsdWUoYil8fGNbYl06dm9pZCAwLCIiIT09ZyYmdm9pZCAwIT09Z3x8bi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSl8fChnPW4uc3R5bGUoYSxiKSksYyYmIWwucGl4ZWxNYXJnaW5SaWdodCgpJiZPYS50ZXN0KGcpJiZOYS50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpLHZvaWQgMD09PWc/ZzpnKyIifSk6UWEuY3VycmVudFN0eWxlJiYoUmE9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY3VycmVudFN0eWxlfSxTYT1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLnN0eWxlO3JldHVybiBjPWN8fFJhKGEpLGc9Yz9jW2JdOnZvaWQgMCxudWxsPT1nJiZoJiZoW2JdJiYoZz1oW2JdKSxPYS50ZXN0KGcpJiYhVGEudGVzdChiKSYmKGQ9aC5sZWZ0LGU9YS5ydW50aW1lU3R5bGUsZj1lJiZlLmxlZnQsZiYmKGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxoLmxlZnQ9ImZvbnRTaXplIj09PWI/IjFlbSI6ZyxnPWgucGl4ZWxMZWZ0KyJweCIsaC5sZWZ0PWQsZiYmKGUubGVmdD1mKSksdm9pZCAwPT09Zz9nOmcrIiJ8fCJhdXRvIn0pO2Z1bmN0aW9uIFVhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3JldHVybiBhKCk/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXZhciBWYT0vYWxwaGFcKFteKV0qXCkvaSxXYT0vb3BhY2l0eVxzKj1ccyooW14pXSopL2ksWGE9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFlhPW5ldyBSZWdFeHAoIl4oIitUKyIpKC4qKSQiLCJpIiksWmE9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LCRhPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxfYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdLGFiPWQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGU7ZnVuY3Rpb24gYmIoYSl7aWYoYSBpbiBhYilyZXR1cm4gYTt2YXIgYj1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSksYz1fYS5sZW5ndGg7d2hpbGUoYy0tKWlmKGE9X2FbY10rYixhIGluIGFiKXJldHVybiBhfWZ1bmN0aW9uIGNiKGEsYil7Zm9yKHZhciBjLGQsZSxmPVtdLGc9MCxoPWEubGVuZ3RoO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihmW2ddPW4uX2RhdGEoZCwib2xkZGlzcGxheSIpLGM9ZC5zdHlsZS5kaXNwbGF5LGI/KGZbZ118fCJub25lIiE9PWN8fChkLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ZC5zdHlsZS5kaXNwbGF5JiZXKGQpJiYoZltnXT1uLl9kYXRhKGQsIm9sZGRpc3BsYXkiLE1hKGQubm9kZU5hbWUpKSkpOihlPVcoZCksKGMmJiJub25lIiE9PWN8fCFlKSYmbi5fZGF0YShkLCJvbGRkaXNwbGF5IixlP2M6bi5jc3MoZCwiZGlzcGxheSIpKSkpO2ZvcihnPTA7aD5nO2crKylkPWFbZ10sZC5zdHlsZSYmKGImJiJub25lIiE9PWQuc3R5bGUuZGlzcGxheSYmIiIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHwiIjoibm9uZSIpKTtyZXR1cm4gYX1mdW5jdGlvbiBkYihhLGIsYyl7dmFyIGQ9WWEuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBlYihhLGIsYyxkLGUpe2Zvcih2YXIgZj1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT1iPzE6MCxnPTA7ND5mO2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9bi5jc3MoYSxjK1ZbZl0sITAsZSkpLGQ/KCJjb250ZW50Ij09PWMmJihnLT1uLmNzcyhhLCJwYWRkaW5nIitWW2ZdLCEwLGUpKSwibWFyZ2luIiE9PWMmJihnLT1uLmNzcyhhLCJib3JkZXIiK1ZbZl0rIldpZHRoIiwhMCxlKSkpOihnKz1uLmNzcyhhLCJwYWRkaW5nIitWW2ZdLCEwLGUpLCJwYWRkaW5nIiE9PWMmJihnKz1uLmNzcyhhLCJib3JkZXIiK1ZbZl0rIldpZHRoIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIGZiKGEsYixjKXt2YXIgZD0hMCxlPSJ3aWR0aCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZj1SYShhKSxnPWwuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT1uLmNzcyhhLCJib3hTaXppbmciLCExLGYpO2lmKDA+PWV8fG51bGw9PWUpe2lmKGU9U2EoYSxiLGYpLCgwPmV8fG51bGw9PWUpJiYoZT1hLnN0eWxlW2JdKSxPYS50ZXN0KGUpKXJldHVybiBlO2Q9ZyYmKGwuYm94U2l6aW5nUmVsaWFibGUoKXx8ZT09PWEuc3R5bGVbYl0pLGU9cGFyc2VGbG9hdChlKXx8MH1yZXR1cm4gZStlYihhLGIsY3x8KGc/ImJvcmRlciI6ImNvbnRlbnQiKSxkLGYpKyJweCJ9bi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1TYShhLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1jPyIxIjpjfX19fSxjc3NOdW1iZXI6e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmwuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEmJjMhPT1hLm5vZGVUeXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUsZixnLGg9bi5jYW1lbENhc2UoYiksaT1hLnN0eWxlO2lmKGI9bi5jc3NQcm9wc1toXXx8KG4uY3NzUHJvcHNbaF09YmIoaCl8fGgpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1toXSx2b2lkIDA9PT1jKXJldHVybiBnJiYiZ2V0ImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTtpZihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9VS5leGVjKGMpKSYmZVsxXSYmKGM9WChhLGIsZSksZj0ibnVtYmVyIiksbnVsbCE9YyYmYz09PWMmJigibnVtYmVyIj09PWYmJihjKz1lJiZlWzNdfHwobi5jc3NOdW1iZXJbaF0/IiI6InB4IikpLGwuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PWN8fDAhPT1iLmluZGV4T2YoImJhY2tncm91bmQiKXx8KGlbYl09ImluaGVyaXQiKSwhKGcmJiJzZXQiaW4gZyYmdm9pZCAwPT09KGM9Zy5zZXQoYSxjLGQpKSkpKXRyeXtpW2JdPWN9Y2F0Y2goail7fX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1iYihoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLGcmJiJnZXQiaW4gZyYmKGY9Zy5nZXQoYSwhMCxjKSksdm9pZCAwPT09ZiYmKGY9U2EoYSxiLGQpKSwibm9ybWFsIj09PWYmJmIgaW4gJGEmJihmPSRhW2JdKSwiIj09PWN8fGM/KGU9cGFyc2VGbG9hdChmKSxjPT09ITB8fGlzRmluaXRlKGUpP2V8fDA6Zik6Zn19KSxuLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gYz9YYS50ZXN0KG4uY3NzKGEsImRpc3BsYXkiKSkmJjA9PT1hLm9mZnNldFdpZHRoP1BhKGEsWmEsZnVuY3Rpb24oKXtyZXR1cm4gZmIoYSxiLGQpfSk6ZmIoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1kJiZSYShhKTtyZXR1cm4gZGIoYSxjLGQ/ZWIoYSxiLGQsbC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZSksZSk6MCl9fX0pLGwub3BhY2l0eXx8KG4uY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIFdhLnRlc3QoKGImJmEuY3VycmVudFN0eWxlP2EuY3VycmVudFN0eWxlLmZpbHRlcjphLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOmI/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLnN0eWxlLGQ9YS5jdXJyZW50U3R5bGUsZT1uLmlzTnVtZXJpYyhiKT8iYWxwaGEob3BhY2l0eT0iKzEwMCpiKyIpIjoiIixmPWQmJmQuZmlsdGVyfHxjLmZpbHRlcnx8IiI7Yy56b29tPTEsKGI+PTF8fCIiPT09YikmJiIiPT09bi50cmltKGYucmVwbGFjZShWYSwiIikpJiZjLnJlbW92ZUF0dHJpYnV0ZSYmKGMucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PWJ8fGQmJiFkLmZpbHRlcil8fChjLmZpbHRlcj1WYS50ZXN0KGYpP2YucmVwbGFjZShWYSxlKTpmKyIgIitlKX19KSxuLmNzc0hvb2tzLm1hcmdpblJpZ2h0PVVhKGwucmVsaWFibGVNYXJnaW5SaWdodCxmdW5jdGlvbihhLGIpe3JldHVybiBiP1BhKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LFNhLFthLCJtYXJnaW5SaWdodCJdKTp2b2lkIDB9KSxuLmNzc0hvb2tzLm1hcmdpbkxlZnQ9VWEobC5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj8ocGFyc2VGbG9hdChTYShhLCJtYXJnaW5MZWZ0IikpfHwobi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk/YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVBhKGEseworbWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KTowKSkrInB4Ijp2b2lkIDB9KSxuLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYStiXT17ZXhwYW5kOmZ1bmN0aW9uKGMpe2Zvcih2YXIgZD0wLGU9e30sZj0ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgiICIpOltjXTs0PmQ7ZCsrKWVbYStWW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LE5hLnRlc3QoYSl8fChuLmNzc0hvb2tzW2ErYl0uc2V0PWRiKX0pLG4uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKG4uaXNBcnJheShiKSl7Zm9yKGQ9UmEoYSksZT1iLmxlbmd0aDtlPmc7ZysrKWZbYltnXV09bi5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP24uc3R5bGUoYSxiLGMpOm4uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGNiKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGNiKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYT9hP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe1codGhpcyk/bih0aGlzKS5zaG93KCk6bih0aGlzKS5oaWRlKCl9KX19KTtmdW5jdGlvbiBnYihhLGIsYyxkLGUpe3JldHVybiBuZXcgZ2IucHJvdG90eXBlLmluaXQoYSxiLGMsZCxlKX1uLlR3ZWVuPWdiLGdiLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z2IsaW5pdDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsdGhpcy5lYXNpbmc9ZXx8bi5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPWIsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPWQsdGhpcy51bml0PWZ8fChuLmNzc051bWJlcltjXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9Z2IucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOmdiLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPWdiLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6Z2IucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sZ2IucHJvdG90eXBlLmluaXQucHJvdG90eXBlPWdiLnByb3RvdHlwZSxnYi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIDEhPT1hLmVsZW0ubm9kZVR5cGV8fG51bGwhPWEuZWxlbVthLnByb3BdJiZudWxsPT1hLmVsZW0uc3R5bGVbYS5wcm9wXT9hLmVsZW1bYS5wcm9wXTooYj1uLmNzcyhhLmVsZW0sYS5wcm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCl9LHNldDpmdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShhKToxIT09YS5lbGVtLm5vZGVUeXBlfHxudWxsPT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1thLnByb3BdXSYmIW4uY3NzSG9va3NbYS5wcm9wXT9hLmVsZW1bYS5wcm9wXT1hLm5vdzpuLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KX19fSxnYi5wcm9wSG9va3Muc2Nyb2xsVG9wPWdiLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29zKGEqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sbi5meD1nYi5wcm90b3R5cGUuaW5pdCxuLmZ4LnN0ZXA9e307dmFyIGhiLGliLGpiPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxrYj0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIGxiKCl7cmV0dXJuIGEuc2V0VGltZW91dChmdW5jdGlvbigpe2hiPXZvaWQgMH0pLGhiPW4ubm93KCl9ZnVuY3Rpb24gbWIoYSxiKXt2YXIgYyxkPXtoZWlnaHQ6YX0sZT0wO2ZvcihiPWI/MTowOzQ+ZTtlKz0yLWIpYz1WW2VdLGRbIm1hcmdpbiIrY109ZFsicGFkZGluZyIrY109YTtyZXR1cm4gYiYmKGQub3BhY2l0eT1kLndpZHRoPWEpLGR9ZnVuY3Rpb24gbmIoYSxiLGMpe2Zvcih2YXIgZCxlPShxYi50d2VlbmVyc1tiXXx8W10pLmNvbmNhdChxYi50d2VlbmVyc1siKiJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBvYihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxtPXRoaXMsbz17fSxwPWEuc3R5bGUscT1hLm5vZGVUeXBlJiZXKGEpLHI9bi5fZGF0YShhLCJmeHNob3ciKTtjLnF1ZXVlfHwoaD1uLl9xdWV1ZUhvb2tzKGEsImZ4IiksbnVsbD09aC51bnF1ZXVlZCYmKGgudW5xdWV1ZWQ9MCxpPWguZW1wdHkuZmlyZSxoLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtoLnVucXVldWVkfHxpKCl9KSxoLnVucXVldWVkKyssbS5hbHdheXMoZnVuY3Rpb24oKXttLmFsd2F5cyhmdW5jdGlvbigpe2gudW5xdWV1ZWQtLSxuLnF1ZXVlKGEsImZ4IikubGVuZ3RofHxoLmVtcHR5LmZpcmUoKX0pfSkpLDE9PT1hLm5vZGVUeXBlJiYoImhlaWdodCJpbiBifHwid2lkdGgiaW4gYikmJihjLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSxqPW4uY3NzKGEsImRpc3BsYXkiKSxrPSJub25lIj09PWo/bi5fZGF0YShhLCJvbGRkaXNwbGF5Iil8fE1hKGEubm9kZU5hbWUpOmosImlubGluZSI9PT1rJiYibm9uZSI9PT1uLmNzcyhhLCJmbG9hdCIpJiYobC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0JiYiaW5saW5lIiE9PU1hKGEubm9kZU5hbWUpP3Auem9vbT0xOnAuZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLGMub3ZlcmZsb3cmJihwLm92ZXJmbG93PSJoaWRkZW4iLGwuc2hyaW5rV3JhcEJsb2NrcygpfHxtLmFsd2F5cyhmdW5jdGlvbigpe3Aub3ZlcmZsb3c9Yy5vdmVyZmxvd1swXSxwLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLHAub3ZlcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0samIuZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShxPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcnx8dm9pZCAwPT09cltkXSljb250aW51ZTtxPSEwfW9bZF09ciYmcltkXXx8bi5zdHlsZShhLGQpfWVsc2Ugaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG8pKSJpbmxpbmUiPT09KCJub25lIj09PWo/TWEoYS5ub2RlTmFtZSk6aikmJihwLmRpc3BsYXk9aik7ZWxzZXtyPyJoaWRkZW4iaW4gciYmKHE9ci5oaWRkZW4pOnI9bi5fZGF0YShhLCJmeHNob3ciLHt9KSxmJiYoci5oaWRkZW49IXEpLHE/bihhKS5zaG93KCk6bS5kb25lKGZ1bmN0aW9uKCl7bihhKS5oaWRlKCl9KSxtLmRvbmUoZnVuY3Rpb24oKXt2YXIgYjtuLl9yZW1vdmVEYXRhKGEsImZ4c2hvdyIpO2ZvcihiIGluIG8pbi5zdHlsZShhLGIsb1tiXSl9KTtmb3IoZCBpbiBvKWc9bmIocT9yW2RdOjAsZCxtKSxkIGluIHJ8fChyW2RdPWcuc3RhcnQscSYmKGcuZW5kPWcuc3RhcnQsZy5zdGFydD0id2lkdGgiPT09ZHx8ImhlaWdodCI9PT1kPzE6MCkpfX1mdW5jdGlvbiBwYihhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSlpZihkPW4uY2FtZWxDYXNlKGMpLGU9YltkXSxmPWFbY10sbi5pc0FycmF5KGYpJiYoZT1mWzFdLGY9YVtjXT1mWzBdKSxjIT09ZCYmKGFbZF09ZixkZWxldGUgYVtjXSksZz1uLmNzc0hvb2tzW2RdLGcmJiJleHBhbmQiaW4gZyl7Zj1nLmV4cGFuZChmKSxkZWxldGUgYVtkXTtmb3IoYyBpbiBmKWMgaW4gYXx8KGFbY109ZltjXSxiW2NdPWUpfWVsc2UgYltkXT1lfWZ1bmN0aW9uIHFiKGEsYixjKXt2YXIgZCxlLGY9MCxnPXFiLnByZWZpbHRlcnMubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9aGJ8fGxiKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6bi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOm4uZWFzaW5nLl9kZWZhdWx0fSxjKSxvcmlnaW5hbFByb3BlcnRpZXM6YixvcmlnaW5hbE9wdGlvbnM6YyxzdGFydFRpbWU6aGJ8fGxiKCksZHVyYXRpb246Yy5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oYixjKXt2YXIgZD1uLlR3ZWVuKGEsai5vcHRzLGIsYyxqLm9wdHMuc3BlY2lhbEVhc2luZ1tiXXx8ai5vcHRzLmVhc2luZyk7cmV0dXJuIGoudHdlZW5zLnB1c2goZCksZH0sc3RvcDpmdW5jdGlvbihiKXt2YXIgYz0wLGQ9Yj9qLnR3ZWVucy5sZW5ndGg6MDtpZihlKXJldHVybiB0aGlzO2ZvcihlPSEwO2Q+YztjKyspai50d2VlbnNbY10ucnVuKDEpO3JldHVybiBiPyhoLm5vdGlmeVdpdGgoYSxbaiwxLDBdKSxoLnJlc29sdmVXaXRoKGEsW2osYl0pKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKHBiKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1xYi5wcmVmaWx0ZXJzW2ZdLmNhbGwoaixhLGssai5vcHRzKSlyZXR1cm4gbi5pc0Z1bmN0aW9uKGQuc3RvcCkmJihuLl9xdWV1ZUhvb2tzKGouZWxlbSxqLm9wdHMucXVldWUpLnN0b3A9bi5wcm94eShkLnN0b3AsZCkpLGQ7cmV0dXJuIG4ubWFwKGssbmIsaiksbi5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihuLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChxYix7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYik7cmV0dXJuIFgoYy5lbGVtLGEsVS5leGVjKGIpLGMpLGN9XX0sdHdlZW5lcjpmdW5jdGlvbihhLGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5tYXRjaChHKTtmb3IodmFyIGMsZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyljPWFbZF0scWIudHdlZW5lcnNbY109cWIudHdlZW5lcnNbY118fFtdLHFiLnR3ZWVuZXJzW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcnM6W29iXSxwcmVmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtiP3FiLnByZWZpbHRlcnMudW5zaGlmdChhKTpxYi5wcmVmaWx0ZXJzLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCxudWxsIT1kLnF1ZXVlJiZkLnF1ZXVlIT09ITB8fChkLnF1ZXVlPSJmeCIpLGQub2xkPWQuY29tcGxldGUsZC5jb21wbGV0ZT1mdW5jdGlvbigpe24uaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZSYmbi5kZXF1ZXVlKHRoaXMsZC5xdWV1ZSl9LGR9LG4uZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKFcpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6Yn0sYSxjLGQpfSxhbmltYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4uaXNFbXB0eU9iamVjdChhKSxmPW4uc3BlZWQoYixjLGQpLGc9ZnVuY3Rpb24oKXt2YXIgYj1xYih0aGlzLG4uZXh0ZW5kKHt9LGEpLGYpOyhlfHxuLl9kYXRhKHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1uLl9kYXRhKHRoaXMpO2lmKGUpZ1tlXSYmZ1tlXS5zdG9wJiZkKGdbZV0pO2Vsc2UgZm9yKGUgaW4gZylnW2VdJiZnW2VdLnN0b3AmJmtiLnRlc3QoZSkmJmQoZ1tlXSk7Zm9yKGU9Zi5sZW5ndGg7ZS0tOylmW2VdLmVsZW0hPT10aGlzfHxudWxsIT1hJiZmW2VdLnF1ZXVlIT09YXx8KGZbZV0uYW5pbS5zdG9wKGMpLGI9ITEsZi5zcGxpY2UoZSwxKSk7IWImJmN8fG4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixjPW4uX2RhdGEodGhpcyksZD1jW2ErInF1ZXVlIl0sZT1jW2ErInF1ZXVlSG9va3MiXSxmPW4udGltZXJzLGc9ZD9kLmxlbmd0aDowO2ZvcihjLmZpbmlzaD0hMCxuLnF1ZXVlKHRoaXMsYSxbXSksZSYmZS5zdG9wJiZlLnN0b3AuY2FsbCh0aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09dGhpcyYmZltiXS5xdWV1ZT09PWEmJihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7Zm9yKGI9MDtnPmI7YisrKWRbYl0mJmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBjLmZpbmlzaH0pfX0pLG4uZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmZuW2JdO24uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBudWxsPT1hfHwiYm9vbGVhbiI9PXR5cGVvZiBhP2MuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShtYihiLCEwKSxhLGQsZSl9fSksbi5lYWNoKHtzbGlkZURvd246bWIoInNob3ciKSxzbGlkZVVwOm1iKCJoaWRlIiksc2xpZGVUb2dnbGU6bWIoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLG4udGltZXJzPVtdLG4uZngudGljaz1mdW5jdGlvbigpe3ZhciBhLGI9bi50aW1lcnMsYz0wO2ZvcihoYj1uLm5vdygpO2M8Yi5sZW5ndGg7YysrKWE9YltjXSxhKCl8fGJbY10hPT1hfHxiLnNwbGljZShjLS0sMSk7Yi5sZW5ndGh8fG4uZnguc3RvcCgpLGhiPXZvaWQgMH0sbi5meC50aW1lcj1mdW5jdGlvbihhKXtuLnRpbWVycy5wdXNoKGEpLGEoKT9uLmZ4LnN0YXJ0KCk6bi50aW1lcnMucG9wKCl9LG4uZnguaW50ZXJ2YWw9MTMsbi5meC5zdGFydD1mdW5jdGlvbigpe2lifHwoaWI9YS5zZXRJbnRlcnZhbChuLmZ4LnRpY2ssbi5meC5pbnRlcnZhbCkpfSxuLmZ4LnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFySW50ZXJ2YWwoaWIpLGliPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYixjKXtyZXR1cm4gYj1uLmZ4P24uZnguc3BlZWRzW2JdfHxiOmIsYz1jfHwiZngiLHRoaXMucXVldWUoYyxmdW5jdGlvbihjLGQpe3ZhciBlPWEuc2V0VGltZW91dChjLGIpO2Quc3RvcD1mdW5jdGlvbigpe2EuY2xlYXJUaW1lb3V0KGUpfX0pfSxmdW5jdGlvbigpe3ZhciBhLGI9ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGM9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlPWQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZj1lLmFwcGVuZENoaWxkKGQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpO2M9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLGMuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iLGE9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGIuc2V0QXR0cmlidXRlKCJ0eXBlIiwiY2hlY2tib3giKSxjLmFwcGVuZENoaWxkKGIpLGE9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGEuc3R5bGUuY3NzVGV4dD0idG9wOjFweCIsbC5nZXRTZXRBdHRyaWJ1dGU9InQiIT09Yy5jbGFzc05hbWUsbC5zdHlsZT0vdG9wLy50ZXN0KGEuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxsLmhyZWZOb3JtYWxpemVkPSIvYSI9PT1hLmdldEF0dHJpYnV0ZSgiaHJlZiIpLGwuY2hlY2tPbj0hIWIudmFsdWUsbC5vcHRTZWxlY3RlZD1mLnNlbGVjdGVkLGwuZW5jdHlwZT0hIWQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsZS5kaXNhYmxlZD0hMCxsLm9wdERpc2FibGVkPSFmLmRpc2FibGVkLGI9ZC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGIuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLGwuaW5wdXQ9IiI9PT1iLmdldEF0dHJpYnV0ZSgidmFsdWUiKSxiLnZhbHVlPSJ0IixiLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksbC5yYWRpb1ZhbHVlPSJ0Ij09PWIudmFsdWV9KCk7dmFyIHJiPS9cci9nLHNiPS9bXHgyMFx0XHJcblxmXSsvZztuLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50eXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8bi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UocmIsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4udHJpbShuLnRleHQoYSkpLnJlcGxhY2Uoc2IsIiAiKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGQ9YS5vcHRpb25zLGU9YS5zZWxlY3RlZEluZGV4LGY9InNlbGVjdC1vbmUiPT09YS50eXBlfHwwPmUsZz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9oOmY/ZTowO2g+aTtpKyspaWYoYz1kW2ldLChjLnNlbGVjdGVkfHxpPT09ZSkmJihsLm9wdERpc2FibGVkPyFjLmRpc2FibGVkOm51bGw9PT1jLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSkmJighYy5wYXJlbnROb2RlLmRpc2FibGVkfHwhbi5ub2RlTmFtZShjLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZihiPW4oYykudmFsKCksZilyZXR1cm4gYjtnLnB1c2goYil9cmV0dXJuIGd9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT1hLm9wdGlvbnMsZj1uLm1ha2VBcnJheShiKSxnPWUubGVuZ3RoO3doaWxlKGctLSlpZihkPWVbZ10sbi5pbkFycmF5KG4udmFsSG9va3Mub3B0aW9uLmdldChkKSxmKT4tMSl0cnl7ZC5zZWxlY3RlZD1jPSEwfWNhdGNoKGgpe2Quc2Nyb2xsSGVpZ2h0fWVsc2UgZC5zZWxlY3RlZD0hMTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZX19fX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXkoYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPi0xOnZvaWQgMH19LGwuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVlfSl9KTt2YXIgdGIsdWIsdmI9bi5leHByLmF0dHJIYW5kbGUsd2I9L14oPzpjaGVja2VkfHNlbGVjdGVkKSQvaSx4Yj1sLmdldFNldEF0dHJpYnV0ZSx5Yj1sLmlucHV0O24uZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIFkodGhpcyxuLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24ucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuInVuZGVmaW5lZCI9PXR5cGVvZiBhLmdldEF0dHJpYnV0ZT9uLnByb3AoYSxiLGMpOigxPT09ZiYmbi5pc1hNTERvYyhhKXx8KGI9Yi50b0xvd2VyQ2FzZSgpLGU9bi5hdHRySG9va3NbYl18fChuLmV4cHIubWF0Y2guYm9vbC50ZXN0KGIpP3ViOnRiKSksdm9pZCAwIT09Yz9udWxsPT09Yz92b2lkIG4ucmVtb3ZlQXR0cihhLGIpOmUmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOihhLnNldEF0dHJpYnV0ZShiLGMrIiIpLGMpOmUmJiJnZXQiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6KGQ9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1kP3ZvaWQgMDpkKSl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWwucmFkaW9WYWx1ZSYmInJhZGlvIj09PWImJm4ubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRyk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKT95YiYmeGJ8fCF3Yi50ZXN0KGMpP2FbZF09ITE6YVtuLmNhbWVsQ2FzZSgiZGVmYXVsdC0iK2MpXT1hW2RdPSExOm4uYXR0cihhLGMsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHhiP2M6ZCl9fSksdWI9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI9PT0hMT9uLnJlbW92ZUF0dHIoYSxjKTp5YiYmeGJ8fCF3Yi50ZXN0KGMpP2Euc2V0QXR0cmlidXRlKCF4YiYmbi5wcm9wRml4W2NdfHxjLGMpOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitjKV09YVtjXT0hMCxjfX0sbi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9dmJbYl18fG4uZmluZC5hdHRyO3liJiZ4Ynx8IXdiLnRlc3QoYik/dmJbYl09ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGY7cmV0dXJuIGR8fChmPXZiW2JdLHZiW2JdPWUsZT1udWxsIT1jKGEsYixkKT9iLnRvTG93ZXJDYXNlKCk6bnVsbCx2YltiXT1mKSxlfTp2YltiXT1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmFbbi5jYW1lbENhc2UoImRlZmF1bHQtIitiKV0/Yi50b0xvd2VyQ2FzZSgpOm51bGx9fSkseWImJnhifHwobi5hdHRySG9va3MudmFsdWU9e3NldDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4ubm9kZU5hbWUoYSwiaW5wdXQiKT92b2lkKGEuZGVmYXVsdFZhbHVlPWIpOnRiJiZ0Yi5zZXQoYSxiLGMpfX0pLHhifHwodGI9e3NldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHxhLnNldEF0dHJpYnV0ZU5vZGUoZD1hLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKGMpKSxkLnZhbHVlPWIrPSIiLCJ2YWx1ZSI9PT1jfHxiPT09YS5nZXRBdHRyaWJ1dGUoYyk/Yjp2b2lkIDB9fSx2Yi5pZD12Yi5uYW1lPXZiLmNvb3Jkcz1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOihkPWEuZ2V0QXR0cmlidXRlTm9kZShiKSkmJiIiIT09ZC52YWx1ZT9kLnZhbHVlOm51bGx9LG4udmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmdldEF0dHJpYnV0ZU5vZGUoYik7cmV0dXJuIGMmJmMuc3BlY2lmaWVkP2MudmFsdWU6dm9pZCAwfSxzZXQ6dGIuc2V0fSxuLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihhLGIsYyl7dGIuc2V0KGEsIiI9PT1iPyExOmIsYyl9fSxuLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7bi5hdHRySG9va3NbYl09e3NldDpmdW5jdGlvbihhLGMpe3JldHVybiIiPT09Yz8oYS5zZXRBdHRyaWJ1dGUoYiwiYXV0byIpLGMpOnZvaWQgMH19fSkpLGwuc3R5bGV8fChuLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHR8fHZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD1iKyIifX0pO3ZhciB6Yj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvaSxBYj0vXig/OmF8YXJlYSkkL2k7bi5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gWSh0aGlzLG4ucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1uLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09dm9pZCAwLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGIpe319KX19KSxuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tzW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXt2YXIgYj1uLmZpbmQuYXR0cihhLCJ0YWJpbmRleCIpO3JldHVybiBiP3BhcnNlSW50KGIsMTApOnpiLnRlc3QoYS5ub2RlTmFtZSl8fEFiLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOi0xfX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLGwuaHJlZk5vcm1hbGl6ZWR8fG4uZWFjaChbImhyZWYiLCJzcmMiXSxmdW5jdGlvbihhLGIpe24ucHJvcEhvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKGIsNCl9fX0pLGwub3B0U2VsZWN0ZWR8fChuLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfSxzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksbC5lbmN0eXBlfHwobi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIik7dmFyIEJiPS9bXHRcclxuXGZdL2c7ZnVuY3Rpb24gQ2IoYSl7cmV0dXJuIG4uYXR0cihhLCJjbGFzcyIpfHwiIn1uLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaT0wO2lmKG4uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYixDYih0aGlzKSkpfSk7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhKXtiPWEubWF0Y2goRyl8fFtdO3doaWxlKGM9dGhpc1tpKytdKWlmKGU9Q2IoYyksZD0xPT09Yy5ub2RlVHlwZSYmKCIgIitlKyIgIikucmVwbGFjZShCYiwiICIpKXtnPTA7d2hpbGUoZj1iW2crK10pZC5pbmRleE9mKCIgIitmKyIgIik8MCYmKGQrPWYrIiAiKTtoPW4udHJpbShkKSxlIT09aCYmbi5hdHRyKGMsImNsYXNzIixoKX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGk9MDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsQ2IodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7aWYoInN0cmluZyI9PXR5cGVvZiBhJiZhKXtiPWEubWF0Y2goRyl8fFtdO3doaWxlKGM9dGhpc1tpKytdKWlmKGU9Q2IoYyksZD0xPT09Yy5ub2RlVHlwZSYmKCIgIitlKyIgIikucmVwbGFjZShCYiwiICIpKXtnPTA7d2hpbGUoZj1iW2crK10pd2hpbGUoZC5pbmRleE9mKCIgIitmKyIgIik+LTEpZD1kLnJlcGxhY2UoIiAiK2YrIiAiLCIgIik7aD1uLnRyaW0oZCksZSE9PWgmJm4uYXR0cihjLCJjbGFzcyIsaCl9fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhO3JldHVybiJib29sZWFuIj09dHlwZW9mIGImJiJzdHJpbmciPT09Yz9iP3RoaXMuYWRkQ2xhc3MoYSk6dGhpcy5yZW1vdmVDbGFzcyhhKTpuLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGMpe24odGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyxDYih0aGlzKSxiKSxiKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiLGQsZSxmO2lmKCJzdHJpbmciPT09Yyl7ZD0wLGU9bih0aGlzKSxmPWEubWF0Y2goRyl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2Ugdm9pZCAwIT09YSYmImJvb2xlYW4iIT09Y3x8KGI9Q2IodGhpcyksYiYmbi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIixiKSxuLmF0dHIodGhpcywiY2xhc3MiLGJ8fGE9PT0hMT8iIjpuLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQ9MDtiPSIgIithKyIgIjt3aGlsZShjPXRoaXNbZCsrXSlpZigxPT09Yy5ub2RlVHlwZSYmKCIgIitDYihjKSsiICIpLnJlcGxhY2UoQmIsIiAiKS5pbmRleE9mKGIpPi0xKXJldHVybiEwO3JldHVybiExfX0pLG4uZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG4uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX19KTt2YXIgRGI9YS5sb2NhdGlvbixFYj1uLm5vdygpLEZiPS9cPy8sR2I9LygsKXwoXFt8eyl8KH18XSl8Iig/OlteIlxcXHJcbl18XFxbIlxcXC9iZm5ydF18XFx1W1xkYS1mQS1GXXs0fSkqIlxzKjo/fHRydWV8ZmFsc2V8bnVsbHwtPyg/ITBcZClcZCsoPzpcLlxkK3wpKD86W2VFXVsrLV0/XGQrfCkvZztuLnBhcnNlSlNPTj1mdW5jdGlvbihiKXtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIrIiIpO3ZhciBjLGQ9bnVsbCxlPW4udHJpbShiKyIiKTtyZXR1cm4gZSYmIW4udHJpbShlLnJlcGxhY2UoR2IsZnVuY3Rpb24oYSxiLGUsZil7cmV0dXJuIGMmJmImJihkPTApLDA9PT1kP2E6KGM9ZXx8YixkKz0hZi0hZSwiIil9KSk/RnVuY3Rpb24oInJldHVybiAiK2UpKCk6bi5lcnJvcigiSW52YWxpZCBKU09OOiAiK2IpfSxuLnBhcnNlWE1MPWZ1bmN0aW9uKGIpe3ZhciBjLGQ7aWYoIWJ8fCJzdHJpbmciIT10eXBlb2YgYilyZXR1cm4gbnVsbDt0cnl7YS5ET01QYXJzZXI/KGQ9bmV3IGEuRE9NUGFyc2VyLGM9ZC5wYXJzZUZyb21TdHJpbmcoYiwidGV4dC94bWwiKSk6KGM9bmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGMuYXN5bmM9ImZhbHNlIixjLmxvYWRYTUwoYikpfWNhdGNoKGUpe2M9dm9pZCAwfXJldHVybiBjJiZjLmRvY3VtZW50RWxlbWVudCYmIWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RofHxuLmVycm9yKCJJbnZhbGlkIFhNTDogIitiKSxjfTt2YXIgSGI9LyMuKiQvLEliPS8oWz8mXSlfPVteJl0qLyxKYj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dtLEtiPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLExiPS9eKD86R0VUfEhFQUQpJC8sTWI9L15cL1wvLyxOYj0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwpKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxPYj17fSxQYj17fSxRYj0iKi8iLmNvbmNhdCgiKiIpLFJiPURiLmhyZWYsU2I9TmIuZXhlYyhSYi50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gVGIoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1iLGI9IioiKTt2YXIgZCxlPTAsZj1iLnRvTG93ZXJDYXNlKCkubWF0Y2goRyl8fFtdO2lmKG4uaXNGdW5jdGlvbihjKSl3aGlsZShkPWZbZSsrXSkiKyI9PT1kLmNoYXJBdCgwKT8oZD1kLnNsaWNlKDEpfHwiKiIsKGFbZF09YVtkXXx8W10pLnVuc2hpZnQoYykpOihhW2RdPWFbZF18fFtdKS5wdXNoKGMpfX1mdW5jdGlvbiBVYihhLGIsYyxkKXt2YXIgZT17fSxmPWE9PT1QYjtmdW5jdGlvbiBnKGgpe3ZhciBpO3JldHVybiBlW2hdPSEwLG4uZWFjaChhW2hdfHxbXSxmdW5jdGlvbihhLGgpe3ZhciBqPWgoYixjLGQpO3JldHVybiJzdHJpbmciIT10eXBlb2Yganx8Znx8ZVtqXT9mPyEoaT1qKTp2b2lkIDA6KGIuZGF0YVR5cGVzLnVuc2hpZnQoaiksZyhqKSwhMSl9KSxpfXJldHVybiBnKGIuZGF0YVR5cGVzWzBdKXx8IWVbIioiXSYmZygiKiIpfWZ1bmN0aW9uIFZiKGEsYil7dmFyIGMsZCxlPW4uYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IoZCBpbiBiKXZvaWQgMCE9PWJbZF0mJigoZVtkXT9hOmN8fChjPXt9KSlbZF09YltkXSk7cmV0dXJuIGMmJm4uZXh0ZW5kKCEwLGEsYyksYX1mdW5jdGlvbiBXYihhLGIsYyl7dmFyIGQsZSxmLGcsaD1hLmNvbnRlbnRzLGk9YS5kYXRhVHlwZXM7d2hpbGUoIioiPT09aVswXSlpLnNoaWZ0KCksdm9pZCAwPT09ZSYmKGU9YS5taW1lVHlwZXx8Yi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKGUpZm9yKGcgaW4gaClpZihoW2ddJiZoW2ddLnRlc3QoZSkpe2kudW5zaGlmdChnKTticmVha31pZihpWzBdaW4gYylmPWlbMF07ZWxzZXtmb3IoZyBpbiBjKXtpZighaVswXXx8YS5jb252ZXJ0ZXJzW2crIiAiK2lbMF1dKXtmPWc7YnJlYWt9ZHx8KGQ9Zyl9Zj1mfHxkfXJldHVybiBmPyhmIT09aVswXSYmaS51bnNoaWZ0KGYpLGNbZl0pOnZvaWQgMH1mdW5jdGlvbiBYYihhLGIsYyxkKXt2YXIgZSxmLGcsaCxpLGo9e30saz1hLmRhdGFUeXBlcy5zbGljZSgpO2lmKGtbMV0pZm9yKGcgaW4gYS5jb252ZXJ0ZXJzKWpbZy50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbZ107Zj1rLnNoaWZ0KCk7d2hpbGUoZilpZihhLnJlc3BvbnNlRmllbGRzW2ZdJiYoY1thLnJlc3BvbnNlRmllbGRzW2ZdXT1iKSwhaSYmZCYmYS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSksaT1mLGY9ay5zaGlmdCgpKWlmKCIqIj09PWYpZj1pO2Vsc2UgaWYoIioiIT09aSYmaSE9PWYpe2lmKGc9altpKyIgIitmXXx8alsiKiAiK2ZdLCFnKWZvcihlIGluIGopaWYoaD1lLnNwbGl0KCIgIiksaFsxXT09PWYmJihnPWpbaSsiICIraFswXV18fGpbIiogIitoWzBdXSkpe2c9PT0hMD9nPWpbZV06altlXSE9PSEwJiYoZj1oWzBdLGsudW5zaGlmdChoWzFdKSk7YnJlYWt9aWYoZyE9PSEwKWlmKGcmJmFbInRocm93cyJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6Zz9sOiJObyBjb252ZXJzaW9uIGZyb20gIitpKyIgdG8gIitmfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOmJ9fW4uZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpSYix0eXBlOiJHRVQiLGlzTG9jYWw6S2IudGVzdChTYlsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpRYix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpuLnBhcnNlSlNPTiwidGV4dCB4bWwiOm4ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP1ZiKFZiKGEsbi5hamF4U2V0dGluZ3MpLGIpOlZiKG4uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOlRiKE9iKSxhamF4VHJhbnNwb3J0OlRiKFBiKSxhamF4OmZ1bmN0aW9uKGIsYyl7Im9iamVjdCI9PXR5cGVvZiBiJiYoYz1iLGI9dm9pZCAwKSxjPWN8fHt9O3ZhciBkLGUsZixnLGgsaSxqLGssbD1uLmFqYXhTZXR1cCh7fSxjKSxtPWwuY29udGV4dHx8bCxvPWwuY29udGV4dCYmKG0ubm9kZVR5cGV8fG0uanF1ZXJ5KT9uKG0pOm4uZXZlbnQscD1uLkRlZmVycmVkKCkscT1uLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxyPWwuc3RhdHVzQ29kZXx8e30scz17fSx0PXt9LHU9MCx2PSJjYW5jZWxlZCIsdz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT11KXtpZighayl7az17fTt3aGlsZShiPUpiLmV4ZWMoZykpa1tiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1rW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXU/ZzpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB1fHwoYT10W2NdPXRbY118fGEsc1thXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB1fHwobC5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj51KWZvcihiIGluIGEpcltiXT1bcltiXSxhW2JdXTtlbHNlIHcuYWx3YXlzKGFbdy5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8djtyZXR1cm4gaiYmai5hYm9ydChiKSx5KDAsYiksdGhpc319O2lmKHAucHJvbWlzZSh3KS5jb21wbGV0ZT1xLmFkZCx3LnN1Y2Nlc3M9dy5kb25lLHcuZXJyb3I9dy5mYWlsLGwudXJsPSgoYnx8bC51cmx8fFJiKSsiIikucmVwbGFjZShIYiwiIikucmVwbGFjZShNYixTYlsxXSsiLy8iKSxsLnR5cGU9Yy5tZXRob2R8fGMudHlwZXx8bC5tZXRob2R8fGwudHlwZSxsLmRhdGFUeXBlcz1uLnRyaW0obC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEcpfHxbIiJdLG51bGw9PWwuY3Jvc3NEb21haW4mJihkPU5iLmV4ZWMobC51cmwudG9Mb3dlckNhc2UoKSksbC5jcm9zc0RvbWFpbj0hKCFkfHxkWzFdPT09U2JbMV0mJmRbMl09PT1TYlsyXSYmKGRbM118fCgiaHR0cDoiPT09ZFsxXT8iODAiOiI0NDMiKSk9PT0oU2JbM118fCgiaHR0cDoiPT09U2JbMV0/IjgwIjoiNDQzIikpKSksbC5kYXRhJiZsLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGwuZGF0YSYmKGwuZGF0YT1uLnBhcmFtKGwuZGF0YSxsLnRyYWRpdGlvbmFsKSksVWIoT2IsbCxjLHcpLDI9PT11KXJldHVybiB3O2k9bi5ldmVudCYmbC5nbG9iYWwsaSYmMD09PW4uYWN0aXZlKysmJm4uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IiksbC50eXBlPWwudHlwZS50b1VwcGVyQ2FzZSgpLGwuaGFzQ29udGVudD0hTGIudGVzdChsLnR5cGUpLGY9bC51cmwsbC5oYXNDb250ZW50fHwobC5kYXRhJiYoZj1sLnVybCs9KEZiLnRlc3QoZik/IiYiOiI/IikrbC5kYXRhLGRlbGV0ZSBsLmRhdGEpLGwuY2FjaGU9PT0hMSYmKGwudXJsPUliLnRlc3QoZik/Zi5yZXBsYWNlKEliLCIkMV89IitFYisrKTpmKyhGYi50ZXN0KGYpPyImIjoiPyIpKyJfPSIrRWIrKykpLGwuaWZNb2RpZmllZCYmKG4ubGFzdE1vZGlmaWVkW2ZdJiZ3LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixuLmxhc3RNb2RpZmllZFtmXSksbi5ldGFnW2ZdJiZ3LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG4uZXRhZ1tmXSkpLChsLmRhdGEmJmwuaGFzQ29udGVudCYmbC5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKSYmdy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGwuY29udGVudFR5cGUpLHcuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixsLmRhdGFUeXBlc1swXSYmbC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXT9sLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dKygiKiIhPT1sLmRhdGFUeXBlc1swXT8iLCAiK1FiKyI7IHE9MC4wMSI6IiIpOmwuYWNjZXB0c1siKiJdKTtmb3IoZSBpbiBsLmhlYWRlcnMpdy5zZXRSZXF1ZXN0SGVhZGVyKGUsbC5oZWFkZXJzW2VdKTtpZihsLmJlZm9yZVNlbmQmJihsLmJlZm9yZVNlbmQuY2FsbChtLHcsbCk9PT0hMXx8Mj09PXUpKXJldHVybiB3LmFib3J0KCk7dj0iYWJvcnQiO2ZvcihlIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXdbZV0obFtlXSk7aWYoaj1VYihQYixsLGMsdykpe2lmKHcucmVhZHlTdGF0ZT0xLGkmJm8udHJpZ2dlcigiYWpheFNlbmQiLFt3LGxdKSwyPT09dSlyZXR1cm4gdztsLmFzeW5jJiZsLnRpbWVvdXQ+MCYmKGg9YS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dy5hYm9ydCgidGltZW91dCIpfSxsLnRpbWVvdXQpKTt0cnl7dT0xLGouc2VuZChzLHkpfWNhdGNoKHgpe2lmKCEoMj51KSl0aHJvdyB4O3koLTEseCl9fWVsc2UgeSgtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24geShiLGMsZCxlKXt2YXIgayxzLHQsdix4LHk9YzsyIT09dSYmKHU9MixoJiZhLmNsZWFyVGltZW91dChoKSxqPXZvaWQgMCxnPWV8fCIiLHcucmVhZHlTdGF0ZT1iPjA/NDowLGs9Yj49MjAwJiYzMDA+Ynx8MzA0PT09YixkJiYodj1XYihsLHcsZCkpLHY9WGIobCx2LHcsayksaz8obC5pZk1vZGlmaWVkJiYoeD13LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikseCYmKG4ubGFzdE1vZGlmaWVkW2ZdPXgpLHg9dy5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLHgmJihuLmV0YWdbZl09eCkpLDIwND09PWJ8fCJIRUFEIj09PWwudHlwZT95PSJub2NvbnRlbnQiOjMwND09PWI/eT0ibm90bW9kaWZpZWQiOih5PXYuc3RhdGUscz12LmRhdGEsdD12LmVycm9yLGs9IXQpKToodD15LCFiJiZ5fHwoeT0iZXJyb3IiLDA+YiYmKGI9MCkpKSx3LnN0YXR1cz1iLHcuc3RhdHVzVGV4dD0oY3x8eSkrIiIsaz9wLnJlc29sdmVXaXRoKG0sW3MseSx3XSk6cC5yZWplY3RXaXRoKG0sW3cseSx0XSksdy5zdGF0dXNDb2RlKHIpLHI9dm9pZCAwLGkmJm8udHJpZ2dlcihrPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW3csbCxrP3M6dF0pLHEuZmlyZVdpdGgobSxbdyx5XSksaSYmKG8udHJpZ2dlcigiYWpheENvbXBsZXRlIixbdyxsXSksLS1uLmFjdGl2ZXx8bi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIHd9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLmdldChhLGIsYywianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5nZXQoYSx2b2lkIDAsYiwic2NyaXB0Iil9fSksbi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYil7bltiXT1mdW5jdGlvbihhLGMsZCxlKXtyZXR1cm4gbi5pc0Z1bmN0aW9uKGMpJiYoZT1lfHxkLGQ9YyxjPXZvaWQgMCksbi5hamF4KG4uZXh0ZW5kKHt1cmw6YSx0eXBlOmIsZGF0YVR5cGU6ZSxkYXRhOmMsc3VjY2VzczpkfSxuLmlzUGxhaW5PYmplY3QoYSkmJmEpKX19KSxuLl9ldmFsVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBuLmFqYXgoe3VybDphLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSl9LG4uZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKG4uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1uKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiYxPT09YS5maXJzdENoaWxkLm5vZGVUeXBlKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9bih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1uLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtuKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7bi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fG4odGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pO2Z1bmN0aW9uIFliKGEpe3JldHVybiBhLnN0eWxlJiZhLnN0eWxlLmRpc3BsYXl8fG4uY3NzKGEsImRpc3BsYXkiKX1mdW5jdGlvbiBaYihhKXtpZighbi5jb250YWlucyhhLm93bmVyRG9jdW1lbnR8fGQsYSkpcmV0dXJuITA7d2hpbGUoYSYmMT09PWEubm9kZVR5cGUpe2lmKCJub25lIj09PVliKGEpfHwiaGlkZGVuIj09PWEudHlwZSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1cm4hMX1uLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGwucmVsaWFibGVIaWRkZW5PZmZzZXRzKCk/YS5vZmZzZXRXaWR0aDw9MCYmYS5vZmZzZXRIZWlnaHQ8PTAmJiFhLmdldENsaWVudFJlY3RzKCkubGVuZ3RoOlpiKGEpfSxuLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFuLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciAkYj0vJTIwL2csX2I9L1xbXF0kLyxhYz0vXHI/XG4vZyxiYz0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksY2M9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIGRjKGEsYixjLGQpe3ZhciBlO2lmKG4uaXNBcnJheShiKSluLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fF9iLnRlc3QoYSk/ZChhLGUpOmRjKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPWU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1uLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilkYyhhKyJbIitlKyJdIixiW2VdLGMsZCl9bi5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bi5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW4uYWpheFNldHRpbmdzJiZuLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW4uaXNQbGFpbk9iamVjdChhKSluLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKWRjKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKCRiLCIrIil9LG4uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW4ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP24ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW4odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZjYy50ZXN0KHRoaXMubm9kZU5hbWUpJiYhYmMudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVoudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1uKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bi5pc0FycmF5KGMpP24ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShhYywiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoYWMsIlxyXG4iKX19KS5nZXQoKX19KSxuLmFqYXhTZXR0aW5ncy54aHI9dm9pZCAwIT09YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNMb2NhbD9pYygpOmQuZG9jdW1lbnRNb2RlPjg/aGMoKTovXihnZXR8cG9zdHxoZWFkfHB1dHxkZWxldGV8b3B0aW9ucykkL2kudGVzdCh0aGlzLnR5cGUpJiZoYygpfHxpYygpfTpoYzt2YXIgZWM9MCxmYz17fSxnYz1uLmFqYXhTZXR0aW5ncy54aHIoKTthLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbnVubG9hZCIsZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gZmMpZmNbYV0odm9pZCAwLCEwKX0pLGwuY29ycz0hIWdjJiYid2l0aENyZWRlbnRpYWxzImluIGdjLGdjPWwuYWpheD0hIWdjLGdjJiZuLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYil7aWYoIWIuY3Jvc3NEb21haW58fGwuY29ycyl7dmFyIGM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZCxlKXt2YXIgZixnPWIueGhyKCksaD0rK2VjO2lmKGcub3BlbihiLnR5cGUsYi51cmwsYi5hc3luYyxiLnVzZXJuYW1lLGIucGFzc3dvcmQpLGIueGhyRmllbGRzKWZvcihmIGluIGIueGhyRmllbGRzKWdbZl09Yi54aHJGaWVsZHNbZl07Yi5taW1lVHlwZSYmZy5vdmVycmlkZU1pbWVUeXBlJiZnLm92ZXJyaWRlTWltZVR5cGUoYi5taW1lVHlwZSksYi5jcm9zc0RvbWFpbnx8ZFsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoZFsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihmIGluIGQpdm9pZCAwIT09ZFtmXSYmZy5zZXRSZXF1ZXN0SGVhZGVyKGYsZFtmXSsiIik7Zy5zZW5kKGIuaGFzQ29udGVudCYmYi5kYXRhfHxudWxsKSxjPWZ1bmN0aW9uKGEsZCl7dmFyIGYsaSxqO2lmKGMmJihkfHw0PT09Zy5yZWFkeVN0YXRlKSlpZihkZWxldGUgZmNbaF0sYz12b2lkIDAsZy5vbnJlYWR5c3RhdGVjaGFuZ2U9bi5ub29wLGQpNCE9PWcucmVhZHlTdGF0ZSYmZy5hYm9ydCgpO2Vsc2V7aj17fSxmPWcuc3RhdHVzLCJzdHJpbmciPT10eXBlb2YgZy5yZXNwb25zZVRleHQmJihqLnRleHQ9Zy5yZXNwb25zZVRleHQpO3RyeXtpPWcuc3RhdHVzVGV4dH1jYXRjaChrKXtpPSIifWZ8fCFiLmlzTG9jYWx8fGIuY3Jvc3NEb21haW4/MTIyMz09PWYmJihmPTIwNCk6Zj1qLnRleHQ/MjAwOjQwNH1qJiZlKGYsaSxqLGcuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpfSxiLmFzeW5jPzQ9PT1nLnJlYWR5U3RhdGU/YS5zZXRUaW1lb3V0KGMpOmcub25yZWFkeXN0YXRlY2hhbmdlPWZjW2hdPWM6YygpfSxhYm9ydDpmdW5jdGlvbigpe2MmJmModm9pZCAwLCEwKX19fX0pO2Z1bmN0aW9uIGhjKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChiKXt9fWZ1bmN0aW9uIGljKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319bi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ2xvYmFsRXZhbChhKSxhfX19KSxuLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oYSl7dm9pZCAwPT09YS5jYWNoZSYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksbi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBiLGM9ZC5oZWFkfHxuKCJoZWFkIilbMF18fGQuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZil7Yj1kLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGIuYXN5bmM9ITAsYS5zY3JpcHRDaGFyc2V0JiYoYi5jaGFyc2V0PWEuc2NyaXB0Q2hhcnNldCksYi5zcmM9YS51cmwsYi5vbmxvYWQ9Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oYSxjKXsoY3x8IWIucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChiLnJlYWR5U3RhdGUpKSYmKGIub25sb2FkPWIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYiksYj1udWxsLGN8fGYoMjAwLCJzdWNjZXNzIikpfSxjLmluc2VydEJlZm9yZShiLGMuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7YiYmYi5vbmxvYWQodm9pZCAwLCEwKX19fX0pO3ZhciBqYz1bXSxrYz0vKD0pXD8oPz0mfCQpfFw/XD8vO24uYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgYT1qYy5wb3AoKXx8bi5leHBhbmRvKyJfIitFYisrO3JldHVybiB0aGlzW2FdPSEwLGF9fSksbi5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5qc29ucCE9PSExJiYoa2MudGVzdChiLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBiLmRhdGEmJjA9PT0oYi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZrYy50ZXN0KGIuZGF0YSkmJiJkYXRhIik7cmV0dXJuIGh8fCJqc29ucCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpzb25wQ2FsbGJhY2s9bi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2Uoa2MsIiQxIitlKTpiLmpzb25wIT09ITEmJihiLnVybCs9KEZiLnRlc3QoYi51cmwpPyImIjoiPyIpK2IuanNvbnArIj0iK2UpLGIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBnfHxuLmVycm9yKGUrIiB3YXMgbm90IGNhbGxlZCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIixmPWFbZV0sYVtlXT1mdW5jdGlvbigpe2c9YXJndW1lbnRzfSxkLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWY/bihhKS5yZW1vdmVQcm9wKGUpOmFbZV09ZixiW2VdJiYoYi5qc29ucENhbGxiYWNrPWMuanNvbnBDYWxsYmFjayxqYy5wdXNoKGUpKSxnJiZuLmlzRnVuY3Rpb24oZikmJmYoZ1swXSksZz1mPXZvaWQgMH0pLCJzY3JpcHQiKTp2b2lkIDB9KSxuLnBhcnNlSFRNTD1mdW5jdGlvbihhLGIsYyl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiBiJiYoYz1iLGI9ITEpLGI9Ynx8ZDt2YXIgZT14LmV4ZWMoYSksZj0hYyYmW107cmV0dXJuIGU/W2IuY3JlYXRlRWxlbWVudChlWzFdKV06KGU9amEoW2FdLGIsZiksZiYmZi5sZW5ndGgmJm4oZikucmVtb3ZlKCksbi5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX07dmFyIGxjPW4uZm4ubG9hZDtuLmZuLmxvYWQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSYmbGMpcmV0dXJuIGxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZCxlLGYsZz10aGlzLGg9YS5pbmRleE9mKCIgIik7cmV0dXJuIGg+LTEmJihkPW4udHJpbShhLnNsaWNlKGgsYS5sZW5ndGgpKSxhPWEuc2xpY2UoMCxoKSksbi5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJiJvYmplY3QiPT10eXBlb2YgYiYmKGU9IlBPU1QiKSxnLmxlbmd0aD4wJiZuLmFqYXgoe3VybDphLHR5cGU6ZXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yn0pLmRvbmUoZnVuY3Rpb24oYSl7Zj1hcmd1bWVudHMsZy5odG1sKGQ/bigiPGRpdj4iKS5hcHBlbmQobi5wYXJzZUhUTUwoYSkpLmZpbmQoZCk6YSl9KS5hbHdheXMoYyYmZnVuY3Rpb24oYSxiKXtnLmVhY2goZnVuY3Rpb24oKXtjLmFwcGx5KHRoaXMsZnx8W2EucmVzcG9uc2VUZXh0LGIsYV0pfSl9KSx0aGlzfSxuLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxuLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gbi5ncmVwKG4udGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofTtmdW5jdGlvbiBtYyhhKXtyZXR1cm4gbi5pc1dpbmRvdyhhKT9hOjk9PT1hLm5vZGVUeXBlP2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfW4ub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGs9bi5jc3MoYSwicG9zaXRpb24iKSxsPW4oYSksbT17fTsic3RhdGljIj09PWsmJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLGg9bC5vZmZzZXQoKSxmPW4uY3NzKGEsInRvcCIpLGk9bi5jc3MoYSwibGVmdCIpLGo9KCJhYnNvbHV0ZSI9PT1rfHwiZml4ZWQiPT09aykmJm4uaW5BcnJheSgiYXV0byIsW2YsaV0pPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxuLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsbi5leHRlbmQoe30saCkpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLG0pOmwuY3NzKG0pfX0sbi5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1hP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24ub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYixjLGQ9e3RvcDowLGxlZnQ6MH0sZT10aGlzWzBdLGY9ZSYmZS5vd25lckRvY3VtZW50O2lmKGYpcmV0dXJuIGI9Zi5kb2N1bWVudEVsZW1lbnQsbi5jb250YWlucyhiLGUpPygidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoZD1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxjPW1jKGYpLHt0b3A6ZC50b3ArKGMucGFnZVlPZmZzZXR8fGIuc2Nyb2xsVG9wKS0oYi5jbGllbnRUb3B8fDApLGxlZnQ6ZC5sZWZ0KyhjLnBhZ2VYT2Zmc2V0fHxiLnNjcm9sbExlZnQpLShiLmNsaWVudExlZnR8fDApfSk6ZH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9e3RvcDowLGxlZnQ6MH0sZD10aGlzWzBdO3JldHVybiJmaXhlZCI9PT1uLmNzcyhkLCJwb3NpdGlvbiIpP2I9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxuLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGM9YS5vZmZzZXQoKSksYy50b3ArPW4uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksYy5sZWZ0Kz1uLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1jLnRvcC1uLmNzcyhkLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1jLmxlZnQtbi5jc3MoZCwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGEmJiFuLm5vZGVOYW1lKGEsImh0bWwiKSYmInN0YXRpYyI9PT1uLmNzcyhhLCJwb3NpdGlvbiIpKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF8fFFhfSl9fSksbi5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9L1kvLnRlc3QoYik7bi5mblthXT1mdW5jdGlvbihkKXtyZXR1cm4gWSh0aGlzLGZ1bmN0aW9uKGEsZCxlKXt2YXIgZj1tYyhhKTtyZXR1cm4gdm9pZCAwPT09ZT9mP2IgaW4gZj9mW2JdOmYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2RdOmFbZF06dm9pZChmP2Yuc2Nyb2xsVG8oYz9uKGYpLnNjcm9sbExlZnQoKTplLGM/ZTpuKGYpLnNjcm9sbFRvcCgpKTphW2RdPWUpfSxhLGQsYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KSxuLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPVVhKGwucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihhLGMpe3JldHVybiBjPyhjPVNhKGEsYiksT2EudGVzdChjKT9uKGEpLnBvc2l0aW9uKClbYl0rInB4IjpjKTp2b2lkIDB9KX0pLG4uZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5lYWNoKHsKK3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIFkodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pLG4uZm4uc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sbi5mbi5hbmRTZWxmPW4uZm4uYWRkQmFjaywiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBuYz1hLmpRdWVyeSxvYz1hLiQ7cmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYmKGEuJD1vYyksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9bmMpLG59LGJ8fChhLmpRdWVyeT1hLiQ9biksbn0pOwpkaWZmIC0tZ2l0IGEvZG9jcy9zaXRlL2hvbWUvanMvcHJpc20uanMgYi9kb2NzL3NpdGUvaG9tZS9qcy9wcmlzbS5qcwppbmRleCBjMzcyNTlmLi5kYjZmNDIyIDEwMDY0NAotLS0gYS9kb2NzL3NpdGUvaG9tZS9qcy9wcmlzbS5qcworKysgYi9kb2NzL3NpdGUvaG9tZS9qcy9wcmlzbS5qcwpAQCAtMSw1ICsxLDUgQEAKLS8qIFByaXNtSlMgMS4yNy4wCi1odHRwczovL3ByaXNtanMuY29tL2Rvd25sb2FkLmh0bWwjdGhlbWVzPXByaXNtLXRvbW9ycm93Jmxhbmd1YWdlcz1tYXJrdXArY3NzK2NsaWtlK2phdmFzY3JpcHQrY3NoYXJwK2dvK2dvLW1vZHVsZStncm9vdnkramF2YStweXRob24gKi8KKy8qIFByaXNtSlMgMS4zMC4wCitodHRwczovL3ByaXNtanMuY29tL2Rvd25sb2FkI3RoZW1lcz1wcmlzbS10b21vcnJvdyZsYW5ndWFnZXM9bWFya3VwK2NzcytjbGlrZStqYXZhc2NyaXB0K2NzaGFycCtnbytnby1tb2R1bGUrZ3Jvb3Z5K2phdmErcHl0aG9uK3htbC1kb2MgKi8KIC8vLyA8cmVmZXJlbmNlIGxpYj0iV2ViV29ya2VyIi8+CiAKIHZhciBfc2VsZiA9ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykKQEAgLTIyNCw3ICsyMjQsNyBAQAogCQkJCWlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7CiAJCQkJCXJldHVybiBudWxsOwogCQkJCX0KLQkJCQlpZiAoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50ICYmIDEgPCAyIC8qIGhhY2sgdG8gdHJpcCBUUycgZmxvdyBhbmFseXNpcyAqLykgeworCQkJCWlmIChkb2N1bWVudC5jdXJyZW50U2NyaXB0ICYmIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQudGFnTmFtZSA9PT0gJ1NDUklQVCcgJiYgMSA8IDIgLyogaGFjayB0byB0cmlwIFRTJyBmbG93IGFuYWx5c2lzICovKSB7CiAJCQkJCXJldHVybiAvKiogQHR5cGUge2FueX0gKi8gKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpOwogCQkJCX0KIApAQCAtMTMxNyw3ICsxMzE3LDEwIEBACiAJCQkJCQkJcGF0dGVybjogL149LywKIAkJCQkJCQlhbGlhczogJ2F0dHItZXF1YWxzJwogCQkJCQkJfSwKLQkJCQkJCS8ifCcvCisJCQkJCQl7CisJCQkJCQkJcGF0dGVybjogL14oXHMqKVsiJ118WyInXSQvLAorCQkJCQkJCWxvb2tiZWhpbmQ6IHRydWUKKwkJCQkJCX0KIAkJCQkJXQogCQkJCX0KIAkJCX0sCkBAIC0xNDU1LDcgKzE0NTgsNyBAQAogCVByaXNtLmxhbmd1YWdlcy5jc3MgPSB7CiAJCSdjb21tZW50JzogL1wvXCpbXHNcU10qP1wqXC8vLAogCQknYXRydWxlJzogewotCQkJcGF0dGVybjogL0BbXHctXSg/OlteO3tcc118XHMrKD8hW1xze10pKSooPzo7fCg/PVxzKlx7KSkvLAorCQkJcGF0dGVybjogUmVnRXhwKCdAW1xcdy1dKD86JyArIC9bXjt7XHMiJ118XHMrKD8hXHMpLy5zb3VyY2UgKyAnfCcgKyBzdHJpbmcuc291cmNlICsgJykqPycgKyAvKD86O3woPz1ccypceykpLy5zb3VyY2UpLAogCQkJaW5zaWRlOiB7CiAJCQkJJ3J1bGUnOiAvXkBbXHctXSsvLAogCQkJCSdzZWxlY3Rvci1mdW5jdGlvbi1hcmd1bWVudCc6IHsKQEAgLTIyNjIsNyArMjI2NSw4IEBACiAJCSdvcGVyYXRvcic6IHsKIAkJCXBhdHRlcm46IC8oXnxbXi5dKSg/Ojw8PT98Pj4+Pz0/fC0+fC0tfFwrXCt8JiZ8XHxcfHw6OnxbPzp+XXxbLSsqLyUmfF4hPTw+XT0/KS9tLAogCQkJbG9va2JlaGluZDogdHJ1ZQotCQl9CisJCX0sCisJCSdjb25zdGFudCc6IC9cYltBLVpdW0EtWl9cZF0rXGIvCiAJfSk7CiAKIAlQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhJywgJ3N0cmluZycsIHsKQEAgLTIzOTMsNCArMjM5Nyw0NSBAQAogCiBQcmlzbS5sYW5ndWFnZXMucHl0aG9uWydzdHJpbmctaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjsKIAotUHJpc20ubGFuZ3VhZ2VzLnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitQcmlzbS5sYW5ndWFnZXMucHkgPSBQcmlzbS5sYW5ndWFnZXMucHl0aG9uOworCisoZnVuY3Rpb24gKFByaXNtKSB7CisKKwkvKioKKwkgKiBJZiB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaXMgcHJlc2VudCwgaXQgd2lsbCBpbnNlcnQgdGhlIGdpdmVuIGRvYyBjb21tZW50IGdyYW1tYXIgdG9rZW4gaW50byBpdC4KKwkgKgorCSAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nCisJICogQHBhcmFtIHthbnl9IGRvY0NvbW1lbnQKKwkgKi8KKwlmdW5jdGlvbiBpbnNlcnREb2NDb21tZW50KGxhbmcsIGRvY0NvbW1lbnQpIHsKKwkJaWYgKFByaXNtLmxhbmd1YWdlc1tsYW5nXSkgeworCQkJUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShsYW5nLCAnY29tbWVudCcsIHsKKwkJCQknZG9jLWNvbW1lbnQnOiBkb2NDb21tZW50CisJCQl9KTsKKwkJfQorCX0KKworCXZhciB0YWcgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZzsKKworCXZhciBzbGFzaERvY0NvbW1lbnQgPSB7CisJCXBhdHRlcm46IC9cL1wvXC8uKi8sCisJCWdyZWVkeTogdHJ1ZSwKKwkJYWxpYXM6ICdjb21tZW50JywKKwkJaW5zaWRlOiB7CisJCQkndGFnJzogdGFnCisJCX0KKwl9OworCXZhciB0aWNrRG9jQ29tbWVudCA9IHsKKwkJcGF0dGVybjogLycnJy4qLywKKwkJZ3JlZWR5OiB0cnVlLAorCQlhbGlhczogJ2NvbW1lbnQnLAorCQlpbnNpZGU6IHsKKwkJCSd0YWcnOiB0YWcKKwkJfQorCX07CisKKwlpbnNlcnREb2NDb21tZW50KCdjc2hhcnAnLCBzbGFzaERvY0NvbW1lbnQpOworCWluc2VydERvY0NvbW1lbnQoJ2ZzaGFycCcsIHNsYXNoRG9jQ29tbWVudCk7CisJaW5zZXJ0RG9jQ29tbWVudCgndmJuZXQnLCB0aWNrRG9jQ29tbWVudCk7CisKK30oUHJpc20pKTsKZGlmZiAtLWdpdCBhL2RvY3Mvc2l0ZS9ob21lL3Byb3ZpZGVycy5odG1sIGIvZG9jcy9zaXRlL2hvbWUvcHJvdmlkZXJzLmh0bWwKaW5kZXggNWVlZGJkYS4uZGFmMTZkZiAxMDA2NDQKLS0tIGEvZG9jcy9zaXRlL2hvbWUvcHJvdmlkZXJzLmh0bWwKKysrIGIvZG9jcy9zaXRlL2hvbWUvcHJvdmlkZXJzLmh0bWwKQEAgLTIyLDEwICsyMiwyNiBAQAogICAgIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiAgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm8iPgorICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIGZvbGxvdyI+CiAgICAgPGxpbmsgaHJlZj0iaW1nL2Zhdmljb24ucG5nIiByZWw9InNob3J0Y3V0IGljb24iLz4KLSAgICA8dGl0bGU+QXBhY2hlIFRpbmtlclBvcDogUHJvdmlkZXJzPC90aXRsZT4KLSAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLSAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iIj4KKyAgICA8dGl0bGU+R3JhcGggRGF0YWJhc2UgUHJvdmlkZXJzICZhbXA7IFN5c3RlbXMgfCBBcGFjaGUgVGlua2VyUG9wPC90aXRsZT4KKyAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iVGlua2VyUG9wLWVuYWJsZWQgZ3JhcGggZGF0YWJhc2VzIGFuZCBhbmFseXRpY3MgdG9vbHMgZnJvbSBsZWFkaW5nIHByb3ZpZGVycy4gRmluZCB0aGUgcmlnaHQgZ3JhcGggc3lzdGVtIGZvciB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzLiI+CisgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImdyYXBoIHByb3ZpZGVycywgZGF0YWJhc2Ugc3lzdGVtcywgVGlua2VyUG9wLCBhbmFseXRpY3MiPgorICAgIDxsaW5rIHJlbD0iY2Fub25pY2FsIiBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL3Byb3ZpZGVycy5odG1sIj4KKworICAgIDwhLS0gT3BlbiBHcmFwaCAvIEZhY2Vib29rIC0tPgorICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIj4KKyAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL3Byb3ZpZGVycy5odG1sIj4KKyAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkdyYXBoIERhdGFiYXNlIFByb3ZpZGVycyAmYW1wOyBTeXN0ZW1zIHwgQXBhY2hlIFRpbmtlclBvcCI+CisgICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJUaW5rZXJQb3AtZW5hYmxlZCBncmFwaCBkYXRhYmFzZXMgYW5kIGFuYWx5dGljcyB0b29scyBmcm9tIGxlYWRpbmcgcHJvdmlkZXJzLiBGaW5kIHRoZSByaWdodCBncmFwaCBzeXN0ZW0gZm9yIHlvdXIgYXBwbGljYXRpb24gbmVlZHMuIj4KKyAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL3Byb3ZpZGVycy9wcm92aWRlcnMucG5nIj4KKworICAgIDwhLS0gVHdpdHRlciAtLT4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmNhcmQiIGNvbnRlbnQ9InN1bW1hcnlfbGFyZ2VfaW1hZ2UiPgorICAgIDxtZXRhIG5hbWU9InR3aXR0ZXI6c2l0ZSIgY29udGVudD0iQGFwYWNoZXRpbmtlcnBvcCI+CisgICAgPG1ldGEgbmFtZT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0iR3JhcGggRGF0YWJhc2UgUHJvdmlkZXJzICZhbXA7IFN5c3RlbXMgfCBBcGFjaGUgVGlua2VyUG9wIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmRlc2NyaXB0aW9uIiBjb250ZW50PSJUaW5rZXJQb3AtZW5hYmxlZCBncmFwaCBkYXRhYmFzZXMgYW5kIGFuYWx5dGljcyB0b29scyBmcm9tIGxlYWRpbmcgcHJvdmlkZXJzLiBGaW5kIHRoZSByaWdodCBncmFwaCBzeXN0ZW0gZm9yIHlvdXIgYXBwbGljYXRpb24gbmVlZHMuIj4KKyAgICA8bWV0YSBuYW1lPSJ0d2l0dGVyOmltYWdlIiBjb250ZW50PSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2ltZy9wcm92aWRlcnMvcHJvdmlkZXJzLnBuZyI+CiAgICAgPGxpbmsgaHJlZj0iY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPgogICAgIDxsaW5rIGhyZWY9ImNzcy9mb250LWF3ZXNvbWUuY3NzIiByZWw9InN0eWxlc2hlZXQiLz4KICAgICA8bGluayBocmVmPSJjc3MvY3VzdG9tZS5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CkBAIC00OCw2ICs2NCwxMzggQEAKICAgICAgICAgfSkoKTsKICAgICA8L3NjcmlwdD4KICAgICA8IS0tIEVuZCBNYXRvbW8gQ29kZSAtLT4KKworICAgIDwhLS0gU3RydWN0dXJlZCBEYXRhIC8gSlNPTi1MRCAtLT4KKyAgICA8c2NyaXB0IHR5cGU9ImFwcGxpY2F0aW9uL2xkK2pzb24iPgorICAgIHsKKyAgICAgICJAY29udGV4dCI6ICJodHRwczovL3NjaGVtYS5vcmciLAorICAgICAgIkBncmFwaCI6IFsKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJPcmdhbml6YXRpb24iLAorICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jb3JnYW5pemF0aW9uIiwKKyAgICAgICAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAibG9nbyI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJJbWFnZU9iamVjdCIsCisgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvaW1nL2xvZ28ucG5nIiwKKyAgICAgICAgICAgICJ3aWR0aCI6IDI4MCwKKyAgICAgICAgICAgICJoZWlnaHQiOiA2MAorICAgICAgICAgIH0sCisgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFwYWNoZSBUaW5rZXJQb3AgaXMgYSBncmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGZvciBib3RoIGdyYXBoIGRhdGFiYXNlcyAoT0xUUCkgYW5kIGdyYXBoIGFuYWx5dGljIHN5c3RlbXMgKE9MQVApLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJXZWJTaXRlIiwKKyAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI3dlYnNpdGUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAgICAgICAgICJuYW1lIjogIkFwYWNoZSBUaW5rZXJQb3AiLAorICAgICAgICAgICJwdWJsaXNoZXIiOiB7CisgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvI29yZ2FuaXphdGlvbiIKKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCisgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL3Byb3ZpZGVycy5odG1sI3dlYnBhZ2UiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9wcm92aWRlcnMuaHRtbCIsCisgICAgICAgICAgIm5hbWUiOiAiR3JhcGggRGF0YWJhc2UgUHJvdmlkZXJzICYgU3lzdGVtcyB8IEFwYWNoZSBUaW5rZXJQb3AiLAorICAgICAgICAgICJpc1BhcnRPZiI6IHsKKyAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jd2Vic2l0ZSIKKyAgICAgICAgICB9LAorICAgICAgICAgICJhYm91dCI6IHsKKyAgICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8jb3JnYW5pemF0aW9uIgorICAgICAgICAgIH0sCisgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRpc2NvdmVyIFRpbmtlclBvcC1lbmFibGVkIGdyYXBoIGRhdGFiYXNlcywgcHJvY2Vzc29ycywgYW5kIGFuYWx5dGljcyB0b29scyBmcm9tIGxlYWRpbmcgcHJvdmlkZXJzLiBGaW5kIHRoZSByaWdodCBncmFwaCBkYXRhYmFzZSBzeXN0ZW0gZm9yIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgYW5kIHVzZSBjYXNlcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiSXRlbUxpc3QiLAorICAgICAgICAgICJAaWQiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9wcm92aWRlcnMuaHRtbCNpdGVtbGlzdCIsCisgICAgICAgICAgIml0ZW1MaXN0RWxlbWVudCI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgInBvc2l0aW9uIjogMSwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiQWVyb3NwaWtlIEdyYXBoIiwKKyAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2Flcm9zcGlrZS5jb20vcHJvZHVjdHMvZ3JhcGgtZGF0YWJhc2UvIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgInBvc2l0aW9uIjogMiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiQWxpYmFiYSBHcmFwaCBEYXRhYmFzZSIsCisgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9jbi5hbGl5dW4uY29tL3Byb2R1Y3QvZ2RiIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIkxpc3RJdGVtIiwKKyAgICAgICAgICAgICAgInBvc2l0aW9uIjogMywKKyAgICAgICAgICAgICAgIm5hbWUiOiAiQW1hem9uIE5lcHR1bmUiLAorICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXdzLmFtYXpvbi5jb20vbmVwdHVuZS8iCisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogIkJyZWFkY3J1bWJMaXN0IiwKKyAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvcHJvdmlkZXJzLmh0bWwjYnJlYWRjcnVtYmxpc3QiLAorICAgICAgICAgICJpdGVtTGlzdEVsZW1lbnQiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJMaXN0SXRlbSIsCisgICAgICAgICAgICAgICJwb3NpdGlvbiI6IDEsCisgICAgICAgICAgICAgICJpdGVtIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKKyAgICAgICAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJIb21lIgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiQHR5cGUiOiAiTGlzdEl0ZW0iLAorICAgICAgICAgICAgICAicG9zaXRpb24iOiAyLAorICAgICAgICAgICAgICAiaXRlbSI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiV2ViUGFnZSIsCisgICAgICAgICAgICAgICAgIkBpZCI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL3Byb3ZpZGVycy5odG1sIiwKKyAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvcHJvdmlkZXJzLmh0bWwiLAorICAgICAgICAgICAgICAgICJuYW1lIjogIkdyYXBoIERhdGFiYXNlIFByb3ZpZGVycyIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJGQVFQYWdlIiwKKyAgICAgICAgICAiQGlkIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvcHJvdmlkZXJzLmh0bWwjZmFxcGFnZSIsCisgICAgICAgICAgIm1haW5FbnRpdHkiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJRdWVzdGlvbiIsCisgICAgICAgICAgICAgICJuYW1lIjogIldoYXQgaXMgYSBUaW5rZXJQb3AtZW5hYmxlZCBncmFwaCBzeXN0ZW0/IiwKKyAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAorICAgICAgICAgICAgICAgICJ0ZXh0IjogIkEgVGlua2VyUG9wLWVuYWJsZWQgZ3JhcGggc3lzdGVtIGlzIGEgZ3JhcGggZGF0YWJhc2UsIHByb2Nlc3Nvciwgb3IgYW5hbHl0aWNzIHRvb2wgdGhhdCBpbXBsZW1lbnRzIHRoZSBBcGFjaGUgVGlua2VyUG9wIGludGVyZmFjZXMsIGFsbG93aW5nIHVzZXJzIHRvIHF1ZXJ5IHRoZSBzeXN0ZW0gdXNpbmcgdGhlIEdyZW1saW4gcXVlcnkgbGFuZ3VhZ2UgYW5kIGxldmVyYWdlIHRoZSBmdWxsIFRpbmtlclBvcCBzdGFjayByZWdhcmRsZXNzIG9mIHRoZSB1bmRlcmx5aW5nIGdyYXBoIGRhdGFiYXNlLiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiSG93IGNhbiBJIGdldCBteSBncmFwaCBzeXN0ZW0gbGlzdGVkIG9uIHRoZSBUaW5rZXJQb3AgcHJvdmlkZXJzIHBhZ2U/IiwKKyAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAorICAgICAgICAgICAgICAgICJ0ZXh0IjogIlRvIGdldCB5b3VyIGdyYXBoIHN5c3RlbSBsaXN0ZWQsIHlvdSBuZWVkIHRvIGZvbGxvdyBBcGFjaGUgVGlua2VyUG9wJ3MgcHJvdmlkZXIgbGlzdGluZyBwb2xpY3kgd2hpY2ggaW5jbHVkZXMgaW1wbGVtZW50aW5nIHRoZSByZXF1aXJlZCBUaW5rZXJQb3AgaW50ZXJmYWNlcywgcGFzc2luZyBjb21wYXRpYmlsaXR5IHRlc3RzLCBhbmQgc3VibWl0dGluZyB5b3VyIHJlcXVlc3QgdGhyb3VnaCB0aGUgYXBwcm9wcmlhdGUgY2hhbm5lbHMuIFNlZSB0aGUgcHJvdmlkZXIgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4iCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJRdWVzdGlvbiIsCisgICAgICAgICAgICAgICJuYW1lIjogIldoYXQgdHlwZXMgb2YgZ3JhcGggc3lzdGVtcyBhcmUgc3VwcG9ydGVkIGJ5IFRpbmtlclBvcD8iLAorICAgICAgICAgICAgICAiYWNjZXB0ZWRBbnN3ZXIiOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogIkFuc3dlciIsCisgICAgICAgICAgICAgICAgInRleHQiOiAiVGlua2VyUG9wIHN1cHBvcnRzIGJvdGggT0xUUCAoT25saW5lIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcpIGdyYXBoIGRhdGFiYXNlcyBmb3IgcmVhbC10aW1lIHF1ZXJpZXMgYW5kIE9MQVAgKE9ubGluZSBBbmFseXRpY2FsIFByb2Nlc3NpbmcpIGdyYXBoIHByb2Nlc3NvcnMgZm9yIGJhdGNoIGFuYWx5dGljcy4gTWFueSBzeXN0ZW1zIHN1cHBvcnQgYm90aCBhcHByb2FjaGVzLiIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogIlF1ZXN0aW9uIiwKKyAgICAgICAgICAgICAgIm5hbWUiOiAiV2hhdCBhcmUgdGhlIGJlbmVmaXRzIG9mIHVzaW5nIGEgVGlua2VyUG9wLWVuYWJsZWQgZ3JhcGggZGF0YWJhc2U/IiwKKyAgICAgICAgICAgICAgImFjY2VwdGVkQW5zd2VyIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJBbnN3ZXIiLAorICAgICAgICAgICAgICAgICJ0ZXh0IjogIlVzaW5nIGEgVGlua2VyUG9wLWVuYWJsZWQgZ3JhcGggZGF0YWJhc2UgcHJvdmlkZXMgYXBwbGljYXRpb24gcG9ydGFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBncmFwaCBzeXN0ZW1zLCBhY2Nlc3MgdG8gdGhlIEdyZW1saW4gcXVlcnkgbGFuZ3VhZ2UsIGFuZCB0aGUgYWJpbGl0eSB0byBsZXZlcmFnZSBhIGNvbW1vbiBlY29zeXN0ZW0gb2YgdG9vbHMsIGxpYnJhcmllcywgYW5kIGtub3dsZWRnZSByZWdhcmRsZXNzIG9mIHdoaWNoIHNwZWNpZmljIGdyYXBoIGRhdGFiYXNlIHlvdSBjaG9vc2UuIgorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICBdCisgICAgfQorICAgIDwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHk+CiA8IS0tIGhlYWRlciAtLT4KQEAgLTU2LDcgKzIwNCw3IEBACiAgICAgICAgIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZXhwYW5kLWxnICAiPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibmF2YmFyLWJyYW5kIiBocmVmPSJpbmRleC5odG1sIj4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9sb2dvLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL2xvZ28ucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IkFwYWNoZSBUaW5rZXJQb3AgR3JhcGggQ29tcHV0aW5nIEZyYW1ld29yayBMb2dvIj4KICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ibmF2YmFyLXRvZ2dsZXIiIHR5cGU9ImJ1dHRvbiIgZGF0YS1icy10b2dnbGU9ImNvbGxhcHNlIgogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9IiNuYXZiYXJTdXBwb3J0ZWRDb250ZW50IiBhcmlhLWNvbnRyb2xzPSJuYXZiYXJTdXBwb3J0ZWRDb250ZW50IgpAQCAtMTMyLDcgKzI4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8va3JsYXdyZW5jZS5naXRodWIuaW8vZ3JhcGgvIj5Cb29rOiBQcmFjdGljYWwgR3JlbWxpbjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHA6Ly9zcWwyZ3JlbWxpbi5jb20vIj5TUUwyR3JlbWxpbjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ka3VwcGl0ei9zcWwyZ3JlbWxpbiI+U1FMMkdyZW1saW48L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogCiAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgpAQCAtMTQ5LDYgKzI5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AvIj48aW1nIHNyYz0iaW1nL2ppcmEtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPklzc3VlIFRyYWNrZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC8iPjxpbWcgc3JjPSJpbWcvZ2l0aHViLWxvZ28ucG5nIiBjbGFzcz0ibmF2LWljb24iLz5HaXRIdWI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3R3aXRjaC1sb2dvLnBuZyIgY2xhc3M9Im5hdi1pY29uIi8+VHdpdGNoPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz0iZHJvcGRvd24taXRlbSIgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL2xpbmtlZGluLWxvZ28uc3ZnIiBjbGFzcz0ibmF2LWljb24iLz5MaW5rZWRJbjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGEgY2xhc3M9ImRyb3Bkb3duLWl0ZW0iIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3R3aXR0ZXItbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPlR3aXR0ZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPSJkcm9wZG93bi1pdGVtIiBocmVmPSJodHRwczovL3d3dy55b3V0dWJlLmNvbS9AYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3lvdXR1YmUtbG9nby5wbmciIGNsYXNzPSJuYXYtaWNvbiIvPllvdVR1YmU8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxociBjbGFzcz0iZHJvcGRvd24tZGl2aWRlciI+PC9saT4KQEAgLTE4NCw3ICszMzMsNyBAQAogCiA8IS0tIGhlcm8gLS0+CiA8ZGl2IGNsYXNzPSJjb250YWluZXIgaGVyby1pbm5lciI+Ci0gICAgPGltZyBzcmM9ImltZy9wcm92aWRlcnMvYmcucG5nIiBjbGFzcz0iaW1nLWZsdWlkIHctMTAwIiBhbHQ9ImltZyI+CisgICAgPGltZyBzcmM9ImltZy9wcm92aWRlcnMvYmcucG5nIiBjbGFzcz0iaW1nLWZsdWlkIHctMTAwIiBhbHQ9IkdyYXBoIERhdGFiYXNlIFByb3ZpZGVycyBIZWFkZXIgQmFubmVyIj4KIDwvZGl2PgogCiA8IS0tIENvbnRlbnQgLS0+CkBAIC0xOTcsNyArMzQ2LDcgQEAKICAgICAgICAgPC9kaXY+CiAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02IG1iLTQgbWQtbGctMCI+Ci0gICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9wcm92aWRlcnMvcHJvdmlkZXJzLnBuZyIgY2xhc3M9ImltZy1mbHVpZCB3LTEwMCIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvcHJvdmlkZXJzL3Byb3ZpZGVycy5wbmciIGNsYXNzPSJpbWctZmx1aWQgdy0xMDAiIGFsdD0iVGlua2VyUG9wLWVuYWJsZWQgR3JhcGggRGF0YWJhc2UgUHJvdmlkZXIgRWNvc3lzdGVtIElsbHVzdHJhdGlvbiI+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1sZy02ICI+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlLWNhc2UtcGFnZS1wbC0zIj4KQEAgLTIwOSw4ICszNTgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0aW5nIGZlYXR1cmVzLiBUaGUgb3RoZXIgdHlwZSBvZiBwcm92aWRlciBhcmUgbGFuZ3VhZ2UgZGVzaWduZXJzIHRoYXQgaGF2ZSBhIChncmFwaCkgcXVlcnkKICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlIHRoZXkgd2lzaCB0byBoYXZlIGV4ZWN1dGUgb24gdGhlIEdyZW1saW4gdHJhdmVyc2FsIG1hY2hpbmUgYW5kIHRodXMsIGFnYWluc3QgYW55CiAgICAgICAgICAgICAgICAgICAgICAgICBUaW5rZXJQb3AtZW5hYmxlZCBncmFwaCBzeXN0ZW0uPC9wPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9kZXYvcHJvdmlkZXIvIiBjbGFzcz0idGV4dC1ibHVlICI+PHU+TGVhcm4KLSAgICAgICAgICAgICAgICAgICAgICAgIE1vcmU8L3U+PC9hPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9kZXYvcHJvdmlkZXIvIiBjbGFzcz0idGV4dC1ibHVlICI+PHU+UHJvdmlkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50YXRpb24gJiBHdWlkZWxpbmVzPC91PjwvYT4KICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KQEAgLTIzMywxMCArMzgyLDEwIEBACiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctNCI+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idWMtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvcHJvdmlkZXJzLzI1LnBuZyAiIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9wcm92aWRlcnMvMjUucG5nICIgY2xhc3M9ImltZy1mbHVpZCBtYi0zIiBhbHQ9IkFlcm9zcGlrZSBHcmFwaCBMb2dvIj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRleHQtc3RhcnQgbXMtMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImZ0LTE4IGJvbGQgdGV4dC1ibHVlIiBocmVmPSJodHRwczovL2Flcm9zcGlrZS5jb20vcHJvZHVjdHMvZ3JhcGgtZGF0YWJhc2UvIj5BZXJvc3Bpa2UgR3JhcGg8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAgbXQtMiI+QSBtYXNzaXZlbHkgc2NhbGFibGUsIGhpZ2gtcGVyZm9ybWFuY2UgZ3JhcGggZGF0YWJhc2UgZm9yIHRoZSBwcm9wZXJ0eSBncmFwaCBtb2RlbDwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMCBtdC0yIj5BIG1hc3NpdmVseSBzY2FsYWJsZSwgaGlnaC1wZXJmb3JtYW5jZSwgZGlzdHJpYnV0ZWQgZ3JhcGggZGF0YWJhc2UuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDwvZGl2PgpAQCAtMjQ1LDcgKzM5NCw3IEBACiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctNCI+CiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idWMtYm94Ij4KICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvcHJvdmlkZXJzLzEucG5nICIgY2xhc3M9ImltZy1mbHVpZCBtYi0zIiBhbHQ9ImltZyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3Byb3ZpZGVycy8xLnBuZyAiIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJBbGliYWJhIEdyYXBoIERhdGFiYXNlIExvZ28iPgogICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1zdGFydCBtcy0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZnQtMTggYm9sZCB0ZXh0LWJsdWUiIGhyZWY9Imh0dHBzOi8vY24uYWxpeXVuLmNvbS9wcm9kdWN0L2dkYiI+QWxpYmFiYSBHcmFwaCBEYXRhYmFzZTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMCBtdC0yIj5BIHJlYWwtdGltZSwgcmVsaWFibGUsIGNsb3VkLW5hdGl2ZSBncmFwaCBkYXRhYmFzZSBzZXJ2aWNlIHRoYXQKQEAgLTI1OCw3ICs0MDcsNyBAQAogICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLWxnLTQiPgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVjLWJveCI+CiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1nL3Byb3ZpZGVycy8yLnBuZyAiIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJpbWciPgorICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9wcm92aWRlcnMvMi5wbmcgIiBjbGFzcz0iaW1nLWZsdWlkIG1iLTMiIGFsdD0iQW1hem9uIE5lcHR1bmUgTG9nbyI+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXN0YXJ0IG1zLTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJmdC0xOCBib2xkIHRleHQtYmx1ZSIgaHJlZj0iaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9uZXB0dW5lLyI+QW1hem9uIE5lcHR1bmU8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAgbXQtMiI+RnVsbHktbWFuYWdlZCBncmFwaCBkYXRhYmFzZSBzZXJ2aWNlLjwvcD4KQEAgLTQzMCwxOCArNTc5LDYgQEAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC02IGNvbC1sZy00Ij4KICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1Yy1ib3giPgogICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltZy9wcm92aWRlcnMvMTYucG5nICIgY2xhc3M9ImltZy1mbHVpZCBtYi0zIiBhbHQ9ImltZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXN0YXJ0IG1zLTMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJmdC0xOCBib2xkIHRleHQtYmx1ZSIgaHJlZj0iaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNuZW80ai1ncmVtbGluIj5OZW80ajwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibWItMCBtdC0yIj5PTFRQIGdyYXBoIGRhdGFiYXNlIChlbWJlZGRlZCBhbmQgaGlnaCBhdmFpbGFiaWxpdHkpLjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotCi0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtbGctNCI+Ci0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idWMtYm94Ij4KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWcvcHJvdmlkZXJzLzE3LnBuZyAiIGNsYXNzPSJpbWctZmx1aWQgbWItMyIgYWx0PSJpbWciPgogICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1zdGFydCBtcy0zIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iZnQtMTggYm9sZCB0ZXh0LWJsdWUiIGhyZWY9Imh0dHBzOi8vb3JpZW50ZGIub3JnLyI+T3JpZW50REI8L2E+CkBAIC01NjEsNyArNjk4LDcgQEAKICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJqdS1ib3giPgogICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9ImZ0LTQwIHRleHQtYmx1ZSBib2xkIj5Kb2luIFVzPC9oMj4KICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImJvbGQiPkpvaW4gdXMgb24gb3VyIERpc2NvcmQgU2VydmVyPC9wPgotICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3RwdmV3eC5wbmciIGNsYXNzPSJpbWctZmx1aWQgbXQtMyIgYWx0PSJpbWciPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9kaXNjb3JkLmdnL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy90cHZld3gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIG10LTMiIGFsdD0iVGlua2VyUG9wIERpc2NvcmQgUVIgY29kZSBhbmQgaW52aXRhdGlvbiI+PC9hPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgpAQCAtNTc3LDExICs3MTQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm9sZCBmdC0yNSI+QXBhY2hlIFRpbmtlclBvcOKEojwvZGl2PgogICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ibXQtMiBtYi00Ij5BcGFjaGUgVGlua2VyUG9w4oSiIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zIChPTEFQKS48L3A+CiAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBob3Zlci1vcC1sb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2Rpc2NvcmQuZ2cvdGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC9kaXNjb3JkLnN2ZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvZ2l0aHViLWJveC5zdmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iaW1nIj48L2E+PC9saT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudHdpdGNoLnR2L2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdGNoLnBuZyIgY2xhc3M9ImltZy1mbHVpZCIgYWx0PSJpbWciPjwvYT48L2xpPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdHRlci1zcXVhcmUuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0BhcGFjaGV0aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL3lvdXR1YmUucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9ImltZyI+PC9hPjwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Imxpc3QtaW5saW5lLWl0ZW0iPjxhIGhyZWY9Imh0dHBzOi8vZGlzY29yZC5nZy90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL2Rpc2NvcmQuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBEaXNjb3JkIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AiPjxpbWcgc3JjPSJpbWcvc29jaWFsL2dpdGh1Yi1ib3guc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBHaXRIdWIiPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3d3dy50d2l0Y2gudHYvYXBhY2hldGlua2VycG9wIj48aW1nIHNyYz0iaW1nL3NvY2lhbC90d2l0Y2gucG5nIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBUd2l0Y2giPjwvYT48L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsaXN0LWlubGluZS1pdGVtIj48YSBocmVmPSJodHRwczovL3R3aXR0ZXIuY29tL2FwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwvdHdpdHRlci1zcXVhcmUuc3ZnIiBjbGFzcz0iaW1nLWZsdWlkIiBhbHQ9IlRpbmtlclBvcCBUd2l0dGVyIj48L2E+PC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibGlzdC1pbmxpbmUtaXRlbSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGFwYWNoZXRpbmtlcnBvcCI+PGltZyBzcmM9ImltZy9zb2NpYWwveW91dHViZS5wbmciIGNsYXNzPSJpbWctZmx1aWQiIGFsdD0iVGlua2VyUG9wIFlvdVR1YmUiPjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00IGZ0LWxpbmtzIj4KQEAgLTYyMyw3ICs3NjAsNyBAQAogICAgICAgICA8L2Rpdj4KICAgICA8L2Rpdj4KIDwvZm9vdGVyPgotPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS0xLjExLjEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJqcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ianMvd293Lm1pbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0ianMvbXkuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvZG9jcy9zaXRlL2hvbWUvcm9ib3RzLnR4dCBiL2RvY3Mvc2l0ZS9ob21lL3JvYm90cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1OWUwYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc2l0ZS9ob21lL3JvYm90cy50eHQKQEAgLTAsMCArMSw2IEBACitVc2VyLWFnZW50OiAqCitBbGxvdzogLworRGlzYWxsb3c6IC9zdGFnaW5nLworCisjIFNpdGVtYXAgcmVmZXJlbmNlCitTaXRlbWFwOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL3NpdGVtYXAueG1sCmRpZmYgLS1naXQgYS9kb2NzL3NpdGUvaG9tZS9zaXRlbWFwLnhtbCBiL2RvY3Mvc2l0ZS9ob21lL3NpdGVtYXAueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmY2ZiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NpdGUvaG9tZS9zaXRlbWFwLnhtbApAQCAtMCwwICsxLDM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHVybHNldCB4bWxucz0iaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSI+CisgIDx1cmw+CisgICAgPGxvYz5odHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLzwvbG9jPgorICAgIDxsYXN0bW9kPjIwMjUtMDUtMDc8L2xhc3Rtb2Q+CisgICAgPHByaW9yaXR5PjEuMDwvcHJpb3JpdHk+CisgICAgPGNoYW5nZWZyZXE+bW9udGhseTwvY2hhbmdlZnJlcT4KKyAgPC91cmw+CisgIDx1cmw+CisgICAgPGxvYz5odHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2dyZW1saW4uaHRtbDwvbG9jPgorICAgIDxsYXN0bW9kPjIwMjUtMDUtMDc8L2xhc3Rtb2Q+CisgICAgPHByaW9yaXR5PjAuOTwvcHJpb3JpdHk+CisgICAgPGNoYW5nZWZyZXE+eWVhcmx5PC9jaGFuZ2VmcmVxPgorICA8L3VybD4KKyAgPHVybD4KKyAgICA8bG9jPmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvcHJvdmlkZXJzLmh0bWw8L2xvYz4KKyAgICA8bGFzdG1vZD4yMDI1LTA1LTA3PC9sYXN0bW9kPgorICAgIDxwcmlvcml0eT4wLjg8L3ByaW9yaXR5PgorICAgIDxjaGFuZ2VmcmVxPnllYXJseTwvY2hhbmdlZnJlcT4KKyAgPC91cmw+CisgIDx1cmw+CisgICAgPGxvYz5odHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2JlbmVmaXRzLXVzZS1jYXNlcy5odG1sPC9sb2M+CisgICAgPGxhc3Rtb2Q+MjAyNS0wNS0wNzwvbGFzdG1vZD4KKyAgICA8cHJpb3JpdHk+MC44PC9wcmlvcml0eT4KKyAgICA8Y2hhbmdlZnJlcT55ZWFybHk8L2NoYW5nZWZyZXE+CisgIDwvdXJsPgorICA8dXJsPgorICAgIDxsb2M+aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9jb21tdW5pdHkuaHRtbDwvbG9jPgorICAgIDxsYXN0bW9kPjIwMjUtMDUtMDc8L2xhc3Rtb2Q+CisgICAgPHByaW9yaXR5PjAuNzwvcHJpb3JpdHk+CisgICAgPGNoYW5nZWZyZXE+bW9udGhseTwvY2hhbmdlZnJlcT4KKyAgPC91cmw+CisgIDx1cmw+CisgICAgPGxvYz5odHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWw8L2xvYz4KKyAgICA8bGFzdG1vZD4yMDI1LTA1LTA3PC9sYXN0bW9kPgorICAgIDxwcmlvcml0eT4wLjk8L3ByaW9yaXR5PgorICAgIDxjaGFuZ2VmcmVxPm1vbnRobHk8L2NoYW5nZWZyZXE+CisgIDwvdXJsPgorPC91cmxzZXQ+CmRpZmYgLS1naXQgYS9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2NvbnRyaWJ1dGluZy5hc2NpaWRvYyBiL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvY29udHJpYnV0aW5nLmFzY2lpZG9jCmluZGV4IDRhYTgzNzYuLjg4YTI4NjEgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvY29udHJpYnV0aW5nLmFzY2lpZG9jCisrKyBiL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvY29udHJpYnV0aW5nLmFzY2lpZG9jCkBAIC0yMDEsOCArMjAxLDggQEAKIC4gQnVpbGQgdGhlIHByb2plY3QgYW5kIHJ1biB0ZXN0cy4KIC4uIEEgc2ltcGxlIGJ1aWxkIGNhbiBiZSBhY2NvbXBsaXNoZWQgd2l0aCBtYXZlbjogYG12biBjbGVhbiBpbnN0YWxsYC4KIC4uIE9mdGVuLCBhICJzaW1wbGUgYnVpbGQiIGlzbid0IHN1ZmZpY2llbnQgYW5kIGludGVncmF0aW9uIHRlc3RzIGFyZSByZXF1aXJlZDoKLWBtdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPWZhbHNlIC1EaW5jbHVkZU5lbzRqYC4KLS4uIERvY2tlciBjYW4gaGVscCBzaW1wbGlmeSBidWlsZGluZyBhbmQgdGVzdGluZzogYGRvY2tlci9idWlsZC5zaCAtdCAtaSAtbmAKK2Btdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBJbnRlZ3JhdGlvblRlc3RzPWZhbHNlYC4KKy4uIERvY2tlciBjYW4gaGVscCBzaW1wbGlmeSBidWlsZGluZyBhbmQgdGVzdGluZzogYGRvY2tlci9idWlsZC5zaCAtdCAtaWAKIC4uIFBsZWFzZSBzZWUgdGhlIDw8YnVpbGRpbmctdGVzdGluZyxCdWlsZGluZyBhbmQgVGVzdGluZz4+IHNlY3Rpb24gZm9yIG1vcmUgYnVpbGRpbmcgYW5kIHRlc3Rpbmcgb3B0aW9ucy4KIC4gQ29uc2lkZXIgd2hldGhlciBkb2N1bWVudGF0aW9uIG9yIHRlc3RzIG5lZWQgdG8gYmUgYWRkZWQgb3IgdXBkYXRlZCBhcyBwYXJ0IG9mIHRoZSBjaGFuZ2UsIGFuZCBhZGQgdGhlbSBhcyBuZWVkZWQuCiAuLiBOZWFybHkgYWxsIGNoYW5nZXMgc2hvdWxkIGluY2x1ZGUgYSBtb2RpZmljYXRpb24gdG8gdGhlIGBDSEFOR0VMT0cuYXNjaWlkb2NgIGZpbGUgLSBvbmUgb3IgbW9yZSBlbnRyaWVzIHRvCkBAIC0yMTksNyArMjE5LDcgQEAKIC4uIEluY2x1ZGUgYSByb3VnaCBzeW5vcHNpcyBvZiBob3cgdGhlIGNoYW5nZXMgd2VyZSB0ZXN0ZWQuIFRoaXMgbWlnaHQgYmUgYXMgc2ltcGxlIGFzICJSYW4gbXZuIGNsZWFuIGluc3RhbGwgdG8KIHN1Y2Nlc3MgYW5kIHBlcmZvcm1lZCBtYW51YWwgdGVzdGluZyBpbiB0aGUgR3JlbWxpbiBDb25zb2xlIi4KIC4uIEluY2x1ZGUgb3RoZXIgZGVzY3JpcHRpdmUgZWxlbWVudHMgYWJvdXQgdGhlIGNoYW5nZSBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBpbmNsdWRlZCBpbiB0aGUgSklSQSB0aWNrZXQuCi0uLiBBdXRvbWF0ZWQgYnVpbGRzIHdpbGwgb2NjdXIgd2l0aCBUcmF2aXMuIFBsZWFzZSBiZSBzdXJlIHRoYXQgdGhlIHB1bGwgcmVxdWVzdCBwYXNzZXMgdGhvc2UgYnVpbGRzIGFuZAorLi4gQXV0b21hdGVkIGJ1aWxkcyB3aWxsIG9jY3VyIHdpdGggbGluazpodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9hY3Rpb25zW0dpdEh1YiBBY3Rpb25zXS4gUGxlYXNlIGJlIHN1cmUgdGhhdCB0aGUgcHVsbCByZXF1ZXN0IHBhc3NlcyB0aG9zZSBidWlsZHMgYW5kCiBjb3JyZWN0IHRoZW0gaWYgdGhlcmUgYXJlIHByb2JsZW1zLgogCiBPbmNlIHRoZSBwdWxsIHJlcXVlc3QgaGFzIGJlZW4gcGxhY2VkIGl0IHdpbGwgZ28gaW50byAqcmV2aWV3KjoKQEAgLTI0Miw5ICsyNDIsOCBAQAogW1t2ZXJzaW9uaW5nXV0KID09IFZlcnNpb25pbmcKIAotVGlua2VyUG9wIHZlcnNpb24gbnVtYmVycyBmb2xsb3cgYSBmb3JtYXQgb2YgYEVQT0NILk1BSk9SLk1JTk9SLlBBVENIYCwgd2hlcmU6CitBcyBvZiBUaW5rZXJQb3AgNC4wLjAsIHZlcnNpb24gbnVtYmVycyBmb2xsb3cgYSBmb3JtYXQgb2YgYE1BSk9SLk1JTk9SLlBBVENIYCwgd2hlcmU6CiAKLSogYEVQT0NIYCB2ZXJzaW9uIGlzIGluY3JlbWVudGVkIGZvciBlcG9jaHMgb2YgdGhpbmtpbmcgYXJvdW5kIFRpbmtlclBvcCBhbmQgaXRzIHJlbGF0aW9uIHRvIHRoZSBncmFwaCBlY29zeXN0ZW0gYW5kIGlzIHBhcnQgb2YgYSBjb21wbGV0ZSByZWxlYXNlLgogKiBgTUFKT1JgIHZlcnNpb24gaXMgaW5jcmVtZW50ZWQgZm9yIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFuZCBpcyBwYXJ0IG9mIGEgY29tcGxldGUgcmVsZWFzZS4KICogYE1JTk9SYCB2ZXJzaW9uIGlzIGluY3JlbWVudGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmxlIGNoYW5nZXMgYW5kIGlzIHBhcnQgb2YgYSBjb21wbGV0ZSByZWxlYXNlLgogKiBgUEFUQ0hgIHZlcnNpb24gaXMgaW5jcmVtZW50ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgYnVnIGZpeGVzIGFuZCB0eXBpY2FsbHkgb25seSBhcHBsaWVkIHRvIGNsaWVudCBtb2R1bGVzIGZvciBwYXJ0aWFsIHJlbGVhc2UuCkBAIC0yNTUsMTggKzI1NCw5IEBACiB0eXBpY2FsbHkgc2VydmVyIG1vZHVsZXMuIEluIHRoaXMgd2F5LCBmb3IgZXhhbXBsZSwgYSBzbWFsbCBmaXggY2FuIGJlIGFwcGxpZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCAuTkVUIHdpdGhvdXQgaGF2aW5nCiB0byByZWxlYXNlIGFsbCB0aGUgb3RoZXIgY29tcG9uZW50cyB3aGljaCBtYXkgbm90IGhhdmUgZXhwZXJpZW5jZWQgYW55IHJlYWwgY2hhbmdlLgogCi1UaGUgbnVtYmVyIGZvciBgRVBPQ0hgIHJhcmVseSBjaGFuZ2VzIGFuZCB3aGVuIGl0IGRvZXMsIGl0IHR5cGljYWxseSByZXByZXNlbnRzIGEgY29tcGxldGUgcmUtd3JpdGUgb2YgdGhlIHNvZnR3YXJlCi1hbmQgdGh1cyBtYXNzaXZlIGNoYW5nZXMgY2FuIGJlIGV4cGVjdGVkLiBBcyBhIHJlc3VsdCBvZiB0aGUgZGVmaW5pdGlvbiBmb3IgYEVQT0NIYCwgdGhlcmUgaXMgZ3JlYXRlciBmb2N1cyBvbiB0aGUgb3RoZXIKLXRocmVlIG51bWJlcnMgd2hlbiBjb25zaWRlcmluZyB3aGVyZSBjaGFuZ2VzIHdpbGwgbGFuZDoKLQotMS4gQSBjbGllbnQgd2l0aCBhIHNwZWNpZmljIGBFUE9DSC5NQUpPUi5NSU5PUmAgd2lsbCBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdXNlciBhcHBsaWNhdGlvbiBjb2RlIHdyaXR0ZW4gZm9yCi1gRVBPQ0guTUFKT1IuTUlOT1JgLgotMS4gQSBjbGllbnQgd2l0aCBzcGVjaWZpYyBgRVBPQ0guTUFKT1JgIHdpbGwgYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSBgRVBPQ0guTUFKT1JgIHZlcnNpb24gb2YgdGhlIHNlcnZlci4KLQotQSBjb21wbGV0ZSByZWxlYXNlIGlzIGFsd2F5cyBqdXN0IGBFUE9DSC5NQUpPUi5NSU5PUmAgd2hlcmUgdGhlIGBQQVRDSGAgaXMgaW5mZXJyZWQgYXMgIjAiLCB0aHVzIDMuNi54IGxpbmUgd291bGQKLWluaXRpYWxseSByZWxlYXNlIGFsbCBjb21wb25lbnRzIGFzIGAzLjYuMGAuIEEgYFBBVENIYCBudW1iZXIgbXVzdCBzdGFydCB3aXRoICIxIiB3aXRoaW4gYSByZWxlYXNlIGJlY2F1c2Ugb2YgaG93Ci1saW5rOmh0dHBzOi8vZ2l0aHViLmNvbS9OdUdldC9Ib21lL2lzc3Vlcy83Mzc2W051Z2V0IHRyZWF0cyAiMCJdLiBJZiBpdCB3YXMgZGV0ZXJtaW5lZCB0aGF0IGBncmVtbGluLXB5dGhvbmAgbmVlZGVkIGEKLXNwZWNpYWwgcmVsZWFzZSB0aGVuIGl0IGNvdWxkIGJlIHJlbGVhc2VkIGluZGVwZW5kZW50bHkgb2YgdGhlIG90aGVyIG1vZHVsZXMgYXMgYDMuNi4wLjFgLgorMS4gQSBjbGllbnQgd2l0aCBhIHNwZWNpZmljIGBNQUpPUi5NSU5PUmAgd2lsbCBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdXNlciBhcHBsaWNhdGlvbiBjb2RlIHdyaXR0ZW4gZm9yCitgTUFKT1IuTUlOT1JgLgorMS4gQSBjbGllbnQgd2l0aCBzcGVjaWZpYyBgTUFKT1JgIHdpbGwgYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSBgTUFKT1JgIHZlcnNpb24gb2YgdGhlIHNlcnZlci4KIAogSW4gc2hvcnQsIHRoZSBkZXYgbWFpbGluZyBsaXN0IGlzIG9wZW4gdG8gZGlzY3Vzc2lvbiBvbiB3aGVyZSBhIGNoYW5nZSB3aWxsIGxhbmQuIFRoZSBkaXNjdXNzaW9uIGp1c3QgbmVlZHMgdG8gaGF2ZQogZ29vZCByZWFzb25pbmcgYW5kIHVzZSB0aGUgZ2VuZXJhbCBwcmluY2lwbGVzIGFib3ZlIGFzIGEgZnJhbWV3b3JrIGZvciBjb21pbmcgdG8gYSBjb25zZW5zdXMuCmRpZmYgLS1naXQgYS9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2RldmVsb3BtZW50LWVudmlyb25tZW50LmFzY2lpZG9jIGIvZG9jcy9zcmMvZGV2L2RldmVsb3Blci9kZXZlbG9wbWVudC1lbnZpcm9ubWVudC5hc2NpaWRvYwppbmRleCA1OTBjMTg3Li42YjM2OTU1IDEwMDY0NAotLS0gYS9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2RldmVsb3BtZW50LWVudmlyb25tZW50LmFzY2lpZG9jCisrKyBiL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQuYXNjaWlkb2MKQEAgLTI4LDcgKzI4LDcgQEAKIFtbc3lzdGVtLWNvbmZpZ3VyYXRpb25dXQogPT0gU3lzdGVtIENvbmZpZ3VyYXRpb24KIAotQXQgYSBtaW5pbXVtLCBkZXZlbG9wbWVudCBvZiBUaW5rZXJQb3AgcmVxdWlyZXMgbGluazpodHRwczovL29wZW5qZGsuamF2YS5uZXQvcHJvamVjdHMvamRrLzExL1tKYXZhIDExXS4gU2luY2UgMy43LjAsIHlvdSBjYW4gYWxzbyBidWlsZCB3aXRoCitBdCBhIG1pbmltdW0sIGRldmVsb3BtZW50IG9mIFRpbmtlclBvcCByZXF1aXJlcyBsaW5rOmh0dHBzOi8vb3Blbmpkay5qYXZhLm5ldC9wcm9qZWN0cy9qZGsvMTEvW0phdmEgMTFdIG9yCiBsaW5rOmh0dHBzOi8vb3Blbmpkay5vcmcvcHJvamVjdHMvamRrLzE3L1tKYXZhIDE3XS4gTm90ZSwgaG93ZXZlciwgdGhhdCB0aGVyZSBhcmUgc29tZSBpc3N1ZXMgd2l0aCBkZWVwIHJlZmxlY3Rpb24KIHNvIHRoZXJlIGFyZSBgLS1hZGQtb3BlbnNgIEpWTSBvcHRpb25zIGluY2x1ZGVkIGluIHRoZSBwb20gZmlsZXMgdG8gZW5hYmxlIHRoaXMgdG8gd29yay4gTWF2ZW4gKHJlcXVpcmluZyBhIG1pbmltdW0gb2YKIGxpbms6aHR0cHM6Ly9tYXZlbi5hcGFjaGUub3JnL2Rvd25sb2FkLmNnaVtNYXZlbiAzLjUuMytdKSBpcyB1c2VkIGFzIHRoZSBjb21tb24gYnVpbGQgc3lzdGVtLCB3aGljaCBldmVuCkBAIC00MSw5ICs0MSw5IEBACiBUbyBnYWluIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYWxsIGFzcGVjdHMgb2YgdGhlIFRpbmtlclBvcCBidWlsZCBzeXN0ZW0sIG90aGVyIGVudmlyb25tZW50YWwgY29uZmlndXJhdGlvbnMgbXVzdCBiZQogZXN0YWJsaXNoZWQuIFRob3NlIHByZXJlcXVpc2l0ZXMgYXJlIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4KIAotQXMgb2YgVGlua2VyUG9wIDMuNS41LCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZvciBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnRzIGNhbiBiZSBvcHRpb25hbCwgYXMgRG9ja2VyIGJlY29tZXMgYQotc3lzdGVtIHJlcXVpcmVtZW50IHRvIGJ1aWxkIGFuZCB0ZXN0IEdMVnMgaW5zaWRlIG9mIE1hdmVuLiBQbGVhc2UgbWFrZSBzdXJlIERvY2tlciBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCi1Zb3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgYm90aCBsaW5rOmh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9pbnN0YWxsL1tEb2NrZXIgRW5naW5lXSBhbmQKK1NwZWNpZmljIGVudmlyb25tZW50YWwgY29uZmlndXJhdGlvbiBmb3IgR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50cyBjYW4gYmUgb3B0aW9uYWwsIGFzIERvY2tlciBiZWNvbWVzIGEKK3N5c3RlbSByZXF1aXJlbWVudCB0byBidWlsZCBhbmQgdGVzdCBHTFZzIGluc2lkZSBvZiBNYXZlbi4gUGxlYXNlIG1ha2Ugc3VyZSBEb2NrZXIgaXMgaW5zdGFsbGVkIGFuZCBydW5uaW5nIG9uIHlvdXIKK3N5c3RlbS4gWW91IHdpbGwgbmVlZCB0byBpbnN0YWxsIGJvdGggbGluazpodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvaW5zdGFsbC9bRG9ja2VyIEVuZ2luZV0gYW5kCiBsaW5rOmh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC9bRG9ja2VyIENvbXBvc2VdLCB3aGljaCBhcmUgaW5jbHVkZWQgaW4KIGxpbms6aHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZGVza3RvcC9bRG9ja2VyIERlc2t0b3BdLgogCkBAIC04NSw5ICs4NSw4IEBACiAgICAgICAgIDxhcnRpZmFjdCBwYXR0ZXJuPSIke3VzZXIuaG9tZX0vLmdyb292eS9ncmFwZXMvW29yZ2FuaXNhdGlvbl0vW21vZHVsZV0vW3R5cGVdcy9bYXJ0aWZhY3RdLVtyZXZpc2lvbl0oLVtjbGFzc2lmaWVyXSkuW2V4dF0iLz4KICAgICAgIDwvZmlsZXN5c3RlbT4KICAgICAgIDxpYmlibGlvIG5hbWU9ImxvY2FsbTIiIHJvb3Q9IiR7dXNlci5ob21lLnVybH0vLm0yL3JlcG9zaXRvcnkvIiBjaGVja21vZGlmaWVkPSJ0cnVlIiBjaGFuZ2luZ1BhdHRlcm49Ii4qIiBjaGFuZ2luZ01hdGNoZXI9InJlZ2V4cCIgbTJjb21wYXRpYmxlPSJ0cnVlIi8+Ci0gICAgICA8aWJpYmxpbyBuYW1lPSJqY2VudGVyIiByb290PSJodHRwczovL2pjZW50ZXIuYmludHJheS5jb20vIiBtMmNvbXBhdGlibGU9InRydWUiLz4KICAgICAgIDxpYmlibGlvIG5hbWU9ImliaWJsaW8iIG0yY29tcGF0aWJsZT0idHJ1ZSIvPgotICAgICAgPGliaWJsaW8gbmFtZT0iYXBhY2hlLXNuYXBzaG90cyIgcm9vdD0iaHR0cDovL3JlcG9zaXRvcnkuYXBhY2hlLm9yZy9zbmFwc2hvdHMvIiBtMmNvbXBhdGlibGU9InRydWUiLz4KKyAgICAgIDxpYmlibGlvIG5hbWU9ImFwYWNoZS1zbmFwc2hvdHMiIHJvb3Q9Imh0dHBzOi8vcmVwb3NpdG9yeS5hcGFjaGUub3JnL3NuYXBzaG90cy8iIG0yY29tcGF0aWJsZT0idHJ1ZSIvPgogICAgIDwvY2hhaW4+CiAgIDwvcmVzb2x2ZXJzPgogPC9pdnlzZXR0aW5ncz4KQEAgLTIzNywyOSArMjM2LDE3IEBACiBbW3B5dGhvbi1lbnZpcm9ubWVudF1dCiA9PT0gUHl0aG9uIEVudmlyb25tZW50CiAKLUFzIG9mIFRpbmtlclBvcCAzLjIuMiwgdGhlIGJ1aWxkIG9wdGlvbmFsbHkgcmVxdWlyZXMgbGluazpodHRwczovL3d3dy5weXRob24ub3JnL1tQeXRob25dIHRvIGJ1aWxkIHRoZSBgZ3JlbWxpbi1weXRob25gCi1tb2R1bGUuIElmIFB5dGhvbiBpcyBub3QgaW5zdGFsbGVkLCBUaW5rZXJQb3Agd2lsbCBzdGlsbCBidWlsZCB3aXRoIE1hdmVuLCBidXQgbmF0aXZlIFB5dGhvbiB0ZXN0cyBhbmQKLUphdmEgdGVzdHMgdGhhdCByZXF1aXJlIFB5dGhvbiBjb2RlIHdpbGwgYmUgc2tpcHBlZC4gRGV2ZWxvcGVycyBzaG91bGQgYWxzbyBpbnN0YWxsIGxpbms6aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9waXBbcGlwXQotYW5kIGxpbms6aHR0cHM6Ly92aXJ0dWFsZW52LnB5cGEuaW8vZW4vc3RhYmxlL1t2aXJ0dWFsZW52XSAodmVyc2lvbiAxNS4wLjIgLSBvbGRlciB2ZXJzaW9ucyBtYXkgY2F1c2UgYnVpbGQgZmFpbHVyZXMpLgorYGdyZW1saW4tcHl0aG9uYCB1c2VzIERvY2tlciBmb3IgYWxsIHRlc3RzIGluc2lkZSBvZiBNYXZlbiwgc28gYSBsb2NhbCBQeXRob24gaW5zdGFsbGF0aW9uIGlzIG5vdCByZXF1aXJlZC4gUGxlYXNlCittYWtlIHN1cmUgRG9ja2VyIGlzIGluc3RhbGxlZCBhbmQgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4KIAotVGhlIGJ1aWxkIGV4cGVjdHMgUHl0aG9uIGEgYHB5dGhvbjNgIGluc3RhbGxhdGlvbiB3aGljaCBzaG91bGQgYmUgMy41LjMgb3IgYmV0dGVyLiBQeXRob24gYWxzbyB0ZXN0cyBrZXJiZXJvcyBhbmQKLXRoZXJlZm9yZSByZXF1aXJlczoKLQotW3NvdXJjZSx0ZXh0XQotc3VkbyBhcHQgaW5zdGFsbCBsaWJrcmI1LWRldiBrcmI1LXVzZXIKLQotQXMgb2YgVGlua2VyUG9wIDMuNS41LCBgZ3JlbWxpbi1weXRob25gIHVzZXMgRG9ja2VyIGZvciBhbGwgdGVzdHMgaW5zaWRlIG9mIE1hdmVuLCBhbmQgUHl0aG9uIGluc3RhbGxhdGlvbiB3aWxsIG5vdCBiZSByZXF1aXJlZCB0bwotcnVuIGBncmVtbGluLXB5dGhvbmAgdGhyb3VnaCBNYXZlbi4gUGxlYXNlIG1ha2Ugc3VyZSBEb2NrZXIgaXMgaW5zdGFsbGVkIGFuZCBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLgotCi1PbmNlIHRoZSBQeXRob24gZW52aXJvbm1lbnQgaXMgZXN0YWJsaXNoZWQsIHRoZSBmdWxsIGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIG9mIGBncmVtbGluLXB5dGhvbmAgbWF5IGNvbW1lbmNlLiBJdAotY2FuIGJlIGRvbmUgbWFudWFsbHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdpdGg6CitUaGUgZnVsbCBidWlsZGluZyBhbmQgdGVzdGluZyBvZiBgZ3JlbWxpbi1weXRob25gIGNhbiBiZSBkb25lIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aXRoOgogCiBbc291cmNlLHRleHRdCiBtdm4gY2xlYW4gaW5zdGFsbCAtUGdsdi1weXRob24KIAotd2hpY2ggZW5hYmxlcyB0aGUgImdsdi1weXRob24iIE1hdmVuIHByb2ZpbGUgb3IgaW4gYSBtb3JlIGF1dG9tYXRlZCBmYXNoaW9uIHNpbXBseSBhZGQgYSBgLmdsdmAgZmlsZSB0byB0aGUgcm9vdCBvZiB0aGUKLWBncmVtbGluLXB5dGhvbmAgbW9kdWxlIHdoaWNoIHdpbGwgc2lnbmlmeSB0byBNYXZlbiB0aGF0IHRoZSBlbnZpcm9ubWVudCBpcyBQeXRob24tcmVhZHkuIFRoZSBgLmdsdmAgZmlsZSBuZWVkIG5vdCBoYXZlCi1hbnkgY29udGVudHMgYW5kIGlzIGlnbm9yZWQgYnkgR2l0LiBBIHN0YW5kYXJkIGBtdm4gY2xlYW4gaW5zdGFsbGAgd2lsbCB0aGVuIGJ1aWxkIGBncmVtbGluLXB5dGhvbmAgaW4gZnVsbC4KK3doaWNoIGVuYWJsZXMgdGhlICJnbHYtcHl0aG9uIiBNYXZlbiBwcm9maWxlLiBBbHRlcm5hdGl2ZWx5LCBhZGQgYSBgLmdsdmAgZmlsZSB0byB0aGUgcm9vdCBvZiB0aGUgYGdyZW1saW4tcHl0aG9uYAorbW9kdWxlIHRvIHNpZ25hbCB0byBNYXZlbiB0aGF0IGBncmVtbGluLXB5dGhvbmAgc2hvdWxkIGFsd2F5cyBidWlsZCBpbiBmdWxsLiBUaGUgYC5nbHZgIGZpbGUgbmVlZCBub3QgaGF2ZSBhbnkKK2NvbnRlbnRzIGFuZCBpcyBpZ25vcmVkIGJ5IEdpdC4gQSBzdGFuZGFyZCBgbXZuIGNsZWFuIGluc3RhbGxgIHdpbGwgdGhlbiBidWlsZCBgZ3JlbWxpbi1weXRob25gIGluIGZ1bGwuCiAKIFRoZSBgLmdsdmAgZmlsZSBpbiBgZ3JlbWxpbi1weXRob25gIGFsc28gYWN0aXZhdGVzIHRoZSAiY29uc29sZS1pbnRlZ3JhdGlvbi10ZXN0cyIgTWF2ZW4gcHJvZmlsZSB0byBydW4gZ3JlbWxpbi1jb25zb2xlCiBpbnRlZ3JhdGlvbiB0ZXN0cy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBwcm9maWxlIGNhbiBiZSBhY3RpdmF0ZWQgbWFudWFsbHkuIE5vdGUgdGhhdCB1bmxpa2UgYGdyZW1saW4tcHl0aG9uYCB0aGUgdGVzdHMKQEAgLTI3MSw4ICsyNTgsNiBAQAogVElQOiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCBoYXZlIGEgZnVsbCBNYXZlbiBlbnZpcm9ubWVudCwgcGxlYXNlIHNlZSA8PGRvY2tlci1pbnRlZ3JhdGlvbix0aGlzIHNlY3Rpb24+PiBmb3IgaG93IERvY2tlcgogY2FuIGJlIHVzZWQgdG8gaGVscCBydW4gdGVzdHMuCiAKLVRJUDogQ29uc2lkZXIgdXNlIG9mIGxpbms6aHR0cHM6Ly9yZWFscHl0aG9uLmNvbS9pbnRyby10by1weWVudi9bcHllbnZdIHRvIGJldHRlciBtYW5hZ2UgUHl0aG9uIHZlcnNpb25zIGFuZCBlbnZpcm9ubWVudHMuCi0KIFNlZSB0aGUgPDxyZWxlYXNlLWVudmlyb25tZW50LFJlbGVhc2UgRW52aXJvbm1lbnQ+PiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJlbGVhc2UgbWFuYWdlciBjb25maWd1cmF0aW9ucy4KIAogW1tkb3RuZXQtZW52aXJvbm1lbnRdXQpAQCAtMjgyLDggKzI2Nyw4IEBACiBgZ3JlbWxpbi1kb3RuZXRgIG1vZHVsZS4gSWYgLk5FVCBTREsgaXMgbm90IGluc3RhbGxlZCwgVGlua2VyUG9wIHdpbGwgc3RpbGwgYnVpbGQgd2l0aCBNYXZlbiwgYnV0IC5ORVQgcHJvamVjdHMKIHdpbGwgYmUgc2tpcHBlZC4KIAotQXMgb2YgVGlua2VyUG9wIDMuNS41LCBgZ3JlbWxpbi1kb3RuZXRgIHVzZXMgRG9ja2VyIGZvciBydW5uaW5nIGFsbCB0ZXN0IHByb2plY3RzIGluc2lkZSBvZiBNYXZlbiwgYW5kIC5ORVQgU0RLIHdpbGwgbm90Ci1iZSByZXF1aXJlZCB0byBydW4gYGdyZW1saW4tZG90bmV0YCB0ZXN0cyB0aHJvdWdoIE1hdmVuLiBQbGVhc2UgbWFrZSBzdXJlIERvY2tlciBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCitgZ3JlbWxpbi1kb3RuZXRgIHVzZXMgRG9ja2VyIGZvciBydW5uaW5nIGFsbCB0ZXN0IHByb2plY3RzIGluc2lkZSBvZiBNYXZlbiwgYW5kIC5ORVQgU0RLIHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIHJ1bgorYGdyZW1saW4tZG90bmV0YCB0ZXN0cyB0aHJvdWdoIE1hdmVuLiBQbGVhc2UgbWFrZSBzdXJlIERvY2tlciBpcyBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCiAKIGBncmVtbGluLWRvdG5ldGAgY2FuIGJlIGJ1aWx0IGFuZCB0ZXN0ZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdpdGg6CiAKQEAgLTMyMSwxNCArMzA2LDE0IEBACiBpbnN0YWxsZWQuIENoZWNrIHRoZSByb290IGBwb20ueG1sYCBmb3IgdGhlIGBydW50aW1lLm5vZGUudmVyc2lvbmAgcHJvcGVydHkgZm9yIHRoZSBtaW5pbXVtIHZlcnNpb24gcmVxdWlyZWQuIFRoaXMgaXMKIGNvdmVyZWQgaW4gbW9yZSBkZXRhaWwgaW4gdGhlIDw8c2l0ZSxTaXRlPj4gc2VjdGlvbi4KIAotQSBmYXN0IHdheSB0byB0ZXN0IGBncmVsaW4tbWNwYCBhZnRlciBkb2luZyBhIGJ1aWxkIGlzIHRvIHVzZSBsaW5rOmh0dHBzOi8vbW9kZWxjb250ZXh0cHJvdG9jb2wuaW8vZG9jcy90b29scy9pbnNwZWN0b3JbQG1vZGVsY29udGV4dHByb3RvY29sL2luc3BlY3Rvcl0KK0EgZmFzdCB3YXkgdG8gdGVzdCBgZ3JlbWxpbi1tY3BgIGFmdGVyIGRvaW5nIGEgYnVpbGQgaXMgdG8gdXNlIGxpbms6aHR0cHM6Ly9tb2RlbGNvbnRleHRwcm90b2NvbC5pby9kb2NzL3Rvb2xzL2luc3BlY3RvcltAbW9kZWxjb250ZXh0cHJvdG9jb2wvaW5zcGVjdG9yXQogd2hpY2ggd2lsbCBzdGFydCB1cCB0aGUgR3JlbWxpbiBNQ1Agc2VydmVyIGFuZCBwcmVzZW50IGEgYnJvd3Nlci1iYXNlZCB0b29sIHRvIHVzZSB0aGUgY29tbWFuZHMuIEl0IGlzIG1vc3QgZWFzaWx5CiBsYXVuY2hlZCB3aXRoIGBucHhgIGFzIGZvbGxvd3M6CiAKIFtzb3VyY2UsdGV4dF0KIC0tLS0KICMgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeQotJCBucHggQG1vZGVsY29udGV4dHByb3RvY29sL2luc3BlY3RvciBub2RlIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvZGlzdC9zZXJ2ZXIuanMgLWUgR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9bG9jYWxob3N0OjgxODIvZyAtZSBHUkVNTElOX01DUF9MT0dfTEVWRUw9aW5mbworJCBucHggQG1vZGVsY29udGV4dHByb3RvY29sL2luc3BlY3RvciBub2RlIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvZGlzdC9zZXJ2ZXIuanMgLWUgR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9bG9jYWxob3N0OjgxODIvZyAtZSBHUkVNTElOX01DUF9MT0dfTEVWRUw9aW5mbwogLS0tLQogCiBJTVBPUlRBTlQ6IEJld2FyZSBvZiB1bmV4cGVjdGVkIG9yIHVud2FudGVkIGNoYW5nZXMgb24gYHBhY2thZ2UtbG9jay5qc29uYCBmaWxlcyB3aGVuIGNvbW1pdHRpbmcgYW5kIG1lcmdpbmcuCkBAIC0zODcsOCArMzcyLDggQEAKIHN1ZG8gY2htb2QgNjY2IC92YXIvcnVuL2RvY2tlci5zb2NrCiAtLS0tCiAKLUFzIG9mIFRpbmtlclBvcCAzLjUuNSwgYSBkb2NrZXIgaW1hZ2Ugb2YgdGhlIEdyZW1saW4gU2VydmVyIHdpbGwgYmUgYnVpbHQgYXV0b21hdGljYWxseSB3aXRoIGBtdm4gY2xlYW4gaW5zdGFsbGAsIHdoaWNoCi1pcyB1c2UgZm9yIEdMViB0ZXN0cyBpbnNpZGUgb2YgRG9ja2VyLiBUbyBza2lwIGJ1aWxkaW5nIHRoaXMgaW1hZ2UsIGFwcGVuZCB0aGUgYC1Ec2tpcEltYWdlQnVpbGRgIGZsYWcgdG8gTWF2ZW4gY29tbWFuZHMuCitBIGRvY2tlciBpbWFnZSBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIgd2lsbCBiZSBidWlsdCBhdXRvbWF0aWNhbGx5IHdpdGggYG12biBjbGVhbiBpbnN0YWxsYCwgd2hpY2ggaXMgdXNlIGZvciBHTFYgdGVzdHMKK2luc2lkZSBvZiBEb2NrZXIuIFRvIHNraXAgYnVpbGRpbmcgdGhpcyBpbWFnZSwgYXBwZW5kIHRoZSBgLURza2lwSW1hZ2VCdWlsZGAgZmxhZyB0byBNYXZlbiBjb21tYW5kcy4KIAogW1tyZWxlYXNlLWVudmlyb25tZW50XV0KID09PSBSZWxlYXNlIEVudmlyb25tZW50CkBAIC00NjMsNDggKzQ0OCwzOSBAQAogPT0gVXNpbmcgQUkgQ29kaW5nIEFnZW50cwogCiBUaW5rZXJQb3AgZG9lcyBub3QgZW5kb3JzZSBvciByZXF1aXJlIGFueSBwYXJ0aWN1bGFyIEFJIENvZGluZyBBZ2VudHMgb3IgdG9vbC4gQXMgYSByZXN1bHQsIHRvb2wtc3BlY2lmaWMgcHJvamVjdAotZ3VpZGVsaW5lcyBhcmUgbm90IGluY2x1ZGVkIHdpdGggdGhlIGNvZGUgYmFzZS4gVGlua2VyUG9wIGRvZXMsIGhvd2V2ZXIsIHByb3ZpZGUgZm9yIGEgZ2VuZXJpYywgYWdlbnQtYWdub3N0aWMgYEFHRU5UUy5tZGAKLWZpbGUgYXQgdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QuIERldmVsb3BlcnMgc2hvdWxkIG1ha2UgdXNlIG9mIHRoaXMgZmlsZSdzIGluc3RydWN0aW9ucyBieSBwb2ludGluZyB0aGVpciBzcGVjaWZpYwotQUktYmFzZWQgdG9vbCB0byBpdC4gV2hpbGUgdG9vbHMgbWF5IHZhcnkgaW4gaG93IHRoZXkgYXJlIHNldCB1cCwgdGhlIGFwcHJvYWNoIGlzIHRvIHRyZWF0IHRvb2wtc3BlY2lmaWMgZmlsZXMsIHN1Y2ggYXMKLWAuanVuaWUvZ3VpZGVsaW5lcy5tZGAsIGAuY2xhdWRlL0NMQVVERS5tZGAgZXRjLiwgYXMgdGhpbiBzaGltcyB0aGF0IGp1c3QgcG9pbnQgdG8gVGlua2VyUG9wJ3MgYEFHRU5UUy5tZGAgaW5zdGVhZCBvZgotcmVseWluZyBvbiBpbmRpdmlkdWFsIHJ1bGVzLiBUaGUgY29udGVudCBvZiB0aG9zZSB0b29sLXNwZWNpZmljIGZpbGVzIHNob3VsZDoKK2d1aWRlbGluZXMgYXJlIG5vdCBpbmNsdWRlZCB3aXRoIHRoZSBjb2RlIGJhc2UuIEluIGdlbmVyYWwsIFRpbmtlclBvcCBhdHRlbXB0cyB0byBzdGF5IGFnbm9zdGljIHRvIGNvZGluZyBhZ2VudHMKK3doaWxlIGFsc28gc3VwcG9ydGluZyAKIAotKiBFeHBsYWluIHRoYXQgQUdFTlRTLm1kIGlzIHRoZSBjYW5vbmljYWwgc291cmNlLgotKiBUZWxsIHRoZSBhc3Npc3RhbnQgdG8gcmVhZCBhbmQgZm9sbG93IGl0LCBhbmQgbm90IHRvIGRpdmVyZ2UgZnJvbSBpdC4KLSogT3B0aW9uYWxseSBpbmNsdWRlIG9uZSBvciB0d28gdG9vbOKAkXNwZWNpZmljIGJlaGF2aW9ycyAobGlrZSDigJxwcmVmZXIgc21hbGxlciBlZGl0c+KAnSkgaWYgeW91IHdhbnQuCis9PT0gQWdlbnQgU2tpbGxzCiAKLVRoZSBmb2xsb3dpbmcgaXMgYSBiYXNpYyBleGFtcGxlIG9mIHN1Y2ggYSBzZXR1cDoKK1RpbmtlclBvcCBwcm92aWRlcyBkZXZlbG9wbWVudCBndWlkYW5jZSBhcyBhbiBsaW5rOmh0dHBzOi8vYWdlbnRza2lsbHMuaW9bQWdlbnQgU2tpbGxdIGluIGAuc2tpbGxzL3RpbmtlcnBvcC1kZXYvYC4KK1RoZSBza2lsbCBmb2xsb3dzIHRoZSBvcGVuIEFnZW50IFNraWxscyBzdGFuZGFyZCBhbmQgaW5jbHVkZXM6CiAKLVtzb3VyY2UsdGV4dF0KKyogUHJvamVjdCBjb252ZW50aW9ucywgY29kaW5nIHN0YW5kYXJkcywgYW5kIGFnZW50IGd1YXJkcmFpbHMgKGluIGBTS0lMTC5tZGApCisqIEJ1aWxkIGFuZCB0ZXN0IHJlY2lwZXMgZm9yIGVhY2ggR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50IChpbiBgcmVmZXJlbmNlcy9gKQorKiBEZXZlbG9wbWVudCBlbnZpcm9ubWVudCBzZXR1cCBpbnN0cnVjdGlvbnMgYW5kIGEgdmVyaWZpY2F0aW9uIHNjcmlwdCAoaW4gYHNjcmlwdHMvYCkKKyogR3JlbWxpbiBNQ1Agc2VydmVyIHVzYWdlIGd1aWRhbmNlIGZvciBxdWVyeSB0cmFuc2xhdGlvbiwgZm9ybWF0dGluZywgYW5kIGdyYXBoIHF1ZXJ5aW5nCisKK1Rvb2xzIHRoYXQgc3VwcG9ydCBBZ2VudCBTa2lsbHMgKENsYXVkZSBDb2RlLCBHaXRIdWIgQ29waWxvdCwgQ3Vyc29yLCBPcGVuQUkgQ29kZXgsIEpldEJyYWlucyBKdW5pZSwgS2lybywgYW5kIG90aGVycykKK3dpbGwgZGlzY292ZXIgYW5kIGFjdGl2YXRlIHRoZSBza2lsbCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXMgcGxhY2VkIGluIHRoZSB0b29sJ3MgZXhwZWN0ZWQgZGlyZWN0b3J5LiBBIHNldHVwIHNjcmlwdAoraXMgcHJvdmlkZWQgdG8gY3JlYXRlIHRoZSBuZWNlc3Nhcnkgc3ltbGlua3Mgb3IgY29waWVzOgorCitbc291cmNlLGJhc2hdCiAtLS0tCi0jIEFwYWNoZSBUaW5rZXJQb3Ag4oCTIEd1aWRlbGluZXMKKyMgU2V0IHVwIGZvciBhIHNwZWNpZmljIHRvb2wKK2Jpbi9hZ2VudC1zZXR1cC5zaCBjbGF1ZGUKK2Jpbi9hZ2VudC1zZXR1cC5zaCBraXJvCiAKLVRoaXMgcHJvamVjdCB1c2VzIGBBR0VOVFMubWRgIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgYXMgdGhlIGNhbm9uaWNhbCBndWlkZSBmb3IgQUkvSURFIGFzc2lzdGFudHMgYW5kIGF1dG9tYXRlZCB0b29scy4KKyMgU2V0IHVwIGZvciBhbGwgc3VwcG9ydGVkIHRvb2xzCitiaW4vYWdlbnQtc2V0dXAuc2ggLS1hbGwKIAotWW91IHNob3VsZDoKLQotMS4gUmVhZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4gYEFHRU5UUy5tZGAgZm9yOgotICAgLSBSZXBvc2l0b3J5IHN0cnVjdHVyZQotICAgLSBCdWlsZCBhbmQgdGVzdCBjb21tYW5kcwotICAgLSBDb2RpbmcsIHRlc3RpbmcsIGFuZCBkZXByZWNhdGlvbiBjb252ZW50aW9ucwotICAgLSDigJxEb+KAnSBhbmQg4oCcRG9u4oCZdOKAnSBydWxlcyBmb3IgYWdlbnRzCi0KLTIuIFRyZWF0IGBBR0VOVFMubWRgLCBgQ09OVFJJQlVUSU5HLipgLCBhbmQgdGhlIGRldmVsb3BlciBkb2NzIHVuZGVyIGBkb2NzL3NyYy9kZXYvKipgIGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGFueSBnZW5lcmljIG9yIGJ1aWx04oCRaW4gYmVoYXZpb3IuCi0KLTMuIFByZWZlciBzbWFsbCwgZm9jdXNlZCBlZGl0cyB0aGF0OgotICAgLSBNYXRjaCB0aGUgZXhpc3RpbmcgY29kZSBzdHlsZSBhbmQgcGF0dGVybnMgaW4gdGhlIGZpbGVzIGJlaW5nIGNoYW5nZWQKLSAgIC0gSW5jbHVkZSBvciB1cGRhdGUgdGVzdHMgd2hlbiBiZWhhdmlvciBjaGFuZ2VzCi0gICAtIFVwZGF0ZSBkb2N1bWVudGF0aW9uIGFuZCBgQ0hBTkdFTE9HLmFzY2lpZG9jYCB3aGVuIHB1YmxpYyBiZWhhdmlvciBvciBBUElzIGNoYW5nZQotCi1Zb3UgbXVzdCAqKm5vdCoqOgotCi0tIEludHJvZHVjZSBuZXcgZGVwZW5kZW5jaWVzLCBtb2R1bGVzLCBvciBsYXJnZSByZWZhY3RvcnMgd2l0aG91dCBhbiBleHBsaWNpdCBodW1hbiByZXF1ZXN0Ci0tIENoYW5nZSBwdWJsaWMgQVBJcywgcHJvdG9jb2xzLCBvciBjb25maWd1cmF0aW9uIGZvcm1hdHMgd2l0aG91dCBhIGNsZWFybHkgZG9jdW1lbnRlZCBpc3N1ZSBhbmQgaHVtYW4gYXBwcm92YWwKLS0gUmV3cml0ZSBBc2NpaURvYyBkb2N1bWVudGF0aW9uIGludG8gb3RoZXIgZm9ybWF0cwotCi1JZiB5b3UgYXJlIHVuY2VydGFpbiBob3cgdG8gcHJvY2VlZCBiYXNlZCBvbiB0aGlzIGZpbGUsIGBBR0VOVFMubWRgLCBvciB0aGUgbG9jYWwgQXNjaWlEb2MgZG9jdW1lbnRhdGlvbiwgeW91IHNob3VsZCBzdG9wIGFuZCBhc2sgZm9yIGNsYXJpZmljYXRpb24gaW5zdGVhZCBvZiBndWVzc2luZy4KKyMgTGlzdCBzdXBwb3J0ZWQgdG9vbHMgYW5kIHRoZWlyIGRpc2NvdmVyeSBwYXRocworYmluL2FnZW50LXNldHVwLnNoIC0tbGlzdAogLS0tLQogCitUaGUgc2NyaXB0IHN1cHBvcnRzOiBgY2xhdWRlYCwgYGNvcGlsb3RgLCBgY3Vyc29yYCwgYGNvZGV4YCwgYGp1bmllYCwgYW5kIGBraXJvYC4gVGhlIGdlbmVyYXRlZCBzeW1saW5rcyBhbmQgY29waWVzCithcmUgZ2l0aWdub3JlZCBhbmQgbG9jYWwgdG8gZWFjaCBkZXZlbG9wZXIncyBlbnZpcm9ubWVudC4KKwogW1tidWlsZGluZy10ZXN0aW5nXV0KID09IEJ1aWxkaW5nIGFuZCBUZXN0aW5nCiAKQEAgLTUxNywxMiArNDkzLDExIEBACiBNYXZlbiBwcm9qZWN0IGxpc3QgYXJndW1lbnQsIGUuZy46CiArCiAtLS0tCi1leHBvcnQgR1JFTUxJTl9URVNUUz0nb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QYXRoVGVzdCRUcmF2ZXJzYWxzLG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aFRlc3QnCitleHBvcnQgR1JFTUxJTl9URVNUUz0nb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3QkQ291bnRNYXRjaFRyYXZlcnNhbHMnCiBtdm4gLURtYXZlbi5qYXZhZG9jLnNraXA9dHJ1ZSAtLXByb2plY3RzIHRpbmtlcmdyYXBoLWdyZW1saW4gdGVzdAogLS0tLQogKiogQ2xlYW4gdGhlIGAuZ3Jvb3Z5L2dyYXBlcy9vcmcuYXBhY2hlLnRpbmtlcnBvcGAgZGlyZWN0b3J5IG9uIGJ1aWxkOiBgbXZuIGNsZWFuIGluc3RhbGwgLURjbGVhbkdyYXBlc2AKICoqIFR1cm4gb2ZmICJoZWF2eSIgbG9nZ2luZyBpbiB0aGUgInByb2Nlc3MiIHRlc3RzOiBgbXZuIGNsZWFuIGluc3RhbGwgLURhcmdMaW5lPSItRG11dGVUZXN0TG9ncz10cnVlImAKLSoqIFRoZSB0ZXN0IHN1aXRlIGZvciBgbmVvNGotZ3JlbWxpbmAgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAtIHRvIHR1cm4gaXQgb246IGBtdm4gY2xlYW4gaW5zdGFsbCAtRGluY2x1ZGVOZW80amAKICogUmVnZW5lcmF0ZSB0b3kgZ3JhcGggZGF0YSAob25seSBuZWNlc3NhcnkgZ2l2ZW4gY2hhbmdlcyB0byBJTyBjbGFzc2VzKTogYG12biBjbGVhbiBpbnN0YWxsIC1EaW9gIGZyb20gYHRpbmtlcmdyYXBoLWdyZW1saW5gIGRpcmVjdG9yeQogKiogSWYgdGhlcmUgYXJlIGNoYW5nZXMgdG8gdGhlIEdyeW8gZm9ybWF0LCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIHRoZSBHcmF0ZWZ1bCBEZWFkIGRhdGFzZXQgZnJvbSBHcmFwaFNPTiAoc2VlIGBJb0RhdGFHZW5lcmF0aW9uVGVzdC5zaG91bGRXcml0ZUdyYXRlZnVsRGVhZGApCiAqIFN0YXJ0IEdyZW1saW4gU2VydmVyIHdpdGggRG9ja2VyIHVzaW5nIHRoZSBzdGFuZGFyZCB0ZXN0IGNvbmZpZ3VyYXRpb246IGBkb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIuc2hgCkBAIC01MzQsMTQgKzUwOSwxMiBAQAogKiogUHJvY2VzcyBhIHNpbmdsZSBBc2NpaURvYyBmaWxlOiArcGFzczpbZG9jcy9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy1maWxlLnNoIGBwd2RgL2dyZW1saW4tY29uc29sZS90YXJnZXQvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLWNvbnNvbGUtKi1zdGFuZGFsb25lICIiICIqIiBgcHdkYC9kb2NzL3NyYy94eXouYXNjaWlkb2NdKwogKiBCdWlsZCBKYXZhRG9jcy9KU0RvYzogYG12biBwcm9jZXNzLXJlc291cmNlcyAtRGphdmFkb2NgCiAqKiBKYXZhZG9jIHRvIGB0YXJnZXQvc2l0ZS9hcGlkb2NzYCBkaXJlY3RvcnkKLSoqIEpTRG9jIHRvIHRoZSBgZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvYy9gIGRpcmVjdG9yeQorKiogSlNEb2MgdG8gdGhlIGBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9kb2MvYCBkaXJlY3RvcnkKICogU3BlY2lmeSB0aGUgc2VlZCB1c2VkIGZvciBgUmFuZG9tYCBpbiB0ZXN0cyBgbXZuIGNsZWFuIGluc3RhbGwgLUR0ZXN0U2VlZGAgLSB1c2VmdWwgd2hlbiBhIHRlc3QgZmFpbHMsIHRoZSBzZWVkIHdpbGwgYmUgcHJpbnRlZCBpbiB0aGUgYnVpbGQgb3V0cHV0IHNvIHRoYXQgdGhlIHRlc3QgY2FuIHJ1biB3aXRoIHRoZSBzYW1lIHZlcnNpb24gb2YgcmFuZG9tIChsb29rIGZvciAiVGVzdEhlbHBlciIgbG9nZ2VyIGluIG91dHB1dCkKICogQ2hlY2sgZm9yIG5ld2VyIGRlcGVuZGVuY2llczogYG12biB2ZXJzaW9uczpkaXNwbGF5LWRlcGVuZGVuY3ktdXBkYXRlc2Agb3IgYG12biB2ZXJzaW9uczpkaXNwbGF5LXBsdWdpbi11cGRhdGVzYAogKiBDaGVjayB0aGUgZWZmZWN0aXZlIGBwb20ueG1sYDogYG12biAtcGwgZ3JlbWxpbi1weXRob24gLVBnbHYtcHl0aG9uIGhlbHA6ZWZmZWN0aXZlLXBvbSAtRG91dHB1dD13aXRoUHJvZmlsZVBvbS54bWxgCiAqIERlcGxveSBKYXZhRG9jcy9Bc2NpaURvY3M6IGBiaW4vcHVibGlzaC1kb2NzLnNoIHN2bi11c2VybmFtZWAKICogSW50ZWdyYXRpb24gVGVzdHM6IGBtdm4gdmVyaWZ5IC1Ec2tpcEludGVncmF0aW9uVGVzdHM9ZmFsc2VgCi0qKiBFeGVjdXRlIHdpdGggdGhlIGAtRGluY2x1ZGVOZW80amAgb3B0aW9uIHRvIGluY2x1ZGUgbmVvNGotZ3JlbWxpbiB0ZXN0cy4gQXMgb2YgMy43LjAsIHRyYW5zYWN0aW9uYWwgdGVzdHMgb24gR3JlbWxpbiBTZXJ2ZXIsIEdyZW1saW4gRHJpdmVyLAotYW5kIEdMVnMgd2lsbCBydW4gYXV0b21hdGljYWxseSB3aXRoIGludGVncmF0aW9uIHRlc3RzIGFnYWluc3QgdGhlIFRpbmtlclRyYW5zYWN0aW9uR3JhcGguCiAqKiBFeGVjdXRlIHdpdGggdGhlIGAtRHVzZUVwb2xsYCBvcHRpb24gdG8gdHJ5IHRvIHVzZSBOZXR0eSBuYXRpdmUgdHJhbnNwb3J0ICh3b3JrcyBvbiBMaW51eCwgYnV0IHdpbGwgZmFsbGJhY2sgdG8gSmF2YSBOSU8gb24gb3RoZXIgT1MpLgogKiBCZW5jaG1hcmtzOiBgbXZuIHZlcmlmeSAtRHNraXBCZW5jaG1hcmtzPWZhbHNlYAogKiogUmVwb3J0cyBhcmUgZ2VuZXJhdGVkIHRvIHRoZSBjb25zb2xlIGFuZCB0byBgZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay90YXJnZXQvcmVwb3J0cy9iZW5jaG1hcmtgLgpAQCAtNTk1LDExICs1NjgsMTEgQEAKIEEgbGlzdCBvZiBjb21tYW5kIGxpbmUgb3B0aW9ucyBpcyBwcm92aWRlZCBieSBgZG9ja2VyL2J1aWxkLnNoIC0taGVscGAuIFRoZSBjb250YWluZXIgd2lsbCBpbnN0YWxsLAogY29uZmlndXJlIGFuZCBzdGFydCBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLCBzdWNoIGFzIEhhZG9vcC4KIAotQnkgZGVmYXVsdCwgdGhpcyBzY3JpcHQgd2lsbCBydW4gZXZlcnkgbW9kdWxlIGluIHRoZSBwcm9qZWN0LiBIb3dldmVyLCBpZiB5b3UgYXJlIHBsYW5uaW5nIG9uIHdvcmtpbmcgb24ganVzdCBhCitCeSBkZWZhdWx0LCB0aGlzIHNjcmlwdCB3aWxsIHJ1biBldmVyeSBtb2R1bGUgaW4gdGhlIHByb2plY3QuIEhvd2V2ZXIsIGlmIHlvdSBhcmUgcGxhbm5pbmcgb24gd29ya2luZyBvbiBqdXN0IGEgCiBzbWFsbCBzZXQgb2YgdGhlIG1vZHVsZXMgKGUuZy4gdGhlIEdMVnMpIHRoZW4geW91IGNhbiB1c2UgdGhlIHNjcmlwdCBvcHRpb25zIHRvIHJlZHVjZSB0aGUgbW9kdWxlcyBpbmNsdWRlZCBieQogc3BlY2lmaWNhbGx5IHNlbGVjdGluZyB3aGljaCBtb2R1bGVzIHlvdSB3YW50LiBUaGlzIGJlaGF2aW9yIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHRoZSBub24tSmF2YSBHTFZzIGFuZAogZ3JlbWxpbi1jb25zb2xlLiBUaGlzIG9wdGlvbiB3aWxsIGluY2x1ZGUgb25seSB0aGUgc2VsZWN0ZWQgbW9kdWxlcyBhcyB3ZWxsIGFzIGdyZW1saW4tc2VydmVyLCBncmVtbGluLXRlc3QsCi1uZW80ai1ncmVtbGluIGFuZCBhbGwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIHRoZSBtaW5pbXVtIHNldCBvZiBtb2R1bGVzIHJlcXVpcmVkIHRvIGJ1aWxkIGFuZCB0ZXN0IHRoZSBHTFZzLgorYW5kIGFsbCB0aGVpciBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgdGhlIG1pbmltdW0gc2V0IG9mIG1vZHVsZXMgcmVxdWlyZWQgdG8gYnVpbGQgYW5kIHRlc3QgdGhlIEdMVnMuCiAKIFtzb3VyY2UsYmFzaF0KIC5CdWlsZCBhbmQgdGVzdCBncmVtbGluLXB5dGhvbiBhbmQgZ3JlbWxpbi1nbyB3aXRoIG1pbmltYWwgR3JlbWxpbiBTZXJ2ZXIgZGVwZW5kZW5jaWVzCkBAIC03NjIsOSArNzM1LDYgQEAKIGNhbm5vdCBiZSBmb3VuZC4gVGhvc2UgY2xhc3NlcyBhcmUgZ2VuZXJhdGVkIGJ5IGFubm90YXRpb25zLiBUbyBmaXggdGhlc2UgZXJyb3JzLCBtYWtlIHN1cmUgbWFyayB0aGUKIGRpcmVjdG9yeSBgZ3JlbWxpbi1ncm9vdnkvdGFyZ2V0L2dlbmVyYXRlZC1zb3VyY2VzL2Fubm90YXRpb25zYCBhcyAiR2VuZXJhdGVkIFNvdXJjZXMgUm9vdCIuCiAKLURldmVsb3BlcnMgd29ya2luZyBvbiB0aGUgYG5lbzRqLWdyZW1saW5gIG1vZHVsZSBzaG91bGQgZW5hYmxlZCB0aGUgYGluY2x1ZGUtbmVvNGpgIE1hdmVuIHByb2ZpbGUgaW4gSW50ZWxsaWouCi1UaGlzIHdpbGwgZW5zdXJlIHRoYXQgdGVzdHMgd2lsbCBwcm9wZXJseSBleGVjdXRlIHdpdGhpbiB0aGUgSURFLgotCiA9PT0gRGVidWdnaW5nCiAKIEl0IGlzIGdlbmVyYWxseSBhc3N1bWVkIHRoYXQgSlZNLWJhc2VkIGRlYnVnZ2luZyBvZiBUaW5rZXJQb3AgY29kZSBpbiBJbnRlbGxpaiBpcyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIHRhc2sKQEAgLTc3NywxMyArNzQ3LDEzIEBACiBUaGVyZSBhcmUgZ2VuZXJhbGx5IG5vIGNvbXBsZXhpdGllcyB0byBydW5uaW5nIHRoZSBkZWJ1Z2dlciBmb3IgYW55IEpWTS1iYXNlZCB0ZXN0IGluIHRoZSByZXBvc2l0b3J5LCBidXQgdGhlIGZvbGxvd2luZwogdGlwcyBhcmUgaGVscGZ1bCB0byBrbm93IHdoZW4gZG9pbmcgc286CiAKLSogSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdHMgaW4gYGdyZW1saW4tdGVzdGAgd2l0aG91dCBhbiBgR3JhcGhgIGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZSwgaXQgaXMgbm90Ci1wb3NzaWJsZSB0byBqdXN0IHJpZ2h0LWNsaWNrIGBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkNvaW5UZXN0YCBhbmQgdGhlbiBzZWxlY3QKLWBEZWJ1ZyAnQ29pblRlc3QnYC4gSW5zdGVhZCwgcnVubmluZyB0aGF0IHRlc3Qgd291bGQgcmVxdWlyZSBvcGVuaW5nIGB0aW5rZXJncmFwaC1ncmVtbGluYCBhbmQgZXhlY3V0aW5nIHRoZQotYFRpbmtlckdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdGAgKGFzIGFuIGV4YW1wbGUpIHdoaWNoIHJ1bnMgdGhlIGZ1bGwgR3JlbWxpbiB0ZXN0IHN1aXRlIHRvIGluY2x1ZGUgYENvaW5UZXN0YC4KLSogVG8gcnVuIGp1c3QgYENvaW5UZXN0YCwgc2V0IGEgYEdSRU1MSU5fVEVTVFNgIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlIGZ1bGx5IHF1YWxpZmllZCBwYXRoIG5hbWUgdG8gdGhlIHRlc3QKKyogSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdHMgaW4gYGdyZW1saW4tdGVzdGAgd2l0aG91dCBhIGBHcmFwaGAgaW1wbGVtZW50YXRpb24uIEZvciBleGFtcGxlLCBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIGp1c3QgcmlnaHQtY2xpY2sgYG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hUZXN0YCBhbmQgdGhlbiBzZWxlY3QKK2BEZWJ1ZyAnTWF0Y2hUZXN0J2AuIEluc3RlYWQsIHJ1bm5pbmcgdGhhdCB0ZXN0IHdvdWxkIHJlcXVpcmUgb3BlbmluZyBgdGlua2VyZ3JhcGgtZ3JlbWxpbmAgYW5kIGV4ZWN1dGluZyB0aGUKK2BUaW5rZXJHcmFwaFByb2Nlc3NTdGFuZGFyZFRlc3RgIChhcyBhbiBleGFtcGxlKSB3aGljaCBydW5zIHRoZSBmdWxsIEdyZW1saW4gdGVzdCBzdWl0ZSB0byBpbmNsdWRlIGBNYXRjaFRlc3RgLgorKiBUbyBydW4ganVzdCBgTWF0Y2hUZXN0YCwgc2V0IGEgYEdSRU1MSU5fVEVTVFNgIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggdGhlIGZ1bGx5IHF1YWxpZmllZCBwYXRoIG5hbWUgdG8gdGhlIHRlc3QKIGNvbmZpZ3VyYXRpb24gaW4gSW50ZWxsaWouIE5vdGUgdGhhdCB0aGUgZnVsbHkgcXVhbGlmaWVkIHRlc3QgbmFtZSBpcyByZWFsbHkKLWBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkNvaW5UZXN0JFRyYXZlcnNhbHNgLgorYG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hUZXN0JENvdW50TWF0Y2hUcmF2ZXJzYWxzYC4KICogR2hlcmtpbiB0ZXN0cyBoYXZlIGEgc2ltaWxhciBwYXR0ZXJuIGluIHRoYXQgdGhleSByZXF1aXJlIGEgYEdyYXBoYCBpbXBsZW1lbnRhdGlvbiB0byBleGVjdXRlIHRoZW0uIFRoZXJlZm9yZSwKIGRlYnVnZ2luZyBlbnRhaWxzIGdvaW5nIHRvIGB0aW5rZXJncmFwaC1ncmVtbGluYCBhbmQgcnVubmluZyBgVGlua2VyR3JhcGhGZWF0dXJlVGVzdGAgaW4gdGhlIGRlYnVnZ2VyLgogKiBJdCBpcyBwb3NzaWJsZSB0byBmaWx0ZXIgdGhlIEdoZXJraW4gdGVzdHMgYnkgYWRkaW5nIGEgc3lzdGVtIHByb3BlcnR5IHRvIHRoZSBkZWJ1ZyBjb25maWd1cmF0aW9uIHRoYXQgc3BlY2lmaWVzIHRoZQpAQCAtODE4LDUgKzc4OCw0IEBACiAKIE1hbnkgb2YgdGhlIHRlc3RzIGluIGBncmVtbGluLXB5dGhvbmAgcmVxdWlyZSBHcmVtbGluIFNlcnZlci4gVGhleSBhcmUgZWZmZWN0aXZlbHkgaW50ZWdyYXRpb24gdGVzdHMuIFRpbmtlclBvcCBtYWtlcwogaXQgZWFzeSB0byBkZWJ1ZyB0aGVzZSB0ZXN0cyBieSBwcm92aWRpbmcgYSBEb2NrZXIgYmFzZWQgdGVzdCBzZXJ2ZXIgd2hpY2ggaXMgcmlnZ2VkIHVwIHdpdGggYWxsIHRoZSBjb25maWd1cmF0aW9ucwotcmVxdWlyZWQgZm9yIHRoZSB0ZXN0cyB0byBleGVjdXRlLiBTdGFydCB0aGlzIHNlcnZlciB3aXRoIGBkb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIuc2ggLW5gIHdoZXJlIHRoZSBgLW5gIHdpbGwgZW5hYmxlCi1OZW80aiBmb3IgdHJhbnNhY3Rpb24gYmFzZWQgdGVzdHMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorcmVxdWlyZWQgZm9yIHRoZSB0ZXN0cyB0byBleGVjdXRlLiBTdGFydCB0aGlzIHNlcnZlciB3aXRoIGBkb2NrZXIvZ3JlbWxpbi1zZXJ2ZXIuc2hgLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvZm9yLWNvbW1pdHRlcnMuYXNjaWlkb2MgYi9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2Zvci1jb21taXR0ZXJzLmFzY2lpZG9jCmluZGV4IGM1ZTc1ZWIuLmU4OGI3OWMgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvZm9yLWNvbW1pdHRlcnMuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvZGV2L2RldmVsb3Blci9mb3ItY29tbWl0dGVycy5hc2NpaWRvYwpAQCAtNjYsNyArNjYsNyBAQAogYWJvdXQgdGhlIHByb2plY3QgYW1vbmcgY29udHJpYnV0b3JzLCB0aG91Z2ggaXQgbXVzdCBiZSBrZXB0IGluIG1pbmQgdGhhdCBwcm9qZWN0IGRpc2N1c3Npb24gYW5kIGRlY2lzaW9ucyBtdXN0IG9jY3VyCiBvbiB0aGUgZGV2IG1haWxpbmcgbGlzdCBtZW50aW9uZWQgYWJvdmUuCiAKLU9jY2FzaW9uYWxseSwgb25saW5lIG1lZXRpbmdzIHZpYSB2aWRlbyBjb25mZXJlbmNlIGFyZSBoZWxkLiBUaGVzZSBtZWV0aW5ncyBhcmUgc2NoZWR1bGUgdmlhIHRoZSBkZXYgbWFpbGluZyBsaXN0CitPY2Nhc2lvbmFsbHksIG9ubGluZSBtZWV0aW5ncyB2aWEgdmlkZW8gY29uZmVyZW5jZSBhcmUgaGVsZC4gVGhlc2UgbWVldGluZ3MgYXJlIHNjaGVkdWxlZCB2aWEgdGhlIGRldiBtYWlsaW5nIGxpc3QKIGFib3V0IGEgd2VlayBiZWZvcmUgdGhleSBhcmUgdG8gb2NjdXIgdG8gZmluZCBhIGRheSBhbmQgdGltZSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgdGhvc2UgaW50ZXJlc3RlZCBpbiBhdHRlbmRpbmcuCiBPbiB0aGUgZGF5IG9mIHRoZSBtZWV0aW5nLCB0aGUgbWVldGluZyBvcmdhbml6ZXIgd2lsbCBjcmVhdGUgYSBHb29nbGUgSGFuZ291dCAob3Igc2ltaWxhciB2aWRlbyBjb25mZXJlbmNpbmcgbGluaykuCiBBdCB0aGF0IHBvaW50LCBhbGwgd2hvIGFyZSBpbnRlcmVzdGVkIGNhbiBhdHRlbmQuICBNZWV0aW5nIG1pbnV0ZXMgc2hvdWxkIGJlCkBAIC0xMzYsMTYgKzEzNiwxMCBAQAogCiBUaW5rZXJQb3AgaGFzIHNldmVyYWwgcmVsZWFzZSBicmFuY2hlczoKIAotKiBgMy4wLWRldmAgLSAzLjAueCAobm8gbG9uZ2VyIG1haW50YWluZWQpCi0qIGAzLjEtZGV2YCAtIDMuMS54IChubyBsb25nZXIgbWFpbnRhaW5lZCkKLSogYDMuMi1kZXZgIC0gMy4yLnggKG5vIGxvbmdlciBtYWludGFpbmVkKQotKiBgMy4zLWRldmAgLSAzLjMueCAobm8gbG9uZ2VyIG1haW50YWluZWQpCi0qIGAzLjQtZGV2YCAtIDMuNC54IChubyBsb25nZXIgbWFpbnRhaW5lZCkKLSogYDMuNS1kZXZgIC0gMy41LnggKG5vIGxvbmdlciBtYWludGFpbmVkKQotKiBgMy42LWRldmAgLSAzLjYueCAobm8gbG9uZ2VyIG1haW50YWluZWQpCisqIGAzLjAtZGV2YCB0aHJvdWdoIGAzLjYtZGV2YCAobm8gbG9uZ2VyIG1haW50YWluZWQpCiAqIGAzLjctZGV2YCAtIDMuNy54IChub24tYnJlYWtpbmcgYnVnIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMpCi0qIGAzLjgtZGV2YCAtIDMuOC54IChjdXJyZW50IGRldmVsb3BtZW50KQotKiBgbWFzdGVyYCAtIDQueCAoZnV0dXJlIGRldmVsb3BtZW50KQorKiBgMy44LWRldmAgLSAzLjgueCAoY3VycmVudCAzLnggZGV2ZWxvcG1lbnQpCisqIGBtYXN0ZXJgIC0gNC54IChjdXJyZW50IGRldmVsb3BtZW50KQogCiBUaGUgYnJhbmNoIGRlc2NyaXB0aW9uIGFib3ZlIHRoYXQgcmVhZHMgIm5vbi1icmVha2luZyBidWcgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyIgc2ltcGx5IG1lYW5zIHRoYXQgd2l0aGluIHRoYXQgcmVsZWFzZQogbGluZSAoaS5lLiBwYXRjaCB2ZXJzaW9uKSBjaGFuZ2VzIHNob3VsZCBub3QgYWx0ZXIgZXhpc3RpbmcgYmVoYXZpb3IsIGludHJvZHVjZSBuZXcgQVBJcywgY2hhbmdlIHNlcmlhbGl6YXRpb24gZm9ybWF0cywKQEAgLTE1Nyw5ICsxNTEsOSBAQAogQ2hhbmdlcyB0byBlYXJsaWVyIGJyYW5jaGVzIHNob3VsZCBtZXJnZSBmb3J3YXJkIHRvd2FyZCBgbWFzdGVyYCAoZS5nLiBgMy43LWRldmAgc2hvdWxkIG1lcmdlIHRvIGAzLjgtZGV2YCB0aGVuCiBgbWFzdGVyYCkuIFBsZWFzZSByZWFkIG1vcmUgYWJvdXQgdGhpcyBwcm9jZXNzIGluIHRoZSA8PHB1bGwtcmVxdWVzdHMsIFB1bGwgUmVxdWVzdHM+PiBzZWN0aW9uLgogCi1BcyBkZXNjcmliZWQgaW4gPDx2ZXJzaW9uaW5nLHZlcnNpb25pbmc+PiwgaXQgaXMgcG9zc2libGUgdG8gZG8gYSAicGFydGlhbCIgcmVsZWFzZSB3aGljaCB3aWxsIHV0aWxpemUgYSBmb3VyLWRpZ2l0Ci12ZXJzaW9uIHRoYXQgc3RhcnRzIHdpdGggYSAiMSIgKGUuZy4gYDMuNi4wLjFgKS4gVGhlIGJyYW5jaGluZyBzdHJhdGVneSBmb3IgYSBwYXJ0aWFsIHJlbGVhc2UgcmVxdWlyZXMgdGhhdCBhIGAtZGV2YAotYnJhbmNoIGJlIGNyZWF0ZWQgd2l0aCB0aGUgdGhyZWUgZGlnaXQgcHJlZml4LgorQXMgZGVzY3JpYmVkIGluIDw8dmVyc2lvbmluZyx2ZXJzaW9uaW5nPj4sIGl0IGlzIHBvc3NpYmxlIHRvIGRvIGEgInBhcnRpYWwiIHJlbGVhc2Ugd2hpY2ggd2lsbCB1dGlsaXplIHRoZSB0aGlyZCAicGF0Y2giIGRpZ2l0Cit2ZXJzaW9uIHRoYXQgc3RhcnRzIHdpdGggYSAiMSIgKGUuZy4gYDQuMC4xYCkuIFRoZSBicmFuY2hpbmcgc3RyYXRlZ3kgZm9yIGEgcGFydGlhbCByZWxlYXNlIHJlcXVpcmVzIHRoYXQgYSBgLWRldmAKK2JyYW5jaCBiZSBjcmVhdGVkIHdpdGggdGhlIHR3byBkaWdpdCBwcmVmaXggKGUuZy4gNC4wLWRldikuCiAKIE90aGVyIGJyYW5jaGVzIG1heSBiZSBjcmVhdGVkIGZvciBjb2xsYWJvcmF0aW5nIG9uIGZlYXR1cmVzIG9yIGZvciBSRkMncyB0aGF0IG90aGVyIGRldmVsb3BlcnMgbWF5IHdhbnQgdG8gaW5zcGVjdC4KIEl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoZSBKSVJBIGlzc3VlIElEIGJlIHVzZWQgYXMgdGhlIHByZWZpeCwgc2luY2UgdGhhdCB0cmlnZ2VycyBjZXJ0YWluIGF1dG9tYXRpb24sIGFuZCBpdCBwcm92aWRlcyBhCkBAIC0xNzQsOCArMTY4LDggQEAKIAogVGFncyBhcmUgdXNlZCBmb3IgbWlsZXN0b25lcywgcmVsZWFzZSBjYW5kaWRhdGVzLCBhbmQgYXBwcm92ZWQgPDx2ZXJzaW9uaW5nLHBhcnRpYWwgYW5kIGNvbXBsZXRlIHJlbGVhc2VzPj4uIFRhZ3MgZm9yIGEKIGNvbXBsZXRlIHJlbGVhc2UgYXJlIHNpbXBseSBkZWZpbmVkIGJ5IHRoZSB0aHJlZS1kaWdpdCB2ZXJzaW9uIG51bWJlci4gVGFncyBmb3IgYSBwYXJ0aWFsIHJlbGVhc2UsIHNob3VsZCBiZSBwcmVmaXhlZAotYnkgdGhlIGluZGl2aWR1YWwgbGFuZ3VhZ2UgcmVsZXZhbnQgdG8gdGhhdCByZWxlYXNlLiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYW4gaW5pdGlhbCBwYXJ0aWFsIHJlbGVhc2UgZm9yIGAzLjYuMGAKLW9uIGBncmVtbGluLXB5dGhvbmAgdGhlbiB0aGUgdGFnIHNob3VsZCBiZSBgMy42LjAuMS1weXRob25gLgorYnkgdGhlIGluZGl2aWR1YWwgbGFuZ3VhZ2UgcmVsZXZhbnQgdG8gdGhhdCByZWxlYXNlLiBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgYW4gaW5pdGlhbCBwYXJ0aWFsIHJlbGVhc2UgZm9yIGA0LjAuMGAKK29uIGBncmVtbGluLXB5dGhvbmAgdGhlbiB0aGUgdGFnIHNob3VsZCBiZSBgNC4wLjEtcHl0aG9uYC4KIAogUGxlYXNlIHJlZnJhaW4gZnJvbSBjcmVhdGluZyBhcmJpdHJhcnkgdGFncywgYXMgdGhleSBwcm9kdWNlIHBlcm1hbmVudCBjbHV0dGVyLgogCkBAIC0yMTYsNyArMjEwLDcgQEAKIGFmZmVjdCB1c2VycyBvciBwcm92aWRlcnMuICBUaGlzIGxhYmVsIGlzIGltcG9ydGFudCB3aGVuIG9yZ2FuaXppbmcgcmVsZWFzZSBub3Rlcy4KICoqIFRoZSAiZGVwcmVjYXRpb24iIGxhYmVsIHdoaWNoIGlzIGFzc2lnbmVkIHRvIGFuIGlzc3VlIHRoYXQgaW5jbHVkZXMgY2hhbmdlcyB0byBkZXByZWNhdGUgYSBwb3J0aW9uIG9mIHRoZSBBUEkuCiAqIFRoZSAiYWZmZWN0cy9maXggdmVyc2lvbihzKSIgZmllbGRzIHNob3VsZCBiZSBhcHByb3ByaWF0ZWx5IHNldCwgd2hlcmUgdGhlICJmaXggdmVyc2lvbiIgaW1wbGllcyB0aGUgdmVyc2lvbiBvbgotd2hpY2ggdGhhdCBwYXJ0aWN1bGFyIGlzc3VlIHdpbGwgY29tcGxldGVkLiBUaGlzIGlzIGEgZmllbGQgdXN1YWxseSBvbmx5IHNldCBieSBjb21taXR0ZXJzIGFuZCBzaG91bGQgb25seSBiZSBzZXQKK3doaWNoIHRoYXQgcGFydGljdWxhciBpc3N1ZSB3aWxsIGJlIGNvbXBsZXRlZC4gVGhpcyBpcyBhIGZpZWxkIHVzdWFsbHkgb25seSBzZXQgYnkgY29tbWl0dGVycyBhbmQgc2hvdWxkIG9ubHkgYmUgc2V0CiB3aGVuIHRoZSBpc3N1ZSBpcyBiZWluZyBjbG9zZWQgd2l0aCBhIGNvbXBsZXRlZCBkaXNwb3NpdGlvbiAoZS5nLiAiRG9uZSIsICJGaXhlZCIsIGV0Yy4pLgogKiBUaGUgInByaW9yaXR5IiBmaWVsZCBjYW4gYmUgYXJiaXRyYXJpbHkgYXBwbGllZCB3aXRoIG9uZSBleGNlcHRpb24uICBUaGUgInRyaXZpYWwiIG9wdGlvbiBzaG91bGQgYmUgcmVzZXJ2ZWQgZm9yCiB0YXNrcyB0aGF0IGFyZSAiZWFzeSIgZm9yIGEgcG90ZW50aWFsIG5ldyBjb250cmlidXRvciB0byBqdW1wIGludG8gYW5kIGRvIG5vdCBoYXZlIHNpZ25pZmljYW50IGltcGFjdCB0byB1cmdlbnRseQpAQCAtMjg1LDcgKzI3OSw3IEBACiAqIFRlc3RzIHRoYXQgYXJlIGRlc2lnbmVkIHRvIHVzZSBhIGBHcmFwaFByb3ZpZGVyYCBpbXBsZW1lbnRhdGlvbiBpbiBjb25qdW5jdGlvbiB3aXRoIGBBYnN0cmFjdEdyZW1saW5UZXN0YCBfYW5kXyBhcmUKIGluIHRoZSBgL3Rlc3RgIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIG5hbWVkIHdpdGggYFRlc3RgIGFzIHRoZSBzdWZmaXgsIGFzIHRoaXMgd2lsbCBjYXVzZSB0aGVtIHRvIGV4ZWN1dGUgaW4gc29tZQogZW52aXJvbm1lbnRzIHdpdGhvdXQgYSBgR3JhcGhQcm92aWRlcmAgYmVpbmcgaW5pdGlhbGl6ZWQgYnkgYSBzdWl0ZS4gVGhlc2UgdHlwZXMgb2YgdGVzdHMgc2hvdWxkIGJlIHN1ZmZpeGVkIHdpdGgKLWBDaGVja2AgaW5zdGVhZC4gUGxlYXNlIHNlZSBsaW5rOmh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2Jsb2IvZTMyYTQxODdlNGYyNWUyOTBhYWJlMTQwMDdmOTA4N2M0OGEwNjUyMS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmF0aXZlTmVvNGpTdHJ1Y3R1cmVDaGVjay5qYXZhW05hdGl2ZU5lbzRqU3RydWN0dXJlQ2hlY2tdCitgQ2hlY2tgIGluc3RlYWQuIFBsZWFzZSBzZWUgbGluazpodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iL21hc3Rlci9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9zdHJ1Y3R1cmUvaW8vU3BhcmtJb1JlZ2lzdHJ5Q2hlY2suamF2YVtTcGFya0lvUmVnaXN0cnlDaGVja10KIGZvciBhbiBleGFtcGxlLgogCiBbW2dyZW1saW4tbGFuZ3VhZ2UtdGVzdC1jYXNlc11dCkBAIC00MTQsOCArNDA4LDEwIEBACiAqIFBhdGggLSAqcFtfeHh4XyxfeXl5Xyxfenp6XywuLi5dKiAtIEEgY29tbWEgc2VwYXJhdGVkIGNvbGxlY3Rpb24gb2YgdmFsdWVzIHRoYXQgbWFrZSB1cCB0aGUgYFBhdGhgIHNob3VsZCBiZSBhZGRlZCB0bwogYmV0d2VlbiB0aGUgc3F1YXJlIGJyYWNrZXRzLiBUaGVzZSB2YWx1ZXMgcmVzcGVjdCB0aGUgdHlwZSBzeXN0ZW0gdGh1cyBhbGxvd2luZyBmb3IgY3JlYXRpb24gb2YgYFBhdGhgIG9mIHZlcnRpY2VzLAogZWRnZXMsIG1hcHMsIGFuZCBhbnkgb3RoZXIgYXZhaWxhYmxlIHR5cGUuCisqIFByb3BlcnR5IC0gKnByb3BbX2tleV8sX3ZhbHVlX10qIC0gVGhlIGtleSBpcyBzaW1wbHkgYSBzdHJpbmcsIGFuZCB0aGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgYSB0eXBlZCB2YWx1ZSB1c2luZyB0aGUKK3N5bnRheCBwcmVzZW50ZWQgaGVyZS4KICogU2V0IC0gKnNbX3h4eF8sX3l5eV8sX3p6el8sLi4uXSogLSBBIGNvbW1hIHNlcGFyYXRlZCBjb2xsZWN0aW9uIG9mIHZhbHVlcyB0aGF0IG1ha2UgdXAgdGhlIHNldCBzaG91bGQgYmUgYWRkZWQgdG8KLWJldHdlZW4gdGhlIHNxdWFyZSBicmFja2V0cy4gVGhlc2UgdmFsdWVzIHJlc3BlY3QgdGhlIHR5cGUgc3lzdGVtIHRodXMgYWxsb3dpbmcgZm9yIGNyZWF0aW9uIG9mIHNldHMgb2YgdmVydGljZXMsCitiZXR3ZWVuIHRoZSBzcXVhcmUgYnJhY2tldHMuIFRoZXNlIHZhbHVlcyByZXNwZWN0IHRoZSB0eXBlIHN5c3RlbSB0aHVzIGFsbG93aW5nIHRvIGNyZWF0ZSBzZXRzIG9mIHZlcnRpY2VzLAogZWRnZXMsIG1hcHMsIGFuZCBhbnkgb3RoZXIgYXZhaWxhYmxlIHR5cGUuCiAqIFN0cmluZyAtIEFueSB2YWx1ZSBub3QgdXNpbmcgdGhlIHN5c3RlbSBub3RhdGlvbiB3aWxsIGJlIGludGVycHJldGVkIGFzCiBhIHN0cmluZyBieSBkZWZhdWx0LgpAQCAtNDI1LDYgKzQyMSwyMSBAQAogKiBWZXJ0ZXggLSAqdltfeHh4X10qIC0gVGhlICJ4eHgiIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSAibmFtZSIgcHJvcGVydHkgb2YgYSB2ZXJ0ZXggaW4gdGhlIGdyYXBoLiBUaGlzIHN5bnRheCBtYXkKIGluY2x1ZGUgdGhlIGAuaWRgIHN1ZmZpeCB3aGljaCB3b3VsZCBpbmRpY2F0ZSBnZXR0aW5nIHRoZSB2ZXJ0ZXggaWRlbnRpZmllciBvciB0aGUgYC5zaWRgIHN1ZmZpeCB3aGljaCBnZXRzIGEgc3RyaW5nCiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZWRnZSBpZGVudGlmaWVyLgorKiBWZXJ0ZXhQcm9wZXJ0eSAtICp2cFtfeHh4X10qIC0gVGhlICJ4eHgiIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGEgcmVwcmVzZW50YXRpb24gb2YgYSB2ZXJ0ZXggcHJvcGVydHkgaW4gdGhlIGZvcm0gb2YKK3RoZSBgdmVydGV4X25hbWUta2V5LT52YWx1ZWAuIE5vdGUgdGhhdCB0aGUga2V5IGlzIGp1c3QgYSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBpcyBhIHR5cGVkIHZhbHVlIHVzaW5nIHRoZSBzeW50YXgKK3ByZXNlbnRlZCBoZXJlLgorCit2cFttYXJrby1uYW1lLT5tYXJrb10KKworV2hlbiB1c2luZyB0aGlzIHN5bnRheCwgaXQgaXMgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgbGlzdHMgYW5kIHNldHMgbWF5IGNvbnRhaW4gb3RoZXIgbGlzdHMgb3Igc2V0cyBhcyBlbGVtZW50cywKK2FsbG93aW5nIGZvciBuZXN0ZWQgY29sbGVjdGlvbiBub3RhdGlvbiBzdWNoIGFzIGBsW2xbZFsxXS5pLGRbMl0uaV0sbFtkWzNdLmksZFs0XS5pXV1gLiBUaGUgc3RlcCBkZWZpbml0aW9ucyBhY3Jvc3MgYWxsCitsYW5ndWFnZSB2YXJpYW50cyBwYXJzZSB0aGVzZSBjb3JyZWN0bHkgYnkgdHJhY2tpbmcgYnJhY2tldCBkZXB0aCBzbyB0aGF0IGNvbW1hcyBpbnNpZGUgaW5uZXIgYnJhY2tldHMgYXJlIG5vdCB0cmVhdGVkCithcyB0b3AtbGV2ZWwgc2VwYXJhdG9ycy4gSG93ZXZlciwgbWl4ZWQtdHlwZSBuZXN0aW5nIGlzIG5vdCBzdXBwb3J0ZWQg4oCUIGEgbGlzdCBvciBzZXQgbWF5IG5vdCBjb250YWluIGEgbWFwIGFzIGEgZGlyZWN0CitlbGVtZW50IChlLmcuIGBsW21beyJuYW1lIjoibWFya28ifV1dYCB3aWxsIG5vdCBwYXJzZSBjb3JyZWN0bHkpLiBUaGlzIGxpbWl0YXRpb24gZXhpc3RzIGJlY2F1c2UgdGhlIHR5cGUgbm90YXRpb24KK21hdGNoZXJzIGFyZSBhcHBsaWVkIGluIG9yZGVyIHVzaW5nIHN1YnN0cmluZyBtYXRjaGluZywgYW5kIHRoZSBgbVsuLi5dYCBtYXRjaGVyIGZpcmVzIGJlZm9yZSBgbFsuLi5dYCBvbiB0aGUgb3V0ZXIKK3ZhbHVlLCBjYXVzaW5nIHRoZSBtYXAgcGF0dGVybiB0byBjb25zdW1lIHBhcnQgb2YgdGhlIHN1cnJvdW5kaW5nIGJyYWNrZXQgc3ludGF4LiBTYW1lLXR5cGUgbmVzdGluZyAobGlzdC1vZi1saXN0cywKK3NldC1vZi1zZXRzKSBhbmQgbmVzdGluZyBvZiBzY2FsYXIgdHlwZXMgKHZlcnRpY2VzLCBlZGdlcywgbnVtYmVycywgc3RyaW5ncykgaW5zaWRlIGxpc3RzIG9yIHNldHMgd29ya3MgYXMKK2V4cGVjdGVkLgogCiBXaGVuIHVzaW5nIHRoaXMgc3ludGF4LCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBsaXN0cyBhbmQgc2V0cyBtYXkgY29udGFpbiBvdGhlciBsaXN0cyBvciBzZXRzIGFzIGVsZW1lbnRzLAogYWxsb3dpbmcgZm9yIG5lc3RlZCBjb2xsZWN0aW9uIG5vdGF0aW9uIHN1Y2ggYXMgYGxbbFtkWzFdLmksZFsyXS5pXSxsW2RbM10uaSxkWzRdLmldXWAuIFRoZSBzdGVwIGRlZmluaXRpb25zIGFjcm9zcyBhbGwKQEAgLTQ3MSw4ICs0ODIsOCBAQAogICAiIiIKIC0tLS0KIAotVGhlIHRyYXZlcnNhbCBtdXN0IGJlIHdyaXR0ZW4gc28gdGhhdCBpdCBjYW4gYmUgcGFyc2VkIGJ5IGJvdGggYGdyZW1saW4tZ3Jvb3Z5YCBhbmQgYGdyZW1saW4tbGFuZ3VhZ2VgLiBVc2luZyBzeW50YXgKLXBhcnRpY3VsYXIgdG8gb25lIGJ1dCBub3QgdGhlIG90aGVyIG1heSByZXN1bHQgaW4gdGVzdCBleGVjdXRpb24gZXJyb3JzLgorVGhlIHRyYXZlcnNhbCBtdXN0IGJlIHdyaXR0ZW4gc28gdGhhdCBpdCBjYW4gYmUgcGFyc2VkIGJ5IGBncmVtbGluLWxhbmd1YWdlYC4gVXNpbmcgc3ludGF4IGluY29tcGF0aWJsZSB3aXRoIHRoZQorZ3JhbW1hciBtYXkgcmVzdWx0IGluIHRlc3QgZXhlY3V0aW9uIGVycm9ycy4KIAogSXQgd2lsbCBiZSB0aGUgcmVzdWx0cyBvZiB0aGlzIHRyYXZlcnNhbCB0aGF0IGVuZCB1cCBiZWluZyBhc3NlcnRlZCBieSBHaGVya2luLiBXaGVuIHdyaXRpbmcgdGhlc2UgdGVzdCB0cmF2ZXJzYWxzLAogYmUgc3VyZSB0byBhbHdheXMgdXNlIHRoZSBtZXRob2QgYW5kIGVudW0gcHJlZml4ZXMuIEZvciBleGFtcGxlLCB1c2UgIGBfXy5vdXQoKWAgZm9yIGFuIGFub255bW91cyB0cmF2ZXJzYWwgcmF0aGVyCkBAIC02NDcsNiArNjU4LDggQEAKIGBHcmFwaENvbXB1dGVyYC4KICogYEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uU3RhckdyYXBoRXhjZWVkZWRgIC0gVGhlIHNjZW5hcmlvIGl0c2VsZiBpcyBub3Qgd3JpdHRlbiB0byBzdXBwb3J0IGBHcmFwaENvbXB1dGVyYCBiZWNhdXNlCiB0aGUgdHJhdmVyc2FsIGRvZXMgbm90IG1pbmQgdGhlIHN0YXIgZ3JhcGggbGltaXRhdGlvbi4KKyogYEBHcmVtbGluR3Jvb3Z5Tm90U3VwcG9ydGVkYCAtIFRoZSBzY2VuYXJpbyB1c2VzIGBncmVtbGluLWxhbmdgIHN5bnRheCB3aGljaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBgZ3JlbWxpbi1ncm9vdnlgIGFuZAorY2Fubm90IGJlIHJlc29sdmVkIHdpdGggdGhlIGdyb292eSB0cmFuc2xhdG9yLiBUaGlzIGlzIHR5cGljYWxseSBmb3Igc2NlbmFyaW9zIHVzaW5nIGFtYmlndW91c2x5LXR5cGVzIGBudWxsYCBwYXJhbWV0ZXJzLgogKiBgQEluc2VydGlvbk9yZGVyaW5nUmVxdWlyZWRgIC0gVGhlIHNjZW5hcmlvIGlzIHJlbGlhbnQgb24gdGhlIGdyYXBoIHN5c3RlbSBwcmVkaWN0YWJseSByZXR1cm5pbmcgcmVzdWx0cyAodmVydGljZXMsCiBlZGdlcywgcHJvcGVydGllcykgaW4gdGhlIHNhbWUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGluc2VydGVkIGludG8gdGhlIGdyYXBoLgogKiBgQE1ldGFQcm9wZXJ0aWVzYCAtIFRoZSBzY2VuYXJpbyBtYWtlcyB1c2Ugb2YgbWV0YS1wcm9wZXJ0aWVzLgpAQCAtNjcwLDYgKzY4Myw5IEBACiAKIFtbZ3JlbWxpbi1zb2NrZXQtc2VydmVyLXRlc3RzXV0KID09PSBHcmVtbGluIFNvY2tldCBTZXJ2ZXIgVGVzdHMKKworSU1QT1JUQU5UOiA0LjAuMC1iZXRhLjIgUmVsZWFzZSAtIFJlbW92ZXMgd2Vic29ja2V0cy4gVGhpcyBzZWN0aW9uIHdpbGwgYmUgdXBkYXRlZCBhcyB0aGUgbmV3IEhUVFAgdGVzdCBzZXJ2ZXIgZmFsbHMgaW50byBwbGFjZS4KKwogYGdyZW1saW4tc29ja2V0LXNlcnZlcmAgaXMgYW4gaW5jbHVkZWQgdGVzdCBzZXJ2ZXIgZm9yIGRyaXZlciB0ZXN0cyB3aGljaCByZXF1aXJlIHByZWRlZmluZWQgc2VydmVyCiBiZWhhdmlvci4gVHlwaWNhbGx5LCB0aGlzIGlzIHRvIHRlc3Qgc2NlbmFyaW9zIHN1Y2ggYXMgdGhlIHNlcnZlciBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIG9yIHJldHVybmluZwogYW4gZXJyb3IgY29kZSBidXQgb3RoZXIgcmVzcG9uc2UgYmVoYXZpb3IgY2FuIGJlIGFkZGVkIGFzIG5lZWRlZCBmb3IgdGVzdHMuCkBAIC03NzMsNyArNzg5LDcgQEAKIAogKiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBhIHJlbGVhc2UgYW5kIG5lZWQgdG8gbWFuaXB1bGF0ZSBmaWxlcyBhY2NvcmRpbmdseSBmb3IgdGhlIHJlbGVhc2UuCiAqKiBgR3JlbWxpbi52ZXJzaW9uKClgLCBDSEFOR0VMT0cgZGF0ZXMsIGBwb20ueG1sYCB2ZXJzaW9uIGJ1bXBzLCBldGMuCi0qIFlvdSBhcmUgZG9pbmcgYW4gbWlub3IgY2hhbmdlIGFuZCBpdCBpcyBvYnZpb3VzIHRoYXQgYW4gUlRDIGlzIG5vdCByZXF1aXJlZCAod291bGQgYmUgYSBwb2ludGxlc3MgYnVyZGVuIHRvIHRoZSBjb21tdW5pdHkpLgorKiBZb3UgYXJlIGRvaW5nIGEgbWlub3IgY2hhbmdlIGFuZCBpdCBpcyBvYnZpb3VzIHRoYXQgYW4gUlRDIGlzIG5vdCByZXF1aXJlZCAod291bGQgYmUgYSBwb2ludGxlc3MgYnVyZGVuIHRvIHRoZSBjb21tdW5pdHkpLgogKiogVGhlIGZpeCBpcyB1bmRlciB0aGUgbGluazpodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9nbG9zc2FyeS5odG1sI0NvbW1pdFRoZW5SZXZpZXdbY29tbWl0LXRoZW4tcmV2aWV3XSAoQ1RSKSBwb2xpY3kgYW5kIGxhenkgY29uc2Vuc3VzIGlzIHN1ZmZpY2llbnQsIHdoZXJlIGEgc2luZ2xlIC0xIHZvdGUgcmVxdWlyZXMgeW91IHRvIHJldmVydCB5b3VyIGNoYW5nZXMuCiAqKiBBZGRpbmcgYSB0ZXN0IGNhc2UsIGZpeGluZyBzcGVsbGluZy9ncmFtbWFyIG1pc3Rha2VzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBmaXhpbmcgTElDRU5TRS9OT1RJQ0UvZXRjLiBmaWxlcywgZml4aW5nIGEgbWlub3IgaXNzdWUgaW4gYW4gYWxyZWFkeSBtZXJnZWQgYnJhbmNoLgogCkBAIC05MTAsNyArOTI2LDcgQEAKIGBwb20ueG1sYCBmaWxlIG9mIGFueSBtb2R1bGUsIGJ1aWxkIGBncmVtbGluLWRyaXZlcmAsIEdyZW1saW4gQ29uc29sZSBhbmQgR3JlbWxpbiBTZXJ2ZXIgYW5kIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mCiB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbnM6CiAKLSogdGFyZ2V0L2dyZW1saW4tZHJpdmVyLXgueS56LXViZXIuamFyCisqIHRhcmdldC9ncmVtbGluLWRyaXZlci14Lnkuei1zaGFkZWQuamFyCiAqIHRhcmdldC9ncmVtbGluLWNvbnNvbGUteC55LnotdWJlci5qYXIKICogdGFyZ2V0L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1jb25zb2xlLXgueS56LWRpc3RyaWJ1dGlvbi56aXAKICogdGFyZ2V0L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1zZXJ2ZXIteC55LnotZGlzdHJpYnV0aW9uLnppcApkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvZGV2L2RldmVsb3Blci9pbmRleC5hc2NpaWRvYyBiL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvaW5kZXguYXNjaWlkb2MKaW5kZXggMWViNGUwNC4uODI2ZGVkOCAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvZGV2L2RldmVsb3Blci9pbmRleC5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL2luZGV4LmFzY2lpZG9jCkBAIC00OCw1ICs0OCwzIEBACiBpbmNsdWRlOjpyZWxlYXNlLmFzY2lpZG9jW10KIAogaW5jbHVkZTo6YWRtaW5pc3RyYXRpb24uYXNjaWlkb2NbXQotCi1pbmNsdWRlOjptZWV0aW5ncy5hc2NpaWRvY1tdCmRpZmYgLS1naXQgYS9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL21lZXRpbmdzLmFzY2lpZG9jIGIvZG9jcy9zcmMvZGV2L2RldmVsb3Blci9tZWV0aW5ncy5hc2NpaWRvYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc2MmIyMi4uMDAwMDAwMAotLS0gYS9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL21lZXRpbmdzLmFzY2lpZG9jCisrKyAvZGV2L251bGwKQEAgLTEsMjAzICswLDAgQEAKLS8vLy8KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLS8vLy8KLVtbbWVldGluZ3NdXQotPSBNZWV0aW5ncwotCi09PSBOb3ZlbWJlciAyMywgMjAxNQotCi1UaGUgbWVldGluZyB3YXMgc2NoZWR1bGVkIGZvciAxMjowMHBtIEVTVCwgc3RhcnRlZCBhdCAxMjowNXBtIHdoZW4gc3VmZmljaWVudCBhdHRlbmRhbmNlIHRvIGNvbnN0aXR1dGUgYSBxdW9ydW0gd2FzCi1yZWFjaGVkIGFuZCB3YXMgaGVsZCB2aWEgR29vZ2xlIEhhbmdvdXQgaG9zdGVkIGJ5IE1hcmtvIFJvZHJpZ3Vlei4gTWVldGluZyBhZGpvdXJuZWQgYXQgMjozNXBtIEVTVC4KLQotKkNvbW1pdHRlcnMvUFBNQyBNZW1iZXJzKgotCi0qIERhbmllbCBLdXBwaXR6Ci0qIFN0ZXBoZW4gTWFsbGV0dGUKLSogRHlsYW4gTWlsbGlraW4KLSogSmFzb24gUGx1cmFkCi0qIE1hcmtvIFJvZHJpZ3VlegotKiBUZWQgV2lsbWVzCi0KLSpHdWVzdHMqCi0KLV9Ob25lXwotCi0qTWludXRlcyoKLQotKiBQZXJmb3JtZWQgYSBmdWxsIHJldmlldyBvZiB0aGUgbGlzdCBvZiB1bnJlc29sdmVkIHRpY2tldHMgaW4gSklSQS4gVGhlIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgY2FuIGJlIGZvdW5kIGJlbG93LgotTm90ZSB0aGF0IHJlbGVhc2VzIGFuZCBhc3NpZ25tZW50cyBtYWRlIHRvZGF5IGFyZSBub3QgbWVhbnQgdG8gYmUgc2V0IGluIHN0b25lLiBUaGUgYXNzaWdubWVudHMgY291bGQgY2hhbmdlIGdpdmVuCi1jb21tdW5pdHkgZGlzY3Vzc2lvbiBvciB1bmZvcmVzZWVuIGV2ZW50cy4KLSogRGVjaWRlZCB0byBhZGQgdmVyc2lvbiBgMy4yLjAtaW5jdWJhdGluZ2AgdG8gSklSQS4gIFRoaXMgdmVyc2lvbiB3YXMgYWRkZWQgdG8gaGVscCBiZXR0ZXIgY2F0ZWdvcml6ZSB0aGUgYXZhaWxhYmxlCi1pc3N1ZXMuIEl0IHdhcyBleHBsaWNpdGx5IGRlY2lkZWQgdGhhdCBubyBkZXZlbG9wbWVudCB3YXMgZXhwZWN0ZWQgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZXNlIGlzc3VlIGF0IHRoaXMgdGltZSBhbmQKLXRoYXQgd2Ugd291bGQgd2FpdCB1bnRpbCBgMy4xLjEtaW5jdWJhdGluZ2Agd2FzIHJlbGVhc2VkIGJlZm9yZSB0aGlua2luZyB0b28gaGFyZCBvbiB0aGF0IGJvZHkgb2Ygd29yay4gIFRoaXMKLWRlY2lzaW9uIG1lYW5zIHRoYXQgdGhlIGBtYXN0ZXJgIGJyYW5jaCB3aWxsIGNvbnRpbnVlIHRvIGJlIHRoZSBjdXJyZW50IGJyYW5jaCBvZiBkZXZlbG9wbWVudCBmb3IgdGhlIHRpbWUgYmVpbmcKLWFuZCBiZSBib3VuZCB0byBgMy4xLnhgIGxpbmUgb2YgY29kZS4KLSogRGlzY3Vzc2VkIHVzZSBvZiBKSVJBIGRlcGVuZGVuY3kgbGlua3MgdG8gc2hvdyAiYmxvY2tlcnMiIGFuZCBkZXBlbmRlbmNpZXMgYW1vbmcgZGlmZmVyZW50IEpJUkEgdGlja2V0cy4KLSogRGlzY3Vzc2VkIGEgdGFyZ2V0IGRhdGUgZm9yIHVwY29taW5nIHJlbGVhc2VzOgotKiogYDMuMS4xLWluY3ViYXRpbmdgIC0gRmVicnVhcnkgMSwgMjAxNgotKiogYDMuMi4wLWluY3ViYXRpbmdgIC0gTWF5LCAxLCAyMDE2Ci0KLVRoZSBmb2xsb3dpbmcgdGlja2V0cyB3ZXJlIGFzc2lnbmVkIHRvIGAzLjEuMS1pbmN1YmF0aW5nYDoKLQotW3dpZHRoPSIxMDAlIixjb2xzPSIyLDUsMiIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxJRCB8RGVzY3JpcHRpb24gfFR5cGUKLXxUSU5LRVJQT1AtMzc5IHxNZXNzYWdlU2NvcGUuTG9jYWwuc2V0U3RhdGljTWVzc2FnZShNIG1zZykgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTY1OSB8R3JhcGhDb25maWd1cmF0aW9uIENsYXNzIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC03MzYgfEF1dG9tYXRpYyBUcmF2ZXJzYWwgcmV3cml0aW5nIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC03NjMgfElzU3RlcCBicm9rZW4gd2hlbiBwcm9maWxpbmcgaXMgZW5hYmxlZC4gfEJ1ZwotfFRJTktFUlBPUC04MTggfENvbnNpZGVyIGEgUC5pbnN0YW5jZU9mKCkgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTgyNCB8RG8gd2UgbmVlZCBydW50aW1lIEJpZ0RlY2ltYWwgaW4gbW9yZSBwbGFjZXM/IHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04NDIgfE1hcFJlZHVjZUhlbHBlciBzaG91bGQgc29ydCByZXNwZWN0aXZlIG9mIHRoZSBudW1iZXIgb2YgcmVkdWNlIHRhc2tzIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04NTkgfFByb3ZpZGUgYSBtb3JlIGdlbmVyYWwgd2F5IHRvIHNldCBsb2cgbGV2ZWxzIGluIHBsdWdpbnMgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTg2MCB8QmluZGluZ3MgYXBwbGllZCB0byB0aGUgUGx1Z2luQWNjZXB0b3Igc2hvdWxkIGFwcGVhciB0byBHcmVtbGluIFNlcnZlciB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODgyIHxEZXZlbG9wIGEgbGVzcyBlcnJvciBwcm9uZSB3YXkgZm9yIHJld3JpdGluZyBzdHJhdGVnaWVzIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04ODYgfEFsbG93IGFueSBHcmFwaFJlYWRlci9Xcml0ZXIgdG8gYmUgcGVyc2lzdGVuY2UgZW5naW5lIGZvciBUaW5rZXJHcmFwaCB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODkxIHxSZS1leGFtaW5lIFNhbmRib3hpbmcgQWJzdHJhY3Rpb25zIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04OTMgfFZhbGlkYXRlIGRlcGVuZGVuY3kgZ3JhYnMgdGhhdCBoYXZlIFRpbmtlclBvcCBkZXBlbmRlbmNpZXMgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTkxMiB8SW1wcm92ZSB0aGUgYWJpbGl0eSB0byBlbWJlZCBHcmVtbGluIFNlcnZlciB3aXRoIENoYW5uZWxpemVyIGluamVjdGlvbiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTIwIHxUZXN0IGNhc2UgbmVlZGVkIGZvciBlbnN1cmluZyBzYW1lIGNhcmRpbmFsaXR5IGZvciBrZXkuIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05MjcgfGJpbi9wdWJsaXNoLWRvY3Muc2ggc2hvdWxkIG9ubHkgdXBsb2FkIGRpZmZzLiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTMwIHxUaWUgQWxpYXMgdG8gVHJhbnNhY3Rpb24gTWFuYWdlciBpbiBHcmVtbGluIFNlcnZlciB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTMyIHxBZGQgYWJpbGl0eSB0byBjYW5jZWwgc2NyaXB0IGV4ZWN1dGlvbiBhc3NvY2lhdGVkIHdpdGggYSBHcmVtbGluIFNlcnZlciBTZXNzaW9uIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05MzcgfE1vdmUgdGhlIGltcGxlbWVudGF0aW9ucyBzZWN0aW9ucyBvZiB0aGUgcHJpbWFyeSBkb2N1bWVudGF0aW9uIHRvICJwcm92aWRlciB0dXRvcmlhbHMuIiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTM4IHxBZGQgYSAiY2xlYXIgU05BUFNIT1QgamFycyIgc2VjdGlvbiB0byB0aGUgcHJvY2Vzcy1kb2NzLnNoLiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTM5IHxOZW80akdyYXBoIHNob3VsZCBzdXBwb3J0IEhpZ2hBdmFpbGFiaWxpdHkgKE5lbzRqSEEpLiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTQxIHxJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIHdyb25nIG9yZGVyKCkuYnkoKSBhcmd1bWVudHMgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk0MyB8V2FybiBpZiBHcmVtbGluIFNlcnZlciBpcyBydW5uaW5nIHByaW9yIHRvIGdlbmVyYXRpbmcgZG9jcyB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTUxIHxCYXJyaWVyIHN0ZXBzIHByb3ZpZGUgdW5leHBlY3RlZCByZXN1bHRzIGluIEdyZW1saW4gT0xBUCB8QnVnCi18VElOS0VSUE9QLTk1NCB8Q29uc2lzdGVudCB0ZXN0IGRpcmVjdG9yeSB1c2FnZSB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTU2IHxDb25uZWN0aW9uIGVycm9ycyB0ZW5kIHRvIGZvcmNlIGEgY29tcGxldGUgY2xvc2Ugb2YgdGhlIGNoYW5uZWwgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk1OCB8SW1wcm92ZSB1c2FiaWxpdHkgb2YgLnByb2ZpbGUoKSBzdGVwLiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTY0IHxUZXN0IFhYWEdyYXBoQ29tcHV0ZXIgb24gYSBIYWRvb3AyIGNsdXN0ZXIgKG5vbi1wc2V1ZG9jbHVzdGVyKS4gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk2NyB8U3VwcG9ydCBuZXN0ZWQtcmVwZWF0KCkgc3RydWN0dXJlcyB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTczIHxCTFZQIHNob3VsZG4ndCBjbGVhciBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgfEJ1ZwotfFRJTktFUlBPUC05NzYgfEZhaWwgZWFybGllciBpZiBpbnZhbGlkIHZlcnNpb24gaXMgc3VwcGxpZWQgaW4gdmFsaWRhdGUtZGlzdHJpYnV0aW9uLnNoIHxCdWcKLXxUSU5LRVJQT1AtOTc4IHxOYXRpdmUgVGlua2VyR3JhcGggU2VyaWFsaXplcnMgZm9yIEdyYXBoU09OIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05NzkgfENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kgbm90IHBpY2tpbmcgdXAgT3JkZXIgbG9jYWwgdHJhdmVyc2FsIHxCdWcKLXxUSU5LRVJQT1AtOTgwIHxBZGQgYSBzZXJ2aWNlIHNjcmlwdCBvciBkYWVtb24gbW9kZSBpbiB0aGUgZGlzdHJpYnV0aW9uIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05ODEgfERlcHJlY2F0ZSBzdXBwb3J0IGZvciBjcmVkZW50aWFsc0RiTG9jYXRpb24gaW4gR3JlbWxpbiBTZXJ2ZXIgQ29uZmlnIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05ODMgfFByb3ZpZGUgYSB3YXkgdG8gdHJhY2sgb3BlbiBHcmFwaCBpbnN0YW5jZXMgaW4gdGVzdHMgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk4NCB8VXNlIEdyYXBoUHJvdmlkZXIgZm9yIGlkIGNvbnZlcnNpb24gaW4gR3Jvb3Z5IEVudmlyb25tZW50IHRlc3Qgc3VpdGUgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk4NiB8TWFuYWdlIGJpbmFyeSBMSUNFTlNFL05PVElDRSBmaWxlcyB3aXRoIGJpbi9jaGVja0xpY2Vuc2VOb3RpY2Uuc2ggfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk4OCB8U3BhcmtHcmFwaENvbXB1dGVyLnN1Ym1pdCBzaG91bGRuJ3QgdXNlIEZvcmtKb2luUG9vbC5jb21tb25Qb29sIHxJbXByb3ZlbWVudAotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgZm9sbG93aW5nIGl0ZW1zIHdlcmUgaWRlbnRpZmllZCBmb3IgYDMuMi4wLWluY3ViYXRpbmdgOgotCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjIsNSwyIixvcHRpb25zPSJoZWFkZXIiXQotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotfElEIHxEZXNjcmlwdGlvbiB8VHlwZQotfFRJTktFUlBPUC0zMzEgfFRyYXZlcnNlckNvbnZlcnRlclN0ZXAgKHByb3Bvc2FsKSB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtNjIwIHxDb21tdXRhdGl2ZSBTdGVwIE1hcmtlciBpbnRlcmZhY2UgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTY2OSB8Q29uc2lkZXIgUmVxdWlyZWQgVHJhdmVyc2FsU3RyYXRlZ2llcyB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtNjkxIHxUUDMgaXMgdG9vIHByZXNjcmlwdGl2ZSBpbiBleGNlcHRpb24gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTc0MCB8U2VyaWFsaXplciBIYW5kc2hha2UgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTc0MyB8U3VwcG9ydCAiYmFycmllciBzeW50YXgiIGluIHN0ZXAgbGFiZWxzLiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtNzYxIHxTb21lIGJhc2ljIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMgLyBzdGVwcyB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtNzg2IHxQYXR0ZXJucyBmb3IgRFNMIERldmVsb3BtZW50IHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC03ODkgfENob29zZSB0aGVuIEVuZm9yY2UgU2VtYW50aWNzIGZvciBHcmFwaC5jbG9zZSgpIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC03OTAgfEltcGxlbWVudCBBdXRvQ2xvc2VhYmxlIG9uIFRyYXZlcnNhbFNvdXJjZSB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODAwIHxbUHJvcG9zYWxdIERvbWFpbi9SYW5nZSBjaGVja2luZyBkdXJpbmcgdHJhdmVyc2FsIGNvbnN0cnVjdGlvbi4gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTgxMyB8W1Byb3Bvc2FsXSBNYWtlIHRoZSBHcmVtbGluIEdyYXBoIFRyYXZlcnNhbCBNYWNoaW5lIGFuZCBJbnN0cnVjdGlvbiBTZXQgRXhwbGljaXQgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTgxOSB8TWFwcGluZyBDYXJkaW5hbGl0eSBJbnRlcmZhY2UgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTgzMSB8SG93IHNob3VsZCBPTEFQIHRyZWF0IENvbGxlY3Rpb248RWxlbWVudD4gb2JqZWN0cz8gTm8gY29udHJhY3QgaXMgc3BlY2lmaWVkLiB8QnVnCi18VElOS0VSUE9QLTg0NCB8UHJvcGVydHlNYXBTdGVwIHNob3VsZCByZXVzZSBQcm9wZXJ0aWVzU3RlcCB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODY0IHxPcGVyYXRvci5tZWFuIHdvdWxkIGJlIG5pY2UuIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04NzEgfFJ1bnRpbWVTdHJhdGVneSBhcyB0aGUgZ2VuZXJhbCBtb2RlbCBmb3IgYWxsIHN1Y2ggZXhlY3V0aW9uIHRpbWUgcmV3cml0ZXMvcmUtb3JkZXJzIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04NzIgfFJlbW92ZSBHcm91cENvdW50U3RlcCBpbiBmYXZvciBvZiBuZXcgUmVkdWNlLWJhc2VkIEdyb3VwU3RlcCB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODczIHxGb2xkU3RlcCBzaG91bGQgZGVmYXVsdCB0byB1c2luZyBCdWxrU2V0IGZvciBlZmZpY2llbmN5LiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODc4IHxSZWZhY3RvciBHcmVtbGluIFNlcnZlciBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBiZSBDbGllbnQgcGFyYW1ldGVyaXplZCB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODg5IHxTdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB2ZXJ0aWNlcyBpbiBHcmFwaENvbXB1dGVyIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04OTAgfFJlbW92ZSB0aGUgY29uY2VwdCBvZiBicmFuY2gvIHBhY2thZ2UuIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05MTkgfEZlYXR1cmVzIG5lZWRzIHRvIHNwZWNpZnkgd2hldGhlciAyIHZlcnRleCBwcm9wZXJ0aWVzIHdpdGggc2FtZSBrZXkvdmFsdWUgaXMgYWxsb3dlZC4gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk0MCB8Q29udmVydCBMb2NhbFRyYXZlcnNhbHMgdG8gTWF0Y2hTdGVwcyBpbiBPTEFQIGFuZCBTb2x2ZSB0aGUgU3RhckdyYXBoIFByb2JsZW0gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk0MiB8VXNlIEV2ZW50U3RyYXRlZ3kgdG8gc29sdmUgT0xBUCBidWxrIG11dGF0aW9uIG9mIE9MVFAuIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05NDQgfENvbnNpZGVyIGRlcHJlY2F0aW5nIG9yIGJldHRlciBlbmZvcmNpbmcgR3JhcGguRXhjZXB0aW9ucy5lbGVtZW50Tm90Rm91bmQgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk0NiB8VHJhdmVyc2FsIHJlc3BlY3RpbmcgVGhyZWFkLmludGVycnVwdCgpIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05NDcgfEVuZm9yY2Ugc2VtYW50aWNzIG9mIHRocmVhZGVkIHRyYW5zYWN0aW9ucyBhcyBtYW51YWwgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk2MCB8QWRkIGEgQnVsayBjbGFzcyB3aGljaCBpcyB1c2VkIGJ5IFRyYXZlcnNlciB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTYyIHxQcm92aWRlICJ2ZXJ0ZXggcXVlcnkiIHNlbGVjdGl2aXR5IHdoZW4gaW1wb3J0aW5nIGRhdGEgaW4gT0xBUC4gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk2MyB8U3ViZ3JhcGhUcmF2ZXJzYWxBbmFseXplciB0byBkZXRlcm1pbmUgd2hhdCBpcyByZWFsbHkgcmVxdWlyZWQgZnJvbSBhIHRyYXZlcnNhbC4gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk2NiB8U3VwcG9ydCByZXZlcnNpYmxlIHRyYXZlcnNhbHMgaW4gTWF0Y2hTdGVwIChhbmQgcmVzcGVjdGl2ZSBNYXRjaEFsZ29yaXRobXMpIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05NjkgfHJlc3Bhd24gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTk3MSB8VHJhdmVyc2FsU291cmNlIHNob3VsZCBiZSBmbHVlbnQgbGlrZSBHcmFwaENvbXB1dGVyIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC05NzQgfFNhdmluZyBoZWFkbGVzcyB0cmF2ZXJzYWxzIGZvciByZXVzZSAoY2xvbmUgSXRlcmF0b3IgRnVuKSB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTgyIHx2YWx1ZXNEZWNyLCB2YWx1ZXNJbmNyLCBrZXlzRGVjciwgYW5kIHZhbHVlc0RlY3IgaXMgbGFtZS4gfEltcHJvdmVtZW50Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZSBmb2xsb3dpbmcgaXNzdWVzIHdlcmUgc2ltcGx5IGNsb3NlZCBkdXJpbmcgcmV2aWV3IC0gdGhlIHJlYXNvbnMgZm9yIGNsb3NpbmcgY2FuIGJlIGZvdW5kIGluIHRoZSBjb21tZW50cyBvZiB0aGUKLWlzc3VlcyB0aGVtc2VsdmVzOgotCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjIsNSwyIixvcHRpb25zPSJoZWFkZXIiXQotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotfElEIHxEZXNjcmlwdGlvbiB8VHlwZQotfFRJTktFUlBPUC0zNzUgfEJldHRlciBNZXRob2RzIGZvciBNYW5hZ2luZyBDbGFzc1BhdGggZm9yIFBsdWdpbnMgfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTQ4NyB8VXNlciBTdXBwbGllZCBJZHMgYW5kIElPIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC01MDkgfFN1YmdyYXBoIHN1cHBvcnQgZm9yIFZlcnRleFByb2dyYW0gfAotfFRJTktFUlBPUC02MDQgfERldGFjaGVkRWRnZS5hdHRhY2goVmVydGV4KSBpcyB0b28gc2xvdy4gfEltcHJvdmVtZW50Ci18VElOS0VSUE9QLTc5NSB8UHJvdmlkZSBUcmF2ZXJzZXIuc2V0UGF0aCgpIHxJbXByb3ZlbWVudAotfFRJTktFUlBPUC04NjIgfEFkZCBhIFRyYXZlcnNhbFNvdXJjZVN0cmF0ZWd5IHRoYXQgcHJvdmlkZXMgImxvY2tlZCIgdmFsdWVzLiB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtODk0IHxTaG9ydGhhbmQgZm9yIGluc3RhbGwgb2YgVGlua2VyUG9wIGRlcGVuZGVuY2llcyB8SW1wcm92ZW1lbnQKLXxUSU5LRVJQT1AtOTM2IHxDaGVjayBmZWF0dXJlIHJlcXVpcmVtZW50cyBiZWZvcmUgb3BlbmluZyBncmFwaCBkdXJpbmcgdGVzdHMgfEltcHJvdmVtZW50Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLT09IE9jdG9iZXIgMjksIDIwMTUKLQotVGhlIG1lZXRpbmcgd2FzIHNjaGVkdWxlZCBmb3IgMTowMHBtIEVTVCwgc3RhcnRlZCBvbiB0aW1lIGFuZCB3YXMgaGVsZCB2aWEgR29vZ2xlIEhhbmdvdXQgaG9zdGVkIGJ5IFN0ZXBoZW4gTWFsbGV0dGUuCi1NZWV0aW5nIGFkam91cm5lZCBhdCAxOjQ1cG0gRVNULgotCi0qQ29tbWl0dGVycy9QUE1DIE1lbWJlcnMqCi0KLSogRGFuaWVsIEt1cHBpdHoKLSogU3RlcGhlbiBNYWxsZXR0ZQotKiBNYXJrbyBSb2RyaWd1ZXoKLQotKkd1ZXN0cyoKLQotX05vbmVfCi0KLSpNaW51dGVzKgotCi0qIFJldmlld2VkIHRoZSBzY29wZSBvZiAzLjEuMC1pbmN1YmF0aW5nIGluIEpJUkEgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHVwY29taW5nIHJlbGVhc2UgZGF0ZSBvbiBOb3ZlbWJlciAxNiwgMjAxNS4KLSogSXQgd2FzIG5vdGVkIHRoYXQgd2l0aCB0aGUgbmV3IG9uZSB3ZWVrIGNvZGUgZnJlZXplIHBvbGljeSB0aGF0IHRoZSByZWFsIGN1dC1vZmYgZGF0ZSBmb3Igd29yayBpcyBOb3ZlbWJlciA5LCAyMDE1LgotKiBUaGVyZSB3YXMgZ2VuZXJhbCBjb25zZW5zdXMgb24gdGhlIGNhbGwgdGhhdCB3b3JrIHNob3VsZCBiZSBhY2NvbXBsaXNoZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZSBjb2RlIHJldmlldyBwcm9jZXNzCi1ub3QgZHJhZyBpbnRvIHRoZSBjb2RlIGZyZWV6ZSB0aW1lIHBlcmlvZC4gIEluIG90aGVyIHdvcmRzLCBwdWxsIHJlcXVlc3RzIHRvIHRoZSByZWxlYXNlIGJyYW5jaCBzaG91bGQgYmUgY29tcGxldGVkCi13ZWxsIGFoZWFkIG9mIHRoZSA5dGguCi0KLVVwb24gcmV2aWV3IG9mIHRoZSB0aWNrZXRzIGluIEpJUkEgYXNzaWduZWQgdG8gMy4xLjAtaW5jdWJhdGluZywgdGhlIGZvbGxvd2luZyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgMy4xLjAtaW5jdWJhdGluZwotcm9hZG1hcDoKLQotW3dpZHRoPSIxMDAlIixjb2xzPSIyLDUsNSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxJRCB8RGVzY3JpcHRpb24gfFJlbW92YWwgUmVhc29uaW5nCi18VElOS0VSUE9QLTg5MSB8UmUtZXhhbWluZSBTYW5kYm94aW5nIEFic3RyYWN0aW9ucyB8TG93IHByaW9yaXR5IGFuZCB0aW1lIGxpbWl0YXRpb25zLgotfFRJTktFUlBPUC04OTAgfFJlbW92ZSB0aGUgY29uY2VwdCBvZiBicmFuY2gvIHBhY2thZ2UuIHxBd2FpdGluZyBzdGVwIGxpYnJhcnkgZGVmaW5pdGlvbiBpbiAzLjIuMC1pbmN1YmF0aW5nLgotfFRJTktFUlBPUC04NzMgfEZvbGRTdGVwIHNob3VsZCBkZWZhdWx0IHRvIHVzaW5nIEJ1bGtTZXQgZm9yIGVmZmljaWVuY3kuIHxBd2FpdGluZyBzdGVwIGxpYnJhcnkgZGVmaW5pdGlvbiBpbiAzLjIuMC1pbmN1YmF0aW5nLgotfFRJTktFUlBPUC04NjQgfE9wZXJhdG9yLm1lYW4gd291bGQgYmUgbmljZS4gfEF3YWl0aW5nIHN0ZXAgbGlicmFyeSBkZWZpbml0aW9uIGluIDMuMi4wLWluY3ViYXRpbmcuCi18VElOS0VSUE9QLTg2MiB8QWRkIGEgVHJhdmVyc2FsU291cmNlU3RyYXRlZ3kgdGhhdCBwcm92aWRlcyAibG9ja2VkIiB2YWx1ZXMuIHxMb3cgcHJpb3JpdHkgYW5kIHRpbWUgbGltaXRhdGlvbnMuCi18VElOS0VSUE9QLTg1NCB8UmVtb3ZlIFByb3BlcnR5TWFwU3RlcCBpbiBmYXZvciBvZiBtdWx0aS1pbnN0cnVjdGlvbiBjb25zdHJ1Y3Rpb24uIHxOb24tdHJpdmlhbCBnaXZlbiB0aW1lIGxpbWl0YXRpb25zLgotfFRJTktFUlBPUC03ODkgfENob29zZSB0aGVuIEVuZm9yY2UgU2VtYW50aWNzIGZvciBHcmFwaC5jbG9zZSgpIHxOb24tdHJpdmlhbCBnaXZlbiB0aW1lIGxpbWl0YXRpb25zLgotfFRJTktFUlBPUC03NjggfE1hdGNoU3RlcCBpbiBPTEFQIHNob3VsZCBiZSBzbWFydCBhYm91dCBjdXJyZW50IHZlcnRleC4gfE5vbi10cml2aWFsIGdpdmVuIHRpbWUgbGltaXRhdGlvbnMuCi18VElOS0VSUE9QLTcwNSB8TWFrZSB1c2Ugb2YgYSBNZW1vcnlSREQgaW5zdGVhZCBvZiBBY2N1bXVsYXRvcnMgaW4gU3BhcmtHcmFwaENvbXB1dGVyPyB8Tm9uLXRyaXZpYWwgZ2l2ZW4gdGltZSBsaW1pdGF0aW9ucy4KLXxUSU5LRVJQT1AtNjU5IHxHcmFwaENvbmZpZ3VyYXRpb24gQ2xhc3MgfE5vbi10cml2aWFsIGdpdmVuIHRpbWUgbGltaXRhdGlvbnMuCi18VElOS0VSUE9QLTYyMyB8TW9yZSBvdXRwdXQgZm9yIE9MQVAgam9icyB8Tm90IGNsZWFybHkgZGVmaW5lZCBnaXZlbiB0aW1lIGxpbWl0YXRpb25zLgotfFRJTktFUlBPUC02MjAgfENvbW11dGF0aXZlIFN0ZXAgTWFya2VyIGludGVyZmFjZSB8QXdhaXRpbmcgc3RlcCBsaWJyYXJ5IGRlZmluaXRpb24gaW4gMy4yLjAtaW5jdWJhdGluZwotfFRJTktFUlBPUC01NTAgfEdyZW1saW4gSU8gbmVlZHMgdG8gc3VwcG9ydCBib3RoIE9MVFAgYW5kIE9MQVAgbmF0dXJhbGx5LiB8Tm90IGNsZWFybHkgZGVmaW5lZCBnaXZlbiB0aW1lIGxpbWl0YXRpb25zLgotfFRJTktFUlBPUC00NzkgfENvbnNpZGVyIFByb3ZpZGluZyAiZ2V0T3JDcmVhdGUiIEZ1bmN0aW9uYWxpdHkgfE5vdCBjbGVhcmx5IGRlZmluZWQgZ2l2ZW4gdGltZSBsaW1pdGF0aW9ucy4KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvcmVsZWFzZS5hc2NpaWRvYyBiL2RvY3Mvc3JjL2Rldi9kZXZlbG9wZXIvcmVsZWFzZS5hc2NpaWRvYwppbmRleCBjMGZjYTBjLi5hYTA0OWU3IDEwMDY0NAotLS0gYS9kb2NzL3NyYy9kZXYvZGV2ZWxvcGVyL3JlbGVhc2UuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvZGV2L2RldmVsb3Blci9yZWxlYXNlLmFzY2lpZG9jCkBAIC02Miw3ICs2Miw3IEBACiBtdm4gZGVwbG95IC1wbCBncmVtbGluLXB5dGhvbiAtRHB5cGkKIG12biBjbGVhbiBpbnN0YWxsIC1wbCA6Z3JlbWxpbi1kb3RuZXQsOmdyZW1saW4tZG90bmV0LXNvdXJjZSAtRG51Z2V0CiBtdm4gZGVwbG95IC1wbCA6Z3JlbWxpbi1kb3RuZXQtc291cmNlIC1EbnVnZXQKLW12biBkZXBsb3kgLXBsIGdyZW1saW4tamF2YXNjcmlwdCAtRG5wbWAKK212biBkZXBsb3kgLXBsIDpncmVtbGluLWphdmFzY3JpcHQgLURucG1gCiAtLS0tCiAKIFB5dGhvbiwgLk5FVCBhbmQgSmF2YXNjcmlwdCBkbyBub3QgdXNlIHRoZSBzbmFwc2hvdCBtb2RlbCB0aGUgSlZNIGRvZXMsIGhvd2V2ZXIsIHRoZSBidWlsZCBpcyBzbWFydCBpbiB0aGF0IGl0IHdpbGwKQEAgLTExNCwxMiArMTE0LDE4IEBACiAuIEZvdXJ0ZWVuIGRheXMgYmVmb3JlIHJlbGVhc2UsIGlzc3VlIGFuIGVtYWlsIHRvIHRoZSBkZXYgbWFpbGluZyBsaXN0IHRvIHJlbWluZCB0aGUgY29tbXVuaXR5IG9mIHRoZSBwZW5kaW5nIHJlbGVhc2UuCiAuLiBOb3RlIGFueSBpbXBvcnRhbnQgaXNzdWVzIG9wZW4gaW4gSklSQSBpbiB0aGF0IHBvc3QuCiAuLiBSZXF1ZXN0IHJldmlldyBhbmQgdXBkYXRlIG9mIHRoZSAidXBncmFkZSBkb2N1bWVudGF0aW9uIiBhbmQgQ0hBTkdFTE9HLgorLiBQcmlvciB0byB0aGUgc3RhcnQgb2YgY29kZSBmcmVlemUsIGNvbnNpZGVyIGFueSBtaW5vciBub24tYnJlYWtpbmcgZGVwZW5kZW5jeSB1cGRhdGVzLiBUaGUgZm9sbG93aW5nIGNvbW1hbmRzIG9yIHRvb2xzCittYXkgYmUgdXNlZnVsIHRvIGxpc3QgYXZhaWxhYmxlIHVwZGF0ZXM6CistIGBtdm4gdmVyc2lvbnM6ZGlzcGxheS1kZXBlbmRlbmN5LXVwZGF0ZXMgLURhbGxvd01ham9yVXBkYXRlcz1mYWxzZWAKKy0gYGdvIGxpc3QgLW0gLXUgYWxsYAorLSBgbnBtLWNoZWNrLXVwZGF0ZXNgCistIGBkb3RuZXQtY2hlY2stdXBkYXRlc2AKIC4gU2V2ZW4gZGF5cyBiZWZvcmUgcmVsZWFzZSwgYW5ub3VuY2UgdGhlIGNvZGUgZnJlZXplIG9uIHRoZSBkZXYgbWFpbGluZyBsaXN0IHRvIHJlbWluZCB0aGUgY29tbXVuaXR5IHRoYXQgdGhlIGJyYW5jaAogdW5kZXIgcmVsZWFzZSBpcyBwcm90ZWN0ZWQuIFR3ZWFrcyB0byBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBvZGRzIGFuZCBlbmRzIHJlbGF0ZWQgdG8gcmVsZWFzZSBhcmUgc3RpbGwgYWxsb3dlZAogZHVyaW5nIHRoaXMgcGVyaW9kLgogLiBBdCBzb21lIHBvaW50IGR1cmluZyB0aGUgd2VlazoKIC4uIFJ1biBhIGxvY2FsIGJ1aWxkIGBtdm4gY2xlYW4gaW5zdGFsbGAKLS4uIFJ1biB0aGUgZnVsbCBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlOiBgZG9ja2VyL2J1aWxkLnNoIC10IC1pIC1uYAorLi4gUnVuIHRoZSBmdWxsIGludGVncmF0aW9uIHRlc3Qgc3VpdGU6IGBkb2NrZXIvYnVpbGQuc2ggLXQgLWlgCiAuLiBCdWlsZCBhbmQgdGVzdCB0aGUgRG9ja2VyIGltYWdlczogYG12biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXNlcnZlcixncmVtbGluLWNvbnNvbGUgLURkb2NrZXJJbWFnZXNgCiAuLiBFbnN1cmUgdGhhdCB0aGUgR3JlbWxpbi5OZXQuVGVtcGxhdGUgZ2V0cyBwYWNrYWdlZCBzdWNjZXNzZnVsbHk6IGBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tZG90bmV0LXNvdXJjZSAtRG51Z2V0YAogLi4gRGVwbG95IGEgZmluYWwgU05BUFNIT1QgdG8gdGhlIEFwYWNoZSBzbmFwc2hvdCByZXBvc2l0b3J5IGZvciBKYXZhLgpAQCAtMTUwLDEzICsxNTYsMTMgQEAKIGRlcGxveW1lbnQuCiAKIC4gYG12biBjbGVhbiBpbnN0YWxsYAotLiBgZG9ja2VyL2J1aWxkLnNoIC10IC1pIC1uYAorLiBgZG9ja2VyL2J1aWxkLnNoIC10IC1pYAogLiBgYmluL3B1Ymxpc2gtZG9jcy5zaCA8dXNlcm5hbWU+YCAtIG5vdGUgdGhhdCB1bmRlciBhIHJlbGVhc2UgY2FuZGlkYXRlIHRoZSBkb2N1bWVudGF0aW9uIGlzIHB1Ymxpc2hlZCBhcyBTTkFQU0hPVAogLiBgbXZuIHZlcnNpb25zOnNldCAtRG5ld1ZlcnNpb249eHgueXkuenogLURnZW5lcmF0ZUJhY2t1cFBvbXM9ZmFsc2VgIHRvIHVwZGF0ZSB0aGUgcHJvamVjdCBmaWxlcyB0byByZWZlcmVuY2UgYSBub24tU05BUFNIT1QgdmVyc2lvbgogLi4gTWFudWFsbHkgdXBkYXRlIHRoZSBgX192ZXJzaW9uX19gIGZvciBgZ3JlbWxpbi1weXRob25gIGluIGBncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vX19pbml0X18ucHlgCiAuIGBtdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBUZXN0c2AgdG8gdXBkYXRlIEdMViB2ZXJzaW9ucwogLi4gUmV2aWV3IGBHcmVtbGluLk5ldC5jc3Byb2pgLCBgR3JlbWxpbi5OZXQuVGVtcGxhdGUuY3Nwcm9qYCBhbmQgYEdyZW1saW4uTmV0LlRlbXBsYXRlLm51c3BlY2AgaW4gYGdyZW1saW4tZG90bmV0YAotLi4gUmV2aWV3IGBwYWNrYWdlLmpzb25gIGFuZCBgcGFja2FnZS1sb2NrLmpzb25gIGluIGBncmVtbGluLWphdmFzY3JpcHRgIGFuZCBpbiBgZ3JlbWxpbnRgCisuLiBSZXZpZXcgYHBhY2thZ2UuanNvbmAgaW4gYGdyZW1saW4tamF2YXNjcmlwdGAsIGBncmVtbGludGAsIGFuZCBgZ3JlbWxpbi1tY3BgIHVuZGVyIGBncmVtbGluLWpzL2A7IHRoZSBgcGFja2FnZS1sb2NrLmpzb25gIGxpdmVzIGF0IGBncmVtbGluLWpzL2Ag4oCUIHJ1biBgbnBtIGluc3RhbGxgIGZyb20gdGhlcmUgdG8gcmVnZW5lcmF0ZSBpdCBhZnRlciB2ZXJzaW9uIGNoYW5nZXMgYW5kIHJldmlldyBpdAogLiBgcHVzaGQgZ3JlbWxpbi1jb25zb2xlL2JpbjsgbG4gLWZzIC4uL3RhcmdldC9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tY29uc29sZS14eC55eS56ei1zdGFuZGFsb25lL2Jpbi9ncmVtbGluLnNoIGdyZW1saW4uc2g7IHBvcGRgCiAuIGBnaXQgZGlmZmAgYW5kIHJldmlldyB0aGUgdXBkYXRlZCBmaWxlcwogLiBgZ2l0IGNvbW1pdCAtYSAtbSAiVGlua2VyUG9wIHh4Lnl5Lnp6IHJlbGVhc2UiYCBhbmQgYGdpdCBwdXNoYApAQCAtMTY2LDcgKzE3Miw3IEBACiAuLiBNYW51YWxseSB1cGRhdGUgdGhlIGBfX3ZlcnNpb25fX2AgZm9yIGBncmVtbGluLXB5dGhvbmAgaW4gYGdyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9fX2luaXRfXy5weWAgdG8gYSBkZXYgdmVyc2lvbiBsaWtlIGB4eC55eS56ei5kZXYxYAogLiBgbXZuIGNsZWFuIGluc3RhbGwgLURza2lwVGVzdHNgIHRvIHVwZGF0ZSBHTFYgdmVyc2lvbnMKIC4uIFJldmlldyBgR3JlbWxpbi5OZXQuY3Nwcm9qYCwgYEdyZW1saW4uTmV0LlRlbXBsYXRlLmNzcHJvamAgYW5kIGBHcmVtbGluLk5ldC5UZW1wbGF0ZS5udXNwZWNgIGluIGBncmVtbGluLWRvdG5ldGAKLS4uIFJldmlldyBgcGFja2FnZS5qc29uYCBhbmQgYHBhY2thZ2UtbG9jay5qc29uYCBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCBhbmQgaW4gYGdyZW1saW50YAorLi4gUmV2aWV3IGBwYWNrYWdlLmpzb25gIGluIGBncmVtbGluLWphdmFzY3JpcHRgLCBgZ3JlbWxpbnRgLCBhbmQgYGdyZW1saW4tbWNwYCB1bmRlciBgZ3JlbWxpbi1qcy9gOyB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBsaXZlcyBhdCBgZ3JlbWxpbi1qcy9gIOKAlCBydW4gYG5wbSBpbnN0YWxsYCBmcm9tIHRoZXJlIHRvIHJlZ2VuZXJhdGUgaXQgYWZ0ZXIgdmVyc2lvbiBjaGFuZ2VzIGFuZCByZXZpZXcgaXQKIC4gYHB1c2hkIGdyZW1saW4tY29uc29sZS9iaW47IGxuIC1mcyAuLi90YXJnZXQvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLWNvbnNvbGUteHgueXkuenotU05BUFNIT1Qtc3RhbmRhbG9uZS9iaW4vZ3JlbWxpbi5zaCBncmVtbGluLnNoOyBwb3BkYAogLiBgZ2l0IGNvbW1pdCAtYSAtbSAiUmV0dXJuZWQgdG8geHgueXkuenotU05BUFNIT1QiYCBhbmQgYGdpdCBwdXNoYAogLiBBbm5vdW5jZSB0aGUgcmVsZWFzZSBjYW5kaWRhdGUgdG8gYGRldmAgbWFpbGluZyBsaXN0IGFuZCBhd2FpdCBmZWVkYmFjawpAQCAtMjE0LDEwICsyMjAsOSBAQAogLi4gVXBkYXRlIHRoZSByZWxlYXNlIGRhdGUuCiAuLiBVcGRhdGUgdGhlIGxpbmsgdG8gYENIQU5HRUxPRy5hc2NpaWRvY2AgLSB0aGlzIGxpbmsgbWF5IGFscmVhZHkgYmUgY29ycmVjdCBidXQgd2lsbCBub3QgZXhpc3QgdW50aWwgdGhlIHJlcG9zaXRvcnkgaXMgdGFnZ2VkLgogLiBgbXZuIHZlcnNpb25zOnNldCAtRG5ld1ZlcnNpb249eHgueXkuenogLURnZW5lcmF0ZUJhY2t1cFBvbXM9ZmFsc2VgIHRvIHVwZGF0ZSBwcm9qZWN0IGZpbGVzIHRvIHJlZmVyZW5jZSB0aGUgbm9uLVNOQVBTSE9UIHZlcnNpb24KLS4uIE1hbnVhbGx5IHVwZGF0ZSB0aGUgYF9fdmVyc2lvbl9fYCBmb3IgYGdyZW1saW4tcHl0aG9uYCBpbiBgZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL19faW5pdF9fLnB5YAogLiBgbXZuIGNsZWFuIGluc3RhbGwgLURza2lwVGVzdHNgIHRvIHVwZGF0ZSBHTFYgdmVyc2lvbnMKIC4uIFJldmlldyBgR3JlbWxpbi5OZXQuY3Nwcm9qYCwgYEdyZW1saW4uTmV0LlRlbXBsYXRlLmNzcHJvamAgYW5kIGBHcmVtbGluLk5ldC5UZW1wbGF0ZS5udXNwZWNgIGluIGBncmVtbGluLWRvdG5ldGAKLS4uIFJldmlldyBgcGFja2FnZS5qc29uYCBhbmQgYHBhY2thZ2UtbG9jay5qc29uYCBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCwgYGdyZW1saW50YCwgYW5kIGBncmVtbGluLW1jcGAKKy4uIFJldmlldyBgcGFja2FnZS5qc29uYCBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCwgYGdyZW1saW50YCwgYW5kIGBncmVtbGluLW1jcGAgdW5kZXIgYGdyZW1saW4tanMvYDsgdGhlIGBwYWNrYWdlLWxvY2suanNvbmAgbGl2ZXMgYXQgYGdyZW1saW4tanMvYCDigJQgcnVuIGBucG0gaW5zdGFsbGAgZnJvbSB0aGVyZSB0byByZWdlbmVyYXRlIGl0IGFmdGVyIHZlcnNpb24gY2hhbmdlcyBhbmQgcmV2aWV3IGl0CiAuIGBwdXNoZCBncmVtbGluLWNvbnNvbGUvYmluOyBsbiAtZnMgLi4vdGFyZ2V0L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1jb25zb2xlLXh4Lnl5Lnp6LXN0YW5kYWxvbmUvYmluL2dyZW1saW4uc2ggZ3JlbWxpbi5zaDsgcG9wZGAKIC4gYGdpdCBkaWZmYCBhbmQgcmV2aWV3IHRoZSB1cGRhdGVkIGZpbGVzCiAuIGBtdm4gY2xlYW4gaW5zdGFsbGAgLSBuZWVkIHRvIGJ1aWxkIGZpcnN0IHNvIHRoYXQgdGhlIHJpZ2h0IHZlcnNpb24gb2YgdGhlIGNvbnNvbGUgaXMgdXNlZCB3aXRoIGBiaW4vcHVibGlzaC1kb2NzLnNoYApAQCAtMjY2LDEwICsyNzEsMTIgQEAKIC4uIGBtdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBUZXN0cyAtRG51Z2V0YAogLi4gYG12biBkZXBsb3kgLXBsIGdyZW1saW4tcHl0aG9uIC1Ec2tpcFRlc3RzIC1EcHlwaWAKIC4uIGBtdm4gZGVwbG95IC1wbCA6Z3JlbWxpbi1kb3RuZXQtc291cmNlIC1Ec2tpcFRlc3RzIC1EbnVnZXRgCi0uLiBgbXZuIGRlcGxveSAtcGwgZ3JlbWxpbi1qYXZhc2NyaXB0IC1Ec2tpcFRlc3RzIC1EbnBtYAotLi4uIENvbnNpZGVyIGRpcmVjdCBkZXBsb3kgd2l0aCBgbnBtIHB1Ymxpc2ggLS1vdHAgPG90cD5gIGZyb20gYGdyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9gIC0gaWYgdXNpbmcgdGhpcyBtZXRob2QsIGVuc3VyZSB0aGUgYG5wbWAgdmVyc2lvbiBhbGlnbnMgd2l0aCB0aGUgb25lIGV4cGVjdGVkIGJ5IHRoZSBicmFuY2guCi0uLiBgbXZuIGRlcGxveSAtcGwgZ3JlbWxpbnQgLURza2lwVGVzdHMgLURucG1gCi0uLi4gQ29uc2lkZXIgZGlyZWN0IGRlcGxveSB3aXRoIGBucG0gcHVibGlzaCAtLW90cCA8b3RwPmAgZnJvbSBgZ3JlbWxpbnQvYCAtIGlmIHVzaW5nIHRoaXMgbWV0aG9kLCBlbnN1cmUgdGhlIGBucG1gIHZlcnNpb24gYWxpZ25zIHdpdGggdGhlIG9uZSBleHBlY3RlZCBieSB0aGUgYnJhbmNoLgorLi4gYG12biBkZXBsb3kgLXBsIDpncmVtbGluLWphdmFzY3JpcHQgLURza2lwVGVzdHMgLURucG1gCisuLi4gQ29uc2lkZXIgZGlyZWN0IGRlcGxveSB3aXRoIGBucG0gcHVibGlzaCAtLW90cCA8b3RwPmAgZnJvbSBgZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvYCAtIGlmIHVzaW5nIHRoaXMgbWV0aG9kLCBlbnN1cmUgdGhlIGBucG1gIHZlcnNpb24gYWxpZ25zIHdpdGggdGhlIG9uZSBleHBlY3RlZCBieSB0aGUgYnJhbmNoLgorLi4gYG12biBkZXBsb3kgLXBsIDpncmVtbGludCAtRHNraXBUZXN0cyAtRG5wbWAKKy4uLiBDb25zaWRlciBkaXJlY3QgZGVwbG95IHdpdGggYG5wbSBwdWJsaXNoIC0tb3RwIDxvdHA+YCBmcm9tIGBncmVtbGluLWpzL2dyZW1saW50L2AgLSBpZiB1c2luZyB0aGlzIG1ldGhvZCwgZW5zdXJlIHRoZSBgbnBtYCB2ZXJzaW9uIGFsaWducyB3aXRoIHRoZSBvbmUgZXhwZWN0ZWQgYnkgdGhlIGJyYW5jaC4KKy4uIGBtdm4gZGVwbG95IC1wbCA6Z3JlbWxpbi1tY3AgLURza2lwVGVzdHMgLURucG1gCisuLi4gQ29uc2lkZXIgZGlyZWN0IGRlcGxveSB3aXRoIGBucG0gcHVibGlzaCAtLW90cCA8b3RwPmAgZnJvbSBgZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9gIC0gaWYgdXNpbmcgdGhpcyBtZXRob2QsIGVuc3VyZSB0aGUgYG5wbWAgdmVyc2lvbiBhbGlnbnMgd2l0aCB0aGUgb25lIGV4cGVjdGVkIGJ5IHRoZSBicmFuY2guIE5vdGU6IGBncmVtbGluLWphdmFzY3JpcHRgIG11c3QgYmUgcHVibGlzaGVkIGJlZm9yZSBgZ3JlbWxpbi1tY3BgIGFzIGl0IGlzIGEgZGVwZW5kZW5jeS4KIC4uIGBnaXQgdGFnIGdyZW1saW4tZ28vdnh4Lnl5Lnp6YAogLi4gYGdpdCBwdXNoIG9yaWdpbiBncmVtbGluLWdvL3Z4eC55eS56emAKIC4uIGBHT1BST1hZPXByb3h5LmdvbGFuZy5vcmcgZ28gbGlzdCAtbSBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92M0B2eHgueXkueHhgCkBAIC0yNzksNiArMjg2LDcgQEAKIC4uIGxpbms6aHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL0dyZW1saW4uTmV0LlRlbXBsYXRlL1tHcmVtbGluLk5ldC5UZW1wbGF0ZSAtIG51Z2V0XQogLi4gbGluazpodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGluW2dyZW1saW4gLSBucG1dCiAuLiBsaW5rOmh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2dyZW1saW50W2dyZW1saW50IC0gbnBtXQorLi4gbGluazpodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGluLW1jcFtncmVtbGluLW1jcCAtIG5wbV0KIC4uIGxpbms6aHR0cHM6Ly9wa2cuZ28uZGV2L2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzW2dyZW1saW4tZ28gLSBnbyBwYWNrYWdlc10KIC4gRGVwbG95IHRoZSBEb2NrZXIgaW1hZ2VzICooUE1DIG1lbWJlcikqCiAuLiBgbXZuIGRlcGxveSAtcGwgZ3JlbWxpbi1jb25zb2xlIC1Ec2tpcFRlc3RzIC1EZG9ja2VySW1hZ2VzYApAQCAtMjk4LDYgKzMwNiw3IEBACiAuLiBVcGRhdGUgbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2Rvd25sb2FkLmh0bWxbRG93bmxvYWRzXSBwYWdlLCB3aGVuIG1vdmluZyAiQ3VycmVudCBSZWxlYXNlcyIgdG8gIkFyY2hpdmVkCiBSZWxlYXNlcyIgcmVjYWxsIHRoYXQgdGhlIGh5cGVybGluayBtdXN0IGNoYW5nZSB0byBwb2ludCB0byB2ZXJzaW9uIGluIHRoZSBsaW5rOmh0dHBzOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QvdGlua2VycG9wL1tBcGFjaGUgQXJjaGl2ZXNdLgogLi4gVXBkYXRlIGBkb2NzL2dyZW1saW50L3BhY2thZ2UuanNvbmAgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZ3JlbWxpbnQuCisuLiBVcGRhdGUgYGRvY3MvZ3JlbWxhdG9yL3BhY2thZ2UuanNvbmAgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgZ3JlbWxpbi4KIC4uIFByZXZpZXcgY2hhbmdlcyBsb2NhbGx5IHdpdGggYGJpbi9nZW5lcmF0ZS1ob21lLnNoYCB0aGVuIGNvbW1pdCBjaGFuZ2VzIHRvIGdpdC4KIC4gV2FpdCBmb3IgemlwIGRpc3RyaWJ1dGlvbnMgdG8gc3luYyB0byB0aGUgQXBhY2hlIG1pcnJvcnMgKGkuZSBlbnN1cmUgdGhlIGRvd25sb2FkIGxpbmtzIHdvcmsgZnJvbSBhIG1pcnJvcikuCiAuIGBiaW4vcHVibGlzaC1ob21lLnNoIDx1c2VybmFtZT5gIHRvIHB1Ymxpc2ggdGhlIHVwZGF0ZWQgd2ViIHNpdGUgd2l0aCBuZXcgcmVsZWFzZXMuCkBAIC0zMjksOSArMzM4LDEyIEBACiBgbXZuIHZlcnNpb25zOnNldCAtRG5ld1ZlcnNpb249eHgueXkuenotU05BUFNIT1QgLURnZW5lcmF0ZUJhY2t1cFBvbXM9ZmFsc2VgLgogLiBgbXZuIGNsZWFuIGluc3RhbGwgLURza2lwVGVzdHNgIHRvIHVwZGF0ZSBHTFYgdmVyc2lvbnMKIC4uIFJldmlldyBgR3JlbWxpbi5OZXQuY3Nwcm9qYCwgYEdyZW1saW4uTmV0LlRlbXBsYXRlLmNzcHJvamAgYW5kIGBHcmVtbGluLk5ldC5UZW1wbGF0ZS5udXNwZWNgIGluIGBncmVtbGluLWRvdG5ldGAKLS4uIFJldmlldyBgcGFja2FnZS5qc29uYCBhbmQgYHBhY2thZ2UtbG9jay5qc29uYCBpbiBgZ3JlbWxpbi1qYXZhc2NyaXB0YCBhbmQgaW4gYGdyZW1saW50YAorLi4gUmV2aWV3IGBwYWNrYWdlLmpzb25gIGluIGBncmVtbGluLWphdmFzY3JpcHRgLCBgZ3JlbWxpbnRgLCBhbmQgYGdyZW1saW4tbWNwYCB1bmRlciBgZ3JlbWxpbi1qcy9gOyB0aGUgYHBhY2thZ2UtbG9jay5qc29uYCBsaXZlcyBhdCBgZ3JlbWxpbi1qcy9gIOKAlCBydW4gYG5wbSBpbnN0YWxsYCBmcm9tIHRoZXJlIHRvIHJlZ2VuZXJhdGUgaXQgYWZ0ZXIgdmVyc2lvbiBjaGFuZ2VzIGFuZCByZXZpZXcgaXQKIC4uIGBwdXNoZCBncmVtbGluLWNvbnNvbGUvYmluOyBsbiAtZnMgLi4vdGFyZ2V0L2FwYWNoZS10aW5rZXJwb3AtZ3JlbWxpbi1jb25zb2xlLXh4Lnl5Lnp6LVNOQVBTSE9ULXN0YW5kYWxvbmUvYmluL2dyZW1saW4uc2ggZ3JlbWxpbi5zaDsgcG9wZGAKLS4uIFVwZGF0ZSBDSEFOR0VMT0cgYW5kIHVwZ3JhZGUgZG9jcyB0byBoYXZlIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXJzIGZvciB0aGUgbmV4dCB2ZXJzaW9uLgorLi4gVXBkYXRlIENIQU5HRUxPRyBhbmQgdXBncmFkZSBkb2NzIHRvIGhhdmUgdGhlIGFwcHJvcHJpYXRlIGhlYWRlcnMgZm9yIHRoZSBuZXh0IHZlcnNpb24uIElmIGEgbWFqb3IgbGluZSB3aWxsIG5vIGxvbmdlciBiZSB1bmRlciBkZXZlbG9wbWVudCwgYXJjaGl2ZSB0aGUgQ0hBTkdFTE9HIGVudHJpZXMgZm9yIGl0IGFzIGZvbGxvd3M6CisuLi4gQ3JlYXRlIGEgbmV3IGBjaGFuZ2Vsb2cteC54LnguYXNjaWlkb2NgIGluIHRoZSBgZG9jcy9hcmNoaXZlL2NoYW5nZWxvZ3NgIGZvbGRlci4KKy4uLiBDb3B5IGFsbCBDSEFOR0VMT0cgZW50cmllcyBvZiB0aGUgbWFqb3IgdmVyc2lvbiBpbnRvIHRoZSBmaWxlIChyZWZlciB0byBwcmV2aW91cyBmaWxlcykuCisuLi4gUmVwbGFjZSB0aGUgQ0hBTkdFTE9HIGVudHJpZXMgdW5kZXIgZWFjaCBtaW5vciByZWxlYXNlcyB3aXRoIGFuIGFyY2hpdmVkIG5vdGljZSBjb250YWluaW5nIGxpbmsgdG8gdGhlIGFyY2hpdmVkIGNoYW5nZWxvZyBmaWxlIChyZWZlciB0byBwcmV2aW91cyBsaW5rcyBpbnNpZGUgQ0hBTkdFTE9HKS4KIC4uIGBtdm4gY2xlYW4gaW5zdGFsbCAtRHNraXBUZXN0c2AgLSBuZWVkIHRvIGJ1aWxkIGZpcnN0IHNvIHRoYXQgdGhlIHJpZ2h0IHZlcnNpb24gb2YgdGhlIGNvbnNvbGUgaXMgdXNlZCB3aXRoIGBiaW4vcHVibGlzaC1kb2NzLnNoYAogLi4gYG12biBkZXBsb3kgLURza2lwVGVzdHNgIC0gZGVwbG95IHRoZSBuZXcgYFNOQVBTSE9UYAogLi4gYGJpbi9wcm9jZXNzLWRvY3Muc2hgIGFuZCB2YWxpZGF0ZSB0aGUgZ2VuZXJhdGVkIGBTTkFQU0hPVGAgZG9jdW1lbnRhdGlvbiBsb2NhbGx5IGFuZCB0aGVuIGBiaW4vcHVibGlzaC1kb2NzLnNoIDx1c2VybmFtZT5gCkBAIC0zMzksNyArMzUxLDYgQEAKIC4gRXhhbWluZSB0aGUgYGZ1dHVyZS5hc2NpaWRvY2AgYW5kIHVwZGF0ZSB0aGUgIlJvYWRtYXAiIGFzIG5lZWRlZC4KIC4gVXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlcnMgaW4gYHB1bGxfcmVxdWVzdF90ZW1wbGF0ZS5tZGAuCiAuIFNlbmQgZW1haWwgdG8gYWR2aXNlIHRoYXQgY29kZSBmcmVlemUgaXMgbGlmdGVkLgotLiBDb25zaWRlciB0aGUgY2hhbmdlcyBtYWRlIHRvIEdyZW1saW4gYW5kIGRldGVybWluZSBpZiB0aGUgY29tbXVuaXR5IG5lZWRzIHRvIG9yZ2FuaXplIGEgUFIgdG8gW0RlZmluaXRlbHlUeXBlZF0oaHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZC9EZWZpbml0ZWx5VHlwZWQvdHJlZS9tYXN0ZXIvdHlwZXMvZ3JlbWxpbikgdG8ga2VlcCBUeXBlU2NyaXB0IHVwIHRvIGRhdGUuCiAuIEVuc3VyZSB0aGF0IHRoZSBHTFYgZXhhbXBsZXMgY29tcGlsZSBhbmQgcnVuIHdpdGggdGhlIGxhdGVzdCBpbWFnZSBhbmQgZGVwZW5kZW5jaWVzOiBgYmluL3J1bi1leGFtcGxlcy5zaGAuCiAuLiBNYWtlIGNoYW5nZXMgYXMgbmVjZXNzYXJ5IHRvIHVwZGF0ZSB0aGUgZXhhbXBsZXMuCiAuIFVwZGF0ZSByb290LWxldmVsIEdMViBleGFtcGxlcyB0byB1c2UgdGhlIG5ldyByZWxlYXNlIHZlcnNpb246CkBAIC0zNTAsOSArMzYxLDYgQEAKIC4uIFVwZGF0ZSB2ZXJzaW9uIG51bWJlcnMgaW4gYGdyZW1saW4tZXhhbXBsZXMvZ3JlbWxpbi1nby9nby5tb2RgIHRvIHJlZmVyZW5jZSB0aGUgbmV3IHJlbGVhc2UgdmVyc2lvbgogLi4gVGVzdCB0aGF0IGFsbCByb290LWxldmVsIGV4YW1wbGVzIHdvcmsgY29ycmVjdGx5IHdpdGggdGhlIG5ldyBwdWJsaXNoZWQgdmVyc2lvbnMKIC4gR2VuZXJhdGUgYSBsaXN0IG9mIGRlYWQgYnJhbmNoZXMgdGhhdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBhbmQgcG9zdCB0aGVtIGFzIGEgRElTQ1VTUyB0aHJlYWQgZm9yIHJldmlldywgdGhlbiBvbmNlIGNvbnNlbnN1cyBpcyByZWFjaGVkIHJlbW92ZWQgdGhvc2UgYnJhbmNoZXMuCi0uIFNldCB1cCB0aGUgSU8gdGVzdHMgZm9yIHRoZSBjdXJyZW50IGBTTkFQU0hPVGAgYXMgZGlzY3Vzc2VkIGluIHRoZSA8PGlvLElPIERvY3VtZW50YXRpb24gYW5kIFRlc3RpbmcgU2VjdGlvbj4+Ci0KLUFwYWNoZSBwcm92aWRlcyBhY2Nlc3MgdG8gZG93bmxvYWQgc3RhdGlzdGljcyBmb3IgcmVsZWFzZSBsaW5rOmh0dHBzOi8vbG9nZ2luZzEtaGUtZGUuYXBhY2hlLm9yZy9zdGF0cy9baGVyZV0uCiAKIFtbZW1haWwtdGVtcGxhdGVzXV0KID09IEVtYWlsIFRlbXBsYXRlcwpAQCAtNDg1LDYgKzQ5MywxMCBAQAogCiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ncmVtbGludC92L3h4Lnl5Lnp6CiAKK0dyZW1saW4gTUNQIGlzIGF2YWlsYWJsZSBpbiBucG06CisKK2h0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2dyZW1saW4tbWNwL3YveHgueXkuenoKKwogRG9ja2VyIGltYWdlcyBmb3IgR3JlbWxpbiBDb25zb2xlIGFuZCBHcmVtbGluIFNlcnZlciBjYW4gYmUgZm91bmQgb24gRG9ja2VyCiBIdWI6CiAKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL2Rldi9mdXR1cmUvcHJvcG9zYWwtdHJhbnNhY3Rpb24tNC5hc2NpaWRvYyBiL2RvY3Mvc3JjL2Rldi9mdXR1cmUvcHJvcG9zYWwtdHJhbnNhY3Rpb24tNC5hc2NpaWRvYwppbmRleCAzMDA3YzM0Li5kOTk2YjI2IDEwMDY0NAotLS0gYS9kb2NzL3NyYy9kZXYvZnV0dXJlL3Byb3Bvc2FsLXRyYW5zYWN0aW9uLTQuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvZGV2L2Z1dHVyZS9wcm9wb3NhbC10cmFuc2FjdGlvbi00LmFzY2lpZG9jCkBAIC0yMyw2ICsyMyw3IEBACiA9PSBUaW5rZXJHcmFwaCBUcmFuc2FjdGlvbiBTdXBwb3J0CiAKID09PSBJbnRyb2R1Y3Rpb24KKwogTm93LCBpZiB5b3UgbmVlZCB0byB1c2UgdHJhbnNhY3Rpb25zIGluIFRpbmtlclBvcCwgdGhlIG9ubHkgc29sdXRpb24gaXMgdG8gdXNlIHRoZSBOZW80aiBwbHVnaW4uIFVuZm9ydHVuYXRlbHksIHRoaXMgcGx1Z2luIGhhcyBub3QgYmVlbiB1cGRhdGVkIGZvciBhIGxvbmcgdGltZSBhbmQgaXMgb25seSBjb21wYXRpYmxlIHdpdGggTmVvNGogdmVyc2lvbiAzLjQsIHdoaWNoIHJlYWNoZWQgZW5kIG9mIGxpZmUgaW4gTWFyY2ggMjAyMC4gR3JlbWxpbiBjYW5ub3QgYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50IGZvciBvdGhlciBncmFwaHMgdGhhdCBzdXBwb3J0IHRyYW5zYWN0aW9ucy4KIAogPT09IE1vdGl2YXRpb24KZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL2Rldi9pby9ncmFwaGJpbmFyeS5hc2NpaWRvYyBiL2RvY3Mvc3JjL2Rldi9pby9ncmFwaGJpbmFyeS5hc2NpaWRvYwppbmRleCBlMDc2YWM3Li4zYjYxMGE0IDEwMDY0NAotLS0gYS9kb2NzL3NyYy9kZXYvaW8vZ3JhcGhiaW5hcnkuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvZGV2L2lvL2dyYXBoYmluYXJ5LmFzY2lpZG9jCkBAIC0zNSw4ICszNSwxMCBAQAogCiAqIGB7dHlwZV9jb2RlfWAgaXMgYSBzaW5nbGUgdW5zaWduZWQgYnl0ZSByZXByZXNlbnRpbmcgdGhlIHR5cGUgbnVtYmVyLgogKiBge3R5cGVfaW5mb31gIGlzIGFuIG9wdGlvbmFsIHNlcXVlbmNlIG9mIGJ5dGVzIHByb3ZpZGluZyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSB0eXBlIHJlcHJlc2VudGVkLiBUaGlzIGlzCi1zcGVjaWFsbHkgdXNlZnVsIGZvciByZXByZXNlbnRpbmcgY29tcGxleCBhbmQgY3VzdG9tIHR5cGVzLgotKiBge3ZhbHVlX2ZsYWd9YCBpcyBhIHNpbmdsZSBieXRlIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsdWUuIEZsYWdzIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorZXNwZWNpYWxseSB1c2VmdWwgZm9yIHJlcHJlc2VudGluZyBjb21wbGV4IGFuZCBjdXN0b20gdHlwZXMuCisqIGB7dmFsdWVfZmxhZ31gIGlzIGEgc2luZ2xlIGJ5dGUgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YWx1ZS4gRWFjaCB0eXBlIG1heSBoYXZlIGl0cyBvd24gc3BlY2lmaWMgZmxhZ3Mgc28KK3NlZSBlYWNoIHR5cGUgZm9yIG1vcmUgZGV0YWlscy4gR2VuZXJhbGx5LCBmbGFncyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoKKyoqIGAweDAwYCBUaGUgdmFsdWUgaXMgYG5vbi1udWxsYCwgd2hpY2ggbWVhbnMgaXQgaXMgZm9sbG93ZWQgYnkgYSBge3ZhbHVlfWAuCiAqKiBgMHgwMWAgVGhlIHZhbHVlIGlzIGBudWxsYC4gV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBubyBieXRlcyBmb3IgYHt2YWx1ZX1gIHdpbGwgYmUgcHJvdmlkZWQuCiAqIGB7dmFsdWV9YCBpcyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHdoaWNoIGNvbnRlbnQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgdHlwZS4KIApAQCAtNDUsMTMgKzQ3LDk5IEBACiBRdWljayBleGFtcGxlcywgdXNpbmcgaGV4YWRlY2ltYWwgbm90YXRpb24gdG8gcmVwcmVzZW50IGVhY2ggYnl0ZToKIAogLSBgMDEgMDAgMDAgMDAgMDAgMDFgOiBhIDMyLWJpdCBpbnRlZ2VyIG51bWJlciwgdGhhdCByZXByZXNlbnRzIHRoZSBkZWNpbWFsIG51bWJlciAxLiBJdOKAmXMgY29tcG9zZWQgYnkgdGhlCi10eXBlX2NvZGUgYDB4MDFgLCBhbmQgZW1wdHkgZmxhZyB2YWx1ZSBgMHgwMGAgYW5kIGZvdXIgYnl0ZXMgdG8gZGVzY3JpYmUgdGhlIHZhbHVlLgotLSBgMDEgMDAgMDAgMDAgMDAgZmZgOiBhIDMyLWJpdCBpbnRlZ2VyLCByZXByZXNlbnRpbmcgdGhlIG51bWJlciAyNTYuCit0eXBlX2NvZGUgYDB4MDFgLCBhbmQgbm9uLW51bGwgdmFsdWVfZmxhZyBgMHgwMGAgYW5kIGZvdXIgYnl0ZXMgdG8gZGVzY3JpYmUgdGhlIHZhbHVlLgorLSBgMDEgMDAgMDAgMDAgMDAgZmZgOiBhIDMyLWJpdCBpbnRlZ2VyLCByZXByZXNlbnRpbmcgdGhlIG51bWJlciAyNTUuCiAtIGAwMSAwMWA6IGEgbnVsbCB2YWx1ZSBmb3IgYSAzMi1iaXQgaW50ZWdlci4gSXTigJlzIGNvbXBvc2VkIGJ5IHRoZSB0eXBlX2NvZGUgYDB4MDFgLCBhbmQgYSBudWxsIGZsYWcgdmFsdWUgYDB4MDFgLgotLSBgMDIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDFgOiBhIDY0LWJpdCBpbnRlZ2VyIG51bWJlciAxLiBJdOKAmXMgY29tcG9zZWQgYnkgdGhlIHR5cGVfY29kZSBgMHgwMmAsIGVtcHR5IGZsYWdzIGFuZAorLSBgMDIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDFgOiBhIDY0LWJpdCBpbnRlZ2VyIG51bWJlciAxLiBJdOKAmXMgY29tcG9zZWQgYnkgdGhlIHR5cGVfY29kZSBgMHgwMmAsIG5vbi1udWxsIHZhbHVlX2ZsYWcgYW5kCiBlaWdodCBieXRlcyB0byBkZXNjcmliZSB0aGUgdmFsdWUuCiAKLT09IFZlcnNpb24gMS4wCis9PSBWZXJzaW9uIDQuMAorCis9PT0gQ2hhbmdlcyBmcm9tIFZlcnNpb24gMS4wCisKKz09PT0gUmVtb3ZlZCBUeXBlcworCitUaGUgZm9sbG93aW5nIHR5cGVzIGhhdmUgYmVlbiByZW1vdmVkOgorCistIGBEYXRlYCAoMHgwNCksIGBUaW1lc3RhbXBgICgweDA1KSAtIHJlcGxhY2VkIGJ5IGBEYXRlVGltZWAKKy0gYENsYXNzYCAoMHgwNikKKy0gYEJhcnJpZXJgICgweDEzKSwgYEJpbmRpbmdgICgweDE0KSwgYEJ5dGVjb2RlYCAoMHgxNSksIGBDYXJkaW5hbGl0eWAgKDB4MTYpLCBgQ29sdW1uYCAoMHgxNyksIGBPcGVyYXRvcmAgKDB4MTkpLCAKK2BPcmRlcmAgKDB4MWEpLCBgUGlja2AgKDB4MWIpLCBgUG9wYCAoMHgxYyksIGBMYW1iZGFgICgweDFkKSwgYFBgICgweDFlKSwgYFNjb3BlYCAoMHgxZiksIGBUcmF2ZXJzZXJgICgweDIxKSwgYFRleHRQYCAKKygweDI4KSwgYFRyYXZlcnNhbFN0cmF0ZWd5YCAoMHgyOSksIGBEVGAgKDB4MmYpLCBgR1R5cGVgICgweDMwKQorLSBgQnVsa1NldGAgKDB4MmEpIC0gZnVuY3Rpb25hbGl0eSBtZXJnZWQgaW50byBgTGlzdGAKKy0gYE1ldHJpY3NgICgweDJjKSwgYFRyYXZlcnNhbE1ldHJpY3NgICgweDJkKQorLSBgQ3VzdG9tYCAoMHgwMCkgLSByZXBsYWNlZCBieSBgQ29tcG9zaXRlUERUYCBhbmQgYFByaW1pdGl2ZVBEVGAKKy0gYEluZXRBZGRyZXNzYCAoMHg4MikKKy0gYEluc3RhbnRgICgweDgzKSwgYExvY2FsRGF0ZWAgKDB4ODQpLCBgTG9jYWxEYXRlVGltZWAgKDB4ODUpLCBgTG9jYWxUaW1lYCAoMHg4NiksIGBNb250aERheWAgKDB4ODcpLCAKK2BPZmZzZXREYXRlVGltZWAgKDB4ODgpLCBgT2Zmc2V0VGltZWAgKDB4ODkpLCBgUGVyaW9kYCAoMHg4YSksIGBZZWFyYCAoMHg4YiksIGBZZWFyTW9udGhgICgweDhjKSwgCitgWm9uZWREYXRlVGltZWAgKDB4OGQpLCBgWm9uZU9mZnNldGAgKDB4OGUpIC0gSmF2YS1zcGVjaWZpYyB0aW1lIHR5cGVzIHJlcGxhY2VkIGJ5IGBEYXRlVGltZWAKKworPT09PSBBZGRlZCBUeXBlcworCistIGBEYXRlVGltZWAgKDB4MDQpIC0gdW5pZmllZCBkYXRlLXRpbWUgcmVwcmVzZW50YXRpb24gd2l0aCB0aW1lem9uZSBvZmZzZXQKKy0gYENvbXBvc2l0ZVBEVGAgKDB4ZjApIC0gcHJvdmlkZXItZGVmaW5lZCBjb21wb3NpdGUgdHlwZSB3aXRoIHR5cGVkIGZpZWxkcworLSBgUHJpbWl0aXZlUERUYCAoMHhmMSkgLSBwcm92aWRlci1kZWZpbmVkIHByaW1pdGl2ZSB0eXBlIHdpdGggc3RyaW5naWZpZWQgdmFsdWUKKy0gYE1hcmtlcmAgKDB4ZmQpIC0gc2VwYXJhdG9yIGJldHdlZW4gcmVzdWx0IGRhdGEgYW5kIHN0YXR1cyBpbiByZXNwb25zZSBtZXNzYWdlcworCis9PT09IE1vZGlmaWVkIFR5cGVzCisKKz09PT09IExpc3QKKworVGhlIHt2YWx1ZV9mbGFnfSBub3cgaW5kaWNhdGVzIHRoZSBmb3JtYXQgdmFyaWFudDoKKworMHgwMDogU3RhbmRhcmQgZm9ybWF0CisweDAxOiBOdWxsCisweDAyOiBCdWxrZWQgZm9ybWF0IHdoZXJlIGVhY2ggaXRlbSBpcyBmb2xsb3dlZCBieSBhIExvbmcgYnVsayBjb3VudAorCitUaGlzIGNoYW5nZSBpbmNvcnBvcmF0ZXMgdGhlIGZ1bmN0aW9uYWxpdHkgcHJldmlvdXNseSBwcm92aWRlZCBieSBCdWxrU2V0LgorCis9PT09PSBNYXAKKworVGhlIHt2YWx1ZV9mbGFnfSBub3cgaW5kaWNhdGVzIG9yZGVyaW5nOgorCisweDAwOiBTdGFuZGFyZCBmb3JtYXQgKG5vIG9yZGVyaW5nIGRlZmluZWQpCisweDAxOiBOdWxsCisweDAyOiBPcmRlcmVkCisKKz09PT09IExhYmVscyBhbmQgUHJvcGVydGllcyBpbiBFZGdlLCBHcmFwaCwgVmVydGV4LCBhbmQgVmVydGV4UHJvcGVydHkKKworVGhlIHtsYWJlbH0gZmllbGQgaXMgbm93IGEgTGlzdCBvZiBTdHJpbmdzIGluc3RlYWQgb2YgYSBTdHJpbmcgdmFsdWUuIEFsc28sIHRoZSB7cHJvcGVydGllc30gZmllbGQgdXNlZCB0byBhbHdheXMgYmUKK251bGwgYnV0IGNhbiBub3cgY29udGFpbiBhIGBMaXN0YCBvZiBwcm9wZXJ0aWVzICh0aGlzIGNoYW5nZSBhY3R1YWxseSBzdGFydGVkIGluIGEgcmV2aXNpb24gdG8gdjEpLgorCis9PT09PSBCeXRlCisKK0NoYW5nZWQgZnJvbSB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VyIHRvIHNpZ25lZCB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLgorCis9PT09PSBCeXRlQnVmZmVyCisKK1JlbmFtZWQgdG8gYEJpbmFyeWAgKDB4MjUpLiBGb3JtYXQgcmVtYWlucyB1bmNoYW5nZWQuCisKKz09PT09IEdyYXBoCisKK1JlbmFtZWQgZnJvbSBUaW5rZXJHcmFwaC4gVHlwZSBjb2RlICgweDEwKSByZW1haW5zIHVuY2hhbmdlZC4gTGFiZWwgZm9ybWF0IGhhcyBjaGFuZ2VkLgorCis9PT09IFJlcXVlc3QgTWVzc2FnZSBDaGFuZ2VzCisKK1RoZSByZXF1ZXN0IG1lc3NhZ2UgZm9ybWF0IGhhcyBiZWVuIHVwZGF0ZWQ6CisKKy0gVmVyc2lvbiAxLjA6IHt2ZXJzaW9ufXtyZXF1ZXN0X2lkfXtvcH17cHJvY2Vzc29yfXthcmdzfQorLSBWZXJzaW9uIDQuMDoge3ZlcnNpb259e2ZpZWxkc317Z3JlbWxpbn0KKworYE9wUHJvY2Vzc29yc2AgaGF2ZSBiZWVuIHJlbW92ZWQgc28ge29wfXtwcm9jZXNzb3J9IHdlcmUgcmVtb3ZlZCBhbmQge2FyZ3N9IGlzIGVzc2VudGlhbGx5IHJlbmFtZWQgdG8ge2ZpZWxkc30uIFRoZQordmVyc2lvbiBieXRlIGNoYW5nZWQgZnJvbSBgMHg4MWAgdG8gYDB4ODRgLgorCis9PT09IFJlc3BvbnNlIE1lc3NhZ2UgQ2hhbmdlcworCitUaGUgcmVzcG9uc2UgbWVzc2FnZSBmb3JtYXQgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkOgorCistIFZlcnNpb24gMS4wOiB7dmVyc2lvbn17cmVxdWVzdF9pZH17c3RhdHVzX2NvZGV9e3N0YXR1c19tZXNzYWdlfXtzdGF0dXNfYXR0cmlidXRlc317cmVzdWx0X21ldGF9e3Jlc3VsdF9kYXRhfQorLSBWZXJzaW9uIDQuMDoge3ZlcnNpb259e2J1bGtlZH17cmVzdWx0X2RhdGF9e21hcmtlcn17c3RhdHVzX2NvZGV9e3N0YXR1c19tZXNzYWdlfXtleGNlcHRpb259CisKK1RoaXMgbmV3IGZvcm1hdCBleHBlY3RzIGFsbCB0aGUgcmVzdWx0cyBpbiBvbmUgUmVzcG9uc2VNZXNzYWdlIChsaWtlIGl0IGlzIGluIEhUVFApLgorCistIEFkZGVkIHtidWxrZWR9IGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciByZXN1bHQgZGF0YSBjb250YWlucyBidWxrIGNvdW50cyBzaW5jZSB0aGVyZSBhcmUgbm8gVHJhdmVyc2VyIHNlcmlhbGl6ZXJzCistIEFkZGVkIHttYXJrZXJ9IHRvIHNlcGFyYXRlIHJlc3VsdCBkYXRhIGZyb20gc3RhdHVzIGluZm9ybWF0aW9uCistIFZlcnNpb24gYnl0ZSBjaGFuZ2VkIGZyb20gMHg4MSB0byAweDg0CiAKID09PSBGb3J3YXJkIENvbXBhdGliaWxpdHkKIApAQCAtNjEsMTQgKzE0OSwxMCBAQAogCiA9PT0gRGF0YSBUeXBlIENvZGVzCiAKLT09PT0gQ29yZSBEYXRhIFR5cGVzCi0KIC0gYDB4MDFgOiBJbnQKIC0gYDB4MDJgOiBMb25nCiAtIGAweDAzYDogU3RyaW5nCi0tIGAweDA0YDogRGF0ZQotLSBgMHgwNWA6IFRpbWVzdGFtcAotLSBgMHgwNmA6IENsYXNzCistIGAweDA0YDogRGF0ZVRpbWUKIC0gYDB4MDdgOiBEb3VibGUKIC0gYDB4MDhgOiBGbG9hdAogLSBgMHgwOWA6IExpc3QKQEAgLTc4LDYwICsxNjIsMjcgQEAKIC0gYDB4MGRgOiBFZGdlCiAtIGAweDBlYDogUGF0aAogLSBgMHgwZmA6IFByb3BlcnR5Ci0tIGAweDEwYDogVGlua2VyR3JhcGgKKy0gYDB4MTBgOiBHcmFwaAogLSBgMHgxMWA6IFZlcnRleAogLSBgMHgxMmA6IFZlcnRleFByb3BlcnR5Ci0tIGAweDEzYDogQmFycmllcgotLSBgMHgxNGA6IEJpbmRpbmcKLS0gYDB4MTVgOiBCeXRlY29kZQotLSBgMHgxNmA6IENhcmRpbmFsaXR5Ci0tIGAweDE3YDogQ29sdW1uCiAtIGAweDE4YDogRGlyZWN0aW9uCi0tIGAweDE5YDogT3BlcmF0b3IKLS0gYDB4MWFgOiBPcmRlcgotLSBgMHgxYmA6IFBpY2sKLS0gYDB4MWNgOiBQb3AKLS0gYDB4MWRgOiBMYW1iZGEKLS0gYDB4MWVgOiBQCi0tIGAweDFmYDogU2NvcGUKIC0gYDB4MjBgOiBUCi0tIGAweDIxYDogVHJhdmVyc2VyCiAtIGAweDIyYDogQmlnRGVjaW1hbAogLSBgMHgyM2A6IEJpZ0ludGVnZXIKIC0gYDB4MjRgOiBCeXRlCi0tIGAweDI1YDogQnl0ZUJ1ZmZlcgorLSBgMHgyNWA6IEJpbmFyeQogLSBgMHgyNmA6IFNob3J0CiAtIGAweDI3YDogQm9vbGVhbgotLSBgMHgyOGA6IFRleHRQCi0tIGAweDI5YDogVHJhdmVyc2FsU3RyYXRlZ3kKLS0gYDB4MmFgOiBCdWxrU2V0CiAtIGAweDJiYDogVHJlZQotLSBgMHgyY2A6IE1ldHJpY3MKLS0gYDB4MmRgOiBUcmF2ZXJzYWxNZXRyaWNzCiAtIGAweDJlYDogTWVyZ2UKLS0gYDB4MmZgOiBEVAorLSBgMHhmMGA6IENvbXBvc2l0ZVBEVAorLSBgMHhmMWA6IFByaW1pdGl2ZVBEVAorLSBgMHhmZGA6IE1hcmtlcgogLSBgMHhmZWA6IFVuc3BlY2lmaWVkIG51bGwgb2JqZWN0Ci0tIGAweDAwYDogQ3VzdG9tCi0KLT09PT0gRXh0ZW5kZWQgVHlwZXMKLQogLSBgMHg4MGA6IENoYXIKIC0gYDB4ODFgOiBEdXJhdGlvbgotLSBgMHg4MmA6IEluZXRBZGRyZXNzCi0tIGAweDgzYDogSW5zdGFudAotLSBgMHg4NGA6IExvY2FsRGF0ZQotLSBgMHg4NWA6IExvY2FsRGF0ZVRpbWUKLS0gYDB4ODZgOiBMb2NhbFRpbWUKLS0gYDB4ODdgOiBNb250aERheQotLSBgMHg4OGA6IE9mZnNldERhdGVUaW1lCi0tIGAweDg5YDogT2Zmc2V0VGltZQotLSBgMHg4YWA6IFBlcmlvZAotLSBgMHg4YmA6IFllYXIKLS0gYDB4OGNgOiBZZWFyTW9udGgKLS0gYDB4OGRgOiBab25lZERhdGVUaW1lCi0tIGAweDhlYDogWm9uZU9mZnNldAogCi09PT0gTnVsbCBoYW5kbGluZworPT09IE51bGwgSGFuZGxpbmcKIAogVGhlIHNlcmlhbGl6YXRpb24gZm9ybWF0IGRlZmluZXMgdHdvIHdheXMgdG8gcmVwcmVzZW50IG51bGwgdmFsdWVzOgogCkBAIC0xNTMsNyArMjA0LDcgQEAKIEV4YW1wbGUgdmFsdWVzOgogCiAtIGAwMCAwMCAwMCAwMWA6IDMyLWJpdCBpbnRlZ2VyIG51bWJlciAxLgotLSBgMDAgMDAgMDEgMDFgOiAzMi1iaXQgaW50ZWdlciBudW1iZXIgMjU2LgorLSBgMDAgMDAgMDEgMDFgOiAzMi1iaXQgaW50ZWdlciBudW1iZXIgMjU3LgogLSBgZmYgZmYgZmYgZmZgOiAzMi1iaXQgaW50ZWdlciBudW1iZXIgLTEuCiAtIGBmZiBmZiBmZiBmZWA6IDMyLWJpdCBpbnRlZ2VyIG51bWJlciAtMi4KIApAQCAtMTYxLDcgKzIxMiw3IEBACiAKIEZvcm1hdDogOC1ieXRlIHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlci4KIAotRXhhbXBsZSB2YWx1ZXMKK0V4YW1wbGUgdmFsdWVzOgogCiAtIGAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMWA6IDY0LWJpdCBpbnRlZ2VyIG51bWJlciAxLgogLSBgZmYgZmYgZmYgZmYgZmYgZmYgZmYgZmVgOiA2NC1iaXQgaW50ZWdlciBudW1iZXIgLTIuCkBAIC0xNzIsMzggKzIyMywzNSBAQAogCiBXaGVyZToKIAotLSBge2xlbmd0aH1gIGlzIGFuIGBJbnRgIGRlc2NyaWJpbmcgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSB0ZXh0LiBMZW5ndGggaXMgYSBwb3NpdGl2ZSBudW1iZXIgb3IgemVybyB0byByZXByZXNlbnQKKy0gYHtsZW5ndGh9YCBpcyBhbiBgSW50IHt2YWx1ZX1gIGRlc2NyaWJpbmcgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSB0ZXh0LiBMZW5ndGggaXMgYSBwb3NpdGl2ZSBudW1iZXIgb3IgemVybyB0byByZXByZXNlbnQKIHRoZSBlbXB0eSBzdHJpbmcuCiAtIGB7dGV4dF92YWx1ZX1gIGlzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgcmVwcmVzZW50aW5nIHRoZSBzdHJpbmcgdmFsdWUgaW4gVVRGOCBlbmNvZGluZy4KIAotRXhhbXBsZSB2YWx1ZXMKK0V4YW1wbGUgdmFsdWVzOgogCiAtIGAwMCAwMCAwMCAwMyA2MSA2MiA2M2A6IHRoZSBzdHJpbmcgJ2FiYycuCiAtIGAwMCAwMCAwMCAwNCA2MSA2MiA2MyA2NGA6IHRoZSBzdHJpbmcgJ2FiY2QnLgogLSBgMDAgMDAgMDAgMDBgOiB0aGUgZW1wdHkgc3RyaW5nICcnLgogCi09PT09IERhdGUKKz09PT0gRGF0ZVRpbWUKIAotRm9ybWF0OiBBbiA4LWJ5dGUgdHdvJ3MgY29tcGxlbWVudCBzaWduZWQgaW50ZWdlciByZXByZXNlbnRpbmcgYSBtaWxsaXNlY29uZC1wcmVjaXNpb24gb2Zmc2V0IGZyb20gdGhlIHVuaXggZXBvY2guCitBIGRhdGUtdGltZSB3aXRoIGFuIG9mZnNldCBmcm9tIFVUQy9HcmVlbndpY2ggaW4gdGhlIElTTy04NjAxIGNhbGVuZGFyIHN5c3RlbSwgc3VjaCBhcyAyMDA3LTEyLTAzVDEwOjE1OjMwKzAxOjAwLgogCi1FeGFtcGxlIHZhbHVlcworRm9ybWF0OiBge3llYXJ9e21vbnRofXtkYXl9e3RpbWV9e29mZnNldH1gCiAKLS0gYDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwYDogVGhlIG1vbWVudCBpbiB0aW1lIDE5NzAtMDEtMDFUMDA6MDA6MDAuMDAwWi4KLS0gYGZmIGZmIGZmIGZmIGZmIGZmIGZmIGZmYDogVGhlIG1vbWVudCBpbiB0aW1lIDE5NjktMTItMzFUMjM6NTk6NTkuOTk5Wi4KK1doZXJlOgogCi09PT09IFRpbWVzdGFtcAotCi1Gb3JtYXQ6IFRoZSBzYW1lIGFzIGBEYXRlYC4KLQotPT09PSBDbGFzcwotCi1Gb3JtYXQ6IEEgYFN0cmluZ2AgY29udGFpbmluZyB0aGUgZnFjbi4KKy0gYHt5ZWFyfWAgaXMgYW4gYEludCB7dmFsdWV9YCBmcm9tIC05OTksOTk5LDk5OSB0byA5OTksOTk5LDk5OS4KKy0gYHttb250aH1gIGlzIGEgYEJ5dGUge3ZhbHVlfWAgdG8gcmVwcmVzZW50IHRoZSBtb250aCwgZnJvbSAxIChKYW51YXJ5KSB0byAxMiAoRGVjZW1iZXIpCistIGB7ZGF5fWAgaXMgYSBgQnl0ZSB7dmFsdWV9YCBmcm9tIDEgdG8gMzEuCistIGB7dGltZX1gIGlzIGEgYExvbmcge3ZhbHVlfWAgdG8gcmVwcmVzZW50IG5hbm9zZWNvbmRzIHNpbmNlIG1pZG5pZ2h0LCBmcm9tIDAgdG8gODYzOTk5OTk5OTk5OTkKKy0gYHtvZmZzZXR9YCBpcyBhbiBgSW50IHt2YWx1ZX1gIHRvIHJlcHJlc2VudCB0b3RhbCB6b25lIG9mZnNldCBpbiBzZWNvbmRzLCBmcm9tIC02NDgwMCAoLTE4OjAwKSB0byA2NDgwMCAoKzE4OjAwKS4KIAogPT09PSBEb3VibGUKIAogRm9ybWF0OiA4IGJ5dGVzIHJlcHJlc2VudGluZyBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludCBmb3JtYXQuCiAKLUV4YW1wbGUgdmFsdWVzCitFeGFtcGxlIHZhbHVlczoKIAogLSBgM2YgZjAgMDAgMDAgMDAgMDAgMDAgMDBgOiBEb3VibGUgMQogLSBgM2YgNzAgMDAgMDAgMDAgMDAgMDAgMDBgOiBEb3VibGUgMC4wMDM5MDYyNQpAQCAtMjEzLDM5ICsyNjEsNTUgQEAKIAogRm9ybWF0OiA0IGJ5dGVzIHJlcHJlc2VudGluZyBJRUVFIDc1NCBzaW5nbGUtcHJlY2lzaW9uIGJpbmFyeSBmbG9hdGluZy1wb2ludCBmb3JtYXQuCiAKLUV4YW1wbGUgdmFsdWVzCitFeGFtcGxlIHZhbHVlczoKIAogLSBgM2YgODAgMDAgMDBgOiBGbG9hdCAxCiAtIGAzZSBjMCAwMCAwMGA6IEZsb2F0IDAuMzc1CiAKID09PT0gTGlzdAogCi1BbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2YgaXRlbXMuCitBbiBvcmRlcmVkIGNvbGxlY3Rpb24gb2YgaXRlbXMuIFRoZSBmb3JtYXQgZGVwZW5kcyBvbiB0aGUge3ZhbHVlX2ZsYWd9LgogCi1Gb3JtYXQ6IGB7bGVuZ3RofXtpdGVtXzB9Li4ue2l0ZW1fbn1gCitGb3JtYXQgKHZhbHVlX2ZsYWc9MHgwMCk6IGB7bGVuZ3RofXtpdGVtXzB9Li4ue2l0ZW1fbn1gCiAKIFdoZXJlOgogCi0tIGB7bGVuZ3RofWAgaXMgYW4gYEludGAgZGVzY3JpYmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2xsZWN0aW9uLgotLSBge2l0ZW1fMH0uLi57aXRlbV9ufWAgYXJlIHRoZSBpdGVtcyBvZiB0aGUgbGlzdC4gYHtpdGVtX2l9YCBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZgorLSBge2xlbmd0aH1gIGlzIGFuIGBJbnQge3ZhbHVlfWAgZGVzY3JpYmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2xsZWN0aW9uLgorLSBge2l0ZW1fMH0uLi57aXRlbV9ufWAgYXJlIHRoZSBpdGVtcyBvZiB0aGUgbGlzdC4gYHtpdGVtX2l9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZgogYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KIAordmFsdWVfZmxhZz0weDAxIHJlcHJlc2VudHMgbnVsbC4KKworRm9ybWF0ICh2YWx1ZV9mbGFnPTB4MDIpOiBge2xlbmd0aH17aXRlbV8wfXtidWxrXzB9Li4ue2l0ZW1fbn17YnVsa19ufWAKKworV2hlcmU6CisKKy0gYHtsZW5ndGh9YCBpcyBhbiBgSW50IHt2YWx1ZX1gIGRlc2NyaWJpbmcgdGhlIGxlbmd0aCBvZiB0aGUgY29sbGVjdGlvbi4KKy0gYHtpdGVtXzB9Li4ue2l0ZW1fbn1gIGFyZSB0aGUgaXRlbXMgb2YgdGhlIGxpc3QuIGB7aXRlbV9pfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YKK2B7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCistIGB7YnVsa18wfS4uLntidWxrX259YCBhcmUgYExvbmcge3ZhbHVlfXNgIHRoYXQgcmVwcmVzZW50IGhvdyBtYW55IHRpbWVzIHRoYXQgaXRlbSBzaG91bGQgYmUgcmVwZWF0ZWQgaW4gdGhlIGV4cGFuZGVkIGxpc3QuCisKID09PT0gU2V0CiAKIEEgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIG5vIGR1cGxpY2F0ZSBlbGVtZW50cy4KIAotRm9ybWF0OiBTYW1lIGFzIGBMaXN0YC4KK0Zvcm1hdDogU2FtZSBhcyBgTGlzdGAgZm9yIGAweDAwYCBhbmQgYDB4MDFgIHt2YWx1ZV9mbGFnfSBmb3JtYXRzLiBObyBzdXBwb3J0IGZvciBidWxrIChgMHgwMmApLgogCiA9PT09IE1hcAogCi1BIGRpY3Rpb25hcnkgb2Yga2V5cyB0byB2YWx1ZXMuCitBIGRpY3Rpb25hcnkgb2Yga2V5cyB0byB2YWx1ZXMuIEJvdGgga2V5cyBhbmQgdmFsdWVzIGNhbiBiZSBhbnkgdHlwZSBzcGVjaWZpZWQgaW4gdGhpcyBkb2N1bWVudC4KKworVGhlIHt2YWx1ZV9mbGFnfSBhcmUgZGVmaW5lZCBhczoKKy0gYDB4MDBgIHVub3JkZXJlZAorLSBgMHgwMWAgbnVsbAorLSBgMHgwMmAgb3JkZXJlZAogCiBGb3JtYXQ6IGB7bGVuZ3RofXtpdGVtXzB9Li4ue2l0ZW1fbn1gCiAKIFdoZXJlOgogCi0tIGB7bGVuZ3RofWAgaXMgYW4gYEludGAgZGVzY3JpYmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXAuCi0tIGB7aXRlbV8wfS4uLntpdGVtX259YCBhcmUgdGhlIGl0ZW1zIG9mIHRoZSBtYXAuIGB7aXRlbV9pfWAgaXMgc2VxdWVuY2Ugb2YgMiBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWVzIG9uZQorLSBge2xlbmd0aH1gIGlzIGFuIGBJbnQge3ZhbHVlfWAgZGVzY3JpYmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXAuCistIGB7aXRlbV8wfS4uLntpdGVtX259YCBhcmUgdGhlIGl0ZW1zIG9mIHRoZSBtYXAuIGB7aXRlbV9pfWAgaXMgc2VxdWVuY2Ugb2YgMiBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWVzIG9uZQogcmVwcmVzZW50aW5nIHRoZSBrZXkgYW5kIHRoZSBmb2xsb3dpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSwgZWFjaCBjb21wb3NlZCBvZgogYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KIApAQCAtMjY1LDE2ICszMjksMzAgQEAKIAogV2hlcmU6CiAKLS0gYHtpZH1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0tIGB7bGFiZWx9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge2luVklkfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KLS0gYHtpblZMYWJlbH1gIGlzIGEgYFN0cmluZ2AgdmFsdWUuCi0tIGB7b3V0VklkfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KLS0gYHtvdXRWTGFiZWx9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge3BhcmVudH1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAgd2hpY2ggY29udGFpbnMKKy0gYHtpZH1gIGlzIGEgZnVsbHktcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCistIGB7bGFiZWx9YCBpcyBhIGBMaXN0IHt2YWx1ZX1gLgorLSBge2luVklkfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KKy0gYHtpblZMYWJlbH1gIGlzIGEgYExpc3Qge3ZhbHVlfWAuCistIGB7b3V0VklkfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KKy0gYHtvdXRWTGFiZWx9YCBpcyBhIGBMaXN0IHt2YWx1ZX1gLgorLSBge3BhcmVudH1gIGlzIGEgZnVsbHktcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAgd2hpY2ggY29udGFpbnMKIHRoZSBwYXJlbnQgYFZlcnRleGAuIE5vdGUgdGhhdCBhcyBUaW5rZXJQb3AgY3VycmVudGx5IHNlbmQgInJlZmVyZW5jZXMiIG9ubHksIHRoaXMgdmFsdWUgd2lsbCBhbHdheXMgYmUgYG51bGxgLgotLSBge3Byb3BlcnRpZXN9YCBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gIHdoaWNoIGNvbnRhaW5zCi10aGUgcHJvcGVydGllcyBmb3IgdGhlIGVkZ2UuCistIGB7cHJvcGVydGllc31gIGlzIGEgZnVsbHktcXVhbGlmaWVkIGBMaXN0YCBvZiBgUHJvcGVydHlgIG9iamVjdHMuCisKK0V4YW1wbGUgdmFsdWVzOgorCitbc291cmNlLHRleHRdCistLS0tCiswMSAwMCAgMDAgMDAgMDAgMGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkIGlzIDEzCiswMCAwMCAwMCAwMSAgMDMgMDAgIDAwIDAwIDAwIDA4ICA2NCA2NSA3NiA2NSA2YyA2ZiA3MCA3MyAgICAgIGxhYmVsIGlzIGEgc2l6ZSAxIGxpc3Qgd2l0aCBzdHJpbmcgJ2RldmVsb3BzJworMDEgMDAgIDAwIDAwIDAwIDBhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblZJZCBpcyAxMAorMDAgMDAgMDAgMDEgIDAzIDAwICAwMCAwMCAwMCAwOCAgNzMgNmYgNjYgNzQgNzcgNjEgNzIgNjUgICAgICBpblZMYWJlbCBpcyBhIHNpemUgMSBsaXN0IHdpdGggc3RyaW5nICdzb2Z0d2FyZScKKzAxIDAwICAwMCAwMCAwMCAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0VklkIGlzIDEKKzAwIDAwIDAwIDAxICAwMyAwMCAgMDAgMDAgMDAgMDYgIDcwIDY1IDcyIDczIDZmIDZlICAgICAgICAgICAgb3V0VkxhYmVsIGlzIGEgc2l6ZSAxIGxpc3Qgd2l0aCBzdHJpbmcgJ3BlcnNvbicKK2ZlIDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50IGlzIGFsd2F5cyBudWxsCiswOSAwMCAgMDAgMDAgMDAgMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgaXMgYSBzaXplIDEgbGlzdAorMGYgMDAgMDAgMDAgMDAgMDUgIDczIDY5IDZlIDYzIDY1ICAwMSAwMCAwMCAwMCAwNyBkOSAgZmUgMDEgICBwcm9wZXJ0eSB3aXRoIGtleSAnc2luY2UnIGFuZCB2YWx1ZSAyMDA5IGFuZCBudWxsIHBhcmVudAorLS0tLQogCiA9PT09IFBhdGgKIApAQCAtMjgyLDggKzM2MCw4IEBACiAKIFdoZXJlOgogCi0tIGB7bGFiZWxzfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgYExpc3RgIGluIHdoaWNoIGVhY2ggaXRlbSBpcyBhIGZ1bGx5IHF1YWxpZmllZCBgU2V0YCBvZiBgU3RyaW5nYC4KLS0gYHtvYmplY3RzfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgYExpc3RgIG9mIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZXMuCistIGB7bGFiZWxzfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgYExpc3RgIGluIHdoaWNoIGVhY2ggaXRlbSBpcyBhIGZ1bGx5LXF1YWxpZmllZCBgU2V0YCBvZiBgU3RyaW5nYC4KKy0gYHtvYmplY3RzfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgYExpc3RgIG9mIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZXMuCiAKID09PT0gUHJvcGVydHkKIApAQCAtMjkxLDQ2ICszNjksNDYgQEAKIAogV2hlcmU6CiAKLS0gYHtrZXl9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge3ZhbHVlfWAgIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0tIGB7cGFyZW50fWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YCB3aGljaCBpcyBlaXRoZXIKKy0gYHtrZXl9YCBpcyBhIGBTdHJpbmcge3ZhbHVlfWAuCistIGB7dmFsdWV9YCAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KKy0gYHtwYXJlbnR9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gIHdoaWNoIGlzIGVpdGhlcgogYW4gYEVkZ2VgIG9yIGBWZXJ0ZXhQcm9wZXJ0eWAuIE5vdGUgdGhhdCBhcyBUaW5rZXJQb3AgY3VycmVudGx5IHNlbmRzICJyZWZlcmVuY2VzIiBvbmx5IHRoaXMgdmFsdWUgd2lsbCBhbHdheXMgYmUKIGBudWxsYC4KIAogPT09PSBHcmFwaAogCiBBIGNvbGxlY3Rpb24gb2YgdmVydGljZXMgYW5kIGVkZ2VzLiBOb3RlIHRoYXQgd2hpbGUgc2ltaWxhciB0aGUgdmVydGV4L2VkZ2UgZm9ybWF0cyBoZXJlIGhvbGQgc29tZSBkaWZmZXJlbmNlcyBhcwotY29tcGFyZWQgdG8gdGhlIGBWZXJ0ZXhgIGFuZCBgRWRnZWAgZm9ybWF0cyB1c2VkIGZvciBzdGFuZGFyZCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaWF0aW9uIG9mIGEgc2luZ2xlIGdyYXBoIGVsZW1lbnQuCitjb21wYXJlZCB0byB0aGUgYFZlcnRleGAgYW5kIGBFZGdlYCBmb3JtYXRzIHVzZWQgZm9yIHN0YW5kYXJkIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG9mIGEgc2luZ2xlIGdyYXBoIGVsZW1lbnQuCiAKIEZvcm1hdDogYHt2bGVuZ3RofXt2ZXJ0ZXhfMH0uLi57dmVydGV4X259e2VsZW5ndGh9e2VkZ2VfMH0uLi57ZWRnZV9ufWAKIAogV2hlcmU6CiAKLS0gYHt2bGVuZ3RofWAgaXMgYW4gYEludGAgZGVzY3JpYmluZyB0aGUgbnVtYmVyIG9mIHZlcnRpY2VzLgorLSBge3ZsZW5ndGh9YCBpcyBhbiBgSW50IHt2YWx1ZX1gIGRlc2NyaWJpbmcgdGhlIG51bWJlciBvZiB2ZXJ0aWNlcy4KIC0gYHt2ZXJ0ZXhfMH0uLi57dmVydGV4X259YCBhcmUgdmVydGljZXMgYXMgZGVzY3JpYmVkIGJlbG93LgotLSBge2VsZW5ndGh9YCBpcyBhbiBgSW50YCBkZXNjcmliaW5nIHRoZSBudW1iZXIgb2YgZWRnZXMuCistIGB7ZWxlbmd0aH1gIGlzIGFuIGBJbnQge3ZhbHVlfWAgZGVzY3JpYmluZyB0aGUgbnVtYmVyIG9mIGVkZ2VzLgogLSBge2VkZ2VfMH0uLi57ZWRnZV9ufWAgYXJlIGVkZ2VzIGFzIGRlc2NyaWJlZCBiZWxvdy4KIAogVmVydGV4IEZvcm1hdDogYHtpZH17bGFiZWx9e3BsZW5ndGh9e3Byb3BlcnR5XzB9Li4ue3Byb3BlcnR5X259YAogCi0tIGB7aWR9YCBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gLgotLSBge2xhYmVsfWAgaXMgYSBgU3RyaW5nYCB2YWx1ZS4KLS0gYHtwbGVuZ3RofWAgaXMgYW4gYEludGAgZGVzY3JpYmluZyB0aGUgbnVtYmVyIG9mIHByb3BlcnRpZXMgb24gdGhlIHZlcnRleC4KLS0gYHtwcm9wZXJ0eV8wfS4uLntwcm9wZXJ0eV9ufWAgYXJlIHRoZSB2ZXJ0ZXggcHJvcGVydGllcyBjb25zaXN0aW5nIG9mIGB7aWR9e2xhYmVsfXt2YWx1ZX17cGFyZW50fXtwcm9wZXJ0aWVzfWAgYXMKLWRlZmluZWQgaW4gYFZlcnRleFByb3BlcnR5YCB3aGVyZSB0aGUgYHtwYXJlbnR9YCBpcyBhbHdheXMgYG51bGxgIGFuZCBge3Byb3BlcnRpZXN9YCBpcyBhIGBMaXN0YCBvZiBgUHJvcGVydHlgIG9iamVjdHMuCistIGB7aWR9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gLgorLSBge2xhYmVsfWAgaXMgYSBgTGlzdCB7dmFsdWV9YC4KKy0gYHtwbGVuZ3RofWAgaXMgYW4gYEludCB7dmFsdWV9YCBkZXNjcmliaW5nIHRoZSBudW1iZXIgb2YgcHJvcGVydGllcyBvbiB0aGUgdmVydGV4LgorLSBge3Byb3BlcnR5XzB9Li4ue3Byb3BlcnR5X259YCBhcmUgdGhlIHZlcnRleCBwcm9wZXJ0aWVzIGNvbnNpc3Rpbmcgb2YgYHtpZH17bGFiZWx9e3ZhbHVlfXtwYXJlbnR9e3Byb3BlcnRpZXN9YCB3aGVyZQordGhlIGB7cGFyZW50fWAgaXMgYWx3YXlzIGBudWxsYCBhbmQgYHtwcm9wZXJ0aWVzfWAgaXMgYSBgTGlzdCB7dmFsdWV9YCBvZiBgUHJvcGVydHlgIG9iamVjdHMuCiAKIEVkZ2UgRm9ybWF0OiBge2lkfXtsYWJlbH17aW5WSWR9e2luVkxhYmVsfXtvdXRWSWR9e291dFZMYWJlbH17cGFyZW50fXtwcm9wZXJ0aWVzfWAKIAogV2hlcmU6CiAKLS0gYHtpZH1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0tIGB7bGFiZWx9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge2luVklkfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KKy0gYHtpZH1gIGlzIGEgZnVsbHktcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCistIGB7bGFiZWx9YCBpcyBhIGBMaXN0IHt2YWx1ZX1gLgorLSBge2luVklkfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KIC0gYHtpblZMYWJlbH1gIGlzIGFsd2F5cyBgbnVsbGAuCi0tIGB7b3V0VklkfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KKy0gYHtvdXRWSWR9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gLgogLSBge291dFZMYWJlbH1gIGlzIGFsd2F5cyBgbnVsbGAuCiAtIGB7cGFyZW50fWAgaXMgYWx3YXlzIGBudWxsYC4KLS0gYHtwcm9wZXJ0aWVzfWAgaXMgYSBgTGlzdGAgb2YgYFByb3BlcnR5YCBvYmplY3RzLgorLSBge3Byb3BlcnRpZXN9YCBpcyBhIGBMaXN0IHt2YWx1ZX1gIG9mIGBQcm9wZXJ0eWAgb2JqZWN0cy4KIAogPT09PSBWZXJ0ZXgKIApAQCAtMzM4LDEwICs0MTYsMjQgQEAKIAogV2hlcmU6CiAKLS0gYHtpZH1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0tIGB7bGFiZWx9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge3Byb3BlcnRpZXN9YCBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gIHdoaWNoIGNvbnRhaW5zCi1wcm9wZXJ0aWVzLgorLSBge2lkfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KKy0gYHtsYWJlbH1gIGlzIGEgYExpc3Qge3ZhbHVlfWAuCistIGB7cHJvcGVydGllc31gIGlzIGEgZnVsbHktcXVhbGlmaWVkIGBMaXN0YCBvZiBgVmVydGV4UHJvcGVydHlgIHZhbHVlcy4KKworRXhhbXBsZSB2YWx1ZXM6CisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KKzAxIDAwICAwMCAwMCAwMCAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCBpcyBpbnQgMQorMDAgMDAgMDAgMDEgIDAzIDAwICAwMCAwMCAwMCAwNiAgNzAgNjUgNzIgNzMgNmYgNmUgICAgICAgIGxhYmVsIGlzIHNpemUgMSBsaXN0IHdpdGggc3RyaW5nICdwZXJzb24nCiswOSAwMCAgMDAgMDAgMDAgMDEgIDEyIDAwICAwMiAwMCAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDkgcHJvcGVydGllcyBpcyBhIHNpemUgMSBsaXN0IHdpdGggVmVydGV4UHJvcGVydHkgaWQgOQorMDAgMDAgMDAgMDEgIDAzIDAwICAwMCAwMCAwMCAwOCAgNmMgNmYgNjMgNjEgNzQgNjkgNmYgNmUgIFZlcnRleFByb3BlcnR5IGxhYmVsIGlzIHNpemUgMSBsaXN0IHdpdGggc3RyaW5nICdsb2NhdGlvbicKKzAzIDAwICAwMCAwMCAwMCAwOCAgNzMgNjEgNmUgNzQgNjEgMjAgNjYgNjUgICAgICAgICAgICAgICBWZXJ0ZXhQcm9wZXJ0eSB2YWx1ZSBpcyBzdHJpbmcgJ3NhbnRhIGZlJworZmUgMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleFByb3BlcnR5IHBhcmVudCBpcyBhbHdheXMgbnVsbAorMDkgMDAgIDAwIDAwIDAwIDAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleFByb3BlcnR5IGhhcyBhIHNpemUgMSBsaXN0CiswZiAwMCAgMDAgMDAgMDAgMDkgNzMgNzQgNjEgNzIgNzQgNTQgNjkgNmQgNjUgICAgICAgICAgICAgbWV0YXByb3BlcnR5IHdpdGggc3RyaW5nIGtleSAnc3RhcnRUaW1lJworMDEgMDAgIDAwIDAwIDA3IGQ1ICBmZSAwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleFByb3BlcnR5IG1ldGFwcm9wZXJ0eSB2YWx1ZSBpcyAyMDA1IHdpdGggbnVsbCBwYXJlbnQKKy0tLS0KIAogPT09PSBWZXJ0ZXhQcm9wZXJ0eQogCkBAIC0zNDksMTA3ICs0NDEsNTIgQEAKIAogV2hlcmU6CiAKLS0gYHtpZH1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0tIGB7bGFiZWx9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge3ZhbHVlfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KLS0gYHtwYXJlbnR9YCBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gIHdoaWNoIGNvbnRhaW5zCistIGB7aWR9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gLgorLSBge2xhYmVsfWAgaXMgYSBgTGlzdCB7dmFsdWV9YC4KKy0gYHt2YWx1ZX1gIGlzIGEgZnVsbHktcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCistIGB7cGFyZW50fWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YCB3aGljaCBjb250YWlucwogdGhlIHBhcmVudCBgVmVydGV4YC4gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZCAicmVmZXJlbmNlcyIgb25seSwgdGhpcyB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBgbnVsbGAuCi0tIGB7cHJvcGVydGllc31gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAgd2hpY2ggY29udGFpbnMKLXByb3BlcnRpZXMuCistIGB7cHJvcGVydGllc31gIGlzIGEgZnVsbHktcXVhbGlmaWVkIGBMaXN0YCBvZiBgUHJvcGVydHlgIG9iamVjdHMuCiAKLT09PT0gQmFycmllcgorRXhhbXBsZSB2YWx1ZXM6CiAKLUZvcm1hdDogYSBmdWxseSBxdWFsaWZpZWQgc2luZ2xlIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZW51bSB2YWx1ZS4KLQotPT09PSBCaW5kaW5nCi0KLUZvcm1hdDogYHtrZXl9e3ZhbHVlfWAKLQotV2hlcmU6Ci0KLS0gYHtrZXl9YCBpcyBhIGBTdHJpbmdgIHZhbHVlLgotLSBge3ZhbHVlfWAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KLQotPT09PSBCeXRlY29kZQotCi1Gb3JtYXQ6IGB7c3RlcHNfbGVuZ3RofXtzdGVwXzB9Li4ue3N0ZXBfbn17c291cmNlc19sZW5ndGh9e3NvdXJjZV8wfS4uLntzb3VyY2Vfbn1gCi0KLVdoZXJlOgotCi0qIGB7c3RlcHNfbGVuZ3RofWAgaXMgYW4gYEludGAgdmFsdWUgZGVzY3JpYmluZyB0aGUgYW1vdW50IG9mIHN0ZXBzLgotKiBge3N0ZXBfaX1gIGlzIGNvbXBvc2VkIG9mIGB7bmFtZX17dmFsdWVzX2xlbmd0aH17dmFsdWVfMH0uLi57dmFsdWVfbn1gLCB3aGVyZToKLSoqIGB7bmFtZX1gIGlzIGEgU3RyaW5nLgotKiogYHt2YWx1ZXNfbGVuZ3RofWAgaXMgYW4gYEludGAgZGVzY3JpYmluZyB0aGUgYW1vdW50IHZhbHVlcy4KLSoqIGB7dmFsdWVfaX1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAgZGVzY3JpYmluZyB0aGUgc3RlcCBhcmd1bWVudC4KLSogYHtzb3VyY2VzX2xlbmd0aH1gIGlzIGFuIGBJbnRgIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGFtb3VudCBvZiBzb3VyY2UgaW5zdHJ1Y3Rpb25zLgotKiBge3NvdXJjZV9pfWAgaXMgY29tcG9zZWQgb2YgYHtuYW1lfXt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufWAsIHdoZXJlOgotKiogYHtuYW1lfWAgaXMgYSBgU3RyaW5nYC4KLSoqIGB7dmFsdWVzX2xlbmd0aH1gIGlzIGFuIGBJbnRgIGRlc2NyaWJpbmcgdGhlIGFtb3VudCB2YWx1ZXMuCi0qKiBge3ZhbHVlX2l9YCAgaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2YgYHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9YC4KLQotPT09PSBDYXJkaW5hbGl0eQotCi1Gb3JtYXQ6IGEgZnVsbHkgcXVhbGlmaWVkIHNpbmdsZSBgU3RyaW5nYCByZXByZXNlbnRpbmcgdGhlIGVudW0gdmFsdWUuCi0KLT09PT0gQ29sdW1uCi0KLUZvcm1hdDogYSBmdWxseSBxdWFsaWZpZWQgc2luZ2xlIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZW51bSB2YWx1ZS4KK1tzb3VyY2UsdGV4dF0KKy0tLS0KKzAyIDAwICAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgICAgICAgICAgICAgICBpZCBpcyBMb25nIDAKKzAwIDAwIDAwIDAxICAwMyAwMCAgMDAgMDAgMDAgMDQgIDZlIDYxIDZkIDY1ICBsYWJlbCBpcyBzaXplIDEgbGlzdCB3aXRoIHN0cmluZyAnbmFtZScKKzAzIDAwICAwMCAwMCAwMCAwNSAgNmQgNjEgNzIgNmIgNmYgICAgICAgICAgICB2YWx1ZSBpcyBzdHJpbmcgJ21hcmtvJworZmUgMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCBpcyBhbHdheXMgbnVsbAorMDkgMDAgIDAwIDAwIDAwIDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFwcm9wZXJ0aWVzIGlzIGVtcHR5IGxpc3QKKy0tLS0KIAogPT09PSBEaXJlY3Rpb24KIAotRm9ybWF0OiBhIGZ1bGx5IHF1YWxpZmllZCBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgorRm9ybWF0OiBhIGZ1bGx5LXF1YWxpZmllZCBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgogCi09PT09IE9wZXJhdG9yCitFeGFtcGxlIHZhbHVlczoKIAotRm9ybWF0OiBhIGZ1bGx5IHF1YWxpZmllZCBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgotCi09PT09IE9yZGVyCi0KLUZvcm1hdDogYSBmdWxseSBxdWFsaWZpZWQgc2luZ2xlIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZW51bSB2YWx1ZS4KLQotPT09PSBQaWNrCi0KLUZvcm1hdDogYSBmdWxseSBxdWFsaWZpZWQgc2luZ2xlIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZW51bSB2YWx1ZS4KLQotPT09PSBQb3AKLQotRm9ybWF0OiBhIGZ1bGx5IHF1YWxpZmllZCBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgotCi09PT09IExhbWJkYQotCi1Gb3JtYXQ6IGB7bGFuZ3VhZ2V9e3NjcmlwdH17YXJndW1lbnRzX2xlbmd0aH1gCi1XaGVyZToKLQotLSBge2xhbmd1YWdlfWAgaXMgYSBgU3RyaW5nYC4KLS0gYHtzY3JpcHR9YCBpcyBhIGBTdHJpbmdgLgotLSBge2FyZ3VtZW50c19sZW5ndGh9YCBpcyBhbiBgSW50YC4KLQotPT09PSBQCi0KLUZvcm1hdDogYHtuYW1lfXt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufWAKLQotV2hlcmU6Ci0KLS0gYHtuYW1lfWAgaXMgYSBTdHJpbmcuCi0tIGB7dmFsdWVzX2xlbmd0aH1gIGlzIGFuIGBJbnRgIGRlc2NyaWJpbmcgdGhlIGFtb3VudCB2YWx1ZXMuCi0tIGB7dmFsdWVfaX1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0KLT09PT0gU2NvcGUKLQotRm9ybWF0OiBhIGZ1bGx5IHF1YWxpZmllZCBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgorLSBgMDMgMDAgMDAgMDAgMDAgMDMgNEYgNTUgNTRgOiBPVVQKKy0gYDAzIDAwIDAwIDAwIDAwIDAyIDQ5IDRFYDogSU4KIAogPT09PSBUCiAKLUZvcm1hdDogYSBmdWxseSBxdWFsaWZpZWQgc2luZ2xlIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZW51bSB2YWx1ZS4KK0Zvcm1hdDogYSBmdWxseS1xdWFsaWZpZWQgc2luZ2xlIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgZW51bSB2YWx1ZS4KIAotPT09PSBUcmF2ZXJzZXIKK0V4YW1wbGUgdmFsdWVzOgogCi1Gb3JtYXQ6IGB7YnVsa317dmFsdWV9YAorLSBgMDMgMDAgMDAgMDAgMDAgMDUgNkMgNjEgNjIgNjUgNkNgOiBsYWJlbAorLSBgMDMgMDAgMDAgMDAgMDAgMDIgNjkgNjRgOiBpZAogCi1XaGVyZToKKz09PT0gTWVyZ2UKIAotLSBge2J1bGt9YCBpcyBhIGBMb25nYC4KLS0gYHt2YWx1ZX1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCitGb3JtYXQ6IGEgZnVsbHktcXVhbGlmaWVkIHNpbmdsZSBgU3RyaW5nYCByZXByZXNlbnRpbmcgdGhlIGVudW0gdmFsdWUuCisKK0V4YW1wbGUgdmFsdWVzOgorCistIGAwMyAwMCAwMCAwMCAwMCAwOCA2RiA2RSA0MyA3MiA2NSA2MSA3NCA2NWA6IG9uQ3JlYXRlCistIGAwMyAwMCAwMCAwMCAwMCAwNyA2RiA2RSA0RCA2MSA3NCA2MyA2OGA6IG9uTWF0Y2gKKy0gYDAzIDAwIDAwIDAwIDAwIDA0IDZGIDc1IDc0IDU2YDogb3V0VgorLSBgMDMgMDAgMDAgMDAgMDAgMDMgNjkgNkUgNTZgOiBpblYKIAogPT09PSBCaWdEZWNpbWFsCiAKQEAgLTQ2MCw4ICs0OTcsOCBAQAogCiBXaGVyZToKIAotLSBge3NjYWxlfWAgaXMgYW4gYEludGAuCi0tIGB7dW5zY2FsZWRfdmFsdWV9YCBpcyBhIGBCaWdJbnRlZ2VyYC4KKy0gYHtzY2FsZX1gIGlzIGFuIGBJbnQge3ZhbHVlfWAuCistIGB7dW5zY2FsZWRfdmFsdWV9YCBpcyBhIGBCaWdJbnRlZ2VyIHt2YWx1ZX1gLgogCiA9PT09IEJpZ0ludGVnZXIKIApAQCAtNDcxLDE0ICs1MDgsMTQgQEAKIAogV2hlcmU6CiAKLS0gYHtsZW5ndGh9YCBpcyBhbiBgSW50YC4KKy0gYHtsZW5ndGh9YCBpcyBhbiBgSW50IHt2YWx1ZX1gIGRlc2NyaWJpbmcgdGhlIHNpemUgb2YgYHt2YWx1ZX1gIGluIGJ5dGVzLgogLSBge3ZhbHVlfWAgaXMgdGhlIHR3bydzIGNvbXBsZW1lbnQgb2YgdGhlIGBCaWdJbnRlZ2VyYC4KIAogRXhhbXBsZSB2YWx1ZXMgb2YgdGhlIHR3bydzIGNvbXBsZW1lbnQgYHt2YWx1ZX1gOgogCiAtIGAwMGA6IEludGVnZXIgMC4KIC0gYDAxYDogSW50ZWdlciAxLgotLSBgMTI3YDogSW50ZWdlciA3Zi4KKy0gYDdmYDogSW50ZWdlciAxMjcuCiAtIGAwMCA4MGA6IEludGVnZXIgMTI4LgogLSBgZmZgOiBJbnRlZ2VyIC0xLgogLSBgODBgOiBJbnRlZ2VyIC0xMjguCkBAIC00ODYsMTIxICs1MjMsOTcgQEAKIAogPT09PSBCeXRlCiAKLUFuIDgtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlci4KK0Zvcm1hdDogMS1ieXRlIHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlci4KIAotPT09PSBCeXRlQnVmZmVyCitFeGFtcGxlIHZhbHVlczoKKworLSBgMDFgOiA4LWJpdCBpbnRlZ2VyIG51bWJlciAxLgorLSBgZmZgOiA4LWJpdCBpbnRlZ2VyIG51bWJlciAtMS4KKworPT09PSBCaW5hcnkKIAogRm9ybWF0OiBge2xlbmd0aH17dmFsdWV9YAogCiBXaGVyZToKIAotLSBge2xlbmd0aH1gIGlzIGFuIGBJbnRgIHJlcHJlc2VudGluZyB0aGUgYW1vdW50IG9mIGJ5dGVzIGNvbnRhaW5lZCBpbiB0aGUgdmFsdWUuCistIGB7bGVuZ3RofWAgaXMgYW4gYEludCB7dmFsdWV9YCByZXByZXNlbnRpbmcgdGhlIGFtb3VudCBvZiBieXRlcyBjb250YWluZWQgaW4gdGhlIHZhbHVlLgogLSBge3ZhbHVlfWAgc2VxdWVuY2Ugb2YgYnl0ZXMuCiAKID09PT0gU2hvcnQKIAogRm9ybWF0OiAyLWJ5dGUgdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2VyLgogCitFeGFtcGxlIHZhbHVlczoKKworLSBgMDAgMDFgOiAxNi1iaXQgaW50ZWdlciBudW1iZXIgMS4KKy0gYDAxIDAyYDogMTYtYml0IGludGVnZXIgbnVtYmVyIDI1OC4KKwogPT09PSBCb29sZWFuCiAKIEZvcm1hdDogQSBzaW5nbGUgYnl0ZSBjb250YWluaW5nIHRoZSB2YWx1ZSBgMHgwMWAgd2hlbiBpdCdzIGB0cnVlYCBhbmQgYDBgIG90aGVyd2lzZS4KIAotPT09PSBUZXh0UAotCi1Gb3JtYXQ6IGB7cHJlZGljYXRlfXt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufWAKLQotV2hlcmU6Ci0KLS0gYHtuYW1lfWAgaXMgYSBTdHJpbmcuCi0tIGB7dmFsdWVzX2xlbmd0aH1gIGlzIGFuIGBJbnRgIGRlc2NyaWJpbmcgdGhlIGFtb3VudCB2YWx1ZXMuCi0tIGB7dmFsdWVfaX1gIGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCi0KLT09PT0gVHJhdmVyc2FsU3RyYXRlZ3kKLQotRm9ybWF0OiBge3N0cmF0ZWd5X2NsYXNzfXtjb25maWd1cmF0aW9ufWAKLQotV2hlcmU6Ci0KLS0gYHtzdHJhdGVneV9jbGFzc31gIGlzIGEgYENsYXNzYCB0aGF0IGlzIG9mIHR5cGUgYFRyYXZlcnNhbFN0cmF0ZWd5YC4KLS0gYHtjb25maWd1cmF0aW9ufWAgaXMgYSBgTWFwYCBvZiBkYXRhIHVzZWQgdG8gY29uZmlndXJlIHRoZSBzdHJhdGVneSB0aGF0IHdpbGwgYmUgZ2l2ZW4gdG8gYSBgVHJhdmVyc2FsU3RyYXRlZ3lgIGBjcmVhdGUoQ29uZmlndXJhdGlvbilgIG1ldGhvZC4KLQotPT09PSBCdWxrU2V0Ci0KLUZvcm1hdDogYHtsZW5ndGh9e2l0ZW1fMH0uLi57aXRlbV9ufWAKLQotV2hlcmU6Ci0KLS0gYHtsZW5ndGh9YCBpcyBhbiBgSW50YCBkZXNjcmliaW5nIHRoZSBsZW5ndGggb2YgdGhlIGBCdWxrU2V0YC4KLS0gYHtpdGVtXzB9Li4ue2l0ZW1fbn1gIGFyZSB0aGUgaXRlbXMgb2YgdGhlIGBCdWxrU2V0YC4gYHtpdGVtX2l9YCBpcyBhIHNlcXVlbmNlIG9mIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mCi1ge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gIGZvbGxvd2VkIGJ5IHRoZSAiYnVsayIgd2hpY2ggaXMgYSBgTG9uZ2AgdmFsdWUuCi0KLUlmIHRoZSBpbXBsZW1lbnRpbmcgbGFuZ3VhZ2UgZG9lcyBub3QgaGF2ZSBhIGBCdWxrU2V0YCBvYmplY3QgdG8gZGVzZXJpYWxpemUgaW50bywgdGhpcyBmb3JtYXQgY2FuIGJlIGNvZXJjZWQgdG8gYQotYExpc3RgIGFuZCBzdGlsbCBiZSBjb25zaWRlcmVkIGNvbXBsaWFudCB3aXRoIEdyZW1saW4uIFNpbXBseSAiZXhwYW5kIHRoZSBidWxrIiBieSBhZGRpbmcgdGhlIGl0ZW0gdG8gdGhlIGBMaXN0YCB0aGUKLW51bWJlciBvZiB0aW1lcyBzcGVjaWZpZWQgYnkgdGhlIGJ1bGsuCi0KID09PT0gVHJlZQogCiBGb3JtYXQ6IGB7bGVuZ3RofXtpdGVtXzB9Li4ue2l0ZW1fbn1gCiAKIFdoZXJlOgogCi0tIGB7bGVuZ3RofWAgaXMgYW4gYEludGAgZGVzY3JpYmluZyB0aGUgYW1vdW50IG9mIGl0ZW1zLgorLSBge2xlbmd0aH1gIGlzIGFuIGBJbnQge3ZhbHVlfWAgZGVzY3JpYmluZyB0aGUgYW1vdW50IG9mIGl0ZW1zLgogLSBge2l0ZW1fMH0uLi57aXRlbV9ufWAgYXJlIHRoZSBpdGVtcyBvZiB0aGUgYFRyZWVgLiBge2l0ZW1faX1gIGlzIGNvbXBvc2VkIG9mIGEgYHtrZXl9YCB3aGljaCBpcyBhIGZ1bGx5LXF1YWxpZmllZCB0eXBlZCB2YWx1ZQogZm9sbG93ZWQgYnkgYSBge1RyZWV9YC4KIAotPT09PSBNZXRyaWNzCis9PT09IE1hcmtlcgogCi1Gb3JtYXQ6IGB7aWR9e25hbWV9e2R1cmF0aW9ufXtjb3VudHN9e2Fubm90YXRpb25zfXtuZXN0ZWRfbWV0cmljc31gCitBIDEtYnl0ZSBtYXJrZXIgdXNlZCB0byBzZXBhcmF0ZSB0aGUgZW5kIG9mIHRoZSBkYXRhIGFuZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdGF0dXMgb2YgYSBgUmVzcG9uc2VNZXNzYWdlYC4gVGhpcyBpcworbWFpbmx5IHVzZWQgYnkgbGFuZ3VhZ2UgdmFyaWFudHMgZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KKworRm9ybWF0OiAxLWJ5dGUgaW50ZWdlciB3aXRoIGEgdmFsdWUgb2YgYDAwYC4KKworPT09PSBDb21wb3NpdGVQRFQKKworQSBjb21wb3NpdGUgY3VzdG9tIHR5cGUsIHJlcHJlc2VudGVkIGFzIGEgdHlwZSBhbmQgYSBtYXAgb2YgdmFsdWVzLgorCitGb3JtYXQ6IGB7dHlwZX17ZmllbGRzfWAKIAogV2hlcmU6CiAKLS0gYHtpZH1gIGlzIGEgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBpZGVudGlmaWVyLgotLSBge25hbWV9YCBpcyBhIGBTdHJpbmdgIHJlcHJlc2VudGluZyB0aGUgbmFtZS4KLS0gYHtkdXJhdGlvbn1gIGlzIGEgYExvbmdgIGRlc2NyaWJpbmcgdGhlIGR1cmF0aW9uIGluIG5hbm9zZWNvbmRzLgotLSBge2NvdW50c31gIGlzIGEgYE1hcGAgY29tcG9zZWQgYnkgYFN0cmluZ2Aga2V5cyBhbmQgYExvbmdgIHZhbHVlcy4KLS0gYHthbm5vdGF0aW9uc31gIGlzIGEgYE1hcGAgY29tcG9zZWQgYnkgYFN0cmluZ2Aga2V5cyBhbmQgYSB2YWx1ZSBvZiBhbnkgdHlwZS4KLS0gYHtuZXN0ZWRfbWV0cmljc31gIGlzIGEgYExpc3RgIGNvbXBvc2VkIGJ5IGBNZXRyaWNzYCBpdGVtcy4KKy0gYHt0eXBlfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgYFN0cmluZ2AgY29udGFpbmluZyB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdGV4dCBpZGVudGlmaWVyIG9mIHRoZSBjdXN0b20gdHlwZS4KKy0gYHtmaWVsZHN9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCBgTWFwYCByZXByZXNlbnRpbmcgdGhlIGZpZWxkcyBvZiB0aGUgY29tcG9zaXRlIHR5cGUuCiAKLT09PT0gVHJhdmVyc2FsTWV0cmljcworRXhhbXBsZSB2YWx1ZXM6CiAKLUZvcm1hdDogYHtkdXJhdGlvbn17bWV0cmljc31gCitbc291cmNlLHRleHRdCistLS0tCiswMyAwMCAwMCAwMCAwMCAwNSA1MCA2RiA2OSA2RSA3NDogdGhlIHN0cmluZyAiUG9pbnQiCiswQSAwMCAwMCAwMCAwMCAwMjogYSBsZW5ndGggMiBtYXAKKzAzIDAwIDAwIDAwIDAwIDAxIDc4IDAxIDAwIDAwIDAwIDAwIDAxOiB7eDoxfQorMDMgMDAgMDAgMDAgMDAgMDEgNzkgMDEgMDAgMDAgMDAgMDAgMDI6IHt5OjJ9CistLS0tCisKKz09PT0gUHJpbWl0aXZlUERUCisKK0EgcHJpbWl0aXZlIGN1c3RvbSB0eXBlLCByZXByZXNlbnRlZCBhcyBhIHR5cGUgYW5kIHRoZSBzdHJpbmdpZmllZCB2YWx1ZS4KKworRm9ybWF0OiBge3R5cGV9e3ZhbHVlfWAKIAogV2hlcmU6CiAKLS0gYHtkdXJhdGlvbn1gIGlzIGEgYExvbmdgIGRlc2NyaWJpbmcgdGhlIGR1cmF0aW9uIGluIG5hbm9zZWNvbmRzLgotLSBge21ldHJpY3N9YCBpcyBhIGBMaXN0YCBjb21wb3NlZCBieSBgTWV0cmljc2AgaXRlbXMuCistIGB7dHlwZX1gIGlzIGEgZnVsbHktcXVhbGlmaWVkIGBTdHJpbmdgIGNvbnRhaW5pbmcgdGhlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRleHQgaWRlbnRpZmllciBvZiB0aGUgY3VzdG9tIHR5cGUuCistIGB7dmFsdWV9YCBpcyBhIGZ1bGx5LXF1YWxpZmllZCBgU3RyaW5nYCByZXByZXNlbnRpbmcgdGhlIHN0cmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS4KIAotPT09PSBNZXJnZQorRXhhbXBsZSB2YWx1ZXM6CiAKLUZvcm1hdDogYSBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgotCi09PT09IERUCi0KLUZvcm1hdDogYSBzaW5nbGUgYFN0cmluZ2AgcmVwcmVzZW50aW5nIHRoZSBlbnVtIHZhbHVlLgotCi09PT09IEN1c3RvbQotCi1BIGN1c3RvbSB0eXBlLCByZXByZXNlbnRlZCBhcyBhIGJsb2IgdmFsdWUuCi0KLVR5cGUgSW5mbzogYHtuYW1lfXtjdXN0b21fdHlwZV9pbmZvfWAKLQotV2hlcmU6Ci0KLS0gYHtuYW1lfWAgaXMgYSBgU3RyaW5nYCBjb250YWluaW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyB0ZXh0IGlkZW50aWZpZXIgb2YgdGhlIGN1c3RvbSB0eXBlLgotLSBge2N1c3RvbV90eXBlX2luZm99YCBpcyBhIGBCeXRlQnVmZmVyYCByZXByZXNlbnRpbmcgdGhlIGFkZGl0aW9uYWwgdHlwZSBpbmZvcm1hdGlvbiwgc3BlY2lhbGx5IHVzZWZ1bAotZm9yIGNvbXBsZXggY3VzdG9tIHR5cGVzLgotCi1WYWx1ZSBmb3JtYXQ6IGB7YmxvYn1gCi0KLVdoZXJlOgotCi0tIGB7YmxvYn1gIGlzIGEgYEJ5dGVCdWZmZXJgLgorW3NvdXJjZSx0ZXh0XQorLS0tLQorMDMgMDAgMDAgMDAgMDAgMDUgNTUgNjkgNkUgNzQgMzg6IHRoZSBzdHJpbmcgIlVpbnQ4IgorMDMgMDAgMDAgMDAgMDAgMDIgMzEgMzA6IHRoZSBzdHJpbmcgIjEwIgorLS0tLQogCiA9PT09IFVuc3BlY2lmaWVkIE51bGwgT2JqZWN0CiAKIEEgYG51bGxgIHZhbHVlIGZvciBhbiB1bnNwZWNpZmllZCBPYmplY3QgdmFsdWUuCiAKLUl0J3MgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIG51bGwgYHt2YWx1ZV9mbGFnfWAgc2V0IGFuZCBubyBzZXF1ZW5jZSBvZiBieXRlcy4KK0l0J3MgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIG51bGwgYHt2YWx1ZV9mbGFnfWAgc2V0IGFuZCBubyBzZXF1ZW5jZSBvZiBieXRlcyAod2hpY2ggaXMgYEZFIDAxYCkuCiAKID09PT0gQ2hhcgogCkBAIC02MTQsOSArNjI3LDkgQEAKIFRoZSAzIGFuZCA0LWJ5dGUgZW5jb2RpbmdzIGFyZSBzaW1pbGFyIHRvIHRoZSAyLWJ5dGUgZW5jb2RpbmcsIGV4Y2VwdCB0aGF0IHRoZSBmaXJzdCBieXRlIG9mIHRoZSAzLWJ5dGUgZW5jb2Rpbmcgc3RhcnRzCiB3aXRoIGAxMTEwYCBhbmQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIDQtYnl0ZSBlbmNvZGluZyBzdGFydHMgd2l0aCBgMTExMTBgLgogCi1FeGFtcGxlIHZhbHVlcyAoaGV4IGJ5dGVzKQorRXhhbXBsZSB2YWx1ZXMgKGhleCBieXRlcyk6CiAKLS0gYDk3YDogQ2hhcmFjdGVyICdhJy4KKy0gYDYxYDogQ2hhcmFjdGVyICdhJy4KIC0gYGMyIGEyYDogQ2hhcmFjdGVyICfCoicuCiAtIGBlMiA4MiBhY2A6IENoYXJhY3RlciAn4oKsJwogCkBAIC02MjgsMTI4ICs2NDEsOCBAQAogCiBXaGVyZToKIAotLSBge3NlY29uZHN9YCBpcyBhIGBMb25nYC4KLS0gYHtuYW5vc31gIGlzIGFuIGBJbnRgLgotCi09PT09IEluZXRBZGRyZXNzCi0KLUZvcm1hdDogU2FtZSBhcyBgQnl0ZUJ1ZmZlcmAsIGhhdmluZyBvbmx5IDQgYnl0ZSBvciAxNiBieXRlIHNlcXVlbmNlcyBhbGxvd2VkLgotCi09PT09IEluc3RhbnQKLQotQW4gaW5zdGFudGFuZW91cyBwb2ludCBvbiB0aGUgdGltZS1saW5lLgotCi1Gb3JtYXQ6IGB7c2Vjb25kc317bmFub3N9YAotCi1XaGVyZToKLQotLSBge3NlY29uZHN9YCBpcyBhIGBMb25nYC4KLS0gYHtuYW5vc31gIGlzIGFuIGBJbnRgLgotCi09PT09IExvY2FsRGF0ZQotCi1BIGRhdGUgd2l0aG91dCBhIHRpbWUtem9uZSBpbiB0aGUgSVNPLTg2MDEgY2FsZW5kYXIgc3lzdGVtLgotCi1Gb3JtYXQ6IGB7eWVhcn17bW9udGh9e2RheX1gCi0KLVdoZXJlOgotCi0tIGB7eWVhcn1gIGlzIGFuIGBJbnRgIGZyb20gLTk5OSw5OTksOTk5IHRvIDk5OSw5OTksOTk5LgotLSBge21vbnRofWAgaXMgYSBgQnl0ZWAgdG8gcmVwcmVzZW50IHRoZSBtb250aCwgZnJvbSAxIChKYW51YXJ5KSB0byAxMiAoRGVjZW1iZXIpCi0tIGB7ZGF5fWAgaXMgYSBgQnl0ZWAgZnJvbSAxIHRvIDMxLgotCi09PT09IExvY2FsRGF0ZVRpbWUKLQotRm9ybWF0OiBge2RhdGV9e3RpbWV9YAotCi1XaGVyZToKLQotLSBge2RhdGV9YCBpcyBgTG9jYWxEYXRlYC4KLS0gYHt0aW1lfWAgaXMgYSBgTG9jYWxUaW1lYC4KLQotPT09PSBMb2NhbFRpbWUKLUEgdGltZSB3aXRob3V0IGEgdGltZS16b25lIGluIHRoZSBJU08tODYwMSBjYWxlbmRhciBzeXN0ZW0uCi0KLUZvcm1hdDogQW4gOCBieXRlIHR3bydzIGNvbXBsZW1lbnQgbG9uZyByZXByZXNlbnRpbmcgbmFub3NlY29uZHMgc2luY2UgbWlkbmlnaHQuCi0KLVZhbGlkIHZhbHVlcyBhcmUgaW4gdGhlIHJhbmdlIDAgdG8gODYzOTk5OTk5OTk5OTkKLQotPT09PSBNb250aERheQotCi1BIG1vbnRoLWRheSBpbiB0aGUgSVNPLTg2MDEgY2FsZW5kYXIgc3lzdGVtLgotCi1Gb3JtYXQ6IGB7bW9udGh9e2RheX1gCi0KLVdoZXJlOgotCi0tIGB7bW9udGh9YCBpcyBgQnl0ZWAgdmFsdWUgZnJvbSAxIHRvIDEyLgotLSBge2RheX1gIGlzIGBCeXRlYCB2YWx1ZSBmcm9tIDEgdG8gMzEuCi0KLT09PT0gT2Zmc2V0RGF0ZVRpbWUKLQotQSBkYXRlLXRpbWUgd2l0aCBhbiBvZmZzZXQgZnJvbSBVVEMvR3JlZW53aWNoIGluIHRoZSBJU08tODYwMSBjYWxlbmRhciBzeXN0ZW0sIHN1Y2ggYXMgMjAwNy0xMi0wM1QxMDoxNTozMCswMTowMC4KLQotRm9ybWF0OiBge2xvY2FsX2RhdGVfdGltZX17b2Zmc2V0fWAKLQotV2hlcmU6Ci0KLS0gYHtsb2NhbF9kYXRlX3RpbWV9YCBpcyBgTG9jYWxEYXRlVGltZWAuCi0tIGB7b2Zmc2V0fWAgaXMgYFpvbmVPZmZzZXRgLgotCi09PT09IE9mZnNldFRpbWUKLQotQSB0aW1lIHdpdGggYW4gb2Zmc2V0IGZyb20gVVRDL0dyZWVud2ljaCBpbiB0aGUgSVNPLTg2MDEgY2FsZW5kYXIgc3lzdGVtLCBzdWNoIGFzIDEwOjE1OjMwKzAxOjAwLgotCi1Gb3JtYXQ6IGB7bG9jYWxfdGltZX17b2Zmc2V0fWAKLQotV2hlcmU6Ci0KLS0gYHtsb2NhbF90aW1lfWAgaXMgYExvY2FsVGltZWAuCi0tIGB7b2Zmc2V0fWAgaXMgYFpvbmVPZmZzZXRgLgotCi09PT09IFBlcmlvZAotCi1BIGRhdGUtYmFzZWQgYW1vdW50IG9mIHRpbWUgaW4gdGhlIElTTy04NjAxIGNhbGVuZGFyIHN5c3RlbSwgc3VjaCBhcyAnMiB5ZWFycywgMyBtb250aHMgYW5kIDQgZGF5cycuCi0KLUZvcm1hdDogYHt5ZWFyc317bW9udGh9e2RheXN9YAotCi1XaGVyZToKLQotYHt5ZWFyc31gLCBge21vbnRofWAgYW5kIGB7ZGF5c31gIGFyZSBgSW50YCB2YWx1ZXMuCi0KLT09PT0gWWVhcgotCi1BIHllYXIgaW4gdGhlIElTTy04NjAxIGNhbGVuZGFyIHN5c3RlbSwgc3VjaCBhcyAyMDE4LgotCi1Gb3JtYXQ6IEFuIGBJbnRgIHJlcHJlc2VudGluZyB0aGUgeWVhcnMuCi0KLT09PT0gWWVhck1vbnRoCi0KLUEgeWVhci1tb250aCBpbiB0aGUgSVNPLTg2MDEgY2FsZW5kYXIgc3lzdGVtLCBzdWNoIGFzIDIwMDctMTIuCi0KLUZvcm1hdDogYHt5ZWFyfXttb250aH1gCi0KLVdoZXJlOgotCi0tIGB7eWVhcn1gIGlzIGFuIGBJbnRgLgotLSBge21vbnRofWAgaXMgYSBgQnl0ZWAgZnJvbSAxIHRvIDEyLgotCi09PT09IFpvbmVkRGF0ZVRpbWUKLQotQSBkYXRlLXRpbWUgd2l0aCBhIHRpbWUtem9uZSBpbiB0aGUgSVNPLTg2MDEgY2FsZW5kYXIgc3lzdGVtLgotCi1Gb3JtYXQ6IGB7bG9jYWxfZGF0ZV90aW1lfXt6b25lX29mZnNldH1gCi0KLVdoZXJlOgotCi0tIGB7bG9jYWxfZGF0ZV90aW1lfWAgaXMgYExvY2FsRGF0ZVRpbWVgLgotLSBge3pvbmVfb2Zmc2V0fWAgaXMgYSBgWm9uZU9mZnNldGAuCi0KLT09PT0gWm9uZU9mZnNldAotCi1BIHRpbWUtem9uZSBvZmZzZXQgZnJvbSBHcmVlbndpY2gvVVRDLCBzdWNoIGFzICswMjowMC4KLQotRm9ybWF0OiBBbiBgSW50YCByZXByZXNlbnRpbmcgdG90YWwgem9uZSBvZmZzZXQgaW4gc2Vjb25kcy4KKy0gYHtzZWNvbmRzfWAgaXMgYSBgTG9uZyB7dmFsdWV9YC4KKy0gYHtuYW5vc31gIGlzIGFuIGBJbnQge3ZhbHVlfWAuCiAKID09PSBSZXF1ZXN0IGFuZCBSZXNwb25zZSBNZXNzYWdlcwogCkBAIC03NjAsMzMgKzY1MywzMiBAQAogCiBSZXByZXNlbnRzIGEgbWVzc2FnZSBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci4KIAotRm9ybWF0OiBge3ZlcnNpb259e3JlcXVlc3RfaWR9e29wfXtwcm9jZXNzb3J9e2FyZ3N9YAorRm9ybWF0OiBge3ZlcnNpb259e2ZpZWxkc317Z3JlbWxpbn1gCiAKIFdoZXJlOgogCi0tIGB7dmVyc2lvbn1gIGlzIGEgYEJ5dGVgIHJlcHJlc2VudGluZyB0aGUgc3BlY2lmaWNhdGlvbiB2ZXJzaW9uLCB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgdG8gb25lLiBGb3IgdGhpcwotdmVyc2lvbiBvZiB0aGUgZm9ybWF0LCB0aGUgdmFsdWUgZXhwZWN0ZWQgaXMgYDB4ODFgIChgMTAwMDAwMDFgKS4KLS0gYHtyZXF1ZXN0X2lkfWAgaXMgYSBgVVVJRGAuCi0tIGB7b3B9YCBpcyBhIGBTdHJpbmdgLgotLSBge3Byb2Nlc3Nvcn1gIGlzIGEgYFN0cmluZ2AuCi0tIGB7YXJnc31gIGlzIGEgYE1hcGAuCistIGB7dmVyc2lvbn1gIGlzIGEgYEJ5dGUge3ZhbHVlfWAgcmVwcmVzZW50aW5nIHRoZSBzcGVjaWZpY2F0aW9uIHZlcnNpb24sIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCB0byBvbmUuIEZvciB0aGlzCit2ZXJzaW9uIG9mIHRoZSBmb3JtYXQsIHRoZSB2YWx1ZSBleHBlY3RlZCBpcyBgMHg4NGAgKGAxMDAwMDEwMGApLgorLSBge2ZpZWxkc31gIGlzIGEgYE1hcCB7dmFsdWV9YC4KKy0gYHtncmVtbGlufWAgaXMgYSBgU3RyaW5nIHt2YWx1ZX1gLgogCi1UaGUgdG90YWwgbGVuZ3RoIGlzIG5vdCBwYXJ0IG9mIHRoZSBtZXNzYWdlIGFzIHRoZSB0cmFuc3BvcnQgbGF5ZXIgd2lsbCBwcm92aWRlIGl0LiBGb3IgZXhhbXBsZTogV2ViU29ja2V0cywKLWFzIGEgZnJhbWluZyBwcm90b2NvbCwgZGVmaW5lcyBwYXlsb2FkIGxlbmd0aC4KK1RoZSB0b3RhbCBsZW5ndGggaXMgbm90IHBhcnQgb2YgdGhlIG1lc3NhZ2UgYXMgdGhlIHRyYW5zcG9ydCBsYXllciB3aWxsIHByb3ZpZGUgaXQuIEZvciBleGFtcGxlOiBpbiBIVFRQLCB0aGVyZSBpcyB0aGUKK2BDb250ZW50LUxlbmd0aGAgaGVhZGVyIHdoaWNoIGRlZmluZXMgdGhlIHBheWxvYWQgc2l6ZS4KIAogPT09PSBSZXNwb25zZSBNZXNzYWdlCiAKLUZvcm1hdDogYHt2ZXJzaW9ufXtyZXF1ZXN0X2lkfXtzdGF0dXNfY29kZX17c3RhdHVzX21lc3NhZ2V9e3N0YXR1c19hdHRyaWJ1dGVzfXtyZXN1bHRfbWV0YX17cmVzdWx0X2RhdGF9YAorRm9ybWF0OiBge3ZlcnNpb259e2J1bGtlZH17cmVzdWx0X2RhdGF9e21hcmtlcn17c3RhdHVzX2NvZGV9e3N0YXR1c19tZXNzYWdlfXtleGNlcHRpb259YAogCiBXaGVyZToKIAotLSBge3ZlcnNpb259YCBpcyBhIGBCeXRlYCByZXByZXNlbnRpbmcgdGhlIHByb3RvY29sIHZlcnNpb24sIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCB0byBvbmUuIEZvciB0aGlzIHZlcnNpb24KLW9mIHRoZSBwcm90b2NvbCwgdGhlIHZhbHVlIGV4cGVjdGVkIGlzIGAweDgxYCAoYDEwMDAwMDAxYCkuCi0tIGB7cmVxdWVzdF9pZH1gIGlzIGEgbnVsbGFibGUgYFVVSURgLgotLSBge3N0YXR1c19jb2RlfWAgaXMgYW4gYEludGAuCi0tIGB7c3RhdHVzX21lc3NhZ2V9YCBpcyBhIG51bGxhYmxlIGBTdHJpbmdgLgotLSBge3N0YXR1c19hdHRyaWJ1dGVzfWAgaXMgYSBgTWFwYC4KLS0gYHtyZXN1bHRfbWV0YX1gIGlzIGEgYE1hcGAuCi0tIGB7cmVzdWx0X2RhdGF9YCBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiBge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX1gLgorLSBge3ZlcnNpb259YCBpcyBhIGBCeXRlIHt2YWx1ZX1gIHJlcHJlc2VudGluZyB0aGUgcHJvdG9jb2wgdmVyc2lvbiwgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0IHRvIG9uZS4gRm9yIHRoaXMgdmVyc2lvbgorb2YgdGhlIHByb3RvY29sLCB0aGUgdmFsdWUgZXhwZWN0ZWQgaXMgYDB4ODRgIChgMTAwMDAxMDBgKS4KKy0gYHtidWxrZWR9YCBpcyBhIGBCeXRlIHt2YWx1ZX1gIHJlcHJlc2VudGluZyB3aGV0aGVyIGB7cmVzdWx0X2RhdGF9YCBpcyBidWxrZWQuIGAwMGAgaXMgZmFsc2UgYW5kIGAwMWAgaXMgdHJ1ZS4KKy0gYHtyZXN1bHRfZGF0YX1gIGlzIGEgc2VxdWVuY2Ugb2YgZnVsbHktcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIGB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfWAuCitJZiBge2J1bGtlZH1gIGlzIGAwMWAgdGhlbiBlYWNoIHZhbHVlIGlzIGZvbGxvd2VkIGJ5IGEgYExvbmdgIHZhbHVlIGRlbm90aW5nIHRoZSBidWxrIG9mIHRoZSBwcmVjZWRpbmcgdmFsdWUuCistIGB7bWFya2VyfWAgaXMgYSBmdWxseS1xdWFsaWZpZWQgYE1hcmtlcmAuCistIGB7c3RhdHVzX2NvZGV9YCBpcyBhbiBgSW50IHt2YWx1ZX1gLgorLSBge3N0YXR1c19tZXNzYWdlfWAgaXMgYSBudWxsYWJsZSBge3ZhbHVlX2ZsYWd9YCBhbmQgYFN0cmluZyB7dmFsdWV9YC4KKy0gYHtleGNlcHRpb259YCBpcyBhIG51bGxhYmxlIGB7dmFsdWVfZmxhZ31gIGFuZCBgU3RyaW5nIHt2YWx1ZX1gLgogCiBUaGUgdG90YWwgbGVuZ3RoIGlzIG5vdCBwYXJ0IG9mIHRoZSBtZXNzYWdlIGFzIHRoZSB0cmFuc3BvcnQgbGF5ZXIgd2lsbCBwcm92aWRlIGl0LgpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvZGV2L2lvL2dyYXBoc29uLmFzY2lpZG9jIGIvZG9jcy9zcmMvZGV2L2lvL2dyYXBoc29uLmFzY2lpZG9jCmluZGV4IGU1MWNhNTEuLjdiM2E4NzIgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL2Rldi9pby9ncmFwaHNvbi5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9kZXYvaW8vZ3JhcGhzb24uYXNjaWlkb2MKQEAgLTE5LDExICsxOSwxNiBAQAogW1tncmFwaHNvbl1dCiA9IEdyYXBoU09OCiAKLWltYWdlOmdyZW1saW4tZ3JhcGhzb24ucG5nW3dpZHRoPTM1MCxmbG9hdD1sZWZ0XSBHcmFwaFNPTiBpcyBhIEpTT04tYmFzZWQgZm9ybWF0IHRoYXQgaXMgZGVzaWduZWQgZm9yIGh1bWFuIHJlYWRhYmxlCitpbWFnZTouLi8uLi8uLi9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tZ3JhcGhzb24ucG5nW3dpZHRoPTM1MCxmbG9hdD1sZWZ0XSBHcmFwaFNPTiBpcyBhIEpTT04tYmFzZWQgZm9ybWF0IHRoYXQgaXMgZGVzaWduZWQgZm9yIGh1bWFuIHJlYWRhYmxlCiBvdXRwdXQgdGhhdCBpcyBlYXNpbHkgc3VwcG9ydGVkIGluIGFueSBwcm9ncmFtbWluZyBsYW5ndWFnZSB0aHJvdWdoIHRoZSB3aWRlLWFycmF5IG9mIEpTT04gcGFyc2luZyBsaWJyYXJpZXMgdGhhdAotZXhpc3Qgb24gdmlydHVhbGx5IGFsbCBwbGF0Zm9ybXMuIEdyYXBoU09OIGlzIGNvbnNpZGVyZWQgYm90aCBhICJncmFwaCIgZm9ybWF0IGFuZCBhIGdlbmVyYWxpemVkIG9iamVjdCBzZXJpYWxpemF0aW9uCi1mb3JtYXQuIFRoYXQgY2hhcmFjdGVyaXN0aWMgbWFrZXMgaXQgdXNlZnVsIGFzIGEgc2VyaWFsaXphdGlvbiBmb3JtYXQgZm9yIEdyZW1saW4gU2VydmVyIHdoZXJlIGFyYml0cmFyeSBvYmplY3RzCi1vZiB2YXJ5aW5nIHR5cGVzIG1heSBiZSByZXR1cm5lZCBhcyByZXN1bHRzLgorZXhpc3Qgb24gdmlydHVhbGx5IGFsbCBwbGF0Zm9ybXMuIEdyYXBoU09OIHZlcnNpb25zIDEgdG8gMyB3ZXJlIGNvbnNpZGVyZWQgdG8gYmUgYm90aCBhICJncmFwaCIgZm9ybWF0IGFuZCBhCitnZW5lcmFsaXplZCBvYmplY3Qgc2VyaWFsaXphdGlvbiBmb3JtYXQuIFRoYXQgY2hhcmFjdGVyaXN0aWMgbWFrZXMgaXQgdXNlZnVsIGFzIGEgc2VyaWFsaXphdGlvbiBmb3JtYXQgZm9yIEdyZW1saW4KK1NlcnZlciB3aGVyZSBhcmJpdHJhcnkgb2JqZWN0cyBvZiB2YXJ5aW5nIHR5cGVzIG1heSBiZSByZXR1cm5lZCBhcyByZXN1bHRzLiBIb3dldmVyLCBzdGFydGluZyBpbiBHcmFwaFNPTiA0LCBHcmFwaFNPTgoraXMgb25seSBpbnRlbmRlZCB0byBiZSBhIG5ldHdvcmsgc2VyaWFsaXphdGlvbiBmb3JtYXQgdGhhdCBpcyBvbmx5IGFibGUgdG8gc2VyaWFsaXplIHNwZWNpZmljIHR5cGVzIGRlZmluZWQgYnkgdGhlCitmb3JtYXQuIEl0IGlzIG9ubHkgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIHRoZSBUaW5rZXJQb3AgSFRUUCBBUEkuCisKK05PVEU6IFRoaXMgZG9jdW1lbnQgZm9jdXNlcyBvbiBHcmFwaFNPTiA0LiBGb3IgdGhlIEdyYXBoU09OIDEsIDIsIGFuZCAzIHNwZWNpZmljYXRpb25zLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFRpbmtlclBvcAorMy54IElPIERvY3VtZW50YXRpb24uCiAKIFdoZW4gY29uc2lkZXJpbmcgR3JhcGhTT04gYXMgYSAiZ3JhcGgiIGZvcm1hdCwgdGhlIHJlbGV2YW50IGZlYXR1cmUgdG8gY29uc2lkZXIgaXMgdGhlIGB3cml0ZUdyYXBoYCBhbmQgYHJlYWRHcmFwaGAKIG1ldGhvZHMgb24gdGhlIGBHcmFwaFNPTldyaXRlcmAgYW5kIGBHcmFwaFNPTlJlYWRlcmAgaW50ZXJmYWNlcywgcmVzcGVjdGl2ZWx5LiBUaGVzZSBtZXRob2RzIHdyaXRlIHRoZSBlbnRpcmUgYEdyYXBoYApAQCAtNTAsNyArNTUsNyBAQAogR2VuZXJhbGl6ZWQgb2JqZWN0IHNlcmlhbGl6YXRpb24gd2lsbCBiZSBkaXNjdXNzZWQgbGF0ZXIgaW4gdGhpcyBzZWN0aW9uLCBzbyBmb3Igbm93IHRoZSBmb2N1cyB3aWxsIGJlIG9uIHRoZSAiZ3JhcGgiCiBmb3JtYXQuIFVubGlrZSBHcmFwaE1MLCBHcmFwaFNPTiBkb2VzIG5vdCB1c2UgYW4gZWRnZSBsaXN0IGZvcm1hdC4gSXQgdXNlcyBhbiBhZGphY2VuY3kgbGlzdC4gSW4gdGhlIGFkamFjZW5jeSBsaXN0LAogZWFjaCB2ZXJ0ZXggaXMgZXNzZW50aWFsbHkgYSBsaW5lIGluIHRoZSBmaWxlIGFuZCB0aGUgdmVydGV4IGxpbmUgY29udGFpbnMgYSBsaXN0IG9mIGFsbCB0aGUgZWRnZXMgYXNzb2NpYXRlZCB3aXRoCi10aGF0IHZlcnRleC4gVGhlIEdyYXBoU09OIDMuMCByZXByZXNlbnRhdGlvbiBsb29rcyBsaWtlIHRoaXMgZm9yIHRoZSBNb2Rlcm4gdG95IGdyYXBoOgordGhhdCB2ZXJ0ZXguIFRoZSBHcmFwaFNPTiA0LjAgcmVwcmVzZW50YXRpb24gbG9va3MgbGlrZSB0aGlzIGZvciB0aGUgTW9kZXJuIHRveSBncmFwaDoKIAogW3NvdXJjZSxqc29uXQogLS0tLQpAQCAtNjIsNyArNjcsNyBAQAogeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjZ9LCJsYWJlbCI6InBlcnNvbiIsIm91dEUiOnsiY3JlYXRlZCI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMn0sImluViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjN9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjJ9fX1dfSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjEwfSwidmFsdWUiOiJwZXRlciJ9XSwiYWdlIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjExfSwidmFsdWUiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjozNX19XX19CiAtLS0tCiAKLUF0IGEgZ2xhbmNlLCBvbmUgY2FuIHNlZSB0aGF0IHRoaXMgaXMgbm90IGEgdmFsaWQgSlNPTiBkb2N1bWVudC4gV2hpbGUgdGhhdCBmb3JtIG1heSBzZWVtIGluY29ycmVjdCwgdGhlcmUgaXMgYSByZWFzb24uCitBdCBhIGdsYW5jZSwgb25lIGNhbiBzZWUgdGhhdCB0aGlzIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQgKGFsdGhvdWdoIGl0IGlzIGEgdmFsaWQgaHR0cHM6Ly9qc29ubGluZXMub3JnW0pTT04gTGluZXNdIGRvY3VtZW50KS4gV2hpbGUgdGhhdCBmb3JtIG1heSBzZWVtIGluY29ycmVjdCwgdGhlcmUgaXMgYSByZWFzb24uCiBUaGUgImdyYXBoIiBmb3JtYXQgaXMgZGVzaWduZWQgYnkgZGVmYXVsdCB0byBiZSBzcGxpdHRhYmxlLCBzdWNoIHRoYXQgZGlzdHJpYnV0ZWQgc3lzdGVtcyBsaWtlIFNwYXJrIGNhbiBlYXNpbHkgZGl2aWRlCiB0aGUgR3JhcGhTT04gZmlsZSBmb3IgcHJvY2Vzc2luZy4gSWYgdGhpcyBkYXRhIHdlcmUgcmVwcmVzZW50ZWQgYXMgYW4gImFycmF5IG9mIHZlcnRpY2VzIiB3aXRoIHNxdWFyZSBicmFja2V0cyBhdCB0aGUKIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBmaWxlLCB0aGUgZm9ybWF0IHdvdWxkIGJlIGxlc3MgY29uZHVjaXZlIHRvIGZpdCB0aGF0IHB1cnBvc2UuIEl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSB0aGlzCkBAIC03MiwxMSArNzcsMTEgQEAKIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsgInZlcnRpY2VzIjogWwotICB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjoicGVyc29uIiwib3V0RSI6eyJjcmVhdGVkIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjl9LCJpblYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjozfSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MC40fX19XSwia25vd3MiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6N30sImluViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjJ9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjV9fX0seyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjh9LCJpblYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo0fSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MS4wfX19XX0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjowfSwidmFsdWUiOiJtYXJrbyJ9XSwiYWdlIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjF9LCJ2YWx1ZSI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjI5fX1dfX0KLSAgeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjJ9LCJsYWJlbCI6InBlcnNvbiIsImluRSI6eyJrbm93cyI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo3fSwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjF9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjV9fX1dfSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjJ9LCJ2YWx1ZSI6InZhZGFzIn1dLCJhZ2UiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6M30sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjd9fV19fQotICB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6M30sImxhYmVsIjoic29mdHdhcmUiLCJpbkUiOnsiY3JlYXRlZCI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo5fSwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjF9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjR9fX0seyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjExfSwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjR9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjR9fX0seyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjEyfSwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjZ9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjJ9fX1dfSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjR9LCJ2YWx1ZSI6ImxvcCJ9XSwibGFuZyI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo1fSwidmFsdWUiOiJqYXZhIn1dfX0KLSAgeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjR9LCJsYWJlbCI6InBlcnNvbiIsImluRSI6eyJrbm93cyI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo4fSwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjF9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjoxLjB9fX1dfSwib3V0RSI6eyJjcmVhdGVkIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjEwfSwiaW5WIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6NX0sInByb3BlcnRpZXMiOnsid2VpZ2h0Ijp7IkB0eXBlIjoiZzpEb3VibGUiLCJAdmFsdWUiOjEuMH19fSx7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MTF9LCJpblYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjozfSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MC40fX19XX0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo2fSwidmFsdWUiOiJqb3NoIn1dLCJhZ2UiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6N30sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MzJ9fV19fQotICB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6NX0sImxhYmVsIjoic29mdHdhcmUiLCJpbkUiOnsiY3JlYXRlZCI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMH0sIm91dFYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo0fSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MS4wfX19XX0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo4fSwidmFsdWUiOiJyaXBwbGUifV0sImxhbmciOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6OX0sInZhbHVlIjoiamF2YSJ9XX19CisgIHsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOiJwZXJzb24iLCJvdXRFIjp7ImNyZWF0ZWQiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6OX0sImluViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjN9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjR9fX1dLCJrbm93cyI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo3fSwiaW5WIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mn0sInByb3BlcnRpZXMiOnsid2VpZ2h0Ijp7IkB0eXBlIjoiZzpEb3VibGUiLCJAdmFsdWUiOjAuNX19fSx7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6OH0sImluViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjR9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjoxLjB9fX1dfSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjB9LCJ2YWx1ZSI6Im1hcmtvIn1dLCJhZ2UiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MX0sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjl9fV19fSwKKyAgeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjJ9LCJsYWJlbCI6InBlcnNvbiIsImluRSI6eyJrbm93cyI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo3fSwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjF9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjV9fX1dfSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjJ9LCJ2YWx1ZSI6InZhZGFzIn1dLCJhZ2UiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6M30sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjd9fV19fSwKKyAgeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjN9LCJsYWJlbCI6InNvZnR3YXJlIiwiaW5FIjp7ImNyZWF0ZWQiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6OX0sIm91dFYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MC40fX19LHsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMX0sIm91dFYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo0fSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MC40fX19LHsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMn0sIm91dFYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo2fSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MC4yfX19XX0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo0fSwidmFsdWUiOiJsb3AifV0sImxhbmciOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6NX0sInZhbHVlIjoiamF2YSJ9XX19LAorICB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6NH0sImxhYmVsIjoicGVyc29uIiwiaW5FIjp7Imtub3dzIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjh9LCJvdXRWIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sInByb3BlcnRpZXMiOnsid2VpZ2h0Ijp7IkB0eXBlIjoiZzpEb3VibGUiLCJAdmFsdWUiOjEuMH19fV19LCJvdXRFIjp7ImNyZWF0ZWQiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MTB9LCJpblYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo1fSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MS4wfX19LHsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMX0sImluViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjN9LCJwcm9wZXJ0aWVzIjp7IndlaWdodCI6eyJAdHlwZSI6Imc6RG91YmxlIiwiQHZhbHVlIjowLjR9fX1dfSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjZ9LCJ2YWx1ZSI6Impvc2gifV0sImFnZSI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo3fSwidmFsdWUiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjozMn19XX19LAorICB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6NX0sImxhYmVsIjoic29mdHdhcmUiLCJpbkUiOnsiY3JlYXRlZCI6W3siaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMH0sIm91dFYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo0fSwicHJvcGVydGllcyI6eyJ3ZWlnaHQiOnsiQHR5cGUiOiJnOkRvdWJsZSIsIkB2YWx1ZSI6MS4wfX19XX0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo4fSwidmFsdWUiOiJyaXBwbGUifV0sImxhbmciOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6OX0sInZhbHVlIjoiamF2YSJ9XX19LAogICB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Nn0sImxhYmVsIjoicGVyc29uIiwib3V0RSI6eyJjcmVhdGVkIjpbeyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjEyfSwiaW5WIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6M30sInByb3BlcnRpZXMiOnsid2VpZ2h0Ijp7IkB0eXBlIjoiZzpEb3VibGUiLCJAdmFsdWUiOjAuMn19fV19LCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTB9LCJ2YWx1ZSI6InBldGVyIn1dLCJhZ2UiOlt7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTF9LCJ2YWx1ZSI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjM1fX1dfX0KIF19CiAtLS0tCkBAIC05OSwxMTIgKzEwNCwyMjAwIEBACiBhbmQgaXQgY291bGQgYmUgZGlmZmVyZW50IChvciBjaGFuZ2UpIGZyb20gc2VydmVyIHRvIHNlcnZlci4gV2hlbiBidWlsZGluZyBhcHBsaWNhdGlvbnMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlCiBtaW1lIHR5cGUgaXMgbWFkZSBleHBsaWNpdCBvbiByZXF1ZXN0cyB0byBhdm9pZCBicmVha2luZyBjaGFuZ2VzIG9yIHVuZXhwZWN0ZWQgcmVzdWx0cy4KIAotW1tncmFwaHNvbi0xZDBdXQotPT0gVmVyc2lvbiAxLjAKK1tbZ3JhcGhzb24tNF1dCis9PSBWZXJzaW9uIDQuMAogCi1WZXJzaW9uIDEuMCBvZiBHcmFwaFNPTiB3YXMgcmVsZWFzZWQgd2l0aCBUaW5rZXJQb3AgMy4wLjAuIEl0IGlzIHJlZmVycmVkIHRvIGJ5IHRoZSBmb2xsb3dpbmcgbWltZSB0eXBlczoKK1ZlcnNpb24gNC4wIG9mIEdyYXBoU09OIHdhcyBmaXJzdCBpbnRyb2R1Y2VkIG9uIFRpbmtlclBvcCA0LjAuMCBhbmQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlCitgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uYCBtaW1lIHR5cGUuIFRoZXJlIGFsc28gZXhpc3RzIGFuIHVudHlwZWQgdmVyc2lvbjoKK2BhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12NC4wK2pzb247dHlwZXM9ZmFsc2VgLiBJdCBpcyB2ZXJ5IHNpbWlsYXIgdG8gR3JhcGhTT04gMy4wLCB3aXRoIGp1c3Qgc2V2ZXJhbCBrZXkgZGlmZmVyZW5jZXM6CittYW55IHVuZGVydXNlZCBvciBkdXBsaWNhdGVkIHR5cGVzIGhhdmUgYmVlbiByZW1vdmVkLCBsYWJlbHMgYXJlIG5vdyBsaXN0IG9mIHN0cmluZ3MgYW5kIHJlcXVlc3QvcmVzcG9uc2UgZm9ybWF0cyBoYXZlCitjaGFuZ2VkIHF1aXRlIGEgYml0LCBhbmQgY3VzdG9tIHR5cGVzIGhhdmUgYmVlbiByZXBsYWNlZCB3aXRoIFByb3ZpZGVyIERlZmluZWQgVHlwZSAoUERUKS4KIAotKiBgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjEuMCtqc29uYCAtIHR5cGVzIGVtYmVkZGVkCi0qIGBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12MS4wK2pzb247dHlwZXM9ZmFsc2VgIC0gbm8gdHlwZXMgZW1iZWRkZWQKK0ZvciBlYWNoIHR5cGUgYmVsb3csIHR3byBleGFtcGxlcyBhcmUgcHJvdmlkZWQuIFRoZSBmaXJzdCBzaG93cyB0aGUgdHlwZWQgcmVwcmVzZW50YXRpb24KKyhgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uYCkgYW5kIHRoZSBzZWNvbmQgc2hvd3MgdGhlIHVudHlwZWQgcmVwcmVzZW50YXRpb24KKyhgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uO3R5cGVzPWZhbHNlYCkuCiAKLVdoZW4gdHlwZXMgYXJlIGVtYmVkZGVkLCBHcmFwaFNPTiB1c2VzIHRoZSBzdGFuZGFyZAotbGluazpodHRwczovL2dpdGh1Yi5jb20vRmFzdGVyWE1ML2phY2tzb24tZGF0YWJpbmRbSmFja3Nvbl0gdHlwZSBlbWJlZGRpbmcgYXBwcm9hY2ggdGhhdCB3cml0ZXMgdGhlIGZ1bGwgSmF2YSBjbGFzcwotbmFtZSBpbnRvIGEgIkBjbGFzcyIgZmllbGQgaW4gdGhlIEpTT04uIFdoaWxlIHRoaXMgYXBwcm9hY2ggaXNuJ3QgZXNwZWNpYWxseSBsYW5ndWFnZSBhZ25vc3RpYyBpdCBkb2VzIGF0IGxlYXN0IGdpdmUKLXNvbWUgaGludCBhcyB0byB3aGF0IHRoZSBleHBlY3RlZCB0eXBlIGlzLgorPT09IEJvb2xlYW4KIAotVGhpcyBzZWN0aW9uIGZvY3VzZXMgb24gbm9uLWVtYmVkZGVkIHR5cGVzIGFuZCB0aGVpciBmb3JtYXRzIGFzIHRoZXJlIHdhcyBsaXR0bGUgdXNhZ2Ugb2YgZW1iZWRkZWQgdHlwZXMgaW4gZ2VuZXJhbGl6ZWQKLW9iamVjdCBzZXJpYWxpemF0aW9uIHVzZSBjYXNlcy4gVGhlIGZvcm1hdCB3YXMgc2ltcGx5IHRvbyBjdW1iZXJzb21lIHRvIHBhcnNlIG9mIG5vbi1KYWNrc29uIGVuYWJsZWQgbGlicmFyaWVzIGFuZCB0aGUKLXVzZSBjYXNlcyBmb3IgaXQgd2VyZSBsaW1pdGVkLiA8PGdyYXBoc29uLTJkMCxHcmFwaFNPTiBWZXJzaW9uIDIuMD4+IGF0dGVtcHRzIHRvIGltcHJvdmUgdXBvbiB0aGlzIGxpbWl0YXRpb24uCitNYXRjaGVzIHRoZSBKU09OIEJvb2xlYW4gYW5kIGRvZXNuJ3QgaGF2ZSB0eXBlIGluZm9ybWF0aW9uLgogCi09PT0gR3JhcGggU3RydWN0dXJlCitbc291cmNlLHRleHRdCistLS0tCit0cnVlCistLS0tCiAKLT09PT0gRWRnZQorW3NvdXJjZSx0ZXh0XQorLS0tLQordHJ1ZQorLS0tLQorCis9PT0gQ29tcG9zaXRlIFBEVAorCitKU09OIE9iamVjdCB3aXRoIHR3byByZXF1aXJlZCBrZXlzOiAidHlwZSIgYW5kICJmaWVsZHMiICsKKyJ0eXBlIiBpcyBhIEpTT04gU3RyaW5nICsKKyJmaWVsZHMiIGlzIGEgYGc6TWFwYAogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJpZCIgOiAxMywKLSAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICJ0eXBlIiA6ICJlZGdlIiwKLSAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICJpblYiIDogMTAsCi0gICJvdXRWIiA6IDEsCi0gICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAic2luY2UiIDogMjAwOQorICAiQHR5cGUiOiAiZzpDb21wb3NpdGVQZHQiLAorICAiQHZhbHVlIjogeworICAgICJ0eXBlIjogInRpbmtlcklkIiwKKyAgICAiZmllbGRzIjogeworICAgICAgIkB0eXBlIjogImc6TWFwIiwKKyAgICAgICJAdmFsdWUiOiBbCisgICAgICAgICJpbnRJZCIsCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSI6IC0xMzYwODk0Nzk5CisgICAgICAgIH0sCisgICAgICAgICJzdHJJZCIsCisgICAgICAgICIwIgorICAgICAgXQorICAgIH0KICAgfQogfQogLS0tLQogCi09PT09IFBhdGgKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgInR5cGUiOiAidGlua2VySWQiLAorICAiZmllbGRzIjogeworICAgICJpbnRJZCI6IC0xMzYwODk0Nzk5LAorICAgICJzdHJJZCI6ICIwIgorICB9Cit9CistLS0tCisKKz09PSBEYXRlVGltZQorCitKU09OIFN0cmluZyByZXByZXNlbnRpbmcgYSBkYXRldGltZSBpbiB0aGUgSVNPLTg2MDEgZm9ybWF0LgogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJsYWJlbHMiIDogWyBbIF0sIFsgXSwgWyBdIF0sCi0gICJvYmplY3RzIiA6IFsgewotICAgICJpZCIgOiAxLAotICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAidHlwZSIgOiAidmVydGV4IiwKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgImlkIiA6IDAsCi0gICAgICAgICJ2YWx1ZSIgOiAibWFya28iCi0gICAgICB9IF0sCi0gICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICJpZCIgOiA2LAotICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDE5OTcsCi0gICAgICAgICAgImVuZFRpbWUiIDogMjAwMQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJpZCIgOiA3LAotICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInN0YXJ0VGltZSIgOiAyMDAxLAotICAgICAgICAgICJlbmRUaW1lIiA6IDIwMDQKLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiaWQiIDogOCwKLSAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDQsCi0gICAgICAgICAgImVuZFRpbWUiIDogMjAwNQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJpZCIgOiA5LAotICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMjAwNQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMTAsCi0gICAgImxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgInR5cGUiIDogInZlcnRleCIsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICJpZCIgOiA0LAotICAgICAgICAidmFsdWUiIDogImdyZW1saW4iCi0gICAgICB9IF0KLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMTEsCi0gICAgImxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgInR5cGUiIDogInZlcnRleCIsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICJpZCIgOiA1LAotICAgICAgICAidmFsdWUiIDogInRpbmtlcmdyYXBoIgotICAgICAgfSBdCi0gICAgfQotICB9IF0KKyAgIkB0eXBlIiA6ICJnOkRhdGVUaW1lIiwKKyAgIkB2YWx1ZSIgOiAiMjAwNy0xMi0wM1QxMDoxNTozMCswMTowMCIKIH0KIC0tLS0KIAotPT09PSBQcm9wZXJ0eQorW3NvdXJjZSx0ZXh0XQorLS0tLQorIjIwMDctMTItMDNUMTA6MTU6MzArMDE6MDAiCistLS0tCisKKz09PSBEb3VibGUKKworQSBKU09OIE51bWJlciB3aXRoIHRoZSBzYW1lIHJhbmdlIGFzIGEgSUVFRTc1NCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9yIGEgSlNPTiBTdHJpbmcgd2l0aCBvbmUgb2YgdGhlCitmb2xsb3dpbmcgdmFsdWVzOiAiLUluZmluaXR5IiwgIkluZmluaXR5IiwgIk5hTiIKKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiQHR5cGUiIDogImc6RG91YmxlIiwKKyAgIkB2YWx1ZSIgOiAxMDAuMAorfQorLS0tLQorCitbc291cmNlLHRleHRdCistLS0tCisxMDAuMAorLS0tLQorCis9PT0gRmxvYXQKKworQSBKU09OIE51bWJlciB3aXRoIHRoZSBzYW1lIHJhbmdlIGFzIGEgSUVFRTc1NCBzaW5nbGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9yIGEgSlNPTiBTdHJpbmcgd2l0aCBvbmUgb2YgdGhlCitmb2xsb3dpbmcgdmFsdWVzOiAiLUluZmluaXR5IiwgIkluZmluaXR5IiwgIk5hTiIKKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiQHR5cGUiIDogImc6RmxvYXQiLAorICAiQHZhbHVlIiA6IDEwMC4wCit9CistLS0tCisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KKzEwMC4wCistLS0tCisKKz09PSBJbnRlZ2VyCisKK0EgSlNPTiBOdW1iZXIgd2l0aCB0aGUgc2FtZSByYW5nZSBhcyBhIDQtYnl0ZSBzaWduZWQgaW50ZWdlci4KKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiQHR5cGUiIDogImc6SW50MzIiLAorICAiQHZhbHVlIiA6IDEwMAorfQorLS0tLQorCitbc291cmNlLHRleHRdCistLS0tCisxMDAKKy0tLS0KKworPT09IExpc3QKKworTGlzdCBpcyBhIEpTT04gQXJyYXkuIFRoZSB0eXBlIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgY29sbGVjdGlvbiB0eXBlcyB0aGF0IGFyZSBhbHNvIG1hcHBlZCB0byBKU09OCitBcnJheS4gVGhlIHVudHlwZWQgdmVyc2lvbiBjb252ZXJ0cyBjb21wbGV4IHR5cGVzIHRvIEpTT04gU3RyaW5nLgorCitbc291cmNlLGpzb25dCistLS0tCit7CisgICJAdHlwZSI6ICJnOkxpc3QiLAorICAiQHZhbHVlIjogWworICAgIHsKKyAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICJAdmFsdWUiOiAxCisgICAgfSwKKyAgICAicGVyc29uIiwKKyAgICB0cnVlLAorICAgIG51bGwKKyAgXQorfQorLS0tLQorCitbc291cmNlLHRleHRdCistLS0tCitbIDEsICJwZXJzb24iLCB0cnVlLCBudWxsIF0KKy0tLS0KKworPT09IExvbmcKKworQSBKU09OIE51bWJlciB3aXRoIHRoZSBzYW1lIHJhbmdlIGFzIGEgOC1ieXRlIHNpZ25lZCBpbnRlZ2VyLgorCitbc291cmNlLGpzb25dCistLS0tCit7CisgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICJAdmFsdWUiIDogMTAwCit9CistLS0tCisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KKzEwMAorLS0tLQorCis9PT0gTWFwCisKK01hcCBpcyBhIEpTT04gQXJyYXkgdG8gcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBhbGxvdyBmb3Igbm9uLVN0cmluZyBrZXlzLCB3aGljaCBpcyBub3QgcG9zc2libGUgaW4gSlNPTi4gVGhlIHVudHlwZWQKK3ZlcnNpb24gY29udmVydHMgY29tcGxleCB0eXBlcyB0byBKU09OIFN0cmluZy4KKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiQHR5cGUiOiAiZzpNYXAiLAorICAiQHZhbHVlIjogWworICAgIHsKKyAgICAgICJAdHlwZSI6ICJnOkxpc3QiLAorICAgICAgIkB2YWx1ZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIjogMQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiOiAyCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSI6IDMKKyAgICAgICAgfQorICAgICAgXQorICAgIH0sCisgICAgbnVsbCwKKyAgICAidGVzdCIsCisgICAgeworICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgIkB2YWx1ZSI6IDEyMworICAgIH0sCisgICAgeworICAgICAgIkB0eXBlIjogImc6RGF0ZVRpbWUiLAorICAgICAgIkB2YWx1ZSI6ICIyMDI0LTA5LTAyVDEwOjMwWiIKKyAgICB9LAorICAgICJyZWQiCisgIF0KK30KKy0tLS0KKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiWzEsIDIsIDNdIjogbnVsbCwKKyAgInRlc3QiOiAxMjMsCisgICIyMDI0LTA5LTAyVDEwOjMwWiI6ICJyZWQiCit9CistLS0tCisKKz09PSBOdWxsCisKK01hdGNoZXMgdGhlIEpTT04gTnVsbCBhbmQgZG9lc24ndCBoYXZlIHR5cGUgaW5mb3JtYXRpb24uCisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KK251bGwKKy0tLS0KKworW3NvdXJjZSx0ZXh0XQorLS0tLQorbnVsbAorLS0tLQorCis9PT0gUHJpbWl0aXZlIFBEVAorCitKU09OIE9iamVjdCB3aXRoIHR3byByZXF1aXJlZCBrZXlzOiAidHlwZSIgYW5kICJ2YWx1ZSIgKworInR5cGUiIGlzIGEgSlNPTiBTdHJpbmcgKworInZhbHVlIiBpcyBhIEpTT04gU3RyaW5nCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgIkB0eXBlIjogImc6UHJpbWl0aXZlUGR0IiwKKyAgIkB2YWx1ZSI6IHsKKyAgICAidHlwZSI6ICJ0aW5rZXJJZCIsCisgICAgInZhbHVlIjogIi0xMzYwODk0Nzk5IgorICB9Cit9CistLS0tCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgInR5cGUiOiAidGlua2VySWQiLAorICAidmFsdWUiOiAiLTEzNjA4OTQ3OTkiCit9CistLS0tCisKKz09PSBTZXQKKworQSBKU09OIEFycmF5LiBUaGUgdW50eXBlZCB2ZXJzaW9uIGNvbnZlcnRzIGNvbXBsZXggdHlwZXMgdG8gSlNPTiBTdHJpbmcuCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgIkB0eXBlIjogImc6U2V0IiwKKyAgIkB2YWx1ZSI6IFsKKyAgICBudWxsLAorICAgIHsKKyAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICJAdmFsdWUiOiAyCisgICAgfSwKKyAgICAicGVyc29uIiwKKyAgICB0cnVlCisgIF0KK30KKy0tLS0KKworW3NvdXJjZSx0ZXh0XQorLS0tLQorWyBudWxsLCAyLCAicGVyc29uIiwgdHJ1ZSBdCistLS0tCisKKz09PSBTdHJpbmcKKworTWF0Y2hlcyB0aGUgSlNPTiBTdHJpbmcgYW5kIGRvZXNuJ3QgaGF2ZSB0eXBlIGluZm9ybWF0aW9uLgorCitbc291cmNlLHRleHRdCistLS0tCisiYWJjIgorLS0tLQorCitbc291cmNlLHRleHRdCistLS0tCisiYWJjIgorLS0tLQorCis9PT0gVVVJRAorCitKU09OIFN0cmluZyBmb3JtIG9mIFVVSUQuCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgIkB0eXBlIiA6ICJnOlVVSUQiLAorICAiQHZhbHVlIiA6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiCit9CistLS0tCisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KKyI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiCistLS0tCisKKz09PSBFZGdlCisKK0pTT04gT2JqZWN0IChyZXF1aXJlZCBrZXlzIGFyZTogaWQsIGxhYmVsLCBpblYsIG91dFYpICsKKyJpZCIgaXMgYW55IEdyYXBoU09OIDQuMCB0eXBlICsKKyJpblYiLCAib3V0ViIgaXMgYW4gT2JqZWN0IHRoYXQgY29udGFpbnMgImlkIiB3aGljaCBpcyBhbnkgR3JhcGhTT04gNC4wIHR5cGUgYW5kICJsYWJlbCIgd2hpY2ggaXMgYSBKU09OIEFycmF5IG9mIGBTdHJpbmdgCisibGFiZWwiIGlzIGEgSlNPTiBBcnJheSBvZiBgU3RyaW5nYCArCisicHJvcGVydGllcyIgaXMgYW4gb3B0aW9uYWwgT2JqZWN0IGNvbnRhaW5pbmcgQXJyYXlzIG9mIGBnOlByb3BlcnR5YAorCitUaGUgdW50eXBlZCB2ZXJzaW9uIGhhcyBvbmUgYWRkaXRpb25hbCByZXF1aXJlZCBrZXkgInR5cGUiIHdoaWNoIGlzIGFsd2F5cyAiZWRnZSIuCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgIkB0eXBlIjogImc6RWRnZSIsCisgICJAdmFsdWUiOiB7CisgICAgImlkIjogeworICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgIkB2YWx1ZSI6IDEzCisgICAgfSwKKyAgICAibGFiZWwiOiBbCisgICAgICAiZGV2ZWxvcHMiCisgICAgXSwKKyAgICAiaW5WIjogeworICAgICAgImlkIjogeworICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICJAdmFsdWUiOiAxMAorICAgICAgfSwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInNvZnR3YXJlIgorICAgICAgXQorICAgIH0sCisgICAgIm91dFYiOiB7CisgICAgICAiaWQiOiB7CisgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgIkB2YWx1ZSI6IDEKKyAgICAgIH0sCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJwZXJzb24iCisgICAgICBdCisgICAgfSwKKyAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICJzaW5jZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImtleSI6ICJzaW5jZSIsCisgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIF0KKyAgICB9CisgIH0KK30KKy0tLS0KKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiaWQiOiAxMywKKyAgImxhYmVsIjogWworICAgICJkZXZlbG9wcyIKKyAgXSwKKyAgInR5cGUiOiAiZWRnZSIsCisgICJpblYiOiB7CisgICAgImlkIjogMTAsCisgICAgImxhYmVsIjogWworICAgICAgInNvZnR3YXJlIgorICAgIF0KKyAgfSwKKyAgIm91dFYiOiB7CisgICAgImlkIjogMSwKKyAgICAibGFiZWwiOiBbCisgICAgICAicGVyc29uIgorICAgIF0KKyAgfSwKKyAgInByb3BlcnRpZXMiOiB7CisgICAgInNpbmNlIjogWworICAgICAgMjAwOQorICAgIF0KKyAgfQorfQorLS0tLQorCis9PT0gR3JhcGgKKworYFRpbmtlckdyYXBoYCBoYXMgYSBjdXN0b20gc2VyaWFsaXplciB0aGF0IGlzIHJlZ2lzdGVyZWQgYXMgcGFydCBvZiB0aGUgYFRpbmtlcklvUmVnaXN0cnlgLiBHcmFwaCBpcyBhIEpTT04gT2JqZWN0IHdpdGgKK3R3byByZXF1aXJlZCBrZXlzOiAidmVydGljZXMiIGFuZCAiZWRnZXMiICsKKyJ2ZXJ0aWNlcyIgaXMgYW4gQXJyYXkgb2YgYGc6VmVydGV4YCArCisiZWRnZXMiIGlzIGFuIEFycmF5IG9mIGBnOkVkZ2VgCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgIkB0eXBlIjogImc6Z3JhcGgiLAorICAiQHZhbHVlIjogeworICAgICJ2ZXJ0aWNlcyI6IFsKKyAgICAgIHsKKyAgICAgICAgIkB0eXBlIjogImc6VmVydGV4IiwKKyAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIjogMQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgICBdLAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgIm5hbWUiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMAorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJtYXJrbyIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJuYW1lIgorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJsb2NhdGlvbiI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiA2CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogInNhbiBkaWVnbyIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDE5OTcKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgImVuZFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDAxCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogNworICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJzYW50YSBjcnV6IiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwMQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiA4CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogImJydXNzZWxzIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDUKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiA5CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogInNhbnRhIGZlIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorICAgICAgeworICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiA3CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAicGVyc29uIgorICAgICAgICAgIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogInN0ZXBoZW4iLAorICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAibmFtZSIKKyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAibG9jYXRpb24iOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMTAKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiY2VudHJldmlsbGUiLAorICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxOTkwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICJlbmRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwMAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDExCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogImR1bGxlcyIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDAKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgImVuZFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDA2CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMTIKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiAicHVyY2VsbHZpbGxlIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorICAgICAgeworICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiA4CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAicGVyc29uIgorICAgICAgICAgIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogIm1hdHRoaWFzIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiCisgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgImxvY2F0aW9uIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEzCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogImJyZW1lbiIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgImVuZFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDA3CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMTQKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiYmFsdGltb3JlIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMTEKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxNQorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJvYWtsYW5kIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAxMQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMTQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxNgorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJzZWF0dGxlIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAxNAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorICAgICAgeworICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiA5CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAicGVyc29uIgorICAgICAgICAgIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAzCisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogImRhbmllbCIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJuYW1lIgorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJsb2NhdGlvbiI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxNworICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJzcHJlbWJlcmciLAorICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxOTgyCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICJlbmRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDE4CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogImthaXNlcnNsYXV0ZXJuIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNQorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxOQorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJhYWNoZW4iLAorICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDA5CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleCIsCisgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDEwCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgXSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJuYW1lIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDQKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiAiZ3JlbWxpbiIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJuYW1lIgorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgIkB0eXBlIjogImc6VmVydGV4IiwKKyAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIjogMTEKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgICBdLAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgIm5hbWUiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogNQorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJ0aW5rZXJncmFwaCIsCisgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICJuYW1lIgorICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIF0sCisgICAgImVkZ2VzIjogWworICAgICAgeworICAgICAgICAiQHR5cGUiOiAiZzpFZGdlIiwKKyAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIjogMTMKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICJkZXZlbG9wcyIKKyAgICAgICAgICBdLAorICAgICAgICAgICJpblYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEwCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAib3V0ViI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgInNpbmNlIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAia2V5IjogInNpbmNlIiwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwOQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgIkB0eXBlIjogImc6RWRnZSIsCisgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDE0CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAiZGV2ZWxvcHMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJzaW5jZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJzaW5jZSIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMTAKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAxNQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInVzZXMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJza2lsbCI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJza2lsbCIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDQKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAxNgorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInVzZXMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJza2lsbCI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJza2lsbCIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDUKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAxNworICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgImRldmVsb3BzIgorICAgICAgICAgIF0sCisgICAgICAgICAgImluViI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogMTAKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAgICJvdXRWIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiA3CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAicGVyc29uIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAic2luY2UiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICJrZXkiOiAic2luY2UiLAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDEwCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBdCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LAorICAgICAgeworICAgICAgICAiQHR5cGUiOiAiZzpFZGdlIiwKKyAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIjogMTgKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICJkZXZlbG9wcyIKKyAgICAgICAgICBdLAorICAgICAgICAgICJpblYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDExCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAib3V0ViI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogNworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgInNpbmNlIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAia2V5IjogInNpbmNlIiwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAxMQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgIkB0eXBlIjogImc6RWRnZSIsCisgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDE5CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAidXNlcyIKKyAgICAgICAgICBdLAorICAgICAgICAgICJpblYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEwCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAib3V0ViI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogNworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgInNraWxsIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAia2V5IjogInNraWxsIiwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogNQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgIkB0eXBlIjogImc6RWRnZSIsCisgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDIwCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAidXNlcyIKKyAgICAgICAgICBdLAorICAgICAgICAgICJpblYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDExCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAib3V0ViI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogNworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgInNraWxsIjogWworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAia2V5IjogInNraWxsIiwKKyAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogNAorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsKKyAgICAgICAgIkB0eXBlIjogImc6RWRnZSIsCisgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDIxCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAiZGV2ZWxvcHMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDgKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJzaW5jZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJzaW5jZSIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMTIKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAyMgorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInVzZXMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDgKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJza2lsbCI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJza2lsbCIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDMKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAyMworICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInVzZXMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDgKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJza2lsbCI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJza2lsbCIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDMKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAyNAorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInVzZXMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDkKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJza2lsbCI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJza2lsbCIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDUKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAyNQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInVzZXMiCisgICAgICAgICAgXSwKKyAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0sCisgICAgICAgICAgIm91dFYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDkKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJwZXJzb24iCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICJza2lsbCI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImtleSI6ICJza2lsbCIsCisgICAgICAgICAgICAgICAgICAidmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDMKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJAdHlwZSI6ICJnOkVkZ2UiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAyNgorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInRyYXZlcnNlcyIKKyAgICAgICAgICBdLAorICAgICAgICAgICJpblYiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDExCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAgICAgICAib3V0ViI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogMTAKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBdCisgIH0KK30KKy0tLS0KKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAidmVydGljZXMiOiBbCisgICAgeworICAgICAgImlkIjogMSwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInBlcnNvbiIKKyAgICAgIF0sCisgICAgICAidHlwZSI6ICJ2ZXJ0ZXgiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJuYW1lIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDAsCisgICAgICAgICAgICAidmFsdWUiOiAibWFya28iCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAibG9jYXRpb24iOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogNiwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJzYW4gZGllZ28iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAxOTk3LAorICAgICAgICAgICAgICAiZW5kVGltZSI6IDIwMDEKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDcsCisgICAgICAgICAgICAidmFsdWUiOiAic2FudGEgY3J1eiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDEsCisgICAgICAgICAgICAgICJlbmRUaW1lIjogMjAwNAorICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogOCwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJicnVzc2VscyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDQsCisgICAgICAgICAgICAgICJlbmRUaW1lIjogMjAwNQorICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogOSwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJzYW50YSBmZSIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIF0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6IDcsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJwZXJzb24iCisgICAgICBdLAorICAgICAgInR5cGUiOiAidmVydGV4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAxLAorICAgICAgICAgICAgInZhbHVlIjogInN0ZXBoZW4iCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAibG9jYXRpb24iOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogMTAsCisgICAgICAgICAgICAidmFsdWUiOiAiY2VudHJldmlsbGUiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAxOTkwLAorICAgICAgICAgICAgICAiZW5kVGltZSI6IDIwMDAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDExLAorICAgICAgICAgICAgInZhbHVlIjogImR1bGxlcyIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDAsCisgICAgICAgICAgICAgICJlbmRUaW1lIjogMjAwNgorICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogMTIsCisgICAgICAgICAgICAidmFsdWUiOiAicHVyY2VsbHZpbGxlIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogMjAwNgorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogOCwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInBlcnNvbiIKKyAgICAgIF0sCisgICAgICAidHlwZSI6ICJ2ZXJ0ZXgiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJuYW1lIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDIsCisgICAgICAgICAgICAidmFsdWUiOiAibWF0dGhpYXMiCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAibG9jYXRpb24iOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogMTMsCisgICAgICAgICAgICAidmFsdWUiOiAiYnJlbWVuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogMjAwNCwKKyAgICAgICAgICAgICAgImVuZFRpbWUiOiAyMDA3CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAxNCwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJiYWx0aW1vcmUiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAyMDA3LAorICAgICAgICAgICAgICAiZW5kVGltZSI6IDIwMTEKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDE1LAorICAgICAgICAgICAgInZhbHVlIjogIm9ha2xhbmQiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAyMDExLAorICAgICAgICAgICAgICAiZW5kVGltZSI6IDIwMTQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDE2LAorICAgICAgICAgICAgInZhbHVlIjogInNlYXR0bGUiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAyMDE0CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBdCisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiA5LAorICAgICAgImxhYmVsIjogWworICAgICAgICAicGVyc29uIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogInZlcnRleCIsCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgIm5hbWUiOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogMywKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJkYW5pZWwiCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAibG9jYXRpb24iOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogMTcsCisgICAgICAgICAgICAidmFsdWUiOiAic3ByZW1iZXJnIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogMTk4MiwKKyAgICAgICAgICAgICAgImVuZFRpbWUiOiAyMDA1CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAgICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAxOCwKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJrYWlzZXJzbGF1dGVybiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDUsCisgICAgICAgICAgICAgICJlbmRUaW1lIjogMjAwOQorICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgICAgeworICAgICAgICAgICAgImlkIjogMTksCisgICAgICAgICAgICAidmFsdWUiOiAiYWFjaGVuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogMjAwOQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMTAsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgIF0sCisgICAgICAidHlwZSI6ICJ2ZXJ0ZXgiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJuYW1lIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDQsCisgICAgICAgICAgICAidmFsdWUiOiAiZ3JlbWxpbiIKKyAgICAgICAgICB9CisgICAgICAgIF0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6IDExLAorICAgICAgImxhYmVsIjogWworICAgICAgICAic29mdHdhcmUiCisgICAgICBdLAorICAgICAgInR5cGUiOiAidmVydGV4IiwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiA1LAorICAgICAgICAgICAgInZhbHVlIjogInRpbmtlcmdyYXBoIgorICAgICAgICAgIH0KKyAgICAgICAgXQorICAgICAgfQorICAgIH0KKyAgXSwKKyAgImVkZ2VzIjogWworICAgIHsKKyAgICAgICJpZCI6IDEzLAorICAgICAgImxhYmVsIjogWworICAgICAgICAiZGV2ZWxvcHMiCisgICAgICBdLAorICAgICAgInR5cGUiOiAiZWRnZSIsCisgICAgICAiaW5WIjogeworICAgICAgICAiaWQiOiAxMCwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJvdXRWIjogeworICAgICAgICAiaWQiOiAxLAorICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2luY2UiOiBbCisgICAgICAgICAgMjAwOQorICAgICAgICBdCisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAxNCwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgImRldmVsb3BzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTEsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogMSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNpbmNlIjogWworICAgICAgICAgIDIwMTAKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMTUsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ1c2VzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTAsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogMSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNraWxsIjogWworICAgICAgICAgIDQKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMTYsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ1c2VzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTEsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogMSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNraWxsIjogWworICAgICAgICAgIDUKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMTcsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJkZXZlbG9wcyIKKyAgICAgIF0sCisgICAgICAidHlwZSI6ICJlZGdlIiwKKyAgICAgICJpblYiOiB7CisgICAgICAgICJpZCI6IDEwLAorICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICBdCisgICAgICB9LAorICAgICAgIm91dFYiOiB7CisgICAgICAgICJpZCI6IDcsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAicGVyc29uIgorICAgICAgICBdCisgICAgICB9LAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJzaW5jZSI6IFsKKyAgICAgICAgICAyMDEwCisgICAgICAgIF0KKyAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6IDE4LAorICAgICAgImxhYmVsIjogWworICAgICAgICAiZGV2ZWxvcHMiCisgICAgICBdLAorICAgICAgInR5cGUiOiAiZWRnZSIsCisgICAgICAiaW5WIjogeworICAgICAgICAiaWQiOiAxMSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJvdXRWIjogeworICAgICAgICAiaWQiOiA3LAorICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2luY2UiOiBbCisgICAgICAgICAgMjAxMQorICAgICAgICBdCisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAxOSwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInVzZXMiCisgICAgICBdLAorICAgICAgInR5cGUiOiAiZWRnZSIsCisgICAgICAiaW5WIjogeworICAgICAgICAiaWQiOiAxMCwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJvdXRWIjogeworICAgICAgICAiaWQiOiA3LAorICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2tpbGwiOiBbCisgICAgICAgICAgNQorICAgICAgICBdCisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAyMCwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInVzZXMiCisgICAgICBdLAorICAgICAgInR5cGUiOiAiZWRnZSIsCisgICAgICAiaW5WIjogeworICAgICAgICAiaWQiOiAxMSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJvdXRWIjogeworICAgICAgICAiaWQiOiA3LAorICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAic2tpbGwiOiBbCisgICAgICAgICAgNAorICAgICAgICBdCisgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAyMSwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgImRldmVsb3BzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTAsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogOCwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNpbmNlIjogWworICAgICAgICAgIDIwMTIKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMjIsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ1c2VzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTAsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogOCwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNraWxsIjogWworICAgICAgICAgIDMKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMjMsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ1c2VzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTEsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogOCwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNraWxsIjogWworICAgICAgICAgIDMKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMjQsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ1c2VzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTAsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogOSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNraWxsIjogWworICAgICAgICAgIDUKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMjUsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ1c2VzIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogImVkZ2UiLAorICAgICAgImluViI6IHsKKyAgICAgICAgImlkIjogMTEsCisgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAib3V0ViI6IHsKKyAgICAgICAgImlkIjogOSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJwZXJzb24iCisgICAgICAgIF0KKyAgICAgIH0sCisgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgInNraWxsIjogWworICAgICAgICAgIDMKKyAgICAgICAgXQorICAgICAgfQorICAgIH0sCisgICAgeworICAgICAgImlkIjogMjYsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJ0cmF2ZXJzZXMiCisgICAgICBdLAorICAgICAgInR5cGUiOiAiZWRnZSIsCisgICAgICAiaW5WIjogeworICAgICAgICAiaWQiOiAxMSwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgXQorICAgICAgfSwKKyAgICAgICJvdXRWIjogeworICAgICAgICAiaWQiOiAxMCwKKyAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgICAgXQorICAgICAgfQorICAgIH0KKyAgXQorfQorLS0tLQorCis9PT0gUGF0aAorCitPYmplY3Qgd2l0aCB0d28gcmVxdWlyZWQga2V5czogImxhYmVscyIgYW5kICJvYmplY3RzIiArCisibGFiZWxzIiBpcyBhIGBnOkxpc3RgIG9mIGBnOlNldGAgb2YgbGFiZWxzIG9mIHRoZSBzdGVwcyB0cmF2ZXJzZWQgKworIm9iamVjdHMiIGlzIGEgYGc6TGlzdGAgb2Ygb2JqZWN0cyB0cmF2ZXJzZWQKKworW3NvdXJjZSxqc29uXQorLS0tLQoreworICAiQHR5cGUiOiAiZzpQYXRoIiwKKyAgIkB2YWx1ZSI6IHsKKyAgICAibGFiZWxzIjogeworICAgICAgIkB0eXBlIjogImc6TGlzdCIsCisgICAgICAiQHZhbHVlIjogWworICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogImc6U2V0IiwKKyAgICAgICAgICAiQHZhbHVlIjogW10KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlNldCIsCisgICAgICAgICAgIkB2YWx1ZSI6IFtdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiZzpTZXQiLAorICAgICAgICAgICJAdmFsdWUiOiBbXQorICAgICAgICB9CisgICAgICBdCisgICAgfSwKKyAgICAib2JqZWN0cyI6IHsKKyAgICAgICJAdHlwZSI6ICJnOkxpc3QiLAorICAgICAgIkB2YWx1ZSI6IFsKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleCIsCisgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIjogMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDEwCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICBdCisgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgXQorICAgIH0KKyAgfQorfQorLS0tLQorCitbc291cmNlLGpzb25dCistLS0tCit7CisgICJsYWJlbHMiOiBbCisgICAgW10sCisgICAgW10sCisgICAgW10KKyAgXSwKKyAgIm9iamVjdHMiOiBbCisgICAgeworICAgICAgImlkIjogMSwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInBlcnNvbiIKKyAgICAgIF0sCisgICAgICAidHlwZSI6ICJ2ZXJ0ZXgiCisgICAgfSwKKyAgICB7CisgICAgICAiaWQiOiAxMCwKKyAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgInNvZnR3YXJlIgorICAgICAgXSwKKyAgICAgICJ0eXBlIjogInZlcnRleCIKKyAgICB9LAorICAgIHsKKyAgICAgICJpZCI6IDExLAorICAgICAgImxhYmVsIjogWworICAgICAgICAic29mdHdhcmUiCisgICAgICBdLAorICAgICAgInR5cGUiOiAidmVydGV4IgorICAgIH0KKyAgXQorfQorLS0tLQorCis9PT0gUHJvcGVydHkKKworSlNPTiBPYmplY3Qgd2l0aCB0d28gcmVxdWlyZWQga2V5czogImtleSIgYW5kICJ2YWx1ZSIgKworImtleSIgaXMgYSBgU3RyaW5nYCArCisidmFsdWUiIGlzIGFueSBHcmFwaFNPTiA0LjAgdHlwZQorCitbc291cmNlLGpzb25dCistLS0tCit7CisgICJAdHlwZSI6ICJnOlByb3BlcnR5IiwKKyAgIkB2YWx1ZSI6IHsKKyAgICAia2V5IjogInNpbmNlIiwKKyAgICAidmFsdWUiOiB7CisgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAiQHZhbHVlIjogMjAwOQorICAgIH0KKyAgfQorfQorLS0tLQogCiBbc291cmNlLGpzb25dCiAtLS0tCkBAIC0yMTQsNDYzNCArMjMwNywzODggQEAKIH0KIC0tLS0KIAotPT09PSBUaW5rZXJHcmFwaAorPT09IFRyZWUKIAotYFRpbmtlckdyYXBoYCBoYXMgYSBjdXN0b20gc2VyaWFsaXplciB0aGF0IGlzIHJlZ2lzdGVyZWQgYXMgcGFydCBvZiB0aGUgYFRpbmtlcklvUmVnaXN0cnlgLgorSlNPTiBBcnJheSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBwb3NzaWJseSBuZXN0ZWQgSlNPTiBPYmplY3RzLCBlYWNoIGNvbnRhaW5pbmcgYSAia2V5IiBhbmQgInZhbHVlIiBwYWlyICsKKyJrZXkiIGlzIGFuIEVsZW1lbnQgKGBnOlZlcnRleGAsIGBnOkVkZ2VgLCBgZzpWZXJ0ZXhQcm9wZXJ0eWApICsKKyJ2YWx1ZSIgaXMgYSBgZzpUcmVlYCBtYWtpbmcgdGhpcyBhIHJlY3Vyc2l2ZWx5IGRlZmluZWQgc3RydWN0dXJlCiAKIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsKLSAgInZlcnRpY2VzIiA6IFsgewotICAgICJpZCIgOiAxLAotICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAidHlwZSIgOiAidmVydGV4IiwKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgImlkIiA6IDAsCi0gICAgICAgICJ2YWx1ZSIgOiAibWFya28iCi0gICAgICB9IF0sCi0gICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICJpZCIgOiA2LAotICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDE5OTcsCi0gICAgICAgICAgImVuZFRpbWUiIDogMjAwMQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJpZCIgOiA3LAotICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInN0YXJ0VGltZSIgOiAyMDAxLAotICAgICAgICAgICJlbmRUaW1lIiA6IDIwMDQKLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiaWQiIDogOCwKLSAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDQsCi0gICAgICAgICAgImVuZFRpbWUiIDogMjAwNQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJpZCIgOiA5LAotICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMjAwNQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogNywKLSAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgInR5cGUiIDogInZlcnRleCIsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICJpZCIgOiAxLAotICAgICAgICAidmFsdWUiIDogInN0ZXBoZW4iCi0gICAgICB9IF0sCi0gICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICJpZCIgOiAxMCwKLSAgICAgICAgInZhbHVlIiA6ICJjZW50cmV2aWxsZSIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDE5OTAsCi0gICAgICAgICAgImVuZFRpbWUiIDogMjAwMAotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJpZCIgOiAxMSwKLSAgICAgICAgInZhbHVlIiA6ICJkdWxsZXMiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInN0YXJ0VGltZSIgOiAyMDAwLAotICAgICAgICAgICJlbmRUaW1lIiA6IDIwMDYKLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiaWQiIDogMTIsCi0gICAgICAgICJ2YWx1ZSIgOiAicHVyY2VsbHZpbGxlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMjAwNgotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogOCwKLSAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgInR5cGUiIDogInZlcnRleCIsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICJpZCIgOiAyLAotICAgICAgICAidmFsdWUiIDogIm1hdHRoaWFzIgotICAgICAgfSBdLAotICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAiaWQiIDogMTMsCi0gICAgICAgICJ2YWx1ZSIgOiAiYnJlbWVuIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMjAwNCwKLSAgICAgICAgICAiZW5kVGltZSIgOiAyMDA3Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgImlkIiA6IDE0LAotICAgICAgICAidmFsdWUiIDogImJhbHRpbW9yZSIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDcsCi0gICAgICAgICAgImVuZFRpbWUiIDogMjAxMQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJpZCIgOiAxNSwKLSAgICAgICAgInZhbHVlIiA6ICJvYWtsYW5kIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMjAxMSwKLSAgICAgICAgICAiZW5kVGltZSIgOiAyMDE0Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgImlkIiA6IDE2LAotICAgICAgICAidmFsdWUiIDogInNlYXR0bGUiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInN0YXJ0VGltZSIgOiAyMDE0Ci0gICAgICAgIH0KLSAgICAgIH0gXQotICAgIH0KLSAgfSwgewotICAgICJpZCIgOiA5LAotICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAidHlwZSIgOiAidmVydGV4IiwKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgImlkIiA6IDMsCi0gICAgICAgICJ2YWx1ZSIgOiAiZGFuaWVsIgotICAgICAgfSBdLAotICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAiaWQiIDogMTcsCi0gICAgICAgICJ2YWx1ZSIgOiAic3ByZW1iZXJnIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMTk4MiwKLSAgICAgICAgICAiZW5kVGltZSIgOiAyMDA1Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgImlkIiA6IDE4LAotICAgICAgICAidmFsdWUiIDogImthaXNlcnNsYXV0ZXJuIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzdGFydFRpbWUiIDogMjAwNSwKLSAgICAgICAgICAiZW5kVGltZSIgOiAyMDA5Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgImlkIiA6IDE5LAotICAgICAgICAidmFsdWUiIDogImFhY2hlbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDkKLSAgICAgICAgfQotICAgICAgfSBdCi0gICAgfQotICB9LCB7Ci0gICAgImlkIiA6IDEwLAotICAgICJsYWJlbCIgOiAic29mdHdhcmUiLAotICAgICJ0eXBlIiA6ICJ2ZXJ0ZXgiLAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAiaWQiIDogNCwKLSAgICAgICAgInZhbHVlIiA6ICJncmVtbGluIgotICAgICAgfSBdCi0gICAgfQotICB9LCB7Ci0gICAgImlkIiA6IDExLAotICAgICJsYWJlbCIgOiAic29mdHdhcmUiLAotICAgICJ0eXBlIiA6ICJ2ZXJ0ZXgiLAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAiaWQiIDogNSwKLSAgICAgICAgInZhbHVlIiA6ICJ0aW5rZXJncmFwaCIKLSAgICAgIH0gXQotICAgIH0KLSAgfSBdLAotICAiZWRnZXMiIDogWyB7Ci0gICAgImlkIiA6IDEzLAotICAgICJsYWJlbCIgOiAiZGV2ZWxvcHMiLAotICAgICJ0eXBlIiA6ICJlZGdlIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogMTAsCi0gICAgIm91dFYiIDogMSwKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAic2luY2UiIDogMjAwOQotICAgIH0KLSAgfSwgewotICAgICJpZCIgOiAxNCwKLSAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDExLAotICAgICJvdXRWIiA6IDEsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNpbmNlIiA6IDIwMTAKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMTUsCi0gICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDEwLAotICAgICJvdXRWIiA6IDEsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNraWxsIiA6IDQKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMTYsCi0gICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDExLAotICAgICJvdXRWIiA6IDEsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNraWxsIiA6IDUKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMTcsCi0gICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgInR5cGUiIDogImVkZ2UiLAotICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgImluViIgOiAxMCwKLSAgICAib3V0ViIgOiA3LAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJzaW5jZSIgOiAyMDEwCi0gICAgfQotICB9LCB7Ci0gICAgImlkIiA6IDE4LAotICAgICJsYWJlbCIgOiAiZGV2ZWxvcHMiLAotICAgICJ0eXBlIiA6ICJlZGdlIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogMTEsCi0gICAgIm91dFYiIDogNywKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAic2luY2UiIDogMjAxMQotICAgIH0KLSAgfSwgewotICAgICJpZCIgOiAxOSwKLSAgICAibGFiZWwiIDogInVzZXMiLAotICAgICJ0eXBlIiA6ICJlZGdlIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogMTAsCi0gICAgIm91dFYiIDogNywKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAic2tpbGwiIDogNQotICAgIH0KLSAgfSwgewotICAgICJpZCIgOiAyMCwKLSAgICAibGFiZWwiIDogInVzZXMiLAotICAgICJ0eXBlIiA6ICJlZGdlIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogMTEsCi0gICAgIm91dFYiIDogNywKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAic2tpbGwiIDogNAotICAgIH0KLSAgfSwgewotICAgICJpZCIgOiAyMSwKLSAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDEwLAotICAgICJvdXRWIiA6IDgsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNpbmNlIiA6IDIwMTIKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMjIsCi0gICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDEwLAotICAgICJvdXRWIiA6IDgsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNraWxsIiA6IDMKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMjMsCi0gICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDExLAotICAgICJvdXRWIiA6IDgsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNraWxsIiA6IDMKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMjQsCi0gICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDEwLAotICAgICJvdXRWIiA6IDksCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNraWxsIiA6IDUKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMjUsCi0gICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAidHlwZSIgOiAiZWRnZSIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IDExLAotICAgICJvdXRWIiA6IDksCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgInNraWxsIiA6IDMKLSAgICB9Ci0gIH0sIHsKLSAgICAiaWQiIDogMjYsCi0gICAgImxhYmVsIiA6ICJ0cmF2ZXJzZXMiLAotICAgICJ0eXBlIiA6ICJlZGdlIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgImluViIgOiAxMSwKLSAgICAib3V0ViIgOiAxMAotICB9IF0KLX0KLS0tLS0KLQotPT09PSBWZXJ0ZXgKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiaWQiIDogMSwKLSAgImxhYmVsIiA6ICJwZXJzb24iLAotICAidHlwZSIgOiAidmVydGV4IiwKLSAgInByb3BlcnRpZXMiIDogewotICAgICJuYW1lIiA6IFsgewotICAgICAgImlkIiA6IDAsCi0gICAgICAidmFsdWUiIDogIm1hcmtvIgotICAgIH0gXSwKLSAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAiaWQiIDogNiwKLSAgICAgICJ2YWx1ZSIgOiAic2FuIGRpZWdvIiwKLSAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgInN0YXJ0VGltZSIgOiAxOTk3LAotICAgICAgICAiZW5kVGltZSIgOiAyMDAxCi0gICAgICB9Ci0gICAgfSwgewotICAgICAgImlkIiA6IDcsCi0gICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDEsCi0gICAgICAgICJlbmRUaW1lIiA6IDIwMDQKLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiaWQiIDogOCwKLSAgICAgICJ2YWx1ZSIgOiAiYnJ1c3NlbHMiLAotICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDQsCi0gICAgICAgICJlbmRUaW1lIiA6IDIwMDUKLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiaWQiIDogOSwKLSAgICAgICJ2YWx1ZSIgOiAic2FudGEgZmUiLAotICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDUKLSAgICAgIH0KLSAgICB9IF0KLSAgfQotfQotLS0tLQotCi09PT09IFZlcnRleFByb3BlcnR5Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgImlkIiA6IDAsCi0gICJ2YWx1ZSIgOiAibWFya28iLAotICAibGFiZWwiIDogIm5hbWUiCi19Ci0tLS0tCi0KLQotPT09IFJlcXVlc3RNZXNzYWdlCi0KLT09PT0gQXV0aGVudGljYXRpb24gUmVzcG9uc2UKLQotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHJlc3BvbnNlIHRoYXQgc2hvdWxkIGJlIG1hZGUgdG8gYSBTQVNMLWJhc2VkIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImF1dGhlbnRpY2F0aW9uIiwKLSAgInByb2Nlc3NvciIgOiAiIiwKLSAgImFyZ3MiIDogewotICAgICJzYXNsTWVjaGFuaXNtIiA6ICJQTEFJTiIsCi0gICAgInNhc2wiIDogIkFITjBaWEJvY0dobGJnQndZWE56ZDI5eVpBPT0iCi0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9uIEV2YWwKLQotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgc2Vzc2lvbiByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggcGFyYW1ldGVycy4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICJzZXNzaW9uIiwKLSAgImFyZ3MiIDogewotICAgICJncmVtbGluIiA6ICJnLlYoeCkiLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJzZXNzaW9uIiA6ICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogMQotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFNlc3Npb24gRXZhbCBBbGlhc2VkCi0KLVRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgc2Vzc2lvbiByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggYW4gYWxpYXMgdGhhdCBiaW5kcyB0aGUgYFRyYXZlcnNhbFNvdXJjZWAgb2YgImciIHRvICJzb2NpYWwiLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgImdyZW1saW4iIDogInNvY2lhbC5WKHgpIiwKLSAgICAibGFuZ3VhZ2UiIDogImdyZW1saW4tZ3Jvb3Z5IiwKLSAgICAiYWxpYXNlcyIgOiB7Ci0gICAgICAiZyIgOiAic29jaWFsIgotICAgIH0sCi0gICAgInNlc3Npb24iIDogInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiLAotICAgICJiaW5kaW5ncyIgOiB7Ci0gICAgICAieCIgOiAxCi0gICAgfQotICB9Ci19Ci0tLS0tCi0KLT09PT0gU2Vzc2lvbiBDbG9zZQotCi1UaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHJlcXVlc3QgdG8gY2xvc2UgYSBzZXNzaW9uLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiY2xvc2UiLAotICAicHJvY2Vzc29yIiA6ICJzZXNzaW9uIiwKLSAgImFyZ3MiIDogewotICAgICJzZXNzaW9uIiA6ICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIgotICB9Ci19Ci0tLS0tCi0KLT09PT0gU2Vzc2lvbmxlc3MgRXZhbAotCi1UaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBzZXNzaW9ubGVzcyByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggcGFyYW1ldGVycy4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICIiLAotICAiYXJncyIgOiB7Ci0gICAgImdyZW1saW4iIDogImcuVih4KSIsCi0gICAgImxhbmd1YWdlIiA6ICJncmVtbGluLWdyb292eSIsCi0gICAgImJpbmRpbmdzIiA6IHsKLSAgICAgICJ4IiA6IDEKLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9ubGVzcyBFdmFsIEFsaWFzZWQKLQotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgYSBzZXNzaW9ubGVzcyByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggYW4gYWxpYXMgdGhhdCBiaW5kcyB0aGUgYFRyYXZlcnNhbFNvdXJjZWAgb2YgImciIHRvICJzb2NpYWwiLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAiZ3JlbWxpbiIgOiAic29jaWFsLlYoeCkiLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJhbGlhc2VzIiA6IHsKLSAgICAgICJnIiA6ICJzb2NpYWwiCi0gICAgfSwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogMQotICAgIH0KLSAgfQotfQotLS0tLQotCi0KLT09PSBSZXNwb25zZU1lc3NhZ2UKLQotPT09PSBBdXRoZW50aWNhdGlvbiBDaGFsbGVuZ2UKLQotV2hlbiBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLCBhbiBpbml0aWFsIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB3aWxsIHJlc3VsdCBpbiBhbiBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuIFRoZSB0eXBpY2FsIHJlc3BvbnNlIG1lc3NhZ2Ugd2lsbCBhcHBlYXIgYXMgZm9sbG93cywgYnV0IGhhbmRsaW5nIGl0IGNvdWxkIGJlIGRpZmZlcmVudCBkZXBlbmRlbmRpbmcgb24gdGhlIFNBU0wgaW1wbGVtZW50YXRpb24gKGUuZy4gbXVsdGlwbGUgY2hhbGxlbmdlcyBtYXkgYmUgcmVxdWVzdGVkIGluIHNvbWUgY2FzZXMsIGJ1dCBub3QgaW4gdGhlIGRlZmF1bHQgcHJvdmlkZWQgYnkgR3JlbWxpbiBTZXJ2ZXIpLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIsCi0gICJzdGF0dXMiIDogewotICAgICJtZXNzYWdlIiA6ICIiLAotICAgICJjb2RlIiA6IDQwNywKLSAgICAiYXR0cmlidXRlcyIgOiB7IH0KLSAgfSwKLSAgInJlc3VsdCIgOiB7Ci0gICAgImRhdGEiIDogbnVsbCwKLSAgICAibWV0YSIgOiB7IH0KLSAgfQotfQotLS0tLQotCi09PT09IFN0YW5kYXJkIFJlc3VsdAotCi1UaGUgZm9sbG93aW5nIGBSZXNwb25zZU1lc3NhZ2VgIGlzIGEgdHlwaWNhbCBleGFtcGxlIG9mIHRoZSB0eXBpY2FsIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgR3JlbWxpbiBTZXJ2ZXIgd2lsbCByZXR1cm4gd2hlbiByZXR1cm5pbmcgcmVzdWx0cyBmcm9tIGEgc2NyaXB0LgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIsCi0gICJzdGF0dXMiIDogewotICAgICJtZXNzYWdlIiA6ICIiLAotICAgICJjb2RlIiA6IDIwMCwKLSAgICAiYXR0cmlidXRlcyIgOiB7IH0KLSAgfSwKLSAgInJlc3VsdCIgOiB7Ci0gICAgImRhdGEiIDogWyB7Ci0gICAgICAiaWQiIDogMSwKLSAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICJ0eXBlIiA6ICJ2ZXJ0ZXgiLAotICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAiaWQiIDogMCwKLSAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIgotICAgICAgICB9IF0sCi0gICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAiaWQiIDogNiwKLSAgICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiAxOTk3LAotICAgICAgICAgICAgImVuZFRpbWUiIDogMjAwMQorICAiQHR5cGUiOiAiZzpUcmVlIiwKKyAgIkB2YWx1ZSI6IFsKKyAgICB7CisgICAgICAia2V5IjogeworICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAxMAorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgInNvZnR3YXJlIgorICAgICAgICAgIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiA0CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgInZhbHVlIjogImdyZW1saW4iLAorICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAibmFtZSIKKyAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KICAgICAgICAgICB9Ci0gICAgICAgIH0sIHsKLSAgICAgICAgICAiaWQiIDogNywKLSAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogMjAwMSwKLSAgICAgICAgICAgICJlbmRUaW1lIiA6IDIwMDQKLSAgICAgICAgICB9Ci0gICAgICAgIH0sIHsKLSAgICAgICAgICAiaWQiIDogOCwKLSAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAic3RhcnRUaW1lIiA6IDIwMDQsCi0gICAgICAgICAgICAiZW5kVGltZSIgOiAyMDA1Ci0gICAgICAgICAgfQotICAgICAgICB9LCB7Ci0gICAgICAgICAgImlkIiA6IDksCi0gICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiAyMDA1Ci0gICAgICAgICAgfQotICAgICAgICB9IF0KLSAgICAgIH0KLSAgICB9IF0sCi0gICAgIm1ldGEiIDogeyB9Ci0gIH0KLX0KLS0tLS0KLQotW1tncmFwaHNvbi0yZDBdXQotPT0gVmVyc2lvbiAyLjAKLQotVmVyc2lvbiAyLjAgb2YgR3JhcGhTT04gd2FzIGZpcnN0IGludHJvZHVjZWQgb24gVGlua2VyUG9wIDMuMi4yLiBJdCB3YXMgZGVzaWduZWQgdG8gYmUgbGVzcyB0aWVkIHRvCi1saW5rOmh0dHBzOi8vZ2l0aHViLmNvbS9GYXN0ZXJYTUwvamFja3Nvbi1kYXRhYmluZFtKYWNrc29uXSAoYSBKVk0gbGlicmFyeSkgYW5kIHRvIGJlIGxlc3MgbG9zc3kgYXMgaXQgcGVydGFpbmVkIHRvCi10eXBlcy4gV2hpbGUgdGhlIDw8Z3JhcGhzb24tMWQwLEdyYXBoU09OIDEuMD4+IHNlY3Rpb24gZm9jdXNlZCBvbiBHcmFwaFNPTiB3aXRob3V0IGVtYmVkZGVkIHR5cGVzLCBHcmFwaFNPTiAyLjAgd2lsbAotZG8gdGhlIG9wcG9zaXRlIGFzIGVtYmVkZGVkIHR5cGVzIGlzIHRoZSBleHBlY3RlZCBtYW5uZXIgaW4gd2hpY2ggbm9uLUpWTSBsYW5ndWFnZXMgd2lsbCBpbnRlcmFjdCB3aXRoIFRpbmtlclBvcC4KLQotR3JhcGhTT04gMi4wIGlzIHJlZmVycmVkIHRvIGJ5IHRoZSBmb2xsb3dpbmcgbWltZSB0eXBlczoKLQotKiBgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjIuMCtqc29uYCAtIFZhbHVlcyBhcmUgdHlwZWQgYnkgd2F5IG9mIGEgImNvbXBsZXggb2JqZWN0IiB0aGF0IGRlZmluZXMgYSBgQHR5cGVJZGAgYW5kCi1gQHZhbHVlYC4gVGhlIGBAdHlwZUlkYCBpcyBjb21wb3NlZCBvZiB0d28gcGFydHM6IGEgbmFtZXNwYWNlIGFuZCBhIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1hdCAibmFtZXNwYWNlOnR5cGVuYW1lIi4gQQotbmFtZXNwYWNlIGFsbG93cyBUaW5rZXJQb3AgcHJvdmlkZXJzIGFuZCB1c2VycyB0byBjYXRlZ29yaXplIGN1c3RvbSB0eXBlcyB0aGF0IHRoZXkgbWF5IGltcGxlbWVudCBhbmQgYXZvaWQgY29sbGlzaW9uCi13aXRoIGV4aXN0aW5nIFRpbmtlclBvcCB0eXBlcy4gQnkgZGVmYXVsdCwgVGlua2VyUG9wIHR5cGVzIHdpbGwgaGF2ZSB0aGUgbmFtZXNwYWNlICJnIiAob3IgImd4IiBmb3IgImV4dGVuZGVkIiB0eXBlcykuCi0qIGBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12Mi4wK2pzb247dHlwZXM9ZmFsc2VgIC0gVmFsdWVzIGRvIG5vdCBoYXZlIHRoZWlyIHR5cGVzIGVtYmVkZGVkIGluIHRoZSBKU09OLiBUaGlzIGZvcm1hdAotZG9lcyBub3QgZm9sbG93IHRoZSAxLjAgdW50eXBlZCBmb3JtYXQgaW4gdGhhdCBpdCBkb2VzIG5vdCBpbmNsdWRlIGEgInR5cGUiIGZpZWxkIGZvciBgVmVydGV4YCBhbmQgYEVkZ2VgIG9iamVjdHMgYW5kCi1pdCBzZXJpYWxpemVzIHByb3BlcnR5IHZhbHVlcyBpbiB0aG9zZSBncmFwaCBvYmplY3RzIHdpdGggYSBgbGFiZWxgIGZpZWxkIHdoaWNoIGlzIHJlZHVuZGFudCBhcyB0aGUgImtleSIgZmllbGQgZm9yCi10aGF0IHByb3BlcnR5IHdpbGwgYWxyZWFkeSByZXByZXNlbnQgdGhhdCB2YWx1ZS4KLQotPT09IENvcmUKLQotPT09PSBDbGFzcwotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpDbGFzcyIsCi0gICJAdmFsdWUiIDogImphdmEuaW8uRmlsZSIKLX0KLS0tLS0KLQotPT09PSBEYXRlCi0KLVJlcHJlc2VudGluZyBhIG1pbGxpc2Vjb25kLXByZWNpc2lvbiBvZmZzZXQgZnJvbSB0aGUgdW5peCBlcG9jaC4gSW4gSmF2YSwgaXQgaXMgc2ltcGx5IGBEYXRlLmdldFRpbWUoKWAuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkRhdGUiLAotICAiQHZhbHVlIiA6IDE0ODE3NTAwNzYyOTUKLX0KLS0tLS0KLQotPT09PSBEb3VibGUKLQotV2hpbGUgdGhlIGBAdmFsdWVgIGlzIGV4cGVjdGVkIHRvIGJlIGEgSlNPTiBudW1iZXIsIGl0IG1pZ2h0IGFsc28gYmUgYSBgU3RyaW5nYCBvZiBgTmFOYCwgYEluZmluaXR5YCBvciBgLUluZmluaXR5YC4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQotLS0tLQotCi09PT09IEZsb2F0Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkZsb2F0IiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQotLS0tLQotCi09PT09IEludGVnZXIKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6SW50MzIiLAotICAiQHZhbHVlIiA6IDEwMAotfQotLS0tLQotCi09PT09IExvbmcKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6SW50NjQiLAotICAiQHZhbHVlIiA6IDEwMAotfQotLS0tLQotCi09PT09IFRpbWVzdGFtcAotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpUaW1lc3RhbXAiLAotICAiQHZhbHVlIiA6IDE0ODE3NTAwNzYyOTUKLX0KLS0tLS0KLQotPT09PSBVVUlECi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlVVSUQiLAotICAiQHZhbHVlIiA6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiCi19Ci0tLS0tCi0KLQotPT09IEdyYXBoIFN0cnVjdHVyZQotCi09PT09IEVkZ2UKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICJAdmFsdWUiIDogewotICAgICJpZCIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxMwotICAgIH0sCi0gICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAiaW5WIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEwCi0gICAgfSwKLSAgICAib3V0ViIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfSwKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAic2luY2UiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDIwMDkKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBQYXRoCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlBhdGgiLAotICAiQHZhbHVlIiA6IHsKLSAgICAibGFiZWxzIiA6IFsgWyBdLCBbIF0sIFsgXSBdLAotICAgICJvYmplY3RzIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIKLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZ3JlbWxpbiIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCiAgICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA1Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAidGlua2VyZ3JhcGgiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBQcm9wZXJ0eQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICJAdmFsdWUiIDogewotICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAidmFsdWUiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMjAwOQotICAgIH0sCi0gICAgImVsZW1lbnQiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEzCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAiZGV2ZWxvcHMiLAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBTdGFyR3JhcGgKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAic3RhclZlcnRleCIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAiaWQiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKICAgICAgIH0sCi0gICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgfQotICAgICAgICB9IF0sCi0gICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA2Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwgewotICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwgewotICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sIHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0gXQotICAgICAgfQotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFRpbmtlckdyYXBoCi0KLWBUaW5rZXJHcmFwaGAgaGFzIGEgY3VzdG9tIHNlcmlhbGl6ZXIgdGhhdCBpcyByZWdpc3RlcmVkIGFzIHBhcnQgb2YgdGhlIGBUaW5rZXJJb1JlZ2lzdHJ5YC4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogInRpbmtlcjpncmFwaCIsCi0gICJAdmFsdWUiIDogewotICAgICJ2ZXJ0aWNlcyIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJtYXJrbyIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA2Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FuIGRpZWdvIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKKyAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgIkB0eXBlIjogImc6VHJlZSIsCisgICAgICAgICJAdmFsdWUiOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgImtleSI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4IiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMTEKICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgZmUiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInN0ZXBoZW4iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdLAotICAgICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJjZW50cmV2aWxsZSIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTkwCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAwCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImR1bGxlcyIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAwCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA2Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInB1cmNlbGx2aWxsZSIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA2Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWF0dGhpYXMiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdLAotICAgICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTMKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJicmVtZW4iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTQKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJiYWx0aW1vcmUiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTUKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJvYWtsYW5kIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTEKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE2Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2VhdHRsZSIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDE0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZGFuaWVsIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE3Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic3ByZW1iZXJnIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5ODIKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE4Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAia2Fpc2Vyc2xhdXRlcm4iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJhYWNoZW4iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImdyZW1saW4iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInRpbmtlcmdyYXBoIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gXSwKLSAgICAiZWRnZXMiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTMKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDEwCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE1Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTcKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxOAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDExCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE5Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDMKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjMKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJza2lsbCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDI0Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyNQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDMKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjYKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ0cmF2ZXJzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBUcmVlCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlRyZWUiLAotICAiQHZhbHVlIiA6IFsgewotICAgICJrZXkiIDogewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6VHJlZSIsCi0gICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAia2V5IiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZ3JlbWxpbiIsCi0gICAgICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gXQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6VHJlZSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgICAgICJrZXkiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAidGlua2VyZ3JhcGgiLAotICAgICAgICAgICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKKyAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICJuYW1lIjogWworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDUKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAidGlua2VyZ3JhcGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0gXQorICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpUcmVlIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiBbIF0KKyAgICAgICAgICAgICJ2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIjogImc6VHJlZSIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiBbXQogICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9IF0KKyAgICAgICAgICB9CisgICAgICAgIF0KKyAgICAgIH0KICAgICB9Ci0gIH0gXQorICBdCiB9CiAtLS0tCiAKLT09PT0gVmVydGV4Citbc291cmNlLGpzb25dCistLS0tCitbCisgIHsKKyAgICAia2V5IjogeworICAgICAgImlkIjogMTAsCisgICAgICAibGFiZWwiOiBbCisgICAgICAgICJzb2Z0d2FyZSIKKyAgICAgIF0sCisgICAgICAidHlwZSI6ICJ2ZXJ0ZXgiLAorICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICJuYW1lIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6IDQsCisgICAgICAgICAgICAidmFsdWUiOiAiZ3JlbWxpbiIKKyAgICAgICAgICB9CisgICAgICAgIF0KKyAgICAgIH0KKyAgICB9LAorICAgICJ2YWx1ZSI6IFsKKyAgICAgIHsKKyAgICAgICAgImtleSI6IHsKKyAgICAgICAgICAiaWQiOiAxMSwKKyAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAic29mdHdhcmUiCisgICAgICAgICAgXSwKKyAgICAgICAgICAidHlwZSI6ICJ2ZXJ0ZXgiLAorICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgIm5hbWUiOiBbCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiA1LAorICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJ0aW5rZXJncmFwaCIKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgInZhbHVlIjogW10KKyAgICAgIH0KKyAgICBdCisgIH0KK10KKy0tLS0KKworPT09IFZlcnRleAorCitKU09OIE9iamVjdCB3aXRoIHJlcXVpcmVkIGtleXM6ICJpZCIsICJsYWJlbCIgKworImlkIiBpcyBhbnkgR3JhcGhTT04gNC4wIHR5cGUgKworImxhYmVsIiBpcyBhIEpTT04gQXJyYXkgb2YgYFN0cmluZ2AgKworInByb3BlcnRpZXMiIGlzIGFuIG9wdGlvbmFsIE9iamVjdCBjb250YWluaW5nIEFycmF5cyBvZiBgZzpWZXJ0ZXhQcm9wZXJ0eWAKKworVGhlIHVudHlwZWQgdmVyc2lvbiBoYXMgb25lIGFkZGl0aW9uYWwgcmVxdWlyZWQga2V5ICJ0eXBlIiB3aGljaCBpcyBhbHdheXMgInZlcnRleCIuIEFsc28gbm90ZSB0aGUgZGlmZmVyZW5jZSBpbiBob3cKK2xhYmVscyBhcmUgd3JpdHRlbi4gTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiB0aGUgYFZlcnRleFByb3BlcnR5YCBzZWN0aW9uLgogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAiQHZhbHVlIiA6IHsKLSAgICAiaWQiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMQorICAiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAiQHZhbHVlIjogeworICAgICJpZCI6IHsKKyAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICJAdmFsdWUiOiAxCiAgICAgfSwKLSAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgfQotICAgICAgfSBdLAotICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNgotICAgICAgICAgIH0sCi0gICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgIH0sCi0gICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NworICAgICJsYWJlbCI6IFsKKyAgICAgICJwZXJzb24iCisgICAgXSwKKyAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICJuYW1lIjogWworICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSI6IDAKICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgfQorICAgICAgICAgICAgInZhbHVlIjogIm1hcmtvIiwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgIm5hbWUiCisgICAgICAgICAgICBdCiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgIH0sCi0gICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQorICAgICAgXSwKKyAgICAgICJsb2NhdGlvbiI6IFsKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiA2CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJzYW4gZGllZ28iLAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAibG9jYXRpb24iCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICJzdGFydFRpbWUiOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxOTk3CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJlbmRUaW1lIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwMQorICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiA3CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKKyAgICAgICAgICAgICJ2YWx1ZSI6ICJzYW50YSBjcnV6IiwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwMQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDQKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiA4CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgInZhbHVlIjogImJydXNzZWxzIiwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNAorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDUKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiA5CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgInZhbHVlIjogInNhbnRhIGZlIiwKKyAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNQorICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gXQorICAgICAgXQogICAgIH0KICAgfQogfQogLS0tLQogCi09PT09IFZlcnRleFByb3BlcnR5Ci0KIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsKLSAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImlkIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAiQHZhbHVlIiA6IDAKLSAgICB9LAotICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICJ2ZXJ0ZXgiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMQotICAgIH0sCi0gICAgImxhYmVsIiA6ICJuYW1lIgotICB9Ci19Ci0tLS0tCi0KLQotPT09IEdyYXBoIFByb2Nlc3MKLQotPT09PSBCYXJyaWVyCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkJhcnJpZXIiLAotICAiQHZhbHVlIiA6ICJub3JtU2FjayIKLX0KLS0tLS0KLQotPT09PSBCaW5kaW5nCi0KLUEgIkJpbmRpbmciIHJlZmVycyB0byBhIGBCeXRlY29kZS5CaW5kaW5nYC4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6QmluZGluZyIsCi0gICJAdmFsdWUiIDogewotICAgICJrZXkiIDogIngiLAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfQotICB9Ci19Ci0tLS0tCi0KLT09PT0gQnl0ZWNvZGUKLQotVGhlIGZvbGxvd2luZyBgQnl0ZWNvZGVgIGV4YW1wbGUgcmVwcmVzZW50cyB0aGUgdHJhdmVyc2FsIG9mIGBnLlYoKS5oYXNMYWJlbCgncGVyc29uJykub3V0KCkuaW4oKS50cmVlKClgLiBPYnZpb3VzbHkgdGhlIHNlcmlhbGl6ZWQgYEJ5dGVjb2RlYCB3b3VkbCBiZSBxdWl0ZSBkaWZmZXJlbnQgZm9yIHRoZSBlbmRsZXNzIHZhcmlhdGlvbnMgb2YgY29tbWFuZHMgdGhhdCBjb3VsZCBiZSB1c2VkIHRvZ2V0aGVyIGluIHRoZSBHcmVtbGluIGxhbmd1YWdlLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpCeXRlY29kZSIsCi0gICJAdmFsdWUiIDogewotICAgICJzdGVwIiA6IFsgWyAiViIgXSwgWyAiaGFzTGFiZWwiLCAicGVyc29uIiBdLCBbICJvdXQiIF0sIFsgImluIiBdLCBbICJ0cmVlIiBdIF0KLSAgfQotfQotLS0tLQotCi09PT09IENhcmRpbmFsaXR5Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkNhcmRpbmFsaXR5IiwKLSAgIkB2YWx1ZSIgOiAibGlzdCIKLX0KLS0tLS0KLQotPT09PSBDb2x1bW4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6Q29sdW1uIiwKLSAgIkB2YWx1ZSIgOiAia2V5cyIKLX0KLS0tLS0KLQotPT09PSBEaXJlY3Rpb24KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6RGlyZWN0aW9uIiwKLSAgIkB2YWx1ZSIgOiAiT1VUIgotfQotLS0tLQotCi09PT09IERUCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkRUIiwKLSAgIkB2YWx1ZSIgOiAibWludXRlIgotfQotLS0tLQotCi09PT09IExhbWJkYQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpMYW1iZGEiLAotICAiQHZhbHVlIiA6IHsKLSAgICAic2NyaXB0IiA6ICJ7IGl0LmdldCgpIH0iLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJhcmd1bWVudHMiIDogMQotICB9Ci19Ci0tLS0tCi0KLT09PT0gTWVyZ2UKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6TWVyZ2UiLAotICAiQHZhbHVlIiA6ICJvbk1hdGNoIgotfQotLS0tLQotCi09PT09IE1ldHJpY3MKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICJAdmFsdWUiIDogewotICAgICJkdXIiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgfSwKLSAgICAiY291bnRzIiA6IHsKLSAgICAgICJ0cmF2ZXJzZXJDb3VudCIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICJAdmFsdWUiIDogNAorICAiaWQiOiAxLAorICAibGFiZWwiOiBbCisgICAgInBlcnNvbiIKKyAgXSwKKyAgInR5cGUiOiAidmVydGV4IiwKKyAgInByb3BlcnRpZXMiOiB7CisgICAgIm5hbWUiOiBbCisgICAgICB7CisgICAgICAgICJpZCI6IDAsCisgICAgICAgICJ2YWx1ZSI6ICJtYXJrbyIKKyAgICAgIH0KKyAgICBdLAorICAgICJsb2NhdGlvbiI6IFsKKyAgICAgIHsKKyAgICAgICAgImlkIjogNiwKKyAgICAgICAgInZhbHVlIjogInNhbiBkaWVnbyIsCisgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICJzdGFydFRpbWUiOiAxOTk3LAorICAgICAgICAgICJlbmRUaW1lIjogMjAwMQorICAgICAgICB9CiAgICAgICB9LAotICAgICAgImVsZW1lbnRDb3VudCIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICJAdmFsdWUiIDogNAotICAgICAgfQotICAgIH0sCi0gICAgIm5hbWUiIDogIlRpbmtlckdyYXBoU3RlcCh2ZXJ0ZXgsW35sYWJlbC5lcShwZXJzb24pXSkiLAotICAgICJhbm5vdGF0aW9ucyIgOiB7Ci0gICAgICAicGVyY2VudER1ciIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgIH0KLSAgICB9LAotICAgICJpZCIgOiAiNy4wLjAoKSIsCi0gICAgIm1ldHJpY3MiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImR1ciIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICB9LAotICAgICAgICAiY291bnRzIiA6IHsKLSAgICAgICAgICAidHJhdmVyc2VyQ291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgIH0sCi0gICAgICAgICAgImVsZW1lbnRDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibmFtZSIgOiAiVmVydGV4U3RlcChPVVQsdmVydGV4KSIsCi0gICAgICAgICJhbm5vdGF0aW9ucyIgOiB7Ci0gICAgICAgICAgInBlcmNlbnREdXIiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpZCIgOiAiMy4wLjAoKSIKLSAgICAgIH0KLSAgICB9IF0KLSAgfQotfQotLS0tLQotCi09PT09IE9wZXJhdG9yCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOk9wZXJhdG9yIiwKLSAgIkB2YWx1ZSIgOiAic3VtIgotfQotLS0tLQotCi09PT09IE9yZGVyCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOk9yZGVyIiwKLSAgIkB2YWx1ZSIgOiAic2h1ZmZsZSIKLX0KLS0tLS0KLQotPT09PSBQCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJndCIsCi0gICAgInZhbHVlIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDAKLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBQIHdpdGhpbgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAid2l0aGluIiwKLSAgICAidmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBQIHdpdGhvdXQKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogIndpdGhvdXQiLAotICAgICJ2YWx1ZSIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAyCi0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBQIGFuZAotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAiYW5kIiwKLSAgICAidmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAiZ3QiLAotICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAwCisgICAgICB7CisgICAgICAgICJpZCI6IDcsCisgICAgICAgICJ2YWx1ZSI6ICJzYW50YSBjcnV6IiwKKyAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDEsCisgICAgICAgICAgImVuZFRpbWUiOiAyMDA0CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7CisgICAgICAgICJpZCI6IDgsCisgICAgICAgICJ2YWx1ZSI6ICJicnVzc2VscyIsCisgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICJzdGFydFRpbWUiOiAyMDA0LAorICAgICAgICAgICJlbmRUaW1lIjogMjAwNQorICAgICAgICB9CisgICAgICB9LAorICAgICAgeworICAgICAgICAiaWQiOiA5LAorICAgICAgICAidmFsdWUiOiAic2FudGEgZmUiLAorICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAic3RhcnRUaW1lIjogMjAwNQogICAgICAgICB9CiAgICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogImx0IiwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gXQorICAgIF0KICAgfQogfQogLS0tLQogCi09PT09IFAgb3IKKz09PSBWZXJ0ZXhQcm9wZXJ0eQorCitKU09OIE9iamVjdCB3aXRoIHJlcXVpcmVkIGtleXM6ICJpZCIsICJ2YWx1ZSIsICJsYWJlbCIgKworImlkIiBpcyBhbnkgdHlwZSBHcmFwaFNPTiA0LjAgdHlwZSArCisidmFsdWUiIGlzIGFueSB0eXBlIEdyYXBoU09OIDQuMCB0eXBlICsKKyJsYWJlbCIgaXMgYSBKU09OIEFycmF5IG9mIGBTdHJpbmdgICsKKyJwcm9wZXJ0aWVzIiBpcyBhbiBvcHRpb25hbCBPYmplY3QgZm9yIG1ldGFwcm9wZXJ0aWVzIHdoZXJlIGVhY2gga2V5IGlzIGEgbWV0YS1wcm9wZXJ0eSBuYW1lIGFuZCBlYWNoIHZhbHVlIGlzIGFueQorR3JhcGhTT04gNC4wIHR5cGUuCisKK05PVEU6IFdoZW4gYSBgVmVydGV4UHJvcGVydHlgIGlzIHNlcmlhbGl6ZWQgYXMgYSBzdGFuZGFsb25lIHR5cGVkIHZhbHVlIChpLmUuIHdyYXBwZWQgaW4gYSBgZzpWZXJ0ZXhQcm9wZXJ0eWAgZW52ZWxvcGUpLAordGhlICJsYWJlbCIgZmllbGQgaXMgYWx3YXlzIGluY2x1ZGVkLiBIb3dldmVyLCB3aGVuIHZlcnRleCBwcm9wZXJ0aWVzIGFyZSBzZXJpYWxpemVkIGFzIHBhcnQgb2YgYSBgVmVydGV4YCBpbiB1bnR5cGVkCittb2RlLCB0aGUgImxhYmVsIiBpcyBvbWl0dGVkIGJlY2F1c2UgdGhlIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZ3JvdXBlZCB1bmRlciB0aGVpciBwcm9wZXJ0eSBrZXkgbmFtZSBpbiB0aGUgY29udGFpbmluZworb2JqZWN0LCBtYWtpbmcgdGhlIGxhYmVsIHJlZHVuZGFudC4KIAogW3NvdXJjZSxqc29uXQogLS0tLQogewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogIm9yIiwKLSAgICAidmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAiZ3QiLAotICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAid2l0aGluIiwKLSAgICAgICAgInZhbHVlIiA6IFsgewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAtMQotICAgICAgICB9LCB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IC0xMAotICAgICAgICB9LCB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IC0xMDAKLSAgICAgICAgfSBdCi0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBQaWNrCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlBpY2siLAotICAiQHZhbHVlIiA6ICJhbnkiCi19Ci0tLS0tCi0KLT09PT0gUG9wCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlBvcCIsCi0gICJAdmFsdWUiIDogImFsbCIKLX0KLS0tLS0KLQotPT09PSBTY29wZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpTY29wZSIsCi0gICJAdmFsdWUiIDogImxvY2FsIgotfQotLS0tLQotCi09PT09IFQKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6VCIsCi0gICJAdmFsdWUiIDogImxhYmVsIgotfQotLS0tLQotCi09PT09IFRleHRQCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlRleHRQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAiY29udGFpbmluZyIsCi0gICAgInZhbHVlIiA6ICJhcmsiCi0gIH0KLX0KLS0tLS0KLQotPT09PSBUcmF2ZXJzYWxNZXRyaWNzCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlRyYXZlcnNhbE1ldHJpY3MiLAotICAiQHZhbHVlIiA6IHsKLSAgICAiZHVyIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgIkB2YWx1ZSIgOiAwLjAwNAotICAgIH0sCi0gICAgIm1ldHJpY3MiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImR1ciIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICB9LAotICAgICAgICAiY291bnRzIiA6IHsKLSAgICAgICAgICAidHJhdmVyc2VyQ291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgIH0sCi0gICAgICAgICAgImVsZW1lbnRDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibmFtZSIgOiAiVGlua2VyR3JhcGhTdGVwKHZlcnRleCxbfmxhYmVsLmVxKHBlcnNvbildKSIsCi0gICAgICAgICJhbm5vdGF0aW9ucyIgOiB7Ci0gICAgICAgICAgInBlcmNlbnREdXIiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpZCIgOiAiNy4wLjAoKSIKLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImR1ciIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICB9LAotICAgICAgICAiY291bnRzIiA6IHsKLSAgICAgICAgICAidHJhdmVyc2VyQ291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTMKLSAgICAgICAgICB9LAotICAgICAgICAgICJlbGVtZW50Q291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTMKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJuYW1lIiA6ICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIiwKLSAgICAgICAgImFubm90YXRpb25zIiA6IHsKLSAgICAgICAgICAicGVyY2VudER1ciIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjUuMAotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlkIiA6ICIyLjAuMCgpIgotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiZHVyIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgICAgIH0sCi0gICAgICAgICJjb3VudHMiIDogewotICAgICAgICAgICJ0cmF2ZXJzZXJDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAiZWxlbWVudENvdW50IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJuYW1lIiA6ICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIiwKLSAgICAgICAgImFubm90YXRpb25zIiA6IHsKLSAgICAgICAgICAicGVyY2VudER1ciIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjUuMAotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlkIiA6ICIzLjAuMCgpIgotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiZHVyIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgICAgIH0sCi0gICAgICAgICJjb3VudHMiIDogewotICAgICAgICAgICJ0cmF2ZXJzZXJDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZWxlbWVudENvdW50IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJuYW1lIiA6ICJUcmVlU3RlcCIsCi0gICAgICAgICJhbm5vdGF0aW9ucyIgOiB7Ci0gICAgICAgICAgInBlcmNlbnREdXIiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpZCIgOiAiNC4wLjAoKSIKLSAgICAgIH0KLSAgICB9IF0KLSAgfQotfQotLS0tLQotCi09PT09IFRyYXZlcnNhbFN0cmF0ZWd5Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIjogImc6SGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kiLAorICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCiAgICJAdmFsdWUiOiB7Ci0gICAgImNvbmYiOiB7Ci0gICAgICAiaGFsdGVkVHJhdmVyc2VyRmFjdG9yeSI6ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeSIKKyAgICAiaWQiOiB7CisgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAiQHZhbHVlIjogMAogICAgIH0sCi0gICAgImZxY24iOiAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5IgorICAgICJ2YWx1ZSI6ICJtYXJrbyIsCisgICAgImxhYmVsIjogWworICAgICAgIm5hbWUiCisgICAgXQogICB9CiB9CiAtLS0tCiAKLT09PT0gVHJhdmVyc2VyCitbc291cmNlLGpzb25dCistLS0tCit7CisgICJpZCI6IDAsCisgICJ2YWx1ZSI6ICJtYXJrbyIsCisgICJsYWJlbCI6IFsKKyAgICAibmFtZSIKKyAgXQorfQorLS0tLQorCis9PT0gQnVsa1NldAorCitKU09OIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIGV4cGFuZGVkIGVudHJpZXMgb2YgdGhlIEJ1bGtTZXQuCisKK05PVEU6IEJ1bGtTZXQgaXMgc2VyaWFsaXplZCB0byBnOkxpc3Qgc28gdGhlcmUgaXMgbm8gQnVsa1NldCBkZXNlcmlhbGl6ZXIuCiAKIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsKLSAgIkB0eXBlIiA6ICJnOlRyYXZlcnNlciIsCi0gICJAdmFsdWUiIDogewotICAgICJidWxrIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdLAotICAgICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTk3Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgY3J1eiIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYnJ1c3NlbHMiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQorICAiQHR5cGUiOiAiZzpMaXN0IiwKKyAgIkB2YWx1ZSI6IFsKKyAgICAibWFya28iLAorICAgICJqb3NoIiwKKyAgICAiam9zaCIKKyAgXQogfQogLS0tLQogCi0KLT09PSBSZXF1ZXN0TWVzc2FnZQotCi09PT09IEF1dGhlbnRpY2F0aW9uIFJlc3BvbnNlCi0KLVRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIHRoZSByZXNwb25zZSB0aGF0IHNob3VsZCBiZSBtYWRlIHRvIGEgU0FTTC1iYXNlZCBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCi0KIFtzb3VyY2UsanNvbl0KIC0tLS0KLXsKLSAgInJlcXVlc3RJZCIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOlVVSUQiLAotICAgICJAdmFsdWUiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIKLSAgfSwKLSAgIm9wIiA6ICJhdXRoZW50aWNhdGlvbiIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAic2FzbE1lY2hhbmlzbSIgOiAiUExBSU4iLAotICAgICJzYXNsIiA6ICJBSE4wWlhCb2NHaGxiZ0J3WVhOemQyOXlaQT09IgotICB9Ci19CitbICJtYXJrbyIsICJqb3NoIiwgImpvc2giIF0KIC0tLS0KIAotPT09PSBTZXNzaW9uIEV2YWwKKz09PSBEaXJlY3Rpb24KIAotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgc2Vzc2lvbiByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggcGFyYW1ldGVycy4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6IHsKLSAgICAiQHR5cGUiIDogImc6VVVJRCIsCi0gICAgIkB2YWx1ZSIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IgotICB9LAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICJzZXNzaW9uIiwKLSAgImFyZ3MiIDogewotICAgICJncmVtbGluIiA6ICJnLlYoeCkiLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJzZXNzaW9uIiA6ICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9uIEV2YWwgQWxpYXNlZAotCi1UaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHNlc3Npb24gcmVxdWVzdCBmb3IgYSBzY3JpcHQgZXZhbHVhdGlvbiB3aXRoIGFuIGFsaWFzIHRoYXQgYmluZHMgdGhlIGBUcmF2ZXJzYWxTb3VyY2VgIG9mICJnIiB0byAic29jaWFsIi4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6IHsKLSAgICAiQHR5cGUiIDogImc6VVVJRCIsCi0gICAgIkB2YWx1ZSIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IgotICB9LAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICJzZXNzaW9uIiwKLSAgImFyZ3MiIDogewotICAgICJncmVtbGluIiA6ICJzb2NpYWwuVih4KSIsCi0gICAgImxhbmd1YWdlIiA6ICJncmVtbGluLWdyb292eSIsCi0gICAgImFsaWFzZXMiIDogewotICAgICAgImciIDogInNvY2lhbCIKLSAgICB9LAotICAgICJzZXNzaW9uIiA6ICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9uIENsb3NlCi0KLVRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVxdWVzdCB0byBjbG9zZSBhIHNlc3Npb24uCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgInJlcXVlc3RJZCIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOlVVSUQiLAotICAgICJAdmFsdWUiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIKLSAgfSwKLSAgIm9wIiA6ICJjbG9zZSIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgInNlc3Npb24iIDogInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiCi0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9ubGVzcyBFdmFsCi0KLVRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIHNlc3Npb25sZXNzIHJlcXVlc3QgZm9yIGEgc2NyaXB0IGV2YWx1YXRpb24gd2l0aCBwYXJhbWV0ZXJzLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogewotICAgICJAdHlwZSIgOiAiZzpVVUlEIiwKLSAgICAiQHZhbHVlIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciCi0gIH0sCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAiZ3JlbWxpbiIgOiAiZy5WKHgpIiwKLSAgICAibGFuZ3VhZ2UiIDogImdyZW1saW4tZ3Jvb3Z5IiwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9ubGVzcyBFdmFsIEFsaWFzZWQKLQotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgYSBzZXNzaW9ubGVzcyByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggYW4gYWxpYXMgdGhhdCBiaW5kcyB0aGUgYFRyYXZlcnNhbFNvdXJjZWAgb2YgImciIHRvICJzb2NpYWwiLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogewotICAgICJAdHlwZSIgOiAiZzpVVUlEIiwKLSAgICAiQHZhbHVlIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciCi0gIH0sCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAiZ3JlbWxpbiIgOiAic29jaWFsLlYoeCkiLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJhbGlhc2VzIiA6IHsKLSAgICAgICJnIiA6ICJzb2NpYWwiCi0gICAgfSwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLS0tLS0KLQotPT09IFJlc3BvbnNlTWVzc2FnZQotCi09PT09IEF1dGhlbnRpY2F0aW9uIENoYWxsZW5nZQotCi1XaGVuIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQsIGFuIGluaXRpYWwgcmVxdWVzdCB0byB0aGUgc2VydmVyIHdpbGwgcmVzdWx0IGluIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4gVGhlIHR5cGljYWwgcmVzcG9uc2UgbWVzc2FnZSB3aWxsIGFwcGVhciBhcyBmb2xsb3dzLCBidXQgaGFuZGxpbmcgaXQgY291bGQgYmUgZGlmZmVyZW50IGRlcGVuZGVuZGluZyBvbiB0aGUgU0FTTCBpbXBsZW1lbnRhdGlvbiAoZS5nLiBtdWx0aXBsZSBjaGFsbGVuZ2VzIG1heWJlIHJlcXVlc3RlZCBpbiBzb21lIGNhc2VzLCBidXQgbm90IGluIHRoZSBkZWZhdWx0IHByb3ZpZGVkIGJ5IEdyZW1saW4gU2VydmVyKS4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLAotICAic3RhdHVzIiA6IHsKLSAgICAibWVzc2FnZSIgOiAiIiwKLSAgICAiY29kZSIgOiA0MDcsCi0gICAgImF0dHJpYnV0ZXMiIDogeyB9Ci0gIH0sCi0gICJyZXN1bHQiIDogewotICAgICJkYXRhIiA6IG51bGwsCi0gICAgIm1ldGEiIDogeyB9Ci0gIH0KLX0KLS0tLS0KLQotPT09PSBTdGFuZGFyZCBSZXN1bHQKLQotVGhlIGZvbGxvd2luZyBgUmVzcG9uc2VNZXNzYWdlYCBpcyBhIHR5cGljYWwgZXhhbXBsZSBvZiB0aGUgdHlwaWNhbCBzdWNjZXNzZnVsIHJlc3BvbnNlIEdyZW1saW4gU2VydmVyIHdpbGwgcmV0dXJuIHdoZW4gcmV0dXJuaW5nIHJlc3VsdHMgZnJvbSBhIHNjcmlwdC4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLAotICAic3RhdHVzIiA6IHsKLSAgICAibWVzc2FnZSIgOiAiIiwKLSAgICAiY29kZSIgOiAyMDAsCi0gICAgImF0dHJpYnV0ZXMiIDogeyB9Ci0gIH0sCi0gICJyZXN1bHQiIDogewotICAgICJkYXRhIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAidmVydGV4IiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICAgInZlcnRleCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICJ2ZXJ0ZXgiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IF0sCi0gICAgIm1ldGEiIDogeyB9Ci0gIH0KLX0KLS0tLS0KLQotCi09PT0gRXh0ZW5kZWQKLQotTm90ZSB0aGF0IHRoZSAiZXh0ZW5kZWQiIHR5cGVzIHJlcXVpcmUgdGhlIGFkZGl0aW9uIG9mIHRoZSBzZXBhcmF0ZSBgR3JhcGhTT05YTW9kdWxlVjJgIG1vZHVsZSBhcyBmb2xsb3dzOgotCi1bc291cmNlLGphdmFdCi0tLS0tCi1tYXBwZXIgPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpLgotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjIuYnVpbGQoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKQotLS0tLQotCi09PT09IEJpZ0RlY2ltYWwKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkJpZ0RlY2ltYWwiLAotICAiQHZhbHVlIiA6IDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMQotfQotLS0tLQotCi09PT09IEJpZ0ludGVnZXIKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkJpZ0ludGVnZXIiLAotICAiQHZhbHVlIiA6IDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMQotfQotLS0tLQotCi09PT09IEJ5dGUKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkJ5dGUiLAotICAiQHZhbHVlIiA6IDEKLX0KLS0tLS0KLQotPT09PSBCeXRlQnVmZmVyCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpCeXRlQnVmZmVyIiwKLSAgIkB2YWx1ZSIgOiAiYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxIgotfQotLS0tLQotCi09PT09IENoYXIKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkNoYXIiLAotICAiQHZhbHVlIiA6ICJ4IgotfQotLS0tLQotCi09PT09IER1cmF0aW9uCi0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIGBEdXJhdGlvbmAgb2YgZml2ZSBkYXlzLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6RHVyYXRpb24iLAotICAiQHZhbHVlIiA6ICJQVDEyMEgiCi19Ci0tLS0tCi0KLT09PT0gSW5ldEFkZHJlc3MKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkluZXRBZGRyZXNzIiwKLSAgIkB2YWx1ZSIgOiAibG9jYWxob3N0IgotfQotLS0tLQotCi09PT09IEluc3RhbnQKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4Okluc3RhbnQiLAotICAiQHZhbHVlIiA6ICIyMDE2LTEyLTE0VDE2OjM5OjE5LjM0OVoiCi19Ci0tLS0tCi0KLT09PT0gTG9jYWxEYXRlCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpMb2NhbERhdGUiLAotICAiQHZhbHVlIiA6ICIyMDE2LTAxLTAxIgotfQotLS0tLQotCi09PT09IExvY2FsRGF0ZVRpbWUKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkxvY2FsRGF0ZVRpbWUiLAotICAiQHZhbHVlIiA6ICIyMDE2LTAxLTAxVDEyOjMwIgotfQotLS0tLQotCi09PT09IExvY2FsVGltZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6TG9jYWxUaW1lIiwKLSAgIkB2YWx1ZSIgOiAiMTI6MzA6NDUiCi19Ci0tLS0tCi0KLT09PT0gTW9udGhEYXkKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4Ok1vbnRoRGF5IiwKLSAgIkB2YWx1ZSIgOiAiLS0wMS0wMSIKLX0KLS0tLS0KLQotPT09PSBPZmZzZXREYXRlVGltZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6T2Zmc2V0RGF0ZVRpbWUiLAotICAiQHZhbHVlIiA6ICIyMDA3LTEyLTAzVDEwOjE1OjMwKzAxOjAwIgotfQotLS0tLQotCi09PT09IE9mZnNldFRpbWUKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4Ok9mZnNldFRpbWUiLAotICAiQHZhbHVlIiA6ICIxMDoxNTozMCswMTowMCIKLX0KLS0tLS0KLQotPT09PSBQZXJpb2QKLQotVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIGEgYFBlcmlvZGAgb2Ygb25lIHllYXIsIHNpeCBtb250aHMgYW5kIGZpZnRlZW4gZGF5cy4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OlBlcmlvZCIsCi0gICJAdmFsdWUiIDogIlAxWTZNMTVEIgotfQotLS0tLQotCi09PT09IFNob3J0Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpJbnQxNiIsCi0gICJAdmFsdWUiIDogMTAwCi19Ci0tLS0tCi0KLT09PT0gWWVhcgotCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgb2YgdGhlIGBZZWFyYCAiMjAxNiIuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpZZWFyIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNiIKLX0KLS0tLS0KLQotPT09PSBZZWFyTW9udGgKLQotVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIGEgYFllYXJNb250aGAgb2YgIkp1bmUgMjAxNiIKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OlllYXJNb250aCIsCi0gICJAdmFsdWUiIDogIjIwMTYtMDYiCi19Ci0tLS0tCi0KLT09PT0gWm9uZWREYXRlVGltZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6Wm9uZWREYXRlVGltZSIsCi0gICJAdmFsdWUiIDogIjIwMTYtMTItMjNUMTI6MTI6MjQuMDAwMDAwMDM2KzAyOjAwW0dNVCswMjowMF0iCi19Ci0tLS0tCi0KLT09PT0gWm9uZU9mZnNldAotCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgYSBgWm9uZU9mZnNldGAgb2YgdGhyZWUgaG91cnMsIHNpeCBtaW51dGVzLCBhbmQgbmluZSBzZWNvbmRzLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6Wm9uZU9mZnNldCIsCi0gICJAdmFsdWUiIDogIiswMzowNjowOSIKLX0KLS0tLS0KLQotW1tncmFwaHNvbi0zZDBdXQotPT0gVmVyc2lvbiAzLjAKLQotVmVyc2lvbiAzLjAgb2YgR3JhcGhTT04gd2FzIGZpcnN0IGludHJvZHVjZWQgb24gVGlua2VyUG9wIDMuMy4wIGFuZCBpcyByZXByZXNlbnRlZCBieSB0aGUgYGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbmAKLW1pbWUgdHlwZS4gSXQgd2FzIGludHJvZHVjZWQgYXMgb25seSBoYXZpbmcgZW1iZWRkZWQgdHlwZXMuIEl0IGlzIHF1aXRlIHNpbWlsYXIgdG8gR3JhcGhTT04gMi4wIHdpdGggZW1iZWRkZWQgdHlwZXMKLWFuZCBpbiBtb3N0IGNhc2VzIHdpbGwgYXBwZWFyIGNvbXBhdGlibGUgdG8gdGhlIGV5ZSwgaG93ZXZlciB0aGVyZSBhcmUgc29tZSBjcml0aWNhbCBkaWZmZXJlbmNlcy4gR3JhcGhTT04gMi4wIHJlbGllZAotb24gSlNPTiBkYXRhIHR5cGVzIGZvciBjb2xsZWN0aW9ucyBsaWtlIGBNYXBgIGFuZCBgTGlzdGAuIEluIEdyYXBoU09OIDMuMCwgdGhlcmUgaXMgZXhwbGljaXQgdHlwZWQgc3VwcG9ydCBmb3IgYE1hcGAsCi1gTGlzdGAgYW5kIGBTZXRgIGFzIEdyZW1saW4gcmVsaWVzIG9uIHRob3NlIHR5cGVzIGluIHF1aXRlIHNwZWNpZmljIHdheXMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCB0aGUKLUpTT04gZGVmaW5pdGlvbnMgb2YgdGhvc2UgY29sbGVjdGlvbnMuIEluIHRoZSBjYXNlIG9mIGBMaXN0YCBhbmQgYFNldGAsIGl0IHdhcyBpbXBvcnRhbnQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUKLXR3byBhbmQgZm9yIGBNYXBgIGl0IHdhcyBuZWNlc3NhcnkgdG8gaGF2ZSB0aGUgYWJpbGl0eSB0byByZXR1cm4gYE1hcGAgaW5zdGFuY2VzIHRoYXQgZGlkIG5vdCBoYXZlIGBTdHJpbmdgIGtleXMKLShlLmcuIGBnLlYoKS5vdXQoKS5ncm91cENvdW50KClgKS4KLQotQXMgb2YgVGlua2VyUG9wIDMuNy4wLCBHcmFwaFNPTiAzLjAgYWxzbyBoYXMgYSB0eXBlbGVzcyByZXByZXNlbnRhdGlvbiByZWZlcmVuY2VkIGJ5IHRoZQotYGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbjt0eXBlcz1mYWxzZWAuIFRoaXMgZm9ybWF0IG1hdGNoZXMgdGhlIGZvcm1hdCBkZXZlbG9wZWQgZm9yIDEuMC4KLQotPT09IENvcmUKLQotPT09PSBDbGFzcwotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpDbGFzcyIsCi0gICJAdmFsdWUiIDogImphdmEuaW8uRmlsZSIKLX0KLS0tLS0KLQotPT09PSBEYXRlCi0KLVJlcHJlc2VudGluZyBhIG1pbGxpc2Vjb25kLXByZWNpc2lvbiBvZmZzZXQgZnJvbSB0aGUgdW5peCBlcG9jaC4gSW4gSmF2YSwgaXQgaXMgc2ltcGx5IGBEYXRlLmdldFRpbWUoKWAuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkRhdGUiLAotICAiQHZhbHVlIiA6IDE0ODE3NTAwNzYyOTUKLX0KLS0tLS0KLQotPT09PSBEb3VibGUKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQotLS0tLQotCi09PT09IEZsb2F0Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkZsb2F0IiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQotLS0tLQotCi09PT09IEludGVnZXIKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6SW50MzIiLAotICAiQHZhbHVlIiA6IDEwMAotfQotLS0tLQotCi09PT09IExpc3QKLQotTGlzdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IGNvbGxlY3Rpb24gdHlwZXMgYXMgSlNPTiBpcyBub3QgZXhwbGljaXQgZW5vdWdoIGZvciBhbGwgb2YgR3JlbWxpbidzIHJlcXVpcmVtZW50cy4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICJAdmFsdWUiIDogWyB7Ci0gICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAiQHZhbHVlIiA6IDEKLSAgfSwgInBlcnNvbiIsIHRydWUgXQotfQotLS0tLQotCi09PT09IExvbmcKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6SW50NjQiLAotICAiQHZhbHVlIiA6IDEwMAotfQotLS0tLQotCi09PT09IE1hcAotCi1NYXAgaXMgcmVkZWZpbmVkIHNvIHRoYXQgdG8gcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBhbGxvdyBmb3Igbm9uLVN0cmluZyBrZXlzLCB3aGljaCBpcyBub3QgcG9zc2libGUgaW4gSlNPTi4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6TWFwIiwKLSAgIkB2YWx1ZSIgOiBbIHsKLSAgICAiQHR5cGUiIDogImc6RGF0ZSIsCi0gICAgIkB2YWx1ZSIgOiAxNDgxNzUwMDc2Mjk1Ci0gIH0sICJyZWQiLCB7Ci0gICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMgotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDMKLSAgICB9IF0KLSAgfSwgewotICAgICJAdHlwZSIgOiAiZzpEYXRlIiwKLSAgICAiQHZhbHVlIiA6IDE0ODE3NTAwNzYyOTUKLSAgfSwgInRlc3QiLCB7Ci0gICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAiQHZhbHVlIiA6IDEyMwotICB9IF0KLX0KLS0tLS0KLQotPT09PSBTZXQKLQotQWxsb3dzIGEgSlNPTiBjb2xsZWN0aW9uIHRvIGJlaGF2ZSBhcyBhIFNldC4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6U2V0IiwKLSAgIkB2YWx1ZSIgOiBbIHsKLSAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICJAdmFsdWUiIDogMQotICB9LCAicGVyc29uIiwgdHJ1ZSBdCi19Ci0tLS0tCi0KLT09PT0gVGltZXN0YW1wCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlRpbWVzdGFtcCIsCi0gICJAdmFsdWUiIDogMTQ4MTc1MDA3NjI5NQotfQotLS0tLQotCi09PT09IFVVSUQKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6VVVJRCIsCi0gICJAdmFsdWUiIDogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIKLX0KLS0tLS0KLQotCi09PT0gR3JhcGggU3RydWN0dXJlCi0KLT09PT0gRWRnZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImlkIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEzCi0gICAgfSwKLSAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMTAKLSAgICB9LAotICAgICJvdXRWIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFBhdGgKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6UGF0aCIsCi0gICJAdmFsdWUiIDogewotICAgICJsYWJlbHMiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlNldCIsCi0gICAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpTZXQiLAotICAgICAgICAiQHZhbHVlIiA6IFsgXQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6U2V0IiwKLSAgICAgICAgIkB2YWx1ZSIgOiBbIF0KLSAgICAgIH0gXQotICAgIH0sCi0gICAgIm9iamVjdHMiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgfSwKLSAgICAgICAgICAibGFiZWwiIDogInBlcnNvbiIKLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgICAgfSwKLSAgICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIgotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAic29mdHdhcmUiCi0gICAgICAgIH0KLSAgICAgIH0gXQotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFByb3BlcnR5Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImtleSIgOiAic2luY2UiLAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAyMDA5Ci0gICAgfQotICB9Ci19Ci0tLS0tCi0KLT09PT0gVGlua2VyR3JhcGgKLQotYFRpbmtlckdyYXBoYCBoYXMgYSBjdXN0b20gc2VyaWFsaXplciB0aGF0IGlzIHJlZ2lzdGVyZWQgYXMgcGFydCBvZiB0aGUgYFRpbmtlcklvUmVnaXN0cnlgLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAidGlua2VyOmdyYXBoIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInZlcnRpY2VzIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic3RlcGhlbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImNlbnRyZXZpbGxlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZHVsbGVzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEyCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAicHVyY2VsbHZpbGxlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJtYXR0aGlhcyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJyZW1lbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA3Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJhbHRpbW9yZSIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA3Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDExCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm9ha2xhbmQiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzZWF0dGxlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDMKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJkYW5pZWwiLAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdLAotICAgICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTcKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzcHJlbWJlcmciLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk4MgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTgKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJrYWlzZXJzbGF1dGVybiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA5Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImFhY2hlbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA5Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZ3JlbWxpbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJ0aW5rZXJncmFwaCIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gXSwKLSAgICAiZWRnZXMiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTMKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDkKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE1Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA1Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTcKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTAKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxOAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE5Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjMKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJza2lsbCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDI0Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyNQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjYKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ0cmF2ZXJzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBWZXJ0ZXgKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImlkIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LAotICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICB9LAotICAgICAgICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgfQotICAgICAgfSBdLAotICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNgotICAgICAgICAgIH0sCi0gICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgIH0sCi0gICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKLSAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICB9LAotICAgICAgICAgICJ2YWx1ZSIgOiAiYnJ1c3NlbHMiLAotICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICAgIH0sCi0gICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBdCi0gICAgfQotICB9Ci19Ci0tLS0tCi0KLT09PT0gVmVydGV4UHJvcGVydHkKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAiQHZhbHVlIiA6IHsKLSAgICAiaWQiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICJAdmFsdWUiIDogMAotICAgIH0sCi0gICAgInZhbHVlIiA6ICJtYXJrbyIsCi0gICAgImxhYmVsIiA6ICJuYW1lIgotICB9Ci19Ci0tLS0tCi0KLQotPT09IEdyYXBoIFByb2Nlc3MKLQotPT09PSBCYXJyaWVyCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkJhcnJpZXIiLAotICAiQHZhbHVlIiA6ICJub3JtU2FjayIKLX0KLS0tLS0KLQotPT09PSBCaW5kaW5nCi0KLUEgIkJpbmRpbmciIHJlZmVycyB0byBhIGBCeXRlY29kZS5CaW5kaW5nYC4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6QmluZGluZyIsCi0gICJAdmFsdWUiIDogewotICAgICJrZXkiIDogIngiLAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfQotICB9Ci19Ci0tLS0tCi0KLT09PT0gQnVsa1NldAotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpCdWxrU2V0IiwKLSAgIkB2YWx1ZSIgOiBbICJtYXJrbyIsIHsKLSAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICJAdmFsdWUiIDogMQotICB9LCAiam9zaCIsIHsKLSAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICJAdmFsdWUiIDogMgotICB9IF0KLX0KLS0tLS0KLQotPT09PSBCeXRlY29kZQotCi1UaGUgZm9sbG93aW5nIGBCeXRlY29kZWAgZXhhbXBsZSByZXByZXNlbnRzIHRoZSB0cmF2ZXJzYWwgb2YgYGcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS5vdXQoKS5pbigpLnRyZWUoKWAuIE9idmlvdXNseSB0aGUgc2VyaWFsaXplZCBgQnl0ZWNvZGVgIHdvdWRsIGJlIHF1aXRlIGRpZmZlcmVudCBmb3IgdGhlIGVuZGxlc3MgdmFyaWF0aW9ucyBvZiBjb21tYW5kcyB0aGF0IGNvdWxkIGJlIHVzZWQgdG9nZXRoZXIgaW4gdGhlIEdyZW1saW4gbGFuZ3VhZ2UuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOkJ5dGVjb2RlIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInN0ZXAiIDogWyBbICJWIiBdLCBbICJoYXNMYWJlbCIsICJwZXJzb24iIF0sIFsgIm91dCIgXSwgWyAiaW4iIF0sIFsgInRyZWUiIF0gXQotICB9Ci19Ci0tLS0tCi0KLT09PT0gQ2FyZGluYWxpdHkKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6Q2FyZGluYWxpdHkiLAotICAiQHZhbHVlIiA6ICJsaXN0IgotfQotLS0tLQotCi09PT09IENvbHVtbgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpDb2x1bW4iLAotICAiQHZhbHVlIiA6ICJrZXlzIgotfQotLS0tLQotCi09PT09IERpcmVjdGlvbgorSlNPTiBTdHJpbmcgb2YgdGhlIGVudW0gdmFsdWUuCiAKIFtzb3VyY2UsanNvbl0KIC0tLS0KQEAgLTQ4NTEsMjgzICsyNjk4LDE0IEBACiB9CiAtLS0tCiAKLT09PT0gRFQKLQotW3NvdXJjZSxqc29uXQorW3NvdXJjZSx0ZXh0XQogLS0tLQotewotICAiQHR5cGUiIDogImc6RFQiLAotICAiQHZhbHVlIiA6ICJtaW51dGUiCi19CisiT1VUIgogLS0tLQogCi09PT09IExhbWJkYQorPT09IFQKIAotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6TGFtYmRhIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInNjcmlwdCIgOiAieyBpdC5nZXQoKSB9IiwKLSAgICAibGFuZ3VhZ2UiIDogImdyZW1saW4tZ3Jvb3Z5IiwKLSAgICAiYXJndW1lbnRzIiA6IDEKLSAgfQotfQotLS0tLQotCi09PT09IE1lcmdlCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOk1lcmdlIiwKLSAgIkB2YWx1ZSIgOiAib25NYXRjaCIKLX0KLS0tLS0KLQotPT09PSBNZXRyaWNzCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAiQHZhbHVlIiA6IHsKLSAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAiQHZhbHVlIiA6IFsgImR1ciIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgIH0sICJjb3VudHMiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAidHJhdmVyc2VyQ291bnQiLCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICJAdmFsdWUiIDogNAotICAgICAgfSwgImVsZW1lbnRDb3VudCIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICB9IF0KLSAgICB9LCAibmFtZSIsICJUaW5rZXJHcmFwaFN0ZXAodmVydGV4LFt+bGFiZWwuZXEocGVyc29uKV0pIiwgImFubm90YXRpb25zIiwgewotICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAiQHZhbHVlIiA6IFsgInBlcmNlbnREdXIiLCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgIH0gXQotICAgIH0sICJpZCIsICI3LjAuMCgpIiwgIm1ldHJpY3MiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICJAdmFsdWUiIDogWyAiZHVyIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgICAgICAgfSwgImNvdW50cyIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbICJ0cmF2ZXJzZXJDb3VudCIsIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICB9LCAiZWxlbWVudENvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICAgIH0gXQotICAgICAgICAgIH0sICJuYW1lIiwgIlZlcnRleFN0ZXAoT1VULHZlcnRleCkiLCAiYW5ub3RhdGlvbnMiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogWyAicGVyY2VudER1ciIsIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjUuMAotICAgICAgICAgICAgfSBdCi0gICAgICAgICAgfSwgImlkIiwgIjMuMC4wKCkiIF0KLSAgICAgICAgfQotICAgICAgfSBdCi0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBPcGVyYXRvcgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpPcGVyYXRvciIsCi0gICJAdmFsdWUiIDogInN1bSIKLX0KLS0tLS0KLQotPT09PSBPcmRlcgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpPcmRlciIsCi0gICJAdmFsdWUiIDogInNodWZmbGUiCi19Ci0tLS0tCi0KLT09PT0gUAotCi1gUGAgZXhwZWN0cyBhIHNpbmdsZSB2YWx1ZSBvZiBhIGBMaXN0YCBvZiB2YWx1ZXMuIFRoZXJlIGlzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGBMaXN0YCB2YWx1ZXMgd2hlbiBpdCBjb21lcyB0byBgd2l0aGluYCwgYHdpdGhvdXRgLCBgaW5zaWRlYCwgYG91dHNpZGVgIGFuZCBgYmV0d2VlbmAuIEZvciBgaW5zaWRlYCwgYG91dHNpZGVgIGFuZCBgYmV0d2VlbmAsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBjb2xsZWN0aW9uIGNvbnRhaW4gdHdvIG9iamVjdHMgKHRoZSByZXN0IHdpbGwgYmUgaWdub3JlZCkgYW5kIHRob3NlIHR3byBvYmplY3RzIGJlY29tZSB0aGUgYXJndW1lbnRzIHRvIHRob3NlIG1ldGhvZHMuIEZvciBgd2l0aGluYCBhbmQgYHdpdGhvdXRgLCB0aGVzZSBtZXRob2RzIHdpbGwgYWNjZXB0IGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgY29sbGVjdGlvbi4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogImd0IiwKLSAgICAidmFsdWUiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMAotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFAgd2l0aGluCi0KLVBsZWFzZSBzZWUgPDxfcCxQPj4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gYHdpdGhpbmAuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJ3aXRoaW4iLAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0gXQotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFAgd2l0aG91dAotCi1QbGVhc2Ugc2VlIDw8X3AsUD4+IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGB3aXRoaW5gLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAid2l0aG91dCIsCi0gICAgInZhbHVlIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKLSAgICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICJAdmFsdWUiIDogMQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDIKLSAgICAgIH0gXQotICAgIH0KLSAgfQotfQotLS0tLQotCi09PT09IFAgYW5kCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJhbmQiLAotICAgICJ2YWx1ZSIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpQIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAicHJlZGljYXRlIiA6ICJndCIsCi0gICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpQIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAicHJlZGljYXRlIiA6ICJsdCIsCi0gICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IF0KLSAgfQotfQotLS0tLQotCi09PT09IFAgb3IKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogIm9yIiwKLSAgICAidmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAiZ3QiLAotICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAid2l0aGluIiwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IC0xCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogLTEwCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogLTEwMAotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBQaWNrCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlBpY2siLAotICAiQHZhbHVlIiA6ICJhbnkiCi19Ci0tLS0tCi0KLT09PT0gUG9wCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJnOlBvcCIsCi0gICJAdmFsdWUiIDogImFsbCIKLX0KLS0tLS0KLQotPT09PSBTY29wZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpTY29wZSIsCi0gICJAdmFsdWUiIDogImxvY2FsIgotfQotLS0tLQotCi09PT09IFQKK0pTT04gU3RyaW5nIG9mIHRoZSBlbnVtIHZhbHVlLgogCiBbc291cmNlLGpzb25dCiAtLS0tCkBAIC01MTM3LDc3NSArMjcxNSw0MzAgQEAKIH0KIC0tLS0KIAotPT09PSBUZXh0UAorW3NvdXJjZSx0ZXh0XQorLS0tLQorImxhYmVsIgorLS0tLQorCis9PT0gTWVyZ2UKKworSlNPTiBTdHJpbmcgb2YgdGhlIGVudW0gdmFsdWUuCiAKIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsKLSAgIkB0eXBlIiA6ICJnOlRleHRQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAiY29udGFpbmluZyIsCi0gICAgInZhbHVlIiA6ICJhcmsiCi0gIH0KKyAgIkB0eXBlIiA6ICJnOk1lcmdlIiwKKyAgIkB2YWx1ZSIgOiAib25DcmVhdGUiCiB9CiAtLS0tCiAKLT09PT0gVHJhdmVyc2FsTWV0cmljcwotCi1bc291cmNlLGpzb25dCitbc291cmNlLHRleHRdCiAtLS0tCi17Ci0gICJAdHlwZSIgOiAiZzpUcmF2ZXJzYWxNZXRyaWNzIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICJAdmFsdWUiIDogMC4wMDQKLSAgICB9LCAibWV0cmljcyIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKLSAgICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgICB9LCAiY291bnRzIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInRyYXZlcnNlckNvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICAgIH0sICJlbGVtZW50Q291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgICAgfSBdCi0gICAgICAgICAgfSwgIm5hbWUiLCAiVGlua2VyR3JhcGhTdGVwKHZlcnRleCxbfmxhYmVsLmVxKHBlcnNvbildKSIsICJhbm5vdGF0aW9ucyIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbICJwZXJjZW50RHVyIiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAiaWQiLCAiNy4wLjAoKSIgXQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgICB9LCAiY291bnRzIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInRyYXZlcnNlckNvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEzCi0gICAgICAgICAgICB9LCAiZWxlbWVudENvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEzCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAibmFtZSIsICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIiwgImFubm90YXRpb25zIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInBlcmNlbnREdXIiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICAgIH0gXQotICAgICAgICAgIH0sICJpZCIsICIyLjAuMCgpIiBdCi0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IFsgImR1ciIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICAgIH0sICJjb3VudHMiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogWyAidHJhdmVyc2VyQ291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgfSwgImVsZW1lbnRDb3VudCIsIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAibmFtZSIsICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIiwgImFubm90YXRpb25zIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInBlcmNlbnREdXIiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICAgIH0gXQotICAgICAgICAgIH0sICJpZCIsICIzLjAuMCgpIiBdCi0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IFsgImR1ciIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICAgIH0sICJjb3VudHMiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogWyAidHJhdmVyc2VyQ291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgfSwgImVsZW1lbnRDb3VudCIsIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAibmFtZSIsICJUcmVlU3RlcCIsICJhbm5vdGF0aW9ucyIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbICJwZXJjZW50RHVyIiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAiaWQiLCAiNC4wLjAoKSIgXQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQorIm9uQ3JlYXRlIgogLS0tLQogCi09PT09IFRyYXZlcnNhbFN0cmF0ZWd5Ci0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIjogImc6SGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kiLAotICAiQHZhbHVlIjogewotICAgICJjb25mIjogewotICAgICAgImhhbHRlZFRyYXZlcnNlckZhY3RvcnkiOiAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEZhY3RvcnkiCi0gICAgfSwKLSAgICAiZnFjbiI6ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kiCi0gIH0KLX0KLS0tLS0KLQotPT09PSBUcmF2ZXJzZXIKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImc6VHJhdmVyc2VyIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImJ1bGsiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICJAdmFsdWUiIDogMQotICAgIH0sCi0gICAgInZhbHVlIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJtYXJrbyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA2Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FuIGRpZWdvIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgZmUiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19Ci0tLS0tCi0KLQotPT09IFJlcXVlc3RNZXNzYWdlCi0KLT09PT0gQXV0aGVudGljYXRpb24gUmVzcG9uc2UKLQotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHJlc3BvbnNlIHRoYXQgc2hvdWxkIGJlIG1hZGUgdG8gYSBTQVNMLWJhc2VkIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImF1dGhlbnRpY2F0aW9uIiwKLSAgInByb2Nlc3NvciIgOiAiIiwKLSAgImFyZ3MiIDogewotICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICJAdmFsdWUiIDogWyAic2FzbE1lY2hhbmlzbSIsICJQTEFJTiIsICJzYXNsIiwgIkFITjBaWEJvY0dobGJnQndZWE56ZDI5eVpBPT0iIF0KLSAgfQotfQotLS0tLQotCi09PT09IFNlc3Npb24gRXZhbAotCi1UaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBzZXNzaW9uIHJlcXVlc3QgZm9yIGEgc2NyaXB0IGV2YWx1YXRpb24gd2l0aCBwYXJhbWV0ZXJzLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJncmVtbGluIiwgImcuVih4KSIsICJsYW5ndWFnZSIsICJncmVtbGluLWdyb292eSIsICJzZXNzaW9uIiwgInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiLCAiYmluZGluZ3MiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAieCIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQotLS0tLQotCi09PT09IFNlc3Npb24gRXZhbCBBbGlhc2VkCi0KLVRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgc2Vzc2lvbiByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggYW4gYWxpYXMgdGhhdCBiaW5kcyB0aGUgYFRyYXZlcnNhbFNvdXJjZWAgb2YgImciIHRvICJzb2NpYWwiLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJncmVtbGluIiwgInNvY2lhbC5WKHgpIiwgImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5IiwgImFsaWFzZXMiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAiZyIsICJzb2NpYWwiIF0KLSAgICB9LCAic2Vzc2lvbiIsICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwgImJpbmRpbmdzIiwgewotICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAiQHZhbHVlIiA6IFsgIngiLCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICJAdmFsdWUiIDogMQotICAgICAgfSBdCi0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9uIENsb3NlCi0KLVRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVxdWVzdCB0byBjbG9zZSBhIHNlc3Npb24uCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgInJlcXVlc3RJZCIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IiwKLSAgIm9wIiA6ICJjbG9zZSIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJzZXNzaW9uIiwgInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiIF0KLSAgfQotfQotLS0tLQotCi09PT09IFNlc3Npb25sZXNzIEV2YWwKKz09PSBTdGFuZGFyZCBSZXF1ZXN0CiAKIFRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIHNlc3Npb25sZXNzIHJlcXVlc3QgZm9yIGEgc2NyaXB0IGV2YWx1YXRpb24gd2l0aCBwYXJhbWV0ZXJzLgogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAiQHZhbHVlIiA6IFsgImdyZW1saW4iLCAiZy5WKHgpIiwgImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5IiwgImJpbmRpbmdzIiwgewotICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAiQHZhbHVlIiA6IFsgIngiLCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICJAdmFsdWUiIDogMQotICAgICAgfSBdCi0gICAgfSBdCi0gIH0KLX0KLS0tLS0KLQotPT09PSBTZXNzaW9ubGVzcyBFdmFsIEFsaWFzZWQKLQotVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgYSBzZXNzaW9ubGVzcyByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggYW4gYWxpYXMgdGhhdCBiaW5kcyB0aGUgYFRyYXZlcnNhbFNvdXJjZWAgb2YgImciIHRvICJzb2NpYWwiLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAiQHZhbHVlIiA6IFsgImdyZW1saW4iLCAic29jaWFsLlYoeCkiLCAibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1ncm9vdnkiLCAiYWxpYXNlcyIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgIkB2YWx1ZSIgOiBbICJnIiwgInNvY2lhbCIgXQotICAgIH0sICJiaW5kaW5ncyIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgIkB2YWx1ZSIgOiBbICJ4IiwgewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0gXQotICAgIH0gXQotICB9Ci19Ci0tLS0tCi0KLQotPT09IFJlc3BvbnNlTWVzc2FnZQotCi09PT09IEF1dGhlbnRpY2F0aW9uIENoYWxsZW5nZQotCi1XaGVuIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQsIGFuIGluaXRpYWwgcmVxdWVzdCB0byB0aGUgc2VydmVyIHdpbGwgcmVzdWx0IGluIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4gVGhlIHR5cGljYWwgcmVzcG9uc2UgbWVzc2FnZSB3aWxsIGFwcGVhciBhcyBmb2xsb3dzLCBidXQgaGFuZGxpbmcgaXQgY291bGQgYmUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgU0FTTCBpbXBsZW1lbnRhdGlvbiAoZS5nLiBtdWx0aXBsZSBjaGFsbGVuZ2VzIG1heSBiZSByZXF1ZXN0ZWQgaW4gc29tZSBjYXNlcywgYnV0IG5vdCBpbiB0aGUgZGVmYXVsdCBwcm92aWRlZCBieSBHcmVtbGluIFNlcnZlcikuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgInJlcXVlc3RJZCIgOiAiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IiwKLSAgInN0YXR1cyIgOiB7Ci0gICAgIm1lc3NhZ2UiIDogIiIsCi0gICAgImNvZGUiIDogNDA3LAotICAgICJhdHRyaWJ1dGVzIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgIkB2YWx1ZSIgOiBbIF0KLSAgICB9CisgICJncmVtbGluIjogImcuVih4KSIsCisgICJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiOiAidG9rZW5zIiwKKyAgInRpbWVvdXRNcyI6IHsKKyAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgIkB2YWx1ZSI6IDEwMDAKICAgfSwKLSAgInJlc3VsdCIgOiB7Ci0gICAgImRhdGEiIDogbnVsbCwKLSAgICAibWV0YSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgfQotICB9CisgICJnIjogImciLAorICAiYmluZGluZ3MiOiB7CisgICAgIkB0eXBlIjogImc6TWFwIiwKKyAgICAiQHZhbHVlIjogWworICAgICAgIngiLAorICAgICAgeworICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICJAdmFsdWUiOiAxCisgICAgICB9CisgICAgXQorICB9LAorICAibGFuZ3VhZ2UiOiAiZ3JlbWxpbi1ncm9vdnkiCiB9CiAtLS0tCiAKLT09PT0gU3RhbmRhcmQgUmVzdWx0Citbc291cmNlLGpzb25dCistLS0tCit7CisgICJncmVtbGluIjogImcuVih4KSIsCisgICJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiOiAidG9rZW5zIiwKKyAgInRpbWVvdXRNcyI6IDEwMDAsCisgICJnIjogImciLAorICAiYmluZGluZ3MiOiB7CisgICAgIngiOiAxCisgIH0sCisgICJsYW5ndWFnZSI6ICJncmVtbGluLWdyb292eSIKK30KKy0tLS0KKworPT09IFN0YW5kYXJkIFJlc3VsdAogCiBUaGUgZm9sbG93aW5nIGBSZXNwb25zZU1lc3NhZ2VgIGlzIGEgdHlwaWNhbCBleGFtcGxlIG9mIHRoZSB0eXBpY2FsIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgR3JlbWxpbiBTZXJ2ZXIgd2lsbCByZXR1cm4gd2hlbiByZXR1cm5pbmcgcmVzdWx0cyBmcm9tIGEgc2NyaXB0LgogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJyZXF1ZXN0SWQiIDogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIsCi0gICJzdGF0dXMiIDogewotICAgICJtZXNzYWdlIiA6ICIiLAotICAgICJjb2RlIiA6IDIwMCwKLSAgICAiYXR0cmlidXRlcyIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgfQotICB9LAotICAicmVzdWx0IiA6IHsKLSAgICAiZGF0YSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBdLAotICAgICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQorICAicmVzdWx0IjogeworICAgICJkYXRhIjogeworICAgICAgIkB0eXBlIjogImc6TGlzdCIsCisgICAgICAiQHZhbHVlIjogWworICAgICAgICB7CisgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4IiwKKyAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiOiAxCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAicGVyc29uIgorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAibmFtZSI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAwCisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJtYXJrbyIsCisgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAibmFtZSIKKyAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNworICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAibG9jYXRpb24iOiBbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgImlkIjogeworICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogNgorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiAic2FuIGRpZWdvIiwKKyAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAxOTk3CisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDAxCisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDcKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogInNhbnRhIGNydXoiLAorICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIgorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDEKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICJlbmRUaW1lIjogeworICAgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7CisgICAgICAgICAgICAgICAgICAgICJpZCI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDgKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogImJydXNzZWxzIiwKKyAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogWworICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiIKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAiZW5kVGltZSI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiAyMDA1CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAiaWQiOiB7CisgICAgICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiA5CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6ICJzYW50YSBmZSIsCisgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFsKKyAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogMjAwNQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IF0KKyAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgfSBdCi0gICAgfSwKLSAgICAibWV0YSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyBdCisgICAgICBdCiAgICAgfQorICB9LAorICAic3RhdHVzIjogeworICAgICJjb2RlIjogMjAwCiAgIH0KIH0KIC0tLS0KIAorW3NvdXJjZSxqc29uXQorLS0tLQoreworICAicmVzdWx0IjogeworICAgICJkYXRhIjogWworICAgICAgeworICAgICAgICAiaWQiOiAxLAorICAgICAgICAibGFiZWwiOiBbCisgICAgICAgICAgInBlcnNvbiIKKyAgICAgICAgXSwKKyAgICAgICAgInR5cGUiOiAidmVydGV4IiwKKyAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgIm5hbWUiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICJpZCI6IDAsCisgICAgICAgICAgICAgICJ2YWx1ZSI6ICJtYXJrbyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBdLAorICAgICAgICAgICJsb2NhdGlvbiI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImlkIjogNiwKKyAgICAgICAgICAgICAgInZhbHVlIjogInNhbiBkaWVnbyIsCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAxOTk3LAorICAgICAgICAgICAgICAgICJlbmRUaW1lIjogMjAwMQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiaWQiOiA3LAorICAgICAgICAgICAgICAidmFsdWUiOiAic2FudGEgY3J1eiIsCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiOiAyMDAxLAorICAgICAgICAgICAgICAgICJlbmRUaW1lIjogMjAwNAorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAiaWQiOiA4LAorICAgICAgICAgICAgICAidmFsdWUiOiAiYnJ1c3NlbHMiLAorICAgICAgICAgICAgICAicHJvcGVydGllcyI6IHsKKyAgICAgICAgICAgICAgICAic3RhcnRUaW1lIjogMjAwNCwKKyAgICAgICAgICAgICAgICAiZW5kVGltZSI6IDIwMDUKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgImlkIjogOSwKKyAgICAgICAgICAgICAgInZhbHVlIjogInNhbnRhIGZlIiwKKyAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CisgICAgICAgICAgICAgICAgInN0YXJ0VGltZSI6IDIwMDUKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgfQorICAgIF0KKyAgfSwKKyAgInN0YXR1cyI6IHsKKyAgICAiY29kZSI6IDIwMAorICB9Cit9CistLS0tCiAKLT09PSBFeHRlbmRlZAorPT09IEVycm9yIFJlc3VsdAogCi1Ob3RlIHRoYXQgdGhlICJleHRlbmRlZCIgdHlwZXMgcmVxdWlyZSB0aGUgYWRkaXRpb24gb2YgdGhlIHNlcGFyYXRlIGBHcmFwaFNPTlhNb2R1bGVWM2QwYCBtb2R1bGUgYXMgZm9sbG93czoKK1RoZSBmb2xsb3dpbmcgYFJlc3BvbnNlTWVzc2FnZWAgaXMgYSB0eXBpY2FsIGV4YW1wbGUgb2YgYW4gZXJyb3IgcmVzcG9uc2UgdGhlIEdyZW1saW4gU2VydmVyIHdpbGwgcmV0dXJuIGZyb20gYSBzY3JpcHQuCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgInJlc3VsdCI6IHsKKyAgICAiZGF0YSI6IHsKKyAgICAgICJAdHlwZSI6ICJnOkxpc3QiLAorICAgICAgIkB2YWx1ZSI6IFtdCisgICAgfQorICB9LAorICAic3RhdHVzIjogeworICAgICJjb2RlIjogNTAwLAorICAgICJtZXNzYWdlIjogIkEgdGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdHJhdmVyc2FsIGV2YWx1YXRpb24iLAorICAgICJleGNlcHRpb24iOiAiU2VydmVyVGltZW91dEV4Y2VlZGVkRXhjZXB0aW9uIgorICB9Cit9CistLS0tCisKK1tzb3VyY2UsanNvbl0KKy0tLS0KK3sKKyAgInJlc3VsdCI6IHsKKyAgICAiZGF0YSI6IFtdCisgIH0sCisgICJzdGF0dXMiOiB7CisgICAgImNvZGUiOiA1MDAsCisgICAgIm1lc3NhZ2UiOiAiQSB0aW1lb3V0IG9jY3VycmVkIGR1cmluZyB0cmF2ZXJzYWwgZXZhbHVhdGlvbiIsCisgICAgImV4Y2VwdGlvbiI6ICJTZXJ2ZXJUaW1lb3V0RXhjZWVkZWRFeGNlcHRpb24iCisgIH0KK30KKy0tLS0KKworTm90ZSB0aGF0IHRoZSAiZXh0ZW5kZWQiIHR5cGVzIHJlcXVpcmUgdGhlIGFkZGl0aW9uIG9mIHRoZSBzZXBhcmF0ZSBgR3JhcGhTT05YTW9kdWxlVjRgIG1vZHVsZSBhcyBmb2xsb3dzOgogCiBbc291cmNlLGphdmFdCiAtLS0tCiBtYXBwZXIgPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpLgogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WM18wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVY0LmJ1aWxkKCkpLgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbihHcmFwaFNPTlZlcnNpb24uVjRfMCkuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCkKIC0tLS0KIAotPT09PSBCaWdEZWNpbWFsCis9PT0gQmlnRGVjaW1hbAorCitBIEpTT04gTnVtYmVyLgogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJAdHlwZSIgOiAiZ3g6QmlnRGVjaW1hbCIsCisgICJAdHlwZSIgOiAiZzpCaWdEZWNpbWFsIiwKICAgIkB2YWx1ZSIgOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKIH0KIC0tLS0KIAotPT09PSBCaWdJbnRlZ2VyCitbc291cmNlLHRleHRdCistLS0tCisxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKKy0tLS0KKworPT09IEJpZ0ludGVnZXIKKworQSBKU09OIE51bWJlci4KIAogW3NvdXJjZSxqc29uXQogLS0tLQogewotICAiQHR5cGUiIDogImd4OkJpZ0ludGVnZXIiLAorICAiQHR5cGUiIDogImc6QmlnSW50ZWdlciIsCiAgICJAdmFsdWUiIDogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxCiB9CiAtLS0tCiAKLT09PT0gQnl0ZQorW3NvdXJjZSx0ZXh0XQorLS0tLQorMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxCistLS0tCisKKz09PSBCeXRlCisKK0EgSlNPTiBOdW1iZXIgd2l0aCB0aGUgc2FtZSByYW5nZSBhcyBhIDEtYnl0ZSBzaWduZWQgaW50ZWdlci4KIAogW3NvdXJjZSxqc29uXQogLS0tLQogewotICAiQHR5cGUiIDogImd4OkJ5dGUiLAorICAiQHR5cGUiIDogImc6Qnl0ZSIsCiAgICJAdmFsdWUiIDogMQogfQogLS0tLQogCi09PT09IEJ5dGVCdWZmZXIKK1tzb3VyY2UsdGV4dF0KKy0tLS0KKzEKKy0tLS0KKworPT09IEJpbmFyeQorCitKU09OIFN0cmluZyBjb250YWluaW5nIGJhc2U2NC1lbmNvZGVkIGJ5dGVzCiAKIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsKLSAgIkB0eXBlIiA6ICJneDpCeXRlQnVmZmVyIiwKKyAgIkB0eXBlIiA6ICJnOkJpbmFyeSIsCiAgICJAdmFsdWUiIDogImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MSIKIH0KIC0tLS0KIAotPT09PSBDaGFyCitbc291cmNlLHRleHRdCistLS0tCisiYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxIgorLS0tLQorCis9PT0gQ2hhcgorCitBIEpTT04gU3RyaW5nIGNvbnRhaW5pbmcgYSBzaW5nbGUgVVRGLTggZW5jb2RlZCBjaGFyYWN0ZXIuCiAKIFtzb3VyY2UsanNvbl0KIC0tLS0KIHsKLSAgIkB0eXBlIiA6ICJneDpDaGFyIiwKKyAgIkB0eXBlIiA6ICJnOkNoYXIiLAogICAiQHZhbHVlIiA6ICJ4IgogfQogLS0tLQogCi09PT09IER1cmF0aW9uCitbc291cmNlLHRleHRdCistLS0tCisieCIKKy0tLS0KIAotVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIGEgYER1cmF0aW9uYCBvZiBmaXZlIGRheXMuCis9PT0gRHVyYXRpb24KKworSlNPTiBTdHJpbmcgd2l0aCBJU08tODYwMSBzZWNvbmRzIGJhc2VkIHJlcHJlc2VudGF0aW9uLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgYSBgRHVyYXRpb25gIG9mIGZpdmUgZGF5cy4KIAogW3NvdXJjZSxqc29uXQogLS0tLQogewotICAiQHR5cGUiIDogImd4OkR1cmF0aW9uIiwKKyAgIkB0eXBlIiA6ICJnOkR1cmF0aW9uIiwKICAgIkB2YWx1ZSIgOiAiUFQxMjBIIgogfQogLS0tLQogCi09PT09IEluZXRBZGRyZXNzCitbc291cmNlLHRleHRdCistLS0tCisiUFQxMjBIIgorLS0tLQorCis9PT0gU2hvcnQKKworQSBKU09OIE51bWJlciB3aXRoIHRoZSBzYW1lIHJhbmdlIGFzIGEgMi1ieXRlIHNpZ25lZCBpbnRlZ2VyLgogCiBbc291cmNlLGpzb25dCiAtLS0tCiB7Ci0gICJAdHlwZSIgOiAiZ3g6SW5ldEFkZHJlc3MiLAotICAiQHZhbHVlIiA6ICJsb2NhbGhvc3QiCi19Ci0tLS0tCi0KLT09PT0gSW5zdGFudAotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6SW5zdGFudCIsCi0gICJAdmFsdWUiIDogIjIwMTYtMTItMTRUMTY6Mzk6MTkuMzQ5WiIKLX0KLS0tLS0KLQotPT09PSBMb2NhbERhdGUKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkxvY2FsRGF0ZSIsCi0gICJAdmFsdWUiIDogIjIwMTYtMDEtMDEiCi19Ci0tLS0tCi0KLT09PT0gTG9jYWxEYXRlVGltZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6TG9jYWxEYXRlVGltZSIsCi0gICJAdmFsdWUiIDogIjIwMTYtMDEtMDFUMTI6MzAiCi19Ci0tLS0tCi0KLT09PT0gTG9jYWxUaW1lCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpMb2NhbFRpbWUiLAotICAiQHZhbHVlIiA6ICIxMjozMDo0NSIKLX0KLS0tLS0KLQotPT09PSBNb250aERheQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6TW9udGhEYXkiLAotICAiQHZhbHVlIiA6ICItLTAxLTAxIgotfQotLS0tLQotCi09PT09IE9mZnNldERhdGVUaW1lCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpPZmZzZXREYXRlVGltZSIsCi0gICJAdmFsdWUiIDogIjIwMDctMTItMDNUMTA6MTU6MzArMDE6MDAiCi19Ci0tLS0tCi0KLT09PT0gT2Zmc2V0VGltZQotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6T2Zmc2V0VGltZSIsCi0gICJAdmFsdWUiIDogIjEwOjE1OjMwKzAxOjAwIgotfQotLS0tLQotCi09PT09IFBlcmlvZAotCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgYSBgUGVyaW9kYCBvZiBvbmUgeWVhciwgc2l4IG1vbnRocyBhbmQgZmlmdGVlbiBkYXlzLgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6UGVyaW9kIiwKLSAgIkB2YWx1ZSIgOiAiUDFZNk0xNUQiCi19Ci0tLS0tCi0KLT09PT0gU2hvcnQKLQotW3NvdXJjZSxqc29uXQotLS0tLQotewotICAiQHR5cGUiIDogImd4OkludDE2IiwKKyAgIkB0eXBlIiA6ICJnOkludDE2IiwKICAgIkB2YWx1ZSIgOiAxMDAKIH0KIC0tLS0KIAotPT09PSBZZWFyCi0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBvZiB0aGUgYFllYXJgICIyMDE2Ii4KLQotW3NvdXJjZSxqc29uXQorW3NvdXJjZSx0ZXh0XQogLS0tLQotewotICAiQHR5cGUiIDogImd4OlllYXIiLAotICAiQHZhbHVlIiA6ICIyMDE2IgotfQotLS0tLQotCi09PT09IFllYXJNb250aAotCi1UaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgYSBgWWVhck1vbnRoYCBvZiAiSnVuZSAyMDE2IgotCi1bc291cmNlLGpzb25dCi0tLS0tCi17Ci0gICJAdHlwZSIgOiAiZ3g6WWVhck1vbnRoIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNi0wNiIKLX0KLS0tLS0KLQotPT09PSBab25lZERhdGVUaW1lCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpab25lZERhdGVUaW1lIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNi0xMi0yM1QxMjoxMjoyNC4wMDAwMDAwMzYrMDI6MDBbR01UKzAyOjAwXSIKLX0KLS0tLS0KLQotPT09PSBab25lT2Zmc2V0Ci0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIGBab25lT2Zmc2V0YCBvZiB0aHJlZSBob3Vycywgc2l4IG1pbnV0ZXMsIGFuZCBuaW5lIHNlY29uZHMuCi0KLVtzb3VyY2UsanNvbl0KLS0tLS0KLXsKLSAgIkB0eXBlIiA6ICJneDpab25lT2Zmc2V0IiwKLSAgIkB2YWx1ZSIgOiAiKzAzOjA2OjA5IgotfQorMTAwCiAtLS0tCmRpZmYgLS1naXQgYS9kb2NzL3NyYy9kZXYvcHJvdmlkZXIvZ3JlbWxpbi1zZW1hbnRpY3MuYXNjaWlkb2MgYi9kb2NzL3NyYy9kZXYvcHJvdmlkZXIvZ3JlbWxpbi1zZW1hbnRpY3MuYXNjaWlkb2MKaW5kZXggNGJkOTRiMi4uNDQ2NDcyZiAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvZGV2L3Byb3ZpZGVyL2dyZW1saW4tc2VtYW50aWNzLmFzY2lpZG9jCisrKyBiL2RvY3Mvc3JjL2Rldi9wcm92aWRlci9ncmVtbGluLXNlbWFudGljcy5hc2NpaWRvYwpAQCAtNTQsNyArNTQsNyBAQAogCiBHcmFwaCBwcm92aWRlcnMgbWF5IG5vdCBzdXBwb3J0IGFsbCBvZiB0aGVzZSB0eXBlcyBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgaW1wbGVtZW50YXRpb24uIFRoZXJlZm9yZQogVGlua2VyUG9wIG11c3QgcHJvdmlkZSBhIHdheSBmb3IgR3JhcGggcHJvdmlkZXJzIHRvIG92ZXJyaWRlIHRoZSBiZWhhdmlvciB3aGlsZSBpdCBoYXMgaXRzIG93biBkZWZhdWx0IGJlaGF2aW9yLiBBbHNvCi13aGVuIHNvbWUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgR3JhcGggcHJvdmlkZXJzIG5lZWRzIHRvIG1hcCB1bnN1cHBvcnRlZCB0eXBlcyBpbnRvIHN1cHBvcnRlZCB0eXBlcyBpbnRlcm5hbGx5LiBUaGlzCit3aGVuIHNvbWUgdHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgR3JhcGggcHJvdmlkZXJzIG5lZWQgdG8gbWFwIHVuc3VwcG9ydGVkIHR5cGVzIGludG8gc3VwcG9ydGVkIHR5cGVzIGludGVybmFsbHkuIFRoaXMKIG1hcHBpbmcgY2FuIGJlIGRvbmUgaW4gZWl0aGVyIGluZm9ybWF0aW9uLXByZXNlcnZpbmcgbWFubmVyIG9yIG5vbi1wcmVzZXJ2aW5nIG1hbm5lci4gR3JhcGggcHJvdmlkZXJzIG11c3QgdGVsbCB3aGljaAogbWFwcGluZyB0aGV5IHN1cHBvcnQgdGhyb3VnaCBgR3JhcGguRmVhdHVyZXNgIGFzIHdlbGwgYXMgd2hpY2ggdHlwZXMgdGhleSBzdXBwb3J0LgogCkBAIC0xMTE1LDggKzExMTUsOCBAQAogUHJvdmlkZXJzIHVzaW5nIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gY2FuIHJldHVybiBgVHJhdmVyc2VyYCBvdXRwdXQgb3IgcmF3IHZhbHVlIG91dHB1dCAtIHRoZSBgQ2FsbFN0ZXBgIHdpbGwKIGhhbmRsZSBlaXRoZXIgY2FzZSBhcHByb3ByaWF0ZWx5LiBJbiB0aGUgY2FzZSBvZiBhIGBTdHJlYW1pbmdgIHNlcnZpY2UsIHdoZXJlIHRoZXJlIGlzIGV4YWN0bHkgb25lIGlucHV0IHRvIGVhY2gKIGNhbGwsIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gY2FuIHByZXNlcnZlIGBQYXRoYCBpbmZvcm1hdGlvbiBieSBzcGxpdHRpbmcgdGhlIGlucHV0IGBUcmF2ZXJzZXJgIHdoZW4gcmVjZWl2aW5nCi1yYXcgb3V0cHV0IGZyb20gdGhlIGNhbGwuIEluIHRoZSBjYXNlIG9mIGBCYXJyaWVyYCBob3dldmVyLCBpdCBpcyB0aGUgcmVzcG9uc2libGl0eSBvZiB0aGUgYFNlcnZpY2VgIHRvIHByZXNlcnZlCi1gUGF0aGAgaW5mb3JtYXRpb24gYnkgcHJvZHVjaW5nIGl0cyBvd24gYFRyYXZlcnNlcnNgIGFzIG91dHB1dCwgc2luY2UgdGhlIGBDYWxsU3RlcGAgY2Fubm90IG1hdGNoIGlucHV0IGFuZCBvdXB1dAorcmF3IG91dHB1dCBmcm9tIHRoZSBjYWxsLiBJbiB0aGUgY2FzZSBvZiBgQmFycmllcmAgaG93ZXZlciwgaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBgU2VydmljZWAgdG8gcHJlc2VydmUKK2BQYXRoYCBpbmZvcm1hdGlvbiBieSBwcm9kdWNpbmcgaXRzIG93biBgVHJhdmVyc2Vyc2AgYXMgb3V0cHV0LCBzaW5jZSB0aGUgYENhbGxTdGVwYCBjYW5ub3QgbWF0Y2ggaW5wdXQgYW5kIG91dHB1dAogYWNyb3NzIGEgYmFycmllci4gVGhlIGFiaWxpdHkgdG8gc3BsaXQgaW5wdXQgYFRyYXZlcnNlcnNgIGFuZCBnZW5lcmF0ZSBvdXRwdXQgaXMgcHJvdmlkZWQgYnkgdGhlIHJlZmVyZW5jZQogaW1wbGVtZW50YXRpb24ncyBgU2VydmljZUNhbGxDb250ZXh0YCBvYmplY3QsIHdoaWNoIGlzIHN1cHBsaWVkIHRvIHRoZSBgU2VydmljZWAgZHVyaW5nIGV4ZWN1dGlvbi4KIApAQCAtMTEyNywxNSArMTEyNywxNSBAQAogKiBgZXhlY3V0ZShTZXJ2aWNlQ2FsbENvbnRleHQsIFRyYXZlcnNlclNldCwgTWFwKWAgLSBleGVjdXRlIGEgc2VydmljZSBjYWxsIG1pZC10cmF2ZXJzYWwgYmFycmllcgogCiBUaGUgTWFwIGlzIHRoZSBtZXJnZWQgY29sbGVjdGlvbiBvZiBhbGwgc3RhdGljIGFuZCBkeW5hbWljIHBhcmFtZXRlcnMuIEluIHRoZSBjYXNlIG9mIGBCYXJyaWVyYCBleGVjdXRpb24sIG5vdGljZQotdGhhdCB0aGVyZSBpcyBvbmUgYE1hcGAgZm9yIG1hbnkgaW5wdXQuIFNpbmNlIHRoZSBgY2FsbCgpYCBBUEkgc3VwcG9ydCBkeW5hbWljIHBhcmFtZXRlcnMsIHRoaXMgaW1wbGllcyB0aGF0IGFsbAordGhhdCB0aGVyZSBpcyBvbmUgYE1hcGAgZm9yIG1hbnkgaW5wdXQuIFNpbmNlIHRoZSBgY2FsbCgpYCBBUEkgc3VwcG9ydHMgZHluYW1pYyBwYXJhbWV0ZXJzLCB0aGlzIGltcGxpZXMgdGhhdCBhbGwKIGlucHV0IG11c3QgcmVkdWNlIHRvIHRoZSBzYW1lIHNldCBvZiBwYXJhbWV0ZXJzIGZvciBgQmFycmllcmAgZXhlY3V0aW9uLiBJbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLCBpZiBtb3JlCi10aGFuIG9uZSBwYXJhbWV0ZXIgc2V0IGlzIGRldGVjdGVkLCB0aGlzIHdpbGwgY2F1c2UgYW4gZXhlY3V0aW9uIGFuZCB0aGUgdHJhdmVyc2FsIHdpbGwgaGFsdC4gUHJvdmlkZXJzIHRoYXQKK3RoYW4gb25lIHBhcmFtZXRlciBzZXQgaXMgZGV0ZWN0ZWQsIHRoaXMgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24gYW5kIHRoZSB0cmF2ZXJzYWwgd2lsbCBoYWx0LiBQcm92aWRlcnMgdGhhdAogaW1wbGVtZW50IHRoZWlyIG93biB2ZXJzaW9uIG9mIGEgY2FsbCBvcGVyYXRpb24gbWF5IGRlY2lkZSBvbiBvdGhlciBzdHJhdGVnaWVzIHRvIGhhbmRsZSB0aGlzIGNhc2UgLSBmb3IgZXhhbXBsZQogaXQgbWF5IGJlIHNlbnNpYmxlIHRvIGdyb3VwIHRyYXZlcnNlcnMgYnkgTWFwIGluIHRoZSBjYXNlIHdoZXJlIG11bHRpcGxlIHBhcmFtZXRlciBzZXRzIGFyZSBkZXRlY3RlZC4KIAogVGhlIG5vLWFyZyB2ZXJzaW9uIG9mIHRoZSBgY2FsbCgpYCBBUEkgaXMgbWVhbnQgdG8gYmUgYSBkaXJlY3Rvcnkgc2VydmljZSBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBzdGFydCBhIHRyYXZlcnNhbC4KLVRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYSAgZGVmYXVsdCB2ZXJzaW9uLCB3aXRoIHdpbGwgcHJvZHVjZSBhIGxpc3Qgb2Ygc2VydmljZSBuYW1lcyBvciBhIHNlcnZpY2UKLWRlc2NyaXB0aW9uIGlmIHJ1biB3aXRoIGB2ZXJib3NlPXRydWVgLiBQcm92aWRlcnMgdXNpbmcgdGhlIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2FsbCBvcGVyYXRpb24gbXVzdCBwcm92aWRlIHRoZWlyCitUaGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgZGVmYXVsdCB2ZXJzaW9uLCB3aGljaCB3aWxsIHByb2R1Y2UgYSBsaXN0IG9mIHNlcnZpY2UgbmFtZXMgb3IgYSBzZXJ2aWNlCitkZXNjcmlwdGlvbiBpZiBydW4gd2l0aCBgdmVyYm9zZT10cnVlYC4gUHJvdmlkZXJzIHVzaW5nIHRoZWlyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2FsbCBvcGVyYXRpb24gbXVzdCBwcm92aWRlIHRoZWlyCiBvd24gZGlyZWN0b3J5IGxpc3Rpbmcgc2VydmljZSB3aXRoIHRoZSBzZXJ2aWNlIG5hbWUgYCItLWxpc3QiYC4KIAogKkV4Y2VwdGlvbnMqCkBAIC0xMjg3LDcgKzEyODcsNyBAQAogCiAqRGVzY3JpcHRpb246KiBDb25jYXRlbmF0ZXMgdGhlIGluY29taW5nIFN0cmluZyB0cmF2ZXJzZXIgd2l0aCB0aGUgaW5wdXQgU3RyaW5nIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgam9pbmVkIFN0cmluZy4KIAotKlN5bnRheDoqIGBjb25jYXQoKWAgfCBgY29uY2F0KFN0cmluZy4uLiBjb25jYXRTdHJpbmdzKWAgfCBgY29uY2F0KFRyYXZlcnNhbCBjb25jYXRUcmF2ZXJhbCwgVHJhdmVyc2FsLi4uIG90aGVyQ29uY2F0VHJhdmVyYWxzKWAKKypTeW50YXg6KiBgY29uY2F0KClgIHwgYGNvbmNhdChTdHJpbmcuLi4gY29uY2F0U3RyaW5ncylgIHwgYGNvbmNhdChUcmF2ZXJzYWwgY29uY2F0VHJhdmVyc2FsLCBUcmF2ZXJzYWwuLi4gb3RoZXJDb25jYXRUcmF2ZXJzYWxzKWAKIAogW3dpZHRoPSIxMDAlIixvcHRpb25zPSJoZWFkZXIiXQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTI5OSw5ICsxMjk5LDkgQEAKIAogKiBgY29uY2F0U3RyaW5nc2AgLSBWYXJhcmdzIG9mIGBTdHJpbmdgLiBJZiBvbmUgb3IgbW9yZSBTdHJpbmcgdmFsdWVzIGFyZSBwcm92aWRlZCwgdGhleSB3aWxsIGJlIGNvbmNhdGVuYXRlZCB0b2dldGhlcgogd2l0aCB0aGUgaW5jb21pbmcgdHJhdmVyc2VyLiBJZiBubyBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlIFN0cmluZyB2YWx1ZSBmcm9tIHRoZSBpbmNvbWluZyB0cmF2ZXJzZXIgaXMgcmV0dXJuZWQuCi0qIGBjb25jYXRUcmF2ZXJhbGAgLSBBIGBUcmF2ZXJzYWxgIHdob3NlIG11c3QgdmFsdWUgcmVzb2x2ZSB0byBhIGBTdHJpbmdgLiBUaGUgZmlyc3QgcmVzdWx0IHJldHVybmVkIGZyb20gdGhlIHRyYXZlcnNhbCB3aWxsCisqIGBjb25jYXRUcmF2ZXJzYWxgIC0gQSBgVHJhdmVyc2FsYCB3aG9zZSB2YWx1ZSBtdXN0IHJlc29sdmUgdG8gYSBgU3RyaW5nYC4gVGhlIGZpcnN0IHJlc3VsdCByZXR1cm5lZCBmcm9tIHRoZSB0cmF2ZXJzYWwgd2lsbAogYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlIGluY29taW5nIHRyYXZlcnNlci4KLSogYG90aGVyQ29uY2F0VHJhdmVyYWxzYCAtIFZhcmFyZ3Mgb2YgYFRyYXZlcnNhbGAuIEVhY2ggYFRyYXZlcnNhbGAgdmFsdWUgbXVzdCByZXNvbHZlIHRvIGEgYFN0cmluZ2AuIFRoZSBmaXJzdCByZXN1bHQKKyogYG90aGVyQ29uY2F0VHJhdmVyc2Fsc2AgLSBWYXJhcmdzIG9mIGBUcmF2ZXJzYWxgLiBFYWNoIGBUcmF2ZXJzYWxgIHZhbHVlIG11c3QgcmVzb2x2ZSB0byBhIGBTdHJpbmdgLiBUaGUgZmlyc3QgcmVzdWx0CiByZXR1cm5lZCBmcm9tIGVhY2ggdHJhdmVyc2FsIHdpbGwgYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlIGluY29taW5nIHRyYXZlcnNlciBhbmQgdGhlIHByZXZpb3VzIHRyYXZlcnNhbCBhcmd1bWVudHMuCiAKIEFueSBgbnVsbGAgU3RyaW5nIHZhbHVlcyB3aWxsIGJlIHNraXBwZWQgd2hlbiBjb25jYXRlbmF0ZWQgd2l0aCBub24tYG51bGxgIFN0cmluZyB2YWx1ZXMuIElmIHR3byBgbnVsbGAgdmFsdWUgYXJlCkBAIC0xNjQxLDcgKzE2NDEsNyBAQAogPT09IGxlbmd0aCgpCiAKICpEZXNjcmlwdGlvbjoqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgaW5jb21pbmcgc3RyaW5nIG9yIGxpc3QsIGlmIGBTY29wZS5sb2NhbGAgaXMgc3BlY2lmaWVkLCByZXR1cm5zCi10aGUgbGVuZ3RoIG9mIGVhY2ggc3RyaW5nIGVsZW1lbnRzIGluc2lkZSBpbmNvbWluZyBsaXN0IHRyYXZlcnNlci4KK3RoZSBsZW5ndGggb2YgZWFjaCBzdHJpbmcgZWxlbWVudCBpbnNpZGUgaW5jb21pbmcgbGlzdCB0cmF2ZXJzZXIuCiAKICpTeW50YXg6KiBgbGVuZ3RoKClgIHwgYGxlbmd0aChTY29wZSBzY29wZSlgCiAKQEAgLTIwMTEsNyArMjAxMSw2IEBACiBTZWU6IGxpbms6aHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvdHJlZS94Lnkuei9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL05vbmVTdGVwLmphdmFbc291cmNlXSwKIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L3JlZmVyZW5jZS8jbm9uZS1zdGVwW3JlZmVyZW5jZV0KIAotCiBbW3Byb2R1Y3Qtc3RlcF1dCiA9PT0gcHJvZHVjdCgpCiAKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL2Rldi9wcm92aWRlci9pbmRleC5hc2NpaWRvYyBiL2RvY3Mvc3JjL2Rldi9wcm92aWRlci9pbmRleC5hc2NpaWRvYwppbmRleCBjZDY3MzBmLi44N2ZjOGM0IDEwMDY0NAotLS0gYS9kb2NzL3NyYy9kZXYvcHJvdmlkZXIvaW5kZXguYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvZGV2L3Byb3ZpZGVyL2luZGV4LmFzY2lpZG9jCkBAIC0xNDgsOCArMTQ4LDcgQEAKIAogVGhlIGNsYXNzZXMgdGhhdCBhIGdyYXBoIHN5c3RlbSBwcm92aWRlciBzaG91bGQgZm9jdXMgb24gaW1wbGVtZW50aW5nIGFyZSBpdGVtaXplZCBiZWxvdy4gSXQgaXMgYSBnb29kIGlkZWEgdG8gc3R1ZHkKIHRoZSBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9yZWZlcmVuY2UvI3RpbmtlcmdyYXBoLWdyZW1saW5bVGlua2VyR3JhcGhdIChpbi1tZW1vcnkgT0xUUCBhbmQgT0xBUAotaW4gYHRpbmtlcmdyYXBoLWdyZW1saW5gKSwgbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovcmVmZXJlbmNlLyNuZW80ai1ncmVtbGluW05lbzRqR3JhcGhdCi0oT0xUUCB3LyB0cmFuc2FjdGlvbnMgaW4gYG5lbzRqLWdyZW1saW5gKSBhbmQvb3IKK2luIGB0aW5rZXJncmFwaC1ncmVtbGluYCkgYW5kL29yCiBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9yZWZlcmVuY2UvI2hhZG9vcC1ncmVtbGluW0hhZG9vcEdyYXBoXSAoT0xBUCBpbiBgaGFkb29wLWdyZW1saW5gKQogaW1wbGVtZW50YXRpb25zIGZvciBpZGVhcyBhbmQgcGF0dGVybnMuCiAKQEAgLTE4OCw3ICsxODcsNyBAQAogVGhlIGZvbGxvd2luZyBidWxsZXRzIHByb3ZpZGUgc29tZSB0aXBzIHRvIGNvbnNpZGVyIHdoZW4gaW1wbGVtZW50aW5nIHRoZSBzdHJ1Y3R1cmUgaW50ZXJmYWNlczoKIAogKiBgR3JhcGhgCi0qKiBCZSBzdXJlIHRoZSBgR3JhcGhgIGltcGxlbWVudGF0aW9uIGlzIG5hbWVkIGFzIGBYWFhHcmFwaGAgKGUuZy4gVGlua2VyR3JhcGgsIE5lbzRqR3JhcGgsIEhhZG9vcEdyYXBoLCBldGMuKS4KKyoqIEJlIHN1cmUgdGhlIGBHcmFwaGAgaW1wbGVtZW50YXRpb24gaXMgbmFtZWQgYXMgYFhYWEdyYXBoYCAoZS5nLiBUaW5rZXJHcmFwaCwgSGFkb29wR3JhcGgsIGV0Yy4pLgogKiogVGhpcyBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBiZSBgR3JhcGhGYWN0b3J5YCBjb21wYXRpYmxlIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBoYXZlIGEgc3RhdGljCiBgR3JhcGggb3BlbihDb25maWd1cmF0aW9uKWAgbWV0aG9kIHdoZXJlIHRoZSBgQ29uZmlndXJhdGlvbmAgaXMgYW4gQXBhY2hlIENvbW1vbnMgY2xhc3Mgb2YgdGhhdCBuYW1lLiBBbHRlcm5hdGl2ZWx5LCB0aGUKIGBHcmFwaGAgaW1wbGVtZW50YXRpb24gY2FuIGhhdmUgdGhlIGBHcmFwaEZhY3RvcnlDbGFzc2AgYW5ub3RhdGlvbiB3aGljaCBzcGVjaWZpZXMgYSBjbGFzcyB3aXRoIHRoYXQgc3RhdGljCkBAIC01NjEsNyArNTYwLDcgQEAKIGdyYXBoc29uX3JlYWRlciA9IEdyYXBoU09OUmVhZGVyKHtNeVR5cGUuR1JBUEhTT05fVFlQRTogTXlUeXBlfSkKIGdyYXBoc29uX3dyaXRlciA9IEdyYXBoU09OV3JpdGVyKHtNeVR5cGU6IE15VHlwZX0pCiAKLWNvbm5lY3Rpb24gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCAnZycsCitjb25uZWN0aW9uID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCAnZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhzb25fcmVhZGVyPWdyYXBoc29uX3JlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaHNvbl93cml0ZXI9Z3JhcGhzb25fd3JpdGVyKQogLS0tLQpAQCAtNTg0LDI2ICs1ODMsMjYgQEAKIEEgYFJlbW90ZUNvbm5lY3Rpb25gIGlzIGFuIGludGVyZmFjZSB0aGF0IGlzIGltcG9ydGFudCBmb3IgdXNhZ2Ugb24gdHJhdmVyc2FsIHNvdXJjZXMgY29uZmlndXJlZCB1c2luZyB0aGUKIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L3JlZmVyZW5jZS8jY29ubmVjdGluZy12aWEtZHJpdmVyc1t3aXRoKCldIG9wdGlvbi4gQSBgVHJhdmVyc2FsYAogdGhhdCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGF0IHNvdXJjZSB3aWxsIGFwcGx5IGEgYFJlbW90ZVN0cmF0ZWd5YCB3aGljaCB3aWxsIGluamVjdCBhIGBSZW1vdGVTdGVwYCB0byBpdHMgZW5kLiBUaGF0Ci1zdGVwIHdpbGwgdGhlbiBzZW5kIHRoZSBgQnl0ZWNvZGVgIG9mIHRoZSBgVHJhdmVyc2FsYCBvdmVyIHRoZSBgUmVtb3RlQ29ubmVjdGlvbmAgdG8gZ2V0IHRoZSByZXN1bHRzIHRoYXQgaXQgd2lsbAorc3RlcCB3aWxsIHRoZW4gc2VuZCB0aGUgYEdyZW1saW5MYW5nYCBvZiB0aGUgYFRyYXZlcnNhbGAgb3ZlciB0aGUgYFJlbW90ZUNvbm5lY3Rpb25gIHRvIGdldCB0aGUgcmVzdWx0cyB0aGF0IGl0IHdpbGwKIGl0ZXJhdGUuCiAKIFRoZXJlIGlzIG9uZSBtZXRob2QgdG8gaW1wbGVtZW50IG9uIGBSZW1vdGVDb25uZWN0aW9uYDoKIAogW3NvdXJjZSxqYXZhXQotcHVibGljIDxFPiBDb21wbGV0YWJsZUZ1dHVyZTxSZW1vdGVUcmF2ZXJzYWw8PywgRT4+IHN1Ym1pdEFzeW5jKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB0aHJvd3MgUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbjsKK3B1YmxpYyA8RT4gQ29tcGxldGFibGVGdXR1cmU8UmVtb3RlVHJhdmVyc2FsPD8sIEU+PiBzdWJtaXRBc3luYyhmaW5hbCBHcmVtbGluTGFuZyBncmVtbGluTGFuZykgdGhyb3dzIFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb247CiAKIE5vdGUgdGhhdCBpdCByZXR1cm5zIGEgYFJlbW90ZVRyYXZlcnNhbGAuIFRoaXMgaW50ZXJmYWNlIHNob3VsZCBhbHNvIGJlIGltcGxlbWVudGVkIGFuZCBpbiBtb3N0IGNhc2VzIGltcGxlbWVudGVycyBjYW4KIHNpbXBseSBleHRlbmQgdGhlIGBBYnN0cmFjdFJlbW90ZVRyYXZlcnNhbGAuCiAKIFRpbmtlclBvcCBwcm92aWRlcyB0aGUgYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gIGFzIGEgdXNlZnVsIGFuZAogbGluazpodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iL3gueS56L2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlW2V4YW1wbGUgaW1wbGVtZW50YXRpb25dLgotYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gIHNlcmlhbGl6ZXMgdGhlIGBUcmF2ZXJzYWxgIGFzIEdyZW1saW4gYnl0ZWNvZGUgYW5kIHRoZW4gc3VibWl0cyBpdCBmb3IgcmVtb3RlIHByb2Nlc3Npbmcgb24KLUdyZW1saW4gU2VydmVyLiBHcmVtbGluIFNlcnZlciByZWJpbmRzIHRoZSBgVHJhdmVyc2FsYCB0byBhIGNvbmZpZ3VyZWQgYEdyYXBoYCBpbnN0YW5jZSBhbmQgdGhlbiBpdGVyYXRlcyB0aGUgcmVzdWx0cwotYmFjayBhcyBpdCB3b3VsZCBub3JtYWxseSBkby4KK2BEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCBzZXJpYWxpemVzIHRoZSBgVHJhdmVyc2FsYCBhcyBHcmVtbGluTGFuZyBhbmQgdGhlbiBzdWJtaXRzIGl0IGZvciByZW1vdGUgcHJvY2Vzc2luZyBvbgorR3JlbWxpbiBTZXJ2ZXIuIEdyZW1saW4gU2VydmVyIHBhcnNlcyB0aGUgc2NyaXB0IGludG8gYSBgVHJhdmVyc2FsYCB0byBhIGNvbmZpZ3VyZWQgYEdyYXBoYCBpbnN0YW5jZSBhbmQgdGhlbiBpdGVyYXRlcwordGhlIHJlc3VsdHMgYmFjayBhcyBpdCB3b3VsZCBub3JtYWxseSBkby4KIAogSW1wbGVtZW50aW5nIGBSZW1vdGVDb25uZWN0aW9uYCBpcyBub3Qgc29tZXRoaW5nIHJvdXRpbmVseSBkb25lIGZvciB0aG9zZSBpbXBsZW1lbnRpbmcgYGdyZW1saW4tY29yZWAuIEl0IGlzIG9ubHkKIHNvbWV0aGluZyByZXF1aXJlZCBpZiB0aGVyZSBpcyBhIG5lZWQgdG8gZXhwbG9pdCByZW1vdGUgdHJhdmVyc2FsIHN1Ym1pc3Npb24uIElmIGEgZ3JhcGggcHJvdmlkZXIgaGFzIGEgImdyYXBoIHNlcnZlciIKLXNpbWlsYXIgdG8gR3JlbWxpbiBTZXJ2ZXIgdGhhdCBjYW4gYWNjZXB0IGJ5dGVjb2RlLWJhc2VkIHJlcXVlc3RzIG9uIGl0cyBvd24gcHJvdG9jb2wsIHRoZW4gdGhhdCB3b3VsZCBiZSBvbmUgZXhhbXBsZQorc2ltaWxhciB0byBHcmVtbGluIFNlcnZlciB0aGF0IGNhbiBhY2NlcHQgdHJhdmVyc2FsLWJhc2VkIHJlcXVlc3RzIG9uIGl0cyBvd24gcHJvdG9jb2wsIHRoZW4gdGhhdCB3b3VsZCBiZSBvbmUgZXhhbXBsZQogb2YgYSByZWFzb24gdG8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgogCiBbW2J1bGstaW1wb3J0LWV4cG9ydF1dCkBAIC02NTIsNiArNjUxLDkgQEAKIAogPT09PSBKVk0gVGVzdCBTdWl0ZQogCitJTVBPUlRBTlQ6IDQuMC4wLWJldGEuMiBSZWxlYXNlIC0gVGhlIGZpbmFsIGZvcm0gb2YgdGhlIFRpbmtlclBvcCB0ZXN0IHN1aXRlIGZvciA0LjAgaXMgbm90IHdob2xseSBzZXR0bGVkLCBidXQgZ29pbmcKK2ZvcndhcmQgcHJvdmlkZXJzIHNob3VsZCBmb2N1cyBvbiBpbXBsZW1lbnRpbmcgdGhlIDw8Z2hlcmtpbi10ZXN0cy1zdWl0ZT4+IGFzIG9wcG9zZWQgdG8gdGhlIEpWTSBzdWl0ZS4KKwogVGhlIEpWTSB0ZXN0IHN1aXRlIGlzIHVzZWZ1bCB0byBncmFwaCBzeXN0ZW0gaW1wbGVtZW50ZXJzIHdobyB3YW50IHRvIHZhbGlkYXRlIHRoYXQgdGhlaXIgYEdyYXBoYCBpbXBsZW1lbnRhdGlvbiBpcwogd29ya2luZyBwcm9wZXJseSBhbmQgdGhhdCBHcmVtbGluIGZlYXR1cmVzIHNwZWNpZmljIHRvIGVtYmVkZGVkIHVzZSBjYXNlcyBhcmUgYmVoYXZpbmcgYXMgZXhwZWN0ZWQuIFRoZXNlIHRlc3RzIGRvIG5vdAogdmFsaWRhdGUgdGhhdCBhbGwgdGhlIHNlbWFudGljcyBvZiB0aGUgR3JlbWxpbiBxdWVyeSBsYW5ndWFnZSBhcmUgcHJvcGVybHkgb3BlcmF0aW5nLiBQcm92aWRlcnMgc2hvdWxkIGltcGxlbWVudCB0aGUKQEAgLTY2Myw3ICs2NjUsNyBAQAogYW5kIHRoZSBHaGVya2luIHN1aXRlLgogCiBUbyBpbXBsZW1lbnQgdGhlIEpWTSB0ZXN0cywgcHJvdmlkZSB0ZXN0IGNhc2UgaW1wbGVtZW50YXRpb25zIGFzIHNob3duIGJlbG93LCB3aGVyZSBgWFhYYCBiZWxvdyBkZW5vdGVzIHRoZSBuYW1lIG9mIHRoZQotZ3JhcGggaW1wbGVtZW50YXRpb24gKGUuZy4gVGlua2VyR3JhcGgsIE5lbzRqR3JhcGgsIEhhZG9vcEdyYXBoLCBldGMuKS4KK2dyYXBoIGltcGxlbWVudGF0aW9uIChlLmcuIFRpbmtlckdyYXBoLCBIYWRvb3BHcmFwaCwgZXRjLikuCiAKIFtzb3VyY2UsamF2YV0KIC0tLS0KQEAgLTcwNyw4ICs3MDksOCBAQAogW3NvdXJjZSxqYXZhXQogLS0tLQogQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1NUUlVDVFVSRV9TVEFOREFSRCkKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX1NUQU5EQVJEKQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfQ09NUFVURVIpCitAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9TVEFOREFSRCkKK0BHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0VNQkVEREVEX0NPTVBVVEVSKQogcHVibGljIGNsYXNzIFRpbmtlckdyYXBoIGltcGxlbWVudHMgR3JhcGggewogLS0tLQogCkBAIC03MjQsOCArNzI2LDggQEAKIAogW3NvdXJjZSxqYXZhXQogLS0tLQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfU1RBTkRBUkQpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19DT01QVVRFUikKK0BHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0VNQkVEREVEX1NUQU5EQVJEKQorQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfRU1CRURERURfQ09NUFVURVIpCiBAR3JhcGguT3B0T3V0KAogICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5ncmFwaC5zdGVwLm1hcC5NYXRjaFRlc3QkVHJhdmVyc2FscyIsCiAgICAgICAgIG1ldGhvZCA9ICJnX1ZfbWF0Y2hYYV9oYXNYbmFtZV9HYXJjaWFYX19hX2luWHdyaXR0ZW5CeVhfYl9fYV9pblhzdW5nQnlYX2JYIiwKQEAgLTgyNCw3ICs4MjYsNyBAQAogd2l0aCB0aGVpciBzeW50YXggZGVzY3JpYmVkIGluIHRoZQogbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L2RldmVsb3Blci8jZ3JlbWxpbi1sYW5ndWFnZS10ZXN0LWNhc2VzW1RpbmtlclBvcCBEZXZlbG9wZXIgRG9jdW1lbnRhdGlvbl0uCiAKLVRpbmtlclBvcCBwcm92aWRlcyBzb21lIGluZnJhc3RydWN0dXJlLCBmb3IgSlZNIGJhc2VkIGdyYXBocywgdG8gaGVscCBtYWtlIGl0IGVhc2llciBmb3IgcHJvdmlkZXJzIHRvIGltcGxlbWVudCB0aGVzZQorVGlua2VyUG9wIHByb3ZpZGVzIHNvbWUgaW5mcmFzdHJ1Y3R1cmUgZm9yIEpWTS1iYXNlZCBncmFwaHMgdG8gaGVscCBtYWtlIGl0IGVhc2llciBmb3IgcHJvdmlkZXJzIHRvIGltcGxlbWVudCB0aGVzZQogdGVzdHMgYWdhaW5zdCB0aGVpciBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaW5mcmFzdHJ1Y3R1cmUgaXMgYnVpbHQgb24gYGN1Y3VtYmVyLWphdmFgIHdoaWNoIGlzIGEgZGVwZW5kZW5jeSBvZgogYGdyZW1saW4tdGVzdGAuIFRoZXJlIGFyZSB0d28gbWFpbiBjb21wb25lbnRzIHRvIGltcGxlbWVudGluZyB0aGUgdGVzdHM6CiAKQEAgLTgzOSw3ICs4NDEsNyBAQAogcHJvcGVybHkgaW1wbGVtZW50aW5nIHRoZSBgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ2V0R3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGhEYXRhKWAgbWV0aG9kIHdoaWNoIHByb3ZpZGVzIHRvIHRoZSB0ZXN0CiB0aGUgYEdyYXBoVHJhdmVyc2FsU291cmNlYCB0byBleGVjdXRlIHRoZSB0ZXN0IGFnYWluc3QuCiAKLVRoZSBKVW5pdCB0ZXN0IGNsYXNzIGlzIHJlYWxseSBqdXN0IHRoZSB0ZXN0IHJ1bm5lci4gSXQgaXMgYSBzaW1wbGUgY2xhc3Mgd2hpY2ggbXVzdCBpbmNsdWRlIHNvbWUgQ3VjdW1iZXIgYW5ub3RhdGlvbnMuCitUaGUgSlVuaXQgdGVzdCBjbGFzcyBpcyByZWFsbHkganVzdCB0aGUgdGVzdCBydW5uZXIuIEl0IGlzIGEgc2ltcGxlIGNsYXNzIHRoYXQgbXVzdCBpbmNsdWRlIHNvbWUgQ3VjdW1iZXIgYW5ub3RhdGlvbnMuCiBUaGUgZm9sbG93aW5nIGlzIGp1c3QgYW4gZXhhbXBsZSBhcyB0YWtlbiBmcm9tIFRpbmtlckdyYXBoOgogCiBbc291cmNlLGphdmFdCkBAIC04NDksMTEgKzg1MSwxMSBAQAogICAgICAgICB0YWdzID0gIm5vdCBAR3JhcGhDb21wdXRlck9ubHkgYW5kIG5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMiLAogICAgICAgICBnbHVlID0geyAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcyIgfSwKICAgICAgICAgZmVhdHVyZXMgPSB7ICJjbGFzc3BhdGg6L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcyIgfSwKLSAgICAgICAgcGx1Z2luID0geyJwcm9ncmVzcyIsICJqdW5pdDp0YXJnZXQvY3VjdW1iZXIueG1sIiwKLSAgICAgICAgb2JqZWN0RmFjdG9yeSA9IEd1aWNlRmFjdG9yeS5jbGFzc30pCisgICAgICAgIHBsdWdpbiA9IHsicHJvZ3Jlc3MiLCAianVuaXQ6dGFyZ2V0L2N1Y3VtYmVyLnhtbCJ9LAorICAgICAgICBvYmplY3RGYWN0b3J5ID0gVGlua2VyR3JhcGhGZWF0dXJlVGVzdC5UaW5rZXJHcmFwaEd1aWNlRmFjdG9yeS5jbGFzcykKIC0tLS0KIAotVGhlIGBAQ3VjdW1iZXJPcHRpb25zYCB0aGF0IGFyZSB1c2VkIGFyZSBtb3N0bHkgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMsIHNvIGl0IHdpbGwgYmUgdXAgdG8gdGhlIHByb3ZpZGVyIHRvIG1ha2Ugc29tZQorVGhlIGBAQ3VjdW1iZXJPcHRpb25zYCB0aGF0IGFyZSB1c2VkIGFyZSBtb3N0bHkgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMsIHNvIGl0IHdpbGwgYmUgdXAgdG8gdGhlIHByb3ZpZGVyIHRvIG1ha2Ugc29tZQogY2hvaWNlcyBhcyB0byB3aGF0IGlzIHJpZ2h0IGZvciB0aGVpciBlbnZpcm9ubWVudC4gRm9yIFRpbmtlckdyYXBoLCBpdCBuZWVkZWQgdG8gaWdub3JlIEdoZXJraW4gdGVzdHMgd2l0aCB0aGUKIGBAR3JhcGhDb21wdXRlck9ubHlgIGFuZCBgQEFsbG93TnVsbFByb3BlcnR5VmFsdWVzYCB0YWdzICh0aGUgZnVsbCBsaXN0IG9mIHBvc3NpYmxlIHRhZ3MgY2FuIGJlIGZvdW5kCiBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9kZXYvZGV2ZWxvcGVyLyNnaGVya2luLXRhZ3NbaGVyZV0pLCBzaW5jZSB0aGlzIGNvbmZpZ3VyYXRpb24gd2FzIGZvciBPTFRQCkBAIC04NjUsNDcgKzg2NywzOCBAQAogCiBUaGUgIm9iamVjdEZhY3RvcnkiIGlzIHRoZSBsYXN0IGNvbXBvbmVudC4gQ3VjdW1iZXIgcmVsaWVzIG9uIGRlcGVuZGVuY3kgaW5qZWN0aW9uIHRvIGdldCBhIGBXb3JsZGAgaW1wbGVtZW50YXRpb24gaW50bwogdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuIFByb3ZpZGVycyBtYXkgY2hvb3NlIGZyb20gbXVsdGlwbGUgYXZhaWxhYmxlIGltcGxlbWVudGF0aW9ucywgYnV0IFRpbmtlclBvcCBjaG9zZSB0byB1c2UKLUd1aWNlLiBUbyBmb2xsb3cgdGhpcyBhcHByb2FjaCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbW9kdWxlOgorR3VpY2UuIFRvIGZvbGxvdyB0aGlzIGFwcHJvYWNoLCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbW9kdWxlOgogCiBbc291cmNlLHhtbF0KIC0tLS0KIDxkZXBlbmRlbmN5PgogICAgIDxncm91cElkPmNvbS5nb29nbGUuaW5qZWN0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmd1aWNlPC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjQuMi4zPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMC4wPC92ZXJzaW9uPgogICAgIDxzY29wZT50ZXN0PC9zY29wZT4KIDwvZGVwZW5kZW5jeT4KIC0tLS0KIAotRm9sbG93aW5nIHRoZSBOZW80akdyYXBoIGltcGxlbWVudGF0aW9uLCB0aGVyZSBhcmUgdHdvIGNsYXNzZXMgdG8gY29uc3RydWN0OgorRm9sbG93aW5nIHRoZSBUaW5rZXJHcmFwaCBpbXBsZW1lbnRhdGlvbiwgdGhlcmUgYXJlIHR3byBjbGFzc2VzIHRvIGNvbnN0cnVjdDoKIAogW3NvdXJjZSxqYXZhXQogLS0tLQotcHVibGljIGNsYXNzIFNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBBYnN0cmFjdE1vZHVsZSB7CitwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBBYnN0cmFjdE1vZHVsZSB7CiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlKCkgewotICAgICAgICBiaW5kKFdvcmxkLmNsYXNzKS50byhOZW80akdyYXBoV29ybGQuY2xhc3MpOworICAgICAgICBiaW5kKFdvcmxkLmNsYXNzKS50byhUaW5rZXJXb3JsZC5UaW5rZXJHcmFwaFdvcmxkLmNsYXNzKTsKICAgICB9CiB9CiAKLXB1YmxpYyBjbGFzcyBXb3JsZEluamVjdG9yU291cmNlIGltcGxlbWVudHMgSW5qZWN0b3JTb3VyY2UgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbmplY3RvciBnZXRJbmplY3RvcigpIHsKLSAgICAgICAgcmV0dXJuIEd1aWNlLmNyZWF0ZUluamVjdG9yKFN0YWdlLlBST0RVQ1RJT04sIEN1Y3VtYmVyTW9kdWxlcy5jcmVhdGVTY2VuYXJpb01vZHVsZSgpLCBuZXcgU2VydmljZU1vZHVsZSgpKTsKK3B1YmxpYyBzdGF0aWMgY2xhc3MgVGlua2VyR3JhcGhHdWljZUZhY3RvcnkgZXh0ZW5kcyBBYnN0cmFjdEd1aWNlRmFjdG9yeSB7CisgICAgcHVibGljIFRpbmtlckdyYXBoR3VpY2VGYWN0b3J5KCkgeworICAgICAgICBzdXBlcihHdWljZS5jcmVhdGVJbmplY3RvcihTdGFnZS5QUk9EVUNUSU9OLCBDdWN1bWJlck1vZHVsZXMuY3JlYXRlU2NlbmFyaW9Nb2R1bGUoKSwgbmV3IFNlcnZpY2VNb2R1bGUoKSkpOwogICAgIH0KIH0KIC0tLS0KIAotVGhlIGtleSBoZXJlIGlzIHRoYXQgdGhlIGBOZW80akdyYXBoV29ybGRgIGltcGxlbWVudGF0aW9uIGdldHMgYm91bmQgdG8gYFdvcmxkYCBpbiB0aGUgYFNlcnZpY2VNb2R1bGVgIGFuZCB0aGVyZSBpcwotYSBgV29ybGRJbmplY3RvclNvdXJjZWAgdGhhdCBzcGVjaWZpZXMgdGhlIGBTZXJ2aWNlTW9kdWxlYCB0byBDdWN1bWJlci4gQXMgYSBmaW5hbCBzdGVwLCB0aGUgcHJvdmlkZXIncyB0ZXN0IHJlc291cmNlcwotbmVlZHMgYSBgY3VjdW1iZXIucHJvcGVydGllc2AgZmlsZSB3aXRoIGFuIGVudHJ5IHRoYXQgc3BlY2lmaWVzIHRoZSBgSW5qZWN0b3JTb3VyY2VgIHNvIHRoYXQgR3VpY2UgY2FuIGZpbmQgaXQuIEhlcmUKLWlzIHRoZSBleGFtcGxlIHRha2VuIGZyb20gVGlua2VyR3JhcGggd2hlcmUgdGhlIGBXb3JsZEluamVjdG9yU291cmNlYCBpcyBpbm5lciBjbGFzcyBvZiBgVGlua2VyR3JhcGhGZWF0dXJlVGVzdGAKLWl0c2VsZi4KLQotW3NvdXJjZSx0ZXh0XQotLS0tLQotZ3VpY2UuaW5qZWN0b3Itc291cmNlPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouTmVvNGpHcmFwaEZlYXR1cmVUZXN0JFdvcmxkSW5qZWN0b3JTb3VyY2UKLS0tLS0KK1RoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBgVGlua2VyV29ybGQuVGlua2VyR3JhcGhXb3JsZGAgaW1wbGVtZW50YXRpb24gZ2V0cyBib3VuZCB0byBgV29ybGRgIGluIHRoZSBgU2VydmljZU1vZHVsZWAgYW5kCit0aGVyZSBpcyBhIGBUaW5rZXJHcmFwaEd1aWNlRmFjdG9yeWAgdGhhdCBzcGVjaWZpZXMgdGhlIGBTZXJ2aWNlTW9kdWxlYCB0byBDdWN1bWJlci4KIAogSW4gdGhlIGV2ZW50IHRoYXQgYSBzaW5nbGUgYFdvcmxkYCBjb25maWd1cmF0aW9uIGlzIGluc3VmZmljaWVudCwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBkZXZlbG9wIGEgY3VzdG9tCiBgT2JqZWN0RmFjdG9yeWAuIEFuIGVhc3kgd2F5IHRvIGRvIHRoaXMgaXMgdG8gY3JlYXRlIGEgY2xhc3MgdGhhdCBleHRlbmRzIGZyb20gdGhlIGBBYnN0cmFjdEd1aWNlRmFjdG9yeWAgaW4KQEAgLTkxNCw0MCArOTA3LDE1IEBACiBlbnRyeSB0aGF0IHJlZ2lzdGVycyB0aGUgY3VzdG9tIGltcGxlbWVudGF0aW9uLiBQbGVhc2Ugc2VlIHRoZSBUaW5rZXJHcmFwaCB0ZXN0IGNvZGUgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcwogYXBwcm9hY2guCiAKLUlmIGltcGxlbWVudGluZyB0aGUgR2hlcmtpbiB0ZXN0cywgcHJvdmlkZXJzIGNhbiBjaG9vc2UgdG8gb3B0LWluIHRvIHRoZSBzbGltbWVkIGRvd24gdmVyc2lvbiBvZiB0aGUgbm9ybWFsIEpWTSBwcm9jZXNzCitJZiBpbXBsZW1lbnRpbmcgdGhlIEdoZXJraW4gdGVzdHMsIHByb3ZpZGVycyBjYW4gY2hvb3NlIHRvIG9wdC1pbiB0byB0aGUgc2xpbW1lZC1kb3duIHZlcnNpb24gb2YgdGhlIG5vcm1hbCBKVk0gcHJvY2VzcwogdGVzdCBzdWl0ZSB0byBoZWxwIGFsbGV2aWF0ZSB0ZXN0IGR1cGxpY2F0aW9uIGJldHdlZW4gdGhlIHR3byBmcmFtZXdvcmtzOgogCiBbc291cmNlLGphdmFdCiAtLS0tCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19MSU1JVEVEX1NUQU5EQVJEKQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfTElNSVRFRF9DT01QVVRFUikKK0BHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0VNQkVEREVEX1NUQU5EQVJEKQorQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfRU1CRURERURfQ09NUFVURVIpCiAtLS0tCiAKLT09PSBBY2Nlc3NpYmlsaXR5IHZpYSBHcmVtbGluUGx1Z2luCi0KLWltYWdlOmdyZW1saW4tcGx1Z2luLnBuZ1t3aWR0aD0xMDAsZmxvYXQ9bGVmdF0gVGhlIGFwcGxpY2F0aW9ucyBkaXN0cmlidXRlZCB3aXRoIFRpbmtlclBvcCBkbyBub3QgZGlzdHJpYnV0ZSB3aXRoCi1hbnkgZ3JhcGggc3lzdGVtIGltcGxlbWVudGF0aW9ucyBiZXNpZGVzIFRpbmtlckdyYXBoLiBJZiB5b3VyIGltcGxlbWVudGF0aW9uIGlzIHN0b3JlZCBpbiBhIE1hdmVuIHJlcG9zaXRvcnkgKGUuZy4KLU1hdmVuIENlbnRyYWwgUmVwb3NpdG9yeSksIHRoZW4gaXQgaXMgYmVzdCB0byBwcm92aWRlIGEgPDxncmVtbGluLXBsdWdpbnMsYEdyZW1saW5QbHVnaW5gPj4gaW1wbGVtZW50YXRpb24gc28gdGhlIHJlc3BlY3RpdmUgamFycyBjYW4gYmUKLWRvd25sb2FkZWQgYWNjb3JkaW5nIGFuZCB3aGVuIHJlcXVpcmVkIGJ5IHRoZSB1c2VyLiBOZW80aidzIEdyZW1saW5QbHVnaW4gaXMgcHJvdmlkZWQgYmVsb3cgZm9yIHJlZmVyZW5jZS4KLQotW3NvdXJjZSxqYXZhXQotLS0tLQotaW5jbHVkZTo6e2Jhc2VkaXJ9L25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL2pzcjIyMy9OZW80akdyZW1saW5QbHVnaW4uamF2YVtdCi0tLS0tCi0KLVdpdGggdGhlIGFib3ZlIHBsdWdpbiBpbXBsZW1lbnRhdGlvbnMsIHVzZXJzIGNhbiBub3cgZG93bmxvYWQgcmVzcGVjdGl2ZSBiaW5hcmllcyBmb3IgR3JlbWxpbiBDb25zb2xlLCBHcmVtbGluIFNlcnZlciwgZXRjLgotCi1bc291cmNlLGdyb292eV0KLWdyZW1saW4+IGcgPSBOZW80akdyYXBoLm9wZW4oJy90bXAvbmVvNGonKQotTm8gc3VjaCBwcm9wZXJ0eTogTmVvNGpHcmFwaCBmb3IgY2xhc3M6IGdyb292eXNoX2V2YWx1YXRlCi1EaXNwbGF5IHN0YWNrIHRyYWNlPyBbeU5dCi1ncmVtbGluPiA6aW5zdGFsbCBvcmcuYXBhY2hlLnRpbmtlcnBvcCBuZW80ai1ncmVtbGluIHgueS56Ci09PT5sb2FkZWQ6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcCwgbmVvNGotZ3JlbWxpbiwg4oCmXQotZ3JlbWxpbj4gOnBsdWdpbiB1c2UgdGlua2VycG9wLm5lbzRqCi09PT50aW5rZXJwb3AubmVvNGogYWN0aXZhdGVkCi1ncmVtbGluPiBnID0gTmVvNGpHcmFwaC5vcGVuKCcvdG1wL25lbzRqJykKLT09Pm5lbzRqZ3JhcGhbRW1iZWRkZWRHcmFwaERhdGFiYXNlIFsvdG1wL25lbzRqXV0KLQogPT09IEluLURlcHRoIEltcGxlbWVudGF0aW9ucwogCiBpbWFnZTpncmVtbGluLXBhaW50aW5nLnBuZ1t3aWR0aD0yMDAsZmxvYXQ9cmlnaHRdIFRoZSBncmFwaCBzeXN0ZW0gaW1wbGVtZW50YXRpb24gZGV0YWlscyBwcmVzZW50ZWQgdGh1cyBmYXIgYXJlCkBAIC05NzgsMTkgKzk0NiwxNSBAQAogSXQgaXMgaG93ZXZlciBwb3NzaWJsZSB0byBkZXNjcmliZSB0aGUgY29yZSBjb21tdW5pY2F0aW9uIHByb3RvY29sIHVzaW5nIHRoZSBzdGFuZGFyZCBvdXQtb2YtdGhlLWJveCBjb25maWd1cmF0aW9uCiB3aGljaCBzaG91bGQgcHJvdmlkZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZGV2ZWxvcCBhIGRyaXZlciBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZS4KIAotaW1hZ2U6OmdyZW1saW4tc2VydmVyLWZsb3cucG5nW3dpZHRoPTMwMCxmbG9hdD1yaWdodF0KK0dyZW1saW4gU2VydmVyIGlzIGRpc3RyaWJ1dGVkIHdpdGggYSBjb25maWd1cmF0aW9uIHRoYXQgdXRpbGl6ZXMgSFRUUCB3aXRoIGEgY3VzdG9tIEFQSS4gIFVuZGVyIHRoaXMgY29uZmlndXJhdGlvbiwKK0dyZW1saW4gU2VydmVyIGFjY2VwdHMgcmVxdWVzdHMgY29udGFpbmluZyBhIEdyZW1saW4gc2NyaXB0LCBldmFsdWF0ZXMgdGhhdCBzY3JpcHQgYW5kIHRoZW4gc3RyZWFtcyBiYWNrIHRoZSByZXN1bHRzIGluCitIVFRQIGNodW5rcy4KIAotR3JlbWxpbiBTZXJ2ZXIgaXMgZGlzdHJpYnV0ZWQgd2l0aCBhIGNvbmZpZ3VyYXRpb24gdGhhdCB1dGlsaXplcyBsaW5rOmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2ViU29ja2V0W1dlYlNvY2tldF0KLXdpdGggYSBjdXN0b20gc3ViLXByb3RvY29sLiAgVW5kZXIgdGhpcyBjb25maWd1cmF0aW9uLCBHcmVtbGluIFNlcnZlciBhY2NlcHRzIHJlcXVlc3RzIGNvbnRhaW5pbmcgYSBHcmVtbGluIHNjcmlwdCwKLWV2YWx1YXRlcyB0aGF0IHNjcmlwdCBhbmQgdGhlbiBzdHJlYW1zIGJhY2sgdGhlIHJlc3VsdHMuICBUaGUgbm90aW9uIG9mICJzdHJlYW1pbmciIGlzIGRlcGljdGVkIGluIHRoZSBkaWFncmFtIHRvIHRoZQotcmlnaHQuCi0KLVRoZSBkaWFncmFtIHNob3dzIGFuIGluY29taW5nIHJlcXVlc3QgdG8gcHJvY2VzcyB0aGUgR3JlbWxpbiBzY3JpcHQgb2YgYGcuVigpYC4gIEdyZW1saW4gU2VydmVyIGV2YWx1YXRlcyB0aGF0IHNjcmlwdCwKLWdldHRpbmcgYW4gYEl0ZXJhdG9yYCBvZiB2ZXJ0aWNlcyBhcyBhIHJlc3VsdCwgYW5kIHN0ZXBzIHRocm91Z2ggZWFjaCBgVmVydGV4YCB3aXRoaW4gaXQuICBUaGUgdmVydGljZXMgYXJlIGJhdGNoZWQKLXRvZ2V0aGVyIGdpdmVuIHRoZSBgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplYCBjb25maWd1cmF0aW9uLiAgSW4gdGhpcyBjYXNlLCB0aGF0IHZhbHVlIG11c3QgYmUgYDJgIGdpdmVuIHRoYXQgZWFjaAotInJlc3BvbnNlIiBjb250YWlucyB0d28gdmVydGljZXMuICBFYWNoIHJlc3BvbnNlIGlzIHNlcmlhbGl6ZWQgZ2l2ZW4gdGhlIHJlcXVlc3RlZCBzZXJpYWxpemVyIHR5cGUgKEpTT04gaXMgbGlrZWx5Ci1iZXN0IGZvciBub24tSlZNIGxhbmd1YWdlcykgYW5kIHdyaXR0ZW4gYmFjayB0byB0aGUgcmVxdWVzdGluZyBjbGllbnQgaW1tZWRpYXRlbHkuICBHcmVtbGluIFNlcnZlciBkb2VzIG5vdCB3YWl0IGZvcgotdGhlIGVudGlyZSByZXN1bHQgdG8gYmUgaXRlcmF0ZWQsIGJlZm9yZSBzZW5kaW5nIGJhY2sgYSByZXNwb25zZS4gIEl0IHdpbGwgc2VuZCB0aGUgcmVzcG9uc2VzIGFzIHRoZXkgYXJlIHJlYWxpemVkLgorTGV0J3MgdXNlIHRoZSBpbmNvbWluZyByZXF1ZXN0IHRvIHByb2Nlc3MgdGhlIEdyZW1saW4gc2NyaXB0IG9mIGBnLlYoKWAgYXMgYW4gZXhhbXBsZS4gIEdyZW1saW4gU2VydmVyIGV2YWx1YXRlcyB0aGF0CitzY3JpcHQsIGdldHRpbmcgYW4gYEl0ZXJhdG9yYCBvZiB2ZXJ0aWNlcyBhcyBhIHJlc3VsdCwgYW5kIHN0ZXBzIHRocm91Z2ggZWFjaCBgVmVydGV4YCB3aXRoaW4gaXQuICBUaGUgdmVydGljZXMgYXJlCitiYXRjaGVkIHRvZ2V0aGVyIGludG8gYW4gSFRUUCBjaHVuay4gIEVhY2ggcmVzcG9uc2UgaXMgc2VyaWFsaXplZCBnaXZlbiB0aGUgcmVxdWVzdGVkIHNlcmlhbGl6ZXIgdHlwZSAoR3JhcGhCaW5hcnkgaXMKK3JlY29tbWVuZGVkKSBhbmQgd3JpdHRlbiBiYWNrIHRvIHRoZSByZXF1ZXN0aW5nIGNsaWVudCBpbW1lZGlhdGVseS4gIEdyZW1saW4gU2VydmVyIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBlbnRpcmUgcmVzdWx0Cit0byBiZSBpdGVyYXRlZCwgYmVmb3JlIHNlbmRpbmcgYmFjayBhIHJlc3BvbnNlLiAgSXQgd2lsbCBzZW5kIHRoZSByZXNwb25zZXMgYXMgdGhleSBhcmUgcmVhbGl6ZWQuCiAKIFRoaXMgYXBwcm9hY2ggYWxsb3dzIGZvciB0aGUgcHJvY2Vzc2luZyBvZiBsYXJnZSByZXN1bHQgc2V0cyB3aXRob3V0IGhhdmluZyB0byBzZXJpYWxpemUgdGhlIGVudGlyZSByZXN1bHQgaW50byBtZW1vcnkKIGZvciB0aGUgcmVzcG9uc2UuICBJdCBwbGFjZXMgYSBiaXQgb2YgYSBidXJkZW4gb24gdGhlIGRldmVsb3BlciBvZiB0aGUgZHJpdmVyIGhvd2V2ZXIsIGJlY2F1c2UgaXQgYmVjb21lcyBuZWNlc3NhcnkgdG8KQEAgLTk5OSwzNTAgKzk2MywzMjggQEAKIG91dC1vZi10aGUtYm94IGNvbmZpZ3VyYXRpb24uICBJdCBpcyBxdWl0ZSBwb3NzaWJsZSB0byBjb25zdHJ1Y3Qgb3RoZXIgZmxvd3MsIHRoYXQgbWlnaHQgYmUgbW9yZSBhbWVuYWJsZSB0byBhCiBwYXJ0aWN1bGFyIGxhbmd1YWdlIG9yIHN0eWxlIG9mIHByb2Nlc3NpbmcuCiAKLUl0IGlzIHJlY29tbWVuZGVkIGJ1dCBub3QgcmVxdWlyZWQgdGhhdCBhIGRyaXZlciBpbmNsdWRlIGEgYFVzZXItQWdlbnRgIGhlYWRlciBhcyBwYXJ0IG9mIGFueSB3ZWIgc29ja2V0Ci1oYW5kc2hha2UgcmVxdWVzdCB0byBHcmVtbGluIFNlcnZlci4gR3JlbWxpbiBTZXJ2ZXIgdXNlcyB0aGUgdXNlciBhZ2VudCBpbiBidWlsZGluZyB1c2FnZSBtZXRyaWNzCi1hcyB3ZWxsIGFzIGRlYnVnZ2luZy4gVGhlIHN0YW5kYXJkIGZvcm1hdCBmb3IgY29ubmVjdGlvbiB1c2VyIGFnZW50cyBpczoKK05PVEU6IFRpbmtlclBvcCBwcm92aWRlcyBhIHRlc3Qgc2VydmVyIHdoaWNoIG1heSBiZSB1c2VmdWwgZm9yIHRlc3RpbmcgZHJpdmVycy4gRGV0YWlscyBjYW4gYmUgZm91bmQKK2xpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvZGV2L2RldmVsb3Blci8jZ3JlbWxpbi1zb2NrZXQtc2VydmVyLXRlc3RzW2hlcmVdCiAKK0l0IGlzIHJlY29tbWVuZGVkIGJ1dCBub3QgcmVxdWlyZWQgdGhhdCBhIGRyaXZlciBpbmNsdWRlIGEgYFVzZXItQWdlbnRgIGhlYWRlciBhcyBwYXJ0IG9mIGFueSBIVFRQIHJlcXVlc3QgdG8gR3JlbWxpbgorU2VydmVyLiBHcmVtbGluIFNlcnZlciB1c2VzIHRoZSB1c2VyIGFnZW50IGluIGJ1aWxkaW5nIHVzYWdlIG1ldHJpY3MgYXMgd2VsbCBhcyBkZWJ1Z2dpbmcuIFRoZSBzdGFuZGFyZCBmb3JtYXQgZm9yCitjb25uZWN0aW9uIHVzZXIgYWdlbnRzIGlzOgorCitbW3VzZXItYWdlbnQtZm9ybWF0XV0KIGAiW0FwcGxpY2F0aW9uIE5hbWVdIFtHTFYgTmFtZV0uW1ZlcnNpb25dIFtMYW5ndWFnZSBSdW50aW1lIFZlcnNpb25dIFtPU10uW1ZlcnNpb25dIFtDUFUgQXJjaGl0ZWN0dXJlXSJgCiBGb3IgZXhhbXBsZToKIGAiTXlUZXN0QXBwbGljYXRpb24gR3JlbWxpbi1KYXZhLjMuNS40IDExLjAuMTYuMSBNYWNfT1NfWC4xMi42LjEgYWFyY2g2NCJgCiAKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbiBwcm92aWRlcyBhbiBpbi1kZXB0aCBkZXNjcmlwdGlvbiBvZiB0aGUgVGlua2VyUG9wIEhUVFAgQVBJLiAgVGhlIEhUVFAgQVBJIGlzIHVzZWQgZm9yCitjb21tdW5pY2F0aW5nIHRoZSByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzIHRoYXQgd2VyZSBkZXNjcmliZWQgZWFybGllci4KKworPT09IEhUVFAgQVBJCisKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIFRpbmtlclBvcCBIVFRQIEFQSSB3aGljaCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYm90aCBncmFwaCBzeXN0ZW0gcHJvdmlkZXJzIGFuZCBncmFwaAorZHJpdmVyIHByb3ZpZGVycy4gVGhlcmUgaXMgb25seSBvbmUgZW5kcG9pbnQgdGhhdCBjdXJyZW50bHkgbmVlZHMgdG8gYmUgc3VwcG9ydGVkIHdoaWNoIGlzIGBQT1NUIC9ncmVtbGluYC4gVGhpcworZW5kcG9pbnQgaXMgYSBHcmVtbGluIGV2YWx1YXRvciB3aGljaCB0YWtlcyBpbiBhIEdyZW1saW4gc2NyaXB0IHJlcXVlc3QgYW5kIHJlc3BvbmRzIHdpdGggdGhlIHNlcmlhbGl6ZWQgcmVzdWx0cy4gVGhlCitmb3JtYXRzIGJlbG93IHVzZSBhIGJpdCBvZiBwc2V1ZG8tSlNPTiB0byBoZWxwIHJlcHJlc2VudCByZXF1ZXN0IGFuZCByZXNwb25zZSBib2RpZXMuIFRoZSBhY3R1YWwgZm9ybWF0IG9mIHRoZSByZXF1ZXN0CithbmQgcmVzcG9uc2UgYm9kaWVzIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgc2VyaWFsaXplcnMgZGVmaW5lZCB2aWEgdGhlICJBY2NlcHQiIGFuZCAiQ29udGVudC1UeXBlIiBoZWFkZXJzLiBBcyBhCityZXN1bHQsIGEgZ2VuZXJpYyB0eXBlIGRlZmluaXRpb24gaW4gdGhpcyBkb2N1bWVudCBsaWtlICJudW1iZXIiIGNvdWxkIHRyYW5zbGF0ZSB0byBhICJsb25nIiBmb3IgYSBzZXJpYWxpemVyIHRoYXQKK3N1cHBvcnRzIHR5cGVzIGxpa2UgR3JhcGhCaW5hcnkuCisKKz09PT0gSFRUUCBSZXF1ZXN0CisKIFRvIGZvcm11bGF0ZSBhIHJlcXVlc3QgdG8gR3JlbWxpbiBTZXJ2ZXIsIGEgYFJlcXVlc3RNZXNzYWdlYCBuZWVkcyB0byBiZSBjb25zdHJ1Y3RlZC4gIFRoZSBgUmVxdWVzdE1lc3NhZ2VgIGlzIGEKLWdlbmVyYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mIGEgcmVxdWVzdCB0aGF0IGNhcnJpZXMgYSBzZXQgb2YgInN0YW5kYXJkIiB2YWx1ZXMgaW4gYWRkaXRpb24gdG8gb3B0aW9uYWwgb25lcyB0aGF0IGFyZQotZGVwZW5kZW50IG9uIHRoZSBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkLiAgQSBgUmVxdWVzdE1lc3NhZ2VgIGhhcyB0aGVzZSBmaWVsZHM6CitnZW5lcmFsaXplZCByZXByZXNlbnRhdGlvbiBvZiBhIHJlcXVlc3QuIFRoaXMgbWVzc2FnZSBjYW4gYmUgc2VyaWFsaXplZCBpbiBhbnkgZmFzaGlvbiB0aGF0IGlzIHN1cHBvcnRlZCBieSBHcmVtbGluCitTZXJ2ZXIsIHdoaWNoIGJ5IGRlZmF1bHQgaXMgR3JhcGhCaW5hcnkuIEFuIEhUVFAgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGEgYFJlcXVlc3RNZXNzYWdlYCBoYXMgdGhlIGZvbGxvd2luZyBmb3JtOgorCitbc291cmNlLHRleHRdCistLS0tCitQT1NUIC9ncmVtbGluIEhUVFAvMS4xCitBY2NlcHQ6IDxtaW1ldHlwZT4KK0NvbnRlbnQtVHlwZTogPG1pbWV0eXBlPgorR3JlbWxpbi1IaW50czogPGhpbnRzPgorCit7CisgICJncmVtbGluIjogc3RyaW5nLAorICAidGltZW91dE1zIjogbnVtYmVyLAorICAiYmluZGluZ3MiOiBvYmplY3QsCisgICJnIjogc3RyaW5nLAorICAibGFuZ3VhZ2UiIDogc3RyaW5nLAorICAibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIjogc3RyaW5nLAorICAiYnVsa1Jlc3VsdHMiOiBib29sZWFuCit9CistLS0tCisKK0FuIGFjdHVhbCwgY29tcGxldGUgcmVxdWVzdCBtaWdodCBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKKworW3NvdXJjZSx0ZXh0XQorLS0tLQorUE9TVCAvZ3JlbWxpbiBIVFRQLzEuMQorY29udGVudC1sZW5ndGg6IDYxCitob3N0OiAxMjcuMC4wLjEKK2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uCithY2NlcHQtZW5jb2Rpbmc6IGRlZmxhdGUKK2FjY2VwdDogYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAKK3VzZXItYWdlbnQ6IE5vdEF2YWlsYWJsZSBHcmVtbGluLUphdmEuNC4wLjAgMTEuMC4yNSBXaW5kb3dzXzExLjEwLjAgYW1kNjQKK3sKKyAgICAiZ3JlbWxpbiI6ICJnLlYoKSIsCisgICAgImxhbmd1YWdlIjogImdyZW1saW4tbGFuZyIKK30KKy0tLS0KKworPT09PT0gRXhwZWN0ZWQgUmVxdWVzdCBIVFRQIEhlYWRlcnMKKworW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwLDMsMyIsb3B0aW9ucz0iaGVhZGVyIl0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3xOYW1lIHxEZXNjcmlwdGlvbiB8UmVxdWlyZWQgfERlZmF1bHQKK3xBY2NlcHQgfFNlcmlhbGl6ZXIgTUlNRSB0eXBlcyBzdXBwb3J0ZWQgZm9yIHRoZSByZXNwb25zZS4gTXVzdCBiZSBhIG1pbWV0eXBlIChzZWUgPDxzZXJpYWxpemVycz4+KS4gfE5vIHxgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uO3R5cGVzPWZhbHNlYAorfEFjY2VwdC1FbmNvZGluZyB8VGhlIHJlcXVlc3RlZCBjb21wcmVzc2lvbiBhbGdvcml0aG0gb2YgdGhlIHJlc3BvbnNlLiBWYWxpZCB2YWx1ZXM6IGBkZWZsYXRlYC4gfE5vIHxOL0EKK3xBdXRob3JpemF0aW9uIHxIZWFkZXIgdXNlZCB3aXRoIEJhc2ljIGF1dGhvcml6YXRpb24uIHxObyB8Ti9BCit8Q29udGVudC1MZW5ndGggfFRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIHxZZXMgfE4vQQorfENvbnRlbnQtVHlwZSB8VGhlIE1JTUUgdHlwZSBvZiB0aGUgc2VyaWFsaXplZCBib2R5IHxObyB8Tm9uZQorfEdyZW1saW4tSGludHMgfEEgc2VtaS1jb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXkvdmFsdWUgcGFpciBtZXRhZGF0YSB0aGF0IGNvdWxkIGJlIGhlbHBmdWwgdG8gdGhlIHNlcnZlciBpbiBwcm9jZXNzaW5nIGEgcGFydGljdWxhciByZXF1ZXN0IGluIHNvbWUgd2F5LiBNdXN0IGJlIGEgaGludHMgKHNlZSB0YWJsZSBiZWxvdykuIHxObyB8Ti9BCit8VXNlci1BZ2VudCB8VGhlIHVzZXIgYWdlbnQuIEZvbGxvdyB0aGUgZm9ybWF0IHNwZWNpZmllZCBieSA8PHVzZXItYWdlbnQtZm9ybWF0LCB1c2VyIGFnZW50IGZvcm1hdD4+LiB8Tm8gfDw8dXNlci1hZ2VudC1mb3JtYXQsIHVzZXIgYWdlbnQgZm9ybWF0Pj4KK3xYLVRyYW5zYWN0aW9uLUlkIHxUcmFuc2FjdGlvbiBJRCB0aGF0IG11c3QgbWF0Y2ggdGhlIGB0cmFuc2FjdGlvbklkYCBmaWVsZCBpbiB0aGUgcmVxdWVzdCBib2R5LiBFbmFibGVzIGxvYWQgYmFsYW5jZXIgc3RpY2t5IHJvdXRpbmcgd2l0aG91dCByZXF1aXJpbmcgYm9keSBwYXJzaW5nLiBPbmx5IGluY2x1ZGUgd2hlbiBhIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZSAoaS5lLiBhZnRlciBhIHN1Y2Nlc3NmdWwgYmVnaW4gYW5kIGJlZm9yZSBjb21taXQvcm9sbGJhY2spLiB8Tm8gfE4vQQorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis9PT09PSBSZXF1ZXN0IEhlYWRlciBWYWx1ZSBPcHRpb25zCisKK1t3aWR0aD0iMTAwJSIsY29scz0iMiwxMCIsb3B0aW9ucz0iaGVhZGVyIl0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3xOYW1lIHxPcHRpb25zCit8bWltZXR5cGUgfEEgTUlNRSB0eXBlIGxpc3RlZCBpbiA8PHNlcmlhbGl6ZXJzPj4uCit8aGludHMgfCBtdXRhdGlvbnM6IHllcywgbm8sIHVua25vd24gLSBJbmRpY2F0ZXMgaWYgdGhlIEdyZW1saW4gY29udGFpbnMgc3RlcHMgdGhhdCBjYW4gbXV0YXRlIHRoZSBncmFwaC4KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGJvZHkgb2YgdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIGEgYFJlcXVlc3RNZXNzYWdlYCB3aGljaCBpcyBhIGBNYXBgLiBUaGUgYFJlcXVlc3RNZXNzYWdlYCBzaG91bGQgYmUgc2VyaWFsaXplZCB1c2luZwordGhlIHNlcmlhbGl6ZXIgc3BlY2lmaWVkIGJ5IHRoZSBgQ29udGVudC1UeXBlYCBoZWFkZXIuIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBrZXkgdmFsdWUgcGFpcnMgYWxsb3dlZCBpbiBhCitgUmVxdWVzdE1lc3NhZ2VgOgorCis9PT09PSBSZXF1ZXN0IE1lc3NhZ2UgRm9ybWF0CisKK1t3aWR0aD0iMTAwJSIsY29scz0iMywxMCwzLDMiLG9wdGlvbnM9ImhlYWRlciJdCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8S2V5IHxEZXNjcmlwdGlvbiB8VmFsdWUgfFJlcXVpcmVkCit8Z3JlbWxpbiB8VGhlIEdyZW1saW4gcXVlcnkgdG8gZXhlY3V0ZS4gfFN0cmluZyBjb250YWluaW5nIHNjcmlwdCB8WWVzCit8dGltZW91dE1zIHxUaGUgbWF4aW11bSB0aW1lIGEgcXVlcnkgaXMgYWxsb3dlZCB0byBleGVjdXRlIGluIG1pbGxpc2Vjb25kcy4gfE51bWJlciBiZXR3ZWVuIDAgYW5kIDJeMzEtMSB8Tm8KK3xiaW5kaW5ncyB8QSBtYXAgdXNlZCBkdXJpbmcgcXVlcnkgZXhlY3V0aW9uLiBJdHMgdXNhZ2UgZGVwZW5kcyBvbiAibGFuZ3VhZ2UiLiBGb3IgImdyZW1saW4tZ3Jvb3Z5IiwgdGhlc2UgYXJlIHRoZSB2YXJpYWJsZSBiaW5kaW5ncy4gRm9yICJncmVtbGluLWxhbmciLCB0aGVzZSBhcmUgdGhlIHBhcmFtZXRlciBiaW5kaW5ncy4gfE9iamVjdCAoTWFwKSB8Tm8KK3xnIHxUaGUgbmFtZSBvZiB0aGUgZ3JhcGggdHJhdmVyc2FsIHNvdXJjZSB0byB3aGljaCB0aGUgcXVlcnkgYXBwbGllcy4gRGVmYXVsdDogImciIHxTdHJpbmcgY29udGFpbmluZyB0cmF2ZXJzYWwgc291cmNlIG5hbWUgfE5vCit8bGFuZ3VhZ2UgfFRoZSBuYW1lIG9mIHRoZSBTY3JpcHRFbmdpbmUgdG8gdXNlIHRvIHBhcnNlIHRoZSBncmVtbGluIHF1ZXJ5LiBEZWZhdWx0OiAiZ3JlbWxpbi1sYW5nIiB8U3RyaW5nIGNvbnRhaW5pbmcgU2NyaXB0RW5naW5lIG5hbWUgfE5vCit8bWF0ZXJpYWxpemVQcm9wZXJ0aWVzIHxXaGV0aGVyIHRvIGluY2x1ZGUgYWxsIHByb3BlcnRpZXMgZm9yIHJlc3VsdHMuIE9uZSBvZiAidG9rZW5zIiBvciAiYWxsIi4gfFN0cmluZyB8Tm8KK3xidWxrUmVzdWx0cyB8V2hldGhlciB0aGUgcmVzdWx0cyBzaG91bGQgYmUgYnVsa2VkIGJ5IHRoZSBzZXJ2ZXIgKG9ubHkgYXBwbGllcyB0byBHcmFwaEJpbmFyeSkgfEJvb2xlYW4gfE5vCit8dHJhbnNhY3Rpb25JZCB8QSBzZXJ2ZXItZ2VuZXJhdGVkIFVVSUQgdGhhdCBpZGVudGlmaWVzIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4gTXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgbm9uLWJlZ2luIHJlcXVlc3RzIHdpdGhpbiB0aGF0IHRyYW5zYWN0aW9uLiBPbWl0IGZvciBub24tdHJhbnNhY3Rpb25hbCByZXF1ZXN0cyBhbmQgZm9yIHRoZSBpbml0aWFsIGJlZ2luIHJlcXVlc3QuIHxTdHJpbmcgfE5vCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT0gSFRUUCBSZXNwb25zZQorCitXaGVuIEdyZW1saW4gU2VydmVyIHJlY2VpdmVzIHRoYXQgcmVxdWVzdCwgaXQgd2lsbCBkZWNvZGUgaXQgZ2l2ZW4gdGhlICJtaW1lIHR5cGUiLCBhbmQgZXhlY3V0ZSBpdCB1c2luZyB0aGUKK2BTY3JpcHRFbmdpbmVgIHNwZWNpZmllZCBieSB0aGUgYGxhbmd1YWdlYCBmaWVsZC4gIEluIHRoaXMgY2FzZSwgaXQgd2lsbCBldmFsdWF0ZSB0aGUgc2NyaXB0IGBnLlYoeCkub3V0KClgIHVzaW5nIHRoZQorYGJpbmRpbmdzYCBzdXBwbGllZCBpbiB0aGUgYGFyZ3NgIGFuZCBzdHJlYW0gYmFjayB0aGUgcmVzdWx0cyBpbiBIVFRQIGNodW5rcy4gV2hlbiB0aGUgY2h1bmtzIGFyZSBjb21iaW5lZCwgdGhleSB3aWxsCitmb3JtIGEgc2luZ2xlIGBSZXNwb25zZU1lc3NhZ2VgLiAgVGhlIEhUVFAgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgYFJlc3BvbnNlTWVzc2FnZWAgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybToKKworW3NvdXJjZSx0ZXh0XQorLS0tLQorSFRUUC8xLjEgMjAwCitDb250ZW50LXR5cGU6IDxtaW1ldHlwZT4KK1RyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkCitHcmVtbGluLVJlcXVlc3RJZDogPHV1aWQ+Cit7CisgICJyZXN1bHQiOiBsaXN0LAorICAic3RhdHVzIjogb2JqZWN0Cit9CistLS0tCisKK05PVEU6IFdoaWxlIHRoaXMgcmVzcG9uc2UgbWVzc2FnZSBpcyBleHBlY3RlZCBmb3IgYWxsIHNlcmlhbGl6ZWQgcmVzcG9uc2VzLCB0aGVyZSBtYXkgYmUgc29tZSBlcnJvcnMgdGhhdCBhcmUgbm90CitzZXJpYWxpemVkLiBJbiB0aGF0IGNhc2UsIHRoZSBgQ29udGVudC1UeXBlYCBvZiB0aGUgcmVzcG9uc2Ugc2hvdWxkIGJlIGBhcHBsaWNhdGlvbi9qc29uYCBhbmQgdGhlIEpTT04gc2hvdWxkIGNvbnRhaW4gYQorYG1lc3NhZ2VgIGtleS4KKworPT09PT0gUmVzcG9uc2UgTWVzc2FnZSBGb3JtYXQKKworW3dpZHRoPSIxMDAlIixjb2xzPSIyLDEwYSIsb3B0aW9ucz0iaGVhZGVyIl0KK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3xLZXkgfERlc2NyaXB0aW9uCit8cmVzdWx0IHxBIG1hcCB0aGF0IGNvbnRhaW5zIHRoZSByZXN1bHQgZGF0YS4KK1t3aWR0aD0iMTAwJSIsY29scz0iMywxMCwzLDMiLG9wdGlvbnM9ImhlYWRlciJdCishPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CishTmFtZSAhRGVzY3JpcHRpb24gIVJlcXVpcmVkICFEZWZhdWx0CishZGF0YSAhQSBsaXN0IG9mIHJlc3VsdCBvYmplY3RzLiAhQXJyYXkgIVllcworIT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfHN0YXR1cyB8QSBtYXAgdGhhdCBjb250YWlucyB0aGUgc3RhdHVzIG9mIHRoZSByZXN1bHQuCitbd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsMywzIixvcHRpb25zPSJoZWFkZXIiXQorIT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIU5hbWUgIURlc2NyaXB0aW9uICFSZXF1aXJlZCAhRGVmYXVsdAorIWNvZGUgIVRoZSBhY3R1YWwgPDxodHRwLXN0YXR1cy1jb2RlcyxzdGF0dXMgY29kZT4+IG9mIHRoZSByZXN1bHQuICFOdW1iZXIgIVllcworIWV4Y2VwdGlvbiAhQSBjbGFzcyBvZiBleGNlcHRpb24gaWYgYW4gZXJyb3Igb2NjdXJyZWQuICFTdHJpbmcgIU5vCishbWVzc2FnZSAhVGhlIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICFTdHJpbmcgIU5vCishPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT09IEV4cGVjdGVkIFJlc3BvbnNlIEhUVFAgSGVhZGVycworCitbd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsMywzIixvcHRpb25zPSJoZWFkZXIiXQorfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorfE5hbWUgfERlc2NyaXB0aW9uIHxSZXF1aXJlZCB8RGVmYXVsdAorfENvbnRlbnQtVHlwZSB8VGhlIE1JTUUgdHlwZSBvZiB0aGUgc2VyaWFsaXplZCBib2R5IHdoaWNoIGlzIGJhc2VkIG9uIHRoZSByZXF1ZXN0J3MgYEFjY2VwdGAgaGVhZGVyLiBNYXkgYWxzbyBiZSAiYXBwbGljYXRpb24vanNvbiIuIHxZZXMgfE4vQQorfEdyZW1saW4tUmVxdWVzdElkIHxUaGUgc2VydmVyIGdlbmVyYXRlZCBVVUlEIHRoYXQgaXMgdXNlZCBhcyBhIHJlcXVlc3QgSUQuIHxZZXMgfE4vQQorfFRyYW5zZmVyLUVuY29kaW5nIHxUaGUgc2VydmVyIHNob3VsZCBhdHRlbXB0IHRvIGNodW5rIGFsbCByZXNwb25zZXMuIHxObyB8ImNodW5rZWQiCit8WC1UcmFuc2FjdGlvbi1JZCB8VGhlIHRyYW5zYWN0aW9uIElEIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QuIFByZXNlbnQgb24gYWxsIHJlc3BvbnNlcyB3aXRoaW4gYSB0cmFuc2FjdGlvbiwgaW5jbHVkaW5nIHRoZSBiZWdpbiByZXNwb25zZSB3aGVyZSB0aGUgc2VydmVyIGdlbmVyYXRlcyB0aGUgSUQuIE5vdCBwcmVzZW50IG9uIG5vbi10cmFuc2FjdGlvbmFsIHJlc3BvbnNlcy4gfE5vIHxOL0EKK3w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworPT09PT0gUmVzcG9uc2UgSGVhZGVyIFZhbHVlIE9wdGlvbnMKIAogW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwIixvcHRpb25zPSJoZWFkZXIiXQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotfEtleSB8RGVzY3JpcHRpb24KLXxyZXF1ZXN0SWQgfEEgbGluazpodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dsb2JhbGx5X3VuaXF1ZV9pZGVudGlmaWVyW1VVSURdIHJlcHJlc2VudGluZyB0aGUgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGZvciB0aGUgcmVxdWVzdC4KLXxvcCB8VGhlIG5hbWUgb2YgdGhlICJvcGVyYXRpb24iIHRvIGV4ZWN1dGUgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBgT3BQcm9jZXNzb3JgIGNvbmZpZ3VyZWQgaW4gdGhlIEdyZW1saW4gU2VydmVyLiAgVG8gZXZhbHVhdGUgYSBzY3JpcHQsIHVzZSBgZXZhbGAuCi18cHJvY2Vzc29yIHxUaGUgbmFtZSBvZiB0aGUgYE9wUHJvY2Vzc29yYCB0byB1dGlsaXplLiBUaGUgZGVmYXVsdCBgT3BQcm9jZXNzb3JgIGZvciBldmFsdWF0aW5nIHNjcmlwdHMgaXMgdW5uYW1lZCBhbmQgdGhlcmVmb3JlIHNjcmlwdCBldmFsdWF0aW9uIHB1cnBvc2VzLCB0aGlzIHZhbHVlIGNhbiBiZSBhbiBlbXB0eSBzdHJpbmcuCi18YXJncyB8QSBgTWFwYCBvZiBhcmJpdHJhcnkgcGFyYW1ldGVycyB0byBwYXNzIHRvIEdyZW1saW4gU2VydmVyLiAgVGhlIHJlcXVpcmVtZW50cyBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoaXMgYE1hcGAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYG9wYCBzZWxlY3RlZC4KK3xOYW1lIHxPcHRpb25zCit8bWltZXR5cGUgfEEgTUlNRSB0eXBlIGxpc3RlZCBpbiA8PHNlcmlhbGl6ZXJzPj4uCit8dXVpZCB8QSByYW5kb21seSBnZW5lcmF0ZWQgVVVJRCBzdHJpbmcuCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoaXMgbWVzc2FnZSBjYW4gYmUgc2VyaWFsaXplZCBpbiBhbnkgZmFzaGlvbiB0aGF0IGlzIHN1cHBvcnRlZCBieSBHcmVtbGluIFNlcnZlci4gIE5ldyBzZXJpYWxpemF0aW9uIG1ldGhvZHMgY2FuCi1iZSBwbHVnZ2VkIGluIGJ5IGltcGxlbWVudGluZyBhIGBTZXJ2aWNlTG9hZGVyYCBlbmFibGVkIGBNZXNzYWdlU2VyaWFsaXplcmAsIGhvd2V2ZXIgR3JlbWxpbiBTZXJ2ZXIgcHJvdmlkZXMgZm9yCi1KU09OIHNlcmlhbGl6YXRpb24gYnkgZGVmYXVsdCB3aGljaCB3aWxsIGJlIGdvb2QgZW5vdWdoIGZvciBwdXJwb3NlcyBvZiBtb3N0IGRldmVsb3BlcnMgYnVpbGRpbmcgZHJpdmVycy4KLUEgYFJlcXVlc3RNZXNzYWdlYCB0byBldmFsdWF0ZSBhIHNjcmlwdCB3aXRoIHZhcmlhYmxlIGJpbmRpbmdzIGxvb2tzIGxpa2UgdGhpcyBpbiBKU09OOgorW1todHRwLXN0YXR1cy1jb2Rlc11dCis9PT09PSBSZXNwb25zZSBTdGF0dXMgQ29kZXMKIAotW3NvdXJjZSxqc10KLS0tLS0KLXsgInJlcXVlc3RJZCI6IjFkNmQwMmJkLThlNTYtNDIxZC05NDM4LTNiZDZkMDA3OWZmMSIsCi0gICJvcCI6ImV2YWwiLAotICAicHJvY2Vzc29yIjoiIiwKLSAgImFyZ3MiOnsiZ3JlbWxpbiI6ImcuVih4KS5vdXQoKSIsCi0gICAgICAgICAgImJpbmRpbmdzIjp7IngiOjF9LAotICAgICAgICAgICJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5In19Ci0tLS0tCitUaGUgZm9sbG93aW5nIHRhYmxlIGRldGFpbHMgdGhlIEhUVFAgc3RhdHVzIGNvZGVzIHRoYXQgR3JlbWxpbiBTZXJ2ZXIgd2lsbCBzZW5kOgogCi1UaGUgYWJvdmUgSlNPTiByZXByZXNlbnRzIHRoZSAiYm9keSIgb2YgdGhlIHJlcXVlc3QgdG8gc2VuZCB0byBHcmVtbGluIFNlcnZlci4gV2hlbiBzZW5kaW5nIHRoaXMgImJvZHkiIG92ZXIKLVdlYlNvY2tldCwgR3JlbWxpbiBTZXJ2ZXIgY2FuIGFjY2VwdCBhIHBhY2tldCBmcmFtZSB1c2luZyBhICJ0ZXh0IiAoMSkgb3IgYSAiYmluYXJ5IiAoMikgb3Bjb2RlLiBVc2luZyAidGV4dCIKLWlzIGEgYml0IG1vcmUgbGltaXRlZCBpbiB0aGF0IEdyZW1saW4gU2VydmVyIHdpbGwgYWx3YXlzIHByb2Nlc3MgdGhlIGJvZHkgb2YgdGhhdCByZXF1ZXN0IGFzIEpTT04uICBHZW5lcmFsbHkgc3BlYWtpbmcKLSJ0ZXh0IiBpcyBqdXN0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLgotCi1UaGUgcHJlZmVycmVkIG1ldGhvZCBmb3Igc2VuZGluZyByZXF1ZXN0cyB0byBHcmVtbGluIFNlcnZlciBpcyB0byB1c2UgdGhlICJiaW5hcnkiIG9wY29kZS4gIEluIHRoaXMgY2FzZSwgYSAiaGVhZGVyIgotd2lsbCBuZWVkIGJlIHNlbnQgaW4gYWRkaXRpb24gdG8gdG8gdGhlICJib2R5Ii4gIFRoZSAiaGVhZGVyIiBiYXNpY2FsbHkgY29uc2lzdHMgb2YgYSAibWltZSB0eXBlIiBzbyB0aGF0IEdyZW1saW4KLVNlcnZlciBrbm93cyBob3cgdG8gZGVzZXJpYWxpemUgdGhlIGBSZXF1ZXN0TWVzc2FnZWAuIFNvLCB0aGUgYWN0dWFsIGJ5dGUgYXJyYXkgc2VudCB0byBHcmVtbGluIFNlcnZlciB3b3VsZCBiZQotZm9ybWF0dGVkIGFzIGZvbGxvd3M6Ci0KLWltYWdlOjpncmVtbGluLXNlcnZlci1yZXF1ZXN0LnBuZ1tdCi0KLVRoZSBmaXJzdCBieXRlIHJlcHJlc2VudHMgdGhlIGxlbmd0aCBvZiB0aGUgIm1pbWUgdHlwZSIgc3RyaW5nIHZhbHVlIHRoYXQgZm9sbG93cy4gIEdpdmVuIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YKLUdyZW1saW4gU2VydmVyLCB0aGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gYGFwcGxpY2F0aW9uL2pzb25gLiAgVGhlICJwYXlsb2FkIiByZXByZXNlbnRzIHRoZSBKU09OIG1lc3NhZ2UgYWJvdmUKLWVuY29kZWQgYXMgYnl0ZXMuCi0KLU5PVEU6IEdyZW1saW4gU2VydmVyIHdpbGwgb25seSBhY2NlcHQgbWFza2VkIHBhY2tldHMgYXMgaXQgcGVydGFpbnMgdG8gYSBXZWJTb2NrZXQgcGFja2V0IGhlYWRlciBjb25zdHJ1Y3Rpb24uCi0KLVdoZW4gR3JlbWxpbiBTZXJ2ZXIgcmVjZWl2ZXMgdGhhdCByZXF1ZXN0LCBpdCB3aWxsIGRlY29kZSBpdCBnaXZlbiB0aGUgIm1pbWUgdHlwZSIsIHBhc3MgaXQgdG8gdGhlIHJlcXVlc3RlZAotYE9wUHJvY2Vzc29yYCB3aGljaCB3aWxsIGV4ZWN1dGUgdGhlIGBvcGAgZGVmaW5lZCBpbiB0aGUgbWVzc2FnZS4gIEluIHRoaXMgY2FzZSwgaXQgd2lsbCBldmFsdWF0ZSB0aGUgc2NyaXB0Ci1gZy5WKHgpLm91dCgpYCB1c2luZyB0aGUgYGJpbmRpbmdzYCBzdXBwbGllZCBpbiB0aGUgYGFyZ3NgIGFuZCBzdHJlYW0gYmFjayB0aGUgcmVzdWx0cyBpbiBhIHNlcmllcyBvZgotYFJlc3BvbnNlTWVzc2FnZXNgLiAgQSBgUmVzcG9uc2VNZXNzYWdlYCBsb29rcyBsaWtlIHRoaXM6Ci0KLVt3aWR0aD0iMTAwJSIsY29scz0iMywxMCIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfERlc2NyaXB0aW9uCi18cmVxdWVzdElkIHxUaGUgaWRlbnRpZmllciBvZiB0aGUgYFJlcXVlc3RNZXNzYWdlYCB0aGF0IGdlbmVyYXRlZCB0aGlzIGBSZXNwb25zZU1lc3NhZ2VgLgotfHN0YXR1cyB8IFRoZSBgc3RhdHVzYCBjb250YWlucyBhIGBNYXBgIG9mIHRocmVlIGtleXM6IGBjb2RlYCB3aGljaCByZWZlcnMgdG8gYSBgUmVzdWx0Q29kZWAgdGhhdCBpcyBzb21ld2hhdCBhbmFsb2dvdXMgdG8gYW4gbGluazpodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWxbSFRUUCBzdGF0dXMgY29kZV0sIGBhdHRyaWJ1dGVzYCB0aGF0IHJlcHJlc2VudCBhIGBNYXBgIG9mIHByb3RvY29sLWxldmVsIGluZm9ybWF0aW9uLCBhbmQgYG1lc3NhZ2VgIHdoaWNoIGlzIGp1c3QgYSBodW1hbi1yZWFkYWJsZSBgU3RyaW5nYCB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBlcnJvcnMuCi18cmVzdWx0IHwgVGhlIGByZXN1bHRgIGNvbnRhaW5zIGEgYE1hcGAgb2YgdHdvIGtleXM6IGBkYXRhYCB3aGljaCByZWZlcnMgdG8gdGhlIGFjdHVhbCBkYXRhIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciAodGhlIHR5cGUgb2YgZGF0YSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvcGVyYXRpb24gcmVxdWVzdGVkKSBhbmQgYG1ldGFgIHdoaWNoIGlzIGEgYE1hcGAgb2YgbWV0YS1kYXRhIHJlbGF0ZWQgdG8gdGhlIHJlc3BvbnNlLgotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1JbiB0aGlzIGNhc2UgdGhlIGBSZXNwb25zZU1lc3NhZ2VgIHJldHVybmVkIHRvIHRoZSBjbGllbnQgd291bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgotCi1bc291cmNlLGpzXQotLS0tLQoteyJyZXN1bHQiOnsiZGF0YSI6W3siaWQiOiAyLCJsYWJlbCI6ICJwZXJzb24iLCJ0eXBlIjogInZlcnRleCIsInByb3BlcnRpZXMiOiBbCi0gIHsiaWQiOiAyLCAidmFsdWUiOiAidmFkYXMiLCAibGFiZWwiOiAibmFtZSJ9LAotICB7ImlkIjogMywgInZhbHVlIjogMjcsICJsYWJlbCI6ICJhZ2UifV19LAotICBdLCAibWV0YSI6e319LAotICJyZXF1ZXN0SWQiOiIxZDZkMDJiZC04ZTU2LTQyMWQtOTQzOC0zYmQ2ZDAwNzlmZjEiLAotICJzdGF0dXMiOnsiY29kZSI6MjA2LCJhdHRyaWJ1dGVzIjp7fSwibWVzc2FnZSI6IiJ9fQotLS0tLQotCi1HcmVtbGluIFNlcnZlciBpcyBjYXBhYmxlIG9mIHN0cmVhbWluZyByZXN1bHRzIHN1Y2ggdGhhdCBhZGRpdGlvbmFsIHJlc3BvbnNlcyB3aWxsIGFycml2ZSBvdmVyIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB1bnRpbAotdGhlIGl0ZXJhdGlvbiBvZiB0aGUgcmVzdWx0IG9uIHRoZSBzZXJ2ZXIgaXMgY29tcGxldGUuICBFYWNoIHN1Y2Nlc3NmdWwgaW5jcmVtZW50YWwgbWVzc2FnZSB3aWxsIGhhdmUgYSBgUmVzdWx0Q29kZWAKLW9mIGAyMDZgLiBUZXJtaW5hdGlvbiBvZiB0aGUgc3RyZWFtIHdpbGwgYmUgbWFya2VkIGJ5IGEgZmluYWwgYDIwMGAgc3RhdHVzIGNvZGUuICBOb3RlIHRoYXQgYWxsIG1lc3NhZ2VzIHdpdGhvdXQgYQotYDIwNmAgcmVwcmVzZW50IHRlcm1pbmF0aW5nIGNvbmRpdGlvbnMgZm9yIGEgcmVxdWVzdC4gIFRoZSBmb2xsb3dpbmcgdGFibGUgZGV0YWlscyB0aGUgdmFyaW91cyBzdGF0dXMgY29kZXMgdGhhdAotR3JlbWxpbiBTZXJ2ZXIgd2lsbCBzZW5kOgotCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjIsMiw5IixvcHRpb25zPSJoZWFkZXIiXQorW3dpZHRoPSIxMDAlIixjb2xzPSIxLDMsOSIsb3B0aW9ucz0iaGVhZGVyIl0KIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHxDb2RlIHxOYW1lIHxEZXNjcmlwdGlvbgogfDIwMCB8U1VDQ0VTUyB8VGhlIHNlcnZlciBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGEgcmVxdWVzdCB0byBjb21wbGV0aW9uIC0gdGhlcmUgYXJlIG5vIG1lc3NhZ2VzIHJlbWFpbmluZyBpbiB0aGlzIHN0cmVhbS4KIHwyMDQgfE5PIENPTlRFTlQgfFRoZSBzZXJ2ZXIgcHJvY2Vzc2VkIHRoZSByZXF1ZXN0IGJ1dCB0aGVyZSBpcyBubyByZXN1bHQgdG8gcmV0dXJuIChlLmcuIGFuIGBJdGVyYXRvcmAgd2l0aCBubyBlbGVtZW50cykgLSB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgcmVtYWluaW5nIGluIHRoaXMgc3RyZWFtLgogfDIwNiB8UEFSVElBTCBDT05URU5UIHxUaGUgc2VydmVyIHN1Y2Nlc3NmdWxseSByZXR1cm5lZCBzb21lIGNvbnRlbnQsIGJ1dCB0aGVyZSBpcyBtb3JlIGluIHRoZSBzdHJlYW0gdG8gYXJyaXZlIC0gd2FpdCBmb3IgYSBgU1VDQ0VTU2AgdG8gc2lnbmlmeSB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uCit8NDAwIHxCQUQgUkVRVUVTVCB8VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBIVFRQIHJlcXVlc3QuIEZvciB0cmFuc2FjdGlvbi1zcGVjaWZpYyBjYXNlczogYmVnaW4gb24gYSBncmFwaCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zLCBjb21taXQgb3Igcm9sbGJhY2sgc2VudCB3aXRob3V0IGEgdHJhbnNhY3Rpb24gSUQsIGJlZ2luIHNlbnQgd2l0aCBhIHVzZXItc3VwcGxpZWQgdHJhbnNhY3Rpb24gSUQsIG9yIGdyYXBoIGFsaWFzIG1pc21hdGNoIHdpdGhpbiBhIHRyYW5zYWN0aW9uLgogfDQwMSB8VU5BVVRIT1JJWkVEIHxUaGUgcmVxdWVzdCBhdHRlbXB0ZWQgdG8gYWNjZXNzIHJlc291cmNlcyB0aGF0IHRoZSByZXF1ZXN0aW5nIHVzZXIgZGlkIG5vdCBoYXZlIGFjY2VzcyB0by4KIHw0MDMgfEZPUkJJRERFTiB8VGhlIHNlcnZlciBjb3VsZCBhdXRoZW50aWNhdGUgdGhlIHJlcXVlc3QsIGJ1dCB3aWxsIG5vdCBmdWxmaWxsIGl0LgotfDQwNyB8QVVUSEVOVElDQVRFIHxBIGNoYWxsZW5nZSBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoZSBjbGllbnQgdG8gYXV0aGVudGljYXRlIGl0cyByZXF1ZXN0LgotfDQ5NyB8UkVRVUVTVCBFUlJPUiBTRVJJQUxJWkFUSU9OIHxUaGUgcmVxdWVzdCBtZXNzYWdlIGNvbnRhaW5lZCBhbiBvYmplY3QgdGhhdCB3YXMgbm90IHNlcmlhbGl6YWJsZS4KLXw0OTggfFJFUVVFU1QgRVJST1IgTUFMRk9STUVEIFJFUVVFU1QgfFRoZSByZXF1ZXN0IG1lc3NhZ2Ugd2FzIG5vdCBwcm9wZXJseSBmb3JtYXR0ZWQgd2hpY2ggbWVhbnMgaXQgY291bGQgbm90IGJlIHBhcnNlZCBhdCBhbGwgb3IgdGhlICJvcCIgY29kZSB3YXMgbm90IHJlY29nbml6ZWQgc3VjaCB0aGF0IEdyZW1saW4gU2VydmVyIGNvdWxkIHByb3Blcmx5IHJvdXRlIGl0IGZvciBwcm9jZXNzaW5nLiAgQ2hlY2sgdGhlIG1lc3NhZ2UgZm9ybWF0IGFuZCByZXRyeSB0aGUgcmVxdWVzdC4KLXw0OTkgfFJFUVVFU1QgRVJST1IgSU5WQUxJRCBSRVFVRVNUIEFSR1VNRU5UUyB8VGhlIHJlcXVlc3QgbWVzc2FnZSB3YXMgcGFyc2VhYmxlLCBidXQgdGhlIGFyZ3VtZW50cyBzdXBwbGllZCBpbiB0aGUgbWVzc2FnZSB3ZXJlIGluIGNvbmZsaWN0IG9yIGluY29tcGxldGUuIENoZWNrIHRoZSBtZXNzYWdlIGZvcm1hdCBhbmQgcmV0cnkgdGhlIHJlcXVlc3QuCi18NTAwIHxTRVJWRVIgRVJST1IgfEEgZ2VuZXJhbCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgdGhhdCBwcmV2ZW50ZWQgdGhlIHJlcXVlc3QgZnJvbSBiZWluZyBwcm9jZXNzZWQuCi18NTk1IHxTRVJWRVIgRVJST1IgRkFJTCBTVEVQIHwgQSBzZXJ2ZXIgZXJyb3IgdGhhdCBpcyBwcm9kdWNlZCB3aGVuIHRoZSBgZmFpbCgpYCBzdGVwIGlzIHRyaWdnZXJlZC4gVGhlIHJldHVybmVkIGV4Y2VwdGlvbiB3aWxsIGluY2x1ZGUgaW5mb3JtYXRpb24gY29uc2lzdGVudCB3aXRoIHRoZSBgRmFpbHVyZWAgaW50ZXJmYWNlLgotfDU5NiB8U0VSVkVSIEVSUk9SIFRFTVBPUkFSWSB8QSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQsIGJ1dCBpdCB3YXMgdGVtcG9yYXJ5IGluIG5hdHVyZSBhbmQgdGhlcmVmb3JlIHRoZSBjbGllbnQgaXMgZnJlZSB0byByZXRyeSBpdCdzIHJlcXVlc3QgYXMtaXMgd2l0aCB0aGUgcG90ZW50aWFsIGZvciBzdWNjZXNzLgotfDU5NyB8U0VSVkVSIEVSUk9SIEVWQUxVQVRJT04gfFRoZSBzY3JpcHQgc3VibWl0dGVkIGZvciBwcm9jZXNzaW5nIGV2YWx1YXRlZCBpbiB0aGUgYFNjcmlwdEVuZ2luZWAgd2l0aCBlcnJvcnMgYW5kIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuICBDaGVjayB0aGUgc2NyaXB0IHN1Ym1pdHRlZCBmb3Igc3ludGF4IGVycm9ycyBvciBvdGhlciBwcm9ibGVtcyBhbmQgdGhlbiByZXN1Ym1pdC4KLXw1OTggfFNFUlZFUiBFUlJPUiBUSU1FT1VUIHxUaGUgc2VydmVyIGV4Y2VlZGVkIG9uZSBvZiB0aGUgdGltZW91dCBzZXR0aW5ncyBmb3IgdGhlIHJlcXVlc3QgYW5kIGNvdWxkIHRoZXJlZm9yZSBvbmx5IHBhcnRpYWxseSByZXNwb25kZWQgb3IgZGlkIG5vdCByZXNwb25kIGF0IGFsbC4KLXw1OTkgfFNFUlZFUiBFUlJPUiBTRVJJQUxJWkFUSU9OIHxUaGUgc2VydmVyIHdhcyBub3QgY2FwYWJsZSBvZiBzZXJpYWxpemluZyBhbiBvYmplY3QgdGhhdCB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgc2NyaXB0IHN1cHBsaWVkIG9uIHRoZSByZXF1ZXN0LiBFaXRoZXIgdHJhbnNmb3JtIHRoZSBvYmplY3QgaW50byBzb21ldGhpbmcgR3JlbWxpbiBTZXJ2ZXIgY2FuIHByb2Nlc3Mgd2l0aGluIHRoZSBzY3JpcHQgb3IgaW5zdGFsbCBtYXBwZXIgc2VyaWFsaXphdGlvbiBjbGFzc2VzIHRvIEdyZW1saW4gU2VydmVyLgorfDQwNCB8Tk9UIEZPVU5EIHxUaGUgc2VydmVyIHdhcyB1bmFibGUgdG8gZmluZCB0aGUgcmVxdWVzdGVkIHJlc291cmNlLiBBbHNvIHJldHVybmVkIHdoZW4gYSBgdHJhbnNhY3Rpb25JZGAgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgYWN0aXZlIHRyYW5zYWN0aW9uIG9uIHRoaXMgc2VydmVyLiBUaGlzIGNvdmVycyB0cmFuc2FjdGlvbnMgdGhhdCB3ZXJlIGFscmVhZHkgY29tbWl0dGVkLCBhbHJlYWR5IHJvbGxlZCBiYWNrLCByZWNsYWltZWQgYnkgdGltZW91dCwgb3IgbmV2ZXIgZXhpc3RlZC4KK3w0MDUgfE1FVEhPRCBOT1QgQUxMT1dFRCB8VGhlIHJlcXVlc3QgdXNlZCBhbiB1bnN1cHBvcnRlZCBtZXRob2QuIFRoZSBzZXJ2ZXIgb25seSBzdXBwb3J0cyBQT1NULgorfDQxMyB8UkVRVUVTVCBFTlRJVFkgVE9PIExBUkdFIHxUaGUgcmVxdWVzdCB3YXMgdG9vIGxhcmdlIG9yIHRoZSBxdWVyeSBjb3VsZCBub3QgYmUgY29tcGlsZWQgZHVlIHRvIHNpemUgbGltaXRhdGlvbnMuCit8NTAwIHxJTlRFUk5BTCBTRVJWRVIgRVJST1IgfEEgZ2VuZXJhbCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgdGhhdCBwcmV2ZW50ZWQgdGhlIHJlcXVlc3QgZnJvbSBiZWluZyBwcm9jZXNzZWQuCit8NTAzIHxTRVJWSUNFIFVOQVZBSUxBQkxFIHxUaGUgc2VydmVyIGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRyYW5zYWN0aW9ucyBhbmQgY2Fubm90IGFjY2VwdCBhIG5ldyBiZWdpbiByZXF1ZXN0LgorfDUwNSB8SFRUUCBWRVJTSU9OIE5PVCBTVVBQT1JURUQgfEEgc2VydmVyIGVycm9yIGluZGljYXRpbmcgdGhhdCBhbiB1bnN1cHBvcnRlZCB2ZXJzaW9uIG9mIEhUVFAgaXMgYmVpbmcgdXNlZC4gT25seSBIVFRQLzEuMSBpcyBzdXBwb3J0ZWQuCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLU5PVEU6IFBsZWFzZSByZWZlciB0byB0aGUgbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L2lvW0lPIFJlZmVyZW5jZSBEb2N1bWVudGF0aW9uXSBmb3IgbW9yZQotZXhhbXBsZXMgb2YgYFJlcXVlc3RNZXNzYWdlYCBhbmQgYFJlc3BvbnNlTWVzc2FnZWAgaW5zdGFuY2VzLgorPT09PT0gVHJhaWxpbmcgSGVhZGVycwogCi1OT1RFOiBUaW5rZXJwb3AgcHJvdmlkZXMgYSB0ZXN0IHNlcnZlciB3aGljaCBtYXkgYmUgdXNlZnVsIGZvciB0ZXN0aW5nIGRyaXZlcnMuIERldGFpbHMgY2FuIGJlIGZvdW5kCi1saW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L2Rldi9kZXZlbG9wZXIvI2dyZW1saW4tc29ja2V0LXNlcnZlci10ZXN0c1toZXJlXQorRXJyb3IgcmVzcG9uc2VzIHdpbGwgaGF2ZSB0cmFpbGluZyBoZWFkZXJzIGluIGFkZGl0aW9uIHRvIHRoZSBzdGF0dXMgb2JqZWN0IGluIHRoZSByZXNwb25zZSBib2R5LiBUaGlzIGluZm9ybWF0aW9uIGlzCitkdXBsaWNhdGVkIGFuZCBzaG91bGQgYmUgdGhlIHNhbWUsIHNvIGdyYXBoIGRyaXZlciBwcm92aWRlcnMgc2hvdWxkIHVzZSB3aGljaGV2ZXIgaXMgZWFzaWVyIGZvciB0aGVtLiBUaGUgdHJhaWxlcnMsCitob3dldmVyLCB3aWxsIG9ubHkgY29udGFpbiB0aGUgYFN0YXR1c2AgYW5kIGBFeGNlcHRpb25gIHdpdGhvdXQgdGhlIGBNZXNzYWdlYC4KIAotPT09IE9wUHJvY2Vzc29ycyBBcmd1bWVudHMKKz09PT0gSFRUUCBFeGFtcGxlcwogCi1UaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlZmluZSBhIG5vbi1leGhhdXN0aXZlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wZXJhdGlvbnMgYW5kIGFyZ3VtZW50cyBmb3IgZW1iZWRkZWQgYE9wUHJvY2Vzc29yc2AKLShpLmUuIG9uZXMgcGFja2FnZWQgd2l0aCBHcmVtbGluIFNlcnZlcikuCitGb3IgZXhhbXBsZXMgb2YgYWN0dWFsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMsIHRha2UgYSBsb29rIGF0IHRoZSBJTyBkb2N1bWVudGF0aW9uIGZvcgorbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L2lvLyNfcmVxdWVzdG1lc3NhZ2VbR3JhcGhTT04gcmVxdWVzdHNdIGFuZAorbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L2lvLyNfcmVzcG9uc2VtZXNzYWdlW0dyYXBoU09OIHJlc3BvbnNlc10uCiAKLT09PT0gQ29tbW9uCis9PT0gVHJhbnNhY3Rpb25zCiAKLUFsbCBgT3BQcm9jZXNzb3JgIGluc3RhbmNlcyBzdXBwb3J0IHRoZXNlIGFyZ3VtZW50cy4KK1RoZSBIVFRQIEFQSSBzdXBwb3J0cyBtdWx0aS1yZXF1ZXN0IHRyYW5zYWN0aW9ucyB0aGF0IGFsbG93IGEgY2xpZW50IHRvIGdyb3VwIG11bHRpcGxlIEdyZW1saW4gcmVxdWVzdHMgaW50byBhIHNpbmdsZQorYXRvbWljIHVuaXQgb2Ygd29yay4gVHJhbnNhY3Rpb24gbGlmZWN5Y2xlIGlzIGNvbnRyb2xsZWQgdXNpbmcgc3RhbmRhcmQgR3JlbWxpbiBzeW50YXggKGBnLnR4KCkuYmVnaW4oKWAsCitgZy50eCgpLmNvbW1pdCgpYCwgYGcudHgoKS5yb2xsYmFjaygpYCkgYW5kIGFsbCByZXF1ZXN0cyBmbG93IHRocm91Z2ggdGhlIHNhbWUgYFBPU1QgL2dyZW1saW5gIGVuZHBvaW50LgogCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjIsMiw5IixvcHRpb25zPSJoZWFkZXIiXQotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotfEtleSB8VHlwZSB8RGVzY3JpcHRpb24KLXxiYXRjaFNpemUgfEludCB8V2hlbiB0aGUgcmVzdWx0IGlzIGFuIGl0ZXJhdG9yIHRoaXMgdmFsdWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZWFjaCBgUmVzcG9uc2VNZXNzYWdlYCBzaG91bGQgY29udGFpbiAtIG92ZXJyaWRlcyB0aGUgYHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZWAgc2VydmVyIHNldHRpbmcuCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09IFByb3RvY29sIEZsb3cKIAotPT09PSBTdGFuZGFyZCBPcFByb2Nlc3NvcgorQSB0cmFuc2FjdGlvbiBmb2xsb3dzIHRoaXMgc2VxdWVuY2U6CiAKLVRoZSAic3RhbmRhcmQiIGBPcFByb2Nlc3NvcmAgaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgR3JlbWxpbiBTZXJ2ZXIgLSBleGVjdXRpbmcgR3JlbWxpbi4KLVJlcXVlc3RzIG1hZGUgdG8gdGhpcyBgT3BQcm9jZXNzb3JgIGFyZSAic2Vzc2lvbmxlc3MiIGluIHRoZSBzZW5zZSB0aGF0IGEgcmVxdWVzdCBtdXN0IGVuY2Fwc3VsYXRlIHRoZSBlbnRpcmV0eQotb2YgYSB0cmFuc2FjdGlvbi4gIFRoZXJlIGlzIG5vIHN0YXRlIG1haW50YWluZWQgYmV0d2VlbiByZXF1ZXN0cy4gIEEgdHJhbnNhY3Rpb24gaXMgc3RhcnRlZCB3aGVuIHRoZSBzY3JpcHQgaXMgZmlyc3QKLWV2YWx1YXRlZCBhbmQgaXMgY29tbWl0dGVkIHdoZW4gdGhlIHNjcmlwdCBjb21wbGV0ZXMgKG9yIHJvbGxlZCBiYWNrIGlmIGFuIGVycm9yIG9jY3VycmVkKS4KKy4gVGhlIGNsaWVudCBzZW5kcyBgZy50eCgpLmJlZ2luKClgIHdpdGggbm8gYHRyYW5zYWN0aW9uSWRgLiBUaGUgcmVxdWVzdCBib2R5IG11c3QgaW5jbHVkZSB0aGUgYGdgIGZpZWxkIHRvIGlkZW50aWZ5CisgIHRoZSB0YXJnZXQgdHJhdmVyc2FsIHNvdXJjZS4KKy4gVGhlIHNlcnZlciBvcGVucyBhIHRyYW5zYWN0aW9uIGFnYWluc3QgdGhlIHNwZWNpZmllZCBncmFwaCwgZ2VuZXJhdGVzIGEgU3RyaW5nIGFzIHRoZSB0cmFuc2FjdGlvbiBJRCwgYW5kIHJldHVybnMgaXQKKyAgaW4gYm90aCB0aGUgcmVzcG9uc2UgYm9keSAoYXMgYSBgdHJhbnNhY3Rpb25JZGAgZmllbGQgaW4gYSBtYXApIGFuZCB0aGUgYFgtVHJhbnNhY3Rpb24tSWRgIHJlc3BvbnNlIGhlYWRlci4KKy4gRm9yIGFsbCBzdWJzZXF1ZW50IHJlcXVlc3RzIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24sIHRoZSBjbGllbnQgbXVzdCBpbmNsdWRlIHRoZSB0cmFuc2FjdGlvbiBJRCBpbiBib3RoIHRoZQorICBgWC1UcmFuc2FjdGlvbi1JZGAgcmVxdWVzdCBoZWFkZXIgYW5kIHRoZSBgdHJhbnNhY3Rpb25JZGAgZmllbGQgb2YgdGhlIHJlcXVlc3QgYm9keS4KKy4gVGhlIGNsaWVudCBjbG9zZXMgdGhlIHRyYW5zYWN0aW9uIGJ5IHNlbmRpbmcgYGcudHgoKS5jb21taXQoKWAgb3IgYGcudHgoKS5yb2xsYmFjaygpYCB3aXRoIHRoZSB0cmFuc2FjdGlvbiBJRAorICBhdHRhY2hlZC4KIAotW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwYSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfERlc2NyaXB0aW9uCi18cHJvY2Vzc29yIHxBcyB0aGlzIGlzIHRoZSBkZWZhdWx0IGBPcFByb2Nlc3NvcmAgdGhpcyB2YWx1ZSBjYW4gYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZy4KLXxvcCB8W3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwIixvcHRpb25zPSJoZWFkZXIiXQotIT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIUtleSAhRGVzY3JpcHRpb24KLSFgYXV0aGVudGljYXRpb25gICFBIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgcmVzcG9uc2UgdG8gYSBzZXJ2ZXIgY2hhbGxlbmdlIGZvciBhdXRoZW50aWNhdGlvbi4KLSFgZXZhbGAgIUV2YWx1YXRlIGEgR3JlbWxpbiBzY3JpcHQgcHJvdmlkZWQgYXMgYSBgU3RyaW5nYC4KLSE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0FuIGV4YW1wbGUgYmVnaW4gcmVxdWVzdCBhbmQgcmVzcG9uc2U6CiAKLSoqYGF1dGhlbnRpY2F0aW9uYCBvcGVyYXRpb24gYXJndW1lbnRzKioKLQotW3dpZHRoPSIxMDAlIixjb2xzPSIyLDIsOSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfFR5cGUgfERlc2NyaXB0aW9uCi18c2FzbCB8U3RyaW5nIHwgKlJlcXVpcmVkKiBUaGUgcmVzcG9uc2UgdG8gdGhlIHNlcnZlciBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuICBUaGlzIHZhbHVlIGlzIGRlcGVuZGVudCBvbiB0aGUgU0FTTCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gcmVxdWlyZWQgYnkgdGhlIHNlcnZlciBhbmQgaXMgQmFzZTY0IGVuY29kZWQuCi18c2FzbE1lY2hhbmlzbSB8U3RyaW5nIHwgVGhlIFNBU0wgbWVjaGFuaXNtOiBgUExBSU5gIG9yIGBHU1NBUElgLiBOb3RlIHRoYXQgaXQgaXMgdXAgdG8gdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0byB1c2Ugb3IgZGlzcmVnYXJkIHRoaXMgc2V0dGluZyAoZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbiBHcmVtbGluIFNlcnZlciBpZ25vcmVzIGl0KS4KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKipgZXZhbGAgb3BlcmF0aW9uIGFyZ3VtZW50cyoqCi0KLVt3aWR0aD0iMTAwJSIsY29scz0iMiwyLDkiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18S2V5IHxUeXBlIHxEZXNjcmlwdGlvbgotfGdyZW1saW4gfFN0cmluZyB8ICpSZXF1aXJlZCogVGhlIEdyZW1saW4gc2NyaXB0IHRvIGV2YWx1YXRlLgotfGJpbmRpbmdzIHxNYXAgfEEgbWFwIG9mIGtleS92YWx1ZSBwYWlycyB0byBhcHBseSBhcyB2YXJpYWJsZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIEdyZW1saW4gc2NyaXB0LgotfGxhbmd1YWdlIHxTdHJpbmcgfFRoZSBmbGF2b3Igb2YgR3JlbWxpbiB1c2VkIChlLmcuIGBncmVtbGluLWdyb292eWApLgotfGFsaWFzZXMgfE1hcCB8QSBtYXAgb2Yga2V5L3ZhbHVlIHBhaXJzIHRoYXQgYWxsb3cgZ2xvYmFsbHkgYm91bmQgYEdyYXBoYCBhbmQgYFRyYXZlcnNhbFNvdXJjZWAgb2JqZWN0cyB0bwotYmUgYWxpYXNlZCB0byBkaWZmZXJlbnQgdmFyaWFibGUgbmFtZXMgZm9yIHB1cnBvc2VzIG9mIHRoZSBjdXJyZW50IHJlcXVlc3QuICBUaGUgdmFsdWUgcmVwcmVzZW50cyB0aGUgbmFtZSBvZiB0aGUKLWdsb2JhbCB2YXJpYWJsZSBhbmQgaXRzIGtleSByZXByZXNlbnRzIHRoZSBuZXcgYmluZGluZyBuYW1lIGFzIGl0IHdpbGwgYmUgcmVmZXJlbmNlZCBpbiB0aGUgR3JlbWxpbiBxdWVyeS4gIEZvcgotZXhhbXBsZSwgaWYgdGhlIEdyZW1saW4gU2VydmVyIGRlZmluZXMgdHdvIGBUcmF2ZXJzYWxTb3VyY2VgIGluc3RhbmNlcyBuYW1lZCBgZzFgIGFuZCBgZzJgLCBpdCB3b3VsZCBiZSBwb3NzaWJsZQotdG8gc2VuZCBhbiBhbGlhcyBwYWlyIHdpdGgga2V5IG9mICJnIiBhbmQgdmFsdWUgb2YgImcyIiBhbmQgdGh1cyBhbGxvdyB0aGUgc2NyaXB0IHRvIHJlZmVyIHRvICJnMiIgc2ltcGx5IGFzICJnIi4KLXxldmFsdWF0aW9uVGltZW91dCB8TG9uZyB8QW4gb3ZlcnJpZGUgZm9yIHRoZSBzZXJ2ZXIgc2V0dGluZyB0aGF0IGRldGVybWluZXMgdGhlIG1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIHNjcmlwdCB0byBleGVjdXRlIG9uIHRoZSBzZXJ2ZXIuCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLT09PT0gU2Vzc2lvbiBPcFByb2Nlc3NvcgotCi1UaGUgInNlc3Npb24iIGBPcFByb2Nlc3NvcmAgaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgR3JlbWxpbiBTZXJ2ZXIgLSBleGVjdXRpbmcgR3JlbWxpbi4gSXQgaXMKLWxpa2UgdGhlICJzdGFuZGFyZCIgYE9wUHJvY2Vzc29yYCwgYnV0IGluc3RlYWQgbWFpbnRhaW5zIHN0YXRlIGJldHdlZW4gc2Vzc2lvbnMgYW5kIGFsbG93cyB0aGUgb3B0aW9uIHRvIGxlYXZlIGFsbAotdHJhbnNhY3Rpb24gbWFuYWdlbWVudCB1cCB0byB0aGUgY2FsbGluZyBjbGllbnQuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCBjbGllbnRzIHRoYXQgb3BlbiBzZXNzaW9ucywgY29tbWl0IG9yIHJvbGwKLXRoZW0gYmFjaywgaG93ZXZlciBHcmVtbGluIFNlcnZlciB3aWxsIHRyeSB0byBjbGVhbiB1cCBzdWNoIHRoaW5ncyB3aGVuIGEgc2Vzc2lvbiBpcyBraWxsZWQgdGhhdCBoYXMgYmVlbiBhYmFuZG9uZWQuCi1JdCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIgdGhhdCBhIHNlc3Npb24gY2FuIG9ubHkgYmUgbWFpbnRhaW5lZCB3aXRoIGEgc2luZ2xlIG1hY2hpbmUuICBJbiB0aGUgZXZlbnQgdGhhdCBtdWx0aXBsZQotR3JlbWxpbiBTZXJ2ZXIgYXJlIGRlcGxveWVkLCBzZXNzaW9uIHN0YXRlIGlzIG5vdCBzaGFyZWQgYW1vbmcgdGhlbS4KLQotW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwYSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfERlc2NyaXB0aW9uCi18cHJvY2Vzc29yIHxUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gYHNlc3Npb25gCi18b3AgfAotW2NvbHM9IjMsMTAiLG9wdGlvbnM9ImhlYWRlciJdCi0hPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0hS2V5ICFEZXNjcmlwdGlvbgotIWBhdXRoZW50aWNhdGlvbmAgIUEgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSByZXNwb25zZSB0byBhIHNlcnZlciBjaGFsbGVuZ2UgZm9yIGF1dGhlbnRpY2F0aW9uLgotIWBldmFsYCAhRXZhbHVhdGUgYSBHcmVtbGluIHNjcmlwdCBwcm92aWRlZCBhcyBhIGBTdHJpbmdgLgotIWBjbG9zZWAgIURlcHJlY2F0ZWQuIEdyZW1saW4tU2VydmVyIHdpbGwgb25seSByZXR1cm4gYSBgTk8gQ09OVEVOVGAgbWVzc2FnZS4KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotTk9URTogVGhlICJjbG9zZSIgbWVzc2FnZSByZWxhdGVkIHRvIHNlc3Npb25zIHdhcyBkZXByZWNhdGVkIGFzIG9mIDMuMy4xMS4gQ2xvc2luZyBzZXNzaW9ucyBub3cgcmVsaWVzIG9uIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb25zLiBUaGUgZnVuY3Rpb24gdG8gYWNjZXB0IGBjbG9zZWAgbWVzc2FnZSBvbiB0aGUgc2VydmVyIHdhcyByZW1vdmVkCi1pbiAzLjUuMCwgYnV0IGhhcyBiZWVuIGFkZGVkIGJhY2sgYXMgb2YgMy41LjIuIFNlcnZlcnMgd2lzaGluZyB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciBuZWVkIG9ubHkgc2VuZCBiYWNrIGEgYE5PX0NPTlRFTlRgIGZvcgotdGhpcyBtZXNzYWdlICh3aGljaCBpcyB3aGF0IEdyZW1saW4gU2VydmVyIGRvZXMgYXMgb2YgMy41LjApLiBEcml2ZXJzIHdpc2hpbmcgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHNlcnZlcnMgcHJpb3IgdG8KLTMuMy4xMSBtYXkgY29udGludWUgdG8gc2VuZCB0aGUgbWVzc2FnZSBvbiBjYWxscyB0byBgY2xvc2UoKWAsIG90aGVyd2lzZSBzdWNoIGNvZGUgY2FuIGJlIHJlbW92ZWQuCi0KLU5PVEU6IEFzIG9mIDMuNy42LzMuOC4xLCB0aGUgc2Vzc2lvbiBsaWZlY3ljbGUgY29udHJhY3QgZGVzY3JpYmVkIGFib3ZlIHdoZXJlIHNlc3Npb25zIGFyZSBjbGVhbmVkIHVwIG9ubHkgd2hlbiB0aGUKLXVuZGVybHlpbmcgY29ubmVjdGlvbiBjbG9zZXMgY2FuIGJlIG1vZGlmaWVkIGJ5IHRoZSBgY2xvc2VTZXNzaW9uUG9zdEdyYXBoT3BgIHNlcnZlciBzZXR0aW5nLiBXaGVuIGVuYWJsZWQsIHRoZQotc2VydmVyIHdpbGwgY2xvc2UgYSBzZXNzaW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCBUWF9DT01NSVQgb3IgVFhfUk9MTEJBQ0sgYnl0ZWNvZGUgcmVxdWVzdCwgaW5kZXBlbmRlbnQgb2YgdGhlCi1jb25uZWN0aW9uIHN0YXRlLiBUaGlzIGFsbG93cyBtdWx0aXBsZSBzaG9ydC1saXZlZCB0cmFuc2FjdGlvbiBzZXNzaW9ucyB0byBzaGFyZSBhIHNpbmdsZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBvdmVyCi10aW1lLCB3aGljaCBpcyByZXF1aXJlZCBieSB0aGUgSmF2YSBHTFYncyBgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zYCBvcHRpb24uIFRoaXMgc2V0dGluZyBkZWZhdWx0cyB0byBgZmFsc2VgCi10byBwcmVzZXJ2ZSB0aGUgZXN0YWJsaXNoZWQgMy41LjAgYmVoYXZpb3IuIFByb3ZpZGVycyBpbXBsZW1lbnRpbmcgc2Vzc2lvbiBzdXBwb3J0IHNob3VsZCBiZSBhd2FyZSB0aGF0IHdoZW4gdGhpcwotc2V0dGluZyBpcyBlbmFibGVkLCBzZXNzaW9ucyBhbmQgY29ubmVjdGlvbnMgbm8gbG9uZ2VyIGhhdmUgYSBvbmUtdG8tb25lIGxpZmVjeWNsZSByZWxhdGlvbnNoaXAgYXMgYSBzaW5nbGUgY29ubmVjdGlvbgotbWF5IGhvc3QgbWFueSBzZXNzaW9ucyBzZXF1ZW50aWFsbHkuIFByb3ZpZGVycyB3aXNoaW5nIHRvIHN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5IGFyZSByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHNhbWUKLWBjbG9zZVNlc3Npb25Qb3N0R3JhcGhPcGAgY29uZmlndXJhdGlvbiBuYW1lIGZvciBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIFRpbmtlclBvcCBlY29zeXN0ZW0uCi0KLSoqYGF1dGhlbnRpY2F0aW9uYCBvcGVyYXRpb24gYXJndW1lbnRzKioKLQotW3dpZHRoPSIxMDAlIixjb2xzPSIyLDIsOSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfFR5cGUgfERlc2NyaXB0aW9uCi18c2FzbE1lY2hhbmlzbSB8U3RyaW5nIHwgVGhlIFNBU0wgbWVjaGFuaXNtOiBgUExBSU5gIG9yIGBHU1NBUElgLiBOb3RlIHRoYXQgaXQgaXMgdXAgdG8gdGhlIHNlcnZlciBpbXBsZW1lbnRhdGlvbiB0byB1c2Ugb3IgZGlzcmVnYXJkIHRoaXMgc2V0dGluZyAoZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbiBHcmVtbGluIFNlcnZlciBpZ25vcmVzIGl0KS4KLXxzYXNsIHxTdHJpbmcgfCAqUmVxdWlyZWQqIFRoZSByZXNwb25zZSB0byB0aGUgc2VydmVyIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4gIFRoaXMgdmFsdWUgaXMgZGVwZW5kZW50IG9uIHRoZSBTQVNMIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSByZXF1aXJlZCBieSB0aGUgc2VydmVyIGFuZCBpcyBCYXNlNjQgZW5jb2RlZC4KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKipgZXZhbGAgb3BlcmF0aW9uIGFyZ3VtZW50cyoqCi0KLVt3aWR0aD0iMTAwJSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfFR5cGUgfERlc2NyaXB0aW9uCi18Z3JlbWxpbiB8U3RyaW5nIHwgKlJlcXVpcmVkKiBUaGUgR3JlbWxpbiBzY3JpcHQgdG8gZXZhbHVhdGUuCi18c2Vzc2lvbiB8U3RyaW5nIHwgKlJlcXVpcmVkKiBUaGUgc2Vzc2lvbiBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBzZXNzaW9uIC0gdHlwaWNhbGx5IHRoaXMgdmFsdWUgc2hvdWxkIGJlIGEgVVVJRCAodGhlIHNlc3Npb24gd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3QpLgotfG1hbmFnZVRyYW5zYWN0aW9uIHxCb29sZWFuIHxXaGVuIHNldCB0byBgdHJ1ZWAgdGhlIHRyYW5zYWN0aW9uIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IGlzIGF1dG8tY29tbWl0dGVkIG9yIHJvbGxlZC1iYWNrIGFzIGFyZSBkb25lIHdpdGggc2Vzc2lvbmxlc3MgcmVxdWVzdHMgLSBkZWZhdWx0ZWQgdG8gYGZhbHNlYC4KLXxiaW5kaW5ncyB8TWFwIHxBIG1hcCBvZiBrZXkvdmFsdWUgcGFpcnMgdG8gYXBwbHkgYXMgdmFyaWFibGVzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBHcmVtbGluIHNjcmlwdC4KLXxldmFsdWF0aW9uVGltZW91dCB8TG9uZyB8QW4gb3ZlcnJpZGUgZm9yIHRoZSBzZXJ2ZXIgc2V0dGluZyB0aGF0IGRldGVybWluZXMgdGhlIG1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIHNjcmlwdCB0byBleGVjdXRlIG9uIHRoZSBzZXJ2ZXIuCi18bGFuZ3VhZ2UgfFN0cmluZyB8VGhlIGZsYXZvciBvZiBHcmVtbGluIHVzZWQgKGUuZy4gYGdyZW1saW4tZ3Jvb3Z5YCkKLXxhbGlhc2VzIHxNYXAgfEEgbWFwIG9mIGtleS92YWx1ZSBwYWlycyB0aGF0IGFsbG93IGdsb2JhbGx5IGJvdW5kIGBHcmFwaGAgYW5kIGBUcmF2ZXJzYWxTb3VyY2VgIG9iamVjdHMgdG8KLWJlIGFsaWFzZWQgdG8gZGlmZmVyZW50IHZhcmlhYmxlIG5hbWVzIGZvciBwdXJwb3NlcyBvZiB0aGUgY3VycmVudCByZXF1ZXN0LiAgVGhlIHZhbHVlIHJlcHJlc2VudHMgdGhlIG5hbWUgdGhlCi1nbG9iYWwgdmFyaWFibGUgYW5kIGl0cyBrZXkgcmVwcmVzZW50cyB0aGUgbmV3IGJpbmRpbmcgbmFtZSBhcyBpdCB3aWxsIGJlIHJlZmVyZW5jZWQgaW4gdGhlIEdyZW1saW4gcXVlcnkuICBGb3IKLWV4YW1wbGUsIGlmIHRoZSBHcmVtbGluIFNlcnZlciBkZWZpbmVzIHR3byBgVHJhdmVyc2FsU291cmNlYCBpbnN0YW5jZXMgbmFtZWQgYGcxYCBhbmQgYGcyYCwgaXQgd291bGQgYmUgcG9zc2libGUKLXRvIHNlbmQgYW4gYWxpYXMgcGFpciB3aXRoIGtleSBvZiAiZyIgYW5kIHZhbHVlIG9mICJnMiIgYW5kIHRodXMgYWxsb3cgdGhlIHNjcmlwdCB0byByZWZlciB0byAiZzIiIHNpbXBseSBhcyAiZyIuCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSoqYGNsb3NlYCBvcGVyYXRpb24gYXJndW1lbnRzKioKLVt3aWR0aD0iMTAwJSIsY29scz0iMiwyLDkiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18S2V5IHxUeXBlIHxEZXNjcmlwdGlvbgotfHNlc3Npb24gfFN0cmluZyB8ICpSZXF1aXJlZCogVGhlIHNlc3Npb24gaWRlbnRpZmllciBmb3IgdGhlIHNlc3Npb24gdG8gY2xvc2UuCi18Zm9yY2UgfEJvb2xlYW4gfCBEZXRlcm1pbmVzIGlmIHRoZSBzZXNzaW9uIHNob3VsZCBiZSBmb3JjZSBjbG9zZWQgd2hlbiB0aGUgY2xpZW50IGlzIGNsb3NlZC4gRm9yY2UgY2xvc2luZyB3aWxsIG5vdAotYXR0ZW1wdCB0byBjbG9zZSBvcGVuIHRyYW5zYWN0aW9ucyBmcm9tIGV4aXN0aW5nIHJ1bm5pbmcgam9icyBhbmQgbGVhdmUgaXQgdG8gdGhlIHVuZGVybHlpbmcgZ3JhcGggdG8gZGVjaWRlZCBob3cgdG8KLXByb2NlZWQgd2l0aCB0aG9zZSBvcnBoYW5lZCB0cmFuc2FjdGlvbnMuIFNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgdGVuZHMgdG8gbGVhZCB0byBmYXN0ZXIgY2xvc2Ugb3BlcmF0aW9uIGFuZCByZWxlYXNlCi1vZiByZXNvdXJjZXMgd2hpY2ggY2FuIGJlIGRlc2lyYWJsZSBpZiBHcmVtbGluIFNlcnZlciBoYXMgYSBsb25nIHNlc3Npb24gdGltZW91dCBhbmQgYSBsb25nIHNjcmlwdCBldmFsdWF0aW9uIHRpbWVvdXQKLWFzIGF0dGVtcHRzIHRvIGNsb3NlIGxvbmcgcnVuIGpvYnMgY2FuIG9jY3VyIG1vcmUgcmFwaWRseS4gSWYgbm90IHByb3ZpZGVkLCB0aGlzIHZhbHVlIGlzIGBmYWxzZWAuCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLT09PT0gVHJhdmVyc2FsIE9wUHJvY2Vzc29yCi0KLUJvdGggdGhlIFN0YW5kYXJkIGFuZCBTZXNzaW9uIE9wUHJvY2Vzc29ycyBhbGxvdyBmb3IgR3JlbWxpbiBzY3JpcHRzIHRvIGJlIHN1Ym1pdHRlZCB0byB0aGUgc2VydmVyLiBUaGUKLWBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgaG93ZXZlciBhbGxvd3MgR3JlbWxpbiBgQnl0ZWNvZGVgIHRvIGJlIHN1Ym1pdHRlZCB0byB0aGUgc2VydmVyLiBTdXBwb3J0aW5nIHRoaXMgYE9wUHJvY2Vzc29yYAotbWFrZXMgaXQgcG9zc2libGUgZm9yIGEgbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovcmVmZXJlbmNlLyNncmVtbGluLWRyaXZlcnMtdmFyaWFudHNbR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50XQotdG8gc3VibWl0IGEgYFRyYXZlcnNhbGAgZGlyZWN0bHkgdG8gR3JlbWxpbiBTZXJ2ZXIgaW4gdGhlIG5hdGl2ZSBsYW5ndWFnZSBvZiB0aGUgR0xWIHdpdGhvdXQgaGF2aW5nIHRvIHVzZSBhIHNjcmlwdCBpbgotYSBkaWZmZXJlbnQgbGFuZ3VhZ2UuCi0KLVVubGlrZSBTdGFuZGFyZCBhbmQgU2Vzc2lvbiBPcFByb2Nlc3NvcnMsIHRoZSBUcmF2ZXJzYWwgT3BQcm9jZXNzb3IgZG9lcyBub3Qgc2ltcGx5IHJldHVybiB0aGUgcmVzdWx0cyBvZiB0aGUKLWBUcmF2ZXJzYWxgLiBJdCBpbnN0ZWFkIHJldHVybnMgYFRyYXZlcnNlcmAgb2JqZWN0cyB3aGljaCBhbGxvd3MgdGhlIGNsaWVudCB0byB0YWtlIGFkdmFudGFnZSBvZgotbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovcmVmZXJlbmNlLyNiYXJyaWVyLXN0ZXBbYnVsa2luZ10uIFRvIGRlc2NyaWJlIHRoaXMgaW50ZXJhY3Rpb24gbW9yZQotZGlyZWN0bHksIHRoZSByZXR1cm5lZCBgVHJhdmVyc2VyYCB3aWxsIHJlcHJlc2VudCBzb21lIHZhbHVlIGZyb20gdGhlIGBUcmF2ZXJzYWxgIHJlc3VsdCBhbmQgdGhlIG51bWJlciBvZiB0aW1lcyBpdAotaXMgcmVwcmVzZW50ZWQgaW4gdGhlIGZ1bGwgc3RyZWFtIG9mIHJlc3VsdHMuIFNvLCBpZiBhIGBUcmF2ZXJzYWxgIGhhcHBlbnMgdG8gcmV0dXJuIHRoZSBzYW1lIHZlcnRleCB0d2VudHkgdGltZXMKLWl0IHdvbid0IHJldHVybiB0d2VudHkgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIG9iamVjdC4gSXQgd2lsbCByZXR1cm4gb25lIGluIGBUcmF2ZXJzZXJgIHdpdGggdGhlIGBidWxrYCB2YWx1ZSBzZXQgdG8KLXR3ZW50eS4gVW5kZXIgdGhpcyBtb2RlbCwgdGhlIGFtb3VudCBvZiBwcm9jZXNzaW5nIGFuZCBuZXR3b3JrIG92ZXJoZWFkIGNhbiBiZSByZWR1Y2VkIGNvbnNpZGVyYWJseS4KLQotVG8gZGVtb25zdHJhdGUgY29uc2lkZXIgdGhpcyBleGFtcGxlOgotCi1bZ3JlbWxpbi1ncm9vdnldCitbc291cmNlLHRleHRdCiAtLS0tCi1jbHVzdGVyID0gQ2x1c3Rlci5vcGVuKCkKLWNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpCi1hbGlhc2VkID0gY2xpZW50LmFsaWFzKCJnIikKLWcgPSB0cmF2ZXJzYWwoKS53aXRoKG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaC5pbnN0YW5jZSgpKSAgICAgPDE+Ci1ycyA9IGFsaWFzZWQuc3VibWl0KGcuVigpLmJvdGgoKS5iYXJyaWVyKCkuYm90aCgpLmJhcnJpZXIoKSkuYWxsKCkuZ2V0KCkgICAgICAgICAgICAgICAgICAgIDwyPgotYWxpYXNlZC5zdWJtaXQoZy5WKCkuYm90aCgpLmJhcnJpZXIoKS5ib3RoKCkuYmFycmllcigpLmNvdW50KCkpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSA8Mz4KLXJzLmNvbGxlY3R7W3ZhbHVlOiBpdC5nZXRPYmplY3QoKS5nZXQoKSwgYnVsazogaXQuZ2V0T2JqZWN0KCkuYnVsaygpXX0gICAgICAgICAgICAgICAgICAgICAgPDQ+CitQT1NUIC9ncmVtbGluIEhUVFAvMS4xCitjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbgorYWNjZXB0OiBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12NC4wK2pzb24KKworeyJncmVtbGluIjogImcudHgoKS5iZWdpbigpIiwgImciOiAiZyJ9CiAtLS0tCiAKLTwxPiBBbGwgY29tbWFuZHMgdGhyb3VnaCB0aGlzIHN0ZXAgYXJlIGp1c3QgZGVzaWduZWQgdG8gZGVtb25zdHJhdGUgYnVsa2luZyB3aXRoIEdyZW1saW4gU2VydmVyIGFuZCBkb24ndCByZXByZXNlbnQKLWEgcmVhbC13b3JsZCB3YXkgdGhhdCB0aGlzIGZlYXR1cmUgd291bGQgYmUgdXNlZC4KLTwyPiBTdWJtaXQgYSBgVHJhdmVyc2FsYCB0aGF0IGhhcHBlbnMgdG8gZW5zdXJlIHRoYXQgdGhlIHNlcnZlciB1c2VzIGJ1bGtpbmcuIE5vdGUgdGhhdCBhIGBUcmF2ZXJzZXJgIGlzIHJldHVybmVkCi1hbmQgdGhhdCB0aGVyZSBhcmUgb25seSBzaXggcmVzdWx0cy4KLTwzPiBJbiBhY3R1YWxpdHksIGhvd2V2ZXIsIGlmIHRoaXMgc2FtZSBgVHJhdmVyc2FsYCBpcyBpdGVyYXRlZCB0aGVyZSBhcmUgdGhpcnR5IHJlc3VsdHMuIFdpdGhvdXQgYnVsa2luZywgdGhlIHByZXZpb3VzCi1yZXF1ZXN0IHdvdWxkIGhhdmUgc2VudCBiYWNrIHRoaXJ0eSB0cmF2ZXJzZXJzLgotPDQ+IE5vdGUgdGhhdCB0aGUgc3VtIG9mIHRoZSBidWxrIG9mIGVhY2ggYFRyYXZlcnNlcmAgaXMgdGhpcnR5LgorW3NvdXJjZSx0ZXh0XQorLS0tLQorSFRUUC8xLjEgMjAwIE9LCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbgorWC1UcmFuc2FjdGlvbi1JZDogM2M3MmEzYTgtYmU0MS00YTBiLTg4ZTUtYTg4ZWU2ZjFlOGU0CiAKLVRoZSBmdWxsIGl0ZXJhdGlvbiBvZiBhIGBUcmF2ZXJzYWxgIGlzIHRodXMgbGVmdCB0byB0aGUgY2xpZW50LiBJdCBtdXN0IGludGVycHJldCB0aGUgYnVsayBvbiB0aGUgYFRyYXZlcnNlcmAgYW5kCi11bnJvbGwgaXQgdG8gcmVwcmVzZW50IHRoZSBhY3R1YWwgbnVtYmVyIG9mIHRpbWVzIGl0IGV4aXN0cyB3aGVuIGl0ZXJhdGVkLiBUaGUgdW5yb2xsaW5nIGlzIHR5cGljYWxseSBoYW5kbGVkCi1kaXJlY3RseSB3aXRoaW4gVGlua2VyUG9wJ3MgcmVtb3RlIHRyYXZlcnNhbCBpbXBsZW1lbnRhdGlvbnMuCit7InJlc3VsdCI6IHsiZGF0YSI6IFt7InRyYW5zYWN0aW9uSWQiOiAiM2M3MmEzYTgtYmU0MS00YTBiLTg4ZTUtYTg4ZWU2ZjFlOGU0In1dfX0KKy0tLS0KIAotW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwYSIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxLZXkgfERlc2NyaXB0aW9uCi18cHJvY2Vzc29yIHxUaGlzIHZhbHVlIHNob3VsZCBiZSBzZXQgdG8gYHRyYXZlcnNhbGAKLXxvcCB8Ci1bY29scz0iMywxMCIsb3B0aW9ucz0iaGVhZGVyIl0KLSE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSFLZXkgIURlc2NyaXB0aW9uCi0hYGF1dGhlbnRpY2F0aW9uYCAhQSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHJlc3BvbnNlIHRvIGEgc2VydmVyIGNoYWxsZW5nZSBmb3IgYXV0aGVudGljYXRpb24uCi0hYGJ5dGVjb2RlYCAhQSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGBCeXRlY29kZWAgcmVwcmVzZW50YXRpb24gb2YgYSBgVHJhdmVyc2FsYC4KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Egc3Vic2VxdWVudCB0cmFuc2FjdGlvbmFsIHJlcXVlc3Q6CiAKLSoqYGF1dGhlbnRpY2F0aW9uYCBvcGVyYXRpb24gYXJndW1lbnRzKioKK1tzb3VyY2UsdGV4dF0KKy0tLS0KK1BPU1QgL2dyZW1saW4gSFRUUC8xLjEKK2NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uCithY2NlcHQ6IGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbgorWC1UcmFuc2FjdGlvbi1JZDogM2M3MmEzYTgtYmU0MS00YTBiLTg4ZTUtYTg4ZWU2ZjFlOGU0CiAKLVt3aWR0aD0iMTAwJSIsY29scz0iMiwyLDkiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18S2V5IHxUeXBlIHxEZXNjcmlwdGlvbgotfHNhc2wgfFN0cmluZyB8ICpSZXF1aXJlZCogVGhlIHJlc3BvbnNlIHRvIHRoZSBzZXJ2ZXIgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLiAgVGhpcyB2YWx1ZSBpcyBkZXBlbmRlbnQgb24gdGhlIFNBU0wgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtIHJlcXVpcmVkIGJ5IHRoZSBzZXJ2ZXIgYW5kIGlzIEJhc2U2NCBlbmNvZGVkLgotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoreyJncmVtbGluIjogImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdhbGljZScpIiwgInRyYW5zYWN0aW9uSWQiOiAiM2M3MmEzYTgtYmU0MS00YTBiLTg4ZTUtYTg4ZWU2ZjFlOGU0In0KKy0tLS0KIAotKipgYnl0ZWNvZGVgIG9wZXJhdGlvbiBhcmd1bWVudHMqKgorPT09PSBDbGllbnQtU2lkZSBIb3N0IEFmZmluaXR5CiAKLVt3aWR0aD0iMTAwJSIsY29scz0iMiwyLDkiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18S2V5IHxUeXBlIHxEZXNjcmlwdGlvbgotfGdyZW1saW4gfFN0cmluZyB8ICpSZXF1aXJlZCogVGhlIGBCeXRlY29kZWAgcmVwcmVzZW50YXRpb24gb2YgYSBgVHJhdmVyc2FsYC4KLXxhbGlhc2VzIHxNYXAgfCAqUmVxdWlyZWQqIEEgbWFwIHdpdGggYSBzaW5nbGUga2V5L3ZhbHVlIHBhaXIgdGhhdCByZWZlcnMgdG8gYSBnbG9iYWxseSBib3VuZCBgVHJhdmVyc2FsU291cmNlYCBvYmplY3QKLXRvIGJlIGFsaWFzZWQgdG8gZGlmZmVyZW50IHZhcmlhYmxlIG5hbWVzIGZvciBwdXJwb3NlcyBvZiB0aGUgY3VycmVudCByZXF1ZXN0LiAgVGhlIHZhbHVlIHJlcHJlc2VudHMgdGhlIG5hbWUgb2YgdGhlCi1nbG9iYWwgdmFyaWFibGUgYW5kIGl0cyBrZXkgcmVwcmVzZW50cyB0aGUgbmV3IGJpbmRpbmcgbmFtZSBhcyBpdCB3aWxsIGJlIHJlZmVyZW5jZWQgaW4gdGhlIEdyZW1saW4gcXVlcnkuICBGb3IKLWV4YW1wbGUsIGlmIHRoZSBHcmVtbGluIFNlcnZlciBkZWZpbmVzIHR3byBgVHJhdmVyc2FsU291cmNlYCBpbnN0YW5jZXMgbmFtZWQgYGcxYCwgaXQgd291bGQgYmUgcG9zc2libGUKLXRvIHNlbmQgYW4gYWxpYXMgcGFpciB3aXRoIGtleSBvZiAiZyIgYW5kIHZhbHVlIG9mICJnMSIgYW5kIHRodXMgYWxsb3cgdGhlIHNjcmlwdCB0byByZWZlciB0byAiZzEiIHNpbXBseSBhcyAiZyIuIE5vdGUKLXRoYXQgdW5saWtlIHVzZXJzIG9mIGBhbGlhc2AgaW4gb3RoZXIgY29udGV4dHMsIGluIHRoaXMgY2FzZSwgdGhlIGtleSBjYW4gKm9ubHkqIGJlIHNldCB0byAiZyIgYW5kIHRoZXJlIGNhbiBiZSBvbmx5Ci1vbmUga2V5IHZhbHVlIHBhaXIgcHJlc2VudCAoc2luY2Ugb25seSBvbmUgYFRyYXZlcnNhbGAgaXMgYmVpbmcgc3VibWl0dGVkLCB0aGVyZSBpcyBubyBzZW5zZSB0byBoYXZpbmcgbW9yZSB0aGFuIGEKLXNpbmdsZSBhbGlhcykuCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciByb3V0aW5nIGFsbCByZXF1ZXN0cyBpbiBhIHRyYW5zYWN0aW9uIHRvIHRoZSBzYW1lIHNlcnZlciBpbnN0YW5jZS4gVGhlIGBYLVRyYW5zYWN0aW9uLUlkYAoraGVhZGVyIHByb3ZpZGVzIGEgc3RhbmRhcmQgbWVjaGFuaXNtIGZvciBsb2FkIGJhbGFuY2VycyB0byBhY2hpZXZlIHN0aWNreSByb3V0aW5nIHdpdGhvdXQgcGFyc2luZyB0aGUgcmVxdWVzdCBib2R5LgorVGhpcyBkZXNpZ24gaXMgc2VydmVyLXRvcG9sb2d5IGFnbm9zdGljIOKAlCBpdCB3b3JrcyBpZGVudGljYWxseSB3aGV0aGVyIHRoZSBiYWNrZW5kIGlzIGEgc2luZ2xlIHNlcnZlciwgYSBjbHVzdGVyIHdpdGgKK2EgbG9hZCBiYWxhbmNlciwgb3IgYSBtYW5hZ2VkIHNlcnZpY2UuIEVhY2ggc2VydmVyIG1hbmFnZXMgb25seSBpdHMgb3duIGxvY2FsIHRyYW5zYWN0aW9uIHN0YXRlLgorCis9PT09IEdyYXBoIEFsaWFzIExvY2tpbmcKKworVGhlIGdyYXBoIGFsaWFzIChgZ2AgZmllbGQpIHNwZWNpZmllZCBpbiB0aGUgYmVnaW4gcmVxdWVzdCBkZXRlcm1pbmVzIHdoaWNoIGdyYXBoIGluc3RhbmNlIHRoZSB0cmFuc2FjdGlvbiB0YXJnZXRzLiBUaGlzCithbGlhcyBpcyBsb2NrZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIGEgc3Vic2VxdWVudCByZXF1ZXN0IGNhcnJpZXMgYSBkaWZmZXJlbnQgYWxpYXMsIHRoZSBzZXJ2ZXIKK3JlamVjdHMgaXQgd2l0aCBIVFRQIDQwMC4gVGhpcyBwcmV2ZW50cyBjcm9zcy1ncmFwaCBvcGVyYXRpb25zIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4KKworPT09PSBUcmFuc2FjdGlvbiBUaW1lb3V0IGFuZCBJZGxlIFJlY2xhbWF0aW9uCisKK1NlcnZlcnMgaW1wbGVtZW50IGEgY29uZmlndXJhYmxlIHRyYW5zYWN0aW9uIHRpbWVvdXQgKGB0cmFuc2FjdGlvblRpbWVvdXRgLCBkZWZhdWx0IDYwMDAwMG1zKS4gVGhlIHRpbWVvdXQgcmVwcmVzZW50cworaG93IGxvbmcgYSB0cmFuc2FjdGlvbiBjYW4gc2l0IGlkbGUgd2l0aCBubyByZXF1ZXN0cyBiZWZvcmUgdGhlIHNlcnZlciBmb3JjaWJseSByb2xscyBpdCBiYWNrIGFuZCByZW1vdmVzIGl0LiBUaGUKK3RpbWVvdXQgcmVzZXRzIG9uIGVhY2ggcmVxdWVzdCByZWNlaXZlZCBmb3IgdGhhdCB0cmFuc2FjdGlvbiwgc28gYWN0aXZlIHRyYW5zYWN0aW9ucyBhcmUgbm90IGFmZmVjdGVkLiBBZnRlciBhIHRpbWVvdXQKK2ZpcmVzLCBhbnkgc3Vic2VxdWVudCByZXF1ZXN0IHdpdGggdGhhdCB0cmFuc2FjdGlvbiBJRCByZWNlaXZlcyBhIDQwNCByZXNwb25zZS4KKworPT09PSBUcmFuc2FjdGlvbiBDYXBhY2l0eSBMaW1pdHMKKworU2VydmVycyBlbmZvcmNlIGEgY29uZmlndXJhYmxlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgb3BlbiB0cmFuc2FjdGlvbnMgKGBtYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zYCwgZGVmYXVsdAorMTAwMCkuIFdoZW4gdGhlIGxpbWl0IGlzIHJlYWNoZWQsIG5ldyBiZWdpbiByZXF1ZXN0cyBhcmUgcmVqZWN0ZWQgd2l0aCBIVFRQIDUwMy4gU2xvdHMgYXJlIGZyZWVkIHdoZW4gdHJhbnNhY3Rpb25zCitjbG9zZSB2aWEgY29tbWl0LCByb2xsYmFjaywgb3IgdGltZW91dC4KKworPT09PSBFcnJvciBIYW5kbGluZyBXaXRoaW4gYSBUcmFuc2FjdGlvbgorCitJZiBhIHRyYXZlcnNhbCB3aXRoaW4gYW4gb3BlbiB0cmFuc2FjdGlvbiBmYWlscyAoYmFkIHN5bnRheCwgcnVudGltZSBlcnJvciwgZXRjLiksIHRoZSBzZXJ2ZXIgcmV0dXJucyB0aGUgZXJyb3IgZm9yCit0aGF0IHJlcXVlc3QgYnV0IGtlZXBzIHRoZSB0cmFuc2FjdGlvbiBvcGVuLiBUaGUgY2xpZW50IGNhbiByZXRyeSwgc3VibWl0IG90aGVyIHRyYXZlcnNhbHMsIG9yIGV4cGxpY2l0bHkgcm9sbCBiYWNrLgorQSBmYWlsZWQgdHJhdmVyc2FsIGRvZXMgbm90IGltcGxpY2l0bHkgY2xvc2Ugb3Igcm9sbCBiYWNrIHRoZSB0cmFuc2FjdGlvbi4gT25seSBhbiBleHBsaWNpdCBjb21taXQsIGV4cGxpY2l0IHJvbGxiYWNrLAorb3Igc2VydmVyLXNpZGUgdGltZW91dCBjbG9zZXMgYSB0cmFuc2FjdGlvbi4KKworPT09PSBUaHJlYWQgQWZmaW5pdHkKKworR3JhcGggdHJhbnNhY3Rpb25zIGFyZSB0eXBpY2FsbHkgYFRocmVhZExvY2FsYC1ib3VuZC4gVGhlIHNlcnZlciBtYWludGFpbnMgYSBzaW5nbGUtdGhyZWFkZWQgZXhlY3V0b3IgcGVyIHRyYW5zYWN0aW9uCit0byBlbnN1cmUgYWxsIG9wZXJhdGlvbnMgZXhlY3V0ZSBvbiB0aGUgc2FtZSB0aHJlYWQuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGltcGxlbWVudGF0aW9uIGRldGFpbCBmb3IgZ3JhcGggc3lzdGVtCitwcm92aWRlcnMgd2hvc2UgYFRyYW5zYWN0aW9uYCBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhyZWFkLWxvY2FsIHN0YXRlLgorCitOT1RFOiBOb24tdHJhbnNhY3Rpb25hbCByZXF1ZXN0cyAodGhvc2Ugd2l0aG91dCBhIGB0cmFuc2FjdGlvbklkYCkgYXJlIG5vdCBhZmZlY3RlZCBieSBhbnkgb2YgdGhlIHRyYW5zYWN0aW9uLXNwZWNpZmljCitiZWhhdmlvciBkZXNjcmliZWQgYWJvdmUuIFRoZXkgY29udGludWUgdG8gb3BlcmF0ZSBleGFjdGx5IGFzIGJlZm9yZS4KKworPT09IEhUVFAgUmVxdWVzdCBJbnRlcmNlcHRvcgorCitBIGdyYXBoIGRyaXZlciBtYXkgc3VwcG9ydCBIVFRQIHJlcXVlc3QgaW50ZXJjZXB0aW5nIHdoaWNoIHByb3ZpZGVzIGEgbWVhbnMgZm9yIHRoZSB1c2VyIG9mIHlvdXIgZ3JhcGggZHJpdmVyIHRvIHVwZGF0ZQordGhlIGhlYWRlcnMgYW5kIGJvZHkgb2YgdGhlIEhUVFAgcmVxdWVzdCBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgc2VydmVyLiAgVGhpcyBlbmFibGVzIHVzZSBjYXNlcyB3aGVyZSBhIGdyYXBoIHN5c3RlbQorcHJvdmlkZXIncyBzZXJ2ZXIgaW1wbGVtZW50YXRpb24gaGFzIGFkZGl0aW9uYWwgY2FwYWJpbGl0aWVzIHRoYXQgYXJlbid0IGluY2x1ZGVkIGluIHRoZSBiYXNlIEdyZW1saW4gU2VydmVyLiAgQWx0aG91Z2gKK2V2ZXJ5IGdyYXBoIHN5c3RlbSBwcm92aWRlciBpcyBleHBlY3RlZCB0byBzdXBwb3J0IHRoZSBwcm90b2NvbCBkZWZpbmVkIGJ5IHRoZSBUaW5rZXJQb3AgSFRUUCBBUEksIHRoaXMgZG9lc24ndAorcHJlY2x1ZGUgdGhlbSBmcm9tIGluY2x1ZGluZyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuICBCZSBhd2FyZSB0aGF0IGlmIHlvdSBjaG9vc2UgdG8gbm90IHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5LAordGhlbiB5b3VyIGdyYXBoIGRyaXZlciBtYXkgbm90IGhhdmUgYWNjZXNzIHRvIHNvbWUgZ3JhcGggcHJvdmlkZXIncyBmZWF0dXJlcywgb3IsIHBvc3NpYmx5LCBpdCBtYXkgbm90IGJlIGFibGUgdG8KK2Nvbm5lY3QgYXQgYWxsLgogCiA9PT0gQXV0aGVudGljYXRpb24gYW5kIEF1dGhvcml6YXRpb24KIAotR3JlbWxpbiBTZXJ2ZXIgc3VwcG9ydHMgbGluazpodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TaW1wbGVfQXV0aGVudGljYXRpb25fYW5kX1NlY3VyaXR5X0xheWVyW1NBU0wtYmFzZWRdCi1hdXRoZW50aWNhdGlvbi4gIEEgU0FTTCBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIHNlcmllcyBvZiBjaGFsbGVuZ2VzIGFuZCByZXNwb25zZXMgdGhhdCBhIGRyaXZlciBtdXN0IGNvbXBseSB3aXRoCi1pbiBvcmRlciB0byBhdXRoZW50aWNhdGUuICBHcmVtbGluIFNlcnZlciBzdXBwb3J0cyB0aGUgIlBMQUlOIiBTQVNMIG1lY2hhbmlzbSwgd2hpY2ggaXMgYSBjbGVhcnRleHQKLXBhc3N3b3JkIHN5c3RlbSwgZm9yIGFsbCBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9yZWZlcmVuY2UvI2dyZW1saW4tZHJpdmVycy12YXJpYW50c1tHcmVtbGluIExhbmd1YWdlIFZhcmlhbnRzXS4KLU90aGVyIFNBU0wgbWVjaGFuaXNtcyBzdXBwb3J0ZWQgZm9yIHNlbGVjdGVkIGNsaWVudHMgYXJlIGxpc3RlZCBpbiB0aGUKLWxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L3JlZmVyZW5jZS8jc2VjdXJpdHlbc2VjdXJpdHkgc2VjdGlvbiBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIgcmVmZXJlbmNlIGRvY3VtZW50YXRpb25dLgorQnkgZGVmYXVsdCwgR3JlbWxpbiBTZXJ2ZXIgb25seSBzdXBwb3J0cworbGluazpodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNpY19hY2Nlc3NfYXV0aGVudGljYXRpb25bYmFzaWMgSFRUUCBhdXRoZW50aWNhdGlvbl0uICBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlCitgSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyYCB3aGljaCBpcyB0aGUgb25seSBgQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXJgIHByb3ZpZGVkIHdpdGggdGhlIEdyZW1saW4gU2VydmVyLgorT3RoZXIgY29tbW9uIEhUVFAgYXV0aGVudGljYXRpb24gc2NoZW1lcyB0aGF0IGFyZSBzZW50IHZpYSBhbiBIVFRQIGhlYWRlciBjYW4gYmUgc3VwcG9ydGVkIGJ5IGltcGxlbWVudGluZyBhIGN1c3RvbQorYEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyYC4gIEJlY2F1c2UgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wgaXMgSFRUUC8xLjEsIGF1dGhlbnRpY2F0aW9uIHNob3VsZCBiZSBoZWFkZXItYmFzZWQKK2FuZCBzaG91bGQgbm90IGluY2x1ZGUgbmVnb3RpYXRpb24uCiAKLVdoZW4gYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCwgYW4gaW5jb21pbmcgcmVxdWVzdCBpcyBpbnRlcmNlcHRlZCBiZWZvcmUgaXQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBgU2NyaXB0RW5naW5lYC4gIFRoZQotcmVxdWVzdCBpcyBzYXZlZCBvbiB0aGUgc2VydmVyIGFuZCBhIGBBVVRIRU5USUNBVEVgIGNoYWxsZW5nZSByZXNwb25zZSAoc3RhdHVzIGNvZGUgYDQwN2ApIGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQuCi0KLVRoZSBjbGllbnQgd2lsbCBkZXRlY3QgdGhlIGBBVVRIRU5USUNBVEVgIGFuZCByZXNwb25kIHdpdGggYW4gYGF1dGhlbnRpY2F0aW9uYCBmb3IgdGhlIGBvcGAgYW5kIGFuIGBhcmdgIG5hbWVkIGBzYXNsYC4KLUluIGNhc2Ugb2YgdGhlICJQTEFJTiIgU0FTTCBtZWNoYW5pc20gdGhlIGBhcmdgIGNvbnRhaW5zIHRoZSBwYXNzd29yZC4gIFRoZSBwYXNzd29yZCBzaG91bGQgYmUgZWl0aGVyLCBhbiBlbmNvZGVkCi1zZXF1ZW5jZSBvZiBVVEYtOCBieXRlcywgZGVsaW1pdGVkIGJ5IDAgKFVTLUFTQ0lJIE5VTCksIHdoZXJlIHRoZSBmb3JtIGlzIDogYDxOVUw+dXNlcm5hbWU8TlVMPnBhc3N3b3JkYCwgb3IgYSBCYXNlNjQKLWVuY29kZWQgc3RyaW5nIG9mIHRoZSBmb3JtZXIgKHdoaWNoIGluIHRoaXMgaW5zdGFuY2Ugd291bGQgYmUgYEFIVnpaWEp1WVcxbEFIQmhjM04zYjNKa2ApLiAgU2hvdWxkIEdyZW1saW4gU2VydmVyIGJlCi1hYmxlIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBwcm92aWRlZCBjcmVkZW50aWFscywgdGhlIHNlcnZlciB3aWxsIHJldHVybiB0aGUgcmVzdWx0cyBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBhcyBpdAotbm9ybWFsbHkgZG9lcyB3aXRob3V0IGF1dGhlbnRpY2F0aW9uLiAgSWYgaXQgY2Fubm90IGF1dGhlbnRpY2F0ZSBnaXZlbiB0aGUgY2hhbGxlbmdlIHJlc3BvbnNlIGZyb20gdGhlIGNsaWVudCwgaXQgd2lsbAotcmV0dXJuIGBVTkFVVEhPUklaRURgIChzdGF0dXMgY29kZSBgNDAxYCkuCi0KLU5PVEU6IEdyZW1saW4gU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlICJhdXRob3JpemF0aW9uIGlkZW50aXR5IiBhcyBkZXNjcmliZWQgaW4gbGluazpodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDYxNltSRkM0NjE2XS4KK1doZW4gYmFzaWMgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCwgYW4gaW5jb21pbmcgcmVxdWVzdCBpcyBpbnRlcmNlcHRlZCBiZWZvcmUgaXQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBgU2NyaXB0RW5naW5lYC4KK1RoZSByZXF1ZXN0IGlzIGV4YW1pbmVkIGZvciBhbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVyLiBJZiBvbmUgZG9lc24ndCBleGlzdCB0aGVuICI0MDEgVW5hdXRob3JpemVkIiBlcnJvciByZXNwb25zZSBpcworcmV0dXJuZWQuCiAKIEluIGFkZGl0aW9uIHRvIGF1dGhlbnRpY2F0aW5nIHVzZXJzIGF0IHRoZSBzdGFydCBvZiBhIGNvbm5lY3Rpb24sIEdyZW1saW4gU2VydmVyIGFsbG93cyBwcm92aWRlcnMgdG8gYXV0aG9yaXplIHVzZXJzIG9uCiBhIHBlciByZXF1ZXN0IGJhc2lzLiBJZgpAQCAtMTM1OCw2ICsxMzAwLDM5IEBACiBOT1RFOiBXaGlsZSBHcmVtbGluIFNlcnZlciBzdXBwb3J0cyB0aGlzIGF1dGhvcml6YXRpb24gZmVhdHVyZSBpdCBpcyBub3QgYSBmZWF0dXJlIHRoYXQgVGlua2VyUG9wIHJlcXVpcmVzIG9mIGdyYXBoCiBwcm92aWRlcnMgYXMgcGFydCBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXIuCiAKK1tbc2VyaWFsaXplcnNdXQorPT09IFNlcmlhbGl6ZXJzCisKK0luIG9yZGVyIHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIHJlcXVlc3RzIGFuZCByZXNwb25zZXMsIHlvdXIgZ3JhcGggZHJpdmVyIHdpbGwgbmVlZCB0byBpbXBsZW1lbnQKK2xpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L2Rldi9pby8jZ3JhcGhiaW5hcnlbR3JhcGhCaW5hcnldLiBUaGUgR3JlbWxpbiBTZXJ2ZXIgaXMgY2FwYWJsZSBvZgorcmV0dXJuaW5nIGJvdGggR3JhcGhCaW5hcnkgYW5kIEdyYXBoU09OLCBob3dldmVyLCBHcmFwaEJpbmFyeSBpcyBhIG1vcmUgY29tcGFjdCBmb3JtYXQgd2hpY2ggY2FuIGxlYWQgdG8gaW5jcmVhc2VkCitwZXJmb3JtYW5jZSBhcyBmZXdlciBieXRlcyBuZWVkIHRvIGJlIHNlbnQgdGhyb3VnaCB0aGUgd2lyZS4gRm9yIHRoaXMgcmVhc29uLCBkcml2ZXJzIG9ubHkgbmVlZCB0byBzdXBwb3J0IEdyYXBoQmluYXJ5LgorbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L2lvLyNncmFwaHNvbltHcmFwaFNPTl0gY2FuIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zIHRoYXQgb25seSBzdXBwb3J0IEpTT04gc2VyaWFsaXphdGlvbi4KKworVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgc2VyaWFsaXplcnMgc3VwcG9ydGVkIGJ5IHRoZSBHcmVtbGluIFNlcnZlciBhbmQgdGhlaXIgTUlNRSB0eXBlcy4gVGhlc2UgTUlNRSB0eXBlcyBzaG91bGQKK2JlIHVzZWQgaW4gdGhlIGBDb250ZW50LVR5cGVgIGFuZCBgQWNjZXB0YCBIVFRQIGhlYWRlcnMuCisKK1t3aWR0aD0iMTAwJSIsY29scz0iMyw1LDUiLG9wdGlvbnM9ImhlYWRlciJdCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8TmFtZSB8RGVzY3JpcHRpb24gfE1JTUUgdHlwZQorfFVudHlwZWQgR3JhcGhTT04gNC4wIHxBIEpTT04tYmFzZWQgZ3JhcGggZm9ybWF0IHxhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12NC4wK2pzb247dHlwZXM9ZmFsc2UKK3xUeXBlZCBHcmFwaFNPTiA0LjAgfEEgSlNPTi1iYXNlZCBncmFwaCBmb3JtYXQgd2l0aCBlbWJlZGRlZCB0eXBlIGluZm9ybWF0aW9uIHVzZWQgZm9yIHNlcmlhbGl6YXRpb24gfGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbjt0eXBlcz10cnVlCit8R3JhcGhCaW5hcnkgNC4wIHxBIGJpbmFyeSBncmFwaCBmb3JtYXQgfGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKz09PT0gSU8gVGVzdHMKKworVGhlIElPIHRlc3Qgc3VpdGUgaXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgZXhwZWN0ZWQgb3V0Y29tZSBvZiBzZXJpYWxpemF0aW9uIG9mIGNlcnRhaW4gdHlwZXMuIFRoZXNlCit0ZXN0cyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHNlcmlhbGl6ZXIgaGFzIGJlZW4gY29ycmVjdGx5IGltcGxlbWVudGVkLiBJbiBnZW5lcmFsLCBhIGRyaXZlciBzaG91bGQKK2JlIGFibGUgdG8gInJvdW5kIHRyaXAiIGVhY2ggb2YgdGhlc2UgdHlwZXMuIFRoYXQgaXMsIGl0IHNob3VsZCBiZSBhYmxlIHRvIGJvdGggcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aG9zZSBleGFjdCBzYW1lCitieXRlcy4gTm90IGFsbCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgcHJvdmlkZSBsaWJyYXJ5IHR5cGVzIHRoYXQgd2lsbCBtYXRjaCB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyB0eXBlCitkZWZpbmVkIGJ5IHRoZSBzZXJpYWxpemVyLiBJbiB0aGlzIGNhc2UsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb21wbGV0ZWx5IHJvdW5kIHRyaXAgdGhhdCB0eXBlIGFuZCB5b3UgbWF5IHNraXAgdGhhdAordGVzdC4gVGhlIEdyYXBoQmluYXJ5IHRlc3QgZmlsZXMgY2FuIGJlIGZvdW5kCitsaW5rOmh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL3RyZWUveC55LnovZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeVtoZXJlXS4KK1RoZSBsaW5rOmh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2Jsb2IveC55LnovZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RUeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmE6W0phdmEgaW1wbGVtZW50YXRpb25dCitjYW4gYmUgdXNlZCBhcyBhIHJlZmVyZW5jZSBvbiBob3cgdGhlc2UgZmlsZXMgY2FuIGJlIHVzZWQgYW5kIGl0cworbGluazpodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iL3gueS56L2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL01vZGVsLmphdmFbbW9kZWxdCitzaG93cyB0aGUgSmF2YSByZXByZXNlbnRhdGlvbiBvZiB0aG9zZSBmaWxlcy4KIAogW1tncmVtbGluLXBsdWdpbnNdXQogPT0gR3JlbWxpbiBQbHVnaW5zCmRpZmYgLS1naXQgYS9kb2NzL3NyYy9kb2NpbmZvLmh0bWwgYi9kb2NzL3NyYy9kb2NpbmZvLmh0bWwKaW5kZXggODUyNGI0NC4uYTZkOTY0YyAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvZG9jaW5mby5odG1sCisrKyBiL2RvY3Mvc3JjL2RvY2luZm8uaHRtbApAQCAtMSwxNiArMSwyMCBAQAogPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi1jb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLXRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLVRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0odGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKwogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiA8IS0tIE1hdG9tbyAtLT4KIDxzY3JpcHQ+CmRpZmYgLS1naXQgYS9kb2NzL3NyYy9pbmRleC5hc2NpaWRvYyBiL2RvY3Mvc3JjL2luZGV4LmFzY2lpZG9jCmluZGV4IGVhMDI1MmQuLjMyMWQ3ZWQgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL2luZGV4LmFzY2lpZG9jCisrKyBiL2RvY3Mvc3JjL2luZGV4LmFzY2lpZG9jCkBAIC00Miw3ICs0Miw3IEBACiBpcyBhbHNvIGFuIGFicmlkZ2VkIHZlcnNpb24gb2YgdGhlIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL1tjb3JlXSBpbnRlcmZhY2VzIHdoaWNoIG1heQogYmUgbW9yZSBjb252ZW5pZW50IGluIHNvbWUgY2FzZXMuCiA2LiBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG90bmV0ZG9jcy94Lnkuei9bLk5FVCBEb2NzXSAtIFRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgR3JlbWxpbi5OZXQuCi03LiBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvanNkb2NzL3gueS56L1tKU0RvY10gLSBUaGUgSlNEb2MgZm9yIGdyZW1saW4tamF2YXNjcmlwdC4KKzcuIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qc2RvY3MveC55LnovW0pTIERvY10gLSBUaGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIEdyZW1saW4tSmF2YVNjcmlwdC4KIDguIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L3VwZ3JhZGUvW1VwZ3JhZGUgRG9jdW1lbnRhdGlvbl0gLSBOb3RlcyByZWxhdGVkIHRvIHVwZ3JhZGluZyBmcm9tIG9uZQogdmVyc2lvbiBvZiBUaW5rZXJQb3AgdG8gdGhlIG5leHQuIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGJyZWFraW5nIGNoYW5nZXMsIG1ham9yIG5ldyBmZWF0dXJlcyBhbmQgb3RoZXIgaW1wb3J0YW50CiBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZXJzaW9uLgpAQCAtNjcsMTEgKzY3LDggQEAKIElkZW50aWZpZXMgYW5kIGV4cGxhaW5zIHRoZSBjb21wb25lbnQgcGFydHMgb2YgYSBHcmVtbGluIHRyYXZlcnNhbC4KIF58aW1hZ2U6Z3JlbWxpbi1jaGVmLnBuZ1t3aWR0aD0xMjVdIHxsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9yZWNpcGVzL1tHcmVtbGluIFJlY2lwZXNdICsKIEEgY29sbGVjdGlvbiBvZiBiZXN0IHByYWN0aWNlcyBhbmQgY29tbW9uIHRyYXZlcnNhbCBwYXR0ZXJucyBmb3IgR3JlbWxpbi4KLXxpbWFnZTpncmVtbGluLWxhYi1jb2F0LnBuZ1t3aWR0aD0yMDBdIHxsaW5rOmh0dHA6Ly9zcWwyZ3JlbWxpbi5jb20vW1NxbDJHcmVtbGluXSArCit8aW1hZ2U6Z3JlbWxpbi1sYWItY29hdC5wbmdbd2lkdGg9MjAwXSB8bGluazpodHRwczovL2dpdGh1Yi5jb20vZGt1cHBpdHovc3FsMmdyZW1saW5bU3FsMkdyZW1saW5dICsKIExlYXJuIEdyZW1saW4gdXNpbmcgdHlwaWNhbCBwYXR0ZXJucyBmb3VuZCB3aGVuIHF1ZXJ5aW5nIGRhdGEgd2l0aCBTUUwuICgqZXh0ZXJuYWwqKQotXnxpbWFnZTpncmVtbGluLXN0YW5kaW5nLnBuZ1t3aWR0aD0xMjVdIHxsaW5rOmh0dHBzOi8vYWNhZGVteS5kYXRhc3RheC5jb20vcmVzb3VyY2VzL2dldHRpbmctc3RhcnRlZC1ncmFwaC1kYXRhYmFzZXNbR2V0dGluZyBTdGFydGVkIHdpdGggR3JhcGggRGF0YWJhc2VzXSArCi1BIGJyaWVmIG92ZXJ2aWV3IG9mIFJEQk1TIGFyY2hpdGVjdHVyZSBpbiBjb21wYXJpc29uIHRvIGdyYXBoLCBiYXNpYyBncmFwaCB0ZXJtaW5vbG9neSwgYSByZWFsLXdvcmxkIHVzZSBjYXNlIGZvciBncmFwaCwKLWFuZCBhbiBvdmVydmlldyBvZiBHcmVtbGluLiAoKmV4dGVybmFsKikKIF58aW1hZ2U6Z3JlbWxpbi1jb21wZW5kaXVtLnBuZ1t3aWR0aD0yMDBdIHxsaW5rOmh0dHA6Ly93d3cuZG9hbmR1eWhhaS5jb20vYmxvZy8/cD0xMzQ2MFtUaGUgR3JlbWxpbiBDb21wZW5kaXVtLCBtaW5pbXVtIHN1cnZpdmFsIGtpdCBmb3IgYW55IEdyZW1saW4gdXNlcl0gKwogQSBzZXJpZXMgb2YgYmxvZyBwb3N0cyB0aGF0IGV4YW1pbmUgdGhlIEdyZW1saW4gbGFuZ3VhZ2UgaW4gdGhlIGNvbnRleHQgb2YgdmFyaW91cyBncmFwaCB0cmF2ZXJzYWwgcGF0dGVybnMuICgqZXh0ZXJuYWwqKQogXnxpbWFnZTpwcmFjdGljYWwtZ3JlbWxpbi5wbmdbd2lkdGg9MjAwXSB8bGluazpodHRwczovL2tybGF3cmVuY2UuZ2l0aHViLmlvL2dyYXBoL1tQcmFjdGljYWwgR3JlbWxpbjogQW4gQXBhY2hlIFRpbmtlclBvcCBUdXRvcmlhbF0gKwpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVjaXBlcy9hbnRpLXBhdHRlcm5zLmFzY2lpZG9jIGIvZG9jcy9zcmMvcmVjaXBlcy9hbnRpLXBhdHRlcm5zLmFzY2lpZG9jCmluZGV4IDkxNDQxZGIuLjE4ZGRlNzggMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL3JlY2lwZXMvYW50aS1wYXR0ZXJucy5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWNpcGVzL2FudGktcGF0dGVybnMuYXNjaWlkb2MKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgICBmcm9tKCJwJHtyZWxhdGlvbi5mcm9tfSIpLgogICAgICAgICAgIHRvKCJwJHtyZWxhdGlvbi50b30iKQogfSA7IFtdCi10cmF2ZXJzYWxBc1N0cmluZyA9IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yLm9mKCJnIikudHJhbnNsYXRlKHQuYnl0ZWNvZGUpLmdldFNjcmlwdCgpIDsgW10KK3RyYXZlcnNhbEFzU3RyaW5nID0gdC5ncmVtbGluTGFuZy5nZXRHcmVtbGluKCkgOyBbXQogWyAiVHJhdmVyc2FsIFN0cmluZyBMZW5ndGgiOiB0cmF2ZXJzYWxBc1N0cmluZy5sZW5ndGgoKQogLCAiVHJhdmVyc2FsIFByZXZpZXciOiB0cmF2ZXJzYWxBc1N0cmluZy5yZXBsYWNlRmlyc3QoL14oLnsxMDR9KS4qKC57NjR9KSQvLCAnJDEgLi4uICQyJykgXQogLS0tLQpAQCAtMjMwLDggKzIzMCw4IEBACiBbW3N0ZXBzLWluc3RlYWQtb2YtdG9rZW5zXV0KID09IFN0ZXBzIEluc3RlYWQgb2YgVG9rZW5zCiAKLU5PVEU6IEFzIG9mIDMuNS4wLCBgQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneWAgaXMgcHJlc2VudCB0byBhdXRvbWF0aWNhbGx5IHRyYW5zbGF0ZSB0aGlzIGFudGktcGF0dGVybiB0byB0aGVpcgotbW9yZSBwZXJmb3JtYW50IHZlcnNpb25zIGZvciBtb3N0IGNhc2VzIGhvd2V2ZXIsIGl0IGlzIHN0aWxsIGJlc3QgdG8gd3JpdGUgR3JlbWxpbiBhY2NvcmRpbmcgdG8gdGhlIGNvbnRlbnRzIHRoYXQgZm9sbG93LgorTk9URTogYEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lgIGlzIHByZXNlbnQgdG8gYXV0b21hdGljYWxseSB0cmFuc2xhdGUgdGhpcyBhbnRpLXBhdHRlcm4gdG8gdGhlaXIgbW9yZSBwZXJmb3JtYW50CisgdmVyc2lvbnMgZm9yIG1vc3QgY2FzZXMgaG93ZXZlciwgaXQgaXMgc3RpbGwgYmVzdCB0byB3cml0ZSBHcmVtbGluIGFjY29yZGluZyB0byB0aGUgY29udGVudHMgdGhhdCBmb2xsb3cuCiAKIFdoZW4gY2hpbGQgdHJhdmVyc2FscyBjb250YWluIGEgc2luZ2xlIHN0ZXAsIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSB0aGF0IHRoZSBzdGVwIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgdG9rZW4uIFRoZXNlCiB0b2tlbnMgYXJlIHRyYW5zbGF0ZWQgaW50byBvcHRpbWl6ZWQgdHJhdmVyc2FscyB0aGF0IGV4ZWN1dGUgbXVjaCBmYXN0ZXIgdGhlbiB0aGVpciBzdGVwIHRyYXZlcnNhbCBwZW5kYW50cy4gQSBmZXcKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3JlY2lwZXMvb2xhcC1zcGFyay15YXJuLmFzY2lpZG9jIGIvZG9jcy9zcmMvcmVjaXBlcy9vbGFwLXNwYXJrLXlhcm4uYXNjaWlkb2MKaW5kZXggOTZjMDMzMy4uMzFkMTE4ZiAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvcmVjaXBlcy9vbGFwLXNwYXJrLXlhcm4uYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvcmVjaXBlcy9vbGFwLXNwYXJrLXlhcm4uYXNjaWlkb2MKQEAgLTg5LDcgKzg5LDEwIEBACiAkIC4gYmluL3NwYXJrLXlhcm4uc2gKIC0tLS0KIAotW2dyZW1saW4tZ3Jvb3Z5XQorV0FSTklORzogVGhlIEhhZG9vcCBhbmQgU3BhcmsgbW9kdWxlcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSA0LjAuMC1iZXRhLjIgZGlzdHJpYnV0aW9uLiBUaGlzIHJlY2lwZSB3aWxsCitiZSByZXN0b3JlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCitbc291cmNlLGdyb292eV0KIC0tLS0KIGhhZG9vcCA9IFN5c3RlbS5nZXRlbnYoJ0hBRE9PUF9IT01FJykKIGhhZG9vcENvbmZEaXIgPSBTeXN0ZW0uZ2V0ZW52KCdIQURPT1BfQ09ORl9ESVInKQpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVmZXJlbmNlL2NvbXBpbGVycy5hc2NpaWRvYyBiL2RvY3Mvc3JjL3JlZmVyZW5jZS9jb21waWxlcnMuYXNjaWlkb2MKaW5kZXggM2FlNmI3ZS4uNTFmOGM0YyAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvcmVmZXJlbmNlL2NvbXBpbGVycy5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWZlcmVuY2UvY29tcGlsZXJzLmFzY2lpZG9jCkBAIC0yNyw2ICsyNyw5IEBACiBbW3NwYXJxbC1ncmVtbGluXV0KID09IFNQQVJRTC1HcmVtbGluCiAKK1dBUk5JTkc6IFRoZSBzcGFycWwtZ3JlbWxpbiBtb2R1bGUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSA0LjAuMC1iZXRhLjIgZGlzdHJpYnV0aW9uLiBUaGUgZXhhbXBsZXMgaW4gdGhpcworc2VjdGlvbiBhcmUgcHJlc2VudGVkIGFzIHN0YXRpYyBjb2RlIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisKIGltYWdlOjpncmVtbGludHJvbi5wbmdbd2lkdGg9MjI1XQogCiBUaGUgU1BBUlFMLUdyZW1saW4gY29tcGlsZXIsIHRyYW5zZm9ybXMgbGluazpodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TUEFSUUxbU1BBUlFMXSBxdWVyaWVzIGludG8gR3JlbWxpbgpAQCAtNjYsNyArNjksNyBAQAogSW5zdGFsbGluZyB0aGlzIHBsdWdpbiB3aWxsIGRvd25sb2FkIGFwcHJvcHJpYXRlIGRlcGVuZGVuY2llcyBhbmQgaW1wb3J0IGNlcnRhaW4gY2xhc3NlcyB0byB0aGUgY29uc29sZSBzbyB0aGF0IHRoZXkKIG1heSBiZSB1c2VkIGFzIGZvbGxvd3M6CiAKLVtncmVtbGluLWdyb292eSxtb2Rlcm5dCitbc291cmNlLGdyb292eV0KIC0tLS0KIGdyYXBoID0gVGlua2VyRmFjdG9yeS5jcmVhdGVNb2Rlcm4oKQogZyA9IHRyYXZlcnNhbChTcGFycWxUcmF2ZXJzYWxTb3VyY2UpLndpdGgoZ3JhcGgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxPgpAQCAtOTgsNyArMTAxLDcgQEAKIAogTm90ZSB0aGF0IGVsZW1lbnQgSURzIGFuZCBsYWJlbHMgYXJlIHRyZWF0ZWQgbGlrZSBub3JtYWwgcHJvcGVydGllcywgaGVuY2UgdGhleSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgdGhlIHNhbWUgcGF0dGVybjoKIAotW2dyZW1saW4tZ3Jvb3Z5LGV4aXN0aW5nXQorW3NvdXJjZSxncm9vdnldCiAtLS0tCiBnLnNwYXJxbCgiIiJTRUxFQ1QgP25hbWUgP2lkID9sYWJlbCAKIAlXSEVSRSB7IApAQCAtMjI4LDcgKzIzMSw3IEBACiAKIFNlbGVjdCBhbGwgdmVydGljZXMgaW4gdGhlIGdyYXBoLgogCi1bZ3JlbWxpbi1ncm9vdnksZXhpc3RpbmddCitbc291cmNlLGdyb292eV0KIC0tLS0KIGcuc3BhcnFsKCIiIlNFTEVDVCAqIFdIRVJFIHsgfSIiIikKIC0tLS0KQEAgLTIzNyw3ICsyNDAsNyBAQAogCiBTZWxlY3QgYWxsIHZlcnRpY2VzIHdpdGggdGhlIGxhYmVsIGBwZXJzb25gLgogCi1bZ3JlbWxpbi1ncm9vdnksZXhpc3RpbmddCitbc291cmNlLGdyb292eV0KIC0tLS0KIGcuc3BhcnFsKCIiIlNFTEVDVCAqIFdIRVJFIHsgID9wZXJzb24gdjpsYWJlbCAicGVyc29uIiAufSIiIikKIC0tLS0KQEAgLTI0Niw3ICsyNDksNyBAQAogCiBTZWxlY3QgdGhlIHZhbHVlcyBvZiB0aGUgcHJvcGVydGllcyBgbmFtZWAgYW5kIGBhZ2VgIGZvciBlYWNoIGBwZXJzb25gIHZlcnRleC4KIAotW2dyZW1saW4tZ3Jvb3Z5LGV4aXN0aW5nXQorW3NvdXJjZSxncm9vdnldCiAtLS0tCiBnLnNwYXJxbCgiIiJTRUxFQ1QgP25hbWUgP2FnZQogV0hFUkUgewpAQCAtMjU5LDcgKzI2Miw3IEBACiAKIFNlbGVjdCBvbmx5IHRob3NlIHBlcnNvbnMgd2hvIGNyZWF0ZWQgYSBwcm9qZWN0LgogCi1bZ3JlbWxpbi1ncm9vdnksZXhpc3RpbmddCitbc291cmNlLGdyb292eV0KIC0tLS0KIGcuc3BhcnFsKCIiIlNFTEVDVCA/bmFtZSA/YWdlCiBXSEVSRSB7CkBAIC0yNzMsNyArMjc2LDcgQEAKIAogU2VsZWN0IG9ubHkgdGhvc2UgcGVyc29ucyB3aG8gYXJlIG9sZGVyIHRoYW4gMzAuCiAKLVtncmVtbGluLWdyb292eSxleGlzdGluZ10KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogZy5zcGFycWwoIiIiU0VMRUNUID9uYW1lID9hZ2UKIFdIRVJFIHsKQEAgLTI4Nyw3ICsyOTAsNyBAQAogCiBTZWxlY3QgdGhlIGRpc3RpbmN0IG5hbWVzIG9mIHRoZSBjcmVhdGVkIHByb2plY3RzLgogCi1bZ3JlbWxpbi1ncm9vdnksZXhpc3RpbmddCitbc291cmNlLGdyb292eV0KIC0tLS0KIGcuc3BhcnFsKCIiIlNFTEVDVCBESVNUSU5DVCA/bmFtZQogV0hFUkUgewpAQCAtMzAyLDcgKzMwNSw3IEBACiAKIFNlbGVjdCB0aGUgZGlzdGluY3QgbmFtZXMgb2YgYWxsIEphdmEgcHJvamVjdHMuCiAKLVtncmVtbGluLWdyb292eSxleGlzdGluZ10KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogZy5zcGFycWwoIiIiU0VMRUNUIERJU1RJTkNUID9uYW1lCiBXSEVSRSB7CkBAIC0zMTgsNyArMzIxLDcgQEAKIAogU2VsZWN0IGFsbCBwZXJzb25zIHdobyBoYXZlIGRldmVsb3BlZCBhIHNvZnR3YXJlIGluIGphdmEgdXNpbmcgdW5pb24uCiAKLVtncmVtbGluLWdyb292eSxleGlzdGluZ10KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogZy5zcGFycWwoIiIiU0VMRUNUICogCiBXSEVSRSB7CkBAIC0zNDUsNyArMzQ4LDcgQEAKIAogU2VsZWN0IGFsbCB2ZXJ0aWNlcyB3aXRoIHRoZSBsYWJlbCBgcGVyc29uYCBhbmQgb3JkZXIgdGhlbSBieSB0aGVpciBhZ2UuCiAKLVtncmVtbGluLWdyb292eSxleGlzdGluZ10KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogZy5zcGFycWwoIiIiU0VMRUNUID9hZ2UgP25hbWUKIFdIRVJFIHsKQEAgLTM1OSw3ICszNjIsNyBAQAogCiBTZWxlY3QgYWxsIHZlcnRpY2VzIHdpdGggdGhlIGxhYmVsIGBwZXJzb25gIGFuZCBncm91cCB0aGVtIGJ5IHRoZWlyIGFnZS4KIAotW2dyZW1saW4tZ3Jvb3Z5LGV4aXN0aW5nXQorW3NvdXJjZSxncm9vdnldCiAtLS0tCiBnLnNwYXJxbCgiIiJTRUxFQ1QgP2FnZSAKIFdIRVJFIHsKQEAgLTM4OCw3ICszOTEsNyBAQAogQWNjZXNzaW5nIHRoZSBNZXRhLVByb3BlcnR5IG9mIGEgZ3JhcGggZWxlbWVudC4gTWV0YS1Qcm9wZXJ0eSBjYW4gYmUgcGVyY2VpdmVkIGFzIHRoZSByZWlmaWVkIHN0YXRlbWVudHMgaW4gYW4gUkRGCiBncmFwaC4KIAotW2dyZW1saW4tZ3Jvb3Z5LHRoZUNyZXddCitbc291cmNlLGdyb292eV0KIC0tLS0KIGcgPSB0cmF2ZXJzYWwoU3BhcnFsVHJhdmVyc2FsU291cmNlKS53aXRoKGdyYXBoKQogZy5zcGFycWwoIiIiU0VMRUNUID9uYW1lID9zdGFydFRpbWUKQEAgLTQwNSw3ICs0MDgsNyBAQAogY2FuIGJlIHBlcmNlaXZlZCBhcyBwYXRoIHF1ZXJpZXMgb3IgbmVpZ2hib3Job29kIHF1ZXJpZXMuIEZvciBpbnN0YW5jZSwgZ2V0dGluZyBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMKIGBwZXJzb25gIG9yIGBzb2Z0d2FyZWAuCiAKLVtncmVtbGluLWdyb292eSxleGlzdGluZ10KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogZy5zcGFycWwoIiIiU0VMRUNUID9hZ2UgP3NvZnR3YXJlID9sYW5nID9uYW1lCiBXSEVSRSB7CkBAIC00MjIsNyArNDI1LDcgQEAKIFRoZSBgc3BhcnFsKClgLXN0ZXAgdGFrZXMgYSBTUEFSUUwgcXVlcnkgYW5kIHJldHVybnMgYSByZXN1bHQuIFRoYXQgcmVzdWx0IGNhbiBiZSBmdXJ0aGVyIHByb2Nlc3NlZCBieSBzdGFuZGFyZCBHcmVtbGluCiBzdGVwcyBhcyBzaG93biBiZWxvdzoKIAotW2dyZW1saW4tZ3Jvb3Z5LG1vZGVybl0KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogZyA9IHRyYXZlcnNhbChTcGFycWxUcmF2ZXJzYWxTb3VyY2UpLndpdGgoZ3JhcGgpCiBnLnNwYXJxbCgiU0VMRUNUID9uYW1lID9hZ2UgV0hFUkUgeyA/cGVyc29uIHY6bmFtZSA/bmFtZSAuID9wZXJzb24gdjphZ2UgP2FnZSB9IikKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9ncmVtbGluLWFwcGxpY2F0aW9ucy5hc2NpaWRvYyBiL2RvY3Mvc3JjL3JlZmVyZW5jZS9ncmVtbGluLWFwcGxpY2F0aW9ucy5hc2NpaWRvYwppbmRleCBjNTQzNTliLi44MDM5YWZmIDEwMDY0NAotLS0gYS9kb2NzL3NyYy9yZWZlcmVuY2UvZ3JlbWxpbi1hcHBsaWNhdGlvbnMuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvcmVmZXJlbmNlL2dyZW1saW4tYXBwbGljYXRpb25zLmFzY2lpZG9jCkBAIC04MCw3ICs4MCw3IEBACiAKICAgICAgICAgIFwsLCwvCiAgICAgICAgICAobyBvKQotLS0tLS1vT09vLSgzKS1vT09vLS0tLS0KKy0tLS0tb09Pby0oNCktb09Pby0tLS0tCiBwbHVnaW4gbG9hZGVkOiB0aW5rZXJwb3Auc2VydmVyCiBwbHVnaW4gbG9hZGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzCiBwbHVnaW4gbG9hZGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgKQEAgLTEzNiw1NSArMTM2LDE2IEBACiB8Omluc3RhbGwgfDorIHxJbXBvcnRzIGEgTWF2ZW4gbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcyBpbnRvIHRoZSBDb25zb2xlLgogfDp1bmluc3RhbGwgfDotIHxSZW1vdmVzIGEgTWF2ZW4gbGlicmFyeSBhbmQgaXRzIGRlcGVuZGVuY2llcy4gQSByZXN0YXJ0IG9mIHRoZSBjb25zb2xlIGlzIHJlcXVpcmVkIGZvciByZW1vdmFsIHRvIGZ1bGx5IHRha2UgZWZmZWN0LgogfDpwbHVnaW4gfDpwaW4gfFBsdWdpbiBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0byBsaXN0LCBhY3RpdmF0ZSBhbmQgZGVhY3RpdmF0ZSBhdmFpbGFibGUgcGx1Z2lucy4KLXw6cmVtb3RlIHw6cmVtIHxDb25maWd1cmVzIGEgInJlbW90ZSIgY29udGV4dCB3aGVyZSBHcmVtbGluIG9yIHJlc3VsdHMgb2YgR3JlbWxpbiB3aWxsIGJlIHByb2Nlc3NlZCB2aWEgdXNhZ2Ugb2YgYDpzdWJtaXRgLgotfDpzdWJtaXQgfDo+IHxTdWJtaXQgR3JlbWxpbiB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250ZXh0IGRlZmluZWQgYnkgYDpyZW1vdGVgLgotfDpieXRlY29kZSB8OmJjIHxQcm92aWRlcyBvcHRpb25zIGZvciB0cmFuc2xhdGluZyBhbmQgZXZhbHVhdGluZyBgQnl0ZWNvZGVgIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLU1hbnkgb2YgdGhlIGFib3ZlIGNvbW1hbmRzIGFyZSBkZXNjcmliZWQgZWxzZXdoZXJlIG9yIGFyZSBnZW5lcmFsbHkgc2VsZi1leHBsYW5hdG9yeSwgYnV0IHRoZSBgOmJ5dGVjb2RlYCBjb21tYW5kCi1jb3VsZCB1c2Ugc29tZSBhZGRpdGlvbmFsIGV4cGxhbmF0aW9uLiBUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgZXhhbXBsZSB1c2FnZToKLQotW3NvdXJjZSx0ZXh0XQotLS0tLQotZ3JlbWxpbj4gOmJ5dGVjb2RlIGZyb20gZy5WKCkub3V0KCdrbm93cycpICA8MT4KLT09PnsiQHR5cGUiOiJnOkJ5dGVjb2RlIiwiQHZhbHVlIjp7InN0ZXAiOltbIlYiXSxbIm91dCIsImtub3dzIl1dfX0KLWdyZW1saW4+IDpieXRlY29kZSB0cmFuc2xhdGUgZyB7IkB0eXBlIjoiZzpCeXRlY29kZSIsIkB2YWx1ZSI6eyJzdGVwIjpbWyJWIl0sWyJvdXQiLCJrbm93cyJdXX19IDwyPgotPT0+Zy5WKCkub3V0KCJrbm93cyIpCi1ncmVtbGluPiBtID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS5jcmVhdGUoKQotPT0+b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXJANjlkNmE3Y2QKLWdyZW1saW4+IDpiYyBjb25maWcgbSAgPDM+Ci09PT5Db25maWd1cmVkIGJ5dGVjb2RlIHNlcmlhbGl6ZXIKLWdyZW1saW4+IDpiYyBmcm9tIGcuVigpLnByb3BlcnR5KCdkJyxqYXZhLnRpbWUuWWVhck1vbnRoLm5vdygpKSA8ND4KLUNvdWxkIG5vdCBmaW5kIGEgdHlwZSBpZGVudGlmaWVyIGZvciB0aGUgY2xhc3MgOiBjbGFzcyBqYXZhLnRpbWUuTW9udGguIE1ha2Ugc3VyZSB0aGUgdmFsdWUgdG8gc2VyaWFsaXplIGhhcyBhIHR5cGUgaWRlbnRpZmllciByZWdpc3RlcmVkIGZvciBpdHMgY2xhc3MuICh0aHJvdWdoIHJlZmVyZW5jZSBjaGFpbjogamF2YS50aW1lLlllYXJNb250aFsibW9udGgiXSkKLVR5cGUgJzpoZWxwJyBvciAnOmgnIGZvciBoZWxwLgotRGlzcGxheSBzdGFjayB0cmFjZT8gW3lOXW4KLWdyZW1saW4+IDpiYyByZXNldCAgPDU+Ci09PT5CeXRlY29kZSBzZXJpYWxpemVyIHJlc2V0IHRvIEdyYXBoU09OIDMuMCB3aXRoIGV4dGVuc2lvbnMgYW5kIFRpbmtlckdyYXBoIHNlcmlhbGl6ZXJzCi1ncmVtbGluPiA6YmMgZnJvbSBnLlYoKS5wcm9wZXJ0eSgnZCcsamF2YS50aW1lLlllYXJNb250aC5ub3coKSkKLT09PnsiQHR5cGUiOiJnOkJ5dGVjb2RlIiwiQHZhbHVlIjp7InN0ZXAiOltbIlYiXSxbInByb3BlcnR5IiwiZCIseyJAdHlwZSI6Imd4OlllYXJNb250aCIsIkB2YWx1ZSI6IjIwMjAtMTEifV1dfX0KLS0tLS0KLQotPDE+IEdlbmVyYXRlcyBhIEdyYXBoU09OIDMuMCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhdmVyc2FsIGFzIGJ5dGVjb2RlLgotPDI+IENvbnZlcnRzIGJ5dGVjb2RlIGluIEdyYXBoU09OIDMuMCBmb3JtYXQgdG8gYSB0cmF2ZXJzYWwgc3RyaW5nLgotPDM+IENvbmZpZ3VyZSBhIGN1c3RvbSBgR3JhcGhTT05NYXBwZXJgIGZvciB0aGUgYDpieXRlY29kZWAgY29tbWFuZCB0byB1c2Ugd2hpY2ggY2FuIGJlIGhlbHBmdWwgd2hlbiB3b3JraW5nIHdpdGgKLWN1c3RvbSBjbGFzc2VzIGZyb20gZGlmZmVyZW50IGdyYXBoIHByb3ZpZGVycy4gVGhlIGBjb25maWdgIG9wdGlvbiBjYW4gdGFrZSBhIGBHcmFwaFNPTk1hcHBlcmAgYXJndW1lbnQgYXMgc2hvd24gb3IKLW9uZSBvciBtb3JlIGBJb1JlZ2lzdHJ5YCBvciBgU2ltcGxlTW9kdWxlYCBpbXBsZW1lbnRhdGlvbnMgdGhhdCB3aWxsIHBsdWcgaW50byB0aGUgZGVmYXVsdCBgR3JhcGhTT05NYXBwZXJgIGNvbnN0cnVjdGVkCi1ieSB0aGUgYDpieXRlY29kZWAgY29tbWFuZC4gVGhlIGRlZmF1bHQgd2lsbCBjb25maWd1cmUgZm9yIEdyYXBoU09OIDMuMCB3aXRoIHRoZSBleHRlbnNpb25zIG1vZHVsZSBhbmQsIGlmIHByZXNlbnQsCi10aGUgYFRpbmtlcklvUmVnaXN0cnlgIGZyb20gVGlua2VyR3JhcGguCi08ND4gTm90ZSB0aGF0IHRoZSBgWWVhck1vbnRoYCB3aWxsIG5vdCBzZXJpYWxpemUgYmVjYXVzZSBgbWAgZGlkIG5vdCBjb25maWd1cmUgdGhlIGV4dGVuc2lvbnMgbW9kdWxlLgotPDU+IEFmdGVyIGByZXNldGAgaXQgd29ya3MgcHJvcGVybHkgb25jZSBtb3JlLgotCi1OT1RFOiBUaGUgQ29uc29sZSBkb2VzIGV4cG9zZSB0aGUgYDpyZWNvcmRgIGNvbW1hbmQgd2hpY2ggaXMgaW5oZXJpdGVkIGZyb20gdGhlIEdyb292eSBTaGVsbC4gVGhpcyBjb21tYW5kIHdvcmtzIHdlbGwKLXdpdGggbG9jYWwgY29tbWFuZHMsIGJ1dCBtYXkgcmVjb3JkIHNlc3Npb24gb3V0cHV0cyBkaWZmZXJlbnRseSBmb3IgYDpyZW1vdGVgIGNvbW1hbmRzLiBJZiB0aGVyZSBpcyBhIG5lZWQgdG8gdXNlCi1gOnJlY29yZGAgaXQgbWF5IGJlIGJlc3QgdG8gbWFudWFsbHkgY3JlYXRlIGEgYENsdXN0ZXJgIG9iamVjdCBhbmQgaXNzdWUgY29tbWFuZHMgdGhhdCB3YXkgc28gdGhhdCB0aGV5IGV2YWx1YXRlCi1sb2NhbGx5IGluIHRoZSBzaGVsbC4KK05PVEU6IFRoZSBDb25zb2xlIGFsc28gZXhwb3NlcyB0aGUgYDpyZWNvcmRgIGNvbW1hbmQgd2hpY2ggaXMgaW5oZXJpdGVkIGZyb20gdGhlIEdyb292eSBTaGVsbC4KIAogPT09IEludGVycnVwdGluZyBFdmFsdWF0aW9ucwogCiBJZiB0aGVyZSBpcyBzb21lIGlucHV0IHRoYXQgaXMgdGFraW5nIHRvbyBsb25nIHRvIGV2YWx1YXRlIG9yIHRvIGl0ZXJhdGUgdGhyb3VnaCwgdXNlIGBjdHJsK2NgIHRvIGF0dGVtcHQgdG8gaW50ZXJydXB0CiB0aGF0IHByb2Nlc3MuIEl0IGlzIGFuICJhdHRlbXB0IiBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgbG9uZyBydW5uaW5nIHByb2Nlc3MgaXMgb25seSBpbmZvcm1lZCBvZiB0aGUgaW50ZXJydXB0aW9uIGJ5CiB0aGUgdXNlciBhbmQgbXVzdCByZXNwb25kIHRvIGl0IChhcyB3aXRoIGFueSBjYWxsIHRvIGBpbnRlcnJ1cHQoKWAgb24gYSBgVGhyZWFkYCkuIEEgYFRyYXZlcnNhbGAgd2lsbCB0eXBpY2FsbHkgcmVzcG9uZAotdG8gc3VjaCByZXF1ZXN0cyBhcyBkbyBtb3N0IGNvbW1hbmRzLCBpbmNsdWRpbmcgYDpyZW1vdGVgIG9wZXJhdGlvbnMuCit0byBzdWNoIHJlcXVlc3RzIGFzIGRvIG1vc3QgY29tbWFuZHMuCiAKIFtzb3VyY2UsdGV4dF0KIC0tLS0KQEAgLTI2NSwyOSArMjI2LDI2IEBACiAtLS0tCiBncmVtbGluPiA6cGx1Z2luIGxpc3QgIDwxPgogPT0+dGlua2VycG9wLnNlcnZlclthY3RpdmVdCi09PT50aW5rZXJwb3AuZ2VwaGkKID09PnRpbmtlcnBvcC51dGlsaXRpZXNbYWN0aXZlXQogPT0+dGlua2VycG9wLnN1Z2FyCiA9PT50aW5rZXJwb3AudGlua2VyZ3JhcGhbYWN0aXZlXQogZ3JlbWxpbj4gOnBsdWdpbiB1c2UgdGlua2VycG9wLnN1Z2FyICA8Mj4KID09PnRpbmtlcnBvcC5zdWdhciBhY3RpdmF0ZWQKLWdyZW1saW4+IDppbnN0YWxsIG9yZy5hcGFjaGUudGlua2VycG9wIG5lbzRqLWdyZW1saW4geC55LnogIDwzPgotPT0+bG9hZGVkOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AsIG5lbzRqLWdyZW1saW4sIHgueS56XQorZ3JlbWxpbj4gOmluc3RhbGwgb3JnLmFwYWNoZS50aW5rZXJwb3AgaGFkb29wLWdyZW1saW4geC55LnogIDwzPgorPT0+bG9hZGVkOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AsIGhhZG9vcC1ncmVtbGluLCB4Lnkuel0KIGdyZW1saW4+IDpwbHVnaW4gbGlzdCA8ND4KID09PnRpbmtlcnBvcC5zZXJ2ZXJbYWN0aXZlXQotPT0+dGlua2VycG9wLmdlcGhpCiA9PT50aW5rZXJwb3AudXRpbGl0aWVzW2FjdGl2ZV0KLT09PnRpbmtlcnBvcC5zdWdhcgorPT0+dGlua2VycG9wLnN1Z2FyW2FjdGl2ZV0KID09PnRpbmtlcnBvcC50aW5rZXJncmFwaFthY3RpdmVdCi09PT50aW5rZXJwb3AubmVvNGoKLWdyZW1saW4+IDpwbHVnaW4gdXNlIHRpbmtlcnBvcC5uZW80aiA8NT4KLT09PnRpbmtlcnBvcC5uZW80aiBhY3RpdmF0ZWQKKz09PnRpbmtlcnBvcC5oYWRvb3AKK2dyZW1saW4+IDpwbHVnaW4gdXNlIHRpbmtlcnBvcC5oYWRvb3AgPDU+Cis9PT50aW5rZXJwb3AuaGFkb29wIGFjdGl2YXRlZAogZ3JlbWxpbj4gOnBsdWdpbiBsaXN0IDw2PgogPT0+dGlua2VycG9wLnNlcnZlclthY3RpdmVdCi09PT50aW5rZXJwb3AuZ2VwaGkKID09PnRpbmtlcnBvcC5zdWdhclthY3RpdmVdCiA9PT50aW5rZXJwb3AudXRpbGl0aWVzW2FjdGl2ZV0KLT09PnRpbmtlcnBvcC5uZW80althY3RpdmVdCis9PT50aW5rZXJwb3AuaGFkb29wW2FjdGl2ZV0KID09PnRpbmtlcnBvcC50aW5rZXJncmFwaFthY3RpdmVdCiAtLS0tCiAKQEAgLTI5Niw5ICsyNTQsOSBAQAogPDI+IFRvIG1ha2UgYSBwbHVnaW4gImFjdGl2ZSIgZXhlY3V0ZSB0aGUgYDpwbHVnaW4gdXNlYCBjb21tYW5kIGFuZCBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLgogPDM+IFNvbWV0aW1lcyB0aGVyZSBhcmUgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHRoYXQgd291bGQgYmUgdXNlZnVsIHdpdGhpbiB0aGUgQ29uc29sZS4gIFRvIGJyaW5nIHRob3NlIGluLCBleGVjdXRlCiBgOmluc3RhbGxgIGFuZCBzcGVjaWZ5IHRoZSBNYXZlbiBjb29yZGluYXRlcyBmb3IgdGhlIGRlcGVuZGVuY3kuCi08ND4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgInRpbmtlcnBvcC5uZW80aiIgcGx1Z2luIGF2YWlsYWJsZSwgYnV0IGl0IGlzIG5vdCB5ZXQgImFjdGl2ZSIuCi08NT4gQWdhaW4sIHRvIHVzZSB0aGUgInRpbmtlcnBvcC5uZW80aiIgcGx1Z2luLCBpdCBtdXN0IGJlIG1hZGUgImFjdGl2ZSIgd2l0aCBgOnBsdWdpbiB1c2VgLgotPDY+IE5vdyB3aGVuIHRoZSBwbHVnaW4gbGlzdCBpcyBkaXNwbGF5ZWQsIHRoZSAidGlua2VycG9wLm5lbzRqIiBwbHVnaW4gaXMgZGlzcGxheWVkIGFzICJhY3RpdmUiLgorPDQ+IE5vdGUgdGhhdCB0aGVyZSBpcyBhICJ0aW5rZXJwb3AuaGFkb29wIiBwbHVnaW4gYXZhaWxhYmxlLCBidXQgaXQgaXMgbm90IHlldCAiYWN0aXZlIi4KKzw1PiBBZ2FpbiwgdG8gdXNlIHRoZSAidGlua2VycG9wLmhhZG9vcCIgcGx1Z2luLCBpdCBtdXN0IGJlIG1hZGUgImFjdGl2ZSIgd2l0aCBgOnBsdWdpbiB1c2VgLgorPDY+IE5vdyB3aGVuIHRoZSBwbHVnaW4gbGlzdCBpcyBkaXNwbGF5ZWQsIHRoZSAidGlua2VycG9wLmhhZG9vcCIgcGx1Z2luIGlzIGRpc3BsYXllZCBhcyAiYWN0aXZlIi4KIAogV0FSTklORzogUGx1Z2lucyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiBvZiB0aGUgR3JlbWxpbiBDb25zb2xlIChvciBHcmVtbGluIFNlcnZlcikgYmVpbmcgdXNlZC4gIEF0dGVtcHRzCiB0byB1c2UgaW5jb21wYXRpYmxlIHZlcnNpb25zIGNhbm5vdCBiZSBndWFyYW50ZWVkIHRvIHdvcmsuICBNb3Jlb3ZlciwgYmUgcHJlcGFyZWQgZm9yIGRlcGVuZGVuY3kgY29uZmxpY3RzIGluCkBAIC0zOTQsNyArMzUyLDcgQEAKIAogICAgICAgICAgXCwsLC8KICAgICAgICAgIChvIG8pCi0tLS0tLW9PT28tKDMpLW9PT28tLS0tLQorLS0tLS1vT09vLSg0KS1vT09vLS0tLS0KIHBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC5zZXJ2ZXIKIHBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC51dGlsaXRpZXMKIHBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC50aW5rZXJncmFwaApAQCAtNDI2LDcgKzM4NCw3IEBACiAKICAgICAgICAgIFwsLCwvCiAgICAgICAgICAobyBvKQotLS0tLS1vT09vLSgzKS1vT09vLS0tLS0KKy0tLS0tb09Pby0oNCktb09Pby0tLS0tCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3Auc2VydmVyCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgKQEAgLTQ2NCw4ICs0MjIsOCBAQAogTk9URTogUGxlYXNlIHNlZSB0aGUgbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyL1tQcm92aWRlciBEb2N1bWVudGF0aW9uXSBmb3IgaW5mb3JtYXRpb24KIG9uIGhvdyB0byBkZXZlbG9wIGEgZHJpdmVyIGZvciBHcmVtbGluIFNlcnZlci4KIAotQnkgZGVmYXVsdCwgY29tbXVuaWNhdGlvbiB3aXRoIEdyZW1saW4gU2VydmVyIG9jY3VycyBvdmVyIGxpbms6aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJTb2NrZXRbV2ViU29ja2V0XSBhbmQKLWV4cG9zZXMgYSBjdXN0b20gc3ViLXByb3RvY29sIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBzZXJ2ZXIuCitCeSBkZWZhdWx0LCBjb21tdW5pY2F0aW9uIHdpdGggR3JlbWxpbiBTZXJ2ZXIgb2NjdXJzIG92ZXIgSFRUUC8xLjEuIFRoZSBUaW5rZXJQb3AgSFRUUCBBUEkgaXMgZGVzY3JpYmVkIGluIHRoZQorbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNfaHR0cF9hcGlbSFRUUCBwcm92aWRlciBkb2N1bWVudGF0aW9uXS4KIAogV0FSTklORzogR3JlbWxpbiBTZXJ2ZXIgYWxsb3dzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHJlbW90ZWx5IHN1Ym1pdHRlZCAic2NyaXB0cyIgKGkuZS4gYXJiaXRyYXJ5IGNvZGUgc2VudCBieSBhIGNsaWVudAogdG8gdGhlIHNlcnZlcikuIERldmVsb3BlcnMgc2hvdWxkIGNvbnNpZGVyIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMgaW52b2x2ZWQgaW4gcnVubmluZyBHcmVtbGluIFNlcnZlciB3aXRob3V0IHRoZQpAQCAtNDg0LDcgKzQ0Miw3IEBACiBbSU5GT10gR3JlbWxpblNlcnZlcgogICAgICAgICAgXCwsLC8KICAgICAgICAgIChvIG8pCi0tLS0tLW9PT28tKDMpLW9PT28tLS0tLQorLS0tLS1vT09vLSg0KS1vT09vLS0tLS0KIAogW0lORk9dIEdyZW1saW5TZXJ2ZXIgLSBDb25maWd1cmluZyBHcmVtbGluIFNlcnZlciBmcm9tIGNvbmYvZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLnlhbWwKIFtJTkZPXSBNZXRyaWNNYW5hZ2VyIC0gQ29uZmlndXJlZCBNZXRyaWNzIFNsZjRqUmVwb3J0ZXIgY29uZmlndXJlZCB3aXRoIGludGVydmFsPTE4MDAwMG1zIGFuZCBsb2dnZXJOYW1lPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzJFNsZjRqUmVwb3J0ZXJNZXRyaWNzCkBAIC00OTMsMTcgKzQ1MSwxMyBAQAogW0lORk9dIFNlcnZlckdyZW1saW5FeGVjdXRvciAtIEluaXRpYWxpemVkIEdyZW1saW5FeGVjdXRvciBhbmQgcHJlcGFyaW5nIEdyZW1saW5TY3JpcHRFbmdpbmVzIGluc3RhbmNlcy4KIFtJTkZPXSBTZXJ2ZXJHcmVtbGluRXhlY3V0b3IgLSBJbml0aWFsaXplZCBncmVtbGluLWdyb292eSBHcmVtbGluU2NyaXB0RW5naW5lIGFuZCByZWdpc3RlcmVkIG1ldHJpY3MKIFtJTkZPXSBTZXJ2ZXJHcmVtbGluRXhlY3V0b3IgLSBBIEdyYXBoVHJhdmVyc2FsU291cmNlIGlzIG5vdyBib3VuZCB0byBbZ10gd2l0aCBncmFwaHRyYXZlcnNhbHNvdXJjZVt0aW5rZXJncmFwaFt2ZXJ0aWNlczowIGVkZ2VzOjBdLCBzdGFuZGFyZF0KLVtJTkZPXSBPcExvYWRlciAtIEFkZGluZyB0aGUgc3RhbmRhcmQgT3BQcm9jZXNzb3IuCi1bSU5GT10gT3BMb2FkZXIgLSBBZGRpbmcgdGhlIHNlc3Npb24gT3BQcm9jZXNzb3IuCi1bSU5GT10gT3BMb2FkZXIgLSBBZGRpbmcgdGhlIHRyYXZlcnNhbCBPcFByb2Nlc3Nvci4KIFtJTkZPXSBHcmVtbGluU2VydmVyIC0gRXhlY3V0aW5nIHN0YXJ0IHVwIExpZmVDeWNsZUhvb2sKIFtJTkZPXSBMb2dnZXIkaW5mbyAtIExvYWRpbmcgJ21vZGVybicgZ3JhcGggZGF0YS4KIFtJTkZPXSBHcmVtbGluU2VydmVyIC0gaWRsZUNvbm5lY3Rpb25UaW1lb3V0IHdhcyBzZXQgdG8gMCB3aGljaCByZXNvbHZlcyB0byAwIHNlY29uZHMgd2hlbiBjb25maWd1cmluZyB0aGlzIHZhbHVlIC0gdGhpcyBmZWF0dXJlIHdpbGwgYmUgZGlzYWJsZWQKIFtJTkZPXSBHcmVtbGluU2VydmVyIC0ga2VlcEFsaXZlSW50ZXJ2YWwgd2FzIHNldCB0byAwIHdoaWNoIHJlc29sdmVzIHRvIDAgc2Vjb25kcyB3aGVuIGNvbmZpZ3VyaW5nIHRoaXMgdmFsdWUgLSB0aGlzIGZlYXR1cmUgd2lsbCBiZSBkaXNhYmxlZAotW0lORk9dIEFic3RyYWN0Q2hhbm5lbGl6ZXIgLSBDb25maWd1cmVkIGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbiB3aXRoIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzCi1bSU5GT10gQWJzdHJhY3RDaGFubmVsaXplciAtIENvbmZpZ3VyZWQgYXBwbGljYXRpb24vanNvbiB3aXRoIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzCi1bSU5GT10gQWJzdHJhY3RDaGFubmVsaXplciAtIENvbmZpZ3VyZWQgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAgd2l0aCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMQotW0lORk9dIEFic3RyYWN0Q2hhbm5lbGl6ZXIgLSBDb25maWd1cmVkIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wLXN0cmluZ2Qgd2l0aCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMQorW0lORk9dIEFic3RyYWN0Q2hhbm5lbGl6ZXIgLSBDb25maWd1cmVkIGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbiB3aXRoIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0CitbSU5GT10gQWJzdHJhY3RDaGFubmVsaXplciAtIENvbmZpZ3VyZWQgYXBwbGljYXRpb24vanNvbiB3aXRoIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0CitbSU5GT10gQWJzdHJhY3RDaGFubmVsaXplciAtIENvbmZpZ3VyZWQgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAgd2l0aCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNAogW0lORk9dIEdyZW1saW5TZXJ2ZXIkMSAtIEdyZW1saW4gU2VydmVyIGNvbmZpZ3VyZWQgd2l0aCB3b3JrZXIgdGhyZWFkIHBvb2wgb2YgMSwgZ3JlbWxpbiBwb29sIG9mIDQgYW5kIGJvc3MgdGhyZWFkIHBvb2wgb2YgMS4KIFtJTkZPXSBHcmVtbGluU2VydmVyJDEgLSBDaGFubmVsIHN0YXJ0ZWQgYXQgcG9ydCA4MTgyLgogLS0tLQpAQCAtNTQ3LDggKzUwMSw4IEBACiBbW2Nvbm5lY3RpbmctdmlhLWRyaXZlcnNdXQogPT09IENvbm5lY3RpbmcgdmlhIERyaXZlcnMKIAotaW1hZ2U6cmV4c3Rlci1jb25uZWN0LnBuZ1t3aWR0aD0xODAsZmxvYXQ9cmlnaHRdIFRpbmtlclBvcCBvZmZlcnMgY2xpZW50LXNpZGUgZHJpdmVycyBmb3IgdGhlIEdyZW1saW4gU2VydmVyIHdlYnNvY2tldAotc3ViLXByb3RvY29sIGluIGEgdmFyaWV0eSBvZiBsYW5ndWFnZXM6CitpbWFnZTpyZXhzdGVyLWNvbm5lY3QucG5nW3dpZHRoPTE4MCxmbG9hdD1yaWdodF0gVGlua2VyUG9wIG9mZmVycyBjbGllbnQtc2lkZSBkcml2ZXJzIGZvciB0aGUgR3JlbWxpbiBTZXJ2ZXIgdGhhdAorY29tbXVuaWNhdGVzIHZpYSB0aGUgVGlua2VyUG9wIEhUVFAgQVBJIGluIGEgdmFyaWV0eSBvZiBsYW5ndWFnZXM6CiAKICogPDxncmVtbGluLWRvdG5ldCxDIz4+CiAqIDw8Z3JlbWxpbi1nbyxHbz4+CkBAIC01NTcsOSArNTExLDkgQEAKICogPDxncmVtbGluLXB5dGhvbixQeXRob24+PgogCiBUaGVzZSBkcml2ZXJzIHByb3ZpZGUgbWV0aG9kcyB0byBzZW5kIEdyZW1saW4gYmFzZWQgcmVxdWVzdHMgYW5kIGdldCBiYWNrIHRyYXZlcnNhbCByZXN1bHRzIGFzIGEgcmVzcG9uc2UuIFRoZSByZXF1ZXN0cwotbWF5IGJlIHNjcmlwdC1iYXNlZCBvciBieXRlY29kZS1iYXNlZC4gQXMgZGlzY3Vzc2VkIGVhcmxpZXIgaW4gdGhlIDw8Y29ubmVjdGluZy1ncmVtbGluLXNlcnZlcixpbnRyb2R1Y3Rpb24+PiB0aGUKLXJlY29tbWVuZGF0aW9uIGlzIHRvIHVzZSBieXRlY29kZS1iYXNlZCByZXF1ZXN0cy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzZW5kaW5nIHNjcmlwdHMgYW5kIHNlbmRpbmcgYnl0ZWNvZGUgYXJlCi1kZW1vbnN0cmF0ZWQgYmVsb3cgaW4gc29tZSBiYXNpYyBleGFtcGxlczoKK2FyZSBzY3JpcHQtYmFzZWQgb3IgdHJhdmVyc2FsLWJhc2VkLiBUcmF2ZXJzYWxzIGFyZSBpbnRlcm5hbGx5IHRyYW5zbGF0ZWQgaW50byBhIGBncmVtbGluLWxhbmdgIGNvbXBhdGlibGUgc2NyaXB0LgorVHJhdmVyc2FscyBhcmUgc3RpbGwgdGhlIHJlY29tbWVuZGVkIHdheSB0byBzZW5kIEdyZW1saW4gYXMgaXQgaGFzIGJldHRlciBpbnRlZ3JhdGlvbiB3aXRoIHlvdXIgbGFuZ3VhZ2Ugb2YgY2hvaWNlLiBUaGUKK2RpZmZlcmVuY2UgYmV0d2VlbiBzZW5kaW5nIHNjcmlwdHMgYW5kIHNlbmRpbmcgdHJhdmVyc2FscyBhcmUgZGVtb25zdHJhdGVkIGJlbG93IGluIHNvbWUgYmFzaWMgZXhhbXBsZXM6CiAKIFtzb3VyY2UsamF2YSx0YWJdCiAtLS0tCkBAIC01NzAsNyArNTI0LDcgQEAKIHBhcmFtcy5wdXQoIm5hbWUiLCJtYXJrbyIpOwogTGlzdDxSZXN1bHQ+IGxpc3QgPSBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLG5hbWUpLm91dCgna25vd3MnKSIsIHBhcmFtcykuYWxsKCkuZ2V0KCk7CiAKLS8vIGJ5dGVjb2RlCisvLyB0cmF2ZXJzYWwKIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoImxvY2FsaG9zdCIsODE4MiwiZyIpKTsKIExpc3Q8VmVydGV4PiBsaXN0ID0gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS5vdXQoImtub3dzIikudG9MaXN0KCk7CiAtLS0tCkBAIC01ODEsNyArNTM1LDcgQEAKIGRlZiBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKQogZGVmIGxpc3QgPSBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLG5hbWUpLm91dCgna25vd3MnKSIsIFtuYW1lOiAibWFya28iXSkuYWxsKCkuZ2V0KCk7CiAKLS8vIGJ5dGVjb2RlCisvLyB0cmF2ZXJzYWwKIGRlZiBnID0gdHJhdmVyc2FsKCkud2l0aChEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKCJsb2NhbGhvc3QiLDgxODIsImciKSkKIGRlZiBsaXN0ID0gZy5WKCkuaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKS5vdXQoJ2tub3dzJykudG9MaXN0KCkKIC0tLS0KQEAgLTU5Miw0MCArNTQ2LDQwIEBACiBbc291cmNlLGphdmFzY3JpcHRdCiAtLS0tCiAvLyBzY3JpcHQKLWNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoJ3dzOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW4nLCB7IHRyYXZlcnNhbFNvdXJjZTogImciIH0pOworY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgnaHR0cDovL2xvY2FsaG9zdDo0NTk0MC9ncmVtbGluJywgeyB0cmF2ZXJzYWxTb3VyY2U6ICJnIiB9KTsKIGNvbnN0IGNvbm4gPSBjbGllbnQub3BlbigpOwogY29uc3QgbGlzdCA9IGNvbm4uc3VibWl0KCJnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLG5hbWUpLm91dCgna25vd3MnKSIse25hbWU6ICdtYXJrbyd9KS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgeyAuLi4gfSk7CiAKLS8vIGJ5dGVjb2RlCi1jb25zdCBnID0gZ3RyYXZlcnNhbCgpLndpdGgobmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpKTsKKy8vIHRyYXZlcnNhbAorY29uc3QgZyA9IGd0cmF2ZXJzYWwoKS53aXRoKG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpKTsKIGNvbnN0IGxpc3QgPSBnLlYoKS5oYXMoInBlcnNvbiIsIm5hbWUiLCJtYXJrbyIpLm91dCgia25vd3MiKS50b0xpc3QoKTsKIC0tLS0KIFtzb3VyY2UscHl0aG9uXQogLS0tLQogIyBzY3JpcHQKLWNsaWVudCA9IENsaWVudCgnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgJ2cnKQorY2xpZW50ID0gQ2xpZW50KCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsICdnJykKIGxpc3QgPSBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLG5hbWUpLm91dCgna25vd3MnKSIseyduYW1lJzogJ21hcmtvJ30pLmFsbCgpCiAKLSMgYnl0ZWNvZGUKLWcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsJ2cnKSkKKyMgdHJhdmVyc2FsCitnID0gdHJhdmVyc2FsKCkud2l0aChEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsJ2cnKSkKIGxpc3QgPSBnLlYoKS5oYXMoInBlcnNvbiIsIm5hbWUiLCJtYXJrbyIpLm91dCgia25vd3MiKS50b0xpc3QoKQogLS0tLQogW3NvdXJjZSxnb10KIC0tLS0KIC8vIHNjcmlwdAotY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KCJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQorY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpCiByZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0V2l0aE9wdGlvbnMoImcuVigpLmhhcygncGVyc29uJywnbmFtZScsbmFtZSkub3V0KCdrbm93cycpIiwKIAluZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS5BZGRCaW5kaW5nKCJuYW1lIiwgIm1hcmtvIikuQ3JlYXRlKCkpCiByZXN1bHQsIGVyciA6PSByZXN1bHRTZXQuQWxsKCkKIAotLy8gYnl0ZWNvZGUKLXJlbW90ZSwgZXJyIDo9IE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24oIndzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpCisvLyB0cmF2ZXJzYWwKK3JlbW90ZSwgZXJyIDo9IE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24oImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKIGcgOj0gVHJhdmVyc2FsXygpLldpdGgocmVtb3RlKQogbGlzdCwgZXJyIDo9IGcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuVG9MaXN0KCkKIC0tLS0KIAotVGhlIGFkdmFudGFnZSBvZiBieXRlY29kZSBvdmVyIHNjcmlwdHMgc2hvdWxkIGJlIGFwcGFyZW50IGZyb20gdGhlIGFib3ZlIGV4YW1wbGVzLiBTY3JpcHRzIGFyZSBqdXN0IHN0cmluZ3MgdGhhdCBhcmUKLWVtYmVkZGVkIGluIGNvZGUgKGluIHRoZSBhYm92ZSBleGFtcGxlcywgdGhlIHN0cmluZ3MgYXJlIEdyb292eS1iYXNlZCkgd2hlcmVhcyBieXRlY29kZSBiYXNlZCByZXF1ZXN0cyBhcmUgdGhlbXNlbHZlcworVGhlIGFkdmFudGFnZSBvZiB0cmF2ZXJzYWxzIG92ZXIgc2NyaXB0cyBzaG91bGQgYmUgYXBwYXJlbnQgZnJvbSB0aGUgYWJvdmUgZXhhbXBsZXMuIFNjcmlwdHMgYXJlIGp1c3Qgc3RyaW5ncyB0aGF0IGFyZQorZW1iZWRkZWQgaW4gY29kZSAoaW4gdGhlIGFib3ZlIGV4YW1wbGVzLCB0aGUgc3RyaW5ncyBhcmUgR3Jvb3Z5LWJhc2VkKSB3aGVyZWFzIHRyYXZlcnNhbCBiYXNlZCByZXF1ZXN0cyBhcmUgdGhlbXNlbHZlcwogY29kZSB3cml0dGVuIGluIHRoZSBuYXRpdmUgbGFuZ3VhZ2Ugb2YgdXNlLiBPYnZpb3VzbHksIHRoZSBhZHZhbnRhZ2Ugb2YgdGhlIEdyZW1saW4gYmVpbmcgYWN0dWFsIGNvZGUgaXMgdGhhdCB0aGVyZQogYXJlIGNoZWNrcyAoZS5nLiBjb21waWxlLXRpbWUsIGF1dG8tY29tcGxldGUgYW5kIG90aGVyIElERSBzdXBwb3J0LCBsYW5ndWFnZSBsZXZlbCBjaGVja3MsIGV0Yy4pIHRoYXQgaGVscCB2YWxpZGF0ZSB0aGUKIEdyZW1saW4gZHVyaW5nIHRoZSBkZXZlbG9wbWVudCBwcm9jZXNzLgpAQCAtNjM2LDcgKzU5MCw3IEBACiBwcm9ibGVtcyBpbmNsdWRlOgogCiAqIENvbm5lY3RpbmcgdG8gYSBncmFwaCB0aGF0IHJlcXVpcmVzIGN1c3RvbSBzZXJpYWxpemVycywgc3VjaCBhcyB0aGUgb25lcyBKYW51c0dyYXBoIHByb3ZpZGVzIGZvciBpdHMgcmVsYXRpb24KLWlkZW50aWZpZXIuIEFsd2F5cyBiZSB0YWtlIHRpbWUgdG8gZ2V0IHRvIGtub3cgdGhlIGdyYXBoIGRhdGFiYXNlIHRoYXQncyBiZWVuIGNob3NlbiB0byBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIGN1c3RvbWVyCitpZGVudGlmaWVyLiBBbHdheXMgdGFrZSB0aW1lIHRvIGdldCB0byBrbm93IHRoZSBncmFwaCBkYXRhYmFzZSB0aGF0J3MgYmVlbiBjaG9zZW4gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBjdXN0b20KIHNlcmlhbGl6ZXJzIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIHRvIHRoZSBzZXJ2ZXIgb3IgdGhlIGRyaXZlci4KICogRHJpdmVyIHZlcnNpb25zIHRoYXQgZG9uJ3QgbWF0Y2ggc2VydmVyIHZlcnNpb25zIGNhbiBzb21ldGltZXMgY3JlYXRlIHNjZW5hcmlvcyB3aGVyZSBzZXJpYWxpemF0aW9uIGZhaWx1cmVzIHdpbGwKIHByZXNlbnQgdGhlbXNlbHZlcy4gVGlua2VyUG9wIHR5cGljYWxseSBkb2VzIHRoZSBtb3N0IHRlc3Rpbmcgb24gZHJpdmVycyBhbmQgc2VydmVycyBvZiB0aGUgc2FtZSB2ZXJzaW9uIGFuZCB0aGVyZWZvcmUKQEAgLTY1NCw3ICs2MDgsNyBAQAogW1tjb25uZWN0aW5nLXZpYS1jb25zb2xlXV0KID09PSBDb25uZWN0aW5nIHZpYSBDb25zb2xlCiAKLVdpdGggR3JlbWxpbiBTZXJ2ZXIgcnVubmluZyBpdCBpcyBub3cgcG9zc2libGUgdG8gaXNzdWUgc29tZSBzY3JpcHRzIHRvIGl0IGZvciBwcm9jZXNzaW5nLiAgU3RhcnQgR3JlbWxpbiBDb25zb2xlIGFzCitHcmVtbGluIENvbnNvbGUgY2FuIGJlIHVzZWQgdG8gc2VuZCByZW1vdGUgdHJhdmVyc2FscyB0byBhIHJ1bm5pbmcgR3JlbWxpbiBTZXJ2ZXIuIFN0YXJ0IEdyZW1saW4gQ29uc29sZSBhcwogZm9sbG93czoKIAogW3NvdXJjZSx0ZXh0XQpAQCAtNjYzLDI0MiArNjE3LDgxIEBACiAKICAgICAgICAgIFwsLCwvCiAgICAgICAgICAobyBvKQotLS0tLS1vT09vLSgzKS1vT09vLS0tLS0KKy0tLS0tb09Pby0oNCktb09Pby0tLS0tCiBncmVtbGluPgogLS0tLQogCi1UaGUgY29uc29sZSBoYXMgdGhlIG5vdGlvbiBvZiBhICJyZW1vdGUiLCB3aGljaCByZXByZXNlbnRzIGEgcGxhY2UgYSBzY3JpcHQgd2lsbCBiZSBzZW50IGZyb20gdGhlIGNvbnNvbGUgdG8gYmUKLWV2YWx1YXRlZCBlbHNld2hlcmUgaW4gc29tZSBvdGhlciBjb250ZXh0IChlLmcuIEdyZW1saW4gU2VydmVyLCBIYWRvb3AsIGV0Yy4pLiAgVG8gY3JlYXRlIGEgcmVtb3RlIGluIHRoZSBjb25zb2xlLAotZG8gdGhlIGZvbGxvd2luZzoKK1JlbW90ZSB0cmF2ZXJzYWxzIGNhbiB0aGVuIGJlIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3MuCiAKIFtncmVtbGluLWdyb292eV0KIC0tLS0KLTpyZW1vdGUgY29ubmVjdCB0aW5rZXJwb3Auc2VydmVyIGNvbmYvcmVtb3RlLnlhbWwKK2cgPSB0cmF2ZXJzYWwoKS53aXRoKCdjb25mL3JlbW90ZS1ncmFwaC5wcm9wZXJ0aWVzJykKKworZy5WKCkudmFsdWVzKCduYW1lJykKK2cuVigpLmhhcygnbmFtZScsJ21hcmtvJykub3V0KCdjcmVhdGVkJykudmFsdWVzKCduYW1lJykKK2cuRSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpCisKK2cuY2xvc2UoKQogLS0tLQogCi1UaGUgYDpyZW1vdGVgIGNvbW1hbmQgc2hvd24gYWJvdmUgZGlzcGxheXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSByZW1vdGUgY29ubmVjdGlvbi4gIFRoaXMgY29tbWFuZCBjYW4gYWxzbyBiZQotdXNlZCB0byBjb25maWd1cmUgYSBuZXcgY29ubmVjdGlvbiBhbmQgY2hhbmdlIG90aGVyIHJlbGF0ZWQgc2V0dGluZ3MuICBUbyBhY3R1YWxseSBzZW5kIGEgc2NyaXB0IHRvIHRoZSBzZXJ2ZXIgYQotZGlmZmVyZW50IGNvbW1hbmQgaXMgcmVxdWlyZWQ6CitPbmUgY2FuIGFsc28gY29uc3RydWN0IHJlbW90ZSB0cmF2ZXJzYWwgc291cmNlIHZpYSBEUkMsIGFzIHdlbGwgYXMgdmlhIGNsaWVudCB0byBzdWJtaXQgc2NyaXB0cy4KIAotW2dyZW1saW4tZ3Jvb3Z5XQorW3NvdXJjZSwgdGV4dF0KIC0tLS0KLTo+IGcuVigpLnZhbHVlcygnbmFtZScpCi06PiBnLlYoKS5oYXMoJ25hbWUnLCdtYXJrbycpLm91dCgnY3JlYXRlZCcpLnZhbHVlcygnbmFtZScpCi06PiBnLkUoKS5sYWJlbCgpLmdyb3VwQ291bnQoKQotcmVzdWx0Ci06cmVtb3RlIGNsb3NlCisvLyB3aXRoIERSQworZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZygibG9jYWxob3N0Iiw4MTgyLCJnIikpCitnLlYoKS5jb3VudCgpCisKKy8vIHdpdGggY2xpZW50CitjbGllbnQgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKS5wb3J0KDgxODIpLmNyZWF0ZSgpLmNvbm5lY3QoKQorY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpCiAtLS0tCiAKLVRoZSBgOj5gIGNvbW1hbmQsIHdoaWNoIGlzIGEgc2hvcnRoYW5kIGZvciBgOnN1Ym1pdGAsIHNlbmRzIHRoZSBzY3JpcHQgdG8gdGhlIHNlcnZlciB0byBleGVjdXRlIHRoZXJlLiAgUmVzdWx0cyBhcmUKLXdyYXBwZWQgaW4gYW4gYFJlc3VsdGAgb2JqZWN0IHdoaWNoIGlzIGEganVzdCBhIGhvbGRlciBmb3IgZWFjaCBpbmRpdmlkdWFsIHJlc3VsdC4gIFRoZSBgY2xhc3NgIHNob3dzIHRoZSBkYXRhIHR5cGUKLWZvciB0aGUgY29udGFpbmluZyB2YWx1ZS4gIE5vdGUgdGhhdCB0aGUgbGFzdCBzY3JpcHQgc2VudCB3YXMgc3VwcG9zZWQgdG8gcmV0dXJuIGEgYE1hcGAsIGJ1dCBpdHMgYGNsYXNzYCBpcwotYGphdmEubGFuZy5TdHJpbmdgLiAgQnkgZGVmYXVsdCwgdGhlIGNvbm5lY3Rpb24gaXMgY29uZmlndXJlZCB0byBvbmx5IHJldHVybiB0ZXh0IHJlc3VsdHMuICBJbiBvdGhlciB3b3JkcywKLUdyZW1saW4gU2VydmVyIGlzIHVzaW5nIGB0b1N0cmluZ2AgdG8gc2VyaWFsaXplIGFsbCByZXN1bHRzIGJhY2sgdG8gdGhlIGNvbnNvbGUuICBUaGlzIGVuYWJsZXMgdmlydHVhbGx5IGFueQotb2JqZWN0IG9uIHRoZSBzZXJ2ZXIgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGNvbnNvbGUsIGJ1dCBpdCBkb2Vzbid0IGFsbG93IHRoZSBvcHBvcnR1bml0eSB0byB3b3JrIHdpdGggdGhpcyBkYXRhCi1pbiBhbnkgd2F5IGluIHRoZSBjb25zb2xlIGl0c2VsZi4gIEEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGA6cmVtb3RlYCBpcyByZXF1aXJlZCB0byBnZXQgdGhlIHJlc3VsdHMgYmFjawotYXMgIm9iamVjdHMiOgotCi1bZ3JlbWxpbi1ncm9vdnldCi0tLS0tCi06cmVtb3RlIGNvbm5lY3QgdGlua2VycG9wLnNlcnZlciBjb25mL3JlbW90ZS1vYmplY3RzLnlhbWwgPDE+Ci06cmVtb3RlIGxpc3QgPDI+Ci06PiBnLkUoKS5sYWJlbCgpLmdyb3VwQ291bnQoKSA8Mz4KLW0gPSByZXN1bHRbMF0ub2JqZWN0IDw0PgotbS5zb3J0IHtpdC52YWx1ZX0KLXNjcmlwdCA9ICIiIgotICAgICAgICAgZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLgotICAgICAgICAgICBvdXQoJ2tub3dzJykuCi0gICAgICAgICAgIG91dCgnY3JlYXRlZCcpLgotICAgICAgICAgICBncm91cCgpLgotICAgICAgICAgICAgIGJ5KCduYW1lJykKLSAgICAgICAgICIiIgotOj4gQHNjcmlwdCAgIDw1PgotOnJlbW90ZSBjbG9zZQotLS0tLQotCi08MT4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc3BlY2lmaWVzIHRoYXQgcmVzdWx0cyBzaG91bGQgYmUgZGVzZXJpYWxpemVkIGJhY2sgaW50byBhbiBgT2JqZWN0YCBpbiB0aGUgY29uc29sZSB3aXRoCi10aGUgY2F2ZWF0IGJlaW5nIHRoYXQgdGhlIHNlcnZlciBhbmQgY29uc29sZSBib3RoIGtub3cgaG93IHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgdGhlIHJlc3VsdCB0byBiZSByZXR1cm5lZC4KLTwyPiBUaGVyZSBhcmUgbm93IHR3byBjb25maWd1cmVkIHJlbW90ZSBjb25uZWN0aW9ucy4gIFRoZSBvbmUgbWFya2VkIGJ5IGFuIGFzdGVyaXNrIGlzIHRoZSBvbmUgdGhhdCB3YXMganVzdCBjcmVhdGVkCi1hbmQgZGVub3RlcyB0aGUgY3VycmVudCBvbmUgdGhhdCBgOnN1Ym1pdGAgd2lsbCByZWFjdCB0by4KLTwzPiBXaGVuIHRoZSBzY3JpcHQgaXMgZXhlY3V0ZWQgYWdhaW4sIHRoZSBgY2xhc3NgIGlzIG5vIGxvbmdlciBzaG93biB0byBiZSBhIGBqYXZhLmxhbmcuU3RyaW5nYC4gIEl0IGlzIGluc3RlYWQgYSBgamF2YS51dGlsLkhhc2hNYXBgLgotPDQ+IFRoZSBsYXN0IHJlc3VsdCBvZiBhIHJlbW90ZSBzY3JpcHQgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgcmVzZXJ2ZWQgdmFyaWFibGUgYHJlc3VsdGAsIHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8KLXRoZSBgUmVzdWx0YCBhbmQgYnkgdmlydHVlIG9mIHRoYXQsIHRoZSBgTWFwYCBpdHNlbGYuCi08NT4gSWYgdGhlIHN1Ym1pc3Npb24gcmVxdWlyZXMgbXVsdGlwbGUtbGluZXMgdG8gZXhwcmVzcywgdGhlbiBhIG11bHRpLWxpbmUgc3RyaW5nIGNhbiBiZSBjcmVhdGVkLiBUaGUgYDo+YCBjb21tYW5kCi1yZWFsaXplcyB0aGF0IHRoZSB1c2VyIGlzIHJlZmVyZW5jaW5nIGEgdmFyaWFibGUgdmlhIGBAYCBhbmQgc3VibWl0cyB0aGUgc3RyaW5nIHNjcmlwdC4KLQotVElQOiBJbiBHcm9vdnksIGAiIiIgdGV4dCAiIiJgIGlzIGEgY29udmVuaWVudCB3YXkgdG8gY3JlYXRlIGEgbXVsdGktbGluZSBzdHJpbmcgYW5kIHdvcmtzIHdlbGwgaW4gY29uY2VydCB3aXRoCi1gOj4gQHZhcmlhYmxlYC4gTm90ZSB0aGF0IHRoaXMgbW9kZWwgb2Ygc3VibWl0dGluZyBhIHN0cmluZyB2YXJpYWJsZSB3b3JrcyBmb3IgYWxsIGA6PmAgYmFzZWQgcGx1Z2lucywgbm90IGp1c3QgR3JlbWxpbiBTZXJ2ZXIuCi0KLVdBUk5JTkc6IE5vdCBhbGwgdmFsdWVzIHRoYXQgY2FuIGJlIHJldHVybmVkIGZyb20gYSBHcmVtbGluIHNjcmlwdCBlbmQgdXAgYmVpbmcgc2VyaWFsaXphYmxlLiAgRm9yIGV4YW1wbGUsCi1zdWJtaXR0aW5nIGA6PiBncmFwaGAgd2lsbCByZXR1cm4gYSBgR3JhcGhgIGluc3RhbmNlIGFuZCBpbiBtb3N0IGNhc2VzIHRob3NlIGFyZSBub3Qgc2VyaWFsaXphYmxlIGJ5IEdyZW1saW4gU2VydmVyCi1hbmQgd2lsbCByZXR1cm4gYSBzZXJpYWxpemF0aW9uIGVycm9yLiAgSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgYFRpbmtlckdyYXBoYCwgYXMgYSBjb252ZW5pZW5jZSBmb3Igc2hpcHBpbmcgYXJvdW5kCi1zbWFsbCBzdWItZ3JhcGhzLCBpcyBzZXJpYWxpemFibGUgZnJvbSBHcmVtbGluIFNlcnZlci4KLQotVGhlIGFsdGVybmF0aXZlIHN5bnRheCB0byBjb25uZWN0aW5nIGFsbG93cyBmb3IgdGhlIGBDbHVzdGVyYCB0byBiZSB1c2VyIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGluIHRoZSBjb25zb2xlIGFzCi1vcHBvc2VkIHRvIHNpbXBseSBwcm92aWRpbmcgYSBzdGF0aWMgWUFNTCBmaWxlLgotCi1bZ3JlbWxpbi1ncm9vdnldCi0tLS0tCi1jbHVzdGVyID0gQ2x1c3Rlci5vcGVuKCkKLTpyZW1vdGUgY29ubmVjdCB0aW5rZXJwb3Auc2VydmVyIGNsdXN0ZXIKLS0tLS0KLQotVGhlIEdyZW1saW4gU2VydmVyIGA6cmVtb3RlIGNvbmZpZ2AgY29tbWFuZCBmb3IgdGhlIGRyaXZlciBoYXMgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6Ci0KLVt3aWR0aD0iMTAwJSIsY29scz0iMywxMGEiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18Q29tbWFuZCB8RGVzY3JpcHRpb24KLXxhbGlhcyB8Ci1bd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAiLG9wdGlvbnM9ImhlYWRlciJdCi0hPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0hT3B0aW9uICFEZXNjcmlwdGlvbgotISBfcGFpcnNfICFBIHNldCBvZiBrZXkvdmFsdWUgYWxpYXMvYmluZGluZyBwYWlycyB0byBhcHBseSB0byByZXF1ZXN0cy4KLSFgcmVzZXRgICFDbGVhcnMgYW55IGFsaWFzZXMgdGhhdCB3ZXJlIHN1cHBsaWVkIGluIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIG9mIHRoZSByZW1vdGUuCi0hYHNob3dgICFTaG93cyB0aGUgY3VycmVudCBzZXQgb2YgYWxpYXNlcyB3aGljaCBpcyByZXR1cm5lZCBhcyBhIGBNYXBgCi0hPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18dGltZW91dCB8U3BlY2lmaWVzIHRoZSBsZW5ndGggb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhlIENvbnNvbGUgd2lsbCB3YWl0IGZvciBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4gU3BlY2lmeQotIm5vbmUiIHRvIGhhdmUgbm8gdGltZW91dC4gQnkgZGVmYXVsdCwgdGhpcyBzZXR0aW5nIHVzZXMgIm5vbmUiLgotfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1bW2NvbnNvbGUtYWxpYXNlc11dCi09PT09IEFsaWFzZXMKLQotVGhlIGBhbGlhc2AgY29uZmlndXJhdGlvbiBjb21tYW5kIGZvciB0aGUgR3JlbWxpbiBTZXJ2ZXIgYDpyZW1vdGVgIGNhbiBiZSB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGVyZSBhcmUKLW11bHRpcGxlIGBHcmFwaGAgb3IgYFRyYXZlcnNhbFNvdXJjZWAgaW5zdGFuY2VzIG9uIHRoZSBzZXJ2ZXIsIGFzIGl0IGJlY29tZXMgcG9zc2libGUgdG8gcmVuYW1lIHRoZW0gZnJvbSB0aGUgY2xpZW50Ci1mb3IgcHVycG9zZXMgb2YgZXhlY3V0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHNjcmlwdC4gIFRoZXJlZm9yZSwgaXQgYmVjb21lcyBwb3NzaWJsZSB0byBzdWJtaXQgY29tbWFuZHMgdGhpcyB3YXk6Ci0KLVtncmVtbGluLWdyb292eV0KLS0tLS0KLTpyZW1vdGUgY29ubmVjdCB0aW5rZXJwb3Auc2VydmVyIGNvbmYvcmVtb3RlLW9iamVjdHMueWFtbAotOnJlbW90ZSBjb25maWcgYWxpYXMgeCBnCi06PiB4LkUoKS5sYWJlbCgpLmdyb3VwQ291bnQoKQotOnJlbW90ZSBjbG9zZQotLS0tLQotCi1bW2NvbnNvbGUtc2Vzc2lvbnNdXQotPT09PSBTZXNzaW9ucwotCi1BIGA6cmVtb3RlYCBjcmVhdGVkIGluIHRoZSBmb2xsb3dpbmcgZmFzaGlvbiB3aWxsIGJlICJzZXNzaW9ubGVzcyIsIG1lYW5pbmcgZWFjaCBzY3JpcHQgaXNzdWVkIHRvIHRoZSBzZXJ2ZXIgd2l0aAotYDo+YCB3aWxsIGJlIGVuY2FzZWQgaW4gYSB0cmFuc2FjdGlvbiBhbmQgbm8gc3RhdGUgd2lsbCBiZSBtYWludGFpbmVkIGZyb20gb25lIHJlcXVlc3QgdG8gdGhlIG5leHQuCi0KLVtzb3VyY2UsZ3Jvb3Z5XQotLS0tLQotZ3JlbWxpbj4gOnJlbW90ZSBjb25uZWN0IHRpbmtlcnBvcC5zZXJ2ZXIgY29uZi9yZW1vdGUtb2JqZWN0cy55YW1sCi09PT5Db25maWd1cmVkIGxvY2FsaG9zdC8xMjcuMC4wLjE6ODE4MgotLS0tLQotCi1JbiBvdGhlciB3b3JkcywgdGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBjb21taXR0ZWQgKG9yIHJvbGxlZGJhY2sgb24gZXJyb3IpIGFuZCBhbnkgdmFyaWFibGVzIGRlY2xhcmVkCi1pbiB0aGF0IHNjcmlwdCB3aWxsIGJlIGZvcmdvdHRlbiBmb3IgdGhlIG5leHQgcmVxdWVzdC4gU2VlIHRoZSBzZWN0aW9uIG9uIDw8c2Vzc2lvbnMsICJDb25zaWRlcmluZyBTZXNzaW9ucyI+PgotZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhhdCB0b3BpYy4KLQotVG8gZW5hYmxlIHRoZSByZW1vdGUgdG8gY29ubmVjdCB3aXRoIGEgc2Vzc2lvbiB0aGUgYGNvbm5lY3RgIGFyZ3VtZW50IHRha2VzIGFub3RoZXIgYXJndW1lbnQgYXMgZm9sbG93czoKLQotW2dyZW1saW4tZ3Jvb3Z5XQotLS0tLQotOnJlbW90ZSBjb25uZWN0IHRpbmtlcnBvcC5zZXJ2ZXIgY29uZi9yZW1vdGUueWFtbCBzZXNzaW9uCi06PiB4ID0gMQotOj4geSA9IDIKLTo+IHggKyB5Ci06cmVtb3RlIGNsb3NlCi0tLS0tCi0KLVdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYSBzZXNzaW9uIGdldHMgY3JlYXRlZCB3aXRoIGEgcmFuZG9tIFVVSUQgZm9yIGEgc2Vzc2lvbiBpZGVudGlmaWVyLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvCi1hc3NpZ24gYSBjdXN0b20gc2Vzc2lvbiBpZGVudGlmaWVyIGJ5IGFkZGluZyBpdCBhcyB0aGUgbGFzdCBhcmd1bWVudCB0byBgOnJlbW90ZWAgY29tbWFuZCBhYm92ZS4gVGhlcmUgaXMgYWxzbyB0aGUKLW9wdGlvbiB0byByZXBsYWNlICJzZXNzaW9uIiB3aXRoICJzZXNzaW9uLW1hbmFnZWQiIHRvIGNyZWF0ZSBhIHNlc3Npb24gdGhhdCB3aWxsIGF1dG8tbWFuYWdlIHRyYW5zYWN0aW9ucyAoaS5lLiBlYWNoCi1yZXF1ZXN0IHdpbGwgb2NjdXIgd2l0aGluIHRoZSBib3VuZHMgb2YgYSB0cmFuc2FjdGlvbikuIEluIHRoaXMgd2F5LCB0aGUgc3RhdGUgb2YgYm91bmQgdmFyaWFibGVzIGJldHdlZW4gcmVxdWVzdHMgYXJlCi1tYWludGFpbmVkLCBidXQgdGhlIG5lZWQgdG8gbWFudWFsbHkgbWFuYWdlZCB0aGUgdHJhbnNhY3Rpb25hbCBzY29wZSBvZiB0aGUgZ3JhcGggaXMgbm8gbG9uZ2VyIHJlcXVpcmVkLgotCi1bW2NvbnNvbGUtcmVtb3RlLWNvbnNvbGVdXQotPT09PSBSZW1vdGUgQ29uc29sZQotCi1QcmV2aW91cyBleGFtcGxlcyBoYXZlIHNob3duIHVzYWdlIG9mIHRoZSBgOj5gIGNvbW1hbmQgdG8gc2VuZCBzY3JpcHRzIHRvIEdyZW1saW4gU2VydmVyLiBUaGUgR3JlbWxpbiBDb25zb2xlIGFsc28KLXN1cHBvcnRzIGFuIGFkZGl0aW9uYWwgbWV0aG9kIGZvciBkb2luZyB0aGlzIHdoaWNoIGNhbiBiZSBtb3JlIGNvbnZlbmllbnQgd2hlbiB0aGUgaW50ZW50aW9uIGlzIHRvIGV4Y2x1c2l2ZWx5Ci13b3JrIHdpdGggYSByZW1vdGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyLgotCi1bZ3JlbWxpbi1ncm9vdnldCi0tLS0tCi06cmVtb3RlIGNvbm5lY3QgdGlua2VycG9wLnNlcnZlciBjb25mL3JlbW90ZS55YW1sIHNlc3Npb24KLTpyZW1vdGUgY29uc29sZQoteCA9IDEKLXkgPSAyCi14ICsgeQotOnJlbW90ZSBjb25zb2xlCi06cmVtb3RlIGNsb3NlCi0tLS0tCi0KLUluIHRoZSBhYm92ZSBleGFtcGxlLCB0aGUgYDpyZW1vdGUgY29uc29sZWAgY29tbWFuZCBpcyBleGVjdXRlZC4gSXQgcGxhY2VzIHRoZSBjb25zb2xlIGluIGEgc3RhdGUgd2hlcmUgdGhlIGA6PmAgaXMKLW5vIGxvbmdlciByZXF1aXJlZC4gRWFjaCBzY3JpcHQgbGluZSBpcyBhY3R1YWxseSBhdXRvbWF0aWNhbGx5IHN1Ym1pdHRlZCB0byBHcmVtbGluIFNlcnZlciBmb3IgZXZhbHVhdGlvbi4gVGhlCi12YXJpYWJsZXMgYHhgIGFuZCBgeWAgdGhhdCB3ZXJlIGRlZmluZWQgYWN0dWFsbHkgZG9uJ3QgZXhpc3QgbG9jYWxseSAtIHRoZXkgb25seSBleGlzdCBvbiB0aGUgc2VydmVyISBJbiB0aGlzIHNlbnNlLAotcHV0dGluZyB0aGUgY29uc29sZSBpbiB0aGlzIG1vZGUgaXMgYmFzaWNhbGx5IGxpa2UgY3JlYXRpbmcgYSB3aW5kb3cgdG8gYSBzZXNzaW9uIG9uIEdyZW1saW4gU2VydmVyLgotCi1USVA6IFdoZW4gdXNpbmcgYDpyZW1vdGUgY29uc29sZWAgdGhlcmUgaXMgbm90IG11Y2ggcG9pbnQgdG8gdXNpbmcgYSBjb25maWd1cmF0aW9uIHRoYXQgdXNlcyBhIHNlcmlhbGl6ZXIgdGhhdCByZXR1cm5zCi1hY3R1YWwgZGF0YS4gSW4gb3RoZXIgd29yZHMsIHVzaW5nIGEgY29uZmlndXJhdGlvbiBsaWtlIHRoZSBvbmUgaW5zaWRlIG9mIGBjb25mL3JlbW90ZS1vYmplY3RzLnlhbWxgIGlzbid0IHR5cGljYWxseQotdXNlZnVsIGFzIGluIHRoaXMgbW9kZSB0aGUgcmVzdWx0IHdpbGwgb25seSBldmVyIGJlIGRpc3BsYXllZCBidXQgbm90IHVzZWQuIFVzaW5nIGEgc2VyaWFsaXplciBjb25maWd1cmF0aW9uIGxpa2UKLXRoZSBvbmUgaW4gYGNvbmYvcmVtb3RlLnlhbWxgIHNob3VsZCBwZXJmb3JtIGJldHRlci4KLQotTk9URTogQ29uc29sZSBjb21tYW5kcywgdGhvc2UgdGhhdCBiZWdpbiB3aXRoIGEgY29sb24gKGUuZy4gYDp4YCwgYDpyZW1vdGVgKSBkbyBub3QgZXhlY3V0ZSByZW1vdGVseSB3aGVuIGluIHRoaXMgbW9kZS4KLVRoZXkgYXJlIGFsbCBzdGlsbCBldmFsdWF0ZWQgbG9jYWxseS4KIAogW1tjb25uZWN0aW5nLXZpYS1odHRwXV0KID09PSBDb25uZWN0aW5nIHZpYSBIVFRQCiAKLWltYWdlOmdyZW1saW4tcmV4c3Rlci5wbmdbd2lkdGg9MjI1LGZsb2F0PWxlZnRdIFdoaWxlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBHcmVtbGluIFNlcnZlciBpcyB0byBwcm92aWRlIGEKLVdlYlNvY2tldC1iYXNlZCBjb25uZWN0aW9uLCBpdCBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvIHN1cHBvcnQgcGxhaW4gSFRUUCB3ZWIgc2VydmljZS4KLVRoZSBIVFRQIGVuZHBvaW50IHByb3ZpZGVzIGZvciBhIGNvbW11bmljYXRpb24gcHJvdG9jb2wgZmFtaWxpYXIgdG8gbW9zdCBkZXZlbG9wZXJzLCB3aXRoIGEgd2lkZSBzdXBwb3J0IG9mCi1wcm9ncmFtbWluZyBsYW5ndWFnZXMsIHRvb2xzIGFuZCBsaWJyYXJpZXMgZm9yIGFjY2Vzc2luZyBpdC4gIEFzIGEgcmVzdWx0LCBIVFRQIHByb3ZpZGVzIGEgZmFzdCB3YXkgdG8gZ2V0IHN0YXJ0ZWQKLXdpdGggR3JlbWxpbiBTZXJ2ZXIuICAgSXQgYWxzbyBtYXkgcmVwcmVzZW50IGFuIGVhc2llciB1cGdyYWRlIHBhdGggZnJvbSBsaW5rOmh0dHBzOi8vZ2l0aHViLmNvbS90aW5rZXJwb3AvcmV4c3RlcltSZXhzdGVyXQotYXMgdGhlIEFQSSBmb3IgdGhlIGVuZHBvaW50IGlzIHZlcnkgc2ltaWxhciB0byBSZXhzdGVyJ3MgbGluazpodHRwczovL2dpdGh1Yi5jb20vdGlua2VycG9wL3JleHN0ZXIvd2lraS9HcmVtbGluLUV4dGVuc2lvbltHcmVtbGluIEV4dGVuc2lvbl0uCitpbWFnZTpncmVtbGluLXJleHN0ZXIucG5nW3dpZHRoPTIyNSxmbG9hdD1sZWZ0XSBUaGUgSFRUUCBlbmRwb2ludCBwcm92aWRlcyBmb3IgYSBjb21tdW5pY2F0aW9uIHByb3RvY29sIGZhbWlsaWFyIHRvCittb3N0IGRldmVsb3BlcnMsIHdpdGggYSB3aWRlIHN1cHBvcnQgb2YgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzLCB0b29scyBhbmQgbGlicmFyaWVzIGZvciBhY2Nlc3NpbmcgaXQuICBBcyBhIHJlc3VsdCwgSFRUUAorcHJvdmlkZXMgYSBmYXN0IHdheSB0byBnZXQgc3RhcnRlZCB3aXRoIEdyZW1saW4gU2VydmVyLgogCi1JTVBPUlRBTlQ6IFRpbmtlclBvcCBwcm92aWRlcyBhbmQgc3VwcG9ydHMgdGhpcyBIVFRQIGVuZHBvaW50IGFzIGEgY29udmVuaWVuY2UgYW5kIGZvciBsZWdhY3kgcmVhc29ucywgYnV0IHVzZXJzIHNob3VsZAotcHJlZmVyIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBvZiBieXRjb2RlIGJhc2VkIHJlcXVlc3RzIGFzIGRlc2NyaWJlZCBpbiA8PGNvbm5lY3RpbmctZ3JlbWxpbixDb25uZWN0aW5nIEdyZW1saW4+Pgotc2VjdGlvbi4KK0dyZW1saW4gU2VydmVyIGltcGxlbWVudHMgdGhlIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L2Rldi9wcm92aWRlci8jX2h0dHBfYXBpW1RpbmtlclBvcCBIVFRQIEFQSV0uCitJdCBwcm92aWRlcyBhIHNpbmdsZSBlbmRwb2ludCB3aGljaCBhbGxvd3MgZm9yIHRoZSBzdWJtaXNzaW9uIG9mIGEgR3JlbWxpbiBzY3JpcHQgYXMgYSByZXF1ZXN0LiAgRm9yIGVhY2ggcmVxdWVzdCwgaXQKK3JldHVybnMgYSByZXNwb25zZSBjb250YWluaW5nIHRoZSBzZXJpYWxpemVkIHJlc3VsdHMgb2YgdGhhdCBzY3JpcHQuCiAKLUdyZW1saW4gU2VydmVyIHByb3ZpZGVzIGZvciBhIHNpbmdsZSBIVFRQIGVuZHBvaW50IC0gYSBHcmVtbGluIGV2YWx1YXRvciAtIHdoaWNoIGFsbG93cyB0aGUgc3VibWlzc2lvbiBvZiBhIEdyZW1saW4KLXNjcmlwdCBhcyBhIHJlcXVlc3QuICBGb3IgZWFjaCByZXF1ZXN0LCBpdCByZXR1cm5zIGEgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgc2VyaWFsaXplZCByZXN1bHRzIG9mIHRoYXQgc2NyaXB0LgotVG8gZW5hYmxlIHRoaXMgZW5kcG9pbnQsIEdyZW1saW4gU2VydmVyIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgYEh0dHBDaGFubmVsaXplcmAsIHdoaWNoIHJlcGxhY2VzIHRoZSBkZWZhdWx0LgotVGhlIGBXc0FuZEh0dHBDaGFubmVsaXplcmAgbWF5IGFsc28gYmUgY29uZmlndXJlZCB0byBlbmFibGUgYm90aCBXZWJTb2NrZXRzIGFuZCB0aGUgUkVTVCBlbmRwb2ludCBpbiB0aGUgY29uZmlndXJhdGlvbgotZmlsZToKLQotW3NvdXJjZSx5YW1sXQotY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyCi0KLVtzb3VyY2UseWFtbF0KLWNoYW5uZWxpemVyOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLldzQW5kSHR0cENoYW5uZWxpemVyCi0KLVRoZSBgSHR0cENoYW5uZWxpemVyYCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgaW4gdGhlIGBncmVtbGluLXNlcnZlci1yZXN0LW1vZGVybi55YW1sYCBmaWxlIHRoYXQgaXMgcGFja2FnZWQgd2l0aCB0aGUgR3JlbWxpbgorVGhlIGBIdHRwQ2hhbm5lbGl6ZXJgIGlzIGFscmVhZHkgY29uZmlndXJlZCBpbiB0aGUgYGdyZW1saW4tc2VydmVyLW1vZGVybi55YW1sYCBmaWxlIHRoYXQgaXMgcGFja2FnZWQgd2l0aCB0aGUgR3JlbWxpbgogU2VydmVyIGRpc3RyaWJ1dGlvbi4gIFRvIHV0aWxpemUgaXQsIHN0YXJ0IEdyZW1saW4gU2VydmVyIGFzIGZvbGxvd3M6CiAKIFtzb3VyY2UsdGV4dF0KLWJpbi9ncmVtbGluLXNlcnZlci5zaCBjb25mL2dyZW1saW4tc2VydmVyLXJlc3QtbW9kZXJuLnlhbWwKK2Jpbi9ncmVtbGluLXNlcnZlci5zaCBjb25mL2dyZW1saW4tc2VydmVyLW1vZGVybi55YW1sCiAKIE9uY2UgdGhlIHNlcnZlciBoYXMgc3RhcnRlZCwgaXNzdWUgYSByZXF1ZXN0LiAgSGVyZSdzIGFuIGV4YW1wbGUgd2l0aCBsaW5rOmh0dHA6Ly9jdXJsLmhheHguc2UvW2NVUkxdOgogCiBbc291cmNlLHRleHRdCi0kIGN1cmwgImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mj9ncmVtbGluPTEwMC0xIgotCi13aGljaCByZXR1cm5zOgotCi1bc291cmNlLGpzXQotewotICAicmVzdWx0Ijp7ImRhdGEiOjk5LCJtZXRhIjp7fX0sCi0gICJyZXF1ZXN0SWQiOiIwNTgxY2RiYS1iMTUyLTQ1YzQtODBmYS0zZDM2YTZlZWNmMWMiLAotICAic3RhdHVzIjp7ImNvZGUiOjIwMCwiYXR0cmlidXRlcyI6e30sIm1lc3NhZ2UiOiIifQotfQotCi1UaGUgYWJvdmUgZXhhbXBsZSBzaG93ZWQgYSBgR0VUYCBvcGVyYXRpb24sIGJ1dCB0aGUgcHJlZmVycmVkIG1ldGhvZCBmb3IgdGhpcyBlbmRwb2ludCBpcyBgUE9TVGA6Ci0KLVtzb3VyY2UsdGV4dF0KIGN1cmwgLVggUE9TVCAtZCAie1wiZ3JlbWxpblwiOlwiMTAwLTFcIn0iICJodHRwOi8vbG9jYWxob3N0OjgxODIiCiAKLXdoaWNoIHJldHVybnM6CityZXR1cm5zOgogCiBbc291cmNlLGpzXQogewotICAicmVzdWx0Ijp7ImRhdGEiOjk5LCJtZXRhIjp7fX0sCi0gICJyZXF1ZXN0SWQiOiJlZjJmZTE2Yy00NDFkLTRlMTMtOWRkYi0zYzdiNWRmYjEwYmEiLAotICAic3RhdHVzIjp7ImNvZGUiOjIwMCwiYXR0cmlidXRlcyI6e30sIm1lc3NhZ2UiOiIifQorICAicmVzdWx0IjogeworICAgICAgImRhdGEiOiB7CisgICAgICAgICAgIkB0eXBlIjogImc6TGlzdCIsCisgICAgICAgICAgIkB2YWx1ZSI6IFsKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IDk5CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICBdCisgICAgICB9CisgIH0sCisgICJzdGF0dXMiOiB7CisgICAgICAiY29kZSI6IDIwMAorICB9CiB9CiAKK2BQT1NUYCBpcyB0aGUgb25seSBzdXBwb3J0ZWQgbWV0aG9kIGZvciB0aGlzIGVuZHBvaW50LiBUaGlzIG1lYW5zIHRoYXQgYEdFVGAgd2l0aCBxdWVyeSBwYXJhbWV0ZXJzIGlzIG5vdCBzdXBwb3J0ZWQuCisKIEl0IGlzIGFsc28gcHJlZmVycmVkIHRoYXQgR3JlbWxpbiBzY3JpcHRzIGJlIHBhcmFtZXRlcml6ZWQgd2hlbiBwb3NzaWJsZSB2aWEgYGJpbmRpbmdzYDoKIAogW3NvdXJjZSx0ZXh0XQpAQCAtOTE1LDYgKzcwOCw5IEBACiB0eXBlcyBhcmUgcHJlc2VydmVkIG9yIHRvIHBhc3MgY29tcGxleCBvYmplY3RzIHN1Y2ggYXMgbGlzdHMgb3IgbWFwcywgdXNlIGBQT1NUYCB3aGljaCB3aWxsIGF0IGxlYXN0IHN1cHBvcnQgdGhlCiBhbGxvd2VkIEpTT04gZGF0YSB0eXBlcy4KIAorTk9URTogVGhlIEdyZW1saW4gU2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCBsaW5rOmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hUVFBfcGlwZWxpbmluZ1tIVFRQIHBpcGVsaW5pbmddLiBBdHRlbXB0cwordG8gdXNlIHRoaXMgZmVhdHVyZSB3aWxsIGNhdXNlIHRoZSBzZXJ2ZXIgdG8gdGhyb3cgYW4gZXJyb3IgYW5kIG1heSBsZWFkIHRvIHJlc3VsdHMgYmVpbmcgc2VudCBvdXQtb2Ytb3JkZXIuCisKIFBhc3NpbmcgdGhlIGBBY2NlcHRgIGhlYWRlciB3aXRoIGEgdmFsaWQgTUlNRSB0eXBlIHdpbGwgdHJpZ2dlciB0aGUgc2VydmVyIHRvIHJldHVybiB0aGUgcmVzdWx0IGluIGEgcGFydGljdWxhciBmb3JtYXQuCiBOb3RlIHRoYXQgaW4gYWRkaXRpb24gdG8gdGhlIGZvcm1hdHMgYXZhaWxhYmxlIGdpdmVuIHRoZSBzZXJ2ZXIncyBgc2VyaWFsaXplcnNgIGNvbmZpZ3VyYXRpb24sIHRoZXJlIGlzIGFsc28gYSBiYXNpYwogYHRleHQvcGxhaW5gIGZvcm1hdCB3aGljaCBwcm9kdWNlcyBhIHRleHQgcmVwcmVzZW50YXRpb24gb2YgcmVzdWx0cyBzaW1pbGFyIHRvIHRoZSBHcmVtbGluIENvbnNvbGU6CkBAIC05MzksMjIgKzczNSwxNyBAQAogQnkgZGVmYXVsdCB0aGlzIHZhbHVlIGlzIHNldCB0byBgZ3JlbWxpbi1ncm9vdnlgLiAgSWYgdXNpbmcgYSBgR0VUYCBvcGVyYXRpb24sIHRoaXMgdmFsdWUgY2FuIGJlIHNldCBhcyBhIHF1ZXJ5CiBzdHJpbmcgYXJndW1lbnQgd2l0aCBieSBzZXR0aW5nIHRoZSBgbGFuZ3VhZ2VgIGtleS4KIAotV0FSTklORzogQ29uc2lkZXIgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBvZiBhIHN1Ym1pdHRlZCBzY3JpcHQgYmVpbmcgcmV0dXJuZWQgZnJvbSB0aGUgSFRUUCBlbmRwb2ludC4gIEEgc2NyaXB0Ci10aGF0IGl0ZXJhdGVzIHRob3VzYW5kcyBvZiByZXN1bHRzIHdpbGwgc2VyaWFsaXplIGVhY2ggb2YgdGhvc2UgaW4gbWVtb3J5IGludG8gYSBzaW5nbGUgSlNPTiByZXN1bHQgc2V0LiAgSXQgaXMKLXF1aXRlIHBvc3NpYmxlIHRoYXQgc3VjaCBhIHNjcmlwdCB3aWxsIGdlbmVyYXRlIGBPdXRPZk1lbW9yeUVycm9yYCBleGNlcHRpb25zIG9uIHRoZSBzZXJ2ZXIuICBDb25zaWRlciB0aGUgZGVmYXVsdAotV2ViU29ja2V0IGNvbmZpZ3VyYXRpb24sIHdoaWNoIHN1cHBvcnRzIHN0cmVhbWluZywgaWYgdGhhdCB0eXBlIG9mIHVzZSBjYXNlIGlzIHJlcXVpcmVkLgotCiBbW3NlcnZlci1jb25maWd1cmluZ11dCiA9PT0gQ29uZmlndXJpbmcKIAogVGhlIGBncmVtbGluLXNlcnZlci5zaGAgZmlsZSBzZXJ2ZXMgbXVsdGlwbGUgcHVycG9zZXMuICBJdCBjYW4gYmUgdXNlZCB0byAiaW5zdGFsbCIgZGVwZW5kZW5jaWVzIHRvIHRoZSBHcmVtbGluCiBTZXJ2ZXIgcGF0aC4gIEZvciBleGFtcGxlLCB0byBiZSBhYmxlIHRvIGNvbmZpZ3VyZSBhbmQgdXNlIG90aGVyIGBHcmFwaGAgaW1wbGVtZW50YXRpb25zLCB0aGUgZGVwZW5kZW5jaWVzIG11c3QgYmUKIG1hZGUgYXZhaWxhYmxlIHRvIEdyZW1saW4gU2VydmVyLiAgVG8gZG8gdGhpcywgdXNlIHRoZSBgaW5zdGFsbGAgc3dpdGNoIGFuZCBzdXBwbHkgdGhlIE1hdmVuIGNvb3JkaW5hdGVzIGZvciB0aGUKLWRlcGVuZGVuY3kgdG8gImluc3RhbGwiLiAgRm9yIGV4YW1wbGUsIHRvIHVzZSBOZW80aiBpbiBHcmVtbGluIFNlcnZlcjoKK2RlcGVuZGVuY3kgdG8gImluc3RhbGwiLiAgRm9yIGV4YW1wbGUsIHRvIHVzZSBIYWRvb3AgaW4gR3JlbWxpbiBTZXJ2ZXI6CiAKIFtzb3VyY2UsdGV4dF0KIC0tLS0KLWJpbi9ncmVtbGluLXNlcnZlci5zaCBpbnN0YWxsIG9yZy5hcGFjaGUudGlua2VycG9wIG5lbzRqLWdyZW1saW4geC55LnoKK2Jpbi9ncmVtbGluLXNlcnZlci5zaCBpbnN0YWxsIG9yZy5hcGFjaGUudGlua2VycG9wIGhhZG9vcC1ncmVtbGluIHgueS56CiAtLS0tCiAKIFRoaXMgY29tbWFuZCB3aWxsICJncmFiIiB0aGUgYXBwcm9wcmlhdGUgZGVwZW5kZW5jaWVzIGFuZCBjb3B5IHRoZW0gdG8gdGhlIGBleHRgIGRpcmVjdG9yeSBvZiBHcmVtbGluIFNlcnZlciwgd2hpY2gKQEAgLTEwMDIsOSArNzkzLDYgQEAKIFdBUk5JTkc6IE9uIFdpbmRvd3MsIGdyZW1saW4tc2VydmVyLmJhdCB3aWxsIGFsd2F5cyBzdGFydCBpbiB0aGUgZm9yZWdyb3VuZC4gV2hlbiBubyBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIGl0IHdpbGwKIHN0YXJ0IHdpdGggdGhlIGRlZmF1bHQgYGNvbmYvZ3JlbWxpbi1zZXJ2ZXIueWFtbGAgZmlsZS4KIAotTk9URTogVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWF5IHJlZmVyZW5jZSB0aGUgYFVuaWZpZWRDaGFubmVsaXplcmAuIEl0IHdhcyBkZXByZWNhdGVkIGluIDMuOC4wIGFuZCB3aWxsCi1iZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uCi0KIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSB2YXJpb3VzIFlBTUwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgR3JlbWxpbiBTZXJ2ZXIgZXhwZWN0czoKIAogW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwLF4yIixvcHRpb25zPSJoZWFkZXIiXQpAQCAtMTAxNSw4ICs4MDMsNyBAQAogfGF1dGhlbnRpY2F0aW9uLmNvbmZpZyB8QSBgTWFwYCBvZiBjb25maWd1cmF0aW9uIHNldHRpbmdzIHRvIGJlIHBhc3NlZCB0byB0aGUgYEF1dGhlbnRpY2F0b3JgIHdoZW4gaXQgaXMgY29uc3RydWN0ZWQuICBUaGUgc2V0dGluZ3MgYXZhaWxhYmxlIGFyZSBkZXBlbmRlbnQgb24gdGhlIGltcGxlbWVudGF0aW9uLiB8X25vbmVfCiB8YXV0aG9yaXphdGlvbi5hdXRob3JpemVyIHxUaGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzbmFtZSBvZiBhbiBgQXV0aG9yaXplcmAgaW1wbGVtZW50YXRpb24gdG8gdXNlLiB8X25vbmVfCiB8YXV0aG9yaXphdGlvbi5jb25maWcgfEEgYE1hcGAgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB0byBiZSBwYXNzZWQgdG8gdGhlIGBBdXRob3JpemVyYCB3aGVuIGl0IGlzIGNvbnN0cnVjdGVkLiAgVGhlIHNldHRpbmdzIGF2YWlsYWJsZSBhcmUgZGVwZW5kZW50IG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gfF9ub25lXwotfGNoYW5uZWxpemVyIHxUaGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzbmFtZSBvZiB0aGUgYENoYW5uZWxpemVyYCBpbXBsZW1lbnRhdGlvbiB0byB1c2UuICBBIGBDaGFubmVsaXplcmAgaXMgYSAiY2hhbm5lbCBpbml0aWFsaXplciIgd2hpY2ggR3JlbWxpbiBTZXJ2ZXIgdXNlcyB0byBkZWZpbmUgdGhlIHR5cGUgb2YgcHJvY2Vzc2luZyBwaXBlbGluZSB0byB1c2UuICBCeSBhbGxvd2luZyBkaWZmZXJlbnQgYENoYW5uZWxpemVyYCBpbXBsZW1lbnRhdGlvbnMsIEdyZW1saW4gU2VydmVyIGNhbiBzdXBwb3J0IGRpZmZlcmVudCBjb21tdW5pY2F0aW9uIHByb3RvY29scyAoZS5nLiBXZWJTb2NrZXQpLiB8YFdlYlNvY2tldENoYW5uZWxpemVyYAotfGNsb3NlU2Vzc2lvblBvc3RHcmFwaE9wIHxDb250cm9scyB3aGV0aGVyIGEgYFNlc3Npb25gIHdpbGwgYmUgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIgYWZ0ZXIgYSBzdWNjZXNzZnVsIFRYX0NPTU1JVCBvciBUWF9ST0xMQkFDSyBieXRlY29kZSByZXF1ZXN0LiBUaGlzIHNldHRpbmcgc2hvdWxkIGJlIGVuYWJsZWQgd2hlbiBjbGllbnRzIHVzZSB0aGUgYHJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9uc2Agb3B0aW9uIChzZWUgPDxncmVtbGluLWphdmEtY29ubmVjdGlvbi1yZXVzZT4+KSwgd2hpY2ggYWxsb3dzIHRyYW5zYWN0aW9uIHNlc3Npb25zIHRvIHNoYXJlIHBvb2xlZCBjb25uZWN0aW9ucy4gV2l0aG91dCB0aGlzIHNldHRpbmcsIHNlc3Npb25zIG9wZW5lZCBieSBgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zYCB3aWxsIG5vdCBiZSBjbGVhbmVkIHVwIGFmdGVyIGNvbW1pdCBvciByb2xsYmFjayBhbmQgd2lsbCByZW1haW4gb3BlbiBvbiB0aGUgc2VydmVyIHVudGlsIHRoZSBzZXNzaW9uIHRpbWVvdXQgZXhwaXJlcywgbGVhZGluZyB0byB1bm5lY2Vzc2FyeSByZXNvdXJjZSBjb25zdW1wdGlvbi4gRGVmYXVsdHMgdG8gYGZhbHNlYCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gfF9mYWxzZV8KK3xjaGFubmVsaXplciB8VGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzc25hbWUgb2YgdGhlIGBDaGFubmVsaXplcmAgaW1wbGVtZW50YXRpb24gdG8gdXNlLiAgQSBgQ2hhbm5lbGl6ZXJgIGlzIGEgImNoYW5uZWwgaW5pdGlhbGl6ZXIiIHdoaWNoIEdyZW1saW4gU2VydmVyIHVzZXMgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHByb2Nlc3NpbmcgcGlwZWxpbmUgdG8gdXNlLiAgQnkgYWxsb3dpbmcgZGlmZmVyZW50IGBDaGFubmVsaXplcmAgaW1wbGVtZW50YXRpb25zLCBHcmVtbGluIFNlcnZlciBjYW4gc3VwcG9ydCBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbiBwcm90b2NvbHMgKGUuZy4gSFRUUCkuIHxgSHR0cENoYW5uZWxpemVyYAogfGVuYWJsZUF1ZGl0TG9nIHxUaGUgYEF1dGhlbnRpY2F0aW9uSGFuZGxlcmAsIGBBdXRob3JpemF0aW9uSGFuZGxlcmAgYW5kIHByb2Nlc3NvcnMgY2FuIGlzc3VlIGF1ZGl0IGxvZ2dpbmcgbWVzc2FnZXMgd2l0aCB0aGUgYXV0aGVudGljYXRlZCB1c2VyLCByZW1vdGUgc29ja2V0IGFkZHJlc3MgYW5kIHJlcXVlc3RzIHdpdGggYSBncmVtbGluIHF1ZXJ5LiBGb3IgcHJpdmFjeSByZWFzb25zLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIHNldHRpbmcgaXMgZmFsc2UuIFRoZSBhdWRpdCBsb2dnaW5nIG1lc3NhZ2VzIGFyZSBsb2dnZWQgYXQgdGhlIElORk8gbGV2ZWwgdmlhIHRoZSBgYXVkaXQub3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXJgIGxvZ2dlciwgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGBsb2diYWNrLnhtbGAgZmlsZS4gfF9mYWxzZV8KIHxncmFwaE1hbmFnZXIgfFRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3NuYW1lIG9mIHRoZSBgR3JhcGhNYW5hZ2VyYCBpbXBsZW1lbnRhdGlvbiB0byB1c2UuICBBIGBHcmFwaE1hbmFnZXJgIGlzIGEgY2xhc3MgdGhhdCBhZGhlcmVzIHRvIHRoZSBUaW5rZXJQb3AgYEdyYXBoTWFuYWdlcmAgaW50ZXJmYWNlLCBhbGxvd2luZyBjdXN0b20gaW1wbGVtZW50YXRpb25zIGZvciBzdG9yaW5nIGFuZCBtYW5hZ2luZyBncmFwaCByZWZlcmVuY2VzLCBhcyB3ZWxsIGFzIGRlZmluaW5nIGN1c3RvbSBtZXRob2RzIHRvIG9wZW4gYW5kIGNsb3NlIGdyYXBocyBpbnN0YW50aWF0aW9ucy4gVG8gcHJldmVudCBHcmVtbGluIFNlcnZlciBmcm9tIHN0YXJ0aW5nIHdoZW4gYWxsIGdyYXBocyBmYWlscywgdGhlIGBDaGVja2VkR3JhcGhNYW5hZ2VyYCBjYW4gYmUgdXNlZC58YERlZmF1bHRHcmFwaE1hbmFnZXJgCiB8Z3JhcGhzIHxBIGBNYXBgIG9mIGBHcmFwaGAgY29uZmlndXJhdGlvbiBmaWxlcyB3aGVyZSB0aGUga2V5IG9mIHRoZSBgTWFwYCBiZWNvbWVzIHRoZSBuYW1lIHRvIHdoaWNoIHRoZSBgR3JhcGhgIHdpbGwgYmUgYm91bmQgYW5kIHRoZSB2YWx1ZSBpcyB0aGUgZmlsZSBuYW1lIG9mIGEgYEdyYXBoYCBjb25maWd1cmF0aW9uIGZpbGUuIHxfbm9uZV8KQEAgLTEwMjYsMTEgKzgxMywxMSBAQAogfGtlZXBBbGl2ZUludGVydmFsIHxUaW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbCBhbGxvdyBhIGNoYW5uZWwgdG8gbm90IHNlbmQgcmVzcG9uc2VzIHRvIGEgY2xpZW50IGJlZm9yZSBpdCBzZW5kcyBhICJwaW5nIiB0byBzZWUgaWYgaXQgaXMgc3RpbGwgcHJlc2VudC4gSWYgaXQgaXMgcHJlc2VudCwgdGhlIGNsaWVudCBzaG91bGQgcmVzcG9uZCB3aXRoIGEgInBvbmciIHdoaWNoIHdpbGwgdGh1cyByZXNldCB0aGUgYGlkbGVDb25uZWN0aW9uVGltZW91dGAgYW5kIGtlZXAgdGhlIGNoYW5uZWwgb3Blbi4gSWYgZW5hYmxlZCwgdGhpcyBudW1iZXIgc2hvdWxkIGJlIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUgcHJvdmlkZWQgdG8gdGhlIGBpZGxlQ29ubmVjdGlvblRpbWVvdXRgLiBOb3RlIHRoYXQgd2hpbGUgdGhpcyB2YWx1ZSBpcyB0byBiZSBwcm92aWRlZCBhcyBtaWxsaXNlY29uZHMgaXQgd2lsbCByZXNvbHZlIHRvIHNlY29uZCBwcmVjaXNpb24uIFNldCB0aGlzIHZhbHVlIHRvIGAwYCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4gfDAKIHxtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzIHxNYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0IGNvbXBvbmVudHMgdGhhdCBjYW4gYmUgYWdncmVnYXRlZCBmb3IgYSBtZXNzYWdlLiB8MTAyNAogfG1heENodW5rU2l6ZSB8VGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBjb250ZW50IG9yIGVhY2ggY2h1bmsuICBJZiB0aGUgY29udGVudCBsZW5ndGggZXhjZWVkcyB0aGlzIHZhbHVlLCB0aGUgdHJhbnNmZXIgZW5jb2Rpbmcgb2YgdGhlIGRlY29kZWQgcmVxdWVzdCB3aWxsIGJlIGNvbnZlcnRlZCB0byAnY2h1bmtlZCcgYW5kIHRoZSBjb250ZW50IHdpbGwgYmUgc3BsaXQgaW50byBtdWx0aXBsZSBgSHR0cENvbnRlbnRgIG9iamVjdHMuICBJZiB0aGUgdHJhbnNmZXIgZW5jb2Rpbmcgb2YgdGhlIEhUVFAgcmVxdWVzdCBpcyAnY2h1bmtlZCcgYWxyZWFkeSwgZWFjaCBjaHVuayB3aWxsIGJlIHNwbGl0IGludG8gc21hbGxlciBjaHVua3MgaWYgdGhlIGxlbmd0aCBvZiB0aGUgY2h1bmsgZXhjZWVkcyB0aGlzIHZhbHVlLiB8ODE5MgotfG1heENvbnRlbnRMZW5ndGggfFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgYWdncmVnYXRlZCBjb250ZW50IGZvciBhIG1lc3NhZ2UuICBXb3JrcyBpbiBjb25jZXJ0IHdpdGggYG1heENodW5rU2l6ZWAgd2hlcmUgY2h1bmtlZCByZXF1ZXN0cyBhcmUgYWNjdW11bGF0ZWQgYmFjayBpbnRvIGEgc2luZ2xlIG1lc3NhZ2UuICBBIHJlcXVlc3QgZXhjZWVkaW5nIHRoaXMgc2l6ZSB3aWxsIHJldHVybiBhIGA0MTMgLSBSZXF1ZXN0IEVudGl0eSBUb28gTGFyZ2VgIHN0YXR1cyBjb2RlLiAgQSByZXNwb25zZSBleGNlZWRpbmcgdGhpcyBzaXplIHdpbGwgcmFpc2UgYW4gaW50ZXJuYWwgZXhjZXB0aW9uLiB8NjU1MzYKK3xtYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zIHxUaGUgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBvcGVuIHRyYW5zYWN0aW9ucyBhbGxvd2VkLiBXaGVuIHRoaXMgbGltaXQgaXMgcmVhY2hlZCwgbmV3IGBnLnR4KCkuYmVnaW4oKWAgcmVxdWVzdHMgYXJlIHJlamVjdGVkIHdpdGggSFRUUCA1MDMuIFNsb3RzIGFyZSBmcmVlZCB3aGVuIHRyYW5zYWN0aW9ucyBjbG9zZSB2aWEgY29tbWl0LCByb2xsYmFjaywgb3IgdGltZW91dC4gfDEwMDAKIHxtYXhIZWFkZXJTaXplIHxUaGUgbWF4aW11bSBsZW5ndGggb2YgYWxsIGhlYWRlcnMuIHw4MTkyCiB8bWF4SW5pdGlhbExpbmVMZW5ndGggfFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgaW5pdGlhbCBsaW5lIChlLmcuICAiR0VUIC8gSFRUUC8xLjAiKSBwcm9jZXNzZWQgaW4gYSByZXF1ZXN0LCB3aGljaCBlc3NlbnRpYWxseSBjb250cm9scyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHN1Ym1pdHRlZCBVUkkuIHw0MDk2Ci18bWF4UGFyYW1ldGVycyB8VGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgcGFzc2VkIG9uIGEgcmVxdWVzdC4gTGFyZ2VyIG51bWJlcnMgbWF5IGltcGFjdCBwZXJmb3JtYW5jZSBmb3Igc2NyaXB0cy4gVGhpcyBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byB0aGUgYFVuaWZpZWRDaGFubmVsaXplcmAuIHwxNgotfG1heFNlc3Npb25UYXNrUXVldWVTaXplIHxUaGUgbWF4aW11bSBzaXplIHRoYXQgYW4gaW5kaXZpZHVhbCBzZXNzaW9uIGNhbiBxdWV1ZSByZXF1ZXN0cyBiZWZvcmUgc3RhcnRpbmcgdG8gcmVqZWN0IHRoZW0uIFRoaXMgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIGBVbmlmaWVkQ2hhbm5lbGl6ZXJgLiB8NDA5NgorfG1heFBhcmFtZXRlcnMgfFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHBhc3NlZCBvbiBhIHJlcXVlc3QuIExhcmdlciBudW1iZXJzIG1heSBpbXBhY3QgcGVyZm9ybWFuY2UgZm9yIHNjcmlwdHMuIFRoaXMgY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIGBIdHRwQ2hhbm5lbGl6ZXJgLiB8MTYKK3xtYXhSZXF1ZXN0Q29udGVudExlbmd0aCB8VGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBhZ2dyZWdhdGVkIGNvbnRlbnQgZm9yIGEgcmVxdWVzdCBtZXNzYWdlLiAgV29ya3MgaW4gY29uY2VydCB3aXRoIGBtYXhDaHVua1NpemVgIHdoZXJlIGNodW5rZWQgcmVxdWVzdHMgYXJlIGFjY3VtdWxhdGVkIGJhY2sgaW50byBhIHNpbmdsZSBtZXNzYWdlLiAgQSByZXF1ZXN0IGV4Y2VlZGluZyB0aGlzIHNpemUgd2lsbCByZXR1cm4gYSBgNDEzIC0gUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlYCBzdGF0dXMgY29kZS4gfDEwNDg1NzYwCiB8bWF4V29ya1F1ZXVlU2l6ZSB8VGhlIG1heGltdW0gc2l6ZSB0aGUgZ2VuZXJhbCBwcm9jZXNzaW5nIHF1ZXVlIGNhbiBncm93IGJlZm9yZSB0aGUgYGdyZW1saW5Qb29sYCBzdGFydHMgdG8gcmVqZWN0IHJlcXVlc3RzLiB8ODE5MgogfG1ldHJpY3MuY29uc29sZVJlcG9ydGVyLmVuYWJsZWQgfFR1cm5zIG9uIGNvbnNvbGUgcmVwb3J0aW5nIG9mIG1ldHJpY3MuIHxmYWxzZQogfG1ldHJpY3MuY29uc29sZVJlcG9ydGVyLmludGVydmFsIHxUaW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJlcG9ydHMgb2YgbWV0cmljcyB0byBjb25zb2xlLiB8MTgwMDAwCkBAIC0xMDUxLDExICs4MzgsOCBAQAogfG1ldHJpY3Muc2xmNGpSZXBvcnRlci5lbmFibGVkIHxUdXJucyBvbiBTTEY0aiByZXBvcnRpbmcgb2YgbWV0cmljcy4gfGZhbHNlCiB8bWV0cmljcy5zbGY0alJlcG9ydGVyLmludGVydmFsIHxUaW1lIGluIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIHJlcG9ydHMgb2YgbWV0cmljcyB0byBTTEY0ai4gfDE4MDAwMAogfHBvcnQgfFRoZSBwb3J0IHRvIGJpbmQgdGhlIHNlcnZlciB0by4gfDgxODIKLXxwcm9jZXNzb3JzIHxBIGBMaXN0YCBvZiBgTWFwYCBzZXR0aW5ncywgd2hlcmUgZWFjaCBgTWFwYCByZXByZXNlbnRzIGEgYE9wUHJvY2Vzc29yYCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgYWxvbmcgd2l0aCBpdHMgY29uZmlndXJhdGlvbi4gfF9ub25lXwotfHByb2Nlc3NvcnNbWF0uY2xhc3NOYW1lIHxUaGUgZnVsbCBjbGFzcyBuYW1lIG9mIHRoZSBgT3BQcm9jZXNzb3JgIGltcGxlbWVudGF0aW9uLiB8X25vbmVfCi18cHJvY2Vzc29yc1tYXS5jb25maWcgfEEgYE1hcGAgY29udGFpbmluZyBgT3BQcm9jZXNzb3JgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiB8X25vbmVfCiB8cmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplIHxEZWZpbmVzIHRoZSBzaXplIGluIHdoaWNoIHRoZSByZXN1bHQgb2YgYSByZXF1ZXN0IGlzICJiYXRjaGVkIiBiYWNrIHRvIHRoZSBjbGllbnQuICBJbiBvdGhlciB3b3JkcywgaWYgc2V0IHRvIGAxYCwgdGhlbiBhIHJlc3VsdCB0aGF0IGhhZCB0ZW4gaXRlbXMgaW4gaXQgd291bGQgZ2V0IGVhY2ggcmVzdWx0IHNlbnQgYmFjayBpbmRpdmlkdWFsbHkuICBJZiBzZXQgdG8gYDJgIHRoZSBzYW1lIHRlbiByZXN1bHRzIHdvdWxkIGNvbWUgYmFjayBpbiBmaXZlIGJhdGNoZXMgb2YgdHdvIGVhY2guIHw2NAotfHNjcmlwdEVuZ2luZXMgfEEgYE1hcGAgb2YgYFNjcmlwdEVuZ2luZWAgaW1wbGVtZW50YXRpb25zIHRvIGV4cG9zZSB0aHJvdWdoIEdyZW1saW4gU2VydmVyLCB3aGVyZSB0aGUga2V5IGlzIHRoZSBuYW1lIGdpdmVuIGJ5IHRoZSBgU2NyaXB0RW5naW5lYCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBrZXkgbXVzdCBtYXRjaCB0aGUgbmFtZSBleGFjdGx5IGZvciB0aGUgYFNjcmlwdEVuZ2luZWAgdG8gYmUgY29uc3RydWN0ZWQuICBUaGUgdmFsdWUgcGFpcmVkIHdpdGggdGhpcyBrZXkgaXMgaXRzZWxmIGEgYE1hcGAgb2YgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBgU2NyaXB0RW5naW5lYC4gIElmIHRoaXMgdmFsdWUgaXMgbm90IHNldCwgaXQgd2lsbCBkZWZhdWx0IHRvICJncmVtbGluLWdyb292eSIuIHxfZ3JlbWxpbi1ncm9vdnlfCit8c2NyaXB0RW5naW5lcyB8QSBgTWFwYCBvZiBgU2NyaXB0RW5naW5lYCBpbXBsZW1lbnRhdGlvbnMgdG8gZXhwb3NlIHRocm91Z2ggR3JlbWxpbiBTZXJ2ZXIsIHdoZXJlIHRoZSBrZXkgaXMgdGhlIG5hbWUgZ2l2ZW4gYnkgdGhlIGBTY3JpcHRFbmdpbmVgIGltcGxlbWVudGF0aW9uLiAgVGhlIGtleSBtdXN0IG1hdGNoIHRoZSBuYW1lIGV4YWN0bHkgZm9yIHRoZSBgU2NyaXB0RW5naW5lYCB0byBiZSBjb25zdHJ1Y3RlZC4gIFRoZSB2YWx1ZSBwYWlyZWQgd2l0aCB0aGlzIGtleSBpcyBpdHNlbGYgYSBgTWFwYCBvZiBjb25maWd1cmF0aW9uIGZvciB0aGF0IGBTY3JpcHRFbmdpbmVgLiAgSWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0LCBpdCB3aWxsIGRlZmF1bHQgdG8gImdyZW1saW4tbGFuZyIuIHxfZ3JlbWxpbi1sYW5nXwogfHNjcmlwdEVuZ2luZXMuPG5hbWU+LmltcG9ydHMgfEEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcy9wYWNrYWdlcyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgYFNjcmlwdEVuZ2luZWAuIHxfbm9uZV8KIHxzY3JpcHRFbmdpbmVzLjxuYW1lPi5zdGF0aWNJbXBvcnRzIHxBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mICJzdGF0aWMiIGltcG9ydHMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIGBTY3JpcHRFbmdpbmVgLiB8X25vbmVfCiB8c2NyaXB0RW5naW5lcy48bmFtZT4uc2NyaXB0cyB8QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzY3JpcHQgZmlsZXMgdG8gZXhlY3V0ZSBvbiBgU2NyaXB0RW5naW5lYCBpbml0aWFsaXphdGlvbi4gYEdyYXBoYCBhbmQgYFRyYXZlcnNhbFNvdXJjZWAgaW5zdGFuY2UgcmVmZXJlbmNlcyBwcm9kdWNlZCBmcm9tIHNjcmlwdHMgd2lsbCBiZSBzdG9yZWQgZ2xvYmFsbHkgaW4gR3JlbWxpbiBTZXJ2ZXIsIHRoZXJlZm9yZSBpdCBpcyBwb3NzaWJsZSB0byB1c2UgaW5pdGlhbGl6YXRpb24gc2NyaXB0cyB0byBhZGQgVHJhdmVyc2FsIFN0cmF0ZWdpZXMgb3IgY3JlYXRlIGVudGlyZWx5IG5ldyBgR3JhcGhgIGluc3RhbmNlcyBhbGwgdG9nZXRoZXIuIEluc3RhbnRpYXRpbmcgYSBgTGlmZUN5Y2xlSG9va2AgaW4gYSBzY3JpcHQgcHJvdmlkZXMgYSB3YXkgdG8gZXhlY3V0ZSBzY3JpcHRzIHdoZW4gR3JlbWxpbiBTZXJ2ZXIgc3RhcnRzIGFuZCBzdG9wcy58X25vbmVfCkBAIC0xMDY0LDcgKzg0OCw2IEBACiB8c2VyaWFsaXplcnMgfEEgYExpc3RgIG9mIGBNYXBgIHNldHRpbmdzLCB3aGVyZSBlYWNoIGBNYXBgIHJlcHJlc2VudHMgYSBgTWVzc2FnZVNlcmlhbGl6ZXJgIGltcGxlbWVudGF0aW9uIHRvIHVzZSBhbG9uZyB3aXRoIGl0cyBjb25maWd1cmF0aW9uLiBJZiB0aGlzIHZhbHVlIGlzIG5vdCBzZXQsIHRoZW4gR3JlbWxpbiBTZXJ2ZXIgd2lsbCBjb25maWd1cmUgd2l0aCBHcmFwaFNPTiBhbmQgR3JhcGhCaW5hcnkgYnV0IHdpbGwgbm90IHJlZ2lzdGVyIGFueSBgaW9SZWdpc3RyaWVzYCBmb3IgY29uZmlndXJlZCBncmFwaHMuIHxfZW1wdHlfCiB8c2VyaWFsaXplcnNbWF0uY2xhc3NOYW1lIHxUaGUgZnVsbCBjbGFzcyBuYW1lIG9mIHRoZSBgTWVzc2FnZVNlcmlhbGl6ZXJgIGltcGxlbWVudGF0aW9uLiB8X25vbmVfCiB8c2VyaWFsaXplcnNbWF0uY29uZmlnIHxBIGBNYXBgIGNvbnRhaW5pbmcgYE1lc3NhZ2VTZXJpYWxpemVyYCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gfF9ub25lXwotfHNlc3Npb25MaWZldGltZVRpbWVvdXQgfFRoZSBtYXhpbXVtIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoYXQgYSBzZXNzaW9uIGNhbiBleGlzdC4gVGhpcyB2YWx1ZSBjYW5ub3QgYmUgZXh0ZW5kZWQgYmV5b25kIHRoaXMgdmFsdWUgaXJyZXNwZWN0aXZlIG9mIHRoZSBudW1iZXIgb2YgcmVxdWVzdHMgYW5kIHRoZWlyIGluZGl2aWR1YWwgdGltZW91dHMuIFRoZSBzZXNzaW9uIGxpZmUgY2Fubm90IGJlIGV4dGVuZGVkIG9uY2Ugc3RhcnRlZC4gVGhpcyBjb25maWd1cmF0aW9uIG9ubHkgYXBwbGllcyB0byB0aGUgYFVuaWZpZWRDaGFubmVsaXplcmAuIHw2MDAwMDAgKDEwIG1pbnV0ZXMpCiB8c3NsLmVuYWJsZWQgfERldGVybWluZXMgaWYgU1NMIGlzIHR1cm5lZCBvbiBvciBub3QuIHxmYWxzZQogfHNzbC5rZXlTdG9yZSB8VGhlIHByaXZhdGUga2V5IGluIEpLUyBvciBQS0NTIzEyIGZvcm1hdC4gIHxfbm9uZV8KIHxzc2wua2V5U3RvcmVQYXNzd29yZCB8VGhlIHBhc3N3b3JkIG9mIHRoZSBga2V5U3RvcmVgIGlmIGl0IGlzIHBhc3N3b3JkLXByb3RlY3RlZC4gfF9ub25lXwpAQCAtMTA3Nyw2NSArODYwLDE0IEBACiB8c3RyaWN0VHJhbnNhY3Rpb25NYW5hZ2VtZW50IHxTZXQgdG8gYHRydWVgIHRvIHJlcXVpcmUgYGFsaWFzZXNgIHRvIGJlIHN1Ym1pdHRlZCBvbiBldmVyeSByZXF1ZXN0cywgd2hlcmUgdGhlIGBhbGlhc2VzYCBiZWNvbWUgdGhlIHNjb3BlIG9mIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQuIHxmYWxzZQogfHRocmVhZFBvb2xCb3NzIHxUaGUgbnVtYmVyIG9mIHRocmVhZHMgYXZhaWxhYmxlIHRvIEdyZW1saW4gU2VydmVyIGZvciBhY2NlcHRpbmcgY29ubmVjdGlvbnMuIFNob3VsZCBhbHdheXMgYmUgc2V0IHRvIGAxYC4gfDEKIHx0aHJlYWRQb29sV29ya2VyIHxUaGUgbnVtYmVyIG9mIHRocmVhZHMgYXZhaWxhYmxlIHRvIEdyZW1saW4gU2VydmVyIGZvciBwcm9jZXNzaW5nIG5vbi1ibG9ja2luZyByZWFkcyBhbmQgd3JpdGVzLiB8MQotfHVzZUNvbW1vbkVuZ2luZUZvclNlc3Npb25zIHxFbnN1cmVzIHRoYXQgdGhlIHNhbWUgYFNjcmlwdEVuZ2luZWAgaXMgdXNlZCB0byBzdXBwb3J0IHNlc3Npb25zIGFuZCBzZXNzaW9ubGVzcyByZXF1ZXN0cyB3aGljaCB3aWxsIGxlYWQgdG8gYmV0dGVyIHBlcmZvcm1hbmNlLiBEbyBub3QgY2hhbmdlIHRoaXMgc2V0dGluZyBmcm9tIHRoZSBkZWZhdWx0IHdpdGhvdXQgYSBzcGVjaWZpYyB1c2UgY2FzZSBpbiBtaW5kLiBUaGlzIGNvbmZpZ3VyYXRpb24gb25seSBhcHBsaWVzIHRvIHRoZSBgVW5pZmllZENoYW5uZWxpemVyYC4gfHRydWUKK3x0cmFuc2FjdGlvblRpbWVvdXQgfFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoYXQgYSB0cmFuc2FjdGlvbiBjYW4gc2l0IGlkbGUgKG5vIHJlcXVlc3RzKSBiZWZvcmUgdGhlIHNlcnZlciBmb3JjaWJseSByb2xscyBpdCBiYWNrIGFuZCByZW1vdmVzIGl0LiBUaGUgdGltZW91dCByZXNldHMgb24gZWFjaCByZXF1ZXN0IHJlY2VpdmVkIGZvciB0aGF0IHRyYW5zYWN0aW9uLiBTZXQgdG8gYDBgIHRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLiB8NjAwMDAwCiB8dXNlRXBvbGxFdmVudExvb3AgfFRyeSB0byB1c2UgZXBvbGwgZXZlbnQgbG9vcHMgKHdvcmtzIG9ubHkgb24gTGludXggb3MpIGluc3RlYWQgb2YgbmV0dHkgTklPLiB8ZmFsc2UKLXx1c2VHbG9iYWxGdW5jdGlvbkNhY2hlRm9yU2Vzc2lvbnMgfEVuYWJsZSB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGNhY2hlIGZvciBzZXNzaW9ucyB3aGVuIHVzaW5nIHRoZSBgVW5pZmllZENoYW5uZWxpemVyYC4gV2hlbiBgdHJ1ZWAgaXQgbWVhbnMgdGhhdCBmdW5jdGlvbnMgY3JlYXRlZCBpbiBvbmUgcmVxdWVzdCB0byBhIHNlc3Npb24gcmVtYWluIGF2YWlsYWJsZSBvbiB0aGUgbmV4dCByZXF1ZXN0IHRvIHRoYXQgc2Vzc2lvbi4gVGhpcyBzZXR0aW5nIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiBgdXNlR2xvYmFsRnVuY3Rpb25DYWNoZUZvclNlc3Npb25zYCBpcyBgZmFsc2VgLiB8dHJ1ZQogfHdyaXRlQnVmZmVySGlnaFdhdGVyTWFyayB8IElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG5ldHdvcmsgc2VuZCBidWZmZXIgZXhjZWVkcyB0aGlzIHZhbHVlIHRoZW4gdGhlIGNoYW5uZWwgaXMgbm8gbG9uZ2VyIHdyaXRlYWJsZSwgYWNjZXB0aW5nIG5vIGFkZGl0aW9uYWwgd3JpdGVzIHVudGlsIGJ1ZmZlciBpcyBkcmFpbmVkIGFuZCB0aGUgYHdyaXRlQnVmZmVyTG93V2F0ZXJNYXJrYCBpcyBtZXQuIHw2NTUzNgogfHdyaXRlQnVmZmVyTG93V2F0ZXJNYXJrIHwgT25jZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBpbiB0aGUgbmV0d29yayBzZW5kIGJ1ZmZlciBleGNlZWRzIHRoZSBgd3JpdGVCdWZmZXJIaWdoV2F0ZXJNYXJrYCwgdGhlIGNoYW5uZWwgd2lsbCBub3QgYmVjb21lIHdyaXRlYWJsZSBhZ2FpbiB1bnRpbCB0aGUgYnVmZmVyIGlzIGRyYWluZWQgYW5kIGl0IGRyb3BzIGJlbG93IHRoaXMgdmFsdWUuIHwzMjc2OAogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBTZWUgdGhlIDw8bWV0cmljcyxNZXRyaWNzPj4gc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIEdhbmdsaWEgYW5kIEdyYXBoaXRlLgogCi1bW29wcHJvY2Vzc29yLWNvbmZpZ3VyYXRpb25zXV0KLT09PT0gT3BQcm9jZXNzb3IgQ29uZmlndXJhdGlvbnMKLQotSU1QT1JUQU5UOiBUaGUgYFVuaWZpZWRDaGFubmVsaXplcmAgKGRlcHJlY2F0ZWQgaW4gMy44LjApIGRvZXMgbm90IHJlbHkgb24gYE9wUHJvY2Vzc29yYCBpbmZyYXN0cnVjdHVyZS4gSWYgdXNpbmcgdGhhdAotY2hhbm5lbGl6ZXIsIHRoZXNlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgaWdub3JlZC4KLQotQW4gYE9wUHJvY2Vzc29yYCBwcm92aWRlcyBhIHdheSB0byBwbHVnLWluIGhhbmRsZXJzIHRvIEdyZW1saW4gU2VydmVyJ3MgcHJvY2Vzc2luZyBmbG93LiBHcmVtbGluIFNlcnZlciB1c2VzIHRoaXMKLXBsdWctaW4gc3lzdGVtIGl0c2VsZiB0byBleHBvc2UgdGhlIHBhY2thZ2VkIGZ1bmN0aW9uYWxpdHkgdGhhdCBpdCBleHBvc2VzLiBDb25maWd1cmF0aW9ucyBjYW4gYmUgc3VwcGxpZWQgdG8gYW4KLWBPcFByb2Nlc3NvcmAgdGhyb3VnaCB0aGUgYHByb2Nlc3NvcnNgIGtleSBpbiB0aGUgR3JlbWxpbiBTZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlLiBFYWNoIGBPcFByb2Nlc3NvcmAgY2FuIHRha2UgYQotYE1hcGAgb2YgYXJndW1lbnRzIHdoaWNoIGFyZSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb246Ci0KLVtzb3VyY2UseWFtbF0KLS0tLS0KLXByb2Nlc3NvcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbk9wUHJvY2Vzc29yLCBjb25maWc6IHsgc2Vzc2lvblRpbWVvdXQ6IDI4ODAwMDAwIH19Ci0tLS0tCi0KLVRoZSBmb2xsb3dpbmcgc3ViLXNlY3Rpb25zIGRlc2NyaWJlIHRob3NlIGNvbmZpZ3VyYXRpb25zIGZvciBlYWNoIGBPcFByb2Nlc3NvcmAgaW1wbGVtZW50YXRpb25zIHN1cHBsaWVkIHdpdGggR3JlbWxpbgotU2VydmVyLgotCi09PT09PSBTZXNzaW9uT3BQcm9jZXNzb3IKLQotVGhlIGBTZXNzaW9uT3BQcm9jZXNzb3JgIHByb3ZpZGVzIGEgd2F5IHRvIGludGVyYWN0IHdpdGggR3JlbWxpbiBTZXJ2ZXIgb3ZlciBhIDw8c2Vzc2lvbnMsc2Vzc2lvbj4+LgotCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsXjIiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18TmFtZSB8RGVzY3JpcHRpb24gfERlZmF1bHQKLXxnbG9iYWxGdW5jdGlvbkNhY2hlRW5hYmxlZCB8RGV0ZXJtaW5lcyBpZiB0aGUgc2NyaXB0IGVuZ2luZSBjYWNoZSBmb3IgZ2xvYmFsIGZ1bmN0aW9ucyBpcyBlbmFibGVkIGFuZCBiZWhhdmVzIGFzIGFuIG92ZXJyaWRlIHRvIHRoZSBwbHVnaW4gc3BlY2lmaWMgc2V0dGluZyBvZiB0aGUgc2FtZSBuYW1lLiB8dHJ1ZQotfG1heFBhcmFtZXRlcnMgfE1heGltdW0gbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgcGFzc2VkIG9uIHRoZSByZXF1ZXN0LiB8MTYKLXxwZXJHcmFwaENsb3NlVGltZW91dCB8VGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgZWFjaCBjb25maWd1cmVkIGdyYXBoIHRvIGNsb3NlIGFueSBvcGVuIHRyYW5zYWN0aW9ucyB3aGVuIHRoZSBzZXNzaW9uIGlzIGtpbGxlZC4gfDEwMDAwCi18c2Vzc2lvblRpbWVvdXQgfFRpbWUgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSBhIHNlc3Npb24gd2lsbCB0aW1lIG91dC4gfDI4ODAwMDAwCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLT09PT09IFN0YW5kYXJkT3BQcm9jZXNzb3IKLQotVGhlIGBTdGFuZGFyZE9wUHJvY2Vzc29yYCBwcm92aWRlcyBhIHdheSB0byBpbnRlcmFjdCB3aXRoIEdyZW1saW4gU2VydmVyIHdpdGhvdXQgdXNlIG9mIHNlc3Npb25zIGFuZCBpcyB0aGUgZGVmYXVsdAotbWV0aG9kIGZvciBwcm9jZXNzaW5nIHNjcmlwdCBldmFsdWF0aW9uIHJlcXVlc3RzLgotCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsXjIiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18TmFtZSB8RGVzY3JpcHRpb24gfERlZmF1bHQKLXxtYXhQYXJhbWV0ZXJzIHxNYXhpbXVtIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHBhc3NlZCBvbiB0aGUgcmVxdWVzdC4gfDE2Ci18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVtbdHJhdmVyc2Fsb3Bwcm9jZXNzb3JdXQotPT09PT0gVHJhdmVyc2FsT3BQcm9jZXNzb3IKLQotVGhlIGBUcmF2ZXJzYWxPcFByb2Nlc3NvcmAgcHJvdmlkZXMgYSB3YXkgdG8gYWNjZXB0IHRyYXZlcnNhbHMgY29uZmlndXJlZCB2aWEgPDxjb25uZWN0aW5nLXZpYS1kcml2ZXJzLHdpdGgoKT4+LgotSXQgaGFzIG5vIHNwZWNpYWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KLQogPT09PSBTZXJpYWxpemF0aW9uCiAKIEdyZW1saW4gU2VydmVyIGNhbiBhY2NlcHQgcmVxdWVzdHMgYW5kIHJldHVybiByZXN1bHRzIHVzaW5nIGRpZmZlcmVudCBzZXJpYWxpemF0aW9uIGZvcm1hdHMuIFNlcmlhbGl6ZXJzIGltcGxlbWVudCB0aGUKQEAgLTExNzIsMTIgKzkwNCw4IEBACiBbd2lkdGg9IjEwMCUiLGNvbHM9IjIsMiw0LDQiLG9wdGlvbnM9ImhlYWRlciJdCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB8VmVyc2lvbiB8RW1iZWRkZWQgVHlwZXMgfE1pbWUgVHlwZSB8Q2xhc3MKLXwxLjAgfHllcyB8YGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYxLjAranNvbmAgfGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyR3JlbWxpblYxYAotfDEuMCB8bm8gfGBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12MS4wK2pzb247dHlwZXM9ZmFsc2VgIHxgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMWAKLXwyLjAgfHllcyB8YGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbmAgfGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJgCi18Mi4wIHxubyB8YGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbjt0eXBlcz1mYWxzZWAgfGBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyYAotfDMuMCB8eWVzIHxgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uYCB8YEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWM2AKLXwzLjAgfG5vIHxgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uO3R5cGVzPWZhbHNlYCB8YEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWM2AKK3w0LjAgfHllcyB8YGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbmAgfGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRgCit8NC4wIHxubyB8YGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbjt0eXBlcz1mYWxzZWAgfGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRgCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFRoZSBhYm92ZSBzZXJpYWxpemVyIGNsYXNzZXMgY2FuIGJlIGZvdW5kIGluIHRoZSBgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcmAgcGFja2FnZSBvZiBgZ3JlbWxpbi11dGlsYC4KQEAgLTExOTMsMTAgKzkyMSwxMCBAQAogCiBbc291cmNlLHlhbWxdCiAtLS0tCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzIH0KKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQgfQogLS0tLQogCi1HcmVtbGluIFNlcnZlciBpcyBjb25maWd1cmVkIGJ5IGRlZmF1bHQgd2l0aCBHcmFwaFNPTiAzLjAgYXMgc2hvd24gYWJvdmUuIEl0IGhhcyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgorR3JlbWxpbiBTZXJ2ZXIgaXMgY29uZmlndXJlZCBieSBkZWZhdWx0IHdpdGggR3JhcGhTT04gNC4wIGFzIHNob3duIGFib3ZlLiBJdCBoYXMgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbjoKIAogW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwLF4yIixvcHRpb25zPSJoZWFkZXIiXQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTIwNCwyMyArOTMyLDExIEBACiB8aW9SZWdpc3RyaWVzIHxBIGxpc3Qgb2YgYElvUmVnaXN0cnlgIGltcGxlbWVudGF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzZXJpYWxpemVyLiB8X25vbmVfCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUl0IGlzIHdvcnRoIG5vdGluZyB0aGF0IEdyYXBoU09OIDEuMCBzdGlsbCBoYXMgc29tZSBhcHBlYWwgZm9yIHNvbWUgdXNlcnMgYXMgaXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcHJvZHVjZSBhbiB1bnR5cGVkCi1KU09OIGZvcm1hdCB3aGljaCBpcyBhIGJpdCBlYXNpZXIgdG8gY29uc3VtZSB0aGFuIGl0cyBzdWNjZXNzb3JzIHdoaWNoIGVtYmVkIGRhdGEgdHlwZXMgaW50byB0aGUgb3V0cHV0LiBUaGlzIHZlcnNpb24KLW9mIEdyYXBoU09OIHRlbmRzIHRvIGJlIHRoZSBvbmUgdGhhdCB1c2VycyBsaWtlIHRvIHV0aWxpemUgd2hlbiA8PGNvbm5lY3RpbmctdmlhLWh0dHAsY29ubmVjdGluZyB2aWEgSFRUUD4+IGFuZCBpcyBzdGlsbAotdXNlZCBieSBzb21lIDw8Y29ubmVjdGluZy1yZ3AsIFJlbW90ZSBHcmVtbGluIFByb3ZpZGVycz4+IGZvciB0aGlzIHB1cnBvc2UuCitJdCBpcyBwb3NzaWJsZSBmb3IgdHdvIHNlcmlhbGl6ZXJzIHRvIGJpbmQgdG8gdGhlIHNhbWUgbWltZSB0eXBlIHN1Y2ggYXMgYGFwcGxpY2F0aW9uL2pzb25gLiBXaGVuIHN1Y2ggY29uZmxpY3RzIGFyaXNlLAorR3JlbWxpbiBTZXJ2ZXIgd2lsbCB1c2UgdGhlIG9yZGVyIG9mIHRoZSBzZXJpYWxpemVycyB0byBkZXRlcm1pbmUgcHJpb3JpdHkgc3VjaCB0aGF0IHRoZSBmaXJzdCBzZXJpYWxpemVyIHRvIGJpbmQgdG8gYQordHlwZSB3aWxsIGJlIHVzZWQgYW5kIHRoZSBvdGhlcnMgaWdub3JlZC4gVGhlIGZvbGxvd2luZyBsb2cgbWVzc2FnZSB3aWxsIGluZGljYXRlIGhvdyB0aGUgc2VydmVyIGlzIHVsdGltYXRlbHkgY29uZmlndXJlZDoKIAotVG8gY29uZmlndXJlIEdyZW1saW4gU2VydmVyIHRoaXMgd2F5LCB0aGUgYEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMWQwYCBtdXN0IGJlIGluY2x1ZGVkOgotCi1bc291cmNlLHlhbWxdCi0tLS0tCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxIH0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgfQotLS0tLQotCi1JbiB0aGUgYWJvdmUgc2l0dWF0aW9uLCBib3RoIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjFkMGAgYW5kIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjNkMGAgZWFjaCBiaW5kIHRvIHRoZQotYGFwcGxpY2F0aW9uL2pzb25gIG1pbWUgdHlwZS4gV2hlbiBzdWNoIGNvbmZsaWN0cyBhcmlzZSwgR3JlbWxpbiBTZXJ2ZXIgd2lsbCB1c2UgdGhlIG9yZGVyIG9mIHRoZSBzZXJpYWxpemVycyB0bwotZGV0ZXJtaW5lIHByaW9yaXR5IHN1Y2ggdGhhdCB0aGUgZmlyc3Qgc2VyaWFsaXplciB0byBiaW5kIHRvIGEgdHlwZSB3aWxsIGJlIHVzZWQgYW5kIHRoZSBvdGhlcnMgaWdub3JlZC4gVGhlIGZvbGxvd2luZwotbG9nIG1lc3NhZ2Ugd2lsbCBpbmRpY2F0ZSBob3cgdGhlIHNlcnZlciBpcyB1bHRpbWF0ZWx5IGNvbmZpZ3VyZWQ6CitOT1RFOiBUaGUgYmVsb3cgZXhhbXBsZXMgdXNlIEdyYXBoU09OIDEuMCBhbmQgR3JhcGhTT04gMy4wIGZvciBleGFtcGxlIHB1cnBvc2VzLCBob3dldmVyLCB0aGV5IGFyZSBubyBsb25nZXIgYXZhaWxhYmxlLgogCiBbc291cmNlLHRleHRdCiAtLS0tCkBAIC0xMjQ3LDIwICs5NjMsMTggQEAKIGZvcm1hdCBpdHNlbGYgaXMgZGVzY3JpYmVkIGluIHRoZSBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9kZXYvaW8vI2dyYXBoYmluYXJ5W0lPIERvY3VtZW50YXRpb25dLgogCiBbc291cmNlLHlhbWxdCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIH0KKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgfQogCi1JdCBoYXMgdGhlIE1JTUUgdHlwZSBvZiBgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjBgIGFuZCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKK0l0IGhhcyB0aGUgTUlNRSB0eXBlIG9mIGBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMGAgYW5kIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOgogCiBbd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsXjIiLG9wdGlvbnM9ImhlYWRlciJdCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB8S2V5IHxEZXNjcmlwdGlvbiB8RGVmYXVsdAotfGN1c3RvbSB8QSBsaXN0IG9mIGNsYXNzZXMgd2l0aCBjdXN0b20ga3J5byBgU2VyaWFsaXplcmAgaW1wbGVtZW50YXRpb25zIHJlbGF0ZWQgdG8gdGhlbSBpbiB0aGUgZm9ybSBvZiBgPGNsYXNzPjs8c2VyaWFsaXplci1jbGFzcz5gLiB8X25vbmVfCiB8aW9SZWdpc3RyaWVzIHxBIGxpc3Qgb2YgYElvUmVnaXN0cnlgIGltcGxlbWVudGF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzZXJpYWxpemVyLiB8X25vbmVfCiB8YnVpbGRlciB8TmFtZSBvZiB0aGUgYFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuQnVpbGRlcmAgaW5zdGFuY2UgdG8gYmUgdXNlZCB0byBjb25zdHJ1Y3QgdGhlIGBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5YC4gfF9ub25lXwogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1BcyBkZXNjcmliZWQgYWJvdmUsIHRoZXJlIGFyZSBtdWx0aXBsZSB3YXlzIGluIHdoaWNoIHRvIHJlZ2lzdGVyIHNlcmlhbGl6ZXJzIGZvciBHcmFwaEJpbmFyeS1iYXNlZCBzZXJpYWxpemF0aW9uLiBOb3RlCi10aGF0IHRoZSBgaW9SZWdpc3RyaWVzYCBzZXR0aW5nIGlzIGFwcGxpZWQgZmlyc3QsIGZvbGxvd2VkIGJ5IHRoZSBgY3VzdG9tYCBzZXR0aW5nLgorQXMgZGVzY3JpYmVkIGFib3ZlLCB0aGVyZSBhcmUgbXVsdGlwbGUgd2F5cyBpbiB3aGljaCB0byByZWdpc3RlciBzZXJpYWxpemVycyBmb3IgR3JhcGhCaW5hcnktYmFzZWQgc2VyaWFsaXphdGlvbi4KIAogW1ttZXRyaWNzXV0KID09PT0gTWV0cmljcwpAQCAtMTI5MiwxNyArMTAwNiwxNiBAQAogUmVnYXJkbGVzcyBvZiB0aGUgb3V0cHV0LCB0aGUgbWV0cmljcyBnYXRoZXJlZCBhcmUgdGhlIHNhbWUuIEVhY2ggbWV0cmljIGlzIHByZWZpeGVkIHdpdGgKIGBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyYCBhbmQgdGhlIGZvbGxvd2luZyBtZXRyaWNzIGFyZSByZXBvcnRlZDoKIAotKiBgY2hhbm5lbHMucGF1c2VkYCAtIFRoZSBjdXJyZW50IG51bWJlciBvZiBvcGVuIGNoYW5uZWxzIChIVFRQIGFuZCBXZWJzb2NrZXQpIHRoYXQgaGF2ZSB0aGVpciB3cml0ZXMgdG8gYnVmZmVyIHBhdXNlZAorKiBgY2hhbm5lbHMucGF1c2VkYCAtIFRoZSBjdXJyZW50IG51bWJlciBvZiBvcGVuIEhUVFAgY2hhbm5lbHMgdGhhdCBoYXZlIHRoZWlyIHdyaXRlcyB0byBidWZmZXIgcGF1c2VkCiB3aGVuIHRoZSBgd3JpdGVCdWZmZXJIaWdoV2F0ZXJNYXJrYCBjb25maWd1cmF0aW9uIGlzIGV4Y2VlZGVkLgotKiBgY2hhbm5lbHMudG90YWxgIC0gVGhlIGN1cnJlbnQgbnVtYmVyIG9mIG9wZW4gY2hhbm5lbHMgKEhUVFAgYW5kIFdlYnNvY2tldCkuCi0qIGBjaGFubmVscy53cml0ZS1wYXVzZXNgIC0gVGhlIHRvdGFsIG51bWJlciBvZiBwYXVzZXMgYWNyb3NzIGFsbCBjaGFubmVscyAoSFRUUCBhbmQgV2Vic29ja2V0KSB0byBidWZmZXIgd3JpdGVzIHdoZXJlCisqIGBjaGFubmVscy50b3RhbGAgLSBUaGUgY3VycmVudCBudW1iZXIgb2Ygb3BlbiBIVFRQIGNoYW5uZWxzLgorKiBgY2hhbm5lbHMud3JpdGUtcGF1c2VzYCAtIFRoZSB0b3RhbCBudW1iZXIgb2YgcGF1c2VzIGFjcm9zcyBhbGwgSFRUUCBjaGFubmVscyB0byBidWZmZXIgd3JpdGVzIHdoZXJlCiB0aGUgYHdyaXRlQnVmZmVySGlnaFdhdGVyTWFya2AgY29uZmlndXJhdGlvbiBpcyBleGNlZWRlZCwgd2l0aCBtZWFuIHJhdGUsIGFzIHdlbGwgYXMgdGhlIDEsIDUsIGFuZCAxNS1taW51dGUgcmF0ZXMuCiAqIGBlbmdpbmUtbmFtZS5zZXNzaW9uLnNlc3Npb24taWQuKmAgLSBNZXRyaWNzIHJlbGF0ZWQgdG8gZGlmZmVyZW50IGBHcmVtbGluU2NyaXB0RW5naW5lYCBpbnN0YW5jZXMgY29uZmlndXJlZCBmb3IKIHNlc3Npb24tYmFzZWQgcmVxdWVzdHMgd2hlcmUgImVuZ2luZS1uYW1lIiB3aWxsIGJlIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgZW5naW5lLCBzdWNoIGFzICJncmVtbGluLWdyb292eSIgYW5kCi0ic2Vzc2lvbi1pZCIgd2lsbCBiZSB0aGUgaWRlbnRpZmllciBmb3IgdGhlIHNlc3Npb24gaXRzZWxmLiBUaGlzIG1ldHJpYyBpcyBub3QgbWVhc3VyZWQgdW5kZXIgdGhlIGBVbmlmaWVkQ2hhbm5lbGl6ZXJgLgorInNlc3Npb24taWQiIHdpbGwgYmUgdGhlIGlkZW50aWZpZXIgZm9yIHRoZSBzZXNzaW9uIGl0c2VsZi4KICogYGVuZ2luZS1uYW1lLnNlc3Npb25sZXNzLipgIC0gTWV0cmljcyByZWxhdGVkIHRvIGRpZmZlcmVudCBgR3JlbWxpblNjcmlwdEVuZ2luZWAgaW5zdGFuY2VzIGNvbmZpZ3VyZWQgZm9yIHNlc3Npb25sZXNzCi1yZXF1ZXN0cyB3aGVyZSAiZW5naW5lLW5hbWUiIHdpbGwgYmUgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBlbmdpbmUsIHN1Y2ggYXMgImdyZW1saW4tZ3Jvb3Z5Ii4gVGhpcyBtZXRyaWMgaXMgbm90Ci1tZWFzdXJlZCB1bmRlciB0aGUgYFVuaWZpZWRDaGFubmVsaXplcmAuCityZXF1ZXN0cyB3aGVyZSAiZW5naW5lLW5hbWUiIHdpbGwgYmUgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBlbmdpbmUsIHN1Y2ggYXMgImdyZW1saW4tZ3Jvb3Z5Ii4KICogYGVycm9yc2AgLSBUaGUgbnVtYmVyIG9mIHRvdGFsIGVycm9ycywgbWVhbiByYXRlLCBhcyB3ZWxsIGFzIHRoZSAxLCA1LCBhbmQgMTUtbWludXRlIGVycm9yIHJhdGVzLgogKiBgb3AuZXZhbGAgLSBUaGUgbnVtYmVyIG9mIHNjcmlwdCBldmFsdWF0aW9ucywgbWVhbiByYXRlLCAxLCA1LCBhbmQgMTUgbWludXRlIHJhdGVzLCBtaW5pbXVtLCBtYXhpbXVtLCBtZWRpYW4sIG1lYW4sCiBhbmQgc3RhbmRhcmQgZGV2aWF0aW9uIGV2YWx1YXRpb24gdGltZXMsIGFzIHdlbGwgYXMgdGhlIDc1dGgsIDk1dGgsIDk4dGgsIDk5dGggYW5kIDk5Ljl0aCBwZXJjZW50aWxlIGV2YWx1YXRpb24gdGltZXMKQEAgLTEzMTAsOSArMTAyMyw3IEBACiAqIGBvcC50cmF2ZXJzYWxgIC0gVGhlIG51bWJlciBvZiBgVHJhdmVyc2FsYCBieXRlY29kZS1iYXNlZCBleGVjdXRpb25zLCBtZWFuIHJhdGUsIDEsIDUsIGFuZCAxNSBtaW51dGUgcmF0ZXMsIG1pbmltdW0sCiBtYXhpbXVtLCBtZWRpYW4sIG1lYW4sIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gZXZhbHVhdGlvbiB0aW1lcywgYXMgd2VsbCBhcyB0aGUgNzV0aCwgOTV0aCwgOTh0aCwgOTl0aCBhbmQgOTkuOXRoCiBwZXJjZW50aWxlIGV2YWx1YXRpb24gdGltZXMuCi0qIGBzZXNzaW9uc2AgLSBUaGUgbnVtYmVyIG9mIHNlc3Npb25zIG9wZW4gYXQgdGhlIHRpbWUgdGhlIG1ldHJpYyB3YXMgbGFzdCBtZWFzdXJlZC4gRm9yIHRoZSBgVW5pZmllZENoYW5uZWxpemVyYCwgZWFjaAotcmVxdWVzdCBjcmVhdGVzIGEgInNlc3Npb24iLCBldmVuIGEgc28tY2FsbGVkICJzZXNzaW9ubGVzcyByZXF1ZXN0Iiwgd2hpY2ggaXMgYmFzaWNhbGx5IGEgc2Vzc2lvbiB0aGF0IHdpbGwgb25seQotZXhlY3V0ZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhhdCBzaW5nbGUgcmVxdWVzdC4KKyogYHNlc3Npb25zYCAtIFRoZSBudW1iZXIgb2Ygc2Vzc2lvbnMgb3BlbiBhdCB0aGUgdGltZSB0aGUgbWV0cmljIHdhcyBsYXN0IG1lYXN1cmVkLgogKiBgdXNlci1hZ2VudC4qYCAtIENvdW50cyB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb24gcmVxdWVzdHMgZnJvbSBjbGllbnRzIHByb3ZpZGluZyBhIGdpdmVuIHVzZXIgYWdlbnQuCiAKIE5PVEU6IEdyZW1saW4gU2VydmVyIGhhcyBhIGxpbWl0IG9mIDEwMDAwIHVuaXF1ZSB1c2VyIGFnZW50cyB0byBiZSB0cmFja2VkIGJ5IG1ldHJpY3MuIElmIHRoaXMgY2FwIGlzIGV4Y2VlZGVkCkBAIC0xMzgxLDM2ICsxMDkyLDE2IEBACiBjaG9zZW4uIFNjcmlwdCBleGVjdXRpb24gb3B0aW9ucyBhcmUgY292ZXJlZCA8PHNjcmlwdC1leGVjdXRpb24sICJhdCB0aGUgZW5kIG9mIHRoaXMgc2VjdGlvbiI+Pi4gVGhpcyBzZWN0aW9uCiBzdGFydHMgd2l0aCBhdXRoZW50aWNhdGlvbi4KIAotR3JlbWxpbiBTZXJ2ZXIgc3VwcG9ydHMgYSBwbHVnZ2FibGUgYXV0aGVudGljYXRpb24gZnJhbWV3b3JrIHVzaW5nCi1saW5rOmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NpbXBsZV9BdXRoZW50aWNhdGlvbl9hbmRfU2VjdXJpdHlfTGF5ZXJbU0FTTF0gKFNpbXBsZSBBdXRoZW50aWNhdGlvbiBhbmQKLVNlY3VyaXR5IExheWVyKS4gRGVwZW5kaW5nIG9uIHRoZSBjbGllbnQgdXNlZCB0byBjb25uZWN0IHRvIEdyZW1saW4gU2VydmVyLCBkaWZmZXJlbnQgYXV0aGVudGljYXRpb24KLW1lY2hhbmlzbXMgYXJlIGFjY2Vzc2libGUsIHNlZSB0aGUgdGFibGUgYmVsb3cuCi0KLVt3aWR0aD0iNzAlIixjb2xzPSIzLDUsMyIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXxDbGllbnQgfEF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSB8QXZhaWxhYmlsaXR5Ci18SFRUUCB8QkFTSUMgfDMuMC4wLWluY3ViYXRpbmcKLTEuMyt2fEdyZW1saW4tSmF2YS8KLUdyZW1saW4tQ29uc29sZSB8UExBSU4gU0FTTCAodXNlcm5hbWUvcGFzc3dvcmQpIHwzLjAuMC1pbmN1YmF0aW5nCi18UGx1Z2dhYmxlIFNBU0wgfDMuMC4wLWluY3ViYXRpbmcKLXxHU1NBUEkgU0FTTCAoS2VyYmVyb3MpIHwzLjMuMAotfEdyZW1saW4uTkVUIHxQTEFJTiBTQVNMIHwzLjMuMAotMS4yK3Z8R3JlbWxpbi1QeXRob24gfFBMQUlOIFNBU0wgfDMuMi4yCi18R1NTQVBJIFNBU0wgKEtlcmJlcm9zKSB8My40LjcKLXxHcmVtbGluLk5ldCB8UExBSU4gU0FTTCB8My4yLjcKLXxHcmVtbGluLUphdmFzY3JpcHQgfFBMQUlOIFNBU0wgfDMuMy4wCi18R3JlbWxpbi1nbyB8UExBSU4gU0FTTCB8My41LjQKLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0J5IGRlZmF1bHQsIEdyZW1saW4gU2VydmVyIHN1cHBvcnRzIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb24uCiAKIEJ5IGRlZmF1bHQsIEdyZW1saW4gU2VydmVyIGlzIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWxsIHJlcXVlc3RzIHRvIGJlIHByb2Nlc3NlZCAoaS5lLiBubyBhdXRoZW50aWNhdGlvbikuICBUbyBlbmFibGUKIGF1dGhlbnRpY2F0aW9uLCBHcmVtbGluIFNlcnZlciBtdXN0IGJlIGNvbmZpZ3VyZWQgd2l0aCBhbiBgQXV0aGVudGljYXRvcmAgaW1wbGVtZW50YXRpb24gaW4gaXRzIFlBTUwgZmlsZS4gIEdyZW1saW4KLVNlcnZlciBjb21lcyBwYWNrYWdlZCB3aXRoIHR3byBpbXBsZW1lbnRhdGlvbnMgY2FsbGVkIGBTaW1wbGVBdXRoZW50aWNhdG9yYCBmb3IgcGxhaW4gdGV4dCBhdXRoZW50aWNhdGlvbiB1c2luZyBIVFRQCi1CQVNJQyBvciBQTEFJTiBTQVNMIGFuZCBgS3JiNUF1dGhlbnRpY2F0b3JgIGZvciBLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiB1c2luZyBHU1NBUEkgU0FTTC4KK1NlcnZlciBjb21lcyBwYWNrYWdlZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGNhbGxlZCBgU2ltcGxlQXV0aGVudGljYXRvcmAgZm9yIHBsYWluIHRleHQgYXV0aGVudGljYXRpb24gdXNpbmcgSFRUUAorQkFTSUMuCiAKID09PT0gUGxhaW4gdGV4dCBhdXRoZW50aWNhdGlvbgogCi1UaGUgYFNpbXBsZUF1dGhlbnRpY2F0b3JgIGltcGxlbWVudHMgdGhlICJQTEFJTiIgU0FTTCBtZWNoYW5pc20gKGkuZS4gcGxhaW4gdGV4dCkgdG8gYXV0aGVudGljYXRlIGEgcmVxdWVzdC4gIEl0IGFsc28KLXN1cHBvcnRzIGhhbmRsaW5nIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RzIGZyb20gaHR0cCBjbGllbnRzLiBJdCB2YWxpZGF0ZXMKK1RoZSBgU2ltcGxlQXV0aGVudGljYXRvcmAgc3VwcG9ydHMgaGFuZGxpbmcgYmFzaWMgYXV0aGVudGljYXRpb24gcmVxdWVzdHMgZnJvbSBodHRwIGNsaWVudHMuIEl0IHZhbGlkYXRlcwogdXNlcm5hbWUvcGFzc3dvcmQgcGFpcnMgYWdhaW5zdCBhIGdyYXBoIGRhdGFiYXNlLCB3aGljaCBtdXN0IGJlIHByb3ZpZGVkIHRvIGl0IGFzIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCiAKIFtzb3VyY2UseWFtbF0KQEAgLTE0NjgsNyArMTE1OSw3IEBACiBbSU5GT10gR3JlbWxpblNlcnZlciAtCiAgICAgICAgICBcLCwsLwogICAgICAgICAgKG8gbykKLS0tLS0tb09Pby0oMyktb09Pby0tLS0tCistLS0tLW9PT28tKDQpLW9PT28tLS0tLQogCiBbSU5GT10gR3JlbWxpblNlcnZlciAtIENvbmZpZ3VyaW5nIEdyZW1saW4gU2VydmVyIGZyb20gY29uZi9ncmVtbGluLXNlcnZlci1zZWN1cmUueWFtbAogLi4uCkBAIC0xNTAxLDcgKzExOTIsNyBAQAogW0lORk9dIEdyZW1saW5TZXJ2ZXIgLQogICAgICAgICAgXCwsLC8KICAgICAgICAgIChvIG8pCi0tLS0tLW9PT28tKDMpLW9PT28tLS0tLQorLS0tLS1vT09vLSg0KS1vT09vLS0tLS0KIAogW0lORk9dIEdyZW1saW5TZXJ2ZXIgLSBDb25maWd1cmluZyBHcmVtbGluIFNlcnZlciBmcm9tIGNvbmYvZ3JlbWxpbi1zZXJ2ZXItc2VjdXJlLnlhbWwKIC4uLgpAQCAtMTU2Miw1OSArMTI1Myw2IEBACiBUaW5rZXJHcmFwaCB0byBwZXJzaXN0IHRoYXQgZGF0YSBvciB0byBtYW51YWxseSBwZXJzaXN0IGl0IChlLmcuIHdyaXRlIHRoZSBncmFwaCBkYXRhIHRvIEdyeW8pIG9uY2UgY2hhbmdlcyBhcmUKIGNvbXBsZXRlLiBBbHRlcm5hdGl2ZWx5LCB1c2UgYSBwZXJzaXN0ZW50IGdyYXBoIHRvIGhvbGQgdGhlIGNyZWRlbnRpYWxzIGFuZCBjb25maWd1cmUgR3JlbWxpbiBTZXJ2ZXIgYWNjb3JkaW5nbHkuCiAKLVtba3JiNWF1dGhlbnRpY2F0b3JdXQotPT09PSBLZXJiZXJvcyBBdXRoZW50aWNhdGlvbgotCi1UaGUgYEtyYjVBdXRoZW50aWNhdG9yYCBpbXBsZW1lbnRzIHRoZSAiR1NTQVBJIiBTQVNMIG1lY2hhbmlzbSAoaS5lLiBLZXJiZXJvcykgdG8gYXV0aGVudGljYXRlIGEgcmVxdWVzdCBmcm9tIGEgR3JlbWxpbgotY2xpZW50LiAgSXQgY2FuIGJlIGFwcGxpZWQgaW4gYW4gZXhpc3RpbmcgS2VyYmVyb3MgZW52aXJvbm1lbnQgYW5kIHZhbGlkYXRlcyB3aGV0aGVyIGEKLWxpbms6aHR0cHM6Ly93d3cucm9ndWVseW5uLmNvbS93b3Jkcy9leHBsYWluLWxpa2UtaW0tNS1rZXJiZXJvcy9bdmFsaWQgYXV0aGVudGljYXRpb24gcHJvb2YgYW5kIHNlcnZpY2UgdGlja2V0IGFyZQotb2ZmZXJlZF0uCi0KLVtzb3VyY2UseWFtbF0KLWF1dGhlbnRpY2F0aW9uOiB7Ci0gIGF1dGhlbnRpY2F0b3I6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguS3JiNUF1dGhlbnRpY2F0b3IsCi0gIGNvbmZpZzogewotICAgIHByaW5jaXBhbDogZ3JlbWxpbnNlcnZlci9ob3N0bmFtZS55b3VyLm9yZ0BZT1VSLlJFQUxNLAotICAgIGtleXRhYjogL2V0Yy9zZWN1cml0eS9rZXl0YWJzL2dyZW1saW5zZXJ2ZXIuc2VydmljZS5rZXl0YWJ9fQotCi1gS3JiNUF1dGhlbnRpY2F0b3JgIG5lZWRzIGEgS2VyYmVyb3Mgc2VydmljZSBwcmluY2lwYWwgYW5kIGEga2V5dGFiIHRoYXQgaG9sZHMgdGhlIHNlY3JldCBrZXkgZm9yIHRoYXQgcHJpbmNpcGFsLiBUaGUga2V5dGFiCi1sb2NhdGlvbiBhbmQgc2VydmljZSBuYW1lLCBlLmcuIGdyZW1saW5zZXJ2ZXIsIGFyZSBmcmVlIHRvIGJlIGNob3Nlbi4gYEtyYjVBdXRoZW50aWNhdG9yYCBmaW5kcyB0aGUgS0RDJ3MgaG9zdG5hbWUgYW5kCi1wb3J0IGZyb20gdGhlIGtyYjUuY29uZiBmaWxlIHdpdGggS2VyYmVyb3MgY29uZmlndXJhdGlvbnMuIFRoaXMgZmlsZSBjYW4gcmVzaWRlIGF0IGVpdGhlciB0aGUKLWh0dHBzOi8vd2ViLm1pdC5lZHUva2VyYmVyb3Mva3JiNS1kZXZlbC9kb2MvbWl0SzVkZWZhdWx0cy5odG1sW2RlZmF1bHQgbG9jYXRpb25dIG9yIGEgbG9jYXRpb24gdG8gYmUgc3BlY2lmaWVkIGFzIGEKLXN5c3RlbSBwcm9wZXJ0eSBpbiB0aGUgSkFWQV9PUFRJT05TIGVudmlyb25tZW50IHZhcmlhYmxlIG9mIEdyZW1saW4gU2VydmVyOgotCi1bc291cmNlLCBiYXNoXQotZXhwb3J0IEpBVkFfT1BUSU9OUz0iJHtKQVZBX09QVElPTlN9IC1YbXM1MTJtIC1YbXg0MDk2bSAtRGphdmEuc2VjdXJpdHkua3JiNS5jb25mPS9ldGMva3JiNS5jb25mIgotCi1HcmVtbGluIGNsaWVudHMgaGF2ZSB0byBzcGVjaWZ5IHRoZSBzZXJ2aWNlIG5hbWUgYXMgdGhlIGBwcm90b2NvbGAgY29ubmVjdGlvbiBwYXJhbWV0ZXIuIEZvciBHcmVtbGluLUNvbnNvbGUgdGhlCi1gcHJvdG9jb2xgIGlzIGFuIGVudHJ5IGluIHRoZSByZW1vdGUueWFtbCBmaWxlLCBmb3IgR3JlbWxpbi1qYXZhIHRoZSBjbGllbnQgYnVpbGRlciBoYXMgYSBgcHJvdG9jb2woKWAgbWV0aG9kLgotCi1JbiBhZGRpdGlvbiB0byB0aGUgYHByb3RvY29sYCwgdGhlIEdyZW1saW4gY2xpZW50IG5lZWRzIHRvIHNwZWNpZnkgYSBgamFhc0VudHJ5YCwgYW4gZW50cnkgaW4gdGhlCi1saW5rOmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0phdmFfQXV0aGVudGljYXRpb25fYW5kX0F1dGhvcml6YXRpb25fU2VydmljZVtKQUFTXSBjb25maWd1cmF0aW9uIGZpbGUuIEFzIGEKLXN0YXJ0IG9uZSBjYW4gZGVmaW5lIGEgY29uZi9ncmVtbGluLWphYXMuY29uZiBmaWxlIHdpdGggYSBgR3JlbWxpbkNvbnNvbGVgIGphYXNFbnRyeToKLQotW3NvdXJjZSwgamFhc10KLUdyZW1saW5Db25zb2xlIHsKLSAgY29tLnN1bi5zZWN1cml0eS5hdXRoLm1vZHVsZS5LcmI1TG9naW5Nb2R1bGUgcmVxdWlyZWQKLSAgZG9Ob3RQcm9tcHQ9dHJ1ZQotICB1c2VUaWNrZXRDYWNoZT10cnVlOwotfTsKLQotVGhpcyBjb25maWd1cmF0aW9uIHRlbGxzIEdyZW1saW4gQ29uc29sZSB0byBwYXNzIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RzIGZyb20gR3JlbWxpbiBTZXJ2ZXIgdG8gdGhlIEtyYjVMb2dpbk1vZHVsZSwgd2hpY2ggaXMKLXBhcnQgb2YgdGhlIGphdmEgc3RhbmRhcmQgbGlicmFyeS4gVGhlIEtyYjVMb2dpbk1vZHVsZSBkb2VzIG5vdCBwcm9tcHQgdGhlIHVzZXIgZm9yIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGJ1dCB1c2VzIHRoZQotdGlja2V0IGNhY2hlIHRoYXQgaXMgbm9ybWFsbHkgcmVmcmVzaGVkIHdoZW4gYSB1c2VyIGxvZ3MgaW4gdG8gYSBob3N0IHdpdGhpbiB0aGUgS2VyYmVyb3MgcmVhbG0uCi0KLVRoZSBHcmVtbGluIGNsaWVudCBuZWVkcyB0aGUgbG9jYXRpb24gb2YgdGhlIEpBQVMgY29uZmlndXJhdGlvbiBmaWxlIHRvIGJlIHBhc3NlZCBhcyBhIHN5c3RlbSBwcm9wZXJ0eSB0byB0aGUgSlZNLiBGb3IKLUdyZW1saW4tQ29uc29sZSB0aGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBwYXNzIGl0IHRvIHRoZSBydW4gc2NyaXB0IHZpYSB0aGUgSkFWQV9PUFRJT05TIGVudmlyb25tZW50IHByb3BlcnR5LgotSWYgdGhlIGtyYjUuY29uZiBLZXJiZXJvcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgbm90IGF2YWlsYWJsZSBmcm9tIHRoZQotaHR0cHM6Ly93ZWIubWl0LmVkdS9rZXJiZXJvcy9rcmI1LWRldmVsL2RvYy9taXRLNWRlZmF1bHRzLmh0bWxbZGVmYXVsdCBsb2NhdGlvbl0gaXQgaGFzIHRvIGJlIHByb3ZpZGVkIGFzIGEgc3lzdGVtCi1wcm9wZXJ0eSBhcyB3ZWxsOgotCi1bc291cmNlLCBiYXNoXQotSkFBU19PUFRJT049Ii1EamF2YS5zZWN1cml0eS5hdXRoLmxvZ2luLmNvbmZpZz1jb25mL2dyZW1saW4tamFhcy5jb25mIgotS1JCNV9PUFRJT049Ii1EamF2YS5zZWN1cml0eS5rcmI1LmNvbmY9L2V0Yy9rcmI1LmNvbmYiCi1leHBvcnQgSkFWQV9PUFRJT05TPSIke0pBVkFfT1BUSU9OU30gJHtLUkI1X09QVElPTn0gJHtKQUFTX09QVElPTn0iCi0KIFtbYXV0aG9yaXphdGlvbl1dCiA9PT09IEF1dGhvcml6YXRpb24KIApAQCAtMTY2OCw2ICsxMzA2LDggQEAKIGV4ZWN1dGlvbiBvZiBgR3JhcGhGYWN0b3J5Lm9wZW4oKWAgb3IgYEdyYXBoVHJhdmVyc2FsU291cmNlLmdldEdyYXBoKClgIG1ldGhvZHMgd2l0aG91dCByZXNvcnRpbmcgdG8gVGlua2VyUG9wCiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzICh0aGF0IGlzLCBpbnRlcm5hbCBBUEkncyB0aGF0IGNhbiBjaGFuZ2Ugd2l0aG91dCBub3RpY2UpLgogCitJTVBPUlRBTlQ6IDQuMC4wLWJldGEuMiBSZWxlYXNlIC0gVGhlc2UgYXV0aG9yaXphdGlvbiBtZWNoYW5pc21zIGRvbid0IGN1cnJlbnRseSBhcHBseSBkdWUgdG8gdGhlIHJlbW92YWwgb2YgQnl0ZWNvZGUuCisKIFRoZSB0aHJlZSBtZWNoYW5pc21zIGZvciBhdXRob3JpemF0aW9uIGVhY2ggaGF2ZSB0aGVpciBtZXJpdHMgaW4gdGVybXMgb2Ygc2ltcGxpY2l0eSBhbmQgZmxleGliaWxpdHkuIFRoZSB0YWJsZSBiZWxvdwogZ2l2ZXMgYW4gb3ZlcnZpZXcuCiAKQEAgLTE2OTksOCArMTMzOSw4IEBACiBleGVjdXRpb24gdGltZSBhcyBhIHJlc3VsdCBvZiBhbiBhcHBsaWVkIGBTdHJhdGVneWAgKGRlbm90ZWQgYXMgJ2h5YnJpZCcgYnl0ZWNvZGUgYW5hbHlzaXMgaW4gdGhlIHRhYmxlKS4gQSBjb2RlCiBleGFtcGxlIHB1cnN1aW5nIHRoZSBmb3JtZXIgb3B0aW9uIGlzIHByb3ZpZGVkIGluIHRoZSA8PGF1dGh6LWNvZGUtZXhhbXBsZSwgbmV4dCBzZWN0aW9uPj4uCiAKLU5PVEU6IEJvdGggdGhlIHBhc3NpdmUgYW5kIGFjdGl2ZSBhdXRob3JpemF0aW9uIHNvbHV0aW9ucyBuZWVkIHRvIGFuYWx5emUgdGhlIGdyZW1saW4gYnl0ZWNvZGUgb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3QKLWZvciB1bndhbnRlZCByZW1vdmFsIG9mIHJlc3RyaWN0aW5nIFN0cmF0ZWdpZXMuCitJTVBPUlRBTlQ6IDQuMC4wLWJldGEuMiBSZWxlYXNlIC0gcGFzc2l2ZSBhbmQgYWN0aXZlIGF1dGhvcml6YXRpb24gbWVjaGFuaXNtcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJldGEKK2JlY2F1c2UgYnl0ZWNvZGUgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBHcmVtbGluTGFuZy4KIAogTk9URTogR3JlbWxpbiBTZXJ2ZXIgaXMgbm90IHNoaXBwZWQgd2l0aCBgQXV0aG9yaXplcmAgaW1wbGVtZW50YXRpb25zLCBiZWNhdXNlIHRoZXNlIHdvdWxkIGhlYXZpbHkgZGVwZW5kIG9uIHRoZSBleHRlcm5hbAogc3lzdGVtcyB0byBpbnRlZ3JhdGUgd2l0aCwgZS5nLiBsaW5rOmh0dHBzOi8vbGRhcC5jb20vZGlyZWN0b3J5LXNlcnZlcnMvW0xEQVAgc3lzdGVtc10gb3IKQEAgLTE3NDcsNyArMTM4Nyw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlN1YmdyYXBoU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuQnl0ZWNvZGVIZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3MuQXV0aG9yaXphdGlvblNldHRpbmdzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRlZFVzZXI7CiAKQEAgLTE5OTUsMTAgKzE2MzQsMTAgQEAKIGNvbnRpbnVvdXNseToKIAogW3NvdXJjZSxncm9vdnldCi1ncmVtbGluPiA6cmVtb3RlIGNvbm5lY3QgdGlua2VycG9wLnNlcnZlciBjb25mL3JlbW90ZS55YW1sCi09PT5Db25maWd1cmVkIGxvY2FsaG9zdC8xMjcuMC4wLjE6ODE4MgotZ3JlbWxpbj4gOj4gd2hpbGUodHJ1ZSkgeyB9Ci09PT5FdmFsdWF0aW9uIGV4Y2VlZGVkIHRoZSBjb25maWd1cmVkICdldmFsdWF0aW9uVGltZW91dCcgdGhyZXNob2xkIG9mIDMwMDAwIG1zIG9yIGV2YWx1YXRpb24gd2FzIG90aGVyd2lzZSBjYW5jZWxsZWQgZGlyZWN0bHkgZm9yIHJlcXVlc3QgW3doaWxlKHRydWUpIHt9XQorY2xpZW50ID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydCg4MTgyKS5jcmVhdGUoKS5jb25uZWN0KCkKKz09Pm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudCRDbHVzdGVyZWRDbGllbnRANDJmZjlhNzcKK2NsaWVudC5zdWJtaXQoIndoaWxlKHRydWUpIHsgfSIpCitvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb246IEEgdGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdHJhdmVyc2FsIGV2YWx1YXRpb24gb2YgW1JlcXVlc3RNZXNzYWdleywgZmllbGRzPXtiaW5kaW5ncz17fSwgbGFuZ3VhZ2U9Z3JlbWxpbi1ncm9vdnksIGJhdGNoU2l6ZT02NH0sIGdyZW1saW49d2hpbGUodHJ1ZSkgeyB9fV0gLSBjb25zaWRlciBpbmNyZWFzaW5nIHRoZSBsaW1pdCBnaXZlbiB0byBldmFsdWF0aW9uVGltZW91dAogCiBUaGUgYEdyb292eUNvbXBpbGVyR3JlbWxpblBsdWdpbmAgaGFzIGEgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9uczoKIApAQCAtMjE1OSwxOSArMTc5OCw5IEBACiAqKiBOb3RlIHRoYXQgYGV2YWx1YXRpb25UaW1lb3V0YCBjYW4gb25seSBhdHRlbXB0IHRvIGludGVycnVwdCB0aGUgZXZhbHVhdGlvbiBvbiB0aW1lb3V0LiAgSXQgYWxsb3dzIEdyZW1saW4KIFNlcnZlciB0byAiaWdub3JlIiB0aGUgcmVzdWx0IG9mIHRoYXQgZXZhbHVhdGlvbiwgd2hpY2ggbWVhbnMgdGhlIHRocmVhZCBpbiB0aGUgYGdyZW1saW5Qb29sYCB0aGF0IGRpZCB0aGUgZXZhbHVhdGlvbgogbWF5IHN0aWxsIGJlIGNvbnN1bWVkIGFmdGVyIHRoZSB0aW1lb3V0IGlmIGludGVycnVwdGlvbiBkb2VzIG5vdCBzdWNjZWVkIG9uIHRoZSB0aHJlYWQuCi0qIFdoZW4gdXNpbmcgc2Vzc2lvbnMsIHRoZXJlIGFyZSBkaWZmZXJlbnQgb3B0aW9ucyB0byBjb25zaWRlciBkZXBlbmRpbmcgb24gdGhlIGBDaGFubmVsaXplcmAgaW1wbGVtZW50YXRpb24gYmVpbmcKLXVzZWQ6Ci0qKiBgV2ViU29ja2V0Q2hhbm5lbGl6ZXJgIGFuZCBgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJgIC0gQm90aCBvZiB0aGVzZSBjaGFubmVsaXplcnMgdXNlIHRoZSBgZ3JlbWxpblBvb2xgIG9ubHkgZm9yCi1zZXNzaW9ubGVzcyByZXF1ZXN0cyBhbmQgY29uc3RydWN0IGEgc2luZ2xlIHRocmVhZGVkIHBvb2wgZm9yIGVhY2ggc2Vzc2lvbiBjcmVhdGVkLiBJbiB0aGlzIHdheSwgdGhlc2UgY2hhbm5lbGl6ZXJzCi10ZW5kIHRvIG9wdGltaXplIHNlc3Npb25zIHRvIGJlIGxvbmctbGl2ZWQuIEZvciBzaG9ydC1saXZlZCBzZXNzaW9ucywgd2hpY2ggbWF5IGJlIHR5cGljYWwgd2hlbiB1c2luZyBieXRlY29kZSBiYXNlZAotcmVtb3RlIHRyYW5zYWN0aW9ucywgcXVpY2tseSBjcmVhdGluZyBhbmQgZGVzdHJveWluZyB0aGVzZSBzZXNzaW9ucyBjYW4gYmUgZXhwZW5zaXZlLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGVyZSB3aWxsIGJlCi1pbmNyZWFzZWQgZ2FyYmFnZSBjb2xsZWN0aW9uIHRpbWVzIGFuZCBmcmVxdWVuY3kgYXMgd2VsbCBhcyBhIGdlbmVyYWwgaW5jcmVhc2UgaW4gb3ZlcmFsbCBzZXJ2ZXIgcHJvY2Vzc2luZy4KLSoqIGBVbmlmaWVkQ2hhbm5lbGl6ZXJgIC0gVGhlIHRocmVhZHMgb2YgdGhlIGBncmVtbGluUG9vbGAgYXJlIHVzZWQgdG8gc2VydmljZSBib3RoIHNlc3Npb25zIGFuZCBzZXNzaW9ubGVzcyByZXF1ZXN0cy4KLVdpdGggYSBjb21tb24gdGhyZWFkIHBvb2wsIHRoaXMgY2hhbm5lbGl6ZXIgaXMgYSBiZXR0ZXIgY2hvaWNlIHdoZW4gdXNpbmcgbG90cyBvZiBzaG9ydC1saXZlZCBzZXNzaW9ucyBhcyBjb21wYXJlZCB0bwotYFdlYlNvY2tldENoYW5uZWxpemVyYCBhbmQgYFdzQW5kSHR0cENoYW5uZWxpemVyYCwgYmVjYXVzZSB0aGVyZSBpcyBsZXNzIGNvc3QgaW4gc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHNlc3Npb25zLiBJdCBpcwotaW1wb3J0YW50IHRob3VnaCB0byB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCB3b3JrbG9hZCBmb3IgdGhlIHNlcnZlciBhbmQgcGxhbiB0aGUgc2l6ZSBhY2NvcmRpbmdseSB0byBlbnN1cmUgdGhhdCB0aGUKLXNlcnZlciBkb2VzIG5vdCBuZWVkIHRvIHdhaXQgZm9yIGFuIGV4dGVuZGVkIHBlcmlvZCBvZiB0aW1lIGZvciBhIHRocmVhZCB0byBiZSBhdmFpbGFibGUgdG8gcHJvY2VzcyB0aGUgcXVldWUgb2YKLWluY29taW5nIHJlcXVlc3RzLgorKiBXaGVuIHVzaW5nIHRyYW5zYWN0aW9ucywgdGhlIHNlcnZlciBkZWRpY2F0ZXMgcmVzb3VyY2VzIHRvIG1haW50YWluIHRyYW5zYWN0aW9uIHN0YXRlIGZvciBlYWNoIG9wZW4gdHJhbnNhY3Rpb24uIEZvcgoraGlnaCBjb25jdXJyZW5jeSB3b3JrbG9hZHMgd2l0aCBtYW55IG9wZW4gdHJhbnNhY3Rpb25zLCB0aGUgc2VydmVyIG1heSBleHBlcmllbmNlIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UsIGluY3JlYXNlZAorZ2FyYmFnZSBjb2xsZWN0aW9uIHRpbWVzIGFuZCBmcmVxdWVuY3kgYXMgd2VsbCBhcyBhIGdlbmVyYWwgaW5jcmVhc2UgaW4gb3ZlcmFsbCBzZXJ2ZXIgcHJvY2Vzc2luZy4KICogR3JhcGggZWxlbWVudCBzZXJpYWxpemF0aW9uIGZvciBgVmVydGV4YCBhbmQgYEVkZ2VgIGNhbiBiZSBleHBlbnNpdmUsIGFzIHRoZWlyIGRhdGEgc3RydWN0dXJlcyBhcmUgY29tcGxleCBnaXZlbiB0aGUKIHBvc3NpYmxlIGV4aXN0ZW5jZSBvZiBtdWx0aS1wcm9wZXJ0aWVzIGFuZCBtZXRhLXByb3BlcnRpZXMuIFdoZW4gcmV0dXJuaW5nIGRhdGEgZnJvbSBHcmVtbGluIFNlcnZlciBvbmx5IHJldHVybiB0aGUKIGRhdGEgdGhhdCBpcyByZXF1aXJlZC4gRm9yIGV4YW1wbGUsIGlmIG9ubHkgdHdvIHByb3BlcnRpZXMgb2YgYSBgVmVydGV4YCBhcmUgbmVlZGVkIHRoZW4gc2ltcGx5IHJldHVybiB0aGUgdHdvIHJhdGhlcgpAQCAtMjE5OCwyMCArMTgyNywyMCBAQAogKiogQ29uc2lkZXIgdGhlIHNoYXBlIG9mIHF1ZXJ5IHJlc3VsdHMgYXMgdGhleSBjYW4gaGF2ZSBhbiBpbXBhY3Qgb24gc2VydmVyIHBlcmZvcm1hbmNlLiBUaGUgInNoYXBlIiByZWZlcnMgdG8gdGhlIGZvcm0KIG9mIHRoZSByZXN1bHQgZ2l2ZW4gdGhlIHF1ZXJ5LiBGb3IgZXhhbXBsZSwgYGcuVigpYCBhbmQgYGcuVigpLmZvbGQoKWAgYm90aCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyAoaS5lLiBhbGwgdGhlCiB2ZXJ0aWNlcyBpbiB0aGUgZ3JhcGgpIGJ1dCB0aGUgZm9ybWVyIHJldHVybnMgdGhlbSBvbmUgYXQgYSB0aW1lIGluIGEgc3RyZWFtIGFuZCB0aGUgbGF0dGVyIGNvbGxlY3RzIHRoZW0gYWxsIGluCi1tZW1vcnkgaW4gYSBgTGlzdGAgYW5kIHRoZW4gcmV0dXJucyB0aGUgb25lIGBMaXN0YCByZXN1bHQuIFdyaXRpbmcgcXVlcmllcyBpbiB3YXlzIHRoYXQgYWxsb3cgcmVzdWx0cyB0aGF0IGNhbiBzdHJlYW0KLShvbmx5IGFwcGxpZXMgZm9yIHdlYnNvY2tldHMpIGlzIHByZWZlcmFibGUgYW5kIHdpbGwgYWxsb3cgdGhlIHNlcnZlciB0byBwZXJmb3JtIGJldHRlci4gQW5vdGhlciBhc3BlY3Qgb2YgInNoYXBlIgotY2FuIGNvbWUgaW50byBwbGF5IHdoZW4gcmV0dXJuaW5nIGRhdGEgb2YgaW5kaXZpZHVhbCBncmFwaCBlbGVtZW50cy4gRm9yIGV4YW1wbGUsIHRoZSBgZy5WKClgIGZvcm0gb2YgcXVlcnkgd2lsbCBzdHJlYW0sCi1idXQgaWYgZWFjaCBgVmVydGV4YCByZXR1cm5lZCBoYXMgbG90cyBvZiBwcm9wZXJ0aWVzIChlLmcuIHByb3BlcnRpZXMgd2l0aCBsYXJnZSBzdHJpbmdzIG9yIGhlYXZ5IGJsb2JzKSwgdGhpcyBjb3VsZAotdHJpZ2dlciBzY2VuYXJpb3Mgd2hlcmUgZWFjaCBzdHJlYW1lZCBiYXRjaCBpbW1lZGlhdGVseSBleGNlZWRzIGB3cml0ZUJ1ZmZlckhpZ2hXYXRlck1hcmtgLiBTaW1wbHkgZXhjZWVkaW5nIHRoZQotYHdyaXRlQnVmZmVySGlnaFdhdGVyTWFya2AgbWF5IG5vdCB0cmlnZ2VyIGEgcGF1c2UgYXMgdGhlIHNlcnZlciBtYXkgcXVpY2tseSBmbHVzaCB0aGUgYnVmZmVyIGJlZm9yZSB0aGUgbmV4dCBiYXRjaCwgYnV0Ci1vbmUgY291bGQgc2VlIGhvdyBlYXNpbHkgYSB3cml0ZSBwYXVzZSBjb3VsZCBiZSB0cmlnZ2VyZWQgaW4gdGhhdCBzdGF0ZS4gSXQgY291bGQgbWFrZSBzZW5zZSB0byBjb25maWd1cmUgYSBzbWFsbGVyCi1gYmF0Y2hTaXplYCBmb3IgcXVlcmllcyByZXN1bHRzIHRoYXQgaGF2ZSBoZWF2eSBpbmRpdmlkdWFsIG9iamVjdHMgaW4gdGhlbSBhcyB0aGF0IHdvdWxkIHJlZHVjZSB0aGUgYnl0ZSBzaXplIG9mIHRoZQotYmF0Y2ggYW5kIGFsbG93IGJ1ZmZlciBmbHVzaGVzIHRvIGhhcHBlbiBtb3JlIG9mdGVuICh0aG91Z2ggdGhhdCBtYXkgYmUgYSBjb3N0IGluIGFuZCBvZiBpdHNlbGYpLgorbWVtb3J5IGluIGEgYExpc3RgIGFuZCB0aGVuIHJldHVybnMgdGhlIG9uZSBgTGlzdGAgcmVzdWx0LiBXcml0aW5nIHF1ZXJpZXMgaW4gd2F5cyB0aGF0IGFsbG93IHJlc3VsdHMgdG8gc3RyZWFtIGlzCitwcmVmZXJhYmxlIGFuZCB3aWxsIGFsbG93IHRoZSBzZXJ2ZXIgdG8gcGVyZm9ybSBiZXR0ZXIuIEFub3RoZXIgYXNwZWN0IG9mICJzaGFwZSIgY2FuIGNvbWUgaW50byBwbGF5IHdoZW4gcmV0dXJuaW5nIGRhdGEKK29mIGluZGl2aWR1YWwgZ3JhcGggZWxlbWVudHMuIEZvciBleGFtcGxlLCB0aGUgYGcuVigpYCBmb3JtIG9mIHF1ZXJ5IHdpbGwgc3RyZWFtLCBidXQgaWYgZWFjaCBgVmVydGV4YCByZXR1cm5lZCBoYXMgbG90cworb2YgcHJvcGVydGllcyAoZS5nLiBwcm9wZXJ0aWVzIHdpdGggbGFyZ2Ugc3RyaW5ncyBvciBoZWF2eSBibG9icyksIHRoaXMgY291bGQgdHJpZ2dlciBzY2VuYXJpb3Mgd2hlcmUgZWFjaCBzdHJlYW1lZAorYmF0Y2ggaW1tZWRpYXRlbHkgZXhjZWVkcyBgd3JpdGVCdWZmZXJIaWdoV2F0ZXJNYXJrYC4gU2ltcGx5IGV4Y2VlZGluZyB0aGUgYHdyaXRlQnVmZmVySGlnaFdhdGVyTWFya2AgbWF5IG5vdCB0cmlnZ2VyIGEKK3BhdXNlIGFzIHRoZSBzZXJ2ZXIgbWF5IHF1aWNrbHkgZmx1c2ggdGhlIGJ1ZmZlciBiZWZvcmUgdGhlIG5leHQgYmF0Y2gsIGJ1dCBvbmUgY291bGQgc2VlIGhvdyBlYXNpbHkgYSB3cml0ZSBwYXVzZSBjb3VsZAorYmUgdHJpZ2dlcmVkIGluIHRoYXQgc3RhdGUuIEl0IGNvdWxkIG1ha2Ugc2Vuc2UgdG8gY29uZmlndXJlIGEgc21hbGxlciBgYmF0Y2hTaXplYCBmb3IgcXVlcmllcyByZXN1bHRzIHRoYXQgaGF2ZSBoZWF2eQoraW5kaXZpZHVhbCBvYmplY3RzIGluIHRoZW0gYXMgdGhhdCB3b3VsZCByZWR1Y2UgdGhlIGJ5dGUgc2l6ZSBvZiB0aGUgYmF0Y2ggYW5kIGFsbG93IGJ1ZmZlciBmbHVzaGVzIHRvIGhhcHBlbiBtb3JlIG9mdGVuCisodGhvdWdoIHRoYXQgbWF5IGJlIGEgY29zdCBpbiBhbmQgb2YgaXRzZWxmKS4KIAogW1twYXJhbWV0ZXJpemVkLXNjcmlwdHNdXQogPT09PSBQYXJhbWV0ZXJpemVkIFNjcmlwdHMKIAotaW1hZ2U6Z3JlbWxpbi1wYXJhbWV0ZXJpemVkLnBuZ1t3aWR0aD0xNTAsZmxvYXQ9bGVmdF0gSWYgdXNpbmcgdGhlIHN0YW5kYXJkIGBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lYCBpbiBHcmVtbGluCitpbWFnZTpncmVtbGluLXBhcmFtZXRlcml6ZWQucG5nW3dpZHRoPTE1MCxmbG9hdD1sZWZ0XSBJZiB1c2luZyBgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZWAgaW4gR3JlbWxpbgogU2VydmVyLCBpdCBpcyBpbXBlcmF0aXZlIHRvIHVzZSBzY3JpcHQgcGFyYW1ldGVyaXphdGlvbi4gUGVyaW9kLiBUaGVyZSBhcmUgYXQgbGVhc3QgdHdvIGdvb2QKIHJlYXNvbnMgZm9yIGRvaW5nIHNvOiBzY3JpcHQgY2FjaGluZyBhbmQgcHJvdGVjdGlvbiBmcm9tICJHcmVtbGluIGluamVjdGlvbiIgKGNvbmNlcHR1YWxseSB0aGUgc2FtZSBhcyB0aGUgbm90aW9uIG9mCiBTUUwgaW5qZWN0aW9uKS4KQEAgLTIyMjIsNyArMTg1MSw3IEBACiBjb25jZXJucyBvZiB0aGlzIHNlY3Rpb24uIFdoZW4gY29uc2lkZXJpbmcgcGFyYW1ldGVyaXphdGlvbiwgdXNlcnMgc2hvdWxkIGFsc28gY29uc2lkZXIgdGhlIGdyYXBoIGRhdGFiYXNlIHRoZXkgYXJlCiB1c2luZyB0byBkZXRlcm1pbmUgaWYgaXQgaGFzIG5hdGl2ZSBtZWNoYW5pc21zIHRoYXQgcHJlY2x1ZGUgdGhlIG5lZWQgZm9yIHBhcmFtZXRlcml6YXRpb24uCiAKLVdpdGggcmVzcGVjdCB0byBjYWNoaW5nLCBHcmVtbGluIFNlcnZlciBjYWNoZXMgYWxsIHNjcmlwdHMgdGhhdCBhcmUgcGFzc2VkIHRvIGl0LiAgVGhlIGNhY2hlIGlzIGtleWVkIGJhc2VkIG9uIHRoZSBhCitXaXRoIHJlc3BlY3QgdG8gY2FjaGluZywgR3JlbWxpbiBTZXJ2ZXIgY2FjaGVzIGFsbCBzY3JpcHRzIHRoYXQgYXJlIHBhc3NlZCB0byBpdC4gIFRoZSBjYWNoZSBpcyBrZXllZCBiYXNlZCBvbiB0aGUKIGhhc2ggb2YgdGhlIHNjcmlwdC4gIFRoZXJlZm9yZSBgZy5WKDEpYCBhbmQgYGcuVigyKWAgd2lsbCBiZSByZWNvZ25pemVkIGFzIHR3byBzZXBhcmF0ZSBzY3JpcHRzIGluIHRoZSBjYWNoZS4gIElmIHRoYXQKIHNjcmlwdCBpcyBwYXJhbWV0ZXJpemVkIHRvIGBnLlYoeClgIHdoZXJlIGB4YCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgZnJvbSB0aGUgY2xpZW50LCB0aGVyZSB3aWxsIGJlIG5vIGFkZGl0aW9uYWwKIGNvbXBpbGF0aW9uIGNvc3QgZm9yIGZ1dHVyZSByZXF1ZXN0cyBvbiB0aGF0IHNjcmlwdC4gIENvbXBpbGF0aW9uIG9mIGEgc2NyaXB0IHNob3VsZCBiZSBjb25zaWRlcmVkICJleHBlbnNpdmUiIGFuZApAQCAtMjI3NSwyMSArMTkwNCwxNCBAQAogY2xpZW50LnN1Ym1pdChxdWVyeSwgcGFyYW1zKTsKIC0tLS0KIAotR3JlbWxpbiBpbmplY3Rpb24gc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSB3aXRoIGBCeXRlY29kZWAgYmFzZWQgdHJhdmVyc2FscyAtIG9ubHkgc2NyaXB0cyAtIGJlY2F1c2UgYEJ5dGVjb2RlYAotdHJhdmVyc2FscyB3aWxsIHRyZWF0IGFsbCBhcmd1bWVudHMgYXMgbGl0ZXJhbCB2YWx1ZXMuIFRoZXJlIGlzIHBvdGVudGlhbCBmb3IgY29uY2VybiBpZiBsYW1iZGEgYmFzZWQgc3RlcHMgYXJlCi11dGlsaXplZCBhcyB0aGV5IGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUsIHdoaWNoIGlzIHN0cmluZyBiYXNlZCwgYnV0IGNvbmZpZ3VyaW5nIGBUcmF2ZXJzYWxTb3VyY2VgIGluc3RhbmNlcyB3aXRoCi1gTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneWAsIHdoaWNoIHByZXZlbnRzIGxhbWJkYXMgYWxsIHRvZ2V0aGVyLCB1c2luZyBhIGdyYXBoIHRoYXQgZG9lcyBub3QgYWxsb3cgbGFtYmRhcyBhdCBhbGwsIG9yCi1jb25maWd1cmluZyBhcHByb3ByaWF0ZSA8PHNjcmlwdC1leGVjdXRpb24sc2FuZGJveCBvcHRpb25zPj4gaW4gR3JlbWxpbiBTZXJ2ZXIgKG9yIHN1Y2ggb3B0aW9ucyBhdmFpbGFibGUgdG8gdGhlIGdyYXBoCi1kYXRhYmFzZSBpbiB1c2UpIHNob3VsZCBlYWNoIGhlbHAgbWl0aWdhdGUgcHJvYmxlbXMgcmVsYXRlZCB0byB0aGlzIGlzc3VlLgotCi1TY3JpcHRzIGNyZWF0ZSBjbGFzc2VzIHdoaWNoIGdldCBsb2FkZWQgdG8gdGhlIEpWTSBtZXRhc3BhY2UgYW5kIHRvIGEgYENsYXNzYCBjYWNoZS4gRm9yIHRob3NlIHVzaW5nIHNjcmlwdAorR3Jvb3Z5IHNjcmlwdHMgY3JlYXRlIGNsYXNzZXMgd2hpY2ggZ2V0IGxvYWRlZCB0byB0aGUgSlZNIG1ldGFzcGFjZSBhbmQgdG8gYSBgQ2xhc3NgIGNhY2hlLiBGb3IgdGhvc2UgdXNpbmcgc2NyaXB0CiBwYXJhbWV0ZXJpemF0aW9uLCBhIHR5cGljYWwgYXBwbGljYXRpb24gc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbiBvdmVyYWJ1bmRhbmNlIG9mIHByZXNzdXJlIG9uIHRoZXNlIHR3byBjb21wb25lbnRzIG9mCiBHcmVtbGluIFNlcnZlcidzIG1lbW9yeSBmb290cHJpbnQuIE9uIHRoZSBvdGhlciBoYW5kLCBpdCdzIG5vdCB0b28gaGFyZCB0byBpbWFnaW5lIGEgc2l0dWF0aW9uIHdoZXJlIHByb2JsZW1zIG1pZ2h0CiBlbWVyZ2U6CiAKICogQW4gYXBwbGljYXRpb24gdXNlIGNhc2UgbWFrZXMgcGFyYW1ldGVyaXphdGlvbiBpbXBvc3NpYmxlIGFuZCB0aGVyZWZvcmUgYWxsIHNjcmlwdHMgYXJlIHVuaXF1ZS4KICogVGhlcmUgaXMgYSBidWcgaW4gYW4gYXBwbGljYXRpb25zIHBhcmFtZXRlcml6YXRpb24gY29kZSB0aGF0IGlzIGFjdHVhbGx5IGluc3RlYWQgcHJvZHVjaW5nIHVuaXF1ZSBzY3JpcHRzLgotKiBBIGxvbmcgcnVubmluZyBHcmVtbG4gU2VydmVyIHRha2VzIGxvdHMgb2Ygbm9uLXBhcmFtZXRlcml6ZWQgc2NyaXB0cyBmcm9tIEdyZW1saW4gQ29uc29sZSBvciBzaW1pbGFyIHRvb2xzLgorKiBBIGxvbmcgcnVubmluZyBHcmVtbGluIFNlcnZlciB0YWtlcyBsb3RzIG9mIG5vbi1wYXJhbWV0ZXJpemVkIHNjcmlwdHMgZnJvbSBHcmVtbGluIENvbnNvbGUgb3Igc2ltaWxhciB0b29scy4KIAogSW4gdGhlc2Ugc29ydHMgb2YgY2FzZXMsIEdyZW1saW4gU2VydmVyJ3MgcGVyZm9ybWFuY2UgY2FuIGJlIGFmZmVjdGVkIGFkdmVyc2VseSBhcyB3aXRob3V0IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uCiB0aGUgbWV0YXNwYWNlIHdpbGwgZ3JvdyBpbmRlZmluaXRlbHkgKHBvc3NpYmx5IGFsb25nIHdpdGggdGhlIGdlbmVyYWwgaGVhcCkgdHJpZ2dlcmluZyBsb25nZXIgYW5kIG1vcmUgZnJlcXVlbnQgcm91bmRzCkBAIC0yMzAxLDcgKzE5MjMsNyBAQAogCiBQZXJoYXBzIHRoZSBtb3JlIGltcG9ydGFudCBndWFyZHMgYXJlIHJlbGF0ZWQgdG8gdGhlIEpWTSBtZXRhc3BhY2UuIFN0YXJ0IGJ5IHNldHRpbmcgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGlzIHNwYWNlCiB3aXRoIGAtWFg6TWV0YXNwYWNlU2l6ZWAuIFdoZW4gdGhpcyB2YWx1ZSBpcyBleGNlZWRlZCBpdCB3aWxsIHRyaWdnZXIgYSBHQyByb3VuZCAtIGl0IGlzIGVzc2VudGlhbGx5IGEgdGhyZXNob2xkIGZvcgotR0MuIFRoZSBncm93IG9mIHRoaXMgdmFsdWUgY2FuIGJlIGNhcHBlZCB3aXRoIGAtWFg6TWF4TWV0YXNwYWNlU2l6ZWAgKHRoaXMgdmFsdWUgaXMgdW5saW1pdGVkIGJ5IGRlZmF1bHQpLiBJbiBhbiBpZGVhbAorR0MuIFRoZSBncm93dGggb2YgdGhpcyB2YWx1ZSBjYW4gYmUgY2FwcGVkIHdpdGggYC1YWDpNYXhNZXRhc3BhY2VTaXplYCAodGhpcyB2YWx1ZSBpcyB1bmxpbWl0ZWQgYnkgZGVmYXVsdCkuIEluIGFuIGlkZWFsCiBzaXR1YXRpb24gKGkuZS4gcGFyYW1ldGVyaXphdGlvbiksIHRoZSBgLVhYOk1ldGFzcGFjZVNpemVgIHNob3VsZCBoYXZlIGEgbGFyZ2UgZW5vdWdoIHNldHRpbmcgc28gYXMgdG8gYXZvaWQgZWFybHkgR0MKIHJvdW5kcyBmb3IgbWV0YXNwYWNlLCBidXQgb3V0c2lkZSBvZiBhbiBpZGVhbCB3b3JsZCAoaS5lLiBub24tcGFyYW1ldGVyaXphdGlvbikgaXQgbWF5IG5vdCBiZSBzbWFydCB0byBtYWtlIHRoaXMgbnVtYmVyCiB0b28gbGFyZ2UuIE1ha2luZyB0aGUgc2V0dGluZyB0b28gbGFyZ2UgKGFuZCB0aHVzIHRoZSBgLVhYOk1heE1ldGFzcGFjZVNpemVgIGV2ZW4gbGFyZ2VyKSBtYXkgdHJpZ2dlciBsb25nZXIgR0Mgcm91bmRzCkBAIC0yMzI0LDkgKzE5NDYsNiBAQAogdHJlbmRzIGlzIGxpa2VseSB0aGUgYmVzdCB3YXkgdG8gdW5kZXJzdGFuZCBob3cgYSBwYXJ0aWN1bGFyIHdvcmtsb2FkIGlzIGFmZmVjdGluZyB0aGUgbWV0YXNwYWNlIGFuZCBpdHMgcmVsYXRpb24gdG8KIEdDLiBHZXR0aW5nIHRoZXNlIHNldHRpbmdzICJyaWdodCIgaG93ZXZlciB3aWxsIGhlbHAgZW5zdXJlIG11Y2ggbW9yZSBwcmVkaWN0YWJsZSBHcmVtbGluIFNlcnZlciBvcGVyYXRpb25zLgogCi1JTVBPUlRBTlQ6IEEgbGFtYmRhIHVzZWQgaW4gYSBieXRlY29kZS1iYXNlZCByZXF1ZXN0IHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNjcmlwdCwgc28gaXNzdWVzIHJlbGF0ZWQgdG8gcmF3IHNjcmlwdC1iYXNlZAotcmVxdWVzdHMgYXBwbHkgZXF1YWxseSB3ZWxsIHRvIGxhbWJkYS1ieXRlY29kZSByZXF1ZXN0cy4KLQogPT09PSBQcm9wZXJ0aWVzIG9mIEVsZW1lbnRzCiAKIEl0IHdhcyBtZW50aW9uZWQgYWJvdmUgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgIkJlc3QgUHJhY3RpY2VzIiBzZWN0aW9uIHRoYXQgc2VyaWFsaXphdGlvbiBvZiBncmFwaCBlbGVtZW50cyAoaS5lLgpAQCAtMjMzNCwxMCArMTk1MywxMCBAQAogYnkgdGhlIHJlcXVlc3Rpbmcgc3lzdGVtLiBUaGlzIHBvaW50IGJlZ3MgZm9yIGZ1cnRoZXIgY2xhcmlmaWNhdGlvbiBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2Ygd2F5cyB0byB1c2UgYW5kIGNvbmZpZ3VyZQogR3JlbWxpbiBTZXJ2ZXIgd2hpY2ggbWlnaHQgaW5mbHVlbmNlIGl0cyBpbnRlcnByZXRhdGlvbi4KIAotVG8gYmVnaW4gdG8gZGlzY3VzcyB0aGVzZSBudWFuY2VzLCBmaXJzdCBjb25zaWRlciB0aGUgbWV0aG9kIG9mIG1ha2luZyByZXF1ZXN0cyB0byBHcmVtbGluIFNlcnZlcjogc2NyaXB0IG9yIGJ5dGVjb2RlLgorVG8gYmVnaW4gdG8gZGlzY3VzcyB0aGVzZSBudWFuY2VzLCBmaXJzdCBjb25zaWRlciB0aGUgbWV0aG9kIG9mIG1ha2luZyByZXF1ZXN0cyB0byBHcmVtbGluIFNlcnZlcjogc2NyaXB0IG9yIHRyYXZlcnNhbC4KIEZvciBzY3JpcHRzLCB0aGF0IHdpbGwgbWVhbiB0aGF0IHVzZXJzIGFyZSBzZW5kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBHcmVtbGluIHRvIHRoZSBzZXJ2ZXIgZGlyZWN0bHkgdGhyb3VnaCBhCi1kcml2ZXIgb3ZlciB3ZWJzb2NrZXRzIG9yIHRocm91Z2ggdGhlIEhUVFAuIEZvciBieXRlY29kZSwgdXNlcnMgd2lsbCBiZSB1dGlsaXplIGEgPDxncmVtbGluLWRyaXZlcnMtdmFyaWFudHMsIEdyZW1saW4gR0xWPj4KLXdoaWNoIHdpbGwgY29uc3RydWN0IGJ5dGVjb2RlIGZvciB0aGVtIGFuZCBzdWJtaXQgdGhlIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1cG9uIGl0ZXJhdGlvbiBvZiB0aGVpciB0cmF2ZXJzYWwuCitkcml2ZXIgb3Igb3ZlciBIVFRQLiBGb3IgYnl0ZWNvZGUsIHVzZXJzIHdpbGwgYmUgdXRpbGl6ZSBhIDw8Z3JlbWxpbi1kcml2ZXJzLXZhcmlhbnRzLCBHcmVtbGluIEdMVj4+IHdoaWNoIHdpbGwKK2NvbnN0cnVjdCBieXRlY29kZSBmb3IgdGhlbSBhbmQgc3VibWl0IHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXBvbiBpdGVyYXRpb24gb2YgdGhlaXIgdHJhdmVyc2FsLgogCiBJbiBlaXRoZXIgY2FzZSwgaXQgaXMgaW1wb3J0YW50IHRvIGFsc28gY29uc2lkZXIgdGhlIG1ldGhvZCBvZiAiZGV0YWNobWVudCIuIERldGFjaG1lbnQgcmVmZXJzIHRvIHRoZSBtYW5uZXIgaW4gd2hpY2gKIGEgZ3JhcGggZWxlbWVudCBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZ3JhcGggZm9yIHB1cnBvc2Ugb2Ygc2VyaWFsaXphdGlvbi4gRGVwZW5kaW5nIG9uIHRoZSBjYXNlIGFuZCBjb25maWd1cmF0aW9uLApAQCAtMjQ0MSw5ICsyMDYwLDkgQEAKIElmIEdyZW1saW4gU2VydmVyIHByb2Nlc3NlcyBhIGxhcmdlIG51bWJlciBvZiB1bmlxdWUgc2NyaXB0cywgdGhlIGdsb2JhbCBmdW5jdGlvbiBjYWNoZSB3aWxsIGdyb3cgYmV5b25kIHRoZSBtZW1vcnkKIGF2YWlsYWJsZSB0byBHcmVtbGluIFNlcnZlciBhbmQgYW4gYE91dE9mTWVtb3J5RXJyb3JgIHdpbGwgbG9vbS4gIFNjcmlwdCBwYXJhbWV0ZXJpemF0aW9uIGdvZXMgYSBsb25nIHdheSB0byBzb2x2aW5nCiB0aGlzIHByb2JsZW0gYW5kIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeSBzaG91bGQgbm90IGJlIGFuIGlzc3VlIGZvciB0aG9zZSBjYXNlcy4gIElmIGl0IGlzIGEgcHJvYmxlbSBvciBpZiB0aGVyZSBpcyBubwotc2NyaXB0IHBhcmFtZXRlcml6YXRpb24gZHVlIHRvIGEgZ2l2ZW4gdXNlIGNhc2UgKHBlcmhhcHMgdXNpbmcgd2l0aCB1c2Ugb2YgPDxzZXNzaW9ucyxzZXNzaW9ucz4+KSwgaXQgaXMgcG9zc2libGUgdG8KLWJldHRlciBjb250cm9sIHRoZSBuYXR1cmUgb2YgdGhlIGdsb2JhbCBmdW5jdGlvbiBjYWNoZSBmcm9tIHRoZSBjbGllbnQgc2lkZSwgYnkgaXNzdWluZyBzY3JpcHRzIHdpdGggYSBwYXJhbWV0ZXIgdG8KLWhlbHAgZGVmaW5lIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igc2hvdWxkIHRyZWF0IHRoZSByZWZlcmVuY2VzLgorc2NyaXB0IHBhcmFtZXRlcml6YXRpb24gZHVlIHRvIGEgZ2l2ZW4gdXNlIGNhc2UsIGl0IGlzIHBvc3NpYmxlIHRvIGJldHRlciBjb250cm9sIHRoZSBuYXR1cmUgb2YgdGhlIGdsb2JhbCBmdW5jdGlvbgorY2FjaGUgZnJvbSB0aGUgY2xpZW50IHNpZGUsIGJ5IGlzc3Vpbmcgc2NyaXB0cyB3aXRoIGEgcGFyYW1ldGVyIHRvIGhlbHAgZGVmaW5lIGhvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igc2hvdWxkIHRyZWF0Cit0aGUgcmVmZXJlbmNlcy4KIAogVGhlIHBhcmFtZXRlciBpcyBjYWxsZWQgYCNqc3IyMjMuZ3Jvb3Z5LmVuZ2luZS5rZWVwLmdsb2JhbHNgIGFuZCBoYXMgZm91ciBvcHRpb25zOgogCkBAIC0yNDY2LDcgKzIwODUsNyBAQAogY2xpZW50LnN1Ym1pdCgiZGVmIGFkZEl0VXAoeCx5KXt4K3l9IiwgcGFyYW1zKTsKIC0tLS0KIAotSW4gY2FzZXMgd2hlcmUgbWFpbnRhaW5pbmcgdGhlIGV4cGVuc2Ugb2YgdGhlIGdsb2JhbCBmdW5jdGlvbiBjYWNoZSBpcyB1bmVjZXNzYXJ5IHRoaXMgY2FjaGUgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCitJbiBjYXNlcyB3aGVyZSBtYWludGFpbmluZyB0aGUgZXhwZW5zZSBvZiB0aGUgZ2xvYmFsIGZ1bmN0aW9uIGNhY2hlIGlzIHVubmVjZXNzYXJ5IHRoaXMgY2FjaGUgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCiBgZ2xvYmFsRnVuY3Rpb25DYWNoZUVuYWJsZWRgIGNvbmZpZ3VyYXRpb24gb24gdGhlIGBHcm9vdnlDb21waWxlckdyZW1saW5QbHVnaW5gLgogCiBHcmVtbGluIFNlcnZlciBhbHNvIGhhcyBhICJjbGFzcyBtYXAiIGNhY2hlIHdoaWNoIGhvbGRzIGNvbXBpbGVkIHNjcmlwdHMgd2hpY2ggaGVscHMgYXZvaWQgcmVjb21waWxhdGlvbiBjb3N0cyBvbgpAQCAtMjQ4MiwxODQgKzIxMDEsNDIgQEAKICAgICAgICAgICAgICAgIC4uLn0KIC0tLS0KIAotVGhlIHNwZWNpZmljcyBmb3IgdGhpcyBjb21tYSBkZWxpbWl0ZWQgZm9ybWF0IGNhbiBiZSBmb3VuZAotbGluazpodHRwczovL3N0YXRpYy5qYXZhZG9jLmlvL2NvbS5naXRodWIuYmVuLW1hbmVzLmNhZmZlaW5lL2NhZmZlaW5lLzIuNi4yL2NvbS9naXRodWIvYmVubWFuZXMvY2FmZmVpbmUvY2FjaGUvQ2FmZmVpbmVTcGVjLmh0bWxbaGVyZV0uCitUaGUgc3BlY2lmaWNzIGZvciB0aGlzIGNvbW1hLWRlbGltaXRlZCBmb3JtYXQgY2FuIGJlIGZvdW5kCitsaW5rOmh0dHBzOi8vd3d3LmphdmFkb2MuaW8vZG9jL2NvbS5naXRodWIuYmVuLW1hbmVzLmNhZmZlaW5lL2NhZmZlaW5lL2xhdGVzdC9jb20uZ2l0aHViLmJlbm1hbmVzLmNhZmZlaW5lL2NvbS9naXRodWIvYmVubWFuZXMvY2FmZmVpbmUvY2FjaGUvQ2FmZmVpbmVTcGVjLmh0bWxbaGVyZV0uCiBCeSBkZWZhdWx0LCB0aGUgY2FjaGUgaXMgc2V0IHRvIGBzb2Z0VmFsdWVzYCB3aGljaCBtZWFucyB0aGV5IGFyZSBnYXJiYWdlIGNvbGxlY3RlZCBpbiBhIGdsb2JhbGx5IGxlYXN0LXJlY2VudGx5LXVzZWQKIG1hbm5lciBhcyBtZW1vcnkgZ2V0cyBsb3cuIEZvciBwcm9kdWN0aW9uIHN5c3RlbXMsIGl0IGlzIGxpa2VseSB0aGF0IGEgbW9yZSBwcmVkaWN0YWJsZSBzdHJhdGVneSBiZSB0YWtlbiBhcyBzaG93bgogYWJvdmUgd2l0aCB0aGUgdXNlIG9mIHRoZSBgbWF4aW11bVNpemVgLgogCi1bW3Nlc3Npb25zXV0KLT09PT0gQ29uc2lkZXJpbmcgU2Vzc2lvbnMKLQotVGhlIHByZWZlcnJlZCBhcHByb2FjaCBmb3IgaXNzdWluZyBzY3JpcHQtYmFzZWQgcmVxdWVzdHMgdG8gR3JlbWxpbiBTZXJ2ZXIgaXMgdG8gZG8gc28gaW4gYSBzZXNzaW9ubGVzcyBtYW5uZXIuICBUaGUKLWNvbmNlcHQgb2YgInNlc3Npb25sZXNzIiByZWZlcnMgdG8gYSByZXF1ZXN0IHRoYXQgaXMgY29tcGxldGVseSBlbmNhcHN1bGF0ZWQgd2l0aGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLCBzdWNoIHRoYXQKLXRoZSBzY3JpcHQgaW4gdGhlIHJlcXVlc3Qgc3RhcnRzIHdpdGggYSBuZXcgdHJhbnNhY3Rpb24gYW5kIGVuZHMgd2l0aCBhIGNsb3NlZCB0cmFuc2FjdGlvbi4gU2Vzc2lvbmxlc3MgcmVxdWVzdHMgaGF2ZQotYXV0b21hdGljIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgaGFuZGxlZCBieSBHcmVtbGluIFNlcnZlciwgdGh1cyBhdXRvbWF0aWNhbGx5IG9wZW5pbmcgYW5kIGNsb3NpbmcgdHJhbnNhY3Rpb25zIGFzCi1wcmV2aW91c2x5IGRlc2NyaWJlZC4gIFRoZSBkb3duc2lkZSB0byB0aGUgc2Vzc2lvbmxlc3MgYXBwcm9hY2ggaXMgdGhhdCB0aGUgZW50aXJlIHNjcmlwdCB0byBiZSBleGVjdXRlZCBtdXN0IGJlIGtub3duCi1hdCB0aGUgdGltZSBvZiBzdWJtaXNzaW9uIHNvIHRoYXQgaXQgY2FuIGFsbCBiZSBleGVjdXRlZCBhdCBvbmNlLiAgVGhpcyByZXF1aXJlbWVudCBtYWtlcyBpdCBkaWZmaWN1bHQgZm9yIHNvbWUgdXNlCi1jYXNlcyB3aGVyZSBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgdHJhbnNhY3Rpb24gaXMgZGVzaXJlZC4KLQotRm9yIHN1Y2ggdXNlIGNhc2VzLCBHcmVtbGluIFNlcnZlciBzdXBwb3J0cyBzZXNzaW9ucy4gIFdpdGggc2Vzc2lvbnMsIHRoZSB1c2VyIGlzIGluIGNvbXBsZXRlIGNvbnRyb2wgb2YgdGhlIHN0YXJ0Ci1hbmQgZW5kIG9mIHRoZSB0cmFuc2FjdGlvbi4gVGhpcyBmZWF0dXJlIGNvbWVzIHdpdGggc29tZSBhZGRpdGlvbmFsIGV4cGVuc2UgdG8gY29uc2lkZXI6Ci0KLSogSW5pdGlhbGl6YXRpb24gc2NyaXB0cyB3aWxsIGJlIGV4ZWN1dGVkIGZvciBlYWNoIHNlc3Npb24gY3JlYXRlZCBzbyBhbnkgZXhwZW5zZSByZWxhdGVkIHRvIHRoZW0gd2lsbCBiZSBlc3RhYmxpc2hlZAotZWFjaCB0aW1lIGEgc2Vzc2lvbiBpcyBjb25zdHJ1Y3RlZC4KLSogVGhlcmUgd2lsbCBiZSBvbmUgc2NyaXB0IGNhY2hlIHBlciBzZXNzaW9uLCB3aGljaCBvYnZpb3VzbHkgaW5jcmVhc2VzIG1lbW9yeSByZXF1aXJlbWVudHMuICBUaGUgY2FjaGUgaXMgbm90IHNoYXJlZCwKLXNvIGFzIHRvIGVuc3VyZSB0aGF0IGEgc2Vzc2lvbiBoYXMgaXNvbGF0aW9uIGZyb20gb3RoZXIgc2Vzc2lvbiBlbnZpcm9ubWVudHMuIEFzIGEgcmVzdWx0LCBpZiB0aGUgc2FtZSBzY3JpcHQgaXMKLWV4ZWN1dGVkIGluIGVhY2ggc2Vzc2lvbiB0aGUgc2FtZSBjb21waWxhdGlvbiBjb3N0IHdpbGwgYmUgcGFpZCBmb3IgZWFjaCBzZXNzaW9uIGl0IGlzIGV4ZWN1dGVkIGluLgotKiBFYWNoIHNlc3Npb24gd2lsbCByZXF1aXJlIGl0cyBvd24gdGhyZWFkIHBvb2wgd2l0aCBhIHNpbmdsZSB0aHJlYWQgaW4gaXQgLSB0aGlzIGVuc3VyZXMgdGhhdCB0cmFuc2FjdGlvbmFsCi1ib3VuZGFyaWVzIGFyZSBtYW5hZ2VkIHByb3Blcmx5IGZyb20gb25lIHJlcXVlc3QgdG8gdGhlIG5leHQuCi0qIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBHcmVtbGluIFNlcnZlciBpbnN0YW5jZXMsIGNvbW11bmljYXRpb24gZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIgbXVzdCBiZSBib3VuZCB0byB0aGUKLXNlcnZlciB0aGF0IHRoZSBzZXNzaW9uIHdhcyBpbml0aWFsaXplZCBpbi4gIEdyZW1saW4gU2VydmVyIGRvZXMgbm90IHNoYXJlIHNlc3Npb24gc3RhdGUgYXMgdGhlIHRyYW5zYWN0aW9uYWwgY29udGV4dAotb2YgYSBgR3JhcGhgIGlzIGJvdW5kIHRvIHRoZSB0aHJlYWQgaXQgd2FzIGluaXRpYWxpemVkIGluLgotCi1UbyBjb25uZWN0IHRvIGEgc2Vzc2lvbiB3aXRoIEphdmEgdmlhIHRoZSBgZ3JlbWxpbi1kcml2ZXJgLCBpdCBpcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgYFNlc3Npb25lZENsaWVudGAgZnJvbSB0aGUKLWBDbHVzdGVyYCBvYmplY3Q6Ci0KLVtzb3VyY2UsamF2YV0KLS0tLS0KLUNsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIub3BlbigpOyAgPDE+Ci1DbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCJzZXNzaW9uTmFtZSIpOyA8Mj4KLS0tLS0KLQotPDE+IE9wZW5zIGEgcmVmZXJlbmNlIHRvIGBsb2NhbGhvc3RgIGFzIDw8Z3JlbWxpbi1qYXZhLHByZXZpb3VzbHkgc2hvd24+Pi4KLTwyPiBDcmVhdGVzIGEgYFNlc3Npb25lZENsaWVudGAgZ2l2ZW4gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvZiB0aGUgQ2x1c3Rlci4gVGhlIGBjb25uZWN0KClgIG1ldGhvZCBpcyBnaXZlbiBhCi1gU3RyaW5nYCB2YWx1ZSB0aGF0IGJlY29tZXMgdGhlIHVuaXF1ZSBuYW1lIG9mIHRoZSBzZXNzaW9uLiBJdCBpcyBvZnRlbiBiZXN0IHRvIHNpbXBseSB1c2UgYSBgVVVJRGAgdG8gcmVwcmVzZW50Ci10aGUgc2Vzc2lvbi4KLQotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBoYXZlIEdyZW1saW4gU2VydmVyIG1hbmFnZSB0aGUgdHJhbnNhY3Rpb25zIGFzIGlzIGRvbmUgd2l0aCBzZXNzaW9ubGVzcyByZXF1ZXN0cy4gVGhlIHVzZXIgaXMKLWluIGNvbnRyb2wgb2YgZW5hYmxpbmcgdGhpcyBmZWF0dXJlIHdoZW4gY3JlYXRpbmcgdGhlIGBTZXNzaW9uZWRDbGllbnRgOgotCi1bc291cmNlLGphdmFdCi0tLS0tCi1DbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLm9wZW4oKTsKLUNsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoInNlc3Npb25OYW1lIiwgdHJ1ZSk7Ci0tLS0tCi0KLVNwZWNpZnlpbmcgYHRydWVgIHRvIHRoZSBgY29ubmVjdCgpYCBtZXRob2Qgc2lnbmlmaWVzIHRoYXQgdGhlIGBjbGllbnRgIHNob3VsZCBtYWtlIGVhY2ggcmVxdWVzdCBhcyBvbmUgZW5jYXBzdWxhdGVkCi1pbiBhIHRyYW5zYWN0aW9uLiBXaXRoIHRoaXMgY29uZmlndXJhdGlvbiBvZiBgY2xpZW50YCB0aGVyZSBpcyBubyBuZWVkIHRvIGNsb3NlIGEgdHJhbnNhY3Rpb24gbWFudWFsbHkuCi0KLVdoZW4gdXNpbmcgdGhpcyBtb2RlIG9mIHRoZSBgU2Vzc2lvbmVkQ2xpZW50YCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVjb2duaXplIHRoYXQgZ2xvYmFsIHZhcmlhYmxlIHN0YXRlIGZvciB0aGUgc2Vzc2lvbgotaXMgbm90IHJvbGxlZC1iYWNrIG9uIGZhaWx1cmUgZGVwZW5kaW5nIG9uIHdoZXJlIHRoZSBmYWlsdXJlIG9jY3Vycy4gRm9yIGV4YW1wbGUsIHNlbmRpbmcgdGhlIGZvbGxvd2luZyBzY3JpcHQgd291bGQKLWNyZWF0ZSBhIHZhcmlhYmxlICJ4IiBpbiBnbG9iYWwgc2Vzc2lvbiBzY29wZSB0aGF0IHdvdWxkIGJlIGFjY2Vzc2libGUgb24gdGhlIG5leHQgcmVxdWVzdDoKLQotW3NvdXJjZSxncm9vdnldCi14ID0gMQotCi1Ib3dldmVyLCBzZW5kaW5nIHRoaXMgc2NyaXB0IHdoaWNoIGV4cGxpY2l0bHkgdGhyb3dzIGFuIGV4Y2VwdGlvbjoKLQotW3NvdXJjZSxncm9vdnldCi15ID0gMgotdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oKQotCi13aWxsIHJlc3VsdCBpbiBhbiBvYnZpb3VzIGZhaWx1cmUgZHVyaW5nIHNjcmlwdCBldmFsdWF0aW9uIGFuZCAieSIgd2lsbCBub3QgYmUgYXZhaWxhYmxlIHRvIHRoZSBuZXh0IHJlcXVlc3QuIFRoZQotY29tcGxpY2F0aW9uIGFyaXNlcyB3aGVyZSB0aGUgc2NyaXB0IGV2YWx1YXRlcyBzdWNjZXNzZnVsbHksIGJ1dCBmYWlscyBkdXJpbmcgcmVzdWx0IGl0ZXJhdGlvbiBvciBzZXJpYWxpemF0aW9uLiBGb3IKLWV4YW1wbGUsIHRoaXMgc2NyaXB0OgotCi1bc291cmNlLGdyb292eV0KLWEgPSAxCi1nLmFkZFYoKQotCi13b3VsZCBzdWNjZXNzZnVsbHkgZXZhbHVhdGUgYW5kIHJldHVybiBhIGBUcmF2ZXJzYWxgLiAgVGhlIHZhcmlhYmxlICJhIiB3b3VsZCBiZSBhdmFpbGFibGUgb24gdGhlIG5leHQgcmVxdWVzdC4gSG93ZXZlciwKLWlmIHRoZXJlIHdhcyBhIGZhaWx1cmUgaW4gdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBvbiB0aGUgY2FsbCB0byBgY29tbWl0KClgLCAiYSIgd291bGQgc3RpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBuZXh0Ci1yZXF1ZXN0LgotCi1UbyBhdm9pZCB1bmV4cGVjdGVkIHByb2JsZW1zIHdpdGggc3RhdGUgaW4gcmVsYXRpb24gdG8gZXJyb3JzIGluIHNlc3Npb25zLCBpdCBpcyBiZXN0IHRvIGZvbGxvdyB0aGVzZSBndWlkZWxpbmVzOgotCi0qIERvIG5vdCByZS11c2Ugc2Vzc2lvbiBpZGVudGlmaWVycy4gU2ltcGx5IHVzZSBhIG5ldyBVVUlEIGZvciBlYWNoIHNlc3Npb24uCi0qIE9uIGV4Y2VwdGlvbiwgYmUgc3VyZSB0byBjYWxsIGBjbG9zZSgpYCBvbiB0aGUgYENsaWVudGAgYW5kIGNyZWF0ZSBhIG5ldyBzZXNzaW9uLgotKiBXaGlsZSB5b3UgbWF5IHN1Ym1pdCBwYXJhbGxlbCBhc3luY2hyb25vdXMgcmVxdWVzdHMgdG8gYSBzZXNzaW9uLCBpdCBtYXkgbm90IG1ha2Ugc2Vuc2UgdG8gZG8gc28gYmVjYXVzZSB0aGV5IGFyZQotc2ltcGx5IGV4ZWN1dGVkIHNlcmlhbGx5IGFzIHRoZXkgYXJyaXZlIHRvIHRoZSBzZXNzaW9uLiBBIGZhaWxlZCBhc3luY2hyb25vdXMgcmVxdWVzdCBjb3VsZCBsZWF2ZSBhbiBpbnZhbGlkIHN0YXRlCi1pbiB0aGUgc2Vzc2lvbiB3aGljaCBtYXkgbm90IGFsbG93IGxhdGVyIHJlcXVlc3RzIHRvIHN1Y2NlZWQuIEVpdGhlciB1c2Ugc3luY2hyb25vdXMgcmVxdWVzdHMgb25seSBvciBjYXJlZnVsbHkKLWNvbnNpZGVyIGVycm9yIGNvbmRpdGlvbnMgd2l0aCBhc3luY2hyb25vdXMgcmVxdWVzdHMuCi0KLVtzb3VyY2UsamF2YV0KLS0tLS0KLUNsaWVudC5TZXNzaW9uU2V0dGluZ3Mgc2V0dGluZ3MgPQotICAgIENsaWVudC5TZXNzaW9uU2V0dGluZ3MuYnVpbGQoKS5tYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24odHJ1ZSkuY3JlYXRlKCk7Ci1DbGllbnQgc2Vzc2lvbiA9IGNsdXN0ZXIuY29ubmVjdChDbGllbnQuU2V0dGluZ3MuYnVpbGQoKS51c2VTZXNzaW9uKHNldHRpbmdzKS5jcmVhdGUoKSk7Ci0tLS0tCi0KLUEgc2Vzc2lvbiBpcyBhICJoZWF2aWVyIiBhcHByb2FjaCB0byB0aGUgc2ltcGxlICJyZXF1ZXN0L3Jlc3BvbnNlIiBhcHByb2FjaCBvZiBzZXNzaW9ubGVzcyByZXF1ZXN0cywgYnV0IGlzIHNvbWV0aW1lcwotbmVjZXNzYXJ5IGZvciBhIGdpdmVuIHVzZSBjYXNlLgotCiBbW2NvbnNpZGVyaW5nLXRyYW5zYWN0aW9uc11dCiA9PT09IENvbnNpZGVyaW5nIFRyYW5zYWN0aW9ucwogCi1HcmVtbGluIFNlcnZlciBwZXJmb3JtcyBhdXRvbWF0ZWQgdHJhbnNhY3Rpb24gaGFuZGxpbmcgZm9yICJzZXNzaW9ubGVzcyIgcmVxdWVzdHMgKGkuZS4gbm8gc3RhdGUgYmV0d2VlbiByZXF1ZXN0cykgYW5kCi1mb3IgImluLXNlc3Npb24iIHJlcXVlc3RzIHdpdGggdGhhdCBmZWF0dXJlIGVuYWJsZWQuIEl0IHdpbGwgYXV0b21hdGljYWxseSBjb21taXQgb3Igcm9sbGJhY2sgdHJhbnNhY3Rpb25zIGRlcGVuZGluZwotb24gdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiB0aGUgcmVxdWVzdC4KK05vbi10cmFuc2FjdGlvbmFsIHJlcXVlc3RzICh0aG9zZSB3aXRob3V0IGEgYHRyYW5zYWN0aW9uSWRgKSBiZWhhdmUgYXMgc2VsZi1jb250YWluZWQgdW5pdHMgb2Ygd29yayB3aGVyZSB0aGUgZ3JhcGgncworb3duIHRyYW5zYWN0aW9uIHNlbWFudGljcyBhcHBseS4gRWFjaCB0cmF2ZXJzYWwgZXhlY3V0ZXMgd2l0aGluIGl0cyBvd24gdHJhbnNhY3Rpb24gYXMgbWFuYWdlZCBieSB0aGUgZ3JhcGgKK2ltcGxlbWVudGF0aW9uIGl0c2VsZi4gVHJhbnNhY3Rpb25hbCByZXF1ZXN0cyBwYXJ0aWNpcGF0ZSBpbiBhIHRyYW5zYWN0aW9uIG9wZW5lZCB2aWEgYGcudHgoKS5iZWdpbigpYCwgd2hlcmUgdGhlCitjbGllbnQgZXhwbGljaXRseSBjb250cm9scyB0aGUgbGlmZWN5Y2xlIHRocm91Z2ggYGcudHgoKS5jb21taXQoKWAgYW5kIGBnLnR4KCkucm9sbGJhY2soKWAuCiAKLUlNUE9SVEFOVDogVW5kZXJzdGFuZCB0aGUgdHJhbnNhY3Rpb25hbCBjYXBhYmlsaXRpZXMgb2YgdGhlIGdyYXBoIGNvbmZpZ3VyZWQgaW4gR3JlbWxpbiBTZXJ2ZXIgd2hlbiB1c2luZyBzZXNzaW9ucy4gRm9yCi1leGFtcGxlLCBhIGJhc2ljIGBUaW5rZXJHcmFwaGAgaW4gaXRzIG5vbi10cmFuc2FjdGlvbmFsIGZvcm0gd29uJ3QgYmUgYWJsZSB0byByb2xsYmFjayBhIGZhaWxlZCB0cmF2ZXJzYWwsIHRoZXJlZm9yZSBpdAotaXMgcXVpdGUgcG9zc2libGUgdG8gZ2V0IHBhcnRpYWwgdXBkYXRlcyBpZiB0aGUgZmlyc3QgcGFydCBvZiBhIHRyYXZlcnNhbCBzdWNjZWVkcyBhbmQgdGhlIHJlc3QgZmFpbHMuCitJTVBPUlRBTlQ6IFVuZGVyc3RhbmQgdGhlIHRyYW5zYWN0aW9uYWwgY2FwYWJpbGl0aWVzIG9mIHRoZSBncmFwaCBjb25maWd1cmVkIGluIEdyZW1saW4gU2VydmVyLiBGb3IgZXhhbXBsZSwgYSBiYXNpYworYFRpbmtlckdyYXBoYCBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zYWN0aW9ucy4gVXNlIGBUaW5rZXJUcmFuc2FjdGlvbkdyYXBoYCBvciBhbm90aGVyIHRyYW5zYWN0aW9uLWNhcGFibGUgZ3JhcGgKK2ltcGxlbWVudGF0aW9uLiBBdHRlbXB0aW5nIHRvIGJlZ2luIGEgdHJhbnNhY3Rpb24gb24gYSBub24tdHJhbnNhY3Rpb25hbCBncmFwaCB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvci4KIAotQW5vdGhlciBhc3BlY3Qgb2YgVHJhbnNhY3Rpb24gTWFuYWdlbWVudCB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGlzIHRoZSB1c2FnZSBvZiB0aGUgYHN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudGAKLXNldHRpbmcuICBJdCBpcyBgZmFsc2VgIGJ5IGRlZmF1bHQsIGJ1dCB3aGVuIHNldCB0byBgdHJ1ZWAsIGl0IGZvcmNlcyB0aGUgdXNlciB0byBwYXNzIGBhbGlhc2VzYCBmb3IgYWxsIHJlcXVlc3RzLgotVGhlIGFsaWFzZXMgYXJlIHRoZW4gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggZ3JhcGhzIHdpbGwgaGF2ZSB0aGVpciB0cmFuc2FjdGlvbnMgY2xvc2VkIGZvciB0aGF0IHJlcXVlc3QuIFJ1bm5pbmcKLUdyZW1saW4gU2VydmVyIGluIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZ3JhcGhzIGJlaW5nIGhvc3RlZCBhcwotR3JlbWxpbiBTZXJ2ZXIgd2lsbCBvbmx5IGNsb3NlIHRyYW5zYWN0aW9ucyBvbiB0aGUgZ3JhcGhzIHNwZWNpZmllZCBieSB0aGUgYGFsaWFzZXNgLiBLZWVwaW5nIHRoaXMgc2V0dGluZyBgZmFsc2VgLAotd2lsbCBzaW1wbHkgaGF2ZSBHcmVtbGluIFNlcnZlciBjbG9zZSB0cmFuc2FjdGlvbnMgb24gYWxsIGdyYXBocyBmb3IgZXZlcnkgcmVxdWVzdC4KK1R3byBzZXR0aW5ncyBpbiB0aGUgR3JlbWxpbiBTZXJ2ZXIgWUFNTCBjb250cm9sIHRyYW5zYWN0aW9uIHJlc291cmNlIHVzYWdlOgogCi1bW2NvbnNpZGVyaW5nLXN0YXRlXV0KLT09PT0gQ29uc2lkZXJpbmcgU3RhdGUKKyogYHRyYW5zYWN0aW9uVGltZW91dGAgKGRlZmF1bHQ6IDYwMDAwMG1zKSAtLSBIb3cgbG9uZyBhIHRyYW5zYWN0aW9uIGNhbiBzaXQgaWRsZSBiZWZvcmUgdGhlIHNlcnZlciBmb3JjaWJseSByb2xscyBpdAorICBiYWNrLiBUaGUgdGltZW91dCByZXNldHMgb24gZWFjaCByZXF1ZXN0IHJlY2VpdmVkIGZvciB0aGF0IHRyYW5zYWN0aW9uLgorKiBgbWF4Q29uY3VycmVudFRyYW5zYWN0aW9uc2AgKGRlZmF1bHQ6IDEwMDApIC0tIFRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIHRyYW5zYWN0aW9ucyBhbGxvd2VkLiBXaGVuIHRoZSBsaW1pdCBpcworICByZWFjaGVkLCBuZXcgYmVnaW4gcmVxdWVzdHMgYXJlIHJlamVjdGVkIHdpdGggSFRUUCA1MDMuCiAKLVdpdGggSFRUUCBhbmQgYW55IHNlc3Npb25sZXNzIHJlcXVlc3RzLCB0aGVyZSBpcyBubyB2YXJpYWJsZSBzdGF0ZSBtYWludGFpbmVkIGJldHdlZW4gcmVxdWVzdHMuICBUaGVyZWZvcmUsCi13aGVuIDw8Y29ubmVjdGluZy12aWEtY29uc29sZSxjb25uZWN0aW5nIHdpdGggdGhlIGNvbnNvbGU+PiwgZm9yIGV4YW1wbGUsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgYSB2YXJpYWJsZSBpbgotb25lIGNvbW1hbmQgYW5kIHRoZW4gZXhwZWN0IHRvIGFjY2VzcyBpdCBpbiB0aGUgbmV4dDoKK0VhY2ggb3BlbiB0cmFuc2FjdGlvbiBjb25zdW1lcyBhIGRlZGljYXRlZCB0aHJlYWQgb24gdGhlIHNlcnZlciB0byBtYWludGFpbiB0aHJlYWQtbG9jYWwgdHJhbnNhY3Rpb24gc3RhdGUgZm9yIHRoZQordW5kZXJseWluZyBncmFwaC4gRW5zdXJlIHRoYXQgY2xpZW50cyBjbG9zZSB0cmFuc2FjdGlvbnMgcHJvbXB0bHkgYW5kIHRoYXQgdGhlIGB0cmFuc2FjdGlvblRpbWVvdXRgIGlzIHNldCB0byByZWNsYWltCithYmFuZG9uZWQgb25lcy4gVGhlIGB0cmFuc2FjdGlvbnNgIGdhdWdlIG1ldHJpYyBjYW4gYmUgdXNlZCB0byBtb25pdG9yIHVzYWdlLgogCi1bc291cmNlLGdyb292eV0KLS0tLS0KLWdyZW1saW4+IDpyZW1vdGUgY29ubmVjdCB0aW5rZXJwb3Auc2VydmVyIGNvbmYvcmVtb3RlLnlhbWwKLT09PkNvbmZpZ3VyZWQgbG9jYWxob3N0LzEyNy4wLjAuMTo4MTgyCi1ncmVtbGluPiA6PiB4ID0gMgotPT0+MgotZ3JlbWxpbj4gOj4gMiArIHgKLU5vIHN1Y2ggcHJvcGVydHk6IHggZm9yIGNsYXNzOiBTY3JpcHQ0Ci1EaXNwbGF5IHN0YWNrIHRyYWNlPyBbeU5dIG4KLS0tLS0KK0luIGxvYWQtYmFsYW5jZWQgZGVwbG95bWVudHMsIGFsbCByZXF1ZXN0cyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBtdXN0IHJlYWNoIHRoZSBzYW1lIHNlcnZlciBpbnN0YW5jZSBiZWNhdXNlCit0cmFuc2FjdGlvbiBzdGF0ZSBpcyBsb2NhbCB0byB0aGUgc2VydmVyIHRoYXQgY3JlYXRlZCBpdC4gVGhlIGBYLVRyYW5zYWN0aW9uLUlkYCBoZWFkZXIgaXMgYXZhaWxhYmxlIGZvciBsb2FkCitiYWxhbmNlcnMgdG8gaW1wbGVtZW50IHN0aWNreSByb3V0aW5nIHdpdGhvdXQgcGFyc2luZyB0aGUgcmVxdWVzdCBib2R5LiBBIHRyYW5zYWN0aW9uYWwgcmVxdWVzdCB0aGF0IGFycml2ZXMgYXQgdGhlCit3cm9uZyBzZXJ2ZXIgcmVjZWl2ZXMgYSA0MDQgcmVzcG9uc2UuCiAKLVRoZSBzYW1lIGJlaGF2aW9yIHdvdWxkIGJlIHNlZW4gd2l0aCBIVFRQIG9yIHdoZW4gdXNpbmcgc2Vzc2lvbmxlc3MgcmVxdWVzdHMgdGhyb3VnaCBvbmUgb2YgdGhlIEdyZW1saW4gU2VydmVyIGRyaXZlcnMuCi1JZiBoYXZpbmcgdGhpcyBiZWhhdmlvciBpcyBkZXNpcmVhYmxlLCB0aGVuIDw8c2Vzc2lvbnMsY29uc2lkZXIgc2Vzc2lvbnM+Pi4KLQotVGhlcmUgaXMgYW4gZXhjZXB0aW9uIHRvIHRoaXMgbm90aW9uIG9mIHN0YXRlIG5vdCBleGlzdGluZyBiZXR3ZWVuIHJlcXVlc3RzIGFuZCB0aGF0IGlzIGdsb2JhbGx5IGRlZmluZWQgZnVuY3Rpb25zLgotQWxsIGZ1bmN0aW9ucyBjcmVhdGVkIHZpYSBzY3JpcHRzIGFyZSBnbG9iYWwgdG8gdGhlIHNlcnZlci4KLQotW3NvdXJjZSxncm9vdnldCi0tLS0tCi1ncmVtbGluPiA6PiBkZWYgc3VidHJhY3RJdChpbnQgeCwgaW50IHkpIHsgeCAtIHkgfQotPT0+bnVsbAotZ3JlbWxpbj4gOj4gc3VidHJhY3RJdCg4LDcpCi09PT4xCi0tLS0tCi0KLUlmIHRoaXMgYmVoYXZpb3IgaXMgbm90IGRlc2lyYWJsZSB0aGVyZSBhcmUgc2V2ZXJhbCBvcHRpb25zLiAgQSBmaXJzdCBvcHRpb24gd291bGQgYmUgdG8gY29uc2lkZXIgdXNpbmcgc2Vzc2lvbnMuIEVhY2gKLXNlc3Npb24gZ2V0cyBpdHMgb3duIGBTY3JpcHRFbmdpbmVgLCB3aGljaCBtYWludGFpbnMgaXRzIG93biBpc29sYXRlZCBjYWNoZSBvZiBnbG9iYWwgZnVuY3Rpb25zLCB3aGVyZWFzIHNlc3Npb25sZXNzCi1yZXF1ZXN0cyB1c2VzIGEgc2luZ2xlIGZ1bmN0aW9uIGNhY2hlLiBBIHNlY29uZCBvcHRpb24gd291bGQgYmUgdG8gZGVmaW5lIGZ1bmN0aW9ucyBhcyBjbG9zdXJlczoKLQotW3NvdXJjZSxncm9vdnldCi0tLS0tCi1ncmVtbGluPiA6PiBtdWx0aXBseUl0ID0geyBpbnQgeCwgaW50IHkgLT4geCAqIHkgfQotPT0+U2NyaXB0NyRfcnVuX2Nsb3N1cmUxQDZiMjRmM2FiCi1ncmVtbGluPiA6PiBtdWx0aXBseUl0KDcsIDgpCi1ObyBzaWduYXR1cmUgb2YgbWV0aG9kOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZS5tdWx0aXBseUl0KCkgaXMgYXBwbGljYWJsZSBmb3IgYXJndW1lbnQgdHlwZXM6IChqYXZhLmxhbmcuSW50ZWdlciwgamF2YS5sYW5nLkludGVnZXIpIHZhbHVlczogWzcsIDhdCi1EaXNwbGF5IHN0YWNrIHRyYWNlPyBbeU5dCi0tLS0tCi0KLVdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIHRoaXMgd2F5LCB0aGUgZnVuY3Rpb24gaXMgdmlld2VkIGJ5IHRoZSBgU2NyaXB0RW5naW5lYCBhcyBhIHZhcmlhYmxlIHJhdGhlciB0aGFuIGEgZ2xvYmFsCi1mdW5jdGlvbiBhbmQgc2luY2Ugc2Vzc2lvbmxlc3MgcmVxdWVzdHMgZG9uJ3QgbWFpbnRhaW4gc3RhdGUsIHRoZSBmdW5jdGlvbiBpcyBmb3Jnb3R0ZW4gZm9yIHRoZSBuZXh0IHJlcXVlc3QuIEEgZmluYWwKLW9wdGlvbiB3b3VsZCBiZSB0byBtYW5hZ2UgdGhlIGBTY3JpcHRFbmdpbmVgIGNhY2hlIG1hbnVhbGx5OgotCi1bc291cmNlLGJvdXJuZV0KLS0tLS0KLSQgY3VybCAtWCBQT1NUIC1kICJ7XCJncmVtbGluXCI6XCJkZWYgZGl2aWRlSXQoaW50IHgsIGludCB5KXsgeCAvIHkgfVwiLFwiYmluZGluZ3NcIjp7XCIjanNyMjIzLmdyb292eS5lbmdpbmUua2VlcC5nbG9iYWxzXCI6XCJwaGFudG9tXCJ9fSIgImh0dHA6Ly9sb2NhbGhvc3Q6ODE4MiIKLXsicmVxdWVzdElkIjoiOTdmZTE0NjctYTk0My00NWVhLThmZDYtOWU4ODlhNmM5MzgxIiwic3RhdHVzIjp7Im1lc3NhZ2UiOiIiLCJjb2RlIjoyMDAsImF0dHJpYnV0ZXMiOnt9fSwicmVzdWx0Ijp7ImRhdGEiOltudWxsXSwibWV0YSI6e319fQotJCBjdXJsIC1YIFBPU1QgLWQgIntcImdyZW1saW5cIjpcImRpdmlkZUl0KDgsIDIpXCJ9IiAiaHR0cDovL2xvY2FsaG9zdDo4MTgyIgoteyJtZXNzYWdlIjoiRXJyb3IgZW5jb3VudGVyZWQgZXZhbHVhdGluZyBzY3JpcHQ6IGRpdmlkZUl0KDgsIDIpIn0KLS0tLS0KLQotSW4gdGhlIGFib3ZlIEhUVFAtYmFzZWQgcmVxdWVzdHMsIHRoZSBiaW5kaW5ncyBjb250YWluIGEgc3BlY2lhbCBwYXJhbWV0ZXIgdGhhdCB0ZWxscyB0aGUgYFNjcmlwdEVuZ2luZWAgY2FjaGUgdG8KLWltbWVkaWF0ZWx5IGZvcmdldCB0aGUgc2NyaXB0IGFmdGVyIGV4ZWN1dGlvbi4gSW4gdGhpcyB3YXksIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBlbmQgdXAgYmVpbmcgZ2xvYmFsbHkgYXZhaWxhYmxlLgorQSBmYWlsZWQgdHJhdmVyc2FsIHdpdGhpbiBhbiBvcGVuIHRyYW5zYWN0aW9uIGRvZXMgbm90IGNhdXNlIHRoZSBzZXJ2ZXIgdG8gY2xvc2Ugb3Igcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLiBUaGUKK3RyYW5zYWN0aW9uIHJlbWFpbnMgb3BlbiB1bnRpbCB0aGUgY2xpZW50IGV4cGxpY2l0bHkgY29tbWl0cywgZXhwbGljaXRseSByb2xscyBiYWNrLCBvciB0aGUgaWRsZSB0aW1lb3V0IGZpcmVzLgogCiBbW3JlcXVlc3QtcmV0cnldXQogPT09PSBSZXF1ZXN0IFJldHJ5CkBAIC0yNjgwLDcgKzIxNTcsNyBAQAogW0lORk9dIEdyZW1saW5TZXJ2ZXIgLQogICAgICAgICAgXCwsLC8KICAgICAgICAgIChvIG8pCi0tLS0tLW9PT28tKDMpLW9PT28tLS0tLQorLS0tLS1vT09vLSg0KS1vT09vLS0tLS0KIAogW0lORk9dIEdyZW1saW5TZXJ2ZXIgLSBDb25maWd1cmluZyBHcmVtbGluIFNlcnZlciBmcm9tIGNvbmYvZ3JlbWxpbi1zZXJ2ZXIueWFtbAogLi4uCkBAIC0yNzI3LDE2MCArMjIwNCwxNCBAQAogCiBUaGlzIHBsdWdpbiBpbXBvcnRzIHRoZSBhcHByb3ByaWF0ZSBjbGFzc2VzIGZvciBtYW5hZ2luZyB0aGUgY3JlZGVudGlhbHMgZ3JhcGguCiAKLVtbZ2VwaGktcGx1Z2luXV0KLT09PSBHZXBoaSBQbHVnaW4KLQotaW1hZ2U6Z2VwaGktbG9nby5wbmdbd2lkdGg9MjAwLCBmbG9hdD1sZWZ0XSBsaW5rOmh0dHA6Ly9nZXBoaS5vcmcvW0dlcGhpXSBpcyBhbiBpbnRlcmFjdGl2ZSB2aXN1YWxpemF0aW9uLAotZXhwbG9yYXRpb24sIGFuZCBhbmFseXNpcyBwbGF0Zm9ybSBmb3IgZ3JhcGhzLiBUaGUgbGluazpodHRwczovL2dlcGhpLm9yZy9wbHVnaW5zLyMvcGx1Z2luL2dyYXBoc3RyZWFtaW5nW0dyYXBoIFN0cmVhbWluZ10KLXBsdWdpbiBmb3IgR2VwaGkgcHJvdmlkZXMgYW4gQVBJIHRoYXQgY2FuIGJlIGxldmVyYWdlZCB0byBzdHJlYW0gZ3JhcGggZGF0YSB0byBhIHJ1bm5pbmcgR2VwaGkgYXBwbGljYXRpb24uIFRoZSBHZXBoaQotcGx1Z2luIGZvciBHcmVtbGluIENvbnNvbGUgdXRpbGl6ZXMgdGhpcyBBUEkgdG8gYWxsb3cgZm9yIGdyYXBoIGFuZCB0cmF2ZXJzYWwgdmlzdWFsaXphdGlvbi4KLQotSU1QT1JUQU5UOiBUaGVzZSBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIHRlc3RlZCB3aXRoIEdlcGhpIDAuOS4yIGFuZCBHcmFwaCBTdHJlYW1pbmcgcGx1Z2luIDEuMC4zLgotCi1UaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBhc3N1bWUgdGhhdCBHZXBoaSBoYXMgYmVlbiBkb3dubG9hZCBhbmQgaW5zdGFsbGVkLiAgSXQgZnVydGhlciBhc3N1bWVzIHRoYXQgdGhlIEdyYXBoCi1TdHJlYW1pbmcgcGx1Z2luIGhhcyBiZWVuIGluc3RhbGxlZCAoYFRvb2xzID4gUGx1Z2luc2ApLiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBleHBsYWluIGhvdyB0byB2aXN1YWxpemUgYQotYEdyYXBoYCBhbmQgYFRyYXZlcnNhbGAuCi0KLUluIEdlcGhpLCBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIGBGaWxlID4gTmV3IFByb2plY3RgLiAgSW4gdGhlIGxvd2VyIGxlZnQgdmlldywgY2xpY2sgdGhlICJTdHJlYW1pbmciIHRhYiwgb3BlbiB0aGUKLU1hc3RlciBkcm9wIGRvd24sIGFuZCByaWdodCBjbGljayBgTWFzdGVyIFNlcnZlciA+IFN0YXJ0YCB3aGljaCBzdGFydHMgdGhlIEdyYXBoIFN0cmVhbWluZyBzZXJ2ZXIgaW4gR2VwaGkgYW5kIGJ5Ci1kZWZhdWx0IGFjY2VwdHMgcmVxdWVzdHMgYXQgYGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC93b3Jrc3BhY2UxYDoKLQotaW1hZ2U6OmdlcGhpLXN0YXJ0LXNlcnZlci5wbmdbd2lkdGg9ODAwXQotCi1JTVBPUlRBTlQ6IFRoZSBHZXBoaSBTdHJlYW1pbmcgUGx1Z2luIGRvZXNuJ3QgZGV0ZWN0IHBvcnQgY29uZmxpY3RzIGFuZCB3aWxsIGFwcGVhciB0byBzdGFydCB0aGUgcGx1Z2luIHN1Y2Nlc3NmdWxseQotZXZlbiBpZiB0aGVyZSBpcyBzb21ldGhpbmcgYWxyZWFkeSBhY3RpdmUgb24gdGhhdCBwb3J0IGl0IHdhbnRzIHRvIGNvbm5lY3QgdG8gKHdoaWNoIGlzIDgwODAgYnkgZGVmYXVsdCkuICBCZSBzdXJlCi10aGF0IHRoZXJlIGlzIG5vdGhpbmcgcnVubmluZyBvbiB0aGUgcG9ydCBiZWZvcmUgR2VwaGkgd2lsbCBiZSB1c2luZyBiZWZvcmUgc3RhcnRpbmcgdGhlIHBsdWdpbi4gIEZhaWxpbmcgdG8gZG8KLXRoaXMgcHJvZHVjZSBiZWhhdmlvciB3aGVyZSB0aGUgY29uc29sZSB3aWxsIGFwcGVhciB0byBzdWJtaXQgcmVxdWVzdHMgdG8gR2VwaGkgc3VjY2Vzc2Z1bGx5IGJ1dCBub3RoaW5nIHdpbGwKLXJlbmRlci4KLQotV0FSTklORzogRG8gbm90IHNraXAgdGhlIGBGaWxlID4gTmV3IFByb2plY3RgIHN0ZXAgYXMgaXQgbWF5IHByZXZlbnQgYSBuZXdseSBzdGFydGVkIEdlcGhpIGFwcGxpY2F0aW9uIGZyb20gZnVsbHkKLWVuYWJsaW5nIHRoZSBzdHJlYW1pbmcgdGFiLgotCi1TdGFydCB0aGUgeHJlZjpncmVtbGluLWNvbnNvbGVbR3JlbWxpbiBDb25zb2xlXSBhbmQgYWN0aXZhdGUgdGhlIEdlcGhpIHBsdWdpbjoKLQotW2dyZW1saW4tZ3Jvb3Z5XQotLS0tLQotOnBsdWdpbiB1c2UgdGlua2VycG9wLmdlcGhpCi1ncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlTW9kZXJuKCkKLTpyZW1vdGUgY29ubmVjdCB0aW5rZXJwb3AuZ2VwaGkKLTo+IGdyYXBoCi0tLS0tCi0KLVRoZSBhYm92ZSBHcmVtbGluIHNlc3Npb24gYWN0aXZhdGVzIHRoZSBHZXBoaSBwbHVnaW4sIGNyZWF0ZXMgdGhlICJtb2Rlcm4iIGBUaW5rZXJHcmFwaGAsIHVzZXMgdGhlIGA6cmVtb3RlYCBjb21tYW5kCi10byBzZXR1cCBhIGNvbm5lY3Rpb24gdG8gdGhlIEdyYXBoIFN0cmVhbWluZyBzZXJ2ZXIgaW4gR2VwaGkgKHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBleHBsYWluZWQgYmVsb3cpLAotYW5kIHRoZW4gdXNlcyBgOnN1Ym1pdGAgd2hpY2ggc2VuZHMgdGhlIHZlcnRpY2VzIGFuZCBlZGdlcyBvZiB0aGUgZ3JhcGggdG8gdGhlIEdlcGhpIFN0cmVhbWluZyBTZXJ2ZXIuIFRoZSByZXN1bHRpbmcKLWdyYXBoIGFwcGVhcnMgaW4gR2VwaGkgYXMgZGlzcGxheWVkIGluIHRoZSBsZWZ0IGltYWdlIGJlbG93LgotCi1pbWFnZTo6Z2VwaGktZ3JhcGgtc3VibWl0LnBuZ1t3aWR0aD04MDBdCi0KLU5PVEU6IElzc3VpbmcgYDo+IGdyYXBoYCBhZ2FpbiB3aWxsIGNsZWFyIHRoZSBHZXBoaSB3b3Jrc3BhY2UgYW5kIHRoZW4gcmUtd3JpdGUgdGhlIGdyYXBoLiAgVG8gbWFudWFsbHkgZW1wdHkgdGhlCi13b3Jrc3BhY2UgZG8gYDo+IGNsZWFyYC4KLQotTm93IHRoYXQgdGhlIGdyYXBoIGlzIHZpc3VhbGl6ZWQgaW4gR2VwaGksIGl0IGlzIHBvc3NpYmxlIHRvIGxpbms6aHR0cHM6Ly9nZXBoaS5naXRodWIuaW8vdXNlcnMvdHV0b3JpYWwtbGF5b3V0cy9bYXBwbHkgYSBsYXlvdXQgYWxnb3JpdGhtXSwKLWNoYW5nZSB0aGUgc2l6ZSBhbmQvb3IgY29sb3Igb2YgdmVydGljZXMgYW5kIGVkZ2VzLCBhbmQgZGlzcGxheSBsYWJlbHMvcHJvcGVydGllcyBvZiBpbnRlcmVzdC4gIEZ1cnRoZXIgaW5mb3JtYXRpb24KLWNhbiBiZSBmb3VuZCBpbiBHZXBoaSdzIHR1dG9yaWFsIG9uIGxpbms6aHR0cHM6Ly9nZXBoaS5naXRodWIuaW8vdXNlcnMvdHV0b3JpYWwtdmlzdWFsaXphdGlvbi9bVmlzdWFsaXphdGlvbl0uCi1BZnRlciBhcHBseWluZyB0aGUgRnJ1Y2h0ZXJtYW4gUmVpbmdvbGQgbGF5b3V0LCBpbmNyZWFzaW5nIHRoZSBub2RlIHNpemUsIGRlY3JlYXNpbmcgdGhlIGVkZ2Ugc2NhbGUsIGFuZCBkaXNwbGF5aW5nCi10aGUgaWQsIG5hbWUsIGFuZCB3ZWlnaHQgYXR0cmlidXRlcyB0aGUgZ3JhcGggbG9va3MgYXMgZGlzcGxheWVkIGluIHRoZSByaWdodCBpbWFnZSBhYm92ZS4KLQotVmlzdWFsaXphdGlvbiBvZiBhIGBUcmF2ZXJzYWxgIGhhcyBhIGRpZmZlcmVudCBhcHByb2FjaCBhcyB0aGUgdmlzdWFsaXphdGlvbiBvY2N1cnMgYXMgdGhlIGBUcmF2ZXJzYWxgIGlzIGV4ZWN1dGluZywKLXRodXMgc2hvd2luZyBhIHJlYWwtdGltZSB2aWV3IG9mIGl0cyBleGVjdXRpb24uICBBIGBUcmF2ZXJzYWxgIG11c3QgYmUgImNvbmZpZ3VyZWQiIHRvIG9wZXJhdGUgaW4gdGhpcyBmb3JtYXQgYW5kIGZvcgotdGhhdCBpdCByZXF1aXJlcyB1c2Ugb2YgdGhlIGB2aXN1YWxUcmF2ZXJzYWxgIG9wdGlvbiBvbiB0aGUgYGNvbmZpZ2AgZnVuY3Rpb24gb2YgdGhlIGA6cmVtb3RlYCBjb21tYW5kOgotCi1bZ3JlbWxpbi1ncm9vdnksbW9kZXJuXQotLS0tLQotOnJlbW90ZSBjb25maWcgdmlzdWFsVHJhdmVyc2FsIGdyYXBoICAgICAgICAgICAgICAgICAgIDwxPgotdHJhdmVyc2FsID0gdmcuVigyKS5pbigpLm91dCgna25vd3MnKS4KLSAgICAgICAgICAgICAgICAgICAgaGFzKCdhZ2UnLGd0KDMwKSkub3V0RSgnY3JlYXRlZCcpLgotICAgICAgICAgICAgICAgICAgICBoYXMoJ3dlaWdodCcsZ3QoMC41ZCkpLmluVigpO1tdICAgIDwyPgotOj4gdHJhdmVyc2FsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgotLS0tLQotCi08MT4gQ29uZmlndXJlIGEgInZpc3VhbCB0cmF2ZXJzYWwiIGZyb20geW91ciAiZ3JhcGgiIC0gdGhpcyBtdXN0IGJlIGEgYEdyYXBoYCBpbnN0YW5jZS4gVGhpcyBjb21tYW5kIHdpbGwgY3JlYXRlIGEKLW5ldyBgVHJhdmVyc2FsU291cmNlYCBjYWxsZWQgInZnIiB0aGF0IG11c3QgYmUgdXNlZCB0byB2aXN1YWxpemUgYW55IHNwYXduZWQgdHJhdmVyc2FscyBpbiBHZXBoaS4KLTwyPiBEZWZpbmUgdGhlIHRyYXZlcnNhbCB0byBiZSB2aXN1YWxpemVkLiBOb3RlIHRoYXQgZW5kaW5nIHRoZSBsaW5lIHdpdGggYDtbXWAgc2ltcGx5IHByZXZlbnRzIGl0ZXJhdGlvbiBvZgotdGhlIHRyYXZlcnNhbCBiZWZvcmUgaXQgaXMgc3VibWl0dGVkLgotPDM+IFN1Ym1pdCB0aGUgYFRyYXZlcnNhbGAgdG8gdmlzdWFsaXplIHRvIEdlcGhpLgotCi1XaGVuIHRoZSBgOj5gIGxpbmUgaXMgY2FsbGVkLCBlYWNoIHN0ZXAgb2YgdGhlIGBUcmF2ZXJzYWxgIHRoYXQgcHJvZHVjZXMgb3IgZmlsdGVycyB2ZXJ0aWNlcyBnZW5lcmF0ZXMgZXZlbnRzIHRvCi1HZXBoaS4gVGhlIGV2ZW50cyB1cGRhdGUgdGhlIGNvbG9yIGFuZCBzaXplIG9mIHRoZSB2ZXJ0aWNlcyBhdCB0aGF0IHN0ZXAgd2l0aCBgc3RhcnRSR0JDb2xvcmAgYW5kIGBzdGFydFNpemVgCi1yZXNwZWN0aXZlbHkuIEFmdGVyIHRoZSBmaXJzdCBzdGVwIHZpc3VhbGl6YXRpb24sIGl0IHNsZWVwcyBmb3IgdGhlIGNvbmZpZ3VyZWQgYHN0ZXBEZWxheWAgaW4gbWlsbGlzZWNvbmRzLiBPbiB0aGUKLXNlY29uZCBzdGVwLCBpdCBkZWNheXMgdGhlIGNvbmZpZ3VyZWQgYGNvbG9yVG9GYWRlYCBvZiBhbGwgdGhlIHByZXZpb3VzbHkgdmlzaXRlZCB2ZXJ0aWNlcyBpbiBwcmlvciBzdGVwcywgYnkKLW11bHRpcGx5aW5nIHRoZSBjdXJyZW50IGBjb2xvclRvRmFkZWAgdmFsdWUgZm9yIGVhY2ggdmVydGV4IHdpdGggdGhlIGBjb2xvckZhZGVSYXRlYC4gIFNldHRpbmcgdGhlIGBjb2xvckZhZGVSYXRlYAotdmFsdWUgdG8gYDEuMGAgd2lsbCBwcmV2ZW50IHRoZSBjb2xvciBkZWNheS4gIFRoZSBzY3JlZW5zaG90cyBiZWxvdyBzaG93IGhvdyB0aGUgdmlzdWFsaXphdGlvbiBldm9sdmVzIG92ZXIgdGhlIGZvdXIKLXN0ZXBzOgotCi1pbWFnZTo6Z2VwaGktdHJhdmVyc2FsLnBuZ1t3aWR0aD0xMjAwXQotCi1UbyBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIHZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFmZmVjdCB0aGUgb3V0cHV0LCBzZWUgdGhlIGV4YW1wbGUgYmVsb3c6Ci0KLVtncmVtbGluLWdyb292eSxtb2Rlcm5dCi0tLS0tCi06cmVtb3RlIGNvbmZpZyBzdGFydFJHQkNvbG9yIFswLjAsMC4zLDEuMF0KLTpyZW1vdGUgY29uZmlnIGNvbG9yVG9GYWRlIGIKLTpyZW1vdGUgY29uZmlnIGNvbG9yRmFkZVJhdGUgMC41Ci06PiB0cmF2ZXJzYWwKLS0tLS0KLQotaW1hZ2U6OmdlcGhpLXRyYXZlcnNhbC1jb25maWcucG5nW3dpZHRoPTQwMF0KLQotVGhlIHZpc3VhbGl6YXRpb24gY29uZmlndXJhdGlvbiBhYm92ZSBzdGFydHMgd2l0aCBhIGJsdWUgY29sb3Igbm93IChtb3N0IHJlY2VudGx5IHZpc2l0ZWQpLCBmYWRpbmcgdGhlIGJsdWUgY29sb3IKLShzbyB0aGF0IGRhcmsgZ3JlZW4gcmVtYWlucyBvbiBvbGRlc3QgdmlzaXRlZCksIGFuZCBmYWRpbmcgdGhlIGJsdWUgY29sb3IgbW9yZSBxdWlja2x5IHNvIHRoYXQgdGhlIGdyYWRpZW50IGZyb20gZGFyawotZ3JlZW4gdG8gYmx1ZSBhY3Jvc3Mgc3RlcHMgaGFzIGhpZ2hlciBjb250cmFzdC4gVGhlIGZvbGxvd2luZyB0YWJsZSBwcm92aWRlcyBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlCi1HZXBoaSBwbHVnaW4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGFjY2VwdGVkIHZpYSB0aGUgYDpyZW1vdGUgY29uZmlnYCBjb21tYW5kOgotCi1bd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsXjIiLG9wdGlvbnM9ImhlYWRlciJdCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci18UGFyYW1ldGVyIHxEZXNjcmlwdGlvbiB8RGVmYXVsdAotfHdvcmtzcGFjZSB8VGhlIG5hbWUgb2YgdGhlIHdvcmtzcGFjZSB0aGF0IHlvdXIgR3JhcGggU3RyZWFtaW5nIHNlcnZlciBpcyBzdGFydGVkIGZvci4gfHdvcmtzcGFjZTEKLXxob3N0IHxUaGUgaG9zdCBVUkwgd2hlcmUgdGhlIEdyYXBoIFN0cmVhbWluZyBzZXJ2ZXIgaXMgY29uZmlndXJlZCBmb3IuIHxsb2NhbGhvc3QKLXxwb3J0IHxUaGUgcG9ydCBudW1iZXIgb2YgdGhlIFVSTCB0aGF0IHRoZSBHcmFwaCBTdHJlYW1pbmcgc2VydmVyIGlzIGxpc3RlbmluZyBvbi4gfDgwODAKLXxzaXplRGVjcmVtZW50UmF0ZSB8VGhlIHJhdGUgYXQgd2hpY2ggdGhlIHNpemUgb2YgYW4gZWxlbWVudCBkZWNyZWFzZXMgb24gZWFjaCBzdGVwIG9mIHRoZSB2aXN1YWxpemF0aW9uLiB8MC4zMwotfHN0ZXBEZWxheSB8VGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBwYXVzZSBiZXR3ZWVuIHN0ZXAgdmlzdWFsaXphdGlvbnMuIHwxMDAwCi18c3RhcnRSR0JDb2xvciB8QSBzaXplIDMgZmxvYXQgYXJyYXkgb2YgUkdCIGNvbG9yIHZhbHVlcyB3aGljaCBkZWZpbmUgdGhlIHN0YXJ0aW5nIGNvbG9yIHRvIHVwZGF0ZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZXMgd2l0aC4gIHxbMC4wLDEuMCwwLjVdCi18c3RhcnRTaXplIHxUaGUgc2l6ZSBhbiBlbGVtZW50IHNob3VsZCBiZSB3aGVuIGl0IGlzIG1vc3QgcmVjZW50bHkgdmlzaXRlZC4gfDIwCi18Y29sb3JUb0ZhZGUgfEEgc2luZ2xlIGNoYXIgZnJvbSB0aGUgc2V0IGB7cixnLGIsUixHLEJ9YCBkZXRlcm1pbmluZyB3aGljaCBjb2xvciB0byBmYWRlIGZvciB2ZXJ0aWNlcyB2aXNpdGVkIGluIHByaW9yIHN0ZXBzIHxnCi18Y29sb3JGYWRlUmF0ZSB8QSBmbG9hdCB2YWx1ZSBpbiB0aGUgcmFuZ2UgYCgwLjAsMS4wXWAgd2hpY2ggaXMgbXVsdGlwbGllZCBhZ2FpbnN0IHRoZSBjdXJyZW50IGBjb2xvclRvRmFkZWAgdmFsdWUgZm9yIHByaW9yIHZlcnRpY2VzOyBhIGAxLjBgIHZhbHVlIGVmZmVjdGl2ZWx5IHR1cm5zIG9mZiB0aGUgY29sb3IgZmFkaW5nIG9mIHByaW9yIHN0ZXAgdmlzaXRlZCB2ZXJ0aWNlcyB8MC43Ci18dmlzdWFsVHJhdmVyc2FsIHxDcmVhdGVzIGEgYFRyYXZlcnNhbFNvdXJjZWAgdmFyaWFibGUgaW4gdGhlIENvbnNvbGUgbmFtZWQgYHZnYCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgdmlzdWFsaXppbmcgdHJhdmVyc2Fscy4gVGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiB0YWtlcyB0d28gcGFyYW1ldGVycy4gIFRoZSBmaXJzdCBpcyByZXF1aXJlZCBhbmQgaXMgdGhlIG5hbWUgb2YgdGhlIGBHcmFwaGAgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCB3aWxsIGdlbmVyYXRlIHRoZSBgVHJhdmVyc2FsU291cmNlYC4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSB2YXJpYWJsZSBuYW1lIHRoYXQgdGhlIGBUcmF2ZXJzYWxTb3VyY2VgIHNob3VsZCBoYXZlIHdoZW4gcmVmZXJlbmNlZCBpbiB0aGUgQ29uc29sZS4gIElmIGxlZnQgdW5zcGVjaWZpZWQsIHRoaXMgdmFsdWUgZGVmYXVsdHMgdG8gYHZnYC4gfHZnCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLU5PVEU6IFRoaXMgcGx1Z2luIGlzIHR5cGljYWxseSBvbmx5IHVzZWZ1bCB0byB0aGUgR3JlbWxpbiBDb25zb2xlIGFuZCBpcyBlbmFibGVkIGluIHRoZSB0aGVyZSBieSBkZWZhdWx0LgotCi1UaGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIGFzc3VtZSB0aGF0IHRoZSBgR3JhcGhgIGluc3RhbmNlIGJlaW5nIHZpc3VhbGl6ZWQgaXMgbG9jYWwgdG8gdGhlIEdyZW1saW4gQ29uc29sZS4gSXQgbWFrZXMgdGhhdAotYXNzdW1wdGlvbiBiZWNhdXNlIHRoZSBHZXBoaSBwbHVnaW4gcmVxdWlyZXMgYSBsb2NhbGx5IGhlbGQgYEdyYXBoYC4gSWYgdGhlIGludGVudCBpcyB0byB2aXN1YWxpemUgYSBgR3JhcGhgIGluc3RhbmNlCi1ob3N0ZWQgaW4gR3JlbWxpbiBTZXJ2ZXIgb3IgYSBUaW5rZXJQb3AtZW5hYmxlZCBncmFwaCB0aGF0IGNhbiBvbmx5IGJlIGNvbm5lY3RlZCB0byBpbiBhICJyZW1vdGUiIGZhc2hpb24sIHRoZW4gaXQKLWlzIHN0aWxsIHBvc3NpYmxlIHRvIHVzZSB0aGUgR2VwaGkgcGx1Z2luLCBidXQgdGhlIHJlcXVpcmVtZW50IGZvciBhIGxvY2FsbHkgaGVsZCBgR3JhcGhgIHJlbWFpbnMgdGhlIHNhbWUuIFRvIHVzZQotdGhlIEdlcGhpIHBsdWdpbiBpbiB0aGVzZSBzaXR1YXRpb25zIHNpbXBseSB1c2UgPDxzdWJncmFwaC1zdGVwLHN1YmdyYXBoKCktc3RlcD4+IHRvIGV4dHJhY3QgdGhlIHBvcnRpb24gb2YgdGhlIHJlbW90ZQotZ3JhcGggdGhhdCB3aWxsIGJlIHZpc3VhbGl6ZWQuIFVzZSBvZiB0aGF0IHN0ZXAgd2lsbCByZXR1cm4gYSBgVGlua2VyR3JhcGhgIGluc3RhbmNlIHRvIHRoZSBHcmVtbGluIENvbnNvbGUgYXQgd2hpY2gKLXBvaW50IGl0IGNhbiBiZSB1c2VkIGxvY2FsbHkgd2l0aCB0aGUgR2VwaGkgcGx1Z2luLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoZSBnZW5lcmFsIHN0ZXBzOgotCi1bc291cmNlLHRleHRdCi0tLS0tCi1ncmVtbGluPiA6cmVtb3RlIGNvbm5lY3QgdGlua2VycG9wLnNlcnZlciBjb25mL3JlbW90ZS1vYmplY3RzLnlhbWwgPDE+Ci0uLi4KLWdyZW1saW4+IDo+IGcuRSgpLmhhc0xhYmVsKCdrbm93cycpLnN1YmdyYXBoKCdzdWJHcmFwaCcpLmNhcCgnc3ViR3JhcGgnKSA8Mj4KLS4uLgotZ3JlbWxpbj4gZ3JhcGggPSByZXN1bHRbMF0ub2JqZWN0IDwzPgotLi4uCi0tLS0tCi0KLTwxPiBCZSBzdXJlIHRvIGNvbm5lY3Qgd2l0aCBhIHNlcmlhbGl6ZXIgY29uZmlndXJlZCB0byByZXR1cm4gb2JqZWN0cyBhbmQgbm90IHRoZWlyIGB0b1N0cmluZygpYCByZXByZXNlbnRhdGlvbiB3aGljaAotaXMgZGlzY3Vzc2VkIGluIG1vcmUgZGV0YWlsIGluIHRoZSA8PGNvbm5lY3RpbmctdmlhLWNvbnNvbGUsIENvbm5lY3RpbmcgVmlhIENvbnNvbGU+PiBTZWN0aW9uLgotPDI+IFVzZSB0aGUgYDo+YCBjb21tYW5kIHRvIHN1YmdyYXBoIHRoZSByZW1vdGUgZ3JhcGggYXMgbmVlZGVkLgotPDM+IFRoZSBgVGlua2VyR3JhcGhgIG9mIHRoYXQgcHJldmlvdXMgdHJhdmVyc2FsIGNhbiBiZSBmb3VuZCBpbiB0aGUgYHJlc3VsdGAgb2JqZWN0IGFuZCBub3cgdGhhdCB0aGUgYEdyYXBoYCBpcyBsb2NhbAotdG8gR3JlbWxpbiBDb25zb2xlIGl0IGNhbiBiZSB1c2VkIHdpdGggR2VwaGkgYXMgc2hvd24gaW4gdGhlIHByaW9yIGluc3RydWN0aW9uIHNldC4KIAogW1tncmFwaC1wbHVnaW5zXV0KID09PSBHcmFwaCBQbHVnaW5zCiAKIFRoaXMgc2VjdGlvbiBkb2VzIG5vdCByZWZlciB0byBhIHNwZWNpZmljIEdyZW1saW4gUGx1Z2luLCBidXQgYSBjbGFzcyBvZiB0aGVtLiBHcmFwaCBQbHVnaW5zIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieQotZ3JhcGggcHJvdmlkZXJzIHRvIG1ha2UgaXQgZWFzeSB0byBpbnRlZ3JhdGUgdGhlaXIgZ3JhcGggc3lzdGVtcyBpbnRvIEdyZW1saW4gQ29uc29sZSBhbmQgR3JlbWxpbiBTZXJ2ZXIuIEFzIFRpbmtlclBvcAotcHJvdmlkZXMgdHdvIHJlZmVyZW5jZSBgR3JhcGhgIGltcGxlbWVudGF0aW9ucyBpbiA8PHRpbmtlcmdyYXBoLWdyZW1saW4sVGlua2VyR3JhcGg+PiBhbmQgPDxuZW80ai1ncmVtbGluLE5lbzRqPj4sCi10aGVyZSBpcyBhbHNvIG9uZSBHcmVtbGluIFBsdWdpbiBmb3IgZWFjaCBvZiB0aGVtLgotCi1UaGUgVGlua2VyR3JhcGggcGx1Z2luIGlzIGluc3RhbGxlZCBhbmQgYWN0aXZhdGVkIGluIHRoZSBHcmVtbGluIENvbnNvbGUgYnkgZGVmYXVsdCBhbmQgdGhlIHNhbXBsZSBjb25maWd1cmF0aW9ucyB0aGF0CitncmFwaCBwcm92aWRlcnMgdG8gbWFrZSBpdCBlYXN5IHRvIGludGVncmF0ZSB0aGVpciBncmFwaCBzeXN0ZW1zIGludG8gR3JlbWxpbiBDb25zb2xlIGFuZCBHcmVtbGluIFNlcnZlci4gVGhlCitUaW5rZXJHcmFwaCBwbHVnaW4gaXMgaW5zdGFsbGVkIGFuZCBhY3RpdmF0ZWQgaW4gdGhlIEdyZW1saW4gQ29uc29sZSBieSBkZWZhdWx0IGFuZCB0aGUgc2FtcGxlIGNvbmZpZ3VyYXRpb25zIHRoYXQKIGFyZSBzdXBwbGllZCB3aXRoIHRoZSBHcmVtbGluIFNlcnZlciBkaXN0cmlidXRpb24gaW5jbHVkZSB0aGUgYFRpbmtlckdyYXBoR3JlbWxpblBsdWdpbmAgYXMgcGFydCBvZiB0aGUgZGVmYXVsdCBzZXR1cC4KLUlmIHVzaW5nIE5lbzRqLCBob3dldmVyLCB0aGUgcGx1Z2luIG11c3QgYmUgaW5zdGFsbGVkIG1hbnVhbGx5LiBJbnN0cnVjdGlvbnMgZm9yIGRvaW5nIHNvIGNhbiBiZSBmb3VuZCBpbiB0aGUKLTw8bmVvNGotZ3JlbWxpbixOZW80aj4+IHNlY3Rpb24uCiAKIFtbaGFkb29wLXBsdWdpbl1dCiA9PT0gSGFkb29wIFBsdWdpbgpAQCAtMzAyNyw5ICsyMzU4LDEyIEBACiAqIEluc3BlY3QgdGhlIHNlcnZlcuKAmXMgaGVhbHRoIGFuZCBjb25uZWN0aW9uIHRvIGEgR3JlbWxpbiBkYXRhIHNvdXJjZQogKiBEaXNjb3ZlciB0aGUgZ3JhcGjigJlzIHNjaGVtYSAobGFiZWxzLCBwcm9wZXJ0aWVzLCByZWxhdGlvbnNoaXBzLCBjb3VudHMpCiAqIEV4ZWN1dGUgR3JlbWxpbiB0cmF2ZXJzYWxzCisqIFRyYW5zbGF0ZSBHcmVtbGluIHF1ZXJpZXMgYmV0d2VlbiBsYW5ndWFnZSB2YXJpYW50cworKiBGb3JtYXQgR3JlbWxpbiBxdWVyaWVzIGZvciByZWFkYWJpbGl0eQogCiBUaGUgR3JlbWxpbiBNQ1Agc2VydmVyIHNpdHMgYWxvbmdzaWRlIEdyZW1saW4gU2VydmVyIChvciBhbnkgVGlua2VyUG9w4oCRY29tcGF0aWJsZSBlbmRwb2ludCkgYW5kIGZvcndhcmRzIHRvb2wgY2FsbHMgdG8KLXRoZSBncmFwaCB2aWEgc3RhbmRhcmQgR3JlbWxpbiB0cmF2ZXJzYWxzLgordGhlIGdyYXBoIHZpYSBzdGFuZGFyZCBHcmVtbGluIHRyYXZlcnNhbHMuIFRoZSB0cmFuc2xhdGlvbiBhbmQgZm9ybWF0dGluZyB0b29scyBhcmUgdXRpbGl0eSB0b29scyB0aGF0IHdvcmsKK2luZGVwZW5kZW50bHkgYW5kIGRvIG5vdCByZXF1aXJlIGEgZ3JhcGggY29ubmVjdGlvbi4KIAogSU1QT1JUQU5UOiBUaGlzIE1DUCBzZXJ2ZXIgaXMgZGVzaWduZWQgZm9yIGRldmVsb3BtZW50IGFuZCB0cnVzdGVkIGVudmlyb25tZW50cy4KIApAQCAtMzA1Niw2ICsyMzkwLDcgQEAKICAgcHJvcGVydGllcyBtYXkgYmUgc3VyZmFjZWQgYXMgZW51bXMgdG8gZW5jb3VyYWdlIHZhbGlkIHZhbHVlcyBpbiBxdWVyaWVzLgogKiBgcnVuX2dyZW1saW5fcXVlcnlgIOKAlCBFeGVjdXRlcyBhbiBhcmJpdHJhcnkgR3JlbWxpbiB0cmF2ZXJzYWwgYW5kIHJldHVybnMgSlNPTiByZXN1bHRzLgogKiBgcmVmcmVzaF9zY2hlbWFfY2FjaGVgIOKAlCBGb3JjZXMgc2NoZW1hIGRpc2NvdmVyeSB0byBydW4gYWdhaW4gd2hlbiB0aGUgZ3JhcGggaGFzIGNoYW5nZWQuCisqIGB0cmFuc2xhdGVfZ3JlbWxpbl9xdWVyeWAg4oCUIFRyYW5zbGF0ZXMgYSBHcmVtbGluIHF1ZXJ5IHRvIGEgdGFyZ2V0IGxhbmd1YWdlIHZhcmlhbnQgd2l0aCBvcHRpb25hbCBub3JtYWxpemF0aW9uLgogKiBgZm9ybWF0X2dyZW1saW5fcXVlcnlgIOKAlCBGb3JtYXRzIGEgR3JlbWxpbiBxdWVyeSB1c2luZyBncmVtbGludC4KIAogPT09IFNjaGVtYSBkaXNjb3ZlcnkKQEAgLTMxMTMsNyArMjQ0OCwzOSBAQAogICAgICAgICBsaW1pdCgxKS5mb2xkKCkpCiAtLS0tCiAKLT09PSBFeGVjdXRpbmcgdHJhdmVyc2FscworPT09PSBUcmFuc2xhdGluZyB0cmF2ZXJzYWxzCisKK1RoZSBgdHJhbnNsYXRlX2dyZW1saW5fcXVlcnlgIHRvb2wgdHJhbnNsYXRlcyBhIEdyZW1saW4gcXVlcnkgZnJvbSBvbmUgbGFuZ3VhZ2UgdmFyaWFudCB0byBhbm90aGVyLiBTdXBwb3J0ZWQKK3RhcmdldHMgYXJlOiBgY2Fub25pY2FsYCwgYGphdmFzY3JpcHRgLCBgcHl0aG9uYCwgYGdvYCwgYGRvdG5ldGAsIGBqYXZhYCwgYGdyb292eWAsIGFuZCBgYW5vbnltaXplZGAuIFRoZQorYGNhbm9uaWNhbGAgdGFyZ2V0IHByb2R1Y2VzIGdyZW1saW4tbGFuZ3VhZ2UgQU5UTFIgZm9ybWF0IHdpdGggbm9ybWFsaXplZCB3aGl0ZXNwYWNlIGFuZCBleHBsaWNpdCBlbnVtIG5hbWVzLAord2hpY2ggaXMgdXNlZnVsIGZvciB2YWxpZGF0aW5nIG9yIHN0YW5kYXJkaXppbmcgcXVlcmllcyBiZWZvcmUgZnVydGhlciBwcm9jZXNzaW5nLgorCitUaGUgb3B0aW9uYWwgYHNvdXJjZWAgcGFyYW1ldGVyIGNvbnRyb2xzIGhvdyB0aGUgaW5wdXQgaXMgcHJlLXByb2Nlc3NlZCBiZWZvcmUgdHJhbnNsYXRpb246CisKKyogV2hlbiBvbWl0dGVkIG9yIHNldCB0byBgYXV0b2AgKHRoZSBkZWZhdWx0KSwgdGhlIHNlcnZlciBhcHBsaWVzIG1lY2hhbmljYWwgbm9ybWFsaXphdGlvbiAoc3RyaXBwaW5nCisgIGxhbmd1YWdlLXNwZWNpZmljIHByZWZpeGVzLCBjb3JyZWN0aW5nIHN0ZXAgY2FzaW5nKSBhbmQgdGhlbiByZXF1ZXN0cyBMTE0gbm9ybWFsaXphdGlvbiBmcm9tIHRoZSBNQ1AgY2xpZW50CisgIHZpYSBNQ1Agc2FtcGxpbmcuIFRoaXMgaGFuZGxlcyBpbnB1dCBmcm9tIGFueSBkaWFsZWN0IHdpdGhvdXQgdGhlIGNhbGxlciBuZWVkaW5nIHRvIGtub3cgdGhlIHNvdXJjZSBsYW5ndWFnZS4KKyAgSWYgdGhlIE1DUCBjbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZywgdGhlIExMTSBzdGVwIGlzIHNraXBwZWQgYW5kIGEgYHdhcm5pbmdgIGZpZWxkIGlzIGluY2x1ZGVkIGluCisgIHRoZSByZXNwb25zZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXN1bHQgaXMgYmFzZWQgb24gbWVjaGFuaWNhbCBub3JtYWxpemF0aW9uIG9ubHkuCisqIFdoZW4gc2V0IHRvIGBjYW5vbmljYWxgLCBub3JtYWxpemF0aW9uIGlzIHNraXBwZWQgZW50aXJlbHkgYW5kIHRoZSBpbnB1dCBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIHRyYW5zbGF0b3IuCisgIFRoaXMgaXMgdGhlIG1vc3QgZWZmaWNpZW50IHBhdGggd2hlbiB0aGUgaW5wdXQgaXMga25vd24gdG8gYmUgaW4gY2Fub25pY2FsIGdyZW1saW4tbGFuZ3VhZ2UgQU5UTFIgZm9ybWF0LgorCitGb3IgZXhhbXBsZSwgYSB1c2VyIGNvdWxkIHN1cHBseSB0aGlzIHByb21wdCB0byB0aGUgYXNzaXN0YW50OgorCitbc291cmNlLHRleHRdCistLS0tCitUcmFuc2xhdGUgdGhpcyBHbyB0cmF2ZXJzYWwgdG8gR3Jvb3Z5OgorZ3JlbWxpbmdvLlRfXy5WKCkuSGFzKCJuYW1lIiwgIkFsaWNlIikuT3V0KCJrbm93cyIpLlZhbHVlcygibmFtZSIpCistLS0tCisKK0FuZCB0aGUgYXNzaXN0YW50IHdvdWxkIGNhbGwgYHRyYW5zbGF0ZV9ncmVtbGluX3F1ZXJ5YCB3aXRoIGB0YXJnZXQ6ICJncm9vdnkiYCBhbmQgcmVjZWl2ZToKKworW3NvdXJjZSxncm9vdnldCistLS0tCitnLlYoKS5oYXMoJ25hbWUnLCAnQWxpY2UnKS5vdXQoJ2tub3dzJykudmFsdWVzKCduYW1lJykKKy0tLS0KKworPT09PSBFeGVjdXRpbmcgdHJhdmVyc2FscwogCiBXaGVuIHRoZSBhc3Npc3RhbnQgbmVlZHMgdG8gYW5zd2VyIGEgcXVlc3Rpb24sIGEgY29tbW9uIHNlcXVlbmNlIGlzOgogCkBAIC0zMTM3LDcgKzI1MDQsNyBAQAogCiBCYXNpYyBjb25uZWN0aW9uIHNldHRpbmdzOgogCi0qIGBHUkVNTElOX01DUF9FTkRQT0lOVGAg4oCUIGBob3N0OnBvcnRgIG9yIGBob3N0OnBvcnQvdHJhdmVyc2FsX3NvdXJjZWAgZm9yIHRoZSB0YXJnZXQgR3JlbWxpbiBTZXJ2ZXIgb3IgY29tcGF0aWJsZSBlbmRwb2ludCAoZGVmYXVsdCB0cmF2ZXJzYWwgc291cmNlOiBgZ2ApCisqIGBHUkVNTElOX01DUF9FTkRQT0lOVGAg4oCUIGBob3N0OnBvcnRgIG9yIGBob3N0OnBvcnQvdHJhdmVyc2FsX3NvdXJjZWAgZm9yIHRoZSB0YXJnZXQgR3JlbWxpbiBTZXJ2ZXIgb3IgY29tcGF0aWJsZSBlbmRwb2ludCAoZGVmYXVsdCB0cmF2ZXJzYWwgc291cmNlOiBgZ2ApLiBPcHRpb25hbCDigJQgd2hlbiBub3Qgc2V0LCBncmFwaCB0b29scyBhcmUgbm90IHJlZ2lzdGVyZWQgYnV0IGB0cmFuc2xhdGVfZ3JlbWxpbl9xdWVyeWAgYW5kIGBmb3JtYXRfZ3JlbWxpbl9xdWVyeWAgcmVtYWluIGF2YWlsYWJsZS4KICogYEdSRU1MSU5fTUNQX1VTRV9TU0xgIOKAlCBzZXQgdG8gYHRydWVgIHdoZW4gVExTIGlzIHJlcXVpcmVkIGJ5IHRoZSBlbmRwb2ludCAoZGVmYXVsdDogYGZhbHNlYCkKICogYEdSRU1MSU5fTUNQX1VTRVJOQU1FYCAvIGBHUkVNTElOX1BBU1NXT1JEYCDigJQgY3JlZGVudGlhbHMgd2hlbiBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkIChvcHRpb25hbCkKICogYEdSRU1MSU5fTUNQX0lETEVfVElNRU9VVGAg4oCUIGlkbGUgY29ubmVjdGlvbiB0aW1lb3V0IGluIHNlY29uZHMgKGRlZmF1bHQ6IGAzMDBgKQpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVmZXJlbmNlL2dyZW1saW4tdmFyaWFudHMuYXNjaWlkb2MgYi9kb2NzL3NyYy9yZWZlcmVuY2UvZ3JlbWxpbi12YXJpYW50cy5hc2NpaWRvYwppbmRleCA4MzI0ZThiLi4zMmM0YTY0IDEwMDY0NAotLS0gYS9kb2NzL3NyYy9yZWZlcmVuY2UvZ3JlbWxpbi12YXJpYW50cy5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWZlcmVuY2UvZ3JlbWxpbi12YXJpYW50cy5hc2NpaWRvYwpAQCAtMzUsMTIgKzM1LDEyIEBACiAKIFRpbmtlclBvcCBwcm92aWRlcyBhbiBhcnJheSBvZiBkcml2ZXJzIGluIGRpZmZlcmVudCBwcm9ncmFtbWluZyBsYW5ndWFnZXMgYXMgYSB3YXkgdG8gY29ubmVjdCB0byBhIHJlbW90ZSBHcmVtbGluCiBTZXJ2ZXIgb3IgUmVtb3RlIEdyZW1saW4gUHJvdmlkZXIuIERyaXZlcnMgYWxsb3cgdGhlIGRldmVsb3BlciB0byBtYWtlIHJlcXVlc3RzIHRvIHRoYXQgcmVtb3RlIHN5c3RlbSBhbmQgZ2V0IGJhY2sKLXJlc3VsdHMgZnJvbSB0aGUgVGlua2VyUG9wLWVuYWJsZWQgZ3JhcGhzIGhvc3RlZCB3aXRoaW4uIEEgZHJpdmVyIGNhbiBzdWJtaXQgR3JlbWxpbiBzdHJpbmdzIGFuZCBHcmVtbGluIGJ5dGVjb2RlCi1vdmVyIHRoaXMgc3ViLXByb3RvY29sLiBHcmVtbGluIHN0cmluZ3MgYXJlIHdyaXR0ZW4gaW4gdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgcmVtb3RlIHN5c3RlbSB0aGF0Ci10aGUgZHJpdmVyIGlzIGNvbm5lY3RpbmcgdG8gKHR5cGljYWxseSwgR3Jvb3Z5LWJhc2VkKS4gVGhpcyBjb25uZWN0aW9uIGFwcHJvYWNoIGlzIHF1aXRlIHNpbWlsYXIgdG8gd2hhdCBkZXZlbG9wZXJzCityZXN1bHRzIGZyb20gdGhlIFRpbmtlclBvcC1lbmFibGVkIGdyYXBocyBob3N0ZWQgd2l0aGluLiBBIGRyaXZlciBjYW4gc3VibWl0IEdyZW1saW4gc3RyaW5ncyBhbmQgR3JlbWxpbiB0cmF2ZXJzYWxzCitvdmVyIHRoaXMgSFRUUCBwcm90b2NvbC4gR3JlbWxpbiBzdHJpbmdzIGFyZSB3cml0dGVuIGluIHRoZSBzY3JpcHRpbmcgbGFuZ3VhZ2UgbWFkZSBhdmFpbGFibGUgYnkgdGhlIHJlbW90ZSBzeXN0ZW0gdGhhdAordGhlIGRyaXZlciBpcyBjb25uZWN0aW5nIHRvICh0eXBpY2FsbHksIDw8Y2Fub25pY2FsLWdyZW1saW4tZGVmaW5pdGlvbixDYW5vbmljYWwgR3JlbWxpbj4+KS4gVGhpcyBjb25uZWN0aW9uIGFwcHJvYWNoIGlzIHF1aXRlIHNpbWlsYXIgdG8gd2hhdCBkZXZlbG9wZXJzCiBhcmUgbGlrZWx5IGZhbWlsaWFyIHdpdGggd2hlbiB1c2luZyBKREJDIGFuZCBTUUwuCiAKLVRoZSBwcmVmZXJyZWQgYXBwcm9hY2ggaXMgdG8gdXNlIGJ5dGVjb2RlLWJhc2VkIHJlcXVlc3RzLCB3aGljaCBlc3NlbnRpYWxseSBhbGxvd3MgdGhlIGFiaWxpdHkgdG8gY3JhZnQgR3JlbWxpbgorVGhlIHByZWZlcnJlZCBhcHByb2FjaCBpcyB0byB1c2UgdHJhdmVyc2FsLWJhc2VkIHJlcXVlc3RzLCB3aGljaCBlc3NlbnRpYWxseSBhbGxvd3MgdGhlIGFiaWxpdHkgdG8gY3JhZnQgR3JlbWxpbgogZGlyZWN0bHkgaW4gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlIG9mIGNob2ljZS4gQXMgR3JlbWxpbiBtYWtlcyB1c2Ugb2YgdHdvIGZ1bmRhbWVudGFsIHByb2dyYW1taW5nIGNvbnN0cnVjdHM6CiBsaW5rOmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Z1bmN0aW9uX2NvbXBvc2l0aW9uW2Z1bmN0aW9uIGNvbXBvc2l0aW9uXSBhbmQKIGxpbms6aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmVzdGVkX2Z1bmN0aW9uW2Z1bmN0aW9uIG5lc3RpbmddLCBpdCBpcyBwb3NzaWJsZSB0byBlbWJlZCB0aGUgR3JlbWxpbiBsYW5ndWFnZQpAQCAtNjQsNyArNjQsNTcgQEAKIHZhcmlhbnRzIGVuc3VyZXMgdGhhdCB0aGUgZ2VuZXJhbCBHcmVtbGluIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIGlzIGFwcGxpY2FibGUgdG8gYWxsIHZhcmlhbnRzIGFuZCB0aGF0IHVzZXJzIG1vdmluZwogYmV0d2VlbiBkZXZlbG9wbWVudCBsYW5ndWFnZXMgY2FuIGVhc2lseSBhZG9wdCB0aGUgR3JlbWxpbiB2YXJpYW50IGZvciB0aGF0IGxhbmd1YWdlLgogCi1pbWFnZTo6Z3JlbWxpbi12YXJpYW50LWFyY2hpdGVjdHVyZS5wbmdbd2lkdGg9NjUwXQorW1tjYW5vbmljYWwtZ3JlbWxpbi1kZWZpbml0aW9uXV0KKz09PSBDYW5vbmljYWwgR3JlbWxpbiBhbmQgR3JlbWxpbkxhbmcKKworIkNhbm9uaWNhbCBHcmVtbGluIiByZWZlcnMgdG8gdGhlIHN0YW5kYXJkLCBsYW5ndWFnZS1uZXV0cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEdyZW1saW4gdHJhdmVyc2FsIGFzIGRlZmluZWQgYnkKK3RoZSBBTlRMUiBncmFtbWFyIGluIHRoZSBgZ3JlbWxpbi1sYW5ndWFnZWAgbW9kdWxlLiBUaGlzIGdyYW1tYXIgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHZhbGlkIEdyZW1saW4gc3ludGF4CithbmQgaXMgd2hhdCB0aGUgYGdyZW1saW4tbGFuZ2Agc2NyaXB0IGVuZ2luZSBvbiBHcmVtbGluIFNlcnZlciB1c2VzIHRvIHBhcnNlIGluY29taW5nIHJlcXVlc3RzLgorCitFYWNoIEdMViBkcml2ZXIgcHJvZHVjZXMgY2Fub25pY2FsIEdyZW1saW4gc3RyaW5ncyB0aHJvdWdoIGEgY2xhc3MgY2FsbGVkIGBHcmVtbGluTGFuZ2AuIFdoZW4gYSB0cmF2ZXJzYWwgaXMgYnVpbHQgaW4KK2FueSBsYW5ndWFnZSAoSmF2YSwgUHl0aG9uLCBHbywgLk5FVCwgSmF2YVNjcmlwdCksIHRoZSBkcml2ZXIgdHJhbnNsYXRlcyBpdCBpbnRvIGEgY2Fub25pY2FsIEdyZW1saW4gc3RyaW5nIGFsb25nIHdpdGggYQorbWFwIG9mIG5hbWVkIHBhcmFtZXRlcnMuIFRoaXMgc3RyaW5nIGlzIHdoYXQgZ2V0cyBzZW50IHRvIHRoZSBzZXJ2ZXIgb3ZlciBIVFRQLiBCZWNhdXNlIGFsbCBkcml2ZXJzIHByb2R1Y2UgdGhlIHNhbWUKK2Nhbm9uaWNhbCBmb3JtYXQsIHRoZSB3aXJlIHByb3RvY29sIGlzIGh1bWFuLXJlYWRhYmxlIGFuZCBjb25zaXN0ZW50IGFjcm9zcyBsYW5ndWFnZXMuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRyYXZlcnNhbHMgaW4gZGlmZmVyZW50IGxhbmd1YWdlcyBhbGwgcHJvZHVjZSB0aGUgc2FtZSBjYW5vbmljYWwgR3JlbWxpbiBzdHJpbmcKK2BnLlYoKS5oYXNMYWJlbCgicGVyc29uIilgOgorCitbc291cmNlLGphdmFdCistLS0tCisvLyBKYXZhCitHcmFwaFRyYXZlcnNhbCB0ID0gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpOworU3RyaW5nIHNjcmlwdCA9IHQuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOworLS0tLQorCitbc291cmNlLHB5dGhvbl0KKy0tLS0KKyMgUHl0aG9uCit0ID0gZy5WKCkuaGFzX2xhYmVsKCJwZXJzb24iKQorc2NyaXB0ID0gdC5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQorLS0tLQorCitXaGVuIGRvY3VtZW50YXRpb24gb3IgY29kZSByZWZlcnMgdG8gYSAiZ3JlbWxpbi1sYW5nIHN0cmluZyIsICJjYW5vbmljYWwgR3JlbWxpbiIsIG9yICJjYW5vbmljYWwgZm9ybWF0IiwgaXQgbWVhbnMgYQordHJhdmVyc2FsIHN0cmluZyB0aGF0IGNvbmZvcm1zIHRvIHRoaXMgQU5UTFIgZ3JhbW1hci4gVGhlIGBHcmVtbGluVHJhbnNsYXRvcmAgY2xhc3MgY2FuIGNvbnZlcnQgY2Fub25pY2FsIEdyZW1saW4gaW50bworbGFuZ3VhZ2Utc3BlY2lmaWMgc3ludGF4IGZvciBhbnkgc3VwcG9ydGVkIEdMViAoc2VlIDw8dHJhbnNsYXRvcnMsIFRyYW5zbGF0aW5nIEdyZW1saW4+PikuCisKKz09PT0gU3RyaW5nIEVzY2FwaW5nCisKK1doZW4gc2VyaWFsaXppbmcgc3RyaW5nIHZhbHVlcyBpbnRvIGNhbm9uaWNhbCBHcmVtbGluLCBhbGwgR0xWcyBlc2NhcGUgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIHNvIHRoYXQgdGhlIHJlc3VsdGluZworc3RyaW5nIGlzIHZhbGlkIHdpdGhpbiB0aGUgQU5UTFIgZ3JhbW1hcjoKKworW2NvbHM9IjEsMSIsb3B0aW9ucz0iaGVhZGVyIl0KK3w9PT0KK3xDaGFyYWN0ZXIgfEVzY2FwZSBTZXF1ZW5jZQorfFwgfFxcCit8IiB8XCIKK3xuZXdsaW5lIHxcbgorfGNhcnJpYWdlIHJldHVybiB8XHIKK3x0YWIgfFx0Cit8YmFja3NwYWNlIHxcYgorfGZvcm0gZmVlZCB8XGYKK3w9PT0KKworRm9yIGV4YW1wbGUsIGEgc3RyaW5nIHZhbHVlIGBzYXkgImhlbGxvImAgd291bGQgYmUgc2VyaWFsaXplZCBhcyBgInNheSBcImhlbGxvXCIiYCBpbiB0aGUgY2Fub25pY2FsIEdyZW1saW4gc3RyaW5nLgogCiBUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIGVhY2ggbGFuZ3VhZ2UgdmFyaWFudCBhbmQgZHJpdmVyIHRoYXQgaXMgb2ZmaWNpYWxseSBUaW5rZXJQb3AgYSBwYXJ0IG9mIHRoZSBwcm9qZWN0LAogcHJvdmlkaW5nIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdXNhZ2UsIGNvbmZpZ3VyYXRpb24gYW5kIGtub3duIGxpbWl0YXRpb25zLgpAQCAtNzgsMTEgKzEyOCwxMyBAQAogd2l0aCBHcmVtbGluLUdvIHdpdGggcmVsYXRpdmUgZWFzZS4gTW9yZW92ZXIsIHRoZXJlIGFyZSBhIGZldyBhZGRlZCBjb25zdHJ1Y3RzIHRvIEdyZW1saW4tR28gdGhhdCBtYWtlIHRyYXZlcnNhbHMgYSBiaXQgbW9yZQogc3VjY2luY3QuCiAKK1RoZSBHcmVtbGluLUdvIGRyaXZlciBjb21tdW5pY2F0ZXMgd2l0aCBHcmVtbGluIFNlcnZlciBvdmVyIEhUVFAgdXNpbmcgdGhlIEdyYXBoQmluYXJ5IDQuMCBzZXJpYWxpemF0aW9uIGZvcm1hdC4KKwogVG8gaW5zdGFsbCB0aGUgR3JlbWxpbi1HbyBhcyBhIGRlcGVuZGVuY3kgZm9yIHlvdXIgcHJvamVjdCwgcnVuIHRoZSBmb2xsb3dpbmcgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHlvdXIgcHJvamVjdCB0aGF0IGNvbnRhaW5zIHlvdXIgYGdvLm1vZGAgZmlsZToKIAogW3NvdXJjZSxiYXNoXQogLS0tLQotZ28gZ2V0IGdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzW29wdGlvbmFsbHkgYXBwZW5kIEA8dmVyc2lvbj4sIHN1Y2ggYXMgQHYzLjUuM10KK2dvIGdldCBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92M1tvcHRpb25hbGx5IGFwcGVuZCBAPHZlcnNpb24+LCBzdWNoIGFzIEB2My44LjBdCiAtLS0tCiAKIFRoZSBmb2xsb3dpbmcgdGFibGUgb3V0bGluZXMgcmVjb21tZW5kZWQgcnVudGltZSB2ZXJzaW9ucyBieSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVpciBzdXBwb3J0IGJlZ2FuOgpAQCAtMTE0LDcgKzE2Niw3IEBACiAKIFtzb3VyY2UsZ29dCiAtLS0tCi1yZW1vdGUsIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKK3JlbW90ZSwgZXJyIDo9IGdyZW1saW5nby5OZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpCiBnIDo9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCiAtLS0tCiAKQEAgLTEyMiwyNiArMTc0LDM5IEBACiAKIFtzb3VyY2UsZ29dCiAtLS0tCi1yZW1vdGUsIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwKK3JlbW90ZSwgZXJyIDo9IGdyZW1saW5nby5OZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIsCiAgIGZ1bmMoc2V0dGluZ3MgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgewogICAgIHNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9ICJnbW9kZXJuIgogICB9KQogLS0tLQogCi1HcmVtbGluLWdvIHN1cHBvcnRzIHBsYWluIHRleHQgYXV0aGVudGljYXRpb24uIEl0IGNhbiBiZSBzZXQgaW4gdGhlIGNvbm5lY3Rpb24gZnVuY3Rpb24uCitHcmVtbGluLUdvIGNvbnRhaW5zIGFuIGBhdXRoYCBtb2R1bGUgd2l0aCBidWlsdC1pbiByZXF1ZXN0IGludGVyY2VwdG9ycy4gSW50ZXJjZXB0b3JzCithcmUgZnVuY3Rpb25zIHRoYXQgbW9kaWZ5IHRoZSBvdXRnb2luZyBIVFRQIHJlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQg4oCUIHRoZXkgYXJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLCBjdXN0b20KK2hlYWRlcnMsIG9yIHJlcXVlc3Qgc2lnbmluZy4gUGxhaW4gdGV4dCBhbmQgU2lnVjQgYXV0aGVudGljYXRpb24gYXJlIHByb3ZpZGVkIGFzIGJ1aWx0LWluIGludGVyY2VwdG9ycy4KIAogW3NvdXJjZSxnb10KIC0tLS0KLXJlbW90ZSwgZXJyIDo9IGdyZW1saW5nby5OZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLAotICBmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKKy8vIFBsYWluIHRleHQgYXV0aGVudGljYXRpb24KK3JlbW90ZSwgZXJyIDo9IGdyZW1saW5nby5OZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCJodHRwczovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLAorICBmdW5jKHNldHRpbmdzICpncmVtbGluZ28uRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7CiAgICAgc2V0dGluZ3MuVGxzQ29uZmlnID0gJnRscy5Db25maWd7SW5zZWN1cmVTa2lwVmVyaWZ5OiB0cnVlfQotICAgIHNldHRpbmdzLkF1dGhJbmZvID0gZ3JlbWxpbmdvLkJhc2ljQXV0aEluZm8oImxvZ2luIiwgInBhc3N3b3JkIikKKyAgICBzZXR0aW5ncy5SZXF1ZXN0SW50ZXJjZXB0b3JzID0gW11ncmVtbGluZ28uUmVxdWVzdEludGVyY2VwdG9yeworICAgICAgZ3JlbWxpbmdvLkJhc2ljQXV0aCgidXNlcm5hbWUiLCAicGFzc3dvcmQiKSwKKyAgICB9CisgIH0pCisKKy8vIFNpZ1Y0IGF1dGhlbnRpY2F0aW9uCityZW1vdGUsIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigiaHR0cHM6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwKKyAgZnVuYyhzZXR0aW5ncyAqZ3JlbWxpbmdvLkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgeworICAgIHNldHRpbmdzLlJlcXVlc3RJbnRlcmNlcHRvcnMgPSBbXWdyZW1saW5nby5SZXF1ZXN0SW50ZXJjZXB0b3J7CisgICAgICBncmVtbGluZ28uU2lnVjRBdXRoKCJzZXJ2aWNlLXJlZ2lvbiIsICJzZXJ2aWNlLW5hbWUiKSwKKyAgICB9CiAgIH0pCiAtLS0tCiAKIElmIHlvdSBhdXRoZW50aWNhdGUgdG8gYSByZW1vdGUgPDxjb25uZWN0aW5nLWdyZW1saW4tc2VydmVyLEdyZW1saW4gU2VydmVyPj4gb3IKLTw8Y29ubmVjdGluZy1yZ3AsUmVtb3RlIEdyZW1saW4gUHJvdmlkZXI+PiwgdGhpcyBzZXJ2ZXIgbm9ybWFsbHkgaGFzIFNTTCBhY3RpdmF0ZWQgYW5kIHRoZSB3ZWJzb2NrZXRzIHVybCB3aWxsIHN0YXJ0Ci13aXRoICd3c3M6Ly8nLgorPDxjb25uZWN0aW5nLXJncCxSZW1vdGUgR3JlbWxpbiBQcm92aWRlcj4+LCB0aGlzIHNlcnZlciBub3JtYWxseSBoYXMgU1NMIGFjdGl2YXRlZCBhbmQgdGhlIEhUVFAgdXJsIHdpbGwgc3RhcnQKK3dpdGggJ2h0dHBzOi8vJy4KIAogU29tZSBjb25uZWN0aW9uIG9wdGlvbnMgY2FuIGFsc28gYmUgc2V0IG9uIGluZGl2aWR1YWwgcmVxdWVzdHMgbWFkZSB0aHJvdWdoIHRoZSB1c2luZyBgV2l0aCgpYCBzdGVwIG9uIHRoZQogYFRyYXZlcnNhbFNvdXJjZWAuIEZvciBpbnN0YW5jZSB0byBzZXQgcmVxdWVzdCB0aW1lb3V0IHRvIDUwMCBtaWxsaXNlY29uZHM6CkBAIC0xNTEsNyArMjE2LDcgQEAKIHJlc3VsdHMsIGVyciA6PSBnLldpdGgoImV2YWx1YXRpb25UaW1lb3V0IiwgNTAwKS5WKCkuT3V0KCJrbm93cyIpLlRvTGlzdCgpCiAtLS0tCiAKLVRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGluIHRoaXMgZmFzaGlvbjogYGJhdGNoU2l6ZWAsIGByZXF1ZXN0SWRgLCBgdXNlckFnZW50YCBhbmQKK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGluIHRoaXMgZmFzaGlvbjogYGJhdGNoU2l6ZWAsIGB1c2VyQWdlbnRgIGFuZAogYGV2YWx1YXRpb25UaW1lb3V0YC4KIAogYW5jaG9yOmdvLWltcG9ydHNbXQpAQCAtMTgwLDMxICsyNDUsMjcgQEAKIFtbZ3JlbWxpbi1nby1jb25maWd1cmF0aW9uXV0KID09PSBDb25maWd1cmF0aW9uCiAKLVRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEdyZW1saW4tZ28gRHJpdmVyLiBUaGV5CitUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBHcmVtbGluLUdvIERyaXZlci4gVGhleQogY2FuIGJlIHBhc3NlZCB0byB0aGUgYE5ld0NsaWVudGAgb3IgYE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb25gIGZ1bmN0aW9ucyBhcyBjb25maWd1cmF0aW9uIGZ1bmN0aW9uIGFyZ3VtZW50czoKIAogW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwLF4yIixvcHRpb25zPSJoZWFkZXIiXQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogfEtleSB8RGVzY3JpcHRpb24gfERlZmF1bHQKIHxUcmF2ZXJzYWxTb3VyY2UgfFRyYXZlcnNhbCBzb3VyY2UuIHwiZyIKLXxUcmFuc3BvcnRlclR5cGUgfFRyYW5zcG9ydGVyIHR5cGUuIHxHb3JpbGxhCiB8TG9nVmVyYm9zaXR5IHxMb2cgdmVyYm9zaXR5LnxncmVtbGluZ28uSU5GTwogfExvZ2dlciB8SW5zdGFuY2Ugb2YgbG9nZ2VyLiB8bG9nCiB8TGFuZ3VhZ2UgfExhbmd1YWdlIHVzZWQgZm9yIGxvZ2dpbmcgbWVzc2FnZXMuIHxsYW5ndWFnZS5FbmdsaXNoCi18QXV0aEluZm8gfEF1dGhlbnRpZmljYXRpb24gaW5mbywgY2FuIGJlIGJ1aWxkIHdpdGggQmFzaWNBdXRoSW5mbygpIG9yIEhlYWRlckF1dGhJbmZvKCkuIHxlbXB0eQogfFRsc0NvbmZpZyB8VExTIGNvbmZpZ3VyYXRpb24uIHxlbXB0eQotfEtlZXBBbGl2ZUludGVydmFsIHxLZWVwIGNvbm5lY3Rpb24gYWxpdmUgaW50ZXJ2YWwuIHw1IHNlY29uZHMKLXxXcml0ZURlYWRsaW5lIHxXcml0ZSBkZWFkbGluZS4gfDMgc2Vjb25kcwotfENvbm5lY3Rpb25UaW1lb3V0IHwgVGltZW91dCBmb3IgZXN0YWJsaXNoaW5nIGNvbm5lY3Rpb24uIHw0NSBzZWNvbmRzCi18TmV3Q29ubmVjdGlvblRocmVzaG9sZCB8IE1pbmltdW0gYW1vdW50IG9mIGNvbmN1cnJlbnQgYWN0aXZlIHRyYXZlcnNhbHMgb24gYSBjb25uZWN0aW9uIHRvIHRyaWdnZXIgY3JlYXRpb24gb2YgYSBuZXcgY29ubmVjdGlvbi4gfDQKLXxNYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zIHwgTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucy4gfG51bWJlciBvZiBydW50aW1lIHByb2Nlc3NvcnMKK3xDb25uZWN0aW9uVGltZW91dCB8IFRpbWVvdXQgZm9yIGVzdGFibGlzaGluZyBjb25uZWN0aW9uLiB8MTUgc2Vjb25kcworfE1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgfCBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IFRDUCBjb25uZWN0aW9ucyB0byB0aGUgc2VydmVyLiB8MTI4Cit8TWF4SWRsZUNvbm5lY3Rpb25zIHwgTWF4aW11bSBudW1iZXIgb2YgaWRsZSAoa2VlcC1hbGl2ZSkgY29ubmVjdGlvbnMgaW4gdGhlIHBvb2wuIHw4Cit8SWRsZUNvbm5lY3Rpb25UaW1lb3V0IHwgSG93IGxvbmcgaWRsZSBjb25uZWN0aW9ucyByZW1haW4gaW4gdGhlIHBvb2wgYmVmb3JlIGJlaW5nIGNsb3NlZC4gfDE4MCBzZWNvbmRzCit8S2VlcEFsaXZlSW50ZXJ2YWwgfCBUQ1Aga2VlcC1hbGl2ZSBwcm9iZSBpbnRlcnZhbC4gfDMwIHNlY29uZHMKIHxFbmFibGVDb21wcmVzc2lvbiB8RmxhZyB0byBlbmFibGUgY29tcHJlc3Npb24uIHxmYWxzZQotfFJlYWRCdWZmZXJTaXplIHxTcGVjaWZ5IEkvTyBidWZmZXIgc2l6ZXMgaW4gYnl0ZXMuIElmIGEgYnVmZmVyIHNpemUgaXMgemVybywgdGhlbiBhIHVzZWZ1bCBkZWZhdWx0IHNpemUgaXMgdXNlZCB8MAotfFdyaXRlQnVmZmVyU2l6ZSB8U3BlY2lmeSBJL08gYnVmZmVyIHNpemVzIGluIGJ5dGVzLiBJZiBhIGJ1ZmZlciBzaXplIGlzIHplcm8sIHRoZW4gYSB1c2VmdWwgZGVmYXVsdCBzaXplIGlzIHVzZWQgfDAKLXxTZXNzaW9uIHxTZXNzaW9uIElELiB8IiIKIHxFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgfEVuYWJsZXMgc2VuZGluZyBhIHVzZXIgYWdlbnQgdG8gdGhlIHNlcnZlciBkdXJpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4KIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gcHJvdmlkZXIgZG9jcwogbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNfZ3JhcGhfZHJpdmVyX3Byb3ZpZGVyX3JlcXVpcmVtZW50c1toZXJlXS58dHJ1ZQorfFJlcXVlc3RJbnRlcmNlcHRvcnMgfEZ1bmN0aW9ucyB0aGF0IG1vZGlmeSBIVFRQIHJlcXVlc3RzIGJlZm9yZSBzZW5kaW5nLiBVc2VkIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgY3VzdG9tIGhlYWRlcnMuIHxlbXB0eQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBbW2dyZW1saW4tZ28tc3RyYXRlZ2llc11dCkBAIC0yMjAsNzUgKzI4MSwyNyBAQAogCiBOT1RFOiBNYW55IG9mIHRoZSBgVHJhdmVyc2FsU3RyYXRlZ3lgIGNsYXNzZXMgaW4gR3JlbWxpbi1HbyBhcmUgcHJveGllcyB0byB0aGUgcmVzcGVjdGl2ZSBzdHJhdGVneSBvbgogQXBhY2hlIFRpbmtlclBvcCdzIEpWTS1iYXNlZCBHcmVtbGluIHRyYXZlcnNhbCBtYWNoaW5lLiBBcyBzdWNoLCB0aGVpciBgYXBwbHkoVHJhdmVyc2FsKWAgbWV0aG9kIGRvZXMgbm90aGluZy4gSG93ZXZlciwKLXRoZSBzdHJhdGVneSBpcyBlbmNvZGVkIGluIHRoZSBHcmVtbGluLUdvIGJ5dGVjb2RlIGFuZCB0cmFuc21pdHRlZCB0byB0aGUgR3JlbWxpbiB0cmF2ZXJzYWwgbWFjaGluZSBmb3IKK3RoZSBzdHJhdGVneSBpcyBlbmNvZGVkIGluIHRoZSBHcmVtbGluLUdvIEdyZW1saW5MYW5nIGFuZCB0cmFuc21pdHRlZCB0byB0aGUgR3JlbWxpbiB0cmF2ZXJzYWwgbWFjaGluZSBmb3IKIHJlLWNvbnN0cnVjdGlvbiBtYWNoaW5lLXNpZGUuCiAKIFtbZ3JlbWxpbi1nby10cmFuc2FjdGlvbnNdXQogPT09IFRyYW5zYWN0aW9ucwogCi1UbyBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzZWN0aW9uLCBpdCB3b3VsZCBiZSBnb29kIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIDw8dHJhbnNhY3Rpb25zLFRyYW5zYWN0aW9ucz4+Ci1zZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiwgd2hpY2ggZGlzY3Vzc2VzIHRyYW5zYWN0aW9ucyBpbiB0aGUgZ2VuZXJhbCBjb250ZXh0IG9mIFRpbmtlclBvcCBpdHNlbGYuIFRoaXMgc2VjdGlvbgotYnVpbGRzIG9uIHRoYXQgY29udGVudCBieSBkZW1vbnN0cmF0aW5nIHRoZSB0cmFuc2FjdGlvbmFsIHN5bnRheCBmb3IgR28uCitJTVBPUlRBTlQ6IFRyYW5zYWN0aW9uIHN1cHBvcnQgb3ZlciBIVFRQIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gR3JlbWxpbi1Hby4gVGhpcyB3aWxsIGJlIGFkZHJlc3NlZCBieSB0aGUgb2ZmaWNpYWwKKzQuMC4wIHJlbGVhc2UuCisKK1tbZ3JlbWxpbi1nby1ndmFsdWVdXQorPT09IEdWYWx1ZSBQYXJhbWV0ZXJpemF0aW9uCisKK0EgYEdWYWx1ZWAgaXMgYW4gZW5jYXBzdWxhdGlvbiBvZiBhIHBhcmFtZXRlciBuYW1lIGFuZCB2YWx1ZS4gQSA8PHRyYXZlcnNhbC1wYXJhbWV0ZXJpemF0aW9uLHN1YnNldCBvZiBncmVtbGluIHN0ZXBzPj4KK2FyZSBhYmxlIHRvIGFjY2VwdCBHVmFsdWVzLiBXaGVuIGNvbnN0cnVjdGluZyBhIGBHcmFwaFRyYXZlcnNhbGAgd2l0aCBzdWNoIHN0ZXBzIGluIEdvLCBhIEdWYWx1ZSBtYXkgYmUgcGFzc2VkIGluCit0aGUgdHJhdmVyc2FsIHRvIHV0aWxpemUgYSBwYXJhbWV0ZXIgaW4gcGxhY2Ugb2YgYSBsaXRlcmFsLgogCiBbc291cmNlLGdvXQogLS0tLQotcmVtb3RlLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKLWcgOj0gZ3JlbWxpbmdvLlRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKLQotLy8gQ3JlYXRlIGEgVHJhbnNhY3Rpb24uCi10eCA6PSBnLlR4KCkKLQotLy8gU3Bhd24gYSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIGJpbmRpbmcgYWxsIHRyYXZlcnNhbHMgZXN0YWJsaXNoZWQgZnJvbSBpdCB0byB0eC4KLWd0eCwgXyA6PSB0eC5CZWdpbigpCi0KLS8vIEV4ZWN1dGUgYSB0cmF2ZXJzYWwgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4KLXByb21pc2UgOj0gZy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJMeW5kb24iKS5JdGVyYXRlKCkKLWVyciA6PSA8LXByb21pc2UKLQotaWYgZXJyICE9IG5pbCB7Ci0gIC8vIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMuCi0gIHR4LnJvbGxiYWNrKCkKLX0gZWxzZSB7Ci0gIC8vIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24uIFRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgYW5kIGNhbm5vdCBiZSByZS11c2VkLgotICAvLyBBIG5ldyB0cmFuc2FjdGlvbiBjYW4gYmUgc3Bhd25lZCB0aHJvdWdoIGcuVHgoKS4KLSAgdHguQ29tbWl0KCkKLX0KK2cuVigpLkhhcygibmFtZSIsIGdyZW1saW5nby5OZXdHVmFsdWUoIm5hbWUiLCAibWFya28iKSkKIC0tLS0KIAotW1tncmVtbGluLWdvLWxhbWJkYV1dCi09PT0gVGhlIExhbWJkYSBTb2x1dGlvbgotCi1TdXBwb3J0aW5nIGxpbms6aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQW5vbnltb3VzX2Z1bmN0aW9uW2Fub255bW91cyBmdW5jdGlvbnNdIGFjcm9zcyBsYW5ndWFnZXMgaXMgZGlmZmljdWx0IGFzCi1tb3N0IGxhbmd1YWdlcyBkbyBub3Qgc3VwcG9ydCBsYW1iZGEgaW50cm9zcGVjdGlvbiBhbmQgdGh1cywgY29kZSBhbmFseXNpcy4gSW4gR3JlbWxpbi1HbywgYSBHcmVtbGluIGxhbWJkYSBzaG91bGQKLWJlIHJlcHJlc2VudGVkIGFzIGEgemVyby1hcmcgY2FsbGFibGUgdGhhdCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsYW1iZGEgZXhwZWN0ZWQgZm9yIHVzZSBpbiB0aGUKLXRyYXZlcnNhbC4gVGhlIGxhbWJkYSBzaG91bGQgYmUgd3JpdHRlbiBhcyBhIGBHcmVtbGluLUdyb292eWAgc3RyaW5nLiBXaGVuIHRoZSBsYW1iZGEgaXMgcmVwcmVzZW50ZWQgaW4gYEJ5dGVjb2RlYCBpdHMKLWxhbmd1YWdlIGlzIGVuY29kZWQgc3VjaCB0aGF0IHRoZSByZW1vdGUgY29ubmVjdGlvbiBob3N0IGNhbiBpbmZlciB3aGljaCB0cmFuc2xhdG9yIGFuZCB1bHRpbWF0ZSBleGVjdXRpb24gZW5naW5lIHRvCi11c2UuCi0KLVtzb3VyY2UsZ29dCi0tLS0tCi1yLCBlcnIgOj0gZy5WKCkuT3V0KCkuTWFwKCZncmVtbGluZ28uTGFtYmRhe1NjcmlwdDogIml0LmdldCgpLnZhbHVlKCduYW1lJykubGVuZ3RoKCkiLCBMYW5ndWFnZTogIiJ9KS5TdW0oKS5Ub0xpc3QoKQotLS0tLQotCi1USVA6IFdoZW4gcnVubmluZyBpbnRvIHNpdHVhdGlvbnMgd2hlcmUgR3Jvb3Z5IGNhbm5vdCBwcm9wZXJseSBkaXNjZXJuIGEgbWV0aG9kIHNpZ25hdHVyZSBiYXNlZCBvbiB0aGUgYExhbWJkYWAKLWluc3RhbmNlIGNyZWF0ZWQsIGl0IHdpbGwgaGVscCB0byBmdWxseSBkZWZpbmUgdGhlIGNsb3N1cmUgaW4gdGhlIGxhbWJkYSBleHByZXNzaW9uIC0gc28gcmF0aGVyIHRoYW4KLWBTY3JpcHQ6ICJpdC5nZXQoKS52YWx1ZSgnbmFtZScpIiwgTGFuZ3VhZ2U6ICJncmVtbGluLWdyb292eSJgLCBwcmVmZXIgYFNjcmlwdDogInggLT4geC5nZXQoKS52YWx1ZSgnbmFtZScpIiwgTGFuZ3VhZ2U6ICJncmVtbGluLWdyb292eSJgLgotCi1GaW5hbGx5LCBHcmVtbGluIGBCeXRlY29kZWAgdGhhdCBpbmNsdWRlcyBsYW1iZGFzIHJlcXVpcmVzIHRoYXQgdGhlIHRyYXZlcnNhbCBiZSBwcm9jZXNzZWQgYnkgdGhlCi1gU2NyaXB0RW5naW5lYC4gVG8gYXZvaWQgY29udGludWVkIHJlY29tcGlsYXRpb24gY29zdHMsIGl0IHN1cHBvcnRzIHRoZSBlbmNvZGluZyBvZiBiaW5kaW5ncywgd2hpY2ggYWxsb3cgYSByZW1vdGUKLWVuZ2luZSB0byB0byBjYWNoZSB0cmF2ZXJzYWxzIHRoYXQgd2lsbCBiZSByZXVzZWQgb3ZlciBhbmQgb3ZlciBhZ2FpbiBzYXZlIHRoYXQgc29tZSBwYXJhbWV0ZXJpemF0aW9uIG1heSBjaGFuZ2UuIFRodXMsCi1pbnN0ZWFkIG9mIHRyYW5zbGF0aW5nLCBjb21waWxpbmcsIGFuZCB0aGVuIGV4ZWN1dGluZyBlYWNoIHN1Ym1pdHRlZCBieXRlY29kZSwgaXQgaXMgcG9zc2libGUgdG8gc2ltcGx5IGV4ZWN1dGUuCi0KLVtzb3VyY2UsZ29dCi0tLS0tCi1yLCBlcnIgOj0gZy5WKCgmZ3JlbWxpbmdvLkJpbmRpbmdze30pLk9mKCJ4IiwgMSkpLk91dCgiY3JlYXRlZCIpLk1hcCgmZ3JlbWxpbmdvLkxhbWJkYXtTY3JpcHQ6ICJpdC5nZXQoKS52YWx1ZSgnbmFtZScpLmxlbmd0aCgpIiwgTGFuZ3VhZ2U6ICIifSkuU3VtKCkuVG9MaXN0KCkKLS8vIDMKLXIsIGVyciA6PSBnLlYoKCZncmVtbGluZ28uQmluZGluZ3N7fSkuT2YoIngiLCA0KSkuT3V0KCJjcmVhdGVkIikuTWFwKCZncmVtbGluZ28uTGFtYmRhe1NjcmlwdDogIml0LmdldCgpLnZhbHVlKCduYW1lJykubGVuZ3RoKCkiLCBMYW5ndWFnZTogIiJ9KS5TdW0oKS5Ub0xpc3QoKQotLy8gOQotLS0tLQotCi1XQVJOSU5HOiBBcyBleHBsYWluZWQgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnRhdGlvbiwgd2hlbiBwb3NzaWJsZSA8PGEtbm90ZS1vbi1sYW1iZGFzLGF2b2lkPj4gbGFtYmRhcy4KLQogW1tncmVtbGluLWdvLXNjcmlwdHNdXQogPT09IFN1Ym1pdHRpbmcgU2NyaXB0cwogCkBAIC0yOTksNyArMzEyLDcgQEAKIFtzb3VyY2UsZ29dCiAtLS0tCiBpbXBvcnQgImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzL2RyaXZlciIgPDE+Ci1jbGllbnQsIGVyciA6PSBncmVtbGluZ28uTmV3Q2xpZW50KCJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKSA8Mj4KK2NsaWVudCwgZXJyIDo9IGdyZW1saW5nby5OZXdDbGllbnQoImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikgPDI+CiAtLS0tCiAKIDwxPiBJbXBvcnQgdGhlIEdyZW1saW4tR28gbW9kdWxlLgpAQCAtMzM4LDE0ICszNTEsMTEgQEAKIHJlc3VsdFNldCwgZXJyIDo9IGNsaWVudC5TdWJtaXRXaXRoT3B0aW9ucygiZy5WKHgpLmNvdW50KCkiLCBvcHRpb25zKQogLS0tLQogCi1UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBpbiB0aGlzIGZhc2hpb246IGBiYXRjaFNpemVgLCBgcmVxdWVzdElkYCwgYHVzZXJBZ2VudGAsIGBldmFsdWF0aW9uVGltZW91dGAgYW5kIGBtYXRlcmlhbGl6ZVByb3BlcnRpZXNgLgorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgaW4gdGhpcyBmYXNoaW9uOiBgYmF0Y2hTaXplYCwgYHVzZXJBZ2VudGAsCitgZXZhbHVhdGlvblRpbWVvdXRgIGFuZCBgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzYC4KIGBSZXF1ZXN0T3B0aW9uc2AgbWF5IGFsc28gY29udGFpbiBhIG1hcCBvZiB2YXJpYWJsZSBgYmluZGluZ3NgIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHN1cHBsaWVkCiB0cmF2ZXJzYWwgc3RyaW5nLgogCi1JTVBPUlRBTlQ6IFRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBzZXR0aW5nIGEgcGVyLXJlcXVlc3QgdGltZW91dCBmb3Igc2NyaXB0cyBpcyBkZW1vbnN0cmF0ZWQgYWJvdmUsIGJ1dCB0aG9zZSBmYW1pbGlhcgotd2l0aCBieXRlY29kZSBtYXkgdHJ5IGBnLndpdGgoImV2YWx1YXRpb25UaW1lb3V0IiwgNTAwKWAgd2l0aGluIGEgc2NyaXB0LiBTY3JpcHRzIHdpdGggbXVsdGlwbGUgdHJhdmVyc2FscyBhbmQgbXVsdGlwbGUKLXRpbWVvdXRzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdW0gb2YgYWxsIHRpbWVvdXRzIGlkZW50aWZpZWQgaW4gdGhlIHNjcmlwdCBmb3IgdGhhdCByZXF1ZXN0LgotCiBbc291cmNlLGdvXQogLS0tLQogcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCJnLndpdGgoJ2V2YWx1YXRpb25UaW1lb3V0JywgNTAwKS5hZGRWKCkuaXRlcmF0ZSgpOyIrCkBAIC00MDUsMTMgKzQxNSwxMyBAQAogCSpHcmFwaFRyYXZlcnNhbFNvdXJjZQogfQogCi0vLyBEZWZpbmUgdGhlIHNvdXJjZSBzdGVwIGZ1bmN0aW9uIGJ5IGFkZGluZyBzdGVwcyB0byB0aGUgYnl0ZWNvZGUuCisvLyBEZWZpbmUgdGhlIHNvdXJjZSBzdGVwIGZ1bmN0aW9uIGJ5IGFkZGluZyBzdGVwcyB0byB0aGUgR3JlbWxpbkxhbmcuCiBmdW5jIChzdHMgKnNvY2lhbFRyYXZlcnNhbFNvdXJjZSkgcGVyc29ucyhwZXJzb25OYW1lcyAuLi5pbnRlcmZhY2V7fSkgKnNvY2lhbFRyYXZlcnNhbCB7CiAJdCA6PSBzdHMuR2V0R3JhcGhUcmF2ZXJzYWwoKQotCXQuQnl0ZWNvZGUuQWRkU3RlcCgiViIpCi0JdC5CeXRlY29kZS5BZGRTdGVwKCJoYXNMYWJlbCIsICJwZXJzb24iKQorCXQuR3JlbWxpbkxhbmcuQWRkU3RlcCgiViIpCisJdC5HcmVtbGluTGFuZy5BZGRTdGVwKCJoYXNMYWJlbCIsICJwZXJzb24iKQogCWlmIHBlcnNvbk5hbWVzICE9IG5pbCB7Ci0JCXQuQnl0ZWNvZGUuQWRkU3RlcCgiaGFzIiwgIm5hbWUiLCBQLldpdGhpbihwZXJzb25OYW1lcy4uLikpCisJCXQuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgIm5hbWUiLCBQLldpdGhpbihwZXJzb25OYW1lcy4uLikpCiAJfQogCXJldHVybiAmc29jaWFsVHJhdmVyc2Fse3R9CiB9CkBAIC00MzUsNyArNDQ1LDcgQEAKIHZhciBzX18gaVNvY2lhbEFub255bW91c1RyYXZlcnNhbCA9ICZzb2NpYWxBbm9ueW1vdXNUcmF2ZXJzYWx7CiAJX18sCiAJZnVuYygpICpzb2NpYWxUcmF2ZXJzYWwgewotCQlyZXR1cm4gJnNvY2lhbFRyYXZlcnNhbHtncmVtbGluZ28uTmV3R3JhcGhUcmF2ZXJzYWwobmlsLCBncmVtbGluZ28uTmV3Qnl0ZWNvZGUobmlsKSwgbmlsKX0KKwkJcmV0dXJuICZzb2NpYWxUcmF2ZXJzYWx7Z3JlbWxpbmdvLk5ld0dyYXBoVHJhdmVyc2FsKG5pbCwgZ3JlbWxpbmdvLk5ld0dyZW1saW5MYW5nKG5pbCksIG5pbCl9CiAJfSwKIH0KIApAQCAtNDU4LDcgKzQ2OCw3IEBACiBbc291cmNlLGdvXQogLS0tLQogLy8gQ3JlYXRpbmcgdGhlIGRyaXZlciByZW1vdGUgY29ubmVjdGlvbiBhcyByZWd1bGFyLgotZHJpdmVyUmVtb3RlQ29ubmVjdGlvbiwgXyA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwKK2RyaXZlclJlbW90ZUNvbm5lY3Rpb24sIF8gOj0gZ3JlbWxpbmdvLk5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24oImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwKIAlmdW5jKHNldHRpbmdzICpncmVtbGluZ28uRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7CiAJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9ICJnbW9kZXJuIgogCX0pCkBAIC03ODAsNyArNzkwLDcgQEAKIAogW2dyZW1saW4tZ3Jvb3Z5XQogLS0tLQotY2x1c3RlciA9IENsdXN0ZXIub3BlbignY29uZi9yZW1vdGUtb2JqZWN0cy55YW1sJykKK2NsdXN0ZXIgPSBDbHVzdGVyLm9wZW4oJ2NvbmYvcmVtb3RlLnlhbWwnKQogY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCkKIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2xpZW50LCAiZyIpKQogZy5WKCkuZWxlbWVudE1hcCgpCkBAIC04MDMsOSArODEzLDggQEAKIExpc3Q8VmVydGV4PiB2ZXJ0aWNlcyA9IGcud2l0aChUb2tlbnMuQVJHU19FVkFMX1RJTUVPVVQsIDUwMEwpLlYoKS5vdXQoImtub3dzIikudG9MaXN0KCkKIC0tLS0KIAotVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgaW4gdGhpcyBmYXNoaW9uOiBgYmF0Y2hTaXplYCwgYHJlcXVlc3RJZGAsIGB1c2VyQWdlbnRgIGFuZAotYGV2YWx1YXRpb25UaW1lb3V0YCAoZm9ybWVybHkgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBidXQgbm93IGRlcHJlY2F0ZWQpLiBVc2Ugb2YgYFRva2Vuc2AKLXRvIHJlZmVyZW5jZSB0aGVzZSBvcHRpb25zIGlzIHByZWZlcnJlZC4KK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGluIHRoaXMgZmFzaGlvbjogYGJhdGNoU2l6ZWAsIGB1c2VyQWdlbnRgLAorYG1hdGVyaWFsaXplUHJvcGVydGllc2AgYW5kIGBldmFsdWF0aW9uVGltZW91dGAuIFVzZSBvZiBgVG9rZW5zYCB0byByZWZlcmVuY2UgdGhlc2Ugb3B0aW9ucyBpcyBwcmVmZXJyZWQuCiAKIGFuY2hvcjpqYXZhLWltcG9ydHNbXQogW1tncmVtbGluLWphdmEtaW1wb3J0c11dCkBAIC04NDAsMjEgKzg0OSwyMSBAQAogW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwLF4yIixvcHRpb25zPSJoZWFkZXIiXQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogfEtleSB8RGVzY3JpcHRpb24gfERlZmF1bHQKLXxjb25uZWN0aW9uUG9vbC5jaGFubmVsaXplciB8VGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzc25hbWUgb2YgdGhlIGNsaWVudCBgQ2hhbm5lbGl6ZXJgIHRoYXQgZGVmaW5lcyBob3cgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiB8YENoYW5uZWxpemVyLldlYlNvY2tldENoYW5uZWxpemVyYAorfGF1dGgudHlwZSB8VHlwZSBvZiBBdXRoIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIENhbiBiZTogYGJhc2ljYCBvciBgc2lndjRgLiB8XyIiXworfGF1dGgudXNlcm5hbWUgfFRoZSB1c2VybmFtZSB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGJhc2ljIGF1dGhlbnRpY2F0aW9uLiB8X25vbmVfCit8YXV0aC5wYXNzd29yZCB8VGhlIHBhc3N3b3JkIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYmFzaWMgYXV0aGVudGljYXRpb24uIHxfbm9uZV8KK3xhdXRoLnJlZ2lvbiB8VGhlIHJlZ2lvbiBzZXR0aW5nIGZvciBzaWd2NCBhdXRoZW50aWNhdGlvbi4gfF9ub25lXworfGF1dGguc2VydmljZU5hbWUgfFRoZSBzZXJ2aWNlIG5hbWUgc2V0dGluZyBmb3Igc2lndjQgYXV0aGVudGljYXRpb24uIHxfbm9uZV8KK3xjb25uZWN0aW9uUG9vbC5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzIHwgRHVyYXRpb24gb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgcHJvdmlkZWQgZm9yIGNvbm5lY3Rpb24gc2V0dXAgdG8gY29tcGxldGUgd2hpY2ggaW5jbHVkZXMgdGhlIFNTTCBoYW5kc2hha2UuIHwxNTAwMAogfGNvbm5lY3Rpb25Qb29sLmVuYWJsZVNzbCB8RGV0ZXJtaW5lcyBpZiBTU0wgc2hvdWxkIGJlIGVuYWJsZWQgb3Igbm90LiBJZiBlbmFibGVkIG9uIHRoZSBzZXJ2ZXIgdGhlbiBpdCBtdXN0IGJlIGVuYWJsZWQgb24gdGhlIGNsaWVudC4gfGZhbHNlCi18Y29ubmVjdGlvblBvb2wua2VlcEFsaXZlSW50ZXJ2YWwgfExlbmd0aCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IG9uIGFuIGlkbGUgY29ubmVjdGlvbiBiZWZvcmUgc2VuZGluZyBhIGtlZXAtYWxpdmUgcmVxdWVzdC4gU2V0IHRvIHplcm8gdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuIHwxODAwMDAKK3xjb25uZWN0aW9uUG9vbC5pZGxlQ29ubmVjdGlvblRpbWVvdXQgfCBEdXJhdGlvbiBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBkcml2ZXIgd2lsbCBhbGxvdyBhIGNoYW5uZWwgdG8gbm90IHJlY2VpdmUgcmVhZCBvciB3cml0ZXMgYmVmb3JlIGl0IGF1dG9tYXRpY2FsbHkgY2xvc2VzLiB8MTgwMDAwCiB8Y29ubmVjdGlvblBvb2wua2V5U3RvcmUgfFRoZSBwcml2YXRlIGtleSBpbiBKS1Mgb3IgUEtDUyMxMiBmb3JtYXQuIHxfbm9uZV8KIHxjb25uZWN0aW9uUG9vbC5rZXlTdG9yZVBhc3N3b3JkIHxUaGUgcGFzc3dvcmQgb2YgdGhlIGBrZXlTdG9yZWAgaWYgaXQgaXMgcGFzc3dvcmQtcHJvdGVjdGVkLiB8X25vbmVfCiB8Y29ubmVjdGlvblBvb2wua2V5U3RvcmVUeXBlIHxgUEtDUzEyYCB8X25vbmVfCi18Y29ubmVjdGlvblBvb2wubWF4Q29udGVudExlbmd0aCB8VGhlIG1heGltdW0gbGVuZ3RoIGluIGJ5dGVzIHRoYXQgYSBtZXNzYWdlIGNhbiBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuIFRoaXMgbnVtYmVyIGNhbiBiZSBubyBncmVhdGVyIHRoYW4gdGhlIHNldHRpbmcgb2YgdGhlIHNhbWUgbmFtZSBpbiB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24uIHw2NTUzNgotfGNvbm5lY3Rpb25Qb29sLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gfFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbi1mbGlnaHQgcmVxdWVzdHMgdGhhdCBjYW4gb2NjdXIgb24gYSBjb25uZWN0aW9uLiB8NAotfGNvbm5lY3Rpb25Qb29sLm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiB8VGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoYXQgYSBjb25uZWN0aW9uIGNhbiBiZSBib3Jyb3dlZCBmcm9tIHRoZSBwb29sIHNpbXVsdGFuZW91c2x5LiB8MTYKLXxjb25uZWN0aW9uUG9vbC5tYXhTaXplIHxUaGUgbWF4aW11bSBzaXplIG9mIGEgY29ubmVjdGlvbiBwb29sIGZvciBhIGhvc3QuIHw4Cit8Y29ubmVjdGlvblBvb2wubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoIHxUaGUgbWF4aW11bSBsZW5ndGggaW4gYnl0ZXMgdGhhdCBhIG1lc3NhZ2UgY2FuIGJlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4gfDIxNDc0ODM2NDcKK3xjb25uZWN0aW9uUG9vbC5tYXhTaXplIHxUaGUgbWF4aW11bSBzaXplIG9mIGEgY29ubmVjdGlvbiBwb29sIGZvciBhIGhvc3QuIHwxMjgKIHxjb25uZWN0aW9uUG9vbC5tYXhXYWl0Rm9yQ29ubmVjdGlvbiB8VGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBhIG5ldyBjb25uZWN0aW9uIGJlZm9yZSB0aW1pbmcgb3V0LiB8MzAwMAogfGNvbm5lY3Rpb25Qb29sLm1heFdhaXRGb3JDbG9zZSB8VGhlIGFtb3VudCBvZiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciBwZW5kaW5nIG1lc3NhZ2VzIHRvIGJlIHJldHVybmVkIGZyb20gdGhlIHNlcnZlciBiZWZvcmUgY2xvc2luZyB0aGUgY29ubmVjdGlvbi4gfDMwMDAKLXxjb25uZWN0aW9uUG9vbC5taW5JblByb2Nlc3NQZXJDb25uZWN0aW9uIHxUaGUgbWluaW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIHRoYXQgY2FuIG9jY3VyIG9uIGEgY29ubmVjdGlvbi4gfDEKLXxjb25uZWN0aW9uUG9vbC5taW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gfFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0aGF0IGEgY29ubmVjdGlvbiBjYW4gYmUgYm9ycm93ZWQgZnJvbSB0aGUgcG9vbCBzaW11bHRhbmVvdXNseS4gfDgKLXxjb25uZWN0aW9uUG9vbC5taW5TaXplIHxUaGUgbWluaW11bSBzaXplIG9mIGEgY29ubmVjdGlvbiBwb29sIGZvciBhIGhvc3QuIHwyCiB8Y29ubmVjdGlvblBvb2wucmVjb25uZWN0SW50ZXJ2YWwgfFRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgdHJ5aW5nIHRvIHJlY29ubmVjdCB0byBhIGRlYWQgaG9zdC4gfDEwMDAKIHxjb25uZWN0aW9uUG9vbC5yZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgfFRoZSBvdmVycmlkZSB2YWx1ZSBmb3IgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBiYXRjaGVzIHRvIGJlIHJldHVybmVkIGZyb20gdGhlIHNlcnZlci4gfDY0CiB8Y29ubmVjdGlvblBvb2wuc3NsQ2lwaGVyU3VpdGVzIHxUaGUgbGlzdCBvZiBKU1NFIGNpcGhlcnMgdG8gc3VwcG9ydCBmb3IgU1NMIGNvbm5lY3Rpb25zLiBJZiBzcGVjaWZpZWQsIG9ubHkgdGhlIGNpcGhlcnMgdGhhdCBhcmUgbGlzdGVkIGFuZCBzdXBwb3J0ZWQgd2lsbCBiZSBlbmFibGVkLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgSlZNIGRlZmF1bHQgaXMgdXNlZC4gIHxfbm9uZV8KQEAgLTg2MywxOCArODcyLDE0IEBACiB8Y29ubmVjdGlvblBvb2wudHJ1c3RTdG9yZSB8RmlsZSBsb2NhdGlvbiBmb3IgYSBTU0wgQ2VydGlmaWNhdGUgQ2hhaW4gdG8gdXNlIHdoZW4gU1NMIGlzIGVuYWJsZWQuIElmIHRoaXMgdmFsdWUgaXMgbm90IHByb3ZpZGVkIGFuZCBTU0wgaXMgZW5hYmxlZCwgdGhlIGRlZmF1bHQgYFRydXN0TWFuYWdlcmAgd2lsbCBiZSB1c2VkLiB8X25vbmVfCiB8Y29ubmVjdGlvblBvb2wudHJ1c3RTdG9yZVBhc3N3b3JkIHxUaGUgcGFzc3dvcmQgb2YgdGhlIGB0cnVzdFN0b3JlYCBpZiBpdCBpcyBwYXNzd29yZC1wcm90ZWN0ZWQgfF9ub25lXwogfGNvbm5lY3Rpb25Qb29sLnZhbGlkYXRpb25SZXF1ZXN0IHxBIHNjcmlwdCB0aGF0IGlzIHVzZWQgdG8gdGVzdCBzZXJ2ZXIgY29ubmVjdGl2aXR5LiBBIGdvb2Qgc2NyaXB0IHRvIHVzZSBpcyBvbmUgdGhhdCBldmFsdWF0ZXMgcXVpY2tseSBhbmQgcmV0dXJucyBubyBkYXRhLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsIGJ1dCBpZiBhIGdyYXBoIGlzIHJlcXVpcmVkIGJ5IGEgcGFydGljdWxhciBwcm92aWRlciwgYSBnb29kIHRyYXZlcnNhbCBtaWdodCBiZSBgZy5pbmplY3QoKWAuIHxfJydfCi18Y29ubmVjdGlvblBvb2wuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcyB8IER1cmF0aW9uIG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHByb3ZpZGVkIGZvciBjb25uZWN0aW9uIHNldHVwIHRvIGNvbXBsZXRlIHdoaWNoIGluY2x1ZGVzIFdlYlNvY2tldCBwcm90b2NvbCBoYW5kc2hha2UgYW5kIFNTTCBoYW5kc2hha2UuIHwxNTAwMAotfGVuYWJsZUNvbXByZXNzaW9uIHxFbmFibGVzIHBlcm1lc3NhZ2UtZGVmbGF0ZSBjb21wcmVzc2lvbi4gTm90ZSB0aGF0IHVzZSBvZiBjb21wcmVzc2lvbiBtYXkgaW5jcmVhc2UgdnVsbmVyYWJpbGl0eSB0byBhdHRhY2tzIHN1Y2ggYXMgQ1JJTUUvQlJFQUNILnx0cnVlCit8YnVsa1Jlc3VsdHMgfFNldHMgd2hldGhlciB0aGUgc2VydmVyIHNob3VsZCBhdHRlbXB0IHRvIGdldCBidWxrIHJlc3VsdHMgb3Igbm90LiB8ZmFsc2UKIHxlbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgfEVuYWJsZXMgc2VuZGluZyBhIHVzZXIgYWdlbnQgdG8gdGhlIHNlcnZlciBkdXJpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiBwcm92aWRlciBkb2NzIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L2Rldi9wcm92aWRlci8jX2dyYXBoX2RyaXZlcl9wcm92aWRlcl9yZXF1aXJlbWVudHNbaGVyZV0ufHRydWUKIHxob3N0cyB8VGhlIGxpc3Qgb2YgaG9zdHMgdGhhdCB0aGUgZHJpdmVyIHdpbGwgY29ubmVjdCB0by4gfGxvY2FsaG9zdAotfGphYXNFbnRyeSB8U2V0cyB0aGUgYEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LkpBQVNfRU5UUllgIHByb3BlcnRpZXMgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdyZW1saW4gU2VydmVyLiB8X25vbmVfCiB8bmlvUG9vbFNpemUgfFNpemUgb2YgdGhlIHBvb2wgZm9yIGhhbmRsaW5nIHJlcXVlc3QvcmVzcG9uc2Ugb3BlcmF0aW9ucy4gfGF2YWlsYWJsZSBwcm9jZXNzb3JzCiB8cGFzc3dvcmQgfFRoZSBwYXNzd29yZCB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLiB8X25vbmVfCiB8cGF0aCB8VGhlIFVSTCBwYXRoIHRvIHRoZSBHcmVtbGluIFNlcnZlci4gfF8vZ3JlbWxpbl8KIHxwb3J0IHxUaGUgcG9ydCBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIgdG8gY29ubmVjdCB0by4gVGhlIHNhbWUgcG9ydCB3aWxsIGJlIGFwcGxpZWQgZm9yIGFsbCBob3N0cy4gfDgxOTIKLXxwcm90b2NvbCB8U2V0cyB0aGUgYEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LlBST1RPQ09MYCBwcm9wZXJ0aWVzIGZvciBhdXRoZW50aWNhdGlvbiB0byBHcmVtbGluIFNlcnZlci4gfF9ub25lXwotfHJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyB8VXNlcyBhIGBDbGllbnRgIHRoYXQgd2lsbCBhdHRlbXB0IHRvIHJldXNlIGBDb25uZWN0aW9uc2Agd2hlbiBtYW5hZ2luZyByZW1vdGUgdHJhbnNhY3Rpb25zIHdpdGggYSBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAuIHxmYWxzZQotfHNlcmlhbGl6ZXIuY2xhc3NOYW1lIHxUaGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgb2YgdGhlIGBNZXNzYWdlU2VyaWFsaXplcmAgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc2VydmVyLiBOb3RlIHRoYXQgdGhlIHNlcmlhbGl6ZXIgY29uZmlndXJlZCBvbiB0aGUgY2xpZW50IHNob3VsZCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uLiB8X25vbmVfCit8c2VyaWFsaXplci5jbGFzc05hbWUgfFRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZSBvZiB0aGUgYE1lc3NhZ2VTZXJpYWxpemVyYCB0aGF0IHdpbGwgYmUgdXNlZCB0byBkZXNlcmlhbGl6ZSByZXNwb25zZXMgZnJvbSB0aGUgc2VydmVyLiBOb3RlIHRoYXQgdGhlIHNlcmlhbGl6ZXIgY29uZmlndXJlZCBvbiB0aGUgY2xpZW50IHNob3VsZCBiZSBzdXBwb3J0ZWQgYnkgdGhlIHNlcnZlciBjb25maWd1cmF0aW9uLiB8X25vbmVfCiB8c2VyaWFsaXplci5jb25maWcgfEEgYE1hcGAgb2YgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIHNlcmlhbGl6ZXIuIHxfbm9uZV8KIHx1c2VybmFtZSB8VGhlIHVzZXJuYW1lIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIHxfbm9uZV8KIHx3b3JrZXJQb29sU2l6ZSB8U2l6ZSBvZiB0aGUgcG9vbCBmb3IgaGFuZGxpbmcgYmFja2dyb3VuZCB3b3JrLiB8YXZhaWxhYmxlIHByb2Nlc3NvcnMgKiAyCkBAIC04ODUsMTMxICs4OTAsOTMgQEAKIFtbZ3JlbWxpbi1qYXZhLXRyYW5zYWN0aW9uc11dCiA9PT0gVHJhbnNhY3Rpb25zCiAKLVRyYW5zYWN0aW9ucyB3aXRoIEphdmEgYXJlIGJlc3QgZGVzY3JpYmVkIGluIDw8dHJhbnNhY3Rpb25zLFRoZSBUcmF2ZXJzYWwgLSBUcmFuc2FjdGlvbnM+PiBzZWN0aW9uIG9mIHRoaXMKLWRvY3VtZW50YXRpb24gYXMgSmF2YSBjb3ZlcnMgYm90aCBlbWJlZGRlZCBhbmQgcmVtb3RlIHVzZSBjYXNlcy4KK0dyZW1saW4tSmF2YSBzdXBwb3J0cyByZW1vdGUgdHJhbnNhY3Rpb25zIG92ZXIgSFRUUC4gVGhlcmUgYXJlIHR3byB3YXlzIHRvIGNyZWF0ZSBhIHRyYW5zYWN0aW9uOiBmcm9tIGEKK2BHcmFwaFRyYXZlcnNhbFNvdXJjZWAgb3IgZGlyZWN0bHkgZnJvbSBhIGBDbHVzdGVyYCBpbnN0YW5jZS4KIAotW1tncmVtbGluLWphdmEtY29ubmVjdGlvbi1yZXVzZV1dCi09PT0gQ29ubmVjdGlvbiBSZXVzZSBmb3IgVHJhbnNhY3Rpb25zCis9PT09IFZpYSBHcmFwaFRyYXZlcnNhbFNvdXJjZQogCi1CeSBkZWZhdWx0LCBlYWNoIGNhbGwgdG8gYGcudHgoKWAgb3BlbnMgYSBuZXcgZGVkaWNhdGVkIFdlYlNvY2tldCBjb25uZWN0aW9uIGZvciB0aGUgc2Vzc2lvbiB0aGF0IGJhY2tzIHRoZQotdHJhbnNhY3Rpb24uIEZvciB3b3JrbG9hZHMgdGhhdCBpc3N1ZSBtYW55IHNob3J0LWxpdmVkIHRyYW5zYWN0aW9ucywgdGhlIG92ZXJoZWFkIG9mIHJlcGVhdGVkbHkgZXN0YWJsaXNoaW5nIGFuZAotdGVhcmluZyBkb3duIFdlYlNvY2tldCBjb25uZWN0aW9ucyBjYW4gYmVjb21lIHNpZ25pZmljYW50LCBwYXJ0aWN1bGFybHkgd2hlbiB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgYXJlIHNlcGFyYXRlZCBieQotbmV0d29yayBsYXRlbmN5LgotCi1UaGUgYHJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9uc2Agb3B0aW9uIG9uIGBDbHVzdGVyLkJ1aWxkZXJgIGNoYW5nZXMgdGhpcyBiZWhhdmlvciBzbyB0aGF0IHRyYW5zYWN0aW9uIHNlc3Npb25zCi1ib3Jyb3cgY29ubmVjdGlvbnMgZnJvbSB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBwb29sIGluc3RlYWQgb2YgY3JlYXRpbmcgZGVkaWNhdGVkIG9uZXMuIFdoZW4gYSB0cmFuc2FjdGlvbiBjb21taXRzIG9yCi1yb2xscyBiYWNrLCB0aGUgYm9ycm93ZWQgY29ubmVjdGlvbiBpcyByZXR1cm5lZCB0byB0aGUgcG9vbCBhbmQgYmVjb21lcyBhdmFpbGFibGUgZm9yIHRoZSBuZXh0IHRyYW5zYWN0aW9uLgotCi09PT09IEVuYWJsaW5nIENvbm5lY3Rpb24gUmV1c2UKLQotVGhpcyBmZWF0dXJlIHJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gb24gYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyIChpZiB1c2luZyBHcmVtbGluIFNlcnZlcikuCi0KLU9uIHRoZSBjbGllbnQsIGVuYWJsZSBgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zYCB3aGVuIGJ1aWxkaW5nIHRoZSBgQ2x1c3RlcmA6CitUaGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggdXNlcyB0aGUgc3RhbmRhcmQgYGcudHgoKWAgcGF0dGVybjoKIAogW3NvdXJjZSxqYXZhXQogLS0tLQotQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikKLSAgICAgICAgLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyh0cnVlKQotICAgICAgICAuY3JlYXRlKCk7Ci1HcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKK0dyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoImxvY2FsaG9zdCIsIDgxODIsICJnIikpOworCitUcmFuc2FjdGlvbiB0eCA9IGcudHgoKTsKK0dyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IHR4LmJlZ2luKCk7CisKK3RyeSB7CisgICAgZ3R4LmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvcmdlIikuaXRlcmF0ZSgpOworICAgIGd0eC5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuaXRlcmF0ZSgpOworICAgIHR4LmNvbW1pdCgpOworfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgdHgucm9sbGJhY2soKTsKK30KIC0tLS0KIAotVGhlIHNhbWUgc2V0dGluZyBjYW4gYmUgc3BlY2lmaWVkIGluIGEgWUFNTCBjb25maWd1cmF0aW9uIGZpbGUgdXNlZCB3aXRoIGBDbHVzdGVyLm9wZW4oKWA6CitUcmF2ZXJzYWxzIHNwYXduZWQgZnJvbSBgZ3R4YCBhcmUgYm91bmQgdG8gdGhlIHRyYW5zYWN0aW9uLiBUaGUgZHJpdmVyIGhhbmRsZXMgaG9zdCBwaW5uaW5nIGFuZCB0cmFuc2FjdGlvbiBJRAorcHJvcGFnYXRpb24gYXV0b21hdGljYWxseS4KIAotW3NvdXJjZSx5YW1sXQotLS0tLQotcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zOiB0cnVlCi0tLS0tCis9PT09IFZpYSBDbHVzdGVyCiAKLU9uIHNlcnZlcnMgYmFzZWQgb24gdGhlIEdyZW1saW4gU2VydmVyLCBlbmFibGUgYGNsb3NlU2Vzc2lvblBvc3RHcmFwaE9wYCBzbyB0aGF0IHNlc3Npb25zIGFyZSBjbG9zZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKLWEgY29tbWl0IG9yIHJvbGxiYWNrIGNvbXBsZXRlczoKLQotW3NvdXJjZSx5YW1sXQotLS0tLQotIyBncmVtbGluLXNlcnZlci55YW1sCi1jbG9zZVNlc3Npb25Qb3N0R3JhcGhPcDogdHJ1ZQotLS0tLQotCi1JTVBPUlRBTlQ6IEJvdGggc2V0dGluZ3MgbXVzdCBiZSBjb25maWd1cmVkIHRvZ2V0aGVyLiBJZiBgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zYCBpcyBlbmFibGVkIG9uIHRoZSBjbGllbnQgYnV0Ci1gY2xvc2VTZXNzaW9uUG9zdEdyYXBoT3BgIGlzIG5vdCBlbmFibGVkIG9uIHRoZSBzZXJ2ZXIsIHNlc3Npb25zIHdpbGwgbm90IGJlIGNsZWFuZWQgdXAgYWZ0ZXIgY29tbWl0IG9yIHJvbGxiYWNrLgotVGhlc2UgbGVha2VkIHNlc3Npb25zIHdpbGwgYWNjdW11bGF0ZSBvbiB0aGUgc2VydmVyIHVudGlsIHRoZSBjb25maWd1cmVkIHNlc3Npb24gdGltZW91dCBpcyByZWFjaGVkLCBjb25zdW1pbmcgc2VydmVyCi1yZXNvdXJjZXMgdW5uZWNlc3NhcmlseS4KLQotTk9URTogU29tZSBSZW1vdGUgR3JlbWxpbiBQcm92aWRlcnMgbWF5IGhhbmRsZSBzZXNzaW9uIGNsZWFudXAgYXV0b21hdGljYWxseSBhbmQgbWF5IG5vdCByZXF1aXJlIGV4cGxpY2l0Ci1gY2xvc2VTZXNzaW9uUG9zdEdyYXBoT3BgIGNvbmZpZ3VyYXRpb24uIENvbnN1bHQgdGhlIHByb3ZpZGVyJ3MgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGJlaGF2aW9yIGlzCi1lbmFibGVkIGJ5IGRlZmF1bHQsIHJlcXVpcmVzIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24sIG9yIGlzIHVuc3VwcG9ydGVkLgotCi09PT09IFVzYWdlCi0KLVRoZSB0cmFuc2FjdGlvbiBBUEkgaXRzZWxmIGRvZXMgbm90IGNoYW5nZSB3aGVuIGNvbm5lY3Rpb24gcmV1c2UgaXMgZW5hYmxlZC4gVGhlIHN0YW5kYXJkIHBhdHRlcm4gb2YgYGJlZ2luYCwgbXV0YXRlLAotYW5kIGBjb21taXRgIG9yIGByb2xsYmFja2AgYXBwbGllczoKK0ZvciBzY3JpcHQtYmFzZWQgdXNhZ2Ugb3Igd2hlbiB3b3JraW5nIHdpdGggdGhlIGBDbGllbnRgIEFQSSBkaXJlY3RseSwgdHJhbnNhY3Rpb25zIGNhbiBiZSBjcmVhdGVkIGZyb20gdGhlIGBDbHVzdGVyYDoKIAogW3NvdXJjZSxqYXZhXQogLS0tLQotQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikKLSAgICAgICAgLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyh0cnVlKQotICAgICAgICAuY3JlYXRlKCk7Ci1HcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKK0NsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLmNyZWF0ZSgpOworUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KCJnIik7Cit0eC5iZWdpbigpOwogCi1HcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSBnLnR4KCkuYmVnaW4oKTsKLWd0eC5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLml0ZXJhdGUoKTsKLWd0eC5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLml0ZXJhdGUoKTsKLWd0eC50eCgpLmNvbW1pdCgpOwordHJ5IHsKKyAgICB0eC5zdWJtaXQoImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdhbGljZScpIik7CisgICAgdHguc3VibWl0KCJnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnYm9iJykiKTsKKyAgICB0eC5jb21taXQoKTsKK30gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgIHR4LnJvbGxiYWNrKCk7Cit9CisKK2NsdXN0ZXIuY2xvc2UoKTsKIC0tLS0KIAotQWZ0ZXIgYGNvbW1pdCgpYCBvciBgcm9sbGJhY2soKWAsIHRoZSBjb25uZWN0aW9uIGlzIHJldHVybmVkIHRvIHRoZSBwb29sLiBBIHN1YnNlcXVlbnQgY2FsbCB0byBgZy50eCgpLmJlZ2luKClgIHdpbGwKLWJvcnJvdyBhIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbCBhZ2FpbiwgcG90ZW50aWFsbHkgcmV1c2luZyB0aGUgc2FtZSB1bmRlcmx5aW5nIFdlYlNvY2tldCBjb25uZWN0aW9uOgorVGhlIGBSZW1vdGVUcmFuc2FjdGlvbmAgcmV0dXJuZWQgYnkgYGNsdXN0ZXIudHJhbnNhY3QoKWAgcHJvdmlkZXMgYHN1Ym1pdCgpYCBtZXRob2RzIHRoYXQgYWNjZXB0IEdyZW1saW4gc3RyaW5ncworYW5kIG9wdGlvbmFsIGBSZXF1ZXN0T3B0aW9uc2Agb3IgcGFyYW1ldGVyIG1hcHMuIEFsbCByZXF1ZXN0cyBhcmUgcGlubmVkIHRvIGEgc2luZ2xlIGhvc3QgYW5kIGluY2x1ZGUgdGhlIHRyYW5zYWN0aW9uCitJRCBhdXRvbWF0aWNhbGx5LgogCi1BIGBHcmFwaFRyYXZlcnNhbFNvdXJjZWAgb2J0YWluZWQgZnJvbSBgYmVnaW4oKWAgY2Fubm90IGJlIHJldXNlZCBhZnRlciBpdHMgdHJhbnNhY3Rpb24gaGFzIGJlZW4gY29tbWl0dGVkIG9yIHJvbGxlZAotYmFjay4gQXR0ZW1wdGluZyB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBhbiBleGNlcHRpb24uIEEgZnJlc2ggY2FsbCB0byBgZy50eCgpLmJlZ2luKClgIGlzIHJlcXVpcmVkIGZvciBlYWNoIG5ldwotdHJhbnNhY3Rpb24uCitOT1RFOiBgUmVtb3RlVHJhbnNhY3Rpb25gIGlzIHN5bmNocm9ub3VzIGFuZCBub3QgdGhyZWFkLXNhZmUuIEFsbCByZXF1ZXN0cyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBhcmUgZXhlY3V0ZWQKK3NlcXVlbnRpYWxseS4KIAotPT09PSBDb25jdXJyZW50IFRyYW5zYWN0aW9ucworPT09PSBDbG9zZSBCZWhhdmlvcgogCi1NdWx0aXBsZSB0cmFuc2FjdGlvbnMgY2FuIGJlIG9wZW4gc2ltdWx0YW5lb3VzbHkuIEVhY2ggdHJhbnNhY3Rpb24gZ2V0cyBpdHMgb3duIHNlcnZlci1zaWRlIHNlc3Npb24gcmVnYXJkbGVzcyBvZgotd2hldGhlciB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9ucyBhcmUgc2hhcmVkLiBCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gaXMgYm9ycm93ZWQgcmF0aGVyIHRoYW4gY3JlYXRlZCwgb3RoZXIKLXNldHRpbmdzIG9uIHRoZSBgQ2x1c3RlcmAgc3VjaCBhcyBgbWluQ29ubmVjdGlvblBvb2xTaXplYCBhbmQgYG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbmAgd2lsbCBoYXZlIGFuIGVmZmVjdAotb24gaG93IHRoZSBjb25uZWN0aW9uIGdldHMgYm9ycm93ZWQuIFRoZXNlIHNldHRpbmdzIG1heSBuZWVkIHRvIGJlIHR3ZWFrZWQgaWYgdGhlcmUgYXJlIG1hbnkgY29uY3VycmVudCB0cmFuc2FjdGlvbnMuCitUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgY2xvc2UoKWAgb24gYSB0cmFuc2FjdGlvbiBpcyB0byBjb21taXQuIFRoaXMgY2FuIGJlIGNoYW5nZWQ6CiAKLT09PT0gUmVzdHJpY3Rpb25zCi0KLUNvbm5lY3Rpb24gcmV1c2UgZm9yIHRyYW5zYWN0aW9ucyBoYXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0KLSogSXQgaXMgZGVzaWduZWQgZm9yIHNob3J0LWxpdmVkIHRyYW5zYWN0aW9uIHNlc3Npb25zIHRoYXQgZm9sbG93IHRoZSBiZWdpbi9tdXRhdGUvY29tbWl0LW9yLXJvbGxiYWNrIHBhdHRlcm4uIEl0Ci0gIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgY2xhc3NpYyBsb25nLXJ1bm5pbmcgc2Vzc2lvbnMgc3VjaCBhcyB0aG9zZSB1c2VkIHdpdGggYSByZW1vdGUgY29uc29sZS4gRm9yIGxvbmctcnVubmluZwotICBzZXNzaW9ucywgdXNlIHRoZSBzdGFuZGFyZCBgY2x1c3Rlci5jb25uZWN0KHNlc3Npb25JZClgIGFwcHJvYWNoIGRlc2NyaWJlZCBpbiB0aGUKLSAgPDxzZXNzaW9ucyxDb25zaWRlcmluZyBTZXNzaW9ucz4+IFNlY3Rpb24uCi0qIEl0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYEh0dHBDaGFubmVsaXplcmAuIEF0dGVtcHRpbmcgdG8gY2FsbCBgdHgoKWAgd2hlbiB0aGUgZHJpdmVyIGlzIGNvbmZpZ3VyZWQgd2l0aAotICBgSHR0cENoYW5uZWxpemVyYCB3aWxsIHRocm93IGFuIGBJbGxlZ2FsU3RhdGVFeGNlcHRpb25gLiBUaGlzIHJlc3RyaWN0aW9uIGFwcGxpZXMgcmVnYXJkbGVzcyBvZiB0aGUKLSAgYHJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9uc2Agc2V0dGluZy4KLQotPT09PSBXaGVuIHRvIFVzZQotCi1Db25uZWN0aW9uIHJldXNlIHByb3ZpZGVzIHRoZSBncmVhdGVzdCBiZW5lZml0IHdoZW46Ci0KLSogTmV0d29yayBsYXRlbmN5IGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXIgaXMgc2lnbmlmaWNhbnQgKGUuZy4gY3Jvc3MtcmVnaW9uIGRlcGxveW1lbnRzKS4KLSogVHJhbnNhY3Rpb25zIGFyZSBsaWdodHdlaWdodCAoZmV3IG9wZXJhdGlvbnMgcGVyIHRyYW5zYWN0aW9uKS4KLSogTWFueSBzaG9ydC1saXZlZCB0cmFuc2FjdGlvbnMgYXJlIGlzc3VlZCBpbiBzZXF1ZW5jZSBvciBjb25jdXJyZW50bHkuCi0KLUZvciBsb2NhbCBkZXBsb3ltZW50cyBvciB0cmFuc2FjdGlvbnMgdGhhdCBwZXJmb3JtIHN1YnN0YW50aWFsIGdyYXBoIG11dGF0aW9ucywgdGhlIGNvbm5lY3Rpb24gc2V0dXAgb3ZlcmhlYWQgaXMgYQotc21hbGxlciBwcm9wb3J0aW9uIG9mIHRoZSB0b3RhbCB0cmFuc2FjdGlvbiB0aW1lIGFuZCB0aGUgYmVuZWZpdCBpcyBjb3JyZXNwb25kaW5nbHkgc21hbGxlci4KK1tzb3VyY2UsamF2YV0KKy0tLS0KK1JlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdCgiZyIpOwordHgub25DbG9zZShUcmFuc2FjdGlvbi5DTE9TRV9CRUhBVklPUi5ST0xMQkFDSyk7Cit0eC5iZWdpbigpOworLy8gLi4uIGRvIHdvcmsgLi4uCit0eC5jbG9zZSgpOyAvLyByb2xscyBiYWNrIGluc3RlYWQgb2YgY29tbWl0dGluZworLS0tLQogCiBbW2dyZW1saW4tamF2YS1zZXJpYWxpemF0aW9uXV0KID09PSBTZXJpYWxpemF0aW9uCiAKIFJlbW90ZSBzeXN0ZW1zIGxpa2UgR3JlbWxpbiBTZXJ2ZXIgYW5kIFJlbW90ZSBHcmVtbGluIFByb3ZpZGVycyByZXNwb25kIHRvIHJlcXVlc3RzIG1hZGUgaW4gYSBwYXJ0aWN1bGFyIHNlcmlhbGl6YXRpb24KIGZvcm1hdCBhbmQgcmVzcG9uZCBieSBzZXJpYWxpemluZyByZXN1bHRzIHRvIHNvbWUgZm9ybWF0IHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBjbGllbnQuIEZvciBKVk0tYmFzZWQgbGFuZ3VhZ2VzLAotdGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBzZXJpYWxpemF0aW9uOiBHcmFwaFNPTiBhbmQgR3JhcGhCaW5hcnkuIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBjbGllbnQgYW5kIHNlcnZlcgotaGF2ZSB0aGUgc2FtZSBzZXJpYWxpemVycyBjb25maWd1cmVkIGluIHRoZSBzYW1lIHdheSBvciBlbHNlIG9uZSBvciB0aGUgb3RoZXIgd2lsbCBleHBlcmllbmNlIHNlcmlhbGl6YXRpb24gZXhjZXB0aW9ucwotYW5kIGZhaWwgdG8gYWx3YXlzIGNvbW11bmljYXRlLiBEaXNjcmVwYW5jeSBpbiBzZXJpYWxpemVyIHJlZ2lzdHJhdGlvbiBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIGNhbiBoYXBwZW4gZmFpcmx5Ci1lYXNpbHkgYXMgZGlmZmVyZW50IGdyYXBoIHN5c3RlbXMgbWF5IGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBzZXJpYWxpemVycyBvbiB0aGUgc2VydmVyLXNpZGUsIHRodXMgbGVhdmluZyB0aGUgY2xpZW50Ci10byBiZSBjb25maWd1cmVkIG1hbnVhbGx5LiBBcyBhbiBleGFtcGxlOgordGhlcmUgaXMgYSBzaW5nbGUgb3B0aW9uIGZvciBzZXJpYWxpemF0aW9uOiBHcmFwaEJpbmFyeS4KKworSU1QT1JUQU5UOiA0LjAuMC1iZXRhLjIgUmVsZWFzZSAtIFRoZXJlIGlzIHRlbXBvcmFyeSBzdXBwb3J0IGZvciBHcmFwaFNPTiBpbiB0aGUgSmF2YSBkcml2ZXIgd2hpY2ggd2lsbCBoZWxwIHdpdGgKK3Rlc3RpbmcsIGJ1dCBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBkcml2ZXJzIHdpbGwgb25seSBzdXBwb3J0IEdyYXBoQmluYXJ5IHdoZW4gNC4wIGlzIGZ1bGx5IHJlbGVhc2VkLgorCitJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgaGF2ZSB0aGUgc2FtZSBzZXJpYWxpemVycyBjb25maWd1cmVkIGluIHRoZSBzYW1lIHdheSBvciBlbHNlIG9uZSBvciB0aGUKK290aGVyIHdpbGwgZXhwZXJpZW5jZSBzZXJpYWxpemF0aW9uIGV4Y2VwdGlvbnMgYW5kIGZhaWwgdG8gYWx3YXlzIGNvbW11bmljYXRlLiBEaXNjcmVwYW5jeSBpbiBzZXJpYWxpemVyIHJlZ2lzdHJhdGlvbgorYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciBjYW4gaGFwcGVuIGZhaXJseSBlYXNpbHkgYXMgZGlmZmVyZW50IGdyYXBoIHN5c3RlbXMgbWF5IGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBzZXJpYWxpemVycyBvbgordGhlIHNlcnZlci1zaWRlLCB0aHVzIGxlYXZpbmcgdGhlIGNsaWVudCB0byBiZSBjb25maWd1cmVkIG1hbnVhbGx5LiBBcyBhbiBleGFtcGxlOgogCiBbc291cmNlLGphdmFdCiAtLS0tCiBJb1JlZ2lzdHJ5IHJlZ2lzdHJ5ID0gLi4uOyAvLyBhbiBJb1JlZ2lzdHJ5IGluc3RhbmNlIGV4cG9zZWQgYnkgYSBzcGVjaWZpYyBncmFwaCBwcm92aWRlcgogVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSB0eXBlU2VyaWFsaXplclJlZ2lzdHJ5ID0gVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5idWlsZCgpLmFkZFJlZ2lzdHJ5KHJlZ2lzdHJ5KS5jcmVhdGUoKTsKLU1lc3NhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKHR5cGVTZXJpYWxpemVyUmVnaXN0cnkpOworTWVzc2FnZVNlcmlhbGl6ZXIgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQodHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSk7CiBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIoc2VyaWFsaXplcikuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSgpOwpAQCAtMTAyMCwyNyArOTg3LDkgQEAKIFRoZSBgSW9SZWdpc3RyeWAgdGVsbHMgdGhlIHNlcmlhbGl6ZXIgd2hhdCBjbGFzc2VzIGZyb20gdGhlIGdyYXBoIHByb3ZpZGVyIHRvIGF1dG8tcmVnaXN0ZXIgZHVyaW5nIHNlcmlhbGl6YXRpb24uCiBHcmVtbGluIFNlcnZlciByb3VnaGx5IHVzZXMgdGhpcyBzYW1lIGFwcHJvYWNoIHdoZW4gaXQgY29uZmlndXJlcyBpdHMgc2VyaWFsaXplcnMsIHNvIHVzaW5nIHRoaXMgc2FtZSBtb2RlbCB3aWxsCiBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aGVuIG1ha2luZyByZXF1ZXN0cy4gT2J2aW91c2x5LCBpdCBpcyBwb3NzaWJsZSB0byBzd2l0Y2ggdG8gR3JhcGhTT04gb3IgR3JhcGhCaW5hcnkgYnkgdXNpbmcKLXRoZSBhcHByb3ByaWF0ZSBgTWVzc2FnZVNlcmlhbGl6ZXJgIChlLmcuIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjNgIG9yIGBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjFgIHJlc3BlY3RpdmVseSkKK3RoZSBhcHByb3ByaWF0ZSBgTWVzc2FnZVNlcmlhbGl6ZXJgIChlLmcuIGBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRgIG9yIGBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjRgIHJlc3BlY3RpdmVseSkKIGluIHRoZSBzYW1lIHdheSBhbmQgYnVpbGRpbmcgdGhhdCBpbnRvIHRoZSBgQ2x1c3RlcmAgb2JqZWN0LgogCi1BIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgY29uZmlndXJhdGlvbiBhbG9uZyB0aGVzZSBsaW5lcyBpcyBlYXNpbHkgb3Zlcmxvb2tlZCB3aGVuIGNob29zaW5nIHRvIHVzZSBHcmFwaFNPTiByYXRoZXIgdGhhbgotR3JhcGhCaW5hcnkuIEdyYXBoQmluYXJ5IG9mZmVycyBhIGJpdCBvZiBoZWxwIGluIGR5bmFtaWNhbGx5IGRldGVjdGluZyBhdmFpbGFibGUgY2xhc3NwYXRoIGl0ZW1zIGFuZCB3aWxsIGR5bmFtaWNhbGx5Ci1pbmNsdWRlIGBUaW5rZXJHcmFwaGAgYXMgYSBzZXJpYWxpemF0aW9uIHRhcmdldCB3aGljaCBhbGxvd3MgdGhlIDw8c3ViZ3JhcGgtc3RlcD4+IHRvIHdvcmsgcHJvcGVybHkgaW4gcmVtb3RlIGNvbnRleHRzLgotR3JhcGhTT04gZG9lcyBub3QuIFdoZW4gdXNpbmcgR3JhcGhTT04sIHlvdSBtdXN0IG1hbnVhbGx5IGluY2x1ZGUgdGhlIGBUaW5rZXJJb1JlZ2lzdHJ5VjNgIGluIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUKLWRyaXZlci4KLQotW3NvdXJjZSxqYXZhXQotLS0tLQotR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS5hZGRSZWdpc3RyeShUaW5rZXJJb1JlZ2lzdHJ5VjMuaW5zdGFuY2UoKSk7Ci1HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgc2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoYnVpbGRlcik7Ci1DbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoc2VyaWFsaXplcikuY3JlYXRlKCk7Ci1DbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci1HcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsaWVudCwgImciKSk7Ci0tLS0tCi0KLUlNUE9SVEFOVDogUHJlZmVyIEdyYXBoQmluYXJ5IG92ZXIgR3JhcGhTT04gd2hlbiB1c2luZyB0aGUgZHJpdmVyLiBJZiB5b3UgZG8gY2hvb3NlIEdyYXBoU09OLCBwcmVmZXIgR3JhcGhTT04gMyBhbmQKLWtub3cgdGhhdCBHcmFwaFNPTiAyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggPDxzdWJncmFwaC1zdGVwPi4KLQogW1tncmVtbGluLWphdmEtZ3ZhbHVlXV0KID09PSBHVmFsdWUgUGFyYW1ldGVyaXphdGlvbgogCkBAIC0xMjI1LDYgKzExNzQsMjkgQEAKIFRoZSBhYm92ZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdGhlIGBhbGlhc2AgbWV0aG9kIGNhbiBiZSB1c2VkIHN1Y2ggdGhhdCB0aGUgc2NyaXB0IG5lZWQgb25seSBjb250YWluIGEgcmVmZXJlbmNlCiB0byAiZyIgYW5kICJnMSIgYW5kICJnMiIgYXJlIGF1dG9tYXRpY2FsbHkgcmVib3VuZCBpbnRvICJnIiBvbiB0aGUgc2VydmVyLXNpZGUuCiAKKz09PT0gUmVxdWVzdEludGVyY2VwdG9yCisKK0dyZW1saW4tSmF2YSBhbGxvd3MgZm9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgdW5kZXJseWluZyBIVFRQIHJlcXVlc3QgdGhyb3VnaCB0aGUgdXNlIG9mIGBSZXF1ZXN0SW50ZXJjZXB0b3JzYC4gVGhpcyBpcworaW50ZW5kZWQgdG8gYmUgYW4gYWR2YW5jZWQgZmVhdHVyZSB3aGljaCBtZWFucyB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGltcGxlbWVudGF0aW9uIHdvcmtzIGluIG9yZGVyCit0byBzYWZlbHkgdXRpbGl6ZSBpdC4gR3JlbWxpbi1KYXZhIGlzIHdyaXR0ZW4gaW4gYSB3YXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCBhIFRpbmtlclBvcC1lbmFibGVkCitzZXJ2ZXIgd2l0aG91dCBoYXZpbmcgdG8gdXNlIGludGVyY2VwdG9ycy4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgY2FzZXMgd2hlcmUgdGhlIHNlcnZlciBoYXMgc3BlY2lhbCBjYXBhYmlsaXRpZXMuCisKK0EgYFJlcXVlc3RJbnRlcmNlcHRvcmAgaXMgc2ltcGx5IGEgYFVuYXJ5T3BlcmF0b3JgLiBBIGxpc3Qgb2YgdGhlc2UgYXJlIG1haW50YWluZWQgYW5kIHdpbGwgYmUgcnVuIHNlcXVlbnRpYWxseSBmb3IKK2VhY2ggcmVxdWVzdC4gV2hlbiBidWlsZGluZyBhIGBDbHVzdGVyYCBpbnN0YW5jZSwgdGhlIG1ldGhvZHMgYGFkZEludGVyY2VwdG9yQWZ0ZXIoKWAsIGBhZGRJbnRlcmNlcHRvckJlZm9yZSgpYCwKK2BhZGRJbnRlcmNlcHRvcigpYCwgYW5kIGByZW1vdmVJbnRlcmNlcHRvcigpYCBjYW4gYmUgdXNlZCB0byBhZGQgb3IgcmVtb3ZlIGludGVyY2VwdG9ycy4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIKK3RoYXQgb3JkZXIgbWF0dGVycyBzbyBpZiBvbmUgaW50ZXJjZXB0b3IgZGVwZW5kcyBvbiBhbm90aGVyJ3Mgb3V0cHV0IHRoZW4gZW5zdXJlIHRoZXkgYXJlIGFkZGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorTm90ZSB0aGF0IGBBdXRoYCBpcyBhbHNvIGltcGxlbWVudGVkIHVzaW5nIGludGVyY2VwdG9ycywgYW5kIGBBdXRoYCBpcyBhbHdheXMgcnVuIGxhc3QgYWZ0ZXIgeW91ciBsaXN0IG9mIGludGVyY2VwdG9ycworaGFzIGFscmVhZHkgcmFuLiBCeSBkZWZhdWx0LCB0aGUgYFBheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yYCB3aXRoIHRoZSBuYW1lIGBzZXJpYWxpemVyYCBpcyBhZGRlZCB0byB5b3VyIGxpc3Qgb2YKK2ludGVyY2VwdG9ycy4gVGhpcyBpbnRlcmNlcHRvciBpcyB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdC4gVGhlIGZpcnN0IGludGVyY2VwdG9yIGlzIHByb3ZpZGVkIHdpdGggCithIGBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5IdHRwUmVxdWVzdGAgdGhhdCBjb250YWlucyBhIGBSZXF1ZXN0TWVzc2FnZWAgaW4gdGhlIGJvZHkuIEFzIGEgcmVtaW5kZXIKK2BSZXF1ZXN0TWVzc2FnZWAgaXMgaW1tdXRhYmxlIGFuZCBvbmx5IGNlcnRhaW4ga2V5cyBjYW4gYmUgYWRkZWQgdG8gdGhlbS4gSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBib2R5IGJ5IGFkZGluZworb3RoZXIgZmllbGRzLCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBkaWZmZXJlbnQgY29weSBvZiB0aGUgYFJlcXVlc3RNZXNzYWdlYCBvciBjb21wbGV0ZWx5IGNoYW5nZSB0aGUgYm9keSB0byBjb250YWluIGEKK2RpZmZlcmVudCBkYXRhIHR5cGUuIFRoZSB2ZXJ5IGxhc3QgaW50ZXJjZXB0b3Igc2hvdWxkIGhhdmUgYSBgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuSHR0cFJlcXVlc3RgIHRoYXQKK2NvbnRhaW5zIGEgYnl0ZVtdIGluIHRoZSBib2R5LgorCitGb3IgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBgUmVxdWVzdEludGVyY2VwdG9yYCB0aGF0IG9ubHkgbW9kaWZpZXMgdGhlIGhlYWRlciBvZiB0aGUgcmVxdWVzdCB0YWtlIGEgbG9vayBhdAorbGluazpodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iL3gueS56L2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvYXV0aC9CYXNpYy5qYXZhW2Jhc2ljIGF1dGhlbnRpY2F0aW9uXS4KKwogW1tncmVtbGluLWphdmEtZHNsXV0KID09PSBEb21haW4gU3BlY2lmaWMgTGFuZ3VhZ2VzCiAKQEAgLTEzNjIsMTcgKzEzMzQsMTYgQEAKIHNvY2lhbC5wZXJzb25zKCJtYXJrbyIpLmtub3dzKCJqb3NoIik7CiAtLS0tCiAKLU5PVEU6IFVzaW5nIE1hdmVuLCBhcyBzaG93biBpbiB0aGUgYGdyZW1saW4tYXJjaGV0eXBlLWRzbGAgbW9kdWxlLCBtYWtlcyBkZXZlbG9waW5nIERTTHMgd2l0aCB0aGUgYW5ub3RhdGlvbiBwcm9jZXNzb3IKLXN0cmFpZ2h0Zm9yd2FyZCBpbiB0aGF0IGl0IHNldHMgdXAgYXBwcm9wcmlhdGUgcGF0aHMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlIGF1dG9tYXRpY2FsbHkuCitOT1RFOiBVc2luZyBNYXZlbiBtYWtlcyBkZXZlbG9waW5nIERTTHMgd2l0aCB0aGUgYW5ub3RhdGlvbiBwcm9jZXNzb3Igc3RyYWlnaHRmb3J3YXJkIGluIHRoYXQgaXQgc2V0cyB1cCBhcHByb3ByaWF0ZQorcGF0aHMgdG8gdGhlIGdlbmVyYXRlZCBjb2RlIGF1dG9tYXRpY2FsbHkuCiAKIFtbZ3JlbWxpbi1qYXZhLXRyb3VibGVzaG9vdGluZ11dCiA9PT0gVHJvdWJsZXNob290aW5nCiAKLSpNYXggZnJhbWUgbGVuZ3RoIG9mIDY1NTM2IGhhcyBiZWVuIGV4Y2VlZGVkKgorKlJlc3BvbnNlIGV4Y2VlZGVkIFggYnl0ZXMuKgogCi1UaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcHJvY2VzcyBhIHJlcXVlc3QvcmVzcG9uc2UgdGhhdCBleGNlZWRzIHRoZSBjb25maWd1cmVkIG1heGltdW0gc2l6ZS4KLVRoZSBtb3N0IGRpcmVjdCB3YXkgdG8gZml4IHRoaXMgcHJvYmxlbSBpcyB0byBpbmNyZWFzZSB0aGUgYG1heENvbnRlbnRMZW5ndGhgIHNldHRpbmcgaW4gdGhlIGRyaXZlci4gSWRlYWxseSwgdGhlCi1gbWF4Q29udGVudExlbmd0aGAgc2V0IGZvciB0aGUgZHJpdmVyIHNob3VsZCBtYXRjaCB0aGUgc2V0dGluZyBkZWZpbmVkIG9uIHRoZSBzZXJ2ZXIuCitUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcHJvY2VzcyBhIHJlc3BvbnNlIHRoYXQgZXhjZWVkcyB0aGUgY29uZmlndXJlZCBtYXhpbXVtIHJlc3BvbnNlIHNpemUuCitUaGUgbW9zdCBkaXJlY3Qgd2F5IHRvIGZpeCB0aGlzIHByb2JsZW0gaXMgdG8gaW5jcmVhc2UgdGhlIGBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGhgIHNldHRpbmcgaW4gdGhlIGRyaXZlci4KIAogKlRpbWVvdXRFeGNlcHRpb24qCiAKQEAgLTEzOTgsMjggKzEzNjksMjggQEAKIAogW3NvdXJjZSx0ZXh0XQogLS0tLQotVGltZWQtb3V0ICg1MDAgTUlMTElTRUNPTkRTKSB3YWl0aW5nIGZvciBjb25uZWN0aW9uIG9uIEhvc3R7YWRkcmVzcz1sb2NhbGhvc3QvMTI3LjAuMC4xOjQ1OTQwLCBob3N0VXJpPXdzOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW59LiBQb3RlbnRpYWwgQ2F1c2U6IENvbm5lY3Rpb24gcmVmdXNlZDogbm8gZnVydGhlciBpbmZvcm1hdGlvbgotPiBDb25uZWN0aW9uUG9vbCAoSG9zdHthZGRyZXNzPWxvY2FsaG9zdC8xMjcuMC4wLjE6NDU5NDAsIGhvc3RVcmk9d3M6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbn0pLSBubyBjb25uZWN0aW9ucyBpbiBwb29sCitUaW1lZC1vdXQgKDUwMCBNSUxMSVNFQ09ORFMpIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gb24gSG9zdHthZGRyZXNzPWxvY2FsaG9zdC8xMjcuMC4wLjE6NDU5NDAsIGhvc3RVcmk9aHR0cDovL2xvY2FsaG9zdDo0NTk0MC9ncmVtbGlufS4gUG90ZW50aWFsIENhdXNlOiBDb25uZWN0aW9uIHJlZnVzZWQ6IG5vIGZ1cnRoZXIgaW5mb3JtYXRpb24KKz4gQ29ubmVjdGlvblBvb2wgKEhvc3R7YWRkcmVzcz1sb2NhbGhvc3QvMTI3LjAuMC4xOjQ1OTQwLCBob3N0VXJpPWh0dHA6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbn0pLSBubyBjb25uZWN0aW9ucyBpbiBwb29sCiAtLS0tCiAKIF9DbGllbnQgaXMgbGlrZWx5IGlzc3VpbmcgbW9yZSByZXF1ZXN0cyB0aGFuIHRoZSBwb29sIHNpemUgY2FuIGhhbmRsZV8KIAogW3NvdXJjZSx0ZXh0XQogLS0tLQotVGltZWQtb3V0ICgxNTAgTUlMTElTRUNPTkRTKSB3YWl0aW5nIGZvciBjb25uZWN0aW9uIG9uIEhvc3R7YWRkcmVzcz1sb2NhbGhvc3QvMTI3LjAuMC4xOjQ1OTQwLCBob3N0VXJpPXdzOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW59LiBQb3RlbnRpYWwgQ2F1c2U6IE51bWJlciBvZiBhY3RpdmUgcmVxdWVzdHMgZXhjZWVkcyBwb29sIHNpemUuIENvbnNpZGVyIGluY3JlYXNpbmcgdGhlIHZhbHVlIGZvciBtYXhDb25uZWN0aW9uUG9vbFNpemUuCi1Db25uZWN0aW9uUG9vbCAoSG9zdHthZGRyZXNzPWxvY2FsaG9zdC8xMjcuMC4wLjE6NDU5NDAsIGhvc3RVcmk9d3M6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbn0pCi1Db25uZWN0aW9uIFBvb2wgU3RhdHVzIChzaXplPTEgbWF4PTEgbWluPTEgdG9DcmVhdGU9MCBiaW49MCkKK1RpbWVkLW91dCAoMTUwIE1JTExJU0VDT05EUykgd2FpdGluZyBmb3IgY29ubmVjdGlvbiBvbiBIb3N0e2FkZHJlc3M9bG9jYWxob3N0LzEyNy4wLjAuMTo0NTk0MCwgaG9zdFVyaT1odHRwOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW59LiBQb3RlbnRpYWwgQ2F1c2U6IE51bWJlciBvZiBhY3RpdmUgcmVxdWVzdHMgZXhjZWVkcyBwb29sIHNpemUuIENvbnNpZGVyIGluY3JlYXNpbmcgdGhlIHZhbHVlIGZvciBtYXhDb25uZWN0aW9uUG9vbFNpemUuCitDb25uZWN0aW9uUG9vbCAoSG9zdHthZGRyZXNzPWxvY2FsaG9zdC8xMjcuMC4wLjE6NDU5NDAsIGhvc3RVcmk9aHR0cDovL2xvY2FsaG9zdDo0NTk0MC9ncmVtbGlufSkKK0Nvbm5lY3Rpb24gUG9vbCBTdGF0dXMgKHNpemU9MSBhdmFpbGFibGU9MSBtYXg9MSB0b0NyZWF0ZT0wIGJpbj0wIHdhaXRlcj0wKQogPiBDb25uZWN0aW9ue2NoYW5uZWw9NWE4NTlkNjIgaXNEZWFkPWZhbHNlIGJvcnJvd2VkPTEgcGVuZGluZz0xIG1hcmtlZFJlcGxhY2VkPWZhbHNlIGNsb3Npbmc9ZmFsc2UgY3JlYXRlZD0yMDIyLTEyLTE5VDIxOjA4OjIxLjU2OTYxMzEwMFogdGhyZWFkPWdyZW1saW4tZHJpdmVyLWNvbm4tc2NoZWR1bGVyLTF9CiAtLSBiaW4gLS0KIC0tLS0KIAotX05ldHdvcmsgdHJhZmZpYyBpcyBzbG93IGFuZCB0aGUgd2Vic29ja2V0IGhhbmRzaGFrZSBkb2VzIG5vdCBjb21wbGV0ZSBpbiB0aW1lXworX05ldHdvcmsgdHJhZmZpYyBpcyBzbG93IGFuZCB0aGUgY29ubmVjdGlvbiBzZXR1cCBkb2VzIG5vdCBjb21wbGV0ZSBpbiB0aW1lXwogCiBbc291cmNlLHRleHRdCiAtLS0tCi1UaW1lZC1vdXQgKDI1MCBNSUxMSVNFQ09ORFMpIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gb24gSG9zdHthZGRyZXNzPWxvY2FsaG9zdC8xMjcuMC4wLjE6NDU5NDAsIGhvc3RVcmk9d3M6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbn0uIFBvdGVudGlhbCBDYXVzZTogV2ViU29ja2V0IGhhbmRzaGFrZSBub3QgY29tcGxldGVkIGluIHN0aXB1bGF0ZWQgdGltZT1bMTAwXW1zCi1Db25uZWN0aW9uUG9vbCAoSG9zdHthZGRyZXNzPWxvY2FsaG9zdC8xMjcuMC4wLjE6NDU5NDAsIGhvc3RVcmk9d3M6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbn0pCi1Db25uZWN0aW9uIFBvb2wgU3RhdHVzIChzaXplPTEgbWF4PTUgbWluPTEgdG9DcmVhdGU9MCBiaW49MCkKK1RpbWVkLW91dCAoMjUwIE1JTExJU0VDT05EUykgd2FpdGluZyBmb3IgY29ubmVjdGlvbiBvbiBIb3N0e2FkZHJlc3M9bG9jYWxob3N0LzEyNy4wLjAuMTo0NTk0MCwgaG9zdFVyaT1odHRwOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW59LiBQb3RlbnRpYWwgQ2F1c2U6IENvbm5lY3Rpb24gc2V0dXAgbm90IGNvbXBsZXRlZCBpbiBzdGlwdWxhdGVkIHRpbWU9WzEwMF1tcworQ29ubmVjdGlvblBvb2wgKEhvc3R7YWRkcmVzcz1sb2NhbGhvc3QvMTI3LjAuMC4xOjQ1OTQwLCBob3N0VXJpPWh0dHA6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbn0pCitDb25uZWN0aW9uIFBvb2wgU3RhdHVzIChzaXplPTEgYXZhaWxhYmxlPTEgbWF4PTUgdG9DcmVhdGU9MCBiaW49MCB3YWl0ZXI9MCkKID4gQ29ubmVjdGlvbntjaGFubmVsPTIwNWZjOGQyIGlzRGVhZD1mYWxzZSBib3Jyb3dlZD0xIHBlbmRpbmc9MSBtYXJrZWRSZXBsYWNlZD1mYWxzZSBjbG9zaW5nPWZhbHNlIGNyZWF0ZWQ9MjAyMi0xMi0xOVQyMToxMDowNC42OTI5MjE2MDBaIHRocmVhZD1ncmVtbGluLWRyaXZlci1jb25uLXNjaGVkdWxlci0xfQogLS0gYmluIC0tCiAtLS0tCkBAIC0xNDU5LDMwICsxNDMwLDYgQEAKIC0tLS0KIAogYW5jaG9yOmphdmEtYXBwbGljYXRpb24tZXhhbXBsZXNbXQotYW5jaG9yOmdyZW1saW4tYXJjaGV0eXBlc1tdCi1bW2dyZW1saW4tamF2YS1hcmNoZXR5cGVzXV0KLT09PSBBcHBsaWNhdGlvbiBBcmNoZXR5cGVzCi0KLVRoZSBhdmFpbGFibGUgbGluazpodHRwczovL21hdmVuLmFwYWNoZS5vcmcvZ3VpZGVzL2ludHJvZHVjdGlvbi9pbnRyb2R1Y3Rpb24tdG8tYXJjaGV0eXBlcy5odG1sW01hdmVuIGFyY2hldHlwZXNdIGFyZQotYXMgZm9sbG93czoKLQotKiBgZ3JlbWxpbi1hcmNoZXR5cGUtZHNsYCAtIEFuIGV4YW1wbGUgcHJvamVjdCB0aGF0IGRlbW9uc3RyYXRlcyBob3cgdG8gYnVpbGQgRG9tYWluIFNwZWNpZmljIExhbmd1YWdlcyB3aXRoIEdyZW1saW4KLWluIEphdmEuCi0qIGBncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXJgIC0gQW4gZXhhbXBsZSBwcm9qZWN0IHRoYXQgZGVtb25zdHJhdGVzIHRoZSBiYXNpYyBzdHJ1Y3R1cmUgb2YgYQotPDxncmVtbGluLXNlcnZlcixHcmVtbGluIFNlcnZlcj4+IHByb2plY3QsIGhvdyB0byBjb25uZWN0IHdpdGggdGhlIEdyZW1saW4gRHJpdmVyLCBhbmQgaG93IHRvIGVtYmVkIEdyZW1saW4gU2VydmVyIGluCi1hIHRlc3RpbmcgZnJhbWV3b3JrLgotKiBgZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGhgIC0gQSBiYXNpYyBleGFtcGxlIG9mIGhvdyB0byBzdHJ1Y3R1cmUgYSBUaW5rZXJQb3AgcHJvamVjdCB3aXRoIE1hdmVuLgotCi1Vc2UgTWF2ZW4gdG8gZ2VuZXJhdGUgdGhlc2UgZXhhbXBsZSBwcm9qZWN0cyB3aXRoIGEgY29tbWFuZCBsaWtlOgotCi1bc291cmNlLHNoZWxsXQotJCBtdm4gYXJjaGV0eXBlOmdlbmVyYXRlIC1EYXJjaGV0eXBlR3JvdXBJZD1vcmcuYXBhY2hlLnRpbmtlcnBvcCAtRGFyY2hldHlwZUFydGlmYWN0SWQ9Z3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyIFwKLSAgICAgIC1EYXJjaGV0eXBlVmVyc2lvbj14LnkueiAtRGdyb3VwSWQ9Y29tLm15IC1EYXJ0aWZhY3RJZD1hcHAgLUR2ZXJzaW9uPTAuMSAtRGludGVyYWN0aXZlTW9kZT1mYWxzZQotCi1UaGlzIGNvbW1hbmQgd2lsbCBnZW5lcmF0ZSBhIG5ldyBNYXZlbiBwcm9qZWN0IGluIGEgZGlyZWN0b3J5IGNhbGxlZCAiYXBwIiB3aXRoIGEgYHBvbS54bWxgIHNwZWNpZnlpbmcgYSBgZ3JvdXBJZGAgb2YKLWBjb20ubXlgLiBQbGVhc2Ugc2VlIHRoZSBgUkVBRE1FLmFzY2lpZG9jYCBpbiB0aGUgcm9vdCBvZiBlYWNoIGdlbmVyYXRlZCBwcm9qZWN0IGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gYnVpbGQgYW5kCi1leGVjdXRlIGl0LgotCiBbW2dyZW1saW4tamF2YS1leGFtcGxlc11dCiA9PT0gQXBwbGljYXRpb24gRXhhbXBsZXMKIApAQCAtMTU0OSw3ICsxNDk2LDcgQEAKID09IEdyZW1saW4tSmF2YVNjcmlwdAogCiBpbWFnZTpncmVtbGluLWpzLnBuZ1t3aWR0aD0xMzAsZmxvYXQ9cmlnaHRdIEFwYWNoZSBUaW5rZXJQb3AncyBHcmVtbGluLUphdmFTY3JpcHQgaW1wbGVtZW50cyBHcmVtbGluIHdpdGhpbiB0aGUKLUphdmFTY3JpcHQgbGFuZ3VhZ2UuIEl0IHRhcmdldHMgTm9kZS5qcyBydW50aW1lIGFuZCBjYW4gYmUgdXNlZCBvbiBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMgb24gYW55IE5vZGUuanMgMjAgb3IKK0phdmFTY3JpcHQgbGFuZ3VhZ2UuIEl0IHRhcmdldHMgTm9kZS5qcyBydW50aW1lIGFuZCBjYW4gYmUgdXNlZCBvbiBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMgb24gYW55IE5vZGUuanMgMjIgb3IKIGFib3ZlLiBTaW5jZSB0aGUgSmF2YVNjcmlwdCBuYW1pbmcgY29udmVudGlvbnMgYXJlIHZlcnkgc2ltaWxhciB0byB0aGF0IG9mIEphdmEsIGl0IHNob3VsZCBiZSB2ZXJ5IGVhc3kgdG8gc3dpdGNoCiBiZXR3ZWVuIEdyZW1saW4tSmF2YSBhbmQgR3JlbWxpbi1KYXZhU2NyaXB0LgogCkBAIC0xNTcwLDYgKzE1MTcsNyBAQAogfDMuNy4wIHziiaUxOCB8OS42LjcKIHwzLjcuNCB84omlMjAgfDEwLjguMgogfDMuOC4wIHziiaUyMCB8MTAuOC4yCit8NC4wLjAtYmV0YS4yIHziiaUyMiB8MTAuOC4yCiB8PT09CiAKIFtbZ3JlbWxpbi1qYXZhc2NyaXB0LWNvbm5lY3RpbmddXQpAQCAtMTU4MiwxNSArMTUzMCwzMCBAQAogCiBbc291cmNlLGphdmFzY3JpcHRdCiAtLS0tCi1jb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aChuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykpOworY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpKTsKIC0tLS0KIAotR3JlbWxpbi1KYXZhU2NyaXB0IHN1cHBvcnRzIHBsYWluIHRleHQgU0FTTCBhdXRoZW50aWNhdGlvbiwgeW91IGNhbiBzZXQgaXQgb24gdGhlIGNvbm5lY3Rpb24gb3B0aW9ucy4KK0dyZW1saW4tSmF2YVNjcmlwdCBzdXBwb3J0cyBiYXNpYyBIVFRQIGF1dGhlbnRpY2F0aW9uIHZpYSByZXF1ZXN0IGludGVyY2VwdG9ycy4gVGhlIGBhdXRoLmJhc2ljKClgIGZ1bmN0aW9uIHJldHVybnMgYW4KK2ludGVyY2VwdG9yIHRoYXQgYWRkcyBhbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVyIHRvIGVhY2ggcmVxdWVzdC4KIAogW3NvdXJjZSxqYXZhc2NyaXB0XQogLS0tLQotY29uc3QgYXV0aGVudGljYXRvciA9IG5ldyBncmVtbGluLmRyaXZlci5hdXRoLlBsYWluVGV4dFNhc2xBdXRoZW50aWNhdG9yKCdteXVzZXInLCAnbXlwYXNzd29yZCcpOwotY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGgobmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsIHsgYXV0aGVudGljYXRvciB9KTsKK2NvbnN0IHsgYXV0aCB9ID0gZ3JlbWxpbi5kcml2ZXI7Citjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8obmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgeworICBpbnRlcmNlcHRvcnM6IGF1dGguYmFzaWMoJ215dXNlcicsICdteXBhc3N3b3JkJykKK30pKTsKKy0tLS0KKworU2lnbmF0dXJlIFZlcnNpb24gNCBhdXRoZW50aWNhdGlvbiBpcyBhbHNvIHN1cHBvcnRlZCB2aWEgYGF1dGguc2lndjQoKWAuIFRoaXMgcmVxdWlyZXMgdGhlCitgQHNtaXRoeS9zaWduYXR1cmUtdjRgLCBgQHNtaXRoeS9oYXNoLW5vZGVgLCBhbmQgb3B0aW9uYWxseSBgQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnNgIHBhY2thZ2VzIHRvIGJlIGluc3RhbGxlZC4KK1doZW4gbm8gYGNyZWRlbnRpYWxzUHJvdmlkZXJgIGlzIHN1cHBsaWVkLCB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyIGNoYWluIGlzIHVzZWQuCisKK1tzb3VyY2UsamF2YXNjcmlwdF0KKy0tLS0KK2NvbnN0IHsgYXV0aCB9ID0gZ3JlbWxpbi5kcml2ZXI7Citjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8obmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgeworICBpbnRlcmNlcHRvcnM6IGF1dGguc2lndjQoInNlcnZpY2UtcmVnaW9uIiwgInNlcnZpY2UtbmFtZSIpCit9KSk7CiAtLS0tCiAKIEdpdmVuIHRoYXQgSS9PIG9wZXJhdGlvbnMgaW4gTm9kZS5qcyBhcmUgYXN5bmNocm9ub3VzIGJ5IGRlZmF1bHQsIDw8dGVybWluYWwtc3RlcHMsVGVybWluYWwgU3RlcHM+PiByZXR1cm4gYSBgUHJvbWlzZWA6CkBAIC0xNjE2LDcgKzE1NzksNyBAQAogY29uc29sZS5sb2cobmFtZXMpOwogLS0tLQogCi1Tb21lIGNvbm5lY3Rpb24gb3B0aW9ucyBjYW4gYWxzbyBiZSBzZXQgb24gaW5kaXZpZHVhbCByZXF1ZXN0cyBtYWRlIHRocm91Z2ggdGhlIHVzaW5nIGB3aXRoKClgIHN0ZXAgb24gdGhlCitTb21lIGNvbm5lY3Rpb24gb3B0aW9ucyBjYW4gYWxzbyBiZSBzZXQgb24gaW5kaXZpZHVhbCByZXF1ZXN0cyBtYWRlIHRocm91Z2ggdGhlIHVzaW5nIGB3aXRoXygpYCBzdGVwIG9uIHRoZQogYFRyYXZlcnNhbFNvdXJjZWAuIEZvciBpbnN0YW5jZSB0byBzZXQgcmVxdWVzdCB0aW1lb3V0IHRvIDUwMCBtaWxsaXNlY29uZHM6CiAKIFtzb3VyY2UsamF2YXNjcmlwdF0KQEAgLTE2MjQsMTQgKzE1ODcsMjggQEAKIGNvbnN0IHZlcnRpY2VzID0gYXdhaXQgZy53aXRoXygnZXZhbHVhdGlvblRpbWVvdXQnLCA1MDApLlYoKS5vdXQoJ2tub3dzJykudG9MaXN0KCkKIC0tLS0KIAotVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgaW4gdGhpcyBmYXNoaW9uOiBgYmF0Y2hTaXplYCwgYHJlcXVlc3RJZGAsIGB1c2VyQWdlbnRgIGFuZAotYGV2YWx1YXRpb25UaW1lb3V0YCAoZm9ybWVybHkgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBidXQgbm93IGRlcHJlY2F0ZWQpLgorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgaW4gdGhpcyBmYXNoaW9uOiBgYmF0Y2hTaXplYCwgYHJlcXVlc3RJZGAsIGB1c2VyQWdlbnRgLAorYGJ1bGtSZXN1bHRzYCwgYG1hdGVyaWFsaXplUHJvcGVydGllc2AgYW5kIGBldmFsdWF0aW9uVGltZW91dGAuCiAKIFtbZ3JlbWxpbi1qYXZhc2NyaXB0LWltcG9ydHNdXQogPT09IENvbW1vbiBJbXBvcnRzCiAKIFRoZXJlIGFyZSBhIG51bWJlciBvZiBjbGFzc2VzLCBmdW5jdGlvbnMgYW5kIHRva2VucyB0aGF0IGFyZSB0eXBpY2FsbHkgdXNlZCB3aXRoIEdyZW1saW4uIFRoZSBmb2xsb3dpbmcgaW1wb3J0cwotcHJvdmlkZSBtb3N0IG9mIHRoZSB0eXBpY2FsIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZWQgdG8gdXNlIEdyZW1saW46Citwcm92aWRlIG1vc3Qgb2YgdGhlIHR5cGljYWwgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCB0byB1c2UgR3JlbWxpbi4KKworPT09PSBFUyBNb2R1bGVzCisKK1tzb3VyY2UsamF2YXNjcmlwdF0KKy0tLS0KK2ltcG9ydCBncmVtbGluIGZyb20gJ2dyZW1saW4nOworCitjb25zdCB0cmF2ZXJzYWwgPSBncmVtbGluLnByb2Nlc3MuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKK2NvbnN0IF9fID0gZ3JlbWxpbi5wcm9jZXNzLnN0YXRpY3M7Citjb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKK2NvbnN0IHsgUDogcCwgVGV4dFA6IHRleHRwLCBjb2x1bW4sIGRpcmVjdGlvbiwgcGljaywgcG9wLCBvcmRlciwgc2NvcGUsIHQsIGNhcmRpbmFsaXR5LCBDYXJkaW5hbGl0eVZhbHVlIH0gPSBncmVtbGluLnByb2Nlc3M7CistLS0tCisKKz09PT0gQ29tbW9uSlMKIAogW3NvdXJjZSxqYXZhc2NyaXB0XQogLS0tLQpAQCAtMTY3OSw3MiArMTY1Niw1NCBAQAogfEtleSB8VHlwZSB8RGVzY3JpcHRpb24gfERlZmF1bHQKIHx1cmwgfFN0cmluZyB8VGhlIHJlc291cmNlIHVyaS4gfE5vbmUKIHxvcHRpb25zIHxPYmplY3QgfFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuIHx7fQotfG9wdGlvbnMuY2EgfEFycmF5IHxUcnVzdGVkIGNlcnRpZmljYXRlcy4gfHVuZGVmaW5lZAotfG9wdGlvbnMuY2VydCB8U3RyaW5nL0FycmF5L0J1ZmZlciB8VGhlIGNlcnRpZmljYXRlIGtleS4gfHVuZGVmaW5lZAotfG9wdGlvbnMubWltZVR5cGUgfFN0cmluZyB8VGhlIG1pbWUgdHlwZSB0byB1c2UuIHwnYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uJwotfG9wdGlvbnMucGZ4IHxTdHJpbmcvQnVmZmVyIHxUaGUgcHJpdmF0ZSBrZXksIGNlcnRpZmljYXRlLCBhbmQgQ0EgY2VydHMuIHx1bmRlZmluZWQKLXxvcHRpb25zLnJlYWRlciB8R3JhcGhTT05SZWFkZXIvR3JhcGhCaW5hcnlSZWFkZXIgfFRoZSByZWFkZXIgdG8gdXNlLiB8c2VsZWN0IHJlYWRlciBhY2NvcmRpbmcgdG8gbWltZVR5cGUKLXxvcHRpb25zLndyaXRlciB8R3JhcGhTT05Xcml0ZXIgfFRoZSB3cml0ZXIgdG8gdXNlLiB8c2VsZWN0IHdyaXRlciBhY2NvcmRpbmcgdG8gbWltZVR5cGUKLXxvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCB8Qm9vbGVhbiB8RGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHZlcmlmeSBvciBub3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4gfHVuZGVmaW5lZAogfG9wdGlvbnMudHJhdmVyc2FsU291cmNlIHxTdHJpbmcgfFRoZSB0cmF2ZXJzYWwgc291cmNlLiB8J2cnCi18b3B0aW9ucy5hdXRoZW50aWNhdG9yIHxBdXRoZW50aWNhdG9yIHxUaGUgYXV0aGVudGljYXRpb24gaGFuZGxlciB0byB1c2UuIHx1bmRlZmluZWQKLXxvcHRpb25zLnByb2Nlc3NvciB8U3RyaW5nIHxUaGUgbmFtZSBvZiB0aGUgb3BQcm9jZXNzb3IgdG8gdXNlLCBsZWF2ZSBpdCB1bmRlZmluZWQgb3Igc2V0ICdzZXNzaW9uJyB3aGVuIHNlc3Npb24gbW9kZS4gfHVuZGVmaW5lZAotfG9wdGlvbnMuc2Vzc2lvbiB8U3RyaW5nIHxUaGUgc2Vzc2lvbklkIG9mIENsaWVudCBpbiBzZXNzaW9uIG1vZGUuIHVuZGVmaW5lZCBtZWFucyBzZXNzaW9uLWxlc3MgQ2xpZW50LiB8dW5kZWZpbmVkCi18b3B0aW9ucy5lbmFibGVDb21wcmVzc2lvbiB8Qm9vbGVhbiB8RW5hYmxlcyBwZXJtZXNzYWdlLWRlZmxhdGUgY29tcHJlc3Npb24uIE5vdGUgdGhhdCB1c2Ugb2YgY29tcHJlc3Npb24gbWF5IGluY3JlYXNlIHZ1bG5lcmFiaWxpdHkgdG8gYXR0YWNrcyBzdWNoIGFzIENSSU1FL0JSRUFDSC58ZmFsc2UKLXxvcHRpb25zLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCB8Qm9vbGVhbiB8RGV0ZXJtaW5lcyBpZiBhIHVzZXIgYWdlbnQgd2lsbCBiZSBzZW50IGR1cmluZyBjb25uZWN0aW9uIGhhbmRzaGFrZS4gfHRydWUKLXxvcHRpb25zLmhlYWRlcnMgfE9iamVjdCB8QW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyB0aGUgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlcyBmb3IgdGhlIGluaXRpYWwgcmVxdWVzdC4gfHVuZGVmaW5lZAotfG9wdGlvbnMucGluZ0VuYWJsZWQgfEJvb2xlYW4gfFNldHVwIHBpbmcgaW50ZXJ2YWwuIHx0cnVlCi18b3B0aW9ucy5waW5nSW50ZXJ2YWwgfE51bWJlciB8UGluZyByZXF1ZXN0IGludGVydmFsIGluIG1zIGlmIHBpbmcgZW5hYmxlZC4gfDYwMDAwCi18b3B0aW9ucy5wb25nVGltZW91dCB8TnVtYmVyIHxUaW1lb3V0IG9mIHBvbmcgcmVzcG9uc2UgaW4gbXMgYWZ0ZXIgc2VuZGluZyBhIHBpbmcuIHwzMDAwMAorfG9wdGlvbnMuaGVhZGVycyB8T2JqZWN0IHxBZGRpdGlvbmFsIEhUVFAgaGVhZGVyIGtleS92YWx1ZXMgaW5jbHVkZWQgd2l0aCBlYWNoIHJlcXVlc3QuIHx1bmRlZmluZWQKK3xvcHRpb25zLmludGVyY2VwdG9ycyB8UmVxdWVzdEludGVyY2VwdG9yL1JlcXVlc3RJbnRlcmNlcHRvcltdIHxPbmUgb3IgbW9yZSBmdW5jdGlvbnMgdGhhdCBjYW4gbW9kaWZ5IHRoZSBIVFRQIHJlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQuIHx1bmRlZmluZWQKK3xvcHRpb25zLnJlYWRlciB8R3JhcGhCaW5hcnlSZWFkZXIgfFRoZSByZWFkZXIgdG8gdXNlIGZvciBkZXNlcmlhbGl6aW5nIHJlc3BvbnNlcy4gfEdyYXBoQmluYXJ5UmVhZGVyCit8b3B0aW9ucy53cml0ZXIgfEdyYXBoQmluYXJ5V3JpdGVyIHxUaGUgd3JpdGVyIHRvIHVzZSBmb3Igc2VyaWFsaXppbmcgcmVxdWVzdHMuIHxHcmFwaEJpbmFyeVdyaXRlcgorfG9wdGlvbnMuZW5hYmxlVXNlckFnZW50T25Db25uZWN0IHxCb29sZWFuIHxEZXRlcm1pbmVzIGlmIGEgdXNlciBhZ2VudCBoZWFkZXIgd2lsbCBiZSBzZW50IHdpdGggcmVxdWVzdHMuIHx0cnVlCit8b3B0aW9ucy5hZ2VudCB8QWdlbnQgfEEgY3VzdG9tIGBub2RlOmh0dHBgIG9yIGBub2RlOmh0dHBzYCBBZ2VudCBmb3IgY29ubmVjdGlvbiBwb29saW5nIG9yIHByb3h5IGNvbmZpZ3VyYXRpb24uIHx1bmRlZmluZWQKIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogW1tncmVtbGluLWphdmFzY3JpcHQtbG9nZ2luZ11dCiA9PT0gTG9nZ2luZwogCitJTVBPUlRBTlQ6IDQuMC4wLWJldGEuMiBSZWxlYXNlIC0gRXZlbnQtYmFzZWQgbG9nZ2luZyBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUgSFRUUCBkcml2ZXIuIExpc3RlbmVycyBjYW4gYmUgcmVnaXN0ZXJlZAorYnV0IHdpbGwgbm90IGN1cnJlbnRseSByZWNlaXZlIGFueSBldmVudHMuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwbGFubmVkIGZvciBhIGZ1dHVyZSByZWxlYXNlLgorCiBUaGUgR3JlbWxpbi1KYXZhU2NyaXB0IGRyaXZlciBlbWl0cyBjb25uZWN0aW9uIGV2ZW50cyBmb3IgbG9nZ2luZyBhbmQgbW9uaXRvcmluZywgYnV0IHRoZXNlIGV2ZW50cyBhcmUgc2lsZW50bHkgaWdub3JlZCB1bmxlc3MgYSBsaXN0ZW5lciBpcyBhdHRhY2hlZC4gVXNlIHRoZSBgYWRkTGlzdGVuZXIoKWAgbWV0aG9kIHRvIHN1YnNjcmliZSB0byBldmVudHMgYWZ0ZXIgY3JlYXRpbmcgYSBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgb3IgYENsaWVudGA6CiAKIFtzb3VyY2UsamF2YXNjcmlwdF0KIC0tLS0KIC8vIFVzaW5nIERyaXZlclJlbW90ZUNvbm5lY3Rpb24KLWNvbnN0IGRjID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpOworY29uc3QgZGMgPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKTsKIAogZGMuYWRkTGlzdGVuZXIoJ2xvZycsIChtZXNzYWdlKSA9PiB7CiAgIGNvbnNvbGUubG9nKCdbR3JlbWxpbiBMb2ddJywgbWVzc2FnZSk7CiB9KTsKIAotZGMuYWRkTGlzdGVuZXIoJ3NvY2tldEVycm9yJywgKGVycikgPT4geworZGMuYWRkTGlzdGVuZXIoJ2Vycm9yJywgKGVycikgPT4gewogICBjb25zb2xlLmVycm9yKCdbR3JlbWxpbiBFcnJvcl0nLCBlcnIpOwogfSk7CiAKLWRjLmFkZExpc3RlbmVyKCdjbG9zZScsIChjb2RlLCBtZXNzYWdlKSA9PiB7Ci0gIGNvbnNvbGUud2FybignW0dyZW1saW4gQ2xvc2VdJywgY29kZSwgbWVzc2FnZSk7Ci19KTsKLQotY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoZGMpOworY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGRjKTsKIAogLy8gVXNpbmcgQ2xpZW50Ci1jb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KCd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCB7IHRyYXZlcnNhbFNvdXJjZTogJ2cnIH0pOworY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCgnaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCB7IHRyYXZlcnNhbFNvdXJjZTogJ2cnIH0pOwogCiBjbGllbnQuYWRkTGlzdGVuZXIoJ2xvZycsIChtZXNzYWdlKSA9PiB7CiAgIGNvbnNvbGUubG9nKCdbR3JlbWxpbiBMb2ddJywgbWVzc2FnZSk7CiB9KTsKIAotY2xpZW50LmFkZExpc3RlbmVyKCdzb2NrZXRFcnJvcicsIChlcnIpID0+IHsKK2NsaWVudC5hZGRMaXN0ZW5lcignZXJyb3InLCAoZXJyKSA9PiB7CiAgIGNvbnNvbGUuZXJyb3IoJ1tHcmVtbGluIEVycm9yXScsIGVycik7CiB9KTsKLQotY2xpZW50LmFkZExpc3RlbmVyKCdjbG9zZScsIChjb2RlLCBtZXNzYWdlKSA9PiB7Ci0gIGNvbnNvbGUud2FybignW0dyZW1saW4gQ2xvc2VdJywgY29kZSwgbWVzc2FnZSk7Ci19KTsKLQotYXdhaXQgY2xpZW50Lm9wZW4oKTsKIC0tLS0KIAogQXZhaWxhYmxlIGV2ZW50czoKIAotKiBgbG9nYCAtIEdlbmVyYWwgY29ubmVjdGlvbiBsb2dzIChvcGVuLCBwaW5nLCBwb25nLCBjbG9zZSwgZXJyb3JzKQotKiBgc29ja2V0RXJyb3JgIC0gV2ViU29ja2V0IGVycm9ycwotKiBgY2xvc2VgIC0gQ29ubmVjdGlvbiBjbG9zZSB3aXRoIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlCisqIGBsb2dgIC0gR2VuZXJhbCBjb25uZWN0aW9uIGxvZ3MgYW5kIGRpYWdub3N0aWNzCisqIGBlcnJvcmAgLSBSZXF1ZXN0IGVycm9ycwogCiBUbyByZW1vdmUgYSBsaXN0ZW5lciwgdXNlIGByZW1vdmVMaXN0ZW5lcihldmVudCwgaGFuZGxlcilgIHdpdGggdGhlIHNhbWUgaGFuZGxlciByZWZlcmVuY2UuCiAKQEAgLTE3NzgsOSArMTczNywxMiBAQAogc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50YXRpb24sIHdoaWNoIGRpc2N1c3NlcyB0cmFuc2FjdGlvbnMgaW4gdGhlIGdlbmVyYWwgY29udGV4dCBvZiBUaW5rZXJQb3AgaXRzZWxmLiBUaGlzIHNlY3Rpb24KIGJ1aWxkcyBvbiB0aGF0IGNvbnRlbnQgYnkgZGVtb25zdHJhdGluZyB0aGUgdHJhbnNhY3Rpb25hbCBzeW50YXggZm9yIEphdmFzY3JpcHQuCiAKK0lNUE9SVEFOVDogNC4wLjAtYmV0YS4yIFJlbGVhc2UgLSBUcmFuc2FjdGlvbnMgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHRoZSBIVFRQIGRyaXZlci4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzCitwbGFubmVkIGZvciBhIGZ1dHVyZSByZWxlYXNlLgorCiBbc291cmNlLGphdmFzY3JpcHRdCiAtLS0tCi1jb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aChuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykpOworY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpKTsKIGNvbnN0IHR4ID0gZy50eCgpOyAvLyBjcmVhdGUgYSBUcmFuc2FjdGlvbgogCiAvLyBzcGF3biBhIG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBiaW5kaW5nIGFsbCB0cmF2ZXJzYWxzIGVzdGFibGlzaGVkIGZyb20gaXQgdG8gdHgKQEAgLTE4MDAsMjkgKzE3NjIsMTEgQEAKIH0pOwogLS0tLQogCi1bW2dyZW1saW4tamF2YXNjcmlwdC1sYW1iZGFdXQotPT09IFRoZSBMYW1iZGEgU29sdXRpb24KK1tbZ3JlbWxpbi1qYXZhc2NyaXB0LWd2YWx1ZV1dCis9PT0gR1ZhbHVlIFBhcmFtZXRlcml6YXRpb24KIAotU3VwcG9ydGluZyBsaW5rOmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Fub255bW91c19mdW5jdGlvblthbm9ueW1vdXMgZnVuY3Rpb25zXSBhY3Jvc3MgbGFuZ3VhZ2VzIGlzIGRpZmZpY3VsdCBhcwotbW9zdCBsYW5ndWFnZXMgZG8gbm90IHN1cHBvcnQgbGFtYmRhIGludHJvc3BlY3Rpb24gYW5kIHRodXMsIGNvZGUgYW5hbHlzaXMuIEluIEdyZW1saW4tSmF2YXNjcmlwdCwgYSBHcmVtbGluIGxhbWJkYQotc2hvdWxkIGJlIHJlcHJlc2VudGVkIGFzIGEgemVyby1hcmcgY2FsbGFibGUgdGhhdCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsYW1iZGEgZXhwZWN0ZWQgZm9yIHVzZSBpbiB0aGUKLXRyYXZlcnNhbC4gVGhlIHJldHVybmVkIGxhbWJkYSBzaG91bGQgYmUgd3JpdHRlbiBhcyBhIEdyZW1saW4tR3Jvb3Z5IHN0cmluZy4gV2hlbiB0aGUgbGFtYmRhIGlzIHJlcHJlc2VudGVkIGluCi1gQnl0ZWNvZGVgIGl0cyBsYW5ndWFnZSBpcyBlbmNvZGVkIHN1Y2ggdGhhdCB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gaG9zdCBjYW4gaW5mZXIgd2hpY2ggdHJhbnNsYXRvciBhbmQgdWx0aW1hdGUKLWV4ZWN1dGlvbiBlbmdpbmUgdG8gdXNlLgotCi1bc291cmNlLGphdmFzY3JpcHRdCi0tLS0tCi1nLlYoKS5vdXQoKS4KLSAgbWFwKCgpID0+ICJpdC5nZXQoKS52YWx1ZSgnbmFtZScpLmxlbmd0aCgpIikuCi0gIHN1bSgpLgotICB0b0xpc3QoKS50aGVuKHRvdGFsID0+IGNvbnNvbGUubG9nKHRvdGFsKSkKLS0tLS0KLQotVElQOiBXaGVuIHJ1bm5pbmcgaW50byBzaXR1YXRpb25zIHdoZXJlIEdyb292eSBjYW5ub3QgcHJvcGVybHkgZGlzY2VybiBhIG1ldGhvZCBzaWduYXR1cmUgYmFzZWQgb24gdGhlIGBMYW1iZGFgCi1pbnN0YW5jZSBjcmVhdGVkLCBpdCB3aWxsIGhlbHAgdG8gZnVsbHkgZGVmaW5lIHRoZSBjbG9zdXJlIGluIHRoZSBsYW1iZGEgZXhwcmVzc2lvbiAtIHNvIHJhdGhlciB0aGFuCi1gKCkgPT4gIml0LmdldCgpLnZhbHVlKCduYW1lJykiYCwgcHJlZmVyIGAoKSA9PiAieCAtPiB4LmdldCgpLnZhbHVlKCduYW1lJykiYC4KLQotV0FSTklORzogQXMgZXhwbGFpbmVkIHRocm91Z2hvdXQgdGhlIGRvY3VtZW50YXRpb24sIHdoZW4gcG9zc2libGUgPDxhLW5vdGUtb24tbGFtYmRhcyxhdm9pZD4+IGxhbWJkYXMuCitJTVBPUlRBTlQ6IDQuMC4wLWJldGEuMiBSZWxlYXNlIC0gYEdWYWx1ZWAgcGFyYW1ldGVyaXphdGlvbiBpcyBub3QgeWV0IGltcGxlbWVudGVkIGZvciB0aGUgSmF2YVNjcmlwdCBkcml2ZXIuIFRoaXMKK2Z1bmN0aW9uYWxpdHkgaXMgcGxhbm5lZCBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KIAogW1tncmVtbGluLWphdmFzY3JpcHQtc2NyaXB0c11dCiA9PT0gU3VibWl0dGluZyBTY3JpcHRzCkBAIC0xODMyLDcgKzE3NzYsNyBAQAogW3NvdXJjZSxqYXZhc2NyaXB0XQogLS0tLQogY29uc3QgZ3JlbWxpbiA9IHJlcXVpcmUoJ2dyZW1saW4nKTsKLWNvbnN0IGNsaWVudCA9IG5ldyBncmVtbGluLmRyaXZlci5DbGllbnQoJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsIHsgdHJhdmVyc2FsU291cmNlOiAnZycgfSk7Citjb25zdCBjbGllbnQgPSBuZXcgZ3JlbWxpbi5kcml2ZXIuQ2xpZW50KCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsIHsgdHJhdmVyc2FsU291cmNlOiAnZycgfSk7CiAKIGNvbnN0IHJlc3VsdDEgPSBhd2FpdCBjbGllbnQuc3VibWl0KCdnLlYodmlkKScsIHsgdmlkOiAxIH0pOwogY29uc3QgdmVydGV4ID0gcmVzdWx0MS5maXJzdCgpOwpAQCAtMTg0NSwxNSArMTc4OSw2IEBACiB9CiAtLS0tCiAKLUl0IGlzIGFsc28gcG9zc2libGUgdG8gaW5pdGlhbGl6ZSB0aGUgYENsaWVudGAgdG8gdXNlIDw8c2Vzc2lvbnMsc2Vzc2lvbnM+PjoKLQotW3NvdXJjZSxqYXZhc2NyaXB0XQotLS0tLQotY29uc3QgY2xpZW50ID0gbmV3IGdyZW1saW4uZHJpdmVyLkNsaWVudCgnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgeyB0cmF2ZXJzYWxTb3VyY2U6ICdnJywgJ3Nlc3Npb24nOiAndW5pcXVlLXN0cmluZy1pZCcgfSk7Ci0tLS0tCi0KLVdpdGggdGhpcyBjb25maWd1cmF0aW9uLCB0aGUgc3RhdGUgb2YgdmFyaWFibGVzIHdpdGhpbiBzY3JpcHRzIGFyZSBwcmVzZXJ2ZWQgYmV0d2VlbiByZXF1ZXN0cy4KLQogPT09PSBQZXIgUmVxdWVzdCBTZXR0aW5ncwogCiBUaGUgYGNsaWVudC5zdWJtaXQoKWAgZnVuY3Rpb25zIGFjY2VwdCBhIGByZXF1ZXN0T3B0aW9uc2Agd2hpY2ggZXhwZWN0cyBhIGRpY3Rpb25hcnkuIFRoZSBgcmVxdWVzdE9wdGlvbnNgCkBAIC0xODY2LDE2ICsxODAxLDIxIEBACiBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuc3VibWl0KCJnLlYoKS5yZXBlYXQoYm90aCgpKS50aW1lcygxMDApIiwgbnVsbCwgeyBldmFsdWF0aW9uVGltZW91dDogNTAwMCB9KQogLS0tLQogCi1UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBpbiB0aGlzIGZhc2hpb246IGBiYXRjaFNpemVgLCBgcmVxdWVzdElkYCwgYHVzZXJBZ2VudGAsIGBtYXRlcmlhbGl6ZVByb3BlcnRpZXNgIGFuZAotYGV2YWx1YXRpb25UaW1lb3V0YCAoZm9ybWVybHkgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBidXQgbm93IGRlcHJlY2F0ZWQpLgorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgaW4gdGhpcyBmYXNoaW9uOiBgYmF0Y2hTaXplYCwgYHJlcXVlc3RJZGAsIGB1c2VyQWdlbnRgLAorYGJ1bGtSZXN1bHRzYCwgYG1hdGVyaWFsaXplUHJvcGVydGllc2AgYW5kIGBldmFsdWF0aW9uVGltZW91dGAuCiAKIElNUE9SVEFOVDogVGhlIHByZWZlcnJlZCBtZXRob2QgZm9yIHNldHRpbmcgYSBwZXItcmVxdWVzdCB0aW1lb3V0IGZvciBzY3JpcHRzIGlzIGRlbW9uc3RyYXRlZCBhYm92ZSwgYnV0IHRob3NlIGZhbWlsaWFyCiB3aXRoIGJ5dGVjb2RlIG1heSB0cnkgYGcud2l0aChFVkFMVUFUSU9OX1RJTUVPVVQsIDUwMClgIHdpdGhpbiBhIHNjcmlwdC4gU2NyaXB0cyB3aXRoIG11bHRpcGxlIHRyYXZlcnNhbHMgYW5kIG11bHRpcGxlCiB0aW1lb3V0cyB3aWxsIGJlIGludGVycHJldGVkIGFzIGEgc3VtIG9mIGFsbCB0aW1lb3V0cyBpZGVudGlmaWVkIGluIHRoZSBzY3JpcHQgZm9yIHRoYXQgcmVxdWVzdC4KIAotPT09PSBQcm9jZXNzaW5nIHJlc3VsdHMgYXMgdGhleSBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgR3JlbWxpbiBzZXJ2ZXIKKz09PT0gU3RyZWFtaW5nIFJlc3VsdHMKIAotVGhlIEdyZW1saW4gSmF2YVNjcmlwdCBkcml2ZXIgbWFpbnRhaW5zIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIEdyZW1saW4gc2VydmVyIGFuZCByZWNlaXZlcyBtZXNzYWdlcyBhY2NvcmRpbmcgdG8gdGhlIGBiYXRjaFNpemVgIHBhcmFtZXRlciBvbiB0aGUgcGVyIHJlcXVlc3Qgc2V0dGluZ3Mgb3IgdGhlIGByZXN1bHRJdGVyYXRpb25CYXRjaFNpemVgIHZhbHVlIGNvbmZpZ3VyZWQgZm9yIHRoZSBHcmVtbGluIHNlcnZlci4gV2hlbiBzdWJtaXR0aW5nIHNjcmlwdHMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gd2FpdCBmb3IgdGhlIGVudGlyZSByZXN1bHQgc2V0IHRvIGJlIHJldHVybmVkIGZyb20gYSBxdWVyeSBiZWZvcmUgYWxsb3dpbmcgYW55IHByb2Nlc3Npbmcgb24gdGhlIHJlc3VsdCBzZXQuCitJTVBPUlRBTlQ6IDQuMC4wLWJldGEuMiBSZWxlYXNlIC0gYGNsaWVudC5zdHJlYW0oKWAgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgdGhlIEhUVFAgZHJpdmVyIGFuZCB3aWxsIHRocm93IGFuIGVycm9yIGlmCitjYWxsZWQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwbGFubmVkIGZvciBhIGZ1dHVyZSByZWxlYXNlLgorCitUaGUgR3JlbWxpbiBKYXZhU2NyaXB0IGRyaXZlciByZWNlaXZlcyByZXN1bHRzIGFjY29yZGluZyB0byB0aGUgYGJhdGNoU2l6ZWAgcGFyYW1ldGVyIG9uIHRoZSBwZXItcmVxdWVzdCBzZXR0aW5ncyBvciB0aGUKK2ByZXN1bHRJdGVyYXRpb25CYXRjaFNpemVgIHZhbHVlIGNvbmZpZ3VyZWQgZm9yIHRoZSBHcmVtbGluIHNlcnZlci4gV2hlbiBzdWJtaXR0aW5nIHNjcmlwdHMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8KK3dhaXQgZm9yIHRoZSBlbnRpcmUgcmVzdWx0IHNldCB0byBiZSByZXR1cm5lZCBmcm9tIGEgcXVlcnkgYmVmb3JlIGFsbG93aW5nIGFueSBwcm9jZXNzaW5nIG9uIHRoZSByZXN1bHQgc2V0LgogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGFzc3VtZSB0aGF0IHlvdSBoYXZlIDEwMCB2ZXJ0aWNlcyBpbiB5b3VyIGdyYXBoLgogCkBAIC0xOTA1LDcgKzE4NDUsNyBAQAogfSkKIC0tLS0KIAotSWYgeW91IGFyZSB1c2luZyBOb2RlSlMgPj0gMTAuMCwgeW91IGNhbiBhc3luY2hyb25vdXNseSBpdGVyYXRlIHJlYWRhYmxlIHN0cmVhbXM6CitSZWFkYWJsZSBzdHJlYW1zIGNhbiBhbHNvIGJlIGNvbnN1bWVkIHVzaW5nIGFzeW5jaHJvbm91cyBpdGVyYXRpb246CiAKIAogW3NvdXJjZSxqYXZhc2NyaXB0XQpAQCAtMjAzNiw2ICsxOTc2LDE2IEBACiBbW2dyZW1saW4tamF2YXNjcmlwdC1saW1pdGF0aW9uc11dCiA9PT0gTGltaXRhdGlvbnMKIAorKiBKYXZhU2NyaXB0J3MgYE51bWJlcmAgdHlwZSBpcyBhbiBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0LiBgRmxvYXRgLCBgQnl0ZWAsIGFuZCBgU2hvcnRgIHZhbHVlcyBmcm9tIHRoZSBzZXJ2ZXIKK2FyZSBkZXNlcmlhbGl6ZWQgYXMgYE51bWJlcmAgYW5kIGxvc2UgdGhlaXIgb3JpZ2luYWwgdHlwZSBpbmZvcm1hdGlvbi4KKyogYExvbmdgIHZhbHVlcyBvdXRzaWRlIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UgKHxufCA+IDJeNTMgLSAxKSBhcmUgZGVzZXJpYWxpemVkIGFzIGBCaWdJbnRgIHRvIHByZXNlcnZlIHByZWNpc2lvbi4KK1ZhbHVlcyB3aXRoaW4gdGhlIHNhZmUgcmFuZ2UgYXJlIGRlc2VyaWFsaXplZCBhcyBgTnVtYmVyYC4gVGhlIHNhbWUgc2VydmVyIHR5cGUgbWF5IHByb2R1Y2UgZGlmZmVyZW50IEphdmFTY3JpcHQgdHlwZXMuCisqIGBOdW1iZXIuaXNJbnRlZ2VyKDEuMClgIGlzIGB0cnVlYCBpbiBKYXZhU2NyaXB0LCBzbyB0aGUgZHJpdmVyIGNhbm5vdCBkaXN0aW5ndWlzaCBpbnRlZ2VyIHZhbHVlcyBmcm9tIHdob2xlLW51bWJlcgorZG91Ymxlcy4gYEJpZ0RlY2ltYWxgIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyogVGhlIGRyaXZlciBhcHBsaWVzIEdyZW1saW5MYW5nIHR5cGUgc3VmZml4ZXMgYXV0b21hdGljYWxseSBiYXNlZCBvbiB2YWx1ZSBjaGFyYWN0ZXJpc3RpY3M6IGludGVnZXJzIHdpdGhpbiB0aGUgMzItYml0CitzaWduZWQgcmFuZ2UgYXJlIHVuc3VmZml4ZWQgKEludCksIGludGVnZXJzIGJleW9uZCB0aGF0IHVwIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAgdXNlIHRoZSBgTGAgc3VmZml4IChMb25nKSwKK25vbi1pbnRlZ2VyIG51bWJlcnMgYW5kIGludGVnZXJzIGJleW9uZCB0aGUgc2FmZSByYW5nZSB1c2UgdGhlIGBEYCBzdWZmaXggKERvdWJsZSksIGFuZCBgQmlnSW50YCB2YWx1ZXMgdXNlIHRoZSBgTmAKK3N1ZmZpeCAoQmlnSW50ZWdlcikuCiAqIFRoZSBgc3ViZ3JhcGgoKWAtc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFueSB2YXJpYW50IHRoYXQgaXMgbm90IHJ1bm5pbmcgb24gdGhlIEphdmEgVmlydHVhbCBNYWNoaW5lIGFzIHRoZXJlIGlzCiBubyBgR3JhcGhgIGluc3RhbmNlIHRvIGRlc2VyaWFsaXplIGEgcmVzdWx0IGludG8gb24gdGhlIGNsaWVudC1zaWRlLiBBIHdvcmthcm91bmQgaXMgdG8gcmVwbGFjZSB0aGUgc3RlcCB3aXRoCiBgYWdncmVnYXRlKGxvY2FsKWAgYW5kIHRoZW4gY29udmVydCB0aG9zZSByZXN1bHRzIHRvIHNvbWV0aGluZyB0aGUgY2xpZW50IGNhbiB1c2UgbG9jYWxseS4KQEAgLTIxMTMsNiArMjA2Myw4IEBACiBkaWZmZXJlbmNlIGlzIHRoYXQgYWxsIG1ldGhvZCBuYW1lcyBpbiBHcmVtbGluLk5ldCB1c2UgUGFzY2FsQ2FzZSBhcyBvcHBvc2VkIHRvIGNhbWVsQ2FzZSBpbiBHcmVtbGluLUphdmEgaW4gb3JkZXIKIHRvIGNvbXBseSB3aXRoIC5ORVQgY29udmVudGlvbnMuCiAKK1RoZSBHcmVtbGluLk5ldCBkcml2ZXIgY29tbXVuaWNhdGVzIHdpdGggR3JlbWxpbiBTZXJ2ZXIgb3ZlciBIVFRQIHVzaW5nIHRoZSBHcmFwaEJpbmFyeSA0LjAgc2VyaWFsaXphdGlvbiBmb3JtYXQuCisKIFtzb3VyY2UscG93ZXJzaGVsbF0KIG51Z2V0IGluc3RhbGwgR3JlbWxpbi5OZXQKIApAQCAtMjE0Miw2ICsyMDk0LDI4IEBACiBpbmNsdWRlOjouLi8uLi8uLi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9HcmVtbGluVmFyaWFudHNUZXN0cy5jc1t0YWdzPWNvbm5lY3RpbmddCiAtLS0tCiAKK0F1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgdGhyb3VnaCByZXF1ZXN0IGludGVyY2VwdG9ycy4gSW50ZXJjZXB0b3JzIGFyZSBmdW5jdGlvbnMgdGhhdCBtb2RpZnkgdGhlIG91dGdvaW5nIEhUVFAKK3JlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQg4oCUIHRoZXkgYXJlIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uLCBjdXN0b20gaGVhZGVycywgb3IgcmVxdWVzdCBzaWduaW5nLiBUaGUgYEF1dGhgIGNsYXNzCitwcm92aWRlcyBgQmFzaWNBdXRoKClgIGFuZCBgU2lnVjRBdXRoKClgIGFzIGJ1aWx0LWluIGludGVyY2VwdG9yczoKKworW3NvdXJjZSxjc2hhcnBdCistLS0tCisvLyBCYXNpYyBhdXRoZW50aWNhdGlvbgordmFyIHNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyLCBlbmFibGVTc2w6IHRydWUpOwordXNpbmcgdmFyIGNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KHNlcnZlciwKKyAgICBjb25uZWN0aW9uU2V0dGluZ3M6IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MgeyBTa2lwQ2VydGlmaWNhdGVWYWxpZGF0aW9uID0gdHJ1ZSB9LAorICAgIGludGVyY2VwdG9yczogbmV3W10geyBBdXRoLkJhc2ljQXV0aCgidXNlcm5hbWUiLCAicGFzc3dvcmQiKSB9KTsKKworLy8gU2lnVjQgYXV0aGVudGljYXRpb24KK3ZhciBzZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4MiwgZW5hYmxlU3NsOiB0cnVlKTsKK3VzaW5nIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChzZXJ2ZXIsCisgICAgaW50ZXJjZXB0b3JzOiBuZXdbXSB7IEF1dGguU2lnVjRBdXRoKCJzZXJ2aWNlLXJlZ2lvbiIsICJzZXJ2aWNlLW5hbWUiKSB9KTsKKy0tLS0KKworSWYgeW91IGF1dGhlbnRpY2F0ZSB0byBhIHJlbW90ZSA8PGNvbm5lY3RpbmctZ3JlbWxpbi1zZXJ2ZXIsR3JlbWxpbiBTZXJ2ZXI+PiBvcgorPDxjb25uZWN0aW5nLXJncCxSZW1vdGUgR3JlbWxpbiBQcm92aWRlcj4+LCB0aGlzIHNlcnZlciBub3JtYWxseSBoYXMgU1NMIGFjdGl2YXRlZCBhbmQgdGhlIEhUVFAgdXJsIHdpbGwgc3RhcnQKK3dpdGggJ2h0dHBzOi8vJy4KKwogU29tZSBjb25uZWN0aW9uIG9wdGlvbnMgY2FuIGFsc28gYmUgc2V0IG9uIGluZGl2aWR1YWwgcmVxdWVzdHMgdXNpbmcgdGhlIGBXaXRoKClgIHN0ZXAgb24gdGhlIGBUcmF2ZXJzYWxTb3VyY2VgLgogRm9yIGluc3RhbmNlIHRvIHNldCByZXF1ZXN0IHRpbWVvdXQgdG8gNTAwIG1pbGxpc2Vjb25kczoKIApAQCAtMjE1MCw5ICsyMTI0LDkgQEAKIHZhciBsID0gZy5XaXRoKFRva2Vucy5BcmdzRXZhbFRpbWVvdXQsIDUwMCkuVigpLk91dCgia25vd3MiKS5Db3VudCgpLlRvTGlzdCgpOwogLS0tLQogCi1UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBpbiB0aGlzIGZhc2hpb246IGBiYXRjaFNpemVgLCBgcmVxdWVzdElkYCwgYHVzZXJBZ2VudGAgYW5kCi1gZXZhbHVhdGlvblRpbWVvdXRgIChmb3JtZXJseSBgc2NyaXB0RXZhbHVhdGlvblRpbWVvdXRgIHdoaWNoIGlzIGFsc28gc3VwcG9ydGVkIGJ1dCBub3cgZGVwcmVjYXRlZCkuIFRoZXNlIG9wdGlvbnMgYXJlCi1hdmFpbGFibGUgYXMgY29uc3RhbnRzIG9uIHRoZSBgR3JlbWxpbi5OZXQuRHJpdmVyLlRva2Vuc2AgY2xhc3MuCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBpbiB0aGlzIGZhc2hpb246IGBiYXRjaFNpemVgLCBgdXNlckFnZW50YCwKK2BtYXRlcmlhbGl6ZVByb3BlcnRpZXNgLCBhbmQgYGV2YWx1YXRpb25UaW1lb3V0YC4gVGhlc2Ugb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBvbiB0aGUKK2BHcmVtbGluLk5ldC5Ecml2ZXIuVG9rZW5zYCBjbGFzcy4KIAogW1tncmVtbGluLWRvdG5ldC1pbXBvcnRzXV0KID09PSBDb21tb24gSW1wb3J0cwpAQCAtMjE2OCw3ICsyMTQyLDcgQEAKIFtbZ3JlbWxpbi1kb3RuZXQtY29uZmlndXJhdGlvbl1dCiA9PT0gQ29uZmlndXJhdGlvbgogCi1UaGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgR3JlbWxpbi5OZXQgZHJpdmVyIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGBHcmVtbGluU2VydmVyYCBpbnN0YW5jZSBhcyBrZXl3b3JkIGFyZ3VtZW50czoKK1RoZSBgR3JlbWxpblNlcnZlcmAgY2xhc3MgZGVmaW5lcyB0aGUgc2VydmVyIGVuZHBvaW50OgogCiBbd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsXjIiLG9wdGlvbnM9ImhlYWRlciJdCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMTc2LDQ0ICsyMTUwLDQzIEBACiB8aG9zdG5hbWUgfFRoZSBob3N0bmFtZSB0aGF0IHRoZSBkcml2ZXIgd2lsbCBjb25uZWN0IHRvLiB8bG9jYWxob3N0CiB8cG9ydCB8VGhlIHBvcnQgb24gd2hpY2ggR3JlbWxpbiBTZXJ2ZXIgY2FuIGJlIHJlYWNoZWQuIHw4MTgyCiB8ZW5hYmxlU3NsIHxEZXRlcm1pbmVzIGlmIFNTTCBzaG91bGQgYmUgZW5hYmxlZCBvciBub3QuIElmIGVuYWJsZWQgb24gdGhlIHNlcnZlciB0aGVuIGl0IG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgY2xpZW50LiB8ZmFsc2UKLXx1c2VybmFtZSB8VGhlIHVzZXJuYW1lIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIHxfbm9uZV8KLXxwYXNzd29yZCB8VGhlIHBhc3N3b3JkIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIHxfbm9uZV8KK3xwYXRoIHxUaGUgcGF0aCB0byB0aGUgR3JlbWxpbiBlbmRwb2ludCBvbiB0aGUgc2VydmVyLiB8L2dyZW1saW4KIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotPT09PSBDb25uZWN0aW9uIFBvb2wKKz09PT0gQ29ubmVjdGlvbiBTZXR0aW5ncwogCi1JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNvbmZpZ3VyZSB0aGUgYENvbm5lY3Rpb25Qb29sYCBvZiB0aGUgR3JlbWxpbi5OZXQgZHJpdmVyLgotVGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGNhbiBiZSBzZXQgYXMgcHJvcGVydGllcwotb24gdGhlIGBDb25uZWN0aW9uUG9vbFNldHRpbmdzYCBpbnN0YW5jZSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGBHcmVtbGluQ2xpZW50YDoKK1RoZSBIVFRQIGNvbm5lY3Rpb24gY2FuIGJlIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgYENvbm5lY3Rpb25TZXR0aW5nc2AgY2xhc3MsIHdoaWNoIGlzIHBhc3NlZCB0byB0aGUgYEdyZW1saW5DbGllbnRgCitjb25zdHJ1Y3RvcjoKIAogW3dpZHRoPSIxMDAlIixjb2xzPSIzLDEwLF4yIixvcHRpb25zPSJoZWFkZXIiXQogfD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogfEtleSB8RGVzY3JpcHRpb24gfERlZmF1bHQKLXxQb29sU2l6ZSB8VGhlIHNpemUgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbC4gfDQKLXxNYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uIHxUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIHRoYXQgY2FuIG9jY3VyIG9uIGEgY29ubmVjdGlvbi4gfDMyCi18UmVjb25uZWN0aW9uQXR0ZW1wdHMgfFRoZSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gZ2V0IGFuIG9wZW4gY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sIHRvIHN1Ym1pdCBhIHJlcXVlc3QuIHw0Ci18UmVjb25uZWN0aW9uQmFzZURlbGF5IHxUaGUgYmFzZSBkZWxheSB1c2VkIGZvciB0aGUgZXhwb25lbnRpYWwgYmFja29mZiBmb3IgdGhlIHJlY29ubmVjdGlvbiBhdHRlbXB0cy4gfDEgcwotfEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCB8RW5hYmxlcyBzZW5kaW5nIGEgdXNlciBhZ2VudCB0byB0aGUgc2VydmVyIGR1cmluZyBjb25uZWN0aW9uIHJlcXVlc3RzLgorfENvbm5lY3Rpb25UaW1lb3V0IHxUaGUgVENQIGNvbm5lY3Rpb24gdGltZW91dC4gfDE1IHMKK3xJZGxlQ29ubmVjdGlvblRpbWVvdXQgfEhvdyBsb25nIGlkbGUgY29ubmVjdGlvbnMgc3RheSBpbiB0aGUgcG9vbCBiZWZvcmUgYmVpbmcgY2xvc2VkLiB8MTgwIHMKK3xNYXhDb25uZWN0aW9uc1BlclNlcnZlciB8VGhlIG1heGltdW0gY29uY3VycmVudCBjb25uZWN0aW9ucyB0byBhIHNpbmdsZSBzZXJ2ZXIuIHwxMjgKK3xLZWVwQWxpdmVJbnRlcnZhbCB8VGhlIFRDUCBrZWVwLWFsaXZlIHByb2JlIGludGVydmFsLiB8MzAgcworfEVuYWJsZUNvbXByZXNzaW9uIHxXaGV0aGVyIHRvIHJlcXVlc3QgZGVmbGF0ZSBjb21wcmVzc2lvbi4gfGZhbHNlCit8RW5hYmxlVXNlckFnZW50T25Db25uZWN0IHxFbmFibGVzIHNlbmRpbmcgYSB1c2VyIGFnZW50IHRvIHRoZSBzZXJ2ZXIgb24gcmVxdWVzdHMuCiBNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHByb3ZpZGVyIGRvY3MKIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L2Rldi9wcm92aWRlci8jX2dyYXBoX2RyaXZlcl9wcm92aWRlcl9yZXF1aXJlbWVudHNbaGVyZV0ufHRydWUKK3xCdWxrUmVzdWx0cyB8V2hldGhlciB0byBzZW5kIHRoZSBidWxrUmVzdWx0cyBoZWFkZXIgb24gYWxsIHJlcXVlc3RzLiB8ZmFsc2UKK3xTa2lwQ2VydGlmaWNhdGVWYWxpZGF0aW9uIHxXaGV0aGVyIHRvIHNraXAgU1NMIGNlcnRpZmljYXRlIHZhbGlkYXRpb24uIE9ubHkgdXNlIGZvciB0ZXN0aW5nIHdpdGggc2VsZi1zaWduZWQgY2VydGlmaWNhdGVzLiB8ZmFsc2UKIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotQSBgTm9Db25uZWN0aW9uQXZhaWxhYmxlRXhjZXB0aW9uYCBpcyB0aHJvd24gaWYgYWxsIGNvbm5lY3Rpb25zIGhhdmUgcmVhY2hlZCB0aGUgYE1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb25gIGxpbWl0Ci13aGVuIGEgbmV3IHJlcXVlc3QgY29tZXMgaW4uCi1BIGBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbmAgaXMgdGhyb3duIGlmIG5vIGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBzZXJ2ZXIgdG8gc3VibWl0IGEgcmVxdWVzdCBhZnRlcgotYFJlY29ubmVjdGlvbkF0dGVtcHRzYCByZXRyaWVzLgorPT09PSBHcmVtbGluQ2xpZW50IFNldHRpbmdzCiAKLT09PT0gV2ViU29ja2V0IENvbmZpZ3VyYXRpb24KK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBjYW4gYmUgcGFzc2VkIHRvIHRoZSBgR3JlbWxpbkNsaWVudGAgY29uc3RydWN0b3I6CiAKLVRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbnMgY2FuIGFsc28gYmUgY29uZmlndXJlZCwgZGlyZWN0bHkgYXMgcGFyYW1ldGVycyBvZiB0aGUgYEdyZW1saW5DbGllbnRgIGNvbnN0cnVjdG9yLiBJdCB0YWtlcwotYW4gb3B0aW9uYWwgZGVsZWdhdGUgYHdlYlNvY2tldENvbmZpZ3VyYXRpb25gIHRoYXQgd2lsbCBiZSBpbnZva2VkIGZvciBlYWNoIGNvbm5lY3Rpb24uIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8KLWNvbmZpZ3VyZSBtb3JlIGFkdmFuY2VkIG9wdGlvbnMgbGlrZSB0aGUgYEtlZXBBbGl2ZUludGVydmFsYCBvciBjbGllbnQgY2VydGlmaWNhdGVzLgotCi1TdGFydGluZyB3aXRoIC5ORVQgNiwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgY29tcHJlc3Npb24gZm9yIFdlYlNvY2tldHMuIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHN0YXJ0aW5nIHdpdGgKLVRpbmtlclBvcCAzLjUuMyAoYWdhaW4sIG9ubHkgb24gLk5FVCA2IG9yIGhpZ2hlcikuIE5vdGUgdGhhdCBjb21wcmVzc2lvbiBtaWdodCBtYWtlIGFuIGFwcGxpY2F0aW9uIHN1c2NlcHRpYmxlIHRvCi1hdHRhY2tzIGxpa2UgQ1JJTUUvQlJFQUNILiBDb21wcmVzc2lvbiBzaG91bGQgdGhlcmVmb3JlIGJlIHR1cm5lZCBvZmYgaWYgdGhlIGFwcGxpY2F0aW9uIHNlbmRzIHNlbnNpdGl2ZSBkYXRhIHRvIHRoZQotc2VydmVyIGFzIHdlbGwgYXMgZGF0YSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGNvbnRyb2xsZWQgYnkgYW4gdW50cnVzdGVkIHVzZXIuIENvbXByZXNzaW9uIGNhbiBiZSBkaXNhYmxlZCB2aWEgdGhlCi1gZGlzYWJsZUNvbXByZXNzaW9uYCBwYXJhbWV0ZXIuCitbd2lkdGg9IjEwMCUiLGNvbHM9IjMsMTAsXjIiLG9wdGlvbnM9ImhlYWRlciJdCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit8S2V5IHxEZXNjcmlwdGlvbiB8RGVmYXVsdAorfG1lc3NhZ2VTZXJpYWxpemVyIHxBIHNpbmdsZSBgSU1lc3NhZ2VTZXJpYWxpemVyYCB1c2VkIGZvciBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlLiB8YEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyYAorfHJlcXVlc3RTZXJpYWxpemVyIHxUaGUgc2VyaWFsaXplciBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuIFdoZW4gYG51bGxgLCBpbnRlcmNlcHRvcnMgbXVzdCBzZXJpYWxpemUgdGhlIGJvZHkuIHxgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXJgCit8cmVzcG9uc2VTZXJpYWxpemVyIHxUaGUgc2VyaWFsaXplciBmb3IgaW5jb21pbmcgcmVzcG9uc2VzLiBBbHdheXMgcmVxdWlyZWQuIHxgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXJgCit8Y29ubmVjdGlvblNldHRpbmdzIHxUaGUgYENvbm5lY3Rpb25TZXR0aW5nc2AgZm9yIHRoZSBIVFRQIGNvbm5lY3Rpb24uIHxkZWZhdWx0IGBDb25uZWN0aW9uU2V0dGluZ3NgCit8bG9nZ2VyRmFjdG9yeSB8QW4gYElMb2dnZXJGYWN0b3J5YCBmb3IgbG9nZ2luZy4gfGBOdWxsTG9nZ2VyRmFjdG9yeWAKK3xpbnRlcmNlcHRvcnMgfEEgbGlzdCBvZiBgRnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+YCB0aGF0IG1vZGlmeSBIVFRQIHJlcXVlc3RzIGJlZm9yZSBzZW5kaW5nLiB8X25vbmVfCit8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFtbZ3JlbWxpbi1kb3RuZXQtbG9nZ2luZ11dCiA9PT0gTG9nZ2luZwpAQCAtMjIyOSwyMCArMjIwMiwxMiBAQAogW1tncmVtbGluLWRvdG5ldC1zZXJpYWxpemF0aW9uXV0KID09PSBTZXJpYWxpemF0aW9uCiAKLVRoZSBHcmVtbGluLk5ldCBkcml2ZXIgdXNlcyBieSBkZWZhdWx0IEdyYXBoQmluYXJ5IGJ1dCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhbm90aGVyIHNlcmlhbGl6YXRpb24gZm9ybWF0IGJ5IHBhc3NpbmcgYSBtZXNzYWdlIHNlcmlhbGl6ZXIgd2hlbiBjcmVhdGluZyB0aGUgYEdyZW1saW5DbGllbnRgLgotCi1HcmFwaFNPTiAzLjAgY2FuIGJlIGNvbmZpZ3VyZWQgbGlrZSB0aGlzOgorVGhlIEdyZW1saW4uTmV0IGRyaXZlciB1c2VzIEdyYXBoQmluYXJ5IDQuMCBieSBkZWZhdWx0LiBBIGN1c3RvbSBzZXJpYWxpemVyIGNhbiBiZSBwcm92aWRlZCB3aGVuIGNyZWF0aW5nIHRoZQorYEdyZW1saW5DbGllbnRgLiBUaGUgZHJpdmVyIHN1cHBvcnRzIHNlcGFyYXRlIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHNlcmlhbGl6ZXJzLCBvciBhIHNpbmdsZSBzZXJpYWxpemVyIGZvciBib3RoOgogCiBbc291cmNlLGNzaGFycF0KIC0tLS0KLWluY2x1ZGU6Oi4uLy4uLy4uL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5WYXJpYW50c1Rlc3RzLmNzW3RhZ3M9c2VyaWFsaXphdGlvbkdyYXBoU29uM10KLS0tLS0KLQotYW5kIEdyYXBoU09OIDIuMCBsaWtlIHRoaXM6Ci0KLVtzb3VyY2UsY3NoYXJwXQotLS0tLQotaW5jbHVkZTo6Li4vLi4vLi4vZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9SZWZlcmVuY2UvR3JlbWxpblZhcmlhbnRzVGVzdHMuY3NbdGFncz1zZXJpYWxpemF0aW9uR3JhcGhTb25dCitpbmNsdWRlOjouLi8uLi8uLi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9HcmVtbGluVmFyaWFudHNUZXN0cy5jc1t0YWdzPXNlcmlhbGl6YXRpb25CaW5hcnldCiAtLS0tCiAKIFtbZ3JlbWxpbi1kb3RuZXQtc3RyYXRlZ2llc11dCkBAIC0yMjU4LDQ0ICsyMjIzLDI2IEBACiAKIE5PVEU6IE1hbnkgb2YgdGhlIFRyYXZlcnNhbFN0cmF0ZWd5IGNsYXNzZXMgaW4gR3JlbWxpbi5OZXQgYXJlIHByb3hpZXMgdG8gdGhlIHJlc3BlY3RpdmUgc3RyYXRlZ3kgb24gQXBhY2hlIFRpbmtlclBvcOKAmXMKIEpWTS1iYXNlZCBHcmVtbGluIHRyYXZlcnNhbCBtYWNoaW5lLiBBcyBzdWNoLCB0aGVpciBgQXBwbHkoSVRyYXZlcnNhbClgIG1ldGhvZCBkb2VzIG5vdGhpbmcuIEhvd2V2ZXIsIHRoZSBzdHJhdGVneSBpcwotZW5jb2RlZCBpbiB0aGUgR3JlbWxpbi5OZXQgYnl0ZWNvZGUgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBHcmVtbGluIHRyYXZlcnNhbCBtYWNoaW5lIGZvciByZS1jb25zdHJ1Y3Rpb24gbWFjaGluZS1zaWRlLgorZW5jb2RlZCBpbiB0aGUgR3JlbWxpbi5OZXQgR3JlbWxpbkxhbmcgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBHcmVtbGluIHRyYXZlcnNhbCBtYWNoaW5lIGZvciByZS1jb25zdHJ1Y3Rpb24gbWFjaGluZS1zaWRlLgogCiBbW2dyZW1saW4tZG90bmV0LXRyYW5zYWN0aW9uc11dCiA9PT0gVHJhbnNhY3Rpb25zCiAKLVRvIGdldCBhIGZ1bGwgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHNlY3Rpb24sIGl0IHdvdWxkIGJlIGdvb2QgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgPDx0cmFuc2FjdGlvbnMsVHJhbnNhY3Rpb25zPj4KLXNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudGF0aW9uLCB3aGljaCBkaXNjdXNzZXMgdHJhbnNhY3Rpb25zIGluIHRoZSBnZW5lcmFsIGNvbnRleHQgb2YgVGlua2VyUG9wIGl0c2VsZi4gVGhpcyBzZWN0aW9uCi1idWlsZHMgb24gdGhhdCBjb250ZW50IGJ5IGRlbW9uc3RyYXRpbmcgdGhlIHRyYW5zYWN0aW9uYWwgc3ludGF4IGZvciBDIy4KK0lNUE9SVEFOVDogVHJhbnNhY3Rpb24gc3VwcG9ydCBvdmVyIEhUVFAgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBHcmVtbGluLk5ldC4gVGhpcyB3aWxsIGJlIGFkZHJlc3NlZCBieSB0aGUgb2ZmaWNpYWwKKzQuMC4wIHJlbGVhc2UuCisKK1tbZ3JlbWxpbi1kb3RuZXQtZ3ZhbHVlXV0KKz09PSBHVmFsdWUgUGFyYW1ldGVyaXphdGlvbgorCitBIGBHVmFsdWVgIGlzIGFuIGVuY2Fwc3VsYXRpb24gb2YgYSBwYXJhbWV0ZXIgbmFtZSBhbmQgdmFsdWUuIEEgPDx0cmF2ZXJzYWwtcGFyYW1ldGVyaXphdGlvbixzdWJzZXQgb2YgZ3JlbWxpbiBzdGVwcz4+CithcmUgYWJsZSB0byBhY2NlcHQgR1ZhbHVlcy4gV2hlbiBjb25zdHJ1Y3RpbmcgYSBgR3JhcGhUcmF2ZXJzYWxgIHdpdGggc3VjaCBzdGVwcyBpbiBDIywgYSBHVmFsdWUgbWF5IGJlIHBhc3NlZCBpbgordGhlIHRyYXZlcnNhbCB0byB1dGlsaXplIGEgcGFyYW1ldGVyIGluIHBsYWNlIG9mIGEgbGl0ZXJhbC4KIAogW3NvdXJjZSxjc2hhcnBdCiAtLS0tCi1pbmNsdWRlOjouLi8uLi8uLi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9HcmVtbGluVmFyaWFudHNUZXN0cy5jc1t0YWdzPXRyYW5zYWN0aW9uc10KK2cuVigpLkhhcygibmFtZSIsIG5ldyBHVmFsdWU8c3RyaW5nPigibmFtZSIsICJtYXJrbyIpKTsKIC0tLS0KIAotW1tncmVtbGluLWRvdG5ldC1sYW1iZGFdXQotPT09IFRoZSBMYW1iZGEgU29sdXRpb24KLQotU3VwcG9ydGluZyBsaW5rOmh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Fub255bW91c19mdW5jdGlvblthbm9ueW1vdXMgZnVuY3Rpb25zXSBhY3Jvc3MgbGFuZ3VhZ2VzIGlzIGRpZmZpY3VsdCBhcwotbW9zdCBsYW5ndWFnZXMgZG8gbm90IHN1cHBvcnQgbGFtYmRhIGludHJvc3BlY3Rpb24gYW5kIHRodXMsIGNvZGUgYW5hbHlzaXMuIFdoaWxlIEdyZW1saW4uTmV0IGRvZXNuJ3Qgc3VwcG9ydCBDIyBsYW1iZGFzLCBpdAotaXMgc3RpbGwgYWJsZSB0byByZXByZXNlbnQgbGFtYmRhcyBpbiBvdGhlciBsYW5ndWFnZXMuIFdoZW4gdGhlIGxhbWJkYSBpcyByZXByZXNlbnRlZCBpbiBgQnl0ZWNvZGVgIGl0cyBsYW5ndWFnZSBpcyBlbmNvZGVkCi1zdWNoIHRoYXQgdGhlIHJlbW90ZSBjb25uZWN0aW9uIGhvc3QgY2FuIGluZmVyIHdoaWNoIHRyYW5zbGF0b3IgYW5kIHVsdGltYXRlIGV4ZWN1dGlvbiBlbmdpbmUgdG8gdXNlLgotCi1bc291cmNlLGNzaGFycF0KLS0tLS0KLWcuVigpLk91dCgpLk1hcDxpbnQ+KExhbWJkYS5Hcm9vdnkoIml0LmdldCgpLnZhbHVlKCduYW1lJykubGVuZ3RoKCkiKSkuU3VtPGludD4oKS5Ub0xpc3QoKTsgICAgICA8MT4KLWcuVigpLk91dCgpLk1hcDxpbnQ+KExhbWJkYS5QeXRob24oImxhbWJkYSB4OiBsZW4oeC5nZXQoKS52YWx1ZSgnbmFtZScpKSIpKS5TdW08aW50PigpLlRvTGlzdCgpOyA8Mj4KLS0tLS0KLQotPDE+IGBMYW1iZGEuR3Jvb3Z5KClgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIEdyb292eSBsYW1iZGEuCi08Mj4gYExhbWJkYS5QeXRob24oKWAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgUHl0aG9uIGxhbWJkYS4KLQotVGhlIGBJTGFtYmRhYCBpbnRlcmZhY2UgcmV0dXJuZWQgYnkgdGhlc2UgdHdvIG1ldGhvZHMgaW5oZXJpdHMgaW50ZXJmYWNlcyBsaWtlIGBJRnVuY3Rpb25gIGFuZCBgSVByZWRpY2F0ZWAgdGhhdCBtaXJyb3IKLXRoZWlyIEphdmEgY291bnRlcnBhcnRzIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHVzZSBsYW1iZGFzIHdpdGggR3JlbWxpbi5OZXQgZm9yIHRoZSBzYW1lIHN0ZXBzIGFzIGluIEdyZW1saW4tSmF2YS4KLQotVElQOiBXaGVuIHJ1bm5pbmcgaW50byBzaXR1YXRpb25zIHdoZXJlIEdyb292eSBjYW5ub3QgcHJvcGVybHkgZGlzY2VybiBhIG1ldGhvZCBzaWduYXR1cmUgYmFzZWQgb24gdGhlIGBMYW1iZGFgCi1pbnN0YW5jZSBjcmVhdGVkLCBpdCB3aWxsIGhlbHAgdG8gZnVsbHkgZGVmaW5lIHRoZSBjbG9zdXJlIGluIHRoZSBsYW1iZGEgZXhwcmVzc2lvbiAtIHNvIHJhdGhlciB0aGFuCi1gTGFtYmRhLkdyb292eSgiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKSlgLCBwcmVmZXIgYExhbWJkYS5Hcm9vdnkoInggLT4geC5nZXQoKS52YWx1ZSgnbmFtZScpKWAuCi0KIFtbZ3JlbWxpbi1kb3RuZXQtc2NyaXB0c11dCiA9PT0gU3VibWl0dGluZyBTY3JpcHRzCiAKQEAgLTIzMDYsMjQgKzIyNTMsMTYgQEAKIGluY2x1ZGU6Oi4uLy4uLy4uL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5WYXJpYW50c1Rlc3RzLmNzW3RhZ3M9c3VibWl0dGluZ1NjcmlwdHNdCiAtLS0tCiAKLUlmIHRoZSByZW1vdGUgc3lzdGVtIGhhcyBhdXRoZW50aWNhdGlvbiBhbmQgU1NMIGVuYWJsZWQsIHRoZW4gdGhlIGBHcmVtbGluU2VydmVyYCBvYmplY3QgY2FuIGJlIGNvbmZpZ3VyZWQgYXMgZm9sbG93czoKK0F1dGhlbnRpY2F0aW9uIGlzIGhhbmRsZWQgdGhyb3VnaCByZXF1ZXN0IGludGVyY2VwdG9ycy4gRm9yIGJhc2ljIGF1dGhlbnRpY2F0aW9uIHdpdGggU1NMOgogCiBbc291cmNlLGNzaGFycF0KIC0tLS0KIGluY2x1ZGU6Oi4uLy4uLy4uL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5WYXJpYW50c1Rlc3RzLmNzW3RhZ3M9c3VibWl0dGluZ1NjcmlwdHNXaXRoQXV0aGVudGljYXRpb25dCiAtLS0tCiAKLUl0IGlzIGFsc28gcG9zc2libGUgdG8gaW5pdGlhbGl6ZSB0aGUgYENsaWVudGAgdG8gdXNlIDw8c2Vzc2lvbnMsc2Vzc2lvbnM+PjoKLQotW3NvdXJjZSxjc2hhcnBdCi0tLS0tCi12YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyKTsKLXZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyLCBzZXNzaW9uSWQ6IEd1aWQuTmV3R3VpZCgpLlRvU3RyaW5nKCkpKQotLS0tLQotCiA9PT09IFBlciBSZXF1ZXN0IFNldHRpbmdzCiAKLVRoZSBgR3JlbWxpbkNsaWVudC5TdWJtaXQoKWAgZnVuY3Rpb25zIGFjY2VwdCBhbiBvcHRpb24gdG8gYnVpbGQgYSByYXcgYFJlcXVlc3RNZXNzYWdlYC4gQSBnb29kIHVzZS1jYXNlIGZvciB0aGlzCitBIGBSZXF1ZXN0TWVzc2FnZWAgY2FuIGJlIGJ1aWx0IHdpdGggYWRkaXRpb25hbCBmaWVsZHMgdXNpbmcgdGhlIGJ1aWxkZXIgcGF0dGVybi4gQSBnb29kIHVzZS1jYXNlIGZvciB0aGlzCiBmZWF0dXJlIGlzIHRvIHNldCBhIHBlci1yZXF1ZXN0IG92ZXJyaWRlIHRvIHRoZSBgZXZhbHVhdGlvblRpbWVvdXRgIHNvIHRoYXQgaXQgb25seSBhcHBsaWVzIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QuCiAKIFtzb3VyY2UsY3NoYXJwXQpAQCAtMjMzMSwxMyArMjI3MCwyNCBAQAogaW5jbHVkZTo6Li4vLi4vLi4vZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9SZWZlcmVuY2UvR3JlbWxpblZhcmlhbnRzVGVzdHMuY3NbdGFncz1zdWJtaXR0aW5nU2NyaXB0c1dpdGhUaW1lb3V0XQogLS0tLQogCi1UaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBpbiB0aGlzIGZhc2hpb246IGBiYXRjaFNpemVgLCBgcmVxdWVzdElkYCwgYHVzZXJBZ2VudGAsIGBtYXRlcmlhbGl6ZVByb3BlcnRpZXNgIGFuZAotYGV2YWx1YXRpb25UaW1lb3V0YCAoZm9ybWVybHkgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBidXQgbm93IGRlcHJlY2F0ZWQpLiBUaGVzZSBvcHRpb25zIGFyZQotYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBvbiB0aGUgYEdyZW1saW4uTmV0LkRyaXZlci5Ub2tlbnNgIGNsYXNzLgorVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhbGxvd2VkIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgaW4gdGhpcyBmYXNoaW9uOiBgYmF0Y2hTaXplYCwgYHVzZXJBZ2VudGAsIGBtYXRlcmlhbGl6ZVByb3BlcnRpZXNgCithbmQgYGV2YWx1YXRpb25UaW1lb3V0YC4gVGhlc2Ugb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBvbiB0aGUgYEdyZW1saW4uTmV0LkRyaXZlci5Ub2tlbnNgIGNsYXNzLgogCi1JTVBPUlRBTlQ6IFRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBzZXR0aW5nIGEgcGVyLXJlcXVlc3QgdGltZW91dCBmb3Igc2NyaXB0cyBpcyBkZW1vbnN0cmF0ZWQgYWJvdmUsIGJ1dCB0aG9zZSBmYW1pbGlhcgotd2l0aCBieXRlY29kZSBtYXkgdHJ5IGBnLndpdGgoRVZBTFVBVElPTl9USU1FT1VULCA1MDApYCB3aXRoaW4gYSBzY3JpcHQuIFNjcmlwdHMgd2l0aCBtdWx0aXBsZSB0cmF2ZXJzYWxzIGFuZCBtdWx0aXBsZQotdGltZW91dHMgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIHN1bSBvZiBhbGwgdGltZW91dHMgaWRlbnRpZmllZCBpbiB0aGUgc2NyaXB0IGZvciB0aGF0IHJlcXVlc3QuCis9PT09IFJlcXVlc3QgSW50ZXJjZXB0b3JzCisKK1RoZSBgR3JlbWxpbkNsaWVudGAgc3VwcG9ydHMgcmVxdWVzdCBpbnRlcmNlcHRvcnMgdGhhdCBjYW4gbW9kaWZ5IHRoZSBIVFRQIHJlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQuIEVhY2ggaW50ZXJjZXB0b3IKK3JlY2VpdmVzIGEgbXV0YWJsZSBgSHR0cFJlcXVlc3RDb250ZXh0YCBhbmQgY2FuIG1vZGlmeSBoZWFkZXJzLCBib2R5LCBVUkksIGFuZCBtZXRob2QuIEludGVyY2VwdG9ycyBhcmUgZXhlY3V0ZWQgaW4KK29yZGVyIGFuZCBhcmUgdXNlZnVsIGZvciBhdXRoZW50aWNhdGlvbiwgY3VzdG9tIGhlYWRlcnMsIG9yIHJlcXVlc3Qgc2lnbmluZy4KKworW3NvdXJjZSxjc2hhcnBdCistLS0tCit2YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoImxvY2FsaG9zdCIsIDgxODIpLAorICAgIGludGVyY2VwdG9yczogbmV3W10geyBBdXRoLkJhc2ljQXV0aCgidXNlcm5hbWUiLCAicGFzc3dvcmQiKSB9KTsKKy0tLS0KKworV2hlbiBgcmVxdWVzdFNlcmlhbGl6ZXJgIGlzIHNldCB0byBgbnVsbGAsIHRoZSByZXF1ZXN0IGJvZHkgaXMgcGFzc2VkIGFzIGEgYFJlcXVlc3RNZXNzYWdlYCB0byBpbnRlcmNlcHRvcnMsIGFuZCBhbgoraW50ZXJjZXB0b3IgaXMgcmVzcG9uc2libGUgZm9yIHNlcmlhbGl6aW5nIGl0IHRvIGBieXRlW11gIGFuZCBzZXR0aW5nIHRoZSBgQ29udGVudC1UeXBlYCBoZWFkZXIuIFRoaXMgZm9sbG93cyB0aGUKK1B5dGhvbiBkcml2ZXIncyBgcmVxdWVzdF9zZXJpYWxpemVyPU5vbmVgIHBhdHRlcm4gYW5kIGlzIHVzZWZ1bCBmb3IgY3VzdG9tIHNlcmlhbGl6YXRpb24gd29ya2Zsb3dzLgogCiBhbmNob3I6Z3JlbWxpbi1uZXQtZHNsW10KIFtbZ3JlbWxpbi1kb3RuZXQtZHNsXV0KQEAgLTI0NDksNiArMjM5OSwxNCBAQAogKiBUaGUgYHN1YmdyYXBoKClgLXN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBhbnkgdmFyaWFudCB0aGF0IGlzIG5vdCBydW5uaW5nIG9uIHRoZSBKYXZhIFZpcnR1YWwgTWFjaGluZSBhcyB0aGVyZSBpcwogbm8gYEdyYXBoYCBpbnN0YW5jZSB0byBkZXNlcmlhbGl6ZSBhIHJlc3VsdCBpbnRvIG9uIHRoZSBjbGllbnQtc2lkZS4gQSB3b3JrYXJvdW5kIGlzIHRvIHJlcGxhY2UgdGhlIHN0ZXAgd2l0aAogYGFnZ3JlZ2F0ZShsb2NhbClgIGFuZCB0aGVuIGNvbnZlcnQgdGhvc2UgcmVzdWx0cyB0byBzb21ldGhpbmcgdGhlIGNsaWVudCBjYW4gdXNlIGxvY2FsbHkuCisqIGBEYXRlVGltZU9mZnNldGAgY2Fubm90IHJlcHJlc2VudCB0aGUgZXh0cmVtZSB2YWx1ZXMgb2YgR3JlbWxpbidzIGBPZmZzZXREYXRlVGltZWAgbWF4aW11bSBhbmQgbWluaW11bSwKK3NvIG9mZnNldCBkYXRlLXRpbWUgdmFsdWVzIGF0IHRob3NlIGJvdW5kYXJpZXMgd2lsbCBmYWlsIHRvIGRlc2VyaWFsaXplLgorKiBHcmVtbGluJ3MgYER1cmF0aW9uYCB0eXBlIGhhcyBhIG11Y2ggbGFyZ2VyIHJhbmdlIHRoYW4gQyMncyBgVGltZVNwYW5gLCBzbyBleHRyZW1lIGR1cmF0aW9uIHZhbHVlcyAoc3VjaCBhcworYER1cmF0aW9uLkZPUkVWRVJgKSB0aGF0IGV4Y2VlZCBgVGltZVNwYW4uTWF4VmFsdWVgIG9yIGBUaW1lU3Bhbi5NaW5WYWx1ZWAgd2lsbCBmYWlsIHRvIGRlc2VyaWFsaXplLgorKiBHcmVtbGluJ3MgYEJpZ0RlY2ltYWxgIHN1cHBvcnRzIHVwIHRvIDMzIGRpZ2l0cyBvZiBwcmVjaXNpb24gd2hpbGUgQyMncyBgZGVjaW1hbGAgdHlwZSBpcyBsaW1pdGVkIHRvIDI4LTI5CitzaWduaWZpY2FudCBkaWdpdHMsIHNvIGhpZ2gtcHJlY2lzaW9uIHZhbHVlcyBtYXkgbG9zZSBhY2N1cmFjeSBvciBmYWlsIHRvIGRlc2VyaWFsaXplLgorKiBDIyBgRGljdGlvbmFyeWAgZG9lcyBub3QgYWxsb3cgYG51bGxgIGtleXMsIHNvIGBNYXBgIHJlc3VsdHMgd2l0aCBgbnVsbGAga2V5cyAoZS5nLiBmcm9tIGBncm91cCgpYCBvcgorYGdyb3VwQ291bnQoKWAgb24gYSBtaXNzaW5nIHByb3BlcnR5KSB3aWxsIGZhaWwgZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KIAogYW5jaG9yOmdyZW1saW4tZG90bmV0LXRlbXBsYXRlW10KIGFuY2hvcjpkb3RuZXQtYXBwbGljYXRpb24tZXhhbXBsZXNbXQpAQCAtMjU1MSw3ICsyNTA5LDYgQEAKIFtzb3VyY2UsYmFzaF0KIC0tLS0KIHBpcCBpbnN0YWxsIGdyZW1saW5weXRob24KLXBpcCBpbnN0YWxsIGdyZW1saW5weXRob25ba2VyYmVyb3NdICAgICAjIE9wdGlvbmFsLCBub3QgYXZhaWxhYmxlIG9uIE1pY3Jvc29mdCBXaW5kb3dzCiAtLS0tCiAKIFRoZSBmb2xsb3dpbmcgdGFibGUgb3V0bGluZXMgcmVjb21tZW5kZWQgcnVudGltZSB2ZXJzaW9ucyBieSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVpciBzdXBwb3J0IGJlZ2FuOgpAQCAtMjU3Nyw0MiArMjUzNCwzNiBAQAogCiBbc291cmNlLHB5dGhvbl0KIC0tLS0KLWcgPSB0cmF2ZXJzYWwoKS53aXRoXyhEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCdnJykpCitnID0gdHJhdmVyc2FsKCkud2l0aF8oRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCdnJykpCiAtLS0tCiAKLUlmIHlvdSBuZWVkIHRvIHNlbmQgYWRkaXRpb25hbCBoZWFkZXJzIGluIHRoZSB3ZWJzb2NrZXRzIGNvbm5lY3Rpb24sIHlvdSBjYW4gcGFzcyBhbiBvcHRpb25hbCBgaGVhZGVyc2AgcGFyYW1ldGVyCitJZiB5b3UgbmVlZCB0byBzZW5kIGFkZGl0aW9uYWwgaGVhZGVycyBpbiB0aGUgSFRUUCBjb25uZWN0aW9uLCB5b3UgY2FuIHBhc3MgYW4gb3B0aW9uYWwgYGhlYWRlcnNgIHBhcmFtZXRlcgogdG8gdGhlIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCBjb25zdHJ1Y3Rvci4KIAogW3NvdXJjZSxweXRob25dCiAtLS0tCiBnID0gdHJhdmVyc2FsKCkud2l0aF8oRHJpdmVyUmVtb3RlQ29ubmVjdGlvbigKLSAgICAnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgJ2cnLCBoZWFkZXJzPXsnSGVhZGVyJzonVmFsdWUnfSkpCisgICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgJ2cnLCBoZWFkZXJzPXsnSGVhZGVyJzonVmFsdWUnfSkpCiAtLS0tCiAKLUdyZW1saW4tUHl0aG9uIHN1cHBvcnRzIHBsYWluIHRleHQgYW5kIEtlcmJlcm9zIFNBU0wgYXV0aGVudGljYXRpb24sIHlvdSBjYW4gc2V0IGl0IG9uIHRoZSBjb25uZWN0aW9uIG9wdGlvbnMuCitHcmVtbGluLVB5dGhvbiBjb250YWlucyBhbiBgYXV0aGAgbW9kdWxlIHRoYXQgcHJvdmlkZXMgYnVpbHQtaW4gYXV0aGVudGljYXRpb24gZnVuY3Rpb25zLiBUaGVzZSBhcmUgcGFzc2VkIHRvIHRoZQorYGF1dGhgIHBhcmFtZXRlciBvZiBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgYW5kIGFkZCB0aGUgYXBwcm9wcmlhdGUgSFRUUCBoZWFkZXJzIHRvIGVhY2ggcmVxdWVzdC4gUGxhaW4gdGV4dCBhbmQKK1NpZ1Y0IGF1dGhlbnRpY2F0aW9uIGFyZSBwcm92aWRlZCBhcyBidWlsdC1pbiBvcHRpb25zLgogCiBbc291cmNlLHB5dGhvbl0KIC0tLS0KICMgUGxhaW4gdGV4dCBhdXRoZW50aWNhdGlvbgogZyA9IHRyYXZlcnNhbCgpLndpdGhfKERyaXZlclJlbW90ZUNvbm5lY3Rpb24oCi0gICAgJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsICdnJywgdXNlcm5hbWU9J3N0ZXBoZW4nLCBwYXNzd29yZD0ncGFzc3dvcmQnKSkKKyAgICAnaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCAnZycsIGF1dGg9YmFzaWMoJ3N0ZXBoZW4nLCAncGFzc3dvcmQnKSkpCiAKLSMgS2VyYmVyb3MgYXV0aGVudGljYXRpb24KKyMgU2lnVjQgYXV0aGVudGljYXRpb24KIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhEcml2ZXJSZW1vdGVDb25uZWN0aW9uKAotICAgICd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCAnZycsIGtlcmJlcml6ZWRfc2VydmljZT0nZ3JlbWxpbkBob3N0bmFtZS55b3VyLm9yZycpKQorICAgICdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsICdnJywgYXV0aD1zaWd2NCgnc2VydmljZS1yZWdpb24nLCAnc2VydmljZS1uYW1lJykpKQogLS0tLQogCi1UaGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUga2VyYmVyaXplZF9zZXJ2aWNlIHNob3VsZCBjb3JyZXNwb25kIHRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwcmluY2lwYWwgbmFtZSBjb25maWd1cmVkIGZvcgotdGhlIGdyZW1saW4gc2VydmljZSwgYnV0IHdpdGggdGhlIHNsYXNoIHJlcGxhY2VkIGJ5IGFuIF9hdF8gc2lnbi4gVGhlIEdyZW1saW4tUHl0aG9uIGNsaWVudCByZWFkcyB0aGUga2VyYmVyb3MKLWNvbmZpZ3VyYXRpb25zIGZyb20geW91ciBzeXN0ZW0uIEl0IGZpbmRzIHRoZSBLREMncyBob3N0bmFtZSBhbmQgcG9ydCBmcm9tIHRoZSBrcmI1LmNvbmYgZmlsZSBhdCB0aGUKLWh0dHBzOi8vd2ViLm1pdC5lZHUva2VyYmVyb3Mva3JiNS1kZXZlbC9kb2MvbWl0SzVkZWZhdWx0cy5odG1sW2RlZmF1bHQgbG9jYXRpb25dIG9yIGFzIGluZGljYXRlZCBpbiB0aGUgS1JCNV9DT05GSUcKLWVudmlyb25tZW50IHZhcmlhYmxlLiBJdCBmaW5kcyBjcmVkZW50aWFscyBmcm9tIHRoZSBjcmVkZW50aWFsIGNhY2hlIG9yIGEga2V5dGFiIGZpbGUgYXQgdGhlCi1odHRwczovL3dlYi5taXQuZWR1L2tlcmJlcm9zL2tyYjUtZGV2ZWwvZG9jL21pdEs1ZGVmYXVsdHMuaHRtbFtkZWZhdWx0IGxvY2F0aW9uc10gb3IgYXMgaW5kaWNhdGVkCi1pbiB0aGUgS1JCNUNDTkFNRSBvciBLUkI1X0tUTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCi0KIElmIHlvdSBhdXRoZW50aWNhdGUgdG8gYSByZW1vdGUgPDxjb25uZWN0aW5nLWdyZW1saW4tc2VydmVyLEdyZW1saW4gU2VydmVyPj4gb3IKLTw8Y29ubmVjdGluZy1yZ3AsUmVtb3RlIEdyZW1saW4gUHJvdmlkZXI+PiwgdGhpcyBzZXJ2ZXIgbm9ybWFsbHkgaGFzIFNTTCBhY3RpdmF0ZWQgYW5kIHRoZSB3ZWJzb2NrZXRzIHVybCB3aWxsIHN0YXJ0Ci13aXRoICd3c3M6Ly8nLiBJZiBHcmVtbGluLVNlcnZlciB1c2VzIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgZm9yIFNTTCwgR3JlbWxpbi1QeXRob24gbmVlZHMgYWNjZXNzIHRvIGEgbG9jYWwgY29weSBvZgorPDxjb25uZWN0aW5nLXJncCxSZW1vdGUgR3JlbWxpbiBQcm92aWRlcj4+LCB0aGlzIHNlcnZlciBub3JtYWxseSBoYXMgU1NMIGFjdGl2YXRlZCBhbmQgdGhlIEhUVFAgdXJsIHdpbGwgc3RhcnQKK3dpdGggJ2h0dHBzOi8vJy4gSWYgR3JlbWxpbi1TZXJ2ZXIgdXNlcyBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIGZvciBTU0wsIEdyZW1saW4tUHl0aG9uIG5lZWRzIGFjY2VzcyB0byBhIGxvY2FsIGNvcHkgb2YKIHRoZSBDQSBjZXJ0aWZpY2F0ZSBmaWxlIChpbiBvcGVuc3NsIC5wZW0gZm9ybWF0KSwgdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBTU0xfQ0VSVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlLgogCiBOT1RFOiBJZiBjb25uZWN0aW5nIGZyb20gYW4gaW5oZXJlbnRseSBzaW5nbGUtdGhyZWFkZWQgUHl0aG9uIHByb2Nlc3Mgd2hlcmUgYmxvY2tpbmcgd2hpbGUgd2FpdGluZyBmb3IgR3JlbWxpbgpAQCAtMjYyOCw4ICsyNTc5LDggQEAKIHZlcnRpY2VzID0gZy53aXRoXygnZXZhbHVhdGlvblRpbWVvdXQnLCA1MDApLlYoKS5vdXQoJ2tub3dzJykudG9fbGlzdCgpCiAtLS0tCiAKLVRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGluIHRoaXMgZmFzaGlvbjogYGJhdGNoU2l6ZWAsIGByZXF1ZXN0SWRgLCBgdXNlckFnZW50YCBhbmQKLWBldmFsdWF0aW9uVGltZW91dGAgKGZvcm1lcmx5IGBzY3JpcHRFdmFsdWF0aW9uVGltZW91dGAgd2hpY2ggaXMgYWxzbyBzdXBwb3J0ZWQgYnV0IG5vdyBkZXByZWNhdGVkKS4KK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGluIHRoaXMgZmFzaGlvbjogYGJhdGNoU2l6ZWAsIGBidWxrUmVzdWx0c2AsIGBsYW5ndWFnZWAsCitgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzYCwgYHVzZXJBZ2VudGAsIGFuZCBgZXZhbHVhdGlvblRpbWVvdXRgLgogCiBhbmNob3I6cHl0aG9uLWltcG9ydHNbXQogW1tncmVtbGluLXB5dGhvbi1pbXBvcnRzXV0KQEAgLTI3MTYsMjQgKzI2NjcsMjQgQEAKIFt3aWR0aD0iMTAwJSIsY29scz0iMywxMCxeMiIsb3B0aW9ucz0iaGVhZGVyIl0KIHw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHxLZXkgfERlc2NyaXB0aW9uIHxEZWZhdWx0Ci18ZW5hYmxlX2NvbXByZXNzaW9uIHxFbmFibGVzIHNlbmRpbmcgYSB1c2VyIGFnZW50IHRvIHRoZSBzZXJ2ZXIgZHVyaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuIHxGYWxzZQotfGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3QgfEVuYWJsZXMgc2VuZGluZyBhIHVzZXIgYWdlbnQgdG8gdGhlIHNlcnZlciBkdXJpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4gTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiBwcm92aWRlciBkb2NzCi1saW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9kZXYvcHJvdmlkZXIvI19ncmFwaF9kcml2ZXJfcHJvdmlkZXJfcmVxdWlyZW1lbnRzW2hlcmVdLnxUcnVlCiB8aGVhZGVycyB8QWRkaXRpb25hbCBoZWFkZXJzIHRoYXQgd2lsbCBiZSBhZGRlZCB0byBlYWNoIHJlcXVlc3QgbWVzc2FnZS4gfGBOb25lYAotfGtlcmJlcml6ZWRfc2VydmljZSB8dGhlIGZpcnN0IHBhcnQgb2YgdGhlIHByaW5jaXBhbCBuYW1lIGNvbmZpZ3VyZWQgZm9yIHRoZSBncmVtbGluIHNlcnZpY2V8IiIiCiB8bWF4X3dvcmtlcnMgfE1heGltdW0gbnVtYmVyIG9mIHdvcmtlciB0aHJlYWRzLiB8TnVtYmVyIG9mIENQVXMgKiA1Ci18bWVzc2FnZV9zZXJpYWxpemVyIHxUaGUgbWVzc2FnZSBzZXJpYWxpemVyIGltcGxlbWVudGF0aW9uLnxgZ3JlbWxpbl9weXRob24uZHJpdmVyLnNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxYAotfHBhc3N3b3JkIHxUaGUgcGFzc3dvcmQgdG8gc3VibWl0IG9uIHJlcXVlc3RzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbi4gfCIiCit8cmVxdWVzdF9zZXJpYWxpemVyIHxUaGUgcmVxdWVzdCBzZXJpYWxpemVyIGltcGxlbWVudGF0aW9uLnxgZ3JlbWxpbl9weXRob24uZHJpdmVyLnNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0YAorfHJlc3BvbnNlX3NlcmlhbGl6ZXIgfFRoZSByZXNwb25zZSBzZXJpYWxpemVyIGltcGxlbWVudGF0aW9uLnxgZ3JlbWxpbl9weXRob24uZHJpdmVyLnNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0YAorfGludGVyY2VwdG9ycyB8VGhlIHJlcXVlc3QgaW50ZXJjZXB0b3JzIHRvIHJ1biBhZnRlciByZXF1ZXN0IHNlcmlhbGl6YXRpb24ufGBOb25lYAorfGF1dGggfFRoZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUgdG8gdXNlIHdoZW4gc3VibWl0dGluZyByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIHxgTm9uZWAKIHxwb29sX3NpemUgfFRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgdXNlZCBieSB0aGUgcG9vbC4gfDQKIHxwcm90b2NvbF9mYWN0b3J5IHxBIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBgQWJzdHJhY3RCYXNlUHJvdG9jb2xgLiB8YGdyZW1saW5fcHl0aG9uLmRyaXZlci5wcm90b2NvbC5HcmVtbGluU2VydmVyV1NQcm90b2NvbGAKLXxzZXNzaW9uIHwgQSB1bmlxdWUgc3RyaW5nLWJhc2VkIGlkZW50aWZpZXIgKHR5cGljYWxseSBhIFVVSUQpIHRvIGVuYWJsZSBhIDw8c2Vzc2lvbnMsc2Vzc2lvbi1iYXNlZCBjb25uZWN0aW9uPj4uIFRoaXMgaXMgbm90IGEgdmFsaWQgY29uZmlndXJhdGlvbiBmb3IgYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gLiB8Tm9uZQogfHRyYW5zcG9ydF9mYWN0b3J5IHxBIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiBgQWJzdHJhY3RCYXNlVHJhbnNwb3J0YC4gfGBncmVtbGluX3B5dGhvbi5kcml2ZXIuYWlvaHR0cC50cmFuc3BvcnQuQWlvaHR0cFRyYW5zcG9ydGAKLXx1c2VybmFtZSB8VGhlIHVzZXJuYW1lIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIHwiIgorfGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3QgfEVuYWJsZXMgc2VuZGluZyBhIHVzZXIgYWdlbnQgdG8gdGhlIHNlcnZlciBkdXJpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4KK01vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gcHJvdmlkZXIgZG9jcworbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNfZ3JhcGhfZHJpdmVyX3Byb3ZpZGVyX3JlcXVpcmVtZW50c1toZXJlXS58VHJ1ZQorfGJ1bGtfcmVzdWx0cyB8RW5hYmxlcyBidWxraW5nIG9mIHJlc3VsdHMgb24gdGhlIHNlcnZlci4gfEZhbHNlCiB8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIE5vdGUgdGhhdCB0aGUgYHRyYW5zcG9ydF9mYWN0b3J5YCBjYW4gYWxsb3cgZm9yIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgYEFpb2h0dHBUcmFuc3BvcnRgLCB3aGljaCBhbGxvd3MKIHBhc3MgdGhyb3VnaCBvZiB0aGUgbmFtZWQgcGFyYW1ldGVycyBhdmFpbGFibGUgaW4KLWxpbms6aHR0cHM6Ly9kb2NzLmFpb2h0dHAub3JnL2VuL3N0YWJsZS9jbGllbnRfcmVmZXJlbmNlLmh0bWwjYWlvaHR0cC5DbGllbnRTZXNzaW9uLndzX2Nvbm5lY3RbQUlPSFRUUCdzIHdzX2Nvbm5lY3RdLAorbGluazpodHRwczovL2RvY3MuYWlvaHR0cC5vcmcvZW4vc3RhYmxlL2NsaWVudF9yZWZlcmVuY2UuaHRtbCNhaW9odHRwLkNsaWVudFNlc3Npb25bQUlPSFRUUCdzIEhUVFAgQ2xpZW50U2Vzc2lvbl0sCiBhbmQgdGhlIGFiaWxpdHkgdG8gY2FsbCB0aGUgYXBpIGZyb20gYW4gZXZlbnQgbG9vcDoKIAogW3NvdXJjZSxweXRob25dCkBAIC0yNzQxLDI3ICsyNjkyLDEyIEBACiBpbXBvcnQgc3NsCiAuLi4KIGcgPSB0cmF2ZXJzYWwoKS53aXRoXygKLSAgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywnZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0X2ZhY3Rvcnk9bGFtYmRhOiBBaW9odHRwVHJhbnNwb3J0KHJlYWRfdGltZW91dD02MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfdGltZW91dD0yMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhcnRiZWF0PTEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2Zyb21fZXZlbnRfbG9vcD1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfY29udGVudF9sZW5ndGg9MTAwKjEwMjQqMTAyNCwKKyAgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCdnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRfZmFjdG9yeT1sYW1iZGE6IEFpb2h0dHBUcmFuc3BvcnQodGltZW91dD02MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVfc2l6ZT0xMDAqMTAyNCoxMDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfb3B0aW9ucz1zc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChQdXJwb3NlLkNMSUVOVF9BVVRIKSkpKQogLS0tLQogCi1Ob3RlIHRoYXQgdGhlIGBoZWFydGJlYXRgIGVuYWJsZXMga2VlcC1hbGl2ZSBmdW5jdGlvbmFsaXR5IHdpdGhpbiBhaW9odHRwIGFuZCBpdCBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0LiBJdCBpcwotaW1wb3J0YW50IHRoYXQgdGhlIGhlYXJ0YmVhdCBpbnRlcnZhbCBpcyBub3QgdG9vIHNob3J0LCBhcyB0aGUgd2FpdCBmb3IgdGhlIHNlcnZlciByZXNwb25zZSB0byB0aGUgaGVhcnRiZWF0IHJlcXVlc3QKLWlzIGhhbGYgdGhlIGFtb3VudCBvZiB0aGlzIHZhbHVlLiBUaGVyZWZvcmUsIGlmIHRoZSBoZWFydGJlYXQgaXMgdGVuIHNlY29uZHMgdGhlbiB0aGUgd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGlzIGp1c3QKLWZpdmUgc2Vjb25kcy4gSWYgdGhlIHJlc3BvbnNlIGlzIG5vdCByZWNlaXZlZCBpbiB0aGF0IHRpbWUgcGVyaW9kIHRoZW4gdGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBjbG9zZWQgYW5kIGFueSBvbmdvaW5nCi1yZXF1ZXN0cyBvbiB0aGF0IGNvbm5lY3Rpb24gd2lsbCBmYWlsIHRvIHJldHJpZXZlIHJlc3VsdHMuIFRoZXJlZm9yZSwgaWYgdGhlIGhlYXJ0YmVhdCBpcyBzZXQgdG8gb25lIHNlY29uZCwgaXQgb25seQotcHJvdmlkZXMgYSBoYWxmLXNlY29uZCB0byBnZXQgdGhlIHJlc3BvbnNlIHdoaWNoIHJhaXNlcyB0aGUgcG9zc2liaWxpdHkgY29uc2lkZXJhYmx5IHRoYXQgdGhlIGNvbm5lY3Rpb24gd2lsbCBiZQotaW5hZHZlcnRlbnRseSBjbG9zZWQuCi0KLUNvbXByZXNzaW9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZQotbGluazpodHRwczovL2RvY3MucHl0aG9uLm9yZy8zLjYvbGlicmFyeS96bGliLmh0bWwjemxpYi5jb21wcmVzc29ialt6bGliIGRvY3VtZW50YXRpb25dLiBCeSBkZWZhdWx0LCBjb21wcmVzc2lvbgotc2V0dGluZ3MgYXJlIGNvbmZpZ3VyZWQgYXMgc2hvd24gaW4gdGhlIGFib3ZlIGV4YW1wbGUuCi0KIFtbZ3JlbWxpbi1weXRob24tc3RyYXRlZ2llc11dCiA9PT0gVHJhdmVyc2FsIFN0cmF0ZWdpZXMKIApAQCAtMjc5NSw2OSArMjczMSwyMiBAQAogW1tncmVtbGluLXB5dGhvbi10cmFuc2FjdGlvbnNdXQogPT09IFRyYW5zYWN0aW9ucwogCi1UbyBnZXQgYSBmdWxsIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBzZWN0aW9uLCBpdCB3b3VsZCBiZSBnb29kIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIDw8dHJhbnNhY3Rpb25zLFRyYW5zYWN0aW9ucz4+Ci1zZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiwgd2hpY2ggZGlzY3Vzc2VzIHRyYW5zYWN0aW9ucyBpbiB0aGUgZ2VuZXJhbCBjb250ZXh0IG9mIFRpbmtlclBvcCBpdHNlbGYuIFRoaXMgc2VjdGlvbgotYnVpbGRzIG9uIHRoYXQgY29udGVudCBieSBkZW1vbnN0cmF0aW5nIHRoZSB0cmFuc2FjdGlvbmFsIHN5bnRheCBmb3IgUHl0aG9uLgorSU1QT1JUQU5UOiBUcmFuc2FjdGlvbiBzdXBwb3J0IG92ZXIgSFRUUCBpcyBub3QgeWV0IGltcGxlbWVudGVkIGluIEdyZW1saW4tUHl0aG9uLiBUaGlzIHdpbGwgYmUgYWRkcmVzc2VkIGJ5IHRoZQorb2ZmaWNpYWwgNC4wLjAgcmVsZWFzZS4KKworW1tncmVtbGluLXB5dGhvbi1ndmFsdWVdXQorPT09IEdWYWx1ZSBQYXJhbWV0ZXJpemF0aW9uCisKK0EgYEdWYWx1ZWAgaXMgYW4gZW5jYXBzdWxhdGlvbiBvZiBhIHBhcmFtZXRlciBuYW1lIGFuZCB2YWx1ZS4gQSA8PHRyYXZlcnNhbC1wYXJhbWV0ZXJpemF0aW9uLHN1YnNldCBvZiBncmVtbGluIHN0ZXBzPj4KK2FyZSBhYmxlIHRvIGFjY2VwdCBHVmFsdWVzLiBXaGVuIGNvbnN0cnVjdGluZyBhIGBHcmFwaFRyYXZlcnNhbGAgd2l0aCBzdWNoIHN0ZXBzIGluIFB5dGhvbiwgYSBHVmFsdWUgbWF5IGJlIHBhc3NlZCBpbgordGhlIHRyYXZlcnNhbCB0byB1dGlsaXplIGEgcGFyYW1ldGVyIGluIHBsYWNlIG9mIGEgbGl0ZXJhbC4KIAogW3NvdXJjZSxweXRob25dCiAtLS0tCi1nID0gdHJhdmVyc2FsKCkud2l0aF8oRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykpCi0KLSMgQ3JlYXRlIGEgVHJhbnNhY3Rpb24uCi10eCA9IGcudHgoKQotCi0jIFNwYXduIGEgbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlLCBiaW5kaW5nIGFsbCB0cmF2ZXJzYWxzIGVzdGFibGlzaGVkIGZyb20gaXQgdG8gdHguCi1ndHggPSB0eC5iZWdpbigpCi0KLXRyeToKLSAgICAjIEV4ZWN1dGUgYSB0cmF2ZXJzYWwgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4KLSAgICBndHguYWRkX3YoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIkx5bmRvbiIpLml0ZXJhdGUoKSwKLQotICAgICMgQ29tbWl0IHRoZSB0cmFuc2FjdGlvbi4gVGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgdXNlZCBhbmQgY2Fubm90IGJlIHJlLXVzZWQuCi0gICAgIyBBIG5ldyB0cmFuc2FjdGlvbiBjYW4gYmUgc3Bhd25lZCB0aHJvdWdoIGcudHgoKS4KLSAgICAjIFRoZSBjb250ZXh0IG9mIGcgcmVtYWlucyBzZXNzaW9ubGVzcyB0aHJvdWdob3V0IHRoZSBwcm9jZXNzLgotICAgIHR4LmNvbW1pdCgpCi1leGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgIyBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaWYgYW4gZXJyb3Igb2NjdXJzLgotICAgIHR4LnJvbGxiYWNrKCkKLQorZy5WKCkuaGFzKCduYW1lJywgR1ZhbHVlKCduYW1lJywgJ21hcmtvJykpCitnLm1lcmdlX3YoR1ZhbHVlKCd2ZXJ0ZXhQYXR0ZXJuJywgeyduYW1lJzogJ21hcmtvJ30pKQogLS0tLQogCi1bW2dyZW1saW4tcHl0aG9uLWxhbWJkYV1dCi09PT0gVGhlIExhbWJkYSBTb2x1dGlvbgotCi1TdXBwb3J0aW5nIGxpbms6aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQW5vbnltb3VzX2Z1bmN0aW9uW2Fub255bW91cyBmdW5jdGlvbnNdIGFjcm9zcyBsYW5ndWFnZXMgaXMgZGlmZmljdWx0IGFzCi1tb3N0IGxhbmd1YWdlcyBkbyBub3Qgc3VwcG9ydCBsYW1iZGEgaW50cm9zcGVjdGlvbiBhbmQgdGh1cywgY29kZSBhbmFseXNpcy4gSW4gR3JlbWxpbi1QeXRob24sIGEgR3JlbWxpbiBsYW1iZGEgc2hvdWxkCi1iZSByZXByZXNlbnRlZCBhcyBhIHplcm8tYXJnIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGFtYmRhIGV4cGVjdGVkIGZvciB1c2UgaW4gdGhlCi10cmF2ZXJzYWwuIFRoZSBsYW1iZGEgc2hvdWxkIGJlIHdyaXR0ZW4gYXMgYSBgR3JlbWxpbi1Hcm9vdnlgIHN0cmluZy4gV2hlbiB0aGUgbGFtYmRhIGlzIHJlcHJlc2VudGVkIGluIGBCeXRlY29kZWAgaXRzCi1sYW5ndWFnZSBpcyBlbmNvZGVkIHN1Y2ggdGhhdCB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gaG9zdCBjYW4gaW5mZXIgd2hpY2ggdHJhbnNsYXRvciBhbmQgdWx0aW1hdGUgZXhlY3V0aW9uIGVuZ2luZSB0bwotdXNlLgotCi1bc291cmNlLHB5dGhvbl0KLS0tLS0KLT4+PiBnLlYoKS5vdXQoKS5tYXAobGFtYmRhOiAiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKS5sZW5ndGgoKSIpLnN1bSgpLnRvX2xpc3QoKQotWzI0XQotLS0tLQotCi1USVA6IFdoZW4gcnVubmluZyBpbnRvIHNpdHVhdGlvbnMgd2hlcmUgR3Jvb3Z5IGNhbm5vdCBwcm9wZXJseSBkaXNjZXJuIGEgbWV0aG9kIHNpZ25hdHVyZSBiYXNlZCBvbiB0aGUgYExhbWJkYWAKLWluc3RhbmNlIGNyZWF0ZWQsIGl0IHdpbGwgaGVscCB0byBmdWxseSBkZWZpbmUgdGhlIGNsb3N1cmUgaW4gdGhlIGxhbWJkYSBleHByZXNzaW9uIC0gc28gcmF0aGVyIHRoYW4KLWBsYW1iZGE6ICgnaXQuZ2V0KCkudmFsdWUoJ25hbWUnKScsJ2dyZW1saW4tZ3Jvb3Z5JylgLCBwcmVmZXIgYGxhbWJkYTogKCd4IC0+IHguZ2V0KCkudmFsdWUoJ25hbWUnKSwnZ3JlbWxpbi1ncm9vdnknKWAuCi0KLUZpbmFsbHksIEdyZW1saW4gYEJ5dGVjb2RlYCB0aGF0IGluY2x1ZGVzIGxhbWJkYXMgcmVxdWlyZXMgdGhhdCB0aGUgdHJhdmVyc2FsIGJlIHByb2Nlc3NlZCBieSB0aGUKLWBTY3JpcHRFbmdpbmVgLiBUbyBhdm9pZCBjb250aW51ZWQgcmVjb21waWxhdGlvbiBjb3N0cywgaXQgc3VwcG9ydHMgdGhlIGVuY29kaW5nIG9mIGJpbmRpbmdzLCB3aGljaCBhbGxvdyBhIHJlbW90ZQotZW5naW5lIHRvIHRvIGNhY2hlIHRyYXZlcnNhbHMgdGhhdCB3aWxsIGJlIHJldXNlZCBvdmVyIGFuZCBvdmVyIGFnYWluIHNhdmUgdGhhdCBzb21lIHBhcmFtZXRlcml6YXRpb24gbWF5IGNoYW5nZS4gVGh1cywKLWluc3RlYWQgb2YgdHJhbnNsYXRpbmcsIGNvbXBpbGluZywgYW5kIHRoZW4gZXhlY3V0aW5nIGVhY2ggc3VibWl0dGVkIGJ5dGVjb2RlLCBpdCBpcyBwb3NzaWJsZSB0byBzaW1wbHkgZXhlY3V0ZS4KLQotW3NvdXJjZSxweXRob25dCi0tLS0tCi0+Pj4gZy5WKEJpbmRpbmdzLm9mKCd4JywxKSkub3V0KCdjcmVhdGVkJykubWFwKGxhbWJkYTogIml0LmdldCgpLnZhbHVlKCduYW1lJykubGVuZ3RoKCkiKS5zdW1fKCkudG9fbGlzdCgpCi1bM10KLT4+PiBnLlYoQmluZGluZ3Mub2YoJ3gnLDQpKS5vdXQoJ2NyZWF0ZWQnKS5tYXAobGFtYmRhOiAiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKS5sZW5ndGgoKSIpLnN1bV8oKS50b19saXN0KCkKLVs5XQotLS0tLQotCi1XQVJOSU5HOiBBcyBleHBsYWluZWQgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnRhdGlvbiwgd2hlbiBwb3NzaWJsZSA8PGEtbm90ZS1vbi1sYW1iZGFzLGF2b2lkPj4gbGFtYmRhcy4KLQogW1tncmVtbGluLXB5dGhvbi1zY3JpcHRzXV0KID09PSBTdWJtaXR0aW5nIFNjcmlwdHMKIApAQCAtMjg2OCw3ICsyNzU3LDcgQEAKIFtzb3VyY2UscHl0aG9uXQogLS0tLQogZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIgaW1wb3J0IGNsaWVudCA8MT4KLWNsaWVudCA9IGNsaWVudC5DbGllbnQoJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsICdnJykgPDI+CitjbGllbnQgPSBjbGllbnQuQ2xpZW50KCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsICdnJykgPDI+CiAtLS0tCiAKIDwxPiBJbXBvcnQgdGhlIEdyZW1saW4tUHl0aG9uIGBjbGllbnRgIG1vZHVsZS4KQEAgLTI5MTksOCArMjgwOCw4IEBACiByZXN1bHRfc2V0ID0gY2xpZW50LnN1Ym1pdCgnZy5WKCkucmVwZWF0KGJvdGgoKSkudGltZXMoMTAwKScsIHJlcXVlc3Rfb3B0aW9ucz17J2V2YWx1YXRpb25UaW1lb3V0JzogNTAwMH0pCiAtLS0tCiAKLVRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYWxsb3dlZCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIGluIHRoaXMgZmFzaGlvbjogYGJhdGNoU2l6ZWAsIGByZXF1ZXN0SWRgLCBgdXNlckFnZW50YCwgYG1hdGVyaWFsaXplUHJvcGVydGllc2AgYW5kCi1gZXZhbHVhdGlvblRpbWVvdXRgIChmb3JtZXJseSBgc2NyaXB0RXZhbHVhdGlvblRpbWVvdXRgIHdoaWNoIGlzIGFsc28gc3VwcG9ydGVkIGJ1dCBub3cgZGVwcmVjYXRlZCkuCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGFsbG93ZWQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBpbiB0aGlzIGZhc2hpb246IGBiYXRjaFNpemVgLCBgcmVxdWVzdElkYCwgYHVzZXJBZ2VudGAsCitgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzYCBhbmQgYGV2YWx1YXRpb25UaW1lb3V0YCAoZm9ybWVybHkgYHNjcmlwdEV2YWx1YXRpb25UaW1lb3V0YCB3aGljaCBpcyBhbHNvIHN1cHBvcnRlZCBidXQgbm93IGRlcHJlY2F0ZWQpLgogCiBJTVBPUlRBTlQ6IFRoZSBwcmVmZXJyZWQgbWV0aG9kIGZvciBzZXR0aW5nIGEgcGVyLXJlcXVlc3QgdGltZW91dCBmb3Igc2NyaXB0cyBpcyBkZW1vbnN0cmF0ZWQgYWJvdmUsIGJ1dCB0aG9zZSBmYW1pbGlhcgogd2l0aCBieXRlY29kZSBtYXkgdHJ5IGBnLndpdGgoRVZBTFVBVElPTl9USU1FT1VULCA1MDApYCB3aXRoaW4gYSBzY3JpcHQuIFNjcmlwdHMgd2l0aCBtdWx0aXBsZSB0cmF2ZXJzYWxzIGFuZCBtdWx0aXBsZQpAQCAtMzAwNSw3ICsyODk0LDcgQEAKIAogW3NvdXJjZSxweXRob25dCiAtLS0tCi1zb2NpYWwgPSB0cmF2ZXJzYWwoU29jaWFsVHJhdmVyc2FsU291cmNlKS53aXRoXyhEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCdnJykpCitzb2NpYWwgPSB0cmF2ZXJzYWwoU29jaWFsVHJhdmVyc2FsU291cmNlKS53aXRoX3JlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsJ2cnKSkKIHNvY2lhbC5wZXJzb25zKCdtYXJrbycpLmtub3dzKCdqb3NoJykKIHNvY2lhbC5wZXJzb25zKCdtYXJrbycpLnlvdW5nZXN0X2ZyaWVuZHNfYWdlKCkKIHNvY2lhbC5wZXJzb25zKCkuZmlsdGVyKF9fLmNyZWF0ZWRfYXRfbGVhc3QoMikpLmNvdW50KCkKQEAgLTMwNTYsOCArMjk0NSwyMyBAQAogKGUuZy4gYGRpY3RgIHRvIGBIYXNoYWJsZURpY3RgLCBgbGlzdGAgdG8gYHR1cGxlYCwgYHNldGAgdG8gYGZyb3plbnNldGApLgogKiBHcmVtbGluIGlzIGNhcGFibGUgb2YgcmV0dXJuaW5nIGBEaWN0aW9uYXJ5YCByZXN1bHRzIHRoYXQgdXNlIG5vbi1oYXNoYWJsZSBrZXlzIChlLmcuIERpY3Rpb25hcnkgYXMgYSBrZXkpIGFuZCBQeXRob24KIGRvZXMgbm90IHN1cHBvcnQgdGhhdCBhdCBhIGxhbmd1YWdlIGxldmVsLiBVc2luZyBHcmFwaFNPTiAzLjAgb3IgR3JhcGhCaW5hcnkgKGFmdGVyIDMuNS4wKSBtYWtlcyBpdCBwb3NzaWJsZSB0byByZXR1cm4KLXN1Y2ggcmVzdWx0cy4gSW4gYWxsIG90aGVyIGNhc2VzLCBHcmVtbGluIHRoYXQgcmV0dXJucyBzdWNoIHJlc3VsdHMgd2lsbCBuZWVkIHRvIGJlIHJlLXdyaXR0ZW4gdG8gYXZvaWQgdGhhdCBzb3J0IG9mCi1rZXkuCitzdWNoIHJlc3VsdHMuIEhvd2V2ZXIsIGl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gc2VyaWFsaXplIHRoZXNlIG1hcHMgc28gdGhleSBjYW4ndCBiZSByZS1pbnNlcnRlZCAob3Igcm91bmQgdHJpcHBlZCkuCitJbiBhbGwgb3RoZXIgY2FzZXMsIEdyZW1saW4gdGhhdCByZXR1cm5zIHN1Y2ggcmVzdWx0cyB3aWxsIG5lZWQgdG8gYmUgcmUtd3JpdHRlbiB0byBhdm9pZCB0aGF0IHNvcnQgb2Yga2V5LgorKiBUaGUgYGZsb2F0YCB0eXBlIGluIFB5dGhvbiBpcyBhIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHdoaWNoIGlzIGNvbW1vbmx5IHJlZmVycmVkIHRvIGluIG90aGVyCitsYW5ndWFnZXMgYXMgYSBgZG91YmxlYC4gVGhpcyBtZWFucyB0aGF0IHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHdpbGwgYmUgZGVzZXJpYWxpemVkIGludG8gYSBkb3VibGUsIHNvCit0aGVyZSB3aWxsIGJlIGEgcHJlY2lzaW9uIGRpZmZlcmVuY2UuCisqIEdyZW1saW4gc3VwcG9ydHMgbXVsdGlwbGUgZml4ZWQtd2lkdGggaW50ZWdlcnMgc3VjaCBhcyBieXRlICgxLWJ5dGUpLCBzaG9ydCAoMi1ieXRlKSwgYW5kIGxvbmcgKDgtYnl0ZSkuIFRoZXNlIGFyZQorZGVzZXJpYWxpemVkIGludG8gUHl0aG9uJ3MgdmFyaWFibGUgc2l6ZSBgaW50YCB0eXBlLiBUaGVzZSBudW1iZXJzIGNhbid0IGJlIGV4YWN0bHkgcm91bmQgdHJpcHBlZCBiZWNhdXNlIHRoZSBvcmlnaW5hbAordHlwZSBpbmZvcm1hdGlvbiBpcyBsb3N0IGR1cmluZyBkZXNlcmlhbGl6YXRpb24uIER1cmluZyBzZXJpYWxpemF0aW9uLCB0aGVzZSBudW1iZXJzIHdpbGwgdHJ5IHRvIGJlIGNvbnZlcnRlZCBpbnRvIGEKKzQtYnl0ZSBpbnRlZ2VyIHdoaWNoIG1heSB0aHJvdyBleGNlcHRpb25zIGlmIHRoZSB2YWx1ZSBpcyB0b28gbGFyZ2Ugb3Igd2FzdGUgc3BhY2UgaWYgdGhlIHZhbHVlIGlzIHZlcnkgc21hbGwuCisqIFRoZSBHcmVtbGluIENoYXIgdHlwZSBpcyBkZXNlcmlhbGl6ZWQgYXMgYSBzdHJpbmcgYW5kIHRoZXJlZm9yZSBjYW4ndCBiZSByb3VuZCB0cmlwcGVkIGFzIGl0IHdpbGwgaXQgd2lsbCBhdHRlbXB0IHRvCitiZSBzZXJpYWxpemVkIGFzIGEgc3RyaW5nLgorKiBEYXRlIGFuZCBEdXJhdGlvbiB0eXBlcyBpbiBHcmVtbGluIGFyZSBkZXNlcmlhbGl6ZWQgYXMgYGRhdGV0aW1lLmRhdGV0aW1lYCBhbmQgYGRhdGV0aW1lLnRpbWVkZWx0YWAgcmVzcGVjdGl2ZWx5IGluCitgZ3JlbWxpbi1weXRob25gLiBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyBmb3IgbGFyZ2UgdmFsdWVzIGJlY2F1c2UgdGhleSBleGNlZWQgdGhlIG1heGltdW0gc2l6ZSBhbGxvd2VkIGZvciBgZGF0ZXRpbWVgCithbmQgYHRpbWVkZWx0YWAuCisqIEluIEdyZW1saW4sIDEgaXNuJ3QgZXF1YWwgdG8gdGhlIGJvb2xlYW4gdHJ1ZSB2YWx1ZSBhbmQgMCBpc24ndCBlcXVhbCB0byB0aGUgYm9vbGVhbiBmYWxzZSB2YWx1ZSwgYnV0IHRoZXkgYXJlIGVxdWFsCitpbiBQeXRob24uIFRoaXMgbWVhbnMgdGhhdCBpbiBgZ3JlbWxpbi1weXRob25gIGlmIHRoZXNlIHZhbHVlcyBhcmUgaW4gYSBgU2V0YCwgeW91IHdpbGwgZ2V0IGEgZGlmZmVyZW50IGJlaGF2aW9yIHRoYW4KK3doYXQgaXMgaW50ZW5kZWQgYnkgR3JlbWxpbiwgc2luY2UgaXQgZm9sbG93cyBQeXRob24ncyBiZWhhdmlvci4KICogVGhlIGBzdWJncmFwaCgpYC1zdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW55IHZhcmlhbnQgdGhhdCBpcyBub3QgcnVubmluZyBvbiB0aGUgSmF2YSBWaXJ0dWFsIE1hY2hpbmUgYXMgdGhlcmUgaXMKIG5vIGBHcmFwaGAgaW5zdGFuY2UgdG8gZGVzZXJpYWxpemUgYSByZXN1bHQgaW50byBvbiB0aGUgY2xpZW50LXNpZGUuIEEgd29ya2Fyb3VuZCBpcyB0byByZXBsYWNlIHRoZSBzdGVwIHdpdGgKIGBhZ2dyZWdhdGUobG9jYWwpYCBhbmQgdGhlbiBjb252ZXJ0IHRob3NlIHJlc3VsdHMgdG8gc29tZXRoaW5nIHRoZSBjbGllbnQgY2FuIHVzZSBsb2NhbGx5LgpAQCAtMzA3Nyw3ICsyOTgxLDcgQEAKIFtzb3VyY2UscHl0aG9uXQogLS0tLQogZGVmIHByaW50X3ZlcnRpY2VzKCk6Ci0gICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKERyaXZlclJlbW90ZUNvbm5lY3Rpb24oIndzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpKQorICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24oImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikpCiAgICAgIyBEbyB5b3VyIHRyYXZlcnNhbC4KIAogYXN5bmMgZGVmIHJ1bl9pbl90aHJlYWQoKToKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtaGFkb29wLWVuZC5hc2NpaWRvYyBiL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtaGFkb29wLWVuZC5hc2NpaWRvYwppbmRleCAyNjQ5YzAwLi4wMDg5NjViIDEwMDY0NAotLS0gYS9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLWhhZG9vcC1lbmQuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvcmVmZXJlbmNlL2ltcGxlbWVudGF0aW9ucy1oYWRvb3AtZW5kLmFzY2lpZG9jCkBAIC0xOCw2ICsxOCw5IEBACiAvLy8vCiA9PT0gSW5wdXQvT3V0cHV0IEZvcm1hdHMKIAorV0FSTklORzogVGhlIEhhZG9vcCBhbmQgU3BhcmsgbW9kdWxlcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSA0LjAuMC1iZXRhLjIgZGlzdHJpYnV0aW9uLiBUaGUgZXhhbXBsZXMgaW4KK3RoaXMgc2VjdGlvbiBhcmUgcHJlc2VudGVkIGFzIHN0YXRpYyBjb2RlIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisKIGltYWdlOmFkamFjZW5jeS1saXN0LnBuZ1t3aWR0aD0zMDAsZmxvYXQ9cmlnaHRdIEhhZG9vcC1HcmVtbGluIHByb3ZpZGVzIHZhcmlvdXMgSS9PIGZvcm1hdHMgLS0gaS5lLiBIYWRvb3AKIGBJbnB1dEZvcm1hdGAgYW5kIGBPdXRwdXRGb3JtYXRgLiBBbGwgb2YgdGhlIGZvcm1hdHMgbWFrZSB1c2Ugb2YgYW4gbGluazpodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FkamFjZW5jeV9saXN0W2FkamFjZW5jeSBsaXN0XQogcmVwcmVzZW50YXRpb24gb2YgdGhlIGdyYXBoIHdoZXJlIGVhY2ggInJvdyIgcmVwcmVzZW50cyBhIHNpbmdsZSB2ZXJ0ZXgsIGl0cyBwcm9wZXJ0aWVzLCBhbmQgaXRzIGluY29taW5nIGFuZApAQCAtMTU2LDcgKzE1OSw3IEBACiBUaGUgZGlzdHJpYnV0ZWQgZmlsZSBzeXN0ZW0gb2YgSGFkb29wIGlzIGNhbGxlZCBsaW5rOmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQXBhY2hlX0hhZG9vcCNIYWRvb3BfZGlzdHJpYnV0ZWRfZmlsZV9zeXN0ZW1bSERGU10uCiBUaGUgcmVzdWx0cyBvZiBhbnkgT0xBUCBvcGVyYXRpb24gYXJlIHN0b3JlZCBpbiBIREZTIGFjY2Vzc2libGUgdmlhIGBoZGZzYC4gRm9yIGxvY2FsIGZpbGUgc3lzdGVtIGFjY2VzcywgdGhlcmUgaXMgYGZzYC4KIAotW2dyZW1saW4tZ3Jvb3Z5XQorW3NvdXJjZSxncm9vdnldCiAtLS0tCiBncmFwaCA9IEdyYXBoRmFjdG9yeS5vcGVuKCdjb25mL2hhZG9vcC9oYWRvb3AtZ3J5by5wcm9wZXJ0aWVzJykKIGdyYXBoLmNvbXB1dGUoU3BhcmtHcmFwaENvbXB1dGVyKS5wcm9ncmFtKFBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW0uYnVpbGQoKS5jcmVhdGUoZ3JhcGgpKS5tYXBSZWR1Y2UoQ2x1c3RlckNvdW50TWFwUmVkdWNlLmJ1aWxkKCkubWVtb3J5S2V5KCdjbHVzdGVyQ291bnQnKS5jcmVhdGUoKSkuc3VibWl0KCkuZ2V0KCk7CkBAIC0xNzUsNyArMTc4LDcgQEAKIFJERHMgYXJlIHJldHJpZXZlZCBhbmQgc2F2ZWQgdG8gdGhlIGBTcGFya0NvbnRleHRgIHZpYSBgUGVyc2lzdGVkSW5wdXRSRERgIGFuZCBgUGVyc2lzdGVkT3V0cHV0UkREYCByZXNwZWN0aXZlbHkuCiBQZXJzaXN0ZWQgUkREcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgYHNwYXJrYC4KIAotW2dyZW1saW4tZ3Jvb3Z5XQorW3NvdXJjZSxncm9vdnldCiAtLS0tCiBTcGFyay5jcmVhdGUoJ2xvY2FsWzRdJykKIGdyYXBoID0gR3JhcGhGYWN0b3J5Lm9wZW4oJ2NvbmYvaGFkb29wL2hhZG9vcC1ncnlvLnByb3BlcnRpZXMnKQpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVmZXJlbmNlL2ltcGxlbWVudGF0aW9ucy1oYWRvb3Atc3RhcnQuYXNjaWlkb2MgYi9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLWhhZG9vcC1zdGFydC5hc2NpaWRvYwppbmRleCA4ZTQ4MTgyLi5mMjBmMTQzIDEwMDY0NAotLS0gYS9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLWhhZG9vcC1zdGFydC5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLWhhZG9vcC1zdGFydC5hc2NpaWRvYwpAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgICAgICBcLCwsLwogICAgICAgICAgKG8gbykKLS0tLS0tb09Pby0oMyktb09Pby0tLS0tCistLS0tLW9PT28tKDQpLW9PT28tLS0tLQogcGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnNlcnZlcgogcGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnV0aWxpdGllcwogcGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnRpbmtlcmdyYXBoCkBAIC02MSw3ICs2MSw3IEBACiAKICAgICAgICAgIFwsLCwvCiAgICAgICAgICAobyBvKQotLS0tLS1vT09vLSgzKS1vT09vLS0tLS0KKy0tLS0tb09Pby0oNCktb09Pby0tLS0tCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3Auc2VydmVyCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgKQEAgLTE0NSw3ICsxNDUsMTAgQEAKIGZvciBsYXJnZSBncmFwaHMuIEluIHN1Y2ggbGFyZ2UgZ3JhcGggc2l0dWF0aW9ucywgbWFrZSB1c2Ugb2YgPDx0cmF2ZXJzYWx2ZXJ0ZXhwcm9ncmFtLFRyYXZlcnNhbFZlcnRleFByb2dyYW0+Pgogd2hpY2ggaXMgdGhlIE9MQVAgR3JlbWxpbiBtYWNoaW5lLgogCi1bZ3JlbWxpbi1ncm9vdnldCitXQVJOSU5HOiBUaGUgSGFkb29wIGFuZCBTcGFyayBtb2R1bGVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIDQuMC4wLWJldGEuMiBkaXN0cmlidXRpb24uIFRoZXNlIGV4YW1wbGVzIHdpbGwKK2JlIHJlc3RvcmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisKK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogaGRmcy5jb3B5RnJvbUxvY2FsKCdkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5bycsICd0aW5rZXJwb3AtbW9kZXJuLmtyeW8nKQogaGRmcy5scygpCkBAIC0xNzksNyArMTgyLDcgQEAKIAogICAgICAgICAgXCwsLC8KICAgICAgICAgIChvIG8pCi0tLS0tLW9PT28tKDMpLW9PT28tLS0tLQorLS0tLS1vT09vLSg0KS1vT09vLS0tLS0KIHBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC5zZXJ2ZXIKIHBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC51dGlsaXRpZXMKIHBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC50aW5rZXJncmFwaApAQCAtMTkxLDcgKzE5NCw3IEBACiAKICAgICAgICAgIFwsLCwvCiAgICAgICAgICAobyBvKQotLS0tLS1vT09vLSgzKS1vT09vLS0tLS0KKy0tLS0tb09Pby0oNCktb09Pby0tLS0tCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3Auc2VydmVyCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtbmVvNGouYXNjaWlkb2MgYi9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLW5lbzRqLmFzY2lpZG9jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWU2MzBjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtbmVvNGouYXNjaWlkb2MKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLy8vLwotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi1kaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi1zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi1LSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLXNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLXVuZGVyIHRoZSBMaWNlbnNlLgotLy8vLwotW1tuZW80ai1ncmVtbGluXV0KLT09IE5lbzRqLUdyZW1saW4gKERlcHJlY2F0ZWQpCi0KLVdBUk5JTkc6IERlcHJlY2F0ZWQ6IE5lbzRqLUdyZW1saW4gaXMgbm90IGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9ucyBvZiBOZW80aiBiZXlvbmQgMy40IChSZWFjaGVkIEVuZCBvZiBMaWZlIE1hcmNoIDMxLCAyMDIwKS4KLUZvciB0aGlzIHJlYXNvbiwgdXNlIG9mIE5lbzRqLUdyZW1saW4gaXMgbm90IHJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cy4gTmVvNGotR3JlbWxpbiBpcyBleHBlY3RlZCB0bwotcmVtYWluIGNvbXBhdGlibGUgd2l0aCB1cGNvbWluZyByZWxlYXNlcyBvZiBUaW5rZXJQb3AsIGhvd2V2ZXIgbG9uZyB0ZXJtIHN1cHBvcnQgaXMgbm90IGd1YXJhbnRlZWQuIE5lbzRqLUdyZW1saW4gbWF5Ci1iZSBkcm9wcGVkIGZyb20gZnV0dXJlIHZlcnNpb25zIG9mIFRpbmtlclBvcCBpZiBjb21wYXRpYmlsaXR5IGNhbm5vdCByZWFzb25hYmx5IGJlIG1haW50YWluZWQuIEFsdGVybmF0aXZlIFRpbmtlclBvcAotZW5hYmxlZCBncmFwaCBwcm92aWRlcnMgY2FuIGJlIGZvdW5kIG9uIHRoZSBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvcHJvdmlkZXJzLmh0bWxbVGlua2VyUG9wIHNpdGVdLgotCi1XQVJOSU5HOiBOZW80ai1HcmVtbGluIGNhbiB3b3JrIHdpdGggSkRLMTcsIGJ1dCByZXF1aXJlcyB0aGUgdXNlIG9mIHRoZSBgLS1hZGQtb3BlbnNgIGZsYWcgdG8gYmUgcHJvdmlkZWQgdG8gdGhlIEpWTQotYXMgZm9sbG93czogYC0tYWRkLW9wZW5zPWphdmEuYmFzZS9zdW4ubmlvLmNoPUFMTC1VTk5BTUVEYC4KLQotW3NvdXJjZSx4bWxdCi0tLS0tCi08ZGVwZW5kZW5jeT4KLSAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgPGFydGlmYWN0SWQ+bmVvNGotZ3JlbWxpbjwvYXJ0aWZhY3RJZD4KLSAgIDx2ZXJzaW9uPngueS56PC92ZXJzaW9uPgotPC9kZXBlbmRlbmN5PgotPCEtLSBuZW80ai10aW5rZXJwb3AtYXBpLWltcGwgaXMgTk9UIEFwYWNoZSAyIGxpY2Vuc2VkIC0gbW9yZSBpbmZvcm1hdGlvbiBiZWxvdyAtLT4KLTwhLS0gc3VwcG9ydHMgTmVvNGogMy40LjExIC0tPgotPGRlcGVuZGVuY3k+Ci0gIDxncm91cElkPm9yZy5uZW80ajwvZ3JvdXBJZD4KLSAgPGFydGlmYWN0SWQ+bmVvNGotdGlua2VycG9wLWFwaS1pbXBsPC9hcnRpZmFjdElkPgotICA8dmVyc2lvbj4wLjktMy40LjA8L3ZlcnNpb24+Ci08L2RlcGVuZGVuY3k+Ci0tLS0tCi0KLWxpbms6aHR0cDovL25lbzRqLmNvbVtOZW80aiwgSW5jLl0gYXJlIHRoZSBkZXZlbG9wZXJzIG9mIHRoZSBPTFRQLWJhc2VkIGxpbms6aHR0cDovL25lbzRqLmNvbVtOZW80aiBncmFwaCBkYXRhYmFzZV0uCi0KLVdBUk5JTkc6IFVubGVzcyB1bmRlciBhIGNvbW1lcmNpYWwgYWdyZWVtZW50IHdpdGggTmVvNGosIEluYy4sIE5lbzRqIGlzIGxpY2Vuc2VkCi1saW5rOmh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWZmZXJvX0dlbmVyYWxfUHVibGljX0xpY2Vuc2VbQUdQTF0uIFRoZSBgbmVvNGotZ3JlbWxpbmAgbW9kdWxlIGlzIGxpY2Vuc2VkIEFwYWNoZTIKLWJlY2F1c2UgaXQgb25seSByZWZlcmVuY2VzIHRoZSBBcGFjaGUyLWxpY2Vuc2VkIE5lbzRqIEFQSSAobm90IGl0cyBpbXBsZW1lbnRhdGlvbikuIE5vdGUgdGhhdCBuZWl0aGVyIHRoZQotPDxncmVtbGluLWNvbnNvbGUsR3JlbWxpbiBDb25zb2xlPj4gbm9yIDw8Z3JlbWxpbi1zZXJ2ZXIsR3JlbWxpbiBTZXJ2ZXI+PiBkaXN0cmlidXRlIHdpdGggdGhlIE5lbzRqIGltcGxlbWVudGF0aW9uCi1iaW5hcmllcy4gVG8gYWNjZXNzIHRoZSBiaW5hcmllcywgdXNlIHRoZSBgOmluc3RhbGxgIGNvbW1hbmQgdG8gZG93bmxvYWQgYmluYXJpZXMgZnJvbQotbGluazpodHRwOi8vc2VhcmNoLm1hdmVuLm9yZy9bTWF2ZW4gQ2VudHJhbCBSZXBvc2l0b3J5XS4KLQotSU1QT1JUQU5UOiBXaGVuIGNvbm5lY3RpbmcgdG8gZXhpc3RpbmcgTmVvNGogZGF0YWJhc2VzLCBlbnN1cmUgdGhhdCB0aGlzIGRhdGFiYXNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiBvZgotTmVvNGogdGhhdCBUaW5rZXJQb3AgY3VycmVudGx5IHN1cHBvcnRzIGluIHRoZSBgbmVvNGotdGlua2VycG9wLWFwaS1pbXBsYC4KLQotVElQOiBGb3IgY29uZmlndXJpbmcgR3JhcGUsIHRoZSBkZXBlbmRlbmN5IHJlc29sdmVyIG9mIEdyb292eSwgcGxlYXNlIHJlZmVyIHRvIHRoZSA8PGdyZW1saW4tYXBwbGljYXRpb25zLEdyZW1saW4gQXBwbGljYXRpb25zPj4gc2VjdGlvbi4KLQotW3NvdXJjZSxncm9vdnldCi0tLS0tCi1ncmVtbGluPiA6aW5zdGFsbCBvcmcuYXBhY2hlLnRpbmtlcnBvcCBuZW80ai1ncmVtbGluIHgueS56Ci09PT5Mb2FkZWQ6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcCwgbmVvNGotZ3JlbWxpbiwgeC55LnpdIC0gcmVzdGFydCB0aGUgY29uc29sZSB0byB1c2UgW3RpbmtlcnBvcC5uZW80al0KLWdyZW1saW4+IDpxCi0uLi4KLWdyZW1saW4+IDpwbHVnaW4gdXNlIHRpbmtlcnBvcC5uZW80agotPT0+dGlua2VycG9wLm5lbzRqIGFjdGl2YXRlZAotZ3JlbWxpbj4gZ3JhcGggPSBOZW80akdyYXBoLm9wZW4oJy90bXAvbmVvNGonKQotPT0+bmVvNGpncmFwaFtFbWJlZGRlZEdyYXBoRGF0YWJhc2UgWy90bXAvbmVvNGpdXQotLS0tLQotCi1USVA6IFRvIGhvc3QgTmVvNGogaW4gPDxncmVtbGluLXNlcnZlcixHcmVtbGluIFNlcnZlcj4+LCB0aGUgZGVwZW5kZW5jaWVzIG11c3QgZmlyc3QgYmUgImluc3RhbGxlZCIgb3Igb3RoZXJ3aXNlCi1jb3BpZWQgdG8gdGhlIEdyZW1saW4gU2VydmVyIHBhdGguIFRoZSBhdXRvbWF0ZWQgbWV0aG9kIGZvciBkb2luZyB0aGlzIHdvdWxkIGJlIHRvIGV4ZWN1dGUKLWBiaW4vZ3JlbWxpbi1zZXJ2ZXIuc2ggaW5zdGFsbCBvcmcuYXBhY2hlLnRpbmtlcnBvcCBuZW80ai1ncmVtbGluIHgueS56YC4gT25jZSBpbnN0YWxsZWQsIHRoZSBHcmVtbGluIFNlcnZlcgotY29uZmlndXJhdGlvbiBmaWxlIG11c3QgYmUgZWRpdGVkIHRvIGluY2x1ZGUgdGhlIGBOZW80akdyZW1saW5QbHVnaW5gIGFzIHNob3duIGluIGBjb25mL2dyZW1saW4tc2VydmVyLW5lbzRqLnlhbWxgLgotCi09PT0gSW5kaWNlcwotCi1OZW80aiAyLnggaW5kaWNlcyBsZXZlcmFnZSB2ZXJ0ZXggbGFiZWxzIHRvIHBhcnRpdGlvbiB0aGUgaW5kZXggc3BhY2UuIFRpbmtlclBvcCBkb2VzIG5vdCBwcm92aWRlIG1ldGhvZCBpbnRlcmZhY2VzCi1mb3IgZGVmaW5pbmcgc2NoZW1hcy9pbmRpY2VzIGZvciB0aGUgdW5kZXJseWluZyBncmFwaCBzeXN0ZW0uIFRodXMsIGluIG9yZGVyIHRvIGNyZWF0ZSBpbmRpY2VzLCBpdCBpcyBpbXBvcnRhbnQgdG8KLWNhbGwgdGhlIE5lbzRqIEFQSSBkaXJlY3RseS4KLQotTk9URTogYE5lbzRqR3JhcGhTdGVwYCB3aWxsIGF0dGVtcHQgdG8gZGlzY2VybiB3aGljaCBpbmRpY2VzIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyBhIHRyYXZlcnNhbCBvZiB0aGUgZm9ybSBgZy5WKCkuaGFzKClgLgotCi1UaGUgR3JlbWxpbi1Db25zb2xlIHNlc3Npb24gYmVsb3cgZGVtb25zdHJhdGVzIE5lbzRqIGluZGljZXMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gdGhlIE5lbzRqIGRvY3VtZW50YXRpb246Ci0KLSogTWFuaXB1bGF0aW5nIGluZGljZXMgd2l0aCBsaW5rOmh0dHA6Ly9uZW80ai5jb20vZG9jcy9kZXZlbG9wZXItbWFudWFsL2N1cnJlbnQvI3F1ZXJ5LXNjaGVtYS1pbmRleFtDeXBoZXJdLgotKiBNYW5pcHVsYXRpbmcgaW5kaWNlcyB3aXRoIHRoZSBOZW80aiBsaW5rOmh0dHA6Ly9uZW80ai5jb20vZG9jcy9zdGFibGUvdHV0b3JpYWxzLWphdmEtZW1iZWRkZWQtbmV3LWluZGV4Lmh0bWxbSmF2YSBBUEldLgotCi1bZ3JlbWxpbi1ncm9vdnldCi0tLS0tCi1ncmFwaCA9IE5lbzRqR3JhcGgub3BlbignL3RtcC9uZW80aicpCi1nID0gdHJhdmVyc2FsKCkud2l0aChncmFwaCkKLWdyYXBoLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpwZXJzb24obmFtZSkiKQotZ3JhcGgudHgoKS5jb21taXQoKSAgPDE+Ci1nLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnbWFya28nKQotZy5hZGRWKCdkb2cnKS5wcm9wZXJ0eSgnbmFtZScsJ3B1cHB5JykKLWcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS5oYXMoJ25hbWUnLCdtYXJrbycpLnZhbHVlcygnbmFtZScpCi1ncmFwaC5jbG9zZSgpCi0tLS0tCi0KLTwxPiBTY2hlbWEgbXV0YXRpb25zIG11c3QgaGFwcGVuIGluIGEgZGlmZmVyZW50IHRyYW5zYWN0aW9uIHRoYW4gZ3JhcGggbXV0YXRpb25zCi0KLUJlbG93IGRlbW9uc3RyYXRlcyB0aGUgcnVudGltZSBiZW5lZml0cyBvZiBpbmRpY2VzIGFuZCBkZW1vbnN0cmF0ZXMgaG93IGlmIHRoZXJlIGlzIG5vIGRlZmluZWQgaW5kZXggKG9ubHkgdmVydGV4Ci1sYWJlbHMpLCBhIGxpbmVhciBzY2FuIG9mIHRoZSB2ZXJ0ZXgtbGFiZWwgcGFydGl0aW9uIGlzIHN0aWxsIGZhc3RlciB0aGFuIGEgbGluZWFyIHNjYW4gb2YgYWxsIHZlcnRpY2VzLgotCi1bZ3JlbWxpbi1ncm9vdnldCi0tLS0tCi1ncmFwaCA9IE5lbzRqR3JhcGgub3BlbignL3RtcC9uZW80aicpCi1nID0gdHJhdmVyc2FsKCkud2l0aChncmFwaCkKLWcuaW8oJ2RhdGEvZ3JhdGVmdWwtZGVhZC54bWwnKS5yZWFkKCkuaXRlcmF0ZSgpCi1nLnR4KCkuY29tbWl0KCkKLWNsb2NrKDEwMDApIHtnLlYoKS5oYXNMYWJlbCgnYXJ0aXN0JykuaGFzKCduYW1lJywnR2FyY2lhJykuaXRlcmF0ZSgpfSAgPDE+Ci1ncmFwaC5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6YXJ0aXN0KG5hbWUpIikgPDI+Ci1nLnR4KCkuY29tbWl0KCkKLVRocmVhZC5zbGVlcCg1MDAwKSA8Mz4KLWNsb2NrKDEwMDApIHtnLlYoKS5oYXNMYWJlbCgnYXJ0aXN0JykuaGFzKCduYW1lJywnR2FyY2lhJykuaXRlcmF0ZSgpfSA8ND4KLWNsb2NrKDEwMDApIHtnLlYoKS5oYXMoJ25hbWUnLCdHYXJjaWEnKS5pdGVyYXRlKCl9IDw1PgotZ3JhcGguY3lwaGVyKCJEUk9QIElOREVYIE9OIDphcnRpc3QobmFtZSkiKSA8Nj4KLWcudHgoKS5jb21taXQoKQotZ3JhcGguY2xvc2UoKQotLS0tLQotCi08MT4gRmluZCBhbGwgYXJ0aXN0cyB3aG9zZSBuYW1lIGlzIEdhcmNpYSB3aGljaCBkb2VzIGEgbGluZWFyIHNjYW4gb2YgdGhlIGFydGlzdCB2ZXJ0ZXgtbGFiZWwgcGFydGl0aW9uLgotPDI+IENyZWF0ZSBhbiBpbmRleCBmb3IgYWxsIGFydGlzdCB2ZXJ0aWNlcyBvbiB0aGVpciBuYW1lIHByb3BlcnR5LgotPDM+IE5lbzRqIGluZGljZXMgYXJlIGV2ZW50dWFsbHkgY29uc2lzdGVudCBzbyB0aGlzIHN0YWxscyB0byBnaXZlIHRoZSBpbmRleCB0aW1lIHRvIHBvcHVsYXRlIGl0c2VsZi4KLTw0PiBGaW5kIGFsbCBhcnRpc3RzIHdob3NlIG5hbWUgaXMgR2FyY2lhIHdoaWNoIHVzZXMgdGhlIHByZS1kZWZpbmVkIHNjaGVtYSBpbmRleC4KLTw1PiBGaW5kIGFsbCB2ZXJ0aWNlcyB3aG9zZSBuYW1lIGlzIEdhcmNpYSB3aGljaCByZXF1aXJlcyBhIGxpbmVhciBzY2FuIG9mIGFsbCB0aGUgZGF0YSBpbiB0aGUgZ3JhcGguCi08Nj4gRHJvcCB0aGUgY3JlYXRlZCBpbmRleC4KLQotPT09IEN5cGhlcgotCi1pbWFnZTo6Z3JlbWxpbi1sb3Zlcy1jeXBoZXIucG5nW3dpZHRoPTQwMF0KLQotTmVvVGVjaG5vbG9neSBhcmUgdGhlIGNyZWF0b3JzIG9mIHRoZSBncmFwaCBwYXR0ZXJuLW1hdGNoIHF1ZXJ5IGxhbmd1YWdlIGxpbms6aHR0cHM6Ly9uZW80ai5jb20vZGV2ZWxvcGVyL2N5cGhlci1xdWVyeS1sYW5ndWFnZS9bQ3lwaGVyXS4KLUl0IGlzIHBvc3NpYmxlIHRvIGxldmVyYWdlIEN5cGhlciBmcm9tIHdpdGhpbiBHcmVtbGluIGJ5IHVzaW5nIHRoZSBgTmVvNGpHcmFwaC5jeXBoZXIoKWAgZ3JhcGggdHJhdmVyc2FsIG1ldGhvZC4KLQotW2dyZW1saW4tZ3Jvb3Z5XQotLS0tLQotZ3JhcGggPSBOZW80akdyYXBoLm9wZW4oJy90bXAvbmVvNGonKQotZyA9IHRyYXZlcnNhbCgpLndpdGgoZ3JhcGgpCi1nLmlvKCdkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5bycpLnJlYWQoKS5pdGVyYXRlKCkKLWdyYXBoLmN5cGhlcignTUFUQ0ggKGEge25hbWU6Im1hcmtvIn0pIFJFVFVSTiBhJykKLWdyYXBoLmN5cGhlcignTUFUQ0ggKGEge25hbWU6Im1hcmtvIn0pIFJFVFVSTiBhJykuc2VsZWN0KCdhJykub3V0KCdrbm93cycpLnZhbHVlcygnbmFtZScpCi1ncmFwaC5jbG9zZSgpCi0tLS0tCi0KLVRodXMsIGxpa2UgPDxtYXRjaC1zdGVwLGBtYXRjaCgpYD4+LXN0ZXAgaW4gR3JlbWxpbiwgaXQgaXMgcG9zc2libGUgdG8gZG8gYSBkZWNsYXJhdGl2ZSBwYXR0ZXJuIG1hdGNoIGFuZCB0aGVuIG1vdmUKLWJhY2sgaW50byBpbXBlcmF0aXZlIEdyZW1saW4uCi0KLVRJUDogRm9yIHRob3NlIGRldmVsb3BlcnMgdXNpbmcgPDxncmVtbGluLXNlcnZlcixHcmVtbGluIFNlcnZlcj4+IGFnYWluc3QgTmVvNGosIGl0IGlzIHBvc3NpYmxlIHRvIGRvIEN5cGhlciBxdWVyaWVzCi1ieSBzaW1wbHkgcGxhY2luZyB0aGUgQ3lwaGVyIHN0cmluZyBpbiBgZ3JhcGguY3lwaGVyKC4uLilgIGJlZm9yZSBzdWJtaXNzaW9uIHRvIHRoZSBzZXJ2ZXIuCi0KLT09PSBNdWx0aS1MYWJlbAotCi1UaW5rZXJQb3AgcmVxdWlyZXMgZXZlcnkgYEVsZW1lbnRgIHRvIGhhdmUgYSBzaW5nbGUsIGltbXV0YWJsZSBzdHJpbmcgbGFiZWwgKGkuZS4gYSBgVmVydGV4YCwgYEVkZ2VgLCBhbmQKLWBWZXJ0ZXhQcm9wZXJ0eWApLiBJbiBOZW80aiwgYSBgTm9kZWAgKHZlcnRleCkgY2FuIGhhdmUgYW4KLWxpbms6aHR0cDovL25lbzRqLmNvbS9kb2NzL2RldmVsb3Blci1tYW51YWwvY3VycmVudC8jZ3JhcGhkYi1uZW80ai1sYWJlbHNbYXJiaXRyYXJ5IG51bWJlciBvZiBsYWJlbHNdIHdoaWxlIGEgYFJlbGF0aW9uc2hpcGAKLShlZGdlKSBjYW4gaGF2ZSBvbmUgYW5kIG9ubHkgb25lLiBGdXJ0aGVybW9yZSwgaW4gTmVvNGosIGBOb2RlYCBsYWJlbHMgYXJlIG11dGFibGUgd2hpbGUgYFJlbGF0aW9uc2hpcGAgbGFiZWxzIGFyZQotbm90LiBJbiBvcmRlciB0byBoYW5kbGUgdGhpcyBtaXNtYXRjaCwgdGhyZWUgYE5lbzRqVmVydGV4YCBzcGVjaWZpYyBtZXRob2RzIGV4aXN0IGluIE5lbzRqLUdyZW1saW4uCi0KLVtzb3VyY2UsamF2YV0KLXB1YmxpYyBTZXQ8U3RyaW5nPiBsYWJlbHMoKSAvLyBnZXQgYWxsIHRoZSBsYWJlbHMgb2YgdGhlIHZlcnRleAotcHVibGljIHZvaWQgYWRkTGFiZWwoU3RyaW5nIGxhYmVsKSAvLyBhZGQgYSBsYWJlbCB0byB0aGUgdmVydGV4Ci1wdWJsaWMgdm9pZCByZW1vdmVMYWJlbChTdHJpbmcgbGFiZWwpIC8vIHJlbW92ZSBhIGxhYmVsIGZyb20gdGhlIHZlcnRleAotCi1BbiBleGFtcGxlIHVzZSBjYXNlIGlzIHByZXNlbnRlZCBiZWxvdy4KLQotW2dyZW1saW4tZ3Jvb3Z5XQotLS0tLQotZ3JhcGggPSBOZW80akdyYXBoLm9wZW4oJy90bXAvbmVvNGonKQotZyA9IHRyYXZlcnNhbCgpLndpdGgoZ3JhcGgpCi12ZXJ0ZXggPSAoTmVvNGpWZXJ0ZXgpIGcuYWRkVignaHVtYW46OmFuaW1hbCcpLm5leHQoKSA8MT4KLXZlcnRleC5sYWJlbCgpIDwyPgotdmVydGV4LmxhYmVscygpIDwzPgotdmVydGV4LmFkZExhYmVsKCdvcmdhbmlzbScpIDw0PgotdmVydGV4LmxhYmVsKCkKLXZlcnRleC5yZW1vdmVMYWJlbCgnaHVtYW4nKSA8NT4KLXZlcnRleC5sYWJlbHMoKQotdmVydGV4LmFkZExhYmVsKCdvcmdhbmlzbScpIDw2PgotdmVydGV4LmxhYmVscygpCi12ZXJ0ZXgucmVtb3ZlTGFiZWwoJ2h1bWFuJykgPDc+Ci12ZXJ0ZXgubGFiZWwoKQotZy5WKCkuaGFzKGxhYmVsLCdvcmdhbmlzbScpIDw4PgotZy5WKCkuaGFzKGxhYmVsLG9mKCdvcmdhbmlzbScpKSA8OT4KLWcuVigpLmhhcyhsYWJlbCxvZignb3JnYW5pc20nKSkuaGFzKGxhYmVsLG9mKCdhbmltYWwnKSkKLWcuVigpLmhhcyhsYWJlbCxvZignb3JnYW5pc20nKS5hbmQob2YoJ2FuaW1hbCcpKSkKLWdyYXBoLmNsb3NlKCkKLS0tLS0KLQotPDE+IFR5cGVjYXN0aW5nIHRvIGEgYE5lbzRqVmVydGV4YCBpcyBvbmx5IHJlcXVpcmVkIGluIEphdmEuCi08Mj4gVGhlIHN0YW5kYXJkIGBWZXJ0ZXgubGFiZWwoKWAgbWV0aG9kIHJldHVybnMgYWxsIHRoZSBsYWJlbHMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIGNvbmNhdGVuYXRlZCB1c2luZyBgOjpgLgotPDM+IGBOZW80alZlcnRleC5sYWJlbHMoKWAgbWV0aG9kIHJldHVybnMgdGhlIGluZGl2aWR1YWwgbGFiZWxzIGFzIGEgc2V0LgotPDQ+IGBOZW80alZlcnRleC5hZGRMYWJlbCgpYCBtZXRob2QgYWRkcyBhIHNpbmdsZSBsYWJlbC4KLTw1PiBgTmVvNGpWZXJ0ZXgucmVtb3ZlTGFiZWwoKWAgbWV0aG9kIHJlbW92ZXMgYSBzaW5nbGUgbGFiZWwuCi08Nj4gTGFiZWxzIGFyZSB1bmlxdWUgYW5kIHRodXMgZHVwbGljYXRlIGxhYmVscyBkb24ndCBleGlzdC4KLTw3PiBJZiBhIGxhYmVsIHRoYXQgZG9lcyBub3QgZXhpc3QgaXMgcmVtb3ZlZCwgbm90aGluZyBoYXBwZW5zLgotPDg+IGBQLmVxKClgIGRvZXMgYSBmdWxsIHN0cmluZyBtYXRjaCBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiBtdWx0aS1sYWJlbHMgYXJlIG5vdCBsZXZlcmFnZWQuCi08OT4gYExhYmVsUC5vZigpYCBpcyBzcGVjaWZpYyB0byBgTmVvNGpHcmFwaGAgYW5kIHVzZWQgZm9yIG11bHRpLWxhYmVsIG1hdGNoaW5nLgotCi1JTVBPUlRBTlQ6IGBMYWJlbFAub2YoKWAgaXMgb25seSByZXF1aXJlZCBpZiBtdWx0aS1sYWJlbHMgYXJlIGxldmVyYWdlZC4gYExhYmVsUC5vZigpYCBpcyB1c2VkIHdoZW4KLWZpbHRlcmluZy9sb29raW5nLXVwIHZlcnRpY2VzIGJ5IHRoZWlyIGxhYmVsKHMpIGFzIHRoZSBzdGFuZGFyZCBgUC5lcSgpYCBkb2VzIGEgZGlyZWN0IG1hdGNoIG9uIHRoZSBgOjpgLXJlcHJlc2VudGF0aW9uCi1vZiBgdmVydGV4LmxhYmVsKClgCi0KLT09PSBDb25maWd1cmF0aW9uCi0KLVRoZSBwcmV2aW91cyBleGFtcGxlcyBzaG93ZWQgaG93IHRvIGNyZWF0ZSBhIGBOZW80akdyYXBoYCB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGJ1dCBOZW80aiBoYXMgbWFueSBvdGhlcgotb3B0aW9ucyB0byBpbml0aWFsaXplIGl0IHRoYXQgYXJlIG5hdGl2ZSB0byBOZW80ai4gSW4gb3JkZXIgdG8gZXhwb3NlIHRob3NlLCBgTmVvNGpHcmFwaGAgaGFzIGFuIGBvcGVuKENvbmZpZ3VyYXRpb24pYAotbWV0aG9kIHdoaWNoIHRha2VzIGEgc3RhbmRhcmQgQXBhY2hlIENvbmZpZ3VyYXRpb24gb2JqZWN0LiBUaGUgc2FtZSBjYW4gYmUgc2FpZCBvZiB0aGUgc3RhbmRhcmQgbWV0aG9kIGZvciBjcmVhdGluZwotYEdyYXBoYCBpbnN0YW5jZXMgd2l0aCBgR3JhcGhGYWN0b3J5YC4gRWFjaCBjb25maWd1cmF0aW9uIGtleSB0aGF0IE5lbzRqIGhhcyBtdXN0IHNpbXBseSBiZSBwcmVmaXhlZCB3aXRoCi1gZ3JlbWxpbi5uZW80ai5jb25mLmAgYW5kIHRoZSBzdWZmaXggY29uZmlndXJhdGlvbiBrZXkgd2lsbCBiZSBwYXNzZWQgdGhyb3VnaCB0byBOZW80ai4KLQotTk9URTogR3JlbWxpbiBTZXJ2ZXIgdXNlcyBgR3JhcGhGYWN0b3J5YCB0byBpbnN0YW50aWF0ZSB0aGUgYEdyYXBoYCBpbnN0YW5jZXMgaXQgbWFuYWdlcywgc28gdGhlIGV4YW1wbGUgYmVsb3cgaXMgYWxzbwotcmVsZXZhbnQgZm9yIHRoYXQgcHVycG9zZSBhcyB3ZWxsLgotCi1Gb3IgZXhhbXBsZSwgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGZpbGUgY2FsbGVkIGBuZW80ai5wcm9wZXJ0aWVzYCB0aGF0IHNldHMgdGhlIE5lbzRqCi1gZGJtcy5pbmRleF9zYW1wbGluZy5iYWNrZ3JvdW5kX2VuYWJsZWRgIHNldHRpbmcgbWlnaHQgbG9vayBsaWtlOgotCi1bc291cmNlLHByb3BlcnRpZXNdCi0tLS0tCi1ncmVtbGluLmdyYXBoPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGgKLWdyZW1saW4ubmVvNGouZGlyZWN0b3J5PS90bXAvbmVvNGoKLWdyZW1saW4ubmVvNGouY29uZi5kYm1zLmluZGV4X3NhbXBsaW5nLmJhY2tncm91bmRfZW5hYmxlZD10cnVlCi0tLS0tCi0KLXdoaWNoIGNhbiB0aGVuIGJlIHVzZWQgYXMgZm9sbG93czoKLQotW3NvdXJjZSx0ZXh0XQotLS0tLQotZ3JlbWxpbj4gZ3JhcGggPSBHcmFwaEZhY3Rvcnkub3BlbignbmVvNGoucHJvcGVydGllcycpCi09PT5uZW80amdyYXBoW2NvbW11bml0eSBzaW5nbGUgWy90bXAvbmVvNGpdXQotZ3JlbWxpbj4gZyA9IHRyYXZlcnNhbCgpLndpdGgoZ3JhcGgpCi09PT5ncmFwaHRyYXZlcnNhbHNvdXJjZVtuZW80amdyYXBoW2NvbW11bml0eSBzaW5nbGUgWy90bXAvbmVvNGpdXSwgc3RhbmRhcmRdCi0tLS0tCi0KLUhhdmluZyB0aGlzIGFiaWxpdHkgdG8gc2V0IHN0YW5kYXJkIE5lbzRqIGNvbmZpZ3VyYXRpb25zIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJldHRlciBjb250cm9sIHRoZSBpbml0aWFsaXphdGlvbiBvZgotTmVvNGogaXRzZWxmIGFuZCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBlbmFibGUgY2VydGFpbiBmZWF0dXJlcyB0aGF0IHdvdWxkIG5vdCBvdGhlcndpc2UgYmUgYWNjZXNzaWJsZS4KLQotPT09IEJvbHQgQ29uZmlndXJhdGlvbgotCi1XaGlsZSBgTmVvNGpHcmFwaGAgZW5hYmxlcyBHcmVtbGluIGJhc2VkIHF1ZXJpZXMsIHVzZXJzIG1heSBmaW5kIGl0IGhlbHBmdWwgdG8gYWxzbyBiZSBhYmxlIHRvIGNvbm5lY3QgdG8gdGhhdCBncmFwaAotd2l0aCBuYXRpdmUgTmVvNGogZHJpdmVycyBhbmQgb3RoZXIgdG9vbHMgZnJvbSB0aGF0IHNwYWNlLiBJdCBpcyBwb3NzaWJsZSB0byBlbmFibGUgdGhlCi1saW5rOmh0dHBzOi8vYm9sdHByb3RvY29sLm9yZy9bQm9sdCBQcm90b2NvbF0gYXMgYSB3YXkgdG8gZG8gdGhpczoKLQotW3NvdXJjZSxwcm9wZXJ0aWVzXQotLS0tLQotZ3JlbWxpbi5ncmFwaD1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoCi1ncmVtbGluLm5lbzRqLmRpcmVjdG9yeT0vdG1wL25lbzRqCi1ncmVtbGluLm5lbzRqLmNvbmYuZGJtcy5jb25uZWN0b3IuMC50eXBlPUJPTFQKLWdyZW1saW4ubmVvNGouY29uZi5kYm1zLmNvbm5lY3Rvci4wLmVuYWJsZWQ9dHJ1ZQotZ3JlbWxpbi5uZW80ai5jb25mLmRibXMuY29ubmVjdG9yLjAuYWRkcmVzcz1sb2NhbGhvc3Q6NzY4NwotLS0tLQotCi1UaGlzIGNvbmZpZ3VyYXRpb24gaXMgZXNwZWNpYWxseSByZWxldmFudCB0byBHcmVtbGluIFNlcnZlciB3aGVyZSBvbmUgbWlnaHQgd2FudCB0byBjb25uZWN0IHRvIHRoZSBzYW1lIGdyYXBoIGluc3RhbmNlCi13aXRoIGJvdGggR3JlbWxpbiBhbmQgQ3lwaGVyLgotCi1bc291cmNlLHRleHRdCi0tLS0tCi1ncmVtbGluPiA6aW5zdGFsbCBvcmcubmVvNGouZHJpdmVyIG5lbzRqLWphdmEtZHJpdmVyIDEuNy4yCi09PT5Mb2FkZWQ6IFtvcmcubmVvNGouZHJpdmVyLCBuZW80ai1qYXZhLWRyaXZlciwgMS43LjJdCi0uLi4gLy8gcmVzdGFydCBHcmVtbGluIENvbnNvbGUKLWdyZW1saW4+IGltcG9ydCBvcmcubmVvNGouZHJpdmVyLnYxLioKLT09Pm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLiosIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuKiwgLi4uIG9yZy5uZW80ai5kcml2ZXIudjEuKgotZ3JlbWxpbj4gZHJpdmVyID0gR3JhcGhEYXRhYmFzZS5kcml2ZXIoICJib2x0Oi8vbG9jYWxob3N0Ojc2ODciLCBBdXRoVG9rZW5zLmJhc2ljKCJuZW80aiIsICJuZW80aiIpKQotT2N0IDI4LCAyMDE5IDM6Mjg6MjAgUE0gb3JnLm5lbzRqLmRyaXZlci5pbnRlcm5hbC5sb2dnaW5nLkpVTG9nZ2VyIGluZm8KLUlORk86IERpcmVjdCBkcml2ZXIgaW5zdGFuY2UgMTM4NTE0MDEwNyBjcmVhdGVkIGZvciBzZXJ2ZXIgYWRkcmVzcyBsb2NhbGhvc3Q6NzY4NwotPT0+b3JnLm5lbzRqLmRyaXZlci5pbnRlcm5hbC5JbnRlcm5hbERyaXZlckA1MjhmOGY4YgotZ3JlbWxpbj4gc2Vzc2lvbiA9IGRyaXZlci5zZXNzaW9uKCkKLT09Pm9yZy5uZW80ai5kcml2ZXIuaW50ZXJuYWwuTmV0d29ya1Nlc3Npb25AZjNmY2Q1OQotZ3JlbWxpbj4gc2Vzc2lvbi5ydW4oICJDUkVBVEUgKGE6cGVyc29uIHtuYW1lOiB7bmFtZX0sIGFnZToge2FnZX19KSIsCi0uLi4uLi4xPiAgICAgICAgICAgICAgICAgVmFsdWVzLnBhcmFtZXRlcnMoIm5hbWUiLCAic3RlcGhlbiIsICJhZ2UiLCAyOSkpCi1ncmVtbGluPiA6cmVtb3RlIGNvbm5lY3QgdGlua2VycG9wLnNlcnZlciBjb25mL3JlbW90ZS55YW1sCi09PT5Db25maWd1cmVkIGxvY2FsaG9zdC8xMjcuMC4wLjE6ODE4MgotZ3JlbWxpbj4gOnJlbW90ZSBjb25zb2xlCi09PT5BbGwgc2NyaXB0cyB3aWxsIG5vdyBiZSBzZW50IHRvIEdyZW1saW4gU2VydmVyIC0gW2xvY2FsaG9zdC8xMjcuMC4wLjE6ODE4Ml0gLSB0eXBlICc6cmVtb3RlIGNvbnNvbGUnIHRvIHJldHVybiB0byBsb2NhbCBtb2RlCi1ncmVtbGluPiBnLlYoKS5lbGVtZW50TWFwKCkKLT09PntpZD0wLCBsYWJlbD1wZXJzb24sIG5hbWU9c3RlcGhlbiwgYWdlPTI5fQotLS0tLQotCi09PT0gSGlnaCBBdmFpbGFiaWxpdHkgQ29uZmlndXJhdGlvbgotCi1pbWFnZTpuZW80ai1oYS5wbmdbd2lkdGg9NDAwLGZsb2F0PXJpZ2h0XSBUaW5rZXJQb3Agc3VwcG9ydHMgcnVubmluZyBOZW80aiB3aXRoIGl0cyBmYXVsdCB0b2xlcmFudCBtYXN0ZXItc2xhdmUKLXJlcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24sIHJlZmVycmVkIHRvIGFzIGl0cwotbGluazpodHRwOi8vbmVvNGouY29tL2RvY3Mvb3BlcmF0aW9ucy1tYW51YWwvY3VycmVudC8jX25lbzRqX2NsdXN0ZXJfaW5zdGFsbFtIaWdoIEF2YWlsYWJpbGl0eSAoSEEpIGNsdXN0ZXJdLiBGcm9tIHRoZQotVGlua2VyUG9wIHBlcnNwZWN0aXZlLCBjb25maWd1cmluZyBmb3IgSEEgaXMgbm90IHRoYXQgZGlmZmVyZW50IHRoYW4gY29uZmlndXJpbmcgZm9yIGVtYmVkZGVkIG1vZGUgYXMgc2hvd24gYWJvdmUuIFRoZQotbWFpbiBkaWZmZXJlbmNlIGlzIHRoZSB1c2FnZSBvZiBIQSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgdGhlIGNsdXN0ZXIuIE9uY2UgY29ubmVjdGVkIHRvIGEgY2x1c3RlciwgdXNhZ2UKLWZyb20gdGhlIFRpbmtlclBvcCBwZXJzcGVjdGl2ZSBpcyBsYXJnZWx5IHRoZSBzYW1lLgotCi1JbiBjb25maWd1cmluZyBmb3IgSEEgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nIHRvIHJlYWxpemUgaXMgdGhhdCBhbGwgTmVvNGogSEEgc2V0dGluZ3MgYXJlIHNpbXBseSBwYXNzZWQgdGhyb3VnaCB0aGUKLVRpbmtlclBvcCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGdpdmVuIHRvIHRoZSBgR3JhcGhGYWN0b3J5Lm9wZW4oKWAgb3IgYE5lbzRqLm9wZW4oKWAgbWV0aG9kcy4gRm9yIGV4YW1wbGUsIHRvCi1wcm92aWRlIHRoZSBhbGwtaW1wb3J0YW50IGBoYS5zZXJ2ZXJfaWRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRocm91Z2ggVGlua2VyUG9wLCBzaW1wbHkgcHJlZml4IHRoYXQga2V5IHdpdGggdGhlCi1UaW5rZXJQb3AgTmVvNGoga2V5IG9mIGBncmVtbGluLm5lbzRqLmNvbmZgLgotCi1UaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgZGVtb25zdHJhdGVzIG9uZSBvZiB0aGUgdGhyZWUgY29uZmlndXJhdGlvbiBmaWxlcyByZXF1aXJlZCB0byBzZXR1cCBhIHNpbXBsZSB0aHJlZSBub2RlIEhBCi1jbHVzdGVyIG9uIHRoZSBzYW1lIG1hY2hpbmUgaW5zdGFuY2U6Ci0KLVtzb3VyY2UscHJvcGVydGllc10KLS0tLS0KLWdyZW1saW4uZ3JhcGg9b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaAotZ3JlbWxpbi5uZW80ai5kaXJlY3Rvcnk9L3RtcC9uZW80ai5zZXJ2ZXIxCi1ncmVtbGluLm5lbzRqLmNvbmYuaGEuc2VydmVyX2lkPTEKLWdyZW1saW4ubmVvNGouY29uZi5oYS5pbml0aWFsX2hvc3RzPWxvY2FsaG9zdDo1MDAxXCxsb2NhbGhvc3Q6NTAwMlwsbG9jYWxob3N0OjUwMDMKLWdyZW1saW4ubmVvNGouY29uZi5oYS5ob3N0LmNvb3JkaW5hdGlvbj1sb2NhbGhvc3Q6NTAwMQotZ3JlbWxpbi5uZW80ai5jb25mLmhhLmhvc3QuZGF0YT1sb2NhbGhvc3Q6NjAwMQotLS0tLQotCi1Bc3N1bWluZyB0aGUgaW50ZW50IGlzIHRvIGNvbmZpZ3VyZSB0aGlzIGNsdXN0ZXIgY29tcGxldGVseSB3aXRoaW4gVGlua2VyUG9wIChwZXJoYXBzIHdpdGhpbiB0aHJlZSBzZXBhcmF0ZSBHcmVtbGluCi1TZXJ2ZXIgaW5zdGFuY2VzKSwgdGhlIG90aGVyIHR3byBjb25maWd1cmF0aW9uIGZpbGVzIHdpbGwgYmUgcXVpdGUgc2ltaWxhci4gVGhlIHNlY29uZCB3aWxsIGJlOgotCi1bc291cmNlLHByb3BlcnRpZXNdCi0tLS0tCi1ncmVtbGluLmdyYXBoPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGgKLWdyZW1saW4ubmVvNGouZGlyZWN0b3J5PS90bXAvbmVvNGouc2VydmVyMgotZ3JlbWxpbi5uZW80ai5jb25mLmhhLnNlcnZlcl9pZD0yCi1ncmVtbGluLm5lbzRqLmNvbmYuaGEuaW5pdGlhbF9ob3N0cz1sb2NhbGhvc3Q6NTAwMVwsbG9jYWxob3N0OjUwMDJcLGxvY2FsaG9zdDo1MDAzCi1ncmVtbGluLm5lbzRqLmNvbmYuaGEuaG9zdC5jb29yZGluYXRpb249bG9jYWxob3N0OjUwMDIKLWdyZW1saW4ubmVvNGouY29uZi5oYS5ob3N0LmRhdGE9bG9jYWxob3N0OjYwMDIKLS0tLS0KLQotYW5kIHRoZSB0aGlyZCB3aWxsIGJlOgotCi1bc291cmNlLHByb3BlcnRpZXNdCi0tLS0tCi1ncmVtbGluLmdyYXBoPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGgKLWdyZW1saW4ubmVvNGouZGlyZWN0b3J5PS90bXAvbmVvNGouc2VydmVyMwotZ3JlbWxpbi5uZW80ai5jb25mLmhhLnNlcnZlcl9pZD0zCi1ncmVtbGluLm5lbzRqLmNvbmYuaGEuaW5pdGlhbF9ob3N0cz1sb2NhbGhvc3Q6NTAwMVwsbG9jYWxob3N0OjUwMDJcLGxvY2FsaG9zdDo1MDAzCi1ncmVtbGluLm5lbzRqLmNvbmYuaGEuaG9zdC5jb29yZGluYXRpb249bG9jYWxob3N0OjUwMDMKLWdyZW1saW4ubmVvNGouY29uZi5oYS5ob3N0LmRhdGE9bG9jYWxob3N0OjYwMDMKLS0tLS0KLQotSU1QT1JUQU5UOiBUaGUgYmFja3NsYXNoZXMgaW4gdGhlIHZhbHVlcyBwcm92aWRlZCB0byBgZ3JlbWxpbi5uZW80ai5jb25mLmhhLmluaXRpYWxfaG9zdHNgIHByZXZlbnQgdGhhdCBjb25maWd1cmF0aW9uCi1zZXR0aW5nIGFzIGJlaW5nIGludGVycHJldGVkIGFzIGEgYExpc3RgLgotCi1DcmVhdGUgdGhyZWUgc2VwYXJhdGUgR3JlbWxpbiBTZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgcG9pbnQgZWFjaCBhdCBvbmUgb2YgdGhlc2UgTmVvNGogZmlsZXMuIFNpbmNlIHRoZXNlIEdyZW1saW4KLVNlcnZlciBpbnN0YW5jZXMgd2lsbCBiZSBydW5uaW5nIG9uIHRoZSBzYW1lIG1hY2hpbmUsIGVuc3VyZSB0aGF0IGVhY2ggR3JlbWxpbiBTZXJ2ZXIgaW5zdGFuY2UgaGFzIGEgdW5pcXVlIGBwb3J0YAotc2V0dGluZyBpbiB0aGF0IEdyZW1saW4gU2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gU3RhcnQgZWFjaCBHcmVtbGluIFNlcnZlciBpbnN0YW5jZSB0byBicmluZyB0aGUgSEEgY2x1c3RlciBvbmxpbmUuCi0KLU5PVEU6IGBOZW80akdyYXBoYCBpbnN0YW5jZXMgd2lsbCBibG9jayB1bnRpbCBhbGwgbm9kZXMgam9pbiB0aGUgY2x1c3Rlci4KLQotTmVpdGhlciBHcmVtbGluIFNlcnZlciBub3IgTmVvNGogd2lsbCBzaGFyZSB0cmFuc2FjdGlvbnMgYWNyb3NzIHRoZSBjbHVzdGVyLiBCZSBzdXJlIHRvIGVpdGhlciB1c2UgR3JlbWxpbiBTZXJ2ZXIKLW1hbmFnZWQgdHJhbnNhY3Rpb25zIG9yLCBpZiB1c2luZyBhIHNlc3Npb24gd2l0aG91dCB0aGF0IG9wdGlvbiwgZW5zdXJlIHRoYXQgYWxsIHJlcXVlc3RzIGFyZSBiZWluZyByb3V0ZWQgdG8gdGhlCi1zYW1lIHNlcnZlci4KLQotVGhpcyBleGFtcGxlIGRpc2N1c3NlZCB1c2Ugb2YgR3JlbWxpbiBTZXJ2ZXIgdG8gZGVtb25zdHJhdGUgdGhlIEhBIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCBpcyBhbHNvIGVhc3kgdG8gc2V0dXAgd2l0aAotdGhyZWUgR3JlbWxpbiBDb25zb2xlIGluc3RhbmNlcy4gU2ltcGx5IHN0YXJ0IHRocmVlIEdyZW1saW4gQ29uc29sZSBpbnN0YW5jZXMgYW5kIHVzZSBgR3JhcGhGYWN0b3J5YCB0byByZWFkIHRob3NlCi1jb25maWd1cmF0aW9uIGZpbGVzIHRvIGZvcm0gdGhlIGNsdXN0ZXIuIEZ1cnRoZXJtb3JlLCBrZWVwIGluIG1pbmQgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgR3JlbWxpbiBDb25zb2xlIGpvaW4KLWEgY2x1c3RlciBoYW5kbGVkIGJ5IHR3byBHcmVtbGluIFNlcnZlcnMgb3IgTmVvNGogRW50ZXJwcmlzZS4gVGhlIG9ubHkgbGltaXRzIGFzIHRvIGhvdyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUKLXV0aWxpemVkIGFyZSBwcmVzY3JpYmVkIGJ5IE5lbzRqIGl0c2VsZi4gUGxlYXNlIHJlZmVyIHRvIHRoZWlyCi1saW5rOmh0dHA6Ly9uZW80ai5jb20vZG9jcy9vcGVyYXRpb25zLW1hbnVhbC9jdXJyZW50LyNoYS1zZXR1cC10dXRvcmlhbFtkb2N1bWVudGF0aW9uXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cKLXRoaXMgZmVhdHVyZSB3b3Jrcy4KZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtc3BhcmsuYXNjaWlkb2MgYi9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLXNwYXJrLmFzY2lpZG9jCmluZGV4IGRlN2FkODIuLjc3NzhlYjUgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtc3BhcmsuYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvcmVmZXJlbmNlL2ltcGxlbWVudGF0aW9ucy1zcGFyay5hc2NpaWRvYwpAQCAtNDMsNyArNDMsMTAgQEAKIAogT25jZSB0aGUgYGxpYi9gIGRpcmVjdG9yeSBpcyBkaXN0cmlidXRlZCwgYFNwYXJrR3JhcGhDb21wdXRlcmAgY2FuIGJlIHVzZWQgYXMgZm9sbG93cy4KIAotW2dyZW1saW4tZ3Jvb3Z5XQorV0FSTklORzogVGhlIEhhZG9vcCBhbmQgU3BhcmsgbW9kdWxlcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSA0LjAuMC1iZXRhLjIgZGlzdHJpYnV0aW9uLiBUaGVzZSBleGFtcGxlcyB3aWxsCitiZSByZXN0b3JlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCitbc291cmNlLGdyb292eV0KIC0tLS0KIGdyYXBoID0gR3JhcGhGYWN0b3J5Lm9wZW4oJ2NvbmYvaGFkb29wL2hhZG9vcC1ncnlvLnByb3BlcnRpZXMnKQogZyA9IHRyYXZlcnNhbCgpLndpdGgoZ3JhcGgpLndpdGhDb21wdXRlcihTcGFya0dyYXBoQ29tcHV0ZXIpCkBAIC01MSwxNSArNTQsNyBAQAogZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCduYW1lJykKIC0tLS0KIAotRm9yIHVzaW5nIGxhbWJkYXMgaW4gR3JlbWxpbi1Hcm9vdnksIHNpbXBseSBwcm92aWRlIGA6cmVtb3RlIGNvbm5lY3RgIGEgYFRyYXZlcnNhbFNvdXJjZWAgd2hpY2ggbGV2ZXJhZ2VzIFNwYXJrR3JhcGhDb21wdXRlci4KLQotW2dyZW1saW4tZ3Jvb3Z5XQotLS0tLQotZ3JhcGggPSBHcmFwaEZhY3Rvcnkub3BlbignY29uZi9oYWRvb3AvaGFkb29wLWdyeW8ucHJvcGVydGllcycpCi1nID0gdHJhdmVyc2FsKCkud2l0aChncmFwaCkud2l0aENvbXB1dGVyKFNwYXJrR3JhcGhDb21wdXRlcikKLTpyZW1vdGUgY29ubmVjdCB0aW5rZXJwb3AuaGFkb29wIGdyYXBoIGcKLTo+IGcuVigpLmdyb3VwKCkuYnl7aXQudmFsdWUoJ25hbWUnKVsxXX0uYnkoJ25hbWUnKQotLS0tLQorTk9URTogV2Ugbm8gbG9uZ2VyIHN1cHBvcnQgbGFtYmRhIGV4ZWN1dGlvbnMgdmlhIGA6cmVtb3RlYCBvbiB0aGUgR3JlbWxpbiBDb25zb2xlIHN0YXJ0aW5nIGluIFRpbmtlclBvcCA0LgogCiBUaGUgYFNwYXJrR3JhcGhDb21wdXRlcmAgYWxnb3JpdGhtIGxldmVyYWdlcyBTcGFyaydzIGNhY2hpbmcgYWJpbGl0aWVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGRhdGEgc2h1ZmZsZWQgYWNyb3NzCiB0aGUgd2lyZSBvbiBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgPDx2ZXJ0ZXhwcm9ncmFtLGBWZXJ0ZXhQcm9ncmFtYD4+LiBXaGVuIHRoZSBncmFwaCBpcyBsb2FkZWQgYXMgYSBTcGFyayBSREQKQEAgLTEzNSw3ICsxMzAsNyBAQAogVGhlIGV4YW1wbGUgYmVsb3cgdGFrZXMgYSBIYWRvb3AgZ3JhcGggYXMgdGhlIGlucHV0IChpbiBgR3J5b0lucHV0Rm9ybWF0YCkgYW5kIGV4cG9ydHMgaXQgYXMgYSBHcmFwaFNPTiBmaWxlCiAoYEdyYXBoU09OT3V0cHV0Rm9ybWF0YCkuCiAKLVtncmVtbGluLWdyb292eV0KK1tzb3VyY2UsZ3Jvb3Z5XQogLS0tLQogaGRmcy5jb3B5RnJvbUxvY2FsKCdkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5bycsICd0aW5rZXJwb3AtbW9kZXJuLmtyeW8nKQogZ3JhcGggPSBHcmFwaEZhY3Rvcnkub3BlbignY29uZi9oYWRvb3AvaGFkb29wLWdyeW8ucHJvcGVydGllcycpCmRpZmYgLS1naXQgYS9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLXRpbmtlcmdyYXBoLmFzY2lpZG9jIGIvZG9jcy9zcmMvcmVmZXJlbmNlL2ltcGxlbWVudGF0aW9ucy10aW5rZXJncmFwaC5hc2NpaWRvYwppbmRleCAxZGM3YjEyLi40MWUzZTliIDEwMDY0NAotLS0gYS9kb2NzL3NyYy9yZWZlcmVuY2UvaW1wbGVtZW50YXRpb25zLXRpbmtlcmdyYXBoLmFzY2lpZG9jCisrKyBiL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbXBsZW1lbnRhdGlvbnMtdGlua2VyZ3JhcGguYXNjaWlkb2MKQEAgLTI3Nyw3ICsyNzcsNyBAQAogLy8gc3VpdGFibGUgdGVzdCBncmFwaCByZXBsYWNlbWVudCBmb3Igb3VyIGFjdHVhbCBwcm9kdWN0aW9uIGdyYXBoLgogcHVibGljIGNsYXNzIEdyYXBoU2VydmljZVRlc3QgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRpbmtlclRyYW5zYWN0aW9uR3JhcGggZ3JhcGggPSBUaW5rZXJUcmFuc2FjdGlvbkdyYXBoLm9wZW4oKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsLndpdGgoZ3JhcGgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKGdyYXBoKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFNlcnZpY2Ugc2VydmljZSA9IG5ldyBHcmFwaFNlcnZpY2UoZyk7CiAKICAgICBAVGVzdApAQCAtMjk3LDggKzI5Nyw4IEBACiAvLyB3aXRoIHRoaXMgYXBwcm9hY2ggeW91IGNvdWxkIGFsc28gY29uZmlndXJlIHlvdXIgcHJvZHVjdGlvbiBncmFwaCBkaXJlY3RseSBvciB1c2UgY3VzdG9tCiAvLyBidWlsZCBvcHRpb25zIHRvIHRyaWdnZXIgZGlmZmVyZW50IHRlc3QgY29uZmlndXJhdGlvbnMgZm9yIGEgbW9yZSBkeW5hbWljIGFwcHJvYWNoCiBwdWJsaWMgY2xhc3MgR3JhcGhTZXJ2aWNlVGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbC53aXRoKAotICAgICAgICAgICAgbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aCgKKyAgICAgICAgICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoImxvY2FsaG9zdCIsIDgxODIpKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFNlcnZpY2Ugc2VydmljZSA9IG5ldyBHcmFwaFNlcnZpY2UoZyk7CiAKICAgICBAVGVzdApkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVmZXJlbmNlL2luZGV4LmFzY2lpZG9jIGIvZG9jcy9zcmMvcmVmZXJlbmNlL2luZGV4LmFzY2lpZG9jCmluZGV4IDk4ZjUwOTAuLjgwZjExMTIgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbmRleC5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWZlcmVuY2UvaW5kZXguYXNjaWlkb2MKQEAgLTQxLDcgKzQxLDYgQEAKIAogaW5jbHVkZTo6aW1wbGVtZW50YXRpb25zLWludHJvLmFzY2lpZG9jW10KIGluY2x1ZGU6OmltcGxlbWVudGF0aW9ucy10aW5rZXJncmFwaC5hc2NpaWRvY1tdCi1pbmNsdWRlOjppbXBsZW1lbnRhdGlvbnMtbmVvNGouYXNjaWlkb2NbXQogCiAvLyB0aGUgaGFkb29wIHNlY3Rpb24gaXMgc3BsaXQgaW50byBwYXJ0cyBiZWNhdXNlIG9mIHNlcmlhbGl6YXRpb24gaXNzdWVzIHRoYXQgYXJlIGVuY291bnRlcmVkIHdoZW4gdHJ5aW5nCiAvLyB0byBnZW5lcmF0ZSBncmFwaC9zcGFyayB3aXRob3V0IHJlc3RhcnRpbmcgdGhlIGNvbnNvbGUgYW5kIGN1cnJlbnRseSB0aGUgb25seSB3YXkgdG8gZm9yY2UgYSByZXN0YXJ0IG9mIHRoZQpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVmZXJlbmNlL2ludHJvLmFzY2lpZG9jIGIvZG9jcy9zcmMvcmVmZXJlbmNlL2ludHJvLmFzY2lpZG9jCmluZGV4IDc2ZjNhYmMuLjM3YjU0ZGMgMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL3JlZmVyZW5jZS9pbnRyby5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWZlcmVuY2UvaW50cm8uYXNjaWlkb2MKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAgICAgICAgICBcLCwsLwogICAgICAgICAgKG8gbykKLS0tLS0tb09Pby0oMyktb09Pby0tLS0tCistLS0tLW9PT28tKDQpLW9PT28tLS0tLQogZ3JlbWxpbj4gZ3JhcGggPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpIC8vIDwxPgogPT0+dGlua2VyZ3JhcGhbdmVydGljZXM6NiBlZGdlczo2XQogZ3JlbWxpbj4gZyA9IHRyYXZlcnNhbCgpLndpdGgoZ3JhcGgpICAgICAgICAvLyA8Mj4KQEAgLTM2NiwxOCArMzY2LDE1IEBACiA8PGdyZW1saW4tc2VydmVyLEdyZW1saW4gU2VydmVyPj4uIEdyZW1saW4gU2VydmVyIGV4cG9zZXMgdGhlIGdyYXBoIGFzIGFuIGVuZHBvaW50IHRvIHdoaWNoIGRpZmZlcmVudCBjbGllbnRzIGNhbgogY29ubmVjdCwgZXNzZW50aWFsbHkgcHJvdmlkaW5nIGEgcmVtb3RlIEdUTS4gR3JlbWxpbiBTZXJ2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgbWV0aG9kcyBmb3IgY2xpZW50cyB0byBpbnRlcmZhY2Ugd2l0aCBpdDoKIAotKiBXZWJzb2NrZXRzIHdpdGggYSBsaW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9kZXYvcHJvdmlkZXIvI19ncmFwaF9kcml2ZXJfcHJvdmlkZXJfcmVxdWlyZW1lbnRzW2N1c3RvbSBzdWItcHJvdG9jb2xdCi0qKiBTdHJpbmctYmFzZWQgR3JlbWxpbiBzY3JpcHRzCi0qKiBCeXRlY29kZS1iYXNlZCBHcmVtbGluIHRyYXZlcnNhbHMKLSogSFRUUCBmb3Igc3RyaW5nLWJhc2VkIHNjcmlwdHMKKyogbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNfaHR0cF9hcGlbSFRUUF0gZm9yIHN0cmluZy1iYXNlZCBzY3JpcHRzIChib3RoCitncmVtbGluLWxhbmcgYW5kIGdyZW1saW4tZ3Jvb3Z5KQogCi1Vc2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlIGJ5dGVjb2RlLWJhc2VkIGFwcHJvYWNoIHdpdGggd2Vic29ja2V0cyBiZWNhdXNlIGl0IGFsbG93cyB0aGVtIHRvIHdyaXRlIEdyZW1saW4KLWluIHRoZSBsYW5ndWFnZSBvZiB0aGVpciBjaG9pY2UuIENvbm5lY3RpbmcgbG9va3Mgc29tZXdoYXQgc2ltaWxhciB0byB0aGUgPDxjb25uZWN0aW5nLWVtYmVkZGVkLCBlbWJlZGRlZD4+IGFwcHJvYWNoCi1pbiB0aGF0IHRoZXJlIGlzIGEgbmVlZCB0byBjcmVhdGUgYSBgR3JhcGhUcmF2ZXJzYWxTb3VyY2VgLiBJbiB0aGUgZW1iZWRkZWQgYXBwcm9hY2gsIHRoZSBtZWFucyBmb3IgdGhhdCBvYmplY3QncwotY3JlYXRpb24gaXMgZGVyaXZlZCBmcm9tIGEgYEdyYXBoYCBvYmplY3Qgd2hpY2ggc3Bhd25zIGl0LiBJbiB0aGlzIGNhc2UsIGhvd2V2ZXIsIHRoZSBgR3JhcGhgIGluc3RhbmNlIGV4aXN0cyBvbmx5IG9uCi10aGUgc2VydmVyIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gYEdyYXBoYCBpbnN0YW5jZSB0byBjcmVhdGUgbG9jYWxseS4gVGhlIGFwcHJvYWNoIGlzIHRvIGluc3RlYWQgY3JlYXRlIGEKLWBHcmFwaFRyYXZlcnNhbFNvdXJjZWAgYW5vbnltb3VzbHkgd2l0aCBgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlYCBhbmQgdGhlbiBhcHBseSBzb21lICJyZW1vdGUiIG9wdGlvbnMgdGhhdCBkZXNjcmliZQotdGhlIGxvY2F0aW9uIG9mIHRoZSBHcmVtbGluIFNlcnZlciB0byBjb25uZWN0IHRvOgorQ29ubmVjdGluZyBsb29rcyBzb21ld2hhdCBzaW1pbGFyIHRvIHRoZSA8PGNvbm5lY3RpbmctZW1iZWRkZWQsIGVtYmVkZGVkPj4gYXBwcm9hY2ggaW4gdGhhdCB0aGVyZSBpcyBhIG5lZWQgdG8gY3JlYXRlIGEKK2BHcmFwaFRyYXZlcnNhbFNvdXJjZWAuIEluIHRoZSBlbWJlZGRlZCBhcHByb2FjaCwgdGhlIG1lYW5zIGZvciB0aGF0IG9iamVjdCdzIGNyZWF0aW9uIGlzIGRlcml2ZWQgZnJvbSBhIGBHcmFwaGAgb2JqZWN0Cit3aGljaCBzcGF3bnMgaXQuIEluIHRoaXMgY2FzZSwgaG93ZXZlciwgdGhlIGBHcmFwaGAgaW5zdGFuY2UgZXhpc3RzIG9ubHkgb24gdGhlIHNlcnZlciB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vCitgR3JhcGhgIGluc3RhbmNlIHRvIGNyZWF0ZSBsb2NhbGx5LiBUaGUgYXBwcm9hY2ggaXMgdG8gaW5zdGVhZCBjcmVhdGUgYSBgR3JhcGhUcmF2ZXJzYWxTb3VyY2VgIGFub255bW91c2x5IHdpdGgKK2BBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2VgIGFuZCB0aGVuIGFwcGx5IHNvbWUgInJlbW90ZSIgb3B0aW9ucyB0aGF0IGRlc2NyaWJlIHRoZSBsb2NhdGlvbiBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIgdG8KK2Nvbm5lY3QgdG86CiAKIFtzb3VyY2UsamF2YSx0YWJdCiAtLS0tCkBAIC00MDEsMzQgKzM5OCwxMiBAQAogZGVmIGcgPSB0cmF2ZXJzYWwoKS53aXRoKAogICAgICAgICAgICAgICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoJ2xvY2FsaG9zdCcsIDgxODIpKQogLS0tLQotW3NvdXJjZSxjc2hhcnBdCi0tLS0tCi1pbmNsdWRlOjouLi8uLi8uLi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9JbnRyb1Rlc3RzLmNzW3RhZ3M9dHJhdmVyc2FsU291cmNlVXNpbmddCi0KLWluY2x1ZGU6Oi4uLy4uLy4uL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0ludHJvVGVzdHMuY3NbdGFncz10cmF2ZXJzYWxTb3VyY2VDcmVhdGlvbl0KLS0tLS0KLVtzb3VyY2UsamF2YXNjcmlwdF0KLS0tLS0KLWNvbnN0IHRyYXZlcnNhbCA9IGdyZW1saW4ucHJvY2Vzcy5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotCi1jb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aCgKLSAgICAgICAgICAgICAgICBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykpOwotLS0tLQogW3NvdXJjZSxweXRob25dCiAtLS0tCiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuYW5vbnltb3VzX3RyYXZlcnNhbF9zb3VyY2UgaW1wb3J0IHRyYXZlcnNhbAogCiBnID0gdHJhdmVyc2FsKCkud2l0aCgKLSAgICAgICAgICBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKSkKLS0tLS0KLVtzb3VyY2UsZ29dCi0tLS0tCi1pbXBvcnQgKAotCWdyZW1saW5nbyAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMvZHJpdmVyIgotKQotCi1yZW1vdGUsIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKLWcgOj0gZ3JlbWxpbmdvLlRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKKyAgICAgICAgICBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpKQogLS0tLQogCiBBcyBzaG93biBpbiB0aGUgZW1iZWRkZWQgYXBwcm9hY2ggaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24sIG9uY2UgImciIGlzIGRlZmluZWQsIHdyaXRpbmcgR3JlbWxpbiBpcyBzdHJ1Y3R1cmFsbHkgYW5kCkBAIC00NDksNiArNDI0LDkgQEAKIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L2Rldi9pby8jZ3JhcGhzb25bR3JhcGhTT05dLiBVc2VycyBzaG91bGQgcHJlZmVyIEdyYXBoQmluYXJ5IHdoZW4gYXZhaWxhYmxlCiBpbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgYmVpbmcgdXNlZC4KIAorSU1QT1JUQU5UOiA0LjAuMC1iZXRhLjIgUmVsZWFzZSAtIFRoZXJlIGlzIHRlbXBvcmFyeSBzdXBwb3J0IGZvciBHcmFwaFNPTiBpbiB0aGUgSmF2YSBkcml2ZXIgd2hpY2ggd2lsbCBoZWxwIHdpdGgKK3Rlc3RpbmcsIGJ1dCBpdCBpcyBleHBlY3RlZCB0aGF0IHRoZSBkcml2ZXJzIHdpbGwgb25seSBzdXBwb3J0IEdyYXBoQmluYXJ5IHdoZW4gNC4wIGlzIGZ1bGx5IHJlbGVhc2VkLgorCiBBIGdvb2QgZXhhbXBsZSBpcyB0aGUgYHN1YmdyYXBoKClgLXN0ZXAgd2hpY2ggcmV0dXJucyBhIGBHcmFwaGAgaW5zdGFuY2UgYXMgaXRzIHJlc3VsdC4gVGhlIHN1YmdyYXBoIHJldHVybmVkIGZyb20KIHRoZSBzZXJ2ZXIgY2FuIGJlIGRlc2VyaWFsaXplZCBpbnRvIGFuIGFjdHVhbCBgR3JhcGhgIGluc3RhbmNlIG9uIHRoZSBjbGllbnQsIHdoaWNoIHRoZW4gbWVhbnMgaXQgaXMgcG9zc2libGUgdG8KIHNwYXduIGEgYEdyYXBoVHJhdmVyc2FsU291cmNlYCBmcm9tIHRoYXQgdG8gZG8gbG9jYWwgR3JlbWxpbiB0cmF2ZXJzYWxzIG9uIHRoZSBjbGllbnQtc2lkZS4gRm9yIG5vbi1KVk0KQEAgLTQ1Niw5ICs0MzQsMTEgQEAKIG5vIEdUTSB0byBwcm9jZXNzIEdyZW1saW4gc28gdGhlcmUgaXNuJ3QgbXVjaCB0aGF0IGNhbiBiZSBkb25lIHdpdGggc3VjaCBhIHJlc3VsdC4KIAogVGhlIHNlY29uZCBwb2ludCBpcyByZWxhdGVkIHRvIHRoaXMgaXNzdWUuIEFzIHRoZXJlIGlzIG5vIEdUTSwgdGhlcmUgaXMgbm8gInN0cnVjdHVyZSIgQVBJIGFuZCB0aHVzIGdyYXBoIGVsZW1lbnRzIGxpa2UKLWBWZXJ0ZXhgIGFuZCBgRWRnZWAgYXJlICJyZWZlcmVuY2VzIiBvbmx5LiBBICJyZWZlcmVuY2UiIG1lYW5zIHRoYXQgdGhleSBvbmx5IGNvbnRhaW4gdGhlIGBpZGAgYW5kIGBsYWJlbGAgb2YgdGhlCitgVmVydGV4YCBhbmQgYEVkZ2VgIGFyZSB1c3VhbGx5ICJyZWZlcmVuY2VzIi4gQSAicmVmZXJlbmNlIiBtZWFucyB0aGF0IHRoZXkgb25seSBjb250YWluIHRoZSBgaWRgIGFuZCBgbGFiZWxgIG9mIHRoZQogZWxlbWVudCBhbmQgbm90IHRoZSBwcm9wZXJ0aWVzLiBUbyBiZSBjb25zaXN0ZW50LCBldmVuIEpWTS1iYXNlZCBsYW5ndWFnZXMgaG9sZCB0aGlzIGxpbWl0YXRpb24gd2hlbiB0YWxraW5nIHRvIGEKLXJlbW90ZSBHcmVtbGluIFNlcnZlci4KK3JlbW90ZSBHcmVtbGluIFNlcnZlci4gSG93ZXZlciwgeW91IGNhbiBhbHRlcm5hdGl2ZWx5IGdldCBhICJkZXRhY2hlZCIgZWxlbWVudCB3aGVuIHVzaW5nIHRoZSBgYWxsYCBvcHRpb24gZm9yCitgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzYC4gSW4gdGhpcyBjYXNlLCB0aGUgZWxlbWVudCB3aWxsIGNvbnRhaW4gYWxsIG9mIGl0cyBwcm9wZXJ0aWVzLCBidXQgd2lsbCBub3QgYmUgY29ubmVjdGVkIHRvIGFueQorb3RoZXIgZWxlbWVudC4KIAogSU1QT1JUQU5UOiBNb3N0IFNRTCBkZXZlbG9wZXJzIHdvdWxkIG5vdCB3cml0ZSBhIHF1ZXJ5IGFzIGBTRUxFQ1QgKiBGUk9NIHRhYmxlYC4gVGhleSB3b3VsZCBpbnN0ZWFkIHdyaXRlIHRoZQogaW5kaXZpZHVhbCBuYW1lcyBvZiB0aGUgZmllbGRzIHRoZXkgd2FudGVkIGluIHBsYWNlIG9mIHRoZSB3aWxkY2FyZC4gV3JpdGluZyAiZ29vZCIgR3JlbWxpbiBpcyBubyBkaWZmZXJlbnQgd2l0aCB0aGlzCkBAIC00NjcsMTUgKzQ0NywxNyBAQAogVGhlIHRoaXJkIGFuZCBmaW5hbCBwb2ludCBpbnZvbHZlcyB0cmFuc2FjdGlvbnMuIFVuZGVyIHRoaXMgbW9kZWwsIG9uZSB0cmF2ZXJzYWwgaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSB0cmFuc2FjdGlvbgogYW5kIHRoZXJlIGlzIG5vIHdheSBpbiBUaW5rZXJQb3AgdG8gc3RyaW5nIHRvZ2V0aGVyIG11bHRpcGxlIHRyYXZlcnNhbHMgaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbi4KIAorSU1QT1JUQU5UOiA0LjAuMC1iZXRhLjEgUmVsZWFzZSAtIFJlbW90ZSB0cmFuc2FjdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBiZXRhLgorCiBbW2Nvbm5lY3RpbmctcmdwXV0KID09PSBSZW1vdGUgR3JlbWxpbiBQcm92aWRlcgogCiBSZW1vdGUgR3JlbWxpbiBQcm92aWRlcnMgKFJHUHMpIGFyZSBzaG93aW5nIHVwIG1vcmUgYW5kIG1vcmUgb2Z0ZW4gaW4gdGhlIGdyYXBoIGRhdGFiYXNlIHNwYWNlLiBJbiBUaW5rZXJQb3AgdGVybXMsCiB0aGlzIGNhdGVnb3J5IG9mIGdyYXBoIHByb3ZpZGVycyBpcyBkZWZpbmVkIGJ5IHRob3NlIHdobyBzaW1wbHkgc3VwcG9ydCB0aGUgR3JlbWxpbiBsYW5ndWFnZS4gVHlwaWNhbGx5LCB0aGVzZSBhcmUKLXNlcnZlci1iYXNlZCBncmFwaHMsIG9mdGVuIGNsb3VkLWJhc2VkLCB3aGljaCBhY2NlcHQgR3JlbWxpbiBzY3JpcHRzIG9yIGJ5dGVjb2RlIGFzIGEgcmVxdWVzdCBhbmQgcmV0dXJuIHJlc3VsdHMuCi1UaGV5IHdpbGwgb2Z0ZW4gaW1wbGVtZW50IEdyZW1saW4gU2VydmVyIHByb3RvY29scywgd2hpY2ggZW5hYmxlcyBUaW5rZXJQb3AgZHJpdmVycyB0byBjb25uZWN0IHRvIHRoZW0gYXMgdGhleSB3b3VsZAotd2l0aCBHcmVtbGluIFNlcnZlci4gVGhlcmVmb3JlLCB0aGUgdHlwaWNhbCBjb25uZWN0aW9uIGFwcHJvYWNoIGlzIGlkZW50aWNhbCB0byB0aGUgbWV0aG9kIG9mIGNvbm5lY3Rpb24gcHJlc2VudGVkIGluCi10aGUgPDxjb25uZWN0aW5nLWdyZW1saW4tc2VydmVyLHByZXZpb3VzIHNlY3Rpb24+PiB3aXRoIHRoZSBleGFjdCBzYW1lIGNhdmVhdHMgcG9pbnRlZCBvdXQgdG93YXJkIHRoZSBlbmQuCitzZXJ2ZXItYmFzZWQgZ3JhcGhzLCBvZnRlbiBjbG91ZC1iYXNlZCwgd2hpY2ggYWNjZXB0IEdyZW1saW4gc2NyaXB0cyBhcyBhIHJlcXVlc3QgYW5kIHJldHVybiByZXN1bHRzLiBUaGV5IHdpbGwgb2Z0ZW4KK2ltcGxlbWVudCBHcmVtbGluIFNlcnZlciBwcm90b2NvbHMsIHdoaWNoIGVuYWJsZXMgVGlua2VyUG9wIGRyaXZlcnMgdG8gY29ubmVjdCB0byB0aGVtIGFzIHRoZXkgd291bGQgd2l0aCBHcmVtbGluCitTZXJ2ZXIuIFRoZXJlZm9yZSwgdGhlIHR5cGljYWwgY29ubmVjdGlvbiBhcHByb2FjaCBpcyBpZGVudGljYWwgdG8gdGhlIG1ldGhvZCBvZiBjb25uZWN0aW9uIHByZXNlbnRlZCBpbiB0aGUKKzw8Y29ubmVjdGluZy1ncmVtbGluLXNlcnZlcixwcmV2aW91cyBzZWN0aW9uPj4gd2l0aCB0aGUgZXhhY3Qgc2FtZSBjYXZlYXRzIHBvaW50ZWQgb3V0IHRvd2FyZCB0aGUgZW5kLgogCiBEZXNwaXRlIGxldmVyYWdpbmcgVGlua2VyUG9wIHByb3RvY29scyBhbmQgZHJpdmVycyBhcyBiZWluZyB0eXBpY2FsLCBSR1BzIGFyZSBub3QgcmVxdWlyZWQgdG8gZG8gc28gdG8gYmUgY29uc2lkZXJlZAogVGlua2VyUG9wLWVuYWJsZWQuIFJHUHMgbWF5IHdlbGwgaGF2ZSB0aGVpciBvd24gZHJpdmVycyBhbmQgcHJvdG9jb2xzIHRoYXQgbWF5IHBsdWcgaW50bwpAQCAtNDk4LDM0ICs0ODAsMTggQEAKIHYyID0gZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsJ3N0ZXBoZW4nKS5uZXh0KCkKIGcuVih2MSkuYWRkRSgna25vd3MnKS50byh2MikucHJvcGVydHkoJ3dlaWdodCcsMC43NSkuaXRlcmF0ZSgpCiAtLS0tCi1bc291cmNlLGNzaGFycF0KLS0tLS0KLWluY2x1ZGU6Oi4uLy4uLy4uL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0ludHJvVGVzdHMuY3NbdGFncz1iYXNpY0dyZW1saW5BZGRzXQotLS0tLQogW3NvdXJjZSxqYXZhXQogLS0tLQogVmVydGV4IHYxID0gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsIm1hcmtvIikubmV4dCgpOwogVmVydGV4IHYyID0gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsInN0ZXBoZW4iKS5uZXh0KCk7CiBnLlYodjEpLmFkZEUoImtub3dzIikudG8odjIpLnByb3BlcnR5KCJ3ZWlnaHQiLDAuNzUpLml0ZXJhdGUoKTsKIC0tLS0KLVtzb3VyY2UsamF2YXNjcmlwdF0KLS0tLS0KLWNvbnN0IHYxID0gZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsJ21hcmtvJykubmV4dCgpOwotY29uc3QgdjIgPSBnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnc3RlcGhlbicpLm5leHQoKTsKLWcuVih2MSkuYWRkRSgna25vd3MnKS50byh2MikucHJvcGVydHkoJ3dlaWdodCcsMC43NSkuaXRlcmF0ZSgpOwotLS0tLQogW3NvdXJjZSxweXRob25dCiAtLS0tCiB2MSA9IGcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdtYXJrbycpLm5leHQoKQogdjIgPSBnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnc3RlcGhlbicpLm5leHQoKQogZy5WKHYxKS5hZGRFKCdrbm93cycpLnRvKHYyKS5wcm9wZXJ0eSgnd2VpZ2h0JywwLjc1KS5pdGVyYXRlKCkKIC0tLS0KLVtzb3VyY2UsZ29dCi0tLS0tCi12MSwgZXJyIDo9IGcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5OZXh0KCkKLXYyLCBlcnIgOj0gZy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJzdGVwaGVuIikuTmV4dCgpCi1nLlYodjEpLkFkZEUoImtub3dzIikuVG8odjIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjc1KS5JdGVyYXRlKCkKLS0tLS0KIAogVGhlIGZpcnN0IHR3byBsaW5lcyBhZGQgYSB2ZXJ0ZXggZWFjaCB3aXRoIHRoZSB2ZXJ0ZXggbGFiZWwgb2YgInBlcnNvbiIgYW5kIHRoZSBhc3NvY2lhdGVkICJuYW1lIiBwcm9wZXJ0eS4gVGhlIHRoaXJkCiBsaW5lIGFkZHMgYW4gZWRnZSB3aXRoIHRoZSAia25vd3MiIGxhYmVsIGJldHdlZW4gdGhlbSBhbmQgYW4gYXNzb2NpYXRlZCAid2VpZ2h0IiBwcm9wZXJ0eS4gTm90ZSB0aGUgdXNlIG9mIGBuZXh0KClgCkBAIC01NDMsMzAgKzUwOSwxNiBAQAogbWFya28gPSBnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpLm5leHQoKQogcGVvcGxlTWFya29Lbm93cyA9IGcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykub3V0KCdrbm93cycpLnRvTGlzdCgpCiAtLS0tCi1bc291cmNlLGNzaGFycF0KLS0tLS0KLWluY2x1ZGU6Oi4uLy4uLy4uL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0ludHJvVGVzdHMuY3NbdGFncz1iYXNpY0dyZW1saW5NYXJrb0tub3dzXQotLS0tLQogW3NvdXJjZSxqYXZhXQogLS0tLQogVmVydGV4IG1hcmtvID0gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS5uZXh0KCkKIExpc3Q8VmVydGV4PiBwZW9wbGVNYXJrb0tub3dzID0gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS5vdXQoImtub3dzIikudG9MaXN0KCkKIC0tLS0KLVtzb3VyY2UsamF2YXNjcmlwdF0KLS0tLS0KLWNvbnN0IG1hcmtvID0gZy5WKCkuaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKS5uZXh0KCkKLWNvbnN0IHBlb3BsZU1hcmtvS25vd3MgPSBnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpLm91dCgna25vd3MnKS50b0xpc3QoKQotLS0tLQogW3NvdXJjZSxweXRob25dCiAtLS0tCiBtYXJrbyA9IGcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykubmV4dCgpCiBwZW9wbGVNYXJrb0tub3dzID0gZy5WKCkuaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKS5vdXQoJ2tub3dzJykudG9MaXN0KCkKIC0tLS0KLVtzb3VyY2UsZ29dCi0tLS0tCi1tYXJrbywgZXJyIDo9IGcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5OZXh0KCkKLXBlb3BsZU1hcmtvS25vd3MsIGVyciA6PSBnLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLlRvTGlzdCgpCi0tLS0tCiAKIEluIGFsbCB0aGVzZSBleGFtcGxlcyBwcmVzZW50ZWQgc28gZmFyIHRoZXJlIHJlYWxseSBpc24ndCBhIGxvdCBvZiBkaWZmZXJlbmNlIGluIGhvdyB0aGUgR3JlbWxpbiBpdHNlbGYgbG9va3MuIFRoZXJlCiBhcmUgYSBmZXcgbGFuZ3VhZ2Ugc3ludGF4IHNwZWNpZmljIG9kZHMgYW5kIGVuZHMsIGJ1dCBmb3IgdGhlIG1vc3QgcGFydCBHcmVtbGluIGxvb2tzIGxpa2UgR3JlbWxpbiBpbiBhbGwgb2YgdGhlCkBAIC01OTIsOCArNTQ0LDggQEAKIFRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB0byBiZSBjb25jZXJuZWQgd2hlbiBjb25zaWRlcmluZyB0aGlzIGlzc3VlOgogCiAqICpEYXRhIHR5cGVzKiAtIERpZmZlcmVudCBncmFwaHMgd2lsbCBzdXBwb3J0IGRpZmZlcmVudCB0eXBlcyBvZiBkYXRhLiBTb21ldGhpbmcgbGlrZSBUaW5rZXJHcmFwaCB3aWxsIGFjY2VwdCBhbnkgSlZNCi1vYmplY3QsIGJ1dCBhbm90aGVyIGdyYXBoIGxpa2UgTmVvNGogaGFzIGEgc21hbGwgdGlnaHQgc3Vic2V0IG9mIHBvc3NpYmxlIHR5cGVzLiBDaG9vc2luZyBhIHR5cGUgdGhhdCBpcyBleG90aWMgb3IKLXBlcmhhcHMgaXMgYSBjdXN0b20gdHlwZSB0aGF0IG9ubHkgYSBzcGVjaWZpYyBncmFwaCBzdXBwb3J0cyBtaWdodCBjcmVhdGUgbWlncmF0aW9uIGZyaWN0aW9uIHNob3VsZCB0aGUgbmVlZCBhcmlzZS4KK29iamVjdCwgYnV0IGFub3RoZXIgZ3JhcGggbGlrZSBBbWF6b24gTmVwdHVuZSBoYXMgYW4gZXhwbGljaXQgc3Vic2V0IG9mIHBvc3NpYmxlIHR5cGVzLiBDaG9vc2luZyBhIHR5cGUgdGhhdCBpcyBleG90aWMKK29yIHBlcmhhcHMgaXMgYSBjdXN0b20gdHlwZSB0aGF0IG9ubHkgYSBzcGVjaWZpYyBncmFwaCBzdXBwb3J0cyBtaWdodCBjcmVhdGUgbWlncmF0aW9uIGZyaWN0aW9uIHNob3VsZCB0aGUgbmVlZCBhcmlzZS4KICogKlNjaGVtYXMvSW5kaWNlcyogLSBUaW5rZXJQb3AgZG9lcyBub3QgcHJvdmlkZSBhYnN0cmFjdGlvbnMgZm9yIHNjaGVtYXMgYW5kL29yIGluZGV4IG1hbmFnZW1lbnQuIFVzZXJzIHdpbGwgd29yawogZGlyZWN0bHkgd2l0aCB0aGUgQVBJIG9mIHRoZSBncmFwaCBwcm92aWRlci4gSXQgaXMgY29uc2lkZXJlZCBnb29kIHByYWN0aWNlIHRvIGF0dGVtcHQgdG8gZW5jbG9zZSBzdWNoIGNvZGUgaW4gYQogZ3JhcGggcHJvdmlkZXIgc3BlY2lmaWMgY2xhc3Mgb3Igc2V0IG9mIGNsYXNzZXMgdG8gaXNvbGF0ZSBvciBhYnN0cmFjdCBpdC4KQEAgLTYxMyw3ICs1NjUsNyBAQAogcHJlZmVyIHVzZSBvZiBHcmVtbGluIHdpdGggYGcuYWRkVigpYCBvciBgZy5WKDEpLnByb3BlcnRpZXMoKWAuCiAKIE91dHNpZGUgb2YgY29uc2lkZXJpbmcgdGhlc2UgcG9pbnRzLCB0aGUgYmVzdCBwcmFjdGljZSBmb3IgZW5zdXJpbmcgdGhlIGdyZWF0ZXN0IGxldmVsIG9mIGNvbXBhdGliaWxpdHkgYWNyb3NzIGdyYXBocwotaXMgdG8gYXZvaWQgPDxjb25uZWN0aW5nLWVtYmVkZGVkLGVtYmVkZGVkPj4gbW9kZSBhbmQgc3RpY2sgdG8gdGhlIGJ5dGVjb2RlIGJhc2VkIGFwcHJvYWNoZXMgZXhwbGFpbmVkIGluIHRoZQoraXMgdG8gYXZvaWQgPDxjb25uZWN0aW5nLWVtYmVkZGVkLGVtYmVkZGVkPj4gbW9kZSBhbmQgc3RpY2sgdG8gdGhlIHRyYXZlcnNhbC1iYXNlZCBhcHByb2FjaGVzIGV4cGxhaW5lZCBpbiB0aGUKIDw8Y29ubmVjdGluZy1ncmVtbGluLXNlcnZlcixHcmVtbGluIFNlcnZlcj4+IGFuZCB0aGUgPDxjb25uZWN0aW5nLXJncCxSR1A+PiBzZWN0aW9ucyBhYm92ZS4gSXQgY3JlYXRlcyB0aGUgbGVhc3QKIG9wcG9ydHVuaXR5IHRvIHN0cmF5IGZyb20gdGhlIGFnbm9zdGljIHBhdGggYXMgYW55dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3aXRoIHRob3NlIHR3byBtb2RlcyBhbHNvIHdvcmtzIGluIGVtYmVkZGVkCiBtb2RlLiBJZiB1c2luZyBlbWJlZGRlZCBtb2RlLCBzaW1wbHkgd3JpdGUgY29kZSBhcyB0aG91Z2ggdGhlIGBHcmFwaGAgaW5zdGFuY2UgaXMgInJlbW90ZSIgYW5kIG5vdCBsb2NhbCB0byB0aGUgSlZNLgpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvcmVmZXJlbmNlL3RoZS10cmF2ZXJzYWwuYXNjaWlkb2MgYi9kb2NzL3NyYy9yZWZlcmVuY2UvdGhlLXRyYXZlcnNhbC5hc2NpaWRvYwppbmRleCA1YTJiMmE1Li5hMDgxZTIwIDEwMDY0NAotLS0gYS9kb2NzL3NyYy9yZWZlcmVuY2UvdGhlLXRyYXZlcnNhbC5hc2NpaWRvYworKysgYi9kb2NzL3NyYy9yZWZlcmVuY2UvdGhlLXRyYXZlcnNhbC5hc2NpaWRvYwpAQCAtODgsMTAgKzg4LDEwIEBACiBpbiByZWxhdGlvbiB0byB0aGUgdXNhZ2UgY29udmVudGlvbiBhbmQgZ3JhcGggcHJvdmlkZXIgY2F2ZWF0cyBhbGx1ZGVkIHRvIGVhcmxpZXIuCiAKIEZvY3VzaW5nIG9uIHJlbW90ZSBjb250ZXh0cyBmaXJzdCwgbm90ZSB0aGF0IGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGlzc3VlIHRyYXZlcnNhbHMgZnJvbSBgZ2AsIGJ1dCB0aG9zZSB3aWxsIGhhdmUgYQotdHJhbnNhY3Rpb24gc2NvcGUgb3V0c2lkZSBvZiBgZ3R4YCBhbmQgd2lsbCBzaW1wbHkgYGNvbW1pdCgpYCBvbiB0aGUgc2VydmVyIGlmIHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBvciBgcm9sbGJhY2soKWAKLW9uIHRoZSBzZXJ2ZXIgb3RoZXJ3aXNlIChpLmUuIG9uZSB0cmF2ZXJzYWwgaXMgb25lIHRyYW5zYWN0aW9uKS4gRWFjaCBpc29sYXRlZCB0cmFuc2FjdGlvbiB3aWxsIHJlcXVpcmUgaXRzIG93bgotYFRyYW5zYWN0aW9uYCBvYmplY3QuIE11bHRpcGxlIGBiZWdpbigpYCBjYWxscyBvbiB0aGUgc2FtZSBgVHJhbnNhY3Rpb25gIG9iamVjdCB3aWxsIHByb2R1Y2UgYEdyYXBoVHJhdmVyc2FsU291cmNlYAotaW5zdGFuY2VzIHRoYXQgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIHRyYW5zYWN0aW9uLCB0aGVyZWZvcmU6Cit0cmFuc2FjdGlvbiBzY29wZSBvdXRzaWRlIG9mIGBndHhgIGFuZCB3aWxsIHNpbXBseSBiZWhhdmUgYXMgc2VsZi1jb250YWluZWQgdW5pdHMgb2Ygd29yayB3aGVyZSB0aGUgZ3JhcGgncyBvd24KK3RyYW5zYWN0aW9uIHNlbWFudGljcyBhcHBseSAoaS5lLiBvbmUgdHJhdmVyc2FsIGlzIG9uZSB0cmFuc2FjdGlvbikuIEVhY2ggaXNvbGF0ZWQgdHJhbnNhY3Rpb24gd2lsbCByZXF1aXJlIGl0cyBvd24KK2BUcmFuc2FjdGlvbmAgb2JqZWN0LiBNdWx0aXBsZSBgYmVnaW4oKWAgY2FsbHMgb24gdGhlIHNhbWUgYFRyYW5zYWN0aW9uYCBvYmplY3QgYXJlIG5vdCBwZXJtaXR0ZWQgYW5kIHdpbGwgdGhyb3cgYW4KK2BJbGxlZ2FsU3RhdGVFeGNlcHRpb25gOgogCiBbc291cmNlLGphdmFdCiAtLS0tCkBAIC05OSwxNyArOTksMTYgQEAKIFRyYW5zYWN0aW9uIHR4MSA9IGcudHgoKTsKIFRyYW5zYWN0aW9uIHR4MiA9IGcudHgoKTsKIAotLy8gYm90aCBndHgxYSBhbmQgZ3R4MWIgd2lsbCBiZSBib3VuZCB0byB0aGUgc2FtZSB0cmFuc2FjdGlvbgotR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4MWEgPSB0eDEuYmVnaW4oKTsKLUdyYXBoVHJhdmVyc2FsU291cmNlIGd0eDFiID0gdHgxLmJlZ2luKCk7Ci0KLS8vIGcgYW5kIGd0eDIgd2lsbCBub3QgaGF2ZSBrbm93bGVkZ2Ugb2Ygd2hhdCBoYXBwZW5zIGluIHR4MQorLy8gZ3R4MSBhbmQgZ3R4MiBhcmUgaW5kZXBlbmRlbnQgdHJhbnNhY3Rpb25zCitHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgxID0gdHgxLmJlZ2luKCk7CiBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgyID0gdHgyLmJlZ2luKCk7CisKKy8vIGcgb3BlcmF0ZXMgb3V0c2lkZSBvZiBib3RoIHR4MSBhbmQgdHgyCiAtLS0tCiAKLUluIHJlbW90ZSBjYXNlcywgYEdyYXBoVHJhdmVyc2FsU291cmNlYCBpbnN0YW5jZXMgc3Bhd25lZCBmcm9tIGBiZWdpbigpYCBhcmUgc2FmZSB0byB1c2UgaW4gbXVsdGlwbGUgdGhyZWFkcyB0aG91Z2gKLW9uIHRoZSBzZXJ2ZXIgc2lkZSB0aGV5IHdpbGwgYmUgcHJvY2Vzc2VkIHNlcmlhbGx5IGFzIHRoZXkgYXJyaXZlLiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgY2xvc2UoKWAgb24gYQotYFRyYW5zYWN0aW9uYCBmb3IgcmVtb3RlIGNhc2VzIGlzIHRvIGBjb21taXQoKWAsIHNvIHRoZSBmb2xsb3dpbmcgcmUtd3JpdGUgb2YgdGhlIGVhcmxpZXIgZXhhbXBsZSBpcyBhbHNvIHZhbGlkOgorSW4gcmVtb3RlIGNhc2VzLCBgR3JhcGhUcmF2ZXJzYWxTb3VyY2VgIGluc3RhbmNlcyBzcGF3bmVkIGZyb20gYGJlZ2luKClgIGFyZSBzYWZlIHRvIHVzZSBmcm9tIGEgc2luZ2xlIHRocmVhZC4gVGhlCitkZWZhdWx0IGJlaGF2aW9yIG9mIGBjbG9zZSgpYCBvbiBhIGBUcmFuc2FjdGlvbmAgZm9yIHJlbW90ZSBjYXNlcyBpcyB0byBgY29tbWl0KClgLCBzbyB0aGUgZm9sbG93aW5nIHJlLXdyaXRlIG9mIHRoZQorZWFybGllciBleGFtcGxlIGlzIGFsc28gdmFsaWQ6CiAKIFtzb3VyY2UsamF2YV0KIC0tLS0KQEAgLTEzNiwxMiArMTM1LDQ1IEBACiBgQWJzdHJhY3RUaHJlYWRMb2NhbFRyYW5zYWN0aW9uYCBjbGFzcywgd2hpY2ggbWVhbnMgdGhhdCB0aGUgdHJhbnNhY3Rpb24gaXMgYm91bmQgdG8gdGhlIGN1cnJlbnQgdGhyZWFkIGFuZCB0aGVyZWZvcmUKIGFsbCB0cmF2ZXJzYWxzIHRoYXQgZXhlY3V0ZSB3aXRoaW4gdGhhdCB0aHJlYWQgYXJlIHRpZWQgdG8gdGhhdCB0cmFuc2FjdGlvbi4KIAotQSBgVGhyZWFkTG9jYWxgIHRyYW5zYWN0aW9uIGRpZmZlcnMgdGhlbiBmcm9tIHRoZSByZW1vdGUgY2FzZSBkZXNjcmliZWQgYmVmb3JlIGJlY2F1c2UgdGVjaG5pY2FsbHkgYW55IHRyYXZlcnNhbAorQSBgVGhyZWFkTG9jYWxgIHRyYW5zYWN0aW9uIGRpZmZlcnMgdGhlbiBmcm9tIHRoZSByZW1vdGUgY2FzZSBkZXNjcmliZWQgYmVmb3JlIGJlY2F1c2UgdGVjaG5pY2FsbHkgYW55IHRyYXZlcnNhbHMKIHNwYXduZWQgZnJvbSBgZ2Agb3IgZnJvbSBhIGBUcmFuc2FjdGlvbmAgd2lsbCBmYWxsIHVuZGVyIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHNjb3BlLiBBcyBhIHJlc3VsdCwgaXQgaXMgd2lzZSwgd2hlbgogdHJ5aW5nIHRvIHdyaXRlIGNvbnRleHQgYWdub3N0aWMgR3JlbWxpbiwgdG8gZm9sbG93IHRoZSBtb3JlIHJpZ2lkIGNvbnZlbnRpb25zIG9mIHRoZSBpbml0aWFsIGV4YW1wbGUuCiAKIFRoZSBzdWItc2VjdGlvbnMgdGhhdCBmb2xsb3cgb2ZmZXIgYSBiaXQgbW9yZSBpbnNpZ2h0IGludG8gZWFjaCBvZiB0aGUgdXNhZ2UgY29udGV4dHMuCiAKK1tbdHgtcmVtb3RlXV0KKz09PSBSZW1vdGUKKworUmVtb3RlIHRyYW5zYWN0aW9ucyBvcGVyYXRlIG92ZXIgdGhlIEhUVFAgQVBJLiBXaGVuIGBnLnR4KCkuYmVnaW4oKWAgaXMgY2FsbGVkLCB0aGUgZHJpdmVyIHNlbmRzIGEgYmVnaW4gcmVxdWVzdCB0bwordGhlIHNlcnZlciwgd2hpY2ggb3BlbnMgYSB0cmFuc2FjdGlvbiBhbmQgcmV0dXJucyBhIHNlcnZlci1nZW5lcmF0ZWQgdHJhbnNhY3Rpb24gSUQuIEFsbCBzdWJzZXF1ZW50IHRyYXZlcnNhbHMgc3Bhd25lZAorZnJvbSB0aGUgcmVzdWx0aW5nIGBHcmFwaFRyYXZlcnNhbFNvdXJjZWAgYXV0b21hdGljYWxseSBpbmNsdWRlIHRoaXMgdHJhbnNhY3Rpb24gSUQgaW4gdGhlaXIgcmVxdWVzdHMuIFRoZSBzZXJ2ZXIKK3JvdXRlcyB0aG9zZSByZXF1ZXN0cyB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGdyYXBoIHRyYW5zYWN0aW9uLiBDYWxsaW5nIGB0eC5jb21taXQoKWAgb3IgYHR4LnJvbGxiYWNrKClgIGNsb3NlcyB0aGUKK3RyYW5zYWN0aW9uIG9uIHRoZSBzZXJ2ZXIuCisKK1RoZSBIVFRQIHByb3RvY29sIGRldGFpbHMgYXJlIGFzIGZvbGxvd3M6CisKKy4gVGhlIGNsaWVudCBzZW5kcyBgZy50eCgpLmJlZ2luKClgIHdpdGggYSBgZ2AgZmllbGQgaWRlbnRpZnlpbmcgdGhlIHRhcmdldCB0cmF2ZXJzYWwgc291cmNlLiBObyB0cmFuc2FjdGlvbiBJRCBpcworICBpbmNsdWRlZCBvbiB0aGlzIGluaXRpYWwgcmVxdWVzdC4KKy4gVGhlIHNlcnZlciBvcGVucyBhIHRyYW5zYWN0aW9uLCBnZW5lcmF0ZXMgYSB0cmFuc2FjdGlvbiBJRCAoYSBVVUlEIHN0cmluZyksIGFuZCByZXR1cm5zIGl0IGluIGJvdGggdGhlIHJlc3BvbnNlIGJvZHkKKyAgKGFzIGEgYHRyYW5zYWN0aW9uSWRgIGZpZWxkIGluIGEgbWFwKSBhbmQgdGhlIGBYLVRyYW5zYWN0aW9uLUlkYCByZXNwb25zZSBoZWFkZXIuCisuIEZvciBhbGwgc3Vic2VxdWVudCByZXF1ZXN0cyB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uLCB0aGUgY2xpZW50IGluY2x1ZGVzIHRoZSB0cmFuc2FjdGlvbiBJRCBpbiBib3RoIHRoZQorICBgWC1UcmFuc2FjdGlvbi1JZGAgcmVxdWVzdCBoZWFkZXIgYW5kIHRoZSBgdHJhbnNhY3Rpb25JZGAgZmllbGQgb2YgdGhlIHJlcXVlc3QgYm9keS4KKy4gVGhlIGNsaWVudCBjbG9zZXMgdGhlIHRyYW5zYWN0aW9uIGJ5IHNlbmRpbmcgYGcudHgoKS5jb21taXQoKWAgb3IgYGcudHgoKS5yb2xsYmFjaygpYCB3aXRoIHRoZSB0cmFuc2FjdGlvbiBJRAorICBhdHRhY2hlZC4KKworVGhlIGdyYXBoIGFsaWFzIHNwZWNpZmllZCBpbiB0aGUgYmVnaW4gcmVxdWVzdCBpcyBsb2NrZWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgdHJhbnNhY3Rpb24uIElmIGEgc3Vic2VxdWVudCByZXF1ZXN0CitjYXJyaWVzIGEgZGlmZmVyZW50IGFsaWFzLCB0aGUgc2VydmVyIHJlamVjdHMgaXQgd2l0aCBIVFRQIDQwMCwgcHJldmVudGluZyBjcm9zcy1ncmFwaCBvcGVyYXRpb25zIHdpdGhpbiBhIHNpbmdsZQordHJhbnNhY3Rpb24uCisKK0FsbCByZXF1ZXN0cyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBtdXN0IHJlYWNoIHRoZSBzYW1lIHNlcnZlciBpbnN0YW5jZSBiZWNhdXNlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIGxvY2FsIHRvIHRoZSBzZXJ2ZXIKK3RoYXQgY3JlYXRlZCBpdC4gVGhlIFRpbmtlclBvcCBKYXZhIEdMViBoYW5kbGVzIHRoaXMgYXV0b21hdGljYWxseSBieSBwaW5uaW5nIGEgdHJhbnNhY3Rpb24gdG8gYSBzaW5nbGUgaG9zdCBhdAorY3JlYXRpb24gdGltZS4gSW4gbG9hZC1iYWxhbmNlZCBkZXBsb3ltZW50cywgdGhlIGBYLVRyYW5zYWN0aW9uLUlkYCBoZWFkZXIgaXMgYXZhaWxhYmxlIGZvciBsb2FkIGJhbGFuY2VycyB0bworaW1wbGVtZW50IHN0aWNreSByb3V0aW5nIHdpdGhvdXQgcGFyc2luZyB0aGUgcmVxdWVzdCBib2R5LgorCitJZiBhIHRyYXZlcnNhbCB3aXRoaW4gYW4gb3BlbiB0cmFuc2FjdGlvbiBmYWlscyAoYmFkIHN5bnRheCwgcnVudGltZSBlcnJvciwgZXRjLiksIHRoZSBzZXJ2ZXIgcmV0dXJucyB0aGUgZXJyb3IgZm9yCit0aGF0IHJlcXVlc3QgYnV0IGtlZXBzIHRoZSB0cmFuc2FjdGlvbiBvcGVuLiBUaGUgY2xpZW50IGNhbiByZXRyeSwgc3VibWl0IG90aGVyIHRyYXZlcnNhbHMsIG9yIGV4cGxpY2l0bHkgcm9sbCBiYWNrLgorT25seSBhbiBleHBsaWNpdCBjb21taXQsIGV4cGxpY2l0IHJvbGxiYWNrLCBvciBzZXJ2ZXItc2lkZSB0aW1lb3V0IGNsb3NlcyBhIHRyYW5zYWN0aW9uLgorCiBbW3R4LWVtYmVkZGVkXV0KID09PSBFbWJlZGRlZAogCkBAIC0yMTAsOCArMjQyLDggQEAKIGBvbkNsb3NlYC4KIAogT25jZSB0aGVyZSBpcyBhbiB1bmRlcnN0YW5kaW5nIGZvciBob3cgdHJhbnNhY3Rpb25zIGFyZSBjb25maWd1cmVkLCBtb3N0IG9mIHRoZSByZXN0IG9mIHRoZSBgVHJhbnNhY3Rpb25gIGludGVyZmFjZQotaXMgc2VsZi1leHBsYW5hdG9yeS4gTm90ZSB0aGF0IDw8bmVvNGotZ3JlbWxpbixOZW80ai1HcmVtbGluPj4gaXMgdXNlZCBmb3IgdGhlIGV4YW1wbGVzIHRvIGZvbGxvdyBhcyBUaW5rZXJHcmFwaCBkb2VzCi1ub3Qgc3VwcG9ydCB0cmFuc2FjdGlvbnMuCitpcyBzZWxmLWV4cGxhbmF0b3J5LiBOb3RlIHRoYXQgYFRpbmtlclRyYW5zYWN0aW9uR3JhcGhgIGlzIHVzZWQgZm9yIHRoZSBleGFtcGxlcyB0byBmb2xsb3cgYXMgc3RhbmRhcmQgYFRpbmtlckdyYXBoYAorZG9lcyBub3Qgc3VwcG9ydCB0cmFuc2FjdGlvbnMuCiAKIElNUE9SVEFOVDogVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIG1lYW50IHRvIGRlbW9uc3RyYXRlIHNwZWNpZmljIHVzZSBvZiBgVGhyZWFkTG9jYWxgIHRyYW5zYWN0aW9ucyBhbmQgaXMgYXQgb2Rkcwogd2l0aCB0aGUgbW9yZSBnZW5lcmFsaXplZCB0cmFuc2FjdGlvbiBjb252ZW50aW9uIHRoYXQgaXMgcmVjb21tZW5kZWQgZm9yIGJvdGggZW1iZWRkZWQgYW5kIHJlbW90ZSBjb250ZXh0cy4gUGxlYXNlIGJlCkBAIC0yMjAsMzkgKzI1MiwzOSBAQAogCiBbc291cmNlLGdyb292eV0KIC0tLS0KLWdyZW1saW4+IGdyYXBoID0gTmVvNGpHcmFwaC5vcGVuKCcvdG1wL25lbzRqJykKLT09Pm5lbzRqZ3JhcGhbRW1iZWRkZWRHcmFwaERhdGFiYXNlIFsvdG1wL25lbzRqXV0KK2dyZW1saW4+IGdyYXBoID0gVGlua2VyVHJhbnNhY3Rpb25HcmFwaC5vcGVuKCkKKz09PnRpbmtlcnRyYW5zYWN0aW9uZ3JhcGhbdmVydGljZXM6MCBlZGdlczowXQogZ3JlbWxpbj4gZyA9IHRyYXZlcnNhbCgpLndpdGgoZ3JhcGgpCi09PT5ncmFwaHRyYXZlcnNhbHNvdXJjZVtuZW80amdyYXBoW2NvbW11bml0eSBzaW5nbGUgWy90bXAvbmVvNGpdXSwgc3RhbmRhcmRdCis9PT5ncmFwaHRyYXZlcnNhbHNvdXJjZVt0aW5rZXJ0cmFuc2FjdGlvbmdyYXBoW3ZlcnRpY2VzOjAgZWRnZXM6MF0sIHN0YW5kYXJkXQogZ3JlbWxpbj4gZ3JhcGguZmVhdHVyZXMoKQogPT0+RkVBVFVSRVMKID4gR3JhcGhGZWF0dXJlcwogPi0tIFRyYW5zYWN0aW9uczogdHJ1ZSAgPDE+CiA+LS0gQ29tcHV0ZXI6IGZhbHNlCi0+LS0gUGVyc2lzdGVuY2U6IHRydWUKKz4tLSBQZXJzaXN0ZW5jZTogZmFsc2UKIC4uLgogZ3JlbWxpbj4gZy50eCgpLm9uUmVhZFdyaXRlKFRyYW5zYWN0aW9uLlJFQURfV1JJVEVfQkVIQVZJT1IuQVVUTykgPDI+Ci09PT5vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoJE5lbzRqVHJhbnNhY3Rpb25AMWMwNjdjMGQKLWdyZW1saW4+IGcuYWRkVigicGVyc29uIikuKCJuYW1lIiwic3RlcGhlbiIpICA8Mz4KKz09Pm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlclRyYW5zYWN0aW9uR3JhcGgkVGlua2VyVHJhbnNhY3Rpb25AMWMwNjdjMGQKK2dyZW1saW4+IGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCJzdGVwaGVuIikgIDwzPgogPT0+dlswXQogZ3JlbWxpbj4gZy50eCgpLmNvbW1pdCgpIDw0PgogPT0+bnVsbAogZ3JlbWxpbj4gZy50eCgpLm9uUmVhZFdyaXRlKFRyYW5zYWN0aW9uLlJFQURfV1JJVEVfQkVIQVZJT1IuTUFOVUFMKSA8NT4KLT09Pm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGgkTmVvNGpUcmFuc2FjdGlvbkAxYzA2N2MwZAorPT0+b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyVHJhbnNhY3Rpb25HcmFwaCRUaW5rZXJUcmFuc2FjdGlvbkAxYzA2N2MwZAogZ3JlbWxpbj4gZy50eCgpLmlzT3BlbigpCiA9PT5mYWxzZQotZ3JlbWxpbj4gZy5hZGRWKCJwZXJzb24iKS4oIm5hbWUiLCJtYXJrbyIpIDw2PgorZ3JlbWxpbj4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsIm1hcmtvIikgPDY+CiBPcGVuIGEgdHJhbnNhY3Rpb24gYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVhZC93cml0ZSB0aGUgdHJhbnNhY3Rpb24KIGdyZW1saW4+IGcudHgoKS5vcGVuKCkgPDc+CiA9PT5udWxsCi1ncmVtbGluPiBnLmFkZFYoInBlcnNvbiIpLigibmFtZSIsIm1hcmtvIikgPDg+CitncmVtbGluPiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwibWFya28iKSA8OD4KID09PnZbMV0KIGdyZW1saW4+IGcudHgoKS5jb21taXQoKQogPT0+bnVsbAogLS0tLQogCiA8MT4gQ2hlY2sgYGZlYXR1cmVzYCB0byBlbnN1cmUgdGhhdCB0aGUgZ3JhcGggc3VwcG9ydHMgdHJhbnNhY3Rpb25zLgotPDI+IEJ5IGRlZmF1bHQsIGBOZW80akdyYXBoYCBpcyBjb25maWd1cmVkIHdpdGggImF1dG9tYXRpYyIgdHJhbnNhY3Rpb25zLCBzbyBpdCBpcyBzZXQgaGVyZSBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5LgorPDI+IEJ5IGRlZmF1bHQsIGBUaW5rZXJUcmFuc2FjdGlvbkdyYXBoYCBpcyBjb25maWd1cmVkIHdpdGggImF1dG9tYXRpYyIgdHJhbnNhY3Rpb25zLCBzbyBpdCBpcyBzZXQgaGVyZSBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5LgogPDM+IFdoZW4gdGhlIHZlcnRleCBpcyBhZGRlZCwgdGhlIHRyYW5zYWN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgc3RhcnRlZC4gIEZyb20gdGhpcyBwb2ludCwgbW9yZSBtdXRhdGlvbnMgY2FuIGJlIHN0YWdlZAogb3Igb3RoZXIgcmVhZCBvcGVyYXRpb25zIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoYXQgb3BlbiB0cmFuc2FjdGlvbi4KIDw0PiBDYWxsaW5nIGBjb21taXRgIGZpbmFsaXplcyB0aGUgdHJhbnNhY3Rpb24uCkBAIC0yNjgsMjMgKzMwMCwxNCBAQAogW1t0eC1ncmVtbGluLXNlcnZlcl1dCiA9PT0gR3JlbWxpbiBTZXJ2ZXIKIAotVGhlIGF2YWlsYWJsZSBjYXBhYmlsaXR5IGZvciB0cmFuc2FjdGlvbnMgd2l0aCA8PGdyZW1saW4tc2VydmVyLEdyZW1saW4gU2VydmVyPj4gaXMgZGVwZW5kZW50IHVwb24gdGhlIG1ldGhvZCBvZgotaW50ZXJhY3Rpb24gdGhhdCBpcyB1c2VkLiBUaGUgcHJlZmVycmVkIG1ldGhvZCBmb3IgPDxjb25uZWN0aW5nLWdyZW1saW4tc2VydmVyLGludGVyYWN0aW5nIHdpdGggR3JlbWxpbiBTZXJ2ZXI+PgotaXMgdmlhIHdlYnNvY2tldHMgYW5kIGJ5dGVjb2RlIGJhc2VkIHJlcXVlc3RzLiBUaGUgc3RhcnQgb2YgdGhlIDw8dHJhbnNhY3Rpb25zLFRyYW5zYWN0aW9ucyBTZWN0aW9uPj4gZGVzY3JpYmVzIHRoaXMKLWFwcHJvYWNoIGluIGRldGFpbCB3aXRoIGV4YW1wbGVzLgorVGhlIGF2YWlsYWJsZSBjYXBhYmlsaXR5IGZvciB0cmFuc2FjdGlvbnMgd2l0aCA8PGdyZW1saW4tc2VydmVyLEdyZW1saW4gU2VydmVyPj4gaXMgZGVwZW5kZW50IHVwb24gdGhlIGdyYXBoCitjb25maWd1cmVkIG9uIHRoZSBzZXJ2ZXIuIFRoZSBncmFwaCBtdXN0IHN1cHBvcnQgdHJhbnNhY3Rpb25zIGZvciBgZy50eCgpLmJlZ2luKClgIHRvIHN1Y2NlZWQuIElmIHRoZSBncmFwaCBkb2VzIG5vdAorc3VwcG9ydCB0cmFuc2FjdGlvbnMgKGUuZy4gYSBiYXNpYyBgVGlua2VyR3JhcGhgKSwgdGhlIHNlcnZlciByZXR1cm5zIGFuIGVycm9yLiBVc2UgYFRpbmtlclRyYW5zYWN0aW9uR3JhcGhgIG9yCithbm90aGVyIHRyYW5zYWN0aW9uLWNhcGFibGUgZ3JhcGggaW1wbGVtZW50YXRpb24uCiAKLUdyZW1saW4gU2VydmVyIGFsc28gaGFzIHRoZSBvcHRpb24gdG8gYWNjZXB0IEdyZW1saW4tYmFzZWQgc2NyaXB0cy4gVGhlIHNjcmlwdGluZyBhcHByb2FjaCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlCi1HcmFwaCBBUEkgYW5kIHRodXMgYWxzbyB0aGUgdHJhbnNhY3Rpb25hbCBtb2RlbCBkZXNjcmliZWQgaW4gdGhlIDw8dHgtZW1iZWRkZWQsZW1iZWRkZWQ+PiBzZWN0aW9uLiBUaGVyZWZvcmUgYSBzaW5nbGUKLXNjcmlwdCBjYW4gaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBwZXIgcmVxdWVzdCB3aXRoIGNvbXBsZXRlIGNvbnRyb2wgcHJvdmlkZWQgdG8gdGhlCi1kZXZlbG9wZXIgdG8gY29tbWl0IG9yIHJvbGxiYWNrIHRyYW5zYWN0aW9ucyBhcyBuZWVkZWQuCitUaGUgR3JlbWxpbiBTZXJ2ZXIgaW1wbGVtZW50cyB0aGUgdHJhbnNhY3Rpb25zIGFzIHBhcnQgb2YgdGhlIEhUVFAgQVBJIGFuZCBpdCBubyBsb25nZXIgcnVucyBvbiB0b3Agb2Ygc2Vzc2lvbnMuCiAKLVRoZXJlIGFyZSB0d28gbWV0aG9kcyBmb3Igc2VuZGluZyBzY3JpcHRzIHRvIEdyZW1saW4gU2VydmVyOiBzZXNzaW9ubGVzcyBhbmQgc2Vzc2lvbi1iYXNlZC4gV2l0aCBzZXNzaW9ubGVzcyByZXF1ZXN0cwotdGhlcmUgd2lsbCBhbHdheXMgYmUgYW4gYXR0ZW1wdCB0byBjbG9zZSB0aGUgdHJhbnNhY3Rpb24gYXQgdGhlIGVuZCBvZiB0aGUgcmVxdWVzdCB3aXRoIGEgY29tbWl0IGlmIHRoZXJlIGFyZSBubyBlcnJvcnMKLW9yIGEgcm9sbGJhY2sgaWYgdGhlcmUgaXMgYSBmYWlsdXJlLiBJdCBpcyB0aGVyZWZvcmUgdW5uZWNlc3NhcnkgdG8gY2xvc2UgdHJhbnNhY3Rpb25zIG1hbnVhbGx5IHdpdGhpbiBzY3JpcHRzCi10aGVtc2VsdmVzLiBCeSBkZWZhdWx0LCBzZXNzaW9uLWJhc2VkIHJlcXVlc3RzIGRvIG5vdCBoYXZlIHRoaXMgcXVhbGl0eS4gVGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgaGVsZCBvcGVuIG9uIHRoZQotc2VydmVyIHVudGlsIHRoZSB1c2VyIGNsb3NlcyBpdCBtYW51YWxseS4gVGhlcmUgaXMgYW4gb3B0aW9uIHRvIGhhdmUgYXV0b21hdGljIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgZm9yIHNlc3Npb25zLgotTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljIGNhbiBiZSBmb3VuZCBpbiB0aGUgPDxjb25zaWRlcmluZy10cmFuc2FjdGlvbnMsQ29uc2lkZXJpbmcgVHJhbnNhY3Rpb25zPj4gU2VjdGlvbiBhbmQKLXRoZSA8PHNlc3Npb25zLENvbnNpZGVyaW5nIFNlc3Npb25zPj4gU2VjdGlvbi4KK0lNUE9SVEFOVDogU2Vzc2lvbnMgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gNC4wLjAuIFRyYW5zYWN0aW9ucyBhcmUgbm8gbG9uZ2VyIHRpZWQgdG8gc2Vzc2lvbnMuCiAKIFtbdHgtcmdwXV0KID09PSBSZW1vdGUgR3JlbWxpbiBQcm92aWRlcnMKQEAgLTExMjksNyArMTE1Miw3IEBACiAKID09PT0gSWYtVGhlbi1FbHNlCiAKLVRoZSBpZi10aGUtZWxzZSBzZW1hbnRpY3Mgb2YgYGNob29zZSgpYCBldmFsdWF0ZSBhIHByZWRpY2F0ZSB0cmF2ZXJzYWwgYW5kIHJvdXRlIHRoZSB0cmF2ZXJzZXIgdG8gZWl0aGVyIHRoZSAidHJ1ZSIKK1RoZSBpZi10aGVuLWVsc2Ugc2VtYW50aWNzIG9mIGBjaG9vc2UoKWAgZXZhbHVhdGUgYSBwcmVkaWNhdGUgdHJhdmVyc2FsIGFuZCByb3V0ZSB0aGUgdHJhdmVyc2VyIHRvIGVpdGhlciB0aGUgInRydWUiCiBicmFuY2ggb3IgdGhlICJmYWxzZSIgYnJhbmNoIGJhc2VkIG9uIHRoZSByZXN1bHQuCiAKIFtncmVtbGluLWdyb292eSxtb2Rlcm5dCkBAIC0xMTU5LDcgKzExODIsNyBAQAogLS0tLQogCiA8MT4gSWYgdGhlIHZlcnRleCBpcyBhIHBlcnNvbiwgZW1pdCB0aGUgdmVydGljZXMgdGhleSBjcmVhdGVkLCBlbHNlIGVtaXQgdGhlIHZlcnRleC4KLTwyPiBpZi10aGUtZWxzZSB3aXRoIGFuIGBpZGVudGl0eSgpYCBvbiB0aGUgZmFsc2UtYnJhbmNoIGlzIGVxdWl2YWxlbnQgdG8gaWYtdGhlbiB3aXRoIG5vIGZhbHNlLWJyYW5jaC4KKzwyPiBpZi10aGVuLWVsc2Ugd2l0aCBhbiBgaWRlbnRpdHkoKWAgb24gdGhlIGZhbHNlLWJyYW5jaCBpcyBlcXVpdmFsZW50IHRvIGlmLXRoZW4gd2l0aCBubyBmYWxzZS1icmFuY2guCiAKID09PT0gU3dpdGNoCiAKQEAgLTEyMzcsNyArMTI2MCw3IEBACiA8MT4gRm9yIHZlcnRpY2VzIHdpdGggYWdlIGJldHdlZW4gMjYtMzAsIHJldHVybiB0aGUgbmFtZS4gRm9yIHZlcnRpY2VzIHdpdGggYWdlIG91dHNpZGUgdGhhdCByYW5nZSwgcmV0dXJuIHRoZSBuYW1lLgogRm9yIHZlcnRpY2VzIHdpdGhvdXQgYW4gYWdlIHByb3BlcnR5LCByZXR1cm4gdGhlIGxhYmVsLgogPDI+IEZvciBwZW9wbGUgd2l0aCBubyBvdXRnb2luZyAia25vd3MiIGVkZ2VzLCByZXR1cm4gJ25vRnJpZW5kcycsIG90aGVyd2lzZSByZXR1cm4gJ2hhc0ZyaWVuZHMnLgotPDM+IFVzZSBgbm9uZSgpYCBzdGVwIGluIGNvbWJpbmF0aW9uIHdpdGggYFBpY2subm9uZWAgYW5kIGBQaWNrLnVucHJvZHVjdGl2ZWAgdG8gZmlsdGVyIHVucHJvZHVjdGl2ZSB0cmF2ZXJzYWxzIGFuZAorPDM+IFVzZSBgZGlzY2FyZCgpYCBzdGVwIGluIGNvbWJpbmF0aW9uIHdpdGggYFBpY2subm9uZWAgYW5kIGBQaWNrLnVucHJvZHVjdGl2ZWAgdG8gZmlsdGVyIHVucHJvZHVjdGl2ZSB0cmF2ZXJzYWxzIGFuZAogdW5tYXRjaGVkIHZhbHVlcy4KIAogSU1QT1JUQU5UOiBJdCBpcyBpbXBvcnRhbnQgdG8gdGhpbmsgb2YgYGNob29zZSgpYCBhcyBhIGJyYW5jaGluZyBzdGVwIGFuZCBub3QgYSBmaWx0ZXIuIFRoZSBpZi10aGVuIHNlbWFudGljcyBjYW4KQEAgLTEzNzUsNyArMTM5OCw3IEBACiAqQWRkaXRpb25hbCBSZWZlcmVuY2VzKgogCiBsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmh0bWwjY29uY2F0KGphdmEubGFuZy5TdHJpbmcpKytbYGNvbmNhdChTdHJpbmcuLi4pYF0KLWxpbms6KytodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2phdmFkb2NzL3gueS56L2NvcmUvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWwuaHRtbCNjb25jYXQob3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWwsb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWwuLi4pKytbYGNvbmNhdChUYXZlcnNhbCwgVHJhdmVyc2FsLi4uKWBdCitsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmh0bWwjY29uY2F0KG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsLG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsLi4uKSsrW2Bjb25jYXQoVHJhdmVyc2FsLCBUcmF2ZXJzYWwuLi4pYF0KIGxpbms6KytodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNjb25jYXQtc3RlcCsrW2BTZW1hbnRpY3NgXQogCiBbW2NvbmpvaW4tc3RlcF1dCkBAIC0yNDEzLDcgKzI0MzYsNyBAQAogbGFuZ3VhZ2VzLiBJdCBpcyBkZXNpZ25lZCB0byBiZSBzcGFjZSBlZmZpY2llbnQsIG5vbi1sb3NzeSBhbmQgaXMgcHJvbW90ZWQgYXMgdGhlIHN0YW5kYXJkIGZvcm1hdCB0byB1c2Ugd2hlbiB3b3JraW5nCiB3aXRoIGdyYXBoIGRhdGEgaW5zaWRlIG9mIHRoZSBUaW5rZXJQb3Agc3RhY2suIEEgbGlzdCBvZiBjb21tb24gdXNlIGNhc2VzIGlzIHByZXNlbnRlZCBiZWxvdzoKIAotKiBNaWdyYXRpb24gZnJvbSBvbmUgR3JlbWxpbiBTdHJ1Y3R1cmUgaW1wbGVtZW50YXRpb24gdG8gYW5vdGhlciAoZS5nLiBgVGlua2VyR3JhcGhgIHRvIGBOZW80akdyYXBoYCkKKyogTWlncmF0aW9uIGZyb20gb25lIEdyZW1saW4gU3RydWN0dXJlIGltcGxlbWVudGF0aW9uIHRvIGFub3RoZXIgKGUuZy4gYFRpbmtlckdyYXBoYCB0byBgSmFudXNHcmFwaGApCiAqIFNlcmlhbGl6YXRpb24gb2YgaW5kaXZpZHVhbCBncmFwaCBlbGVtZW50cyB0byBiZSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgdG8gYW5vdGhlciBKVk0uCiAqIEJhY2t1cHMgb2YgaW4tbWVtb3J5IGdyYXBocyBvciBzdWJncmFwaHMuCiAKQEAgLTMxMzUsNyArMzE1OCw3IEBACiBsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmh0bWwjbWVyZ2VFKGphdmEudXRpbC5NYXApKytbYG1lcmdlRShNYXApYF0sCiBsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmh0bWwjbWVyZ2VFKG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsKSsrW2BtZXJnZUUoVHJhdmVyc2FsKWBdLAogbGluazorK2h0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvamF2YWRvY3MveC55LnovY29yZS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL01lcmdlLmh0bWwrK1tgTWVyZ2VgXSwKLWxpbms6KytodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNfbWVyZ2VlKytbU2VtYW50aWNzXQorbGluazorK2h0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9kZXYvcHJvdmlkZXIvI21lcmdlLWUtc3RlcCsrW2BTZW1hbnRpY3NgXQogCiBbW21lcmdldmVydGV4LXN0ZXBdXQogPT09IE1lcmdlVmVydGV4IFN0ZXAKQEAgLTMzMzYsNyArMzM1OSw3IEBACiBsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmh0bWwjbWVyZ2VWKGphdmEudXRpbC5NYXApKytbYG1lcmdlVihNYXApYF0sCiBsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmh0bWwjbWVyZ2VWKG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsKSsrW2BtZXJnZVYoVHJhdmVyc2FsKWBdLAogbGluazorK2h0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvamF2YWRvY3MveC55LnovY29yZS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL01lcmdlLmh0bWwrK1tgTWVyZ2VgXSwKLWxpbms6KytodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovZGV2L3Byb3ZpZGVyLyNfbWVyZ2VlKytbU2VtYW50aWNzXQorbGluazorK2h0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9kZXYvcHJvdmlkZXIvI21lcmdlLXYtc3RlcCsrW2BTZW1hbnRpY3NgXQogCiBbW21pbi1zdGVwXV0KID09PSBNaW4gU3RlcApAQCAtMzM4MSw2ICszNDA0LDcgQEAKIHRoZSBzdXBwbGllZCBwcmVkaWNhdGUgYW5kIGlmIG5vbmUgb2YgdGhlIGl0ZW1zIHBhc3MgdGhlbiB0aGUgdHJhdmVyc2VyIGlzIHBhc3NlZCBhbG9uZyB0aGUgc3RyZWFtLCBvdGhlcndpc2UgaXQgaXMKIGZpbHRlcmVkLiBFbXB0eSBsaXN0cyBhcmUgcGFzc2VkIGFsb25nIGJ1dCBudWxsIG9yIG5vbi1pdGVyYWJsZSB0cmF2ZXJzZXJzIGFyZSBmaWx0ZXJlZCBvdXQuCiAKKwogTk9URTogUHJpb3IgdG8gcmVsZWFzZSAzLjguMCwgYG5vbmUoKWAgd2FzIGEgdHJhdmVyc2FsIGRpc2NhcmRpbmcgc3RlcCBwcmltYXJpbHkgdXNlZCBieSA8PGl0ZXJhdGUtc3RlcCxgaXRlcmF0ZSgpYD4+LgogVGhpcyBzdGVwIGhhcyBzaW5jZSBiZWVuIHJlbmFtZWQgdG8gPDxkaXNjYXJkLXN0ZXAsYGRpc2NhcmQoKWA+PgogCkBAIC0zMzk2LDcgKzM0MjAsNiBAQAogbGluazorK2h0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvamF2YWRvY3MveC55LnovY29yZS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9ncmFwaC9HcmFwaFRyYXZlcnNhbC5odG1sI25vbmUob3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QKSsrW2Bub25lKFApYF0sCiBsaW5rOisraHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9qYXZhZG9jcy94Lnkuei9jb3JlL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvUC5odG1sKytbYFBgXQogCi0KIFtbbm90LXN0ZXBdXQogPT09IE5vdCBTdGVwCiAKQEAgLTYwOTQsMjYgKzYxMTcsMjcgQEAKIAogPT09IEVsZW1lbnRJZFN0cmF0ZWd5CiAKLWBFbGVtZW50SWRTdHJhdGVneWAgcHJvdmlkZXMgY29udHJvbCBvdmVyIGVsZW1lbnQgaWRlbnRpZmllcnMuIFNvbWUgR3JhcGggaW1wbGVtZW50YXRpb25zLCBzdWNoIGFzIFRpbmtlckdyYXBoLAorYEVsZW1lbnRJZFN0cmF0ZWd5YCBwcm92aWRlcyBjb250cm9sIG92ZXIgZWxlbWVudCBpZGVudGlmaWVycy4gU29tZSBHcmFwaCBpbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgYFRpbmtlckdyYXBoYCwKIGFsbG93IHNwZWNpZmljYXRpb24gb2YgY3VzdG9tIGlkZW50aWZpZXJzIHdoZW4gY3JlYXRpbmcgZWxlbWVudHM6CiAKIFtncmVtbGluLWdyb292eV0KIC0tLS0KLWcgPSB0cmF2ZXJzYWwoKS53aXRoKFRpbmtlckdyYXBoLm9wZW4oKSkKK2cgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoVGlua2VyR3JhcGgub3BlbigpKQogdiA9IGcuYWRkVigpLnByb3BlcnR5KGlkLCc0MmEnKS5uZXh0KCkKIGcuVignNDJhJykKIC0tLS0KIAotT3RoZXIgYEdyYXBoYCBpbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgTmVvNGosIGdlbmVyYXRlIGVsZW1lbnQgaWRlbnRpZmllcnMgYXV0b21hdGljYWxseSBhbmQgY2Fubm90IGJlIGFzc2lnbmVkLgorT3RoZXIgYEdyYXBoYCBpbXBsZW1lbnRhdGlvbnMgZ2VuZXJhdGUgZWxlbWVudCBpZGVudGlmaWVycyBhdXRvbWF0aWNhbGx5IGFuZCBjYW5ub3QgYmUgYXNzaWduZWQuCiBBcyBhIGhlbHBlciwgYEVsZW1lbnRJZFN0cmF0ZWd5YCBjYW4gYmUgdXNlZCB0byBtYWtlIGlkZW50aWZpZXIgYXNzaWdubWVudCBwb3NzaWJsZSBieSB1c2luZyB2ZXJ0ZXggYW5kIGVkZ2UgaW5kaWNlcwotdW5kZXIgdGhlIGhvb2QuCit1bmRlciB0aGUgaG9vZC4gTm90ZSB0aGF0IHRoaXMgZGVtb25zdHJhdGlvbiBpcyB1c2luZyBgVGlua2VyR3JhcGhgIGZvciBjb252ZW5pZW5jZSwgaG93ZXZlciBpbiBwcmFjdGljZQorYEVsZW1lbnRJZFN0cmF0ZWd5YCBvZmZlcnMgbGl0dGxlIHZhbHVlIGluIGEgYEdyYXBoYCB3aGljaCBhbGxvd3MgY3VzdG9tIGlkZW50aWZpZXJzLgogCiBbZ3JlbWxpbi1ncm9vdnldCiAtLS0tCi1ncmFwaCA9IE5lbzRqR3JhcGgub3BlbignL3RtcC9uZW80aicpCiBzdHJhdGVneSA9IEVsZW1lbnRJZFN0cmF0ZWd5LmJ1aWxkKCkuY3JlYXRlKCkKLWcgPSB0cmF2ZXJzYWwoKS53aXRoKGdyYXBoKS53aXRoU3RyYXRlZ2llcyhzdHJhdGVneSkKK2cgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoVGlua2VyR3JhcGgub3BlbigpKS53aXRoU3RyYXRlZ2llcyhzdHJhdGVneSkKIGcuYWRkVigpLnByb3BlcnR5KGlkLCAnNDJhJykuaWQoKQorZy5WKCkuZWxlbWVudE1hcCgpCiAtLS0tCiAKIElNUE9SVEFOVDogVGhlIGtleSB0aGF0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIGFzc2lnbmVkIGlkZW50aWZpZXIgc2hvdWxkIGJlIGluZGV4ZWQgaW4gdGhlIHVuZGVybHlpbmcgZ3JhcGgKQEAgLTY1MzYsMTU4ICs2NTYwLDU3IEBACiBGb3J0dW5hdGVseSwgVGlua2VyUG9wIGhhcyBkZXZlbG9wZWQgYFRyYW5zbGF0b3JgIGluZnJhc3RydWN0dXJlIHRoYXQgd2lsbCBjb252ZXJ0IEdyZW1saW4gZnJvbSBvbmUgcHJvZ3JhbW1pbmcKIGxhbmd1YWdlIHN5bnRheCB0byBhbm90aGVyLgogCi1UaGUgZnVuY3Rpb25hbGl0eSByZWxldmFudCB0byBtb3N0IHVzZXJzIGlzIGFjdHVhbGx5IGEgc3ViLWZ1bmN0aW9uIG9mIGBUcmFuc2xhdG9yYCBpbmZyYXN0cnVjdHVyZSBhbmQgaXMgbW9yZQotc3BlY2lmaWNhbGx5IGEgYFNjcmlwdFRyYW5zbGF0b3JgIHdoaWNoIHRha2VzIEdyZW1saW4gYEJ5dGVjb2RlYCBvZiBhIHRyYXZlcnNhbCBhbmQgZ2VuZXJhdGVzIGEgYFN0cmluZ2AgcmVwcmVzZW50YXRpb24KLW9mIHRoYXQgYEJ5dGVjb2RlYCBpbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugc3ludGF4IHRoYXQgdGhlIGBTY3JpcHRUcmFuc2xhdG9yYCBpbnN0YW5jZSBzdXBwb3J0cy4gVGhlIHRyYW5zbGF0aW9uCi10aGVyZWZvcmUgYWxsb3dzIEdyZW1saW4gdG8gYmUgY29udmVydGVkIGZyb20gdGhlIGhvc3QgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2Ugb2YgdGhlIGBUcmFuc2xhdG9yYCB0byBhbm90aGVyLgorVGhlIGBHcmVtbGluVHJhbnNsYXRvcmAgY2xhc3MgaXMgY2FwYWJsZSBvZiB0cmFuc2xhdGluZyBgZ3JlbWxpbi1sYW5nYCBzeW50YXggc2NyaXB0cyBpbnRvIGFueSBvZiB0aGUgZm9sbG93aW5nCitncmVtbGluIGxhbmd1YWdlIHN5bnRheGVzOiBKYXZhLCBQeXRob24sIC5OZXQsIEdvLCBKYXZhU2NyaXB0LCBHcm9vdnkuIFRoZXJlIGlzIGFkZGl0aW9uYWxseSBhIHNwZWNpYWwgYW5vbnltaXppbmcKK3RyYW5zbGF0b3Igd2hpY2ggc3RyaXBzIG91dCBhcmd1bWVudHMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgY29udGFpbiBzZW5zaXRpdmUgaW5mb3JtYXRpb24uCiAKLVRoZSBmb2xsb3dpbmcgdHJhbnNsYXRvcnMgYXJlIGF2YWlsYWJsZSwgd2hlcmUgdGhlIGZpcnN0IGNvbHVtbiBpZGVudGlmaWVzIHRoZSBob3N0IHByb2dyYW1taW5nIGxhbmd1YWdlIGFuZCB0aGUKLWNvbHVtbnMgcmVwcmVzZW50IHRoZSBsYW5ndWFnZSB0aGF0IEdyZW1saW4gY2FuIGJlIGdlbmVyYXRlZCBpbjoKK1tzb3VyY2UsamF2YV0KKy0tLS0KK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLnRyYW5zbGF0b3IuR3JlbWxpblRyYW5zbGF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yLlRyYW5zbGF0b3I7CiAKLVt3aWR0aD0iMTAwJSIsY29scz0iPCxeLF4sXixeLF4sXiIsb3B0aW9ucz0iaGVhZGVyIl0KLXw9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXwgfEphdmEgfEdyb292eSB8SmF2YXNjcmlwdCB8Lk5FVCB8UHl0aG9uIHxHbwotfCpKYXZhKiB8LSB8WCB8WCB8WCB8WCB8WAotfCpHcm9vdnkqIHwgfFggfFggfCB8WCB8Ci18KkphdmFzY3JpcHQqIHwgfFggfC0gfCB8IHwKLXwqLk5FVCogfCB8WCB8IHwtIHwgfAotfCpQeXRob24qICB8IHxYIHwgfCB8LSB8Ci18KkdvKiB8IHxYIHwgfCB8IHwtCi18PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBKYXZhCitHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoImcuVigpLmhhc0xhYmVsKCdwZXJzb24nLCAnc29mdHdhcmUnLCAnY2xhc3MnKSIsIFRyYW5zbGF0b3IuSkFWQSkuZ2V0VHJhbnNsYXRlZCgpOworLy8gUmV0dXJuczogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIsIFwic29mdHdhcmVcIiwgXCJjbGFzc1wiKSIKIAotRWFjaCBwcm9ncmFtbWluZyBsYW5ndWFnZSBoYXMgaXRzIG93biBBUEkgZm9yIHRyYW5zbGF0aW9uLCBidXQgdGhlIHBhdHRlcm4gaXMgcXVpdGUgc2ltaWxhciBmcm9tIG9uZSB0byB0aGUgbmV4dDoKKy8vIFB5dGhvbgorR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJywgJ3NvZnR3YXJlJywgJ2NsYXNzJykiLCBUcmFuc2xhdG9yLlBZVEhPTikuZ2V0VHJhbnNsYXRlZCgpOworLy8gUmV0dXJuczogImcuVigpLmhhc19sYWJlbCgncGVyc29uJywgJ3NvZnR3YXJlJywgJ2NsYXNzJykiCiAKLVdBUk5JTkc6IFdoaWxlIGBUcmFuc2xhdG9yYCBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBiZWVuIGFyb3VuZCBmb3Igc29tZSB0aW1lLCB0aGV5IGFyZSBzdGlsbCBpbiB0aGVpciBlYXJseSBzdGFnZXMgZnJvbQotYW4gaW50ZXJmYWNlIHBlcnNwZWN0aXZlLiBBUEkgY2hhbmdlcyBtYXkgb2NjdXIgaW4gdGhlIG5lYXIgZnV0dXJlLgorLy8gLk5ldAorR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJywgJ3NvZnR3YXJlJywgJ2NsYXNzJykiLCBUcmFuc2xhdG9yLkRPVE5FVCkuZ2V0VHJhbnNsYXRlZCgpOworLy8gUmV0dXJuczogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIsIFwic29mdHdhcmVcIiwgXCJjbGFzc1wiKSIKKworLy8gR28KK0dyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicsICdzb2Z0d2FyZScsICdjbGFzcycpIiwgVHJhbnNsYXRvci5HTykuZ2V0VHJhbnNsYXRlZCgpOworLy8gUmV0dXJuczogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIsIFwic29mdHdhcmVcIiwgXCJjbGFzc1wiKSIKKworLy8gSmF2YVNjcmlwdAorR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJywgJ3NvZnR3YXJlJywgJ2NsYXNzJykiLCBUcmFuc2xhdG9yLkpBVkFTQ1JJUFQpLmdldFRyYW5zbGF0ZWQoKTsKKy8vIFJldHVybnM6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiLCBcInNvZnR3YXJlXCIsIFwiY2xhc3NcIikiCisKKy8vIEdyb292eQorR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJywgJ3NvZnR3YXJlJywgJ2NsYXNzJykiLCBUcmFuc2xhdG9yLkdST09WWSkuZ2V0VHJhbnNsYXRlZCgpOworLy8gUmV0dXJuczogImcuVigpLmhhc0xhYmVsKCdwZXJzb24nLCAnc29mdHdhcmUnLCAnY2xhc3MnKSIKKworLy8gQW5vbnltaXplZAorR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJywgJ3NvZnR3YXJlJywgJ2NsYXNzJykiLCBUcmFuc2xhdG9yLkFOT05ZTUlaRUQpLmdldFRyYW5zbGF0ZWQoKTsKKy8vIFJldHVybnM6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIKKy0tLS0KKworRWFjaCBHTFYgaXMgY2FwYWJsZSBvZiBwcm9kdWNpbmcgYSBgZ3JlbWxpbi1sYW5nYCBzY3JpcHQgZnJvbSBhIFRyYXZlcnNhbCwgd2hpY2ggY2FuIGJlIGZlZCBpbnRvIGBHcmVtbGluVHJhbnNsYXRvcmAgdG8KK2NvbnZlcnQgaW50byBhbnkgb2YgdGhlIHN1cHBvcnRlZCBzeW50YXhlcy4gRWFjaCBHTFYgaGFzIGEgdW5pcXVlIGludGVyZmFjZSwgYnV0IHRoZSBwYXR0ZXJuIGlzIHF1aXRlIHNpbWlsYXIgZnJvbSBvbmUKK3RvIHRoZSBuZXh0OgogCiBbc291cmNlLGphdmEsdGFiXQogLS0tLQotLy8gZ3JlbWxpbi1jb3JlIG1vZHVsZQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci4qOwotCi1HcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gLi4uOwotVHJhdmVyc2FsPFZlcnRleCxJbnRlZ2VyPiB0ID0gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUoaW4oImtub3dzIikpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMoImFnZSIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoTGFtYmRhLmZ1bmN0aW9uKCJpdC5nZXQoKSArIDEiKSk7Ci0KLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciBncm9vdnlUcmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIpOwotU3lzdGVtLm91dC5wcmludGxuKGdyb292eVRyYW5zbGF0b3IudHJhbnNsYXRlKHQpLmdldFNjcmlwdCgpKTsKLS8vIE9VVFBVVDogZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS53aGVyZShfXy5pbigia25vd3MiKSkudmFsdWVzKCJhZ2UiKS5tYXAoe2l0LmdldCgpICsgMX0pCi0KLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciBkb3RuZXRUcmFuc2xhdG9yID0gRG90TmV0VHJhbnNsYXRvci5vZigiZyIpOwotU3lzdGVtLm91dC5wcmludGxuKGRvdG5ldFRyYW5zbGF0b3IudHJhbnNsYXRlKHQpLmdldFNjcmlwdCgpKTsKLS8vIE9VVFBVVDogZy5WKCkuSGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS5XaGVyZShfXy5Jbigia25vd3MiKSkuVmFsdWVzPG9iamVjdD4oImFnZSIpLk1hcDxvYmplY3Q+KExhbWJkYS5Hcm9vdnkoIml0LmdldCgpICsgMSIpKQotCi1UcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgcHl0aG9uVHJhbnNsYXRvciA9IFB5dGhvblRyYW5zbGF0b3Iub2YoImciKTsKLVN5c3RlbS5vdXQucHJpbnRsbihweXRob25UcmFuc2xhdG9yLnRyYW5zbGF0ZSh0KS5nZXRTY3JpcHQoKSk7Ci0vLyBPVVRQVVQ6IGcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykud2hlcmUoX18uaW5fKCdrbm93cycpKS5hZ2UubWFwKGxhbWJkYTogIml0LmdldCgpICsgMSIpCi0KLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciBqYXZhc2NyaXB0VHJhbnNsYXRvciA9IEphdmFzY3JpcHRUcmFuc2xhdG9yLm9mKCJnIik7Ci1TeXN0ZW0ub3V0LnByaW50bG4oamF2YXNjcmlwdFRyYW5zbGF0b3IudHJhbnNsYXRlKHQpLmdldFNjcmlwdCgpKTsKLS8vIE9VVFBVVDogZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS53aGVyZShfXy5pbl8oImtub3dzIikpLnZhbHVlcygiYWdlIikubWFwKCgpID0+ICJpdC5nZXQoKSArIDEiKQotCi1UcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgZ29sYW5nVHJhbnNsYXRvciA9IEdvbGFuZ1RyYW5zbGF0b3Iub2YoImciKTsKLVN5c3RlbS5vdXQucHJpbnRsbihnb2xhbmdUcmFuc2xhdG9yLnRyYW5zbGF0ZSh0KS5nZXRTY3JpcHQoKSk7Ci0vLyBPVVRQVVQ6IGcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5XaGVyZShncmVtbGluZ28uVF9fLkluKCJrbm93cyIpKS5WYWx1ZXMoImFnZSIpLk1hcCgmZ3JlbWxpbmdvLkxhbWJkYXtTY3JpcHQ6Iml0LmdldCgpICsgMSIsIExhbmd1YWdlOiIifSkKLS0tLS0KLVtzb3VyY2UsamF2YXNjcmlwdF0KLS0tLS0KLWNvbnN0IGcgPSAuLi47Ci1jb25zdCB0ID0gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS4KLSAgICAgICAgICAgIHdoZXJlKGluXygia25vd3MiKSkuCi0gICAgICAgICAgICB2YWx1ZXMoImFnZSIpOwotCi0vLyBHcm9vdnkKLWNvbnN0IHRyYW5zbGF0b3IgPSBuZXcgZ3JlbWxpbi5wcm9jZXNzLlRyYW5zbGF0b3IoJ2cnKTsKLWNvbnNvbGUubG9nKHRyYW5zbGF0b3IudHJhbnNsYXRlKHQpKTsKLS8vIE9VVFBVVDogZy5WKCkuaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKS53aGVyZShfXy5pbigna25vd3MnKSkudmFsdWVzKCdhZ2UnKQorR3JhcGhUcmF2ZXJzYWwgdCA9IGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKTsKK1N0cmluZyBzY3JpcHQgPSB0LmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKTsKKy8vIFJldHVybnM6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSIKIC0tLS0KIFtzb3VyY2UscHl0aG9uXQogLS0tLQotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYW5zbGF0b3IgaW1wb3J0ICoKLQotZyA9IC4uLgotdCA9IChnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpLgotICAgICAgICAgIHdoZXJlKF9fLmluXygia25vd3MiKSkuCi0gICAgICAgICAgdmFsdWVzKCJhZ2UiKSkKLQotIyBHcm9vdnkKLXRyYW5zbGF0b3IgPSBUcmFuc2xhdG9yKCkub2YoJ2cnKTsKLXByaW50KHRyYW5zbGF0b3IudHJhbnNsYXRlKHQuYnl0ZWNvZGUpKTsKLSMgT1VUUFVUOiBnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpLndoZXJlKF9fLmluKCdrbm93cycpKS52YWx1ZXMoJ2FnZScpCit0ID0gZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKQorc2NyaXB0ID0gdC5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQorIyBSZXR1cm5zOiAiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpIgogLS0tLQotW3NvdXJjZSxjc2hhcnBdCi0tLS0tCi12YXIgZyA9IC4uLjsKLXZhciB0ID0gZy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLldoZXJlKEluKCJrbm93cyIpKS5WYWx1ZXM8aW50PigiYWdlIik7Ci0KLS8vIEdyb292eQotdmFyIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLk9mKCJnIik7Ci1Db25zb2xlLldyaXRlTGluZSh0cmFuc2xhdG9yLlRyYW5zbGF0ZSh0KSk7Ci0vLyBPVVRQVVQ6IGcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS53aGVyZShfXy5pbigna25vd3MnKSkudmFsdWVzKCdhZ2UnKQotLS0tLQotW3NvdXJjZSxnb10KLS0tLS0KLWcgOj0gLi4uCi10IDo9IGcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS4KLQlXaGVyZShUX18uSW4oImtub3dzIikpLgotCVZhbHVlcygiYWdlIikKLQotLy8gR3Jvb3Z5Ci10cmFuc2xhdG9yIDo9IE5ld1RyYW5zbGF0b3IoImciKQotcHJpbnQodHJhbnNsYXRvci5UcmFuc2xhdGUodC5CeXRlY29kZSkpCi0vLyBPVVRQVVQ6IGcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykud2hlcmUoaW4oJ2tub3dzJykpLnZhbHVlcygnYWdlJykKLS0tLS0KLQotVGhlIEpWTS1iYXNlZCB0cmFuc2xhdG9yIGhhcyB0aGUgYWRkZWQgb3B0aW9uIG9mIHBhcmFtZXRlciBleHRyYWN0aW9uLCB3aGVyZSB0aGUgdHJhbnNsYXRpb24gcHJvY2VzcyB3aWxsIGF0dGVtcHQgdG8KLWlkZW50aWZ5IG9wcG9ydHVuaXRpZXMgdG8gZ2VuZXJhdGUgYW4gb3V0cHV0IHRoYXQgd291bGQgcmVwbGFjZSBjb25zdGFudCB2YWx1ZXMgd2l0aCBwYXJhbWV0ZXJzLiBUaGUgcGFyYW1ldGVycyB3b3VsZAotdGhlbiBiZSBleHRyYWN0ZWQgYW5kIHJldHVybmVkIGFzIHBhcnQgb2YgdGhlIGBTY3JpcHRgIG9iamVjdDoKLQotW3NvdXJjZSxqYXZhXQotLS0tLQotVHJhdmVyc2FsPFZlcnRleCxJbnRlZ2VyPiB0ID0gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUoX18uaW4oImtub3dzIikpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMoImFnZSIpOwotLy8gc3BlY2lmeSB0cnVlIHRvIGF0dGVtcHQgcGFyYW1ldGVyIGV4dHJhY3Rpb24KLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIsIHRydWUpOwotU2NyaXB0IHMgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0KTsKLVN5c3RlbS5vdXQucHJpbnRsbihzLmdldFNjcmlwdCgpKTsKLS8vIE9VVFBVVDogZy5WKCkuaGFzKF9hcmdzXzAsX2FyZ3NfMSxfYXJnc18yKS53aGVyZShfXy5pbihfYXJnc18zKSkudmFsdWVzKF9hcmdzXzQpCi1TeXN0ZW0ub3V0LnByaW50bG4ocy5wYXJhbWV0ZXJzKTsKLS8vIE9VVFBVVDogT3B0aW9uYWxbe19hcmdzXzA9cGVyc29uLCBfYXJnc18yPW1hcmtvLCBfYXJnc18xPW5hbWUsIF9hcmdzXzQ9YWdlLCBfYXJnc18zPWtub3dzfV0KLS0tLS0KLQotVGhlIGBHcm9vdnlUcmFuc2xhdG9yYCBjYW4gdGFrZSBhIGBUeXBlVHJhbnNsYXRvcmAgYXJndW1lbnQgd2hpY2ggYWxsb3dzIHNvbWUgY3VzdG9taXphdGlvbiBvZiBob3cgdHlwZXMgZ2V0Ci1jb252ZXJ0ZWQgdG8gc2NyaXB0IGZvcm0uIFRoZSBgRGVmYXVsdFR5cGVUcmFuc2xhdG9yYCBpcyB1c2VkIGlmIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaXMgbm90IHNwZWNpZmllZC4gQSBidWlsdC1pbgotYWx0ZXJuYXRpdmUgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyB0aGUgYExhbmd1YWdlVHlwZVRyYW5zbGF0b3JgIHdoaWNoIHdpbGwgcHJlZmVyIHVzZSBvZiB0aGUgR3JlbWxpbiBsYW5ndWFnZQotYGRhdGV0aW1lKClgIGZ1bmN0aW9uIHJhdGhlciB0aGFuIHRoZSBKVk0gc3BlY2lmaWMgYERhdGVgIGFuZCBgVGltZXN0YW1wYCBjb252ZXJzaW9ucy4gVGhpcyB0cmFuc2xhdG9yIGNhbiBiZSBoZWxwZnVsCi13aGVuIGdlbmVyYXRpbmcgc2NyaXB0cyB0aGF0IHdpbGwgYmUgc2VudCB0byBHcmVtbGluIFNlcnZlciBvciBSZW1vdGUgR3JhcGggUHJvdmlkZXJzIHN1cHBvcnRpbmcgdGhlIGBkYXRldGltZSgpYCBmb3JtLgotCi1UaGUgYFB5dGhvblRyYW5zbGF0b3JgIGNhbiB0YWtlIGEgYFR5cGVUcmFuc2xhdG9yYCBhcmd1bWVudCB0byBkaXNhYmxlIHRoZSBzeW50YWN0aWMgc3VnYXIgd2hpY2ggdGhlIGRlZmF1bHQgdHJhbnNsYXRvcgotYXBwbGllcyB0byBjb252ZXJ0ZWQgcXVlcmllcy4gVGhlIGBEZWZhdWx0VHlwZVRyYW5zbGF0b3JgIGlzIHVzZWQgaWYgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgc3BlY2lmaWVkLgotCi1bc291cmNlLGphdmFdCi0tLS0tCi1UcmF2ZXJzYWw8VmVydGV4LFN0cmluZz4gdCA9IGcuVigpLnJhbmdlKDAsIDEwKS5oYXMoInBlcnNvbiIsIm5hbWUiLCJtYXJrbyIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCgyKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzKCJuYW1lIik7Ci0vLyBkZWZhdWx0IHRyYW5zbGF0b3IKLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gUHl0aG9uVHJhbnNsYXRvci5vZigiZyIpOwotU3RyaW5nIGRlZmF1bHRRdWVyeVRyYW5zbGF0aW9uID0gdHJhbnNsYXRvci50cmFuc2xhdGUodCkKLVN5c3RlbS5vdXQucHJpbnRsbihkZWZhdWx0UXVlcnlUcmFuc2xhdGlvbik7Ci0vLyBPVVRQVVQ6IGcuVigpWzA6MTBdLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJylbMDoyXS5uYW1lCi0KLS8vIG5vIHN5bmFudGljIHN1Z2FyIHRyYW5zbGF0b3IKLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciBub1N1Z2FyVHJhbnNsYXRvciA9IFB5dGhvblRyYW5zbGF0b3Iub2YoImciLCBuZXcgUHl0aG9uVHJhbnNsYXRvci5Ob1N1Z2FyVHJhbnNsYXRvcihmYWxzZSkpOwotU3RyaW5nIG5vU3VnYXJUcmFuc2xhdGlvbiA9IG5vU3VnYXJUcmFuc2xhdG9yLnRyYW5zbGF0ZSh0KQotU3lzdGVtLm91dC5wcmludGxuKG5vU3VnYXJUcmFuc2xhdGlvbik7Ci0vLyBPVVRQVVQ6IGcuVigpLnJhbmdlXygwLDEwKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpLmxpbWl0KDIpLnZhbHVlcygnbmFtZScpCi0KLS8vIFdpdGggcGFyYW1ldGVyIGV4dHJhY3Rpb24KLVRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciBub1N1Z2FyVHJhbnNsYXRvcldpdGhQYXJhbWV0ZXJzID0gUHl0aG9uVHJhbnNsYXRvci5vZigiZyIsIG5ldyBQeXRob25UcmFuc2xhdG9yLk5vU3VnYXJUcmFuc2xhdG9yKHRydWUpKTsKLVN0cmluZyBub1N1Z2FyVHJhbnNsYXRpb25XaXRoUGFyYW1ldGVycyA9IG5vU3VnYXJUcmFuc2xhdG9yV2l0aFBhcmFtZXRlcnMudHJhbnNsYXRlKHQpCi1TeXN0ZW0ub3V0LnByaW50bG4obm9TdWdhclRyYW5zbGF0aW9uV2l0aFBhcmFtZXRlcnMpOwotLy8gT1VUUFVUOiBnLlYoKS5yYW5nZV8oMCwxMCkuaGFzKF9hcmdzXzAsX2FyZ3NfMSxfYXJnc18yKS5saW1pdCgyKS52YWx1ZXMoX2FyZ3NfMSkKLS0tLS0KLQpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvdHV0b3JpYWxzL2dldHRpbmctc3RhcnRlZC9pbmRleC5hc2NpaWRvYyBiL2RvY3Mvc3JjL3R1dG9yaWFscy9nZXR0aW5nLXN0YXJ0ZWQvaW5kZXguYXNjaWlkb2MKaW5kZXggOGZjMWYyYS4uNTc0YjRjZSAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvdHV0b3JpYWxzL2dldHRpbmctc3RhcnRlZC9pbmRleC5hc2NpaWRvYworKysgYi9kb2NzL3NyYy90dXRvcmlhbHMvZ2V0dGluZy1zdGFydGVkL2luZGV4LmFzY2lpZG9jCkBAIC00Nyw3ICs0Nyw3IEBACiBpbWFnZTpncmVtbGluLXN0YW5kaW5nLnBuZ1t3aWR0aD0xMjVdCiAKIEdyZW1saW4gaGVscHMgeW91IG5hdmlnYXRlIHRoZSB2ZXJ0aWNlcyBhbmQgZWRnZXMgb2YgYSBncmFwaC4gSGUgaXMgZXNzZW50aWFsbHkgeW91ciBxdWVyeSBsYW5ndWFnZSB0byBncmFwaAotZGF0YWJhc2VzLCBhcyBsaW5rOmh0dHA6Ly9zcWwyZ3JlbWxpbi5jb20vW1NRTF0gaXMgdGhlIHF1ZXJ5IGxhbmd1YWdlIHRvIHJlbGF0aW9uYWwgZGF0YWJhc2VzLiBUbyB0ZWxsIEdyZW1saW4gaG93CitkYXRhYmFzZXMsIGFzIGxpbms6aHR0cHM6Ly9naXRodWIuY29tL2RrdXBwaXR6L3NxbDJncmVtbGluW1NRTF0gaXMgdGhlIHF1ZXJ5IGxhbmd1YWdlIHRvIHJlbGF0aW9uYWwgZGF0YWJhc2VzLiBUbyB0ZWxsIEdyZW1saW4gaG93CiBoZSBzaG91bGQgInRyYXZlcnNlIiB0aGUgZ3JhcGggKGkuZS4sIHdoYXQgeW91IHdhbnQgeW91ciBxdWVyeSB0byBkbykgeW91IG5lZWQgYSB3YXkgdG8gcHJvdmlkZSBoaW0gY29tbWFuZHMgaW4gdGhlCiBsYW5ndWFnZSBoZSB1bmRlcnN0YW5kcyDigJQgYW5kLCBvZiBjb3Vyc2UsIHRoYXQgbGFuZ3VhZ2UgaXMgY2FsbGVkICJHcmVtbGluIi4gRm9yIHRoaXMgdGFzaywgeW91IG5lZWQgb25lIG9mCiBUaW5rZXJQb3AncyBtb3N0IGltcG9ydGFudCB0b29sczogbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MveC55LnovcmVmZXJlbmNlLyNncmVtbGluLWNvbnNvbGVbVGhlIEdyZW1saW4gQ29uc29sZV0uCkBAIC02Nyw3ICs2Nyw3IEBACiAKICAgICAgICAgIFwsLCwvCiAgICAgICAgICAobyBvKQotLS0tLS1vT09vLSgzKS1vT09vLS0tLS0KKy0tLS0tb09Pby0oNCktb09Pby0tLS0tCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3Auc2VydmVyCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzCiBwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3R1dG9yaWFscy90aGUtZ3JlbWxpbi1jb25zb2xlL2luZGV4LmFzY2lpZG9jIGIvZG9jcy9zcmMvdHV0b3JpYWxzL3RoZS1ncmVtbGluLWNvbnNvbGUvaW5kZXguYXNjaWlkb2MKaW5kZXggMzFjNDEzYS4uMTk1YmE2MyAxMDA2NDQKLS0tIGEvZG9jcy9zcmMvdHV0b3JpYWxzL3RoZS1ncmVtbGluLWNvbnNvbGUvaW5kZXguYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvdHV0b3JpYWxzL3RoZS1ncmVtbGluLWNvbnNvbGUvaW5kZXguYXNjaWlkb2MKQEAgLTE2Miw3ICsxNjIsNyBAQAogCiBbZ3JlbWxpbi1ncm9vdnldCiAtLS0tCi06aGVscCA6cmVtb3RlCis6aGVscCA6cGx1Z2luCiAtLS0tCiAKIFRoZSBHcmVtbGluIENvbnNvbGUgY2FuIGFsc28gcHJvdmlkZSB5b3Ugd2l0aCBjb2RlIGhlbHAgdmlhIGF1dG8tY29tcGxldGUgZnVuY3Rpb25hbGl0eS4gVXNlIHRoZSBgPFRBQj5gIGtleSB0bwpAQCAtNTYxLDcgKzU2MSw2IEBACiBjb29yZGluYXRlcyAoaS5lLiBncm91cCwgYXJ0aWZhY3QsIGFuZCB2ZXJzaW9uKSBvZiBhIGxpYnJhcnkgdG8gaGF2ZSBpdCBhdXRvbWF0aWNhbGx5IGRvd25sb2FkZWQgZnJvbSBhIE1hdmVuCiByZXBvc2l0b3J5IGFuZCBwbGFjZWQgaW50byB0aGUgY29uc29sZSBjbGFzc3BhdGguIElmIHlvdSBoYXZlIHJlYWQgdGhyb3VnaCB0aGUgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24sIHlvdSB3b3VsZCBmaW5kCiBhIG51bWJlciBvZiBleGFtcGxlcyBvZiBgOmluc3RhbGxgIHVzYWdlIHRvIGJyaW5nIGluIHVuYnVuZGxlZCBUaW5rZXJQb3AgbGlicmFyaWVzLCBsaWtlCi1saW5rOmh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy94Lnkuei9yZWZlcmVuY2UvI25lbzRqLWdyZW1saW5bbmVvNGotZ3JlbWxpbl0gb3IKIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL3gueS56L3JlZmVyZW5jZS8jaGFkb29wLWdyZW1saW5baGFkb29wLWdyZW1saW5dLgogCiBJTVBPUlRBTlQ6IEJlZm9yZSB5b3UgdXNlIHRoZSBgOmluc3RhbGxgIGNvbW1hbmQsIHBsZWFzZSBiZSBzdXJlIHRvIHJlYWQgdGhlIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIG9uCmRpZmYgLS1naXQgYS9kb2NzL3NyYy91cGdyYWRlL2FwcGVuZGl4LmFzY2lpZG9jIGIvZG9jcy9zcmMvdXBncmFkZS9hcHBlbmRpeC5hc2NpaWRvYwppbmRleCA5Yzk3YmExLi5kYjAxMDVkIDEwMDY0NAotLS0gYS9kb2NzL3NyYy91cGdyYWRlL2FwcGVuZGl4LmFzY2lpZG9jCisrKyBiL2RvY3Mvc3JjL3VwZ3JhZGUvYXBwZW5kaXguYXNjaWlkb2MKQEAgLTY1LDYgKzY1LDggQEAKIAogPT09IFRpbmtlclBvcDIgRGF0YSBNaWdyYXRpb24KIAorTk9URTogQXMgb2YgVGlua2VyUG9wIDQuMC4wLCB0aGlzIHNlY3Rpb24gaXMgaGVyZSBmb3IgbGVnYWN5IHB1cnBvc2VzIG9ubHkuCisKIGltYWdlOmRhdGEtbWlncmF0aW9uLnBuZ1t3aWR0aD0zMDAsZmxvYXQ9cmlnaHRdIEZvciB0aG9zZSB1c2luZyBUaW5rZXJQb3AgMi54LCBtaWdyYXRpbmcgdG8gVGlua2VyUG9wIDMueCB3aWxsIG1lYW4gYQogbnVtYmVyIG9mIHByb2dyYW1taW5nIGNoYW5nZXMsIGJ1dCBtYXkgYWxzbyByZXF1aXJlIGEgbWlncmF0aW9uIG9mIHRoZSBkYXRhIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggaW1wbGVtZW50YXRpb24uICBGb3IKIGV4YW1wbGUsIHRyeWluZyB0byBvcGVuIGBUaW5rZXJHcmFwaGAgZGF0YSBmcm9tIFRpbmtlclBvcCAyLnggd2l0aCBUaW5rZXJQb3AgMy54IGNvZGUgd2lsbCBub3Qgd29yaywgaG93ZXZlciBvcGVuaW5nIGEKZGlmZiAtLWdpdCBhL2RvY3Mvc3JjL3VwZ3JhZGUvaW5kZXguYXNjaWlkb2MgYi9kb2NzL3NyYy91cGdyYWRlL2luZGV4LmFzY2lpZG9jCmluZGV4IGQyOTczMjkuLjYzMzc5YjggMTAwNjQ0Ci0tLSBhL2RvY3Mvc3JjL3VwZ3JhZGUvaW5kZXguYXNjaWlkb2MKKysrIGIvZG9jcy9zcmMvdXBncmFkZS9pbmRleC5hc2NpaWRvYwpAQCAtMzAsNiArMzAsOCBAQAogZXF1YWxseSB1c2VmdWwgdG8gVGlua2VyUG9wIHByb3ZpZGVycywgd2hvIGJ1aWxkIGxpYnJhcmllcyBhbmQgb3RoZXIgc3lzdGVtcyBvbiB0aGUgY29yZSBBUElzIGFuZCBwcm90b2NvbHMgdGhhdAogVGlua2VyUG9wIGV4cG9zZXMuCiAKK2luY2x1ZGU6OnJlbGVhc2UtNC54LnguYXNjaWlkb2NbXQorCiA9IFRpbmtlclBvcCAzLjguMAogCiBpbWFnZTo6Z3JlbWxpbi02Ny5wbmdbd2lkdGg9MTg1XQpkaWZmIC0tZ2l0IGEvZG9jcy9zcmMvdXBncmFkZS9yZWxlYXNlLTQueC54LmFzY2lpZG9jIGIvZG9jcy9zcmMvdXBncmFkZS9yZWxlYXNlLTQueC54LmFzY2lpZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTAxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NyYy91cGdyYWRlL3JlbGVhc2UtNC54LnguYXNjaWlkb2MKQEAgLTAsMCArMSw5NzkgQEAKKy8vLy8KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy8vLy8KKworPSBUaW5rZXJQb3AgNC4wLjAKKworaW1hZ2U6OmdyZW1saW5zLXdpbGRlc3QtZHJlYW1zLnBuZ1t3aWR0aD0xODVdCisKKypHcmVtbGluJ3MgV2lsZGVzdCBEcmVhbXMqCisKKz09IFRpbmtlclBvcCA0LjAuMAorCisqUmVsZWFzZSBEYXRlOiBOT1QgT0ZGSUNJQUxMWSBSRUxFQVNFRCBZRVQqCisKK1BsZWFzZSBzZWUgdGhlIGxpbms6aHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvYmxvYi80LjAuMC9DSEFOR0VMT0cuYXNjaWlkb2MjcmVsZWFzZS00LTAtMFtjaGFuZ2Vsb2ddIGZvciBhCitjb21wbGV0ZSBsaXN0IG9mIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgcmVsZWFzZS4KKworPT09IFVwZ3JhZGluZyBmb3IgVXNlcnMKKworPT09PSBHcmVtbGF0b3IKKworbGluazpodHRwczovL2dyZW1sYXRvci5jb21bR3JlbWxhdG9yXSBoYXMgYmVlbiByZWJ1aWx0IGVudGlyZWx5IGluIEphdmFTY3JpcHQgYXMgYSBicm93c2VyLWJhc2VkIHNpbmdsZS1wYWdlCithcHBsaWNhdGlvbiBhbmQgaXMgbm93IGFuIG9mZmljaWFsIHBhcnQgb2YgdGhlIEFwYWNoZSBUaW5rZXJQb3AgcHJvamVjdC4gSXQgdHJhbnNsYXRlcyBHcmVtbGluIHF1ZXJpZXMgaW50bworZXF1aXZhbGVudCByZXByZXNlbnRhdGlvbnMgaW4gYWxsIHN1cHBvcnRlZCBsYW5ndWFnZSB2YXJpYW50czogR3Jvb3Z5LCBKYXZhLCBQeXRob24sIEphdmFTY3JpcHQsIEdvLCAuTkVULCBhbmQgYW4KK2Fub255bWl6ZWQgZm9ybS4gVGhlIG9yaWdpbmFsIGdyZW1sYXRvci5jb20gd2FzIGEgcHJvdG90eXBlIGJ1aWx0IGJ5IFRpbmtlclBvcCBjb21taXR0ZXIgRGF2ZSBCZWNoYmVyZ2VyOyB0aGUKK3ByZXZpb3VzIGltcGxlbWVudGF0aW9uIHJlcXVpcmVkIEphdmEgYW5kIGEgcnVubmluZyBHcmVtbGluIFNlcnZlciwgd2hlcmVhcyB0aGUgbmV3IHZlcnNpb24gcnVucyBlbnRpcmVseSBpbiB0aGUKK2Jyb3dzZXIgd2l0aCBubyBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkLgorCis9PT09IFJlbW92ZWQgYHV1aWRgIERlcGVuZGVuY3kgaW4gZ3JlbWxpbi1qYXZhc2NyaXB0CisKK1RoZSBgdXVpZGAgbnBtIHBhY2thZ2UgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIGBncmVtbGluLWphdmFzY3JpcHRgLiBVVUlEIGdlbmVyYXRpb24gbm93IHVzZXMgdGhlIGJ1aWx0LWluCitgZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRCgpYCBBUEksIHdoaWNoIGlzIGF2YWlsYWJsZSBpbiBOb2RlLmpzIDE5KyBhbmQgYWxsIG1vZGVybiBicm93c2Vycy4KKworVGhpcyBjaGFuZ2UgaGFzIG5vIGltcGFjdCBvbiBob3cgVVVJRCB2YWx1ZXMgYXJlIHNlbnQgdG8gb3IgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIOKAlCBVVUlEIHNlcmlhbGl6YXRpb24gYW5kCitkZXNlcmlhbGl6YXRpb24gaW4gR3JhcGhCaW5hcnkgaXMgdW5jaGFuZ2VkLiBBcHBsaWNhdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlIGB1dWlkYCBwYWNrYWdlIHNvbGVseSBiZWNhdXNlCitgZ3JlbWxpbi1qYXZhc2NyaXB0YCBicm91Z2h0IGl0IGluIGFzIGEgdHJhbnNpdGl2ZSBkZXBlbmRlbmN5IHNob3VsZCBhZGQgaXQgZGlyZWN0bHkgdG8gdGhlaXIgb3duIGBwYWNrYWdlLmpzb25gCitpZiB0aGV5IHN0aWxsIG5lZWQgaXQuCisKKz09IFRpbmtlclBvcCA0LjAuMC1iZXRhLjIKKworKlJlbGVhc2UgRGF0ZTogQXByaWwgMSwgMjAyNioKKworUGxlYXNlIHNlZSB0aGUgbGluazpodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iLzQuMC4wLWJldGEuMi9DSEFOR0VMT0cuYXNjaWlkb2MjcmVsZWFzZS00LTAtMC1iZXRhLTJbY2hhbmdlbG9nXSBmb3IgYQorY29tcGxldGUgbGlzdCBvZiBhbGwgdGhlIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHJlbGVhc2UuCisKKz09PSBVcGdyYWRpbmcgZm9yIFVzZXJzCisKKz09PT0gUHl0aG9uIFByb3BlcnR5IEFjY2VzcworCitUaGUgYEVsZW1lbnRgIGNsYXNzIGluIGBncmVtbGluLXB5dGhvbmAgbm93IHN1cHBvcnRzIGBfX2NvbnRhaW5zX19gIGFuZCBga2V5cygpYCwgZW5hYmxpbmcgbW9yZSBpZGlvbWF0aWMgUHl0aG9uCitwYXR0ZXJucyBmb3Igd29ya2luZyB3aXRoIGVsZW1lbnQgcHJvcGVydGllcy4gWW91IGNhbiBub3cgdXNlIHRoZSBgaW5gIG9wZXJhdG9yIHRvIGNoZWNrIGZvciBwcm9wZXJ0eSBleGlzdGVuY2UgYW5kCitga2V5cygpYCB0byByZXRyaWV2ZSB0aGUgc2V0IG9mIHByb3BlcnR5IG5hbWVzOgorCitbc291cmNlLHB5dGhvbl0KKy0tLS0KK3YgPSBnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdzdGVwaGVuJykubmV4dCgpCisKKyMgY2hlY2sgaWYgYSBwcm9wZXJ0eSBleGlzdHMKK2lmICJhZ2UiIGluIHY6CisgICAgcHJpbnQodlsiYWdlIl0pCisKKyMgZ2V0IGFsbCBwcm9wZXJ0eSBrZXlzCitwcmludCh2LmtleXMoKSkgICMgeyduYW1lJywgJ2FnZSd9CistLS0tCisKK1NlZTogbGluazpodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUC0zMTE5W1RJTktFUlBPUC0zMTE5XQorCis9PT09IFJ1bnRpbWUgVXBncmFkZXMKKworQWxsIEphdmFTY3JpcHQgcHJvamVjdHMgKGBncmVtbGluLWphdmFzY3JpcHRgLCBgZ3JlbWxpbi1tY3BgLCBgZ3JlbWxpbnRgKSBoYXZlIGJlZW4gdXBncmFkZWQgdG8gbm9kZSB2ZXJzaW9uIDIyLgorCis9PT09IFJlc3VsdFF1ZXVlIFJlbW92ZWQKKworVGhlIHB1YmxpYyBjbGFzcyBgUmVzdWx0UXVldWVgIGluIGBncmVtbGluLWRyaXZlcmAgaGFzIGJlZW4gcmVtb3ZlZC4gSXRzIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbWVyZ2VkIGludG8KK2BSZXN1bHRTZXRgLiBVc2VycyBvZiB0aGlzIGNsYXNzIHNob3VsZCByZWZlcmVuY2UgdGhlIG5ld2x5IGFkZGVkIG1ldGhvZHMgb2YgYFJlc3VsdFNldGAgaW5zdGVhZC4KKworPT09PSBuZW80ai1ncmVtbGluIFJlbW92ZWQKKworVGhlIG1vZHVsZSBgbmVvNGotZ3JlbWxpbmAgd2FzIGRlcHJlY2F0ZWQgaW4gMy43LjAgYW5kIGhhcyBub3cgYmVlbiByZW1vdmVkLiBJdCB3YXMgYmFzZWQgb24gdmVyc2lvbiAzLjQgb2YgTmVvNGogd2hpY2gKK3JlYWNoZWQgRU9MIGluIE1hcmNoIDIwMjAuIFVzZXJzIHRoYXQgZGVwZW5kIG9uIHRoaXMgbW9kdWxlIHdpbGwgbmVlZCB0byBzdGF5IG9uIHRoZSAzLnggbGluZS4KKworPT09PSBHcmVtbGluIE1DUCBTZXJ2ZXIKKworPT09PT0gR3JlbWxpbiBRdWVyeSBUcmFuc2xhdGlvbgorCitBIGB0cmFuc2xhdGVfZ3JlbWxpbl9xdWVyeWAgdG9vbCBpcyBub3cgYXZhaWxhYmxlIHRoYXQgdHJhbnNsYXRlcyBhIEdyZW1saW4gcXVlcnkgaW50byBhIHRhcmdldCBsYW5ndWFnZSB2YXJpYW50LgorU3VwcG9ydGVkIHRhcmdldHMgYXJlIGBjYW5vbmljYWxgLCBgamF2YXNjcmlwdGAsIGBweXRob25gLCBgZ29gLCBgZG90bmV0YCwgYGphdmFgLCBgZ3Jvb3Z5YCwgYW5kIGBhbm9ueW1pemVkYC4KKworVGhlIG9wdGlvbmFsIGBzb3VyY2VgIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIGRpYWxlY3Qgb2YgdGhlIGlucHV0LiBXaGVuIG9taXR0ZWQgb3Igc2V0IHRvIGBhdXRvYCwgdGhlIHNlcnZlcgorbm9ybWFsaXplcyB0aGUgaW5wdXQgYmVmb3JlIHRyYW5zbGF0aW5nIOKAlCBmaXJzdCBieSBhcHBseWluZyBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9ucyAoc3RyaXBwaW5nIGxhbmd1YWdlLXNwZWNpZmljCitwcmVmaXhlcywgY29ycmVjdGluZyBzdGVwIGNhc2luZywgZXRjLikgYW5kIHRoZW4gYnkgcmVxdWVzdGluZyBMTE0gbm9ybWFsaXphdGlvbiBmcm9tIHRoZSBNQ1AgY2xpZW50IHZpYSBNQ1AKK3NhbXBsaW5nLiBJZiB0aGUgTUNQIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nLCB0aGUgTExNIHN0ZXAgaXMgc2tpcHBlZCBncmFjZWZ1bGx5IGFuZCBhIHdhcm5pbmcgaXMgaW5jbHVkZWQKK2luIHRoZSByZXNwb25zZS4gU2V0IGBzb3VyY2VgIHRvIGBjYW5vbmljYWxgIHRvIGJ5cGFzcyBub3JtYWxpemF0aW9uIGVudGlyZWx5IHdoZW4gdGhlIGlucHV0IGlzIGFscmVhZHkgaW4gY2Fub25pY2FsCitncmVtbGluLWxhbmd1YWdlIEFOVExSIGZvcm1hdC4KKworU29tZSBleGFtcGxlIHByb21wdHMgdGhhdCB3aWxsIGludm9rZSB0aGlzIHRvb2w6CisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KK1RyYW5zbGF0ZSBnLlYoKS5oYXMoJ25hbWUnLCdBbGljZScpLm91dCgna25vd3MnKS52YWx1ZXMoJ25hbWUnKSB0byBQeXRob24uCistLS0tCisKK1tzb3VyY2UsdGV4dF0KKy0tLS0KK0NvbnZlcnQgdGhpcyBHbyBHcmVtbGluIHRyYXZlcnNhbCB0byBHcm9vdnk6CitncmVtbGluZ28uVF9fLlYoKS5IYXMoIm5hbWUiLCAiQWxpY2UiKS5PdXQoImtub3dzIikuVmFsdWVzKCJuYW1lIikKKy0tLS0KKworW3NvdXJjZSx0ZXh0XQorLS0tLQorSSBoYXZlIHNvbWUgSmF2YSBHcmVtbGluIGNvZGUuIFRyYW5zbGF0ZSBpdCB0byBjYW5vbmljYWwgZm9ybWF0IHNvIEkgY2FuIHJldmlldyBpdDoKK2cuVigpLmhhcygibmFtZSIsICJBbGljZSIpLm91dCgia25vd3MiKS52YWx1ZXMoIm5hbWUiKQorLS0tLQorCis9PT09PSBPZmZsaW5lIE1vZGUKKworYEdSRU1MSU5fTUNQX0VORFBPSU5UYCBpcyBubyBsb25nZXIgcmVxdWlyZWQgdG8gc3RhcnQgdGhlIHNlcnZlci4gV2hlbiBubyBlbmRwb2ludCBpcyBjb25maWd1cmVkLCBncmFwaCB0b29scworKGBnZXRfZ3JhcGhfc3RhdHVzYCwgYGdldF9ncmFwaF9zY2hlbWFgLCBgcnVuX2dyZW1saW5fcXVlcnlgKSBhcmUgbm90IHJlZ2lzdGVyZWQsIGJ1dCB0aGUgdXRpbGl0eSB0b29scworKGB0cmFuc2xhdGVfZ3JlbWxpbl9xdWVyeWAsIGBmb3JtYXRfZ3JlbWxpbl9xdWVyeWApIHJlbWFpbiBmdWxseSBhdmFpbGFibGUuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHRoZQorR3JlbWxpbiBNQ1AgU2VydmVyIHB1cmVseSBhcyBhIHRyYW5zbGF0aW9uIGFuZCBmb3JtYXR0aW5nIGFpZCB3aXRob3V0IGFueSBncmFwaCBkYXRhYmFzZToKKworW3NvdXJjZSx0ZXh0XQorLS0tLQorRm9ybWF0IHRoaXMgR3JlbWxpbiBxdWVyeSBmb3IgcmVhZGFiaWxpdHk6CitnLlYoKS5oYXMoJ25hbWUnLCdBbGljZScpLm91dCgna25vd3MnKS5vdXQoJ2tub3dzJykud2hlcmUobmVxKCdBbGljZScpKS52YWx1ZXMoJ25hbWUnKS5kZWR1cCgpCistLS0tCisKKz09PT0gU0xGNGogMi54CisKK1RpbmtlclBvcCBoYXMgZ2VuZXJhbGx5IHVwZ3JhZGVkIHRvIFNMRjRqIDIueCB3aGljaCBicmluZ3Mgd2l0aCBpdCBzb21lIGltcG9ydGFudCBjaGFuZ2VzIHRvIGxvZyBpbml0aWFsaXphdGlvbiB3aGljaAorbWF5IGFmZmVjdCB1c2VyIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSB1cGdyYWRpbmcgZnJvbSBUaW5rZXJQb3AgMy54LiBQbGVhc2Ugc2VlIHRoZQorbGluazpodHRwczovL3d3dy5zbGY0ai5vcmcvZmFxLmh0bWxbU0xGNGogRkFRXSAoc3BlY2lmaWNhbGx5ICJXaGF0IGhhcyBjaGFuZ2VkIGluIFNMRjRKIHZlcnNpb24gMi4wLjA/IikgdGhhdCBleHBsYWlucwordGhlIGRpZmZlcmVuY2VzIGFuZCBob3cgdGhleSBtaWdodCBhcHBseS4KKworW1tjYW5vbmljYWwtZ3JlbWxpbl1dCis9PT09IENhbm9uaWNhbCBHcmVtbGluCisKK0luIHByZXZpb3VzIHZlcnNpb25zLCBHTFYgZHJpdmVycyBzZW50IHRyYXZlcnNhbHMgdG8gdGhlIHNlcnZlciBhcyBzZXJpYWxpemVkIGBCeXRlY29kZWAgb2JqZWN0cy4gSW4gNC4wLCBgQnl0ZWNvZGVgCitoYXMgYmVlbiByZXBsYWNlZCBieSBgR3JlbWxpbkxhbmdgLCB3aGljaCBwcm9kdWNlcyBhIGNhbm9uaWNhbCBHcmVtbGluIHN0cmluZyBhbG9uZyB3aXRoIGEgbWFwIG9mIG5hbWVkIHBhcmFtZXRlcnMuCisiQ2Fub25pY2FsIEdyZW1saW4iIGlzIHRoZSBzdGFuZGFyZCwgbGFuZ3VhZ2UtbmV1dHJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0cmF2ZXJzYWwgYXMgZGVmaW5lZCBieSB0aGUgQU5UTFIKK2dyYW1tYXIgaW4gdGhlIGBncmVtbGluLWxhbmd1YWdlYCBtb2R1bGUuIEVhY2ggR0xWIG5vdyBidWlsZHMgdGhpcyBjYW5vbmljYWwgc3RyaW5nIGRpcmVjdGx5LCBhbmQgdGhlIHNlcnZlcidzCitgZ3JlbWxpbi1sYW5nYCBzY3JpcHQgZW5naW5lIHBhcnNlcyBpdCB1c2luZyB0aGUgc2FtZSBncmFtbWFyLgorCitUaGlzIGNoYW5nZSBtZWFucyBhbGwgZHJpdmVycyBzcGVhayB0aGUgc2FtZSBsYW5ndWFnZSBvbiB0aGUgd2lyZS4gUmVxdWVzdCBwYXlsb2FkcyBhcmUgbm93IGh1bWFuLXJlYWRhYmxlIHN0cmluZ3MKK3JhdGhlciB0aGFuIG9wYXF1ZSBiaW5hcnkgYnl0ZWNvZGUsIG1ha2luZyBpdCBlYXNpZXIgdG8gZGVidWcsIGxvZywgYW5kIHJlYXNvbiBhYm91dCB3aGF0IGlzIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlci4KK1doZW4gZG9jdW1lbnRhdGlvbiBvciBjb2RlIHJlZmVycyB0byBhICJncmVtbGluLWxhbmcgc3RyaW5nIiwgImNhbm9uaWNhbCBHcmVtbGluIiwgb3IgImNhbm9uaWNhbCBmb3JtYXQiLCBpdCBtZWFucyBhCit0cmF2ZXJzYWwgc3RyaW5nIHRoYXQgY29uZm9ybXMgdG8gdGhpcyBBTlRMUiBncmFtbWFyLgorCitGb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBjYW5vbmljYWwgR3JlbWxpbiB3aXRoIGV4YW1wbGVzIGluIGVhY2ggbGFuZ3VhZ2UsIHNlZQorbGluazpodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvNC4wLjAtYmV0YS4yL3JlZmVyZW5jZS8jY2Fub25pY2FsLWdyZW1saW4tZGVmaW5pdGlvbltDYW5vbmljYWwgR3JlbWxpbiBhbmQgR3JlbWxpbkxhbmddCitpbiB0aGUgUmVmZXJlbmNlIERvY3VtZW50YXRpb24uCisKK1tbZ2x2LWRyaXZlci1jaGFuZ2VzXV0KKz09PT0gR0xWIERyaXZlciBDaGFuZ2VzCisKK0FsbCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQgZHJpdmVycyBoYXZlIGJlZW4gdXBkYXRlZCB3aXRoIHRocmVlIG1ham9yIGNoYW5nZXMgaW4gVGlua2VyUG9wIDQuMDoKKworMS4gKldlYlNvY2tldHMgcmVwbGFjZWQgYnkgSFRUUCog4oCUIEFsbCBkcml2ZXJzIG5vdyBjb21tdW5pY2F0ZSB3aXRoIEdyZW1saW4gU2VydmVyIG92ZXIgSFRUUC8xLjEgdXNpbmcgUE9TVCByZXF1ZXN0cy4KKyAgIFdlYlNvY2tldC1zcGVjaWZpYyBzZXR0aW5ncyBhbmQgY2xhc3NlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gQ29ubmVjdGlvbiBVUkxzIGNoYW5nZSBmcm9tIGB3czovL2AgdG8gYGh0dHA6Ly9gIChvcgorICAgYHdzczovL2AgdG8gYGh0dHBzOi8vYCkuIEhUVFAgY29ubmVjdGlvbiBwb29saW5nIGlzIGhhbmRsZWQgYnkgZWFjaCBsYW5ndWFnZSdzIHN0YW5kYXJkIEhUVFAgbGlicmFyeS4KKworMi4gKkJ5dGVjb2RlIHJlcGxhY2VkIGJ5IEdyZW1saW5MYW5nKiDigJQgVHJhdmVyc2FscyBhcmUgbm8gbG9uZ2VyIHNlcmlhbGl6ZWQgYXMgYEJ5dGVjb2RlYCBvYmplY3RzLiBJbnN0ZWFkLCBlYWNoIEdMVgorICAgcHJvZHVjZXMgYSA8PGNhbm9uaWNhbC1ncmVtbGluLCBjYW5vbmljYWwgR3JlbWxpbj4+IHN0cmluZyB2aWEgYEdyZW1saW5MYW5nYCwgd2hpY2ggaXMgc2VudCB0byB0aGUgc2VydmVyIGFsb25nIHdpdGgKKyAgIGEgcGFyYW1ldGVyIG1hcC4gVGhpcyBzaW1wbGlmaWVzIHRoZSB3aXJlIHByb3RvY29sIGFuZCBtYWtlcyByZXF1ZXN0IHBheWxvYWRzIGh1bWFuLXJlYWRhYmxlLgorCiszLiAqSW50ZXJjZXB0b3ItYmFzZWQgYXV0aGVudGljYXRpb24qIOKAlCBXaXRoIHRoZSBtb3ZlIHRvIEhUVFAsIGF1dGhlbnRpY2F0aW9uIGlzIG5vdyBoYW5kbGVkIHBlci1yZXF1ZXN0IHRocm91Z2gKKyAgIEhUVFAgaGVhZGVycyByYXRoZXIgdGhhbiBkdXJpbmcgYSBjb25uZWN0aW9uIGhhbmRzaGFrZS4gQWxsIGRyaXZlcnMgdXNlIHJlcXVlc3QgaW50ZXJjZXB0b3JzIHRvIGFkZCBhdXRoIGhlYWRlcnMKKyAgIGJlZm9yZSBlYWNoIHJlcXVlc3QgaXMgc2VudC4gQnVpbHQtaW4gaW50ZXJjZXB0b3JzIGFyZSBwcm92aWRlZCBmb3IgdHdvIGNvbW1vbiBzY2VuYXJpb3M6CisgICAtIGBCYXNpY0F1dGhgIOKAlCBhZGRzIGEgc3RhbmRhcmQgSFRUUCBCYXNpYyBgQXV0aG9yaXphdGlvbmAgaGVhZGVyICh1c2VybmFtZS9wYXNzd29yZCkuIFRoaXMgcmVwbGFjZXMgdGhlIHByZXZpb3VzCisgICAgIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgb3IgU0FTTCBhdXRoZW50aWNhdG9ycyB1c2VkIGluIDMueC4KKyAgIC0gYFNpZ1Y0QXV0aGAg4oCUIHNpZ25zIHJlcXVlc3RzIHVzaW5nIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0LiBUaGUgaW50ZXJjZXB0b3IgaGFuZGxlcyBjcmVkZW50aWFsIHJlc29sdXRpb24KKyAgICAgKGluY2x1ZGluZyBhdXRvbWF0aWMgcmVmcmVzaCBmb3IgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzKSBhbmQgcmVxdWVzdCBzaWduaW5nIHRyYW5zcGFyZW50bHkuCisgICBDdXN0b20gaW50ZXJjZXB0b3JzIGNhbiBhbHNvIGJlIHdyaXR0ZW4gdG8gc3VwcG9ydCBvdGhlciBhdXRoZW50aWNhdGlvbiBzY2hlbWVzIHlvdXIgZ3JhcGggcHJvdmlkZXIgbWF5IHJlcXVpcmUuCisKK1RoZSAuTkVULCBHbywgYW5kIEphdmFTY3JpcHQgZHJpdmVycyBhcmUgbmV3IHRvIDQuMCBpbiB0aGlzIHJlbGVhc2UuIFRoZSBKYXZhIGFuZCBQeXRob24gZHJpdmVycyB3ZXJlIHVwZGF0ZWQgaW4gdGhlCitiZXRhLjEgcmVsZWFzZSBhbmQgYXJlIHN1bW1hcml6ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIHNlY3Rpb247IHNlZSB0aGUgPDxqYXZhLXJlcXVlc3RpbnRlcmNlcHRvciwgSmF2YT4+IGFuZAorPDxweXRob24tcmVxdWVzdGludGVyY2VwdG9yLCBQeXRob24+PiBzZWN0aW9ucyBpbiB0aGUgYmV0YS4xIHVwZ3JhZGUgbm90ZXMgZm9yIGZ1bGwgZGV0YWlscy4KKworW1tkb3RuZXQtaHR0cC1pbnRlcmNlcHRvcl1dCis9PT09IC5ORVQKKworVGhlIC5ORVQgZHJpdmVyIChgR3JlbWxpbi5OZXRgKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSBIVFRQLiBDb25uZWN0aW9uIFVSTHMgc2hvdWxkIGJlIHVwZGF0ZWQgZnJvbSBgd3M6Ly9gIHRvCitgaHR0cDovL2AgKG9yIGB3c3M6Ly9gIHRvIGBodHRwczovL2ApLiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGhhdmUgY2hhbmdlZDoKKworLSBgQ29ubmVjdGlvblBvb2xTZXR0aW5nc2Ag4oCUIHJlcGxhY2VkIHdpdGggYENvbm5lY3Rpb25TZXR0aW5nc2AgZm9yIEhUVFAgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uLgorLSBgd2ViU29ja2V0Q29uZmlndXJhdGlvbmAg4oCUIHJlbW92ZWQuCistIGBzZXNzaW9uSWRgIOKAlCByZW1vdmVkLgorLSBgZGlzYWJsZUNvbXByZXNzaW9uYCDigJQgcmVtb3ZlZC4gVXNlIGBDb25uZWN0aW9uU2V0dGluZ3MuRW5hYmxlQ29tcHJlc3Npb25gIGluc3RlYWQuCistIGB1c2VybmFtZWAgYW5kIGBwYXNzd29yZGAgb24gYEdyZW1saW5TZXJ2ZXJgIOKAlCByZW1vdmVkLgorLSBgcmVxdWVzdFNlcmlhbGl6ZXJgIGFuZCBgcmVzcG9uc2VTZXJpYWxpemVyYCDigJQgY2FuIG5vdyBiZSBzZXQgaW5kZXBlbmRlbnRseSBvbiBgR3JlbWxpbkNsaWVudGAuCistIGBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyYCDigJQgcmVwbGFjZWQgd2l0aCBgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXJgLgorLSBgQ29ubmVjdGlvblBvb2xgIGFuZCBgV2ViU29ja2V0Q29ubmVjdGlvbmAg4oCUIHJlbW92ZWQuIEhUVFAgY29ubmVjdGlvbiBwb29saW5nIGlzIG1hbmFnZWQgYnkgYFNvY2tldHNIdHRwSGFuZGxlcmAuCistIFRyYW5zYWN0aW9uIHN1cHBvcnQgb3ZlciBIVFRQIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgYW5kIGBUeCgpYCB3aWxsIHRocm93IGBOb3RTdXBwb3J0ZWRFeGNlcHRpb25gLgorCitBdXRoZW50aWNhdGlvbiBpbiAzLnggd2FzIGNvbmZpZ3VyZWQgd2l0aCBgdXNlcm5hbWVgIGFuZCBgcGFzc3dvcmRgIG9uIHRoZSBgR3JlbWxpblNlcnZlcmAgY29uc3RydWN0b3IuIEluIDQuMCwgdXNlCit0aGUgYEF1dGhgIHN0YXRpYyBtZXRob2RzIHZpYSB0aGUgYGludGVyY2VwdG9yc2AgcGFyYW1ldGVyIGluc3RlYWQ6CisKK1tzb3VyY2UsY3NoYXJwXQorLS0tLQorLy8gMy54IOKAlCBjcmVkZW50aWFscyBvbiBHcmVtbGluU2VydmVyIChubyBsb25nZXIgc3VwcG9ydGVkKQorLy8gdmFyIHNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyLCB0cnVlLCAidXNlcm5hbWUiLCAicGFzc3dvcmQiKTsKKworLy8gNC4wIOKAlCBCYXNpYyBhdXRoZW50aWNhdGlvbiB2aWEgaW50ZXJjZXB0b3IKK3ZhciBzZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4MiwgZW5hYmxlU3NsOiB0cnVlKTsKK3ZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChzZXJ2ZXIsCisgICAgY29ubmVjdGlvblNldHRpbmdzOiBuZXcgQ29ubmVjdGlvblNldHRpbmdzIHsgU2tpcENlcnRpZmljYXRlVmFsaWRhdGlvbiA9IHRydWUgfSwKKyAgICBpbnRlcmNlcHRvcnM6IG5ld1tdIHsgQXV0aC5CYXNpY0F1dGgoInVzZXJuYW1lIiwgInBhc3N3b3JkIikgfSk7CisKKy8vIDQuMCDigJQgU2lnVjQgYXV0aGVudGljYXRpb24gdmlhIGludGVyY2VwdG9yCit2YXIgc2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoImxvY2FsaG9zdCIsIDgxODIsIGVuYWJsZVNzbDogdHJ1ZSk7Cit2YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoc2VydmVyLAorICAgIGludGVyY2VwdG9yczogbmV3W10geyBBdXRoLlNpZ1Y0QXV0aCgic2VydmljZS1yZWdpb24iLCAic2VydmljZS1uYW1lIikgfSk7CistLS0tCisKK1NldHRpbmcgYHJlcXVlc3RTZXJpYWxpemVyYCB0byBgbnVsbGAgcHJldmVudHMgdGhlIGBSZXF1ZXN0TWVzc2FnZWAgZnJvbSBiZWluZyBzZXJpYWxpemVkIGJlZm9yZSBpbnRlcmNlcHRvcnMgcnVuLAorYWxsb3dpbmcgYW4gaW50ZXJjZXB0b3IgdG8gaGFuZGxlIHNlcmlhbGl6YXRpb24gYW5kIHNldCB0aGUgYENvbnRlbnQtVHlwZWAgaGVhZGVyIGRpcmVjdGx5LgorCitbW2dvLWh0dHAtaW50ZXJjZXB0b3JdXQorPT09PSBHbworCitUaGUgR28gZHJpdmVyIChgZ3JlbWxpbi1nb2ApIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIEhUVFAuIENvbm5lY3Rpb24gVVJMcyBzaG91bGQgYmUgdXBkYXRlZCBmcm9tIGB3czovL2AgdG8KK2BodHRwOi8vYCAob3IgYHdzczovL2AgdG8gYGh0dHBzOi8vYCkuIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkOgorCistIGBBdXRoSW5mb2Ag4oCUIHJlbW92ZWQuCistIGBUcmFuc3BvcnRlclR5cGVgLCBgUmVhZEJ1ZmZlclNpemVgLCBgV3JpdGVCdWZmZXJTaXplYCwgYFdyaXRlRGVhZGxpbmVgLCBgTmV3Q29ubmVjdGlvblRocmVzaG9sZGAg4oCUIHJlbW92ZWQuCistIGBTZXNzaW9uYCDigJQgcmVtb3ZlZC4KKy0gYE1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnNgLCBgTWF4SWRsZUNvbm5lY3Rpb25zYCwgYElkbGVDb25uZWN0aW9uVGltZW91dGAsIGBLZWVwQWxpdmVJbnRlcnZhbGAg4oCUIGFkZGVkIGZvciBIVFRQCisgIGNvbm5lY3Rpb24gcG9vbCBjb25maWd1cmF0aW9uLgorCitBdXRoZW50aWNhdGlvbiBpbiAzLnggd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgYEF1dGhJbmZvYCBzZXR0aW5nLiBJbiA0LjAsIHVzZSB0aGUgYEJhc2ljQXV0aCgpYCBhbmQgYFNpZ1Y0QXV0aCgpYAoraW50ZXJjZXB0b3JzIGluc3RlYWQ6CisKK1tzb3VyY2UsZ29dCistLS0tCisvLyAzLngg4oCUIEF1dGhJbmZvIHNldHRpbmcgKG5vIGxvbmdlciBzdXBwb3J0ZWQpCisvLyBzZXR0aW5ncy5BdXRoSW5mbyA9IGdyZW1saW5nby5CYXNpY0F1dGhJbmZvKCJ1c2VybmFtZSIsICJwYXNzd29yZCIpCisKKy8vIDQuMCDigJQgQmFzaWMgYXV0aGVudGljYXRpb24gdmlhIGludGVyY2VwdG9yCityZW1vdGUsIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigiaHR0cHM6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwKKyAgZnVuYyhzZXR0aW5ncyAqZ3JlbWxpbmdvLkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgeworICAgIHNldHRpbmdzLlJlcXVlc3RJbnRlcmNlcHRvcnMgPSBbXWdyZW1saW5nby5SZXF1ZXN0SW50ZXJjZXB0b3J7CisgICAgICBncmVtbGluZ28uQmFzaWNBdXRoKCJ1c2VybmFtZSIsICJwYXNzd29yZCIpLAorICAgIH0KKyAgfSkKKworLy8gNC4wIOKAlCBTaWdWNCBhdXRoZW50aWNhdGlvbiB2aWEgaW50ZXJjZXB0b3IKK3JlbW90ZSwgZXJyIDo9IGdyZW1saW5nby5OZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCJodHRwczovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLAorICBmdW5jKHNldHRpbmdzICpncmVtbGluZ28uRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7CisgICAgc2V0dGluZ3MuUmVxdWVzdEludGVyY2VwdG9ycyA9IFtdZ3JlbWxpbmdvLlJlcXVlc3RJbnRlcmNlcHRvcnsKKyAgICAgIGdyZW1saW5nby5TaWdWNEF1dGgoInNlcnZpY2UtcmVnaW9uIiwgInNlcnZpY2UtbmFtZSIpLAorICAgIH0KKyAgfSkKKy0tLS0KKworW1tqYXZhc2NyaXB0LXR5cGVzY3JpcHQtZXNtXV0KKz09PT0gSmF2YVNjcmlwdAorCitUaGUgSmF2YVNjcmlwdCBkcml2ZXIgKGBncmVtbGluLWphdmFzY3JpcHRgKSBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gVHlwZVNjcmlwdCwgbWlncmF0ZWQgdG8gSFRUUCwgYW5kIG5vdyBzaGlwcyB3aXRoCitidWlsdC1pbiB0eXBlIGRlY2xhcmF0aW9ucyBhbmQgZHVhbCBFU00vQ29tbW9uSlMgYnVpbGRzLiBDb25uZWN0aW9uIFVSTHMgc2hvdWxkIGJlIHVwZGF0ZWQgZnJvbSBgd3M6Ly9gIHRvIGBodHRwOi8vYAorKG9yIGB3c3M6Ly9gIHRvIGBodHRwczovL2ApLiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGhhdmUgY2hhbmdlZDoKKworLSBgbWltZVR5cGVgIOKAlCByZW1vdmVkLiBVc2UgYHJlYWRlcmAgYW5kIGB3cml0ZXJgIG9wdGlvbnMgZGlyZWN0bHkuCistIGBhdXRoZW50aWNhdG9yYCDigJQgcmVtb3ZlZC4KKy0gYHNlc3Npb25gIOKAlCByZW1vdmVkLgorLSBgaW50ZXJjZXB0b3JzYCDigJQgYWRkZWQgdG8gYENsaWVudGAgYW5kIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYCBmb3IgSFRUUCByZXF1ZXN0IG1vZGlmaWNhdGlvbi4KKy0gYHdyaXRlcmAg4oCUIGNhbiBiZSBzZXQgdG8gYG51bGxgIHRvIHNraXAgcmVxdWVzdCBzZXJpYWxpemF0aW9uLCBhbGxvd2luZyBpbnRlcmNlcHRvcnMgdG8gaGFuZGxlIGl0IGRpcmVjdGx5LgorLSBgYnVsa1Jlc3VsdHNgIOKAlCBhZGRlZCBhcyBhIHJlcXVlc3Qgb3B0aW9uLiBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgZGVmYXVsdHMgaXQgdG8gYHRydWVgLgorCitBdXRoZW50aWNhdGlvbiBpbiAzLnggd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgYGF1dGhlbnRpY2F0b3JgIG9wdGlvbi4gSW4gNC4wLCB1c2UgYGF1dGguYmFzaWMoKWAgYW5kIGBhdXRoLnNpZ3Y0KClgCitpbnN0ZWFkOgorCitbc291cmNlLGphdmFzY3JpcHRdCistLS0tCitpbXBvcnQgZ3JlbWxpbiBmcm9tICdncmVtbGluJzsKK2NvbnN0IHsgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiwgYXV0aCB9ID0gZ3JlbWxpbi5kcml2ZXI7CisKKy8vIDMueCDigJQgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IgKG5vIGxvbmdlciBzdXBwb3J0ZWQpCisvLyBjb25zdCBhdXRoZW50aWNhdG9yID0gbmV3IGdyZW1saW4uZHJpdmVyLmF1dGguUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IoJ3VzZXInLCAncGFzcycpOworLy8gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsIHsgYXV0aGVudGljYXRvciB9KTsKKworLy8gNC4wIOKAlCBCYXNpYyBhdXRoZW50aWNhdGlvbiB2aWEgaW50ZXJjZXB0b3IKK2NvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignaHR0cHM6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgeworICBpbnRlcmNlcHRvcnM6IGF1dGguYmFzaWMoJ3VzZXJuYW1lJywgJ3Bhc3N3b3JkJyksCit9KTsKKworLy8gNC4wIOKAlCBTaWdWNCBhdXRoZW50aWNhdGlvbiB2aWEgaW50ZXJjZXB0b3IKKy8vIFJlcXVpcmVzIEBzbWl0aHkvc2lnbmF0dXJlLXY0IGFuZCBAc21pdGh5L2hhc2gtbm9kZSBwYWNrYWdlcworY29uc3QgY29ubmVjdGlvbiA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwczovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCB7CisgIGludGVyY2VwdG9yczogYXV0aC5zaWd2NCgnc2VydmljZS1yZWdpb24nLCAnc2VydmljZS1uYW1lJyksCit9KTsKKy0tLS0KKworPT09PT0gVHlwZVNjcmlwdCBhbmQgTW9kdWxlIEZvcm1hdAorCitUaGUgcGFja2FnZSBub3cgc2V0cyBgInR5cGUiOiAibW9kdWxlImAgaW4gYHBhY2thZ2UuanNvbmAgYW5kIHVzZXMgY29uZGl0aW9uYWwgYGV4cG9ydHNgOgorCistIEVTTTogYGltcG9ydCBncmVtbGluIGZyb20gJ2dyZW1saW4nYCByZXNvbHZlcyB0byBgYnVpbGQvZXNtL2luZGV4LmpzYAorLSBDSlM6IGBjb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpYCByZXNvbHZlcyB0byBgYnVpbGQvY2pzL2luZGV4LmNqc2AKKworRXhpc3RpbmcgQ29tbW9uSlMgYXBwbGljYXRpb25zIHVzaW5nIGByZXF1aXJlKCdncmVtbGluJylgIGNvbnRpbnVlIHRvIHdvcmsgd2l0aG91dCBjaGFuZ2VzOgorCitbc291cmNlLGphdmFzY3JpcHRdCistLS0tCisvLyBDb21tb25KUyAoc3RpbGwgd29ya3MpCitjb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpOworCisvLyBFU00g4oCUIGRlZmF1bHQgaW1wb3J0CitpbXBvcnQgZ3JlbWxpbiBmcm9tICdncmVtbGluJzsKKworLy8gRVNNIOKAlCBuYW1lZCBpbXBvcnRzCitpbXBvcnQgeyBkcml2ZXIsIHByb2Nlc3MsIHN0cnVjdHVyZSB9IGZyb20gJ2dyZW1saW4nOworLS0tLQorCitUeXBlIGRlY2xhcmF0aW9ucyAoYC5kLnRzYCkgYXJlIGluY2x1ZGVkIGluIHRoZSBwdWJsaXNoZWQgcGFja2FnZS4gVHlwZVNjcmlwdCBwcm9qZWN0cyBjYW4gaW1wb3J0IHRoZSBkcml2ZXIgZGlyZWN0bHkKK3dpdGhvdXQgaW5zdGFsbGluZyBzZXBhcmF0ZSBgQHR5cGVzYCBwYWNrYWdlczoKKworW3NvdXJjZSx0eXBlc2NyaXB0XQorLS0tLQoraW1wb3J0IGdyZW1saW4gZnJvbSAnZ3JlbWxpbic7CitpbXBvcnQgdHlwZSB7IENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnZ3JlbWxpbi9idWlsZC9lc20vZHJpdmVyL2Nvbm5lY3Rpb24uanMnOworCitjb25zdCBjb25uZWN0aW9uID0gbmV3IGdyZW1saW4uZHJpdmVyLkRyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJyk7Citjb25zdCBnID0gZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOworLS0tLQorCis9PT09PSBCcmVha2luZyBFeHBvcnQgQ2hhbmdlcworCitTZXZlcmFsIGV4cG9ydHMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgcmVuYW1lZCBjb21wYXJlZCB0byAzLng6CisKKy0gYHByb2Nlc3MuQnl0ZWNvZGVgIOKAlCByZW1vdmVkLiBVc2UgYHByb2Nlc3MuR3JlbWxpbkxhbmdgIGluc3RlYWQuCistIGBwcm9jZXNzLlRyYW5zbGF0b3JgIOKAlCByZW1vdmVkLiBVc2UgYHByb2Nlc3MuR3JlbWxpbkxhbmdgIGluc3RlYWQgKGUuZy4gYHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKWApLgorLSBgZHJpdmVyLmF1dGguQXV0aGVudGljYXRvcmAgYW5kIGBkcml2ZXIuYXV0aC5QbGFpblRleHRTYXNsQXV0aGVudGljYXRvcmAg4oCUIHJlbW92ZWQuIFVzZSBgZHJpdmVyLmF1dGguYmFzaWMoKWAgYW5kCisgIGBkcml2ZXIuYXV0aC5zaWd2NCgpYCBpbnN0ZWFkLgorLSBgc3RydWN0dXJlLmlvYCDigJQgcmVtb3ZlZC4gU2VyaWFsaXphdGlvbiBpcyBub3cgaW50ZXJuYWwgdG8gdGhlIGRyaXZlci4KKy0gYEdyYXBoLnRyYXZlcnNhbCgpYCDigJQgcmVtb3ZlZC4gVXNlIGBwcm9jZXNzLnRyYXZlcnNhbCgpYCBpbnN0ZWFkLgorCis9PT09IEphdmEKKworVGhlIEphdmEgZHJpdmVyIChgZ3JlbWxpbi1kcml2ZXJgKSB3YXMgdGhlIGZpcnN0IHRvIGFkb3B0IEhUVFAgaW4gdGhlIGJldGEuMSByZWxlYXNlLiBDb25uZWN0aW9uIFVSTHMgc2hvdWxkIGJlCit1cGRhdGVkIGZyb20gYHdzOi8vYCB0byBgaHR0cDovL2AgKG9yIGB3c3M6Ly9gIHRvIGBodHRwczovL2ApLiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGhhdmUgY2hhbmdlZDoKKworLSBgZW5hYmxlQ29tcHJlc3Npb25gIOKAlCByZW1vdmVkLgorLSBgYnVsa1Jlc3VsdHNgIOKAlCBhZGRlZC4gU2VlIDw8cmVzdWx0LWJ1bGtpbmctZnJvbS1zZXJ2ZXIsIFJlc3VsdCBCdWxraW5nIGZyb20gU2VydmVyPj4gZm9yIGRldGFpbHMuCistIGBtYXhDb250ZW50TGVuZ3RoYCDigJQgcmVuYW1lZCB0byBgbWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoYC4gTm93IGxpbWl0cyB0b3RhbCByZXNwb25zZSBzaXplLgorLSBgbWluQ29ubmVjdGlvblBvb2xTaXplYCDigJQgcmVtb3ZlZC4gQ29ubmVjdGlvbnMgYXJlIG5vdyBjbG9zZWQgYmFzZWQgb24gYGlkbGVDb25uZWN0aW9uVGltZW91dGAgcmF0aGVyIHRoYW4gdXNhZ2UKKyAgdGhyZXNob2xkcy4gTXVsdGlwbGUgY29ubmVjdGlvbnMgY2FuIGJlIG9wZW5lZCBjb25jdXJyZW50bHkgdG8gc3VwcG9ydCBidXJzdHkgd29ya2xvYWRzLgorCitBdXRoZW50aWNhdGlvbiBpbiAzLnggd2FzIGNvbmZpZ3VyZWQgd2l0aCBgY3JlZGVudGlhbHMoKWAgb24gdGhlIGBDbHVzdGVyYCBidWlsZGVyLiBJbiA0LjAsIHBhc3MgYEF1dGguYmFzaWMoKWAgb3IKK2BBdXRoLnNpZ3Y0KClgIHRvIHRoZSBidWlsZGVyJ3MgYGF1dGgoKWAgbWV0aG9kIGluc3RlYWQ6CisKK1tzb3VyY2UsamF2YV0KKy0tLS0KKy8vIDMueCDigJQgY3JlZGVudGlhbHMgb24gQ2x1c3RlciBidWlsZGVyIChubyBsb25nZXIgc3VwcG9ydGVkKQorLy8gQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikuY3JlZGVudGlhbHMoInVzZXJuYW1lIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7CisKKy8vIDQuMCDigJQgQmFzaWMgYXV0aGVudGljYXRpb24KK0NsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLmF1dGgoQXV0aC5iYXNpYygidXNlcm5hbWUiLCAicGFzc3dvcmQiKSkuY3JlYXRlKCk7CisKKy8vIDQuMCDigJQgU2lnVjQgYXV0aGVudGljYXRpb24KK0NsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLmF1dGgoQXV0aC5zaWd2NCgic2VydmljZS1yZWdpb24iLCAic2VydmljZS1uYW1lIikpLmNyZWF0ZSgpOworLS0tLQorCitGb3IgYWR2YW5jZWQgdXNlIGNhc2VzLCBIVFRQIGludGVyY2VwdG9ycyBjYW4gYmUgY29uZmlndXJlZCBvbiBgQ2x1c3RlcmAgdXNpbmcgYGFkZEludGVyY2VwdG9yYCwKK2BhZGRJbnRlcmNlcHRvckJlZm9yZWAsIGBhZGRJbnRlcmNlcHRvckFmdGVyYCwgYW5kIGByZW1vdmVJbnRlcmNlcHRvcmAuIEVhY2ggaW50ZXJjZXB0b3IgcmVxdWlyZXMgYSBuYW1lIGZvciBvcmRlcmluZworYW5kIHJlY2VpdmVzIGFuIGBIdHRwUmVxdWVzdGAgY29udGFpbmluZyB0aGUgcmVxdWVzdCBtZXRob2QsIFVSSSwgaGVhZGVycywgYW5kIGJvZHkuIEEgZGVmYXVsdCAic2VyaWFsaXplciIKK2ludGVyY2VwdG9yIGhhbmRsZXMgc2VyaWFsaXphdGlvbiBvZiB0aGUgYFJlcXVlc3RNZXNzYWdlYCBpbnRvIHRoZSBmb3JtYXQgdGhlIHNlcnZlciBleHBlY3RzLgorCitbc291cmNlLGphdmFdCistLS0tCitDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKQorICAgIC5hZGRJbnRlcmNlcHRvcigibXlBdXRoIiwgcmVxdWVzdCAtPiB7CisgICAgICAgIHJlcXVlc3QuZ2V0SGVhZGVycygpLnB1dCgiQXV0aG9yaXphdGlvbiIsICJCZWFyZXIgbXktdG9rZW4iKTsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfSkKKyAgICAuY3JlYXRlKCk7CistLS0tCisKKz09PT0gUHl0aG9uCisKK1RoZSBQeXRob24gZHJpdmVyIChgZ3JlbWxpbi1weXRob25gKSBhZG9wdGVkIEhUVFAgaW4gdGhlIGJldGEuMSByZWxlYXNlLiBDb25uZWN0aW9uIFVSTHMgc2hvdWxkIGJlIHVwZGF0ZWQgZnJvbQorYHdzOi8vYCB0byBgaHR0cDovL2AgKG9yIGB3c3M6Ly9gIHRvIGBodHRwczovL2ApLiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGhhdmUgY2hhbmdlZDoKKworLSBgZW5hYmxlQ29tcHJlc3Npb25gIOKAlCByZW1vdmVkLgorLSBgYnVsa19yZXN1bHRzYCDigJQgYWRkZWQuIFNlZSA8PHJlc3VsdC1idWxraW5nLWZyb20tc2VydmVyLCBSZXN1bHQgQnVsa2luZyBmcm9tIFNlcnZlcj4+IGZvciBkZXRhaWxzLgorLSBgbWVzc2FnZV9zZXJpYWxpemVyYCDigJQgc3BsaXQgaW50byBgcmVxdWVzdF9zZXJpYWxpemVyYCBhbmQgYHJlc3BvbnNlX3NlcmlhbGl6ZXJgLgorLSBgdXNlcm5hbWVgIGFuZCBgcGFzc3dvcmRgIOKAlCByZXBsYWNlZCB3aXRoIGBhdXRoYC4KKy0gYGtlcmJlcml6ZWRfc2VydmljZWAg4oCUIHJlbW92ZWQuCistIGBzZXNzaW9uYCDigJQgcmVtb3ZlZC4KKworQXV0aGVudGljYXRpb24gaW4gMy54IHdhcyBjb25maWd1cmVkIHdpdGggYHVzZXJuYW1lYCBhbmQgYHBhc3N3b3JkYCBwYXJhbWV0ZXJzIG9uIGBEcml2ZXJSZW1vdGVDb25uZWN0aW9uYC4gSW4gNC4wLAordXNlIHRoZSBgYXV0aGAgcGFyYW1ldGVyIHdpdGggYGJhc2ljKClgIG9yIGBzaWd2NCgpYCBmcm9tIHRoZSBgYXV0aGAgbW9kdWxlIGluc3RlYWQ6CisKK1tzb3VyY2UscHl0aG9uXQorLS0tLQorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuYXV0aCBpbXBvcnQgYmFzaWMsIHNpZ3Y0CisKKyMgMy54IOKAlCB1c2VybmFtZS9wYXNzd29yZCBwYXJhbWV0ZXJzIChubyBsb25nZXIgc3VwcG9ydGVkKQorIyBnID0gdHJhdmVyc2FsKCkud2l0aF8oRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgJ2cnLAorIyAgICAgdXNlcm5hbWU9J3N0ZXBoZW4nLCBwYXNzd29yZD0ncGFzc3dvcmQnKSkKKworIyA0LjAg4oCUIEJhc2ljIGF1dGhlbnRpY2F0aW9uCitnID0gdHJhdmVyc2FsKCkud2l0aF8oRHJpdmVyUmVtb3RlQ29ubmVjdGlvbigKKyAgICAnaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLCAnZycsIGF1dGg9YmFzaWMoJ3N0ZXBoZW4nLCAncGFzc3dvcmQnKSkpCisKKyMgNC4wIOKAlCBTaWdWNCBhdXRoZW50aWNhdGlvbgorZyA9IHRyYXZlcnNhbCgpLndpdGhfKERyaXZlclJlbW90ZUNvbm5lY3Rpb24oCisgICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJywgJ2cnLCBhdXRoPXNpZ3Y0KCdzZXJ2aWNlLXJlZ2lvbicsICdzZXJ2aWNlLW5hbWUnKSkpCistLS0tCisKK0hUVFAgaW50ZXJjZXB0b3JzIGNhbiBiZSBwYXNzZWQgdG8gYERyaXZlclJlbW90ZUNvbm5lY3Rpb25gIG9yIGBDbGllbnRgIHVzaW5nIHRoZSBgaW50ZXJjZXB0b3JzYCBwYXJhbWV0ZXIuIEFuCitpbnRlcmNlcHRvciBpcyBhIGBDYWxsYWJsZWAgdGhhdCByZWNlaXZlcyB0aGUgSFRUUCByZXF1ZXN0IGRpY3Rpb25hcnkgKGNvbnRhaW5pbmcgaGVhZGVycywgcGF5bG9hZCwgYW5kIGF1dGgpLiBTZXR0aW5nCitgcmVxdWVzdF9zZXJpYWxpemVyYCB0byBgTm9uZWAgcHJldmVudHMgYXV0b21hdGljIHNlcmlhbGl6YXRpb24sIGFsbG93aW5nIGFuIGludGVyY2VwdG9yIHRvIGhhbmRsZSBpdCBkaXJlY3RseS4KKworPT09PSBUcmFuc2FjdGlvbnMgUmUtZW5hYmxlZAorCitJTVBPUlRBTlQ6IFRoZSByZW1vdGUgdHJhbnNhY3Rpb24gQVBJIGlzIHN0aWxsIHVuZGVyIGFjdGl2ZSBkaXNjdXNzaW9uIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBoYXMgbm90IGJlZW4gZmluYWxpemVkLgorVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBleHBlcmltZW50YWwgYW5kIHN1YmplY3QgdG8gYnJlYWtpbmcgY2hhbmdlcyBpbiBmdXR1cmUgcmVsZWFzZXMuIEl0IGlzIHByb3ZpZGVkIHRvIGVuYWJsZSBlYXJseQorZmVlZGJhY2sgYW5kIHRlc3RpbmcsIGJ1dCBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uIGZvciBwcm9kdWN0aW9uIHVzZSB1bnRpbCB0aGUgc3BlY2lmaWNhdGlvbiBpcyBjb21wbGV0ZS4KKworVGhlIDQuMC4wLWJldGEuMSByZWxlYXNlIGRpc2FibGVkIHRyYW5zYWN0aW9ucyBhbmQgbm90ZWQgdGhhdCBgdHgoKWAgd291bGQgcmV0dXJuIGFuIGVycm9yLiBUcmFuc2FjdGlvbnMgaGF2ZSBub3cgYmVlbgorcmUtZW5hYmxlZCBvdmVyIEhUVFAgZm9yIGJvdGggR3JlbWxpbiBTZXJ2ZXIgYW5kIHRoZSBKYXZhIGRyaXZlci4gVGhlIHRyYW5zYWN0aW9uIG1vZGVsIHVzZXMgc2VydmVyLW1hbmFnZWQgc2Vzc2lvbnMKK3doZXJlIGVhY2ggdHJhbnNhY3Rpb24gaXMgaWRlbnRpZmllZCBieSBhIHNlcnZlci1nZW5lcmF0ZWQgdHJhbnNhY3Rpb24gSUQgdGhhdCB0aGUgY2xpZW50IHBhc3NlcyBvbiBzdWJzZXF1ZW50IHJlcXVlc3RzLgorCitUaGUgYmFzaWMgbGlmZWN5Y2xlIGlzOiBiZWdpbiBhIHRyYW5zYWN0aW9uLCBzdWJtaXQgb25lIG9yIG1vcmUgdHJhdmVyc2FscyB3aXRoaW4gaXQsIHRoZW4gY29tbWl0IG9yIHJvbGxiYWNrLiBEYXRhCit3cml0dGVuIGluc2lkZSBhIHRyYW5zYWN0aW9uIGlzIGlzb2xhdGVkIGZyb20gb3RoZXIgY2xpZW50cyB1bnRpbCBjb21taXR0ZWQuCisKK1RyYW5zYWN0aW9ucyBhbHNvIHdvcmsgdGhyb3VnaCBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgd2l0aCB0aGUgZmFtaWxpYXIgYGcudHgoKWAgcGF0dGVybjoKKworW3NvdXJjZSxqYXZhXQorLS0tLQorZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCAiZyIpKTsKK2ZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IGcudHgoKS5iZWdpbigpOworZ3R4LmFkZFYoInBlcnNvbiIpLml0ZXJhdGUoKTsKK2d0eC50eCgpLmNvbW1pdCgpOworLS0tLQorCitUaGUgYFJlbW90ZVRyYW5zYWN0aW9uYCBjYW4gYmUgdXNlZCBkaXJlY3RseSBmcm9tIGBDbHVzdGVyLnRyYW5zYWN0KClgOgorCitbc291cmNlLGphdmFdCistLS0tCitmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLm9wZW4oKTsKKworLy8gYmVnaW4sIHdyaXRlLCBhbmQgY29tbWl0CitmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eCA9IGNsdXN0ZXIudHJhbnNhY3QoImciKTsKK3R4LmJlZ2luKCk7Cit0eC5zdWJtaXQoImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdhbGljZScpIik7Cit0eC5jb21taXQoKTsKKy0tLS0KKworVGhlIGBSZW1vdGVUcmFuc2FjdGlvbmAgYWxzbyBzdXBwb3J0cyBjb25maWd1cmFibGUgY2xvc2UgYmVoYXZpb3IuIEJ5IGRlZmF1bHQsIGBjbG9zZSgpYCBjb21taXRzIHRoZSB0cmFuc2FjdGlvbi4gVG8KK3JvbGxiYWNrIG9uIGNsb3NlIGluc3RlYWQ6CisKK1tzb3VyY2UsamF2YV0KKy0tLS0KK2ZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdCgiZyIpOwordHgub25DbG9zZShUcmFuc2FjdGlvbi5DTE9TRV9CRUhBVklPUi5ST0xMQkFDSyk7Cit0eC5iZWdpbigpOwordHguc3VibWl0KCJnLmFkZFYoJ3BlcnNvbicpIik7Cit0eC5jbG9zZSgpOyAvLyByb2xscyBiYWNrIGluc3RlYWQgb2YgY29tbWl0dGluZworLS0tLQorCitOT1RFOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBjcmVhdGVzIGEgZGVkaWNhdGVkIEhUVFAgY29ubmVjdGlvbiBwb29sIHBlciB0cmFuc2FjdGlvbi4gQ29ubmVjdGlvbiBzaGFyaW5nIGJldHdlZW4KK3JlcXVlc3RzIHdpbGwgYmUgaW1wcm92ZWQgaW4gdGhlIGZpbmFsIHJlbGVhc2UgZm9yIGJldHRlciByZXNvdXJjZSBlZmZpY2llbmN5IGFuZCBwZXJmb3JtYW5jZS4KKworPT09IFVwZ3JhZGluZyBmb3IgUHJvdmlkZXJzCisKKz09PT0gR3JhcGggU3lzdGVtIFByb3ZpZGVycworCis9PT09PSBKYXZhLWJhc2VkIFRlc3QgU3VpdGUKKworVGhlIHRyYWRpdGlvbmFsIEphdmEtYmFzZWQgInByb2Nlc3MiIHRlc3Qgc3VpdGUgaGFzIGJlZW4gcmVtb3ZlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgaW4gMy44LjAsIHdpdGggdGhlIGluc3RydWN0aW9uIHRvCittb3ZlIHRvIHRoZSBtb3JlIGNvbXByZWhlbnNpdmUsIGxhbmd1YWdlIGFnbm9zdGljLCBHaGVya2luIHRlc3QgZnJhbWV3b3JrIHdoaWNoIG5vdyB1bmlmaWVzIGFsbCBHcmVtbGluIHNlbWFudGljcwordGVzdGluZy4gVGhpcyB1bmlmaWVkIGFwcHJvYWNoIHRvIHRlc3Rpbmcgd2l0aCBHaGVya2luIHByb3ZpZGVzIHRoZSBlYXNpZXN0IHdheSB0byBlbnN1cmUgdGhhdCB0aGUgc2FtZSBHcmVtbGluCitzZW1hbnRpY3MgYXJlIGFwcGxpZWQgZm9yIGJvdGggZ3JhcGggc3lzdGVtcyBhbmQgZm9yIEdyZW1saW4gTGFuZ3VhZ2UgVmFyaWFudHMsIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVuZWZpdCB0aGF0IGl0cworZWFzeS10by1yZWFkIGZvcm1hdCBpcyB3ZWxsIHN1aXRlZCB0byBMTE1zLgorCitUaW5rZXJQb3AgZG9lcyByZXRhaW4gYSBzbWFsbCBjb2hvcnQgb2YgSmF2YS1iYXNlZCAicHJvY2VzcyIgdGVzdHMgZm9yIGVtYmVkZGVkIGdyYXBocyB3aXNoaW5nIHRvIHZhbGlkYXRlIHNvbWUKK2FkZGl0aW9uYWwgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHdlbGwgc3VpdGVkIHRvIHRoZSBHaGVya2luIHN0eWxlLiBQcm92aWRlcnMgd2hvIHdpc2ggdG8gdXNlIHRoZXNlIHNpbXBseSBpbXBsZW1lbnQgdGhlCitgUHJvY2Vzc0VtYmVkZGVkU3RhbmRhcmRTdWl0ZWAgYW5kIHRoZSBgUHJvY2Vzc0VtYmVkZGVkQ29tcHV0ZXJTdWl0ZWAgYXMgaGFzIG5vcm1hbGx5IGJlZW4gZG9uZSBpbiB0aGUgcGFzdC4KKworPT0gVGlua2VyUG9wIDQuMC4wLWJldGEuMQorCisqUmVsZWFzZSBEYXRlOiBKYW51YXJ5IDE3LCAyMDI1KgorCitQbGVhc2Ugc2VlIHRoZSBsaW5rOmh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2Jsb2IvNC4wLjAtYmV0YS4xL0NIQU5HRUxPRy5hc2NpaWRvYyNyZWxlYXNlLTQtMC0wLWJldGEtMVtjaGFuZ2Vsb2ddIGZvciBhCitjb21wbGV0ZSBsaXN0IG9mIGFsbCB0aGUgbW9kaWZpY2F0aW9ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgcmVsZWFzZS4KKworTk9URTogNC4wLjAtYmV0YS4xIGlzIGEgYmV0YS9taWxlc3RvbmUgcmVsZWFzZS4gSXQgaXMgbWVhbnQgYXMgYSBwcmV2aWV3IHZlcnNpb24gdG8gdHJ5IG91dCB0aGUgbmV3IEhUVFAgQVBJCitmZWF0dXJlcyBpbiB0aGUgc2VydmVyIGFuZCBkcml2ZXJzIChKYXZhL1B5dGhvbiBvbmx5KS4gQXMgdGhpcyBpcyBhIGJldGEgdmVyc2lvbiBvbmx5LCB5b3UgY2FuIGV4cGVjdCBicmVha2luZyBjaGFuZ2VzIHRvCitvY2N1ciBpbiBmdXR1cmUgYmV0YXMgZm9yIDQuMC4wIG9uIHRoZSB3YXkgdG8gaXRzIEdlbmVyYWwgQXZhaWxhYmlsaXR5IHJlbGVhc2UuIEl0ZW1zIHRoYXQgaGF2ZSBpbXBvcnRhbnQKK2xpbWl0YXRpb25zIGFuZCBjb25zdHJhaW50cyBwZXJ0aW5lbnQgdG8gdGhpcyBiZXRhIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgdGhyb3VnaCB0aGUgZG9jdW1lbnRhdGlvbiBpbnNpZGUgYW4KKyJJTVBPUlRBTlQiIGJveCB0aGF0IHN0YXJ0cyB3aXRoICI0LjAgQmV0YSBSZWxlYXNlIi4KKworPT09IFVwZ3JhZGluZyBmb3IgVXNlcnMKKworW1tyZXN1bHQtYnVsa2luZy1mcm9tLXNlcnZlcl1dCis9PT09IFJlc3VsdCBCdWxraW5nIGZyb20gU2VydmVyCitJbiBwcmV2aW91cyB2ZXJzaW9ucywgd2hlbiBhIHRyYXZlcnNhbCBpcyBzdWJtaXR0ZWQgdGhyb3VnaCB0aGUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiAoRFJDKSB2aWEgdGhlIEJ5dGVjb2RlIHByb2Nlc3NvciwKK3RoZSByZXN1bHRzIGZyb20gdGhlIHNlcnZlciB3ZXJlIGJ1bGtlZCBhcyBUcmF2ZXJzZXIsIHdoaWNoIHByb3ZpZGVzIGEgZm9ybSBvZiByZXN1bHQgb3B0aW1pemF0aW9uIGFjcm9zcyB0aGUgd2lyZS4KK1N0YXJ0aW5nIHdpdGggNC4wLCB3aXRoIHRoZSByZW1vdmFsIG9mIEJ5dGVjb2RlIGFuZCBUcmF2ZXJzZXIgc2VyaWFsaXplciwgdGhpcyBvcHRpbWl6YXRpb24gaXMgbm93IGFjaGlldmVkIHZpYQorYEdyYXBoQmluYXJ5VjRgIHJlc3BvbnNlIG1lc3NhZ2Ugc2VyaWFsaXphdGlvbiwgYW5kIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY2x1c3RlciBzZXR0aW5nIG9yIHBlciByZXF1ZXN0IG9wdGlvbi4KKworUGVyIHJlcXVlc3Qgb3B0aW9uIHNldHRpbmcgd2lsbCBhbHdheXMgb3ZlcnJpZGUgY2x1c3RlciBzZXR0aW5ncywgYW5kIHJlZ2FyZGxlc3Mgb2YgY2x1c3RlciBvciByZXF1ZXN0IG9wdGlvbiBzZXR0aW5ncywKK2J1bGtpbmcgd2lsbCBvbmx5IG9jY3VyIGlmIHRoZSBzY3JpcHQgcHJvY2Vzc2luZyBsYW5ndWFnZSBpcyBzZXQgdG8gYGdyZW1saW4tbGFuZ2AgYW5kIHRoZSBzZXJpYWxpemVyIGlzIHNldCB0byBgR3JhcGhCaW5hcnlWNGAuCisKK1tzb3VyY2UsamF2YV0KKy0tLS0KKy8vIGNsdXN0ZXIgc2V0dGluZworQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgpLmJ1bGtSZXN1bHRzKHRydWUpLmNyZWF0ZSgpOworCisvLyBwZXIgcmVxdWVzdCBvcHRpb24KK0dyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOworTGlzdCByZXN1bHQgPSBnLndpdGgoImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpLndpdGgoImJ1bGtSZXN1bHRzIiwgdHJ1ZSkuaW5qZWN0KDEpLnRvTGlzdCgpOworLS0tLQorCitCeSBkZWZhdWx0LCB0aGUgY2x1c3RlciBzZXR0aW5nIG9mIGBidWxrUmVzdWx0c2AgaXMgZmFsc2UuIFRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGggcHJldmlvdXMgYmVoYXZpb3IsIHJlbW90ZSB0cmF2ZXJzYWwKK3N1Ym1pdHRlZCB0aHJvdWdoIHRoZSBEUkMgd2lsbCBhbHdheXMgc2VuZCBhIHJlcXVlc3Qgb3B0aW9uIHNldHRpbmcgYGJ1bGtSZXN1bHRzYCB0byBgdHJ1ZWAuIFRoaXMgaW1wbGllcyB0aGF0IGlmIGBncmVtbGluLWxhbmdgCitzY3JpcHQgZW5naW5lIGFuZCBgR3JhcGhCaW5hcnlWNGAgc2VyaWFsaXplciBhcmUgdXNlZCwgdGhlbiBzZXJ2ZXIgd2lsbCBidWxrIHJlc3VsdHMgYmVmb3JlIHNlbmRpbmcgcmVnYXJkbGVzcyBvZiBjbHVzdGVyIHNldHRpbmcsCithbmQgY2FuIG9ubHkgYmUgZGlzYWJsZWQgdmlhIHBlciByZXF1ZXN0IG9wdGlvbi4KKworPT09PSBCdWxrU2V0IEJlaGF2aW9yIENoYW5nZXMKK1N0YXJ0aW5nIHdpdGggNC4wLCBzdGVwcyB3aGljaCByZXR1cm4gQnVsa1NldCAoZS5nLiBgYWdncmVnYXRlKClgKSB3aWxsIGhhdmUgcmVzdWx0cyByZXR1cm5lZCBpbiBkaWZmZXJlbnQgZm9ybWF0CitkZXBlbmRpbmcgb24gZW1iZWRkZWQgb3IgcmVtb3RlIHVzYWdlLgorCitGb3IgZW1iZWRkZWQgY2FzZXMsIGEgQnVsa1NldCB3aWxsIGJlIHJldHVybmVkIGFzIGJlZm9yZS4KKworRm9yIHJlbW90ZSBjYXNlcywgQnVsa1NldHMgd2lsbCBub3cgYmUgZXhwYW5kZWQgaW50byBMaXN0cyB1cG9uIGRlc2VyaWFsaXphdGlvbiB3aXRoIGBncmVtbGluLWRyaXZlcmAuIEFsbCBvdGhlciBHTFZzCithbHJlYWR5IGV4cGFuZGVkIEJ1bGtTZXQgdG8gTGlzdCBwcmlvciB0byBUaW5rZXJQb3AgNC4gRWFjaCBlbGVtZW50IGluIHRoZSBCdWxrU2V0IHdpbGwgYXBwZWFyIGluIHRoZSBsaXN0IHRoZSBzYW1lCitudW1iZXIgb2YgdGltZXMgYXMgc3BlY2lmaWVkIGJ5IGl0cyBidWxrIHZhbHVlLgorCis9PT09IENvbmZpZ3VyYXRpb24gQ2hhbmdlcworCitUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIGludHJvZHVjZWQgaW4gdGhlIGJldGEuMSByZWxlYXNlIGZvciBHcmVtbGluIFNlcnZlciwgSmF2YSwgYW5kIFB5dGhvbi4gRm9yCisuTkVULCBHbywgYW5kIEphdmFTY3JpcHQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLCBzZWUgPDxnbHYtZHJpdmVyLWNoYW5nZXMsIEdMViBEcml2ZXIgQ2hhbmdlcz4+IGluIHRoZSBzZWN0aW9uIGFib3ZlLgorCisqIEdyZW1saW4gU2VydmVyCisqKiBgbWF4Q29udGVudExlbmd0aGAgc2V0dGluZyBoYXMgYmVlbiByZW5hbWVkIHRvIGBtYXhSZXF1ZXN0Q29udGVudExlbmd0aGAuCisqIEphdmEgR0xWCisqKiBgZW5hYmxlQ29tcHJlc3Npb25gIHNldHRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4KKyoqIGBidWxrUmVzdWx0c2AgaGFzIGJlZW4gYWRkZWQuIFNlZSA8PHJlc3VsdC1idWxraW5nLWZyb20tc2VydmVyLCByZXN1bHQgYnVsa2luZz4+IGZvciBtb3JlIGRldGFpbHMuCisqKiBgbWF4Q29udGVudExlbmd0aGAgc2V0dGluZyBoYXMgYmVlbiByZW5hbWVkIHRvIGBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGhgIGFuZCBub3cgYmxvY2tzIGluY29taW5nIHJlc3BvbnNlcyB0aGF0IGFyZQordG9vIGxhcmdlIGJhc2VkIG9uIHRvdGFsIHJlc3BvbnNlIHNpemUuCisqKiBgYWRkSW50ZXJjZXB0b3JBZnRlcmAsIGBhZGRJbnRlcmNlcHRvckJlZm9yZWAsIGBhZGRJbnRlcmNlcHRvcmAgYW5kIGByZW1vdmVJbnRlcmNlcHRvcmAgaGF2ZSBiZWVuIGFkZGVkLgorU2VlIDw8amF2YS1yZXF1ZXN0aW50ZXJjZXB0b3IsIENoYW5nZXMgdG8gSmF2YSBSZXF1ZXN0SW50ZXJjZXB0b3I+PiBmb3IgbW9yZSBkZXRhaWxzLgorKiBQeXRob24gR0xWCisqKiBgZW5hYmxlQ29tcHJlc3Npb25gIHNldHRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4KKyoqIGBidWxrX3Jlc3VsdHNgIGhhcyBiZWVuIGFkZGVkLiBTZWUgPDxyZXN1bHQtYnVsa2luZy1mcm9tLXNlcnZlciwgcmVzdWx0IGJ1bGtpbmc+PiBmb3IgbW9yZSBkZXRhaWxzLgorKiogYGludGVyY2VwdG9yc2AgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIFB5dGhvbiBHTFYgdG8gbW9kaWZ5IEhUVFAgcmVxdWVzdHMuIFNlZQorPDxweXRob24tcmVxdWVzdGludGVyY2VwdG9yLCBBZGRpdGlvbiBvZiBQeXRob24gaW50ZXJjZXB0b3I+PiBmb3IgbW9yZSBkZXRhaWxzLgorKiogYG1lc3NhZ2Vfc2VyaWFsaXplcmAgc2V0dGluZyBoYXMgYmVlbiBzZXBhcmF0ZWQgaW50byBgcmVxdWVzdF9zZXJpYWxpemVyYCBhbmQgYHJlc3BvbnNlX3NlcmlhbGl6ZXJgLiBTZWUKKzw8cHl0aG9uLXJlcXVlc3RpbnRlcmNlcHRvciwgQWRkaXRpb24gb2YgUHl0aG9uIGludGVyY2VwdG9yPj4gZm9yIG1vcmUgZGV0YWlscy4KKyoqIGB1c2VybmFtZWAgYW5kIGBwYXNzd29yZGAgc2V0dGluZ3MgZm9yIHRoZSBQeXRob24gR0xWIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGF1dGhgLgorKiogYGtlcmJlcml6ZWRfc2VydmljZWAgc2V0dGluZyBoYXMgYmVlbiByZW1vdmVkLgorKiogYHNlc3Npb25gIHNldHRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4KKworPT09PSBDb25zb2xlIENvbW1hbmQgUmVtb3ZhbHMKKworVGhlIGA6cmVtb3RlYCBhbmQgYDpzdWJtaXRgIGNvbW1hbmRzLCB1c2VkIHRvIGVzdGFibGlzaCBjb25uZWN0aW9ucyBhbmQgc2VuZCBzY3JpcHRzIHRvIGEgcmVtb3RlIGBncmVtbGluLXNlcnZlcmAsIGFyZQorbm8gbG9uZ2VyIHN1cHBvcnRlZCBpbiBgZ3JlbWxpbi1jb25zb2xlYC4gSWYgc2VuZGluZyBhIHRyYXZlcnNhbCwgdXNlcnMgc2hvdWxkIGluc3RlYWQgY3JlYXRlIGEgYFJlbW90ZVRyYXZlcnNhbFNvdXJjZWAKKyhzZWUgPDxzaW1wbGlmaWVkLWctY3JlYXRpb24sIFNpbXBsaWZpY2F0aW9uIHRvIGcgQ3JlYXRpb24gZm9yIGV4YW1wbGVzPj4pLgorCitXaGlsZSBhIGBSZW1vdGVUcmF2ZXJzYWxTb3VyY2VgIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGV4ZWN1dGluZyByZW1vdGUgdHJhdmVyc2FscyBmcm9tIGBncmVtbGluLWNvbnNvbGVgLCBpdAorcmVtYWlucyBwb3NzaWJsZSB0byBzZW5kIHNjcmlwdHMgZGlyZWN0bHkgdXNpbmcgYSBgZ3JlbWxpbi1kcml2ZXJgIGBDbGllbnRgLgorCitbZ3JlbWxpbi1ncm9vdnldCistLS0tCitjbHVzdGVyID0gQ2x1c3Rlci5vcGVuKCdjb25mL3JlbW90ZS55YW1sJykKK2NsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpCisKK2NsaWVudC5zdWJtaXQoImcuVigpIikKKworY2xpZW50LmNsb3NlKCkKK2NsdXN0ZXIuY2xvc2UoKQorLS0tLQorCis9PT09IFJlbW92YWwgb2YgR2VwaGkgQ29uc29sZSBQbHVnaW4KKworVGhlIEdlcGhpIFBsdWdpbiBmb3IgYGdyZW1saW4tY29uc29sZWAgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4gQXBhY2hlIFRpbmtlclBvcCBubyBsb25nZXIgbWFpbnRhaW5zCithbnkgZ3JhcGggdmlzdWFsaXphdGlvbiB0b29sLCBob3dldmVyIHRoZXJlIGFyZSBhIG51bWJlciBvZiBjb21tdW5pdHktbGVkIGFsdGVybmF0aXZlcyBhdmFpbGFibGUsIG1hbnkgb2Ygd2hpY2ggYXJlCitsaXN0ZWQgb24gdGhlIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9jb21tdW5pdHkuaHRtbCNwb3dlcmVkLWJ5W1RpbmtlclBvcCBjb21tdW5pdHkgcGFnZV0uCisKK1tbamF2YS1yZXF1ZXN0aW50ZXJjZXB0b3JdXQorPT09PSBKYXZhIFJlcXVlc3RJbnRlcmNlcHRvcgorCitCZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gV2ViU29ja2V0cyB0byBIVFRQLCB0aGUgdXNhZ2Ugb2YgdGhlIGBSZXF1ZXN0SW50ZXJjZXB0b3JgIGhhcworY2hhbmdlZCBhcyB3ZWxsLiBUaGUgYFJlcXVlc3RJbnRlcmNlcHRvcmAgd2lsbCBub3cgYmUgcnVuIHBlciByZXF1ZXN0IGFuZCB3aWxsIGFsbG93IHlvdSB0byBjb21wbGV0ZWx5IG1vZGlmeSB0aGUgSFRUUAorcmVxdWVzdCB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci4gYENsdXN0ZXJgIGhhcyBmb3VyIG5ldyBtZXRob2RzIGFkZGVkIHRvIGl0OiBgYWRkSW50ZXJjZXB0b3JBZnRlcmAsCitgYWRkSW50ZXJjZXB0b3JCZWZvcmVgLCBgcmVtb3ZlSW50ZXJjZXB0b3JgIGFuZCBgYWRkSW50ZXJjZXB0b3JgLiBFYWNoIGludGVyY2VwdG9yIHJlcXVpcmVzIGEgbmFtZSBhcyBpdCB3aWxsIGJlIHVzZWQKK3RvIGluc2VydCBuZXcgaW50ZXJjZXB0b3JzIGluIGRpZmZlcmVudCBwb3NpdGlvbnMuCisKK1RoZSBpbnRlcmNlcHRvcnMgd29yayB3aXRoIGEgbmV3IGNsYXNzIGNhbGxlZCBIdHRwUmVxdWVzdC4gVGhpcyBpcyBqdXN0IGEgYmFzaWMgYWJzdHJhY3Rpb24gb3ZlciBhIHJlcXVlc3QgYnV0IGl0IGFsc28KK2NvbnRhaW5zIHNvbWUgdXNlZnVsIHN0cmluZ3MgZm9yIGNvbW1vbiBoZWFkZXJzLiBUaGUgaW5pdGlhbCBgSHR0cFJlcXVlc3RgIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBmaXJzdCBpbnRlcmNlcHRvciB3aWxsCitjb250YWluIGEgYFJlcXVlc3RNZXNzYWdlYC4gYFJlcXVlc3RNZXNzYWdlYCBpcyBpbW11dGFibGUgYW5kIG9ubHkgY2VydGFpbiBrZXlzIGNhbiBiZSBhZGRlZCB0byB0aGVtLiBJZiB5b3Ugd2FudCB0bworY3VzdG9taXplIHRoZSBib2R5IGJ5IGFkZGluZyBvdGhlciBmaWVsZHMsIHlvdSB3aWxsIG5lZWQgdG8gbWFrZSBhIGRpZmZlcmVudCBjb3B5IG9mIHRoZSBgUmVxdWVzdE1lc3NhZ2VgIG9yIGNvbXBsZXRlbHkKK2NoYW5nZSB0aGUgYm9keSB0byBjb250YWluIGEgZGlmZmVyZW50IGRhdGEgdHlwZS4gVGhlIGZpbmFsIGludGVyY2VwdG9yIG11c3QgcmV0dXJuIGEgYEh0dHBSZXF1ZXN0YCB3aG9zZSBib2R5IGNvbnRhaW5zCithIGBieXRlW11gLgorCitBZnRlciB0aGUgaW5pdGlhbCBIVFRQIHJlcXVlc3QgaXMgZ2VuZXJhdGVkLCB0aGUgaW50ZXJjZXB0b3JzIHdpbGwgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGFsbG93IHRoZSByZXF1ZXN0IHRvIGJlCittb2RpZmllZC4gQWZ0ZXIgZWFjaCBgUmVxdWVzdEludGVyY2VwdG9yYCBpcyBydW4sIHRoZSByZXF1ZXN0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgZGF0YSBmcm9tIHRoZSBmaW5hbCBgSHR0cFJlcXVlc3RgIGFuZAordGhhdCBpcyBzZW50IHRvIHRoZSBlbmRwb2ludC4gVGhlcmUgaXMgYSBkZWZhdWx0IGludGVyY2VwdG9yIGFkZGVkIHRvIGV2ZXJ5IGBDbHVzdGVyYCBjYWxsZWQgInNlcmlhbGl6ZXIiLiBUaGlzCitpbnRlcmNlcHRvciBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgdGhlIHJlcXVlc3QgYm9keSBpcyB3aGljaCB3aGF0IHRoZSBzZXJ2ZXIgbm9ybWFsbHkgZXhwZWN0cy4gVGhpcyBpcyBpbnRlbmRlZAordG8gYmUgYW4gYWR2YW5jZWQgY3VzdG9taXphdGlvbiB0ZWNobmlxdWUgdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gbmVlZGVkLgorCitbW3B5dGhvbi1yZXF1ZXN0aW50ZXJjZXB0b3JdXQorPT09PSBQeXRob24gSW50ZXJjZXB0b3IKKworSFRUUCBpbnRlcmNlcHRvcnMgaGF2ZSBiZWVuIGFkZGVkIHRvIGBncmVtbGluLXB5dGhvbmAgdG8gZW5hYmxlIGNhcGFiaWxpdHkgc2ltaWxhciB0byB0aGF0IG9mIEphdmEgR0xWLiBUaGVzZQoraW50ZXJjZXB0b3JzIGNhbiBiZSBwYXNzZWQgaW50byBlaXRoZXIgYSBgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbmAgb3IgYSBgQ2xpZW50YCB1c2luZyB0aGUgaW50ZXJjZXB0b3JzIHBhcmFtZXRlci4gQW4KK2ludGVyY2VwdG9yIGlzIGEgYENhbGxhYmxlYCB0aGF0IGFjY2VwdHMgb25lIGFyZ3VtZW50IHdoaWNoIGlzIHRoZSBIVFRQIHJlcXVlc3QgKGRpY3Rpb25hcnkgY29udGFpbmluZyBoZWFkZXIsIHBheWxvYWQKK2FuZCBhdXRoKSBvciBhIGxpc3QvdHVwbGUgb2YgdGhlc2UgZnVuY3Rpb25zLiBUaGUgaW50ZXJjZXB0b3JzIHdpbGwgcnVuIGFmdGVyIHRoZSByZXF1ZXN0IHNlcmlhbGl6ZXIgaGFzIHJ1biBidXQgYmVmb3JlCithbnkgYXV0aCBmdW5jdGlvbnMgcnVuIHNvIHRoZSBIVFRQIHJlcXVlc3QgbWF5IHN0aWxsIGdldCBtb2RpZmllZCBhZnRlciB5b3VyIGludGVyY2VwdG9ycyBhcmUgcnVuLiBJbiBzaXR1YXRpb25zIHdoZXJlCit5b3UgZG9uJ3Qgd2FudCB0aGUgcGF5bG9hZCB0byBiZSBzZXJpYWxpemVkLCB0aGUgYG1lc3NhZ2Vfc2VyaWFsaXplcmAgaGFzIGJlZW4gc3BsaXQgaW50byBhIGByZXF1ZXN0X3NlcmlhbGl6ZXJgIGFuZCBhCitgcmVzcG9uc2Vfc2VyaWFsaXplcmAuIFNpbXBseSBzZXQgdGhlIGByZXF1ZXN0X3NlcmlhbGl6ZXJgIHRvIGBOb25lYCBhbmQgdGhpcyB3aWxsIHByZXZlbnQgdGhlIGBSZXF1ZXN0TWVzc2FnZWAgZnJvbQorYmVpbmcgc2VyaWFsaXplZC4gQWdhaW4sIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYWR2YW5jZWQgZmVhdHVyZSBzbyBzb21lIGtub3dsZWRnZSBvZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHdpbGwgYmUKK3JlcXVpcmVkIHRvIG1ha2UgdGhpcyB3b3JrLiBGb3IgZXhhbXBsZSwgeW91J2xsIG5lZWQgdG8ga25vdyB3aGF0IHBheWxvYWQgZm9ybWF0cyBhcmUgYWNjZXB0ZWQgYnkgYGFpb2h0dHBgIGZvciB0aGUKK3JlcXVlc3QgdG8gYmUgc2VudC4KKworPT09PSBKYXZhU2NyaXB0IFNldCBEZXNlcmlhbGl6YXRpb24KKworU3RhcnRpbmcgZnJvbSB0aGlzIHZlcnNpb24sIGBncmVtbGluLWphdmFzY3JpcHRgIHdpbGwgZGVzZXJpYWxpemUgYFNldGAgZGF0YSBpbnRvIGFuIEVDTUFTY3JpcHQgMjAxNSBgU2V0YC4gUHJldmlvdXNseSwKK3RoZXNlIHdlcmUgZGVzZXJpYWxpemVkIGludG8gYXJyYXlzLgorCis9PT09IEdyZW1saW4gR3JhbW1hciBDaGFuZ2VzCisKK0EgbnVtYmVyIG9mIGNoYW5nZXMgaGF2ZSBiZWVuIGludHJvZHVjZWQgdG8gdGhlIEdyZW1saW4gZ3JhbW1hciB0byBoZWxwIG1ha2UgaXQgYmUgbW9yZSBjb25zaXN0ZW50IGFuZCBlYXNpZXIgdG8gdXNlLgorCisqYG5ld2Aga2V5d29yZCBpcyBub3cgb3B0aW9uYWwqCisKK1RoZSBgbmV3YCBrZXl3b3JkIGlzIG5vdyBvcHRpb25hbCBpbiBhbGwgY2FzZXMgd2hlcmUgaXQgd2FzIHByZXZpb3VzbHkgdXNlZC4gQm90aCBvZiB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFyZSBub3cKK3ZhbGlkIHN5bnRheCB3aXRoIHRoZSBzZWNvbmQgYmVpbmcgdGhlIHByZWZlcnJlZCBmb3JtIGdvaW5nIGZvcndhcmQ6CisKK1tzb3VyY2UsZ3Jvb3Z5XQorLS0tLQorZy5WKCkud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhc0xhYmVsKCdwZXJzb24nKSkpCisKK2cuVigpLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhc0xhYmVsKCdwZXJzb24nKSkpCistLS0tCisKK0luIGEgZnV0dXJlIHZlcnNpb24sIGl0IGlzIGxpa2VseSB0aGF0IHRoZSBgbmV3YCBrZXl3b3JkIHdpbGwgYmUgcmVtb3ZlZCBlbnRpcmVseSBmcm9tIHRoZSBncmFtbWFyLgorCisqUmVmaW5lZCB2YXJpYWJsZSBzdXBwb3J0KgorCitUaGUgR3JlbWxpbiBncmFtbWFyIGFsbG93cyB2YXJpYWJsZXMgdG8gYmUgdXNlZCBpbiB2YXJpb3VzIHBsYWNlcy4gVW5saWtlIEdyb292eSwgZnJvbSB3aGljaCB0aGUgR3JlbWxpbiBncmFtbWFyIGlzCitwYXJ0aWFsbHkgZGVyaXZlZCBhbmQgd2hpY2ggYWxsb3dzIHZhcmlhYmxlcyB0byBiZSB1c2VkIGZvciBhbnkgYXJndW1lbnQgdG8gYSBtZXRob2QsIEdyZW1saW4gb25seSBhbGxvd3MgZm9yIHZhcmlhYmxlcwordG8gYmUgdXNlZCB3aGVuIHRoZXkgcmVmZXIgdG8gcGFydGljdWxhciB0eXBlcy4gSW4gbWFraW5nIHRoaXMgY2hhbmdlIGl0IGRpZCBtZWFuIHRoYXQgYWxsIGVudW1zIGxpa2UsIGBTY29wZWAsIGBQb3BgLAorYE9yZGVyYCwgZXRjLiBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgaW4gdGhhdCB3YXkgYW5kIGNhbiB0aGVyZWZvcmUgb25seSBiZSByZWNvZ25pemVkIGFzIGxpdGVyYWwgdmFsdWVzLgorCisqU3VwcG9ydHMgd2l0aG91dFN0cmF0ZWdpZXMoKSoKKworVGhlIGB3aXRob3V0U3RyYXRlZ2llcygpYCBjb25maWd1cmF0aW9uIHN0ZXAgaXMgbm93IHN1cHBvcnRlZCBzeW50YXggZm9yIHRoZSBncmFtbWFyLiBXaGlsZSB0aGlzIG9wdGlvbiBpcyBub3QgY29tbW9ubHkKK3VzZWQgaXQgaXMgc3RpbGwgYSBwYXJ0IG9mIHRoZSBHcmVtbGluIGxhbmd1YWdlIGFuZCB0aGVyZSBhcmUgdGltZXMgd2hlcmUgaXQgaXMgaGVscGZ1bCB0byBoYXZlIHRoaXMgZmluZSBncmFpbmVkCitjb250cm9sIG92ZXIgaG93IGEgdHJhdmVyc2FsIHdvcmtzLgorCitbc291cmNlLGdyb292eV0KKy0tLS0KK2cuVigpLndpdGhvdXRTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpCistLS0tCisKK1NlZTogbGluazpodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUC0yODYyW1RJTktFUlBPUC0yODYyXSwKK2xpbms6aHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AtMzA0NltUSU5LRVJQT1AtMzA0Nl0KKworPT09PSBSZW5hbWVkIG5vbmUoKSB0byBkaXNjYXJkKCkKKworVGhlIGBub25lKClgIHN0ZXAsIHdoaWNoIHdhcyBwcmltYXJpbHkgdXNlZCBieSBgaXRlcmF0ZSgpYCB0byBkaXNjYXJkIHRyYXZlcnNhbCByZXN1bHRzIGluIHJlbW90ZSBjb250ZXh0cywgaGFzIGJlZW4KK3JlbmFtZWQgdG8gYGRpc2NhcmQoKWAuIEluIGl0cyBwbGFjZSBpcyBhIG5ldyBsaXN0IGZpbHRlcmluZyBzdGVwIGBub25lKClgLCB3aGljaCB0YWtlcyBhIHByZWRpY2F0ZSBhcyBhbiBhcmd1bWVudCBhbmQKK3Bhc3NlcyBsaXN0cyB3aXRoIG5vIGVsZW1lbnRzIG1hdGNoaW5nIHRoZSBwcmVkaWNhdGUuCisKKz09PT0gSW50ZWdlciBPdmVyZmxvdyBIYW5kbGluZworCitJbnRlZ2VyIG92ZXJmbG93cyBjYXVzZWQgYnkgYWRkaXRpb24gYW5kIG11bHRpcGxpY2F0aW9uIG9wZXJhdGlvbnMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZCBvZiBiZWluZyBzaWxlbnRseQorc2tpcHBlZCB3aXRoIGluY29ycmVjdCByZXN1bHQuCisKKz09PT0gU2VlZFN0cmF0ZWd5IENvbnN0cnVjdGlvbgorCitUaGUgYFNlZWRTdHJhdGVneWAgcHVibGljIGNvbnN0cnVjdG9yIGhhcyBiZWVuIHJlbW92ZWQgZm9yIEphdmEgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSBidWlsZGVyIHBhdHRlcm4gY29tbW9uCit0byBhbGwgc3RyYXRlZ2llcy4gVGhpcyBjaGFuZ2Ugd2FzIG1hZGUgdG8gZW5zdXJlIHRoYXQgdGhlIGBTZWVkU3RyYXRlZ3lgIGNvdWxkIGJlIGNvbnN0cnVjdGVkIGluIGEgY29uc2lzdGVudCBtYW5uZXIuCisKKz09PT0gUmVtb3ZhbCBvZiBgZ3JlbWxpbi1hcmNoZXR5cGVgCisKK2BncmVtbGluLWFyY2hldHlwZWAsIHdoaWNoIGNvbnRhaW5lZCBleGFtcGxlIHByb2plY3RzIGRlbW9uc3RyYXRpbmcgdGhlIHVzZSBjYXNlcyBvZiBUaW5rZXJQb3AsIGhhcyBiZWVuIHJlbW92ZWQgaW4KK2Zhdm9yIG9mIG5ld2VyIHNhbXBsZSBhcHBsaWNhdGlvbnMgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGVhY2ggR0xWJ3MgYGV4YW1wbGVzYCBmb2xkZXIuCisKKz09PT0gSW1wcm92ZWQgVHJhbnNsYXRvcnMKKworVGhlIHZhcmlvdXMgSmF2YSBgVHJhbnNsYXRvcmAgaW1wbGVtZW50YXRpb25zIGFsbG93aW5nIGNvbnZlcnNpb24gb2YgR3JlbWxpbiB0cmF2ZXJzYWxzIHRvIHN0cmluZyBmb3JtcyBpbiB2YXJpb3VzCitsYW5ndWFnZXMgaGF2ZSBiZWVuIG1vZGlmaWVkIGNvbnNpZGVyYWJseS4gRmlyc3QsIHRoZXkgaGF2ZSBiZWVuIG1vdmVkIGZyb20gdG8gdGhlCitgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yYCBwYWNrYWdlLCBiZWNhdXNlIHRoZXkgbm93IGRlcGVuZCBvbiB0aGUgQU5UTFIgZ3JhbW1hciBpbgorYGdyZW1saW4tbGFuZ3VhZ2VgIHRvIGhhbmRsZWQgdGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MuIE1ha2luZyB0aGlzIGNoYW5nZSBhbGxvd2VkIGZvciBhIG1vcmUgYWNjdXJhdGUgdHJhbnNsYXRpb24gb2YKK0dyZW1saW4gdGhhdCBkb2Vzbid0IG5lZWQgdG8gcmVseSBvbiByZWZsZWN0aW9uIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0byBkZXRlcm1pbmUgd2hpY2ggc3RlcCB3YXMgaW50ZW5kZWQgZm9yIHVzZS4KKworQW5vdGhlciBpbXBvcnRhbnQgY2hhbmdlIHdhcyB0aGUgaW50cm9kdWN0aW9uIG9mIHNwZWNpZmljIHRyYW5zbGF0b3JzIGZvciBHcm9vdnkgYW5kIEphdmEuIFdoaWxlIEdyb292eSB0cmFuc2xhdGlvbgordGVuZHMgdG8gd29yayBmb3IgbW9zdCBKYXZhIGNhc2VzLCB0aGVyZSBpcyBzeW50YXggc3BlY2lmaWMgdG8gR3Jvb3Z5IHdoZXJlIGl0IGRvZXMgbm90LiBXaXRoIGEgc3BlY2lmaWMgSmF2YQordHJhbnNsYXRvciwgdGhlIHRyYW5zbGF0aW9uIHByb2Nlc3MgY2FuIGJlIG1vcmUgYWNjdXJhdGUgYW5kIGxlc3MgZXJyb3IgcHJvbmUuCisKK1RoZSBzeW50YXggZm9yIHRoZSB0cmFuc2xhdG9ycyBoYXMgc2ltcGxpZmllZCBhcyB3ZWxsLiBUaGUgdHJhbnNsYXRvciBmdW5jdGlvbiBub3cgdGFrZXMgYSBHcmVtbGluIHN0cmluZyBhbmQgYSB0YXJnZXQKK2xhbmd1YWdlIHRvIHRyYW5zbGF0ZSB0by4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOgorCitbc291cmNlLHRleHRdCistLS0tCitncmVtbGluPiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoImcuVigpLm91dCgna25vd3MnKSIsIFRyYW5zbGF0b3IuR08pCis9PT5nLlYoKS5PdXQoImtub3dzIikKKy0tLS0KKworRnVydGhlciBub3RlIHRoYXQgR3JlbWxpbiBsYW5ndWFnZSB2YXJpYW50cyBwcm9kdWNlIDw8Y2Fub25pY2FsLWdyZW1saW4sIGNhbm9uaWNhbCBHcmVtbGluPj4gc3RyaW5ncyBkaXJlY3RseSBzaW5jZQorYnl0ZWNvZGUgd2FzIHJlbW92ZWQuIEFzIGEgcmVzdWx0LCBhbGwgdHJhbnNsYXRvcnMgaW4gLk5FVCwgUHl0aG9uLCBHbyBhbmQgSmF2YXNjcmlwdCBoYXZlIGJlZW4gcmVtb3ZlZC4KKworU2VlOiBsaW5rOmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLTMwMjhbVElOS0VSUE9QLTMwMjhdCisKKz09PT0gUHl0aG9uIE9wdGlvbnNTdHJhdGVneQorCitUaGUgYFxcX19pbml0X18oKWAgc3ludGF4IGhhcyBiZWVuIHVwZGF0ZWQgdG8gYmUgYm90aCBtb3JlIHB5dGhvbmljIGFuZCBtb3JlIGFsaWduZWQgdG8gdGhlIGBncmVtbGluLWxhbmdgIHN5bnRheC4KK1ByZXZpb3VzbHksIGBPcHRpb25zU3RyYXRlZ3koKWAgdG9vayBhIHNpbmdsZSBhcmd1bWVudCBgb3B0aW9uc2Agd2hpY2ggd2FzIGEgYGRpY3RgIG9mIGFsbCBvcHRpb25zIHRvIGJlIHNldC4KK05vdywgYWxsIG9wdGlvbnMgc2hvdWxkIGJlIHNldCBkaXJlY3RseSBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworRm9yIGV4YW1wbGU6CisKK1tzb3VyY2UscHl0aG9uXQorLS0tLQorIyAzLjcgYW5kIGJlZm9yZToKK2cud2l0aF9zdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneShvcHRpb25zPXsna2V5MSc6ICd2YWx1ZTEnLCAna2V5Mic6IFRydWV9KSkKKyMgNC54IGFuZCBuZXdlcjoKK2cud2l0aF9zdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneShrZXkxPSd2YWx1ZTEnLCBrZXkyPVRydWUpKQorCitteU9wdGlvbnMgPSB7J2tleTEnOiAndmFsdWUxJywgJ2tleTInOiBUcnVlfQorIyAzLjcgYW5kIGJlZm9yZToKK2cud2l0aF9zdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneShvcHRpb25zPW15T3B0aW9ucykpCisjIDQueCBhbmQgbmV3ZXI6CitnLndpdGhfc3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3koKipteU9wdGlvbnMpKQorLS0tLQorCis9PT09IEN1c3RvbSBUcmF2ZXJzYWwgU3RyYXRlZ3kgQ29uc3RydWN0aW9uCisKK1RyYXZlcnNhbCBzdHJhdGVneSBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gdXBkYXRlZCBzdWNoIHRoYXQgaXQgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIHRvIGhhdmUgY29uY3JldGUgY2xhc3NlcyBmb3IgZWFjaAorc3RyYXRlZ3kgYmVpbmcgYWRkZWQgdG8gYSBncmFwaCB0cmF2ZXJzYWwgKHVzZSBvZiBjb25jcmV0ZSBjbGFzc2VzIHJlbWFpbnMgdmlhYmxlIGFuZCBpcyByZWNvbW1lbmRlZCBmb3IgIm5hdGl2ZSIKK1RpbmtlclBvcCBzdHJhdGVnaWVzKS4gVG8gdXNlIHN0cmF0ZWdpZXMgd2l0aG91dCBhIGNvbmNyZXRlIGNsYXNzLCBgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eWAgY2FuIGJlIHVzZWQgaW4gSmF2YSwgYW5kCitgVHJhdmVyc2FsU3RyYXRlZ3lgIGluIFB5dGhvbi4KKworQWxsIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgd2lsbCBwcm9kdWNlIHRoZSBzY3JpcHQgYGcud2l0aFN0cmF0ZWdpZXMobmV3IE15U3RyYXRlZ3koY29uZmlnMTonbXkgdmFsdWUnLGNvbmZpZzI6MTIzKSlgOgorCitbc291cmNlLGphdmFdCistLS0tCitNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZ01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgICAgICAgY29uZmlnTWFwLnB1dCgiY29uZmlnMSIsICJteSB2YWx1ZSIpOworICAgICAgICBjb25maWdNYXAucHV0KCJjb25maWcyIiwgMTIzKTsKKyAgICAgICAgVHJhdmVyc2FsU3RyYXRlZ3kgc3RyYXRlZ3lQcm94eSA9IG5ldyBUcmF2ZXJzYWxTdHJhdGVneVByb3h5KCJNeVN0cmF0ZWd5IiwgbmV3IE1hcENvbmZpZ3VyYXRpb24oY29uZmlnTWFwKSk7CisKKyAgICAgICAgR3JhcGhUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZy53aXRoU3RyYXRlZ2llcyhzdHJhdGVneVByb3h5KTsKKy0tLS0KKworW3NvdXJjZSxweXRob25dCistLS0tCitnLndpdGhfc3RyYXRlZ2llcyhUcmF2ZXJzYWxTdHJhdGVneSgKKyAgICAgICAgICAgIHN0cmF0ZWd5X25hbWU9J015U3RyYXRlZ3knLAorICAgICAgICAgICAgY29uZmlnMT0nbXkgdmFsdWUnLAorICAgICAgICAgICAgY29uZmlnMj0xMjMKKyAgICAgICAgKSkKKy0tLS0KKworPT09PSBTZXJpYWxpemF0aW9uCisKK1RoZSBHTFZzIHdpbGwgb25seSBzdXBwb3J0IEdyYXBoQmluYXJ5VjQgYW5kIEdyYXBoU09OIHN1cHBvcnQgd2lsbCBiZSByZW1vdmVkLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHNlcmlhbGl6ZXIgb3B0aW9uCit0aGF0IHdhcyBhdmFpbGFibGUgaW4gbW9zdCBHTFZzIGhhcyBiZWVuIHJlbW92ZWQuIEdyYXBoQmluYXJ5IGlzIGEgbW9yZSBjb21wYWN0IGZvcm1hdCBhbmQgaGFzIHN1cHBvcnQgZm9yIHRoZSBzYW1lCit0eXBlcy4gVGhpcyBzaG91bGQgbGVhZCB0byBpbmNyZWFzZWQgcGVyZm9ybWFuY2UgZm9yIHVzZXJzIHVwZ3JhZGluZyBmcm9tIGFueSB2ZXJzaW9uIG9mIEdyYXBoU09OIHRvIEdyYXBoQmluYXJ5LgorCitUaGUgbnVtYmVyIG9mIHNlcmlhbGl6YWJsZSB0eXBlcyBoYXMgYmVlbiByZWR1Y2VkIGluIFY0LiBGb3IgZXhhbXBsZSwgb25seSBhIHNpbmdsZSB0ZW1wb3JhbCB0eXBlIHJlbWFpbnMuIFlvdSBoYXZlIHR3bworb3B0aW9ucyB3aGVuIHRyeWluZyB0byB3b3JrIHdpdGggZGF0YSB0eXBlcyB3aG9zZSBzZXJpYWxpemVyIGhhcyBiZWVuIHJlbW92ZWQ6IGZpcnN0LCB5b3UgY2FuIGF0dGVtcHQgdG8gY29udmVydCB0aGUKK2RhdGEgdG8gYW5vdGhlciB0eXBlIHRoYXQgc3RpbGwgaGF2ZSBhIHNlcmlhbGl6ZXIgb3IsIHNlY29uZCwgdGhlIHR5cGUgbWF5IGhhdmUgYmVlbiB0b28gc3BlY2lmaWMgYW5kIHRoZXJlZm9yZSByZW1vdmVkCitpbiB3aGljaCBjYXNlIHlvdXIgcHJvdmlkZXIgc2hvdWxkIGhhdmUgYSBQcm92aWRlciBEZWZpbmVkIFR5cGUgKFBEVCkgZm9yIGl0LiBTZWUgdGhlIG5leHQgcGFyYWdyYXBoIGZvciBpbmZvcm1hdGlvbiBvbgorUERUcy4KKworQ3VzdG9tIHNlcmlhbGl6ZXJzIGhhdmUgYWxzbyBiZWVuIHJlbW92ZWQgc28gaWYgeW91IHByZXZpb3VzbHkgaW5jbHVkZWQgdGhvc2UgYXMgcGFydCBvZiB5b3VyIGFwcGxpY2F0aW9uLCB0aGV5IHNob3VsZAorbm93IGJlIHJlbW92ZWQuIEluIGl0cyBwbGFjZSwgUERUcyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gSW4gcGFydGljdWxhciwgdGhlcmUgaXMgdGhlIFByaW1pdGl2ZSBQRFQgYW5kIHRoZSBDb21wb3NpdGUKK1BEVC4gUHJpbWl0aXZlIFBEVHMgYXJlIHN0cmluZy1iYXNlZCByZXByZXNlbnRhdGlvbnMgb2YgYSBwcmltaXRpdmUgdHlwZSBzdXBwb3J0ZWQgYnkgeW91ciBwcm92aWRlci4gQ29tcG9zaXRlIHR5cGVzCitjb250YWluIGEgbWFwIG9mIGZpZWxkcy4gWW91IHNob3VsZCBjb25zdWx0IHlvdXIgcHJvdmlkZXIncyBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHR5cGVzIG9mIGZpZWxkcyBhCitwYXJ0aWN1bGFyIFBEVCBtYXkgY29udGFpbi4KKworPT09PSBBdXRoZW50aWNhdGlvbiBhbmQgQXV0aG9yaXphdGlvbgorCitXaXRoIHRoZSBtb3ZlIHRvIEhUVFAsIHRoZSBvbmx5IGF1dGhlbnRpY2F0aW9uIG9wdGlvbiBzdXBwb3J0ZWQgb3V0LW9mLXRoZS1ib3ggaXMgSFRUUCBiYXNpYyBhY2Nlc3MgYXV0aGVudGljYXRpb24KKyh1c2VybmFtZS9wYXNzd29yZCkuIFRoZSBTQVNMLWJhc2VkIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQgKGUuZy4gS2VyYmVyb3MpLiBZb3VyIGdyYXBoCitzeXN0ZW0gcHJvdmlkZXIgbWF5IGNob29zZSB0byBpbXBsZW1lbnQgb3RoZXIgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBvdmVyIEhUVFAgd2hpY2ggeW91IHdvdWxkIGhhdmUgdG8gdXNlIHZpYSBhCityZXF1ZXN0IGludGVyY2VwdG9yLiBSZWZlciB0byB5b3VyIHByb3ZpZGVyJ3MgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgaWYgb3RoZXIgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBhcmUKK2F2YWlsYWJsZS4KKworPT09PSBUcmFuc2FjdGlvbnMgRGlzYWJsZWQKKworSU1QT1JUQU5UOiA0LjAuMC1iZXRhLjEgUmVsZWFzZSAtIFRyYW5zYWN0aW9ucyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGFuZCB1c2Ugb2YgYHR4KClgIHdpbGwgcmV0dXJuIGFuIGVycm9yLgorCis9PT09IFJlbW92YWwgb2YgU2Vzc2lvbnMKKworU3VwcG9ydCBmb3Igc2Vzc2lvbnMgaGFzIGJlZW4gcmVtb3ZlZC4gQWxsIHJlcXVlc3RzIGFyZSBub3cgInNlc3Npb25sZXNzIiB3aXRoIG5vIHNoYXJlZCBzdGF0ZSBhY3Jvc3Mgc3Vic2VxdWVudCByZXF1ZXN0cy4KKworPT09PSBSZXN1bHQgQnVsa2luZyBDaGFuZ2VzCisKK1ByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBHcmVtbGluIFNlcnZlciB3b3VsZCBhdHRlbXB0IHRvICJidWxrIiB0aGUgcmVzdWx0IGlmIGJ5dGVjb2RlIHdhcyB1c2VkIGluIHRoZSByZXF1ZXN0LiBUaGlzCisiYnVsa2luZyIgaW5jcmVhc2VkIHBlcmZvcm1hbmNlIGJ5IHNlbmRpbmcgc2ltaWxhciByZXN1bHRzIG9uY2Ugd2l0aCBhIGNvdW50IG9mIG9jY3VycmVuY2VzLiBTdGFydGluZyBpbiA0LjAsIEdyZW1saW4KK1NlcnZlciB3aWxsIGJ1bGsgYmFzZWQgb24gYSBuZXdseSBpbnRyb2R1Y2VkIGBidWxrZWRgIGZpZWxkIGluIHRoZSBgUmVxdWVzdE1lc3NhZ2VgLiBJdCBvbmx5IGFwcGxpZXMgdG8gR3JhcGhCaW5hcnkgYW5kCitgZ3JlbWxpbi1sYW5nYCByZXF1ZXN0cyBhbmQgb3RoZXIgcmVxdWVzdHMgd29uJ3QgYmUgYnVsa2VkLiBUaGlzIGNhbiBiZSB0b2dnbGVkIGluIHRoZSBsYW5ndWFnZSB2YXJpYW50cyBieSBzZXR0aW5nIGEKK2Jvb2xlYW4gdmFsdWUgd2l0aCBgZW5hYmxlQnVsa2VkUmVzdWx0KClgIGluIHRoZSBgQ2x1c3RlcmAgc2V0dGluZ3MuCisKKz09PT0gR3JlbWxpbiBKYXZhIENoYW5nZXMKKworQ29ubmVjdGlvbiBwb29saW5nIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayB3aXRoIEhUVFAuIFByZXZpb3VzbHksIGNvbm5lY3Rpb25zIGNvdWxkIG9ubHkgYmUgb3BlbmVkIG9uZSBhdCBhIHRpbWUsIGJ1dAordGhpcyBoYXMgY2hhbmdlZCBhbmQgbm93IG1hbnkgY29ubmVjdGlvbnMgY2FuIGJlIG9wZW5lZCBhdCB0aGUgc2FtZSB0aW1lLiBUaGlzIHN1cHBvcnRzIGJ1cnN0eSB3b3JrbG9hZHMgd2hlcmUgbWFueQorcXVlcmllcyBtYXkgYmUgaXNzdWVkIHdpdGhpbiBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLiBDb25uZWN0aW9ucyBhcmUgbm8gbG9uZ2VyIGNsb3NlZCBiYXNlZCBvbiBob3cgImJ1c3kiIHRoZXkgYXJlCitiYXNlZCBvbiB0aGUgYG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb25gIGFuZCBgbWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uYCwgcmF0aGVyIHRoZXkgYXJlIGNsb3NlZCBiYXNlZCBvbiBhbgoraWRsZSB0aW1lb3V0IGNhbGxlZCBgaWRsZUNvbm5lY3Rpb25UaW1lb3V0YC4gQmVjYXVzZSB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIGNhbiBpbmNyZWFzZSBtdWNoIGZhc3RlciBhbmQgY29ubmVjdGlvbnMKK2FyZSBjbG9zZWQgYmFzZWQgb24gYSB0aW1lb3V0LCB0aGUgYG1pbkNvbm5lY3Rpb25Qb29sU2l6ZWAgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQgYW5kIHRoZXJlIG1heSBiZSB6ZXJvIGNvbm5lY3Rpb25zCithdmFpbGFibGUgaWYgdGhlIGRyaXZlciBoYXMgYmVlbiBpZGxlIGZvciBhIHdoaWxlLgorCitUaGUgSmF2YSBkcml2ZXIgY2FuIGN1cnJlbnRseSBoYW5kbGUgYSByZXNwb25zZSB0aGF0IGlzIGEgbWF4aW11bSBvZiAyXjMxLTEgKGBJbnRlZ2VyLk1BWF9WQUxVRWApIGJ5dGVzIGluIHNpemUuCitRdWVyaWVzIHRoYXQgcmV0dXJuIG1vcmUgZGF0YSB3aWxsIGhhdmUgdG8gYmUgc2VwYXJhdGVkIGludG8gbXVsdGlwbGUgcXVlcmllcyB0aGF0IHJldHVybiBsZXNzIGRhdGEuCisKKz09PT0gR1ZhbHVlCisKK1BhcmFtZXRlcml6YXRpb24gd2FzIGZpcnN0IGFkZGVkIHRvIGdyZW1saW4tbGFuZyBpbiBUaW5rZXJQb3AgMy43LjAsIGhvd2V2ZXIgd2FzIGxpbWl0ZWQgaW4gdGhhdCB2YXJpYWJsZXMgd2VyZQoraW1tZWRpYXRlbHkgcmVzb2x2ZWQgdG8gbGl0ZXJhbHMgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBvZiBhIGdyZW1saW4gc2NyaXB0LiBUaGlzIGRpcmVjdCByZXNvbHV0aW9uIG9mIHZhcmlhYmxlcyBsaW1pdGVkCitwcm92aWRlcnMgYWJpbGl0eSB0byBkZXRlY3QgYW5kIG9wdGltaXplIHJlY3VycmluZyBxdWVyeSBwYXR0ZXJucy4KKworV2l0aCB0aGlzIHVwZGF0ZSwgYSBuZXcgY2xhc3MgYEdWYWx1ZWAgaXMgaW50cm9kdWNlZCB3aGljaCB3cmFwcyBhIHBhcmFtZXRlciBuYW1lIGFuZCB2YWx1ZS4gU3RlcHMgd2hpY2ggd2lsbCBiZW5lZml0Citmcm9tIHBhcmFtZXRlcml6YXRpb24gaGF2ZSBiZWVuIGdpdmVuIG92ZXJsb2FkcyB0byBhY2NlcHQgR1ZhbHVlcy4gVXNlcnMgY2FuIHBhc3MgR1ZhbHVlJ3MgaW50byB0aGVpciB0cmF2ZXJzYWxzIHRvCitpbmplY3QgcGFyYW1ldGVycy4KKworQSBgR1ZhbHVlYCB3cmFwcyBhIHBhcmFtZXRlciBuYW1lIGFuZCB2YWx1ZSwgYW5kIGNhbiBiZSBwcm92aWRlZCBhcyBpbnB1dCB0byBwYXJhbWV0ZXJpemFibGUgc3RlcHMgd2hlbiBidWlsZGluZyBhCitgR3JhcGhUcmF2ZXJzYWxgLiBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIHdpbGwgcHJvZHVjZSBhIGdyZW1saW4gc2NyaXB0IG9mIGBnLlYoKS5oYXNMYWJlbChsYWJlbClgIHdpdGggYSBwYXJhbWV0ZXIgbWFwCitvZiBgWyJsYWJlbCI6ICJwZXJzb24iXWA6CisKK1tzb3VyY2UsamF2YV0KKy0tLS0KK2cuVigpLmhhc0xhYmVsKEdWYWx1ZS5vZigibGFiZWwiLCAicGVyc29uIikpOworLS0tLQorCitbc291cmNlLHB5dGhvbl0KKy0tLS0KK2cuVigpLmhhc19sYWJlbChHVmFsdWUoJ2xhYmVsJywgJ3BlcnNvbicpKQorLS0tLQorCitVc2Ugb2YgYEdWYWx1ZWAgaW4gdHJhdmVyc2FscyB3aXRoIHJlcGVhdGVkIHBhdHRlcm5zIG1heSBsZWFkIHRvIGltcHJvdmVkIHBlcmZvcm1hbmNlIGluIGNlcnRhaW4gZ3JhcGhzLiBDb25zdWx0IHRoZQorZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBzcGVjaWZpYyBncmFwaCBwcm92aWRlciBmb3IgcmVjb21tZW5kYXRpb25zIG9uIGhvdyB0byBiZXN0IHV0aWxpemUgYEdWYWx1ZWAgaW4gdHJhdmVyc2Fscy4KKworQSBuZXcgYERlZmF1bHRWYXJpYWJsZVJlc29sdmVyYCBoYXMgYWxzbyBiZWVuIGludHJvZHVjZWQgd2l0aCB0aGlzIGNoYW5nZS4gVGhlIGdyYW1tYXIgd2lsbCBub3cgcmVzb2x2ZSB2YXJpYWJsZXMgaW50bworYEdWYWx1ZWAgd2hpY2ggYXJlIHBhc3NlZCB0byB0aGUgY29uc3RydWN0ZWQgdHJhdmVyc2FsLCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHJlc29sdmluZyB0aGVtIHRvIGxpdGVyYWxzLiBUaGUgb2xkIHZhcmlhYmxlCityZXNvbHV0aW9uIGJlaGF2aW9yIGNhbiBzdGlsbCBiZSBvYnRhaW5lZCB2aWEgdGhlIGBEaXJlY3RWYXJpYWJsZVJlc29sdmVyYCBpZiBkZXNpcmVkLgorCis9PT09IEdyZW1saW4gU2VydmVyIERlZmF1bHQgTGFuZ3VhZ2UKKworYGdyZW1saW4tbGFuZ2AgaXMgbm93IHRoZSBkZWZhdWx0IGxhbmd1YWdlIGFuZCBzY3JpcHQgZW5naW5lIGluIEdyZW1saW4tU2VydmVyLCByZXBsYWNpbmcgYGdyZW1saW4tZ3Jvb3Z5YC4gVXNlcnMgbWF5CitzdGlsbCBleHBsaWNpdGx5IHNldCB0aGUgYGxhbmd1YWdlYCBmaWVsZCBvZiBhIHJlcXVlc3QgbWVzc2FnZSB0byBgImdyZW1saW4tZ3Jvb3Z5ImAgaW4gY2FzZXMgd2hlcmUgZ3Jvb3Z5IHNjcmlwdHMgYXJlCityZXF1aXJlZC4KKworPT09IFVwZ3JhZGluZyBmb3IgUHJvdmlkZXJzCisKKz09PT0gUmVuYW1pbmcgTm9uZVN0ZXAgdG8gRGlzY2FyZFN0ZXAKK05vbmVTdGVwLCB3aGljaCB3YXMgcHJpbWFyaWx5IHVzZWQgYnkgYGl0ZXJhdGUoKWAgdG8gZGlzY2FyZCB0cmF2ZXJzYWwgcmVzdWx0cyBpbiByZW1vdGUgY29udGV4dHMsIGhhcyBiZWVuIHJlbmFtZWQgdG8KK0Rpc2NhcmRTdGVwLiBJbiBpdHMgcGxhY2UgaXMgYSBuZXcgbGlzdCBmaWx0ZXJpbmcgTm9uZVN0ZXAsIHdoaWNoIHRha2VzIGEgcHJlZGljYXRlIGFzIGFuIGFyZ3VtZW50IGFuZCBwYXNzZXMgbGlzdHMgd2l0aAorbm8gZWxlbWVudHMgbWF0Y2hpbmcgdGhlIHByZWRpY2F0ZS4KKworPT09PSBDaGFuZ2VzIHRvIFNlcmlhbGl6YXRpb24KKworVGhlIFY0IHZlcnNpb25zIG9mIEdyYXBoQmluYXJ5IGFuZCBHcmFwaFNPTiBhcmUgYmVpbmcgaW50cm9kdWNlZC4gU3VwcG9ydCBmb3IgdGhlIG9sZGVyIHZlcnNpb25zIG9mIEdyYXBoQmluYXJ5IChWMSkKK2FuZCBHcmFwaFNPTiAoVjEtMykgaXMgcmVtb3ZlZC4gVXBvbiB0aGUgZnVsbCByZWxlYXNlIG9mIDQuMCwgdGhlIEdMVnMgd2lsbCBvbmx5IHVzZSBHcmFwaEJpbmFyeSwgaG93ZXZlciwgdGhlIEdyZW1saW4KK1NlcnZlciB3aWxsIHN1cHBvcnQgYm90aCBHcmFwaFNPTiBhbmQgR3JhcGhCaW5hcnkuIFRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRoZSBtYWpvciBjaGFuZ2VzIHRvIHRoZSBHcmFwaEJpbmFyeQorZm9ybWF0OgorCisqIFJlbW92ZWQgdHlwZSBzZXJpYWxpemVyczoKKyoqIFBlcmlvZAorKiogRGF0ZQorKiogVGltZVN0YW1wCisqKiBJbnN0YW50CisqKiBab25lZERhdGVUaW1lCisqKiBPZmZzZXRUaW1lCisqKiBMb2NhbERhdGVUaW1lCisqKiBMb2NhbERhdGUKKyoqIExvY2FsVGltZQorKiogTW9udGhEYXkKKyoqIFllYXJNb250aAorKiogWWVhcgorKiogWm9uZU9mZnNldAorKiogQnVsa1NldAorKiogQ2xhc3MKKyoqIEJpbmRpbmcKKyoqIEJ5dGVjb2RlCisqKiBCYXJyaWVyCisqKiBDYXJkaW5hbGl0eQorKiogQ29sdW1uCisqKiBPcGVyYXRvcgorKiogT3JkZXIKKyoqIFBpY2sKKyoqIFBvcAorKiogU2NvcGUKKyoqIERUCisqKiBMYW1iZGEKKyoqIFAKKyoqIFRyYXZlcnNlcgorKiogVGV4dFAKKyoqIFRyYXZlcnNhbFN0cmF0ZWd5CisqKiBNZXRyaWNzCisqKiBUcmF2ZXJzYWxNZXRyaWNzCisqKiBJbmV0QWRkcmVzcworKiBPZmZzZXREYXRldGltZSBoYXMgYmVlbiByZW5hbWVkIHRvIERhdGV0aW1lLiBUaGlzIHR5cGUgbWFwcyB0byBgT2Zmc2V0RGF0ZVRpbWVgIGluIEphdmEgYW5kIGEgYGRhdGV0aW1lYCBpbiBQeXRob24uCisqIEJ5dGUgaXMgcmVkZWZpbmVkIGZyb20gYmVpbmcgdW5zaWduZWQgYnl0ZSB0byBhIHNpZ25lZCBieXRlLgorKiBMaXN0IGhhcyBhIGAweDAyYCB2YWx1ZV9mbGFnIHVzZWQgdG8gZGVub3RlIGJ1bGtpbmcuCisqIE1hcCBoYXMgYSBgMHgwMmAgdmFsdWVfZmxhZyB1c2VkIHRvIGRlbm90ZSBvcmRlcmluZy4KKyogYEVsZW1lbnRgIChWZXJ0ZXgsIEVkZ2UsIFZlcnRleFByb3BlcnR5KSBsYWJlbHMgaGF2ZSBiZWVuIGNoYW5nZWQgZnJvbSBgU3RyaW5nYCB0byBgTGlzdGAgb2YgYFN0cmluZ2AuCisqIGBFbGVtZW50YCAoVmVydGV4LCBFZGdlLCBWZXJ0ZXhQcm9wZXJ0eSkgcHJvcGVydGllcyBhcmUgbm8gbG9uZ2VyIG51bGwgYW5kIGFyZSBgTGlzdGAgb2YgYFByb3BlcnR5YC4KKyogQ3VzdG9tIGlzIHJlcGxhY2VkIHdpdGggUHJvdmlkZXIgRGVmaW5lZCBUeXBlcworCitPbmUgb2YgdGhlIGJpZ2dlc3QgZGlmZmVyZW5jZXMgaXMgaW4gZGF0ZXRpbWUgc3VwcG9ydC4gUHJldmlvdXNseSwgaW4gdGhlIEphdmEgaW1wbGVtZW50YXRpb24sIGBqYXZhLnV0aWwuRGF0ZWAsCitgamF2YS5zcWwuVGltZXN0YW1wYCBhbmQgbW9zdCB0eXBlcyBmcm9tIHRoZSBgamF2YS50aW1lYCBwYWNrYWdlIGhhZCBzZXJpYWxpemVycy4gVGhpcyBpc24ndCB0aGUgY2FzZSBpbiBHcmFwaFNPTiA0CithcyBvbmx5IGBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWVgIGlzIHN1cHBvcnRlZC4gSmF2YSBwcm92aWRlcyBtZXRob2RzIHRvIGNvbnZlcnQgYW1vbmdzdCB0aGVzZSBjbGFzc2VzIHNvIHRoZXkgc2hvdWxkCitiZSB1c2VkIHRvIGNvbnZlcnQgeW91ciBkYXRhIHRvIGFuZCBmcm9tIGBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWVgLgorCitUaGUgYEdyYXBoU09OU2VyaWFsaXplclByb3ZpZGVyYCBpcyBub3QgdXNlZCBpbiBHcmFwaFNPTiA0LiBUaGUgYEdyYXBoU09OU2VyaWFsaXplclByb3ZpZGVyYCB1c2VzIHRoZQorYFRvU3RyaW5nU2VyaWFsaXplcmAgZm9yIGFueSB1bmtub3duIHR5cGUgYW5kIHdhcyB1c2VkIGluIHByZXZpb3VzIEdyYXBoU09OIHZlcnNpb25zLiBCZWNhdXNlIEdyYXBoU09OIDQgaXMgb25seQoraW50ZW5kZWQgdG8gc2VyaWFsaXplIHNwZWNpZmljIHR5cGVzIGFuZCBub3QgdXNlZCBhcyBhIGdlbmVyYWwgc2VyaWFsaXplciwgR3JhcGhTT04gNCBzZXJpYWxpemVycyB3aWxsIHRocm93IGFuIGVycm9yCit3aGVuIGVuY291bnRlcmluZyB1bmtub3duIHR5cGVzLgorCis9PT09IEdyYXBoIFN5c3RlbSBQcm92aWRlcnMKKworPT09PT0gQWJzdHJhY3RBdXRoZW50aWNhdG9ySGFuZGxlciBDb25zdHJ1Y3RvcgorCitUaGUgZGVwcmVjYXRlZCBvbmUtYXJnIGNvbnN0cnVjdG9yIGZvciBgQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXJgIGhhcyBiZWVuIHJlbW92ZWQgYWxvbmcgd2l0aCB0d28tYXJnIGNvbnN0cnVjdG9ycworZm9yIHRoZSBpbXBsZW1lbnRhdGlvbnMuIEdyZW1saW4gU2VydmVyIGZvcm1lcmx5IHN1cHBvcnRlZCB0aGUgdHdvLWFyZyBgQXV0aGVudGljYXRvcmAsIGFuZCBgU2V0dGluZ3NgIGNvbnN0cnVjdG9yIGZvcgoraW5zdGFudGlhdGluZyBuZXcgY3VzdG9tIGluc3RhbmNlcy4gSXQgbm93IGV4cGVjdHMgaW1wbGVtZW50YXRpb25zIG9mIGBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlcmAgdG8gdXNlIGEKK3RocmVlLWFyZyBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGBBdXRoZW50aWNhdG9yYCwgYEF1dGhvcml6ZXJgLCBhbmQgYFNldHRpbmdzYC4KKworPT09PT0gR3JhcGhNYW5hZ2VyIENoYW5nZXMKKworVGhlIGBiZWZvcmVRdWVyeVN0YXJ0KClgLCBgb25RdWVyeUVycm9yKClgLCBhbmQgYG9uUXVlcnlTdWNjZXNzKClgIG9mIGBHcmFwaE1hbmFnZXJgIGhhdmUgYmVlbiByZW1vdmVkLiBUaGVzZSB3ZXJlCitvcmlnaW5hbGx5IGludGVuZGVkIHRvIGdpdmUgcHJvdmlkZXJzIG1vcmUgaW5zaWdodCBpbnRvIHdoZW4gZXhlY3V0aW9uIG9jY3VycyBpbiB0aGUgc2VydmVyIGFuZCB0aGUgb3V0Y29tZSBvZiB0aGF0CitleGVjdXRpb24uIEhvd2V2ZXIsIHRoZXkgZGVwZW5kZWQgb24gYFJlcXVlc3RNZXNzYWdlYCBjb250YWluaW5nIGEgUmVxdWVzdCBJRCwgd2hpY2ggaXNuJ3QgdGhlIGNhc2UgYW55bW9yZS4KKworPT09PT0gR3JlbWxpbiBTZXJ2ZXIgVXBkYXRlcworCitUaGUgYE9wUHJvY2Vzc29yYCBleHRlbnNpb24gcG9pbnQgb2YgdGhlIHNlcnZlciBoYXMgYmVlbiByZW1vdmVkLiBJbiBvcmRlciB0byBleHRlbmQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEdyZW1saW4KK1NlcnZlciwgeW91IGhhdmUgdG8gaW1wbGVtZW50IHlvdXIgb3duIGBDaGFubmVsaXplcmAuCisKK0lmIHlvdSBhcmUgYSBwcm92aWRlciB0aGF0IG1ha2VzIHVzZSBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIsIHlvdSBtYXkgbmVlZCB0byB1cGRhdGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gWUFNTCBmaWxlcyB0aGF0Cit5b3UgcHJvdmlkZSB0byB5b3VyIHVzZXJzLiBXaXRoIHRoZSBjaGFuZ2UgZnJvbSBXZWJTb2NrZXRzIHRvIEhUVFAsIHNvbWUgb2YgdGhlIHByZXZpb3VzIGRlZmF1bHQgdmFsdWVzIGFyZSBpbnZhbGlkIGFuZAorc29tZSBvZiB0aGUgZmllbGRzIG5vIGxvbmdlciBleGlzdC4gU2VlIGxpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzQuMC4wL3JlZmVyZW5jZS8jX2NvbmZpZ3VyaW5nXzJbb3B0aW9uc10KK2ZvciBhbiB1cGRhdGVkIGxpc3QuIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgY2hhbmdlcyBpcyB0byB0aGUgYENoYW5uZWxpemVyYCBjb25maWd1cmF0aW9uIGFzIG9ubHkgdGhlCitgSHR0cENoYW5uZWxpemVyYCByZW1haW5zIGFuZCB0aGUgcmVzdCBoYXZlIGJlZW4gcmVtb3ZlZC4KKworPT09PT0gR3JlbWxpbiBTZXJ2ZXIgRGVmYXVsdCBMYW5ndWFnZQorCitgZ3JlbWxpbi1sYW5nYCBpcyBub3cgdGhlIGRlZmF1bHQgbGFuZ3VhZ2UgYW5kIHNjcmlwdCBlbmdpbmUgaW4gR3JlbWxpbi1TZXJ2ZXIsIHJlcGxhY2luZyBgZ3JlbWxpbi1ncm9vdnlgLiBVc2VycyBtYXkKK3N0aWxsIGV4cGxpY2l0bHkgc2V0IHRoZSBgbGFuZ3VhZ2VgIGZpZWxkIG9mIGEgcmVxdWVzdCBtZXNzYWdlIHRvIGAiZ3JlbWxpbi1ncm9vdnkiYCBpbiBjYXNlcyB3aGVyZSBncm9vdnkgc2NyaXB0cyBhcmUKK3JlcXVpcmVkLgorCis9PT09IEdyYXBoIERyaXZlciBQcm92aWRlcnMKKworPT09PT0gQXBwbGljYXRpb24gTGF5ZXIgUHJvdG9jb2wgU3VwcG9ydAorCitIVFRQLzEuMSBpcyBub3cgdGhlIG9ubHkgc3VwcG9ydGVkIGFwcGxpY2F0aW9uLWxheWVyIHByb3RvY29sIGFuZCBXZWJTb2NrZXRzIHN1cHBvcnQgaXMgZHJvcHBlZC4gUGxlYXNlIGZvbGxvdyB0aGUKK2luc3RydWN0aW9ucyBpbiB0aGUKK2xpbms6aHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzQuMC4wL2Rldi9wcm92aWRlci8jX2dyYXBoX2RyaXZlcl9wcm92aWRlcl9yZXF1aXJlbWVudHNbcHJvdmlkZXIgZG9jdW1lbnRhdGlvbl0KK2ZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLiBUaGUgc3VicHJvdG9jb2wgcmVtYWlucyBmYWlybHkgc2ltaWxhciBidXQgaGFzIGJlZW4gYWRqdXN0ZWQgdG8gd29yayBiZXR0ZXIgd2l0aCBIVFRQLgorQWxzbywgdGhlIG1vdmUgdG8gSFRUUCBtZWFucyB0aGF0IFNBU0wgaGFzIGJlZW4gcmVtb3ZlZCBhcyBhbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gYW5kIG9ubHkgSFRUUCBiYXNpYyByZW1haW5zLgorCis9PT09PSBSZXF1ZXN0IEludGVyY2VwdG9yCisKK0l0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgZXZlcnkgZ3JhcGggZHJpdmVyIHByb3ZpZGVyIGdpdmUgYSB3YXkgZm9yIHVzZXJzIHRvIGludGVyY2VwdCBhbmQgbW9kaWZ5IHRoZSBIVFRQCityZXF1ZXN0IGJlZm9yZSBpdCBpcyBzZW50IG9mZiB0byB0aGUgc2VydmVyLiBUaGlzIGNhcGFiaWxpdHkgaXMgbmVlZGVkIGluIGNhc2VzIHdoZXJlIHRoZSBncmFwaCBzeXN0ZW0gcHJvdmlkZXIgaGFzCithZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgdGhhdCBjYW4gYmUgZW5hYmxlZCBieSBtb2RpZnlpbmcgdGhlIEhUVFAgcmVxdWVzdC4KZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLWNhbGVuZGFyLnBuZyBiL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLWNhbGVuZGFyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWVjZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tY2FsZW5kYXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLWRlc2VyaWFsaXplZC1wb3J0YWwucG5nIGIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tZGVzZXJpYWxpemVkLXBvcnRhbC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyZjg4MQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLWRlc2VyaWFsaXplZC1wb3J0YWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLWZpbmUucG5nIGIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tZmluZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3MGQyNwotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLWZpbmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXNlcmlhbGl6ZWQtcG9ydGFsLnBuZyBiL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXNlcmlhbGl6ZWQtcG9ydGFsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODA1YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tc2VyaWFsaXplZC1wb3J0YWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXNlcmlhbGl6ZWQucG5nIGIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tc2VyaWFsaXplZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNjNjZhYgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXNlcmlhbGl6ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXNlcmlhbGl6ZWQyLnBuZyBiL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXNlcmlhbGl6ZWQyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDY3ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9zdGF0aWMvaW1hZ2VzL2dyZW1saW4tc2VyaWFsaXplZDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXN0cmluZy5wbmcgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbi1zdHJpbmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzEyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbi1zdHJpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXRhZy5wbmcgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbi10YWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTgzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbi10YWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGluLXdpdGgtY29sbGVjdGlvbi5wbmcgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbi13aXRoLWNvbGxlY3Rpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWNlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbi13aXRoLWNvbGxlY3Rpb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9ncmVtbGlucy13aWxkZXN0LWRyZWFtcy5wbmcgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbnMtd2lsZGVzdC1kcmVhbXMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzllZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3N0YXRpYy9pbWFnZXMvZ3JlbWxpbnMtd2lsZGVzdC1kcmVhbXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc3RhdGljL2ltYWdlcy9uZW80ai1oYS5wbmcgYi9kb2NzL3N0YXRpYy9pbWFnZXMvbmVvNGotaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjEzOTNjLi4wMDAwMDAwCi0tLSBhL2RvY3Mvc3RhdGljL2ltYWdlcy9uZW80ai1oYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9SRUFETUUubWQgYi9kb2NzL3VwZ3JhZGUvamF2YS9SRUFETUUubWQKaW5kZXggY2EzOTQyYi4uNTUyY2Q0YyAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvUkVBRE1FLm1kCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL1JFQURNRS5tZApAQCAtMSwyMCArMSwyMCBAQAogPCEtLQotIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIAotICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogCi0gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIHVuZGVyIHRoZSBMaWNlbnNlLgorVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KIC0tPgogIyMjIENNREIgR3JhcGggQVBJIChKYXZhLCBNaWNyb25hdXQgNCwgR3JlbWxpbiBTZXJ2ZXIpCiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL2Jpbi9ncmVtbGluLWRldi5zaCBiL2RvY3MvdXBncmFkZS9qYXZhL2Jpbi9ncmVtbGluLWRldi5zaAppbmRleCBhN2EzYTA0Li5iMGE5ZmM4IDEwMDc1NQotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9iaW4vZ3JlbWxpbi1kZXYuc2gKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvYmluL2dyZW1saW4tZGV2LnNoCkBAIC0xLDE4ICsxLDIwIEBACiAjIS91c3IvYmluL2VudiBiYXNoCi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAjCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKIHNldCAtZXVvIHBpcGVmYWlsCiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL0FwcGxpY2F0aW9uLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9BcHBsaWNhdGlvbi5qYXZhCmluZGV4IDRkYzQyZjcuLjFmZTY0NDIgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL0FwcGxpY2F0aW9uLmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvQXBwbGljYXRpb24uamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiOwogCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvQWxlcnRDb250cm9sbGVyLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvQWxlcnRDb250cm9sbGVyLmphdmEKaW5kZXggMjk1YTlhYy4uOGJlNGY1NSAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvYXBpL0FsZXJ0Q29udHJvbGxlci5qYXZhCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2FwaS9BbGVydENvbnRyb2xsZXIuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLmFwaTsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvYXBpL0RlcGxveW1lbnRDb250cm9sbGVyLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvRGVwbG95bWVudENvbnRyb2xsZXIuamF2YQppbmRleCAzYWI4ZTg1Li4xZjRiYmUwIDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvRGVwbG95bWVudENvbnRyb2xsZXIuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvRGVwbG95bWVudENvbnRyb2xsZXIuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLmFwaTsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvYXBpL0hlYWx0aENvbnRyb2xsZXIuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2FwaS9IZWFsdGhDb250cm9sbGVyLmphdmEKaW5kZXggMGRlZjkwZC4uNDM4OGMxZiAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvYXBpL0hlYWx0aENvbnRyb2xsZXIuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvSGVhbHRoQ29udHJvbGxlci5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuYXBpOwogCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvSW5jaWRlbnRDb250cm9sbGVyLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvSW5jaWRlbnRDb250cm9sbGVyLmphdmEKaW5kZXggZGEyZjk4Zi4uNjkwOWY5YiAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvYXBpL0luY2lkZW50Q29udHJvbGxlci5qYXZhCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2FwaS9JbmNpZGVudENvbnRyb2xsZXIuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLmFwaTsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvYXBpL1NlcnZpY2VDb250cm9sbGVyLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvU2VydmljZUNvbnRyb2xsZXIuamF2YQppbmRleCBkMTE5MGJkLi41YmU3MGE4IDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvU2VydmljZUNvbnRyb2xsZXIuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9hcGkvU2VydmljZUNvbnRyb2xsZXIuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLmFwaTsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvY29uZmlnL0dyZW1saW5DbGllbnRDb25maWcuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2NvbmZpZy9HcmVtbGluQ2xpZW50Q29uZmlnLmphdmEKaW5kZXggM2U1NjNkNS4uYWE5YjI4YyAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvY29uZmlnL0dyZW1saW5DbGllbnRDb25maWcuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9jb25maWcvR3JlbWxpbkNsaWVudENvbmZpZy5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuY29uZmlnOwogCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9jb25maWcvR3JlbWxpbkNsaWVudEZhY3RvcnkuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2NvbmZpZy9HcmVtbGluQ2xpZW50RmFjdG9yeS5qYXZhCmluZGV4IDZlYTVkZDYuLjIxYzFhMGMgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2NvbmZpZy9HcmVtbGluQ2xpZW50RmFjdG9yeS5qYXZhCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2NvbmZpZy9HcmVtbGluQ2xpZW50RmFjdG9yeS5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuY29uZmlnOwogCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9kb21haW4vUGF0aER0by5qYXZhIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZG9tYWluL1BhdGhEdG8uamF2YQppbmRleCA0Y2QxMDUyLi42ODZiZTVkIDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9kb21haW4vUGF0aER0by5qYXZhCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2RvbWFpbi9QYXRoRHRvLmphdmEKQEAgLTEsMTggKzEsMjAgQEAKIC8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmV4YW1wbGUuY21kYi5kb21haW47CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2Vycm9ycy9BcGlFeGNlcHRpb24uamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2Vycm9ycy9BcGlFeGNlcHRpb24uamF2YQppbmRleCAwZmFlN2Y3Li5hYjVkMmY1IDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9lcnJvcnMvQXBpRXhjZXB0aW9uLmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZXJyb3JzL0FwaUV4Y2VwdGlvbi5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuZXJyb3JzOwogCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9lcnJvcnMvRXJyb3JIYW5kbGVyLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9lcnJvcnMvRXJyb3JIYW5kbGVyLmphdmEKaW5kZXggNjMzNWY1Yy4uNzlmMmEwNSAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZXJyb3JzL0Vycm9ySGFuZGxlci5qYXZhCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2Vycm9ycy9FcnJvckhhbmRsZXIuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLmVycm9yczsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvR3JlbWxpbkdhdGV3YXkuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2dyYXBoL0dyZW1saW5HYXRld2F5LmphdmEKaW5kZXggYTlhMDc3Yi4uODVmNjBkZSAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvR3JlbWxpbkdhdGV3YXkuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9ncmFwaC9HcmVtbGluR2F0ZXdheS5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuZ3JhcGg7CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2dyYXBoL01hcHBpbmdVdGlscy5qYXZhIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvTWFwcGluZ1V0aWxzLmphdmEKaW5kZXggZmViNzA2My4uMWFhNDgxOSAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvTWFwcGluZ1V0aWxzLmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvTWFwcGluZ1V0aWxzLmphdmEKQEAgLTEsMTggKzEsMjAgQEAKIC8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmV4YW1wbGUuY21kYi5ncmFwaDsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvVHJhdmVyc2FsQnVpbGRlcnMuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2dyYXBoL1RyYXZlcnNhbEJ1aWxkZXJzLmphdmEKaW5kZXggODNmYzMzOC4uMGI4N2M3MyAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvZ3JhcGgvVHJhdmVyc2FsQnVpbGRlcnMuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9ncmFwaC9UcmF2ZXJzYWxCdWlsZGVycy5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuZ3JhcGg7CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3NlcnZpY2UvQWxlcnRTZXJ2aWNlLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9zZXJ2aWNlL0FsZXJ0U2VydmljZS5qYXZhCmluZGV4IDQ3MjkzNDkuLjIzM2VmNTcgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3NlcnZpY2UvQWxlcnRTZXJ2aWNlLmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvc2VydmljZS9BbGVydFNlcnZpY2UuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLnNlcnZpY2U7CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3NlcnZpY2UvRGVwbG95bWVudFNlcnZpY2UuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3NlcnZpY2UvRGVwbG95bWVudFNlcnZpY2UuamF2YQppbmRleCBhYTc4MDMzLi43NDM5YzBhIDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9zZXJ2aWNlL0RlcGxveW1lbnRTZXJ2aWNlLmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvc2VydmljZS9EZXBsb3ltZW50U2VydmljZS5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuc2VydmljZTsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvc2VydmljZS9JbmNpZGVudFNlcnZpY2UuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3NlcnZpY2UvSW5jaWRlbnRTZXJ2aWNlLmphdmEKaW5kZXggNWQ1NWVkMS4uZWJiNzBkNiAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvc2VydmljZS9JbmNpZGVudFNlcnZpY2UuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9zZXJ2aWNlL0luY2lkZW50U2VydmljZS5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIuc2VydmljZTsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvc2VydmljZS9TZXJ2aWNlR3JhcGhTZXJ2aWNlLmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9zZXJ2aWNlL1NlcnZpY2VHcmFwaFNlcnZpY2UuamF2YQppbmRleCBmYzQzZWYwLi4xZGFlM2Q1IDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9zZXJ2aWNlL1NlcnZpY2VHcmFwaFNlcnZpY2UuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9zZXJ2aWNlL1NlcnZpY2VHcmFwaFNlcnZpY2UuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLnNlcnZpY2U7CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCmluZGV4IDE4OWVkNDEuLjUxNTU3NmMgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbApAQCAtMSwxNyArMSwxOSBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0jIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogIwotIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgogbWljcm9uYXV0OgogICBhcHBsaWNhdGlvbjoKICAgICBuYW1lOiBjbWRiLWdyYXBoLWFwaQpkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvaXQvRGF0YUxvYWRlci5qYXZhIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvaXQvRGF0YUxvYWRlci5qYXZhCmluZGV4IGQ1NTdlYmEuLmUwYWUyNjMgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL2l0L0RhdGFMb2FkZXIuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9pdC9EYXRhTG9hZGVyLmphdmEKQEAgLTEsMTggKzEsMjAgQEAKIC8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAqIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotICogdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSAqICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmV4YW1wbGUuY21kYi5pdDsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvaXQvU2VydmljZUlULmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9pdC9TZXJ2aWNlSVQuamF2YQppbmRleCAxYzcwNTI5Li42NzBkMjU0IDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9pdC9TZXJ2aWNlSVQuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi9pdC9TZXJ2aWNlSVQuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLml0OwogCmRpZmYgLS1naXQgYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0FsZXJ0U2VydmljZVRlc3QuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvQWxlcnRTZXJ2aWNlVGVzdC5qYXZhCmluZGV4IDkxODEwYWQuLjE2MjE4ZWYgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvQWxlcnRTZXJ2aWNlVGVzdC5qYXZhCisrKyBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvQWxlcnRTZXJ2aWNlVGVzdC5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIudW5pdDsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvdW5pdC9EZXBsb3ltZW50U2VydmljZVRlc3QuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvRGVwbG95bWVudFNlcnZpY2VUZXN0LmphdmEKaW5kZXggNmUzNjZiNi4uYmExNDRlNCAxMDA2NDQKLS0tIGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvdW5pdC9EZXBsb3ltZW50U2VydmljZVRlc3QuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0RlcGxveW1lbnRTZXJ2aWNlVGVzdC5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIudW5pdDsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvdW5pdC9FcnJvckhhbmRsZXJUZXN0LmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0Vycm9ySGFuZGxlclRlc3QuamF2YQppbmRleCBhMThmOGU2Li44ZWZmNDc0IDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0Vycm9ySGFuZGxlclRlc3QuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0Vycm9ySGFuZGxlclRlc3QuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLnVuaXQ7CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvSGVhbHRoQ29udHJvbGxlclRlc3QuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvSGVhbHRoQ29udHJvbGxlclRlc3QuamF2YQppbmRleCBjNTUyMDBmLi4xMzBiMmNkIDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0hlYWx0aENvbnRyb2xsZXJUZXN0LmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvdW5pdC9IZWFsdGhDb250cm9sbGVyVGVzdC5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIudW5pdDsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvdW5pdC9JbmNpZGVudFNlcnZpY2VUZXN0LmphdmEgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0luY2lkZW50U2VydmljZVRlc3QuamF2YQppbmRleCA5MDFjNTIwLi5hOGQwMGRjIDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0luY2lkZW50U2VydmljZVRlc3QuamF2YQorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L0luY2lkZW50U2VydmljZVRlc3QuamF2YQpAQCAtMSwxOCArMSwyMCBAQAogLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi0gKiB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0gKiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotICogKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLSAqIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZXhhbXBsZS5jbWRiLnVuaXQ7CiAKZGlmZiAtLWdpdCBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvU2VydmljZUdyYXBoU2VydmljZVRlc3QuamF2YSBiL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZXhhbXBsZS9jbWRiL3VuaXQvU2VydmljZUdyYXBoU2VydmljZVRlc3QuamF2YQppbmRleCBjNTY1MjQ3Li40MTcyNjI2IDEwMDY0NAotLS0gYS9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2V4YW1wbGUvY21kYi91bml0L1NlcnZpY2VHcmFwaFNlcnZpY2VUZXN0LmphdmEKKysrIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9leGFtcGxlL2NtZGIvdW5pdC9TZXJ2aWNlR3JhcGhTZXJ2aWNlVGVzdC5qYXZhCkBAIC0xLDE4ICsxLDIwIEBACiAvKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLSAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0gKiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5leGFtcGxlLmNtZGIudW5pdDsKIApkaWZmIC0tZ2l0IGEvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvcmVzb3VyY2VzL2FwcGxpY2F0aW9uLXRlc3QueW1sIGIvZG9jcy91cGdyYWRlL2phdmEvc3JjL3Rlc3QvcmVzb3VyY2VzL2FwcGxpY2F0aW9uLXRlc3QueW1sCmluZGV4IGZkNjJiNTYuLmYxNmE2YjAgMTAwNjQ0Ci0tLSBhL2RvY3MvdXBncmFkZS9qYXZhL3NyYy90ZXN0L3Jlc291cmNlcy9hcHBsaWNhdGlvbi10ZXN0LnltbAorKysgYi9kb2NzL3VwZ3JhZGUvamF2YS9zcmMvdGVzdC9yZXNvdXJjZXMvYXBwbGljYXRpb24tdGVzdC55bWwKQEAgLTEsMTcgKzEsMTkgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0jIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi0jIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0jICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0jIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICMKLSMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KIG1pY3JvbmF1dDoKICAgYXBwbGljYXRpb246CiAgICAgbmFtZTogY21kYi1ncmFwaC1hcGktdGVzdApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hbm5vdGF0aW9ucy9wb20ueG1sIGIvZ3JlbWxpbi1hbm5vdGF0aW9ucy9wb20ueG1sCmluZGV4IDY1MGUxNTEuLjhhMWE4MzIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tYW5ub3RhdGlvbnMvcG9tLnhtbAorKysgYi9ncmVtbGluLWFubm90YXRpb25zL3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJwb3A8L2FydGlmYWN0SWQ+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAKICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgpAQCAtNTQsNTEgKzU0LDIzIEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tb2NraXRvLWNvcmU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPCEtLSBzdGFydDogY29tcGlsZS10ZXN0aW5nIGJsb2NrIC0gd2l0aCBjb25mbGljdCByZXNvbHV0aW9uLCBzZWUgcm9vdCBwb20ueG1sIGRlcGVuZGVuY3ktbWFuYWdlbWVudCAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLnRlc3RpbmcuY29tcGlsZTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbXBpbGUtdGVzdGluZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjAuMTk8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmd1YXZhPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ndWF2YTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmVycm9ycHJvbmU8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmVycm9yX3Byb25lX2Fubm90YXRpb25zPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jaGVja2VyZnJhbWV3b3JrPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jaGVja2VyLXF1YWw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPCEtLSByZXNvbHZlIHNlbGYtY29uZmxpY3Qgd2l0aGluIGNvbXBpbGUtdGVzdGluZyAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmd1YXZhPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3VhdmE8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zMS4xLWpyZTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuZXJyb3Jwcm9uZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXJyb3JfcHJvbmVfYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmVycm9ycHJvbmU8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5lcnJvcl9wcm9uZV9hbm5vdGF0aW9uczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4wPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dG9vbHM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5zdW48L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPCEtLSBlbmQ6IGNvbXBpbGUtdGVzdGluZyBibG9jayAtLT4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8YnVpbGQ+CiAgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS90YXJnZXQ8L2RpcmVjdG9yeT4KZGlmZiAtLWdpdCBhL2dyZW1saW4tYW5ub3RhdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9HcmVtbGluRHNsUHJvY2Vzc29yLmphdmEgYi9ncmVtbGluLWFubm90YXRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvR3JlbWxpbkRzbFByb2Nlc3Nvci5qYXZhCmluZGV4IGI1YmI2ZGMuLjY4MWEzMDEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tYW5ub3RhdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9HcmVtbGluRHNsUHJvY2Vzc29yLmphdmEKKysrIGIvZ3JlbWxpbi1hbm5vdGF0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL0dyZW1saW5Ec2xQcm9jZXNzb3IuamF2YQpAQCAtMjczLDcgKzI3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIC5hZGRNb2RpZmllcnMoTW9kaWZpZXIuUFVCTElDKQogICAgICAgICAgICAgICAgICAgICAuYWRkQW5ub3RhdGlvbihPdmVycmlkZS5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiJE4gY2xvbmUgPSB0aGlzLmNsb25lKCkiLCBjdHgudHJhdmVyc2FsU291cmNlQ2xhenopCi0gICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoImNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU3RlcCgkVC5hZGRWKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoImNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcCgkVC5hZGRWKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIHRyYXZlcnNhbCA9IG5ldyAkTihjbG9uZSkiLCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6LCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6KQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJyZXR1cm4gKCRUKSB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3ICRUKHRyYXZlcnNhbCwgKFN0cmluZykgbnVsbCkpIiwgY3R4LnRyYXZlcnNhbENsYXNzTmFtZSwgQWRkVmVydGV4U3RhcnRTdGVwLmNsYXNzKQogICAgICAgICAgICAgICAgICAgICAucmV0dXJucyhQYXJhbWV0ZXJpemVkVHlwZU5hbWUuZ2V0KGN0eC50cmF2ZXJzYWxDbGFzc05hbWUsIENsYXNzTmFtZS5nZXQoVmVydGV4LmNsYXNzKSwgQ2xhc3NOYW1lLmdldChWZXJ0ZXguY2xhc3MpKSkKQEAgLTI4Myw3ICsyODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAuYWRkQW5ub3RhdGlvbihPdmVycmlkZS5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLmFkZFBhcmFtZXRlcihTdHJpbmcuY2xhc3MsICJsYWJlbCIpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIGNsb25lID0gdGhpcy5jbG9uZSgpIiwgY3R4LnRyYXZlcnNhbFNvdXJjZUNsYXp6KQotICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJjbG9uZS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoJFQuYWRkViwgbGFiZWwpIiwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jbGFzcykKKyAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKCRULmFkZFYsIGxhYmVsKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIHRyYXZlcnNhbCA9IG5ldyAkTihjbG9uZSkiLCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6LCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6KQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJyZXR1cm4gKCRUKSB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3ICRUKHRyYXZlcnNhbCwgbGFiZWwpKSIsIGN0eC50cmF2ZXJzYWxDbGFzc05hbWUsIEFkZFZlcnRleFN0YXJ0U3RlcC5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLnJldHVybnMoUGFyYW1ldGVyaXplZFR5cGVOYW1lLmdldChjdHgudHJhdmVyc2FsQ2xhc3NOYW1lLCBDbGFzc05hbWUuZ2V0KFZlcnRleC5jbGFzcyksIENsYXNzTmFtZS5nZXQoVmVydGV4LmNsYXNzKSkpCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLmFkZEFubm90YXRpb24oT3ZlcnJpZGUuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRQYXJhbWV0ZXIoVHJhdmVyc2FsLmNsYXNzLCAidmVydGV4TGFiZWxUcmF2ZXJzYWwiKQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCIkTiBjbG9uZSA9IHRoaXMuY2xvbmUoKSIsIGN0eC50cmF2ZXJzYWxTb3VyY2VDbGF6eikKLSAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKCRULmFkZFYsIHZlcnRleExhYmVsVHJhdmVyc2FsKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoImNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcCgkVC5hZGRWLCB2ZXJ0ZXhMYWJlbFRyYXZlcnNhbCkiLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNsYXNzKQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCIkTiB0cmF2ZXJzYWwgPSBuZXcgJE4oY2xvbmUpIiwgY3R4LmRlZmF1bHRUcmF2ZXJzYWxDbGF6eiwgY3R4LmRlZmF1bHRUcmF2ZXJzYWxDbGF6eikKICAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgicmV0dXJuICgkVCkgdHJhdmVyc2FsLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyAkVCh0cmF2ZXJzYWwsIHZlcnRleExhYmVsVHJhdmVyc2FsKSkiLCBjdHgudHJhdmVyc2FsQ2xhc3NOYW1lLCBBZGRWZXJ0ZXhTdGFydFN0ZXAuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5yZXR1cm5zKFBhcmFtZXRlcml6ZWRUeXBlTmFtZS5nZXQoY3R4LnRyYXZlcnNhbENsYXNzTmFtZSwgQ2xhc3NOYW1lLmdldChWZXJ0ZXguY2xhc3MpLCBDbGFzc05hbWUuZ2V0KFZlcnRleC5jbGFzcykpKQpAQCAtMzAzLDcgKzMwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIC5hZGRBbm5vdGF0aW9uKE92ZXJyaWRlLmNsYXNzKQogICAgICAgICAgICAgICAgICAgICAuYWRkUGFyYW1ldGVyKFN0cmluZy5jbGFzcywgImxhYmVsIikKICAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiJE4gY2xvbmUgPSB0aGlzLmNsb25lKCkiLCBjdHgudHJhdmVyc2FsU291cmNlQ2xhenopCi0gICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoImNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU3RlcCgkVC5hZGRFLCBsYWJlbCkiLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNsYXNzKQorICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJjbG9uZS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoJFQuYWRkRSwgbGFiZWwpIiwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiJE4gdHJhdmVyc2FsID0gbmV3ICROKGNsb25lKSIsIGN0eC5kZWZhdWx0VHJhdmVyc2FsQ2xhenosIGN0eC5kZWZhdWx0VHJhdmVyc2FsQ2xhenopCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoInJldHVybiAoJFQpIHRyYXZlcnNhbC5hc0FkbWluKCkuYWRkU3RlcChuZXcgJFQodHJhdmVyc2FsLCBsYWJlbCkpIiwgY3R4LnRyYXZlcnNhbENsYXNzTmFtZSwgQWRkRWRnZVN0YXJ0U3RlcC5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLnJldHVybnMoUGFyYW1ldGVyaXplZFR5cGVOYW1lLmdldChjdHgudHJhdmVyc2FsQ2xhc3NOYW1lLCBDbGFzc05hbWUuZ2V0KEVkZ2UuY2xhc3MpLCBDbGFzc05hbWUuZ2V0KEVkZ2UuY2xhc3MpKSkKQEAgLTMxMyw3ICszMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAuYWRkQW5ub3RhdGlvbihPdmVycmlkZS5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLmFkZFBhcmFtZXRlcihUcmF2ZXJzYWwuY2xhc3MsICJlZGdlTGFiZWxUcmF2ZXJzYWwiKQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCIkTiBjbG9uZSA9IHRoaXMuY2xvbmUoKSIsIGN0eC50cmF2ZXJzYWxTb3VyY2VDbGF6eikKLSAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKCRULmFkZEUsIGVkZ2VMYWJlbFRyYXZlcnNhbCkiLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNsYXNzKQorICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJjbG9uZS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoJFQuYWRkRSwgZWRnZUxhYmVsVHJhdmVyc2FsKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIHRyYXZlcnNhbCA9IG5ldyAkTihjbG9uZSkiLCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6LCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6KQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJyZXR1cm4gKCRUKSB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3ICRUKHRyYXZlcnNhbCwgZWRnZUxhYmVsVHJhdmVyc2FsKSkiLCBjdHgudHJhdmVyc2FsQ2xhc3NOYW1lLCBBZGRFZGdlU3RhcnRTdGVwLmNsYXNzKQogICAgICAgICAgICAgICAgICAgICAucmV0dXJucyhQYXJhbWV0ZXJpemVkVHlwZU5hbWUuZ2V0KGN0eC50cmF2ZXJzYWxDbGFzc05hbWUsIENsYXNzTmFtZS5nZXQoRWRnZS5jbGFzcyksIENsYXNzTmFtZS5nZXQoRWRnZS5jbGFzcykpKQpAQCAtMzI0LDcgKzMyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC5hZGRQYXJhbWV0ZXIoT2JqZWN0W10uY2xhc3MsICJ2ZXJ0ZXhJZHMiKQogICAgICAgICAgICAgICAgICAgICAudmFyYXJncyh0cnVlKQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCIkTiBjbG9uZSA9IHRoaXMuY2xvbmUoKSIsIGN0eC50cmF2ZXJzYWxTb3VyY2VDbGF6eikKLSAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKCRULlYsIHZlcnRleElkcykiLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNsYXNzKQorICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJjbG9uZS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoJFQuViwgdmVydGV4SWRzKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIHRyYXZlcnNhbCA9IG5ldyAkTihjbG9uZSkiLCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6LCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6KQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJyZXR1cm4gKCRUKSB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3ICRUKHRyYXZlcnNhbCwgJFQuY2xhc3MsIHRydWUsIHZlcnRleElkcykpIiwgY3R4LnRyYXZlcnNhbENsYXNzTmFtZSwgR3JhcGhTdGVwLmNsYXNzLCBWZXJ0ZXguY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5yZXR1cm5zKFBhcmFtZXRlcml6ZWRUeXBlTmFtZS5nZXQoY3R4LnRyYXZlcnNhbENsYXNzTmFtZSwgQ2xhc3NOYW1lLmdldChWZXJ0ZXguY2xhc3MpLCBDbGFzc05hbWUuZ2V0KFZlcnRleC5jbGFzcykpKQpAQCAtMzM1LDcgKzMzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC5hZGRQYXJhbWV0ZXIoT2JqZWN0W10uY2xhc3MsICJlZGdlSWRzIikKICAgICAgICAgICAgICAgICAgICAgLnZhcmFyZ3ModHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiJE4gY2xvbmUgPSB0aGlzLmNsb25lKCkiLCBjdHgudHJhdmVyc2FsU291cmNlQ2xhenopCi0gICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoImNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU3RlcCgkVC5FLCBlZGdlSWRzKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoImNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcCgkVC5FLCBlZGdlSWRzKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIHRyYXZlcnNhbCA9IG5ldyAkTihjbG9uZSkiLCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6LCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6KQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJyZXR1cm4gKCRUKSB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3ICRUKHRyYXZlcnNhbCwgJFQuY2xhc3MsIHRydWUsIGVkZ2VJZHMpKSIsIGN0eC50cmF2ZXJzYWxDbGFzc05hbWUsIEdyYXBoU3RlcC5jbGFzcywgRWRnZS5jbGFzcykKICAgICAgICAgICAgICAgICAgICAgLnJldHVybnMoUGFyYW1ldGVyaXplZFR5cGVOYW1lLmdldChjdHgudHJhdmVyc2FsQ2xhc3NOYW1lLCBDbGFzc05hbWUuZ2V0KEVkZ2UuY2xhc3MpLCBDbGFzc05hbWUuZ2V0KEVkZ2UuY2xhc3MpKSkKQEAgLTM0Nyw3ICszNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICAudmFyYXJncyh0cnVlKQogICAgICAgICAgICAgICAgICAgICAuYWRkVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZU5hbWUuZ2V0KCJTIikpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIGNsb25lID0gdGhpcy5jbG9uZSgpIiwgY3R4LnRyYXZlcnNhbFNvdXJjZUNsYXp6KQotICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJjbG9uZS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoJFQuaW5qZWN0LCBzdGFydHMpIiwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jbGFzcykKKyAgICAgICAgICAgICAgICAgICAgLmFkZFN0YXRlbWVudCgiY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKCRULmluamVjdCwgc3RhcnRzKSIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2xhc3MpCiAgICAgICAgICAgICAgICAgICAgIC5hZGRTdGF0ZW1lbnQoIiROIHRyYXZlcnNhbCA9IG5ldyAkTihjbG9uZSkiLCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6LCBjdHguZGVmYXVsdFRyYXZlcnNhbENsYXp6KQogICAgICAgICAgICAgICAgICAgICAuYWRkU3RhdGVtZW50KCJyZXR1cm4gKCRUKSB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3ICRUKHRyYXZlcnNhbCwgc3RhcnRzKSkiLCBjdHgudHJhdmVyc2FsQ2xhc3NOYW1lLCBJbmplY3RTdGVwLmNsYXNzKQogICAgICAgICAgICAgICAgICAgICAucmV0dXJucyhQYXJhbWV0ZXJpemVkVHlwZU5hbWUuZ2V0KGN0eC50cmF2ZXJzYWxDbGFzc05hbWUsIFR5cGVWYXJpYWJsZU5hbWUuZ2V0KCJTIiksIFR5cGVWYXJpYWJsZU5hbWUuZ2V0KCJTIikpKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hbm5vdGF0aW9ucy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL1NvY2lhbFBhY2thZ2VUcmF2ZXJzYWxTb3VyY2VEc2wuamF2YSBiL2dyZW1saW4tYW5ub3RhdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9Tb2NpYWxQYWNrYWdlVHJhdmVyc2FsU291cmNlRHNsLmphdmEKaW5kZXggZTM4YTU0MC4uYmYxN2U5ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1hbm5vdGF0aW9ucy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL1NvY2lhbFBhY2thZ2VUcmF2ZXJzYWxTb3VyY2VEc2wuamF2YQorKysgYi9ncmVtbGluLWFubm90YXRpb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvU29jaWFsUGFja2FnZVRyYXZlcnNhbFNvdXJjZURzbC5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBwZXJzb25zKFN0cmluZy4uLiBuYW1lcykgewogICAgICAgICBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKIAotICAgICAgICBjbG9uZS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5WKTsKKyAgICAgICAgY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuVik7CiAgICAgICAgIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICB0cmF2ZXJzYWwuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEdyYXBoU3RlcDw+KHRyYXZlcnNhbC5hc0FkbWluKCksIFZlcnRleC5jbGFzcywgdHJ1ZSkpOwogCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvcG9tLnhtbCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTk4OTM4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi1jb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLXRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLVRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0odGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWFyY2hldHlwZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWFyY2hldHlwZS1kc2w8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBBcmNoZXR5cGUgLSBEU0w8L25hbWU+Ci0gICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KLQotICAgIDxidWlsZD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLQotICAgICAgICA8IS0tIGFwcGx5IHZhcmlhYmxlIHN1YnN0aXR1dGlvbiBvbiB0aGUgZm9sbG93aW5nIGZpbGVzIHVzaW5nIHZhcmlhYmxlcyBmcm9tIHRoaXMgcG9tIC0tPgotICAgICAgICA8cmVzb3VyY2VzPgotICAgICAgICAgICAgPHJlc291cmNlPgotICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vcmVzb3VyY2VzPC9kaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgPGZpbHRlcmluZz50cnVlPC9maWx0ZXJpbmc+Ci0gICAgICAgICAgICAgICAgPGluY2x1ZGVzPgotICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWw8L2luY2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPmFyY2hldHlwZS1yZXNvdXJjZXMvUkVBRE1FLmFzY2lpZG9jPC9pbmNsdWRlPgotICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+Ci0gICAgICAgICAgICA8L3Jlc291cmNlPgotICAgICAgICAgICAgPHJlc291cmNlPgotICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vcmVzb3VyY2VzPC9kaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgPGZpbHRlcmluZz5mYWxzZTwvZmlsdGVyaW5nPgotICAgICAgICAgICAgICAgIDxleGNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+YXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sPC9leGNsdWRlPgotICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5hcmNoZXR5cGUtcmVzb3VyY2VzL1JFQURNRS5hc2NpaWRvYzwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgotICAgICAgICAgICAgPC9yZXNvdXJjZT4KLSAgICAgICAgPC9yZXNvdXJjZXM+Ci0gICAgPC9idWlsZD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1OWVlMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPGFyY2hldHlwZS1kZXNjcmlwdG9yIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvcGx1Z2lucy9tYXZlbi1hcmNoZXR5cGUtcGx1Z2luL2FyY2hldHlwZS1kZXNjcmlwdG9yLzEuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9hcmNoZXR5cGUtZGVzY3JpcHRvci0xLjAuMC54c2QiIG5hbWU9ImdyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoIgotICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9wbHVnaW5zL21hdmVuLWFyY2hldHlwZS1wbHVnaW4vYXJjaGV0eXBlLWRlc2NyaXB0b3IvMS4wLjAiCi0gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gICAgPGZpbGVTZXRzPgotICAgICAgICA8ZmlsZVNldCBmaWx0ZXJlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZGlyZWN0b3J5PjwvZGlyZWN0b3J5PgotICAgICAgICAgICAgPGluY2x1ZGVzPgotICAgICAgICAgICAgICAgIDxpbmNsdWRlPlJFQURNRS5hc2NpaWRvYzwvaW5jbHVkZT4KLSAgICAgICAgICAgIDwvaW5jbHVkZXM+Ci0gICAgICAgICAgICA8ZXhjbHVkZXM+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi54bWw8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICA8L2V4Y2x1ZGVzPgotICAgICAgICA8L2ZpbGVTZXQ+Ci0gICAgICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIiBwYWNrYWdlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL2phdmE8L2RpcmVjdG9yeT4KLSAgICAgICAgPC9maWxlU2V0PgotICAgICAgICA8ZmlsZVNldCBmaWx0ZXJlZD0idHJ1ZSIgcGFja2FnZWQ9InRydWUiPgotICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvdGVzdC9qYXZhPC9kaXJlY3Rvcnk+Ci0gICAgICAgIDwvZmlsZVNldD4KLSAgICA8L2ZpbGVTZXRzPgotCi08L2FyY2hldHlwZS1kZXNjcmlwdG9yPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9SRUFETUUuYXNjaWlkb2MgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvUkVBRE1FLmFzY2lpZG9jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzVhMjVmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9SRUFETUUuYXNjaWlkb2MKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vLy8vCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0vLy8vCi09IEdyZW1saW4gRFNMCi0KLVRoaXMgaXMgYSBzdGFydGVyIHByb2plY3QgdGhhdCBkZW1vbnN0cmF0ZXMgaG93IGEgYmFzaWMKLWxpbms6aHR0cDovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvJHtwcm9qZWN0LnZlcnNpb259L3JlZmVyZW5jZS8jZHNsW0RvbWFpbiBTcGVjaWZpYyBMYW5ndWFnZV0gKERTTCkgcHJvamVjdCBpcwotc3RydWN0dXJlZCB3aXRoIEphdmEgYW5kIE1hdmVuLiBUaGUgRFNMIGlzIGJ1aWx0IHRvIHdvcmsgd2l0aCB0aGUgVGlua2VyUG9wICJtb2Rlcm4iIHRveSBncmFwaC4gUGxlYXNlIHNlZSB0aGUgdW5pdAotdGVzdHMgaW4gYFNvY2lhbERzbFRlc3RgIGZvciBhY3R1YWwgRFNMIHVzYWdlLgotCi09PSBQcmVyZXF1aXNpdGVzCi0KLSogSmF2YSAxMQotKiBsaW5rOmh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy9bTWF2ZW4gMy4zK10KLQotPT0gQnVpbGRpbmcgYW5kIFJ1bm5pbmcKLQotW3NvdXJjZSx0ZXh0XQotbXZuIGNsZWFuIGluc3RhbGwKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sIGIvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMDc4Y2UuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPGdyb3VwSWQ+JHtncm91cElkfTwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5cJHthcnRpZmFjdElkfTwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4ke3ZlcnNpb259PC92ZXJzaW9uPgotCi0gICAgPG5hbWU+U29jaWFsIERTTDogTW9kZXJuIEdyYXBoPC9uYW1lPgotCi0gICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KLSAgICA8cHJvcGVydGllcz4KLSAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+Ci0gICAgPC9wcm9wZXJ0aWVzPgotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJncmFwaC1ncmVtbGluPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICAgICAgPG9wdGlvbmFsPnRydWU8L29wdGlvbmFsPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLmxvZ2JhY2s8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5sb2diYWNrLWNsYXNzaWM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4ke2xvZ2JhY2sudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtqdW5pdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxidWlsZD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+My4xNC4wPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8cmVsZWFzZT44PC9yZWxlYXNlPgotICAgICAgICAgICAgICAgICAgICA8c291cmNlPjg8L3NvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgPHRhcmdldD44PC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjb21waWxlckFyZ3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJnPi1wYXJhbWV0ZXJzPC9hcmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvY29tcGlsZXJBcmdzPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9Tb2NpYWxUcmF2ZXJzYWxEc2wuamF2YSBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL1NvY2lhbFRyYXZlcnNhbERzbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGQ0OGJjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL1NvY2lhbFRyYXZlcnNhbERzbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlICR7cGFja2FnZX07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5HcmVtbGluRHNsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLkdyZW1saW5Ec2wuQW5vbnltb3VzTWV0aG9kOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci0KLS8qKgotICogVGhpcyBTb2NpYWwgRFNMIGlzIG1lYW50IHRvIGJlIHVzZWQgd2l0aCB0aGUgVGlua2VyUG9wICJtb2Rlcm4iIHRveSBncmFwaC4KLSAqIDxwLz4KLSAqIEFsbCBEU0xzIHNob3VsZCBleHRlbmQge0Bjb2RlIEdyYXBoVHJhdmVyc2FsLkFkbWlufSBhbmQgYmUgc3VmZml4ZWQgd2l0aCAiVHJhdmVyc2FsRHNsIi4gU2ltcGx5IGFkZCBEU0wgdHJhdmVyc2FsCi0gKiBtZXRob2RzIHRvIHRoaXMgaW50ZXJmYWNlLiBVc2UgR3JlbWxpbidzIHN0ZXBzIHRvIGJ1aWxkIHRoZSB1bmRlcmx5aW5nIHRyYXZlcnNhbCBpbiB0aGVzZSBtZXRob2RzIHRvIGVuc3VyZQotICogY29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBUaW5rZXJQb3Agc3RhY2sgYW5kIHByb3ZpZGVyIGltcGxlbWVudGF0aW9ucy4KLSAqIDxwLz4KLSAqIEFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUge0Bjb2RlIEdyZW1saW5Ec2x9IGFubm90YXRpb24gYXJlIGFsbCBvcHRpb25hbC4gSW4gdGhpcyBjYXNlLCBhIHtAY29kZSB0cmF2ZXJzYWxTb3VyY2V9IGlzCi0gKiBzcGVjaWZpZWQgd2hpY2ggcG9pbnRzIHRvIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gdG8gdXNlLiBIYWQgdGhhdCBhcmd1bWVudCBub3QgYmVlbiBzcGVjaWZpZWQgdGhlbiBhIGRlZmF1bHQKLSAqIHtAY29kZSBUcmF2ZXJzYWxTb3VyY2V9IHdvdWxkIGhhdmUgYmVlbiBnZW5lcmF0ZWQuCi0gKi8KLUBHcmVtbGluRHNsKHRyYXZlcnNhbFNvdXJjZSA9ICIke3BhY2thZ2V9LlNvY2lhbFRyYXZlcnNhbFNvdXJjZURzbCIpCi1wdWJsaWMgaW50ZXJmYWNlIFNvY2lhbFRyYXZlcnNhbERzbDxTLCBFPiBleHRlbmRzIEdyYXBoVHJhdmVyc2FsLkFkbWluPFMsIEU+IHsKLQotICAgIC8qKgotICAgICAqIEZyb20gYSB7QGNvZGUgVmVydGV4fSB0cmF2ZXJzZSAia25vd3MiIGVkZ2VzIHRvIGFkamFjZW50ICJwZXJzb24iIHZlcnRpY2VzIGFuZCBmaWx0ZXIgdGhvc2UgdmVydGljZXMgb24gdGhlCi0gICAgICogIm5hbWUiIHByb3BlcnR5LgotICAgICAqCi0gICAgICogQHBhcmFtIHBlcnNvbk5hbWUgdGhlIG5hbWUgb2YgdGhlIHBlcnNvbiB0byBmaWx0ZXIgb24KLSAgICAgKi8KLSAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IGtub3dzKFN0cmluZyBwZXJzb25OYW1lKSB7Ci0gICAgICAgIHJldHVybiAoKFNvY2lhbFRyYXZlcnNhbERzbCkgb3V0KCJrbm93cyIpKS5wZXJzb24oKS5oYXMoIm5hbWUiLCBwZXJzb25OYW1lKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGcm9tIGEge0Bjb2RlIFZlcnRleH0gdHJhdmVyc2UgImtub3dzIiBlZGdlcyB0byBhZGphY2VudCAicGVyc29uIiB2ZXJ0aWNlcyBhbmQgZGV0ZXJtaW5lIHRoZSB5b3VuZ2VzdCBhZ2Ugb2YKLSAgICAgKiB0aG9zZSBwZXJzb25zLgotICAgICAqLwotICAgIHB1YmxpYyBkZWZhdWx0IDxFMiBleHRlbmRzIE51bWJlcj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHlvdW5nZXN0RnJpZW5kc0FnZSgpIHsKLSAgICAgICAgcmV0dXJuICgoU29jaWFsVHJhdmVyc2FsRHNsKSBvdXQoImtub3dzIikpLnBlcnNvbigpLnZhbHVlcygiYWdlIikubWluKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIGZpbHRlciBmb3IgInBlcnNvbiIgdmVydGljZXMgYmFzZWQgb24gdGhlIG51bWJlciBvZiAiY3JlYXRlZCIgZWRnZXMgZW5jb3VudGVyZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbnVtYmVyIHRoZSBtaW5pbXVtIG51bWJlciBvZiBwcm9qZWN0cyBhIHBlcnNvbiBjcmVhdGVkCi0gICAgICovCi0gICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgTG9uZz4gY3JlYXRlZEF0TGVhc3QoaW50IG51bWJlcikgewotICAgICAgICByZXR1cm4gb3V0RSgiY3JlYXRlZCIpLmNvdW50KCkuaXMoUC5ndGUobnVtYmVyKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmlsdGVycyBvYmplY3RzIGJ5IHRoZSAicGVyc29uIiBsYWJlbC4gVGhpcyBzdGVwIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBpbmNvbWluZyB2ZXJ0aWNlcy4KLSAgICAgKi8KLSAgICBAR3JlbWxpbkRzbC5Bbm9ueW1vdXNNZXRob2QocmV0dXJuVHlwZVBhcmFtZXRlcnMgPSB7IkEiLCAiQSJ9LCBtZXRob2RUeXBlUGFyYW1ldGVycyA9IHsiQSJ9KQotICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHBlcnNvbigpIHsKLSAgICAgICAgcmV0dXJuIGhhc0xhYmVsKCJwZXJzb24iKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9Tb2NpYWxUcmF2ZXJzYWxTb3VyY2VEc2wuamF2YSBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL1NvY2lhbFRyYXZlcnNhbFNvdXJjZURzbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGQxYjhhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL1NvY2lhbFRyYXZlcnNhbFNvdXJjZURzbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlICR7cGFja2FnZX07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLlJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5HcmVtbGluRHNsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkRlZmF1bHRHcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5IYXNDb250YWluZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLQotLyoqCi0gKiBTZWUge0Bjb2RlIFNvY2lhbFRyYXZlcnNhbERzbH0gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBEU0wuCi0gKi8KLXB1YmxpYyBjbGFzcyBTb2NpYWxUcmF2ZXJzYWxTb3VyY2VEc2wgZXh0ZW5kcyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7Ci0KLSAgICBwdWJsaWMgU29jaWFsVHJhdmVyc2FsU291cmNlRHNsKGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHRyYXZlcnNhbFN0cmF0ZWdpZXMpIHsKLSAgICAgICAgc3VwZXIoZ3JhcGgsIHRyYXZlcnNhbFN0cmF0ZWdpZXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBTb2NpYWxUcmF2ZXJzYWxTb3VyY2VEc2woZmluYWwgR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgc3VwZXIoZ3JhcGgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTb2NpYWxUcmF2ZXJzYWxTb3VyY2VEc2woZmluYWwgUmVtb3RlQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7Ci0gICAgICAgIHN1cGVyKGNvbm5lY3Rpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0cyBhIHRyYXZlcnNhbCB0aGF0IGZpbmRzIGFsbCB2ZXJ0aWNlcyB3aXRoIGEgInBlcnNvbiIgbGFiZWwgYW5kIG9wdGlvbmFsbHkgYWxsb3dzIGZpbHRlcmluZyBvZiB0aG9zZQotICAgICAqIHZlcnRpY2VzIG9uIHRoZSAibmFtZSIgcHJvcGVydHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZXMgbGlzdCBvZiBwZXJzb24gbmFtZXMgdG8gZmlsdGVyIG9uCi0gICAgICovCi0gICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBwZXJzb25zKFN0cmluZy4uLiBuYW1lcykgewotICAgICAgICBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLQotICAgICAgICAvLyBNYW51YWxseSBhZGQgYSAic3RhcnQiIHN0ZXAgZm9yIHRoZSB0cmF2ZXJzYWwgaW4gdGhpcyBjYXNlIHRoZSBlcXVpdmFsZW50IG9mIFYoKS4gR3JhcGhTdGVwIGlzIG1hcmtlZAotICAgICAgICAvLyBhcyBhICJzdGFydCIgc3RlcCBieSBwYXNzaW5nICJ0cnVlIiBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAgICAgIGNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLlYpOwotICAgICAgICBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKLSAgICAgICAgdHJhdmVyc2FsLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBHcmFwaFN0ZXA8Pih0cmF2ZXJzYWwuYXNBZG1pbigpLCBWZXJ0ZXguY2xhc3MsIHRydWUpKTsKLQotICAgICAgICB0cmF2ZXJzYWwgPSB0cmF2ZXJzYWwuaGFzTGFiZWwoInBlcnNvbiIpOwotICAgICAgICBpZiAobmFtZXMubGVuZ3RoID4gMCkgdHJhdmVyc2FsID0gdHJhdmVyc2FsLmhhcygibmFtZSIsIFAud2l0aGluKG5hbWVzKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS9Tb2NpYWxEc2xUZXN0LmphdmEgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1kc2wvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS9Tb2NpYWxEc2xUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNzBlMGIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L2phdmEvU29jaWFsRHNsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlICR7cGFja2FnZX07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUuRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5OwotCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi1wdWJsaWMgY2xhc3MgU29jaWFsRHNsVGVzdCB7Ci0KLSAgICBwcml2YXRlIEdyYXBoIGdyYXBoID0gVGlua2VyRmFjdG9yeS5jcmVhdGVNb2Rlcm4oKTsKLSAgICBwcml2YXRlIFNvY2lhbFRyYXZlcnNhbFNvdXJjZSBzb2NpYWwgPSB0cmF2ZXJzYWwoU29jaWFsVHJhdmVyc2FsU291cmNlLmNsYXNzKS53aXRoKGdyYXBoKTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVmFsaWRhdGVUaGF0TWFya29Lbm93c0pvc2goKSB7Ci0gICAgICAgIGFzc2VydFRydWUoc29jaWFsLlYoKS5oYXMoIm5hbWUiLCJtYXJrbyIpLmtub3dzKCJqb3NoIikuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzb2NpYWwucGVyc29ucygibWFya28iKS5rbm93cygiam9zaCIpLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRBZ2VPZllvdW5nZXN0RnJpZW5kT2ZNYXJrbygpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDI3LCBzb2NpYWwuVigpLmhhcygibmFtZSIsIm1hcmtvIikueW91bmdlc3RGcmllbmRzQWdlKCkubmV4dCgpLmludFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMjcsIHNvY2lhbC5wZXJzb25zKCJtYXJrbyIpLnlvdW5nZXN0RnJpZW5kc0FnZSgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEFsbG93VG9Vc2VMb2NhbEdyYXBoQXNSZW1vdGVXaXRoUGFyYW1ldGVyKCkgewotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzaW11bGF0ZWRSZW1vdGVHID0gdHJhdmVyc2FsKCkud2l0aChuZXcgRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uKGcpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMzLCBzaW11bGF0ZWRSZW1vdGVHLmluamVjdChHVmFsdWUub2YobnVsbCwgMTEpLCBHVmFsdWUub2YoIngiLCAyMikpLnN1bSgpLm5leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGaW5kQWxsUGVyc29ucygpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHNvY2lhbC5wZXJzb25zKCkuY291bnQoKS5uZXh0KCkuaW50VmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGaW5kQWxsUGVyc29uc1dpdGhUd29Pck1vcmVQcm9qZWN0cygpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNvY2lhbC5wZXJzb25zKCkuZmlsdGVyKF9fLmNyZWF0ZWRBdExlYXN0KDIpKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9zdGFuZGFyZC9hcmNoZXR5cGUucHJvcGVydGllcyBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvYXJjaGV0eXBlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmOTg3MDUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9zdGFuZGFyZC9hcmNoZXR5cGUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1ncm91cElkPW9yZy5hcGFjaGUudGlua2VycG9wCi1hcnRpZmFjdElkPWdyZW1saW4tYXJjaGV0eXBlLWRzbAotcGFja2FnZT1jb20udGVzdC5leGFtcGxlCi12ZXJzaW9uPTEuMC4wLVNOQVBTSE9UClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9zdGFuZGFyZC9nb2FsLnR4dCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLWRzbC9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvZ29hbC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMWE3MWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtZHNsL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9zdGFuZGFyZC9nb2FsLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXZlcmlmeQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9wb20ueG1sIGIvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDYxZWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tYXJjaGV0eXBlPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICA8L3BhcmVudD4KLQotICAgIDxhcnRpZmFjdElkPmdyZW1saW4tYXJjaGV0eXBlLXNlcnZlcjwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEFyY2hldHlwZSAtIFNlcnZlcjwvbmFtZT4KLSAgICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgotCi0gICAgPGJ1aWxkPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFyY2hldHlwZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotCi0gICAgICAgIDwhLS0gYXBwbHkgdmFyaWFibGUgc3Vic3RpdHV0aW9uIG9uIHRoZSBmb2xsb3dpbmcgZmlsZXMgdXNpbmcgdmFyaWFibGVzIGZyb20gdGhpcyBwb20gLS0+Ci0gICAgICAgIDxyZXNvdXJjZXM+Ci0gICAgICAgICAgICA8cmVzb3VyY2U+Ci0gICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9yZXNvdXJjZXM8L2RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICA8ZmlsdGVyaW5nPnRydWU8L2ZpbHRlcmluZz4KLSAgICAgICAgICAgICAgICA8aW5jbHVkZXM+Ci0gICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPmFyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbDwvaW5jbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+YXJjaGV0eXBlLXJlc291cmNlcy9SRUFETUUuYXNjaWlkb2M8L2luY2x1ZGU+Ci0gICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KLSAgICAgICAgICAgIDwvcmVzb3VyY2U+Ci0gICAgICAgICAgICA8cmVzb3VyY2U+Ci0gICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9yZXNvdXJjZXM8L2RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICA8ZmlsdGVyaW5nPmZhbHNlPC9maWx0ZXJpbmc+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPgotICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWw8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmFyY2hldHlwZS1yZXNvdXJjZXMvUkVBRE1FLmFzY2lpZG9jPC9leGNsdWRlPgotICAgICAgICAgICAgICAgIDwvZXhjbHVkZXM+Ci0gICAgICAgICAgICA8L3Jlc291cmNlPgotICAgICAgICA8L3Jlc291cmNlcz4KLSAgICA8L2J1aWxkPgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNkNjZhOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPGFyY2hldHlwZS1kZXNjcmlwdG9yIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvcGx1Z2lucy9tYXZlbi1hcmNoZXR5cGUtcGx1Z2luL2FyY2hldHlwZS1kZXNjcmlwdG9yLzEuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9hcmNoZXR5cGUtZGVzY3JpcHRvci0xLjAuMC54c2QiIG5hbWU9ImdyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoIgotICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9wbHVnaW5zL21hdmVuLWFyY2hldHlwZS1wbHVnaW4vYXJjaGV0eXBlLWRlc2NyaXB0b3IvMS4wLjAiCi0gICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+Ci0gICAgPGZpbGVTZXRzPgotICAgICAgICA8ZmlsZVNldCBmaWx0ZXJlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZGlyZWN0b3J5PjwvZGlyZWN0b3J5PgotICAgICAgICAgICAgPGluY2x1ZGVzPgotICAgICAgICAgICAgICAgIDxpbmNsdWRlPlJFQURNRS5hc2NpaWRvYzwvaW5jbHVkZT4KLSAgICAgICAgICAgIDwvaW5jbHVkZXM+Ci0gICAgICAgICAgICA8ZXhjbHVkZXM+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovKi54bWw8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICA8L2V4Y2x1ZGVzPgotICAgICAgICA8L2ZpbGVTZXQ+Ci0gICAgICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIj4KLSAgICAgICAgICAgIDxkaXJlY3Rvcnk+Y29uZi88L2RpcmVjdG9yeT4KLSAgICAgICAgPC9maWxlU2V0PgotICAgICAgICA8ZmlsZVNldCBmaWx0ZXJlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZGlyZWN0b3J5PnNjcmlwdHMvPC9kaXJlY3Rvcnk+Ci0gICAgICAgIDwvZmlsZVNldD4KLSAgICAgICAgPGZpbGVTZXQgZmlsdGVyZWQ9InRydWUiIHBhY2thZ2VkPSJ0cnVlIj4KLSAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5PgotICAgICAgICA8L2ZpbGVTZXQ+Ci0gICAgICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIiBwYWNrYWdlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy90ZXN0L2phdmE8L2RpcmVjdG9yeT4KLSAgICAgICAgPC9maWxlU2V0PgotICAgICAgICA8ZmlsZVNldCBmaWx0ZXJlZD0idHJ1ZSIgcGFja2FnZWQ9InRydWUiPgotICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvdGVzdC9yZXNvdXJjZXM8L2RpcmVjdG9yeT4KLSAgICAgICAgPC9maWxlU2V0PgotICAgIDwvZmlsZVNldHM+Ci0KLTwvYXJjaGV0eXBlLWRlc2NyaXB0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL1JFQURNRS5hc2NpaWRvYyBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9SRUFETUUuYXNjaWlkb2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YjgwMWYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL1JFQURNRS5hc2NpaWRvYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8vLy8KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLS8vLy8KLT0gR3JlbWxpbiBTZXJ2ZXIgQXBwbGljYXRpb24KLQotVGhpcyBpcyBhIHN0YXJ0ZXIgcHJvamVjdCB0aGF0IGRlbW9uc3RyYXRlcyBob3cgYSBiYXNpYwotbGluazpodHRwOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8ke3Byb2plY3QudmVyc2lvbn0vcmVmZXJlbmNlLyNncmVtbGluLXNlcnZlcltHcmVtbGluIFNlcnZlcl0gcHJvamVjdCBpcyBzdHJ1Y3R1cmVkCi13aXRoIE1hdmVuLiBUaGlzIHByb2plY3QgZGVtb25zdHJhdGVzIGhvdyB0byBjb25uZWN0IHRvIEdyZW1saW4gU2VydmVyIHdpdGggSmF2YSB1c2luZyByZW1vdGUgdHJhdmVyc2FscyB3aXRoIHRoZQotbGluazpodHRwOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8ke3Byb2plY3QudmVyc2lvbn0vcmVmZXJlbmNlLyNjb25uZWN0aW5nLXZpYS1yZW1vdGVncmFwaFtHcmVtbGluIERyaXZlcl0gdGhhdCBpcwotZGlzdHJpYnV0ZWQgYnkgVGlua2VyUG9wLgotCi09PSBQcmVyZXF1aXNpdGVzCi0KLSogSmF2YSAxMQotKiBsaW5rOmh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy9bTWF2ZW4gMy4zK10KLSogR3JlbWxpbiBTZXJ2ZXIgaXMgbGluazpodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QvdGlua2VycG9wL1tkb3dubG9hZGVkXSBhbmQgdW5wYWNrYWdlZAotCi09PSBCdWlsZGluZyBhbmQgUnVubmluZwotCi1CdWlsZCB0aGUgcHJvamVjdCBhcyBmb2xsb3dzOgotCi1bc291cmNlLHRleHRdCi1tdm4gY2xlYW4gcGFja2FnZQotCi1TdGFydCBHcmVtbGluIFNlcnZlciBpbiB0aGUgZGlyZWN0b3J5IGl0IHdhcyB1bnBhY2thZ2VkIGFuZCBzcGVjaWZ5IHVzYWdlIG9mIHRoZSAibW9kZXJuIiBncmFwaCBjb25maWd1cmF0aW9uOgotCi1bc291cmNlLHRleHRdCi0kIGJpbi9ncmVtbGluLXNlcnZlci5zaCAgY29uZi9ncmVtbGluLXNlcnZlci1tb2Rlcm4ueWFtbAotW0lORk9dIEdyZW1saW5TZXJ2ZXIgLQotICAgICAgICAgXCwsLC8KLSAgICAgICAgIChvIG8pCi0tLS0tLW9PT28tKDMpLW9PT28tLS0tLQotCi1bSU5GT10gR3JlbWxpblNlcnZlciAtIENvbmZpZ3VyaW5nIEdyZW1saW4gU2VydmVyIGZyb20gY29uZi9ncmVtbGluLXNlcnZlci1tb2Rlcm4ueWFtbAotW0lORk9dIE1ldHJpY01hbmFnZXIgLSBDb25maWd1cmVkIE1ldHJpY3MgU2xmNGpSZXBvcnRlciBjb25maWd1cmVkIHdpdGggaW50ZXJ2YWw9MTgwMDAwbXMgYW5kIGxvZ2dlck5hbWU9b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3MkU2xmNGpSZXBvcnRlck1ldHJpY3MKLVtJTkZPXSBHcmFwaHMgLSBHcmFwaCBbZ3JhcGhdIHdhcyBzdWNjZXNzZnVsbHkgY29uZmlndXJlZCB2aWEgW2NvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllc10uCi1bSU5GT10gU2VydmVyR3JlbWxpbkV4ZWN1dG9yIC0gSW5pdGlhbGl6ZWQgR3JlbWxpbiB0aHJlYWQgcG9vbC4gIFRocmVhZHMgaW4gcG9vbCBuYW1lZCB3aXRoIHBhdHRlcm4gZ3JlbWxpbi0qCi1bSU5GT10gU2NyaXB0RW5naW5lcyAtIExvYWRlZCBncmVtbGluLWdyb292eSBTY3JpcHRFbmdpbmUKLVtJTkZPXSBHcmVtbGluRXhlY3V0b3IgLSBJbml0aWFsaXplZCBncmVtbGluLWdyb292eSBTY3JpcHRFbmdpbmUgd2l0aCBzY3JpcHRzL2dlbmVyYXRlLW1vZGVybi5ncm9vdnkKLVtJTkZPXSBTZXJ2ZXJHcmVtbGluRXhlY3V0b3IgLSBJbml0aWFsaXplZCBHcmVtbGluRXhlY3V0b3IgYW5kIGNvbmZpZ3VyZWQgU2NyaXB0RW5naW5lcy4KLVtJTkZPXSBTZXJ2ZXJHcmVtbGluRXhlY3V0b3IgLSBBIEdyYXBoVHJhdmVyc2FsU291cmNlIGlzIG5vdyBib3VuZCB0byBbZ10gd2l0aCBncmFwaHRyYXZlcnNhbHNvdXJjZVt0aW5rZXJncmFwaFt2ZXJ0aWNlczowIGVkZ2VzOjBdLCBzdGFuZGFyZF0KLVtJTkZPXSBPcExvYWRlciAtIEFkZGluZyB0aGUgc3RhbmRhcmQgT3BQcm9jZXNzb3IuCi1bSU5GT10gT3BMb2FkZXIgLSBBZGRpbmcgdGhlIGNvbnRyb2wgT3BQcm9jZXNzb3IuCi1bSU5GT10gT3BMb2FkZXIgLSBBZGRpbmcgdGhlIHNlc3Npb24gT3BQcm9jZXNzb3IuCi1bSU5GT10gR3JlbWxpblNlcnZlciAtIEV4ZWN1dGluZyBzdGFydCB1cCBMaWZlQ3ljbGVIb29rCi1bSU5GT10gTG9nZ2VyJGluZm8gLSBMb2FkaW5nICdtb2Rlcm4nIGdyYXBoIGRhdGEuCi1bSU5GT10gR3JlbWxpblNlcnZlciQxIC0gR3JlbWxpbiBTZXJ2ZXIgY29uZmlndXJlZCB3aXRoIHdvcmtlciB0aHJlYWQgcG9vbCBvZiAxLCBncmVtbGluIHBvb2wgb2YgOCBhbmQgYm9zcyB0aHJlYWQgcG9vbCBvZiAxLgotW0lORk9dIEdyZW1saW5TZXJ2ZXIkMSAtIENoYW5uZWwgc3RhcnRlZCBhdCBwb3J0IDgxODIuCi0KLVJ1biB0aGlzIHByb2plY3QgYXMgZm9sbG93czoKLQotW3NvdXJjZSx0ZXh0XQotbXZuIGV4ZWM6amF2YSAtRGV4ZWMubWFpbkNsYXNzPSIke3BhY2thZ2V9LkFwcCIgLURsb2diYWNrLmNvbmZpZ3VyYXRpb25GaWxlPWZpbGU6Y29uZi9sb2diYWNrLnhtbCAtRHBvcnQ9ODE4MgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL2NvbmYvbG9nYmFjay10ZXN0LnhtbCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9jb25mL2xvZ2JhY2stdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkOTRjM2IuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL2NvbmYvbG9nYmFjay10ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08Y29uZmlndXJhdGlvbj4KLSAgICA8YXBwZW5kZXIgbmFtZT0ic3Rkb3V0IiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgICA8ZW5jb2Rlcj4KLSAgICAgICAgICAgIDxwYXR0ZXJuPlslcF0gJUMgLSAlbSVuPC9wYXR0ZXJuPgotICAgICAgICA8L2VuY29kZXI+Ci0gICAgPC9hcHBlbmRlcj4KLSAgICA8cm9vdCBsZXZlbD0iV0FSTiI+Ci0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJzdGRvdXQiLz4KLSAgICA8L3Jvb3Q+Ci08L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL2NvbmYvbG9nYmFjay54bWwgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvY29uZi9sb2diYWNrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxMWNlNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvY29uZi9sb2diYWNrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08Y29uZmlndXJhdGlvbj4KLSAgICA8YXBwZW5kZXIgbmFtZT0ic3Rkb3V0IiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgotICAgICAgICA8ZW5jb2Rlcj4KLSAgICAgICAgICAgIDxwYXR0ZXJuPlslcF0gJUMgLSAlbSVuPC9wYXR0ZXJuPgotICAgICAgICA8L2VuY29kZXI+Ci0gICAgPC9hcHBlbmRlcj4KLSAgICA8cm9vdCBsZXZlbD0iSU5GTyI+Ci0gICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJzdGRvdXQiLz4KLSAgICA8L3Jvb3Q+Ci08L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL2NvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllcyBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9jb25mL3RpbmtlcmdyYXBoLWVtcHR5LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOWExM2QuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL2NvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotZ3JlbWxpbi5ncmFwaD1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaAotZ3JlbWxpbi50aW5rZXJncmFwaC52ZXJ0ZXhJZE1hbmFnZXI9TE9ORwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sIGIvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTg5ZmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPGdyb3VwSWQ+XCR7Z3JvdXBJZH08L2dyb3VwSWQ+Ci0gICAgPGFydGlmYWN0SWQ+XCR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+XCR7dmVyc2lvbn08L3ZlcnNpb24+Ci0KLSAgICA8bmFtZT5HZXR0aW5nIHN0YXJ0ZWQgd2l0aCBHcmVtbGluIFNlcnZlcjwvbmFtZT4KLQotICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+Ci0gICAgPHByb3BlcnRpZXM+Ci0gICAgICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgotICAgIDwvcHJvcGVydGllcz4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1kcml2ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jaC5xb3MubG9nYmFjazwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvZ2JhY2stY2xhc3NpYzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7bG9nYmFjay52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1zZXJ2ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtqdW5pdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxidWlsZD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+My4xNC4wPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8cmVsZWFzZT44PC9yZWxlYXNlPgotICAgICAgICAgICAgICAgICAgICA8c291cmNlPjg8L3NvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgPHRhcmdldD44PC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjb21waWxlckFyZ3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJnPi1wYXJhbWV0ZXJzPC9hcmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvY29tcGlsZXJBcmdzPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMjIuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHN5c3RlbVByb3BlcnR5VmFyaWFibGVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxvZ2JhY2suY29uZmlndXJhdGlvbkZpbGU+ZmlsZTpjb25mL2xvZ2JhY2stdGVzdC54bWw8L2xvZ2JhY2suY29uZmlndXJhdGlvbkZpbGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3lzdGVtUHJvcGVydHlWYXJpYWJsZXM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zY3JpcHRzL2dlbmVyYXRlLW1vZGVybi5ncm9vdnkgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc2NyaXB0cy9nZW5lcmF0ZS1tb2Rlcm4uZ3Jvb3Z5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2I0YTYxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zY3JpcHRzL2dlbmVyYXRlLW1vZGVybi5ncm9vdnkKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLy8gYW4gaW5pdCBzY3JpcHQgdGhhdCByZXR1cm5zIGEgTWFwIGFsbG93cyBleHBsaWNpdCBzZXR0aW5nIG9mIGdsb2JhbCBiaW5kaW5ncy4KLWRlZiBnbG9iYWxzID0gWzpdCi0KLS8vIEdlbmVyYXRlcyB0aGUgbW9kZXJuIGdyYXBoIGludG8gYW4gImVtcHR5IiBUaW5rZXJHcmFwaCB2aWEgTGlmZUN5Y2xlSG9vay4KLS8vIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGUga2V5IGluIHRoZSAiZ2xvYmFsIiBtYXAgaXMgdW5pbXBvcnRhbnQuCi1nbG9iYWxzIDw8IFtob29rIDogWwotICBvblN0YXJ0VXA6IHsgY3R4IC0+Ci0gICAgY3R4LmxvZ2dlci5pbmZvKCJMb2FkaW5nICdtb2Rlcm4nIGdyYXBoIGRhdGEuIikKLSAgICBUaW5rZXJGYWN0b3J5LmdlbmVyYXRlTW9kZXJuKGdyYXBoKQotICB9Ci1dIGFzIExpZmVDeWNsZUhvb2tdCi0KLS8vIGRlZmluZSB0aGUgZGVmYXVsdCBUcmF2ZXJzYWxTb3VyY2UgdG8gYmluZCBxdWVyaWVzIHRvIC0gdGhpcyBvbmUgd2lsbCBiZSBuYW1lZCAiZyIuCi1nbG9iYWxzIDw8IFtnIDogZ3JhcGgudHJhdmVyc2FsKCldClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvQXBwLmphdmEgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9BcHAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWUwMTI3Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9BcHAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSAke3BhY2thZ2V9OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0OwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBBcHAgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihBcHAuY2xhc3MpOwotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IFNlcnZpY2UuaW5zdGFuY2UoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZW5kaW5nIHJlcXVlc3QuLi4uIik7Ci0KLSAgICAgICAgICAgIC8vIHNob3VsZCBwcmludCBtYXJrbywgam9zaCBhbmQgcGV0ZXIgdG8gdGhlIGxvZ3MKLSAgICAgICAgICAgIHNlcnZpY2UuZmluZENyZWF0b3JzT2ZTb2Z0d2FyZSgibG9wIikuaXRlcmF0b3IoKS5mb3JFYWNoUmVtYWluaW5nKHIgLT4gbG9nZ2VyLmluZm8oU3RyaW5nLmZvcm1hdCgiICAtICVzIiwgcikpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkIG5vdCBleGVjdXRlIHRyYXZlcnNhbCIsIGV4KTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHNlcnZpY2UuY2xvc2UoKTsKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTZXJ2aWNlIGNsb3NlZCBhbmQgcmVzb3VyY2VzIHJlbGVhc2VkIik7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9TZXJ2aWNlLmphdmEgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9TZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZWEwNGUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlICR7cGFja2FnZX07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotCi1wdWJsaWMgY2xhc3MgU2VydmljZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgcG9ydCA9IEludGVnZXIucGFyc2VJbnQoU3lzdGVtLmdldFByb3BlcnR5KCJwb3J0IiwgIjQ1OTQwIikpOwotCi0gICAgLyoqCi0gICAgICogVGhlcmUgdHlwaWNhbGx5IG5lZWRzIHRvIGJlIG9ubHkgb25lIENsdXN0ZXIgaW5zdGFuY2UgaW4gYW4gYXBwbGljYXRpb24uCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCkucG9ydChwb3J0KS5jcmVhdGUoKTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIHJlbW90ZSBHcmFwaFRyYXZlcnNhbFNvdXJjZSB1c2luZyB0aGUgYWJvdmUgY3JlYXRlZCBDbHVzdGVyIGluc3RhbmNlIHRoYXQgd2lsbCBjb25uZWN0IHRvIEdyZW1saW4KLSAgICAgKiBTZXJ2ZXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aChEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBTZXJ2aWNlIGFzIGEgc2luZ2xldG9uIGdpdmVuIHRoZSBzaW1wbGljaXR5IG9mIEFwcC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXJ2aWNlIElOU1RBTkNFID0gbmV3IFNlcnZpY2UoKTsKLQotICAgIHByaXZhdGUgU2VydmljZSgpIHt9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFNlcnZpY2UgaW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiBJTlNUQU5DRTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxPYmplY3Q+IGZpbmRDcmVhdG9yc09mU29mdHdhcmUoU3RyaW5nIHNvZnR3YXJlTmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBnLlYoKS5oYXMoInNvZnR3YXJlIiwgIm5hbWUiLCBzb2Z0d2FyZU5hbWUpLgotICAgICAgICAgICAgICAgICBpbigiY3JlYXRlZCIpLgotICAgICAgICAgICAgICAgICB2YWx1ZXMoIm5hbWUiKS50b0xpc3QoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL1NlcnZpY2VUZXN0LmphdmEgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS9TZXJ2aWNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjQ0MzlmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL1NlcnZpY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2UgJHtwYWNrYWdlfTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyZW1saW5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKLQotLyoqCi0gKiBCYXNpYyB0ZXN0IGNsYXNzIHRoYXQgZGVtb25zdHJhdGVzIGhvdyB0byBzdGFydCBhbmQgc3RvcCBhbiBlbWJlZGRlZCBHcmVtbGluIFNlcnZlciBpbnN0YW5jZSBpbiBhIHRlc3QuIE5vdGUgdGhhdAotICogdGhlIHNlcnZlciBpbnN0YW5jZSBpcyBub3Qgc3RhcnRlZCBvciBzdG9wcGVkIGluIGEgdGhyZWFkLXNhZmUgbWFubmVyLCBidXQgdHlwaWNhbGx5IHRoaXMgaXMgYWNjZXB0YWJsZSBmb3IgbW9zdAotICogdGVzdGluZyB1c2UgY2FzZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXJ2aWNlVGVzdCB7Ci0gICAgcHJpdmF0ZSBHcmVtbGluU2VydmVyIHNlcnZlcjsKLQotICAgIHByaXZhdGUgc3RhdGljIFNlcnZpY2Ugc2VydmljZSA9IFNlcnZpY2UuaW5zdGFuY2UoKTsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdGFydFNlcnZlcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0YXJ0cyBhIG5ldyBpbnN0YW5jZSBvZiBHcmVtbGluIFNlcnZlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydFNlcnZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBzdHJlYW0gPSBTZXJ2aWNlVGVzdC5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKCJncmVtbGluLXNlcnZlci55YW1sIik7Ci0gICAgICAgIHRoaXMuc2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoU2V0dGluZ3MucmVhZChzdHJlYW0pKTsKLQotICAgICAgICBzZXJ2ZXIuc3RhcnQoKS5qb2luKCk7Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3RvcFNlcnZlcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0b3BzIGEgY3VycmVudCBpbnN0YW5jZSBvZiBHcmVtbGluIFNlcnZlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdG9wU2VydmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHNlcnZlci5zdG9wKCkuam9pbigpOwotICAgIH0KLQotICAgIEBBZnRlckNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duQ2FzZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzZXJ2aWNlLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDcmVhdGVHcmFwaCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gcmVzdWx0ID0gc2VydmljZS5maW5kQ3JlYXRvcnNPZlNvZnR3YXJlKCJsb3AiKTsKLSAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQsIGlzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgImpvc2giLCAicGV0ZXIiKSkpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL2dyZW1saW4tc2VydmVyLnlhbWwgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL2dyZW1saW4tc2VydmVyLnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNTI3OGIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L3Jlc291cmNlcy9ncmVtbGluLXNlcnZlci55YW1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1ob3N0OiBsb2NhbGhvc3QKLXBvcnQ6IDQ1OTQwCi10aHJlYWRQb29sV29ya2VyOiAxCi1ncmVtbGluUG9vbDogOAotZXZhbHVhdGlvblRpbWVvdXQ6IDMwMDAwCi1ncmFwaHM6IHsKLSAgZ3JhcGg6IGNvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllc30KLXNjcmlwdEVuZ2luZXM6IHsKLSAgZ3JlbWxpbi1ncm9vdnk6IHsKLSAgICBwbHVnaW5zOiB7IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmpzcjIyMy5HcmVtbGluU2VydmVyR3JlbWxpblBsdWdpbjoge30sCi0gICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLmpzcjIyMy5UaW5rZXJHcmFwaEdyZW1saW5QbHVnaW46IHt9LAotICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuU2NyaXB0RmlsZUdyZW1saW5QbHVnaW46IHtmaWxlczogW3NjcmlwdHMvZ2VuZXJhdGUtbW9kZXJuLmdyb292eV19fX19Ci1zZXJpYWxpemVyczoKLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgfQotbWV0cmljczogewotICBzbGY0alJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH19Ci1zdHJpY3RUcmFuc2FjdGlvbk1hbmFnZW1lbnQ6IGZhbHNlCi10aHJlYWRQb29sQm9zczogMQotbWF4SW5pdGlhbExpbmVMZW5ndGg6IDQwOTYKLW1heEhlYWRlclNpemU6IDgxOTIKLW1heENodW5rU2l6ZTogODE5MgotbWF4Q29udGVudExlbmd0aDogNjU1MzYKLW1heEFjY3VtdWxhdGlvbkJ1ZmZlckNvbXBvbmVudHM6IDEwMjQKLXJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZTogNjQKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvYXJjaGV0eXBlLnByb3BlcnRpZXMgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL3N0YW5kYXJkL2FyY2hldHlwZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjA2N2I3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvYXJjaGV0eXBlLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLQotZ3JvdXBJZD1vcmcuYXBhY2hlLnRpbmtlcnBvcAotYXJ0aWZhY3RJZD1ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIKLXBhY2thZ2U9Y29tLnRlc3QuZXhhbXBsZQotdmVyc2lvbj0xLjAuMC1TTkFQU0hPVApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvZ29hbC50eHQgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL3N0YW5kYXJkL2dvYWwudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTFhNzFkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvZ29hbC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi12ZXJpZnkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9wb20ueG1sIGIvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDg0MDdkMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi1jb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLXRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLVRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0odGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWFyY2hldHlwZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaDwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEFyY2hldHlwZSAtIFRpbmtlckdyYXBoPC9uYW1lPgotICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXJjaGV0eXBlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8L3BsdWdpbnM+Ci0KLSAgICAgICAgPCEtLSBhcHBseSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gb24gdGhlIGZvbGxvd2luZyBmaWxlcyB1c2luZyB2YXJpYWJsZXMgZnJvbSB0aGlzIHBvbSAtLT4KLSAgICAgICAgPHJlc291cmNlcz4KLSAgICAgICAgICAgIDxyZXNvdXJjZT4KLSAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL3Jlc291cmNlczwvZGlyZWN0b3J5PgotICAgICAgICAgICAgICAgIDxmaWx0ZXJpbmc+dHJ1ZTwvZmlsdGVyaW5nPgotICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+YXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sPC9pbmNsdWRlPgotICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5hcmNoZXR5cGUtcmVzb3VyY2VzL1JFQURNRS5hc2NpaWRvYzwvaW5jbHVkZT4KLSAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPgotICAgICAgICAgICAgPC9yZXNvdXJjZT4KLSAgICAgICAgICAgIDxyZXNvdXJjZT4KLSAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL3Jlc291cmNlczwvZGlyZWN0b3J5PgotICAgICAgICAgICAgICAgIDxmaWx0ZXJpbmc+ZmFsc2U8L2ZpbHRlcmluZz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Ci0gICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmFyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbDwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+YXJjaGV0eXBlLXJlc291cmNlcy9SRUFETUUuYXNjaWlkb2M8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KLSAgICAgICAgICAgIDwvcmVzb3VyY2U+Ci0gICAgICAgIDwvcmVzb3VyY2VzPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE1OWVlMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLTwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08YXJjaGV0eXBlLWRlc2NyaXB0b3IgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9wbHVnaW5zL21hdmVuLWFyY2hldHlwZS1wbHVnaW4vYXJjaGV0eXBlLWRlc2NyaXB0b3IvMS4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL2FyY2hldHlwZS1kZXNjcmlwdG9yLTEuMC4wLnhzZCIgbmFtZT0iZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgiCi0gICAgICAgICAgICAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3BsdWdpbnMvbWF2ZW4tYXJjaGV0eXBlLXBsdWdpbi9hcmNoZXR5cGUtZGVzY3JpcHRvci8xLjAuMCIKLSAgICAgICAgICAgICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLSAgICA8ZmlsZVNldHM+Ci0gICAgICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIj4KLSAgICAgICAgICAgIDxkaXJlY3Rvcnk+PC9kaXJlY3Rvcnk+Ci0gICAgICAgICAgICA8aW5jbHVkZXM+Ci0gICAgICAgICAgICAgICAgPGluY2x1ZGU+UkVBRE1FLmFzY2lpZG9jPC9pbmNsdWRlPgotICAgICAgICAgICAgPC9pbmNsdWRlcz4KLSAgICAgICAgICAgIDxleGNsdWRlcz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLnhtbDwvZXhjbHVkZT4KLSAgICAgICAgICAgIDwvZXhjbHVkZXM+Ci0gICAgICAgIDwvZmlsZVNldD4KLSAgICAgICAgPGZpbGVTZXQgZmlsdGVyZWQ9InRydWUiIHBhY2thZ2VkPSJ0cnVlIj4KLSAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YTwvZGlyZWN0b3J5PgotICAgICAgICA8L2ZpbGVTZXQ+Ci0gICAgICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIiBwYWNrYWdlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy90ZXN0L2phdmE8L2RpcmVjdG9yeT4KLSAgICAgICAgPC9maWxlU2V0PgotICAgIDwvZmlsZVNldHM+Ci0KLTwvYXJjaGV0eXBlLWRlc2NyaXB0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvUkVBRE1FLmFzY2lpZG9jIGIvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvUkVBRE1FLmFzY2lpZG9jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzJiNDNkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL1JFQURNRS5hc2NpaWRvYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8vLy8KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLS8vLy8KLT0gU2ltcGxlIFRpbmtlclBvcCBBcHBsaWNhdGlvbgotCi1UaGlzIGlzIGEgc2ltcGxlIHN0YXJ0ZXIgcHJvamVjdCB0aGF0IGRlbW9uc3RyYXRlcyBob3cgYSBiYXNpYyBUaW5rZXJQb3AgcHJvamVjdCBpcyBzdHJ1Y3R1cmVkIHdpdGggTWF2ZW4uIFRoaXMgcHJvamVjdAotdXNlcyBsaW5rOmh0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLyR7cHJvamVjdC52ZXJzaW9ufS9yZWZlcmVuY2UvI3RpbmtlcmdyYXBoLWdyZW1saW5bVGlua2VyR3JhcGhdIGFzIGFuCi1lbWJlZGRlZCBncmFwaCBkYXRhYmFzZSwgbG9hZHMgaXQgd2l0aCBzb21lIGRhdGEgYW5kIHRoZW4gZXhlY3V0ZXMgYSBzaG9ydGVzdCBwYXRoIGNhbGN1bGF0aW9uLCBwcmludGluZyB0aGUgcmVzdWx0cy4KLQotPT0gUHJlcmVxdWlzaXRlcwotCi0qIEphdmEgMTEKLSogbGluazpodHRwczovL21hdmVuLmFwYWNoZS5vcmcvW01hdmVuIDMuMytdCi0KLT09IEJ1aWxkaW5nIGFuZCBSdW5uaW5nCi0KLVtzb3VyY2UsdGV4dF0KLW12biBjbGVhbiBwYWNrYWdlCi1tdm4gZXhlYzpqYXZhIC1EZXhlYy5tYWluQ2xhc3M9IiR7cGFja2FnZX0uQXBwIgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExY2I2MGMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8Z3JvdXBJZD5cJHtncm91cElkfTwvZ3JvdXBJZD4KLSAgICA8YXJ0aWZhY3RJZD5cJHthcnRpZmFjdElkfTwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj5cJHt2ZXJzaW9ufTwvdmVyc2lvbj4KLQotICAgIDxuYW1lPkdldHRpbmcgc3RhcnRlZCB3aXRoIFRpbmtlckdyYXBoPC9uYW1lPgotCi0gICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KLSAgICA8cHJvcGVydGllcz4KLSAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+Ci0gICAgPC9wcm9wZXJ0aWVzPgotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJncmFwaC1ncmVtbGluPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLmxvZ2JhY2s8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5sb2diYWNrLWNsYXNzaWM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4ke2xvZ2JhY2sudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtqdW5pdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxidWlsZD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+My4xNC4wPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8cmVsZWFzZT44PC9yZWxlYXNlPgotICAgICAgICAgICAgICAgICAgICA8c291cmNlPjg8L3NvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgPHRhcmdldD44PC90YXJnZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxjb21waWxlckFyZ3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJnPi1wYXJhbWV0ZXJzPC9hcmc+Ci0gICAgICAgICAgICAgICAgICAgIDwvY29tcGlsZXJBcmdzPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0FwcC5qYXZhIGIvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9BcHAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkYTE1MS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0FwcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlICR7cGFja2FnZX07Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uKjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotCi1wdWJsaWMgY2xhc3MgQXBwIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IFRpbmtlckdyYXBoIGFuZCBsb2FkIHNvbWUgdGVzdCBkYXRhLiBUaGUgR3JhcGggaW5zdGFuY2UgaXMgdHlwaWNhbGx5IG5hbWVkICJncmFwaCIgYXMgYQotICAgICAgICAvLyB2YXJpYWJsZSBuYW1lLiBZb3Ugd2lsbCBzZWUgdGhpcyBwYXR0ZXJuIGNvbnNpc3RlbnRseSBpbiBUaW5rZXJQb3AgZG9jdW1lbnRhdGlvbiwgdGhlIG1haWxpbmcgbGlzdCwgZXRjLgotICAgICAgICBHcmFwaCBncmFwaCA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgbG9hZERhdGEoZ3JhcGgpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIEdyYXBoVHJhdmVyc2FsU291cmNlIGluc3RhbmNlIHRoYXQgaXMgdXNlZCB0byBxdWVyeSB0aGUgZGF0YSBpbiB0aGUgR3JhcGggaW5zdGFuY2UuIFRoaXMgdmFyaWFibGUKLSAgICAgICAgLy8gaXMgdHlwaWNhbGx5IGRlbm90ZWQgYXMgImciLiAgSW4gVGlua2VyUG9wIGRvY3VtZW50YXRpb24geW91IGNhbiBhbHdheXMgY291bnQgb24gcmVmZXJlbmNlcyB0byAiZyIgYXMKLSAgICAgICAgLy8gYmVpbmcgYSBvYmplY3Qgb2YgdGhpcyB0eXBlLgotICAgICAgICBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aChncmFwaCk7Ci0KLSAgICAgICAgVmVydGV4IGZyb21Ob2RlID0gZmluZEJ5TmFtZShnLCAibWFya28iKTsKLSAgICAgICAgVmVydGV4IHRvTm9kZSA9IGZpbmRCeU5hbWUoZywgInBldGVyIik7Ci0KLSAgICAgICAgTGlzdCBsaXN0ID0gY2FsY3VsYXRlU2hvcnRlc3RQYXRoQmV0d2VlbihnLCBmcm9tTm9kZSwgdG9Ob2RlKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpc3QudG9TdHJpbmcoKSk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVmVydGV4IGZpbmRCeU5hbWUoR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZywgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIG5hbWUpLm5leHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIExpc3QgY2FsY3VsYXRlU2hvcnRlc3RQYXRoQmV0d2VlbihHcmFwaFRyYXZlcnNhbFNvdXJjZSBnLCBWZXJ0ZXggZnJvbU5vZGUsIFZlcnRleCB0b05vZGUpIHsKLSAgICAgICAgQXJyYXlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGcuVihmcm9tTm9kZSkucmVwZWF0KGJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKGlzKHRvTm9kZSkpLmxpbWl0KDEpLnBhdGgoKS5maWxsKGxpc3QpOwotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbG9hZERhdGEoR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgLy8gc2VlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3RvcnkuZ2VuZXJhdGVNb2Rlcm4oKQotICAgICAgICBmaW5hbCBWZXJ0ZXggbWFya28gPSBncmFwaC5hZGRWZXJ0ZXgoVC5pZCwgMSwgVC5sYWJlbCwgInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIDI5KTsKLSAgICAgICAgZmluYWwgVmVydGV4IHZhZGFzID0gZ3JhcGguYWRkVmVydGV4KFQuaWQsIDIsIFQubGFiZWwsICJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIsICJhZ2UiLCAyNyk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCBsb3AgPSBncmFwaC5hZGRWZXJ0ZXgoVC5pZCwgMywgVC5sYWJlbCwgInNvZnR3YXJlIiwgIm5hbWUiLCAibG9wIiwgImxhbmciLCAiamF2YSIpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggam9zaCA9IGdyYXBoLmFkZFZlcnRleChULmlkLCA0LCBULmxhYmVsLCAicGVyc29uIiwgIm5hbWUiLCAiam9zaCIsICJhZ2UiLCAzMik7Ci0gICAgICAgIGZpbmFsIFZlcnRleCByaXBwbGUgPSBncmFwaC5hZGRWZXJ0ZXgoVC5pZCwgNSwgVC5sYWJlbCwgInNvZnR3YXJlIiwgIm5hbWUiLCAicmlwcGxlIiwgImxhbmciLCAiamF2YSIpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggcGV0ZXIgPSBncmFwaC5hZGRWZXJ0ZXgoVC5pZCwgNiwgVC5sYWJlbCwgInBlcnNvbiIsICJuYW1lIiwgInBldGVyIiwgImFnZSIsIDM1KTsKLSAgICAgICAgbWFya28uYWRkRWRnZSgia25vd3MiLCB2YWRhcywgVC5pZCwgNywgIndlaWdodCIsIDAuNWQpOwotICAgICAgICBtYXJrby5hZGRFZGdlKCJrbm93cyIsIGpvc2gsIFQuaWQsIDgsICJ3ZWlnaHQiLCAxLjBkKTsKLSAgICAgICAgbWFya28uYWRkRWRnZSgiY3JlYXRlZCIsIGxvcCwgVC5pZCwgOSwgIndlaWdodCIsIDAuNGQpOwotICAgICAgICBqb3NoLmFkZEVkZ2UoImNyZWF0ZWQiLCByaXBwbGUsIFQuaWQsIDEwLCAid2VpZ2h0IiwgMS4wZCk7Ci0gICAgICAgIGpvc2guYWRkRWRnZSgiY3JlYXRlZCIsIGxvcCwgVC5pZCwgMTEsICJ3ZWlnaHQiLCAwLjRkKTsKLSAgICAgICAgcGV0ZXIuYWRkRWRnZSgiY3JlYXRlZCIsIGxvcCwgVC5pZCwgMTIsICJ3ZWlnaHQiLCAwLjJkKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS9BcHBUZXN0LmphdmEgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL0FwcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0MDBiNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL0FwcFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSAke3BhY2thZ2V9OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotcHVibGljIGNsYXNzIEFwcFRlc3QgewotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDcmVhdGVHcmFwaCgpIHsKLSAgICAgICAgVGlua2VyR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIEFwcC5sb2FkRGF0YShncmFwaCk7Ci0KLSAgICAgICAgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyg2LCBnLlYoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGcuRSgpLmNvdW50KCkubmV4dCgpLmludFZhbHVlKCkpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvYXJjaGV0eXBlLnByb3BlcnRpZXMgYi9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvYXJjaGV0eXBlLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljM2U1MWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1hcmNoZXR5cGUvZ3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL3N0YW5kYXJkL2FyY2hldHlwZS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLWdyb3VwSWQ9b3JnLmFwYWNoZS50aW5rZXJwb3AKLWFydGlmYWN0SWQ9Z3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGgKLXBhY2thZ2U9Y29tLnRlc3QuZXhhbXBsZQotdmVyc2lvbj0xLjAuMC1TTkFQU0hPVApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9zdGFuZGFyZC9nb2FsLnR4dCBiL2dyZW1saW4tYXJjaGV0eXBlL2dyZW1saW4tYXJjaGV0eXBlLXRpbmtlcmdyYXBoL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9zdGFuZGFyZC9nb2FsLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGExYTcxZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9ncmVtbGluLWFyY2hldHlwZS10aW5rZXJncmFwaC9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvc3RhbmRhcmQvZ29hbC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi12ZXJpZnkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWFyY2hldHlwZS9wb20ueG1sIGIvZ3JlbWxpbi1hcmNoZXR5cGUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I4M2MxYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWFyY2hldHlwZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi1jb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLXRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLVRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0odGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCi0gICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjMuOC4yLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1hcmNoZXR5cGU8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGluIEFyY2hldHlwZTwvbmFtZT4KLSAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotCi0gICAgPG1vZHVsZXM+Ci0gICAgICAgIDxtb2R1bGU+Z3JlbWxpbi1hcmNoZXR5cGUtdGlua2VyZ3JhcGg8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5ncmVtbGluLWFyY2hldHlwZS1zZXJ2ZXI8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5ncmVtbGluLWFyY2hldHlwZS1kc2w8L21vZHVsZT4KLSAgICA8L21vZHVsZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxwbHVnaW5NYW5hZ2VtZW50PgotICAgICAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjEuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5pbnRlZ3JhdGlvbi10ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmludGVncmF0aW9uLXRlc3Q8L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB3aXRob3V0IHRoaXMgY29uZmlndXJhdGlvbiAtRHNraXBUZXN0cyBpcyB1c2VsZXNzIC0tPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+JHtza2lwVGVzdHN9PC9za2lwPgotICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICAgICAgICAgICA8IS0tCi0gICAgICAgICAgICAgICAgICBWYXJpYWJsZXMgYXJlIGFwcGxpZWQgaW4gdHdvIHNlcGFyYXRlIHJvdW5kcy4gIFRoZSBmaXJzdCByb3VuZCBhcHBsaWVzIHZhcmlhYmxlcyBmcm9tIHRoaXMgcG9tLnhtbAotICAgICAgICAgICAgICAgICAgYW5kIHRoZSBzZWNvbmQgcm91bmQgcmVtb3ZlcyBlc2NhcGluZyBmcm9tIHZhcmlhYmxlcyBzbyB0aGF0IHRoZXkgY2FuIGJlY29tZSB2YXJpYWJsZXMgZHVyaW5nCi0gICAgICAgICAgICAgICAgICBhcmNoZXR5cGUgZ2VuZXJhdGlvbgotICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1yZXNvdXJjZXMtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlc2NhcGVTdHJpbmc+XDwvZXNjYXBlU3RyaW5nPgotICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8L3BsdWdpbnM+Ci0gICAgICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KLSAgICA8L2J1aWxkPgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9iaW4vZ3JlbWxpbi5zaCBiL2dyZW1saW4tY29uc29sZS9iaW4vZ3JlbWxpbi5zaAppbmRleCBhOWNjN2Q0Li5iOGNiNGFiIDEyMDAwMAotLS0gYS9ncmVtbGluLWNvbnNvbGUvYmluL2dyZW1saW4uc2gKKysrIGIvZ3JlbWxpbi1jb25zb2xlL2Jpbi9ncmVtbGluLnNoCkBAIC0xICsxIEBACi0uLi90YXJnZXQvYXBhY2hlLXRpbmtlcnBvcC1ncmVtbGluLWNvbnNvbGUtMy44LjItU05BUFNIT1Qtc3RhbmRhbG9uZS9iaW4vZ3JlbWxpbi5zaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKy4uL3RhcmdldC9hcGFjaGUtdGlua2VycG9wLWdyZW1saW4tY29uc29sZS00LjAuMC1TTkFQU0hPVC1zdGFuZGFsb25lL2Jpbi9ncmVtbGluLnNoClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL2NvbmYvbmVvNGotc3RhbmRhbG9uZS5wcm9wZXJ0aWVzIGIvZ3JlbWxpbi1jb25zb2xlL2NvbmYvbmVvNGotc3RhbmRhbG9uZS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDdhZGJhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29uc29sZS9jb25mL25lbzRqLXN0YW5kYWxvbmUucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLQotZ3JlbWxpbi5ncmFwaD1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoCi0KLWdyZW1saW4ubmVvNGouZGlyZWN0b3J5PS90bXAvbmVvNGoKLWdyZW1saW4ubmVvNGouY29uZi5kYm1zLmF1dG9faW5kZXgubm9kZXMuZW5hYmxlZD10cnVlCi0jZ3JlbWxpbi5uZW80ai5jb25mLmRibXMuYXV0b19pbmRleC5ub2Rlcy5rZXlzPQotZ3JlbWxpbi5uZW80ai5jb25mLmRibXMuYXV0b19pbmRleC5yZWxhdGlvbnNoaXBzLmVuYWJsZWQ9dHJ1ZQotI2dyZW1saW4ubmVvNGouY29uZi5kYm1zLmF1dG9faW5kZXgucmVsYXRpb25zaGlwcy5rZXlzPQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLWdyYXBoLnByb3BlcnRpZXMgYi9ncmVtbGluLWNvbnNvbGUvY29uZi9yZW1vdGUtZ3JhcGgucHJvcGVydGllcwppbmRleCA2NTQzNjVkLi5kNjVhYjMzIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvY29uZi9yZW1vdGUtZ3JhcGgucHJvcGVydGllcworKysgYi9ncmVtbGluLWNvbnNvbGUvY29uZi9yZW1vdGUtZ3JhcGgucHJvcGVydGllcwpAQCAtMTYsMTAgKzE2LDEyIEBACiAjIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgbWVhbnQgZm9yIHVzZSB3aXRoIHdpdGhSZW1vdGUoKS4KKyMgVGhpcyBjb25maWd1cmF0aW9uIGlzIG1lYW50IGZvciB1c2Ugd2l0aCB3aXRoKCkgb3IgY29ubmVjdCgpLgogIwotIyBnID0gdHJhdmVyc2FsKCdjb25mL3JlbW90ZS1ncmFwaC5wcm9wZXJ0aWVzJykKKyMgZyA9IHRyYXZlcnNhbCgpLndpdGgoJ2NvbmYvcmVtb3RlLWdyYXBoLnByb3BlcnRpZXMnKQorIyBnID0gY29ubmVjdCgnY29uZi9yZW1vdGUtZ3JhcGgucHJvcGVydGllcycpCiAjCisjIHRvZG86IHJldmlzaXQgY29tcGF0aWJsZSBjb25maWdzCiAjIFRoaXMgZmlsZSB3aWxsIHdvcmsgd2l0aDoKICMgLSBncmVtbGluLXNlcnZlci55YW1sCiAjIC0gZ3JlbWxpbi1zZXJ2ZXItY2xhc3NpYy55YW1sCkBAIC0yOSw1ICszMSw1IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBncmVtbGluLnJlbW90ZS5yZW1vdGVDb25uZWN0aW9uQ2xhc3M9b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb24KLWdyZW1saW4ucmVtb3RlLmRyaXZlci5jbHVzdGVyRmlsZT1jb25mL3JlbW90ZS1vYmplY3RzLnlhbWwKK2dyZW1saW4ucmVtb3RlLmRyaXZlci5jbHVzdGVyRmlsZT1jb25mL3JlbW90ZS55YW1sCiBncmVtbGluLnJlbW90ZS5kcml2ZXIuc291cmNlTmFtZT1nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLW9iamVjdHMueWFtbCBiL2dyZW1saW4tY29uc29sZS9jb25mL3JlbW90ZS1vYmplY3RzLnlhbWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOGYyYTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLW9iamVjdHMueWFtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGhpcyBjb25maWd1cmF0aW9uIGlzIG1lYW50IHRvIGhhdmUgR3JlbWxpbiBTZXJ2ZXIgcmV0dXJuCi0jIEdyYXBoQmluYXJ5IHNlcmlhbGl6ZWQgb2JqZWN0cy4gVGhlIFRpbmtlckdyYXBoIElvUmVnaXN0cnkgaXMKLSMgYXNzaWduZWQgYXMgdGhpcyBpcyB0aGUgY29uZmlndXJhdGlvbiBkZWZpbmVkIGluIHRoZQotIyBwcmUtcGFja2FnZWQgR3JlbWxpbiBTZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlcy4gIFRoZQotIyBjbGllbnQgY29uZmlndXJhdGlvbiBmb3Igc2VyaWFsaXplcnMgc2hvdWxkIG1hdGNoIHNlcnZlci4KLSMKLSMgVGhpcyBmaWxlIHdpbGwgd29yayB3aXRoOgotIyAtIGdyZW1saW4tc2VydmVyLnlhbWwKLSMgLSBncmVtbGluLXNlcnZlci1jbGFzc2ljLnlhbWwKLSMgLSBncmVtbGluLXNlcnZlci1tb2Rlcm4ueWFtbAotIyAtIGdyZW1saW4tc2VydmVyLW1vZGVybi1weS55YW1sCi0jIC0gZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLXJlYWRvbmx5LnlhbWwKLSMgLSBncmVtbGluLXNlcnZlci1uZW80ai55YW1sCi0jIC0gZ3JlbWxpbi1zZXJ2ZXItc3BhcmsueWFtbAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaG9zdHM6IFtsb2NhbGhvc3RdCi1wb3J0OiA4MTgyCi1zZXJpYWxpemVyOiB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9jb25mL3JlbW90ZS1zZWN1cmUueWFtbCBiL2dyZW1saW4tY29uc29sZS9jb25mL3JlbW90ZS1zZWN1cmUueWFtbAppbmRleCA2MWNlMDBmLi45MzYwMzE1IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvY29uZi9yZW1vdGUtc2VjdXJlLnlhbWwKKysrIGIvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLXNlY3VyZS55YW1sCkBAIC0xNyw4ICsxNyw3IEBACiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFRoaXMgY29uZmlndXJhdGlvbiBpcyBtZWFudCB0byBoYXZlIEdyZW1saW4gU2VydmVyIHJldHVybgotIyB0ZXh0IHNlcmlhbGl6ZWQgb2JqZWN0cy4gVGhlIHNlcnZlciB3aWxsIHRvU3RyaW5nKCkKLSMgcmVzdWx0cyBnaXZpbmcgYSB2aWV3IGludG8gaG93IHNjcmlwdHMgYXJlIGV4ZWN1dGluZy4KKyMgc2VyaWFsaXplZCBvYmplY3RzLgogIwogIyBUaGlzIGZpbGUgd2lsbCB3b3JrIHdpdGg6CiAjIC0gZ3JlbWxpbi1zZXJ2ZXItc2VjdXJlLnlhbWwKQEAgLTI2LDkgKzI1LDExIEBACiAKIGhvc3RzOiBbbG9jYWxob3N0XQogcG9ydDogODE4MgotdXNlcm5hbWU6IHN0ZXBoZW4KLXBhc3N3b3JkOiBwYXNzd29yZAorYXV0aDogeworICB0eXBlOiBiYXNpYywKKyAgdXNlcm5hbWU6IHN0ZXBoZW4sCisgIHBhc3N3b3JkOiBwYXNzd29yZCB9CiBjb25uZWN0aW9uUG9vbDogewogICBlbmFibGVTc2w6IHRydWUsCiAgIHNzbEVuYWJsZWRQcm90b2NvbHM6IFtUTFN2MS4yXSB9Ci1zZXJpYWxpemVyOiB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEsIGNvbmZpZzogeyBzZXJpYWxpemVSZXN1bHRUb1N0cmluZzogdHJ1ZSB9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3NlcmlhbGl6ZXI6IHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvY29uZi9yZW1vdGUtc2lndjQueWFtbCBiL2dyZW1saW4tY29uc29sZS9jb25mL3JlbW90ZS1zaWd2NC55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmMzMjQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWNvbnNvbGUvY29uZi9yZW1vdGUtc2lndjQueWFtbApAQCAtMCwwICsxLDMxIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgY29uZmlndXJhdGlvbiBpcyBtZWFudCB0byBoYXZlIEdyZW1saW4gU2VydmVyIHdpdGgKKyMgc2lndjQgYXV0aGVudGljYXRpb24uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitob3N0czogW2xvY2FsaG9zdF0KK3BvcnQ6IDgxODIKK2F1dGg6IHsKKyAgdHlwZTogc2lndjQsCisgIHJlZ2lvbjogdXMtd2VzdDEgfQorY29ubmVjdGlvblBvb2w6IHsKKyAgZW5hYmxlU3NsOiB0cnVlLAorICBzc2xFbmFibGVkUHJvdG9jb2xzOiBbVExTdjEuMl0gfQorc2VyaWFsaXplcjogeyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9jb25mL3JlbW90ZS55YW1sIGIvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLnlhbWwKaW5kZXggZTBhYzVjMC4uNzU2NTlkNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLnlhbWwKKysrIGIvZ3JlbWxpbi1jb25zb2xlL2NvbmYvcmVtb3RlLnlhbWwKQEAgLTE3LDE4ICsxNywxNSBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgbWVhbnQgdG8gaGF2ZSBHcmVtbGluIFNlcnZlciByZXR1cm4KLSMgdGV4dCBzZXJpYWxpemVkIG9iamVjdHMuIFRoZSBzZXJ2ZXIgd2lsbCB0b1N0cmluZygpCi0jIHJlc3VsdHMgZ2l2aW5nIGEgdmlldyBpbnRvIGhvdyBzY3JpcHRzIGFyZSBleGVjdXRpbmcuCisjIHNlcmlhbGl6ZWQgb2JqZWN0cy4KICMKICMgVGhpcyBmaWxlIHdpbGwgd29yayB3aXRoOgogIyAtIGdyZW1saW4tc2VydmVyLnlhbWwKICMgLSBncmVtbGluLXNlcnZlci1jbGFzc2ljLnlhbWwKICMgLSBncmVtbGluLXNlcnZlci1tb2Rlcm4ueWFtbAotIyAtIGdyZW1saW4tc2VydmVyLW1vZGVybi1weS55YW1sCiAjIC0gZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLXJlYWRvbmx5LnlhbWwKLSMgLSBncmVtbGluLXNlcnZlci1zcGFyay55YW1sCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBob3N0czogW2xvY2FsaG9zdF0KIHBvcnQ6IDgxODIKLXNlcmlhbGl6ZXI6IHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSwgY29uZmlnOiB7IHNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nOiB0cnVlIH19CitzZXJpYWxpemVyOiB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjR9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvcG9tLnhtbCBiL2dyZW1saW4tY29uc29sZS9wb20ueG1sCmluZGV4IDI5NDhkNjkuLmMxNjdjMDggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29uc29sZS9wb20ueG1sCisrKyBiL2dyZW1saW4tY29uc29sZS9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tY29uc29sZTwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gQ29uc29sZTwvbmFtZT4KQEAgLTM5LDEwICszOSw2IEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJncmFwaC1ncmVtbGluPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5odHRwY29tcG9uZW50czwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHBjbGllbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPCEtLSBjb21tb25zLWNvZGVjIGlzIGEgZGVwZW5kZW5jeSBvZiBodHRwY2xpZW50IC0gZXhjbHVkZWQgaW4gcm9vdCBwb20gdG8gYnJpbmcgYWxsIGNvbW1vbnMtY29kZWMgdmVyc2lvbnMgaW5saW5lIC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtY29kZWM8L2dyb3VwSWQ+CkBAIC02MSw3ICs1Nyw3IEBACiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmZ1c2Vzb3VyY2UuamFuc2k8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYW5zaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTcuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNC4xPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDwhLS0gVEVTVElORyAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC0yMzUsNiArMjMxLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2hhZGVkUGF0dGVybj5pby5zaGFkZWQubmV0dHk8L3NoYWRlZFBhdHRlcm4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsb2NhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlbG9jYXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZXhjbHVkZSBqZGsyMSBjbGFzc2VzIGZvciBub3cgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3Q+Y2gucW9zLmxvZ2JhY2s6bG9nYmFjay1jb3JlPC9hcnRpZmFjdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz52ZXJzaW9ucy8yMS8qKjwvZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsdGVycz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXJzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5BcGFjaGVMaWNlbnNlUmVzb3VyY2VUcmFuc2Zvcm1lciI+PC90cmFuc2Zvcm1lcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVyIGltcGxlbWVudGF0aW9uPSJvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMuc2hhZGUucmVzb3VyY2UuRG9udEluY2x1ZGVSZXNvdXJjZVRyYW5zZm9ybWVyIj4KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9iaW4vZ3JlbWxpbi5zaCBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9iaW4vZ3JlbWxpbi5zaAppbmRleCBiNGM1MGY4Li4yY2QzM2NiIDEwMDc1NQotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vYmluL2dyZW1saW4uc2gKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2Jpbi9ncmVtbGluLnNoCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICBzZXQgLXgKIGZpCiAKLSMgVHJ5IHRvIGRldGVjdCBKREsgdmVyc2lvbiBhbmQgYWRkIHNwZWNpZmljIGZsYWcgZm9yIEpESyAxNyB0byBhbGxvdyB1c2Ugb2YgbmVvNGotZ3JlbWxpbgorIyBEZXRlY3QgSkRLIHZlcnNpb24gYW5kIGFkZCBzcGVjaWZpYyBmbGFncyBmb3IgSkRLIDE3CiBKQVZBX1ZFUlNJT049JCgkSkFWQSAtdmVyc2lvbiAyPiYxIHwgYXdrIC1GICciJyAnL3ZlcnNpb24vIHtwcmludCAkMn0nKQogaWYgW1sgIiRKQVZBX1ZFUlNJT04iID09IDE3KiBdXTsgdGhlbgogICAgIEpWTV9PUFRTKz0oICItLWFkZC1vcGVucz1qYXZhLmJhc2Uvc3VuLm5pby5jaD1BTEwtVU5OQU1FRCIgKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2V4dC9wbHVnaW5zLnR4dCBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9leHQvcGx1Z2lucy50eHQKaW5kZXggN2ViMmIyMy4uY2FhODAyMSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2V4dC9wbHVnaW5zLnR4dAorKysgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZXh0L3BsdWdpbnMudHh0CkBAIC0xLDMgKzEsMyBAQAotb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMy5Ecml2ZXJHcmVtbGluUGx1Z2luCitvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuanNyMjIzLlJlbW90ZUdyZW1saW5QbHVnaW4KIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjMuVXRpbGl0aWVzR3JlbWxpblBsdWdpbgogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5qc3IyMjMuVGlua2VyR3JhcGhHcmVtbGluUGx1Z2luClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvQ29uc29sZS5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9Db25zb2xlLmdyb292eQppbmRleCBkN2ZkOWNkLi44MWY0ZGQ0IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9Db25zb2xlLmdyb292eQorKysgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9Db25zb2xlLmdyb292eQpAQCAtMjIsMjQgKzIyLDE5IEBACiBpbXBvcnQgZ3Jvb3Z5LmNsaS5waWNvY2xpLk9wdGlvbkFjY2Vzc29yCiBpbXBvcnQgamxpbmUuVGVybWluYWxGYWN0b3J5CiBpbXBvcnQgamxpbmUuY29uc29sZS5oaXN0b3J5LkZpbGVIaXN0b3J5Ci0KIGltcG9ydCBvcmcuYXBhY2hlLmdyb292eS5ncm9vdnlzaC5FeGl0Tm90aWZpY2F0aW9uCiBpbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guR3Jvb3Z5c2gKIGltcG9ydCBvcmcuYXBhY2hlLmdyb292eS5ncm9vdnlzaC5JbnRlcmFjdGl2ZVNoZWxsUnVubmVyCiBpbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guY29tbWFuZHMuU2V0Q29tbWFuZAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcy5CeXRlY29kZUNvbW1hbmQKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuY29tbWFuZHMuQ2xzQ29tbWFuZAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcy5HcmVtbGluU2V0Q29tbWFuZAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcy5JbnN0YWxsQ29tbWFuZAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcy5QbHVnaW5Db21tYW5kCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmNvbW1hbmRzLlJlbW90ZUNvbW1hbmQKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuY29tbWFuZHMuU3VibWl0Q29tbWFuZAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcy5Vbmluc3RhbGxDb21tYW5kCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkubG9hZGVycy5HcmVtbGluTG9hZGVyCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuQ29yZUdyZW1saW5QbHVnaW4KIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluUGx1Z2luCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0Q3VzdG9taXplcgotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlRXhjZXB0aW9uCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5GYWlsdXJlCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXIKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5UcmF2ZXJzZXJSZXF1aXJlbWVudApAQCAtNTMsNyArNDgsNiBAQAogaW1wb3J0IG9yZy5mdXNlc291cmNlLmphbnNpLkFuc2kKIGltcG9ydCBzdW4ubWlzYy5TaWduYWwKIGltcG9ydCBzdW4ubWlzYy5TaWduYWxIYW5kbGVyCi0KIC8qKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCkBAIC04MCw3ICs3NCw3IEBACiAgICAgICAgICAgICBpby5vdXQucHJpbnRsbigpCiAgICAgICAgICAgICBpby5vdXQucHJpbnRsbigiICAgICAgICAgIiArIENvbG9yaXplci5yZW5kZXIoUHJlZmVyZW5jZXMuZ3JlbWxpbkNvbG9yLCAiXFwsLCwvIikpCiAgICAgICAgICAgICBpby5vdXQucHJpbnRsbigiICAgICAgICAgIiArIENvbG9yaXplci5yZW5kZXIoUHJlZmVyZW5jZXMuZ3JlbWxpbkNvbG9yLCAiKG8gbykiKSkKLSAgICAgICAgICAgIGlvLm91dC5wcmludGxuKCIiICsgQ29sb3JpemVyLnJlbmRlcihQcmVmZXJlbmNlcy5ncmVtbGluQ29sb3IsICItLS0tLW9PT28tKDMpLW9PT28tLS0tLSIpKQorICAgICAgICAgICAgaW8ub3V0LnByaW50bG4oIiIgKyBDb2xvcml6ZXIucmVuZGVyKFByZWZlcmVuY2VzLmdyZW1saW5Db2xvciwgIi0tLS0tb09Pby0oIiArIEdyZW1saW4ubWFqb3JWZXJzaW9uKCkgKyAiKS1vT09vLS0tLS0iKSkKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIE1lZGlhdG9yIG1lZGlhdG9yID0gbmV3IE1lZGlhdG9yKHRoaXMpCkBAIC0xMDgsOSArMTAyLDYgQEAKICAgICAgICAgZ3Jvb3Z5LnJlZ2lzdGVyKG5ldyBVbmluc3RhbGxDb21tYW5kKGdyb292eSwgbWVkaWF0b3IpKQogICAgICAgICBncm9vdnkucmVnaXN0ZXIobmV3IEluc3RhbGxDb21tYW5kKGdyb292eSwgbWVkaWF0b3IpKQogICAgICAgICBncm9vdnkucmVnaXN0ZXIobmV3IFBsdWdpbkNvbW1hbmQoZ3Jvb3Z5LCBtZWRpYXRvcikpCi0gICAgICAgIGdyb292eS5yZWdpc3RlcihuZXcgUmVtb3RlQ29tbWFuZChncm9vdnksIG1lZGlhdG9yKSkKLSAgICAgICAgZ3Jvb3Z5LnJlZ2lzdGVyKG5ldyBTdWJtaXRDb21tYW5kKGdyb292eSwgbWVkaWF0b3IpKQotICAgICAgICBncm9vdnkucmVnaXN0ZXIobmV3IEJ5dGVjb2RlQ29tbWFuZChncm9vdnksIG1lZGlhdG9yKSkKICAgICAgICAgZ3Jvb3Z5LnJlZ2lzdGVyKG5ldyBDbHNDb21tYW5kKGdyb292eSwgbWVkaWF0b3IpKQogCiAgICAgICAgIC8vIGhpZGUgb3V0cHV0IHRlbXBvcmFyaWx5IHdoaWxlIGltcG9ydHMgZXhlY3V0ZQpAQCAtMTQ1LDYgKzEzNiw3IEBACiAgICAgICAgICAgICAgICAgZGVmIHBsdWdnZWRJbiA9IG5ldyBQbHVnZ2VkSW4oKEdyZW1saW5QbHVnaW4pIHBsdWdpbiwgZ3Jvb3Z5LCBpbywgZmFsc2UpCiAKICAgICAgICAgICAgICAgICBtZWRpYXRvci5hdmFpbGFibGVQbHVnaW5zLnB1dChwbHVnaW4uY2xhc3MubmFtZSwgcGx1Z2dlZEluKQorICAgICAgICAgICAgICAgIHBsdWdnZWRJbi5hY3RpdmF0ZSgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzk0LDEyICszODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW8uZXJyLnByaW50KGxpbmUudHJpbSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgaW8uZXJyLnByaW50bG4oKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpLmVxdWFscygieSIpIHx8IGxpbmUudHJpbSgpLmVxdWFscygiWSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFJlbW90ZUV4Y2VwdGlvbiAmJiBlcnIucmVtb3RlU3RhY2tUcmFjZS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpby5lcnIucHJpbnQoZXJyLnJlbW90ZVN0YWNrVHJhY2UuZ2V0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvLmVyci5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoaW8uZXJyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShpby5lcnIpCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShpby5lcnIpCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9HcmVtbGluR3Jvb3Z5c2guZ3Jvb3Z5IGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvR3JlbWxpbkdyb292eXNoLmdyb292eQppbmRleCBlNWQzODUyLi5kZmJmNDI3IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9HcmVtbGluR3Jvb3Z5c2guZ3Jvb3Z5CisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL0dyZW1saW5Hcm9vdnlzaC5ncm9vdnkKQEAgLTIzLDEwICsyMywxMSBAQAogaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLkdyb292eXNoCiBpbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guUGFyc2VDb2RlCiBpbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guUGFyc2VyCi1pbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guUGFyc2luZwogaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLnV0aWwuQ29tbWFuZEFyZ3VtZW50UGFyc2VyCitpbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2gudXRpbC5TY3JpcHRWYXJpYWJsZUFuYWx5emVyCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmNvbW1hbmRzLkdyZW1saW5TZXRDb21tYW5kCiBpbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5jb250cm9sLkNvbXBpbGVyQ29uZmlndXJhdGlvbgoraW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuY29udHJvbC5NdWx0aXBsZUNvbXBpbGF0aW9uRXJyb3JzRXhjZXB0aW9uCiBpbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5jb250cm9sLmN1c3RvbWl6ZXJzLkFTVFRyYW5zZm9ybWF0aW9uQ3VzdG9taXplcgogaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkudG9vbHMuc2hlbGwuSU8KIApAQCAtNDEsNyArNDIsNiBAQAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIENvbXBpbGVyQ29uZmlndXJhdGlvbiBjb21waWxlckNvbmZpZyA9IG5ldyBDb21waWxlckNvbmZpZ3VyYXRpb24oQ29tcGlsZXJDb25maWd1cmF0aW9uLkRFRkFVTFQpIHt7CiAgICAgICAgIGFkZENvbXBpbGF0aW9uQ3VzdG9taXplcnMobmV3IEFTVFRyYW5zZm9ybWF0aW9uQ3VzdG9taXplcihUaHJlYWRJbnRlcnJ1cHQuY2xhc3MpKQogICAgIH19Ci0gICAgcHJpdmF0ZSBQYXJzaW5nIHJlbW90ZVBhcnNlciA9IG5ldyBMb2NhbFNhZmVQYXJzZXIoKQogCiAgICAgcHVibGljIEdyZW1saW5Hcm9vdnlzaChmaW5hbCBNZWRpYXRvciBtZWRpYXRvciwgZmluYWwgSU8gaW8pIHsKICAgICAgICAgc3VwZXIoaW8sIGNvbXBpbGVyQ29uZmlnKQpAQCAtODMsNjUgKzgzLDkgQEAKICAgICAgICAgbWVkaWF0b3IuZXZhbHVhdGluZy5zZXQodHJ1ZSkKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG1lZGlhdG9yLmxvY2FsRXZhbHVhdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZXhlY3V0ZShsaW5lKQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGxpbmUgIT0gbnVsbAotICAgICAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKS5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbAotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1heWJlUmVjb3JkSW5wdXQobGluZSkKLQotICAgICAgICAgICAgICAgIE9iamVjdCByZXN1bHQKLQotICAgICAgICAgICAgICAgIGlmIChpc0V4ZWN1dGFibGUobGluZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZXhlY3V0ZUNvbW1hbmQobGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSBzZXRMYXN0UmVzdWx0KHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBjdXJyZW50ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGJ1ZmZlcnMuY3VycmVudCgpKQotICAgICAgICAgICAgICAgIGN1cnJlbnQgPDwgbGluZQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGltcG9ydHNTcGVjID0gdGhpcy5nZXRJbXBvcnRTdGF0ZW1lbnRzKCkKLQotICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSBpZiB0aGlzIHNjcmlwdCBpcyBjb21wbGV0ZSBvciBub3QgLSBpZiBub3QgaXQncyBhIG11bHRpbGluZSBzY3JpcHQKLSAgICAgICAgICAgICAgICBkZWYgc3RhdHVzID0gcmVtb3RlUGFyc2VyLnBhcnNlKFtpbXBvcnRzU3BlY10gKyBjdXJyZW50KQotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0dXMuY29kZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcnNlQ29kZS5DT01QTEVURToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbmNhdCBzY3JpcHQgaGVyZSBiZWNhdXNlIGNvbW1hbmRzIGRvbid0IHN1cHBvcnQgbXVsdGktbGluZQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHNjcmlwdCA9IFN0cmluZy5qb2luKFBhcnNlci5nZXRORVdMSU5FKCksIGN1cnJlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXRMYXN0UmVzdWx0KG1lZGlhdG9yLmN1cnJlbnRSZW1vdGUoKS5zdWJtaXQoW3NjcmlwdF0pKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycy5jbGVhclNlbGVjdGVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgUGFyc2VDb2RlLklOQ09NUExFVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzLnVwZGF0ZVNlbGVjdGVkKGN1cnJlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYXNlIFBhcnNlQ29kZS5FUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0YXR1cy5jYXVzZQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGhhcHBlbgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHBhcnNlIHN0YXR1czogJHN0YXR1cy5jb2RlIikKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VwZXIuZXhlY3V0ZShsaW5lKQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgbWVkaWF0b3IuZXZhbHVhdGluZy5zZXQoZmFsc2UpCiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0TGFzdFJlc3VsdChmaW5hbCBPYmplY3QgcmVzdWx0KSB7Ci0gICAgICAgIGlmIChyZXN1bHRIb29rID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oJ1Jlc3VsdCBob29rIGlzIG5vdCBzZXQnKQotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0SG9vay5jYWxsKChPYmplY3QpcmVzdWx0KQotCi0gICAgICAgIGludGVycC5jb250ZXh0WydfJ10gPSByZXN1bHQKLQotICAgICAgICBtYXliZVJlY29yZFJlc3VsdChyZXN1bHQpCi0gICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvTG9jYWxTYWZlUGFyc2VyLmdyb292eSBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL0xvY2FsU2FmZVBhcnNlci5ncm9vdnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YjA1NWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvTG9jYWxTYWZlUGFyc2VyLmdyb292eQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUKLQotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLlBhcnNlQ29kZQotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLlBhcnNlU3RhdHVzCi1pbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guUGFyc2luZwotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuY29udHJvbC5Db21waWxlckNvbmZpZ3VyYXRpb24KLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmNvbnRyb2wuTXVsdGlwbGVDb21waWxhdGlvbkVycm9yc0V4Y2VwdGlvbgotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuY29udHJvbC5tZXNzYWdlcy5NZXNzYWdlCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5jb250cm9sLm1lc3NhZ2VzLlN5bnRheEVycm9yTWVzc2FnZQotCi0vKioKLSAqIEEge0BsaW5rIFBhcnNpbmd9IGltcGxlbWVudGF0aW9uIHRoYXQgZGV0ZWN0cyBpZiBhIEdyb292eSBzY3JpcHQgaXMgY29tcGxldGUgb3IgaW5jb21wbGV0ZS4gVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzCi0gKiB0aGUgR3Jvb3Z5IGNvbXBpbGVyIHRvIHRyeSB0byBjb21waWxlIHRoZSBzY3JpcHQgYW5kIGFuYWx5emVzIGFueSBjb21waWxhdGlvbiBlcnJvcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzY3JpcHQgaXMKLSAqIGluY29tcGxldGUuIEl0IGRvZXMgbm90IGV2YWx1YXRlIHRoZSBzY3JpcHQsIHdoaWNoIHByZXZlbnRzIGxvY2FsIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsIGxvY2FsIGZhaWx1cmUuCi0gKi8KLWNsYXNzIExvY2FsU2FmZVBhcnNlciBpbXBsZW1lbnRzIFBhcnNpbmcgewotCi0gICAgLy8gVHJ5IHRvIGNvbXBpbGUgdGhlIHNjcmlwdAotICAgIHByaXZhdGUgZmluYWwgQ29tcGlsZXJDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBDb21waWxlckNvbmZpZ3VyYXRpb24oKQotCi0gICAgLy8gQ3JlYXRlIGEgY3VzdG9tIEdyb292eUNsYXNzTG9hZGVyIHRoYXQgZG9lc24ndCB3cml0ZSBjbGFzcyBmaWxlcwotICAgIHByaXZhdGUgZmluYWwgR3Jvb3Z5Q2xhc3NMb2FkZXIgZ2NsID0gbmV3IEdyb292eUNsYXNzTG9hZGVyKHRoaXMuY2xhc3MuY2xhc3NMb2FkZXIsIGNvbmZpZykgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIENsYXNzIGRlZmluZUNsYXNzKFN0cmluZyBuYW1lLCBieXRlW10gYnl0ZXMpIHsKLSAgICAgICAgICAgIC8vIFNraXAgd3JpdGluZyB0byBkaXNrLCBqdXN0IGRlZmluZSB0aGUgY2xhc3MgaW4gbWVtb3J5Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIuZGVmaW5lQ2xhc3MobmFtZSwgYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCkKLSAgICAgICAgfQotICAgIH0KLSAgICAvKioKLSAgICAgKiBQYXJzZSB0aGUgZ2l2ZW4gYnVmZmVyIGFuZCBkZXRlcm1pbmUgaWYgaXQncyBhIGNvbXBsZXRlIEdyb292eSBzY3JpcHQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnVmZmVyIFRoZSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBzY3JpcHQgbGluZXMKLSAgICAgKiBAcmV0dXJuIEEgUGFyc2VTdGF0dXMgaW5kaWNhdGluZyBpZiB0aGUgc2NyaXB0IGlzIGNvbXBsZXRlLCBpbmNvbXBsZXRlLCBvciBoYXMgZXJyb3JzCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgUGFyc2VTdGF0dXMgcGFyc2UoQ29sbGVjdGlvbjxTdHJpbmc+IGJ1ZmZlcikgewotICAgICAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJzZVN0YXR1cyhQYXJzZUNvZGUuQ09NUExFVEUpCi0gICAgICAgIH0KLQotICAgICAgICAvLyBqb2luIHRoZSBidWZmZXIgbGluZXMgaW50byBhIHNpbmdsZSBzY3JpcHQKLSAgICAgICAgZGVmIHNjcmlwdCA9IGJ1ZmZlci5qb2luKCdcbicpCi0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBzY3JpcHQgd2l0aG91dCBnZW5lcmF0aW5nIC5jbGFzcyBmaWxlcwotICAgICAgICAgICAgZ2NsLnBhcnNlQ2xhc3Moc2NyaXB0KQotICAgICAgICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHRoZSBzY3JpcHQgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFBhcnNlU3RhdHVzKFBhcnNlQ29kZS5DT01QTEVURSkKLSAgICAgICAgfSBjYXRjaCAoTXVsdGlwbGVDb21waWxhdGlvbkVycm9yc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZXJyb3JzIGluZGljYXRlIGFuIGluY29tcGxldGUgc2NyaXB0Ci0gICAgICAgICAgICBpZiAoaXNJbmNvbXBsZXRlU2NyaXB0KGUpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJzZVN0YXR1cyhQYXJzZUNvZGUuSU5DT01QTEVURSkKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gT3RoZXIgY29tcGlsYXRpb24gZXJyb3JzCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJzZVN0YXR1cyhQYXJzZUNvZGUuRVJST1IsIGUpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBBbnkgb3RoZXIgZXhjZXB0aW9uIGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IKLSAgICAgICAgICAgIHJldHVybiBuZXcgUGFyc2VTdGF0dXMoUGFyc2VDb2RlLkVSUk9SLCBlKQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lIGlmIHRoZSBjb21waWxhdGlvbiBlcnJvcnMgaW5kaWNhdGUgYW4gaW5jb21wbGV0ZSBzY3JpcHQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZSBUaGUgY29tcGlsYXRpb24gZXJyb3JzIGV4Y2VwdGlvbgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2NyaXB0IGlzIGluY29tcGxldGUsIGZhbHNlIG90aGVyd2lzZQotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0luY29tcGxldGVTY3JpcHQoTXVsdGlwbGVDb21waWxhdGlvbkVycm9yc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIGRlZiBlcnJvckNvbGxlY3RvciA9IGUuZXJyb3JDb2xsZWN0b3IKLQotICAgICAgICBmb3IgKE1lc3NhZ2UgbWVzc2FnZSA6IGVycm9yQ29sbGVjdG9yLmVycm9ycykgewotICAgICAgICAgICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBTeW50YXhFcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgICAgICBkZWYgc3ludGF4RXhjZXB0aW9uID0gbWVzc2FnZS5jYXVzZQotICAgICAgICAgICAgICAgIGRlZiBlcnJvck1lc3NhZ2UgPSBzeW50YXhFeGNlcHRpb24ubWVzc2FnZQotCi0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbW1vbiBpbmRpY2F0b3JzIG9mIGluY29tcGxldGUgc2NyaXB0cwotICAgICAgICAgICAgICAgIGlmIChpc1VuZXhwZWN0ZWRFT0YoZXJyb3JNZXNzYWdlKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmNsb3NlZEJyYWNrZXQoZXJyb3JNZXNzYWdlKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmNsb3NlZFN0cmluZyhlcnJvck1lc3NhZ2UpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc1VuZXhwZWN0ZWRJbnB1dChlcnJvck1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIGFuIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzVW5leHBlY3RlZEVPRihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGVycm9yTWVzc2FnZS5jb250YWlucygndW5leHBlY3RlZCBlbmQgb2YgZmlsZScpIHx8Ci0gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCdVbmV4cGVjdGVkIEVPRicpCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIGFuIHVuY2xvc2VkIGJyYWNrZXQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzVW5jbG9zZWRCcmFja2V0KFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCJNaXNzaW5nICd9JyIpIHx8Ci0gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCJNaXNzaW5nICcpJyIpIHx8Ci0gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCJNaXNzaW5nICddJyIpCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIGFuIHVuY2xvc2VkIHN0cmluZy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNVbmNsb3NlZFN0cmluZyhTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGVycm9yTWVzc2FnZS5jb250YWlucygnU3RyaW5nIGxpdGVyYWwgaXMgbm90IHRlcm1pbmF0ZWQnKSB8fAotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZS5jb250YWlucygnVW50ZXJtaW5hdGVkIHN0cmluZyBsaXRlcmFsJykKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayBpZiB0aGUgZXJyb3IgbWVzc2FnZSBpbmRpY2F0ZXMgdW5leHBlY3RlZCBpbnB1dCB0aGF0IG1pZ2h0IHN1Z2dlc3QKLSAgICAgKiBhbiBpbmNvbXBsZXRlIHNjcmlwdCByYXRoZXIgdGhhbiBhIHN5bnRheCBlcnJvci4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNVbmV4cGVjdGVkSW5wdXQoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgICAgICAvLyBDaGVjayBmb3IgdW5leHBlY3RlZCBpbnB1dCBidXQgZXhjbHVkZSBjYXNlcyB3aGVyZSBjbG9zaW5nIGJyYWNrZXRzIGFyZSB1bmV4cGVjdGVkCi0gICAgICAgIC8vIGFzIHRob3NlIHR5cGljYWxseSBpbmRpY2F0ZSBzeW50YXggZXJyb3JzIHJhdGhlciB0aGFuIGluY29tcGxldGUgc2NyaXB0cwotICAgICAgICAoZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCdVbmV4cGVjdGVkIGlucHV0OiAnKSB8fAotICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZS5jb250YWlucygnVW5leHBlY3RlZCBjaGFyYWN0ZXI6ICcpKSAmJgotICAgICAgICAgICAgICAgICEoZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCJVbmV4cGVjdGVkIGlucHV0OiAnfSciKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCJVbmV4cGVjdGVkIGlucHV0OiAnKSciKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLmNvbnRhaW5zKCJVbmV4cGVjdGVkIGlucHV0OiAnXSciKSkKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9NZWRpYXRvci5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9NZWRpYXRvci5ncm9vdnkKaW5kZXggMTQ5MGE4ZC4uNDVhMmIzNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvTWVkaWF0b3IuZ3Jvb3Z5CisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL01lZGlhdG9yLmdyb292eQpAQCAtMTgsOCArMTgsNiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZQogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVBY2NlcHRvcgotCiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW4KIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscwpAQCAtMjksOSArMjcsNiBAQAogICovCiBjbGFzcyBNZWRpYXRvciB7CiAgICAgcHVibGljIGZpbmFsIE1hcDxTdHJpbmcsIFBsdWdnZWRJbj4gYXZhaWxhYmxlUGx1Z2lucyA9IFs6XQotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFJlbW90ZUFjY2VwdG9yPiByZW1vdGVzID0gW10KLSAgICBwdWJsaWMgaW50IHBvc2l0aW9uCi0gICAgcHVibGljIGJvb2xlYW4gbG9jYWxFdmFsdWF0aW9uID0gdHJ1ZQogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lcyB3aGVuIHRoZSBDb25zb2xlIGlzIGV2YWx1YXRpbmcvaXRlcmF0aW5nIGlucHV0L3Jlc3VsdC4KQEAgLTUwLDMyICs0NSw2IEBACiAgICAgICAgIHRoaXMuY29uc29sZSA9IGNvbnNvbGUKICAgICB9CiAKLSAgICBwdWJsaWMgUmVtb3RlQWNjZXB0b3IgY3VycmVudFJlbW90ZSgpIHsgcmV0dXJuIHJlbW90ZXMuZ2V0KHBvc2l0aW9uKSB9Ci0KLSAgICBkZWYgYWRkUmVtb3RlKGZpbmFsIFJlbW90ZUFjY2VwdG9yIHJlbW90ZSkgewotICAgICAgICByZW1vdGVzLmFkZChyZW1vdGUpCi0gICAgICAgIHBvc2l0aW9uID0gcmVtb3Rlcy5zaXplKCkgLSAxCi0gICAgICAgIHJldHVybiByZW1vdGUKLSAgICB9Ci0KLSAgICBkZWYgcmVtb3ZlQ3VycmVudCgpIHsKLSAgICAgICAgZmluYWwgUmVtb3RlQWNjZXB0b3IgdG9SZW1vdmUgPSByZW1vdGVzLnJlbW92ZShwb3NpdGlvbikKLSAgICAgICAgcG9zaXRpb24gPSAwCi0gICAgICAgIHJldHVybiB0b1JlbW92ZQotICAgIH0KLQotICAgIGRlZiBSZW1vdGVBY2NlcHRvciBuZXh0UmVtb3RlKCkgewotICAgICAgICBwb3NpdGlvbisrCi0gICAgICAgIGlmIChwb3NpdGlvbiA+PSByZW1vdGVzLnNpemUoKSkgcG9zaXRpb24gPSAwCi0gICAgICAgIHJldHVybiBjdXJyZW50UmVtb3RlKCkKLSAgICB9Ci0KLSAgICBkZWYgUmVtb3RlQWNjZXB0b3IgcHJldmlvdXNSZW1vdGUoKSB7Ci0gICAgICAgIHBvc2l0aW9uLS0KLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkgcG9zaXRpb24gPSByZW1vdGVzLnNpemUoKSAtIDEKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRSZW1vdGUoKQotICAgIH0KLQogICAgIGRlZiBzaG93U2hlbGxFdmFsdWF0aW9uT3V0cHV0KGZpbmFsIGJvb2xlYW4gc2hvdykgewogICAgICAgICBjb25zb2xlLnNob3dTaGVsbEV2YWx1YXRpb25PdXRwdXQoc2hvdykKICAgICB9CkBAIC0xMTAsMTMgKzc5LDYgQEAKICAgICB9CiAKICAgICBkZWYgdm9pZCBjbG9zZSgpIHsKLSAgICAgICAgcmVtb3Rlcy5lYWNoIHsgcmVtb3RlIC0+Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJlbW90ZS5jbG9zZSgpCi0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewotCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgLy8gZG8gY2xlYW51cCBpZiBuZWVkZWQKICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL1BsdWdnZWRJbi5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9QbHVnZ2VkSW4uZ3Jvb3Z5CmluZGV4IDBjNDQzMTEuLjI2OGQ3YTIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL1BsdWdnZWRJbi5ncm9vdnkKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvUGx1Z2dlZEluLmdyb292eQpAQCAtMjMsMTEgKzIzLDggQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluUGx1Z2luCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0Q3VzdG9taXplcgogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLlNjcmlwdEN1c3RvbWl6ZXIKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLkNvbnNvbGVDdXN0b21pemVyCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5HcmVtbGluU2hlbGxFbnZpcm9ubWVudAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlQWNjZXB0b3IKIGltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LnRvb2xzLnNoZWxsLklPCi0KIC8qKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCkBAIC04MSwxNSArNzgsNiBAQAogICAgICAgICB0aGlzLmFjdGl2YXRlZCA9IGZhbHNlCiAgICAgfQogCi0gICAgT3B0aW9uYWw8UmVtb3RlQWNjZXB0b3I+IHJlbW90ZUFjY2VwdG9yKCkgewotICAgICAgICAvLyBmaW5kIGEgY29uc29sZUN1c3RvbWl6ZXIgaWYgYXZhaWxhYmxlCi0gICAgICAgIGlmICghcGx1Z2luLmdldEN1c3RvbWl6ZXJzKCJncmVtbGluLWdyb292eSIpLmlzUHJlc2VudCgpIHx8ICFwbHVnaW4uZ2V0Q3VzdG9taXplcnMoImdyZW1saW4tZ3Jvb3Z5IikuZ2V0KCkuYW55eyBpdCBpbnN0YW5jZW9mIENvbnNvbGVDdXN0b21pemVyIH0pCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuZW1wdHkoKQotCi0gICAgICAgIENvbnNvbGVDdXN0b21pemVyIGN1c3RvbWl6ZXIgPSAoQ29uc29sZUN1c3RvbWl6ZXIpIHBsdWdpbi5nZXRDdXN0b21pemVycygiZ3JlbWxpbi1ncm9vdnkiKS5nZXQoKS5maW5keyBpdCBpbnN0YW5jZW9mIENvbnNvbGVDdXN0b21pemVyIH0KLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mKGN1c3RvbWl6ZXIuZ2V0UmVtb3RlQWNjZXB0b3IobmV3IEdyb292eUdyZW1saW5TaGVsbEVudmlyb25tZW50KCkpKQotICAgIH0KLQogICAgIHB1YmxpYyBjbGFzcyBHcm9vdnlHcmVtbGluU2hlbGxFbnZpcm9ubWVudCBpbXBsZW1lbnRzIEdyZW1saW5TaGVsbEVudmlyb25tZW50IHsKIAogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2NvbW1hbmRzL0J5dGVjb2RlQ29tbWFuZC5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9CeXRlY29kZUNvbW1hbmQuZ3Jvb3Z5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDEyMDE4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2NvbW1hbmRzL0J5dGVjb2RlQ29tbWFuZC5ncm9vdnkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmNvbW1hbmRzCi0KLWltcG9ydCBvcmcuYXBhY2hlLmdyb292eS5ncm9vdnlzaC5Db21wbGV4Q29tbWFuZFN1cHBvcnQKLWltcG9ydCBvcmcuYXBhY2hlLmdyb292eS5ncm9vdnlzaC5Hcm9vdnlzaAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5NZWRpYXRvcgotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGUKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uSW9SZWdpc3RyeQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05WZXJzaW9uCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjMKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXIKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5tb2R1bGUuU2ltcGxlTW9kdWxlCi0KLS8qKgotICogQ29tbWFuZHMgdGhhdCBoZWxwIHdvcmsgd2l0aCBHcmVtbGluIGJ5dGVjb2RlLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotY2xhc3MgQnl0ZWNvZGVDb21tYW5kIGV4dGVuZHMgQ29tcGxleENvbW1hbmRTdXBwb3J0IHsKLQotICAgIHByaXZhdGUgZmluYWwgTWVkaWF0b3IgbWVkaWF0b3IKLQotICAgIHByaXZhdGUgT2JqZWN0TWFwcGVyIG1hcHBlcgotCi0gICAgcHVibGljIEJ5dGVjb2RlQ29tbWFuZChmaW5hbCBHcm9vdnlzaCBzaGVsbCwgZmluYWwgTWVkaWF0b3IgbWVkaWF0b3IpIHsKLSAgICAgICAgc3VwZXIoc2hlbGwsICI6Ynl0ZWNvZGUiLCAiOmJjIiwgWyJjb25maWciLCAiZnJvbSIsICJyZXNldCIsICJ0cmFuc2xhdGUiXSkKLSAgICAgICAgdGhpcy5tZWRpYXRvciA9IG1lZGlhdG9yCi0gICAgICAgIGRvX3Jlc2V0KCkKLSAgICB9Ci0KLSAgICBkZWYgT2JqZWN0IGRvX2NvbmZpZyA9IHsgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cyAtPgotICAgICAgICBkZWYgcmVzb2x2ZWRBcmdzID0gYXJndW1lbnRzLmNvbGxlY3R7c2hlbGwuaW50ZXJwLmNvbnRleHQuZ2V0VmFyaWFibGUoaXQpfQotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5pbml0TWFwcGVyKHJlc29sdmVkQXJncykKLSAgICAgICAgICAgIHJldHVybiAiQ29uZmlndXJlZCBieXRlY29kZSBzZXJpYWxpemVyIgotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0gICAgICAgICAgICByZXR1cm4gaWFlLm1lc3NhZ2UKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBkZWYgT2JqZWN0IGRvX2Zyb20gPSB7IExpc3Q8U3RyaW5nPiBhcmd1bWVudHMgLT4KLSAgICAgICAgbWVkaWF0b3Iuc2hvd1NoZWxsRXZhbHVhdGlvbk91dHB1dChmYWxzZSkKLSAgICAgICAgZGVmIGFyZ3MgPSBhcmd1bWVudHMuam9pbigiICIpCi0gICAgICAgIGRlZiB0cmF2ZXJzYWwgPSBhcmdzLnN0YXJ0c1dpdGgoIkAiKSA/IHNoZWxsLmludGVycC5jb250ZXh0LmdldFZhcmlhYmxlKGFyZ3Muc3Vic3RyaW5nKDEpKSA6IHNoZWxsLmV4ZWN1dGUoYXJncykKLSAgICAgICAgaWYgKCEodHJhdmVyc2FsIGluc3RhbmNlb2YgVHJhdmVyc2FsKSkKLSAgICAgICAgICAgIHJldHVybiAiQXJndW1lbnQgZG9lcyBub3QgcmVzb2x2ZSB0byBhIFRyYXZlcnNhbCBpbnN0YW5jZSwgd2FzOiAiICsgdHJhdmVyc2FsLmNsYXNzLnNpbXBsZU5hbWUKLQotICAgICAgICBtZWRpYXRvci5zaG93U2hlbGxFdmFsdWF0aW9uT3V0cHV0KHRydWUpCi0gICAgICAgIHJldHVybiBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHRyYXZlcnNhbC5hc0FkbWluKCkuYnl0ZWNvZGUpCi0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb190cmFuc2xhdGUgPSB7IExpc3Q8U3RyaW5nPiBhcmd1bWVudHMgLT4KLSAgICAgICAgZGVmIGcgPSBhcmd1bWVudHNbMF0KLSAgICAgICAgZGVmIGFyZ3MgPSBhcmd1bWVudHMuZHJvcCgxKS5qb2luKCIgIikKLSAgICAgICAgZGVmIGdyYXBoc29uID0gYXJncy5zdGFydHNXaXRoKCJAIikgPyBzaGVsbC5pbnRlcnAuY29udGV4dC5nZXRWYXJpYWJsZShhcmdzLnN1YnN0cmluZygxKSkgOiBhcmdzCi0gICAgICAgIHJldHVybiBHcm9vdnlUcmFuc2xhdG9yLm9mKGcpLnRyYW5zbGF0ZShtYXBwZXIucmVhZFZhbHVlKGdyYXBoc29uLCBCeXRlY29kZS5jbGFzcykpCi0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb19yZXNldCA9IHsgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cyAtPgotICAgICAgICBkZWYgKEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlciwgYm9vbGVhbiBsb2FkZWRUaW5rZXJHcmFwaCkgPSBjcmVhdGVEZWZhdWx0QnVpbGRlcigpCi0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuaW5pdE1hcHBlcihbYnVpbGRlci5jcmVhdGUoKV0pCi0gICAgICAgICAgICByZXR1cm4gIkJ5dGVjb2RlIHNlcmlhbGl6ZXIgcmVzZXQgdG8gR3JhcGhTT04gMy4wIHdpdGggZXh0ZW5zaW9ucyIgKwotICAgICAgICAgICAgICAgICAgICAobG9hZGVkVGlua2VyR3JhcGggPyAiIGFuZCBUaW5rZXJHcmFwaCBzZXJpYWxpemVycyIgOiAiIikKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgewotICAgICAgICAgICAgcmV0dXJuIGlhZS5tZXNzYWdlCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGRlZiBzdGF0aWMgY3JlYXRlRGVmYXVsdEJ1aWxkZXIoKSB7Ci0gICAgICAgIGRlZiBidWlsZGVyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS4KLSAgICAgICAgICAgICAgICBhZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKSkuCi0gICAgICAgICAgICAgICAgdmVyc2lvbihHcmFwaFNPTlZlcnNpb24uVjNfMCkKLQotICAgICAgICBkZWYgbG9hZGVkVGlua2VyR3JhcGggPSBmYWxzZQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZGVmIHRpbmtlcmdyYXBoSW9SZWdpc3RyeSA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWM2QwIikKLSAgICAgICAgICAgIGJ1aWxkZXIuYWRkUmVnaXN0cnkodGlua2VyZ3JhcGhJb1JlZ2lzdHJ5LiJpbnN0YW5jZSIoKSkKLSAgICAgICAgICAgIGxvYWRlZFRpbmtlckdyYXBoID0gdHJ1ZQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewotICAgICAgICAgICAgLy8gb2sgdG8gc2tpcCBpZiB0aGUgcmVnaXN0cnkgaXNuJ3QgcHJlc2VudAotICAgICAgICB9Ci0gICAgICAgIFtidWlsZGVyLCBsb2FkZWRUaW5rZXJHcmFwaF0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGluaXRNYXBwZXIoZGVmIGFyZ3MpIHsKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEdyYXBoU09OTWFwcGVyKSB7Ci0gICAgICAgICAgICB0aGlzLm1hcHBlciA9ICgoR3JhcGhTT05NYXBwZXIpIGFyZ3NbMF0pLmNyZWF0ZU1hcHBlcigpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIgPSAoR3JhcGhTT05NYXBwZXIuQnVpbGRlcikgY3JlYXRlRGVmYXVsdEJ1aWxkZXIoKVswXQotICAgICAgICAgICAgYXJncy5lYWNoIHsKLSAgICAgICAgICAgICAgICBpZiAoaXQgaW5zdGFuY2VvZiBHcmFwaFNPTk1hcHBlcikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWYgc3BlY2lmeWluZyBhIEdyYXBoU09OTWFwcGVyIGl0IG11c3QgYmUgdGhlIG9ubHkgYXJndW1lbnQiKQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGl0IGluc3RhbmNlb2YgSW9SZWdpc3RyeSkKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRSZWdpc3RyeShpdCkKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpdCBpbnN0YW5jZW9mIFNpbXBsZU1vZHVsZSkKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRDdXN0b21Nb2R1bGUoaXQpCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDb25maWd1cmF0aW9uIGFyZ3VtZW50IG9mICR7aXQuY2xhc3Muc2ltcGxlTmFtZX0gaXMgaWdub3JlZCAtIG11c3QgYmUgSW9SZWdpc3RyeSwgU2ltcGxlTW9kdWxlIG9yIGEgc2luZ2xlIEdyYXBoU09OTWFwcGVyIikKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhpcy5tYXBwZXIgPSBidWlsZGVyLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpCi0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9SZW1vdGVDb21tYW5kLmdyb292eSBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2NvbW1hbmRzL1JlbW90ZUNvbW1hbmQuZ3Jvb3Z5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDgzMTdmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2NvbW1hbmRzL1JlbW90ZUNvbW1hbmQuZ3Jvb3Z5CisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcwotCi1pbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guQ29tcGxleENvbW1hbmRTdXBwb3J0Ci1pbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guR3Jvb3Z5c2gKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuTWVkaWF0b3IKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLlJlbW90ZUFjY2VwdG9yCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVFeGNlcHRpb24KLQotLyoqCi0gKiBDb25maWd1cmUgYSByZW1vdGUgY29ubmVjdGlvbiB0byBhIEdyZW1saW4gU2VydmVyLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotY2xhc3MgUmVtb3RlQ29tbWFuZCBleHRlbmRzIENvbXBsZXhDb21tYW5kU3VwcG9ydCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYXRvciBtZWRpYXRvcgotCi0gICAgcHVibGljIFJlbW90ZUNvbW1hbmQoZmluYWwgR3Jvb3Z5c2ggc2hlbGwsIGZpbmFsIE1lZGlhdG9yIG1lZGlhdG9yKSB7Ci0gICAgICAgIHN1cGVyKHNoZWxsLCAiOnJlbW90ZSIsICI6cmVtIiwgWyJjdXJyZW50IiwgImNvbm5lY3QiLCAiY29uZmlnIiwgImxpc3QiLCAibmV4dCIsICJwcmV2IiwgImNob29zZSIsICJjbG9zZSIsICJjb25zb2xlIl0sICJjdXJyZW50IikKLSAgICAgICAgdGhpcy5tZWRpYXRvciA9IG1lZGlhdG9yCi0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb19jb25uZWN0ID0geyBMaXN0PFN0cmluZz4gYXJndW1lbnRzIC0+Ci0gICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDApIHJldHVybiAiRGVmaW5lIHRoZSByZW1vdGUgdG8gY29uZmlndXJlZCAoZS5nLiB0aW5rZXJwb3Auc2VydmVyKSIKLQotICAgICAgICBpZiAoIW1lZGlhdG9yLmF2YWlsYWJsZVBsdWdpbnMudmFsdWVzKCkuYW55IHsKLSAgICAgICAgICAgIGl0LnBsdWdpbi5uYW1lID09IGFyZ3VtZW50c1swXQotICAgICAgICB9KSByZXR1cm4gIk5vIHBsdWdpbiBuYW1lZCAke2FyZ3VtZW50c1swXX0iCi0KLSAgICAgICAgZGVmIHBsdWdnZWRJbiA9IG1lZGlhdG9yLmF2YWlsYWJsZVBsdWdpbnMudmFsdWVzKCkuZmluZCB7IGl0LnBsdWdpbi5uYW1lID09IGFyZ3VtZW50c1swXSB9Ci0gICAgICAgIGlmICghcGx1Z2dlZEluLmFjdGl2YXRlZCkgcmV0dXJuICJQbHVnaW4gaXMgYXZhaWxhYmxlIGJ1dCBub3QgYWN0aXZhdGVkIHdpdGggJzpwbHVnaW4gdXNlICR7YXJndW1lbnRzWzBdfSciCi0KLSAgICAgICAgZGVmIE9wdGlvbmFsPFJlbW90ZUFjY2VwdG9yPiByZW1vdGVBY2NlcHRvciA9IHBsdWdnZWRJbi5yZW1vdGVBY2NlcHRvcigpCi0gICAgICAgIGlmICghcmVtb3RlQWNjZXB0b3IuaXNQcmVzZW50KCkpIHJldHVybiAiJHthcmd1bWVudHNbMF19IGRvZXMgbm90IGFjY2VwdCByZW1vdGUgY29uZmlndXJhdGlvbiIKLQotICAgICAgICBkZWYgcmVtb3RlID0gcmVtb3RlQWNjZXB0b3IuZ2V0KCkKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGRlZiByZXN1bHQgPSByZW1vdGUuY29ubmVjdChhcmd1bWVudHMudGFpbCgpKQotICAgICAgICAgICAgbWVkaWF0b3IuYWRkUmVtb3RlKHJlbW90ZSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICByZW1vdGUuY2xvc2UoKQotICAgICAgICAgICAgcmV0dXJuIHJlLm1lc3NhZ2UKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlZiBPYmplY3QgZG9fY29uZmlnID0geyBMaXN0PFN0cmluZz4gYXJndW1lbnRzIC0+Ci0gICAgICAgIGlmIChtZWRpYXRvci5yZW1vdGVzLnNpemUoKSA9PSAwKSByZXR1cm4gIlBsZWFzZSBhZGQgYSByZW1vdGUgZmlyc3Qgd2l0aCBbY29ubmVjdF0iCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbWVkaWF0b3IuY3VycmVudFJlbW90ZSgpLmNvbmZpZ3VyZShhcmd1bWVudHMpCi0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgcmV0dXJuIHJlLm1lc3NhZ2UKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlZiBPYmplY3QgZG9fY3VycmVudCA9IHsKLSAgICAgICAgaWYgKG1lZGlhdG9yLnJlbW90ZXMuc2l6ZSgpID09IDApIHJldHVybiAiUGxlYXNlIGFkZCBhIHJlbW90ZSBmaXJzdCB3aXRoIFtjb25uZWN0XSIKLSAgICAgICAgcmV0dXJuICJSZW1vdGUgLSAke21lZGlhdG9yLmN1cnJlbnRSZW1vdGUoKX0iCi0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb19jaG9vc2UgPSB7IExpc3Q8U3RyaW5nPiBhcmd1bWVudHMgLT4KLSAgICAgICAgaWYgKG1lZGlhdG9yLnJlbW90ZXMuc2l6ZSgpID09IDApIHJldHVybiAiUGxlYXNlIGFkZCBhIHJlbW90ZSBmaXJzdCB3aXRoIFtjb25uZWN0XSIKLSAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSkgcmV0dXJuICJTcGVjaWZ5IHRoZSBudW1lcmljIGluZGV4IG9mIHRoZSByZW1vdGUiCi0KLSAgICAgICAgZGVmIHBvcwotICAgICAgICB0cnkgewotICAgICAgICAgICAgcG9zID0gSW50ZWdlci5wYXJzZUludChhcmd1bWVudHMuZmlyc3QoKSkKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICByZXR1cm4gIkluZGV4IG11c3QgYmUgYW4gaW50ZWdlciB2YWx1ZSIKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb3MgPj0gbWVkaWF0b3IucmVtb3Rlcy5zaXplKCkgfHwgcG9zIDwgMCkgcmV0dXJuICJJbmRleCBpcyBvdXQgb2YgcmFuZ2UgLSB1c2UgW2xpc3RdIHRvIHNlZSBpbmRpY2VzIGF2YWlsYWJsZSIKLQotICAgICAgICBtZWRpYXRvci5wb3NpdGlvbiA9IHBvcwotICAgICAgICByZXR1cm4gbWVkaWF0b3IuY3VycmVudFJlbW90ZSgpCi0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb19uZXh0ID0gewotICAgICAgICBpZiAobWVkaWF0b3IucmVtb3Rlcy5zaXplKCkgPT0gMCkgcmV0dXJuICJQbGVhc2UgYWRkIGEgcmVtb3RlIGZpcnN0IHdpdGggW2Nvbm5lY3RdIgotICAgICAgICBtZWRpYXRvci5uZXh0UmVtb3RlKCkKLSAgICB9Ci0KLSAgICBkZWYgT2JqZWN0IGRvX3ByZXYgPSB7Ci0gICAgICAgIGlmIChtZWRpYXRvci5yZW1vdGVzLnNpemUoKSA9PSAwKSByZXR1cm4gIlBsZWFzZSBhZGQgYSByZW1vdGUgZmlyc3Qgd2l0aCBbY29ubmVjdF0iCi0gICAgICAgIG1lZGlhdG9yLnByZXZpb3VzUmVtb3RlKCkKLSAgICB9Ci0KLSAgICBkZWYgT2JqZWN0IGRvX2xpc3QgPSB7Ci0gICAgICAgIGRlZiBjb3B5ID0gW10KLSAgICAgICAgbWVkaWF0b3IucmVtb3Rlcy5lYWNoV2l0aEluZGV4IHsgcmVtb3RlLCBpIC0+IGNvcHkgPDwgKG1lZGlhdG9yLnBvc2l0aW9uID09IGkgPyAiKiIgOiAiIikgKyBpICsgIiAtICIgKyByZW1vdGUudG9TdHJpbmcoKSB9Ci0gICAgICAgIHJldHVybiBjb3B5Ci0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb19jbG9zZSA9IHsKLSAgICAgICAgaWYgKG1lZGlhdG9yLnJlbW90ZXMuc2l6ZSgpID09IDApIHJldHVybiAiUGxlYXNlIGFkZCBhIHJlbW90ZSBmaXJzdCB3aXRoIFtjb25uZWN0XSIKLQotICAgICAgICAvLyB0aGUgY29uc29sZSBpcyBpbiByZW1vdGUgZXZhbHVhdGlvbiBtb2RlLiAgY2xvc2luZyBhdCB0aGlzIHBvaW50IHdpbGwgbmVlZHMgdG8gZXhpdCB0aGF0IG1vZGUgYW5kIHRoZW4KLSAgICAgICAgLy8ga2lsbCB0aGUgcmVtb3RlIGl0c2VsZgotICAgICAgICBpZiAoIW1lZGlhdG9yLmxvY2FsRXZhbHVhdGlvbikgc3dhcEV2YWx1YXRpb25Nb2RlKCkKLQotICAgICAgICBkZWYgcmVtb3ZlZCA9IG1lZGlhdG9yLnJlbW92ZUN1cnJlbnQoKQotICAgICAgICByZW1vdmVkLmNsb3NlKCkKLSAgICAgICAgcmV0dXJuICJSZW1vdmVkIC0gJHJlbW92ZWQiCi0gICAgfQotCi0gICAgZGVmIE9iamVjdCBkb19jb25zb2xlID0gewotICAgICAgICBpZiAobWVkaWF0b3IucmVtb3Rlcy5zaXplKCkgPT0gMCkgcmV0dXJuICJQbGVhc2UgYWRkIGEgcmVtb3RlIGZpcnN0IHdpdGggW2Nvbm5lY3RdIgotICAgICAgICBpZiAoIW1lZGlhdG9yLmN1cnJlbnRSZW1vdGUoKS5hbGxvd1JlbW90ZUNvbnNvbGUoKSkgcmV0dXJuICJUaGUgJHttZWRpYXRvci5jdXJyZW50UmVtb3RlKCl9IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggJ2Nvbm5lY3QnIC0gdXNlICc6PicgaW5zdGVhZCIKLSAgICAgICAgcmV0dXJuIHN3YXBFdmFsdWF0aW9uTW9kZSgpCi0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgc3dhcEV2YWx1YXRpb25Nb2RlKCkgewotICAgICAgICBtZWRpYXRvci5sb2NhbEV2YWx1YXRpb24gPSAhbWVkaWF0b3IubG9jYWxFdmFsdWF0aW9uCi0gICAgICAgIGlmIChtZWRpYXRvci5sb2NhbEV2YWx1YXRpb24pCi0gICAgICAgICAgICByZXR1cm4gIkFsbCBzY3JpcHRzIHdpbGwgbm93IGJlIGV2YWx1YXRlZCBsb2NhbGx5IC0gdHlwZSAnOnJlbW90ZSBjb25zb2xlJyB0byByZXR1cm4gdG8gcmVtb3RlIG1vZGUgZm9yICR7bWVkaWF0b3IuY3VycmVudFJlbW90ZSgpfSIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuICJBbGwgc2NyaXB0cyB3aWxsIG5vdyBiZSBzZW50IHRvICR7bWVkaWF0b3IuY3VycmVudFJlbW90ZSgpfSAtIHR5cGUgJzpyZW1vdGUgY29uc29sZScgdG8gcmV0dXJuIHRvIGxvY2FsIG1vZGUiCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvY29tbWFuZHMvU3VibWl0Q29tbWFuZC5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9TdWJtaXRDb21tYW5kLmdyb292eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA3ODM1NC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9TdWJtaXRDb21tYW5kLmdyb292eQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5jb21tYW5kcwotCi1pbXBvcnQgb3JnLmFwYWNoZS5ncm9vdnkuZ3Jvb3Z5c2guQ29tbWFuZFN1cHBvcnQKLWltcG9ydCBvcmcuYXBhY2hlLmdyb292eS5ncm9vdnlzaC5Hcm9vdnlzaAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5NZWRpYXRvcgotCi0vKioKLSAqIFN1Ym1pdCBhIHNjcmlwdCB0byBhIEdyZW1saW4gU2VydmVyIGluc3RhbmNlLgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1jbGFzcyBTdWJtaXRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZFN1cHBvcnQgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBNZWRpYXRvciBtZWRpYXRvcgotCi0gICAgcHVibGljIFN1Ym1pdENvbW1hbmQoZmluYWwgR3Jvb3Z5c2ggc2hlbGwsIGZpbmFsIE1lZGlhdG9yIG1lZGlhdG9yKSB7Ci0gICAgICAgIHN1cGVyKHNoZWxsLCAiOnN1Ym1pdCIsICI6PiIpCi0gICAgICAgIHRoaXMubWVkaWF0b3IgPSBtZWRpYXRvcgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGRlZiBPYmplY3QgZXhlY3V0ZShmaW5hbCBMaXN0PFN0cmluZz4gYXJndW1lbnRzKSB7Ci0gICAgICAgIGlmIChtZWRpYXRvci5yZW1vdGVzLnNpemUoKSA9PSAwKSByZXR1cm4gIk5vIHJlbW90ZXMgYXJlIGNvbmZpZ3VyZWQuICBVc2UgOnJlbW90ZSBjb21tYW5kLiIKLSAgICAgICAgcmV0dXJuIG1lZGlhdG9yLmN1cnJlbnRSZW1vdGUoKS5zdWJtaXQoYXJndW1lbnRzKQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvR2VwaGlSZW1vdGVBY2NlcHRvci5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvR2VwaGlSZW1vdGVBY2NlcHRvci5ncm9vdnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZmZkNGUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0dlcGhpUmVtb3RlQWNjZXB0b3IuZ3Jvb3Z5CisrKyAvZGV2L251bGwKQEAgLTEsMzcxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjMKLQotaW1wb3J0IGdyb292eS5qc29uLkpzb25PdXRwdXQKLWltcG9ydCBncm9vdnkuanNvbi5Kc29uU2x1cnBlcgotaW1wb3J0IGdyb292eS50cmFuc2Zvcm0uQ29tcGlsZVN0YXRpYwotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5DbG9zZWFibGVIdHRwUmVzcG9uc2UKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuSHR0cFVyaVJlcXVlc3QKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuUmVxdWVzdEJ1aWxkZXIKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LlN0cmluZ0VudGl0eQotaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5DbG9zZWFibGVIdHRwQ2xpZW50Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuY2xpZW50Lkh0dHBDbGllbnRzCi1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLnV0aWwuRW50aXR5VXRpbHMKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLkdyZW1saW5TaGVsbEVudmlyb25tZW50Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVBY2NlcHRvcgotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlRXhjZXB0aW9uCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2UKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGgKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXgKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAYXV0aG9yIFJhbmRhbGwgQmFybmhhcnQgKHJhbmRvbXBpQGdtYWlsLmNvbSkKLSAqLwotY2xhc3MgR2VwaGlSZW1vdGVBY2NlcHRvciBpbXBsZW1lbnRzIFJlbW90ZUFjY2VwdG9yIHsKLQotICAgIHByaXZhdGUgU3RyaW5nIGhvc3QgPSAibG9jYWxob3N0IgotICAgIHByaXZhdGUgaW50IHBvcnQgPSA4MDgwCi0gICAgcHJpdmF0ZSBTdHJpbmcgd29ya3NwYWNlID0gIndvcmtzcGFjZTEiCi0KLSAgICBwcml2YXRlIGZpbmFsIEdyZW1saW5TaGVsbEVudmlyb25tZW50IHNoZWxsCi0KLSAgICBwcml2YXRlIGZpbmFsIFJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpOwotICAgIGJvb2xlYW4gdHJhdmVyc2FsU3VibWl0dGVkRm9yVml6ID0gZmFsc2UKLSAgICBsb25nIHZpelN0ZXBEZWxheQotICAgIHByaXZhdGUgZmxvYXRbXSB2aXpTdGFydFJHQkNvbG9yCi0gICAgcHJpdmF0ZSBmbG9hdFtdIHZpekRlZmF1bHRSR0JDb2xvcgotICAgIHByaXZhdGUgY2hhciB2aXpDb2xvclRvRmFkZQotICAgIHByaXZhdGUgZmxvYXQgdml6Q29sb3JGYWRlUmF0ZQotICAgIHByaXZhdGUgZmxvYXQgdml6U3RhcnRTaXplCi0gICAgcHJpdmF0ZSBmbG9hdCB2aXpTaXplRGVjcmVtZW50UmF0ZQotICAgIHByaXZhdGUgTWFwIHZlcnRleEF0dHJpYnV0ZXMgPSBbOl0KLQotICAgIHByaXZhdGUgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotCi0gICAgcHVibGljIEdlcGhpUmVtb3RlQWNjZXB0b3IoZmluYWwgR3JlbWxpblNoZWxsRW52aXJvbm1lbnQgc2hlbGwpIHsKLSAgICAgICAgdGhpcy5zaGVsbCA9IHNoZWxsCi0KLSAgICAgICAgLy8gdHJhdmVyc2FsIHZpc3VhbGl6YXRpb24gZGVmYXVsdHMKLSAgICAgICAgdml6U3RlcERlbGF5ID0gMTAwMDsgICAgICAgICAgICAgICAgIC8vIDEgc2Vjb25kIHBhdXNlIGJldHdlZW4gdml6IG9mIHN0ZXBzCi0gICAgICAgIHZpelN0YXJ0UkdCQ29sb3IgPSBbMC4wZiwgMS4wZiwgMC41Zl0gIC8vIGxpZ2h0IGFxdWEgZ3JlZW4KLSAgICAgICAgdml6RGVmYXVsdFJHQkNvbG9yID0gWzAuNmYsIDAuNmYsIDAuNmZdICAvLyBsaWdodCBncmV5Ci0gICAgICAgIHZpekNvbG9yVG9GYWRlID0gJ2cnICAgICAgICAgICAgICAgICAvLyB3aWxsIGZhZGUgc28gYmx1ZSBpcyBzdHJvbmdlc3QKLSAgICAgICAgdml6Q29sb3JGYWRlUmF0ZSA9IDAuNyAgICAgICAgICAgICAgIC8vIHRoZSBtdWx0aXBsaWNhdGl2ZSByYXRlIHRvIGZhZGUgdmlzaXRlZCB2ZXJ0aWNlcwotICAgICAgICB2aXpTdGFydFNpemUgPSAxMAotICAgICAgICB2aXpTaXplRGVjcmVtZW50UmF0ZSA9IDAuMzNmCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgY29ubmVjdChmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSAxKQotICAgICAgICAgICAgd29ya3NwYWNlID0gYXJnc1swXQotCi0gICAgICAgIGlmIChhcmdzLnNpemUoKSA+PSAyKQotICAgICAgICAgICAgaG9zdCA9IGFyZ3NbMV0KLQotICAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gMykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzJdKQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiUG9ydCBtdXN0IGJlIGFuIGludGVnZXIgdmFsdWUiKQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGVmIHZpekNvbmZpZyA9ICIgd2l0aCBzdGVwRGVsYXk6JHZpelN0ZXBEZWxheSwgc3RhcnRSR0JDb2xvcjokdml6U3RhcnRSR0JDb2xvciwgIiArCi0gICAgICAgICAgICAgICAgImNvbG9yVG9GYWRlOiR2aXpDb2xvclRvRmFkZSwgY29sb3JGYWRlUmF0ZTokdml6Q29sb3JGYWRlUmF0ZSwgc3RhcnRTaXplOiR2aXpTdGFydFNpemUsIiArCi0gICAgICAgICAgICAgICAgInNpemVEZWNyZW1lbnRSYXRlOiR2aXpTaXplRGVjcmVtZW50UmF0ZSIKLQotICAgICAgICByZXR1cm4gIkNvbm5lY3Rpb24gdG8gR2VwaGkgLSBodHRwOi8vJGhvc3Q6JHBvcnQvJHdvcmtzcGFjZSIgKyB2aXpDb25maWcKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBPYmplY3QgY29uZmlndXJlKGZpbmFsIExpc3Q8U3RyaW5nPiBhcmdzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMiAmJiBhcmdzWzBdICE9ICJoZWxwIikKLSAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkludmFsaWQgY29uZmlnIGFyZ3VtZW50cyAtIGNoZWNrIHN5bnRheCIpCi0KLSAgICAgICAgaWYgKGFyZ3NbMF0gPT0gImhlbHAiKQotICAgICAgICAgICAgcmV0dXJuICI6cmVtb3RlIGNvbmZpZyBbaG9zdCA8aG9zdD58cG9ydCA8cG9ydD58d29ya3NwYWNlIDxuYW1lPnxzdGVwRGVsYXkgPG1zPnxzdGFydFJHQkNvbG9yIDwwLjAsMC4wLDAuMD58Y29sb3JUb0ZhZGUgW3J8Z3xiXXxjb2xvckZhZGVSYXRlIDwwLjA+fHNpemVEZWNyZW1lbnRSYXRlIDwwLjA+fHN0YXJ0U2l6ZSA8MC4wPnx2aXN1YWxUcmF2ZXJzYWwgPGdyYXBoPnxoZWxwXSIKLQotICAgICAgICBpZiAoYXJnc1swXSA9PSAiaG9zdCIpCi0gICAgICAgICAgICBob3N0ID0gYXJnc1sxXQotICAgICAgICBlbHNlIGlmIChhcmdzWzBdID09ICJwb3J0IikgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChhcmdzWzFdKQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJQb3J0IG11c3QgYmUgYW4gaW50ZWdlciB2YWx1ZSIpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PSAid29ya3NwYWNlIikKLSAgICAgICAgICAgIHdvcmtzcGFjZSA9IGFyZ3NbMV0KLSAgICAgICAgZWxzZSBpZiAoYXJnc1swXSA9PSAic3RlcERlbGF5IikKLSAgICAgICAgICAgIHBhcnNlVml6U3RlcERlbGF5KGFyZ3NbMV0pCi0gICAgICAgIGVsc2UgaWYgKGFyZ3NbMF0gPT0gInN0YXJ0UkdCQ29sb3IiKQotICAgICAgICAgICAgcGFyc2VWaXpTdGFydFJHQkNvbG9yKGFyZ3NbMV0pCi0gICAgICAgIGVsc2UgaWYgKGFyZ3NbMF0gPT0gImNvbG9yVG9GYWRlIikKLSAgICAgICAgICAgIHBhcnNlVml6Q29sb3JUb0ZhZGUoYXJnc1sxXSkKLSAgICAgICAgZWxzZSBpZiAoYXJnc1swXSA9PSAiY29sb3JGYWRlUmF0ZSIpCi0gICAgICAgICAgICBwYXJzZVZpekNvbG9yRmFkZVJhdGUoYXJnc1sxXSkKLSAgICAgICAgZWxzZSBpZiAoYXJnc1swXSA9PSAic2l6ZURlY3JlbWVudFJhdGUiKQotICAgICAgICAgICAgcGFyc2VWaXpTaXplRGVjcmVtZW50UmF0ZShhcmdzWzFdKQotICAgICAgICBlbHNlIGlmIChhcmdzWzBdID09ICJzdGFydFNpemUiKQotICAgICAgICAgICAgcGFyc2VWaXpTdGFydFNpemUoYXJnc1sxXSkKLSAgICAgICAgZWxzZSBpZiAoYXJnc1swXSA9PSAidmlzdWFsVHJhdmVyc2FsIikgewotICAgICAgICAgICAgZGVmIGdyYXBoVmFyID0gc2hlbGwuZ2V0VmFyaWFibGUoYXJnc1sxXSkKLSAgICAgICAgICAgIGlmICghKGdyYXBoVmFyIGluc3RhbmNlb2YgR3JhcGgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkludmFsaWQgYXJndW1lbnQgdG8gJ3Zpc3VhbFRyYXZlcnNhbCcgLSBmaXJzdCBwYXJhbWV0ZXIgbXVzdCBiZSBhIEdyYXBoIGluc3RhbmNlIikKLQotICAgICAgICAgICAgZGVmIGdWYXIgPSBhcmdzLnNpemUoKSA9PSAzID8gYXJnc1syXSA6ICJ2ZyIKLSAgICAgICAgICAgIGRlZiB0aGVHID0gZ3JhcGhWYXIudHJhdmVyc2FsKCkud2l0aFN0cmF0ZWdpZXMobmV3IEdlcGhpVHJhdmVyc2FsVmlzdWFsaXphdGlvblN0cmF0ZWd5KHRoaXMpKQotICAgICAgICAgICAgc2hlbGwuc2V0VmFyaWFibGUoZ1ZhciwgdGhlRykKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJJbnZhbGlkIGNvbmZpZyBhcmd1bWVudHMgLSBjaGVjayBzeW50YXgiKQotCi0gICAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0byBHZXBoaSAtIGh0dHA6Ly8kaG9zdDokcG9ydC8kd29ya3NwYWNlIiArCi0gICAgICAgICAgICAgICAgIiB3aXRoIHN0ZXBEZWxheTokdml6U3RlcERlbGF5LCBzdGFydFJHQkNvbG9yOiR2aXpTdGFydFJHQkNvbG9yLCAiICsKLSAgICAgICAgICAgICAgICAiY29sb3JUb0ZhZGU6JHZpekNvbG9yVG9GYWRlLCBjb2xvckZhZGVSYXRlOiR2aXpDb2xvckZhZGVSYXRlLCBzdGFydFNpemU6JHZpelN0YXJ0U2l6ZSwiICsKLSAgICAgICAgICAgICAgICAic2l6ZURlY3JlbWVudFJhdGU6JHZpelNpemVEZWNyZW1lbnRSYXRlIgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIEBDb21waWxlU3RhdGljCi0gICAgT2JqZWN0IHN1Ym1pdChmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsaW5lID0gU3RyaW5nLmpvaW4oIiAiLCBhcmdzKQotICAgICAgICBpZiAobGluZS50cmltKCkgPT0gImNsZWFyIikgewotICAgICAgICAgICAgY2xlYXJHcmFwaCgpCi0gICAgICAgICAgICBzaGVsbC5wcmludGxuKCJHZXBoaSB3b3Jrc3BhY2UgY2xlYXJlZCIpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5lZWQgdG8gY2xlYXIgdGhlIHZlcnRleCBhdHRyaWJ1dGVzCi0gICAgICAgIHZlcnRleEF0dHJpYnV0ZXMuY2xlYXIoKQotCi0gICAgICAgIC8vIHRoaXMgdGVsbHMgdGhlIEdyYXBoVHJhdmVyc2FsVmlzdWFsaXphdGlvblN0cmF0ZWd5IHRoYXQgaWYgdGhlIGxpbmUgZXZhbCdzIHRvIGEgdHJhdmVyc2FsIGl0IHNob3VsZAotICAgICAgICAvLyB0cnkgdG8gdmlzdWFsaXplIGl0Ci0gICAgICAgIHRyYXZlcnNhbFN1Ym1pdHRlZEZvclZpeiA9IHRydWUKLQotICAgICAgICAvLyBnZXQgdGhlIGNvbG9ycy9zaXplcyBiYWNrIHRvIGJhc2ljcyBiZWZvcmUgdHJ5aW5nIHZpc3VhbGl6ZQotICAgICAgICByZXNldENvbG9yc1NpemVzKCkKLQotICAgICAgICBmaW5hbCBPYmplY3QgbyA9IHNoZWxsLmV4ZWN1dGUobGluZSkKLSAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBHcmFwaCkgewotICAgICAgICAgICAgY2xlYXJHcmFwaCgpCi0gICAgICAgICAgICBkZWYgZ3JhcGggPSAoR3JhcGgpIG8KLSAgICAgICAgICAgIGRlZiBnID0gZ3JhcGgudHJhdmVyc2FsKCkKLSAgICAgICAgICAgIGcuVigpLnNpZGVFZmZlY3QgeyBhZGRWZXJ0ZXhUb0dlcGhpKGcsIGl0LmdldCgpKSB9Lml0ZXJhdGUoKQotICAgICAgICB9Ci0KLSAgICAgICAgdHJhdmVyc2FsU3VibWl0dGVkRm9yVml6ID0gZmFsc2UKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaHR0cGNsaWVudC5jbG9zZSgpCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogVmlzaXRzIHRoZSBsYXN0IHNldCBvZiB2ZXJ0aWNlcyB0cmF2ZXJzZWQgYW5kIGRlZ3JhZGVzIHRoZWlyIGNvbG9yIGFuZCBzaXplLgotICAgICAqLwotICAgIGRlZiB1cGRhdGVWaXNpdGVkVmVydGljZXMoZGVmIExpc3QgZXhjZXB0ID0gW10pIHsKLSAgICAgICAgdmVydGV4QXR0cmlidXRlcy5rZXlTZXQoKS5maW5kQWxseyB2ZXJ0ZXhJZCAtPiAhZXhjZXB0LmNvbnRhaW5zKHZlcnRleElkKSB9LmVhY2ggeyBTdHJpbmcgdmVydGV4SWQgLT4KLSAgICAgICAgICAgIGRlZiBhdHRycyA9IHZlcnRleEF0dHJpYnV0ZXNbdmVydGV4SWRdCi0gICAgICAgICAgICBmbG9hdCBjdXJyZW50Q29sb3IgPSBhdHRycy5jb2xvcgotICAgICAgICAgICAgY3VycmVudENvbG9yICo9IHZpekNvbG9yRmFkZVJhdGUKLQotICAgICAgICAgICAgaW50IGN1cnJlbnRTaXplID0gYXR0cnNbInNpemUiXQotICAgICAgICAgICAgY3VycmVudFNpemUgPSBNYXRoLm1heCh2aXpTdGFydFNpemUsIGN1cnJlbnRTaXplIC0gKGN1cnJlbnRTaXplICogdml6U2l6ZURlY3JlbWVudFJhdGUpKQotCi0gICAgICAgICAgICB2ZXJ0ZXhBdHRyaWJ1dGVzLmdldCh2ZXJ0ZXhJZCkuY29sb3IgPSBjdXJyZW50Q29sb3IKLSAgICAgICAgICAgIHZlcnRleEF0dHJpYnV0ZXMuZ2V0KHZlcnRleElkKS5zaXplID0gY3VycmVudFNpemUKLQotICAgICAgICAgICAgY2hhbmdlVmVydGV4QXR0cmlidXRlcyh2ZXJ0ZXhJZCkKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRlZiBjaGFuZ2VWZXJ0ZXhBdHRyaWJ1dGVzKGRlZiBTdHJpbmcgdmVydGV4SWQpIHsKLSAgICAgICAgZGVmIHByb3BzID0gWzpdCi0gICAgICAgIHByb3BzLnB1dCh2aXpDb2xvclRvRmFkZS50b1N0cmluZygpLCB2ZXJ0ZXhBdHRyaWJ1dGVzW3ZlcnRleElkXS5jb2xvcikKLSAgICAgICAgcHJvcHMucHV0KCJzaXplIiwgdmVydGV4QXR0cmlidXRlc1t2ZXJ0ZXhJZF0uc2l6ZSkKLSAgICAgICAgdXBkYXRlR2VwaGlHcmFwaChbY246IFsodmVydGV4SWQpOiBwcm9wc11dKQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFZpc2l0IGEgdmVydGV4IHRyYXZlcnNlZCBhbmQgaW5pdGlhbGl6ZSBpdHMgY29sb3IgYW5kIHNpemUuCi0gICAgICovCi0gICAgZGVmIHZpc2l0VmVydGV4SW5HZXBoaShkZWYgVmVydGV4IHYpIHsKLSAgICAgICAgZGVmIHByb3BzID0gWzpdCi0gICAgICAgIHByb3BzLnB1dCgncicsIHZpelN0YXJ0UkdCQ29sb3JbMF0pCi0gICAgICAgIHByb3BzLnB1dCgnZycsIHZpelN0YXJ0UkdCQ29sb3JbMV0pCi0gICAgICAgIHByb3BzLnB1dCgnYicsIHZpelN0YXJ0UkdCQ29sb3JbMl0pCi0gICAgICAgIHByb3BzLnB1dCgnc2l6ZScsIHZpelN0YXJ0U2l6ZSAqIDIuNSkKLSAgICAgICAgcHJvcHMucHV0KCd2aXNpdGVkJywgMSkKLQotICAgICAgICB1cGRhdGVHZXBoaUdyYXBoKFtjbjogWyh2LmlkKCkudG9TdHJpbmcoKSk6IHByb3BzXV0pCi0KLSAgICAgICAgdmVydGV4QXR0cmlidXRlc1t2LmlkKCkudG9TdHJpbmcoKV0gPSBbY29sb3I6IHZpelN0YXJ0UkdCQ29sb3JbZmFkZUNvbG9ySW5kZXgoKV0sIHNpemU6IHZpelN0YXJ0U2l6ZSAqIDIuNSwgdG91Y2g6IDFdCi0gICAgfQotCi0gICAgZGVmIGZhZGVDb2xvckluZGV4KCkgewotICAgICAgICBpZiAodml6Q29sb3JUb0ZhZGUgPT0gJ3InKQotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgZWxzZSBpZiAodml6Q29sb3JUb0ZhZGUgPT0gJ2cnKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZWxzZSBpZiAodml6Q29sb3JUb0ZhZGUgPT0gJ2InKQotICAgICAgICAgICAgcmV0dXJuIDIKLSAgICB9Ci0KLSAgICBkZWYgYWRkVmVydGV4VG9HZXBoaShkZWYgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZywgZGVmIFZlcnRleCB2LCBkZWYgYm9vbGVhbiBpZ25vcmVFZGdlcyA9IGZhbHNlKSB7Ci0gICAgICAgIC8vIGdyYWIgdGhlIGZpcnN0IHByb3BlcnR5IHZhbHVlIGZyb20gdGhlIHN0cmF0ZWdpZXMgb2YgdmFsdWVzCi0gICAgICAgIGRlZiBwcm9wcyA9IGcuVih2KS52YWx1ZU1hcCgpLm5leHQoKS5jb2xsZWN0RW50cmllcyB7IGt2IC0+IFsoa3Yua2V5KToga3YudmFsdWVbMF1dIH0KLSAgICAgICAgcHJvcHMgPDwgW2xhYmVsOiB2LmxhYmVsKCldCi0gICAgICAgIHByb3BzLnB1dCgncicsIHZpekRlZmF1bHRSR0JDb2xvclswXSkKLSAgICAgICAgcHJvcHMucHV0KCdnJywgdml6RGVmYXVsdFJHQkNvbG9yWzFdKQotICAgICAgICBwcm9wcy5wdXQoJ2InLCB2aXpEZWZhdWx0UkdCQ29sb3JbMl0pCi0gICAgICAgIHByb3BzLnB1dCgneCcsIHJhbmQubmV4dEZsb2F0KCkpCi0gICAgICAgIHByb3BzLnB1dCgneScsIHJhbmQubmV4dEZsb2F0KCkpCi0gICAgICAgIHByb3BzLnB1dCgnc2l6ZScsIDEwKQotICAgICAgICBwcm9wcy5wdXQoJ3Zpc2l0ZWQnLCAwKQotCi0gICAgICAgIC8vIG9ubHkgYWRkIGlmIGl0IGRvZXMgbm90IGV4aXN0IGluIGdyYXBoIGFscmVhZHkKLSAgICAgICAgaWYgKCFnZXRGcm9tR2VwaGlHcmFwaChbb3BlcmF0aW9uOiAiZ2V0Tm9kZSIsIGlkOiB2LmlkKCkudG9TdHJpbmcoKV0pLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgdXBkYXRlR2VwaGlHcmFwaChbYW46IFsodi5pZCgpLnRvU3RyaW5nKCkpOiBwcm9wc11dKQotCi0gICAgICAgIGlmICghaWdub3JlRWRnZXMpIHsKLSAgICAgICAgICAgIGcuVih2KS5vdXRFKCkuc2lkZUVmZmVjdCB7Ci0gICAgICAgICAgICAgICAgYWRkRWRnZVRvR2VwaGkoZywgaXQuZ2V0KCkpCi0gICAgICAgICAgICB9Lml0ZXJhdGUoKQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQENvbXBpbGVTdGF0aWMKLSAgICBkZWYgYWRkRWRnZVRvR2VwaGkoZGVmIEdyYXBoVHJhdmVyc2FsU291cmNlIGcsIGRlZiBFZGdlIGUpIHsKLSAgICAgICAgZGVmIHByb3BzID0gZy5FKGUpLnZhbHVlTWFwKCkubmV4dCgpCi0gICAgICAgIHByb3BzLnB1dCgnbGFiZWwnLCBlLmxhYmVsKCkpCi0gICAgICAgIHByb3BzLnB1dCgnc291cmNlJywgZS5vdXRWZXJ0ZXgoKS5pZCgpLnRvU3RyaW5nKCkpCi0gICAgICAgIHByb3BzLnB1dCgndGFyZ2V0JywgZS5pblZlcnRleCgpLmlkKCkudG9TdHJpbmcoKSkKLSAgICAgICAgcHJvcHMucHV0KCdkaXJlY3RlZCcsIHRydWUpCi0gICAgICAgIHByb3BzLnB1dCgndmlzaXRlZCcsIDApCi0KLSAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBpbiB2ZXJ0ZXggaXMgdGhlcmUgYnV0IGRvbid0IGFkZCBpdHMgZWRnZXMgLSB0aGF0IHdpbGwgaGFwcGVuIGxhdGVyIGFzIHdlIGFyZSBsb29waW5nCi0gICAgICAgIC8vIGFsbCB2ZXJ0aWNlcyBpbiB0aGUgZ3JhcGgKLSAgICAgICAgYWRkVmVydGV4VG9HZXBoaShnLCBlLmluVmVydGV4KCksIHRydWUpCi0KLSAgICAgICAgLy8gYm90aCB2ZXJ0aWNlcyBhcmUgZGVmaW5pdGVseSB0aGVyZSBub3csIHNvIGFkZCB0aGUgZWRnZQotICAgICAgICB1cGRhdGVHZXBoaUdyYXBoKFthZTogWyhlLmlkKCkudG9TdHJpbmcoKSk6IHByb3BzXV0pCi0gICAgfQotCi0gICAgZGVmIGNsZWFyR3JhcGgoKSB7Ci0gICAgICAgIHVwZGF0ZUdlcGhpR3JhcGgoW2RuOiBbZmlsdGVyOiAiQUxMIl1dKQotICAgIH0KLQotICAgIGRlZiByZXNldENvbG9yc1NpemVzKCkgewotICAgICAgICB1cGRhdGVHZXBoaUdyYXBoKFtjbjogW2ZpbHRlcjogW25vZGVBdHRyaWJ1dGU6IFthdHRyaWJ1dGU6ICJ2aXNpdGVkIiwgdmFsdWU6IDFdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbc2l6ZTogMSwgcjogdml6RGVmYXVsdFJHQkNvbG9yWzBdLCBnOiB2aXpEZWZhdWx0UkdCQ29sb3JbMV0sIGI6IHZpekRlZmF1bHRSR0JDb2xvclsyXV1dXSkKLSAgICAgICAgdXBkYXRlR2VwaGlHcmFwaChbY2U6IFtmaWx0ZXI6IFtlZGdlQXR0cmlidXRlOiBbYXR0cmlidXRlOiAidmlzaXRlZCIsIHZhbHVlOiAxXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogW3NpemU6IDEsIHI6IHZpekRlZmF1bHRSR0JDb2xvclswXSwgZzogdml6RGVmYXVsdFJHQkNvbG9yWzFdLCBiOiB2aXpEZWZhdWx0UkdCQ29sb3JbMl1dXV0pCi0gICAgfQotCi0gICAgZGVmIGdldEZyb21HZXBoaUdyYXBoKGRlZiBNYXAgcXVlcnlBcmdzKSB7Ci0gICAgICAgIGRlZiByZXF1ZXN0QnVpbGRlciA9IFJlcXVlc3RCdWlsZGVyLmdldCgiaHR0cDovLyRob3N0OiRwb3J0LyR3b3Jrc3BhY2UiKQotICAgICAgICBxdWVyeUFyZ3MuZWFjaCB7IHJlcXVlc3RCdWlsZGVyID0gcmVxdWVzdEJ1aWxkZXIuYWRkUGFyYW1ldGVyKGl0LmtleSwgaXQudmFsdWUpIH0KLQotICAgICAgICBkZWYgaHR0cFJlc3AgPSBtYWtlUmVxdWVzdChyZXF1ZXN0QnVpbGRlci5idWlsZCgpKQotICAgICAgICBkZWYgcmVzcCA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKGh0dHBSZXNwLmVudGl0eSkKLQotICAgICAgICAvLyBnZXBoaSBzdHJlYW1pbmcgcGx1Z2luIGRvZXMgbm90IHNldCB0aGUgY29udGVudCB0eXBlIG9yIHJlc3BlY3QgdGhlIEFjY2VwdCBoZWFkZXIgLSB0cmVhdCBhcyB0ZXh0Ci0gICAgICAgIGlmIChyZXNwLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5lbXB0eSgpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZihuZXcgSnNvblNsdXJwZXIoKS5wYXJzZVRleHQocmVzcCkpCi0gICAgfQotCi0gICAgZGVmIHVwZGF0ZUdlcGhpR3JhcGgoZGVmIE1hcCBwb3N0Qm9keSkgewotICAgICAgICBkZWYgcmVxdWVzdEJ1aWxkZXIgPSBSZXF1ZXN0QnVpbGRlci5wb3N0KCJodHRwOi8vJGhvc3Q6JHBvcnQvJHdvcmtzcGFjZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZFBhcmFtZXRlcigiZm9ybWF0IiwgIkpTT04iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRQYXJhbWV0ZXIoIm9wZXJhdGlvbiIsICJ1cGRhdGVHcmFwaCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KEpzb25PdXRwdXQudG9Kc29uKHBvc3RCb2R5KSkpCi0gICAgICAgIEVudGl0eVV0aWxzLmNvbnN1bWUobWFrZVJlcXVlc3QocmVxdWVzdEJ1aWxkZXIuYnVpbGQoKSkuZW50aXR5KQotICAgIH0KLQotICAgIHByaXZhdGUgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIG1ha2VSZXF1ZXN0KEh0dHBVcmlSZXF1ZXN0IHJlcXVlc3QpIHsKLSAgICAgICAgZGVmIGh0dHBSZXNwID0gaHR0cGNsaWVudC5leGVjdXRlKHJlcXVlc3QpCi0gICAgICAgIGlmIChodHRwUmVzcC5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpID09IDIwMCkgewotICAgICAgICAgICAgcmV0dXJuIGh0dHBSZXNwCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWYgcmVzcCA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKGh0dHBSZXNwLmVudGl0eSkKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbnN1Y2Nlc3NmdWwgcmVxdWVzdCB0byBHZXBoaSAtIFske2h0dHBSZXNwLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCl9XSAke2h0dHBSZXNwLmdldFN0YXR1c0xpbmUoKS5nZXRSZWFzb25QaHJhc2UoKX0gLSAkcmVzcCIpCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gIkdlcGhpIC0gWyR3b3Jrc3BhY2VdIgotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwYXJzZVZpelN0ZXBEZWxheShTdHJpbmcgYXJnKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2aXpTdGVwRGVsYXkgPSBMb25nLnBhcnNlTG9uZyhhcmcpCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJUaGUgc3RlcERlbGF5IG11c3QgYmUgYSBsb25nIHZhbHVlIikKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwYXJzZVZpelN0YXJ0UkdCQ29sb3IoU3RyaW5nIGFyZykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdml6U3RhcnRSR0JDb2xvciA9IGFyZ1sxLi4tMl0udG9rZW5pemUoJywnKSoudG9GbG9hdCgpCi0gICAgICAgICAgICBhc3NlcnQgKHZpelN0YXJ0UkdCQ29sb3IubGVuZ3RoID09IDMpCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJUaGUgdml6U3RhcnRSR0JDb2xvciBtdXN0IGJlIGFuIGFycmF5IG9mIDMgZmxvYXQgdmFsdWVzLCBlLmcuIFswLjAsMS4wLDAuNV0iKQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHBhcnNlVml6Q29sb3JUb0ZhZGUoU3RyaW5nIGFyZykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdml6Q29sb3JUb0ZhZGUgPSBhcmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgICAgICBhc3NlcnQgKHZpekNvbG9yVG9GYWRlID09ICdyJyB8fCB2aXpDb2xvclRvRmFkZSA9PSAnZycgfHwgdml6Q29sb3JUb0ZhZGUgPT0gJ2InKQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiVGhlIHZpekNvbG9yVG9GYWRlIG11c3QgYmUgb25lIGNoYXJhY3RlciB2YWx1ZSBhbW9uZzogciwgZywgYiwgUiwgRywgQiIpCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcGFyc2VWaXpDb2xvckZhZGVSYXRlKFN0cmluZyBhcmcpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZpekNvbG9yRmFkZVJhdGUgPSBGbG9hdC5wYXJzZUZsb2F0KGFyZykKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIlRoZSBjb2xvckZhZGVSYXRlIG11c3QgYmUgYSBmbG9hdCB2YWx1ZSIpCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcGFyc2VWaXpTaXplRGVjcmVtZW50UmF0ZShTdHJpbmcgYXJnKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2aXpTaXplRGVjcmVtZW50UmF0ZSA9IEZsb2F0LnBhcnNlRmxvYXQoYXJnKQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiVGhlIHNpemVEZWNyZW1lbnRSYXRlIG11c3QgYmUgYSBmbG9hdCB2YWx1ZSIpCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcGFyc2VWaXpTdGFydFNpemUoU3RyaW5nIGFyZykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdml6U3RhcnRTaXplID0gRmxvYXQucGFyc2VGbG9hdChhcmcpCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJUaGUgc3RhcnRTaXplIG11c3QgYmUgYSBmbG9hdCB2YWx1ZSIpCi0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvR2VwaGlUcmF2ZXJzYWxWaXN1YWxpemF0aW9uU3RyYXRlZ3kuZ3Jvb3Z5IGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0dlcGhpVHJhdmVyc2FsVmlzdWFsaXphdGlvblN0cmF0ZWd5Lmdyb292eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5NDE5Mi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvR2VwaGlUcmF2ZXJzYWxWaXN1YWxpemF0aW9uU3RyYXRlZ3kuZ3Jvb3Z5CisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjMKLQotaW1wb3J0IGdyb292eS50cmFuc2Zvcm0uQ29tcGlsZVN0YXRpYwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5IYXNTdGVwCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5FZGdlT3RoZXJWZXJ0ZXhTdGVwCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5FZGdlVmVydGV4U3RlcAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhTdGVwCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5WZXJ0ZXhTdGVwCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuQWdncmVnYXRlU3RlcAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkxhbWJkYVNpZGVFZmZlY3RTdGVwCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuQnVsa1NldAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLlByb2ZpbGVTdHJhdGVneQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxIZWxwZXIKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXgKLQotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9ycwotCi0vKioKLSAqIEEgc3RyYXRlZ3kgdGhhdCB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB7QGxpbmsgR2VwaGlSZW1vdGVBY2NlcHRvcn0gdG8gYXV0b21hdGljYWxseSBpbmplY3QgdmlzdWFsaXphdGlvbgotICogc3RlcHMgYWZ0ZXIgInZlcnRleCIgc3RlcHMgdG8gc2hvdyB0aGUgdmVydGljZXMgdHJhdmVyc2VkIGZvciBhIHN0ZXAuICBJZiB0aGUgdHJhdmVyc2FsIHdhcyBldmFsdWF0ZWQgaW4gdGhlCi0gKiBjb25zb2xlIG5vcm1hbGx5IHRoZW4gdGhlIHZpc3VhbGl6YXRpb24gc3RyYXRlZ3kgd2lsbCBub3QgYmUgYXBwbGllZC4gIEl0IG11c3QgYmUge0Bjb2RlIDpzdWJtaXR9IHRvIHRoZQotICogY29uc29sZSBmb3IgdGhlIHN0cmF0ZWd5IHRvIGJlIGFwcGxpZWQuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AQ29tcGlsZVN0YXRpYwotY2xhc3MgR2VwaGlUcmF2ZXJzYWxWaXN1YWxpemF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBBYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5PFRyYXZlcnNhbFN0cmF0ZWd5LkZpbmFsaXphdGlvblN0cmF0ZWd5PgotICAgICAgICBpbXBsZW1lbnRzIFRyYXZlcnNhbFN0cmF0ZWd5LkZpbmFsaXphdGlvblN0cmF0ZWd5IHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxDbGFzczw/IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kuRmluYWxpemF0aW9uU3RyYXRlZ3k+PiBQT1NUUyA9IG5ldyBIYXNoU2V0PD4oKTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIFBPU1RTLmFkZChQcm9maWxlU3RyYXRlZ3kuY2xhc3MpOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgR2VwaGlSZW1vdGVBY2NlcHRvciBhY2NlcHRvcgotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc2lkZUVmZmVjdEtleSA9ICJ2aXotIiArIFVVSUQucmFuZG9tVVVJRCgpCi0KLSAgICBHZXBoaVRyYXZlcnNhbFZpc3VhbGl6YXRpb25TdHJhdGVneShmaW5hbCBHZXBoaVJlbW90ZUFjY2VwdG9yIGFjY2VwdG9yKSB7Ci0gICAgICAgIHRoaXMuYWNjZXB0b3IgPSBhY2NlcHRvcgotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHZvaWQgYXBwbHkoZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYXZlcnNhbCkgewotICAgICAgICBpZiAoVHJhdmVyc2FsSGVscGVyLm9uR3JhcGhDb21wdXRlcih0cmF2ZXJzYWwpKQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgLy8gb25seSBhcHBseSB0aGVzZSBzdHJhdGVnaWVzIGlmIHRoZSB0cmF2ZXJzYWwgd2FzIDpzdWJtaXQgdG8gdGhlIGFjY2VwdG9yIC0gb3RoZXJ3aXNlIHByb2Nlc3MgYXMgdXN1YWwKLSAgICAgICAgaWYgKGFjY2VwdG9yLnRyYXZlcnNhbFN1Ym1pdHRlZEZvclZpeikgewotICAgICAgICAgICAgZmluYWwgTGlzdDxHcmFwaFN0ZXA+IGdyYXBoU3RlcHMgPSBUcmF2ZXJzYWxIZWxwZXIuZ2V0U3RlcHNPZkFzc2lnbmFibGVDbGFzcyhHcmFwaFN0ZXAuY2xhc3MsIHRyYXZlcnNhbCkKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8VmVydGV4U3RlcD4gdmVydGV4U3RlcHMgPSBUcmF2ZXJzYWxIZWxwZXIuZ2V0U3RlcHNPZkFzc2lnbmFibGVDbGFzcyhWZXJ0ZXhTdGVwLmNsYXNzLCB0cmF2ZXJzYWwpCi0KLSAgICAgICAgICAgIGRlZiBMaXN0PFN0ZXA+IGFkZEFmdGVyID0gbmV3IEFycmF5TGlzdDw+KCkKLSAgICAgICAgICAgIGFkZEFmdGVyLmFkZEFsbChUcmF2ZXJzYWxIZWxwZXIuZ2V0U3RlcHNPZkFzc2lnbmFibGVDbGFzcyhFZGdlT3RoZXJWZXJ0ZXhTdGVwLmNsYXNzLCB0cmF2ZXJzYWwpKQotICAgICAgICAgICAgYWRkQWZ0ZXIuYWRkQWxsKFRyYXZlcnNhbEhlbHBlci5nZXRTdGVwc09mQXNzaWduYWJsZUNsYXNzKEVkZ2VWZXJ0ZXhTdGVwLmNsYXNzLCB0cmF2ZXJzYWwpKQotICAgICAgICAgICAgYWRkQWZ0ZXIuYWRkQWxsKHZlcnRleFN0ZXBzLnN0cmVhbSgpLmZpbHRlciB7IGl0LnJldHVybnNWZXJ0ZXgoKSB9LmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSkpCi0gICAgICAgICAgICBhZGRBZnRlci5hZGRBbGwoZ3JhcGhTdGVwcy5zdHJlYW0oKS5maWx0ZXIgeyBpdC5yZXR1cm5zVmVydGV4KCkgfS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpKQotCi0gICAgICAgICAgICAvLyBkZWNheSBhbGwgdmVydGljZXMgYW5kIHZpc2l0IGVhY2ggb25lIHRvIHVwZGF0ZSB0aGVpciBjb2xvcnMgdG8gdGhlIGJyaWdodGVzdAotICAgICAgICAgICAgYWRkQWZ0ZXIuZWFjaCB7IFN0ZXAgcyAtPgotICAgICAgICAgICAgICAgIFRyYXZlcnNhbEhlbHBlci5pbnNlcnRBZnRlclN0ZXAobmV3IExhbWJkYVNpZGVFZmZlY3RTdGVwKHRyYXZlcnNhbCwgeyBUcmF2ZXJzZXIgdHJhdmVyc2VyIC0+Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIEJ1bGtTZXQ8VmVydGV4PiB2ZXJ0aWNlcyA9ICgoQnVsa1NldDxWZXJ0ZXg+KSB0cmF2ZXJzZXIuc2lkZUVmZmVjdHMoc2lkZUVmZmVjdEtleSkpCi0gICAgICAgICAgICAgICAgICAgIGlmICghdmVydGljZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHRvci51cGRhdGVWaXNpdGVkVmVydGljZXMoKQotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXMuZm9yRWFjaCB7IFZlcnRleCB2LCBMb25nIGwgLT4gYWNjZXB0b3IudmlzaXRWZXJ0ZXhJbkdlcGhpKHYpIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzLmNsZWFyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChhY2NlcHRvci52aXpTdGVwRGVsYXkpCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSwgcywgdHJhdmVyc2FsKQotICAgICAgICAgICAgICAgIFRyYXZlcnNhbEhlbHBlci5pbnNlcnRBZnRlclN0ZXAobmV3IEFnZ3JlZ2F0ZVN0ZXAodHJhdmVyc2FsLCBzaWRlRWZmZWN0S2V5KSwgcywgdHJhdmVyc2FsKQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBkZWNheSBhbGwgdmVydGljZXMgZXhjZXB0IHRob3NlIHRoYXQgbWFkZSBpdCB0aHJvdWdoIHRoZSBmaWx0ZXIgLSAidGhpcyB3YXkgeW91IGNhbiB3YXRjaAotICAgICAgICAgICAgLy8gdGhlIEdyZW1saW5zIGR5aW5nIiAtIHNhaWQgZGFuaWVsIGt1cHBpdHouIGNhbid0IGRvIHRoaXMgZWFzaWx5IHdpdGggZ2VuZXJpYyBGaWx0ZXJTdGVwIGFzCi0gICAgICAgICAgICAvLyBpdCBjcmVhdGVzIG9kZCBiZWhhdmlvcnMgd2hlbiB1c2VkIHdpdGggbG9vcCAoZXh0cmEgZGVjYXkgdGhhdCBwcm9iYWJseSBzaG91bGRuJ3QgYmUgdGhlcmUuCi0gICAgICAgICAgICAvLyB0b2RvOiBjYW4gdGhpcyBiZSBiZXR0ZXI/IG1heWJlIHdlIHNob3VsZG4ndCBkbyB0aGlzIGF0IGFsbAotICAgICAgICAgICAgVHJhdmVyc2FsSGVscGVyLmdldFN0ZXBzT2ZBc3NpZ25hYmxlQ2xhc3MoSGFzU3RlcC5jbGFzcywgdHJhdmVyc2FsKS5lYWNoIHsgSGFzU3RlcCBzIC0+Ci0gICAgICAgICAgICAgICAgVHJhdmVyc2FsSGVscGVyLmluc2VydEFmdGVyU3RlcChuZXcgTGFtYmRhU2lkZUVmZmVjdFN0ZXAodHJhdmVyc2FsLCB7IFRyYXZlcnNlciB0cmF2ZXJzZXIgLT4KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQnVsa1NldDxPYmplY3Q+IG9iamVjdHMgPSAoKEJ1bGtTZXQ8T2JqZWN0PikgdHJhdmVyc2VyLnNpZGVFZmZlY3RzKHNpZGVFZmZlY3RLZXkpKQotICAgICAgICAgICAgICAgICAgICBpZiAoIW9iamVjdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gdmVydGljZXMgPSBvYmplY3RzLmZpbmRBbGwgeyBPYmplY3QgbyAtPiBvIGluc3RhbmNlb2YgVmVydGV4IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3QgeyBPYmplY3QgbyAtPiAoKFZlcnRleCkgbykuaWQoKS50b1N0cmluZygpIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdG9yLnVwZGF0ZVZpc2l0ZWRWZXJ0aWNlcyh2ZXJ0aWNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuY2xlYXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKGFjY2VwdG9yLnZpelN0ZXBEZWxheSkKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pLCBzLCB0cmF2ZXJzYWwpCi0gICAgICAgICAgICAgICAgVHJhdmVyc2FsSGVscGVyLmluc2VydEFmdGVyU3RlcChuZXcgQWdncmVnYXRlU3RlcCh0cmF2ZXJzYWwsIHNpZGVFZmZlY3RLZXkpLCBzLCB0cmF2ZXJzYWwpCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0PENsYXNzPD8gZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneS5GaW5hbGl6YXRpb25TdHJhdGVneT4+IGFwcGx5UG9zdCgpIHsKLSAgICAgICAgcmV0dXJuIFBPU1RTOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyR3JlbWxpblBsdWdpbi5qYXZhIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9Ecml2ZXJHcmVtbGluUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYzAyZDIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9Ecml2ZXJHcmVtbGluUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuSG9zdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5Mb2FkQmFsYW5jaW5nU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHRTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uQ29ubmVjdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuRHJpdmVyUmVtb3RlVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLk1lc3NhZ2VUZXh0U2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5BYnN0cmFjdEdyZW1saW5QbHVnaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuRGVmYXVsdEltcG9ydEN1c3RvbWl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0Q3VzdG9taXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLkNvbnNvbGVDdXN0b21pemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuR3JlbWxpblNoZWxsRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVBY2NlcHRvcjsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEcml2ZXJHcmVtbGluUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUGx1Z2luIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FID0gInRpbmtlcnBvcC5zZXJ2ZXIiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1wb3J0Q3VzdG9taXplciBpbXBvcnRzID0gRGVmYXVsdEltcG9ydEN1c3RvbWl6ZXIuYnVpbGQoKQotICAgICAgICAgICAgLmFkZENsYXNzSW1wb3J0cyhDbHVzdGVyLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBDbGllbnQuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIEhvc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIExvYWRCYWxhbmNpbmdTdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVNlcmlhbGl6ZXIuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFJlc3VsdC5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgUmVzdWx0U2V0LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBUb2tlbnMuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25FeGNlcHRpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBSZXNwb25zZVJlc3VsdC5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VTdGF0dXMuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMy5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBNZXNzYWdlVGV4dFNlcmlhbGl6ZXIuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6YXRpb25FeGNlcHRpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFNlcmlhbGl6ZXJzLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBTZXJUb2tlbnMuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24uY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIERyaXZlclJlbW90ZVRyYXZlcnNhbC5jbGFzcykuY3JlYXRlKCk7Ci0KLSAgICBwdWJsaWMgRHJpdmVyR3JlbWxpblBsdWdpbigpIHsKLSAgICAgICAgc3VwZXIoTkFNRSwgaW1wb3J0cywgbmV3IERyaXZlckNvbnNvbGVDdXN0b21pemVyKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERyaXZlckNvbnNvbGVDdXN0b21pemVyIGltcGxlbWVudHMgQ29uc29sZUN1c3RvbWl6ZXIgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFJlbW90ZUFjY2VwdG9yIGdldFJlbW90ZUFjY2VwdG9yKGZpbmFsIEdyZW1saW5TaGVsbEVudmlyb25tZW50IGVudmlyb25tZW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERyaXZlclJlbW90ZUFjY2VwdG9yKGVudmlyb25tZW50KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyUmVtb3RlQWNjZXB0b3IuamF2YSBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyUmVtb3RlQWNjZXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJhMzg0ZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0RyaXZlclJlbW90ZUFjY2VwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMzsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5leGNlcHRpb24uRXhjZXB0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdFNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLlJlc3BvbnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLkdyZW1saW5TaGVsbEVudmlyb25tZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlQWNjZXB0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5FbGVtZW50SGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5HcmVtbGluOwotCi1pbXBvcnQgamF2YXguc2VjdXJpdHkuc2FzbC5TYXNsRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKLQotLyoqCi0gKiBBIHtAbGluayBSZW1vdGVBY2NlcHRvcn0gdGhhdCB0YWtlcyBpbnB1dCBmcm9tIHRoZSBjb25zb2xlIGFuZCBzZW5kcyBpdCB0byBHcmVtbGluIFNlcnZlciBvdmVyIHRoZSBzdGFuZGFyZAotICogSmF2YSBkcml2ZXIuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEcml2ZXJSZW1vdGVBY2NlcHRvciBpbXBsZW1lbnRzIFJlbW90ZUFjY2VwdG9yIHsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT19USU1FT1VUID0gMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VSX0FHRU5UID0gIkdyZW1saW4gQ29uc29sZS8iICsgR3JlbWxpbi52ZXJzaW9uKCk7Ci0KLSAgICBwcml2YXRlIENsdXN0ZXIgY3VycmVudENsdXN0ZXI7Ci0gICAgcHJpdmF0ZSBDbGllbnQgY3VycmVudENsaWVudDsKLSAgICBwcml2YXRlIGludCB0aW1lb3V0ID0gTk9fVElNRU9VVDsKLSAgICBwcml2YXRlIE1hcDxTdHJpbmcsU3RyaW5nPiBhbGlhc2VzID0gbmV3IEhhc2hNYXA8PigpOwotICAgIHByaXZhdGUgT3B0aW9uYWw8U3RyaW5nPiBzZXNzaW9uID0gT3B0aW9uYWwuZW1wdHkoKTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9SRVNFVCA9ICJyZXNldCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX1NIT1cgPSAic2hvdyI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fTk9ORSA9ICJub25lIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fVElNRU9VVCA9ICJ0aW1lb3V0IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fQUxJQVMgPSAiYWxpYXMiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9TRVNTSU9OID0gInNlc3Npb24iOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9TRVNTSU9OX01BTkFHRUQgPSAic2Vzc2lvbi1tYW5hZ2VkIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fSEVMUCA9ICJoZWxwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gUE9TU0lCTEVfVE9LRU5TID0gQXJyYXlzLmFzTGlzdChUT0tFTl9USU1FT1VULCBUT0tFTl9BTElBUywgVE9LRU5fSEVMUCk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEdyZW1saW5TaGVsbEVudmlyb25tZW50IHNoZWxsRW52aXJvbm1lbnQ7Ci0KLSAgICBwdWJsaWMgRHJpdmVyUmVtb3RlQWNjZXB0b3IoZmluYWwgR3JlbWxpblNoZWxsRW52aXJvbm1lbnQgc2hlbGxFbnZpcm9ubWVudCkgewotICAgICAgICB0aGlzLnNoZWxsRW52aXJvbm1lbnQgPSBzaGVsbEVudmlyb25tZW50OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgY29ubmVjdChmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA8IDEpIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkV4cGVjdHMgdGhlIGxvY2F0aW9uIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlIG9yIHZhcmlhYmxlIG5hbWUgZm9yIGEgQ2x1c3RlciBvYmplY3QgYXMgYW4gYXJndW1lbnQiKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVPclZhciA9IGFyZ3MuZ2V0KDApOwotICAgICAgICAgICAgaWYgKG5ldyBGaWxlKGZpbGVPclZhcikuaXNGaWxlKCkpCi0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2x1c3RlciA9IENsdXN0ZXIub3BlbihmaWxlT3JWYXIpOwotICAgICAgICAgICAgZWxzZSBpZiAoc2hlbGxFbnZpcm9ubWVudC5nZXRWYXJpYWJsZShmaWxlT3JWYXIpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgbyA9IHNoZWxsRW52aXJvbm1lbnQuZ2V0VmFyaWFibGUoZmlsZU9yVmFyKTsKLSAgICAgICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIENsdXN0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2x1c3RlciA9IChDbHVzdGVyKSBvOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG51bGwgPT0gY3VycmVudENsdXN0ZXIpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiRXhwZWN0cyB0aGUgbG9jYXRpb24gb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgb3IgdmFyaWFibGUgbmFtZSBmb3IgYSBDbHVzdGVyIG9iamVjdCBhcyBhbiBhcmd1bWVudCIpOwotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VTZXNzaW9uID0gYXJncy5zaXplKCkgPj0gMiAmJiAoYXJncy5nZXQoMSkuZXF1YWxzKFRPS0VOX1NFU1NJT04pIHx8IGFyZ3MuZ2V0KDEpLmVxdWFscyhUT0tFTl9TRVNTSU9OX01BTkFHRUQpKTsKLSAgICAgICAgICAgIGlmICh1c2VTZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNlc3Npb25OYW1lID0gYXJncy5zaXplKCkgPT0gMyA/IGFyZ3MuZ2V0KDIpIDogVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBzZXNzaW9uID0gT3B0aW9uYWwub2Yoc2Vzc2lvbk5hbWUpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBtYW5hZ2VkID0gYXJncy5nZXQoMSkuZXF1YWxzKFRPS0VOX1NFU1NJT05fTUFOQUdFRCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDbGllbnQgPSB0aGlzLmN1cnJlbnRDbHVzdGVyLmNvbm5lY3Qoc2Vzc2lvbk5hbWUsIG1hbmFnZWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDbGllbnQgPSB0aGlzLmN1cnJlbnRDbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMuY3VycmVudENsaWVudC5pbml0KCk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiQ29uZmlndXJlZCAlcyIsIHRoaXMuY3VycmVudENsdXN0ZXIpICsgZ2V0U2Vzc2lvblN0cmluZ1NlZ21lbnQoKTsKLSAgICAgICAgfSBjYXRjaCAoZmluYWwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGlnbm9yZWQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIlRoZSAnY29ubmVjdCcgb3B0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZpbGUiKTsKLSAgICAgICAgfSBjYXRjaCAoZmluYWwgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uIG5oYWUpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJDb25maWd1cmVkICVzLCBidXQgaG9zdCBub3QgcHJlc2VudGx5IGF2YWlsYWJsZS4gVGhlIEdyZW1saW4gQ29uc29sZSB3aWxsIGF0dGVtcHQgdG8gcmVjb25uZWN0IG9uIGVhY2ggcXVlcnkgc3VibWlzc2lvbiwgIiArCi0gICAgICAgICAgICAgICAgICAgICJob3dldmVyLCB5b3UgbWF5IHdpc2ggdG8gY2xvc2UgdGhpcyByZW1vdGUgYW5kIGludmVzdGlnYXRlIHRoZSBwcm9ibGVtIGRpcmVjdGx5LiAlcyIsIHRoaXMuY3VycmVudENsdXN0ZXIsIGdldFNlc3Npb25TdHJpbmdTZWdtZW50KCkpOwotICAgICAgICB9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oIkVycm9yIGR1cmluZyAnY29ubmVjdCcgLSAiICsgZXguZ2V0TWVzc2FnZSgpLCBleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGNvbmZpZ3VyZShmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBvcHRpb24gPSBhcmdzLnNpemUoKSA9PSAwID8gIiIgOiBhcmdzLmdldCgwKTsKLSAgICAgICAgaWYgKCFQT1NTSUJMRV9UT0tFTlMuY29udGFpbnMob3B0aW9uKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgiVGhlICdjb25maWcnIG9wdGlvbiBleHBlY3RzIG9uZSBvZiBbJyVzJ10gYXMgYW4gYXJndW1lbnQiLCBTdHJpbmcuam9pbigiLCIsIFBPU1NJQkxFX1RPS0VOUykpKTsKLQotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gYXJndW1lbnRzID0gYXJncy5zdWJMaXN0KDEsIGFyZ3Muc2l6ZSgpKTsKLQotICAgICAgICBpZiAob3B0aW9uLmVxdWFscyhUT0tFTl9IRUxQKSkgewotICAgICAgICAgICAgcmV0dXJuICI6cmVtb3RlIGNvbmZpZyBbdGltZW91dCBbPG1zPnxub25lXXxhbGlhcyBbcmVzZXR8c2hvd3w8YWxpYXM+IDxhY3R1YWw+XXxoZWxwXSI7Ci0gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmVxdWFscyhUT0tFTl9USU1FT1VUKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICJUaGUgdGltZW91dCBvcHRpb24gZXhwZWN0cyBhIHBvc2l0aXZlIGludGVnZXIgcmVwcmVzZW50aW5nIG1pbGxpc2Vjb25kcyBvciAnbm9uZScgYXMgYW4gYXJndW1lbnQiOwotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgIT0gMSkgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyBmaXJzdCBjaGVjayBmb3IgTUFYIHRpbWVvdXQgdGhlbiBOT05FIGFuZCBmaW5hbGx5IHBhcnNlIHRoZSBjb25maWcgdG8gaW50LgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBhcmd1bWVudHMuZ2V0KDApLmVxdWFscyhUT0tFTl9OT05FKSA/IE5PX1RJTUVPVVQgOiBJbnRlZ2VyLnBhcnNlSW50KGFyZ3VtZW50cy5nZXQoMCkpOwotICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0IDwgTk9fVElNRU9VVCkgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiVGhlIHZhbHVlIGZvciB0aGUgdGltZW91dCBjYW5ub3QgYmUgbGVzcyB0aGFuICIgKyBOT19USU1FT1VUKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGltZW91dCA9PSBOT19USU1FT1VUID8gIlJlbW90ZSB0aW1lb3V0IGlzIGRpc2FibGVkIiA6ICJTZXQgcmVtb3RlIHRpbWVvdXQgdG8gIiArIHRpbWVvdXQgKyAibXMiOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZWQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmVxdWFscyhUT0tFTl9BTElBUykpIHsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID09IDEgJiYgYXJndW1lbnRzLmdldCgwKS5lcXVhbHMoVE9LRU5fUkVTRVQpKSB7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5jbGVhcigpOwotICAgICAgICAgICAgICAgIHJldHVybiAiQWxpYXNlcyBjbGVhcmVkIjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPT0gMSAmJiBhcmd1bWVudHMuZ2V0KDApLmVxdWFscyhUT0tFTl9TSE9XKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBhbGlhc2VzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSAlIDIgIT0gMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJBcmd1bWVudHMgdG8gYWxpYXMgbXVzdCBiZSAncmVzZXQnIHRvIGNsZWFyIGFueSBleGlzdGluZyBhbGlhcyBzZXR0aW5ncyBvciBrZXkvdmFsdWUgYWxpYXMvYmluZGluZyBwYWlycyIpOwotCi0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYWxpYXNNYXAgPSBFbGVtZW50SGVscGVyLmFzTWFwKGFyZ3VtZW50cy50b0FycmF5KCkpOwotICAgICAgICAgICAgYWxpYXNlcy5jbGVhcigpOwotICAgICAgICAgICAgYWxpYXNNYXAuZm9yRWFjaCgoayx2KSAtPiBhbGlhc2VzLnB1dChrLCB2LnRvU3RyaW5nKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBhbGlhc2VzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHN1Ym1pdChmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsaW5lID0gZ2V0U2NyaXB0KFN0cmluZy5qb2luKCIgIiwgYXJncyksIHRoaXMuc2hlbGxFbnZpcm9ubWVudCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRTZXQgPSBzZW5kKGxpbmUpOwotICAgICAgICAgICAgdGhpcy5zaGVsbEVudmlyb25tZW50LnNldFZhcmlhYmxlKFJFU1VMVCwgcmVzdWx0U2V0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHRTZXQuc3RyZWFtKCkubWFwKHJlc3VsdCAtPiByZXN1bHQuZ2V0T2JqZWN0KCkpLml0ZXJhdG9yKCk7Ci0gICAgICAgIH0gY2F0Y2ggKFNhc2xFeGNlcHRpb24gc2FzbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiU2VjdXJpdHkgZXJyb3IgLSBjaGVjayB1c2VybmFtZS9wYXNzd29yZCBhbmQgcmVsYXRlZCBzZXR0aW5ncyIsIHNhc2wpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIC8vIHVzZXJzIG1heSB0cnkgdG8gc3VibWl0IGFmdGVyIGluaXRpYXRpbmcgY2x1c3RlciBvbiBhIGRlYWQgaG9zdCwgaWYgaG9zdCByZW1haW5zIHVuYXZhaWxhYmxlIGFmdGVyIGluaXRpYXRpb24sIG91dHB1dCB0aGlzIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgICAgIGlmIChleC5nZXRDYXVzZSgpLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiQ29uZmlndXJlZCAlcywgYnV0IGhvc3Qgbm90IHByZXNlbnRseSBhdmFpbGFibGUuIFRoZSBHcmVtbGluIENvbnNvbGUgd2lsbCBhdHRlbXB0IHRvIHJlY29ubmVjdCBvbiBlYWNoIHF1ZXJ5IHN1Ym1pc3Npb24sICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgImhvd2V2ZXIsIHlvdSBtYXkgd2lzaCB0byBjbG9zZSB0aGlzIHJlbW90ZSBhbmQgaW52ZXN0aWdhdGUgdGhlIHByb2JsZW0gZGlyZWN0bHkuICVzIiwgdGhpcy5jdXJyZW50Q2x1c3RlciwgZ2V0U2Vzc2lvblN0cmluZ1NlZ21lbnQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBPcHRpb25hbDxSZXNwb25zZUV4Y2VwdGlvbj4gaW5uZXIgPSBmaW5kUmVzcG9uc2VFeGNlcHRpb24oZXgpOwotICAgICAgICAgICAgaWYgKGlubmVyLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmVzcG9uc2VFeGNlcHRpb24gPSBpbm5lci5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VFeGNlcHRpb24uZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkgPT0gUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgiJXMgLSB0cnkgaW5jcmVhc2luZyB0aGUgdGltZW91dCB3aXRoIHRoZSA6cmVtb3RlIGNvbW1hbmQiLCByZXNwb25zZUV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlRXhjZXB0aW9uLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpID09IFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfU0VSSUFMSVpBVElPTikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2ZXIgY291bGQgbm90IHNlcmlhbGl6ZSB0aGUgcmVzdWx0IHJlcXVlc3RlZC4gU2VydmVyIGVycm9yIC0gJXMuIE5vdGUgdGhhdCB0aGUgY2xhc3MgbXVzdCBiZSBzZXJpYWxpemFibGUgYnkgdGhlIGNsaWVudCBhbmQgc2VydmVyIGZvciBwcm9wZXIgb3BlcmF0aW9uLiIsIHJlc3BvbnNlRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VFeGNlcHRpb24uZ2V0UmVtb3RlU3RhY2tUcmFjZSgpLm9yRWxzZShudWxsKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKHJlc3BvbnNlRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgcmVzcG9uc2VFeGNlcHRpb24uZ2V0UmVtb3RlU3RhY2tUcmFjZSgpLm9yRWxzZShudWxsKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV4LmdldENhdXNlKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290Q2F1c2UgPSBFeGNlcHRpb25VdGlscy5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgICAgIGlmIChyb290Q2F1c2UgaW5zdGFuY2VvZiBUaW1lb3V0RXhjZXB0aW9uKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJIb3N0IGRpZCBub3QgcmVzcG9uZCBpbiBhIHRpbWVseSBmYXNoaW9uIC0gY2hlY2sgdGhlIHNlcnZlciBzdGF0dXMgYW5kIHN1Ym1pdCBhZ2Fpbi4iKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24ocm9vdENhdXNlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oZXguZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHRoaXMuY3VycmVudENsaWVudCAhPSBudWxsKSB0aGlzLmN1cnJlbnRDbGllbnQuY2xvc2UoKTsKLSAgICAgICAgaWYgKHRoaXMuY3VycmVudENsdXN0ZXIgIT0gbnVsbCkgdGhpcy5jdXJyZW50Q2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0VGltZW91dCgpIHsKLSAgICAgICAgcmV0dXJuIHRpbWVvdXQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBMaXN0PFJlc3VsdD4gc2VuZChmaW5hbCBTdHJpbmcgZ3JlbWxpbikgdGhyb3dzIFNhc2xFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMuQnVpbGRlciBvcHRpb25zID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKTsKLSAgICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChvcHRpb25zOjphZGRBbGlhcyk7Ci0gICAgICAgICAgICBpZiAodGltZW91dCA+IE5PX1RJTUVPVVQpCi0gICAgICAgICAgICAgICAgb3B0aW9ucy50aW1lb3V0KHRpbWVvdXQpOwotCi0gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudChVU0VSX0FHRU5UKTsKLQotICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJzID0gdGhpcy5jdXJyZW50Q2xpZW50LnN1Ym1pdChncmVtbGluLCBvcHRpb25zLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gcnMuYWxsKCkuZ2V0KCk7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHN0YXR1c0F0dHJpYnV0ZXMgPSBycy5zdGF0dXNBdHRyaWJ1dGVzKCkuZ2V0Tm93KG51bGwpOwotCi0gICAgICAgICAgICAvLyBDaGVjayBmb3IgYW5kIHByaW50IHdhcm5pbmdzCi0gICAgICAgICAgICBpZiAobnVsbCAhPSBzdGF0dXNBdHRyaWJ1dGVzICYmIHN0YXR1c0F0dHJpYnV0ZXMuY29udGFpbnNLZXkoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfV0FSTklOR1MpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IHdhcm5pbmdBdHRyaWJ1dGVPYmplY3QgPSBzdGF0dXNBdHRyaWJ1dGVzLmdldChUb2tlbnMuU1RBVFVTX0FUVFJJQlVURV9XQVJOSU5HUyk7Ci0gICAgICAgICAgICAgICAgaWYgKHdhcm5pbmdBdHRyaWJ1dGVPYmplY3QgaW5zdGFuY2VvZiBMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoT2JqZWN0IHdhcm5pbmdMaXN0SXRlbSA6IChMaXN0PD8+KXdhcm5pbmdBdHRyaWJ1dGVPYmplY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBzaGVsbEVudmlyb25tZW50LmVyclByaW50bG4oU3RyaW5nLnZhbHVlT2Yod2FybmluZ0xpc3RJdGVtKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2hlbGxFbnZpcm9ubWVudC5lcnJQcmludGxuKFN0cmluZy52YWx1ZU9mKHdhcm5pbmdBdHRyaWJ1dGVPYmplY3QpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gaGFuZGxlIHNlY3VyaXR5IGVycm9yIGFzLWlzIGFuZCB1bndyYXBwZWQKLSAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPFRocm93YWJsZT4gdGhyb3dhYmxlICA9IFN0cmVhbS5vZihFeGNlcHRpb25VdGlscy5nZXRUaHJvd2FibGVzKGUpKS5maWx0ZXIodCAtPiB0IGluc3RhbmNlb2YgU2FzbEV4Y2VwdGlvbikuZmluZEZpcnN0KCk7Ci0gICAgICAgICAgICBpZiAodGhyb3dhYmxlLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIHRocm93IChTYXNsRXhjZXB0aW9uKSB0aHJvd2FibGUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gYWxsb3dSZW1vdGVDb25zb2xlKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gIkdyZW1saW4gU2VydmVyIC0gWyIgKyB0aGlzLmN1cnJlbnRDbHVzdGVyICsgIl0iICsgZ2V0U2Vzc2lvblN0cmluZ1NlZ21lbnQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE9wdGlvbmFsPFJlc3BvbnNlRXhjZXB0aW9uPiBmaW5kUmVzcG9uc2VFeGNlcHRpb24oZmluYWwgVGhyb3dhYmxlIGV4KSB7Ci0gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFJlc3BvbnNlRXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mKChSZXNwb25zZUV4Y2VwdGlvbikgZXgpOwotCi0gICAgICAgIGlmIChudWxsID09IGV4LmdldENhdXNlKCkpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWwuZW1wdHkoKTsKLQotICAgICAgICByZXR1cm4gZmluZFJlc3BvbnNlRXhjZXB0aW9uKGV4LmdldENhdXNlKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIGdldFNlc3Npb25TdHJpbmdTZWdtZW50KCkgewotICAgICAgICByZXR1cm4gc2Vzc2lvbi5pc1ByZXNlbnQoKSA/IFN0cmluZy5mb3JtYXQoIi1bJXNdIiwgc2Vzc2lvbi5nZXQoKSkgOiAiIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSBhIHNjcmlwdCBhcyBkZWZpbmVkIGluIHRoZSBzaGVsbCBjb250ZXh0LiAgVGhpcyBhbGxvd3MgZm9yIG11bHRpLWxpbmUgc2NyaXB0cyB0byBiZSBzdWJtaXR0ZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0U2NyaXB0KGZpbmFsIFN0cmluZyBzdWJtaXR0ZWRTY3JpcHQsIGZpbmFsIEdyZW1saW5TaGVsbEVudmlyb25tZW50IHNoZWxsRW52aXJvbm1lbnQpIHsKLSAgICAgICAgcmV0dXJuIHN1Ym1pdHRlZFNjcmlwdC5zdGFydHNXaXRoKCJAIikgPyBzaGVsbEVudmlyb25tZW50LmdldFZhcmlhYmxlKHN1Ym1pdHRlZFNjcmlwdC5zdWJzdHJpbmcoMSkpLnRvU3RyaW5nKCkgOiBzdWJtaXR0ZWRTY3JpcHQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9HZXBoaUdyZW1saW5QbHVnaW4uamF2YSBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvR2VwaGlHcmVtbGluUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZGNiYzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9HZXBoaUdyZW1saW5QbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5BYnN0cmFjdEdyZW1saW5QbHVnaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5Db25zb2xlQ3VzdG9taXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLkdyZW1saW5TaGVsbEVudmlyb25tZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlQWNjZXB0b3I7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgR2VwaGlHcmVtbGluUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUGx1Z2luIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJ0aW5rZXJwb3AuZ2VwaGkiOwotCi0gICAgcHVibGljIEdlcGhpR3JlbWxpblBsdWdpbigpIHsKLSAgICAgICAgc3VwZXIoTkFNRSwgbmV3IEdlcGhpQ29uc29sZUN1c3RvbWl6ZXIoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR2VwaGlDb25zb2xlQ3VzdG9taXplciBpbXBsZW1lbnRzIENvbnNvbGVDdXN0b21pemVyIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBSZW1vdGVBY2NlcHRvciBnZXRSZW1vdGVBY2NlcHRvcihmaW5hbCBHcmVtbGluU2hlbGxFbnZpcm9ubWVudCBncmVtbGluU2hlbGxFbnZpcm9ubWVudCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBHZXBoaVJlbW90ZUFjY2VwdG9yKGdyZW1saW5TaGVsbEVudmlyb25tZW50KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvUmVtb3RlR3JlbWxpblBsdWdpbi5qYXZhIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9SZW1vdGVHcmVtbGluUGx1Z2luLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwYWZkYgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvUmVtb3RlR3JlbWxpblBsdWdpbi5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjM7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5hdXRoLkF1dGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuQWJzdHJhY3RHcmVtbGluUGx1Z2luOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkRlZmF1bHRJbXBvcnRDdXN0b21pemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEN1c3RvbWl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2U7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKKworcHVibGljIGNsYXNzIFJlbW90ZUdyZW1saW5QbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5QbHVnaW4geworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAidGlua2VycG9wLnJlbW90ZSI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBJbXBvcnRDdXN0b21pemVyIGltcG9ydHMgPSBEZWZhdWx0SW1wb3J0Q3VzdG9taXplci5idWlsZCgpCisgICAgICAgICAgICAuYWRkQ2xhc3NJbXBvcnRzKENsdXN0ZXIuY2xhc3MsCisgICAgICAgICAgICAgICAgICAgIENsaWVudC5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgQXV0aC5jbGFzcykKKyAgICAgICAgICAgIC5hZGRNZXRob2RJbXBvcnRzKGFsbFN0YXRpY01ldGhvZHMoQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLmNsYXNzKSkKKyAgICAgICAgICAgIC5hZGRNZXRob2RJbXBvcnRzKGFsbFN0YXRpY01ldGhvZHMoQXV0aC5jbGFzcykpCisgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICBwdWJsaWMgUmVtb3RlR3JlbWxpblBsdWdpbigpIHsKKyAgICAgICAgc3VwZXIoTkFNRSwgbmV3IEhhc2hTZXQ8PihDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJncmVtbGluLWdyb292eSIpKSwgaW1wb3J0cyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxNZXRob2Q+IGFsbFN0YXRpY01ldGhvZHMoZmluYWwgQ2xhc3M8Pz4gY2xhenopIHsKKyAgICAgICAgcmV0dXJuIFN0cmVhbS5vZihjbGF6ei5nZXRNZXRob2RzKCkpLmZpbHRlcihtIC0+IE1vZGlmaWVyLmlzU3RhdGljKG0uZ2V0TW9kaWZpZXJzKCkpKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblBsdWdpbiBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblBsdWdpbgppbmRleCA2MzFjODg5Li42ZjJhZWNhIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5QbHVnaW4KKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluUGx1Z2luCkBAIC0xLDMgKzEsMiBAQAotb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMy5Ecml2ZXJHcmVtbGluUGx1Z2luCi1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuanNyMjIzLkdlcGhpR3JlbWxpblBsdWdpbgotb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMy5VdGlsaXRpZXNHcmVtbGluUGx1Z2luClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMy5SZW1vdGVHcmVtbGluUGx1Z2luCitvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuanNyMjIzLlV0aWxpdGllc0dyZW1saW5QbHVnaW4KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2NvbW1hbmRzL0J5dGVjb2RlQ29tbWFuZC5wcm9wZXJ0aWVzIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvY29tbWFuZHMvQnl0ZWNvZGVDb21tYW5kLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkOTZlNzIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvY29tbWFuZHMvQnl0ZWNvZGVDb21tYW5kLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLWNvbW1hbmQuZGVzY3JpcHRpb249R3JlbWxpbiBieXRlY29kZSBoZWxwZXIgY29tbWFuZHMKLWNvbW1hbmQudXNhZ2U9W2NvbmZpZyA8W0dyYXBoU09OTWFwcGVyfElvUmVnaXN0cnl8U2ltcGxlTW9kdWxlXT58ZnJvbSA8VHJhdmVyc2FsPnxyZXNldHx0cmFuc2xhdGUgPGc+IDxieXRlY29kZT5dCi1jb21tYW5kLmhlbHA9R3JlbWxpbiBieXRlY29kZSBoZWxwZXIgY29tbWFuZHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9SZW1vdGVDb21tYW5kLnByb3BlcnRpZXMgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9SZW1vdGVDb21tYW5kLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2NDkwNGQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvY29tbWFuZHMvUmVtb3RlQ29tbWFuZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotY29tbWFuZC5kZXNjcmlwdGlvbj1EZWZpbmUgYSByZW1vdGUgY29ubmVjdGlvbgotY29tbWFuZC51c2FnZT1bY3VycmVudHxjb25uZWN0IDx0eXBlLW9mLXJlbW90ZT4gWzxhcmdzPl18Y29uZmlnIDxhcmdzPnxsaXN0fG5leHR8cHJldnxjaG9vc2UgPGluZGV4PnxjbG9zZV0KLWNvbW1hbmQuaGVscD1EZWZpbmUgYW5kIG1hbmFnZSByZW1vdGUgY29ubmVjdGlvbnMgdG8gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIDpzdWJtaXQgY29tbWFuZCwgd2hpY2ggd2lsbCBzZW5kIEdyZW1saW4gc2NyaXB0cyB0byB0aGUgc3BlY2lmaWVkIHJlbW90ZSBhZ2VudCBmb3IgcHJvY2Vzc2luZy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9TdWJtaXRDb21tYW5kLnByb3BlcnRpZXMgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9jb21tYW5kcy9TdWJtaXRDb21tYW5kLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NDNkYjguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvY29tbWFuZHMvU3VibWl0Q29tbWFuZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotY29tbWFuZC5kZXNjcmlwdGlvbj1TZW5kIGEgR3JlbWxpbiBzY3JpcHQgdG8gR3JlbWxpbiBTZXJ2ZXIKLWNvbW1hbmQudXNhZ2U9PHNjcmlwdD4KLWNvbW1hbmQuaGVscD1TZW5kIGEgR3JlbWxpbiBzY3JpcHQgdG8gR3JlbWxpbiBTZXJ2ZXIgZ2l2ZW4gdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgYnkgdGhlIDpyZW1vdGUgY29tbWFuZC4gIFJlc3VsdHMgd2lsbCBiZSBzdG9yZWQgaW4gYSAicmVzZXJ2ZWQiIHZhcmlhYmxlIGRlZmluZWQgYXMgIl9sIi4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UgYi9ncmVtbGluLWNvbnNvbGUvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKaW5kZXggZTc4YWQwNC4uY2IwNTg5OSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3N0YXRpYy9MSUNFTlNFCisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9zdGF0aWMvTElDRU5TRQpAQCAtMjA3LDcgKzIwNyw3IEBACiAKIFRoZSBBcGFjaGUgVGlua2VyUG9wIHByb2plY3QgYnVuZGxlcyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgdW5kZXIgdGhlIEJTRCBMaWNlbnNlOgogCi0gICAgIEFudGxyNCAob3JnLmFudGxyOmFudGxyNC1ydW50aW1lOjQuOS4xIC0gaHR0cHM6Ly93d3cuYW50bHIub3JnKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvYW50bHI0CisgICAgIEFudGxyNCAob3JnLmFudGxyOmFudGxyNC1ydW50aW1lOjQuMTMuMiAtIGh0dHBzOi8vd3d3LmFudGxyLm9yZykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2FudGxyNAogICAgICBKTGluZSAoamxpbmU6amxpbmU6Mi4xNC42IC0gaHR0cHM6Ly9naXRodWIuY29tL2psaW5lL2psaW5lMikgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2psaW5lMgogICAgICBLcnlvIChjb20uZXNvdGVyaWNzb2Z0d2FyZTprcnlvLXNoYWRlZDozLjAuMyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9Fc290ZXJpY1NvZnR3YXJlL2tyeW8pCiAgICAgICAgLSBzaGFkZWQgaW4gZ3JlbWxpbi1zaGFkZWQgdG8gb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmtyeW8KQEAgLTIyMyw4ICsyMjMsOCBAQAogCiBUaGUgQXBhY2hlIFRpbmtlclBvcCBwcm9qZWN0IGJ1bmRsZXMgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIHVuZGVyIHRoZSBNSVQgTGljZW5zZToKIAotICAgICBKQ0wgMS4xLjEgaW1wbGVtZW50ZWQgb3ZlciBTTEY0SiAob3JnLnNsZjRqOmpjbC1vdmVyLXNsZjRqOjEuNy4yNSAtIGh0dHA6Ly93d3cuc2xmNGoub3JnKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvc2xmNGoKLSAgICAgU0xGNEogQVBJIE1vZHVsZSAob3JnLnNsZjRqOnNsZjRqLWFwaToxLjcuMjUgLSBodHRwOi8vd3d3LnNsZjRqLm9yZykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL3NsZjRqCisgICAgIFNMRjRKIEFQSSBNb2R1bGUgKG9yZy5zbGY0ajpzbGY0ai1hcGk6Mi4wLjE2IC0gaHR0cDovL3d3dy5zbGY0ai5vcmcpIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9zbGY0agorICAgICBSZWFjdGl2ZSBTdHJlYW1zIChvcmcucmVhY3RpdmVzdHJlYW1zOnJlYWN0aXZlLXN0cmVhbXM6MS4wLjQgLSBodHRwczovL3d3dy5yZWFjdGl2ZS1zdHJlYW1zLm9yZy8pIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9yZWFjdGl2ZS1zdHJlYW1zCiAgICAgIEZvdW5kYXRpb24gc3R5bGVzaGVldCBmb3IgQ29kZVJheSAoaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20pIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9mb3VuZGF0aW9uCiAgICAgIG5vcm1hbGl6ZS5jc3MgMi4xLjIgKGh0dHA6Ly9uZWNvbGFzLmdpdGh1Yi5pby9ub3JtYWxpemUuY3NzLykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL25vcm1hbGl6ZQogCkBAIC0yMzgsNSArMjM4LDUgQEAKIAogVGhlIEFwYWNoZSBUaW5rZXJQb3AgcHJvamVjdCBidW5kbGVzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyB1bmRlciB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAxLjA6CiAKLSAgICAgbG9nYmFjay1jb3JlIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNvcmU6MS4yLjEzIC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKLSAgICAgbG9nYmFjay1jbGFzc2ljIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNsYXNzaWM6MS4yLjEzIC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKKyAgICAgbG9nYmFjay1jb3JlIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNvcmU6MS4zLjE1IC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKKyAgICAgbG9nYmFjay1jbGFzc2ljIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNsYXNzaWM6MS4zLjE1IC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9zdGF0aWMvTk9USUNFIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3N0YXRpYy9OT1RJQ0UKaW5kZXggMmJlMjMzZS4uYjEzYzA2NSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3N0YXRpYy9OT1RJQ0UKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3N0YXRpYy9OT1RJQ0UKQEAgLTUsNyArNSw3IEBACiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFwYWNoZSBDb21tb25zIENvZGVjIDEuMTUgKEFMIEFTRikKK0FwYWNoZSBDb21tb25zIENvZGVjIDEuMjAuMCAoQUwgQVNGKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvdGVzdC9vcmcvYXBhY2hlL2NvbW1vbnMvY29kZWMvbGFuZ3VhZ2UvRG91YmxlTWV0YXBob25lVGVzdC5qYXZhCiBjb250YWlucyB0ZXN0IGRhdGEgZnJvbSBodHRwOi8vYXNwZWxsLm5ldC90ZXN0L29yaWcvYmF0Y2gwLnRhYi4KQEAgLTk0LDMgKzk0LDIyIEBACiBPYmplbmVzaXMgMy4zIC0gc2hhZGVkIGluIGdyZW1saW4tc2hhZGVkIHRvIG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5vYmplbmVzaXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29weXJpZ2h0IDIwMDYtMjAyMiBKb2UgV2FsbmVzLCBIZW5yaSBUcmVtYmxheSwgTGVvbmFyZG8gTWVzcXVpdGEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBV1MgU0RLIGZvciBKYXZhIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQorQW1hem9uIFRlY2hub2xvZ2llcywgSW5jIChodHRwOi8vd3d3LmFtYXpvbi5jb20vKS4KKworKioqKioqKioqKioqKioqKioqKioqKgorVEhJUkQgUEFSVFkgQ09NUE9ORU5UUworKioqKioqKioqKioqKioqKioqKioqKgorVGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0czoKKy0gWE1MIHBhcnNpbmcgYW5kIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gSmV0UzN0IC0gQ29weXJpZ2h0IDIwMDYtMjAwOSBKYW1lcyBNdXJ0eS4KKy0gUEtDUyMxIFBFTSBlbmNvZGVkIHByaXZhdGUga2V5IHBhcnNpbmcgYW5kIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gb2F1dGguZ29vZ2xlY29kZS5jb20gLSBDb3B5cmlnaHQgMTk5OC0yMDEwIEFPTCBJbmMuCistIEFwYWNoZSBDb21tb25zIExhbmcgLSBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2NvbW1vbnMtbGFuZworLSBOZXR0eSBSZWFjdGl2ZSBTdHJlYW1zIC0gaHR0cHM6Ly9naXRodWIuY29tL3BsYXlmcmFtZXdvcmsvbmV0dHktcmVhY3RpdmUtc3RyZWFtcworLSBKYWNrc29uLWNvcmUgLSBodHRwczovL2dpdGh1Yi5jb20vRmFzdGVyWE1ML2phY2tzb24tY29yZQorLSBKYWNrc29uLWRhdGFmb3JtYXQtY2JvciAtIGh0dHBzOi8vZ2l0aHViLmNvbS9GYXN0ZXJYTUwvamFja3Nvbi1kYXRhZm9ybWF0cy1iaW5hcnkKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9zdGF0aWMvbGljZW5zZXMvcmVhY3RpdmUtc3RyZWFtcyBiL2dyZW1saW4tY29uc29sZS9zcmMvbWFpbi9zdGF0aWMvbGljZW5zZXMvcmVhY3RpdmUtc3RyZWFtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTZjYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy9tYWluL3N0YXRpYy9saWNlbnNlcy9yZWFjdGl2ZS1zdHJlYW1zCkBAIC0wLDAgKzEsMTggQEAKK01JVCBObyBBdHRyaWJ1dGlvbgorCitDb3B5cmlnaHQgMjAxNCBSZWFjdGl2ZSBTdHJlYW1zCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzby4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvR3JlbWxpbkdyb292eXNoVGVzdC5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9HcmVtbGluR3Jvb3Z5c2hUZXN0Lmdyb292eQppbmRleCBiOTljYjc4Li43MzBmNGU4IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9HcmVtbGluR3Jvb3Z5c2hUZXN0Lmdyb292eQorKysgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9HcmVtbGluR3Jvb3Z5c2hUZXN0Lmdyb292eQpAQCAtMTgsMjMgKzE4LDI0IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlCiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuY29tbWFuZHMuUmVtb3RlQ29tbWFuZAorCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMy5BYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUuanNyMjIzLkRyaXZlclJlbW90ZUFjY2VwdG9yCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMy5Nb2NrR3Jvb3Z5R3JlbWxpblNoZWxsRW52aXJvbm1lbnQKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLlJlbW90ZUV4Y2VwdGlvbgoraW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjMuUmVtb3RlR3JlbWxpblBsdWdpbgoraW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLlN0b3JhZ2UKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVGVzdFN1cHBvcnQKIGltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LnRvb2xzLnNoZWxsLklPCiBpbXBvcnQgb3JnLmp1bml0LlRlc3QKIAotaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHMKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzCiAKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWUKIAogY2xhc3MgR3JlbWxpbkdyb292eXNoVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdCB7CiAgICAgcHJpdmF0ZSBJTyB0ZXN0aW8KICAgICBwcml2YXRlIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXQKICAgICBwcml2YXRlIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBlcnIKICAgICBwcml2YXRlIEdyZW1saW5Hcm9vdnlzaCBzaGVsbAorICAgIHByaXZhdGUgRmlsZSBwcm9wZXJ0aWVzRmlsZQogCiAgICAgQE92ZXJyaWRlCiAgICAgdm9pZCBzZXRVcCgpIHsKQEAgLTQzLDE0MyArNDQsNTMgQEAKICAgICAgICAgZXJyID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpCiAgICAgICAgIHRlc3RpbyA9IG5ldyBJTyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oKSwgb3V0LCBlcnIpCiAgICAgICAgIHNoZWxsID0gbmV3IEdyZW1saW5Hcm9vdnlzaChuZXcgTWVkaWF0b3IobnVsbCksIHRlc3RpbykKKworICAgICAgICBwcmVwYXJlQ29uZmlnRmlsZXMoKQorICAgIH0KKworICAgIEBUZXN0CisgICAgdm9pZCBzaG91bGRHZXRSZXN1bHRGcm9tUmVtb3RlKCkgeworICAgICAgICBzaGVsbC5leGVjdXRlKCJpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbCIpCisgICAgICAgIHNoZWxsLmV4ZWN1dGUoImcgPSB0cmF2ZXJzYWwoKS53aXRoKCciICsgU3RvcmFnZS50b1BhdGgocHJvcGVydGllc0ZpbGUpICsgIicpIikKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgc2hlbGwuZXhlY3V0ZSgiZy5WKCkuY291bnQoKS5uZXh0KCkiKQorCisgICAgICAgIC8vIDYgdmVydGljZXMgaW4gbW9kZXJuIGdyYXBoCisgICAgICAgIGFzc2VydFRydWUob3V0LnRvU3RyaW5nKCkuZW5kc1dpdGgoIjYiICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSkpCisgICAgfQorCisgICAgQFRlc3QKKyAgICB2b2lkIHNob3VsZFVzZVJlbW90ZVBsdWdpbigpIHsKKyAgICAgICAgZmluYWwgUmVtb3RlR3JlbWxpblBsdWdpbiBwbHVnaW4gPSBuZXcgUmVtb3RlR3JlbWxpblBsdWdpbigpOworICAgICAgICBmaW5hbCBQbHVnZ2VkSW4gcGx1Z2dlZEluID0gbmV3IFBsdWdnZWRJbihwbHVnaW4sIHNoZWxsLCB0ZXN0aW8sIGZhbHNlKQorICAgICAgICBwbHVnZ2VkSW4uYWN0aXZhdGUoKQorCisgICAgICAgIHNoZWxsLmV4ZWN1dGUoImcgPSB0cmF2ZXJzYWwoKS53aXRoKCciICsgU3RvcmFnZS50b1BhdGgocHJvcGVydGllc0ZpbGUpICsgIicpIikKKyAgICAgICAgb3V0LnJlc2V0KCkKKyAgICAgICAgc2hlbGwuZXhlY3V0ZSgiZy5WKCkuY291bnQoKS5uZXh0KCkiKQorCisgICAgICAgIC8vIDYgdmVydGljZXMgaW4gbW9kZXJuIGdyYXBoCisgICAgICAgIGFzc2VydFRydWUob3V0LnRvU3RyaW5nKCkuZW5kc1dpdGgoIjYiICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSkpCiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgdm9pZCB0ZWFyRG93bigpIHsKICAgICAgICAgc3VwZXIudGVhckRvd24oKQogICAgICAgICBzaGVsbC5leGVjdXRlKCI6cHVyZ2UgcHJlZmVyZW5jZXMiKSAvLyBmb3IgdGVzdCBjYXNlcyB3aGVyZSBwZXJzaXN0ZW50IHByZWZlcmVuY2VzIChpbnRlcnByZXRlck1vZGUpIGFyZSBzZXQuCisKKyAgICAgICAgRmlsZXMuZGVsZXRlSWZFeGlzdHMocHJvcGVydGllc0ZpbGUudG9QYXRoKCkpCiAgICAgfQogCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZEVuYWJsZVJlbW90ZUNvbnNvbGUoKSB7Ci0gICAgICAgIHNldHVwUmVtb3RlKHNoZWxsKQotICAgICAgICBzaGVsbC5leGVjdXRlKCI6cmVtb3RlIGNvbnNvbGUiKQorICAgIHZvaWQgcHJlcGFyZUNvbmZpZ0ZpbGVzKCkgeworICAgICAgICBmaW5hbCBGaWxlIGNvbmZpZ0ZpbGUgPSBUZXN0U3VwcG9ydC5nZW5lcmF0ZVRlbXBGaWxlRnJvbVJlc291cmNlKEFic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdC5jbGFzcywgInJlbW90ZS55YW1sIiwgIiIpCisgICAgICAgIHByb3BlcnRpZXNGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgicmVtb3RlLWdyYXBoIiwgIi5wcm9wZXJ0aWVzIikKIAotICAgICAgICBhc3NlcnQgKGZhbHNlID09IHNoZWxsLm1lZGlhdG9yLmxvY2FsRXZhbHVhdGlvbikKLSAgICAgICAgYXNzZXJ0IG91dC50b1N0cmluZygpLnN0YXJ0c1dpdGgoIkFsbCBzY3JpcHRzIHdpbGwgbm93IGJlIHNlbnQgdG8iKQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRHZXRTaW1wbGVSZXN1bHRGcm9tUmVtb3RlQ29uc29sZSgpIHsKLSAgICAgICAgc2V0dXBSZW1vdGUoc2hlbGwpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoIjpyZW1vdGUgY29uc29sZSIpCi0gICAgICAgIG91dC5yZXNldCgpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoIjErMSIpCi0KLSAgICAgICAgYXNzZXJ0ICgiMiIgPT0gb3V0LnRvU3RyaW5nKCkpCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZEdldEdyZW1saW5SZXN1bHRGcm9tUmVtb3RlQ29uc29sZSgpIHsKLSAgICAgICAgc2V0dXBSZW1vdGUoc2hlbGwpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoIjpyZW1vdGUgY29uc29sZSIpCi0gICAgICAgIG91dC5yZXNldCgpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoImcuVigpLmNvdW50KCkiKQotCi0gICAgICAgIGFzc2VydCAoIjAiID09IG91dC50b1N0cmluZygpKQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRHZXRNdWx0aWxpbmVSZXN1bHRGcm9tUmVtb3RlQ29uc29sZSgpIHsKLSAgICAgICAgc2V0dXBSZW1vdGUoc2hlbGwpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoIjpyZW1vdGUgY29uc29sZSIpCi0gICAgICAgIG91dC5yZXNldCgpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoImlmICh0cnVlKSB7IikKLSAgICAgICAgc2hlbGwuZXhlY3V0ZSgiZy5WKCkuY291bnQoKSB9IikKLQotICAgICAgICBhc3NlcnQgKCIwIiA9PSBvdXQudG9TdHJpbmcoKSkKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkTm90U3VibWl0SW5jb21wbGV0ZUxpbmVzRnJvbVJlbW90ZUNvbnNvbGUoKSB7Ci0gICAgICAgIHNldHVwUmVtb3RlKHNoZWxsKQotICAgICAgICBzaGVsbC5leGVjdXRlKCI6cmVtb3RlIGNvbnNvbGUiKQotICAgICAgICBzaGVsbC5leGVjdXRlKCJpZiAoMCA9PSBnLlYoKS5jb3VudCgpLm5leHQoKSkgeyIpCi0KLSAgICAgICAgYXNzZXJ0ICgwICE9IHNoZWxsLmJ1ZmZlcnMuY3VycmVudCgpLnNpemUoKSkKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUSU5LRVJQT1AtMzA0MCAtIHByaW9yIHRvIDMuNy40LCB0aGUgY29uc29sZSBldmFsdWF0ZWQgc2NyaXB0cyBsb2NhbGx5IGJlZm9yZSBzZW5kaW5nIHRvIHRoZSBzZXJ2ZXIgd2hpY2ggY291bGQKLSAgICAgKiBjcmVhdGUgYSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgd2VyZSBjbGFzc2VzIG5lZWRlZCBsb2NhbGx5IGZvciB0aGF0IGV2YWwgdG8gc3VjY2VlZCBmb3IgdGhlIHNjcmlwdCB0byBiZSBzZW50Ci0gICAgICogYW5kIHdvdWxkIHRoZXJlZm9yZSBlbmQgaW4gZXhjZXB0aW9uIGFuZCBub3QgYWxsb3cgdGhlIHNlbmQuIHRoZSBjb25zb2xlIHNob3VsZG4ndCBiZSBldmFsdWF0aW5nIHNjcmlwdHMgbG9jYWxseQotICAgICAqIHRvIGRldGVybWluZSB0aGVpciB2YWxpZGl0eS4gVGhlIGNvbnNvbGUgb25seSB3YW50cyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgY29tcGxldGUgZm9yIG11bHRpLWxpbmUgc3VibWlzc2lvbgotICAgICAqIG9uIDxlbnRlcj4uIFRoaXMgdGVzdCBzaW11bGF0ZXMgdGhpcyBzaXR1YXRpb24gYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uIGFuZCBhc3NlcnRpbmcgaXQgaXMgY29taW5nIGZyb20gdGhlCi0gICAgICogc2VydmVyIGFzIGEgUmVtb3RlRXhjZXB0aW9uLiBJZiBpdCBoYWQgZXhlY3V0ZWQgbG9jYWxseSB3ZSB3b3VsZCBoYXZlIGp1c3QgZ290dGVuIGEgRGVmYXVsdFRlbXBvcmFyeUV4Y2VwdGlvbi4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkTm90RXZhbFRvRGV0ZXJtaW5lSW5jb21wbGV0ZUxpbmVzVG9TdWJtaXRGb3JSZW1vdGVDb25zb2xlKCkgewotICAgICAgICBzZXR1cFJlbW90ZShzaGVsbCkKLSAgICAgICAgc2hlbGwuZXhlY3V0ZSgiOnJlbW90ZSBjb25zb2xlIikKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgc2hlbGwuZXhlY3V0ZSgidGhyb3cgbmV3IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuRGVmYXVsdFRlbXBvcmFyeUV4Y2VwdGlvbigna2Fib29tISEnKSIpCi0gICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYSByZW1vdGUgZXhjZXB0aW9uIikKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnQgKCJrYWJvb20hISIgPT0gZXgubWVzc2FnZSkKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRHZXRHcmVtbGluUmVzdWx0RnJvbVJlbW90ZUNvbnNvbGVJbkludGVycHJldGVyTW9kZSgpIHsKLSAgICAgICAgc2V0dXBSZW1vdGUoc2hlbGwpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoIjpyZW1vdGUgY29uc29sZSIpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoIjpzZXQgaW50ZXJwcmV0ZXJNb2RlIikKLSAgICAgICAgb3V0LnJlc2V0KCkKLSAgICAgICAgc2hlbGwuZXhlY3V0ZSgiZy5WKCkuY291bnQoKSIpCi0KLSAgICAgICAgYXNzZXJ0ICgiMCIgPT0gb3V0LnRvU3RyaW5nKCkpCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZEdldE11bHRpbGluZVJlc3VsdEZyb21SZW1vdGVDb25zb2xlSW5JbnRlcnByZXRlck1vZGUoKSB7Ci0gICAgICAgIHNldHVwUmVtb3RlKHNoZWxsKQotICAgICAgICBzaGVsbC5leGVjdXRlKCI6cmVtb3RlIGNvbnNvbGUiKQotICAgICAgICBzaGVsbC5leGVjdXRlKCI6c2V0IGludGVycHJldGVyTW9kZSIpCi0gICAgICAgIG91dC5yZXNldCgpCi0gICAgICAgIHNoZWxsLmV4ZWN1dGUoImlmICh0cnVlKSB7IikKLSAgICAgICAgc2hlbGwuZXhlY3V0ZSgiZy5WKCkuY291bnQoKSB9IikKLQotICAgICAgICBhc3NlcnQgKCIwIiA9PSBvdXQudG9TdHJpbmcoKSkKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkT25seUV4ZWN1dGVPbmNlUmVtb3RlQ29uc29sZUluSW50ZXJwcmV0ZXJNb2RlKCkgewotICAgICAgICBzZXR1cFJlbW90ZShzaGVsbCkKLSAgICAgICAgc2hlbGwuZXhlY3V0ZSgiOnJlbW90ZSBjb25zb2xlIikKLSAgICAgICAgc2hlbGwuZXhlY3V0ZSgiOnNldCBpbnRlcnByZXRlck1vZGUiKQotICAgICAgICBvdXQucmVzZXQoKQotICAgICAgICBzaGVsbC5leGVjdXRlKCJhID0gMSIpCi0KLSAgICAgICAgYXNzZXJ0ICIxIiA9PSBvdXQudG9TdHJpbmcoKQotICAgIH0KLQotICAgIHByaXZhdGUgZGVmIHNldHVwUmVtb3RlKEdyZW1saW5Hcm9vdnlzaCBzaGVsbCkgewotICAgICAgICBzaGVsbC5zZXRSZXN1bHRIb29rKGhhbmRsZVJlc3VsdCkKLSAgICAgICAgc2hlbGwucmVnaXN0ZXIobmV3IFJlbW90ZUNvbW1hbmQoc2hlbGwsIHNoZWxsLm1lZGlhdG9yKSkKLSAgICAgICAgc2hlbGwubWVkaWF0b3IuYWRkUmVtb3RlKG5ldyBEcml2ZXJSZW1vdGVBY2NlcHRvcihuZXcgTW9ja0dyb292eUdyZW1saW5TaGVsbEVudmlyb25tZW50KHNoZWxsKSkpCi0gICAgICAgIHNoZWxsLm1lZGlhdG9yLmN1cnJlbnRSZW1vdGUoKS5jb25uZWN0KFtQYXRocy5nZXQoQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0LmNsYXNzLmdldFJlc291cmNlKCJyZW1vdGUueWFtbCIpLnRvVVJJKCkpLnRvU3RyaW5nKCldKQotCi0gICAgICAgIHNlcnZlci5nZXRTZXJ2ZXJHcmVtbGluRXhlY3V0b3IoKS5nZXRHcmVtbGluRXhlY3V0b3IoKS5nZXRTY3JpcHRFbmdpbmVNYW5hZ2VyKCkucHV0KAotICAgICAgICAgICAgICAgICJnIiwKLSAgICAgICAgICAgICAgICBzZXJ2ZXIuZ2V0U2VydmVyR3JlbWxpbkV4ZWN1dG9yKCkuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0R3JhcGgoImdyYXBoIikudHJhdmVyc2FsKCkpCi0gICAgfQotCi0gICAgcHJpdmF0ZSBkZWYgaGFuZGxlUmVzdWx0ID0geyByZXN1bHQgLT4KLSAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEl0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBJdGVyYXRvciByZXN1bHRJdHIgPSAoSXRlcmF0b3IpIHJlc3VsdAotCi0gICAgICAgICAgICB3aGlsZSAocmVzdWx0SXRyLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIHRlc3Rpby5vdXQucHJpbnQocmVzdWx0SXRyLm5leHQoKSkKLSAgICAgICAgICAgICAgICB0ZXN0aW8ub3V0LmZsdXNoKCkKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBOdW1iZXIpIHsKLSAgICAgICAgICAgIHRlc3Rpby5vdXQucHJpbnQoKE51bWJlcikgcmVzdWx0KQotICAgICAgICAgICAgdGVzdGlvLm91dC5mbHVzaCgpCi0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0IGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0gICAgICAgICAgICB0ZXN0aW8ub3V0LnByaW50KChTdHJpbmcpIHJlc3VsdCkKLSAgICAgICAgICAgIHRlc3Rpby5vdXQuZmx1c2goKQorICAgICAgICBGaWxlcy5kZWxldGVJZkV4aXN0cyhwcm9wZXJ0aWVzRmlsZS50b1BhdGgoKSkKKyAgICAgICAgRmlsZXMuY3JlYXRlRmlsZShwcm9wZXJ0aWVzRmlsZS50b1BhdGgoKSkKKyAgICAgICAgdHJ5IChQcmludFN0cmVhbSBvdXQgPSBuZXcgUHJpbnRTdHJlYW0obmV3IEZpbGVPdXRwdXRTdHJlYW0ocHJvcGVydGllc0ZpbGUudG9QYXRoKCkudG9TdHJpbmcoKSkpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoImdyZW1saW4ucmVtb3RlLnJlbW90ZUNvbm5lY3Rpb25DbGFzcz1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuRHJpdmVyUmVtb3RlQ29ubmVjdGlvblxuIikKKyAgICAgICAgICAgIG91dC5wcmludCgiZ3JlbWxpbi5yZW1vdGUuZHJpdmVyLmNsdXN0ZXJGaWxlPSIgKyBTdG9yYWdlLnRvUGF0aChjb25maWdGaWxlKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiXG5ncmVtbGluLnJlbW90ZS5kcml2ZXIuc291cmNlTmFtZT1nXG4iKQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvTG9jYWxTYWZlUGFyc2VyVGVzdC5ncm9vdnkgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9Mb2NhbFNhZmVQYXJzZXJUZXN0Lmdyb292eQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3ZjgyNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9Mb2NhbFNhZmVQYXJzZXJUZXN0Lmdyb292eQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmNvbnNvbGUKLQotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLlBhcnNlQ29kZQotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLlBhcnNlU3RhdHVzCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZQotaW1wb3J0IG9yZy5qdW5pdC5UZXN0Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHMKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsCi0KLS8qKgotICogVW5pdCB0ZXN0cyBmb3Ige0BsaW5rIExvY2FsU2FmZVBhcnNlcn0uCi0gKi8KLWNsYXNzIExvY2FsU2FmZVBhcnNlclRlc3QgewotICAgIAotICAgIHByaXZhdGUgTG9jYWxTYWZlUGFyc2VyIHBhcnNlcgotICAgIAotICAgIEBCZWZvcmUKLSAgICB2b2lkIHNldFVwKCkgewotICAgICAgICBwYXJzZXIgPSBuZXcgTG9jYWxTYWZlUGFyc2VyKCkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkNvbXBsZXRlRm9yRW1wdHlCdWZmZXIoKSB7Ci0gICAgICAgIGRlZiBzdGF0dXMgPSBwYXJzZXIucGFyc2UoW10pCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuQ09NUExFVEUsIHN0YXR1cy5jb2RlKQotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkUmV0dXJuQ29tcGxldGVGb3JOdWxsQnVmZmVyKCkgewotICAgICAgICBkZWYgc3RhdHVzID0gcGFyc2VyLnBhcnNlKG51bGwpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuQ09NUExFVEUsIHN0YXR1cy5jb2RlKQotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkUmV0dXJuQ29tcGxldGVGb3JWYWxpZFNjcmlwdCgpIHsKLSAgICAgICAgZGVmIHNjcmlwdCA9IFsiZGVmIHggPSAxIiwgInByaW50bG4geCJdCi0gICAgICAgIGRlZiBzdGF0dXMgPSBwYXJzZXIucGFyc2Uoc2NyaXB0KQotICAgICAgICBhc3NlcnRFcXVhbHMoUGFyc2VDb2RlLkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkNvbXBsZXRlRm9yVmFsaWRTaW5nbGVMaW5lU2NyaXB0KCkgewotICAgICAgICBkZWYgc2NyaXB0ID0gWyJkZWYgeCA9IDE7IHByaW50bG4geCJdCi0gICAgICAgIGRlZiBzdGF0dXMgPSBwYXJzZXIucGFyc2Uoc2NyaXB0KQotICAgICAgICBhc3NlcnRFcXVhbHMoUGFyc2VDb2RlLkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkluY29tcGxldGVGb3JVbmNsb3NlZEN1cmx5QnJhY2tldCgpIHsKLSAgICAgICAgZGVmIHNjcmlwdCA9IFsiaWYgKHRydWUpIHsiLCAiICBwcmludGxuICdoZWxsbyciXQotICAgICAgICBkZWYgc3RhdHVzID0gcGFyc2VyLnBhcnNlKHNjcmlwdCkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFBhcnNlQ29kZS5JTkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkluY29tcGxldGVGb3JVbmNsb3NlZFBhcmVudGhlc2lzKCkgewotICAgICAgICBkZWYgc2NyaXB0ID0gWyJwcmludGxuKDEgKyAyIl0KLSAgICAgICAgZGVmIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuSU5DT01QTEVURSwgc3RhdHVzLmNvZGUpCi0gICAgfQotICAgIAotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRSZXR1cm5JbmNvbXBsZXRlRm9yVW5jbG9zZWRTcXVhcmVCcmFja2V0KCkgewotICAgICAgICBkZWYgc2NyaXB0ID0gWyJkZWYgbGlzdCA9IFsxLCAyLCAzIl0KLSAgICAgICAgZGVmIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuSU5DT01QTEVURSwgc3RhdHVzLmNvZGUpCi0gICAgfQotICAgIAotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRSZXR1cm5JbmNvbXBsZXRlRm9yVW5jbG9zZWRTaW5nbGVRdW90ZVN0cmluZygpIHsKLSAgICAgICAgZGVmIHNjcmlwdCA9IFsiZGVmIHMgPSAndW5jbG9zZWQgc3RyaW5nIl0KLSAgICAgICAgZGVmIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuSU5DT01QTEVURSwgc3RhdHVzLmNvZGUpCi0gICAgfQotICAgIAotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRSZXR1cm5JbmNvbXBsZXRlRm9yVW5jbG9zZWREb3VibGVRdW90ZVN0cmluZygpIHsKLSAgICAgICAgZGVmIHNjcmlwdCA9IFsiZGVmIHMgPSBcInVuY2xvc2VkIHN0cmluZyJdCi0gICAgICAgIGRlZiBzdGF0dXMgPSBwYXJzZXIucGFyc2Uoc2NyaXB0KQotICAgICAgICBhc3NlcnRFcXVhbHMoUGFyc2VDb2RlLklOQ09NUExFVEUsIHN0YXR1cy5jb2RlKQotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkUmV0dXJuSW5jb21wbGV0ZUZvclVuY2xvc2VkVHJpcGxlUXVvdGVTdHJpbmcoKSB7Ci0gICAgICAgIGRlZiBzY3JpcHQgPSBbImRlZiBzID0gJycndW5jbG9zZWQgdHJpcGxlIHF1b3RlIHN0cmluZyJdCi0gICAgICAgIFBhcnNlU3RhdHVzIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuSU5DT01QTEVURSwgc3RhdHVzLmNvZGUpCi0gICAgfQotICAgIAotICAgIEBUZXN0Ci0gICAgdm9pZCBzaG91bGRSZXR1cm5JbmNvbXBsZXRlRm9yVW5leHBlY3RlZEVPRigpIHsKLSAgICAgICAgZGVmIHNjcmlwdCA9IFsiZGVmIG1ldGhvZCgpIHsiXQotICAgICAgICBkZWYgc3RhdHVzID0gcGFyc2VyLnBhcnNlKHNjcmlwdCkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFBhcnNlQ29kZS5JTkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkluY29tcGxldGVGb3JVbmV4cGVjdGVkSW5wdXQoKSB7Ci0gICAgICAgIGRlZiBzY3JpcHQgPSBbImRlZiB4ID0gMSArIl0KLSAgICAgICAgZGVmIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuSU5DT01QTEVURSwgc3RhdHVzLmNvZGUpCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkluY29tcGxldGVGb3JJbnZhbGlkU3ludGF4KCkgewotICAgICAgICAvLyBWYXJpYWJsZSBuYW1lIGNhbm5vdCBzdGFydCB3aXRoIGEgbnVtYmVyCi0gICAgICAgIGRlZiBzY3JpcHQgPSBbImRlZiAxeCA9IDEiXQotICAgICAgICBkZWYgc3RhdHVzID0gcGFyc2VyLnBhcnNlKHNjcmlwdCkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFBhcnNlQ29kZS5JTkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkNvbXBsZXRlRm9yU3ludGF4RXJyb3IoKSB7Ci0gICAgICAgIGRlZiBzY3JpcHQgPSBbImRlZiB4ID0gMTsiLCAieC5ub25FeGlzdGVudE1ldGhvZCgpIl0KLSAgICAgICAgZGVmIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuQ09NUExFVEUsIHN0YXR1cy5jb2RlKQotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkUmV0dXJuRXJyb3JGb3JVbmV4cGVjdGVkQ2xvc2luZ0JyYWNrZXQoKSB7Ci0gICAgICAgIGRlZiBzY3JpcHQgPSBbImRlZiB4ID0gMX0iLCAicHJpbnRsbiB4Il0KLSAgICAgICAgZGVmIHN0YXR1cyA9IHBhcnNlci5wYXJzZShzY3JpcHQpCi0gICAgICAgIGFzc2VydEVxdWFscyhQYXJzZUNvZGUuRVJST1IsIHN0YXR1cy5jb2RlKQotICAgICAgICBhc3NlcnROb3ROdWxsKHN0YXR1cy5jYXVzZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkluY29tcGxldGVGb3JNdWx0aWxpbmVJbmNvbXBsZXRlU2NyaXB0KCkgewotICAgICAgICBkZWYgc2NyaXB0ID0gWwotICAgICAgICAgICAgImRlZiBtZXRob2QoKSB7IiwKLSAgICAgICAgICAgICIgIGlmICh0cnVlKSB7IiwKLSAgICAgICAgICAgICIgICAgcHJpbnRsbiAnaGVsbG8nIiwKLSAgICAgICAgICAgICIgIH0iCi0gICAgICAgIF0KLQotICAgICAgICBkZWYgc3RhdHVzID0gcGFyc2VyLnBhcnNlKHNjcmlwdCkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFBhcnNlQ29kZS5JTkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkNvbXBsZXRlRm9yTXVsdGlsaW5lQ29tcGxldGVTY3JpcHQoKSB7Ci0gICAgICAgIGRlZiBzY3JpcHQgPSBbCi0gICAgICAgICAgICAiZGVmIG1ldGhvZCgpIHsiLAotICAgICAgICAgICAgIiAgaWYgKHRydWUpIHsiLAotICAgICAgICAgICAgIiAgICBwcmludGxuICdoZWxsbyciLAotICAgICAgICAgICAgIiAgfSIsCi0gICAgICAgICAgICAifSIKLSAgICAgICAgXQotCi0gICAgICAgIGRlZiBzdGF0dXMgPSBwYXJzZXIucGFyc2Uoc2NyaXB0KQotICAgICAgICBhc3NlcnRFcXVhbHMoUGFyc2VDb2RlLkNPTVBMRVRFLCBzdGF0dXMuY29kZSkKLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICB2b2lkIHNob3VsZFJldHVybkluY29tcGxldGVGb3JJbmNvbXBsZXRlR3JlbWxpblRyYXZlcnNhbCgpIHsKLSAgICAgICAgZGVmIHNjcmlwdCA9IFsiZy5WKCkuaGFzKCJdCi0gICAgICAgIGRlZiBzdGF0dXMgPSBwYXJzZXIucGFyc2Uoc2NyaXB0KQotICAgICAgICBhc3NlcnRFcXVhbHMoUGFyc2VDb2RlLklOQ09NUExFVEUsIHN0YXR1cy5jb2RlKQotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHZvaWQgc2hvdWxkUmV0dXJuQ29tcGxldGVGb3JDb21wbGV0ZUdyZW1saW5UcmF2ZXJzYWwoKSB7Ci0gICAgICAgIGRlZiBzY3JpcHQgPSBbImcuVigpLmNvdW50KCkiXQotICAgICAgICBkZWYgc3RhdHVzID0gcGFyc2VyLnBhcnNlKHNjcmlwdCkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFBhcnNlQ29kZS5DT01QTEVURSwgc3RhdHVzLmNvZGUpCi0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0LmphdmEgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0Fic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdC5qYXZhCmluZGV4IDE4YzU2NTUuLmY5ZmMxNDYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9BYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QuamF2YQpAQCAtMjUsNiArMjUsNyBAQAogCiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIAogLyoqCiAgKiBTdGFydHMgYW5kIHN0b3BzIGFuIGluc3RhbmNlIGZvciBlYWNoIGV4ZWN1dGVkIHRlc3QuCkBAIC00OCw4ICs0OSwxMiBAQAogICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IFNldHRpbmdzLnJlYWQoc3RyZWFtKTsKIAogICAgICAgICBmaW5hbCBTZXR0aW5ncyBvdmVycmlkZW5TZXR0aW5ncyA9IG92ZXJyaWRlU2V0dGluZ3Moc2V0dGluZ3MpOwotICAgICAgICBTdHJpbmcgcHJvcCA9IFBhdGhzLmdldChBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QuY2xhc3MuZ2V0UmVzb3VyY2UoInRpbmtlcmdyYXBoLWVtcHR5LnByb3BlcnRpZXMiKS50b1VSSSgpKS50b1N0cmluZygpOworICAgICAgICBmaW5hbCBTdHJpbmcgcHJvcCA9IFBhdGhzLmdldChBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QuY2xhc3MuZ2V0UmVzb3VyY2UoInRpbmtlcmdyYXBoLWVtcHR5LnByb3BlcnRpZXMiKS50b1VSSSgpKS50b1N0cmluZygpOwogICAgICAgICBvdmVycmlkZW5TZXR0aW5ncy5ncmFwaHMucHV0KCJncmFwaCIsIHByb3ApOworICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gUGF0aHMuZ2V0KEFic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdC5jbGFzcy5nZXRSZXNvdXJjZSgiZ2VuZXJhdGUuZ3Jvb3Z5IikudG9VUkkoKSkudG9TdHJpbmcoKTsKKyAgICAgICAgb3ZlcnJpZGVuU2V0dGluZ3Muc2NyaXB0RW5naW5lcy5nZXQoImdyZW1saW4tZ3Jvb3Z5IikucGx1Z2lucworICAgICAgICAgICAgICAgIC5nZXQoIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLlNjcmlwdEZpbGVHcmVtbGluUGx1Z2luIikKKyAgICAgICAgICAgICAgICAucHV0KCJmaWxlcyIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3Qoc2NyaXB0KSk7CiAKICAgICAgICAgdGhpcy5zZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihvdmVycmlkZW5TZXR0aW5ncyk7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyUmVtb3RlQWNjZXB0b3JJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0RyaXZlclJlbW90ZUFjY2VwdG9ySW50ZWdyYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMThmZDRlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyUmVtb3RlQWNjZXB0b3JJbnRlZ3JhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMzsKLQotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLkdyb292eXNoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuR3JlbWxpblNoZWxsRW52aXJvbm1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uU3RvcmFnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuUnVsZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVsZXMuVGVzdE5hbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuY29udGFpbnNTdHJpbmc7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuc3RhcnRzV2l0aDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmNvbnRhaW5zOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuaGFzU2l6ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBEcml2ZXJSZW1vdGVBY2NlcHRvckludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QgewotICAgIHByaXZhdGUgZmluYWwgR3Jvb3Z5c2ggZ3Jvb3Z5c2ggPSBuZXcgR3Jvb3Z5c2goKTsKLSAgICBwcml2YXRlIERyaXZlclJlbW90ZUFjY2VwdG9yIGFjY2VwdG9yOwotCi0gICAgQFJ1bGUKLSAgICBwdWJsaWMgVGVzdE5hbWUgbmFtZSA9IG5ldyBUZXN0TmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogQ29uZmlndXJlIHNwZWNpZmljIEdyZW1saW4gU2VydmVyIHNldHRpbmdzIGZvciBzcGVjaWZpYyB0ZXN0cy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0dGluZ3Mgb3ZlcnJpZGVTZXR0aW5ncyhmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRpbmtlckdyYXBoQ29uZmlnID0gU3RvcmFnZS50b1BhdGgoVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlRnJvbVJlc291cmNlKHRoaXMuZ2V0Q2xhc3MoKSwgInRpbmtlcmdyYXBoLWVtcHR5LnByb3BlcnRpZXMiLCAiLnRtcCIpKTsKLSAgICAgICAgICAgIHNldHRpbmdzLmdyYXBocy5wdXQoImciLCB0aW5rZXJHcmFwaENvbmZpZyk7Ci0gICAgICAgICAgICByZXR1cm4gc2V0dGluZ3M7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIGJlZm9yZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmVtbGluU2hlbGxFbnZpcm9ubWVudCBlbnYgPSBuZXcgTW9ja0dyb292eUdyZW1saW5TaGVsbEVudmlyb25tZW50KGdyb292eXNoKTsKLSAgICAgICAgYWNjZXB0b3IgPSBuZXcgRHJpdmVyUmVtb3RlQWNjZXB0b3IoZW52KTsKLSAgICB9Ci0KLSAgICBAQWZ0ZXIKLSAgICBwdWJsaWMgdm9pZCBhZnRlcigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFjY2VwdG9yLmNsb3NlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbm5lY3RXaXRoUmVtb3RlWWFtbCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLCAicmVtb3RlLnlhbWwiLCAiLnRtcCIpKSkpLnRvU3RyaW5nKCksIHN0YXJ0c1dpdGgoIkNvbmZpZ3VyZWQgIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29ubmVjdFdpdGhSZW1vdGVWYXJpYWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBncm9vdnlzaC5nZXRJbnRlcnAoKS5ldmFsdWF0ZShDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJjbHVzdGVyID0gIiArIENsdXN0ZXIuY2xhc3MuZ2V0TmFtZSgpICsgIi5vcGVuKFwiIiArIFN0b3JhZ2UudG9QYXRoKFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSh0aGlzLmdldENsYXNzKCksICJyZW1vdGUueWFtbCIsICIudG1wIikpICsgIlwiKSIpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChhY2NlcHRvci5jb25uZWN0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoImNsdXN0ZXIiKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25uZWN0QW5kU3VibWl0U2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQXJyYXlzLmFzTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLCAicmVtb3RlLnlhbWwiLCAiLnRtcCIpKSwgInNlc3Npb24iKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiMSIsICgoSXRlcmF0b3IpIGFjY2VwdG9yLnN1Ym1pdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ4ID0gMSIpKSkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIwIiwgKChJdGVyYXRvcikgYWNjZXB0b3Iuc3VibWl0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInggLSAxIikpKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjAiLCAoKExpc3Q8UmVzdWx0PikgZ3Jvb3Z5c2guZ2V0SW50ZXJwKCkuZ2V0Q29udGV4dCgpLmdldFByb3BlcnR5KERyaXZlclJlbW90ZUFjY2VwdG9yLlJFU1VMVCkpLml0ZXJhdG9yKCkubmV4dCgpLmdldFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbm5lY3RBbmRTdWJtaXRNYW5hZ2VkU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQXJyYXlzLmFzTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLCAicmVtb3RlLnlhbWwiLCAiLnRtcCIpKSwgInNlc3Npb24tbWFuYWdlZCIpKS50b1N0cmluZygpLCBzdGFydHNXaXRoKCJDb25maWd1cmVkICIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIxIiwgKChJdGVyYXRvcikgYWNjZXB0b3Iuc3VibWl0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInggPSAxIikpKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjAiLCAoKEl0ZXJhdG9yKSBhY2NlcHRvci5zdWJtaXQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgieCAtIDEiKSkpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiMCIsICgoTGlzdDxSZXN1bHQ+KSBncm9vdnlzaC5nZXRJbnRlcnAoKS5nZXRDb250ZXh0KCkuZ2V0UHJvcGVydHkoRHJpdmVyUmVtb3RlQWNjZXB0b3IuUkVTVUxUKSkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0U3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29ubmVjdEFuZFN1Ym1pdFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLCAicmVtb3RlLnlhbWwiLCAiLnRtcCIpKSkpLnRvU3RyaW5nKCksIHN0YXJ0c1dpdGgoIkNvbmZpZ3VyZWQgIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjIiLCAoKEl0ZXJhdG9yKSBhY2NlcHRvci5zdWJtaXQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgiMSsxIikpKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjIiLCAoKExpc3Q8UmVzdWx0PikgZ3Jvb3Z5c2guZ2V0SW50ZXJwKCkuZ2V0Q29udGV4dCgpLmdldFByb3BlcnR5KERyaXZlclJlbW90ZUFjY2VwdG9yLlJFU1VMVCkpLml0ZXJhdG9yKCkubmV4dCgpLmdldFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbm5lY3RBbmRTdWJtaXRTaW1wbGVMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc2VydFRoYXQoYWNjZXB0b3IuY29ubmVjdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFN0b3JhZ2UudG9QYXRoKFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSh0aGlzLmdldENsYXNzKCksICJyZW1vdGUueWFtbCIsICIudG1wIikpKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoSXRlcmF0b3JVdGlscy5saXN0KCgoSXRlcmF0b3I8U3RyaW5nPikgYWNjZXB0b3Iuc3VibWl0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoIlsxLDIsMyw0LDVdIikpKSksIGNvbnRhaW5zKCIxIiwgIjIiLCAiMyIsICI0IiwgIjUiKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoKChMaXN0PFJlc3VsdD4pIGdyb292eXNoLmdldEludGVycCgpLmdldENvbnRleHQoKS5nZXRQcm9wZXJ0eShEcml2ZXJSZW1vdGVBY2NlcHRvci5SRVNVTFQpKS5zdHJlYW0oKS5tYXAoUmVzdWx0OjpnZXRTdHJpbmcpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSksIGNvbnRhaW5zKCIxIiwgIjIiLCAiMyIsICI0IiwgIjUiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25uZWN0QW5kUmV0dXJuVmVydGljZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzZXJ0VGhhdChhY2NlcHRvci5jb25uZWN0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoU3RvcmFnZS50b1BhdGgoVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlRnJvbVJlc291cmNlKHRoaXMuZ2V0Q2xhc3MoKSwgInJlbW90ZS55YW1sIiwgIi50bXAiKSkpKS50b1N0cmluZygpLCBzdGFydHNXaXRoKCJDb25maWd1cmVkICIpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChJdGVyYXRvclV0aWxzLmxpc3QoKChJdGVyYXRvcjxTdHJpbmc+KSBhY2NlcHRvci5zdWJtaXQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgiZy5hZGRWZXJ0ZXgoJ25hbWUnLCdzdGVwaGVuJyk7Zy5hZGRWZXJ0ZXgoJ25hbWUnLCdtYXJrbycpO2cudHJhdmVyc2FsKCkuVigpIikpKSksIGhhc1NpemUoMikpOwotICAgICAgICBhc3NlcnRUaGF0KCgoTGlzdDxSZXN1bHQ+KSBncm9vdnlzaC5nZXRJbnRlcnAoKS5nZXRDb250ZXh0KCkuZ2V0UHJvcGVydHkoRHJpdmVyUmVtb3RlQWNjZXB0b3IuUkVTVUxUKSkuc3RyZWFtKCkubWFwKFJlc3VsdDo6Z2V0U3RyaW5nKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpLCBoYXNTaXplKDIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbm5lY3RBbmRSZXR1cm5WZXJ0aWNlc1dpdGhBbkFsaWFzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc2VydFRoYXQoYWNjZXB0b3IuY29ubmVjdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFN0b3JhZ2UudG9QYXRoKFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSh0aGlzLmdldENsYXNzKCksICJyZW1vdGUueWFtbCIsICIudG1wIikpKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgICAgIGFjY2VwdG9yLmNvbmZpZ3VyZShBcnJheXMuYXNMaXN0KCJhbGlhcyIsICJ4IiwgImciKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoSXRlcmF0b3JVdGlscy5saXN0KCgoSXRlcmF0b3I8U3RyaW5nPikgYWNjZXB0b3Iuc3VibWl0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInguYWRkVmVydGV4KCduYW1lJywnc3RlcGhlbicpO3guYWRkVmVydGV4KCduYW1lJywnbWFya28nKTt4LnRyYXZlcnNhbCgpLlYoKSIpKSkpLCBoYXNTaXplKDIpKTsKLSAgICAgICAgYXNzZXJ0VGhhdCgoKExpc3Q8UmVzdWx0PikgZ3Jvb3Z5c2guZ2V0SW50ZXJwKCkuZ2V0Q29udGV4dCgpLmdldFByb3BlcnR5KERyaXZlclJlbW90ZUFjY2VwdG9yLlJFU1VMVCkpLnN0cmVhbSgpLm1hcChSZXN1bHQ6OmdldFN0cmluZykuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKSwgaGFzU2l6ZSgyKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25uZWN0QW5kU3VibWl0Rm9yTnVsbCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLCAicmVtb3RlLnlhbWwiLCAiLnRtcCIpKSkpLnRvU3RyaW5nKCksIHN0YXJ0c1dpdGgoIkNvbmZpZ3VyZWQgIikpOwotICAgICAgICBhc3NlcnRUaGF0KEl0ZXJhdG9yVXRpbHMubGlzdCgoKEl0ZXJhdG9yPFN0cmluZz4pIGFjY2VwdG9yLnN1Ym1pdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJnLnRyYXZlcnNhbCgpLlYoKS5kcm9wKCkuaXRlcmF0ZSgpO251bGwiKSkpKSwgY29udGFpbnMoIm51bGwiKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoKChMaXN0PFJlc3VsdD4pIGdyb292eXNoLmdldEludGVycCgpLmdldENvbnRleHQoKS5nZXRQcm9wZXJ0eShEcml2ZXJSZW1vdGVBY2NlcHRvci5SRVNVTFQpKS5zdHJlYW0oKS5tYXAoUmVzdWx0OjpnZXRPYmplY3QpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSksIGNvbnRhaW5zKCJudWxsIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29ubmVjdEFuZFN1Ym1pdEluU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQXJyYXlzLmFzTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLCAicmVtb3RlLnlhbWwiLCAiLnRtcCIpKSwgInNlc3Npb24iKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiMiIsICgoSXRlcmF0b3IpIGFjY2VwdG9yLnN1Ym1pdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ4PTErMSIpKSkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgKChMaXN0PFJlc3VsdD4pIGdyb292eXNoLmdldEludGVycCgpLmdldENvbnRleHQoKS5nZXRQcm9wZXJ0eShEcml2ZXJSZW1vdGVBY2NlcHRvci5SRVNVTFQpKS5pdGVyYXRvcigpLm5leHQoKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiNCIsICgoSXRlcmF0b3IpIGFjY2VwdG9yLnN1Ym1pdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ4KzIiKSkpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiNCIsICgoTGlzdDxSZXN1bHQ+KSBncm9vdnlzaC5nZXRJbnRlcnAoKS5nZXRDb250ZXh0KCkuZ2V0UHJvcGVydHkoRHJpdmVyUmVtb3RlQWNjZXB0b3IuUkVTVUxUKSkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0U3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29ubmVjdEFuZFN1Ym1pdEluTmFtZWRTZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc2VydFRoYXQoYWNjZXB0b3IuY29ubmVjdChBcnJheXMuYXNMaXN0KFN0b3JhZ2UudG9QYXRoKFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSh0aGlzLmdldENsYXNzKCksICJyZW1vdGUueWFtbCIsICIudG1wIikpLCAic2Vzc2lvbiIsICJBQUEiKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiMiIsICgoSXRlcmF0b3IpIGFjY2VwdG9yLnN1Ym1pdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ4PTErMSIpKSkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgKChMaXN0PFJlc3VsdD4pIGdyb292eXNoLmdldEludGVycCgpLmdldENvbnRleHQoKS5nZXRQcm9wZXJ0eShEcml2ZXJSZW1vdGVBY2NlcHRvci5SRVNVTFQpKS5pdGVyYXRvcigpLm5leHQoKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiNCIsICgoSXRlcmF0b3IpIGFjY2VwdG9yLnN1Ym1pdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ4KzIiKSkpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiNCIsICgoTGlzdDxSZXN1bHQ+KSBncm9vdnlzaC5nZXRJbnRlcnAoKS5nZXRDb250ZXh0KCkuZ2V0UHJvcGVydHkoRHJpdmVyUmVtb3RlQWNjZXB0b3IuUkVTVUxUKSkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0U3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29ubmVjdEFuZFN1Ym1pdFdpdGhUaW1lb3V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc2VydFRoYXQoYWNjZXB0b3IuY29ubmVjdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFN0b3JhZ2UudG9QYXRoKFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSh0aGlzLmdldENsYXNzKCksICJyZW1vdGUueWFtbCIsICIudG1wIikpKSkudG9TdHJpbmcoKSwgc3RhcnRzV2l0aCgiQ29uZmlndXJlZCAiKSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhY2NlcHRvci5zdWJtaXQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChTdHJpbmcuZm9ybWF0KCJnLndpdGgoJXMsIDEwKS5pbmplY3QoMCkuc2lkZUVmZmVjdHtUaHJlYWQuc2xlZXAoMTAwMDApfSIsIFRva2Vucy5BUkdTX0VWQUxfVElNRU9VVCkpKTsKLSAgICAgICAgICAgIGZhaWwoIlJlcXVlc3Qgc2hvdWxkIGhhdmUgdGltZWQgb3V0Iik7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgYXNzZXJ0VGhhdChyZS5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJldmFsdWF0aW9uVGltZW91dCIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyUmVtb3RlQWNjZXB0b3JUZXN0LmphdmEgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0RyaXZlclJlbW90ZUFjY2VwdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWQ0YTQ0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvRHJpdmVyUmVtb3RlQWNjZXB0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLmpzcjIyMzsKLQotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLkdyb292eXNoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLlJlbW90ZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5TdG9yYWdlOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5zdGFydHNXaXRoOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaGF0OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIERyaXZlclJlbW90ZUFjY2VwdG9yVGVzdCB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEdyb292eXNoIGdyb292eXNoID0gbmV3IEdyb292eXNoKCk7Ci0gICAgcHJpdmF0ZSBEcml2ZXJSZW1vdGVBY2NlcHRvciBhY2NlcHRvcjsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICAgICAgYWNjZXB0b3IgPSBuZXcgRHJpdmVyUmVtb3RlQWNjZXB0b3IobmV3IE1vY2tHcm9vdnlHcmVtbGluU2hlbGxFbnZpcm9ubWVudChncm9vdnlzaCkpOwotICAgIH0KLQotICAgIEBBZnRlcgotICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgYWNjZXB0b3IuY2xvc2UoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gUmVtb3RlRXhjZXB0aW9uLmNsYXNzKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdENvbmZpZ3VyZVdpdGhCYWRDb21tYW5kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFjY2VwdG9yLmNvbmZpZ3VyZShBcnJheXMuYXNMaXN0KCJ0ZXN0IikpOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gUmVtb3RlRXhjZXB0aW9uLmNsYXNzKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdENvbmZpZ3VyZVdpdGhVbmV2ZW5QYWlyc09mQWxpYXNlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhY2NlcHRvci5jb25maWd1cmUoQXJyYXlzLmFzTGlzdCgiYWxpYXMgZyBzb2NpYWwgeCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlc2V0QWxpYXNlcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLFN0cmluZz4gcmVzZXRBbGlhc2VzID0gKE1hcDxTdHJpbmcsU3RyaW5nPikgYWNjZXB0b3IuY29uZmlndXJlKEFycmF5cy5hc0xpc3QoImFsaWFzIiwgImciLCAibWFpbi5zb2NpYWwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCByZXNldEFsaWFzZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYWluLnNvY2lhbCIsIHJlc2V0QWxpYXNlcy5nZXQoImciKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJBbGlhc2VzIGNsZWFyZWQiLCBhY2NlcHRvci5jb25maWd1cmUoQXJyYXlzLmFzTGlzdCgiYWxpYXMiLCAicmVzZXQiKSkpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsU3RyaW5nPiBzaG93bkFsaWFzZXMgPSAoTWFwPFN0cmluZyxTdHJpbmc+KSBhY2NlcHRvci5jb25maWd1cmUoQXJyYXlzLmFzTGlzdCgiYWxpYXMiLCAic2hvdyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNob3duQWxpYXNlcy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQWRkT3ZlcndyaXRlQW5kU2hvd0FsaWFzZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxTdHJpbmc+IGFsaWFzZXMgPSAoTWFwPFN0cmluZyxTdHJpbmc+KSBhY2NlcHRvci5jb25maWd1cmUoQXJyYXlzLmFzTGlzdCgiYWxpYXMiLCAiZyIsICJzb2NpYWwiLCAiZ3JhcGgiLCAibWFpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGFsaWFzZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2NpYWwiLCBhbGlhc2VzLmdldCgiZyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYWluIiwgYWxpYXNlcy5nZXQoImdyYXBoIikpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsU3RyaW5nPiByZXNldEFsaWFzZXMgPSAoTWFwPFN0cmluZyxTdHJpbmc+KSBhY2NlcHRvci5jb25maWd1cmUoQXJyYXlzLmFzTGlzdCgiYWxpYXMiLCAiZyIsICJtYWluLnNvY2lhbCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlc2V0QWxpYXNlcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1haW4uc29jaWFsIiwgcmVzZXRBbGlhc2VzLmdldCgiZyIpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLFN0cmluZz4gc2hvd25BbGlhc2VzID0gKE1hcDxTdHJpbmcsU3RyaW5nPikgYWNjZXB0b3IuY29uZmlndXJlKEFycmF5cy5hc0xpc3QoImFsaWFzIiwgInNob3ciKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzaG93bkFsaWFzZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYWluLnNvY2lhbCIsIHNob3duQWxpYXNlcy5nZXQoImciKSk7Ci0gICAgfQotCi0gICAgQFRlc3QoZXhwZWN0ZWQgPSBSZW1vdGVFeGNlcHRpb24uY2xhc3MpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90Q29ubmVjdFdpdGhFbXB0eUFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYWNjZXB0b3IuY29ubmVjdChuZXcgQXJyYXlMaXN0PD4oKSk7Ci0gICAgfQotCi0gICAgQFRlc3QoZXhwZWN0ZWQgPSBSZW1vdGVFeGNlcHRpb24uY2xhc3MpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90Q29ubmVjdFdpdGhUb29NYW55QXJncygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhY2NlcHRvci5jb25uZWN0KEFycmF5cy5hc0xpc3QoInR3byIsICJ0b28iLCAibWFueSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IFJlbW90ZUV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RDb25uZWN0V2l0aEludmFsaWRDb25maWdGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFjY2VwdG9yLmNvbm5lY3QoQXJyYXlzLmFzTGlzdCgidGhpcy1pc250LXJlYWwueWFtbCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbmZpZ3VyZVRpbWVvdXRUb05vbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYWNjZXB0b3IuY29uZmlndXJlKEFycmF5cy5hc0xpc3QoInRpbWVvdXQiLCAibm9uZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKERyaXZlclJlbW90ZUFjY2VwdG9yLk5PX1RJTUVPVVQsIGFjY2VwdG9yLmdldFRpbWVvdXQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25maWd1cmVUaW1lb3V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFjY2VwdG9yLmNvbmZpZ3VyZShBcnJheXMuYXNMaXN0KCJ0aW1lb3V0IiwgIjEyMzQ1NiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyMzQ1NiwgYWNjZXB0b3IuZ2V0VGltZW91dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IFJlbW90ZUV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25maWd1cmVUaW1lb3V0Tm90TGVzc1RoYW5Ob1RpbWVvdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYWNjZXB0b3IuY29uZmlndXJlKEFycmF5cy5hc0xpc3QoInRpbWVvdXQiLCAiLTEiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25uZWN0V2l0aEVycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRoZXJlIGlzIG5vIGdyZW1saW4gc2VydmVyIHJ1bm5pbmcgZm9yIHRoaXMgdGVzdCwgc28gdGhlIGRyaXZlciB3aWxsIHRocm93IE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbiwgbG9nIGFuCi0gICAgICAgIC8vIGVycm9yLCBhbmQgcmV0dXJuIHdpdGggYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlLgotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQXJyYXlzLmFzTGlzdChTdG9yYWdlLnRvUGF0aChUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UodGhpcy5nZXRDbGFzcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlbW90ZS55YW1sIiwgIi50bXAiKSkpKS50b1N0cmluZygpLCBzdGFydHNXaXRoKCJDb25maWd1cmVkICIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0dlcGhpUmVtb3RlQWNjZXB0b3JJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL0dlcGhpUmVtb3RlQWNjZXB0b3JJbnRlZ3JhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyOGVlZTUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9HZXBoaVJlbW90ZUFjY2VwdG9ySW50ZWdyYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5qc3IyMjM7Ci0KLWltcG9ydCBjb20uZ2l0aHViLnRvbWFrZWh1cnN0LndpcmVtb2NrLmp1bml0LldpcmVNb2NrUnVsZTsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uaW5wdXQuTnVsbElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5hcGFjaGUuZ3Jvb3Z5Lmdyb292eXNoLkdyb292eXNoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uY29uc29sZS5HcmVtbGluR3Jvb3Z5c2g7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5jb25zb2xlLk1lZGlhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS50b29scy5zaGVsbC5JTzsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5SdWxlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLQotaW1wb3J0IHN0YXRpYyBjb20uZ2l0aHViLnRvbWFrZWh1cnN0LndpcmVtb2NrLmNsaWVudC5XaXJlTW9jay5hUmVzcG9uc2U7Ci1pbXBvcnQgc3RhdGljIGNvbS5naXRodWIudG9tYWtlaHVyc3Qud2lyZW1vY2suY2xpZW50LldpcmVNb2NrLmVxdWFsVG87Ci1pbXBvcnQgc3RhdGljIGNvbS5naXRodWIudG9tYWtlaHVyc3Qud2lyZW1vY2suY2xpZW50LldpcmVNb2NrLmVxdWFsVG9Kc29uOwotaW1wb3J0IHN0YXRpYyBjb20uZ2l0aHViLnRvbWFrZWh1cnN0LndpcmVtb2NrLmNsaWVudC5XaXJlTW9jay5nZXQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5naXRodWIudG9tYWtlaHVyc3Qud2lyZW1vY2suY2xpZW50LldpcmVNb2NrLmdldFJlcXVlc3RlZEZvcjsKLWltcG9ydCBzdGF0aWMgY29tLmdpdGh1Yi50b21ha2VodXJzdC53aXJlbW9jay5jbGllbnQuV2lyZU1vY2sucG9zdDsKLWltcG9ydCBzdGF0aWMgY29tLmdpdGh1Yi50b21ha2VodXJzdC53aXJlbW9jay5jbGllbnQuV2lyZU1vY2sucG9zdFJlcXVlc3RlZEZvcjsKLWltcG9ydCBzdGF0aWMgY29tLmdpdGh1Yi50b21ha2VodXJzdC53aXJlbW9jay5jbGllbnQuV2lyZU1vY2suc3R1YkZvcjsKLWltcG9ydCBzdGF0aWMgY29tLmdpdGh1Yi50b21ha2VodXJzdC53aXJlbW9jay5jbGllbnQuV2lyZU1vY2sudXJsUGF0aEVxdWFsVG87Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuc3RhcnRzV2l0aDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBHZXBoaVJlbW90ZUFjY2VwdG9ySW50ZWdyYXRlVGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3Jvb3Z5c2ggZ3Jvb3Z5c2ggPSBuZXcgR3JlbWxpbkdyb292eXNoKG5ldyBNZWRpYXRvcihudWxsKSwgbmV3IElPKCkpOwotICAgIHByaXZhdGUgc3RhdGljIGludCBwb3J0ID0gcGlja09wZW5Qb3J0KCk7Ci0KLSAgICBwcml2YXRlIEdlcGhpUmVtb3RlQWNjZXB0b3IgYWNjZXB0b3I7Ci0KLSAgICBwcml2YXRlIGZpbmFsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IE51bGxJbnB1dFN0cmVhbSgwKTsKLSAgICBwcml2YXRlIGZpbmFsIE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPdXRwdXRTdHJlYW0gZXJyb3JTdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBJTyBpbyA9IG5ldyBJTyhpbnB1dFN0cmVhbSwgb3V0cHV0U3RyZWFtLCBlcnJvclN0cmVhbSk7Ci0KLSAgICBAUnVsZQotICAgIHB1YmxpYyBXaXJlTW9ja1J1bGUgd2lyZU1vY2tSdWxlID0gbmV3IFdpcmVNb2NrUnVsZShwb3J0KTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gVGlua2VyRmFjdG9yeS5jcmVhdGVNb2Rlcm4oKTsKLSAgICAgICAgZ3Jvb3Z5c2guZ2V0SW50ZXJwKCkuZ2V0Q29udGV4dCgpLnNldFByb3BlcnR5KCJncmFwaCIsIGdyYXBoKTsKLSAgICB9Ci0KLSAgICBAQmVmb3JlCi0gICAgcHVibGljIHZvaWQgYmVmb3JlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFjY2VwdG9yID0gbmV3IEdlcGhpUmVtb3RlQWNjZXB0b3IobmV3IE1vY2tHcm9vdnlHcmVtbGluU2hlbGxFbnZpcm9ubWVudChncm9vdnlzaCwgaW8pKTsKLSAgICAgICAgYWNjZXB0b3IuY29uZmlndXJlKEFycmF5cy5hc0xpc3QoInBvcnQiLCBTdHJpbmcudmFsdWVPZihwb3J0KSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29ubmVjdFdpdGhEZWZhdWx0cygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRUaGF0KGFjY2VwdG9yLmNvbm5lY3QoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpLnRvU3RyaW5nKCksIHN0YXJ0c1dpdGgoIkNvbm5lY3Rpb24gdG8gR2VwaGkgLSBodHRwOi8vbG9jYWxob3N0OiIgKyBwb3J0ICsgIi93b3Jrc3BhY2UxIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0R3JhcGgoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3R1YkZvcihwb3N0KHVybFBhdGhFcXVhbFRvKCIvd29ya3NwYWNlMSIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgiZm9ybWF0IiwgZXF1YWxUbygiSlNPTiIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgib3BlcmF0aW9uIiwgZXF1YWxUbygidXBkYXRlR3JhcGgiKSkKLSAgICAgICAgICAgICAgICAud2lsbFJldHVybihhUmVzcG9uc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTdGF0dXMoMjAwKSkpOwotCi0gICAgICAgIHN0dWJGb3IoZ2V0KHVybFBhdGhFcXVhbFRvKCIvd29ya3NwYWNlMSIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgib3BlcmF0aW9uIiwgZXF1YWxUbygiZ2V0Tm9kZSIpKQotICAgICAgICAgICAgICAgIC53aWxsUmV0dXJuKGFSZXNwb25zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAud2l0aFN0YXR1cygyMDApKSk7Ci0KLSAgICAgICAgYWNjZXB0b3Iuc3VibWl0KEFycmF5cy5hc0xpc3QoImcgPSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaC5vcGVuKCk7Zy5hZGRWZXJ0ZXgoKTtnIikpOwotCi0gICAgICAgIHdpcmVNb2NrUnVsZS52ZXJpZnkoNCwgcG9zdFJlcXVlc3RlZEZvcih1cmxQYXRoRXF1YWxUbygiL3dvcmtzcGFjZTEiKSkpOwotICAgICAgICB3aXJlTW9ja1J1bGUudmVyaWZ5KDEsIGdldFJlcXVlc3RlZEZvcih1cmxQYXRoRXF1YWxUbygiL3dvcmtzcGFjZTEiKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0VHJhdmVyc2FsQWZ0ZXJDb25maWdXaXRoRGVmYXVsdEcoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3R1YkZvcihwb3N0KHVybFBhdGhFcXVhbFRvKCIvd29ya3NwYWNlMSIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgiZm9ybWF0IiwgZXF1YWxUbygiSlNPTiIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgib3BlcmF0aW9uIiwgZXF1YWxUbygidXBkYXRlR3JhcGgiKSkKLSAgICAgICAgICAgICAgICAud2lsbFJldHVybihhUmVzcG9uc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTdGF0dXMoMjAwKSkpOwotCi0gICAgICAgIGFjY2VwdG9yLmNvbmZpZ3VyZShBcnJheXMuYXNMaXN0KCJ2aXN1YWxUcmF2ZXJzYWwiLCAiZ3JhcGgiKSk7Ci0KLSAgICAgICAgLy8gY2FsbCBpdGVyYXRlKCkgYXMgZ3Jvb3Z5c2ggaXNuJ3QgcmlnZ2VkIHRvIGF1dG8taXRlcmF0ZQotICAgICAgICBhY2NlcHRvci5zdWJtaXQoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAidmcuVigyKS5pbigna25vd3MnKS5vdXQoJ2tub3dzJykuaGFzKCdhZ2UnLG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5ndCgzMCkpLm91dEUoJ2NyZWF0ZWQnKS5oYXMoJ3dlaWdodCcsb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLmd0KDAuNWQpKS5pblYoKS5pdGVyYXRlKCkiKSk7Ci0KLSAgICAgICAgd2lyZU1vY2tSdWxlLnZlcmlmeSgxOCwgcG9zdFJlcXVlc3RlZEZvcih1cmxQYXRoRXF1YWxUbygiL3dvcmtzcGFjZTEiKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0VHJhdmVyc2FsQWZ0ZXJDb25maWdXaXRoRGVmaW5lZEcoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3R1YkZvcihwb3N0KHVybFBhdGhFcXVhbFRvKCIvd29ya3NwYWNlMSIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgiZm9ybWF0IiwgZXF1YWxUbygiSlNPTiIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgib3BlcmF0aW9uIiwgZXF1YWxUbygidXBkYXRlR3JhcGgiKSkKLSAgICAgICAgICAgICAgICAud2lsbFJldHVybihhUmVzcG9uc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTdGF0dXMoMjAwKSkpOwotCi0gICAgICAgIGFjY2VwdG9yLmNvbmZpZ3VyZShBcnJheXMuYXNMaXN0KCJ2aXN1YWxUcmF2ZXJzYWwiLCAiZ3JhcGgiLCAieCIpKTsKLQotICAgICAgICAvLyBjYWxsIGl0ZXJhdGUoKSBhcyBncm9vdnlzaCBpc24ndCByaWdnZWQgdG8gYXV0by1pdGVyYXRlCi0gICAgICAgIGFjY2VwdG9yLnN1Ym1pdChBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgICJ4LlYoMikuaW4oJ2tub3dzJykub3V0KCdrbm93cycpLmhhcygnYWdlJyxvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAuZ3QoMzApKS5vdXRFKCdjcmVhdGVkJykuaGFzKCd3ZWlnaHQnLG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5ndCgwLjVkKSkuaW5WKCkuaXRlcmF0ZSgpIikpOwotCi0gICAgICAgIHdpcmVNb2NrUnVsZS52ZXJpZnkoMTgsIHBvc3RSZXF1ZXN0ZWRGb3IodXJsUGF0aEVxdWFsVG8oIi93b3Jrc3BhY2UxIikpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Ym1pdFRyYXZlcnNhbE92ZXJSZXBlYXQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3R1YkZvcihwb3N0KHVybFBhdGhFcXVhbFRvKCIvd29ya3NwYWNlMSIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgiZm9ybWF0IiwgZXF1YWxUbygiSlNPTiIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgib3BlcmF0aW9uIiwgZXF1YWxUbygidXBkYXRlR3JhcGgiKSkKLSAgICAgICAgICAgICAgICAud2lsbFJldHVybihhUmVzcG9uc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTdGF0dXMoMjAwKSkpOwotCi0gICAgICAgIGFjY2VwdG9yLmNvbmZpZ3VyZShBcnJheXMuYXNMaXN0KCJ2aXN1YWxUcmF2ZXJzYWwiLCAiZ3JhcGgiKSk7Ci0KLSAgICAgICAgLy8gY2FsbCBpdGVyYXRlKCkgYXMgZ3Jvb3Z5c2ggaXNuJ3QgcmlnZ2VkIHRvIGF1dG8taXRlcmF0ZQotICAgICAgICBhY2NlcHRvci5zdWJtaXQoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAidmcuVigxKS5yZXBlYXQob3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uc3RhcnQoKS5vdXQoKSkudGltZXMoMikuaXRlcmF0ZSgpIikpOwotCi0gICAgICAgIHdpcmVNb2NrUnVsZS52ZXJpZnkoMTMsIHBvc3RSZXF1ZXN0ZWRGb3IodXJsUGF0aEVxdWFsVG8oIi93b3Jrc3BhY2UxIikpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENsZWFyR3JhcGgoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3R1YkZvcihwb3N0KHVybFBhdGhFcXVhbFRvKCIvd29ya3NwYWNlMSIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgiZm9ybWF0IiwgZXF1YWxUbygiSlNPTiIpKQotICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbSgib3BlcmF0aW9uIiwgZXF1YWxUbygidXBkYXRlR3JhcGgiKSkKLSAgICAgICAgICAgICAgICAud2l0aFJlcXVlc3RCb2R5KGVxdWFsVG9Kc29uKCJ7XCJkblwiOntcImZpbHRlclwiOlwiQUxMXCJ9fSIpKQotICAgICAgICAgICAgICAgIC53aWxsUmV0dXJuKGFSZXNwb25zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAud2l0aFN0YXR1cygyMDApKSk7Ci0KLSAgICAgICAgYWNjZXB0b3Iuc3VibWl0KEFycmF5cy5hc0xpc3QoImNsZWFyIikpOwotCi0gICAgICAgIHdpcmVNb2NrUnVsZS52ZXJpZnkoMSwgcG9zdFJlcXVlc3RlZEZvcih1cmxQYXRoRXF1YWxUbygiL3dvcmtzcGFjZTEiKSkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBwaWNrT3BlblBvcnQoKSB7Ci0gICAgICAgIHRyeSAoZmluYWwgU2VydmVyU29ja2V0IHNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQoMCkpIHsKLSAgICAgICAgICAgIHJldHVybiBzb2NrZXQuZ2V0TG9jYWxQb3J0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oaW9lKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvVXRpbGl0aWVzR3JlbWxpblBsdWdpblRlc3QuamF2YSBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvVXRpbGl0aWVzR3JlbWxpblBsdWdpblRlc3QuamF2YQppbmRleCAxNzZhZjI0Li5mNTlkNWIzIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL1V0aWxpdGllc0dyZW1saW5QbHVnaW5UZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9VdGlsaXRpZXNHcmVtbGluUGx1Z2luVGVzdC5qYXZhCkBAIC00Myw3ICs0Myw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBJTyBpbyA9IG5ldyBJTyhpbnB1dFN0cmVhbSwgb3V0cHV0U3RyZWFtLCBlcnJvclN0cmVhbSk7CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxXaXRob3V0VXRpbGl0aWVzUGx1Z2luKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdpdGhvdXRVdGlsaXRpZXNQbHVnaW4oKSB7CiAgICAgICAgIGZpbmFsIEdyb292eXNoIGdyb292eXNoID0gbmV3IEdyb292eXNoKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBncm9vdnlzaC5leGVjdXRlKCJkZXNjcmliZUdyYXBoKGcuY2xhc3MpIik7CkBAIC01Myw3ICs1Myw3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRQbHVnaW5VdGlsaXRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRQbHVnaW5VdGlsaXRpZXMoKSB7CiAgICAgICAgIGZpbmFsIFV0aWxpdGllc0dyZW1saW5QbHVnaW4gcGx1Z2luID0gbmV3IFV0aWxpdGllc0dyZW1saW5QbHVnaW4oKTsKIAogICAgICAgICBmaW5hbCBHcm9vdnlzaCBncm9vdnlzaCA9IG5ldyBHcm9vdnlzaCgpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3B5dGhvbi9zZXR1cC5weSBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9weXRob24vc2V0dXAucHkKaW5kZXggNzFmZDMxYS4uMDFlNWQyYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3B5dGhvbi9zZXR1cC5weQorKysgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvcHl0aG9uL3NldHVwLnB5CkBAIC0yNiwxMyArMjYsMTMgQEAKICAgICBuYW1lPSdncmVtbGluY29uc29sZXRlc3QnLAogICAgIHRlc3Rfc3VpdGU9InRlc3RzIiwKICAgICBzZXR1cF9yZXF1aXJlcz1bCi0gICAgICAgICdweXRlc3QtcnVubmVyPT01LjInLAotICAgICAgICAnaW1wb3J0bGliLW1ldGFkYXRhPDMuMC4wJworICAgICAgICAncHl0ZXN0LXJ1bm5lcj09Ni4wLjAnLAorICAgICAgICAnaW1wb3J0bGliLW1ldGFkYXRhPDUuMC4wJwogICAgIF0sCiAgICAgdGVzdHNfcmVxdWlyZT1bCiAgICAgICAgICdweXRlc3Q+PTYuMi41LDw4LjAuMCcsCi0gICAgICAgICdtb2NrPj0zLjAuNSw8NC4wLjAnLAotICAgICAgICAnbW9yZS1pdGVydG9vbHM8MTEuMC4wJywKLSAgICAgICAgJ3BleHBlY3Q9PTQuOC4wJworICAgICAgICAnbW9jaz49My4wLjUsPDUuMS4wJywKKyAgICAgICAgJ3BleHBlY3Q9PTQuOS4wJywKKyAgICAgICAgJ2luaWNvbmZpZzwyLjAuMCcKICAgICBdCiApCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvcHl0aG9uL3Rlc3RzL3Rlc3RfY29uc29sZS5weSBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9weXRob24vdGVzdHMvdGVzdF9jb25zb2xlLnB5CmluZGV4IGM3YzJmYTcuLjEzN2MyMWIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9weXRob24vdGVzdHMvdGVzdF9jb25zb2xlLnB5CisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9weXRob24vdGVzdHMvdGVzdF9jb25zb2xlLnB5CkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgIGNoaWxkLmV4cGVjdCgiPT0+MlxyXG4iKQogICAgICAgICBUZXN0Q29uc29sZS5fZXhwZWN0X3Byb21wdChjaGlsZCkKICAgICAgICAgVGVzdENvbnNvbGUuX3NlbmQoY2hpbGQsICJ6IikKLSAgICAgICAgY2hpbGQuZXhwZWN0KCI9PT5hcmd1bWVudD1cW3gsIC1pLCA9LCAtLWNvbG9yLCAtRFxdXHJcbiIpCisgICAgICAgIGNoaWxkLmV4cGVjdCgiPT0+YXJndW1lbnQ9XFxbeCwgLWksID0sIC0tY29sb3IsIC1EXFxdXHJcbiIpCiAgICAgICAgIFRlc3RDb25zb2xlLl9leHBlY3RfcHJvbXB0KGNoaWxkKQogICAgICAgICBUZXN0Q29uc29sZS5fY2xvc2UoY2hpbGQpCiAKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgY2hpbGQuZXhwZWN0KCI9PT4yXHJcbiIpCiAgICAgICAgIFRlc3RDb25zb2xlLl9leHBlY3RfcHJvbXB0KGNoaWxkKQogICAgICAgICBUZXN0Q29uc29sZS5fc2VuZChjaGlsZCwgInoiKQotICAgICAgICBjaGlsZC5leHBlY3QoIj09PmFyZ3VtZW50PVxbeCwgLWksID0sIC0tY29sb3IsIC1EXF1cclxuIikKKyAgICAgICAgY2hpbGQuZXhwZWN0KCI9PT5hcmd1bWVudD1cXFt4LCAtaSwgPSwgLS1jb2xvciwgLURcXF1cclxuIikKICAgICAgICAgVGVzdENvbnNvbGUuX2V4cGVjdF9wcm9tcHQoY2hpbGQpCiAgICAgICAgIFRlc3RDb25zb2xlLl9jbG9zZShjaGlsZCkKIApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgICAgIGNoaWxkLmV4cGVjdCgiPT0+MlxyXG4iKQogICAgICAgICBUZXN0Q29uc29sZS5fZXhwZWN0X3Byb21wdChjaGlsZCkKICAgICAgICAgVGVzdENvbnNvbGUuX3NlbmQoY2hpbGQsICJ6IikKLSAgICAgICAgY2hpbGQuZXhwZWN0KCI9PT5hcmd1bWVudD1cW3gsIC1pLCA9LCAtLWNvbG9yLCAtRFxdXHJcbiIpCisgICAgICAgIGNoaWxkLmV4cGVjdCgiPT0+YXJndW1lbnQ9XFxbeCwgLWksID0sIC0tY29sb3IsIC1EXFxdXHJcbiIpCiAgICAgICAgIFRlc3RDb25zb2xlLl9leHBlY3RfcHJvbXB0KGNoaWxkKQogICAgICAgICBUZXN0Q29uc29sZS5fY2xvc2UoY2hpbGQpCiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAgICAgZGVmIHRlc3RfanVzdF9kYXNoX2VfZmlsZV9ub3RfZm91bmQoc2VsZik6CiAgICAgICAgIGNoaWxkID0gcGV4cGVjdC5zcGF3bihUZXN0Q29uc29sZS5ncmVtbGluc2ggKyAiLWU9eC1wcmludGVkLnNjcmlwdCIpCi0gICAgICAgIGNoaWxkLmV4cGVjdCgiR3JlbWxpbiBmaWxlIG5vdCBmb3VuZCBhdCBcWz14LXByaW50ZWQuc2NyaXB0XF1cLlxyXG4iKQorICAgICAgICBjaGlsZC5leHBlY3QoIkdyZW1saW4gZmlsZSBub3QgZm91bmQgYXQgXFxbPXgtcHJpbnRlZC5zY3JpcHRcXF1cXC5cclxuIikKICAgICAgICAgY2hpbGQuZXhwZWN0KHBleHBlY3QuRU9GKQogCiAgICAgZGVmIHRlc3RfanVzdF9kYXNoX2Rhc2hfZXhlY3V0ZShzZWxmKToKQEAgLTE0NCwyMSArMTQ0LDIxIEBACiAgICAgICAgIGNoaWxkID0gcGV4cGVjdC5zcGF3bihUZXN0Q29uc29sZS5ncmVtbGluc2ggKyAiLWUgeS1wcmludGVkLnNjcmlwdCAxIDIgMyAtZSB4LXByaW50ZWQuc2NyaXB0IC1lIFwiei1wcmludGVkLnNjcmlwdCB4IC1lID0gLS1jb2xvciAtRFwiIikKICAgICAgICAgY2hpbGQuZXhwZWN0KCI2XHJcbiIpCiAgICAgICAgIGNoaWxkLmV4cGVjdCgiMlxyXG4iKQotICAgICAgICBjaGlsZC5leHBlY3QoImFyZ3VtZW50PVxbeCwgLWUsID0sIC0tY29sb3IsIC1EXF1cclxuIikKKyAgICAgICAgY2hpbGQuZXhwZWN0KCJhcmd1bWVudD1cXFt4LCAtZSwgPSwgLS1jb2xvciwgLURcXF1cclxuIikKICAgICAgICAgVGVzdENvbnNvbGUuX2Nsb3NlKGNoaWxkKQogCiAgICAgZGVmIHRlc3RfZGFzaF9kYXNoX2V4ZWN1dGVfbXVsdGlwbGVfc2NyaXB0cyhzZWxmKToKICAgICAgICAgY2hpbGQgPSBwZXhwZWN0LnNwYXduKFRlc3RDb25zb2xlLmdyZW1saW5zaCArICItLWV4ZWN1dGUgeS1wcmludGVkLnNjcmlwdCAxIDIgMyAtLWV4ZWN1dGUgeC1wcmludGVkLnNjcmlwdCAtLWV4ZWN1dGUgXCJ6LXByaW50ZWQuc2NyaXB0IHggLWUgPSAtLWNvbG9yIC1EXCIiKQogICAgICAgICBjaGlsZC5leHBlY3QoIjZcclxuIikKICAgICAgICAgY2hpbGQuZXhwZWN0KCIyXHJcbiIpCi0gICAgICAgIGNoaWxkLmV4cGVjdCgiYXJndW1lbnQ9XFt4LCAtZSwgPSwgLS1jb2xvciwgLURcXVxyXG4iKQorICAgICAgICBjaGlsZC5leHBlY3QoImFyZ3VtZW50PVxcW3gsIC1lLCA9LCAtLWNvbG9yLCAtRFxcXVxyXG4iKQogICAgICAgICBUZXN0Q29uc29sZS5fY2xvc2UoY2hpbGQpCiAKICAgICBkZWYgdGVzdF9taXhlZF9leGVjdXRlX2xvbmdfc2hvcnRfb3B0c193aXRoX211bHRpcGxlX3NjcmlwdHMoc2VsZik6CiAgICAgICAgIGNoaWxkID0gcGV4cGVjdC5zcGF3bihUZXN0Q29uc29sZS5ncmVtbGluc2ggKyAiLS1leGVjdXRlIHktcHJpbnRlZC5zY3JpcHQgMSAyIDMgLWUgeC1wcmludGVkLnNjcmlwdCAtLWV4ZWN1dGUgXCJ6LXByaW50ZWQuc2NyaXB0IHggLWUgPSAtLWNvbG9yIC1EXCIiKQogICAgICAgICBjaGlsZC5leHBlY3QoIjZcclxuIikKICAgICAgICAgY2hpbGQuZXhwZWN0KCIyXHJcbiIpCi0gICAgICAgIGNoaWxkLmV4cGVjdCgiYXJndW1lbnQ9XFt4LCAtZSwgPSwgLS1jb2xvciwgLURcXVxyXG4iKQorICAgICAgICBjaGlsZC5leHBlY3QoImFyZ3VtZW50PVxcW3gsIC1lLCA9LCAtLWNvbG9yLCAtRFxcXVxyXG4iKQogICAgICAgICBUZXN0Q29uc29sZS5fY2xvc2UoY2hpbGQpCiAKICAgICBkZWYgdGVzdF9ub19taXhfZGFzaF9pX2FuZF9kYXNoX2Uoc2VsZik6CkBAIC0xNzUsOSArMTc1LDkgQEAKICAgICBkZWYgX2V4cGVjdF9ncmVtbGluX2hlYWRlcihjaGlsZCk6CiAgICAgICAgICMgc2tpcC9yZWFkIHRoZSBHcmVtbGluIGdyYXBoaWNzCiAgICAgICAgIGNoaWxkLmV4cGVjdCgiXHJcbiIpCi0gICAgICAgIGNoaWxkLmV4cGVjdChbInBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC5zZXJ2ZXIiLCAicGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnV0aWxpdGllcyIsICJwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgiXSkKLSAgICAgICAgY2hpbGQuZXhwZWN0KFsicGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnNlcnZlciIsICJwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzIiwgInBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC50aW5rZXJncmFwaCJdKQotICAgICAgICBjaGlsZC5leHBlY3QoWyJwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3Auc2VydmVyIiwgInBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC51dGlsaXRpZXMiLCAicGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnRpbmtlcmdyYXBoIl0pCisgICAgICAgIGNoaWxkLmV4cGVjdChbInBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC5yZW1vdGUiLCAicGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnV0aWxpdGllcyIsICJwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudGlua2VyZ3JhcGgiXSkKKyAgICAgICAgY2hpbGQuZXhwZWN0KFsicGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnJlbW90ZSIsICJwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AudXRpbGl0aWVzIiwgInBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC50aW5rZXJncmFwaCJdKQorICAgICAgICBjaGlsZC5leHBlY3QoWyJwbHVnaW4gYWN0aXZhdGVkOiB0aW5rZXJwb3AucmVtb3RlIiwgInBsdWdpbiBhY3RpdmF0ZWQ6IHRpbmtlcnBvcC51dGlsaXRpZXMiLCAicGx1Z2luIGFjdGl2YXRlZDogdGlua2VycG9wLnRpbmtlcmdyYXBoIl0pCiAgICAgICAgIFRlc3RDb25zb2xlLl9leHBlY3RfcHJvbXB0KGNoaWxkKQogCiAgICAgQHN0YXRpY21ldGhvZApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL2dlbmVyYXRlLmdyb292eSBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9nZW5lcmF0ZS5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyYjc5MQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9nZW5lcmF0ZS5ncm9vdnkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gYW4gaW5pdCBzY3JpcHQgdGhhdCByZXR1cm5zIGEgTWFwIGFsbG93cyBleHBsaWNpdCBzZXR0aW5nIG9mIGdsb2JhbCBiaW5kaW5ncy4KK2RlZiBnbG9iYWxzID0gWzpdCisKKy8vIEdlbmVyYXRlcyB0aGUgbW9kZXJuIGdyYXBoIGludG8gYW4gImVtcHR5IiBUaW5rZXJHcmFwaCB2aWEgTGlmZUN5Y2xlSG9vay4KKy8vIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGUga2V5IGluIHRoZSAiZ2xvYmFsIiBtYXAgaXMgdW5pbXBvcnRhbnQuCitnbG9iYWxzIDw8IFtob29rIDogWworICBvblN0YXJ0VXA6IHsgY3R4IC0+CisgICAgY3R4LmxvZ2dlci5pbmZvKCJMb2FkaW5nICdtb2Rlcm4nIGdyYXBoIGRhdGEuIikKKyAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3RvcnkuZ2VuZXJhdGVNb2Rlcm4oZ3JhcGgpCisgIH0KK10gYXMgTGlmZUN5Y2xlSG9va10KKworLy8gZGVmaW5lIHRoZSBkZWZhdWx0IFRyYXZlcnNhbFNvdXJjZSB0byBiaW5kIHF1ZXJpZXMgdG8gLSB0aGlzIG9uZSB3aWxsIGJlIG5hbWVkICJnIi4KK2dsb2JhbHMgPDwgW2cgOiB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoZ3JhcGgpXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLnlhbWwKaW5kZXggMTYwODBlNy4uNGJiNmRjZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLnlhbWwKKysrIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL2dyZW1saW4tc2VydmVyLWludGVncmF0aW9uLnlhbWwKQEAgLTE4LDIwICsxOCwxNSBAQAogaG9zdDogbG9jYWxob3N0CiBwb3J0OiA0NTk0MAogZXZhbHVhdGlvblRpbWVvdXQ6IDMwMDAwCi1jaGFubmVsaXplcjogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcgorY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyCiBzY3JpcHRFbmdpbmVzOiB7CiAgIGdyZW1saW4tZ3Jvb3Z5OiB7CiAgICAgcGx1Z2luczogeyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5qc3IyMjMuR3JlbWxpblNlcnZlckdyZW1saW5QbHVnaW46IHt9LAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5qc3IyMjMuVGlua2VyR3JhcGhHcmVtbGluUGx1Z2luOiB7fSwKLSAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEdyZW1saW5QbHVnaW46IHtjbGFzc0ltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aF0sIG1ldGhvZEltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aCMqXX19fX0KKyAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEdyZW1saW5QbHVnaW46IHtjbGFzc0ltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aF0sIG1ldGhvZEltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aCMqXX0sCisgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5TY3JpcHRGaWxlR3JlbWxpblBsdWdpbjoge319fX0KIHNlcmlhbGl6ZXJzOgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSwgY29uZmlnOiB7IHNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nOiB0cnVlIH19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjArZ3J5by1zdHJpbmdkCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYxXSB9fSAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjEuMCtqc29uCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICMgYXBwbGljYXRpb24vanNvbixhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjJdIH19ICAgICAgICAgIyBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12Mi4wK2pzb24KLXByb2Nlc3NvcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbk9wUHJvY2Vzc29yLCBjb25maWc6IHsgc2Vzc2lvblRpbWVvdXQ6IDI4ODAwMDAwIH19Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnRyYXZlcnNhbC5UcmF2ZXJzYWxPcFByb2Nlc3Nvcn0KKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wCiBtZXRyaWNzOiB7CiAgIGNvbnNvbGVSZXBvcnRlcjoge2VuYWJsZWQ6IHRydWUsIGludGVydmFsOiAxODAwMDB9LAogICBjc3ZSZXBvcnRlcjoge2VuYWJsZWQ6IHRydWUsIGludGVydmFsOiAxODAwMDAsIGZpbGVOYW1lOiAvdG1wL2dyZW1saW4tc2VydmVyLW1ldHJpY3MuY3N2fSwKQEAgLTQxLDcgKzM2LDcgQEAKIG1heEluaXRpYWxMaW5lTGVuZ3RoOiA0MDk2CiBtYXhIZWFkZXJTaXplOiA4MTkyCiBtYXhDaHVua1NpemU6IDgxOTIKLW1heENvbnRlbnRMZW5ndGg6IDY1NTM2CittYXhSZXF1ZXN0Q29udGVudExlbmd0aDogNjU1MzYKIG1heEFjY3VtdWxhdGlvbkJ1ZmZlckNvbXBvbmVudHM6IDEwMjQKIHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZTogNjQKIHdyaXRlQnVmZmVyTG93V2F0ZXJNYXJrOiAzMjc2OApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL3JlbW90ZS1ncmFwaC5wcm9wZXJ0aWVzIGIvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL3JlbW90ZS1ncmFwaC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTJiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvcmVtb3RlLWdyYXBoLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzNSBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgbWVhbnQgZm9yIHVzZSB3aXRoIHdpdGgoKSBvciBjb25uZWN0KCkuCisjCisjIGcgPSB0cmF2ZXJzYWwoKS53aXRoKCdjb25mL3JlbW90ZS1ncmFwaC5wcm9wZXJ0aWVzJykKKyMgZyA9IGNvbm5lY3QoJ2NvbmYvcmVtb3RlLWdyYXBoLnByb3BlcnRpZXMnKQorIworIyB0b2RvOiByZXZpc2l0IGNvbXBhdGlibGUgY29uZmlncworIyBUaGlzIGZpbGUgd2lsbCB3b3JrIHdpdGg6CisjIC0gZ3JlbWxpbi1zZXJ2ZXIueWFtbAorIyAtIGdyZW1saW4tc2VydmVyLWNsYXNzaWMueWFtbAorIyAtIGdyZW1saW4tc2VydmVyLW1vZGVybi55YW1sCisjIC0gZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLXJlYWRvbmx5LnlhbWwKKyMgLSBncmVtbGluLXNlcnZlci1zZWN1cmUueWFtbAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZ3JlbWxpbi5yZW1vdGUucmVtb3RlQ29ubmVjdGlvbkNsYXNzPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uCitncmVtbGluLnJlbW90ZS5kcml2ZXIuY2x1c3RlckZpbGU9cmVtb3RlLnlhbWwKK2dyZW1saW4ucmVtb3RlLmRyaXZlci5zb3VyY2VOYW1lPWcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvcmVtb3RlLnlhbWwgYi9ncmVtbGluLWNvbnNvbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vY29uc29sZS9qc3IyMjMvcmVtb3RlLnlhbWwKaW5kZXggMTg3ZTJjNy4uOWEyMzJlMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb25zb2xlL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2NvbnNvbGUvanNyMjIzL3JlbW90ZS55YW1sCisrKyBiL2dyZW1saW4tY29uc29sZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9jb25zb2xlL2pzcjIyMy9yZW1vdGUueWFtbApAQCAtMTcsNCArMTcsNCBAQAogCiBob3N0czogW2xvY2FsaG9zdF0KIHBvcnQ6IDQ1OTQwCi1zZXJpYWxpemVyOiB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEsIGNvbmZpZzogeyBzZXJpYWxpemVSZXN1bHRUb1N0cmluZzogdHJ1ZSB9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3NlcmlhbGl6ZXI6IHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvcG9tLnhtbCBiL2dyZW1saW4tY29yZS9wb20ueG1sCmluZGV4IDZiZGNhNGEuLjdkNTQ3ZDAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9wb20ueG1sCisrKyBiL2dyZW1saW4tY29yZS9wb20ueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tY29yZTwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gQ29yZTwvbmFtZT4KQEAgLTQwLDIwICs0MCwyNCBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotYXBpPC9hcnRpZmFjdElkPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+amNsLW92ZXItc2xmNGo8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNvbW1vbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvbmZpZ3VyYXRpb24yPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxvZ2dpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPCEtLSBjb21tb25zLWNvbmZpZ3VyYXRpb24yIHJlcXVpcmVzIGJlYW51dGlscyBiZWNhdXNlIHdlIHJlbHkgb24gZmlsZSBsb2FkZXJzIC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtYmVhbnV0aWxzPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1iZWFudXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjEwLjA8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvbGxlY3Rpb25zPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29sbGVjdGlvbnM0PC9hcnRpZmFjdElkPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jb21tb25zPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvQmluZGluZ3NHcmVtbGluUGx1Z2luLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9CaW5kaW5nc0dyZW1saW5QbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVjZTAyNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9CaW5kaW5nc0dyZW1saW5QbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzOwotCi1pbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwotaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRDb250ZXh0OwotaW1wb3J0IGphdmF4LnNjcmlwdC5TaW1wbGVCaW5kaW5nczsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOwotCi0vKioKLSAqIEEgcGx1Z2luIHRoYXQgYWxsb3dzIHtAY29kZSBCaW5kaW5nc30gdG8gYmUgYXBwbGllZCB0byBhIHtAbGluayBHcmVtbGluU2NyaXB0RW5naW5lfSBhdCB0aGUgdGltZSBvZiBjcmVhdGlvbi4KLSAqIHtAY29kZSBCaW5kaW5nc30gZGVmaW5lZCB3aXRoIHRoaXMgcGx1Z2luIHdpbGwgYWx3YXlzIGJlIGFzc2lnbmVkIGFzIHtAY29kZSBTY3JpcHRDb250ZXh0LkdMT0JBTF9TQ09QRX0gYW5kIGFzIHN1Y2gKLSAqIHdpbGwgYmUgdmlzaWJsZSB0byBhbGwge0BsaW5rIEdyZW1saW5TY3JpcHRFbmdpbmV9IGluc3RhbmNlcy4KLSAqIDxwLz4KLSAqIE5vdGUgdGhhdCBiaW5kaW5ncyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHtAY29kZSBCaW5kaW5nc0dyZW1saW5QbHVnaW59IGluc3RhbmNlcyBhcmUgYWRkZWQgdG8gdGhlCi0gKiB7QGxpbmsgR3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXJ9LiBUaGVyZWZvcmUgaWYgdGhlcmUgYXJlIHR3byBwbHVnaW5zIGFkZGVkIGFuZCBib3RoIGluY2x1ZGUgYSB2YXJpYWJsZSBjYWxsZWQgIngiCi0gKiB0aGVuIHRoZSB2YWx1ZSBvZiAieCIgd2lsbCBiZSB0aGUgZXF1YWwgdG8gdGhlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBzZWNvbmQgcGx1Z2luIHRoYXQgb3ZlcnJpZGVzIHRoZSBmaXJzdC4KLSAqIDxwLz4KLSAqIFRoaXMge0BsaW5rIEdyZW1saW5QbHVnaW59IGlzIG5vdCBlbmFibGVkIGZvciB0aGUge0Bjb2RlIFNlcnZpY2VMb2FkZXJ9LiBJdCBpcyBkZXNpZ25lZCB0byBiZSBpbnN0YW50aWF0ZWQgbWFudWFsbHkuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ3NHcmVtbGluUGx1Z2luIGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUGx1Z2luIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJ0aW5rZXJwb3AuYmluZGluZ3MiOwotCi0gICAgcHJpdmF0ZSBCaW5kaW5nc0dyZW1saW5QbHVnaW4oZmluYWwgQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIHN1cGVyKE5BTUUsIG5ldyBEZWZhdWx0QmluZGluZ3NDdXN0b21pemVyKGJ1aWxkZXIuYmluZGluZ3MpKTsKLSAgICB9Ci0KLSAgICBCaW5kaW5nc0dyZW1saW5QbHVnaW4oZmluYWwgU3VwcGxpZXI8QmluZGluZ3M+IGJpbmRpbmdzU3VwcGxpZXIpIHsKLSAgICAgICAgc3VwZXIoTkFNRSwgbmV3IExhenlCaW5kaW5nc0N1c3RvbWl6ZXIoYmluZGluZ3NTdXBwbGllcikpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkcyBhIHNldCBvZiBzdGF0aWMgYmluZGluZ3MuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBCaW5kaW5nc0dyZW1saW5QbHVnaW4uQnVpbGRlciBidWlsZCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBCdWlsZGVyIHsKLQotICAgICAgICBwcml2YXRlIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBCdWlsZGVyKCkge30KLQotICAgICAgICBwdWJsaWMgQnVpbGRlciBiaW5kaW5ncyhmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGJpbmRpbmdzKSB7Ci0gICAgICAgICAgICB0aGlzLmJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKGJpbmRpbmdzKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJpbmRpbmdzR3JlbWxpblBsdWdpbiBjcmVhdGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdzR3JlbWxpblBsdWdpbih0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0NvcmVJbXBvcnRzLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9Db3JlSW1wb3J0cy5qYXZhCmluZGV4IDY2ZmY2ZDguLjM5ODY1MmEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0NvcmVJbXBvcnRzLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvQ29yZUltcG9ydHMuamF2YQpAQCAtMzAsNiArMzAsOCBAQAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5TdWJzZXRDb25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5YTUxDb25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5idWlsZGVyLmZsdWVudC5Db25maWd1cmF0aW9uczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLnRyYW5zbGF0b3IuR3JlbWxpblRyYW5zbGF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkNvbXB1dGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5Db21wdXRlclJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuR3JhcGhDb21wdXRlcjsKQEAgLTU2LDcgKzU4LDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5WZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLlJlbW90ZUNvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CaW5kaW5nczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkRUOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1R5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5JTzsKQEAgLTY5LDcgKzcwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNhY2tGdW5jdGlvbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKQEAgLTgzLDEyICs4MywxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5PcHRpb25zU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlBhcnRpdGlvblN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TZWVkU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uUHJvZmlsZVN0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLlJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5BZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkNvdW50U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uRWFybHlMaW1pdFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkZpbHRlclJhbmtpbmdTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JZGVudGl0eVJlbW92YWxTdHJhdGVneTsKQEAgLTk4LDE4ICs5OSwxNSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLk1hdGNoUHJlZGljYXRlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uT3JkZXJMaW1pdFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlBhdGhQcm9jZXNzb3JTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Db3VudFN0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3k7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUmVwZWF0VW5yb2xsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5FZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5MYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuRG90TmV0VHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuSmF2YXNjcmlwdFRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLlB5dGhvblRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbE1ldHJpY3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKQEAgLTI4NCw4ICsyODIsMTAgQEAKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoUGF0aFByb2Nlc3NvclN0cmF0ZWd5LmNsYXNzKTsKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcyk7CiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kuY2xhc3MpOworICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChQYXRoUmV0cmFjdGlvblN0cmF0ZWd5LmNsYXNzKTsKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoUmVhZE9ubHlTdHJhdGVneS5jbGFzcyk7CiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneS5jbGFzcyk7CisgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKFJlcGVhdFVucm9sbFN0cmF0ZWd5LmNsYXNzKTsKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoU2VlZFN0cmF0ZWd5LmNsYXNzKTsKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcyk7CiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LmNsYXNzKTsKQEAgLTI5NywxMyArMjk3LDYgQEAKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoR3JhcGhUcmF2ZXJzYWxTb3VyY2UuY2xhc3MpOwogICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChUcmF2ZXJzYWwuY2xhc3MpOwogICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChUcmF2ZXJzYWxNZXRyaWNzLmNsYXNzKTsKLSAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoVHJhbnNsYXRvci5jbGFzcyk7Ci0gICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKERvdE5ldFRyYW5zbGF0b3IuY2xhc3MpOwotICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChHcm9vdnlUcmFuc2xhdG9yLmNsYXNzKTsKLSAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoSmF2YVRyYW5zbGF0b3IuY2xhc3MpOwotICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChKYXZhc2NyaXB0VHJhbnNsYXRvci5jbGFzcyk7Ci0gICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKFB5dGhvblRyYW5zbGF0b3IuY2xhc3MpOwotICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChCaW5kaW5ncy5jbGFzcyk7CiAgICAgICAgIC8vIGdyYXBoIGNvbXB1dGVyCiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKENvbXB1dGVyLmNsYXNzKTsKICAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoQ29tcHV0ZXJSZXN1bHQuY2xhc3MpOwpAQCAtMzM1LDYgKzMyOCw4IEBACiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKGphdmEudGltZS5PZmZzZXREYXRlVGltZS5jbGFzcyk7CiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKGphdmEuc3FsLlRpbWVzdGFtcC5jbGFzcyk7CiAgICAgICAgIENMQVNTX0lNUE9SVFMuYWRkKGphdmEudXRpbC5VVUlELmNsYXNzKTsKKyAgICAgICAgQ0xBU1NfSU1QT1JUUy5hZGQoR3JlbWxpblRyYW5zbGF0b3IuY2xhc3MpOworICAgICAgICBDTEFTU19JTVBPUlRTLmFkZChUcmFuc2xhdG9yLmNsYXNzKTsKIAogICAgICAgICAvLy8vLy8vLy8vLy8vCiAgICAgICAgIC8vIE1FVEhPRFMgLy8KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0dyZW1saW5MYW5nU2NyaXB0RW5naW5lLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9HcmVtbGluTGFuZ1NjcmlwdEVuZ2luZS5qYXZhCmluZGV4IGE1NTk0NGEuLjgwNjE4NTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0dyZW1saW5MYW5nU2NyaXB0RW5naW5lLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmUuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hci5HcmVtbGluQW50bHJUb0phdmE7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS5ncmFtbWFyLkdyZW1saW5RdWVyeVBhcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmdyYW1tYXIuVmFyaWFibGVSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1ZhbHVlTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKQEAgLTQ5LDggKzQ4LDcgQEAKICAqIEEge0BsaW5rIEdyZW1saW5TY3JpcHRFbmdpbmV9IGltcGxlbWVudGF0aW9uIHRoYXQgZXZhbHVhdGVzIEdyZW1saW4gc2NyaXB0cyB1c2luZyB7QGNvZGUgZ3JlbWxpbi1sYW5ndWFnZX0uIEFzIGl0CiAgKiB1c2VzIHtAY29kZSBncmVtbGluLWxhbmd1YWdlfSBhbmQgdGh1cyB0aGUgQU5UTFIgcGFyc2VyLCBpdCBpcyBub3QgY2FwYWJsZSBvZiBwcm9jZXNzIGFyYml0cmFyeSBzY3JpcHRzIGFzIHRoZQogICoge0Bjb2RlIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmV9IGNhbiBhbmQgaXMgdGhlcmVmb3JlIGEgbW9yZSBzZWN1cmUgR3JlbWxpbiBldmFsdWF0b3IuIEl0IGlzIG9idmlvdXNseSByZXN0cmljdGVkCi0gKiB0byB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBBTlRMUiBncmFtbWFyIHNvIHN5bnRheCB0aGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQuIEZvciBieXRlY29kZQotICogZXZhbHVhdGlvbiBpdCBzaW1wbHkgdXNlcyB0aGUge0BsaW5rIEphdmFUcmFuc2xhdG9yfS4KKyAqIHRvIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEFOVExSIGdyYW1tYXIgc28gdGhlcmVmb3JlIHN5bnRheCB0aGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAgKiA8cC8+CiAgKiBBcyBhbiBpbnRlcm5hbCBub3RlLCB0ZWNobmljYWxseSwgdGhpcyBpcyBhbiBpbmNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgR3JlbWxpblNjcmlwdEVuZ2luZX0gaW4gdGhlCiAgKiB0cmFkaXRpb25hbCBzZW5zZSBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHNvbWV0aGluZyBsaWtlIHRoZSB7QGNvZGUgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZX0uIEFzIGEgcmVzdWx0LApAQCAtNjUsOCArNjMsNyBAQAogICogdGhlIHtAY29kZSBldmFsfSBtZXRob2QuIEVhY2ggY2FjaGUgaXMga2V5ZWQgb24gdGhlIG9yaWdpbmFsIEdyZW1saW4gc3RyaW5nIGFuZCBob2xkcyB0aGUgaW5pdGlhbGl6ZWQgcGFyc2VkCiAgKiB0cmF2ZXJzYWwgZm9yIGl0cyB2YWx1ZS4gSWYgdGhhdCBHcmVtbGluIHN0cmluZyBpcyBtYXRjaGVkIGFnYWluIGluIHRoZSBmdXR1cmUsIGl0IHdpbGwgdXNlIHRoZSBvbmUgZnJvbSB0aGUgY2FjaGUKICAqIHJhdGhlciB0aGFuIHBhcnNlIGFnYWluIHZpYSB0aGUgQU5UTFIgZ3JhbW1hci4gSW4gYWRkaXRpb24sIGlmIHtAbGluayBHVmFsdWV9IGluc3RhbmNlcyB3ZXJlIHVzZWQgaW4gZm9ybWF0aW9uIG9mCi0gKiB0aGUgdHJhdmVyc2FsLCBpdCB3aWxsIHN1YnN0aXR1dGUgaW4gbmV3IGJpbmRpbmdzIGdpdmVuIHdpdGggdGhlIHtAY29kZSBldmFsfS4gVGhpcyBjYWNoZSBvbmx5IGFwcGxpZXMgdG8gc2NyaXB0cywKLSAqIG5vdCB0byB7QGxpbmsgQnl0ZWNvZGV9LgorICogdGhlIHRyYXZlcnNhbCwgaXQgd2lsbCBzdWJzdGl0dXRlIGluIG5ldyBiaW5kaW5ncyBnaXZlbiB3aXRoIHRoZSB7QGNvZGUgZXZhbH0uCiAgKi8KIHB1YmxpYyBjbGFzcyBHcmVtbGluTGFuZ1NjcmlwdEVuZ2luZSBleHRlbmRzIEFic3RyYWN0U2NyaXB0RW5naW5lIGltcGxlbWVudHMgR3JlbWxpblNjcmlwdEVuZ2luZSB7CiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBHcmVtbGluU2NyaXB0RW5naW5lRmFjdG9yeSBmYWN0b3J5OwpAQCAtMTI3LDI3ICsxMjQsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEJ5dGVjb2RlIGlzIGV2YWx1YXRlZCBieSB0aGUge0BsaW5rIEphdmFUcmFuc2xhdG9yfS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVHJhdmVyc2FsLkFkbWluIGV2YWwoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUsIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzLCBmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlKSB0aHJvd3MgU2NyaXB0RXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHRyYXZlcnNhbFNvdXJjZS5lcXVhbHMoSElEREVOX0cpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIHRyYXZlcnNhbFNvdXJjZSBjYW5ub3QgaGF2ZSB0aGUgbmFtZSAiICsgSElEREVOX0cgKyAiIC0gaXQgaXMgcmVzZXJ2ZWQiKTsKLQotICAgICAgICBpZiAoYmluZGluZ3MuY29udGFpbnNLZXkoSElEREVOX0cpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmluZGluZ3MgY2Fubm90IGluY2x1ZGUgIiArIEhJRERFTl9HICsgIiAtIGl0IGlzIHJlc2VydmVkIik7Ci0KLSAgICAgICAgaWYgKCFiaW5kaW5ncy5jb250YWluc0tleSh0cmF2ZXJzYWxTb3VyY2UpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGJpbmRpbmdzIGF2YWlsYWJsZSB0byB0aGUgU2NyaXB0RW5naW5lIGRvIG5vdCBjb250YWluIGEgdHJhdmVyc2FsU291cmNlIG5hbWVkOiAiICsgdHJhdmVyc2FsU291cmNlKTsKLQotICAgICAgICBmaW5hbCBPYmplY3QgYiA9IGJpbmRpbmdzLmdldCh0cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICBpZiAoIShiIGluc3RhbmNlb2YgVHJhdmVyc2FsU291cmNlKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odHJhdmVyc2FsU291cmNlICsgIiBpcyBvZiB0eXBlICIgKyBiLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBhbmQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRyYXZlcnNhbFNvdXJjZSIpOwotCi0gICAgICAgIHJldHVybiBKYXZhVHJhbnNsYXRvci5vZigoVHJhdmVyc2FsU291cmNlKSBiKS50cmFuc2xhdGUoYnl0ZWNvZGUpOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIEdyZW1saW4gc2NyaXB0cyBldmFsdWF0ZWQgYnkgdGhlIGdyYW1tYXIgbXVzdCBiZSBib3VuZCB0byAiZyIgYW5kIHNob3VsZCBldmFsdWF0ZSB0byBhICJnIiBpbiB0aGUKICAgICAgKiB7QGNvZGUgU2NyaXB0Q29udGV4dH0gdGhhdCBpcyBvZiB0eXBlIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9CiAgICAgICovCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9HcmVtbGluU2NyaXB0RW5naW5lLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9HcmVtbGluU2NyaXB0RW5naW5lLmphdmEKaW5kZXggOTMyZWFlMS4uMjFkYTcyYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpblNjcmlwdEVuZ2luZS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0dyZW1saW5TY3JpcHRFbmdpbmUuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogCiBpbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwpAQCAtMzcsMzEgKzM3LDQgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBHcmVtbGluU2NyaXB0RW5naW5lRmFjdG9yeSBnZXRGYWN0b3J5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBFdmFsdWF0ZXMge0BsaW5rIFRyYXZlcnNhbH0ge0BsaW5rIEJ5dGVjb2RlfSBhZ2FpbnN0IGEgdHJhdmVyc2FsIHNvdXJjZSBpbiB0aGUgZ2xvYmFsIGJpbmRpbmdzIG9mIHRoZQotICAgICAqIHtAY29kZSBTY3JpcHRFbmdpbmV9LgotICAgICAqCi0gICAgICogQHBhcmFtIGJ5dGVjb2RlIG9mIHRoZSB0cmF2ZXJzYWwgdG8gZXhlY3V0ZQotICAgICAqIEBwYXJhbSB0cmF2ZXJzYWxTb3VyY2UgdG8gZXhlY3V0ZSB0aGUgYnl0ZWNvZGUgYWdhaW5zdCB3aGljaCBzaG91bGQgYmUgaW4gdGhlIGF2YWlsYWJsZSBiaW5kaW5ncy4KLSAgICAgKi8KLSAgICBwdWJsaWMgZGVmYXVsdCBUcmF2ZXJzYWwuQWRtaW4gZXZhbChmaW5hbCBCeXRlY29kZSBieXRlY29kZSwgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSkgdGhyb3dzIFNjcmlwdEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gdGhpcy5jcmVhdGVCaW5kaW5ncygpOwotICAgICAgICBmaW5hbCBTY3JpcHRDb250ZXh0IGN0eCA9IHRoaXMuZ2V0Q29udGV4dCgpOwotCi0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGdiaW5kaW5ncyA9IGN0eC5nZXRCaW5kaW5ncyhTY3JpcHRDb250ZXh0LkdMT0JBTF9TQ09QRSk7Ci0gICAgICAgIGlmIChnYmluZGluZ3MgIT0gbnVsbCkgYmluZGluZ3MucHV0QWxsKGdiaW5kaW5ncyk7Ci0KLSAgICAgICAgZmluYWwgQmluZGluZ3MgZWJpbmRpbmdzID0gY3R4LmdldEJpbmRpbmdzKFNjcmlwdENvbnRleHQuRU5HSU5FX1NDT1BFKTsKLSAgICAgICAgaWYgKGViaW5kaW5ncyAhPSBudWxsKSBiaW5kaW5ncy5wdXRBbGwoZWJpbmRpbmdzKTsKLQotICAgICAgICBiaW5kaW5ncy5wdXRBbGwoYnl0ZWNvZGUuZ2V0QmluZGluZ3MoKSk7Ci0gICAgICAgIHJldHVybiBldmFsKGJ5dGVjb2RlLCBiaW5kaW5ncywgdHJhdmVyc2FsU291cmNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFdmFsdWF0ZXMge0BsaW5rIFRyYXZlcnNhbH0ge0BsaW5rIEJ5dGVjb2RlfSB3aXRoIHRoZSBzcGVjaWZpZWQge0Bjb2RlIEJpbmRpbmdzfS4gVGhlc2Uge0Bjb2RlIEJpbmRpbmdzfQotICAgICAqIHN1cHBsaWVkIHRvIHRoaXMgbWV0aG9kIHdpbGwgYmUgbWVyZ2VkIHdpdGggZ2xvYmFsIGVuZ2luZSBiaW5kaW5ncyBhbmQgb3ZlcnJpZGUgdGhlbSB3aGVyZSBrZXlzIG1hdGNoLgotICAgICAqLwotICAgIHB1YmxpYyBUcmF2ZXJzYWwuQWRtaW4gZXZhbChmaW5hbCBCeXRlY29kZSBieXRlY29kZSwgZmluYWwgQmluZGluZ3MgYmluZGluZ3MsIGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UpIHRocm93cyBTY3JpcHRFeGNlcHRpb247CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9KYXZhVHJhbnNsYXRvci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvSmF2YVRyYW5zbGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFjYThkYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9KYXZhVHJhbnNsYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDAwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMzsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5CYXNlQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5sYW1iZGEuQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5UcmF2ZXJzYWxTdHJhdGVneVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5PcHRpb25zU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkJ5dGVjb2RlSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuU3RyaW5nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuR3JlbWxpbkRpc2FibGVkTGlzdERlbGltaXRlckhhbmRsZXI7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BcnJheTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5QYXJhbWV0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgSmF2YVRyYW5zbGF0b3I8UyBleHRlbmRzIFRyYXZlcnNhbFNvdXJjZSwgVCBleHRlbmRzIFRyYXZlcnNhbC5BZG1pbjw/LCA/Pj4gaW1wbGVtZW50cyBUcmFuc2xhdG9yLlN0ZXBUcmFuc2xhdG9yPFMsIFQ+IHsKLQotICAgIHByaXZhdGUgZmluYWwgUyB0cmF2ZXJzYWxTb3VyY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDbGFzczw/PiBhbm9ueW1vdXNUcmF2ZXJzYWw7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPENsYXNzPD8+LCBNYXA8U3RyaW5nLCBMaXN0PFJlZmxlY3RlZE1ldGhvZD4+PiBHTE9CQUxfTUVUSE9EX0NBQ0hFID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIE1hcDxDbGFzczw/PiwgTWFwPFN0cmluZyxNZXRob2Q+PiBsb2NhbE1ldGhvZENhY2hlID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIE1ldGhvZCBhbm9ueW1vdXNUcmF2ZXJzYWxTdGFydDsKLQotICAgIHByaXZhdGUgSmF2YVRyYW5zbGF0b3IoZmluYWwgUyB0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgICAgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2UgPSB0cmF2ZXJzYWxTb3VyY2U7Ci0gICAgICAgIHRoaXMuYW5vbnltb3VzVHJhdmVyc2FsID0gdHJhdmVyc2FsU291cmNlLmdldEFub255bW91c1RyYXZlcnNhbENsYXNzKCkub3JFbHNlKG51bGwpOwotICAgICAgICB0aGlzLmFub255bW91c1RyYXZlcnNhbFN0YXJ0ID0gZ2V0U3RhcnRNZXRob2RGcm9tQW5vbnltb3VzVHJhdmVyc2FsKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyA8UyBleHRlbmRzIFRyYXZlcnNhbFNvdXJjZSwgVCBleHRlbmRzIFRyYXZlcnNhbC5BZG1pbjw/LCA/Pj4gSmF2YVRyYW5zbGF0b3I8UywgVD4gb2YoZmluYWwgUyB0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBKYXZhVHJhbnNsYXRvcjw+KHRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFMgZ2V0VHJhdmVyc2FsU291cmNlKCkgewotICAgICAgICByZXR1cm4gdGhpcy50cmF2ZXJzYWxTb3VyY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFQgdHJhbnNsYXRlKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB7Ci0gICAgICAgIGlmIChCeXRlY29kZUhlbHBlci5pc0dyYXBoT3BlcmF0aW9uKGJ5dGVjb2RlKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkphdmFUcmFuc2xhdG9yIGNhbm5vdCB0cmFuc2xhdGUgdHJhdmVyc2FsIG9wZXJhdGlvbnMiKTsKLQotICAgICAgICBUcmF2ZXJzYWxTb3VyY2UgZHluYW1pY1NvdXJjZSA9IHRoaXMudHJhdmVyc2FsU291cmNlOwotICAgICAgICBUcmF2ZXJzYWwuQWRtaW48PywgPz4gdHJhdmVyc2FsID0gbnVsbDsKLSAgICAgICAgZm9yIChmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA6IGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICBkeW5hbWljU291cmNlID0gKFRyYXZlcnNhbFNvdXJjZSkgaW52b2tlTWV0aG9kKGR5bmFtaWNTb3VyY2UsIFRyYXZlcnNhbFNvdXJjZS5jbGFzcywgaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKSwgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJvb2xlYW4gc3Bhd25lZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICBpZiAoIXNwYXduZWQpIHsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWwgPSAoVHJhdmVyc2FsLkFkbWluKSBpbnZva2VNZXRob2QoZHluYW1pY1NvdXJjZSwgVHJhdmVyc2FsLmNsYXNzLCBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpLCBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSk7Ci0gICAgICAgICAgICAgICAgc3Bhd25lZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBpbnZva2VNZXRob2QodHJhdmVyc2FsLCBUcmF2ZXJzYWwuY2xhc3MsIGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCksIGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKFQpIHRyYXZlcnNhbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldExhbmd1YWdlKCkgewotICAgICAgICByZXR1cm4gImdyZW1saW4tamF2YSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3RvcnkudHJhbnNsYXRvclN0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8vCi0KLSAgICBwcml2YXRlIE9iamVjdCB0cmFuc2xhdGVPYmplY3QoZmluYWwgT2JqZWN0IG9iamVjdCkgewotICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgQnl0ZWNvZGUuQmluZGluZykKLSAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVPYmplY3QoKChCeXRlY29kZS5CaW5kaW5nKSBvYmplY3QpLnZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCeXRlY29kZSkgewotICAgICAgICAgICAgLy8gc291cmNlIGJhc2VkIGJ5dGVjb2RlIGF0IHRoaXMgc3RhZ2Ugb2YgdHJhbnNsYXRpb24gY291bGQgaGF2ZSBzcGVjaWFsIG1lYW5pbmcsIGJ1dCBnZW5lcmFsbHkgdGhpcyBpcwotICAgICAgICAgICAgLy8gZ29pbmcgdG8gc3Bhd24gYSBuZXcgYW5vbnltb3VzIHRyYXZlcnNhbC4KLSAgICAgICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJjID0gKEJ5dGVjb2RlKSBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIWJjLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSwgdmFsaWQgc291cmNlIGluc3RydWN0aW9ucyB3aWxsIGJlIHNpbmdseSBkZWZpbmVkLiB3b3VsZCBiZSBvZGQgdG8gZ2V0IHRoaXMgZXJyb3IuIGNvdWxkCi0gICAgICAgICAgICAgICAgLy8gYmUganVzdCBiYWQgY29uc3RydWN0aW9uIGZyb20gYSBsYW5ndWFnZSB2YXJpYW50IGlmIGl0IGFwcGVhcnMuIG1heWJlIGJldHRlciBhcyBhbiBhc3NlcnRpb24gYnV0Ci0gICAgICAgICAgICAgICAgLy8gdGhpcmQtcGFydHkgdmFyaWFudHMgbWlnaHQgYmVuZWZpdCBmcm9tIHRoaXMgZXJyb3IKLSAgICAgICAgICAgICAgICBpZiAoYmMuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpICE9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTW9yZSB0aGFuIG9uZSBzb3VyY2UgaW5zdHJ1Y3Rpb24gZGVmaW5lZCBpbiBieXRlY29kZSIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3QgPSBiYy5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGluc3QuZ2V0T3BlcmF0b3IoKS5lcXVhbHMoQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbC5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsLmZyb20oaW5zdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJVbmtub3duIHNvdXJjZSBpbnN0cnVjdGlvbiBmb3IgJXMiLCBpbnN0LmdldE9wZXJhdG9yKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmF2ZXJzYWwgPSAoVHJhdmVyc2FsLkFkbWluKSB0aGlzLmFub255bW91c1RyYXZlcnNhbFN0YXJ0Lmludm9rZShudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA6IGJjLmdldFN0ZXBJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlTWV0aG9kKHRyYXZlcnNhbCwgVHJhdmVyc2FsLmNsYXNzLCBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpLCBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChmaW5hbCBUaHJvd2FibGUgZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSAoKFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkpIG9iamVjdCkuZ2V0Q29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgY29uZmlndXJhdGlvbi5nZXRLZXlzKCkuZm9yRWFjaFJlbWFpbmluZyhrZXkgLT4gbWFwLnB1dChrZXksIHRyYW5zbGF0ZU9iamVjdChjb25maWd1cmF0aW9uLmdldFByb3BlcnR5KGtleSkpKSk7Ci0gICAgICAgICAgICByZXR1cm4gaW52b2tlU3RyYXRlZ3lDcmVhdGlvbk1ldGhvZChvYmplY3QsIG1hcCk7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IG1hcCA9IG9iamVjdCBpbnN0YW5jZW9mIFRyZWUgPwotICAgICAgICAgICAgICAgICAgICBuZXcgVHJlZSgpIDoKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGluc3RhbmNlb2YgTGlua2VkSGFzaE1hcCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExpbmtlZEhhc2hNYXA8PigoKE1hcCkgb2JqZWN0KS5zaXplKCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSGFzaE1hcDw+KCgoTWFwKSBvYmplY3QpLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTw/LCA/PiBlbnRyeSA6ICgoTWFwPD8sID8+KSBvYmplY3QpLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBtYXAucHV0KHRyYW5zbGF0ZU9iamVjdChlbnRyeS5nZXRLZXkoKSksIHRyYW5zbGF0ZU9iamVjdChlbnRyeS5nZXRWYWx1ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbWFwOwotICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExpc3QpIHsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCgoTGlzdCkgb2JqZWN0KS5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgbyA6IChMaXN0KSBvYmplY3QpIHsKLSAgICAgICAgICAgICAgICBsaXN0LmFkZCh0cmFuc2xhdGVPYmplY3QobykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgQnVsa1NldCkgewotICAgICAgICAgICAgZmluYWwgQnVsa1NldDxPYmplY3Q+IGJ1bGtTZXQgPSBuZXcgQnVsa1NldDw+KCk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTw/LCBMb25nPiBlbnRyeSA6ICgoQnVsa1NldDw/Pikgb2JqZWN0KS5hc0J1bGsoKS5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICAgICAgYnVsa1NldC5hZGQodHJhbnNsYXRlT2JqZWN0KGVudHJ5LmdldEtleSgpKSwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYnVsa1NldDsKLSAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBTZXQpIHsKLSAgICAgICAgICAgIGZpbmFsIFNldDxPYmplY3Q+IHNldCA9IG9iamVjdCBpbnN0YW5jZW9mIExpbmtlZEhhc2hTZXQgPwotICAgICAgICAgICAgICAgICAgICBuZXcgTGlua2VkSGFzaFNldDw+KCgoU2V0KSBvYmplY3QpLnNpemUoKSkgOgotICAgICAgICAgICAgICAgICAgICBuZXcgSGFzaFNldDw+KCgoU2V0KSBvYmplY3QpLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBvIDogKFNldCkgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgc2V0LmFkZCh0cmFuc2xhdGVPYmplY3QobykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNldDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgIH0KLQotICAgIHByaXZhdGUgT2JqZWN0IGludm9rZVN0cmF0ZWd5Q3JlYXRpb25NZXRob2QoZmluYWwgT2JqZWN0IGRlbGVnYXRlLCBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCkgewotICAgICAgICBmaW5hbCBDbGFzczw/PiBzdHJhdGVneUNsYXNzID0gKChUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSBkZWxlZ2F0ZSkuZ2V0U3RyYXRlZ3lDbGFzcygpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBNZXRob2Q+IG1ldGhvZENhY2hlID0gbG9jYWxNZXRob2RDYWNoZS5jb21wdXRlSWZBYnNlbnQoc3RyYXRlZ3lDbGFzcywgayAtPiB7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBNZXRob2Q+IGNhY2hlRW50cnkgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNhY2hlRW50cnkucHV0KCJpbnN0YW5jZSIsIHN0cmF0ZWd5Q2xhc3MuZ2V0TWV0aG9kKCJpbnN0YW5jZSIpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gbm90aGluZyAtIHRoZSBzdHJhdGVneSBtYXkgbm90IGJlIGNvbnN0cnVjdGVkIHRoaXMgd2F5Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2FjaGVFbnRyeS5wdXQoImNyZWF0ZSIsIHN0cmF0ZWd5Q2xhc3MuZ2V0TWV0aG9kKCJjcmVhdGUiLCBDb25maWd1cmF0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gaWdub3JlZCkgewotICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgLSB0aGUgc3RyYXRlZ3kgbWF5IG5vdCBiZSBjb25zdHJ1Y3RlZCB0aGlzIHdheQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2FjaGVFbnRyeS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCIlcyBkb2VzIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggaW5zdGFuY2UoKSBvciBjcmVhdGUoQ29uZmlndXJhdGlvbikiLCBzdHJhdGVneUNsYXNzLmdldFNpbXBsZU5hbWUoKSkpOwotCi0gICAgICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSB6ZXJvLWFyZyBPcHRpb25TdHJhdGVneQotICAgICAgICAgICAgaWYgKHN0cmF0ZWd5Q2xhc3MgPT0gT3B0aW9uc1N0cmF0ZWd5LmNsYXNzICYmIG1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uc1N0cmF0ZWd5LkVNUFRZOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBCYXNlQ29uZmlndXJhdGlvbiBjb25mID0gbmV3IEJhc2VDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgICAgICBjb25mLnNldExpc3REZWxpbWl0ZXJIYW5kbGVyKEdyZW1saW5EaXNhYmxlZExpc3REZWxpbWl0ZXJIYW5kbGVyLmluc3RhbmNlKCkpOwotICAgICAgICAgICAgbWFwLmVudHJ5U2V0KCkuZm9yRWFjaChlbnRyeSAtPiBjb25mLnNldFByb3BlcnR5KGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBtYXAuaXNFbXB0eSgpID8KLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kQ2FjaGUuZ2V0KCJpbnN0YW5jZSIpLmludm9rZShudWxsKSA6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZENhY2hlLmdldCgiY3JlYXRlIikuaW52b2tlKG51bGwsIGNvbmYpOwotICAgICAgICB9IGNhdGNoIChmaW5hbCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIHwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgT2JqZWN0IGludm9rZU1ldGhvZChmaW5hbCBPYmplY3QgZGVsZWdhdGUsIGZpbmFsIENsYXNzPD8+IHJldHVyblR5cGUsIGZpbmFsIFN0cmluZyBtZXRob2ROYW1lLCBmaW5hbCBPYmplY3QuLi4gYXJndW1lbnRzKSB7Ci0gICAgICAgIC8vIHBvcHVsYXRlIG1ldGhvZCBjYWNoZSBmb3IgZmFzdCBhY2Nlc3MgdG8gbWV0aG9kcyBpbiBzdWJzZXF1ZW50IGNhbGxzCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8UmVmbGVjdGVkTWV0aG9kPj4gbWV0aG9kQ2FjaGUgPSBHTE9CQUxfTUVUSE9EX0NBQ0hFLmdldE9yRGVmYXVsdChkZWxlZ2F0ZS5nZXRDbGFzcygpLCBuZXcgSGFzaE1hcDw+KCkpOwotICAgICAgICBpZiAobWV0aG9kQ2FjaGUuaXNFbXB0eSgpKSBidWlsZE1ldGhvZENhY2hlKGRlbGVnYXRlLCBtZXRob2RDYWNoZSk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIGEgY29weSBvZiB0aGUgYXJndW1lbnQgYXJyYXkgc28gYXMgbm90IHRvIG11dGF0ZSB0aGUgb3JpZ2luYWwgYnl0ZWNvZGUgLSBubyBuZWVkIHRvIGNyZWF0ZSBhIG5ldwotICAgICAgICAvLyBvYmplY3QgaWYgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cy4KLSAgICAgICAgZmluYWwgT2JqZWN0W10gYXJndW1lbnRzQ29weSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwID8gbmV3IE9iamVjdFthcmd1bWVudHMubGVuZ3RoXSA6IGFyZ3VtZW50czsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIGFyZ3VtZW50c0NvcHlbaV0gPSB0cmFuc2xhdGVPYmplY3QoYXJndW1lbnRzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHdpdGhvdXQgdGhpcyBpbml0aWFsIGNoZWNrIGl0ZXJhdGluZyBhbiBpbnZhbGlkIG1ldGhvZE5hbWUgd2lsbCBsZWFkIHRvIGEgbnVsbCBwb2ludGVyIGFuZCBhIGxlc3MgdGhhbgotICAgICAgICAvLyBncmVhdCBlcnJvciBtZXNzYWdlIGZvciB0aGUgdXNlci4gCi0gICAgICAgIGlmICghbWV0aG9kQ2FjaGUuY29udGFpbnNLZXkobWV0aG9kTmFtZSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZ2VuZXJhdGVNZXRob2ROb3RGb3VuZE1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgbG9jYXRlIG1ldGhvZCIsIGRlbGVnYXRlLCBtZXRob2ROYW1lLCBhcmd1bWVudHNDb3B5KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIFJlZmxlY3RlZE1ldGhvZCBtZXRob2R4IDogbWV0aG9kQ2FjaGUuZ2V0KG1ldGhvZE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWV0aG9kIG1ldGhvZCA9IG1ldGhvZHgubWV0aG9kOwotICAgICAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlLmlzQXNzaWduYWJsZUZyb20obWV0aG9kLmdldFJldHVyblR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgUGFyYW1ldGVyW10gcGFyYW1ldGVycyA9IG1ldGhvZHgucGFyYW1ldGVyczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoID09IGFyZ3VtZW50c0NvcHkubGVuZ3RoIHx8IG1ldGhvZHguaGFzVmFyQXJncykgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gbmV3QXJndW1lbnRzID0gbmV3IE9iamVjdFtwYXJhbWV0ZXJzLmxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyc1tpXS5pc1ZhckFyZ3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PiBwYXJhbWV0ZXJDbGFzcyA9IHBhcmFtZXRlcnNbaV0uZ2V0VHlwZSgpLmdldENvbXBvbmVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0NvcHkubGVuZ3RoID4gaSAmJiBhcmd1bWVudHNDb3B5W2ldICE9IG51bGwgJiYgIXBhcmFtZXRlckNsYXNzLmlzQXNzaWduYWJsZUZyb20oYXJndW1lbnRzQ29weVtpXS5nZXRDbGFzcygpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdFtdIHZhckFyZ3MgPSAoT2JqZWN0W10pIEFycmF5Lm5ld0luc3RhbmNlKHBhcmFtZXRlckNsYXNzLCBhcmd1bWVudHNDb3B5Lmxlbmd0aCAtIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDwgYXJndW1lbnRzQ29weS5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyQXJnc1tjb3VudGVyKytdID0gYXJndW1lbnRzQ29weVtqXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBcmd1bWVudHNbaV0gPSB2YXJBcmdzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZGV0ZWN0IHRoZSByaWdodCBtZXRob2QgYnkgY29tcGFyaW5nIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGFyZ3VtZW50LiBkb2Vzbid0IGFsd2F5cyB3b3JrIHNvIHdlbGwgYmVjYXVzZSBvZiBudWxsIGFyZ3VtZW50cyB3aGljaCBkb24ndAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBicmluZyB0aGVpciB0eXBlIGluIGJ5dGVjb2RlIGFuZCByZWx5IG9uIHBvc2l0aW9uLiB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBoYXBwZW4gb2Z0ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4ubHVja2lseS4uLmJlY2F1c2UgbWV0aG9kIHNpZ25hdHVyZXMgdGVuZCB0byBiZSBzdWZmaWNpZW50bHkgdW5pcXVlIGFuZCBkbyBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5jb3VyYWdlIHdoYWNreSB1c2UgLSBsaWtlIGcuVigpLmhhcyhudWxsLCBudWxsKSBpcyBjbGVhcmx5IGludmFsaWQgc28gd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXZlbiBuZWVkIHRvIHRyeSB0byBzb3J0IHRoYXQgb3V0LiBvbiB0aGUgb3RoZXIgaGFuZCBnLlYoKS5oYXMoJ25hbWUnLG51bGwpIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHZhbGlkIGhpdHMgbGlrZSBmb3VyIGRpZmZlcmVudCBwb3NzaWJsZSBvdmVybG9hZHMsIGJ1dCB3ZSBjYW4gcmVseSBvbiB0aGUgbW9zdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmljIG9uZSB3aGljaCB0YWtlcyBPYmplY3QgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIuIHRoYXQgc2VlbXMgdG8gd29yayBpbiB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhc2UsIGJ1dCBpdCdzIGEgc2hhbWUgdGhpcyBpc24ndCBuaWNlci4gc2VlbXMgbGlrZSBuaWNlciB3b3VsZCBtZWFuIGEgaGVhdnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmhhdWwgdG8gR3JlbWxpbiBvciB0byBHTFZzL2J5dGVjb2RlIGFuZC9vciB0byBzZXJpYWxpemF0aW9uIG1lY2hhbmlzbXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjaGVjayB3aGVyZSBhcmd1bWVudHNDb3B5W2ldIGlzIG51bGwgY291bGQgYmUgYWNjb21wYW5pZWQgYnkgYSB0eXBlIGNoZWNrIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGxvd2FibGUgc2lnbmF0dXJlcyBsaWtlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudWxsID09IGFyZ3VtZW50c0NvcHlbaV0gJiYgcGFyYW1ldGVyc1tpXS5nZXRUeXBlKCkgPT0gT2JqZWN0LmNsYXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSBoZWxwZnVsLiBwZXJoYXBzIHRoaXMgYXBwcm9hY2ggaXMgZmluZSBhcyBsb25nIGFzIHdlIGVuc3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zaXN0ZW5jeSBvZiBudWxsIGNhbGxzIHRvIGFsbCBvdmVybG9hZHMuIGluIG90aGVyIHdvcmRzIGFkZFYoU3RyaW5nKSBtdXN0IGJlaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2FtZSBhcyBhZGRWKFRyYXZlcnNhbCkgaWYgbnVsbCBpcyB1c2VkIGFzIHRoZSBhcmd1bWVudC4gc28gZmFyLCB0aGF0IHNlZW1zIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHRoZSBjYXNlLiBpZiB3ZSBmaW5kIHRoYXQgaXMgbm90IGhhcHBlbmluZyB3ZSBlaXRoZXIgZml4IHRoYXQgc3BlY2lmaWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jb25zaXN0ZW5jeSwgc3RhcnQgc3BlY2lhbCBjYXNpbmcgdGhvc2UgbWV0aG9kIGZpbmRzIGhlcmUsIG9yIGFzIG1lbnRpb25lZCBhYm92ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgZmFyIG1vcmUgZHJhc3RpYyB0aGF0IGRvZXNuJ3QgaW52b2x2ZSByZWZsZWN0aW9uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGFyZ3VtZW50c0NvcHkubGVuZ3RoICYmIChudWxsID09IGFyZ3VtZW50c0NvcHlbaV0gfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJndW1lbnRzQ29weVtpXSAhPSBudWxsICYmICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldLmdldFR5cGUoKS5pc0Fzc2lnbmFibGVGcm9tKGFyZ3VtZW50c0NvcHlbaV0uZ2V0Q2xhc3MoKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJhbWV0ZXJzW2ldLmdldFR5cGUoKS5pc1ByaW1pdGl2ZSgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOdW1iZXIuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShhcmd1bWVudHNDb3B5W2ldLmdldENsYXNzKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzQ29weVtpXS5nZXRDbGFzcygpLmVxdWFscyhCb29sZWFuLmNsYXNzKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c0NvcHlbaV0uZ2V0Q2xhc3MoKS5lcXVhbHMoQnl0ZS5jbGFzcykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNDb3B5W2ldLmdldENsYXNzKCkuZXF1YWxzKENoYXJhY3Rlci5jbGFzcykpKSkpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QXJndW1lbnRzW2ldID0gYXJndW1lbnRzQ29weVtpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlcyBvZiBoYXMoKSB3aGVyZSB0aGUgZmlyc3Qgb3IgbGFzdCBhcmcgaXMgbnVsbCAtIHNvbWV0aW1lcyB0aGlzIGNhbiBlbmQgdXAgd2l0aCB0aGUgVCBvciBQIGJlaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBudWxsIHdoaWNoIGdlbmVyYXRlcyBhbiBleGNlcHRpb24gd2hpY2ggcmFpc2VzIGJhZGx5IGluIHRoZSB0cmFuc2xhdG9yLiBpdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2FmZXIgdG8gZm9yY2UgdGhpcyB0byB0aGUgU3RyaW5nIGZvcm0gYnkgbGV0dGluZyB0aGlzICJmb3VuZCIgdmVyc2lvbiBwYXNzLiBJbiBqYXZhIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gb2YgR3JhcGhUcmF2ZXJzYWwgY2FuJ3QgYmUgcHJvZHVjZWQgYmVjYXVzZSBvZiB2YWxpZGF0aW9ucyBmb3IgaGFzKFQsIC4uLikgYnV0IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBsYW5ndWFnZSBpdCBtaWdodCBiZSBhbGxvd2VkIHdoaWNoIG1lYW5zIHRoYXQgaGFzKChUKSBudWxsLCAuLi4pIGZyb20gc29tZXRoaW5nIGxpa2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB5dGhvbiB3aWxsIGVuZCB1cCBhcyBoYXMoKFN0cmluZykgbnVsbCwgLi4uKSB3aGljaCBmaWx0ZXJzIHJhdGhlciB0aGFuIGdlbmVyYXRlcyBhbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjZXB0aW9uLiBjYWxsaW5nIHRoZSBUIHZlcnNpb24gZXZlbiBpbiBhIG5vbi1KVk0gbGFuZ3VhZ2Ugc2VlbXMgb2RkIGFuZCBtb3JlIGxpa2VseSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlciB3YXMgc2hvb3RpbmcgZm9yIHRoZSBTdHJpbmcgb25lLCBidXQgdWdoIHdobyBrbm93cy4gdGhpcyBpc3N1ZSBzaG93Y2FzZXMgYWdhaW4gaG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWRseSBieXRlY29kZSBzaG91bGQgZWl0aGVyIGNoYW5nZSB0byB1c2UgZ3JlbWxpbi1sYW5ndWFnZSBhbmQgZ28gYXdheSBvciBieXRlY29kZSBzaG91bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBhIHNhZmVyIHdheSB0byBiZSB0cmFuc2xhdGVkIHRvIGEgdHJhdmVyc2FsIHdpdGggbW9yZSBleHBsaWNpdCBjYWxscyB0aGF0IGRvbid0IHJlbHkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIHJlZmxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/PltdIHBhcmFtZXRlcnNUeXBlcyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaGFzKSAmJiBuZXdBcmd1bWVudHMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmlyc3QgY2FzZSBoYXMoKFQpbnVsbCwgLi4uKSBpbnN0ZWFkIG9mIGhhcygoU3RyaW5nKW51bGwsIC4uLikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBuZXdBcmd1bWVudHNbMF0gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNUeXBlc1swXS5pc0Fzc2lnbmFibGVGcm9tKG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdBcmd1bWVudHNbbmV3QXJndW1lbnRzLmxlbmd0aCAtIDFdID09IG51bGwgJiYgcGFyYW1ldGVyc1R5cGVzW25ld0FyZ3VtZW50cy5sZW5ndGggLSAxXSA9PSBQLmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIHNlY29uZCBjYXNlIGhhcyhTdHJpbmcsIFN0cmluZywgKFApKG51bGwpKSBpbnN0ZWFkIG9mIGhhcyhTdHJpbmcsU3RyaW5nLCAoT2JqZWN0KW51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb3IgaGFzKFN0cmluZywgKFApKG51bGwpKSBpbnN0ZWFkIG9mIGhhcyhTdHJpbmcsIChPYmplY3QpbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwID09IG5ld0FyZ3VtZW50cy5sZW5ndGggPyBtZXRob2QuaW52b2tlKGRlbGVnYXRlKSA6IG1ldGhvZC5pbnZva2UoZGVsZWdhdGUsIG5ld0FyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIFRocm93YWJsZSBlKSB7Ci0gICAgICAgICAgICBpZiAoZm91bmQgJiYgKGUgaW5zdGFuY2VvZiBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKSkgewotICAgICAgICAgICAgICAgIC8vIGdldCB0aGUgdGFyZ2V0IGV4Y2VwdGlvbiBvdXQgZm9yIGEgYmV0dGVyIG1lc3NhZ2UsIG90aGVyd2lzZSwgaXQgd2lsbCBiZSBudWxsLgotICAgICAgICAgICAgICAgIGZpbmFsIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlID0gKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24pIGU7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihnZW5lcmF0ZU1ldGhvZE5vdEZvdW5kTWVzc2FnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGl0ZS5nZXRUYXJnZXRFeGNlcHRpb24oKS5nZXRNZXNzYWdlKCksIG51bGwsIG1ldGhvZE5hbWUsIGFyZ3VtZW50c0NvcHkpLCBpdGUuZ2V0VGFyZ2V0RXhjZXB0aW9uKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGdlbmVyYXRlTWV0aG9kTm90Rm91bmRNZXNzYWdlKAotICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRNZXNzYWdlKCksIG51bGwsIG1ldGhvZE5hbWUsIGFyZ3VtZW50c0NvcHkpLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIGl0IGdvdCBkb3duIGhlcmUgdGhlbiB0aGUgbWV0aG9kIHdhcyBpbiB0aGUgY2FjaGUgYnV0IGl0IHdhcyBuZXZlciBjYWxsZWQgYXMgaXQgY291bGQgbm90IGJlIGZvdW5kCi0gICAgICAgIC8vIGZvciB0aGUgc3VwcGxpZWQgYXJndW1lbnRzCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZ2VuZXJhdGVNZXRob2ROb3RGb3VuZE1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBsb2NhdGUgZXhhY3QgbWV0aG9kIGdpdmVuIHRoZSBzdXBwbGllZCBhcmd1bWVudHMiLCBkZWxlZ2F0ZSwgbWV0aG9kTmFtZSwgYXJndW1lbnRzQ29weSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdlbmVyYXRlcyB0aGUgbWVzc2FnZSB1c2VkIHdoZW4gYSBtZXRob2QgY2Fubm90IGJlIGxvY2F0ZWQgaW4gdGhlIHRyYW5zbGF0aW9uLiBBcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0bwotICAgICAqIGNsYXNzZXMgdG8gYXZvaWQgZXhwb3NpbmcgZGF0YSB0aGF0IG1pZ2h0IGJlIHNlbnNpdGl2ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0cmluZyBnZW5lcmF0ZU1ldGhvZE5vdEZvdW5kTWVzc2FnZShmaW5hbCBTdHJpbmcgbWVzc2FnZSwgZmluYWwgT2JqZWN0IGRlbGVnYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtZXRob2ROYW1lTm90Rm91bmQsIGZpbmFsIE9iamVjdFtdIGFyZ3MpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0W10gYXJndW1lbnRzID0gbnVsbCA9PSBhcmdzID8gbmV3IE9iamVjdFswXSA6IGFyZ3M7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBkZWxlZ2F0ZUNsYXNzTmFtZSA9IGRlbGVnYXRlICE9IG51bGwgPyBkZWxlZ2F0ZS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSA6ICIiOwotICAgICAgICByZXR1cm4gbWVzc2FnZSArICI6ICIgKyBkZWxlZ2F0ZUNsYXNzTmFtZSArICIuIiArIG1ldGhvZE5hbWVOb3RGb3VuZCArICIoIiArCi0gICAgICAgICAgICAgICAgU3RyZWFtLm9mKGFyZ3VtZW50cykubWFwKGEgLT4gbnVsbCA9PSBhID8gIm51bGwiIDogYS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSkuY29sbGVjdChDb2xsZWN0b3JzLmpvaW5pbmcoIiwgIikpICsgIikiOwotICAgIH0KLQotICAgIHByaXZhdGUgc3luY2hyb25pemVkIHN0YXRpYyB2b2lkIGJ1aWxkTWV0aG9kQ2FjaGUoZmluYWwgT2JqZWN0IGRlbGVnYXRlLCBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFJlZmxlY3RlZE1ldGhvZD4+IG1ldGhvZENhY2hlKSB7Ci0gICAgICAgIGlmIChtZXRob2RDYWNoZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZvciAoZmluYWwgTWV0aG9kIG1ldGhvZCA6IGRlbGVnYXRlLmdldENsYXNzKCkuZ2V0TWV0aG9kcygpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTGlzdDxSZWZsZWN0ZWRNZXRob2Q+IGxpc3QgPSBtZXRob2RDYWNoZS5jb21wdXRlSWZBYnNlbnQobWV0aG9kLmdldE5hbWUoKSwgayAtPiBuZXcgQXJyYXlMaXN0PD4oKSk7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQobmV3IFJlZmxlY3RlZE1ldGhvZChtZXRob2QpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdMT0JBTF9NRVRIT0RfQ0FDSEUucHV0KGRlbGVnYXRlLmdldENsYXNzKCksIG1ldGhvZENhY2hlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTWV0aG9kIGdldFN0YXJ0TWV0aG9kRnJvbUFub255bW91c1RyYXZlcnNhbCgpIHsKLSAgICAgICAgaWYgKHRoaXMuYW5vbnltb3VzVHJhdmVyc2FsICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5vbnltb3VzVHJhdmVyc2FsLmdldE1ldGhvZCgic3RhcnQiKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBSZWZsZWN0ZWRNZXRob2QgewotICAgICAgICBwcml2YXRlIGZpbmFsIE1ldGhvZCBtZXRob2Q7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUGFyYW1ldGVyW10gcGFyYW1ldGVyczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGhhc1ZhckFyZ3M7Ci0KLSAgICAgICAgcHVibGljIFJlZmxlY3RlZE1ldGhvZChmaW5hbCBNZXRob2QgbSkgewotICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBtOwotCi0gICAgICAgICAgICAvLyB0aGUgcmVmbGVjdGlvbiBnZXRQYXJhbWV0ZXJzKCkgbWV0aG9kIGNhbGxzIGNsb25lKCkgZXZlcnkgdGltZSB0byBnZXQgdGhlIFBhcmFtZXRlciBhcnJheS4gY2FjaGluZyBpdAotICAgICAgICAgICAgLy8gc2F2ZXMgYSBsb3Qgb2YgZXh0cmEgcHJvY2Vzc2luZwotICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gbS5nZXRQYXJhbWV0ZXJzKCk7Ci0KLSAgICAgICAgICAgIHRoaXMuaGFzVmFyQXJncyA9IHBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiBwYXJhbWV0ZXJzW3BhcmFtZXRlcnMubGVuZ3RoIC0gMV0uaXNWYXJBcmdzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9UcmFuc2xhdG9yQ3VzdG9taXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvVHJhbnNsYXRvckN1c3RvbWl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNlMDE5Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9UcmFuc2xhdG9yQ3VzdG9taXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLQotLyoqCi0gKiBQcm92aWRlcyBhIHdheSB0byBjdXN0b21pemUgYW5kIG92ZXJyaWRlIHtAbGluayBCeXRlY29kZX0gdG8gc2NyaXB0IHRyYW5zbGF0aW9uLiBOb3QgYWxsIHtAbGluayBHcmVtbGluU2NyaXB0RW5naW5lfQotICogd2lsbCBzdXBwb3J0IHRoaXMgY2FwYWJpbGl0eSBhcyB0cmFuc2xhdGlvbiBpcyBvcHRpb25hbC4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHJhbnNsYXRvckN1c3RvbWl6ZXIgZXh0ZW5kcyBDdXN0b21pemVyIHsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIHtAbGluayBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IuVHlwZVRyYW5zbGF0b3J9IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGEKLSAgICAgKiB7QGxpbmsgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yfSBpbnN0YW5jZSB3aXRoaW4gdGhlIHtAbGluayBHcmVtbGluU2NyaXB0RW5naW5lfSB0byB0cmFuc2xhdGUKLSAgICAgKiB7QGxpbmsgQnl0ZWNvZGV9IHRvIGEgc2NyaXB0LgotICAgICAqLwotICAgIHB1YmxpYyBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IuVHlwZVRyYW5zbGF0b3IgY3JlYXRlVHlwZVRyYW5zbGF0b3IoKTsKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL2NvbnNvbGUvQ29uc29sZUN1c3RvbWl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL2NvbnNvbGUvQ29uc29sZUN1c3RvbWl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA1YzczMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9jb25zb2xlL0NvbnNvbGVDdXN0b21pemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuQ3VzdG9taXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluUGx1Z2luOwotCi0vKioKLSAqIEEge0BsaW5rIEN1c3RvbWl6ZXJ9IHRoYXQgYWxsb3dzIGEge0BsaW5rIFJlbW90ZUFjY2VwdG9yfSB0byBiZSB1c2VkIHdpdGggYSBjb25zb2xlIGltcGxlbWVudGF0aW9uLiBPbmx5IG9uZQotICoge0Bjb2RlIENvbnNvbGVDdXN0b21pemVyfSBjYW4gYmUgYWRkZWQgdG8gYSBwYXJ0aWN1bGFyIHtAbGluayBHcmVtbGluUGx1Z2lufS4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ29uc29sZUN1c3RvbWl6ZXIgZXh0ZW5kcyBDdXN0b21pemVyIHsKLSAgICAvKioKLSAgICAgKiBBbGxvd3MgYSBwbHVnaW4gdG8gdXRpbGl6ZSBmZWF0dXJlcyBvZiB0aGUge0Bjb2RlIDpyZW1vdGV9IGFuZCB7QGNvZGUgOnN1Ym1pdH0gY29tbWFuZHMgb2YgdGhlIEdyZW1saW4gQ29uc29sZS4KLSAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGltcGxlbWVudGVkIGlmIHRoZSBwbHVnaW4gaXMgbm90IG1lYW50IGZvciB0aGUgQ29uc29sZSBmb3Igc29tZSByZWFzb24gb3IKLSAgICAgKiBpZiBpdCBkb2VzIG5vdCBpbnRlbmQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhvc2UgY29tbWFuZHMuCi0gICAgICovCi0gICAgcHVibGljIFJlbW90ZUFjY2VwdG9yIGdldFJlbW90ZUFjY2VwdG9yKGZpbmFsIEdyZW1saW5TaGVsbEVudmlyb25tZW50IGVudmlyb25tZW50KTsKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL2NvbnNvbGUvUmVtb3RlQWNjZXB0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL2NvbnNvbGUvUmVtb3RlQWNjZXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2ZDAzZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9jb25zb2xlL1JlbW90ZUFjY2VwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlOwotCi1pbXBvcnQgamF2YS5pby5DbG9zZWFibGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBUaGUgR3JlbWxpbiBDb25zb2xlIHN1cHBvcnRzIHRoZSB7QGNvZGUgOnJlbW90ZX0gYW5kIHtAY29kZSA6c3VibWl0fSBjb21tYW5kcyB3aGljaCBwcm92aWRlIHN0YW5kYXJkaXplZCB3YXlzCi0gKiBmb3IgcGx1Z2lucyB0byBwcm92aWRlICJyZW1vdGUgY29ubmVjdGlvbnMiIHRvIHJlc291cmNlcyBhbmQgYSB3YXkgdG8gInN1Ym1pdCIgYSBjb21tYW5kIHRvIHRob3NlIHJlc291cmNlcy4KLSAqIEEgInJlbW90ZSBjb25uZWN0aW9uIiBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGJlIGEgcmVtb3RlIHNlcnZlci4gIEl0IHNpbXBseSByZWZlcnMgdG8gYSByZXNvdXJjZSB0aGF0IGlzCi0gKiBleHRlcm5hbCB0byB0aGUgY29uc29sZS4KLSAqIDxwLz4KLSAqIEJ5IGltcGxlbWVudGluZyB0aGlzIGludGVyZmFjZSBhbmQgcmV0dXJuaW5nIGFuIGluc3RhbmNlIG9mIGl0IHRocm91Z2gKLSAqIHtAbGluayBDb25zb2xlQ3VzdG9taXplciNnZXRSZW1vdGVBY2NlcHRvcihHcmVtbGluU2hlbGxFbnZpcm9ubWVudCl9IGEgcGx1Z2luIGNhbiBob29rIGludG8gdGhvc2UgY29tbWFuZHMgYW5kCi0gKiBwcm92aWRlIHJlbW90aW5nIGZlYXR1cmVzLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBSZW1vdGVBY2NlcHRvciBleHRlbmRzIENsb3NlYWJsZSB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFQgPSAicmVzdWx0IjsKLQotICAgIC8qKgotICAgICAqIEdldHMgY2FsbGVkIHdoZW4ge0Bjb2RlIDpyZW1vdGV9IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgImNvbm5lY3QiIG9wdGlvbi4gIEl0IGlzIHVwIHRvIHRoZQotICAgICAqIGltcGxlbWVudGF0aW9uIHRvIGRlY2lkZSBob3cgYWRkaXRpb25hbCBhcmd1bWVudHMgb24gdGhlIGxpbmUgc2hvdWxkIGJlIHRyZWF0ZWQgYWZ0ZXIgImNvbm5lY3QiLgotICAgICAqCi0gICAgICogQHJldHVybiBhbiBvYmplY3QgdG8gZGlzcGxheSBhcyBvdXRwdXQgdG8gdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBjb25uZWN0aW5nCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCBjb25uZWN0KGZpbmFsIExpc3Q8U3RyaW5nPiBhcmdzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogR2V0cyBjYWxsZWQgd2hlbiB7QGNvZGUgOnJlbW90ZX0gaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB7QGNvZGUgY29uZmlnfSBvcHRpb24uICBJdCBpcyB1cCB0byB0aGUKLSAgICAgKiBpbXBsZW1lbnRhdGlvbiB0byBkZWNpZGUgaG93IGFkZGl0aW9uYWwgYXJndW1lbnRzIG9uIHRoZSBsaW5lIHNob3VsZCBiZSB0cmVhdGVkIGFmdGVyIHtAY29kZSBjb25maWd9LgotICAgICAqCi0gICAgICogQHJldHVybiBhbiBvYmplY3QgdG8gZGlzcGxheSBhcyBvdXRwdXQgdG8gdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBjb25maWd1cmF0aW9uCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCBjb25maWd1cmUoZmluYWwgTGlzdDxTdHJpbmc+IGFyZ3MpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGNhbGxlZCB3aGVuIHtAY29kZSA6c3VibWl0fSBpcyBleGVjdXRlZC4gIEl0IGlzIHVwIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBkZWNpZGUgaG93IGFkZGl0aW9uYWwKLSAgICAgKiBhcmd1bWVudHMgb24gdGhlIGxpbmUgc2hvdWxkIGJlIHRyZWF0ZWQgYWZ0ZXIge0Bjb2RlIDpzdWJtaXR9LgotICAgICAqCi0gICAgICogQHJldHVybiBhbiBvYmplY3QgdG8gZGlzcGxheSBhcyBvdXRwdXQgdG8gdGhlIHVzZXIKLSAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBzdWJtaXNzaW9uCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCBzdWJtaXQoZmluYWwgTGlzdDxTdHJpbmc+IGFyZ3MpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUge0Bjb2RlIFJlbW90ZUFjY2VwdG9yfSBpcyB1c2VkIGluIHRoZSBHcmVtbGluIENvbnNvbGUsIHRoZW4gdGhpcyBtZXRob2QgbWlnaHQgYmUgY2FsbGVkIHRvIGRldGVybWluZQotICAgICAqIGlmIGl0IGNhbiBiZSB1c2VkIGluIGEgZmFzaGlvbiB0aGF0IHN1cHBvcnRzIHRoZSB7QGNvZGUgOnJlbW90ZSBjb25zb2xlfSBjb21tYW5kLiAgQnkgZGVmYXVsdCwgdGhpcyB2YWx1ZSBpcwotICAgICAqIHNldCB0byB7QGNvZGUgZmFsc2V9LgotICAgICAqIDxwLz4KLSAgICAgKiBBIHtAY29kZSBSZW1vdGVBY2NlcHRvcn0gc2hvdWxkIG9ubHkgcmV0dXJuIHtAY29kZSB0cnVlfSBmb3IgdGhpcyBtZXRob2QgaWYgaXQgZXhwZWN0cyB0aGF0IGFsbCBhY3Rpdml0aWVzIGl0Ci0gICAgICogc3VwcG9ydHMgYXJlIGV4ZWN1dGVkIHRocm91Z2ggdGhlIHtAY29kZSA6c3VibWl0fSBjb21tYW5kLiBJZiB0aGUgdXNlcnMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVtb3RlIHJlcXVpcmVzCi0gICAgICogd29ya2luZyB3aXRoIGJvdGggbG9jYWwgYW5kIHJlbW90ZSBldmFsdWF0aW9uIGF0IHRoZSBzYW1lIHRpbWUsIGl0IGlzIGxpa2VseSBiZXN0IHRvIGtlZXAgdGhpcyBtZXRob2QgcmV0dXJuCi0gICAgICoge0Bjb2RlIGZhbHNlfS4gQSBnb29kIGV4YW1wbGUgb2YgdGhpcyB0eXBlIG9mIHBsdWdpbiB3b3VsZCBiZSB0aGUgR2VwaGkgUGx1Z2luIHdoaWNoIHVzZXMge0Bjb2RlIDpyZW1vdGUgY29uZmlnfQotICAgICAqIHRvIGNvbmZpZ3VyZSBhIGxvY2FsIHtAY29kZSBUcmF2ZXJzYWxTb3VyY2V9IHRvIGJlIHVzZWQgYW5kIGV4cGVjdHMgY2FsbHMgdG8ge0Bjb2RlIDpzdWJtaXR9IGZvciB0aGUgc2FtZSBib2R5Ci0gICAgICogb2YgYW5hbHlzaXMuCi0gICAgICovCi0gICAgcHVibGljIGRlZmF1bHQgYm9vbGVhbiBhbGxvd1JlbW90ZUNvbnNvbGUoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9jb25zb2xlL1JlbW90ZUV4Y2VwdGlvbi5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvY29uc29sZS9SZW1vdGVFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFiMTQzYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9jb25zb2xlL1JlbW90ZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZTsKLQotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLQotLyoqCi0gKiBBIG1hcHBlciB7QGNvZGUgRXhjZXB0aW9ufSB0byBiZSB0aHJvd24gd2hlbiB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCBwcm9jZXNzaW5nIGEgY29tbWFuZCBnaXZlbiB0byBhCi0gKiB7QGxpbmsgUmVtb3RlQWNjZXB0b3J9LiAgVGhlIG1lc3NhZ2UgcHJvdmlkZWQgdG8gdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciBpbiB0aGUgQ29uc29sZS4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW1vdGVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewotICAgIHByaXZhdGUgU3RyaW5nIHJlbW90ZVN0YWNrVHJhY2UgPSBudWxsOwotCi0gICAgcHVibGljIFJlbW90ZUV4Y2VwdGlvbihmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgICAgICB0aGlzKG1lc3NhZ2UsIChTdHJpbmcpIG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBSZW1vdGVFeGNlcHRpb24oZmluYWwgU3RyaW5nIG1lc3NhZ2UsIGZpbmFsIFN0cmluZyByZW1vdGVTdGFja1RyYWNlKSB7Ci0gICAgICAgIHN1cGVyKG1lc3NhZ2UpOwotICAgICAgICB0aGlzLnJlbW90ZVN0YWNrVHJhY2UgPSByZW1vdGVTdGFja1RyYWNlOwotICAgIH0KLQotICAgIHB1YmxpYyBSZW1vdGVFeGNlcHRpb24oZmluYWwgU3RyaW5nIG1lc3NhZ2UsIGZpbmFsIFRocm93YWJsZSBjYXVzZSkgewotICAgICAgICB0aGlzKG1lc3NhZ2UsIGNhdXNlLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVtb3RlRXhjZXB0aW9uKGZpbmFsIFN0cmluZyBtZXNzYWdlLCBmaW5hbCBUaHJvd2FibGUgY2F1c2UsIGZpbmFsIFN0cmluZyByZW1vdGVTdGFja1RyYWNlKSB7Ci0gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLSAgICAgICAgdGhpcy5yZW1vdGVTdGFja1RyYWNlID0gcmVtb3RlU3RhY2tUcmFjZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVtb3RlRXhjZXB0aW9uKGZpbmFsIFRocm93YWJsZSBjYXVzZSkgewotICAgICAgICBzdXBlcihjYXVzZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIHN0YWNrdHJhY2UgcHJvZHVjZWQgYnkgdGhlIHJlbW90ZSBzZXJ2ZXIuCi0gICAgICovCi0gICAgcHVibGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0UmVtb3RlU3RhY2tUcmFjZSgpIHsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUocmVtb3RlU3RhY2tUcmFjZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0RlZmF1bHRHcmVtbGluQmFzZVZpc2l0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9EZWZhdWx0R3JlbWxpbkJhc2VWaXNpdG9yLmphdmEKaW5kZXggMGM1YTBkMy4uODk0ZWIzZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0RlZmF1bHRHcmVtbGluQmFzZVZpc2l0b3IuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvRGVmYXVsdEdyZW1saW5CYXNlVmlzaXRvci5qYXZhCkBAIC0zNDcsNyArMzQ3LDExIEBACiAJICoge0Bpbmhlcml0RG9jfQogCSAqLwogCUBPdmVycmlkZSBwdWJsaWMgVCB2aXNpdFRyYXZlcnNhbE1ldGhvZF9kaWZmZXJlbmNlX09iamVjdChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbE1ldGhvZF9kaWZmZXJlbmNlX09iamVjdENvbnRleHQgY3R4KSB7IG5vdEltcGxlbWVudGVkKGN0eCk7IHJldHVybiBudWxsOyB9Ci0JLyoqCisgICAgLyoqCisgICAgICoge0Bpbmhlcml0RG9jfQorICAgICAqLworICAgIEBPdmVycmlkZSBwdWJsaWMgVCB2aXNpdFRyYXZlcnNhbE1ldGhvZF9kaXNjYXJkKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsTWV0aG9kX2Rpc2NhcmRDb250ZXh0IGN0eCkgeyBub3RJbXBsZW1lbnRlZChjdHgpOyByZXR1cm4gbnVsbDsgfQorICAgIC8qKgogCSAqIHtAaW5oZXJpdERvY30KIAkgKi8KIAlAT3ZlcnJpZGUgcHVibGljIFQgdmlzaXRUcmF2ZXJzYWxNZXRob2RfZGlzanVuY3RfT2JqZWN0KGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsTWV0aG9kX2Rpc2p1bmN0X09iamVjdENvbnRleHQgY3R4KSB7IG5vdEltcGxlbWVudGVkKGN0eCk7IHJldHVybiBudWxsOyB9CkBAIC01OTgsMTAgKzYwMiw2IEBACiAJLyoqCiAJICoge0Bpbmhlcml0RG9jfQogCSAqLwotCUBPdmVycmlkZSBwdWJsaWMgVCB2aXNpdFRyYXZlcnNhbE1ldGhvZF9kaXNjYXJkKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsTWV0aG9kX2Rpc2NhcmRDb250ZXh0IGN0eCkgeyBub3RJbXBsZW1lbnRlZChjdHgpOyByZXR1cm4gbnVsbDsgfQotCS8qKgotCSAqIHtAaW5oZXJpdERvY30KLQkgKi8KIAlAT3ZlcnJpZGUgcHVibGljIFQgdmlzaXRUcmF2ZXJzYWxNZXRob2Rfbm9uZV9QKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsTWV0aG9kX25vbmVfUENvbnRleHQgY3R4KSB7IG5vdEltcGxlbWVudGVkKGN0eCk7IHJldHVybiBudWxsOyB9CiAJLyoqCiAJICoge0Bpbmhlcml0RG9jfQpAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIAkvKioKIAkgKiB7QGluaGVyaXREb2N9CiAJICovCi0JQE92ZXJyaWRlIHB1YmxpYyBUIHZpc2l0VHJhdmVyc2FsRFQoR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxEVENvbnRleHQgY3R4KSB7IG5vdEltcGxlbWVudGVkKGN0eCk7IHJldHVybiBudWxsOyB9CisJQE92ZXJyaWRlIHB1YmxpYyBUIHZpc2l0VHJhdmVyc2FsRFQoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxEVENvbnRleHQgY3R4KSB7IG5vdEltcGxlbWVudGVkKGN0eCk7IHJldHVybiBudWxsOyB9CiAJLyoqCiAJICoge0Bpbmhlcml0RG9jfQogCSAqLwpAQCAtMTI5OCw2ICsxMjk4LDEwIEBACiAJLyoqCiAJICoge0Bpbmhlcml0RG9jfQogCSAqLworCUBPdmVycmlkZSBwdWJsaWMgVCB2aXNpdE51bGxhYmxlR2VuZXJpY0xpdGVyYWxNYXAoZmluYWwgR3JlbWxpblBhcnNlci5OdWxsYWJsZUdlbmVyaWNMaXRlcmFsTWFwQ29udGV4dCBjdHgpIHsgbm90SW1wbGVtZW50ZWQoY3R4KTsgcmV0dXJuIG51bGw7IH0KKwkvKioKKwkgKiB7QGluaGVyaXREb2N9CisJICovCiAJQE92ZXJyaWRlIHB1YmxpYyBUIHZpc2l0SW50ZWdlckxpdGVyYWwoZmluYWwgR3JlbWxpblBhcnNlci5JbnRlZ2VyTGl0ZXJhbENvbnRleHQgY3R4KSB7IG5vdEltcGxlbWVudGVkKGN0eCk7IHJldHVybiBudWxsOyB9CiAJLyoqCiAJICoge0Bpbmhlcml0RG9jfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0dlbmVyaWNMaXRlcmFsVmlzaXRvci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0dlbmVyaWNMaXRlcmFsVmlzaXRvci5qYXZhCmluZGV4IDhiMWM5YjMuLjk4M2NmYzAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9HZW5lcmljTGl0ZXJhbFZpc2l0b3IuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvR2VuZXJpY0xpdGVyYWxWaXNpdG9yLmphdmEKQEAgLTY4OSw5ICs2ODksOSBAQAogICAgICAgICByZXR1cm4gY3R4LmNoaWxkcmVuCiAgICAgICAgICAgICAgICAgLnN0cmVhbSgpCiAgICAgICAgICAgICAgICAgLmZpbHRlcihPYmplY3RzOjpub25OdWxsKQotICAgICAgICAgICAgICAgIC5maWx0ZXIocCAtPiBwIGluc3RhbmNlb2YgR3JlbWxpblBhcnNlci5TdHJpbmdOdWxsYWJsZUFyZ3VtZW50Q29udGV4dCkKLSAgICAgICAgICAgICAgICAubWFwKHAgLT4gKEdyZW1saW5QYXJzZXIuU3RyaW5nTnVsbGFibGVBcmd1bWVudENvbnRleHQpIHApCi0gICAgICAgICAgICAgICAgLm1hcChhbnRsci5hcmd1bWVudFZpc2l0b3I6OnZpc2l0U3RyaW5nTnVsbGFibGVBcmd1bWVudCkKKyAgICAgICAgICAgICAgICAuZmlsdGVyKHAgLT4gcCBpbnN0YW5jZW9mIEdyZW1saW5QYXJzZXIuU3RyaW5nTnVsbGFibGVMaXRlcmFsQ29udGV4dCkKKyAgICAgICAgICAgICAgICAubWFwKHAgLT4gKEdyZW1saW5QYXJzZXIuU3RyaW5nTnVsbGFibGVMaXRlcmFsQ29udGV4dCkgcCkKKyAgICAgICAgICAgICAgICAubWFwKGFudGxyLmdlbmVyaWNWaXNpdG9yOjp2aXNpdFN0cmluZ051bGxhYmxlTGl0ZXJhbCkKICAgICAgICAgICAgICAgICAudG9BcnJheShPYmplY3RbXTo6bmV3KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvR3JlbWxpbkFudGxyVG9KYXZhLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvR3JlbWxpbkFudGxyVG9KYXZhLmphdmEKaW5kZXggMTg4ODk1OC4uZGI2NTBlYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0dyZW1saW5BbnRsclRvSmF2YS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9HcmVtbGluQW50bHJUb0phdmEuamF2YQpAQCAtMTksNyArMTksNyBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmdyYW1tYXI7CiAKIGltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS50cmVlLlBhcnNlVHJlZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlIGFuZCBpcyBib3VuZCB0byBhbiB7QGxpbmsgRW1wdHlHcmFwaH0uIFRoaXMgZm9ybSBvZiBjb25zdHJ1Y3Rpb24gaXMgaGVscGZ1bCBmb3IKLSAgICAgKiBnZW5lcmF0aW5nIHtAbGluayBCeXRlY29kZX0gb3IgZm9yIHZhcmlvdXMgZm9ybXMgb2YgdGVzdGluZy4ge0BsaW5rIFRyYXZlcnNhbH0gaW5zdGFuY2VzIGNvbnN0cnVjdGVkIGZyb20gdGhpcworICAgICAqIGdlbmVyYXRpbmcge0BsaW5rIEdyZW1saW5MYW5nfSBvciBmb3IgdmFyaW91cyBmb3JtcyBvZiB0ZXN0aW5nLiB7QGxpbmsgVHJhdmVyc2FsfSBpbnN0YW5jZXMgY29uc3RydWN0ZWQgZnJvbSB0aGlzCiAgICAgICogZm9ybSB3aWxsIG5vdCBiZSBjYXBhYmxlIG9mIGl0ZXJhdGluZy4gQXNzdW1lcyB0aGF0ICJnIiBpcyB0aGUgbmFtZSBvZiB0aGUge0BsaW5rIEdyYXBoVHJhdmVyc2FsU291cmNlfS4KICAgICAgKi8KICAgICBwdWJsaWMgR3JlbWxpbkFudGxyVG9KYXZhKCkgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL05vT3BUZXJtaW5hbFZpc2l0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9Ob09wVGVybWluYWxWaXNpdG9yLmphdmEKaW5kZXggZGViYjA2ZC4uOGEyYTQ0MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL05vT3BUZXJtaW5hbFZpc2l0b3IuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvTm9PcFRlcm1pbmFsVmlzaXRvci5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hcjsKIAogaW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLnRyZWUuUGFyc2VUcmVlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKQEAgLTMwLDcgKzMwLDcgQEAKIC8qKgogICoge0Bpbmhlcml0RG9jfQogICoKLSAqIFRoZSBzYW1lIGFzIHBhcmVudCB2aXNpdG9yIHtAbGluayBHcmVtbGluQW50bHJUb0phdmF9IGJ1dCByZXR1cm5zIHtAbGluayBCeXRlY29kZX0gaW5zdGVhZCBvZiBhIHtAbGluayBUcmF2ZXJzYWx9CisgKiBUaGUgc2FtZSBhcyBwYXJlbnQgdmlzaXRvciB7QGxpbmsgR3JlbWxpbkFudGxyVG9KYXZhfSBidXQgcmV0dXJucyB7QGxpbmsgR3JlbWxpbkxhbmd9IGluc3RlYWQgb2YgYSB7QGxpbmsgVHJhdmVyc2FsfQogICogb3Ige0BsaW5rIEdyYXBoVHJhdmVyc2FsU291cmNlfSwgYW5kIHVzZXMgYW4gb3ZlcnJpZGRlbiB0ZXJtaW5hbCBzdGVwIHZpc2l0b3IuCiAgKi8KIHB1YmxpYyBjbGFzcyBOb09wVGVybWluYWxWaXNpdG9yIGV4dGVuZHMgR3JlbWxpbkFudGxyVG9KYXZhIHsKQEAgLTUwLDEyICs1MCwxMiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMge0BsaW5rIEJ5dGVjb2RlfSBvZiB7QGxpbmsgVHJhdmVyc2FsfSBvciB7QGxpbmsgR3JhcGhUcmF2ZXJzYWxTb3VyY2V9LCBvdmVycmlkaW5nIGFueSB0ZXJtaW5hbCBzdGVwCisgICAgICogUmV0dXJucyB7QGxpbmsgR3JlbWxpbkxhbmd9IG9mIHtAbGluayBUcmF2ZXJzYWx9IG9yIHtAbGluayBHcmFwaFRyYXZlcnNhbFNvdXJjZX0sIG92ZXJyaWRpbmcgYW55IHRlcm1pbmFsIHN0ZXAKICAgICAgKiBvcGVyYXRpb25zIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGV4ZWN1dGVkIHVzaW5nIHRoZSB7QGxpbmsgVHJhdmVyc2FsVGVybWluYWxNZXRob2RWaXNpdG9yfSB0byBhcHBlbmQKLSAgICAgKiB0ZXJtaW5hbCBvcGVyYXRpb25zIHRvIGJ5dGVjb2RlLgorICAgICAqIHRlcm1pbmFsIG9wZXJhdGlvbnMgdG8gR3JlbWxpbkxhbmcuCiAgICAgICoKICAgICAgKiBAcGFyYW0gY3R4IC0gdGhlIHBhcnNlIHRyZWUKLSAgICAgKiBAcmV0dXJuIC0gYnl0ZWNvZGUgZnJvbSB0aGUgdHJhdmVyc2FsIG9yIHRyYXZlcnNhbCBzb3VyY2UKKyAgICAgKiBAcmV0dXJuIC0gZ3JlbWxpbkxhbmcgZnJvbSB0aGUgdHJhdmVyc2FsIG9yIHRyYXZlcnNhbCBzb3VyY2UKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgT2JqZWN0IHZpc2l0UXVlcnkoZmluYWwgR3JlbWxpblBhcnNlci5RdWVyeUNvbnRleHQgY3R4KXsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkIGluc3RhbmNlb2YgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxTb3VyY2VDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkQ291bnQgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgdHJhdmVyc2FsU291cmNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBndmlzaXRvci52aXNpdFRyYXZlcnNhbFNvdXJjZSgoR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxTb3VyY2VDb250ZXh0KWZpcnN0Q2hpbGQpLmdldEJ5dGVjb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBndmlzaXRvci52aXNpdFRyYXZlcnNhbFNvdXJjZSgoR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxTb3VyY2VDb250ZXh0KWZpcnN0Q2hpbGQpLmdldEdyZW1saW5MYW5nKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHRyYXZlcnNhbFNvdXJjZSBET1QgdHJhbnNhY3Rpb25QYXJ0CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBHcmVtbGluUGFyc2VyRXhjZXB0aW9uKCJUcmFuc2FjdGlvbiBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTsKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRDb3VudCA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSByb290VHJhdmVyc2FsCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0dmlzaXRvci52aXNpdFJvb3RUcmF2ZXJzYWwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdyZW1saW5QYXJzZXIuUm9vdFRyYXZlcnNhbENvbnRleHQpZmlyc3RDaGlsZCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdyZW1saW5QYXJzZXIuUm9vdFRyYXZlcnNhbENvbnRleHQpZmlyc3RDaGlsZCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHJvb3RUcmF2ZXJzYWwgRE9UIHRyYXZlcnNhbFRlcm1pbmFsTWV0aG9kCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvdWxkIG5vdCBrZWVwIGFsbCBvZiB0aGVzZSBtZXRob2RzIGluIG9uZSB2aXNpdG9yIGR1ZSB0byB0aGUgbmVlZCBvZiB0aGUgdGVybWluYWwgdmlzaXRvciB0byBoYXZlIGEgdHJhdmVyc2FsLApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1Rlcm1pbmFsTWV0aG9kVG9CeXRlY29kZVZpc2l0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UZXJtaW5hbE1ldGhvZFRvQnl0ZWNvZGVWaXNpdG9yLmphdmEKaW5kZXggZjM4MDhjOS4uN2Q2MDRmNiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1Rlcm1pbmFsTWV0aG9kVG9CeXRlY29kZVZpc2l0b3IuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVGVybWluYWxNZXRob2RUb0J5dGVjb2RlVmlzaXRvci5qYXZhCkBAIC0xOCwxMSArMTgsMTEgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmdyYW1tYXI7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiAKIC8qKgotICogSGFuZGxlcyB0ZXJtaW5hbCBzdGVwcyBmb3Ige0BsaW5rIEJ5dGVjb2RlfSBhcyB0aGV5IGFyZSBub3QgYWRkZWQgdGhpcyB3YXkgbmF0dXJhbGx5LiBUaGV5IGFyZSBub3JtYWxseSB0cmVhdGVkIGFzCisgKiBIYW5kbGVzIHRlcm1pbmFsIHN0ZXBzIGZvciB7QGxpbmsgR3JlbWxpbkxhbmd9IGFzIHRoZXkgYXJlIG5vdCBhZGRlZCB0aGlzIHdheSBuYXR1cmFsbHkuIFRoZXkgYXJlIG5vcm1hbGx5IHRyZWF0ZWQgYXMKICAqIHRoZSBwb2ludCBvZiB0cmF2ZXJzYWwgZXhlY3V0aW9uLgogICovCiBwdWJsaWMgY2xhc3MgVGVybWluYWxNZXRob2RUb0J5dGVjb2RlVmlzaXRvciBleHRlbmRzIFRyYXZlcnNhbFRlcm1pbmFsTWV0aG9kVmlzaXRvciB7CkBAIC00Niw3ICs0Niw3IEBACiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIE9iamVjdCB2aXNpdFRyYXZlcnNhbFRlcm1pbmFsTWV0aG9kX2V4cGxhaW4oZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF9leHBsYWluQ29udGV4dCBjdHgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYmMgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKKyAgICAgICAgZmluYWwgR3JlbWxpbkxhbmcgYmMgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKICAgICAgICAgYmMuYWRkU3RlcCgiZXhwbGFpbiIpOwogICAgICAgICByZXR1cm4gYmM7CiAgICAgfQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBPYmplY3QgdmlzaXRUcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF9pdGVyYXRlKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsVGVybWluYWxNZXRob2RfaXRlcmF0ZUNvbnRleHQgY3R4KSB7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJjID0gdGhpcy50cmF2ZXJzYWwuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7CisgICAgICAgIGZpbmFsIEdyZW1saW5MYW5nIGJjID0gdGhpcy50cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCk7CiAgICAgICAgIGJjLmFkZFN0ZXAoIml0ZXJhdGUiKTsKICAgICAgICAgcmV0dXJuIGJjOwogICAgIH0KQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgT2JqZWN0IHZpc2l0VHJhdmVyc2FsVGVybWluYWxNZXRob2RfaGFzTmV4dChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbFRlcm1pbmFsTWV0aG9kX2hhc05leHRDb250ZXh0IGN0eCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBiYyA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOworICAgICAgICBmaW5hbCBHcmVtbGluTGFuZyBiYyA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpOwogICAgICAgICBiYy5hZGRTdGVwKCJoYXNOZXh0Iik7CiAgICAgICAgIHJldHVybiBiYzsKICAgICB9CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIE9iamVjdCB2aXNpdFRyYXZlcnNhbFRlcm1pbmFsTWV0aG9kX3RyeU5leHQoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF90cnlOZXh0Q29udGV4dCBjdHgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYmMgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKKyAgICAgICAgZmluYWwgR3JlbWxpbkxhbmcgYmMgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKICAgICAgICAgYmMuYWRkU3RlcCgidHJ5TmV4dCIpOwogICAgICAgICByZXR1cm4gYmM7CiAgICAgfQpAQCAtOTQsNyArOTQsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBPYmplY3QgdmlzaXRUcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF9uZXh0KGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsVGVybWluYWxNZXRob2RfbmV4dENvbnRleHQgY3R4KSB7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJjID0gdGhpcy50cmF2ZXJzYWwuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7CisgICAgICAgIGZpbmFsIEdyZW1saW5MYW5nIGJjID0gdGhpcy50cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCk7CiAgICAgICAgIGlmIChjdHguZ2V0Q2hpbGRDb3VudCgpID09IDMpIHsKICAgICAgICAgICAgIGJjLmFkZFN0ZXAoIm5leHQiKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBPYmplY3QgdmlzaXRUcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF90b0xpc3QoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF90b0xpc3RDb250ZXh0IGN0eCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBiYyA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOworICAgICAgICBmaW5hbCBHcmVtbGluTGFuZyBiYyA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpOwogICAgICAgICBiYy5hZGRTdGVwKCJ0b0xpc3QiKTsKICAgICAgICAgcmV0dXJuIGJjOwogICAgIH0KQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBPYmplY3QgdmlzaXRUcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF90b1NldChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbFRlcm1pbmFsTWV0aG9kX3RvU2V0Q29udGV4dCBjdHgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYmMgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKKyAgICAgICAgZmluYWwgR3JlbWxpbkxhbmcgYmMgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKICAgICAgICAgYmMuYWRkU3RlcCgidG9TZXQiKTsKICAgICAgICAgcmV0dXJuIGJjOwogICAgIH0KQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBPYmplY3QgdmlzaXRUcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF90b0J1bGtTZXQoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxUZXJtaW5hbE1ldGhvZF90b0J1bGtTZXRDb250ZXh0IGN0eCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBiYyA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOworICAgICAgICBmaW5hbCBHcmVtbGluTGFuZyBiYyA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpOwogICAgICAgICBiYy5hZGRTdGVwKCJ0b0J1bGtTZXQiKTsKICAgICAgICAgcmV0dXJuIGJjOwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxFbnVtUGFyc2VyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsRW51bVBhcnNlci5qYXZhCmluZGV4IDBiOTEzMTguLmI1ZmI0ZWEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxFbnVtUGFyc2VyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbEVudW1QYXJzZXIuamF2YQpAQCAtMjEsNyArMjEsMTEgQEAKIGltcG9ydCBvcmcuYW50bHIudjQucnVudGltZS50cmVlLlBhcnNlVHJlZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOworCitpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uOwogCiAvKioKICAqIFRyYXZlcnNhbCBlbnVtIHBhcnNlciBwYXJzZXMgYWxsIHRoZSBlbnVtcyBsaWtlIChlLmcuIHtAbGluayBTY29wZX0gaW4gZ3JhcGggdHJhdmVyc2FsLgpAQCAtNjcsNiArNzEsMTYgQEAKICAgICAgICAgcmV0dXJuIERpcmVjdGlvbi5kaXJlY3Rpb25WYWx1ZU9mKHRleHQpOwogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgRnVuY3Rpb24gcGFyc2VUcmF2ZXJzYWxGdW5jdGlvbkZyb21Db250ZXh0KGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsRnVuY3Rpb25Db250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgaWYgKGNvbnRleHQudHJhdmVyc2FsVCgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBUcmF2ZXJzYWxFbnVtUGFyc2VyLnBhcnNlVHJhdmVyc2FsRW51bUZyb21Db250ZXh0KFQuY2xhc3MsIGNvbnRleHQudHJhdmVyc2FsVCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnRyYXZlcnNhbENvbHVtbigpICE9IG51bGwpCisgICAgICAgICAgICByZXR1cm4gVHJhdmVyc2FsRW51bVBhcnNlci5wYXJzZVRyYXZlcnNhbEVudW1Gcm9tQ29udGV4dChDb2x1bW4uY2xhc3MsIGNvbnRleHQudHJhdmVyc2FsQ29sdW1uKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBHcmVtbGluUGFyc2VyRXhjZXB0aW9uKCJVbnJlY29nbml6ZWQgZW51bSBmb3IgdHJhdmVyc2FsIGZ1bmN0aW9uIik7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBQYXJzaW5nIG9mIHtAbGluayBHVHlwZX0gcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGFzIGdyYW1tYXIgYWxsb3dzIGxvd2VyY2FzZSBmb3IgdG9rZW5zLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbE1ldGhvZFZpc2l0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxNZXRob2RWaXNpdG9yLmphdmEKaW5kZXggNjk3YTcxMy4uNTM3YmRjYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbE1ldGhvZFZpc2l0b3IuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsTWV0aG9kVmlzaXRvci5qYXZhCkBAIC0zNSw3ICszNSw2IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQmlGdW5jdGlvbjsKIAogLyoqCkBAIC01NTQsNiArNTUzLDE0IEBACiAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBUcmF2ZXJzYWwgdmlzaXRUcmF2ZXJzYWxNZXRob2RfZGlzY2FyZChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbE1ldGhvZF9kaXNjYXJkQ29udGV4dCBjdHgpIHsKKyAgICAgICAgcmV0dXJuIGdyYXBoVHJhdmVyc2FsLmRpc2NhcmQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiB7QGluaGVyaXREb2N9CisgICAgICovCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2Rpc2p1bmN0X09iamVjdChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbE1ldGhvZF9kaXNqdW5jdF9PYmplY3RDb250ZXh0IGN0eCkgewogICAgICAgICByZXR1cm4gZ3JhcGhUcmF2ZXJzYWwuZGlzanVuY3QoYW50bHIuZ2VuZXJpY1Zpc2l0b3IudmlzaXRHZW5lcmljTGl0ZXJhbChjdHguZ2VuZXJpY0xpdGVyYWwoKSkpOwogICAgIH0KQEAgLTY1Miw3ICs2NTksNyBAQAogICAgICAqIHtAaW5oZXJpdERvY30KICAgICAgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwgdmlzaXRUcmF2ZXJzYWxNZXRob2RfZnJvbV9TdHJpbmcoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxNZXRob2RfZnJvbV9TdHJpbmdDb250ZXh0IGN0eCkgeworICAgIHB1YmxpYyBUcmF2ZXJzYWwgdmlzaXRUcmF2ZXJzYWxNZXRob2RfZnJvbV9TdHJpbmcoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxNZXRob2RfZnJvbV9TdHJpbmdDb250ZXh0IGN0eCkgewogICAgICAgICByZXR1cm4gZ3JhcGhUcmF2ZXJzYWwuZnJvbShhbnRsci5nZW5lcmljVmlzaXRvci5wYXJzZVN0cmluZyhjdHguc3RyaW5nTGl0ZXJhbCgpKSk7CiAgICAgfQogCkBAIC0xMTQ5LDE0ICsxMTU2LDYgQEAKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEdyYXBoVHJhdmVyc2FsIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2Rpc2NhcmQoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxNZXRob2RfZGlzY2FyZENvbnRleHQgY3R4KSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmdyYXBoVHJhdmVyc2FsLmRpc2NhcmQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiB7QGluaGVyaXREb2N9Ci0gICAgICovCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsIHZpc2l0VHJhdmVyc2FsTWV0aG9kX25vbmVfUChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbE1ldGhvZF9ub25lX1BDb250ZXh0IGN0eCkgewogICAgICAgICByZXR1cm4gZ3JhcGhUcmF2ZXJzYWwubm9uZShhbnRsci50cmF2ZXJzYWxQcmVkaWNhdGVWaXNpdG9yLnZpc2l0VHJhdmVyc2FsUHJlZGljYXRlKGN0eC50cmF2ZXJzYWxQcmVkaWNhdGUoKSkpOwogICAgIH0KQEAgLTE3MjUsNyArMTcyNCw3IEBACiAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbCB2aXNpdFRyYXZlcnNhbE1ldGhvZF90b19TdHJpbmcoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxNZXRob2RfdG9fU3RyaW5nQ29udGV4dCBjdHgpIHsKKyAgICBwdWJsaWMgVHJhdmVyc2FsIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3RvX1N0cmluZyhmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbE1ldGhvZF90b19TdHJpbmdDb250ZXh0IGN0eCkgewogICAgICAgICByZXR1cm4gZ3JhcGhUcmF2ZXJzYWwudG8oYW50bHIuZ2VuZXJpY1Zpc2l0b3IucGFyc2VTdHJpbmcoY3R4LnN0cmluZ0xpdGVyYWwoKSkpOwogICAgIH0KIApAQCAtMTgwOCw3ICsxODA3LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwgdmlzaXRUcmF2ZXJzYWxNZXRob2RfdmFsdWVNYXBfYm9vbGVhbl9TdHJpbmcoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxNZXRob2RfdmFsdWVNYXBfYm9vbGVhbl9TdHJpbmdDb250ZXh0IGN0eCkgewogICAgICAgICBpZiAoY3R4LmdldENoaWxkQ291bnQoKSA9PSA0KSB7Ci0gICAgICAgICAgICByZXR1cm4gZ3JhcGhUcmF2ZXJzYWwudmFsdWVNYXAoKGJvb2xlYW4pIGFudGxyLmdlbmVyaWNWaXNpdG9yLnZpc2l0Qm9vbGVhbkxpdGVyYWwoY3R4LmJvb2xlYW5MaXRlcmFsKCkpKTsKKyAgICAgICAgICAgIHJldHVybiBncmFwaFRyYXZlcnNhbC52YWx1ZU1hcChhbnRsci5nZW5lcmljVmlzaXRvci5wYXJzZUJvb2xlYW4oY3R4LmJvb2xlYW5MaXRlcmFsKCkpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiBncmFwaFRyYXZlcnNhbC52YWx1ZU1hcCgoYm9vbGVhbikgYW50bHIuZ2VuZXJpY1Zpc2l0b3IudmlzaXRCb29sZWFuTGl0ZXJhbChjdHguYm9vbGVhbkxpdGVyYWwoKSksCiAgICAgICAgICAgICAgICAgICAgIGFudGxyLmdlbmVyaWNWaXNpdG9yLnBhcnNlU3RyaW5nVmFyYXJncyhjdHguc3RyaW5nTnVsbGFibGVMaXRlcmFsVmFyYXJncygpKSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RWaXNpdG9yLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RWaXNpdG9yLmphdmEKaW5kZXggMTJlYzI1OC4uYTU3ZjljZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kVmlzaXRvci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZFZpc2l0b3IuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7Ci0KIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiAvKioKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9Eb3ROZXRUcmFuc2xhdGVWaXNpdG9yLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvRG90TmV0VHJhbnNsYXRlVmlzaXRvci5qYXZhCmluZGV4IDgzMTUxNzcuLjQxZmNhYTQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9Eb3ROZXRUcmFuc2xhdGVWaXNpdG9yLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL0RvdE5ldFRyYW5zbGF0ZVZpc2l0b3IuamF2YQpAQCAtMTksMTAgKzE5LDEyIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UudHJhbnNsYXRvcjsKIAogaW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLnRyZWUuUGFyc2VUcmVlOworaW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLnRyZWUuVGVybWluYWxOb2RlOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmdyYW1tYXIuR3JlbWxpblBhcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5EYXRldGltZUhlbHBlcjsKIAogaW1wb3J0IGphdmEudGltZS5PZmZzZXREYXRlVGltZTsKQEAgLTI5OCw2ICszMDAsOCBAQAogCiAgICAgICAgIGZvciAoaW50IGl4ID0gMTsgaXggPCBjdHguZ2V0Q2hpbGRDb3VudCgpOyBpeCsrKSB7CiAgICAgICAgICAgICBpZiAoY3R4LmdldENoaWxkKGl4KSBpbnN0YW5jZW9mIEdyZW1saW5QYXJzZXIuU3RyaW5nQXJndW1lbnRDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgLy8gbm90ZSByZXZpc2l0IHRyeUFwcGVuZENhc3RUb1N0cmluZygpIG1ldGhvZCBhZnRlciBHVmFsdWUvLk5FVCBpbXBsZW1lbnRhdGlvbiBpbiA0LAorICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSBvbmx5IGN0eC52YXJpYWJsZSgpIG1hdHRlcnMsIChzdHJpbmcpIGlzbid0IG5lZWRlZCBmb3IgY3R4LnN0cmluZ0xpdGVyYWwoKQogICAgICAgICAgICAgICAgIHRyeUFwcGVuZENhc3RUb1N0cmluZygoR3JlbWxpblBhcnNlci5TdHJpbmdBcmd1bWVudENvbnRleHQpIGN0eC5nZXRDaGlsZChpeCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmlzaXQoY3R4LmdldENoaWxkKGl4KSk7CkBAIC0xMjY2LDcgKzEyNzAsNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB0cnlBcHBlbmRDYXN0VG9TdHJpbmcoZmluYWwgR3JlbWxpblBhcnNlci5TdHJpbmdBcmd1bWVudENvbnRleHQgY3R4KSB7Ci0gICAgICAgIGlmIChjdHgudmFyaWFibGUoKSAhPSBudWxsKSB7CisgICAgICAgIGlmIChjdHgudmFyaWFibGUoKSAhPSBudWxsIHx8IGN0eC5zdHJpbmdMaXRlcmFsKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgc2IuYXBwZW5kKCIoc3RyaW5nKSAiKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9Hb1RyYW5zbGF0ZVZpc2l0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9Hb1RyYW5zbGF0ZVZpc2l0b3IuamF2YQppbmRleCA0N2JhZjNmLi4xOGNkZmExIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvR29UcmFuc2xhdGVWaXNpdG9yLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL0dvVHJhbnNsYXRlVmlzaXRvci5qYXZhCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgb3JnLmFudGxyLnY0LnJ1bnRpbWUudHJlZS5UZXJtaW5hbE5vZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hci5HcmVtbGluUGFyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLk9wdGlvbnNTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRGF0ZXRpbWVIZWxwZXI7CkBAIC00MSw3ICs0Miw4IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTGlzdDxTdHJpbmc+IFNUUkFURUdZX1dJVEhfTUFQX09QVFMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KEFycmF5cy5hc0xpc3QoCiAgICAgICAgICAgICAiT3B0aW9uc1N0cmF0ZWd5IiwKICAgICAgICAgICAgICJSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kiLCAiQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSIsICJQcm9maWxlU3RyYXRlZ3kiLAotICAgICAgICAgICAgIkNvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kiLCAiU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSIsICJWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSIpKTsKKyAgICAgICAgICAgICJDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5IiwgIlN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kiLCAiVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kiLAorICAgICAgICAgICAgIk1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kiKSk7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTGlzdDxTdHJpbmc+IFNUUkFURUdZX1dJVEhfU1RSSU5HX1NMSUNFID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChBcnJheXMuYXNMaXN0KAogICAgICAgICAgICAgIlJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5IiwgIlByb2R1Y3RpdmVCeVN0cmF0ZWd5IikpOwogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0ZVZpc2l0b3IuamF2YQppbmRleCAyMDJlOTY5Li4zMzEzOWQwIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdGVWaXNpdG9yLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hbnRsci52NC5ydW50aW1lLlBhcnNlclJ1bGVDb250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hci5HcmVtbGluUGFyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hci5HcmVtbGluUGFyc2VyLkdlbmVyaWNMaXRlcmFsVmFyYXJnc0NvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlVmVydGV4OwogCiAvKioKQEAgLTU1LDE1ICs1NiwxMyBAQAogICAgICAgICBzd2l0Y2ggKGxhc3RDaGFyYWN0ZXIpIHsKICAgICAgICAgICAgIGNhc2UgJ2InOgogICAgICAgICAgICAgICAgIC8vIHBhcnNlIEIvYiBhcyBieXRlCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJuZXcgQnl0ZSgiKTsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIihieXRlKSIpOwogICAgICAgICAgICAgICAgIHNiLmFwcGVuZChpbnRlZ2VyTGl0ZXJhbCwgMCwgbGFzdENoYXJJbmRleCk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIpIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgICAgICAvLyBwYXJzZSBTL3MgYXMgc2hvcnQKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIm5ldyBTaG9ydCgiKTsKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIihzaG9ydCkiKTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoaW50ZWdlckxpdGVyYWwsIDAsIGxhc3RDaGFySW5kZXgpOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiKSIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnbic6CiAgICAgICAgICAgICAgICAgLy8gcGFyc2UgTi9uIGFzIEJpZ0ludGVnZXIgd2hpY2ggZm9yIGdyb292eSBpcyAiZyIgc2hvcnRoYW5kCkBAIC05NSw4ICs5NCwxMyBAQAogICAgICAgICAgICAgICAgIHNiLmFwcGVuZChmbG9hdExpdGVyYWwsIDAsIGxhc3RDaGFySW5kZXgpLmFwcGVuZChsYXN0Q2hhcmFjdGVyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ20nOgotICAgICAgICAgICAgICAgIC8vIHBhcnNlIE4vbiBhcyBCaWdEZWNpbWFsIHdoaWNoIGZvciBncm9vdnkgaXMgImciIHNob3J0aGFuZAotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChmbG9hdExpdGVyYWwsIDAsIGxhc3RDaGFySW5kZXgpLmFwcGVuZCgiZyIpOworICAgICAgICAgICAgICAgIC8vIHBhcnNlIE4vbiBhcyBCaWdEZWNpbWFsIHdoaWNoIGZvciBncm9vdnkgaXMgZGVmYXVsdCBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtZXJpY3MKKyAgICAgICAgICAgICAgICBpZiAoIWZsb2F0TGl0ZXJhbC5jb250YWlucygiLiIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIDFnIGlzIGludGVycHJldGVkIGFzIEJpZ0ludGVnZXIsIHNvICdnJyBzdWZmaXggY2FuJ3QgYmUgdXNlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgibmV3IEJpZ0RlY2ltYWwoIikuYXBwZW5kKGZsb2F0TGl0ZXJhbCwgMCwgbGFzdENoYXJJbmRleCkuYXBwZW5kKCJMKSIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChmbG9hdExpdGVyYWwsIDAsIGxhc3RDaGFySW5kZXgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBlbHNlIGp1c3QgZ29lcyBhcyBzcGVjaWZpZWQKQEAgLTExNiw2ICsxMjAsMTggQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgVm9pZCB2aXNpdFV1aWRMaXRlcmFsKGZpbmFsIEdyZW1saW5QYXJzZXIuVXVpZExpdGVyYWxDb250ZXh0IGN0eCkgeworICAgICAgICBpZiAoY3R4LnN0cmluZ0xpdGVyYWwoKSA9PSBudWxsKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIlVVSUQucmFuZG9tVVVJRCgpIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBzYi5hcHBlbmQoIlVVSUQuZnJvbVN0cmluZygiKTsKKyAgICAgICAgc2IuYXBwZW5kKGN0eC5zdHJpbmdMaXRlcmFsKCkuZ2V0VGV4dCgpKTsKKyAgICAgICAgc2IuYXBwZW5kKCIpIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBWb2lkIHZpc2l0TnVsbExpdGVyYWwoZmluYWwgR3JlbWxpblBhcnNlci5OdWxsTGl0ZXJhbENvbnRleHQgY3R4KSB7CiAgICAgICAgIGlmIChjdHguZ2V0UGFyZW50KCkgaW5zdGFuY2VvZiBHcmVtbGluUGFyc2VyLkdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50Q29udGV4dCkgewogICAgICAgICAgICAgc2IuYXBwZW5kKCJudWxsIGFzIE1hcCIpOwpAQCAtMjA2LDI2ICsyMjIsODAgQEAKICAgICBwcml2YXRlIFZvaWQgaGFuZGxlSW5qZWN0KGZpbmFsIFBhcnNlclJ1bGVDb250ZXh0IGN0eCkgewogICAgICAgICBpZiAoY3R4LmdldENoaWxkQ291bnQoKSA+IDMgJiYgY3R4LmdldENoaWxkKDIpIGluc3RhbmNlb2YgR3JlbWxpblBhcnNlci5HZW5lcmljTGl0ZXJhbFZhcmFyZ3NDb250ZXh0KSB7CiAgICAgICAgICAgICBmaW5hbCBHcmVtbGluUGFyc2VyLkdlbmVyaWNMaXRlcmFsVmFyYXJnc0NvbnRleHQgdmFyQXJncyA9IChHcmVtbGluUGFyc2VyLkdlbmVyaWNMaXRlcmFsVmFyYXJnc0NvbnRleHQpIGN0eC5nZXRDaGlsZCgyKTsKLSAgICAgICAgICAgIGlmICh2YXJBcmdzLmdldENoaWxkQ291bnQoKSA+IDIgJiYgIm51bGwiLmVxdWFscyh2YXJBcmdzLmdldENoaWxkKDIpLmdldFRleHQoKSkpIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJBcmdzLmdldENoaWxkQ291bnQoKTsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiKE9iamVjdCkgbnVsbCIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXQodmFyQXJncy5nZXRDaGlsZChpKSk7CisgICAgICAgICAgICBpZiAodmFyQXJncy5nZXRDaGlsZENvdW50KCkgPT0gMSAmJiB2YXJBcmdzLmdldENoaWxkKDApIGluc3RhbmNlb2YgR3JlbWxpblBhcnNlci5HZW5lcmljTGl0ZXJhbEV4cHJDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgR3JlbWxpblBhcnNlci5HZW5lcmljTGl0ZXJhbEV4cHJDb250ZXh0IGluamVjdEFyZ3MgPSAoR3JlbWxpblBhcnNlci5HZW5lcmljTGl0ZXJhbEV4cHJDb250ZXh0KSB2YXJBcmdzLmdldENoaWxkKDApOworICAgICAgICAgICAgICAgIGlmIChpbmplY3RBcmdzLmdldENoaWxkQ291bnQoKSA+IDIgJiYgIm51bGwiLmVxdWFscyhpbmplY3RBcmdzLmdldENoaWxkKDIpLmdldFRleHQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIigiKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmplY3RBcmdzLmdldENoaWxkQ291bnQoKTsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIoT2JqZWN0KSBudWxsIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0KGluamVjdEFyZ3MuZ2V0Q2hpbGQoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGluamVjdEFyZ3MuZ2V0Q2hpbGRDb3VudCgpIC0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgdmFyQXJncy5nZXRDaGlsZENvdW50KCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIpIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHZpc2l0Q2hpbGRyZW4oY3R4KTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgVm9pZCB2aXNpdFRyYXZlcnNhbE1ldGhvZF9vcHRpb25fTWVyZ2VfTWFwKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsTWV0aG9kX29wdGlvbl9NZXJnZV9NYXBDb250ZXh0IGN0eCl7CisgICAgICAgIHNiLmFwcGVuZCgib3B0aW9uKCIpOworICAgICAgICB2aXNpdChjdHgudHJhdmVyc2FsTWVyZ2UoKSk7CisgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgdHJ5Q2FzdE1hcE51bGxhYmxlQXJndW1lbnQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICBzYi5hcHBlbmQoIikiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZvaWQgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWVyZ2VWX01hcChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbE1ldGhvZF9tZXJnZVZfTWFwQ29udGV4dCBjdHgpeworICAgICAgICBzYi5hcHBlbmQoIm1lcmdlVigiKTsKKyAgICAgICAgdHJ5Q2FzdE1hcE51bGxhYmxlQXJndW1lbnQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICBzYi5hcHBlbmQoIikiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZvaWQgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF9tZXJnZVZfTWFwKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RfbWVyZ2VWX01hcENvbnRleHQgY3R4KXsKKyAgICAgICAgc2IuYXBwZW5kKCJtZXJnZVYoIik7CisgICAgICAgIHRyeUNhc3RNYXBOdWxsYWJsZUFyZ3VtZW50KGN0eC5nZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgc2IuYXBwZW5kKCIpIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBWb2lkIHZpc2l0VHJhdmVyc2FsTWV0aG9kX21lcmdlRV9NYXAoZmluYWwgR3JlbWxpblBhcnNlci5UcmF2ZXJzYWxNZXRob2RfbWVyZ2VFX01hcENvbnRleHQgY3R4KXsKKyAgICAgICAgc2IuYXBwZW5kKCJtZXJnZUUoIik7CisgICAgICAgIHRyeUNhc3RNYXBOdWxsYWJsZUFyZ3VtZW50KGN0eC5nZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgc2IuYXBwZW5kKCIpIik7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBWb2lkIHZpc2l0VHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RfbWVyZ2VFX01hcChmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX21lcmdlRV9NYXBDb250ZXh0IGN0eCl7CisgICAgICAgIHNiLmFwcGVuZCgibWVyZ2VFKCIpOworICAgICAgICB0cnlDYXN0TWFwTnVsbGFibGVBcmd1bWVudChjdHguZ2VuZXJpY01hcE51bGxhYmxlQXJndW1lbnQoKSk7CisgICAgICAgIHNiLmFwcGVuZCgiKSIpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdHJ5Q2FzdE1hcE51bGxhYmxlQXJndW1lbnQoR3JlbWxpblBhcnNlci5HZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudENvbnRleHQgY3R4KSB7CisgICAgICAgIGlmIChjdHguZ2VuZXJpY01hcE51bGxhYmxlTGl0ZXJhbCgpICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiBjdHguZ2VuZXJpY01hcE51bGxhYmxlTGl0ZXJhbCgpLm51bGxMaXRlcmFsKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCIoTWFwKSBudWxsIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2aXNpdChjdHgpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL0phdmFUcmFuc2xhdGVWaXNpdG9yLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YVRyYW5zbGF0ZVZpc2l0b3IuamF2YQppbmRleCBjNGNhMWUwLi5hZWNmN2MyIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YVRyYW5zbGF0ZVZpc2l0b3IuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YVRyYW5zbGF0ZVZpc2l0b3IuamF2YQpAQCAtNjMsNiArNjMsNyBAQAogCiAgICAgICAgICAgICBmaW5hbCBMaXN0PFBhcnNlVHJlZT4gY29uZmlncyA9IGN0eC5jaGlsZHJlbi5zdHJlYW0oKS4KICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGMgLT4gYyBpbnN0YW5jZW9mIEdyZW1saW5QYXJzZXIuQ29uZmlndXJhdGlvbkNvbnRleHQpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisKICAgICAgICAgICAgIGlmIChjb25maWdzLnNpemUoKSA+IDAgJiYgY3R4LmdldENoaWxkKDEpLmdldFRleHQoKS5lcXVhbHMoT3B0aW9uc1N0cmF0ZWd5LmNsYXNzLmdldFNpbXBsZU5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgY29uZmlncy5zaXplKCk7IGl4KyspIHsKICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIud2l0aChcIiIpOwpAQCAtMjM2LDYgKzIzNywxOCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBWb2lkIHZpc2l0VXVpZExpdGVyYWwoZmluYWwgR3JlbWxpblBhcnNlci5VdWlkTGl0ZXJhbENvbnRleHQgY3R4KSB7CisgICAgICAgIGlmIChjdHguc3RyaW5nTGl0ZXJhbCgpID09IG51bGwpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiVVVJRC5yYW5kb21VVUlEKCkiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHNiLmFwcGVuZCgiVVVJRC5mcm9tU3RyaW5nKCIpOworICAgICAgICBzYi5hcHBlbmQoY3R4LnN0cmluZ0xpdGVyYWwoKS5nZXRUZXh0KCkpOworICAgICAgICBzYi5hcHBlbmQoIikiKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFZvaWQgdmlzaXRHZW5lcmljUmFuZ2VMaXRlcmFsKGZpbmFsIEdyZW1saW5QYXJzZXIuR2VuZXJpY1JhbmdlTGl0ZXJhbENvbnRleHQgY3R4KSB7CiAgICAgICAgIHRocm93IG5ldyBUcmFuc2xhdG9yRXhjZXB0aW9uKCJKYXZhIGRvZXMgbm90IHN1cHBvcnQgcmFuZ2UgbGl0ZXJhbHMiKTsKICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvUHl0aG9uVHJhbnNsYXRlVmlzaXRvci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL1B5dGhvblRyYW5zbGF0ZVZpc2l0b3IuamF2YQppbmRleCBhNjI2NDhhLi40NDczYTM4IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvUHl0aG9uVHJhbnNsYXRlVmlzaXRvci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdGVWaXNpdG9yLmphdmEKQEAgLTk0LDI4ICs5NCw2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZvaWQgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTZWxmTWV0aG9kX3dpdGhvdXRTdHJhdGVnaWVzKGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsU291cmNlU2VsZk1ldGhvZF93aXRob3V0U3RyYXRlZ2llc0NvbnRleHQgY3R4KSB7Ci0gICAgICAgIHNiLmFwcGVuZChTeW1ib2xIZWxwZXIudG9QeXRob24oY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpLmFwcGVuZCgiKCpbIik7Ci0gICAgICAgIHZpc2l0KGN0eC5jbGFzc1R5cGUoKSk7Ci0KLSAgICAgICAgaWYgKGN0eC5jbGFzc1R5cGVMaXN0KCkgIT0gbnVsbCAmJiBjdHguY2xhc3NUeXBlTGlzdCgpLmdldENoaWxkQ291bnQoKSA+IDApIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIHZpc2l0KGN0eC5jbGFzc1R5cGVMaXN0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2IuYXBwZW5kKCJdKSIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVm9pZCB2aXNpdENsYXNzVHlwZShmaW5hbCBHcmVtbGluUGFyc2VyLkNsYXNzVHlwZUNvbnRleHQgY3R4KSB7Ci0gICAgICAgIGZpbmFsIE9wdGlvbmFsPD8gZXh0ZW5kcyBDbGFzczw/IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3k+PiBzdHJhdGVneSA9IFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUuZ2V0UmVnaXN0ZXJlZFN0cmF0ZWd5Q2xhc3MoY3R4LmdldFRleHQoKSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBmcWNuID0gc3RyYXRlZ3kubWFwKENsYXNzOjpnZXROYW1lKS5vckVsc2UoY3R4LmdldFRleHQoKSk7Ci0gICAgICAgIHNiLmFwcGVuZCgiR3JlbWxpblR5cGUoJyIpLmFwcGVuZChmcWNuKS5hcHBlbmQoIicpIik7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBWb2lkIHZpc2l0R2VuZXJpY01hcExpdGVyYWwoZmluYWwgR3JlbWxpblBhcnNlci5HZW5lcmljTWFwTGl0ZXJhbENvbnRleHQgY3R4KSB7CiAgICAgICAgIHNiLmFwcGVuZCgieyAiKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgubWFwRW50cnkoKS5zaXplKCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL2NvbXB1dGVyL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1ZlcnRleFByb2dyYW1TdHJhdGVneS5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL2NvbXB1dGVyL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1ZlcnRleFByb2dyYW1TdHJhdGVneS5qYXZhCmluZGV4IGMyNjRmODEuLmQxYjQxNmYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9jb21wdXRlci90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvY29tcHV0ZXIvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LmphdmEKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgICAgICAvLyB3cmFwIGFsbCBub24tVmVydGV4Q29tcHV0aW5nIHN0ZXBzIGludG8gYSBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtU3RlcAogICAgICAgICBjdXJyZW50U3RlcCA9IHRyYXZlcnNhbC5nZXRTdGFydFN0ZXAoKTsKICAgICAgICAgd2hpbGUgKCEoY3VycmVudFN0ZXAgaW5zdGFuY2VvZiBFbXB0eVN0ZXApKSB7Ci0gICAgICAgICAgICBmaW5hbCBUcmF2ZXJzYWwuQWRtaW48PywgPz4gY29tcHV0ZXJUcmF2ZXJzYWwgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbDw+KHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiBjb21wdXRlclRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0VHJhdmVyc2FsPD4odHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkpOwogICAgICAgICAgICAgZmluYWwgU3RlcDw/LCA/PiBmaXJzdExlZ2FsT0xBUFN0ZXAgPSBnZXRGaXJzdExlZ2FsT0xBUFN0ZXAoY3VycmVudFN0ZXApOwogICAgICAgICAgICAgZmluYWwgU3RlcDw/LCA/PiBsYXN0TGVnYWxPTEFQU3RlcCA9IGdldExhc3RMZWdhbE9MQVBTdGVwKGN1cnJlbnRTdGVwKTsKICAgICAgICAgICAgIGlmICghKGZpcnN0TGVnYWxPTEFQU3RlcCBpbnN0YW5jZW9mIEVtcHR5U3RlcCkpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvcmVtb3RlL0VtYmVkZGVkUmVtb3RlQ29ubmVjdGlvbi5qYXZhCmluZGV4IDg5NzFlMmYuLjY0YWE5NTIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9FbWJlZGRlZFJlbW90ZUNvbm5lY3Rpb24uamF2YQpAQCAtMTgsMTYgKzE4LDE1IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZTsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkphdmFUcmFuc2xhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5MYW5nU2NyaXB0RW5naW5lOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkVtYmVkZGVkUmVtb3RlVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLlJlbW90ZVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiAKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogCiAvKioKQEAgLTQxLDcgKzQwLDcgQEAKICAqIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaC50cmF2ZXJzYWwoKTsKICAqCiAgKiAvLyBzZXR1cCB0aGUgcmVtb3RlIGFzIG5vcm1hbCBidXQgZ2l2ZSBpdCB0aGUgZW1iZWRkZWQgImciIHNvIHRoYXQgaXQgZXhlY3V0ZXMgYWdhaW5zdCB0aGF0Ci0gKiBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzaW11bGF0ZWRSZW1vdGVHID0gVHJhdmVyc2FsU291cmNlRmFjdG9yeS50cmF2ZXJzYWwobmV3IEVtYmVkZGVkUmVtb3RlQ29ubmVjdGlvbihnKSk7CisgKiBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzaW11bGF0ZWRSZW1vdGVHID0gdHJhdmVyc2FsKCkud2l0aChuZXcgRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uKGcpKTsKICAqIGFzc2VydEVxdWFscyg2LCBzaW11bGF0ZWRSZW1vdGVHLlYoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKICAqIH0KICAqIDwvcHJlPgpAQCAtNTAsNiArNDksNyBAQAogICovCiBwdWJsaWMgY2xhc3MgRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uIGltcGxlbWVudHMgUmVtb3RlQ29ubmVjdGlvbiB7CiAKKyAgICBwcml2YXRlIGZpbmFsIEdyZW1saW5MYW5nU2NyaXB0RW5naW5lIHNjcmlwdEVuZ2luZSA9IG5ldyBHcmVtbGluTGFuZ1NjcmlwdEVuZ2luZSgpOwogICAgIHByaXZhdGUgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZzsKIAogICAgIHB1YmxpYyBFbWJlZGRlZFJlbW90ZUNvbm5lY3Rpb24oZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZykgewpAQCAtNTcsMTIgKzU3LDE2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxFPiBDb21wbGV0YWJsZUZ1dHVyZTxSZW1vdGVUcmF2ZXJzYWw8PywgRT4+IHN1Ym1pdEFzeW5jKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB0aHJvd3MgUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbiB7CisgICAgcHVibGljIDxFPiBDb21wbGV0YWJsZUZ1dHVyZTxSZW1vdGVUcmF2ZXJzYWw8PywgRT4+IHN1Ym1pdEFzeW5jKGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKSB0aHJvd3MgUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdG8gMy4yLjQgLSB0aGlzIG1ldGhvZCB3aWxsIHByb2JhYmx5IGp1c3QgYmVjb21lCiAgICAgICAgIC8vIHRoZSBuZXcgc3VibWl0KCkgaW4gMy4zLnggd2hlbiB0aGUgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZAogICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxSZW1vdGVUcmF2ZXJzYWw8PywgRT4+IHByb21pc2UgPSBuZXcgQ29tcGxldGFibGVGdXR1cmU8PigpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgcHJvbWlzZS5jb21wbGV0ZShuZXcgRW1iZWRkZWRSZW1vdGVUcmF2ZXJzYWwoSmF2YVRyYW5zbGF0b3Iub2YoZykudHJhbnNsYXRlKGJ5dGVjb2RlKSkpOworICAgICAgICAgICAgZmluYWwgQmluZGluZ3MgYiA9IHNjcmlwdEVuZ2luZS5jcmVhdGVCaW5kaW5ncygpOworICAgICAgICAgICAgYi5wdXRBbGwoZ3JlbWxpbkxhbmcuZ2V0UGFyYW1ldGVycygpKTsKKyAgICAgICAgICAgIGIucHV0KCJnIiwgZyk7CisKKyAgICAgICAgICAgIHByb21pc2UuY29tcGxldGUobmV3IEVtYmVkZGVkUmVtb3RlVHJhdmVyc2FsKChUcmF2ZXJzYWwpc2NyaXB0RW5naW5lLmV2YWwoZ3JlbWxpbkxhbmcuZ2V0R3JlbWxpbigpLCBiKSkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gdCkgewogICAgICAgICAgICAgcHJvbWlzZS5jb21wbGV0ZUV4Y2VwdGlvbmFsbHkodCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvUmVtb3RlQ29ubmVjdGlvbi5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9SZW1vdGVDb25uZWN0aW9uLmphdmEKaW5kZXggYWFhMDVkYS4uMTViZTM2MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9SZW1vdGVDb25uZWN0aW9uLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9SZW1vdGVDb25uZWN0aW9uLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLlJlbW90ZVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVHJhbnNhY3Rpb247CiAKQEAgLTQ5LDExICs0OSwxMSBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFN1Ym1pdHMge0BsaW5rIFRyYXZlcnNhbH0ge0BsaW5rIEJ5dGVjb2RlfSB0byBhIHNlcnZlciBhbmQgcmV0dXJucyBhIHByb21pc2Ugb2YgYSB7QGxpbmsgUmVtb3RlVHJhdmVyc2FsfS4KKyAgICAgKiBTdWJtaXRzIHtAbGluayBUcmF2ZXJzYWx9IHtAbGluayBHcmVtbGluTGFuZ30gdG8gYSBzZXJ2ZXIgYW5kIHJldHVybnMgYSBwcm9taXNlIG9mIGEge0BsaW5rIFJlbW90ZVRyYXZlcnNhbH0uCiAgICAgICogVGhlIHtAbGluayBSZW1vdGVUcmF2ZXJzYWx9IGlzIGFuIGFic3RyYWN0aW9uIG92ZXIgdHdvIHR5cGVzIG9mIHJlc3VsdHMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgYXMgcGFydCBvZiB0aGUKICAgICAgKiByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXI6IHRoZSByZXN1bHRzIG9mIHRoZSB7QGxpbmsgVHJhdmVyc2FsfSBpdHNlbGYgYW5kIHRoZSBzaWRlLWVmZmVjdHMgdGhhdCBpdCBwcm9kdWNlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgPEU+IENvbXBsZXRhYmxlRnV0dXJlPFJlbW90ZVRyYXZlcnNhbDw/LCBFPj4gc3VibWl0QXN5bmMoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpIHRocm93cyBSZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uOworICAgIHB1YmxpYyA8RT4gQ29tcGxldGFibGVGdXR1cmU8UmVtb3RlVHJhdmVyc2FsPD8sIEU+PiBzdWJtaXRBc3luYyhmaW5hbCBHcmVtbGluTGFuZyBncmVtbGluTGFuZykgdGhyb3dzIFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBDcmVhdGUgYSB7QGxpbmsgUmVtb3RlQ29ubmVjdGlvbn0gZnJvbSBhIHtAY29kZSBDb25maWd1cmF0aW9ufSBvYmplY3QuIFRoZSBjb25maWd1cmF0aW9uIG11c3QgY29udGFpbiBhCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvcmVtb3RlL3RyYXZlcnNhbC9BYnN0cmFjdFJlbW90ZVRyYXZlcnNhbC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS90cmF2ZXJzYWwvQWJzdHJhY3RSZW1vdGVUcmF2ZXJzYWwuamF2YQppbmRleCAxYjYzNzFhLi4wNGE5OTJmIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvcmVtb3RlL3RyYXZlcnNhbC9BYnN0cmFjdFJlbW90ZVRyYXZlcnNhbC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvdHJhdmVyc2FsL0Fic3RyYWN0UmVtb3RlVHJhdmVyc2FsLmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS50cmF2ZXJzYWw7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5zdGVwLm1hcC5SZW1vdGVTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdWYWx1ZU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwpAQCAtNTksNyArNTksNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlY29kZSBnZXRCeXRlY29kZSgpIHsKKyAgICBwdWJsaWMgR3JlbWxpbkxhbmcgZ2V0R3JlbWxpbkxhbmcoKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVtb3RlIHRyYXZlcnNhbHMgZG8gbm90IHN1cHBvcnQgdGhpcyBtZXRob2QiKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvdHJhdmVyc2FsL1JlbW90ZVRyYXZlcnNhbC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS90cmF2ZXJzYWwvUmVtb3RlVHJhdmVyc2FsLmphdmEKaW5kZXggMzgwNWQ3NS4uNGJkMmI1MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS90cmF2ZXJzYWwvUmVtb3RlVHJhdmVyc2FsLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS90cmF2ZXJzYWwvUmVtb3RlVHJhdmVyc2FsLmphdmEKQEAgLTIwLDEyICsyMCwxMiBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLnN0ZXAubWFwLlJlbW90ZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkFic3RyYWN0U3RlcDsKIAogLyoqCi0gKiBBIHtAbGluayBSZW1vdGVUcmF2ZXJzYWx9IGlzIHJldHVybmVkIGZyb20ge0BsaW5rIFJlbW90ZUNvbm5lY3Rpb24jc3VibWl0QXN5bmMoQnl0ZWNvZGUpfS4gSXQgaXMgaXRlcmF0ZWQgZnJvbQorICogQSB7QGxpbmsgUmVtb3RlVHJhdmVyc2FsfSBpcyByZXR1cm5lZCBmcm9tIHtAbGluayBSZW1vdGVDb25uZWN0aW9uI3N1Ym1pdEFzeW5jKEdyZW1saW5MYW5nKX0uIEl0IGlzIGl0ZXJhdGVkIGZyb20KICAqIHdpdGhpbiB7QGxpbmsgUmVtb3RlU3RlcH0gdXNpbmcge0BsaW5rICNuZXh0VHJhdmVyc2VyKCl9LiBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHR5cGljYWxseSBiZSBnaXZlbiBhICJyZXN1bHQiIGZyb20KICAqIGEgcmVtb3RlIHNvdXJjZSB3aGVyZSB0aGUgdHJhdmVyc2FsIHdhcyBleGVjdXRlZC4gVGhlICJyZXN1bHQiIHNob3VsZCBiZSBhbiBpdGVyYXRvciB3aGljaCBwcmVmZXJhYmx5IGhhcyBpdHMgZGF0YQogICogYnVsa2VkLgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS90cmF2ZXJzYWwvc3RlcC9tYXAvUmVtb3RlU3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS90cmF2ZXJzYWwvc3RlcC9tYXAvUmVtb3RlU3RlcC5qYXZhCmluZGV4IDVmOWU5ZTYuLmVhNzVhMDcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvdHJhdmVyc2FsL3N0ZXAvbWFwL1JlbW90ZVN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvcmVtb3RlL3RyYXZlcnNhbC9zdGVwL21hcC9SZW1vdGVTdGVwLmphdmEKQEAgLTIxLDE5ICsyMSwxNSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUuUmVtb3RlQ29ubmVjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLlJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS50cmF2ZXJzYWwuUmVtb3RlVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5BYnN0cmFjdFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkJ5dGVjb2RlSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuU3RyaW5nRmFjdG9yeTsKIAogaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW47CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY1JlZmVyZW5jZTsKIAogLyoqCkBAIC04MSwxMiArNzcsMTIgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTdWJtaXRzIHRoZSB0cmF2ZXJzYWwgYXN5bmNocm9ub3VzbHkgdG8gYSAicmVtb3RlIiB1c2luZyB7QGxpbmsgUmVtb3RlQ29ubmVjdGlvbiNzdWJtaXRBc3luYyhCeXRlY29kZSl9LgorICAgICAqIFN1Ym1pdHMgdGhlIHRyYXZlcnNhbCBhc3luY2hyb25vdXNseSB0byBhICJyZW1vdGUiIHVzaW5nIHtAbGluayBSZW1vdGVDb25uZWN0aW9uI3N1Ym1pdEFzeW5jKEdyZW1saW5MYW5nKX0uCiAgICAgICovCiAgICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPFRyYXZlcnNhbDw/LCBFPj4gcHJvbWlzZSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmIChudWxsID09IHRyYXZlcnNhbEZ1dHVyZS5nZXQoKSkgewotICAgICAgICAgICAgICAgIHRyYXZlcnNhbEZ1dHVyZS5zZXQodGhpcy5yZW1vdGVDb25uZWN0aW9uLnN1Ym1pdEFzeW5jKHRoaXMudHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpLjxUcmF2ZXJzYWw8PywgRT4+dGhlbkFwcGx5KHQgLT4geworICAgICAgICAgICAgICAgIHRyYXZlcnNhbEZ1dHVyZS5zZXQodGhpcy5yZW1vdGVDb25uZWN0aW9uLnN1Ym1pdEFzeW5jKHRoaXMudHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkpLjxUcmF2ZXJzYWw8PywgRT4+dGhlbkFwcGx5KHQgLT4gewogICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZVRyYXZlcnNhbCA9IChSZW1vdGVUcmF2ZXJzYWw8PywgRT4pIHQ7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgICAgICAgICAgfSkpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLmphdmEKaW5kZXggYjQ5OWJjMS4uNGUwOGI3MSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0Fub255bW91c1RyYXZlcnNhbFNvdXJjZS5qYXZhCkBAIC0xMzQsNyArMTM0LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgVCB3aXRoKGZpbmFsIFN0cmluZyBjb25maWdGaWxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbnMgY29uZmlncyA9IG5ldyBDb25maWd1cmF0aW9ucygpOwotICAgICAgICByZXR1cm4gd2l0aChjb25maWdzLnByb3BlcnRpZXMoKGNvbmZpZ0ZpbGUpKSk7CisgICAgICAgIHJldHVybiB3aXRoKGNvbmZpZ3MucHJvcGVydGllcyhjb25maWdGaWxlKSk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0JpbmRpbmdzLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0JpbmRpbmdzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwZjVmMjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9CaW5kaW5ncy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEJpbmRpbmdzIGFyZSB1c2VkIHRvIGFzc29jaWF0ZSBhIHZhcmlhYmxlIHdpdGggYSB2YWx1ZS4gVGhleSBlbmFibGUgdGhlIGNyZWF0aW9uIG9mIHtAbGluayBCeXRlY29kZS5CaW5kaW5nfQotICogYXJndW1lbnRzIGluIHtAbGluayBCeXRlY29kZX0uIFVzZSB0aGUgQmluZGluZ3MgaW5zdGFuY2Ugd2hlbiBkZWZpbmluZyBhIGJpbmRpbmcgdmlhIHtAbGluayBCaW5kaW5ncyNvZihTdHJpbmcsIE9iamVjdCl9LgotICogRm9yIGluc3RhbmNlOgotICogPHA+Ci0gKiA8Y29kZT4KLSAqIGIgPSBCaW5kaW5ncy5pbnN0YW5jZSgpCi0gKiBnID0gZ3JhcGgudHJhdmVyc2FsKCkKLSAqIGcuVigpLm91dChiLm9mKCJhIiwia25vd3MiKSkKLSAqIC8vIGJpbmRpbmdzIGNhbiBiZSByZXVzZWQgb3ZlciBhbmQgb3ZlcgotICogZy5WKCkub3V0KCJrbm93cyIpLmluKGIub2YoImEiLCJjcmVhdGVkIikpCi0gKiA8L2NvZGU+Ci0gKiA8L3A+Ci0gKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBCaW5kaW5ncyB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCaW5kaW5ncyBJTlNUQU5DRSA9IG5ldyBCaW5kaW5ncygpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRocmVhZExvY2FsPE1hcDxPYmplY3QsIFN0cmluZz4+IE1BUCA9IG5ldyBUaHJlYWRMb2NhbDw+KCk7Ci0KLSAgICBwcml2YXRlIEJpbmRpbmdzKCkge30KLQotICAgIHB1YmxpYyA8Vj4gViBvZihmaW5hbCBTdHJpbmcgdmFyaWFibGUsIGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgTWFwPE9iamVjdCwgU3RyaW5nPiBtYXAgPSBNQVAuZ2V0KCk7Ci0gICAgICAgIGlmIChudWxsID09IG1hcCkgewotICAgICAgICAgICAgbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgTUFQLnNldChtYXApOwotICAgICAgICB9Ci0gICAgICAgIG1hcC5wdXQodmFsdWUsIHZhcmlhYmxlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgPFY+IFN0cmluZyBnZXRCb3VuZFZhcmlhYmxlKGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgU3RyaW5nPiBtYXAgPSBNQVAuZ2V0KCk7Ci0KLSAgICAgICAgLy8gb25jZSByZXRyaWV2ZWQgYnkgYnl0ZWNvZGUsIHRoZSBiaW5kaW5nIHNob3VsZCBiZSByZW1vdmVkLiBhbGwgdGhpcyBzaG91bGQgb2NjdXIgZHVyaW5nIHRoZSBhZGRTdGVwKCkKLSAgICAgICAgLy8gYW5kIHJlbGF0ZWQgYnl0ZWNvZGUgY29uc3RydWN0aW9uLiB1c2luZyByZW1vdmUoKSBzb2x2ZXMgdGhlIHByb2JsZW0gb2YgVElOS0VSUE9QLTI0NTgKLSAgICAgICAgcmV0dXJuIG51bGwgPT0gbWFwID8gbnVsbCA6IG1hcC5yZW1vdmUodmFsdWUpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBjbGVhcigpIHsKLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgU3RyaW5nPiBtYXAgPSBNQVAuZ2V0KCk7Ci0gICAgICAgIGlmIChudWxsICE9IG1hcCkKLSAgICAgICAgICAgIG1hcC5jbGVhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQmluZGluZ3MgaW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiBJTlNUQU5DRTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gImJpbmRpbmdzWyIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArICJdIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0J5dGVjb2RlLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0J5dGVjb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNjk2ZDIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9CeXRlY29kZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LlRyYXZlcnNhbFN0cmF0ZWd5UHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkJ5dGVjb2RlSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuU3RyaW5nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLQotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogV2hlbiBhIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IGlzIG1hbmlwdWxhdGVkIGFuZCB0aGVuIGEge0BsaW5rIFRyYXZlcnNhbH0gaXMgc3Bhd25lZCBhbmQgbXV0YXRlZCwgYSBsYW5ndWFnZQotICogYWdub3N0aWMgcmVwcmVzZW50YXRpb24gb2YgdGhvc2UgbXV0YXRpb25zIGlzIHJlY29yZGVkIGluIGEgYnl0ZWNvZGUgaW5zdGFuY2UuIEJ5dGVjb2RlIGlzIHNpbXBseSBhIGxpc3QKLSAqIG9mIG9yZGVyZWQgaW5zdHJ1Y3Rpb25zIHdoZXJlIGFuIGluc3RydWN0aW9uIGlzIGEgc3RyaW5nIG9wZXJhdG9yIGFuZCBhIChmbGF0dGVuZWQpIGFycmF5IG9mIGFyZ3VtZW50cy4KLSAqIEJ5dGVjb2RlIGlzIHVzZWQgYnkge0BsaW5rIFRyYW5zbGF0b3J9IGluc3RhbmNlcyB3aGljaCBhcmUgYWJsZSB0byB0cmFuc2xhdGUgYSB0cmF2ZXJzYWwgaW4gb25lIGxhbmd1YWdlIHRvIGFub3RoZXIKLSAqIGJ5IGFuYWx5emluZyB0aGUgYnl0ZWNvZGUgYXMgb3Bwb3NlZCB0byB0aGUgSmF2YSB0cmF2ZXJzYWwgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9uIGhlYXAuCi0gKiA8cD4KLSAqIEJ5dGVjb2RlIGNhbiBiZSBzZXJpYWxpemVkIGJldHdlZW4gZW52aXJvbm1lbnRzIGFuZCBtYWNoaW5lcyBieSB3YXkgb2YgYSBHcmFwaFNPTiByZXByZXNlbnRhdGlvbi4KLSAqIFRodXMsIEdyZW1saW4tUHl0aG9uIGNhbiBjcmVhdGUgYnl0ZWNvZGUgaW4gUHl0aG9uIGFuZCBzaGlwIGl0IHRvIEdyZW1saW4tSmF2YSBmb3IgZXZhbHVhdGlvbiBpbiBKYXZhLgotICoKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1wdWJsaWMgY2xhc3MgQnl0ZWNvZGUgaW1wbGVtZW50cyBDbG9uZWFibGUsIFNlcmlhbGl6YWJsZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBFTVBUWV9BUlJBWSA9IG5ldyBPYmplY3RbXXt9OwotCi0gICAgcHJpdmF0ZSBMaXN0PEluc3RydWN0aW9uPiBzb3VyY2VJbnN0cnVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICBwcml2YXRlIExpc3Q8SW5zdHJ1Y3Rpb24+IHN0ZXBJbnN0cnVjdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAgIHB1YmxpYyBCeXRlY29kZSgpIHt9Ci0KLSAgICBwdWJsaWMgQnl0ZWNvZGUoZmluYWwgU3RyaW5nIHNvdXJjZU5hbWUsIGZpbmFsIE9iamVjdC4uLiBhcmd1bWVudHMpIHsKLSAgICAgICAgdGhpcy5zb3VyY2VJbnN0cnVjdGlvbnMuYWRkKG5ldyBJbnN0cnVjdGlvbihzb3VyY2VOYW1lLCBmbGF0dGVuQXJndW1lbnRzKGFyZ3VtZW50cykpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGQgYSB7QGxpbmsgVHJhdmVyc2FsU291cmNlfSBpbnN0cnVjdGlvbiB0byB0aGUgYnl0ZWNvZGUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc291cmNlTmFtZSB0aGUgdHJhdmVyc2FsIHNvdXJjZSBtZXRob2QgbmFtZSAoZS5nLiB3aXRoU2FjaygpKQotICAgICAqIEBwYXJhbSBhcmd1bWVudHMgIHRoZSB0cmF2ZXJzYWwgc291cmNlIG1ldGhvZCBhcmd1bWVudHMKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRTb3VyY2UoZmluYWwgU3RyaW5nIHNvdXJjZU5hbWUsIGZpbmFsIE9iamVjdC4uLiBhcmd1bWVudHMpIHsKLSAgICAgICAgaWYgKHNvdXJjZU5hbWUuZXF1YWxzKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhvdXRTdHJhdGVnaWVzKSkgewotICAgICAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRoaXMuc291cmNlSW5zdHJ1Y3Rpb25zLmFkZChuZXcgSW5zdHJ1Y3Rpb24oc291cmNlTmFtZSwgbnVsbCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQ2xhc3M8VHJhdmVyc2FsU3RyYXRlZ3k+W10gY2xhc3NlcyA9IG5ldyBDbGFzc1thcmd1bWVudHMubGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBjbGFzc2VzW2ldID0gYXJndW1lbnRzW2ldIGluc3RhbmNlb2YgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSBhcmd1bWVudHNbaV0pLmdldFN0cmF0ZWd5Q2xhc3MoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKENsYXNzKSBhcmd1bWVudHNbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGVtIGZpcnN0IHRvIGF2b2lkIGR1cGxpY2F0aW5nIGluZm9ybWF0aW9uLCB3ZSB3aWxsIGFkZCB0aGVtIGJlbG93Ci0gICAgICAgICAgICAgICAgQnl0ZWNvZGVIZWxwZXIucmVtb3ZlU3RyYXRlZ2llcyh0aGlzLCBUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRob3V0U3RyYXRlZ2llcywgY2xhc3Nlcyk7Ci0gICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VJbnN0cnVjdGlvbnMuYWRkKG5ldyBJbnN0cnVjdGlvbihzb3VyY2VOYW1lLCBjbGFzc2VzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFN0cmF0ZWdpZXMuZXF1YWxzKHNvdXJjZU5hbWUpKSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGFzczxUcmF2ZXJzYWxTdHJhdGVneT5bXSBjbGFzc2VzID0gbmV3IENsYXNzW2FyZ3VtZW50cy5sZW5ndGhdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIShhcmd1bWVudHNbaV0gaW5zdGFuY2VvZiBUcmF2ZXJzYWxTdHJhdGVneSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGFyZ3VtZW50ICIgKyBhcmd1bWVudHNbaV0gKyAiIGlzIG5vdCBhIFRyYXZlcnNhbFN0cmF0ZWd5Iik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2xhc3Nlc1tpXSA9IGFyZ3VtZW50c1tpXSBpbnN0YW5jZW9mIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkgPwotICAgICAgICAgICAgICAgICAgICAgICAgKChUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSBhcmd1bWVudHNbaV0pLmdldFN0cmF0ZWd5Q2xhc3MoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAoQ2xhc3MpIGFyZ3VtZW50c1tpXS5nZXRDbGFzcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQnl0ZWNvZGVIZWxwZXIucmVtb3ZlU3RyYXRlZ2llcyh0aGlzLCBUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU3RyYXRlZ2llcywgY2xhc3Nlcyk7Ci0gICAgICAgICAgICB0aGlzLnNvdXJjZUluc3RydWN0aW9ucy5hZGQobmV3IEluc3RydWN0aW9uKHNvdXJjZU5hbWUsIGZsYXR0ZW5Bcmd1bWVudHMoYXJndW1lbnRzKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5zb3VyY2VJbnN0cnVjdGlvbnMuYWRkKG5ldyBJbnN0cnVjdGlvbihzb3VyY2VOYW1lLCBmbGF0dGVuQXJndW1lbnRzKGFyZ3VtZW50cykpKTsKLSAgICAgICAgfQotICAgICAgICBCaW5kaW5ncy5jbGVhcigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZCBhIHtAbGluayBUcmF2ZXJzYWx9IGluc3RydWN0aW9uIHRvIHRoZSBieXRlY29kZS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdGVwTmFtZSAgdGhlIHRyYXZlcnNhbCBtZXRob2QgbmFtZSAoZS5nLiBvdXQoKSkKLSAgICAgKiBAcGFyYW0gYXJndW1lbnRzIHRoZSB0cmF2ZXJzYWwgbWV0aG9kIGFyZ3VtZW50cwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZFN0ZXAoZmluYWwgU3RyaW5nIHN0ZXBOYW1lLCBmaW5hbCBPYmplY3QuLi4gYXJndW1lbnRzKSB7Ci0gICAgICAgIHRoaXMuc3RlcEluc3RydWN0aW9ucy5hZGQobmV3IEluc3RydWN0aW9uKHN0ZXBOYW1lLCBmbGF0dGVuQXJndW1lbnRzKGFyZ3VtZW50cykpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IGluc3RydWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBieXRlY29kZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gYW4gaXRlcmFibGUgb2YgaW5zdHJ1Y3Rpb25zCi0gICAgICovCi0gICAgcHVibGljIExpc3Q8SW5zdHJ1Y3Rpb24+IGdldFNvdXJjZUluc3RydWN0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSW5zdHJ1Y3Rpb25zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUge0BsaW5rIFRyYXZlcnNhbH0gaW5zdHJ1Y3Rpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJ5dGVjb2RlLgotICAgICAqCi0gICAgICogQHJldHVybiBhbiBpdGVyYWJsZSBvZiBpbnN0cnVjdGlvbnMKLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxJbnN0cnVjdGlvbj4gZ2V0U3RlcEluc3RydWN0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc3RlcEluc3RydWN0aW9uczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYm90aCB0aGUge0BsaW5rIFRyYXZlcnNhbFNvdXJjZX0gYW5kIHtAbGluayBUcmF2ZXJzYWx9IGluc3RydWN0aW9ucyBvZiB0aGlzIGJ5dGVjb2RlLgotICAgICAqIFRoZSB0cmF2ZXJzYWwgc291cmNlIGluc3RydWN0aW9ucyBhcmUgcHJvdmlkZWQgcHJpb3IgdG8gdGhlIHRyYXZlcnNhbCBpbnN0cnVjdGlvbnMuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGFuIGludGVyYWJsZSBvZiBhbGwgdGhlIGluc3RydWN0aW9ucyBpbiB0aGlzIGJ5dGVjb2RlCi0gICAgICovCi0gICAgcHVibGljIEl0ZXJhYmxlPEluc3RydWN0aW9uPiBnZXRJbnN0cnVjdGlvbnMoKSB7Ci0gICAgICAgIHJldHVybiAoKSAtPiBJdGVyYXRvclV0aWxzLmNvbmNhdCh0aGlzLnNvdXJjZUluc3RydWN0aW9ucy5pdGVyYXRvcigpLCB0aGlzLnN0ZXBJbnN0cnVjdGlvbnMuaXRlcmF0b3IoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGFsbCB0aGUgYmluZGluZ3MgKGluIGEgbmVzdGVkLCByZWN1cnNpdmUgbWFubmVyKSBmcm9tIGFsbCB0aGUgYXJndW1lbnRzIG9mIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zIG9mIHRoaXMgYnl0ZWNvZGUuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIGEgbWFwIG9mIHN0cmluZyB2YXJpYWJsZSBhbmQgb2JqZWN0IHZhbHVlIGJpbmRpbmdzCi0gICAgICovCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QmluZGluZ3MoKSB7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3NNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZvciAoZmluYWwgSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiB0aGlzLnNvdXJjZUluc3RydWN0aW9ucykgewotICAgICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgYXJndW1lbnQgOiBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50QmluZGluZyhiaW5kaW5nc01hcCwgYXJndW1lbnQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoZmluYWwgSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiB0aGlzLnN0ZXBJbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGFyZ3VtZW50IDogaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRBcmd1bWVudEJpbmRpbmcoYmluZGluZ3NNYXAsIGFyZ3VtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYmluZGluZ3NNYXA7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlSW5zdHJ1Y3Rpb25zLmlzRW1wdHkoKSAmJiB0aGlzLnN0ZXBJbnN0cnVjdGlvbnMuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgYWRkQXJndW1lbnRCaW5kaW5nKGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3NNYXAsIGZpbmFsIE9iamVjdCBhcmd1bWVudCkgewotICAgICAgICBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBCaW5kaW5nKQotICAgICAgICAgICAgYmluZGluZ3NNYXAucHV0KCgoQmluZGluZykgYXJndW1lbnQpLmtleSwgKChCaW5kaW5nKSBhcmd1bWVudCkudmFsdWUpOwotICAgICAgICBlbHNlIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIE1hcCkgewotICAgICAgICAgICAgZm9yIChmaW5hbCBNYXAuRW50cnk8PywgPz4gZW50cnkgOiAoKE1hcDw/LCA/PikgYXJndW1lbnQpLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhZGRBcmd1bWVudEJpbmRpbmcoYmluZGluZ3NNYXAsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgICAgICAgICBhZGRBcmd1bWVudEJpbmRpbmcoYmluZGluZ3NNYXAsIGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgQ29sbGVjdGlvbikgewotICAgICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgaXRlbSA6IChDb2xsZWN0aW9uKSBhcmd1bWVudCkgewotICAgICAgICAgICAgICAgIGFkZEFyZ3VtZW50QmluZGluZyhiaW5kaW5nc01hcCwgaXRlbSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBCeXRlY29kZSkKLSAgICAgICAgICAgIGJpbmRpbmdzTWFwLnB1dEFsbCgoKEJ5dGVjb2RlKSBhcmd1bWVudCkuZ2V0QmluZGluZ3MoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QodGhpcy5zb3VyY2VJbnN0cnVjdGlvbnMsIHRoaXMuc3RlcEluc3RydWN0aW9ucykudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gbykgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSAoQnl0ZWNvZGUpIG87Ci0gICAgICAgIHJldHVybiBPYmplY3RzLmVxdWFscyhzb3VyY2VJbnN0cnVjdGlvbnMsIGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucykgJiYKLSAgICAgICAgICAgICAgICBPYmplY3RzLmVxdWFscyhzdGVwSW5zdHJ1Y3Rpb25zLCBieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gT2JqZWN0cy5oYXNoKHNvdXJjZUluc3RydWN0aW9ucywgc3RlcEluc3RydWN0aW9ucyk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoIkNsb25lRG9lc250RGVjbGFyZUNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnl0ZWNvZGUgY2xvbmUoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZSBjbG9uZSA9IChCeXRlY29kZSkgc3VwZXIuY2xvbmUoKTsKLSAgICAgICAgICAgIGNsb25lLnNvdXJjZUluc3RydWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8Pih0aGlzLnNvdXJjZUluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBjbG9uZS5zdGVwSW5zdHJ1Y3Rpb25zID0gbmV3IEFycmF5TGlzdDw+KHRoaXMuc3RlcEluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gY2xvbmU7Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbnN0cnVjdGlvbiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgb3BlcmF0b3I7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgT2JqZWN0W10gYXJndW1lbnRzOwotCi0gICAgICAgIHByaXZhdGUgSW5zdHJ1Y3Rpb24oZmluYWwgU3RyaW5nIG9wZXJhdG9yLCBmaW5hbCBPYmplY3QuLi4gYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7Ci0gICAgICAgICAgICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0T3BlcmF0b3IoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5vcGVyYXRvcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBPYmplY3RbXSBnZXRBcmd1bWVudHMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5hcmd1bWVudHM7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm9wZXJhdG9yICsgIigiICsgU3RyaW5nRmFjdG9yeS5yZW1vdmVFbmRCcmFja2V0cyhBcnJheXMuYXNMaXN0KHRoaXMuYXJndW1lbnRzKSkgKyAiKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEluc3RydWN0aW9uIHRoYXQgPSAoSW5zdHJ1Y3Rpb24pIG87Ci0gICAgICAgICAgICByZXR1cm4gT2JqZWN0cy5lcXVhbHMob3BlcmF0b3IsIHRoYXQub3BlcmF0b3IpICYmCi0gICAgICAgICAgICAgICAgICAgIEFycmF5cy5lcXVhbHMoYXJndW1lbnRzLCB0aGF0LmFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSBPYmplY3RzLmhhc2gob3BlcmF0b3IpOwotICAgICAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBBcnJheXMuaGFzaENvZGUoYXJndW1lbnRzKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJpbmRpbmc8Vj4gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGtleTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBWIHZhbHVlOwotCi0gICAgICAgIHB1YmxpYyBCaW5kaW5nKGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgICAgIHRoaXMua2V5ID0ga2V5OwotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyB2YXJpYWJsZSgpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmtleTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBWIHZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiAiYmluZGluZ1siICsgdGhpcy5rZXkgKyAiPSIgKyB0aGlzLnZhbHVlICsgIl0iOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgICAgICAgICAgaWYgKHRoaXMgPT0gbykgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAobyA9PSBudWxsIHx8IGdldENsYXNzKCkgIT0gby5nZXRDbGFzcygpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBCaW5kaW5nPD8+IGJpbmRpbmcgPSAoQmluZGluZzw/PikgbzsKLSAgICAgICAgICAgIHJldHVybiBPYmplY3RzLmVxdWFscyhrZXksIGJpbmRpbmcua2V5KSAmJgotICAgICAgICAgICAgICAgICAgICBPYmplY3RzLmVxdWFscyh2YWx1ZSwgYmluZGluZy52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBPYmplY3RzLmhhc2goa2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8vLwotCi0gICAgcHJpdmF0ZSBPYmplY3RbXSBmbGF0dGVuQXJndW1lbnRzKGZpbmFsIE9iamVjdC4uLiBhcmd1bWVudHMpIHsKLSAgICAgICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsIHx8IGFyZ3VtZW50cy5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWV9BUlJBWTsKLSAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGZsYXRBcmd1bWVudHMgPSBuZXcgQXJyYXlMaXN0PD4oYXJndW1lbnRzLmxlbmd0aCk7Ci0gICAgICAgIGZvciAoZmluYWwgT2JqZWN0IG9iamVjdCA6IGFyZ3VtZW50cykgewotICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdFtdKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgbmVzdE9iamVjdCA6IChPYmplY3RbXSkgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsYXRBcmd1bWVudHMuYWRkKGNvbnZlcnRBcmd1bWVudChuZXN0T2JqZWN0LCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZmxhdEFyZ3VtZW50cy5hZGQoY29udmVydEFyZ3VtZW50KG9iamVjdCwgdHJ1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmbGF0QXJndW1lbnRzLnRvQXJyYXkoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE9iamVjdCBjb252ZXJ0QXJndW1lbnQoZmluYWwgT2JqZWN0IGFyZ3VtZW50LCBmaW5hbCBib29sZWFuIHNlYXJjaEJpbmRpbmdzKSB7Ci0gICAgICAgIGlmIChzZWFyY2hCaW5kaW5ncykgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHZhcmlhYmxlID0gQmluZGluZ3MuZ2V0Qm91bmRWYXJpYWJsZShhcmd1bWVudCk7Ci0gICAgICAgICAgICBpZiAobnVsbCAhPSB2YXJpYWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmc8Pih2YXJpYWJsZSwgY29udmVydEFyZ3VtZW50KGFyZ3VtZW50LCBmYWxzZSkpOwotICAgICAgICB9Ci0gICAgICAgIC8vCi0gICAgICAgIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIFRyYXZlcnNhbCkgewotICAgICAgICAgICAgLy8gcHJldmVudCB1c2Ugb2YgImciIHRvIHNwYXduIGNoaWxkIHRyYXZlcnNhbHMKLSAgICAgICAgICAgIGlmICgoKFRyYXZlcnNhbCkgYXJndW1lbnQpLmFzQWRtaW4oKS5nZXRUcmF2ZXJzYWxTb3VyY2UoKS5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhlIGNoaWxkIHRyYXZlcnNhbCBvZiAlcyB3YXMgbm90IHNwYXduZWQgYW5vbnltb3VzbHkgLSB1c2UgdGhlIF9fIGNsYXNzIHJhdGhlciB0aGFuIGEgVHJhdmVyc2FsU291cmNlIHRvIGNvbnN0cnVjdCB0aGUgY2hpbGQgdHJhdmVyc2FsIiwgYXJndW1lbnQpKTsKLQotICAgICAgICAgICAgcmV0dXJuICgoVHJhdmVyc2FsKSBhcmd1bWVudCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBNYXApIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gbWFwID0gbmV3IExpbmtlZEhhc2hNYXA8PigoKE1hcCkgYXJndW1lbnQpLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTw/LCA/PiBlbnRyeSA6ICgoTWFwPD8sID8+KSBhcmd1bWVudCkuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgICAgIG1hcC5wdXQoY29udmVydEFyZ3VtZW50KGVudHJ5LmdldEtleSgpLCB0cnVlKSwgY29udmVydEFyZ3VtZW50KGVudHJ5LmdldFZhbHVlKCksIHRydWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXA7Ci0gICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnQgaW5zdGFuY2VvZiBMaXN0KSB7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigoKExpc3QpIGFyZ3VtZW50KS5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgaXRlbSA6IChMaXN0KSBhcmd1bWVudCkgewotICAgICAgICAgICAgICAgIGxpc3QuYWRkKGNvbnZlcnRBcmd1bWVudChpdGVtLCB0cnVlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIFNldCkgewotICAgICAgICAgICAgZmluYWwgU2V0PE9iamVjdD4gc2V0ID0gbmV3IExpbmtlZEhhc2hTZXQ8PigoKFNldCkgYXJndW1lbnQpLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBpdGVtIDogKFNldCkgYXJndW1lbnQpIHsKLSAgICAgICAgICAgICAgICBzZXQuYWRkKGNvbnZlcnRBcmd1bWVudChpdGVtLCB0cnVlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2V0OwotICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgR1ZhbHVlKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFyaWFibGUgPSAoKEdWYWx1ZTw/PikgYXJndW1lbnQpLmdldE5hbWUoKTsKLSAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSA9ICgoR1ZhbHVlPD8+KSBhcmd1bWVudCkuZ2V0KCk7Ci0gICAgICAgICAgICByZXR1cm4gdmFyaWFibGUgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnRBcmd1bWVudCh2YWx1ZSwgc2VhcmNoQmluZGluZ3MpCi0gICAgICAgICAgICAgICAgICAgIDogbmV3IEJpbmRpbmc8Pih2YXJpYWJsZSwgY29udmVydEFyZ3VtZW50KHZhbHVlLCBmYWxzZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0NvbXBhcmVUeXBlLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0NvbXBhcmVUeXBlLmphdmEKaW5kZXggNjA2NzgxOC4uMjE0MzY3MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9Db21wYXJlVHlwZS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvQ29tcGFyZVR5cGUuamF2YQpAQCAtMTgsNiArMTgsOCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWw7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLlRyYXZlcnNlclNldDsKKwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9GYWlsdXJlLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0ZhaWx1cmUuamF2YQppbmRleCA3NzVlNjg1Li45YjFkMDZlIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0ZhaWx1cmUuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0ZhaWx1cmUuamF2YQpAQCAtMTgsMjMgKzE4LDE4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbDsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkZhaWxTdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkVtcHR5U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5UcmF2ZXJzZXJSZXF1aXJlbWVudDsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogCiBwdWJsaWMgaW50ZXJmYWNlIEZhaWx1cmUgewogCi0gICAgc3RhdGljIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciBUUkFOU0xBVE9SID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiIik7Ci0KICAgICBTdHJpbmcgZ2V0TWVzc2FnZSgpOwogCiAgICAgTWFwPFN0cmluZyxPYmplY3Q+IGdldE1ldGFkYXRhKCk7CkBAIC03OSwxMyArNzQsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIHJlbW92ZXMgdGhlIHN0YXJ0aW5nIHBlcmlvZCBzbyB0aGF0ICJfXy5vdXQoKSIgc2ltcGx5IHByZXNlbnRzIGFzICJvdXQoKSIKLSAgICAgICAgbGluZXMuYWRkKFN0cmluZy5mb3JtYXQoIlRyYXZlcnNhbD4gJXMiLCBUUkFOU0xBVE9SLnRyYW5zbGF0ZShnZXRUcmF2ZXJzYWwoKSkuZ2V0U2NyaXB0KCkuc3Vic3RyaW5nKDEpKSk7CisgICAgICAgIGxpbmVzLmFkZChTdHJpbmcuZm9ybWF0KCJUcmF2ZXJzYWw+ICVzIiwgZ2V0VHJhdmVyc2FsKCkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCkuc3Vic3RyaW5nKDEpKSk7CiAKICAgICAgICAgLy8gbm90IHN1cmUgdGhlcmUgaXMgYSBzaXR1YXRpb24gd2hlcmUgZmFpbCgpIHdvdWxkIGJlIHVzZWQgd2hlcmUgaXQgd2FzIG5vdCB3cmFwcGVkIGluIGEgcGFyZW50LAogICAgICAgICAvLyBidXQgb24gdGhlIG9kZCBjYXNlIHRoYXQgaXQgaXMgaXQgY2FuIGJlIGhhbmRsZWQKICAgICAgICAgaWYgKHBhcmVudFN0ZXAgIT0gRW1wdHlTdGVwLmluc3RhbmNlKCkpIHsKICAgICAgICAgICAgIGxpbmVzLmFkZChTdHJpbmcuZm9ybWF0KCJQYXJlbnQgICA+ICVzIFslc10iLAotICAgICAgICAgICAgICAgICAgICBwYXJlbnRTdGVwLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLCBUUkFOU0xBVE9SLnRyYW5zbGF0ZShwYXJlbnRTdGVwLmdldFRyYXZlcnNhbCgpKS5nZXRTY3JpcHQoKS5zdWJzdHJpbmcoMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50U3RlcC5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSwgZ2V0VHJhdmVyc2FsKCkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCkuc3Vic3RyaW5nKDEpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBsaW5lcy5hZGQoU3RyaW5nLmZvcm1hdCgiTWV0YWRhdGEgPiAlcyIsIGdldE1ldGFkYXRhKCkpKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvR3JhcGhPcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9HcmFwaE9wLmphdmEKaW5kZXggNjU0MjgxYS4uOTAwZDNhMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9HcmFwaE9wLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9HcmFwaE9wLmphdmEKQEAgLTIyLDcgKzIyLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UcmFuc2FjdGlvbjsKIAogLyoqCi0gKiBBIHtAY29kZSBHcmFwaE9wfSBvciAiZ3JhcGggb3BlcmF0aW9uIiBpcyBhIHN0YXRpYyB7QGxpbmsgQnl0ZWNvZGV9IGZvcm0gdGhhdCBkb2VzIG5vdCB0cmFuc2xhdGUgdG8gYSB0cmF2ZXJzYWwKKyAqIEEge0Bjb2RlIEdyYXBoT3B9IG9yICJncmFwaCBvcGVyYXRpb24iIGlzIGEgc3RhdGljIHtAbGluayBHcmVtbGluTGFuZ30gZm9ybSB0aGF0IGRvZXMgbm90IHRyYW5zbGF0ZSB0byBhIHRyYXZlcnNhbAogICogYnV0IGluc3RlYWQgcmVmZXJzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb24gdG8gcGVyZm9ybSBvbiBhIGdyYXBoIGluc3RhbmNlLgogICovCiBwdWJsaWMgZW51bSBHcmFwaE9wIHsKQEAgLTMwLDMwICszMCwzMCBAQAogICAgIC8qKgogICAgICAqIENvbW1pdCBhIHRyYW5zYWN0aW9uLgogICAgICAqLwotICAgIFRYX0NPTU1JVChuZXcgQnl0ZWNvZGUoR3JhcGhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy50eCwgVHJhbnNhY3Rpb24uU3ltYm9scy5jb21taXQpKSwKKyAgICBUWF9DT01NSVQobmV3IEdyZW1saW5MYW5nKEdyYXBoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMudHgsIFRyYW5zYWN0aW9uLlN5bWJvbHMuY29tbWl0KSksCiAKICAgICAvKioKICAgICAgKiBSb2xsYmFjayBhIHRyYW5zYWN0aW9uLgogICAgICAqLwotICAgIFRYX1JPTExCQUNLKG5ldyBCeXRlY29kZShHcmFwaFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLnR4LCBUcmFuc2FjdGlvbi5TeW1ib2xzLnJvbGxiYWNrKSk7CisgICAgVFhfUk9MTEJBQ0sobmV3IEdyZW1saW5MYW5nKEdyYXBoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMudHgsIFRyYW5zYWN0aW9uLlN5bWJvbHMucm9sbGJhY2spKTsKIAotICAgIHByaXZhdGUgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGU7CisgICAgcHJpdmF0ZSBmaW5hbCBHcmVtbGluTGFuZyBncmVtbGluTGFuZzsKIAotICAgIEdyYXBoT3AoZmluYWwgQnl0ZWNvZGUgYmMpIHsKLSAgICAgICAgdGhpcy5ieXRlY29kZSA9IGJjOworICAgIEdyYXBoT3AoZmluYWwgR3JlbWxpbkxhbmcgYmMpIHsKKyAgICAgICAgdGhpcy5ncmVtbGluTGFuZyA9IGJjOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEdldHMgdGhlIHtAbGluayBCeXRlY29kZX0gdGhhdCByZXByZXNlbnRzIHRoaXMgZ3JhcGggb3BlcmF0aW9uLiBUaGVyZSBpcyBubyBub3Rpb24gb2YgaW1tdXRhYmxlIGJ5dGVjb2RlCisgICAgICogR2V0cyB0aGUge0BsaW5rIEdyZW1saW5MYW5nfSB0aGF0IHJlcHJlc2VudHMgdGhpcyBncmFwaCBvcGVyYXRpb24uIFRoZXJlIGlzIG5vIG5vdGlvbiBvZiBpbW11dGFibGUgR3JlbWxpbkxhbmcKICAgICAgKiBpbnN0YW5jZXMgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIG9iamVjdCByZXR1cm5lZCBoZXJlIGlzIG5vdCBtb2RpZmllZC4gSWYgdGhleSBhcmUgY2hhbmdlZCwgdGhlIG9wZXJhdGlvbnMKICAgICAgKiB3aWxsIG5vIGxvbmdlciBiZSByZWNvZ25pemVkLiBJbiBhIGZ1dHVyZSB2ZXJzaW9uLCB3ZSBzaG91bGQgcHJvYmFibHkgaW50cm9kdWNlIHRoZSBjb25jZXB0IG9mIGltbXV0YWJsZQotICAgICAqIGJ5dGVjb2RlIHRvIHByZXZlbnQgdGhpcyBwb3NzaWJpbGl0eSAtIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLTI1NDUKKyAgICAgKiBHcmVtbGluTGFuZyB0byBwcmV2ZW50IHRoaXMgcG9zc2liaWxpdHkgLSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUC0yNTQ1CiAgICAgICovCi0gICAgcHVibGljIEJ5dGVjb2RlIGdldEJ5dGVjb2RlKCkgewotICAgICAgICByZXR1cm4gYnl0ZWNvZGU7CisgICAgcHVibGljIEdyZW1saW5MYW5nIGdldEdyZW1saW5MYW5nKCkgeworICAgICAgICByZXR1cm4gZ3JlbWxpbkxhbmc7CiAgICAgfQogCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIEJ5dGVjb2RlIGJjKSB7Ci0gICAgICAgIHJldHVybiBieXRlY29kZS5lcXVhbHMoYmMpOworICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBHcmVtbGluTGFuZyBiYykgeworICAgICAgICByZXR1cm4gZ3JlbWxpbkxhbmcuZXF1YWxzKGJjKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0dyZW1saW5MYW5nLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0dyZW1saW5MYW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3NGI1YQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvR3JlbWxpbkxhbmcuamF2YQpAQCAtMCwwICsxLDUzMCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWw7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdFc2NhcGVVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuVHJhdmVyc2FsU3RyYXRlZ3lQcm94eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5Db25uZWN0aXZlUDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Db2x1bW47CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk51bWJlckhlbHBlcjsKKworaW1wb3J0IGphdmF4LmxhbmcubW9kZWwuU291cmNlVmVyc2lvbjsKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKK2ltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5VVUlEOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5EYXRldGltZUhlbHBlci5mb3JtYXQ7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzLmFzSXRlcmF0b3I7CisKKy8qKgorICogVGhpcyBjbGFzcyBoZWxwcyB0byBidWlsZCBhIGdyZW1saW4tbGFuZyBjb21wYXRpYmxlIHN0cmluZyByZXByZXNlbnRhdGlvbiBiYXNlZCBvbiBhIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9CisgKiBhbmQgdGhlbiBhIHtAbGluayBUcmF2ZXJzYWx9LgorICovCitwdWJsaWMgY2xhc3MgR3JlbWxpbkxhbmcgaW1wbGVtZW50cyBDbG9uZWFibGUsIFNlcmlhbGl6YWJsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RbXSBFTVBUWV9BUlJBWSA9IG5ldyBPYmplY3RbXXt9OworCisgICAgcHJpdmF0ZSBTdHJpbmdCdWlsZGVyIGdyZW1saW4gPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8PigpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF0b21pY0ludGVnZXIgcGFyYW1Db3VudCA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOworICAgIHByaXZhdGUgTGlzdDxPcHRpb25zU3RyYXRlZ3k+IG9wdGlvbnNTdHJhdGVnaWVzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICBwdWJsaWMgR3JlbWxpbkxhbmcoKSB7CisgICAgfQorCisgICAgcHVibGljIEdyZW1saW5MYW5nKGZpbmFsIFN0cmluZyBzb3VyY2VOYW1lLCBmaW5hbCBPYmplY3QuLi4gYXJndW1lbnRzKSB7CisgICAgICAgIGFkZFRvR3JlbWxpbihzb3VyY2VOYW1lLCBhcmd1bWVudHMpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRUb0dyZW1saW4oZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIE9iamVjdC4uLiBhcmd1bWVudHMpIHsKKyAgICAgICAgZmluYWwgT2JqZWN0W10gZmxhdHRlbmVkQXJndW1lbnRzID0gZmxhdHRlbkFyZ3VtZW50cyhhcmd1bWVudHMpOworCisgICAgICAgIC8vIHRvZG86IGZpZ3VyZSBvdXQgc29sdXRpb24gZm9yIEFic3RyYWN0TGFtYmRhVHJhdmVyc2FsCisgICAgICAgIGlmICgiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIuZXF1YWxzKG5hbWUpKSB7CisgICAgICAgICAgICBncmVtbGluLmFwcGVuZCgiQ2FyZGluYWxpdHkuIikuYXBwZW5kKGZsYXR0ZW5lZEFyZ3VtZW50c1swXSkKKyAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiKCIpLmFwcGVuZChmbGF0dGVuZWRBcmd1bWVudHNbMV0pLmFwcGVuZCgiKSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ3JlbWxpbi5hcHBlbmQoIi4iKS5hcHBlbmQobmFtZSkuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbGF0dGVuZWRBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgICAgICBncmVtbGluLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ3JlbWxpbi5hcHBlbmQoYXJnQXNTdHJpbmcoZmxhdHRlbmVkQXJndW1lbnRzW2ldKSk7CisgICAgICAgIH0KKworICAgICAgICBncmVtbGluLmFwcGVuZCgnKScpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGFyZ0FzU3RyaW5nKGZpbmFsIE9iamVjdCBhcmcpIHsKKyAgICAgICAgaWYgKGFyZyA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKKworICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIlwiJXNcIiIsIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUphdmEoKFN0cmluZykgYXJnKSk7CisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBCb29sZWFuKQorICAgICAgICAgICAgcmV0dXJuIGFyZy50b1N0cmluZygpOworCisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBCeXRlKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiVzQiIsIGFyZyk7CisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBTaG9ydCkKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlc1MiLCBhcmcpOworICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgSW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiBhcmcudG9TdHJpbmcoKTsKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIExvbmcpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJXNMIiwgYXJnKTsKKworICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgQmlnSW50ZWdlcikKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlc04iLCBhcmcpOworICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRmxvYXQpIHsKKyAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNOYU4oYXJnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiI7CisgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzUG9zaXRpdmVJbmZpbml0eShhcmcpKQorICAgICAgICAgICAgICAgIHJldHVybiAiK0luZmluaXR5IjsKKyAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNOZWdhdGl2ZUluZmluaXR5KGFyZykpCisgICAgICAgICAgICAgICAgcmV0dXJuICItSW5maW5pdHkiOworCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiJXNGIiwgYXJnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRG91YmxlKSB7CisgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzTmFOKGFyZykpCisgICAgICAgICAgICAgICAgcmV0dXJuICJOYU4iOworICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc1Bvc2l0aXZlSW5maW5pdHkoYXJnKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gIitJbmZpbml0eSI7CisgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzTmVnYXRpdmVJbmZpbml0eShhcmcpKQorICAgICAgICAgICAgICAgIHJldHVybiAiLUluZmluaXR5IjsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlc0QiLCBhcmcpOworICAgICAgICB9CisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBCaWdEZWNpbWFsKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIiVzTSIsIGFyZyk7CisKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIE9mZnNldERhdGVUaW1lKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoImRhdGV0aW1lKFwiJXNcIikiLCBmb3JtYXQoKChPZmZzZXREYXRlVGltZSkgYXJnKS50b0luc3RhbnQoKSkpOworCisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEYXRlKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoImRhdGV0aW1lKFwiJXNcIikiLCBmb3JtYXQoKChEYXRlKSBhcmcpLnRvSW5zdGFudCgpKSk7CisKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIFVVSUQpIHsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJVVUlEKFwiJXNcIikiLCBhcmcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEVudW0pIHsKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGVudW1zIHdpdGggYWRkaXRpb25hbCBpbnRlcmZhY2VzCisgICAgICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiVC4lcyIsIGFyZyk7CisgICAgICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgR1R5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIkdUeXBlLiVzIiwgYXJnKTsKKyAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBPcmRlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiT3JkZXIuJXMiLCBhcmcpOworICAgICAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIENvbHVtbikKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiQ29sdW1uLiVzIiwgYXJnKTsKKyAgICAgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBPcGVyYXRvcikKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiT3BlcmF0b3IuJXMiLCBhcmcpOworICAgICAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIFNhY2tGdW5jdGlvbnMuQmFycmllcikKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiQmFycmllci4lcyIsIGFyZyk7CisKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlcy4lcyIsIGFyZy5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSwgYXJnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBWZXJ0ZXgpCisgICAgICAgICAgICByZXR1cm4gYXJnQXNTdHJpbmcoKChWZXJ0ZXgpIGFyZykuaWQoKSk7CisKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIFApIHsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZygoUDw/PikgYXJnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBHcmVtbGluTGFuZyB8fCBhcmcgaW5zdGFuY2VvZiBEZWZhdWx0VHJhdmVyc2FsKSB7CisgICAgICAgICAgICBmaW5hbCBHcmVtbGluTGFuZyBncmVtbGluTGFuZyA9IGFyZyBpbnN0YW5jZW9mIEdyZW1saW5MYW5nID8gKEdyZW1saW5MYW5nKSBhcmcgOiAoKERlZmF1bHRUcmF2ZXJzYWwpIGFyZykuZ2V0R3JlbWxpbkxhbmcoKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0QWxsKGdyZW1saW5MYW5nLmdldFBhcmFtZXRlcnMoKSk7CisgICAgICAgICAgICByZXR1cm4gZ3JlbWxpbkxhbmcuZ2V0R3JlbWxpbigiX18iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBHVmFsdWUpIHsKKyAgICAgICAgICAgIGZpbmFsIEdWYWx1ZSBnVmFsdWUgPSAoR1ZhbHVlKSBhcmc7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gZ1ZhbHVlLmdldE5hbWUoKTsKKworICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ0FzU3RyaW5nKCgoR1ZhbHVlPD8+KSBhcmcpLmdldCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFTb3VyY2VWZXJzaW9uLmlzSWRlbnRpZmllcihrZXkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJJbnZhbGlkIHBhcmFtZXRlciBuYW1lIFslc10uIiwga2V5KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KGtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIU9iamVjdHMuZXF1YWxzKHBhcmFtZXRlcnMuZ2V0KGtleSksIGdWYWx1ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJQYXJhbWV0ZXIgd2l0aCBuYW1lIFslc10gYWxyZWFkeSBkZWZpbmVkLiIsIGtleSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoa2V5LCBnVmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGtleTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBNYXApIHsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZygoTWFwKSBhcmcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIFNldCkgeworICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKChTZXQpIGFyZyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBoYW5kbGUgYWxsIGl0ZXJhYmxlcyBpbiBzaW1pbGFyIHdheQorICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgTGlzdCB8fCBhcmcgaW5zdGFuY2VvZiBPYmplY3RbXSB8fCBhcmcuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyhhc0l0ZXJhdG9yKGFyZykpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIENsYXNzKSB7CisgICAgICAgICAgICByZXR1cm4gKChDbGFzcykgYXJnKS5nZXRTaW1wbGVOYW1lKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYXNQYXJhbWV0ZXIoYXJnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZyBhc1BhcmFtZXRlcihmaW5hbCBPYmplY3QgYXJnKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBwYXJhbU5hbWUgPSBTdHJpbmcuZm9ybWF0KCJfJWQiLCBwYXJhbUNvdW50LmdldEFuZEluY3JlbWVudCgpKTsKKyAgICAgICAgLy8gdG9kbzogY29uc2lkZXIgcmVzZXR0aW5nIHBhcmFtQ291bnQgd2hlbiBpdCdzIGxhcmdlciB0aGVuIDFfMDAwXzAwMAorICAgICAgICBwYXJhbWV0ZXJzLnB1dChwYXJhbU5hbWUsIGFyZyk7CisgICAgICAgIHJldHVybiBwYXJhbU5hbWU7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgYXNTdHJpbmcoZmluYWwgSXRlcmF0b3IgaXR0eSkgeworICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKS5hcHBlbmQoIlsiKTsKKworICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZChhcmdBc1N0cmluZyhpdHR5Lm5leHQoKSkpOworICAgICAgICAgICAgaWYgKGl0dHkuaGFzTmV4dCgpKQorICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNiLmFwcGVuZCgiXSIpLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgYXNTdHJpbmcoZmluYWwgU2V0PD8+IHNldCkgeworICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKS5hcHBlbmQoInsiKTsKKworICAgICAgICBmaW5hbCBJdGVyYXRvciBpdHR5ID0gYXNJdGVyYXRvcihzZXQpOworCisgICAgICAgIHdoaWxlIChpdHR5Lmhhc05leHQoKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKGFyZ0FzU3RyaW5nKGl0dHkubmV4dCgpKSk7CisgICAgICAgICAgICBpZiAoaXR0eS5oYXNOZXh0KCkpCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIsIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2IuYXBwZW5kKCJ9IikudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvLyBib3Jyb3dlZCBmcm9tIEdyb292eSB0cmFuc2xhdG9yCisgICAgcHJpdmF0ZSBTdHJpbmcgYXNTdHJpbmcoZmluYWwgUDw/PiBwKSB7CisgICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBpZiAocCBpbnN0YW5jZW9mIFRleHRQKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIlRleHRQLiIpLmFwcGVuZChwLmdldFByZWRpY2F0ZU5hbWUoKSkuYXBwZW5kKCIoIik7CisgICAgICAgICAgICBzYi5hcHBlbmQoYXJnQXNTdHJpbmcocC5nZXRWYWx1ZSgpKSk7CisgICAgICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIENvbm5lY3RpdmVQKSB7CisgICAgICAgICAgICAvLyBDb25uZWN0aXZlUCBnZXRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIGl0J3MgcmVkdWNlZCB0byBhbmQoUCwgUCwgUCkgYW5kIHdlIHdhbnQgaXQKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlZCB0aGUgd2F5IGl0IHdhcyB3cml0dGVuIHdoaWNoIHdhcyBQLmFuZChQKS5hbmQoUCkKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8UDw/Pj4gbGlzdCA9ICgoQ29ubmVjdGl2ZVApIHApLmdldFByZWRpY2F0ZXMoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb25uZWN0b3IgPSBwLmdldFByZWRpY2F0ZU5hbWUoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChhcmdBc1N0cmluZyhsaXN0LmdldChpKSkpOworCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBmaXJzdC9sYXN0IFAgdGhlcmUgaXMgbm8gcGFyZW50IHRvIGNsb3NlCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGkgPCBsaXN0LnNpemUoKSAtIDEpIHNiLmFwcGVuZCgiKSIpOworCisgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBjb25uZWN0b3IgZm9yIGFsbCBidXQgbGFzdCBQCisgICAgICAgICAgICAgICAgaWYgKGkgPCBsaXN0LnNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIuIikuYXBwZW5kKGNvbm5lY3RvcikuYXBwZW5kKCIoIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBOb3RQKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIlAubm90KCIpOworICAgICAgICAgICAgc2IuYXBwZW5kKGFyZ0FzU3RyaW5nKHAubmVnYXRlKCkpKTsgLy8gV3JhcCBpbnRlcm5hbCBQIGluIGBQLm5vdCglcylgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIlAuIikuYXBwZW5kKHAuZ2V0UHJlZGljYXRlTmFtZSgpKS5hcHBlbmQoIigiKTsKKyAgICAgICAgICAgIHNiLmFwcGVuZChhcmdBc1N0cmluZyhwLmdldFZhbHVlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBzYi5hcHBlbmQoIikiKTsKKyAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgYXNTdHJpbmcoZmluYWwgTWFwPD8sID8+IG1hcCkgeworICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoIlsiKTsKKyAgICAgICAgaW50IHNpemUgPSBtYXAuc2l6ZSgpOworCisgICAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiOiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8PywgPz4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBhcmdBc1N0cmluZyhlbnRyeS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBmb3Igbm9uLXN0cmluZyBrZXlzCisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldEtleSgpIGluc3RhbmNlb2YgRW51bSAmJiBrZXkuY29udGFpbnMoIi4iKSkgeworICAgICAgICAgICAgICAgICAgICBrZXkgPSBTdHJpbmcuZm9ybWF0KCIoJXMpIiwga2V5KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoa2V5KS5hcHBlbmQoIjoiKS5hcHBlbmQoYXJnQXNTdHJpbmcoZW50cnkuZ2V0VmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGlmICgtLXNpemUgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNiLmFwcGVuZCgiXSIpOworICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgZ3JlbWxpbi1sYW5nIGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gb2YgVHJhdmVyc2FsCisgICAgICogQHJldHVybiBncmVtbGluLWxhbmcgY29tcGF0aWJsZSBTdHJpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyZW1saW4oKSB7CisgICAgICAgIHJldHVybiBnZXRHcmVtbGluKCJnIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGdyZW1saW4tbGFuZyBjb21wYXRpYmxlIHJlcHJlc2VudGF0aW9uIG9mIFRyYXZlcnNhbC4KKyAgICAgKiAiZyIgaXMgZXhwZWN0ZWQgZm9yIGdyZW1saW4tbGFuZy4KKyAgICAgKiAiX18iIGNhbiBiZSB1c2VkIGZvciBhbiBhbm9ueW1vdXMge0BsaW5rIEdyYXBoVHJhdmVyc2FsfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBnIEdyYXBoVHJhdmVyc2FsU291cmNlIG5hbWUKKyAgICAgKiBAcmV0dXJuIGdyZW1saW4tbGFuZyBjb21wYXRpYmxlIFN0cmluZworICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlbWxpbihmaW5hbCBTdHJpbmcgZykgeworICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciBDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsCisgICAgICAgIGlmIChncmVtbGluLmxlbmd0aCgpICE9IDAgJiYgZ3JlbWxpbi5jaGFyQXQoMCkgIT0gJy4nKSB7CisgICAgICAgICAgICByZXR1cm4gZ3JlbWxpbi50b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnICsgZ3JlbWxpbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgcGFyYW1ldGVycyB1c2VkIGluIFRyYXZlcnNhbC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gcGFyYW1ldGVycyBNYXAKKyAgICAgKi8KKyAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRQYXJhbWV0ZXJzKCkgeworICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgYWxpYXMgdG8gc2V0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEcoZmluYWwgU3RyaW5nIGcpIHsKKyAgICAgICAgcGFyYW1ldGVycy5wdXQoImciLCBnKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAqIFJlc2V0IHBhcmFtZXRlciBuYW1pbmcgY291bnRlci4gTWFpbmx5IGludGVuZGVkIHRvIG1ha2UgdGVzdGluZyBlYXNpZXIKKyAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgeworICAgICAgICBwYXJhbUNvdW50LnNldCgwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSB7QGxpbmsgVHJhdmVyc2FsU291cmNlfSBpbnN0cnVjdGlvbiB0byB0aGUgR3JlbWxpbkxhbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc291cmNlTmFtZSB0aGUgdHJhdmVyc2FsIHNvdXJjZSBtZXRob2QgbmFtZSAoZS5nLiB3aXRoU2FjaygpKQorICAgICAqIEBwYXJhbSBhcmd1bWVudHMgIHRoZSB0cmF2ZXJzYWwgc291cmNlIG1ldGhvZCBhcmd1bWVudHMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRTb3VyY2UoZmluYWwgU3RyaW5nIHNvdXJjZU5hbWUsIGZpbmFsIE9iamVjdC4uLiBhcmd1bWVudHMpIHsKKyAgICAgICAgaWYgKHNvdXJjZU5hbWUuZXF1YWxzKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTdHJhdGVnaWVzKSAmJiBhcmd1bWVudHMubGVuZ3RoICE9IDApIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhcmdzID0gIGJ1aWxkU3RyYXRlZ3lBcmdzKGFyZ3VtZW50cyk7CisKKyAgICAgICAgICAgIC8vIHBvc3NpYmxlIHRvIGhhdmUgZW1wdHkgc3RyYXRlZ2llcyBsaXN0IHRvIHNlbmQKKyAgICAgICAgICAgIGlmICghYXJncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBncmVtbGluLmFwcGVuZCgnLicpLmFwcGVuZChUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU3RyYXRlZ2llcykuYXBwZW5kKCcoJykuYXBwZW5kKGFyZ3MpLmFwcGVuZCgnKScpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYWRkVG9HcmVtbGluKHNvdXJjZU5hbWUsIGFyZ3VtZW50cyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgYnVpbGRTdHJhdGVneUFyZ3MoZmluYWwgT2JqZWN0W10gYXJndW1lbnRzKSB7CisgICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBmb3IgT3B0aW9uc1N0cmF0ZWd5CisgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldIGluc3RhbmNlb2YgT3B0aW9uc1N0cmF0ZWd5KSB7CisgICAgICAgICAgICAgICAgb3B0aW9uc1N0cmF0ZWdpZXMuYWRkKChPcHRpb25zU3RyYXRlZ3kpIGFyZ3VtZW50c1tpXSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKyAgICAgICAgICAgIFN0cmluZyBzdHJhdGVneU5hbWU7CisKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkKKyAgICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gaW5zdGFuY2VvZiBUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSB7CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9ICgoVHJhdmVyc2FsU3RyYXRlZ3kpIGFyZ3VtZW50c1tpXSkuZ2V0Q29uZmlndXJhdGlvbigpOworICAgICAgICAgICAgICAgIHN0cmF0ZWd5TmFtZSA9ICgoVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSkgYXJndW1lbnRzW2ldKS5nZXRTdHJhdGVneU5hbWUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9ICgoVHJhdmVyc2FsU3RyYXRlZ3kpIGFyZ3VtZW50c1tpXSkuZ2V0Q29uZmlndXJhdGlvbigpOworICAgICAgICAgICAgICAgIHN0cmF0ZWd5TmFtZSA9IGFyZ3VtZW50c1tpXS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHN0cmF0ZWd5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgibmV3ICIpCisgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHN0cmF0ZWd5TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIigiKTsKKworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZ2V0S2V5cygpLmZvckVhY2hSZW1haW5pbmcoa2V5IC0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkuZXF1YWxzKCJzdHJhdGVneSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoa2V5KS5hcHBlbmQoIjoiKS5hcHBlbmQoYXJnQXNTdHJpbmcoY29uZmlndXJhdGlvbi5nZXRQcm9wZXJ0eShrZXkpKSkuYXBwZW5kKCIsIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgbGFzdCBjb21tYQorICAgICAgICAgICAgICAgIGlmIChzYi5sYXN0SW5kZXhPZigiLCIpID09IHNiLmxlbmd0aCgpIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBzYi5zZXRMZW5ndGgoc2IubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJyknKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGkgIT0gYXJndW1lbnRzLmxlbmd0aCAtIDEpCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCcsJyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSB7QGxpbmsgVHJhdmVyc2FsfSBpbnN0cnVjdGlvbiB0byB0aGUgR3JlbWxpbkxhbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3RlcE5hbWUgIHRoZSB0cmF2ZXJzYWwgbWV0aG9kIG5hbWUgKGUuZy4gb3V0KCkpCisgICAgICogQHBhcmFtIGFyZ3VtZW50cyB0aGUgdHJhdmVyc2FsIG1ldGhvZCBhcmd1bWVudHMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRTdGVwKGZpbmFsIFN0cmluZyBzdGVwTmFtZSwgZmluYWwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgICAgICBhZGRUb0dyZW1saW4oc3RlcE5hbWUsIGFyZ3VtZW50cyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvdmlkZXMgYSB3YXkgdG8gZ2V0IGNvbmZpZ3VyYXRpb24gb2YgYSBUcmF2ZXJzYWwuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGxpc3Qgb2YgT3B0aW9uc1N0cmF0ZWd5CisgICAgICovCisgICAgcHVibGljIExpc3Q8T3B0aW9uc1N0cmF0ZWd5PiBnZXRPcHRpb25zU3RyYXRlZ2llcygpIHsKKyAgICAgICAgcmV0dXJuIG9wdGlvbnNTdHJhdGVnaWVzOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmdyZW1saW4ubGVuZ3RoKCkgPT0gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gZ3JlbWxpbi50b1N0cmluZygpOworICAgIH0KKworICAgIC8vIHRvZG86IGNsYXJpZnkgZXF1YWxpdHkgd2l0aCBwYXJhbWV0ZXJzCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CisgICAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOworICAgICAgICBpZiAobyA9PSBudWxsIHx8IGdldENsYXNzKCkgIT0gby5nZXRDbGFzcygpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nID0gKEdyZW1saW5MYW5nKSBvOworICAgICAgICByZXR1cm4gT2JqZWN0cy5lcXVhbHMoZ3JlbWxpbi50b1N0cmluZygpLCBncmVtbGluTGFuZy5ncmVtbGluLnRvU3RyaW5nKCkpICYmCisgICAgICAgICAgICAgICAgT2JqZWN0cy5lcXVhbHMocGFyYW1ldGVycywgZ3JlbWxpbkxhbmcucGFyYW1ldGVycyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdHMuaGFzaChncmVtbGluLCBwYXJhbWV0ZXJzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgR3JlbWxpbkxhbmcgY2xvbmUoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBHcmVtbGluTGFuZyBjbG9uZSA9IChHcmVtbGluTGFuZykgc3VwZXIuY2xvbmUoKTsKKyAgICAgICAgICAgIGNsb25lLnBhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDw+KHBhcmFtZXRlcnMpOworICAgICAgICAgICAgY2xvbmUuZ3JlbWxpbiA9IG5ldyBTdHJpbmdCdWlsZGVyKGdyZW1saW4ubGVuZ3RoKCkpOworICAgICAgICAgICAgY2xvbmUuZ3JlbWxpbi5hcHBlbmQoZ3JlbWxpbik7CisgICAgICAgICAgICBjbG9uZS5vcHRpb25zU3RyYXRlZ2llcyA9IG5ldyBBcnJheUxpc3Q8Pih0aGlzLm9wdGlvbnNTdHJhdGVnaWVzKTsKKyAgICAgICAgICAgIHJldHVybiBjbG9uZTsKKyAgICAgICAgfSBjYXRjaCAoZmluYWwgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIE9iamVjdFtdIGZsYXR0ZW5Bcmd1bWVudHMoZmluYWwgT2JqZWN0Li4uIGFyZ3VtZW50cykgeworICAgICAgICBpZiAoYXJndW1lbnRzID09IG51bGwgfHwgYXJndW1lbnRzLmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0FSUkFZOworICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gZmxhdEFyZ3VtZW50cyA9IG5ldyBBcnJheUxpc3Q8Pihhcmd1bWVudHMubGVuZ3RoKTsKKyAgICAgICAgZm9yIChmaW5hbCBPYmplY3Qgb2JqZWN0IDogYXJndW1lbnRzKSB7CisgICAgICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0W10pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBuZXN0T2JqZWN0IDogKE9iamVjdFtdKSBvYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxhdEFyZ3VtZW50cy5hZGQoY29udmVydEFyZ3VtZW50KG5lc3RPYmplY3QpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmbGF0QXJndW1lbnRzLmFkZChjb252ZXJ0QXJndW1lbnQob2JqZWN0KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZsYXRBcmd1bWVudHMudG9BcnJheSgpOworICAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IGNvbnZlcnRBcmd1bWVudChmaW5hbCBPYmplY3QgYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7CisgICAgICAgICAgICAvLyBwcmV2ZW50IHVzZSBvZiAiZyIgdG8gc3Bhd24gY2hpbGQgdHJhdmVyc2FscworICAgICAgICAgICAgaWYgKCgoVHJhdmVyc2FsKSBhcmd1bWVudCkuYXNBZG1pbigpLmdldFRyYXZlcnNhbFNvdXJjZSgpLmlzUHJlc2VudCgpKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgY2hpbGQgdHJhdmVyc2FsIG9mICVzIHdhcyBub3Qgc3Bhd25lZCBhbm9ueW1vdXNseSAtIHVzZSB0aGUgX18gY2xhc3MgcmF0aGVyIHRoYW4gYSBUcmF2ZXJzYWxTb3VyY2UgdG8gY29uc3RydWN0IHRoZSBjaGlsZCB0cmF2ZXJzYWwiLCBhcmd1bWVudCkpOworCisgICAgICAgICAgICByZXR1cm4gKChUcmF2ZXJzYWwpIGFyZ3VtZW50KS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIE1hcCkgeworICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBtYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCgoTWFwKSBhcmd1bWVudCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoZmluYWwgTWFwLkVudHJ5PD8sID8+IGVudHJ5IDogKChNYXA8PywgPz4pIGFyZ3VtZW50KS5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAgbWFwLnB1dChjb252ZXJ0QXJndW1lbnQoZW50cnkuZ2V0S2V5KCkpLCBjb252ZXJ0QXJndW1lbnQoZW50cnkuZ2V0VmFsdWUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1hcDsKKyAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIExpc3QpIHsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCgoTGlzdCkgYXJndW1lbnQpLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBpdGVtIDogKExpc3QpIGFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgbGlzdC5hZGQoY29udmVydEFyZ3VtZW50KGl0ZW0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsaXN0OworICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgU2V0KSB7CisgICAgICAgICAgICBmaW5hbCBTZXQ8T2JqZWN0PiBzZXQgPSBuZXcgTGlua2VkSGFzaFNldDw+KCgoU2V0KSBhcmd1bWVudCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGl0ZW0gOiAoU2V0KSBhcmd1bWVudCkgeworICAgICAgICAgICAgICAgIHNldC5hZGQoY29udmVydEFyZ3VtZW50KGl0ZW0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzZXQ7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvUC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9QLmphdmEKaW5kZXggZmY1NWExOC4uYWZjNDFiNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9QLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9QLmphdmEKQEAgLTE4LDcgKzE4LDcgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLkNvbGxlY3Rpb25VdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0LkNvbGxlY3Rpb25VdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkJ1bGtTZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkFuZFA7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYW5zbGF0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvVHJhbnNsYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGExOWY5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvVHJhbnNsYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5sYW1iZGEuQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LlRyYXZlcnNhbFN0cmF0ZWd5UHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLQotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5CaUZ1bmN0aW9uOwotCi0vKioKLSAqIEEgVHJhbnNsYXRvciB3aWxsIHRyYW5zbGF0ZSB7QGxpbmsgQnl0ZWNvZGV9IGludG8gYW5vdGhlciByZXByZXNlbnRhdGlvbi4gVGhhdCByZXByZXNlbnRhdGlvbiBtYXkgYmUgYQotICogSmF2YSBpbnN0YW5jZSB2aWEge0BsaW5rIFN0ZXBUcmFuc2xhdG9yfSBvciBhIFN0cmluZyBzY3JpcHQgaW4gc29tZSBsYW5ndWFnZSB2aWEge0BsaW5rIFNjcmlwdFRyYW5zbGF0b3J9LgotICogVGhlIHBhcmFtZXRlcml6YXRpb24gb2YgVHJhbnNsYXRvciBpcyBTICh0cmF2ZXJzYWwgc291cmNlKSBhbmQgVCAoZnVsbCB0cmFuc2xhdGlvbikuCi0gKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0YXJrIEFyeWEgKHNhbmRzemhvdS56akBhbGliYWJhLWluYy5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHJhbnNsYXRvcjxTLCBUPiB7Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IHJlcHJlc2VudGF0aW9uIHJvb3RpbmcgdGhpcyB0cmFuc2xhdG9yLgotICAgICAqIEZvciBzdHJpbmctYmFzZWQgdHJhbnNsYXRvcnMgKHtAbGluayBTY3JpcHRUcmFuc2xhdG9yfSksIHRoaXMgaXMgdHlwaWNhbGx5IGEgImciLgotICAgICAqIEZvciBqYXZhLWJhc2VkIHRyYW5zbGF0b3JzICh7QGxpbmsgU3RlcFRyYW5zbGF0b3J9KSwgdGhpcyBpcyB0eXBpY2FsbHkgdGhlIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IGluc3RhbmNlCi0gICAgICogd2hpY2ggdGhlIHtAbGluayBUcmF2ZXJzYWx9IHdpbGwgYmUgYnVpbHQgZnJvbS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbCBzb3VyY2UgcmVwcmVzZW50YXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgUyBnZXRUcmF2ZXJzYWxTb3VyY2UoKTsKLQotICAgIC8qKgotICAgICAqIFRyYW5zbGF0ZSB7QGxpbmsgQnl0ZWNvZGV9IGludG8gYSBuZXcgcmVwcmVzZW50YXRpb24uIFR5cGljYWxseSwgZm9yIGxhbmd1YWdlIHRyYW5zbGF0aW9ucywgdGhlIHRyYW5zbGF0aW9uIGlzCi0gICAgICogdG8gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0cmF2ZXJzYWwgaW4gdGhlIHJlc3BlY3RpdmUgc2NyaXB0aW5nIGxhbmd1YWdlLgotICAgICAqCi0gICAgICogQHBhcmFtIGJ5dGVjb2RlIHRoZSBieXRlY29kZSByZXByZXNlbnRpbmcgdHJhdmVyc2FsIHNvdXJjZSBhbmQgdHJhdmVyc2FsIG1hbmlwdWxhdGlvbnMuCi0gICAgICogQHJldHVybiB0aGUgdHJhbnNsYXRlZCBvYmplY3QKLSAgICAgKi8KLSAgICBwdWJsaWMgVCB0cmFuc2xhdGUoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpOwotCi0gICAgLyoqCi0gICAgICogVHJhbnNsYXRlcyBhIHtAbGluayBUcmF2ZXJzYWx9IGludG8gdGhlIHNwZWNpZmllZCBmb3JtCi0gICAgICovCi0gICAgcHVibGljIGRlZmF1bHQgVCB0cmFuc2xhdGUoZmluYWwgVHJhdmVyc2FsPD8sPz4gdCkgewotICAgICAgICByZXR1cm4gdHJhbnNsYXRlKHQuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgbGFuZ3VhZ2UgdGhhdCB0aGUgdHJhbnNsYXRvciBpcyBjb252ZXJ0aW5nIHRoZSB0cmF2ZXJzYWwgYnl0ZSBjb2RlIHRvLgotICAgICAqCi0gICAgICogQHJldHVybiB0aGUgbGFuZ3VhZ2Ugb2YgdGhlIHRyYW5zbGF0aW9uCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXRMYW5ndWFnZSgpOwotCi0gICAgLy8vCi0KLSAgICAvKioKLSAgICAgKiBUcmFuc2xhdGVzIGJ5dGVjb2RlIHRvIGEgU2NyaXB0IHJlcHJlc2VudGF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBpbnRlcmZhY2UgU2NyaXB0VHJhbnNsYXRvciBleHRlbmRzIFRyYW5zbGF0b3I8U3RyaW5nLCBTY3JpcHQ+IHsKLQotICAgICAgICAvKioKLSAgICAgICAgICogUHJvdmlkZXMgYSB3YXkgZm9yIHRoZSB7QGxpbmsgU2NyaXB0VHJhbnNsYXRvcn0gdG8gY29udmVydCB2YXJpb3VzIGRhdGEgdHlwZXMgdG8gdGhlaXIgc3RyaW5nCi0gICAgICAgICAqIHJlcHJlc2VudGF0aW9ucyBpbiB0aGVpciB0YXJnZXQgbGFuZ3VhZ2UuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50ZXJmYWNlIFR5cGVUcmFuc2xhdG9yIGV4dGVuZHMgQmlGdW5jdGlvbjxTdHJpbmcsIE9iamVjdCwgU2NyaXB0PiB7IH0KLQotICAgICAgICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUeXBlVHJhbnNsYXRvciBpbXBsZW1lbnRzIFNjcmlwdFRyYW5zbGF0b3IuVHlwZVRyYW5zbGF0b3IgewotICAgICAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5PTllNT1VTX1RSQVZFUlNBTF9QUkVGSVggPSAiX18iOwotICAgICAgICAgICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gd2l0aFBhcmFtZXRlcnM7Ci0gICAgICAgICAgICBwcm90ZWN0ZWQgZmluYWwgU2NyaXB0IHNjcmlwdDsKLQotICAgICAgICAgICAgcHJvdGVjdGVkIEFic3RyYWN0VHlwZVRyYW5zbGF0b3IoZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIHRoaXMud2l0aFBhcmFtZXRlcnMgPSB3aXRoUGFyYW1ldGVyczsKLSAgICAgICAgICAgICAgICB0aGlzLnNjcmlwdCA9IG5ldyBTY3JpcHQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgU2NyaXB0IGFwcGx5KGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIE9iamVjdCBvKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zY3JpcHQuaW5pdCgpOwotICAgICAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgQnl0ZWNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2R1Y2VTY3JpcHQodHJhdmVyc2FsU291cmNlLCAoQnl0ZWNvZGUpIG8pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9TY3JpcHQobyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIEdldHMgdGhlIHN5bnRheCBmb3IgdGhlIHNwYXduIG9mIGFuIGFub255bW91cyB0cmF2ZXJzYWwgd2hpY2ggaXMgdHJhZGl0aW9uYWxseSB0aGUgZG91YmxlIHVuZGVyc2NvcmUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0QW5vbnltb3VzVHJhdmVyc2FsUHJlZml4KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBBTk9OWU1PVVNfVFJBVkVSU0FMX1BSRUZJWDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBHZXRzIHRoZSBzeW50YXggZm9yIGEge0Bjb2RlIG51bGx9IHZhbHVlIGFzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldE51bGxTeW50YXgoKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSBzdHJpbmcgYXJndW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIHRhcmdldCBsYW5ndWFnZSAoaS5lLiBlc2NhcGUsCi0gICAgICAgICAgICAgKiBlbmNsb3NlIGluIGFwcHJvcHJpYXRlIHF1b3RlcywgZXRjLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTeW50YXgoZmluYWwgU3RyaW5nIG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIGJvb2xlYW4gYXJndW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIHRhcmdldCBsYW5ndWFnZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTeW50YXgoZmluYWwgQm9vbGVhbiBvKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSB7QGNvZGUgRGF0ZX0gYXJndW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIHRhcmdldCBsYW5ndWFnZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTeW50YXgoZmluYWwgRGF0ZSBvKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSB7QGNvZGUgT2Zmc2V0RGF0ZVRpbWV9IGFyZ3VtZW50IGFuZCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2UuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE9mZnNldERhdGVUaW1lIG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAY29kZSBUaW1lc3RhbXB9IGFyZ3VtZW50IGFuZCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2UuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFRpbWVzdGFtcCBvKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSB7QGNvZGUgVVVJRH0gYXJndW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIHRhcmdldCBsYW5ndWFnZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTeW50YXgoZmluYWwgVVVJRCBvKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSB7QGxpbmsgTGFtYmRhfSBhcmd1bWVudCBhbmQgY29udmVydCBpdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFN5bnRheChmaW5hbCBMYW1iZGEgbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0BsaW5rIFNhY2tGdW5jdGlvbnMuQmFycmllcn0gYXJndW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIHRhcmdldCBsYW5ndWFnZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTeW50YXgoZmluYWwgU2Fja0Z1bmN0aW9ucy5CYXJyaWVyIG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAbGluayBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eX0gYXJndW1lbnQgYW5kIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIHRhcmdldCBsYW5ndWFnZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRTeW50YXgoZmluYWwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkgbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0BsaW5rIFBpY2t9IGFyZ3VtZW50IGFuZCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2UuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFBpY2sgbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUgbnVtZXJpYyBhcmd1bWVudCBhbmQgY29udmVydCBpdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlLiBMYW5ndWFnZXMKLSAgICAgICAgICAgICAqIHRoYXQgY2FuIGRpc2Nlcm4gZGlmZmVyZW5jZXMgaW4gdHlwZXMgb2YgbnVtYmVycyB3aWxsIHdpc2ggdG8gZnVydGhlciBjaGVjayB0aGUgdHlwZSBvZiB0aGUKLSAgICAgICAgICAgICAqIHtAY29kZSBOdW1iZXJ9IGluc3RhbmNlIGl0c2VsZiAoaS5lLiB7QGNvZGUgRG91YmxlfSwge0Bjb2RlIEludGVnZXJ9LCBldGMuKQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU3RyaW5nIGdldFN5bnRheChmaW5hbCBOdW1iZXIgbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0Bjb2RlIFNldH0gYW5kIHdyaXRlcyB0aGUgc3ludGF4IGRpcmVjdGx5IHRvIHRoZSBtZW1iZXIge0BsaW5rICNzY3JpcHR9IHZhcmlhYmxlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgU2V0PD8+IG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAY29kZSBMaXN0fSBhbmQgd3JpdGVzIHRoZSBzeW50YXggZGlyZWN0bHkgdG8gdGhlIG1lbWJlciB7QGxpbmsgI3NjcmlwdH0gdmFyaWFibGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBMaXN0PD8+IG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAY29kZSBNYXB9IGFuZCB3cml0ZXMgdGhlIHN5bnRheCBkaXJlY3RseSB0byB0aGUgbWVtYmVyIHtAbGluayAjc2NyaXB0fSB2YXJpYWJsZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIE1hcDw/LD8+IG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAY29kZSBDbGFzc30gYW5kIHdyaXRlcyB0aGUgc3ludGF4IGRpcmVjdGx5IHRvIHRoZSBtZW1iZXIge0BsaW5rICNzY3JpcHR9IHZhcmlhYmxlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgQ2xhc3M8Pz4gbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0Bjb2RlIEVudW19IGFuZCB3cml0ZXMgdGhlIHN5bnRheCBkaXJlY3RseSB0byB0aGUgbWVtYmVyIHtAbGluayAjc2NyaXB0fSB2YXJpYWJsZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIEVudW08Pz4gbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0BsaW5rIFZlcnRleH0gYW5kIHdyaXRlcyB0aGUgc3ludGF4IGRpcmVjdGx5IHRvIHRoZSBtZW1iZXIge0BsaW5rICNzY3JpcHR9IHZhcmlhYmxlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVmVydGV4IG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAbGluayBFZGdlfSBhbmQgd3JpdGVzIHRoZSBzeW50YXggZGlyZWN0bHkgdG8gdGhlIG1lbWJlciB7QGxpbmsgI3NjcmlwdH0gdmFyaWFibGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBFZGdlIG8pOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRha2UgdGhlIHtAbGluayBWZXJ0ZXhQcm9wZXJ0eX0gYW5kIHdyaXRlcyB0aGUgc3ludGF4IGRpcmVjdGx5IHRvIHRoZSBtZW1iZXIge0BsaW5rICNzY3JpcHR9IHZhcmlhYmxlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVmVydGV4UHJvcGVydHk8Pz4gbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0BsaW5rIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHl9IGFuZCB3cml0ZXMgdGhlIHN5bnRheCBkaXJlY3RseSB0byB0aGUgbWVtYmVyIHtAbGluayAjc2NyaXB0fSB2YXJpYWJsZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHk8Pz4gbyk7Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGFrZSB0aGUge0BsaW5rIEJ5dGVjb2RlfSBhbmQgd3JpdGVzIHRoZSBzeW50YXggZGlyZWN0bHkgdG8gdGhlIG1lbWJlciB7QGxpbmsgI3NjcmlwdH0gdmFyaWFibGUuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBCeXRlY29kZSBvKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSB7QGxpbmsgUH0gYW5kIHdyaXRlcyB0aGUgc3ludGF4IGRpcmVjdGx5IHRvIHRoZSBtZW1iZXIge0BsaW5rICNzY3JpcHR9IHZhcmlhYmxlLiBUaGlzCi0gICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWxzbyBjb25zaWRlciB7QGxpbmsgVGV4dFB9LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgUDw/PiBwKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBUYWtlIHRoZSB7QGxpbmsgQnl0ZWNvZGV9IGFuZCB3cml0ZSB0aGUgc3ludGF4IGZvciBpdCBkaXJlY3RseSB0byB0aGUgbWVtYmVyIHtAbGluayAjc2NyaXB0fSB2YXJpYWJsZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFNjcmlwdCBwcm9kdWNlQ2FyZGluYWxpdHlWYWx1ZShmaW5hbCBCeXRlY29kZSBvKTsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiAgRm9yIGVhY2ggb3BlcmF0b3IgYXJndW1lbnQsIGlmIHdpdGhQYXJhbWV0ZXJzIHNldCB0cnVlLCB0cnkgcGFyYW1ldHJpemF0aW9uIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgKiAgaWYgdW5wYWNrLCB3aHkgPyAgICAgIE9iamVjdFR5cGUKLSAgICAgICAgICAgICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICogIChZZXMpICAgICAgICAgICAgICAgICBCeXRlY29kZS5CaW5kaW5nCi0gICAgICAgICAgICAgKiAgKFJlY3Vyc2lvbiwgTm8pICAgICAgIEJ5dGVjb2RlCi0gICAgICAgICAgICAgKiAgKFJlY3Vyc2lvbiwgTm8pICAgICAgIFRyYXZlcnNhbAotICAgICAgICAgICAgICogIChZZXMpICAgICAgICAgICAgICAgICBTdHJpbmcKLSAgICAgICAgICAgICAqICAoUmVjdXJzaW9uLCBObykgICAgICAgU2V0Ci0gICAgICAgICAgICAgKiAgKFJlY3Vyc2lvbiwgTm8pICAgICAgIExpc3QKLSAgICAgICAgICAgICAqICAoUmVjdXJzaW9uLCBObykgICAgICAgTWFwCi0gICAgICAgICAgICAgKiAgKFllcykgICAgICAgICAgICAgICAgIExvbmcKLSAgICAgICAgICAgICAqICAoWWVzKSAgICAgICAgICAgICAgICAgRG91YmxlCi0gICAgICAgICAgICAgKiAgKFllcykgICAgICAgICAgICAgICAgIEZsb2F0Ci0gICAgICAgICAgICAgKiAgKFllcykgICAgICAgICAgICAgICAgIEludGVnZXIKLSAgICAgICAgICAgICAqICAoWWVzKSAgICAgICAgICAgICAgICAgVGltZXN0YW1wCi0gICAgICAgICAgICAgKiAgKFllcykgICAgICAgICAgICAgICAgIERhdGUKLSAgICAgICAgICAgICAqICAoWWVzKSAgICAgICAgICAgICAgICAgVXVpZAotICAgICAgICAgICAgICogIChSZWN1cnNpb24sIE5vKSAgICAgICBQCi0gICAgICAgICAgICAgKiAgKEVudW1lcmF0aW9uLCBObykgICAgIFNhY2tGdW5jdGlvbnMuQmFycmllcgotICAgICAgICAgICAgICogIChFbnVtZXJhdGlvbiwgTm8pICAgICBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eQotICAgICAgICAgICAgICogIChFbnVtZXJhdGlvbiwgTm8pICAgICBUcmF2ZXJzYWxPcHRpb25QYXJlbnQuUGljawotICAgICAgICAgICAgICogIChFbnVtZXJhdGlvbiwgTm8pICAgICBFbnVtCi0gICAgICAgICAgICAgKiAgKFJlY3Vyc2lvbiwgTm8pICAgICAgIFZlcnRleAotICAgICAgICAgICAgICogIChSZWN1cnNpb24sIE5vKSAgICAgICBFZGdlCi0gICAgICAgICAgICAgKiAgKFJlY3Vyc2lvbiwgTm8pICAgICAgIFZlcnRleFByb3BlcnR5Ci0gICAgICAgICAgICAgKiAgKFllcykgICAgICAgICAgICAgICAgIExhbWJkYQotICAgICAgICAgICAgICogIChSZWN1cnNpb24sIE5vKSAgICAgICBUcmF2ZXJzYWxTdHJhdGVneVByb3h5Ci0gICAgICAgICAgICAgKiAgKEVudW1lcmF0aW9uLCBObykgICAgIFRyYXZlcnNhbFN0cmF0ZWd5Ci0gICAgICAgICAgICAgKiAgKFllcykgICAgICAgICAgICAgICAgIE90aGVyCi0gICAgICAgICAgICAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEBwYXJhbSBvYmplY3QKLSAgICAgICAgICAgICAqIEByZXR1cm4gU3RyaW5nIFJlcHJlcwotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IGNvbnZlcnRUb1NjcmlwdChmaW5hbCBPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIEJ5dGVjb2RlLkJpbmRpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5nZXRCb3VuZEtleU9yQXNzaWduKHdpdGhQYXJhbWV0ZXJzLCAoKEJ5dGVjb2RlLkJpbmRpbmcpIG9iamVjdCkudmFyaWFibGUoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCeXRlY29kZSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBCeXRlY29kZSBiYyA9IChCeXRlY29kZSkgb2JqZWN0OwotICAgICAgICAgICAgICAgICAgICBpZiAoYmMuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID09IDEgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYy5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCkuZ2V0T3BlcmF0b3IoKS5lcXVhbHMoQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbC5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZHVjZUNhcmRpbmFsaXR5VmFsdWUoYmMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2R1Y2VTY3JpcHQoZ2V0QW5vbnltb3VzVHJhdmVyc2FsUHJlZml4KCksIGJjKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9TY3JpcHQoKChUcmF2ZXJzYWwpIG9iamVjdCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBvYmplY3RPcldyYXBwZXIgPSB3aXRoUGFyYW1ldGVycyA/IG9iamVjdCA6IGdldFN5bnRheCgoU3RyaW5nKSBvYmplY3QpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmdldEJvdW5kS2V5T3JBc3NpZ24od2l0aFBhcmFtZXRlcnMsIG9iamVjdE9yV3JhcHBlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCb29sZWFuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBvYmplY3RPcldyYXBwZXIgPSB3aXRoUGFyYW1ldGVycyA/IG9iamVjdCA6IGdldFN5bnRheCgoQm9vbGVhbikgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5nZXRCb3VuZEtleU9yQXNzaWduKHdpdGhQYXJhbWV0ZXJzLCBvYmplY3RPcldyYXBwZXIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChTZXQ8Pz4pIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBMaXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChMaXN0PD8+KSBvYmplY3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChNYXA8PywgPz4pIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG9iamVjdE9yV3JhcHBlciA9IHdpdGhQYXJhbWV0ZXJzID8gb2JqZWN0IDogZ2V0U3ludGF4KChOdW1iZXIpIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuZ2V0Qm91bmRLZXlPckFzc2lnbih3aXRoUGFyYW1ldGVycywgb2JqZWN0T3JXcmFwcGVyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIENsYXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChDbGFzczw/Pikgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFRpbWVzdGFtcCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3Qgb2JqZWN0T3JXcmFwcGVyID0gd2l0aFBhcmFtZXRlcnMgPyBvYmplY3QgOiBnZXRTeW50YXgoKFRpbWVzdGFtcCkgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5nZXRCb3VuZEtleU9yQXNzaWduKHdpdGhQYXJhbWV0ZXJzLCBvYmplY3RPcldyYXBwZXIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgRGF0ZSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3Qgb2JqZWN0T3JXcmFwcGVyID0gd2l0aFBhcmFtZXRlcnMgPyBvYmplY3QgOiBnZXRTeW50YXgoKERhdGUpIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuZ2V0Qm91bmRLZXlPckFzc2lnbih3aXRoUGFyYW1ldGVycywgb2JqZWN0T3JXcmFwcGVyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE9mZnNldERhdGVUaW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBvYmplY3RPcldyYXBwZXIgPSB3aXRoUGFyYW1ldGVycyA/IG9iamVjdCA6IGdldFN5bnRheCgoT2Zmc2V0RGF0ZVRpbWUpIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuZ2V0Qm91bmRLZXlPckFzc2lnbih3aXRoUGFyYW1ldGVycywgb2JqZWN0T3JXcmFwcGVyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVVSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG9iamVjdE9yV3JhcHBlciA9IHdpdGhQYXJhbWV0ZXJzID8gb2JqZWN0IDogZ2V0U3ludGF4KChVVUlEKSBvYmplY3QpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmdldEJvdW5kS2V5T3JBc3NpZ24od2l0aFBhcmFtZXRlcnMsIG9iamVjdE9yV3JhcHBlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChQPD8+KSBvYmplY3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2Fja0Z1bmN0aW9ucy5CYXJyaWVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKGdldFN5bnRheCgoU2Fja0Z1bmN0aW9ucy5CYXJyaWVyKSBvYmplY3QpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKGdldFN5bnRheCgoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkpIG9iamVjdCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgUGljaykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZChnZXRTeW50YXgoKFBpY2spIG9iamVjdCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgRW51bSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdCgoRW51bTw/Pikgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFZlcnRleCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdCgoVmVydGV4KSBvYmplY3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgRWRnZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdCgoRWRnZSkgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFZlcnRleFByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChWZXJ0ZXhQcm9wZXJ0eTw/Pikgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIExhbWJkYSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3Qgb2JqZWN0T3JXcmFwcGVyID0gd2l0aFBhcmFtZXRlcnMgPyBvYmplY3QgOiBnZXRTeW50YXgoKExhbWJkYSkgb2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5nZXRCb3VuZEtleU9yQXNzaWduKHdpdGhQYXJhbWV0ZXJzLG9iamVjdE9yV3JhcHBlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9kdWNlU2NyaXB0KChUcmF2ZXJzYWxTdHJhdGVneVByb3h5PD8+KSBvYmplY3QpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVHJhdmVyc2FsU3RyYXRlZ3kpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1NjcmlwdChuZXcgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSgoKFRyYXZlcnNhbFN0cmF0ZWd5KSBvYmplY3QpKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGwgPT0gb2JqZWN0ID8gc2NyaXB0LmFwcGVuZChnZXROdWxsU3ludGF4KCkpIDogc2NyaXB0LmdldEJvdW5kS2V5T3JBc3NpZ24od2l0aFBhcmFtZXRlcnMsIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJhbnNsYXRlcyBieXRlY29kZSB0byBhY3R1YWwgc3RlcHMuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBTdGVwVHJhbnNsYXRvcjxTIGV4dGVuZHMgVHJhdmVyc2FsU291cmNlLCBUIGV4dGVuZHMgVHJhdmVyc2FsLkFkbWluPD8sID8+PiBleHRlbmRzIFRyYW5zbGF0b3I8UywgVD4gewotCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9UcmF2ZXJzYWwuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvVHJhdmVyc2FsLmphdmEKaW5kZXggZDdiNWUyMy4uY2YxOWQ3MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9UcmF2ZXJzYWwuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbC5qYXZhCkBAIC0zNSw2ICszNSw4IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuVHJhdmVyc2FsTWV0cmljczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNsb3NlYWJsZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5UcmF2ZXJzZXJTZXRTdXBwbGllcjsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC01Myw4ICs1NSw2IEBACiBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtU3VwcG9ydDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNsb3NlYWJsZUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5UcmF2ZXJzZXJTZXRTdXBwbGllcjsKIAogLyoqCiAgKiBBIHtAbGluayBUcmF2ZXJzYWx9IHJlcHJlc2VudHMgYSBkaXJlY3RlZCB3YWxrIG92ZXIgYSB7QGxpbmsgR3JhcGh9LgpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICogQHNpbmNlIDMuOC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgVHJhdmVyc2FsPFMsIEU+IGRpc2NhcmQoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmRpc2NhcmQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5kaXNjYXJkKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IERpc2NhcmRTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTIzMyw3ICsyMzMsNyBAQAogICAgICAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgdHJhdmVyc2FsIHdpdGggcmVzcGVjdGl2ZSB7QGxpbmsgUHJvZmlsZVNpZGVFZmZlY3RTdGVwfS4KICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBUcmF2ZXJzYWw8UywgVHJhdmVyc2FsTWV0cmljcz4gcHJvZmlsZSgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMucHJvZmlsZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnByb2ZpbGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkKICAgICAgICAgICAgICAgICAuYWRkU3RlcChuZXcgUHJvZmlsZVNpZGVFZmZlY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIFByb2ZpbGVTaWRlRWZmZWN0U3RlcC5ERUZBVUxUX01FVFJJQ1NfS0VZKSkKICAgICAgICAgICAgICAgICAuYWRkU3RlcChuZXcgU2lkZUVmZmVjdENhcFN0ZXA8T2JqZWN0LCBUcmF2ZXJzYWxNZXRyaWNzPih0aGlzLmFzQWRtaW4oKSwgUHJvZmlsZVNpZGVFZmZlY3RTdGVwLkRFRkFVTFRfTUVUUklDU19LRVkpKTsKQEAgLTMyMywxMSArMzIzLDExIEBACiAgICAgcHVibGljIGludGVyZmFjZSBBZG1pbjxTLCBFPiBleHRlbmRzIFRyYXZlcnNhbDxTLCBFPiB7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIEdldCB0aGUge0BsaW5rIEJ5dGVjb2RlfSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGlzIHRyYXZlcnNhbC4KKyAgICAgICAgICogR2V0IHRoZSB7QGxpbmsgR3JlbWxpbkxhbmd9IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uc3RydWN0aW9uIG9mIHRoaXMgdHJhdmVyc2FsLgogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIHRoZSBieXRlIGNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyYXZlcnNhbAogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ5dGVjb2RlIGdldEJ5dGVjb2RlKCk7CisgICAgICAgIHB1YmxpYyBHcmVtbGluTGFuZyBnZXRHcmVtbGluTGFuZygpOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBHZXQgdGhlIHtAbGluayBHVmFsdWVNYW5hZ2VyfSBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmF2ZXJzYWwuCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFNvdXJjZS5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9UcmF2ZXJzYWxTb3VyY2UuamF2YQppbmRleCBjMTkyYjFmLi45M2E0N2JiIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFNvdXJjZS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvVHJhdmVyc2FsU291cmNlLmphdmEKQEAgLTY0LDExICs2NCwxMSBAQAogICAgIHB1YmxpYyBHcmFwaCBnZXRHcmFwaCgpOwogCiAgICAgLyoqCi0gICAgICogR2V0IHRoZSB7QGxpbmsgQnl0ZWNvZGV9IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHRyYXZlcnNhbCBzb3VyY2UuCisgICAgICogR2V0IHRoZSB7QGxpbmsgR3JlbWxpbkxhbmd9IGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzIHRyYXZlcnNhbCBzb3VyY2UuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSB0cmF2ZXJzYWwgc291cmNlIGJ5dGUgY29kZQogICAgICAqLwotICAgIHB1YmxpYyBCeXRlY29kZSBnZXRCeXRlY29kZSgpOworICAgIHB1YmxpYyBHcmVtbGluTGFuZyBnZXRHcmVtbGluTGFuZygpOwogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgVHJhdmVyc2FsU291cmNlIHdpdGhTdHJhdGVnaWVzKGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5Li4uIHRyYXZlcnNhbFN0cmF0ZWdpZXMpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBjbG9uZS5nZXRTdHJhdGVnaWVzKCkuYWRkU3RyYXRlZ2llcyh0cmF2ZXJzYWxTdHJhdGVnaWVzKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFN0cmF0ZWdpZXMsIHRyYXZlcnNhbFN0cmF0ZWdpZXMpOworICAgICAgICBjbG9uZS5nZXRHcmVtbGluTGFuZygpLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU3RyYXRlZ2llcywgdHJhdmVyc2FsU3RyYXRlZ2llcyk7CiAgICAgICAgIGZvciAoZmluYWwgVHJhdmVyc2FsU3RyYXRlZ3kgdHJhdmVyc2FsU3RyYXRlZ3kgOiB0cmF2ZXJzYWxTdHJhdGVnaWVzKSB7CiAgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RyYXRlZ3kgaW5zdGFuY2VvZiBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpIHsKICAgICAgICAgICAgICAgICAoKFZlcnRleFByb2dyYW1TdHJhdGVneSkgdHJhdmVyc2FsU3RyYXRlZ3kpLmFkZEdyYXBoQ29tcHV0ZXJTdHJhdGVnaWVzKGNsb25lKTsKQEAgLTE0OSw3ICsxNDksNyBAQAogICAgIHB1YmxpYyBkZWZhdWx0IFRyYXZlcnNhbFNvdXJjZSB3aXRob3V0U3RyYXRlZ2llcyhmaW5hbCBDbGFzczw/IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3k+Li4uIHRyYXZlcnNhbFN0cmF0ZWd5Q2xhc3NlcykgewogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7CiAgICAgICAgIGNsb25lLmdldFN0cmF0ZWdpZXMoKS5yZW1vdmVTdHJhdGVnaWVzKHRyYXZlcnNhbFN0cmF0ZWd5Q2xhc3Nlcyk7Ci0gICAgICAgIGNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhvdXRTdHJhdGVnaWVzLCB0cmF2ZXJzYWxTdHJhdGVneUNsYXNzZXMpOworICAgICAgICBjbG9uZS5nZXRHcmVtbGluTGFuZygpLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRob3V0U3RyYXRlZ2llcywgdHJhdmVyc2FsU3RyYXRlZ3lDbGFzc2VzKTsKICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgIH0KIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgPEE+IFRyYXZlcnNhbFNvdXJjZSB3aXRoU2lkZUVmZmVjdChmaW5hbCBTdHJpbmcga2V5LCBmaW5hbCBTdXBwbGllcjxBPiBpbml0aWFsVmFsdWUsIGZpbmFsIEJpbmFyeU9wZXJhdG9yPEE+IHJlZHVjZXIpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBTaWRlRWZmZWN0U3RyYXRlZ3kuYWRkU2lkZUVmZmVjdChjbG9uZS5nZXRTdHJhdGVnaWVzKCksIGtleSwgKEEpIGluaXRpYWxWYWx1ZSwgcmVkdWNlcik7Ci0gICAgICAgIGNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTaWRlRWZmZWN0LCBrZXksIGluaXRpYWxWYWx1ZSwgcmVkdWNlcik7CisgICAgICAgIGNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTaWRlRWZmZWN0LCBrZXksIGluaXRpYWxWYWx1ZSwgcmVkdWNlcik7CiAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICB9CiAKQEAgLTIxMyw3ICsyMTMsNyBAQAogICAgIHB1YmxpYyBkZWZhdWx0IDxBPiBUcmF2ZXJzYWxTb3VyY2Ugd2l0aFNpZGVFZmZlY3QoZmluYWwgU3RyaW5nIGtleSwgZmluYWwgQSBpbml0aWFsVmFsdWUsIGZpbmFsIEJpbmFyeU9wZXJhdG9yPEE+IHJlZHVjZXIpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBTaWRlRWZmZWN0U3RyYXRlZ3kuYWRkU2lkZUVmZmVjdChjbG9uZS5nZXRTdHJhdGVnaWVzKCksIGtleSwgaW5pdGlhbFZhbHVlLCByZWR1Y2VyKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNpZGVFZmZlY3QsIGtleSwgaW5pdGlhbFZhbHVlLCByZWR1Y2VyKTsKKyAgICAgICAgY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNpZGVFZmZlY3QsIGtleSwgaW5pdGlhbFZhbHVlLCByZWR1Y2VyKTsKICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgIH0KIApAQCAtMjI4LDcgKzIyOCw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgPEE+IFRyYXZlcnNhbFNvdXJjZSB3aXRoU2lkZUVmZmVjdChmaW5hbCBTdHJpbmcga2V5LCBmaW5hbCBTdXBwbGllcjxBPiBpbml0aWFsVmFsdWUpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBTaWRlRWZmZWN0U3RyYXRlZ3kuYWRkU2lkZUVmZmVjdChjbG9uZS5nZXRTdHJhdGVnaWVzKCksIGtleSwgKEEpIGluaXRpYWxWYWx1ZSwgbnVsbCk7Ci0gICAgICAgIGNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTaWRlRWZmZWN0LCBrZXksIGluaXRpYWxWYWx1ZSk7CisgICAgICAgIGNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTaWRlRWZmZWN0LCBrZXksIGluaXRpYWxWYWx1ZSk7CiAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICB9CiAKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgIHB1YmxpYyBkZWZhdWx0IDxBPiBUcmF2ZXJzYWxTb3VyY2Ugd2l0aFNpZGVFZmZlY3QoZmluYWwgU3RyaW5nIGtleSwgZmluYWwgQSBpbml0aWFsVmFsdWUpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBTaWRlRWZmZWN0U3RyYXRlZ3kuYWRkU2lkZUVmZmVjdChjbG9uZS5nZXRTdHJhdGVnaWVzKCksIGtleSwgaW5pdGlhbFZhbHVlLCBudWxsKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNpZGVFZmZlY3QsIGtleSwgaW5pdGlhbFZhbHVlKTsKKyAgICAgICAgY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNpZGVFZmZlY3QsIGtleSwgaW5pdGlhbFZhbHVlKTsKICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgIH0KIApAQCAtMjU5LDcgKzI1OSw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgPEE+IFRyYXZlcnNhbFNvdXJjZSB3aXRoU2FjayhmaW5hbCBTdXBwbGllcjxBPiBpbml0aWFsVmFsdWUsIGZpbmFsIFVuYXJ5T3BlcmF0b3I8QT4gc3BsaXRPcGVyYXRvciwgZmluYWwgQmluYXJ5T3BlcmF0b3I8QT4gbWVyZ2VPcGVyYXRvcikgewogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7CiAgICAgICAgIGNsb25lLmdldFN0cmF0ZWdpZXMoKS5hZGRTdHJhdGVnaWVzKFNhY2tTdHJhdGVneS48QT5idWlsZCgpLmluaXRpYWxWYWx1ZShpbml0aWFsVmFsdWUpLnNwbGl0T3BlcmF0b3Ioc3BsaXRPcGVyYXRvcikubWVyZ2VPcGVyYXRvcihtZXJnZU9wZXJhdG9yKS5jcmVhdGUoKSk7Ci0gICAgICAgIGNsb25lLmdldEJ5dGVjb2RlKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTYWNrLCBpbml0aWFsVmFsdWUsIHNwbGl0T3BlcmF0b3IsIG1lcmdlT3BlcmF0b3IpOworICAgICAgICBjbG9uZS5nZXRHcmVtbGluTGFuZygpLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU2FjaywgaW5pdGlhbFZhbHVlLCBzcGxpdE9wZXJhdG9yLCBtZXJnZU9wZXJhdG9yKTsKICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgPEE+IFRyYXZlcnNhbFNvdXJjZSB3aXRoU2FjayhmaW5hbCBBIGluaXRpYWxWYWx1ZSwgZmluYWwgVW5hcnlPcGVyYXRvcjxBPiBzcGxpdE9wZXJhdG9yLCBmaW5hbCBCaW5hcnlPcGVyYXRvcjxBPiBtZXJnZU9wZXJhdG9yKSB7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKICAgICAgICAgY2xvbmUuZ2V0U3RyYXRlZ2llcygpLmFkZFN0cmF0ZWdpZXMoU2Fja1N0cmF0ZWd5LjxBPmJ1aWxkKCkuaW5pdGlhbFZhbHVlKG5ldyBDb25zdGFudFN1cHBsaWVyPD4oaW5pdGlhbFZhbHVlKSkuc3BsaXRPcGVyYXRvcihzcGxpdE9wZXJhdG9yKS5tZXJnZU9wZXJhdG9yKG1lcmdlT3BlcmF0b3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSwgc3BsaXRPcGVyYXRvciwgbWVyZ2VPcGVyYXRvcik7CisgICAgICAgIGNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTYWNrLCBpbml0aWFsVmFsdWUsIHNwbGl0T3BlcmF0b3IsIG1lcmdlT3BlcmF0b3IpOwogICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgfQogCkBAIC0yODksNyArMjg5LDcgQEAKICAgICBwdWJsaWMgZGVmYXVsdCA8QT4gVHJhdmVyc2FsU291cmNlIHdpdGhTYWNrKGZpbmFsIEEgaW5pdGlhbFZhbHVlKSB7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKICAgICAgICAgY2xvbmUuZ2V0U3RyYXRlZ2llcygpLmFkZFN0cmF0ZWdpZXMoU2Fja1N0cmF0ZWd5LjxBPmJ1aWxkKCkuaW5pdGlhbFZhbHVlKG5ldyBDb25zdGFudFN1cHBsaWVyPD4oaW5pdGlhbFZhbHVlKSkuY3JlYXRlKCkpOwotICAgICAgICBjbG9uZS5nZXRCeXRlY29kZSgpLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU2FjaywgaW5pdGlhbFZhbHVlKTsKKyAgICAgICAgY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSk7CiAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICB9CiAKQEAgLTMwMyw3ICszMDMsNyBAQAogICAgIHB1YmxpYyBkZWZhdWx0IDxBPiBUcmF2ZXJzYWxTb3VyY2Ugd2l0aFNhY2soZmluYWwgU3VwcGxpZXI8QT4gaW5pdGlhbFZhbHVlKSB7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKICAgICAgICAgY2xvbmUuZ2V0U3RyYXRlZ2llcygpLmFkZFN0cmF0ZWdpZXMoU2Fja1N0cmF0ZWd5LjxBPmJ1aWxkKCkuaW5pdGlhbFZhbHVlKGluaXRpYWxWYWx1ZSkuY3JlYXRlKCkpOwotICAgICAgICBjbG9uZS5nZXRCeXRlY29kZSgpLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU2FjaywgaW5pdGlhbFZhbHVlKTsKKyAgICAgICAgY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSk7CiAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICB9CiAKQEAgLTMxOCw3ICszMTgsNyBAQAogICAgIHB1YmxpYyBkZWZhdWx0IDxBPiBUcmF2ZXJzYWxTb3VyY2Ugd2l0aFNhY2soZmluYWwgU3VwcGxpZXI8QT4gaW5pdGlhbFZhbHVlLCBmaW5hbCBVbmFyeU9wZXJhdG9yPEE+IHNwbGl0T3BlcmF0b3IpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBjbG9uZS5nZXRTdHJhdGVnaWVzKCkuYWRkU3RyYXRlZ2llcyhTYWNrU3RyYXRlZ3kuPEE+YnVpbGQoKS5pbml0aWFsVmFsdWUoaW5pdGlhbFZhbHVlKS5zcGxpdE9wZXJhdG9yKHNwbGl0T3BlcmF0b3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSwgc3BsaXRPcGVyYXRvcik7CisgICAgICAgIGNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTYWNrLCBpbml0aWFsVmFsdWUsIHNwbGl0T3BlcmF0b3IpOwogICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgfQogCkBAIC0zMzMsNyArMzMzLDcgQEAKICAgICBwdWJsaWMgZGVmYXVsdCA8QT4gVHJhdmVyc2FsU291cmNlIHdpdGhTYWNrKGZpbmFsIEEgaW5pdGlhbFZhbHVlLCBmaW5hbCBVbmFyeU9wZXJhdG9yPEE+IHNwbGl0T3BlcmF0b3IpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBjbG9uZS5nZXRTdHJhdGVnaWVzKCkuYWRkU3RyYXRlZ2llcyhTYWNrU3RyYXRlZ3kuPEE+YnVpbGQoKS5pbml0aWFsVmFsdWUobmV3IENvbnN0YW50U3VwcGxpZXI8Pihpbml0aWFsVmFsdWUpKS5zcGxpdE9wZXJhdG9yKHNwbGl0T3BlcmF0b3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSwgc3BsaXRPcGVyYXRvcik7CisgICAgICAgIGNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTYWNrLCBpbml0aWFsVmFsdWUsIHNwbGl0T3BlcmF0b3IpOwogICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgfQogCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAgICBwdWJsaWMgZGVmYXVsdCA8QT4gVHJhdmVyc2FsU291cmNlIHdpdGhTYWNrKGZpbmFsIFN1cHBsaWVyPEE+IGluaXRpYWxWYWx1ZSwgZmluYWwgQmluYXJ5T3BlcmF0b3I8QT4gbWVyZ2VPcGVyYXRvcikgewogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7CiAgICAgICAgIGNsb25lLmdldFN0cmF0ZWdpZXMoKS5hZGRTdHJhdGVnaWVzKFNhY2tTdHJhdGVneS48QT5idWlsZCgpLmluaXRpYWxWYWx1ZShpbml0aWFsVmFsdWUpLm1lcmdlT3BlcmF0b3IobWVyZ2VPcGVyYXRvcikuY3JlYXRlKCkpOwotICAgICAgICBjbG9uZS5nZXRCeXRlY29kZSgpLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU2FjaywgaW5pdGlhbFZhbHVlLCBtZXJnZU9wZXJhdG9yKTsKKyAgICAgICAgY2xvbmUuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSwgbWVyZ2VPcGVyYXRvcik7CiAgICAgICAgIHJldHVybiBjbG9uZTsKICAgICB9CiAKQEAgLTM2Myw3ICszNjMsNyBAQAogICAgIHB1YmxpYyBkZWZhdWx0IDxBPiBUcmF2ZXJzYWxTb3VyY2Ugd2l0aFNhY2soZmluYWwgQSBpbml0aWFsVmFsdWUsIGZpbmFsIEJpbmFyeU9wZXJhdG9yPEE+IG1lcmdlT3BlcmF0b3IpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwogICAgICAgICBjbG9uZS5nZXRTdHJhdGVnaWVzKCkuYWRkU3RyYXRlZ2llcyhTYWNrU3RyYXRlZ3kuPEE+YnVpbGQoKS5pbml0aWFsVmFsdWUobmV3IENvbnN0YW50U3VwcGxpZXI8Pihpbml0aWFsVmFsdWUpKS5tZXJnZU9wZXJhdG9yKG1lcmdlT3BlcmF0b3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgY2xvbmUuZ2V0Qnl0ZWNvZGUoKS5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIGluaXRpYWxWYWx1ZSwgbWVyZ2VPcGVyYXRvcik7CisgICAgICAgIGNsb25lLmdldEdyZW1saW5MYW5nKCkuYWRkU291cmNlKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTYWNrLCBpbml0aWFsVmFsdWUsIG1lcmdlT3BlcmF0b3IpOwogICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgfQogCkBAIC0zNzMsNyArMzczLDcgQEAKIAogICAgIC8qKgogICAgICAqIFRoZSBjbG9uZS1tZXRob2Qgc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGltbXV0YWJsZSB0cmF2ZXJzYWwgc291cmNlcyB3aXRoIGVhY2ggY2FsbCB0byBhIGNvbmZpZ3VyYXRpb24gIndpdGhYWFgiLW1ldGhvZC4KLSAgICAgKiBUaGUgY2xvbmUtbWV0aG9kIHNob3VsZCBjbG9uZSB0aGUge0BsaW5rIEJ5dGVjb2RlfSwge0BsaW5rIFRyYXZlcnNhbFN0cmF0ZWdpZXN9LCBtdXRhdGUgdGhlIGNsb25lZCBzdHJhdGVnaWVzIGFjY29yZGluZ2x5LAorICAgICAqIFRoZSBjbG9uZS1tZXRob2Qgc2hvdWxkIGNsb25lIHRoZSB7QGxpbmsgR3JlbWxpbkxhbmd9LCB7QGxpbmsgVHJhdmVyc2FsU3RyYXRlZ2llc30sIG11dGF0ZSB0aGUgY2xvbmVkIHN0cmF0ZWdpZXMgYWNjb3JkaW5nbHksCiAgICAgICogYW5kIHRoZW4gcmV0dXJuIHRoZSBjbG9uZWQgdHJhdmVyc2FsIHNvdXJjZSBsZWF2aW5nIHRoZSBvcmlnaW5hbCB1bmFsdGVyZWQuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSBjbG9uZWQgdHJhdmVyc2FsIHNvdXJjZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9UcmF2ZXJzYWxTdHJhdGVnaWVzLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFN0cmF0ZWdpZXMuamF2YQppbmRleCBiMjMyNjg5Li5iY2NiOTgzIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFN0cmF0ZWdpZXMuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFN0cmF0ZWdpZXMuamF2YQpAQCAtMzcsOSArMzcsOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLlByb2ZpbGVTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5SZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3k7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Db3VudFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkVhcmx5TGltaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkZpbHRlclJhbmtpbmdTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5HVmFsdWVSZWR1Y3Rpb25TdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JZGVudGl0eVJlbW92YWxTdHJhdGVneTsKQEAgLTYxLDggKzYxLDggQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NdWx0aU1hcDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKIAogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9ncmFwaC9HcmFwaFRyYXZlcnNhbC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWwuamF2YQppbmRleCA2YzRjOTAyLi5jNDI4NTlmIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9ncmFwaC9HcmFwaFRyYXZlcnNhbC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsLmphdmEKQEAgLTI4NSw3ICsyODUsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gbWFwKGZpbmFsIEZ1bmN0aW9uPFRyYXZlcnNlcjxFPiwgRTI+IGZ1bmN0aW9uKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1hcCwgZnVuY3Rpb24pOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tYXAsIGZ1bmN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IExhbWJkYU1hcFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgZnVuY3Rpb24pKTsKICAgICB9CiAKQEAgLTI5OCw3ICsyOTgsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gbWFwKGZpbmFsIFRyYXZlcnNhbDw/LCBFMj4gbWFwVHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1hcCwgbWFwVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMubWFwLCBtYXBUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJhdmVyc2FsTWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBtYXBUcmF2ZXJzYWwpKTsKICAgICB9CiAKQEAgLTMxMyw3ICszMTMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gZmxhdE1hcChmaW5hbCBGdW5jdGlvbjxUcmF2ZXJzZXI8RT4sIEl0ZXJhdG9yPEUyPj4gZnVuY3Rpb24pIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZmxhdE1hcCwgZnVuY3Rpb24pOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5mbGF0TWFwLCBmdW5jdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBMYW1iZGFGbGF0TWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBmdW5jdGlvbikpOwogICAgIH0KIApAQCAtMzI4LDcgKzMyOCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBmbGF0TWFwKGZpbmFsIFRyYXZlcnNhbDw/LCBFMj4gZmxhdE1hcFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5mbGF0TWFwLCBmbGF0TWFwVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZmxhdE1hcCwgZmxhdE1hcFRyYXZlcnNhbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUcmF2ZXJzYWxGbGF0TWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBmbGF0TWFwVHJhdmVyc2FsKSk7CiAgICAgfQogCkBAIC0zNDAsNyArMzQwLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIE9iamVjdD4gaWQoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmlkKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaWQpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgSWRTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiBsYWJlbCgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubGFiZWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5sYWJlbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBMYWJlbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMzYzLDcgKzM2Myw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBpZGVudGl0eSgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaWRlbnRpdHkpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5pZGVudGl0eSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBJZGVudGl0eVN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMzc1LDcgKzM3NSwxOSBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gY29uc3RhbnQoZmluYWwgRTIgZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jb25zdGFudCwgZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNvbnN0YW50LCBlKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IENvbnN0YW50U3RlcDxFLCBFMj4odGhpcy5hc0FkbWluKCksIGUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYXAgYW55IG9iamVjdCB0byBhIGZpeGVkIDxjb2RlPkU8L2NvZGU+IHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIGZvciAgcGFyYW1ldGVyaXphdGlvbiBmZWF0dXJlcy4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbCB3aXRoIGFuIGFwcGVuZGVkIHtAbGluayBDb25zdGFudFN0ZXB9LgorICAgICAqIEBzZWUgPGEgaHJlZj0iaHR0cDovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvJHtwcm9qZWN0LnZlcnNpb259L3JlZmVyZW5jZS8jY29uc3RhbnQtc3RlcCIgdGFyZ2V0PSJfYmxhbmsiPlJlZmVyZW5jZSBEb2N1bWVudGF0aW9uIC0gQ29uc3RhbnQgU3RlcDwvYT4KKyAgICAgKiBAc2luY2UgNC4wLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBjb25zdGFudChmaW5hbCBHVmFsdWU8RTI+IGUpIHsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY29uc3RhbnQsIGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ29uc3RhbnRTdGVwPEUsIEUyPih0aGlzLmFzQWRtaW4oKSwgZSkpOwogICAgIH0KIApAQCAtMzkwLDcgKzQwMiw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBWKGZpbmFsIE9iamVjdC4uLiB2ZXJ0ZXhJZHNPckVsZW1lbnRzKSB7CiAgICAgICAgIC8vIGEgc2luZ2xlIG51bGwgaXMgW251bGxdCiAgICAgICAgIGZpbmFsIE9iamVjdFtdIGlkcyA9IG51bGwgPT0gdmVydGV4SWRzT3JFbGVtZW50cyA/IG5ldyBPYmplY3RbXSB7IG51bGwgfSA6IHZlcnRleElkc09yRWxlbWVudHM7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLlYsIGlkcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLlYsIGlkcyk7CiAKICAgICAgICAgR3JhcGhTdGVwQ29udHJhY3Q8RSwgVmVydGV4PiBzdGVwOwogICAgICAgICBpZiAoR1ZhbHVlLmNvbnRhaW5zR1ZhbHVlcyhpZHMpKSB7CkBAIC00MTMsNyArNDI1LDcgQEAKICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBFKGZpbmFsIE9iamVjdC4uLiBlZGdlSWRzT3JFbGVtZW50cykgewogICAgICAgICAvLyBhIHNpbmdsZSBudWxsIGlzIFtudWxsXQogICAgICAgICBmaW5hbCBPYmplY3RbXSBpZHMgPSBudWxsID09IGVkZ2VJZHNPckVsZW1lbnRzID8gbmV3IE9iamVjdFtdIHsgbnVsbCB9IDogZWRnZUlkc09yRWxlbWVudHM7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLkUsIGlkcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLkUsIGlkcyk7CiAKICAgICAgICAgR3JhcGhTdGVwQ29udHJhY3Q8RSwgRWRnZT4gc3RlcDsKICAgICAgICAgaWYgKEdWYWx1ZS5jb250YWluc0dWYWx1ZXMoaWRzKSkgewpAQCAtNDQ3LDcgKzQ1OSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IHRvKGZpbmFsIERpcmVjdGlvbiBkaXJlY3Rpb24sIGZpbmFsIFN0cmluZy4uLiBlZGdlTGFiZWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnRvLCBkaXJlY3Rpb24sIGVkZ2VMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy50bywgZGlyZWN0aW9uLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgVmVydGV4LmNsYXNzLCBkaXJlY3Rpb24sIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTQ2NSw3ICs0NzcsNyBAQAogICAgICAgICBpZiAoZWRnZUxhYmVscy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIHRvKGRpcmVjdGlvbik7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudG8sIGRpcmVjdGlvbiwgZWRnZUxhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRvLCBkaXJlY3Rpb24sIGVkZ2VMYWJlbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVmVydGV4U3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIFZlcnRleC5jbGFzcywgZGlyZWN0aW9uLCBlZGdlTGFiZWxzKSk7CiAgICAgfQogCkBAIC00ODksNyArNTAxLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIFZlcnRleD4gb3V0KGZpbmFsIFN0cmluZy4uLiBlZGdlTGFiZWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm91dCwgZWRnZUxhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm91dCwgZWRnZUxhYmVscyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBWZXJ0ZXhTdGVwPD4odGhpcy5hc0FkbWluKCksIFZlcnRleC5jbGFzcywgRGlyZWN0aW9uLk9VVCwgZWRnZUxhYmVscykpOwogICAgIH0KIApAQCAtNTA3LDcgKzUxOSw3IEBACiAgICAgICAgIGlmIChlZGdlTGFiZWxzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICByZXR1cm4gb3V0KCk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3V0LCBlZGdlTGFiZWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3V0LCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBWZXJ0ZXguY2xhc3MsIERpcmVjdGlvbi5PVVQsIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTUzMiw3ICs1NDQsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBpbihmaW5hbCBTdHJpbmcuLi4gZWRnZUxhYmVscykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5pbiwgZWRnZUxhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmluLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgVmVydGV4LmNsYXNzLCBEaXJlY3Rpb24uSU4sIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTU0OSw3ICs1NjEsNyBAQAogICAgICAgICBpZiAoZWRnZUxhYmVscy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIGluKCk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW4sIGVkZ2VMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pbiwgZWRnZUxhYmVscyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgVmVydGV4LmNsYXNzLCBEaXJlY3Rpb24uSU4sIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTU3Myw3ICs1ODUsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBib3RoKGZpbmFsIFN0cmluZy4uLiBlZGdlTGFiZWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmJvdGgsIGVkZ2VMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5ib3RoLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgVmVydGV4LmNsYXNzLCBEaXJlY3Rpb24uQk9USCwgZWRnZUxhYmVscykpOwogICAgIH0KIApAQCAtNTkwLDcgKzYwMiw3IEBACiAgICAgICAgIGlmIChlZGdlTGFiZWxzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICByZXR1cm4gYm90aCgpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJvdGgsIGVkZ2VMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5ib3RoLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBWZXJ0ZXguY2xhc3MsIERpcmVjdGlvbi5CT1RILCBlZGdlTGFiZWxzKSk7CiAgICAgfQogCkBAIC02MTYsNyArNjI4LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEVkZ2U+IHRvRShmaW5hbCBEaXJlY3Rpb24gZGlyZWN0aW9uLCBmaW5hbCBTdHJpbmcuLi4gZWRnZUxhYmVscykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50b0UsIGRpcmVjdGlvbiwgZWRnZUxhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRvRSwgZGlyZWN0aW9uLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgRWRnZS5jbGFzcywgZGlyZWN0aW9uLCBlZGdlTGFiZWxzKSk7CiAgICAgfQogCkBAIC02MzUsNyArNjQ3LDcgQEAKICAgICAgICAgaWYgKGVkZ2VMYWJlbHMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgIHJldHVybiB0b0UoZGlyZWN0aW9uKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50b0UsIGRpcmVjdGlvbiwgZWRnZUxhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRvRSwgZGlyZWN0aW9uLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBFZGdlLmNsYXNzLCBkaXJlY3Rpb24sIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTY1OSw3ICs2NzEsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRWRnZT4gb3V0RShmaW5hbCBTdHJpbmcuLi4gZWRnZUxhYmVscykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5vdXRFLCBlZGdlTGFiZWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMub3V0RSwgZWRnZUxhYmVscyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBWZXJ0ZXhTdGVwPD4odGhpcy5hc0FkbWluKCksIEVkZ2UuY2xhc3MsIERpcmVjdGlvbi5PVVQsIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTY3Niw3ICs2ODgsNyBAQAogICAgICAgICBpZiAoZWRnZUxhYmVscy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIG91dEUoKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5vdXRFLCBlZGdlTGFiZWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3V0RSwgZWRnZUxhYmVscyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgRWRnZS5jbGFzcywgRGlyZWN0aW9uLk9VVCwgZWRnZUxhYmVscykpOwogICAgIH0KIApAQCAtNzAwLDcgKzcxMiw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBpbkUoZmluYWwgU3RyaW5nLi4uIGVkZ2VMYWJlbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaW5FLCBlZGdlTGFiZWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaW5FLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgRWRnZS5jbGFzcywgRGlyZWN0aW9uLklOLCBlZGdlTGFiZWxzKSk7CiAgICAgfQogCkBAIC03MTgsNyArNzMwLDcgQEAKICAgICAgICAgaWYgKGVkZ2VMYWJlbHMubGVuZ3RoID09IDApIHsKICAgICAgICAgICAgIHJldHVybiBpbkUoKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pbkUsIGVkZ2VMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pbkUsIGVkZ2VMYWJlbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVmVydGV4U3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIEVkZ2UuY2xhc3MsIERpcmVjdGlvbi5JTiwgZWRnZUxhYmVscykpOwogICAgIH0KIApAQCAtNzQyLDcgKzc1NCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBib3RoRShmaW5hbCBTdHJpbmcuLi4gZWRnZUxhYmVscykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ib3RoRSwgZWRnZUxhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJvdGhFLCBlZGdlTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFZlcnRleFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgRWRnZS5jbGFzcywgRGlyZWN0aW9uLkJPVEgsIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTc1OSw3ICs3NzEsNyBAQAogICAgICAgICBpZiAoZWRnZUxhYmVscy5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIGJvdGhFKCk7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYm90aEUsIGVkZ2VMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5ib3RoRSwgZWRnZUxhYmVscyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgRWRnZS5jbGFzcywgRGlyZWN0aW9uLkJPVEgsIGVkZ2VMYWJlbHMpKTsKICAgICB9CiAKQEAgLTc3Miw3ICs3ODQsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiB0b1YoZmluYWwgRGlyZWN0aW9uIGRpcmVjdGlvbikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50b1YsIGRpcmVjdGlvbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRvViwgZGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEVkZ2VWZXJ0ZXhTdGVwKHRoaXMuYXNBZG1pbigpLCBkaXJlY3Rpb24pKTsKICAgICB9CiAKQEAgLTc4NCw3ICs3OTYsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBpblYoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmluVik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmluVik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBFZGdlVmVydGV4U3RlcCh0aGlzLmFzQWRtaW4oKSwgRGlyZWN0aW9uLklOKSk7CiAgICAgfQogCkBAIC03OTYsNyArODA4LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIFZlcnRleD4gb3V0VigpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMub3V0Vik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm91dFYpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRWRnZVZlcnRleFN0ZXAodGhpcy5hc0FkbWluKCksIERpcmVjdGlvbi5PVVQpKTsKICAgICB9CiAKQEAgLTgwOCw3ICs4MjAsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBib3RoVigpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYm90aFYpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5ib3RoVik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBFZGdlVmVydGV4U3RlcCh0aGlzLmFzQWRtaW4oKSwgRGlyZWN0aW9uLkJPVEgpKTsKICAgICB9CiAKQEAgLTgyMCw3ICs4MzIsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBvdGhlclYoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm90aGVyVik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm90aGVyVik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBFZGdlT3RoZXJWZXJ0ZXhTdGVwKHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC04MzIsNyArODQ0LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IG9yZGVyKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5vcmRlcik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm9yZGVyKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IE9yZGVyR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC04NDUsNyArODU3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IG9yZGVyKGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm9yZGVyLCBzY29wZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm9yZGVyLCBzY29wZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpID8gbmV3IE9yZGVyR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSA6IG5ldyBPcmRlckxvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC04NjAsNyArODcyLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgPyBleHRlbmRzIFByb3BlcnR5PEUyPj4gcHJvcGVydGllcyhmaW5hbCBTdHJpbmcuLi4gcHJvcGVydHlLZXlzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnByb3BlcnRpZXMsIHByb3BlcnR5S2V5cyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnByb3BlcnRpZXMsIHByb3BlcnR5S2V5cyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBQcm9wZXJ0aWVzU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBQcm9wZXJ0eVR5cGUuUFJPUEVSVFksIHByb3BlcnR5S2V5cykpOwogICAgIH0KIApAQCAtODc1LDcgKzg4Nyw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiB2YWx1ZXMoZmluYWwgU3RyaW5nLi4uIHByb3BlcnR5S2V5cykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy52YWx1ZXMsIHByb3BlcnR5S2V5cyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnZhbHVlcywgcHJvcGVydHlLZXlzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFByb3BlcnRpZXNTdGVwPD4odGhpcy5hc0FkbWluKCksIFByb3BlcnR5VHlwZS5WQUxVRSwgcHJvcGVydHlLZXlzKSk7CiAgICAgfQogCkBAIC04OTAsNyArOTAyLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgTWFwPFN0cmluZywgRTI+PiBwcm9wZXJ0eU1hcChmaW5hbCBTdHJpbmcuLi4gcHJvcGVydHlLZXlzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnByb3BlcnR5TWFwLCBwcm9wZXJ0eUtleXMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5wcm9wZXJ0eU1hcCwgcHJvcGVydHlLZXlzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFByb3BlcnR5TWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBXaXRoT3B0aW9ucy5ub25lLCBQcm9wZXJ0eVR5cGUuUFJPUEVSVFksIHByb3BlcnR5S2V5cykpOwogICAgIH0KIApAQCAtOTA5LDcgKzkyMSw3IEBACiAgICAgICogQHNpbmNlIDMuNC40CiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBNYXA8T2JqZWN0LCBFMj4+IGVsZW1lbnRNYXAoZmluYWwgU3RyaW5nLi4uIHByb3BlcnR5S2V5cykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5lbGVtZW50TWFwLCBwcm9wZXJ0eUtleXMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5lbGVtZW50TWFwLCBwcm9wZXJ0eUtleXMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRWxlbWVudE1hcFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgcHJvcGVydHlLZXlzKSk7CiAgICAgfQogCkBAIC05MjQsNyArOTM2LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgTWFwPE9iamVjdCwgRTI+PiB2YWx1ZU1hcChmaW5hbCBTdHJpbmcuLi4gcHJvcGVydHlLZXlzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnZhbHVlTWFwLCBwcm9wZXJ0eUtleXMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy52YWx1ZU1hcCwgcHJvcGVydHlLZXlzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFByb3BlcnR5TWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBXaXRoT3B0aW9ucy5ub25lLCBQcm9wZXJ0eVR5cGUuVkFMVUUsIHByb3BlcnR5S2V5cykpOwogICAgIH0KIApAQCAtOTQzLDcgKzk1NSw3IEBACiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIE1hcDxPYmplY3QsIEUyPj4gdmFsdWVNYXAoZmluYWwgYm9vbGVhbiBpbmNsdWRlVG9rZW5zLCBmaW5hbCBTdHJpbmcuLi4gcHJvcGVydHlLZXlzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnZhbHVlTWFwLCBpbmNsdWRlVG9rZW5zLCBwcm9wZXJ0eUtleXMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy52YWx1ZU1hcCwgaW5jbHVkZVRva2VucywgcHJvcGVydHlLZXlzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFByb3BlcnR5TWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBXaXRoT3B0aW9ucy5hbGwsIFByb3BlcnR5VHlwZS5WQUxVRSwgcHJvcGVydHlLZXlzKSk7CiAgICAgfQogCkBAIC05NTUsNyArOTY3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIFN0cmluZz4ga2V5KCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5rZXkpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5rZXkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgUHJvcGVydHlLZXlTdGVwKHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC05NjcsNyArOTc5LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHZhbHVlKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy52YWx1ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFByb3BlcnR5VmFsdWVTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTk3OSw3ICs5OTEsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgUGF0aD4gcGF0aCgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMucGF0aCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnBhdGgpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgUGF0aFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtOTkzLDcgKzEwMDUsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBNYXA8U3RyaW5nLCBFMj4+IG1hdGNoKGZpbmFsIFRyYXZlcnNhbDw/LCA/Pi4uLiBtYXRjaFRyYXZlcnNhbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubWF0Y2gsIG1hdGNoVHJhdmVyc2Fscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm1hdGNoLCBtYXRjaFRyYXZlcnNhbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTWF0Y2hTdGVwPD4odGhpcy5hc0FkbWluKCksIENvbm5lY3RpdmVTdGVwLkNvbm5lY3RpdmUuQU5ELCBtYXRjaFRyYXZlcnNhbHMpKTsKICAgICB9CiAKQEAgLTEwMDYsNyArMTAxOCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBzYWNrKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zYWNrKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc2Fjayk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBTYWNrU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMDE5LDcgKzEwMzEsNyBAQAogICAgICAqIEBzaW5jZSAzLjEuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgSW50ZWdlcj4gbG9vcHMoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmxvb3BzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMubG9vcHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTG9vcHNTdGVwPD4odGhpcy5hc0FkbWluKCksIG51bGwpKTsKICAgICB9CiAKQEAgLTEwMzIsNyArMTA0NCw3IEBACiAgICAgICogQHNpbmNlIDMuNC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgSW50ZWdlcj4gbG9vcHMoZmluYWwgU3RyaW5nIGxvb3BOYW1lKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmxvb3BzLCBsb29wTmFtZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmxvb3BzLCBsb29wTmFtZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBMb29wc1N0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbG9vcE5hbWUpKTsKICAgICB9CiAKQEAgLTEwNDcsNyArMTA1OSw3IEBACiAgICAgICAgIGZpbmFsIFN0cmluZ1tdIHByb2plY3RLZXlzID0gbmV3IFN0cmluZ1tvdGhlclByb2plY3RLZXlzLmxlbmd0aCArIDFdOwogICAgICAgICBwcm9qZWN0S2V5c1swXSA9IHByb2plY3RLZXk7CiAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkob3RoZXJQcm9qZWN0S2V5cywgMCwgcHJvamVjdEtleXMsIDEsIG90aGVyUHJvamVjdEtleXMubGVuZ3RoKTsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMucHJvamVjdCwgcHJvamVjdEtleSwgb3RoZXJQcm9qZWN0S2V5cyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnByb2plY3QsIHByb2plY3RLZXksIG90aGVyUHJvamVjdEtleXMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgUHJvamVjdFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgcHJvamVjdEtleXMpKTsKICAgICB9CiAKQEAgLTEwNjgsNyArMTA4MCw3IEBACiAgICAgICAgIHNlbGVjdEtleXNbMF0gPSBzZWxlY3RLZXkxOwogICAgICAgICBzZWxlY3RLZXlzWzFdID0gc2VsZWN0S2V5MjsKICAgICAgICAgU3lzdGVtLmFycmF5Y29weShvdGhlclNlbGVjdEtleXMsIDAsIHNlbGVjdEtleXMsIDIsIG90aGVyU2VsZWN0S2V5cy5sZW5ndGgpOwotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zZWxlY3QsIHBvcCwgc2VsZWN0S2V5MSwgc2VsZWN0S2V5Miwgb3RoZXJTZWxlY3RLZXlzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc2VsZWN0LCBwb3AsIHNlbGVjdEtleTEsIHNlbGVjdEtleTIsIG90aGVyU2VsZWN0S2V5cyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBTZWxlY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIHBvcCwgc2VsZWN0S2V5cykpOwogICAgIH0KIApAQCAtMTA4OCw3ICsxMTAwLDcgQEAKICAgICAgICAgc2VsZWN0S2V5c1swXSA9IHNlbGVjdEtleTE7CiAgICAgICAgIHNlbGVjdEtleXNbMV0gPSBzZWxlY3RLZXkyOwogICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG90aGVyU2VsZWN0S2V5cywgMCwgc2VsZWN0S2V5cywgMiwgb3RoZXJTZWxlY3RLZXlzLmxlbmd0aCk7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNlbGVjdCwgc2VsZWN0S2V5MSwgc2VsZWN0S2V5Miwgb3RoZXJTZWxlY3RLZXlzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc2VsZWN0LCBzZWxlY3RLZXkxLCBzZWxlY3RLZXkyLCBvdGhlclNlbGVjdEtleXMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgU2VsZWN0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCBQb3AubGFzdCwgc2VsZWN0S2V5cykpOwogICAgIH0KIApAQCAtMTEwMiw3ICsxMTE0LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHNlbGVjdChmaW5hbCBQb3AgcG9wLCBmaW5hbCBTdHJpbmcgc2VsZWN0S2V5KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNlbGVjdCwgcG9wLCBzZWxlY3RLZXkpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zZWxlY3QsIHBvcCwgc2VsZWN0S2V5KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFNlbGVjdE9uZVN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgcG9wLCBzZWxlY3RLZXkpKTsKICAgICB9CiAKQEAgLTExMTcsNyArMTEyOSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBzZWxlY3QoZmluYWwgU3RyaW5nIHNlbGVjdEtleSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zZWxlY3QsIHNlbGVjdEtleSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnNlbGVjdCwgc2VsZWN0S2V5KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFNlbGVjdE9uZVN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgUG9wLmxhc3QsIHNlbGVjdEtleSkpOwogICAgIH0KIApAQCAtMTEzMSw3ICsxMTQzLDcgQEAKICAgICAgKiBAc2luY2UgMy4zLjMKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBzZWxlY3QoZmluYWwgUG9wIHBvcCwgZmluYWwgVHJhdmVyc2FsPFMsIEUyPiBrZXlUcmF2ZXJzYWwpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc2VsZWN0LCBwb3AsIGtleVRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnNlbGVjdCwgcG9wLCBrZXlUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJhdmVyc2FsU2VsZWN0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCBwb3AsIGtleVRyYXZlcnNhbCkpOwogICAgIH0KIApAQCAtMTE0Niw3ICsxMTU4LDcgQEAKICAgICAgKiBAc2luY2UgMy4zLjMKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBzZWxlY3QoZmluYWwgVHJhdmVyc2FsPFMsIEUyPiBrZXlUcmF2ZXJzYWwpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc2VsZWN0LCBrZXlUcmF2ZXJzYWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zZWxlY3QsIGtleVRyYXZlcnNhbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUcmF2ZXJzYWxTZWxlY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIG51bGwsIGtleVRyYXZlcnNhbCkpOwogICAgIH0KIApAQCAtMTE1OSw3ICsxMTcxLDcgQEAKICAgICAgKiBAc2luY2UgMy4xLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgQ29sbGVjdGlvbjxFMj4+IHNlbGVjdChmaW5hbCBDb2x1bW4gY29sdW1uKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNlbGVjdCwgY29sdW1uKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc2VsZWN0LCBjb2x1bW4pOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJhdmVyc2FsTWFwU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBuZXcgQ29sdW1uVHJhdmVyc2FsKGNvbHVtbikpKTsKICAgICB9CiAKQEAgLTExNzIsNyArMTE4NCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiB1bmZvbGQoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnVuZm9sZCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnVuZm9sZCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBVbmZvbGRTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTExODQsNyArMTE5Niw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBMaXN0PEU+PiBmb2xkKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5mb2xkKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZm9sZCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBGb2xkU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMTk5LDcgKzEyMTEsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gZm9sZChmaW5hbCBFMiBzZWVkLCBmaW5hbCBCaUZ1bmN0aW9uPEUyLCBFLCBFMj4gZm9sZEZ1bmN0aW9uKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmZvbGQsIHNlZWQsIGZvbGRGdW5jdGlvbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmZvbGQsIHNlZWQsIGZvbGRGdW5jdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBGb2xkU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBuZXcgQ29uc3RhbnRTdXBwbGllcjw+KHNlZWQpLCBmb2xkRnVuY3Rpb24pKTsKICAgICB9CiAKQEAgLTEyMTIsNyArMTIyNCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBMb25nPiBjb3VudCgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY291bnQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jb3VudCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBDb3VudEdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTIyNSw3ICsxMjM3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIExvbmc+IGNvdW50KGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNvdW50LCBzY29wZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNvdW50LCBzY29wZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpID8gbmV3IENvdW50R2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSA6IG5ldyBDb3VudExvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMjM4LDcgKzEyNTAsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyIGV4dGVuZHMgTnVtYmVyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gc3VtKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zdW0pOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zdW0pOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgU3VtR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMjUxLDcgKzEyNjMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyIGV4dGVuZHMgTnVtYmVyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gc3VtKGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnN1bSwgc2NvcGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zdW0sIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPyBuZXcgU3VtR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSA6IG5ldyBTdW1Mb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTI2Myw3ICsxMjc1LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMiBleHRlbmRzIENvbXBhcmFibGU+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBtYXgoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1heCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm1heCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBNYXhHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTEyNzUsNyArMTI4Nyw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTIgZXh0ZW5kcyBDb21wYXJhYmxlPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gbWF4KGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1heCwgc2NvcGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tYXgsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPyBuZXcgTWF4R2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSA6IG5ldyBNYXhMb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTI4Nyw3ICsxMjk5LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMiBleHRlbmRzIENvbXBhcmFibGU+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBtaW4oKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1pbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm1pbik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBNaW5HbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTEyOTksNyArMTMxMSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTIgZXh0ZW5kcyBDb21wYXJhYmxlPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gbWluKGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1pbiwgc2NvcGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5taW4sIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPyBuZXcgTWluR2xvYmFsU3RlcDxFMj4odGhpcy5hc0FkbWluKCkpIDogbmV3IE1pbkxvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMzExLDcgKzEzMjMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyIGV4dGVuZHMgTnVtYmVyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gbWVhbigpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubWVhbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm1lYW4pOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTWVhbkdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTMyMyw3ICsxMzM1LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMiBleHRlbmRzIE51bWJlcj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IG1lYW4oZmluYWwgU2NvcGUgc2NvcGUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubWVhbiwgc2NvcGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tZWFuLCBzY29wZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpID8gbmV3IE1lYW5HbG9iYWxTdGVwKHRoaXMuYXNBZG1pbigpKSA6IG5ldyBNZWFuTG9jYWxTdGVwKHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMzM2LDcgKzEzNDgsNyBAQAogICAgICAqIEBzaW5jZSAzLjEuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEssIFY+IEdyYXBoVHJhdmVyc2FsPFMsIE1hcDxLLCBWPj4gZ3JvdXAoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmdyb3VwKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZ3JvdXApOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgR3JvdXBTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTEzNDksNyArMTM2MSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8Sz4gR3JhcGhUcmF2ZXJzYWw8UywgTWFwPEssIExvbmc+PiBncm91cENvdW50KCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ncm91cENvdW50KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZ3JvdXBDb3VudCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBHcm91cENvdW50U3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xMzYxLDcgKzEzNzMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVHJlZT4gdHJlZSgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudHJlZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRyZWUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJlZVN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTM3NSw3ICsxMzg3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IGFkZFYoZmluYWwgU3RyaW5nIHZlcnRleExhYmVsKSB7CiAgICAgICAgIGlmIChudWxsID09IHZlcnRleExhYmVsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ2ZXJ0ZXhMYWJlbCBjYW5ub3QgYmUgbnVsbCIpOwotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5hZGRWLCB2ZXJ0ZXhMYWJlbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmFkZFYsIHZlcnRleExhYmVsKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEFkZFZlcnRleFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCB2ZXJ0ZXhMYWJlbCkpOwogICAgIH0KIApAQCAtMTM4OCw3ICsxNDAwLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IGFkZFYoZmluYWwgVHJhdmVyc2FsPD8sIFN0cmluZz4gdmVydGV4TGFiZWxUcmF2ZXJzYWwpIHsKICAgICAgICAgaWYgKG51bGwgPT0gdmVydGV4TGFiZWxUcmF2ZXJzYWwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZlcnRleExhYmVsVHJhdmVyc2FsIGNhbm5vdCBiZSBudWxsIik7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmFkZFYsIHZlcnRleExhYmVsVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYWRkViwgdmVydGV4TGFiZWxUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQWRkVmVydGV4U3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIHZlcnRleExhYmVsVHJhdmVyc2FsLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTQwMiw3ICsxNDE0LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IGFkZFYoZmluYWwgR1ZhbHVlPFN0cmluZz4gdmVydGV4TGFiZWwpIHsKICAgICAgICAgaWYgKG51bGwgPT0gdmVydGV4TGFiZWwgfHwgbnVsbCA9PSB2ZXJ0ZXhMYWJlbC5nZXQoKSkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidmVydGV4TGFiZWwgY2Fubm90IGJlIG51bGwiKTsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkViwgdmVydGV4TGFiZWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRWLCB2ZXJ0ZXhMYWJlbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBBZGRWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgdmVydGV4TGFiZWwpKTsKICAgICB9CiAKQEAgLTE0MTQsNyArMTQyNiw3IEBACiAgICAgICogQHNpbmNlIDMuMS4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IGFkZFYoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmFkZFYpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5hZGRWKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEFkZFZlcnRleFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCAoU3RyaW5nKSBudWxsKSk7CiAgICAgfQogCkBAIC0xNDI3LDcgKzE0MzksNyBAQAogICAgICAqIEBzaW5jZSAzLjYuMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIFZlcnRleD4gbWVyZ2VWKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZVYpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZVYpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTWVyZ2VWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgZmFsc2UpKTsKICAgICB9CiAKQEAgLTE0NDEsNyArMTQ1Myw3IEBACiAgICAgICogQHNpbmNlIDMuNi4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBtZXJnZVYoZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzZWFyY2hDcmVhdGUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubWVyZ2VWLCBzZWFyY2hDcmVhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBNZXJnZVZlcnRleFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBmYWxzZSwgc2VhcmNoQ3JlYXRlKSk7CiAgICAgfQogCkBAIC0xNDU2LDcgKzE0NjgsNyBAQAogICAgICAqICBAc2luY2UgMy42LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBWZXJ0ZXg+IG1lcmdlVihmaW5hbCBUcmF2ZXJzYWw8PywgTWFwPE9iamVjdCwgT2JqZWN0Pj4gc2VhcmNoQ3JlYXRlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1lcmdlViwgc2VhcmNoQ3JlYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMubWVyZ2VWLCBzZWFyY2hDcmVhdGUpOwogICAgICAgICBmaW5hbCBNZXJnZVZlcnRleFN0ZXBQbGFjZWhvbGRlcjxTPiBzdGVwID0gbnVsbCA9PSBzZWFyY2hDcmVhdGUgPyBuZXcgTWVyZ2VWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgZmFsc2UsIChNYXApIG51bGwpIDoKICAgICAgICAgICAgICAgICBuZXcgTWVyZ2VWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgZmFsc2UsIHNlYXJjaENyZWF0ZS5hc0FkbWluKCkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKQEAgLTE0NzIsNyArMTQ4NCw3IEBACiAgICAgICogQHNpbmNlIDMuOC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgVmVydGV4PiBtZXJnZVYoZmluYWwgR1ZhbHVlPE1hcDxPYmplY3QsIE9iamVjdD4+IHNlYXJjaENyZWF0ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlViwgc2VhcmNoQ3JlYXRlKTsKICAgICAgICAgZmluYWwgTWVyZ2VWZXJ0ZXhTdGVwUGxhY2Vob2xkZXI8Uz4gc3RlcCA9IG51bGwgPT0gc2VhcmNoQ3JlYXRlID8gbmV3IE1lcmdlVmVydGV4U3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCAoTWFwKSBudWxsKSA6CiAgICAgICAgICAgICAgICAgbmV3IE1lcmdlVmVydGV4U3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZWFyY2hDcmVhdGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKQEAgLTE0ODUsNyArMTQ5Nyw3IEBACiAgICAgICogQHNpbmNlIDMuNi4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRWRnZT4gbWVyZ2VFKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZUUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZUUpOwogICAgICAgICBmaW5hbCBNZXJnZUVkZ2VTdGVwUGxhY2Vob2xkZXI8Uz4gc3RlcCA9IG5ldyBNZXJnZUVkZ2VTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgZmFsc2UpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKICAgICB9CkBAIC0xNDk5LDcgKzE1MTEsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEVkZ2U+IG1lcmdlRShmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNlYXJjaENyZWF0ZSkgewogICAgICAgICAvLyBnZXQgYSBjb25zdHJ1Y3Rpb24gdGltZSBleGNlcHRpb24gaWYgdGhlIE1hcCBpcyBiYWQKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubWVyZ2VFLCBzZWFyY2hDcmVhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZUUsIHNlYXJjaENyZWF0ZSk7CiAgICAgICAgIGZpbmFsIE1lcmdlRWRnZVN0ZXBQbGFjZWhvbGRlcjxTPiBzdGVwID0gbmV3IE1lcmdlRWRnZVN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBmYWxzZSwgc2VhcmNoQ3JlYXRlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc3RlcCk7CiAgICAgfQpAQCAtMTUxMiw3ICsxNTI0LDcgQEAKICAgICAgKiBAc2luY2UgMy42LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBtZXJnZUUoZmluYWwgVHJhdmVyc2FsPD8sIE1hcDxPYmplY3QsIE9iamVjdD4+IHNlYXJjaENyZWF0ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZUUsIHNlYXJjaENyZWF0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm1lcmdlRSwgc2VhcmNoQ3JlYXRlKTsKIAogICAgICAgICBmaW5hbCBNZXJnZUVkZ2VTdGVwUGxhY2Vob2xkZXI8Uz4gc3RlcCA9IG51bGwgPT0gc2VhcmNoQ3JlYXRlID8gbmV3IE1lcmdlRWRnZVN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBmYWxzZSwgIChNYXApIG51bGwpIDoKICAgICAgICAgICAgICAgICBuZXcgTWVyZ2VFZGdlU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZWFyY2hDcmVhdGUuYXNBZG1pbigpKTsKQEAgLTE1MjgsNyArMTU0MCw3IEBACiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRWRnZT4gbWVyZ2VFKGZpbmFsIEdWYWx1ZTxNYXA8T2JqZWN0LCBPYmplY3Q+PiBzZWFyY2hDcmVhdGUpIHsKICAgICAgICAgLy8gZ2V0IGEgY29uc3RydWN0aW9uIHRpbWUgZXhjZXB0aW9uIGlmIHRoZSBNYXAgaXMgYmFkCi0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRSwgc2VhcmNoQ3JlYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWVyZ2VFLCBzZWFyY2hDcmVhdGUpOwogICAgICAgICBmaW5hbCBNZXJnZUVkZ2VTdGVwUGxhY2Vob2xkZXI8Uz4gc3RlcCA9IG51bGwgPT0gc2VhcmNoQ3JlYXRlID8gbmV3IE1lcmdlRWRnZVN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBmYWxzZSwgIChNYXApIG51bGwpIDoKICAgICAgICAgICAgICAgICBuZXcgTWVyZ2VFZGdlU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZWFyY2hDcmVhdGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKQEAgLTE1NDMsNyArMTU1NSw3IEBACiAgICAgICogQHNpbmNlIDMuMS4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBhZGRFKGZpbmFsIFN0cmluZyBlZGdlTGFiZWwpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYWRkRSwgZWRnZUxhYmVsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYWRkRSwgZWRnZUxhYmVsKTsKICAgICAgICAgLy8gVXNlIEFkZEVkZ2VTdGVwR1ZhbHVlQ29udHJhY3QgZXZlbiBpZiBsYWJlbCBpcyBub3QgR1ZhbHVlIGluIGNhc2UgYGZyb20oKSwgYHRvKClgLCBvciBgcHJvcGVydHkoKWAgc3RlcHMgd2l0aCBHVmFsdWUgYXJlIG1lcmdlZCBpbi4KICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEFkZEVkZ2VTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgZWRnZUxhYmVsKSk7CiAgICAgfQpAQCAtMTU1Niw3ICsxNTY4LDcgQEAKICAgICAgKiBAc2luY2UgMy4zLjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBhZGRFKGZpbmFsIFRyYXZlcnNhbDw/LCBTdHJpbmc+IGVkZ2VMYWJlbFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5hZGRFLCBlZGdlTGFiZWxUcmF2ZXJzYWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5hZGRFLCBlZGdlTGFiZWxUcmF2ZXJzYWwpOwogICAgICAgICAvLyBVc2UgQWRkRWRnZVN0ZXBHVmFsdWVDb250cmFjdCBldmVuIGlmIGxhYmVsIGlzIG5vdCBHVmFsdWUgaW4gY2FzZSBgZnJvbSgpLCBgdG8oKWAsIG9yIGBwcm9wZXJ0eSgpYCBzdGVwcyB3aXRoIEdWYWx1ZSBhcmUgbWVyZ2VkIGluLgogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQWRkRWRnZVN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBudWxsID09IGVkZ2VMYWJlbFRyYXZlcnNhbCA/IG51bGwgOiBlZGdlTGFiZWxUcmF2ZXJzYWwuYXNBZG1pbigpKSk7CiAgICAgfQpAQCAtMTU3MCw3ICsxNTgyLDcgQEAKICAgICAgKiBAc2luY2UgMy44LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFZGdlPiBhZGRFKGZpbmFsIEdWYWx1ZTxTdHJpbmc+IGVkZ2VMYWJlbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRFLCBlZGdlTGFiZWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRFLCBlZGdlTGFiZWwpOwogICAgICAgICBBZGRFZGdlU3RlcFBsYWNlaG9sZGVyPEVkZ2U+IHN0ZXAgPSBuZXcgQWRkRWRnZVN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBlZGdlTGFiZWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKICAgICB9CkBAIC0xNTg5LDcgKzE2MDEsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAiVGhlIGZyb20oKSBzdGVwIGNhbm5vdCBmb2xsb3cgJXMiLCBwcmV2LmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKSk7CiAKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZnJvbSwgZnJvbVN0ZXBMYWJlbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmZyb20sIGZyb21TdGVwTGFiZWwpOwogICAgICAgICAoKEZyb21Ub01vZHVsYXRpbmcpIHByZXYpLmFkZEZyb20oZnJvbVN0ZXBMYWJlbCk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTE2MDksNyArMTYyMSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICJUaGUgZnJvbSgpIHN0ZXAgY2Fubm90IGZvbGxvdyAlcyIsIHByZXYuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpKTsKIAotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5mcm9tLCBmcm9tVmVydGV4KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZnJvbSwgZnJvbVZlcnRleCk7CiAgICAgICAgICgoRnJvbVRvTW9kdWxhdGluZykgcHJldikuYWRkRnJvbShuZXcgR1ZhbHVlQ29uc3RhbnRUcmF2ZXJzYWw8Pihmcm9tVmVydGV4KSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTE2MjQsMzMgKzE2MzYsNyBAQAogICAgICAqIEBzaW5jZSAzLjMuMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGZyb20oZmluYWwgVmVydGV4IGZyb21WZXJ0ZXgpIHsKLSAgICAgICAgZmluYWwgU3RlcDw/LD8+IHByZXYgPSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCk7Ci0gICAgICAgIGlmICghKHByZXYgaW5zdGFuY2VvZiBGcm9tVG9Nb2R1bGF0aW5nKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlRoZSBmcm9tKCkgc3RlcCBjYW5ub3QgZm9sbG93ICVzIiwgcHJldi5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSkpOwotCi0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmZyb20sIGZyb21WZXJ0ZXgpOwotICAgICAgICAoKEZyb21Ub01vZHVsYXRpbmcpIHByZXYpLmFkZEZyb20oX18uY29uc3RhbnQoZnJvbVZlcnRleCkuYXNBZG1pbigpKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvdmlkZSB7QGNvZGUgdG8oKX0tbW9kdWxhdGlvbiB0byByZXNwZWN0aXZlIHN0ZXBzLgotICAgICAqCi0gICAgICogQHBhcmFtIHRvU3RlcExhYmVsIHRoZSBzdGVwIGxhYmVsIHRvIG1vZHVsYXRlIHRvLgotICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbCB3aXRoIHRoZSBtb2RpZmllZCB7QGxpbmsgRnJvbVRvTW9kdWxhdGluZ30gc3RlcC4KLSAgICAgKiBAc2VlIDxhIGhyZWY9Imh0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLyR7cHJvamVjdC52ZXJzaW9ufS9yZWZlcmVuY2UvI3RvLXN0ZXAiIHRhcmdldD0iX2JsYW5rIj5SZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiAtIFRvIFN0ZXA8L2E+Ci0gICAgICogQHNpbmNlIDMuMS4wLWluY3ViYXRpbmcKLSAgICAgKi8KLSAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiB0byhmaW5hbCBTdHJpbmcgdG9TdGVwTGFiZWwpIHsKLSAgICAgICAgZmluYWwgU3RlcDw/LD8+IHByZXYgPSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCk7Ci0gICAgICAgIGlmICghKHByZXYgaW5zdGFuY2VvZiBGcm9tVG9Nb2R1bGF0aW5nKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlRoZSB0bygpIHN0ZXAgY2Fubm90IGZvbGxvdyAlcyIsIHByZXYuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpKTsKLQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50bywgdG9TdGVwTGFiZWwpOwotICAgICAgICAoKEZyb21Ub01vZHVsYXRpbmcpIHByZXYpLmFkZFRvKHRvU3RlcExhYmVsKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHJldHVybiB0aGlzLmZyb20oX18uVihmcm9tVmVydGV4LmlkKCkpKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE2NjgsNyArMTY1NCw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICJUaGUgdG8oKSBzdGVwIGNhbm5vdCBmb2xsb3cgJXMiLCBwcmV2LmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKSk7CiAKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudG8sIHRvVmVydGV4KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudG8sIHRvVmVydGV4KTsKICAgICAgICAgKChGcm9tVG9Nb2R1bGF0aW5nKSBwcmV2KS5hZGRUbyhuZXcgR1ZhbHVlQ29uc3RhbnRUcmF2ZXJzYWw8Pih0b1ZlcnRleCkpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC0xNjg4LDcgKzE2NzQsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAiVGhlIHRvKCkgc3RlcCBjYW5ub3QgZm9sbG93ICVzIiwgcHJldi5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSkpOwogCi0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnRvLCB0b1ZlcnRleCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRvLCB0b1ZlcnRleCk7CiAgICAgICAgICgoRnJvbVRvTW9kdWxhdGluZykgcHJldikuYWRkVG8odG9WZXJ0ZXguYXNBZG1pbigpKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtMTcwOCw3ICsxNjk0LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgIlRoZSBmcm9tKCkgc3RlcCBjYW5ub3QgZm9sbG93ICVzIiwgcHJldi5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSkpOwogCi0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmZyb20sIGZyb21WZXJ0ZXgpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5mcm9tLCBmcm9tVmVydGV4KTsKICAgICAgICAgKChGcm9tVG9Nb2R1bGF0aW5nKSBwcmV2KS5hZGRGcm9tKGZyb21WZXJ0ZXguYXNBZG1pbigpKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtMTcyMCwxOCArMTcwNiwyOCBAQAogICAgICAqIEBwYXJhbSB0b1ZlcnRleCB0aGUgdmVydGV4IGZvciBzZWxlY3RpbmcgdGhlIGluY29taW5nIHZlcnRleAogICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbCB3aXRoIHRoZSBtb2RpZmllZCB7QGxpbmsgQWRkRWRnZVN0ZXBDb250cmFjdH0KICAgICAgKiBAc2VlIDxhIGhyZWY9Imh0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLyR7cHJvamVjdC52ZXJzaW9ufS9yZWZlcmVuY2UvI2FkZGVkZ2Utc3RlcCIgdGFyZ2V0PSJfYmxhbmsiPlJlZmVyZW5jZSBEb2N1bWVudGF0aW9uIC0gRnJvbSBTdGVwPC9hPgotICAgICAqIEBzaW5jZSAzLjMuMAorICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiB0byhmaW5hbCBWZXJ0ZXggdG9WZXJ0ZXgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudG8oX18uVih0b1ZlcnRleC5pZCgpKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvdmlkZSB7QGNvZGUgdG8oKX0tbW9kdWxhdGlvbiB0byByZXNwZWN0aXZlIHN0ZXBzLgorICAgICAqCisgICAgICogQHBhcmFtIHRvU3RlcExhYmVsIHRoZSBzdGVwIGxhYmVsIHRvIG1vZHVsYXRlIHRvLgorICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbCB3aXRoIHRoZSBtb2RpZmllZCB7QGxpbmsgRnJvbVRvTW9kdWxhdGluZ30gc3RlcC4KKyAgICAgKiBAc2VlIDxhIGhyZWY9Imh0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLyR7cHJvamVjdC52ZXJzaW9ufS9yZWZlcmVuY2UvI3RvLXN0ZXAiIHRhcmdldD0iX2JsYW5rIj5SZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiAtIFRvIFN0ZXA8L2E+CisgICAgICogQHNpbmNlIDMuMS4wLWluY3ViYXRpbmcKKyAgICAgKi8KKyAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiB0byhmaW5hbCBTdHJpbmcgdG9TdGVwTGFiZWwpIHsKICAgICAgICAgZmluYWwgU3RlcDw/LD8+IHByZXYgPSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCk7CiAgICAgICAgIGlmICghKHByZXYgaW5zdGFuY2VvZiBGcm9tVG9Nb2R1bGF0aW5nKSkKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgIlRoZSB0bygpIHN0ZXAgY2Fubm90IGZvbGxvdyAlcyIsIHByZXYuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpKTsKIAotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50bywgdG9WZXJ0ZXgpOwotICAgICAgICAoKEZyb21Ub01vZHVsYXRpbmcpIHByZXYpLmFkZFRvKHRvVmVydGV4IGluc3RhbmNlb2YgR1ZhbHVlID8KLSAgICAgICAgICAgICAgICBuZXcgR1ZhbHVlQ29uc3RhbnRUcmF2ZXJzYWw8PigoR1ZhbHVlPE9iamVjdD4pIHRvVmVydGV4KSA6Ci0gICAgICAgICAgICAgICAgX18uY29uc3RhbnQodG9WZXJ0ZXgpLmFzQWRtaW4oKSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRvLCB0b1N0ZXBMYWJlbCk7CisgICAgICAgICgoRnJvbVRvTW9kdWxhdGluZykgcHJldikuYWRkVG8odG9TdGVwTGFiZWwpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKQEAgLTE3NDMsNyArMTczOSw3IEBACiAgICAgICogQHNpbmNlIDMuMy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRG91YmxlPiBtYXRoKGZpbmFsIFN0cmluZyBleHByZXNzaW9uKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1hdGgsIGV4cHJlc3Npb24pOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tYXRoLCBleHByZXNzaW9uKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IE1hdGhTdGVwPD4odGhpcy5hc0FkbWluKCksIGV4cHJlc3Npb24pKTsKICAgICB9CiAKQEAgLTE3NTUsNyArMTc1MSw3IEBACiAgICAgICogQHNpbmNlIDMuNi4wCiAgICAgICovCiAgICAgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFbGVtZW50PiBlbGVtZW50KCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5lbGVtZW50KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBFbGVtZW50U3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xNzY4LDcgKzE3NjQsNyBAQAogICAgICAqIEBzaW5jZSAzLjYuMAogICAgICAqLwogICAgIGRlZmF1bHQgPEU+IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGNhbGwoZmluYWwgU3RyaW5nIHNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY2FsbCwgc2VydmljZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNhbGwsIHNlcnZpY2UpOwogICAgICAgICBmaW5hbCBDYWxsU3RlcDxTLEU+IGNhbGwgPSBuZXcgQ2FsbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgZmFsc2UsIHNlcnZpY2UpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChjYWxsKTsKICAgICB9CkBAIC0xNzgzLDcgKzE3NzksNyBAQAogICAgICAqIEBzaW5jZSAzLjYuMAogICAgICAqLwogICAgIGRlZmF1bHQgPEU+IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGNhbGwoZmluYWwgU3RyaW5nIHNlcnZpY2UsIGZpbmFsIE1hcCBwYXJhbXMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zKTsKICAgICAgICAgZmluYWwgQ2FsbFN0ZXA8UyxFPiBjYWxsID0gbmV3IENhbGxTdGVwPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZXJ2aWNlLCBwYXJhbXMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChjYWxsKTsKICAgICB9CkBAIC0xNzk4LDcgKzE3OTQsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIGRlZmF1bHQgPEU+IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGNhbGwoZmluYWwgU3RyaW5nIHNlcnZpY2UsIGZpbmFsIEdWYWx1ZTxNYXA8Pyw/Pj4gcGFyYW1zKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIHBhcmFtcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIHBhcmFtcyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBDYWxsU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZXJ2aWNlLCBwYXJhbXMpKTsKICAgICB9CiAKQEAgLTE4MTIsNyArMTgwOCw3IEBACiAgICAgICogQHNpbmNlIDMuNi4wCiAgICAgICovCiAgICAgZGVmYXVsdCA8RT4gR3JhcGhUcmF2ZXJzYWw8UywgRT4gY2FsbChmaW5hbCBTdHJpbmcgc2VydmljZSwgZmluYWwgVHJhdmVyc2FsPD8sIE1hcDw/LD8+PiBjaGlsZFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jYWxsLCBzZXJ2aWNlLCBjaGlsZFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNhbGwsIHNlcnZpY2UsIGNoaWxkVHJhdmVyc2FsKTsKICAgICAgICAgZmluYWwgQ2FsbFN0ZXA8UyxFPiBzdGVwID0gbnVsbCA9PSBjaGlsZFRyYXZlcnNhbCA/IG5ldyBDYWxsU3RlcCh0aGlzLmFzQWRtaW4oKSwgZmFsc2UsIHNlcnZpY2UpIDoKICAgICAgICAgICAgICAgICBuZXcgQ2FsbFN0ZXAodGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZXJ2aWNlLCBuZXcgTGlua2VkSGFzaE1hcCgpLCBjaGlsZFRyYXZlcnNhbC5hc0FkbWluKCkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKQEAgLTE4MzEsNyArMTgyNyw3IEBACiAgICAgICogQHNpbmNlIDMuNi4wCiAgICAgICovCiAgICAgZGVmYXVsdCA8RT4gR3JhcGhUcmF2ZXJzYWw8UywgRT4gY2FsbChmaW5hbCBTdHJpbmcgc2VydmljZSwgZmluYWwgTWFwIHBhcmFtcywgZmluYWwgVHJhdmVyc2FsPD8sIE1hcDw/LD8+PiBjaGlsZFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jYWxsLCBzZXJ2aWNlLCBwYXJhbXMsIGNoaWxkVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zLCBjaGlsZFRyYXZlcnNhbCk7CiAgICAgICAgIGZpbmFsIENhbGxTdGVwPFMsRT4gc3RlcCA9IG51bGwgPT0gY2hpbGRUcmF2ZXJzYWwgPyBuZXcgQ2FsbFN0ZXAodGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZXJ2aWNlLCBwYXJhbXMpIDoKICAgICAgICAgICAgICAgICBuZXcgQ2FsbFN0ZXAodGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZXJ2aWNlLCBwYXJhbXMsIGNoaWxkVHJhdmVyc2FsLmFzQWRtaW4oKSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHN0ZXApOwpAQCAtMTg1MCw3ICsxODQ2LDcgQEAKICAgICAgKiBAc2luY2UgMy44LjAKICAgICAgKi8KICAgICBkZWZhdWx0IDxFPiBHcmFwaFRyYXZlcnNhbDxTLCBFPiBjYWxsKGZpbmFsIFN0cmluZyBzZXJ2aWNlLCBmaW5hbCBHVmFsdWU8TWFwPD8sPz4+IHBhcmFtcywgZmluYWwgVHJhdmVyc2FsPFMsIE1hcDw/LD8+PiBjaGlsZFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jYWxsLCBzZXJ2aWNlLCBwYXJhbXMsIGNoaWxkVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zLCBjaGlsZFRyYXZlcnNhbCk7CiAgICAgICAgIGZpbmFsIENhbGxTdGVwUGxhY2Vob2xkZXI8UyxFPiBzdGVwID0gbnVsbCA9PSBjaGlsZFRyYXZlcnNhbCA/IG5ldyBDYWxsU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGZhbHNlLCBzZXJ2aWNlLCBwYXJhbXMpIDoKICAgICAgICAgICAgICAgICBuZXcgQ2FsbFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBmYWxzZSwgc2VydmljZSwgcGFyYW1zLCBjaGlsZFRyYXZlcnNhbC5hc0FkbWluKCkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzdGVwKTsKQEAgLTE4NjYsNyArMTg2Miw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiBjb25jYXQoZmluYWwgVHJhdmVyc2FsPD8sIFN0cmluZz4gY29uY2F0VHJhdmVyc2FsLCBmaW5hbCBUcmF2ZXJzYWw8PywgU3RyaW5nPi4uLiBvdGhlckNvbmNhdFRyYXZlcnNhbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY29uY2F0LCBjb25jYXRUcmF2ZXJzYWwsIG90aGVyQ29uY2F0VHJhdmVyc2Fscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNvbmNhdCwgY29uY2F0VHJhdmVyc2FsLCBvdGhlckNvbmNhdFRyYXZlcnNhbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ29uY2F0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCBjb25jYXRUcmF2ZXJzYWwsIG90aGVyQ29uY2F0VHJhdmVyc2FscykpOwogICAgIH0KIApAQCAtMTg3OSw3ICsxODc1LDcgQEAKICAgICAgKiBAc2luY2UgMy43LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBTdHJpbmc+IGNvbmNhdChmaW5hbCBTdHJpbmcuLi4gY29uY2F0U3RyaW5ncykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jb25jYXQsIGNvbmNhdFN0cmluZ3MpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jb25jYXQsIGNvbmNhdFN0cmluZ3MpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ29uY2F0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCBjb25jYXRTdHJpbmdzKSk7CiAgICAgfQogCkBAIC0xODkxLDcgKzE4ODcsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIFN0cmluZz4gYXNTdHJpbmcoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmFzU3RyaW5nKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYXNTdHJpbmcpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQXNTdHJpbmdHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTE5MDQsNyArMTkwMCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gYXNTdHJpbmcoZmluYWwgU2NvcGUgc2NvcGUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYXNTdHJpbmcsIHNjb3BlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYXNTdHJpbmcsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPyBuZXcgQXNTdHJpbmdHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpIDogbmV3IEFzU3RyaW5nTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTE5MTcsNyArMTkxMyw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgSW50ZWdlcj4gbGVuZ3RoKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5sZW5ndGgpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5sZW5ndGgpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTGVuZ3RoR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xOTMxLDcgKzE5MjcsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IGxlbmd0aChmaW5hbCBTY29wZSBzY29wZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5sZW5ndGgsIHNjb3BlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMubGVuZ3RoLCBzY29wZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpID8gbmV3IExlbmd0aEdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkgOiBuZXcgTGVuZ3RoTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTE5NDQsNyArMTk0MCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiB0b0xvd2VyKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50b0xvd2VyKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudG9Mb3dlcik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUb0xvd2VyR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xOTU4LDcgKzE5NTQsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHRvTG93ZXIoZmluYWwgU2NvcGUgc2NvcGUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudG9Mb3dlciwgc2NvcGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy50b0xvd2VyLCBzY29wZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpID8gbmV3IFRvTG93ZXJHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpIDogbmV3IFRvTG93ZXJMb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMTk3MSw3ICsxOTY3LDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBTdHJpbmc+IHRvVXBwZXIoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnRvVXBwZXIpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy50b1VwcGVyKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFRvVXBwZXJHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTE5ODUsNyArMTk4MSw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gdG9VcHBlcihmaW5hbCBTY29wZSBzY29wZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50b1VwcGVyLCBzY29wZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRvVXBwZXIsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPyBuZXcgVG9VcHBlckdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkgOiBuZXcgVG9VcHBlckxvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0xOTk5LDcgKzE5OTUsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIFN0cmluZz4gdHJpbSgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudHJpbSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRyaW0pOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJpbUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMjAxNCw3ICsyMDEwLDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiB0cmltKGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnRyaW0sIHNjb3BlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudHJpbSwgc2NvcGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKSA/IG5ldyBUcmltR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSA6IG5ldyBUcmltTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTIwMjgsNyArMjAyNCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiBsVHJpbSgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubFRyaW0pOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5sVHJpbSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBMVHJpbUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMjA0NCw3ICsyMDQwLDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBsVHJpbShmaW5hbCBTY29wZSBzY29wZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5sVHJpbSwgc2NvcGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5sVHJpbSwgc2NvcGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKSA/IG5ldyBMVHJpbUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkgOiBuZXcgTFRyaW1Mb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMjA1OCw3ICsyMDU0LDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBTdHJpbmc+IHJUcmltKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yVHJpbSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnJUcmltKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFJUcmltR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0yMDczLDcgKzIwNjksNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHJUcmltKGZpbmFsIFNjb3BlIHNjb3BlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnJUcmltLCBzY29wZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnJUcmltLCBzY29wZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpID8gbmV3IFJUcmltR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSA6IG5ldyBSVHJpbUxvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0yMDg1LDcgKzIwODEsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHJldmVyc2UoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnJldmVyc2UpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5yZXZlcnNlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFJldmVyc2VTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTIxMDIsNyArMjA5OCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiByZXBsYWNlKGZpbmFsIFN0cmluZyBvbGRDaGFyLCBmaW5hbCBTdHJpbmcgbmV3Q2hhcikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yZXBsYWNlLCBvbGRDaGFyLCBuZXdDaGFyKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMucmVwbGFjZSwgb2xkQ2hhciwgbmV3Q2hhcik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBSZXBsYWNlR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBvbGRDaGFyLCBuZXdDaGFyKSk7CiAgICAgfQogCkBAIC0yMTIwLDcgKzIxMTYsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHJlcGxhY2UoZmluYWwgU2NvcGUgc2NvcGUsIGZpbmFsIFN0cmluZyBvbGRDaGFyLCBmaW5hbCBTdHJpbmcgbmV3Q2hhcikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yZXBsYWNlLCBzY29wZSwgb2xkQ2hhciwgbmV3Q2hhcik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnJlcGxhY2UsIHNjb3BlLCBvbGRDaGFyLCBuZXdDaGFyKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPwogICAgICAgICAgICAgICAgIG5ldyBSZXBsYWNlR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBvbGRDaGFyLCBuZXdDaGFyKSA6IG5ldyBSZXBsYWNlTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIG9sZENoYXIsIG5ld0NoYXIpKTsKICAgICB9CkBAIC0yMTM3LDcgKzIxMzMsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIExpc3Q8U3RyaW5nPj4gc3BsaXQoZmluYWwgU3RyaW5nIHNlcGFyYXRvcikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zcGxpdCwgc2VwYXJhdG9yKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc3BsaXQsIHNlcGFyYXRvcik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBTcGxpdEdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc2VwYXJhdG9yKSk7CiAgICAgfQogCkBAIC0yMTU0LDcgKzIxNTAsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgTGlzdDxFMj4+IHNwbGl0KGZpbmFsIFNjb3BlIHNjb3BlLCBmaW5hbCBTdHJpbmcgc2VwYXJhdG9yKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNwbGl0LCBzY29wZSwgc2VwYXJhdG9yKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc3BsaXQsIHNjb3BlLCBzZXBhcmF0b3IpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKSA/CiAgICAgICAgICAgICAgICAgbmV3IFNwbGl0R2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBzZXBhcmF0b3IpIDogbmV3IFNwbGl0TG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIHNlcGFyYXRvcikpOwogICAgIH0KQEAgLTIxNzEsNyArMjE2Nyw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiBzdWJzdHJpbmcoZmluYWwgaW50IHN0YXJ0SW5kZXgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc3Vic3RyaW5nLCBzdGFydEluZGV4KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc3Vic3RyaW5nLCBzdGFydEluZGV4KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFN1YnN0cmluZ0dsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc3RhcnRJbmRleCkpOwogICAgIH0KIApAQCAtMjE4OCw3ICsyMTg0LDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBzdWJzdHJpbmcoZmluYWwgU2NvcGUgc2NvcGUsIGZpbmFsIGludCBzdGFydEluZGV4KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnN1YnN0cmluZywgc2NvcGUsIHN0YXJ0SW5kZXgpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zdWJzdHJpbmcsIHNjb3BlLCBzdGFydEluZGV4KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPwogICAgICAgICAgICAgICAgIG5ldyBTdWJzdHJpbmdHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIHN0YXJ0SW5kZXgpIDogbmV3IFN1YnN0cmluZ0xvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBzdGFydEluZGV4KSk7CiAgICAgfQpAQCAtMjIwOCw3ICsyMjA0LDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBTdHJpbmc+IHN1YnN0cmluZyhmaW5hbCBpbnQgc3RhcnRJbmRleCwgZmluYWwgaW50IGVuZEluZGV4KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnN1YnN0cmluZywgc3RhcnRJbmRleCwgZW5kSW5kZXgpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zdWJzdHJpbmcsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFN1YnN0cmluZ0dsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpKTsKICAgICB9CiAKQEAgLTIyMjgsNyArMjIyNCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gc3Vic3RyaW5nKGZpbmFsIFNjb3BlIHNjb3BlLCBmaW5hbCBpbnQgc3RhcnRJbmRleCwgZmluYWwgaW50IGVuZEluZGV4KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnN1YnN0cmluZywgc2NvcGUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc3Vic3RyaW5nLCBzY29wZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKSA/CiAgICAgICAgICAgICAgICAgbmV3IFN1YnN0cmluZ0dsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpIDogbmV3IFN1YnN0cmluZ0xvY2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBzdGFydEluZGV4LCBlbmRJbmRleCkpOwogICAgIH0KQEAgLTIyNDEsNyArMjIzNyw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiBmb3JtYXQoZmluYWwgU3RyaW5nIGZvcm1hdCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5mb3JtYXQsIGZvcm1hdCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmZvcm1hdCwgZm9ybWF0KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEZvcm1hdFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgZm9ybWF0KSk7CiAgICAgfQogCkBAIC0yMjUzLDcgKzIyNDksNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEJvb2xlYW4+IGFzQm9vbCgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYXNCb29sKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYXNCb29sKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEFzQm9vbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMjI2NSw3ICsyMjYxLDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBPZmZzZXREYXRlVGltZT4gYXNEYXRlKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5hc0RhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5hc0RhdGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQXNEYXRlU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0yMjc3LDcgKzIyNzMsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIE51bWJlcj4gYXNOdW1iZXIoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmFzTnVtYmVyKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYXNOdW1iZXIpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQXNOdW1iZXJTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTIyODksNyArMjI4NSw3IEBACiAgICAgICogQHNpbmNlIDMuOC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgTnVtYmVyPiBhc051bWJlcihmaW5hbCBHVHlwZSB0eXBlVG9rZW4pIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYXNOdW1iZXIsIHR5cGVUb2tlbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmFzTnVtYmVyLCB0eXBlVG9rZW4pOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQXNOdW1iZXJTdGVwPD4odGhpcy5hc0FkbWluKCksIHR5cGVUb2tlbikpOwogICAgIH0KIApAQCAtMjMwMSwxMiArMjI5NywxMiBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIE9mZnNldERhdGVUaW1lPiBkYXRlQWRkKGZpbmFsIERUIGRhdGVUb2tlbiwgZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmRhdGVBZGQsIGRhdGVUb2tlbiwgdmFsdWUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5kYXRlQWRkLCBkYXRlVG9rZW4sIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IERhdGVBZGRTdGVwPD4odGhpcy5hc0FkbWluKCksIGRhdGVUb2tlbiwgdmFsdWUpKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHtAbGluayBEYXRlfSBpbiBlcG9jaCB0aW1lLgorICAgICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28ge0BsaW5rIE9mZnNldERhdGVUaW1lfSBpbiBlcG9jaCB0aW1lLgogICAgICAqCiAgICAgICogQHJldHVybiB0aGUgdHJhdmVyc2FsIHdpdGggYW4gYXBwZW5kZWQge0BsaW5rIERhdGVEaWZmU3RlcH0uCiAgICAgICogQHNlZSA8YSBocmVmPSJodHRwOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8ke3Byb2plY3QudmVyc2lvbn0vcmVmZXJlbmNlLyNkYXRlRGlmZi1zdGVwIiB0YXJnZXQ9Il9ibGFuayI+UmVmZXJlbmNlIERvY3VtZW50YXRpb24gLSBkYXRlRGlmZiBTdGVwPC9hPgpAQCAtMjMxNSw3ICsyMzExLDcgQEAKICAgICAgKi8KICAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIExvbmc+IGRhdGVEaWZmKGZpbmFsIERhdGUgdmFsdWUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZGF0ZURpZmYsIHZhbHVlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZGF0ZURpZmYsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IERhdGVEaWZmU3RlcDw+KHRoaXMuYXNBZG1pbigpLCB2YWx1ZSkpOwogICAgIH0KIApAQCAtMjMyNyw3ICsyMzIzLDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBMb25nPiBkYXRlRGlmZihmaW5hbCBPZmZzZXREYXRlVGltZSB2YWx1ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5kYXRlRGlmZiwgdmFsdWUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5kYXRlRGlmZiwgdmFsdWUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRGF0ZURpZmZTdGVwPD4odGhpcy5hc0FkbWluKCksIHZhbHVlKSk7CiAgICAgfQogCkBAIC0yMzQwLDcgKzIzMzYsNyBAQAogICAgICAqIEBzaW5jZSAzLjcuMQogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIExvbmc+IGRhdGVEaWZmKGZpbmFsIFRyYXZlcnNhbDw/LCA/PiBkYXRlVHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmRhdGVEaWZmLCBkYXRlVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZGF0ZURpZmYsIGRhdGVUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRGF0ZURpZmZTdGVwPD4odGhpcy5hc0FkbWluKCksIGRhdGVUcmF2ZXJzYWwpKTsKICAgICB9CiAKQEAgLTIzNTIsNyArMjM0OCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU2V0PD8+PiBkaWZmZXJlbmNlKGZpbmFsIE9iamVjdCB2YWx1ZXMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZGlmZmVyZW5jZSwgdmFsdWVzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZGlmZmVyZW5jZSwgdmFsdWVzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IERpZmZlcmVuY2VTdGVwPD4odGhpcy5hc0FkbWluKCksIHZhbHVlcykpOwogICAgIH0KIApAQCAtMjM2NCw3ICsyMzYwLDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBTZXQ8Pz4+IGRpc2p1bmN0KGZpbmFsIE9iamVjdCB2YWx1ZXMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZGlzanVuY3QsIHZhbHVlcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmRpc2p1bmN0LCB2YWx1ZXMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRGlzanVuY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIHZhbHVlcykpOwogICAgIH0KIApAQCAtMjM3Niw3ICsyMzcyLDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBTZXQ8Pz4+IGludGVyc2VjdChmaW5hbCBPYmplY3QgdmFsdWVzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmludGVyc2VjdCwgdmFsdWVzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaW50ZXJzZWN0LCB2YWx1ZXMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgSW50ZXJzZWN0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCB2YWx1ZXMpKTsKICAgICB9CiAKQEAgLTIzODgsNyArMjM4NCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgU3RyaW5nPiBjb25qb2luKGZpbmFsIFN0cmluZyBkZWxpbWl0ZXIpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY29uam9pbiwgZGVsaW1pdGVyKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY29uam9pbiwgZGVsaW1pdGVyKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IENvbmpvaW5TdGVwPD4odGhpcy5hc0FkbWluKCksIGRlbGltaXRlcikpOwogICAgIH0KIApAQCAtMjQwMCw3ICsyMzk2LDcgQEAKICAgICAgKiBAc2luY2UgMy43LjEKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBtZXJnZShmaW5hbCBPYmplY3QgdmFsdWVzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm1lcmdlLCB2YWx1ZXMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5tZXJnZSwgdmFsdWVzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IE1lcmdlU3RlcDw+KHRoaXMuYXNBZG1pbigpLCB2YWx1ZXMpKTsKICAgICB9CiAKQEAgLTI0MTIsNyArMjQwOCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgTGlzdDw/Pj4gY29tYmluZShmaW5hbCBPYmplY3QgdmFsdWVzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNvbWJpbmUsIHZhbHVlcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNvbWJpbmUsIHZhbHVlcyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBDb21iaW5lU3RlcDw+KHRoaXMuYXNBZG1pbigpLCB2YWx1ZXMpKTsKICAgICB9CiAKQEAgLTI0MjQsNyArMjQyMCw3IEBACiAgICAgICogQHNpbmNlIDMuNy4xCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgTGlzdDxMaXN0PD8+Pj4gcHJvZHVjdChmaW5hbCBPYmplY3QgdmFsdWVzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnByb2R1Y3QsIHZhbHVlcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnByb2R1Y3QsIHZhbHVlcyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBQcm9kdWN0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCB2YWx1ZXMpKTsKICAgICB9CiAKQEAgLTI0NDMsNyArMjQzOSw3IEBACiAgICAgICAgIGlmIChwcmVkaWNhdGUgIT0gbnVsbCAmJiBwcmVkaWNhdGUgaW5zdGFuY2VvZiBQICYmICgoUDxUcmF2ZXJzZXI8RT4+KSBwcmVkaWNhdGUpLmlzUGFyYW1ldGVyaXplZCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXJhbWV0ZXJpemVkIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgZmlsdGVyKCkiKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5maWx0ZXIsIHByZWRpY2F0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmZpbHRlciwgcHJlZGljYXRlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IExhbWJkYUZpbHRlclN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgcHJlZGljYXRlKSk7CiAgICAgfQogCkBAIC0yNDU3LDcgKzI0NTMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gZmlsdGVyKGZpbmFsIFRyYXZlcnNhbDw/LCA/PiBmaWx0ZXJUcmF2ZXJzYWwpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZmlsdGVyLCBmaWx0ZXJUcmF2ZXJzYWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5maWx0ZXIsIGZpbHRlclRyYXZlcnNhbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUcmF2ZXJzYWxGaWx0ZXJTdGVwPD4odGhpcy5hc0FkbWluKCksIChUcmF2ZXJzYWwpIGZpbHRlclRyYXZlcnNhbCkpOwogICAgIH0KIApAQCAtMjQ4MSw3ICsyNDc3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IG9yKGZpbmFsIFRyYXZlcnNhbDw/LCA/Pi4uLiBvclRyYXZlcnNhbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMub3IsIG9yVHJhdmVyc2Fscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm9yLCBvclRyYXZlcnNhbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgT3JTdGVwKHRoaXMuYXNBZG1pbigpLCBvclRyYXZlcnNhbHMpKTsKICAgICB9CiAKQEAgLTI0OTQsNyArMjQ5MCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBhbmQoZmluYWwgVHJhdmVyc2FsPD8sID8+Li4uIGFuZFRyYXZlcnNhbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYW5kLCBhbmRUcmF2ZXJzYWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYW5kLCBhbmRUcmF2ZXJzYWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEFuZFN0ZXAodGhpcy5hc0FkbWluKCksIGFuZFRyYXZlcnNhbHMpKTsKICAgICB9CiAKQEAgLTI1MDksNyArMjUwNSw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gaW5qZWN0KGZpbmFsIEUuLi4gaW5qZWN0aW9ucykgewogICAgICAgICAvLyBhIHNpbmdsZSBudWxsIGlzIFtudWxsXQogICAgICAgICBmaW5hbCBFW10gcyA9IG51bGwgPT0gaW5qZWN0aW9ucyA/IChFW10pIG5ldyBPYmplY3RbXSB7IG51bGwgfSA6IGluamVjdGlvbnM7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmluamVjdCwgcyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmluamVjdCwgcyk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBJbmplY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIHMpKTsKICAgICB9CiAKQEAgLTI1MjMsNyArMjUxOSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBkZWR1cChmaW5hbCBTY29wZSBzY29wZSwgZmluYWwgU3RyaW5nLi4uIGRlZHVwTGFiZWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmRlZHVwLCBzY29wZSwgZGVkdXBMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5kZWR1cCwgc2NvcGUsIGRlZHVwTGFiZWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkgPyBuZXcgRGVkdXBHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIGRlZHVwTGFiZWxzKSA6IG5ldyBEZWR1cExvY2FsU3RlcCh0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMjUzNiw3ICsyNTMyLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGRlZHVwKGZpbmFsIFN0cmluZy4uLiBkZWR1cExhYmVscykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5kZWR1cCwgZGVkdXBMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5kZWR1cCwgZGVkdXBMYWJlbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRGVkdXBHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIGRlZHVwTGFiZWxzKSk7CiAgICAgfQogCkBAIC0yNTU1LDcgKzI1NTEsNyBAQAogICAgICAgICBpZiAocHJlZGljYXRlICE9IG51bGwgJiYgcHJlZGljYXRlLmlzUGFyYW1ldGVyaXplZCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXJhbWV0ZXJpemVkIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgd2hlcmUoKSIpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLndoZXJlLCBzdGFydEtleSwgcHJlZGljYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMud2hlcmUsIHN0YXJ0S2V5LCBwcmVkaWNhdGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgV2hlcmVQcmVkaWNhdGVTdGVwPD4odGhpcy5hc0FkbWluKCksIE9wdGlvbmFsLm9mTnVsbGFibGUoc3RhcnRLZXkpLCBwcmVkaWNhdGUpKTsKICAgICB9CiAKQEAgLTI1NzMsNyArMjU2OSw3IEBACiAgICAgICAgIGlmIChwcmVkaWNhdGUgIT0gbnVsbCAmJiBwcmVkaWNhdGUuaXNQYXJhbWV0ZXJpemVkKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcmFtZXRlcml6ZWQgcHJlZGljYXRlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB3aGVyZSgpIik7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMud2hlcmUsIHByZWRpY2F0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLndoZXJlLCBwcmVkaWNhdGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgV2hlcmVQcmVkaWNhdGVTdGVwPD4odGhpcy5hc0FkbWluKCksIE9wdGlvbmFsLmVtcHR5KCksIHByZWRpY2F0ZSkpOwogICAgIH0KIApAQCAtMjU4OCw3ICsyNTg0LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHdoZXJlKGZpbmFsIFRyYXZlcnNhbDw/LCA/PiB3aGVyZVRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy53aGVyZSwgd2hlcmVUcmF2ZXJzYWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy53aGVyZSwgd2hlcmVUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gVHJhdmVyc2FsSGVscGVyLmdldFZhcmlhYmxlTG9jYXRpb25zKHdoZXJlVHJhdmVyc2FsLmFzQWRtaW4oKSkuaXNFbXB0eSgpID8KICAgICAgICAgICAgICAgICB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUcmF2ZXJzYWxGaWx0ZXJTdGVwPD4odGhpcy5hc0FkbWluKCksIChUcmF2ZXJzYWwpIHdoZXJlVHJhdmVyc2FsKSkgOgogICAgICAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFdoZXJlVHJhdmVyc2FsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCB3aGVyZVRyYXZlcnNhbCkpOwpAQCAtMjYwOSw3ICsyNjA1LDcgQEAKICAgICAgICAgaWYgKG51bGwgPT0gcHJlZGljYXRlKQogICAgICAgICAgICAgcmV0dXJuIGhhcyhwcm9wZXJ0eUtleSwgKE9iamVjdCkgbnVsbCk7CiAKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBwcm9wZXJ0eUtleSwgcHJlZGljYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBwcm9wZXJ0eUtleSwgcHJlZGljYXRlKTsKICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIocHJvcGVydHlLZXksIHByZWRpY2F0ZSkpOwogICAgIH0KIApAQCAtMjYzMSw3ICsyNjI3LDcgQEAKICAgICAgICAgaWYgKG51bGwgPT0gcHJlZGljYXRlKQogICAgICAgICAgICAgcmV0dXJuIGhhcyhhY2Nlc3NvciwgKE9iamVjdCkgbnVsbCk7CiAKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBhY2Nlc3NvciwgcHJlZGljYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBhY2Nlc3NvciwgcHJlZGljYXRlKTsKICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIoYWNjZXNzb3IuZ2V0QWNjZXNzb3IoKSwgcHJlZGljYXRlKSk7CiAgICAgfQogCkBAIC0yNjQ4LDcgKzI2NDQsNyBAQAogICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBQKQogICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKHByb3BlcnR5S2V5LCAoUCkgdmFsdWUpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmhhcywgcHJvcGVydHlLZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmhhcywgcHJvcGVydHlLZXksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBUcmF2ZXJzYWxIZWxwZXIuYWRkSGFzQ29udGFpbmVyKHRoaXMuYXNBZG1pbigpLCBuZXcgSGFzQ29udGFpbmVyKHByb3BlcnR5S2V5LCBQLmVxKHZhbHVlKSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjY2OSw3ICsyNjY1LDcgQEAKICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhcyhhY2Nlc3NvciwgKFApIHZhbHVlKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5oYXMsIGFjY2Vzc29yLCB2YWx1ZSk7CisgICAgICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5oYXMsIGFjY2Vzc29yLCB2YWx1ZSk7CiAgICAgICAgICAgICByZXR1cm4gVHJhdmVyc2FsSGVscGVyLmFkZEhhc0NvbnRhaW5lcih0aGlzLmFzQWRtaW4oKSwgbmV3IEhhc0NvbnRhaW5lcihhY2Nlc3Nvci5nZXRBY2Nlc3NvcigpLCBQLmVxKHZhbHVlKSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjY4NSw3ICsyNjgxLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGhhcyhmaW5hbCBTdHJpbmcgbGFiZWwsIGZpbmFsIFN0cmluZyBwcm9wZXJ0eUtleSwgZmluYWwgUDw/PiBwcmVkaWNhdGUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBsYWJlbCwgcHJvcGVydHlLZXksIHByZWRpY2F0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmhhcywgbGFiZWwsIHByb3BlcnR5S2V5LCBwcmVkaWNhdGUpOwogICAgICAgICBUcmF2ZXJzYWxIZWxwZXIuYWRkSGFzQ29udGFpbmVyKHRoaXMuYXNBZG1pbigpLCBuZXcgSGFzQ29udGFpbmVyKFQubGFiZWwuZ2V0QWNjZXNzb3IoKSwgUC5lcShsYWJlbCkpKTsKICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIocHJvcGVydHlLZXksIHByZWRpY2F0ZSkpOwogICAgIH0KQEAgLTI3MDEsNyArMjY5Nyw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBoYXMoZmluYWwgU3RyaW5nIGxhYmVsLCBmaW5hbCBTdHJpbmcgcHJvcGVydHlLZXksIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5oYXMsIGxhYmVsLCBwcm9wZXJ0eUtleSwgdmFsdWUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5oYXMsIGxhYmVsLCBwcm9wZXJ0eUtleSwgdmFsdWUpOwogICAgICAgICBUcmF2ZXJzYWxIZWxwZXIuYWRkSGFzQ29udGFpbmVyKHRoaXMuYXNBZG1pbigpLCBuZXcgSGFzQ29udGFpbmVyKFQubGFiZWwuZ2V0QWNjZXNzb3IoKSwgUC5lcShsYWJlbCkpKTsKICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIocHJvcGVydHlLZXksIHZhbHVlIGluc3RhbmNlb2YgUCA/IChQKSB2YWx1ZSA6IFAuZXEodmFsdWUpKSk7CiAgICAgfQpAQCAtMjcxNSw3ICsyNzExLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGhhcyhmaW5hbCBTdHJpbmcgcHJvcGVydHlLZXkpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBwcm9wZXJ0eUtleSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmhhcywgcHJvcGVydHlLZXkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJhdmVyc2FsRmlsdGVyU3RlcCh0aGlzLmFzQWRtaW4oKSwgX18udmFsdWVzKHByb3BlcnR5S2V5KSkpOwogICAgIH0KIApAQCAtMjczMCw3ICsyNzI2LDcgQEAKICAgICAgKiBAc2luY2UgMy44LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBoYXMoZmluYWwgR1ZhbHVlPFN0cmluZz4gbGFiZWwsIGZpbmFsIFN0cmluZyBwcm9wZXJ0eUtleSwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhcywgbGFiZWwuZ2V0KCksIHByb3BlcnR5S2V5LCB2YWx1ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhcywgbGFiZWwuZ2V0KCksIHByb3BlcnR5S2V5LCB2YWx1ZSk7CiAgICAgICAgIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIoVC5sYWJlbC5nZXRBY2Nlc3NvcigpLCBQLmVxKGxhYmVsKSkpOwogICAgICAgICByZXR1cm4gVHJhdmVyc2FsSGVscGVyLmFkZEhhc0NvbnRhaW5lcih0aGlzLmFzQWRtaW4oKSwgbmV3IEhhc0NvbnRhaW5lcihwcm9wZXJ0eUtleSwgdmFsdWUgaW5zdGFuY2VvZiBQID8gKFApIHZhbHVlIDogUC5lcSh2YWx1ZSkpKTsKICAgICB9CkBAIC0yNzQ2LDcgKzI3NDIsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGhhcyhmaW5hbCBHVmFsdWU8U3RyaW5nPiBsYWJlbCwgZmluYWwgU3RyaW5nIHByb3BlcnR5S2V5LCBmaW5hbCBQPD8+IHByZWRpY2F0ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5oYXMsIGxhYmVsLmdldCgpLCBwcm9wZXJ0eUtleSwgcHJlZGljYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzLCBsYWJlbC5nZXQoKSwgcHJvcGVydHlLZXksIHByZWRpY2F0ZSk7CiAgICAgICAgIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIoVC5sYWJlbC5nZXRBY2Nlc3NvcigpLCBQLmVxKGxhYmVsKSkpOwogICAgICAgICByZXR1cm4gVHJhdmVyc2FsSGVscGVyLmFkZEhhc0NvbnRhaW5lcih0aGlzLmFzQWRtaW4oKSwgbmV3IEhhc0NvbnRhaW5lcihwcm9wZXJ0eUtleSwgcHJlZGljYXRlKSk7CiAgICAgfQpAQCAtMjc2MCw3ICsyNzU2LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGhhc05vdChmaW5hbCBTdHJpbmcgcHJvcGVydHlLZXkpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaGFzTm90LCBwcm9wZXJ0eUtleSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmhhc05vdCwgcHJvcGVydHlLZXkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTm90U3RlcCh0aGlzLmFzQWRtaW4oKSwgX18udmFsdWVzKHByb3BlcnR5S2V5KSkpOwogICAgIH0KIApAQCAtMjc3NCw3ICsyNzcwLDcgQEAKICAgICAgKiBAc2luY2UgMy4yLjIKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBoYXNMYWJlbChmaW5hbCBTdHJpbmcgbGFiZWwsIGZpbmFsIFN0cmluZy4uLiBvdGhlckxhYmVscykgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5oYXNMYWJlbCwgbGFiZWwsIG90aGVyTGFiZWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzTGFiZWwsIGxhYmVsLCBvdGhlckxhYmVscyk7CiAKICAgICAgICAgLy8gZ3Jvb3Z5IGV2YWx1YXRpb24gc2VlbXMgdG8gZG8gc3RyYW5nZSB0aGluZ3Mgd2l0aCB2YXJhcmdzIGdpdmVuIGhhc0xhYmVsKG51bGwsIG51bGwpLiBvZGQgc29tZW9uZSB3b3VsZAogICAgICAgICAvLyBkbyB0aGlzIGJ1dCB0aGUgZmFpbHVyZSBpcyB1Z2x5IGlmIG5vdCBoYW5kbGVkLgpAQCAtMjc5Niw3ICsyNzkyLDcgQEAKICAgICAgICAgaWYgKG51bGwgPT0gcHJlZGljYXRlKSB7CiAgICAgICAgICAgICByZXR1cm4gaGFzTGFiZWwoKFN0cmluZykgbnVsbCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5oYXNMYWJlbCwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmhhc0xhYmVsLCBwcmVkaWNhdGUpOwogICAgICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIoVC5sYWJlbC5nZXRBY2Nlc3NvcigpLCBwcmVkaWNhdGUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MTEsNyArMjgwNyw3IEBACiAgICAgICogQHNpbmNlIDMuOC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gaGFzTGFiZWwoZmluYWwgR1ZhbHVlPFN0cmluZz4gbGFiZWwsIGZpbmFsIEdWYWx1ZTxTdHJpbmc+Li4uIG90aGVyTGFiZWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhc0xhYmVsLCBsYWJlbCwgb3RoZXJMYWJlbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5oYXNMYWJlbCwgbGFiZWwsIG90aGVyTGFiZWxzKTsKIAogICAgICAgICAvLyBncm9vdnkgZXZhbHVhdGlvbiBzZWVtcyB0byBkbyBzdHJhbmdlIHRoaW5ncyB3aXRoIHZhcmFyZ3MgZ2l2ZW4gaGFzTGFiZWwobnVsbCwgbnVsbCkuIG9kZCBzb21lb25lIHdvdWxkCiAgICAgICAgIC8vIGRvIHRoaXMgYnV0IHRoZSBmYWlsdXJlIGlzIHVnbHkgaWYgbm90IGhhbmRsZWQuCkBAIC0yODMxLDEzICsyODI3LDI0IEBACiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gaGFzSWQoZmluYWwgT2JqZWN0IGlkLCBmaW5hbCBPYmplY3QuLi4gb3RoZXJJZHMpIHsKICAgICAgICAgaWYgKGlkIGluc3RhbmNlb2YgUCkgewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzSWQoKFA8Pz4pIGlkKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmhhc0lkLCBpZCwgb3RoZXJJZHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzSWQsIGlkLCBvdGhlcklkcyk7CiAKICAgICAgICAgICAgIC8vdXNpbmcgQXJyYXlMaXN0IGdpdmVuIFAud2l0aGluKCkgdHVybnMgYWxsIGFyZ3VtZW50cyBpbnRvIGxpc3RzCiAgICAgICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gaWRzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBPYmplY3RbXSkgeworCisgICAgICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBHVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAvLyB0aGUgbG9naWMgZm9yIGRlYWxpbmcgd2l0aCBoYXNJZChbXSkgaXMgc2tldGNoeSBoaXN0b3JpY2FsbHksIGp1c3QgdHJ5aW5nIHRvIG1haW50YWluIHdoYXQgd2Ugd2VyZQorICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsbHkgdGVzdGluZyBwcmlvciB0byBHVmFsdWUuCisgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gKChHVmFsdWUpIGlkKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYmplY3RbXSkgeworICAgICAgICAgICAgICAgICAgICBpZHMuYWRkQWxsKEFycmF5cy5hc0xpc3QoR1ZhbHVlLmVuc3VyZUdWYWx1ZXMoKE9iamVjdFtdKSB2YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sbGVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpZHMuYWRkQWxsKEFycmF5cy5hc0xpc3QoR1ZhbHVlLmVuc3VyZUdWYWx1ZXMoKChDb2xsZWN0aW9uPD8+KSB2YWx1ZSkudG9BcnJheSgpKSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlkcy5hZGQoaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBPYmplY3RbXSkgewogICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zLmFkZEFsbChpZHMsIChPYmplY3RbXSkgaWQpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpZCBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAvLyBhcyBpZHMgYXJlIHVucm9sbGVkIHdoZW4gaXQncyBpbiBhcnJheSwgdGhleSBzaG91bGQgYWxzbyBiZSB1bnJvbGxlZCB3aGVuIGl0J3MgYSBsaXN0LgpAQCAtMjg4OCw3ICsyODk1LDcgQEAKICAgICAgICAgaWYgKG51bGwgPT0gcHJlZGljYXRlKQogICAgICAgICAgICAgcmV0dXJuIGhhc0lkKChPYmplY3QpIG51bGwpOwogCi0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmhhc0lkLCBwcmVkaWNhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5oYXNJZCwgcHJlZGljYXRlKTsKICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbEhlbHBlci5hZGRIYXNDb250YWluZXIodGhpcy5hc0FkbWluKCksIG5ldyBIYXNDb250YWluZXIoVC5pZC5nZXRBY2Nlc3NvcigpLCBwcmVkaWNhdGUpKTsKICAgICB9CiAKQEAgLTI5MDMsNyArMjkxMCw3IEBACiAgICAgICogQHNpbmNlIDMuMi4yCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gaGFzS2V5KGZpbmFsIFN0cmluZyBsYWJlbCwgZmluYWwgU3RyaW5nLi4uIG90aGVyTGFiZWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmhhc0tleSwgbGFiZWwsIG90aGVyTGFiZWxzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzS2V5LCBsYWJlbCwgb3RoZXJMYWJlbHMpOwogCiAgICAgICAgIC8vIGdyb292eSBldmFsdWF0aW9uIHNlZW1zIHRvIGRvIHN0cmFuZ2UgdGhpbmdzIHdpdGggdmFyYXJncyBnaXZlbiBoYXNMYWJlbChudWxsLCBudWxsKS4gb2RkIHNvbWVvbmUgd291bGQKICAgICAgICAgLy8gZG8gdGhpcyBidXQgdGhlIGZhaWx1cmUgaXMgdWdseSBpZiBub3QgaGFuZGxlZC4KQEAgLTI5MzIsNyArMjkzOSw3IEBACiAgICAgICAgIH0gZWxzZSBpZiAocHJlZGljYXRlLmlzUGFyYW1ldGVyaXplZCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXJhbWV0ZXJpemVkIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgaGFzS2V5KCkiKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmhhc0tleSwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmhhc0tleSwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBUcmF2ZXJzYWxIZWxwZXIuYWRkSGFzQ29udGFpbmVyKHRoaXMuYXNBZG1pbigpLCBuZXcgSGFzQ29udGFpbmVyKFQua2V5LmdldEFjY2Vzc29yKCksIHByZWRpY2F0ZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjk0OSw3ICsyOTU2LDcgQEAKICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUCkKICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc1ZhbHVlKChQPD8+KSB2YWx1ZSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuaGFzVmFsdWUsIHZhbHVlLCBvdGhlclZhbHVlcyk7CisgICAgICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5oYXNWYWx1ZSwgdmFsdWUsIG90aGVyVmFsdWVzKTsKICAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdFtdKSB7CiAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuYWRkQWxsKHZhbHVlcywgKE9iamVjdFtdKSB2YWx1ZSk7CkBAIC0yOTg2LDcgKzI5OTMsNyBAQAogICAgICAgICBpZiAobnVsbCA9PSBwcmVkaWNhdGUpIHsKICAgICAgICAgICAgIHJldHVybiBoYXNWYWx1ZSgoU3RyaW5nKSBudWxsKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmhhc1ZhbHVlLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaGFzVmFsdWUsIHByZWRpY2F0ZSk7CiAgICAgICAgICAgICByZXR1cm4gVHJhdmVyc2FsSGVscGVyLmFkZEhhc0NvbnRhaW5lcih0aGlzLmFzQWRtaW4oKSwgbmV3IEhhc0NvbnRhaW5lcihULnZhbHVlLmdldEFjY2Vzc29yKCksIHByZWRpY2F0ZSkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzAwMCw3ICszMDA3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGlzKGZpbmFsIFA8RT4gcHJlZGljYXRlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmlzLCBwcmVkaWNhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5pcywgcHJlZGljYXRlKTsKIAogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChwcmVkaWNhdGUuaXNQYXJhbWV0ZXJpemVkKCkgPyBuZXcgSXNTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgcHJlZGljYXRlKSA6IG5ldyBJc1N0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgcHJlZGljYXRlKSk7CiAgICAgfQpAQCAtMzAxNCw3ICszMDIxLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGlzKGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5pcywgdmFsdWUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5pcywgdmFsdWUpOwogICAgICAgICBQPEU+IHByZWRpY2F0ZSA9IHZhbHVlIGluc3RhbmNlb2YgUCA/IChQPEU+KSB2YWx1ZSA6IFAuZXEoKEUpIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAocHJlZGljYXRlLmlzUGFyYW1ldGVyaXplZCgpID8gbmV3IElzU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIHByZWRpY2F0ZSkgOiBuZXcgSXNTdGVwPD4odGhpcy5hc0FkbWluKCksIHByZWRpY2F0ZSkpOwogICAgIH0KQEAgLTMwMjgsNyArMzAzNSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBub3QoZmluYWwgVHJhdmVyc2FsPD8sID8+IG5vdFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ub3QsIG5vdFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm5vdCwgbm90VHJhdmVyc2FsKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IE5vdFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgKFRyYXZlcnNhbDxFLCA/Pikgbm90VHJhdmVyc2FsKSk7CiAgICAgfQogCkBAIC0zMDQxLDcgKzMwNDgsMjAgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGNvaW4oZmluYWwgZG91YmxlIHByb2JhYmlsaXR5KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNvaW4sIHByb2JhYmlsaXR5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY29pbiwgcHJvYmFiaWxpdHkpOworICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ29pblN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgcHJvYmFiaWxpdHkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaWx0ZXIgdGhlIDxjb2RlPkU8L2NvZGU+IG9iamVjdCBnaXZlbiBhIGJpYXNlZCBjb2luIHRvc3MuIEZvciBpbnRlcm5hbCB1c2UgZm9yICBwYXJhbWV0ZXJpemF0aW9uIGZlYXR1cmVzLgorICAgICAqCisgICAgICogQHBhcmFtIHByb2JhYmlsaXR5IHRoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSBvYmplY3Qgd2lsbCBwYXNzIHRocm91Z2ggdGhlIGZpbHRlcgorICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNhbCB3aXRoIGFuIGFwcGVuZGVkIHtAbGluayBDb2luU3RlcH0uCisgICAgICogQHNlZSA8YSBocmVmPSJodHRwOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8ke3Byb2plY3QudmVyc2lvbn0vcmVmZXJlbmNlLyNjb2luLXN0ZXAiIHRhcmdldD0iX2JsYW5rIj5SZWZlcmVuY2UgRG9jdW1lbnRhdGlvbiAtIENvaW4gU3RlcDwvYT4KKyAgICAgKiBAc2luY2UgNC4wLjAKKyAgICAgKi8KKyAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBjb2luKGZpbmFsIEdWYWx1ZTxEb3VibGU+IHByb2JhYmlsaXR5KSB7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNvaW4sIHByb2JhYmlsaXR5KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IENvaW5TdGVwPD4odGhpcy5hc0FkbWluKCksIHByb2JhYmlsaXR5KSk7CiAgICAgfQogCkBAIC0zMDU2LDcgKzMwNzYsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gcmFuZ2UoZmluYWwgbG9uZyBsb3csIGZpbmFsIGxvbmcgaGlnaCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yYW5nZSwgbG93LCBoaWdoKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMucmFuZ2UsIGxvdywgaGlnaCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBSYW5nZUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbG93LCBoaWdoKSk7CiAgICAgfQogCkBAIC0zMDcxLDcgKzMwOTEsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHJhbmdlKGZpbmFsIEdWYWx1ZTxMb25nPiBsb3csIGZpbmFsIEdWYWx1ZTxMb25nPiBoaWdoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnJhbmdlLCBsb3csIGhpZ2gpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5yYW5nZSwgbG93LCBoaWdoKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFJhbmdlR2xvYmFsU3RlcFBsYWNlaG9sZGVyKHRoaXMuYXNBZG1pbigpLCBsb3csIGhpZ2gpKTsKICAgICB9CiAKQEAgLTMwODgsNyArMzEwOCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiByYW5nZShmaW5hbCBTY29wZSBzY29wZSwgZmluYWwgbG9uZyBsb3csIGZpbmFsIGxvbmcgaGlnaCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yYW5nZSwgc2NvcGUsIGxvdywgaGlnaCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnJhbmdlLCBzY29wZSwgbG93LCBoaWdoKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkKICAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbG93LCBoaWdoKQogICAgICAgICAgICAgICAgIDogbmV3IFJhbmdlTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIGxvdywgaGlnaCkpOwpAQCAtMzEwNyw3ICszMTI3LDcgQEAKICAgICAgKiBAc2luY2UgMy44LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiByYW5nZShmaW5hbCBTY29wZSBzY29wZSwgZmluYWwgR1ZhbHVlPExvbmc+IGxvdywgZmluYWwgR1ZhbHVlPExvbmc+IGhpZ2gpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMucmFuZ2UsIHNjb3BlLCBsb3csIGhpZ2gpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5yYW5nZSwgc2NvcGUsIGxvdywgaGlnaCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpCiAgICAgICAgICAgICAgICAgPyBuZXcgUmFuZ2VHbG9iYWxTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgbG93LCBoaWdoKQogICAgICAgICAgICAgICAgIDogbmV3IFJhbmdlTG9jYWxTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgbG93LCBoaWdoKSk7CkBAIC0zMTIzLDcgKzMxNDMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gbGltaXQoZmluYWwgbG9uZyBsaW1pdCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5saW1pdCwgbGltaXQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5saW1pdCwgbGltaXQpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgUmFuZ2VHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIDAsIGxpbWl0KSk7CiAgICAgfQogCkBAIC0zMTM3LDcgKzMxNTcsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGxpbWl0KGZpbmFsIEdWYWx1ZTxMb25nPiBsaW1pdCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5saW1pdCwgbGltaXQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5saW1pdCwgbGltaXQpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgUmFuZ2VHbG9iYWxTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgR1ZhbHVlLm9mKG51bGwsIDBsKSwgbGltaXQpKTsKICAgICB9CiAKQEAgLTMxNTIsNyArMzE3Miw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBsaW1pdChmaW5hbCBTY29wZSBzY29wZSwgZmluYWwgbG9uZyBsaW1pdCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5saW1pdCwgc2NvcGUsIGxpbWl0KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMubGltaXQsIHNjb3BlLCBsaW1pdCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKHNjb3BlLmVxdWFscyhTY29wZS5nbG9iYWwpCiAgICAgICAgICAgICAgICAgPyBuZXcgUmFuZ2VHbG9iYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIDAsIGxpbWl0KQogICAgICAgICAgICAgICAgIDogbmV3IFJhbmdlTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIDAsIGxpbWl0KSk7CkBAIC0zMTY5LDcgKzMxODksNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IGxpbWl0KGZpbmFsIFNjb3BlIHNjb3BlLCBmaW5hbCBHVmFsdWU8TG9uZz4gbGltaXQpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMubGltaXQsIHNjb3BlLCBsaW1pdCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmxpbWl0LCBzY29wZSwgbGltaXQpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKQogICAgICAgICAgICAgICAgID8gbmV3IFJhbmdlR2xvYmFsU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIEdWYWx1ZS5vZihudWxsLCAwbCksIGxpbWl0KQogICAgICAgICAgICAgICAgIDogbmV3IFJhbmdlTG9jYWxTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgR1ZhbHVlLm9mKG51bGwsIDBsKSwgbGltaXQpKTsKQEAgLTMxODQsNyArMzIwNCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiB0YWlsKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50YWlsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudGFpbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUYWlsR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCAxKSk7CiAgICAgfQogCkBAIC0zMTk4LDcgKzMyMTgsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gdGFpbChmaW5hbCBsb25nIGxpbWl0KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnRhaWwsIGxpbWl0KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudGFpbCwgbGltaXQpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVGFpbEdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbGltaXQpKTsKICAgICB9CiAKQEAgLTMyMTIsNyArMzIzMiw3IEBACiAgICAgICogQHNpbmNlIDMuOC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gdGFpbChmaW5hbCBHVmFsdWU8TG9uZz4gbGltaXQpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudGFpbCwgbGltaXQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy50YWlsLCBsaW1pdCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUYWlsR2xvYmFsU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIGxpbWl0KSk7CiAgICAgfQogCkBAIC0zMjI2LDcgKzMyNDYsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gdGFpbChmaW5hbCBTY29wZSBzY29wZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50YWlsLCBzY29wZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRhaWwsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkKICAgICAgICAgICAgICAgICA/IG5ldyBUYWlsR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCAxKQogICAgICAgICAgICAgICAgIDogbmV3IFRhaWxMb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgMSkpOwpAQCAtMzI0Myw3ICszMjYzLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHRhaWwoZmluYWwgU2NvcGUgc2NvcGUsIGZpbmFsIGxvbmcgbGltaXQpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudGFpbCwgc2NvcGUsIGxpbWl0KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudGFpbCwgc2NvcGUsIGxpbWl0KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkKICAgICAgICAgICAgICAgICA/IG5ldyBUYWlsR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBsaW1pdCkKICAgICAgICAgICAgICAgICA6IG5ldyBUYWlsTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIGxpbWl0KSk7CkBAIC0zMjYwLDcgKzMyODAsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHRhaWwoZmluYWwgU2NvcGUgc2NvcGUsIGZpbmFsIEdWYWx1ZTxMb25nPiBsaW1pdCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy50YWlsLCBzY29wZSwgbGltaXQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy50YWlsLCBzY29wZSwgbGltaXQpOwogCiAgICAgICAgIFN0ZXA8PywgRTI+IHN0ZXAgPSBzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKQogICAgICAgICAgICAgICAgID8gbmV3IFRhaWxHbG9iYWxTdGVwUGxhY2Vob2xkZXI8Pih0aGlzLmFzQWRtaW4oKSwgbGltaXQpCkBAIC0zMjc3LDcgKzMyOTcsNyBAQAogICAgICAqIEBzaW5jZSAzLjMuMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHNraXAoZmluYWwgbG9uZyBza2lwKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNraXAsIHNraXApOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5za2lwLCBza2lwKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFJhbmdlR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBza2lwLCAtMSkpOwogICAgIH0KIApAQCAtMzI5MCw3ICszMzEwLDcgQEAKICAgICAgKiBAc2luY2UgMy44LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBza2lwKGZpbmFsIEdWYWx1ZTxMb25nPiBza2lwKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNraXAsIHNraXApOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5za2lwLCBza2lwKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFJhbmdlR2xvYmFsU3RlcFBsYWNlaG9sZGVyPD4odGhpcy5hc0FkbWluKCksIHNraXAsIEdWYWx1ZS5vZihudWxsLCAtMWwpKSk7CiAgICAgfQogCkBAIC0zMzA0LDcgKzMzMjQsNyBAQAogICAgICAqIEBzaW5jZSAzLjMuMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHNraXAoZmluYWwgU2NvcGUgc2NvcGUsIGZpbmFsIGxvbmcgc2tpcCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5za2lwLCBzY29wZSwgc2tpcCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnNraXAsIHNjb3BlLCBza2lwKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkKICAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc2tpcCwgLTEpCiAgICAgICAgICAgICAgICAgOiBuZXcgUmFuZ2VMb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc2tpcCwgLTEpKTsKQEAgLTMzMjAsNyArMzM0MCw3IEBACiAgICAgICogQHNpbmNlIDMuOC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gc2tpcChmaW5hbCBTY29wZSBzY29wZSwgZmluYWwgR1ZhbHVlPExvbmc+IHNraXApIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc2tpcCwgc2NvcGUsIHNraXApOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5za2lwLCBzY29wZSwgc2tpcCk7CiAKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAoc2NvcGUuZXF1YWxzKFNjb3BlLmdsb2JhbCkKICAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUdsb2JhbFN0ZXBQbGFjZWhvbGRlcjw+KHRoaXMuYXNBZG1pbigpLCBza2lwLCBHVmFsdWUub2YobnVsbCwgLTFsKSkKQEAgLTMzMzYsNyArMzM1Niw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiB0aW1lTGltaXQoZmluYWwgbG9uZyB0aW1lTGltaXQpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudGltZUxpbWl0LCB0aW1lTGltaXQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy50aW1lTGltaXQsIHRpbWVMaW1pdCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBUaW1lTGltaXRTdGVwPEU+KHRoaXMuYXNBZG1pbigpLCB0aW1lTGltaXQpKTsKICAgICB9CiAKQEAgLTMzNDgsNyArMzM2OCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBzaW1wbGVQYXRoKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zaW1wbGVQYXRoKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc2ltcGxlUGF0aCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBQYXRoRmlsdGVyU3RlcDxFPih0aGlzLmFzQWRtaW4oKSwgdHJ1ZSkpOwogICAgIH0KIApAQCAtMzM2MCw3ICszMzgwLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGN5Y2xpY1BhdGgoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmN5Y2xpY1BhdGgpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jeWNsaWNQYXRoKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFBhdGhGaWx0ZXJTdGVwPEU+KHRoaXMuYXNBZG1pbigpLCBmYWxzZSkpOwogICAgIH0KIApAQCAtMzM3Myw3ICszMzkzLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHNhbXBsZShmaW5hbCBpbnQgYW1vdW50VG9TYW1wbGUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc2FtcGxlLCBhbW91bnRUb1NhbXBsZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnNhbXBsZSwgYW1vdW50VG9TYW1wbGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgU2FtcGxlR2xvYmFsU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBhbW91bnRUb1NhbXBsZSkpOwogICAgIH0KIApAQCAtMzM4Nyw3ICszNDA3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHNhbXBsZShmaW5hbCBTY29wZSBzY29wZSwgZmluYWwgaW50IGFtb3VudFRvU2FtcGxlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNhbXBsZSwgc2NvcGUsIGFtb3VudFRvU2FtcGxlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuc2FtcGxlLCBzY29wZSwgYW1vdW50VG9TYW1wbGUpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChzY29wZS5lcXVhbHMoU2NvcGUuZ2xvYmFsKQogICAgICAgICAgICAgICAgID8gbmV3IFNhbXBsZUdsb2JhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgYW1vdW50VG9TYW1wbGUpCiAgICAgICAgICAgICAgICAgOiBuZXcgU2FtcGxlTG9jYWxTdGVwPD4odGhpcy5hc0FkbWluKCksIGFtb3VudFRvU2FtcGxlKSk7CkBAIC0zNDAzLDcgKzM0MjMsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gZHJvcCgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZHJvcCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmRyb3ApOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRHJvcFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSkpOwogICAgIH0KIApAQCAtMzQxOSw3ICszNDM5LDcgQEAKICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPSBudWxsICYmIHByZWRpY2F0ZS5pc1BhcmFtZXRlcml6ZWQoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyYW1ldGVyaXplZCBwcmVkaWNhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFsbCgpIik7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYWxsLCBwcmVkaWNhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5hbGwsIHByZWRpY2F0ZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBBbGxTdGVwPD4odGhpcy5hc0FkbWluKCksIHByZWRpY2F0ZSkpOwogICAgIH0KIApAQCAtMzQzNSw3ICszNDU1LDcgQEAKICAgICAgICAgaWYgKHByZWRpY2F0ZSAhPSBudWxsICYmIHByZWRpY2F0ZS5pc1BhcmFtZXRlcml6ZWQoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyYW1ldGVyaXplZCBwcmVkaWNhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFueSgpIik7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYW55LCBwcmVkaWNhdGUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5hbnksIHByZWRpY2F0ZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBBbnlTdGVwPD4odGhpcy5hc0FkbWluKCksIHByZWRpY2F0ZSkpOwogICAgIH0KIApAQCAtMzQ0OCw3ICszNDY4LDcgQEAKICAgICAgKiBAc2luY2UgMy44LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8UzI+IEdyYXBoVHJhdmVyc2FsPFMsIEU+IG5vbmUoZmluYWwgUDxTMj4gcHJlZGljYXRlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm5vbmUsIHByZWRpY2F0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm5vbmUsIHByZWRpY2F0ZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBOb25lU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBwcmVkaWNhdGUpKTsKICAgICB9CiAKQEAgLTM0NjMsNyArMzQ4Myw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBzaWRlRWZmZWN0KGZpbmFsIENvbnN1bWVyPFRyYXZlcnNlcjxFPj4gY29uc3VtZXIpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc2lkZUVmZmVjdCwgY29uc3VtZXIpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zaWRlRWZmZWN0LCBjb25zdW1lcik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBMYW1iZGFTaWRlRWZmZWN0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCBjb25zdW1lcikpOwogICAgIH0KIApAQCAtMzQ3Niw3ICszNDk2LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHNpZGVFZmZlY3QoZmluYWwgVHJhdmVyc2FsPD8sID8+IHNpZGVFZmZlY3RUcmF2ZXJzYWwpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc2lkZUVmZmVjdCwgc2lkZUVmZmVjdFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnNpZGVFZmZlY3QsIHNpZGVFZmZlY3RUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJhdmVyc2FsU2lkZUVmZmVjdFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgKFRyYXZlcnNhbCkgc2lkZUVmZmVjdFRyYXZlcnNhbCkpOwogICAgIH0KIApAQCAtMzQ5MSw3ICszNTExLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IGNhcChmaW5hbCBTdHJpbmcgc2lkZUVmZmVjdEtleSwgZmluYWwgU3RyaW5nLi4uIHNpZGVFZmZlY3RLZXlzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNhcCwgc2lkZUVmZmVjdEtleSwgc2lkZUVmZmVjdEtleXMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jYXAsIHNpZGVFZmZlY3RLZXksIHNpZGVFZmZlY3RLZXlzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFNpZGVFZmZlY3RDYXBTdGVwPD4odGhpcy5hc0FkbWluKCksIHNpZGVFZmZlY3RLZXksIHNpZGVFZmZlY3RLZXlzKSk7CiAgICAgfQogCkBAIC0zNTA1LDcgKzM1MjUsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRWRnZT4gc3ViZ3JhcGgoZmluYWwgU3RyaW5nIHNpZGVFZmZlY3RLZXkpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuc3ViZ3JhcGgsIHNpZGVFZmZlY3RLZXkpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zdWJncmFwaCwgc2lkZUVmZmVjdEtleSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBTdWJncmFwaFN0ZXAodGhpcy5hc0FkbWluKCksIHNpZGVFZmZlY3RLZXkpKTsKICAgICB9CiAKQEAgLTM1MTgsNyArMzUzOCw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBhZ2dyZWdhdGUoZmluYWwgU3RyaW5nIHNpZGVFZmZlY3RLZXkpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYWdncmVnYXRlLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYWdncmVnYXRlLCBzaWRlRWZmZWN0S2V5KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IEFnZ3JlZ2F0ZVN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc2lkZUVmZmVjdEtleSkpOwogICAgIH0KIApAQCAtMzUzMiw3ICszNTUyLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGdyb3VwKGZpbmFsIFN0cmluZyBzaWRlRWZmZWN0S2V5KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmdyb3VwLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZ3JvdXAsIHNpZGVFZmZlY3RLZXkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgR3JvdXBTaWRlRWZmZWN0U3RlcDw+KHRoaXMuYXNBZG1pbigpLCBzaWRlRWZmZWN0S2V5KSk7CiAgICAgfQogCkBAIC0zNTQ2LDcgKzM1NjYsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gZ3JvdXBDb3VudChmaW5hbCBTdHJpbmcgc2lkZUVmZmVjdEtleSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ncm91cENvdW50LCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZ3JvdXBDb3VudCwgc2lkZUVmZmVjdEtleSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBHcm91cENvdW50U2lkZUVmZmVjdFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgc2lkZUVmZmVjdEtleSkpOwogICAgIH0KIApAQCAtMzU1OSw3ICszNTc5LDcgQEAKICAgICAgKiBAc2luY2UgMy42LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBmYWlsKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5mYWlsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZmFpbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBGYWlsU3RlcDw+KHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC0zNTczLDcgKzM1OTMsNyBAQAogICAgICAqIEBzaW5jZSAzLjYuMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGZhaWwoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuZmFpbCwgbWVzc2FnZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmZhaWwsIG1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgRmFpbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbWVzc2FnZSkpOwogICAgIH0KIApAQCAtMzU4Niw3ICszNjA2LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IHRyZWUoZmluYWwgU3RyaW5nIHNpZGVFZmZlY3RLZXkpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudHJlZSwgc2lkZUVmZmVjdEtleSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnRyZWUsIHNpZGVFZmZlY3RLZXkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgVHJlZVNpZGVFZmZlY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIHNpZGVFZmZlY3RLZXkpKTsKICAgICB9CiAKQEAgLTM1OTksNyArMzYxOSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8ViwgVT4gR3JhcGhUcmF2ZXJzYWw8UywgRT4gc2FjayhmaW5hbCBCaUZ1bmN0aW9uPFYsIFUsIFY+IHNhY2tPcGVyYXRvcikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5zYWNrLCBzYWNrT3BlcmF0b3IpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5zYWNrLCBzYWNrT3BlcmF0b3IpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgU2Fja1ZhbHVlU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBzYWNrT3BlcmF0b3IpKTsKICAgICB9CiAKQEAgLTM2MTMsNyArMzYzMyw3IEBACiAgICAgICogQHNpbmNlIDMuMi4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBwcm9maWxlKGZpbmFsIFN0cmluZyBzaWRlRWZmZWN0S2V5KSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChUcmF2ZXJzYWwuU3ltYm9scy5wcm9maWxlLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFRyYXZlcnNhbC5TeW1ib2xzLnByb2ZpbGUsIHNpZGVFZmZlY3RLZXkpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgUHJvZmlsZVNpZGVFZmZlY3RTdGVwPD4odGhpcy5hc0FkbWluKCksIHNpZGVFZmZlY3RLZXkpKTsKICAgICB9CiAKQEAgLTM2NjEsOSArMzY4MSw5IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobnVsbCA9PSBjYXJkaW5hbGl0eSkKLSAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnByb3BlcnR5LCBrZXksIHZhbHVlLCBrZXlWYWx1ZXMpOworICAgICAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMucHJvcGVydHksIGtleSwgdmFsdWUsIGtleVZhbHVlcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnByb3BlcnR5LCBjYXJkaW5hbGl0eSwga2V5LCB2YWx1ZSwga2V5VmFsdWVzKTsKKyAgICAgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnByb3BlcnR5LCBjYXJkaW5hbGl0eSwga2V5LCB2YWx1ZSwga2V5VmFsdWVzKTsKIAogICAgICAgICAvLyBpZiBpdCBjYW4gYmUgZGV0ZWN0ZWQgdGhhdCB0aGlzIGNhbGwgdG8gcHJvcGVydHkoKSBpcyByZWxhdGVkIHRvIGFuIGFkZFYvRSgpIHRoZW4gd2UgY2FuIGF0dGVtcHQgdG8gZm9sZAogICAgICAgICAvLyB0aGUgcHJvcGVydGllcyBpbnRvIHRoYXQgc3RlcCB0byBnYWluIGFuIG9wdGltaXphdGlvbiBmb3IgdGhvc2UgZ3JhcGhzIHRoYXQgc3VwcG9ydCBzdWNoIGNhcGFiaWxpdGllcy4KQEAgLTM4MTYsNyArMzgzNiw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8TSwgRTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBicmFuY2goZmluYWwgVHJhdmVyc2FsPD8sIE0+IGJyYW5jaFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5icmFuY2gsIGJyYW5jaFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJyYW5jaCwgYnJhbmNoVHJhdmVyc2FsKTsKICAgICAgICAgZmluYWwgQnJhbmNoU3RlcDxFLCBFMiwgTT4gYnJhbmNoU3RlcCA9IG5ldyBCcmFuY2hTdGVwPD4odGhpcy5hc0FkbWluKCkpOwogICAgICAgICBicmFuY2hTdGVwLnNldEJyYW5jaFRyYXZlcnNhbCgoVHJhdmVyc2FsLkFkbWluPEUsIE0+KSBicmFuY2hUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChicmFuY2hTdGVwKTsKQEAgLTM4MzEsNyArMzg1MSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8TSwgRTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBicmFuY2goZmluYWwgRnVuY3Rpb248VHJhdmVyc2VyPEU+LCBNPiBmdW5jdGlvbikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5icmFuY2gsIGZ1bmN0aW9uKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYnJhbmNoLCBmdW5jdGlvbik7CiAgICAgICAgIGZpbmFsIEJyYW5jaFN0ZXA8RSwgRTIsIE0+IGJyYW5jaFN0ZXAgPSBuZXcgQnJhbmNoU3RlcDw+KHRoaXMuYXNBZG1pbigpKTsKICAgICAgICAgYnJhbmNoU3RlcC5zZXRCcmFuY2hUcmF2ZXJzYWwoKFRyYXZlcnNhbC5BZG1pbjxFLCBNPikgX18ubWFwKGZ1bmN0aW9uKSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKGJyYW5jaFN0ZXApOwpAQCAtMzg0OCw3ICszODY4LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxNLCBFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IGNob29zZShmaW5hbCBUcmF2ZXJzYWw8PywgTT4gY2hvaWNlVHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNob29zZSwgY2hvaWNlVHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCBjaG9pY2VUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ2hvb3NlU3RlcDw+KHRoaXMuYXNBZG1pbigpLCAoVHJhdmVyc2FsLkFkbWluPEUsIE0+KSBjaG9pY2VUcmF2ZXJzYWwpKTsKICAgICB9CiAKQEAgLTM4NjUsNyArMzg4NSw3IEBACiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gY2hvb3NlKGZpbmFsIFRyYXZlcnNhbDw/LCA/PiB0cmF2ZXJzYWxQcmVkaWNhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbDw/LCBFMj4gdHJ1ZUNob2ljZSwgZmluYWwgVHJhdmVyc2FsPD8sIEUyPiBmYWxzZUNob2ljZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jaG9vc2UsIHRyYXZlcnNhbFByZWRpY2F0ZSwgdHJ1ZUNob2ljZSwgZmFsc2VDaG9pY2UpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jaG9vc2UsIHRyYXZlcnNhbFByZWRpY2F0ZSwgdHJ1ZUNob2ljZSwgZmFsc2VDaG9pY2UpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ2hvb3NlU3RlcDxFLCBFMiwgQm9vbGVhbj4odGhpcy5hc0FkbWluKCksIChUcmF2ZXJzYWwuQWRtaW48RSwgPz4pIHRyYXZlcnNhbFByZWRpY2F0ZSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIHRydWVDaG9pY2UsIChUcmF2ZXJzYWwuQWRtaW48RSwgRTI+KSBmYWxzZUNob2ljZSkpOwogICAgIH0KIApAQCAtMzg4MSw3ICszOTAxLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBjaG9vc2UoZmluYWwgVHJhdmVyc2FsPD8sID8+IHRyYXZlcnNhbFByZWRpY2F0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVHJhdmVyc2FsPD8sIEUyPiB0cnVlQ2hvaWNlKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNob29zZSwgdHJhdmVyc2FsUHJlZGljYXRlLCB0cnVlQ2hvaWNlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCB0cmF2ZXJzYWxQcmVkaWNhdGUsIHRydWVDaG9pY2UpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ2hvb3NlU3RlcDxFLCBFMiwgQm9vbGVhbj4odGhpcy5hc0FkbWluKCksIChUcmF2ZXJzYWwuQWRtaW48RSwgPz4pIHRyYXZlcnNhbFByZWRpY2F0ZSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIHRydWVDaG9pY2UsIChUcmF2ZXJzYWwuQWRtaW48RSwgRTI+KSBfXy5pZGVudGl0eSgpKSk7CiAgICAgfQogCkBAIC0zODk2LDcgKzM5MTYsNyBAQAogICAgICAqIEBzaW5jZSAzLjguMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IGNob29zZShmaW5hbCBUIHQpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCB0KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCB0KTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IENob29zZVN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbmV3IFRva2VuVHJhdmVyc2FsPD4odCkpKTsKICAgICB9CiAKQEAgLTM5MTMsNyArMzkzMyw3IEBACiAgICAgcHVibGljIGRlZmF1bHQgPE0sIEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gY2hvb3NlKGZpbmFsIEZ1bmN0aW9uPEUsIE0+IGNob2ljZUZ1bmN0aW9uKSB7CiAgICAgICAgIGlmIChjaG9pY2VGdW5jdGlvbiBpbnN0YW5jZW9mIFQpIHJldHVybiBjaG9vc2UoKFQpIGNob2ljZUZ1bmN0aW9uKTsKIAotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jaG9vc2UsIGNob2ljZUZ1bmN0aW9uKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCBjaG9pY2VGdW5jdGlvbik7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBDaG9vc2VTdGVwPD4odGhpcy5hc0FkbWluKCksIChUcmF2ZXJzYWwuQWRtaW48RSwgTT4pIF9fLm1hcChuZXcgRnVuY3Rpb25UcmF2ZXJzZXI8PihjaG9pY2VGdW5jdGlvbikpKSk7CiAgICAgfQogCkBAIC0zOTMyLDcgKzM5NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8PywgRTI+IHRydWVDaG9pY2UsIGZpbmFsIFRyYXZlcnNhbDw/LCBFMj4gZmFsc2VDaG9pY2UpIHsKICAgICAgICAgaWYgKGNob29zZVByZWRpY2F0ZSBpbnN0YW5jZW9mIFApIHJldHVybiBjaG9vc2UoKFApIGNob29zZVByZWRpY2F0ZSwgdHJ1ZUNob2ljZSwgZmFsc2VDaG9pY2UpOwogCi0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmNob29zZSwgY2hvb3NlUHJlZGljYXRlLCB0cnVlQ2hvaWNlLCBmYWxzZUNob2ljZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNob29zZSwgY2hvb3NlUHJlZGljYXRlLCB0cnVlQ2hvaWNlLCBmYWxzZUNob2ljZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBDaG9vc2VTdGVwPEUsIEUyLCBCb29sZWFuPih0aGlzLmFzQWRtaW4oKSwgKFRyYXZlcnNhbC5BZG1pbjxFLCA/PikgX18uZmlsdGVyKG5ldyBQcmVkaWNhdGVUcmF2ZXJzZXI8PihjaG9vc2VQcmVkaWNhdGUpKSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIHRydWVDaG9pY2UsIChUcmF2ZXJzYWwuQWRtaW48RSwgRTI+KSBmYWxzZUNob2ljZSkpOwogICAgIH0KIApAQCAtMzk1Miw3ICszOTcyLDcgQEAKICAgICAgICAgaWYgKGNob29zZVByZWRpY2F0ZS5pc1BhcmFtZXRlcml6ZWQoKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGFyYW1ldGVyaXplZCBwcmVkaWNhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGNob29zZSgpIik7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCBjaG9vc2VQcmVkaWNhdGUsIHRydWVDaG9pY2UsIGZhbHNlQ2hvaWNlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCBjaG9vc2VQcmVkaWNhdGUsIHRydWVDaG9pY2UsIGZhbHNlQ2hvaWNlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IENob29zZVN0ZXA8RSwgRTIsIEJvb2xlYW4+KHRoaXMuYXNBZG1pbigpLCAoVHJhdmVyc2FsLkFkbWluPEUsID8+KSBfXy5pcyhjaG9vc2VQcmVkaWNhdGUpLCAoVHJhdmVyc2FsLkFkbWluPEUsIEUyPikgdHJ1ZUNob2ljZSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIGZhbHNlQ2hvaWNlKSk7CiAgICAgfQogCkBAIC0zOTcwLDcgKzM5OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8PywgRTI+IHRydWVDaG9pY2UpIHsKICAgICAgICAgaWYgKGNob29zZVByZWRpY2F0ZSBpbnN0YW5jZW9mIFApIHJldHVybiBjaG9vc2UoKFApIGNob29zZVByZWRpY2F0ZSwgdHJ1ZUNob2ljZSk7CiAKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY2hvb3NlLCBjaG9vc2VQcmVkaWNhdGUsIHRydWVDaG9pY2UpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jaG9vc2UsIGNob29zZVByZWRpY2F0ZSwgdHJ1ZUNob2ljZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBDaG9vc2VTdGVwPEUsIEUyLCBCb29sZWFuPih0aGlzLmFzQWRtaW4oKSwgKFRyYXZlcnNhbC5BZG1pbjxFLCA/PikgX18uZmlsdGVyKG5ldyBQcmVkaWNhdGVUcmF2ZXJzZXI8PihjaG9vc2VQcmVkaWNhdGUpKSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIHRydWVDaG9pY2UsIChUcmF2ZXJzYWwuQWRtaW48RSwgRTI+KSBfXy5pZGVudGl0eSgpKSk7CiAgICAgfQogCkBAIC0zOTg5LDcgKzQwMDksNyBAQAogICAgICAgICBpZiAoY2hvb3NlUHJlZGljYXRlLmlzUGFyYW1ldGVyaXplZCgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXJhbWV0ZXJpemVkIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgY2hvb3NlKCkiKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jaG9vc2UsIGNob29zZVByZWRpY2F0ZSwgdHJ1ZUNob2ljZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNob29zZSwgY2hvb3NlUHJlZGljYXRlLCB0cnVlQ2hvaWNlKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IENob29zZVN0ZXA8RSwgRTIsIEJvb2xlYW4+KHRoaXMuYXNBZG1pbigpLCAoVHJhdmVyc2FsLkFkbWluPEUsID8+KSBfXy5pcyhjaG9vc2VQcmVkaWNhdGUpLCAoVHJhdmVyc2FsLkFkbWluPEUsIEUyPikgdHJ1ZUNob2ljZSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIF9fLmlkZW50aXR5KCkpKTsKICAgICB9CiAKQEAgLTQwMDIsNyArNDAyMiw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBvcHRpb25hbChmaW5hbCBUcmF2ZXJzYWw8PywgRTI+IG9wdGlvbmFsVHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm9wdGlvbmFsLCBvcHRpb25hbFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLm9wdGlvbmFsLCBvcHRpb25hbFRyYXZlcnNhbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBPcHRpb25hbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgKFRyYXZlcnNhbC5BZG1pbjxFMiwgRTI+KSBvcHRpb25hbFRyYXZlcnNhbCkpOwogICAgIH0KIApAQCAtNDAxNSw3ICs0MDM1LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRTI+IHVuaW9uKGZpbmFsIFRyYXZlcnNhbDw/LCBFMj4uLi4gdW5pb25UcmF2ZXJzYWxzKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnVuaW9uLCB1bmlvblRyYXZlcnNhbHMpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy51bmlvbiwgdW5pb25UcmF2ZXJzYWxzKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IFVuaW9uU3RlcDw+KHRoaXMuYXNBZG1pbigpLCBBcnJheXMuY29weU9mKHVuaW9uVHJhdmVyc2FscywgdW5pb25UcmF2ZXJzYWxzLmxlbmd0aCwgVHJhdmVyc2FsLkFkbWluW10uY2xhc3MpKSk7CiAgICAgfQogCkBAIC00MDI4LDcgKzQwNDgsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gY29hbGVzY2UoZmluYWwgVHJhdmVyc2FsPD8sIEUyPi4uLiBjb2FsZXNjZVRyYXZlcnNhbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuY29hbGVzY2UsIGNvYWxlc2NlVHJhdmVyc2Fscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmNvYWxlc2NlLCBjb2FsZXNjZVRyYXZlcnNhbHMpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgQ29hbGVzY2VTdGVwPD4odGhpcy5hc0FkbWluKCksIEFycmF5cy5jb3B5T2YoY29hbGVzY2VUcmF2ZXJzYWxzLCBjb2FsZXNjZVRyYXZlcnNhbHMubGVuZ3RoLCBUcmF2ZXJzYWwuQWRtaW5bXS5jbGFzcykpKTsKICAgICB9CiAKQEAgLTQwNDEsNyArNDA2MSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiByZXBlYXQoZmluYWwgVHJhdmVyc2FsPD8sIEU+IHJlcGVhdFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yZXBlYXQsIHJlcGVhdFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnJlcGVhdCwgcmVwZWF0VHJhdmVyc2FsKTsKICAgICAgICAgcmV0dXJuIFJlcGVhdFN0ZXAuYWRkUmVwZWF0VG9UcmF2ZXJzYWwodGhpcywgKFRyYXZlcnNhbC5BZG1pbjxFLCBFPikgcmVwZWF0VHJhdmVyc2FsKTsKICAgICB9CiAKQEAgLTQwNTUsNyArNDA3NSw3IEBACiAgICAgICogQHNpbmNlIDMuNC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gcmVwZWF0KGZpbmFsIFN0cmluZyBsb29wTmFtZSwgZmluYWwgVHJhdmVyc2FsPD8sIEU+IHJlcGVhdFRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5yZXBlYXQsIGxvb3BOYW1lLCByZXBlYXRUcmF2ZXJzYWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5yZXBlYXQsIGxvb3BOYW1lLCByZXBlYXRUcmF2ZXJzYWwpOwogICAgICAgICByZXR1cm4gUmVwZWF0U3RlcC5hZGRSZXBlYXRUb1RyYXZlcnNhbCh0aGlzLCBsb29wTmFtZSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFPikgcmVwZWF0VHJhdmVyc2FsKTsKICAgICB9CiAKQEAgLTQwNjksNyArNDA4OSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBlbWl0KGZpbmFsIFRyYXZlcnNhbDw/LCA/PiBlbWl0VHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmVtaXQsIGVtaXRUcmF2ZXJzYWwpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5lbWl0LCBlbWl0VHJhdmVyc2FsKTsKICAgICAgICAgcmV0dXJuIFJlcGVhdFN0ZXAuYWRkRW1pdFRvVHJhdmVyc2FsKHRoaXMsIChUcmF2ZXJzYWwuQWRtaW48RSwgPz4pIGVtaXRUcmF2ZXJzYWwpOwogICAgIH0KIApAQCAtNDA4NSw3ICs0MTA1LDcgQEAKICAgICAgICAgaWYgKGVtaXRQcmVkaWNhdGUgIT0gbnVsbCAmJiBlbWl0UHJlZGljYXRlIGluc3RhbmNlb2YgUCAmJiAoKFA8VHJhdmVyc2VyPEU+PikgZW1pdFByZWRpY2F0ZSkuaXNQYXJhbWV0ZXJpemVkKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcmFtZXRlcml6ZWQgcHJlZGljYXRlcyBhcmUgbm90IHN1cHBvcnRlZCBieSBlbWl0KCkiKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5lbWl0LCBlbWl0UHJlZGljYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuZW1pdCwgZW1pdFByZWRpY2F0ZSk7CiAgICAgICAgIHJldHVybiBSZXBlYXRTdGVwLmFkZEVtaXRUb1RyYXZlcnNhbCh0aGlzLCAoVHJhdmVyc2FsLkFkbWluPEUsID8+KSBfXy5maWx0ZXIoZW1pdFByZWRpY2F0ZSkpOwogICAgIH0KIApAQCAtNDA5Nyw3ICs0MTE3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGVtaXQoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmVtaXQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5lbWl0KTsKICAgICAgICAgcmV0dXJuIFJlcGVhdFN0ZXAuYWRkRW1pdFRvVHJhdmVyc2FsKHRoaXMsIFRydWVUcmF2ZXJzYWwuaW5zdGFuY2UoKSk7CiAgICAgfQogCkBAIC00MTEwLDcgKzQxMzAsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gdW50aWwoZmluYWwgVHJhdmVyc2FsPD8sID8+IHVudGlsVHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnVudGlsLCB1bnRpbFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnVudGlsLCB1bnRpbFRyYXZlcnNhbCk7CiAgICAgICAgIHJldHVybiBSZXBlYXRTdGVwLmFkZFVudGlsVG9UcmF2ZXJzYWwodGhpcywgKFRyYXZlcnNhbC5BZG1pbjxFLCA/PikgdW50aWxUcmF2ZXJzYWwpOwogICAgIH0KIApAQCAtNDEyNiw3ICs0MTQ2LDcgQEAKICAgICAgICAgaWYgKHVudGlsUHJlZGljYXRlICE9IG51bGwgJiYgdW50aWxQcmVkaWNhdGUgaW5zdGFuY2VvZiBQICYmICgoUDxUcmF2ZXJzZXI8RT4+KSB1bnRpbFByZWRpY2F0ZSkuaXNQYXJhbWV0ZXJpemVkKCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcmFtZXRlcml6ZWQgcHJlZGljYXRlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB1bnRpbCgpIik7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudW50aWwsIHVudGlsUHJlZGljYXRlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudW50aWwsIHVudGlsUHJlZGljYXRlKTsKICAgICAgICAgcmV0dXJuIFJlcGVhdFN0ZXAuYWRkVW50aWxUb1RyYXZlcnNhbCh0aGlzLCAoVHJhdmVyc2FsLkFkbWluPEUsID8+KSBfXy5maWx0ZXIodW50aWxQcmVkaWNhdGUpKTsKICAgICB9CiAKQEAgLTQxMzksNyArNDE1OSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiB0aW1lcyhmaW5hbCBpbnQgbWF4TG9vcHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMudGltZXMsIG1heExvb3BzKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMudGltZXMsIG1heExvb3BzKTsKICAgICAgICAgaWYgKHRoaXMuYXNBZG1pbigpLmdldEVuZFN0ZXAoKSBpbnN0YW5jZW9mIFRpbWVzTW9kdWxhdGluZykgewogICAgICAgICAgICAgKChUaW1lc01vZHVsYXRpbmcpIHRoaXMuYXNBZG1pbigpLmdldEVuZFN0ZXAoKSkubW9kdWxhdGVUaW1lcyhtYXhMb29wcyk7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKQEAgLTQxNTYsNyArNDE3Niw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8RTI+IEdyYXBoVHJhdmVyc2FsPFMsIEUyPiBsb2NhbChmaW5hbCBUcmF2ZXJzYWw8PywgRTI+IGxvY2FsVHJhdmVyc2FsKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmxvY2FsLCBsb2NhbFRyYXZlcnNhbCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmxvY2FsLCBsb2NhbFRyYXZlcnNhbCk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBMb2NhbFN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbG9jYWxUcmF2ZXJzYWwuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC00MTcwLDcgKzQxOTAsNyBAQAogICAgICAqIEBzaW5jZSAzLjIuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gcGFnZVJhbmsoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnBhZ2VSYW5rKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMucGFnZVJhbmspOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcCgoU3RlcDxFLCBFPikgbmV3IFBhZ2VSYW5rVmVydGV4UHJvZ3JhbVN0ZXAodGhpcy5hc0FkbWluKCksIDAuODVkKSk7CiAgICAgfQogCkBAIC00MTgyLDcgKzQyMDIsNyBAQAogICAgICAqIEBzaW5jZSAzLjIuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gcGFnZVJhbmsoZmluYWwgZG91YmxlIGFscGhhKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnBhZ2VSYW5rLCBhbHBoYSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnBhZ2VSYW5rLCBhbHBoYSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKChTdGVwPEUsIEU+KSBuZXcgUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtU3RlcCh0aGlzLmFzQWRtaW4oKSwgYWxwaGEpKTsKICAgICB9CiAKQEAgLTQxOTQsNyArNDIxNCw3IEBACiAgICAgICogQHNpbmNlIDMuMi4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBwZWVyUHJlc3N1cmUoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnBlZXJQcmVzc3VyZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnBlZXJQcmVzc3VyZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKChTdGVwPEUsIEU+KSBuZXcgUGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbVN0ZXAodGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTQyMDYsNyArNDIyNiw3IEBACiAgICAgICogQHNpbmNlIDMuNC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gY29ubmVjdGVkQ29tcG9uZW50KCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5jb25uZWN0ZWRDb21wb25lbnQpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5jb25uZWN0ZWRDb21wb25lbnQpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcCgoU3RlcDxFLCBFPikgbmV3IENvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW1TdGVwKHRoaXMuYXNBZG1pbigpKSk7CiAgICAgfQogCkBAIC00MjI0LDcgKzQyNDQsNyBAQAogICAgICAgICAgICAgLy8gSEFMVEVEX1RSQVZFUlNFUiBzdG9yZWQgaW4gbWVtb3J5IGFuZCBzdG9yZWQgYXMgdmVydGV4IHByb3BlcnRpZXMpOyBpbnN0ZWFkIGl0IGp1c3QgZW1pdHMgYWxsIHZlcnRpY2VzLgogICAgICAgICAgICAgdGhpcy5pZGVudGl0eSgpOwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLnNob3J0ZXN0UGF0aCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnNob3J0ZXN0UGF0aCk7CiAgICAgICAgIHJldHVybiAoR3JhcGhUcmF2ZXJzYWw8UywgUGF0aD4pICgoVHJhdmVyc2FsLkFkbWluKSB0aGlzLmFzQWRtaW4oKSkKICAgICAgICAgICAgICAgICAuYWRkU3RlcChuZXcgU2hvcnRlc3RQYXRoVmVydGV4UHJvZ3JhbVN0ZXAodGhpcy5hc0FkbWluKCkpKTsKICAgICB9CkBAIC00MjUyLDcgKzQyNzIsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gYXMoZmluYWwgU3RyaW5nIHN0ZXBMYWJlbCwgZmluYWwgU3RyaW5nLi4uIHN0ZXBMYWJlbHMpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYXMsIHN0ZXBMYWJlbCwgc3RlcExhYmVscyk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmFzLCBzdGVwTGFiZWwsIHN0ZXBMYWJlbHMpOwogICAgICAgICBpZiAodGhpcy5hc0FkbWluKCkuZ2V0U3RlcHMoKS5zaXplKCkgPT0gMCkgdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgU3RhcnRTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICAgICAgZmluYWwgU3RlcDw/LCBFPiBlbmRTdGVwID0gdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpOwogICAgICAgICBlbmRTdGVwLmFkZExhYmVsKHN0ZXBMYWJlbCk7CkBAIC00MjcyLDcgKzQyOTIsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gYmFycmllcigpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYmFycmllcik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJhcnJpZXIpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgTm9PcEJhcnJpZXJTdGVwPD4odGhpcy5hc0FkbWluKCksIEludGVnZXIuTUFYX1ZBTFVFKSk7CiAgICAgfQogCkBAIC00Mjg2LDcgKzQzMDYsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gYmFycmllcihmaW5hbCBpbnQgbWF4QmFycmllclNpemUpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYmFycmllciwgbWF4QmFycmllclNpemUpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5iYXJyaWVyLCBtYXhCYXJyaWVyU2l6ZSk7CiAgICAgICAgIHJldHVybiB0aGlzLmFzQWRtaW4oKS5hZGRTdGVwKG5ldyBOb09wQmFycmllclN0ZXA8Pih0aGlzLmFzQWRtaW4oKSwgbWF4QmFycmllclNpemUpKTsKICAgICB9CiAKQEAgLTQzMDcsNyArNDMyNyw3IEBACiAgICAgICogQHNpbmNlIDMuNC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFMj4gaW5kZXgoKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmluZGV4KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuaW5kZXgpOwogICAgICAgICByZXR1cm4gdGhpcy5hc0FkbWluKCkuYWRkU3RlcChuZXcgSW5kZXhTdGVwPD4odGhpcy5hc0FkbWluKCkpKTsKICAgICB9CiAKQEAgLTQzMjIsNyArNDM0Miw3IEBACiAgICAgICogQHNpbmNlIDMuMi4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBiYXJyaWVyKGZpbmFsIENvbnN1bWVyPFRyYXZlcnNlclNldDxPYmplY3Q+PiBiYXJyaWVyQ29uc3VtZXIpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYmFycmllciwgYmFycmllckNvbnN1bWVyKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYmFycmllciwgYmFycmllckNvbnN1bWVyKTsKICAgICAgICAgcmV0dXJuIHRoaXMuYXNBZG1pbigpLmFkZFN0ZXAobmV3IExhbWJkYUNvbGxlY3RpbmdCYXJyaWVyU3RlcDw+KHRoaXMuYXNBZG1pbigpLCAoQ29uc3VtZXIpIGJhcnJpZXJDb25zdW1lciwgSW50ZWdlci5NQVhfVkFMVUUpKTsKICAgICB9CiAKQEAgLTQzMzksNyArNDM1OSw3IEBACiAgICAgICogQHNpbmNlIDMuNC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UyxFPiB3aXRoKGZpbmFsIFN0cmluZyBrZXkpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMud2l0aCwga2V5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMud2l0aCwga2V5KTsKICAgICAgICAgZmluYWwgT2JqZWN0W10gY29uZmlnUGFpciA9IHsga2V5LCB0cnVlIH07CiAgICAgICAgICgoQ29uZmlndXJpbmcpIHRoaXMuYXNBZG1pbigpLmdldEVuZFN0ZXAoKSkuY29uZmlndXJlKGNvbmZpZ1BhaXIpOwogICAgICAgICByZXR1cm4gdGhpczsKQEAgLTQzNTYsNyArNDM3Niw3IEBACiAgICAgICogQHNpbmNlIDMuNC4wCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UyxFPiB3aXRoKGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy53aXRoLCBrZXksIHZhbHVlKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMud2l0aCwga2V5LCB2YWx1ZSk7CiAgICAgICAgIGZpbmFsIE9iamVjdFtdIGNvbmZpZ1BhaXIgPSB7IGtleSwgdmFsdWUgfTsKICAgICAgICAgKChDb25maWd1cmluZykgdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpKS5jb25maWd1cmUoY29uZmlnUGFpcik7CiAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtNDM3Myw3ICs0MzkzLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGJ5KCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ieSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJ5KTsKICAgICAgICAgKChCeU1vZHVsYXRpbmcpIHRoaXMuYXNBZG1pbigpLmdldEVuZFN0ZXAoKSkubW9kdWxhdGVCeSgpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC00Mzg4LDcgKzQ0MDgsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gYnkoZmluYWwgVHJhdmVyc2FsPD8sID8+IHRyYXZlcnNhbCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ieSwgdHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYnksIHRyYXZlcnNhbCk7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkodHJhdmVyc2FsLmFzQWRtaW4oKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTQ0MDMsNyArNDQyMyw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBieShmaW5hbCBUIHRva2VuKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCB0b2tlbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCB0b2tlbik7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkodG9rZW4pOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC00NDE4LDcgKzQ0MzgsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgR3JhcGhUcmF2ZXJzYWw8UywgRT4gYnkoZmluYWwgU3RyaW5nIGtleSkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ieSwga2V5KTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYnksIGtleSk7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkoa2V5KTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNDQzMyw3ICs0NDUzLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxWPiBHcmFwaFRyYXZlcnNhbDxTLCBFPiBieShmaW5hbCBGdW5jdGlvbjxWLCBPYmplY3Q+IGZ1bmN0aW9uKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCBmdW5jdGlvbik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCBmdW5jdGlvbik7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkoZnVuY3Rpb24pOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC00NDUxLDcgKzQ0NzEsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPFY+IEdyYXBoVHJhdmVyc2FsPFMsIEU+IGJ5KGZpbmFsIFRyYXZlcnNhbDw/LCA/PiB0cmF2ZXJzYWwsIGZpbmFsIENvbXBhcmF0b3I8Vj4gY29tcGFyYXRvcikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ieSwgdHJhdmVyc2FsLCBjb21wYXJhdG9yKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMuYnksIHRyYXZlcnNhbCwgY29tcGFyYXRvcik7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkodHJhdmVyc2FsLmFzQWRtaW4oKSwgY29tcGFyYXRvcik7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTQ0NjYsNyArNDQ4Niw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBieShmaW5hbCBDb21wYXJhdG9yPEU+IGNvbXBhcmF0b3IpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYnksIGNvbXBhcmF0b3IpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5ieSwgY29tcGFyYXRvcik7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkoY29tcGFyYXRvcik7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTQ0ODEsNyArNDUwMSw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLCBFPiBieShmaW5hbCBPcmRlciBvcmRlcikgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5ieSwgb3JkZXIpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5ieSwgb3JkZXIpOwogICAgICAgICAoKEJ5TW9kdWxhdGluZykgdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpKS5tb2R1bGF0ZUJ5KG9yZGVyKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNDQ5Nyw3ICs0NTE3LDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxWPiBHcmFwaFRyYXZlcnNhbDxTLCBFPiBieShmaW5hbCBTdHJpbmcga2V5LCBmaW5hbCBDb21wYXJhdG9yPFY+IGNvbXBhcmF0b3IpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMuYnksIGtleSwgY29tcGFyYXRvcik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCBrZXksIGNvbXBhcmF0b3IpOwogICAgICAgICAoKEJ5TW9kdWxhdGluZykgdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpKS5tb2R1bGF0ZUJ5KGtleSwgY29tcGFyYXRvcik7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTQ1MTMsNyArNDUzMyw3IEBACiAgICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCA8VT4gR3JhcGhUcmF2ZXJzYWw8UywgRT4gYnkoZmluYWwgRnVuY3Rpb248VSwgT2JqZWN0PiBmdW5jdGlvbiwgZmluYWwgQ29tcGFyYXRvciBjb21wYXJhdG9yKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCBmdW5jdGlvbiwgY29tcGFyYXRvcik7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLmJ5LCBmdW5jdGlvbiwgY29tcGFyYXRvcik7CiAgICAgICAgICgoQnlNb2R1bGF0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLm1vZHVsYXRlQnkoZnVuY3Rpb24sIGNvbXBhcmF0b3IpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC00NTM1LDcgKzQ1NTUsNyBAQAogICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCiAgICAgICovCiAgICAgcHVibGljIGRlZmF1bHQgPE0sIEUyPiBHcmFwaFRyYXZlcnNhbDxTLCBFPiBvcHRpb24oZmluYWwgTSB0b2tlbiwgZmluYWwgVHJhdmVyc2FsPD8sIEUyPiB0cmF2ZXJzYWxPcHRpb24pIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMub3B0aW9uLCB0b2tlbiwgdHJhdmVyc2FsT3B0aW9uKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMub3B0aW9uLCB0b2tlbiwgdHJhdmVyc2FsT3B0aW9uKTsKIAogICAgICAgICAvLyBoYW5kbGUgbnVsbCBzaW1pbGFyIHRvIGhvdyBvcHRpb24oKSB3aXRoIE1hcCBoYW5kbGVzIGl0LCBvdGhlcndpc2Ugd2UgZ2V0IGEgTlBFIGlmIHRoaXMgb25lIGdldHMgdXNlZAogICAgICAgICBmaW5hbCBUcmF2ZXJzYWwuQWRtaW48RSxFMj4gdCA9IG51bGwgPT0gdHJhdmVyc2FsT3B0aW9uID8KQEAgLTQ1NjcsNyArNDU4Nyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy5vcHRpb24sIHRva2VuLCBtKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMub3B0aW9uLCB0b2tlbiwgbSk7CiAgICAgICAgICgoVHJhdmVyc2FsT3B0aW9uUGFyZW50PE0sIEUsIEUyPikgdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpKS5hZGRDaGlsZE9wdGlvbih0b2tlbiwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIG5ldyBDb25zdGFudFRyYXZlcnNhbDw+KG0pLmFzQWRtaW4oKSk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KQEAgLTQ1OTEsNyArNDYxMSw3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvcHRpb24oKSB3aXRoIHRoZSBDYXJkaW5hbGl0eSBhcmd1bWVudCBjYW4gb25seSBiZSB1c2VkIGZvbGxvd2luZyBtZXJnZVYoKSIpOwogICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMub3B0aW9uLCBtZXJnZSwgbSwgY2FyZGluYWxpdHkpOworICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmFkZFN0ZXAoU3ltYm9scy5vcHRpb24sIG1lcmdlLCBtLCBjYXJkaW5hbGl0eSk7CiAgICAgICAgIC8vIGRvIGV4cGxpY2l0IGNhcmRpbmFsaXR5IGZvciBldmVyeSBzaW5nbGUgcGFpciBpbiB0aGUgbWFwCiAgICAgICAgIGZvciAoT2JqZWN0IGsgOiBtLmtleVNldCgpKSB7CiAgICAgICAgICAgICBmaW5hbCBPYmplY3QgbyA9IG0uZ2V0KGspOwpAQCAtNDYxMyw3ICs0NjMzLDcgQEAKICAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IDxFMj4gR3JhcGhUcmF2ZXJzYWw8UywgRT4gb3B0aW9uKGZpbmFsIFRyYXZlcnNhbDw/LCBFMj4gdHJhdmVyc2FsT3B0aW9uKSB7Ci0gICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkuYWRkU3RlcChTeW1ib2xzLm9wdGlvbiwgdHJhdmVyc2FsT3B0aW9uKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKFN5bWJvbHMub3B0aW9uLCB0cmF2ZXJzYWxPcHRpb24pOwogICAgICAgICAoKFRyYXZlcnNhbE9wdGlvblBhcmVudDxPYmplY3QsIEUsIEUyPikgdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpKS5hZGRDaGlsZE9wdGlvbihQaWNrLmFueSwgKFRyYXZlcnNhbC5BZG1pbjxFLCBFMj4pIHRyYXZlcnNhbE9wdGlvbi5hc0FkbWluKCkpOwogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CkBAIC00NjMzLDcgKzQ2NTMsNyBAQAogICAgICAgICBpZiAobSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gb3B0aW9uKHRva2VuLCAoTWFwKSBudWxsKTsKICAgICAgICAgfQotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5vcHRpb24sIHRva2VuLCBtKTsKKyAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3B0aW9uLCB0b2tlbiwgbSk7CiAgICAgICAgIFRyYXZlcnNhbE9wdGlvblBhcmVudDxNLCBFLCBFMj4gZW5kU3RlcCA9IChUcmF2ZXJzYWxPcHRpb25QYXJlbnQ8TSwgRSwgRTI+KSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCk7CiAgICAgICAgIGVuZFN0ZXAuYWRkQ2hpbGRPcHRpb24odG9rZW4sIChUcmF2ZXJzYWwuQWRtaW48RSwgRTI+KSBuZXcgQ29uc3RhbnRUcmF2ZXJzYWw8PihtLmdldCgpKS5hc0FkbWluKCkpOwogICAgICAgICBpZiAoZW5kU3RlcCBpbnN0YW5jZW9mIE1lcmdlU3RlcENvbnRyYWN0KSB7CkBAIC00NjYzLDcgKzQ2ODMsNyBAQAogICAgICAqIEBzaW5jZSAzLjQuMAogICAgICAqLwogICAgIHB1YmxpYyBkZWZhdWx0IEdyYXBoVHJhdmVyc2FsPFMsRT4gcmVhZCgpIHsKLSAgICAgICAgdGhpcy5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKS5hZGRTdGVwKFN5bWJvbHMucmVhZCk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLnJlYWQpOwogICAgICAgICAoKFJlYWRXcml0aW5nKSB0aGlzLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCkpLnNldE1vZGUoUmVhZFdyaXRpbmcuTW9kZS5SRUFESU5HKTsKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgfQpAQCAtNDY3OCw3ICs0Njk4LDcgQEAKICAgICAgKiBAc2luY2UgMy40LjAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCBHcmFwaFRyYXZlcnNhbDxTLEU+IHdyaXRlKCkgewotICAgICAgICB0aGlzLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmFkZFN0ZXAoU3ltYm9scy53cml0ZSk7CisgICAgICAgIHRoaXMuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuYWRkU3RlcChTeW1ib2xzLndyaXRlKTsKICAgICAgICAgKChSZWFkV3JpdGluZykgdGhpcy5hc0FkbWluKCkuZ2V0RW5kU3RlcCgpKS5zZXRNb2RlKFJlYWRXcml0aW5nLk1vZGUuV1JJVElORyk7CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsU291cmNlLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9ncmFwaC9HcmFwaFRyYXZlcnNhbFNvdXJjZS5qYXZhCmluZGV4IDQyN2U5ZmUuLjY4NGQ5ZTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsU291cmNlLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxTb3VyY2UuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5HcmFwaENvbXB1dGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUuUmVtb3RlQ29ubmVjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlJlbW90ZVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBSZW1vdGVDb25uZWN0aW9uIGNvbm5lY3Rpb247CiAgICAgcHJvdGVjdGVkIGZpbmFsIEdyYXBoIGdyYXBoOwogICAgIHByb3RlY3RlZCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHN0cmF0ZWdpZXM7Ci0gICAgcHJvdGVjdGVkIEJ5dGVjb2RlIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7CisgICAgcHJvdGVjdGVkIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nID0gbmV3IEdyZW1saW5MYW5nKCk7CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vCiAKQEAgLTEyMCw4ICsxMjAsOCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlY29kZSBnZXRCeXRlY29kZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZWNvZGU7CisgICAgcHVibGljIEdyZW1saW5MYW5nIGdldEdyZW1saW5MYW5nKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ncmVtbGluTGFuZzsKICAgICB9CiAKICAgICBAU3VwcHJlc3NXYXJuaW5ncygiQ2xvbmVEb2VzbnREZWNsYXJlQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iKQpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IChHcmFwaFRyYXZlcnNhbFNvdXJjZSkgc3VwZXIuY2xvbmUoKTsKICAgICAgICAgICAgIGNsb25lLnN0cmF0ZWdpZXMgPSB0aGlzLnN0cmF0ZWdpZXMuY2xvbmUoKTsKLSAgICAgICAgICAgIGNsb25lLmJ5dGVjb2RlID0gdGhpcy5ieXRlY29kZS5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcgPSB0aGlzLmdyZW1saW5MYW5nLmNsb25lKCk7CiAgICAgICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgICAgIH0gY2F0Y2ggKGZpbmFsIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwpAQCAtMjk2LDE0ICsyOTYsMTQgQEAKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKICAgICAgICAgUmVxdWlyZW1lbnRzU3RyYXRlZ3kuYWRkUmVxdWlyZW1lbnRzKGNsb25lLmdldFN0cmF0ZWdpZXMoKSwgVHJhdmVyc2VyUmVxdWlyZW1lbnQuT05FX0JVTEspOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTb3VyY2UoU3ltYm9scy53aXRoQnVsaywgdXNlQnVsayk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFNvdXJjZShTeW1ib2xzLndpdGhCdWxrLCB1c2VCdWxrKTsKICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgIH0KIAogICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB3aXRoUGF0aCgpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7CiAgICAgICAgIFJlcXVpcmVtZW50c1N0cmF0ZWd5LmFkZFJlcXVpcmVtZW50cyhjbG9uZS5nZXRTdHJhdGVnaWVzKCksIFRyYXZlcnNlclJlcXVpcmVtZW50LlBBVEgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTb3VyY2UoU3ltYm9scy53aXRoUGF0aCk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFNvdXJjZShTeW1ib2xzLndpdGhQYXRoKTsKICAgICAgICAgcmV0dXJuIGNsb25lOwogICAgIH0KIApAQCAtMzE4LDcgKzMxOCw3IEBACiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBhZGRWKGZpbmFsIFN0cmluZyB2ZXJ0ZXhMYWJlbCkgewogICAgICAgICBpZiAobnVsbCA9PSB2ZXJ0ZXhMYWJlbCkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidmVydGV4TGFiZWwgY2Fubm90IGJlIG51bGwiKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRWLCB2ZXJ0ZXhMYWJlbCk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRWLCB2ZXJ0ZXhMYWJlbCk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICByZXR1cm4gdHJhdmVyc2FsLmFkZFN0ZXAobmV3IEFkZFZlcnRleFN0YXJ0U3RlcFBsYWNlaG9sZGVyKHRyYXZlcnNhbCwgdmVydGV4TGFiZWwpKTsKICAgICB9CkBAIC0zMzIsNyArMzMyLDcgQEAKICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGFkZFYoZmluYWwgVHJhdmVyc2FsPD8sIFN0cmluZz4gdmVydGV4TGFiZWxUcmF2ZXJzYWwpIHsKICAgICAgICAgaWYgKG51bGwgPT0gdmVydGV4TGFiZWxUcmF2ZXJzYWwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZlcnRleExhYmVsVHJhdmVyc2FsIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkViwgdmVydGV4TGFiZWxUcmF2ZXJzYWwpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkViwgdmVydGV4TGFiZWxUcmF2ZXJzYWwpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBBZGRWZXJ0ZXhTdGFydFN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIHZlcnRleExhYmVsVHJhdmVyc2FsLmFzQWRtaW4oKSkpOwogICAgIH0KQEAgLTM0NCw3ICszNDQsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gYWRkVigpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRWKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFkZFYpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBBZGRWZXJ0ZXhTdGFydFN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIChTdHJpbmcpIG51bGwpKTsKICAgICB9CkBAIC0zNTgsNyArMzU4LDcgQEAKICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGFkZFYoZmluYWwgR1ZhbHVlPFN0cmluZz4gdmVydGV4TGFiZWwpIHsKICAgICAgICAgaWYgKG51bGwgPT0gdmVydGV4TGFiZWwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInZlcnRleExhYmVsIGNhbm5vdCBiZSBudWxsIik7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkViwgdmVydGV4TGFiZWwpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkViwgdmVydGV4TGFiZWwpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBBZGRWZXJ0ZXhTdGFydFN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIHZlcnRleExhYmVsKSk7CiAgICAgfQpAQCAtMzcwLDcgKzM3MCw3IEBACiAgICAgICovCiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGFkZEUoZmluYWwgU3RyaW5nIGxhYmVsKSB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkRSwgbGFiZWwpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkRSwgbGFiZWwpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICByZXR1cm4gdHJhdmVyc2FsLmFkZFN0ZXAobmV3IEFkZEVkZ2VTdGFydFN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIGxhYmVsKSk7CiAgICAgfQpAQCAtMzgyLDcgKzM4Miw3IEBACiAgICAgICovCiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGFkZEUoZmluYWwgVHJhdmVyc2FsPD8sIFN0cmluZz4gZWRnZUxhYmVsVHJhdmVyc2FsKSB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkRSwgZWRnZUxhYmVsVHJhdmVyc2FsKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFkZEUsIGVkZ2VMYWJlbFRyYXZlcnNhbCk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwuYWRkU3RlcChuZXcgQWRkRWRnZVN0YXJ0U3RlcFBsYWNlaG9sZGVyKHRyYXZlcnNhbCwgZWRnZUxhYmVsVHJhdmVyc2FsLmFzQWRtaW4oKSkpOwogICAgIH0KQEAgLTM5NCw3ICszOTQsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBhZGRFKGZpbmFsIEdWYWx1ZTxTdHJpbmc+IGxhYmVsKSB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkRSwgbGFiZWwpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYWRkRSwgbGFiZWwpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICByZXR1cm4gdHJhdmVyc2FsLmFkZFN0ZXAobmV3IEFkZEVkZ2VTdGFydFN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIGxhYmVsKSk7CiAgICAgfQpAQCAtNDEwLDcgKzQxMCw3IEBACiAgICAgICovCiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBtZXJnZVYoZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBzZWFyY2hDcmVhdGUpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICByZXR1cm4gdHJhdmVyc2FsLmFkZFN0ZXAobmV3IE1lcmdlVmVydGV4U3RlcFBsYWNlaG9sZGVyPD4odHJhdmVyc2FsLCB0cnVlLCBzZWFyY2hDcmVhdGUpKTsKICAgICB9CkBAIC00MjcsNyArNDI3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgPFM+IEdyYXBoVHJhdmVyc2FsPFMsIFZlcnRleD4gbWVyZ2VWKGZpbmFsIFRyYXZlcnNhbDw/LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBzZWFyY2hDcmVhdGUpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFMsIFZlcnRleD4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKIAogICAgICAgICBmaW5hbCBNZXJnZVZlcnRleFN0ZXBQbGFjZWhvbGRlcjxTPiBzdGVwID0gbnVsbCA9PSBzZWFyY2hDcmVhdGUgPyBuZXcgTWVyZ2VWZXJ0ZXhTdGVwUGxhY2Vob2xkZXIodHJhdmVyc2FsLCB0cnVlLCAoTWFwKSBudWxsKSA6CkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IG1lcmdlVihmaW5hbCBHVmFsdWU8TWFwPD8sID8+PiBzZWFyY2hDcmVhdGUpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSBHcmFwaFRyYXZlcnNhbFNvdXJjZS50aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZVYsIHNlYXJjaENyZWF0ZSk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICBmaW5hbCBNZXJnZVZlcnRleFN0ZXBQbGFjZWhvbGRlcjxWZXJ0ZXg+IHN0ZXAgPSBudWxsID09IHNlYXJjaENyZWF0ZSA/IG5ldyBNZXJnZVZlcnRleFN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIHRydWUsIChNYXApIG51bGwpIDoKICAgICAgICAgICAgICAgICBuZXcgTWVyZ2VWZXJ0ZXhTdGVwUGxhY2Vob2xkZXIodHJhdmVyc2FsLCB0cnVlLCBzZWFyY2hDcmVhdGUpOwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAgICAgICovCiAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IG1lcmdlRShmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHNlYXJjaENyZWF0ZSkgewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRSwgc2VhcmNoQ3JlYXRlKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRSwgc2VhcmNoQ3JlYXRlKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBNZXJnZUVkZ2VTdGVwUGxhY2Vob2xkZXI8Pih0cmF2ZXJzYWwsIHRydWUsIHNlYXJjaENyZWF0ZSkpOwogICAgIH0KQEAgLTQ3OCw3ICs0NzgsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBtZXJnZUUoZmluYWwgVHJhdmVyc2FsPD8sIE1hcDxPYmplY3QsIE9iamVjdD4+IHNlYXJjaENyZWF0ZSkgewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRSwgc2VhcmNoQ3JlYXRlKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRSwgc2VhcmNoQ3JlYXRlKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKIAogICAgICAgICBmaW5hbCBNZXJnZUVkZ2VTdGVwUGxhY2Vob2xkZXIgc3RlcCA9IG51bGwgPT0gc2VhcmNoQ3JlYXRlID8gbmV3IE1lcmdlRWRnZVN0ZXBQbGFjZWhvbGRlcih0cmF2ZXJzYWwsIHRydWUsICAoTWFwKSBudWxsKSA6CkBAIC00OTYsNyArNDk2LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gbWVyZ2VFKGZpbmFsIEdWYWx1ZTxNYXA8T2JqZWN0LCBPYmplY3Q+PiBzZWFyY2hDcmVhdGUpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSBHcmFwaFRyYXZlcnNhbFNvdXJjZS50aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZUUsIHNlYXJjaENyZWF0ZSk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZUUsIHNlYXJjaENyZWF0ZSk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIGZpbmFsIE1lcmdlRWRnZVN0ZXBQbGFjZWhvbGRlcjxFZGdlPiBzdGVwID0gbnVsbCA9PSBzZWFyY2hDcmVhdGUgPyBuZXcgTWVyZ2VFZGdlU3RlcFBsYWNlaG9sZGVyKHRyYXZlcnNhbCwgdHJ1ZSwgIChNYXApIG51bGwpIDoKICAgICAgICAgICAgICAgICBuZXcgTWVyZ2VFZGdlU3RlcFBsYWNlaG9sZGVyKHRyYXZlcnNhbCwgdHJ1ZSwgc2VhcmNoQ3JlYXRlKTsKQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgICAgICAvLyBhIHNpbmdsZSBudWxsIGlzIFtudWxsXQogICAgICAgICBmaW5hbCBTW10gcyA9IG51bGwgPT0gc3RhcnRzID8gKFNbXSkgbmV3IE9iamVjdFtdIHsgbnVsbCB9IDogc3RhcnRzOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluamVjdCwgcyk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pbmplY3QsIHMpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxTLCBTPiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICByZXR1cm4gdHJhdmVyc2FsLmFkZFN0ZXAobmV3IEluamVjdFN0ZXA8Uz4odHJhdmVyc2FsLCBzKSk7CiAgICAgfQpAQCAtNTI2LDcgKzUyNiw3IEBACiAgICAgICAgIC8vIGEgc2luZ2xlIG51bGwgaXMgW251bGxdCiAgICAgICAgIGZpbmFsIE9iamVjdFtdIGlkcyA9IG51bGwgPT0gdmVydGV4SWRzID8gbmV3IE9iamVjdFtdIHsgbnVsbCB9IDogdmVydGV4SWRzOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLlYsIGlkcyk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5WLCBpZHMpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgR3JhcGhTdGVwQ29udHJhY3Q8VmVydGV4LCBWZXJ0ZXg+IHN0ZXA7CiAgICAgICAgIGlmIChHVmFsdWUuY29udGFpbnNHVmFsdWVzKGlkcykpIHsKQEAgLTU0Nyw3ICs1NDcsNyBAQAogICAgICAgICAvLyBhIHNpbmdsZSBudWxsIGlzIFtudWxsXQogICAgICAgICBmaW5hbCBPYmplY3RbXSBpZHMgPSBudWxsID09IGVkZ2VJZHMgPyBuZXcgT2JqZWN0W10geyBudWxsIH0gOiBlZGdlSWRzOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLkUsIGlkcyk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5FLCBpZHMpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oY2xvbmUpOwogICAgICAgICBHcmFwaFN0ZXBDb250cmFjdDxFZGdlLCBFZGdlPiBzdGVwOwogICAgICAgICBpZiAoR1ZhbHVlLmNvbnRhaW5zR1ZhbHVlcyhpZHMpKSB7CkBAIC01NjUsNyArNTY1LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgPFM+IEdyYXBoVHJhdmVyc2FsPFMsIFM+IGNhbGwoKSB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCk7CisgICAgICAgIGNsb25lLmdyZW1saW5MYW5nLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jYWxsKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48UywgUz4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBDYWxsU3RlcDw+KHRyYXZlcnNhbCwgdHJ1ZSkpOwogICAgIH0KQEAgLTU3OCw3ICs1NzgsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyA8Uz4gR3JhcGhUcmF2ZXJzYWw8UywgUz4gY2FsbChmaW5hbCBTdHJpbmcgc2VydmljZSkgewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgc2VydmljZSk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFMsIFM+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwuYWRkU3RlcChuZXcgQ2FsbFN0ZXA8Pih0cmF2ZXJzYWwsIHRydWUsIHNlcnZpY2UpKTsKICAgICB9CkBAIC01OTMsNyArNTkzLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgPFM+IEdyYXBoVHJhdmVyc2FsPFMsIFM+IGNhbGwoZmluYWwgU3RyaW5nIHNlcnZpY2UsIGZpbmFsIE1hcCBwYXJhbXMpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jYWxsLCBzZXJ2aWNlLCBwYXJhbXMpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48UywgUz4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBDYWxsU3RlcDw+KHRyYXZlcnNhbCwgdHJ1ZSwgc2VydmljZSwgcGFyYW1zKSk7CiAgICAgfQpAQCAtNjA4LDcgKzYwOCw3IEBACiAgICAgICovCiAgICAgcHVibGljIDxTPiBHcmFwaFRyYXZlcnNhbDxTLCBTPiBjYWxsKGZpbmFsIFN0cmluZyBzZXJ2aWNlLCBmaW5hbCBUcmF2ZXJzYWw8UywgTWFwPiBjaGlsZFRyYXZlcnNhbCkgewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIGNoaWxkVHJhdmVyc2FsKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIGNoaWxkVHJhdmVyc2FsKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48UywgUz4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KGNsb25lKTsKICAgICAgICAgZmluYWwgQ2FsbFN0ZXA8UyxTPiBzdGVwID0gbnVsbCA9PSBjaGlsZFRyYXZlcnNhbCA/IG5ldyBDYWxsU3RlcCh0cmF2ZXJzYWwsIHRydWUsIHNlcnZpY2UpIDoKICAgICAgICAgICAgICAgICBuZXcgQ2FsbFN0ZXAodHJhdmVyc2FsLCB0cnVlLCBzZXJ2aWNlLCBuZXcgTGlua2VkSGFzaE1hcCgpLCBjaGlsZFRyYXZlcnNhbC5hc0FkbWluKCkpOwpAQCAtNjI4LDcgKzYyOCw3IEBACiAgICAgICovCiAgICAgcHVibGljIDxTPiBHcmFwaFRyYXZlcnNhbDxTLCBTPiBjYWxsKGZpbmFsIFN0cmluZyBzZXJ2aWNlLCBmaW5hbCBNYXAgcGFyYW1zLCBmaW5hbCBUcmF2ZXJzYWw8UywgTWFwPiBjaGlsZFRyYXZlcnNhbCkgewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IHRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIHBhcmFtcywgY2hpbGRUcmF2ZXJzYWwpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zLCBjaGlsZFRyYXZlcnNhbCk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFMsIFM+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIGZpbmFsIENhbGxTdGVwPFMsUz4gc3RlcCA9IG51bGwgPT0gY2hpbGRUcmF2ZXJzYWwgPyBuZXcgQ2FsbFN0ZXAodHJhdmVyc2FsLCB0cnVlLCBzZXJ2aWNlLCBwYXJhbXMpIDoKICAgICAgICAgICAgICAgICBuZXcgQ2FsbFN0ZXAodHJhdmVyc2FsLCB0cnVlLCBzZXJ2aWNlLCBwYXJhbXMsIGNoaWxkVHJhdmVyc2FsLmFzQWRtaW4oKSk7CkBAIC02NDUsNyArNjQ1LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgPFM+IEdyYXBoVHJhdmVyc2FsPFMsIFM+IGNhbGwoZmluYWwgU3RyaW5nIHNlcnZpY2UsIGZpbmFsIEdWYWx1ZTxNYXA8Pyw/Pj4gcGFyYW1zKSB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UudGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIHBhcmFtcyk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFMsIFM+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwuYWRkU3RlcChuZXcgQ2FsbFN0ZXBQbGFjZWhvbGRlcjw+KHRyYXZlcnNhbCwgdHJ1ZSwgc2VydmljZSwgcGFyYW1zKSk7CiAgICAgfQpAQCAtNjYwLDcgKzY2MCw3IEBACiAgICAgICovCiAgICAgcHVibGljIDxTPiBHcmFwaFRyYXZlcnNhbDxTLCBTPiBjYWxsKGZpbmFsIFN0cmluZyBzZXJ2aWNlLCBmaW5hbCBHVmFsdWU8TWFwPD8sPz4+IHBhcmFtcywgZmluYWwgVHJhdmVyc2FsPFMsIE1hcDw/LD8+PiBjaGlsZFRyYXZlcnNhbCkgewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBjbG9uZSA9IEdyYXBoVHJhdmVyc2FsU291cmNlLnRoaXMuY2xvbmUoKTsKLSAgICAgICAgY2xvbmUuYnl0ZWNvZGUuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIHNlcnZpY2UsIHBhcmFtcywgY2hpbGRUcmF2ZXJzYWwpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgc2VydmljZSwgcGFyYW1zLCBjaGlsZFRyYXZlcnNhbCk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFMsIFM+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwuYWRkU3RlcChuZXcgQ2FsbFN0ZXBQbGFjZWhvbGRlcjw+KHRyYXZlcnNhbCwgdHJ1ZSwgc2VydmljZSwgcGFyYW1zLCBjaGlsZFRyYXZlcnNhbC5hc0FkbWluKCkpKTsKICAgICB9CkBAIC02NzQsNyArNjc0LDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgPFM+IEdyYXBoVHJhdmVyc2FsPFMsIFM+IHVuaW9uKGZpbmFsIFRyYXZlcnNhbDw/LCBTPi4uLiB1bmlvblRyYXZlcnNhbHMpIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgY2xvbmUgPSB0aGlzLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy51bmlvbiwgdW5pb25UcmF2ZXJzYWxzKTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnVuaW9uLCB1bmlvblRyYXZlcnNhbHMpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsKGNsb25lKTsKICAgICAgICAgZmluYWwgVW5pb25TdGVwPD8sIFM+IHN0ZXAgPSBuZXcgVW5pb25TdGVwPD4odHJhdmVyc2FsLCB0cnVlLCBBcnJheXMuY29weU9mKHVuaW9uVHJhdmVyc2FscywgdW5pb25UcmF2ZXJzYWxzLmxlbmd0aCwgVHJhdmVyc2FsLkFkbWluW10uY2xhc3MpKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKHN0ZXApOwpAQCAtNjk2LDI3ICs2OTYsMjYgQEAKICAgICAgKi8KICAgICBwdWJsaWMgPFM+IEdyYXBoVHJhdmVyc2FsPFMsIFM+IGlvKGZpbmFsIFN0cmluZyBmaWxlKSB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy5jbG9uZSgpOwotICAgICAgICBjbG9uZS5ieXRlY29kZS5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW8sIGZpbGUpOworICAgICAgICBjbG9uZS5ncmVtbGluTGFuZy5hZGRTdGVwKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW8sIGZpbGUpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxTLFM+IHRyYXZlcnNhbCA9IG5ldyBEZWZhdWx0R3JhcGhUcmF2ZXJzYWw8PihjbG9uZSk7CiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwuYWRkU3RlcChuZXcgSW9TdGVwPFM+KHRyYXZlcnNhbCwgZmlsZSkpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIFByb3hpZXMgY2FsbHMgdGhyb3VnaCB0byB0aGUgdW5kZXJseWluZyB7QGxpbmsgR3JhcGgjdHgoKX0gb3IgdG8gdGhlIHtAbGluayBSZW1vdGVDb25uZWN0aW9uI3R4KCl9LgorICAgICAqIDxwPgorICAgICAqIFdoZW4gYSByZW1vdGUgY29ubmVjdGlvbiBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBkZWxlZ2F0ZXMgdG8gdGhlIGNvbm5lY3Rpb24ncworICAgICAqIHtAbGluayBSZW1vdGVDb25uZWN0aW9uI3R4KCl9IG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB0cmFuc2FjdGlvbgorICAgICAqIGltcGxlbWVudGF0aW9uIGZvciB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gdHlwZSAoZS5nLiwge0Bjb2RlIEh0dHBSZW1vdGVUcmFuc2FjdGlvbn0KKyAgICAgKiBmb3IgSFRUUC1iYXNlZCBjb25uZWN0aW9ucykuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEge0BsaW5rIFRyYW5zYWN0aW9ufSBmb3IgbWFuYWdpbmcgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zCiAgICAgICovCiAgICAgcHVibGljIFRyYW5zYWN0aW9uIHR4KCkgewogICAgICAgICBpZiAobnVsbCA9PSB0aGlzLmNvbm5lY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmFwaC50eCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIHByZXZlbnQgY2hpbGQgdHJhbnNhY3Rpb25zIGFuZCBsZXQgdGhlIGN1cnJlbnQgVHJhbnNhY3Rpb24gb2JqZWN0IGJlIGJvdW5kIHRvIHRoZQotICAgICAgICAgICAgLy8gVHJhdmVyc2FsU291cmNlIHRoYXQgc3Bhd25lZCBpdAotICAgICAgICAgICAgZmluYWwgVHJhbnNhY3Rpb24gdHggPSB0aGlzLmNvbm5lY3Rpb24udHgoKTsKLSAgICAgICAgICAgIGlmICh0eCA9PSBUcmFuc2FjdGlvbi5OT19PUCAmJiB0aGlzLmNvbm5lY3Rpb24gaW5zdGFuY2VvZiBUcmFuc2FjdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4gKFRyYW5zYWN0aW9uKSB0aGlzLmNvbm5lY3Rpb247Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR4OwotICAgICAgICB9Ci0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi50eCgpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvX18uamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL19fLmphdmEKaW5kZXggZjhmNDljOS4uMDE5ODZiNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvX18uamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9ncmFwaC9fXy5qYXZhCkBAIC0xMTMsNiArMTEzLDEzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNjb25zdGFudChHVmFsdWUpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyA8QT4gR3JhcGhUcmF2ZXJzYWw8QSwgQT4gY29uc3RhbnQoZmluYWwgR1ZhbHVlPEE+IGEpIHsKKyAgICAgICAgcmV0dXJuIF9fLjxBPnN0YXJ0KCkuY29uc3RhbnQoYSk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNsYWJlbCgpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyA8QSBleHRlbmRzIEVsZW1lbnQ+IEdyYXBoVHJhdmVyc2FsPEEsIFN0cmluZz4gbGFiZWwoKSB7CkBAIC05NzksNiArOTg2LDEzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNkaXNjYXJkKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIDxBPiBHcmFwaFRyYXZlcnNhbDxBLCBBPiBkaXNjYXJkKCkgeworICAgICAgICByZXR1cm4gX18uPEE+c3RhcnQoKS5kaXNjYXJkKCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNkaXNqdW5jdChPYmplY3QpCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyA8QT4gR3JhcGhUcmF2ZXJzYWw8QSwgU2V0PD8+PiBkaXNqdW5jdChmaW5hbCBPYmplY3QgdmFsdWVzKSB7CkBAIC0xMDA1LDYgKzEwMTksNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgPEEsIEI+IEdyYXBoVHJhdmVyc2FsPEEsIEI+IG1lcmdlKGZpbmFsIE9iamVjdCB2YWx1ZXMpIHsKICAgICAgICAgcmV0dXJuIF9fLjxBPnN0YXJ0KCkubWVyZ2UodmFsdWVzKTsKICAgICB9CisKICAgICAvKioKICAgICAgKiBAc2VlIEdyYXBoVHJhdmVyc2FsI2NvbWJpbmUoT2JqZWN0KQogICAgICAqLwpAQCAtMTI0MCwxMyArMTI1NSw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNkaXNjYXJkKCkKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxBPiBHcmFwaFRyYXZlcnNhbDxBLCBBPiBkaXNjYXJkKCkgewotICAgICAgICByZXR1cm4gX18uPEE+c3RhcnQoKS5kaXNjYXJkKCk7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNub3QoVHJhdmVyc2FsKQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgPEE+IEdyYXBoVHJhdmVyc2FsPEEsIEE+IG5vdChmaW5hbCBUcmF2ZXJzYWw8PywgPz4gbm90VHJhdmVyc2FsKSB7CkBAIC0xMjYxLDYgKzEyNjksMTMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBAc2VlIEdyYXBoVHJhdmVyc2FsI2NvaW4oR1ZhbHVlKQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPEE+IEdyYXBoVHJhdmVyc2FsPEEsIEE+IGNvaW4oZmluYWwgR1ZhbHVlPERvdWJsZT4gcHJvYmFiaWxpdHkpIHsKKyAgICAgICAgcmV0dXJuIF9fLjxBPnN0YXJ0KCkuY29pbihwcm9iYWJpbGl0eSk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQHNlZSBHcmFwaFRyYXZlcnNhbCNyYW5nZShsb25nLCBsb25nKQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgPEE+IEdyYXBoVHJhdmVyc2FsPEEsIEE+IHJhbmdlKGZpbmFsIGxvbmcgbG93LCBmaW5hbCBsb25nIGhpZ2gpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvbGFtYmRhL0Fic3RyYWN0TGFtYmRhVHJhdmVyc2FsLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2xhbWJkYS9BYnN0cmFjdExhbWJkYVRyYXZlcnNhbC5qYXZhCmluZGV4IDAxOGY3MDkuLjlkMzMzYzkzIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2xhbWJkYS9BYnN0cmFjdExhbWJkYVRyYXZlcnNhbC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvbGFtYmRhL0Fic3RyYWN0TGFtYmRhVHJhdmVyc2FsLmphdmEKQEAgLTE4LDggKzE4LDggQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYTsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVmFsdWVNYW5hZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU2lkZUVmZmVjdHM7CkBAIC02Miw4ICs2Miw4IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVjb2RlIGdldEJ5dGVjb2RlKCkgewotICAgICAgICByZXR1cm4gbnVsbCA9PSB0aGlzLmJ5cGFzc1RyYXZlcnNhbCA/IG5ldyBCeXRlY29kZSgpIDogdGhpcy5ieXBhc3NUcmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKTsKKyAgICBwdWJsaWMgR3JlbWxpbkxhbmcgZ2V0R3JlbWxpbkxhbmcoKSB7CisgICAgICAgIHJldHVybiBudWxsID09IHRoaXMuYnlwYXNzVHJhdmVyc2FsID8gbmV3IEdyZW1saW5MYW5nKCkgOiB0aGlzLmJ5cGFzc1RyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9sYW1iZGEvQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9sYW1iZGEvQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbC5qYXZhCmluZGV4IGVjMzBjNDcuLjZhODhmYjIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvbGFtYmRhL0NhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2xhbWJkYS9DYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsLmphdmEKQEAgLTE4LDggKzE4LDcgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYTsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVmFsdWVNYW5hZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7CiAKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKQEAgLTMwLDIyICsyOSwxNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgdmFsdWU7CiAKLSAgICBwcml2YXRlIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlOworICAgIHByaXZhdGUgZmluYWwgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmc7CiAKICAgICBwdWJsaWMgQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbChmaW5hbCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSwgZmluYWwgT2JqZWN0IHZhbHVlKSB7CiAgICAgICAgIHRoaXMuY2FyZGluYWxpdHkgPSBjYXJkaW5hbGl0eTsKICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICB0aGlzLmJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKENhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpLCBjYXJkaW5hbGl0eS5uYW1lKCksIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIENhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwgZnJvbShmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0KSB7Ci0gICAgICAgIHJldHVybiBuZXcgQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbChWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS52YWx1ZU9mKGluc3QuZ2V0QXJndW1lbnRzKClbMF0udG9TdHJpbmcoKSksCi0gICAgICAgICAgICAgICAgaW5zdC5nZXRBcmd1bWVudHMoKVsxXSk7CisgICAgICAgIHRoaXMuZ3JlbWxpbkxhbmcgPSBuZXcgR3JlbWxpbkxhbmcoQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbC5jbGFzcy5nZXRTaW1wbGVOYW1lKCksIGNhcmRpbmFsaXR5Lm5hbWUoKSwgdmFsdWUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlY29kZSBnZXRCeXRlY29kZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYnl0ZWNvZGU7CisgICAgcHVibGljIEdyZW1saW5MYW5nIGdldEdyZW1saW5MYW5nKCkgeworICAgICAgICByZXR1cm4gdGhpcy5ncmVtbGluTGFuZzsKICAgICB9CiAKICAgICBwdWJsaWMgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkgZ2V0Q2FyZGluYWxpdHkoKSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2xhbWJkYS9Db25zdGFudFRyYXZlcnNhbC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9sYW1iZGEvQ29uc3RhbnRUcmF2ZXJzYWwuamF2YQppbmRleCBmMTBjY2EwLi5mYWJhYjI4IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL2xhbWJkYS9Db25zdGFudFRyYXZlcnNhbC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvbGFtYmRhL0NvbnN0YW50VHJhdmVyc2FsLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5sYW1iZGE7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwogCiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiAKQEAgLTI5LDE1ICszMCwyMyBAQAogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgQ29uc3RhbnRUcmF2ZXJzYWw8UywgRT4gZXh0ZW5kcyBBYnN0cmFjdExhbWJkYVRyYXZlcnNhbDxTLCBFPiB7CiAKLSAgICBwcml2YXRlIGZpbmFsIEUgZW5kOworICAgIHByaXZhdGUgZmluYWwgR1ZhbHVlPEU+IGVuZDsKIAogICAgIHB1YmxpYyBDb25zdGFudFRyYXZlcnNhbChmaW5hbCBFIGVuZCkgewotICAgICAgICB0aGlzLmVuZCA9IGVuZDsKKyAgICAgICAgdGhpcy5lbmQgPSBudWxsID09IGVuZCA/IEdWYWx1ZS5vZihudWxsLCBudWxsKSA6IEdWYWx1ZS5vZihudWxsLCBlbmQpOworICAgIH0KKworICAgIHB1YmxpYyBDb25zdGFudFRyYXZlcnNhbChmaW5hbCBHVmFsdWU8RT4gZW5kKSB7CisgICAgICAgIHRoaXMuZW5kID0gbnVsbCA9PSBlbmQgPyBHVmFsdWUub2YobnVsbCwgbnVsbCkgOiBlbmQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEUgbmV4dCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZW5kOworICAgICAgICByZXR1cm4gdGhpcy5lbmQuZ2V0KCk7CisgICAgfQorCisgICAgcHVibGljIEdWYWx1ZTxFPiBnZXRFbmQoKSB7CisgICAgICAgIHJldHVybiBlbmQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvYnJhbmNoL1JlcGVhdFN0ZXAuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvUmVwZWF0U3RlcC5qYXZhCmluZGV4IGM1YzlhYzYuLjYwNmM0NmYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvUmVwZWF0U3RlcC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvUmVwZWF0U3RlcC5qYXZhCkBAIC0xODgsMTQgKzE4OCwxMyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgIGludCByZXN1bHQgPSBzdXBlci5oYXNoQ29kZSgpOworICAgICAgICByZXN1bHQgXj0gQm9vbGVhbi5oYXNoQ29kZSh0aGlzLnVudGlsRmlyc3QpOworICAgICAgICByZXN1bHQgXj0gQm9vbGVhbi5oYXNoQ29kZSh0aGlzLmVtaXRGaXJzdCkgPDwgMTsKIAogICAgICAgICAvLyBub3QgYSBub3JtYWwgc3RhdGUsIGJ1dCBwcmV2ZW50cyBOUEUgZHVyaW5nIHN0cmF0ZWd5IGFwcGxpY2F0aW9uIGFsbG93aW5nIHRoZSBiZXR0ZXIKICAgICAgICAgLy8gdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlIHRvIHNob3cgdXAgYXQgaXRlcmF0aW9uCiAgICAgICAgIGlmICh0aGlzLnJlcGVhdFRyYXZlcnNhbCAhPSBudWxsKQotICAgICAgICAgICAgcmVzdWx0IF49ICByZXBlYXRUcmF2ZXJzYWwuaGFzaENvZGUoKTsKLQotICAgICAgICByZXN1bHQgXj0gQm9vbGVhbi5oYXNoQ29kZSh0aGlzLnVudGlsRmlyc3QpOwotICAgICAgICByZXN1bHQgXj0gQm9vbGVhbi5oYXNoQ29kZSh0aGlzLmVtaXRGaXJzdCkgPDwgMTsKKyAgICAgICAgICAgIHJlc3VsdCBePSB0aGlzLnJlcGVhdFRyYXZlcnNhbC5oYXNoQ29kZSgpOwogICAgICAgICBpZiAodGhpcy5sb29wTmFtZSAhPSBudWxsKQogICAgICAgICAgICAgcmVzdWx0IF49IHRoaXMubG9vcE5hbWUuaGFzaENvZGUoKTsKICAgICAgICAgaWYgKHRoaXMudW50aWxUcmF2ZXJzYWwgIT0gbnVsbCkKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQ29pblN0ZXAuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQ29pblN0ZXAuamF2YQppbmRleCAwZjkxODY4Li4yNDdjYWM1IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0NvaW5TdGVwLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Db2luU3RlcC5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLlNlZWRhYmxlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuVHJhdmVyc2VyUmVxdWlyZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwogCkBAIC0yOSwxNiArMzAsMjMgQEAKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKKyAqIEEgZmlsdGVyIHN0ZXAgdGhhdCB3aWxsIHJhbmRvbWx5IGFsbG93IHRyYXZlcnNlcnMgdG8gcGFzcyB0aHJvdWdoIHRoZSBzdGVwIGJhc2VkIG9uIGEgcHJvYmFiaWxpdHkgdmFsdWUuCisgKgogICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBDb2luU3RlcDxTPiBleHRlbmRzIEZpbHRlclN0ZXA8Uz4gaW1wbGVtZW50cyBTZWVkYWJsZSB7CiAKICAgICBwcml2YXRlIGZpbmFsIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBkb3VibGUgcHJvYmFiaWxpdHk7CisgICAgcHJpdmF0ZSBmaW5hbCBHVmFsdWU8RG91YmxlPiBwcm9iYWJpbGl0eTsKIAogICAgIHB1YmxpYyBDb2luU3RlcChmaW5hbCBUcmF2ZXJzYWwuQWRtaW4gdHJhdmVyc2FsLCBmaW5hbCBkb3VibGUgcHJvYmFiaWxpdHkpIHsKICAgICAgICAgc3VwZXIodHJhdmVyc2FsKTsKLSAgICAgICAgdGhpcy5wcm9iYWJpbGl0eSA9IHByb2JhYmlsaXR5OworICAgICAgICB0aGlzLnByb2JhYmlsaXR5ID0gR1ZhbHVlLm9mRG91YmxlKG51bGwsIHByb2JhYmlsaXR5KTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29pblN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgR1ZhbHVlPERvdWJsZT4gcHJvYmFiaWxpdHkpIHsKKyAgICAgICAgc3VwZXIodHJhdmVyc2FsKTsKKyAgICAgICAgdGhpcy5wcm9iYWJpbGl0eSA9IG51bGwgPT0gcHJvYmFiaWxpdHkgPyBHVmFsdWUub2ZEb3VibGUobnVsbCxudWxsKSA6IHByb2JhYmlsaXR5OwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDcsNyArNTUsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgZG91YmxlIGdldFByb2JhYmlsaXR5KCkgewotICAgICAgICByZXR1cm4gdGhpcy5wcm9iYWJpbGl0eTsKKyAgICAgICAgcmV0dXJuIHByb2JhYmlsaXR5LmdldCgpOworICAgIH0KKworICAgIHB1YmxpYyBHVmFsdWU8RG91YmxlPiBnZXRQcm9iYWJpbGl0eUdWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHByb2JhYmlsaXR5OwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNTUsMTEgKzY3LDExIEBACiAgICAgICAgIGxvbmcgbmV3QnVsayA9IDBsOwogICAgICAgICBpZiAodHJhdmVyc2VyLmJ1bGsoKSA8IDEwMCkgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmF2ZXJzZXIuYnVsaygpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9iYWJpbGl0eSA+PSByYW5kb20ubmV4dERvdWJsZSgpKQorICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb2JhYmlsaXR5LmdldCgpID49IHJhbmRvbS5uZXh0RG91YmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIG5ld0J1bGsrKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ld0J1bGsgPSBNYXRoLnJvdW5kKHRoaXMucHJvYmFiaWxpdHkgKiB0cmF2ZXJzZXIuYnVsaygpKTsKKyAgICAgICAgICAgIG5ld0J1bGsgPSBNYXRoLnJvdW5kKHRoaXMucHJvYmFiaWxpdHkuZ2V0KCkgKiB0cmF2ZXJzZXIuYnVsaygpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoMCA9PSBuZXdCdWxrKSByZXR1cm4gZmFsc2U7CiAgICAgICAgIHRyYXZlcnNlci5zZXRCdWxrKG5ld0J1bGspOwpAQCAtNzMsNyArODUsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLmhhc2hDb2RlKCkgXiBEb3VibGUuaGFzaENvZGUodGhpcy5wcm9iYWJpbGl0eSk7CisgICAgICAgIHJldHVybiBzdXBlci5oYXNoQ29kZSgpIF4gRG91YmxlLmhhc2hDb2RlKHRoaXMucHJvYmFiaWxpdHkuZ2V0KCkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9EaXNjYXJkU3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9EaXNjYXJkU3RlcC5qYXZhCmluZGV4IGIyODdiYmQuLmI5NzNkN2MgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRGlzY2FyZFN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0Rpc2NhcmRTdGVwLmphdmEKQEAgLTEsMjIgKzEsMjEgQEAKIC8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXI7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvTm9uZVN0ZXAuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvTm9uZVN0ZXAuamF2YQppbmRleCBlMThhNjBiLi41NDJkMTZjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL05vbmVTdGVwLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Ob25lU3RlcC5qYXZhCkBAIC03Niw0ICs3Niw0IEBACiAgICAgcHVibGljIFNldDxUcmF2ZXJzZXJSZXF1aXJlbWVudD4gZ2V0UmVxdWlyZW1lbnRzKCkgewogICAgICAgICByZXR1cm4gRW51bVNldC5vZihUcmF2ZXJzZXJSZXF1aXJlbWVudC5PQkpFQ1QpOwogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbWJpbmVTdGVwLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbWJpbmVTdGVwLmphdmEKaW5kZXggYjA3YTRlMy4uNWIwMzE3YyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db21iaW5lU3RlcC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29tYmluZVN0ZXAuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgQ29tYmluZVN0ZXA8UywgRT4gZXh0ZW5kcyBTY2FsYXJNYXBTdGVwPFMsIExpc3Q8Pz4+IGltcGxlbWVudHMgVHJhdmVyc2FsUGFyZW50LCBMaXN0RnVuY3Rpb24gewogICAgIHByaXZhdGUgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHZhbHVlVHJhdmVyc2FsOwotICAgIHByaXZhdGUgT2JqZWN0IHBhcmFtZXRlckl0ZW1zOworICAgIHByaXZhdGUgR1ZhbHVlPE9iamVjdD4gcGFyYW1ldGVySXRlbXM7CiAKICAgICBwdWJsaWMgQ29tYmluZVN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgT2JqZWN0IHZhbHVlcykgewogICAgICAgICBzdXBlcih0cmF2ZXJzYWwpOwpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7CiAgICAgICAgICAgICB2YWx1ZVRyYXZlcnNhbCA9IGludGVncmF0ZUNoaWxkKCgoVHJhdmVyc2FsPFMsIEU+KSB2YWx1ZXMpLmFzQWRtaW4oKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJJdGVtcyA9IHZhbHVlczsKKyAgICAgICAgICAgIHBhcmFtZXRlckl0ZW1zID0gdmFsdWVzIGluc3RhbmNlb2YgR1ZhbHVlID8gKEdWYWx1ZTxPYmplY3Q+KSB2YWx1ZXMgOiBHVmFsdWUub2YobnVsbCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTQsOSArNTQsOSBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RlcE5hbWUoKSB7IHJldHVybiAiY29tYmluZSI7IH0KIAogICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBMaXN0PD8+IG1hcChUcmF2ZXJzZXIuQWRtaW48Uz4gdHJhdmVyc2VyKSB7CisgICAgcHJvdGVjdGVkIExpc3Q8Pz4gbWFwKGZpbmFsIFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKICAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBsaXN0QSA9IGNvbnZlcnRUcmF2ZXJzZXJUb0NvbGxlY3Rpb24odHJhdmVyc2VyKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBsaXN0QiA9IChudWxsICE9IHZhbHVlVHJhdmVyc2FsKSA/IGNvbnZlcnRUcmF2ZXJzYWxUb0NvbGxlY3Rpb24odHJhdmVyc2VyLCB2YWx1ZVRyYXZlcnNhbCkgOiBjb252ZXJ0QXJndW1lbnRUb0NvbGxlY3Rpb24ocGFyYW1ldGVySXRlbXMpOworICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIGxpc3RCID0gKG51bGwgIT0gdmFsdWVUcmF2ZXJzYWwpID8gY29udmVydFRyYXZlcnNhbFRvQ29sbGVjdGlvbih0cmF2ZXJzZXIsIHZhbHVlVHJhdmVyc2FsKSA6IGNvbnZlcnRBcmd1bWVudFRvQ29sbGVjdGlvbihwYXJhbWV0ZXJJdGVtcy5nZXQoKSk7CiAKICAgICAgICAgZmluYWwgTGlzdCBjb21iaW5lZCA9IG5ldyBBcnJheUxpc3QobGlzdEEpOwogICAgICAgICBjb21iaW5lZC5hZGRBbGwobGlzdEIpOwpAQCAtNjksNyArNjksMTEgQEAKICAgICAgICAgcmV0dXJuIChudWxsID09IHZhbHVlVHJhdmVyc2FsKSA/IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpIDogQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCh2YWx1ZVRyYXZlcnNhbCk7CiAgICAgfQogCi0gICAgcHVibGljIE9iamVjdCBnZXRQYXJhbWV0ZXJJdGVtcygpIHsKKyAgICBwdWJsaWMgT2JqZWN0IGdldFBhcmFtZXRlcigpIHsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zLmdldCgpOworICAgIH0KKworICAgIHB1YmxpYyBHVmFsdWU8T2JqZWN0PiBnZXRQYXJhbWV0ZXJJdGVtcygpIHsKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db25qb2luU3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db25qb2luU3RlcC5qYXZhCmluZGV4IGE1N2Q5Y2EuLjFkNmVlYTEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29uam9pblN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbmpvaW5TdGVwLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuVHJhdmVyc2VyUmVxdWlyZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkxpc3RGdW5jdGlvbjsKIApAQCAtMzQsMTEgKzM1LDE1IEBACiAgKiBBIG1hcCBzdGVwIHRoYXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGpvaW5pbmcgZXZlcnkgZWxlbWVudCBpbiB0aGUgdHJhdmVyc2VyIHVzaW5nIHRoZSBkZWxpbWl0ZXIgYXJndW1lbnQuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25qb2luU3RlcDxTPiBleHRlbmRzIFNjYWxhck1hcFN0ZXA8UywgU3RyaW5nPiBpbXBsZW1lbnRzIExpc3RGdW5jdGlvbiB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZGVsaW1pdGVyOworICAgIHByaXZhdGUgR1ZhbHVlPFN0cmluZz4gZGVsaW1pdGVyOwogCiAgICAgcHVibGljIENvbmpvaW5TdGVwKGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwsIGZpbmFsIFN0cmluZyBkZWxpbWl0ZXIpIHsKKyAgICAgICAgdGhpcyh0cmF2ZXJzYWwsIEdWYWx1ZS5vZihudWxsLCBkZWxpbWl0ZXIpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29uam9pblN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgR1ZhbHVlPFN0cmluZz4gZGVsaW1pdGVyKSB7CiAgICAgICAgIHN1cGVyKHRyYXZlcnNhbCk7Ci0gICAgICAgIGlmIChudWxsID09IGRlbGltaXRlcikgeyB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnB1dCBkZWxpbWl0ZXIgdG8gY29uam9pbiBzdGVwIGNhbid0IGJlIG51bGwuIik7IH0KKyAgICAgICAgaWYgKG51bGwgPT0gZGVsaW1pdGVyIHx8IG51bGwgPT0gZGVsaW1pdGVyLmdldCgpKSB7IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklucHV0IGRlbGltaXRlciB0byBjb25qb2luIHN0ZXAgY2FuJ3QgYmUgbnVsbC4iKTsgfQogICAgICAgICB0aGlzLmRlbGltaXRlciA9IGRlbGltaXRlcjsKICAgICB9CiAKQEAgLTQ2LDcgKzUxLDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFN0ZXBOYW1lKCkgeyByZXR1cm4gImNvbmpvaW4iOyB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIG1hcChUcmF2ZXJzZXIuQWRtaW48Uz4gdHJhdmVyc2VyKSB7CisgICAgcHJvdGVjdGVkIFN0cmluZyBtYXAoZmluYWwgVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlcikgewogICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIGVsZW1lbnRzID0gY29udmVydFRyYXZlcnNlclRvQ29sbGVjdGlvbih0cmF2ZXJzZXIpOwogICAgICAgICBpZiAoZWxlbWVudHMuaXNFbXB0eSgpKSB7IHJldHVybiAiIjsgfQogCkBAIC01NCwxMiArNTksMTIgQEAKIAogICAgICAgICBmb3IgKE9iamVjdCBlbGVtIDogZWxlbWVudHMpIHsKICAgICAgICAgICAgIGlmIChlbGVtICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBqb2luUmVzdWx0LmFwcGVuZChTdHJpbmcudmFsdWVPZihlbGVtKSkuYXBwZW5kKGRlbGltaXRlcik7CisgICAgICAgICAgICAgICAgam9pblJlc3VsdC5hcHBlbmQoZWxlbSkuYXBwZW5kKGRlbGltaXRlci5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoam9pblJlc3VsdC5sZW5ndGgoKSAhPSAwKSB7Ci0gICAgICAgICAgICBqb2luUmVzdWx0LmRlbGV0ZShqb2luUmVzdWx0Lmxlbmd0aCgpIC0gZGVsaW1pdGVyLmxlbmd0aCgpLCBqb2luUmVzdWx0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGpvaW5SZXN1bHQuZGVsZXRlKGpvaW5SZXN1bHQubGVuZ3RoKCkgLSBkZWxpbWl0ZXIuZ2V0KCkubGVuZ3RoKCksIGpvaW5SZXN1bHQubGVuZ3RoKCkpOwogICAgICAgICAgICAgcmV0dXJuIGpvaW5SZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiAiIjsKQEAgLTY3LDYgKzcyLDEwIEBACiAgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXREZWxpbWl0ZXIoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmRlbGltaXRlci5nZXQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgR1ZhbHVlPFN0cmluZz4gZ2V0RGVsaW1pdGVyR1ZhbHVlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5kZWxpbWl0ZXI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbnN0YW50U3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db25zdGFudFN0ZXAuamF2YQppbmRleCBlZTlmNjVjLi5jZmQ1YTFhIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbnN0YW50U3RlcC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29uc3RhbnRTdGVwLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuVHJhdmVyc2VyUmVxdWlyZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwogCkBAIC0yOSwyOSArMzAsMzYgQEAKIAogcHVibGljIGNsYXNzIENvbnN0YW50U3RlcDxTLCBFPiBleHRlbmRzIFNjYWxhck1hcFN0ZXA8UywgRT4gewogCi0gICAgcHJpdmF0ZSBmaW5hbCBFIGNvbnN0YW50OworICAgIHByaXZhdGUgZmluYWwgR1ZhbHVlPEU+IGNvbnN0YW50OwogCiAgICAgcHVibGljIENvbnN0YW50U3RlcChmaW5hbCBUcmF2ZXJzYWwuQWRtaW4gdHJhdmVyc2FsLCBmaW5hbCBFIGNvbnN0YW50KSB7CisgICAgICAgIHRoaXModHJhdmVyc2FsLCBjb25zdGFudCBpbnN0YW5jZW9mIEdWYWx1ZSA/IChHVmFsdWUpIGNvbnN0YW50IDogR1ZhbHVlLm9mKG51bGwsIGNvbnN0YW50KSk7CisgICAgfQorCisgICAgcHVibGljIENvbnN0YW50U3RlcChmaW5hbCBUcmF2ZXJzYWwuQWRtaW4gdHJhdmVyc2FsLCBmaW5hbCBHVmFsdWU8RT4gY29uc3RhbnQpIHsKICAgICAgICAgc3VwZXIodHJhdmVyc2FsKTsKLSAgICAgICAgdGhpcy5jb25zdGFudCA9IGNvbnN0YW50OworICAgICAgICB0aGlzLmNvbnN0YW50ID0gbnVsbCA9PSBjb25zdGFudCA/IEdWYWx1ZS5vZihudWxsLCBudWxsKSA6IGNvbnN0YW50OwogICAgIH0KIAogICAgIHB1YmxpYyBFIGdldENvbnN0YW50KCkgeworICAgICAgICByZXR1cm4gdGhpcy5jb25zdGFudC5nZXQoKTsKKyAgICB9CisgICAgcHVibGljIEdWYWx1ZTxFPiBnZXRDb25zdGFudEdWYWx1ZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RhbnQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIEUgbWFwKGZpbmFsIFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RhbnQ7CisgICAgICAgIHJldHVybiB0aGlzLmNvbnN0YW50LmdldCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdGYWN0b3J5LnN0ZXBTdHJpbmcodGhpcywgdGhpcy5jb25zdGFudCk7CisgICAgICAgIHJldHVybiBTdHJpbmdGYWN0b3J5LnN0ZXBTdHJpbmcodGhpcywgdGhpcy5jb25zdGFudC5nZXQoKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLmhhc2hDb2RlKCkgXiBPYmplY3RzLmhhc2hDb2RlKHRoaXMuY29uc3RhbnQpOworICAgICAgICByZXR1cm4gc3VwZXIuaGFzaENvZGUoKSBeIE9iamVjdHMuaGFzaENvZGUodGhpcy5jb25zdGFudC5nZXQoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9EaWZmZXJlbmNlU3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9EaWZmZXJlbmNlU3RlcC5qYXZhCmluZGV4IGEzNTNmOTMuLmQxNDViOWYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRGlmZmVyZW5jZVN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0RpZmZlcmVuY2VTdGVwLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLlRyYXZlcnNhbFBhcmVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5UcmF2ZXJzZXJSZXF1aXJlbWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuTGlzdEZ1bmN0aW9uOwpAQCAtMzYsMTQgKzM3LDE1IEBACiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBEaWZmZXJlbmNlU3RlcDxTLCBFPiBleHRlbmRzIFNjYWxhck1hcFN0ZXA8UywgU2V0PD8+PiBpbXBsZW1lbnRzIFRyYXZlcnNhbFBhcmVudCwgTGlzdEZ1bmN0aW9uIHsKICAgICBwcml2YXRlIFRyYXZlcnNhbC5BZG1pbjxTLCBFPiB2YWx1ZVRyYXZlcnNhbDsKLSAgICBwcml2YXRlIE9iamVjdCBwYXJhbWV0ZXJJdGVtczsKKyAgICBwcml2YXRlIEdWYWx1ZTxPYmplY3Q+IHBhcmFtZXRlckl0ZW1zOworCiAgICAgcHVibGljIERpZmZlcmVuY2VTdGVwKGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwsIGZpbmFsIE9iamVjdCB2YWx1ZXMpIHsKICAgICAgICAgc3VwZXIodHJhdmVyc2FsKTsKIAogICAgICAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7CiAgICAgICAgICAgICB2YWx1ZVRyYXZlcnNhbCA9IGludGVncmF0ZUNoaWxkKCgoVHJhdmVyc2FsPFMsIEU+KSB2YWx1ZXMpLmFzQWRtaW4oKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJJdGVtcyA9IHZhbHVlczsKKyAgICAgICAgICAgIHBhcmFtZXRlckl0ZW1zID0gdmFsdWVzIGluc3RhbmNlb2YgR1ZhbHVlID8gKEdWYWx1ZTxPYmplY3Q+KSB2YWx1ZXMgOiBHVmFsdWUub2YobnVsbCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTEsOCArNTMsMTIgQEAKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOwogICAgIH0KIAotICAgIHB1YmxpYyBUcmF2ZXJzYWwuQWRtaW48UywgRT4gZ2V0VmFsdWVUcmF2ZXJzYWwoKSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZVRyYXZlcnNhbDsKKyAgICBwdWJsaWMgVHJhdmVyc2FsLkFkbWluPFMsRT4gZ2V0VmFsdWVUcmF2ZXJzYWwoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnZhbHVlVHJhdmVyc2FsOworICAgIH0KKworICAgIHB1YmxpYyBHVmFsdWU8T2JqZWN0PiBnZXRQYXJhbWV0ZXJJdGVtc0dWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNjEsNyArNjcsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBTZXQ8Pz4gbWFwKFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKICAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBzZXRBID0gY29udmVydFRyYXZlcnNlclRvQ29sbGVjdGlvbih0cmF2ZXJzZXIpOwotICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIHNldEIgPSAobnVsbCAhPSB2YWx1ZVRyYXZlcnNhbCkgPyBjb252ZXJ0VHJhdmVyc2FsVG9Db2xsZWN0aW9uKHRyYXZlcnNlciwgdmFsdWVUcmF2ZXJzYWwpIDogY29udmVydEFyZ3VtZW50VG9Db2xsZWN0aW9uKHBhcmFtZXRlckl0ZW1zKTsKKyAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBzZXRCID0gKG51bGwgIT0gdmFsdWVUcmF2ZXJzYWwpID8gY29udmVydFRyYXZlcnNhbFRvQ29sbGVjdGlvbih0cmF2ZXJzZXIsIHZhbHVlVHJhdmVyc2FsKSA6IGNvbnZlcnRBcmd1bWVudFRvQ29sbGVjdGlvbihwYXJhbWV0ZXJJdGVtcy5nZXQoKSk7CiAgICAgICAgIGZpbmFsIFNldCBkaWZmZXJlbmNlU2V0ID0gbmV3IEhhc2hTZXQoKTsKIAogICAgICAgICBmb3IgKE9iamVjdCBlbGVtZW50IDogc2V0QSkgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9EaXNqdW5jdFN0ZXAuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRGlzanVuY3RTdGVwLmphdmEKaW5kZXggNTM5ZmE4Yi4uYmQwMzU2ZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9EaXNqdW5jdFN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0Rpc2p1bmN0U3RlcC5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5UcmF2ZXJzYWxQYXJlbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuVHJhdmVyc2VyUmVxdWlyZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkxpc3RGdW5jdGlvbjsKQEAgLTM1LDE0ICszNiwxNSBAQAogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRGlzanVuY3RTdGVwPFMsIEU+IGV4dGVuZHMgU2NhbGFyTWFwU3RlcDxTLCBTZXQ8Pz4+IGltcGxlbWVudHMgVHJhdmVyc2FsUGFyZW50LCBMaXN0RnVuY3Rpb24gewogICAgIHByaXZhdGUgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHZhbHVlVHJhdmVyc2FsOwotICAgIHByaXZhdGUgT2JqZWN0IHBhcmFtZXRlckl0ZW1zOworICAgIHByaXZhdGUgR1ZhbHVlPE9iamVjdD4gcGFyYW1ldGVySXRlbXM7CisKICAgICBwdWJsaWMgRGlzanVuY3RTdGVwKGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwsIGZpbmFsIE9iamVjdCB2YWx1ZXMpIHsKICAgICAgICAgc3VwZXIodHJhdmVyc2FsKTsKIAogICAgICAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7CiAgICAgICAgICAgICB2YWx1ZVRyYXZlcnNhbCA9IGludGVncmF0ZUNoaWxkKCgoVHJhdmVyc2FsPFMsIEU+KSB2YWx1ZXMpLmFzQWRtaW4oKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJJdGVtcyA9IHZhbHVlczsKKyAgICAgICAgICAgIHBhcmFtZXRlckl0ZW1zID0gdmFsdWVzIGluc3RhbmNlb2YgR1ZhbHVlID8gKEdWYWx1ZTxPYmplY3Q+KSB2YWx1ZXMgOiBHVmFsdWUub2YobnVsbCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTEsNyArNTMsMTEgQEAKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFBhcmFtZXRlckl0ZW1zKCkgewotICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJdGVtczsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOworICAgIH0KKworICAgIHB1YmxpYyBHVmFsdWU8T2JqZWN0PiBnZXRQYXJhbWV0ZXJJdGVtc0dWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNjAsNyArNjYsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBTZXQ8Pz4gbWFwKFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKICAgICAgICAgZmluYWwgU2V0IHNldEEgPSBjb252ZXJ0VHJhdmVyc2VyVG9TZXQodHJhdmVyc2VyKTsKLSAgICAgICAgZmluYWwgU2V0IHNldEIgPSAobnVsbCAhPSB2YWx1ZVRyYXZlcnNhbCkgPyBjb252ZXJ0VHJhdmVyc2FsVG9TZXQodHJhdmVyc2VyLCB0aGlzLnZhbHVlVHJhdmVyc2FsKSA6IGNvbnZlcnRBcmd1bWVudFRvU2V0KHBhcmFtZXRlckl0ZW1zKTsKKyAgICAgICAgZmluYWwgU2V0IHNldEIgPSAobnVsbCAhPSB2YWx1ZVRyYXZlcnNhbCkgPyBjb252ZXJ0VHJhdmVyc2FsVG9TZXQodHJhdmVyc2VyLCB0aGlzLnZhbHVlVHJhdmVyc2FsKSA6IGNvbnZlcnRBcmd1bWVudFRvU2V0KHBhcmFtZXRlckl0ZW1zLmdldCgpKTsKICAgICAgICAgZmluYWwgU2V0IGRpc2p1bmN0U2V0ID0gbmV3IEhhc2hTZXQoKTsKIAogICAgICAgICBpZiAoc2V0QS5zaXplKCkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9JbnRlcnNlY3RTdGVwLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0ludGVyc2VjdFN0ZXAuamF2YQppbmRleCA0MzE2NmZlLi4yM2FmNmZmIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0ludGVyc2VjdFN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0ludGVyc2VjdFN0ZXAuamF2YQpAQCAtMjAsNiArMjAsNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuVHJhdmVyc2FsUGFyZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLlRyYXZlcnNlclJlcXVpcmVtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5MaXN0RnVuY3Rpb247CkBAIC0zNiw3ICszNyw3IEBACiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBJbnRlcnNlY3RTdGVwPFMsIEU+IGV4dGVuZHMgU2NhbGFyTWFwU3RlcDxTLCBTZXQ8Pz4+IGltcGxlbWVudHMgVHJhdmVyc2FsUGFyZW50LCBMaXN0RnVuY3Rpb24gewogICAgIHByaXZhdGUgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHZhbHVlVHJhdmVyc2FsOwotICAgIHByaXZhdGUgT2JqZWN0IHBhcmFtZXRlckl0ZW1zOworICAgIHByaXZhdGUgR1ZhbHVlPE9iamVjdD4gcGFyYW1ldGVySXRlbXM7CiAKICAgICBwdWJsaWMgSW50ZXJzZWN0U3RlcChmaW5hbCBUcmF2ZXJzYWwuQWRtaW4gdHJhdmVyc2FsLCBmaW5hbCBPYmplY3QgdmFsdWVzKSB7CiAgICAgICAgIHN1cGVyKHRyYXZlcnNhbCk7CkBAIC00NCw3ICs0NSw3IEBACiAgICAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBUcmF2ZXJzYWwpIHsKICAgICAgICAgICAgIHZhbHVlVHJhdmVyc2FsID0gaW50ZWdyYXRlQ2hpbGQoKChUcmF2ZXJzYWw8UywgRT4pIHZhbHVlcykuYXNBZG1pbigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmFtZXRlckl0ZW1zID0gdmFsdWVzOworICAgICAgICAgICAgcGFyYW1ldGVySXRlbXMgPSB2YWx1ZXMgaW5zdGFuY2VvZiBHVmFsdWUgPyAoR1ZhbHVlPE9iamVjdD4pIHZhbHVlcyA6IEdWYWx1ZS5vZihudWxsLCB2YWx1ZXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MywxNiArNTQsMjAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgT2JqZWN0IGdldFBhcmFtZXRlckl0ZW1zKCkgewotICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJJdGVtczsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOworICAgIH0KKworICAgIHB1YmxpYyBHVmFsdWU8T2JqZWN0PiBnZXRQYXJhbWV0ZXJJdGVtc0dWYWx1ZSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmFtZXRlckl0ZW1zOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RlcE5hbWUoKSB7IHJldHVybiAiaW50ZXJzZWN0IjsgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFNldDw/PiBtYXAoVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlcikgeworICAgIHByb3RlY3RlZCBTZXQ8Pz4gbWFwKGZpbmFsIFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKICAgICAgICAgZmluYWwgU2V0IHNldEEgPSBjb252ZXJ0VHJhdmVyc2VyVG9TZXQodHJhdmVyc2VyKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBzZXRCID0gKG51bGwgIT0gdmFsdWVUcmF2ZXJzYWwpID8gY29udmVydFRyYXZlcnNhbFRvQ29sbGVjdGlvbih0cmF2ZXJzZXIsIHRoaXMudmFsdWVUcmF2ZXJzYWwpIDogY29udmVydEFyZ3VtZW50VG9Db2xsZWN0aW9uKHBhcmFtZXRlckl0ZW1zKTsKKyAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBzZXRCID0gKG51bGwgIT0gdmFsdWVUcmF2ZXJzYWwpID8gY29udmVydFRyYXZlcnNhbFRvQ29sbGVjdGlvbih0cmF2ZXJzZXIsIHRoaXMudmFsdWVUcmF2ZXJzYWwpIDogY29udmVydEFyZ3VtZW50VG9Db2xsZWN0aW9uKHBhcmFtZXRlckl0ZW1zLmdldCgpKTsKICAgICAgICAgZmluYWwgU2V0IGludGVyc2VjdGlvbiA9IG5ldyBIYXNoU2V0KCk7CiAKICAgICAgICAgZm9yIChPYmplY3QgZWxlbWVudCA6IHNldEIpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVyZ2VFZGdlU3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVkZ2VTdGVwLmphdmEKaW5kZXggNjc4NTQwZi4uMzUzNTE0MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVkZ2VTdGVwLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVkZ2VTdGVwLmphdmEKQEAgLTM4OSw3ICszODksNyBAQAogICAgICAgICAgICAgcmV0dXJuIHRyeUF0dGFjaFZlcnRleCh2KTsKICAgICAgICAgfQogICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlZlcnRleCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSBtZXJnZUU6ICVzIiwgbykpOworICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlZlcnRleCBkb2VzIG5vdCBleGlzdCBmb3IgbWVyZ2VFOiAlcyIsIG8pKTsKICAgICB9CiAKICAgICAvKgpAQCAtNDA0LDcgKzQwNCw3IEBACiAgICAgICAgIHRyeSAoQ2xvc2VhYmxlSXRlcmF0b3I8VmVydGV4PiBpdCA9IENsb3NlYWJsZUl0ZXJhdG9yLm9mKGdldEdyYXBoKCkudmVydGljZXMoYXJnKSkpIHsKICAgICAgICAgICAgIGlmICghaXQuaGFzTmV4dCgpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJWZXJ0ZXggaWQgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gbWVyZ2VFOiAlcyIsIGFyZykpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiVmVydGV4IGRvZXMgbm90IGV4aXN0IGZvciBtZXJnZUU6ICVzIiwgYXJnKSk7CiAgICAgICAgICAgICByZXR1cm4gaXQubmV4dCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICgoQXR0YWNoYWJsZTxWZXJ0ZXg+KSB2KS5hdHRhY2goQXR0YWNoYWJsZS5NZXRob2QuZ2V0KGdldEdyYXBoKCkpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiVmVydGV4IGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIG1lcmdlRTogJXMiLCB2KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJWZXJ0ZXggZG9lcyBub3QgZXhpc3QgZm9yIG1lcmdlRTogJXMiLCB2KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gdjsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVyZ2VFbGVtZW50U3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVsZW1lbnRTdGVwLmphdmEKaW5kZXggZjkwYzg0Yy4uMDUzMjEzZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVsZW1lbnRTdGVwLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVsZW1lbnRTdGVwLmphdmEKQEAgLTE2NCw3ICsxNjQsNiBAQAogICAgICAgICByZXR1cm4gY2hpbGRyZW47CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNVc2luZ1BhcnRpdGlvblN0cmF0ZWd5KCkgewogICAgICAgICByZXR1cm4gdXNlc1BhcnRpdGlvblN0cmF0ZWd5OwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVyZ2VTdGVwLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01lcmdlU3RlcC5qYXZhCmluZGV4IGViY2UwZTkuLjE3YjAyN2UgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVyZ2VTdGVwLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZVN0ZXAuamF2YQpAQCAtMjAsNiArMjAsNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuVHJhdmVyc2FsUGFyZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLlRyYXZlcnNlclJlcXVpcmVtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5MaXN0RnVuY3Rpb247CkBAIC00MCwxOCArNDEsMzIgQEAKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIE1lcmdlU3RlcDxTLCBFPiBleHRlbmRzIFNjYWxhck1hcFN0ZXA8UywgRT4gaW1wbGVtZW50cyBUcmF2ZXJzYWxQYXJlbnQsIExpc3RGdW5jdGlvbiB7CiAgICAgcHJpdmF0ZSBUcmF2ZXJzYWwuQWRtaW48UywgRT4gdmFsdWVUcmF2ZXJzYWw7Ci0gICAgcHJpdmF0ZSBPYmplY3QgcGFyYW1ldGVySXRlbXM7CisgICAgcHJpdmF0ZSBHVmFsdWU8T2JqZWN0PiBwYXJhbWV0ZXJJdGVtczsKIAogICAgIHB1YmxpYyBNZXJnZVN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgT2JqZWN0IHZhbHVlcykgewogICAgICAgICBzdXBlcih0cmF2ZXJzYWwpOwogCiAgICAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBUcmF2ZXJzYWwpIHsKICAgICAgICAgICAgIHZhbHVlVHJhdmVyc2FsID0gaW50ZWdyYXRlQ2hpbGQoKChUcmF2ZXJzYWw8UywgRT4pIHZhbHVlcykuYXNBZG1pbigpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBHVmFsdWUpeworICAgICAgICAgICAgcGFyYW1ldGVySXRlbXMgPSAoR1ZhbHVlPE9iamVjdD4pIHZhbHVlczsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmFtZXRlckl0ZW1zID0gdmFsdWVzOworICAgICAgICAgICAgcGFyYW1ldGVySXRlbXMgPSBHVmFsdWUub2YobnVsbCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyBUcmF2ZXJzYWwuQWRtaW48UywgRT4gZ2V0VmFsdWVUcmF2ZXJzYWwoKSB7CisgICAgICAgIHJldHVybiB2YWx1ZVRyYXZlcnNhbDsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldFBhcmFtZXRlckl0ZW1zKCkgeworICAgICAgICByZXR1cm4gcGFyYW1ldGVySXRlbXM7CisgICAgfQorCisgICAgcHVibGljIEdWYWx1ZTxPYmplY3Q+IGdldFBhcmFtZXRlckl0ZW1zR1ZhbHVlKCkgeworICAgICAgICByZXR1cm4gcGFyYW1ldGVySXRlbXM7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBnZXRTdGVwTmFtZSgpIHsgcmV0dXJuICJtZXJnZSI7IH0KIApAQCAtNjEsNyArNzYsNyBAQAogCiAgICAgICAgIGZpbmFsIE1hcCBtYXBBID0gKGluY29taW5nIGluc3RhbmNlb2YgTWFwKSA/IChNYXApIGluY29taW5nIDogbnVsbDsKICAgICAgICAgaWYgKG1hcEEgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgT2JqZWN0IG1hcEIgPSAodmFsdWVUcmF2ZXJzYWwgIT0gbnVsbCkgPyBUcmF2ZXJzYWxVdGlsLmFwcGx5KHRyYXZlcnNlciwgdmFsdWVUcmF2ZXJzYWwpIDogcGFyYW1ldGVySXRlbXM7CisgICAgICAgICAgICBmaW5hbCBPYmplY3QgbWFwQiA9ICh2YWx1ZVRyYXZlcnNhbCAhPSBudWxsKSA/IFRyYXZlcnNhbFV0aWwuYXBwbHkodHJhdmVyc2VyLCB2YWx1ZVRyYXZlcnNhbCkgOiBwYXJhbWV0ZXJJdGVtcy5nZXQoKTsKICAgICAgICAgICAgIGlmICghKG1hcEIgaW5zdGFuY2VvZiBNYXApKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCkBAIC03NiwxMyArOTEsMTMgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbmFsIENvbGxlY3Rpb24gbGlzdEEgPSBjb252ZXJ0VHJhdmVyc2VyVG9Db2xsZWN0aW9uKHRyYXZlcnNlcik7CiAKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJJdGVtcyBpbnN0YW5jZW9mIE1hcCkgeworICAgICAgICAgICAgaWYgKHBhcmFtZXRlckl0ZW1zICE9IG51bGwgJiYgcGFyYW1ldGVySXRlbXMuZ2V0KCkgaW5zdGFuY2VvZiBNYXApIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGdldFN0ZXBOYW1lKCkgKyAiIHN0ZXAgdHlwZSBtaXNtYXRjaDogZXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgSXRlcmFibGUgYnV0IGdvdCBNYXAiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsIENvbGxlY3Rpb24gbGlzdEIgPQogICAgICAgICAgICAgICAgICAgICAobnVsbCAhPSB2YWx1ZVRyYXZlcnNhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbnZlcnRUcmF2ZXJzYWxUb0NvbGxlY3Rpb24odHJhdmVyc2VyLCB2YWx1ZVRyYXZlcnNhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbnZlcnRBcmd1bWVudFRvQ29sbGVjdGlvbihwYXJhbWV0ZXJJdGVtcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb252ZXJ0QXJndW1lbnRUb0NvbGxlY3Rpb24ocGFyYW1ldGVySXRlbXMuZ2V0KCkpOwogCiAgICAgICAgICAgICBmaW5hbCBTZXQgZWxlbWVudHMgPSBuZXcgSGFzaFNldCgpOwogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01lcmdlVmVydGV4U3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZVZlcnRleFN0ZXAuamF2YQppbmRleCA3ZjkxNTdlLi4xMTg0NjgyIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01lcmdlVmVydGV4U3RlcC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVyZ2VWZXJ0ZXhTdGVwLmphdmEKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBwdWJsaWMgTWVyZ2VWZXJ0ZXhTdGVwKGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwsIGZpbmFsIGJvb2xlYW4gaXNTdGFydCwgZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBtZXJnZSkgewogICAgICAgICBzdXBlcih0cmF2ZXJzYWwsIGlzU3RhcnQsIG1lcmdlKTsKICAgICB9Ci0KKyAgICAKICAgICBwdWJsaWMgTWVyZ2VWZXJ0ZXhTdGVwKGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwsIGZpbmFsIGJvb2xlYW4gaXNTdGFydCwgZmluYWwgVHJhdmVyc2FsLkFkbWluPFMsTWFwPE9iamVjdCwgT2JqZWN0Pj4gbWVyZ2VUcmF2ZXJzYWwpIHsKICAgICAgICAgc3VwZXIodHJhdmVyc2FsLCBpc1N0YXJ0LCBtZXJnZVRyYXZlcnNhbCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Qcm9kdWN0U3RlcC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Qcm9kdWN0U3RlcC5qYXZhCmluZGV4IGNkZWJjYWQuLmEyOGY3MjYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUHJvZHVjdFN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1Byb2R1Y3RTdGVwLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLlRyYXZlcnNhbFBhcmVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5UcmF2ZXJzZXJSZXF1aXJlbWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuTGlzdEZ1bmN0aW9uOwpAQCAtMzYsNyArMzcsNyBAQAogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgUHJvZHVjdFN0ZXA8UywgRT4gZXh0ZW5kcyBTY2FsYXJNYXBTdGVwPFMsIExpc3Q8TGlzdDw/Pj4+IGltcGxlbWVudHMgVHJhdmVyc2FsUGFyZW50LCBMaXN0RnVuY3Rpb24gewogICAgIHByaXZhdGUgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHZhbHVlVHJhdmVyc2FsOwotICAgIHByaXZhdGUgT2JqZWN0IHBhcmFtZXRlckl0ZW1zOworICAgIHByaXZhdGUgR1ZhbHVlPE9iamVjdD4gcGFyYW1ldGVySXRlbXM7CiAKICAgICBwdWJsaWMgUHJvZHVjdFN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgT2JqZWN0IHZhbHVlcykgewogICAgICAgICBzdXBlcih0cmF2ZXJzYWwpOwpAQCAtNDQsMjEgKzQ1LDI5IEBACiAgICAgICAgIGlmICh2YWx1ZXMgaW5zdGFuY2VvZiBUcmF2ZXJzYWwpIHsKICAgICAgICAgICAgIHZhbHVlVHJhdmVyc2FsID0gaW50ZWdyYXRlQ2hpbGQoKChUcmF2ZXJzYWw8UywgRT4pIHZhbHVlcykuYXNBZG1pbigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcmFtZXRlckl0ZW1zID0gdmFsdWVzOworICAgICAgICAgICAgcGFyYW1ldGVySXRlbXMgPSB2YWx1ZXMgaW5zdGFuY2VvZiBHVmFsdWUgPyAoR1ZhbHVlPE9iamVjdD4pIHZhbHVlcyA6IEdWYWx1ZS5vZihudWxsLCB2YWx1ZXMpOwogICAgICAgICB9CiAgICAgfQogCisgICAgcHVibGljIFRyYXZlcnNhbC5BZG1pbjxTLEU+IGdldFZhbHVlVHJhdmVyc2FsKCkgeworICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVRyYXZlcnNhbDsKKyAgICB9CisKICAgICBwdWJsaWMgT2JqZWN0IGdldFBhcmFtZXRlckl0ZW1zKCkgewogICAgICAgICByZXR1cm4gcGFyYW1ldGVySXRlbXM7CiAgICAgfQogCisgICAgcHVibGljIEdWYWx1ZTxPYmplY3Q+IGdldFBhcmFtZXRlckl0ZW1zR1ZhbHVlKCkgeworICAgICAgICByZXR1cm4gcGFyYW1ldGVySXRlbXM7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBnZXRTdGVwTmFtZSgpIHsgcmV0dXJuICJwcm9kdWN0IjsgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIExpc3Q8TGlzdDw/Pj4gbWFwKFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKICAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBsaXN0QSA9IGNvbnZlcnRUcmF2ZXJzZXJUb0NvbGxlY3Rpb24odHJhdmVyc2VyKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbiBsaXN0QiA9IChudWxsICE9IHZhbHVlVHJhdmVyc2FsKSA/IGNvbnZlcnRUcmF2ZXJzYWxUb0NvbGxlY3Rpb24odHJhdmVyc2VyLCB2YWx1ZVRyYXZlcnNhbCkgOiBjb252ZXJ0QXJndW1lbnRUb0NvbGxlY3Rpb24ocGFyYW1ldGVySXRlbXMpOworICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIGxpc3RCID0gKG51bGwgIT0gdmFsdWVUcmF2ZXJzYWwpID8gY29udmVydFRyYXZlcnNhbFRvQ29sbGVjdGlvbih0cmF2ZXJzZXIsIHZhbHVlVHJhdmVyc2FsKSA6IGNvbnZlcnRBcmd1bWVudFRvQ29sbGVjdGlvbihwYXJhbWV0ZXJJdGVtcy5nZXQoKSk7CiAgICAgICAgIGZpbmFsIExpc3QgZWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7CiAKICAgICAgICAgZm9yIChPYmplY3QgZWxlbWVudEluQSA6IGxpc3RBKSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9JbmplY3RTdGVwLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9JbmplY3RTdGVwLmphdmEKaW5kZXggMmZiOGJkOS4uNTdiMjQ4ZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvSW5qZWN0U3RlcC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0luamVjdFN0ZXAuamF2YQpAQCAtMTksNiArMTksNyBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkFycmF5SXRlcmF0b3I7CiAKIC8qKgpAQCAtMjYsMjkgKzI3LDM5IEBACiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBJbmplY3RTdGVwPFM+IGV4dGVuZHMgU3RhcnRTdGVwPFM+IHsKIAotICAgIHByaXZhdGUgZmluYWwgU1tdIGluamVjdGlvbnM7CisgICAgcHJpdmF0ZSBmaW5hbCBHVmFsdWU8Uz5bXSBpbmplY3Rpb25zOwogCiAgICAgQFNhZmVWYXJhcmdzCiAgICAgcHVibGljIEluamVjdFN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgUy4uLiBpbmplY3Rpb25zKSB7CiAgICAgICAgIHN1cGVyKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRoaXMuaW5qZWN0aW9ucyA9IGluamVjdGlvbnM7Ci0gICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgQXJyYXlJdGVyYXRvcjw+KHRoaXMuaW5qZWN0aW9ucyk7CisgICAgICAgIHRoaXMuaW5qZWN0aW9ucyA9IEdWYWx1ZS5lbnN1cmVHVmFsdWVzKGluamVjdGlvbnMpOworICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3IEFycmF5SXRlcmF0b3I8PihHVmFsdWUucmVzb2x2ZVRvVmFsdWVzKHRoaXMuaW5qZWN0aW9ucykpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJbmplY3RTdGVwPFM+IGNsb25lKCkgewogICAgICAgICBmaW5hbCBJbmplY3RTdGVwPFM+IGNsb25lID0gKEluamVjdFN0ZXA8Uz4pIHN1cGVyLmNsb25lKCk7Ci0gICAgICAgIGNsb25lLnN0YXJ0ID0gbmV3IEFycmF5SXRlcmF0b3I8PihjbG9uZS5pbmplY3Rpb25zKTsKKyAgICAgICAgY2xvbmUuc3RhcnQgPSBuZXcgQXJyYXlJdGVyYXRvcjw+KEdWYWx1ZS5yZXNvbHZlVG9WYWx1ZXMoY2xvbmUuaW5qZWN0aW9ucykpOwogICAgICAgICByZXR1cm4gY2xvbmU7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgcmVzZXQoKSB7CiAgICAgICAgIHN1cGVyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgQXJyYXlJdGVyYXRvcjw+KHRoaXMuaW5qZWN0aW9ucyk7CisgICAgICAgIHRoaXMuc3RhcnQgPSBuZXcgQXJyYXlJdGVyYXRvcjw+KEdWYWx1ZS5yZXNvbHZlVG9WYWx1ZXModGhpcy5pbmplY3Rpb25zKSk7CiAgICAgfQogCi0gICAgcHVibGljIFNbXSBnZXRJbmplY3Rpb25zKCkgeworICAgIC8qKgorICAgICAqIEdldCB0aGUgaW5qZWN0aW9ucyBvZiB0aGUgc3RlcC4KKyAgICAgKi8KKyAgICBwdWJsaWMgR1ZhbHVlPFM+W10gZ2V0SW5qZWN0aW9uc0dWYWx1ZSgpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0aW9uczsKICAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBpbmplY3Rpb25zIG9mIHRoZSBzdGVwIGJ1dCB1bndyYXBzIHRoZSB7QGxpbmsgR1ZhbHVlfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU1tdIGdldEluamVjdGlvbnMoKSB7CisgICAgICAgIHJldHVybiAoU1tdKSBHVmFsdWUucmVzb2x2ZVRvVmFsdWVzKHRoaXMuaW5qZWN0aW9ucyk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3V0aWwvQWJzdHJhY3RTdGVwLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvdXRpbC9BYnN0cmFjdFN0ZXAuamF2YQppbmRleCAwMjRhZjk5Li41OWIwMzQ3IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvdXRpbC9BYnN0cmFjdFN0ZXAuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvdXRpbC9BYnN0cmFjdFN0ZXAuamF2YQpAQCAtMjI4LDUgKzIyOCw0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRyYXZlcnNlcjsKICAgICB9Ci0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvVHJhdmVyc2FsU3RyYXRlZ3lQcm94eS5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9UcmF2ZXJzYWxTdHJhdGVneVByb3h5LmphdmEKaW5kZXggODBkZTE1NS4uMDViMTgxMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9UcmF2ZXJzYWxTdHJhdGVneVByb3h5LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9UcmF2ZXJzYWxTdHJhdGVneVByb3h5LmphdmEKQEAgLTIwLDE2ICsyMCwyMCBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5OwogCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuTWFwQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmdyYW1tYXIuVHJhdmVyc2FsU3RyYXRlZ3lWaXNpdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogCiAvKioKLSAqIFRoaXMgY2xhc3MgaXMgZm9yIHVzZSB3aXRoIHtAbGluayBCeXRlY29kZX0gYW5kIGZvciBzZXJpYWxpemF0aW9uIHB1cnBvc2VzLiBJdCBpcyBub3QgbWVhbnQgZm9yIGRpcmVjdCB1c2Ugd2l0aAorICogVGhpcyBjbGFzcyBpcyBmb3IgdXNlIHdpdGgge0BsaW5rIEdyZW1saW5MYW5nfSBhbmQgZm9yIHNlcmlhbGl6YXRpb24gcHVycG9zZXMuIEl0IGlzIG5vdCBtZWFudCBmb3IgZGlyZWN0IHVzZSB3aXRoCiAgKiB7QGxpbmsgVHJhdmVyc2FsU291cmNlI3dpdGhTdHJhdGVnaWVzKFRyYXZlcnNhbFN0cmF0ZWd5W10pfS4KICAqCiAgKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKQEAgLTM3LDIzICs0MSw1MCBAQAogcHVibGljIGZpbmFsIGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHk8VCBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5PiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSwgVHJhdmVyc2FsU3RyYXRlZ3kgewogCiAgICAgcHJpdmF0ZSBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBDbGFzczxUPiBzdHJhdGVneUNsYXNzOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHN0cmF0ZWd5TmFtZTsKIAotICAgIHB1YmxpYyBUcmF2ZXJzYWxTdHJhdGVneVByb3h5KGZpbmFsIFQgdHJhdmVyc2FsU3RyYXRlZ3kpIHsKLSAgICAgICAgdGhpcygoQ2xhc3M8VD4pIHRyYXZlcnNhbFN0cmF0ZWd5LmdldENsYXNzKCksIHRyYXZlcnNhbFN0cmF0ZWd5LmdldENvbmZpZ3VyYXRpb24oKSk7CisgICAgcHVibGljIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkoZmluYWwgU3RyaW5nIHN0cmF0ZWd5TmFtZSkgeworICAgICAgICB0aGlzKHN0cmF0ZWd5TmFtZSwgbmV3IE1hcENvbmZpZ3VyYXRpb24oQ29sbGVjdGlvbnMuRU1QVFlfTUFQKSk7CiAgICAgfQogCi0gICAgcHVibGljIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkoZmluYWwgQ2xhc3M8VD4gc3RyYXRlZ3lDbGFzcywgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7CisgICAgcHVibGljIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkoZmluYWwgU3RyaW5nIHN0cmF0ZWd5TmFtZSwgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7CiAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247Ci0gICAgICAgIHRoaXMuc3RyYXRlZ3lDbGFzcyA9IHN0cmF0ZWd5Q2xhc3M7CisgICAgICAgIHRoaXMuc3RyYXRlZ3lOYW1lID0gc3RyYXRlZ3lOYW1lOworICAgIH0KKworICAgIHB1YmxpYyBUcmF2ZXJzYWxTdHJhdGVneVByb3h5KGZpbmFsIFQgdHJhdmVyc2FsU3RyYXRlZ3kpIHsKKyAgICAgICAgdGhpcyh0cmF2ZXJzYWxTdHJhdGVneS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSwgdHJhdmVyc2FsU3RyYXRlZ3kuZ2V0Q29uZmlndXJhdGlvbigpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZAorICAgICAqIFRoaXMgY29uc3RydWN0b3IgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSA0LjAuMCBhcyBUcmF2ZXJzYWxTdHJhdGVneVByb3h5IGlzIG5vdyBiYXNlZCBhcm91bmQgc3RyYXRlZ3kgbmFtZXMsCisgICAgICogaW5zdGVhZCBvZiBzdHJhdGVneSBjbGFzc2VzLiBVc2Uge0BsaW5rIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkjVHJhdmVyc2FsU3RyYXRlZ3lQcm94eShTdHJpbmcsIENvbmZpZ3VyYXRpb24pfQorICAgICAqIGluc3RlYWQuCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eShmaW5hbCBDbGFzczxUPiBzdHJhdGVneUNsYXNzLCBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgdGhpcyhzdHJhdGVneUNsYXNzLmdldFNpbXBsZU5hbWUoKSwgY29uZmlndXJhdGlvbik7CiAgICAgfQogCiAgICAgcHVibGljIENvbmZpZ3VyYXRpb24gZ2V0Q29uZmlndXJhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbjsKICAgICB9CiAKKyAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmF0ZWd5TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuc3RyYXRlZ3lOYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkCisgICAgICogQXMgb2YgNC4wLjAsIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkgaXMgbm93IGJhc2VkIGFyb3VuZCBzdHJhdGVneSBuYW1lcywgaW5zdGVhZCBvZiBzdHJhdGVneSBjbGFzc2VzLiBGb3IKKyAgICAgKiBjb21wYXRpYmlsaXR5LCB0aGlzIG1ldGhvZCB3aWxsIGF0dGVtcHQgdG8gbG9va3VwIHRoZSBzdHJhdGVneSBuYW1lIGluIHtAbGluayBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlfS4KKyAgICAgKiBVc2Ugb2Yge0BsaW5rIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkjZ2V0U3RyYXRlZ3lOYW1lKCl9IGlzIHByZWZlcnJlZC4gSWYgYSBjbGFzcyBvYmplY3QgaXMgbmVlZGVkLCB1c2VycyBzaG91bGQKKyAgICAgKiB1dGlsaXplIGEgbWFwcGluZyBvZiBzdHJhdGVneSBuYW1lIHRvIHN0cmF0ZWd5IGNsYXNzIHdoaWNoIGlzIGFwcHJvcHJpYXRlIGZvciB0aGVpciBlbnZpcm9ubWVudC4KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBDbGFzczxUPiBnZXRTdHJhdGVneUNsYXNzKCkgewotICAgICAgICByZXR1cm4gdGhpcy5zdHJhdGVneUNsYXNzOworICAgICAgICByZXR1cm4gKENsYXNzPFQ+KSBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlLmdldFJlZ2lzdGVyZWRTdHJhdGVneUNsYXNzKHN0cmF0ZWd5TmFtZSkuZ2V0KCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vU2lkZUVmZmVjdFN0cmF0ZWd5LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vU2lkZUVmZmVjdFN0cmF0ZWd5LmphdmEKaW5kZXggMDU1ZDA0NS4uZmYwMjg0ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1NpZGVFZmZlY3RTdHJhdGVneS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9TaWRlRWZmZWN0U3RyYXRlZ3kuamF2YQpAQCAtMjIsMTEgKzIyLDEzIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5FbXB0eVN0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5BYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5Db25zdGFudFN1cHBsaWVyOwogaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlRyaXBsZXQ7CiAKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5CaW5hcnlPcGVyYXRvcjsKQEAgLTYwLDcgKzYyLDEzIEBACiAgICAgICAgICAgICBzdHJhdGVneSA9IGNsb25lU3RyYXRlZ3k7CiAgICAgICAgICAgICB0cmF2ZXJzYWxTdHJhdGVnaWVzLmFkZFN0cmF0ZWdpZXMoc3RyYXRlZ3kpOwogICAgICAgICB9Ci0gICAgICAgIHN0cmF0ZWd5LnNpZGVFZmZlY3RzLmFkZChuZXcgVHJpcGxldDw+KGtleSwgdmFsdWUgaW5zdGFuY2VvZiBTdXBwbGllciA/IChTdXBwbGllcikgdmFsdWUgOiBuZXcgQ29uc3RhbnRTdXBwbGllcjw+KHZhbHVlKSwgcmVkdWNlcikpOworCisgICAgICAgIC8vIGRvbid0IHdhbnQgdGhlIEdWYWx1ZSB0byBsZWFrIGJleW9uZCBzdHJhdGVneSBhcHBsaWNhdGlvbiBvciBlbHNlIHRoZSBTdXBwbGllciB3aWxsIHN0YXJ0IHByb2R1Y2luZyBpdAorICAgICAgICAvLyBkdXJpbmcgZXhlY3V0aW9uCisgICAgICAgIHN0cmF0ZWd5LnNpZGVFZmZlY3RzLmFkZChuZXcgVHJpcGxldDw+KGtleSwgKFN1cHBsaWVyICYgU2VyaWFsaXphYmxlKSAoKCkgLT4geworICAgICAgICAgICAgT2JqZWN0IGluaXRpYWxWYWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgU3VwcGxpZXIgPyAoKFN1cHBsaWVyKSB2YWx1ZSkuZ2V0KCkgOiB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBHVmFsdWUudmFsdWVPZihpbml0aWFsVmFsdWUpOworICAgICAgICB9KSwgcmVkdWNlcikpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGZpbmFsIFN0cmluZyBzaWRlRWZmZWN0S2V5KSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9MYXp5QmFycmllclN0cmF0ZWd5LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9MYXp5QmFycmllclN0cmF0ZWd5LmphdmEKaW5kZXggOTY0OGVhZS4uYWM1ZmVmZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vTGF6eUJhcnJpZXJTdHJhdGVneS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0xhenlCYXJyaWVyU3RyYXRlZ3kuamF2YQpAQCAtMjMsOSArMjMsOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkJhcnJpZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLlBhdGhQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5EaXNjYXJkU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkRyb3BTdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuSGFzU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkRpc2NhcmRTdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRWxlbWVudFN0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5GbGF0TWFwU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoU3RlcENvbnRyYWN0OwpAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkgPiAwIHx8ICgoR3JhcGhTdGVwQ29udHJhY3QpIHN0ZXApLmdldElkcygpLmxlbmd0aCA+PSBCSUdfU1RBUlRfU0laRSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoR3JhcGhTdGVwQ29udHJhY3QpIHN0ZXApLmdldElkcygpLmxlbmd0aCA9PSAwICYmICEoc3RlcC5nZXROZXh0U3RlcCgpIGluc3RhbmNlb2YgSGFzU3RlcCkpKSkpIHsKIAotICAgICAgICAgICAgICAgIC8vIE5vbmVTdGVwLCBFbXB0eVN0ZXAgc2lnbmlmeSB0aGUgZW5kIG9mIHRoZSB0cmF2ZXJzYWwgd2hlcmUgbm8gYmFycmllcnMgYXJlIHJlYWxseSBnb2luZyB0byBiZQorICAgICAgICAgICAgICAgIC8vIERpc2NhcmRTdGVwLCBFbXB0eVN0ZXAgc2lnbmlmeSB0aGUgZW5kIG9mIHRoZSB0cmF2ZXJzYWwgd2hlcmUgbm8gYmFycmllcnMgYXJlIHJlYWxseSBnb2luZyB0byBiZQogICAgICAgICAgICAgICAgIC8vIGhlbHBmdWwgYWZ0ZXIgdGhhdC4gUHJvZmlsZVNpZGVFZmZlY3RTdGVwIG1lYW5zIHRoZSB0cmF2ZXJzYWwgaGFkIHByb2ZpbGUoKSBjYWxsZWQgb24gaXQgYW5kIGlmCiAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgYWNjb3VudCBmb3IgdGhhdCBhIGJhcnJpZXIgd2lsbCBpbmplY3QgYXQgdGhlIGVuZCBvZiB0aGUgdHJhdmVyc2FsIHdoZXJlIGl0IHdvdWxkbid0CiAgICAgICAgICAgICAgICAgLy8gYmUgb3RoZXJ3aXNlLiBMYXp5QmFycmllclN0cmF0ZWd5IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZmluYWxpemF0aW9uIHN0cmF0ZWd5IG9mIFByb2ZpbGVTdHJhdGVneQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneS5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneS5qYXZhCmluZGV4IDg4NTQ0MDIuLjQzNTRmYWMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL1N0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9TdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5LmphdmEKQEAgLTgwLDcgKzgwLDcgQEAKIAogICAgICAgICAvLyBUaGUgUHJvZmlsZVNpZGVFZmZlY3RTdGVwIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKICAgICAgICAgLy8gKDEpIHRoZSBsYXN0IHN0ZXAKLSAgICAgICAgLy8gKDIpIDJuZCBsYXN0IHN0ZXAgd2hlbiBhY2NvbXBhbmllZCBieSB0aGUgY2FwIHN0ZXAgb3IgZGlzY2FyZCBzdGVwIChpLmUuIGl0ZXJhdGUoKSB0byBub3RoaW5nKQorICAgICAgICAvLyAoMikgMm5kIGxhc3Qgc3RlcCB3aGVuIGFjY29tcGFuaWVkIGJ5IHRoZSBjYXAgc3RlcCBvciBub25lIHN0ZXAgKGkuZS4gaXRlcmF0ZSgpIHRvIG5vdGhpbmcpCiAgICAgICAgIC8vICgzKSAzcmQgdG8gbGFzdCB3aGVuIHRoZSB0cmF2ZXJzYWwgZW5kcyB3aXRoIGEgUmVxdWlyZW1lbnRzU3RlcC4KICAgICAgICAgZmluYWwgU3RlcDw/LCA/PiBlbmRTdGVwID0gdHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRFbmRTdGVwKCk7CiAgICAgICAgIGlmIChUcmF2ZXJzYWxIZWxwZXIuaGFzU3RlcE9mQ2xhc3MoUHJvZmlsZVNpZGVFZmZlY3RTdGVwLmNsYXNzLCB0cmF2ZXJzYWwpICYmCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvQW5vbnltaXppbmdUeXBlVHJhbnNsYXRvci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0Fub255bWl6aW5nVHlwZVRyYW5zbGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY5OTQzMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvQW5vbnltaXppbmdUeXBlVHJhbnNsYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3I7Ci0KLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY3JpcHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci0KLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLS8qKgotICogVGhpcyBUcmFuc2xhdG9yIHdpbGwgdHJhbnNsYXRlIHtAbGluayBCeXRlY29kZX0gaW50byBhIHJlcHJlc2VudGF0aW9uIHRoYXQgaGFzIGJlZW4gc3RyaXBwZWQgb2YgYW55IHVzZXIgZGF0YQotICogKGFub255bWl6ZWQpLiBBIGRlZmF1bHQgYW5vbnltaXplciBpcyBwcm92aWRlZCwgYnV0IGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgY3VzdG9tIGFub255bWl6ZXIgYXMgbmVlZGVkLiBUaGUKLSAqIGRlZmF1bHQgYW5vbnltaXplciByZXBsYWNlcyBhbnkgU3RyaW5nLCBOdW1lcmljLCBEYXRlLCBUaW1lc3RhbXAsIG9yIFVVSUQgd2l0aCBhIHR5cGUtYmFzZWQgdG9rZW4uIElkZW50aWNhbCB2YWx1ZXMKLSAqIHdpbGwgcmVjZWl2ZSB0aGUgc2FtZSB0b2tlbiAoZS5nLiBpZiAiZm9vIiBpcyBhc3NpZ25lZCAic3RyaW5nMCIgdGhlbiBhbGwgb2NjdXJyZW5jZXMgb2YgImZvbyIgd2lsbCBiZSByZXBsYWNlZAotICogd2l0aCAic3RyaW5nMCIpLgotICovCi1wdWJsaWMgY2xhc3MgQW5vbnltaXppbmdUeXBlVHJhbnNsYXRvciBleHRlbmRzIEdyb292eVRyYW5zbGF0b3IuRGVmYXVsdFR5cGVUcmFuc2xhdG9yIHsKLQotICAgIC8qKgotICAgICAqIEN1c3RvbWl6YWJsZSBhbm9ueW1pemVyIGludGVyZmFjZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50ZXJmYWNlIEFub255bWl6ZXIgewotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJuIGFuIGFub255bWl6ZWQgdG9rZW4gZm9yIHRoZSBzdXBwbGllZCBvYmplY3QuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBvYmogYSB7QGxpbmsgVHJhdmVyc2FsfSBvYmplY3Qgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZXM6IFN0cmluZywgTG9uZywgRG91YmxlLCBGTG9hdCwgSW50ZWdlciwKLSAgICAgICAgICogICAgICAgICAgICBDbGFzcywgVEltZXN0YW1wLCBEYXRlLCBVVUlELCB7QGxpbmsgVmVydGV4fSwge0BsaW5rIEVkZ2V9LCB7QGxpbmsgVmVydGV4UHJvcGVydHl9Ci0gICAgICAgICAqIEByZXR1cm4gICAgYW4gYW5vbnltaXplZCB2ZXJzaW9uIG9mIHRoZSBzdXBwbGllZCBvYmplY3QKLSAgICAgICAgICovCi0gICAgICAgIE9iamVjdCBhbm9ueW1pemUoT2JqZWN0IG9iaik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGtlZXBzIGEgbWFwIGZyb20gdHlwZSAoSmF2YSBDbGFzcykgdG8gYW5vdGhlciBtYXAgZnJvbSBpbnN0YW5jZXMgdG8gYW5vbnltaXplZAotICAgICAqIHRva2VuLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRGVmYXVsdEFub255bWl6ZXIgaW1wbGVtZW50cyBBbm9ueW1pemVyIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogTWFwPENsYXNzTmFtZSwgTWFwPE9iamVjdCwgQW5vbnltaXplZFZhbHVlPj4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgTWFwPE9iamVjdCwgU3RyaW5nPj4gc2ltcGxlTmFtZVRvT2JqZWN0Q2FjaGUgPSBuZXcgSGFzaE1hcDw+KCk7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybiBhbiBhbm9ueW1pemVkIHRva2VuIGZvciB0aGUgc3VwcGxpZWQgb2JqZWN0IG9mIHRoZSBmb3JtICJ0eXBlOmluc3RhbmNlIyIuCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE9iamVjdCBhbm9ueW1pemUoZmluYWwgT2JqZWN0IG9iaikgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHR5cGUgPSBvYmouZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCk7Ci0KLSAgICAgICAgICAgIE1hcDxPYmplY3QsIFN0cmluZz4gb2JqZWN0VG9Bbm9ueW1pemVkU3RyaW5nID0gc2ltcGxlTmFtZVRvT2JqZWN0Q2FjaGUuZ2V0KHR5cGUpOwotICAgICAgICAgICAgaWYgKG9iamVjdFRvQW5vbnltaXplZFN0cmluZyAhPSBudWxsKXsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIG9iamVjdCB0eXBlIGhhcyBiZWVuIGhhbmRsZWQgYXQgbGVhc3Qgb25jZSBiZWZvcmUKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaW5uZXJWYWx1ZSA9IG9iamVjdFRvQW5vbnltaXplZFN0cmluZy5nZXQob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5uZXJWYWx1ZSAhPSBudWxsKXsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyVmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFub255bWl6ZWRWYWx1ZSA9IHR5cGUudG9Mb3dlckNhc2UoKSArIG9iamVjdFRvQW5vbnltaXplZFN0cmluZy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9iamVjdFRvQW5vbnltaXplZFN0cmluZy5wdXQob2JqLCBhbm9ueW1pemVkVmFsdWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYW5vbnltaXplZFZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0VG9Bbm9ueW1pemVkU3RyaW5nID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgIHNpbXBsZU5hbWVUb09iamVjdENhY2hlLnB1dCh0eXBlLCBvYmplY3RUb0Fub255bWl6ZWRTdHJpbmcpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhbm9ueW1pemVkVmFsdWUgPSB0eXBlLnRvTG93ZXJDYXNlKCkgKyBvYmplY3RUb0Fub255bWl6ZWRTdHJpbmcuc2l6ZSgpOwotICAgICAgICAgICAgICAgIG9iamVjdFRvQW5vbnltaXplZFN0cmluZy5wdXQob2JqLCBhbm9ueW1pemVkVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBhbm9ueW1pemVkVmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIEFub255bWl6ZXIgYW5vbnltaXplcjsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgY3JlYXRlcyBhIHtAbGluayBEZWZhdWx0QW5vbnltaXplcn0gKyB3aXRoUGFyYW1ldGVycz1mYWxzZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQW5vbnltaXppbmdUeXBlVHJhbnNsYXRvcigpIHsKLSAgICAgICAgdGhpcyhuZXcgRGVmYXVsdEFub255bWl6ZXIoKSwgZmFsc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBBbm9ueW1pemluZ1R5cGVUcmFuc2xhdG9yKGZpbmFsIGJvb2xlYW4gd2l0aFBhcmFtZXRlcnMpIHsKLSAgICAgICAgdGhpcyhuZXcgRGVmYXVsdEFub255bWl6ZXIoKSwgd2l0aFBhcmFtZXRlcnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBBbm9ueW1pemluZ1R5cGVUcmFuc2xhdG9yKGZpbmFsIEFub255bWl6ZXIgYW5vbnltaXplciwgZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICBzdXBlcih3aXRoUGFyYW1ldGVycyk7Ci0gICAgICAgIHRoaXMuYW5vbnltaXplciA9IGFub255bWl6ZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgU3RyaW5nIG8pIHsKLSAgICAgICAgcmV0dXJuIGFub255bWl6ZXIuYW5vbnltaXplKG8pLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgRGF0ZSBvKSB7Ci0gICAgICAgIHJldHVybiBhbm9ueW1pemVyLmFub255bWl6ZShvKS50b1N0cmluZygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE9mZnNldERhdGVUaW1lIG8pIHsKLSAgICAgICAgcmV0dXJuIGFub255bWl6ZXIuYW5vbnltaXplKG8pLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVGltZXN0YW1wIG8pIHsKLSAgICAgICAgcmV0dXJuIGFub255bWl6ZXIuYW5vbnltaXplKG8pLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVVVJRCBvKSB7Ci0gICAgICAgIHJldHVybiBhbm9ueW1pemVyLmFub255bWl6ZShvKS50b1N0cmluZygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE51bWJlciBvKSB7Ci0gICAgICAgIHJldHVybiBhbm9ueW1pemVyLmFub255bWl6ZShvKS50b1N0cmluZygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBDbGFzczw/PiBvKSB7Ci0gICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKGFub255bWl6ZXIuYW5vbnltaXplKG8pLnRvU3RyaW5nKCkpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0RvdE5ldFRyYW5zbGF0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9Eb3ROZXRUcmFuc2xhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NmY2MDMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0RvdE5ldFRyYW5zbGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwNyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkVudW1VdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdFc2NhcGVVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuTWVyZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGljazsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNhY2tGdW5jdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjcmlwdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuVHJhdmVyc2FsU3RyYXRlZ3lQcm94eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uUGFydGl0aW9uU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkNvbm5lY3RpdmVQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5PclA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5OdW1iZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLQotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5CaVByZWRpY2F0ZTsKLQotLyoqCi0gKiBDb252ZXJ0cyBieXRlY29kZSB0byBhIEMjIHN0cmluZyBvZiBHcmVtbGluLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIERvdE5ldFRyYW5zbGF0b3IgaW1wbGVtZW50cyBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlOwotICAgIHByaXZhdGUgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3I7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gbWV0aG9kc1dpdGhBcmdzTm90TmVlZGluZ0dlbmVyaWMgPSBBcnJheXMuYXNMaXN0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZ3JvdXAsCi0gICAgICAgICAgICBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmdyb3VwQ291bnQsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc2Fjayk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gc3RyaW5nTWV0aG9kc1dpdGhTY29wZXMgPSBBcnJheXMuYXNMaXN0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYXNTdHJpbmcsCi0gICAgICAgICAgICBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmxlbmd0aCwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5sVHJpbSwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5yZXBsYWNlLAotICAgICAgICAgICAgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5yVHJpbSwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zcGxpdCwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zdWJzdHJpbmcsCi0gICAgICAgICAgICBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRvTG93ZXIsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudG9VcHBlciwgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50cmltKTsKLQotICAgIHByaXZhdGUgRG90TmV0VHJhbnNsYXRvcihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBUeXBlVHJhbnNsYXRvciB0eXBlVHJhbnNsYXRvcikgewotICAgICAgICB0aGlzLnRyYXZlcnNhbFNvdXJjZSA9IHRyYXZlcnNhbFNvdXJjZTsKLSAgICAgICAgdGhpcy50eXBlVHJhbnNsYXRvciA9IHR5cGVUcmFuc2xhdG9yOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3Igd2l0aCBhIHtAY29kZSBmYWxzZX0gYXJndW1lbnQgdG8ge0Bjb2RlIHdpdGhQYXJhbWV0ZXJzfSB1c2luZwotICAgICAqIHtAbGluayAjb2YoU3RyaW5nLCBib29sZWFuKX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBEb3ROZXRUcmFuc2xhdG9yIG9mKGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgICAgICAgcmV0dXJuIG9mKHRyYXZlcnNhbFNvdXJjZSwgZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3Igd2l0aCB0aGUge0BsaW5rIERlZmF1bHRUeXBlVHJhbnNsYXRvcn0gcGFzc2luZyB0aGUge0Bjb2RlIHdpdGhQYXJhbWV0ZXJzfSBvcHRpb24gdG8gaXQKLSAgICAgKiB3aGljaCB3aWxsIGhhbmRsZSB0eXBlIHRyYW5zbGF0aW9uIGluIGEgZmFzaGlvbiB0aGF0IHNob3VsZCB0eXBpY2FsbHkgaW5jcmVhc2UgY2FjaGUgaGl0cyBhbmQgcmVkdWNlCi0gICAgICogY29tcGlsYXRpb24gdGltZXMgaWYgZW5hYmxlZCBhdCB0aGUgc2FjcmlmaWNlIHRvIHJld3JpdGluZyBvZiB0aGUgc2NyaXB0IHRoYXQgY291bGQgcmVkdWNlIHJlYWRhYmlsaXR5LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgRG90TmV0VHJhbnNsYXRvciBvZihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBib29sZWFuIHdpdGhQYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHJldHVybiBvZih0cmF2ZXJzYWxTb3VyY2UsIG5ldyBEZWZhdWx0VHlwZVRyYW5zbGF0b3Iod2l0aFBhcmFtZXRlcnMpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggYSBjdXN0b20ge0BsaW5rIFR5cGVUcmFuc2xhdG9yfSBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIERvdE5ldFRyYW5zbGF0b3Igb2YoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3IpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEb3ROZXRUcmFuc2xhdG9yKHRyYXZlcnNhbFNvdXJjZSwgdHlwZVRyYW5zbGF0b3IpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTY3JpcHQgdHJhbnNsYXRlKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB7Ci0gICAgICAgIHJldHVybiB0eXBlVHJhbnNsYXRvci5hcHBseSh0cmF2ZXJzYWxTb3VyY2UsIGJ5dGVjb2RlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldExhbmd1YWdlKCkgewotICAgICAgICByZXR1cm4gImdyZW1saW4tZG90bmV0IjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gU3RyaW5nRmFjdG9yeS50cmFuc2xhdG9yU3RyaW5nKHRoaXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhdmVyc2FsU291cmNlKCkgewotICAgICAgICByZXR1cm4gdGhpcy50cmF2ZXJzYWxTb3VyY2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMgc3RhbmRhcmQgdHlwZSB0cmFuc2xhdGlvbiBmb3IgdGhlIFRpbmtlclBvcCB0eXBlcyB0byBDIy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIERlZmF1bHRUeXBlVHJhbnNsYXRvciBleHRlbmRzIEFic3RyYWN0VHlwZVRyYW5zbGF0b3IgewotCi0gICAgICAgIHB1YmxpYyBEZWZhdWx0VHlwZVRyYW5zbGF0b3IoZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICAgICAgc3VwZXIod2l0aFBhcmFtZXRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TnVsbFN5bnRheCgpIHsKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgU3RyaW5nIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiXCIiICsgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSmF2YShvKSArICJcIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgQm9vbGVhbiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gby50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIERhdGUgbykgewotICAgICAgICAgICAgcmV0dXJuICJEYXRlVGltZU9mZnNldC5Gcm9tVW5peFRpbWVNaWxsaXNlY29uZHMoIiArIG8uZ2V0VGltZSgpICsgIikiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE9mZnNldERhdGVUaW1lIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIiICsgby50b1N0cmluZygpICsgIlwiKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVGltZXN0YW1wIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiRGF0ZVRpbWVPZmZzZXQuRnJvbVVuaXhUaW1lTWlsbGlzZWNvbmRzKCIgKyBvLmdldFRpbWUoKSArICIpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBVVUlEIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAibmV3IEd1aWQoXCIiICsgby50b1N0cmluZygpICsgIlwiKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgTGFtYmRhIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiTGFtYmRhLkdyb292eShcIiIgKyBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVFY21hU2NyaXB0KG8uZ2V0TGFtYmRhU2NyaXB0KCkudHJpbSgpKSArICJcIikiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFNhY2tGdW5jdGlvbnMuQmFycmllciBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gIkJhcnJpZXIuIiArIFN5bWJvbEhlbHBlci50b0NTaGFycChvLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5IG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiQ2FyZGluYWxpdHkuIiArIFN5bWJvbEhlbHBlci50b0NTaGFycChvLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFBpY2sgbykgewotICAgICAgICAgICAgcmV0dXJuICJQaWNrLiIgKyBTeW1ib2xIZWxwZXIudG9DU2hhcnAoby50b1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBOdW1iZXIgbykgewotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBGbG9hdCB8fCBvIGluc3RhbmNlb2YgRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc05hTihvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvIGluc3RhbmNlb2YgRmxvYXQgPyAiU2luZ2xlIiA6ICJEb3VibGUiKSArICIuTmFOIjsKLSAgICAgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzUG9zaXRpdmVJbmZpbml0eShvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChvIGluc3RhbmNlb2YgRmxvYXQgPyAiU2luZ2xlIiA6ICJEb3VibGUiKSArICIuUG9zaXRpdmVJbmZpbml0eSI7Ci0gICAgICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc05lZ2F0aXZlSW5maW5pdHkobykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobyBpbnN0YW5jZW9mIEZsb2F0ID8gIlNpbmdsZSIgOiAiRG91YmxlIikgKyAiLk5lZ2F0aXZlSW5maW5pdHkiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VDYXJkaW5hbGl0eVZhbHVlKGZpbmFsIEJ5dGVjb2RlIG8pIHsKLSAgICAgICAgICAgIGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3QgPSBvLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgwKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjYXJkID0gaW5zdC5nZXRBcmd1bWVudHMoKVswXS50b1N0cmluZygpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiQ2FyZGluYWxpdHlWYWx1ZS4iICsgY2FyZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIGNhcmQuc3Vic3RyaW5nKDEpICsgIigiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0LmdldEFyZ3VtZW50cygpWzFdKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFNldDw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdEZvckhhc2hTZXQobywgIm9iamVjdCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTY3JpcHQgcHJvZHVjZVNjcmlwdEZvckhhc2hTZXQoZmluYWwgU2V0PD8+IG8sIGZpbmFsIFN0cmluZyBnZW5lcmljKSB7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/PiBpdGVyYXRvciA9IG8uaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBIYXNoU2V0PCIpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChnZW5lcmljKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIj4geyIpOwotCi0gICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG5leHRJdGVtID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChuZXh0SXRlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIn0iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgTGlzdDw/PiBvKSB7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/PiBpdGVyYXRvciA9ICgoTGlzdDw/PikgbykuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBMaXN0PG9iamVjdD4geyIpOwotCi0gICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG5leHRJdGVtID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChuZXh0SXRlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIn0iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgTWFwPD8sID8+IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+IHsiKTsKLSAgICAgICAgICAgIHByb2R1Y2VLZXlWYWx1ZXNGb3JNYXAobyk7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgifSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBDbGFzczw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZChvLmdldENhbm9uaWNhbE5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIEVudW08Pz4gbykgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGUgPSBvIGluc3RhbmNlb2YgRGlyZWN0aW9uID8KLSAgICAgICAgICAgICAgICAgICAgby5uYW1lKCkuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIG8ubmFtZSgpLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpIDoKLSAgICAgICAgICAgICAgICAgICAgby5uYW1lKCkuc3Vic3RyaW5nKDAsMSkudG9VcHBlckNhc2UoKSArIG8ubmFtZSgpLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKG8uZ2V0RGVjbGFyaW5nQ2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiLiIgKyBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVmVydGV4IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBWZXJ0ZXgoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5sYWJlbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCIpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIEVkZ2UgbykgewotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgibmV3IEVkZ2UoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgbmV3IFZlcnRleCgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLm91dFZlcnRleCgpLmlkKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLm91dFZlcnRleCgpLmxhYmVsKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSwgIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5sYWJlbCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgbmV3IFZlcnRleCgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmluVmVydGV4KCkuaWQoKSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8uaW5WZXJ0ZXgoKS5sYWJlbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCIpKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBWZXJ0ZXhQcm9wZXJ0eTw/PiBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJuZXcgVmVydGV4UHJvcGVydHkoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5sYWJlbCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby52YWx1ZSgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgibnVsbCkiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eTw/PiBvKSB7Ci0gICAgICAgICAgICBpZiAoby5nZXRDb25maWd1cmF0aW9uKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIm5ldyAiICsgby5nZXRTdHJhdGVneUNsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIigpIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyAiICsgby5nZXRTdHJhdGVneUNsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIigiKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxTdHJpbmc+IGtleXMgPSBJdGVyYXRvclV0aWxzLnN0cmVhbShvLmdldENvbmZpZ3VyYXRpb24oKS5nZXRLZXlzKCkpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGtleXMuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrID0ga2V5cy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoayk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIjogIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGUgUGFydGl0aW9uU3RyYXRlZ3kgc2luY2UgdGhlIFNldCBpdCB1c2VzIG11c3QgYmUgb2YgU3RyaW5nIGZvciByZWFkUGFydGl0aW9ucwotICAgICAgICAgICAgICAgICAgICBpZiAoay5lcXVhbHMoInJlYWRQYXJ0aXRpb25zIikgJiYgby5nZXRTdHJhdGVneUNsYXNzKCkuZXF1YWxzKFBhcnRpdGlvblN0cmF0ZWd5LmNsYXNzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y2VTY3JpcHRGb3JIYXNoU2V0KChTZXQpIG8uZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KGspLCAic3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eShrKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTY3JpcHQgcHJvZHVjZUtleVZhbHVlc0Zvck1hcChmaW5hbCBNYXA8Pyw/PiBtKSB7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/IGV4dGVuZHMgTWFwLkVudHJ5PD8sID8+PiBpdHR5ID0gbS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBNYXAuRW50cnk8Pyw/PiBlbnRyeSA9IGl0dHkubmV4dCgpOwotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInsiKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoZW50cnkuZ2V0S2V5KCkpOwotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIn0iKTsKLSAgICAgICAgICAgICAgICBpZiAoaXR0eS5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBCeXRlY29kZSBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKHRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgICAgICAgICBpbnQgaW5zdHJ1Y3Rpb25Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogby5nZXRJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtZXRob2ROYW1lID0gaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAvLyBwZXJoYXBzIHRvbyBtYW55IGlmL3RoZW4gY29uZGl0aW9ucyBmb3Igc3BlY2lmeWluZyBnZW5lcmljcy4gZG9lc250JyBzZWVtIGxpa2UgdGhlcmUgaXMgYSBjbGVhcgotICAgICAgICAgICAgICAgIC8vIHdheSB0byByZWZhY3RvciB0aGlzIG1vcmUgbmljZWx5IHRob3VnaC4KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIGluamVjdCgpIG9ubHkgaGFzIHR5cGVzIHdoZW4gY2FsbGVkIHdpdGggaXQgd2hlbiBpdHMgdXNlZCBhcyBhIHN0YXJ0IHN0ZXAKLSAgICAgICAgICAgICAgICBpZiAoMCA9PSBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKS5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZm9sZCkgJiYgby5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5zaXplKCkgKyBvLmdldFN0ZXBJbnN0cnVjdGlvbnMoKS5zaXplKCkgPiAxIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW5qZWN0KSAmJiBpbnN0cnVjdGlvblBvc2l0aW9uID4gMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wobWV0aG9kTmFtZSkucmVwbGFjZSgiPG9iamVjdD4iLCAiIikpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nTWV0aG9kc1dpdGhTY29wZXMuY29udGFpbnMobWV0aG9kTmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpbmcgZnVuY3Rpb25zIHdpdGggZG9lc24ndCB1c2UgZ2VuZXJpY3MgaWYgbm8gc2NvcGUgaXMgc3BlY2lmaWVkCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wobWV0aG9kTmFtZSkucmVwbGFjZSgiPG9iamVjdD4iLCAiIikpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLiIpLmFwcGVuZChyZXNvbHZlU3ltYm9sKG1ldGhvZE5hbWUpKS5hcHBlbmQoIigpIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZHNXaXRoQXJnc05vdE5lZWRpbmdHZW5lcmljLmNvbnRhaW5zKG1ldGhvZE5hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW5qZWN0KSAmJiAoQXJyYXlzLnN0cmVhbShpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSkubm9uZU1hdGNoKE9iamVjdHM6OmlzTnVsbCkgfHwgaW5zdHJ1Y3Rpb25Qb3NpdGlvbiA+IDApKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmdNZXRob2RzV2l0aFNjb3Blcy5jb250YWlucyhtZXRob2ROYW1lKSAmJiAoQXJyYXlzLnN0cmVhbShpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSkubm9uZU1hdGNoKEVudW1VdGlscy5nZXRFbnVtTGlzdChTY29wZS5jbGFzcyk6OmNvbnRhaW5zKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLiIpLmFwcGVuZChyZXNvbHZlU3ltYm9sKG1ldGhvZE5hbWUpLnJlcGxhY2UoIjxvYmplY3Q+IiwgIiIpLnJlcGxhY2UoIjxvYmplY3Qsb2JqZWN0PiIsICIiKSkuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChtZXRob2ROYW1lKSkuYXBwZW5kKCIoIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byBzcGVjaWFsIGNhc2Ugd2l0aFNhY2soKSBiZWNhdXNlIFVuYXJ5T3BlcmF0b3IgYW5kIEJpbmFyeU9wZXJhdG9yIHNpZ25hdHVyZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBpdCBpbXBvc3NpYmxlIGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBjYWxsLiBzcGVjaWZpY2FsbHkgd2UgbmVlZAotICAgICAgICAgICAgICAgICAgICAvLyB0byBkaXNjZXJuIGJldHdlZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICB3aXRoU2FjayhBIGluaXRpYWxWYWx1ZSwgVW5hcnlPcGVyYXRvcjxBPiBzcGxpdE9wZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgd2l0aFNhY2soQSBpbml0aWFsVmFsdWUsIEJpbmFyeU9wZXJhdG9yPEE+IHNwbGl0T3BlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZDoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIHdpdGhTYWNrKFN1cHBsaWVyPEE+IGluaXRpYWxWYWx1ZSwgVW5hcnlPcGVyYXRvcjxBPiBtZXJnZU9wZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgd2l0aFNhY2soU3VwcGxpZXI8QT4gaW5pdGlhbFZhbHVlLCBCaW5hcnlPcGVyYXRvcjxBPiBtZXJnZU9wZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHMoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2spICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkubGVuZ3RoID09IDIgJiYgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKClbMV0gaW5zdGFuY2VvZiBMYW1iZGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjYXN0Rmlyc3RBcmdUbyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdIGluc3RhbmNlb2YgTGFtYmRhID8gIklTdXBwbGllciIgOiAiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExhbWJkYSBzZWNvbmRBcmcgPSAoTGFtYmRhKSBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKVsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjYXN0U2Vjb25kQXJnVG8gPSBzZWNvbmRBcmcuZ2V0TGFtYmRhQXJndW1lbnRzKCkgPT0gMSA/ICJJVW5hcnlPcGVyYXRvciIgOiAiSUJpbmFyeU9wZXJhdG9yIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FzdEZpcnN0QXJnVG8uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiKCVzKSAiLCBjYXN0Rmlyc3RBcmdUbykpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgKCIpLmFwcGVuZChjYXN0U2Vjb25kQXJnVG8pLmFwcGVuZCgiKSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKVsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHMoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZUUpIHx8IG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWVyZ2VWKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgLSBpZiBudWxsIGdvIHdpdGggTWFwCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgaW5zdEFyZyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gaW5zdEFyZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0PikgbnVsbCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEFyZyBpbnN0YW5jZW9mIFRyYXZlcnNhbCB8fCBpbnN0QXJnIGluc3RhbmNlb2YgQnl0ZWNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKElUcmF2ZXJzYWwpICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0PikgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0QXJnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFscyhHcmFwaFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLnR4KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbW1hbmQgPSByZXNvbHZlU3ltYm9sKGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKS4iKS5hcHBlbmQoY29tbWFuZCkuYXBwZW5kKCIoKSIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwoKQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbChTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsKFN0cmluZywgTWFwKQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FsbChTdHJpbmcsIFRyYXZlcnNhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGwoU3RyaW5nLCBNYXAsIFRyYXZlcnNhbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdFtdIGluc3RBcmdzID0gaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEFyZ3MubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFswXSBhbHdheXMgU3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGluc3RBcmdzWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEFyZ3MubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFsxXSBjb3VsZCBiZSBNYXAgb3IgVHJhdmVyc2FsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RBcmdzWzFdIGluc3RhbmNlb2YgVHJhdmVyc2FsIHx8IGluc3RBcmdzWzFdIGluc3RhbmNlb2YgQnl0ZWNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKElUcmF2ZXJzYWwpICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0PikgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0QXJnc1sxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RBcmdzLmxlbmd0aCA+IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbMl0gYWx3YXlzIFRyYXZlcnNhbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihJVHJhdmVyc2FsKSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaW5zdEFyZ3NbMl0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFscyhHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm9wdGlvbikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKS5sZW5ndGggPT0gMiAmJiBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKVswXSBpbnN0YW5jZW9mIE1lcmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBpbnN0QXJncyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5aW5nIHRvIGNhdGNoIG9wdGlvbihNZXJnZSxUcmF2ZXJzYWx8TWFwKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGluc3RBcmdzWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEFyZ3NbMV0gaW5zdGFuY2VvZiBUcmF2ZXJzYWwgfHwgaW5zdEFyZ3NbMV0gaW5zdGFuY2VvZiBCeXRlY29kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihJVHJhdmVyc2FsKSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKElEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+KSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0QXJnc1sxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBpbnN0QXJncyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgaW5zdEFyZ3MubGVuZ3RoOyBpZHgrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBpbnN0QXJnID0gaW5zdEFyZ3NbaWR4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVybG9hZHMgbWlnaHQgaGF2ZSB0cm91YmxlIHdpdGggbnVsbCBpbiBjYWxsaW5nIHRoZSByaWdodCBvbmUuIGFkZCBtb3JlIGFzIHdlIGZpbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVtIGkgZ3Vlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBpbnN0QXJnKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWV0aG9kTmFtZS5lcXVhbHMoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRWKSAmJiBpZHggJSAyID09IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaGFzTGFiZWwpICYmIGluc3RBcmdzLmxlbmd0aCA9PSAxICYmIGlkeCA9PSAwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXRob2ROYW1lLmVxdWFscyhHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhc0tleSkgJiYgaW5zdEFyZ3MubGVuZ3RoID09IDEgJiYgaWR4ID09IDApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIoc3RyaW5nKSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFscyhHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhc1ZhbHVlKSAmJiBpZHggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKG9iamVjdCkgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHMoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5oYXMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEFyZ3MubGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBpbnN0QXJnc1swXSAmJiBpZHggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIGF2b2lkIGEgbnVsbCBUIGFjY2Vzc29yIG9yIGVsc2UgR3JhcGhUcmF2ZXJzYWwgZ2V0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gYW5kIHdoZW4gY2FsbGVkIGJ5IHdheSBvZiByZWZsZWN0aW9uIHRocm91Z2gKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSmF2YVRyYW5zbGF0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKHN0cmluZykiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoaW5zdEFyZ3NbMF0gaW5zdGFuY2VvZiBUIHx8IGluc3RBcmdzWzBdIGluc3RhbmNlb2YgU3RyaW5nKSAmJiBpZHggPT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIob2JqZWN0KSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluc3RBcmdzLmxlbmd0aCA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpbnN0QXJnc1swXSBpbnN0YW5jZW9mIFQgfHwgaW5zdEFyZ3NbMF0gaW5zdGFuY2VvZiBTdHJpbmcpICYmIGlkeCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihzdHJpbmcpICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGluc3RBcmdzWzBdIGluc3RhbmNlb2YgVCB8fCBpbnN0QXJnc1swXSBpbnN0YW5jZW9mIFN0cmluZykgJiYgaWR4ID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKG9iamVjdCkgIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucHJvcGVydHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdEFyZ3NbMF0gaW5zdGFuY2VvZiBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eSAmJiBpbnN0QXJncy5sZW5ndGggPT0gMykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIihvYmplY3QpICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0QXJnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnNldENoYXJBdEVuZCgnKScpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblBvc2l0aW9uKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBQPD8+IHApIHsKLSAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgVGV4dFApIHsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJUZXh0UC4iKS5hcHBlbmQoU3ltYm9sSGVscGVyLnRvQ1NoYXJwKHAuZ2V0UHJlZGljYXRlTmFtZSgpKSkuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KHAuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBDb25uZWN0aXZlUCkgewotICAgICAgICAgICAgICAgIC8vIENvbm5lY3RpdmVQIGdldHMgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGJlY2F1c2UgaXQncyByZWR1Y2VkIHRvIGFuZChQLCBQLCBQKSBhbmQgd2Ugd2FudCBpdAotICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlZCB0aGUgd2F5IGl0IHdhcyB3cml0dGVuIHdoaWNoIHdhcyBQLmFuZChQKS5hbmQoUCkKLSAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFA8Pz4+IGxpc3QgPSAoKENvbm5lY3RpdmVQKSBwKS5nZXRQcmVkaWNhdGVzKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbm5lY3RvciA9IHAgaW5zdGFuY2VvZiBPclAgPyAiT3IiIDogIkFuZCI7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VTY3JpcHQobGlzdC5nZXQoaSkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgZmlyc3QvbGFzdCBQIHRoZXJlIGlzIG5vIHBhcmVudCB0byBjbG9zZQotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgaSA8IGxpc3Quc2l6ZSgpIC0gMSkgc2NyaXB0LmFwcGVuZCgiKSIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0ZWggY29ubmVjdG9yIGZvciBhbGwgYnV0IGxhc3QgUAotICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGxpc3Quc2l6ZSgpIC0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLiIpLmFwcGVuZChjb25uZWN0b3IpLmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJQLiIpLmFwcGVuZChTeW1ib2xIZWxwZXIudG9DU2hhcnAocC5nZXRQcmVkaWNhdGVOYW1lKCkpKS5hcHBlbmQoIigiKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQocC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVTeW1ib2woZmluYWwgU3RyaW5nIG1ldGhvZE5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBTeW1ib2xIZWxwZXIudG9DU2hhcnAobWV0aG9kTmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgY2xhc3MgU3ltYm9sSGVscGVyIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IFRPX0NTX01BUCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBGUk9NX0NTX01BUCA9IG5ldyBIYXNoTWFwPD4oKTsKLQotICAgICAgICBzdGF0aWMgewotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFzU3RyaW5nLCAiQXNTdHJpbmc8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJyYW5jaCwgIkJyYW5jaDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FsbCwgIkNhbGw8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhcCwgIkNhcDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2hvb3NlLCAiQ2hvb3NlPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jb2FsZXNjZSwgIkNvYWxlc2NlPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jb25zdGFudCwgIkNvbnN0YW50PG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5lbGVtZW50TWFwLCAiRWxlbWVudE1hcDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZmxhdE1hcCwgIkZsYXRNYXA8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmZvbGQsICJGb2xkPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5ncm91cCwgIkdyb3VwPG9iamVjdCxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZ3JvdXBDb3VudCwgIkdyb3VwQ291bnQ8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluZGV4LCAiSW5kZXg8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluamVjdCwgIkluamVjdDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW8sICJJbzxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubGVuZ3RoLCAiTGVuZ3RoPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5saW1pdCwgIkxpbWl0PG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5sb2NhbCwgIkxvY2FsPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5sVHJpbSwgIkxUcmltPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tYXRjaCwgIk1hdGNoPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tYXAsICJNYXA8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1heCwgIk1heDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWluLCAiTWluPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZWFuLCAiTWVhbjxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3B0aW9uYWwsICJPcHRpb25hbDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucHJvamVjdCwgIlByb2plY3Q8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnByb3BlcnRpZXMsICJQcm9wZXJ0aWVzPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5yYW5nZSwgIlJhbmdlPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5yZXBsYWNlLCAiUmVwbGFjZTxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuclRyaW0sICJSVHJpbTxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc2FjaywgIlNhY2s8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnNlbGVjdCwgIlNlbGVjdDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc2tpcCwgIlNraXA8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnNwbGl0LCAiU3BsaXQ8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnN1YnN0cmluZywgIlN1YnN0cmluZzxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc3VtLCAiU3VtPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50YWlsLCAiVGFpbDxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudG9Mb3dlciwgIlRvTG93ZXI8b2JqZWN0PiIpOwotICAgICAgICAgICAgVE9fQ1NfTUFQLnB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRvVXBwZXIsICJUb1VwcGVyPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50cmltLCAiVHJpbTxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudW5mb2xkLCAiVW5mb2xkPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy51bmlvbiwgIlVuaW9uPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy52YWx1ZSwgIlZhbHVlPG9iamVjdD4iKTsKLSAgICAgICAgICAgIFRPX0NTX01BUC5wdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy52YWx1ZU1hcCwgIlZhbHVlTWFwPG9iamVjdCxvYmplY3Q+Iik7Ci0gICAgICAgICAgICBUT19DU19NQVAucHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudmFsdWVzLCAiVmFsdWVzPG9iamVjdD4iKTsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBUT19DU19NQVAuZm9yRWFjaCgoaywgdikgLT4gRlJPTV9DU19NQVAucHV0KHYsIGspKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3ltYm9sSGVscGVyKCkgewotICAgICAgICAgICAgLy8gc3RhdGljIG1ldGhvZHMgb25seSwgZG8gbm90IGluc3RhbnRpYXRlCi0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0NTaGFycChmaW5hbCBTdHJpbmcgc3ltYm9sKSB7Ci0gICAgICAgICAgICByZXR1cm4gVE9fQ1NfTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIHN5bWJvbC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpICsgc3ltYm9sLnN1YnN0cmluZygxKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0phdmEoZmluYWwgU3RyaW5nIHN5bWJvbCkgewotICAgICAgICAgICAgcmV0dXJuIEZST01fQ1NfTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIHN5bWJvbC5zdWJzdHJpbmcoMCwxKS50b0xvd2VyQ2FzZSgpICsgc3ltYm9sLnN1YnN0cmluZygxKSk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9Hb2xhbmdUcmFuc2xhdG9yLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvR29sYW5nVHJhbnNsYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjlhMTY2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9Hb2xhbmdUcmFuc2xhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdFc2NhcGVVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBpY2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TYWNrRnVuY3Rpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NyaXB0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVGV4dFA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5UcmF2ZXJzYWxTdHJhdGVneVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5Db25uZWN0aXZlUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuT3JQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuU3RyaW5nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTnVtYmVySGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci0KLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLS8qKgotICogVHJhbnNsYXRlcyBHcmVtbGluIHtAbGluayBCeXRlY29kZX0gaW50byBhIEdvbGFuZyBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi0gKgotICogQGF1dGhvciBTaW1vbiBaaGFvIChzaW1vbnpAYml0cXVpbGx0ZWNoLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEdvbGFuZ1RyYW5zbGF0b3IgaW1wbGVtZW50cyBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgewotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZTsKLSAgICBwcml2YXRlIGZpbmFsIFR5cGVUcmFuc2xhdG9yIHR5cGVUcmFuc2xhdG9yOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBHT19QQUNLQUdFX05BTUUgPSAiZ3JlbWxpbmdvLiI7Ci0KLSAgICBwcml2YXRlIEdvbGFuZ1RyYW5zbGF0b3IoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3IpIHsKLSAgICAgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2UgPSB0cmF2ZXJzYWxTb3VyY2U7Ci0gICAgICAgIHRoaXMudHlwZVRyYW5zbGF0b3IgPSB0eXBlVHJhbnNsYXRvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggYSB7QGNvZGUgZmFsc2V9IGFyZ3VtZW50IHRvIHtAY29kZSB3aXRoUGFyYW1ldGVyc30gdXNpbmcKLSAgICAgKiB7QGxpbmsgI29mKFN0cmluZywgYm9vbGVhbil9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgR29sYW5nVHJhbnNsYXRvciBvZihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlKSB7Ci0gICAgICAgIHJldHVybiBvZih0cmF2ZXJzYWxTb3VyY2UsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggdGhlIHtAbGluayBEZWZhdWx0VHlwZVRyYW5zbGF0b3J9IHBhc3NpbmcgdGhlIHtAY29kZSB3aXRoUGFyYW1ldGVyc30gb3B0aW9uIHRvIGl0Ci0gICAgICogd2hpY2ggd2lsbCBoYW5kbGUgdHlwZSB0cmFuc2xhdGlvbiBpbiBhIGZhc2hpb24gdGhhdCBzaG91bGQgdHlwaWNhbGx5IGluY3JlYXNlIGNhY2hlIGhpdHMgYW5kIHJlZHVjZQotICAgICAqIGNvbXBpbGF0aW9uIHRpbWVzIGlmIGVuYWJsZWQgYXQgdGhlIHNhY3JpZmljZSB0byByZXdyaXRpbmcgb2YgdGhlIHNjcmlwdCB0aGF0IGNvdWxkIHJlZHVjZSByZWFkYWJpbGl0eS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEdvbGFuZ1RyYW5zbGF0b3Igb2YoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICByZXR1cm4gb2YodHJhdmVyc2FsU291cmNlLCBuZXcgRGVmYXVsdFR5cGVUcmFuc2xhdG9yKHdpdGhQYXJhbWV0ZXJzKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyB0aGUgdHJhbnNsYXRvciB3aXRoIGEgY3VzdG9tIHtAbGluayBUeXBlVHJhbnNsYXRvcn0gaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBHb2xhbmdUcmFuc2xhdG9yIG9mKGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIFR5cGVUcmFuc2xhdG9yIHR5cGVUcmFuc2xhdG9yKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR29sYW5nVHJhbnNsYXRvcih0cmF2ZXJzYWxTb3VyY2UsIHR5cGVUcmFuc2xhdG9yKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyYXZlcnNhbFNvdXJjZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudHJhdmVyc2FsU291cmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTY3JpcHQgdHJhbnNsYXRlKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB7Ci0gICAgICAgIHJldHVybiB0eXBlVHJhbnNsYXRvci5hcHBseSh0cmF2ZXJzYWxTb3VyY2UsIGJ5dGVjb2RlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldExhbmd1YWdlKCkgewotICAgICAgICByZXR1cm4gImdyZW1saW4tZ28iOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdGYWN0b3J5LnRyYW5zbGF0b3JTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMgc3RhbmRhcmQgdHlwZSB0cmFuc2xhdGlvbiBmb3IgdGhlIFRpbmtlclBvcCB0eXBlcyB0byBHby4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIERlZmF1bHRUeXBlVHJhbnNsYXRvciBleHRlbmRzIEFic3RyYWN0VHlwZVRyYW5zbGF0b3IgewotCi0gICAgICAgIHB1YmxpYyBEZWZhdWx0VHlwZVRyYW5zbGF0b3IoZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICAgICAgc3VwZXIod2l0aFBhcmFtZXRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0TnVsbFN5bnRheCgpIHsKLSAgICAgICAgICAgIHJldHVybiAibmlsIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBTdHJpbmcgbykgewotICAgICAgICAgICAgcmV0dXJuICJcIiIgKyBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVKYXZhKG8pICsgIlwiIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBCb29sZWFuIG8pIHsKLSAgICAgICAgICAgIHJldHVybiBvLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgRGF0ZSBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gInRpbWUuVW5peE1pbGxpKCIgKyBvLmdldFRpbWUoKSArICIpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBPZmZzZXREYXRlVGltZSBvKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgem9uZUluZm8gPSBvLmdldE9mZnNldCgpLmdldElkKCkuZXF1YWxzKCJaIikgPyAiVVRDKzAwOjAwIiA6ICJVVEMiICsgby5nZXRPZmZzZXQoKS5nZXRJZCgpOwotICAgICAgICAgICAgcmV0dXJuICJ0aW1lLkRhdGUoIiArIG8uZ2V0WWVhcigpICsKLSAgICAgICAgICAgICAgICAgICAgIiwgIiArIG8uZ2V0TW9udGhWYWx1ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgIiwgIiArIG8uZ2V0RGF5T2ZNb250aCgpICsKLSAgICAgICAgICAgICAgICAgICAgIiwgIiArIG8uZ2V0SG91cigpICsKLSAgICAgICAgICAgICAgICAgICAgIiwgIiArIG8uZ2V0TWludXRlKCkgKwotICAgICAgICAgICAgICAgICAgICAiLCAiICsgby5nZXRTZWNvbmQoKSArCi0gICAgICAgICAgICAgICAgICAgICIsICIgKyBvLmdldE5hbm8oKSArCi0gICAgICAgICAgICAgICAgICAgICIsIHRpbWUuRml4ZWRab25lKFwiIisgem9uZUluZm8gKyAiXCIsICIgKyBvLmdldE9mZnNldCgpLmdldFRvdGFsU2Vjb25kcygpICsiKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVGltZXN0YW1wIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAidGltZS5Vbml4TWlsbGkoIiArIG8uZ2V0VGltZSgpICsgIikiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFVVSUQgbykgewotICAgICAgICAgICAgcmV0dXJuICJ1dWlkLk11c3RQYXJzZShcIiIgKyBvLnRvU3RyaW5nKCkgKyAiXCIpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBMYW1iZGEgbykgewotICAgICAgICAgICAgcmV0dXJuICImZ3JlbWxpbmdvLkxhbWJkYXtTY3JpcHQ6XCIiICsgby5nZXRMYW1iZGFTY3JpcHQoKS50cmltKCkgKyAiXCIsIExhbmd1YWdlOlwiXCJ9IjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBOdW1iZXIgbykgewotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBGbG9hdCB8fCBvIGluc3RhbmNlb2YgRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc05hTihvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJtYXRoLk5hTigpIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChOdW1iZXJIZWxwZXIuaXNQb3NpdGl2ZUluZmluaXR5KG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1hdGguSW5mKDEpIjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChOdW1iZXJIZWxwZXIuaXNOZWdhdGl2ZUluZmluaXR5KG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1hdGguSW5mKC0xMSkiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBTYWNrRnVuY3Rpb25zLkJhcnJpZXIgbykgewotICAgICAgICAgICAgcmV0dXJuIEdPX1BBQ0tBR0VfTkFNRSArICJCYXJyaWVyLiIgKyByZXNvbHZlU3ltYm9sKG8udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkgbykgewotICAgICAgICAgICAgcmV0dXJuIEdPX1BBQ0tBR0VfTkFNRSArICJDYXJkaW5hbGl0eS4iICsgcmVzb2x2ZVN5bWJvbChvLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFBpY2sgbykgewotICAgICAgICAgICAgcmV0dXJuIEdPX1BBQ0tBR0VfTkFNRSArICJQaWNrLiIgKyByZXNvbHZlU3ltYm9sKG8udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlQ2FyZGluYWxpdHlWYWx1ZShmaW5hbCBCeXRlY29kZSBvKSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0ID0gby5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgY2FyZCA9IGluc3QuZ2V0QXJndW1lbnRzKClbMF0udG9TdHJpbmcoKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoR09fUEFDS0FHRV9OQU1FICsgIkNhcmRpbmFsaXR5VmFsdWUuIiArIGNhcmQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBjYXJkLnN1YnN0cmluZygxKSArICIoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaW5zdC5nZXRBcmd1bWVudHMoKVsxXSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIpIik7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBTZXQ8Pz4gbykgewotICAgICAgICAgICAgZmluYWwgSXRlcmF0b3I8Pz4gaXRlcmF0b3IgPSBvLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKEdPX1BBQ0tBR0VfTkFNRSArICJOZXdTaW1wbGVTZXQoIik7Ci0gICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgTGlzdDw/PiBvKSB7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/PiBpdGVyYXRvciA9IG8uaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIltdaW50ZXJmYWNle317Iik7Ci0gICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgifSIpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgTWFwPD8sID8+IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsiKTsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPD8gZXh0ZW5kcyBNYXAuRW50cnk8PywgPz4+IGl0dHkgPSBvLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hcC5FbnRyeTw/LD8+IGVudHJ5ID0gaXR0eS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldEtleSgpKS5hcHBlbmQoIjogIik7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpdHR5Lmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCJ9Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIENsYXNzPD8+IG8pIHsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKG8uZ2V0Q2Fub25pY2FsTmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgRW51bTw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZChHT19QQUNLQUdFX05BTUUgKyBvLmdldERlY2xhcmluZ0NsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIi4iICsgcmVzb2x2ZVN5bWJvbChvLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVmVydGV4IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoR09fUEFDS0FHRV9OQU1FICsgIlZlcnRleHtFbGVtZW50eyIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8uaWQoKSkuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpLmFwcGVuZCgifX0iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgRWRnZSBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKEdPX1BBQ0tBR0VfTkFNRSArICJFZGdle0VsZW1lbnR7Iik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKS5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5sYWJlbCgpKS5hcHBlbmQoIn0sICIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ub3V0VmVydGV4KCkpLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1NjcmlwdChvLmluVmVydGV4KCkpLmFwcGVuZCgifSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBWZXJ0ZXhQcm9wZXJ0eTw/PiBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKEdPX1BBQ0tBR0VfTkFNRSArICJWZXJ0ZXhQcm9wZXJ0eXsiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpLmFwcGVuZCgifSwgIik7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvU2NyaXB0KG8udmFsdWUoKSkuYXBwZW5kKCJ9Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHk8Pz4gbykgewotICAgICAgICAgICAgaWYgKG8uZ2V0Q29uZmlndXJhdGlvbigpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKEdPX1BBQ0tBR0VfTkFNRSArIG8uZ2V0U3RyYXRlZ3lDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIoKSIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKEdPX1BBQ0tBR0VfTkFNRSArIG8uZ2V0U3RyYXRlZ3lDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIoIik7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChHT19QQUNLQUdFX05BTUUgKyBvLmdldFN0cmF0ZWd5Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiQ29uZmlneyIpOwotICAgICAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPFN0cmluZz4ga2V5cyA9IEl0ZXJhdG9yVXRpbHMuc3RyZWFtKG8uZ2V0Q29uZmlndXJhdGlvbigpLmdldEtleXMoKSkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoa2V5cy5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGsgPSBrZXlzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChTeW1ib2xIZWxwZXIudG9Hb2xhbmcoaykpOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCI6ICIpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChvLmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eShrKSBpbnN0YW5jZW9mIExpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8T2JqZWN0PiBsaXN0ID0oTGlzdDxPYmplY3Q+KSBvLmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eShrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGl0ZXJhdG9yID0gbGlzdC5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiW11zdHJpbmd7Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaXRlcmF0b3IubmV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgifSIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG8uZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KGspID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5pbCIpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8uZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KGspKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgifSkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgQnl0ZWNvZGUgbykgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNvdXJjZSA9IHRyYXZlcnNhbFNvdXJjZS5lcXVhbHMoIl9fIikgPyBHT19QQUNLQUdFX05BTUUgKyAiVF9fIiA6IHRyYXZlcnNhbFNvdXJjZTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoc291cmNlKTsKLSAgICAgICAgICAgIGZvciAoZmluYWwgQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiBvLmdldEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1ldGhvZE5hbWUgPSBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpOwotICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdFtdIGFyZ3VtZW50cyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMudHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb21tYW5kID0gcmVzb2x2ZVN5bWJvbChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChtZXRob2ROYW1lKSkuYXBwZW5kKCIoKS4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChjb21tYW5kKSkuYXBwZW5kKCIoKSIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChtZXRob2ROYW1lKSkuYXBwZW5kKCIoIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChhcmd1bWVudHNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gYXJndW1lbnRzLmxlbmd0aCAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFA8Pz4gcCkgewotICAgICAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBUZXh0UCkgewotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoR09fUEFDS0FHRV9OQU1FICsgIlRleHRQLiIpLmFwcGVuZChyZXNvbHZlU3ltYm9sKHAuZ2V0UHJlZGljYXRlTmFtZSgpKSkuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KHAuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBDb25uZWN0aXZlUCkgewotICAgICAgICAgICAgICAgIC8vIENvbm5lY3RpdmVQIGdldHMgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGJlY2F1c2UgaXQncyByZWR1Y2VkIHRvIGFuZChQLCBQLCBQKSBhbmQgd2Ugd2FudCBpdAotICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlZCB0aGUgd2F5IGl0IHdhcyB3cml0dGVuIHdoaWNoIHdhcyBQLmFuZChQKS5hbmQoUCkKLSAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFA8Pz4+IGxpc3QgPSAoKENvbm5lY3RpdmVQKSBwKS5nZXRQcmVkaWNhdGVzKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbm5lY3RvciA9IHAgaW5zdGFuY2VvZiBPclAgPyAiT3IiIDogIkFuZCI7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VTY3JpcHQobGlzdC5nZXQoaSkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgZmlyc3QvbGFzdCBQIHRoZXJlIGlzIG5vIHBhcmVudCB0byBjbG9zZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGkgPCBsaXN0LnNpemUoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgY29ubmVjdG9yIGZvciBhbGwgYnV0IGxhc3QgUC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBsaXN0LnNpemUoKSAtIDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQoY29ubmVjdG9yKS5hcHBlbmQoIigiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChHT19QQUNLQUdFX05BTUUgKyAiUC4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChwLmdldFByZWRpY2F0ZU5hbWUoKSkpLmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChwLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgcmVzb2x2ZVN5bWJvbChmaW5hbCBTdHJpbmcgbWV0aG9kTmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIFN5bWJvbEhlbHBlci50b0dvbGFuZyhtZXRob2ROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBTeW1ib2xIZWxwZXIgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gVE9fR09fTUFQID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IEZST01fR09fTUFQID0gbmV3IEhhc2hNYXA8PigpOwotCi0gICAgICAgIHN0YXRpYyB7Ci0gICAgICAgICAgICBUT19HT19NQVAucHV0KCJPVVQiLCAiT3V0Iik7Ci0gICAgICAgICAgICBUT19HT19NQVAucHV0KCJJTiIsICJJbiIpOwotICAgICAgICAgICAgVE9fR09fTUFQLnB1dCgiQk9USCIsICJCb3RoIik7Ci0gICAgICAgICAgICBUT19HT19NQVAuZm9yRWFjaCgoaywgdikgLT4gRlJPTV9HT19NQVAucHV0KHYsIGspKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3ltYm9sSGVscGVyKCkgewotICAgICAgICAgICAgLy8gc3RhdGljIG1ldGhvZHMgb25seSwgZG8gbm90IGluc3RhbnRpYXRlCi0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0dvbGFuZyhmaW5hbCBTdHJpbmcgc3ltYm9sKSB7Ci0gICAgICAgICAgICByZXR1cm4gVE9fR09fTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIFN0cmluZ1V0aWxzLmNhcGl0YWxpemUoc3ltYm9sKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0phdmEoZmluYWwgU3RyaW5nIHN5bWJvbCkgewotICAgICAgICAgICAgcmV0dXJuIEZST01fR09fTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIFN0cmluZ1V0aWxzLnVuY2FwaXRhbGl6ZShzeW1ib2wpKTsKLSAgICAgICAgfQotCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3IuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMDMwNmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb25Db252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuU3RyaW5nRXNjYXBlVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuQ29yZUltcG9ydHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk5vdFA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGljazsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNhY2tGdW5jdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY3JpcHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5UcmF2ZXJzYWxTdHJhdGVneVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5Db25uZWN0aXZlUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLlN0cmluZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5EYXRldGltZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTnVtYmVySGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLQotLyoqCi0gKiBDb252ZXJ0cyBieXRlY29kZSB0byBhIEdyb292eSBzdHJpbmcgb2YgR3JlbWxpbi4KLSAqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqIEBhdXRob3IgU3RhcmsgQXJ5YSAoc2FuZHN6aG91LnpqQGFsaWJhYmEtaW5jLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEdyb292eVRyYW5zbGF0b3IgaW1wbGVtZW50cyBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlOwotICAgIHByaXZhdGUgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3I7Ci0KLSAgICBwcml2YXRlIEdyb292eVRyYW5zbGF0b3IoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3IpIHsKLSAgICAgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2UgPSB0cmF2ZXJzYWxTb3VyY2U7Ci0gICAgICAgIHRoaXMudHlwZVRyYW5zbGF0b3IgPSB0eXBlVHJhbnNsYXRvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggYSB7QGNvZGUgZmFsc2V9IGFyZ3VtZW50IHRvIHtAY29kZSB3aXRoUGFyYW1ldGVyc30gdXNpbmcKLSAgICAgKiB7QGxpbmsgI29mKFN0cmluZywgYm9vbGVhbil9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgR3Jvb3Z5VHJhbnNsYXRvciBvZihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlKSB7Ci0gICAgICAgIHJldHVybiBvZih0cmF2ZXJzYWxTb3VyY2UsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggdGhlIHtAbGluayBEZWZhdWx0VHlwZVRyYW5zbGF0b3J9IHBhc3NpbmcgdGhlIHtAY29kZSB3aXRoUGFyYW1ldGVyc30gb3B0aW9uIHRvIGl0Ci0gICAgICogd2hpY2ggd2lsbCBoYW5kbGUgdHlwZSB0cmFuc2xhdGlvbiBpbiBhIGZhc2hpb24gdGhhdCBzaG91bGQgdHlwaWNhbGx5IGluY3JlYXNlIGNhY2hlIGhpdHMgYW5kIHJlZHVjZQotICAgICAqIGNvbXBpbGF0aW9uIHRpbWVzIGlmIGVuYWJsZWQgYXQgdGhlIHNhY3JpZmljZSB0byByZXdyaXRpbmcgb2YgdGhlIHNjcmlwdCB0aGF0IGNvdWxkIHJlZHVjZSByZWFkYWJpbGl0eS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEdyb292eVRyYW5zbGF0b3Igb2YoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICByZXR1cm4gb2YodHJhdmVyc2FsU291cmNlLCBuZXcgRGVmYXVsdFR5cGVUcmFuc2xhdG9yKHdpdGhQYXJhbWV0ZXJzKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyB0aGUgdHJhbnNsYXRvciB3aXRoIGEgY3VzdG9tIHtAbGluayBUeXBlVHJhbnNsYXRvcn0gaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBHcm9vdnlUcmFuc2xhdG9yIG9mKGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIFR5cGVUcmFuc2xhdG9yIHR5cGVUcmFuc2xhdG9yKSB7Ci0gICAgICAgIHJldHVybiBuZXcgR3Jvb3Z5VHJhbnNsYXRvcih0cmF2ZXJzYWxTb3VyY2UsIHR5cGVUcmFuc2xhdG9yKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2NyaXB0IHRyYW5zbGF0ZShmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICByZXR1cm4gdHlwZVRyYW5zbGF0b3IuYXBwbHkodHJhdmVyc2FsU291cmNlLCBieXRlY29kZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXRMYW5ndWFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJncmVtbGluLWdyb292eSI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3RvcnkudHJhbnNsYXRvclN0cmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRyYXZlcnNhbFNvdXJjZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudHJhdmVyc2FsU291cmNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIHN0YW5kYXJkIHR5cGUgdHJhbnNsYXRpb24gZm9yIHRoZSBUaW5rZXJQb3AgdHlwZXMgdG8gR3Jvb3Z5LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRGVmYXVsdFR5cGVUcmFuc2xhdG9yIGV4dGVuZHMgQWJzdHJhY3RUeXBlVHJhbnNsYXRvciB7Ci0KLSAgICAgICAgcHVibGljIERlZmF1bHRUeXBlVHJhbnNsYXRvcihmaW5hbCBib29sZWFuIHdpdGhQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBzdXBlcih3aXRoUGFyYW1ldGVycyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXROdWxsU3ludGF4KCkgewotICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBTdHJpbmcgbykgewotICAgICAgICAgICAgcmV0dXJuIChvLmNvbnRhaW5zKCJcIiIpID8gIlwiXCJcIiIgKyBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVKYXZhKG8pICsgIlwiXCJcIiIgOiAiXCIiICsgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSmF2YShvKSArICJcIiIpCi0gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCIkIiwgIlxcJCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIEJvb2xlYW4gbykgewotICAgICAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBEYXRlIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAibmV3IERhdGUoIiArIG8uZ2V0VGltZSgpICsgIkwpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBPZmZzZXREYXRlVGltZSBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gIk9mZnNldERhdGVUaW1lLnBhcnNlKCciICsgby50b1N0cmluZygpICsgIicpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBUaW1lc3RhbXAgbykgewotICAgICAgICAgICAgcmV0dXJuICJuZXcgVGltZXN0YW1wKCIgKyBvLmdldFRpbWUoKSArICJMKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVVVJRCBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gIlVVSUQuZnJvbVN0cmluZygnIiArIG8udG9TdHJpbmcoKSArICInKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgTGFtYmRhIG8pIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsYW1iZGFTdHJpbmcgPSBvLmdldExhbWJkYVNjcmlwdCgpLnRyaW0oKTsKLSAgICAgICAgICAgIHJldHVybiBsYW1iZGFTdHJpbmcuc3RhcnRzV2l0aCgieyIpID8gbGFtYmRhU3RyaW5nIDogInsiICsgbGFtYmRhU3RyaW5nICsgIn0iOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFNhY2tGdW5jdGlvbnMuQmFycmllciBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gIlNhY2tGdW5jdGlvbnMuQmFycmllci4iICsgby50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5IG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuIiArIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBQaWNrIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiUGljay4iICsgby50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE51bWJlciBvKSB7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIERvdWJsZSB8fCBvIGluc3RhbmNlb2YgRmxvYXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzTmFOKG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG8gaW5zdGFuY2VvZiBEb3VibGUgPyAiRG91YmxlIiA6ICJGbG9hdCIpICsgIi5OYU4iOwotICAgICAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNQb3NpdGl2ZUluZmluaXR5KG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG8gaW5zdGFuY2VvZiBEb3VibGUgPyAiRG91YmxlIiA6ICJGbG9hdCIpICsgIi5QT1NJVElWRV9JTkZJTklUWSI7Ci0gICAgICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc05lZ2F0aXZlSW5maW5pdHkobykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobyBpbnN0YW5jZW9mIERvdWJsZSA/ICJEb3VibGUiIDogIkZsb2F0IikgKyAiLk5FR0FUSVZFX0lORklOSVRZIjsKLQotICAgICAgICAgICAgICAgIHJldHVybiBvICsgKG8gaW5zdGFuY2VvZiBEb3VibGUgPyAiZCIgOiAiZiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBMb25nKQotICAgICAgICAgICAgICAgIHJldHVybiBvICsgIkwiOwotICAgICAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBJbnRlZ2VyKQotICAgICAgICAgICAgICAgIHJldHVybiAiKGludCkgIiArIG87Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEJ5dGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICIoYnl0ZSkgIiArIG87Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFNob3J0KQotICAgICAgICAgICAgICAgIHJldHVybiAiKHNob3J0KSAiICsgbzsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgQmlnSW50ZWdlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gIm5ldyBCaWdJbnRlZ2VyKCciICsgby50b1N0cmluZygpICsgIicpIjsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgQmlnRGVjaW1hbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIm5ldyBCaWdEZWNpbWFsKCciICsgby50b1N0cmluZygpICsgIicpIjsKLQotICAgICAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VDYXJkaW5hbGl0eVZhbHVlKGZpbmFsIEJ5dGVjb2RlIG8pIHsKLSAgICAgICAgICAgIGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3QgPSBvLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgwKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIlZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LiIgKyBpbnN0LmdldEFyZ3VtZW50cygpWzBdICsgIigiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0LmdldEFyZ3VtZW50cygpWzFdKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFNldDw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdChuZXcgQXJyYXlMaXN0PD4obykpLmFwcGVuZCgiIGFzIFNldCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBMaXN0PD8+IG8pIHsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPD8+IGl0ZXJhdG9yID0gKChMaXN0PD8+KSBvKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiWyIpOwotCi0gICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG5leHRJdGVtID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChuZXh0SXRlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpLmFwcGVuZCgiICIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiXSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBNYXA8PywgPz4gbykgewotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiWyIpOwotICAgICAgICAgICAgZmluYWwgSXRlcmF0b3I8PyBleHRlbmRzIE1hcC5FbnRyeTw/LCA/Pj4gaXR0eSA9ICgoTWFwPD8sID8+KSBvKS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBNYXAuRW50cnk8Pyw/PiBlbnRyeSA9IGl0dHkubmV4dCgpOwotICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBrID0gZW50cnkuZ2V0S2V5KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB3cmFwID0gIShrIGluc3RhbmNlb2YgU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBpZiAod3JhcCkgc2NyaXB0LmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChlbnRyeS5nZXRLZXkoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdyYXApIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCI6Iik7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChpdHR5Lmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIl0iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBHZXRzIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBjbGFzcyB3aXRoIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSBjaGVja2luZyB0byBzZWUgaWYgdGhlCi0gICAgICAgICAqIHtAY29kZSBDbGFzc30gaXMgaW4ge0BsaW5rIENvcmVJbXBvcnRzfSBvciBub3QuIElmIGl0IGlzIHByZXNlbnQgdGhhdCBtZWFucyBpdCBjYW4gYmUgcmVmZXJlbmNlZCB1c2luZyB0aGUKLSAgICAgICAgICogc2ltcGxlIG5hbWUgb3RoZXJ3aXNlIGl0IHVzZXMgdGhlIGNhbm9uaWNhbCBuYW1lLgotICAgICAgICAgKiA8cC8+Ci0gICAgICAgICAqIFRob3NlIGJ1aWxkaW5nIGN1c3RvbSB7QGxpbmsgU2NyaXB0VHJhbnNsYXRvcn0gaW5zdGFuY2VzIG1pZ2h0IG92ZXJyaWRlIHRoaXMgaWYgdGhleSBoYXZlIG90aGVyIGNsYXNzZXMKLSAgICAgICAgICogdGhhdCBhcmUgbm90IGluIHtAbGluayBDb3JlSW1wb3J0c30gYnkgZGVmYXVsdC4KLSAgICAgICAgICovCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgQ2xhc3M8Pz4gbykgewotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoQ29yZUltcG9ydHMuZ2V0Q2xhc3NJbXBvcnRzKCkuY29udGFpbnMobykgPyBvLmdldFNpbXBsZU5hbWUoKSA6IG8uZ2V0Q2Fub25pY2FsTmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgRW51bTw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZChvLmdldERlY2xhcmluZ0NsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIi4iICsgby50b1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVmVydGV4IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBSZWZlcmVuY2VWZXJ0ZXgoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgRWRnZSBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJuZXcgUmVmZXJlbmNlRWRnZSgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ubGFiZWwoKSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsbmV3IFJlZmVyZW5jZVZlcnRleCgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmluVmVydGV4KCkuaWQoKSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pblZlcnRleCgpLmxhYmVsKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSxuZXcgUmVmZXJlbmNlVmVydGV4KCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ub3V0VmVydGV4KCkuaWQoKSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5vdXRWZXJ0ZXgoKS5sYWJlbCgpKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCIpKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBWZXJ0ZXhQcm9wZXJ0eTw/PiBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJuZXcgUmVmZXJlbmNlVmVydGV4UHJvcGVydHkoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8udmFsdWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5PD8+IG8pIHsKLSAgICAgICAgICAgIGlmIChvLmdldENvbmZpZ3VyYXRpb24oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdChvLmdldFN0cmF0ZWd5Q2xhc3MoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyAiKTsKLSAgICAgICAgICAgICAgICBwcm9kdWNlU2NyaXB0KG8uZ2V0U3RyYXRlZ3lDbGFzcygpKTsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIoIik7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxNYXAuRW50cnk8T2JqZWN0LE9iamVjdD4+IGl0dHkgPSBDb25maWd1cmF0aW9uQ29udmVydGVyLmdldE1hcCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG8uZ2V0Q29uZmlndXJhdGlvbigpKS5lbnRyeVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGl0dHkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE1hcC5FbnRyeTxPYmplY3QsT2JqZWN0PiBlbnRyeSA9IGl0dHkubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKGVudHJ5LmdldEtleSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCI6ICIpOwotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdHR5Lmhhc05leHQoKSkgc2NyaXB0LmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCh0cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICAgICAgZm9yIChmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA6IGJ5dGVjb2RlLmdldEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1ldGhvZE5hbWUgPSBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpOwotICAgICAgICAgICAgICAgIGlmICgwID09IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKG1ldGhvZE5hbWUpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKG1ldGhvZE5hbWUpLmFwcGVuZCgiKCIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBpbmplY3QobnVsbCwgbnVsbCkgb3IgZWxzZSBncm9vdnkgbWlnaHQgZ3Vlc3MgdGhlIEpESyBjb2xsZWN0aW9uIGV4dGVuc2lvbiBmb3JtCi0gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2ROYW1lLmVxdWFscyhHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluamVjdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPE9iamVjdD4gaXR0eSA9IEFycmF5cy5zdHJlYW0oaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgbyA9IGl0dHkubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IG8pIHNjcmlwdC5hcHBlbmQoIihPYmplY3QpIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdHR5Lmhhc05leHQoKSkgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUuZXF1YWxzKEdyYXBoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMudHgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29tbWFuZCA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIpLiIpLmFwcGVuZChjb21tYW5kKS5hcHBlbmQoIigiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPE9iamVjdD4gaXR0eSA9IEFycmF5cy5zdHJlYW0oaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaXR0eS5uZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdHR5Lmhhc05leHQoKSkgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBQPD8+IHApIHsKLSAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgVGV4dFApIHsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJUZXh0UC4iKS5hcHBlbmQocC5nZXRQcmVkaWNhdGVOYW1lKCkpLmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChwLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgQ29ubmVjdGl2ZVApIHsKLSAgICAgICAgICAgICAgICAvLyBDb25uZWN0aXZlUCBnZXRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIGl0J3MgcmVkdWNlZCB0byBhbmQoUCwgUCwgUCkgYW5kIHdlIHdhbnQgaXQKLSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZWQgdGhlIHdheSBpdCB3YXMgd3JpdHRlbiB3aGljaCB3YXMgUC5hbmQoUCkuYW5kKFApCi0gICAgICAgICAgICAgICAgZmluYWwgTGlzdDxQPD8+PiBsaXN0ID0gKChDb25uZWN0aXZlUCkgcCkuZ2V0UHJlZGljYXRlcygpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb25uZWN0b3IgPSBwLmdldFByZWRpY2F0ZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZHVjZVNjcmlwdChsaXN0LmdldChpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBmaXJzdC9sYXN0IFAgdGhlcmUgaXMgbm8gcGFyZW50IHRvIGNsb3NlCi0gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBpIDwgbGlzdC5zaXplKCkgLSAxKSBzY3JpcHQuYXBwZW5kKCIpIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRlaCBjb25uZWN0b3IgZm9yIGFsbCBidXQgbGFzdCBQCi0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGlzdC5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKGNvbm5lY3RvcikuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBOb3RQKSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiUC5ub3QoIik7Ci0gICAgICAgICAgICAgICAgcHJvZHVjZVNjcmlwdChwLm5lZ2F0ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiUC4iKS5hcHBlbmQocC5nZXRQcmVkaWNhdGVOYW1lKCkpLmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChwLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRNYXBUb0FyZ3VtZW50cyhmaW5hbCBNYXA8T2JqZWN0LE9iamVjdD4gbWFwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFwLmVudHJ5U2V0KCkuc3RyZWFtKCkubWFwKGVudHJ5IC0+Ci0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiJXM6ICVzIiwgZW50cnkuZ2V0S2V5KCkudG9TdHJpbmcoKSwgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldFZhbHVlKCkpKSkuCi0gICAgICAgICAgICAgICAgICAgIGNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCIsICIpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuIGV4dGVuc2lvbiBvZiB0aGUge0BsaW5rIERlZmF1bHRUeXBlVHJhbnNsYXRvcn0gdGhhdCBnZW5lcmF0ZXMgR3JlbWxpbiB0aGF0IGlzIGNvbXBsaWFudCB3aXRoCi0gICAgICoge0Bjb2RlIGdyZW1saW4tbGFuZ3VhZ2V9IHNjcmlwdHMuIFNwZWNpZmljYWxseSwgaXQgd2lsbCBjb252ZXJ0IHtAY29kZSBEYXRlfSBhbmQge0Bjb2RlIFRpbWVzdGFtcH0gdG8gdXNlIHRoZQotICAgICAqIHtAY29kZSBkYXRldGltZSgpfSBmdW5jdGlvbi4gVGltZSB6b25lIG9mZnNldHMgYXJlIHJlc29sdmVkIHRvIHdoZXJlIHtAY29kZSAyMDE4LTAzLTIyVDAwOjM1OjQ0Ljc0MSsxNjAwfQotICAgICAqIHdvdWxkIGJlIGNvbnZlcnRlZCB0byB7QGNvZGUgZGF0ZXRpbWUoJzIwMTgtMDMtMjFUMDg6MzU6NDQuNzQxWicpfS4gTW9yZSBjb21tb25seSB7QGNvZGUgMjAxOC0wMy0yMn0gd291bGQgc2ltcGx5Ci0gICAgICogZ2VuZXJhdGUge0Bjb2RlIGRhdGV0aW1lKCcyMDE4LTAzLTIyVDAwOjAwOjAwWicpfS4KLSAgICAgKiA8cC8+Ci0gICAgICogSW4gYWRkaXRpb24sIGl0IHByZWZlcnMgdXNlIG9mIHtAY29kZSBWZXJ0ZXh9IHdoZW4gcHJvZHVjaW5nIGEge0BsaW5rIFJlZmVyZW5jZVZlcnRleH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBMYW5ndWFnZVR5cGVUcmFuc2xhdG9yIGV4dGVuZHMgRGVmYXVsdFR5cGVUcmFuc2xhdG9yIHsKLSAgICAgICAgcHVibGljIExhbmd1YWdlVHlwZVRyYW5zbGF0b3IoZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICAgICAgc3VwZXIod2l0aFBhcmFtZXRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIERhdGUgbykgewotICAgICAgICAgICAgcmV0dXJuIGdldERhdGV0aW1lU3ludGF4KG8udG9JbnN0YW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE9mZnNldERhdGVUaW1lIG8pIHsKLSAgICAgICAgICAgIHJldHVybiBnZXREYXRldGltZVN5bnRheChvLnRvSW5zdGFudCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBUaW1lc3RhbXAgbykgewotICAgICAgICAgICAgcmV0dXJuIGdldERhdGV0aW1lU3ludGF4KG8udG9JbnN0YW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBWZXJ0ZXggbykgewotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgibmV3IFZlcnRleCgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ubGFiZWwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE51bWJlciBvKSB7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIERvdWJsZSB8fCBvIGluc3RhbmNlb2YgRmxvYXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzTmFOKG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiI7Ci0gICAgICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc1Bvc2l0aXZlSW5maW5pdHkobykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiSW5maW5pdHkiOwotICAgICAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNOZWdhdGl2ZUluZmluaXR5KG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIi1JbmZpbml0eSI7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbyArIChvIGluc3RhbmNlb2YgRG91YmxlID8gIkQiIDogIkYiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgTG9uZykKLSAgICAgICAgICAgICAgICByZXR1cm4gbyArICJMIjsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgSW50ZWdlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gbyArICJJIjsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgQnl0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbyArICJCIjsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgU2hvcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG8gKyAiUyI7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEJpZ0ludGVnZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG8gKyAiTiI7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEJpZ0RlY2ltYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG8gKyAiRCI7Ci0KLSAgICAgICAgICAgIHJldHVybiBvLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0RGF0ZXRpbWVTeW50YXgoZmluYWwgSW5zdGFudCBpKSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgiZGF0ZXRpbWUoJyVzJykiLCBEYXRldGltZUhlbHBlci5mb3JtYXQoaSkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0phdmFzY3JpcHRUcmFuc2xhdG9yLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvSmF2YXNjcmlwdFRyYW5zbGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI4ZjA3Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvSmF2YXNjcmlwdFRyYW5zbGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxNyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb25Db252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLnRleHQuU3RyaW5nRXNjYXBlVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QaWNrOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2Fja0Z1bmN0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjcmlwdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LlRyYXZlcnNhbFN0cmF0ZWd5UHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkNvbm5lY3RpdmVQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5PclA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5OdW1iZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLQotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5CaW5hcnlPcGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlVuYXJ5T3BlcmF0b3I7Ci0KLS8qKgotICogQ29udmVydHMgYnl0ZWNvZGUgdG8gYSBKYXZhc2NyaXB0IHN0cmluZyBvZiBHcmVtbGluLgotICogPHAvPgotICogQXNzdW1lcyB1c2Ugb2YgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvdXVpZCBsaWJyYXJ5IGZvciBVVUlEIGhhbmRsaW5nLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEphdmFzY3JpcHRUcmFuc2xhdG9yIGltcGxlbWVudHMgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZTsKLSAgICBwcml2YXRlIGZpbmFsIFR5cGVUcmFuc2xhdG9yIHR5cGVUcmFuc2xhdG9yOwotCi0gICAgcHJpdmF0ZSBKYXZhc2NyaXB0VHJhbnNsYXRvcihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBUeXBlVHJhbnNsYXRvciB0eXBlVHJhbnNsYXRvcikgewotICAgICAgICB0aGlzLnRyYXZlcnNhbFNvdXJjZSA9IHRyYXZlcnNhbFNvdXJjZTsKLSAgICAgICAgdGhpcy50eXBlVHJhbnNsYXRvciA9IHR5cGVUcmFuc2xhdG9yOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3Igd2l0aCBhIHtAY29kZSBmYWxzZX0gYXJndW1lbnQgdG8ge0Bjb2RlIHdpdGhQYXJhbWV0ZXJzfSB1c2luZwotICAgICAqIHtAbGluayAjb2YoU3RyaW5nLCBib29sZWFuKX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBKYXZhc2NyaXB0VHJhbnNsYXRvciBvZihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlKSB7Ci0gICAgICAgIHJldHVybiBvZih0cmF2ZXJzYWxTb3VyY2UsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggdGhlIHtAbGluayBEZWZhdWx0VHlwZVRyYW5zbGF0b3J9IHBhc3NpbmcgdGhlIHtAY29kZSB3aXRoUGFyYW1ldGVyc30gb3B0aW9uIHRvIGl0Ci0gICAgICogd2hpY2ggd2lsbCBoYW5kbGUgdHlwZSB0cmFuc2xhdGlvbiBpbiBhIGZhc2hpb24gdGhhdCBzaG91bGQgdHlwaWNhbGx5IGluY3JlYXNlIGNhY2hlIGhpdHMgYW5kIHJlZHVjZQotICAgICAqIGNvbXBpbGF0aW9uIHRpbWVzIGlmIGVuYWJsZWQgYXQgdGhlIHNhY3JpZmljZSB0byByZXdyaXRpbmcgb2YgdGhlIHNjcmlwdCB0aGF0IGNvdWxkIHJlZHVjZSByZWFkYWJpbGl0eS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIEphdmFzY3JpcHRUcmFuc2xhdG9yIG9mKGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIGJvb2xlYW4gd2l0aFBhcmFtZXRlcnMpIHsKLSAgICAgICAgcmV0dXJuIG9mKHRyYXZlcnNhbFNvdXJjZSwgbmV3IERlZmF1bHRUeXBlVHJhbnNsYXRvcih3aXRoUGFyYW1ldGVycykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3Igd2l0aCBhIGN1c3RvbSB7QGxpbmsgVHlwZVRyYW5zbGF0b3J9IGluc3RhbmNlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgSmF2YXNjcmlwdFRyYW5zbGF0b3Igb2YoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3IpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBKYXZhc2NyaXB0VHJhbnNsYXRvcih0cmF2ZXJzYWxTb3VyY2UsIHR5cGVUcmFuc2xhdG9yKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2NyaXB0IHRyYW5zbGF0ZShmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICByZXR1cm4gdHlwZVRyYW5zbGF0b3IuYXBwbHkodHJhdmVyc2FsU291cmNlLCBieXRlY29kZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXRMYW5ndWFnZSgpIHsKLSAgICAgICAgcmV0dXJuICJncmVtbGluLWphdmFzY3JpcHQiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdGYWN0b3J5LnRyYW5zbGF0b3JTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUcmF2ZXJzYWxTb3VyY2UoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnRyYXZlcnNhbFNvdXJjZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyBzdGFuZGFyZCB0eXBlIHRyYW5zbGF0aW9uIGZvciB0aGUgVGlua2VyUG9wIHR5cGVzIHRvIEphdmFzY3JpcHQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBEZWZhdWx0VHlwZVRyYW5zbGF0b3IgZXh0ZW5kcyBBYnN0cmFjdFR5cGVUcmFuc2xhdG9yIHsKLQotICAgICAgICBwdWJsaWMgRGVmYXVsdFR5cGVUcmFuc2xhdG9yKGZpbmFsIGJvb2xlYW4gd2l0aFBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIHN1cGVyKHdpdGhQYXJhbWV0ZXJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE51bGxTeW50YXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFN0cmluZyBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gKG8uY29udGFpbnMoIlwiIikgPyAiXCJcIlwiIiArIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUphdmEobykgKyAiXCJcIlwiIiA6ICJcIiIgKyBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVKYXZhKG8pICsgIlwiIikKLSAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoIiQiLCAiXFwkIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgQm9vbGVhbiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gby50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIERhdGUgbykgewotICAgICAgICAgICAgcmV0dXJuICJuZXcgRGF0ZSgiICsgby5nZXRUaW1lKCkgKyAiKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgT2Zmc2V0RGF0ZVRpbWUgbykgewotICAgICAgICAgICAgcmV0dXJuICJuZXcgRGF0ZSgnIiArIG8udG9TdHJpbmcoKSArICInKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVGltZXN0YW1wIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAibmV3IERhdGUoIiArIG8uZ2V0VGltZSgpICsgIikiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFVVSUQgbykgewotICAgICAgICAgICAgcmV0dXJuICJ1dWlkLnBhcnNlKCciICsgby50b1N0cmluZygpICsgIicpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBMYW1iZGEgbykgewotICAgICAgICAgICAgcmV0dXJuICIoKSA9PiBcIiIgKyBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVFY21hU2NyaXB0KG8uZ2V0TGFtYmRhU2NyaXB0KCkudHJpbSgpKSArICJcIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgU2Fja0Z1bmN0aW9ucy5CYXJyaWVyIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiQmFycmllci4iICsgby50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5IG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiQ2FyZGluYWxpdHkuIiArIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBQaWNrIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiUGljay4iICsgby50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE51bWJlciBvKSB7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEZsb2F0IHx8IG8gaW5zdGFuY2VvZiBEb3VibGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzTmFOKG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk51bWJlci5OYU4iOwotICAgICAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNQb3NpdGl2ZUluZmluaXR5KG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk51bWJlci5QT1NJVElWRV9JTkZJTklUWSI7Ci0gICAgICAgICAgICAgICAgaWYgKE51bWJlckhlbHBlci5pc05lZ2F0aXZlSW5maW5pdHkobykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlQ2FyZGluYWxpdHlWYWx1ZShmaW5hbCBCeXRlY29kZSBvKSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0ID0gby5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJDYXJkaW5hbGl0eVZhbHVlLiIgKyBpbnN0LmdldEFyZ3VtZW50cygpWzBdICsgIigiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0LmdldEFyZ3VtZW50cygpWzFdKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFNldDw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gcHJvZHVjZVNjcmlwdChuZXcgQXJyYXlMaXN0PD4obykpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBMaXN0PD8+IG8pIHsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPD8+IGl0ZXJhdG9yID0gKChMaXN0PD8+KSBvKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiWyIpOwotCi0gICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG5leHRJdGVtID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChuZXh0SXRlbSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpLmFwcGVuZCgiICIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiXSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBNYXA8PywgPz4gbykgewotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgibmV3IE1hcChbIik7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/IGV4dGVuZHMgTWFwLkVudHJ5PD8sID8+PiBpdHR5ID0gKChNYXA8PywgPz4pIG8pLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hcC5FbnRyeTw/LD8+IGVudHJ5ID0gaXR0eS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiWyIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChlbnRyeS5nZXRLZXkoKSk7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChlbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJdIik7Ci0gICAgICAgICAgICAgICAgaWYgKGl0dHkuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiXSkiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgQ2xhc3M8Pz4gbykgewotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoby5nZXRDYW5vbmljYWxOYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBFbnVtPD8+IG8pIHsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKG8uZ2V0RGVjbGFyaW5nQ2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiLiIgKyBvLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBWZXJ0ZXggbykgewotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgibmV3IFZlcnRleCgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ubGFiZWwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiLCBudWxsKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBFZGdlIG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBFZGdlKCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8uaWQoKSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIG5ldyBWZXJ0ZXgoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5vdXRWZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLm91dFZlcnRleCgpLmxhYmVsKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCBudWxsKSwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCBuZXcgVmVydGV4KCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8uaW5WZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmluVmVydGV4KCkubGFiZWwoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiLG51bGwpLG51bGwpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFZlcnRleFByb3BlcnR5PD8+IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIm5ldyBQcm9wZXJ0eSgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ubGFiZWwoKSk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby52YWx1ZSgpKTsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCJudWxsKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5PD8+IG8pIHsKLSAgICAgICAgICAgIGlmIChvLmdldENvbmZpZ3VyYXRpb24oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgibmV3ICIgKyBvLmdldFN0cmF0ZWd5Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiKCkiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgibmV3ICIgKyBvLmdldFN0cmF0ZWd5Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiKCIpOwotICAgICAgICAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsT2JqZWN0PiBjb25mID0gQ29uZmlndXJhdGlvbkNvbnZlcnRlci5nZXRNYXAoby5nZXRDb25maWd1cmF0aW9uKCkpOwotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInsiKTsKLSAgICAgICAgICAgICAgICBjb25mLmVudHJ5U2V0KCkuc3RyZWFtKCkuZm9yRWFjaChlbnRyeSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoZW50cnkuZ2V0S2V5KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIjoiKTsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldFZhbHVlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LnNldENoYXJBdEVuZCgnfScpOwotICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCIpIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIEJ5dGVjb2RlIG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQodHJhdmVyc2FsU291cmNlKTsKLSAgICAgICAgICAgIGZvciAoZmluYWwgQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiBvLmdldEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1ldGhvZE5hbWUgPSBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpOwotICAgICAgICAgICAgICAgIGlmICgwID09IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpLmxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wobWV0aG9kTmFtZSkpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wobWV0aG9kTmFtZSkpLmFwcGVuZCgiKCIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gc3BlY2lhbCBjYXNlIHdpdGhTYWNrKCkgZm9yIEdyb292eSBiZWNhdXNlIFVuYXJ5T3BlcmF0b3IgYW5kIEJpbmFyeU9wZXJhdG9yIHNpZ25hdHVyZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBpdCBpbXBvc3NpYmxlIGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBmdW5jdGlvbiB0byBjYWxsLiBzcGVjaWZpY2FsbHkgd2UgbmVlZAotICAgICAgICAgICAgICAgICAgICAvLyB0byBkaXNjZXJuIGJldHdlZW46Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgICB3aXRoU2FjayhBIGluaXRpYWxWYWx1ZSwgVW5hcnlPcGVyYXRvcjxBPiBzcGxpdE9wZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgd2l0aFNhY2soQSBpbml0aWFsVmFsdWUsIEJpbmFyeU9wZXJhdG9yPEE+IHNwbGl0T3BlcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuZDoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIHdpdGhTYWNrKFN1cHBsaWVyPEE+IGluaXRpYWxWYWx1ZSwgVW5hcnlPcGVyYXRvcjxBPiBtZXJnZU9wZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICAvLyAgICAgd2l0aFNhY2soU3VwcGxpZXI8QT4gaW5pdGlhbFZhbHVlLCBCaW5hcnlPcGVyYXRvcjxBPiBtZXJnZU9wZXJhdG9yKQotICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHMoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2spICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkubGVuZ3RoID09IDIgJiYgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKClbMV0gaW5zdGFuY2VvZiBMYW1iZGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjYXN0Rmlyc3RBcmdUbyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdIGluc3RhbmNlb2YgTGFtYmRhID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcGxpZXIuY2xhc3MuZ2V0TmFtZSgpIDogIiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMYW1iZGEgc2Vjb25kQXJnID0gKExhbWJkYSkgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKClbMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY2FzdFNlY29uZEFyZ1RvID0gc2Vjb25kQXJnLmdldExhbWJkYUFyZ3VtZW50cygpID09IDEgPyBVbmFyeU9wZXJhdG9yLmNsYXNzLmdldE5hbWUoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmFyeU9wZXJhdG9yLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FzdEZpcnN0QXJnVG8uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiKCVzKSAiLCBjYXN0Rmlyc3RBcmdUbykpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwgKCIpLmFwcGVuZChjYXN0U2Vjb25kQXJnVG8pLmFwcGVuZCgiKSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKVsxXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHMoR3JhcGhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy50eCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb21tYW5kID0gaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKClbMF0udG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikuIikuYXBwZW5kKGNvbW1hbmQpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IG9iamVjdCA6IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRDaGFyQXRFbmQoJyknKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBQPD8+IHApIHsKLSAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgVGV4dFApIHsKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJUZXh0UC4iKS5hcHBlbmQocC5nZXRQcmVkaWNhdGVOYW1lKCkpLmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChwLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgQ29ubmVjdGl2ZVApIHsKLSAgICAgICAgICAgICAgICAvLyBDb25uZWN0aXZlUCBnZXRzIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIGl0J3MgcmVkdWNlZCB0byBhbmQoUCwgUCwgUCkgYW5kIHdlIHdhbnQgaXQKLSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZWQgdGhlIHdheSBpdCB3YXMgd3JpdHRlbiB3aGljaCB3YXMgUC5hbmQoUCkuYW5kKFApCi0gICAgICAgICAgICAgICAgZmluYWwgTGlzdDxQPD8+PiBsaXN0ID0gKChDb25uZWN0aXZlUCkgcCkuZ2V0UHJlZGljYXRlcygpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb25uZWN0b3IgPSBwLmdldFByZWRpY2F0ZU5hbWUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZHVjZVNjcmlwdChsaXN0LmdldChpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBmaXJzdC9sYXN0IFAgdGhlcmUgaXMgbm8gcGFyZW50IHRvIGNsb3NlCi0gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBpIDwgbGlzdC5zaXplKCkgLSAxKSBzY3JpcHQuYXBwZW5kKCIpIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRlaCBjb25uZWN0b3IgZm9yIGFsbCBidXQgbGFzdCBQCi0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGlzdC5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKGNvbm5lY3RvcikuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIlAuIikuYXBwZW5kKHAuZ2V0UHJlZGljYXRlTmFtZSgpKS5hcHBlbmQoIigiKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQocC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIHJlc29sdmVTeW1ib2woZmluYWwgU3RyaW5nIG1ldGhvZE5hbWUpIHsKLSAgICAgICAgICAgIHJldHVybiBTeW1ib2xIZWxwZXIudG9KYXZhc2NyaXB0KG1ldGhvZE5hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIFN5bWJvbEhlbHBlciB7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBUT19KU19NQVAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gRlJPTV9KU19NQVAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0KLSAgICAgICAgc3RhdGljIHsKLSAgICAgICAgICAgIFRPX0pTX01BUC5wdXQoImZyb20iLCAiZnJvbV8iKTsKLSAgICAgICAgICAgIFRPX0pTX01BUC5wdXQoImluIiwgImluXyIpOwotICAgICAgICAgICAgVE9fSlNfTUFQLnB1dCgid2l0aCIsICJ3aXRoXyIpOwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRPX0pTX01BUC5mb3JFYWNoKChrLCB2KSAtPiBGUk9NX0pTX01BUC5wdXQodiwgaykpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTeW1ib2xIZWxwZXIoKSB7Ci0gICAgICAgICAgICAvLyBzdGF0aWMgbWV0aG9kcyBvbmx5LCBkbyBub3QgaW5zdGFudGlhdGUKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvSmF2YXNjcmlwdChmaW5hbCBTdHJpbmcgc3ltYm9sKSB7Ci0gICAgICAgICAgICByZXR1cm4gVE9fSlNfTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIHN5bWJvbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b0phdmEoZmluYWwgU3RyaW5nIHN5bWJvbCkgewotICAgICAgICAgICAgcmV0dXJuIEZST01fSlNfTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIHN5bWJvbCk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdG9yLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvUHl0aG9uVHJhbnNsYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWU3ZDcxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uQ29udmVydGVyOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdFc2NhcGVVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBpY2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TYWNrRnVuY3Rpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NyaXB0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LlRyYXZlcnNhbFN0cmF0ZWd5UHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkNvbm5lY3RpdmVQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5PclA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5OdW1iZXJIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkJpUHJlZGljYXRlOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKLQotLyoqCi0gKiBUcmFuc2xhdGVzIEdyZW1saW4ge0BsaW5rIEJ5dGVjb2RlfSBpbnRvIGEgUHl0aG9uIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLSAqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFB5dGhvblRyYW5zbGF0b3IgaW1wbGVtZW50cyBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gU1RFUF9OQU1FUyA9IFN0cmVhbS5vZihHcmFwaFRyYXZlcnNhbC5jbGFzcy5nZXRNZXRob2RzKCkpLmZpbHRlcigKLSAgICAgICAgICAgIG1ldGhvZCAtPiBUcmF2ZXJzYWwuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShtZXRob2QuZ2V0UmV0dXJuVHlwZSgpKSkubWFwKE1ldGhvZDo6Z2V0TmFtZSkuCi0gICAgICAgICAgICBjb2xsZWN0KENvbGxlY3RvcnMudG9TZXQoKSk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBUeXBlVHJhbnNsYXRvciB0eXBlVHJhbnNsYXRvcjsKLQotICAgIHByaXZhdGUgUHl0aG9uVHJhbnNsYXRvcihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBUeXBlVHJhbnNsYXRvciB0eXBlVHJhbnNsYXRvcikgewotICAgICAgICB0aGlzLnRyYXZlcnNhbFNvdXJjZSA9IHRyYXZlcnNhbFNvdXJjZTsKLSAgICAgICAgdGhpcy50eXBlVHJhbnNsYXRvciA9IHR5cGVUcmFuc2xhdG9yOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3Igd2l0aCBhIHtAY29kZSBmYWxzZX0gYXJndW1lbnQgdG8ge0Bjb2RlIHdpdGhQYXJhbWV0ZXJzfSB1c2luZwotICAgICAqIHtAbGluayAjb2YoU3RyaW5nLCBib29sZWFuKX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQeXRob25UcmFuc2xhdG9yIG9mKGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgICAgICAgcmV0dXJuIG9mKHRyYXZlcnNhbFNvdXJjZSwgZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3Igd2l0aCB0aGUge0BsaW5rIERlZmF1bHRUeXBlVHJhbnNsYXRvcn0gcGFzc2luZyB0aGUge0Bjb2RlIHdpdGhQYXJhbWV0ZXJzfSBvcHRpb24gdG8gaXQKLSAgICAgKiB3aGljaCB3aWxsIGhhbmRsZSB0eXBlIHRyYW5zbGF0aW9uIGluIGEgZmFzaGlvbiB0aGF0IHNob3VsZCB0eXBpY2FsbHkgaW5jcmVhc2UgY2FjaGUgaGl0cyBhbmQgcmVkdWNlCi0gICAgICogY29tcGlsYXRpb24gdGltZXMgaWYgZW5hYmxlZCBhdCB0aGUgc2FjcmlmaWNlIHRvIHJld3JpdGluZyBvZiB0aGUgc2NyaXB0IHRoYXQgY291bGQgcmVkdWNlIHJlYWRhYmlsaXR5LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUHl0aG9uVHJhbnNsYXRvciBvZihmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBib29sZWFuIHdpdGhQYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHJldHVybiBvZih0cmF2ZXJzYWxTb3VyY2UsIG5ldyBEZWZhdWx0VHlwZVRyYW5zbGF0b3Iod2l0aFBhcmFtZXRlcnMpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIHRoZSB0cmFuc2xhdG9yIHdpdGggYSBjdXN0b20ge0BsaW5rIFR5cGVUcmFuc2xhdG9yfSBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFB5dGhvblRyYW5zbGF0b3Igb2YoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwgZmluYWwgVHlwZVRyYW5zbGF0b3IgdHlwZVRyYW5zbGF0b3IpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQeXRob25UcmFuc2xhdG9yKHRyYXZlcnNhbFNvdXJjZSwgdHlwZVRyYW5zbGF0b3IpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhdmVyc2FsU291cmNlKCkgewotICAgICAgICByZXR1cm4gdGhpcy50cmF2ZXJzYWxTb3VyY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNjcmlwdCB0cmFuc2xhdGUoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpIHsKLSAgICAgICAgcmV0dXJuIHR5cGVUcmFuc2xhdG9yLmFwcGx5KHRyYXZlcnNhbFNvdXJjZSwgYnl0ZWNvZGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TGFuZ3VhZ2UoKSB7Ci0gICAgICAgIHJldHVybiAiZ3JlbWxpbi1weXRob24iOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdGYWN0b3J5LnRyYW5zbGF0b3JTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgLy8vLy8vLwotCi0gICAgLyoqCi0gICAgICogUGVyZm9ybXMgc3RhbmRhcmQgdHlwZSB0cmFuc2xhdGlvbiBmb3IgdGhlIFRpbmtlclBvcCB0eXBlcyB0byBQeXRob24uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBEZWZhdWx0VHlwZVRyYW5zbGF0b3IgZXh0ZW5kcyBBYnN0cmFjdFR5cGVUcmFuc2xhdG9yIHsKLQotICAgICAgICBwdWJsaWMgRGVmYXVsdFR5cGVUcmFuc2xhdG9yKGZpbmFsIGJvb2xlYW4gd2l0aFBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIHN1cGVyKHdpdGhQYXJhbWV0ZXJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldE51bGxTeW50YXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gIk5vbmUiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFN0cmluZyBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gby5jb250YWlucygiJyIpIHx8IG8uY29udGFpbnMoU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSkgPwotICAgICAgICAgICAgICAgICAgICAiXCJcIlwiIiArIG8gKyAiXCJcIlwiIiA6ICInIiArIG8gKyAiJyI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgQm9vbGVhbiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gbyA/ICJUcnVlIiA6ICJGYWxzZSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgRGF0ZSBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gImRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoIiArIG8uZ2V0VGltZSgpICsgIiAvIDEwMDAuMCkiOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIE9mZnNldERhdGVUaW1lIG8pIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkdCA9IG8udG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkdElTT1N0cmluZyA9IGR0LmVuZHNXaXRoKCJaIikgPyBkdC5yZXBsYWNlKCJaIiwgIiswMDowMCIpIDogZHQ7Ci0gICAgICAgICAgICByZXR1cm4gImRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJyIgKyBkdElTT1N0cmluZyArICInKSI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVGltZXN0YW1wIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAidGltZXN0YW1wKCIgKyBvLmdldFRpbWUoKSArICIgLyAxMDAwLjApIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBVVUlEIG8pIHsKLSAgICAgICAgICAgIHJldHVybiAiVVVJRCgnIiArIG8udG9TdHJpbmcoKSArIicpIjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBMYW1iZGEgbykgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxhbWJkYVN0cmluZyA9IG8uZ2V0TGFtYmRhU2NyaXB0KCkudHJpbSgpOwotICAgICAgICAgICAgcmV0dXJuICJsYW1iZGE6IFwiIiArIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUphdmEobGFtYmRhU3RyaW5nKSArICJcIiI7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgTnVtYmVyIG8pIHsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgRG91YmxlIHx8IG8gaW5zdGFuY2VvZiBGbG9hdCB8fCBvIGluc3RhbmNlb2YgQmlnRGVjaW1hbCkgewotICAgICAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNOYU4obykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQoJ25hbicpIjsKLSAgICAgICAgICAgICAgICBpZiAoTnVtYmVySGVscGVyLmlzUG9zaXRpdmVJbmZpbml0eShvKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCgnaW5mJykiOwotICAgICAgICAgICAgICAgIGlmIChOdW1iZXJIZWxwZXIuaXNOZWdhdGl2ZUluZmluaXR5KG8pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0KCctaW5mJykiOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCgiICsgbyArICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgQnl0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIlNpbmdsZUJ5dGUoIiArIG8gKyAiKSI7Ci0KLSAgICAgICAgICAgIC8vIGZvciBsYXJnZSBudW1iZXJzIG5lZWQgdG8gc3BlY2lmeSB0aGUgdHlwZQotICAgICAgICAgICAgaWYgKG8ubG9uZ1ZhbHVlKCkgPiBJbnRlZ2VyLk1BWF9WQUxVRSkgewotICAgICAgICAgICAgICAgIHJldHVybiAibG9uZygiICsgbyArICIpIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHVzZSBweXRob24gaW50L2JpZ251bQotICAgICAgICAgICAgcmV0dXJuIG8udG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFN5bnRheChmaW5hbCBTYWNrRnVuY3Rpb25zLkJhcnJpZXIgbykgewotICAgICAgICAgICAgcmV0dXJuICJCYXJyaWVyLiIgKyByZXNvbHZlU3ltYm9sKG8udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRTeW50YXgoZmluYWwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkgbykgewotICAgICAgICAgICAgcmV0dXJuICJDYXJkaW5hbGl0eS4iICsgcmVzb2x2ZVN5bWJvbChvLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0U3ludGF4KGZpbmFsIFBpY2sgbykgewotICAgICAgICAgICAgaWYgKG8uZXF1YWxzKFBpY2suYW55KSkgewotICAgICAgICAgICAgICAgIC8vIFRyYW5zbGF0ZXMgdG8gUGljay5hbnlfIGR1ZSB0byBhbnkoKSBiZWluZyBhIGJ1aWx0LWluIGZ1bmN0aW9uIGluIFB5dGhvbi4KLSAgICAgICAgICAgICAgICByZXR1cm4gIlBpY2suYW55XyI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gIlBpY2suIiArIHJlc29sdmVTeW1ib2woby50b1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgU2V0PD8+IG8pIHsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPD8+IGl0ZXJhdG9yID0gby5pdGVyYXRvcigpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgic2V0KCgiKTsKLSAgICAgICAgICAgIHdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChpdGVyYXRvci5uZXh0KCkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCIpKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBMaXN0PD8+IG8pIHsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPD8+IGl0ZXJhdG9yID0gby5pdGVyYXRvcigpOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiWyIpOwotICAgICAgICAgICAgd2hpbGUoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGl0ZXJhdG9yLm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdC5hcHBlbmQoIl0iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgTWFwPD8sID8+IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoInsiKTsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPD8gZXh0ZW5kcyBNYXAuRW50cnk8PywgPz4+IGl0dHkgPSBvLmVudHJ5U2V0KCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlIChpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hcC5FbnRyeTw/LD8+IGVudHJ5ID0gaXR0eS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGVudHJ5LmdldEtleSgpKS5hcHBlbmQoIjoiKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0dHkuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgifSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBDbGFzczw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiR3JlbWxpbkRhdGFUeXBlKCciICsgby5nZXRDYW5vbmljYWxOYW1lKCkgKyAiJykiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgRW51bTw/PiBvKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZChvLmdldERlY2xhcmluZ0NsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIi4iICsgcmVzb2x2ZVN5bWJvbChvLnRvU3RyaW5nKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0IHByb2R1Y2VTY3JpcHQoZmluYWwgVmVydGV4IG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIlZlcnRleCgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpLmFwcGVuZCgiKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBFZGdlIG8pIHsKLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIkVkZ2UoIik7Ci0gICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoby5pZCgpKS5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLm91dFZlcnRleCgpKS5hcHBlbmQoIiwiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmxhYmVsKCkpLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1NjcmlwdChvLmluVmVydGV4KCkpLmFwcGVuZCgiKSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBWZXJ0ZXhQcm9wZXJ0eTw/PiBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJWZXJ0ZXhQcm9wZXJ0eSgiKTsKLSAgICAgICAgICAgIGNvbnZlcnRUb1NjcmlwdChvLmlkKCkpLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KG8ubGFiZWwoKSkuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydFRvU2NyaXB0KG8udmFsdWUoKSkuYXBwZW5kKCIpIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlU2NyaXB0KGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHk8Pz4gbykgewotICAgICAgICAgICAgaWYgKG8uZ2V0Q29uZmlndXJhdGlvbigpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZCgiVHJhdmVyc2FsU3RyYXRlZ3koJyIgKyBvLmdldFN0cmF0ZWd5Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiJywgTm9uZSwgJyIgKyBvLmdldFN0cmF0ZWd5Q2xhc3MoKS5nZXROYW1lKCkgKyAiJykiKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIlRyYXZlcnNhbFN0cmF0ZWd5KCciKS5hcHBlbmQoby5nZXRTdHJhdGVneUNsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKS5hcHBlbmQoIicsIik7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIuZ2V0TWFwKG8uZ2V0Q29uZmlndXJhdGlvbigpKSk7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCAnIik7Ci0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZChvLmdldFN0cmF0ZWd5Q2xhc3MoKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBzY3JpcHQuYXBwZW5kKCInKSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBCeXRlY29kZSBvKSB7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKHRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogby5nZXRJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtZXRob2ROYW1lID0gaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKTsKLSAgICAgICAgICAgICAgICBpZiAoMCA9PSBhcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wobWV0aG9kTmFtZSkpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFscygicmFuZ2UiKSAmJiAyID09IGFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIGlmICgoKE51bWJlcikgYXJndW1lbnRzWzBdKS5sb25nVmFsdWUoKSArIDEgPT0gKChOdW1iZXIpIGFyZ3VtZW50c1sxXSkubG9uZ1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJbIikuYXBwZW5kKGFyZ3VtZW50c1swXS50b1N0cmluZygpKS5hcHBlbmQoIl0iKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiWyIpLmFwcGVuZChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkuYXBwZW5kKCI6IikuYXBwZW5kKGFyZ3VtZW50c1sxXS50b1N0cmluZygpKS5hcHBlbmQoIl0iKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChtZXRob2ROYW1lLmVxdWFscygibGltaXQiKSAmJiAxID09IGFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIlswOiIpLmFwcGVuZChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSkuYXBwZW5kKCJdIik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHMoInZhbHVlcyIpICYmIDEgPT0gYXJndW1lbnRzLmxlbmd0aCAmJiBzY3JpcHQuZ2V0U2NyaXB0KCkubGVuZ3RoKCkgPiAzICYmICFTVEVQX05BTUVTLmNvbnRhaW5zKGFyZ3VtZW50c1swXS50b1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLiIpLmFwcGVuZChhcmd1bWVudHNbMF0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobWV0aG9kTmFtZS5lcXVhbHMoR3JhcGhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy50eCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbW1hbmQgPSBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKVswXS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKG1ldGhvZE5hbWUpLmFwcGVuZCgiKCkuIikuYXBwZW5kKGNvbW1hbmQpLmFwcGVuZCgiKCkiKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wobWV0aG9kTmFtZSkpLmFwcGVuZCgiKCIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHB5dGhvbiBoYXMgdHJvdWJsZSB3aXRoIGphdmEgdmFyYXJncy4uLndyYXBwaW5nIGluIGNvbGxlY3Rpb24gc2VlbXMgdG8gc29sdmUgdGhlIHByb2JsZW0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB2YXJhcmdzQmV3YXJlID0gaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKS5lcXVhbHMoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFN0cmF0ZWdpZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKS5lcXVhbHMoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aG91dFN0cmF0ZWdpZXMpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyYXJnc0Jld2FyZSkgc2NyaXB0LmFwcGVuZCgiKlsiKTsKLQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/PiBpdHR5ID0gU3RyZWFtLm9mKGFyZ3VtZW50cykuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0dHkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoaXR0eS5uZXh0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0dHkuaGFzTmV4dCgpKSBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyYXJnc0Jld2FyZSkgc2NyaXB0LmFwcGVuZCgiXSIpOwotCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBQPD8+IHApIHsKLSAgICAgICAgICAgIGlmIChwIGluc3RhbmNlb2YgVGV4dFApIHsKLSAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgdGhlIFJlZ2V4UHJlZGljYXRlIHNpbmNlIGl0J3MgbmFtZWQgaW4gcHl0aG9uICJub3RfcmVnZXgiCi0gICAgICAgICAgICAgICAgZmluYWwgQmlQcmVkaWNhdGU8PywgPz4gdHAgPSBwLmdldEJpUHJlZGljYXRlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRwIGluc3RhbmNlb2YgVGV4dC5SZWdleFByZWRpY2F0ZSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVnZXhUb2tlbiA9ICgoVGV4dC5SZWdleFByZWRpY2F0ZSkgcC5nZXRCaVByZWRpY2F0ZSgpKS5pc05lZ2F0ZSgpID8gIm5vdF9yZWdleCIgOiAicmVnZXgiOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJUZXh0UC4iKS5hcHBlbmQocmVnZXhUb2tlbikuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiVGV4dFAuIikuYXBwZW5kKHAuZ2V0UHJlZGljYXRlTmFtZSgpKS5hcHBlbmQoIigiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KHAuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBDb25uZWN0aXZlUCkgewotICAgICAgICAgICAgICAgIC8vIENvbm5lY3RpdmVQIGdldHMgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGJlY2F1c2UgaXQncyByZWR1Y2VkIHRvIGFuZChQLCBQLCBQKSBhbmQgd2Ugd2FudCBpdAotICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlZCB0aGUgd2F5IGl0IHdhcyB3cml0dGVuIHdoaWNoIHdhcyBQLmFuZChQKS5hbmQoUCkKLSAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFA8Pz4+IGxpc3QgPSAoKENvbm5lY3RpdmVQKSBwKS5nZXRQcmVkaWNhdGVzKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbm5lY3RvciA9IHAgaW5zdGFuY2VvZiBPclAgPyAib3JfIiA6ICJhbmRfIjsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZHVjZVNjcmlwdChsaXN0LmdldChpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBmaXJzdC9sYXN0IFAgdGhlcmUgaXMgbm8gcGFyZW50IHRvIGNsb3NlCi0gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCAmJiBpIDwgbGlzdC5zaXplKCkgLSAxKSBzY3JpcHQuYXBwZW5kKCIpIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBjb25uZWN0b3IgZm9yIGFsbCBidXQgbGFzdCBQCi0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGlzdC5zaXplKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIuIikuYXBwZW5kKGNvbm5lY3RvcikuYXBwZW5kKCIoIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIlAuIikuYXBwZW5kKHJlc29sdmVTeW1ib2wocC5nZXRQcmVkaWNhdGVOYW1lKCkpKS5hcHBlbmQoIigiKTsKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQocC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIikiKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBwcm9kdWNlQ2FyZGluYWxpdHlWYWx1ZShmaW5hbCBCeXRlY29kZSBvKSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0ID0gby5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCk7Ci0gICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJDYXJkaW5hbGl0eVZhbHVlLiIgKyByZXNvbHZlU3ltYm9sKGluc3QuZ2V0QXJndW1lbnRzKClbMF0udG9TdHJpbmcoKSkgKyAiKCIpOwotICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGluc3QuZ2V0QXJndW1lbnRzKClbMV0pOwotICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgcmVzb2x2ZVN5bWJvbChmaW5hbCBTdHJpbmcgbWV0aG9kTmFtZSkgewotICAgICAgICAgICAgcmV0dXJuIFN5bWJvbEhlbHBlci50b1B5dGhvbihtZXRob2ROYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIHRyYW5zbGF0aW9uIHdpdGhvdXQgZm9yIHRoZSBzeW50YXggc3VnYXIgdG8gUHl0aG9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9TdWdhclRyYW5zbGF0b3IgZXh0ZW5kcyBEZWZhdWx0VHlwZVRyYW5zbGF0b3IgewotCi0gICAgICBwdWJsaWMgTm9TdWdhclRyYW5zbGF0b3IoZmluYWwgYm9vbGVhbiB3aXRoUGFyYW1ldGVycykgewotICAgICAgICAgICAgc3VwZXIod2l0aFBhcmFtZXRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgcHJvZHVjZVNjcmlwdChmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBCeXRlY29kZSBvKSB7Ci0gICAgICAgICAgc2NyaXB0LmFwcGVuZCh0cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICAgIGZvciAoZmluYWwgQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiBvLmdldEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWV0aG9kTmFtZSA9IGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCk7Ci0gICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKTsKLSAgICAgICAgICAgIGlmICgwID09IGFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChtZXRob2ROYW1lKSkuYXBwZW5kKCIoKSIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQocmVzb2x2ZVN5bWJvbChtZXRob2ROYW1lKSkuYXBwZW5kKCIoIik7Ci0KLSAgICAgICAgICAgICAgLy8gcHl0aG9uIGhhcyB0cm91YmxlIHdpdGggamF2YSB2YXJhcmdzLi4ud3JhcHBpbmcgaW4gY29sbGVjdGlvbiBzZWVtcyB0byBzb2x2ZQotICAgICAgICAgICAgICAvLyB0aGUgcHJvYmxlbQotICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHZhcmFyZ3NCZXdhcmUgPSBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpLmVxdWFscyhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU3RyYXRlZ2llcykKLSAgICAgICAgICAgICAgICAgIHx8IGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCkuZXF1YWxzKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhvdXRTdHJhdGVnaWVzKTsKLSAgICAgICAgICAgICAgaWYgKHZhcmFyZ3NCZXdhcmUpCi0gICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKlsiKTsKLQotICAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjw/PiBpdHR5ID0gU3RyZWFtLm9mKGFyZ3VtZW50cykuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgd2hpbGUgKGl0dHkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgY29udmVydFRvU2NyaXB0KGl0dHkubmV4dCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXR0eS5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAodmFyYXJnc0Jld2FyZSkKLSAgICAgICAgICAgICAgICBzY3JpcHQuYXBwZW5kKCJdIik7Ci0KLSAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiKSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gc2NyaXB0OwotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgc3RhdGljIGZpbmFsIGNsYXNzIFN5bWJvbEhlbHBlciB7Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBUT19QWVRIT05fTUFQID0gbmV3IEhhc2hNYXA8PigpOwotCi0gICAgICAgIHN0YXRpYyB7Ci0gICAgICAgICAgICBUT19QWVRIT05fTUFQLnB1dCgiZ2xvYmFsIiwgImdsb2JhbF8iKTsKLSAgICAgICAgICAgIFRPX1BZVEhPTl9NQVAucHV0KCJhbGwiLCAiYWxsXyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoImFuZCIsICJhbmRfIik7Ci0gICAgICAgICAgICBUT19QWVRIT05fTUFQLnB1dCgiYW55IiwgImFueV8iKTsKLSAgICAgICAgICAgIFRPX1BZVEhPTl9NQVAucHV0KCJhcyIsICJhc18iKTsKLSAgICAgICAgICAgIFRPX1BZVEhPTl9NQVAucHV0KCJmaWx0ZXIiLCAiZmlsdGVyXyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoImZvcm1hdCIsICJmb3JtYXRfIik7Ci0gICAgICAgICAgICBUT19QWVRIT05fTUFQLnB1dCgiZnJvbSIsICJmcm9tXyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoImlkIiwgImlkXyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoImluIiwgImluXyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoImlzIiwgImlzXyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoImxpc3QiLCAibGlzdF8iKTsKLSAgICAgICAgICAgIFRPX1BZVEhPTl9NQVAucHV0KCJtYXgiLCAibWF4XyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoIm1pbiIsICJtaW5fIik7Ci0gICAgICAgICAgICBUT19QWVRIT05fTUFQLnB1dCgib3IiLCAib3JfIik7Ci0gICAgICAgICAgICBUT19QWVRIT05fTUFQLnB1dCgibm90IiwgIm5vdF8iKTsKLSAgICAgICAgICAgIFRPX1BZVEhPTl9NQVAucHV0KCJyYW5nZSIsICJyYW5nZV8iKTsKLSAgICAgICAgICAgIFRPX1BZVEhPTl9NQVAucHV0KCJzZXQiLCAic2V0XyIpOwotICAgICAgICAgICAgVE9fUFlUSE9OX01BUC5wdXQoInN1bSIsICJzdW1fIik7Ci0gICAgICAgICAgICBUT19QWVRIT05fTUFQLnB1dCgid2l0aCIsICJ3aXRoXyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTeW1ib2xIZWxwZXIoKSB7Ci0gICAgICAgICAgICAvLyBzdGF0aWMgbWV0aG9kcyBvbmx5LCBkbyBub3QgaW5zdGFudGlhdGUKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHRvUHl0aG9uKGZpbmFsIFN0cmluZyBzeW1ib2wpIHsKLSAgICAgICAgICAgIHJldHVybiBUT19QWVRIT05fTUFQLmdldE9yRGVmYXVsdChzeW1ib2wsIGNvbnZlcnRDYW1lbENhc2VUb1NuYWtlQ2FzZShzeW1ib2wpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbnZlcnRDYW1lbENhc2VUb1NuYWtlQ2FzZShmaW5hbCBTdHJpbmcgY2FtZWxDYXNlKSB7Ci0gICAgICAgICAgICBpZiAoU3RyaW5nVXRpbHMuaXNCbGFuayhjYW1lbENhc2UpKQotICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2U7Ci0KLSAgICAgICAgICAgIC8vIHNraXAgaWYgdGhpcyBpcyBhIGNsYXNzL2VudW0gaW5kaWNhdGVkIGJ5IHRoZSBmaXJzdCBsZXR0ZXIgYmVpbmcgdXBwZXIgY2FzZQotICAgICAgICAgICAgaWYgKENoYXJhY3Rlci5pc1VwcGVyQ2FzZShjYW1lbENhc2UuY2hhckF0KDApKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlOwotCi0gICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlLnJlcGxhY2VBbGwoIihbQS1aXSkiLCAiXyQxIikudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9CX0xQX05MX09fUF9TX1NFX1NMX1RyYXZlcnNlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvQl9MUF9OTF9PX1BfU19TRV9TTF9UcmF2ZXJzZXIuamF2YQppbmRleCA5NDhkYWZiLi4wMWZjOGQ1IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9CX0xQX05MX09fUF9TX1NFX1NMX1RyYXZlcnNlci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTFBfTkxfT19QX1NfU0VfU0xfVHJhdmVyc2VyLmphdmEKQEAgLTIwLDE0ICsyMCwxNSBAQAogCiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuUmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLkFic3RyYWN0UmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLlJlZmVyZW5jZU1hcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlN0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIudXRpbC5MYWJlbGxlZENvdW50ZXI7CiAKIHB1YmxpYyBjbGFzcyBCX0xQX05MX09fUF9TX1NFX1NMX1RyYXZlcnNlcjxUPiBleHRlbmRzIEJfTFBfT19QX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGltcGxlbWVudHMgTkxfU0xfVHJhdmVyc2VyPFQ+IHsKIAogICAgIHByb3RlY3RlZCBTdGFjazxMYWJlbGxlZENvdW50ZXI+IG5lc3RlZExvb3BzOwotICAgIHByb3RlY3RlZCBSZWZlcmVuY2VNYXAgbG9vcE5hbWVzID0gbnVsbDsKKyAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwPFN0cmluZyxPYmplY3Q+IGxvb3BOYW1lcyA9IG51bGw7CiAKICAgICBwcm90ZWN0ZWQgQl9MUF9OTF9PX1BfU19TRV9TTF9UcmF2ZXJzZXIoKSB7CiAgICAgfQpAQCAtMzUsNyArMzYsOCBAQAogICAgIHB1YmxpYyBCX0xQX05MX09fUF9TX1NFX1NMX1RyYXZlcnNlcihmaW5hbCBUIHQsIGZpbmFsIFN0ZXA8VCwgPz4gc3RlcCwgZmluYWwgbG9uZyBpbml0aWFsQnVsaykgewogICAgICAgICBzdXBlcih0LCBzdGVwLCBpbml0aWFsQnVsayk7CiAgICAgICAgIHRoaXMubmVzdGVkTG9vcHMgPSBuZXcgU3RhY2s8PigpOwotICAgICAgICB0aGlzLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXAoUmVmZXJlbmNlTWFwLkhBUkQsIFJlZmVyZW5jZU1hcC5XRUFLKTsKKyAgICAgICAgdGhpcy5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwPD4oQWJzdHJhY3RSZWZlcmVuY2VNYXAuUmVmZXJlbmNlU3RyZW5ndGguSEFSRCwKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5XRUFLKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTQ0LDcgKzQ2LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVmZXJlbmNlTWFwIGdldE5lc3RlZExvb3BOYW1lcygpIHsKKyAgICBwdWJsaWMgUmVmZXJlbmNlTWFwPFN0cmluZyxPYmplY3Q+IGdldE5lc3RlZExvb3BOYW1lcygpIHsKICAgICAgICAgcmV0dXJuIGxvb3BOYW1lczsKICAgICB9CiAKQEAgLTk5LDcgKzEwMSw4IEBACiAKICAgICBwcml2YXRlIHZvaWQgY2xvbmVMb29wU3RhdGUoZmluYWwgQl9MUF9OTF9PX1BfU19TRV9TTF9UcmF2ZXJzZXI8Pz4gY2xvbmUpIHsKICAgICAgICAgY2xvbmUubmVzdGVkTG9vcHMgPSBuZXcgU3RhY2s8PigpOwotICAgICAgICBjbG9uZS5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwKFJlZmVyZW5jZU1hcC5IQVJELCBSZWZlcmVuY2VNYXAuV0VBSyk7CisgICAgICAgIGNsb25lLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXA8PihBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5IQVJELAorICAgICAgICAgICAgICAgIEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLldFQUspOwogICAgICAgICBjb3B5TmVzdGVkTG9vcHMoY2xvbmUubmVzdGVkTG9vcHMsIGNsb25lLmxvb3BOYW1lcyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9CX0xQX05MX09fU19TRV9TTF9UcmF2ZXJzZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTFBfTkxfT19TX1NFX1NMX1RyYXZlcnNlci5qYXZhCmluZGV4IDQxYTA0OTAuLmJmNGQ1MjAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTFBfTkxfT19TX1NFX1NMX1RyYXZlcnNlci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTFBfTkxfT19TX1NFX1NMX1RyYXZlcnNlci5qYXZhCkBAIC0yMCwxNCArMjAsMTUgQEAKIAogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMubWFwLlJlZmVyZW5jZU1hcDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0Lm1hcC5SZWZlcmVuY2VNYXA7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5tYXAuQWJzdHJhY3RSZWZlcmVuY2VNYXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLnV0aWwuTGFiZWxsZWRDb3VudGVyOwogCiBwdWJsaWMgY2xhc3MgQl9MUF9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGV4dGVuZHMgQl9MUF9PX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGltcGxlbWVudHMgTkxfU0xfVHJhdmVyc2VyPFQ+IHsKIAogICAgIHByb3RlY3RlZCBTdGFjazxMYWJlbGxlZENvdW50ZXI+IG5lc3RlZExvb3BzOwotICAgIHByb3RlY3RlZCBSZWZlcmVuY2VNYXAgbG9vcE5hbWVzID0gbnVsbDsKKyAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwPFN0cmluZyxPYmplY3Q+IGxvb3BOYW1lcyA9IG51bGw7CiAKICAgICBwcm90ZWN0ZWQgQl9MUF9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyKCkgewogICAgIH0KQEAgLTM1LDcgKzM2LDggQEAKICAgICBwdWJsaWMgQl9MUF9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyKGZpbmFsIFQgdCwgZmluYWwgU3RlcDxULCA/PiBzdGVwLCBmaW5hbCBsb25nIGluaXRpYWxCdWxrKSB7CiAgICAgICAgIHN1cGVyKHQsIHN0ZXAsIGluaXRpYWxCdWxrKTsKICAgICAgICAgdGhpcy5uZXN0ZWRMb29wcyA9IG5ldyBTdGFjazw+KCk7Ci0gICAgICAgIHRoaXMubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICB0aGlzLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXA8PihBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5IQVJELAorICAgICAgICAgICAgICAgIEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLldFQUspOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDQsNyArNDYsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZWZlcmVuY2VNYXAgZ2V0TmVzdGVkTG9vcE5hbWVzKCkgeworICAgIHB1YmxpYyBSZWZlcmVuY2VNYXA8U3RyaW5nLE9iamVjdD4gZ2V0TmVzdGVkTG9vcE5hbWVzKCkgewogICAgICAgICByZXR1cm4gbG9vcE5hbWVzOwogICAgIH0KIApAQCAtOTksNyArMTAxLDggQEAKIAogICAgIHByaXZhdGUgdm9pZCBjbG9uZUxvb3BTdGF0ZShmaW5hbCBCX0xQX05MX09fU19TRV9TTF9UcmF2ZXJzZXI8Pz4gY2xvbmUpIHsKICAgICAgICAgY2xvbmUubmVzdGVkTG9vcHMgPSBuZXcgU3RhY2s8PigpOwotICAgICAgICBjbG9uZS5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwKFJlZmVyZW5jZU1hcC5IQVJELCBSZWZlcmVuY2VNYXAuV0VBSyk7CisgICAgICAgIGNsb25lLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXA8PihBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5IQVJELAorICAgICAgICAgICAgICAgIEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLldFQUspOwogICAgICAgICBjb3B5TmVzdGVkTG9vcHMoY2xvbmUubmVzdGVkTG9vcHMsIGNsb25lLmxvb3BOYW1lcyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9CX05MX09fU19TRV9TTF9UcmF2ZXJzZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTkxfT19TX1NFX1NMX1RyYXZlcnNlci5qYXZhCmluZGV4IDcyYzBlMGQuLjJiZDI2ZTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTkxfT19TX1NFX1NMX1RyYXZlcnNlci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0JfTkxfT19TX1NFX1NMX1RyYXZlcnNlci5qYXZhCkBAIC0yMCwxNCArMjAsMTUgQEAKIAogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMubWFwLlJlZmVyZW5jZU1hcDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0Lm1hcC5BYnN0cmFjdFJlZmVyZW5jZU1hcDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0Lm1hcC5SZWZlcmVuY2VNYXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLnV0aWwuTGFiZWxsZWRDb3VudGVyOwogCiBwdWJsaWMgY2xhc3MgQl9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGV4dGVuZHMgQl9PX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGltcGxlbWVudHMgTkxfU0xfVHJhdmVyc2VyPFQ+IHsKIAogICAgIHByb3RlY3RlZCBTdGFjazxMYWJlbGxlZENvdW50ZXI+IG5lc3RlZExvb3BzOwotICAgIHByb3RlY3RlZCBSZWZlcmVuY2VNYXAgbG9vcE5hbWVzID0gbnVsbDsKKyAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwPFN0cmluZyxPYmplY3Q+IGxvb3BOYW1lcyA9IG51bGw7CiAKICAgICBwcm90ZWN0ZWQgQl9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyKCkgewogICAgIH0KQEAgLTM1LDcgKzM2LDggQEAKICAgICBwdWJsaWMgQl9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyKGZpbmFsIFQgdCwgZmluYWwgU3RlcDxULCA/PiBzdGVwLCBmaW5hbCBsb25nIGluaXRpYWxCdWxrKSB7CiAgICAgICAgIHN1cGVyKHQsIHN0ZXAsIGluaXRpYWxCdWxrKTsKICAgICAgICAgdGhpcy5uZXN0ZWRMb29wcyA9IG5ldyBTdGFjazw+KCk7Ci0gICAgICAgIHRoaXMubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICB0aGlzLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXA8PihBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5IQVJELAorICAgICAgICAgICAgICAgIEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLldFQUspOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDQsNyArNDYsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZWZlcmVuY2VNYXAgZ2V0TmVzdGVkTG9vcE5hbWVzKCkgeworICAgIHB1YmxpYyBSZWZlcmVuY2VNYXA8U3RyaW5nLE9iamVjdD4gZ2V0TmVzdGVkTG9vcE5hbWVzKCkgewogICAgICAgICByZXR1cm4gbG9vcE5hbWVzOwogICAgIH0KICAgICAKQEAgLTk5LDcgKzEwMSw4IEBACiAKICAgICBwcml2YXRlIHZvaWQgY2xvbmVMb29wU3RhdGUoZmluYWwgQl9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyPD8+IGNsb25lKSB7CiAgICAgICAgIGNsb25lLm5lc3RlZExvb3BzID0gbmV3IFN0YWNrPD4oKTsKLSAgICAgICAgY2xvbmUubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICBjbG9uZS5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwPD4oQWJzdHJhY3RSZWZlcmVuY2VNYXAuUmVmZXJlbmNlU3RyZW5ndGguSEFSRCwKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5XRUFLKTsKICAgICAgICAgY29weU5lc3RlZExvb3BzKGNsb25lLm5lc3RlZExvb3BzLCBjbG9uZS5sb29wTmFtZXMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTFBfTkxfT19PQl9QX1NfU0VfU0xfVHJhdmVyc2VyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9MUF9OTF9PX09CX1BfU19TRV9TTF9UcmF2ZXJzZXIuamF2YQppbmRleCBkOGFmZTQ1Li5iYmRmODc4IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9MUF9OTF9PX09CX1BfU19TRV9TTF9UcmF2ZXJzZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9MUF9OTF9PX09CX1BfU19TRV9TTF9UcmF2ZXJzZXIuamF2YQpAQCAtMjEsMTQgKzIxLDE1IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIGltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLm1hcC5SZWZlcmVuY2VNYXA7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5tYXAuQWJzdHJhY3RSZWZlcmVuY2VNYXA7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5tYXAuUmVmZXJlbmNlTWFwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLkxhYmVsbGVkQ291bnRlcjsKIAogcHVibGljIGNsYXNzIExQX05MX09fT0JfUF9TX1NFX1NMX1RyYXZlcnNlcjxUPiBleHRlbmRzIExQX09fT0JfUF9TX1NFX1NMX1RyYXZlcnNlcjxUPiBpbXBsZW1lbnRzIE5MX1NMX1RyYXZlcnNlcjxUPiB7CiAKICAgICBwcm90ZWN0ZWQgU3RhY2s8TGFiZWxsZWRDb3VudGVyPiBuZXN0ZWRMb29wczsKLSAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwIGxvb3BOYW1lcyA9IG51bGw7CisgICAgcHJvdGVjdGVkIFJlZmVyZW5jZU1hcDxTdHJpbmcsT2JqZWN0PiBsb29wTmFtZXMgPSBudWxsOwogCiAgICAgcHJvdGVjdGVkIExQX05MX09fT0JfUF9TX1NFX1NMX1RyYXZlcnNlcigpIHsKICAgICB9CkBAIC0zNiw3ICszNyw4IEBACiAgICAgcHVibGljIExQX05MX09fT0JfUF9TX1NFX1NMX1RyYXZlcnNlcihmaW5hbCBUIHQsIGZpbmFsIFN0ZXA8VCwgPz4gc3RlcCkgewogICAgICAgICBzdXBlcih0LCBzdGVwKTsKICAgICAgICAgdGhpcy5uZXN0ZWRMb29wcyA9IG5ldyBTdGFjazw+KCk7Ci0gICAgICAgIHRoaXMubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICB0aGlzLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXA8PihBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5IQVJELAorICAgICAgICAgICAgICAgIEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLldFQUspOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDUsNyArNDcsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZWZlcmVuY2VNYXAgZ2V0TmVzdGVkTG9vcE5hbWVzKCkgeworICAgIHB1YmxpYyBSZWZlcmVuY2VNYXA8U3RyaW5nLE9iamVjdD4gZ2V0TmVzdGVkTG9vcE5hbWVzKCkgewogICAgICAgICByZXR1cm4gbG9vcE5hbWVzOwogICAgIH0KIApAQCAtMTAwLDcgKzEwMiw4IEBACiAKICAgICBwcml2YXRlIHZvaWQgY2xvbmVMb29wU3RhdGUoZmluYWwgTFBfTkxfT19PQl9QX1NfU0VfU0xfVHJhdmVyc2VyPD8+IGNsb25lKSB7CiAgICAgICAgIGNsb25lLm5lc3RlZExvb3BzID0gbmV3IFN0YWNrPD4oKTsKLSAgICAgICAgY2xvbmUubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICBjbG9uZS5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwPD4oQWJzdHJhY3RSZWZlcmVuY2VNYXAuUmVmZXJlbmNlU3RyZW5ndGguSEFSRCwKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5XRUFLKTsKICAgICAgICAgY29weU5lc3RlZExvb3BzKGNsb25lLm5lc3RlZExvb3BzLCBjbG9uZS5sb29wTmFtZXMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTFBfTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTFBfTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlci5qYXZhCmluZGV4IDg4YmU5NjcuLjFjZTUzNjIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL0xQX05MX09fT0JfU19TRV9TTF9UcmF2ZXJzZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9MUF9OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyLmphdmEKQEAgLTIxLDE0ICsyMSwxNSBAQAogCiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuUmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLkFic3RyYWN0UmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLlJlZmVyZW5jZU1hcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlN0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIudXRpbC5MYWJlbGxlZENvdW50ZXI7CiAKIHB1YmxpYyBjbGFzcyBMUF9OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGV4dGVuZHMgTFBfT19PQl9TX1NFX1NMX1RyYXZlcnNlcjxUPiBpbXBsZW1lbnRzIE5MX1NMX1RyYXZlcnNlcjxUPiB7CiAKICAgICBwcm90ZWN0ZWQgU3RhY2s8TGFiZWxsZWRDb3VudGVyPiBuZXN0ZWRMb29wczsKLSAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwIGxvb3BOYW1lcyA9IG51bGw7CisgICAgcHJvdGVjdGVkIFJlZmVyZW5jZU1hcDxTdHJpbmcsT2JqZWN0PiBsb29wTmFtZXMgPSBudWxsOwogCiAgICAgcHJvdGVjdGVkIExQX05MX09fT0JfU19TRV9TTF9UcmF2ZXJzZXIoKSB7CiAgICAgfQpAQCAtMzYsNyArMzcsOCBAQAogICAgIHB1YmxpYyBMUF9OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyKGZpbmFsIFQgdCwgZmluYWwgU3RlcDxULCA/PiBzdGVwKSB7CiAgICAgICAgIHN1cGVyKHQsIHN0ZXApOwogICAgICAgICB0aGlzLm5lc3RlZExvb3BzID0gbmV3IFN0YWNrPD4oKTsKLSAgICAgICAgdGhpcy5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwKFJlZmVyZW5jZU1hcC5IQVJELCBSZWZlcmVuY2VNYXAuV0VBSyk7CisgICAgICAgIHRoaXMubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcDw+KEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLkhBUkQsCisgICAgICAgICAgICAgICAgQWJzdHJhY3RSZWZlcmVuY2VNYXAuUmVmZXJlbmNlU3RyZW5ndGguV0VBSyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC00NSw3ICs0Nyw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlZmVyZW5jZU1hcCBnZXROZXN0ZWRMb29wTmFtZXMoKSB7CisgICAgcHVibGljIFJlZmVyZW5jZU1hcDxTdHJpbmcsT2JqZWN0PiBnZXROZXN0ZWRMb29wTmFtZXMoKSB7CiAgICAgICAgIHJldHVybiBsb29wTmFtZXM7CiAgICAgfQogCkBAIC0xMDAsNyArMTAyLDggQEAKIAogICAgIHByaXZhdGUgdm9pZCBjbG9uZUxvb3BTdGF0ZShmaW5hbCBMUF9OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyPD8+IGNsb25lKSB7CiAgICAgICAgIGNsb25lLm5lc3RlZExvb3BzID0gbmV3IFN0YWNrPD4oKTsKLSAgICAgICAgY2xvbmUubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICBjbG9uZS5sb29wTmFtZXMgPSBuZXcgUmVmZXJlbmNlTWFwPD4oQWJzdHJhY3RSZWZlcmVuY2VNYXAuUmVmZXJlbmNlU3RyZW5ndGguSEFSRCwKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5XRUFLKTsKICAgICAgICAgY29weU5lc3RlZExvb3BzKGNsb25lLm5lc3RlZExvb3BzLCBjbG9uZS5sb29wTmFtZXMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlci5qYXZhCmluZGV4IGZhMzhiYjAuLmE3OGUzZTAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL05MX09fT0JfU19TRV9TTF9UcmF2ZXJzZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci9OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyLmphdmEKQEAgLTIxLDE0ICsyMSwxNSBAQAogCiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLlN0YWNrOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuUmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLkFic3RyYWN0UmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLlJlZmVyZW5jZU1hcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlN0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIudXRpbC5MYWJlbGxlZENvdW50ZXI7CiAKIHB1YmxpYyBjbGFzcyBOTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyPFQ+IGV4dGVuZHMgT19PQl9TX1NFX1NMX1RyYXZlcnNlcjxUPiBpbXBsZW1lbnRzIE5MX1NMX1RyYXZlcnNlcjxUPiB7CiAKICAgICBwcm90ZWN0ZWQgU3RhY2s8TGFiZWxsZWRDb3VudGVyPiBuZXN0ZWRMb29wczsKLSAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwIGxvb3BOYW1lczsKKyAgICBwcm90ZWN0ZWQgUmVmZXJlbmNlTWFwPFN0cmluZyxPYmplY3Q+IGxvb3BOYW1lczsKIAogICAgIHByb3RlY3RlZCBOTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyKCkgewogICAgIH0KQEAgLTM2LDcgKzM3LDggQEAKICAgICBwdWJsaWMgTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlcihmaW5hbCBUIHQsIGZpbmFsIFN0ZXA8VCwgPz4gc3RlcCkgewogICAgICAgICBzdXBlcih0LCBzdGVwKTsKICAgICAgICAgdGhpcy5uZXN0ZWRMb29wcyA9IG5ldyBTdGFjazw+KCk7Ci0gICAgICAgIHRoaXMubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcChSZWZlcmVuY2VNYXAuSEFSRCwgUmVmZXJlbmNlTWFwLldFQUspOworICAgICAgICB0aGlzLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXA8PihBYnN0cmFjdFJlZmVyZW5jZU1hcC5SZWZlcmVuY2VTdHJlbmd0aC5IQVJELAorICAgICAgICAgICAgICAgIEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLldFQUspOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDUsNyArNDcsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZWZlcmVuY2VNYXAgZ2V0TmVzdGVkTG9vcE5hbWVzKCkgeworICAgIHB1YmxpYyBSZWZlcmVuY2VNYXA8U3RyaW5nLE9iamVjdD4gZ2V0TmVzdGVkTG9vcE5hbWVzKCkgewogICAgICAgICByZXR1cm4gbG9vcE5hbWVzOwogICAgIH0KIApAQCAtMTAwLDcgKzEwMiw4IEBACiAKICAgICBwcml2YXRlIHZvaWQgY2xvbmVMb29wU3RhdGUoZmluYWwgTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlcjw/PiBjbG9uZSkgewogICAgICAgICBjbG9uZS5uZXN0ZWRMb29wcyA9IG5ldyBTdGFjazw+KCk7Ci0gICAgICAgIGNsb25lLmxvb3BOYW1lcyA9IG5ldyBSZWZlcmVuY2VNYXAoUmVmZXJlbmNlTWFwLkhBUkQsIFJlZmVyZW5jZU1hcC5XRUFLKTsKKyAgICAgICAgY2xvbmUubG9vcE5hbWVzID0gbmV3IFJlZmVyZW5jZU1hcDw+KEFic3RyYWN0UmVmZXJlbmNlTWFwLlJlZmVyZW5jZVN0cmVuZ3RoLkhBUkQsCisgICAgICAgICAgICAgICAgQWJzdHJhY3RSZWZlcmVuY2VNYXAuUmVmZXJlbmNlU3RyZW5ndGguV0VBSyk7CiAgICAgICAgIGNvcHlOZXN0ZWRMb29wcyhjbG9uZS5uZXN0ZWRMb29wcywgY2xvbmUubG9vcE5hbWVzKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhdmVyc2VyL05MX1NMX1RyYXZlcnNlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTkxfU0xfVHJhdmVyc2VyLmphdmEKaW5kZXggN2Q1YWUwZS4uMTExODIxYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTkxfU0xfVHJhdmVyc2VyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvTkxfU0xfVHJhdmVyc2VyLmphdmEKQEAgLTI1LDcgKzI1LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuUmVmZXJlbmNlTWFwOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQubWFwLlJlZmVyZW5jZU1hcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLkxhYmVsbGVkQ291bnRlcjsKIApAQCAtNjMsNyArNjMsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiB0aGUge0BsaW5rIFJlZmVyZW5jZU1hcH0gd2hlcmUga2V5PWxvb3AgbmFtZSBhbmQgdmFsdWU9cmVmZXJlbmNlIHRvIHRoZSB7QGxpbmsgTGFiZWxsZWRDb3VudGVyfS4KICAgICAgKi8KLSAgICBkZWZhdWx0IFJlZmVyZW5jZU1hcCBnZXROZXN0ZWRMb29wTmFtZXMoKSB7CisgICAgZGVmYXVsdCBSZWZlcmVuY2VNYXA8U3RyaW5nLE9iamVjdD4gZ2V0TmVzdGVkTG9vcE5hbWVzKCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiAgICAgZGVmYXVsdCB2b2lkIGluaXRpYWxpc2VOZXN0ZWRMb29wcyhmaW5hbCBTdHJpbmcgc3RlcExhYmVsLCBmaW5hbCBTdHJpbmcgbG9vcE5hbWUpIHsKICAgICAgICAgZmluYWwgU3RhY2s8TGFiZWxsZWRDb3VudGVyPiBuZXN0ZWRMb29wcyA9IGdldE5lc3RlZExvb3BzKCk7Ci0gICAgICAgIGZpbmFsIFJlZmVyZW5jZU1hcCBsb29wTmFtZXMgPSBnZXROZXN0ZWRMb29wTmFtZXMoKTsKKyAgICAgICAgZmluYWwgUmVmZXJlbmNlTWFwPFN0cmluZywgT2JqZWN0PiBsb29wTmFtZXMgPSBnZXROZXN0ZWRMb29wTmFtZXMoKTsKICAgICAgICAgaWYgKG5lc3RlZExvb3BzLmVtcHR5KCkgfHwgIW5lc3RlZExvb3BzLnBlZWsoKS5oYXNMYWJlbChzdGVwTGFiZWwpKSB7CiAgICAgICAgICAgICBmaW5hbCBMYWJlbGxlZENvdW50ZXIgbGMgPSBuZXcgTGFiZWxsZWRDb3VudGVyKHN0ZXBMYWJlbCwgKHNob3J0KSAwKTsKICAgICAgICAgICAgIG5lc3RlZExvb3BzLnB1c2gobGMpOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkZWZhdWx0IHZvaWQgY29weU5lc3RlZExvb3BzKGZpbmFsIFN0YWNrPExhYmVsbGVkQ291bnRlcj4gdGFyZ2V0TmVzdGVkTG9vcHMsIGZpbmFsIFJlZmVyZW5jZU1hcCB0YXJnZXRMb29wTmFtZXMpIHsKKyAgICBkZWZhdWx0IHZvaWQgY29weU5lc3RlZExvb3BzKGZpbmFsIFN0YWNrPExhYmVsbGVkQ291bnRlcj4gdGFyZ2V0TmVzdGVkTG9vcHMsIGZpbmFsIFJlZmVyZW5jZU1hcDxTdHJpbmcsIE9iamVjdD4gdGFyZ2V0TG9vcE5hbWVzKSB7CiAgICAgICAgIGZpbmFsIE1hcDxMYWJlbGxlZENvdW50ZXIsIExhYmVsbGVkQ291bnRlcj4gY291bnRlck1hcHBpbmcgPSBuZXcgSGFzaE1hcDw+KCk7CiAKICAgICAgICAgZm9yIChMYWJlbGxlZENvdW50ZXIgb3JpZ2luYWwgOiBnZXROZXN0ZWRMb29wcygpKSB7CkBAIC0yMzUsOCArMjM1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChnZXROZXN0ZWRMb29wTmFtZXMoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKE9iamVjdCBlbnRyeSA6IGdldE5lc3RlZExvb3BOYW1lcygpLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBSZWZlcmVuY2VNYXAuRW50cnkgcGFpciA9IChSZWZlcmVuY2VNYXAuRW50cnkpIGVudHJ5OworICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBPYmplY3Q+IHBhaXIgOiBnZXROZXN0ZWRMb29wTmFtZXMoKS5lbnRyeVNldCgpKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgTGFiZWxsZWRDb3VudGVyIG9yaWdpbmFsID0gKExhYmVsbGVkQ291bnRlcikgcGFpci5nZXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGZpbmFsIExhYmVsbGVkQ291bnRlciBjbG9uZWQgPSBjb3VudGVyTWFwcGluZy5nZXQob3JpZ2luYWwpOwogICAgICAgICAgICAgICAgIGlmIChjbG9uZWQgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmF2ZXJzZXIvdXRpbC9JbmRleGVkVHJhdmVyc2VyU2V0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci91dGlsL0luZGV4ZWRUcmF2ZXJzZXJTZXQuamF2YQppbmRleCBkZGYwZjRjLi42MDQ4NTdjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci91dGlsL0luZGV4ZWRUcmF2ZXJzZXJTZXQuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYXZlcnNlci91dGlsL0luZGV4ZWRUcmF2ZXJzZXJTZXQuamF2YQpAQCAtMTgsNyArMTgsOCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLnV0aWw7CiAKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMubWFwLk11bHRpVmFsdWVNYXA7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5NdWx0aVZhbHVlZE1hcDsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0Lm11bHRpbWFwLkFycmF5TGlzdFZhbHVlZEhhc2hNYXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuSG9zdDsKQEAgLTMzLDcgKzM0LDcgQEAKICAqLwogcHVibGljIGNsYXNzIEluZGV4ZWRUcmF2ZXJzZXJTZXQ8UyxJPiBleHRlbmRzIFRyYXZlcnNlclNldDxTPiB7CiAKLSAgICBwcml2YXRlIGZpbmFsIE11bHRpVmFsdWVNYXAgaW5kZXggPSBuZXcgTXVsdGlWYWx1ZU1hcCgpOworICAgIHByaXZhdGUgZmluYWwgTXVsdGlWYWx1ZWRNYXA8SSxUcmF2ZXJzZXIuQWRtaW48Uz4+IGluZGV4ID0gbmV3IEFycmF5TGlzdFZhbHVlZEhhc2hNYXA8PigpOwogICAgIHByaXZhdGUgZmluYWwgRnVuY3Rpb248UyxJPiBpbmRleGluZ0Z1bmN0aW9uOwogCiAgICAgcHVibGljIEluZGV4ZWRUcmF2ZXJzZXJTZXQoZmluYWwgRnVuY3Rpb248UywgST4gaW5kZXhpbmdGdW5jdGlvbikgewpAQCAtNzAsNyArNzEsNyBAQAogICAgICAqIEByZXR1cm4KICAgICAgKi8KICAgICBwdWJsaWMgQ29sbGVjdGlvbjxUcmF2ZXJzZXIuQWRtaW48Uz4+IGdldChmaW5hbCBJIGspIHsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxUcmF2ZXJzZXIuQWRtaW48Uz4+IGMgPSBpbmRleC5nZXRDb2xsZWN0aW9uKGspOworICAgICAgICBmaW5hbCBDb2xsZWN0aW9uPFRyYXZlcnNlci5BZG1pbjxTPj4gYyA9IGluZGV4LmdldChrKTsKIAogICAgICAgICAvLyBpZiByZW1vdmUoKSBpcyBjYWxsZWQgb24gdGhpcyBjbGFzcywgdGhlbiB0aGUgTXVsdGlWYWx1ZU1hcCAqbWF5KiAoamF2YWRvYyB3YXNuJ3QgY2xlYXIKICAgICAgICAgLy8gd2hhdCB0aGUgZXhwZWN0YXRpb24gd2FzIC0gdXNlZCB0aGUgd29yZCAidHlwaWNhbGx5IikgcmV0dXJuIGFuIGVtcHR5IGxpc3QgaWYgdGhlIGxhc3QKQEAgLTg3LDcgKzg4LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgVHJhdmVyc2VyLkFkbWluPFM+IHJlbW92ZSgpIHsKICAgICAgICAgZmluYWwgVHJhdmVyc2VyLkFkbWluPFM+IHJlbW92ZWQgPSBzdXBlci5yZW1vdmUoKTsKLSAgICAgICAgaW5kZXgucmVtb3ZlKGluZGV4aW5nRnVuY3Rpb24uYXBwbHkocmVtb3ZlZC5nZXQoKSksIHJlbW92ZWQpOworICAgICAgICBpbmRleC5yZW1vdmVNYXBwaW5nKGluZGV4aW5nRnVuY3Rpb24uYXBwbHkocmVtb3ZlZC5nZXQoKSksIHJlbW92ZWQpOwogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9CiAKQEAgLTk3LDcgKzk4LDcgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBvYmplY3QgdG8gcmVtb3ZlIG11c3QgYmUgdHJhdmVyc2VyIik7CiAKICAgICAgICAgZmluYWwgYm9vbGVhbiByZW1vdmVkID0gc3VwZXIucmVtb3ZlKHRyYXZlcnNlcik7Ci0gICAgICAgIGlmIChyZW1vdmVkKSBpbmRleC5yZW1vdmUoaW5kZXhpbmdGdW5jdGlvbi5hcHBseSgoKFRyYXZlcnNlci5BZG1pbjxTPikgdHJhdmVyc2VyKS5nZXQoKSksIHRyYXZlcnNlcik7CisgICAgICAgIGlmIChyZW1vdmVkKSBpbmRleC5yZW1vdmVNYXBwaW5nKGluZGV4aW5nRnVuY3Rpb24uYXBwbHkoKChUcmF2ZXJzZXIuQWRtaW48Uz4pIHRyYXZlcnNlcikuZ2V0KCkpLCB0cmF2ZXJzZXIpOwogICAgICAgICByZXR1cm4gcmVtb3ZlZDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdXRpbC9CeXRlY29kZUhlbHBlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0J5dGVjb2RlSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZGE2YWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0J5dGVjb2RlSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdGVwLm1hcC5Db25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlBhZ2VSYW5rVmVydGV4UHJvZ3JhbVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdGVwLm1hcC5QZWVyUHJlc3N1cmVWZXJ0ZXhQcm9ncmFtU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlByb2dyYW1WZXJ0ZXhQcm9ncmFtU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlNob3J0ZXN0UGF0aFZlcnRleFByb2dyYW1TdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guQnJhbmNoU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLkNob29zZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5Mb2NhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5PcHRpb25hbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5SZXBlYXRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guVW5pb25TdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuQWxsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkFuZFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5BbnlTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuQ29pblN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5EZWR1cEdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5Ecm9wU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkhhc1N0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5Jc1N0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5MYW1iZGFGaWx0ZXJTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRGlzY2FyZFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5Ob25lU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLk5vdFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5PclN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5QYXRoRmlsdGVyU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlJhbmdlR2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlNhbXBsZUdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5UYWlsR2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlRpbWVMaW1pdFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5UcmF2ZXJzYWxGaWx0ZXJTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuV2hlcmVQcmVkaWNhdGVTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuV2hlcmVUcmF2ZXJzYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQWRkRWRnZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5BZGRWZXJ0ZXhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQXNCb29sU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkFzRGF0ZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Bc051bWJlclN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Bc1N0cmluZ0dsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Bc1N0cmluZ0xvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNhbGxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ29hbGVzY2VTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ29tYmluZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db25jYXRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ29uam9pblN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db25zdGFudFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db3VudEdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db3VudExvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkRhdGVBZGRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRGF0ZURpZmZTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRGVkdXBMb2NhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5EaWZmZXJlbmNlU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkRpc2p1bmN0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkVkZ2VWZXJ0ZXhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRWxlbWVudE1hcFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5FbGVtZW50U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkZvbGRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRm9ybWF0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyb3VwQ291bnRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JvdXBTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuSWRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuSW5kZXhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuSW50ZXJzZWN0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkxUcmltR2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkxUcmltTG9jYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTGFiZWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTGFtYmRhQ29sbGVjdGluZ0JhcnJpZXJTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTGFtYmRhRmxhdE1hcFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5MYW1iZGFNYXBTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTGVuZ3RoR2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkxlbmd0aExvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkxvb3BzU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF4R2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1heExvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lYW5HbG9iYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWVhbkxvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lcmdlRWRnZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NZXJnZVZlcnRleFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NaW5HbG9iYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTm9PcEJhcnJpZXJTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJHbG9iYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJMb2NhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QYXRoU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb2R1Y3RTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvamVjdFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9wZXJ0aWVzU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb3BlcnR5S2V5U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb3BlcnR5TWFwU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb3BlcnR5VmFsdWVTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUlRyaW1HbG9iYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUlRyaW1Mb2NhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5SYW5nZUxvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlcGxhY2VHbG9iYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUmVwbGFjZUxvY2FsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJldmVyc2VTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU2Fja1N0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TYW1wbGVMb2NhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TZWxlY3RPbmVTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU2VsZWN0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlNwbGl0R2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlNwbGl0TG9jYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU3Vic3RyaW5nR2xvYmFsU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlN1bUdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TdW1Mb2NhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5UYWlsTG9jYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVG9Mb3dlckdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Ub0xvd2VyTG9jYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVG9VcHBlckdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Ub1VwcGVyTG9jYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVHJhdmVyc2FsRmxhdE1hcFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5UcmF2ZXJzYWxNYXBTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWVyZ2VTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVHJhdmVyc2FsU2VsZWN0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlRyZWVTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVHJpbUdsb2JhbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5UcmltTG9jYWxTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVW5mb2xkU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlZlcnRleFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuQWRkUHJvcGVydHlTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkFnZ3JlZ2F0ZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuRmFpbFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuR3JvdXBDb3VudFNpZGVFZmZlY3RTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0Lkdyb3VwU2lkZUVmZmVjdFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuSWRlbnRpdHlTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkluamVjdFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuSW9TdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkxhbWJkYVNpZGVFZmZlY3RTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tWYWx1ZVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2lkZUVmZmVjdENhcFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlRyYXZlcnNhbFNpZGVFZmZlY3RTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlRyZWVTaWRlRWZmZWN0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5Qcm9maWxlU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LlRyYXZlcnNhbFN0cmF0ZWd5UHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uUHJlZGljYXRlOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwotCi0vKioKLSAqIFV0aWxpdHkgY2xhc3MgZm9yIHBhcnNpbmcge0BsaW5rIEJ5dGVjb2RlfS4KLSAqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEJ5dGVjb2RlSGVscGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PENsYXNzPD8gZXh0ZW5kcyBTdGVwPj4+IGJ5dGVDb2RlU3ltYm9sU3RlcE1hcDsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8Q2xhc3M8PyBleHRlbmRzIFN0ZXA+Pj4gb3BlcmF0aW9uU3RlcE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxDbGFzczw/IGV4dGVuZHMgU3RlcD4+PigpIHt7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tYXAsIEFycmF5cy5hc0xpc3QoTGFtYmRhTWFwU3RlcC5jbGFzcywgVHJhdmVyc2FsTWFwU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZmxhdE1hcCwgQXJyYXlzLmFzTGlzdChMYW1iZGFGbGF0TWFwU3RlcC5jbGFzcywgVHJhdmVyc2FsRmxhdE1hcFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmlkLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KElkU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubGFiZWwsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoTGFiZWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pZGVudGl0eSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChJZGVudGl0eVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNvbnN0YW50LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KENvbnN0YW50U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuViwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChHcmFwaFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLkUsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoR3JhcGhTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50bywgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3V0LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJvdGgsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoVmVydGV4U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudG9FLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm91dEUsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoVmVydGV4U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW5FLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJvdGhFLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRvViwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChFZGdlVmVydGV4U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3V0ViwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChFZGdlVmVydGV4U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW5WLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEVkZ2VWZXJ0ZXhTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5ib3RoViwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChFZGdlVmVydGV4U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3RoZXJWLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEVkZ2VWZXJ0ZXhTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5vcmRlciwgQXJyYXlzLmFzTGlzdChPcmRlckdsb2JhbFN0ZXAuY2xhc3MsIE9yZGVyTG9jYWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5wcm9wZXJ0aWVzLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFByb3BlcnRpZXNTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy52YWx1ZXMsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUHJvcGVydGllc1N0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnByb3BlcnR5TWFwLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFByb3BlcnR5TWFwU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudmFsdWVNYXAsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUHJvcGVydHlNYXBTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5lbGVtZW50TWFwLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEVsZW1lbnRNYXBTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zZWxlY3QsIEFycmF5cy5hc0xpc3QoU2VsZWN0U3RlcC5jbGFzcywgU2VsZWN0T25lU3RlcC5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgVHJhdmVyc2FsU2VsZWN0U3RlcC5jbGFzcywgVHJhdmVyc2FsTWFwU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMua2V5LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFByb3BlcnR5S2V5U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudmFsdWUsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUHJvcGVydHlWYWx1ZVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnBhdGgsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUGF0aFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1hdGNoLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KE1hdGNoU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWF0aCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChNYXRoU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc2FjaywgQXJyYXlzLmFzTGlzdChTYWNrU3RlcC5jbGFzcywgU2Fja1ZhbHVlU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubG9vcHMsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoTG9vcHNTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5wcm9qZWN0LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFByb2plY3RTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy51bmZvbGQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoVW5mb2xkU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZm9sZCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChGb2xkU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY291bnQsIEFycmF5cy5hc0xpc3QoQ291bnRHbG9iYWxTdGVwLmNsYXNzLCBDb3VudExvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc3VtLCBBcnJheXMuYXNMaXN0KFN1bUdsb2JhbFN0ZXAuY2xhc3MsIFN1bUxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWF4LCBBcnJheXMuYXNMaXN0KE1heEdsb2JhbFN0ZXAuY2xhc3MsIE1heExvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWluLCBBcnJheXMuYXNMaXN0KE1pbkdsb2JhbFN0ZXAuY2xhc3MsIE1pbkdsb2JhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lYW4sIEFycmF5cy5hc0xpc3QoTWVhbkdsb2JhbFN0ZXAuY2xhc3MsIE1lYW5Mb2NhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNvbmNhdCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChDb25jYXRTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5mb3JtYXQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoRm9ybWF0U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYXNTdHJpbmcsIEFycmF5cy5hc0xpc3QoQXNTdHJpbmdHbG9iYWxTdGVwLmNsYXNzLCBBc1N0cmluZ0xvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubGVuZ3RoLCBBcnJheXMuYXNMaXN0KExlbmd0aEdsb2JhbFN0ZXAuY2xhc3MsIExlbmd0aExvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudG9Mb3dlciwgQXJyYXlzLmFzTGlzdChUb0xvd2VyR2xvYmFsU3RlcC5jbGFzcywgVG9Mb3dlckxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudG9VcHBlciwgQXJyYXlzLmFzTGlzdChUb1VwcGVyR2xvYmFsU3RlcC5jbGFzcywgVG9VcHBlckxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudHJpbSwgQXJyYXlzLmFzTGlzdChUcmltR2xvYmFsU3RlcC5jbGFzcywgVHJpbUxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubFRyaW0sIEFycmF5cy5hc0xpc3QoTFRyaW1HbG9iYWxTdGVwLmNsYXNzLCBMVHJpbUxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuclRyaW0sIEFycmF5cy5hc0xpc3QoUlRyaW1HbG9iYWxTdGVwLmNsYXNzLCBSVHJpbUxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucmV2ZXJzZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChSZXZlcnNlU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucmVwbGFjZSwgQXJyYXlzLmFzTGlzdChSZXBsYWNlR2xvYmFsU3RlcC5jbGFzcywgUmVwbGFjZUxvY2FsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuc3Vic3RyaW5nLCBBcnJheXMuYXNMaXN0KFN1YnN0cmluZ0dsb2JhbFN0ZXAuY2xhc3MsIFJlcGxhY2VMb2NhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnNwbGl0LCBBcnJheXMuYXNMaXN0KFNwbGl0R2xvYmFsU3RlcC5jbGFzcywgU3BsaXRMb2NhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFzQm9vbCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChBc0Jvb2xTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hc0RhdGUsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQXNEYXRlU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZGF0ZUFkZCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChEYXRlQWRkU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZGF0ZURpZmYsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoRGF0ZURpZmZTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hc051bWJlciwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChBc051bWJlclN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFsbCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChBbGxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hbnksIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQW55U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubm9uZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChOb25lU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY29tYmluZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChDb21iaW5lU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZGlmZmVyZW5jZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChEaWZmZXJlbmNlU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZGlzanVuY3QsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoRGlzanVuY3RTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5tZXJnZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChNZXJnZVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNvbmpvaW4sIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQ29uam9pblN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnByb2R1Y3QsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUHJvZHVjdFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmludGVyc2VjdCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChJbnRlcnNlY3RTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5ncm91cCwgQXJyYXlzLmFzTGlzdChHcm91cFN0ZXAuY2xhc3MsIEdyb3VwU2lkZUVmZmVjdFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmdyb3VwQ291bnQsIEFycmF5cy5hc0xpc3QoR3JvdXBDb3VudFN0ZXAuY2xhc3MsIEdyb3VwQ291bnRTaWRlRWZmZWN0U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudHJlZSwgQXJyYXlzLmFzTGlzdChUcmVlU3RlcC5jbGFzcywgVHJlZVNpZGVFZmZlY3RTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hZGRWLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEFkZFZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFkZEUsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQWRkRWRnZVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlViwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChNZXJnZVZlcnRleFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChNZXJnZUVkZ2VTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5mcm9tLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5maWx0ZXIsIEFycmF5cy5hc0xpc3QoTGFtYmRhRmlsdGVyU3RlcC5jbGFzcywgVHJhdmVyc2FsRmlsdGVyU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3IsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoT3JTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5hbmQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQW5kU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaW5qZWN0LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEluamVjdFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmRlZHVwLCBBcnJheXMuYXNMaXN0KERlZHVwR2xvYmFsU3RlcC5jbGFzcywgRGVkdXBMb2NhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLndoZXJlLCBBcnJheXMuYXNMaXN0KFdoZXJlUHJlZGljYXRlU3RlcC5jbGFzcywgV2hlcmVUcmF2ZXJzYWxTdGVwLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBUcmF2ZXJzYWxGaWx0ZXJTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5oYXMsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoSGFzU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuaGFzTm90LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KE5vdFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhc0xhYmVsLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEhhc1N0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhc0lkLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEhhc1N0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmhhc0tleSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChIYXNTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5oYXNWYWx1ZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChIYXNTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pcywgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChJc1N0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm5vdCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChOb3RTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5yYW5nZSwgQXJyYXlzLmFzTGlzdChSYW5nZUdsb2JhbFN0ZXAuY2xhc3MsIFJhbmdlTG9jYWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5saW1pdCwgQXJyYXlzLmFzTGlzdChSYW5nZUdsb2JhbFN0ZXAuY2xhc3MsIFJhbmdlTG9jYWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5za2lwLCBBcnJheXMuYXNMaXN0KFJhbmdlR2xvYmFsU3RlcC5jbGFzcywgUmFuZ2VMb2NhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRhaWwsIEFycmF5cy5hc0xpc3QoVGFpbEdsb2JhbFN0ZXAuY2xhc3MsIFRhaWxMb2NhbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNvaW4sIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQ29pblN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmlvLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KElvU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucmVhZCwgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMud3JpdGUsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNhbGwsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQ2FsbFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmVsZW1lbnQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoRWxlbWVudFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnRpbWVMaW1pdCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChUaW1lTGltaXRTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zaW1wbGVQYXRoLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFBhdGhGaWx0ZXJTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jeWNsaWNQYXRoLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFBhdGhGaWx0ZXJTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zYW1wbGUsIEFycmF5cy5hc0xpc3QoU2FtcGxlR2xvYmFsU3RlcC5jbGFzcywgU2FtcGxlTG9jYWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5kcm9wLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KERyb3BTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zaWRlRWZmZWN0LCBBcnJheXMuYXNMaXN0KExhbWJkYVNpZGVFZmZlY3RTdGVwLmNsYXNzLCBUcmF2ZXJzYWxTaWRlRWZmZWN0U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2FwLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFNpZGVFZmZlY3RDYXBTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5wcm9wZXJ0eSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChBZGRQcm9wZXJ0eVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFnZ3JlZ2F0ZSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChBZ2dyZWdhdGVTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5mYWlsLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEZhaWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5zdWJncmFwaCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChTdWJncmFwaFN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJhcnJpZXIsIEFycmF5cy5hc0xpc3QoTm9PcEJhcnJpZXJTdGVwLmNsYXNzLCBMYW1iZGFDb2xsZWN0aW5nQmFycmllclN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluZGV4LCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEluZGV4U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubG9jYWwsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoTG9jYWxTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5lbWl0LCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5yZXBlYXQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUmVwZWF0U3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudW50aWwsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJyYW5jaCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChCcmFuY2hTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy51bmlvbiwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChVbmlvblN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmNvYWxlc2NlLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KENvYWxlc2NlU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuY2hvb3NlLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KENob29zZVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm9wdGlvbmFsLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KE9wdGlvbmFsU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucGFnZVJhbmssIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucGVlclByZXNzdXJlLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KFBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW1TdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jb25uZWN0ZWRDb21wb25lbnQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoQ29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnNob3J0ZXN0UGF0aCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChTaG9ydGVzdFBhdGhWZXJ0ZXhQcm9ncmFtU3RlcC5jbGFzcykpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMucHJvZ3JhbSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChQcm9ncmFtVmVydGV4UHJvZ3JhbVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJ5LCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy53aXRoLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50aW1lcywgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuYXMsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm9wdGlvbiwgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgcHV0KFRyYXZlcnNhbC5TeW1ib2xzLnByb2ZpbGUsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoUHJvZmlsZVN0ZXAuY2xhc3MpKTsKLSAgICAgICAgICAgIHB1dChUcmF2ZXJzYWwuU3ltYm9scy5kaXNjYXJkLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KERpc2NhcmRTdGVwLmNsYXNzKSk7Ci0gICAgICAgICAgICBwdXQoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIHB1dChUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRob3V0U3RyYXRlZ2llcywgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgcHV0KFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhTdHJhdGVnaWVzLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNpZGVFZmZlY3QsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIHB1dChUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoUmVtb3RlLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aENvbXB1dGVyLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgICAgICBwdXQoR3JhcGhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoQnVsaywgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpOwotICAgICAgICAgICAgcHV0KEdyYXBoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFBhdGgsIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKLSAgICAgICAgICAgIHB1dChHcmFwaFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLnR4LCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7Ci0gICAgICAgIH19OwotICAgICAgICBieXRlQ29kZVN5bWJvbFN0ZXBNYXAgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAob3BlcmF0aW9uU3RlcE1hcCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBCeXRlY29kZUhlbHBlcigpIHsKLSAgICAgICAgLy8gcHVibGljIHN0YXRpYyBtZXRob2RzIG9ubHkKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXJzZXMge0BsaW5rIEJ5dGVjb2RlfSB0byBmaW5kIHtAbGluayBUcmF2ZXJzYWxTdHJhdGVneX0gb2JqZWN0cyBhZGRlZCBpbiB0aGUgc291cmNlIGluc3RydWN0aW9ucy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIDxBIGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3k+IEl0ZXJhdG9yPEE+IGZpbmRTdHJhdGVnaWVzKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBDbGFzczxBPiBjbGF6eikgewotICAgICAgICByZXR1cm4gSXRlcmF0b3JVdGlscy5tYXAoCi0gICAgICAgICAgICAgICAgSXRlcmF0b3JVdGlscy5maWx0ZXIoYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuaXRlcmF0b3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgLT4gcy5nZXRPcGVyYXRvcigpLmVxdWFscyhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU3RyYXRlZ2llcykgJiYgY2xhenouaXNBc3NpZ25hYmxlRnJvbShzLmdldEFyZ3VtZW50cygpWzBdLmdldENsYXNzKCkpKSwKLSAgICAgICAgICAgICAgICBvcyAtPiAoQSkgb3MuZ2V0QXJndW1lbnRzKClbMF0pOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZW1vdmVTdHJhdGVnaWVzKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBTdHJpbmcgb3BlcmF0b3IsIGZpbmFsIENsYXNzPFRyYXZlcnNhbFN0cmF0ZWd5PltdIGNsYXp6ZXMpIHsKLSAgICAgICAgcmV0dXJuIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLnJlbW92ZUlmKAotICAgICAgICAgICAgICAgIHMgLT4gewotICAgICAgICAgICAgICAgICAgICBpZiAoIW9wZXJhdG9yLmVxdWFscyhzLmdldE9wZXJhdG9yKCkpIHx8IGNsYXp6ZXMubGVuZ3RoICE9IHMuZ2V0QXJndW1lbnRzKCkubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGF6emVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PiBzQ2xhc3MgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmdldEFyZ3VtZW50cygpW2ldIGluc3RhbmNlb2YgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSBzLmdldEFyZ3VtZW50cygpW2ldKS5nZXRTdHJhdGVneUNsYXNzKCkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocy5nZXRBcmd1bWVudHMoKVtpXSBpbnN0YW5jZW9mIENsYXNzKSA/IChDbGFzczw/Pikgcy5nZXRBcmd1bWVudHMoKVtpXSA6IHMuZ2V0QXJndW1lbnRzKClbaV0uZ2V0Q2xhc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjbGF6emVzW2ldLmlzQXNzaWduYWJsZUZyb20oc0NsYXNzKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZWNvZGUgZmlsdGVySW5zdHJ1Y3Rpb25zKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBQcmVkaWNhdGU8Qnl0ZWNvZGUuSW5zdHJ1Y3Rpb24+IHByZWRpY2F0ZSkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBjbG9uZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAgICAgIGlmIChwcmVkaWNhdGUudGVzdChpbnN0cnVjdGlvbikpCi0gICAgICAgICAgICAgICAgY2xvbmUuYWRkU291cmNlKGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCksIGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICBpZiAocHJlZGljYXRlLnRlc3QoaW5zdHJ1Y3Rpb24pKQotICAgICAgICAgICAgICAgIGNsb25lLmFkZFN0ZXAoaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKSwgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjbG9uZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgdGhlIGJ5dGVjb2RlIGlzIG9uZSBvZiB0aGUgc3RhbmRhcmQge0BsaW5rIEdyYXBoT3B9IG9wdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzR3JhcGhPcGVyYXRpb24oZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpIHsKLSAgICAgICAgcmV0dXJuIFN0cmVhbS5vZihHcmFwaE9wLnZhbHVlcygpKS5hbnlNYXRjaChvcCAtPiBvcC5lcXVhbHMoYnl0ZWNvZGUpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0TGFtYmRhTGFuZ3VhZ2UoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpIHsKLSAgICAgICAgZm9yIChmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA6IGJ5dGVjb2RlLmdldEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICBmb3IgKE9iamVjdCBvYmplY3QgOiBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBMYW1iZGEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZigoKExhbWJkYSkgb2JqZWN0KS5nZXRMYW1iZGFMYW5ndWFnZSgpKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCeXRlY29kZSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBPcHRpb25hbDxTdHJpbmc+IHRlbXAgPSBCeXRlY29kZUhlbHBlci5nZXRMYW1iZGFMYW5ndWFnZSgoQnl0ZWNvZGUpIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBPcHRpb25hbC5lbXB0eSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZW1vdmVCaW5kaW5ncyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0SW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE9iamVjdFtdIGFyZ3VtZW50cyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldIGluc3RhbmNlb2YgQnl0ZWNvZGUuQmluZGluZykKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gKChCeXRlY29kZS5CaW5kaW5nKSBhcmd1bWVudHNbaV0pLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzW2ldIGluc3RhbmNlb2YgQnl0ZWNvZGUpCi0gICAgICAgICAgICAgICAgICAgIHJlbW92ZUJpbmRpbmdzKChCeXRlY29kZSkgYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkZXRhY2hFbGVtZW50cyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0SW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE9iamVjdFtdIGFyZ3VtZW50cyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldIGluc3RhbmNlb2YgQnl0ZWNvZGUpCi0gICAgICAgICAgICAgICAgICAgIGRldGFjaEVsZW1lbnRzKChCeXRlY29kZSkgYXJndW1lbnRzW2ldKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGFyZ3VtZW50c1tpXSBpbnN0YW5jZW9mIExpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yKGZpbmFsIE9iamVjdCBvYmplY3QgOiAoTGlzdClhcmd1bWVudHNbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKERldGFjaGVkRmFjdG9yeS5kZXRhY2gob2JqZWN0LCBmYWxzZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1tpXSA9IGxpc3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gRGV0YWNoZWRGYWN0b3J5LmRldGFjaChhcmd1bWVudHNbaV0sIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBsaXN0IG9mIHtAbGluayBTdGVwfSB3aGljaCBjYW4gYmUgYWRkZWQgdG8gdGhlIHRyYXZlcnNhbCBmb3IgdGhlIHByb3ZpZGVkIG9wZXJhdG9yLgotICAgICAqIDxwPgotICAgICAqIEdyYXBoIFRyYXZlcnNhbCBtYXkgb3IgbWF5IG5vdCBhZGQgdGhlIHJldHVybmVkIGxpc3Qgb2Ygc3RlcHMgaW50byB0aGUgdHJhdmVyc2FsLiBMaXN0IG9ubHkgcmVwcmVzZW50cwotICAgICAqIHBvc3NpYmxlIHN0ZXBzIGFkZGVkIHRvIHRyYXZlcnNhbCBnaXZlbiBhbiBvcGVyYXRvci4KLSAgICAgKiA8L3A+Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gb3BlcmF0b3IgR3JhcGggb3BlcmF0b3IKLSAgICAgKiBAcmV0dXJuIExpc3Qgb2YgcG9zc2libGUge0BsaW5rIFN0ZXB9KHMpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBMaXN0PENsYXNzPD8gZXh0ZW5kcyBTdGVwPj4gZmluZFBvc3NpYmxlVHJhdmVyc2FsU3RlcHMoZmluYWwgU3RyaW5nIG9wZXJhdG9yKSB7Ci0gICAgICAgIGlmICghYnl0ZUNvZGVTeW1ib2xTdGVwTWFwLmNvbnRhaW5zS2V5KG9wZXJhdG9yKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5hYmxlIHRvIGZpbmQgVHJhdmVyc2FsIHN0ZXBzIGZvciB0aGUgZ3JhcGggb3BlcmF0b3I6ICIgKyBvcGVyYXRvcik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ5dGVDb2RlU3ltYm9sU3RlcE1hcC5nZXQob3BlcmF0b3IpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdXRpbC9EZWZhdWx0VHJhdmVyc2FsLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRGVmYXVsdFRyYXZlcnNhbC5qYXZhCmluZGV4IDJmNGU1NDMuLmIwYmJkMTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdXRpbC9EZWZhdWx0VHJhdmVyc2FsLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0RlZmF1bHRUcmF2ZXJzYWwuamF2YQpAQCAtMTksNyArMTksNyBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWw7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlZlcnRleFByb2dyYW1TdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdWYWx1ZU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwpAQCAtNzAsMjggKzcwLDI4IEBACiAKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBsb2NrZWQgPSBmYWxzZTsKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjbG9zZWQgPSBmYWxzZTsKLSAgICBwcm90ZWN0ZWQgQnl0ZWNvZGUgYnl0ZWNvZGU7CisgICAgcHJvdGVjdGVkIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nOwogICAgIHByb3RlY3RlZCBHVmFsdWVNYW5hZ2VyIGdWYWx1ZU1hbmFnZXI7CiAKLSAgICBwcml2YXRlIERlZmF1bHRUcmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgdHJhdmVyc2FsU3RyYXRlZ2llcywgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpIHsKKyAgICBwcml2YXRlIERlZmF1bHRUcmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgdHJhdmVyc2FsU3RyYXRlZ2llcywgZmluYWwgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcpIHsKICAgICAgICAgdGhpcy5ncmFwaCA9IGdyYXBoOwogICAgICAgICB0aGlzLnN0cmF0ZWdpZXMgPSB0cmF2ZXJzYWxTdHJhdGVnaWVzOwotICAgICAgICB0aGlzLmJ5dGVjb2RlID0gYnl0ZWNvZGU7CisgICAgICAgIHRoaXMuZ3JlbWxpbkxhbmcgPSBncmVtbGluTGFuZzsKICAgICAgICAgdGhpcy5nVmFsdWVNYW5hZ2VyID0gbmV3IEdWYWx1ZU1hbmFnZXIoKTsKICAgICAgICAgdGhpcy5nID0gbnVsbDsKICAgICB9CiAKICAgICBwdWJsaWMgRGVmYXVsdFRyYXZlcnNhbChmaW5hbCBHcmFwaCBncmFwaCkgewotICAgICAgICB0aGlzKGdyYXBoLCBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlLmdldFN0cmF0ZWdpZXMoZ3JhcGguZ2V0Q2xhc3MoKSksIG5ldyBCeXRlY29kZSgpKTsKKyAgICAgICAgdGhpcyhncmFwaCwgVHJhdmVyc2FsU3RyYXRlZ2llcy5HbG9iYWxDYWNoZS5nZXRTdHJhdGVnaWVzKGdyYXBoLmdldENsYXNzKCkpLCBuZXcgR3JlbWxpbkxhbmcoKSk7CiAgICAgfQogCiAgICAgcHVibGljIERlZmF1bHRUcmF2ZXJzYWwoZmluYWwgVHJhdmVyc2FsU291cmNlIHRyYXZlcnNhbFNvdXJjZSkgewotICAgICAgICB0aGlzKHRyYXZlcnNhbFNvdXJjZS5nZXRHcmFwaCgpLCB0cmF2ZXJzYWxTb3VyY2UuZ2V0U3RyYXRlZ2llcygpLCB0cmF2ZXJzYWxTb3VyY2UuZ2V0Qnl0ZWNvZGUoKSk7CisgICAgICAgIHRoaXModHJhdmVyc2FsU291cmNlLmdldEdyYXBoKCksIHRyYXZlcnNhbFNvdXJjZS5nZXRTdHJhdGVnaWVzKCksIHRyYXZlcnNhbFNvdXJjZS5nZXRHcmVtbGluTGFuZygpKTsKICAgICAgICAgdGhpcy5nID0gdHJhdmVyc2FsU291cmNlOwogICAgIH0KIAogICAgIHB1YmxpYyBEZWZhdWx0VHJhdmVyc2FsKGZpbmFsIFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIERlZmF1bHRUcmF2ZXJzYWwuQWRtaW48UyxFPiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgdGhpcyh0cmF2ZXJzYWxTb3VyY2UuZ2V0R3JhcGgoKSwgdHJhdmVyc2FsU291cmNlLmdldFN0cmF0ZWdpZXMoKSwgdHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpOworICAgICAgICB0aGlzKHRyYXZlcnNhbFNvdXJjZS5nZXRHcmFwaCgpLCB0cmF2ZXJzYWxTb3VyY2UuZ2V0U3RyYXRlZ2llcygpLCB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKSk7CiAgICAgICAgIHRoaXMuZyA9IHRyYXZlcnNhbFNvdXJjZTsKICAgICAgICAgc3RlcHMuYWRkQWxsKHRyYXZlcnNhbC5nZXRTdGVwcygpKTsKICAgICAgICAgZm9yIChTdGVwIHN0ZXAgOiB0cmF2ZXJzYWwuZ2V0U3RlcHMoKSkgewpAQCAtMTAwLDE1ICsxMDAsMTUgQEAKICAgICB9CiAKICAgICBwdWJsaWMgRGVmYXVsdFRyYXZlcnNhbCgpIHsKLSAgICAgICAgdGhpcyhFbXB0eUdyYXBoLmluc3RhbmNlKCksIFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUuZ2V0U3RyYXRlZ2llcyhFbXB0eUdyYXBoLmNsYXNzKSwgbmV3IEJ5dGVjb2RlKCkpOworICAgICAgICB0aGlzKEVtcHR5R3JhcGguaW5zdGFuY2UoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcy5HbG9iYWxDYWNoZS5nZXRTdHJhdGVnaWVzKEVtcHR5R3JhcGguY2xhc3MpLCBuZXcgR3JlbWxpbkxhbmcoKSk7CiAgICAgfQogCi0gICAgcHVibGljIERlZmF1bHRUcmF2ZXJzYWwoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUpIHsKLSAgICAgICAgdGhpcyhFbXB0eUdyYXBoLmluc3RhbmNlKCksIFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUuZ2V0U3RyYXRlZ2llcyhFbXB0eUdyYXBoLmNsYXNzKSwgYnl0ZWNvZGUpOworICAgIHB1YmxpYyBEZWZhdWx0VHJhdmVyc2FsKGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKSB7CisgICAgICAgIHRoaXMoRW1wdHlHcmFwaC5pbnN0YW5jZSgpLCBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlLmdldFN0cmF0ZWdpZXMoRW1wdHlHcmFwaC5jbGFzcyksIGdyZW1saW5MYW5nKTsKICAgICB9CiAKLSAgICBwdWJsaWMgQnl0ZWNvZGUgZ2V0Qnl0ZWNvZGUoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmJ5dGVjb2RlOworICAgIHB1YmxpYyBHcmVtbGluTGFuZyBnZXRHcmVtbGluTGFuZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZ3JlbWxpbkxhbmc7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0yOTQsNyArMjk0LDcgQEAKICAgICAgICAgICAgIGNsb25lLnVubW9kaWZpYWJsZVN0ZXBzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChjbG9uZS5zdGVwcyk7CiAgICAgICAgICAgICBjbG9uZS5zaWRlRWZmZWN0cyA9IHRoaXMuc2lkZUVmZmVjdHMuY2xvbmUoKTsKICAgICAgICAgICAgIGNsb25lLnN0cmF0ZWdpZXMgPSB0aGlzLnN0cmF0ZWdpZXM7Ci0gICAgICAgICAgICBjbG9uZS5ieXRlY29kZSA9IHRoaXMuYnl0ZWNvZGUuY2xvbmUoKTsKKyAgICAgICAgICAgIGNsb25lLmdyZW1saW5MYW5nID0gdGhpcy5ncmVtbGluTGFuZy5jbG9uZSgpOwogICAgICAgICAgICAgY2xvbmUuZ1ZhbHVlTWFuYWdlciA9IHRoaXMuZ1ZhbHVlTWFuYWdlci5jbG9uZSgpOwogICAgICAgICAgICAgZm9yIChmaW5hbCBTdGVwPD8sID8+IHN0ZXAgOiB0aGlzLnN0ZXBzKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RlcDw/LCA/PiBjbG9uZWRTdGVwID0gc3RlcC5jbG9uZSgpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0VtcHR5VHJhdmVyc2FsLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRW1wdHlUcmF2ZXJzYWwuamF2YQppbmRleCAzNGM2ZmY5Li4yZWZkNTljIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRW1wdHlUcmF2ZXJzYWwuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRW1wdHlUcmF2ZXJzYWwuamF2YQpAQCAtMTgsNyArMTgsNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbDsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdWYWx1ZU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwpAQCAtNTQsOCArNTQsOCBAQAogCiAgICAgfQogCi0gICAgcHVibGljIEJ5dGVjb2RlIGdldEJ5dGVjb2RlKCkgewotICAgICAgICByZXR1cm4gbmV3IEJ5dGVjb2RlKCk7CisgICAgcHVibGljIEdyZW1saW5MYW5nIGdldEdyZW1saW5MYW5nKCkgeworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5MYW5nKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvTGlzdEZ1bmN0aW9uLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvTGlzdEZ1bmN0aW9uLmphdmEKaW5kZXggNDRlMzBhMi4uM2FhMmQ5OSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0xpc3RGdW5jdGlvbi5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdXRpbC9MaXN0RnVuY3Rpb24uamF2YQpAQCAtMzksNyArMzksNyBAQAogICAgICAqIEBwYXJhbSBpdGVyYWJsZSBhbiBJdGVyYWJsZSBvciBhcnJheS4KICAgICAgKiBAcmV0dXJuIFRoZSBpdGVyYWJsZSB0eXBlIGFzIGEgQ29sbGVjdGlvbiBvciBudWxsIGlmIGFyZ3VtZW50IGlzbid0IGl0ZXJhYmxlLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbiBhc0NvbGxlY3Rpb24oT2JqZWN0IGl0ZXJhYmxlKSB7CisgICAgcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uIGFzQ29sbGVjdGlvbihmaW5hbCBPYmplY3QgaXRlcmFibGUpIHsKICAgICAgICAgaWYgKGl0ZXJhYmxlIGluc3RhbmNlb2YgQ29sbGVjdGlvbikgewogICAgICAgICAgICAgcmV0dXJuIChDb2xsZWN0aW9uKSBpdGVyYWJsZTsKICAgICAgICAgfSBlbHNlIGlmICgoaXRlcmFibGUgIT0gbnVsbCAmJiBpdGVyYWJsZS5nZXRDbGFzcygpLmlzQXJyYXkoKSkgfHwgaXRlcmFibGUgaW5zdGFuY2VvZiBJdGVyYWJsZSkgewpAQCAtNTYsNyArNTYsNyBAQAogICAgICAqIEBwYXJhbSBpdGVyYWJsZSBhbiBJdGVyYWJsZSBvciBhcnJheS4KICAgICAgKiBAcmV0dXJuIFRoZSBpdGVyYWJsZSB0eXBlIGFzIGEgQ29sbGVjdGlvbiBvciBudWxsIGlmIGFyZ3VtZW50IGlzbid0IGl0ZXJhYmxlLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2V0IGFzU2V0KE9iamVjdCBpdGVyYWJsZSkgeworICAgIHB1YmxpYyBzdGF0aWMgU2V0IGFzU2V0KGZpbmFsIE9iamVjdCBpdGVyYWJsZSkgewogICAgICAgICBpZiAoaXRlcmFibGUgaW5zdGFuY2VvZiBJdGVyYWJsZSB8fCBpdGVyYWJsZSAhPSBudWxsICYmIGl0ZXJhYmxlLmdldENsYXNzKCkuaXNBcnJheSgpKSB7CiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0b3JVdGlscy5hc1NldChpdGVyYWJsZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03MSw3ICs3MSw3IEBACiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRTdGVwTmFtZSgpOwogCi0gICAgcHVibGljIGRlZmF1bHQgQ29sbGVjdGlvbiBjb252ZXJ0QXJndW1lbnRUb0NvbGxlY3Rpb24oT2JqZWN0IGFyZykgeworICAgIHB1YmxpYyBkZWZhdWx0IENvbGxlY3Rpb24gY29udmVydEFyZ3VtZW50VG9Db2xsZWN0aW9uKGZpbmFsIE9iamVjdCBhcmcpIHsKICAgICAgICAgaWYgKG51bGwgPT0gYXJnKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJBcmd1bWVudCBwcm92aWRlZCBmb3IgJXMgc3RlcCBjYW4ndCBiZSBudWxsLiIsIGdldFN0ZXBOYW1lKCkpKTsKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgcmV0dXJuIGluY29taW5nOwogICAgIH0KIAotICAgIHB1YmxpYyBkZWZhdWx0IDxTPiBDb2xsZWN0aW9uIGNvbnZlcnRUcmF2ZXJzZXJUb0NvbGxlY3Rpb24oVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlcikgeworICAgIHB1YmxpYyBkZWZhdWx0IDxTPiBDb2xsZWN0aW9uIGNvbnZlcnRUcmF2ZXJzZXJUb0NvbGxlY3Rpb24oZmluYWwgVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlcikgewogICAgICAgICBmaW5hbCBTIGl0ZW1zID0gdHJhdmVyc2VyLmdldCgpOwogCiAgICAgICAgIGlmIChudWxsID09IGl0ZW1zKSB7CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgcmV0dXJuIGluY29taW5nOwogICAgIH0KIAotICAgIHB1YmxpYyBkZWZhdWx0IDxTLCBFPiBDb2xsZWN0aW9uIGNvbnZlcnRUcmF2ZXJzYWxUb0NvbGxlY3Rpb24oVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlciwgZmluYWwgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHRyYXZlcnNhbCkgeworICAgIHB1YmxpYyBkZWZhdWx0IDxTLCBFPiBDb2xsZWN0aW9uIGNvbnZlcnRUcmF2ZXJzYWxUb0NvbGxlY3Rpb24oZmluYWwgVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlciwgZmluYWwgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHRyYXZlcnNhbCkgewogICAgICAgICBmaW5hbCBPYmplY3QgYXJyYXkgPSBUcmF2ZXJzYWxVdGlsLmFwcGx5KHRyYXZlcnNlciwgdHJhdmVyc2FsKTsKIAogICAgICAgICBpZiAobnVsbCA9PSBhcnJheSkgewpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICAgIHJldHVybiBpbnB1dDsKICAgICB9CiAKLSAgICBwdWJsaWMgZGVmYXVsdCBTZXQgY29udmVydEFyZ3VtZW50VG9TZXQoT2JqZWN0IGFyZykgeworICAgIHB1YmxpYyBkZWZhdWx0IFNldCBjb252ZXJ0QXJndW1lbnRUb1NldChmaW5hbCBPYmplY3QgYXJnKSB7CiAgICAgICAgIGlmIChudWxsID09IGFyZykgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiQXJndW1lbnQgcHJvdmlkZWQgZm9yICVzIHN0ZXAgY2FuJ3QgYmUgbnVsbC4iLCBnZXRTdGVwTmFtZSgpKSk7CkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgcmV0dXJuIGluY29taW5nOwogICAgIH0KIAotICAgIHB1YmxpYyBkZWZhdWx0IDxTPiBTZXQgY29udmVydFRyYXZlcnNlclRvU2V0KFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIpIHsKKyAgICBwdWJsaWMgZGVmYXVsdCA8Uz4gU2V0IGNvbnZlcnRUcmF2ZXJzZXJUb1NldChmaW5hbCBUcmF2ZXJzZXIuQWRtaW48Uz4gdHJhdmVyc2VyKSB7CiAgICAgICAgIGZpbmFsIFMgaXRlbXMgPSB0cmF2ZXJzZXIuZ2V0KCk7CiAKICAgICAgICAgaWYgKG51bGwgPT0gaXRlbXMpIHsKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgICByZXR1cm4gaW5jb21pbmc7CiAgICAgfQogCi0gICAgcHVibGljIGRlZmF1bHQgPFMsIEU+IFNldCBjb252ZXJ0VHJhdmVyc2FsVG9TZXQoVHJhdmVyc2VyLkFkbWluPFM+IHRyYXZlcnNlciwgZmluYWwgVHJhdmVyc2FsLkFkbWluPFMsIEU+IHRyYXZlcnNhbCkgeworICAgIHB1YmxpYyBkZWZhdWx0IDxTLCBFPiBTZXQgY29udmVydFRyYXZlcnNhbFRvU2V0KGZpbmFsIFRyYXZlcnNlci5BZG1pbjxTPiB0cmF2ZXJzZXIsIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjxTLCBFPiB0cmF2ZXJzYWwpIHsKICAgICAgICAgZmluYWwgT2JqZWN0IGFycmF5ID0gVHJhdmVyc2FsVXRpbC5hcHBseSh0cmF2ZXJzZXIsIHRyYXZlcnNhbCk7CiAKICAgICAgICAgaWYgKG51bGwgPT0gYXJyYXkpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL0dyYXBoLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9HcmFwaC5qYXZhCmluZGV4IDI5M2ViYzAuLjNmOWYyNDYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL0dyYXBoLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvR3JhcGguamF2YQpAQCAtNDkxLDEwICs0OTEsNyBAQAogCiAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAqIERldGVybWluZXMgaWYgdGhlIHtAY29kZSBHcmFwaH0gaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBjb25uZWN0aW9uIHRvIHRoZSBzYW1lIGluc3RhbmNlCi0gICAgICAgICAgICAgKiBhdCB0aGUgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGUsIE5lbzRqIGVtYmVkZGVkIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlIGJlY2F1c2UgY29uY3VycmVudAotICAgICAgICAgICAgICogYWNjZXNzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIGZpbGVzIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBpcyBub3QgcG9zc2libGUuICBIb3dldmVyLCBOZW80aiBIQSBjb3VsZAotICAgICAgICAgICAgICogc3VwcG9ydCB0aGlzIGZlYXR1cmUgYXMgZWFjaCBuZXcge0Bjb2RlIEdyYXBofSBpbnN0YW5jZSBjb29yZGluYXRlcyB3aXRoIHRoZSBOZW80aiBjbHVzdGVyIGFsbG93aW5nCi0gICAgICAgICAgICAgKiBtdWx0aXBsZSBpbnN0YW5jZXMgdG8gb3BlcmF0ZSBvbiB0aGUgc2FtZSBkYXRhYmFzZS4KKyAgICAgICAgICAgICAqIGF0IHRoZSBzYW1lIHRpbWUuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIEBGZWF0dXJlRGVzY3JpcHRvcihuYW1lID0gRkVBVFVSRV9DT05DVVJSRU5UX0FDQ0VTUykKICAgICAgICAgICAgIGRlZmF1bHQgYm9vbGVhbiBzdXBwb3J0c0NvbmN1cnJlbnRBY2Nlc3MoKSB7CkBAIC0xMjcyLDI4ICsxMjY5LDYgQEAKICAgICBAaW50ZXJmYWNlIE9wdEluIHsKICAgICAgICAgU3RyaW5nIFNVSVRFX1NUUlVDVFVSRV9TVEFOREFSRCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5TdHJ1Y3R1cmVTdGFuZGFyZFN1aXRlIjsKICAgICAgICAgU3RyaW5nIFNVSVRFX1NUUlVDVFVSRV9JTlRFR1JBVEUgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuU3RydWN0dXJlSW50ZWdyYXRlU3VpdGUiOwotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgcHJlZmVyIHRoZSBHaGVya2luIHRlc3Qgc3VpdGUgZm9yIHZhbGlkYXRpbmcgR3JlbWxpbiBiZWhhdmlvciBhbmQgdGhlCi0gICAgICAgICAqIHtAbGluayAjU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9DT01QVVRFUn0gZm9yIEpWTSBzcGVjaWZpYyB0ZXN0cy4KLSAgICAgICAgICovCi0gICAgICAgIEBEZXByZWNhdGVkCi0gICAgICAgIFN0cmluZyBTVUlURV9QUk9DRVNTX0NPTVBVVEVSID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzQ29tcHV0ZXJTdWl0ZSI7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAZGVwcmVjYXRlZCBBcyBvZiByZWxlYXNlIDMuOC4wLCBwcmVmZXIgdGhlIEdoZXJraW4gdGVzdCBzdWl0ZSBmb3IgdmFsaWRhdGluZyBHcmVtbGluIGJlaGF2aW9yIGFuZCB0aGUKLSAgICAgICAgICoge0BsaW5rICNTVUlURV9QUk9DRVNTX0VNQkVEREVEX1NUQU5EQVJEfSBmb3IgSlZNIHNwZWNpZmljIHRlc3RzLgotICAgICAgICAgKi8KLSAgICAgICAgQERlcHJlY2F0ZWQKLSAgICAgICAgU3RyaW5nIFNVSVRFX1BST0NFU1NfU1RBTkRBUkQgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NTdGFuZGFyZFN1aXRlIjsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIHJlcGxhY2VkIGJ5IHtAbGluayAjU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9TVEFOREFSRH0uCi0gICAgICAgICAqLwotICAgICAgICBARGVwcmVjYXRlZAotICAgICAgICBTdHJpbmcgU1VJVEVfUFJPQ0VTU19MSU1JVEVEX0NPTVBVVEVSID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzTGltaXRlZENvbXB1dGVyU3VpdGUiOwotICAgICAgICAvKioKLSAgICAgICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgcmVwbGFjZWQgYnkge0BsaW5rICNTVUlURV9QUk9DRVNTX0VNQkVEREVEX0NPTVBVVEVSfQotICAgICAgICAgKi8KLSAgICAgICAgQERlcHJlY2F0ZWQKLSAgICAgICAgU3RyaW5nIFNVSVRFX1BST0NFU1NfTElNSVRFRF9TVEFOREFSRCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlIjsKICAgICAgICAgU3RyaW5nIFNVSVRFX1BST0NFU1NfRU1CRURERURfQ09NUFVURVIgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGUiOwogICAgICAgICBTdHJpbmcgU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9TVEFOREFSRCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0VtYmVkZGVkU3RhbmRhcmRTdWl0ZSI7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL1ZlcnRleFByb3BlcnR5LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9WZXJ0ZXhQcm9wZXJ0eS5qYXZhCmluZGV4IDZmY2M1ZDMuLjFiZjc2YjMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL1ZlcnRleFByb3BlcnR5LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvVmVydGV4UHJvcGVydHkuamF2YQpAQCAtMTgsOSArMTgsNiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5sYW1iZGEuQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5VmVydGV4UHJvcGVydHk7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9EYXRhVHlwZS5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0RhdGFUeXBlLmphdmEKaW5kZXggOGQ1MDgzNi4uN2MyZTM0NyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0RhdGFUeXBlLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0RhdGFUeXBlLmphdmEKQEAgLTI4LDkgKzI4LDcgQEAKICAgICBJTlQoMHgwMSksCiAgICAgTE9ORygweDAyKSwKICAgICBTVFJJTkcoMFgwMyksCi0gICAgREFURSgwWDA0KSwKLSAgICBUSU1FU1RBTVAoMFgwNSksCi0gICAgQ0xBU1MoMFgwNiksCisgICAgREFURVRJTUUoMFgwNCksCiAgICAgRE9VQkxFKDBYMDcpLAogICAgIEZMT0FUKDBYMDgpLAogICAgIExJU1QoMFgwOSksCkBAIC00Myw1NCArNDEsMjUgQEAKICAgICBHUkFQSCgwWDEwKSwKICAgICBWRVJURVgoMFgxMSksCiAgICAgVkVSVEVYUFJPUEVSVFkoMFgxMiksCi0gICAgQkFSUklFUigwWDEzKSwKLSAgICBCSU5ESU5HKDBYMTQpLAotICAgIEJZVEVDT0RFKDBYMTUpLAotICAgIENBUkRJTkFMSVRZKDBYMTYpLAotICAgIENPTFVNTigwWDE3KSwKICAgICBESVJFQ1RJT04oMFgxOCksCi0gICAgT1BFUkFUT1IoMFgxOSksCi0gICAgT1JERVIoMFgxQSksCi0gICAgUElDSygwWDFCKSwKLSAgICBQT1AoMFgxQyksCi0gICAgTEFNQkRBKDBYMUQpLAotICAgIFAoMFgxRSksCi0gICAgU0NPUEUoMFgxRiksCiAgICAgVCgwWDIwKSwKKyAgICBNRVJHRSgweDJlKSwKICAgICBUUkFWRVJTRVIoMFgyMSksCiAgICAgQklHREVDSU1BTCgwWDIyKSwKICAgICBCSUdJTlRFR0VSKDBYMjMpLAogICAgIEJZVEUoMFgyNCksCi0gICAgQllURUJVRkZFUigwWDI1KSwKKyAgICBCSU5BUlkoMFgyNSksCiAgICAgU0hPUlQoMFgyNiksCiAgICAgQk9PTEVBTigweDI3KSwKLSAgICBURVhUUCgweDI4KSwKLSAgICBUUkFWRVJTQUxTVFJBVEVHWSgwWDI5KSwKLSAgICBCVUxLU0VUKDBYMkEpLAorICAgIEJVTEtTRVQoMFgyQSksICAvLyB0b2RvOgogICAgIFRSRUUoMFgyQiksCi0gICAgTUVUUklDUygweDJDKSwKLSAgICBUUkFWRVJTQUxNRVRSSUNTKDB4MkQpLAotICAgIE1FUkdFKDB4MkUpLAotICAgIERUKDB4MkYpLAogICAgIEdUWVBFKDB4MzApLAogCiAgICAgQ0hBUigwWDgwKSwKICAgICBEVVJBVElPTigwWDgxKSwKLSAgICBJTkVUQUREUkVTUygwWDgyKSwKLSAgICBJTlNUQU5UKDBYODMpLAotICAgIExPQ0FMREFURSgwWDg0KSwKLSAgICBMT0NBTERBVEVUSU1FKDBYODUpLAotICAgIExPQ0FMVElNRSgwWDg2KSwKLSAgICBNT05USERBWSgwWDg3KSwKLSAgICBPRkZTRVREQVRFVElNRSgwWDg4KSwKLSAgICBPRkZTRVRUSU1FKDBYODkpLAotICAgIFBFUklPRCgwWDhBKSwKLSAgICBZRUFSKDBYOEIpLAotICAgIFlFQVJNT05USCgwWDhDKSwKLSAgICBaT05FREFURVRJTUUoMFg4RCksCi0gICAgWk9ORU9GRlNFVCgwWDhFKSwKIAogICAgIENVU1RPTSgwKSwKKyAgICBNQVJLRVIoMFhGRCksCiAgICAgVU5TUEVDSUZJRURfTlVMTCgwWEZFKTsKIAogICAgIHByaXZhdGUgZmluYWwgaW50IGNvZGU7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnlXcml0ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci5qYXZhCmluZGV4IGJmNjdjZmQuLjU3MTkwMTUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci5qYXZhCkBAIC00NSw3ICs0NSwxMCBAQAogICAgIHByaXZhdGUgZmluYWwgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSByZWdpc3RyeTsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBieXRlIFZBTFVFX0ZMQUdfTlVMTCA9IDE7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYnl0ZSBWQUxVRV9GTEFHX05PTkUgPSAwOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYnl0ZSBWRVJTSU9OX0JZVEUgPSAoYnl0ZSkweDgxOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJ5dGUgVkFMVUVfRkxBR19PUkRFUkVEID0gMjsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBieXRlIFZBTFVFX0ZMQUdfQlVMSyA9IDI7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBieXRlIFZFUlNJT05fQllURSA9IChieXRlKTB4ODQ7CisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBieXRlIEJVTEtFRF9CWVRFID0gKGJ5dGUpMHgwMTsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBieXRlW10gdW5zcGVjaWZpZWROdWxsQnl0ZXMgPSBuZXcgYnl0ZVtdIHsgRGF0YVR5cGUuVU5TUEVDSUZJRURfTlVMTC5nZXRDb2RlQnl0ZSgpLCAweDAxfTsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBieXRlW10gY3VzdG9tVHlwZUNvZGVCeXRlcyA9IG5ldyBieXRlW10geyBEYXRhVHlwZS5DVVNUT00uZ2V0Q29kZUJ5dGUoKSB9OwogCkBAIC0xMzUsNCArMTM4LDE5IEBACiAgICAgcHVibGljIHZvaWQgd3JpdGVWYWx1ZUZsYWdOb25lKEJ1ZmZlciBidWZmZXIpIHsKICAgICAgICAgYnVmZmVyLndyaXRlQnl0ZShWQUxVRV9GTEFHX05PTkUpOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFdyaXRlcyBhIHNpbmdsZSBieXRlIHdpdGggdmFsdWUgMiwgcmVwcmVzZW50aW5nIGFuIG9yZGVyZWQgdmFsdWVfZmxhZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB3cml0ZVZhbHVlRmxhZ09yZGVyZWQoQnVmZmVyIGJ1ZmZlcikgeworICAgICAgICBidWZmZXIud3JpdGVCeXRlKFZBTFVFX0ZMQUdfT1JERVJFRCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogV3JpdGVzIGEgc2luZ2xlIGJ5dGUgd2l0aCB2YWx1ZSAyLCByZXByZXNlbnRpbmcgYW4gb3JkZXJlZCB2YWx1ZV9mbGFnLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHdyaXRlVmFsdWVGbGFnQnVsayhCdWZmZXIgYnVmZmVyKSB7CisgICAgICAgIGJ1ZmZlci53cml0ZUJ5dGUoVkFMVUVfRkxBR19CVUxLKTsKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9NYXJrZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9NYXJrZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmU3MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L01hcmtlci5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5OworCitwdWJsaWMgY2xhc3MgTWFya2VyIHsKKyAgICBwcml2YXRlIGZpbmFsIGJ5dGUgdmFsdWU7CisKKyAgICBwdWJsaWMgc3RhdGljIE1hcmtlciBFTkRfT0ZfU1RSRUFNID0gbmV3IE1hcmtlcigoYnl0ZSkwKTsKKworICAgIHByaXZhdGUgTWFya2VyKGZpbmFsIGJ5dGUgdmFsdWUpIHsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHB1YmxpYyBieXRlIGdldFZhbHVlKCkgeworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBNYXJrZXIgb2YoZmluYWwgYnl0ZSB2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBFTkRfT0ZfU1RSRUFNOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9UeXBlU2VyaWFsaXplclJlZ2lzdHJ5LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5qYXZhCmluZGV4IGY4ODVhNzAuLmYzZDk5MjEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS9UeXBlU2VyaWFsaXplclJlZ2lzdHJ5LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L1R5cGVTZXJpYWxpemVyUmVnaXN0cnkuamF2YQpAQCAtMTgsMzIgKzE4LDE0IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5OwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkRUOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuTWVyZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Ob3RQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3BlcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGljazsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBvcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNhY2tGdW5jdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkFuZFA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLk1ldHJpY3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLk9yUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuVHJhdmVyc2FsRXhwbGFuYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbE1ldHJpY3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1R5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKQEAgLTUyLDc4ICszNCw0MCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLklvUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkJpZ0RlY2ltYWxTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5CaWdJbnRlZ2VyU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuQmluZGluZ1NlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkJ1bGtTZXRTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5CeXRlQnVmZmVyU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuQnl0ZUNvZGVTZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5CaW5hcnlTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5DaGFyU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuQ2xhc3NTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5DdXN0b21UeXBlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuRGF0ZVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkR1cmF0aW9uU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuRWRnZVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkVudW1TZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5HcmFwaFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkluZXRBZGRyZXNzU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuSW5zdGFudFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkxhbWJkYVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLkxpc3RTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5Mb2NhbERhdGVTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5Mb2NhbERhdGVUaW1lU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuTG9jYWxUaW1lU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuTWFwRW50cnlTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5NYXBTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5NZXRyaWNzU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuTW9udGhEYXlTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5PZmZzZXREYXRlVGltZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLk9mZnNldFRpbWVTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5QU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuRGF0ZVRpbWVTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5QYXRoU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuUGVyaW9kU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuUHJvcGVydHlTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5TZXRTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5TaW5nbGVUeXBlU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuU3RyaW5nU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuVHJhbnNmb3JtU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuVHJhdmVyc2FsRXhwbGFuYXRpb25TZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5UcmF2ZXJzYWxNZXRyaWNzU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5UcmF2ZXJzZXJTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5UcmVlU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuVVVJRFNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLlZlcnRleFByb3BlcnR5U2VyaWFsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuVmVydGV4U2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuWWVhck1vbnRoU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuWm9uZU9mZnNldFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzLlpvbmVkRGF0ZVRpbWVTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7CiBpbXBvcnQgb3JnLmphdmF0dXBsZXMuUGFpcjsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldDRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LkluZXQ2QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKIGltcG9ydCBqYXZhLnRpbWUuRHVyYXRpb247Ci1pbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7Ci1pbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZTsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxUaW1lOwotaW1wb3J0IGphdmEudGltZS5Nb250aERheTsKIGltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldFRpbWU7Ci1pbXBvcnQgamF2YS50aW1lLlBlcmlvZDsKLWltcG9ydCBqYXZhLnRpbWUuWWVhcjsKLWltcG9ydCBqYXZhLnRpbWUuWWVhck1vbnRoOwotaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OwotaW1wb3J0IGphdmEudGltZS5ab25lZERhdGVUaW1lOwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CkBAIC0xNDUsMTEgKzg5LDkgQEAKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oSW50ZWdlci5jbGFzcywgU2luZ2xlVHlwZVNlcmlhbGl6ZXIuSW50U2VyaWFsaXplciksCiAgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KExvbmcuY2xhc3MsIFNpbmdsZVR5cGVTZXJpYWxpemVyLkxvbmdTZXJpYWxpemVyKSwKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oU3RyaW5nLmNsYXNzLCBuZXcgU3RyaW5nU2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oRGF0ZS5jbGFzcywgRGF0ZVNlcmlhbGl6ZXIuRGF0ZVNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihUaW1lc3RhbXAuY2xhc3MsIERhdGVTZXJpYWxpemVyLlRpbWVzdGFtcFNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihDbGFzcy5jbGFzcywgbmV3IENsYXNzU2VyaWFsaXplcigpKSwKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oRG91YmxlLmNsYXNzLCBTaW5nbGVUeXBlU2VyaWFsaXplci5Eb3VibGVTZXJpYWxpemVyKSwKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oRmxvYXQuY2xhc3MsIFNpbmdsZVR5cGVTZXJpYWxpemVyLkZsb2F0U2VyaWFsaXplciksCisgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KEJ1bGtTZXQuY2xhc3MsIG5ldyBCdWxrU2V0U2VyaWFsaXplcigpKSwgIC8vIG5lZWRzIHRvIHJlZ2lzdGVyIGJlZm9yZSBsaXN0IHNvIExpc3RTZXJpYWxpemVyIGlzIHJlZ2lzdGVyZWQgYXMgTElTVCBieSBvdmVyd3JpdGUKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oTGlzdC5jbGFzcywgbmV3IExpc3RTZXJpYWxpemVyKCkpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihNYXAuY2xhc3MsIG5ldyBNYXBTZXJpYWxpemVyKCkpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihTZXQuY2xhc3MsIG5ldyBTZXRTZXJpYWxpemVyKCkpLApAQCAtMTYwLDQwICsxMDIsMTcgQEAKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oUHJvcGVydHkuY2xhc3MsIG5ldyBQcm9wZXJ0eVNlcmlhbGl6ZXIoKSksCiAgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KEdyYXBoLmNsYXNzLCBuZXcgR3JhcGhTZXJpYWxpemVyKCkpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihWZXJ0ZXguY2xhc3MsIG5ldyBWZXJ0ZXhTZXJpYWxpemVyKCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihTYWNrRnVuY3Rpb25zLkJhcnJpZXIuY2xhc3MsIEVudW1TZXJpYWxpemVyLkJhcnJpZXJTZXJpYWxpemVyKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oQnl0ZWNvZGUuQmluZGluZy5jbGFzcywgbmV3IEJpbmRpbmdTZXJpYWxpemVyKCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihCeXRlY29kZS5jbGFzcywgbmV3IEJ5dGVDb2RlU2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuY2xhc3MsIEVudW1TZXJpYWxpemVyLkNhcmRpbmFsaXR5U2VyaWFsaXplciksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KENvbHVtbi5jbGFzcywgRW51bVNlcmlhbGl6ZXIuQ29sdW1uU2VyaWFsaXplciksCiAgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KERpcmVjdGlvbi5jbGFzcywgRW51bVNlcmlhbGl6ZXIuRGlyZWN0aW9uU2VyaWFsaXplciksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KERULmNsYXNzLCBFbnVtU2VyaWFsaXplci5EVFNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihHVHlwZS5jbGFzcywgRW51bVNlcmlhbGl6ZXIuR1R5cGVTZXJpYWxpemVyKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oTWVyZ2UuY2xhc3MsIEVudW1TZXJpYWxpemVyLk1lcmdlU2VyaWFsaXplciksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KE9wZXJhdG9yLmNsYXNzLCBFbnVtU2VyaWFsaXplci5PcGVyYXRvclNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihPcmRlci5jbGFzcywgRW51bVNlcmlhbGl6ZXIuT3JkZXJTZXJpYWxpemVyKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oUGljay5jbGFzcywgRW51bVNlcmlhbGl6ZXIuUGlja1NlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihQb3AuY2xhc3MsIEVudW1TZXJpYWxpemVyLlBvcFNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihMYW1iZGEuY2xhc3MsIG5ldyBMYW1iZGFTZXJpYWxpemVyKCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihQLmNsYXNzLCBuZXcgUFNlcmlhbGl6ZXI8PihEYXRhVHlwZS5QLCBQLmNsYXNzKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KEFuZFAuY2xhc3MsIG5ldyBQU2VyaWFsaXplcjw+KERhdGFUeXBlLlAsIEFuZFAuY2xhc3MpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oT3JQLmNsYXNzLCBuZXcgUFNlcmlhbGl6ZXI8PihEYXRhVHlwZS5QLCBPclAuY2xhc3MpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oTm90UC5jbGFzcywgbmV3IFBTZXJpYWxpemVyPD4oRGF0YVR5cGUuUCwgTm90UC5jbGFzcykpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihUZXh0UC5jbGFzcywgbmV3IFBTZXJpYWxpemVyPD4oRGF0YVR5cGUuVEVYVFAsIFRleHRQLmNsYXNzKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KFNjb3BlLmNsYXNzLCBFbnVtU2VyaWFsaXplci5TY29wZVNlcmlhbGl6ZXIpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihULmNsYXNzLCBFbnVtU2VyaWFsaXplci5UU2VyaWFsaXplciksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KFRyYXZlcnNlci5jbGFzcywgbmV3IFRyYXZlcnNlclNlcmlhbGl6ZXIoKSksCiAgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KE1lcmdlLmNsYXNzLCBFbnVtU2VyaWFsaXplci5NZXJnZVNlcmlhbGl6ZXIpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihCaWdEZWNpbWFsLmNsYXNzLCBuZXcgQmlnRGVjaW1hbFNlcmlhbGl6ZXIoKSksCiAgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KEJpZ0ludGVnZXIuY2xhc3MsIG5ldyBCaWdJbnRlZ2VyU2VyaWFsaXplcigpKSwKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oQnl0ZS5jbGFzcywgU2luZ2xlVHlwZVNlcmlhbGl6ZXIuQnl0ZVNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihCeXRlQnVmZmVyLmNsYXNzLCBuZXcgQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIoKSksCisgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KEJ5dGVCdWZmZXIuY2xhc3MsIG5ldyBCaW5hcnlTZXJpYWxpemVyKCkpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihTaG9ydC5jbGFzcywgU2luZ2xlVHlwZVNlcmlhbGl6ZXIuU2hvcnRTZXJpYWxpemVyKSwKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oQm9vbGVhbi5jbGFzcywgU2luZ2xlVHlwZVNlcmlhbGl6ZXIuQm9vbGVhblNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihUcmF2ZXJzYWxTdHJhdGVneS5jbGFzcywgbmV3IFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oQnVsa1NldC5jbGFzcywgbmV3IEJ1bGtTZXRTZXJpYWxpemVyKCkpLAogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihUcmVlLmNsYXNzLCBuZXcgVHJlZVNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KE1ldHJpY3MuY2xhc3MsIG5ldyBNZXRyaWNzU2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oVHJhdmVyc2FsTWV0cmljcy5jbGFzcywgbmV3IFRyYXZlcnNhbE1ldHJpY3NTZXJpYWxpemVyKCkpLAorICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihNYXJrZXIuY2xhc3MsIFNpbmdsZVR5cGVTZXJpYWxpemVyLk1hcmtlclNlcmlhbGl6ZXIpLAogCiAgICAgICAgICAgICAvLyBUcmFuc2Zvcm1TZXJpYWxpemVyIGltcGxlbWVudGF0aW9ucwogICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihNYXAuRW50cnkuY2xhc3MsIG5ldyBNYXBFbnRyeVNlcmlhbGl6ZXIoKSksCkBAIC0yMDEsMjIgKzEyMCw3IEBACiAKICAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oQ2hhcmFjdGVyLmNsYXNzLCBuZXcgQ2hhclNlcmlhbGl6ZXIoKSksCiAgICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KER1cmF0aW9uLmNsYXNzLCBuZXcgRHVyYXRpb25TZXJpYWxpemVyKCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihJbmV0QWRkcmVzcy5jbGFzcywgbmV3IEluZXRBZGRyZXNzU2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oSW5ldDRBZGRyZXNzLmNsYXNzLCBuZXcgSW5ldEFkZHJlc3NTZXJpYWxpemVyPD4oKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KEluZXQ2QWRkcmVzcy5jbGFzcywgbmV3IEluZXRBZGRyZXNzU2VyaWFsaXplcjw+KCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihJbnN0YW50LmNsYXNzLCBuZXcgSW5zdGFudFNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KExvY2FsRGF0ZS5jbGFzcywgbmV3IExvY2FsRGF0ZVNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KExvY2FsVGltZS5jbGFzcywgbmV3IExvY2FsVGltZVNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KExvY2FsRGF0ZVRpbWUuY2xhc3MsIG5ldyBMb2NhbERhdGVUaW1lU2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oTW9udGhEYXkuY2xhc3MsIG5ldyBNb250aERheVNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KE9mZnNldERhdGVUaW1lLmNsYXNzLCBuZXcgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyKCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihPZmZzZXRUaW1lLmNsYXNzLCBuZXcgT2Zmc2V0VGltZVNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KFBlcmlvZC5jbGFzcywgbmV3IFBlcmlvZFNlcmlhbGl6ZXIoKSksCi0gICAgICAgICAgICBuZXcgUmVnaXN0cnlFbnRyeTw+KFllYXIuY2xhc3MsIFNpbmdsZVR5cGVTZXJpYWxpemVyLlllYXJTZXJpYWxpemVyKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oWWVhck1vbnRoLmNsYXNzLCBuZXcgWWVhck1vbnRoU2VyaWFsaXplcigpKSwKLSAgICAgICAgICAgIG5ldyBSZWdpc3RyeUVudHJ5PD4oWm9uZWREYXRlVGltZS5jbGFzcywgbmV3IFpvbmVkRGF0ZVRpbWVTZXJpYWxpemVyKCkpLAotICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8Pihab25lT2Zmc2V0LmNsYXNzLCBuZXcgWm9uZU9mZnNldFNlcmlhbGl6ZXIoKSkKLQorICAgICAgICAgICAgbmV3IFJlZ2lzdHJ5RW50cnk8PihPZmZzZXREYXRlVGltZS5jbGFzcywgbmV3IERhdGVUaW1lU2VyaWFsaXplcigpKQogICAgIH07CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgSU5TVEFOQ0UgPSBidWlsZCgpLmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0JpbmFyeVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9CaW5hcnlTZXJpYWxpemVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4MGI4NgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9CaW5hcnlTZXJpYWxpemVyLmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworCisvKioKKyAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKKyAqLworcHVibGljIGNsYXNzIEJpbmFyeVNlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxCeXRlQnVmZmVyPiB7CisKKyAgICBwdWJsaWMgQmluYXJ5U2VyaWFsaXplcigpIHsKKyAgICAgICAgc3VwZXIoRGF0YVR5cGUuQklOQVJZKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgQnl0ZUJ1ZmZlciByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBiYiA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoYnVmZmVyLnJlYWRJbnQoKSk7CisgICAgICAgIGJ1ZmZlci5yZWFkQnl0ZXMoYmIpOworICAgICAgICBiYi5yZXdpbmQoKTsKKyAgICAgICAgcmV0dXJuIGJiOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgQnl0ZUJ1ZmZlciB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gdmFsdWUuYXJyYXkoKTsKKyAgICAgICAgYnVmZmVyLndyaXRlSW50KGJ5dGVzLmxlbmd0aCkud3JpdGVCeXRlcyhieXRlcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0JpbmRpbmdTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvQmluZGluZ1NlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ4Y2FmZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvQmluZGluZ1NlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBCaW5kaW5nU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPEJ5dGVjb2RlLkJpbmRpbmc+IHsKLQotICAgIHB1YmxpYyBCaW5kaW5nU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuQklORElORyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIEJ5dGVjb2RlLkJpbmRpbmcgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBrID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIG5ldyBCeXRlY29kZS5CaW5kaW5nPD4oaywgY29udGV4dC5yZWFkKGJ1ZmZlcikpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgQnl0ZWNvZGUuQmluZGluZyB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLnZhcmlhYmxlKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb250ZXh0LndyaXRlKHZhbHVlLnZhbHVlKCksIGJ1ZmZlcik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0J1bGtTZXRTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvQnVsa1NldFNlcmlhbGl6ZXIuamF2YQppbmRleCBlMTVlYWY2Li5jMWY5Y2RjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvQnVsa1NldFNlcmlhbGl6ZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvQnVsa1NldFNlcmlhbGl6ZXIuamF2YQpAQCAtMzIsMTkgKzMyLDEyIEBACiAgKi8KIHB1YmxpYyBjbGFzcyBCdWxrU2V0U2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPEJ1bGtTZXQ+IHsKICAgICBwdWJsaWMgQnVsa1NldFNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLkJVTEtTRVQpOworICAgICAgICBzdXBlcihEYXRhVHlwZS5MSVNUKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgQnVsa1NldCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGJ1ZmZlci5yZWFkSW50KCk7Ci0KLSAgICAgICAgZmluYWwgQnVsa1NldCByZXN1bHQgPSBuZXcgQnVsa1NldCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1bHQuYWRkKGNvbnRleHQucmVhZChidWZmZXIpLCBidWZmZXIucmVhZExvbmcoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIkJ1bGtTZXQgaXMgdXNlZCBhcyBhbiBpbnRlcm5hbCBzZXJpYWxpemVyIGZvciBidWxrIGxpc3RzLCBkZXNlcmlhbGl6aW5nIGludG8gQnVsa1NldCBpcyBub3Qgc3VwcG9ydGVkIik7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9CeXRlQnVmZmVyU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDM3ZTE0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9CeXRlQnVmZmVyU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEJ5dGVCdWZmZXJTZXJpYWxpemVyIGV4dGVuZHMgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8Qnl0ZUJ1ZmZlcj4gewotCi0gICAgcHVibGljIEJ5dGVCdWZmZXJTZXJpYWxpemVyKCkgewotICAgICAgICBzdXBlcihEYXRhVHlwZS5CWVRFQlVGRkVSKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgQnl0ZUJ1ZmZlciByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBiYiA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoYnVmZmVyLnJlYWRJbnQoKSk7Ci0gICAgICAgIGJ1ZmZlci5yZWFkQnl0ZXMoYmIpOwotICAgICAgICBiYi5yZXdpbmQoKTsKLSAgICAgICAgcmV0dXJuIGJiOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgQnl0ZUJ1ZmZlciB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gdmFsdWUuYXJyYXkoKTsKLSAgICAgICAgYnVmZmVyLndyaXRlSW50KGJ5dGVzLmxlbmd0aCkud3JpdGVCeXRlcyhieXRlcyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0J5dGVDb2RlU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0J5dGVDb2RlU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDI4ZjgzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9CeXRlQ29kZVNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIEJ5dGVDb2RlU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPEJ5dGVjb2RlPiB7Ci0gICAgcHVibGljIEJ5dGVDb2RlU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuQllURUNPREUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBCeXRlY29kZSByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgcmVzdWx0ID0gbmV3IEJ5dGVjb2RlKCk7Ci0KLSAgICAgICAgZmluYWwgaW50IHN0ZXBzTGVuZ3RoID0gYnVmZmVyLnJlYWRJbnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwc0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1bHQuYWRkU3RlcChjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgZmFsc2UpLCBnZXRJbnN0cnVjdGlvbkFyZ3VtZW50cyhidWZmZXIsIGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCBzb3VyY2VzTGVuZ3RoID0gYnVmZmVyLnJlYWRJbnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2VzTGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIHJlc3VsdC5hZGRTb3VyY2UoY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKSwgZ2V0SW5zdHJ1Y3Rpb25Bcmd1bWVudHMoYnVmZmVyLCBjb250ZXh0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdFtdIGdldEluc3RydWN0aW9uQXJndW1lbnRzKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIGludCB2YWx1ZXNMZW5ndGggPSBidWZmZXIucmVhZEludCgpOwotICAgICAgICBmaW5hbCBPYmplY3RbXSB2YWx1ZXMgPSBuZXcgT2JqZWN0W3ZhbHVlc0xlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmFsdWVzTGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgIHZhbHVlc1tqXSA9IGNvbnRleHQucmVhZChidWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBCeXRlY29kZSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTGlzdDxCeXRlY29kZS5JbnN0cnVjdGlvbj4gc3RlcHMgPSB2YWx1ZS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8Qnl0ZWNvZGUuSW5zdHJ1Y3Rpb24+IHNvdXJjZXMgPSB2YWx1ZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKTsKLSAgICAgICAgLy8gMiBidWZmZXJzIGZvciB0aGUgbGVuZ3RoICsgcGx1cyAyIGJ1ZmZlcnMgcGVyIGVhY2ggc3RlcCBhbmQgc291cmNlCi0KLSAgICAgICAgd3JpdGVJbnN0cnVjdGlvbnMoYnVmZmVyLCBjb250ZXh0LCBzdGVwcyk7Ci0gICAgICAgIHdyaXRlSW5zdHJ1Y3Rpb25zKGJ1ZmZlciwgY29udGV4dCwgc291cmNlcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHdyaXRlSW5zdHJ1Y3Rpb25zKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8Qnl0ZWNvZGUuSW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUoaW5zdHJ1Y3Rpb25zLnNpemUoKSwgYnVmZmVyLCBmYWxzZSk7Ci0KLSAgICAgICAgZm9yIChCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA6IGluc3RydWN0aW9ucykgewotICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICAgICAgZmlsbEFyZ3VtZW50c0J1ZmZlcihpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSwgYnVmZmVyLCBjb250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZmlsbEFyZ3VtZW50c0J1ZmZlcihmaW5hbCBPYmplY3RbXSBhcmd1bWVudHMsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKGFyZ3VtZW50cy5sZW5ndGgsIGJ1ZmZlciwgZmFsc2UpOwotCi0gICAgICAgIGZvciAoT2JqZWN0IHZhbHVlIDogYXJndW1lbnRzKSB7Ci0gICAgICAgICAgICBjb250ZXh0LndyaXRlKHZhbHVlLCBidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0NsYXNzU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0NsYXNzU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDJhNTE2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9DbGFzc1NlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBDbGFzc1NlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxDbGFzcz4gewotICAgIHB1YmxpYyBDbGFzc1NlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLkNMQVNTKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgQ2xhc3MgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBDbGFzcy5mb3JOYW1lKG5hbWUpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgQ2xhc3MgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXROYW1lKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9EYXRlU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0RhdGVTZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDZhNjkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0RhdGVTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIERhdGVTZXJpYWxpemVyPFQgZXh0ZW5kcyBEYXRlPiBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFQ+IHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRGF0ZVNlcmlhbGl6ZXI8RGF0ZT4gRGF0ZVNlcmlhbGl6ZXIgPSBuZXcgRGF0ZVNlcmlhbGl6ZXI8PihEYXRhVHlwZS5EQVRFLCBEYXRlOjpuZXcpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRGF0ZVNlcmlhbGl6ZXI8VGltZXN0YW1wPiBUaW1lc3RhbXBTZXJpYWxpemVyID0gbmV3IERhdGVTZXJpYWxpemVyPD4oRGF0YVR5cGUuVElNRVNUQU1QLCBUaW1lc3RhbXA6Om5ldyk7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEZ1bmN0aW9uPExvbmcsIFQ+IHJlYWRlcjsKLQotICAgIHByaXZhdGUgRGF0ZVNlcmlhbGl6ZXIoZmluYWwgRGF0YVR5cGUgdHlwZSwgZmluYWwgRnVuY3Rpb248TG9uZywgVD4gcmVhZGVyKSB7Ci0gICAgICAgIHN1cGVyKHR5cGUpOwotICAgICAgICB0aGlzLnJlYWRlciA9IHJlYWRlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgVCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgewotICAgICAgICByZXR1cm4gcmVhZGVyLmFwcGx5KGJ1ZmZlci5yZWFkTG9uZygpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIFQgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHsKLSAgICAgICAgYnVmZmVyLndyaXRlTG9uZyh2YWx1ZS5nZXRUaW1lKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9EYXRlVGltZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9EYXRlVGltZVNlcmlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTRkODkwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0RhdGVUaW1lU2VyaWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZTsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxUaW1lOworaW1wb3J0IGphdmEudGltZS5PZmZzZXREYXRlVGltZTsKK2ltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKKworLyoqCisgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCisgKi8KK3B1YmxpYyBjbGFzcyBEYXRlVGltZVNlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxPZmZzZXREYXRlVGltZT4geworICAgIHB1YmxpYyBEYXRlVGltZVNlcmlhbGl6ZXIoKSB7CisgICAgICAgIHN1cGVyKERhdGFUeXBlLkRBVEVUSU1FKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgT2Zmc2V0RGF0ZVRpbWUgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIExvY2FsRGF0ZSBsb2NhbERhdGUgPSBMb2NhbERhdGUub2YoYnVmZmVyLnJlYWRJbnQoKSwgYnVmZmVyLnJlYWRCeXRlKCksIGJ1ZmZlci5yZWFkQnl0ZSgpKTsKKyAgICAgICAgZmluYWwgTG9jYWxUaW1lIGxvY2FsVGltZSA9IExvY2FsVGltZS5vZk5hbm9PZkRheShidWZmZXIucmVhZExvbmcoKSk7CisgICAgICAgIGZpbmFsIExvY2FsRGF0ZVRpbWUgbGR0ID0gTG9jYWxEYXRlVGltZS5vZihsb2NhbERhdGUsIGxvY2FsVGltZSk7CisgICAgICAgIGZpbmFsIFpvbmVPZmZzZXQgem8gPSBab25lT2Zmc2V0Lm9mVG90YWxTZWNvbmRzKGJ1ZmZlci5yZWFkSW50KCkpOworICAgICAgICByZXR1cm4gT2Zmc2V0RGF0ZVRpbWUub2YobGR0LCB6byk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBPZmZzZXREYXRlVGltZSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgYnVmZmVyLndyaXRlSW50KHZhbHVlLmdldFllYXIoKSkud3JpdGVCeXRlKHZhbHVlLmdldE1vbnRoVmFsdWUoKSkud3JpdGVCeXRlKHZhbHVlLmdldERheU9mTW9udGgoKSk7CisgICAgICAgIGJ1ZmZlci53cml0ZUxvbmcodmFsdWUudG9Mb2NhbFRpbWUoKS50b05hbm9PZkRheSgpKTsKKyAgICAgICAgYnVmZmVyLndyaXRlSW50KHZhbHVlLmdldE9mZnNldCgpLmdldFRvdGFsU2Vjb25kcygpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvRWRnZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9FZGdlU2VyaWFsaXplci5qYXZhCmluZGV4IDhlNjkwMTcuLjZkNjE0ZDUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9FZGdlU2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9FZGdlU2VyaWFsaXplci5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLkl0ZXJhdG9yVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwpAQCAtMzAsNiArMzAsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUVkZ2U7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCkBAIC00MywxMiArNDQsMTUgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgRWRnZSByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgT2JqZWN0IGlkID0gY29udGV4dC5yZWFkKGJ1ZmZlcik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbCA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgU3RyaW5nLmNsYXNzLCBmYWxzZSk7CisgICAgICAgIC8vIHJlYWRpbmcgc2luZ2xlIHN0cmluZyB2YWx1ZSBmb3Igbm93IGFjY29yZGluZyB0byBHcmFwaEJpbmFyeVY0CisgICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbCA9IChTdHJpbmcpIGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTGlzdC5jbGFzcywgZmFsc2UpLmdldCgwKTsKIAogICAgICAgICBmaW5hbCBPYmplY3QgaW5WSWQgPSBjb250ZXh0LnJlYWQoYnVmZmVyKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIGluVkxhYmVsID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKKyAgICAgICAgLy8gcmVhZGluZyBzaW5nbGUgc3RyaW5nIHZhbHVlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQKKyAgICAgICAgZmluYWwgU3RyaW5nIGluVkxhYmVsID0gKFN0cmluZykgY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMaXN0LmNsYXNzLCBmYWxzZSkuZ2V0KDApOwogICAgICAgICBmaW5hbCBPYmplY3Qgb3V0VklkID0gY29udGV4dC5yZWFkKGJ1ZmZlcik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBvdXRWTGFiZWwgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgZmFsc2UpOworICAgICAgICAvLyByZWFkaW5nIHNpbmdsZSBzdHJpbmcgdmFsdWUgZm9yIG5vdyBhY2NvcmRpbmcgdG8gR3JhcGhCaW5hcnlWNAorICAgICAgICBmaW5hbCBTdHJpbmcgb3V0VkxhYmVsID0gKFN0cmluZykgY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMaXN0LmNsYXNzLCBmYWxzZSkuZ2V0KDApOwogCiAgICAgICAgIC8vIGRpc2NhcmQgdGhlIHBhcmVudCB2ZXJ0ZXgKICAgICAgICAgY29udGV4dC5yZWFkKGJ1ZmZlcik7CkBAIC03MywxMiArNzcsMTYgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIEVkZ2UgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgY29udGV4dC53cml0ZSh2YWx1ZS5pZCgpLCBidWZmZXIpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUubGFiZWwoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgIC8vIHdyYXBwaW5nIGxhYmVsIGludG8gbGlzdCBoZXJlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQsIGJ1dCB3ZSBhcmVuJ3QgYWxsb3dpbmcgbnVsbCBsYWJlbCB5ZXQKKyAgICAgICAgaWYgKHZhbHVlLmxhYmVsKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bGwgdmFsdWUgd2hlbiBudWxsYWJsZSBpcyBmYWxzZSIpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZShDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHZhbHVlLmxhYmVsKCkpLCBidWZmZXIsIGZhbHNlKTsKIAogICAgICAgICBjb250ZXh0LndyaXRlKHZhbHVlLmluVmVydGV4KCkuaWQoKSwgYnVmZmVyKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmluVmVydGV4KCkubGFiZWwoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZShDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHZhbHVlLmluVmVydGV4KCkubGFiZWwoKSksIGJ1ZmZlciwgZmFsc2UpOwogICAgICAgICBjb250ZXh0LndyaXRlKHZhbHVlLm91dFZlcnRleCgpLmlkKCksIGJ1ZmZlcik7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5vdXRWZXJ0ZXgoKS5sYWJlbCgpLCBidWZmZXIsIGZhbHNlKTsKKyAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QodmFsdWUub3V0VmVydGV4KCkubGFiZWwoKSksIGJ1ZmZlciwgZmFsc2UpOwogCiAgICAgICAgIC8vIHdlIGRvbid0IHNlcmlhbGl6ZSB0aGUgcGFyZW50IFZlcnRleCBmb3IgZWRnZXMuCiAgICAgICAgIGNvbnRleHQud3JpdGUobnVsbCwgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9FbnVtU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0VudW1TZXJpYWxpemVyLmphdmEKaW5kZXggYTVkNjliMi4uYWUxZDEyNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0VudW1TZXJpYWxpemVyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0VudW1TZXJpYWxpemVyLmphdmEKQEAgLTQ2LDE5ICs0NiwxMCBAQAogICovCiBwdWJsaWMgY2xhc3MgRW51bVNlcmlhbGl6ZXI8RSBleHRlbmRzIEVudW0+IGV4dGVuZHMgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8RT4gewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2VyaWFsaXplcjxTYWNrRnVuY3Rpb25zLkJhcnJpZXI+IEJhcnJpZXJTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuQkFSUklFUiwgU2Fja0Z1bmN0aW9ucy5CYXJyaWVyOjp2YWx1ZU9mKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXJpYWxpemVyPFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5PiBDYXJkaW5hbGl0eVNlcmlhbGl6ZXIgPSBuZXcgRW51bVNlcmlhbGl6ZXI8PihEYXRhVHlwZS5DQVJESU5BTElUWSwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHk6OnZhbHVlT2YpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRW51bVNlcmlhbGl6ZXI8Q29sdW1uPiBDb2x1bW5TZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuQ09MVU1OLCBDb2x1bW46OnZhbHVlT2YpOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRW51bVNlcmlhbGl6ZXI8RGlyZWN0aW9uPiBEaXJlY3Rpb25TZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuRElSRUNUSU9OLCBEaXJlY3Rpb246OnZhbHVlT2YpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRW51bVNlcmlhbGl6ZXI8RFQ+IERUU2VyaWFsaXplciA9IG5ldyBFbnVtU2VyaWFsaXplcjw+KERhdGFUeXBlLkRULCBEVDo6dmFsdWVPZik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2VyaWFsaXplcjxHVHlwZT4gR1R5cGVTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuR1RZUEUsIEdUeXBlOjp2YWx1ZU9mKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXJpYWxpemVyPE1lcmdlPiBNZXJnZVNlcmlhbGl6ZXIgPSBuZXcgRW51bVNlcmlhbGl6ZXI8PihEYXRhVHlwZS5NRVJHRSwgTWVyZ2U6OnZhbHVlT2YpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRW51bVNlcmlhbGl6ZXI8T3BlcmF0b3I+IE9wZXJhdG9yU2VyaWFsaXplciA9IG5ldyBFbnVtU2VyaWFsaXplcjw+KERhdGFUeXBlLk9QRVJBVE9SLCBPcGVyYXRvcjo6dmFsdWVPZik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2VyaWFsaXplcjxPcmRlcj4gT3JkZXJTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuT1JERVIsIE9yZGVyOjp2YWx1ZU9mKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXJpYWxpemVyPFBpY2s+IFBpY2tTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuUElDSywgUGljazo6dmFsdWVPZik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2VyaWFsaXplcjxQb3A+IFBvcFNlcmlhbGl6ZXIgPSBuZXcgRW51bVNlcmlhbGl6ZXI8PihEYXRhVHlwZS5QT1AsIFBvcDo6dmFsdWVPZik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2VyaWFsaXplcjxTY29wZT4gU2NvcGVTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuU0NPUEUsIFNjb3BlOjp2YWx1ZU9mKTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXJpYWxpemVyPFQ+IFRTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuVCwgVDo6dmFsdWVPZik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2VyaWFsaXplcjxNZXJnZT4gTWVyZ2VTZXJpYWxpemVyID0gbmV3IEVudW1TZXJpYWxpemVyPD4oRGF0YVR5cGUuTUVSR0UsIE1lcmdlOjp2YWx1ZU9mKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXJpYWxpemVyPEdUeXBlPiBHVHlwZVNlcmlhbGl6ZXIgPSBuZXcgRW51bVNlcmlhbGl6ZXI8PihEYXRhVHlwZS5HVFlQRSwgR1R5cGU6OnZhbHVlT2YpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBGdW5jdGlvbjxTdHJpbmcsIEU+IHJlYWRGdW5jOwogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvR3JhcGhTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvR3JhcGhTZXJpYWxpemVyLmphdmEKaW5kZXggMGZlNWRkNy4uNDEzODU1NSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0dyYXBoU2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9HcmFwaFNlcmlhbGl6ZXIuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CkBAIC02MywxNyArNjQsMTggQEAKICAgICAgICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gKEdyYXBoKSBvcGVuTWV0aG9kLmludm9rZShudWxsLCBjb25mKTsKICAgICAgICAgICAgIGZpbmFsIGludCB2ZXJ0ZXhDb3VudCA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgSW50ZWdlci5jbGFzcywgZmFsc2UpOwogICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IHZlcnRleENvdW50OyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVmVydGV4IHYgPSBncmFwaC5hZGRWZXJ0ZXgoVC5pZCwgY29udGV4dC5yZWFkKGJ1ZmZlciksIFQubGFiZWwsIGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgU3RyaW5nLmNsYXNzLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZ3JhcGguYWRkVmVydGV4KFQuaWQsIGNvbnRleHQucmVhZChidWZmZXIpLCBULmxhYmVsLCBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIExpc3QuY2xhc3MsIGZhbHNlKS5nZXQoMCkpOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCB2ZXJ0ZXhQcm9wZXJ0eUNvdW50ID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBJbnRlZ2VyLmNsYXNzLCBmYWxzZSk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGludCBpeSA9IDA7IGl5IDwgdmVydGV4UHJvcGVydHlDb3VudDsgaXkrKykgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgaWQgPSBjb250ZXh0LnJlYWQoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxhYmVsID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBzaW5nbGUgc3RyaW5nIHZhbHVlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxhYmVsID0gKFN0cmluZykgY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMaXN0LmNsYXNzLCBmYWxzZSkuZ2V0KDApOwogICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFsID0gY29udGV4dC5yZWFkKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVhZChidWZmZXIpOyAvLyB0b3NzIHBhcmVudCBhcyBpdCdzIGFsd2F5cyBudWxsCiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5PE9iamVjdD4gdnAgPSB2LnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5Lmxpc3QsIGxhYmVsLCB2YWwsIFQuaWQsIGlkKTsKIAotICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFByb3BlcnR5PiBlZGdlUHJvcGVydGllcyA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgQXJyYXlMaXN0LmNsYXNzLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8UHJvcGVydHk+IGVkZ2VQcm9wZXJ0aWVzID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMaXN0LmNsYXNzLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoUHJvcGVydHkgcCA6IGVkZ2VQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2cC5wcm9wZXJ0eShwLmtleSgpLCBwLnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC04Myw3ICs4NSw4IEBACiAgICAgICAgICAgICBmaW5hbCBpbnQgZWRnZUNvdW50ID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBJbnRlZ2VyLmNsYXNzLCBmYWxzZSk7CiAgICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgZWRnZUNvdW50OyBpeCsrKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IGlkID0gY29udGV4dC5yZWFkKGJ1ZmZlcik7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxhYmVsID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAvLyByZWFkaW5nIHNpbmdsZSBzdHJpbmcgdmFsdWUgZm9yIG5vdyBhY2NvcmRpbmcgdG8gR3JhcGhCaW5hcnlWNAorICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbCA9IChTdHJpbmcpIGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTGlzdC5jbGFzcywgZmFsc2UpLmdldCgwKTsKICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgaW5JZCA9IGNvbnRleHQucmVhZChidWZmZXIpOwogICAgICAgICAgICAgICAgIGZpbmFsIFZlcnRleCBpblYgPSBncmFwaC52ZXJ0aWNlcyhpbklkKS5uZXh0KCk7CiAgICAgICAgICAgICAgICAgY29udGV4dC5yZWFkKGJ1ZmZlcik7ICAvLyB0b3NzIGluIGxhYmVsIC0gYWx3YXlzIG51bGwgaW4gdGhpcyBjb250ZXh0CkBAIC0xMzEsMTIgKzEzNCwxMyBAQAogICAgICAgICBmaW5hbCBMaXN0PFZlcnRleFByb3BlcnR5PE9iamVjdD4+IHZlcnRleFByb3BlcnRpZXMgPSBJdGVyYXRvclV0aWxzLmxpc3QodmVydGV4LnByb3BlcnRpZXMoKSk7CiAKICAgICAgICAgY29udGV4dC53cml0ZSh2ZXJ0ZXguaWQoKSwgYnVmZmVyKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZlcnRleC5sYWJlbCgpLCBidWZmZXIsIGZhbHNlKTsKKyAgICAgICAgLy8gc2VyaWFsaXppbmcgbGFiZWwgYXMgbGlzdCBoZXJlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQKKyAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QodmVydGV4LmxhYmVsKCkpLCBidWZmZXIsIGZhbHNlKTsKICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZlcnRleFByb3BlcnRpZXMuc2l6ZSgpLCBidWZmZXIsIGZhbHNlKTsKIAogICAgICAgICBmb3IgKFZlcnRleFByb3BlcnR5PE9iamVjdD4gdnAgOiB2ZXJ0ZXhQcm9wZXJ0aWVzKSB7CiAgICAgICAgICAgICBjb250ZXh0LndyaXRlKHZwLmlkKCksIGJ1ZmZlcik7Ci0gICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodnAubGFiZWwoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCh2cC5sYWJlbCgpKSwgYnVmZmVyLCBmYWxzZSk7CiAgICAgICAgICAgICBjb250ZXh0LndyaXRlKHZwLnZhbHVlKCksIGJ1ZmZlcik7CiAKICAgICAgICAgICAgIC8vIG1haW50YWluIHRoZSBWZXJ0ZXhQcm9wZXJ0eSBmb3JtYXQgd2UgaGF2ZSB3aXRoIHRoaXMgZW1wdHkgcGFyZW50Li4uLi4uLi4uCkBAIC0xNDksNyArMTUzLDggQEAKIAogICAgIHByaXZhdGUgdm9pZCB3cml0ZUVkZ2UoQnVmZmVyIGJ1ZmZlciwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCwgRWRnZSBlZGdlKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBjb250ZXh0LndyaXRlKGVkZ2UuaWQoKSwgYnVmZmVyKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKGVkZ2UubGFiZWwoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgIC8vIHNlcmlhbGl6aW5nIGxhYmVsIGFzIGxpc3QgaGVyZSBmb3Igbm93IGFjY29yZGluZyB0byBHcmFwaEJpbmFyeVY0CisgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZShDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGVkZ2UubGFiZWwoKSksIGJ1ZmZlciwgZmFsc2UpOwogCiAgICAgICAgIGNvbnRleHQud3JpdGUoZWRnZS5pblZlcnRleCgpLmlkKCksIGJ1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9JbmV0QWRkcmVzc1NlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9JbmV0QWRkcmVzc1NlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U0MmM2ZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvSW5ldEFkZHJlc3NTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEluZXRBZGRyZXNzU2VyaWFsaXplcjxUIGV4dGVuZHMgSW5ldEFkZHJlc3M+IGV4dGVuZHMgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VD4gewotICAgIHB1YmxpYyBJbmV0QWRkcmVzc1NlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLklORVRBRERSRVNTKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgVCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGJ1ZmZlci5yZWFkSW50KCk7Ci0gICAgICAgIGZpbmFsIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2xlbmd0aF07Ci0gICAgICAgIGJ1ZmZlci5yZWFkQnl0ZXMoYnl0ZXMpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gKFQpIEluZXRBZGRyZXNzLmdldEJ5QWRkcmVzcyhieXRlcyk7Ci0gICAgICAgIH0gY2F0Y2ggKFVua25vd25Ib3N0RXhjZXB0aW9uIHVoZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJDYW5ub3QgZGVzZXJpYWxpemUgSW5ldEFkZHJlc3MgdmFsdWUiLCB1aGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBUIHZhbHVlLCBmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB2YWx1ZS5nZXRBZGRyZXNzKCk7Ci0gICAgICAgIGJ1ZmZlci53cml0ZUludChieXRlcy5sZW5ndGgpLndyaXRlQnl0ZXMoYnl0ZXMpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9JbnN0YW50U2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0luc3RhbnRTZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNTA0OTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0luc3RhbnRTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEluc3RhbnRTZXJpYWxpemVyIGV4dGVuZHMgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8SW5zdGFudD4gewotICAgIHB1YmxpYyBJbnN0YW50U2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuSU5TVEFOVCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIEluc3RhbnQgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBJbnN0YW50Lm9mRXBvY2hTZWNvbmQoYnVmZmVyLnJlYWRMb25nKCksIGJ1ZmZlci5yZWFkSW50KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgSW5zdGFudCB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgYnVmZmVyLndyaXRlTG9uZyh2YWx1ZS5nZXRFcG9jaFNlY29uZCgpKS53cml0ZUludCh2YWx1ZS5nZXROYW5vKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9MYW1iZGFTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTGFtYmRhU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDEzZTlmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9MYW1iZGFTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgTGFtYmRhU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPExhbWJkYT4gewotICAgIHB1YmxpYyBMYW1iZGFTZXJpYWxpemVyKCkgewotICAgICAgICBzdXBlcihEYXRhVHlwZS5MQU1CREEpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBMYW1iZGEgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsYW5nID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgU3RyaW5nLmNsYXNzLCBmYWxzZSk7Ci0gICAgICAgIGZpbmFsIGludCBhcmdzID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBJbnRlZ2VyLmNsYXNzLCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKDAgPT0gYXJncykKLSAgICAgICAgICAgIHJldHVybiBuZXcgTGFtYmRhLlplcm9BcmdMYW1iZGE8PihzY3JpcHQsIGxhbmcpOwotICAgICAgICBlbHNlIGlmICgxID09IGFyZ3MpCi0gICAgICAgICAgICByZXR1cm4gbmV3IExhbWJkYS5PbmVBcmdMYW1iZGE8PihzY3JpcHQsIGxhbmcpOwotICAgICAgICBlbHNlIGlmICgyID09IGFyZ3MpCi0gICAgICAgICAgICByZXR1cm4gbmV3IExhbWJkYS5Ud29BcmdMYW1iZGE8PihzY3JpcHQsIGxhbmcpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbmV3IExhbWJkYS5Vbmtub3duQXJnTGFtYmRhKHNjcmlwdCwgbGFuZywgYXJncyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBMYW1iZGEgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXRMYW1iZGFMYW5ndWFnZSgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldExhbWJkYVNjcmlwdCgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldExhbWJkYUFyZ3VtZW50cygpLCBidWZmZXIsIGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTGlzdFNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9MaXN0U2VyaWFsaXplci5qYXZhCmluZGV4IDYyYzk3ZDYuLjlhZjEzYzggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9MaXN0U2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9MaXN0U2VyaWFsaXplci5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiBwdWJsaWMgY2xhc3MgTGlzdFNlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxMaXN0PiB7CkBAIC0zNCw2ICszNSwzMCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBMaXN0IHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0LCBmaW5hbCBib29sZWFuIG51bGxhYmxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAobnVsbGFibGUpIHsKKyAgICAgICAgICAgIGZpbmFsIGJ5dGUgdmFsdWVGbGFnID0gYnVmZmVyLnJlYWRCeXRlKCk7CisgICAgICAgICAgICBpZiAoKHZhbHVlRmxhZyAmIDEpID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgodmFsdWVGbGFnICYgMikgPT0gMikgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBsZW5ndGggPSBidWZmZXIucmVhZEludCgpOworICAgICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KGxlbmd0aCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBPYmplY3QgaXRlbSA9IGNvbnRleHQucmVhZChidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBsb25nIGJ1bGsgPSBidWZmZXIucmVhZExvbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBidWxrOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWFkVmFsdWUoYnVmZmVyLCBjb250ZXh0KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgTGlzdCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgLy8gVGhlIGNvbGxlY3Rpb24gaXMgYSBMaXN0PD4KICAgICAgICAgcmV0dXJuIChMaXN0KSBjb2xsZWN0aW9uU2VyaWFsaXplci5yZWFkVmFsdWUoYnVmZmVyLCBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9Mb2NhbERhdGVTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTG9jYWxEYXRlU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjAxYmNiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9Mb2NhbERhdGVTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGU7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgTG9jYWxEYXRlU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPExvY2FsRGF0ZT4gewotICAgIHB1YmxpYyBMb2NhbERhdGVTZXJpYWxpemVyKCkgewotICAgICAgICBzdXBlcihEYXRhVHlwZS5MT0NBTERBVEUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBMb2NhbERhdGUgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBMb2NhbERhdGUub2YoYnVmZmVyLnJlYWRJbnQoKSwgYnVmZmVyLnJlYWRCeXRlKCksIGJ1ZmZlci5yZWFkQnl0ZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIExvY2FsRGF0ZSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgYnVmZmVyLndyaXRlSW50KHZhbHVlLmdldFllYXIoKSkud3JpdGVCeXRlKHZhbHVlLmdldE1vbnRoVmFsdWUoKSkud3JpdGVCeXRlKHZhbHVlLmdldERheU9mTW9udGgoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0xvY2FsRGF0ZVRpbWVTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTG9jYWxEYXRlVGltZVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZhYzVlNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTG9jYWxEYXRlVGltZVNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZTsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxUaW1lOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvY2FsRGF0ZVRpbWVTZXJpYWxpemVyIGV4dGVuZHMgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8TG9jYWxEYXRlVGltZT4gewotICAgIHB1YmxpYyBMb2NhbERhdGVUaW1lU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuTE9DQUxEQVRFVElNRSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIExvY2FsRGF0ZVRpbWUgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBMb2NhbERhdGVUaW1lLm9mKGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTG9jYWxEYXRlLmNsYXNzLCBmYWxzZSksCi0gICAgICAgICAgICAgICAgY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMb2NhbFRpbWUuY2xhc3MsIGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBMb2NhbERhdGVUaW1lIHZhbHVlLCBmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUudG9Mb2NhbERhdGUoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS50b0xvY2FsVGltZSgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTG9jYWxUaW1lU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL0xvY2FsVGltZVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IzN2NiYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTG9jYWxUaW1lU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxUaW1lOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIExvY2FsVGltZVNlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxMb2NhbFRpbWU+IHsKLSAgICBwdWJsaWMgTG9jYWxUaW1lU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuTE9DQUxUSU1FKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgTG9jYWxUaW1lIHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gTG9jYWxUaW1lLm9mTmFub09mRGF5KGJ1ZmZlci5yZWFkTG9uZygpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIExvY2FsVGltZSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgYnVmZmVyLndyaXRlTG9uZyh2YWx1ZS50b05hbm9PZkRheSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTWFwU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL01hcFNlcmlhbGl6ZXIuamF2YQppbmRleCAwODIxYTBhLi45ZThmMzNmIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvTWFwU2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9NYXBTZXJpYWxpemVyLmphdmEKQEAgLTI0LDE2ICsyNCwzNCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiBwdWJsaWMgY2xhc3MgTWFwU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPE1hcD4geworCiAgICAgcHVibGljIE1hcFNlcmlhbGl6ZXIoKSB7CiAgICAgICAgIHN1cGVyKERhdGFUeXBlLk1BUCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1hcCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCwgZmluYWwgYm9vbGVhbiBudWxsYWJsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG51bGxhYmxlKSB7CisgICAgICAgICAgICBmaW5hbCBieXRlIHZhbHVlRmxhZyA9IGJ1ZmZlci5yZWFkQnl0ZSgpOworICAgICAgICAgICAgaWYgKCh2YWx1ZUZsYWcgJiAxKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHZhbHVlRmxhZyAmIDIpID09IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZFZhbHVlKGJ1ZmZlciwgY29udGV4dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByZWFkTWFwKGJ1ZmZlciwgY29udGV4dCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIE1hcCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IGJ1ZmZlci5yZWFkSW50KCk7CiAKQEAgLTQ1LDYgKzYzLDE3IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgcHJpdmF0ZSBNYXAgcmVhZE1hcChmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYnVmZmVyLnJlYWRJbnQoKTsKKworICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LE9iamVjdD4gcmVzdWx0ID0gbmV3IEhhc2hNYXA8PihsZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICByZXN1bHQucHV0KGNvbnRleHQucmVhZChidWZmZXIpLCBjb250ZXh0LnJlYWQoYnVmZmVyKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgTWFwIHZhbHVlLCBmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBidWZmZXIud3JpdGVJbnQodmFsdWUuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9NZXRyaWNzU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL01ldHJpY3NTZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YTg0ZTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL01ldHJpY3NTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuTWV0cmljczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuTXV0YWJsZU1ldHJpY3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi1wdWJsaWMgY2xhc3MgTWV0cmljc1NlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxNZXRyaWNzPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29sbGVjdGlvblNlcmlhbGl6ZXIgY29sbGVjdGlvblNlcmlhbGl6ZXIgPSBuZXcgQ29sbGVjdGlvblNlcmlhbGl6ZXIoRGF0YVR5cGUuTElTVCk7Ci0KLSAgICBwdWJsaWMgTWV0cmljc1NlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLk1FVFJJQ1MpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBNZXRyaWNzIHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAvLyBDb25zaWRlciB1c2luZyBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiwgbGlrZSAiRGVmYXVsdE1ldHJpY3MiCi0gICAgICAgIGZpbmFsIE11dGFibGVNZXRyaWNzIHJlc3VsdCA9IG5ldyBNdXRhYmxlTWV0cmljcygKLSAgICAgICAgICAgICAgICBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgZmFsc2UpLAotICAgICAgICAgICAgICAgIGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgU3RyaW5nLmNsYXNzLCBmYWxzZSkpOwotICAgICAgICByZXN1bHQuc2V0RHVyYXRpb24oY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMb25nLmNsYXNzLCBmYWxzZSksIFRpbWVVbml0Lk5BTk9TRUNPTkRTKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gY291bnRzID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBNYXAuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgY291bnRzLmZvckVhY2gocmVzdWx0OjpzZXRDb3VudCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYW5ub3RhdGlvbnMgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIE1hcC5jbGFzcywgZmFsc2UpOwotICAgICAgICBhbm5vdGF0aW9ucy5mb3JFYWNoKHJlc3VsdDo6c2V0QW5ub3RhdGlvbik7Ci0gICAgICAgIGZpbmFsIENvbGxlY3Rpb248TXV0YWJsZU1ldHJpY3M+IG5lc3RlZE1ldHJpY3MgPSBjb2xsZWN0aW9uU2VyaWFsaXplci5yZWFkVmFsdWUoYnVmZmVyLCBjb250ZXh0KTsKLSAgICAgICAgbmVzdGVkTWV0cmljcy5mb3JFYWNoKHJlc3VsdDo6YWRkTmVzdGVkKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIE1ldHJpY3MgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXRJZCgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldE5hbWUoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXREdXJhdGlvbihUaW1lVW5pdC5OQU5PU0VDT05EUyksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUuZ2V0Q291bnRzKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUuZ2V0QW5ub3RhdGlvbnMoKSwgYnVmZmVyLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gQXZvaWQgY2hhbmdpbmcgdHlwZSB0byBMaXN0Ci0gICAgICAgIGNvbGxlY3Rpb25TZXJpYWxpemVyLndyaXRlVmFsdWUodmFsdWUuZ2V0TmVzdGVkKCksIGJ1ZmZlciwgY29udGV4dCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL01vbnRoRGF5U2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL01vbnRoRGF5U2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTlkNzJkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9Nb250aERheVNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS50aW1lLk1vbnRoRGF5OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE1vbnRoRGF5U2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPE1vbnRoRGF5PiB7Ci0gICAgcHVibGljIE1vbnRoRGF5U2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuTU9OVEhEQVkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBNb250aERheSByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIE1vbnRoRGF5Lm9mKGJ1ZmZlci5yZWFkQnl0ZSgpLCBidWZmZXIucmVhZEJ5dGUoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBNb250aERheSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgYnVmZmVyLndyaXRlQnl0ZSh2YWx1ZS5nZXRNb250aFZhbHVlKCkpLndyaXRlQnl0ZSh2YWx1ZS5nZXREYXlPZk1vbnRoKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9PZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9PZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2MGMxZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwotaW1wb3J0IGphdmEudGltZS5PZmZzZXREYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBPZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxPZmZzZXREYXRlVGltZT4gewotICAgIHB1YmxpYyBPZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLk9GRlNFVERBVEVUSU1FKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgT2Zmc2V0RGF0ZVRpbWUgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIExvY2FsRGF0ZVRpbWUgbGR0ID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMb2NhbERhdGVUaW1lLmNsYXNzLCBmYWxzZSk7Ci0gICAgICAgIGZpbmFsIFpvbmVPZmZzZXQgem8gPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFpvbmVPZmZzZXQuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIE9mZnNldERhdGVUaW1lLm9mKGxkdCwgem8pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgT2Zmc2V0RGF0ZVRpbWUgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS50b0xvY2FsRGF0ZVRpbWUoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXRPZmZzZXQoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL09mZnNldFRpbWVTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvT2Zmc2V0VGltZVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2Y2FiYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvT2Zmc2V0VGltZVNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS50aW1lLkxvY2FsVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0VGltZTsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBPZmZzZXRUaW1lU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPE9mZnNldFRpbWU+IHsKLSAgICBwdWJsaWMgT2Zmc2V0VGltZVNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLk9GRlNFVFRJTUUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBPZmZzZXRUaW1lIHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBMb2NhbFRpbWUgbGR0ID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMb2NhbFRpbWUuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgZmluYWwgWm9uZU9mZnNldCB6byA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgWm9uZU9mZnNldC5jbGFzcywgZmFsc2UpOwotICAgICAgICByZXR1cm4gT2Zmc2V0VGltZS5vZihsZHQsIHpvKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIE9mZnNldFRpbWUgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS50b0xvY2FsVGltZSgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldE9mZnNldCgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvUGVyaW9kU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1BlcmlvZFNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y1NTRiYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvUGVyaW9kU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRpbWUuUGVyaW9kOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFBlcmlvZFNlcmlhbGl6ZXIgZXh0ZW5kcyBTaW1wbGVUeXBlU2VyaWFsaXplcjxQZXJpb2Q+IHsKLSAgICBwdWJsaWMgUGVyaW9kU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuUEVSSU9EKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgUGVyaW9kIHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gUGVyaW9kLm9mKGJ1ZmZlci5yZWFkSW50KCksIGJ1ZmZlci5yZWFkSW50KCksIGJ1ZmZlci5yZWFkSW50KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgUGVyaW9kIHZhbHVlLCBmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBidWZmZXIud3JpdGVJbnQodmFsdWUuZ2V0WWVhcnMoKSkud3JpdGVJbnQodmFsdWUuZ2V0TW9udGhzKCkpLndyaXRlSW50KHZhbHVlLmdldERheXMoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1NpbXBsZVR5cGVTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvU2ltcGxlVHlwZVNlcmlhbGl6ZXIuamF2YQppbmRleCA1NjgyNDNjLi45MTcxNjAwIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvU2ltcGxlVHlwZVNlcmlhbGl6ZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvU2ltcGxlVHlwZVNlcmlhbGl6ZXIuamF2YQpAQCAtMTgsNiArMTgsNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKIAoraW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkJ1bGtTZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7CkBAIC0yNSw2ICsyNiw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKIAogLyoqCiAgKiBCYXNlIGNsYXNzIGZvciBzZXJpYWxpemF0aW9uIG9mIHR5cGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0eXBlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9ubHkge3R5cGVfY29kZX0sIHt2YWx1ZV9mbGFnfQpAQCAtNjEsMTAgKzYzLDExIEBACiAKICAgICAvKioKICAgICAgKiBSZWFkcyBhIG5vbi1udWxsYWJsZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgZm9ybWF0LgotICAgICAqIEBwYXJhbSBidWZmZXIgQSBidWZmZXIgd2hpY2ggcmVhZGVyIGluZGV4IGhhcyBiZWVuIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB7dmFsdWV9LgorICAgICAqCisgICAgICogQHBhcmFtIGJ1ZmZlciAgQSBidWZmZXIgd2hpY2ggcmVhZGVyIGluZGV4IGhhcyBiZWVuIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB7dmFsdWV9LgogICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBiaW5hcnkgcmVhZGVyLgotICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisgICAgICogQHNpbmNlIDQuMC4wCiAgICAgICovCiAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFQgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbjsKIApAQCAtODUsNyArODgsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChudWxsYWJsZSkgewotICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlRmxhZ05vbmUoYnVmZmVyKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExpbmtlZEhhc2hNYXApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWVGbGFnT3JkZXJlZChidWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJ1bGtTZXQpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWVGbGFnQnVsayhidWZmZXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWVGbGFnTm9uZShidWZmZXIpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgd3JpdGVWYWx1ZSh2YWx1ZSwgYnVmZmVyLCBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9TaW5nbGVUeXBlU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1NpbmdsZVR5cGVTZXJpYWxpemVyLmphdmEKaW5kZXggNmU5NDY1YS4uYmNjMDExMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1NpbmdsZVR5cGVTZXJpYWxpemVyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1NpbmdsZVR5cGVTZXJpYWxpemVyLmphdmEKQEAgLTIyLDYgKzIyLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuTWFya2VyOwogCiBpbXBvcnQgamF2YS50aW1lLlllYXI7CiBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkJpQ29uc3VtZXI7CkBAIC00Niw4ICs0Nyw4IEBACiAgICAgICAgICAgICBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8PihEYXRhVHlwZS5CT09MRUFOLCBCdWZmZXI6OnJlYWRCb29sZWFuLCAodiwgYikgLT4gYi53cml0ZUJvb2xlYW4odikpOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8Qnl0ZT4gQnl0ZVNlcmlhbGl6ZXIgPQogICAgICAgICAgICAgbmV3IFNpbmdsZVR5cGVTZXJpYWxpemVyPD4oRGF0YVR5cGUuQllURSwgQnVmZmVyOjpyZWFkQnl0ZSwgKHYsIGIpIC0+IGIud3JpdGVCeXRlKHYpKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNpbmdsZVR5cGVTZXJpYWxpemVyPFllYXI+IFllYXJTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBTaW5nbGVUeXBlU2VyaWFsaXplcjw+KERhdGFUeXBlLllFQVIsIGJiIC0+IFllYXIub2YoYmIucmVhZEludCgpKSwgKHYsIGIpIC0+IGIud3JpdGVJbnQodi5nZXRWYWx1ZSgpKSk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTaW5nbGVUeXBlU2VyaWFsaXplcjxNYXJrZXI+IE1hcmtlclNlcmlhbGl6ZXIgPQorICAgICAgICAgICAgbmV3IFNpbmdsZVR5cGVTZXJpYWxpemVyPD4oRGF0YVR5cGUuTUFSS0VSLCBiYiAtPiBNYXJrZXIub2YoYmIucmVhZEJ5dGUoKSksICh2LCBiKSAtPiBiLndyaXRlQnl0ZSh2LmdldFZhbHVlKCkpKTsKIAogICAgIHByaXZhdGUgZmluYWwgRnVuY3Rpb248QnVmZmVyLCBUPiByZWFkRnVuYzsKICAgICBwcml2YXRlIGZpbmFsIEJpQ29uc3VtZXI8VCwgQnVmZmVyPiB3cml0ZUZ1bmM7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvVHJhdmVyc2FsTWV0cmljc1NlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9UcmF2ZXJzYWxNZXRyaWNzU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ0ZDY3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9UcmF2ZXJzYWxNZXRyaWNzU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkRlZmF1bHRUcmF2ZXJzYWxNZXRyaWNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5NdXRhYmxlTWV0cmljczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuVHJhdmVyc2FsTWV0cmljczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLXB1YmxpYyBjbGFzcyBUcmF2ZXJzYWxNZXRyaWNzU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFRyYXZlcnNhbE1ldHJpY3M+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb2xsZWN0aW9uU2VyaWFsaXplciBjb2xsZWN0aW9uU2VyaWFsaXplciA9IG5ldyBDb2xsZWN0aW9uU2VyaWFsaXplcihEYXRhVHlwZS5MSVNUKTsKLQotICAgIHB1YmxpYyBUcmF2ZXJzYWxNZXRyaWNzU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuVFJBVkVSU0FMTUVUUklDUyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRyYXZlcnNhbE1ldHJpY3MgcmVhZFZhbHVlKEJ1ZmZlciBidWZmZXIsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExvbmcgZHVyYXRpb25OYW5vcyA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTG9uZy5jbGFzcywgZmFsc2UpOwotICAgICAgICBmaW5hbCBMaXN0PE11dGFibGVNZXRyaWNzPiBtZXRyaWNzID0gbmV3IEFycmF5TGlzdDw+KGNvbGxlY3Rpb25TZXJpYWxpemVyLnJlYWRWYWx1ZShidWZmZXIsIGNvbnRleHQpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0VHJhdmVyc2FsTWV0cmljcyhkdXJhdGlvbk5hbm9zLCBtZXRyaWNzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKFRyYXZlcnNhbE1ldHJpY3MgdmFsdWUsIEJ1ZmZlciBidWZmZXIsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXREdXJhdGlvbihUaW1lVW5pdC5OQU5PU0VDT05EUyksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb2xsZWN0aW9uU2VyaWFsaXplci53cml0ZVZhbHVlKHZhbHVlLmdldE1ldHJpY3MoKSwgYnVmZmVyLCBjb250ZXh0KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3OTBiMjEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1RyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb25Db252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLk1hcENvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LlRyYXZlcnNhbFN0cmF0ZWd5UHJveHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFRyYXZlcnNhbFN0cmF0ZWd5PiB7Ci0KLSAgICBwdWJsaWMgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyKCkgewotICAgICAgICBzdXBlcihEYXRhVHlwZS5UUkFWRVJTQUxTVFJBVEVHWSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFRyYXZlcnNhbFN0cmF0ZWd5IHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbGFzczxUcmF2ZXJzYWxTdHJhdGVneT4gY2xhenogPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIENsYXNzLmNsYXNzLCBmYWxzZSk7Ci0gICAgICAgIGZpbmFsIE1hcCBjb25maWcgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIE1hcC5jbGFzcywgZmFsc2UpOwotCi0gICAgICAgIHJldHVybiBuZXcgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eShjbGF6eiwgbmV3IE1hcENvbmZpZ3VyYXRpb24oY29uZmlnKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldENsYXNzKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodHJhbnNsYXRlVG9CeXRlY29kZShDb25maWd1cmF0aW9uQ29udmVydGVyLmdldE1hcCh2YWx1ZS5nZXRDb25maWd1cmF0aW9uKCkpKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPE9iamVjdCxPYmplY3Q+IHRyYW5zbGF0ZVRvQnl0ZWNvZGUoZmluYWwgTWFwPE9iamVjdCxPYmplY3Q+IGNvbmYpIHsKLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCxPYmplY3Q+IG5ld0NvbmYgPSBuZXcgTGlua2VkSGFzaE1hcDw+KGNvbmYuc2l6ZSgpKTsKLSAgICAgICAgY29uZi5lbnRyeVNldCgpLmZvckVhY2goZW50cnkgLT4gewotICAgICAgICAgICAgaWYgKGVudHJ5LmdldFZhbHVlKCkgaW5zdGFuY2VvZiBUcmF2ZXJzYWwpCi0gICAgICAgICAgICAgICAgbmV3Q29uZi5wdXQoZW50cnkuZ2V0S2V5KCksICgoVHJhdmVyc2FsKSBlbnRyeS5nZXRWYWx1ZSgpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV3Q29uZi5wdXQoZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIG5ld0NvbmY7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1RyYXZlcnNlclNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9UcmF2ZXJzZXJTZXJpYWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwMTllYmQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1RyYXZlcnNlclNlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBUcmF2ZXJzZXJTZXJpYWxpemVyIGV4dGVuZHMgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VHJhdmVyc2VyPiB7Ci0KLSAgICBwdWJsaWMgVHJhdmVyc2VyU2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuVFJBVkVSU0VSKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgVHJhdmVyc2VyIHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBsb25nIGJ1bGsgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIExvbmcuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IHYgPSBjb250ZXh0LnJlYWQoYnVmZmVyKTsKLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0UmVtb3RlVHJhdmVyc2VyPD4odiwgYnVsayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBUcmF2ZXJzZXIgdmFsdWUsIGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5idWxrKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb250ZXh0LndyaXRlKHZhbHVlLmdldCgpLCBidWZmZXIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuamF2YQppbmRleCBhZmY5NzQyLi5kOTc0MjBkIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLkl0ZXJhdG9yVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7CkBAIC00NSw3ICs0NSw3IEBACiAgICAgcHJvdGVjdGVkIFZlcnRleFByb3BlcnR5IHJlYWRWYWx1ZShmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVJlYWRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBmaW5hbCBEZXRhY2hlZFZlcnRleFByb3BlcnR5LkJ1aWxkZXIgYnVpbGRlciA9IERldGFjaGVkVmVydGV4UHJvcGVydHkuYnVpbGQoKQogICAgICAgICAgICAgICAgIC5zZXRJZChjb250ZXh0LnJlYWQoYnVmZmVyKSkKLSAgICAgICAgICAgICAgICAuc2V0TGFiZWwoY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICAuc2V0TGFiZWwoKFN0cmluZykgY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMaXN0LmNsYXNzLCBmYWxzZSkuZ2V0KDApKQogICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShjb250ZXh0LnJlYWQoYnVmZmVyKSk7CiAKICAgICAgICAgLy8gZGlzY2FyZCB0aGUgcGFyZW50IHZlcnRleCAtIHdlIG9ubHkgc2VuZCAicmVmZXJlbmNlcyIKQEAgLTYyLDcgKzYyLDExIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dC53cml0ZSh2YWx1ZS5pZCgpLCBidWZmZXIpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUubGFiZWwoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgIC8vIHdyYXBwaW5nIGxhYmVsIGludG8gbGlzdCBoZXJlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQsIGJ1dCB3ZSBhcmVuJ3QgYWxsb3dpbmcgbnVsbCBsYWJlbCB5ZXQKKyAgICAgICAgaWYgKHZhbHVlLmxhYmVsKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bGwgdmFsdWUgd2hlbiBudWxsYWJsZSBpcyBmYWxzZSIpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZShDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHZhbHVlLmxhYmVsKCkpLCBidWZmZXIsIGZhbHNlKTsKICAgICAgICAgY29udGV4dC53cml0ZSh2YWx1ZS52YWx1ZSgpLCBidWZmZXIpOwogCiAgICAgICAgIC8vIHdlIGRvbid0IHNlcmlhbGl6ZSB0aGUgcGFyZW50IHZlcnRleCwgbGV0J3MgaG9sZCBhIHBsYWNlIGZvciBpdApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1ZlcnRleFNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9WZXJ0ZXhTZXJpYWxpemVyLmphdmEKaW5kZXggNzkxZmJiNS4uMWFiMWQ4MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L3R5cGVzL1ZlcnRleFNlcmlhbGl6ZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvVmVydGV4U2VyaWFsaXplci5qYXZhCkBAIC0xOCw5ICsxOCw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLkl0ZXJhdG9yVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKQEAgLTMwLDYgKzI5LDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VWZXJ0ZXg7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCkBAIC00Myw3ICs0Myw4IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIFZlcnRleCByZWFkVmFsdWUoZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgT2JqZWN0IGlkID0gY29udGV4dC5yZWFkKGJ1ZmZlcik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbCA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgU3RyaW5nLmNsYXNzLCBmYWxzZSk7CisgICAgICAgIC8vIHJlYWRpbmcgc2luZ2xlIHN0cmluZyB2YWx1ZSBmb3Igbm93IGFjY29yZGluZyB0byBHcmFwaEJpbmFyeVY0CisgICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbCA9IChTdHJpbmcpIGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTGlzdC5jbGFzcywgZmFsc2UpLmdldCgwKTsKICAgICAgICAgZmluYWwgTGlzdDxEZXRhY2hlZFZlcnRleFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gY29udGV4dC5yZWFkKGJ1ZmZlcik7CiAKICAgICAgICAgZmluYWwgRGV0YWNoZWRWZXJ0ZXguQnVpbGRlciBidWlsZGVyID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRJZChpZCkuc2V0TGFiZWwobGFiZWwpOwpAQCAtNjAsNyArNjEsMTEgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVZhbHVlKGZpbmFsIFZlcnRleCB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgY29udGV4dC53cml0ZSh2YWx1ZS5pZCgpLCBidWZmZXIpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUubGFiZWwoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgIC8vIHdyYXBwaW5nIGxhYmVsIGludG8gbGlzdCBoZXJlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQsIGJ1dCB3ZSBhcmVuJ3QgYWxsb3dpbmcgbnVsbCBsYWJlbCB5ZXQKKyAgICAgICAgaWYgKHZhbHVlLmxhYmVsKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJVbmV4cGVjdGVkIG51bGwgdmFsdWUgd2hlbiBudWxsYWJsZSBpcyBmYWxzZSIpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZShDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHZhbHVlLmxhYmVsKCkpLCBidWZmZXIsIGZhbHNlKTsKICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmZXJlbmNlVmVydGV4KSB7CiAgICAgICAgICAgICBjb250ZXh0LndyaXRlKG51bGwsIGJ1ZmZlcik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9ZZWFyTW9udGhTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvWWVhck1vbnRoU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmZjMzdhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9ZZWFyTW9udGhTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5UmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVdyaXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5CdWZmZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudGltZS5ZZWFyTW9udGg7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgWWVhck1vbnRoU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFllYXJNb250aD4gewotICAgIHB1YmxpYyBZZWFyTW9udGhTZXJpYWxpemVyKCkgewotICAgICAgICBzdXBlcihEYXRhVHlwZS5ZRUFSTU9OVEgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBZZWFyTW9udGggcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBZZWFyTW9udGgub2YoYnVmZmVyLnJlYWRJbnQoKSwgYnVmZmVyLnJlYWRCeXRlKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgWWVhck1vbnRoIHZhbHVlLCBmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBidWZmZXIud3JpdGVJbnQodmFsdWUuZ2V0WWVhcigpKS53cml0ZUJ5dGUodmFsdWUuZ2V0TW9udGhWYWx1ZSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvWm9uZU9mZnNldFNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9ab25lT2Zmc2V0U2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDUwYzdkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9ab25lT2Zmc2V0U2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBab25lT2Zmc2V0U2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFpvbmVPZmZzZXQ+IHsKLQotICAgIHB1YmxpYyBab25lT2Zmc2V0U2VyaWFsaXplcigpIHsKLSAgICAgICAgc3VwZXIoRGF0YVR5cGUuWk9ORU9GRlNFVCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFpvbmVPZmZzZXQgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBab25lT2Zmc2V0Lm9mVG90YWxTZWNvbmRzKGJ1ZmZlci5yZWFkSW50KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlVmFsdWUoZmluYWwgWm9uZU9mZnNldCB2YWx1ZSwgZmluYWwgQnVmZmVyIGJ1ZmZlciwgZmluYWwgR3JhcGhCaW5hcnlXcml0ZXIgY29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgYnVmZmVyLndyaXRlSW50KHZhbHVlLmdldFRvdGFsU2Vjb25kcygpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9iaW5hcnkvdHlwZXMvWm9uZWREYXRlVGltZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9ab25lZERhdGVUaW1lU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWJiNjk2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2JpbmFyeS90eXBlcy9ab25lZERhdGVUaW1lU2VyaWFsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LnR5cGVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZWREYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBab25lZERhdGVUaW1lU2VyaWFsaXplciBleHRlbmRzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFpvbmVkRGF0ZVRpbWU+IHsKLSAgICBwdWJsaWMgWm9uZWREYXRlVGltZVNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgIHN1cGVyKERhdGFUeXBlLlpPTkVEQVRFVElNRSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIFpvbmVkRGF0ZVRpbWUgcmVhZFZhbHVlKGZpbmFsIEJ1ZmZlciBidWZmZXIsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIExvY2FsRGF0ZVRpbWUgbGR0ID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBMb2NhbERhdGVUaW1lLmNsYXNzLCBmYWxzZSk7Ci0gICAgICAgIGZpbmFsIFpvbmVPZmZzZXQgem8gPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFpvbmVPZmZzZXQuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIFpvbmVkRGF0ZVRpbWUub2YobGR0LCB6byk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVWYWx1ZShmaW5hbCBab25lZERhdGVUaW1lIHZhbHVlLCBmaW5hbCBCdWZmZXIgYnVmZmVyLCBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciBjb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUudG9Mb2NhbERhdGVUaW1lKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUuZ2V0T2Zmc2V0KCksIGJ1ZmZlciwgZmFsc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBobWwvR3JhcGhNTFdyaXRlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhtbC9HcmFwaE1MV3JpdGVyLmphdmEKaW5kZXggZmUwMWUwMS4uY2FlMGY5YyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhtbC9HcmFwaE1MV3JpdGVyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhtbC9HcmFwaE1MV3JpdGVyLmphdmEKQEAgLTMyLDcgKzMyLDcgQEAKIGltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTE91dHB1dEZhY3Rvcnk7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLkNvbGxlY3Rpb25VdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0LkNvbGxlY3Rpb25VdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FbGVtZW50OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTWFwcGVyLmphdmEKaW5kZXggY2RhMzU3Yy4uM2RhNWM0ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTk1hcHBlci5qYXZhCkBAIC04NCw3ICs4NCw5IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIE9iamVjdE1hcHBlciBjcmVhdGVNYXBwZXIoKSB7CiAgICAgICAgIGZpbmFsIE9iamVjdE1hcHBlciBvbSA9IG5ldyBPYmplY3RNYXBwZXIoSnNvbkZhY3RvcnkuYnVpbGRlcigpLnN0cmVhbVJlYWRDb25zdHJhaW50cyhzdHJlYW1SZWFkQ29uc3RyYWludHMpLmJ1aWxkKCkpOwotICAgICAgICBvbS5kaXNhYmxlKFNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fRU1QVFlfQkVBTlMpOworICAgICAgICBpZiAodmVyc2lvbiAhPSBHcmFwaFNPTlZlcnNpb24uVjRfMCkgeworICAgICAgICAgICAgb20uZGlzYWJsZShTZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX0VNUFRZX0JFQU5TKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIEdyYXBoU09OTW9kdWxlIGdyYXBoU09OTW9kdWxlID0gdmVyc2lvbi5nZXRCdWlsZGVyKCkuY3JlYXRlKG5vcm1hbGl6ZSwgdHlwZUluZm8pOwogICAgICAgICBvbS5yZWdpc3Rlck1vZHVsZShncmFwaFNPTk1vZHVsZSk7CkBAIC05NCw3ICs5Niw4IEBACiAgICAgICAgIGlmIChsb2FkQ3VzdG9tU2VyaWFsaXplcnMpCiAgICAgICAgICAgICBvbS5maW5kQW5kUmVnaXN0ZXJNb2R1bGVzKCk7CiAKLSAgICAgICAgaWYgKCh2ZXJzaW9uID09IEdyYXBoU09OVmVyc2lvbi5WM18wIHx8IHZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYyXzApICYmIHR5cGVJbmZvICE9IFR5cGVJbmZvLk5PX1RZUEVTKSB7CisgICAgICAgIGlmICgodmVyc2lvbiA9PSBHcmFwaFNPTlZlcnNpb24uVjRfMCB8fCB2ZXJzaW9uID09IEdyYXBoU09OVmVyc2lvbi5WM18wIHx8IHZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYyXzApICYmCisgICAgICAgICAgICAgICAgdHlwZUluZm8gIT0gVHlwZUluZm8uTk9fVFlQRVMpIHsKICAgICAgICAgICAgIGZpbmFsIEdyYXBoU09OVHlwZUlkUmVzb2x2ZXIgZ3JhcGhTT05UeXBlSWRSZXNvbHZlciA9IG5ldyBHcmFwaFNPTlR5cGVJZFJlc29sdmVyKCk7CiAgICAgICAgICAgICBmaW5hbCBUeXBlUmVzb2x2ZXJCdWlsZGVyIHR5cGVyID0gbmV3IEdyYXBoU09OVHlwZVJlc29sdmVyQnVpbGRlcih2ZXJzaW9uKQogICAgICAgICAgICAgICAgICAgICAudHlwZXNFbWJlZGRpbmcodGhpcy50eXBlSW5mbykKQEAgLTEwMyw3ICsxMDYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgLnR5cGVQcm9wZXJ0eShHcmFwaFNPTlRva2Vucy5WQUxVRVRZUEUpOwogCiAgICAgICAgICAgICAvLyBSZWdpc3RlcnMgbmF0aXZlIEphdmEgdHlwZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IEphY2tzb24KLSAgICAgICAgICAgIHJlZ2lzdGVySmF2YUJhc2VUeXBlcyhncmFwaFNPTlR5cGVJZFJlc29sdmVyKTsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IEdyYXBoU09OVmVyc2lvbi5WNF8wKSB7CisgICAgICAgICAgICAgICAgZ3JhcGhTT05UeXBlSWRSZXNvbHZlci5hZGRDdXN0b21UeXBlKAorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiJXM6JXMiLCBHcmFwaFNPTlRva2Vucy5HUkVNTElOX1RZUEVfTkFNRVNQQUNFLCBVVUlELmNsYXNzLmdldFNpbXBsZU5hbWUoKSksIFVVSUQuY2xhc3MpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlckphdmFCYXNlVHlwZXMoZ3JhcGhTT05UeXBlSWRSZXNvbHZlcik7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFJlZ2lzdGVycyB0aGUgR3JhcGhTT04gTW9kdWxlJ3MgdHlwZXMKICAgICAgICAgICAgIGdyYXBoU09OTW9kdWxlLmdldFR5cGVEZWZpbml0aW9ucygpLmZvckVhY2goCkBAIC0xMzQsMTUgKzE0MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLnR5cGVQcm9wZXJ0eShHcmFwaFNPTlRva2Vucy5DTEFTUyk7CiAgICAgICAgICAgICAgICAgb20uc2V0RGVmYXVsdFR5cGluZyh0eXBlcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodmVyc2lvbiA9PSBHcmFwaFNPTlZlcnNpb24uVjNfMCkgeworICAgICAgICB9IGVsc2UgaWYgKHZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYzXzAgfHwgdmVyc2lvbiA9PSBHcmFwaFNPTlZlcnNpb24uVjRfMCkgewogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbmtub3duIEdyYXBoU09OVmVyc2lvbjogIiArIHZlcnNpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gdGhpcyBwcm92aWRlciB0b1N0cmluZ3MgYWxsIHVua25vd24gY2xhc3NlcyBhbmQgY29udmVydHMga2V5cyBpbiBNYXAgb2JqZWN0cyB0aGF0IGFyZSBPYmplY3QgdG8gU3RyaW5nLgotICAgICAgICBmaW5hbCBEZWZhdWx0U2VyaWFsaXplclByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IEdyYXBoU09OU2VyaWFsaXplclByb3ZpZGVyKHZlcnNpb24pOwotICAgICAgICBvbS5zZXRTZXJpYWxpemVyUHJvdmlkZXIocHJvdmlkZXIpOworICAgICAgICAvLyBTdGFydGluZyB3aXRoIEdyYXBoU09OdjQsIG9ubHkgdHlwZXMgdGhhdCBjYW4gYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGEgdHJhdmVyc2FsIGFyZSBzdXBwb3J0ZWQuIFRoaXMKKyAgICAgICAgLy8gZGlmZmVycyB0byBwcmV2aW91cyB2ZXJzaW9ucyB3aGVyZSBhIGdyZW1saW4tZ3Jvb3Z5IHNjcmlwdCBjb3VsZCByZXR1cm4gYW55IHR5cGUuIFNvIGlmIGFuIHVua25vd24gdHlwZSBpcworICAgICAgICAvLyBlbmNvdW50ZXJlZCwgYW4gZXJyb3Igc2hvdWxkIGJlIHRocm93bi4KKyAgICAgICAgaWYgKHZlcnNpb24gIT0gR3JhcGhTT05WZXJzaW9uLlY0XzApIHsKKyAgICAgICAgICAgIC8vIHRoaXMgcHJvdmlkZXIgdG9TdHJpbmdzIGFsbCB1bmtub3duIGNsYXNzZXMgYW5kIGNvbnZlcnRzIGtleXMgaW4gTWFwIG9iamVjdHMgdGhhdCBhcmUgT2JqZWN0IHRvIFN0cmluZy4KKyAgICAgICAgICAgIGZpbmFsIERlZmF1bHRTZXJpYWxpemVyUHJvdmlkZXIgcHJvdmlkZXIgPSBuZXcgR3JhcGhTT05TZXJpYWxpemVyUHJvdmlkZXIodmVyc2lvbik7CisgICAgICAgICAgICBvbS5zZXRTZXJpYWxpemVyUHJvdmlkZXIocHJvdmlkZXIpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKG5vcm1hbGl6ZSkKICAgICAgICAgICAgIG9tLmVuYWJsZShTZXJpYWxpemF0aW9uRmVhdHVyZS5PUkRFUl9NQVBfRU5UUklFU19CWV9LRVlTKTsKQEAgLTE5OSw3ICsyMTIsNyBAQAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbG9hZEN1c3RvbU1vZHVsZXMgPSBmYWxzZTsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG5vcm1hbGl6ZSA9IGZhbHNlOwogICAgICAgICBwcml2YXRlIExpc3Q8SW9SZWdpc3RyeT4gcmVnaXN0cmllcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBwcml2YXRlIEdyYXBoU09OVmVyc2lvbiB2ZXJzaW9uID0gR3JhcGhTT05WZXJzaW9uLlYzXzA7CisgICAgICAgIHByaXZhdGUgR3JhcGhTT05WZXJzaW9uIHZlcnNpb24gPSBHcmFwaFNPTlZlcnNpb24uVjRfMDsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGluY2x1ZGVEZWZhdWx0WE1vZHVsZSA9IGZhbHNlOwogICAgICAgICBwcml2YXRlIFN0cmVhbVJlYWRDb25zdHJhaW50cy5CdWlsZGVyIHN0cmVhbVJlYWRDb25zdHJhaW50c0J1aWxkZXIgPSBTdHJlYW1SZWFkQ29uc3RyYWludHMuYnVpbGRlcigpCiAgICAgICAgICAgICAgICAgLm1heE51bWJlckxlbmd0aChERUZBVUxUX01BWF9OVU1CRVJfTEVOR1RIKTsKQEAgLTIxOCw3ICsyMzEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFNldCB0aGUgdmVyc2lvbiBvZiBHcmFwaFNPTiB0byB1c2UuIFRoZSBkZWZhdWx0IGlzIHtAbGluayBHcmFwaFNPTlZlcnNpb24jVjNfMH0uCisgICAgICAgICAqIFNldCB0aGUgdmVyc2lvbiBvZiBHcmFwaFNPTiB0byB1c2UuIFRoZSBkZWZhdWx0IGlzIHtAbGluayBHcmFwaFNPTlZlcnNpb24jVjRfMH0uCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciB2ZXJzaW9uKGZpbmFsIEdyYXBoU09OVmVyc2lvbiB2ZXJzaW9uKSB7CiAgICAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwpAQCAtMjUzLDcgKzI2Niw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogU3VwcGx5IGEgZGVmYXVsdCBleHRlbnNpb24gbW9kdWxlIG9mIFYyXzAgYW5kIFYzXzAgZm9yIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uLgorICAgICAgICAgKiBTdXBwbHkgYSBkZWZhdWx0IGV4dGVuc2lvbiBtb2R1bGUgb2YgVjJfMCwgVjNfMCBhbmQgVjRfMCBmb3Igc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24uCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGREZWZhdWx0WE1vZHVsZShmaW5hbCBib29sZWFuIGluY2x1ZGVEZWZhdWx0WE1vZHVsZSkgewogICAgICAgICAgICAgdGhpcy5pbmNsdWRlRGVmYXVsdFhNb2R1bGUgPSBpbmNsdWRlRGVmYXVsdFhNb2R1bGU7CkBAIC0zMjEsNiArMzM0LDggQEAKICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjIuYnVpbGQoKS5jcmVhdGUodGhpcy5ub3JtYWxpemUsIHR5cGVJbmZvKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYzXzApIHsKICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKS5jcmVhdGUodGhpcy5ub3JtYWxpemUsIHR5cGVJbmZvKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlY0XzApIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjQuYnVpbGQoKS5jcmVhdGUodGhpcy5ub3JtYWxpemUsIHR5cGVJbmZvKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTk1vZHVsZS5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05Nb2R1bGUuamF2YQppbmRleCBiM2QwNDQzLi5jNmQyOWFkIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTk1vZHVsZS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTW9kdWxlLmphdmEKQEAgLTE5LDExICsxOSw3IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlZlcnRleFByb2dyYW1TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5Db21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkdyYXBoRmlsdGVyU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5WZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuRFQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk1lcmdlOwpAQCAtNTIsMTAgKzQ4LDkgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU2VlZFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uUHJvZmlsZVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLlJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5BZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkNvdW50U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uRWFybHlMaW1pdFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkZpbHRlclJhbmtpbmdTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JZGVudGl0eVJlbW92YWxTdHJhdGVneTsKQEAgLTY2LDcgKzYxLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5PcmRlckxpbWl0U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUGF0aFByb2Nlc3NvclN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uQ291bnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Qcm9kdWN0aXZlQnlTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5Db21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5OwpAQCAtOTEsNiArODUsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuc3Rhci5TdGFyR3JhcGhHcmFwaFNPTlNlcmlhbGl6ZXJWMTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnN0YXIuU3RhckdyYXBoR3JhcGhTT05TZXJpYWxpemVyVjI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5zdGFyLlN0YXJHcmFwaEdyYXBoU09OU2VyaWFsaXplclYzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuc3Rhci5TdGFyR3JhcGhHcmFwaFNPTlNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuZnVuY3Rpb24uTGFtYmRhOwogCiBpbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOwpAQCAtMTQ0LDYgKzEzOSwxMzQgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBWZXJzaW9uIDQuMCBvZiBHcmFwaFNPTi4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgY2xhc3MgR3JhcGhTT05Nb2R1bGVWNCBleHRlbmRzIEdyYXBoU09OTW9kdWxlIHsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8Q2xhc3MsIFN0cmluZz4gVFlQRV9ERUZJTklUSU9OUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcCgKKyAgICAgICAgICAgICAgICBuZXcgTGlua2VkSGFzaE1hcDxDbGFzcywgU3RyaW5nPigpIHt7CisgICAgICAgICAgICAgICAgICAgIC8vIFRob3NlIGRvbid0IGhhdmUgZGVzZXJpYWxpemVycyBiZWNhdXNlIGhhbmRsZWQgYnkgSmFja3NvbiwKKyAgICAgICAgICAgICAgICAgICAgLy8gYnV0IHdlIHN0aWxsIHdhbnQgdG8gcmVuYW1lIHRoZW0gaW4gR3JhcGhTT04KKyAgICAgICAgICAgICAgICAgICAgcHV0KEludGVnZXIuY2xhc3MsICJJbnQzMiIpOworICAgICAgICAgICAgICAgICAgICBwdXQoTG9uZy5jbGFzcywgIkludDY0Iik7CisgICAgICAgICAgICAgICAgICAgIHB1dChEb3VibGUuY2xhc3MsICJEb3VibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0KEZsb2F0LmNsYXNzLCAiRmxvYXQiKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBCdWxrU2V0IGlzIGV4cGFuZGVkIHRvIExpc3QgZHVyaW5nIHNlcmlhbGl6YXRpb24gYnV0IHdlIHdhbnQgdGhlIExpc3QgZGVzZXJpYWxpemVyIHRvIGJlCisgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyZWQgdG8gZzpMaXN0IHNvIHRoaXMgZW50cnkgbXVzdCBiZSBhZGRlZCBiZWZvcmUgTGlzdC4KKyAgICAgICAgICAgICAgICAgICAgcHV0KEJ1bGtTZXQuY2xhc3MsICJMaXN0Iik7CisKKyAgICAgICAgICAgICAgICAgICAgcHV0KE1hcC5jbGFzcywgIk1hcCIpOworICAgICAgICAgICAgICAgICAgICBwdXQoTGlzdC5jbGFzcywgIkxpc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0KFNldC5jbGFzcywgIlNldCIpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFRpbmtlclBvcCBHcmFwaCBvYmplY3RzCisgICAgICAgICAgICAgICAgICAgIHB1dChWZXJ0ZXguY2xhc3MsICJWZXJ0ZXgiKTsKKyAgICAgICAgICAgICAgICAgICAgcHV0KEVkZ2UuY2xhc3MsICJFZGdlIik7CisgICAgICAgICAgICAgICAgICAgIHB1dChQcm9wZXJ0eS5jbGFzcywgIlByb3BlcnR5Iik7CisgICAgICAgICAgICAgICAgICAgIHB1dChQYXRoLmNsYXNzLCAiUGF0aCIpOworICAgICAgICAgICAgICAgICAgICBwdXQoVmVydGV4UHJvcGVydHkuY2xhc3MsICJWZXJ0ZXhQcm9wZXJ0eSIpOworICAgICAgICAgICAgICAgICAgICBwdXQoVHJlZS5jbGFzcywgIlRyZWUiKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyZWFtLm9mKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZS5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBULmNsYXNzKS5mb3JFYWNoKGUgLT4gcHV0KGUsIGUuZ2V0U2ltcGxlTmFtZSgpKSk7CisgICAgICAgICAgICAgICAgfX0pOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IG9iamVjdC4KKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBHcmFwaFNPTk1vZHVsZVY0KGZpbmFsIGJvb2xlYW4gbm9ybWFsaXplLCBmaW5hbCBUeXBlSW5mbyB0eXBlSW5mbykgeworICAgICAgICAgICAgc3VwZXIoImdyYXBoc29uLTQuMCIpOworCisgICAgICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTRVJJQUxJWkVSUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgICAgIC8vIGdyYXBoCisgICAgICAgICAgICBhZGRTZXJpYWxpemVyKEVkZ2UuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuRWRnZUphY2tzb25TZXJpYWxpemVyKG5vcm1hbGl6ZSwgdHlwZUluZm8pKTsKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoVmVydGV4LmNsYXNzLCBuZXcgR3JhcGhTT05TZXJpYWxpemVyc1Y0LlZlcnRleEphY2tzb25TZXJpYWxpemVyKG5vcm1hbGl6ZSwgdHlwZUluZm8pKTsKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoVmVydGV4UHJvcGVydHkuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuVmVydGV4UHJvcGVydHlKYWNrc29uU2VyaWFsaXplcihub3JtYWxpemUsIHRydWUpKTsKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoUHJvcGVydHkuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuUHJvcGVydHlKYWNrc29uU2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoUGF0aC5jbGFzcywgbmV3IEdyYXBoU09OU2VyaWFsaXplcnNWNC5QYXRoSmFja3NvblNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICBhZGRTZXJpYWxpemVyKERpcmVjdGlvbmFsU3RhckdyYXBoLmNsYXNzLCBuZXcgU3RhckdyYXBoR3JhcGhTT05TZXJpYWxpemVyVjQobm9ybWFsaXplKSk7CisgICAgICAgICAgICBhZGRTZXJpYWxpemVyKFRyZWUuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuVHJlZUphY2tzb25TZXJpYWxpemVyKCkpOworCisgICAgICAgICAgICAvLyBqYXZhLnV0aWwgLSB1c2UgdGhlIHN0YW5kYXJkIGphY2tzb24gc2VyaWFsaXplcnMgZm9yIGNvbGxlY3Rpb25zIHdoZW4gdHlwZXMgYXJlbid0IGVtYmVkZGVkCisgICAgICAgICAgICBpZiAodHlwZUluZm8gIT0gVHlwZUluZm8uTk9fVFlQRVMpIHsKKyAgICAgICAgICAgICAgICBhZGRTZXJpYWxpemVyKE1hcC5FbnRyeS5jbGFzcywgbmV3IEphdmFVdGlsU2VyaWFsaXplcnNWNC5NYXBFbnRyeUphY2tzb25TZXJpYWxpemVyKCkpOworICAgICAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoTWFwLmNsYXNzLCBuZXcgSmF2YVV0aWxTZXJpYWxpemVyc1Y0Lk1hcEphY2tzb25TZXJpYWxpemVyKCkpOworICAgICAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoTGlzdC5jbGFzcywgbmV3IEphdmFVdGlsU2VyaWFsaXplcnNWNC5MaXN0SmFja3NvblNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICAgICAgYWRkU2VyaWFsaXplcihTZXQuY2xhc3MsIG5ldyBKYXZhVXRpbFNlcmlhbGl6ZXJzVjQuU2V0SmFja3NvblNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgc2VyaWFsaXplcnMgZm9yIHRoZXNlIHR5cGVzIGJlY2F1c2UgSmFja3NvbiBkb2Vzbid0IGRvIGl0IGF0IGFsbC4KKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoSW50ZWdlci5jbGFzcywgbmV3IEdyYXBoU09OU2VyaWFsaXplcnNWNC5JbnRlZ2VyR3JhcGhTT05TZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkU2VyaWFsaXplcihEb3VibGUuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuRG91YmxlR3JhcGhTT05TZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkU2VyaWFsaXplcihGbG9hdC5jbGFzcywgbmV3IEdyYXBoU09OU2VyaWFsaXplcnNWNC5GbG9hdEdyYXBoU09OU2VyaWFsaXplcigpKTsKKworICAgICAgICAgICAgLy8gdHJhdmVyc2FsCisgICAgICAgICAgICBhZGRTZXJpYWxpemVyKEJ1bGtTZXQuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1Y0LkJ1bGtTZXRKYWNrc29uU2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgIFN0cmVhbS5vZigKKyAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICBNZXJnZS5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgVC5jbGFzcykuZm9yRWFjaChlIC0+IGFkZFNlcmlhbGl6ZXIoZSwgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjQuRW51bUphY2tzb25TZXJpYWxpemVyKCkpKTsKKworICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gREVTRVJJQUxJWkVSUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgICAgIC8vIFRpbmtlcnBvcCBHcmFwaAorICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKFZlcnRleC5jbGFzcywgbmV3IEdyYXBoU09OU2VyaWFsaXplcnNWNC5WZXJ0ZXhKYWNrc29uRGVzZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKEVkZ2UuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuRWRnZUphY2tzb25EZXNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoUHJvcGVydHkuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuUHJvcGVydHlKYWNrc29uRGVzZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKFBhdGguY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuUGF0aEphY2tzb25EZXNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoVmVydGV4UHJvcGVydHkuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuVmVydGV4UHJvcGVydHlKYWNrc29uRGVzZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKFRyZWUuY2xhc3MsIG5ldyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQuVHJlZUphY2tzb25EZXNlcmlhbGl6ZXIoKSk7CisKKyAgICAgICAgICAgIC8vIGphdmEudXRpbCAtIHVzZSB0aGUgc3RhbmRhcmQgamFja3NvbiBzZXJpYWxpemVycyBmb3IgY29sbGVjdGlvbnMgd2hlbiB0eXBlcyBhcmVuJ3QgZW1iZWRkZWQKKyAgICAgICAgICAgIGlmICh0eXBlSW5mbyAhPSBUeXBlSW5mby5OT19UWVBFUykgeworICAgICAgICAgICAgICAgIGFkZERlc2VyaWFsaXplcihNYXAuY2xhc3MsIG5ldyBKYXZhVXRpbFNlcmlhbGl6ZXJzVjQuTWFwSmFja3NvbkRlc2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoTGlzdC5jbGFzcywgbmV3IEphdmFVdGlsU2VyaWFsaXplcnNWNC5MaXN0SmFja3NvbkRlc2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoU2V0LmNsYXNzLCBuZXcgSmF2YVV0aWxTZXJpYWxpemVyc1Y0LlNldEphY2tzb25EZXNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG51bWJlcnMKKyAgICAgICAgICAgIGFkZERlc2VyaWFsaXplcihJbnRlZ2VyLmNsYXNzLCBuZXcgR3JhcGhTT05TZXJpYWxpemVyc1Y0LkludGVnZXJKYWNrb25zRGVzZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKERvdWJsZS5jbGFzcywgbmV3IEdyYXBoU09OU2VyaWFsaXplcnNWNC5Eb3VibGVKYWNrc29uRGVzZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKEZsb2F0LmNsYXNzLCBuZXcgR3JhcGhTT05TZXJpYWxpemVyc1Y0LkZsb2F0SmFja3NvbkRlc2VyaWFsaXplcigpKTsKKworICAgICAgICAgICAgLy8gdHJhdmVyc2FsCisgICAgICAgICAgICBTdHJlYW0ub2YoCisgICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbi52YWx1ZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgTWVyZ2UudmFsdWVzKCksCisgICAgICAgICAgICAgICAgICAgIFQudmFsdWVzKCkpLmZsYXRNYXAoU3RyZWFtOjpvZikuZm9yRWFjaChlIC0+IGFkZERlc2VyaWFsaXplcihlLmdldENsYXNzKCksIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1Y0LkVudW1KYWNrc29uRGVzZXJpYWxpemVyKGUuZ2V0RGVjbGFyaW5nQ2xhc3MoKSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBidWlsZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcigpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBNYXA8Q2xhc3MsIFN0cmluZz4gZ2V0VHlwZURlZmluaXRpb25zKCkgeworICAgICAgICAgICAgcmV0dXJuIFRZUEVfREVGSU5JVElPTlM7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZXNwYWNlKCkgeworICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVG9rZW5zLkdSRU1MSU5fVFlQRV9OQU1FU1BBQ0U7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciBpbXBsZW1lbnRzIEdyYXBoU09OTW9kdWxlQnVpbGRlciB7CisKKyAgICAgICAgICAgIHByaXZhdGUgQnVpbGRlcigpIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgR3JhcGhTT05Nb2R1bGUgY3JlYXRlKGZpbmFsIGJvb2xlYW4gbm9ybWFsaXplLCBmaW5hbCBUeXBlSW5mbyB0eXBlSW5mbykgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT05Nb2R1bGVWNChub3JtYWxpemUsIHR5cGVJbmZvKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogVmVyc2lvbiAzLjAgb2YgR3JhcGhTT04uCiAgICAgICovCiAgICAgc3RhdGljIGZpbmFsIGNsYXNzIEdyYXBoU09OTW9kdWxlVjMgZXh0ZW5kcyBHcmFwaFNPTk1vZHVsZSB7CkBAIC0xNzQsOCArMjk3LDYgQEAKICAgICAgICAgICAgICAgICAgICAgcHV0KFRyYXZlcnNlci5jbGFzcywgIlRyYXZlcnNlciIpOwogICAgICAgICAgICAgICAgICAgICBwdXQoVHJlZS5jbGFzcywgIlRyZWUiKTsKICAgICAgICAgICAgICAgICAgICAgcHV0KEJ1bGtTZXQuY2xhc3MsICJCdWxrU2V0Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB1dChCeXRlY29kZS5jbGFzcywgIkJ5dGVjb2RlIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1dChCeXRlY29kZS5CaW5kaW5nLmNsYXNzLCAiQmluZGluZyIpOwogICAgICAgICAgICAgICAgICAgICBwdXQoQW5kUC5jbGFzcywgIlAiKTsKICAgICAgICAgICAgICAgICAgICAgcHV0KE9yUC5jbGFzcywgIlAiKTsKICAgICAgICAgICAgICAgICAgICAgcHV0KE5vdFAuY2xhc3MsICJQIik7CkBAIC0yMjcsMTEgKzM0OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFybHlMaW1pdFN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhGaWx0ZXJTdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuY2xhc3MKQEAgLTI3NSw3ICszOTEsNiBAQAogICAgICAgICAgICAgLy8gdHJhdmVyc2FsCiAgICAgICAgICAgICBhZGRTZXJpYWxpemVyKEJ1bGtTZXQuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YzLkJ1bGtTZXRKYWNrc29uU2VyaWFsaXplcigpKTsKICAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoVHJhdmVyc2FsLmNsYXNzLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMy5UcmF2ZXJzYWxKYWNrc29uU2VyaWFsaXplcigpKTsKLSAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoQnl0ZWNvZGUuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YzLkJ5dGVjb2RlSmFja3NvblNlcmlhbGl6ZXIoKSk7CiAgICAgICAgICAgICBTdHJlYW0ub2YoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgIENvbHVtbi5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uLmNsYXNzLApAQCAtMjkxLDcgKzQwNiw2IEBACiAgICAgICAgICAgICAgICAgICAgIFQuY2xhc3MpLmZvckVhY2goZSAtPiBhZGRTZXJpYWxpemVyKGUsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YzLkVudW1KYWNrc29uU2VyaWFsaXplcigpKSk7CiAgICAgICAgICAgICBhZGRTZXJpYWxpemVyKFAuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YzLlBKYWNrc29uU2VyaWFsaXplcigpKTsKICAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoTGFtYmRhLmNsYXNzLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMy5MYW1iZGFKYWNrc29uU2VyaWFsaXplcigpKTsKLSAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoQnl0ZWNvZGUuQmluZGluZy5jbGFzcywgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjMuQmluZGluZ0phY2tzb25TZXJpYWxpemVyKCkpOwogICAgICAgICAgICAgYWRkU2VyaWFsaXplcihUcmF2ZXJzZXIuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YzLlRyYXZlcnNlckphY2tzb25TZXJpYWxpemVyKCkpOwogICAgICAgICAgICAgYWRkU2VyaWFsaXplcihUcmF2ZXJzYWxTdHJhdGVneS5jbGFzcywgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjMuVHJhdmVyc2FsU3RyYXRlZ3lKYWNrc29uU2VyaWFsaXplcigpKTsKIApAQCAtMzIyLDggKzQzNiw2IEBACiAKICAgICAgICAgICAgIC8vIHRyYXZlcnNhbAogICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKEJ1bGtTZXQuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YzLkJ1bGtTZXRKYWNrc29uRGVzZXJpYWxpemVyKCkpOwotICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKEJ5dGVjb2RlLmNsYXNzLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMy5CeXRlY29kZUphY2tzb25EZXNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoQnl0ZWNvZGUuQmluZGluZy5jbGFzcywgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjMuQmluZGluZ0phY2tzb25EZXNlcmlhbGl6ZXIoKSk7CiAgICAgICAgICAgICBTdHJlYW0ub2YoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkudmFsdWVzKCksCiAgICAgICAgICAgICAgICAgICAgIENvbHVtbi52YWx1ZXMoKSwKICAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uLnZhbHVlcygpLApAQCAtMzcyLDExICs0ODQsNiBAQAogICAgICAgICAgICAgICAgICAgICBFYXJseUxpbWl0U3RyYXRlZ3kuY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgIEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBQcm9maWxlU3RyYXRlZ3kuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICBHcmFwaEZpbHRlclN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuY2xhc3MKQEAgLTQzOCw4ICs1NDUsNiBAQAogICAgICAgICAgICAgICAgICAgICBwdXQoVHJhdmVyc2FsRXhwbGFuYXRpb24uY2xhc3MsICJUcmF2ZXJzYWxFeHBsYW5hdGlvbiIpOwogICAgICAgICAgICAgICAgICAgICBwdXQoVHJhdmVyc2VyLmNsYXNzLCAiVHJhdmVyc2VyIik7CiAgICAgICAgICAgICAgICAgICAgIHB1dChUcmVlLmNsYXNzLCAiVHJlZSIpOwotICAgICAgICAgICAgICAgICAgICBwdXQoQnl0ZWNvZGUuY2xhc3MsICJCeXRlY29kZSIpOwotICAgICAgICAgICAgICAgICAgICBwdXQoQnl0ZWNvZGUuQmluZGluZy5jbGFzcywgIkJpbmRpbmciKTsKICAgICAgICAgICAgICAgICAgICAgcHV0KEFuZFAuY2xhc3MsICJQIik7CiAgICAgICAgICAgICAgICAgICAgIHB1dChPclAuY2xhc3MsICJQIik7CiAgICAgICAgICAgICAgICAgICAgIHB1dChOb3RQLmNsYXNzLCAiUCIpOwpAQCAtNDkxLDExICs1OTYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhcmx5TGltaXRTdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGVTdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoRmlsdGVyU3RyYXRlZ3kuY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LmNsYXNzCkBAIC01MzMsNyArNjMzLDYgQEAKIAogICAgICAgICAgICAgLy8gdHJhdmVyc2FsCiAgICAgICAgICAgICBhZGRTZXJpYWxpemVyKFRyYXZlcnNhbC5jbGFzcywgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjIuVHJhdmVyc2FsSmFja3NvblNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgICAgICBhZGRTZXJpYWxpemVyKEJ5dGVjb2RlLmNsYXNzLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMi5CeXRlY29kZUphY2tzb25TZXJpYWxpemVyKCkpOwogICAgICAgICAgICAgU3RyZWFtLm9mKFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBDb2x1bW4uY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbi5jbGFzcywKQEAgLTU0OSw3ICs2NDgsNiBAQAogICAgICAgICAgICAgICAgICAgICBULmNsYXNzKS5mb3JFYWNoKGUgLT4gYWRkU2VyaWFsaXplcihlLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMi5FbnVtSmFja3NvblNlcmlhbGl6ZXIoKSkpOwogICAgICAgICAgICAgYWRkU2VyaWFsaXplcihQLmNsYXNzLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMi5QSmFja3NvblNlcmlhbGl6ZXIoKSk7CiAgICAgICAgICAgICBhZGRTZXJpYWxpemVyKExhbWJkYS5jbGFzcywgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjIuTGFtYmRhSmFja3NvblNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgICAgICBhZGRTZXJpYWxpemVyKEJ5dGVjb2RlLkJpbmRpbmcuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YyLkJpbmRpbmdKYWNrc29uU2VyaWFsaXplcigpKTsKICAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoVHJhdmVyc2VyLmNsYXNzLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcnNWMi5UcmF2ZXJzZXJKYWNrc29uU2VyaWFsaXplcigpKTsKICAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoVHJhdmVyc2FsU3RyYXRlZ3kuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YyLlRyYXZlcnNhbFN0cmF0ZWd5SmFja3NvblNlcmlhbGl6ZXIoKSk7CiAKQEAgLTU3Miw4ICs2NzAsNiBAQAogICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKERvdWJsZS5jbGFzcywgbmV3IEdyYXBoU09OU2VyaWFsaXplcnNWMi5Eb3VibGVKYWNrc29uRGVzZXJpYWxpemVyKCkpOwogCiAgICAgICAgICAgICAvLyB0cmF2ZXJzYWwKLSAgICAgICAgICAgIGFkZERlc2VyaWFsaXplcihCeXRlY29kZS5jbGFzcywgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjIuQnl0ZWNvZGVKYWNrc29uRGVzZXJpYWxpemVyKCkpOwotICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKEJ5dGVjb2RlLkJpbmRpbmcuY2xhc3MsIG5ldyBUcmF2ZXJzYWxTZXJpYWxpemVyc1YyLkJpbmRpbmdKYWNrc29uRGVzZXJpYWxpemVyKCkpOwogICAgICAgICAgICAgU3RyZWFtLm9mKFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnZhbHVlcygpLAogICAgICAgICAgICAgICAgICAgICBDb2x1bW4udmFsdWVzKCksCiAgICAgICAgICAgICAgICAgICAgIERpcmVjdGlvbi52YWx1ZXMoKSwKQEAgLTYyMiwxMSArNzE4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgRWFybHlMaW1pdFN0cmF0ZWd5LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgUHJvZmlsZVN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgR3JhcGhGaWx0ZXJTdHJhdGVneS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LmNsYXNzCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlJlYWRlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05SZWFkZXIuamF2YQppbmRleCA5NGM0M2NjLi41N2I4ZTVjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlJlYWRlci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OUmVhZGVyLmphdmEKQEAgLTE3Nyw3ICsxNzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBEaXJlY3Rpb24gYXR0YWNoRWRnZXNPZlRoaXNEaXJlY3Rpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIC8vIGdyYXBoc29uIHYzIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBnZW5lcmljIE1hcCBpbnN0YW5jZXMsIGJ5IGZvcmNpbmcgdG8gbGlua2VkaGFzaG1hcCAod2hpY2ggaXMgcHJvYmFibHkKICAgICAgICAgLy8gd2hhdCBpdCBzaG91bGQgaGF2ZSBiZWVuIGFueXdheSkgc3RhcmdyYXBoIGZvcm1hdCBjYW4gcmVtYWluIHVuY2hhbmdlZCBhY3Jvc3MgYWxsIHZlcnNpb25zCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gdmVydGV4RGF0YSA9IHZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYzXzAgPworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHZlcnRleERhdGEgPSAoKHZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYzXzApIHx8ICh2ZXJzaW9uID09IEdyYXBoU09OVmVyc2lvbi5WNF8wKSkgPwogICAgICAgICAgICAgICAgIG1hcHBlci5yZWFkVmFsdWUoaW5wdXRTdHJlYW0sIGxpbmtlZEhhc2hNYXBUeXBlUmVmZXJlbmNlKSA6IG1hcHBlci5yZWFkVmFsdWUoaW5wdXRTdHJlYW0sIG1hcFR5cGVSZWZlcmVuY2UpOwogICAgICAgICBmaW5hbCBTdGFyR3JhcGggc3RhckdyYXBoID0gU3RhckdyYXBoR3JhcGhTT05EZXNlcmlhbGl6ZXIucmVhZFN0YXJHcmFwaFZlcnRleCh2ZXJ0ZXhEYXRhKTsKICAgICAgICAgaWYgKHZlcnRleEF0dGFjaE1ldGhvZCAhPSBudWxsKSB2ZXJ0ZXhBdHRhY2hNZXRob2QuYXBwbHkoc3RhckdyYXBoLmdldFN0YXJWZXJ0ZXgoKSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlNlcmlhbGl6ZXJzVjQuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OU2VyaWFsaXplcnNWNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MzYxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlNlcmlhbGl6ZXJzVjQuamF2YQpAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb247CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBhdGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuTXV0YWJsZVBhdGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuVHJlZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuQ29tcGFyYXRvcnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEVkZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRWZXJ0ZXg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFZlcnRleFByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblBhcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblRva2VuOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuSmF2YVR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmRlc2VyLnN0ZC5TdGREZXNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuanNvbnR5cGUuVHlwZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRLZXlTZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2NhbGFyU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC50eXBlLlR5cGVGYWN0b3J5OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogR3JhcGhTT04gc2VyaWFsaXplcnMgZm9yIGdyYXBoLWJhc2VkIG9iamVjdHMgc3VjaCBhcyB2ZXJ0aWNlcywgZWRnZXMsIHByb3BlcnRpZXMsIGFuZCBwYXRocy4gVGhlc2Ugc2VyaWFsaXplcnMKKyAqIHByZXNlbnQgYSBnZW5lcmFsaXplZCB3YXkgdG8gc2VyaWFsaXplIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgY29yZSBpbnRlcmZhY2VzLgorICoKKyAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKKyAqLworY2xhc3MgR3JhcGhTT05TZXJpYWxpemVyc1Y0IHsKKworICAgIHByaXZhdGUgR3JhcGhTT05TZXJpYWxpemVyc1Y0KCkgeworICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBTRVJJQUxJWkVSUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBWZXJ0ZXhKYWNrc29uU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8VmVydGV4PiB7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG5vcm1hbGl6ZTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBUeXBlSW5mbyB0eXBlSW5mbzsKKworICAgICAgICBwdWJsaWMgVmVydGV4SmFja3NvblNlcmlhbGl6ZXIoZmluYWwgYm9vbGVhbiBub3JtYWxpemUsIGZpbmFsIFR5cGVJbmZvIHR5cGVJbmZvKSB7CisgICAgICAgICAgICBzdXBlcihWZXJ0ZXguY2xhc3MpOworICAgICAgICAgICAgdGhpcy5ub3JtYWxpemUgPSBub3JtYWxpemU7CisgICAgICAgICAgICB0aGlzLnR5cGVJbmZvID0gdHlwZUluZm87CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFZlcnRleCB2ZXJ0ZXgsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKKyAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7CisKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3RGaWVsZChHcmFwaFNPTlRva2Vucy5JRCwgdmVydGV4LmlkKCkpOworICAgICAgICAgICAgd3JpdGVMYWJlbChqc29uR2VuZXJhdG9yLCBHcmFwaFNPTlRva2Vucy5MQUJFTCwgdmVydGV4LmxhYmVsKCkpOworICAgICAgICAgICAgd3JpdGVUeXBlRm9yR3JhcGhPYmplY3RJZlVudHlwZWQoanNvbkdlbmVyYXRvciwgdHlwZUluZm8sIEdyYXBoU09OVG9rZW5zLlZFUlRFWCk7CisgICAgICAgICAgICB3cml0ZVByb3BlcnRpZXModmVydGV4LCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIpOworCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kT2JqZWN0KCk7CisKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCB3cml0ZVByb3BlcnRpZXMoZmluYWwgVmVydGV4IHZlcnRleCwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgaWYgKHZlcnRleC5rZXlzKCkuc2l6ZSgpID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOworCisgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4ga2V5cyA9IG5vcm1hbGl6ZSA/CisgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMubGlzdCh2ZXJ0ZXgua2V5cygpLml0ZXJhdG9yKCksIENvbXBhcmF0b3IubmF0dXJhbE9yZGVyKCkpIDogbmV3IEFycmF5TGlzdDw+KHZlcnRleC5rZXlzKCkpOworICAgICAgICAgICAgZm9yIChTdHJpbmcga2V5IDoga2V5cykgeworICAgICAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPFZlcnRleFByb3BlcnR5PE9iamVjdD4+IHZlcnRleFByb3BlcnRpZXMgPSBub3JtYWxpemUgPworICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JVdGlscy5saXN0KHZlcnRleC5wcm9wZXJ0aWVzKGtleSksIENvbXBhcmF0b3JzLlBST1BFUlRZX0NPTVBBUkFUT1IpLml0ZXJhdG9yKCkgOiB2ZXJ0ZXgucHJvcGVydGllcyhrZXkpOworICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhQcm9wZXJ0aWVzLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKGtleSk7CisKKyAgICAgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHZlcnRleFByb3BlcnRpZXMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB5b3Ugd3JpdGVPYmplY3QgdGhlIHByb3BlcnR5IGRpcmVjdGx5IGl0IHRyZWF0cyBpdCBhcyBhIHN0YW5kYWxvbmUgVmVydGV4UHJvcGVydHkgd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgd3JpdGUgdGhlIGxhYmVsIGR1cGxpY2F0aW5nIGl0LiB3ZSByZWFsbHkgb25seSB3YW50IHRoYXQgZm9yIGVtYmVkZGVkIHR5cGVzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZUluZm8gPT0gVHlwZUluZm8uTk9fVFlQRVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhQcm9wZXJ0eUphY2tzb25TZXJpYWxpemVyLndyaXRlVmVydGV4UHJvcGVydHkodmVydGV4UHJvcGVydGllcy5uZXh0KCksIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyUHJvdmlkZXIsIG5vcm1hbGl6ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0KHZlcnRleFByb3BlcnRpZXMubmV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRPYmplY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBFZGdlSmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPEVkZ2U+IHsKKworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbm9ybWFsaXplOworCisgICAgICAgIHByaXZhdGUgZmluYWwgVHlwZUluZm8gdHlwZUluZm87CisKKyAgICAgICAgcHVibGljIEVkZ2VKYWNrc29uU2VyaWFsaXplcihmaW5hbCBib29sZWFuIG5vcm1hbGl6ZSwgZmluYWwgVHlwZUluZm8gdHlwZUluZm8pIHsKKyAgICAgICAgICAgIHN1cGVyKEVkZ2UuY2xhc3MpOworICAgICAgICAgICAgdGhpcy5ub3JtYWxpemUgPSBub3JtYWxpemU7CisgICAgICAgICAgICB0aGlzLnR5cGVJbmZvID0gdHlwZUluZm87CisgICAgICAgIH0KKworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgRWRnZSBlZGdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOworCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoR3JhcGhTT05Ub2tlbnMuSUQsIGVkZ2UuaWQoKSk7CisgICAgICAgICAgICB3cml0ZUxhYmVsKGpzb25HZW5lcmF0b3IsIEdyYXBoU09OVG9rZW5zLkxBQkVMLCBlZGdlLmxhYmVsKCkpOworICAgICAgICAgICAgd3JpdGVUeXBlRm9yR3JhcGhPYmplY3RJZlVudHlwZWQoanNvbkdlbmVyYXRvciwgdHlwZUluZm8sIEdyYXBoU09OVG9rZW5zLkVER0UpOworICAgICAgICAgICAgd3JpdGVWZXJ0ZXgoR3JhcGhTT05Ub2tlbnMuSU4sIGVkZ2UuaW5WZXJ0ZXgoKSwganNvbkdlbmVyYXRvcik7CisgICAgICAgICAgICB3cml0ZVZlcnRleChHcmFwaFNPTlRva2Vucy5PVVQsIGVkZ2Uub3V0VmVydGV4KCksIGpzb25HZW5lcmF0b3IpOworICAgICAgICAgICAgd3JpdGVQcm9wZXJ0aWVzKGVkZ2UsIGpzb25HZW5lcmF0b3IpOworCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kT2JqZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlVmVydGV4KGZpbmFsIFN0cmluZyB2ZXJ0ZXhEaXJlY3Rpb24sIGZpbmFsIFZlcnRleCB2LCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUodmVydGV4RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKEdyYXBoU09OVG9rZW5zLklELCB2LmlkKCkpOworICAgICAgICAgICAgd3JpdGVMYWJlbChqc29uR2VuZXJhdG9yLCBHcmFwaFNPTlRva2Vucy5MQUJFTCwgdi5sYWJlbCgpKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRPYmplY3QoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCB3cml0ZVByb3BlcnRpZXMoZmluYWwgRWRnZSBlZGdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxQcm9wZXJ0eTxPYmplY3Q+PiBlbGVtZW50UHJvcGVydGllcyA9IG5vcm1hbGl6ZSA/CisgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMubGlzdChlZGdlLnByb3BlcnRpZXMoKSwgQ29tcGFyYXRvcnMuUFJPUEVSVFlfQ09NUEFSQVRPUikuaXRlcmF0b3IoKSA6IGVkZ2UucHJvcGVydGllcygpOworCisgICAgICAgICAgICBpZiAoZWxlbWVudFByb3BlcnRpZXMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRPYmplY3QoKTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChlbGVtZW50UHJvcGVydGllcy5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgUHJvcGVydHkgcHJvcCA9IGVsZW1lbnRQcm9wZXJ0aWVzLm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShwcm9wLmtleSgpKTsKKyAgICAgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0QXJyYXkoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZUluZm8gPT0gVHlwZUluZm8uTk9fVFlQRVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3QocHJvcC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3QocHJvcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgc3RhdGljIGNsYXNzIFByb3BlcnR5SmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPFByb3BlcnR5PiB7CisKKyAgICAgICAgcHVibGljIFByb3BlcnR5SmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihQcm9wZXJ0eS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFByb3BlcnR5IHByb3BlcnR5LCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKEdyYXBoU09OVG9rZW5zLktFWSwgcHJvcGVydHkua2V5KCkpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKEdyYXBoU09OVG9rZW5zLlZBTFVFLCBwcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRPYmplY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBWZXJ0ZXhQcm9wZXJ0eUphY2tzb25TZXJpYWxpemVyIGV4dGVuZHMgU3RkU2NhbGFyU2VyaWFsaXplcjxWZXJ0ZXhQcm9wZXJ0eT4geworCisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBub3JtYWxpemU7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpbmNsdWRlTGFiZWw7CisKKyAgICAgICAgcHVibGljIFZlcnRleFByb3BlcnR5SmFja3NvblNlcmlhbGl6ZXIoZmluYWwgYm9vbGVhbiBub3JtYWxpemUsIGZpbmFsIGJvb2xlYW4gaW5jbHVkZUxhYmVsKSB7CisgICAgICAgICAgICBzdXBlcihWZXJ0ZXhQcm9wZXJ0eS5jbGFzcyk7CisgICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsKKyAgICAgICAgICAgIHRoaXMuaW5jbHVkZUxhYmVsID0gaW5jbHVkZUxhYmVsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSBwcm9wZXJ0eSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKQorICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICB3cml0ZVZlcnRleFByb3BlcnR5KHByb3BlcnR5LCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIG5vcm1hbGl6ZSwgaW5jbHVkZUxhYmVsKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVWZXJ0ZXhQcm9wZXJ0eShmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSBwcm9wZXJ0eSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwgZmluYWwgYm9vbGVhbiBub3JtYWxpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGluY2x1ZGVMYWJlbCkKKyAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7CisKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3RGaWVsZChHcmFwaFNPTlRva2Vucy5JRCwgcHJvcGVydHkuaWQoKSk7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoR3JhcGhTT05Ub2tlbnMuVkFMVUUsIHByb3BlcnR5LnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKGluY2x1ZGVMYWJlbCkgeworICAgICAgICAgICAgICAgIHdyaXRlTGFiZWwoanNvbkdlbmVyYXRvciwgR3JhcGhTT05Ub2tlbnMuTEFCRUwsIHByb3BlcnR5LmxhYmVsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5V3JpdGVNZXRhUHJvcGVydGllcyhwcm9wZXJ0eSwganNvbkdlbmVyYXRvciwgbm9ybWFsaXplKTsKKworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnlXcml0ZU1ldGFQcm9wZXJ0aWVzKGZpbmFsIFZlcnRleFByb3BlcnR5IHByb3BlcnR5LCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG5vcm1hbGl6ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIC8vIHdoZW4gImRldGFjaGVkIiB5b3UgY2FuJ3QgY2hlY2sgZmVhdHVyZXMgb2YgdGhlIGdyYXBoIGl0IGRldGFjaGVkIGZyb20gc28gaXQgaGFzIHRvIGJlCisgICAgICAgICAgICAvLyB0cmVhdGVkIGRpZmZlcmVudGx5IGZyb20gYSByZWd1bGFyIFZlcnRleFByb3BlcnR5IGltcGxlbWVudGF0aW9uLgorICAgICAgICAgICAgaWYgKHByb3BlcnR5IGluc3RhbmNlb2YgRGV0YWNoZWRWZXJ0ZXhQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIC8vIG9ubHkgd3JpdGUgbWV0YSBwcm9wZXJ0aWVzIGtleSBpZiB0aGV5IGV4aXN0CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnRpZXMoKS5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVNZXRhUHJvcGVydGllcyhwcm9wZXJ0eSwganNvbkdlbmVyYXRvciwgbm9ybWFsaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIHN0aWxsIGF0dGFjaGVkIC0gc28gd2UgY2FuIGNoZWNrIHRoZSBmZWF0dXJlcyB0byBzZWUgaWYgaXQncyB3b3J0aCBldmVuIHRyeWluZyB0byB3cml0ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBtZXRhIHByb3BlcnRpZXMga2V5CisgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5LmdyYXBoKCkuZmVhdHVyZXMoKS52ZXJ0ZXgoKS5zdXBwb3J0c01ldGFQcm9wZXJ0aWVzKCkgJiYgcHJvcGVydHkucHJvcGVydGllcygpLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICB3cml0ZU1ldGFQcm9wZXJ0aWVzKHByb3BlcnR5LCBqc29uR2VuZXJhdG9yLCBub3JtYWxpemUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVNZXRhUHJvcGVydGllcyhmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSBwcm9wZXJ0eSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBub3JtYWxpemUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7CisKKyAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPFByb3BlcnR5PE9iamVjdD4+IG1ldGFQcm9wZXJ0aWVzID0gbm9ybWFsaXplID8KKyAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JVdGlscy5saXN0KChJdGVyYXRvcjxQcm9wZXJ0eTxPYmplY3Q+PikgcHJvcGVydHkucHJvcGVydGllcygpLCBDb21wYXJhdG9ycy5QUk9QRVJUWV9DT01QQVJBVE9SKS5pdGVyYXRvcigpIDogcHJvcGVydHkucHJvcGVydGllcygpOworICAgICAgICAgICAgd2hpbGUgKG1ldGFQcm9wZXJ0aWVzLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIFByb3BlcnR5PE9iamVjdD4gbWV0YVByb3BlcnR5ID0gbWV0YVByb3BlcnRpZXMubmV4dCgpOworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3RGaWVsZChtZXRhUHJvcGVydHkua2V5KCksIG1ldGFQcm9wZXJ0eS52YWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgc3RhdGljIGNsYXNzIFBhdGhKYWNrc29uU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8UGF0aD4geworCisgICAgICAgIHB1YmxpYyBQYXRoSmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihQYXRoLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgUGF0aCBwYXRoLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uR2VuZXJhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRPYmplY3QoKTsKKworICAgICAgICAgICAgLy8gcHJpb3IgdG8gMy43LjUsIHRoZSBjb2RlIHdhcyBzdWNoIHRoYXQ6CisgICAgICAgICAgICAvLyBwYXRocyBzaG91bGRuJ3Qgc2VyaWFsaXplIHdpdGggcHJvcGVydGllcyBpZiB0aGUgcGF0aCBjb250YWlucyBncmFwaCBlbGVtZW50cworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIGhvd2V2ZXIsIHRoZXJlIHdhcyB0aGUgaWRlYSB0aGF0IHYzIHVudHlwZWQgc2hvdWxkIGVzc2VudGlhbGx5IG1hdGNoIHYxIHdoaWNoIGRvZXMgaW5jbHVkZSB0aGUKKyAgICAgICAgICAgIC8vIHByb3BlcnRpZXMuIGFzIG9mIDMuNy41LCB3ZSByZW1vdmUgZGV0YWNobWVudCB0byByZWZlcmVuY2VzIGFuZCBhbGxvdyB1c2VycyB0byBjb250cm9sIHRoZSBpbmNsdXNpb24KKyAgICAgICAgICAgIC8vIG9yIGV4Y2x1c2lvbiBvZiBwcm9wZXJ0aWVzIHdpdGggdGhlIG1hdGVyaWFsaXplUHJvcGVydGllcyBvcHRpb24uCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoR3JhcGhTT05Ub2tlbnMuTEFCRUxTLCBwYXRoLmxhYmVscygpKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3RGaWVsZChHcmFwaFNPTlRva2Vucy5PQkpFQ1RTLCBwYXRoLm9iamVjdHMoKSk7CisKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRPYmplY3QoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBUcmVlSmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPFRyZWU+IHsKKworICAgICAgICBwdWJsaWMgVHJlZUphY2tzb25TZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoVHJlZS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFRyZWUgdHJlZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25HZW5lcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydEFycmF5KCk7CisgICAgICAgICAgICBmaW5hbCBTZXQ8TWFwLkVudHJ5PEVsZW1lbnQsIFRyZWU+PiBzZXQgPSB0cmVlLmVudHJ5U2V0KCk7CisgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxFbGVtZW50LCBUcmVlPiBlbnRyeSA6IHNldCkgeworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3RGaWVsZChHcmFwaFNPTlRva2Vucy5LRVksIGVudHJ5LmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoR3JhcGhTT05Ub2tlbnMuVkFMVUUsIGVudHJ5LmdldFZhbHVlKCkpOworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRPYmplY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRBcnJheSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgc3RhdGljIGNsYXNzIEludGVnZXJHcmFwaFNPTlNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPEludGVnZXI+IHsKKyAgICAgICAgcHVibGljIEludGVnZXJHcmFwaFNPTlNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihJbnRlZ2VyLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgSW50ZWdlciBpbnRlZ2VyLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU51bWJlcigoKEludGVnZXIpIGludGVnZXIpLmludFZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgc3RhdGljIGNsYXNzIERvdWJsZUdyYXBoU09OU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8RG91YmxlPiB7CisgICAgICAgIHB1YmxpYyBEb3VibGVHcmFwaFNPTlNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihEb3VibGUuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBEb3VibGUgZG91YmxlVmFsdWUsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlTnVtYmVyKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBGbG9hdEdyYXBoU09OU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8RmxvYXQ+IHsKKyAgICAgICAgcHVibGljIEZsb2F0R3JhcGhTT05TZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoRmxvYXQuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBGbG9hdCBmbG9hdFZhbHVlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU51bWJlcihmbG9hdFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1hcHMgaW4gdGhlIEpWTSBjYW4gaGF2ZSB7QGxpbmsgT2JqZWN0fSBhcyBhIGtleSwgYnV0IGluIEpTT04gdGhleSBtdXN0IGJlIGEge0BsaW5rIFN0cmluZ30uCisgICAgICovCisgICAgZmluYWwgc3RhdGljIGNsYXNzIEdyYXBoU09OS2V5U2VyaWFsaXplciBleHRlbmRzIFN0ZEtleVNlcmlhbGl6ZXIgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgT2JqZWN0IG8sIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHNlcihvLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZVdpdGhUeXBlKGZpbmFsIE9iamVjdCBvLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc2VyKG8sIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlcik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgc2VyKGZpbmFsIE9iamVjdCBvLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGlmIChFbGVtZW50LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oby5nZXRDbGFzcygpKSkKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKCgoKEVsZW1lbnQpIG8pLmlkKCkpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1cGVyLnNlcmlhbGl6ZShvLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIERFU0VSSUFMSVpFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBzdGF0aWMgY2xhc3MgVmVydGV4SmFja3NvbkRlc2VyaWFsaXplciBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxWZXJ0ZXg+IHsKKworICAgICAgICBwdWJsaWMgVmVydGV4SmFja3NvbkRlc2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFZlcnRleC5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVmVydGV4IGRlc2VyaWFsaXplKGZpbmFsIEpzb25QYXJzZXIganNvblBhcnNlciwgZmluYWwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIERldGFjaGVkVmVydGV4LkJ1aWxkZXIgdiA9IERldGFjaGVkVmVydGV4LmJ1aWxkKCk7CisgICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX09CSkVDVCkgeworICAgICAgICAgICAgICAgIGlmIChqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCkuZXF1YWxzKEdyYXBoU09OVG9rZW5zLklEKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB2LnNldElkKGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcykpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvblBhcnNlci5nZXRDdXJyZW50TmFtZSgpLmVxdWFscyhHcmFwaFNPTlRva2Vucy5MQUJFTCkpIHsKKyAgICAgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdi5zZXRMYWJlbChqc29uUGFyc2VyLmdldFRleHQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuUFJPUEVSVElFUykpIHsKKyAgICAgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9PQkpFQ1QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5hZGRQcm9wZXJ0eSgoRGV0YWNoZWRWZXJ0ZXhQcm9wZXJ0eSkgZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgVmVydGV4UHJvcGVydHkuY2xhc3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHYuY3JlYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDYWNoYWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIEVkZ2VKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPEVkZ2U+IHsKKworICAgICAgICBwdWJsaWMgRWRnZUphY2tzb25EZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihFZGdlLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRWRnZSBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBEZXRhY2hlZEVkZ2UuQnVpbGRlciBlID0gRGV0YWNoZWRFZGdlLmJ1aWxkKCk7CisgICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX09CSkVDVCkgeworICAgICAgICAgICAgICAgIGlmIChqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCkuZXF1YWxzKEdyYXBoU09OVG9rZW5zLklEKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBlLnNldElkKGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcykpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvblBhcnNlci5nZXRDdXJyZW50TmFtZSgpLmVxdWFscyhHcmFwaFNPTlRva2Vucy5MQUJFTCkpIHsKKyAgICAgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZS5zZXRMYWJlbChqc29uUGFyc2VyLmdldFRleHQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuT1VUKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBlLnNldE91dFYoKERldGFjaGVkVmVydGV4KSBkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBWZXJ0ZXguY2xhc3MpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuSU4pKSB7CisgICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIGUuc2V0SW5WKChEZXRhY2hlZFZlcnRleCkgZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgVmVydGV4LmNsYXNzKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCkuZXF1YWxzKEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpKSB7CisgICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfT0JKRUNUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuYWRkUHJvcGVydHkoZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgUHJvcGVydHkuY2xhc3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGUuY3JlYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDYWNoYWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFByb3BlcnR5SmFja3NvbkRlc2VyaWFsaXplciBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxQcm9wZXJ0eT4geworCisgICAgICAgIHB1YmxpYyBQcm9wZXJ0eUphY2tzb25EZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihQcm9wZXJ0eS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFByb3BlcnR5IGRlc2VyaWFsaXplKGZpbmFsIEpzb25QYXJzZXIganNvblBhcnNlciwgZmluYWwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkgPSBudWxsOworICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gbnVsbDsKKyAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfT0JKRUNUKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuS0VZKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBrZXkgPSBqc29uUGFyc2VyLmdldFRleHQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuVkFMVUUpKSB7CisgICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgT2JqZWN0LmNsYXNzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGV0YWNoZWRQcm9wZXJ0eTw+KGtleSwgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ2FjaGFibGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBQYXRoSmFja3NvbkRlc2VyaWFsaXplciBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxQYXRoPiB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEphdmFUeXBlIHNldFR5cGUgPSBUeXBlRmFjdG9yeS5kZWZhdWx0SW5zdGFuY2UoKS5jb25zdHJ1Y3RDb2xsZWN0aW9uVHlwZShIYXNoU2V0LmNsYXNzLCBTdHJpbmcuY2xhc3MpOworCisgICAgICAgIHB1YmxpYyBQYXRoSmFja3NvbkRlc2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFBhdGguY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBQYXRoIGRlc2VyaWFsaXplKGZpbmFsIEpzb25QYXJzZXIganNvblBhcnNlciwgZmluYWwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIFBhdGggcCA9IE11dGFibGVQYXRoLm1ha2UoKTsKKworICAgICAgICAgICAgTGlzdDxPYmplY3Q+IGxhYmVscyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAgICAgTGlzdDxPYmplY3Q+IG9iamVjdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfT0JKRUNUKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuTEFCRUxTKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBMaXN0LmNsYXNzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuT0JKRUNUUykpIHsKKyAgICAgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyA9IGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIExpc3QuY2xhc3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvYmplY3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgcC5leHRlbmQob2JqZWN0cy5nZXQoaSksIChTZXQ8U3RyaW5nPikgbGFiZWxzLmdldChpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ2FjaGFibGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBWZXJ0ZXhQcm9wZXJ0eUphY2tzb25EZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8VmVydGV4UHJvcGVydHk+IHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgcHJvcGVydGllc1R5cGUgPSBUeXBlRmFjdG9yeS5kZWZhdWx0SW5zdGFuY2UoKS5jb25zdHJ1Y3RNYXBUeXBlKEhhc2hNYXAuY2xhc3MsIFN0cmluZy5jbGFzcywgT2JqZWN0LmNsYXNzKTsKKworICAgICAgICBwcm90ZWN0ZWQgVmVydGV4UHJvcGVydHlKYWNrc29uRGVzZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoVmVydGV4UHJvcGVydHkuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBWZXJ0ZXhQcm9wZXJ0eSBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBEZXRhY2hlZFZlcnRleFByb3BlcnR5LkJ1aWxkZXIgdnAgPSBEZXRhY2hlZFZlcnRleFByb3BlcnR5LmJ1aWxkKCk7CisKKyAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfT0JKRUNUKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuSUQpKSB7CisgICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7CisgICAgICAgICAgICAgICAgICAgIHZwLnNldElkKGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcykpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoanNvblBhcnNlci5nZXRDdXJyZW50TmFtZSgpLmVxdWFscyhHcmFwaFNPTlRva2Vucy5MQUJFTCkpIHsKKyAgICAgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdnAuc2V0TGFiZWwoanNvblBhcnNlci5nZXRUZXh0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCkuZXF1YWxzKEdyYXBoU09OVG9rZW5zLlZBTFVFKSkgeworICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICB2cC5zZXRWYWx1ZShkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBPYmplY3QuY2xhc3MpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuUFJPUEVSVElFUykpIHsKKyAgICAgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9PQkpFQ1QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbCA9IGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB2cC5hZGRQcm9wZXJ0eShuZXcgRGV0YWNoZWRQcm9wZXJ0eShrZXksIHZhbCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdnAuY3JlYXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDYWNoYWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFRyZWVKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPFRyZWU+IHsKKworICAgICAgICBwdWJsaWMgVHJlZUphY2tzb25EZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihUcmVlLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgVHJlZSBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBMaXN0PE1hcD4gZGF0YSA9IGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIExpc3QuY2xhc3MpOworICAgICAgICAgICAgZmluYWwgVHJlZSB0ID0gbmV3IFRyZWUoKTsKKyAgICAgICAgICAgIGZvciAoTWFwPFN0cmluZywgT2JqZWN0PiBlbnRyeSA6IGRhdGEpIHsKKyAgICAgICAgICAgICAgICB0LnB1dChlbnRyeS5nZXQoR3JhcGhTT05Ub2tlbnMuS0VZKSwgZW50cnkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NhY2hhYmxlKCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgY2xhc3MgSW50ZWdlckphY2tvbnNEZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8SW50ZWdlcj4geworCisgICAgICAgIHByb3RlY3RlZCBJbnRlZ2VySmFja29uc0Rlc2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKEludGVnZXIuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJbnRlZ2VyIGRlc2VyaWFsaXplKEpzb25QYXJzZXIganNvblBhcnNlciwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHJldHVybiBqc29uUGFyc2VyLmdldEludFZhbHVlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDYWNoYWJsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIERvdWJsZUphY2tzb25EZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8RG91YmxlPiB7CisKKyAgICAgICAgcHJvdGVjdGVkIERvdWJsZUphY2tzb25EZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihEb3VibGUuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBEb3VibGUgZGVzZXJpYWxpemUoZmluYWwgSnNvblBhcnNlciBqc29uUGFyc2VyLCBmaW5hbCBEZXNlcmlhbGl6YXRpb25Db250ZXh0IGRlc2VyaWFsaXphdGlvbkNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICAgICAgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudFRva2VuKCkuaXNOdW1lcmljKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGpzb25QYXJzZXIuZ2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgIGVsc2UgIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbnVtYmVyVGV4dCA9IGpzb25QYXJzZXIuZ2V0VmFsdWVBc1N0cmluZygpOworICAgICAgICAgICAgICAgIGlmICgiTmFOIi5lcXVhbHNJZ25vcmVDYXNlKG51bWJlclRleHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRG91YmxlLk5hTjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgiLUluZmluaXR5Ii5lcXVhbHMobnVtYmVyVGV4dCkgfHwgIi1JTkYiLmVxdWFsc0lnbm9yZUNhc2UobnVtYmVyVGV4dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIkluZmluaXR5Ii5lcXVhbHMobnVtYmVyVGV4dCkgfHwgIklORiIuZXF1YWxzKG51bWJlclRleHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRG91YmxlIHZhbHVlIHVuZXhwZWN0ZWQ6ICIgKyBudW1iZXJUZXh0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ2FjaGFibGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBGbG9hdEphY2tzb25EZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8RmxvYXQ+IHsKKworICAgICAgICBwcm90ZWN0ZWQgRmxvYXRKYWNrc29uRGVzZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoRmxvYXQuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBGbG9hdCBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBpZiAoanNvblBhcnNlci5nZXRDdXJyZW50VG9rZW4oKS5pc051bWVyaWMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4ganNvblBhcnNlci5nZXRGbG9hdFZhbHVlKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbnVtYmVyVGV4dCA9IGpzb25QYXJzZXIuZ2V0VmFsdWVBc1N0cmluZygpOworICAgICAgICAgICAgICAgIGlmICgiTmFOIi5lcXVhbHNJZ25vcmVDYXNlKG51bWJlclRleHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmxvYXQuTmFOOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCItSW5maW5pdHkiLmVxdWFscyhudW1iZXJUZXh0KSB8fCAiLUlORiIuZXF1YWxzSWdub3JlQ2FzZShudW1iZXJUZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCJJbmZpbml0eSIuZXF1YWxzKG51bWJlclRleHQpIHx8ICJJTkYiLmVxdWFscyhudW1iZXJUZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRmxvYXQgdmFsdWUgdW5leHBlY3RlZDogIiArIG51bWJlclRleHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ2FjaGFibGUoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFdoZW4gZG9pbmcgdW50eXBlZCBzZXJpYWxpemF0aW9uIGdyYXBoIG9iamVjdHMgZ2V0IGEgc3BlY2lhbCAidHlwZSIgZmllbGQgYXBwZW5kZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZVR5cGVGb3JHcmFwaE9iamVjdElmVW50eXBlZChmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFR5cGVJbmZvIHR5cGVJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICh0eXBlSW5mbyA9PSBUeXBlSW5mby5OT19UWVBFUykgeworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0cmluZ0ZpZWxkKEdyYXBoU09OVG9rZW5zLlRZUEUsIHR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGVscGVyIG1ldGhvZCBmb3Igd3JpdGluZyBhIGxhYmVsLiBTdGFydGluZyBpbiB2NCwgdGhlIGxhYmVsIGlzIGFuIGFycmF5IG9mIFN0cmluZyB0aGF0IGlzIGluc2lkZSBhbiBvYmplY3QuIE9ubHkKKyAgICAgKiB3cml0ZXMgdGhlIGFycmF5IHBvcnRpb247IHRoYXQgaXMsIGl0IGFzc3VtZXMgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBzdGFydGVkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVMYWJlbChmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFN0cmluZyBsYWJlbE5hbWUsIGZpbmFsIFN0cmluZyBsYWJlbFZhbHVlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKGxhYmVsTmFtZSk7CisgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydEFycmF5KCk7CisgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmcobGFiZWxWYWx1ZSk7CisgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRBcnJheSgpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlR5cGVEZXNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZURlc2VyaWFsaXplci5qYXZhCmluZGV4IDJjN2I4N2MuLmY5NjU2YTAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZURlc2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZURlc2VyaWFsaXplci5qYXZhCkBAIC0xNDksNyArMTQ5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENvcHkuY29weUN1cnJlbnRTdHJ1Y3R1cmUoanNvblBhcnNlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZURldGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkBAIC0xOTYsNyArMTk1LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBkZXNlcmlhbGl6YXRpb25Db250ZXh0Lm1hcHBpbmdFeGNlcHRpb24oIkNvdWxkIG5vdCBkZXNlcmlhbGl6ZSB0aGUgSlNPTiB2YWx1ZSBhcyByZXF1aXJlZC4gTmVzdGVkIGV4Y2VwdGlvbjogIiArIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB0aHJvdyBkZXNlcmlhbGl6YXRpb25Db250ZXh0Lm1hcHBpbmdFeGNlcHRpb24oIkNvdWxkIG5vdCBkZXNlcmlhbGl6ZSB0aGUgSlNPTiB2YWx1ZSBhcyByZXF1aXJlZC4gTmVzdGVkIGV4Y2VwdGlvbjogIiArIGUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVHlwZSBwYXR0ZXJuIHdhc24ndCBkZXRlY3RlZCwgaG93ZXZlciwKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZVJlc29sdmVyQnVpbGRlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlUmVzb2x2ZXJCdWlsZGVyLmphdmEKaW5kZXggNjg5M2RlNy4uZDVkNjgxZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlUmVzb2x2ZXJCdWlsZGVyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlUmVzb2x2ZXJCdWlsZGVyLmphdmEKQEAgLTYxLDkgKzYxLDE1IEBACiAgICAgcHVibGljIFR5cGVTZXJpYWxpemVyIGJ1aWxkVHlwZVNlcmlhbGl6ZXIoZmluYWwgU2VyaWFsaXphdGlvbkNvbmZpZyBjb25maWcsIGZpbmFsIEphdmFUeXBlIGJhc2VUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbGxlY3Rpb248TmFtZWRUeXBlPiBzdWJ0eXBlcykgewogICAgICAgICBmaW5hbCBUeXBlSWRSZXNvbHZlciBpZFJlcyA9IHRoaXMuaWRSZXNvbHZlcihjb25maWcsIGJhc2VUeXBlLCB0eXBlVmFsaWRhdG9yLCBzdWJ0eXBlcywgdHJ1ZSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gdmVyc2lvbiA9PSBHcmFwaFNPTlZlcnNpb24uVjJfMCA/Ci0gICAgICAgICAgICAgICAgbmV3IEdyYXBoU09OVHlwZVNlcmlhbGl6ZXJWMihpZFJlcywgdGhpcy5nZXRUeXBlUHJvcGVydHkoKSwgdHlwZUluZm8sIHZhbHVlUHJvcGVydHlOYW1lKSA6Ci0gICAgICAgICAgICAgICAgbmV3IEdyYXBoU09OVHlwZVNlcmlhbGl6ZXJWMyhpZFJlcywgdGhpcy5nZXRUeXBlUHJvcGVydHkoKSwgdHlwZUluZm8sIHZhbHVlUHJvcGVydHlOYW1lKTsKKyAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7CisgICAgICAgICAgICBjYXNlIFYyXzA6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFNPTlR5cGVTZXJpYWxpemVyVjIoaWRSZXMsIHRoaXMuZ2V0VHlwZVByb3BlcnR5KCksIHR5cGVJbmZvLCB2YWx1ZVByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBjYXNlIFYzXzA6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFNPTlR5cGVTZXJpYWxpemVyVjMoaWRSZXMsIHRoaXMuZ2V0VHlwZVByb3BlcnR5KCksIHR5cGVJbmZvLCB2YWx1ZVByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBjYXNlIFY0XzA6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT05UeXBlU2VyaWFsaXplclY0KGlkUmVzLCB0aGlzLmdldFR5cGVQcm9wZXJ0eSgpLCB0eXBlSW5mbywgdmFsdWVQcm9wZXJ0eU5hbWUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIEdyYXBoU09OVHlwZVJlc29sdmVyQnVpbGRlciB2YWx1ZVByb3BlcnR5TmFtZShmaW5hbCBTdHJpbmcgdmFsdWVQcm9wZXJ0eU5hbWUpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZVNlcmlhbGl6ZXJWNC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlU2VyaWFsaXplclY0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4MWRmZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZVNlcmlhbGl6ZXJWNC5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbjsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRGlyZWN0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblRva2VuOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUudHlwZS5Xcml0YWJsZVR5cGVJZDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5qc29udHlwZS5UeXBlSWRSZXNvbHZlcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogR3JhcGhTT04gNC4wIHtAY29kZSBUeXBlU2VyaWFsaXplcn0uCisgKgorICogQGF1dGhvciBLZXZpbiBHYWxsYXJkbyAoaHR0cHM6Ly9rZ2RvLm1lKQorICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQorICovCitwdWJsaWMgY2xhc3MgR3JhcGhTT05UeXBlU2VyaWFsaXplclY0IGV4dGVuZHMgQWJzdHJhY3RHcmFwaFNPTlR5cGVTZXJpYWxpemVyIHsKKworICAgIEdyYXBoU09OVHlwZVNlcmlhbGl6ZXJWNChmaW5hbCBUeXBlSWRSZXNvbHZlciBpZFJlcywgZmluYWwgU3RyaW5nIHByb3BlcnR5TmFtZSwgZmluYWwgVHlwZUluZm8gdHlwZUluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB2YWx1ZVByb3BlcnR5TmFtZSkgeworICAgICAgICBzdXBlcihpZFJlcywgcHJvcGVydHlOYW1lLCB0eXBlSW5mbywgdmFsdWVQcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBXcml0YWJsZVR5cGVJZCB3cml0ZVR5cGVQcmVmaXgoZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBXcml0YWJsZVR5cGVJZCB3cml0YWJsZVR5cGVJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHdyaXRhYmxlVHlwZUlkLnZhbHVlU2hhcGUgPT0gSnNvblRva2VuLlNUQVJUX09CSkVDVCkgeworICAgICAgICAgICAgaWYgKHdyaXRhYmxlVHlwZUlkLmZvclZhbHVlIGluc3RhbmNlb2YgTWFwKSB7CisgICAgICAgICAgICAgICAgd3JpdGVUeXBlUHJlZml4KGpzb25HZW5lcmF0b3IsIGdldFR5cGVJZFJlc29sdmVyKCkuaWRGcm9tVmFsdWVBbmRUeXBlKHdyaXRhYmxlVHlwZUlkLmZvclZhbHVlLCBnZXRDbGFzc0Zyb21PYmplY3Qod3JpdGFibGVUeXBlSWQuZm9yVmFsdWUpKSk7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0QXJyYXkoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAod3JpdGFibGVUeXBlSWQudmFsdWVTaGFwZSA9PSBKc29uVG9rZW4uU1RBUlRfQVJSQVkpIHsKKyAgICAgICAgICAgIGlmICh3cml0YWJsZVR5cGVJZC5mb3JWYWx1ZSBpbnN0YW5jZW9mIExpc3QgfHwgd3JpdGFibGVUeXBlSWQuZm9yVmFsdWUgaW5zdGFuY2VvZiBTZXQpIHsKKyAgICAgICAgICAgICAgICB3cml0ZVR5cGVQcmVmaXgoanNvbkdlbmVyYXRvciwgZ2V0VHlwZUlkUmVzb2x2ZXIoKS5pZEZyb21WYWx1ZUFuZFR5cGUod3JpdGFibGVUeXBlSWQuZm9yVmFsdWUsIGdldENsYXNzRnJvbU9iamVjdCh3cml0YWJsZVR5cGVJZC5mb3JWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRBcnJheSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNhbldyaXRlVHlwZUlkKCkpIHsKKyAgICAgICAgICAgIHdyaXRlVHlwZVByZWZpeChqc29uR2VuZXJhdG9yLCBnZXRUeXBlSWRSZXNvbHZlcigpLmlkRnJvbVZhbHVlQW5kVHlwZSh3cml0YWJsZVR5cGVJZC5mb3JWYWx1ZSwgZ2V0Q2xhc3NGcm9tT2JqZWN0KHdyaXRhYmxlVHlwZUlkLmZvclZhbHVlKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ291bGQgbm90IHdyaXRlIHByZWZpeDogc2hhcGVbIiArIHdyaXRhYmxlVHlwZUlkLnZhbHVlU2hhcGUgKyAiXSB2YWx1ZVsiICsgd3JpdGFibGVUeXBlSWQuZm9yVmFsdWUgKyAiXSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHdyaXRhYmxlVHlwZUlkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBXcml0YWJsZVR5cGVJZCB3cml0ZVR5cGVTdWZmaXgoZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBXcml0YWJsZVR5cGVJZCB3cml0YWJsZVR5cGVJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHdyaXRhYmxlVHlwZUlkLnZhbHVlU2hhcGUgPT0gSnNvblRva2VuLlNUQVJUX09CSkVDVCkgeworICAgICAgICAgICAgaWYgKHdyaXRhYmxlVHlwZUlkLmZvclZhbHVlIGluc3RhbmNlb2YgTWFwKSB7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZEFycmF5KCk7CisgICAgICAgICAgICAgICAgd3JpdGVUeXBlU3VmZml4KGpzb25HZW5lcmF0b3IpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kT2JqZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAod3JpdGFibGVUeXBlSWQudmFsdWVTaGFwZSA9PSBKc29uVG9rZW4uU1RBUlRfQVJSQVkpIHsKKyAgICAgICAgICAgIGlmICh3cml0YWJsZVR5cGVJZC5mb3JWYWx1ZSBpbnN0YW5jZW9mIExpc3QgfHwgd3JpdGFibGVUeXBlSWQuZm9yVmFsdWUgaW5zdGFuY2VvZiBTZXQpIHsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKKyAgICAgICAgICAgICAgICB3cml0ZVR5cGVTdWZmaXgoanNvbkdlbmVyYXRvcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRBcnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNhbldyaXRlVHlwZUlkKCkpIHsKKyAgICAgICAgICAgIHdyaXRlVHlwZVN1ZmZpeChqc29uR2VuZXJhdG9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBzdWZmaXg6IHNoYXBlWyIgKyB3cml0YWJsZVR5cGVJZC52YWx1ZVNoYXBlICsgIl0gdmFsdWVbIiArIHdyaXRhYmxlVHlwZUlkLmZvclZhbHVlICsgIl0iKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB3cml0YWJsZVR5cGVJZDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgQ2xhc3MgZ2V0Q2xhc3NGcm9tT2JqZWN0KGZpbmFsIE9iamVjdCBvKSB7CisgICAgICAgIGZpbmFsIENsYXNzIGMgPSBvLmdldENsYXNzKCk7CisgICAgICAgIGlmIChjbGFzc01hcC5jb250YWluc0tleShjKSkKKyAgICAgICAgICAgIHJldHVybiBjbGFzc01hcC5nZXQoYyk7CisKKyAgICAgICAgZmluYWwgQ2xhc3MgbWFwcGVkOworICAgICAgICBpZiAoTWFwLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oYykpIHsKKyAgICAgICAgICAgIGlmIChUcmVlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oYykpCisgICAgICAgICAgICAgICAgbWFwcGVkID0gVHJlZS5jbGFzczsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXBwZWQgPSBNYXAuY2xhc3M7CisgICAgICAgIH0gZWxzZSBpZiAoTGlzdC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGMpKQorICAgICAgICAgICAgbWFwcGVkID0gTGlzdC5jbGFzczsKKyAgICAgICAgZWxzZSBpZiAoU2V0LmNsYXNzLmlzQXNzaWduYWJsZUZyb20oYykgJiYgIUJ1bGtTZXQuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjKSkgICAvLyB3ZSBoYXZlIHNwZWNpYWwgaGFuZGxpbmcgb2YgQnVsa1NldAorICAgICAgICAgICAgbWFwcGVkID0gU2V0LmNsYXNzOworICAgICAgICBlbHNlIGlmIChWZXJ0ZXguY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjKSkKKyAgICAgICAgICAgIG1hcHBlZCA9IFZlcnRleC5jbGFzczsKKyAgICAgICAgZWxzZSBpZiAoRWRnZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGMpKQorICAgICAgICAgICAgbWFwcGVkID0gRWRnZS5jbGFzczsKKyAgICAgICAgZWxzZSBpZiAoUGF0aC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGMpKQorICAgICAgICAgICAgbWFwcGVkID0gUGF0aC5jbGFzczsKKyAgICAgICAgZWxzZSBpZiAoVmVydGV4UHJvcGVydHkuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjKSkKKyAgICAgICAgICAgIG1hcHBlZCA9IFZlcnRleFByb3BlcnR5LmNsYXNzOworICAgICAgICBlbHNlIGlmIChQcm9wZXJ0eS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGMpKQorICAgICAgICAgICAgbWFwcGVkID0gUHJvcGVydHkuY2xhc3M7CisgICAgICAgIGVsc2UgaWYgKEJ5dGVCdWZmZXIuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjKSkKKyAgICAgICAgICAgIG1hcHBlZCA9IEJ5dGVCdWZmZXIuY2xhc3M7CisgICAgICAgIGVsc2UgaWYgKERpcmVjdGlvbi5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGMpKQorICAgICAgICAgICAgbWFwcGVkID0gRGlyZWN0aW9uLmNsYXNzOworICAgICAgICBlbHNlIGlmIChULmNsYXNzLmlzQXNzaWduYWJsZUZyb20oYykpCisgICAgICAgICAgICBtYXBwZWQgPSBULmNsYXNzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtYXBwZWQgPSBjOworCisgICAgICAgIGNsYXNzTWFwLnB1dChjLCBtYXBwZWQpOworICAgICAgICByZXR1cm4gbWFwcGVkOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVmVyc2lvbi5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05WZXJzaW9uLmphdmEKaW5kZXggYTk5OTJiNi4uZGM0NjM2ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05WZXJzaW9uLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05WZXJzaW9uLmphdmEKQEAgLTI2LDcgKzI2LDggQEAKIHB1YmxpYyBlbnVtIEdyYXBoU09OVmVyc2lvbiB7CiAgICAgVjFfMChHcmFwaFNPTk1vZHVsZS5HcmFwaFNPTk1vZHVsZVYxLmJ1aWxkKCksICIxLjAiKSwKICAgICBWMl8wKEdyYXBoU09OTW9kdWxlLkdyYXBoU09OTW9kdWxlVjIuYnVpbGQoKSwgIjIuMCIpLAotICAgIFYzXzAoR3JhcGhTT05Nb2R1bGUuR3JhcGhTT05Nb2R1bGVWMy5idWlsZCgpLCAiMy4wIik7CisgICAgVjNfMChHcmFwaFNPTk1vZHVsZS5HcmFwaFNPTk1vZHVsZVYzLmJ1aWxkKCksICIzLjAiKSwKKyAgICBWNF8wKEdyYXBoU09OTW9kdWxlLkdyYXBoU09OTW9kdWxlVjQuYnVpbGQoKSwgIjQuMCIpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFNPTk1vZHVsZS5HcmFwaFNPTk1vZHVsZUJ1aWxkZXIgYnVpbGRlcjsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2ZXJzaW9uTnVtYmVyOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05YTW9kdWxlVjQuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OWE1vZHVsZVY0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxNTZmNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OWE1vZHVsZVY0LmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uOworCitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLnRpbWUuRHVyYXRpb247CitpbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZTsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKK2ltcG9ydCBqYXZhLnRpbWUuTG9jYWxUaW1lOworaW1wb3J0IGphdmEudGltZS5Nb250aERheTsKK2ltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7CitpbXBvcnQgamF2YS50aW1lLk9mZnNldFRpbWU7CitpbXBvcnQgamF2YS50aW1lLlBlcmlvZDsKK2ltcG9ydCBqYXZhLnRpbWUuWWVhcjsKK2ltcG9ydCBqYXZhLnRpbWUuWWVhck1vbnRoOworaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OworaW1wb3J0IGphdmEudGltZS5ab25lZERhdGVUaW1lOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIFZlcnNpb24gNC4wIG9mIEdyYXBoU09OIGV4dGVuc2lvbnMuCisgKgorICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQorICovCitwdWJsaWMgZmluYWwgY2xhc3MgR3JhcGhTT05YTW9kdWxlVjQgZXh0ZW5kcyBHcmFwaFNPTk1vZHVsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8Q2xhc3MsIFN0cmluZz4gVFlQRV9ERUZJTklUSU9OUyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcCgKKyAgICAgICAgICAgIG5ldyBMaW5rZWRIYXNoTWFwPENsYXNzLCBTdHJpbmc+KCkge3sKKyAgICAgICAgICAgICAgICBwdXQoQnl0ZUJ1ZmZlci5jbGFzcywgIkJpbmFyeSIpOworICAgICAgICAgICAgICAgIHB1dChTaG9ydC5jbGFzcywgIkludDE2Iik7CisgICAgICAgICAgICAgICAgcHV0KEJpZ0ludGVnZXIuY2xhc3MsICJCaWdJbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgcHV0KEJpZ0RlY2ltYWwuY2xhc3MsICJCaWdEZWNpbWFsIik7CisgICAgICAgICAgICAgICAgcHV0KEJ5dGUuY2xhc3MsICJCeXRlIik7CisgICAgICAgICAgICAgICAgcHV0KENoYXJhY3Rlci5jbGFzcywgIkNoYXIiKTsKKworICAgICAgICAgICAgICAgIC8vIFRpbWUgc2VyaWFsaXplcnMvZGVzZXJpYWxpemVycworICAgICAgICAgICAgICAgIHB1dChEdXJhdGlvbi5jbGFzcywgIkR1cmF0aW9uIik7CisgICAgICAgICAgICAgICAgcHV0KE9mZnNldERhdGVUaW1lLmNsYXNzLCAiRGF0ZVRpbWUiKTsKKyAgICAgICAgICAgIH19KTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcgb2JqZWN0LgorICAgICAqLworICAgIHByb3RlY3RlZCBHcmFwaFNPTlhNb2R1bGVWNChmaW5hbCBib29sZWFuIG5vcm1hbGl6ZSkgeworICAgICAgICBzdXBlcigiZ3JhcGhzb254LTQuMCIpOworCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFNFUklBTElaRVJTIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgICAvLyBqYXZhLnRpbWUKKyAgICAgICAgYWRkU2VyaWFsaXplcihEdXJhdGlvbi5jbGFzcywgbmV3IEphdmFUaW1lU2VyaWFsaXplcnNWNC5EdXJhdGlvbkphY2tzb25TZXJpYWxpemVyKCkpOworICAgICAgICBhZGRTZXJpYWxpemVyKE9mZnNldERhdGVUaW1lLmNsYXNzLCBuZXcgSmF2YVRpbWVTZXJpYWxpemVyc1Y0Lk9mZnNldERhdGVUaW1lSmFja3NvblNlcmlhbGl6ZXIoKSk7CisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gREVTRVJJQUxJWkVSUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgLy8gamF2YS50aW1lCisgICAgICAgIGFkZERlc2VyaWFsaXplcihEdXJhdGlvbi5jbGFzcywgbmV3IEphdmFUaW1lU2VyaWFsaXplcnNWNC5EdXJhdGlvbkphY2tzb25EZXNlcmlhbGl6ZXIoKSk7CisgICAgICAgIGFkZERlc2VyaWFsaXplcihPZmZzZXREYXRlVGltZS5jbGFzcywgbmV3IEphdmFUaW1lU2VyaWFsaXplcnNWNC5PZmZzZXREYXRlVGltZUphY2tzb25EZXNlcmlhbGl6ZXIoKSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBHcmFwaFNPTk1vZHVsZUJ1aWxkZXIgYnVpbGQoKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNYXA8Q2xhc3MsIFN0cmluZz4gZ2V0VHlwZURlZmluaXRpb25zKCkgeworICAgICAgICByZXR1cm4gVFlQRV9ERUZJTklUSU9OUzsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGVOYW1lc3BhY2UoKSB7CisgICAgICAgIHJldHVybiBHcmFwaFNPTlRva2Vucy5HUkVNTElOX1RZUEVfTkFNRVNQQUNFOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQnVpbGRlciBpbXBsZW1lbnRzIEdyYXBoU09OTW9kdWxlQnVpbGRlciB7CisKKyAgICAgICAgcHJpdmF0ZSBCdWlsZGVyKCkgeworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFNPTk1vZHVsZSBjcmVhdGUoZmluYWwgYm9vbGVhbiBub3JtYWxpemUsIGZpbmFsIFR5cGVJbmZvIHR5cGVJbmZvKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OWE1vZHVsZVY0KG5vcm1hbGl6ZSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vSmF2YVRpbWVTZXJpYWxpemVyc1Y0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9KYXZhVGltZVNlcmlhbGl6ZXJzVjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmMzODVmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vSmF2YVRpbWVTZXJpYWxpemVyc1Y0LmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblBhcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5EZXNlcmlhbGl6YXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLlNlcmlhbGl6ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5kZXNlci5zdGQuU3RkRGVzZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmpzb250eXBlLlR5cGVTZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2VyaWFsaXplcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOworaW1wb3J0IGphdmEudGltZS5JbnN0YW50OworaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGU7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7CitpbXBvcnQgamF2YS50aW1lLkxvY2FsVGltZTsKK2ltcG9ydCBqYXZhLnRpbWUuTW9udGhEYXk7CitpbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOworaW1wb3J0IGphdmEudGltZS5PZmZzZXRUaW1lOworaW1wb3J0IGphdmEudGltZS5QZXJpb2Q7CitpbXBvcnQgamF2YS50aW1lLlllYXI7CitpbXBvcnQgamF2YS50aW1lLlllYXJNb250aDsKK2ltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKK2ltcG9ydCBqYXZhLnRpbWUuWm9uZWREYXRlVGltZTsKKworLyoqCisgKiBHcmFwaFNPTiBzZXJpYWxpemVycyBmb3IgY2xhc3NlcyBpbiB7QGNvZGUgamF2YS50aW1lLip9IGZvciB0aGUgdmVyc2lvbiA0LjAgb2YgR3JhcGhTT04uCisgKi8KK2ZpbmFsIGNsYXNzIEphdmFUaW1lU2VyaWFsaXplcnNWNCB7CisKKyAgICBwcml2YXRlIEphdmFUaW1lU2VyaWFsaXplcnNWNCgpIHt9CisKKyAgICAvKioKKyAgICAgKiBCYXNlIGNsYXNzIGZvciBzZXJpYWxpemluZyB0aGUge0Bjb2RlIGphdmEudGltZS4qfSB0byBJU08tODA2MSBmb3JtYXRzLgorICAgICAqLworICAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEphdmFUaW1lU2VyaWFsaXplcjxUPiBleHRlbmRzIFN0ZFNlcmlhbGl6ZXI8VD4geworCisgICAgICAgIHB1YmxpYyBBYnN0cmFjdEphdmFUaW1lU2VyaWFsaXplcihmaW5hbCBDbGFzczxUPiBjbGF6eikgeworICAgICAgICAgICAgc3VwZXIoY2xhenopOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBUIHZhbHVlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBnZW4ud3JpdGVTdHJpbmcodmFsdWUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplV2l0aFR5cGUoZmluYWwgVCB2YWx1ZSwgZmluYWwgSnNvbkdlbmVyYXRvciBnZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVycywgZmluYWwgVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHR5cGVTZXIud3JpdGVUeXBlUHJlZml4Rm9yU2NhbGFyKHZhbHVlLCBnZW4pOworICAgICAgICAgICAgZ2VuLndyaXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgdHlwZVNlci53cml0ZVR5cGVTdWZmaXhGb3JTY2FsYXIodmFsdWUsIGdlbik7CisgICAgICAgIH0KKyAgICB9CisgICAgLyoqCisgICAgICogQmFzZSBjbGFzcyBmb3Igc2VyaWFsaXppbmcgdGhlIHtAY29kZSBqYXZhLnRpbWUuKn0gZnJvbSBJU08tODA2MSBmb3JtYXRzLgorICAgICAqLworICAgIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBBYnN0cmFjdEphdmFUaW1lSmFja3NvbkRlc2VyaWFsaXplcjxUPiBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxUPiB7CisgICAgICAgIHB1YmxpYyBBYnN0cmFjdEphdmFUaW1lSmFja3NvbkRlc2VyaWFsaXplcihmaW5hbCBDbGFzczxUPiBjbGF6eikgeworICAgICAgICAgICAgc3VwZXIoY2xhenopOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGFic3RyYWN0IFQgcGFyc2UoZmluYWwgU3RyaW5nIHZhbCk7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBUIGRlc2VyaWFsaXplKGZpbmFsIEpzb25QYXJzZXIganNvblBhcnNlciwgZmluYWwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgcmV0dXJuIHBhcnNlKGpzb25QYXJzZXIuZ2V0VGV4dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NhY2hhYmxlKCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgRHVyYXRpb25KYWNrc29uU2VyaWFsaXplciBleHRlbmRzIEFic3RyYWN0SmF2YVRpbWVTZXJpYWxpemVyPER1cmF0aW9uPiB7CisKKyAgICAgICAgcHVibGljIER1cmF0aW9uSmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihEdXJhdGlvbi5jbGFzcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgRHVyYXRpb25KYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RKYXZhVGltZUphY2tzb25EZXNlcmlhbGl6ZXI8RHVyYXRpb24+IHsKKyAgICAgICAgcHVibGljIER1cmF0aW9uSmFja3NvbkRlc2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKER1cmF0aW9uLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgRHVyYXRpb24gcGFyc2UoZmluYWwgU3RyaW5nIHZhbCkgeworICAgICAgICAgICAgcmV0dXJuIER1cmF0aW9uLnBhcnNlKHZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgT2Zmc2V0RGF0ZVRpbWVKYWNrc29uU2VyaWFsaXplciBleHRlbmRzIEFic3RyYWN0SmF2YVRpbWVTZXJpYWxpemVyPE9mZnNldERhdGVUaW1lPiB7CisKKyAgICAgICAgcHVibGljIE9mZnNldERhdGVUaW1lSmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihPZmZzZXREYXRlVGltZS5jbGFzcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgT2Zmc2V0RGF0ZVRpbWVKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RKYXZhVGltZUphY2tzb25EZXNlcmlhbGl6ZXI8T2Zmc2V0RGF0ZVRpbWU+IHsKKyAgICAgICAgcHVibGljIE9mZnNldERhdGVUaW1lSmFja3NvbkRlc2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKE9mZnNldERhdGVUaW1lLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgT2Zmc2V0RGF0ZVRpbWUgcGFyc2UoZmluYWwgU3RyaW5nIHZhbCkgeworICAgICAgICAgICAgcmV0dXJuIE9mZnNldERhdGVUaW1lLnBhcnNlKHZhbCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9KYXZhVXRpbFNlcmlhbGl6ZXJzVjQuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0phdmFVdGlsU2VyaWFsaXplcnNWNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDYzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9KYXZhVXRpbFNlcmlhbGl6ZXJzVjQuamF2YQpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb247CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uUGFyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblByb2Nlc3NpbmdFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uVG9rZW47CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuRGVzZXJpYWxpemF0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5TZXJpYWxpemVyUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuZGVzZXIuc3RkLlN0ZERlc2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5qc29udHlwZS5UeXBlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5zZXIuc3RkLlN0ZFNlcmlhbGl6ZXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqCisgKiBHcmFwaFNPTiBzZXJpYWxpemVycyBmb3IgY2xhc3NlcyBpbiB7QGNvZGUgamF2YS51dGlsLip9IGZvciB0aGUgdmVyc2lvbiA0LjAgb2YgR3JhcGhTT04uCisgKi8KK2ZpbmFsIGNsYXNzIEphdmFVdGlsU2VyaWFsaXplcnNWNCB7CisKKyAgICBwcml2YXRlIEphdmFVdGlsU2VyaWFsaXplcnNWNCgpIHt9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gU0VSSUFMSVpFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgTWFwSmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPE1hcD4geworICAgICAgICBwdWJsaWMgTWFwSmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihNYXAuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBNYXAgbWFwLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZvcihNYXAuRW50cnkgZW50cnkgOiAoU2V0PE1hcC5FbnRyeT4pIG1hcC5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdChlbnRyeS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdChlbnRyeS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemVXaXRoVHlwZShmaW5hbCBNYXAgbWFwLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgdHlwZVNlcmlhbGl6ZXIud3JpdGVUeXBlUHJlZml4Rm9yT2JqZWN0KG1hcCwganNvbkdlbmVyYXRvcik7CisgICAgICAgICAgICBzZXJpYWxpemUobWFwLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIpOworICAgICAgICAgICAgdHlwZVNlcmlhbGl6ZXIud3JpdGVUeXBlU3VmZml4Rm9yT2JqZWN0KG1hcCwganNvbkdlbmVyYXRvcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb2VyY2VzIHtAY29kZSBNYXAuRW50cnl9IHRvIGEge0Bjb2RlIE1hcH0gd2l0aCBhIHNpbmdsZSBlbnRyeSBpbiBpdC4KKyAgICAgKi8KKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgTWFwRW50cnlKYWNrc29uU2VyaWFsaXplciBleHRlbmRzIFN0ZFNlcmlhbGl6ZXI8TWFwLkVudHJ5PiB7CisKKyAgICAgICAgcHVibGljIE1hcEVudHJ5SmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihNYXAuRW50cnkuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBNYXAuRW50cnkgZW50cnksIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKKyAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCxPYmplY3Q+IG0gPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCkgbS5wdXQoZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdChtKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemVXaXRoVHlwZShmaW5hbCBNYXAuRW50cnkgZW50cnksIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwgZmluYWwgVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBzZXJpYWxpemUoZW50cnksIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgU2V0SmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPFNldD4geworICAgICAgICBwdWJsaWMgU2V0SmFja3NvblNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihTZXQuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBTZXQgc2V0LCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZvcihPYmplY3QgbyA6IHNldCkgeworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3Qobyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplV2l0aFR5cGUoZmluYWwgU2V0IHNldCwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyLCBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyaWFsaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHR5cGVTZXJpYWxpemVyLndyaXRlVHlwZVByZWZpeEZvckFycmF5KHNldCwganNvbkdlbmVyYXRvcik7CisgICAgICAgICAgICBzZXJpYWxpemUoc2V0LCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIpOworICAgICAgICAgICAgdHlwZVNlcmlhbGl6ZXIud3JpdGVUeXBlU3VmZml4Rm9yQXJyYXkoc2V0LCBqc29uR2VuZXJhdG9yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBMaXN0SmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPExpc3Q+IHsKKyAgICAgICAgcHVibGljIExpc3RKYWNrc29uU2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKExpc3QuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBMaXN0IGxpc3QsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKKyAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgZm9yKE9iamVjdCBvIDogbGlzdCkgeworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3Qobyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplV2l0aFR5cGUoZmluYWwgTGlzdCBsaXN0LCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgdHlwZVNlcmlhbGl6ZXIud3JpdGVUeXBlUHJlZml4Rm9yQXJyYXkobGlzdCwganNvbkdlbmVyYXRvcik7CisgICAgICAgICAgICBzZXJpYWxpemUobGlzdCwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyKTsKKyAgICAgICAgICAgIHR5cGVTZXJpYWxpemVyLndyaXRlVHlwZVN1ZmZpeEZvckFycmF5KGxpc3QsIGpzb25HZW5lcmF0b3IpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIERFU0VSSUFMSVpFUlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworICAgIHN0YXRpYyBjbGFzcyBNYXBKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPE1hcD4geworCisgICAgICAgIHByb3RlY3RlZCBNYXBKYWNrc29uRGVzZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoTWFwLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgTWFwIGRlc2VyaWFsaXplKGZpbmFsIEpzb25QYXJzZXIganNvblBhcnNlciwgZmluYWwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsT2JqZWN0PiBtID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworCisgICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IGtleSA9IGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcyk7CisgICAgICAgICAgICAgICAganNvblBhcnNlci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgdmFsID0gZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgT2JqZWN0LmNsYXNzKTsKKyAgICAgICAgICAgICAgICBtLnB1dChrZXksIHZhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGNsYXNzIFNldEphY2tzb25EZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8U2V0PiB7CisKKyAgICAgICAgcHJvdGVjdGVkIFNldEphY2tzb25EZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihTZXQuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTZXQgZGVzZXJpYWxpemUoZmluYWwgSnNvblBhcnNlciBqc29uUGFyc2VyLCBmaW5hbCBEZXNlcmlhbGl6YXRpb25Db250ZXh0IGRlc2VyaWFsaXphdGlvbkNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgU2V0PE9iamVjdD4gcyA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oKTsKKworICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgeworICAgICAgICAgICAgICAgIHMuYWRkKGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBMaXN0SmFja3NvbkRlc2VyaWFsaXplciBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxMaXN0PiB7CisKKyAgICAgICAgcHJvdGVjdGVkIExpc3RKYWNrc29uRGVzZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoTGlzdC5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIExpc3QgZGVzZXJpYWxpemUoZmluYWwgSnNvblBhcnNlciBqc29uUGFyc2VyLCBmaW5hbCBEZXNlcmlhbGl6YXRpb25Db250ZXh0IGRlc2VyaWFsaXphdGlvbkNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IHMgPSBuZXcgTGlua2VkTGlzdDw+KCk7CisKKyAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfQVJSQVkpIHsKKyAgICAgICAgICAgICAgICBzLmFkZChkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBPYmplY3QuY2xhc3MpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UcmF2ZXJzYWxTZXJpYWxpemVyc1YyLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UcmF2ZXJzYWxTZXJpYWxpemVyc1YyLmphdmEKaW5kZXggMjE4YjZmZC4uYmFhOWQzOCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVHJhdmVyc2FsU2VyaWFsaXplcnNWMi5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL1RyYXZlcnNhbFNlcmlhbGl6ZXJzVjIuamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5CYXNlQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbkNvbnZlcnRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5EZWZhdWx0UmVtb3RlVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk5vdFA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwpAQCAtNDgsNyArNDcsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2VyaWFsaXplcjsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtNzQsNyArNzIsNyBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdCh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdCh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC04NSw0NSArODMsNiBAQAogCiAgICAgfQogCi0gICAgZmluYWwgc3RhdGljIGNsYXNzIEJ5dGVjb2RlSmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPEJ5dGVjb2RlPiB7Ci0KLSAgICAgICAgcHVibGljIEJ5dGVjb2RlSmFja3NvblNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgICAgICBzdXBlcihCeXRlY29kZS5jbGFzcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCi0gICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLml0ZXJhdG9yKCkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUFycmF5RmllbGRTdGFydChHcmFwaFNPTlRva2Vucy5TT1VSQ0UpOwotICAgICAgICAgICAgICAgIGZvciAoZmluYWwgQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiBieXRlY29kZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRBcnJheSgpOwotICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nKGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCkpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBhcmd1bWVudCA6IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0KGFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZEFycmF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpLml0ZXJhdG9yKCkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUFycmF5RmllbGRTdGFydChHcmFwaFNPTlRva2Vucy5TVEVQKTsKLSAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydEFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmcoaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGFyZ3VtZW50IDogaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3QoYXJndW1lbnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRBcnJheSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgc3RhdGljIGNsYXNzIEVudW1KYWNrc29uU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8RW51bT4gewogCiAgICAgICAgIHB1YmxpYyBFbnVtSmFja3NvblNlcmlhbGl6ZXIoKSB7CkBAIC0xOTAsMjMgKzE0OSw2IEBACiAKICAgICB9CiAKLSAgICBmaW5hbCBzdGF0aWMgY2xhc3MgQmluZGluZ0phY2tzb25TZXJpYWxpemVyIGV4dGVuZHMgU3RkU2NhbGFyU2VyaWFsaXplcjxCeXRlY29kZS5CaW5kaW5nPiB7Ci0KLSAgICAgICAgcHVibGljIEJpbmRpbmdKYWNrc29uU2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKEJ5dGVjb2RlLkJpbmRpbmcuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBCeXRlY29kZS5CaW5kaW5nIGJpbmRpbmcsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKLSAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoR3JhcGhTT05Ub2tlbnMuS0VZLCBiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKEdyYXBoU09OVG9rZW5zLlZBTFVFLCBiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KICAgICBmaW5hbCBzdGF0aWMgY2xhc3MgVHJhdmVyc2VySmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPFRyYXZlcnNlcj4gewogCiAgICAgICAgIHB1YmxpYyBUcmF2ZXJzZXJKYWNrc29uU2VyaWFsaXplcigpIHsKQEAgLTI1MCw1MyArMTkyLDYgQEAKICAgICAvLyBERVNFUklBTElaRVJTIC8vCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBmaW5hbCBzdGF0aWMgY2xhc3MgQnl0ZWNvZGVKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPEJ5dGVjb2RlPiB7Ci0KLSAgICAgICAgcHVibGljIEJ5dGVjb2RlSmFja3NvbkRlc2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKEJ5dGVjb2RlLmNsYXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQnl0ZWNvZGUgZGVzZXJpYWxpemUoZmluYWwgSnNvblBhcnNlciBqc29uUGFyc2VyLCBmaW5hbCBEZXNlcmlhbGl6YXRpb25Db250ZXh0IGRlc2VyaWFsaXphdGlvbkNvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24gewotICAgICAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLQotICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9PQkpFQ1QpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY3VycmVudCA9IGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuU09VUkNFKSB8fCBjdXJyZW50LmVxdWFscyhHcmFwaFNPTlRva2Vucy5TVEVQKSkgewotICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOwotCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfQVJSQVkpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgc2hvdWxkIGJlIGEgbGlzdCBub3cgYW5kIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIGFsd2F5cyBzdHJpbmcgYW5kIGlzIHRoZSBzdGVwIG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIHN0YXJ0IGFycmF5Ci0gICAgICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc3RlcE5hbWUgPSBqc29uUGFyc2VyLmdldFRleHQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBsaXN0IGZvciBhcmd1bWVudHMgdW50aWwgaXQgZ2V0cyB0byB0aGUgZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gYXJndW1lbnRzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX0FSUkFZKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3Qga25vdyB0aGUgdHlwZXMgaGVyZSwgc28gbGV0IHRoZSBkZXNlcmlhbGl6ZXIgZmlndXJlIHRoYXQgYnVzaW5lc3Mgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLmFkZChkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBPYmplY3QuY2xhc3MpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaXQncyBub3QgYSAic291cmNlIiB0aGVuIGl0IG11c3QgYmUgYSAic3RlcCIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmVxdWFscyhHcmFwaFNPTlRva2Vucy5TT1VSQ0UpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlLmFkZFNvdXJjZShzdGVwTmFtZSwgYXJndW1lbnRzLnRvQXJyYXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcChzdGVwTmFtZSwgYXJndW1lbnRzLnRvQXJyYXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDYWNoYWJsZSgpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgZmluYWwgc3RhdGljIGNsYXNzIEVudW1KYWNrc29uRGVzZXJpYWxpemVyPEEgZXh0ZW5kcyBFbnVtPiBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxBPiB7CiAKICAgICAgICAgcHVibGljIEVudW1KYWNrc29uRGVzZXJpYWxpemVyKGZpbmFsIENsYXNzPEE+IGVudW1DbGFzcykgewpAQCAtNDYxLDM1ICszNTYsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZmluYWwgc3RhdGljIGNsYXNzIEJpbmRpbmdKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPEJ5dGVjb2RlLkJpbmRpbmc+IHsKLQotICAgICAgICBwdWJsaWMgQmluZGluZ0phY2tzb25EZXNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgICAgICBzdXBlcihCeXRlY29kZS5CaW5kaW5nLmNsYXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQnl0ZWNvZGUuQmluZGluZyBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBTdHJpbmcgayA9IG51bGw7Ci0gICAgICAgICAgICBPYmplY3QgdiA9IG51bGw7Ci0KLSAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfT0JKRUNUKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuS0VZKSkgewotICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICBrID0ganNvblBhcnNlci5nZXRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCkuZXF1YWxzKEdyYXBoU09OVG9rZW5zLlZBTFVFKSkgewotICAgICAgICAgICAgICAgICAgICBqc29uUGFyc2VyLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICB2ID0gZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgT2JqZWN0LmNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGVjb2RlLkJpbmRpbmc8PihrLCB2KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NhY2hhYmxlKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBzdGF0aWMgY2xhc3MgVHJhdmVyc2VySmFja3NvbkRlc2VyaWFsaXplciBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxUcmF2ZXJzZXI+IHsKIAogICAgICAgICBwdWJsaWMgVHJhdmVyc2VySmFja3NvbkRlc2VyaWFsaXplcigpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL1RyYXZlcnNhbFNlcmlhbGl6ZXJzVjMuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL1RyYXZlcnNhbFNlcmlhbGl6ZXJzVjMuamF2YQppbmRleCBhYjVkNDdhLi44MTBmNGYyIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UcmF2ZXJzYWxTZXJpYWxpemVyc1YzLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVHJhdmVyc2FsU2VyaWFsaXplcnNWMy5qYXZhCkBAIC0yMiw3ICsyMiw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkJhc2VDb25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uQ29udmVydGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuTm90UDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CkBAIC00MiwxNyArNDEsMTQgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblRva2VuOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuSmF2YVR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmRlc2VyLnN0ZC5TdGREZXNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuanNvbnR5cGUuVHlwZVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRTY2FsYXJTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC50eXBlLlR5cGVGYWN0b3J5OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtODEsNyArNzcsNyBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdCh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdCh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC05Miw0NSArODgsNiBAQAogCiAgICAgfQogCi0gICAgZmluYWwgc3RhdGljIGNsYXNzIEJ5dGVjb2RlSmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPEJ5dGVjb2RlPiB7Ci0KLSAgICAgICAgcHVibGljIEJ5dGVjb2RlSmFja3NvblNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgICAgICBzdXBlcihCeXRlY29kZS5jbGFzcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCi0gICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydE9iamVjdCgpOwotICAgICAgICAgICAgaWYgKGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLml0ZXJhdG9yKCkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUFycmF5RmllbGRTdGFydChHcmFwaFNPTlRva2Vucy5TT1VSQ0UpOwotICAgICAgICAgICAgICAgIGZvciAoZmluYWwgQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gOiBieXRlY29kZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRBcnJheSgpOwotICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nKGluc3RydWN0aW9uLmdldE9wZXJhdG9yKCkpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBhcmd1bWVudCA6IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0KGFyZ3VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZEFycmF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpLml0ZXJhdG9yKCkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUFycmF5RmllbGRTdGFydChHcmFwaFNPTlRva2Vucy5TVEVQKTsKLSAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdGFydEFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmcoaW5zdHJ1Y3Rpb24uZ2V0T3BlcmF0b3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGFyZ3VtZW50IDogaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3QoYXJndW1lbnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRBcnJheSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgc3RhdGljIGNsYXNzIEVudW1KYWNrc29uU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8RW51bT4gewogCiAgICAgICAgIHB1YmxpYyBFbnVtSmFja3NvblNlcmlhbGl6ZXIoKSB7CkBAIC0yMDgsMjMgKzE2NSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmaW5hbCBzdGF0aWMgY2xhc3MgQmluZGluZ0phY2tzb25TZXJpYWxpemVyIGV4dGVuZHMgU3RkU2NhbGFyU2VyaWFsaXplcjxCeXRlY29kZS5CaW5kaW5nPiB7Ci0KLSAgICAgICAgcHVibGljIEJpbmRpbmdKYWNrc29uU2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKEJ5dGVjb2RlLkJpbmRpbmcuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBCeXRlY29kZS5CaW5kaW5nIGJpbmRpbmcsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikKLSAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoR3JhcGhTT05Ub2tlbnMuS0VZLCBiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKEdyYXBoU09OVG9rZW5zLlZBTFVFLCBiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KICAgICBmaW5hbCBzdGF0aWMgY2xhc3MgVHJhdmVyc2VySmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPFRyYXZlcnNlcj4gewogCiAgICAgICAgIHB1YmxpYyBUcmF2ZXJzZXJKYWNrc29uU2VyaWFsaXplcigpIHsKQEAgLTI2OCw1NSArMjA4LDYgQEAKICAgICAvLyBERVNFUklBTElaRVJTIC8vCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBmaW5hbCBzdGF0aWMgY2xhc3MgQnl0ZWNvZGVKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPEJ5dGVjb2RlPiB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEphdmFUeXBlIGxpc3RKYXZhVHlwZSA9IFR5cGVGYWN0b3J5LmRlZmF1bHRJbnN0YW5jZSgpLmNvbnN0cnVjdENvbGxlY3Rpb25UeXBlKEFycmF5TGlzdC5jbGFzcywgT2JqZWN0LmNsYXNzKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSmF2YVR5cGUgbGlzdExpc3RKYXZhVHlwZSA9IFR5cGVGYWN0b3J5LmRlZmF1bHRJbnN0YW5jZSgpLmNvbnN0cnVjdENvbGxlY3Rpb25UeXBlKEFycmF5TGlzdC5jbGFzcywgbGlzdEphdmFUeXBlKTsKLQotICAgICAgICBwdWJsaWMgQnl0ZWNvZGVKYWNrc29uRGVzZXJpYWxpemVyKCkgewotICAgICAgICAgICAgc3VwZXIoQnl0ZWNvZGUuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBCeXRlY29kZSBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotCi0gICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX09CSkVDVCkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjdXJyZW50ID0ganNvblBhcnNlci5nZXRDdXJyZW50TmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmVxdWFscyhHcmFwaFNPTlRva2Vucy5TT1VSQ0UpIHx8IGN1cnJlbnQuZXF1YWxzKEdyYXBoU09OVG9rZW5zLlNURVApKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBzaG91bGQgYmUgYSBsaXN0IG5vdyBhbmQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QgaXMgYWx3YXlzIHN0cmluZyBhbmQgaXMgdGhlIHN0ZXAgbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2tpcCB0aGUgc3RhcnQgYXJyYXkKLSAgICAgICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdGVwTmFtZSA9IGpzb25QYXJzZXIuZ2V0VGV4dCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIGxpc3QgZm9yIGFyZ3VtZW50cyB1bnRpbCBpdCBnZXRzIHRvIHRoZSBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBhcmd1bWVudHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfQVJSQVkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCBrbm93IHRoZSB0eXBlcyBoZXJlLCBzbyBsZXQgdGhlIGRlc2VyaWFsaXplciBmaWd1cmUgdGhhdCBidXNpbmVzcyBvdXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMuYWRkKGRlc2VyaWFsaXphdGlvbkNvbnRleHQucmVhZFZhbHVlKGpzb25QYXJzZXIsIE9iamVjdC5jbGFzcykpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIG5vdCBhICJzb3VyY2UiIHRoZW4gaXQgbXVzdCBiZSBhICJzdGVwIgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZXF1YWxzKEdyYXBoU09OVG9rZW5zLlNPVVJDRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGUuYWRkU291cmNlKHN0ZXBOYW1lLCBhcmd1bWVudHMudG9BcnJheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZS5hZGRTdGVwKHN0ZXBOYW1lLCBhcmd1bWVudHMudG9BcnJheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBieXRlY29kZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NhY2hhYmxlKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBmaW5hbCBzdGF0aWMgY2xhc3MgRW51bUphY2tzb25EZXNlcmlhbGl6ZXI8QSBleHRlbmRzIEVudW0+IGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPEE+IHsKIAogICAgICAgICBwdWJsaWMgRW51bUphY2tzb25EZXNlcmlhbGl6ZXIoZmluYWwgQ2xhc3M8QT4gZW51bUNsYXNzKSB7CkBAIC01NTQsMzUgKzQ0NSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmaW5hbCBzdGF0aWMgY2xhc3MgQmluZGluZ0phY2tzb25EZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8Qnl0ZWNvZGUuQmluZGluZz4gewotCi0gICAgICAgIHB1YmxpYyBCaW5kaW5nSmFja3NvbkRlc2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKEJ5dGVjb2RlLkJpbmRpbmcuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBCeXRlY29kZS5CaW5kaW5nIGRlc2VyaWFsaXplKGZpbmFsIEpzb25QYXJzZXIganNvblBhcnNlciwgZmluYWwgRGVzZXJpYWxpemF0aW9uQ29udGV4dCBkZXNlcmlhbGl6YXRpb25Db250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIFN0cmluZyBrID0gbnVsbDsKLSAgICAgICAgICAgIE9iamVjdCB2ID0gbnVsbDsKLQotICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9PQkpFQ1QpIHsKLSAgICAgICAgICAgICAgICBpZiAoanNvblBhcnNlci5nZXRDdXJyZW50TmFtZSgpLmVxdWFscyhHcmFwaFNPTlRva2Vucy5LRVkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGsgPSBqc29uUGFyc2VyLmdldFRleHQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoR3JhcGhTT05Ub2tlbnMuVkFMVUUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpzb25QYXJzZXIubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBPYmplY3QuY2xhc3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZWNvZGUuQmluZGluZzw+KGssIHYpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ2FjaGFibGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHN0YXRpYyBjbGFzcyBUcmF2ZXJzZXJKYWNrc29uRGVzZXJpYWxpemVyIGV4dGVuZHMgU3RkRGVzZXJpYWxpemVyPFRyYXZlcnNlcj4gewogCiAgICAgICAgIHB1YmxpYyBUcmF2ZXJzZXJKYWNrc29uRGVzZXJpYWxpemVyKCkgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVHJhdmVyc2FsU2VyaWFsaXplcnNWNC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVHJhdmVyc2FsU2VyaWFsaXplcnNWNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTJmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UcmF2ZXJzYWxTZXJpYWxpemVyc1Y0LmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbjsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkJ1bGtTZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblBhcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmRlc2VyLnN0ZC5TdGREZXNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRTY2FsYXJTZXJpYWxpemVyOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqCisgKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKKyAqLworZmluYWwgY2xhc3MgVHJhdmVyc2FsU2VyaWFsaXplcnNWNCB7CisKKyAgICBwcml2YXRlIFRyYXZlcnNhbFNlcmlhbGl6ZXJzVjQoKSB7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBTRVJJQUxJWkVSUyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8KKworICAgIHN0YXRpYyBjbGFzcyBFbnVtSmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPEVudW0+IHsKKworICAgICAgICBwdWJsaWMgRW51bUphY2tzb25TZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoRW51bS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIEVudW0gZW51bUluc3RhbmNlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpCisgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmcoZW51bUluc3RhbmNlLm5hbWUoKSk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBCdWxrU2V0SmFja3NvblNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTY2FsYXJTZXJpYWxpemVyPEJ1bGtTZXQ+IHsKKworICAgICAgICBwdWJsaWMgQnVsa1NldEphY2tzb25TZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoQnVsa1NldC5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIEJ1bGtTZXQgYnVsa1NldCwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKQorICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRBcnJheSgpOworICAgICAgICAgICAgZm9yIChPYmplY3QgZWxlbWVudCA6IGJ1bGtTZXQpIHsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0KGVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZEFycmF5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gREVTRVJJQUxJWkVSUyAvLworICAgIC8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgZmluYWwgc3RhdGljIGNsYXNzIEVudW1KYWNrc29uRGVzZXJpYWxpemVyPEEgZXh0ZW5kcyBFbnVtPiBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxBPiB7CisKKyAgICAgICAgcHVibGljIEVudW1KYWNrc29uRGVzZXJpYWxpemVyKGZpbmFsIENsYXNzPEE+IGVudW1DbGFzcykgeworICAgICAgICAgICAgc3VwZXIoZW51bUNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgQSBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBDbGFzczxBPiBlbnVtQ2xhc3MgPSAoQ2xhc3M8QT4pIHRoaXMuX3ZhbHVlQ2xhc3M7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZW51bU5hbWUgPSBqc29uUGFyc2VyLmdldFRleHQoKTsKKyAgICAgICAgICAgIGZvciAoZmluYWwgRW51bSBhIDogZW51bUNsYXNzLmdldEVudW1Db25zdGFudHMoKSkgeworICAgICAgICAgICAgICAgIGlmIChhLm5hbWUoKS5lcXVhbHMoZW51bU5hbWUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEEpIGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlVua25vd24gZW51bSB0eXBlOiAiICsgZW51bUNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NhY2hhYmxlKCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncnlvL0dyeW9TZXJpYWxpemVyc1YxLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncnlvL0dyeW9TZXJpYWxpemVyc1YxLmphdmEKaW5kZXggOTNlYjE5Mi4uNmU3MzEyNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvU2VyaWFsaXplcnNWMS5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyeW8vR3J5b1NlcmlhbGl6ZXJzVjEuamF2YQpAQCAtMTksMTIgKzE5LDEwIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW87CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5EZWZhdWx0UmVtb3RlVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuQW5kUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuQ29ubmVjdGl2ZVA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLk9yUDsKQEAgLTEzNSw0NSArMTMzLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgQnl0ZWNvZGVTZXJpYWxpemVyIGltcGxlbWVudHMgU2VyaWFsaXplclNoaW08Qnl0ZWNvZGU+IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyA8TyBleHRlbmRzIE91dHB1dFNoaW0+IHZvaWQgd3JpdGUoZmluYWwgS3J5b1NoaW08PywgTz4ga3J5bywgZmluYWwgTyBvdXRwdXQsIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB7Ci0gICAgICAgICAgICB3cml0ZUluc3RydWN0aW9ucyhrcnlvLCBvdXRwdXQsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpKTsKLSAgICAgICAgICAgIHdyaXRlSW5zdHJ1Y3Rpb25zKGtyeW8sIG91dHB1dCwgYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgPEkgZXh0ZW5kcyBJbnB1dFNoaW0+IEJ5dGVjb2RlIHJlYWQoZmluYWwgS3J5b1NoaW08SSwgPz4ga3J5bywgZmluYWwgSSBpbnB1dCwgZmluYWwgQ2xhc3M8Qnl0ZWNvZGU+IGNsYXp6KSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgZmluYWwgaW50IHNvdXJjZUluc3RydWN0aW9uQ291bnQgPSBpbnB1dC5yZWFkSW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgc291cmNlSW5zdHJ1Y3Rpb25Db3VudDsgaXgrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBvcGVyYXRvciA9IGlucHV0LnJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBhcmdzID0gb3BlcmF0b3IuZXF1YWxzKFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhvdXRTdHJhdGVnaWVzKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBrcnlvLnJlYWRPYmplY3QoaW5wdXQsIENsYXNzW10uY2xhc3MpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGtyeW8ucmVhZE9iamVjdChpbnB1dCwgT2JqZWN0W10uY2xhc3MpOwotICAgICAgICAgICAgICAgIGJ5dGVjb2RlLmFkZFNvdXJjZShvcGVyYXRvciwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIGludCBzdGVwSW5zdHJ1Y3Rpb25Db3VudCA9IGlucHV0LnJlYWRJbnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCBzdGVwSW5zdHJ1Y3Rpb25Db3VudDsgaXgrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBvcGVyYXRvciA9IGlucHV0LnJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBhcmdzID0ga3J5by5yZWFkT2JqZWN0KGlucHV0LCBPYmplY3RbXS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcChvcGVyYXRvciwgYXJncyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBieXRlY29kZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIDxPIGV4dGVuZHMgT3V0cHV0U2hpbT4gdm9pZCB3cml0ZUluc3RydWN0aW9ucyhmaW5hbCBLcnlvU2hpbTw/LCBPPiBrcnlvLCBmaW5hbCBPIG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8Qnl0ZWNvZGUuSW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9ucykgewotICAgICAgICAgICAgb3V0cHV0LndyaXRlSW50KGluc3RydWN0aW9ucy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0IDogaW5zdHJ1Y3Rpb25zKSB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlU3RyaW5nKGluc3QuZ2V0T3BlcmF0b3IoKSk7Ci0gICAgICAgICAgICAgICAga3J5by53cml0ZU9iamVjdChvdXRwdXQsIGluc3QuZ2V0QXJndW1lbnRzKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBQU2VyaWFsaXplciBpbXBsZW1lbnRzIFNlcmlhbGl6ZXJTaGltPFA+IHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyA8TyBleHRlbmRzIE91dHB1dFNoaW0+IHZvaWQgd3JpdGUoZmluYWwgS3J5b1NoaW08PywgTz4ga3J5bywgZmluYWwgTyBvdXRwdXQsIGZpbmFsIFAgcCkgewpAQCAtMjkyLDIxICsyNTEsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBCaW5kaW5nU2VyaWFsaXplciBpbXBsZW1lbnRzIFNlcmlhbGl6ZXJTaGltPEJ5dGVjb2RlLkJpbmRpbmc+IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyA8TyBleHRlbmRzIE91dHB1dFNoaW0+IHZvaWQgd3JpdGUoZmluYWwgS3J5b1NoaW08PywgTz4ga3J5bywgZmluYWwgTyBvdXRwdXQsIGZpbmFsIEJ5dGVjb2RlLkJpbmRpbmcgYmluZGluZykgewotICAgICAgICAgICAgb3V0cHV0LndyaXRlU3RyaW5nKGJpbmRpbmcudmFyaWFibGUoKSk7Ci0gICAgICAgICAgICBrcnlvLndyaXRlQ2xhc3NBbmRPYmplY3Qob3V0cHV0LCBiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyA8SSBleHRlbmRzIElucHV0U2hpbT4gQnl0ZWNvZGUuQmluZGluZyByZWFkKGZpbmFsIEtyeW9TaGltPEksID8+IGtyeW8sIGZpbmFsIEkgaW5wdXQsIGZpbmFsIENsYXNzPEJ5dGVjb2RlLkJpbmRpbmc+IGNsYXp6KSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFyID0gaW5wdXQucmVhZFN0cmluZygpOwotICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbCA9IGtyeW8ucmVhZENsYXNzQW5kT2JqZWN0KGlucHV0KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQnl0ZWNvZGUuQmluZGluZyh2YXIsIHZhbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIERlZmF1bHRSZW1vdGVUcmF2ZXJzZXJTZXJpYWxpemVyIGltcGxlbWVudHMgU2VyaWFsaXplclNoaW08RGVmYXVsdFJlbW90ZVRyYXZlcnNlcj4gewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIDxPIGV4dGVuZHMgT3V0cHV0U2hpbT4gdm9pZCB3cml0ZShmaW5hbCBLcnlvU2hpbTw/LCBPPiBrcnlvLCBmaW5hbCBPIG91dHB1dCwgZmluYWwgRGVmYXVsdFJlbW90ZVRyYXZlcnNlciByZW1vdGVUcmF2ZXJzZXIpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyeW8vR3J5b1NlcmlhbGl6ZXJzVjMuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyeW8vR3J5b1NlcmlhbGl6ZXJzVjMuamF2YQppbmRleCA1ZTdlNDEyLi41YTBiZWVjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncnlvL0dyeW9TZXJpYWxpemVyc1YzLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvU2VyaWFsaXplcnNWMy5qYXZhCkBAIC0xOSwxMiArMTksMTAgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3J5bzsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QYXRoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVGV4dDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5BbmRQOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5Db25uZWN0aXZlUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbE1ldHJpY3M7CkBAIC0yNTAsNDUgKzI0OCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIEJ5dGVjb2RlU2VyaWFsaXplciBpbXBsZW1lbnRzIFNlcmlhbGl6ZXJTaGltPEJ5dGVjb2RlPiB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgPE8gZXh0ZW5kcyBPdXRwdXRTaGltPiB2b2lkIHdyaXRlKGZpbmFsIEtyeW9TaGltPD8sIE8+IGtyeW8sIGZpbmFsIE8gb3V0cHV0LCBmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICAgICAgd3JpdGVJbnN0cnVjdGlvbnMoa3J5bywgb3V0cHV0LCBieXRlY29kZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgICAgICB3cml0ZUluc3RydWN0aW9ucyhrcnlvLCBvdXRwdXQsIGJ5dGVjb2RlLmdldFN0ZXBJbnN0cnVjdGlvbnMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIDxJIGV4dGVuZHMgSW5wdXRTaGltPiBCeXRlY29kZSByZWFkKGZpbmFsIEtyeW9TaGltPEksID8+IGtyeW8sIGZpbmFsIEkgaW5wdXQsIGZpbmFsIENsYXNzPEJ5dGVjb2RlPiBjbGF6eikgewotICAgICAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBzb3VyY2VJbnN0cnVjdGlvbkNvdW50ID0gaW5wdXQucmVhZEludCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IHNvdXJjZUluc3RydWN0aW9uQ291bnQ7IGl4KyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgb3BlcmF0b3IgPSBpbnB1dC5yZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gYXJncyA9IG9wZXJhdG9yLmVxdWFscyhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRob3V0U3RyYXRlZ2llcykgPwotICAgICAgICAgICAgICAgICAgICAgICAga3J5by5yZWFkT2JqZWN0KGlucHV0LCBDbGFzc1tdLmNsYXNzKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBrcnlvLnJlYWRPYmplY3QoaW5wdXQsIE9iamVjdFtdLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBieXRlY29kZS5hZGRTb3VyY2Uob3BlcmF0b3IsIGFyZ3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBpbnQgc3RlcEluc3RydWN0aW9uQ291bnQgPSBpbnB1dC5yZWFkSW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgc3RlcEluc3RydWN0aW9uQ291bnQ7IGl4KyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgb3BlcmF0b3IgPSBpbnB1dC5yZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gYXJncyA9IGtyeW8ucmVhZE9iamVjdChpbnB1dCwgT2JqZWN0W10uY2xhc3MpOwotICAgICAgICAgICAgICAgIGJ5dGVjb2RlLmFkZFN0ZXAob3BlcmF0b3IsIGFyZ3MpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gYnl0ZWNvZGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyA8TyBleHRlbmRzIE91dHB1dFNoaW0+IHZvaWQgd3JpdGVJbnN0cnVjdGlvbnMoZmluYWwgS3J5b1NoaW08PywgTz4ga3J5bywgZmluYWwgTyBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PEJ5dGVjb2RlLkluc3RydWN0aW9uPiBpbnN0cnVjdGlvbnMpIHsKLSAgICAgICAgICAgIG91dHB1dC53cml0ZUludChpbnN0cnVjdGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdCA6IGluc3RydWN0aW9ucykgewotICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZVN0cmluZyhpbnN0LmdldE9wZXJhdG9yKCkpOwotICAgICAgICAgICAgICAgIGtyeW8ud3JpdGVPYmplY3Qob3V0cHV0LCBpbnN0LmdldEFyZ3VtZW50cygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgUFNlcmlhbGl6ZXIgaW1wbGVtZW50cyBTZXJpYWxpemVyU2hpbTxQPiB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgPE8gZXh0ZW5kcyBPdXRwdXRTaGltPiB2b2lkIHdyaXRlKGZpbmFsIEtyeW9TaGltPD8sIE8+IGtyeW8sIGZpbmFsIE8gb3V0cHV0LCBmaW5hbCBQIHApIHsKQEAgLTQwNywyMSArMzY2LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgQmluZGluZ1NlcmlhbGl6ZXIgaW1wbGVtZW50cyBTZXJpYWxpemVyU2hpbTxCeXRlY29kZS5CaW5kaW5nPiB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgPE8gZXh0ZW5kcyBPdXRwdXRTaGltPiB2b2lkIHdyaXRlKGZpbmFsIEtyeW9TaGltPD8sIE8+IGtyeW8sIGZpbmFsIE8gb3V0cHV0LCBmaW5hbCBCeXRlY29kZS5CaW5kaW5nIGJpbmRpbmcpIHsKLSAgICAgICAgICAgIG91dHB1dC53cml0ZVN0cmluZyhiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICAgICAga3J5by53cml0ZUNsYXNzQW5kT2JqZWN0KG91dHB1dCwgYmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgPEkgZXh0ZW5kcyBJbnB1dFNoaW0+IEJ5dGVjb2RlLkJpbmRpbmcgcmVhZChmaW5hbCBLcnlvU2hpbTxJLCA/PiBrcnlvLCBmaW5hbCBJIGlucHV0LCBmaW5hbCBDbGFzczxCeXRlY29kZS5CaW5kaW5nPiBjbGF6eikgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHZhciA9IGlucHV0LnJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgIGZpbmFsIE9iamVjdCB2YWwgPSBrcnlvLnJlYWRDbGFzc0FuZE9iamVjdChpbnB1dCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGVjb2RlLkJpbmRpbmcodmFyLCB2YWwpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBEZWZhdWx0UmVtb3RlVHJhdmVyc2VyU2VyaWFsaXplciBpbXBsZW1lbnRzIFNlcmlhbGl6ZXJTaGltPERlZmF1bHRSZW1vdGVUcmF2ZXJzZXI+IHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyA8TyBleHRlbmRzIE91dHB1dFNoaW0+IHZvaWQgd3JpdGUoZmluYWwgS3J5b1NoaW08PywgTz4ga3J5bywgZmluYWwgTyBvdXRwdXQsIGZpbmFsIERlZmF1bHRSZW1vdGVUcmF2ZXJzZXIgcmVtb3RlVHJhdmVyc2VyKSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncnlvL0dyeW9WZXJzaW9uLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncnlvL0dyeW9WZXJzaW9uLmphdmEKaW5kZXggYjE5ZTcyNi4uNDdmYjMyNyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvVmVyc2lvbi5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyeW8vR3J5b1ZlcnNpb24uamF2YQpAQCAtMTgsNiArMTgsNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW87CiAKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnM0Lm1hcC5SZWZlcmVuY2VNYXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkdyYXBoRmlsdGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5NYXBSZWR1Y2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlZlcnRleFByb2dyYW1TdHJhdGVneTsKQEAgLTI1LDcgKzI2LDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudXRpbC5Db21wdXRlckdyYXBoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci51dGlsLk1hcE1lbW9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5EZWZhdWx0UmVtb3RlVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db250YWluczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkRUOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1R5cGU7CkBAIC02Miw2ICs2Miw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uTWF0Y2hBbGdvcml0aG1TdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5BZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkNvdW50U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uRWFybHlMaW1pdFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkZpbHRlclJhbmtpbmdTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JZGVudGl0eVJlbW92YWxTdHJhdGVneTsKQEAgLTcyLDI5ICs3MywyOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLk9yZGVyTGltaXRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5QYXRoUHJvY2Vzc29yU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUGF0aFJldHJhY3Rpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Db3VudFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlByb2R1Y3RpdmVCeVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlJlcGVhdFVucm9sbFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLkVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLkxhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX0xQX09fUF9TX1NFX1NMX1RyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX0xQX05MX09fUF9TX1NFX1NMX1RyYXZlcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX0xQX09fU19TRV9TTF9UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuQl9MUF9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLkJfT19TX1NFX1NMX1RyYXZlcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX0xQX09fUF9TX1NFX1NMX1RyYXZlcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX0xQX09fU19TRV9TTF9UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuQl9OTF9PX1NfU0VfU0xfVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLkJfT19TX1NFX1NMX1RyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX09fVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLkxQX09fT0JfUF9TX1NFX1NMX1RyYXZlcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5MUF9OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLkxQX09fT0JfU19TRV9TTF9UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuTFBfTkxfT19PQl9QX1NfU0VfU0xfVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLk9fT0JfU19TRV9TTF9UcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuTFBfTkxfT19PQl9TX1NFX1NMX1RyYXZlcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5MUF9PX09CX1BfU19TRV9TTF9UcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuTFBfT19PQl9TX1NFX1NMX1RyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5OTF9PX09CX1NfU0VfU0xfVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLk9fT0JfU19TRV9TTF9UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuT19UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuUHJvamVjdGVkVHJhdmVyc2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLnV0aWwuSW5kZXhlZFRyYXZlcnNlclNldDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLkxhYmVsbGVkQ291bnRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLlRyYXZlcnNlclNldDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbE1ldHJpY3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkltbXV0YWJsZU1ldHJpY3M7CkBAIC0xMjksOCArMTMwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQua3J5by5DbGFzc1Jlc29sdmVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5rcnlvLktyeW9TZXJpYWxpemFibGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmtyeW8uc2VyaWFsaXplcnMuSmF2YVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIudXRpbC5MYWJlbGxlZENvdW50ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLm1hcC5SZWZlcmVuY2VNYXA7CiBpbXBvcnQgb3JnLmphdmF0dXBsZXMuUGFpcjsKIGltcG9ydCBvcmcuamF2YXR1cGxlcy5UcmlwbGV0OwogCkBAIC0zMjksMTIgKzMyOCwxMyBAQAogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKFByb2plY3RlZFRyYXZlcnNlci5jbGFzcywgMTY4KSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoRGVmYXVsdFJlbW90ZVRyYXZlcnNlci5jbGFzcywgMTIzLCBuZXcgR3J5b1NlcmlhbGl6ZXJzVjMuRGVmYXVsdFJlbW90ZVRyYXZlcnNlclNlcmlhbGl6ZXIoKSkpOwogCi0gICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoQnl0ZWNvZGUuY2xhc3MsIDEyMiwgbmV3IEdyeW9TZXJpYWxpemVyc1YzLkJ5dGVjb2RlU2VyaWFsaXplcigpKSk7CisgICAgICAgICAgICAvLyAxMjIgd2FzIEJ5dGVjb2RlIHVudGlsIGl0IHdhcyByZW1vdmVkIGZvciA0LngKKyAgICAgICAgICAgIC8vIDEyNiB3YXMgQnl0ZWNvZGUuQmluZGluZyB1bnRpbCBpdCB3YXMgcmVtb3ZlZCA0LngKKwogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKFAuY2xhc3MsIDEyNCwgbmV3IEdyeW9TZXJpYWxpemVyc1YzLlBTZXJpYWxpemVyKCkpKTsKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihUZXh0UC5jbGFzcywgMTg2LCBuZXcgR3J5b1NlcmlhbGl6ZXJzVjMuVGV4dFBTZXJpYWxpemVyKCkpKTsKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihUZXh0LlJlZ2V4UHJlZGljYXRlLmNsYXNzLCAxOTcpKTsKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihMYW1iZGEuY2xhc3MsIDEyNSwgbmV3IEdyeW9TZXJpYWxpemVyc1YzLkxhbWJkYVNlcmlhbGl6ZXIoKSkpOwotICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKEJ5dGVjb2RlLkJpbmRpbmcuY2xhc3MsIDEyNiwgbmV3IEdyeW9TZXJpYWxpemVyc1YzLkJpbmRpbmdTZXJpYWxpemVyKCkpKTsKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihPcmRlci5jbGFzcywgMTI3KSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoU2NvcGUuY2xhc3MsIDEyOCkpOwogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LmNsYXNzLCAxMzEpKTsKQEAgLTQzMCw3ICs0MzAsNiBAQAogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKExhYmVsbGVkQ291bnRlci5jbGFzcywgMTgwKSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoU3RhY2suY2xhc3MsIDE4MSkpOwogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKFJlZmVyZW5jZU1hcC5jbGFzcywgMTgyKSk7Ci0KICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihHVmFsdWUuY2xhc3MsIDE5OSwgbmV3IEphdmFTZXJpYWxpemVyKCkpKTsKIAogICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIgc2VyaWFsaXplcnMgZm9yIGNsYXNzZXMgdGhhdCBkb24ndCBsaXZlIGhlcmUgaW4gY29yZS4gdGhpcyB3aWxsIGFsbG93IHRoZW0gdG8gYmUgdXNlZCBpZgpAQCAtNTQwLDEyICs1MzksMTMgQEAKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihQcm9qZWN0ZWRUcmF2ZXJzZXIuY2xhc3MsIDE2NCkpOwogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKERlZmF1bHRSZW1vdGVUcmF2ZXJzZXIuY2xhc3MsIDEyMywgbmV3IEdyeW9TZXJpYWxpemVyc1YxLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXJTZXJpYWxpemVyKCkpKTsKIAotICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKEJ5dGVjb2RlLmNsYXNzLCAxMjIsIG5ldyBHcnlvU2VyaWFsaXplcnNWMS5CeXRlY29kZVNlcmlhbGl6ZXIoKSkpOworICAgICAgICAgICAgLy8gMTIyIHdhcyBCeXRlY29kZSB1bnRpbCBpdCB3YXMgcmVtb3ZlZCBmb3IgNC54CisgICAgICAgICAgICAvLyAxMjYgd2FzIEJ5dGVjb2RlLkJpbmRpbmcgdW50aWwgaXQgd2FzIHJlbW92ZWQgNC54CisKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihQLmNsYXNzLCAxMjQsIG5ldyBHcnlvU2VyaWFsaXplcnNWMS5QU2VyaWFsaXplcigpKSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoVGV4dFAuY2xhc3MsIDE4NiwgbmV3IEdyeW9TZXJpYWxpemVyc1YxLlRleHRQU2VyaWFsaXplcigpKSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoVGV4dC5SZWdleFByZWRpY2F0ZS5jbGFzcywgMTk3KSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoTGFtYmRhLmNsYXNzLCAxMjUsIG5ldyBHcnlvU2VyaWFsaXplcnNWMS5MYW1iZGFTZXJpYWxpemVyKCkpKTsKLSAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihCeXRlY29kZS5CaW5kaW5nLmNsYXNzLCAxMjYsIG5ldyBHcnlvU2VyaWFsaXplcnNWMS5CaW5kaW5nU2VyaWFsaXplcigpKSk7CiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoT3JkZXIuY2xhc3MsIDEyNykpOwogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKFNjb3BlLmNsYXNzLCAxMjgpKTsKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5jbGFzcywgMTMxKSk7CkBAIC02NDUsNyArNjQ1LDYgQEAKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihMYWJlbGxlZENvdW50ZXIuY2xhc3MsIDE4MCkpOwogICAgICAgICAgICAgYWRkKEdyeW9UeXBlUmVnLm9mKFN0YWNrLmNsYXNzLCAxODEpKTsKICAgICAgICAgICAgIGFkZChHcnlvVHlwZVJlZy5vZihSZWZlcmVuY2VNYXAuY2xhc3MsIDE4MikpOwotCiAgICAgICAgICAgICBhZGQoR3J5b1R5cGVSZWcub2YoR1ZhbHVlLmNsYXNzLCAxOTksIG5ldyBKYXZhU2VyaWFsaXplcigpKSk7CiAgICAgICAgIH19OwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL3V0aWwvRWxlbWVudEhlbHBlci5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvdXRpbC9FbGVtZW50SGVscGVyLmphdmEKaW5kZXggYzE4YjQ0My4uMTkyNGU2ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvdXRpbC9FbGVtZW50SGVscGVyLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvdXRpbC9FbGVtZW50SGVscGVyLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsOwogCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVsZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CkBAIC01NDksMTIgKzU1MCwxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpZEV4aXN0cyhmaW5hbCBPYmplY3QgaWQsIGZpbmFsIE9iamVjdC4uLiBwcm92aWRlZElkcykgewogICAgICAgICBpZiAoMCA9PSBwcm92aWRlZElkcy5sZW5ndGgpIHJldHVybiB0cnVlOwogCisgICAgICAgIC8vdW5ib3ggYW55IEdWYWx1ZXMgd2hpY2ggbWF5IGJlIHByZXNlbnQgaW4gcHJvdmlkZWRJZHMKKyAgICAgICAgT2JqZWN0W10gaWRWYWx1ZXMgPSBHVmFsdWUucmVzb2x2ZVRvVmFsdWVzKEdWYWx1ZS5lbnN1cmVHVmFsdWVzKHByb3ZpZGVkSWRzKSk7CisKICAgICAgICAgLy8gaXQgaXMgT0sgdG8gZXZhbHVhdGUgZXF1YWxpdHkgb2YgaWRzIHZpYSB0b1N0cmluZygpIG5vdyBnaXZlbiB0aGF0IHRoZSB0b1N0cmluZygpIHRoZSB0ZXN0IHN1aXRlCiAgICAgICAgIC8vIGVuZm9yY2VzIHRoZSB2YWx1ZSBvZiBpZC4oKXRvU3RyaW5nKCkgdG8gYmUgYSBmaXJzdCBjbGFzcyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaWRlbnRpZmllcgotICAgICAgICBpZiAoMSA9PSBwcm92aWRlZElkcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBpZCAhPSBudWxsICYmIHByb3ZpZGVkSWRzWzBdICE9IG51bGwgJiYgaWQudG9TdHJpbmcoKS5lcXVhbHMocHJvdmlkZWRJZHNbMF0udG9TdHJpbmcoKSk7CisgICAgICAgIGlmICgxID09IGlkVmFsdWVzLmxlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIGlkICE9IG51bGwgJiYgaWRWYWx1ZXNbMF0gIT0gbnVsbCAmJiBpZC50b1N0cmluZygpLmVxdWFscyhpZFZhbHVlc1swXS50b1N0cmluZygpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IHRlbXAgOiBwcm92aWRlZElkcykgeworICAgICAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgdGVtcCA6IGlkVmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgdGVtcCAhPSBudWxsICYmIHRlbXAudG9TdHJpbmcoKS5lcXVhbHMoaWQudG9TdHJpbmcoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvdXRpbC9TdHJpbmdGYWN0b3J5LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS91dGlsL1N0cmluZ0ZhY3RvcnkuamF2YQppbmRleCAyYjgxMTgyLi43NGJhMzg0IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS91dGlsL1N0cmluZ0ZhY3RvcnkuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS91dGlsL1N0cmluZ0ZhY3RvcnkuamF2YQpAQCAtMjgsNyArMjgsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QYXRoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTaWRlRWZmZWN0czsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKQEAgLTE4NSwxMCArMTg0LDYgQEAKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbFN0cmF0ZWd5UHJveHkuZ2V0U3RyYXRlZ3lDbGFzcygpLmdldFNpbXBsZU5hbWUoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0cmFuc2xhdG9yU3RyaW5nKGZpbmFsIFRyYW5zbGF0b3IgdHJhbnNsYXRvcikgewotICAgICAgICByZXR1cm4gInRyYW5zbGF0b3IiICsgTF9CUkFDS0VUICsgdHJhbnNsYXRvci5nZXRUcmF2ZXJzYWxTb3VyY2UoKSArICI6IiArIHRyYW5zbGF0b3IuZ2V0VGFyZ2V0TGFuZ3VhZ2UoKSArIFJfQlJBQ0tFVDsKLSAgICB9Ci0KICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB2ZXJ0ZXhQcm9ncmFtU3RyaW5nKGZpbmFsIFZlcnRleFByb2dyYW0gdmVydGV4UHJvZ3JhbSwgZmluYWwgU3RyaW5nIGludGVybmFsU3RyaW5nKSB7CiAgICAgICAgIHJldHVybiB2ZXJ0ZXhQcm9ncmFtLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgTF9CUkFDS0VUICsgaW50ZXJuYWxTdHJpbmcgKyBSX0JSQUNLRVQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvdXRpbC9zdGFyL1N0YXJHcmFwaEdyYXBoU09OU2VyaWFsaXplclY0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS91dGlsL3N0YXIvU3RhckdyYXBoR3JhcGhTT05TZXJpYWxpemVyVjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ3YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvdXRpbC9zdGFyL1N0YXJHcmFwaEdyYXBoU09OU2VyaWFsaXplclY0LmphdmEKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuc3RhcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVXRpbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNvbXBhcmF0b3JzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblByb2Nlc3NpbmdFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmpzb250eXBlLlR5cGVTZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2VyaWFsaXplcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKKy8qKgorICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQorICovCitwdWJsaWMgY2xhc3MgU3RhckdyYXBoR3JhcGhTT05TZXJpYWxpemVyVjQgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPERpcmVjdGlvbmFsU3RhckdyYXBoPiB7CisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG5vcm1hbGl6ZTsKKyAgICBwdWJsaWMgU3RhckdyYXBoR3JhcGhTT05TZXJpYWxpemVyVjQoZmluYWwgYm9vbGVhbiBub3JtYWxpemUpIHsKKyAgICAgICAgc3VwZXIoRGlyZWN0aW9uYWxTdGFyR3JhcGguY2xhc3MpOworICAgICAgICB0aGlzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgRGlyZWN0aW9uYWxTdGFyR3JhcGggc3RhckdyYXBoLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvbkdlbmVyYXRpb25FeGNlcHRpb24geworICAgICAgICBzZXIoc3RhckdyYXBoLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIG51bGwpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZVdpdGhUeXBlKGZpbmFsIERpcmVjdGlvbmFsU3RhckdyYXBoIHN0YXJHcmFwaCwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBzZXIoc3RhckdyYXBoLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2VyKGZpbmFsIERpcmVjdGlvbmFsU3RhckdyYXBoIGRpcmVjdGlvbmFsU3RhckdyYXBoLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyLAorICAgICAgICAgICAgICAgICAgICAgZmluYWwgVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdGFyR3JhcGggc3RhckdyYXBoID0gZGlyZWN0aW9uYWxTdGFyR3JhcGguZ2V0U3RhckdyYXBoVG9TZXJpYWxpemUoKTsKKyAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3Qoc3RhckdyYXBoLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVdpdGhUeXBlKEdyYXBoU09OVG9rZW5zLklELCBzdGFyR3JhcGguc3RhclZlcnRleC5pZCwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChHcmFwaFNPTlRva2Vucy5MQUJFTCwgc3RhckdyYXBoLnN0YXJWZXJ0ZXgubGFiZWwpOworICAgICAgICBpZiAoZGlyZWN0aW9uYWxTdGFyR3JhcGguZ2V0RGlyZWN0aW9uKCkgIT0gbnVsbCkgd3JpdGVFZGdlcyhkaXJlY3Rpb25hbFN0YXJHcmFwaCwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplciwgRGlyZWN0aW9uLklOKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbmFsU3RhckdyYXBoLmdldERpcmVjdGlvbigpICE9IG51bGwpIHdyaXRlRWRnZXMoZGlyZWN0aW9uYWxTdGFyR3JhcGgsIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlciwgdHlwZVNlcmlhbGl6ZXIsIERpcmVjdGlvbi5PVVQpOworICAgICAgICBpZiAoc3RhckdyYXBoLnN0YXJWZXJ0ZXgudmVydGV4UHJvcGVydGllcyAhPSBudWxsICYmICFzdGFyR3JhcGguc3RhclZlcnRleC52ZXJ0ZXhQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KHN0YXJHcmFwaCwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAgZmluYWwgU2V0PFN0cmluZz4ga2V5cyA9IG5vcm1hbGl6ZSA/IG5ldyBUcmVlU2V0PD4oc3RhckdyYXBoLnN0YXJWZXJ0ZXgudmVydGV4UHJvcGVydGllcy5rZXlTZXQoKSkgOiBzdGFyR3JhcGguc3RhclZlcnRleC52ZXJ0ZXhQcm9wZXJ0aWVzLmtleVNldCgpOworICAgICAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcgayA6IGtleXMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFZlcnRleFByb3BlcnR5PiB2cCA9IHN0YXJHcmFwaC5zdGFyVmVydGV4LnZlcnRleFByb3BlcnRpZXMuZ2V0KGspOworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoayk7CisgICAgICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRBcnJheShrLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFZlcnRleFByb3BlcnR5PiB2ZXJ0ZXhQcm9wZXJ0aWVzID0gbm9ybWFsaXplID9zb3J0KHZwLCBDb21wYXJhdG9ycy5QUk9QRVJUWV9DT01QQVJBVE9SKSA6IHZwOworICAgICAgICAgICAgICAgIGZvciAoZmluYWwgVmVydGV4UHJvcGVydHkgcHJvcGVydHkgOiB2ZXJ0ZXhQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KHByb3BlcnR5LCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVdpdGhUeXBlKEdyYXBoU09OVG9rZW5zLklELCBwcm9wZXJ0eS5pZCgpLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlV2l0aFR5cGUoR3JhcGhTT05Ub2tlbnMuVkFMVUUsIHByb3BlcnR5LnZhbHVlKCksIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlciwgdHlwZVNlcmlhbGl6ZXIpOworCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPFByb3BlcnR5PiBtZXRhUHJvcGVydGllcyA9IG5vcm1hbGl6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JVdGlscy5saXN0KHByb3BlcnR5LnByb3BlcnRpZXMoKSwgQ29tcGFyYXRvcnMuUFJPUEVSVFlfQ09NUEFSQVRPUikuaXRlcmF0b3IoKSA6IHByb3BlcnR5LnByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFQcm9wZXJ0aWVzLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KG1ldGFQcm9wZXJ0aWVzLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChtZXRhUHJvcGVydGllcy5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBQcm9wZXJ0eTxPYmplY3Q+IG1ldGEgPSBtZXRhUHJvcGVydGllcy5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlV2l0aFR5cGUobWV0YS5rZXkoKSwgbWV0YS52YWx1ZSgpLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChtZXRhUHJvcGVydGllcywganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChwcm9wZXJ0eSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVFbmRBcnJheShrLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVFbmRPYmplY3Qoc3RhckdyYXBoLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgIH0KKyAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlRW5kT2JqZWN0KHN0YXJHcmFwaCwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB3cml0ZUVkZ2VzKGZpbmFsIERpcmVjdGlvbmFsU3RhckdyYXBoIGRpcmVjdGlvbmFsU3RhckdyYXBoLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBEaXJlY3Rpb24gZGlyZWN0aW9uKSAgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIG9ubHkgd3JpdGUgZWRnZXMgaWYgdGhlcmUgYXJlIHNvbWUgQU5EIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCB0aGVtIHRvIGJlIHNlcmlhbGl6ZWQgQU5EIGlmIHRoZXkgbWF0Y2gKKyAgICAgICAgLy8gdGhlIGRpcmVjdGlvbiBiZWluZyBzZXJpYWxpemVkIGJ5IHRoZSBmb3JtYXQKKyAgICAgICAgZmluYWwgU3RhckdyYXBoIHN0YXJHcmFwaCA9IGRpcmVjdGlvbmFsU3RhckdyYXBoLmdldFN0YXJHcmFwaFRvU2VyaWFsaXplKCk7CisgICAgICAgIGZpbmFsIERpcmVjdGlvbiBlZGdlRGlyZWN0aW9uVG9TZXJpYWxpemUgPSBkaXJlY3Rpb25hbFN0YXJHcmFwaC5nZXREaXJlY3Rpb24oKTsKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxFZGdlPj4gc3RhckVkZ2VzID0gZGlyZWN0aW9uLmVxdWFscyhEaXJlY3Rpb24uT1VUKSA/IHN0YXJHcmFwaC5zdGFyVmVydGV4Lm91dEVkZ2VzIDogc3RhckdyYXBoLnN0YXJWZXJ0ZXguaW5FZGdlczsKKyAgICAgICAgZmluYWwgYm9vbGVhbiB3cml0ZUVkZ2VzID0gbnVsbCAhPSBzdGFyRWRnZXMgJiYgZWRnZURpcmVjdGlvblRvU2VyaWFsaXplICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiAoZWRnZURpcmVjdGlvblRvU2VyaWFsaXplID09IGRpcmVjdGlvbiB8fCBlZGdlRGlyZWN0aW9uVG9TZXJpYWxpemUgPT0gRGlyZWN0aW9uLkJPVEgpOworICAgICAgICBpZiAod3JpdGVFZGdlcykgeworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShkaXJlY3Rpb24gPT0gRGlyZWN0aW9uLklOID8gR3JhcGhTT05Ub2tlbnMuSU5fRSA6IEdyYXBoU09OVG9rZW5zLk9VVF9FKTsKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KGRpcmVjdGlvbmFsU3RhckdyYXBoLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBrZXlzID0gbm9ybWFsaXplID8gbmV3IFRyZWVTZXQ8PihzdGFyRWRnZXMua2V5U2V0KCkpIDogc3RhckVkZ2VzLmtleVNldCgpOworICAgICAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcgayA6IGtleXMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PEVkZ2U+IGVkZ2VzID0gc3RhckVkZ2VzLmdldChrKTsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKGspOworICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0QXJyYXkoaywganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworCisgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxFZGdlPiBlZGdlc1RvV3JpdGUgPSBub3JtYWxpemUgPyBzb3J0KGVkZ2VzLCBDb21wYXJhdG9ycy5FREdFX0NPTVBBUkFUT1IpIDogZWRnZXM7CisgICAgICAgICAgICAgICAgZm9yIChmaW5hbCBFZGdlIGVkZ2UgOiBlZGdlc1RvV3JpdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QoZWRnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVXaXRoVHlwZShHcmFwaFNPTlRva2Vucy5JRCwgZWRnZS5pZCgpLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlV2l0aFR5cGUoZGlyZWN0aW9uLmVxdWFscyhEaXJlY3Rpb24uT1VUKSA/IEdyYXBoU09OVG9rZW5zLklOIDogR3JhcGhTT05Ub2tlbnMuT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5lcXVhbHMoRGlyZWN0aW9uLk9VVCkgPyBlZGdlLmluVmVydGV4KCkuaWQoKSA6IGVkZ2Uub3V0VmVydGV4KCkuaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKworICAgICAgICAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxQcm9wZXJ0eTxPYmplY3Q+PiBlZGdlUHJvcGVydGllcyA9IG5vcm1hbGl6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JVdGlscy5saXN0KGVkZ2UucHJvcGVydGllcygpLCBDb21wYXJhdG9ycy5QUk9QRVJUWV9DT01QQVJBVE9SKS5pdGVyYXRvcigpIDogZWRnZS5wcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlUHJvcGVydGllcy5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoR3JhcGhTT05Ub2tlbnMuUFJPUEVSVElFUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVTdGFydE9iamVjdChlZGdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZWRnZVByb3BlcnRpZXMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUHJvcGVydHk8T2JqZWN0PiBtZXRhID0gZWRnZVByb3BlcnRpZXMubmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVdpdGhUeXBlKG1ldGEua2V5KCksIG1ldGEudmFsdWUoKSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVFbmRPYmplY3QoZWRnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChlZGdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZEFycmF5KGssIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChkaXJlY3Rpb25hbFN0YXJHcmFwaCwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgPFM+IExpc3Q8Uz4gc29ydChmaW5hbCBMaXN0PFM+IGxpc3RUb1NvcnQsIGZpbmFsIENvbXBhcmF0b3IgY29tcGFyYXRvcikgeworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGxpc3RUb1NvcnQsIGNvbXBhcmF0b3IpOworICAgICAgICByZXR1cm4gbGlzdFRvU29ydDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9HcmVtbGluLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvR3JlbWxpbi5qYXZhCmluZGV4IDIzYzBjM2EuLmE5MzQ0NjggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9HcmVtbGluLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL0dyZW1saW4uamF2YQpAQCAtMjQsNyArMjQsNyBAQAogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgR3JlbWxpbiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIGdyZW1saW5WZXJzaW9uID0gIjMuOC4yLVNOQVBTSE9UIjsgLy8gRE8gTk9UIE1PRElGWSAtIENvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBieSBNYXZlbiBSZXBsYWNlciBQbHVnaW4KKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgZ3JlbWxpblZlcnNpb24gPSAiNC4wLjAtU05BUFNIT1QiOyAvLyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgogCiAgICAgcHJpdmF0ZSBHcmVtbGluKCkgewogICAgIH0KQEAgLTM3LDYgKzM3LDExIEBACiAgICAgICAgIHJldHVybiBncmVtbGluVmVyc2lvbjsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBjdXJyZW50IG1ham9yIHZlcnNpb24gb2YgdGlua2VycG9wLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ham9yVmVyc2lvbigpIHsgcmV0dXJuIHZlcnNpb24oKS5zcGxpdCgiXFwuIilbMF07IH0KKwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3VtZW50cykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJncmVtbGluICIgKyB2ZXJzaW9uKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9pdGVyYXRvci9JdGVyYXRvclV0aWxzLmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvaXRlcmF0b3IvSXRlcmF0b3JVdGlscy5qYXZhCmluZGV4IGExODhjNmEuLmVlM2E0MmIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9pdGVyYXRvci9JdGVyYXRvclV0aWxzLmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL2l0ZXJhdG9yL0l0ZXJhdG9yVXRpbHMuamF2YQpAQCAtNDU0LDcgKzQ1NCw3IEBACiAgICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBPYmplY3RbXSkKICAgICAgICAgICAgIGl0dHkgPSBuZXcgQXJyYXlJdGVyYXRvcjw+KChPYmplY3RbXSkgbyk7CiAgICAgICAgIGVsc2UgaWYgKG8gIT0gbnVsbCAmJiBvLmdldENsYXNzKCkuaXNBcnJheSgpKSAvLyBoYW5kbGUgZm9yIHByaW1pdGl2ZSBhcnJheQotICAgICAgICAgICAgaXR0eSA9IG5ldyBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuaXRlcmF0b3JzLkFycmF5SXRlcmF0b3Iobyk7CisgICAgICAgICAgICBpdHR5ID0gbmV3IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQuaXRlcmF0b3JzLkFycmF5SXRlcmF0b3Iobyk7CiAgICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBTdHJlYW0pCiAgICAgICAgICAgICBpdHR5ID0gKChTdHJlYW0pIG8pLml0ZXJhdG9yKCk7CiAgICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBNYXApCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL21haW4vcmVzb3VyY2VzL3RwMi10by10cDMtZ3JhcGhtbC54c2x0IGIvZ3JlbWxpbi1jb3JlL3NyYy9tYWluL3Jlc291cmNlcy90cDItdG8tdHAzLWdyYXBobWwueHNsdAppbmRleCAxZjNkZDVjLi40ZGQ3NDRmIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL21haW4vcmVzb3VyY2VzL3RwMi10by10cDMtZ3JhcGhtbC54c2x0CisrKyBiL2dyZW1saW4tY29yZS9zcmMvbWFpbi9yZXNvdXJjZXMvdHAyLXRvLXRwMy1ncmFwaG1sLnhzbHQKQEAgLTEsMTkgKzEsMjEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgPz4KIDwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAKLWh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIAotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiAKIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmVUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9HcmVtbGluTGFuZ1NjcmlwdEVuZ2luZVRlc3QuamF2YQppbmRleCBlZjkxMTU0Li5mZGMzYjBiIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9HcmVtbGluTGFuZ1NjcmlwdEVuZ2luZVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9HcmVtbGluTGFuZ1NjcmlwdEVuZ2luZVRlc3QuamF2YQpAQCAtMTgsOCArMTgsMTQgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMzsKIAoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5NYXBDb25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKQEAgLTI3LDkgKzMzLDE0IEBACiBpbXBvcnQgamF2YXguc2NyaXB0LlNjcmlwdEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5zY3JpcHQuU2ltcGxlQmluZGluZ3M7CiAKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwogCiBwdWJsaWMgY2xhc3MgR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmVUZXN0IHsKIApAQCAtNDQsNyArNTUsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEV2YWxHcmVtbGluU2NyaXB0KCkgdGhyb3dzIFNjcmlwdEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIE9iamVjdCByZXN1bHQgPSBzY3JpcHRFbmdpbmUuZXZhbCgiZy5WKCkiKTsKICAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQsIGluc3RhbmNlT2YoVHJhdmVyc2FsLkFkbWluLmNsYXNzKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhnLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwgKChUcmF2ZXJzYWwuQWRtaW4pIHJlc3VsdCkuZ2V0Qnl0ZWNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhnLlYoKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwgKChUcmF2ZXJzYWwuQWRtaW4pIHJlc3VsdCkuZ2V0R3JlbWxpbkxhbmcoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTU3LDEzICs2OCw1NSBAQAogCiAgICAgICAgIGZpbmFsIE9iamVjdCByZXN1bHQgPSBzY3JpcHRFbmdpbmUuZXZhbCgiZy5WKHgsIHksIHopIiwgYik7CiAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0LCBpbnN0YW5jZU9mKFRyYXZlcnNhbC5BZG1pbi5jbGFzcykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKDEwMCwgMTAwMCwgMTAwMDApLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLCAoKFRyYXZlcnNhbC5BZG1pbikgcmVzdWx0KS5nZXRCeXRlY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGcuVigxMDAsIDEwMDAsIDEwMDAwKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwgKChUcmF2ZXJzYWwuQWRtaW4pIHJlc3VsdCkuZ2V0R3JlbWxpbkxhbmcoKSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0U3RyYXRlZ3k8UyBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5PiBleHRlbmRzIEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k8Uz4geworICAgICAgICBwcml2YXRlIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKworICAgICAgICBwcml2YXRlIFRlc3RTdHJhdGVneShmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGFwcGx5KFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgQ29uZmlndXJhdGlvbiBnZXRDb25maWd1cmF0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIFRlc3RTdHJhdGVneSBjcmVhdGUoQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRlc3RTdHJhdGVneShjb25maWd1cmF0aW9uKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRXZhbEdyZW1saW5CeXRlY29kZSgpIHRocm93cyBTY3JpcHRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBPYmplY3QgcmVzdWx0ID0gc2NyaXB0RW5naW5lLmV2YWwoZy5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksICJnIik7Ci0gICAgICAgIGFzc2VydFRoYXQocmVzdWx0LCBpbnN0YW5jZU9mKFRyYXZlcnNhbC5BZG1pbi5jbGFzcykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksICgoVHJhdmVyc2FsLkFkbWluKSByZXN1bHQpLmdldEJ5dGVjb2RlKCkpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlY29uc3RydWN0Q3VzdG9tUmVnaXN0ZXJlZFN0cmF0ZWd5KCkgdGhyb3dzIFNjcmlwdEV4Y2VwdGlvbiB7CisgICAgICAgIFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUucmVnaXN0ZXJTdHJhdGVneShUZXN0U3RyYXRlZ3kuY2xhc3MpOworCisgICAgICAgIEdyYXBoVHJhdmVyc2FsIHRyYXZlcnNhbCA9IChHcmFwaFRyYXZlcnNhbCkgc2NyaXB0RW5naW5lLmV2YWwoImcud2l0aFN0cmF0ZWdpZXMobmV3IFRlc3RTdHJhdGVneShzdHJpbmdLZXk6XCJzdHJpbmdWYWx1ZVwiLGludEtleToxLGJvb2xlYW5LZXk6dHJ1ZSkpLlYoKSIpOworCisgICAgICAgIFRlc3RTdHJhdGVneSByZWNvbnN0cnVjdGVkU3RyYXRlZ3kgPSB0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShUZXN0U3RyYXRlZ3kuY2xhc3MpLmdldCgpOworCisgICAgICAgIGFzc2VydE5vdE51bGwocmVjb25zdHJ1Y3RlZFN0cmF0ZWd5KTsKKworICAgICAgICBNYXBDb25maWd1cmF0aW9uIGV4cGVjdGVkQ29uZmlnID0gbmV3IE1hcENvbmZpZ3VyYXRpb24obmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKKyAgICAgICAgICAgIHB1dCgic3RyaW5nS2V5IiwgInN0cmluZ1ZhbHVlIik7CisgICAgICAgICAgICBwdXQoImludEtleSIsIDEpOworICAgICAgICAgICAgcHV0KCJib29sZWFuS2V5IiwgdHJ1ZSk7CisgICAgICAgIH19KTsKKworICAgICAgICBTZXQ8U3RyaW5nPiBleHBlY3RlZEtleXMgPSBuZXcgSGFzaFNldDw+KCk7CisgICAgICAgIFNldDxTdHJpbmc+IGFjdHVhbEtleXMgPSBuZXcgSGFzaFNldDw+KCk7CisgICAgICAgIGV4cGVjdGVkQ29uZmlnLmdldEtleXMoKS5mb3JFYWNoUmVtYWluaW5nKChrZXkpIC0+IGV4cGVjdGVkS2V5cy5hZGQoa2V5KSk7CisgICAgICAgIHJlY29uc3RydWN0ZWRTdHJhdGVneS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0S2V5cygpLmZvckVhY2hSZW1haW5pbmcoKGtleSkgLT4gYWN0dWFsS2V5cy5hZGQoa2V5KSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkS2V5cywgYWN0dWFsS2V5cyk7CisKKyAgICAgICAgZXhwZWN0ZWRLZXlzLmZvckVhY2goKGtleSkgLT4geworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQ29uZmlnLmdldChPYmplY3QuY2xhc3MsIGtleSksIHJlY29uc3RydWN0ZWRTdHJhdGVneS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0KE9iamVjdC5jbGFzcywga2V5KSk7CisgICAgICAgIH0pOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0ltcG9ydEdyZW1saW5QbHVnaW5UZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9JbXBvcnRHcmVtbGluUGx1Z2luVGVzdC5qYXZhCmluZGV4IDc4ZDk1MzEuLjBhMTg2OGQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0ltcG9ydEdyZW1saW5QbHVnaW5UZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvSW1wb3J0R3JlbWxpblBsdWdpblRlc3QuamF2YQpAQCAtNjEsMTYgKzYxLDE3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEltcG9ydFdpbGRjYXJkTWV0aG9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIE1ldGhvZCB6ZXJvQXJncyA9IEdyZW1saW4uY2xhc3MuZ2V0TWV0aG9kKCJ2ZXJzaW9uIik7CisgICAgICAgIGZpbmFsIE1ldGhvZCB2ZXJzaW9uID0gR3JlbWxpbi5jbGFzcy5nZXRNZXRob2QoInZlcnNpb24iKTsKKyAgICAgICAgZmluYWwgTWV0aG9kIG1ham9yVmVyc2lvbiA9IEdyZW1saW4uY2xhc3MuZ2V0TWV0aG9kKCJtYWpvclZlcnNpb24iKTsKICAgICAgICAgZmluYWwgSW1wb3J0R3JlbWxpblBsdWdpbiBtb2R1bGUgPSBJbXBvcnRHcmVtbGluUGx1Z2luLmJ1aWxkKCkKICAgICAgICAgICAgICAgICAubWV0aG9kSW1wb3J0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEdyZW1saW4uY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpICsgIiMqIikpLmNyZWF0ZSgpOwogCiAgICAgICAgIGZpbmFsIERlZmF1bHRJbXBvcnRDdXN0b21pemVyIGN1c3RvbWl6ZXIgPSAoRGVmYXVsdEltcG9ydEN1c3RvbWl6ZXIpIG1vZHVsZS5nZXRDdXN0b21pemVycygpLmdldCgpWzBdOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbW9kdWxlLmdldEN1c3RvbWl6ZXJzKCkuZ2V0KCkubGVuZ3RoKTsKLSAgICAgICAgYXNzZXJ0VGhhdChjdXN0b21pemVyLmdldE1ldGhvZEltcG9ydHMoKSwgaGFzSXRlbXMoemVyb0FyZ3MpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChjdXN0b21pemVyLmdldE1ldGhvZEltcG9ydHMoKSwgaGFzSXRlbXModmVyc2lvbiwgbWFqb3JWZXJzaW9uKSk7CiAKICAgICAgICAgLy8gd2lsbCBhbHNvIGhhdmUgdGhlIHN0YXRpYyBtYWluKCkgbWV0aG9kCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBjdXN0b21pemVyLmdldE1ldGhvZEltcG9ydHMoKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgY3VzdG9taXplci5nZXRNZXRob2RJbXBvcnRzKCkuc2l6ZSgpKTsKICAgICB9CiAKICAgICBAVGVzdApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9KYXZhVHJhbnNsYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNhOTIzMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9KYXZhVHJhbnNsYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLXB1YmxpYyBjbGFzcyBKYXZhVHJhbnNsYXRvclRlc3QgewotICAgIHByaXZhdGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKLSAgICBwcml2YXRlIEphdmFUcmFuc2xhdG9yPEdyYXBoVHJhdmVyc2FsU291cmNlLCBUcmF2ZXJzYWwuQWRtaW48PywgPz4+IHRyYW5zbGF0b3IgPSBKYXZhVHJhbnNsYXRvci5vZihFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCkpOwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVIYXNXaXRoT2JqZWN0VGhpcmRBcmdWYWx1ZSgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiRSIpOwotICAgICAgICBieXRlY29kZS5hZGRTdGVwKCJoYXMiLCAia25vd3MiLCAid2VpZ2h0IiwgMS4wKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYW5zbGF0aW9uID0gdHJhbnNsYXRvci50cmFuc2xhdGUoYnl0ZWNvZGUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZy5FKCkuaGFzKCJrbm93cyIsICJ3ZWlnaHQiLCAxLjApLmFzQWRtaW4oKSwgdHJhbnNsYXRpb24pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlSGFzV2l0aFByZWRpY2F0ZVRoaXJkQXJnVmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgIGJ5dGVjb2RlLmFkZFN0ZXAoIkUiKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiaGFzIiwgImtub3dzIiwgIndlaWdodCIsIFAuZXEoMS4wKSk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuRSgpLmhhcygia25vd3MiLCAid2VpZ2h0IiwgUC5lcSgxLjApKS5hc0FkbWluKCksIHRyYW5zbGF0aW9uKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUhhc1dpdGhOdWxsVGhpcmRBcmdWYWx1ZSgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiRSIpOwotICAgICAgICBieXRlY29kZS5hZGRTdGVwKCJoYXMiLCAia25vd3MiLCAid2VpZ2h0IiwgbnVsbCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuRSgpLmhhcygia25vd3MiLCAid2VpZ2h0IiwgKFN0cmluZykgbnVsbCkuYXNBZG1pbigpLCB0cmFuc2xhdGlvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVIYXNXaXRoT2JqZWN0U2Vjb25kQXJnVmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgIGJ5dGVjb2RlLmFkZFN0ZXAoIkUiKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiaGFzIiwgIndlaWdodCIsIDEuMCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuRSgpLmhhcygid2VpZ2h0IiwgMS4wKS5hc0FkbWluKCksIHRyYW5zbGF0aW9uKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUhhc1dpdGhQcmVkaWNhdGVTZWNvbmRBcmdWYWx1ZSgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiRSIpOwotICAgICAgICBieXRlY29kZS5hZGRTdGVwKCJoYXMiLCAid2VpZ2h0IiwgUC5lcSgxLjApKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYW5zbGF0aW9uID0gdHJhbnNsYXRvci50cmFuc2xhdGUoYnl0ZWNvZGUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZy5FKCkuaGFzKCJ3ZWlnaHQiLCBQLmVxKDEuMCkpLmFzQWRtaW4oKSwgdHJhbnNsYXRpb24pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlSGFzV2l0aE51bGxTZWNvbmRBcmdWYWx1ZSgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiRSIpOwotICAgICAgICBieXRlY29kZS5hZGRTdGVwKCJoYXMiLCAid2VpZ2h0IiwgbnVsbCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuRSgpLmhhcygid2VpZ2h0IiwgKFN0cmluZykgbnVsbCkuYXNBZG1pbigpLCB0cmFuc2xhdGlvbik7Ci0gICAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0FyZ3VtZW50VmlzaXRvclRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9Bcmd1bWVudFZpc2l0b3JUZXN0LmphdmEKaW5kZXggMDExODA4Yi4uYWMwMDdiYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0FyZ3VtZW50VmlzaXRvclRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvQXJndW1lbnRWaXNpdG9yVGVzdC5qYXZhCkBAIC02NSw3ICs2NSw3IEBACiAgICAgICAgIHB1dCgieCIsIG51bGwpOwogICAgIH19OwogCi0gICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVycyhuYW1lID0gInswfSIpCisgICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVycyhuYW1lID0gInsxfSIpCiAgICAgcHVibGljIHN0YXRpYyBJdGVyYWJsZTxPYmplY3RbXT4gZ2VuZXJhdGVUZXN0UGFyYW1ldGVycygpIHsKICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdW117CiAgICAgICAgICAgICAgICAge0Jvb2xlYW4uY2xhc3MsICJ4IiwgbmV3IFZhcmlhYmxlUmVzb2x2ZXJFeGNlcHRpb24oIngiKSwgY3JlYXRlQW50bHIoVmFyaWFibGVSZXNvbHZlci5Ob1ZhcmlhYmxlUmVzb2x2ZXIuaW5zdGFuY2UoKSl9LApAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgICAgICAgICAgICAge09iamVjdC5jbGFzcywgIngiLCBHVmFsdWUub2YoIngiLCBub3cpLCBjcmVhdGVBbnRscihuZXcgVmFyaWFibGVSZXNvbHZlci5EZWZhdWx0VmFyaWFibGVSZXNvbHZlcihFbGVtZW50SGVscGVyLmFzTWFwKCJ4Iiwgbm93KSkpfSwKICAgICAgICAgICAgICAgICB7T2JqZWN0LmNsYXNzLCAieCIsICJ0ZXN0IiwgY3JlYXRlQW50bHIobmV3IFZhcmlhYmxlUmVzb2x2ZXIuRGlyZWN0VmFyaWFibGVSZXNvbHZlcihFbGVtZW50SGVscGVyLmFzTWFwKCJ4IiwgInRlc3QiKSkpfSwKICAgICAgICAgICAgICAgICB7T2JqZWN0LmNsYXNzLCAieCIsIG5vdywgY3JlYXRlQW50bHIobmV3IFZhcmlhYmxlUmVzb2x2ZXIuRGlyZWN0VmFyaWFibGVSZXNvbHZlcihFbGVtZW50SGVscGVyLmFzTWFwKCJ4Iiwgbm93KSkpfSwKLSAgICAgICAgICAgICAgICB7T2JqZWN0LmNsYXNzLCAiWzEsMiwzXSIsIEFycmF5cy5hc0xpc3QoMSwgMiwgMyksIGNyZWF0ZUFudGxyKG5ldyBWYXJpYWJsZVJlc29sdmVyLkRlZmF1bHRWYXJpYWJsZVJlc29sdmVyKEVsZW1lbnRIZWxwZXIuYXNNYXAoIngiLCBub3cpKSl9LAorICAgICAgICAgICAgICAgIHtPYmplY3QuY2xhc3MsICJbMSwyLDNdIiwgQXJyYXlzLmFzTGlzdCgxLCAyLCAzKSwgY3JlYXRlQW50bHIoVmFyaWFibGVSZXNvbHZlci5Ob1ZhcmlhYmxlUmVzb2x2ZXIuaW5zdGFuY2UoKSl9LAogICAgICAgICAgICAgICAgIHtPYmplY3QuY2xhc3MsICJ4IiwgR1ZhbHVlLm9mKCJ4IiwgUC5lcSgxMDApKSwgY3JlYXRlQW50bHIobmV3IFZhcmlhYmxlUmVzb2x2ZXIuRGVmYXVsdFZhcmlhYmxlUmVzb2x2ZXIoRWxlbWVudEhlbHBlci5hc01hcCgieCIsIFAuZXEoMTAwKSkpKX0sCiAgICAgICAgICAgICAgICAge09iamVjdC5jbGFzcywgIngiLCBQLmVxKDEwMCksIGNyZWF0ZUFudGxyKG5ldyBWYXJpYWJsZVJlc29sdmVyLkRpcmVjdFZhcmlhYmxlUmVzb2x2ZXIoRWxlbWVudEhlbHBlci5hc01hcCgieCIsIFAuZXEoMTAwKSkpKX0sCiAgICAgICAgIH0pOwpAQCAtMTg0LDQgKzE4NCw0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RyaW5nTnVsbGFibGUgeyB9Ci19Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0dyYXBoVHJhdmVyc2FsU291cmNlVmlzaXRvclRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9HcmFwaFRyYXZlcnNhbFNvdXJjZVZpc2l0b3JUZXN0LmphdmEKaW5kZXggNWY4MDM0Yy4uYjAzZDQwYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0dyYXBoVHJhdmVyc2FsU291cmNlVmlzaXRvclRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvR3JhcGhUcmF2ZXJzYWxTb3VyY2VWaXNpdG9yVGVzdC5qYXZhCkBAIC0yMSw3ICsyMSw2IEBACiBpbXBvcnQgb3JnLmFudGxyLnY0LnJ1bnRpbWUuQ2hhclN0cmVhbXM7CiBpbXBvcnQgb3JnLmFudGxyLnY0LnJ1bnRpbWUuQ29tbW9uVG9rZW5TdHJlYW07CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC02OSw2ICs2OCw2IEBACiAgICAgICAgIGZpbmFsIEdyZW1saW5QYXJzZXIuVHJhdmVyc2FsU291cmNlQ29udGV4dCBjdHggPSBwYXJzZXIudHJhdmVyc2FsU291cmNlKCk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHJlc3VsdCA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZVZpc2l0b3IoYW50bHJUb0xhbmd1YWdlKS52aXNpdFRyYXZlcnNhbFNvdXJjZShjdHgpOwogCi0gICAgICAgIGFzc2VydEVxdWFscyh0cmF2ZXJzYWxTb3VyY2UuZ2V0Qnl0ZWNvZGUoKSwgcmVzdWx0LmdldEJ5dGVjb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHModHJhdmVyc2FsU291cmNlLmdldEdyZW1saW5MYW5nKCksIHJlc3VsdC5nZXRHcmVtbGluTGFuZygpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvR3JlbWxpblF1ZXJ5UGFyc2VyVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL0dyZW1saW5RdWVyeVBhcnNlclRlc3QuamF2YQppbmRleCAxZWFkNmRjLi5lMjZhNjIxIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvR3JlbWxpblF1ZXJ5UGFyc2VyVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9HcmVtbGluUXVlcnlQYXJzZXJUZXN0LmphdmEKQEAgLTQ0LDggKzQ0LDggQEAKICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVSZXNvbHZlci5EaXJlY3RWYXJpYWJsZVJlc29sdmVyKEVsZW1lbnRIZWxwZXIuYXNNYXAoInoiLCA1MCkpKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWw8PywgPz4gdCA9IChHcmFwaFRyYXZlcnNhbDw/LCA/PikgR3JlbWxpblF1ZXJ5UGFyc2VyLnBhcnNlKCJnLlYoKS5oYXMoJ25hbWUnLGd0KHopKSIsIGdyZW1saW5BbnRsclRvSmF2YSk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuVigpLmhhcygibmFtZSIsIFAuZ3QoNTApKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgICAgICAgICB0LmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGcuVigpLmhhcygibmFtZSIsIFAuZ3QoNTApKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICB0LmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpKTsKICAgICB9CiAKICAgICBAVGVzdApAQCAtNTcsMTYgKzU3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieiIsIDUwKSkpOwogCiAgICAgICAgIEdyYXBoVHJhdmVyc2FsPD8sID8+IHQgPSAoR3JhcGhUcmF2ZXJzYWw8PywgPz4pIEdyZW1saW5RdWVyeVBhcnNlci5wYXJzZSgiZy5WKCkuaGFzKCduYW1lJyxndCh6KSkiLCBncmVtbGluQW50bHJUb0phdmEpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKCkuaGFzKCJuYW1lIiwgUC5ndCg1MCkpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgIHQuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKCkuaGFzKCJuYW1lIiwgUC5ndCg1MCkpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIHQuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogCiAgICAgICAgIHQgPSAoR3JhcGhUcmF2ZXJzYWw8PywgPz4pIEdyZW1saW5RdWVyeVBhcnNlci5wYXJzZSgiZy5WKHgpLmhhcygnbmFtZScsZ3QoeikpIiwgZ3JlbWxpbkFudGxyVG9KYXZhKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuVigxMDApLmhhcygibmFtZSIsIFAuZ3QoNTApKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgICAgICAgICB0LmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGcuVigxMDApLmhhcygibmFtZSIsIFAuZ3QoNTApKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICB0LmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpKTsKIAogICAgICAgICB0ID0gKEdyYXBoVHJhdmVyc2FsPD8sID8+KSBHcmVtbGluUXVlcnlQYXJzZXIucGFyc2UoImcuVih4LCB5LCAzMDApLmhhcygnbmFtZScsZ3QoeikpIiwgZ3JlbWxpbkFudGxyVG9KYXZhKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGcuVigxMDAsIDIwMCwgMzAwKS5oYXMoIm5hbWUiLCBQLmd0KDUwKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgdC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhnLlYoMTAwLCAyMDAsIDMwMCkuaGFzKCJuYW1lIiwgUC5ndCg1MCkpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIHQuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogICAgIH0KIAogICAgIEBUZXN0KGV4cGVjdGVkID0gR3JlbWxpblBhcnNlckV4Y2VwdGlvbi5jbGFzcykKQEAgLTk2LDggKzk2LDggQEAKICAgICAgICAgICAgICAgICBWYXJpYWJsZVJlc29sdmVyLk51bGxWYXJpYWJsZVJlc29sdmVyLmluc3RhbmNlKCkpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbDw/LCA/PiB0ID0gKEdyYXBoVHJhdmVyc2FsPD8sID8+KSBHcmVtbGluUXVlcnlQYXJzZXIucGFyc2UoImcuVigpLmhhcygnbmFtZScsZ3QoeikpIiwgZ3JlbWxpbkFudGxyVG9KYXZhKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKCkuaGFzKCJuYW1lIiwgUC5ndChudWxsKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgdC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhnLlYoKS5oYXMoIm5hbWUiLCBQLmd0KG51bGwpKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICB0LmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpKTsKICAgICB9CiAKICAgICBAVGVzdApAQCAtMTA3LDggKzEwNyw4IEBACiAgICAgICAgICAgICAgICAgVmFyaWFibGVSZXNvbHZlci5OdWxsVmFyaWFibGVSZXNvbHZlci5pbnN0YW5jZSgpKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWw8PywgPz4gdCA9IChHcmFwaFRyYXZlcnNhbDw/LCA/PikgR3JlbWxpblF1ZXJ5UGFyc2VyLnBhcnNlKCJnLlYoYSxiLGMpLmhhcygnbmFtZScsZ3QoeikpIiwgZ3JlbWxpbkFudGxyVG9KYXZhKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKG51bGwsIG51bGwsIG51bGwpLmhhcygibmFtZSIsIFAuZ3QobnVsbCkpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgIHQuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKG51bGwsIG51bGwsIG51bGwpLmhhcygibmFtZSIsIFAuZ3QobnVsbCkpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIHQuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogICAgIH0KIAogICAgIEBUZXN0KGV4cGVjdGVkID0gR3JlbWxpblBhcnNlckV4Y2VwdGlvbi5jbGFzcykKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxNZXRob2RWaXNpdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbE1ldGhvZFZpc2l0b3JUZXN0LmphdmEKaW5kZXggM2ExMDEyMy4uNmZkNDhkYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbE1ldGhvZFZpc2l0b3JUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbE1ldGhvZFZpc2l0b3JUZXN0LmphdmEKQEAgLTcwLDggKzcwLDggQEAKICAgICB9CiAgICAgCiAgICAgcHJpdmF0ZSB2b2lkIGNvbXBhcmUoT2JqZWN0IGV4cGVjdGVkLCBPYmplY3QgYWN0dWFsKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygoKERlZmF1bHRHcmFwaFRyYXZlcnNhbCkgZXhwZWN0ZWQpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgICgoRGVmYXVsdEdyYXBoVHJhdmVyc2FsKSBhY3R1YWwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCgoRGVmYXVsdEdyYXBoVHJhdmVyc2FsKSBleHBlY3RlZCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCksCisgICAgICAgICAgICAgICAgKChEZWZhdWx0R3JhcGhUcmF2ZXJzYWwpIGFjdHVhbCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogICAgIH0KIAogICAgIEBUZXN0CkBAIC0xNTgsNyArMTU4LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUGFyc2VUcmF2ZXJzYWxNZXRob2RfYm90aF9NdWx0aVN0cmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBjb21wYXJlKGcuVigpLmJvdGgobmV3IFN0cmluZ1tdeyJhIiwgImIifSksIGV2YWwoImcuVigpLmJvdGgoJ2EnLCAnYicpIikpOworICAgICAgICBjb21wYXJlKGcuVigpLmJvdGgoImEiLCAiYiIpLCBldmFsKCJnLlYoKS5ib3RoKCdhJywgJ2InKSIpKTsKICAgICB9CiAKICAgICBAVGVzdApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbFJvb3RWaXNpdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbFJvb3RWaXNpdG9yVGVzdC5qYXZhCmluZGV4IGM1ZTM1NzcuLmNlNDQzOTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxSb290VmlzaXRvclRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsUm9vdFZpc2l0b3JUZXN0LmphdmEKQEAgLTc4LDcgKzc4LDcgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFBhcnNlVHJhdmVyc2FsTWV0aG9kX25vbmUoKSAgeworICAgIHB1YmxpYyB2b2lkIHNob3VsZFBhcnNlVHJhdmVyc2FsTWV0aG9kX2Rpc2NhcmQoKSAgewogICAgICAgICBjb21wYXJlKGcuVigpLmRpc2NhcmQoKSwgZXZhbCgiZy5WKCkuZGlzY2FyZCgpIikpOwogICAgICAgICBjb21wYXJlKGcuVigpLnVuaW9uKF9fLmlkZW50aXR5KCkuZGlzY2FyZCgpKSwgZXZhbCgiZy5WKCkudW5pb24oX18uaWRlbnRpdHkoKS5kaXNjYXJkKCkpIikpOwogICAgIH0KQEAgLTEwNzIsMTEgKzEwNzIsNiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUGFyc2VUcmF2ZXJzYWxNZXRob2RfR1ZhbHVlKCkgIHsKLSAgICAgICAgY29tcGFyZShnLlYoKS5tYXAoX18udG8oRGlyZWN0aW9uLk9VVCwgR1ZhbHVlLm9mU3RyaW5nKCJmb28iLCAiYmFyIikpKSwgZXZhbCgiZy5WKCkubWFwKF9fLnRvKERpcmVjdGlvbi5PVVQsZm9vKSkiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRQYXJzZVRyYXZlcnNhbE1ldGhvZF9EaXJlY3Rpb24oKSAgewogICAgICAgICBjb21wYXJlKGcuVigpLm1hcChfXy50byhEaXJlY3Rpb24uT1VUKSksIGV2YWwoImcuVigpLm1hcChfXy50byhEaXJlY3Rpb24uT1VUKSkiKSk7CiAgICAgfQpAQCAtMTQ1Myw2ICsxNDQ4LDcgQEAKICAgICBwdWJsaWMgdm9pZCBzaG91bGRQYXJzZVRyYXZlcnNhbE1ldGhvZF9jb25qb2luKCkgewogICAgICAgICBjb21wYXJlKGcuVigpLm1hcChfXy5jb25qb2luKCJ0ZXN0IikpLCBldmFsKCJnLlYoKS5tYXAoX18uY29uam9pbihcInRlc3RcIikpIikpOwogICAgIH0KKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUGFyc2VUcmF2ZXJzYWxNZXRob2RfbWVyZ2UoKSB7CiAgICAgICAgIGNvbXBhcmUoZy5WKCkubWFwKF9fLm1lcmdlKCJ0ZXN0IikpLCBldmFsKCJnLlYoKS5tYXAoX18ubWVyZ2UoXCJ0ZXN0XCIpKSIpKTsKQEAgLTE1MjYsOCArMTUyMiw4IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNvbXBhcmUoT2JqZWN0IGV4cGVjdGVkLCBPYmplY3QgYWN0dWFsKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygoKERlZmF1bHRHcmFwaFRyYXZlcnNhbCkgZXhwZWN0ZWQpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgICgoRGVmYXVsdEdyYXBoVHJhdmVyc2FsKSBhY3R1YWwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCgoRGVmYXVsdEdyYXBoVHJhdmVyc2FsKSBleHBlY3RlZCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCksCisgICAgICAgICAgICAgICAgKChEZWZhdWx0R3JhcGhUcmF2ZXJzYWwpIGFjdHVhbCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgT2JqZWN0IGV2YWwoU3RyaW5nIHF1ZXJ5KSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsU291cmNlU2VsZk1ldGhvZFZpc2l0b3JUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL2dyYW1tYXIvVHJhdmVyc2FsU291cmNlU2VsZk1ldGhvZFZpc2l0b3JUZXN0LmphdmEKaW5kZXggOTZjNTBmOC4uMGIzNTZjZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS9ncmFtbWFyL1RyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2RWaXNpdG9yVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvZ3JhbW1hci9UcmF2ZXJzYWxTb3VyY2VTZWxmTWV0aG9kVmlzaXRvclRlc3QuamF2YQpAQCAtNDEsNyArNDEsNyBAQAogCiBAUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQogcHVibGljIGNsYXNzIFRyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2RWaXNpdG9yVGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhFbWJlZGRlZChFbXB0eUdyYXBoLmluc3RhbmNlKCkpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKEVtcHR5R3JhcGguaW5zdGFuY2UoKSk7CiAKICAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXIodmFsdWUgPSAwKQogICAgIHB1YmxpYyBTdHJpbmcgc2NyaXB0OwpAQCAtOTAsNiArOTAsNiBAQAogICAgICAgICBmaW5hbCBHcmVtbGluUGFyc2VyLlRyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2RDb250ZXh0IGN0eCA9IHBhcnNlci50cmF2ZXJzYWxTb3VyY2VTZWxmTWV0aG9kKCk7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZSA9IG5ldyBUcmF2ZXJzYWxTb3VyY2VTZWxmTWV0aG9kVmlzaXRvcihnLCBuZXcgR3JlbWxpbkFudGxyVG9KYXZhKCkpLnZpc2l0VHJhdmVyc2FsU291cmNlU2VsZk1ldGhvZChjdHgpOwogCi0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRCeXRlY29kZSgpLCBzb3VyY2UuZ2V0Qnl0ZWNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRHcmVtbGluTGFuZygpLCBzb3VyY2UuZ2V0R3JlbWxpbkxhbmcoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyZW1saW5UcmFuc2xhdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyZW1saW5UcmFuc2xhdG9yVGVzdC5qYXZhCmluZGV4IGMwYjEzZDYuLjUyNWEzZGQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci9HcmVtbGluVHJhbnNsYXRvclRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvR3JlbWxpblRyYW5zbGF0b3JUZXN0LmphdmEKQEAgLTQ4LDYgKzQ4LDcgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uPE9iamVjdFtdPiBkYXRhKCkgewogICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdW117CiAgICAgICAgICAgICAgICAgICAgIHsiZy5WKGwxKSIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoImwxIil9LAorICAgICAgICAgICAgICAgICAgICB7ImcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS5oYXMoJ2tleScsIHkpLmFzKCdhJykub3V0KCdrbm93cycpLmFzKCdiJykuc2VsZWN0KCdhJywgJ2InKSIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInkiKX0sCiAgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLmhhcygnbmFtZScsIHgpLmFzKCdhJykub3V0KHkpLmFzKCdiJykuc2VsZWN0KCdhJywgJ2InKSIsIEFycmF5cy5hc0xpc3QoIngiLCAieSIpfSwKICAgICAgICAgICAgICAgICAgICAgeyJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuaGFzKCdrZXknLCB5KS5hcygnYScpLm91dCgna25vd3MnKS5hcygnYicpLnNlbGVjdCgnYScsICdiJykiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ5Iil9LAogICAgICAgICAgICAgICAgICAgICB7ImcuVih4KS5tYXAob3V0KHkpLmNvdW50KCkpIiwgQXJyYXlzLmFzTGlzdCgieCIsICJ5Iil9LApAQCAtMTU3LDggKzE1OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KHN0cmluZzApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5JbmplY3Q8b2JqZWN0PihHdWlkLlBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuSW5qZWN0KHV1aWQuTXVzdFBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KHV1aWQucGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QodXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkifSwKICAgICAgICAgICAgICAgICAgICAgeyJnLmluamVjdChVVUlEKCkpIiwKQEAgLTE2Niw4ICsxNjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChzdHJpbmcwKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuSW5qZWN0PG9iamVjdD4oR3VpZC5OZXdHdWlkKCkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5JbmplY3QodXVpZC5OZXcoKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoVVVJRC5yYW5kb21VVUlEKCkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoVVVJRC5yYW5kb21VVUlEKCkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QodXVpZC52NCgpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KHV1aWQudXVpZDQoKSkifSwKICAgICAgICAgICAgICAgICAgICAgeyJnLndpdGgoXCJ4XG5cXFwieXpcIikiLApAQCAtMzI4LDcgKzMyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChzdHJpbmcwLCBiaWdkZWNpbWFsMCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLldpdGgoXCJ4XCIsIChkZWNpbWFsKSAxLjApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiMS4wXCIpKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aCgneCcsIDEuMGcpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKCd4JywgMS4wKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChcInhcIiwgbmV3IEJpZ0RlY2ltYWwoXCIxLjBcIikpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXyhcInhcIiwgMS4wKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aF8oJ3gnLCBiaWdkZWNpbWFsKDEuMCkpIn0sCkBAIC0zMzcsNyArMzM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKHN0cmluZzAsIGJpZ2RlY2ltYWwwKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuV2l0aChcInhcIiwgKGRlY2ltYWwpIC0xLjApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiLTEuMFwiKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCAtMS4wZykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCAtMS4wKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChcInhcIiwgbmV3IEJpZ0RlY2ltYWwoXCItMS4wXCIpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aF8oXCJ4XCIsIC0xLjApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXygneCcsIGJpZ2RlY2ltYWwoLTEuMCkpIn0sCkBAIC0zNDYsNyArMzQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKHN0cmluZzAsIGJpZ2RlY2ltYWwwKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuV2l0aChcInhcIiwgKGRlY2ltYWwpIC0xLjApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiLTEuMFwiKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCAtMS4wZykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCAtMS4wKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChcInhcIiwgbmV3IEJpZ0RlY2ltYWwoXCItMS4wXCIpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aF8oXCJ4XCIsIC0xLjApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXygneCcsIGJpZ2RlY2ltYWwoLTEuMCkpIn0sCkBAIC0zNTUsNyArMzU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKHN0cmluZzAsIGJ5dGUwKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuV2l0aChcInhcIiwgKHNieXRlKSAxKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuV2l0aChcInhcIiwgaW50OCgxKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCBuZXcgQnl0ZSgxKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCAoYnl0ZSkxKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChcInhcIiwgbmV3IEJ5dGUoMSkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXyhcInhcIiwgMSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhfKCd4JywgMSkifSwKQEAgLTM2NCw3ICszNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoc3RyaW5nMCwgYnl0ZTApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCAoc2J5dGUpIDEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBpbnQ4KDEpKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aCgneCcsIG5ldyBCeXRlKDEpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aCgneCcsIChieXRlKTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKFwieFwiLCBuZXcgQnl0ZSgxKSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhfKFwieFwiLCAxKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aF8oJ3gnLCAxKSJ9LApAQCAtMzczLDcgKzM3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChzdHJpbmcwLCBieXRlMCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLldpdGgoXCJ4XCIsIChzYnl0ZSkgLTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBpbnQ4KC0xKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCBuZXcgQnl0ZSgtMSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKCd4JywgKGJ5dGUpLTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKFwieFwiLCBuZXcgQnl0ZSgtMSkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXyhcInhcIiwgLTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXygneCcsIC0xKSJ9LApAQCAtMzgyLDcgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChzdHJpbmcwLCBzaG9ydDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCAoc2hvcnQpIDEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBpbnQxNigxKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCBuZXcgU2hvcnQoMSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKCd4JywgKHNob3J0KTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKFwieFwiLCBuZXcgU2hvcnQoMSkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXyhcInhcIiwgMSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhfKCd4JywgMSkifSwKQEAgLTM5MSw3ICszOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoc3RyaW5nMCwgc2hvcnQwKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuV2l0aChcInhcIiwgKHNob3J0KSAtMSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLldpdGgoXCJ4XCIsIGludDE2KC0xKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCBuZXcgU2hvcnQoLTEpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aCgneCcsIChzaG9ydCktMSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoXCJ4XCIsIG5ldyBTaG9ydCgtMSkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXyhcInhcIiwgLTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXygneCcsIC0xKSJ9LApAQCAtNDAwLDcgKzQwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aChzdHJpbmcwLCBzaG9ydDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCAoc2hvcnQpIDEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoKFwieFwiLCBpbnQxNigxKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGgoJ3gnLCBuZXcgU2hvcnQoMSkpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKCd4JywgKHNob3J0KTEpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoKFwieFwiLCBuZXcgU2hvcnQoMSkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoXyhcInhcIiwgMSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhfKCd4JywgMSkifSwKQEAgLTY5NCwxMSArNjk1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRob3V0U3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LmNsYXNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aG91dFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkiLCAgLy8gamF2YXNjcmlwdCBuZWVkcyBUSU5LRVJQT1AtMzA1NQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5JyldKSJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KSJ9LAogICAgICAgICAgICAgICAgICAgICB7Imcud2l0aFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246IHRydWUsIGtleXM6IFtcImFnZVwiXSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlLCBrZXlzOltcImFnZVwiXSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjpib29sZWFuMCwga2V5czpsaXN0MCkpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkucHJvcGVydHkoc3RyaW5nMiwgc3RyaW5nMykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwga2V5czogbmV3IExpc3Q8b2JqZWN0PiB7IFwiYWdlXCIgfSkpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246IHRydWUsIGtleXM6IG5ldyBMaXN0PG9iamVjdD4geyBcImFnZVwiIH0pKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KGdyZW1saW5nby5SZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneUNvbmZpZ3tUaHJvd0V4Y2VwdGlvbjogdHJ1ZSwgS2V5czogW11zdHJpbmd7XCJhZ2VcIn19KSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlLCBrZXlzOltcImFnZVwiXSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5idWlsZCgpLnRocm93RXhjZXB0aW9uKHRydWUpLmtleXMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYWdlXCIpOyB9fSkuY3JlYXRlKCkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKQEAgLTcxMyw3ICs3MTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aG91dFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5jbGFzcywgUGF0aFJldHJhY3Rpb25TdHJhdGVneS5jbGFzcywgRmlsdGVyUmFua2luZ1N0cmF0ZWd5LmNsYXNzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aG91dFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSwgUGF0aFJldHJhY3Rpb25TdHJhdGVneSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5KSIsICAvLyBqYXZhc2NyaXB0IC0gbmVlZHMgVElOS0VSUE9QLTMwNTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneScpLCBHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUGF0aFJldHJhY3Rpb25TdHJhdGVneScpLCBHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uRmlsdGVyUmFua2luZ1N0cmF0ZWd5JyldKSJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LCBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5LCBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kpIn0sCiAgICAgICAgICAgICAgICAgICAgIHsiZy5pbmplY3QoMC4uNSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KG51bWJlcjAuLm51bWJlcjEpIiwKQEAgLTc4Niw2ICs3ODcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdCgxMjMpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KDEyMykuaXNfKFAudHlwZV9vZihHVHlwZS5VVUlEKSkifSwKKyAgICAgICAgICAgICAgICAgICAgeyJnLmluamVjdChudWxsLCBudWxsKS5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KG9iamVjdDAsIG9iamVjdDApLmluamVjdChvYmplY3QwLCBvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuSW5qZWN0PG9iamVjdD4obnVsbCwgbnVsbCkuSW5qZWN0KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5JbmplY3QobmlsLCBuaWwpLkluamVjdChuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChudWxsLCAoT2JqZWN0KSBudWxsKS5pbmplY3QobnVsbCwgKE9iamVjdCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChudWxsLCBudWxsKS5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChudWxsLCBudWxsKS5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChOb25lLCBOb25lKS5pbmplY3QoTm9uZSwgTm9uZSkifSwKICAgICAgICAgICAgICAgICAgICAgeyJnLlYoKS5oYXNMYWJlbChudWxsKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkiLApAQCAtNzk0LDcgKzgwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc19sYWJlbChOb25lKSIsfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzX2xhYmVsKE5vbmUpIn0sCiAgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkuaGFzTGFiZWwobnVsbCwgbnVsbCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKHN0cmluZzAsIHN0cmluZzApIiwKQEAgLTEyNzIsNiArMTI4MiwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzX2xhYmVsKHgsIHkpIn0sCisgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkuaGFzTGFiZWwoeCwgeSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuSGFzTGFiZWwoKHN0cmluZykgeCwgKHN0cmluZykgeSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5IYXNMYWJlbCh4LCB5KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc19sYWJlbCh4LCB5KSJ9LAogICAgICAgICAgICAgICAgICAgICB7ImcubWVyZ2VWKFtuYW1lOlwiYWxpY2VcIiwgVC5sYWJlbDpcInBlcnNvblwiXSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbYWdlOkNhcmRpbmFsaXR5LnNpbmdsZSg4MSldKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCkBAIC0xMzI2LDYgKzEzNDUsODcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbH0sCisgICAgICAgICAgICAgICAgICAgIHsiZy50eCgpLmJlZ2luKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5UeCgpLkJlZ2luKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlR4KCkuQmVnaW4oKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbH0sCisgICAgICAgICAgICAgICAgICAgIHsiZy50eCgpLnJvbGxiYWNrKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5UeCgpLlJvbGxiYWNrKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlR4KCkuUm9sbGJhY2soKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbH0sCisgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkubmV4dCgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLk5leHQoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLk5leHQoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbH0sCisgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkubmV4dCgyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkubmV4dChudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLk5leHQoMikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5OZXh0KDIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsfSwKKyAgICAgICAgICAgICAgICAgICAgeyJnLlYoKS5oYXNOZXh0KCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuSGFzTmV4dCgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuSGFzTmV4dCgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzX25leHQoKSJ9LAorICAgICAgICAgICAgICAgICAgICB7ImcuVigpLnRyeU5leHQoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5UcnlOZXh0KCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5UcnlOZXh0KCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS50cnlfbmV4dCgpIn0sCisgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkudG9TZXQoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5Ub1NldCgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuVG9TZXQoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLnRvX3NldCgpIn0sCisgICAgICAgICAgICAgICAgICAgIHsiZy5WKCkudG9CdWxrU2V0KCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuVG9CdWxrU2V0KCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5Ub0J1bGtTZXQoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLnRvX2J1bGtfc2V0KCkifSwKKyAgICAgICAgICAgICAgICAgICAgeyJnLmNhbGwoXCItLWxpc3RcIikud2l0aChcInNlcnZpY2VcIiwgX18uY29uc3RhbnQoXCJ0aW5rZXIuc2VhcmNoXCIpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuY2FsbChcIi0tbGlzdFwiKS53aXRoKFwic2VydmljZVwiLCBfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5jYWxsKHN0cmluZzApLndpdGgoc3RyaW5nMSwgX18uY29uc3RhbnQoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5DYWxsPG9iamVjdD4oKHN0cmluZykgXCItLWxpc3RcIikuV2l0aChcInNlcnZpY2VcIiwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5DYWxsKFwiLS1saXN0XCIpLldpdGgoXCJzZXJ2aWNlXCIsIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJ0aW5rZXIuc2VhcmNoXCIpKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcuY2FsbChcIi0tbGlzdFwiKS53aXRoKFwic2VydmljZVwiLCBfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGgoXCJzZXJ2aWNlXCIsIF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmNhbGwoXCItLWxpc3RcIikud2l0aF8oXCJzZXJ2aWNlXCIsIF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnLmNhbGwoJy0tbGlzdCcpLndpdGhfKCdzZXJ2aWNlJywgX18uY29uc3RhbnQoJ3Rpbmtlci5zZWFyY2gnKSkifSwKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9FbWJlZGRlZFJlbW90ZUNvbm5lY3Rpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzYTY3OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uVGVzdC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworcHVibGljIGNsYXNzIEVtYmVkZGVkUmVtb3RlQ29ubmVjdGlvblRlc3QgeworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQWxsb3dUb1VzZUxvY2FsR3JhcGhBc1JlbW90ZSgpIHsKKyAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBFbXB0eUdyYXBoLmluc3RhbmNlKCk7CisgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaC50cmF2ZXJzYWwoKTsKKyAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc2ltdWxhdGVkUmVtb3RlRyA9IHRyYXZlcnNhbCgpLndpdGgobmV3IEVtYmVkZGVkUmVtb3RlQ29ubmVjdGlvbihnKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCBzaW11bGF0ZWRSZW1vdGVHLlYoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEFsbG93VG9Vc2VMb2NhbEdyYXBoQXNSZW1vdGVXaXRoUGFyYW1ldGVyKCkgeworICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKTsKKyAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOworICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzaW11bGF0ZWRSZW1vdGVHID0gdHJhdmVyc2FsKCkud2l0aChuZXcgRW1iZWRkZWRSZW1vdGVDb25uZWN0aW9uKGcpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDExLCAobG9uZykgc2ltdWxhdGVkUmVtb3RlRy5pbmplY3QoIDExKS5pcyhQLmVxKEdWYWx1ZS5vZigxMSkpKS5uZXh0KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvQnl0ZWNvZGVUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0J5dGVjb2RlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDUwNDU1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvQnl0ZWNvZGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuTWFwQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuQ29tcHV0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlZlcnRleFByb2dyYW1TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEJ5dGVjb2RlVGVzdCB7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVQcm9wZXJIYXNoQW5kRXF1YWxpdHkoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWwxID0gZy5WKCkub3V0KCkucmVwZWF0KF9fLm91dCgpLmluKCkpLnRpbWVzKDIpLmdyb3VwQ291bnQoKS5ieShfXy5vdXRFKCkuY291bnQoKSkuc2VsZWN0KENvbHVtbi5rZXlzKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmFzQWRtaW4oKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbDIgPSBnLlYoKS5vdXQoKS5yZXBlYXQoX18ub3V0KCkuaW4oKSkudGltZXMoMikuZ3JvdXBDb3VudCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS5zZWxlY3QoQ29sdW1uLmtleXMpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuYXNBZG1pbigpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwuQWRtaW4gdHJhdmVyc2FsMyA9IGcuVigpLm91dCgpLnJlcGVhdChfXy5vdXQoKS5pbigpKS50aW1lcygyKS5ncm91cENvdW50KCkuYnkoX18ub3V0RSgpLmNvdW50KCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmFzQWRtaW4oKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHModHJhdmVyc2FsMSwgdHJhdmVyc2FsMik7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyh0cmF2ZXJzYWwxLCB0cmF2ZXJzYWwzKTsKLSAgICAgICAgYXNzZXJ0Tm90RXF1YWxzKHRyYXZlcnNhbDIsIHRyYXZlcnNhbDMpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHModHJhdmVyc2FsMS5oYXNoQ29kZSgpLCB0cmF2ZXJzYWwyLmhhc2hDb2RlKCkpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHModHJhdmVyc2FsMS5oYXNoQ29kZSgpLCB0cmF2ZXJzYWwzLmhhc2hDb2RlKCkpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHModHJhdmVyc2FsMi5oYXNoQ29kZSgpLCB0cmF2ZXJzYWwzLmhhc2hDb2RlKCkpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHModHJhdmVyc2FsMS5nZXRCeXRlY29kZSgpLCB0cmF2ZXJzYWwyLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHModHJhdmVyc2FsMS5nZXRCeXRlY29kZSgpLCB0cmF2ZXJzYWwzLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHModHJhdmVyc2FsMi5nZXRCeXRlY29kZSgpLCB0cmF2ZXJzYWwzLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHModHJhdmVyc2FsMS5nZXRCeXRlY29kZSgpLmhhc2hDb2RlKCksIHRyYXZlcnNhbDIuZ2V0Qnl0ZWNvZGUoKS5oYXNoQ29kZSgpKTsKLSAgICAgICAgYXNzZXJ0Tm90RXF1YWxzKHRyYXZlcnNhbDEuZ2V0Qnl0ZWNvZGUoKS5oYXNoQ29kZSgpLCB0cmF2ZXJzYWwzLmdldEJ5dGVjb2RlKCkuaGFzaENvZGUoKSk7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyh0cmF2ZXJzYWwyLmdldEJ5dGVjb2RlKCkuaGFzaENvZGUoKSwgdHJhdmVyc2FsMy5nZXRCeXRlY29kZSgpLmhhc2hDb2RlKCkpOwotCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDbG9uZUNvcnJlY3RseSgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBnLlYoKS5vdXQoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGVDbG9uZSA9IGJ5dGVjb2RlLmNsb25lKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhieXRlY29kZSwgYnl0ZWNvZGVDbG9uZSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhieXRlY29kZS5oYXNoQ29kZSgpLCBieXRlY29kZUNsb25lLmhhc2hDb2RlKCkpOwotICAgICAgICBieXRlY29kZUNsb25lLmFkZFN0ZXAoImluIiwgImNyZWF0ZWQiKTsgLy8gbXV0YXRlIHRoZSBjbG9uZSBhbmQgdGhlIG9yaWdpbmFsIHNob3VsZCBzdGF5IHRoZSBzYW1lCi0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZSwgYnl0ZWNvZGVDbG9uZSk7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZS5oYXNoQ29kZSgpLCBieXRlY29kZUNsb25lLmhhc2hDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgSXRlcmF0b3JVdGlscy5jb3VudChieXRlY29kZS5nZXRJbnN0cnVjdGlvbnMoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgSXRlcmF0b3JVdGlscy5jb3VudChieXRlY29kZUNsb25lLmdldEluc3RydWN0aW9ucygpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRJbmNsdWRlQmluZGluZ3NJbkVxdWFsaXR5KCkgewotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiID0gQmluZGluZ3MuaW5zdGFuY2UoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKLQotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZTEgPSBnLlYoKS5vdXQoYi5vZigiYSIsICJjcmVhdGVkIikpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOwotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZTIgPSBnLlYoKS5vdXQoYi5vZigiYSIsICJrbm93cyIpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUzID0gZy5WKCkub3V0KGIub2YoImIiLCAia25vd3MiKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlNCA9IGcuVigpLm91dChiLm9mKCJiIiwgImtub3dzIikpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOwotCi0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZTEsIGJ5dGVjb2RlMik7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZTEsIGJ5dGVjb2RlMyk7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZTIsIGJ5dGVjb2RlMyk7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZTIsIGJ5dGVjb2RlNCk7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyhieXRlY29kZTEsIGJ5dGVjb2RlNCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhieXRlY29kZTMsIGJ5dGVjb2RlNCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVjb2RlMS5nZXRCaW5kaW5ncygpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiY3JlYXRlZCIsIGJ5dGVjb2RlMS5nZXRCaW5kaW5ncygpLmdldCgiYSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEluY2x1ZGVCaW5kaW5nc0luTmVzdGVkVHJhdmVyc2FscygpIHsKLSAgICAgICAgLy8gYWRkaW5nIHRoZSBjaG9vc2UoKSBzdGVwIGFzIHBhcnQgb2YgVElOS0VSUE9QLTI0NTgKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYiA9IEJpbmRpbmdzLmluc3RhbmNlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlID0gZy5WKCkuaW4oYi5vZigiYSIsImNyZWF0ZWQiKSkuCi0gICAgICAgICAgICAgICAgY2hvb3NlKF9fLm91dCgpLmNvdW50KCkpLgotICAgICAgICAgICAgICAgIG9wdGlvbihiLm9mKCJ0d28iLCAyKSwgX18udmFsdWVzKCJuYW1lIikpLgotICAgICAgICAgICAgICAgIG9wdGlvbihiLm9mKCJ0aHJlZSIsMyksIF9fLnZhbHVlcygiYWdlIikpLgotICAgICAgICAgICAgICAgIHdoZXJlKF9fLm91dChiLm9mKCJiIiwia25vd3MiKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBoYXMoImFnZSIsYi5vZigiYyIsUC5ndCgzMikpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcChfXy52YWx1ZXMoYi5vZigiZCIsIm5hbWUiKSkpKS4KLSAgICAgICAgICAgICAgICBpbihiLm9mKCJhIiwgImNyZWF0ZWQiKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBieXRlY29kZS5nZXRCaW5kaW5ncygpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiY3JlYXRlZCIsIGJ5dGVjb2RlLmdldEJpbmRpbmdzKCkuZ2V0KCJhIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgYnl0ZWNvZGUuZ2V0QmluZGluZ3MoKS5nZXQoImIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhQLmd0KDMyKSwgYnl0ZWNvZGUuZ2V0QmluZGluZ3MoKS5nZXQoImMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsIGJ5dGVjb2RlLmdldEJpbmRpbmdzKCkuZ2V0KCJkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYnl0ZWNvZGUuZ2V0QmluZGluZ3MoKS5nZXQoInR3byIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGJ5dGVjb2RlLmdldEJpbmRpbmdzKCkuZ2V0KCJ0aHJlZSIpKTsKLQotICAgICAgICBCeXRlY29kZS5CaW5kaW5nIGJpbmRpbmcgPSAoQnl0ZWNvZGUuQmluZGluZykgYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpLmdldCgxKS5nZXRBcmd1bWVudHMoKVswXTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJhIiwgYmluZGluZy52YXJpYWJsZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJjcmVhdGVkIiwgYmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgYmluZGluZyA9IChCeXRlY29kZS5CaW5kaW5nKSBieXRlY29kZS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KDMpLmdldEFyZ3VtZW50cygpWzBdOwotICAgICAgICBhc3NlcnRFcXVhbHMoInR3byIsIGJpbmRpbmcudmFyaWFibGUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBiaW5kaW5nLnZhbHVlKCkpOwotICAgICAgICBiaW5kaW5nID0gKEJ5dGVjb2RlLkJpbmRpbmcpIGJ5dGVjb2RlLmdldFN0ZXBJbnN0cnVjdGlvbnMoKS5nZXQoNCkuZ2V0QXJndW1lbnRzKClbMF07Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhyZWUiLCBiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgYmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgYmluZGluZyA9IChCeXRlY29kZS5CaW5kaW5nKSAoKEJ5dGVjb2RlKSBieXRlY29kZS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KDUpLmdldEFyZ3VtZW50cygpWzBdKS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpWzBdOwotICAgICAgICBhc3NlcnRFcXVhbHMoImIiLCBiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgYmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgYmluZGluZyA9IChCeXRlY29kZS5CaW5kaW5nKSAoKEJ5dGVjb2RlKSBieXRlY29kZS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KDUpLmdldEFyZ3VtZW50cygpWzBdKS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KDEpLmdldEFyZ3VtZW50cygpWzFdOwotICAgICAgICBhc3NlcnRFcXVhbHMoImMiLCBiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUC5ndCgzMiksIGJpbmRpbmcudmFsdWUoKSk7Ci0gICAgICAgIGJpbmRpbmcgPSAoQnl0ZWNvZGUuQmluZGluZykgKChCeXRlY29kZSkgKChCeXRlY29kZSkgYnl0ZWNvZGUuZ2V0U3RlcEluc3RydWN0aW9ucygpLmdldCg1KS5nZXRBcmd1bWVudHMoKVswXSkuZ2V0U3RlcEluc3RydWN0aW9ucygpLmdldCgyKS5nZXRBcmd1bWVudHMoKVswXSkuZ2V0U3RlcEluc3RydWN0aW9ucygpLmdldCgwKS5nZXRBcmd1bWVudHMoKVswXTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJkIiwgYmluZGluZy52YXJpYWJsZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgYmluZGluZy52YWx1ZSgpKTsKLSAgICAgICAgYmluZGluZyA9IChCeXRlY29kZS5CaW5kaW5nKSBieXRlY29kZS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KDYpLmdldEFyZ3VtZW50cygpWzBdOwotICAgICAgICBhc3NlcnRFcXVhbHMoImEiLCBiaW5kaW5nLnZhcmlhYmxlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImNyZWF0ZWQiLCBiaW5kaW5nLnZhbHVlKCkpOwotICAgIH0KLQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0T25seVNpbmdsZUluc3RydWN0aW9uUGVyU3RyYXRlZ3lPbkJ5dGVjb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKGcuZ2V0U3RyYXRlZ2llcygpLmdldFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpLmlzUHJlc2VudCgpKTsKLSAgICAgICAgZyA9IGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5jcmVhdGUobmV3IE1hcENvbmZpZ3VyYXRpb24obmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIHB1dCgidmVydGljZXMiLCBfXy5oYXNMYWJlbCgicGVyc29uIikpOwotICAgICAgICAgICAgcHV0KCJ2ZXJ0ZXhQcm9wZXJ0aWVzIiwgX18ubGltaXQoMCkpOwotICAgICAgICAgICAgcHV0KCJlZGdlcyIsIF9fLmhhc0xhYmVsKCJrbm93cyIpKTsKLSAgICAgICAgfX0pKSk7Ci0gICAgICAgIGFzc2VydFRydWUoZy5nZXRTdHJhdGVnaWVzKCkuZ2V0U3RyYXRlZ3koU3ViZ3JhcGhTdHJhdGVneS5jbGFzcykuaXNQcmVzZW50KCkpOwotICAgICAgICBCeXRlY29kZSBieXRlY29kZSA9IGcuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgwKS5nZXRBcmd1bWVudHMoKS5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU3ViZ3JhcGhTdHJhdGVneS5jbGFzcywgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpWzBdLmdldENsYXNzKCkpOwotCi0gICAgICAgIC8vIFRlc3QgYXBwbHlpbmcgYW5vdGhlciB3aXRoU3RyYXRlZ2llcyB3aXRoIHNhbWUgc3RyYXRlZ3kgZG9lcyBub3QgYWRkIGEgbmV3IGVudHJ5LgotICAgICAgICBnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNyZWF0ZShuZXcgTWFwQ29uZmlndXJhdGlvbihuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KCJ2ZXJ0aWNlcyIsIF9fLmhhc0xhYmVsKCJwZXJzb24iKSk7Ci0gICAgICAgICAgICBwdXQoInZlcnRleFByb3BlcnRpZXMiLCBfXy5saW1pdCgwKSk7Ci0gICAgICAgICAgICBwdXQoImVkZ2VzIiwgX18uaGFzTGFiZWwoImtub3dzIikpOwotICAgICAgICB9fSkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgwKS5nZXRBcmd1bWVudHMoKS5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU3ViZ3JhcGhTdHJhdGVneS5jbGFzcywgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpWzBdLmdldENsYXNzKCkpOwotCi0gICAgICAgIGcgPSBnLndpdGhvdXRTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpOwotICAgICAgICBhc3NlcnRGYWxzZShnLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShTdWJncmFwaFN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKSk7Ci0gICAgICAgIGJ5dGVjb2RlID0gZy5nZXRCeXRlY29kZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAgICAgLy8gMSB3aXRoU3RyYXRlZ2llcyBpbnN0cnVjdGlvbgotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpLmxlbmd0aCk7Ci0gICAgICAgIC8vIDEgd2l0aG91dFN0cmF0ZWdpZXMgaW5zdHJ1Y3Rpb24KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgxKS5nZXRBcmd1bWVudHMoKS5sZW5ndGgpOwotCi0gICAgICAgIC8vIFJlc2V0IGV2ZXJ5dGhpbmcKLSAgICAgICAgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UoZy5nZXRTdHJhdGVnaWVzKCkuZ2V0U3RyYXRlZ3koUmVhZE9ubHlTdHJhdGVneS5jbGFzcykuaXNQcmVzZW50KCkpOwotICAgICAgICBnID0gZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICAud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLmhhc0xhYmVsKCJrbm93cyIpKS5jcmVhdGUoKSkKLSAgICAgICAgICAgICAgICAud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLmhhc0xhYmVsKCJrbm93cyIpKS5jcmVhdGUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoZy5nZXRTdHJhdGVnaWVzKCkuZ2V0U3RyYXRlZ3koUmVhZE9ubHlTdHJhdGVneS5jbGFzcykuaXNQcmVzZW50KCkpOwotICAgICAgICBhc3NlcnRUcnVlKGcuZ2V0U3RyYXRlZ2llcygpLmdldFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpLmlzUHJlc2VudCgpKTsKLSAgICAgICAgYnl0ZWNvZGUgPSBnLmdldEJ5dGVjb2RlKCk7Ci0gICAgICAgIC8vIFR3byBpbnN0cnVjdGlvbnMgZm9yIHR3byB1bmlxdWUgd2l0aFN0cmF0ZWdpZXMoKSBzdGVwcwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgwKS5nZXRBcmd1bWVudHMoKS5sZW5ndGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDEpLmdldEFyZ3VtZW50cygpLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLmdldFN0cmF0ZWdpZXMoKS50b0xpc3QoKS5zaXplKCkpOwotCi0gICAgICAgIGcgPSBnLndpdGhvdXRTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuY2xhc3MpLndpdGhvdXRTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuY2xhc3MpOwotICAgICAgICBhc3NlcnRGYWxzZShnLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShSZWFkT25seVN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLmdldFN0cmF0ZWdpZXMoKS50b0xpc3QoKS5zaXplKCkpOwotICAgICAgICBieXRlY29kZSA9IGcuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgLy8gMiB3aXRoU3RyYXRlZ2llcyBpbnN0cnVjdGlvbnMgYWJvdmUsIDEgd2l0aG91dFN0cmF0ZWdpZXMgaW5zdHJ1Y3Rpb24KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgICAgIC8vIDEgd2l0aG91dFN0cmF0ZWdpZXMgaW5zdHJ1Y3Rpb24sIG5vIGR1cGxpY2F0ZXMKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgyKS5nZXRBcmd1bWVudHMoKS5sZW5ndGgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29udmVydFN0cmF0ZWdpZXMoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgIEJ5dGVjb2RlIGJ5dGVjb2RlID0gZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCkpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCksIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLmdldCgwKS5nZXRBcmd1bWVudHMoKVswXSk7Ci0gICAgICAgIGJ5dGVjb2RlID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuZWRnZXMoX18uaGFzTGFiZWwoImtub3dzIikpLmNyZWF0ZSgpKS5nZXRCeXRlY29kZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLmhhc0xhYmVsKCJrbm93cyIpKS5jcmVhdGUoKS5nZXRFZGdlQ3JpdGVyaW9uKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgKChTdWJncmFwaFN0cmF0ZWd5KSBieXRlY29kZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5pdGVyYXRvcigpLm5leHQoKS5nZXRBcmd1bWVudHMoKVswXSkuZ2V0RWRnZUNyaXRlcmlvbigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbnZlcnRDb21wdXRlcigpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKLSAgICAgICAgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBnLndpdGhDb21wdXRlcihDb21wdXRlci5jb21wdXRlKCkud29ya2VycygxMCkpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuYnVpbGQoKS5jcmVhdGUoKSwgYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpWzBdKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFZlcnRleFByb2dyYW1TdHJhdGVneS5idWlsZCgpLndvcmtlcnMoMTApLmNyZWF0ZSgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRJbnQoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LldPUktFUlMpLAotICAgICAgICAgICAgICAgICgoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KSBieXRlY29kZS5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5pdGVyYXRvcigpLm5leHQoKS5nZXRBcmd1bWVudHMoKVswXSkuZ2V0Q29uZmlndXJhdGlvbigpLmdldEludChWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuV09SS0VSUykpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90SGF2ZUhhc2hDb2xsaXNpb25zV2l0aEJpbmRpbmdzKCkgewotICAgICAgICAvLyBpZGVhbGx5IHdlIHNob3VsZCBiZSB1c2luZyBndWF2YSdzIEVxdWFsc1Rlc3RlciB0byB0ZXN0IGVxdWFscy9oYXNoQ29kZSBidXQgdGhlIGVxdWFscy9oYXNoQ29kZSBjb250cmFjdCBhbGxvd3MgaGFzaCBjb2xsaXNpb25zLgotICAgICAgICAvLyBZZXQgd2Ugc2hvdWxkIGF2b2lkIGhhc2ggY29sbGlzaW9ucyBpbiBjYXNlIHRoZXNlIG9iamVjdHMgYXJlIGJlaW5nIHVzZWQgaW4gZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVseSBvbiBoYXNoQ29kZQotICAgICAgICBmaW5hbCBCeXRlY29kZS5CaW5kaW5nPFN0cmluZz4gZmlyc3QgPSBuZXcgQnl0ZWNvZGUuQmluZGluZzw+KCIzIiwgIjciKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUuQmluZGluZzxTdHJpbmc+IHNlY29uZCA9IG5ldyBCeXRlY29kZS5CaW5kaW5nPD4oIjciLCAiMyIpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHMoZmlyc3QsIHNlY29uZCk7Ci0gICAgICAgIGFzc2VydE5vdEVxdWFscyhmaXJzdC5oYXNoQ29kZSgpLCBzZWNvbmQuaGFzaENvZGUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RIYXZlSGFzaENvbGxpc2lvbnMoKSB7Ci0gICAgICAgIC8vIGlkZWFsbHkgd2Ugc2hvdWxkIGJlIHVzaW5nIGd1YXZhJ3MgRXF1YWxzVGVzdGVyIHRvIHRlc3QgZXF1YWxzL2hhc2hDb2RlIGJ1dCB0aGUgZXF1YWxzL2hhc2hDb2RlIGNvbnRyYWN0IGFsbG93cyBoYXNoIGNvbGxpc2lvbnMuCi0gICAgICAgIC8vIFlldCB3ZSBzaG91bGQgYXZvaWQgaGFzaCBjb2xsaXNpb25zIGluIGNhc2UgdGhlc2Ugb2JqZWN0cyBhcmUgYmVpbmcgdXNlZCBpbiBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZWx5IG9uIGhhc2hDb2RlCi0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGZpcnN0ID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgIGZpcnN0LmFkZFNvdXJjZSgiMyIsICI3Iik7Ci0gICAgICAgIGZpcnN0LmFkZFN0ZXAoIjciLCAiMyIpOwotICAgICAgICBmaW5hbCBCeXRlY29kZSBzZWNvbmQgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgc2Vjb25kLmFkZFNvdXJjZSgiNyIsICIzIik7Ci0gICAgICAgIHNlY29uZC5hZGRTdGVwKCIzIiwgIjciKTsKLSAgICAgICAgYXNzZXJ0Tm90RXF1YWxzKGZpcnN0LCBzZWNvbmQpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHMoZmlyc3QuaGFzaENvZGUoKSwgc2Vjb25kLmhhc2hDb2RlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlQXJyYXlzKCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBiID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgIGIuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnByb3BlcnR5LCAiayIsIG5ldyBPYmplY3RbXSB7IG5ldyBTdHJpbmdbXSB7IkEiLCAiQiIsICJDIn19KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGIuZ2V0U3RlcEluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBiLmdldFN0ZXBJbnN0cnVjdGlvbnMoKS5nZXQoMCkuZ2V0QXJndW1lbnRzKCkubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF2b2lkQXJndW1lbnRzTnBlKCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBmaXJzdCA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmlyc3QuYWRkU291cmNlKCIzIiwgbnVsbCk7Ci0gICAgICAgICAgICBmaXJzdC5hZGRTb3VyY2UoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aG91dFN0cmF0ZWdpZXMsIG51bGwpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5nZXRDYXVzZSgpLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvR3JlbWxpbkxhbmdUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0dyZW1saW5MYW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0dyZW1saW5MYW5nVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWw7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TZWVkU3RyYXRlZ3k7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlN1YmdyYXBoU3RyYXRlZ3k7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRWZXJ0ZXg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUVkZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlVmVydGV4OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5EYXRldGltZUhlbHBlcjsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuUGFyYW1ldGVyaXplZDsKKworaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOworaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5VVUlEOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZS5sb2NhbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aDsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaGFzTGFiZWw7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dDsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkNvbGxlY3Rpb25VdGlsLmFzTWFwOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKK3B1YmxpYyBjbGFzcyBHcmVtbGluTGFuZ1Rlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKKworICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcih2YWx1ZSA9IDApCisgICAgcHVibGljIFRyYXZlcnNhbCB0cmF2ZXJzYWw7CisKKyAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXIodmFsdWUgPSAxKQorICAgIHB1YmxpYyBTdHJpbmcgZXhwZWN0ZWQ7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW4gPSB0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOworICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGdyZW1saW4pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEdyYXBoVHJhdmVyc2FsU291cmNlIG5ld0coKSB7CisgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKEVtcHR5R3JhcGguaW5zdGFuY2UoKSk7CisgICAgICAgIGcuZ2V0R3JlbWxpbkxhbmcoKS5yZXNldCgpOworICAgICAgICByZXR1cm4gZzsKKyAgICB9CisKKyAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJzKG5hbWUgPSAiezB9IikKKyAgICBwdWJsaWMgc3RhdGljIEl0ZXJhYmxlPE9iamVjdFtdPiBnZW5lcmF0ZVRlc3RQYXJhbWV0ZXJzKCkgeworICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICB7Zy5WKCkuY291bnQoKSwgImcuVigpLmNvdW50KCkifSwKKyAgICAgICAgICAgICAgICB7Zy5hZGRWKCJ0ZXN0IiksICJnLmFkZFYoXCJ0ZXN0XCIpIn0sCisgICAgICAgICAgICAgICAge2cuYWRkVigidFwiJ2VzdCIpLCAiZy5hZGRWKFwidFxcXCInZXN0XCIpIn0sCisgICAgICAgICAgICAgICAge2cuaW5qZWN0KHRydWUsIChieXRlKSAxLCAoc2hvcnQpIDIsIDMsIDRMLCA1ZiwgNmQsIEJpZ0ludGVnZXIudmFsdWVPZig3TCksIEJpZ0RlY2ltYWwudmFsdWVPZig4TCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KHRydWUsMUIsMlMsMyw0TCw1LjBGLDYuMEQsN04sOE0pIn0sCisgICAgICAgICAgICAgICAge2cuaW5qZWN0KERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSwgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdCgrSW5maW5pdHksLUluZmluaXR5KSJ9LAorICAgICAgICAgICAgICAgIHtnLmluamVjdChEYXRldGltZUhlbHBlci5wYXJzZSgiMjAxOC0wMy0yMVQwODozNTo0NC43NDFaIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KGRhdGV0aW1lKFwiMjAxOC0wMy0yMVQwODozNTo0NC43NDFaXCIpKSJ9LAorICAgICAgICAgICAgICAgIHtnLmluamVjdChEYXRlLmZyb20oRGF0ZXRpbWVIZWxwZXIucGFyc2UoIjIwMTgtMDMtMjFUMDg6MzU6NDQuNzQxWiIpLnRvSW5zdGFudCgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoZGF0ZXRpbWUoXCIyMDE4LTAzLTIxVDA4OjM1OjQ0Ljc0MVpcIikpIn0sCisgICAgICAgICAgICAgICAge2cuaW5qZWN0KGFzTWFwKCJhZ2UiLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5saXN0KDMzKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KFtcImFnZVwiOkNhcmRpbmFsaXR5Lmxpc3QoMzMpXSkifSwKKyAgICAgICAgICAgICAgICB7Zy5pbmplY3QobmV3IEhhc2hNYXA8PigpKSwgImcuaW5qZWN0KFs6XSkifSwKKyAgICAgICAgICAgICAgICB7Zy5pbmplY3QoVVVJRC5mcm9tU3RyaW5nKCJiZmE5YmJlOC1jM2EzLTQwMTctYWNjMy1jZDAyZGRhNTVlM2UiKSksICJnLmluamVjdChVVUlEKFwiYmZhOWJiZTgtYzNhMy00MDE3LWFjYzMtY2QwMmRkYTU1ZTNlXCIpKSJ9LAorICAgICAgICAgICAgICAgIHtnLlYoMSkub3V0KCJrbm93cyIpLnZhbHVlcygibmFtZSIpLCAiZy5WKDEpLm91dChcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikifSwKKyAgICAgICAgICAgICAgICB7Zy5WKCkuaGFzKFQubGFiZWwsICJwZXJzb24iKSwgImcuVigpLmhhcyhULmxhYmVsLFwicGVyc29uXCIpIn0sCisgICAgICAgICAgICAgICAge2cuYWRkRSgia25vd3MiKS5mcm9tKG5ldyBEZXRhY2hlZFZlcnRleCgxLCAidGVzdDEiLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkpLnRvKG5ldyBEZXRhY2hlZFZlcnRleCg2LCAidGVzdDIiLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcuYWRkRShcImtub3dzXCIpLmZyb20oX18uVigxKSkudG8oX18uVig2KSkifSwKKyAgICAgICAgICAgICAgICB7bmV3RygpLkUobmV3IFJlZmVyZW5jZUVkZ2UoMSwgInRlc3QgbGFiZWwiLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEsICJ2MSIpLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEsICJ2MSIpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAiZy5FKF8wKSJ9LAorICAgICAgICAgICAgICAgIHtnLlYoKS5oYXNJZChQLndpdGhpbihDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkpLmNvdW50KCksICJnLlYoKS5oYXNJZChQLndpdGhpbihbXSkpLmNvdW50KCkifSwKKyAgICAgICAgICAgICAgICB7Zy5WKDEpLm91dEUoKS5oYXMoIndlaWdodCIsIFAuaW5zaWRlKDAuMCwgMC42KSksICJnLlYoMSkub3V0RSgpLmhhcyhcIndlaWdodFwiLFAuZ3QoMC4wRCkuYW5kKFAubHQoMC42RCkpKSJ9LAorICAgICAgICAgICAgICAgIHtnLndpdGhTYWNrKDEuMCwgT3BlcmF0b3Iuc3VtKS5WKDEpLmxvY2FsKF9fLm91dCgia25vd3MiKS5iYXJyaWVyKFNhY2tGdW5jdGlvbnMuQmFycmllci5ub3JtU2FjaykpLmluKCJrbm93cyIpLmJhcnJpZXIoKS5zYWNrKCksCisgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU2FjaygxLjBELE9wZXJhdG9yLnN1bSkuVigxKS5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkifSwKKyAgICAgICAgICAgICAgICB7Zy5pbmplY3QoQXJyYXlzLmFzTGlzdCgxLCAyLCAzKSkuc2tpcChsb2NhbCwgMSksICJnLmluamVjdChbMSwyLDNdKS5za2lwKFNjb3BlLmxvY2FsLDFMKSJ9LAorICAgICAgICAgICAgICAgIHtnLlYoKS5yZXBlYXQoYm90aCgpKS50aW1lcygxMCksICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygxMCkifSwKKyAgICAgICAgICAgICAgICB7Zy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0KCJuYW1lIiwgImZyaWVuZHNOYW1lcyIpLgorICAgICAgICAgICAgICAgICAgICAgICAgYnkoIm5hbWUiKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5KG91dCgia25vd3MiKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLiIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvamVjdChcIm5hbWVcIixcImZyaWVuZHNOYW1lc1wiKS4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5KFwibmFtZVwiKS4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5KF9fLm91dChcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSJ9LAorICAgICAgICAgICAgICAgIHtnLmluamVjdChuZXcgaW50W117NSwgNn0pLnVuaW9uKF9fLlYoQXJyYXlzLmFzTGlzdCgxLCAyKSksIF9fLlYoQXJyYXlzLmFzTGlzdCgzTCwgbmV3IGludFtdezR9KSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KFs1LDZdKS51bmlvbihfXy5WKFsxLDJdKSxfXy5WKFszTCxbNF1dKSkifSwKKyAgICAgICAgICAgICAgICB7Zy53aXRoKCJldmFsdWF0aW9uVGltZW91dCIsIDEwMDApLlYoKSwgImcuVigpIn0sCisgICAgICAgICAgICAgICAge2cud2l0aFNpZGVFZmZlY3QoImEiLCAxKS5WKCksICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLDEpLlYoKSJ9LAorICAgICAgICAgICAgICAgIHtnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLCAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkifSwKKyAgICAgICAgICAgICAgICB7Zy53aXRob3V0U3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LmNsYXNzKS5WKCksICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKSJ9LAorICAgICAgICAgICAgICAgIHtnLndpdGhTdHJhdGVnaWVzKFNlZWRTdHJhdGVneS5idWlsZCgpLnNlZWQoOTk5OTk5KS5jcmVhdGUoKSkuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS5jb2luKDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTk5TCkpLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5jb2luKDAuNUQpIn0sCisgICAgICAgICAgICAgICAge2cud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKGhhc0xhYmVsKCJwZXJzb24iKSkuY3JlYXRlKCkpLlYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczp0cnVlLHZlcnRpY2VzOl9fLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuVigpIix9LAorICAgICAgICAgICAgICAgIHtnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpKS5jcmVhdGUoKSkuVigpLAorICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOnRydWUsdmVydGljZXM6X18uaGFzKFwibmFtZVwiLFAud2l0aGluKFtcImpvc2hcIixcImxvcFwiLFwicmlwcGxlXCJdKSkpKS5WKCkifSwKKyAgICAgICAgICAgICAgICB7Zy5pbmplY3QoR1ZhbHVlLm9mKCJ4IiwgIngiKSkuVihHVmFsdWUub2YoImlkcyIsIG5ldyBpbnRbXXsxLCAyLCAzfSkpLCAiZy5pbmplY3QoeCkuVihpZHMpIn0sCisgICAgICAgICAgICAgICAge25ld0coKS5pbmplY3QoR1ZhbHVlLm9mKG51bGwsICJ0ZXN0MSIpLCBHVmFsdWUub2YoInh4MiIsICJ0ZXN0MiIpKSwgImcuaW5qZWN0KFwidGVzdDFcIix4eDIpIn0sCisgICAgICAgICAgICAgICAge25ld0coKS5pbmplY3QobmV3IEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KDEsIDIpKSksICJnLmluamVjdCh7MSwyfSkifSwKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQYXJhbWV0ZXJUZXN0cyB7CisKKyAgICAgICAgQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgICAgIHB1YmxpYyB2b2lkIHNob3VsZENoZWNrUGFyYW1ldGVyTmFtZURvbnROZWVkRXNjYXBpbmcoKSB7CisgICAgICAgICAgICBnLlYoR1ZhbHVlLm9mKCJcIiIsIG5ldyBpbnRbXXsxLCAyLCAzfSkpOworICAgICAgICB9CisKKyAgICAgICAgQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgICAgIHB1YmxpYyB2b2lkIHNob3VsZENoZWNrUGFyYW1ldGVyTmFtZUlzTm90TnVtYmVyKCkgeworICAgICAgICAgICAgZy5WKEdWYWx1ZS5vZigiMSIsIG5ldyBpbnRbXXsxLCAyLCAzfSkpOworICAgICAgICB9CisKKyAgICAgICAgQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCisgICAgICAgIHB1YmxpYyB2b2lkIHNob3VsZENoZWNrUGFyYW1ldGVyTmFtZUlzVmFsaWRJZGVudGlmaWVyKCkgeworICAgICAgICAgICAgZy5WKEdWYWx1ZS5vZigiMWEiLCBuZXcgaW50W117MSwgMiwgM30pKTsKKyAgICAgICAgfQorCisgICAgICAgIEBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgICAgICBwdWJsaWMgdm9pZCBzaG91bGRDaGVja1BhcmFtZXRlck5hbWVJc05vdFJlc2VydmVkKCkgeworICAgICAgICAgICAgZy5WKEdWYWx1ZS5vZigiXzEiLCBuZXcgaW50W117MSwgMiwgM30pKTsKKyAgICAgICAgfQorCisgICAgICAgIEBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQorICAgICAgICBwdWJsaWMgdm9pZCBzaG91bGROb3dBbGxvd1BhcmFtZXRlck5hbWVEdXBsaWNhdGVzKCkgeworICAgICAgICAgICAgZmluYWwgR3JlbWxpbkxhbmcgZ3JlbWxpbiA9IGcuaW5qZWN0KEdWYWx1ZS5vZigiaWRzIiwgbmV3IGludFtdezEsIDJ9KSkuVihHVmFsdWUub2YoImlkcyIsIG5ldyBpbnRbXXsyLCAzfSkpCisgICAgICAgICAgICAgICAgICAgIC5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBUZXN0CisgICAgICAgIHB1YmxpYyB2b2lkIHNob3VsZEFsbG93VG9Vc2VTYW1lUGFyYW1ldGVyVHdpY2UoKSB7CisgICAgICAgICAgICBmaW5hbCBpbnRbXSB2YWx1ZSA9IG5ldyBpbnRbXXsxLCAyLCAzfTsKKyAgICAgICAgICAgIGZpbmFsIEdWYWx1ZTxpbnRbXT4gZ1ZhbHVlID0gR1ZhbHVlLm9mKCJpZHMiLCB2YWx1ZSk7CisgICAgICAgICAgICBmaW5hbCBHcmVtbGluTGFuZyBncmVtbGluID0gZy5pbmplY3QoZ1ZhbHVlKS5WKGdWYWx1ZSkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiZy5pbmplY3QoaWRzKS5WKGlkcykiLCBncmVtbGluLmdldEdyZW1saW4oKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHModmFsdWUsIGdyZW1saW4uZ2V0UGFyYW1ldGVycygpLmdldCgiaWRzIikpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9UcmF2ZXJzYWxUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFRlc3QuamF2YQppbmRleCA2YWJkN2E4Li4zZjQ0NjVhIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL1RyYXZlcnNhbFRlc3QuamF2YQpAQCAtMjcxLDggKzI3MSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEJ5dGVjb2RlIGdldEJ5dGVjb2RlKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBCeXRlY29kZSgpOworICAgICAgICBwdWJsaWMgR3JlbWxpbkxhbmcgZ2V0R3JlbWxpbkxhbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5MYW5nKCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsU291cmNlVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0LmphdmEKaW5kZXggYjRmNTcxMS4uYzJjNTliNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0LmphdmEKQEAgLTIwLDMzICsyMCwzMiBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLk1hcENvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkNvbGxlY3Rpb25VdGlsOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLmludm9jYXRpb24uSW52b2NhdGlvbk9uTW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5zdHViYmluZy5BbnN3ZXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwogCiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvbGxlY3Rpb24uSXNJdGVyYWJsZUNvbnRhaW5pbmdJbkFueU9yZGVyLmNvbnRhaW5zSW5BbnlPcmRlcjsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQW5zd2Vycy5SRVRVUk5TX0RFRVBfU1RVQlM7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuYW55OwogaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLm1vY2s7CiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udGltZXM7CiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVyaWZ5OwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLndoZW47CiAKIC8qKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQpAQCAtMTUxLDQgKzE1MCwzMSBAQAogICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gbCA9IGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkubGltaXQoMykudG9MaXN0KCk7CiAgICAgICAgIGFzc2VydFRoYXQobCwgY29udGFpbnNJbkFueU9yZGVyKCJwZXRlciIsICJsb3AiLCAiam9zaCIpKTsKICAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbnRhaW5SZXVzZWFibGVHcmVtbGluTGFuZygpIHsKKyAgICAgICAgZmluYWwgUGF0dGVybiBwYXJhbVBhdHRlciA9IFBhdHRlcm4uY29tcGlsZSgieHhcXGQrIik7CisgICAgICAgIGFzc2VydFRoYXQoZy5nZXRHcmVtbGluTGFuZygpLmdldE9wdGlvbnNTdHJhdGVnaWVzKCkuaXNFbXB0eSgpLCBpcyh0cnVlKSk7CisgICAgICAgIGcud2l0aCgiYSIsICIxIikuVigpOworICAgICAgICBhc3NlcnRUaGF0KGcuZ2V0R3JlbWxpbkxhbmcoKS5nZXRPcHRpb25zU3RyYXRlZ2llcygpLmlzRW1wdHkoKSwgaXModHJ1ZSkpOworICAgICAgICBnLndpdGgoImIiLCAiMiIpLlYoKTsKKyAgICAgICAgYXNzZXJ0VGhhdChnLmdldEdyZW1saW5MYW5nKCkuZ2V0T3B0aW9uc1N0cmF0ZWdpZXMoKS5pc0VtcHR5KCksIGlzKHRydWUpKTsKKworICAgICAgICBhc3NlcnRUaGF0KGcuZ2V0R3JlbWxpbkxhbmcoKS5nZXRQYXJhbWV0ZXJzKCkuaXNFbXB0eSgpLCBpcyh0cnVlKSk7CisgICAgICAgIEdyZW1saW5MYW5nIGxhbmcgPSBnLlYoR1ZhbHVlLm9mKCJ4eDEiLCAxMSkpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpOworICAgICAgICBhc3NlcnRUaGF0KGcuZ2V0R3JlbWxpbkxhbmcoKS5nZXRQYXJhbWV0ZXJzKCkuaXNFbXB0eSgpLCBpcyh0cnVlKSk7CisgICAgICAgIGFzc2VydFRoYXQobGFuZy5nZXRQYXJhbWV0ZXJzKCkuc2l6ZSgpLCBpcygxKSk7CisgICAgICAgIGFzc2VydFRoYXQobGFuZy5nZXRQYXJhbWV0ZXJzKCkudmFsdWVzKCksIGNvbnRhaW5zSW5BbnlPcmRlcigxMSkpOworICAgICAgICBNYXRjaGVyIHBhcmFtTWF0Y2hlciA9IHBhcmFtUGF0dGVyLm1hdGNoZXIobGFuZy5nZXRHcmVtbGluKCkpOworICAgICAgICBwYXJhbU1hdGNoZXIuZmluZCgpOworICAgICAgICBhc3NlcnRUaGF0KGxhbmcuZ2V0UGFyYW1ldGVycygpLmtleVNldCgpLCBjb250YWluc0luQW55T3JkZXIocGFyYW1NYXRjaGVyLmdyb3VwKCkpKTsKKworICAgICAgICBsYW5nID0gZy5WKEdWYWx1ZS5vZigieHgyIiwgMjIpKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKKyAgICAgICAgYXNzZXJ0VGhhdChnLmdldEdyZW1saW5MYW5nKCkuZ2V0UGFyYW1ldGVycygpLmlzRW1wdHkoKSwgaXModHJ1ZSkpOworICAgICAgICBhc3NlcnRUaGF0KGxhbmcuZ2V0UGFyYW1ldGVycygpLnNpemUoKSwgaXMoMSkpOworICAgICAgICBhc3NlcnRUaGF0KGxhbmcuZ2V0UGFyYW1ldGVycygpLnZhbHVlcygpLCBjb250YWluc0luQW55T3JkZXIoMjIpKTsKKyAgICAgICAgcGFyYW1NYXRjaGVyID0gcGFyYW1QYXR0ZXIubWF0Y2hlcihsYW5nLmdldEdyZW1saW4oKSk7CisgICAgICAgIHBhcmFtTWF0Y2hlci5maW5kKCk7CisgICAgICAgIGFzc2VydFRoYXQobGFuZy5nZXRQYXJhbWV0ZXJzKCkua2V5U2V0KCksIGNvbnRhaW5zSW5BbnlPcmRlcihwYXJhbU1hdGNoZXIuZ3JvdXAoKSkpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL2dyYXBoL0dyYXBoVHJhdmVyc2FsVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxUZXN0LmphdmEKaW5kZXggMDQzNmFiMC4uZjdlODFhMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvZ3JhcGgvR3JhcGhUcmF2ZXJzYWxUZXN0LmphdmEKQEAgLTE4LDMzICsxOCwyOCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk1lcmdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRGlyZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZVZlcnRleDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuQ29sbGVjdGlvblV0aWw7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkNvbnN1bWVyOwogCiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYWdncmVnYXRlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIAogLyoqCkBAIC01Nyw3ICs1Miw2IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBOT19HUkFQSCA9IG5ldyBIYXNoU2V0PD4oQXJyYXlzLmFzTGlzdCgiYXNBZG1pbiIsICJieSIsICJyZWFkIiwgIndyaXRlIiwgIndpdGgiLCAib3B0aW9uIiwgIml0ZXJhdGUiLCAidG8iLCAiZnJvbSIsICJwcm9maWxlIiwgInBhZ2VSYW5rIiwgImNvbm5lY3RlZENvbXBvbmVudCIsICJwZWVyUHJlc3N1cmUiLCAic2hvcnRlc3RQYXRoIiwgInByb2dyYW0iLCAiZGlzY2FyZCIpKTsKICAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBOT19BTk9OWU1PVVMgPSBuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoInN0YXJ0IiwgIl9fIikpOwotICAgIHByaXZhdGUgc3RhdGljIFNldDxTdHJpbmc+IElHTk9SRVNfQllURUNPREUgPSBuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoImFzQWRtaW4iLCAicmVhZCIsICJ3cml0ZSIsICJpdGVyYXRlIikpOwogCiAgICAgQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCiAgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFByb3BlcnR5V2l0aE51bGxWZXJ0ZXhJZCgpIHsKQEAgLTE0NCwxMTYgKzEzOCw0NCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkR2VuZXJhdGVDb3JyZXNwb25kaW5nQnl0ZWNvZGVGcm9tR3JhcGhUcmF2ZXJzYWxNZXRob2RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIGxvbmcgc2VlZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShzZWVkKTsKLSAgICAgICAgbG9nZ2VyLmluZm8oIioqKlJBTkRPTSoqKiBHcmFwaFRyYXZlcnNhbFRlc3Quc2hvdWxkR2VuZXJhdGVDb3JyZXNwb25kaW5nQnl0ZWNvZGVGcm9tR3JhcGhUcmF2ZXJzYWxNZXRob2RzIC0gc2VlZCBpcyB7fSIsIHNlZWQpOwotCi0gICAgICAgIGZvciAoTWV0aG9kIHN0ZXBNZXRob2QgOiBHcmFwaFRyYXZlcnNhbC5jbGFzcy5nZXRNZXRob2RzKCkpIHsKLSAgICAgICAgICAgIGlmIChUcmF2ZXJzYWwuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzdGVwTWV0aG9kLmdldFJldHVyblR5cGUoKSkgJiYgIUlHTk9SRVNfQllURUNPREUuY29udGFpbnMoc3RlcE1ldGhvZC5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48PywgPz4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KCk7Ci0gICAgICAgICAgICAgICAgT2JqZWN0W10gYXJndW1lbnRzID0gbmV3IE9iamVjdFtzdGVwTWV0aG9kLmdldFBhcmFtZXRlckNvdW50KCldOwotICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBkb1Rlc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vLwotICAgICAgICAgICAgICAgIGlmIChzdGVwTWV0aG9kLmdldE5hbWUoKS5lcXVhbHMoImJ5IikpCi0gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNhbC5vcmRlcigpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0ZXBNZXRob2QuZ2V0TmFtZSgpLmVxdWFscygid2l0aCIpKQotICAgICAgICAgICAgICAgICAgICByYW5kb21Qb3NzaWJsZVN0ZXAocmFuZG9tLCB0cmF2ZXJzYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhUcmF2ZXJzYWw6OlYsIEdyYXBoVHJhdmVyc2FsOjpzaG9ydGVzdFBhdGgsIEdyYXBoVHJhdmVyc2FsOjpwYWdlUmFuaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaFRyYXZlcnNhbDo6Y29ubmVjdGVkQ29tcG9uZW50LCBHcmFwaFRyYXZlcnNhbDo6cGVlclByZXNzdXJlKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGVwTWV0aG9kLmdldE5hbWUoKS5lcXVhbHMoIm9wdGlvbiIpKQotICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuYnJhbmNoKF9fLmlkZW50aXR5KCkub3V0KHJhbmRvbVN0cmluZyhyYW5kb20pKSk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RlcE1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKCJ0byIpIHx8IHN0ZXBNZXRob2QuZ2V0TmFtZSgpLmVxdWFscygiZnJvbSIpKQotICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuYWRkRShyYW5kb21TdHJpbmcocmFuZG9tKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RlcE1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKCJyYW5nZSIpICYmICFHVmFsdWUuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShzdGVwTWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKClbMV0pKSB7IC8vIHNraXAgR1ZhbHVlIGNhc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNjb3BlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oc3RlcE1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpWzBdKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoYXJndW1lbnRzWzBdID0gU2NvcGUubG9jYWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoYXJndW1lbnRzWzFdID0gKGxvbmcpIChNYXRoLmFicyhyYW5kb20ubmV4dEludCgxMCkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZChhcmd1bWVudHNbMl0gPSAobG9uZykgKE1hdGguYWJzKHJhbmRvbS5uZXh0SW50KDEwKSArIDEwMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1swXSA9IChsb25nKSAoTWF0aC5hYnMocmFuZG9tLm5leHRJbnQoMTApKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoYXJndW1lbnRzWzFdID0gKGxvbmcpIChNYXRoLmFicyhyYW5kb20ubmV4dEludCgxMCkgKyAxMDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0ZXBNZXRob2QuZ2V0TmFtZSgpLmVxdWFscygibWF0aCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1swXSA9IHJhbmRvbS5uZXh0SW50KDEwMCkgKyAiICsgIiArIHJhbmRvbS5uZXh0SW50KDEwMCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RlcE1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKCJwcm9qZWN0IikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcHJvamVjdCBoYXMgdHdvIGFyZ3VtZW50cyBbU3RyaW5nLCBTdHJpbmdbXV0KLSAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoYXJndW1lbnRzWzBdID0gcmFuZG9tU3RyaW5nKHJhbmRvbSkpOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbMV0gPSBuZXcgU3RyaW5nW3JhbmRvbS5uZXh0SW50KDEwKSArIDFdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8ICgoU3RyaW5nW10pIGFyZ3VtZW50c1sxXSkubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICgoU3RyaW5nW10pIGFyZ3VtZW50c1sxXSlbal0gPSBhcmd1bWVudHNbMF0gKyByYW5kb21TdHJpbmcocmFuZG9tKTsgLy8gYWRkcyBhcmd1bWVudFswXSB0byBhdm9pZCBnZXR0aW5nIGl0cyBkdXBsaWNhdGUgaW4gYXJndW1lbnRbMV0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRlcyBpbiBhcmd1bWVudFsxXSBpZiBhbnkKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzWzFdID0gQXJyYXlzLnN0cmVhbSgoU3RyaW5nW10pIGFyZ3VtZW50c1sxXSkuZGlzdGluY3QoKS50b0FycmF5KFN0cmluZ1tdOjpuZXcpOwotICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZEFsbChBcnJheXMuYXNMaXN0KChTdHJpbmdbXSkgYXJndW1lbnRzWzFdKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGVwTWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENsYXNzPD8+IHR5cGUgPSBzdGVwTWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKClbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50LmNsYXNzLmlzQXNzaWduYWJsZUZyb20odHlwZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoYXJndW1lbnRzW2ldID0gTWF0aC5hYnMocmFuZG9tLm5leHRJbnQoMTAwKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZy5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1tpXSA9IChsb25nKSAoTWF0aC5hYnMocmFuZG9tLm5leHRJbnQoMTAwKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRvdWJsZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1tpXSA9IE1hdGguYWJzKHJhbmRvbS5uZXh0RG91YmxlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFN0cmluZy5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1tpXSA9IHJhbmRvbVN0cmluZyhyYW5kb20pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJvb2xlYW4uY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZChhcmd1bWVudHNbaV0gPSByYW5kb20ubmV4dEJvb2xlYW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChTdHJpbmdbXS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzW2ldID0gbmV3IFN0cmluZ1tyYW5kb20ubmV4dEludCgxMCkgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8ICgoU3RyaW5nW10pIGFyZ3VtZW50c1tpXSkubGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoKChTdHJpbmdbXSkgYXJndW1lbnRzW2ldKVtqXSA9IHJhbmRvbVN0cmluZyhyYW5kb20pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRyYXZlcnNhbC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1tpXSA9IF9fLm91dChyYW5kb21TdHJpbmcocmFuZG9tKSkuaW4ocmFuZG9tU3RyaW5nKHJhbmRvbSkpLmdyb3VwQ291bnQocmFuZG9tU3RyaW5nKHJhbmRvbSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRyYXZlcnNhbFtdLmNsYXNzLmlzQXNzaWduYWJsZUZyb20odHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNbaV0gPSBuZXcgVHJhdmVyc2FsW3JhbmRvbS5uZXh0SW50KDUpICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAoKFRyYXZlcnNhbFtdKSBhcmd1bWVudHNbaV0pLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKCgoVHJhdmVyc2FsW10pIGFyZ3VtZW50c1tpXSlbal0gPSBfXy5hcyhyYW5kb21TdHJpbmcocmFuZG9tKSkub3V0KHJhbmRvbVN0cmluZyhyYW5kb20pKS5ib3RoKHJhbmRvbVN0cmluZyhyYW5kb20pKS5oYXMocmFuZG9tU3RyaW5nKHJhbmRvbSkpLmxvY2FsKGFnZ3JlZ2F0ZShyYW5kb21TdHJpbmcocmFuZG9tKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFAuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LmFkZChhcmd1bWVudHNbaV0gPSBQLmd0ZShzdGVwTWV0aG9kLmdldE5hbWUoKS5jb250YWlucygid2hlcmUiKSA/IHJhbmRvbVN0cmluZyhyYW5kb20pIDogcmFuZG9tLm5leHRJbnQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW51bS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKGFyZ3VtZW50c1tpXSA9IHR5cGUuZ2V0RW51bUNvbnN0YW50cygpWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbih0eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1Rlc3QgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZG9UZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZXBNZXRob2QuaW52b2tlKHRyYXZlcnNhbCwgYXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludChzdGVwTWV0aG9kLmdldE5hbWUoKSArICItLS0iKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQnl0ZWNvZGUuSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSB0cmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKS5nZXRTdGVwSW5zdHJ1Y3Rpb25zKCkuZ2V0KHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpLmdldFN0ZXBJbnN0cnVjdGlvbnMoKS5zaXplKCkgLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKGluc3RydWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHN0ZXBNZXRob2QuZ2V0TmFtZSgpLCBpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGxpc3Quc2l6ZSgpLCBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKS5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhsaXN0LmdldChpKSBpbnN0YW5jZW9mIFRyYXZlcnNhbCA/ICgoVHJhdmVyc2FsKSBsaXN0LmdldChpKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkgOiBsaXN0LmdldChpKSwgaW5zdHJ1Y3Rpb24uZ2V0QXJndW1lbnRzKClbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByYW5kb21Qb3NzaWJsZVN0ZXAoZmluYWwgUmFuZG9tIHJhbmRvbSwgZmluYWwgR3JhcGhUcmF2ZXJzYWwgdCwgZmluYWwgQ29uc3VtZXI8R3JhcGhUcmF2ZXJzYWw+Li4uIHBvc3NpYmxlKSB7Ci0gICAgICAgIHBvc3NpYmxlW3JhbmRvbS5uZXh0SW50KHBvc3NpYmxlLmxlbmd0aCldLmFjY2VwdCh0KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmFuZG9tU3RyaW5nKGZpbmFsIFJhbmRvbSByYW5kb20pIHsKLSAgICAgICAgU3RyaW5nIHMgPSAiIjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByYW5kb20ubmV4dEludCgxMCkgKyAxOyBpKyspIHsKLSAgICAgICAgICAgIHMgPSAocyArIChjaGFyKSAocmFuZG9tLm5leHRJbnQoMTAwKSArIDEpKS50cmltKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgU3RyaW5nIHRlbXAgPSAiIiArIHJhbmRvbS5uZXh0Qm9vbGVhbigpOwotICAgICAgICByZXR1cm4gdGVtcC5zdWJzdHJpbmcodGVtcC5sZW5ndGgoKSAtIChyYW5kb20ubmV4dEludCgyKSArIDEpKSArIHMucmVwbGFjZSgiXCIiLCAieCIpLnJlcGxhY2UoIiwiLCAieSIpLnJlcGxhY2UoIiciLCAieiIpOwotICAgIH0KLQogICAgIHB1YmxpYyB2b2lkIGhhc0lkU2hvdWxkVW5yb2xsTGlzdE9mSWRzKCkgewogICAgICAgICBhc3NlcnRFcXVhbHMoZy5WKCkuaGFzSWQoMSwyLDMsNCw1LDYsNyw4KSwKICAgICAgICAgICAgICAgICBnLlYoKS5oYXNJZChuZXcgSW50ZWdlcltdezEsIDIsIDN9LCBuZXcgSW50ZWdlcltdezQsIDV9LCBBcnJheXMuYXNMaXN0KDYsIDcpLCA4KSk7CiAgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBoYXNJZFNob3VsZFVucm9sbEdWYWx1ZUxpc3RPZklkcygpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgIGcuVigpLmhhc0lkKAorICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlLm9mSW50ZWdlcihudWxsLCAxKSwgR1ZhbHVlLm9mSW50ZWdlcihudWxsLCAyKSwgR1ZhbHVlLm9mSW50ZWdlcihudWxsLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdWYWx1ZS5vZkludGVnZXIobnVsbCwgNCksIEdWYWx1ZS5vZkludGVnZXIobnVsbCwgNSksIEdWYWx1ZS5vZkludGVnZXIobnVsbCwgNiksCisgICAgICAgICAgICAgICAgICAgICAgICBHVmFsdWUub2ZJbnRlZ2VyKG51bGwsIDcpLCBHVmFsdWUub2ZJbnRlZ2VyKCJkIiwgOCkKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIGcuVigpLmhhc0lkKAorICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlLm9mKCJhIiwgbmV3IEludGVnZXJbXXsxLCAyLCAzfSksIEdWYWx1ZS5vZigiYiIsIG5ldyBJbnRlZ2VyW117NCwgNX0pLAorICAgICAgICAgICAgICAgICAgICAgICAgR1ZhbHVlLm9mKCJjIiwgQXJyYXlzLmFzTGlzdCg2LCA3KSksIEdWYWx1ZS5vZkludGVnZXIoImQiLCA4KSkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRXh0cmFjdElkRnJvbVZlcnRleCgpIHsKKyAgICAgICAgR3JhcGhUcmF2ZXJzYWwgVlN0YXJ0ID0gZy5WKDEsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMikpOworICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigxLDIpIiwgVlN0YXJ0LmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSk7CisKKyAgICAgICAgR3JhcGhUcmF2ZXJzYWwgVk1pZCA9IGcuaW5qZWN0KCJmb28iKS5WKDEsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMikpOworICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KFwiZm9vXCIpLlYoMSwyKSIsIFZNaWQuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpKTsKKworICAgICAgICBHcmFwaFRyYXZlcnNhbCBmcm9tVG8gPSBnLmFkZEUoIkVkZ2UiKS5mcm9tKG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMSkpLnRvKG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMikpOworICAgICAgICBhc3NlcnRFcXVhbHMoImcuYWRkRShcIkVkZ2VcIikuZnJvbShfXy5WKDEpKS50byhfXy5WKDIpKSIsIGZyb21Uby5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCkpOworCisgICAgICAgIE1hcCBtZXJnZU1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CisgICAgICAgIG1lcmdlTWFwLnB1dChULmxhYmVsLCAia25vd3MiKTsKKyAgICAgICAgbWVyZ2VNYXAucHV0KERpcmVjdGlvbi5PVVQsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMSkpOworICAgICAgICBtZXJnZU1hcC5wdXQoRGlyZWN0aW9uLklOLCBuZXcgUmVmZXJlbmNlVmVydGV4KDIpKTsKKworICAgICAgICBHcmFwaFRyYXZlcnNhbCBtZXJnZUVTdGFydCA9IGcubWVyZ2VFKG1lcmdlTWFwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLm1lcmdlRShbKFQubGFiZWwpOlwia25vd3NcIiwoRGlyZWN0aW9uLk9VVCk6MSwoRGlyZWN0aW9uLklOKToyXSkiLCBtZXJnZUVTdGFydC5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCkpOworCisgICAgICAgIEdyYXBoVHJhdmVyc2FsIG1lcmdlRU1pZCA9IGcuaW5qZWN0KCJmb28iKS5tZXJnZUUobWVyZ2VNYXApOworICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KFwiZm9vXCIpLm1lcmdlRShbKFQubGFiZWwpOlwia25vd3NcIiwoRGlyZWN0aW9uLk9VVCk6MSwoRGlyZWN0aW9uLklOKToyXSkiLCBtZXJnZUVNaWQuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0RlZHVwR2xvYmFsU3RlcFRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRGVkdXBHbG9iYWxTdGVwVGVzdC5qYXZhCmluZGV4IDQ4YTNkYjYuLjA0MjUyZDAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRGVkdXBHbG9iYWxTdGVwVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRGVkdXBHbG9iYWxTdGVwVGVzdC5qYXZhCkBAIC0yOSw3ICsyOSw4IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Ob25lU3RlcFRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvTm9uZVN0ZXBUZXN0LmphdmEKaW5kZXggY2U4NjU1Yi4uNGU2NmNhNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Ob25lU3RlcFRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL05vbmVTdGVwVGVzdC5qYXZhCkBAIC04Nyw0ICs4Nyw0IEBACiAgICAgICAgIGFzc2VydEVxdWFscyg2TCwgX18uX18odmFsaWRPbmUsIG51bGwsIGNvbnRhaW5zTnVsbCwgdmFsaWRFbXB0eSwgaW52YWxpZEluY29ycmVjdFR5cGUsIHZhbGlkSW5jb3JyZWN0VHlwZSwgdmFsdWVUb29TbWFsbCwgdmFsaWRUd28sIHZhbGlkVGhyZWUpCiAgICAgICAgICAgICAgICAgLm5vbmUoUC5sdGUoMykpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db25qb2luU3RlcFRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29uam9pblN0ZXBUZXN0LmphdmEKaW5kZXggMzVkZGVmYS4uMmEzODRjNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db25qb2luU3RlcFRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbmpvaW5TdGVwVGVzdC5qYXZhCkBAIC00MSw3ICs0MSw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuVHlwZXMoKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBfXy5fXyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkuY29uam9pbihudWxsKS5uZXh0KCk7CisgICAgICAgICAgICBfXy5fXyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkuY29uam9pbigoU3RyaW5nKSBudWxsKS5uZXh0KCk7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJJbnB1dCBkZWxpbWl0ZXIgdG8gY29uam9pbiBzdGVwIGNhbid0IGJlIG51bGwiKSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1JhbmdlTG9jYWxTdGVwVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9SYW5nZUxvY2FsU3RlcFRlc3QuamF2YQppbmRleCA4Y2ZmYzE5Li40YmEyNmI5IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1JhbmdlTG9jYWxTdGVwVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUmFuZ2VMb2NhbFN0ZXBUZXN0LmphdmEKQEAgLTI0LDEwICsyNCw4IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50dXBsZS5QYWlyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlU3RlcFRlc3Q7CkBAIC0zNyw2ICszNSw4IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudHVwbGUuUGFpcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIAogLyoqCiAgKiBAYXV0aG9yIERhbmllbCBLdXBwaXR6IChodHRwOi8vZ3JlbWxpbi5ndXJ1KQpAQCAtODUsNiArODUsNyBAQAogICAgICAgICB2ZXJpZnlWYXJpYWJsZXModHJhdmVyc2FsLCBTZXQub2YoKSwgU2V0Lm9mKExPV19OQU1FLCBISUdIX05BTUUpKTsKICAgICB9CiAKKwogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgZ2V0TG93U2hvdWxkUGluVmFyaWFibGUoKSB7CiAgICAgICAgIEdyYXBoVHJhdmVyc2FsLkFkbWluPE9iamVjdCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBfXy5yYW5nZShTY29wZS5sb2NhbCwgR1ZhbHVlLm9mKExPV19OQU1FLCBMT1dfVkFMVUUpLCBHVmFsdWUub2YoSElHSF9OQU1FLCBISUdIX1ZBTFVFKSkuYXNBZG1pbigpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9HVmFsdWVNYW5hZ2VyVmVyaWZpZXIuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvR1ZhbHVlTWFuYWdlclZlcmlmaWVyLmphdmEKaW5kZXggYTIwOWJiMi4uNDMxM2EzNiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9HVmFsdWVNYW5hZ2VyVmVyaWZpZXIuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L0dWYWx1ZU1hbmFnZXJWZXJpZmllci5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneTsKIAotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5Db2xsZWN0aW9uVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5Db2xsZWN0aW9uVXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVmFsdWVNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvVHJhdmVyc2FsU3RyYXRlZ3lQcm94eVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvVHJhdmVyc2FsU3RyYXRlZ3lQcm94eVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjU5NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9UcmF2ZXJzYWxTdHJhdGVneVByb3h5VGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3k7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuTWFwQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworcHVibGljIGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHlUZXN0IHsKKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRlc3RTdHJhdGVneTxTIGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3k+IGV4dGVuZHMgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneTxTPiB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBhcHBseShUcmF2ZXJzYWwuQWRtaW4gdHJhdmVyc2FsKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEFkZEN1c3RvbVN0cmF0ZWd5VG9HcmVtbGluU2NyaXB0KCkgeworICAgICAgICBUcmF2ZXJzYWxTdHJhdGVneVByb3h5IHN0cmF0ZWd5UHJveHkgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSgiVGVzdFN0cmF0ZWd5Iik7CisgICAgICAgIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7CisgICAgICAgIEdyYXBoVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGcud2l0aFN0cmF0ZWdpZXMoc3RyYXRlZ3lQcm94eSkuVigpOworICAgICAgICBhc3NlcnRFcXVhbHMoImcud2l0aFN0cmF0ZWdpZXMoVGVzdFN0cmF0ZWd5KS5WKCkiLCB0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEFkZEN1c3RvbVN0cmF0ZWd5V2l0aENvbmZpZ1RvR3JlbWxpblNjcmlwdCgpIHsKKyAgICAgICAgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWdNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgIGNvbmZpZ01hcC5wdXQoInN0cmluZ0tleSIsICJzdHJpbmdWYWx1ZSIpOworICAgICAgICBjb25maWdNYXAucHV0KCJpbnRLZXkiLCAxKTsKKyAgICAgICAgY29uZmlnTWFwLnB1dCgiYm9vbGVhbktleSIsIHRydWUpOworICAgICAgICBUcmF2ZXJzYWxTdHJhdGVneVByb3h5IHN0cmF0ZWd5UHJveHkgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSgiVGVzdFN0cmF0ZWd5IiwgbmV3IE1hcENvbmZpZ3VyYXRpb24oY29uZmlnTWFwKSk7CisKKyAgICAgICAgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKKyAgICAgICAgR3JhcGhUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZy53aXRoU3RyYXRlZ2llcyhzdHJhdGVneVByb3h5KS5WKCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLndpdGhTdHJhdGVnaWVzKG5ldyBUZXN0U3RyYXRlZ3koc3RyaW5nS2V5Olwic3RyaW5nVmFsdWVcIixpbnRLZXk6MSxib29sZWFuS2V5OnRydWUpKS5WKCkiLCB0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vQ29ubmVjdGl2ZVN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL0Nvbm5lY3RpdmVTdHJhdGVneVRlc3QuamF2YQppbmRleCA2OGYxNWJiLi5lMTZjMjY0IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vQ29ubmVjdGl2ZVN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9Db25uZWN0aXZlU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTE4LDE0ICsxOCwxMiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbjsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1ZhbHVlTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1ZhbHVlTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuR1ZhbHVlTWFuYWdlclZlcmlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuQ29sbGVjdGlvblV0aWw7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC00OCw4ICs0Niw2IEBACiAgICAgQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YW5kYXJkVGVzdCB7CiAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwotCiAgICAgICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcih2YWx1ZSA9IDApCiAgICAgICAgIHB1YmxpYyBUcmF2ZXJzYWwuQWRtaW4gb3JpZ2luYWw7CiAKQEAgLTY1LDcgKzYxLDcgQEAKIAogICAgICAgICBAVGVzdAogICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSBvcmlnaW5hbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oIl9fIik7CiAgICAgICAgICAgICBhcHBseUNvbm5lY3RpdmVTdHJhdGVneShvcmlnaW5hbCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMocmVwciwgb3B0aW1pemVkLCBvcmlnaW5hbCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9FbGVtZW50SWRTdHJhdGVneVRyYXZlcnNlVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL0VsZW1lbnRJZFN0cmF0ZWd5VHJhdmVyc2VUZXN0LmphdmEKaW5kZXggNjBiYmI3MS4uMGZiOTAyMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL0VsZW1lbnRJZFN0cmF0ZWd5VHJhdmVyc2VUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL0VsZW1lbnRJZFN0cmF0ZWd5VHJhdmVyc2VUZXN0LmphdmEKQEAgLTE5LDE1ICsxOSwxNCBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb247CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkRlZmF1bHRHcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb3BlcnRpZXNTdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhTdGVwOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvcGVydGllc1N0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5BZGRFZGdlU3RlcENvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQWRkVmVydGV4U3RlcENvbnRyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOworCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpAQCAtMzYsMTAgKzM1LDEwIEBACiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKIAogLyoqCiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCkBAIC00OCw3ICs0Nyw2IEBACiBAUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQogcHVibGljIGNsYXNzIEVsZW1lbnRJZFN0cmF0ZWd5VHJhdmVyc2VUZXN0IHsKICAgICBwcml2YXRlIHN0YXRpYyBUcmF2ZXJzYWwgdHJhdmVyc2FsV2l0aEFkZFY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgc3RhdGljIHsKICAgICAgICAgZmluYWwgR3JhcGggbW9ja2VkR3JhcGggPSBtb2NrKEdyYXBoLmNsYXNzKTsKQEAgLTg0LDcgKzgyLDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQWx0ZXJUcmF2ZXJzYWxUb0luY2x1ZGVJZFdoZXJlTmVjZXNzYXJ5KCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCJfXyIpOwogICAgICAgICBmaW5hbCBFbGVtZW50SWRTdHJhdGVneSBzdHJhdGVneSA9IEVsZW1lbnRJZFN0cmF0ZWd5LmJ1aWxkKCkuY3JlYXRlKCk7CiAgICAgICAgIHN0cmF0ZWd5LmFwcGx5KHRyYXZlcnNhbC5hc0FkbWluKCkpOwogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vRXZlbnRTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9FdmVudFN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IDQ0ODE5NTYuLjcwMmQ2OWQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9FdmVudFN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9FdmVudFN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0xOCwxMyArMTgsMTEgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb247CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguRGVmYXVsdEdyYXBoVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5NdXRhdGluZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5ldmVudC5Db25zb2xlTXV0YXRpb25MaXN0ZW5lcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5ldmVudC5NdXRhdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaDsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CkBAIC0zMyw4ICszMSw2IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKIAotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5hZGRWOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy51bmZvbGQ7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogCiAvKioKQEAgLTQzLDggKzM5LDYgQEAKICAqLwogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBFdmVudFN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwotCiAgICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVycyhuYW1lID0gInswfSIpCiAgICAgcHVibGljIHN0YXRpYyBJdGVyYWJsZTxPYmplY3RbXT4gZGF0YSgpIHsKICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdW117CkBAIC03Miw3ICs2Niw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEV2ZW50T25NdXRhdGluZ1N0ZXBzKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgIGZpbmFsIE11dGF0aW9uTGlzdGVuZXIgbGlzdGVuZXIxID0gbmV3IENvbnNvbGVNdXRhdGlvbkxpc3RlbmVyKEVtcHR5R3JhcGguaW5zdGFuY2UoKSk7CiAgICAgICAgIGZpbmFsIEV2ZW50U3RyYXRlZ3kgZXZlbnRTdHJhdGVneSA9IEV2ZW50U3RyYXRlZ3kuYnVpbGQoKQogICAgICAgICAgICAgICAgIC5hZGRMaXN0ZW5lcihsaXN0ZW5lcjEpLmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1BhcnRpdGlvblN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1BhcnRpdGlvblN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IDFjOTQ3NGUuLjk0MDJkMDkgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9QYXJ0aXRpb25TdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vUGFydGl0aW9uU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQ29udGFpbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5EZWZhdWx0R3JhcGhUcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7CkBAIC0zMSw3ICszMCw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5BZGRWZXJ0ZXhTdGVwQ29udHJhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuSGFzQ29udGFpbmVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuR1ZhbHVlTWFuYWdlclZlcmlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxIZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWxlbWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKQEAgLTQ4LDExICs0NiwxMSBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNJbnN0YW5jZU9mLmluc3RhbmNlT2Y7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSXRlcmFibGVDb250YWluaW5nLmhhc0l0ZW07CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzTm90Lm5vdDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKIGltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnk7CiBpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKQEAgLTY2LDcgKzY0LDYgQEAKIAogICAgIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQYXJ0aXRpb25TdHJhdGVneVRyYXZlcnNlVGVzdCB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgICAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJzKG5hbWUgPSAiezB9IikKICAgICAgICAgcHVibGljIHN0YXRpYyBJdGVyYWJsZTxPYmplY3RbXT4gZGF0YSgpIHsKQEAgLTExMSw3ICsxMDgsNyBAQAogCiAgICAgICAgIEBUZXN0CiAgICAgICAgIHB1YmxpYyB2b2lkIHNob3VsZEluY2x1ZGVBZGRpdGlvbmFsSGFzU3RlcHNBbmRBcHBlbmRQYXJ0aXRpb25Pbk11dGF0aW5nU3RlcHMoKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOwogICAgICAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgc3RyYXRlZ3kgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCiAgICAgICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkoInAiKS53cml0ZVBhcnRpdGlvbigiYSIpLnJlYWRQYXJ0aXRpb25zKCJhIikuY3JlYXRlKCk7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9TdWJncmFwaFN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1N1YmdyYXBoU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggNGFmYzQ2OC4uMTQwZDFkMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1N1YmdyYXBoU3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1N1YmdyYXBoU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5EZWZhdWx0R3JhcGhUcmF2ZXJzYWw7CkBAIC0zNCw3ICszMyw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5HVmFsdWVNYW5hZ2VyVmVyaWZpZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uSW5saW5lRmlsdGVyU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CkBAIC02OCw4ICs2Niw2IEBACiAgKi8KIEBSdW5XaXRoKEVuY2xvc2VkLmNsYXNzKQogcHVibGljIGNsYXNzIFN1YmdyYXBoU3RyYXRlZ3lUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEdyb292eVRyYW5zbGF0b3Iub2YoIl9fIik7Ci0KICAgICBAUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2VUZXN0IHsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKS50cmF2ZXJzYWwoKTsKQEAgLTEwMyw3ICs5OSw3IEBACiAKICAgICAgICAgQFRlc3QKICAgICAgICAgcHVibGljIHZvaWQgc2hvdWxkU3ViZ3JhcGgoKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOwogICAgICAgICAgICAgZmluYWwgU3ViZ3JhcGhTdHJhdGVneSBzdHJhdGVneSA9IFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5oYXMoImVkZ2UiKSkudmVydGljZXMoX18uaGFzKCJ2ZXJ0ZXgiKSkuY3JlYXRlKCk7CiAgICAgICAgICAgICBzdHJhdGVneS5hcHBseSh0cmF2ZXJzYWwpOwogCkBAIC0xMjMsNyArMTE5LDcgQEAKIAogICAgICAgICBAVGVzdAogICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSBvcmlnaW5hbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKTsKICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgb3JpZ2luYWxTdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CiAgICAgICAgICAgICBvcmlnaW5hbFN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuCiAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzKF9fLmFuZChoYXMoIm5hbWUiLCAibWFya28iKSwgaGFzKCJhZ2UiLCAyOSkpKS4KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vVmVydGV4UHJvZ3JhbVN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IGJmNjUxYzYuLmE4MTQ4YTMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1ZlcnRleFByb2dyYW1TdHJhdGVneVRlc3QuamF2YQpAQCAtMjQsMTcgKzI0LDE0IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdGVwLm1hcC5UcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVmVydGV4UHJvZ3JhbVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkRlZmF1bHRHcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5Db21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRW1wdHlUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVycy5QYXJhbWV0ZXJpemVkOwpAQCAtNDgsNyArNDUsNiBAQAogICovCiBAUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQogcHVibGljIGNsYXNzIFZlcnRleFByb2dyYW1TdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcih2YWx1ZSA9IDApCiAgICAgcHVibGljIFRyYXZlcnNhbC5BZG1pbiBvcmlnaW5hbDsKQEAgLTU5LDcgKzU1LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IG9yaWdpbmFsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOwogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHN0cmF0ZWdpZXMgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKICAgICAgICAgc3RyYXRlZ2llcy5hZGRTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koQ29tcHV0ZXIuY29tcHV0ZSgpKSwgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneS5pbnN0YW5jZSgpKTsKICAgICAgICAgb3JpZ2luYWwuYXNBZG1pbigpLnNldFN0cmF0ZWdpZXMoc3RyYXRlZ2llcyk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9BZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0FkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IGI4YmQ1YmIuLmQ1ZmMzNTAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0FkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0FkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0xOCwxMyArMTgsMTIgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbjsKIAorCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuR1ZhbHVlTWFuYWdlclZlcmlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5qdW5pdC5leHBlcmltZW50YWwucnVubmVycy5FbmNsb3NlZDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CkBAIC00MCw3ICszOSw2IEBACiAgKi8KIEBSdW5XaXRoKEVuY2xvc2VkLmNsYXNzKQogcHVibGljIGNsYXNzIEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YW5kYXJkVGVzdCB7CkBAIC03Niw3ICs3NCw3IEBACiAKICAgICAgICAgQFRlc3QKICAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgICAgICBHVmFsdWVNYW5hZ2VyVmVyaWZpZXIudmVyaWZ5KG9yaWdpbmFsLmFzQWRtaW4oKSwgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kuaW5zdGFuY2UoKSwgU2V0Lm9mKEdWYWx1ZVJlZHVjdGlvblN0cmF0ZWd5Lmluc3RhbmNlKCkpKQogICAgICAgICAgICAgICAgICAgICAuYWZ0ZXJBcHBseWluZygpCiAgICAgICAgICAgICAgICAgICAgIC5tYW5hZ2VySXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0J5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggNTljMTY4NC4uYmNjZmRmNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0yMCwxMiArMjAsMTAgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKQEAgLTQzLDcgKzQxLDYgQEAKICAqLwogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVyCiAgICAgcHVibGljIFRyYXZlcnNhbC5BZG1pbiBvcmlnaW5hbDsKQEAgLTE3Nyw3ICsxNzQsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgIEdWYWx1ZU1hbmFnZXJWZXJpZmllci52ZXJpZnkob3JpZ2luYWwuYXNBZG1pbigpLCBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5Lmluc3RhbmNlKCkpCiAgICAgICAgICAgICAgICAgLmFmdGVyQXBwbHlpbmcoKQogICAgICAgICAgICAgICAgIC5tYW5hZ2VySXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vQ291bnRTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0NvdW50U3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggZTRhM2MzNi4uNzdlMDI2MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vQ291bnRTdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9Db3VudFN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0yMCwxNCArMjAsMTIgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1ZhbHVlTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5SYW5nZUdsb2JhbFN0ZXA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5Jc1N0ZXBDb250cmFjdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnJ1bm5lcnMuRW5jbG9zZWQ7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwpAQCAtNTQsNyArNTIsNiBAQAogICovCiBAUnVuV2l0aChFbmNsb3NlZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBDb3VudFN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YW5kYXJkVGVzdCB7CkBAIC0xNjEsNyArMTU4LDcgQEAKIAogICAgICAgICBAVGVzdAogICAgICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSBvcmlnaW5hbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKTsKICAgICAgICAgICAgIEdWYWx1ZU1hbmFnZXJWZXJpZmllci52ZXJpZnkob3JpZ2luYWwuYXNBZG1pbigpLCBDb3VudFN0cmF0ZWd5Lmluc3RhbmNlKCkpCiAgICAgICAgICAgICAgICAgICAgIC5hZnRlckFwcGx5aW5nKCkKICAgICAgICAgICAgICAgICAgICAgLm1hbmFnZXJJc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9FYXJseUxpbWl0U3RyYXRlZ3lUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9FYXJseUxpbWl0U3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMmMyNDVjZS4uNzcyMmIwMCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vRWFybHlMaW1pdFN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0Vhcmx5TGltaXRTdHJhdGVneVRlc3QuamF2YQpAQCAtMjAsNyArMjAsNiBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1ZhbHVlTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CkBAIC0zMSw3ICszMCw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5SYW5nZUdsb2JhbFN0ZXBDb250cmFjdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5Qcm9maWxlU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkRlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxIZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkNvbGxlY3Rpb25VdGlsOwpAQCAtNTcsNyArNTUsNiBAQAogICovCiBAUnVuV2l0aChFbmNsb3NlZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBFYXJseUxpbWl0U3RyYXRlZ3lUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEdyb292eVRyYW5zbGF0b3Iub2YoIl9fIik7CiAKICAgICBAUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhbmRhcmRUZXN0IHsKQEAgLTEwMSw3ICs5OCw3IEBACiAKICAgICAgICAgQFRlc3QKICAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHN0cmF0ZWdpZXMgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKICAgICAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kuaW5zdGFuY2UoKSk7CiAgICAgICAgICAgICBmb3IgKGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5IHN0cmF0ZWd5IDogdGhpcy5vdGhlclN0cmF0ZWdpZXMpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0ZpbHRlclJhbmtpbmdTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0ZpbHRlclJhbmtpbmdTdHJhdGVneVRlc3QuamF2YQppbmRleCBkNmE3ZDFiLi4yOGI5ZjU2IDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9GaWx0ZXJSYW5raW5nU3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vRmlsdGVyUmFua2luZ1N0cmF0ZWd5VGVzdC5qYXZhCkBAIC0yMCwxNCArMjAsMTIgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR1ZhbHVlTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5HVmFsdWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5HVmFsdWVNYW5hZ2VyVmVyaWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkNvbGxlY3Rpb25VdGlsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7CkBAIC02MCw3ICs1OCw2IEBACiAgKi8KIEBSdW5XaXRoKEVuY2xvc2VkLmNsYXNzKQogcHVibGljIGNsYXNzIEZpbHRlclJhbmtpbmdTdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGFuZGFyZFRlc3QgewpAQCAtMjIzLDcgKzIyMCw3IEBACiAKICAgICAgICAgQFRlc3QKICAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgICAgICBHVmFsdWVNYW5hZ2VyVmVyaWZpZXIudmVyaWZ5KG9yaWdpbmFsLmFzQWRtaW4oKSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5Lmluc3RhbmNlKCksIG90aGVyU3RyYXRlZ2llcykKICAgICAgICAgICAgICAgICAgICAgLmFmdGVyQXBwbHlpbmcoKQogICAgICAgICAgICAgICAgICAgICAubWFuYWdlcklzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0lkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggNzI0OTk3ZC4uMjY3ZWVlMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTE4LDExICsxOCw5IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb247CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5HVmFsdWVNYW5hZ2VyVmVyaWZpZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlBhcmFtZXRlcml6ZWQ7CkBAIC0zOSw3ICszNyw2IEBACiAgKi8KIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEdyb292eVRyYW5zbGF0b3Iub2YoIl9fIik7CiAKICAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXIodmFsdWUgPSAwKQogICAgIHB1YmxpYyBUcmF2ZXJzYWwuQWRtaW4gb3JpZ2luYWw7CkBAIC03MCw3ICs2Nyw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSBvcmlnaW5hbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oIl9fIik7CiAgICAgICAgIEdWYWx1ZU1hbmFnZXJWZXJpZmllci52ZXJpZnkob3JpZ2luYWwuYXNBZG1pbigpLCBJZGVudGl0eVJlbW92YWxTdHJhdGVneS5pbnN0YW5jZSgpKQogICAgICAgICAgICAgICAgIC5hZnRlckFwcGx5aW5nKCkKICAgICAgICAgICAgICAgICAubWFuYWdlcklzRW1wdHkoKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0luY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMWM4ODIxYi4uNTM3OTdkYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lUZXN0LmphdmEKQEAgLTE5LDEzICsxOSwxMSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLmp1bml0LmV4cGVyaW1lbnRhbC5ydW5uZXJzLkVuY2xvc2VkOwpAQCAtNDMsNyArNDEsNiBAQAogICovCiBAUnVuV2l0aChFbmNsb3NlZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdGFuZGFyZFRlc3QgewpAQCAtODIsNyArNzksNyBAQAogCiAgICAgICAgIEBUZXN0CiAgICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IG9yaWdpbmFsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigiX18iKTsKICAgICAgICAgICAgIEdWYWx1ZU1hbmFnZXJWZXJpZmllci52ZXJpZnkob3JpZ2luYWwuYXNBZG1pbigpLCBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneS5pbnN0YW5jZSgpLCBTZXQub2YoR1ZhbHVlUmVkdWN0aW9uU3RyYXRlZ3kuaW5zdGFuY2UoKSkpCiAgICAgICAgICAgICAgICAgICAgIC5hZnRlckFwcGx5aW5nKCkKICAgICAgICAgICAgICAgICAgICAgLm1hbmFnZXJJc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9JbmxpbmVGaWx0ZXJTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0lubGluZUZpbHRlclN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IDZiMmQ2OGQuLmM0YzBhNDQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0lubGluZUZpbHRlclN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0lubGluZUZpbHRlclN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0yMSw5ICsyMSw3IEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdWYWx1ZU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKQEAgLTMyLDcgKzMwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5IYXNDb250YWluZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5HVmFsdWVNYW5hZ2VyVmVyaWZpZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkNvbm5lY3RpdmVTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaDsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTY5LDcgKzY2LDYgQEAKICAqLwogQFJ1bldpdGgoRW5jbG9zZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgSW5saW5lRmlsdGVyU3RyYXRlZ3lUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEdyb292eVRyYW5zbGF0b3Iub2YoIl9fIik7CiAKICAgICBAUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhbmRhcmRUZXN0IHsKQEAgLTE1Miw3ICsxNDgsNyBAQAogCiAgICAgICAgIEBUZXN0CiAgICAgICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IG9yaWdpbmFsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigiX18iKTsKIAogICAgICAgICAgICAgR1ZhbHVlTWFuYWdlclZlcmlmaWVyLnZlcmlmeShvcmlnaW5hbC5hc0FkbWluKCksIElubGluZUZpbHRlclN0cmF0ZWd5Lmluc3RhbmNlKCksIGV4dHJhcykKICAgICAgICAgICAgICAgICAgICAgLmFmdGVyQXBwbHlpbmcoKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vTGF6eUJhcnJpZXJTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0xhenlCYXJyaWVyU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMzkwZjk3NC4uMDMyYzdlMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vTGF6eUJhcnJpZXJTdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9MYXp5QmFycmllclN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0xOSwxMiArMTksMTAgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb247CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CkBAIC00Miw4ICs0MCw2IEBACiAgKi8KIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgTGF6eUJhcnJpZXJTdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKLQogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7CiAgICAgICAgIHJldHVybiBnZW5lcmF0ZVRlc3RQYXJhbWV0ZXJzKCk7CkBAIC02MCw3ICs1Niw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSBvcmlnaW5hbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oIl9fIik7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgc3RyYXRlZ2llcyA9IG5ldyBEZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llcygpOwogICAgICAgICBzdHJhdGVnaWVzLmFkZFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneS5pbnN0YW5jZSgpKTsKICAgICAgICAgZm9yIChmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneSA6IHRoaXMub3RoZXJTdHJhdGVnaWVzKSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9NYXRjaFByZWRpY2F0ZVN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vTWF0Y2hQcmVkaWNhdGVTdHJhdGVneVRlc3QuamF2YQppbmRleCA2MTYxZTA5Li45OTlhNjhjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9NYXRjaFByZWRpY2F0ZVN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL01hdGNoUHJlZGljYXRlU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTE5LDEyICsxOSwxMCBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkRlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKQEAgLTQzLDcgKzQxLDYgQEAKICAqLwogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVyKHZhbHVlID0gMCkKICAgICBwdWJsaWMgVHJhdmVyc2FsLkFkbWluIG9yaWdpbmFsOwpAQCAtNTYsNyArNTMsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCJfXyIpOwogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHN0cmF0ZWdpZXMgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKICAgICAgICAgc3RyYXRlZ2llcy5hZGRTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kuaW5zdGFuY2UoKSk7CiAgICAgICAgIGZvciAoZmluYWwgVHJhdmVyc2FsU3RyYXRlZ3kgc3RyYXRlZ3kgOiB0aGlzLm90aGVyU3RyYXRlZ2llcykgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vT3JkZXJMaW1pdFN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vT3JkZXJMaW1pdFN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IDM4YzM4MDkuLjA4YmJkZGYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL09yZGVyTGltaXRTdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9PcmRlckxpbWl0U3RyYXRlZ3lUZXN0LmphdmEKQEAgLTIwLDE0ICsyMCwxMiBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RlcC5tYXAuVHJhdmVyc2FsVmVydGV4UHJvZ3JhbVN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk9yZGVyR2xvYmFsU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRW1wdHlUcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTQ2LDcgKzQ0LDYgQEAKICAqLwogQFJ1bldpdGgoRW5jbG9zZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgT3JkZXJMaW1pdFN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YW5kYXJkVGVzdCB7CkBAIC01OSw3ICs1Niw3IEBACiAKICAgICAgICAgQFRlc3QKICAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0cmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKTsKICAgICAgICAgICAgIHRyYXZlcnNhbC5hc0FkbWluKCkuc2V0UGFyZW50KG5ldyBUcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtU3RlcChFbXB0eVRyYXZlcnNhbC5pbnN0YW5jZSgpLCBFbXB0eVRyYXZlcnNhbC5pbnN0YW5jZSgpKSk7IC8vIHRyaWNrIGl0CiAgICAgICAgICAgICBHVmFsdWVNYW5hZ2VyVmVyaWZpZXIudmVyaWZ5KHRyYXZlcnNhbCwgT3JkZXJMaW1pdFN0cmF0ZWd5Lmluc3RhbmNlKCkpLgogICAgICAgICAgICAgICAgICAgICBhZnRlckFwcGx5aW5nKCkudmFyaWFibGVzQXJlUHJlc2VydmVkKCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9QYXRoUHJvY2Vzc29yU3RyYXRlZ3lUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9QYXRoUHJvY2Vzc29yU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMjYwYmQ3Yy4uZmRkYjY5YSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vUGF0aFByb2Nlc3NvclN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL1BhdGhQcm9jZXNzb3JTdHJhdGVneVRlc3QuamF2YQpAQCAtMjIsMTkgKzIyLDE3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdGVwLm1hcC5UcmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Qb3A7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkRlZmF1bHRHcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYS5Db25zdGFudFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYS5WYWx1ZVRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYS5JZGVudGl0eVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuR1ZhbHVlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwubGFtYmRhLlZhbHVlVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5UcmF2ZXJzYWxQYXJlbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC01Niw3ICs1NCw2IEBACiAgKi8KIEBSdW5XaXRoKEVuY2xvc2VkLmNsYXNzKQogcHVibGljIGNsYXNzIFBhdGhQcm9jZXNzb3JTdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb2xsZWN0aW9uPFRyYXZlcnNhbFN0cmF0ZWd5PiB3aXRoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kgPQogICAgICAgICAgICAgU3RyZWFtLmNvbmNhdChTdHJlYW0ub2YoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUuZ2V0U3RyYXRlZ2llcyhHcmFwaC5jbGFzcykudG9MaXN0KCkuc3RyZWFtKCkpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CkBAIC03NCw3ICs3MSw3IEBACiAKICAgICAgICAgQFRlc3QKICAgICAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCJfXyIpOwogICAgICAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHJvb3RUcmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsPD4oKTsKICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFBhcmVudCBwYXJlbnQgPSBuZXcgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbVN0ZXAocm9vdFRyYXZlcnNhbCwgdGhpcy5vcmlnaW5hbC5hc0FkbWluKCkpOwogICAgICAgICAgICAgcm9vdFRyYXZlcnNhbC5hZGRTdGVwKHBhcmVudC5hc1N0ZXAoKSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9QYXRoUmV0cmFjdGlvblN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vUGF0aFJldHJhY3Rpb25TdHJhdGVneVRlc3QuamF2YQppbmRleCAyNTkxYjE2Li44Y2E5NjdiIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9QYXRoUmV0cmFjdGlvblN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL1BhdGhSZXRyYWN0aW9uU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTIzLDE2ICsyMywxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5QYXRoUHJvY2Vzc29yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5UcmF2ZXJzYWxQYXJlbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIuVHJhdmVyc2VyUmVxdWlyZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkRlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzOwotCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CkBAIC02OCw3ICs2NSw2IEBACiAgKi8KIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgUGF0aFJldHJhY3Rpb25TdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIC8qKgogICAgICAqIEFsd2F5cyBuZWVkIExhenlCYXJyaWVyU3RyYXRlZ3kgYmVjYXVzZSBpdCB3aWxsIHRyaWdnZXIgYmFycmllcigpIGFkZGl0aW9ucyBpbiBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5LgpAQCAtOTIsNyArODgsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBkb1Rlc3QoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gb3JpZ2luYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCJfXyIpOwogICAgICAgICBmb3IgKGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgY3VycmVudFN0cmF0ZWdpZXMgOiB0aGlzLnN0cmF0ZWdpZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiBjdXJyZW50VHJhdmVyc2FsID0gdGhpcy5vcmlnaW5hbC5jbG9uZSgpOwogICAgICAgICAgICAgY3VycmVudFRyYXZlcnNhbC5zZXRTdHJhdGVnaWVzKGN1cnJlbnRTdHJhdGVnaWVzKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL1Byb2R1Y3RpdmVCeVN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMDhhZjc0OC4uMmMwZGE1YiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lUZXN0LmphdmEKQEAgLTIwLDEzICsyMCwxMSBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYS5Db25zdGFudFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmxhbWJkYS5WYWx1ZVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTQ3LDcgKzQ1LDYgQEAKIAogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBQcm9kdWN0aXZlQnlTdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gYWdlVmFsdWVUcmF2ZXJzYWwgPSBuZXcgVmFsdWVUcmF2ZXJzYWw8PigiYWdlIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IG5hbWVWYWx1ZVRyYXZlcnNhbCA9IG5ldyBWYWx1ZVRyYXZlcnNhbDw+KCJuYW1lIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IG51bGxUcmF2ZXJzYWwgPSBuZXcgQ29uc3RhbnRUcmF2ZXJzYWw8PihudWxsKTsKQEAgLTcwLDcgKzY3LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgZG9UZXN0KCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IG9yaWdpbmFsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigiX18iKTsKICAgICAgICAgYXBwbHlQcm9kdWN0aXZlQnlTdHJhdGVneShvcmlnaW5hbCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXByLCBvcHRpbWl6ZWQsIG9yaWdpbmFsKTsKICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9SZXBlYXRVbnJvbGxTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL1JlcGVhdFVucm9sbFN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IGM4ZDc4MDYuLmFmYzgwYzcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL1JlcGVhdFVucm9sbFN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL1JlcGVhdFVucm9sbFN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb247CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7CkBAIC0yOCw3ICsyNyw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk5vT3BCYXJyaWVyU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkdWYWx1ZU1hbmFnZXJWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CkBAIC01NCw3ICs1Miw2IEBACiAgKi8KIEBSdW5XaXRoKEVuY2xvc2VkLmNsYXNzKQogcHVibGljIGNsYXNzIFJlcGVhdFVucm9sbFN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0YW5kYXJkVGVzdCB7CkBAIC0xOTAsNyArMTg3LDcgQEAKICAgICAgKiBAcGFyYW0gb3RoZXJTdHJhdGVnaWVzICAgYW55IG90aGVyIHN0cmF0ZWdpZXMgdGhhdCBzaG91bGQgYWxzbyBiZSBhcHBsaWVkCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0ZXN0UmVwZWF0VW5yb2xsU3RyYXRlZ3koVHJhdmVyc2FsLkFkbWluPD8sID8+IG9yaWdpbmFsLCBUcmF2ZXJzYWw8PywgPz4gZXhwZWN0ZWRPcHRpbWl6ZWQsIENvbGxlY3Rpb248VHJhdmVyc2FsU3RyYXRlZ3k8Pz4+IG90aGVyU3RyYXRlZ2llcykgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IG9yaWdpbmFsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigiX18iKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzV2l0aExhenkgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKICAgICAgICAgc3RyYXRlZ2llc1dpdGhMYXp5LmFkZFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuaW5zdGFuY2UoKSk7CiAgICAgICAgIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiBjbG9uZWRPcmlnaW5hbCA9IG9yaWdpbmFsLmNsb25lKCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9Db21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVRlc3QuamF2YQppbmRleCAyNzQzY2Y1Li5hYjU5NjRlIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9Db21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL0NvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTIwLDExICsyMCw5IEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlRyYXZlcnNhbFZlcnRleFByb2dyYW1TdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRW1wdHlUcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC00NSw3ICs0Myw2IEBACiAgKi8KIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7CkBAIC03MCw3ICs2Nyw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEJlVmVyaWZpZWRJbGxlZ2FsKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CiAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5Lmluc3RhbmNlKCkpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3lUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9FZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVRlc3QuamF2YQppbmRleCA4MTc0MDAzLi5jY2EzYmJhIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9FZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9FZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVRlc3QuamF2YQpAQCAtMTksMTEgKzE5LDkgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb247CiAKIGltcG9ydCBubC5hbHRpbmRhZy5sb2cuTG9nQ2FwdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkRlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKQEAgLTQ2LDcgKzQ0LDYgQEAKICAqLwogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFByZWRpY2F0ZTxTdHJpbmc+IE1TR19QUkVESUNBVEUgPSBQYXR0ZXJuLmNvbXBpbGUoCiAgICAgICAgICAgICAiXlRoZSBwcm92aWRlZCB0cmF2ZXJzYWwgY29udGFpbnMgYSB2ZXJ0ZXggc3RlcCB3aXRob3V0IGFueSBzcGVjaWZpZWQgZWRnZSBsYWJlbDogVmVydGV4U3RlcC4qIikKQEAgLTkzLDcgKzkwLDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSWdub3JlKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgc3RyYXRlZ2llcyA9IG5ldyBEZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llcygpOwogICAgICAgICBzdHJhdGVnaWVzLmFkZFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kuYnVpbGQoKS5jcmVhdGUoKSk7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuY2xvbmUoKTsKQEAgLTEwNCw3ICsxMDEsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRPbmx5VGhyb3coKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUodHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CiAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneS5idWlsZCgpLnRocm93RXhjZXB0aW9uKCkuY3JlYXRlKCkpOwogICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgdHJhdmVyc2FsID0gdGhpcy50cmF2ZXJzYWwuYXNBZG1pbigpLmNsb25lKCk7CkBAIC0xMjQsNyArMTIxLDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkT25seUxvZygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0cmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOwogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHN0cmF0ZWdpZXMgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKICAgICAgICAgc3RyYXRlZ2llcy5hZGRTdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LmJ1aWxkKCkubG9nV2FybmluZygpLmNyZWF0ZSgpKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5jbG9uZSgpOwpAQCAtMTM4LDcgKzEzNSw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFRocm93QW5kTG9nKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgc3RyYXRlZ2llcyA9IG5ldyBEZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llcygpOwogICAgICAgICBzdHJhdGVnaWVzLmFkZFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kuYnVpbGQoKS50aHJvd0V4Y2VwdGlvbigpLmxvZ1dhcm5pbmcoKS5jcmVhdGUoKSk7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSB0aGlzLnRyYXZlcnNhbC5hc0FkbWluKCkuY2xvbmUoKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL0xhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9MYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5VGVzdC5qYXZhCmluZGV4IGUwMmY4N2MuLjE0MzAxZDMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL0xhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneVRlc3QuamF2YQpAQCAtMjAsMTMgKzIwLDExIEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5Qcm9maWxlU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkRlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKQEAgLTQ4LDcgKzQ2LDYgQEAKICAqLwogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5VGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJfXyIpOwogCiAgICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVycyhuYW1lID0gInswfSIpCiAgICAgcHVibGljIHN0YXRpYyBJdGVyYWJsZTxPYmplY3RbXT4gZGF0YSgpIHsKQEAgLTg3LDcgKzg0LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVWZXJpZmllZElsbGVnYWwoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUodHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CiAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhQcm9maWxlU3RyYXRlZ3kuaW5zdGFuY2UoKSk7CiAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5Lmluc3RhbmNlKCkpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVhZE9ubHlTdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL1JlYWRPbmx5U3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggNWRiMzc2ZC4uNjczMTVkOCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVhZE9ubHlTdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9SZWFkT25seVN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0xOCwxMCArMTgsOCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkRlZmF1bHRHcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC0zOSw3ICszNyw2IEBACiAgKi8KIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgUmVhZE9ubHlTdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7CkBAIC02MSw3ICs1OCw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEJlVmVyaWZpZWRJbGxlZ2FsKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCkuYXBwbHkodGhpcy50cmF2ZXJzYWwuYXNBZG1pbigpKTsKICAgICAgICAgICAgIGZhaWwoIlRoZSBzdHJhdGVneSBzaG91bGQgaGF2ZSBmb3VuZCBhIG11dGF0aW5nIHN0ZXA6ICIgKyByZXByKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL1Jlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5VGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMDMyZjJhMi4uOTU3ZWIxZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lUZXN0LmphdmEKQEAgLTE5LDExICsxOSw5IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uOwogCiBpbXBvcnQgbmwuYWx0aW5kYWcubG9nLkxvZ0NhcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Db2xsZWN0aW9uVXRpbDsKQEAgLTUzLDcgKzUxLDYgQEAKICAqLwogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFByZWRpY2F0ZTxTdHJpbmc+IE1TR19QUkVESUNBVEUgPSBQYXR0ZXJuLmNvbXBpbGUoCiAgICAgICAgICAgICAiLip0aGF0IGlzIHNldHRpbmcgYSBwcm9wZXJ0eSBrZXkgdG8gYSByZXNlcnZlZCB3b3JkLioiKQpAQCAtMTAwLDcgKzk3LDYgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSWdub3JlKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CiAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5idWlsZCgpLmNyZWF0ZSgpKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IHRoaXMudHJhdmVyc2FsLmFzQWRtaW4oKS5jbG9uZSgpOwpAQCAtMTExLDcgKzEwNyw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZE9ubHlUaHJvdygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0cmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigiX18iKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CiAgICAgICAgIGZpbmFsIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LkJ1aWxkZXIgYnVpbGRlciA9IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LmJ1aWxkKCkudGhyb3dFeGNlcHRpb24oKTsKICAgICAgICAgaWYgKHJlcHIuZXF1YWxzKCJfXy5hZGRWKCkucHJvcGVydHkoXCJ4XCIsXCJ4eXpcIixcIm5vdC1hbGxvd2VkXCIsXCJ4eHhcIikiKSkKQEAgLTEzNCw3ICsxMzAsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRPbmx5TG9nKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCJfXyIpOwogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVnaWVzIHN0cmF0ZWdpZXMgPSBuZXcgRGVmYXVsdFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKICAgICAgICAgZmluYWwgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kuQnVpbGRlciBidWlsZGVyID0gUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kuYnVpbGQoKS5sb2dXYXJuaW5nKCk7CiAgICAgICAgIGlmIChyZXByLmVxdWFscygiX18uYWRkVigpLnByb3BlcnR5KFwieFwiLFwieHl6XCIsXCJub3QtYWxsb3dlZFwiLFwieHh4XCIpIikpCkBAIC0xNTEsNyArMTQ3LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dBbmRMb2coKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhbnNsYXRvci50cmFuc2xhdGUodHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVwciA9IHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oIl9fIik7CiAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWdpZXMgc3RyYXRlZ2llcyA9IG5ldyBEZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llcygpOwogICAgICAgICBmaW5hbCBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5CdWlsZGVyIGJ1aWxkZXIgPSBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5idWlsZCgpLgogICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKCkubG9nV2FybmluZygpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL1N0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3lUZXN0LmphdmEKaW5kZXggMjJiYTg5ZC4uMGI2MjUwMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L3ZlcmlmaWNhdGlvbi9TdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5VGVzdC5qYXZhCkBAIC0xOCwxMiArMTgsMTAgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbjsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlJlcXVpcmVtZW50c1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvci5Hcm9vdnlUcmFuc2xhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhdmVyc2VyLlRyYXZlcnNlclJlcXVpcmVtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVGVzdFN1cHBvcnQ7CkBAIC00MCw4ICszOCw4IEBACiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnJlcGVhdDsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uc3VtOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CiAKIC8qKgogICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCkBAIC00OSw3ICs0Nyw2IEBACiAgKi8KIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiX18iKTsKIAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTc4LDcgKzc1LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVWZXJpZmllZCgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlcHIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0cmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXByID0gdHJhdmVyc2FsLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpOwogICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgY29weSA9IGNvcHlBbmRDb25maWd1cmVUcmF2ZXJzYWwodHJhdmVyc2FsKTsKIAogICAgICAgICBpZiAobGVnYWxUcmF2ZXJzYWwpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9Bbm9ueW1pemluZ1R5cGVUcmFuc2xhdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0Fub255bWl6aW5nVHlwZVRyYW5zbGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMzFhMzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0Fub255bWl6aW5nVHlwZVRyYW5zbGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hci5HcmVtbGluUXVlcnlQYXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS5ncmFtbWFyLk5vT3BUZXJtaW5hbFZpc2l0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlBhaXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS50aW1lLlpvbmVPZmZzZXQuVVRDOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi1wdWJsaWMgY2xhc3MgQW5vbnltaXppbmdUeXBlVHJhbnNsYXRvclRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKLQotICAgIHByaXZhdGUgdm9pZCB0ZXN0QW5vbnltaXplKGZpbmFsIFN0cmluZyBxdWVyeSwgZmluYWwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlY29kZSBiYyA9IChCeXRlY29kZSkgR3JlbWxpblF1ZXJ5UGFyc2VyLnBhcnNlKHF1ZXJ5LCBuZXcgTm9PcFRlcm1pbmFsVmlzaXRvcigpKTsKLSAgICAgICAgICAgIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIsIG5ldyBBbm9ueW1pemluZ1R5cGVUcmFuc2xhdG9yKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbnZlcnRlZCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGJjKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGNvbnZlcnRlZCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgZXggaW5zdGFuY2VvZiBSdW50aW1lRXhjZXB0aW9uID8gKFJ1bnRpbWVFeGNlcHRpb24pIGV4IDogbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHRlc3RBbm9ueW1pemUoZmluYWwgVHJhdmVyc2FsPD8sPz4gdCwgZmluYWwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0gICAgICAgIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIsIG5ldyBBbm9ueW1pemluZ1R5cGVUcmFuc2xhdG9yKCkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgY29udmVydGVkID0gdHJhbnNsYXRvci50cmFuc2xhdGUodCkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGNvbnZlcnRlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0QmFzaWNBbm9ueW1pemUoKSB7Ci0KLSAgICAgICAgQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKHN0cmluZzApIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoJzMnKS52YWx1ZU1hcCh0cnVlKS51bmZvbGQoKS50b0xpc3QoKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJnLlYoc3RyaW5nMCkudmFsdWVNYXAodHJ1ZSkudW5mb2xkKCkudG9MaXN0KCkiKSwKLSAgICAgICAgICAgIG5ldyBQYWlyPD4oImcuVigpLmhhcygnY29kZScsJ0FVUycpLm91dCgpLm91dCgpLm91dCgpLmhhcygnY29kZScsJ0FHUicpLnBhdGgoKS5ieSgnY29kZScpLnRvTGlzdCgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcyhzdHJpbmcwLHN0cmluZzEpLm91dCgpLm91dCgpLm91dCgpLmhhcyhzdHJpbmcwLHN0cmluZzIpLnBhdGgoKS5ieShzdHJpbmcwKS50b0xpc3QoKSIpLAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKCkuaGFzKCdsZW5ndGgnLCAxMEwpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcyhzdHJpbmcwLGxvbmcwKSIpLAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKCkuaGFzSWQoYmV0d2VlbignMScsJzMnKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzSWQoUC5ndGUoc3RyaW5nMCkuYW5kKFAubHQoc3RyaW5nMSkpKSIpLAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKCkuaGFzSWQoYmV0d2VlbigxLjBkLDYuMGQpKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNJZChQLmd0ZShkb3VibGUwKS5hbmQoUC5sdChkb3VibGUxKSkpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoKS53aGVyZShsYWJlbCgpLmlzKGVxKCdhaXJwb3J0JykpKS5jb3VudCgpLnRvTGlzdCgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLndoZXJlKF9fLmxhYmVsKCkuaXMoUC5lcShzdHJpbmcwKSkpLmNvdW50KCkudG9MaXN0KCkiKSwKLSAgICAgICAgICAgIG5ldyBQYWlyPD4oImcuVigpLmhhcyhsYWJlbCwncGVyc29uJykuY291bnQoKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoVC5sYWJlbCxzdHJpbmcwKS5jb3VudCgpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoKS5oYXMoJ3J1bndheXMnLGluc2lkZSgxLDMpKS52YWx1ZXMoJ2NvZGUnLCdhaXJwb3J0JykudG9MaXN0KCkiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKHN0cmluZzAsUC5ndChpbnRlZ2VyMCkuYW5kKFAubHQoaW50ZWdlcjEpKSkudmFsdWVzKHN0cmluZzEsc3RyaW5nMikudG9MaXN0KCkiKSwKLSAgICAgICAgICAgIG5ldyBQYWlyPD4oImcuVigpLmhhc0lkKHdpdGhpbigxMDAuLjExNSkpLm91dCgpLmhhc0lkKGx0ZSg0NikpLmNvdW50KCkudG9MaXN0KCkiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzSWQoUC53aXRoaW4oW2ludGVnZXIwLCBpbnRlZ2VyMSwgaW50ZWdlcjIsIGludGVnZXIzLCBpbnRlZ2VyNCwgaW50ZWdlcjUsIGludGVnZXI2LCBpbnRlZ2VyNywgaW50ZWdlcjgsIGludGVnZXI5LCBpbnRlZ2VyMTAsIGludGVnZXIxMSwgaW50ZWdlcjEyLCBpbnRlZ2VyMTMsIGludGVnZXIxNCwgaW50ZWdlcjE1XSkpLm91dCgpLmhhc0lkKFAubHRlKGludGVnZXIxNikpLmNvdW50KCkudG9MaXN0KCkiKSwKLSAgICAgICAgICAgIG5ldyBQYWlyPD4oImcuVigpLm91dCgnbm90aGluZycpLnRyeU5leHQoKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5vdXQoc3RyaW5nMCkudHJ5TmV4dCgpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5uZXh0KDIpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLm91dChzdHJpbmcwKS5uZXh0KGludGVnZXIwKSIpLAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKCkub3V0KCdjcmVhdGVkJykudG9MaXN0KCkiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkub3V0KHN0cmluZzApLnRvTGlzdCgpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS50b1NldCgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLm91dChzdHJpbmcwKS50b1NldCgpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5leHBsYWluKCkiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkub3V0KHN0cmluZzApLmV4cGxhaW4oKSIpLAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKCkub3V0KCdjcmVhdGVkJykudG9CdWxrU2V0KCkiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkub3V0KHN0cmluZzApLnRvQnVsa1NldCgpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoMSkucHJvcGVydHkoJ2NpdHknLCdzYW50YSBmZScpLnByb3BlcnR5KCdzdGF0ZScsJ25ldyBtZXhpY28nKS52YWx1ZU1hcCgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVihpbnRlZ2VyMCkucHJvcGVydHkoc3RyaW5nMCxzdHJpbmcxKS5wcm9wZXJ0eShzdHJpbmcyLHN0cmluZzMpLnZhbHVlTWFwKCkiKSwKLSAgICAgICAgICAgIG5ldyBQYWlyPD4oImcuVigpLnZhbHVlcygnbmFtZScpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAotICAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiKSwKLSAgICAgICAgICAgIG5ldyBQYWlyPD4oImcuVigxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICd4JywgJ3knKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICJnLlYoaW50ZWdlcjApLnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSxzdHJpbmcwLHN0cmluZzEpIiksCi0gICAgICAgICAgICBuZXcgUGFpcjw+KCJnLlYoKS5hcygneCcpLm91dCgnY3JlYXRlZCcpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKSIpLAotICAgICAgICAgICAgbmV3IFBhaXI8PigiZy5WKDMsNCw1KS5hZ2dyZWdhdGUoJ3gnKS5oYXMoJ25hbWUnLCdqb3NoJykuYXMoJ2EnKS5zZWxlY3QoJ3gnKS51bmZvbGQoKS5oYXNMYWJlbCgnc29mdHdhcmUnKS5hZGRFKCdjcmVhdGVkQnknKS50bygnYScpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImcuVihpbnRlZ2VyMCxpbnRlZ2VyMSxpbnRlZ2VyMikuYWdncmVnYXRlKHN0cmluZzApLmhhcyhzdHJpbmcxLHN0cmluZzIpLmFzKHN0cmluZzMpLnNlbGVjdChzdHJpbmcwKS51bmZvbGQoKS5oYXNMYWJlbChzdHJpbmc0KS5hZGRFKHN0cmluZzUpLnRvKHN0cmluZzMpIikKLQotICAgICAgICApLmZvckVhY2godGVzdCAtPiB0ZXN0QW5vbnltaXplKHRlc3QuZ2V0VmFsdWUwKCksIHRlc3QuZ2V0VmFsdWUxKCkpKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlRGF0ZSgpIHsKLSAgICAgICAgZmluYWwgQ2FsZW5kYXIgYyA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0gICAgICAgIGMuc2V0KDE5NzUsIENhbGVuZGFyLlNFUFRFTUJFUiwgNyk7Ci0gICAgICAgIGZpbmFsIERhdGUgZCA9IGMuZ2V0VGltZSgpOwotICAgICAgICB0ZXN0QW5vbnltaXplKGcuaW5qZWN0KGQpLCAiZy5pbmplY3QoZGF0ZTApIik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVPZmZzZXREYXRlVGltZSgpIHsKLSAgICAgICAgZmluYWwgT2Zmc2V0RGF0ZVRpbWUgZCA9IE9mZnNldERhdGVUaW1lLm9mKExvY2FsRGF0ZVRpbWUub2YoMjAxOCwgMDMsIDIyLCAwMCwgMzUsIDQ0LCA3NDEwMDAwMDApLCBVVEMpOwotICAgICAgICB0ZXN0QW5vbnltaXplKGcuaW5qZWN0KGQpLCAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwKSIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVGltZXN0YW1wKCkgewotICAgICAgICBmaW5hbCBDYWxlbmRhciBjID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgYy5zZXQoMTk3NSwgQ2FsZW5kYXIuU0VQVEVNQkVSLCA3KTsKLSAgICAgICAgZmluYWwgVGltZXN0YW1wIHQgPSBuZXcgVGltZXN0YW1wKGMuZ2V0VGltZSgpLmdldFRpbWUoKSk7Ci0gICAgICAgIHRlc3RBbm9ueW1pemUoZy5pbmplY3QodCksICJnLmluamVjdCh0aW1lc3RhbXAwKSIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVXVpZCgpIHsKLSAgICAgICAgZmluYWwgVVVJRCB1dWlkID0gVVVJRC5mcm9tU3RyaW5nKCJmZmZmZmZmZi1mZDQ5LTFlNGItMDAwMC0wMDAwMGQ0YjhhMWQiKTsKLSAgICAgICAgdGVzdEFub255bWl6ZShnLmluamVjdCh1dWlkKSwgImcuaW5qZWN0KHV1aWQwKSIpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0RvdE5ldFRyYW5zbGF0b3JUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvRG90TmV0VHJhbnNsYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI5Y2I3OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvRG90TmV0VHJhbnNsYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuTWVyZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Qb3A7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU2VlZFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRFZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRWZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS50aW1lLlpvbmVPZmZzZXQuVVRDOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXIuYXNjOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXNMYWJlbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgRG90TmV0VHJhbnNsYXRvclRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IERvdE5ldFRyYW5zbGF0b3Iub2YoImciKTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlU3RyYXRlZ2llcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRFcXVhbHMoImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzTGFiZWwoXCJwZXJzb25cIikpLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBTZWVkU3RyYXRlZ3koc2VlZDogOTk5OTk5KSkuVigpLkhhcyhcIm5hbWVcIikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5pbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoaGFzTGFiZWwoInBlcnNvbiIpKS5jcmVhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlZWRTdHJhdGVneS5idWlsZCgpLnNlZWQoOTk5OTk5KS5jcmVhdGUoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBWKCkuaGFzKCJuYW1lIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZU1hcHMoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLlYoKS5pZCgpLmlzKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCxPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIHB1dCgzLCAiMzIiKTsKLSAgICAgICAgICAgIHB1dChBcnJheXMuYXNMaXN0KDEsIDIsIDMuMWQpLCA0KTsKLSAgICAgICAgfX0pLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5JZCgpLklzKG5ldyBEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+IHt7MywgXCIzMlwifSwge25ldyBMaXN0PG9iamVjdD4gezEsIDIsIDMuMX0sIDR9fSkiLCBzY3JpcHQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVmFsdWVzKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkudmFsdWVzKCJuYW1lIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVWYWx1ZSgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQudmFsdWUsIGFzYykudmFsdWUoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuT3JkZXIoKS5CeShULlZhbHVlLE9yZGVyLkFzYykuVmFsdWU8b2JqZWN0PigpIiwgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUluamVjdCgpIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KDEwLDIwLG51bGwsMjAsMTAsMTApLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdDxvYmplY3Q+KDEwLDIwLG51bGwsMjAsMTAsMTApIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3Q8b2JqZWN0PigpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoKE9iamVjdCkgbnVsbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0PG9iamVjdD4obnVsbCkiLCBzY3JpcHQpOwotICAgICAgICBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdChudWxsLCBudWxsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3Q8b2JqZWN0PihudWxsLG51bGwpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkudmFsdWVzKCJhZ2UiKS5pbmplY3QoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSW5qZWN0KCkiLCBzY3JpcHQpOwotICAgICAgICBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLlYoKS52YWx1ZXMoImFnZSIpLmluamVjdChudWxsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSW5qZWN0KG51bGwpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkudmFsdWVzKCJhZ2UiKS5pbmplY3QobnVsbCwgbnVsbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkluamVjdChudWxsLG51bGwpIiwgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUdyb3VwKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuZ3JvdXAoIngiKS5ncm91cCgpLmJ5KCJuYW1lIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLkdyb3VwKFwieFwiKS5Hcm91cDxvYmplY3Qsb2JqZWN0PigpLkJ5KFwibmFtZVwiKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVHcm91cENvdW50KCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuZ3JvdXBDb3VudCgieCIpLmdyb3VwQ291bnQoKS5ieSgibmFtZSIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5Hcm91cENvdW50KFwieFwiKS5Hcm91cENvdW50PG9iamVjdD4oKS5CeShcIm5hbWVcIikiLCBzY3JpcHQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlRGF0ZSgpIHsKLSAgICAgICAgZmluYWwgT2Zmc2V0RGF0ZVRpbWUgZCA9IE9mZnNldERhdGVUaW1lLm9mKExvY2FsRGF0ZVRpbWUub2YoMjAxOCwgMDMsIDIyLCAwMCwgMzUsIDQ0LCA3NDEwMDAwMDApLCBVVEMpOwotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbihTdHJpbmcuZm9ybWF0KCJEYXRlVGltZU9mZnNldC5QYXJzZShcIiVzXCIpIiwgZCksIGQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVXVpZCgpIHsKLSAgICAgICAgZmluYWwgVVVJRCB1dWlkID0gVVVJRC5mcm9tU3RyaW5nKCJmZmZmZmZmZi1mZDQ5LTFlNGItMDAwMC0wMDAwMGQ0YjhhMWQiKTsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oU3RyaW5nLmZvcm1hdCgibmV3IEd1aWQoXCIlc1wiKSIsIHV1aWQpLCB1dWlkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVAoKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJQLkd0KDEpLkFuZChQLkd0KDIpKS5BbmQoUC5HdCgzKSkiLCBQLmd0KDEpLmFuZChQLmd0KDIpKS5hbmQoUC5ndCgzKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVGV4dFAoKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJUZXh0UC5Db250YWluaW5nKFwiYXJrXCIpIiwgVGV4dFAuY29udGFpbmluZygiYXJrIikpOwotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiVGV4dFAuUmVnZXgoXCJhcmtcIikiLCBUZXh0UC5yZWdleCgiYXJrIikpOwotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiVGV4dFAuTm90UmVnZXgoXCJhcmtcIikiLCBUZXh0UC5ub3RSZWdleCgiYXJrIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlQ29sdW1uKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiQ29sdW1uLktleXMiLCBDb2x1bW4ua2V5cyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVEaXJlY3Rpb24oKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJEaXJlY3Rpb24uQm90aCIsIERpcmVjdGlvbi5CT1RIKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZU9yZGVyKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiT3JkZXIuRGVzYyIsIE9yZGVyLmRlc2MpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlUG9wKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiUG9wLkxhc3QiLCBQb3AubGFzdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVTY29wZSgpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIlNjb3BlLkxvY2FsIiwgU2NvcGUubG9jYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGF2ZVZhbGlkVG9TdHJpbmcoKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygidHJhbnNsYXRvcltoOmdyZW1saW4tZG90bmV0XSIsIERvdE5ldFRyYW5zbGF0b3Iub2YoImgiKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUhhc0xhYmVsTnVsbCgpIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLmhhc0xhYmVsKG51bGwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5IYXNMYWJlbCgoc3RyaW5nKSBudWxsKSIsIHNjcmlwdCk7Ci0gICAgICAgIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLmhhc0xhYmVsKChTdHJpbmcpIG51bGwsIG51bGwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5IYXNMYWJlbChudWxsLG51bGwpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuaGFzTGFiZWwobnVsbCwgInBlcnNvbiIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5IYXNMYWJlbChudWxsLFwicGVyc29uXCIpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuaGFzTGFiZWwobnVsbCwgInBlcnNvbiIsIG51bGwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5IYXNMYWJlbChudWxsLFwicGVyc29uXCIsbnVsbCkiLCBzY3JpcHQpOwotICAgICAgICBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLlYoKS5oYXMoVC5sYWJlbCwgKE9iamVjdCkgbnVsbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLkhhcyhULkxhYmVsLChvYmplY3QpIG51bGwpIiwgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNhcmRpbmFsaXR5V2l0aFByb3BlcnR5KCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSxcIm5hbWVcIiwob2JqZWN0KSBudWxsKSIsIHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5wcm9wZXJ0eShWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zaW5nbGUsICJuYW1lIiwgbnVsbCkpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNhcmRpbmFsaXR5VmFsdWUoKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJDYXJkaW5hbGl0eVZhbHVlLlNldChcInRlc3RcIikiLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zZXQoInRlc3QiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVIYXNOdWxsKCkgewotICAgICAgICBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuaGFzKCJrIiwgKE9iamVjdCkgbnVsbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLkhhcyhcImtcIiwob2JqZWN0KSBudWxsKSIsIHNjcmlwdCk7Ci0gICAgICAgIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLmhhcygibCIsICJrIiwgKE9iamVjdCkgbnVsbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLkhhcyhcImxcIixcImtcIiwob2JqZWN0KSBudWxsKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVNZXJnZVZOdWxsKCkgewotICAgICAgICBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5tZXJnZVYoKE1hcCkgbnVsbCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCAoTWFwKSBudWxsKS5tZXJnZVYoX18uaWRlbnRpdHkoKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0PikgbnVsbCkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LG9iamVjdD4pIG51bGwpLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uSWRlbnRpdHkoKSkiLCBzY3JpcHQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRXNjYXBlU3RyaW5ncygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuYWRkVigiY3VzdG9tZXIiKQotICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgiY3VzdG9tZXJfaWQiLCA1MDFMKQotICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgibmFtZSIsICJGb29cdTAwMjBCYXIiKQotICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgiYWdlIiwgMjUpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJzcGVjaWFsIiwgImB+IUAjJCVeJiooKS1fPStbe119XFx8OzonXCIsPC4+Lz8iKQotICAgICAgICAgICAgICAgIC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkFkZFYoXCJjdXN0b21lclwiKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5Qcm9wZXJ0eShcImN1c3RvbWVyX2lkXCIsNTAxKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5Qcm9wZXJ0eShcIm5hbWVcIixcIkZvbyBCYXJcIikiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuUHJvcGVydHkoXCJhZ2VcIiwyNSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuUHJvcGVydHkoXCJzcGVjaWFsXCIsXCJgfiFAIyQlXiYqKCktXz0rW3tdfVxcXFx8OzonXFxcIiw8Lj4vP1wiKSIsCi0gICAgICAgICAgICAgICAgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVZlcnRleEFuZEVkZ2UoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBpZDEgPSAiY3VzdG9tZXI6MTA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwIzkwIjsgLy8gY3VzdG9tZXI6MTA6Zm9vIGJhciAkMTAwIzkwCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXgxID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRMYWJlbCgiY3VzdG9tZXIiKS5zZXRJZChpZDEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0MSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KHZlcnRleDEpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChuZXcgVmVydGV4KCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwiY3VzdG9tZXI6MTA6Zm9vIGJhciAkMTAwIzkwXCIsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwiY3VzdG9tZXJcIikpIiwKLSAgICAgICAgICAgICAgICBzY3JpcHQxKTsKLQotICAgICAgICBmaW5hbCBPYmplY3QgaWQyID0gInVzZXI6MjA6Zm9vXFx1MDAyMGJhclxcdTAwNWNcXHUwMDIybXJcXHUwMDVjXFx1MDAyMlxcdTAwMjQxMDAwIzUwIjsgLy8gdXNlcjoyMDpmb29cdTAwMjBiYXJcdTAwNWNcdTAwMjJtclx1MDA1Y1x1MDAyMlx1MDAyNDEwMDAjNTAKLSAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleDIgPSBEZXRhY2hlZFZlcnRleC5idWlsZCgpLnNldExhYmVsKCJ1c2VyIikuc2V0SWQoaWQyKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdDIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCh2ZXJ0ZXgyKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QobmV3IFZlcnRleCgiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJcInVzZXI6MjA6Zm9vXFxcXHUwMDIwYmFyXFxcXHUwMDVjXFxcXHUwMDIybXJcXFxcdTAwNWNcXFxcdTAwMjJcXFxcdTAwMjQxMDAwIzUwXCIsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwidXNlclwiKSkiLAotICAgICAgICAgICAgICAgIHNjcmlwdDIpOwotCi0gICAgICAgIGZpbmFsIE9iamVjdCBpZDMgPSAia25vd3M6MzA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwOlxcdTAwMjBcXHUwMDI0NTAwIzcwIjsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gRGV0YWNoZWRFZGdlLmJ1aWxkKCkuc2V0TGFiZWwoImtub3dzIikuc2V0SWQoaWQzKQotICAgICAgICAgICAgICAgIC5zZXRPdXRWKChEZXRhY2hlZFZlcnRleCkgdmVydGV4MSkKLSAgICAgICAgICAgICAgICAuc2V0SW5WKChEZXRhY2hlZFZlcnRleCkgdmVydGV4MikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQzID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoZWRnZSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0KCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBFZGdlKFwia25vd3M6MzA6Zm9vIGJhciAkMTAwOlxcXFx1MDAyMFxcXFx1MDAyNDUwMCM3MFwiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgVmVydGV4KFwiY3VzdG9tZXI6MTA6Zm9vIGJhciAkMTAwIzkwXCIsIFwiY3VzdG9tZXJcIiksICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwia25vd3NcIiwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibmV3IFZlcnRleChcInVzZXI6MjA6Zm9vXFxcXHUwMDIwYmFyXFxcXHUwMDVjXFxcXHUwMDIybXJcXFxcdTAwNWNcXFxcdTAwMjJcXFxcdTAwMjQxMDAwIzUwXCIsIFwidXNlclwiKSkpIiwKLSAgICAgICAgICAgICAgICBzY3JpcHQzKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0NCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuYWRkRSgia25vd3MiKS5mcm9tKHZlcnRleDEpLnRvKHZlcnRleDIpLnByb3BlcnR5KCJ3aGVuIiwgIjIwMTgvMDkvMjEiKQotICAgICAgICAgICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkFkZEUoXCJrbm93c1wiKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5Gcm9tKG5ldyBWZXJ0ZXgoXCJjdXN0b21lcjoxMDpmb28gYmFyICQxMDAjOTBcIiwgXCJjdXN0b21lclwiKSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuVG8obmV3IFZlcnRleChcInVzZXI6MjA6Zm9vXFxcXHUwMDIwYmFyXFxcXHUwMDVjXFxcXHUwMDIybXJcXFxcdTAwNWNcXFxcdTAwMjJcXFxcdTAwMjQxMDAwIzUwXCIsIFwidXNlclwiKSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuUHJvcGVydHkoXCJ3aGVuXCIsXCIyMDE4LzA5LzIxXCIpIiwKLSAgICAgICAgICAgICAgICBzY3JpcHQ0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVN0cmluZ0Z1bmN0aW9uV2l0aEFuZFdpdGhvdXRTY29wZXMoKXsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdCgxKS5Bc1N0cmluZygpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgxKS5hc1N0cmluZygpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoMSkuQXNTdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KDEpLmFzU3RyaW5nKFNjb3BlLmxvY2FsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5MZW5ndGgoKSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoImhlbGxvIikubGVuZ3RoKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLkxlbmd0aDxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoImhlbGxvIikubGVuZ3RoKFNjb3BlLmxvY2FsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5MVHJpbSgpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5sVHJpbSgpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5MVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoImhlbGxvIikubFRyaW0oU2NvcGUubG9jYWwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlJUcmltKCkiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KCJoZWxsbyIpLnJUcmltKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlJUcmltPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5yVHJpbShTY29wZS5sb2NhbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0KFwiaGVsbG9cIikuVG9VcHBlcigpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS50b1VwcGVyKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlRvVXBwZXI8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KCJoZWxsbyIpLnRvVXBwZXIoU2NvcGUubG9jYWwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlRvTG93ZXIoKSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoImhlbGxvIikudG9Mb3dlcigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5Ub0xvd2VyPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS50b0xvd2VyKFNjb3BlLmxvY2FsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5UcmltKCkiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KCJoZWxsbyIpLnRyaW0oKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0KFwiaGVsbG9cIikuVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoImhlbGxvIikudHJpbShTY29wZS5sb2NhbCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0KFwiaGVsbG9cIikuUmVwbGFjZShcIm9cIixcImFcIikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KCJoZWxsbyIpLnJlcGxhY2UoIm8iLCAiYSIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5SZXBsYWNlPG9iamVjdD4oU2NvcGUuTG9jYWwsXCJvXCIsXCJhXCIpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCAibyIsICJhIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0KFwiaGVsbG9cIikuU3BsaXQoXCJvXCIpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5zcGxpdCgibyIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoXCJoZWxsb1wiKS5TcGxpdDxvYmplY3Q+KFNjb3BlLkxvY2FsLFwib1wiKSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoImhlbGxvIikuc3BsaXQoU2NvcGUubG9jYWwsICJvIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuSW5qZWN0KFwiaGVsbG9cIikuU3Vic3RyaW5nKDEpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5zdWJzdHJpbmcoMSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlN1YnN0cmluZzxvYmplY3Q+KFNjb3BlLkxvY2FsLDEpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5zdWJzdHJpbmcoU2NvcGUubG9jYWwsIDEpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlN1YnN0cmluZygxLDIpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCgiaGVsbG8iKS5zdWJzdHJpbmcoMSwgMikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChcImhlbGxvXCIpLlN1YnN0cmluZzxvYmplY3Q+KFNjb3BlLkxvY2FsLDEsMikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KCJoZWxsbyIpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgMSwgMikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVR4KCkgewotICAgICAgICBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoR3JhcGhPcC5UWF9DT01NSVQuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5UeCgpLkNvbW1pdCgpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoR3JhcGhPcC5UWF9ST0xMQkFDSy5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlR4KCkuUm9sbGJhY2soKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydFRyYW5zbGF0aW9uKGZpbmFsIFN0cmluZyBleHBlY3RlZFRyYW5zbGF0aW9uLCBmaW5hbCBPYmplY3QuLi4gb2JqcykgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3Qob2JqcykuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZvcm1hdCgiZy5JbmplY3QoJXMpIiwgZXhwZWN0ZWRUcmFuc2xhdGlvbiksIHNjcmlwdCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0dvbGFuZ1RyYW5zbGF0b3JUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvR29sYW5nVHJhbnNsYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU1ZWYzYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvR29sYW5nVHJhbnNsYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy50ZXh0LlN0cmluZ0VzY2FwZVV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU2VlZFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaGFzTGFiZWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluRTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkRhdGV0aW1lSGVscGVyLmRhdGV0aW1lOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotcHVibGljIGNsYXNzIEdvbGFuZ1RyYW5zbGF0b3JUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aEVtYmVkZGVkKEVtcHR5R3JhcGguaW5zdGFuY2UoKSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBHb2xhbmdUcmFuc2xhdG9yLm9mKCJnIik7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVWYWxpZFRvU3RyaW5nKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoInRyYW5zbGF0b3JbaDpncmVtbGluLWdvXSIsIEdvbGFuZ1RyYW5zbGF0b3Iub2YoImgiKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZU9wdGlvbigpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLCBncmVtbGluQXNHbyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVDYXJkaW5hbGl0eSgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5saXN0LCAibmFtZSIsICJtYXJrbyIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwgZ3JlbWxpbkFzR28pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlQ2FyZGluYWxpdHlWYWx1ZSgpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChncmVtbGluZ28uQ2FyZGluYWxpdHlWYWx1ZS5TZXQoXCJ0ZXN0XCIpKSIsIHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuaW5qZWN0KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNldCgidGVzdCIpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlTXVsdGlsaW5lU3RyaW5ncygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5hZGRWKCkucHJvcGVydHkoInRleHQiLCAiYSIgKyBTeXN0ZW0ubGluZVNlcGFyYXRvcigpICsgIlwiYW5kXCIiICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSArICJiIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgZXNjYXBlZFNlcGFyYXRvciA9IFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUphdmEoU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBleHBlY3RlZCA9ICJnLkFkZFYoKS5Qcm9wZXJ0eShcInRleHRcIiwgXCJhIiArIGVzY2FwZWRTZXBhcmF0b3IgKyBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVKYXZhKCJcImFuZFwiIikgKyBlc2NhcGVkU2VwYXJhdG9yICsgImJcIikiOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGdyZW1saW5Bc0dvKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNoaWxkVHJhdmVyc2FscygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLgotICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUob3V0RSgpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLldoZXJlKGdyZW1saW5nby5UX18uT3V0RSgpKSIsIGdyZW1saW5Bc0dvKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUdvTmFtZWRTdGVwcygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLgotICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUob3V0RSgpLmNvdW50KCkuaXMoMikuYW5kKF9fLm5vdChpbkUoKS5jb3VudCgpLmlzKDMpKSkpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5PdXRFKCkuQ291bnQoKS5JcygyKS5BbmQoZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JbkUoKS5Db3VudCgpLklzKDMpKSkpIiwgZ3JlbWxpbkFzR28pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlU3RyYXRlZ2llcygpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZWFkT25seVN0cmF0ZWd5KCksIGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIFZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhc0xhYmVsKFwicGVyc29uXCIpfSksIGdyZW1saW5nby5TZWVkU3RyYXRlZ3koZ3JlbWxpbmdvLlNlZWRTdHJhdGVneUNvbmZpZ3tTZWVkOiA5OTk5OTl9KSkuVigpLkhhcyhcIm5hbWVcIikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5pbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuY2hlY2tBZGphY2VudFZlcnRpY2VzKGZhbHNlKS52ZXJ0aWNlcyhoYXNMYWJlbCgicGVyc29uIikpLmNyZWF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWVkU3RyYXRlZ3kuYnVpbGQoKS5zZWVkKDk5OTk5OSkuY3JlYXRlKCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgVigpLmhhcygibmFtZSIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVMYW1iZGFzKCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IGcud2l0aFNpZGVFZmZlY3QoImxlbmd0aFN1bSIsIDApLndpdGhTYWNrKDEpCi0gICAgICAgICAgICAgICAgLlYoKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoTGFtYmRhLnByZWRpY2F0ZSgieCAtPiB4LmdldCgpLmxhYmVsKCkgPT0gJ3BlcnNvbiciLCAiZ3JlbWxpbi1ncm9vdnkiKSkKLSAgICAgICAgICAgICAgICAuZmxhdE1hcChMYW1iZGEuZnVuY3Rpb24oIml0LmdldCgpLnZlcnRpY2VzKERpcmVjdGlvbi5PVVQpIiwgImdyZW1saW4tZ3Jvb3Z5IikpCi0gICAgICAgICAgICAgICAgLm1hcChMYW1iZGEuPFRyYXZlcnNlcjxPYmplY3Q+LCBJbnRlZ2VyPmZ1bmN0aW9uKCJ4IC0+IHggOiBsZW4oeC5nZXQoKS52YWx1ZSgnbmFtZScpKSIsICJncmVtbGluLWdyb292eSIpKQotICAgICAgICAgICAgICAgIC5zaWRlRWZmZWN0KExhbWJkYS5jb25zdW1lcigieCAtPiB4LnNpZGVFZmZlY3RzKFwibGVuZ3RoU3VtXCIsIHguc2lkZUVmZmVjdHMoJ2xlbmd0aFN1bScpICsgeC5nZXQoKSkgICAgIiwgImdyZW1saW4tZ3Jvb3Z5IikpCi0gICAgICAgICAgICAgICAgLm9yZGVyKCkuYnkoTGFtYmRhLmNvbXBhcmF0b3IoImEsYiAtPiBhID09IGIgPyAwIDogKGEgPiBiKSA/IDEgOiAtMSkiLCAiZ3JlbWxpbi1ncm9vdnkiKSkKLSAgICAgICAgICAgICAgICAuc2FjayhMYW1iZGEuYmlGdW5jdGlvbigiYSxiIC0+IGEgKyBiIiwgImdyZW1saW4tZ3Jvb3Z5IikpCi0gICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuV2l0aFNpZGVFZmZlY3QoXCJsZW5ndGhTdW1cIiwgMCkuV2l0aFNhY2soMSkuVigpLiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlcigmZ3JlbWxpbmdvLkxhbWJkYXtTY3JpcHQ6XCJ4IC0+IHguZ2V0KCkubGFiZWwoKSA9PSAncGVyc29uJ1wiLCBMYW5ndWFnZTpcIlwifSkuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiRmxhdE1hcCgmZ3JlbWxpbmdvLkxhbWJkYXtTY3JpcHQ6XCJpdC5nZXQoKS52ZXJ0aWNlcyhEaXJlY3Rpb24uT1VUKVwiLCBMYW5ndWFnZTpcIlwifSkuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiTWFwKCZncmVtbGluZ28uTGFtYmRhe1NjcmlwdDpcInggLT4geCA6IGxlbih4LmdldCgpLnZhbHVlKCduYW1lJykpXCIsIExhbmd1YWdlOlwiXCJ9KS4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJTaWRlRWZmZWN0KCZncmVtbGluZ28uTGFtYmRhe1NjcmlwdDpcInggLT4geC5zaWRlRWZmZWN0cyhcImxlbmd0aFN1bVwiLCB4LnNpZGVFZmZlY3RzKCdsZW5ndGhTdW0nKSArIHguZ2V0KCkpXCIsIExhbmd1YWdlOlwiXCJ9KS4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJPcmRlcigpLkJ5KCZncmVtbGluZ28uTGFtYmRhe1NjcmlwdDpcImEsYiAtPiBhID09IGIgPyAwIDogKGEgPiBiKSA/IDEgOiAtMSlcIiwgTGFuZ3VhZ2U6XCJcIn0pLiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlNhY2soJmdyZW1saW5nby5MYW1iZGF7U2NyaXB0OlwiYSxiIC0+IGEgKyBiXCIsIExhbmd1YWdlOlwiXCJ9KSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoYnl0ZWNvZGUpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUFycmF5T2ZBcnJheSgpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdChbXWludGVyZmFjZXt9e1tdaW50ZXJmYWNle317MSwgMn0sIFtdaW50ZXJmYWNle317MywgNH19KSIsCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoQXJyYXlzLmFzTGlzdChBcnJheXMuYXNMaXN0KDEsMiksQXJyYXlzLmFzTGlzdCgzLDQpKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVR4KCkgewotICAgICAgICBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoR3JhcGhPcC5UWF9DT01NSVQuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5UeCgpLkNvbW1pdCgpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoR3JhcGhPcC5UWF9ST0xMQkFDSy5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlR4KCkuUm9sbGJhY2soKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVPZmZzZXREYXRlVGltZVVUQygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5pbmplY3QoZGF0ZXRpbWUoIjIwMjMtMDgtMDJUMDE6MjM6NDUuNjc4WiIpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDgsIDIsIDEsIDIzLCA0NSwgNjc4MDAwMDAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkiLCBncmVtbGluQXNHbyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVPZmZzZXREYXRlVGltZSgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0dvID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5pbmplY3QoZGF0ZXRpbWUoIjIwMjMtMDgtMDJUMDE6MjM6NDUuNjc4LTA3OjMwIikpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLkluamVjdCh0aW1lLkRhdGUoMjAyMywgOCwgMiwgMSwgMjMsIDQ1LCA2NzgwMDAwMDAsIHRpbWUuRml4ZWRab25lKFwiVVRDLTA3OjMwXCIsIC0yNzAwMCkpIiwgZ3JlbWxpbkFzR28pOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMmY4YWUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUG9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY3JpcHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VWZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS50aW1lLlpvbmVkRGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKLQotaW1wb3J0IHN0YXRpYyBqYXZhLnRpbWUuWm9uZU9mZnNldC5VVEM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaGFzTGFiZWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgR3Jvb3Z5VHJhbnNsYXRvclRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEdyb292eVRyYW5zbGF0b3Iub2YoImciKTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlU3RyYXRlZ2llcygpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuVigpLmhhcyhcIm5hbWVcIikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5pbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoaGFzTGFiZWwoInBlcnNvbiIpKS5jcmVhdGUoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBWKCkuaGFzKCJuYW1lIikpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNvbmZ1c2luZ1NhY2tzKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LERvdWJsZT4gdENvbnN0YW50VW5hcnkgPSBnLndpdGhTYWNrKDEuMCwgTGFtYmRhLnVuYXJ5T3BlcmF0b3IoIml0ICsgMSIpKS5WKCkuc2FjaygpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0Q29uc3RhbnRVbmFyeSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRDb25zdGFudFVuYXJ5KS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLndpdGhTYWNrKDEuMGQse2l0ICsgMX0pLlYoKS5zYWNrKCkiLCBzY3JpcHRDb25zdGFudFVuYXJ5KTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LERvdWJsZT4gdFN1cHBsaWVyVW5hcnkgPSBnLndpdGhTYWNrKExhbWJkYS5zdXBwbGllcigiMS4wZCIpLCBMYW1iZGEuPERvdWJsZT51bmFyeU9wZXJhdG9yKCJpdCArIDEiKSkuVigpLnNhY2soKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdFN1cHBsaWVyVW5hcnkgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0U3VwcGxpZXJVbmFyeSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy53aXRoU2Fjayh7MS4wZH0se2l0ICsgMX0pLlYoKS5zYWNrKCkiLCBzY3JpcHRTdXBwbGllclVuYXJ5KTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LERvdWJsZT4gdENvbnN0YW50QmluYXJ5ID0gZy53aXRoU2FjaygxLjAsIExhbWJkYS5iaW5hcnlPcGVyYXRvcigieCx5IC0+IHggKyB5ICsgMSIpKS5WKCkuc2FjaygpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0Q29uc3RhbnRCaW5hcnkgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSh0Q29uc3RhbnRCaW5hcnkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcud2l0aFNhY2soMS4wZCx7eCx5IC0+IHggKyB5ICsgMX0pLlYoKS5zYWNrKCkiLCBzY3JpcHRDb25zdGFudEJpbmFyeSk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCxEb3VibGU+IHRTdXBwbGllckJpbmFyeSA9IGcud2l0aFNhY2soTGFtYmRhLnN1cHBsaWVyKCIxLjBkIiksIExhbWJkYS48RG91YmxlPmJpbmFyeU9wZXJhdG9yKCJ4LHkgLT4geCArIHkgKyAxIikpLlYoKS5zYWNrKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHRTdXBwbGllckJpbmFyeSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKHRTdXBwbGllckJpbmFyeSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy53aXRoU2Fjayh7MS4wZH0se3gseSAtPiB4ICsgeSArIDF9KS5WKCkuc2FjaygpIiwgc2NyaXB0U3VwcGxpZXJCaW5hcnkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlU3RyaW5nU3VwcGxpZXJMYW1iZGFzKCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsIEludGVnZXI+IHQgPSBnLndpdGhTaWRlRWZmZWN0KCJsZW5ndGhTdW0iLCAwKS53aXRoU2FjaygxKQotICAgICAgICAgICAgICAgIC5WKCkKLSAgICAgICAgICAgICAgICAuZmlsdGVyKExhbWJkYS5wcmVkaWNhdGUoIml0LmdldCgpLmxhYmVsKCkuZXF1YWxzKCdwZXJzb24nKSIpKQotICAgICAgICAgICAgICAgIC5mbGF0TWFwKExhbWJkYS5mdW5jdGlvbigiaXQuZ2V0KCkudmVydGljZXMoRGlyZWN0aW9uLk9VVCkiKSkKLSAgICAgICAgICAgICAgICAubWFwKExhbWJkYS48VHJhdmVyc2VyPE9iamVjdD4sIEludGVnZXI+ZnVuY3Rpb24oIml0LmdldCgpLnZhbHVlKCduYW1lJykubGVuZ3RoKCkiKSkKLSAgICAgICAgICAgICAgICAuc2lkZUVmZmVjdChMYW1iZGEuY29uc3VtZXIoInsgeCAtPiB4LnNpZGVFZmZlY3RzKFwibGVuZ3RoU3VtXCIsIHguPEludGVnZXI+c2lkZUVmZmVjdHMoJ2xlbmd0aFN1bScpICsgeC5nZXQoKSkgfSIpKQotICAgICAgICAgICAgICAgIC5vcmRlcigpLmJ5KExhbWJkYS5jb21wYXJhdG9yKCJhLGIgLT4gYSA8PT4gYiIpKQotICAgICAgICAgICAgICAgIC5zYWNrKExhbWJkYS5iaUZ1bmN0aW9uKCJ7IGEsYiAtPiBhICsgYiB9IikpCi0gICAgICAgICAgICAgICAgLmFzQWRtaW4oKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUodC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCAgICJnLndpdGhTaWRlRWZmZWN0KFwibGVuZ3RoU3VtXCIsKGludCkgMCkud2l0aFNhY2soKGludCkgMSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuVigpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLmZpbHRlcih7aXQuZ2V0KCkubGFiZWwoKS5lcXVhbHMoJ3BlcnNvbicpfSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuZmxhdE1hcCh7aXQuZ2V0KCkudmVydGljZXMoRGlyZWN0aW9uLk9VVCl9KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5tYXAoe2l0LmdldCgpLnZhbHVlKCduYW1lJykubGVuZ3RoKCl9KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5zaWRlRWZmZWN0KHsgeCAtPiB4LnNpZGVFZmZlY3RzKFwibGVuZ3RoU3VtXCIsIHguPEludGVnZXI+c2lkZUVmZmVjdHMoJ2xlbmd0aFN1bScpICsgeC5nZXQoKSkgfSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIub3JkZXIoKS5ieSh7YSxiIC0+IGEgPD0+IGJ9KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5zYWNrKHsgYSxiIC0+IGEgKyBiIH0pIiwKLSAgICAgICAgICAgICAgICBzY3JpcHQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlTWFwcygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLmlkKCkuaXMobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KDMsICIzMiIpOwotICAgICAgICAgICAgcHV0KEFycmF5cy5hc0xpc3QoMSwgMiwgMy4xZCksIDQpOwotICAgICAgICAgICAgcHV0KCJ4IiwgNCk7Ci0gICAgICAgICAgICBwdXQoIit4IiwgOCk7Ci0gICAgICAgIH19KSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuaWQoKS5pcyhbKChpbnQpIDMpOlwiMzJcIiwoWyhpbnQpIDEsIChpbnQpIDIsIDMuMWRdKTooaW50KSA0LFwieFwiOihpbnQpIDQsXCIreFwiOihpbnQpIDhdKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVFbXB0eU1hcHMoKSB7Ci0gICAgICAgIGZpbmFsIEZ1bmN0aW9uIGlkZW50aXR5ID0gbmV3IExhbWJkYS5PbmVBcmdMYW1iZGEoIml0LmdldCgpIiwgImdyZW1saW4tZ3Jvb3Z5Iik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdChDb2xsZWN0aW9ucy5lbXB0eU1hcCgpKS5tYXAoaWRlbnRpdHkpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChbXSkubWFwKHtpdC5nZXQoKX0pIiwgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZURhdGUoKSB7Ci0gICAgICAgIGZpbmFsIE9mZnNldERhdGVUaW1lIGQgPSBPZmZzZXREYXRlVGltZS5vZihMb2NhbERhdGVUaW1lLm9mKDIwMTgsIDAzLCAyMiwgMDAsIDM1LCA0NCwgNzQxMDAwMDAwKSwgVVRDKTsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oU3RyaW5nLmZvcm1hdCgiT2Zmc2V0RGF0ZVRpbWUucGFyc2UoJyVzJykiLCBkKSwgZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVUaW1lc3RhbXAoKSB7Ci0gICAgICAgIGZpbmFsIENhbGVuZGFyIGMgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBjLnNldCgxOTc1LCBDYWxlbmRhci5TRVBURU1CRVIsIDcpOwotICAgICAgICBmaW5hbCBUaW1lc3RhbXAgdCA9IG5ldyBUaW1lc3RhbXAoYy5nZXRUaW1lKCkuZ2V0VGltZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oU3RyaW5nLmZvcm1hdCgibmV3IFRpbWVzdGFtcCglc0wpIiwgdC5nZXRUaW1lKCkpLCB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVV1aWQoKSB7Ci0gICAgICAgIGZpbmFsIFVVSUQgdXVpZCA9IFVVSUQuZnJvbVN0cmluZygiZmZmZmZmZmYtZmQ0OS0xZTRiLTAwMDAtMDAwMDBkNGI4YTFkIik7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKFN0cmluZy5mb3JtYXQoIlVVSUQuZnJvbVN0cmluZygnJXMnKSIsIHV1aWQpLCB1dWlkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNvbHVtbigpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIkNvbHVtbi5rZXlzIiwgQ29sdW1uLmtleXMpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlQ2FyZGluYWxpdHlWYWx1ZSgpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIlZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNldChcInRlc3RcIikiLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zZXQoInRlc3QiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVEYXRlVXNpbmdMYW5ndWFnZVR5cGVUcmFuc2xhdG9yKCkgewotICAgICAgICBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdCA9IEdyb292eVRyYW5zbGF0b3Iub2YoImciLAotICAgICAgICAgICAgICAgIG5ldyBHcm9vdnlUcmFuc2xhdG9yLkxhbmd1YWdlVHlwZVRyYW5zbGF0b3IoZmFsc2UpKTsKLSAgICAgICAgZmluYWwgT2Zmc2V0RGF0ZVRpbWUgZGF0ZSA9IE9mZnNldERhdGVUaW1lLm9mKExvY2FsRGF0ZVRpbWUub2YoMjAxOCwgMDMsIDIyLCAwMCwgMzUsIDQ0LCA3NDEwMDAwMDApLCBVVEMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KGRhdGV0aW1lKCcyMDE4LTAzLTIyVDAwOjM1OjQ0Ljc0MVonKSkiLAotICAgICAgICAgICAgICAgIHQudHJhbnNsYXRlKGcuaW5qZWN0KGRhdGUpKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVWZXJ0ZXhVc2luZ0xhbmd1YWdlVHlwZVRyYW5zbGF0b3IoKSB7Ci0gICAgICAgIGZpbmFsIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvciB0ID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIsCi0gICAgICAgICAgICAgICAgbmV3IEdyb292eVRyYW5zbGF0b3IuTGFuZ3VhZ2VUeXBlVHJhbnNsYXRvcihmYWxzZSkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiZy5hZGRFKFwia25vd3NcIikuZnJvbShuZXcgVmVydGV4KDFJLFwicGVyc29uXCIpKSIsCi0gICAgICAgICAgICAgICAgdC50cmFuc2xhdGUoZy5hZGRFKCJrbm93cyIpLmZyb20obmV3IFJlZmVyZW5jZVZlcnRleCgxLCAicGVyc29uIikpKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVNYXBzVXNpbmdMYW5ndWFnZVR5cGVUcmFuc2xhdG9yKCkgewotICAgICAgICBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdCA9IEdyb292eVRyYW5zbGF0b3Iub2YoImciLAotICAgICAgICAgICAgICAgIG5ldyBHcm9vdnlUcmFuc2xhdG9yLkxhbmd1YWdlVHlwZVRyYW5zbGF0b3IoZmFsc2UpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IHQudHJhbnNsYXRlKGcuVigpLmlkKCkuaXMobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KDMsICIzMiIpOwotICAgICAgICAgICAgcHV0KEFycmF5cy5hc0xpc3QoMSwgMiwgMy4xZCksIDQpOwotICAgICAgICAgICAgcHV0KCJ4IiwgNCk7Ci0gICAgICAgICAgICBwdXQoIit4IiwgOCk7Ci0gICAgICAgIH19KSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuaWQoKS5pcyhbKDNJKTpcIjMyXCIsKFsxSSwgMkksIDMuMURdKTo0SSxcInhcIjo0SSxcIit4XCI6OEldKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVEaXJlY3Rpb24oKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJEaXJlY3Rpb24uQk9USCIsIERpcmVjdGlvbi5CT1RIKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZU9yZGVyKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiT3JkZXIuZGVzYyIsIE9yZGVyLmRlc2MpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlUG9wKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiUG9wLmxhc3QiLCBQb3AubGFzdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVTY29wZSgpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIlNjb3BlLmxvY2FsIiwgU2NvcGUubG9jYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlTmFOKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiRG91YmxlLk5hTiIsIERvdWJsZS5OYU4pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlUG9zSW5mKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiRG91YmxlLlBPU0lUSVZFX0lORklOSVRZIiwgRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZU5lZ0luZigpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIkRvdWJsZS5ORUdBVElWRV9JTkZJTklUWSIsIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRJbmNsdWRlQ3VzdG9tVHlwZVRyYW5zbGF0aW9uRm9yU29tZXRoaW5nU2lsbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU2lsbHlDbGFzcyBub3RTaWxseUVub3VnaCA9IFNpbGx5Q2xhc3MuZnJvbSgibm90IHNpbGx5IGVub3VnaCIsIDEwMCk7Ci0KLSAgICAgICAgLy8gd2l0aG91dCB0eXBlIHRyYW5zbGF0aW9uIHdlIGdldCB1Z2xpbmVzc3MKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdEJhZCA9IHRyYW5zbGF0b3IuCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRlKGcuaW5qZWN0KG5vdFNpbGx5RW5vdWdoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhTdHJpbmcuZm9ybWF0KCJnLmluamVjdCglcykiLCAibm90IHNpbGx5IGVub3VnaDoxMDAiKSwgc2NyaXB0QmFkKTsKLQotICAgICAgICAvLyB3aXRoIHR5cGUgdHJhbnNsYXRpb24gd2UgZ2V0IHZhbGlkIGdyZW1saW4KLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdEdvb2QgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKCJnIiwgbmV3IFNpbGx5Q2xhc3NUcmFuc2xhdG9yKGZhbHNlKSkuCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRlKGcuaW5qZWN0KG5vdFNpbGx5RW5vdWdoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhTdHJpbmcuZm9ybWF0KCJnLmluamVjdChvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuR3Jvb3Z5VHJhbnNsYXRvclRlc3QuU2lsbHlDbGFzcy5mcm9tKCclcycsIChpbnQpICVzKSkiLCBub3RTaWxseUVub3VnaC5nZXRYKCksIG5vdFNpbGx5RW5vdWdoLmdldFkoKSksIHNjcmlwdEdvb2QpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGF2ZVZhbGlkVG9TdHJpbmcoKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygidHJhbnNsYXRvcltoOmdyZW1saW4tZ3Jvb3Z5XSIsIEdyb292eVRyYW5zbGF0b3Iub2YoImgiKS50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEVzY2FwZVN0cmluZ3MoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmFkZFYoImN1c3RvbWVyIikKLSAgICAgICAgICAgICAgICAucHJvcGVydHkoImN1c3RvbWVyX2lkIiwgNTAxTCkKLSAgICAgICAgICAgICAgICAucHJvcGVydHkoIm5hbWUiLCAiRm9vXHUwMDIwQmFyIikKLSAgICAgICAgICAgICAgICAucHJvcGVydHkoImFnZSIsIDI1KQotICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgic3BlY2lhbCIsICJgfiFAIyQlXiYqKCktXz0rW3tdfVxcfDs6J1wiLDwuPi8/IikKLSAgICAgICAgICAgICAgICApLmdldFNjcmlwdCgpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiZy5hZGRWKFwiY3VzdG9tZXJcIikiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIucHJvcGVydHkoXCJjdXN0b21lcl9pZFwiLDUwMUwpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLnByb3BlcnR5KFwibmFtZVwiLFwiRm9vIEJhclwiKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0eShcImFnZVwiLChpbnQpIDI1KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0eShcInNwZWNpYWxcIixcIlwiXCJgfiFAI1xcJCVeJiooKS1fPStbe119XFxcXHw7OidcXFwiLDwuPi8/XCJcIlwiKSIsCi0gICAgICAgICAgICAgICAgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVZlcnRleEFuZEVkZ2UoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBpZDEgPSAiY3VzdG9tZXI6MTA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwIzkwIjsgLy8gY3VzdG9tZXI6MTA6Zm9vIGJhciAkMTAwIzkwCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXgxID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRMYWJlbCgiY3VzdG9tZXIiKS5zZXRJZChpZDEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0MSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KHZlcnRleDEpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChuZXcgUmVmZXJlbmNlVmVydGV4KCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwiY3VzdG9tZXI6MTA6Zm9vIGJhciBcXCQxMDAjOTBcIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJcImN1c3RvbWVyXCIpKSIsCi0gICAgICAgICAgICAgICAgc2NyaXB0MSk7Ci0KLSAgICAgICAgZmluYWwgT2JqZWN0IGlkMiA9ICJ1c2VyOjIwOmZvb1xcdTAwMjBiYXJcXHUwMDVjXFx1MDAyMm1yXFx1MDA1Y1xcdTAwMjJcXHUwMDI0MTAwMCM1MCI7IC8vIHVzZXI6MjA6Zm9vXHUwMDIwYmFyXHUwMDVjXHUwMDIybXJcdTAwNWNcdTAwMjJcdTAwMjQxMDAwIzUwCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXgyID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRMYWJlbCgidXNlciIpLnNldElkKGlkMikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQyID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QodmVydGV4MikpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG5ldyBSZWZlcmVuY2VWZXJ0ZXgoIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiXCJ1c2VyOjIwOmZvb1xcXFx1MDAyMGJhclxcXFx1MDA1Y1xcXFx1MDAyMm1yXFxcXHUwMDVjXFxcXHUwMDIyXFxcXHUwMDI0MTAwMCM1MFwiLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwidXNlclwiKSkiLAotICAgICAgICAgICAgICAgIHNjcmlwdDIpOwotCi0gICAgICAgIGZpbmFsIE9iamVjdCBpZDMgPSAia25vd3M6MzA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwOlxcdTAwMjBcXHUwMDI0NTAwIzcwIjsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gRGV0YWNoZWRFZGdlLmJ1aWxkKCkuc2V0TGFiZWwoImtub3dzIikuc2V0SWQoaWQzKQotICAgICAgICAgICAgICAgIC5zZXRPdXRWKChEZXRhY2hlZFZlcnRleCkgdmVydGV4MSkKLSAgICAgICAgICAgICAgICAuc2V0SW5WKChEZXRhY2hlZFZlcnRleCkgdmVydGV4MikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQzID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoZWRnZSkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG5ldyBSZWZlcmVuY2VFZGdlKCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwia25vd3M6MzA6Zm9vIGJhciBcXCQxMDA6XFxcXHUwMDIwXFxcXHUwMDI0NTAwIzcwXCIsIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiXCJrbm93c1wiLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBSZWZlcmVuY2VWZXJ0ZXgoXCJ1c2VyOjIwOmZvb1xcXFx1MDAyMGJhclxcXFx1MDA1Y1xcXFx1MDAyMm1yXFxcXHUwMDVjXFxcXHUwMDIyXFxcXHUwMDI0MTAwMCM1MFwiLFwidXNlclwiKSwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgUmVmZXJlbmNlVmVydGV4KFwiY3VzdG9tZXI6MTA6Zm9vIGJhciBcXCQxMDAjOTBcIixcImN1c3RvbWVyXCIpKSkiLAotICAgICAgICAgICAgICAgIHNjcmlwdDMpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQ0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5hZGRFKCJrbm93cyIpLmZyb20odmVydGV4MSkudG8odmVydGV4MikucHJvcGVydHkoIndoZW4iLCAiMjAxOC8wOS8yMSIpCi0gICAgICAgICAgICAgICAgICAgICAgICApLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuYWRkRShcImtub3dzXCIpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLmZyb20obmV3IFJlZmVyZW5jZVZlcnRleChcImN1c3RvbWVyOjEwOmZvbyBiYXIgXFwkMTAwIzkwXCIsXCJjdXN0b21lclwiKSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIudG8obmV3IFJlZmVyZW5jZVZlcnRleChcInVzZXI6MjA6Zm9vXFxcXHUwMDIwYmFyXFxcXHUwMDVjXFxcXHUwMDIybXJcXFxcdTAwNWNcXFxcdTAwMjJcXFxcdTAwMjQxMDAwIzUwXCIsXCJ1c2VyXCIpKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0eShcIndoZW5cIixcIjIwMTgvMDkvMjFcIikiLAotICAgICAgICAgICAgICAgIHNjcmlwdDQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVHgoKSB7Ci0gICAgICAgIFN0cmluZyBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShHcmFwaE9wLlRYX0NPTU1JVC5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLnR4KCkuY29tbWl0KCkiLCBzY3JpcHQpOwotICAgICAgICBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShHcmFwaE9wLlRYX1JPTExCQUNLLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcudHgoKS5yb2xsYmFjaygpIiwgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0VHJhbnNsYXRpb24oZmluYWwgU3RyaW5nIGV4cGVjdGVkVHJhbnNsYXRpb24sIGZpbmFsIE9iamVjdC4uLiBvYmpzKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdChvYmpzKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhTdHJpbmcuZm9ybWF0KCJnLmluamVjdCglcykiLCBleHBlY3RlZFRyYW5zbGF0aW9uKSwgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNpbGx5Q2xhc3MgewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHg7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgaW50IHk7Ci0KLSAgICAgICAgcHJpdmF0ZSBTaWxseUNsYXNzKGZpbmFsIFN0cmluZyB4LCBmaW5hbCBpbnQgeSkgewotICAgICAgICAgICAgdGhpcy54ID0geDsKLSAgICAgICAgICAgIHRoaXMueSA9IHk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RhdGljIFNpbGx5Q2xhc3MgZnJvbShmaW5hbCBTdHJpbmcgeCwgZmluYWwgaW50IHkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU2lsbHlDbGFzcyh4LCB5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0WCgpIHsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRZKCkgewotICAgICAgICAgICAgcmV0dXJuIHk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiB4ICsgIjoiICsgU3RyaW5nLnZhbHVlT2YoeSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNpbGx5Q2xhc3NUcmFuc2xhdG9yIGV4dGVuZHMgR3Jvb3Z5VHJhbnNsYXRvci5EZWZhdWx0VHlwZVRyYW5zbGF0b3IgewotCi0gICAgICAgIHB1YmxpYyBTaWxseUNsYXNzVHJhbnNsYXRvcihmaW5hbCBib29sZWFuIHdpdGhQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBzdXBlcih3aXRoUGFyYW1ldGVycyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIFNjcmlwdCBjb252ZXJ0VG9TY3JpcHQoZmluYWwgT2JqZWN0IG9iamVjdCkgewotICAgICAgICAgICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNpbGx5Q2xhc3MpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2NyaXB0LmFwcGVuZChTdHJpbmcuZm9ybWF0KCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuR3Jvb3Z5VHJhbnNsYXRvclRlc3QuU2lsbHlDbGFzcy5mcm9tKCclcycsIChpbnQpICVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKFNpbGx5Q2xhc3MpIG9iamVjdCkuZ2V0WCgpLCAoKFNpbGx5Q2xhc3MpIG9iamVjdCkuZ2V0WSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5jb252ZXJ0VG9TY3JpcHQob2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9KYXZhc2NyaXB0VHJhbnNsYXRvclRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9KYXZhc2NyaXB0VHJhbnNsYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdkNDVlZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3RyYW5zbGF0b3IvSmF2YXNjcmlwdFRyYW5zbGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudHJhbnNsYXRvcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUG9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlNlZWRTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS50aW1lLlpvbmVPZmZzZXQuVVRDOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhc0xhYmVsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXZhc2NyaXB0VHJhbnNsYXRvclRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEphdmFzY3JpcHRUcmFuc2xhdG9yLm9mKCJnIik7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVN0cmF0ZWdpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSx2ZXJ0aWNlczpfXy5oYXNMYWJlbChcInBlcnNvblwiKX0pLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6OTk5OTk5fSkpLlYoKS5oYXMoXCJuYW1lXCIpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5jaGVja0FkamFjZW50VmVydGljZXMoZmFsc2UpLnZlcnRpY2VzKGhhc0xhYmVsKCJwZXJzb24iKSkuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTZWVkU3RyYXRlZ3kuYnVpbGQoKS5zZWVkKDk5OTk5OSkuY3JlYXRlKCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgVigpLmhhcygibmFtZSIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVNYXBzKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuaWQoKS5pcyhuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoMywgIjMyIik7Ci0gICAgICAgICAgICBwdXQoQXJyYXlzLmFzTGlzdCgxLCAyLCAzLjFkKSwgNCk7Ci0gICAgICAgIH19KS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuaWQoKS5pcyhuZXcgTWFwKFtbMyxcIjMyXCJdLFtbMSwgMiwgMy4xXSw0XV0pKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVEYXRlKCkgewotICAgICAgICBmaW5hbCBPZmZzZXREYXRlVGltZSBkID0gT2Zmc2V0RGF0ZVRpbWUub2YoTG9jYWxEYXRlVGltZS5vZigyMDE4LCAwMywgMjIsIDAwLCAzNSwgNDQsIDc0MTAwMDAwMCksIFVUQyk7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKFN0cmluZy5mb3JtYXQoIm5ldyBEYXRlKCclcycpIiwgZCksIGQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVXVpZCgpIHsKLSAgICAgICAgZmluYWwgVVVJRCB1dWlkID0gVVVJRC5mcm9tU3RyaW5nKCJmZmZmZmZmZi1mZDQ5LTFlNGItMDAwMC0wMDAwMGQ0YjhhMWQiKTsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oU3RyaW5nLmZvcm1hdCgidXVpZC5wYXJzZSgnJXMnKSIsIHV1aWQpLCB1dWlkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNvbHVtbigpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIkNvbHVtbi5rZXlzIiwgQ29sdW1uLmtleXMpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlRGlyZWN0aW9uKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiRGlyZWN0aW9uLkJPVEgiLCBEaXJlY3Rpb24uQk9USCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVPcmRlcigpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIk9yZGVyLmRlc2MiLCBPcmRlci5kZXNjKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVBvcCgpIHsKLSAgICAgICAgYXNzZXJ0VHJhbnNsYXRpb24oIlBvcC5sYXN0IiwgUG9wLmxhc3QpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVGV4dFAoKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJUZXh0UC5jb250YWluaW5nKFwiYXJrXCIpIiwgVGV4dFAuY29udGFpbmluZygiYXJrIikpOwotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiVGV4dFAucmVnZXgoXCJhcmtcIikiLCBUZXh0UC5yZWdleCgiYXJrIikpOwotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiVGV4dFAubm90UmVnZXgoXCJhcmtcIikiLCBUZXh0UC5ub3RSZWdleCgiYXJrIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlU2NvcGUoKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJTY29wZS5sb2NhbCIsIFNjb3BlLmxvY2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNhcmRpbmFsaXR5VmFsdWUoKSB7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJDYXJkaW5hbGl0eVZhbHVlLnNldChcInRlc3RcIikiLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zZXQoInRlc3QiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYXZlVmFsaWRUb1N0cmluZygpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdG9yW2g6Z3JlbWxpbi1qYXZhc2NyaXB0XSIsIEphdmFzY3JpcHRUcmFuc2xhdG9yLm9mKCJoIikudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYXZlTnVsbCgpIHsKLS8vICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG51bGwsbnVsbCkiLCB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdChudWxsLCBudWxsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotLy8gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkiLCB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVihudWxsKSIsIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVihudWxsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVihudWxsLG51bGwpIiwgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKG51bGwsIG51bGwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5FKCkiLCB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLkUoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuRShudWxsKSIsIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuRShudWxsKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuRShudWxsLG51bGwpIiwgdHJhbnNsYXRvci50cmFuc2xhdGUoZy5FKG51bGwsIG51bGwpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFc2NhcGVTdHJpbmdzKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5hZGRWKCJjdXN0b21lciIpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJjdXN0b21lcl9pZCIsIDUwMUwpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJuYW1lIiwgIkZvb1x1MDAyMEJhciIpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJhZ2UiLCAyNSkKLSAgICAgICAgICAgICAgICAucHJvcGVydHkoInNwZWNpYWwiLCAiYH4hQCMkJV4mKigpLV89K1t7XX1cXHw7OidcIiw8Lj4vPyIpCi0gICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuYWRkVihcImN1c3RvbWVyXCIpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLnByb3BlcnR5KFwiY3VzdG9tZXJfaWRcIiw1MDEpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLnByb3BlcnR5KFwibmFtZVwiLFwiRm9vIEJhclwiKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0eShcImFnZVwiLDI1KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5wcm9wZXJ0eShcInNwZWNpYWxcIixcIlwiXCJgfiFAI1xcJCVeJiooKS1fPStbe119XFxcXHw7OidcXFwiLDwuPi8/XCJcIlwiKSIsCi0gICAgICAgICAgICAgICAgc2NyaXB0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVZlcnRleEFuZEVkZ2UoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBpZDEgPSAiY3VzdG9tZXI6MTA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwIzkwIjsgLy8gY3VzdG9tZXI6MTA6Zm9vIGJhciAkMTAwIzkwCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXgxID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRMYWJlbCgiY3VzdG9tZXIiKS5zZXRJZChpZDEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0MSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KHZlcnRleDEpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChuZXcgVmVydGV4KCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwiY3VzdG9tZXI6MTA6Zm9vIGJhciBcXCQxMDAjOTBcIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJcImN1c3RvbWVyXCIsIG51bGwpKSIsCi0gICAgICAgICAgICAgICAgc2NyaXB0MSk7Ci0KLSAgICAgICAgZmluYWwgT2JqZWN0IGlkMiA9ICJ1c2VyOjIwOmZvb1xcdTAwMjBiYXJcXHUwMDVjXFx1MDAyMm1yXFx1MDA1Y1xcdTAwMjJcXHUwMDI0MTAwMCM1MCI7IC8vIHVzZXI6MjA6Zm9vXHUwMDIwYmFyXHUwMDVjXHUwMDIybXJcdTAwNWNcdTAwMjJcdTAwMjQxMDAwIzUwCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXgyID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRMYWJlbCgidXNlciIpLnNldElkKGlkMikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQyID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QodmVydGV4MikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG5ldyBWZXJ0ZXgoIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiXCJ1c2VyOjIwOmZvb1xcXFx1MDAyMGJhclxcXFx1MDA1Y1xcXFx1MDAyMm1yXFxcXHUwMDVjXFxcXHUwMDIyXFxcXHUwMDI0MTAwMCM1MFwiLCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIlwidXNlclwiLCBudWxsKSkiLAotICAgICAgICAgICAgICAgIHNjcmlwdDIpOwotCi0gICAgICAgIGZpbmFsIE9iamVjdCBpZDMgPSAia25vd3M6MzA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwOlxcdTAwMjBcXHUwMDI0NTAwIzcwIjsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gRGV0YWNoZWRFZGdlLmJ1aWxkKCkuc2V0TGFiZWwoImtub3dzIikuc2V0SWQoaWQzKQotICAgICAgICAgICAgICAgIC5zZXRPdXRWKChEZXRhY2hlZFZlcnRleCkgdmVydGV4MSkKLSAgICAgICAgICAgICAgICAuc2V0SW5WKChEZXRhY2hlZFZlcnRleCkgdmVydGV4MikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQzID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3QoZWRnZSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBFZGdlKFwia25vd3M6MzA6Zm9vIGJhciBcXCQxMDA6XFxcXHUwMDIwXFxcXHUwMDI0NTAwIzcwXCIsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm5ldyBWZXJ0ZXgoXCJjdXN0b21lcjoxMDpmb28gYmFyIFxcJDEwMCM5MFwiLFwiY3VzdG9tZXJcIiwgbnVsbCksIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiXCJrbm93c1wiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgVmVydGV4KFwidXNlcjoyMDpmb29cXFxcdTAwMjBiYXJcXFxcdTAwNWNcXFxcdTAwMjJtclxcXFx1MDA1Y1xcXFx1MDAyMlxcXFx1MDAyNDEwMDAjNTBcIixcInVzZXJcIixudWxsKSwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJudWxsKSkiLAotICAgICAgICAgICAgICAgIHNjcmlwdDMpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQ0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5hZGRFKCJrbm93cyIpLmZyb20odmVydGV4MSkudG8odmVydGV4MikucHJvcGVydHkoIndoZW4iLCAiMjAxOC8wOS8yMSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuYWRkRShcImtub3dzXCIpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLmZyb21fKG5ldyBWZXJ0ZXgoXCJjdXN0b21lcjoxMDpmb28gYmFyIFxcJDEwMCM5MFwiLFwiY3VzdG9tZXJcIiwgbnVsbCkpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLnRvKG5ldyBWZXJ0ZXgoXCJ1c2VyOjIwOmZvb1xcXFx1MDAyMGJhclxcXFx1MDA1Y1xcXFx1MDAyMm1yXFxcXHUwMDVjXFxcXHUwMDIyXFxcXHUwMDI0MTAwMCM1MFwiLFwidXNlclwiLCBudWxsKSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIucHJvcGVydHkoXCJ3aGVuXCIsXCIyMDE4LzA5LzIxXCIpIiwKLSAgICAgICAgICAgICAgICBzY3JpcHQ0KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVR4KCkgewotICAgICAgICBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoR3JhcGhPcC5UWF9DT01NSVQuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy50eCgpLmNvbW1pdCgpIiwgc2NyaXB0KTsKLSAgICAgICAgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoR3JhcGhPcC5UWF9ST0xMQkFDSy5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLnR4KCkucm9sbGJhY2soKSIsIHNjcmlwdCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydFRyYW5zbGF0aW9uKGZpbmFsIFN0cmluZyBleHBlY3RlZFRyYW5zbGF0aW9uLCBmaW5hbCBPYmplY3QuLi4gb2JqcykgewotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3Qob2JqcykuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZvcm1hdCgiZy5pbmplY3QoJXMpIiwgZXhwZWN0ZWRUcmFuc2xhdGlvbiksIHNjcmlwdCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL1BhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL1BhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTA2YzcwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9QYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuVHJhbnNsYXRvckN1c3RvbWl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NyaXB0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmF4LnNjcmlwdC5CaW5kaW5nczsKLWltcG9ydCBqYXZheC5zY3JpcHQuU2ltcGxlQmluZGluZ3M7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXNMYWJlbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLS8qKgotICogIHRlc3Qge0BsaW5rIEdyb292eVRyYW5zbGF0b3J9IHdoaWNoIHJldHVybiBwYXJhbWV0ZXJpemVkIHJlc3VsdCwgY292ZXJzOgotICogICAtIHBhcmFtZXRlcml6ZWQgc2NyaXB0IGNoZWNraW5nCi0gKiAgIC0gYmluZGluZyBjaGVja2luZwotICogICAtIGV2YWwgcmVzdWx0IGNoZWNraW5nCi0gKgotICogIDxwPgotICogIHtAbGluayBHcm9vdnlUcmFuc2xhdG9yVGVzdCB9IGlzIHVzZWQgdG8gdGVzdCB7QGxpbmsgR3Jvb3Z5VHJhbnNsYXRvcn0sIGJvdGggdGVzdCBjYXNlcyBsb29rcyB0aGUgc2FtZQotICogIDxwPgotICoKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICogQGF1dGhvciBTdGFyayBBcnlhIChzYW5kc3pob3UuempAYWxpYmFiYS1pbmMuY29tKQotICovCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JUZXN0IHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IEdyb292eVRyYW5zbGF0b3Iub2YoImciLCB0cnVlKTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlU3RyYXRlZ2llcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRFcXVhbHMoImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSxuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IF9hcmdzXzAsIHZlcnRpY2VzOiBfXy5oYXNMYWJlbChfYXJnc18xKSkpLlYoKS5oYXMoX2FyZ3NfMikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5pbnN0YW5jZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoaGFzTGFiZWwoInBlcnNvbiIpKS5jcmVhdGUoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBWKCkuaGFzKCJuYW1lIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1cHBvcnRTdHJpbmdTdXBwbGllckxhbWJkYXMoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsLkFkbWluPFZlcnRleCwgSW50ZWdlcj4gdCA9IGcud2l0aFNpZGVFZmZlY3QoImxlbmd0aFN1bSIsIDApLndpdGhTYWNrKDEpCi0gICAgICAgICAgICAgICAgLlYoKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoTGFtYmRhLnByZWRpY2F0ZSgiaXQuZ2V0KCkubGFiZWwoKS5lcXVhbHMoJ3BlcnNvbicpIikpCi0gICAgICAgICAgICAgICAgLmZsYXRNYXAoTGFtYmRhLmZ1bmN0aW9uKCJpdC5nZXQoKS52ZXJ0aWNlcyhEaXJlY3Rpb24uT1VUKSIpKQotICAgICAgICAgICAgICAgIC5tYXAoTGFtYmRhLjxUcmF2ZXJzZXI8T2JqZWN0PiwgSW50ZWdlcj5mdW5jdGlvbigiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKS5sZW5ndGgoKSIpKQotICAgICAgICAgICAgICAgIC5zaWRlRWZmZWN0KExhbWJkYS5jb25zdW1lcigieyB4IC0+IHguc2lkZUVmZmVjdHMoXCJsZW5ndGhTdW1cIiwgeC48SW50ZWdlcj5zaWRlRWZmZWN0cygnbGVuZ3RoU3VtJykgKyB4LmdldCgpKSB9IikpCi0gICAgICAgICAgICAgICAgLm9yZGVyKCkuYnkoTGFtYmRhLmNvbXBhcmF0b3IoImEsYiAtPiBhIDw9PiBiIikpCi0gICAgICAgICAgICAgICAgLnNhY2soTGFtYmRhLmJpRnVuY3Rpb24oInsgYSxiIC0+IGEgKyBiIH0iKSkKLSAgICAgICAgICAgICAgICAuYXNBZG1pbigpOwotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUodC5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgc2NyaXB0LmdldFBhcmFtZXRlcnMoKS5pZlByZXNlbnQoYmluZGluZ3M6OnB1dEFsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5LCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImxlbmd0aFN1bSIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigwKSwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDEpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhMYW1iZGEucHJlZGljYXRlKCJpdC5nZXQoKS5sYWJlbCgpLmVxdWFscygncGVyc29uJykiKSwgYmluZGluZ3MuZ2V0KCJfYXJnc18zIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTGFtYmRhLmZ1bmN0aW9uKCJpdC5nZXQoKS52ZXJ0aWNlcyhEaXJlY3Rpb24uT1VUKSIpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhMYW1iZGEuPFRyYXZlcnNlcjxPYmplY3Q+LCBJbnRlZ2VyPmZ1bmN0aW9uKCJpdC5nZXQoKS52YWx1ZSgnbmFtZScpLmxlbmd0aCgpIiksIGJpbmRpbmdzLmdldCgiX2FyZ3NfNSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExhbWJkYS5jb25zdW1lcigieyB4IC0+IHguc2lkZUVmZmVjdHMoXCJsZW5ndGhTdW1cIiwgeC48SW50ZWdlcj5zaWRlRWZmZWN0cygnbGVuZ3RoU3VtJykgKyB4LmdldCgpKSB9IiksIGJpbmRpbmdzLmdldCgiX2FyZ3NfNiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExhbWJkYS5jb21wYXJhdG9yKCJhLGIgLT4gYSA8PT4gYiIpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzciKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhMYW1iZGEuYmlGdW5jdGlvbigieyBhLGIgLT4gYSArIGIgfSIpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzgiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy53aXRoU2lkZUVmZmVjdChfYXJnc18wLF9hcmdzXzEpLndpdGhTYWNrKF9hcmdzXzIpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLlYoKSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5maWx0ZXIoX2FyZ3NfMykiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuZmxhdE1hcChfYXJnc180KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5tYXAoX2FyZ3NfNSkiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIuc2lkZUVmZmVjdChfYXJnc182KSIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIi5vcmRlcigpLmJ5KF9hcmdzXzcpIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLnNhY2soX2FyZ3NfOCkiLAotICAgICAgICAgICAgICAgIHNjcmlwdC5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVBcnJheSgpIHsKLSAgICAgICAgZmluYWwgU2NyaXB0IHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLmhhcyhULmlkLCBQLndpdGhpbihuZXcgQXJyYXlMaXN0KCkge3sKLSAgICAgICAgICAgIGFkZCgxKTsKLSAgICAgICAgICAgIGFkZCgyKTsKLSAgICAgICAgICAgIGFkZCgzKTsKLSAgICAgICAgICAgIGFkZCg0KTsKLSAgICAgICAgICAgIGFkZCg1KTsKLSAgICAgICAgfX0pKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIHNjcmlwdC5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgYmluZGluZ3Muc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxKSwgYmluZGluZ3MuZ2V0KCJfYXJnc18wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDIpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzEiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMyksIGJpbmRpbmdzLmdldCgiX2FyZ3NfMiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZig0KSwgYmluZGluZ3MuZ2V0KCJfYXJnc18zIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDUpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuaGFzKFQuaWQsUC53aXRoaW4oW19hcmdzXzAsIF9hcmdzXzEsIF9hcmdzXzIsIF9hcmdzXzMsIF9hcmdzXzRdKSkiLCBzY3JpcHQuZ2V0U2NyaXB0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlU2V0KCkgewotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuaWQoKS5pcyhuZXcgTGlua2VkSGFzaFNldDxPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIGFkZCgzKTsKLSAgICAgICAgICAgIGFkZChBcnJheXMuYXNMaXN0KDEsIDIsIDMuMWQpKTsKLSAgICAgICAgICAgIGFkZCgzKTsKLSAgICAgICAgICAgIGFkZCgiMyIpOwotICAgICAgICB9fSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBzY3JpcHQuZ2V0UGFyYW1ldGVycygpLmlmUHJlc2VudChiaW5kaW5nczo6cHV0QWxsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGJpbmRpbmdzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMyksIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxKSwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDIpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhEb3VibGUudmFsdWVPZigzLjEpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiMyIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfNCIpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLmlkKCkuaXMoW19hcmdzXzAsIFtfYXJnc18xLCBfYXJnc18yLCBfYXJnc18zXSwgX2FyZ3NfNF0gYXMgU2V0KSIsIHNjcmlwdC5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVNYXBzKCkgewotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkuaWQoKS5pcyhuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoMywgIjMyIik7Ci0gICAgICAgICAgICBwdXQoQXJyYXlzLmFzTGlzdCgxLCAyLCAzLjFkKSwgNCk7Ci0gICAgICAgIH19KS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIHNjcmlwdC5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgYmluZGluZ3Muc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigzKSwgYmluZGluZ3MuZ2V0KCJfYXJnc18wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjMyIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDEpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMiksIGJpbmRpbmdzLmdldCgiX2FyZ3NfMyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKERvdWJsZS52YWx1ZU9mKDMuMSksIGJpbmRpbmdzLmdldCgiX2FyZ3NfNCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZig0KSwgYmluZGluZ3MuZ2V0KCJfYXJnc181IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLmlkKCkuaXMoWyhfYXJnc18wKTpfYXJnc18xLChbX2FyZ3NfMiwgX2FyZ3NfMywgX2FyZ3NfNF0pOl9hcmdzXzVdKSIsIHNjcmlwdC5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVFbXB0eU1hcHMoKSB7Ci0gICAgICAgIGZpbmFsIEZ1bmN0aW9uIGlkZW50aXR5ID0gbmV3IExhbWJkYS5PbmVBcmdMYW1iZGEoIml0LmdldCgpIiwgImdyZW1saW4tZ3Jvb3Z5Iik7Ci0gICAgICAgIGZpbmFsIFNjcmlwdCBzY3JpcHQgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdChDb2xsZWN0aW9ucy5lbXB0eU1hcCgpKS5tYXAoaWRlbnRpdHkpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgc2NyaXB0LmdldFBhcmFtZXRlcnMoKS5pZlByZXNlbnQoYmluZGluZ3M6OnB1dEFsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoaWRlbnRpdHksIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChbXSkubWFwKF9hcmdzXzApIiwgc2NyaXB0LmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEluY2x1ZGVDdXN0b21UeXBlVHJhbnNsYXRpb25Gb3JTb21ldGhpbmdTaWxseSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBQYXJhbWV0ZXJpemVkU2lsbHlDbGFzcyBub3RTaWxseUVub3VnaCA9IFBhcmFtZXRlcml6ZWRTaWxseUNsYXNzLmZyb20oIm5vdCBzaWxseSBlbm91Z2giLCAxMDApOwotCi0gICAgICAgIC8vIHdpdGhvdXQgdHlwZSB0cmFuc2xhdGlvbiB3ZSBnZXQgdWdsaW5lc3NzCi0gICAgICAgIGZpbmFsIFNjcmlwdCBwYXJhbWV0ZXJpemVkU2NyaXB0QmFkID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5pbmplY3Qobm90U2lsbHlFbm91Z2gpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgcGFyYW1ldGVyaXplZFNjcmlwdEJhZC5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU3RyaW5nLmZvcm1hdCgiZy5pbmplY3QoJXMpIiwgIl9hcmdzXzAiKSwgcGFyYW1ldGVyaXplZFNjcmlwdEJhZC5nZXRTY3JpcHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobm90U2lsbHlFbm91Z2gsIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYmluZGluZ3MuY2xlYXIoKTsKLQotICAgICAgICAvLyB3aXRoIHR5cGUgdHJhbnNsYXRpb24gd2UgZ2V0IHZhbGlkIGdyZW1saW4KLSAgICAgICAgZmluYWwgU2NyaXB0IHBhcmFtZXRlcml6ZWRTY3JpcHRHb29kID0gR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIsIG5ldyBQYXJhbWV0ZXJpemVkU2lsbHlDbGFzc1RyYW5zbGF0b3JDdXN0b21pemVyKCkuY3JlYXRlVHlwZVRyYW5zbGF0b3IoKSkuCi0gICAgICAgICAgICAgICAgdHJhbnNsYXRlKGcuaW5qZWN0KG5vdFNpbGx5RW5vdWdoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICAgIHBhcmFtZXRlcml6ZWRTY3JpcHRHb29kLmdldFBhcmFtZXRlcnMoKS5pZlByZXNlbnQoYmluZGluZ3M6OnB1dEFsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobm90U2lsbHlFbm91Z2guZ2V0WCgpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzAiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhub3RTaWxseUVub3VnaC5nZXRZKCksIGJpbmRpbmdzLmdldCgiX2FyZ3NfMSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JUZXN0LlBhcmFtZXRlcml6ZWRTaWxseUNsYXNzLmZyb20oX2FyZ3NfMCxfYXJnc18xKSkiLAotICAgICAgICAgICAgICAgIHBhcmFtZXRlcml6ZWRTY3JpcHRHb29kLmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVWYWxpZFRvU3RyaW5nKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoInRyYW5zbGF0b3JbaDpncmVtbGluLWdyb292eV0iLCBHcm9vdnlUcmFuc2xhdG9yLm9mKCJoIiwgdHJ1ZSkudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFc2NhcGVTdHJpbmdzKCkgewotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0ID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5hZGRWKCJjdXN0b21lciIpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJjdXN0b21lcl9pZCIsIDUwMUwpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJuYW1lIiwgIkZvb1x1MDAyMEJhciIpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KCJhZ2UiLCAyNSkKLSAgICAgICAgICAgICAgICAucHJvcGVydHkoInNwZWNpYWwiLCAiYH4hQCMkJV4mKigpLV89K1t7XX1cXHw7OidcIiw8Lj4vPyIpCi0gICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgc2NyaXB0LmdldFBhcmFtZXRlcnMoKS5pZlByZXNlbnQoYmluZGluZ3M6OnB1dEFsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5LCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImN1c3RvbWVyIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImN1c3RvbWVyX2lkIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDUwMSksIGJpbmRpbmdzLmdldCgiX2FyZ3NfMiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18zIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkZvb1x1MDAyMEJhciIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfNCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJhZ2UiLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMjUpLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzYiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3BlY2lhbCIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfNyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJgfiFAIyQlXiYqKCktXz0rW3tdfVxcfDs6J1wiLDwuPi8/IiwgYmluZGluZ3MuZ2V0KCJfYXJnc184IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuYWRkVihfYXJnc18wKS5wcm9wZXJ0eShfYXJnc18xLF9hcmdzXzIpLnByb3BlcnR5KF9hcmdzXzMsX2FyZ3NfNCkucHJvcGVydHkoX2FyZ3NfNSxfYXJnc182KS5wcm9wZXJ0eShfYXJnc183LF9hcmdzXzgpIiwgc2NyaXB0LmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVZlcnRleEFuZEVkZ2UoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBpZDEgPSAiY3VzdG9tZXI6MTA6Zm9vXHUwMDIwYmFyXHUwMDIwXHUwMDI0MTAwIzkwIjsgLy8gY3VzdG9tZXI6MTA6Zm9vIGJhciAkMTAwIzkwCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXgxID0gRGV0YWNoZWRWZXJ0ZXguYnVpbGQoKS5zZXRMYWJlbCgiY3VzdG9tZXIiKS5zZXRJZChpZDEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0MSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KHZlcnRleDEpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgc2NyaXB0MS5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYmluZGluZ3Muc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkMSwgYmluZGluZ3MuZ2V0KCJfYXJnc18wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImN1c3RvbWVyIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG5ldyBSZWZlcmVuY2VWZXJ0ZXgoX2FyZ3NfMCxfYXJnc18xKSkiLCBzY3JpcHQxLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYmluZGluZ3MuY2xlYXIoKTsKLQotICAgICAgICBmaW5hbCBPYmplY3QgaWQyID0gInVzZXI6MjA6Zm9vXFx1MDAyMGJhclxcdTAwNWNcXHUwMDIybXJcXHUwMDVjXFx1MDAyMlxcdTAwMjQxMDAwIzUwIjsgLy8gdXNlcjoyMDpmb29cdTAwMjBiYXJcdTAwNWNcdTAwMjJtclx1MDA1Y1x1MDAyMlx1MDAyNDEwMDAjNTAKLSAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleDIgPSBEZXRhY2hlZFZlcnRleC5idWlsZCgpLnNldExhYmVsKCJ1c2VyIikuc2V0SWQoaWQyKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgU2NyaXB0IHNjcmlwdDIgPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLmluamVjdCh2ZXJ0ZXgyKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICAgIHNjcmlwdDIuZ2V0UGFyYW1ldGVycygpLmlmUHJlc2VudChiaW5kaW5nczo6cHV0QWxsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGJpbmRpbmdzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhpZDIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1c2VyIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG5ldyBSZWZlcmVuY2VWZXJ0ZXgoX2FyZ3NfMCxfYXJnc18xKSkiLCBzY3JpcHQyLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYmluZGluZ3MuY2xlYXIoKTsKLQotICAgICAgICBmaW5hbCBPYmplY3QgaWQzID0gImtub3dzOjMwOmZvb1x1MDAyMGJhclx1MDAyMFx1MDAyNDEwMDpcXHUwMDIwXFx1MDAyNDUwMCM3MCI7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IERldGFjaGVkRWRnZS5idWlsZCgpLnNldExhYmVsKCJrbm93cyIpLnNldElkKGlkMykKLSAgICAgICAgICAgICAgICAuc2V0T3V0VigoRGV0YWNoZWRWZXJ0ZXgpIHZlcnRleDEpCi0gICAgICAgICAgICAgICAgLnNldEluVigoRGV0YWNoZWRWZXJ0ZXgpIHZlcnRleDIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0MyA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KGVkZ2UpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgc2NyaXB0My5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgYmluZGluZ3Muc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkMywgYmluZGluZ3MuZ2V0KCJfYXJnc18wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoaWQyLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidXNlciIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfMyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkMSwgYmluZGluZ3MuZ2V0KCJfYXJnc180IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImN1c3RvbWVyIiwgYmluZGluZ3MuZ2V0KCJfYXJnc181IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuaW5qZWN0KG5ldyBSZWZlcmVuY2VFZGdlKF9hcmdzXzAsX2FyZ3NfMSxuZXcgUmVmZXJlbmNlVmVydGV4KF9hcmdzXzIsX2FyZ3NfMyksbmV3IFJlZmVyZW5jZVZlcnRleChfYXJnc180LF9hcmdzXzUpKSkiLCBzY3JpcHQzLmdldFNjcmlwdCgpKTsKLSAgICAgICAgYmluZGluZ3MuY2xlYXIoKTsKLQotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0NCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuYWRkRSgia25vd3MiKS5mcm9tKHZlcnRleDEpLnRvKHZlcnRleDIpLnByb3BlcnR5KCJ3aGVuIiwgIjIwMTgvMDkvMjEiKQotICAgICAgICAgICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgc2NyaXB0NC5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgYmluZGluZ3Muc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJrbm93cyIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkMSwgYmluZGluZ3MuZ2V0KCJfYXJnc18xIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImN1c3RvbWVyIiwgYmluZGluZ3MuZ2V0KCJfYXJnc18yIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoaWQyLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidXNlciIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfNCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3aGVuIiwgYmluZGluZ3MuZ2V0KCJfYXJnc181IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMTgvMDkvMjEiLCBiaW5kaW5ncy5nZXQoIl9hcmdzXzYiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5hZGRFKF9hcmdzXzApLmZyb20obmV3IFJlZmVyZW5jZVZlcnRleChfYXJnc18xLF9hcmdzXzIpKS50byhuZXcgUmVmZXJlbmNlVmVydGV4KF9hcmdzXzMsX2FyZ3NfNCkpLnByb3BlcnR5KF9hcmdzXzUsX2FyZ3NfNikiLCBzY3JpcHQ0LmdldFNjcmlwdCgpKTsKLSAgICAgICAgYmluZGluZ3MuY2xlYXIoKTsKLQotICAgICAgICBmaW5hbCBTY3JpcHQgc2NyaXB0NSA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLmhhcygiYWdlIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICBzY3JpcHQ1LmdldFBhcmFtZXRlcnMoKS5pZlByZXNlbnQoYmluZGluZ3M6OnB1dEFsbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImFnZSIsIGJpbmRpbmdzLmdldCgiX2FyZ3NfMCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5oYXMoX2FyZ3NfMCkiLCBzY3JpcHQ1LmdldFNjcmlwdCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFBhcmFtZXRlcml6ZWRTaWxseUNsYXNzIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB4OwotICAgICAgICBwcml2YXRlIGZpbmFsIGludCB5OwotCi0gICAgICAgIHByaXZhdGUgUGFyYW1ldGVyaXplZFNpbGx5Q2xhc3MoZmluYWwgU3RyaW5nIHgsIGZpbmFsIGludCB5KSB7Ci0gICAgICAgICAgICB0aGlzLnggPSB4OwotICAgICAgICAgICAgdGhpcy55ID0geTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgUGFyYW1ldGVyaXplZFNpbGx5Q2xhc3MgZnJvbShmaW5hbCBTdHJpbmcgeCwgZmluYWwgaW50IHkpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUGFyYW1ldGVyaXplZFNpbGx5Q2xhc3MoeCwgeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0WSgpIHsKLSAgICAgICAgICAgIHJldHVybiB5OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE9iamVjdFtdIGdldEFyZ3VtZW50cygpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0W10ge3gseX07Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JUZXN0LlBhcmFtZXRlcml6ZWRTaWxseUNsYXNzLmZyb20oJyVzJywgKGludCkgJXMpIiwgZ2V0WCgpLCBnZXRZKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBQYXJhbWV0ZXJpemVkU2lsbHlDbGFzc1RyYW5zbGF0b3IgZXh0ZW5kcyAgR3Jvb3Z5VHJhbnNsYXRvci5EZWZhdWx0VHlwZVRyYW5zbGF0b3IgewotICAgICAgICBwdWJsaWMgUGFyYW1ldGVyaXplZFNpbGx5Q2xhc3NUcmFuc2xhdG9yKGZpbmFsIGJvb2xlYW4gd2l0aFBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgc3VwZXIod2l0aFBhcmFtZXRlcnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBTY3JpcHQgY29udmVydFRvU2NyaXB0KGZpbmFsIE9iamVjdCBvYmplY3QpIHsKLSAgICAgICAgICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBQYXJhbWV0ZXJpemVkU2lsbHlDbGFzcykgewotICAgICAgICAgICAgICAgIFBhcmFtZXRlcml6ZWRTaWxseUNsYXNzIG9iaiA9IChQYXJhbWV0ZXJpemVkU2lsbHlDbGFzcykgb2JqZWN0OwotICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQob2JqLmdldENsYXNzKCkuZ2V0Q2Fub25pY2FsTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoMCA9PSBvYmouZ2V0QXJndW1lbnRzKCkubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5hcHBlbmQoIi4iKS5hcHBlbmQoImZyb20iKS5hcHBlbmQoIigpIik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLiIpLmFwcGVuZCgiZnJvbSIpLmFwcGVuZCgiKCIpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBhcmd1bWVudDogb2JqLmdldEFyZ3VtZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9TY3JpcHQoYXJndW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zZXRDaGFyQXRFbmQoJyknKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNjcmlwdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUb1NjcmlwdChvYmplY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBQYXJhbWV0ZXJpemVkU2lsbHlDbGFzc1RyYW5zbGF0b3JDdXN0b21pemVyIGltcGxlbWVudHMgVHJhbnNsYXRvckN1c3RvbWl6ZXIgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yLlR5cGVUcmFuc2xhdG9yIGNyZWF0ZVR5cGVUcmFuc2xhdG9yKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJpemVkU2lsbHlDbGFzc1RyYW5zbGF0b3IodHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdG9yVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL1B5dGhvblRyYW5zbGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZTA0MTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC90cmFuc2xhdG9yL1B5dGhvblRyYW5zbGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk1lcmdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRleHRQOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU2VlZFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaGFzTGFiZWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluRTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkRhdGV0aW1lSGVscGVyLmRhdGV0aW1lOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotcHVibGljIGNsYXNzIFB5dGhvblRyYW5zbGF0b3JUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aEVtYmVkZGVkKEVtcHR5R3JhcGguaW5zdGFuY2UoKSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBQeXRob25UcmFuc2xhdG9yLm9mKCJnIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVHJhbnNsYXRvci5TY3JpcHRUcmFuc2xhdG9yIG5vU3VnYXJUcmFuc2xhdG9yID0gUHl0aG9uVHJhbnNsYXRvci5vZigiZyIsIG5ldyBQeXRob25UcmFuc2xhdG9yLk5vU3VnYXJUcmFuc2xhdG9yKGZhbHNlKSk7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVWYWxpZFRvU3RyaW5nKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoInRyYW5zbGF0b3JbaDpncmVtbGluLXB5dGhvbl0iLCBQeXRob25UcmFuc2xhdG9yLm9mKCJoIikudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVPcHRpb24oKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluQXNQeXRob24gPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSgKLSAgICAgICAgICAgICAgICBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykiLCBncmVtbGluQXNQeXRob24pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlVmFsdWVzKCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzUHl0aG9uID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5WKCkudmFsdWVzKCJhZ2UiKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuYWdlIiwgZ3JlbWxpbkFzUHl0aG9uKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZURpc2NhcmQoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluQXNQeXRob24gPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSgKLSAgICAgICAgICAgICAgICBnLlYoKS5kaXNjYXJkKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLmRpc2NhcmQoKSIsIGdyZW1saW5Bc1B5dGhvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVDYXJkaW5hbGl0eSgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc1B5dGhvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkubGlzdCwgIm5hbWUiLCAibWFya28iKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sJ25hbWUnLCdtYXJrbycpIiwgZ3JlbWxpbkFzUHl0aG9uKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZUNhcmRpbmFsaXR5VmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gbSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbS5wdXQoIm5hbWUiLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zZXQoIm1hcmtvIikpOwotICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzUHl0aG9uID0gdHJhbnNsYXRvci50cmFuc2xhdGUoCi0gICAgICAgICAgICAgICAgZy5tZXJnZVYobmV3IEhhc2hNYXA8PigpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcubWVyZ2Vfdih7fSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLHsnbmFtZSc6Q2FyZGluYWxpdHlWYWx1ZS5zZXRfKCdtYXJrbycpfSkiLCBncmVtbGluQXNQeXRob24pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlTXVsdGlsaW5lU3RyaW5ncygpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc1B5dGhvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuYWRkVigpLnByb3BlcnR5KCJ0ZXh0IiwgImEiKyBTeXN0ZW0ubGluZVNlcGFyYXRvcigpICsgIlwiYW5kXCIiICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSArICJiIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuYWRkX3YoKS5wcm9wZXJ0eSgndGV4dCcsXCJcIlwiYSIgKyBTeXN0ZW0ubGluZVNlcGFyYXRvcigpICsgIlwiYW5kXCIiICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSArICJiXCJcIlwiKSIsIGdyZW1saW5Bc1B5dGhvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVDaGlsZFRyYXZlcnNhbHMoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluQXNQeXRob24gPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSgKLSAgICAgICAgICAgICAgICBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuCi0gICAgICAgICAgICAgICAgICB3aGVyZShvdXRFKCkpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpLndoZXJlKF9fLm91dF9lKCkpIiwgZ3JlbWxpbkFzUHl0aG9uKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVB5dGhvbk5hbWVkU3RlcHMoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluQXNQeXRob24gPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSgKLSAgICAgICAgICAgICAgICBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZShvdXRFKCkuY291bnQoKS5pcygyKS5hbmQoX18ubm90KGluRSgpLmNvdW50KCkuaXMoMykpKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykud2hlcmUoX18ub3V0X2UoKS5jb3VudCgpLmlzXygyKS5hbmRfKF9fLm5vdF8oX18uaW5fZSgpLmNvdW50KCkuaXNfKDMpKSkpIiwgZ3JlbWxpbkFzUHl0aG9uKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYW5zbGF0ZVRleHRQKCkgewotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiVGV4dFAuY29udGFpbmluZygnYXJrJykiLCBUZXh0UC5jb250YWluaW5nKCJhcmsiKSk7Ci0gICAgICAgIGFzc2VydFRyYW5zbGF0aW9uKCJUZXh0UC5yZWdleCgnYXJrJykiLCBUZXh0UC5yZWdleCgiYXJrIikpOwotICAgICAgICBhc3NlcnRUcmFuc2xhdGlvbigiVGV4dFAubm90X3JlZ2V4KCdhcmsnKSIsIFRleHRQLm5vdFJlZ2V4KCJhcmsiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVTdHJhdGVnaWVzKCkgewotICAgICAgICBhc3NlcnRFcXVhbHMoImcud2l0aF9zdHJhdGVnaWVzKCpbVHJhdmVyc2FsU3RyYXRlZ3koJ1JlYWRPbmx5U3RyYXRlZ3knLCBOb25lLCAnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneScpLFRyYXZlcnNhbFN0cmF0ZWd5KCdTdWJncmFwaFN0cmF0ZWd5Jyx7J2NoZWNrQWRqYWNlbnRWZXJ0aWNlcyc6RmFsc2UsJ3ZlcnRpY2VzJzpfXy5oYXNfbGFiZWwoJ3BlcnNvbicpfSwgJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5JyksVHJhdmVyc2FsU3RyYXRlZ3koJ1NlZWRTdHJhdGVneScseydzZWVkJzo5OTk5OTl9LCAnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlNlZWRTdHJhdGVneScpXSkuVigpLmhhcygnbmFtZScpIiwKLSAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5jaGVja0FkamFjZW50VmVydGljZXMoZmFsc2UpLnZlcnRpY2VzKGhhc0xhYmVsKCJwZXJzb24iKSkuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBTZWVkU3RyYXRlZ3kuYnVpbGQoKS5zZWVkKDk5OTk5OSkuY3JlYXRlKCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgVigpLmhhcygibmFtZSIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVMYW1iZGFzKCkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IGcud2l0aFNpZGVFZmZlY3QoImxlbmd0aFN1bSIsIDApLndpdGhTYWNrKDEpCi0gICAgICAgICAgICAgICAgLlYoKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoTGFtYmRhLnByZWRpY2F0ZSgieCAtPiB4LmdldCgpLmxhYmVsKCkgPT0gJ3BlcnNvbiciLCAiZ3JlbWxpbi1ncm9vdnkiKSkKLSAgICAgICAgICAgICAgICAuZmxhdE1hcChMYW1iZGEuZnVuY3Rpb24oIml0LmdldCgpLnZlcnRpY2VzKERpcmVjdGlvbi5PVVQpIiwgImdyZW1saW4tZ3Jvb3Z5IikpCi0gICAgICAgICAgICAgICAgLm1hcChMYW1iZGEuPFRyYXZlcnNlcjxPYmplY3Q+LCBJbnRlZ2VyPmZ1bmN0aW9uKCJ4IC0+IHggOiBsZW4oeC5nZXQoKS52YWx1ZSgnbmFtZScpKSIsICJncmVtbGluLWdyb292eSIpKQotICAgICAgICAgICAgICAgIC5zaWRlRWZmZWN0KExhbWJkYS5jb25zdW1lcigieCAtPiB4LnNpZGVFZmZlY3RzKFwibGVuZ3RoU3VtXCIsIHguc2lkZUVmZmVjdHMoJ2xlbmd0aFN1bScpICsgeC5nZXQoKSkgICAgIiwgImdyZW1saW4tZ3Jvb3Z5IikpCi0gICAgICAgICAgICAgICAgLm9yZGVyKCkuYnkoTGFtYmRhLmNvbXBhcmF0b3IoImEsYiAtPiBhID09IGIgPyAwIDogKGEgPiBiKSA/IDEgOiAtMSkiLCAiZ3JlbWxpbi1ncm9vdnkiKSkKLSAgICAgICAgICAgICAgICAuc2FjayhMYW1iZGEuYmlGdW5jdGlvbigiYSxiIC0+IGEgKyBiIiwgImdyZW1saW4tZ3Jvb3Z5IikpCi0gICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcud2l0aF9zaWRlX2VmZmVjdCgnbGVuZ3RoU3VtJywwKS53aXRoX3NhY2soMSkuVigpLmZpbHRlcl8obGFtYmRhOiBcInggLT4geC5nZXQoKS5sYWJlbCgpID09ICdwZXJzb24nXCIpLmZsYXRfbWFwKGxhbWJkYTogXCJpdC5nZXQoKS52ZXJ0aWNlcyhEaXJlY3Rpb24uT1VUKVwiKS5tYXAobGFtYmRhOiBcInggLT4geCA6IGxlbih4LmdldCgpLnZhbHVlKCduYW1lJykpXCIpLnNpZGVfZWZmZWN0KGxhbWJkYTogXCJ4IC0+IHguc2lkZUVmZmVjdHMoXFxcImxlbmd0aFN1bVxcXCIsIHguc2lkZUVmZmVjdHMoJ2xlbmd0aFN1bScpICsgeC5nZXQoKSlcIikub3JkZXIoKS5ieShsYW1iZGE6IFwiYSxiIC0+IGEgPT0gYiA/IDAgOiAoYSA+IGIpID8gMSA6IC0xKVwiKS5zYWNrKGxhbWJkYTogXCJhLGIgLT4gYSArIGJcIikiLAotICAgICAgICAgICAgICAgIHRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKS5nZXRTY3JpcHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVXaXRoU3ludGF4U3VnYXIoKSB7Ci0gICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzUHl0aG9uID0gdHJhbnNsYXRvci50cmFuc2xhdGUoZy5WKCkucmFuZ2UoMCwgMTApLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5saW1pdCgyKS52YWx1ZXMoIm5hbWUiKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkgCi0gICAgICAgICAgLmdldFNjcmlwdCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKVswOjEwXS5oYXMoJ3BlcnNvbicsJ25hbWUnLCdtYXJrbycpWzA6Ml0ubmFtZSIsIGdyZW1saW5Bc1B5dGhvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVXaXRob3V0U3ludGF4U3VnYXIoKSB7Ci0gICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzUHl0aG9uID0gbm9TdWdhclRyYW5zbGF0b3IKLSAgICAgICAgICAudHJhbnNsYXRlKGcuVigpLnJhbmdlKDAsIDEwKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikubGltaXQoMikudmFsdWVzKCJuYW1lIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpCi0gICAgICAgICAgLmdldFNjcmlwdCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5yYW5nZV8oMCwxMCkuaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKS5saW1pdCgyKS52YWx1ZXMoJ25hbWUnKSIsIGdyZW1saW5Bc1B5dGhvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVUeCgpIHsKLSAgICAgICAgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKEdyYXBoT3AuVFhfQ09NTUlULmdldEJ5dGVjb2RlKCkpLmdldFNjcmlwdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImcudHgoKS5jb21taXQoKSIsIHNjcmlwdCk7Ci0gICAgICAgIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKEdyYXBoT3AuVFhfUk9MTEJBQ0suZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy50eCgpLnJvbGxiYWNrKCkiLCBzY3JpcHQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRUcmFuc2xhdGlvbihmaW5hbCBTdHJpbmcgZXhwZWN0ZWRUcmFuc2xhdGlvbiwgZmluYWwgT2JqZWN0Li4uIG9ianMpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuaW5qZWN0KG9ianMpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFN0cmluZy5mb3JtYXQoImcuaW5qZWN0KCVzKSIsIGV4cGVjdGVkVHJhbnNsYXRpb24pLCBzY3JpcHQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhbnNsYXRlT2Zmc2V0RGF0ZVRpbWVVVEMoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluQXNQeXRob24gPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZSgKLSAgICAgICAgICAgICAgICBnLmluamVjdChkYXRldGltZSgiMjAyMy0wOC0wMlQwMToyMzo0NS42NzhaIikpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAyVDAxOjIzOjQ1LjY3OCswMDowMCcpKSIsIGdyZW1saW5Bc1B5dGhvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFuc2xhdGVPZmZzZXREYXRlVGltZSgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc1B5dGhvbiA9IHRyYW5zbGF0b3IudHJhbnNsYXRlKAotICAgICAgICAgICAgICAgIGcuaW5qZWN0KGRhdGV0aW1lKCIyMDIzLTA4LTAyVDAxOjIzOjQ1LjY3OC0wNzowMCIpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMlQwMToyMzo0NS42NzgtMDc6MDAnKSkiLCBncmVtbGluQXNQeXRob24pOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvQnl0ZWNvZGVIZWxwZXJUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvQnl0ZWNvZGVIZWxwZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjg1MDYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0J5dGVjb2RlSGVscGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbDsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CaW5kaW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7Ci1pbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wLlRYX0NPTU1JVDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wLlRYX1JPTExCQUNLOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBCeXRlY29kZUhlbHBlclRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxDbGFzczw/Pj4gVFJBVkVSU0FMX1NZTUJPTFNfQ0xBU1NFUyA9IEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICBUcmF2ZXJzYWwuU3ltYm9scy5jbGFzcywgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jbGFzcywKLSAgICAgICAgICAgIFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLmNsYXNzLCBHcmFwaFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLmNsYXNzCi0gICAgKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PFN0cmluZz4gTU9EVUxBVElOR19PUEVSQVRPUlMgPSBBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy50bywgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5mcm9tLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnJlYWQsCi0gICAgICAgICAgICBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLndyaXRlLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmVtaXQsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudW50aWwsCi0gICAgICAgICAgICBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJ5LCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLndpdGgsIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMudGltZXMsCi0gICAgICAgICAgICBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmFzLCBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm9wdGlvbiwgVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFNhY2ssCi0gICAgICAgICAgICBUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU3RyYXRlZ2llcywgVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aG91dFN0cmF0ZWdpZXMsCi0gICAgICAgICAgICBUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoU2lkZUVmZmVjdCwgVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFJlbW90ZSwKLSAgICAgICAgICAgIFRyYXZlcnNhbFNvdXJjZS5TeW1ib2xzLndpdGhDb21wdXRlciwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoQnVsaywKLSAgICAgICAgICAgIEdyYXBoVHJhdmVyc2FsU291cmNlLlN5bWJvbHMud2l0aFBhdGgKLSAgICApOwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGaW5kU3RyYXRlZ3koKSB7Ci0gICAgICAgIGZpbmFsIEl0ZXJhdG9yPE9wdGlvbnNTdHJhdGVneT4gaXR0eSA9IEJ5dGVjb2RlSGVscGVyLmZpbmRTdHJhdGVnaWVzKGcud2l0aCgieCIpLndpdGgoInkiLCAxMDApLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwgT3B0aW9uc1N0cmF0ZWd5LmNsYXNzKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotCi0gICAgICAgIGZpbmFsIE9wdGlvbnNTdHJhdGVneSBzdHJhdGVneSA9IGl0dHkubmV4dCgpOwotICAgICAgICBpZiAoc3RyYXRlZ3kuZ2V0T3B0aW9ucygpLmtleVNldCgpLmNvbnRhaW5zKCJ4IikpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoc3RyYXRlZ3kuZ2V0T3B0aW9ucygpLmdldCgieCIpLCBpcyh0cnVlKSk7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RyYXRlZ3kuZ2V0T3B0aW9ucygpLmtleVNldCgpLmNvbnRhaW5zKCJ5IikpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAsIHN0cmF0ZWd5LmdldE9wdGlvbnMoKS5nZXQoInkiKSk7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZShpdHR5Lmhhc05leHQoKSk7IC8vIFRoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHNvdXJjZSBpbnN0cnVjdGlvbiBwZXIgc3RyYXRlZ3kuCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RGaW5kU3RyYXRlZ3koKSB7Ci0gICAgICAgIGZpbmFsIEl0ZXJhdG9yPFJlYWRPbmx5U3RyYXRlZ3k+IGl0dHkgPSBCeXRlY29kZUhlbHBlci5maW5kU3RyYXRlZ2llcyhnLndpdGgoIngiKS53aXRoKCJ5IiwgMTAwKS5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksIFJlYWRPbmx5U3RyYXRlZ3kuY2xhc3MpOwotICAgICAgICBhc3NlcnRUaGF0KGl0dHkuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90RmluZEdyZW1saW5Hcm9vdnlMYW1iZGFMYW5ndWFnZSgpIHsKLSAgICAgICAgZmluYWwgT3B0aW9uYWw8U3RyaW5nPiBsYW1iZGEgPSBCeXRlY29kZUhlbHBlci5nZXRMYW1iZGFMYW5ndWFnZShnLlYoKS5vdXQoImtub3dzIikubWFwKExhbWJkYS5mdW5jdGlvbigiaXQuZ2V0KCkiKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICBhc3NlcnRUaGF0KGxhbWJkYS5pc1ByZXNlbnQoKSwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90RmluZExhbWJkYUxhbmd1YWdlKCkgewotICAgICAgICBmaW5hbCBPcHRpb25hbDxTdHJpbmc+IGxhbWJkYSA9IEJ5dGVjb2RlSGVscGVyLmdldExhbWJkYUxhbmd1YWdlKGcuVigpLm91dCgia25vd3MiKS5tYXAoX18uaWRlbnRpdHkoKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICBhc3NlcnRUaGF0KGxhbWJkYS5pc1ByZXNlbnQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlbW92ZUJpbmRpbmdzKCkgewotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiID0gQmluZGluZ3MuaW5zdGFuY2UoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYmMgPSBnLlYoYi5vZigieCIsIDEpKS5vdXQoYi5vZigieSIsICJrbm93cyIpKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgZmlsdGVyZWRCZWZvcmVSZW1vdmVkID0gQnl0ZWNvZGVIZWxwZXIuZmlsdGVySW5zdHJ1Y3Rpb25zKAotICAgICAgICAgICAgICAgIGJjLCBpIC0+IFN0cmVhbS5vZihpLmdldEFyZ3VtZW50cygpKS5hbnlNYXRjaChvIC0+IG8gaW5zdGFuY2VvZiBCeXRlY29kZS5CaW5kaW5nKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBmaWx0ZXJlZEJlZm9yZVJlbW92ZWQuZ2V0U3RlcEluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0KLSAgICAgICAgQnl0ZWNvZGVIZWxwZXIucmVtb3ZlQmluZGluZ3MoYmMpOwotICAgICAgICBmaW5hbCBCeXRlY29kZSBmaWx0ZXJlZEFmdGVyUmVtb3ZlZCA9IEJ5dGVjb2RlSGVscGVyLmZpbHRlckluc3RydWN0aW9ucygKLSAgICAgICAgICAgICAgICBiYywgaSAtPiBTdHJlYW0ub2YoaS5nZXRBcmd1bWVudHMoKSkuYW55TWF0Y2gobyAtPiBvIGluc3RhbmNlb2YgQnl0ZWNvZGUuQmluZGluZykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZmlsdGVyZWRBZnRlclJlbW92ZWQuZ2V0U3RlcEluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXRlcm1pbmVPcGVyYXRpb24oKSB7Ci0gICAgICAgIGFzc2VydFRoYXQoQnl0ZWNvZGVIZWxwZXIuaXNHcmFwaE9wZXJhdGlvbihUWF9DT01NSVQuZ2V0Qnl0ZWNvZGUoKSksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChCeXRlY29kZUhlbHBlci5pc0dyYXBoT3BlcmF0aW9uKFRYX1JPTExCQUNLLmdldEJ5dGVjb2RlKCkpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoQnl0ZWNvZGVIZWxwZXIuaXNHcmFwaE9wZXJhdGlvbihnLlYoKS5vdXQoImtub3dzIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgZmluZFBvc3NpYmxlVHJhdmVyc2FsU3RlcHMoKSB7Ci0gICAgICAgIFRSQVZFUlNBTF9TWU1CT0xTX0NMQVNTRVMuc3RyZWFtKCkubWFwKENsYXNzOjpnZXREZWNsYXJlZEZpZWxkcykuZmxhdE1hcChBcnJheXM6OnN0cmVhbSkuZmlsdGVyKGZpZWxkIC0+IHsKLSAgICAgICAgICAgIGZpbmFsIGludCBtb2RpZmllciA9IGZpZWxkLmdldE1vZGlmaWVycygpOwotICAgICAgICAgICAgLy8gV2UgYXJlIGludGVyZXN0ZWQgaW4gcHVibGljIHN0YXRpYyBmaW5hbCBzdHJpbmcgZmllbGRzIGRlZmluZWQgaW4gdGhlIGNsYXNzCi0gICAgICAgICAgICByZXR1cm4gTW9kaWZpZXIuaXNTdGF0aWMobW9kaWZpZXIpICYmIE1vZGlmaWVyLmlzUHVibGljKG1vZGlmaWVyKSAmJiBNb2RpZmllci5pc0ZpbmFsKG1vZGlmaWVyKTsKLSAgICAgICAgfSkuZm9yRWFjaChmaWVsZCAtPiB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8Q2xhc3M8PyBleHRlbmRzIFN0ZXA+PiBzdGVwcyA9IEJ5dGVjb2RlSGVscGVyLmZpbmRQb3NzaWJsZVRyYXZlcnNhbFN0ZXBzKChTdHJpbmcpIGZpZWxkLmdldChudWxsKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChzdGVwcyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBBc3NlcnQuZmFpbChTdHJpbmcuZm9ybWF0KCJFcnJvciB3aGlsZSBmaW5kaW5nIHBvc3NpYmxlIFRyYXZlcnNhbCBzdGVwIGZvciBvcGVyYXRvciAlcy4gRXhjZXB0aW9uOiAlcyIsIGZpZWxkLmdldE5hbWUoKSwgZXgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBmaW5kUG9zc2libGVUcmF2ZXJzYWxTdGVwc0Zvck1vZHVsYXRvck9wZXJhdG9ycygpIHsKLSAgICAgICAgTU9EVUxBVElOR19PUEVSQVRPUlMuZm9yRWFjaChvcGVyYXRvciAtPiB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8Q2xhc3M8PyBleHRlbmRzIFN0ZXA+PiBzdGVwcyA9IEJ5dGVjb2RlSGVscGVyLmZpbmRQb3NzaWJsZVRyYXZlcnNhbFN0ZXBzKG9wZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKHN0ZXBzKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KHN0ZXBzLnNpemUoKSwgaXMoMCkpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmZhaWwoU3RyaW5nLmZvcm1hdCgiRXJyb3Igd2hpbGUgZmluZGluZyBwb3NzaWJsZSBUcmF2ZXJzYWwgc3RlcCBmb3Igb3BlcmF0b3IgJXMuIEV4Y2VwdGlvbjogJXMiLCBvcGVyYXRvciwgZXgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC91dGlsL0RlZmF1bHRUcmF2ZXJzYWxUZXN0LmphdmEgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRGVmYXVsdFRyYXZlcnNhbFRlc3QuamF2YQppbmRleCA0ZDQxMjA1Li42ZWYyNjhlIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRGVmYXVsdFRyYXZlcnNhbFRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3V0aWwvRGVmYXVsdFRyYXZlcnNhbFRlc3QuamF2YQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIGNsb25lLmdldFNpZGVFZmZlY3RzKCkuc2V0KCJtIiwgMik7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBvcmlnaW5hbC5nZXRTaWRlRWZmZWN0cygpLjxJbnRlZ2VyPmdldCgibSIpLmludFZhbHVlKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xvbmUuZ2V0U2lkZUVmZmVjdHMoKS48SW50ZWdlcj5nZXQoIm0iKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShvcmlnaW5hbC5ieXRlY29kZSwgY2xvbmUuYnl0ZWNvZGUpOworICAgICAgICBhc3NlcnROb3RTYW1lKG9yaWdpbmFsLmdyZW1saW5MYW5nLCBjbG9uZS5ncmVtbGluTGFuZyk7CiAgICAgICAgIGFzc2VydEVxdWFscyhvcmlnaW5hbC5jbG9zZWQsIGNsb25lLmNsb3NlZCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTk1hcHBlckVtYmVkZGVkVHlwZVRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTWFwcGVyRW1iZWRkZWRUeXBlVGVzdC5qYXZhCmluZGV4IDUxMGRmM2QuLjUxOGUzYWUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTWFwcGVyRW1iZWRkZWRUeXBlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTWFwcGVyRW1iZWRkZWRUeXBlVGVzdC5qYXZhCkBAIC0yMCwyMiArMjAsMTMgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5CYXNlQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5EZWZhdWx0UmVtb3RlVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db21wYXJlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBCaVByZWRpY2F0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkJ1bGtTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5UcmF2ZXJzYWxTdHJhdGVneVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5IYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU2VlZFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEV4cGxhbmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuR3JlbWxpbkRpc2FibGVkTGlzdERlbGltaXRlckhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CkBAIC05Miw2ICs4Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCl9LAogICAgICAgICAgICAgICAgIHsidjMiLCBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYzXzApCiAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVYzLmJ1aWxkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCl9LAorICAgICAgICAgICAgICAgIHsidjQiLCBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlY0XzApCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVY0LmJ1aWxkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCl9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTEwNSw3ICs5OSw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUJvb2xlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBlaXRoZXIoc3RhcnRzV2l0aCgidjIiKSkub3Ioc3RhcnRzV2l0aCgidjMiKSkpOworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2MSIpKSk7CiAKICAgICAgICAgZmluYWwgYm9vbGVhbiBiID0gdHJ1ZTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGIsIHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgYiwgQm9vbGVhbi5jbGFzcykpOwpAQCAtMTEzLDcgKzEwNyw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVN0cmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInYxIikpKTsKIAogICAgICAgICBmaW5hbCBTdHJpbmcgcyA9ICJzaW1wbGUiOwogICAgICAgICBhc3NlcnRFcXVhbHMocywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBzLCBTdHJpbmcuY2xhc3MpKTsKQEAgLTEyMSw3ICsxMTUsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVUcmF2ZXJzYWxFeHBsYW5hdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2MSIpKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgZWl0aGVyKHN0YXJ0c1dpdGgoInYyIikpLm9yKHN0YXJ0c1dpdGgoInYzIikpKTsKIAogICAgICAgICBmaW5hbCBUcmF2ZXJzYWxFeHBsYW5hdGlvbiBvID0gX18oKS5vdXQoKS5vdXRWKCkub3V0RSgpLmV4cGxhaW4oKTsKICAgICAgICAgZmluYWwgVHJhdmVyc2FsRXhwbGFuYXRpb24gZGVzZXIgPSBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIFRyYXZlcnNhbEV4cGxhbmF0aW9uLmNsYXNzKTsKQEAgLTEzMCwxNSArMTI0LDE2IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUJ1bGtTZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gb25seSBzdXBwb3J0ZWQgb24gVjMKLSAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3QoYW55T2Yoc3RhcnRzV2l0aCgidjEiKSwgc3RhcnRzV2l0aCgidjIiKSkpKTsKKyAgICAgICAgLy8gb25seSBzdXBwb3J0ZWQgb24gVjQKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3QoYW55T2Yoc3RhcnRzV2l0aCgidjEiKSwgc3RhcnRzV2l0aCgidjIiKSwgc3RhcnRzV2l0aCgidjMiKSkpKTsKIAogICAgICAgICBmaW5hbCBCdWxrU2V0PFN0cmluZz4gYnMgPSBuZXcgQnVsa1NldDw+KCk7CiAgICAgICAgIGJzLmFkZCgidGVzdDEiLCAxKTsKICAgICAgICAgYnMuYWRkKCJ0ZXN0MiIsIDIpOwogICAgICAgICBicy5hZGQoInRlc3QzIiwgMyk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGJzLCBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIGJzLCBCdWxrU2V0LmNsYXNzKSk7CisgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBleHBhbmRlZEJzID0gbmV3IEFycmF5TGlzdDw+KGJzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGFuZGVkQnMsIHNlcmlhbGl6ZURlc2VyaWFsaXplQXV0byhtYXBwZXIsIGJzKSk7CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTE1NSw4ICsxNTAsMjIgQEAKICAgICB9CiAKICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUZsb2F0TnVtYmVyQ29uc3RhbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIEZsb2F0IHNlcmlhbGl6ZXIvZGVzZXJpYWxpemVyIG9ubHkgZXhpc3RzIGluIFY0CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgc3RhcnRzV2l0aCgidjQiKSk7CisKKyAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IG8gPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgby5hZGQoMTIzLjMyMWYpOworICAgICAgICBvLmFkZChGbG9hdC5OYU4pOworICAgICAgICBvLmFkZChGbG9hdC5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgICAgIG8uYWRkKEZsb2F0LlBPU0lUSVZFX0lORklOSVRZKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBMaXN0LmNsYXNzKSk7CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBzdGFydHNXaXRoKCJ2MyIpKTsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBlaXRoZXIoc3RhcnRzV2l0aCgidjMiKSkub3Ioc3RhcnRzV2l0aCgidjQiKSkpOwogCiAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsT2JqZWN0PiBvID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwogICAgICAgICBvLnB1dCgic3RyaW5nIGtleSIsICJzdHJpbmcgdmFsdWUiKTsKQEAgLTE3MSw3ICsxODAsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVMaXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgc3RhcnRzV2l0aCgidjMiKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgZWl0aGVyKHN0YXJ0c1dpdGgoInYzIikpLm9yKHN0YXJ0c1dpdGgoInY0IikpKTsKIAogICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gbyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBvLmFkZCgidGVzdCIpOwpAQCAtMTg4LDcgKzE5Nyw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVNldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIHN0YXJ0c1dpdGgoInYzIikpOworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MyIpKS5vcihzdGFydHNXaXRoKCJ2NCIpKSk7CiAKICAgICAgICAgZmluYWwgU2V0PE9iamVjdD4gbyA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oKTsKICAgICAgICAgby5hZGQoInRlc3QiKTsKQEAgLTI1MywyMiArMjYyLDYgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUJ5dGVjb2RlQmluZGluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZWNvZGUuQmluZGluZzxTdHJpbmc+IG8gPSBuZXcgQnl0ZWNvZGUuQmluZGluZzw+KCJ0ZXN0IiwgInRlc3RpbmciKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgbywgQnl0ZWNvZGUuQmluZGluZy5jbGFzcykpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlVHJhdmVyc2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgZWl0aGVyKHN0YXJ0c1dpdGgoInYyIikpLm9yKHN0YXJ0c1dpdGgoInYzIikpKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzZXI8U3RyaW5nPiBvID0gbmV3IERlZmF1bHRSZW1vdGVUcmF2ZXJzZXI8PigidGVzdCIsIDEwMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhvLCBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIFRyYXZlcnNlci5jbGFzcykpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlRHVyYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uICB7CiAgICAgICAgIGZpbmFsIER1cmF0aW9uIG8gPSBEdXJhdGlvbi5aRVJPOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBEdXJhdGlvbi5jbGFzcykpOwpAQCAtMjc2LDMwICsyNjksNDAgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlSW5zdGFudCgpIHRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIEluc3RhbnQgbyA9IEluc3RhbnQub2ZFcG9jaE1pbGxpKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgbywgSW5zdGFudC5jbGFzcykpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlTG9jYWxEYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgTG9jYWxEYXRlIG8gPSBMb2NhbERhdGUubm93KCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhvLCBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIExvY2FsRGF0ZS5jbGFzcykpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlTG9jYWxEYXRlVGltZSgpIHRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIExvY2FsRGF0ZVRpbWUgbyA9IExvY2FsRGF0ZVRpbWUubm93KCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhvLCBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIExvY2FsRGF0ZVRpbWUuY2xhc3MpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUxvY2FsVGltZSgpIHRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIExvY2FsVGltZSBvID0gTG9jYWxUaW1lLm5vdygpOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBMb2NhbFRpbWUuY2xhc3MpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZU1vbnRoRGF5KCkgdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgTW9udGhEYXkgbyA9IE1vbnRoRGF5Lm5vdygpOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBNb250aERheS5jbGFzcykpOwogICAgIH0KQEAgLTMxMiw0MyArMzE1LDU1IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZU9mZnNldFRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uICB7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInY0IikpKTsKKwogICAgICAgICBmaW5hbCBPZmZzZXRUaW1lIG8gPSBPZmZzZXRUaW1lLm5vdygpOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBPZmZzZXRUaW1lLmNsYXNzKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVQZXJpb2QoKSB0aHJvd3MgRXhjZXB0aW9uICB7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInY0IikpKTsKKwogICAgICAgICBmaW5hbCBQZXJpb2QgbyA9IFBlcmlvZC5vZkRheXMoMyk7CiAgICAgICAgIGFzc2VydEVxdWFscyhvLCBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIFBlcmlvZC5jbGFzcykpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlWWVhcigpIHRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIFllYXIgbyA9IFllYXIubm93KCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhvLCBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIFllYXIuY2xhc3MpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVllYXJNb250aCgpIHRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIFllYXJNb250aCBvID0gWWVhck1vbnRoLm5vdygpOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBZZWFyTW9udGguY2xhc3MpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVpvbmVkRGF0ZVRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uICB7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInY0IikpKTsKKwogICAgICAgICBmaW5hbCBab25lZERhdGVUaW1lIG8gPSBab25lZERhdGVUaW1lLm5vdygpOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBab25lZERhdGVUaW1lLmNsYXNzKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVab25lZE9mZnNldCgpIHRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIFpvbmVPZmZzZXQgbyAgPSBab25lZERhdGVUaW1lLm5vdygpLmdldE9mZnNldCgpOwogICAgICAgICBhc3NlcnRFcXVhbHMobywgc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBab25lT2Zmc2V0LmNsYXNzKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVCaWdJbnRlZ2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiAgewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInYxIikpKTsKICAgICAgICAgCiAgICAgICAgIGZpbmFsIEJpZ0ludGVnZXIgbyA9IG5ldyBCaWdJbnRlZ2VyKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgbywgQmlnSW50ZWdlci5jbGFzcykpOwpAQCAtMzU2LDI3ICszNzEsMzUgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZEJpZ0ludGVnZXJBc1N0cmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInYxIikpKTsKIAogICAgICAgICBmaW5hbCBCaWdJbnRlZ2VyIG8gPSBuZXcgQmlnSW50ZWdlcigiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhvLCBtYXBwZXIucmVhZFZhbHVlKCJ7XCJAdHlwZVwiOiBcImd4OkJpZ0ludGVnZXJcIiwgXCJAdmFsdWVcIjogXCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjFcIn0iLCBPYmplY3QuY2xhc3MpKTsKKyAgICAgICAgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgidjQiKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIG1hcHBlci5yZWFkVmFsdWUoIntcIkB0eXBlXCI6IFwiZzpCaWdJbnRlZ2VyXCIsIFwiQHZhbHVlXCI6IFwiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxXCJ9IiwgT2JqZWN0LmNsYXNzKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMobywgbWFwcGVyLnJlYWRWYWx1ZSgie1wiQHR5cGVcIjogXCJneDpCaWdJbnRlZ2VyXCIsIFwiQHZhbHVlXCI6IFwiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxXCJ9IiwgT2JqZWN0LmNsYXNzKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRCaWdJbnRlZ2VyQXNOdW1iZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBlaXRoZXIoc3RhcnRzV2l0aCgidjIiKSkub3Ioc3RhcnRzV2l0aCgidjMiKSkpOworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2MSIpKSk7CiAKICAgICAgICAgLy8gdGhpcyB3YXMgdGhlIG9yaWdpbmFsIEdyYXBoU09OIDIuMC8zLjAgZm9ybWF0IHB1Ymxpc2hlZCBmb3IgQmlnSW50ZWdlciBidXQgamFja3NvbiBpcyBmbGV4aWJsZSBlbm91Z2ggdG8KICAgICAgICAgLy8gZG8gaXQgYXMgYSBzdHJpbmcuIHRoZSBzdHJpbmcgYXBwcm9hY2ggaXMgcHJvYmFibHkgYmV0dGVyIGZvciBtb3N0IGxhbmd1YWdlIHZhcmlhbnRzIHNvIHdoaWxlIHRoaXMgdGVzdHMKICAgICAgICAgLy8gZW5mb3JjZXMgdGhpcyBhcHByb2FjaCBidXQgbGVhdmVzIG9wZW4gdGhlIG9wcG9ydHVuaXR5IHRvIGFjY2VwdCBlaXRoZXIuIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZQogICAgICAgICAvLyBwZXJoYXBzIGl0IGNhbiBzd2l0Y2ggZnVsbHkgLSBUSU5LRVJQT1AtMjE1NgogICAgICAgICBmaW5hbCBCaWdJbnRlZ2VyIG8gPSBuZXcgQmlnSW50ZWdlcigiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhvLCBtYXBwZXIucmVhZFZhbHVlKCJ7XCJAdHlwZVwiOiBcImd4OkJpZ0ludGVnZXJcIiwgXCJAdmFsdWVcIjogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxfSIsIE9iamVjdC5jbGFzcykpOworICAgICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCJ2NCIpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMobywgbWFwcGVyLnJlYWRWYWx1ZSgie1wiQHR5cGVcIjogXCJnOkJpZ0ludGVnZXJcIiwgXCJAdmFsdWVcIjogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxfSIsIE9iamVjdC5jbGFzcykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIG1hcHBlci5yZWFkVmFsdWUoIntcIkB0eXBlXCI6IFwiZ3g6QmlnSW50ZWdlclwiLCBcIkB2YWx1ZVwiOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjF9IiwgT2JqZWN0LmNsYXNzKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUJpZ0RlY2ltYWwoKSB0aHJvd3MgRXhjZXB0aW9uICB7Ci0gICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgZWl0aGVyKHN0YXJ0c1dpdGgoInYyIikpLm9yKHN0YXJ0c1dpdGgoInYzIikpKTsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjEiKSkpOwogCiAgICAgICAgIGZpbmFsIEJpZ0RlY2ltYWwgbyA9IG5ldyBCaWdEZWNpbWFsKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgbywgQmlnRGVjaW1hbC5jbGFzcykpOwpAQCAtNDQyLDk0ICs0NjUsMzEgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZEJpZ0RlY2ltYWxBc1N0cmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInYxIikpKTsKIAogICAgICAgICBmaW5hbCBCaWdEZWNpbWFsIG8gPSBuZXcgQmlnRGVjaW1hbCgiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhvLCBtYXBwZXIucmVhZFZhbHVlKCJ7XCJAdHlwZVwiOiBcImd4OkJpZ0RlY2ltYWxcIiwgXCJAdmFsdWVcIjogXCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjFcIn0iLCBPYmplY3QuY2xhc3MpKTsKKworICAgICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCJ2NCIpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMobywgbWFwcGVyLnJlYWRWYWx1ZSgie1wiQHR5cGVcIjogXCJnOkJpZ0RlY2ltYWxcIiwgXCJAdmFsdWVcIjogXCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjFcIn0iLCBPYmplY3QuY2xhc3MpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhvLCBtYXBwZXIucmVhZFZhbHVlKCJ7XCJAdHlwZVwiOiBcImd4OkJpZ0RlY2ltYWxcIiwgXCJAdmFsdWVcIjogXCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjFcIn0iLCBPYmplY3QuY2xhc3MpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZEJpZ0RlY2ltYWxBc051bWJlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInYxIikpKTsKIAogICAgICAgICAvLyB0aGlzIHdhcyB0aGUgb3JpZ2luYWwgR3JhcGhTT04gMi4wLzMuMCBmb3JtYXQgcHVibGlzaGVkIGZvciBCaWdEZWNpbWFsIGJ1dCBqYWNrc29uIGlzIGZsZXhpYmxlIGVub3VnaCB0bwogICAgICAgICAvLyBkbyBpdCBhcyBhIHN0cmluZy4gdGhlIHN0cmluZyBhcHByb2FjaCBpcyBwcm9iYWJseSBiZXR0ZXIgZm9yIG1vc3QgbGFuZ3VhZ2UgdmFyaWFudHMgc28gd2hpbGUgdGhpcyB0ZXN0cwogICAgICAgICAvLyBlbmZvcmNlcyB0aGlzIGFwcHJvYWNoIGJ1dCBsZWF2ZXMgb3BlbiB0aGUgb3Bwb3J0dW5pdHkgdG8gYWNjZXB0IGVpdGhlci4gYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlCiAgICAgICAgIC8vIHBlcmhhcHMgaXQgY2FuIHN3aXRjaCBmdWxseSAtIFRJTktFUlBPUC0yMTU2CiAgICAgICAgIGZpbmFsIEJpZ0RlY2ltYWwgbyA9IG5ldyBCaWdEZWNpbWFsKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIG1hcHBlci5yZWFkVmFsdWUoIntcIkB0eXBlXCI6IFwiZ3g6QmlnRGVjaW1hbFwiLCBcIkB2YWx1ZVwiOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjF9IiwgT2JqZWN0LmNsYXNzKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkQnl0ZWNvZGVXaXRoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBlaXRoZXIoc3RhcnRzV2l0aCgidjIiKSkub3Ioc3RhcnRzV2l0aCgidjMiKSkpOwotCi0gICAgICAgIGZpbmFsIEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5IHN0cmF0ID0gSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kuZGV0YWNoZWQoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgZXhwZWN0ZWQgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCkud2l0aFN0cmF0ZWdpZXMoc3RyYXQpLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYWN0dWFsID0gbWFwcGVyLnJlYWRWYWx1ZSgie1wiQHR5cGVcIjpcImc6Qnl0ZWNvZGVcIixcIkB2YWx1ZVwiOntcInNvdXJjZVwiOltbXCJ3aXRoU3RyYXRlZ2llc1wiLHtcIkB0eXBlXCI6XCJnOkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5XCIsXCJAdmFsdWVcIjp7XCJjb25mXCI6IHsgXCJoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5XCI6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeVwiIH0sXCJmcWNuXCI6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lcIn19XV0sXCJzdGVwXCI6W1tcIlZcIl1dfX0iLCBCeXRlY29kZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5zaXplKCksIGFjdHVhbC5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldE9wZXJhdG9yKCksIGFjdHVhbC5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCkuZ2V0T3BlcmF0b3IoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCkuZ2V0QXJndW1lbnRzKCkubGVuZ3RoLCBhY3R1YWwuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBhY3R1YWwuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpLmxlbmd0aCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCkuZ2V0QXJndW1lbnRzKClbMF0uZ2V0Q2xhc3MoKSwgKChUcmF2ZXJzYWxTdHJhdGVneVByb3h5KSBhY3R1YWwuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpWzBdKS5nZXRTdHJhdGVneUNsYXNzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkgZXhwZWN0ZWQuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuZ2V0KDApLmdldEFyZ3VtZW50cygpWzBdKS5nZXRIYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5KCkuZ2V0Q2Fub25pY2FsTmFtZSgpLCAoKFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkpIGFjdHVhbC5nZXRTb3VyY2VJbnN0cnVjdGlvbnMoKS5nZXQoMCkuZ2V0QXJndW1lbnRzKClbMF0pLmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eSgiaGFsdGVkVHJhdmVyc2VyRmFjdG9yeSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVNlZWRTdHJhdGVneSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sICBlaXRoZXIoc3RhcnRzV2l0aCgidjIiKSkub3Ioc3RhcnRzV2l0aCgidjMiKSkpOwotCi0gICAgICAgIGZpbmFsIFNlZWRTdHJhdGVneSBvID0gU2VlZFN0cmF0ZWd5LmJ1aWxkKCkuc2VlZCg5OTkpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5IHN0cmF0ZWd5UHJveHkgPSBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkuY2xhc3MpOwotICAgICAgICBhc3NlcnRUaGF0KHN0cmF0ZWd5UHJveHksIGluc3RhbmNlT2YoVHJhdmVyc2FsU3RyYXRlZ3lQcm94eS5jbGFzcykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoU2VlZFN0cmF0ZWd5LmNsYXNzLCBzdHJhdGVneVByb3h5LmdldFN0cmF0ZWd5Q2xhc3MoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5OTksIHN0cmF0ZWd5UHJveHkuZ2V0Q29uZmlndXJhdGlvbigpLmdldEludCgic2VlZCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7Ci0KLSAgICAgICAgZmluYWwgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kgbyA9IEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5LmRldGFjaGVkKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkgc3RyYXRlZ3lQcm94eSA9IHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgbywgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydFRoYXQoc3RyYXRlZ3lQcm94eSwgaW5zdGFuY2VPZihUcmF2ZXJzYWxTdHJhdGVneVByb3h5LmNsYXNzKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneS5jbGFzcywgc3RyYXRlZ3lQcm94eS5nZXRTdHJhdGVneUNsYXNzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoby5nZXRIYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5KCkuZ2V0Q2Fub25pY2FsTmFtZSgpLCBzdHJhdGVneVByb3h5LmdldENvbmZpZ3VyYXRpb24oKS5nZXRTdHJpbmcoImhhbHRlZFRyYXZlcnNlckZhY3RvcnkiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7Ci0KLSAgICAgICAgZmluYWwgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSBvID0gTWF0Y2hBbGdvcml0aG1TdHJhdGVneS5idWlsZCgpLmFsZ29yaXRobShNYXRjaFN0ZXAuR3JlZWR5TWF0Y2hBbGdvcml0aG0uY2xhc3MpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5IHN0cmF0ZWd5UHJveHkgPSBzZXJpYWxpemVEZXNlcmlhbGl6ZShtYXBwZXIsIG8sIFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkuY2xhc3MpOwotICAgICAgICBhc3NlcnRUaGF0KHN0cmF0ZWd5UHJveHksIGluc3RhbmNlT2YoVHJhdmVyc2FsU3RyYXRlZ3lQcm94eS5jbGFzcykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTWF0Y2hBbGdvcml0aG1TdHJhdGVneS5jbGFzcywgc3RyYXRlZ3lQcm94eS5nZXRTdHJhdGVneUNsYXNzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoby5nZXRDb25maWd1cmF0aW9uKCkuZ2V0UHJvcGVydHkoIm1hdGNoQWxnb3JpdGhtIiksIHN0cmF0ZWd5UHJveHkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFN0cmluZygibWF0Y2hBbGdvcml0aG0iKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVUcmF2ZXJzYWxTdHJhdGVneVByb3h5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgIGVpdGhlcihzdGFydHNXaXRoKCJ2MiIpKS5vcihzdGFydHNXaXRoKCJ2MyIpKSk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSBvID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkoRHVtbXlUcmF2ZXJzYWxTdHJhdGVneS5pbnN0YW5jZSgpKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSBzdHJhdGVneVByb3h5ID0gc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5LmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0VGhhdChzdHJhdGVneVByb3h5LCBpbnN0YW5jZU9mKFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkuY2xhc3MpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKER1bW15VHJhdmVyc2FsU3RyYXRlZ3kuY2xhc3MsIHN0cmF0ZWd5UHJveHkuZ2V0U3RyYXRlZ3lDbGFzcygpKTsKLSAgICAgICAgRHVtbXlUcmF2ZXJzYWxTdHJhdGVneS5pbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRLZXlzKCkuZm9yRWFjaFJlbWFpbmluZygKLSAgICAgICAgICAgICAgICBrIC0+IGFzc2VydEVxdWFscyhEdW1teVRyYXZlcnNhbFN0cmF0ZWd5Lmluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KGspLCBzdHJhdGVneVByb3h5LmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eShrKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlVHJhdmVyc2FsU3RyYXRlZ3lQcm94eVdpdGhDb25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCAgZWl0aGVyKHN0YXJ0c1dpdGgoInYyIikpLm9yKHN0YXJ0c1dpdGgoInYzIikpKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5IG8gPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eShEdW1teUNvbmZpZ3VyZWRUcmF2ZXJzYWxTdHJhdGVneS5pbnN0YW5jZSgpKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ3lQcm94eSBzdHJhdGVneVByb3h5ID0gc2VyaWFsaXplRGVzZXJpYWxpemUobWFwcGVyLCBvLCBUcmF2ZXJzYWxTdHJhdGVneVByb3h5LmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0VGhhdChzdHJhdGVneVByb3h5LCBpbnN0YW5jZU9mKFRyYXZlcnNhbFN0cmF0ZWd5UHJveHkuY2xhc3MpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKER1bW15Q29uZmlndXJlZFRyYXZlcnNhbFN0cmF0ZWd5LmNsYXNzLCBzdHJhdGVneVByb3h5LmdldFN0cmF0ZWd5Q2xhc3MoKSk7Ci0gICAgICAgIER1bW15Q29uZmlndXJlZFRyYXZlcnNhbFN0cmF0ZWd5Lmluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldEtleXMoKS5mb3JFYWNoUmVtYWluaW5nKAotICAgICAgICAgICAgICAgIGsgLT4gYXNzZXJ0RXF1YWxzKER1bW15Q29uZmlndXJlZFRyYXZlcnNhbFN0cmF0ZWd5Lmluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbigpLmdldFByb3BlcnR5KGspLCBzdHJhdGVneVByb3h5LmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eShrKSkpOworICAgICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCJ2NCIpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMobywgbWFwcGVyLnJlYWRWYWx1ZSgie1wiQHR5cGVcIjogXCJnOkJpZ0RlY2ltYWxcIiwgXCJAdmFsdWVcIjogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxfSIsIE9iamVjdC5jbGFzcykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIG1hcHBlci5yZWFkVmFsdWUoIntcIkB0eXBlXCI6IFwiZ3g6QmlnRGVjaW1hbFwiLCBcIkB2YWx1ZVwiOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjF9IiwgT2JqZWN0LmNsYXNzKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXJQYXJ0aWFsRW1iZWRkZWRUeXBlVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXJQYXJ0aWFsRW1iZWRkZWRUeXBlVGVzdC5qYXZhCmluZGV4IDUyM2NkYzkuLmQxNTFjYTUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTWFwcGVyUGFydGlhbEVtYmVkZGVkVHlwZVRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTk1hcHBlclBhcnRpYWxFbWJlZGRlZFR5cGVUZXN0LmphdmEKQEAgLTE4LDEyICsxOCw5IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb247CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5EZWZhdWx0UmVtb3RlVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVGV4dFA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuSnNvbk1hcHBpbmdFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKQEAgLTM0LDYgKzMxLDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwogaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OwogaW1wb3J0IGphdmEudGltZS5ab25lZERhdGVUaW1lOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC00NSw3ICs0Myw2IEBACiBpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNJbnN0YW5jZU9mLmluc3RhbmNlT2Y7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLlN0cmluZ0NvbnRhaW5zLmNvbnRhaW5zU3RyaW5nOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7CkBAIC02OCw2ICs2NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCl9LAogICAgICAgICAgICAgICAgIHsidjMiLCBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYzXzApCiAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVYzLmJ1aWxkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCl9LAorICAgICAgICAgICAgICAgIHsidjQiLCBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlY0XzApCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVY0LmJ1aWxkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCl9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTc5LDM2ICs3OSw2IEBACiAgICAgcHVibGljIE9iamVjdE1hcHBlciBtYXBwZXI7CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIGVsZW1lbnRPcmRlclNob3VsZE5vdE1hdHRlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgYnl0ZWNvZGVKU09ORmFpbDEgPSAie1wiQHR5cGVcIjpcImc6Qnl0ZWNvZGVcIixcIkB2YWx1ZVwiOntcInN0ZXBcIjpbW1wiYWRkVlwiLFwicG9jX2ludFwiXSxbXCJwcm9wZXJ0eVwiLFwiYmlnaW50MXZhbHVlXCIse1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOi00Mjk0OTY3Mjk1fV1dfX0iOwotICAgICAgICBmaW5hbCBTdHJpbmcgYnl0ZWNvZGVKU09ORmFpbDIgPSAie1wiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJhZGRWXCIsXCJwb2NfaW50XCJdLFtcInByb3BlcnR5XCIsXCJiaWdpbnQxdmFsdWVcIix7XCJAdmFsdWVcIjotNDI5NDk2NzI5NSxcIkB0eXBlXCI6XCJnOkludDMyXCJ9XV19LFwiQHR5cGVcIjpcImc6Qnl0ZWNvZGVcIn0iOwotCi0gICAgICAgIC8vIGZpcnN0IHZhbGlkYXRlIHRoZSBmYWlsdXJlcyBvZiBUSU5LRVJQT1AtMTczOCAtIHByaW9yIHRvIHRoZSBqYWNrc29uIGZpeCBvbiAyLjkuNCBvbmUgb2YgdGhlc2Ugd291bGQgaGF2ZQotICAgICAgICAvLyBwYXNzZWQgYmFzZWQgb24gdGhlIG9yZGVyaW5nIG9mIHRoZSBwcm9wZXJ0aWVzCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtYXBwZXIucmVhZFZhbHVlKGJ5dGVjb2RlSlNPTkZhaWwxLCBCeXRlY29kZS5jbGFzcyk7Ci0gICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXJyb3IgYmVjYXVzZSAnYmlnaW50MXZhbHVlJyBpcyBub3QgYW4gaW50MzIiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGV4LCBpbnN0YW5jZU9mKEpzb25NYXBwaW5nRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgbWFwcGVyLnJlYWRWYWx1ZShieXRlY29kZUpTT05GYWlsMiwgQnl0ZWNvZGUuY2xhc3MpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGVycm9yIGJlY2F1c2UgJ2JpZ2ludDF2YWx1ZScgaXMgbm90IGFuIGludDMyIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgYXNzZXJ0VGhhdChleCwgaW5zdGFuY2VPZihKc29uTWFwcGluZ0V4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbm93IGRvIGEgbGVnaXQgcGFyc2luZyBiYXNlZCBvbiBvcmRlcgotICAgICAgICBmaW5hbCBTdHJpbmcgYnl0ZWNvZGVKU09OMSA9ICJ7XCJAdHlwZVwiOlwiZzpCeXRlY29kZVwiLFwiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJhZGRWXCIsXCJwb2NfaW50XCJdLFtcInByb3BlcnR5XCIsXCJiaWdpbnQxdmFsdWVcIix7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6LTQyOTQ5NjcyOTV9XV19fSI7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBieXRlY29kZUpTT04yID0gIntcIkB2YWx1ZVwiOntcInN0ZXBcIjpbW1wiYWRkVlwiLFwicG9jX2ludFwiXSxbXCJwcm9wZXJ0eVwiLFwiYmlnaW50MXZhbHVlXCIse1wiQHZhbHVlXCI6LTQyOTQ5NjcyOTUsXCJAdHlwZVwiOlwiZzpJbnQ2NFwifV1dfSxcIkB0eXBlXCI6XCJnOkJ5dGVjb2RlXCJ9IjsKLQotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZTEgPSBtYXBwZXIucmVhZFZhbHVlKGJ5dGVjb2RlSlNPTjEsIEJ5dGVjb2RlLmNsYXNzKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUyID0gbWFwcGVyLnJlYWRWYWx1ZShieXRlY29kZUpTT04yLCBCeXRlY29kZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhieXRlY29kZTEsIGJ5dGVjb2RlMik7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVEZXNlcmlhbGl6ZU5lc3RlZENvbGxlY3Rpb25zQW5kTWFwQW5kVHlwZWRWYWx1ZXNDb3JyZWN0bHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy8gVHJ5aW5nIHRvIGZhaWwgdGhlIFR5cGVEZXNlcmlhbGl6ZXIgdHlwZSBkZXRlY3Rpb24KICAgICAgICAgZmluYWwgVVVJRCB1dWlkID0gVVVJRC5yYW5kb21VVUlEKCk7CkBAIC0xNzYsNyArMTQ2LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbElmVHlwZVNwZWNpZmllZElzTm90U2FtZVR5cGVJblBheWxvYWQoKSB7Ci0gICAgICAgIGZpbmFsIFpvbmVPZmZzZXQgbyA9IFpvbmVkRGF0ZVRpbWUubm93KCkuZ2V0T2Zmc2V0KCk7CisgICAgICAgIGZpbmFsIE9mZnNldERhdGVUaW1lIG8gPSBPZmZzZXREYXRlVGltZS5ub3coKTsKICAgICAgICAgZmluYWwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIHN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1hcHBlci53cml0ZVZhbHVlKHN0cmVhbSwgbyk7CkBAIC0xODUsNyArMTU1LDExIEBACiAgICAgICAgICAgICBtYXBwZXIucmVhZFZhbHVlKGlucHV0U3RyZWFtLCBJbnN0YW50LmNsYXNzKTsKICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIGZhaWxlZCBkZWNvZGluZyB0aGUgdmFsdWUiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoZS5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJDb3VsZCBub3QgZGVzZXJpYWxpemUgdGhlIEpTT04gdmFsdWUgYXMgcmVxdWlyZWQuIE5lc3RlZCBleGNlcHRpb246IGphdmEubGFuZy5JbnN0YW50aWF0aW9uRXhjZXB0aW9uOiBDYW5ub3QgZGVzZXJpYWxpemUgdGhlIHZhbHVlIHdpdGggdGhlIGRldGVjdGVkIHR5cGUgY29udGFpbmVkIGluIHRoZSBKU09OICgnIiArIEdyYXBoU09OVG9rZW5zLkdSRU1MSU5YX1RZUEVfTkFNRVNQQUNFICsgIjpab25lT2Zmc2V0JykgdG8gdGhlIHR5cGUgc3BlY2lmaWVkIGluIHBhcmFtZXRlciB0byB0aGUgb2JqZWN0IG1hcHBlciAoY2xhc3MgamF2YS50aW1lLkluc3RhbnQpLiBUaG9zZSB0eXBlcyBhcmUgaW5jb21wYXRpYmxlLiIpKTsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uLnN0YXJ0c1dpdGgoInY0IikpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KGUuZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiQ291bGQgbm90IGRlc2VyaWFsaXplIHRoZSBKU09OIHZhbHVlIGFzIHJlcXVpcmVkLiBOZXN0ZWQgZXhjZXB0aW9uOiBqYXZhLmxhbmcuSW5zdGFudGlhdGlvbkV4Y2VwdGlvbjogQ2Fubm90IGRlc2VyaWFsaXplIHRoZSB2YWx1ZSB3aXRoIHRoZSBkZXRlY3RlZCB0eXBlIGNvbnRhaW5lZCBpbiB0aGUgSlNPTiAoJyIgKyBHcmFwaFNPTlRva2Vucy5HUkVNTElOX1RZUEVfTkFNRVNQQUNFICsgIjpEYXRlVGltZScpIHRvIHRoZSB0eXBlIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXIgdG8gdGhlIG9iamVjdCBtYXBwZXIgKGNsYXNzIGphdmEudGltZS5JbnN0YW50KS4gVGhvc2UgdHlwZXMgYXJlIGluY29tcGF0aWJsZS4iKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFzc2VydFRoYXQoZS5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJDb3VsZCBub3QgZGVzZXJpYWxpemUgdGhlIEpTT04gdmFsdWUgYXMgcmVxdWlyZWQuIE5lc3RlZCBleGNlcHRpb246IGphdmEubGFuZy5JbnN0YW50aWF0aW9uRXhjZXB0aW9uOiBDYW5ub3QgZGVzZXJpYWxpemUgdGhlIHZhbHVlIHdpdGggdGhlIGRldGVjdGVkIHR5cGUgY29udGFpbmVkIGluIHRoZSBKU09OICgnIiArIEdyYXBoU09OVG9rZW5zLkdSRU1MSU5YX1RZUEVfTkFNRVNQQUNFICsgIjpPZmZzZXREYXRlVGltZScpIHRvIHRoZSB0eXBlIHNwZWNpZmllZCBpbiBwYXJhbWV0ZXIgdG8gdGhlIG9iamVjdCBtYXBwZXIgKGNsYXNzIGphdmEudGltZS5JbnN0YW50KS4gVGhvc2UgdHlwZXMgYXJlIGluY29tcGF0aWJsZS4iKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMwMiwxMyArMjc2LDkgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZURlZmF1bHRSZW1vdGVUcmF2ZXJzZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgRGVmYXVsdFJlbW90ZVRyYXZlcnNlcjxTdHJpbmc+IG8gPSBuZXcgRGVmYXVsdFJlbW90ZVRyYXZlcnNlcjw+KCJ0ZXN0IiwgMTAwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG8sIHNlcmlhbGl6ZURlc2VyaWFsaXplKG1hcHBlciwgbywgVHJhdmVyc2VyLmNsYXNzKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVWYXJpYW50c09mUCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCJ2NCIpKSByZXR1cm47CisKICAgICAgICAgZmluYWwgTGlzdDxQPiB2YXJpYW50c09mUCA9IEFycmF5cy5hc0xpc3QoCiAgICAgICAgICAgICAgICAgUC5iZXR3ZWVuKDEsMiksCiAgICAgICAgICAgICAgICAgUC5lcSgxKSwKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OTWFwcGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXJUZXN0LmphdmEKaW5kZXggMWQ5MmQ4NC4uODViOTY4OSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXJUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05NYXBwZXJUZXN0LmphdmEKQEAgLTUzLDcgKzUzLDEwIEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uX187CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzTm90Lm5vdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nU3RhcnRzV2l0aC5zdGFydHNXaXRoOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc3VtZS5hc3N1bWVUaGF0OwogCiAvKioKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKQEAgLTY4LDYgKzcxLDcgQEAKICAgICAgICAgICAgICAgICB7InYyIiwgR3JhcGhTT05NYXBwZXIuYnVpbGQoKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKS5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjIuYnVpbGQoKSkudHlwZUluZm8oVHlwZUluZm8uTk9fVFlQRVMpLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpfSwKICAgICAgICAgICAgICAgICB7InYyLWRlZmF1bHQiLCBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYyXzApLmFkZERlZmF1bHRYTW9kdWxlKHRydWUpLnR5cGVJbmZvKFR5cGVJbmZvLk5PX1RZUEVTKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKX0sIC8vIGFsdGVybmF0ZSBjb25zdHJ1Y3Rpb24gb2YgdjIKICAgICAgICAgICAgICAgICB7InYzIiwgR3JhcGhTT05NYXBwZXIuYnVpbGQoKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WM18wKS5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKSkudHlwZUluZm8oVHlwZUluZm8uTk9fVFlQRVMpLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpfSwKKyAgICAgICAgICAgICAgICB7InY0IiwgR3JhcGhTT05NYXBwZXIuYnVpbGQoKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WNF8wKS5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjQuYnVpbGQoKSkudHlwZUluZm8oVHlwZUluZm8uTk9fVFlQRVMpLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpfSwKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC05MSw2ICs5NSw4IEBACiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIntcImlkXCI6MTIzLFwibGFiZWxcIjpcInBlcnNvblwiLFwidHlwZVwiOlwidmVydGV4XCIsXCJwcm9wZXJ0aWVzXCI6e1wibmFtZVwiOlt7XCJpZFwiOjEsXCJ2YWx1ZVwiOlwiYWxpY2VcIn1dLFwiYWdlXCI6W3tcImlkXCI6MSxcInZhbHVlXCI6XCIzMVwifV19fSIsIGpzb24pOwogICAgICAgICBlbHNlIGlmICh2ZXJzaW9uLnN0YXJ0c1dpdGgoInYyIikpCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIntcImlkXCI6MTIzLFwibGFiZWxcIjpcInBlcnNvblwiLFwicHJvcGVydGllc1wiOntcIm5hbWVcIjpbe1wiaWRcIjoxLFwidmFsdWVcIjpcImFsaWNlXCIsXCJsYWJlbFwiOlwibmFtZVwifV0sXCJhZ2VcIjpbe1wiaWRcIjoxLFwidmFsdWVcIjpcIjMxXCIsXCJsYWJlbFwiOlwiYWdlXCJ9XX19IiwganNvbik7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgidjQiKSkKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygie1wiaWRcIjoxMjMsXCJsYWJlbFwiOltcInBlcnNvblwiXSxcInR5cGVcIjpcInZlcnRleFwiLFwicHJvcGVydGllc1wiOntcIm5hbWVcIjpbe1wiaWRcIjoxLFwidmFsdWVcIjpcImFsaWNlXCJ9XSxcImFnZVwiOlt7XCJpZFwiOjEsXCJ2YWx1ZVwiOlwiMzFcIn1dfX0iLCBqc29uKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVmVyc2lvbiBub3QgYWNjb3VudGVkIGZvciBpbiBhc3NlcnRzIik7CiAgICAgfQpAQCAtMTA5LDYgKzExNSw4IEBACiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIntcImlkXCI6MTIzLFwibGFiZWxcIjpcImtub3dzXCIsXCJ0eXBlXCI6XCJlZGdlXCIsXCJpblZMYWJlbFwiOlwicGVyc29uXCIsXCJvdXRWTGFiZWxcIjpcInBlcnNvblwiLFwiaW5WXCI6MixcIm91dFZcIjoxLFwicHJvcGVydGllc1wiOntcIndlaWdodFwiOjAuNX19IiwganNvbik7CiAgICAgICAgIGVsc2UgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgidjIiKSkKICAgICAgICAgICAgIGFzc2VydEVxdWFscygie1wiaWRcIjoxMjMsXCJsYWJlbFwiOlwia25vd3NcIixcImluVkxhYmVsXCI6XCJwZXJzb25cIixcIm91dFZMYWJlbFwiOlwicGVyc29uXCIsXCJpblZcIjoyLFwib3V0VlwiOjEsXCJwcm9wZXJ0aWVzXCI6e1wid2VpZ2h0XCI6e1wia2V5XCI6XCJ3ZWlnaHRcIixcInZhbHVlXCI6MC41fX19IiwganNvbik7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgidjQiKSkKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygie1wiaWRcIjoxMjMsXCJsYWJlbFwiOltcImtub3dzXCJdLFwidHlwZVwiOlwiZWRnZVwiLFwiaW5WXCI6e1wiaWRcIjoyLFwibGFiZWxcIjpbXCJwZXJzb25cIl19LFwib3V0VlwiOntcImlkXCI6MSxcImxhYmVsXCI6W1wicGVyc29uXCJdfSxcInByb3BlcnRpZXNcIjp7XCJ3ZWlnaHRcIjpbMC41XX19IiwganNvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlZlcnNpb24gbm90IGFjY291bnRlZCBmb3IgaW4gYXNzZXJ0cyIpOwogICAgIH0KQEAgLTEyOCw3ICsxMzYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcHV0KCJjdXJyZW50IiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfX0sIHYpOwogICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygie1wiaWRcIjoxMjMsXCJ2YWx1ZVwiOlwiYWxpY2VcIixcImxhYmVsXCI6XCJuYW1lXCIsXCJwcm9wZXJ0aWVzXCI6e1wiY3VycmVudFwiOnRydWV9fSIsIGpzb24pOworICAgICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCJ2NCIpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIntcImlkXCI6MTIzLFwidmFsdWVcIjpcImFsaWNlXCIsXCJsYWJlbFwiOltcIm5hbWVcIl0sXCJwcm9wZXJ0aWVzXCI6e1wiY3VycmVudFwiOnRydWV9fSIsIGpzb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ7XCJpZFwiOjEyMyxcInZhbHVlXCI6XCJhbGljZVwiLFwibGFiZWxcIjpcIm5hbWVcIixcInByb3BlcnRpZXNcIjp7XCJjdXJyZW50XCI6dHJ1ZX19IiwganNvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdApAQCAtMTM2LDcgKzE0OCwxMSBAQAogICAgICAgICBmaW5hbCBEZXRhY2hlZFZlcnRleCB2ID0gbmV3IERldGFjaGVkVmVydGV4KDMyMUwsICJwZXJzb24iLCBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpKTsKICAgICAgICAgZmluYWwgVmVydGV4UHJvcGVydHkgcCA9IG5ldyBEZXRhY2hlZFZlcnRleFByb3BlcnR5KDEyM0wsICJuYW1lIiwgImFsaWNlIiwgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSwgdik7CiAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ7XCJpZFwiOjEyMyxcInZhbHVlXCI6XCJhbGljZVwiLFwibGFiZWxcIjpcIm5hbWVcIn0iLCBqc29uKTsKKyAgICAgICAgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgidjQiKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ7XCJpZFwiOjEyMyxcInZhbHVlXCI6XCJhbGljZVwiLFwibGFiZWxcIjpbXCJuYW1lXCJdfSIsIGpzb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ7XCJpZFwiOjEyMyxcInZhbHVlXCI6XCJhbGljZVwiLFwibGFiZWxcIjpcIm5hbWVcIn0iLCBqc29uKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0CkBAIC0xNTEsMTIgKzE2NywxNiBAQAogCiAgICAgICAgIGlmICh2ZXJzaW9uLnN0YXJ0c1dpdGgoInYxIikgfHwgdmVyc2lvbi5zdGFydHNXaXRoKCJ2MyIpKQogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ7XCJsYWJlbHNcIjpbW1wiYVwiXSxbXCJiXCJdLFtcImNcIl1dLFwib2JqZWN0c1wiOlt7XCJpZFwiOjEyMyxcImxhYmVsXCI6XCJwZXJzb25cIixcInR5cGVcIjpcInZlcnRleFwiLFwicHJvcGVydGllc1wiOntcIm5hbWVcIjpbe1wiaWRcIjoxLFwidmFsdWVcIjpcImFsaWNlXCJ9XSxcImFnZVwiOlt7XCJpZFwiOjEsXCJ2YWx1ZVwiOlwiMzFcIn1dfX0sMTIzLFwiYWxpY2VcIl19IiwganNvbik7CisgICAgICAgIGVsc2UgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgidjQiKSkKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygie1wibGFiZWxzXCI6W1tcImFcIl0sW1wiYlwiXSxbXCJjXCJdXSxcIm9iamVjdHNcIjpbe1wiaWRcIjoxMjMsXCJsYWJlbFwiOltcInBlcnNvblwiXSxcInR5cGVcIjpcInZlcnRleFwiLFwicHJvcGVydGllc1wiOntcIm5hbWVcIjpbe1wiaWRcIjoxLFwidmFsdWVcIjpcImFsaWNlXCJ9XSxcImFnZVwiOlt7XCJpZFwiOjEsXCJ2YWx1ZVwiOlwiMzFcIn1dfX0sMTIzLFwiYWxpY2VcIl19IiwganNvbik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFzc2VydEVxdWFscygie1wibGFiZWxzXCI6W1tcImFcIl0sW1wiYlwiXSxbXCJjXCJdXSxcIm9iamVjdHNcIjpbe1wiaWRcIjoxMjMsXCJsYWJlbFwiOlwicGVyc29uXCIsXCJwcm9wZXJ0aWVzXCI6e1wibmFtZVwiOlt7XCJpZFwiOjEsXCJ2YWx1ZVwiOlwiYWxpY2VcIixcImxhYmVsXCI6XCJuYW1lXCJ9XSxcImFnZVwiOlt7XCJpZFwiOjEsXCJ2YWx1ZVwiOlwiMzFcIixcImxhYmVsXCI6XCJhZ2VcIn1dfX0sMTIzLFwiYWxpY2VcIl19IiwganNvbik7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVUcmF2ZXJzYWxFeHBsYW5hdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgVHJhdmVyc2FsRXhwbGFuYXRpb24gdGUgPSBfXygpLm91dCgpLm91dFYoKS5vdXRFKCkuZXhwbGFpbigpOwogICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcodGUpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIntcIm9yaWdpbmFsXCI6W1wiSW5qZWN0U3RlcChbXSlcIixcIlZlcnRleFN0ZXAoT1VULHZlcnRleClcIixcIkVkZ2VWZXJ0ZXhTdGVwKE9VVClcIixcIlZlcnRleFN0ZXAoT1VULGVkZ2UpXCJdLFwiaW50ZXJtZWRpYXRlXCI6W10sXCJmaW5hbFwiOltcIkluamVjdFN0ZXAoW10pXCIsXCJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpXCIsXCJFZGdlVmVydGV4U3RlcChPVVQpXCIsXCJWZXJ0ZXhTdGVwKE9VVCxlZGdlKVwiXX0iLCBqc29uKTsKQEAgLTE3MSw2ICsxOTEsOCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVJbnN0YW50KCl0aHJvd3MgRXhjZXB0aW9uICB7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInY0IikpKTsKKwogICAgICAgICBmaW5hbCBJbnN0YW50IG8gPSBJbnN0YW50Lm9mRXBvY2hNaWxsaShTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhvKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJcIiIgKyBvLnRvU3RyaW5nKCkgKyAiXCIiLCBqc29uKTsKQEAgLTE3OCw2ICsyMDAsOCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVMb2NhbERhdGUoKXRocm93cyBFeGNlcHRpb24gIHsKKyAgICAgICAgYXNzdW1lVGhhdCh2ZXJzaW9uLCBub3Qoc3RhcnRzV2l0aCgidjQiKSkpOworCiAgICAgICAgIGZpbmFsIExvY2FsRGF0ZSBvID0gTG9jYWxEYXRlLm5vdygpOwogICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcobyk7CiAgICAgICAgIGFzc2VydEVxdWFscygiXCIiICsgby50b1N0cmluZygpICsgIlwiIiwganNvbik7CkBAIC0xODUsNiArMjA5LDggQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlTG9jYWxEYXRlVGltZSgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgTG9jYWxEYXRlVGltZSBvID0gTG9jYWxEYXRlVGltZS5ub3coKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKG8pOwogICAgICAgICBhc3NlcnRFcXVhbHMoIlwiIiArIG8udG9TdHJpbmcoKSArICJcIiIsIGpzb24pOwpAQCAtMTkyLDYgKzIxOCw4IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUxvY2FsVGltZSgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgTG9jYWxUaW1lIG8gPSBMb2NhbFRpbWUubm93KCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhvKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJcIiIgKyBvLnRvU3RyaW5nKCkgKyAiXCIiLCBqc29uKTsKQEAgLTE5OSw2ICsyMjcsOCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVNb250aERheSgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgTW9udGhEYXkgbyA9IE1vbnRoRGF5Lm5vdygpOwogICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcobyk7CiAgICAgICAgIGFzc2VydEVxdWFscygiXCIiICsgby50b1N0cmluZygpICsgIlwiIiwganNvbik7CkBAIC0yMTMsNiArMjQzLDggQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlT2Zmc2V0VGltZSgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgT2Zmc2V0VGltZSBvID0gT2Zmc2V0VGltZS5ub3coKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKG8pOwogICAgICAgICBhc3NlcnRFcXVhbHMoIlwiIiArIG8udG9TdHJpbmcoKSArICJcIiIsIGpzb24pOwpAQCAtMjIwLDYgKzI1Miw4IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVBlcmlvZCgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgUGVyaW9kIG8gPSBQZXJpb2Qub2ZEYXlzKDMpOwogICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcobyk7CiAgICAgICAgIGFzc2VydEVxdWFscygiXCIiICsgby50b1N0cmluZygpICsgIlwiIiwganNvbik7CkBAIC0yMjcsNiArMjYxLDggQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlWWVhcigpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgWWVhciBvID0gWWVhci5ub3coKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKG8pOwogICAgICAgICBhc3NlcnRFcXVhbHMoIlwiIiArIG8udG9TdHJpbmcoKSArICJcIiIsIGpzb24pOwpAQCAtMjM0LDYgKzI3MCw4IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVllYXJNb250aCgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgWWVhck1vbnRoIG8gPSBZZWFyTW9udGgubm93KCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhvKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJcIiIgKyBvLnRvU3RyaW5nKCkgKyAiXCIiLCBqc29uKTsKQEAgLTI0MSw2ICsyNzksOCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVab25lZERhdGVUaW1lKCl0aHJvd3MgRXhjZXB0aW9uICB7CisgICAgICAgIGFzc3VtZVRoYXQodmVyc2lvbiwgbm90KHN0YXJ0c1dpdGgoInY0IikpKTsKKwogICAgICAgICBmaW5hbCBab25lZERhdGVUaW1lIG8gPSBab25lZERhdGVUaW1lLm5vdygpOwogICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcobyk7CiAgICAgICAgIGFzc2VydEVxdWFscygiXCIiICsgby50b1N0cmluZygpICsgIlwiIiwganNvbik7CkBAIC0yNDgsNiArMjg4LDggQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlWm9uZU9mZnNldCgpdGhyb3dzIEV4Y2VwdGlvbiAgeworICAgICAgICBhc3N1bWVUaGF0KHZlcnNpb24sIG5vdChzdGFydHNXaXRoKCJ2NCIpKSk7CisKICAgICAgICAgZmluYWwgWm9uZU9mZnNldCBvID0gWm9uZWREYXRlVGltZS5ub3coKS5nZXRPZmZzZXQoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKG8pOwogICAgICAgICBhc3NlcnRFcXVhbHMoIlwiIiArIG8udG9TdHJpbmcoKSArICJcIiIsIGpzb24pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvTWFwcGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvTWFwcGVyVGVzdC5qYXZhCmluZGV4IDg5NTEyODEuLmMzOTFiZmEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyeW8vR3J5b01hcHBlclRlc3QuamF2YQorKysgYi9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncnlvL0dyeW9NYXBwZXJUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3J5bzsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuTWVyZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuVHJhdmVyc2FsRXhwbGFuYXRpb247CkBAIC0zNTAsMTIgKzM1MCw2IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVCeXRlY29kZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IF9fKCkub3V0KCkub3V0VigpLm91dEUoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGJ5dGVjb2RlLnRvU3RyaW5nKCksIHNlcmlhbGl6ZURlc2VyaWFsaXplKGJ5dGVjb2RlLCBCeXRlY29kZS5jbGFzcykudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVDbGFzcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbGFzczw/PiBjbGF6eiA9IGphdmEuaW8uRmlsZS5jbGFzczsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGNsYXp6LCBzZXJpYWxpemVEZXNlcmlhbGl6ZShjbGF6eiwgQ2xhc3MuY2xhc3MpKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9Db2xsZWN0aW9uVXRpbFRlc3QuamF2YSBiL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9Db2xsZWN0aW9uVXRpbFRlc3QuamF2YQppbmRleCAzZTA2ZmY1Li4yYTZiYWVjIDEwMDY0NAotLS0gYS9ncmVtbGluLWNvcmUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvQ29sbGVjdGlvblV0aWxUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL0NvbGxlY3Rpb25VdGlsVGVzdC5qYXZhCkBAIC0zNSw2ICszNSw3IEBACiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CisKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiBwdWJsaWMgY2xhc3MgQ29sbGVjdGlvblV0aWxUZXN0IHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tY29yZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9HcmVtbGluVGVzdC5qYXZhIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL0dyZW1saW5UZXN0LmphdmEKaW5kZXggN2FlYTIyMS4uMjllMmY0ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL0dyZW1saW5UZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1jb3JlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL0dyZW1saW5UZXN0LmphdmEKQEAgLTIyLDYgKzIyLDcgQEAKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiAvKioKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKQEAgLTM0LDggKzM1LDIzIEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEdldFZlcnNpb24oKSB7Ci0gICAgICAgIC8vIHRoZSBtYW5pZmVzdHMgbGliIHNob3VsZCBiZSBzb2xpZCBhdCBkb2luZyB0aGlzIGpvYiAtIGNhbiBnZXQgYnkgd2l0aCBhCi0gICAgICAgIC8vIGxpZ2h0IHRlc3RpbmcgaGVyZSAtIHRoaXMgd2lsbCBiZSBnb29kIGZvciBhdCBsZWFzdCB2ZXJzaW9uIDMKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCczJywgR3JlbWxpbi52ZXJzaW9uKCkuY2hhckF0KDApKTsKKyAgICAgICAgU3RyaW5nIHZlcnNpb25TdHJpbmcgPSBHcmVtbGluLnZlcnNpb24oKTsKKyAgICAgICAgLy9SZW1vdmUgc3VmZml4ZXMgc3VjaCBhcyAtU05BUFNIT1QgZnJvbSB2ZXJzaW9uIGZvciB0ZXN0CisgICAgICAgIGlmICh2ZXJzaW9uU3RyaW5nLmNvbnRhaW5zKCItIikpIHsKKyAgICAgICAgICAgIHZlcnNpb25TdHJpbmcgPSB2ZXJzaW9uU3RyaW5nLnN1YnN0cmluZygwLCB2ZXJzaW9uU3RyaW5nLmluZGV4T2YoIi0iKSk7CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nW10gdmVyc2lvbiA9IHZlcnNpb25TdHJpbmcucmVwbGFjZSgiLVNOQVBTSE9UIiwgIiIpLnNwbGl0KCJcXC4iKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoIkdyZW1saW4udmVyc2lvbigpIHNob3VsZCBiZSBpbiBmb3JtYXQgb2YgeC55LnoiLCAzLCB2ZXJzaW9uLmxlbmd0aCk7CisgICAgICAgIGFzc2VydFRydWUoIk1ham9yIHZlcnNpb24gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAzIiwgSW50ZWdlci5wYXJzZUludCh2ZXJzaW9uWzBdKSA+IDMpOworICAgICAgICBhc3NlcnRUcnVlKCJNaW5vciB2ZXJzaW9uIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludCIsIEludGVnZXIucGFyc2VJbnQodmVyc2lvblsxXSkgPj0gMCk7CisgICAgICAgIGFzc2VydFRydWUoIlBhdGNoIHZlcnNpb24gc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50IiwgSW50ZWdlci5wYXJzZUludCh2ZXJzaW9uWzJdKSA+PSAwKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEdldE1ham9yVmVyc2lvbigpIHsKKyAgICAgICAgU3RyaW5nIG1ham9yVmVyc2lvbiA9IEdyZW1saW4ubWFqb3JWZXJzaW9uKCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiTWFqb3IgdmVyc2lvbiBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDMiLCBJbnRlZ2VyLnBhcnNlSW50KG1ham9yVmVyc2lvbikgPiAzKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9FeGFtcGxlcy9CYXNpY0dyZW1saW4vQmFzaWNHcmVtbGluLmNzIGIvZ3JlbWxpbi1kb3RuZXQvRXhhbXBsZXMvQmFzaWNHcmVtbGluL0Jhc2ljR3JlbWxpbi5jcwppbmRleCA1ZTkyZjQ4Li43YjBlZjA0IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9FeGFtcGxlcy9CYXNpY0dyZW1saW4vQmFzaWNHcmVtbGluLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L0V4YW1wbGVzL0Jhc2ljR3JlbWxpbi9CYXNpY0dyZW1saW4uY3MKQEAgLTIwLDYgKzIwLDcgQEAKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5SZW1vdGU7CiB1c2luZyBzdGF0aWMgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlOwordXNpbmcgc3RhdGljIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLl9fOwogCiBwdWJsaWMgY2xhc3MgQmFzaWNHcmVtbGluRXhhbXBsZQogewpAQCAtNDAsOCArNDEsOCBAQAogCiAgICAgICAgIC8vIEJlIHN1cmUgdG8gdXNlIGEgdGVybWluYXRpbmcgc3RlcCBsaWtlIE5leHQoKSBvciBJdGVyYXRlKCkgc28gdGhhdCB0aGUgdHJhdmVyc2FsICJleGVjdXRlcyIKICAgICAgICAgLy8gSXRlcmF0ZSgpIGRvZXMgbm90IHJldHVybiBhbnkgZGF0YSBhbmQgaXMgdXNlZCB0byBqdXN0IGdlbmVyYXRlIHNpZGUtZWZmZWN0cyAoaS5lLiB3cml0ZSBkYXRhIHRvIHRoZSBkYXRhYmFzZSkKLSAgICAgICAgZy5WKHYxKS5BZGRFKCJrbm93cyIpLlRvKHYyKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC43NSkuSXRlcmF0ZSgpOwotICAgICAgICBnLlYodjEpLkFkZEUoImtub3dzIikuVG8odjMpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjc1KS5JdGVyYXRlKCk7CisgICAgICAgIGcuVih2MSkuQWRkRSgia25vd3MiKS5UbyhDb25zdGFudCh2MikpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjc1KS5JdGVyYXRlKCk7CisgICAgICAgIGcuVih2MSkuQWRkRSgia25vd3MiKS5UbyhDb25zdGFudCh2MykpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjc1KS5JdGVyYXRlKCk7CiAKICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgIm1hcmtvIiB2ZXJ0ZXgKICAgICAgICAgdmFyIG1hcmtvID0gYXdhaXQgZy5WKCkuSGFzKFZlcnRleExhYmVsLCAibmFtZSIsICJtYXJrbyIpLlZhbHVlczxzdHJpbmc+KCJuYW1lIikuUHJvbWlzZSh0ID0+IHQuTmV4dCgpKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L0V4YW1wbGVzL0Nvbm5lY3Rpb25zL0Nvbm5lY3Rpb25zLmNzIGIvZ3JlbWxpbi1kb3RuZXQvRXhhbXBsZXMvQ29ubmVjdGlvbnMvQ29ubmVjdGlvbnMuY3MKaW5kZXggYTU1M2I0ZC4uYmNmZGE3ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvRXhhbXBsZXMvQ29ubmVjdGlvbnMvQ29ubmVjdGlvbnMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvRXhhbXBsZXMvQ29ubmVjdGlvbnMvQ29ubmVjdGlvbnMuY3MKQEAgLTE5LDIwICsxOSwyMCBAQAogCiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuUmVtb3RlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwogdXNpbmcgc3RhdGljIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLkFub255bW91c1RyYXZlcnNhbFNvdXJjZTsKIAogcHVibGljIGNsYXNzIENvbm5lY3Rpb25FeGFtcGxlCiB7CiAgICAgc3RhdGljIHJlYWRvbmx5IHN0cmluZyBTZXJ2ZXJIb3N0ID0gRW52aXJvbm1lbnQuR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiR1JFTUxJTl9TRVJWRVJfSE9TVCIpID8/ICJsb2NhbGhvc3QiOwogICAgIHN0YXRpYyByZWFkb25seSBpbnQgU2VydmVyUG9ydCA9IGludC5QYXJzZShFbnZpcm9ubWVudC5HZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJHUkVNTElOX1NFUlZFUl9QT1JUIikgPz8gIjgxODIiKTsKKyAgICBzdGF0aWMgcmVhZG9ubHkgaW50IFNlY3VyZVNlcnZlclBvcnQgPSBpbnQuUGFyc2UoRW52aXJvbm1lbnQuR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiR1JFTUxJTl9TRUNVUkVfU0VSVkVSX1BPUlQiKSA/PyAiODE4MyIpOwogICAgIHN0YXRpYyByZWFkb25seSBzdHJpbmcgVmVydGV4TGFiZWwgPSBFbnZpcm9ubWVudC5HZXRFbnZpcm9ubWVudFZhcmlhYmxlKCJWRVJURVhfTEFCRUwiKSA/PyAiY29ubmVjdGlvbiI7CiAKICAgICBzdGF0aWMgdm9pZCBNYWluKCkKICAgICB7CiAgICAgICAgIFdpdGhSZW1vdGVDb25uZWN0aW9uKCk7CiAgICAgICAgIFdpdGhDb25mKCk7Ci0gICAgICAgIFdpdGhTZXJpYWxpemVyKCk7CisgICAgICAgIFdpdGhCYXNpY0F1dGgoKTsKICAgICB9CiAKICAgICAvLyBDb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIKQEAgLTQ4LDExICs0OCwxNiBAQAogICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVmVydGV4IGNvdW50OiAiICsgY291bnQpOwogICAgIH0KIAotICAgIC8vIENvbm5lY3RpbmcgdG8gdGhlIHNlcnZlciB3aXRoIGN1c3RvbWl6ZWQgY29uZmlndXJhdGlvbnMKKyAgICAvLyBDb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIgd2l0aCBjdXN0b21pemVkIGNvbm5lY3Rpb24gc2V0dGluZ3MKICAgICBzdGF0aWMgdm9pZCBXaXRoQ29uZigpCiAgICAgewotICAgICAgICB1c2luZyB2YXIgcmVtb3RlQ29ubmVjdGlvbiA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKG5ldyBHcmVtbGluQ2xpZW50KAotICAgICAgICBuZXcgR3JlbWxpblNlcnZlcihob3N0bmFtZTogU2VydmVySG9zdCwgcG9ydDogU2VydmVyUG9ydCwgZW5hYmxlU3NsOiBmYWxzZSwgdXNlcm5hbWU6ICIiLCBwYXNzd29yZDogIiIpKSwgImciKTsKKyAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFNlcnZlckhvc3QsIFNlcnZlclBvcnQpOworICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbm5lY3Rpb25UaW1lb3V0ID0gVGltZVNwYW4uRnJvbVNlY29uZHMoMzApLAorICAgICAgICB9OworICAgICAgICB1c2luZyB2YXIgcmVtb3RlQ29ubmVjdGlvbiA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKAorICAgICAgICAgICAgbmV3IEdyZW1saW5DbGllbnQoc2VydmVyLCBjb25uZWN0aW9uU2V0dGluZ3M6IHNldHRpbmdzKSwgImciKTsKICAgICAgICAgdmFyIGcgPSBUcmF2ZXJzYWwoKS5XaXRoKHJlbW90ZUNvbm5lY3Rpb24pOwogCiAgICAgICAgIHZhciB2ID0gZy5BZGRWKFZlcnRleExhYmVsKS5JdGVyYXRlKCk7CkBAIC02MCwxMSArNjUsMTMgQEAKICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlZlcnRleCBjb3VudDogIiArIGNvdW50KTsKICAgICB9CiAKLSAgICAvLyBTcGVjaWZ5aW5nIGEgc2VyaWFsaXplcgotICAgIHN0YXRpYyB2b2lkIFdpdGhTZXJpYWxpemVyKCkKKyAgICAvLyBDb25uZWN0aW5nIHdpdGggYmFzaWMgYXV0aGVudGljYXRpb24gdXNpbmcgYSByZXF1ZXN0IGludGVyY2VwdG9yCisgICAgc3RhdGljIHZvaWQgV2l0aEJhc2ljQXV0aCgpCiAgICAgewotICAgICAgICB2YXIgc2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoU2VydmVySG9zdCwgU2VydmVyUG9ydCk7Ci0gICAgICAgIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChzZXJ2ZXIsIG5ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigpKTsKKyAgICAgICAgdmFyIHNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFNlcnZlckhvc3QsIFNlY3VyZVNlcnZlclBvcnQsIGVuYWJsZVNzbDogdHJ1ZSk7CisgICAgICAgIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChzZXJ2ZXIsCisgICAgICAgICAgICBjb25uZWN0aW9uU2V0dGluZ3M6IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MgeyBTa2lwQ2VydGlmaWNhdGVWYWxpZGF0aW9uID0gdHJ1ZSB9LAorICAgICAgICAgICAgaW50ZXJjZXB0b3JzOiBuZXdbXSB7IEF1dGguQmFzaWNBdXRoKCJzdGVwaGVuIiwgInBhc3N3b3JkIikgfSk7CiAgICAgICAgIHVzaW5nIHZhciByZW1vdGVDb25uZWN0aW9uID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oY2xpZW50LCAiZyIpOwogICAgICAgICB2YXIgZyA9IFRyYXZlcnNhbCgpLldpdGgocmVtb3RlQ29ubmVjdGlvbik7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L0V4YW1wbGVzL01vZGVyblRyYXZlcnNhbHMvTW9kZXJuVHJhdmVyc2Fscy5jcyBiL2dyZW1saW4tZG90bmV0L0V4YW1wbGVzL01vZGVyblRyYXZlcnNhbHMvTW9kZXJuVHJhdmVyc2Fscy5jcwppbmRleCA3N2YyMGM2Li4xOWExZDBiIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9FeGFtcGxlcy9Nb2Rlcm5UcmF2ZXJzYWxzL01vZGVyblRyYXZlcnNhbHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvRXhhbXBsZXMvTW9kZXJuVHJhdmVyc2Fscy9Nb2Rlcm5UcmF2ZXJzYWxzLmNzCkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgICAgIHZhciBlMiA9IGcuVigxKS5Cb3RoRSgpLldoZXJlKE90aGVyVigpLkhhc0lkKDIpKS5Ub0xpc3QoKTsgLy8gKDIpCiAgICAgICAgIHZhciB2MSA9IGcuVigxKS5OZXh0KCk7CiAgICAgICAgIHZhciB2MiA9IGcuVigyKS5OZXh0KCk7Ci0gICAgICAgIHZhciBlMyA9IGcuVih2MSkuQm90aEUoKS5XaGVyZShPdGhlclYoKS5Jcyh2MikpLlRvTGlzdCgpOyAvLyAoMykKLSAgICAgICAgdmFyIGU0ID0gZy5WKHYxKS5PdXRFKCkuV2hlcmUoSW5WKCkuSXModjIpKS5Ub0xpc3QoKTsgLy8gKDQpCisgICAgICAgIHZhciBlMyA9IGcuVih2MSkuQm90aEUoKS5XaGVyZShPdGhlclYoKS5JZCgpLklzKHYyKSkuVG9MaXN0KCk7IC8vICgzKQorICAgICAgICB2YXIgZTQgPSBnLlYodjEpLk91dEUoKS5XaGVyZShJblYoKS5JZCgpLklzKHYyKSkuVG9MaXN0KCk7IC8vICg0KQogICAgICAgICB2YXIgZTUgPSBnLlYoMSkuT3V0RSgpLldoZXJlKEluVigpLkhhcyhULklkLCBXaXRoaW4oMiwgMykpKS5Ub0xpc3QoKTsgLy8gKDUpCiAgICAgICAgIHZhciBlNiA9IGcuVigxKS5PdXQoKS5XaGVyZShfXy5JbigpLkhhc0lkKDYpKS5Ub0xpc3QoKTsgLy8gKDYpCiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L1JFQURNRS5tZCBiL2dyZW1saW4tZG90bmV0L1JFQURNRS5tZAppbmRleCA0MWFlNDkwLi5mMzliMzJlIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9SRUFETUUubWQKKysrIGIvZ3JlbWxpbi1kb3RuZXQvUkVBRE1FLm1kCkBAIC0xLDUgKzEsNCBAQAogPCEtLQotCiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCkBAIC04LDcgKzcsNyBAQAogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAKLSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogCiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCkBAIC0xNiw3ICsxNSw2IEBACiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogIHVuZGVyIHRoZSBMaWNlbnNlLgotCiAtLT4KIAogIyBHcmVtbGluLk5ldApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5IGIvZ3JlbWxpbi1kb3RuZXQvYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5CmluZGV4IDI3YWUyNjQuLjI0YmMyNzEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L2J1aWxkL2dlbmVyYXRlLmdyb292eQorKysgYi9ncmVtbGluLWRvdG5ldC9idWlsZC9nZW5lcmF0ZS5ncm9vdnkKQEAgLTEzOSw5ICsxMzksMTYgQEAKICAgICAgICAgICAgICcgICAgICAgICAgICBGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+IGYgPSBsaXN0WzBdO1xuJyArCiAgICAgICAgICAgICAnICAgICAgICAgICAgbGlzdC5SZW1vdmVBdCgwKTtcbicgKwogICAgICAgICAgICAgJyAgICAgICAgICAgIElUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZi5JbnZva2UoZywgcGFyYW1ldGVycyk7XG4nICsKLSAgICAgICAgICAgICcgICAgICAgICAgICBmb3JlYWNoICh2YXIgc2lkZUVmZmVjdCBpbiBzaWRlRWZmZWN0cylcbicgKworICAgICAgICAgICAgJyAgICAgICAgICAgIC8vIFNpZGUgZWZmZWN0cyBuZWVkIHRvIGJlIHByZXBlbmRlZCBhcyBzb3VyY2Ugc3RlcHMgKGJlZm9yZSB0cmF2ZXJzYWwgc3RlcHMpLlxuJyArCisgICAgICAgICAgICAnICAgICAgICAgICAgLy8gQnVpbGQgdGhlbSBpbiBhIHRlbXBvcmFyeSBHcmVtbGluTGFuZyBhbmQgcHJlcGVuZCB0byB0aGUgdHJhdmVyc2FsXCdzIGdyZW1saW4gc3RyaW5nLlxuJyArCisgICAgICAgICAgICAnICAgICAgICAgICAgaWYgKHNpZGVFZmZlY3RzLkNvdW50ID4gMClcbicgKwogICAgICAgICAgICAgJyAgICAgICAgICAgIHtcbicgKwotICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIHNpZGVFZmZlY3QuS2V5LCBzaWRlRWZmZWN0LlZhbHVlKTtcbicgKworICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB2YXIgc2lkZUVmZmVjdExhbmcgPSBuZXcgR3JlbWxpbkxhbmcoKTtcbicgKworICAgICAgICAgICAgJyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgc2lkZUVmZmVjdCBpbiBzaWRlRWZmZWN0cylcbicgKworICAgICAgICAgICAgJyAgICAgICAgICAgICAgICB7XG4nICsKKyAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIHNpZGVFZmZlY3RMYW5nLkFkZFNvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCBzaWRlRWZmZWN0LktleSwgc2lkZUVmZmVjdC5WYWx1ZSk7XG4nICsKKyAgICAgICAgICAgICcgICAgICAgICAgICAgICAgfVxuJyArCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgIHRyYXZlcnNhbC5HcmVtbGluTGFuZy5HcmVtbGluID0gc2lkZUVmZmVjdExhbmcuR3JlbWxpbiArIHRyYXZlcnNhbC5HcmVtbGluTGFuZy5HcmVtbGluO1xuJyArCiAgICAgICAgICAgICAnICAgICAgICAgICAgfVxuJyArCiAgICAgICAgICAgICAnICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDtcbicgKwogICAgICAgICAgICAgJyAgICAgICAgfVxuJyArCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9kb2NrZXItY29tcG9zZS55bWwgYi9ncmVtbGluLWRvdG5ldC9kb2NrZXItY29tcG9zZS55bWwKaW5kZXggM2ExODU5Yy4uYTVkNWI4OSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvZG9ja2VyLWNvbXBvc2UueW1sCisrKyBiL2dyZW1saW4tZG90bmV0L2RvY2tlci1jb21wb3NlLnltbApAQCAtMzUsMTMgKzM1LDExIEBACiAgICAgICAtICR7SE9NRX0vLm0yOi9yb290Ly5tMgogICAgICAgLSAke0FCU19QUk9KRUNUX0hPTUV9L2dyZW1saW4tdGVzdC90YXJnZXQ6L29wdC9ncmVtbGluLXRlc3QKICAgICBoZWFsdGhjaGVjazoKLSAgICAgIHRlc3Q6IFsgIkNNRC1TSEVMTCIsICJhcGsgYWRkIGN1cmwgJiYgY3VybCAtZiBodHRwOi8vbG9jYWxob3N0OjQ1OTQwP2dyZW1saW49MTAwLTEiIF0KKyAgICAgIHRlc3Q6IFsgIkNNRC1TSEVMTCIsICJjdXJsIC1zZiAtWCBQT1NUIC1IICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIC1kICd7XCJncmVtbGluXCI6XCJnLmluamVjdCgxKVwifScgaHR0cDovL2xvY2FsaG9zdDo0NTk0MCIgXQogICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICAgdGltZW91dDogMTBzCiAgICAgICByZXRyaWVzOiAzMAogICAgICAgc3RhcnRfcGVyaW9kOiAzMHMKLSAgICBkZXBlbmRzX29uOgotICAgICAgLSBncmVtbGluLXNvY2tldC1zZXJ2ZXIKIAogICBncmVtbGluLWRvdG5ldC1pbnRlZ3JhdGlvbi10ZXN0czoKICAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1kb3RuZXQtaW50ZWdyYXRpb24tdGVzdHMKQEAgLTQ5LDEyICs0NywxNCBAQAogICAgIHZvbHVtZXM6CiAgICAgICAtIC46L2dyZW1saW4tZG90bmV0CiAgICAgICAtIC4uL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzOi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcworICAgICAgLSAuLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvOi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvCiAgICAgICAtIC4uL2RvY2tlci9ncmVtbGluLXRlc3Qtc2VydmVyOi9ncmVtbGluLWRvdG5ldC9ncmVtbGluLXRlc3Qtc2VydmVyCiAgICAgICAtIC4uL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmY6L2dyZW1saW4tZG90bmV0L2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mLwogICAgIGVudmlyb25tZW50OgogICAgICAgLSBET0NLRVJfRU5WSVJPTk1FTlQ9dHJ1ZQogICAgICAgLSBHUkVNTElOX1NFUlZFUl9IT1NUPWdyZW1saW4tc2VydmVyLXRlc3QtZG90bmV0CiAgICAgICAtIEdSRU1MSU5fU0VSVkVSX1BPUlQ9NDU5NDAKKyAgICAgIC0gR1JFTUxJTl9TRUNVUkVfU0VSVkVSX1BPUlQ9NDU5NDEKICAgICAgIC0gVkVSVEVYX0xBQkVMPWRvdG5ldC1leGFtcGxlCiAgICAgd29ya2luZ19kaXI6IC9ncmVtbGluLWRvdG5ldAogICAgIGNvbW1hbmQ6ID4KQEAgLTcyLDEwICs3MiwzIEBACiAgICAgZGVwZW5kc19vbjoKICAgICAgIGdyZW1saW4tc2VydmVyLXRlc3QtZG90bmV0OgogICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQotCi0gIGdyZW1saW4tc29ja2V0LXNlcnZlcjoKLSAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1zb2NrZXQtc2VydmVyCi0gICAgaW1hZ2U6IHRpbmtlcnBvcC9ncmVtbGluLXNvY2tldC1zZXJ2ZXI6JHtHUkVNTElOX1NFUlZFUn0KLSAgICBwb3J0czoKLSAgICAgIC0gIjQ1OTQzOjQ1OTQzIgotCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9wb20ueG1sIGIvZ3JlbWxpbi1kb3RuZXQvcG9tLnhtbAppbmRleCAxMmRlNmRjLi5lMDBmMGY0IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9wb20ueG1sCisrKyBiL2dyZW1saW4tZG90bmV0L3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1kb3RuZXQ8L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGluLk5ldDwvbmFtZT4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC5UZW1wbGF0ZS9HcmVtbGluLk5ldC5UZW1wbGF0ZS5jc3Byb2ogYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQuVGVtcGxhdGUvR3JlbWxpbi5OZXQuVGVtcGxhdGUuY3Nwcm9qCmluZGV4IGQ2NzM2YWIuLmY5NjAzZjMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC5UZW1wbGF0ZS9HcmVtbGluLk5ldC5UZW1wbGF0ZS5jc3Byb2oKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0LlRlbXBsYXRlL0dyZW1saW4uTmV0LlRlbXBsYXRlLmNzcHJvagpAQCAtMjksNyArMjksNyBAQAogICAgIDxQcm9qZWN0UmVmZXJlbmNlIEluY2x1ZGU9Ii4uL0dyZW1saW4uTmV0L0dyZW1saW4uTmV0LmNzcHJvaiIgLz4KIAogICAgIDwhLS0gZG8gbm90IGVkaXQgdGhlIHZlcnNpb24gZGlyZWN0bHkgLSBtYXZlbiB1cGRhdGVzIGl0IGF1dG9tYXRpY2FsbHkgLS0+Ci0gICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iR3JlbWxpbi5OZXQiIFZlcnNpb249IjMuOC4yLVNOQVBTSE9UIiAvPgorICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9IkdyZW1saW4uTmV0IiBWZXJzaW9uPSI0LjAuMC1TTkFQU0hPVCIgLz4KICAgPC9JdGVtR3JvdXA+CiAKIDwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC5UZW1wbGF0ZS9HcmVtbGluLk5ldC5UZW1wbGF0ZS5udXNwZWMgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQuVGVtcGxhdGUvR3JlbWxpbi5OZXQuVGVtcGxhdGUubnVzcGVjCmluZGV4IDkwNDg4MWEuLmY0MDkxMDYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC5UZW1wbGF0ZS9HcmVtbGluLk5ldC5UZW1wbGF0ZS5udXNwZWMKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0LlRlbXBsYXRlL0dyZW1saW4uTmV0LlRlbXBsYXRlLm51c3BlYwpAQCAtNSw3ICs1LDcgQEAKICAgICAgICAgPHRpdGxlPkdyZW1saW4uTmV0IFRlbXBsYXRlPC90aXRsZT4KIAogICAgICAgICA8IS0tIGRvIG5vdCBlZGl0IHRoZSB2ZXJzaW9uIGRpcmVjdGx5IC0gbWF2ZW4gdXBkYXRlcyBpdCBhdXRvbWF0aWNhbGx5IC0tPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAKICAgICAgICAgPGRlc2NyaXB0aW9uPkdyZW1saW4uTmV0IHRlbXBsYXRlIHRvIGNyZWF0ZSBhIGNvbnNvbGUgYXBwbGljYXRpb24gd2l0aCBkb3RuZXQgbmV3LjwvZGVzY3JpcHRpb24+CiAgICAgICAgIDxhdXRob3JzPkFwYWNoZSBUaW5rZXJQb3A8L2F1dGhvcnM+CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQuVGVtcGxhdGUvUkVBRE1FLm1kIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0LlRlbXBsYXRlL1JFQURNRS5tZAppbmRleCBjNTdmNTFjLi42NjVjMTc5IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQuVGVtcGxhdGUvUkVBRE1FLm1kCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC5UZW1wbGF0ZS9SRUFETUUubWQKQEAgLTgsNyArOCw3IEBACiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIAotIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAKICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQXV0aC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQXV0aC5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTBhYWZlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9BdXRoLmNzCkBAIC0wLDAgKzEsMTk0IEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEFtYXpvbi5SdW50aW1lOwordXNpbmcgQW1hem9uLlJ1bnRpbWUuSW50ZXJuYWw7Cit1c2luZyBBbWF6b24uUnVudGltZS5JbnRlcm5hbC5BdXRoOwordXNpbmcgQW1hem9uLlJ1bnRpbWUuSW50ZXJuYWwuVXRpbDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gICAgIFByb3ZpZGVzIGZhY3RvcnkgbWV0aG9kcyBmb3IgYnVpbHQtaW4gcmVxdWVzdCBpbnRlcmNlcHRvcnMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEF1dGgKKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBSZXR1cm5zIGEgcmVxdWVzdCBpbnRlcmNlcHRvciB0aGF0IGFkZHMgYW4gSFRUUCBCYXNpYyBBdXRoZW50aWNhdGlvbiBoZWFkZXIuCisgICAgICAgIC8vLyAgICAgVGhlIGNyZWRlbnRpYWxzIGFyZSBwcmUtY29tcHV0ZWQgb25jZSBhbmQgc2V0IG9uIGV2ZXJ5IHJlcXVlc3QuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSB1c2VybmFtZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBhc3N3b3JkIj5UaGUgcGFzc3dvcmQuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPkEgcmVxdWVzdCBpbnRlcmNlcHRvciBkZWxlZ2F0ZS48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgRnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+IEJhc2ljQXV0aChzdHJpbmcgdXNlcm5hbWUsIHN0cmluZyBwYXNzd29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVuY29kZWQgPSBDb252ZXJ0LlRvQmFzZTY0U3RyaW5nKAorICAgICAgICAgICAgICAgIEVuY29kaW5nLlVURjguR2V0Qnl0ZXModXNlcm5hbWUgKyAiOiIgKyBwYXNzd29yZCkpOworICAgICAgICAgICAgdmFyIGhlYWRlclZhbHVlID0gIkJhc2ljICIgKyBlbmNvZGVkOworCisgICAgICAgICAgICByZXR1cm4gY29udGV4dCA9PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdID0gaGVhZGVyVmFsdWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgUmV0dXJucyBhIHJlcXVlc3QgaW50ZXJjZXB0b3IgdGhhdCBzaWducyByZXF1ZXN0cyB1c2luZyBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNC4KKyAgICAgICAgLy8vICAgICBJZiA8cGFyYW1yZWYgbmFtZT0iY3JlZGVudGlhbHMiLz4gaXMgbnVsbCwgdGhlIGRlZmF1bHQgQVdTIGNyZWRlbnRpYWwgY2hhaW4gaXMKKyAgICAgICAgLy8vICAgICB1c2VkIGFuZCB0aGUgcmVzb2x2ZWQgcHJvdmlkZXIgaXMgY2FjaGVkIG9uIGZpcnN0IHVzZSAodGhlIHByb3ZpZGVyIGl0c2VsZiBoYW5kbGVzCisgICAgICAgIC8vLyAgICAgY3JlZGVudGlhbCByZWZyZXNoIGZvciBleHBpcmluZyBjcmVkZW50aWFscyBsaWtlIFNUUykuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVnaW9uIj5UaGUgQVdTIHJlZ2lvbiAoZS5nLiAidXMtZWFzdC0xIikuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzZXJ2aWNlIj5UaGUgQVdTIHNlcnZpY2UgbmFtZSAoZS5nLiAibmVwdHVuZS1kYiIpLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY3JlZGVudGlhbHMiPgorICAgICAgICAvLy8gICAgIE9wdGlvbmFsIEFXUyBjcmVkZW50aWFscy4gV2hlbiBudWxsLCB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIGNoYWluIGlzIHVzZWQuCisgICAgICAgIC8vLyA8L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSByZXF1ZXN0IGludGVyY2VwdG9yIGRlbGVnYXRlLjwvcmV0dXJucz4KKyAgICAgICAgcHVibGljIHN0YXRpYyBGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4gU2lnVjRBdXRoKAorICAgICAgICAgICAgc3RyaW5nIHJlZ2lvbiwgc3RyaW5nIHNlcnZpY2UsIEFXU0NyZWRlbnRpYWxzPyBjcmVkZW50aWFscyA9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENhY2hlIHRoZSBjcmVkZW50aWFsIHByb3ZpZGVyIG9uY2Ugd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBjaGFpbi4KKyAgICAgICAgICAgIEFXU0NyZWRlbnRpYWxzPyBjYWNoZWRQcm92aWRlciA9IGNyZWRlbnRpYWxzOworICAgICAgICAgICAgdmFyIGNhY2hlTG9jayA9IG5ldyBvYmplY3QoKTsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIHNpZ25lciBhbmQgY29uZmlnIG9uY2Ug4oCUIGJvdGggYXJlIHN0YXRlbGVzcyBhbmQgdGhyZWFkLXNhZmUKKyAgICAgICAgICAgIHZhciBzaWduZXIgPSBuZXcgQVdTNFNpZ25lcigpOworICAgICAgICAgICAgdmFyIGNsaWVudENvbmZpZyA9IG5ldyBTaWduaW5nQ2xpZW50Q29uZmlnCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25SZWdpb24gPSByZWdpb24sCisgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25TZXJ2aWNlTmFtZSA9IHNlcnZpY2UsCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICByZXR1cm4gYXN5bmMgY29udGV4dCA9PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjYWNoZWRQcm92aWRlciA9PSBudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jayAoY2FjaGVMb2NrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWxsYmFja0NyZWRlbnRpYWxzRmFjdG9yeSBvbmx5IGhhcyBhIHN5bmMgQVBJLCBidXQgdGhpcyBydW5zIG9uY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRQcm92aWRlciA/Pz0gRmFsbGJhY2tDcmVkZW50aWFsc0ZhY3RvcnkuR2V0Q3JlZGVudGlhbHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgYXN5bmMgcGF0aCDigJQgaW1wb3J0YW50IGZvciBjcmVkZW50aWFsIHByb3ZpZGVycyB0aGF0IHBlcmZvcm0KKyAgICAgICAgICAgICAgICAvLyBuZXR3b3JrIEkvTyAoZS5nLiBJTURTIG9uIEVDMiwgRUNTIHRhc2sgcm9sZSBlbmRwb2ludCkuCisgICAgICAgICAgICAgICAgdmFyIGltbXV0YWJsZUNyZWRzID0gYXdhaXQgY2FjaGVkUHJvdmlkZXIuR2V0Q3JlZGVudGlhbHNBc3luYygpCisgICAgICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgU2lnblJlcXVlc3QoY29udGV4dCwgaW1tdXRhYmxlQ3JlZHMsIHNpZ25lciwgY2xpZW50Q29uZmlnKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIFNpZ25SZXF1ZXN0KEh0dHBSZXF1ZXN0Q29udGV4dCBjb250ZXh0LAorICAgICAgICAgICAgSW1tdXRhYmxlQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIEFXUzRTaWduZXIgc2lnbmVyLCBTaWduaW5nQ2xpZW50Q29uZmlnIGNsaWVudENvbmZpZykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQnVpbGQgYSBEZWZhdWx0UmVxdWVzdCBmcm9tIHRoZSBIdHRwUmVxdWVzdENvbnRleHQgZm9yIHRoZSBBV1MgU0RLIHNpZ25lci4KKyAgICAgICAgICAgIHZhciBlbmRwb2ludFVyaSA9IG5ldyBVcmkoY29udGV4dC5VcmkuR2V0TGVmdFBhcnQoVXJpUGFydGlhbC5BdXRob3JpdHkpKTsKKyAgICAgICAgICAgIHZhciBhd3NSZXF1ZXN0ID0gbmV3IERlZmF1bHRSZXF1ZXN0KG5ldyBOdWxsUmVxdWVzdCgpLCBjbGllbnRDb25maWcuQXV0aGVudGljYXRpb25TZXJ2aWNlTmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIdHRwTWV0aG9kID0gY29udGV4dC5NZXRob2QsCisgICAgICAgICAgICAgICAgRW5kcG9pbnQgPSBlbmRwb2ludFVyaSwKKyAgICAgICAgICAgICAgICBSZXNvdXJjZVBhdGggPSBjb250ZXh0LlVyaS5BYnNvbHV0ZVBhdGgsCisgICAgICAgICAgICAgICAgQ29udGVudCA9IGNvbnRleHQuQm9keSBpcyBieXRlW10gYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgPyBieXRlcworICAgICAgICAgICAgICAgICAgICA6IHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIlNpZ1Y0IHNpZ25pbmcgcmVxdWlyZXMgQm9keSB0byBiZSBieXRlW10uICIgKworICAgICAgICAgICAgICAgICAgICAgICAgIkVuc3VyZSBzZXJpYWxpemF0aW9uIG9jY3VycyBiZWZvcmUgdGhlIFNpZ1Y0IGludGVyY2VwdG9yLiIpLAorICAgICAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uUmVnaW9uID0gY2xpZW50Q29uZmlnLkF1dGhlbnRpY2F0aW9uUmVnaW9uLAorICAgICAgICAgICAgICAgIE92ZXJyaWRlU2lnbmluZ1NlcnZpY2VOYW1lID0gY2xpZW50Q29uZmlnLkF1dGhlbnRpY2F0aW9uU2VydmljZU5hbWUsCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICAvLyBDb3B5IGhlYWRlcnMgKHNraXAgSG9zdCDigJQgc2lnbmVyIGFkZHMgaXQpCisgICAgICAgICAgICBmb3JlYWNoICh2YXIgaGVhZGVyIGluIGNvbnRleHQuSGVhZGVycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5FcXVhbHMoaGVhZGVyLktleSwgIkhvc3QiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF3c1JlcXVlc3QuSGVhZGVyc1toZWFkZXIuS2V5XSA9IGhlYWRlci5WYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvcHkgcXVlcnkgcGFyYW1ldGVycworICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gY29udGV4dC5VcmkuUXVlcnk7CisgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KHF1ZXJ5KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyAnPycKKyAgICAgICAgICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBxdWVyeS5TdGFydHNXaXRoKCI/IikgPyBxdWVyeS5TdWJzdHJpbmcoMSkgOiBxdWVyeTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgcGFyYW0gaW4gcXVlcnlTdHJpbmcuU3BsaXQoJyYnKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShwYXJhbSkpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB2YXIgcGFydHMgPSBwYXJhbS5TcGxpdChuZXdbXSB7ICc9JyB9LCAyKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IFVyaS5VbmVzY2FwZURhdGFTdHJpbmcocGFydHNbMF0pOworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5MZW5ndGggPiAxID8gVXJpLlVuZXNjYXBlRGF0YVN0cmluZyhwYXJ0c1sxXSkgOiAiIjsKKyAgICAgICAgICAgICAgICAgICAgYXdzUmVxdWVzdC5QYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNldCBjb250ZW50IGhhc2ggaGVhZGVyIGJlZm9yZSBzaWduaW5nCisgICAgICAgICAgICB2YXIgcGF5bG9hZEhhc2ggPSBjb250ZXh0LkdldFBheWxvYWRIYXNoKCk7CisgICAgICAgICAgICBhd3NSZXF1ZXN0LkhlYWRlcnNbIngtYW16LWNvbnRlbnQtc2hhMjU2Il0gPSBwYXlsb2FkSGFzaDsKKworICAgICAgICAgICAgLy8gU2lnbiB0aGUgcmVxdWVzdAorICAgICAgICAgICAgc2lnbmVyLlNpZ24oYXdzUmVxdWVzdCwgY2xpZW50Q29uZmlnLCBuZXcgUmVxdWVzdE1ldHJpY3MoKSwgY3JlZGVudGlhbHMpOworCisgICAgICAgICAgICAvLyBDb3B5IHNpZ25lZCBoZWFkZXJzIGJhY2sgdG8gY29udGV4dC4gQ2hlcnJ5LXBpY2sgdGhlIGtub3duIFNpZ1Y0IGhlYWRlcnMKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIC5ORVQgRGljdGlvbmFyeSBpcyBjYXNlLXNlbnNpdGl2ZSBhbmQgdGhlIEFXUyBTREsgbWF5IHVzZQorICAgICAgICAgICAgLy8gZGlmZmVyZW50IGNhc2luZyB0aGFuIHdoYXQgaW50ZXJjZXB0b3JzIGV4cGVjdC4KKyAgICAgICAgICAgIGNvbnRleHQuSGVhZGVyc1siSG9zdCJdID0gZW5kcG9pbnRVcmkuSG9zdDsKKyAgICAgICAgICAgIGlmIChhd3NSZXF1ZXN0LkhlYWRlcnMuQ29udGFpbnNLZXkoIkF1dGhvcml6YXRpb24iKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LkhlYWRlcnNbIkF1dGhvcml6YXRpb24iXSA9IGF3c1JlcXVlc3QuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF3c1JlcXVlc3QuSGVhZGVycy5Db250YWluc0tleSgiWC1BbXotRGF0ZSIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQuSGVhZGVyc1siWC1BbXotRGF0ZSJdID0gYXdzUmVxdWVzdC5IZWFkZXJzWyJYLUFtei1EYXRlIl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250ZXh0LkhlYWRlcnNbIngtYW16LWNvbnRlbnQtc2hhMjU2Il0gPSBwYXlsb2FkSGFzaDsKKworICAgICAgICAgICAgLy8gQWRkIHNlc3Npb24gdG9rZW4gaWYgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzCisgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGNyZWRlbnRpYWxzLlRva2VuKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LkhlYWRlcnNbIlgtQW16LVNlY3VyaXR5LVRva2VuIl0gPSBjcmVkZW50aWFscy5Ub2tlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBBIG1pbmltYWwgQW1hem9uV2ViU2VydmljZVJlcXVlc3QgaW1wbGVtZW50YXRpb24gcmVxdWlyZWQgYnkgRGVmYXVsdFJlcXVlc3QuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByaXZhdGUgY2xhc3MgTnVsbFJlcXVlc3QgOiBBbWF6b25XZWJTZXJ2aWNlUmVxdWVzdAorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQSBtaW5pbWFsIENsaWVudENvbmZpZyBpbXBsZW1lbnRhdGlvbiBmb3IgU2lnVjQgc2lnbmluZy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBTaWduaW5nQ2xpZW50Q29uZmlnIDogQ2xpZW50Q29uZmlnCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgUmVnaW9uRW5kcG9pbnRTZXJ2aWNlTmFtZSA9PiAiZXhlY3V0ZS1hcGkiOworICAgICAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBTZXJ2aWNlVmVyc2lvbiA9PiAiMjAyNC0wMS0wMSI7CisgICAgICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFVzZXJBZ2VudCA9PiAiZ3JlbWxpbi1kb3RuZXQiOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Db25uZWN0aW9uLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Db25uZWN0aW9uLmNzCmluZGV4IDA1ZjkyZTMuLjQxNTUxMzkgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvbi5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0Nvbm5lY3Rpb24uY3MKQEAgLTIyLDMwNiArMjIsMjUxIEBACiAjZW5kcmVnaW9uCiAKIHVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5Db25jdXJyZW50OwogdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uVGV4dDsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5JTy5Db21wcmVzc2lvbjsKK3VzaW5nIFN5c3RlbS5MaW5xOwordXNpbmcgU3lzdGVtLk5ldC5IdHRwOwordXNpbmcgU3lzdGVtLk5ldC5IdHRwLkhlYWRlcnM7CiB1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwogdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKIHVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3M7Cit1c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTzsKIAogbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgogewotICAgIGludGVybmFsIGludGVyZmFjZSBJUmVzcG9uc2VIYW5kbGVyRm9yU2luZ2xlUmVxdWVzdE1lc3NhZ2UKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vICAgICBIVFRQLWJhc2VkIGNvbm5lY3Rpb24gdGhhdCBzZW5kcyByZXF1ZXN0cyB2aWEgSFRUUCBQT1NUIHRvIEdyZW1saW4gU2VydmVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgaW50ZXJuYWwgY2xhc3MgQ29ubmVjdGlvbiA6IElEaXNwb3NhYmxlCiAgICAgewotICAgICAgICB2b2lkIEhhbmRsZVJlY2VpdmVkKFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+IHJlY2VpdmVkKTsKLSAgICAgICAgdm9pZCBGaW5hbGl6ZShEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBzdGF0dXNBdHRyaWJ1dGVzKTsKLSAgICAgICAgdm9pZCBIYW5kbGVGYWlsdXJlKEV4Y2VwdGlvbiBvYmpFeGNlcHRpb24pOwotICAgICAgICB2b2lkIENhbmNlbCgpOwotICAgIH0KLQotICAgIGludGVybmFsIGNsYXNzIENvbm5lY3Rpb24gOiBJQ29ubmVjdGlvbgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBJTWVzc2FnZVNlcmlhbGl6ZXIgX21lc3NhZ2VTZXJpYWxpemVyOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEh0dHBDbGllbnQgX2h0dHBDbGllbnQ7CiAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgVXJpIF91cmk7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgSVdlYlNvY2tldENvbm5lY3Rpb24gX3dlYlNvY2tldENvbm5lY3Rpb247Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nPyBfdXNlcm5hbWU7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nPyBfcGFzc3dvcmQ7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nPyBfc2Vzc2lvbklkOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJvb2wgX3Nlc3Npb25FbmFibGVkOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElNZXNzYWdlU2VyaWFsaXplcj8gX3JlcXVlc3RTZXJpYWxpemVyOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElNZXNzYWdlU2VyaWFsaXplciBfcmVzcG9uc2VTZXJpYWxpemVyOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IENvbm5lY3Rpb25TZXR0aW5ncyBfc2V0dGluZ3M7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgSVJlYWRPbmx5TGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+IF9pbnRlcmNlcHRvcnM7CiAKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBDb25jdXJyZW50UXVldWU8KFJlcXVlc3RNZXNzYWdlIG1zZywgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pPiBfd3JpdGVRdWV1ZSA9IG5ldygpOwotCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgQ29uY3VycmVudERpY3Rpb25hcnk8R3VpZCwgSVJlc3BvbnNlSGFuZGxlckZvclNpbmdsZVJlcXVlc3RNZXNzYWdlPiBfY2FsbGJhY2tCeVJlcXVlc3RJZCA9Ci0gICAgICAgICAgICBuZXcoKTsKLQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IENvbmN1cnJlbnREaWN0aW9uYXJ5PEd1aWQsIENhbmNlbGxhdGlvblRva2VuUmVnaXN0cmF0aW9uPiBfY2FuY2VsbGF0aW9uQnlSZXF1ZXN0SWQgPSBuZXcoKTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgX2Nvbm5lY3Rpb25TdGF0ZSA9IDA7Ci0gICAgICAgIHByaXZhdGUgaW50IF93cml0ZUluUHJvZ3Jlc3MgPSAwOwotICAgICAgICBwcml2YXRlIGNvbnN0IGludCBDbG9zZWQgPSAxOwotCi0gICAgICAgIHB1YmxpYyBDb25uZWN0aW9uKElXZWJTb2NrZXRDb25uZWN0aW9uIHdlYlNvY2tldENvbm5lY3Rpb24sIFVyaSB1cmksIHN0cmluZz8gdXNlcm5hbWUsIHN0cmluZz8gcGFzc3dvcmQsCi0gICAgICAgICAgICBJTWVzc2FnZVNlcmlhbGl6ZXIgbWVzc2FnZVNlcmlhbGl6ZXIsIHN0cmluZz8gc2Vzc2lvbklkKQorICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG5ldyBIVFRQIGNvbm5lY3Rpb24uIFRoZSA8c2VlIGNyZWY9Ikh0dHBDbGllbnQiLz4gaXMgYmFja2VkIGJ5CisgICAgICAgIC8vLyAgICAgU29ja2V0c0h0dHBIYW5kbGVyIHdoaWNoIG1hbmFnZXMgaXRzIG93biBUQ1AgY29ubmVjdGlvbiBwb29sIGludGVybmFsbHksCisgICAgICAgIC8vLyAgICAgc28gYSBzaW5nbGUgPHNlZSBjcmVmPSJDb25uZWN0aW9uIi8+IGluc3RhbmNlIGhhbmRsZXMgY29uY3VycmVudCByZXF1ZXN0cyBlZmZpY2llbnRseS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1cmkiPlRoZSBHcmVtbGluIFNlcnZlciBVUkkuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZXF1ZXN0U2VyaWFsaXplciI+CisgICAgICAgIC8vLyAgICAgVGhlIHNlcmlhbGl6ZXIgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiBXaGVuIG5vbi1udWxsLCB0aGUgcmVxdWVzdCBib2R5IGlzIHNlcmlhbGl6ZWQKKyAgICAgICAgLy8vICAgICB0byA8Yz5ieXRlW108L2M+IGJlZm9yZSBpbnRlcmNlcHRvcnMgcnVuIGFuZCB0aGUgPGM+Q29udGVudC1UeXBlPC9jPiBoZWFkZXIgaXMgc2V0CisgICAgICAgIC8vLyAgICAgYXV0b21hdGljYWxseS4gV2hlbiA8Yz5udWxsPC9jPiwgdGhlIGJvZHkgaXMgcGFzc2VkIGFzIGEgPHNlZSBjcmVmPSJSZXF1ZXN0TWVzc2FnZSIvPgorICAgICAgICAvLy8gICAgIGFuZCBhbiBpbnRlcmNlcHRvciBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgaXQgdG8gPGM+Ynl0ZVtdPC9jPiBhbmQgc2V0dGluZworICAgICAgICAvLy8gICAgIDxjPkNvbnRlbnQtVHlwZTwvYz4uIFRoaXMgZm9sbG93cyB0aGUgUHl0aG9uIGRyaXZlcidzIDxjPnJlcXVlc3Rfc2VyaWFsaXplcj1Ob25lPC9jPgorICAgICAgICAvLy8gICAgIHBhdHRlcm4uCisgICAgICAgIC8vLyA8L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlc3BvbnNlU2VyaWFsaXplciI+VGhlIHNlcmlhbGl6ZXIgZm9yIGluY29taW5nIHJlc3BvbnNlcyAoYWx3YXlzIHJlcXVpcmVkKS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNldHRpbmdzIj5Db25uZWN0aW9uIHNldHRpbmdzLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaW50ZXJjZXB0b3JzIj5PcHRpb25hbCByZXF1ZXN0IGludGVyY2VwdG9ycy48L3BhcmFtPgorICAgICAgICBwdWJsaWMgQ29ubmVjdGlvbihVcmkgdXJpLCBJTWVzc2FnZVNlcmlhbGl6ZXI/IHJlcXVlc3RTZXJpYWxpemVyLAorICAgICAgICAgICAgSU1lc3NhZ2VTZXJpYWxpemVyIHJlc3BvbnNlU2VyaWFsaXplciwKKyAgICAgICAgICAgIENvbm5lY3Rpb25TZXR0aW5ncyBzZXR0aW5ncywKKyAgICAgICAgICAgIElSZWFkT25seUxpc3Q8RnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+Pj8gaW50ZXJjZXB0b3JzID0gbnVsbCkKICAgICAgICAgewogICAgICAgICAgICAgX3VyaSA9IHVyaTsKLSAgICAgICAgICAgIF91c2VybmFtZSA9IHVzZXJuYW1lOwotICAgICAgICAgICAgX3Bhc3N3b3JkID0gcGFzc3dvcmQ7Ci0gICAgICAgICAgICBfc2Vzc2lvbklkID0gc2Vzc2lvbklkOwotICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShzZXNzaW9uSWQpKQorICAgICAgICAgICAgX3JlcXVlc3RTZXJpYWxpemVyID0gcmVxdWVzdFNlcmlhbGl6ZXI7CisgICAgICAgICAgICBfcmVzcG9uc2VTZXJpYWxpemVyID0gcmVzcG9uc2VTZXJpYWxpemVyOworICAgICAgICAgICAgX3NldHRpbmdzID0gc2V0dGluZ3M7CisgICAgICAgICAgICBfaW50ZXJjZXB0b3JzID0gaW50ZXJjZXB0b3JzID8/IEFycmF5LkVtcHR5PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4oKTsKKworI2lmIE5FVDZfMF9PUl9HUkVBVEVSCisgICAgICAgICAgICB2YXIgaGFuZGxlciA9IG5ldyBTb2NrZXRzSHR0cEhhbmRsZXIKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfc2Vzc2lvbkVuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIFBvb2xlZENvbm5lY3Rpb25JZGxlVGltZW91dCA9IHNldHRpbmdzLklkbGVDb25uZWN0aW9uVGltZW91dCwKKyAgICAgICAgICAgICAgICBNYXhDb25uZWN0aW9uc1BlclNlcnZlciA9IHNldHRpbmdzLk1heENvbm5lY3Rpb25zUGVyU2VydmVyLAorICAgICAgICAgICAgICAgIENvbm5lY3RUaW1lb3V0ID0gc2V0dGluZ3MuQ29ubmVjdGlvblRpbWVvdXQsCisgICAgICAgICAgICAgICAgS2VlcEFsaXZlUGluZ1RpbWVvdXQgPSBzZXR0aW5ncy5LZWVwQWxpdmVJbnRlcnZhbCwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoc2V0dGluZ3MuU2tpcENlcnRpZmljYXRlVmFsaWRhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoYW5kbGVyLlNzbE9wdGlvbnMgPSBuZXcgU3lzdGVtLk5ldC5TZWN1cml0eS5Tc2xDbGllbnRBdXRoZW50aWNhdGlvbk9wdGlvbnMKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFJlbW90ZUNlcnRpZmljYXRlVmFsaWRhdGlvbkNhbGxiYWNrID0gKF8sIF8sIF8sIF8pID0+IHRydWUsCisgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9tZXNzYWdlU2VyaWFsaXplciA9IG1lc3NhZ2VTZXJpYWxpemVyOwotICAgICAgICAgICAgX3dlYlNvY2tldENvbm5lY3Rpb24gPSB3ZWJTb2NrZXRDb25uZWN0aW9uOworICAgICAgICAgICAgX2h0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChoYW5kbGVyKTsKKyNlbHNlCisgICAgICAgICAgICBfaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICBfaHR0cENsaWVudC5UaW1lb3V0ID0gc2V0dGluZ3MuQ29ubmVjdGlvblRpbWVvdXQ7CisjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIENvbm5lY3RBc3luYyhDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbikKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIENvbnN0cnVjdG9yIHRoYXQgYWNjZXB0cyBhIHByZS1jb25maWd1cmVkIEh0dHBDbGllbnQgKGZvciB0ZXN0aW5nKS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgaW50ZXJuYWwgQ29ubmVjdGlvbihVcmkgdXJpLCBJTWVzc2FnZVNlcmlhbGl6ZXI/IHJlcXVlc3RTZXJpYWxpemVyLAorICAgICAgICAgICAgSU1lc3NhZ2VTZXJpYWxpemVyIHJlc3BvbnNlU2VyaWFsaXplciwKKyAgICAgICAgICAgIENvbm5lY3Rpb25TZXR0aW5ncyBzZXR0aW5ncywgSHR0cENsaWVudCBodHRwQ2xpZW50LAorICAgICAgICAgICAgSVJlYWRPbmx5TGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+PyBpbnRlcmNlcHRvcnMgPSBudWxsKQogICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCBfd2ViU29ja2V0Q29ubmVjdGlvbi5Db25uZWN0QXN5bmMoX3VyaSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIEJlZ2luUmVjZWl2aW5nKCk7CisgICAgICAgICAgICBfdXJpID0gdXJpOworICAgICAgICAgICAgX3JlcXVlc3RTZXJpYWxpemVyID0gcmVxdWVzdFNlcmlhbGl6ZXI7CisgICAgICAgICAgICBfcmVzcG9uc2VTZXJpYWxpemVyID0gcmVzcG9uc2VTZXJpYWxpemVyOworICAgICAgICAgICAgX3NldHRpbmdzID0gc2V0dGluZ3M7CisgICAgICAgICAgICBfaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7CisgICAgICAgICAgICBfaW50ZXJjZXB0b3JzID0gaW50ZXJjZXB0b3JzID8/IEFycmF5LkVtcHR5PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4oKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBpbnQgTnJSZXF1ZXN0c0luRmxpZ2h0ID0+IF9jYWxsYmFja0J5UmVxdWVzdElkLkNvdW50OwotCi0gICAgICAgIHB1YmxpYyBib29sIElzT3BlbiA9PiBfd2ViU29ja2V0Q29ubmVjdGlvbi5Jc09wZW4gJiYgVm9sYXRpbGUuUmVhZChyZWYgX2Nvbm5lY3Rpb25TdGF0ZSkgIT0gQ2xvc2VkOwotCi0gICAgICAgIHB1YmxpYyBUYXNrPFJlc3VsdFNldDxUPj4gU3VibWl0QXN5bmM8VD4oUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXN1bHRTZXQ8VD4+IFN1Ym1pdEFzeW5jPFQ+KFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVjZWl2ZXIgPSBuZXcgUmVzcG9uc2VIYW5kbGVyRm9yU2luZ2xlUmVxdWVzdE1lc3NhZ2U8VD4oKTsKLSAgICAgICAgICAgIF9jYWxsYmFja0J5UmVxdWVzdElkLkdldE9yQWRkKHJlcXVlc3RNZXNzYWdlLlJlcXVlc3RJZCwgcmVjZWl2ZXIpOworICAgICAgICAgICAgLy8gQnVpbGQgSHR0cFJlcXVlc3RDb250ZXh0IHdpdGggZGVmYXVsdCBoZWFkZXJzCisgICAgICAgICAgICB2YXIgaGVhZGVycyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPigpOworICAgICAgICAgICAgaGVhZGVyc1siQWNjZXB0Il0gPSBfcmVzcG9uc2VTZXJpYWxpemVyLk1pbWVUeXBlOwogCi0gICAgICAgICAgICBfY2FuY2VsbGF0aW9uQnlSZXF1ZXN0SWQuR2V0T3JBZGQocmVxdWVzdE1lc3NhZ2UuUmVxdWVzdElkLCBjYW5jZWxsYXRpb25Ub2tlbi5SZWdpc3RlcigoKSA9PgorICAgICAgICAgICAgaWYgKF9zZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX2NhbGxiYWNrQnlSZXF1ZXN0SWQuVHJ5UmVtb3ZlKHJlcXVlc3RNZXNzYWdlLlJlcXVlc3RJZCwgb3V0IHZhciByZXNwb25zZUhhbmRsZXIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIYW5kbGVyLkNhbmNlbCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgIF93cml0ZVF1ZXVlLkVucXVldWUoKHJlcXVlc3RNZXNzYWdlLCBjYW5jZWxsYXRpb25Ub2tlbikpOwotICAgICAgICAgICAgQmVnaW5TZW5kaW5nTWVzc2FnZXMoKTsKLSAgICAgICAgICAgIHJldHVybiByZWNlaXZlci5SZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgQmVnaW5SZWNlaXZpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc3RhdGUgPSBWb2xhdGlsZS5SZWFkKHJlZiBfY29ubmVjdGlvblN0YXRlKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBDbG9zZWQpIHJldHVybjsKLSAgICAgICAgICAgIFJlY2VpdmVNZXNzYWdlc0FzeW5jKCkuRm9yZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGFzeW5jIFRhc2sgUmVjZWl2ZU1lc3NhZ2VzQXN5bmMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZWNlaXZlZCA9IGF3YWl0IF93ZWJTb2NrZXRDb25uZWN0aW9uLlJlY2VpdmVNZXNzYWdlQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGF3YWl0IEhhbmRsZVJlY2VpdmVkQXN5bmMocmVjZWl2ZWQpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXdhaXQgQ2xvc2VDb25uZWN0aW9uQmVjYXVzZU9mRmFpbHVyZUFzeW5jKGUpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhlYWRlcnNbIkFjY2VwdC1FbmNvZGluZyJdID0gImRlZmxhdGUiOwogICAgICAgICAgICAgfQotICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrIEhhbmRsZVJlY2VpdmVkQXN5bmMoYnl0ZVtdIHJlY2VpdmVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVjZWl2ZWRNc2cgPSBhd2FpdCBfbWVzc2FnZVNlcmlhbGl6ZXIuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMocmVjZWl2ZWQpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChyZWNlaXZlZE1zZyA9PSBudWxsKQorICAgICAgICAgICAgaWYgKF9zZXR0aW5ncy5FbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGVhZGVyc1siVXNlci1BZ2VudCJdID0gVXRpbHMuVXNlckFnZW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX3NldHRpbmdzLkJ1bGtSZXN1bHRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhlYWRlcnNbImJ1bGtSZXN1bHRzIl0gPSAidHJ1ZSI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9iamVjdCBib2R5OworICAgICAgICAgICAgaWYgKF9yZXF1ZXN0U2VyaWFsaXplciAhPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgcGF0aDogc2VyaWFsaXplIGJlZm9yZSBpbnRlcmNlcHRvcnMKKyAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdEJ5dGVzID0gYXdhaXQgX3JlcXVlc3RTZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhyZXF1ZXN0TWVzc2FnZSwgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgYm9keSA9IHJlcXVlc3RCeXRlczsKKyAgICAgICAgICAgICAgICBoZWFkZXJzWyJDb250ZW50LVR5cGUiXSA9IF9yZXF1ZXN0U2VyaWFsaXplci5NaW1lVHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJbnRlcmNlcHRvci1tYW5hZ2VkIHBhdGg6IGJvZHkgaXMgUmVxdWVzdE1lc3NhZ2UsIGludGVyY2VwdG9yIG11c3Qgc2VyaWFsaXplCisgICAgICAgICAgICAgICAgYm9keSA9IHJlcXVlc3RNZXNzYWdlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBIdHRwUmVxdWVzdENvbnRleHQoIlBPU1QiLCBfdXJpLCBoZWFkZXJzLCBib2R5KTsKKworICAgICAgICAgICAgLy8gQXBwbHkgaW50ZXJjZXB0b3JzIGluIG9yZGVyCisgICAgICAgICAgICBmb3JlYWNoICh2YXIgaW50ZXJjZXB0b3IgaW4gX2ludGVyY2VwdG9ycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhd2FpdCBpbnRlcmNlcHRvcihjb250ZXh0KS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENvbnZlcnQgSHR0cFJlcXVlc3RDb250ZXh0IHRvIEh0dHBSZXF1ZXN0TWVzc2FnZQorICAgICAgICAgICAgdXNpbmcgdmFyIGh0dHBSZXF1ZXN0ID0gbmV3IEh0dHBSZXF1ZXN0TWVzc2FnZShuZXcgSHR0cE1ldGhvZChjb250ZXh0Lk1ldGhvZCksIGNvbnRleHQuVXJpKTsKKworICAgICAgICAgICAgaWYgKGNvbnRleHQuQm9keSBpcyBieXRlW10gYm9keUJ5dGVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0LkNvbnRlbnQgPSBuZXcgQnl0ZUFycmF5Q29udGVudChib2R5Qnl0ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY29udGV4dC5Cb2R5IGlzIEh0dHBDb250ZW50IGh0dHBDb250ZW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0LkNvbnRlbnQgPSBodHRwQ29udGVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkIGRhdGEgZGVzZXJpYWxpemVkIGludG8gbnVsbCBvYmplY3QgbWVzc2FnZS4gQ2Fubm90IG9wZXJhdGUgb24gaXQuIik7CisgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0IGJvZHkgbXVzdCBiZSBieXRlW10gb3IgSHR0cENvbnRlbnQgYWZ0ZXIgYWxsIGludGVyY2VwdG9ycyBjb21wbGV0ZSwgIiArCisgICAgICAgICAgICAgICAgICAgICJidXQgZm91bmQgIiArIChjb250ZXh0LkJvZHk/LkdldFR5cGUoKS5OYW1lID8/ICJudWxsIikgKworICAgICAgICAgICAgICAgICAgICAiLiBFaXRoZXIgcHJvdmlkZSBhIHJlcXVlc3RTZXJpYWxpemVyIG9yIGFkZCBhbiBpbnRlcmNlcHRvciAiICsKKyAgICAgICAgICAgICAgICAgICAgInRoYXQgc2VyaWFsaXplcyB0aGUgUmVxdWVzdE1lc3NhZ2UuIik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGZvcmVhY2ggKHZhciBoZWFkZXIgaW4gY29udGV4dC5IZWFkZXJzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIENvbnRlbnQtVHlwZSBtdXN0IGJlIHNldCBvbiB0aGUgY29udGVudCBoZWFkZXJzLCBub3QgdGhlIHJlcXVlc3QgaGVhZGVycworICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuRXF1YWxzKGhlYWRlci5LZXksICJDb250ZW50LVR5cGUiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0LkNvbnRlbnQuSGVhZGVycy5Db250ZW50VHlwZSA9IG5ldyBNZWRpYVR5cGVIZWFkZXJWYWx1ZShoZWFkZXIuVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBodHRwUmVxdWVzdC5IZWFkZXJzLlRyeUFkZFdpdGhvdXRWYWxpZGF0aW9uKGhlYWRlci5LZXksIGhlYWRlci5WYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1c2luZyB2YXIgcmVzcG9uc2UgPSBhd2FpdCBfaHR0cENsaWVudC5TZW5kQXN5bmMoaHR0cFJlcXVlc3QsIGNhbmNlbGxhdGlvblRva2VuKQorICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBIVFRQIHN0YXR1cyBpbmRpY2F0ZXMgYW4gZXJyb3IgYW5kIHRoZSByZXNwb25zZSBpcyBub3QgR3JhcGhCaW5hcnksCisgICAgICAgICAgICAvLyBhdHRlbXB0IHRvIHJlYWQgdGhlIGJvZHkgYXMgYSB0ZXh0IGVycm9yIG1lc3NhZ2UuIFRoZSBzZXJ2ZXIgbWF5IHJlc3BvbmQgd2l0aAorICAgICAgICAgICAgLy8gYSBKU09OIGJvZHkgY29udGFpbmluZyBhbiBlcnJvciBmaWVsZCwgb3IgcGxhaW4gdGV4dC4gT25seSB3aGVuIHRoZSBDb250ZW50LVR5cGUKKyAgICAgICAgICAgIC8vIGlzIEdyYXBoQmluYXJ5IGRvIHdlIGZhbGwgdGhyb3VnaCB0byBub3JtYWwgZGVzZXJpYWxpemF0aW9uIHNvIHRoZSBzdGF0dXMgZm9vdGVyCisgICAgICAgICAgICAvLyBpbiB0aGUgR0I0IHJlc3BvbnNlIGNhbiBzdXJmYWNlIHRoZSBhcHBsaWNhdGlvbi1sZXZlbCBlcnJvci4KKyAgICAgICAgICAgIGlmICghcmVzcG9uc2UuSXNTdWNjZXNzU3RhdHVzQ29kZSAmJgorICAgICAgICAgICAgICAgIHJlc3BvbnNlLkNvbnRlbnQuSGVhZGVycy5Db250ZW50VHlwZT8uTWVkaWFUeXBlICE9IF9yZXNwb25zZVNlcmlhbGl6ZXIuTWltZVR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGVycm9yQm9keSA9IGF3YWl0IHJlc3BvbnNlLkNvbnRlbnQuUmVhZEFzU3RyaW5nQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZXh0cmFjdCB0aGUgIm1lc3NhZ2UiIGZpZWxkIGZyb20gYSBKU09OIGVycm9yIHJlc3BvbnNlCisgICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IFRyeUV4dHJhY3RKc29uRXJyb3IoZXJyb3JCb2R5KQorICAgICAgICAgICAgICAgICAgICA/PyAkIkdyZW1saW4gU2VydmVyIHJldHVybmVkIEhUVFAgeyhpbnQpcmVzcG9uc2UuU3RhdHVzQ29kZX06IHtlcnJvckJvZHl9IjsKKworICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwUmVxdWVzdEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmVzcG9uc2VCeXRlcyA9IGF3YWl0IFJlYWRSZXNwb25zZUJ5dGVzQXN5bmMocmVzcG9uc2UpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgdmFyIHJlc3BvbnNlTWVzc2FnZSA9IGF3YWl0IF9yZXNwb25zZVNlcmlhbGl6ZXIuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMocmVzcG9uc2VCeXRlcywgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgcmV0dXJuIEJ1aWxkUmVzdWx0U2V0PFQ+KHJlc3BvbnNlTWVzc2FnZSk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBUYXNrPGJ5dGVbXT4gUmVhZFJlc3BvbnNlQnl0ZXNBc3luYyhIdHRwUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlKQorICAgICAgICB7CisgICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gYXdhaXQgcmVzcG9uc2UuQ29udGVudC5SZWFkQXNTdHJlYW1Bc3luYygpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS5Db250ZW50LkhlYWRlcnMuQ29udGVudEVuY29kaW5nLkNvbnRhaW5zKCJkZWZsYXRlIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNpbmcgdmFyIGRlZmxhdGVTdHJlYW0gPSBuZXcgRGVmbGF0ZVN0cmVhbShzdHJlYW0sIENvbXByZXNzaW9uTW9kZS5EZWNvbXByZXNzKTsKKyAgICAgICAgICAgICAgICB1c2luZyB2YXIgbXMgPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAgICAgYXdhaXQgZGVmbGF0ZVN0cmVhbS5Db3B5VG9Bc3luYyhtcykuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBtcy5Ub0FycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2luZyB2YXIgbWVtb3J5U3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLkNvcHlUb0FzeW5jKG1lbW9yeVN0cmVhbSkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIG1lbW9yeVN0cmVhbS5Ub0FycmF5KCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBSZXN1bHRTZXQ8VD4gQnVpbGRSZXN1bHRTZXQ8VD4oUmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4gcmVzcG9uc2VNZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0cyA9IHR5cGVvZihUKSA9PSB0eXBlb2YoVHJhdmVyc2VyKQorICAgICAgICAgICAgICAgID8gcmVzcG9uc2VNZXNzYWdlLlJlc3VsdAorICAgICAgICAgICAgICAgICAgICAuU2VsZWN0KGl0ZW0gPT4gaXRlbSBpcyBUcmF2ZXJzZXIgPyBpdGVtIDogKG9iamVjdCluZXcgVHJhdmVyc2VyKGl0ZW0pKQorICAgICAgICAgICAgICAgICAgICAuQ2FzdDxUPigpLlRvTGlzdCgpCisgICAgICAgICAgICAgICAgOiByZXNwb25zZU1lc3NhZ2UuUmVzdWx0LkNhc3Q8VD4oKS5Ub0xpc3QoKTsKKworICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRTZXQ8VD4ocmVzdWx0cywgbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEF0dGVtcHRzIHRvIGV4dHJhY3QgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIGEgSlNPTiByZXNwb25zZSBib2R5LgorICAgICAgICAvLy8gICAgIFRoZSBzZXJ2ZXIgc29tZXRpbWVzIHJlc3BvbmRzIHdpdGggYSBKU09OIG9iamVjdCBjb250YWluaW5nIGEgIm1lc3NhZ2UiIGZpZWxkCisgICAgICAgIC8vLyAgICAgZXZlbiB3aGVuIGl0IGNhbm5vdCBwcm9kdWNlIGEgR3JhcGhCaW5hcnkgcmVzcG9uc2UuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByaXZhdGUgc3RhdGljIHN0cmluZz8gVHJ5RXh0cmFjdEpzb25FcnJvcihzdHJpbmcgYm9keSkKKyAgICAgICAgewogICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSGFuZGxlUmVjZWl2ZWRNZXNzYWdlKHJlY2VpdmVkTXNnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVjZWl2ZWRNc2chLlJlcXVlc3RJZCAhPSBudWxsKQorICAgICAgICAgICAgICAgIHVzaW5nIHZhciBkb2MgPSBTeXN0ZW0uVGV4dC5Kc29uLkpzb25Eb2N1bWVudC5QYXJzZShib2R5KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9jLlJvb3RFbGVtZW50LlRyeUdldFByb3BlcnR5KCJtZXNzYWdlIiwgb3V0IHZhciBtZXNzYWdlUHJvcCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZihfY2FsbGJhY2tCeVJlcXVlc3RJZC5UcnlSZW1vdmUocmVjZWl2ZWRNc2cuUmVxdWVzdElkLlZhbHVlLCBvdXQgdmFyIHJlc3BvbnNlSGFuZGxlcikpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcj8uSGFuZGxlRmFpbHVyZShlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfY2FuY2VsbGF0aW9uQnlSZXF1ZXN0SWQuVHJ5UmVtb3ZlKHJlY2VpdmVkTXNnLlJlcXVlc3RJZC5WYWx1ZSwgb3V0IHZhciBjYW5jZWxsYXRpb24pKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb24uRGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlUHJvcC5HZXRTdHJpbmcoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgSGFuZGxlUmVjZWl2ZWRNZXNzYWdlKFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+IHJlY2VpdmVkTXNnKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc3RhdHVzID0gcmVjZWl2ZWRNc2cuU3RhdHVzOwotICAgICAgICAgICAgc3RhdHVzLlRocm93SWZTdGF0dXNJbmRpY2F0ZXNFcnJvcigpOwotCi0gICAgICAgICAgICBpZiAoc3RhdHVzLkNvZGUgPT0gUmVzcG9uc2VTdGF0dXNDb2RlLkF1dGhlbnRpY2F0ZSkKKyAgICAgICAgICAgIGNhdGNoCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXV0aGVudGljYXRlKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIC8vIE5vdCB2YWxpZCBKU09OIOKAlCBmYWxsIHRocm91Z2ggdG8gcmF3IGJvZHkKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlY2VpdmVkTXNnLlJlcXVlc3RJZCA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgICAgIF9jYWxsYmFja0J5UmVxdWVzdElkLlRyeUdldFZhbHVlKHJlY2VpdmVkTXNnLlJlcXVlc3RJZC5WYWx1ZSwgb3V0IHZhciByZXNwb25zZUhhbmRsZXIpOwotICAgICAgICAgICAgaWYgKHN0YXR1cy5Db2RlICE9IFJlc3BvbnNlU3RhdHVzQ29kZS5Ob0NvbnRlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2VIYW5kbGVyPy5IYW5kbGVSZWNlaXZlZChyZWNlaXZlZE1zZyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzdGF0dXMuQ29kZSA9PSBSZXNwb25zZVN0YXR1c0NvZGUuU3VjY2VzcyB8fCBzdGF0dXMuQ29kZSA9PSBSZXNwb25zZVN0YXR1c0NvZGUuTm9Db250ZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfY2FuY2VsbGF0aW9uQnlSZXF1ZXN0SWQuVHJ5UmVtb3ZlKHJlY2VpdmVkTXNnLlJlcXVlc3RJZC5WYWx1ZSwgb3V0IHZhciBjYW5jZWxsYXRpb24pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGF0aW9uLkRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2VIYW5kbGVyPy5GaW5hbGl6ZShzdGF0dXMuQXR0cmlidXRlcyk7Ci0gICAgICAgICAgICAgICAgX2NhbGxiYWNrQnlSZXF1ZXN0SWQuVHJ5UmVtb3ZlKHJlY2VpdmVkTXNnLlJlcXVlc3RJZC5WYWx1ZSwgb3V0IF8pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIEF1dGhlbnRpY2F0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShfdXNlcm5hbWUpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KF9wYXNzd29yZCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICQiVGhlIEdyZW1saW4gU2VydmVyIHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLCBidXQgbm8gY3JlZGVudGlhbHMgYXJlIHNwZWNpZmllZCAtIHVzZXJuYW1lOiB7X3VzZXJuYW1lfSwgcGFzc3dvcmQ6IHtfcGFzc3dvcmR9LiIpOwotCi0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKFRva2Vucy5PcHNBdXRoZW50aWNhdGlvbikuUHJvY2Vzc29yKFRva2Vucy5Qcm9jZXNzb3JUcmF2ZXJzYWwpCi0gICAgICAgICAgICAgICAgLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzU2FzbCwgU2FzbEFyZ3VtZW50KCkpLkNyZWF0ZSgpOwotCi0gICAgICAgICAgICBfd3JpdGVRdWV1ZS5FbnF1ZXVlKChtZXNzYWdlLCBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSk7Ci0gICAgICAgICAgICBCZWdpblNlbmRpbmdNZXNzYWdlcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgU2FzbEFyZ3VtZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGF1dGggPSAkIlwwe191c2VybmFtZX1cMHtfcGFzc3dvcmR9IjsKLSAgICAgICAgICAgIHZhciBhdXRoQnl0ZXMgPSBFbmNvZGluZy5VVEY4LkdldEJ5dGVzKGF1dGgpOwotICAgICAgICAgICAgcmV0dXJuIENvbnZlcnQuVG9CYXNlNjRTdHJpbmcoYXV0aEJ5dGVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBCZWdpblNlbmRpbmdNZXNzYWdlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJbnRlcmxvY2tlZC5Db21wYXJlRXhjaGFuZ2UocmVmIF93cml0ZUluUHJvZ3Jlc3MsIDEsIDApICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgU2VuZE1lc3NhZ2VzRnJvbVF1ZXVlQXN5bmMoKS5Gb3JnZXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYXN5bmMgVGFzayBTZW5kTWVzc2FnZXNGcm9tUXVldWVBc3luYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChfd3JpdGVRdWV1ZS5UcnlEZXF1ZXVlKG91dCB2YXIgbXNnKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGF3YWl0IFNlbmRNZXNzYWdlQXN5bmMobXNnLm1zZywgbXNnLmNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbiBlKSB3aGVuIChtc2cuY2FuY2VsbGF0aW9uVG9rZW4gPT0gZS5DYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlbmQgd2FzIGNhbmNlbGxlZCBmb3IgdGhpcyBtZXNzYWdlIC0+IHNpbGVudGx5IGNhdGNoIGFzIHdlIHdhbnQgdG8gY29udGludWUgc2VuZGluZyBmcm9tIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gIGNvbm5lY3Rpb24uIFRoZSB0YXNrIHJlc3BvbnNpYmxlIGZvciBzdWJtaXR0aW5nIHRoaXMgbWVzc2FnZSB3aWxsIGJlIGNhbmNlbGxlZCBieSB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gIGBSZXNwb25zZUhhbmRsZXJGb3JTaW5nbGVSZXF1ZXN0TWVzc2FnZWAuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGF3YWl0IENsb3NlQ29ubmVjdGlvbkJlY2F1c2VPZkZhaWx1cmVBc3luYyhlKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEludGVybG9ja2VkLkNvbXBhcmVFeGNoYW5nZShyZWYgX3dyaXRlSW5Qcm9ncmVzcywgMCwgMSk7Ci0KLSAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBsb29wIGVuZGVkIGFuZCB0aGUgd3JpdGUgaW4gcHJvZ3Jlc3Mgd2FzIHNldCB0byAwCi0gICAgICAgICAgICAvLyBhIG5ldyBpdGVtIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCwgd3JpdGUgcXVldWUgY2FuIGNvbnRhaW4gaXRlbXMgYXQgdGhpcyB0aW1lCi0gICAgICAgICAgICBpZiAoIV93cml0ZVF1ZXVlLklzRW1wdHkgJiYgSW50ZXJsb2NrZWQuQ29tcGFyZUV4Y2hhbmdlKHJlZiBfd3JpdGVJblByb2dyZXNzLCAxLCAwKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IFNlbmRNZXNzYWdlc0Zyb21RdWV1ZUFzeW5jKCkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrIENsb3NlQ29ubmVjdGlvbkJlY2F1c2VPZkZhaWx1cmVBc3luYyhFeGNlcHRpb24gZXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBFbXB0eVdyaXRlUXVldWUoKTsKLSAgICAgICAgICAgIGF3YWl0IENsb3NlQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBOb3RpZnlBYm91dENvbm5lY3Rpb25GYWlsdXJlKGV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgRW1wdHlXcml0ZVF1ZXVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKF93cml0ZVF1ZXVlLlRyeURlcXVldWUob3V0IF8pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIE5vdGlmeUFib3V0Q29ubmVjdGlvbkZhaWx1cmUoRXhjZXB0aW9uIGV4Y2VwdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgZm9yZWFjaCAodmFyIGNiIGluIF9jYWxsYmFja0J5UmVxdWVzdElkLlZhbHVlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYi5IYW5kbGVGYWlsdXJlKGV4Y2VwdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfY2FsbGJhY2tCeVJlcXVlc3RJZC5DbGVhcigpOwotICAgICAgICAgICAgRGlzcG9zZUNhbmNlbGxhdGlvblJlZ2lzdHJhdGlvbnMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYXN5bmMgVGFzayBTZW5kTWVzc2FnZUFzeW5jKFJlcXVlc3RNZXNzYWdlIG1lc3NhZ2UsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3Nlc3Npb25FbmFibGVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBSZWJ1aWxkU2Vzc2lvbk1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkTXNnID0gYXdhaXQgX21lc3NhZ2VTZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhtZXNzYWdlLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotI2lmIE5FVDZfMF9PUl9HUkVBVEVSCi0gICAgICAgICAgICBpZiAobWVzc2FnZS5Qcm9jZXNzb3IgPT0gVG9rZW5zLk9wc0F1dGhlbnRpY2F0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIERvbid0IGNvbXByZXNzIGEgbWVzc2FnZSB0aGF0IGNvbnRhaW5zIGNyZWRlbnRpYWxzIHRvIHByZXZlbnQgYXR0YWNrcyBsaWtlIENSSU1FIG9yIEJSRUFDSAotICAgICAgICAgICAgICAgIGF3YWl0IF93ZWJTb2NrZXRDb25uZWN0aW9uLlNlbmRNZXNzYWdlVW5jb21wcmVzc2VkQXN5bmMoc2VyaWFsaXplZE1zZywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIGF3YWl0IF93ZWJTb2NrZXRDb25uZWN0aW9uLlNlbmRNZXNzYWdlQXN5bmMoc2VyaWFsaXplZE1zZywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgUmVxdWVzdE1lc3NhZ2UgUmVidWlsZFNlc3Npb25NZXNzYWdlKFJlcXVlc3RNZXNzYWdlIG1lc3NhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlLlByb2Nlc3NvciA9PSBUb2tlbnMuT3BzQXV0aGVudGljYXRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBtc2dCdWlsZGVyID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQobWVzc2FnZS5PcGVyYXRpb24pCi0gICAgICAgICAgICAgIC5PdmVycmlkZVJlcXVlc3RJZChtZXNzYWdlLlJlcXVlc3RJZCkuUHJvY2Vzc29yKFRva2Vucy5Qcm9jZXNzb3JTZXNzaW9uKTsKLSAgICAgICAgICAgIGZvcmVhY2godmFyIGt2IGluIG1lc3NhZ2UuQXJndW1lbnRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1zZ0J1aWxkZXIuQWRkQXJndW1lbnQoa3YuS2V5LCBrdi5WYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtc2dCdWlsZGVyLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzU2Vzc2lvbiwgX3Nlc3Npb25JZCEpOwotICAgICAgICAgICAgcmV0dXJuIG1zZ0J1aWxkZXIuQ3JlYXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBDbG9zZUFzeW5jKCkKLSAgICAgICAgewotICAgICAgICAgICAgSW50ZXJsb2NrZWQuRXhjaGFuZ2UocmVmIF9jb25uZWN0aW9uU3RhdGUsIENsb3NlZCk7Ci0KLSAgICAgICAgICAgIGlmIChfc2Vzc2lvbkVuYWJsZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXdhaXQgQ2xvc2VTZXNzaW9uKCkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCBfd2ViU29ja2V0Q29ubmVjdGlvbi5DbG9zZUFzeW5jKCkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrIENsb3NlU2Vzc2lvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGJ1aWxkIGEgcmVxdWVzdCB0byBjbG9zZSB0aGlzIHNlc3Npb24KLSAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZChUb2tlbnMuT3BzQ2xvc2UpLlByb2Nlc3NvcihUb2tlbnMuUHJvY2Vzc29yU2Vzc2lvbikuQ3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IFNlbmRNZXNzYWdlQXN5bmMobXNnLCBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgICNyZWdpb24gSURpc3Bvc2FibGUgU3VwcG9ydApAQCAtMzQwLDIyICsyODUsMTIgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoZGlzcG9zaW5nKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX3dlYlNvY2tldENvbm5lY3Rpb24/LkRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgRGlzcG9zZUNhbmNlbGxhdGlvblJlZ2lzdHJhdGlvbnMoKTsKKyAgICAgICAgICAgICAgICAgICAgX2h0dHBDbGllbnQ/LkRpc3Bvc2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgX2Rpc3Bvc2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgdm9pZCBEaXNwb3NlQ2FuY2VsbGF0aW9uUmVnaXN0cmF0aW9ucygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBjYW5jZWxsYXRpb24gaW4gX2NhbmNlbGxhdGlvbkJ5UmVxdWVzdElkLlZhbHVlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb24uRGlzcG9zZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2NhbmNlbGxhdGlvbkJ5UmVxdWVzdElkLkNsZWFyKCk7Ci0gICAgICAgIH0KLQogICAgICAgICAjZW5kcmVnaW9uCiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvbkZhY3RvcnkuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0Nvbm5lY3Rpb25GYWN0b3J5LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTliMDZmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvbkZhY3RvcnkuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuRHJpdmVyCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgQ29ubmVjdGlvbkZhY3RvcnkgOiBJQ29ubmVjdGlvbkZhY3RvcnkKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgV2ViU29ja2V0U2V0dGluZ3MgX3dlYlNvY2tldFNldHRpbmdzOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEdyZW1saW5TZXJ2ZXIgX2dyZW1saW5TZXJ2ZXI7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nPyBfc2Vzc2lvbklkOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElNZXNzYWdlU2VyaWFsaXplciBfbWVzc2FnZVNlcmlhbGl6ZXI7Ci0KLSAgICAgICAgcHVibGljIENvbm5lY3Rpb25GYWN0b3J5KEdyZW1saW5TZXJ2ZXIgZ3JlbWxpblNlcnZlciwgSU1lc3NhZ2VTZXJpYWxpemVyIG1lc3NhZ2VTZXJpYWxpemVyLAotICAgICAgICAgICAgV2ViU29ja2V0U2V0dGluZ3Mgd2ViU29ja2V0U2V0dGluZ3MsIHN0cmluZz8gc2Vzc2lvbklkKQotICAgICAgICB7Ci0gICAgICAgICAgICBfZ3JlbWxpblNlcnZlciA9IGdyZW1saW5TZXJ2ZXI7Ci0gICAgICAgICAgICBfbWVzc2FnZVNlcmlhbGl6ZXIgPSBtZXNzYWdlU2VyaWFsaXplcjsKLSAgICAgICAgICAgIF9zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7Ci0gICAgICAgICAgICBfd2ViU29ja2V0U2V0dGluZ3MgPSB3ZWJTb2NrZXRTZXR0aW5nczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBJQ29ubmVjdGlvbiBDcmVhdGVDb25uZWN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uKAotICAgICAgICAgICAgICAgIG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uKFByb3h5Q2xpZW50V2ViU29ja2V0LkNyZWF0ZUNsaWVudFdlYlNvY2tldCgpLCBfd2ViU29ja2V0U2V0dGluZ3MpLAotICAgICAgICAgICAgICAgIF9ncmVtbGluU2VydmVyLlVyaSwgX2dyZW1saW5TZXJ2ZXIuVXNlcm5hbWUsIF9ncmVtbGluU2VydmVyLlBhc3N3b3JkLCBfbWVzc2FnZVNlcmlhbGl6ZXIsIF9zZXNzaW9uSWQpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvblBvb2wuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0Nvbm5lY3Rpb25Qb29sLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTNmNzBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvblBvb2wuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOTggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkNvbmN1cnJlbnQ7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLkV4Y2VwdGlvbnM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzOwotdXNpbmcgTWljcm9zb2Z0LkV4dGVuc2lvbnMuTG9nZ2luZzsKLXVzaW5nIFBvbGx5OwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuRHJpdmVyCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgQ29ubmVjdGlvblBvb2wgOiBJRGlzcG9zYWJsZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgQ29ubmVjdGlvbkluZGV4T3ZlcmZsb3dMaW1pdCA9IGludC5NYXhWYWx1ZSAtIDEwMDAwMDA7Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElDb25uZWN0aW9uRmFjdG9yeSBfY29ubmVjdGlvbkZhY3Rvcnk7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgQ29weU9uV3JpdGVDb2xsZWN0aW9uPElDb25uZWN0aW9uPiBfY29ubmVjdGlvbnMgPSBuZXcgQ29weU9uV3JpdGVDb2xsZWN0aW9uPElDb25uZWN0aW9uPigpOwotCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgQ29uY3VycmVudERpY3Rpb25hcnk8SUNvbm5lY3Rpb24sIGJ5dGU+IF9kZWFkQ29ubmVjdGlvbnMgPQotICAgICAgICAgICAgbmV3IENvbmN1cnJlbnREaWN0aW9uYXJ5PElDb25uZWN0aW9uLCBieXRlPigpOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IENvbm5lY3Rpb25Qb29sU2V0dGluZ3MgX3NldHRpbmdzOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElMb2dnZXI8Q29ubmVjdGlvblBvb2w+IF9sb2dnZXI7Ci0gICAgICAgIHByaXZhdGUgaW50IF9jb25uZWN0aW9uSW5kZXg7Ci0gICAgICAgIHByaXZhdGUgaW50IF9wb29sU3RhdGU7Ci0gICAgICAgIHByaXZhdGUgY29uc3QgaW50IFBvb2xJZGxlID0gMDsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgUG9vbFBvcHVsYXRpb25JblByb2dyZXNzID0gMTsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBDYW5jZWxsYXRpb25Ub2tlblNvdXJjZSBfY3RzID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7Ci0KLSAgICAgICAgcHVibGljIENvbm5lY3Rpb25Qb29sKElDb25uZWN0aW9uRmFjdG9yeSBjb25uZWN0aW9uRmFjdG9yeSwgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyBzZXR0aW5ncywKLSAgICAgICAgICAgIElMb2dnZXI8Q29ubmVjdGlvblBvb2w+IGxvZ2dlcikKLSAgICAgICAgewotICAgICAgICAgICAgX2Nvbm5lY3Rpb25GYWN0b3J5ID0gY29ubmVjdGlvbkZhY3Rvcnk7Ci0gICAgICAgICAgICBfc2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICAgICAgICAgIF9sb2dnZXIgPSBsb2dnZXI7Ci0gICAgICAgICAgICBSZXBsYWNlRGVhZENvbm5lY3Rpb25zQXN5bmMoKS5XYWl0VW53cmFwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBpbnQgTnJDb25uZWN0aW9ucyA9PiBfY29ubmVjdGlvbnMuQ291bnQ7Ci0KLSAgICAgICAgcHVibGljIElDb25uZWN0aW9uIEdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IFBvbGljeS5IYW5kbGU8U2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24+KCkKLSAgICAgICAgICAgICAgICAuV2FpdEFuZFJldHJ5KF9zZXR0aW5ncy5SZWNvbm5lY3Rpb25BdHRlbXB0cywgQ29tcHV0ZVJldHJ5U2xlZXBEdXJhdGlvbiwgb25SZXRyeToKLSAgICAgICAgICAgICAgICAgICAgKF8sIF8sIHJldHJ5Q291bnQsIF8pID0+Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dnZXIuQ291bGROb3RHZXRDb25uZWN0aW9uRnJvbVBvb2wocmV0cnlDb3VudCwgX3NldHRpbmdzLlJlY29ubmVjdGlvbkF0dGVtcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAuRXhlY3V0ZShHZXRDb25uZWN0aW9uRnJvbVBvb2wpOwotCi0gICAgICAgICAgICByZXR1cm4gUHJveGllZENvbm5lY3Rpb24oY29ubmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgYm9vbCBJc0hlYWx0aHkgPT4gX2RlYWRDb25uZWN0aW9ucy5Jc0VtcHR5ICYmIF9jb25uZWN0aW9ucy5Db3VudCA9PSBfc2V0dGluZ3MuUG9vbFNpemU7Ci0KLSAgICAgICAgcHJpdmF0ZSBUaW1lU3BhbiBDb21wdXRlUmV0cnlTbGVlcER1cmF0aW9uKGludCByZXRyeUF0dGVtcHROcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFRpbWVTcGFuLkZyb21UaWNrcyhfc2V0dGluZ3MuUmVjb25uZWN0aW9uQmFzZURlbGF5LlRpY2tzICogKGxvbmcpIE1hdGguUG93KDIsIHJldHJ5QXR0ZW1wdE5yKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBSZXBsYWNlcyBkZWFkIGNvbm5lY3Rpb25zLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHJldHVybnM+VHJ1ZSBpZiB0aGUgcG9vbCB3YXMgcmVwYWlyZWQsIGZhbHNlIGlmIHJlcGFpcmluZyB3YXMgbm90IG5lY2Vzc2FyeS48L3JldHVybnM+Ci0gICAgICAgIHByaXZhdGUgYXN5bmMgVGFzazxib29sPiBFbnN1cmVQb29sSXNIZWFsdGh5QXN5bmMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoSXNIZWFsdGh5KSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB2YXIgcG9vbFN0YXRlID0gSW50ZXJsb2NrZWQuQ29tcGFyZUV4Y2hhbmdlKHJlZiBfcG9vbFN0YXRlLCBQb29sUG9wdWxhdGlvbkluUHJvZ3Jlc3MsIFBvb2xJZGxlKTsKLSAgICAgICAgICAgIGlmIChwb29sU3RhdGUgPT0gUG9vbFBvcHVsYXRpb25JblByb2dyZXNzKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhd2FpdCBSZXBsYWNlRGVhZENvbm5lY3Rpb25zQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIFBvb2xQb3B1bGF0aW9uSW5Qcm9ncmVzcyBmbGFnIGFnYWluIGV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3VycmVkLCBzbyB3ZSBkb24ndCBibG9jayB0aGUgcG9vbCBwb3B1bGF0aW9uIGZvciBldmVyCi0gICAgICAgICAgICAgICAgSW50ZXJsb2NrZWQuQ29tcGFyZUV4Y2hhbmdlKHJlZiBfcG9vbFN0YXRlLCBQb29sSWRsZSwgUG9vbFBvcHVsYXRpb25JblByb2dyZXNzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGFzeW5jIFRhc2sgUmVwbGFjZURlYWRDb25uZWN0aW9uc0FzeW5jKCkKLSAgICAgICAgewotICAgICAgICAgICAgUmVtb3ZlRGVhZENvbm5lY3Rpb25zKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IEZpbGxQb29sQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgUmVtb3ZlRGVhZENvbm5lY3Rpb25zKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9kZWFkQ29ubmVjdGlvbnMuSXNFbXB0eSkgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3JlYWNoICh2YXIgZGVhZENvbm5lY3Rpb24gaW4gX2RlYWRDb25uZWN0aW9ucy5LZXlzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfY29ubmVjdGlvbnMuVHJ5UmVtb3ZlKGRlYWRDb25uZWN0aW9uKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIERlZmluaXRlbHlEZXN0cm95Q29ubmVjdGlvbihkZWFkQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfZGVhZENvbm5lY3Rpb25zLkNsZWFyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGFzeW5jIFRhc2sgRmlsbFBvb2xBc3luYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBuckNvbm5lY3Rpb25zVG9DcmVhdGUgPSBfc2V0dGluZ3MuUG9vbFNpemUgLSBfY29ubmVjdGlvbnMuQ291bnQ7Ci0gICAgICAgICAgICBfbG9nZ2VyLkZpbGxpbmdQb29sKG5yQ29ubmVjdGlvbnNUb0NyZWF0ZSk7Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbkNyZWF0aW9uVGFza3MgPSBuZXcgTGlzdDxUYXNrPElDb25uZWN0aW9uPj4obnJDb25uZWN0aW9uc1RvQ3JlYXRlKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnJDb25uZWN0aW9uc1RvQ3JlYXRlOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQ3JlYXRpb25UYXNrcy5BZGQoQ3JlYXRlTmV3Q29ubmVjdGlvbkFzeW5jKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBjcmVhdGVkQ29ubmVjdGlvbnMgPSBhd2FpdCBUYXNrLldoZW5BbGwoY29ubmVjdGlvbkNyZWF0aW9uVGFza3MpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBfY29ubmVjdGlvbnMuQWRkUmFuZ2UoY3JlYXRlZENvbm5lY3Rpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzcG9zZSBhbGwgY29ubmVjdGlvbnMgdGhhdCB3ZXJlIGFscmVhZHkgY3JlYXRlZAotICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBjcmVhdGlvblRhc2sgaW4gY29ubmVjdGlvbkNyZWF0aW9uVGFza3MpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3JlYXRpb25UYXNrLklzQ29tcGxldGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25UYXNrLlJlc3VsdD8uRGlzcG9zZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0aHJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKF9kaXNwb3NlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhd2FpdCBDbG9zZUFuZFJlbW92ZUFsbENvbm5lY3Rpb25zQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGFzeW5jIFRhc2s8SUNvbm5lY3Rpb24+IENyZWF0ZU5ld0Nvbm5lY3Rpb25Bc3luYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBuZXdDb25uZWN0aW9uID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IG5ld0Nvbm5lY3Rpb24uQ29ubmVjdEFzeW5jKF9jdHMuVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRGlzcG9zZSBjcmVhdGVkIGNvbm5lY3Rpb24gaWYgdGhlIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmYWlsZWQKLSAgICAgICAgICAgICAgICBuZXdDb25uZWN0aW9uLkRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICB0aHJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXdDb25uZWN0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBJQ29ubmVjdGlvbiBHZXRDb25uZWN0aW9uRnJvbVBvb2woKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbnMgPSBfY29ubmVjdGlvbnMuU25hcHNob3Q7Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbnMuTGVuZ3RoIDwgX3NldHRpbmdzLlBvb2xTaXplKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRyaWdnZXJSZXBsYWNlbWVudE9mRGVhZENvbm5lY3Rpb25zKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbnMuTGVuZ3RoID09IDApIHRocm93IG5ldyBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmV0dXJuIFRyeUdldEF2YWlsYWJsZUNvbm5lY3Rpb24oY29ubmVjdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIElDb25uZWN0aW9uIFRyeUdldEF2YWlsYWJsZUNvbm5lY3Rpb24oSUNvbm5lY3Rpb25bXSBjb25uZWN0aW9ucykKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGluZGV4ID0gSW50ZXJsb2NrZWQuSW5jcmVtZW50KHJlZiBfY29ubmVjdGlvbkluZGV4KTsKLSAgICAgICAgICAgIFByb3RlY3RJbmRleEZyb21PdmVyZmxvd2luZyhpbmRleCk7Ci0KLSAgICAgICAgICAgIHZhciBjbG9zZWRDb25uZWN0aW9ucyA9IDA7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbm5lY3Rpb25zLkxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gY29ubmVjdGlvbnNbKGluZGV4ICsgaSkgJSBjb25uZWN0aW9ucy5MZW5ndGhdOwotICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uLk5yUmVxdWVzdHNJbkZsaWdodCA+PSBfc2V0dGluZ3MuTWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbikgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0aW9uLklzT3BlbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFJlcGxhY2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBjbG9zZWRDb25uZWN0aW9ucysrOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9ucy5MZW5ndGggPiBjbG9zZWRDb25uZWN0aW9ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvblBvb2xCdXN5RXhjZXB0aW9uKF9zZXR0aW5ncy5Qb29sU2l6ZSwgX3NldHRpbmdzLk1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIFByb3RlY3RJbmRleEZyb21PdmVyZmxvd2luZyhpbnQgY3VycmVudEluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID4gQ29ubmVjdGlvbkluZGV4T3ZlcmZsb3dMaW1pdCkKLSAgICAgICAgICAgICAgICBJbnRlcmxvY2tlZC5FeGNoYW5nZShyZWYgX2Nvbm5lY3Rpb25JbmRleCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgUmVwbGFjZUNvbm5lY3Rpb24oSUNvbm5lY3Rpb24gY29ubmVjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgUmVtb3ZlQ29ubmVjdGlvbkZyb21Qb29sKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgVHJpZ2dlclJlcGxhY2VtZW50T2ZEZWFkQ29ubmVjdGlvbnMoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIFJlbW92ZUNvbm5lY3Rpb25Gcm9tUG9vbChJQ29ubmVjdGlvbiBjb25uZWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBfbG9nZ2VyLlJlbW92aW5nQ2xvc2VkQ29ubmVjdGlvbkZyb21Qb29sKCk7Ci0gICAgICAgICAgICBfZGVhZENvbm5lY3Rpb25zLlRyeUFkZChjb25uZWN0aW9uLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBUcmlnZ2VyUmVwbGFjZW1lbnRPZkRlYWRDb25uZWN0aW9ucygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJlcGxhY2VDbG9zZWRDb25uZWN0aW9uc0FzeW5jKCkuRm9yZ2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGFzeW5jIFRhc2sgUmVwbGFjZUNsb3NlZENvbm5lY3Rpb25zQXN5bmMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcG9vbFdhc1BvcHVsYXRlZCA9IGF3YWl0IEVuc3VyZVBvb2xJc0hlYWx0aHlBc3luYygpLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIC8vIEFub3RoZXIgY29ubmVjdGlvbiBjb3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBhbHJlYWR5LCBjaGVjayBpZiBhbm90aGVyIHBvcHVsYXRpb24gaXMgbmVjZXNzYXJ5Ci0gICAgICAgICAgICBpZiAocG9vbFdhc1BvcHVsYXRlZCAmJiAhX2Rpc3Bvc2VkKQotICAgICAgICAgICAgICAgIGF3YWl0IFJlcGxhY2VDbG9zZWRDb25uZWN0aW9uc0FzeW5jKCkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBJQ29ubmVjdGlvbiBQcm94aWVkQ29ubmVjdGlvbihJQ29ubmVjdGlvbiBjb25uZWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5Q29ubmVjdGlvbihjb25uZWN0aW9uLCBSZXBsYWNlQ29ubmVjdGlvbklmSXRXYXNDbG9zZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIFJlcGxhY2VDb25uZWN0aW9uSWZJdFdhc0Nsb3NlZChJQ29ubmVjdGlvbiBjb25uZWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5Jc09wZW4pIHJldHVybjsKLSAgICAgICAgICAgIFJlcGxhY2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrIENsb3NlQW5kUmVtb3ZlQWxsQ29ubmVjdGlvbnNBc3luYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBjb25uZWN0aW9uIGluIF9jb25uZWN0aW9ucy5SZW1vdmVBbmRHZXRBbGwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLkNsb3NlQXN5bmMoKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgRGVmaW5pdGVseURlc3Ryb3lDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIERlZmluaXRlbHlEZXN0cm95Q29ubmVjdGlvbihJQ29ubmVjdGlvbiBjb25uZWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25uZWN0aW9uLkRpc3Bvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgICNyZWdpb24gSURpc3Bvc2FibGUgU3VwcG9ydAotCi0gICAgICAgIHByaXZhdGUgYm9vbCBfZGlzcG9zZWQ7Ci0KLSAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIERpc3Bvc2UodHJ1ZSk7Ci0gICAgICAgICAgICBHQy5TdXBwcmVzc0ZpbmFsaXplKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZpcnR1YWwgdm9pZCBEaXNwb3NlKGJvb2wgZGlzcG9zaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIV9kaXNwb3NlZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoZGlzcG9zaW5nKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2N0cy5DYW5jZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgQ2xvc2VBbmRSZW1vdmVBbGxDb25uZWN0aW9uc0FzeW5jKCkuV2FpdFVud3JhcCgpOwotICAgICAgICAgICAgICAgICAgICBfY3RzLkRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgX2Rpc3Bvc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICNlbmRyZWdpb24KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Db25uZWN0aW9uUG9vbFNldHRpbmdzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Db25uZWN0aW9uUG9vbFNldHRpbmdzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQxNjMzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvblBvb2xTZXR0aW5ncy5jcworKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9uczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIEhvbGRzIHNldHRpbmdzIGZvciB0aGUgPHNlZSBjcmVmPSJDb25uZWN0aW9uUG9vbCIvPi4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUG9vbFNldHRpbmdzCi0gICAgewotICAgICAgICBwcml2YXRlIGludCBfcG9vbFNpemUgPSBEZWZhdWx0UG9vbFNpemU7Ci0gICAgICAgIHByaXZhdGUgaW50IF9tYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uID0gRGVmYXVsdE1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb247Ci0gICAgICAgIHByaXZhdGUgaW50IF9yZWNvbm5lY3Rpb25BdHRlbXB0cyA9IERlZmF1bHRSZWNvbm5lY3Rpb25BdHRlbXB0czsKLSAgICAgICAgcHJpdmF0ZSBUaW1lU3BhbiBfcmVjb25uZWN0aW9uQmFzZURlbGF5ID0gRGVmYXVsdFJlY29ubmVjdGlvbkJhc2VEZWxheTsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgRGVmYXVsdFBvb2xTaXplID0gODsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgRGVmYXVsdE1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSAxNjsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBpbnQgRGVmYXVsdFJlY29ubmVjdGlvbkF0dGVtcHRzID0gNDsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVGltZVNwYW4gRGVmYXVsdFJlY29ubmVjdGlvbkJhc2VEZWxheSA9IFRpbWVTcGFuLkZyb21TZWNvbmRzKDEpOwotICAgICAgICBpbnRlcm5hbCBjb25zdCBib29sIERlZmF1bHRFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgPSB0cnVlOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgdGhlIHNpemUgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIj5UaGUgc3BlY2lmaWVkIHBvb2wgc2l6ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby48L2V4Y2VwdGlvbj4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDguCi0gICAgICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgICAgIHB1YmxpYyBpbnQgUG9vbFNpemUKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0ID0+IF9wb29sU2l6ZTsKLSAgICAgICAgICAgIHNldAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8PSAwKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKG5hbWVvZihQb29sU2l6ZSksICQie25hbWVvZihQb29sU2l6ZSl9IG11c3QgYmUgPiAwISIpOwotICAgICAgICAgICAgICAgIF9wb29sU2l6ZSA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIHRoYXQgY2FuIG9jY3VyIG9uIGEgY29ubmVjdGlvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIj5UaGUgc3BlY2lmaWVkIG51bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby48L2V4Y2VwdGlvbj4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE2LiBBIDxzZWUgY3JlZj0iQ29ubmVjdGlvblBvb2xCdXN5RXhjZXB0aW9uIiAvPiBpcyB0aHJvd24gaWYgdGhpcyBsaW1pdCBpcyByZWFjaGVkCi0gICAgICAgIC8vLyAgICAgb24gYWxsIGNvbm5lY3Rpb25zIHdoZW4gYSBuZXcgcmVxdWVzdCBjb21lcyBpbi4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgcHVibGljIGludCBNYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCA9PiBfbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIHNldAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8PSAwKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uKG5hbWVvZihNYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICQie25hbWVvZihNYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKX0gbXVzdCBiZSA+IDAhIik7Ci0gICAgICAgICAgICAgICAgX21heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgdGhlIG51bWJlciBvZiBhdHRlbXB0cyB0byBnZXQgYW4gb3BlbiBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2wgdG8gc3VibWl0IGEgcmVxdWVzdC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uIj5UaGUgbnVtYmVyIG9mIGF0dGVtcHRzIHNwZWNpZmllZCBpcyBsZXNzIHRoYW4gemVyby48L2V4Y2VwdGlvbj4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gICAgIFRoZSBkcml2ZXIgYWx3YXlzIHRyaWVzIHRvIHJlY29ubmVjdCB0byBhIHNlcnZlciBpbiB0aGUgYmFja2dyb3VuZCBhZnRlciBpdCBoYXMgbm90aWNlZCB0aGF0IGEKLSAgICAgICAgLy8vICAgICBjb25uZWN0aW9uIGlzIGRlYWQuIFRoaXMgc2V0dGluZyBvbmx5IHNwZWNpZmllcyBob3cgb2Z0ZW4gdGhlIGRyaXZlciB3aWxsIHJldHJ5IHRvIGdldCBhbiBvcGVuCi0gICAgICAgIC8vLyAgICAgY29ubmVjdGlvbiBmcm9tIGl0cyBwb29sIHdoZW4gbm8gb3BlbiBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSB0byBzdWJtaXQgYSByZXF1ZXN0LiAgCi0gICAgICAgIC8vLyAgICAgVGhlc2UgcmV0cmllcyBnaXZlIHRoZSBkcml2ZXIgdGltZSB0byBlc3RhYmxpc2ggbmV3IGNvbm5lY3Rpb25zIHRvIHRoZSBzZXJ2ZXIgdGhhdCBtaWdodCBoYXZlIGJlZW4KLSAgICAgICAgLy8vICAgICB1bmF2YWlsYWJsZSB0ZW1wb3JhcmlseSBvciB0aGF0IG1pZ2h0IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0aW9ucywgZS5nLiwgYmVjYXVzZSB0aGV5IHdlcmUgaWRsZSBmb3Igc29tZQotICAgICAgICAvLy8gICAgIHRpbWUuCi0gICAgICAgIC8vLyAKLSAgICAgICAgLy8vICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA0LiBBIDxzZWUgY3JlZj0iU2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24iIC8+IGlzIHRocm93biBpZiB0aGUgc2VydmVyIGNhbiBzdGlsbAotICAgICAgICAvLy8gICAgIG5vdCBiZSByZWFjaGVkIGFmdGVyIHRoaXMgbWFueSByZXRyeSBhdHRlbXB0cy4KLSAgICAgICAgLy8vCi0gICAgICAgIC8vLyAgICAgU2V0dGluZyB0aGlzIHRvIHplcm8gbWVhbnMgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIHRocm93biBpbW1lZGlhdGVseSB3aGVuIG5vIG9wZW4gY29ubmVjdGlvbiBpcyBhdmFpbGFibGUKLSAgICAgICAgLy8vICAgICB0byBzdWJtaXQgYSByZXF1ZXN0LiBUaGUgZHJpdmVyIHdpbGwgaG93ZXZlciBzdGlsbCB0cnkgdG8gcmVjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgaW4gdGhlIGJhY2tncm91bmQgZm9yCi0gICAgICAgIC8vLyAgICAgc3Vic2VxdWVudCByZXF1ZXN0cy4KLSAgICAgICAgLy8vIDwvcmVtYXJrcz4KLSAgICAgICAgcHVibGljIGludCBSZWNvbm5lY3Rpb25BdHRlbXB0cwotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQgPT4gX3JlY29ubmVjdGlvbkF0dGVtcHRzOwotICAgICAgICAgICAgc2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbihuYW1lb2YoUmVjb25uZWN0aW9uQXR0ZW1wdHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgJCJ7UmVjb25uZWN0aW9uQXR0ZW1wdHN9IG11c3QgYmUgPj0gMCEiKTsKLSAgICAgICAgICAgICAgICBfcmVjb25uZWN0aW9uQXR0ZW1wdHMgPSB2YWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgdGhlIGJhc2UgZGVsYXkgdXNlZCBmb3IgdGhlIGV4cG9uZW50aWFsIGJhY2tvZmYgZm9yIHRoZSByZWNvbm5lY3Rpb24gYXR0ZW1wdHMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbiI+VGhlIHNwZWNpZmllZCBkZWxheSBpcyBuZWdhdGl2ZSBvciB6ZXJvLjwvZXhjZXB0aW9uPgotICAgICAgICAvLy8gPHJlbWFya3M+Ci0gICAgICAgIC8vLyAgICAgVGhlIGRyaXZlciBlbXBsb3lzIGFuIGV4cG9uZW50aWFsIGJhY2tvZmYgc3RyYXRlZ3kgdGhhdCB1c2VzIHRoaXMgYmFzZSBkZWxheSBmb3IgaXRzIHJlY29ubmVjdGlvbgotICAgICAgICAvLy8gICAgIGF0dGVtcHRzLiBXaXRoIGEgYmFzZSBkZWxheSBvZiAxMDAgbXMgZm9yIGV4YW1wbGUsIHJldHJpZXMgaGFwcGVuIGFmdGVyIDEwMCBtcywgMjAwIG1zLCA0MDAgbXMsIDgwMCBtcywKLSAgICAgICAgLy8vICAgICBhbmQgc28gb24sIGFzc3VtaW5nIHRoYXQgZW5vdWdoIDxzZWUgY3JlZj0iUmVjb25uZWN0aW9uQXR0ZW1wdHMiLz4gYXJlIGNvbmZpZ3VyZWQuCi0gICAgICAgIC8vLwotICAgICAgICAvLy8gICAgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEgc2Vjb25kLgotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICBwdWJsaWMgVGltZVNwYW4gUmVjb25uZWN0aW9uQmFzZURlbGF5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdldCA9PiBfcmVjb25uZWN0aW9uQmFzZURlbGF5OwotICAgICAgICAgICAgc2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlIDw9IFRpbWVTcGFuLlplcm8pCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24obmFtZW9mKFJlY29ubmVjdGlvbkJhc2VEZWxheSksCi0gICAgICAgICAgICAgICAgICAgICAgICAkIntuYW1lb2YoUmVjb25uZWN0aW9uQmFzZURlbGF5KX0gbXVzdCBiZSA+IDAhIik7Ci0gICAgICAgICAgICAgICAgX3JlY29ubmVjdGlvbkJhc2VEZWxheSA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIG9yIHNldHMgd2hldGhlciBhIGNvbm5lY3Rpb24gcG9vbCB3aWxsIHNlbmQgYSB1c2VyIGFnZW50IGR1cmluZyB3ZWIgc29ja2V0IGhhbmRzaGFrZXMKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxyZW1hcmtzPgotICAgICAgICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZS4gV2hlbiBlbmFibGVkLCB1c2VyIGFnZW50cyB3aWxsIG9ubHkgYmUgc2VudCBkdXJpbmcgdGhlIHdlYiBzb2NrZXQKLSAgICAgICAgLy8vIGhhbmRzaGFrZS4gVXNlciBhZ2VudCBmb2xsb3dzIHRoZSBmb3JtOgotICAgICAgICAvLy8gW0FwcGxpY2F0aW9uIE5hbWVdIFtHTFYgTmFtZV0uW1ZlcnNpb25dIFtMYW5ndWFnZSBSdW50aW1lIFZlcnNpb25dIFtPU10uW1ZlcnNpb25dIFtDUFUgQXJjaGl0ZWN0dXJlXQotICAgICAgICAvLy8gPC9yZW1hcmtzPgotICAgICAgICBwdWJsaWMgYm9vbCBFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgIHsgZ2V0OyAgc2V0OyB9ID0gRGVmYXVsdEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0Nvbm5lY3Rpb25TZXR0aW5ncy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvQ29ubmVjdGlvblNldHRpbmdzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZmFlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0Nvbm5lY3Rpb25TZXR0aW5ncy5jcwpAQCAtMCwwICsxLDk0IEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gICAgIEhvbGRzIHNldHRpbmdzIGZvciB0aGUgSFRUUCBjb25uZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIENvbm5lY3Rpb25TZXR0aW5ncworICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIFRoZSBkZWZhdWx0IFRDUCBjb25uZWN0aW9uIHRpbWVvdXQuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVGltZVNwYW4gRGVmYXVsdENvbm5lY3Rpb25UaW1lb3V0ID0gVGltZVNwYW4uRnJvbVNlY29uZHMoMTUpOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBUaGUgZGVmYXVsdCBpZGxlIGNvbm5lY3Rpb24gdGltZW91dC4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBUaW1lU3BhbiBEZWZhdWx0SWRsZUNvbm5lY3Rpb25UaW1lb3V0ID0gVGltZVNwYW4uRnJvbVNlY29uZHMoMTgwKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgVGhlIGRlZmF1bHQgbWF4aW11bSBjb25uZWN0aW9ucyBwZXIgc2VydmVyLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgY29uc3QgaW50IERlZmF1bHRNYXhDb25uZWN0aW9uc1BlclNlcnZlciA9IDEyODsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgVGhlIGRlZmF1bHQgVENQIGtlZXAtYWxpdmUgcHJvYmUgaW50ZXJ2YWwuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVGltZVNwYW4gRGVmYXVsdEtlZXBBbGl2ZUludGVydmFsID0gVGltZVNwYW4uRnJvbVNlY29uZHMoMzApOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgdGhlIFRDUCBjb25uZWN0aW9uIHRpbWVvdXQuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBUaW1lU3BhbiBDb25uZWN0aW9uVGltZW91dCB7IGdldDsgc2V0OyB9ID0gRGVmYXVsdENvbm5lY3Rpb25UaW1lb3V0OworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgaG93IGxvbmcgaWRsZSBjb25uZWN0aW9ucyBzdGF5IGluIHRoZSBwb29sIGJlZm9yZSBiZWluZyBjbG9zZWQuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBUaW1lU3BhbiBJZGxlQ29ubmVjdGlvblRpbWVvdXQgeyBnZXQ7IHNldDsgfSA9IERlZmF1bHRJZGxlQ29ubmVjdGlvblRpbWVvdXQ7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB0aGUgbWF4aW11bSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHRvIGEgc2luZ2xlIHNlcnZlci4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIGludCBNYXhDb25uZWN0aW9uc1BlclNlcnZlciB7IGdldDsgc2V0OyB9ID0gRGVmYXVsdE1heENvbm5lY3Rpb25zUGVyU2VydmVyOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgdGhlIFRDUCBrZWVwLWFsaXZlIHByb2JlIGludGVydmFsLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgVGltZVNwYW4gS2VlcEFsaXZlSW50ZXJ2YWwgeyBnZXQ7IHNldDsgfSA9IERlZmF1bHRLZWVwQWxpdmVJbnRlcnZhbDsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gcmVxdWVzdCBkZWZsYXRlIGNvbXByZXNzaW9uLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgYm9vbCBFbmFibGVDb21wcmVzc2lvbiB7IGdldDsgc2V0OyB9ID0gZmFsc2U7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNlbmQgdGhlIFVzZXItQWdlbnQgaGVhZGVyLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgYm9vbCBFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgeyBnZXQ7IHNldDsgfSA9IHRydWU7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB3aGV0aGVyIHRvIHNlbmQgdGhlIGJ1bGtSZXN1bHRzOiB0cnVlIGhlYWRlciBvbiBhbGwgcmVxdWVzdHMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBib29sIEJ1bGtSZXN1bHRzIHsgZ2V0OyBzZXQ7IH0gPSBmYWxzZTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyBvciBzZXRzIHdoZXRoZXIgdG8gc2tpcCBTU0wgY2VydGlmaWNhdGUgdmFsaWRhdGlvbi4KKyAgICAgICAgLy8vICAgICBPbmx5IHVzZSBmb3IgdGVzdGluZyB3aXRoIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIGJvb2wgU2tpcENlcnRpZmljYXRlVmFsaWRhdGlvbiB7IGdldDsgc2V0OyB9ID0gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL0Nvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24uY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0V4Y2VwdGlvbnMvQ29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk5MTJjOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0V4Y2VwdGlvbnMvQ29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbi5jcworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5OZXQuV2ViU29ja2V0czsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgVGhlIGV4Y2VwdGlvbiB0aGF0IGlzIHRocm93biBmb3IgcmVxdWVzdHMgdGhhdCBpbi1mbGlnaHQgd2hlbiB0aGUgdW5kZXJseWluZyB3ZWJzb2NrZXQgaXMgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIuCi0gICAgLy8vICAgICBSZXF1ZXN0cyB0aGF0IHJlY2VpdmUgdGhpcyBleGNlcHRpb24gd2lsbCBiZSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIHN0YXRlIGFuZCBtYXkgbmVlZCB0byBiZSByZXRyaWVkLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgLy8vIDxyZW1hcmtzPgotICAgIC8vLyAgICAgSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBzYW1lIHJlcXVlc3QgcmV0cnkgcG9saWN5IHRoYXQgaXMgYXBwbGllZCB3aGVuIGEgPHNlZSBjcmVmPSJTeXN0ZW0uTmV0LldlYlNvY2tldHMuV2ViU29ja2V0RXhjZXB0aW9uIiAvPiwKLSAgICAvLy8gICAgIDxzZWUgY3JlZj0iU3lzdGVtLk5ldC5Tb2NrZXRzLlNvY2tldEV4Y2VwdGlvbiIvPiwgPHNlZSBjcmVmPSJTeXN0ZW0uSU8uSU9FeGNlcHRpb24iIC8+LgotICAgIC8vLyA8L3JlbWFya3M+Ci0gICAgcHVibGljIGNsYXNzIENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24gOiBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSB3ZWxsLWtub3duIFdlYlNvY2tldCBjbG9zZSBzdGF0dXMgY29kZSBwcm92aWRlZCBieSB0aGUgc2VydmVyLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgV2ViU29ja2V0Q2xvc2VTdGF0dXM/IFN0YXR1cyB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSBXZWJzb2NrZXQgY2xvc3VyZSBkZXNjcmlwdGlvbiBwcm92aWRlZCBieSB0aGUgc2VydmVyLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nPyBEZXNjcmlwdGlvbiB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24oV2ViU29ja2V0Q2xvc2VTdGF0dXM/IHN0YXR1cywgc3RyaW5nPyBkZXNjcmlwdGlvbikKLSAgICAgICAgICAgIDogYmFzZShDcmVhdGVNZXNzYWdlKHN0YXR1cywgZGVzY3JpcHRpb24pKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdGF0dXMgPSBzdGF0dXM7Ci0gICAgICAgICAgICBEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgc3RyaW5nIENyZWF0ZU1lc3NhZ2UoV2ViU29ja2V0Q2xvc2VTdGF0dXM/IHN0YXR1cywgc3RyaW5nPyBkZXNjcmlwdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICQiQ29ubmVjdGlvbiBjbG9zZWQgYnkgc2VydmVyLiBDbG9zZVN0YXR1czoge3N0YXR1cz8uVG9TdHJpbmcoKSA/PyAiPG5vbmU+In0sIENsb3NlRGVzY3JpcHRpb246IHtkZXNjcmlwdGlvbiA/PyAiPG5vbmU+In0uIiArCi0gICAgICAgICAgICAgICAgIiBBbnkgaW4tcHJvZ3Jlc3MgcmVxdWVzdHMgb24gdGhlIGNvbm5lY3Rpb24gd2lsbCBiZSBpbiBhbiB1bmtub3duIHN0YXRlLCBhbmQgbWF5IG5lZWQgdG8gYmUgcmV0cmllZC4iOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL0Nvbm5lY3Rpb25Qb29sQnVzeUV4Y2VwdGlvbi5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvRXhjZXB0aW9ucy9Db25uZWN0aW9uUG9vbEJ1c3lFeGNlcHRpb24uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMjVjZjQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL0Nvbm5lY3Rpb25Qb29sQnVzeUV4Y2VwdGlvbi5jcworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9ucwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFRoZSBleGNlcHRpb24gdGhhdCBpcyB0aHJvd24gd2hlbiBhbGwgY29ubmVjdGlvbnMgaW4gdGhlIHBvb2wgaGF2ZSByZWFjaGVkIHRoZWlyIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodAotICAgIC8vLyAgICAgcmVxdWVzdHMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblBvb2xCdXN5RXhjZXB0aW9uIDogTm9Db25uZWN0aW9uQXZhaWxhYmxlRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgc2l6ZSBvZiB0aGUgY29ubmVjdGlvbiBwb29sLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgaW50IFBvb2xTaXplIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCByZXF1ZXN0cyB0aGF0IGNhbiBvY2N1ciBvbiBhIGNvbm5lY3Rpb24uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBpbnQgTWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJDb25uZWN0aW9uUG9vbEJ1c3lFeGNlcHRpb24iIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQ29ubmVjdGlvblBvb2xCdXN5RXhjZXB0aW9uKGludCBwb29sU2l6ZSwgaW50IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pCi0gICAgICAgICAgICA6IGJhc2UoQ3JlYXRlTWVzc2FnZShwb29sU2l6ZSwgbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBvb2xTaXplID0gcG9vbFNpemU7Ci0gICAgICAgICAgICBNYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uID0gbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHN0cmluZyBDcmVhdGVNZXNzYWdlKGludCBwb29sU2l6ZSwgaW50IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAkIkFsbCB7cG9vbFNpemV9IGNvbm5lY3Rpb25zIGhhdmUgcmVhY2hlZCB0aGVpciAiICsKLSAgICAgICAgICAgICAgICAgICAkIntuYW1lb2YoQ29ubmVjdGlvblBvb2xTZXR0aW5ncy5NYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKX0gbGltaXQgb2Yge21heEluUHJvY2Vzc1BlckNvbm5lY3Rpb259LiIgKwotICAgICAgICAgICAgICAgICAgICQiIENvbnNpZGVyIGluY3JlYXNpbmcgZWl0aGVyIHRoZSB7bmFtZW9mKENvbm5lY3Rpb25Qb29sU2V0dGluZ3MuUG9vbFNpemUpfSBvciB0aGUgIiArCi0gICAgICAgICAgICAgICAgICAgJCJ7bmFtZW9mKENvbm5lY3Rpb25Qb29sU2V0dGluZ3MuTWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbil9IGxpbWl0LiI7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL05vQ29ubmVjdGlvbkF2YWlsYWJsZUV4Y2VwdGlvbi5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvRXhjZXB0aW9ucy9Ob0Nvbm5lY3Rpb25BdmFpbGFibGVFeGNlcHRpb24uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZjIzMWYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL05vQ29ubmVjdGlvbkF2YWlsYWJsZUV4Y2VwdGlvbi5jcworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgVGhlIGV4Y2VwdGlvbiB0aGF0IGlzIHRocm93biB3aGVuIG5vIGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlIHRvIHNlcnZpY2UgYSByZXF1ZXN0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIE5vQ29ubmVjdGlvbkF2YWlsYWJsZUV4Y2VwdGlvbiA6IEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9Ik5vQ29ubmVjdGlvbkF2YWlsYWJsZUV4Y2VwdGlvbiIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBOb0Nvbm5lY3Rpb25BdmFpbGFibGVFeGNlcHRpb24oKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iTm9Db25uZWN0aW9uQXZhaWxhYmxlRXhjZXB0aW9uIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIE5vQ29ubmVjdGlvbkF2YWlsYWJsZUV4Y2VwdGlvbihzdHJpbmcgbWVzc2FnZSkKLSAgICAgICAgICAgIDogYmFzZShtZXNzYWdlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iTm9Db25uZWN0aW9uQXZhaWxhYmxlRXhjZXB0aW9uIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIE5vQ29ubmVjdGlvbkF2YWlsYWJsZUV4Y2VwdGlvbihzdHJpbmcgbWVzc2FnZSwgRXhjZXB0aW9uIGlubmVyKQotICAgICAgICAgICAgOiBiYXNlKG1lc3NhZ2UsIGlubmVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL1Jlc3BvbnNlRXhjZXB0aW9uLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL1Jlc3BvbnNlRXhjZXB0aW9uLmNzCmluZGV4IDA4ZTZmMmIuLjBkYmFjOWMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvRXhjZXB0aW9ucy9SZXNwb25zZUV4Y2VwdGlvbi5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0V4Y2VwdGlvbnMvUmVzcG9uc2VFeGNlcHRpb24uY3MKQEAgLTIyLDggKzIyLDYgQEAKICNlbmRyZWdpb24KIAogdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7CiAKIG5hbWVzcGFjZSBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9ucwogewpAQCAtMzUsMjUgKzMzLDI0IEBACiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJSZXNwb25zZUV4Y2VwdGlvbiIgLz4gY2xhc3MuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzQ29kZSI+VGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdGF0dXNBdHRyaWJ1dGVzIj5UaGUgc3RhdHVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZ3JlbWxpbiByZXNwb25zZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im1lc3NhZ2UiPlRoZSBlcnJvciBtZXNzYWdlIHN0cmluZy48L3BhcmFtPgotICAgICAgICBwdWJsaWMgUmVzcG9uc2VFeGNlcHRpb24oUmVzcG9uc2VTdGF0dXNDb2RlIHN0YXR1c0NvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUmVhZE9ubHlEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBzdGF0dXNBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIG1lc3NhZ2UpIDogYmFzZShtZXNzYWdlKQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1c0NvZGUiPlRoZSBzdGF0dXMgY29kZSBmcm9tIHRoZSBHcmFwaEJpbmFyeSBzdGF0dXMgZm9vdGVyLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzTWVzc2FnZSI+VGhlIHN0YXR1cyBtZXNzYWdlIGZyb20gdGhlIHNlcnZlci48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNlcnZlckV4Y2VwdGlvbiI+VGhlIGV4Y2VwdGlvbiBjbGFzcyBuYW1lIGZyb20gdGhlIHNlcnZlciwgaWYgcHJvdmlkZWQuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIFJlc3BvbnNlRXhjZXB0aW9uKGludCBzdGF0dXNDb2RlLCBzdHJpbmc/IHN0YXR1c01lc3NhZ2UsIHN0cmluZz8gc2VydmVyRXhjZXB0aW9uKQorICAgICAgICAgICAgOiBiYXNlKHN0YXR1c01lc3NhZ2UgPz8gJCJTZXJ2ZXIgZXJyb3I6IHtzdGF0dXNDb2RlfSIpCiAgICAgICAgIHsKICAgICAgICAgICAgIFN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlOwotICAgICAgICAgICAgU3RhdHVzQXR0cmlidXRlcyA9IHN0YXR1c0F0dHJpYnV0ZXM7CisgICAgICAgICAgICBTZXJ2ZXJFeGNlcHRpb24gPSBzZXJ2ZXJFeGNlcHRpb247CiAgICAgICAgIH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIHN0YXR1cyBjb2RlIGZyb20gdGhlIEdyYXBoQmluYXJ5IHN0YXR1cyBmb290ZXIuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBSZXNwb25zZVN0YXR1c0NvZGUgU3RhdHVzQ29kZSB7IGdldDsgfQorICAgICAgICBwdWJsaWMgaW50IFN0YXR1c0NvZGUgeyBnZXQ7IH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgc3RhdHVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZ3JlbWxpbiByZXNwb25zZQorICAgICAgICAvLy8gICAgIEdldHMgdGhlIGV4Y2VwdGlvbiBjbGFzcyBuYW1lIGZyb20gdGhlIHNlcnZlciwgaWYgcHJvdmlkZWQuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBJUmVhZE9ubHlEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBTdGF0dXNBdHRyaWJ1dGVzIHsgZ2V0OyB9CisgICAgICAgIHB1YmxpYyBzdHJpbmc/IFNlcnZlckV4Y2VwdGlvbiB7IGdldDsgfQogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0V4Y2VwdGlvbnMvU2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24uY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0V4Y2VwdGlvbnMvU2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmOGJmZGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9FeGNlcHRpb25zL1NlcnZlclVuYXZhaWxhYmxlRXhjZXB0aW9uLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotI3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgVGhlIGV4Y2VwdGlvbiB0aGF0IGlzIHRocm93biB3aGVuIG5vIGNvbm5lY3Rpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSA8c2VlIGNyZWY9IkdyZW1saW5TZXJ2ZXIiLz4uCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgU2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24gOiBOb0Nvbm5lY3Rpb25BdmFpbGFibGVFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbiIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbigpCi0gICAgICAgICAgICA6IGJhc2UoQ3JlYXRlTWVzc2FnZSgpKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgQ3JlYXRlTWVzc2FnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICJObyBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgYXZhaWxhYmxlIHdoaWNoIG1vc3QgbGlrZWx5IG1lYW5zIHRoYXQgdGhlIHNlcnZlciBpcyBjb21wbGV0ZWx5IHVuYXZhaWxhYmxlLiI7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9HcmVtbGluQ2xpZW50LmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9HcmVtbGluQ2xpZW50LmNzCmluZGV4IDY1ODlkOWMuLjUwZGNiY2IgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvR3JlbWxpbkNsaWVudC5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0dyZW1saW5DbGllbnQuY3MKQEAgLTIyLDEzICsyMiwxMSBAQAogI2VuZHJlZ2lvbgogCiB1c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uTmV0LldlYlNvY2tldHM7Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKIHVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CiB1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKIHVzaW5nIE1pY3Jvc29mdC5FeHRlbnNpb25zLkxvZ2dpbmc7CiB1c2luZyBNaWNyb3NvZnQuRXh0ZW5zaW9ucy5Mb2dnaW5nLkFic3RyYWN0aW9uczsKIApAQCAtMzksMTgzICszNyw4NCBAQAogICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgcHVibGljIGNsYXNzIEdyZW1saW5DbGllbnQgOiBJR3JlbWxpbkNsaWVudAogICAgIHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBDb25uZWN0aW9uUG9vbCBfY29ubmVjdGlvblBvb2w7Ci0gICAgICAgIAorICAgICAgICBwcml2YXRlIHJlYWRvbmx5IENvbm5lY3Rpb24gX2Nvbm5lY3Rpb247CisKICAgICAgICAgaW50ZXJuYWwgSUxvZ2dlckZhY3RvcnkgTG9nZ2VyRmFjdG9yeSB7IGdldDsgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmVtbGluQ2xpZW50IiAvPiBjbGFzcyBmb3IgdGhlIHNwZWNpZmllZCBHcmVtbGluIFNlcnZlci4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmVtbGluU2VydmVyIj5UaGUgPHNlZSBjcmVmPSJHcmVtbGluU2VydmVyIiAvPiB0aGUgcmVxdWVzdHMgc2hvdWxkIGJlIHNlbnQgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNPTlJlYWRlciI+QSA8c2VlIGNyZWY9IkdyYXBoU09OUmVhZGVyIiAvPiBpbnN0YW5jZSB0byByZWFkIHJlY2VpdmVkIEdyYXBoU09OIGRhdGEuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNPTldyaXRlciI+YSA8c2VlIGNyZWY9IkdyYXBoU09OV3JpdGVyIiAvPiBpbnN0YW5jZSB0byB3cml0ZSBHcmFwaFNPTiBkYXRhLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY29ubmVjdGlvblBvb2xTZXR0aW5ncyI+VGhlIDxzZWUgY3JlZj0iQ29ubmVjdGlvblBvb2xTZXR0aW5ncyIgLz4gZm9yIHRoZSBjb25uZWN0aW9uIHBvb2wuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ3ZWJTb2NrZXRDb25maWd1cmF0aW9uIj4KLSAgICAgICAgLy8vICAgICBBIGRlbGVnYXRlIHRoYXQgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIDxzZWUgY3JlZj0iQ2xpZW50V2ViU29ja2V0T3B0aW9ucyIgLz4KLSAgICAgICAgLy8vICAgICBvYmplY3QgdXNlZCB0byBjb25maWd1cmUgV2ViU29ja2V0IGNvbm5lY3Rpb25zLgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlcXVlc3RTZXJpYWxpemVyIj4KKyAgICAgICAgLy8vICAgICBBIDxzZWUgY3JlZj0iSU1lc3NhZ2VTZXJpYWxpemVyIiAvPiBpbnN0YW5jZSB0byBzZXJpYWxpemUgb3V0Z29pbmcgcmVxdWVzdCBtZXNzYWdlcy4KKyAgICAgICAgLy8vICAgICBXaGVuIDxjPm51bGw8L2M+LCB0aGUgcmVxdWVzdCBib2R5IGlzIHBhc3NlZCBhcyBhIDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UiLz4gdG8KKyAgICAgICAgLy8vICAgICBpbnRlcmNlcHRvcnMsIGFuZCBhbiBpbnRlcmNlcHRvciBtdXN0IHNlcmlhbGl6ZSBpdCB0byA8Yz5ieXRlW108L2M+IGFuZCBzZXQgdGhlCisgICAgICAgIC8vLyAgICAgPGM+Q29udGVudC1UeXBlPC9jPiBoZWFkZXIuIFRoaXMgZm9sbG93cyB0aGUgUHl0aG9uIGRyaXZlcidzCisgICAgICAgIC8vLyAgICAgPGM+cmVxdWVzdF9zZXJpYWxpemVyPU5vbmU8L2M+IHBhdHRlcm4uCiAgICAgICAgIC8vLyA8L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNlc3Npb25JZCI+VGhlIHNlc3Npb24gSWQgaWYgR3JlbWxpbiBDbGllbnQgaW4gc2Vzc2lvbiBtb2RlLCBkZWZhdWx0cyB0byBudWxsIGFzIHNlc3Npb24tbGVzcyBDbGllbnQuPC9wYXJhbT4KLSAgICAgICAgW09ic29sZXRlKCJUaGlzIGNvbnN0cnVjdG9yIGlzIG9ic29sZXRlLiBVc2UgdGhlIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBJTWVzc2FnZVNlcmlhbGl6ZXIgaW5zdGVhZC4iKV0KLSAgICAgICAgcHVibGljIEdyZW1saW5DbGllbnQoR3JlbWxpblNlcnZlciBncmVtbGluU2VydmVyLCBHcmFwaFNPTlJlYWRlciBncmFwaFNPTlJlYWRlciwgR3JhcGhTT05Xcml0ZXIgZ3JhcGhTT05Xcml0ZXIsCi0gICAgICAgICAgICBDb25uZWN0aW9uUG9vbFNldHRpbmdzPyBjb25uZWN0aW9uUG9vbFNldHRpbmdzID0gbnVsbCwKLSAgICAgICAgICAgIEFjdGlvbjxDbGllbnRXZWJTb2NrZXRPcHRpb25zPj8gd2ViU29ja2V0Q29uZmlndXJhdGlvbiA9IG51bGwsIHN0cmluZz8gc2Vzc2lvbklkID0gbnVsbCkKLSAgICAgICAgICAgIDogdGhpcyhncmVtbGluU2VydmVyLCBncmFwaFNPTlJlYWRlciwgZ3JhcGhTT05Xcml0ZXIsIFNlcmlhbGl6YXRpb25Ub2tlbnMuR3JhcGhTT04zTWltZVR5cGUsCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncywgd2ViU29ja2V0Q29uZmlndXJhdGlvbiwgc2Vzc2lvbklkKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmVtbGluQ2xpZW50IiAvPiBjbGFzcyBmb3IgdGhlIHNwZWNpZmllZCBHcmVtbGluIFNlcnZlci4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmVtbGluU2VydmVyIj5UaGUgPHNlZSBjcmVmPSJHcmVtbGluU2VydmVyIiAvPiB0aGUgcmVxdWVzdHMgc2hvdWxkIGJlIHNlbnQgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNPTlJlYWRlciI+QSA8c2VlIGNyZWY9IkdyYXBoU09OUmVhZGVyIiAvPiBpbnN0YW5jZSB0byByZWFkIHJlY2VpdmVkIEdyYXBoU09OIGRhdGEuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNPTldyaXRlciI+YSA8c2VlIGNyZWY9IkdyYXBoU09OV3JpdGVyIiAvPiBpbnN0YW5jZSB0byB3cml0ZSBHcmFwaFNPTiBkYXRhLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWltZVR5cGUiPlRoZSBHcmFwaFNPTiB2ZXJzaW9uIG1pbWUgdHlwZSwgZGVmYXVsdHMgdG8gbGF0ZXN0IHN1cHBvcnRlZCBieSB0aGUgc2VydmVyLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY29ubmVjdGlvblBvb2xTZXR0aW5ncyI+VGhlIDxzZWUgY3JlZj0iQ29ubmVjdGlvblBvb2xTZXR0aW5ncyIgLz4gZm9yIHRoZSBjb25uZWN0aW9uIHBvb2wuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ3ZWJTb2NrZXRDb25maWd1cmF0aW9uIj4KLSAgICAgICAgLy8vICAgICBBIGRlbGVnYXRlIHRoYXQgd2lsbCBiZSBpbnZva2VkIHdpdGggdGhlIDxzZWUgY3JlZj0iQ2xpZW50V2ViU29ja2V0T3B0aW9ucyIgLz4KLSAgICAgICAgLy8vICAgICBvYmplY3QgdXNlZCB0byBjb25maWd1cmUgV2ViU29ja2V0IGNvbm5lY3Rpb25zLgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlc3BvbnNlU2VyaWFsaXplciI+CisgICAgICAgIC8vLyAgICAgQSA8c2VlIGNyZWY9IklNZXNzYWdlU2VyaWFsaXplciIgLz4gaW5zdGFuY2UgdG8gZGVzZXJpYWxpemUgaW5jb21pbmcgcmVzcG9uc2UgbWVzc2FnZXMuCisgICAgICAgIC8vLyAgICAgQWx3YXlzIHJlcXVpcmVkLgogICAgICAgICAvLy8gPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzZXNzaW9uSWQiPlRoZSBzZXNzaW9uIElkIGlmIEdyZW1saW4gQ2xpZW50IGluIHNlc3Npb24gbW9kZSwgZGVmYXVsdHMgdG8gbnVsbCBhcyBzZXNzaW9uLWxlc3MgQ2xpZW50LjwvcGFyYW0+Ci0gICAgICAgIFtPYnNvbGV0ZSgiVGhpcyBjb25zdHJ1Y3RvciBpcyBvYnNvbGV0ZS4gVXNlIHRoZSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIGEgSU1lc3NhZ2VTZXJpYWxpemVyIGluc3RlYWQuIildCi0gICAgICAgIHB1YmxpYyBHcmVtbGluQ2xpZW50KEdyZW1saW5TZXJ2ZXIgZ3JlbWxpblNlcnZlciwgR3JhcGhTT05SZWFkZXI/IGdyYXBoU09OUmVhZGVyLCBHcmFwaFNPTldyaXRlcj8gZ3JhcGhTT05Xcml0ZXIsCi0gICAgICAgICAgICBzdHJpbmcgbWltZVR5cGUsIENvbm5lY3Rpb25Qb29sU2V0dGluZ3M/IGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MgPSBudWxsLAotICAgICAgICAgICAgQWN0aW9uPENsaWVudFdlYlNvY2tldE9wdGlvbnM+PyB3ZWJTb2NrZXRDb25maWd1cmF0aW9uID0gbnVsbCwgc3RyaW5nPyBzZXNzaW9uSWQgPSBudWxsKQorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb25TZXR0aW5ncyI+VGhlIDxzZWUgY3JlZj0iQ29ubmVjdGlvblNldHRpbmdzIiAvPiBmb3IgdGhlIEhUVFAgY29ubmVjdGlvbi48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImxvZ2dlckZhY3RvcnkiPkEgZmFjdG9yeSB0byBjcmVhdGUgbG9nZ2Vycy4gSWYgbm90IHByb3ZpZGVkLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBsb2dnZWQuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJpbnRlcmNlcHRvcnMiPgorICAgICAgICAvLy8gICAgIEFuIG9wdGlvbmFsIGxpc3Qgb2YgcmVxdWVzdCBpbnRlcmNlcHRvcnMuIEVhY2ggaW50ZXJjZXB0b3IgcmVjZWl2ZXMgYSBtdXRhYmxlCisgICAgICAgIC8vLyAgICAgPHNlZSBjcmVmPSJIdHRwUmVxdWVzdENvbnRleHQiIC8+IGFuZCBjYW4gbW9kaWZ5IGhlYWRlcnMsIGJvZHksIFVSSSwgYW5kIG1ldGhvZAorICAgICAgICAvLy8gICAgIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyBzZW50LgorICAgICAgICAvLy8gPC9wYXJhbT4KKyAgICAgICAgcHVibGljIEdyZW1saW5DbGllbnQoR3JlbWxpblNlcnZlciBncmVtbGluU2VydmVyLCBJTWVzc2FnZVNlcmlhbGl6ZXI/IHJlcXVlc3RTZXJpYWxpemVyLAorICAgICAgICAgICAgSU1lc3NhZ2VTZXJpYWxpemVyIHJlc3BvbnNlU2VyaWFsaXplciwKKyAgICAgICAgICAgIENvbm5lY3Rpb25TZXR0aW5ncz8gY29ubmVjdGlvblNldHRpbmdzID0gbnVsbCwKKyAgICAgICAgICAgIElMb2dnZXJGYWN0b3J5PyBsb2dnZXJGYWN0b3J5ID0gbnVsbCwKKyAgICAgICAgICAgIElSZWFkT25seUxpc3Q8RnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+Pj8gaW50ZXJjZXB0b3JzID0gbnVsbCkKICAgICAgICAgewotICAgICAgICAgICAgSU1lc3NhZ2VTZXJpYWxpemVyIG1lc3NhZ2VTZXJpYWxpemVyOwotICAgICAgICAgICAgc3dpdGNoIChtaW1lVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNlcmlhbGl6YXRpb25Ub2tlbnMuR3JhcGhTT04zTWltZVR5cGU6Ci0gICAgICAgICAgICAgICAgICAgIFZlcmlmeUdyYXBoU09OQXJndW1lbnRUeXBlRm9yTWltZVR5cGU8R3JhcGhTT04zUmVhZGVyPihncmFwaFNPTlJlYWRlciwgbmFtZW9mKGdyYXBoU09OUmVhZGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgVmVyaWZ5R3JhcGhTT05Bcmd1bWVudFR5cGVGb3JNaW1lVHlwZTxHcmFwaFNPTjNXcml0ZXI+KGdyYXBoU09OV3JpdGVyLCBuYW1lb2YoZ3JhcGhTT05Xcml0ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlU2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigKLSAgICAgICAgICAgICAgICAgICAgICAgIChHcmFwaFNPTjNSZWFkZXI/KSBncmFwaFNPTlJlYWRlciA/PyBuZXcgR3JhcGhTT04zUmVhZGVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAoR3JhcGhTT04zV3JpdGVyPykgZ3JhcGhTT05Xcml0ZXIgPz8gbmV3IEdyYXBoU09OM1dyaXRlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTZXJpYWxpemF0aW9uVG9rZW5zLkdyYXBoU09OMk1pbWVUeXBlOgotICAgICAgICAgICAgICAgICAgICBWZXJpZnlHcmFwaFNPTkFyZ3VtZW50VHlwZUZvck1pbWVUeXBlPEdyYXBoU09OMlJlYWRlcj4oZ3JhcGhTT05SZWFkZXIsIG5hbWVvZihncmFwaFNPTlJlYWRlciksCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIFZlcmlmeUdyYXBoU09OQXJndW1lbnRUeXBlRm9yTWltZVR5cGU8R3JhcGhTT04yV3JpdGVyPihncmFwaFNPTldyaXRlciwgbmFtZW9mKGdyYXBoU09OV3JpdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT04yTWVzc2FnZVNlcmlhbGl6ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAoR3JhcGhTT04yUmVhZGVyPykgZ3JhcGhTT05SZWFkZXIgPz8gbmV3IEdyYXBoU09OMlJlYWRlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgKEdyYXBoU09OMldyaXRlcj8pIGdyYXBoU09OV3JpdGVyID8/IG5ldyBHcmFwaFNPTjJXcml0ZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbihuYW1lb2YobWltZVR5cGUpLCAkInttaW1lVHlwZX0gbm90IHN1cHBvcnRlZCIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29ubmVjdGlvblNldHRpbmdzID8/PSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICBMb2dnZXJGYWN0b3J5ID0gbG9nZ2VyRmFjdG9yeSA/PyBOdWxsTG9nZ2VyRmFjdG9yeS5JbnN0YW5jZTsKIAotICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb25GYWN0b3J5ID0KLSAgICAgICAgICAgICAgICBuZXcgQ29ubmVjdGlvbkZhY3RvcnkoZ3JlbWxpblNlcnZlciwgbWVzc2FnZVNlcmlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgIG5ldyBXZWJTb2NrZXRTZXR0aW5ncwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXZWJTb2NrZXRDb25maWd1cmF0aW9uQ2FsbGJhY2sgPSB3ZWJTb2NrZXRDb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlVXNlckFnZW50T25Db25uZWN0ID0gY29ubmVjdGlvblBvb2xTZXR0aW5ncz8uRW5hYmxlVXNlckFnZW50T25Db25uZWN0ID8/IENvbm5lY3Rpb25Qb29sU2V0dGluZ3MuRGVmYXVsdEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdAotICAgICAgICAgICAgICAgICAgICB9LCBzZXNzaW9uSWQpOworICAgICAgICAgICAgX2Nvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBncmVtbGluU2VydmVyLlVyaSwKKyAgICAgICAgICAgICAgICByZXF1ZXN0U2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICByZXNwb25zZVNlcmlhbGl6ZXIsCisgICAgICAgICAgICAgICAgY29ubmVjdGlvblNldHRpbmdzLAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CiAKLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBvbmUgY29ubmVjdGlvbiBpbiBwb29sIGFzIHNlc3Npb24gbW9kZQotICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShzZXNzaW9uSWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbFNldHRpbmdzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvb2xTZXR0aW5ncy5Qb29sU2l6ZSAhPSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbihuYW1lb2YoY29ubmVjdGlvblBvb2xTZXR0aW5ncyksICJQb29sU2l6ZSBtdXN0IGJlIDEgaW4gc2Vzc2lvbiBtb2RlISIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25Qb29sU2V0dGluZ3Mge1Bvb2xTaXplID0gMX07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMb2dnZXJGYWN0b3J5ID0gTnVsbExvZ2dlckZhY3RvcnkuSW5zdGFuY2U7Ci0KLSAgICAgICAgICAgIF9jb25uZWN0aW9uUG9vbCA9IG5ldyBDb25uZWN0aW9uUG9vbChjb25uZWN0aW9uRmFjdG9yeSwKLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzID8/IG5ldyBDb25uZWN0aW9uUG9vbFNldHRpbmdzKCksIExvZ2dlckZhY3RvcnkuQ3JlYXRlTG9nZ2VyPENvbm5lY3Rpb25Qb29sPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgVmVyaWZ5R3JhcGhTT05Bcmd1bWVudFR5cGVGb3JNaW1lVHlwZTxUPihvYmplY3Q/IGFyZ3VtZW50LCBzdHJpbmcgYXJndW1lbnROYW1lLAotICAgICAgICAgICAgc3RyaW5nIG1pbWVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnQgIT0gbnVsbCAmJiBhcmd1bWVudCBpcyBub3QgVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICQie2FyZ3VtZW50TmFtZX0gaXMgbm90IGEge3R5cGVvZihUKS5OYW1lfSBidXQgdGhlIG1pbWUgdHlwZSBpczoge21pbWVUeXBlfSIsIGFyZ3VtZW50TmFtZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5DcmVhdGVMb2dnZXI8R3JlbWxpbkNsaWVudD4oKTsKKyAgICAgICAgICAgIGxvZ2dlci5Jbml0aWFsaXplZEh0dHBDb25uZWN0aW9uKGdyZW1saW5TZXJ2ZXIuVXJpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmVtbGluQ2xpZW50IiAvPiBjbGFzcyBmb3IgdGhlIHNwZWNpZmllZCBHcmVtbGluIFNlcnZlci4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmVtbGluQ2xpZW50IiAvPiBjbGFzcyB3aXRoIGEgc2luZ2xlCisgICAgICAgIC8vLyAgICAgc2VyaWFsaXplciB1c2VkIGZvciBib3RoIHJlcXVlc3Qgc2VyaWFsaXphdGlvbiBhbmQgcmVzcG9uc2UgZGVzZXJpYWxpemF0aW9uLgorICAgICAgICAvLy8gICAgIFRoaXMgaXMgdGhlIGJhY2t3YXJkLWNvbXBhdGlibGUgY29udmVuaWVuY2UgY29uc3RydWN0b3IuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZ3JlbWxpblNlcnZlciI+VGhlIDxzZWUgY3JlZj0iR3JlbWxpblNlcnZlciIgLz4gdGhlIHJlcXVlc3RzIHNob3VsZCBiZSBzZW50IHRvLjwvcGFyYW0+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVzc2FnZVNlcmlhbGl6ZXIiPgotICAgICAgICAvLy8gICAgIEEgPHNlZSBjcmVmPSJJTWVzc2FnZVNlcmlhbGl6ZXIiIC8+IGluc3RhbmNlIHRvIHNlcmlhbGl6ZSBtZXNzYWdlcyBzZW50IHRvIGFuZCByZWNlaXZlZAotICAgICAgICAvLy8gICAgIGZyb20gdGhlIHNlcnZlci4KKyAgICAgICAgLy8vICAgICBBIDxzZWUgY3JlZj0iSU1lc3NhZ2VTZXJpYWxpemVyIiAvPiBpbnN0YW5jZSB1c2VkIGZvciBib3RoIHJlcXVlc3Qgc2VyaWFsaXphdGlvbiBhbmQKKyAgICAgICAgLy8vICAgICByZXNwb25zZSBkZXNlcmlhbGl6YXRpb24uIERlZmF1bHRzIHRvIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIiLz4uCiAgICAgICAgIC8vLyA8L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb25Qb29sU2V0dGluZ3MiPlRoZSA8c2VlIGNyZWY9IkNvbm5lY3Rpb25Qb29sU2V0dGluZ3MiIC8+IGZvciB0aGUgY29ubmVjdGlvbiBwb29sLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id2ViU29ja2V0Q29uZmlndXJhdGlvbiI+Ci0gICAgICAgIC8vLyAgICAgQSBkZWxlZ2F0ZSB0aGF0IHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSA8c2VlIGNyZWY9IkNsaWVudFdlYlNvY2tldE9wdGlvbnMiIC8+Ci0gICAgICAgIC8vLyAgICAgb2JqZWN0IHVzZWQgdG8gY29uZmlndXJlIFdlYlNvY2tldCBjb25uZWN0aW9ucy4KLSAgICAgICAgLy8vIDwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic2Vzc2lvbklkIj5UaGUgc2Vzc2lvbiBJZCBpZiBHcmVtbGluIENsaWVudCBpbiBzZXNzaW9uIG1vZGUsIGRlZmF1bHRzIHRvIG51bGwgYXMgc2Vzc2lvbi1sZXNzIENsaWVudC48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRpc2FibGVDb21wcmVzc2lvbiI+Ci0gICAgICAgIC8vLyAgICAgV2hldGhlciB0byBkaXNhYmxlIGNvbXByZXNzaW9uLiBDb21wcmVzc2lvbiBpcyBvbmx5IHN1cHBvcnRlZCBzaW5jZSAuTkVUIDYuCi0gICAgICAgIC8vLyAgICAgVGhlcmUgaXQgaXMgYWxzbyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIC8vLyAKLSAgICAgICAgLy8vICAgICBOb3RlIHRoYXQgY29tcHJlc3Npb24gbWlnaHQgbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHN1c2NlcHRpYmxlIHRvIGF0dGFja3MgbGlrZSBDUklNRS9CUkVBQ0guIENvbXByZXNzaW9uCi0gICAgICAgIC8vLyAgICAgc2hvdWxkIHRoZXJlZm9yZSBiZSB0dXJuZWQgb2ZmIGlmIHlvdXIgYXBwbGljYXRpb24gc2VuZHMgc2Vuc2l0aXZlIGRhdGEgdG8gdGhlIHNlcnZlciBhcyB3ZWxsIGFzIGRhdGEKLSAgICAgICAgLy8vICAgICB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGJlIGNvbnRyb2xsZWQgYnkgYW4gdW50cnVzdGVkIHVzZXIuCi0gICAgICAgIC8vLyA8L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvbm5lY3Rpb25TZXR0aW5ncyI+VGhlIDxzZWUgY3JlZj0iQ29ubmVjdGlvblNldHRpbmdzIiAvPiBmb3IgdGhlIEhUVFAgY29ubmVjdGlvbi48L3BhcmFtPgogICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImxvZ2dlckZhY3RvcnkiPkEgZmFjdG9yeSB0byBjcmVhdGUgbG9nZ2Vycy4gSWYgbm90IHByb3ZpZGVkLCB0aGVuIG5vdGhpbmcgd2lsbCBiZSBsb2dnZWQuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJpbnRlcmNlcHRvcnMiPgorICAgICAgICAvLy8gICAgIEFuIG9wdGlvbmFsIGxpc3Qgb2YgcmVxdWVzdCBpbnRlcmNlcHRvcnMuCisgICAgICAgIC8vLyA8L3BhcmFtPgogICAgICAgICBwdWJsaWMgR3JlbWxpbkNsaWVudChHcmVtbGluU2VydmVyIGdyZW1saW5TZXJ2ZXIsIElNZXNzYWdlU2VyaWFsaXplcj8gbWVzc2FnZVNlcmlhbGl6ZXIgPSBudWxsLAotICAgICAgICAgICAgQ29ubmVjdGlvblBvb2xTZXR0aW5ncz8gY29ubmVjdGlvblBvb2xTZXR0aW5ncyA9IG51bGwsCi0gICAgICAgICAgICBBY3Rpb248Q2xpZW50V2ViU29ja2V0T3B0aW9ucz4/IHdlYlNvY2tldENvbmZpZ3VyYXRpb24gPSBudWxsLCBzdHJpbmc/IHNlc3Npb25JZCA9IG51bGwsCi0gICAgICAgICAgICBib29sIGRpc2FibGVDb21wcmVzc2lvbiA9IGZhbHNlLCBJTG9nZ2VyRmFjdG9yeT8gbG9nZ2VyRmFjdG9yeSA9IG51bGwpCisgICAgICAgICAgICBDb25uZWN0aW9uU2V0dGluZ3M/IGNvbm5lY3Rpb25TZXR0aW5ncyA9IG51bGwsCisgICAgICAgICAgICBJTG9nZ2VyRmFjdG9yeT8gbG9nZ2VyRmFjdG9yeSA9IG51bGwsCisgICAgICAgICAgICBJUmVhZE9ubHlMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4/IGludGVyY2VwdG9ycyA9IG51bGwpCisgICAgICAgICAgICA6IHRoaXMoZ3JlbWxpblNlcnZlciwKKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2VTZXJpYWxpemVyID8/IG5ldyBHcmFwaEJpbmFyeTRNZXNzYWdlU2VyaWFsaXplcigpLAorICAgICAgICAgICAgICAgICAgbWVzc2FnZVNlcmlhbGl6ZXIgPz8gbmV3IEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyKCksCisgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uU2V0dGluZ3MsIGxvZ2dlckZhY3RvcnksIGludGVyY2VwdG9ycykKICAgICAgICAgewotICAgICAgICAgICAgbWVzc2FnZVNlcmlhbGl6ZXIgPz89IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyKCk7Ci0gICAgICAgICAgICB2YXIgd2ViU29ja2V0U2V0dGluZ3MgPSBuZXcgV2ViU29ja2V0U2V0dGluZ3MKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBXZWJTb2NrZXRDb25maWd1cmF0aW9uQ2FsbGJhY2sgPSB3ZWJTb2NrZXRDb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgIEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IGNvbm5lY3Rpb25Qb29sU2V0dGluZ3M/LkVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA/PyBDb25uZWN0aW9uUG9vbFNldHRpbmdzLkRlZmF1bHRFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QKLSNpZiBORVQ2XzBfT1JfR1JFQVRFUgotICAgICAgICAgICAgICAgICwgVXNlQ29tcHJlc3Npb24gPSAhZGlzYWJsZUNvbXByZXNzaW9uCi0jZW5kaWYKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbkZhY3RvcnkgPQotICAgICAgICAgICAgICAgIG5ldyBDb25uZWN0aW9uRmFjdG9yeShncmVtbGluU2VydmVyLCBtZXNzYWdlU2VyaWFsaXplciwgd2ViU29ja2V0U2V0dGluZ3MsIHNlc3Npb25JZCk7Ci0KLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBvbmUgY29ubmVjdGlvbiBpbiBwb29sIGFzIHNlc3Npb24gbW9kZQotICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShzZXNzaW9uSWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbFNldHRpbmdzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvb2xTZXR0aW5ncy5Qb29sU2l6ZSAhPSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbihuYW1lb2YoY29ubmVjdGlvblBvb2xTZXR0aW5ncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBvb2xTaXplIG11c3QgYmUgMSBpbiBzZXNzaW9uIG1vZGUhIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyB7UG9vbFNpemUgPSAxfTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExvZ2dlckZhY3RvcnkgPSBsb2dnZXJGYWN0b3J5ID8/IE51bGxMb2dnZXJGYWN0b3J5Lkluc3RhbmNlOwotCi0gICAgICAgICAgICBfY29ubmVjdGlvblBvb2wgPSBuZXcgQ29ubmVjdGlvblBvb2woY29ubmVjdGlvbkZhY3RvcnksCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncyA/PyBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncygpLCBMb2dnZXJGYWN0b3J5LkNyZWF0ZUxvZ2dlcjxDb25uZWN0aW9uUG9vbD4oKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgbnVtYmVyIG9mIG9wZW4gY29ubmVjdGlvbnMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBpbnQgTnJDb25uZWN0aW9ucyA9PiBfY29ubmVjdGlvblBvb2wuTnJDb25uZWN0aW9uczsKLQogICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8UmVzdWx0U2V0PFQ+PiBTdWJtaXRBc3luYzxUPihSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXN1bHRTZXQ8VD4+IFN1Ym1pdEFzeW5jPFQ+KFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQogICAgICAgICB7Ci0gICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IF9jb25uZWN0aW9uUG9vbC5HZXRBdmFpbGFibGVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxUPihyZXF1ZXN0TWVzc2FnZSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCBfY29ubmVjdGlvbi5TdWJtaXRBc3luYzxUPihyZXF1ZXN0TWVzc2FnZSwgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKICAgICAgICAgfQogCiAgICAgICAgICNyZWdpb24gSURpc3Bvc2FibGUgU3VwcG9ydApAQCAtMjM4LDExICsxMzcsMTEgQEAKICAgICAgICAgICAgIGlmICghX2Rpc3Bvc2VkKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChkaXNwb3NpbmcpCi0gICAgICAgICAgICAgICAgICAgIF9jb25uZWN0aW9uUG9vbD8uRGlzcG9zZSgpOworICAgICAgICAgICAgICAgICAgICBfY29ubmVjdGlvbj8uRGlzcG9zZSgpOwogICAgICAgICAgICAgICAgIF9kaXNwb3NlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAjZW5kcmVnaW9uCiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvR3JlbWxpbkNsaWVudEV4dGVuc2lvbnMuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0dyZW1saW5DbGllbnRFeHRlbnNpb25zLmNzCmluZGV4IDQwY2RkNzcuLjE3NmRlZjcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvR3JlbWxpbkNsaWVudEV4dGVuc2lvbnMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9HcmVtbGluQ2xpZW50RXh0ZW5zaW9ucy5jcwpAQCAtMTQxLDkgKzE0MSw5IEBACiAgICAgICAgICAgICBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0Pj8gYmluZGluZ3MgPSBudWxsLAogICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbXNnQnVpbGRlciA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKFRva2Vucy5PcHNFdmFsKS5BZGRBcmd1bWVudChUb2tlbnMuQXJnc0dyZW1saW4sIHJlcXVlc3RTY3JpcHQpOworICAgICAgICAgICAgdmFyIG1zZ0J1aWxkZXIgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZChyZXF1ZXN0U2NyaXB0KTsKICAgICAgICAgICAgIGlmIChiaW5kaW5ncyAhPSBudWxsKQotICAgICAgICAgICAgICAgIG1zZ0J1aWxkZXIuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NCaW5kaW5ncywgYmluZGluZ3MpOworICAgICAgICAgICAgICAgIG1zZ0J1aWxkZXIuQWRkQmluZGluZ3MoYmluZGluZ3MpOwogICAgICAgICAgICAgdmFyIG1zZyA9IG1zZ0J1aWxkZXIuQ3JlYXRlKCk7CiAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRBc3luYzxUPihtc2csIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvR3JlbWxpblNlcnZlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvR3JlbWxpblNlcnZlci5jcwppbmRleCBmOGNmOGJmLi4wZDhhNDFkIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0dyZW1saW5TZXJ2ZXIuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9HcmVtbGluU2VydmVyLmNzCkBAIC0zNiwzNiArMzYsMjIgQEAKICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJob3N0bmFtZSI+VGhlIGhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXIuPC9wYXJhbT4KICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJwb3J0Ij5UaGUgcG9ydCBvbiB3aGljaCBHcmVtbGluIFNlcnZlciBjYW4gYmUgcmVhY2hlZC48L3BhcmFtPgogICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImVuYWJsZVNzbCI+U3BlY2lmaWVzIHdoZXRoZXIgU1NMIHNob3VsZCBiZSBlbmFibGVkLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSB1c2VybmFtZSB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGFzc3dvcmQiPlRoZSBwYXNzd29yZCB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGF0aCI+VGhlIHBhdGggdG8gdGhlIEdyZW1saW4gZW5kcG9pbnQgb24gdGhlIHNlcnZlci48L3BhcmFtPgogICAgICAgICBwdWJsaWMgR3JlbWxpblNlcnZlcihzdHJpbmcgaG9zdG5hbWUgPSAibG9jYWxob3N0IiwgaW50IHBvcnQgPSA4MTgyLCBib29sIGVuYWJsZVNzbCA9IGZhbHNlLAotICAgICAgICAgICAgc3RyaW5nPyB1c2VybmFtZSA9IG51bGwsIHN0cmluZz8gcGFzc3dvcmQgPSBudWxsKQorICAgICAgICAgICAgc3RyaW5nIHBhdGggPSAiL2dyZW1saW4iKQogICAgICAgICB7Ci0gICAgICAgICAgICBVcmkgPSBDcmVhdGVVcmkoaG9zdG5hbWUsIHBvcnQsIGVuYWJsZVNzbCk7Ci0gICAgICAgICAgICBVc2VybmFtZSA9IHVzZXJuYW1lOwotICAgICAgICAgICAgUGFzc3dvcmQgPSBwYXNzd29yZDsKKyAgICAgICAgICAgIFVyaSA9IENyZWF0ZVVyaShob3N0bmFtZSwgcG9ydCwgZW5hYmxlU3NsLCBwYXRoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBHZXRzIHRoZSBVUkkgb2YgdGhlIEdyZW1saW4gU2VydmVyLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHZhbHVlPlRoZSBXZWJTb2NrZXQgPHNlZSBjcmVmPSJTeXN0ZW0uVXJpIiAvPiB0aGF0IHRoZSBHcmVtbGluIFNlcnZlciByZXNwb25kcyB0by48L3ZhbHVlPgogICAgICAgICBwdWJsaWMgVXJpIFVyaSB7IGdldDsgfQogCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSB1c2VybmFtZSB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nPyBVc2VybmFtZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSBwYXNzd29yZCB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nPyBQYXNzd29yZCB7IGdldDsgfQotCi0gICAgICAgIHByaXZhdGUgVXJpIENyZWF0ZVVyaShzdHJpbmcgaG9zdG5hbWUsIGludCBwb3J0LCBib29sIGVuYWJsZVNzbCkKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgVXJpIENyZWF0ZVVyaShzdHJpbmcgaG9zdG5hbWUsIGludCBwb3J0LCBib29sIGVuYWJsZVNzbCwgc3RyaW5nIHBhdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzY2hlbWUgPSBlbmFibGVTc2wgPyAid3NzIiA6ICJ3cyI7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFVyaSgkIntzY2hlbWV9Oi8ve2hvc3RuYW1lfTp7cG9ydH0vZ3JlbWxpbiIpOworICAgICAgICAgICAgdmFyIHNjaGVtZSA9IGVuYWJsZVNzbCA/ICJodHRwcyIgOiAiaHR0cCI7CisgICAgICAgICAgICByZXR1cm4gbmV3IFVyaSgkIntzY2hlbWV9Oi8ve2hvc3RuYW1lfTp7cG9ydH17cGF0aH0iKTsKICAgICAgICAgfQogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0h0dHBSZXF1ZXN0Q29udGV4dC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSHR0cFJlcXVlc3RDb250ZXh0LmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYzE3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0h0dHBSZXF1ZXN0Q29udGV4dC5jcwpAQCAtMCwwICsxLDkzIEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeTsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gICAgIE11dGFibGUgSFRUUCByZXF1ZXN0IGNvbnRleHQgcGFzc2VkIHRvIHJlcXVlc3QgaW50ZXJjZXB0b3JzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIEh0dHBSZXF1ZXN0Q29udGV4dAorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB0aGUgSFRUUCBtZXRob2QgKGUuZy4gIlBPU1QiKS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0cmluZyBNZXRob2QgeyBnZXQ7IHNldDsgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgdGhlIHJlcXVlc3QgVVJJLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgVXJpIFVyaSB7IGdldDsgc2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIEhUVFAgaGVhZGVycy4gSW50ZXJjZXB0b3JzIG1heSBhZGQsIG1vZGlmeSwgb3IgcmVtb3ZlIGVudHJpZXMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPiBIZWFkZXJzIHsgZ2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB0aGUgcmVxdWVzdCBib2R5LiBUaGlzIGlzIDxjPmJ5dGVbXTwvYz4gd2hlbiBzZXJpYWxpemF0aW9uIGhhcyBvY2N1cnJlZAorICAgICAgICAvLy8gICAgIChkZWZhdWx0IHBhdGgpLCBvciA8Yz5SZXF1ZXN0TWVzc2FnZTwvYz4gd2hlbiBzZXJpYWxpemF0aW9uIGlzIGRlZmVycmVkIHRvIGludGVyY2VwdG9ycworICAgICAgICAvLy8gICAgICg8Yz5yZXF1ZXN0U2VyaWFsaXplciA9IG51bGw8L2M+KS4gSW50ZXJjZXB0b3JzIG1heSBhbHNvIHNldCB0aGlzIHRvIGFuCisgICAgICAgIC8vLyAgICAgPHNlZSBjcmVmPSJTeXN0ZW0uTmV0Lkh0dHAuSHR0cENvbnRlbnQiLz4gaW5zdGFuY2UgZm9yIGZ1bGwgY29udHJvbCBvdmVyIHRoZSB3aXJlIGZvcm1hdC4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIG9iamVjdCBCb2R5IHsgZ2V0OyBzZXQ7IH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iSHR0cFJlcXVlc3RDb250ZXh0IiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJtZXRob2QiPlRoZSBIVFRQIG1ldGhvZC48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InVyaSI+VGhlIHJlcXVlc3QgVVJJLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaGVhZGVycyI+VGhlIEhUVFAgaGVhZGVycy48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlRoZSByZXF1ZXN0IGJvZHkuIFR5cGljYWxseSA8Yz5ieXRlW108L2M+IChwb3N0LXNlcmlhbGl6YXRpb24pIG9yCisgICAgICAgIC8vLyAgICAgPGM+UmVxdWVzdE1lc3NhZ2U8L2M+IChwcmUtc2VyaWFsaXphdGlvbikuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIEh0dHBSZXF1ZXN0Q29udGV4dChzdHJpbmcgbWV0aG9kLCBVcmkgdXJpLCBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPiBoZWFkZXJzLCBvYmplY3QgYm9keSkKKyAgICAgICAgeworICAgICAgICAgICAgTWV0aG9kID0gbWV0aG9kID8/IHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKG1ldGhvZCkpOworICAgICAgICAgICAgVXJpID0gdXJpID8/IHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKHVyaSkpOworICAgICAgICAgICAgSGVhZGVycyA9IGhlYWRlcnMgPz8gdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2YoaGVhZGVycykpOworICAgICAgICAgICAgQm9keSA9IGJvZHk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgUmV0dXJucyB0aGUgbG93ZXJjYXNlIGhleC1lbmNvZGVkIFNIQS0yNTYgZGlnZXN0IG9mIHRoZSBib2R5LgorICAgICAgICAvLy8gICAgIFRocm93cyA8c2VlIGNyZWY9IkludmFsaWRPcGVyYXRpb25FeGNlcHRpb24iLz4gaWYgPHNlZSBjcmVmPSJCb2R5Ii8+IGlzIG5vdCA8Yz5ieXRlW108L2M+LAorICAgICAgICAvLy8gICAgIHdoaWNoIGluZGljYXRlcyB0aGF0IHNlcmlhbGl6YXRpb24gaGFzIG5vdCB5ZXQgb2NjdXJyZWQuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBzdHJpbmcgR2V0UGF5bG9hZEhhc2goKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoQm9keSBpcyBub3QgYnl0ZVtdIGJ5dGVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGNvbXB1dGUgcGF5bG9hZCBoYXNoIGJlZm9yZSBzZXJpYWxpemF0aW9uLiAiICsKKyAgICAgICAgICAgICAgICAgICAgIkJvZHkgbXVzdCBiZSBieXRlW10gYnV0IGlzICIgKworICAgICAgICAgICAgICAgICAgICAoQm9keT8uR2V0VHlwZSgpLk5hbWUgPz8gIm51bGwiKSArICIuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2luZyB2YXIgc2hhMjU2ID0gU0hBMjU2LkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIGhhc2ggPSBzaGEyNTYuQ29tcHV0ZUhhc2goYnl0ZXMpOworICAgICAgICAgICAgcmV0dXJuIEJpdENvbnZlcnRlci5Ub1N0cmluZyhoYXNoKS5SZXBsYWNlKCItIiwgIiIpLlRvTG93ZXJJbnZhcmlhbnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSUNsaWVudFdlYlNvY2tldC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSUNsaWVudFdlYlNvY2tldC5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxNTBhNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0lDbGllbnRXZWJTb2NrZXQuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uTmV0LldlYlNvY2tldHM7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgotewotICAgIGludGVybmFsIGludGVyZmFjZSBJQ2xpZW50V2ViU29ja2V0IDogSURpc3Bvc2FibGUKLSAgICB7Ci0gICAgICAgIFdlYlNvY2tldFN0YXRlIFN0YXRlIHsgZ2V0OyB9Ci0gICAgICAgIENsaWVudFdlYlNvY2tldE9wdGlvbnMgT3B0aW9ucyB7IGdldDsgfQotICAgICAgICBUYXNrIENsb3NlQXN5bmMoV2ViU29ja2V0Q2xvc2VTdGF0dXMgY2xvc2VTdGF0dXMsIHN0cmluZyBzdGF0dXNEZXNjcmlwdGlvbiwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pOwotICAgICAgICBUYXNrIENvbm5lY3RBc3luYyhVcmkgdXJpLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbik7Ci0gICAgICAgIFRhc2s8V2ViU29ja2V0UmVjZWl2ZVJlc3VsdD4gUmVjZWl2ZUFzeW5jKEFycmF5U2VnbWVudDxieXRlPiBidWZmZXIsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKTsKLSAgICAgICAgVGFzayBTZW5kQXN5bmMoQXJyYXlTZWdtZW50PGJ5dGU+IGJ1ZmZlciwgV2ViU29ja2V0TWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUsIGJvb2wgZW5kT2ZNZXNzYWdlLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbik7Ci0jaWYgTkVUNl8wX09SX0dSRUFURVIKLSAgICAgICAgVmFsdWVUYXNrIFNlbmRBc3luYyhBcnJheVNlZ21lbnQ8Ynl0ZT4gYnVmZmVyLCBXZWJTb2NrZXRNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgV2ViU29ja2V0TWVzc2FnZUZsYWdzIG1lc3NhZ2VGbGFncywgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pOwotI2VuZGlmCi0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSUNvbm5lY3Rpb24uY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0lDb25uZWN0aW9uLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjc5MTc2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSUNvbm5lY3Rpb24uY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgotewotICAgIGludGVybmFsIGludGVyZmFjZSBJQ29ubmVjdGlvbiA6IElEaXNwb3NhYmxlCi0gICAgewotICAgICAgICBUYXNrIENvbm5lY3RBc3luYyhDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbik7Ci0gICAgICAgIFRhc2s8UmVzdWx0U2V0PFQ+PiBTdWJtaXRBc3luYzxUPihSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pOwotICAgICAgICBpbnQgTnJSZXF1ZXN0c0luRmxpZ2h0IHsgZ2V0OyB9Ci0gICAgICAgIGJvb2wgSXNPcGVuIHsgZ2V0OyB9Ci0gICAgICAgIFRhc2sgQ2xvc2VBc3luYygpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0lDb25uZWN0aW9uRmFjdG9yeS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSUNvbm5lY3Rpb25GYWN0b3J5LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmZhNDZiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvSUNvbm5lY3Rpb25GYWN0b3J5LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotI3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgotewotICAgIGludGVybmFsIGludGVyZmFjZSBJQ29ubmVjdGlvbkZhY3RvcnkKLSAgICB7Ci0gICAgICAgIElDb25uZWN0aW9uIENyZWF0ZUNvbm5lY3Rpb24oKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9JTWVzc2FnZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0lNZXNzYWdlU2VyaWFsaXplci5jcwppbmRleCA1YTAwMzJjLi44MWZiNWZkIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0lNZXNzYWdlU2VyaWFsaXplci5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0lNZXNzYWdlU2VyaWFsaXplci5jcwpAQCAtMzQsNiArMzQsMTMgQEAKICAgICBwdWJsaWMgaW50ZXJmYWNlIElNZXNzYWdlU2VyaWFsaXplcgogICAgIHsKICAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIE1JTUUgdHlwZSBwcm9kdWNlZCBieSB0aGlzIHNlcmlhbGl6ZXIgKGUuZy4KKyAgICAgICAgLy8vICAgICA8Yz4iYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAiPC9jPikuIFVzZWQgYnkgdGhlIGRyaXZlciB0byBzZXQKKyAgICAgICAgLy8vICAgICA8Yz5Db250ZW50LVR5cGU8L2M+IGFuZCA8Yz5BY2NlcHQ8L2M+IGhlYWRlcnMgYXV0b21hdGljYWxseS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgc3RyaW5nIE1pbWVUeXBlIHsgZ2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIFNlcmlhbGl6ZXMgYSA8c2VlIGNyZWY9IlJlcXVlc3RNZXNzYWdlIi8+LgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlcXVlc3RNZXNzYWdlIj5UaGUgPHNlZSBjcmVmPSJSZXF1ZXN0TWVzc2FnZSIvPiB0byBzZXJpYWxpemUuPC9wYXJhbT4KQEAgLTQ4LDcgKzU1LDcgQEAKICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJtZXNzYWdlIj5UaGUgc2VyaWFsaXplZCBtZXNzYWdlIHRvIGRlc2VyaWFsaXplLjwvcGFyYW0+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgogICAgICAgICAvLy8gPHJldHVybnM+VGhlIGRlc2VyaWFsaXplZCA8c2VlIGNyZWY9IlJlc3BvbnNlTWVzc2FnZXtUfSIvPi48L3JldHVybnM+Ci0gICAgICAgIFRhc2s8UmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4/PiBEZXNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhieXRlW10gbWVzc2FnZSwKKyAgICAgICAgVGFzazxSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+Pj4gRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMoYnl0ZVtdIG1lc3NhZ2UsCiAgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL0xvZy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTG9nLmNzCmluZGV4IGNhNjUxY2QuLmE5MDA0OWQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTG9nLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTG9nLmNzCkBAIC0yOSwxOCArMjksMTAgQEAKIHsKICAgICBpbnRlcm5hbCBzdGF0aWMgcGFydGlhbCBjbGFzcyBMb2cKICAgICB7Ci0gICAgICAgIFtMb2dnZXJNZXNzYWdlKDIwMDAwLCBMb2dMZXZlbC5JbmZvcm1hdGlvbiwgIkNyZWF0aW5nIHtuckNvbm5lY3Rpb25zfSBuZXcgY29ubmVjdGlvbnMiKV0KLSAgICAgICAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIHZvaWQgRmlsbGluZ1Bvb2wodGhpcyBJTG9nZ2VyIGxvZ2dlciwgaW50IG5yQ29ubmVjdGlvbnMpOwotCi0gICAgICAgIFtMb2dnZXJNZXNzYWdlKDIwMDAxLCBMb2dMZXZlbC5XYXJuaW5nLAotICAgICAgICAgICAgIkNvdWxkIG5vdCBnZXQgYSBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2wuIFdpbGwgdHJ5IGFnYWluLiBSZXRyeSB7cmV0cnlDb3VudH0gb2Yge21heFJldHJpZXN9IildCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgcGFydGlhbCB2b2lkIENvdWxkTm90R2V0Q29ubmVjdGlvbkZyb21Qb29sKHRoaXMgSUxvZ2dlciBsb2dnZXIsIGludCByZXRyeUNvdW50LCBpbnQgbWF4UmV0cmllcyk7Ci0KLSAgICAgICAgW0xvZ2dlck1lc3NhZ2UoMjAwMDIsIExvZ0xldmVsLkluZm9ybWF0aW9uLAotICAgICAgICAgICAgIkEgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiBSZW1vdmluZyBpdCBmcm9tIHRoZSBwb29sIHNvIGl0IGNhbiBiZSByZXBsYWNlZC4iKV0KLSAgICAgICAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIHZvaWQgUmVtb3ZpbmdDbG9zZWRDb25uZWN0aW9uRnJvbVBvb2wodGhpcyBJTG9nZ2VyIGxvZ2dlcik7CisgICAgICAgIFtMb2dnZXJNZXNzYWdlKDIwMDAwLCBMb2dMZXZlbC5JbmZvcm1hdGlvbiwgIkluaXRpYWxpemVkIEhUVFAgY29ubmVjdGlvbnMgdG8ge3VyaX0iKV0KKyAgICAgICAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIHZvaWQgSW5pdGlhbGl6ZWRIdHRwQ29ubmVjdGlvbih0aGlzIElMb2dnZXIgbG9nZ2VyLCBVcmkgdXJpKTsKICAgICAgICAgCi0gICAgICAgIFtMb2dnZXJNZXNzYWdlKDIwMDAzLCBMb2dMZXZlbC5EZWJ1ZywgIlN1Ym1pdHRpbmcgQnl0ZWNvZGUge2J5dGVjb2RlfSBmb3IgcmVxdWVzdDoge3JlcXVlc3RJZH0iKV0KLSAgICAgICAgcHVibGljIHN0YXRpYyBwYXJ0aWFsIHZvaWQgU3VibWl0dGluZ0J5dGVjb2RlKHRoaXMgSUxvZ2dlciBsb2dnZXIsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBHdWlkIHJlcXVlc3RJZCk7CisgICAgICAgIFtMb2dnZXJNZXNzYWdlKDIwMDAxLCBMb2dMZXZlbC5EZWJ1ZywgIlN1Ym1pdHRpbmcgR3JlbWxpbkxhbmcge2dyZW1saW5MYW5nfSIpXQorICAgICAgICBwdWJsaWMgc3RhdGljIHBhcnRpYWwgdm9pZCBTdWJtaXR0aW5nR3JlbWxpbkxhbmcodGhpcyBJTG9nZ2VyIGxvZ2dlciwgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcpOwogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL01lc3NhZ2VzL1JlcXVlc3RNZXNzYWdlLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9NZXNzYWdlcy9SZXF1ZXN0TWVzc2FnZS5jcwppbmRleCAwZDFmMjg0Li5mNTk5YTUzIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL01lc3NhZ2VzL1JlcXVlc3RNZXNzYWdlLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTWVzc2FnZXMvUmVxdWVzdE1lc3NhZ2UuY3MKQEAgLTI3LDU1ICsyNywzOCBAQAogbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlcwogewogICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFRoZSBtb2RlbCBmb3IgYSByZXF1ZXN0IG1lc3NhZ2Ugc2VudCB0byB0aGUgc2VydmVyLgorICAgIC8vLyAgICAgVGhlIG1vZGVsIGZvciBhIDQuMCByZXF1ZXN0IG1lc3NhZ2Ugc2VudCB0byB0aGUgc2VydmVyLgogICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgcHVibGljIGNsYXNzIFJlcXVlc3RNZXNzYWdlCiAgICAgewotICAgICAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlKEd1aWQgcmVxdWVzdElkLCBzdHJpbmcgb3BlcmF0aW9uLCBzdHJpbmcgcHJvY2Vzc29yLCBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBhcmd1bWVudHMpCisgICAgICAgIHByaXZhdGUgUmVxdWVzdE1lc3NhZ2Uoc3RyaW5nIGdyZW1saW4sIERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IGZpZWxkcykKICAgICAgICAgewotICAgICAgICAgICAgUmVxdWVzdElkID0gcmVxdWVzdElkOwotICAgICAgICAgICAgT3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgICAgICAgICAgUHJvY2Vzc29yID0gcHJvY2Vzc29yOwotICAgICAgICAgICAgQXJndW1lbnRzID0gYXJndW1lbnRzOworICAgICAgICAgICAgR3JlbWxpbiA9IGdyZW1saW4gPz8gdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2YoZ3JlbWxpbikpOworICAgICAgICAgICAgRmllbGRzID0gZmllbGRzOworICAgICAgICAgICAgaWYgKCFGaWVsZHMuQ29udGFpbnNLZXkoVG9rZW5zLkFyZ3NMYW5ndWFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRmllbGRzW1Rva2Vucy5BcmdzTGFuZ3VhZ2VdID0gImdyZW1saW4tbGFuZyI7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgSUQgb2YgdGhpcyByZXF1ZXN0IG1lc3NhZ2UuCisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgR3JlbWxpbiBxdWVyeSBzdHJpbmcuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8dmFsdWU+QSBVVUlEIHJlcHJlc2VudGluZyB0aGUgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGZvciB0aGUgcmVxdWVzdC48L3ZhbHVlPgotICAgICAgICBwdWJsaWMgR3VpZCBSZXF1ZXN0SWQgeyBnZXQ7IH0KKyAgICAgICAgcHVibGljIHN0cmluZyBHcmVtbGluIHsgZ2V0OyB9CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IHNob3VsZCBiZSBleGVjdXRlZCBieSB0aGUgR3JlbWxpbiBTZXJ2ZXIuCisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgZmllbGRzIG1hcCBjb250YWluaW5nIGxhbmd1YWdlLCBnLCBiaW5kaW5ncywgYW5kIG90aGVyIG9wdGlvbnMuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgIC8vLyAgICAgVGhlIG5hbWUgb2YgdGhlICJvcGVyYXRpb24iIHRvIGV4ZWN1dGUgYmFzZWQgb24gdGhlIGF2YWlsYWJsZSBPcFByb2Nlc3NvciBjb25maWd1cmVkIGluIHRoZSBHcmVtbGluIFNlcnZlci4gVGhpcwotICAgICAgICAvLy8gICAgIGRlZmF1bHRzIHRvICJldmFsIiB3aGljaCBldmFsdWF0ZXMgYSByZXF1ZXN0IHNjcmlwdC4KLSAgICAgICAgLy8vIDwvdmFsdWU+Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgT3BlcmF0aW9uIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIG5hbWUgb2YgdGhlIE9wUHJvY2Vzc29yIHRvIHV0aWxpemUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8dmFsdWU+Ci0gICAgICAgIC8vLyAgICAgVGhlIG5hbWUgb2YgdGhlIE9wUHJvY2Vzc29yIHRvIHV0aWxpemUuIFRoaXMgZGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgdGhlIGRlZmF1bHQKLSAgICAgICAgLy8vICAgICBPcFByb2Nlc3NvciBmb3IgZXZhbHVhdGluZyBzY3JpcHRzLgotICAgICAgICAvLy8gPC92YWx1ZT4KLSAgICAgICAgcHVibGljIHN0cmluZyBQcm9jZXNzb3IgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyBhcmd1bWVudHMgb2YgdGhlIDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UiIC8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gQXJndW1lbnRzIHsgZ2V0OyB9CisgICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBGaWVsZHMgeyBnZXQ7IH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSA8c2VlIGNyZWY9IkJ1aWxkZXIiIC8+IHRvIGJ1aWxkIGEgPHNlZSBjcmVmPSJSZXF1ZXN0TWVzc2FnZSIgLz4uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib3BlcmF0aW9uIj5UaGUgbmFtZSBvZiB0aGUgT3BQcm9jZXNzb3IgdG8gdXRpbGl6ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyZW1saW4iPlRoZSBHcmVtbGluIHF1ZXJ5IHN0cmluZy48L3BhcmFtPgogICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IkJ1aWxkZXIiIC8+IHRvIGJ1aWxkIGEgPHNlZSBjcmVmPSJSZXF1ZXN0TWVzc2FnZSIgLz4uPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgQnVpbGQoc3RyaW5nIG9wZXJhdGlvbikKKyAgICAgICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIEJ1aWxkKHN0cmluZyBncmVtbGluKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXIob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcihncmVtbGluKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KQEAgLTgzLDUwICs2NiwxMzQgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIGNsYXNzIEJ1aWxkZXIKICAgICAgICAgewotICAgICAgICAgICAgcHJpdmF0ZSBjb25zdCBzdHJpbmcgRGVmYXVsdFByb2Nlc3NvciA9ICIiOwotICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBfYXJndW1lbnRzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KCk7Ci0gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmluZyBfb3BlcmF0aW9uOwotICAgICAgICAgICAgcHJpdmF0ZSBzdHJpbmcgX3Byb2Nlc3NvciA9IERlZmF1bHRQcm9jZXNzb3I7Ci0gICAgICAgICAgICBwcml2YXRlIEd1aWQgX3JlcXVlc3RJZCA9IEd1aWQuTmV3R3VpZCgpOworICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdHJpbmcgX2dyZW1saW47CisgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IF9maWVsZHMgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oKTsKKyAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gX2JpbmRpbmdzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KCk7CiAKLSAgICAgICAgICAgIGludGVybmFsIEJ1aWxkZXIoc3RyaW5nIG9wZXJhdGlvbikKKyAgICAgICAgICAgIGludGVybmFsIEJ1aWxkZXIoc3RyaW5nIGdyZW1saW4pCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX29wZXJhdGlvbiA9IG9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBfZ3JlbWxpbiA9IGdyZW1saW47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyAgICAgSWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0IGluIHRoZSBidWlsZGVyIHRoZW4gdGhlIDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UuUHJvY2Vzc29yIiAvPiBkZWZhdWx0cyB0bwotICAgICAgICAgICAgLy8vICAgICB0aGUgc3RhbmRhcmQgb3AgcHJvY2Vzc29yIChlbXB0eSBzdHJpbmcpLgorICAgICAgICAgICAgLy8vICAgICBTZXRzIHRoZSB0cmF2ZXJzYWwgc291cmNlIG5hbWUuCiAgICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJwcm9jZXNzb3IiPlRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzb3IuPC9wYXJhbT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZyI+VGhlIHRyYXZlcnNhbCBzb3VyY2UgbmFtZS48L3BhcmFtPgogICAgICAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSA8c2VlIGNyZWY9IkJ1aWxkZXIiIC8+LjwvcmV0dXJucz4KLSAgICAgICAgICAgIHB1YmxpYyBCdWlsZGVyIFByb2Nlc3NvcihzdHJpbmcgcHJvY2Vzc29yKQorICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgQWRkRyhzdHJpbmcgZykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfcHJvY2Vzc29yID0gcHJvY2Vzc29yOworICAgICAgICAgICAgICAgIF9maWVsZHNbVG9rZW5zLkFyZ3NHXSA9IGc7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyAgICAgT3ZlcnJpZGVzIHRoZSByZXF1ZXN0IGlkZW50aWZpZXIgd2l0aCBhIHNwZWNpZmllZCBvbmUsIG90aGVyd2lzZSB0aGUKLSAgICAgICAgICAgIC8vLyAgICAgPHNlZSBjcmVmPSJCdWlsZGVyIiAvPiB3aWxsIHJhbmRvbWx5IGdlbmVyYXRlIGEgPHNlZSBjcmVmPSJHdWlkIiAvPi4KKyAgICAgICAgICAgIC8vLyAgICAgQWRkcyBhIHNpbmdsZSBiaW5kaW5nIHBhcmFtZXRlci4KICAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlcXVlc3RJZCI+VGhlIHJlcXVlc3QgaWRlbnRpZmllciB0byB1c2UuPC9wYXJhbT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ia2V5Ij5UaGUgYmluZGluZyBrZXkuPC9wYXJhbT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsIj5UaGUgYmluZGluZyB2YWx1ZS48L3BhcmFtPgogICAgICAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSA8c2VlIGNyZWY9IkJ1aWxkZXIiIC8+LjwvcmV0dXJucz4KLSAgICAgICAgICAgIHB1YmxpYyBCdWlsZGVyIE92ZXJyaWRlUmVxdWVzdElkKEd1aWQgcmVxdWVzdElkKQorICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgQWRkQmluZGluZyhzdHJpbmcga2V5LCBvYmplY3QgdmFsKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7CisgICAgICAgICAgICAgICAgX2JpbmRpbmdzW2tleV0gPSB2YWw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyAgICAgQWRkcyBhbmQgYXJndW1lbnQgdG8gdGhlIDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UiIC8+LgorICAgICAgICAgICAgLy8vICAgICBBZGRzIG11bHRpcGxlIGJpbmRpbmcgcGFyYW1ldGVycy4KICAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImtleSI+VGhlIGtleSBvZiB0aGUgYXJndW1lbnQuPC9wYXJhbT4KLSAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQuPC9wYXJhbT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYmluZGluZ3MiPlRoZSBiaW5kaW5ncyB0byBhZGQuPC9wYXJhbT4KICAgICAgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgPHNlZSBjcmVmPSJCdWlsZGVyIiAvPi48L3JldHVybnM+Ci0gICAgICAgICAgICBwdWJsaWMgQnVpbGRlciBBZGRBcmd1bWVudChzdHJpbmcga2V5LCBvYmplY3QgdmFsdWUpCisgICAgICAgICAgICBwdWJsaWMgQnVpbGRlciBBZGRCaW5kaW5ncyhEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBiaW5kaW5ncykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLkFkZChrZXksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIga3ZwIGluIGJpbmRpbmdzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX2JpbmRpbmdzW2t2cC5LZXldID0ga3ZwLlZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAgICAgLy8vICAgICBBZGRzIGEgZmllbGQgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZS4KKyAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImtleSI+VGhlIGZpZWxkIGtleS48L3BhcmFtPgorICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIGZpZWxkIHZhbHVlLjwvcGFyYW0+CisgICAgICAgICAgICAvLy8gPHJldHVybnM+VGhlIDxzZWUgY3JlZj0iQnVpbGRlciIgLz4uPC9yZXR1cm5zPgorICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgQWRkRmllbGQoc3RyaW5nIGtleSwgb2JqZWN0IHZhbHVlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9maWVsZHNba2V5XSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAgICAvLy8gICAgIENoZWNrcyB3aGV0aGVyIGEgZmllbGQgaGFzIGJlZW4gc2V0LgorICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ia2V5Ij5UaGUgZmllbGQga2V5IHRvIGNoZWNrLjwvcGFyYW0+CisgICAgICAgICAgICAvLy8gPHJldHVybnM+VHJ1ZSBpZiB0aGUgZmllbGQgZXhpc3RzLjwvcmV0dXJucz4KKyAgICAgICAgICAgIHB1YmxpYyBib29sIEhhc0ZpZWxkKHN0cmluZyBrZXkpID0+IF9maWVsZHMuQ29udGFpbnNLZXkoa2V5KTsKKworICAgICAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAgICAgLy8vICAgICBTZXRzIHRoZSBldmFsdWF0aW9uIHRpbWVvdXQgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRpbWVvdXQiPlRoZSB0aW1lb3V0IHZhbHVlLjwvcGFyYW0+CisgICAgICAgICAgICAvLy8gPHJldHVybnM+VGhlIDxzZWUgY3JlZj0iQnVpbGRlciIgLz4uPC9yZXR1cm5zPgorICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgQWRkRXZhbHVhdGlvblRpbWVvdXQob2JqZWN0IHRpbWVvdXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2ZpZWxkc1tUb2tlbnMuQXJnc0V2YWxUaW1lb3V0XSA9IHRpbWVvdXQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgICAgIC8vLyAgICAgU2V0cyB0aGUgYmF0Y2ggc2l6ZSBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYmF0Y2hTaXplIj5UaGUgYmF0Y2ggc2l6ZSB2YWx1ZS48L3BhcmFtPgorICAgICAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSA8c2VlIGNyZWY9IkJ1aWxkZXIiIC8+LjwvcmV0dXJucz4KKyAgICAgICAgICAgIHB1YmxpYyBCdWlsZGVyIEFkZEJhdGNoU2l6ZShvYmplY3QgYmF0Y2hTaXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9maWVsZHNbVG9rZW5zLkFyZ3NCYXRjaFNpemVdID0gYmF0Y2hTaXplOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAgICAvLy8gICAgIFNldHMgdGhlIG1hdGVyaWFsaXplUHJvcGVydGllcyBvcHRpb24gZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im1hdGVyaWFsaXplUHJvcGVydGllcyI+VGhlIG1hdGVyaWFsaXplUHJvcGVydGllcyB2YWx1ZSAoZS5nLiAiYWxsIiBvciAidG9rZW5zIikuPC9wYXJhbT4KKyAgICAgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgPHNlZSBjcmVmPSJCdWlsZGVyIiAvPi48L3JldHVybnM+CisgICAgICAgICAgICBwdWJsaWMgQnVpbGRlciBBZGRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoc3RyaW5nIG1hdGVyaWFsaXplUHJvcGVydGllcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBfZmllbGRzW1Rva2Vucy5BcmdNYXRlcmlhbGl6ZVByb3BlcnRpZXNdID0gbWF0ZXJpYWxpemVQcm9wZXJ0aWVzOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAgICAvLy8gICAgIFNldHMgdGhlIHVzZXIgYWdlbnQgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJBZ2VudCI+VGhlIHVzZXIgYWdlbnQgc3RyaW5nLjwvcGFyYW0+CisgICAgICAgICAgICAvLy8gPHJldHVybnM+VGhlIDxzZWUgY3JlZj0iQnVpbGRlciIgLz4uPC9yZXR1cm5zPgorICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgQWRkVXNlckFnZW50KHN0cmluZyB1c2VyQWdlbnQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2ZpZWxkc1tUb2tlbnMuQXJnc1VzZXJBZ2VudF0gPSB1c2VyQWdlbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgICAgIC8vLyAgICAgU2V0cyB0aGUgYnVsayByZXN1bHRzIG9wdGlvbiBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYnVsa1Jlc3VsdHMiPlRoZSBidWxrIHJlc3VsdHMgdmFsdWUuPC9wYXJhbT4KKyAgICAgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgPHNlZSBjcmVmPSJCdWlsZGVyIiAvPi48L3JldHVybnM+CisgICAgICAgICAgICBwdWJsaWMgQnVpbGRlciBBZGRCdWxrUmVzdWx0cyhvYmplY3QgYnVsa1Jlc3VsdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2ZpZWxkc1tUb2tlbnMuQXJnc0J1bGtSZXN1bHRzXSA9IGJ1bGtSZXN1bHRzOworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgICAgICAvLy8gICAgIFNldHMgdGhlIGxhbmd1YWdlIGZvciB0aGlzIHJlcXVlc3QuCisgICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJsYW5ndWFnZSI+VGhlIGxhbmd1YWdlIGlkZW50aWZpZXIgKGUuZy4gImdyZW1saW4tbGFuZyIpLjwvcGFyYW0+CisgICAgICAgICAgICAvLy8gPHJldHVybnM+VGhlIDxzZWUgY3JlZj0iQnVpbGRlciIgLz4uPC9yZXR1cm5zPgorICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgQWRkTGFuZ3VhZ2Uoc3RyaW5nIGxhbmd1YWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9maWVsZHNbVG9rZW5zLkFyZ3NMYW5ndWFnZV0gPSBsYW5ndWFnZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIH0KIApAQCAtMTM2LDggKzIwMyw5IEBACiAgICAgICAgICAgICAvLy8gPHJldHVybnM+VGhlIGJ1aWx0IDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UiIC8+LjwvcmV0dXJucz4KICAgICAgICAgICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBDcmVhdGUoKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdE1lc3NhZ2UoX3JlcXVlc3RJZCwgX29wZXJhdGlvbiwgX3Byb2Nlc3NvciwgX2FyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgX2ZpZWxkc1tUb2tlbnMuQXJnc0JpbmRpbmdzXSA9IF9iaW5kaW5nczsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RNZXNzYWdlKF9ncmVtbGluLCBfZmllbGRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL01lc3NhZ2VzL1Jlc3BvbnNlTWVzc2FnZS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTWVzc2FnZXMvUmVzcG9uc2VNZXNzYWdlLmNzCmluZGV4IDdkYTQ5OTIuLmYwNWU1YzUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTWVzc2FnZXMvUmVzcG9uc2VNZXNzYWdlLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTWVzc2FnZXMvUmVzcG9uc2VNZXNzYWdlLmNzCkBAIC0yMSw0MiArMjEsNTUgQEAKIAogI2VuZHJlZ2lvbgogCi11c2luZyBTeXN0ZW07Ci0KIG5hbWVzcGFjZSBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXMKIHsKICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBUaGUgbWVzc2FnZSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXIuCisgICAgLy8vICAgICBUaGUgNC4wIHJlc3BvbnNlIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSB0aGUgc2VydmVyLgogICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIGRhdGEgcmV0dXJuZWQuPC90eXBlcGFyYW0+CisgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBkYXRhLjwvdHlwZXBhcmFtPgogICAgIHB1YmxpYyByZWNvcmQgUmVzcG9uc2VNZXNzYWdlPFQ+CiAgICAgewogICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iUmVzcG9uc2VNZXNzYWdle1R9IiAvPiByZWNvcmQuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVxdWVzdElkIj5UaGUgaWRlbnRpZmllciBvZiB0aGUgPHNlZSBjcmVmPSJSZXF1ZXN0TWVzc2FnZSIvPiB0aGF0IGdlbmVyYXRlZCB0aGlzIDxzZWUgY3JlZj0iUmVzcG9uc2VNZXNzYWdle1R9Ii8+LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyA8c2VlIGNyZWY9IlJlc3BvbnNlTWVzc2FnZXtUfSIvPi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlc3VsdCI+VGhlIHJlc3VsdCB3aXRoIGl0cyBkYXRhIGFuZCBvcHRpb25hbCBtZXRhIGluZm9ybWF0aW9uLjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UoR3VpZD8gcmVxdWVzdElkLCBSZXNwb25zZVN0YXR1cyBzdGF0dXMsIFJlc3BvbnNlUmVzdWx0PFQ+IHJlc3VsdCkKKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJidWxrZWQiPldoZXRoZXIgdGhlIHJlc3BvbnNlIGNvbnRhaW5zIGJ1bGtlZCByZXN1bHRzLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVzdWx0Ij5UaGUgZGVzZXJpYWxpemVkIHJlc3VsdCBkYXRhLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzQ29kZSI+VGhlIHN0YXR1cyBjb2RlIGZyb20gdGhlIEdyYXBoQmluYXJ5IHJlc3BvbnNlIHN0YXR1cyAoYWZ0ZXIgdGhlIGVuZC1vZi1zdHJlYW0gbWFya2VyKS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1c01lc3NhZ2UiPk9wdGlvbmFsIHN0YXR1cyBtZXNzYWdlIGZyb20gdGhlIEdyYXBoQmluYXJ5IHJlc3BvbnNlIHN0YXR1cy48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImV4Y2VwdGlvbiI+T3B0aW9uYWwgZXhjZXB0aW9uIHN0cmluZyBmcm9tIHRoZSBHcmFwaEJpbmFyeSByZXNwb25zZSBzdGF0dXMuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZShib29sIGJ1bGtlZCwgVCByZXN1bHQsIGludCBzdGF0dXNDb2RlLAorICAgICAgICAgICAgc3RyaW5nPyBzdGF0dXNNZXNzYWdlLCBzdHJpbmc/IGV4Y2VwdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgUmVxdWVzdElkID0gcmVxdWVzdElkOwotICAgICAgICAgICAgU3RhdHVzID0gc3RhdHVzOworICAgICAgICAgICAgQnVsa2VkID0gYnVsa2VkOwogICAgICAgICAgICAgUmVzdWx0ID0gcmVzdWx0OworICAgICAgICAgICAgU3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7CisgICAgICAgICAgICBTdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbiA9IGV4Y2VwdGlvbjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UiLz4gdGhhdCBnZW5lcmF0ZWQgdGhpcyA8c2VlIGNyZWY9IlJlc3BvbnNlTWVzc2FnZXtUfSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEd1aWQ/IFJlcXVlc3RJZCB7IGdldDsgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIDxzZWUgY3JlZj0iUmVzcG9uc2VNZXNzYWdle1R9Ii8+LgorICAgICAgICAvLy8gICAgIEdldHMgd2hldGhlciB0aGUgcmVzcG9uc2UgY29udGFpbnMgYnVsa2VkIHJlc3VsdHMuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBSZXNwb25zZVN0YXR1cyBTdGF0dXMgeyBnZXQ7IH0KKyAgICAgICAgcHVibGljIGJvb2wgQnVsa2VkIHsgZ2V0OyB9CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIHJlc3VsdCB3aXRoIGl0cyBkYXRhIGFuZCBvcHRpb25hbCBtZXRhIGluZm9ybWF0aW9uLgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIGRlc2VyaWFsaXplZCByZXN1bHQgZGF0YS4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFJlc3BvbnNlUmVzdWx0PFQ+IFJlc3VsdCB7IGdldDsgc2V0OyB9CisgICAgICAgIHB1YmxpYyBUIFJlc3VsdCB7IGdldDsgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIHRoZSBzdGF0dXMgY29kZSBmcm9tIHRoZSBHcmFwaEJpbmFyeSByZXNwb25zZSBzdGF0dXMgKDIwMCA9IHN1Y2Nlc3MpLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgaW50IFN0YXR1c0NvZGUgeyBnZXQ7IH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgb3B0aW9uYWwgc3RhdHVzIG1lc3NhZ2UgZnJvbSB0aGUgR3JhcGhCaW5hcnkgcmVzcG9uc2Ugc3RhdHVzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgc3RyaW5nPyBTdGF0dXNNZXNzYWdlIHsgZ2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIG9wdGlvbmFsIGV4Y2VwdGlvbiBzdHJpbmcgZnJvbSB0aGUgR3JhcGhCaW5hcnkgcmVzcG9uc2Ugc3RhdHVzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgc3RyaW5nPyBFeGNlcHRpb24geyBnZXQ7IH0KICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9NZXNzYWdlcy9SZXNwb25zZVJlc3VsdC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTWVzc2FnZXMvUmVzcG9uc2VSZXN1bHQuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMTFiNGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9NZXNzYWdlcy9SZXNwb25zZVJlc3VsdC5jcworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgUmVwcmVzZW50cyB0aGUgcmVzdWx0IGFzIGEgcmVzcG9uc2UgdG8gYSA8c2VlIGNyZWY9IlJlcXVlc3RNZXNzYWdlIi8+IHNlbnQgYXMgcGFydCBvZiBhCi0gICAgLy8vICAgICA8c2VlIGNyZWY9IlJlc3BvbnNlTWVzc2FnZXtUfSIvPiBieSB0aGUgc2VydmVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIDxzZWUgY3JlZj0iRGF0YSIvPi48L3R5cGVwYXJhbT4KLSAgICBwdWJsaWMgcmVjb3JkIFJlc3BvbnNlUmVzdWx0PFQ+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJSZXNwb25zZVJlc3VsdHtUfSIgLz4gcmVjb3JkLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImRhdGEiPlRoZSBkYXRhIG9mIHRoaXMgcmVzdWx0LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWV0YSI+VGhlIChvcHRpb25hbCkgbWV0YSBkYXRhIG9mIHRoaXMgcmVzdWx0LjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBSZXNwb25zZVJlc3VsdChUPyBkYXRhLCBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0Pj8gbWV0YSA9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIERhdGEgPSBkYXRhOwotICAgICAgICAgICAgTWV0YSA9IG1ldGEgPz8gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSBkYXRhIG9mIHRoaXMgcmVzdWx0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgVD8gRGF0YSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIG1ldGEgZGF0YSBvZiB0aGlzIHJlc3VsdC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IE1ldGEgeyBnZXQ7IH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9NZXNzYWdlcy9SZXNwb25zZVN0YXR1cy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvTWVzc2FnZXMvUmVzcG9uc2VTdGF0dXMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDUyNWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9NZXNzYWdlcy9SZXNwb25zZVN0YXR1cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLkV4Y2VwdGlvbnM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBSZXByZXNlbnRzIHN0YXR1cyBpbmZvcm1hdGlvbiBvZiBhIDxzZWUgY3JlZj0iUmVzcG9uc2VNZXNzYWdle1R9Ii8+LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIHJlY29yZCBSZXNwb25zZVN0YXR1cwotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IlJlc3BvbnNlU3RhdHVzIiAvPiByZWNvcmQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY29kZSI+VGhlIDxzZWUgY3JlZj0iUmVzcG9uc2VTdGF0dXNDb2RlIiAvPi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImF0dHJpYnV0ZXMiPlRoZSAob3B0aW9uYWwpIGF0dHJpYnV0ZXMgd2l0aCBwcm90b2NvbC1sZXZlbCBpbmZvcm1hdGlvbi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im1lc3NhZ2UiPlRoZSAob3B0aW9uYWwpIG1lc3NhZ2Ugd2hpY2ggaXMganVzdCBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBlcnJvcnMuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIFJlc3BvbnNlU3RhdHVzKFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlLCBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0Pj8gYXR0cmlidXRlcyA9IG51bGwsCi0gICAgICAgICAgICBzdHJpbmc/IG1lc3NhZ2UgPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb2RlID0gY29kZTsKLSAgICAgICAgICAgIEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzID8/IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PigpOwotICAgICAgICAgICAgTWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSA8c2VlIGNyZWY9IlJlc3BvbnNlU3RhdHVzQ29kZSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFJlc3BvbnNlU3RhdHVzQ29kZSBDb2RlIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIGF0dHJpYnV0ZXMgPHNlZSBjcmVmPSJEaWN0aW9uYXJ5e1RLZXksVFZhbHVlfSIvPiB3aXRoIHByb3RvY29sLWxldmVsIGluZm9ybWF0aW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gQXR0cmlidXRlcyB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSBtZXNzYWdlIHdoaWNoIGlzIGp1c3QgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgdXN1YWxseSBhc3NvY2lhdGVkIHdpdGggZXJyb3JzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nPyBNZXNzYWdlIHsgZ2V0OyB9Ci0gICAgfQotCi0gICAgaW50ZXJuYWwgc3RhdGljIGNsYXNzIFJlc3BvbnNlU3RhdHVzRXh0ZW5zaW9ucwotICAgIHsKLSAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIFRocm93SWZTdGF0dXNJbmRpY2F0ZXNFcnJvcih0aGlzIFJlc3BvbnNlU3RhdHVzIHN0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0YXR1cy5Db2RlLkluZGljYXRlc0Vycm9yKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc3BvbnNlRXhjZXB0aW9uKHN0YXR1cy5Db2RlLCBzdGF0dXMuQXR0cmlidXRlcywgJCJ7c3RhdHVzLkNvZGV9OiB7c3RhdHVzLk1lc3NhZ2V9Iik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9NZXNzYWdlcy9SZXNwb25zZVN0YXR1c0NvZGUuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL01lc3NhZ2VzL1Jlc3BvbnNlU3RhdHVzQ29kZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjZjM4Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL01lc3NhZ2VzL1Jlc3BvbnNlU3RhdHVzQ29kZS5jcworKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBSZXByZXNlbnRzIHRoZSB2YXJpb3VzIHN0YXR1cyBjb2RlcyB0aGF0IEdyZW1saW4gU2VydmVyIHJldHVybnMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgZW51bSBSZXNwb25zZVN0YXR1c0NvZGUKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgc2VydmVyIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYSByZXF1ZXN0IHRvIGNvbXBsZXRpb24gLSB0aGVyZSBhcmUgbm8gbWVzc2FnZXMgcmVtYWluaW5nIGluIHRoaXMKLSAgICAgICAgLy8vICAgICBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFN1Y2Nlc3MgPSAyMDAsCi0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgVGhlIHNlcnZlciBwcm9jZXNzZWQgdGhlIHJlcXVlc3QgYnV0IHRoZXJlIGlzIG5vIHJlc3VsdCB0byByZXR1cm4gKGUuZy4gYW4gSXRlcmF0b3Igd2l0aCBubyBlbGVtZW50cykKLSAgICAgICAgLy8vICAgICAtIHRoZXJlIGFyZSBubyBtZXNzYWdlcyByZW1haW5pbmcgaW4gdGhpcyBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIE5vQ29udGVudCA9IDIwNCwKLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgc2VydmVyIHN1Y2Nlc3NmdWxseSByZXR1cm5lZCBzb21lIGNvbnRlbnQsIGJ1dCB0aGVyZSBpcyBtb3JlIGluIHRoZSBzdHJlYW0gdG8gYXJyaXZlIC0gd2FpdCBmb3IgYQotICAgICAgICAvLy8gICAgIFNVQ0NFU1MgdG8gc2lnbmlmeSB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFBhcnRpYWxDb250ZW50ID0gMjA2LAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgcmVxdWVzdCBhdHRlbXB0ZWQgdG8gYWNjZXNzIHJlc291cmNlcyB0aGF0IHRoZSByZXF1ZXN0aW5nIHVzZXIgZGlkIG5vdCBoYXZlIGFjY2VzcyB0by4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgVW5hdXRob3JpemVkID0gNDAxLAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgc2VydmVyIGNvdWxkIGF1dGhlbnRpY2F0ZSB0aGUgcmVxdWVzdCwgYnV0IHdpbGwgbm90IGZ1bGZpbGwgaXQuICBUaGlzIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGNvZGUgdGhhdAotICAgICAgICAvLy8gICAgIHdvdWxkIHR5cGljYWxseSBiZSByZXR1cm5lZCBpZiB0aGUgcmVxdWVzdCBpcyBhdXRoZW50aWNhdGVkIGJ1dCBub3QgYXV0aG9yaXplZCB0byBkbyB3aGF0IGl0IGlzIGRvaW5nLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBGb3JiaWRkZW4gPSA0MDMsCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEEgY2hhbGxlbmdlIGZyb20gdGhlIHNlcnZlciBmb3IgdGhlIGNsaWVudCB0byBhdXRoZW50aWNhdGUgaXRzIHJlcXVlc3QuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIEF1dGhlbnRpY2F0ZSA9IDQwNywKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5kaWNhdGVzIHRoYXQgdG9vIG1hbnkgcmVxdWVzdHMgaGF2ZSBiZWVuIHNlbnQgaW4gYSBnaXZlbiBhbW91bnQgb2YgdGltZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgVG9vTWFueVJlcXVlc3RzID0gNDI5LAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgIFRoZSByZXF1ZXN0IG1lc3NhZ2UgY29udGFpbnMgb2JqZWN0cyB0aGF0IHdlcmUgbm90IHNlcmlhbGl6YWJsZSBvbiB0aGUgY2xpZW50IHNpZGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIENsaWVudFNlcmlhbGl6YXRpb25FcnJvciA9IDQ5NywKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgVGhlIHJlcXVlc3QgbWVzc2FnZSB3YXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZCB3aGljaCBtZWFucyBpdCBjb3VsZCBub3QgYmUgcGFyc2VkIGF0IGFsbCBvciB0aGUgIm9wIiBjb2RlCi0gICAgICAgIC8vLyAgICAgd2FzIG5vdCByZWNvZ25pemVkIHN1Y2ggdGhhdCBHcmVtbGluIFNlcnZlciBjb3VsZCBwcm9wZXJseSByb3V0ZSBpdCBmb3IgcHJvY2Vzc2luZy4gQ2hlY2sgdGhlIG1lc3NhZ2UgZm9ybWF0Ci0gICAgICAgIC8vLyAgICAgYW5kIHJldHJ5IHRoZSByZXF1ZXN0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBNYWxmb3JtZWRSZXF1ZXN0ID0gNDk4LAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgcmVxdWVzdCBtZXNzYWdlIHdhcyBwYXJzZWFibGUsIGJ1dCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkIGluIHRoZSBtZXNzYWdlIHdlcmUgaW4gY29uZmxpY3Qgb3IgaW5jb21wbGV0ZS4KLSAgICAgICAgLy8vICAgICBDaGVjayB0aGUgbWVzc2FnZSBmb3JtYXQgYW5kIHJldHJ5IHRoZSByZXF1ZXN0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBJbnZhbGlkUmVxdWVzdEFyZ3VtZW50cyA9IDQ5OSwKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQSBnZW5lcmFsIHNlcnZlciBlcnJvciBvY2N1cnJlZCB0aGF0IHByZXZlbnRlZCB0aGUgcmVxdWVzdCBmcm9tIGJlaW5nIHByb2Nlc3NlZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgU2VydmVyRXJyb3IgPSA1MDAsCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEEgc2VydmVyIGVycm9yIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiB0aGUgZmFpbCgpLXN0ZXAgaXMgdHJpZ2dlcmVkLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBTZXJ2ZXJFcnJvckZhaWxTdGVwID0gNTk1LAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBBIHNlcnZlciBlcnJvciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgc2hvdWxkIHJldHJ5IHRoZSByZXF1ZXN0LiBBIGdyYXBoIHdpbGwgdHlwaWNhbGx5IHJldHVybiB0aGlzIGVycm9yCi0gICAgICAgIC8vLyAgICAgd2hlbiBhIHRyYW5zYWN0aW9uIGZhaWxzIGR1ZSB0byBhIGxvY2tpbmcgZXhjZXB0aW9uIG9yIHNvbWUgb3RoZXIgc29ydCBvZiBjb25jdXJyZW50IG1vZGlmaWNhdGlvbi4gSW4gb3RoZXIKLSAgICAgICAgLy8vICAgICB3b3JkcywgdGhlIHJlcXVlc3Qgd2FzIGxpa2VseSB2YWxpZCBidXQgdGhlIHN0YXRlIG9mIHRoZSBzZXJ2ZXIgYXQgdGhlIHBhcnRpY3VsYXIgdGltZSB0aGUgcmVxdWVzdCBhcnJpdmVkCi0gICAgICAgIC8vLyAgICAgY291bGQgbm90IGJlIHByb2Nlc3NlZCB0byBzdWNjZXNzLCBidXQgY291bGQgYmUgYXQgYSBsYXRlciBtb21lbnQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFNlcnZlckVycm9yVGVtcG9yYXJ5ID0gNTk2LAotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgcmVxdWVzdCBzdWJtaXR0ZWQgZm9yIHByb2Nlc3NpbmcgZXZhbHVhdGVkIGJ5IHRoZSBzZXJ2ZXIgd2l0aCBlcnJvcnMgYW5kIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuCi0gICAgICAgIC8vLyAgICAgQ2hlY2sgdGhlIHNjcmlwdCBvciByZW1vdGUgdHJhdmVyc2FsIHN1Ym1pdHRlZCBmb3IgZXJyb3JzIG9yIG90aGVyIHByb2JsZW1zIGFuZCB0aGVuIHJlc3VibWl0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBTZXJ2ZXJFdmFsdWF0aW9uRXJyb3IgPSA1OTcsCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIFRoZSBzZXJ2ZXIgZXhjZWVkZWQgb25lIG9mIHRoZSB0aW1lb3V0IHNldHRpbmdzIGZvciB0aGUgcmVxdWVzdCBhbmQgY291bGQgdGhlcmVmb3JlIG9ubHkgcGFydGlhbGx5IHJlc3BvbmRlZAotICAgICAgICAvLy8gICAgIG9yIGRpZCBub3QgcmVzcG9uZCBhdCBhbGwuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIFNlcnZlclRpbWVvdXQgPSA1OTgsCi0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIFRoZSBzZXJ2ZXIgd2FzIG5vdCBjYXBhYmxlIG9mIHNlcmlhbGl6aW5nIGFuIG9iamVjdCB0aGF0IHdhcyByZXR1cm5lZCBmcm9tIHRoZSBzY3JpcHQgc3VwcGxpZWQgb24gdGhlIHJlcXVlc3QuCi0gICAgICAgIC8vLyAgICAgRWl0aGVyIHRyYW5zZm9ybSB0aGUgb2JqZWN0IGludG8gc29tZXRoaW5nIEdyZW1saW4gU2VydmVyIGNhbiBwcm9jZXNzIHdpdGhpbiB0aGUgc2NyaXB0IG9yIGluc3RhbGwgbWFwcGVyCi0gICAgICAgIC8vLyAgICAgc2VyaWFsaXphdGlvbiBjbGFzc2VzIHRvIEdyZW1saW4gU2VydmVyLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBTZXJ2ZXJTZXJpYWxpemF0aW9uRXJyb3IgPSA1OTkKLSAgICB9Ci0KLSAgICBpbnRlcm5hbCBzdGF0aWMgY2xhc3MgUmVzcG9uc2VTdGF0dXNDb2RlRXh0ZW5zaW9ucwotICAgIHsKLSAgICAgICAgcHVibGljIHN0YXRpYyBib29sIEluZGljYXRlc0Vycm9yKHRoaXMgUmVzcG9uc2VTdGF0dXNDb2RlIHN0YXR1c0NvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdHVzQ29kZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5TdWNjZXNzOgotICAgICAgICAgICAgICAgIGNhc2UgUmVzcG9uc2VTdGF0dXNDb2RlLk5vQ29udGVudDoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5QYXJ0aWFsQ29udGVudDoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5BdXRoZW50aWNhdGU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXNwb25zZVN0YXR1c0NvZGUuRm9yYmlkZGVuOgotICAgICAgICAgICAgICAgIGNhc2UgUmVzcG9uc2VTdGF0dXNDb2RlLlRvb01hbnlSZXF1ZXN0czoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5DbGllbnRTZXJpYWxpemF0aW9uRXJyb3I6Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXNwb25zZVN0YXR1c0NvZGUuTWFsZm9ybWVkUmVxdWVzdDoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5JbnZhbGlkUmVxdWVzdEFyZ3VtZW50czoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5TZXJ2ZXJFcnJvcjoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5TZXJ2ZXJFcnJvckZhaWxTdGVwOgotICAgICAgICAgICAgICAgIGNhc2UgUmVzcG9uc2VTdGF0dXNDb2RlLlNlcnZlckVycm9yVGVtcG9yYXJ5OgotICAgICAgICAgICAgICAgIGNhc2UgUmVzcG9uc2VTdGF0dXNDb2RlLlNlcnZlckV2YWx1YXRpb25FcnJvcjoKLSAgICAgICAgICAgICAgICBjYXNlIFJlc3BvbnNlU3RhdHVzQ29kZS5TZXJ2ZXJUaW1lb3V0OgotICAgICAgICAgICAgICAgIGNhc2UgUmVzcG9uc2VTdGF0dXNDb2RlLlNlcnZlclNlcmlhbGl6YXRpb25FcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbihuYW1lb2Yoc3RhdHVzQ29kZSksIHN0YXR1c0NvZGUsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvUHJveHlDbGllbnRXZWJTb2NrZXQuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1Byb3h5Q2xpZW50V2ViU29ja2V0LmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjhiMGUwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvUHJveHlDbGllbnRXZWJTb2NrZXQuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uTmV0LldlYlNvY2tldHM7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkRyaXZlcgotewotICAgIGludGVybmFsIGNsYXNzIFByb3h5Q2xpZW50V2ViU29ja2V0IDogSUNsaWVudFdlYlNvY2tldAotICAgIHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBDbGllbnRXZWJTb2NrZXQgX2NsaWVudDsKLQotICAgICAgICBwdWJsaWMgUHJveHlDbGllbnRXZWJTb2NrZXQoQ2xpZW50V2ViU29ja2V0IGNsaWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgX2NsaWVudCA9IGNsaWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBXZWJTb2NrZXRTdGF0ZSBTdGF0ZSA9PiBfY2xpZW50LlN0YXRlOwotCi0gICAgICAgIHB1YmxpYyBDbGllbnRXZWJTb2NrZXRPcHRpb25zIE9wdGlvbnMgPT4gX2NsaWVudC5PcHRpb25zOwotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgSUNsaWVudFdlYlNvY2tldCBDcmVhdGVDbGllbnRXZWJTb2NrZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5Q2xpZW50V2ViU29ja2V0KG5ldyBDbGllbnRXZWJTb2NrZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgVGFzayBDbG9zZUFzeW5jKFdlYlNvY2tldENsb3NlU3RhdHVzIGNsb3NlU3RhdHVzLCBzdHJpbmcgc3RhdHVzRGVzY3JpcHRpb24sIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2NsaWVudC5DbG9zZUFzeW5jKGNsb3NlU3RhdHVzLCBzdGF0dXNEZXNjcmlwdGlvbiwgY2FuY2VsbGF0aW9uVG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFRhc2sgQ29ubmVjdEFzeW5jKFVyaSB1cmksIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2NsaWVudC5Db25uZWN0QXN5bmModXJpLCBjYW5jZWxsYXRpb25Ub2tlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlKCkKLSAgICAgICAgewotICAgICAgICAgICAgX2NsaWVudC5EaXNwb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgVGFzazxXZWJTb2NrZXRSZWNlaXZlUmVzdWx0PiBSZWNlaXZlQXN5bmMoQXJyYXlTZWdtZW50PGJ5dGU+IGJ1ZmZlciwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfY2xpZW50LlJlY2VpdmVBc3luYyhidWZmZXIsIGNhbmNlbGxhdGlvblRva2VuKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBUYXNrIFNlbmRBc3luYyhBcnJheVNlZ21lbnQ8Ynl0ZT4gYnVmZmVyLCBXZWJTb2NrZXRNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgYm9vbCBlbmRPZk1lc3NhZ2UsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2NsaWVudC5TZW5kQXN5bmMoYnVmZmVyLCBtZXNzYWdlVHlwZSwgZW5kT2ZNZXNzYWdlLCBjYW5jZWxsYXRpb25Ub2tlbik7Ci0gICAgICAgIH0KLQotI2lmIE5FVDZfMF9PUl9HUkVBVEVSCi0gICAgICAgICAgICBwdWJsaWMgVmFsdWVUYXNrIFNlbmRBc3luYyhBcnJheVNlZ21lbnQ8Ynl0ZT4gYnVmZmVyLCBXZWJTb2NrZXRNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgV2ViU29ja2V0TWVzc2FnZUZsYWdzIG1lc3NhZ2VGbGFncywgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9jbGllbnQuU2VuZEFzeW5jKGJ1ZmZlciwgbWVzc2FnZVR5cGUsIG1lc3NhZ2VGbGFncywgY2FuY2VsbGF0aW9uVG9rZW4pOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Qcm94eUNvbm5lY3Rpb24uY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1Byb3h5Q29ubmVjdGlvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjM2RhYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1Byb3h5Q29ubmVjdGlvbi5jcworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuRHJpdmVyCi17Ci0gICAgaW50ZXJuYWwgc2VhbGVkIGNsYXNzIFByb3h5Q29ubmVjdGlvbiA6IElDb25uZWN0aW9uCi0gICAgewotICAgICAgICBwdWJsaWMgSUNvbm5lY3Rpb24gUHJveGllZENvbm5lY3Rpb24geyBnZXQ7IH0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBBY3Rpb248SUNvbm5lY3Rpb24+IF9yZWxlYXNlQWN0aW9uOwotCi0gICAgICAgIHB1YmxpYyBQcm94eUNvbm5lY3Rpb24oSUNvbm5lY3Rpb24gcHJveGllZENvbm5lY3Rpb24sIEFjdGlvbjxJQ29ubmVjdGlvbj4gcmVsZWFzZUFjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgUHJveGllZENvbm5lY3Rpb24gPSBwcm94aWVkQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIF9yZWxlYXNlQWN0aW9uID0gcmVsZWFzZUFjdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIENvbm5lY3RBc3luYyhDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgUHJveGllZENvbm5lY3Rpb24uQ29ubmVjdEFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXN1bHRTZXQ8VD4+IFN1Ym1pdEFzeW5jPFQ+KFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhd2FpdCBQcm94aWVkQ29ubmVjdGlvbi5TdWJtaXRBc3luYzxUPihyZXF1ZXN0TWVzc2FnZSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgTnJSZXF1ZXN0c0luRmxpZ2h0ID0+IFByb3hpZWRDb25uZWN0aW9uLk5yUmVxdWVzdHNJbkZsaWdodDsKLQotICAgICAgICBwdWJsaWMgYm9vbCBJc09wZW4gPT4gUHJveGllZENvbm5lY3Rpb24uSXNPcGVuOwotCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIENsb3NlQXN5bmMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCBQcm94aWVkQ29ubmVjdGlvbi5DbG9zZUFzeW5jKCkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgRGlzcG9zZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yZWxlYXNlQWN0aW9uKFByb3hpZWRDb25uZWN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1JlbW90ZS9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9SZW1vdGUvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5jcwppbmRleCA0Y2EyODdlLi44MWRkMzQzIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1JlbW90ZS9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvUmVtb3RlL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24uY3MKQEAgLTQzLDIzICs0MywxMyBAQAogICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmluZyBfdHJhdmVyc2FsU291cmNlOwogICAgICAgICBwcml2YXRlIHJlYWRvbmx5IElMb2dnZXI8RHJpdmVyUmVtb3RlQ29ubmVjdGlvbj4gX2xvZ2dlcjsKIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBGaWx0ZXIgb24gdGhlc2Uga2V5cyBwcm92aWRlZCB0byBPcHRpb25zU3RyYXRlZ3kgYW5kIGFwcGx5IHRoZW0gdG8gdGhlIHJlcXVlc3QuIE5vdGUgdGhhdAotICAgICAgICAvLy8gInNjcmlwdEV2YWx1YXRpb25UaW1lb3V0IiB3YXMgZGVwcmVjYXRlZCBpbiAzLjMuOSBidXQgc3RpbGwgc3VwcG9ydGVkIGluIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgYW5kIHdpbGwKLSAgICAgICAgLy8vIGJlIHJlbW92ZWQgaW4gbGF0ZXIgdmVyc2lvbnMuIAotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IExpc3Q8c3RyaW5nPiBfYWxsb3dlZEtleXMgPSBuZXcoKQotICAgICAgICB7Ci0gICAgICAgICAgICBUb2tlbnMuQXJnc0V2YWxUaW1lb3V0LCAic2NyaXB0RXZhbHVhdGlvblRpbWVvdXQiLCBUb2tlbnMuQXJnc0JhdGNoU2l6ZSwKLSAgICAgICAgICAgIFRva2Vucy5SZXF1ZXN0SWQsIFRva2Vucy5BcmdzVXNlckFnZW50LCBUb2tlbnMuQXJnTWF0ZXJpYWxpemVQcm9wZXJ0aWVzCi0gICAgICAgIH07Ci0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdHJpbmc/IF9zZXNzaW9uSWQ7Ci0gICAgICAgIHByaXZhdGUgc3RyaW5nIFByb2Nlc3NvciA9PiBJc1Nlc3Npb25Cb3VuZCA/IFRva2Vucy5Qcm9jZXNzb3JTZXNzaW9uIDogVG9rZW5zLlByb2Nlc3NvclRyYXZlcnNhbDsKKyAgICAgICAgLy8gQWxsIE9wdGlvbnNTdHJhdGVneSBrZXlzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcmVxdWVzdCBmaWVsZHMuCisgICAgICAgIC8vIFRoZSBzZXJ2ZXIgZmlsdGVycyBvdXQgb3B0aW9ucyB0aGF0IGRvbid0IGFwcGx5LCBhbmQgdGhpcyBhbGxvd3MKKyAgICAgICAgLy8gcHJvdmlkZXJzIHRvIHVzZSBjdXN0b20gcmVxdWVzdCBmaWVsZHMgdmlhIHRoZSBDbGllbnQgZGlyZWN0bHkgb3IgRFJDLgogCiAgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYm9vbCBJc1Nlc3Npb25Cb3VuZCA9PiBfc2Vzc2lvbklkICE9IG51bGw7Ci0gICAgICAgIAorICAgICAgICBwdWJsaWMgYm9vbCBJc1Nlc3Npb25Cb3VuZCA9PiBmYWxzZTsKKwogICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgPHNlZSBjcmVmPSJJUmVtb3RlQ29ubmVjdGlvbiIgLz4uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CkBAIC02NywxMCArNTcsMTYgQEAKICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJwb3J0Ij5UaGUgcG9ydCB0byBjb25uZWN0IHRvLjwvcGFyYW0+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhdmVyc2FsU291cmNlIj5UaGUgbmFtZSBvZiB0aGUgdHJhdmVyc2FsIHNvdXJjZSBvbiB0aGUgc2VydmVyIHRvIGJpbmQgdG8uPC9wYXJhbT4KICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJsb2dnZXJGYWN0b3J5Ij5BIGZhY3RvcnkgdG8gY3JlYXRlIGxvZ2dlcnMuIElmIG5vdCBwcm92aWRlZCwgdGhlbiBub3RoaW5nIHdpbGwgYmUgbG9nZ2VkLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaW50ZXJjZXB0b3JzIj4KKyAgICAgICAgLy8vICAgICBBbiBvcHRpb25hbCBsaXN0IG9mIHJlcXVlc3QgaW50ZXJjZXB0b3JzIGZvcndhcmRlZCB0byB0aGUgdW5kZXJseWluZworICAgICAgICAvLy8gICAgIDxzZWUgY3JlZj0iR3JlbWxpbkNsaWVudCIgLz4uCisgICAgICAgIC8vLyA8L3BhcmFtPgogICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcmd1bWVudE51bGxFeGNlcHRpb24iPlRocm93biB3aGVuIGNsaWVudCBpcyBudWxsLjwvZXhjZXB0aW9uPgogICAgICAgICBwdWJsaWMgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzdHJpbmcgaG9zdCwgaW50IHBvcnQsIHN0cmluZyB0cmF2ZXJzYWxTb3VyY2UgPSAiZyIsCi0gICAgICAgICAgICBJTG9nZ2VyRmFjdG9yeT8gbG9nZ2VyRmFjdG9yeSA9IG51bGwpIDogdGhpcygKLSAgICAgICAgICAgIG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKGhvc3QsIHBvcnQpLCBsb2dnZXJGYWN0b3J5OiBsb2dnZXJGYWN0b3J5KSwgdHJhdmVyc2FsU291cmNlLAorICAgICAgICAgICAgSUxvZ2dlckZhY3Rvcnk/IGxvZ2dlckZhY3RvcnkgPSBudWxsLAorICAgICAgICAgICAgSVJlYWRPbmx5TGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+PyBpbnRlcmNlcHRvcnMgPSBudWxsKSA6IHRoaXMoCisgICAgICAgICAgICBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcihob3N0LCBwb3J0KSwgbG9nZ2VyRmFjdG9yeTogbG9nZ2VyRmFjdG9yeSwgaW50ZXJjZXB0b3JzOiBpbnRlcmNlcHRvcnMpLAorICAgICAgICAgICAgdHJhdmVyc2FsU291cmNlLAogICAgICAgICAgICAgbG9nZ2VyOiBsb2dnZXJGYWN0b3J5Py5DcmVhdGVMb2dnZXI8RHJpdmVyUmVtb3RlQ29ubmVjdGlvbj4oKSA/PyBOdWxsTG9nZ2VyPERyaXZlclJlbW90ZUNvbm5lY3Rpb24+Lkluc3RhbmNlKQogICAgICAgICB7CiAgICAgICAgIH0KQEAgLTgyLDExICs3OCwxMSBAQAogICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRyYXZlcnNhbFNvdXJjZSI+VGhlIG5hbWUgb2YgdGhlIHRyYXZlcnNhbCBzb3VyY2Ugb24gdGhlIHNlcnZlciB0byBiaW5kIHRvLjwvcGFyYW0+CiAgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50TnVsbEV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gY2xpZW50IG9yIHRoZSB0cmF2ZXJzYWxTb3VyY2UgaXMgbnVsbC48L2V4Y2VwdGlvbj4KICAgICAgICAgcHVibGljIERyaXZlclJlbW90ZUNvbm5lY3Rpb24oSUdyZW1saW5DbGllbnQgY2xpZW50LCBzdHJpbmcgdHJhdmVyc2FsU291cmNlID0gImciKQotICAgICAgICAgICAgOiB0aGlzKGNsaWVudCwgdHJhdmVyc2FsU291cmNlLCBudWxsKQorICAgICAgICAgICAgOiB0aGlzKGNsaWVudCwgdHJhdmVyc2FsU291cmNlLCBsb2dnZXI6IG51bGwpCiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihJR3JlbWxpbkNsaWVudCBjbGllbnQsIHN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIHN0cmluZz8gc2Vzc2lvbklkID0gbnVsbCwKKyAgICAgICAgcHJpdmF0ZSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKElHcmVtbGluQ2xpZW50IGNsaWVudCwgc3RyaW5nIHRyYXZlcnNhbFNvdXJjZSwKICAgICAgICAgICAgIElMb2dnZXI8RHJpdmVyUmVtb3RlQ29ubmVjdGlvbj4/IGxvZ2dlciA9IG51bGwpCiAgICAgICAgIHsKICAgICAgICAgICAgIF9jbGllbnQgPSBjbGllbnQgPz8gdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2YoY2xpZW50KSk7CkBAIC0xMDEsNjIgKzk3LDUxIEBACiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2VyRmFjdG9yeS5DcmVhdGVMb2dnZXI8RHJpdmVyUmVtb3RlQ29ubmVjdGlvbj4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIF9sb2dnZXIgPSBsb2dnZXI7Ci0gICAgICAgICAgICBfc2Vzc2lvbklkID0gc2Vzc2lvbklkOwogICAgICAgICB9CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIFN1Ym1pdHMgPHNlZSBjcmVmPSJCeXRlY29kZSIgLz4gZm9yIGV2YWx1YXRpb24gdG8gYSByZW1vdGUgR3JlbWxpbiBTZXJ2ZXIuCisgICAgICAgIC8vLyAgICAgU3VibWl0cyA8c2VlIGNyZWY9IkdyZW1saW5MYW5nIiAvPiBmb3IgZXZhbHVhdGlvbiB0byBhIHJlbW90ZSBHcmVtbGluIFNlcnZlci4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJieXRlY29kZSI+VGhlIDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IHRvIHN1Ym1pdC48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyZW1saW5MYW5nIj5UaGUgPHNlZSBjcmVmPSJHcmVtbGluTGFuZyIgLz4gdG8gc3VibWl0LjwvcGFyYW0+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgogICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IklUcmF2ZXJzYWwiIC8+IGFsbG93aW5nIHRvIGFjY2VzcyB0aGUgcmVzdWx0cyBhbmQgc2lkZS1lZmZlY3RzLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8SVRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+PiBTdWJtaXRBc3luYzxUU3RhcnQsIFRFbmQ+KEJ5dGVjb2RlIGJ5dGVjb2RlLAorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxJVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4+IFN1Ym1pdEFzeW5jPFRTdGFydCwgVEVuZD4oR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcsCiAgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0SWQgPSBHdWlkLk5ld0d1aWQoKTsKLSAgICAgICAgICAgIHZhciByZXN1bHRTZXQgPSBhd2FpdCBTdWJtaXRCeXRlY29kZUFzeW5jKHJlcXVlc3RJZCwgYnl0ZWNvZGUsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERyaXZlclJlbW90ZVRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+KHJlc3VsdFNldCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIF9sb2dnZXIuU3VibWl0dGluZ0dyZW1saW5MYW5nKGdyZW1saW5MYW5nKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLkFkZEcoX3RyYXZlcnNhbFNvdXJjZSk7CiAKLSAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrPElFbnVtZXJhYmxlPFRyYXZlcnNlcj4+IFN1Ym1pdEJ5dGVjb2RlQXN5bmMoR3VpZCByZXF1ZXN0aWQsIEJ5dGVjb2RlIGJ5dGVjb2RlLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9sb2dnZXIuU3VibWl0dGluZ0J5dGVjb2RlKGJ5dGVjb2RlLCByZXF1ZXN0aWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgcmVxdWVzdE1zZyA9Ci0gICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0J5dGVjb2RlKQotICAgICAgICAgICAgICAgICAgICAuUHJvY2Vzc29yKFByb2Nlc3NvcikKLSAgICAgICAgICAgICAgICAgICAgLk92ZXJyaWRlUmVxdWVzdElkKHJlcXVlc3RpZCkKLSAgICAgICAgICAgICAgICAgICAgLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzR3JlbWxpbiwgYnl0ZWNvZGUpCi0gICAgICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnc0FsaWFzZXMsIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPiB7eyJnIiwgX3RyYXZlcnNhbFNvdXJjZX19KTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoZ3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKQorICAgICAgICAgICAgICAgIC5BZGRHKF90cmF2ZXJzYWxTb3VyY2UpCisgICAgICAgICAgICAgICAgLkFkZEJpbmRpbmdzKGdyZW1saW5MYW5nLlBhcmFtZXRlcnMpOwogCi0gICAgICAgICAgICBpZiAoSXNTZXNzaW9uQm91bmQpCisgICAgICAgICAgICBmb3JlYWNoICh2YXIgb3B0aW9uc1N0cmF0ZWd5IGluIGdyZW1saW5MYW5nLk9wdGlvbnNTdHJhdGVnaWVzKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlcXVlc3RNc2cuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NTZXNzaW9uLCBfc2Vzc2lvbklkISk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBvcHRpb25zU3RyYXRlZ3lJbnN0ID0gYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zLkZpbmQoCi0gICAgICAgICAgICAgICAgcyA9PiBzLk9wZXJhdG9yTmFtZSA9PSAid2l0aFN0cmF0ZWdpZXMiICYmIHMuQXJndW1lbnRzWzBdIGlzIE9wdGlvbnNTdHJhdGVneSk7Ci0gICAgICAgICAgICBpZiAob3B0aW9uc1N0cmF0ZWd5SW5zdCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE9wdGlvbnNTdHJhdGVneSBvcHRpb25zU3RyYXRlZ3kgPSBvcHRpb25zU3RyYXRlZ3lJbnN0LkFyZ3VtZW50c1swXSE7CiAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHBhaXIgaW4gb3B0aW9uc1N0cmF0ZWd5LkNvbmZpZ3VyYXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX2FsbG93ZWRLZXlzLkNvbnRhaW5zKHBhaXIuS2V5KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1zZy5BZGRBcmd1bWVudChwYWlyLktleSwgcGFpci5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1zZy5BZGRGaWVsZChwYWlyLktleSwgcGFpci5WYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gYXdhaXQgX2NsaWVudC5TdWJtaXRBc3luYzxUcmF2ZXJzZXI+KHJlcXVlc3RNc2cuQ3JlYXRlKCksIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAvLyBEZWZhdWx0IGJ1bGtSZXN1bHRzIHRvICJ0cnVlIiBpZiBub3Qgc2V0IHBlci1yZXF1ZXN0CisgICAgICAgICAgICAvLyAoY29uc2lzdGVudCB3aXRoIEphdmEgUmVxdWVzdE9wdGlvbnMuZnJvbUdyZW1saW5MYW5nIGFuZCBQeXRob24gZXh0cmFjdF9yZXF1ZXN0X29wdGlvbnMpCisgICAgICAgICAgICBpZiAoIXJlcXVlc3RNc2cuSGFzRmllbGQoVG9rZW5zLkFyZ3NCdWxrUmVzdWx0cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVxdWVzdE1zZy5BZGRGaWVsZChUb2tlbnMuQXJnc0J1bGtSZXN1bHRzLCAidHJ1ZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmVzdWx0U2V0ID0gYXdhaXQgX2NsaWVudC5TdWJtaXRBc3luYzxUcmF2ZXJzZXI+KHJlcXVlc3RNc2cuQ3JlYXRlKCksIGNhbmNlbGxhdGlvblRva2VuKQorICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IERyaXZlclJlbW90ZVRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+KHJlc3VsdFNldCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgLy8vIDxyZW1hcmtzPgorICAgICAgICAvLy8gICAgIFRyYW5zYWN0aW9uIHN1cHBvcnQgb3ZlciBIVFRQIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIFRoaXMgd2lsbCBiZSBhZGRyZXNzZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS4KKyAgICAgICAgLy8vIDwvcmVtYXJrcz4KICAgICAgICAgcHVibGljIFJlbW90ZVRyYW5zYWN0aW9uIFR4KEdyYXBoVHJhdmVyc2FsU291cmNlIGcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzZXNzaW9uID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oX2NsaWVudCwgX3RyYXZlcnNhbFNvdXJjZSwgR3VpZC5OZXdHdWlkKCkuVG9TdHJpbmcoKSwgX2xvZ2dlcik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlbW90ZVRyYW5zYWN0aW9uKHNlc3Npb24sIGcpOworICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbigiVHJhbnNhY3Rpb24gc3VwcG9ydCBvdmVyIEhUVFAgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4iKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgpAQCAtMTY1LDQgKzE1MCw0IEBACiAgICAgICAgICAgICBfY2xpZW50Py5EaXNwb3NlKCk7CiAgICAgICAgIH0KICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9SZW1vdGUvRHJpdmVyUmVtb3RlVHJhdmVyc2FsLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9SZW1vdGUvRHJpdmVyUmVtb3RlVHJhdmVyc2FsLmNzCmluZGV4IDI3MjlkYTIuLjljZWJjODEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvUmVtb3RlL0RyaXZlclJlbW90ZVRyYXZlcnNhbC5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1JlbW90ZS9Ecml2ZXJSZW1vdGVUcmF2ZXJzYWwuY3MKQEAgLTM0LDYgKzM0LDYgQEAKICAgICAgICAgICAgIFRyYXZlcnNlcnMgPSB0cmF2ZXJzZXJzOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIG92ZXJyaWRlIEJ5dGVjb2RlIEJ5dGVjb2RlID0+IHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24oIlJlbW90ZSB0cmF2ZXJzYWxzIGRvIG5vdCBoYXZlIEJ5dGVjb2RlIik7CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBHcmVtbGluTGFuZyBHcmVtbGluTGFuZyA9PiB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKCJSZW1vdGUgdHJhdmVyc2FscyBkbyBub3QgaGF2ZSBHcmVtbGluTGFuZyIpOwogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1Jlc3BvbnNlSGFuZGxlckZvclNpbmdsZVJlcXVlc3RNZXNzYWdlLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9SZXNwb25zZUhhbmRsZXJGb3JTaW5nbGVSZXF1ZXN0TWVzc2FnZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFhZThmNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1Jlc3BvbnNlSGFuZGxlckZvclNpbmdsZVJlcXVlc3RNZXNzYWdlLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotI3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuRHJpdmVyCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgUmVzcG9uc2VIYW5kbGVyRm9yU2luZ2xlUmVxdWVzdE1lc3NhZ2U8VD4gOiBJUmVzcG9uc2VIYW5kbGVyRm9yU2luZ2xlUmVxdWVzdE1lc3NhZ2UKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBUYXNrPFJlc3VsdFNldDxUPj4gUmVzdWx0ID0+IF90Y3MuVGFzazsKLQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFRhc2tDb21wbGV0aW9uU291cmNlPFJlc3VsdFNldDxUPj4gX3RjcyA9Ci0gICAgICAgICAgICBuZXcoVGFza0NyZWF0aW9uT3B0aW9ucy5SdW5Db250aW51YXRpb25zQXN5bmNocm9ub3VzbHkpOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBMaXN0PFQ+IF9yZXN1bHQgPSBuZXcoKTsKLQotICAgICAgICBwdWJsaWMgdm9pZCBIYW5kbGVSZWNlaXZlZChSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+PiByZWNlaXZlZCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yZWFjaCAodmFyIGQgaW4gcmVjZWl2ZWQuUmVzdWx0LkRhdGEhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9yZXN1bHQuQWRkKChUKSBkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIEZpbmFsaXplKERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHN0YXR1c0F0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXN1bHRTZXQgPQotICAgICAgICAgICAgICAgIG5ldyBSZXN1bHRTZXQ8VD4oX3Jlc3VsdCwgc3RhdHVzQXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBfdGNzLlRyeVNldFJlc3VsdChyZXN1bHRTZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgSGFuZGxlRmFpbHVyZShFeGNlcHRpb24gb2JqRXhjZXB0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBfdGNzLlRyeVNldEV4Y2VwdGlvbihvYmpFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgQ2FuY2VsKCkKLSAgICAgICAgewotICAgICAgICAgICAgX3Rjcy5TZXRDYW5jZWxlZCgpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvVG9rZW5zLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Ub2tlbnMuY3MKaW5kZXggYmRiMWJlOS4uZmQ5NGUyNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Ub2tlbnMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9Ub2tlbnMuY3MKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIEN1cnJlbnQgVGlua2VyUG9wIHZlcnNpb24uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIEdyZW1saW5WZXJzaW9uID0gIjMuOC4yLVNOQVBTSE9UIjsgLy8gRE8gTk9UIE1PRElGWSAtIENvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBieSBNYXZlbiBSZXBsYWNlciBQbHVnaW4KKyAgICAgICAgcHVibGljIHN0YXRpYyBzdHJpbmcgR3JlbWxpblZlcnNpb24gPSAiNC4wLjAtU05BUFNIT1QiOyAvLyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBUaGUga2V5IGZvciB0aGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlcXVlc3QuCkBAIC00MSwzNiArNDEsNiBAQAogICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIFJlcXVlc3RJZCA9ICJyZXF1ZXN0SWQiOwogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBPcGVyYXRpb24gdXNlZCBieSB0aGUgY2xpZW50IHRvIGF1dGhlbnRpY2F0ZSBpdHNlbGYuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBzdHJpbmcgT3BzQXV0aGVudGljYXRpb24gPSAiYXV0aGVudGljYXRpb24iOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBPcGVyYXRpb24gdXNlZCBmb3IgYSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIEJ5dGVjb2RlIHJlcHJlc2VudGF0aW9uIG9mIGEgVHJhdmVyc2FsLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIE9wc0J5dGVjb2RlID0gImJ5dGVjb2RlIjsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgT3BlcmF0aW9uIHVzZWQgdG8gZXZhbHVhdGUgYSBHcmVtbGluIHNjcmlwdCBwcm92aWRlZCBhcyBhIHN0cmluZy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IHN0cmluZyBPcHNFdmFsID0gImV2YWwiOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBPcGVyYXRpb24gdXNlZCB0byBnZXQgYWxsIHRoZSBrZXlzIG9mIGFsbCBzaWRlLWVmZmVjdHMgYXMgcHJvZHVjZWQgYnkgYSBwcmV2aW91c2x5IGV4ZWN1dGVkIFRyYXZlcnNhbC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGNvbnN0IHN0cmluZyBPcHNDbG9zZSA9ICJjbG9zZSI7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIERlZmF1bHQgT3BQcm9jZXNzb3IuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBzdHJpbmcgUHJvY2Vzc29yVHJhdmVyc2FsID0gInRyYXZlcnNhbCI7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIFNlc3Npb24gT3BQcm9jZXNzb3IuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBzdHJpbmcgUHJvY2Vzc29yU2Vzc2lvbiA9ICJzZXNzaW9uIjsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyAgICAgQXJndW1lbnQgbmFtZSB0aGF0IGFsbG93cyB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGVhY2ggUmVzcG9uc2VNZXNzYWdlIHNob3VsZAogICAgICAgICAvLy8gICAgIGNvbnRhaW4gZnJvbSBhIHBhcnRpY3VsYXIgcmVzdWx0IC0gb3ZlcnJpZGVzIHRoZSByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgc2VydmVyIHNldHRpbmcuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CkBAIC04MywyMiArNTMsMTEgQEAKICAgICAgICAgcHVibGljIGNvbnN0IHN0cmluZyBBcmdzQmluZGluZ3MgPSAiYmluZGluZ3MiOwogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBBcmd1bWVudCBuYW1lIHRoYXQgYWxsb3dzIGRlZmluaXRpb24gb2YgYWxpYXMgbmFtZXMgZm9yIEdyYXBoIGFuZCBUcmF2ZXJzYWxTb3VyY2Ugb2JqZWN0cyBvbiB0aGUKLSAgICAgICAgLy8vICAgICByZW1vdGUgc3lzdGVtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIEFyZ3NBbGlhc2VzID0gImFsaWFzZXMiOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBBcmd1bWVudCBuYW1lIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIEdyZW1saW4gdG8gZXZhbHVhdGUuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBjb25zdCBzdHJpbmcgQXJnc0dyZW1saW4gPSAiZ3JlbWxpbiI7CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEFyZ3VtZW50IG5hbWUgdGhhdCBhbGxvd3MgdG8gZGVmaW5lIHRoZSBpZCBvZiBzZXNzaW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIEFyZ3NTZXNzaW9uID0gInNlc3Npb24iOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBBcmd1bWVudCBuYW1lIHRoYXQgYWxsb3dzIGEgdmFsdWUgdGhhdCBpcyBhIGN1c3RvbSBzdHJpbmcgdGhhdCB0aGUgdXNlciBjYW4gcGFzcyB0byBhIHNlcnZlciB0aGF0CiAgICAgICAgIC8vLyAgICAgbWlnaHQgYWNjZXB0IGl0IGZvciBwdXJwb3NlIG9mIGlkZW50aWZ5aW5nIHRoZSBraW5kIG9mIGNsaWVudCBpdCBjYW1lIGZyb20uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CkBAIC0xMjIsOSArODEsMTMgQEAKICAgICAgICAgcHVibGljIGNvbnN0IHN0cmluZyBBcmdNYXRlcmlhbGl6ZVByb3BlcnRpZXMgPSAibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIjsKIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXJndW1lbnQgbmFtZSBmb3IgdGhlIHJlc3BvbnNlIHRvIHRoZSBzZXJ2ZXIgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLiBUaGlzIHZhbHVlIGlzIGRlcGVuZGVudCBvbiB0aGUgU0FTTAotICAgICAgICAvLy8gICAgIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSByZXF1aXJlZCBieSB0aGUgc2VydmVyLgorICAgICAgICAvLy8gICAgIEFyZ3VtZW50IG5hbWUgZm9yIHRoZSB0cmF2ZXJzYWwgc291cmNlIGFsaWFzLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIEFyZ3NTYXNsID0gInNhc2wiOworICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIEFyZ3NHID0gImciOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBBcmd1bWVudCBuYW1lIGZvciBidWxrIHJlc3VsdHMgbW9kZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIGNvbnN0IHN0cmluZyBBcmdzQnVsa1Jlc3VsdHMgPSAiYnVsa1Jlc3VsdHMiOwogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1dlYlNvY2tldENvbm5lY3Rpb24uY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1dlYlNvY2tldENvbm5lY3Rpb24uY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NWFlODAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0RyaXZlci9XZWJTb2NrZXRDb25uZWN0aW9uLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zOwotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLk5ldC5XZWJTb2NrZXRzOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuRHJpdmVyCi17Ci0gICAgaW50ZXJuYWwgaW50ZXJmYWNlIElXZWJTb2NrZXRDb25uZWN0aW9uIDogSURpc3Bvc2FibGUKLSAgICB7Ci0gICAgICAgIFRhc2sgQ29ubmVjdEFzeW5jKFVyaSB1cmksIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKTsKLSAgICAgICAgVGFzayBDbG9zZUFzeW5jKCk7Ci0gICAgICAgIFRhc2sgU2VuZE1lc3NhZ2VBc3luYyhieXRlW10gbWVzc2FnZSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pOwotI2lmIE5FVDZfMF9PUl9HUkVBVEVSCi0gICAgICAgIFRhc2sgU2VuZE1lc3NhZ2VVbmNvbXByZXNzZWRBc3luYyhieXRlW10gbWVzc2FnZSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pOwotI2VuZGlmCi0gICAgICAgIFRhc2s8Ynl0ZVtdPiBSZWNlaXZlTWVzc2FnZUFzeW5jKCk7Ci0gICAgICAgIGJvb2wgSXNPcGVuIHsgZ2V0OyB9Ci0gICAgfQotCi0gICAgaW50ZXJuYWwgY2xhc3MgV2ViU29ja2V0Q29ubmVjdGlvbiA6IElXZWJTb2NrZXRDb25uZWN0aW9uCi0gICAgewotICAgICAgICBwcml2YXRlIGNvbnN0IGludCBSZWNlaXZlQnVmZmVyU2l6ZSA9IDEwMjQ7Ci0gICAgICAgIHByaXZhdGUgY29uc3QgV2ViU29ja2V0TWVzc2FnZVR5cGUgTWVzc2FnZVR5cGUgPSBXZWJTb2NrZXRNZXNzYWdlVHlwZS5CaW5hcnk7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgSUNsaWVudFdlYlNvY2tldCBfY2xpZW50OwotICAgICAgICBwcml2YXRlIGNvbnN0IHN0cmluZyB1c2VyQWdlbnRIZWFkZXJOYW1lID0gIlVzZXItQWdlbnQiOwotCi0gICAgICAgIHB1YmxpYyBXZWJTb2NrZXRDb25uZWN0aW9uKElDbGllbnRXZWJTb2NrZXQgY2xpZW50LCBXZWJTb2NrZXRTZXR0aW5ncyBzZXR0aW5ncykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNldHRpbmdzLkVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjbGllbnQuT3B0aW9ucy5TZXRSZXF1ZXN0SGVhZGVyKHVzZXJBZ2VudEhlYWRlck5hbWUsIFV0aWxzLlVzZXJBZ2VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfY2xpZW50ID0gY2xpZW50OwotCi0jaWYgTkVUNl8wX09SX0dSRUFURVIKLSAgICAgICAgICAgIGlmIChzZXR0aW5ncy5Vc2VDb21wcmVzc2lvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY2xpZW50Lk9wdGlvbnMuRGFuZ2Vyb3VzRGVmbGF0ZU9wdGlvbnMgPSBzZXR0aW5ncy5Db21wcmVzc2lvbk9wdGlvbnM7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIHNldHRpbmdzLldlYlNvY2tldENvbmZpZ3VyYXRpb25DYWxsYmFjaz8uSW52b2tlKF9jbGllbnQuT3B0aW9ucyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBDb25uZWN0QXN5bmMoVXJpIHVyaSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IF9jbGllbnQuQ29ubmVjdEFzeW5jKHVyaSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIENsb3NlQXN5bmMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoQ2xvc2VBbHJlYWR5SW5pdGlhdGVkKSByZXR1cm47Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0Ci0gICAgICAgICAgICAgICAgICAgIF9jbGllbnQuQ2xvc2VBc3luYyhXZWJTb2NrZXRDbG9zZVN0YXR1cy5Ob3JtYWxDbG9zdXJlLCBzdHJpbmcuRW1wdHksIENhbmNlbGxhdGlvblRva2VuLk5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBTd2FsbG93IGV4Y2VwdGlvbnMgc2lsZW50bHkgYXMgdGhlcmUgaXMgbm90aGluZyB0byBkbyB3aGVuIGNsb3NpbmcgZmFpbHMKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbCBDbG9zZUFscmVhZHlJbml0aWF0ZWQgPT4gX2NsaWVudC5TdGF0ZSA9PSBXZWJTb2NrZXRTdGF0ZS5DbG9zZWQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5TdGF0ZSA9PSBXZWJTb2NrZXRTdGF0ZS5BYm9ydGVkIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGllbnQuU3RhdGUgPT0gV2ViU29ja2V0U3RhdGUuQ2xvc2VTZW50OwotICAgICAgICAKLSNpZiBORVQ2XzBfT1JfR1JFQVRFUgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTZW5kTWVzc2FnZVVuY29tcHJlc3NlZEFzeW5jKGJ5dGVbXSBtZXNzYWdlLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgX2NsaWVudC5TZW5kQXN5bmMobmV3IEFycmF5U2VnbWVudDxieXRlPihtZXNzYWdlKSwgTWVzc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgIFdlYlNvY2tldE1lc3NhZ2VGbGFncy5FbmRPZk1lc3NhZ2UgfCBXZWJTb2NrZXRNZXNzYWdlRmxhZ3MuRGlzYWJsZUNvbXByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNlbmRNZXNzYWdlQXN5bmMoYnl0ZVtdIG1lc3NhZ2UsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdAotICAgICAgICAgICAgICAgIF9jbGllbnQuU2VuZEFzeW5jKG5ldyBBcnJheVNlZ21lbnQ8Ynl0ZT4obWVzc2FnZSksIE1lc3NhZ2VUeXBlLCB0cnVlLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrPGJ5dGVbXT4gUmVjZWl2ZU1lc3NhZ2VBc3luYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVzaW5nIHZhciBtcyA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIFdlYlNvY2tldFJlY2VpdmVSZXN1bHQgcmVjZWl2ZWQ7Ci0gICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IGJ5dGVbUmVjZWl2ZUJ1ZmZlclNpemVdOwotCi0gICAgICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciByZWNlaXZlQnVmZmVyID0gbmV3IEFycmF5U2VnbWVudDxieXRlPihidWZmZXIpOwotICAgICAgICAgICAgICAgIHJlY2VpdmVkID0gYXdhaXQgX2NsaWVudC5SZWNlaXZlQXN5bmMocmVjZWl2ZUJ1ZmZlciwgQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlZC5NZXNzYWdlVHlwZSA9PSBXZWJTb2NrZXRNZXNzYWdlVHlwZS5DbG9zZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uKHJlY2VpdmVkLkNsb3NlU3RhdHVzLCByZWNlaXZlZC5DbG9zZVN0YXR1c0Rlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtcy5Xcml0ZShyZWNlaXZlQnVmZmVyLkFycmF5ISwgcmVjZWl2ZUJ1ZmZlci5PZmZzZXQsIHJlY2VpdmVkLkNvdW50KTsKLSAgICAgICAgICAgIH0gd2hpbGUgKCFyZWNlaXZlZC5FbmRPZk1lc3NhZ2UpOwotCi0gICAgICAgICAgICByZXR1cm4gbXMuVG9BcnJheSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgSXNPcGVuID0+IF9jbGllbnQuU3RhdGUgPT0gV2ViU29ja2V0U3RhdGUuT3BlbjsKLQotICAgICAgICAjcmVnaW9uIElEaXNwb3NhYmxlIFN1cHBvcnQKLQotICAgICAgICBwcml2YXRlIGJvb2wgX2Rpc3Bvc2VkOwotCi0gICAgICAgIHB1YmxpYyB2b2lkIERpc3Bvc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICBEaXNwb3NlKHRydWUpOwotICAgICAgICAgICAgR0MuU3VwcHJlc3NGaW5hbGl6ZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2aXJ0dWFsIHZvaWQgRGlzcG9zZShib29sIGRpc3Bvc2luZykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfZGlzcG9zZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2luZykKLSAgICAgICAgICAgICAgICAgICAgX2NsaWVudD8uRGlzcG9zZSgpOwotICAgICAgICAgICAgICAgIF9kaXNwb3NlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAjZW5kcmVnaW9uCi0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvV2ViU29ja2V0U2V0dGluZ3MuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvRHJpdmVyL1dlYlNvY2tldFNldHRpbmdzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGNlODUxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Ecml2ZXIvV2ViU29ja2V0U2V0dGluZ3MuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uTmV0LldlYlNvY2tldHM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Ecml2ZXIKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBIb2xkcyBzZXR0aW5ncyBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25zLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgaW50ZXJuYWwgY2xhc3MgV2ViU29ja2V0U2V0dGluZ3MKLSAgICB7Ci0gICAgICAgIC8vIFdlIGN1cnJlbnRseSBvbmx5IHVzZSB0aGlzIGludGVybmFsbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIHRoZXNlIHZhbHVlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgbGF5ZXJzCi0gICAgICAgIC8vIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIFdlYlNvY2tldENvbm5lY3Rpb24gY2xhc3MuIFdlIGNhbiBtYWtlIHRoaXMgcHVibGljIGhvd2V2ZXIgd2hlbiB3ZSByZWZhY3RvciB0aGUKLSAgICAgICAgLy8gY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLgotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB0aGUgZGVsZWdhdGUgdGhhdCB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgPHNlZSBjcmVmPSJDbGllbnRXZWJTb2NrZXRPcHRpb25zIiAvPgotICAgICAgICAvLy8gICAgIG9iamVjdCB1c2VkIHRvIGNvbmZpZ3VyZSBXZWJTb2NrZXQgY29ubmVjdGlvbnMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBBY3Rpb248Q2xpZW50V2ViU29ja2V0T3B0aW9ucz4/IFdlYlNvY2tldENvbmZpZ3VyYXRpb25DYWxsYmFjayB7IGdldDsgc2V0OyB9Ci0KLSAgICAgICAgcHVibGljIGJvb2wgRW5hYmxlVXNlckFnZW50T25Db25uZWN0IHsgZ2V0OyBzZXQ7IH0KLQotI2lmIE5FVDZfMF9PUl9HUkVBVEVSCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIG9yIHNldHMgd2hldGhlciBjb21wcmVzc2lvbnMgd2lsbCBiZSB1c2VkLiBUaGUgZGVmYXVsdCBpcyB0cnVlLiAoT25seSBhdmFpbGFibGUgc2luY2UgLk5FVCA2LikKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGJvb2wgVXNlQ29tcHJlc3Npb24geyBnZXQ7IHNldDsgfSA9IHRydWU7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyBjb21wcmVzc2lvbiBvcHRpb25zLiAoT25seSBhdmFpbGFibGUgc2luY2UgLlNFVCA2LikKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFdlYlNvY2tldERlZmxhdGVPcHRpb25zIENvbXByZXNzaW9uT3B0aW9ucyB7IGdldDsgc2V0OyB9ID0gbmV3IFdlYlNvY2tldERlZmxhdGVPcHRpb25zKCk7Ci0jZW5kaWYKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0dyZW1saW4uTmV0LmNzcHJvaiBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9HcmVtbGluLk5ldC5jc3Byb2oKaW5kZXggMmI2MjA3Yi4uYzFjNTNhZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L0dyZW1saW4uTmV0LmNzcHJvagorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvR3JlbWxpbi5OZXQuY3Nwcm9qCkBAIC0yNyw3ICsyNyw3IEBACiAKICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlBhY2thZ2UiPgogICAgIDwhLS0gZG8gbm90IGVkaXQgdGhlIHZlcnNpb24gZGlyZWN0bHkgLSBtYXZlbiB1cGRhdGVzIGl0IGF1dG9tYXRpY2FsbHkgLS0+Ci0gICAgPFZlcnNpb24+My44LjItU05BUFNIT1Q8L1ZlcnNpb24+CisgICAgPFZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L1ZlcnNpb24+CiAgICAgPFRpdGxlPkdyZW1saW4uTmV0PC9UaXRsZT4KICAgICA8QXV0aG9ycz5BcGFjaGUgVGlua2VyUG9wPC9BdXRob3JzPgogICAgIDxEZXNjcmlwdGlvbj5HcmVtbGluLk5ldCBmb3IgQXBhY2hlIFRpbmtlclBvcOKEoiBpcyBhIGxhbmd1YWdlIHZhcmlhbnQgYW5kIGRyaXZlciBmb3IgLk5FVC4KQEAgLTcyLDYgKzcyLDcgQEAKICAgPC9Qcm9wZXJ0eUdyb3VwPgogCiAgIDxJdGVtR3JvdXA+CisgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iQVdTU0RLLkNvcmUiIFZlcnNpb249IjMuNy40MDAuMiIgLz4KICAgICA8UGFja2FnZVJlZmVyZW5jZSBJbmNsdWRlPSJNaWNyb3NvZnQuRXh0ZW5zaW9ucy5Mb2dnaW5nLkFic3RyYWN0aW9ucyIgVmVyc2lvbj0iOC4wLjIiIC8+CiAgICAgPFBhY2thZ2VSZWZlcmVuY2UgSW5jbHVkZT0iTWljcm9zb2Z0LlNvdXJjZUxpbmsuR2l0SHViIiBWZXJzaW9uPSI4LjAuMCIgUHJpdmF0ZUFzc2V0cz0iQWxsIiAvPgogICAgIDxQYWNrYWdlUmVmZXJlbmNlIEluY2x1ZGU9IlBvbGx5IiBWZXJzaW9uPSI4LjUuMSIgLz4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1JlbW90ZS9JUmVtb3RlQ29ubmVjdGlvbi5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1JlbW90ZS9JUmVtb3RlQ29ubmVjdGlvbi5jcwppbmRleCBiNThkZDcyLi5hNTcxYzk1IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9SZW1vdGUvSVJlbW90ZUNvbm5lY3Rpb24uY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvUmVtb3RlL0lSZW1vdGVDb25uZWN0aW9uLmNzCkBAIC0zMywxMyArMzMsMTMgQEAKICAgICBwdWJsaWMgaW50ZXJmYWNlIElSZW1vdGVDb25uZWN0aW9uCiAgICAgewogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgU3VibWl0cyA8c2VlIGNyZWY9IklUcmF2ZXJzYWwiIC8+IDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IHRvIGEgc2VydmVyIGFuZCByZXR1cm5zIGEKKyAgICAgICAgLy8vICAgICBTdWJtaXRzIDxzZWUgY3JlZj0iSVRyYXZlcnNhbCIgLz4gPHNlZSBjcmVmPSJUcmF2ZXJzYWwuR3JlbWxpbkxhbmciIC8+IHRvIGEgc2VydmVyIGFuZCByZXR1cm5zIGEKICAgICAgICAgLy8vICAgICA8c2VlIGNyZWY9IklUcmF2ZXJzYWwiIC8+LgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJ5dGVjb2RlIj5UaGUgPHNlZSBjcmVmPSJCeXRlY29kZSIgLz4gdG8gc2VuZC48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyZW1saW5MYW5nIj5UaGUgPHNlZSBjcmVmPSJUcmF2ZXJzYWwuR3JlbWxpbkxhbmciIC8+IHRvIHNlbmQuPC9wYXJhbT4KICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CiAgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgPHNlZSBjcmVmPSJJVHJhdmVyc2FsIiAvPiB3aXRoIHRoZSByZXN1bHRzIGFuZCBvcHRpb25hbCBzaWRlLWVmZmVjdHMuPC9yZXR1cm5zPgotICAgICAgICBUYXNrPElUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPj4gU3VibWl0QXN5bmM8VFN0YXJ0LCBURW5kPihCeXRlY29kZSBieXRlY29kZSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKKyAgICAgICAgVGFzazxJVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4+IFN1Ym1pdEFzeW5jPFRTdGFydCwgVEVuZD4oR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIENyZWF0ZXMgYSA8c2VlIGNyZWY9IlJlbW90ZVRyYW5zYWN0aW9uIiAvPiBpbiB0aGUgY29udGV4dCBvZiBhIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWxTb3VyY2UiIC8+IGRlc2lnbmVkIHRvIHdvcmsgd2l0aApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvUmVtb3RlL1JlbW90ZVN0cmF0ZWd5LmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvUmVtb3RlL1JlbW90ZVN0cmF0ZWd5LmNzCmluZGV4IDE5MDZhYjguLjNmMjc2M2IgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1JlbW90ZS9SZW1vdGVTdHJhdGVneS5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9SZW1vdGUvUmVtb3RlU3RyYXRlZ3kuY3MKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgQXBwbHlBc3luYzxUU3RhcnQsIFRFbmQ+KElUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiB0cmF2ZXJzYWwsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHRyYXZlcnNhbC5UcmF2ZXJzZXJzICE9IG51bGwpIHJldHVybjsKLSAgICAgICAgICAgIHZhciByZW1vdGVUcmF2ZXJzYWwgPSBhd2FpdCBfcmVtb3RlQ29ubmVjdGlvbi5TdWJtaXRBc3luYzxUU3RhcnQsIFRFbmQ+KHRyYXZlcnNhbC5CeXRlY29kZSwgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICB2YXIgcmVtb3RlVHJhdmVyc2FsID0gYXdhaXQgX3JlbW90ZUNvbm5lY3Rpb24uU3VibWl0QXN5bmM8VFN0YXJ0LCBURW5kPih0cmF2ZXJzYWwuR3JlbWxpbkxhbmcsIGNhbmNlbGxhdGlvblRva2VuKQogICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7CiAgICAgICAgICAgICB0cmF2ZXJzYWwuVHJhdmVyc2VycyA9IHJlbW90ZVRyYXZlcnNhbC5UcmF2ZXJzZXJzOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9SZW1vdGUvUmVtb3RlVHJhbnNhY3Rpb24uY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9SZW1vdGUvUmVtb3RlVHJhbnNhY3Rpb24uY3MKaW5kZXggYzY2MmFiZC4uOTllN2IwYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvUmVtb3RlL1JlbW90ZVRyYW5zYWN0aW9uLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1JlbW90ZS9SZW1vdGVUcmFuc2FjdGlvbi5jcwpAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUcmFuc2FjdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgb24gdGhpcyBvYmplY3QiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9nID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKF9nLlRyYXZlcnNhbFN0cmF0ZWdpZXMsIF9nLkJ5dGVjb2RlLCBfc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbik7CisgICAgICAgICAgICBfZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShfZy5UcmF2ZXJzYWxTdHJhdGVnaWVzLCBfZy5HcmVtbGluTGFuZywgX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuIF9nOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLmNzCmluZGV4IDhiZDQ2ZGMuLmFmZjJkNGMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0Fub255bW91c1RyYXZlcnNhbFNvdXJjZS5jcwpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IkdyYXBoVHJhdmVyc2FsU291cmNlIiAvPiBjb25maWd1cmVkIHRvIHVzZSB0aGUgcHJvdmlkZWQgPHNlZSBjcmVmPSJJUmVtb3RlQ29ubmVjdGlvbiIgLz4uPC9yZXR1cm5zPgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aChJUmVtb3RlQ29ubmVjdGlvbiByZW1vdGVDb25uZWN0aW9uKSA9PgogICAgICAgICAgICAgbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oKSwKLSAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoKSwgcmVtb3RlQ29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgbmV3IEdyZW1saW5MYW5nKCksIHJlbW90ZUNvbm5lY3Rpb24pOwogICAgIH0KIAogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9CaW5kaW5nLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0JpbmRpbmcuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5ZmRlZTAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0JpbmRpbmcuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbAotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIEFzc29jaWF0ZXMgYSB2YXJpYWJsZSB3aXRoIGEgdmFsdWUuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgQmluZGluZyA6IElFcXVhdGFibGU8QmluZGluZz4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJCaW5kaW5nIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJrZXkiPlRoZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSA8c2VlIGNyZWY9IkJpbmRpbmciIC8+LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1ZSBvZiB0aGUgPHNlZSBjcmVmPSJCaW5kaW5nIiAvPi48L3BhcmFtPgotICAgICAgICBwdWJsaWMgQmluZGluZyhzdHJpbmcga2V5LCBvYmplY3Q/IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBLZXkgPSBrZXk7Ci0gICAgICAgICAgICBWYWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIGtleSB0aGF0IGlkZW50aWZpZXMgdGhlIDxzZWUgY3JlZj0iQmluZGluZyIgLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgS2V5IHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIHZhbHVlIG9mIHRoZSA8c2VlIGNyZWY9IkJpbmRpbmciIC8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgb2JqZWN0PyBWYWx1ZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYm9vbCBFcXVhbHMoQmluZGluZz8gb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdGhlciA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBLZXkgPT0gb3RoZXIuS2V5ICYmIChWYWx1ZT8uRXF1YWxzKG90aGVyLlZhbHVlKSA/PyBvdGhlci5WYWx1ZSA9PSBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0PyBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhudWxsLCBvdGhlcikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHModGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChvdGhlci5HZXRUeXBlKCkgIT0gR2V0VHlwZSgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gRXF1YWxzKG90aGVyIGFzIEJpbmRpbmcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bmNoZWNrZWQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChLZXk/LkdldEhhc2hDb2RlKCkgPz8gMCkgKiAzOTcpIF4gKFZhbHVlPy5HZXRIYXNoQ29kZSgpID8/IDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9CaW5kaW5ncy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9CaW5kaW5ncy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU2MDJjYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvQmluZGluZ3MuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbAotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIEJpbmRpbmdzIGFyZSB1c2VkIHRvIGFzc29jaWF0ZSBhIHZhcmlhYmxlIHdpdGggYSB2YWx1ZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBCaW5kaW5ncwotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgYW4gaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQmluZGluZ3MiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIEJpbmRpbmdzIEluc3RhbmNlIHsgZ2V0OyB9ID0gbmV3KCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVGhyZWFkTG9jYWw8RGljdGlvbmFyeTxvYmplY3QsIHN0cmluZz4+IEJvdW5kVmFyaWFibGVCeVZhbHVlID0gbmV3KCk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEJpbmRzIHRoZSB2YXJpYWJsZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhcmlhYmxlIj5UaGUgdmFyaWFibGUgdG8gYmluZC48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd2hpY2ggdGhlIHZhcmlhYmxlIHNob3VsZCBiZSBib3VuZC48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIGJvdW5kIHZhbHVlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIFRWIE9mPFRWPihzdHJpbmcgdmFyaWFibGUsIFRWIHZhbHVlKSB3aGVyZSBUViA6IG5vdG51bGwKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGRpY3QgPSBCb3VuZFZhcmlhYmxlQnlWYWx1ZS5WYWx1ZTsKLSAgICAgICAgICAgIGlmIChkaWN0ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGljdCA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgc3RyaW5nPigpOwotICAgICAgICAgICAgICAgIEJvdW5kVmFyaWFibGVCeVZhbHVlLlZhbHVlID0gZGljdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRpY3RbdmFsdWVdID0gdmFyaWFibGU7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgc3RyaW5nPyBHZXRCb3VuZFZhcmlhYmxlPFRWPihUViB2YWx1ZSkgd2hlcmUgVFYgOiBub3RudWxsCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBkaWN0ID0gQm91bmRWYXJpYWJsZUJ5VmFsdWUuVmFsdWU7Ci0gICAgICAgICAgICBpZiAoZGljdCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgZGljdC5UcnlHZXRWYWx1ZSh2YWx1ZSwgb3V0IHZhciB2YXJpYWJsZSk7Ci0gICAgICAgICAgICByZXR1cm4gdmFyaWFibGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRlcm5hbCBzdGF0aWMgdm9pZCBDbGVhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJvdW5kVmFyaWFibGVCeVZhbHVlLlZhbHVlPy5DbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhNWU4Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvQnl0ZWNvZGUuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotI3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbAotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIEEgbGFuZ3VhZ2UgYWdub3N0aWMgcmVwcmVzZW50YXRpb24gb2YgPHNlZSBjcmVmPSJJVHJhdmVyc2FsIiAvPiBtdXRhdGlvbnMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHJlbWFya3M+Ci0gICAgLy8vICAgICBCeXRlY29kZSBpcyBzaW1wbHkgYSBsaXN0IG9mIG9yZGVyZWQgaW5zdHJ1Y3Rpb25zLgotICAgIC8vLyAgICAgQnl0ZWNvZGUgY2FuIGJlIHNlcmlhbGl6ZWQgYmV0d2VlbiBlbnZpcm9ubWVudHMgYW5kIG1hY2hpbmVzIGJ5IHdheSBvZiBhIEdyYXBoU09OIHJlcHJlc2VudGF0aW9uLgotICAgIC8vLyAgICAgVGh1cywgR3JlbWxpbi5OZXQgY2FuIGNyZWF0ZSBieXRlY29kZSBpbiBDIyBhbmQgc2hpcCBpdCB0byBHcmVtbGluLUphdmEgZm9yIGV2YWx1YXRpb24gaW4gSmF2YS4KLSAgICAvLy8gPC9yZW1hcmtzPgotICAgIHB1YmxpYyBjbGFzcyBCeXRlY29kZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgb2JqZWN0W10gRW1wdHlBcnJheSA9IEFycmF5LkVtcHR5PG9iamVjdD4oKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQnl0ZWNvZGUoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJ5dGVDb2RlIj5BbHJlYWR5IGV4aXN0aW5nIDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IHRoYXQgc2hvdWxkIGJlIGNsb25lZC48L3BhcmFtPgotICAgICAgICBwdWJsaWMgQnl0ZWNvZGUoQnl0ZWNvZGUgYnl0ZUNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNvdXJjZUluc3RydWN0aW9ucyA9IG5ldyBMaXN0PEluc3RydWN0aW9uPihieXRlQ29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMpOwotICAgICAgICAgICAgU3RlcEluc3RydWN0aW9ucyA9IG5ldyBMaXN0PEluc3RydWN0aW9uPihieXRlQ29kZS5TdGVwSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSB0cmF2ZXJzYWwgc291cmNlIGluc3RydWN0aW9ucy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIExpc3Q8SW5zdHJ1Y3Rpb24+IFNvdXJjZUluc3RydWN0aW9ucyB7IGdldDsgfSA9IG5ldygpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSA8c2VlIGNyZWY9IklUcmF2ZXJzYWwiIC8+IGluc3RydWN0aW9ucy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIExpc3Q8SW5zdHJ1Y3Rpb24+IFN0ZXBJbnN0cnVjdGlvbnMgeyBnZXQ7IH0gPSBuZXcoKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQWRkIGEgdHJhdmVyc2FsIHNvdXJjZSBpbnN0cnVjdGlvbiB0byB0aGUgYnl0ZWNvZGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic291cmNlTmFtZSI+VGhlIHRyYXZlcnNhbCBzb3VyY2UgbWV0aG9kIG5hbWUgKGUuZy4gd2l0aFNhY2soKSkuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJhcmdzIj5UaGUgdHJhdmVyc2FsIHNvdXJjZSBtZXRob2QgYXJndW1lbnRzLjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyB2b2lkIEFkZFNvdXJjZShzdHJpbmcgc291cmNlTmFtZSwgcGFyYW1zIG9iamVjdD9bXSBhcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBTb3VyY2VJbnN0cnVjdGlvbnMuQWRkKG5ldyBJbnN0cnVjdGlvbihzb3VyY2VOYW1lLCBGbGF0dGVuQXJndW1lbnRzKGFyZ3MpKSk7Ci0gICAgICAgICAgICBCaW5kaW5ncy5DbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEFkZHMgYSA8c2VlIGNyZWY9IklUcmF2ZXJzYWwiIC8+IGluc3RydWN0aW9uIHRvIHRoZSBieXRlY29kZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdGVwTmFtZSI+VGhlIHRyYXZlcnNhbCBtZXRob2QgbmFtZSAoZS5nLiBvdXQoKSkuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJhcmdzIj5UaGUgdHJhdmVyc2FsIG1ldGhvZCBhcmd1bWVudHMuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHZvaWQgQWRkU3RlcChzdHJpbmcgc3RlcE5hbWUsIHBhcmFtcyBvYmplY3Q/W10gYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgU3RlcEluc3RydWN0aW9ucy5BZGQobmV3IEluc3RydWN0aW9uKHN0ZXBOYW1lLCBGbGF0dGVuQXJndW1lbnRzKGFyZ3MpKSk7Ci0gICAgICAgICAgICBCaW5kaW5ncy5DbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBvYmplY3Q/W10gRmxhdHRlbkFyZ3VtZW50cyhvYmplY3Q/W10gYXJndW1lbnRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzLkxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBFbXB0eUFycmF5OwotICAgICAgICAgICAgdmFyIGZsYXRBcmd1bWVudHMgPSBuZXcgTGlzdDxvYmplY3Q/PigpOwotICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFyZyBpbiBhcmd1bWVudHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZyBpcyBvYmplY3RbXSBvYmplY3RzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxhdEFyZ3VtZW50cy5BZGRSYW5nZShvYmplY3RzLlNlbGVjdChuZXN0T2JqZWN0ID0+IENvbnZlcnRBcmd1bWVudChuZXN0T2JqZWN0LCB0cnVlKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmbGF0QXJndW1lbnRzLkFkZChDb252ZXJ0QXJndW1lbnQoYXJnLCB0cnVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZsYXRBcmd1bWVudHMuVG9BcnJheSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgW3JldHVybjogTm90TnVsbElmTm90TnVsbCgiYXJndW1lbnQiKV0KLSAgICAgICAgcHJpdmF0ZSBvYmplY3Q/IENvbnZlcnRBcmd1bWVudChvYmplY3Q/IGFyZ3VtZW50LCBib29sIHNlYXJjaEJpbmRpbmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobnVsbCA9PSBhcmd1bWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNlYXJjaEJpbmRpbmdzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZSA9IEJpbmRpbmdzLkdldEJvdW5kVmFyaWFibGUoYXJndW1lbnQpOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmcodmFyaWFibGUsIENvbnZlcnRBcmd1bWVudChhcmd1bWVudCwgZmFsc2UpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFyZ3VtZW50IGlzIElUcmF2ZXJzYWwgdHJhdmVyc2FsICYmICF0cmF2ZXJzYWwuSXNBbm9ueW1vdXMpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAkIlRoZSBjaGlsZCB0cmF2ZXJzYWwgb2Yge3RyYXZlcnNhbC5CeXRlY29kZX0gd2FzIG5vdCBzcGF3bmVkIGFub255bW91c2x5IC0gdXNlIHRoZSBfXyBjbGFzcyByYXRoZXIgdGhhbiBhIFRyYXZlcnNhbFNvdXJjZSB0byBjb25zdHJ1Y3QgdGhlIGNoaWxkIHRyYXZlcnNhbCIpOwotCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChJc0RpY3Rpb25hcnlUeXBlKGFyZ3VtZW50LkdldFR5cGUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD8+KCk7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAoRGljdGlvbmFyeUVudHJ5IGl0ZW0gaW4gKElEaWN0aW9uYXJ5KWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZGljdFtDb252ZXJ0QXJndW1lbnQoaXRlbS5LZXksIHRydWUpXSA9IENvbnZlcnRBcmd1bWVudChpdGVtLlZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoSXNMaXN0VHlwZShhcmd1bWVudC5HZXRUeXBlKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBsaXN0ID0gbmV3IExpc3Q8b2JqZWN0Pz4oKChJTGlzdCkgYXJndW1lbnQpLkNvdW50KTsKLSAgICAgICAgICAgICAgICBsaXN0LkFkZFJhbmdlKGZyb20gb2JqZWN0PyBpdGVtIGluIChJTGlzdClhcmd1bWVudCBzZWxlY3QgQ29udmVydEFyZ3VtZW50KGl0ZW0sIHRydWUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChJc0hhc2hTZXRUeXBlKGFyZ3VtZW50LkdldFR5cGUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIHNldCA9IG5ldyBIYXNoU2V0PG9iamVjdD8+KCk7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gKElFbnVtZXJhYmxlKWFyZ3VtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0LkFkZChDb252ZXJ0QXJndW1lbnQoaXRlbSwgdHJ1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sIElzRGljdGlvbmFyeVR5cGUoVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZS5Jc0NvbnN0cnVjdGVkR2VuZXJpY1R5cGUgJiYgdHlwZS5HZXRHZW5lcmljVHlwZURlZmluaXRpb24oKSA9PSB0eXBlb2YoRGljdGlvbmFyeTwsPik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2wgSXNMaXN0VHlwZShUeXBlIHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0eXBlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJiB0eXBlLkdldEdlbmVyaWNUeXBlRGVmaW5pdGlvbigpID09IHR5cGVvZihMaXN0PD4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sIElzSGFzaFNldFR5cGUoVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZS5Jc0NvbnN0cnVjdGVkR2VuZXJpY1R5cGUgJiYgdHlwZS5HZXRHZW5lcmljVHlwZURlZmluaXRpb24oKSA9PSB0eXBlb2YoSGFzaFNldDw+KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICQiW1t7c3RyaW5nLkpvaW4oIiwgIiwgU291cmNlSW5zdHJ1Y3Rpb25zKX1dLCBbe3N0cmluZy5Kb2luKCIsICIsIFN0ZXBJbnN0cnVjdGlvbnMpfV1dIjsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9DYXJkaW5hbGl0eVZhbHVlLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0NhcmRpbmFsaXR5VmFsdWUuY3MKaW5kZXggZjZkYWFlOS4uYzU2Nzg5YSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0NhcmRpbmFsaXR5VmFsdWUuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0NhcmRpbmFsaXR5VmFsdWUuY3MKQEAgLTIyLDcxICsyMiw2MCBAQAogI2VuZHJlZ2lvbgogCiB1c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKIAogbmFtZXNwYWNlIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsCiB7CiAgICAgLy8vIDxzdW1tYXJ5PgogICAgIC8vLyAgICAgSG9sZHMgYSBwcm9wZXJ0eSB2YWx1ZSB3aXRoIHRoZSBhc3NvY2lhdGVkIDxzZWUgY3JlZj0iVHJhdmVyc2FsLkNhcmRpbmFsaXR5IiAvPi4KICAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBDYXJkaW5hbGl0eVZhbHVlIDogQnl0ZWNvZGUKKyAgICBwdWJsaWMgY2xhc3MgQ2FyZGluYWxpdHlWYWx1ZQogICAgIHsKICAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIEdldHMgdGhlIDxzZWUgY3JlZj0iVHJhdmVyc2FsLkNhcmRpbmFsaXR5IiAvPiBmb3IgdGhlIHZhbHVlLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQ2FyZGluYWxpdHk/IENhcmRpbmFsaXR5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdldAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgcHVibGljIENhcmRpbmFsaXR5PyBDYXJkaW5hbGl0eSB7IGdldDsgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBHZXRzIHRoZSB2YWx1ZS4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIG9iamVjdD8gVmFsdWUKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1sxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBwdWJsaWMgb2JqZWN0PyBWYWx1ZSB7IGdldDsgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJDYXJkaW5hbGl0eVZhbHVlIiAvPiBjbGFzcy4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIENhcmRpbmFsaXR5VmFsdWUoQ2FyZGluYWxpdHkgY2FyZCwgb2JqZWN0IHZhbCkKKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYXJkaW5hbGl0eSI+VGhlIGNhcmRpbmFsaXR5IGZvciB0aGUgdmFsdWUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHByb3BlcnR5IHZhbHVlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFyZ3VtZW50TnVsbEV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gPHBhcmFtcmVmIG5hbWU9ImNhcmRpbmFsaXR5IiAvPiBpcyBudWxsLjwvZXhjZXB0aW9uPgorICAgICAgICBwdWJsaWMgQ2FyZGluYWxpdHlWYWx1ZShDYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSwgb2JqZWN0PyB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhcmQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCJDYXJkaW5hbGl0eSBhcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB0aGlzLkFkZFNvdXJjZSgiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIsIGNhcmQsIHZhbCk7CisgICAgICAgICAgICBpZiAoY2FyZGluYWxpdHkgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKG5hbWVvZihjYXJkaW5hbGl0eSksICJDYXJkaW5hbGl0eSBhcmd1bWVudCBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgICAgICBDYXJkaW5hbGl0eSA9IGNhcmRpbmFsaXR5OworICAgICAgICAgICAgVmFsdWUgPSB2YWx1ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBDcmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iQ2FyZGluYWxpdHlWYWx1ZSIgLz4gd2l0aCBhIHBhcnRpY3VsYXIgdmFsdWUgYW5kIFNpbmdsZSA8c2VlIGNyZWY9IkNhcmRpbmFsaXR5IiAvPi4KKyAgICAgICAgLy8vICAgICBDcmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iQ2FyZGluYWxpdHlWYWx1ZSIgLz4gd2l0aCBhIHBhcnRpY3VsYXIgdmFsdWUgYW5kIFNpbmdsZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5DYXJkaW5hbGl0eSIgLz4uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgQ2FyZGluYWxpdHlWYWx1ZSBTaW5nbGUob2JqZWN0IHZhbHVlKQorICAgICAgICBwdWJsaWMgc3RhdGljIENhcmRpbmFsaXR5VmFsdWUgU2luZ2xlKG9iamVjdD8gdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZGluYWxpdHlWYWx1ZShDYXJkaW5hbGl0eS5TaW5nbGUsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZGluYWxpdHlWYWx1ZShUcmF2ZXJzYWwuQ2FyZGluYWxpdHkuU2luZ2xlLCB2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG5ldyA8c2VlIGNyZWY9IkNhcmRpbmFsaXR5VmFsdWUiIC8+IHdpdGggYSBwYXJ0aWN1bGFyIHZhbHVlIGFuZCBTZXQgPHNlZSBjcmVmPSJDYXJkaW5hbGl0eSIgLz4uCisgICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG5ldyA8c2VlIGNyZWY9IkNhcmRpbmFsaXR5VmFsdWUiIC8+IHdpdGggYSBwYXJ0aWN1bGFyIHZhbHVlIGFuZCBTZXQgPHNlZSBjcmVmPSJUcmF2ZXJzYWwuQ2FyZGluYWxpdHkiIC8+LgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIENhcmRpbmFsaXR5VmFsdWUgU2V0KG9iamVjdCB2YWx1ZSkKKyAgICAgICAgcHVibGljIHN0YXRpYyBDYXJkaW5hbGl0eVZhbHVlIFNldChvYmplY3Q/IHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5VmFsdWUoQ2FyZGluYWxpdHkuU2V0LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5VmFsdWUoVHJhdmVyc2FsLkNhcmRpbmFsaXR5LlNldCwgdmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIENyZWF0ZXMgYSBuZXcgPHNlZSBjcmVmPSJDYXJkaW5hbGl0eVZhbHVlIiAvPiB3aXRoIGEgcGFydGljdWxhciB2YWx1ZSBhbmQgTGlzdCA8c2VlIGNyZWY9IkNhcmRpbmFsaXR5IiAvPi4KKyAgICAgICAgLy8vICAgICBDcmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iQ2FyZGluYWxpdHlWYWx1ZSIgLz4gd2l0aCBhIHBhcnRpY3VsYXIgdmFsdWUgYW5kIExpc3QgPHNlZSBjcmVmPSJUcmF2ZXJzYWwuQ2FyZGluYWxpdHkiIC8+LgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIENhcmRpbmFsaXR5VmFsdWUgTGlzdChvYmplY3QgdmFsdWUpCisgICAgICAgIHB1YmxpYyBzdGF0aWMgQ2FyZGluYWxpdHlWYWx1ZSBMaXN0KG9iamVjdD8gdmFsdWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2FyZGluYWxpdHlWYWx1ZShDYXJkaW5hbGl0eS5MaXN0LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5VmFsdWUoVHJhdmVyc2FsLkNhcmRpbmFsaXR5Lkxpc3QsIHZhbHVlKTsKICAgICAgICAgfQogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvRGVmYXVsdFRyYXZlcnNhbC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9EZWZhdWx0VHJhdmVyc2FsLmNzCmluZGV4IDg0NjEwNmEuLjI3ZDhiNGQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9EZWZhdWx0VHJhdmVyc2FsLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9EZWZhdWx0VHJhdmVyc2FsLmNzCkBAIC0zOSw5ICszOSw5IEBACiAgICAgICAgIHByaXZhdGUgSUVudW1lcmF0b3I8VHJhdmVyc2VyPj8gX3RyYXZlcnNlckVudW1lcmF0b3I7CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIDxzZWUgY3JlZj0iVHJhdmVyc2FsLkJ5dGVjb2RlIiAvPiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRyYXZlcnNhbC4KKyAgICAgICAgLy8vICAgICBHZXRzIHRoZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5HcmVtbGluTGFuZyIgLz4gcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0cmF2ZXJzYWwuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCBCeXRlY29kZSBCeXRlY29kZSB7IGdldDsgfQorICAgICAgICBwdWJsaWMgYWJzdHJhY3QgR3JlbWxpbkxhbmcgR3JlbWxpbkxhbmcgeyBnZXQ7IH0KICAgICAgICAgCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgdHJhdmVyc2FsIHdhcyBzcGF3bmVkIGFub255bW91c2x5IG9yIG5vdC4KQEAgLTIyOSw3ICsyMjksNyBAQAogICAgICAgICAvLy8gPHJldHVybnM+VGhlIGZ1bGx5IGRyYWluZWQgdHJhdmVyc2FsLjwvcmV0dXJucz4KICAgICAgICAgcHVibGljIElUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBJdGVyYXRlKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZGlzY2FyZCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGlzY2FyZCIpOwogICAgICAgICAgICAgd2hpbGUgKE1vdmVOZXh0KCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvR1ZhbHVlLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dWYWx1ZS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGM0ZWIwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dWYWx1ZS5jcwpAQCAtMCwwICsxLDEyOCBAQAorI3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gICAgIE5vbi1nZW5lcmljIGludGVyZmFjZSBmb3IgR1ZhbHVlIHRvIGFsbG93IHR5cGUtYWdub3N0aWMgYWNjZXNzIGluIEdyZW1saW5MYW5nLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGludGVyZmFjZSBJR1ZhbHVlCisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgcGFyYW1ldGVyIG5hbWUuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHN0cmluZyBOYW1lIHsgZ2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhbiBvYmplY3QuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIG9iamVjdD8gT2JqZWN0VmFsdWUgeyBnZXQ7IH0KKyAgICB9CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vICAgICBBIG5hbWVkIHBhcmFtZXRlciB3cmFwcGVyIHRoYXQgYXNzb2NpYXRlcyBhIHVzZXItZGVmaW5lZCBuYW1lIHdpdGggYSB2YWx1ZS4KKyAgICAvLy8gICAgIEdyZW1saW5MYW5nIHJlbmRlcnMgdGhlIG5hbWUgaW4gdGhlIGdyZW1saW4gc3RyaW5nIGFuZCBzdG9yZXMgdGhlIG5hbWUtdG8tdmFsdWUKKyAgICAvLy8gICAgIG1hcHBpbmcgaW4gdGhlIHBhcmFtZXRlcnMgZGljdGlvbmFyeS4gUmVwbGFjZXMgdGhlIGxlZ2FjeSBCaW5kaW5nL0JpbmRpbmdzIG1lY2hhbmlzbS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlQiPlRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUuPC90eXBlcGFyYW0+CisgICAgcHVibGljIGNsYXNzIEdWYWx1ZTxUPiA6IElHVmFsdWUsIElFcXVhdGFibGU8R1ZhbHVlPFQ+PgorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdWYWx1ZXtUfSIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+VGhlIHBhcmFtZXRlciBuYW1lLiBNdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllciwgbm90IG51bGwsIGFuZCBub3Qgc3RhcnQgd2l0aCB1bmRlcnNjb3JlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSBwYXJhbWV0ZXIgdmFsdWUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnROdWxsRXhjZXB0aW9uIj5UaHJvd24gd2hlbiA8cGFyYW1yZWYgbmFtZT0ibmFtZSIgLz4gaXMgbnVsbC48L2V4Y2VwdGlvbj4KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRFeGNlcHRpb24iPlRocm93biB3aGVuIDxwYXJhbXJlZiBuYW1lPSJuYW1lIiAvPiBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyLjwvZXhjZXB0aW9uPgorICAgICAgICBwdWJsaWMgR1ZhbHVlKHN0cmluZyBuYW1lLCBUIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmFtZSA9PSBudWxsKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKG5hbWUpLCAiVGhlIHBhcmFtZXRlciBuYW1lIGNhbm5vdCBiZSBudWxsLiIpOworCisgICAgICAgICAgICBpZiAobmFtZS5MZW5ndGggPT0gMCkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oJCJJbnZhbGlkIHBhcmFtZXRlciBuYW1lIFt7bmFtZX1dLiIpOworCisgICAgICAgICAgICBpZiAobmFtZVswXSA9PSAnXycpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCQiSW52YWxpZCBHVmFsdWUgbmFtZSB7bmFtZX0uIFNob3VsZCBub3Qgc3RhcnQgd2l0aCBfLiIpOworCisgICAgICAgICAgICBpZiAoIWNoYXIuSXNMZXR0ZXIobmFtZVswXSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCQiSW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBbe25hbWV9XS4iKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuYW1lLkxlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghY2hhci5Jc0xldHRlck9yRGlnaXQobmFtZVtpXSkpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigkIkludmFsaWQgcGFyYW1ldGVyIG5hbWUgW3tuYW1lfV0uIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE5hbWUgPSBuYW1lOworICAgICAgICAgICAgVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIHRoZSBwYXJhbWV0ZXIgbmFtZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0cmluZyBOYW1lIHsgZ2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIHBhcmFtZXRlciB2YWx1ZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIFQgVmFsdWUgeyBnZXQ7IH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIG9iamVjdD8gT2JqZWN0VmFsdWUgPT4gVmFsdWU7CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhHVmFsdWU8VD4/IG90aGVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG51bGwsIG90aGVyKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIE5hbWUgPT0gb3RoZXIuTmFtZSAmJiBFcXVhbHMoVmFsdWUsIG90aGVyLlZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0PyBvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMobnVsbCwgb2JqKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvYmopKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChvYmouR2V0VHlwZSgpICE9IEdldFR5cGUoKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIEVxdWFscygoR1ZhbHVlPFQ+KW9iaik7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuY2hlY2tlZAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoTmFtZS5HZXRIYXNoQ29kZSgpICogMzk3KSBeIChWYWx1ZSAhPSBudWxsID8gVmFsdWUuR2V0SGFzaENvZGUoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJCJHVmFsdWUoe05hbWV9LCB7VmFsdWV9KSI7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhPcC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaE9wLmNzCmluZGV4IGUxYTliZjUuLjlhYjM4Y2UgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaE9wLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaE9wLmNzCkBAIC0yNCw3ICsyNCw3IEBACiBuYW1lc3BhY2UgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwKIHsKICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBBIGdyYXBoIG9wZXJhdGlvbiBpcyBhIHN0YXRpYyA8c2VlIGNyZWY9IkJ5dGVjb2RlIiAvPiBmb3JtIHRoYXQgZG9lcyBub3QgdHJhbnNsYXRlIHRvIGEgdHJhdmVyc2FsIGJ1dCBpbnN0ZWFkCisgICAgLy8vICAgICBBIGdyYXBoIG9wZXJhdGlvbiBpcyBhIHN0YXRpYyA8c2VlIGNyZWY9IkdyZW1saW5MYW5nIiAvPiBmb3JtIHRoYXQgZG9lcyBub3QgdHJhbnNsYXRlIHRvIGEgdHJhdmVyc2FsIGJ1dCBpbnN0ZWFkCiAgICAgLy8vICAgICByZWZlcnMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbiB0byBwZXJmb3JtIG9uIGEgZ3JhcGggaW5zdGFuY2UuCiAgICAgLy8vIDwvc3VtbWFyeT4KICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoT3AKQEAgLTMyLDE4ICszMiwxOCBAQAogICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyAgICAgQ29tbWl0IGEgdHJhbnNhY3Rpb24uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgQnl0ZWNvZGUgQ29tbWl0IHsgZ2V0OyB9ID0gQ3JlYXRlR3JhcGhPcCgidHgiLCAiY29tbWl0Iik7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkxhbmcgQ29tbWl0IHsgZ2V0OyB9ID0gQ3JlYXRlR3JhcGhPcCgidHgiLCAiY29tbWl0Iik7CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIFJvbGxiYWNrIGEgdHJhbnNhY3Rpb24uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgQnl0ZWNvZGUgUm9sbGJhY2sgeyBnZXQ7IH0gPSBDcmVhdGVHcmFwaE9wKCJ0eCIsICJyb2xsYmFjayIpOworICAgICAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5MYW5nIFJvbGxiYWNrIHsgZ2V0OyB9ID0gQ3JlYXRlR3JhcGhPcCgidHgiLCAicm9sbGJhY2siKTsKIAotICAgICAgICBwcml2YXRlIHN0YXRpYyBCeXRlY29kZSBDcmVhdGVHcmFwaE9wKHN0cmluZyBuYW1lLCBvYmplY3QgdmFsdWUpCisgICAgICAgIHByaXZhdGUgc3RhdGljIEdyZW1saW5MYW5nIENyZWF0ZUdyYXBoT3Aoc3RyaW5nIG5hbWUsIG9iamVjdCB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTb3VyY2UobmFtZSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlOworICAgICAgICAgICAgdmFyIGdyZW1saW5MYW5nID0gbmV3IEdyZW1saW5MYW5nKCk7CisgICAgICAgICAgICBncmVtbGluTGFuZy5BZGRTb3VyY2UobmFtZSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGdyZW1saW5MYW5nOwogICAgICAgICB9CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaFRyYXZlcnNhbC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaFRyYXZlcnNhbC5jcwppbmRleCA3OTdlMzczLi5kZTAxZGYzIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhUcmF2ZXJzYWwuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyYXBoVHJhdmVyc2FsLmNzCkBAIC0yNSw3ICsyNSw2IEBACiB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CiB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKIHVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwogdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwogCiBuYW1lc3BhY2UgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwKQEAgLTM5LDcgKzM4LDcgQEAKICAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmFwaFRyYXZlcnNhbHtTVHlwZSwgRVR5cGV9IiAvPiBjbGFzcy4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsKCkKLSAgICAgICAgICAgIDogdGhpcyhuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KCksIG5ldyBCeXRlY29kZSgpLCB0cnVlKQorICAgICAgICAgICAgOiB0aGlzKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oKSwgbmV3IEdyZW1saW5MYW5nKCksIHRydWUpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC00Nyw5ICs0Niw5IEBACiAgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWx7U1R5cGUsIEVUeXBlfSIgLz4gY2xhc3MuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhdmVyc2FsU3RyYXRlZ2llcyI+VGhlIHRyYXZlcnNhbCBzdHJhdGVnaWVzIHRvIGJlIHVzZWQgYnkgdGhpcyBncmFwaCB0cmF2ZXJzYWwgYXQgZXZhbHVhdGlvbiB0aW1lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYnl0ZWNvZGUiPlRoZSA8c2VlIGNyZWY9IkJ5dGVjb2RlIiAvPiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGlzIGdyYXBoIHRyYXZlcnNhbC48L3BhcmFtPgotICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwoSUNvbGxlY3Rpb248SVRyYXZlcnNhbFN0cmF0ZWd5PiB0cmF2ZXJzYWxTdHJhdGVnaWVzLCBCeXRlY29kZSBieXRlY29kZSkKLSAgICAgICAgICAgIDogdGhpcyh0cmF2ZXJzYWxTdHJhdGVnaWVzLCBieXRlY29kZSwgZmFsc2UpCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZ3JlbWxpbkxhbmciPlRoZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5HcmVtbGluTGFuZyIgLz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBncmFwaCB0cmF2ZXJzYWwuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsKElDb2xsZWN0aW9uPElUcmF2ZXJzYWxTdHJhdGVneT4gdHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcpCisgICAgICAgICAgICA6IHRoaXModHJhdmVyc2FsU3RyYXRlZ2llcywgZ3JlbWxpbkxhbmcsIGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNTcsMTcgKzU2LDE3IEBACiAgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWx7U1R5cGUsIEVUeXBlfSIgLz4gY2xhc3MuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhdmVyc2FsU3RyYXRlZ2llcyI+VGhlIHRyYXZlcnNhbCBzdHJhdGVnaWVzIHRvIGJlIHVzZWQgYnkgdGhpcyBncmFwaCB0cmF2ZXJzYWwgYXQgZXZhbHVhdGlvbiB0aW1lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYnl0ZWNvZGUiPlRoZSA8c2VlIGNyZWY9IkJ5dGVjb2RlIiAvPiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGlzIGdyYXBoIHRyYXZlcnNhbC48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyZW1saW5MYW5nIj5UaGUgPHNlZSBjcmVmPSJUcmF2ZXJzYWwuR3JlbWxpbkxhbmciIC8+IGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uc3RydWN0aW9uIG9mIHRoaXMgZ3JhcGggdHJhdmVyc2FsLjwvcGFyYW0+CiAgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYW5vbnltb3VzIj5TZXQgdG8gdHJ1ZSBpZiBzcGF3bmVkIGZyb20gYW4gYW5vbnltb3VzIHRyYXZlcnNhbCBzb3VyY2UgYW5kIGZhbHNlIG90aGVyd2lzZS48L3BhcmFtPgotICAgICAgICBwcml2YXRlIEdyYXBoVHJhdmVyc2FsKElDb2xsZWN0aW9uPElUcmF2ZXJzYWxTdHJhdGVneT4gdHJhdmVyc2FsU3RyYXRlZ2llcywgQnl0ZWNvZGUgYnl0ZWNvZGUsIGJvb2wgYW5vbnltb3VzKQorICAgICAgICBwcml2YXRlIEdyYXBoVHJhdmVyc2FsKElDb2xsZWN0aW9uPElUcmF2ZXJzYWxTdHJhdGVneT4gdHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcsIGJvb2wgYW5vbnltb3VzKQogICAgICAgICB7CiAgICAgICAgICAgICBUcmF2ZXJzYWxTdHJhdGVnaWVzID0gdHJhdmVyc2FsU3RyYXRlZ2llczsKLSAgICAgICAgICAgIEJ5dGVjb2RlID0gYnl0ZWNvZGU7CisgICAgICAgICAgICBHcmVtbGluTGFuZyA9IGdyZW1saW5MYW5nOwogICAgICAgICAgICAgSXNBbm9ueW1vdXMgPSBhbm9ueW1vdXM7CiAgICAgICAgIH0KIAogICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIEJ5dGVjb2RlIEJ5dGVjb2RlIHsgZ2V0OyB9CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBHcmVtbGluTGFuZyBHcmVtbGluTGFuZyB7IGdldDsgfQogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIEdyYXBoVHJhdmVyc2FsPFROZXdTdGFydCwgVE5ld0VuZD4gV3JhcDxUTmV3U3RhcnQsIFROZXdFbmQ+KEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gdHJhdmVyc2FsKQogICAgICAgICB7CkBAIC03Niw3ICs3NSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICh0cmF2ZXJzYWwgYXMgR3JhcGhUcmF2ZXJzYWw8VE5ld1N0YXJ0LCBUTmV3RW5kPikhOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gTmV3IHdyYXBwZXIKLSAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhUcmF2ZXJzYWw8VE5ld1N0YXJ0LCBUTmV3RW5kPih0cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ2llcywgdHJhdmVyc2FsLkJ5dGVjb2RlLCB0cmF2ZXJzYWwuSXNBbm9ueW1vdXMpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFRyYXZlcnNhbDxUTmV3U3RhcnQsIFROZXdFbmQ+KHRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVnaWVzLCB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcsIHRyYXZlcnNhbC5Jc0Fub255bW91cyk7CiAgICAgICAgIH0KIAogCkBAIC04NywxMyArODYsMjAgQEAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHZlcnRleElkc09yRWxlbWVudHMgPT0gbnVsbCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJWIiwgbmV3IG9iamVjdD9bXSB7IG51bGwgfSk7CisgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiViIsIG5ldyBvYmplY3Q/W10geyBudWxsIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGV4SWRzT3JFbGVtZW50cy5MZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhJZHNPckVsZW1lbnRzW2ldIGlzIFZlcnRleCB2ZXJ0ZXgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleElkc09yRWxlbWVudHNbaV0gPSB2ZXJ0ZXguSWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/Pih2ZXJ0ZXhJZHNPckVsZW1lbnRzLkxlbmd0aCk7CiAgICAgICAgICAgICAgICAgYXJncy5BZGRSYW5nZSh2ZXJ0ZXhJZHNPckVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJWIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIlYiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFZlcnRleD4odGhpcyk7CiAgICAgICAgIH0KQEAgLTEwNSwxMyArMTExLDEzIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChlZGdlSWRzT3JFbGVtZW50cyA9PSBudWxsKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIkUiLCBuZXcgb2JqZWN0P1tdIHsgbnVsbCB9KTsKKyAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJFIiwgbmV3IG9iamVjdD9bXSB7IG51bGwgfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PihlZGdlSWRzT3JFbGVtZW50cy5MZW5ndGgpOwogICAgICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UoZWRnZUlkc09yRWxlbWVudHMpOwotICAgICAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIkUiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiRSIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgRWRnZT4odGhpcyk7CiAgICAgICAgIH0KQEAgLTEyMSw3ICsxMjcsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBFZGdlPiBBZGRFIChzdHJpbmcgZWRnZUxhYmVsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJhZGRFIiwgZWRnZUxhYmVsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZEUiLCBlZGdlTGFiZWwpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBFZGdlPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMzAsNyArMTM2LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgRWRnZT4gQWRkRSAoSVRyYXZlcnNhbCBlZGdlTGFiZWxUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFkZEUiLCBlZGdlTGFiZWxUcmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWRkRSIsIGVkZ2VMYWJlbFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIEVkZ2U+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEzOSw3ICsxNDUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBWZXJ0ZXg+IEFkZFYgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYWRkViIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWRkViIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBWZXJ0ZXg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE0OCw3ICsxNTQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBWZXJ0ZXg+IEFkZFYgKHN0cmluZyB2ZXJ0ZXhMYWJlbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYWRkViIsIHZlcnRleExhYmVsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZFYiLCB2ZXJ0ZXhMYWJlbCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFZlcnRleD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTU3LDcgKzE2Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFZlcnRleD4gQWRkViAoSVRyYXZlcnNhbCB2ZXJ0ZXhMYWJlbFRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYWRkViIsIHZlcnRleExhYmVsVHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZFYiLCB2ZXJ0ZXhMYWJlbFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFZlcnRleD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTY2LDcgKzE3Miw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEFnZ3JlZ2F0ZSAoc3RyaW5nIHNpZGVFZmZlY3RLZXkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFnZ3JlZ2F0ZSIsIHNpZGVFZmZlY3RLZXkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWdncmVnYXRlIiwgc2lkZUVmZmVjdEtleSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE3NSw3ICsxODEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBBbGwgKFA/IHByZWRpY2F0ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYWxsIiwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFsbCIsIHByZWRpY2F0ZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE4OCw3ICsxOTQsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD4oYW5kVHJhdmVyc2Fscy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShhbmRUcmF2ZXJzYWxzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFuZCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFuZCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTk3LDcgKzIwMyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEFueSAoUD8gcHJlZGljYXRlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJhbnkiLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYW55IiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjExLDcgKzIxNyw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0PigxICsgc3RlcExhYmVscy5MZW5ndGgpIHtzdGVwTGFiZWx9OwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShzdGVwTGFiZWxzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFzIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYXMiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjIwLDcgKzIyNiw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIHN0cmluZz8+IEFzU3RyaW5nICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFzU3RyaW5nIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJhc1N0cmluZyIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBzdHJpbmc/Pih0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIyOSw3ICsyMzUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gQXNTdHJpbmc8VE5ld0VuZD4gKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJhc1N0cmluZyIsIHNjb3BlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFzU3RyaW5nIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjM4LDcgKzI0NCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIERhdGVUaW1lT2Zmc2V0PiBBc0RhdGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJhc0RhdGUiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImFzRGF0ZSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBEYXRlVGltZU9mZnNldD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjQ3LDcgKzI1Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIGJvb2w+IEFzQm9vbCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFzQm9vbCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYXNCb29sIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIGJvb2w+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTI1Niw3ICsyNjIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBCYXJyaWVyICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJhcnJpZXIiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImJhcnJpZXIiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjY1LDcgKzI3MSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEJhcnJpZXIgKElDb25zdW1lciBiYXJyaWVyQ29uc3VtZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJhcnJpZXIiLCBiYXJyaWVyQ29uc3VtZXIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYmFycmllciIsIGJhcnJpZXJDb25zdW1lcik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTI3NCw3ICsyODAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBCYXJyaWVyIChpbnQgbWF4QmFycmllclNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJhcnJpZXIiLCBtYXhCYXJyaWVyU2l6ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJiYXJyaWVyIiwgbWF4QmFycmllclNpemUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yODcsNyArMjkzLDcgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PihlZGdlTGFiZWxzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKGVkZ2VMYWJlbHMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYm90aCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImJvdGgiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFZlcnRleD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMzAwLDcgKzMwNiw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oZWRnZUxhYmVscy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShlZGdlTGFiZWxzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJvdGhFIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYm90aEUiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIEVkZ2U+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTMwOSw3ICszMTUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBWZXJ0ZXg+IEJvdGhWICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJvdGhWIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJib3RoViIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBWZXJ0ZXg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTMxOCw3ICszMjQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBCcmFuY2g8VE5ld0VuZD4gKElGdW5jdGlvbj8gZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJyYW5jaCIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImJyYW5jaCIsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMzI3LDcgKzMzMyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IEJyYW5jaDxUTmV3RW5kPiAoSVRyYXZlcnNhbCBicmFuY2hUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImJyYW5jaCIsIGJyYW5jaFRyYXZlcnNhbCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJicmFuY2giLCBicmFuY2hUcmF2ZXJzYWwpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0zMzYsNyArMzQyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQnkgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImJ5Iik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTM0NSw3ICszNTEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBCeSAoSUNvbXBhcmF0b3IgY29tcGFyYXRvcikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiLCBjb21wYXJhdG9yKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImJ5IiwgY29tcGFyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTM1NCw3ICszNjAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBCeSAoSUZ1bmN0aW9uIGZ1bmN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJieSIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImJ5IiwgZnVuY3Rpb24pOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0zNjMsNyArMzY5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQnkgKElGdW5jdGlvbiBmdW5jdGlvbiwgSUNvbXBhcmF0b3IgY29tcGFyYXRvcikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiLCBmdW5jdGlvbiwgY29tcGFyYXRvcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJieSIsIGZ1bmN0aW9uLCBjb21wYXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMzcyLDcgKzM3OCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEJ5IChPcmRlciBvcmRlcikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiLCBvcmRlcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJieSIsIG9yZGVyKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMzgxLDcgKzM4Nyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEJ5IChzdHJpbmc/IGtleSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiLCBrZXkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYnkiLCBrZXkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0zOTAsNyArMzk2LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQnkgKHN0cmluZz8ga2V5LCBJQ29tcGFyYXRvciBjb21wYXJhdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJieSIsIGtleSwgY29tcGFyYXRvcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJieSIsIGtleSwgY29tcGFyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTM5OSw3ICs0MDUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBCeSAoVCB0b2tlbikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiLCB0b2tlbik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJieSIsIHRva2VuKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNDA4LDcgKzQxNCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEJ5IChJVHJhdmVyc2FsIHRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYnkiLCB0cmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYnkiLCB0cmF2ZXJzYWwpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC00MTcsNyArNDIzLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQnkgKElUcmF2ZXJzYWwgdHJhdmVyc2FsLCBJQ29tcGFyYXRvciBjb21wYXJhdG9yKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJieSIsIHRyYXZlcnNhbCwgY29tcGFyYXRvcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJieSIsIHRyYXZlcnNhbCwgY29tcGFyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTQyNiw3ICs0MzIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBDYWxsPFROZXdFbmQ+IChzdHJpbmc/IHNlcnZpY2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNhbGwiLCBzZXJ2aWNlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNhbGwiLCBzZXJ2aWNlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNDM1LDcgKzQ0MSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IENhbGw8VE5ld0VuZD4gKHN0cmluZz8gc2VydmljZSwgSVRyYXZlcnNhbD8gdCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UsIHQpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UsIHQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC00NDQsNyArNDUwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gQ2FsbDxUTmV3RW5kPiAoc3RyaW5nPyBzZXJ2aWNlLCBJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0Pj8gbSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UsIG0pOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UsIG0pOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC00NTQsNyArNDYwLDcgQEAKICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gQ2FsbDxUTmV3RW5kPihzdHJpbmc/IHNlcnZpY2UsIElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0Pj8gbSwKICAgICAgICAgICAgIElUcmF2ZXJzYWw/IHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNhbGwiLCBzZXJ2aWNlLCBtLCB0KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNhbGwiLCBzZXJ2aWNlLCBtLCB0KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNDY4LDcgKzQ3NCw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0PigxICsgc2lkZUVmZmVjdEtleXMuTGVuZ3RoKSB7IHNpZGVFZmZlY3RLZXkgfTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2Uoc2lkZUVmZmVjdEtleXMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiY2FwIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2FwIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC00NzcsNyArNDgzLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gQ2hvb3NlPFROZXdFbmQ+IChJRnVuY3Rpb24gY2hvaWNlRnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNob29zZSIsIGNob2ljZUZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNob29zZSIsIGNob2ljZUZ1bmN0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNDg2LDcgKzQ5Miw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IENob29zZTxUTmV3RW5kPiAoSVByZWRpY2F0ZSBjaG9vc2VQcmVkaWNhdGUsIElUcmF2ZXJzYWwgdHJ1ZUNob2ljZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiY2hvb3NlIiwgY2hvb3NlUHJlZGljYXRlLCB0cnVlQ2hvaWNlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNob29zZSIsIGNob29zZVByZWRpY2F0ZSwgdHJ1ZUNob2ljZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTQ5NSw3ICs1MDEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBDaG9vc2U8VE5ld0VuZD4gKElQcmVkaWNhdGUgY2hvb3NlUHJlZGljYXRlLCBJVHJhdmVyc2FsIHRydWVDaG9pY2UsIElUcmF2ZXJzYWwgZmFsc2VDaG9pY2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNob29zZSIsIGNob29zZVByZWRpY2F0ZSwgdHJ1ZUNob2ljZSwgZmFsc2VDaG9pY2UpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2hvb3NlIiwgY2hvb3NlUHJlZGljYXRlLCB0cnVlQ2hvaWNlLCBmYWxzZUNob2ljZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTUwNCw3ICs1MTAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBDaG9vc2U8VE5ld0VuZD4gKElUcmF2ZXJzYWwgY2hvaWNlVHJhdmVyc2FsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjaG9vc2UiLCBjaG9pY2VUcmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2hvb3NlIiwgY2hvaWNlVHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNTEzLDcgKzUxOSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IENob29zZTxUTmV3RW5kPiAoSVRyYXZlcnNhbCB0cmF2ZXJzYWxQcmVkaWNhdGUsIElUcmF2ZXJzYWwgdHJ1ZUNob2ljZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiY2hvb3NlIiwgdHJhdmVyc2FsUHJlZGljYXRlLCB0cnVlQ2hvaWNlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNob29zZSIsIHRyYXZlcnNhbFByZWRpY2F0ZSwgdHJ1ZUNob2ljZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTUyMiw3ICs1MjgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBDaG9vc2U8VE5ld0VuZD4gKElUcmF2ZXJzYWwgdHJhdmVyc2FsUHJlZGljYXRlLCBJVHJhdmVyc2FsIHRydWVDaG9pY2UsIElUcmF2ZXJzYWwgZmFsc2VDaG9pY2UpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNob29zZSIsIHRyYXZlcnNhbFByZWRpY2F0ZSwgdHJ1ZUNob2ljZSwgZmFsc2VDaG9pY2UpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2hvb3NlIiwgdHJhdmVyc2FsUHJlZGljYXRlLCB0cnVlQ2hvaWNlLCBmYWxzZUNob2ljZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTUzNSw3ICs1NDEsNyBAQAogCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD4oY29hbGVzY2VUcmF2ZXJzYWxzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKGNvYWxlc2NlVHJhdmVyc2Fscyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjb2FsZXNjZSIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNvYWxlc2NlIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC01NDQsNyArNTUwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQ29pbiAoZG91YmxlIHByb2JhYmlsaXR5KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjb2luIiwgcHJvYmFiaWxpdHkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY29pbiIsIHByb2JhYmlsaXR5KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNTUzLDcgKzU1OSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IENvbWJpbmUgKG9iamVjdCBjb21iaW5lT2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjb21iaW5lIiwgY29tYmluZU9iamVjdCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJjb21iaW5lIiwgY29tYmluZU9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTU3Miw3ICs1NzgsNyBAQAogICAgICAgICAgICAgICAgIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigxICsgb3RoZXJDb25jYXRUcmF2ZXJzYWxzLkxlbmd0aCkgeyBjb25jYXRUcmF2ZXJzYWwgfTsKICAgICAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKG90aGVyQ29uY2F0VHJhdmVyc2Fscyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjb25jYXQiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJjb25jYXQiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIHN0cmluZz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNTg1LDcgKzU5MSw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oY29uY2F0U3RyaW5ncy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShjb25jYXRTdHJpbmdzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNvbmNhdCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNvbmNhdCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPih0aGlzKTsKICAgICAgICAgfQogCkBAIC01OTQsNyArNjAwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD8+IENvbmpvaW4gKHN0cmluZyBkZWxpbWl0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNvbmpvaW4iLCBkZWxpbWl0ZXIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY29uam9pbiIsIGRlbGltaXRlcik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ/Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC02MDMsNyArNjA5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQ29ubmVjdGVkQ29tcG9uZW50ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNvbm5lY3RlZENvbXBvbmVudCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY29ubmVjdGVkQ29tcG9uZW50Iik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTYxMiw3ICs2MTgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBDb25zdGFudDxUTmV3RW5kPiAoVE5ld0VuZCBlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjb25zdGFudCIsIGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiY29uc3RhbnQiLCBlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNjIxLDcgKzYyNyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIGxvbmc+IENvdW50ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImNvdW50Iik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJjb3VudCIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBsb25nPih0aGlzKTsKICAgICAgICAgfQogCkBAIC02MzAsNyArNjM2LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgbG9uZz4gQ291bnQgKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjb3VudCIsIHNjb3BlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImNvdW50Iiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBsb25nPih0aGlzKTsKICAgICAgICAgfQogCkBAIC02MzksNyArNjQ1LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQ3ljbGljUGF0aCAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJjeWNsaWNQYXRoIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJjeWNsaWNQYXRoIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTY0OCw3ICs2NTQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBEYXRlVGltZU9mZnNldD4gRGF0ZUFkZChEVCBkYXRlVG9rZW4sIGludCB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZGF0ZUFkZCIsIGRhdGVUb2tlbiwgdmFsdWUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGF0ZUFkZCIsIGRhdGVUb2tlbiwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBEYXRlVGltZU9mZnNldD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNjU3LDcgKzY2Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIGxvbmc+IERhdGVEaWZmKERhdGVUaW1lT2Zmc2V0IHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJkYXRlRGlmZiIsIHZhbHVlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImRhdGVEaWZmIiwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBsb25nPih0aGlzKTsKICAgICAgICAgfQogCkBAIC02NjYsNyArNjcyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgbG9uZz4gRGF0ZURpZmYoSVRyYXZlcnNhbCBkYXRlVHJhdmVyc2FsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJkYXRlRGlmZiIsIGRhdGVUcmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGF0ZURpZmYiLCBkYXRlVHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgbG9uZz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02NzUsNyArNjgxLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgb2JqZWN0PiBBc051bWJlcigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImFzTnVtYmVyIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJhc051bWJlciIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBvYmplY3Q+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTY4NCw3ICs2OTAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBvYmplY3Q+IEFzTnVtYmVyKEdUeXBlIHR5cGVUb2tlbikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiYXNOdW1iZXIiLCB0eXBlVG9rZW4pOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiYXNOdW1iZXIiLCB0eXBlVG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBvYmplY3Q+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTY5Nyw3ICs3MDMsNyBAQAogCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KDEgKyBkZWR1cExhYmVscy5MZW5ndGgpIHsgc2NvcGUgfTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UoZGVkdXBMYWJlbHMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZGVkdXAiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJkZWR1cCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNzEwLDcgKzcxNiw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oZGVkdXBMYWJlbHMuTGVuZ3RoKTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UoZGVkdXBMYWJlbHMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZGVkdXAiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJkZWR1cCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNzE5LDcgKzcyNSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IERpZmZlcmVuY2UgKG9iamVjdCBkaWZmZXJlbmNlT2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJkaWZmZXJlbmNlIiwgZGlmZmVyZW5jZU9iamVjdCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJkaWZmZXJlbmNlIiwgZGlmZmVyZW5jZU9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTcyOCw3ICs3MzQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBEaXNjYXJkICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImRpc2NhcmQiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImRpc2NhcmQiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNzM3LDcgKzc0Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IERpc2p1bmN0IChvYmplY3QgZGlzanVuY3RPYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImRpc2p1bmN0IiwgZGlzanVuY3RPYmplY3QpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGlzanVuY3QiLCBkaXNqdW5jdE9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTc0Niw3ICs3NTIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBEcm9wICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImRyb3AiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImRyb3AiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNzU1LDcgKzc2MSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIEVsZW1lbnQ+IEVsZW1lbnQgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZWxlbWVudCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZWxlbWVudCIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBFbGVtZW50Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC03NjgsNyArNzc0LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigwICsgcHJvcGVydHlLZXlzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKHByb3BlcnR5S2V5cyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJlbGVtZW50TWFwIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZWxlbWVudE1hcCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgSURpY3Rpb25hcnk8b2JqZWN0LCBUTmV3RW5kPj4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtNzc3LDcgKzc4Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEVtaXQgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZW1pdCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZW1pdCIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC03ODYsNyArNzkyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gRW1pdCAoSVByZWRpY2F0ZSBlbWl0UHJlZGljYXRlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJlbWl0IiwgZW1pdFByZWRpY2F0ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJlbWl0IiwgZW1pdFByZWRpY2F0ZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTc5NSw3ICs4MDEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBFbWl0IChJVHJhdmVyc2FsIGVtaXRUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImVtaXQiLCBlbWl0VHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImVtaXQiLCBlbWl0VHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtODA0LDcgKzgxMCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEZhaWwgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZmFpbCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZmFpbCIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC04MTMsNyArODE5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gRmFpbCAoc3RyaW5nPyBtc2cpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImZhaWwiLCBtc2cpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZmFpbCIsIG1zZyk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTgyMiw3ICs4MjgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBGYWlsIChzdHJpbmc/IG1zZywgSURpY3Rpb25hcnk8c3RyaW5nLG9iamVjdD4gbSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZmFpbCIsIG1zZywgbSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJmYWlsIiwgbXNnLCBtKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtODMxLDcgKzgzNyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEZpbHRlciAoSVByZWRpY2F0ZT8gcHJlZGljYXRlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJmaWx0ZXIiLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZmlsdGVyIiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtODQwLDcgKzg0Niw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEZpbHRlciAoSVRyYXZlcnNhbCBmaWx0ZXJUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImZpbHRlciIsIGZpbHRlclRyYXZlcnNhbCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJmaWx0ZXIiLCBmaWx0ZXJUcmF2ZXJzYWwpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC04NDksNyArODU1LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gRmxhdE1hcDxUTmV3RW5kPiAoSUZ1bmN0aW9uPyBmdW5jdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZmxhdE1hcCIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImZsYXRNYXAiLCBmdW5jdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTg1OCw3ICs4NjQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBGbGF0TWFwPFROZXdFbmQ+IChJVHJhdmVyc2FsIGZsYXRNYXBUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImZsYXRNYXAiLCBmbGF0TWFwVHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImZsYXRNYXAiLCBmbGF0TWFwVHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtODY3LDcgKzg3Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIElMaXN0PFRFbmQ+PiBGb2xkICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImZvbGQiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImZvbGQiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgSUxpc3Q8VEVuZD4+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTg3Niw3ICs4ODIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBGb2xkPFROZXdFbmQ+IChUTmV3RW5kIHNlZWQsIElCaUZ1bmN0aW9uPyBmb2xkRnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImZvbGQiLCBzZWVkLCBmb2xkRnVuY3Rpb24pOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZm9sZCIsIHNlZWQsIGZvbGRGdW5jdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTg4NSw3ICs4OTEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBzdHJpbmc+IEZvcm1hdChzdHJpbmcgZm9ybWF0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJmb3JtYXQiLCBmb3JtYXQpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZm9ybWF0IiwgZm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPih0aGlzKTsKICAgICAgICAgfQogCkBAIC04OTQsNyArOTAwLDggQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gRnJvbSAob2JqZWN0PyBmcm9tU3RlcFZlcnRleElkT3JMYWJlbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZnJvbSIsIGZyb21TdGVwVmVydGV4SWRPckxhYmVsKTsKKyAgICAgICAgICAgIHZhciBmcm9tSWQgPSBmcm9tU3RlcFZlcnRleElkT3JMYWJlbCBpcyBWZXJ0ZXggZnJvbVZlcnRleCA/IGZyb21WZXJ0ZXguSWQgOiBmcm9tU3RlcFZlcnRleElkT3JMYWJlbDsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImZyb20iLCBmcm9tSWQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTkwMyw3ICs5MTAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBGcm9tIChzdHJpbmc/IGZyb21TdGVwTGFiZWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImZyb20iLCBmcm9tU3RlcExhYmVsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImZyb20iLCBmcm9tU3RlcExhYmVsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtOTEyLDcgKzkxOSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEZyb20gKElUcmF2ZXJzYWwgZnJvbVZlcnRleCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZnJvbSIsIGZyb21WZXJ0ZXgpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiZnJvbSIsIGZyb21WZXJ0ZXgpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC05MjEsNyArOTI4LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gRnJvbSAoVmVydGV4PyBmcm9tVmVydGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJmcm9tIiwgZnJvbVZlcnRleCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJmcm9tIiwgZnJvbVZlcnRleD8uSWQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC05MzAsNyArOTM3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgSURpY3Rpb25hcnk8SywgVj4+IEdyb3VwPEssIFY+ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImdyb3VwIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJncm91cCIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBJRGljdGlvbmFyeTxLLCBWPj4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtOTM5LDcgKzk0Niw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEdyb3VwIChzdHJpbmcgc2lkZUVmZmVjdEtleSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiZ3JvdXAiLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImdyb3VwIiwgc2lkZUVmZmVjdEtleSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTk0OCw3ICs5NTUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBJRGljdGlvbmFyeTxLLCBsb25nPj4gR3JvdXBDb3VudDxLPiAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJncm91cENvdW50Iik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJncm91cENvdW50Iik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIElEaWN0aW9uYXJ5PEssIGxvbmc+Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC05NTcsNyArOTY0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gR3JvdXBDb3VudCAoc3RyaW5nIHNpZGVFZmZlY3RLZXkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImdyb3VwQ291bnQiLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImdyb3VwQ291bnQiLCBzaWRlRWZmZWN0S2V5KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtOTY2LDcgKzk3Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEhhcyAoc3RyaW5nPyBwcm9wZXJ0eUtleSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaGFzIiwgcHJvcGVydHlLZXkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgcHJvcGVydHlLZXkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC05NzUsNyArOTgyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSGFzIChzdHJpbmc/IHByb3BlcnR5S2V5LCBvYmplY3Q/IHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJoYXMiLCBwcm9wZXJ0eUtleSwgdmFsdWUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgcHJvcGVydHlLZXksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtOTg0LDcgKzk5MSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEhhcyAoc3RyaW5nPyBwcm9wZXJ0eUtleSwgUD8gcHJlZGljYXRlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJoYXMiLCBwcm9wZXJ0eUtleSwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImhhcyIsIHByb3BlcnR5S2V5LCBwcmVkaWNhdGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC05OTMsNyArMTAwMCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEhhcyAoc3RyaW5nPyBsYWJlbCwgc3RyaW5nPyBwcm9wZXJ0eUtleSwgb2JqZWN0PyB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaGFzIiwgbGFiZWwsIHByb3BlcnR5S2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJoYXMiLCBsYWJlbCwgcHJvcGVydHlLZXksIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTAwMiw3ICsxMDA5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSGFzIChzdHJpbmc/IGxhYmVsLCBzdHJpbmc/IHByb3BlcnR5S2V5LCBQPyBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhcyIsIGxhYmVsLCBwcm9wZXJ0eUtleSwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImhhcyIsIGxhYmVsLCBwcm9wZXJ0eUtleSwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTAxMSw3ICsxMDE4LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSGFzIChUIGFjY2Vzc29yLCBvYmplY3Q/IHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJoYXMiLCBhY2Nlc3NvciwgdmFsdWUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgYWNjZXNzb3IsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTAyMCw3ICsxMDI3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSGFzIChUIGFjY2Vzc29yLCBQPyBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhcyIsIGFjY2Vzc29yLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgYWNjZXNzb3IsIHByZWRpY2F0ZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEwMzksNyArMTA0Niw3IEBACiAgICAgICAgICAgICAgICAgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KDEgKyBvdGhlcklkcy5MZW5ndGgpIHsgaWQgfTsKICAgICAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKG90aGVySWRzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhc0lkIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzSWQiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEwNDgsNyArMTA1NSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEhhc0lkIChQPyBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhc0lkIiwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImhhc0lkIiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTA1Nyw3ICsxMDY0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSGFzS2V5IChQPyBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhc0tleSIsIHByZWRpY2F0ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJoYXNLZXkiLCBwcmVkaWNhdGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMDc2LDcgKzEwODMsNyBAQAogICAgICAgICAgICAgICAgIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigxICsgb3RoZXJMYWJlbHMuTGVuZ3RoKSB7IGxhYmVsIH07CiAgICAgICAgICAgICAgICAgYXJncy5BZGRSYW5nZShvdGhlckxhYmVscyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJoYXNLZXkiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJoYXNLZXkiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEwODUsNyArMTA5Miw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEhhc0xhYmVsIChQPyBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhc0xhYmVsIiwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImhhc0xhYmVsIiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTEwNCw3ICsxMTExLDcgQEAKICAgICAgICAgICAgICAgICBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oMSArIG90aGVyTGFiZWxzLkxlbmd0aCkgeyBsYWJlbCB9OwogICAgICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2Uob3RoZXJMYWJlbHMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaGFzTGFiZWwiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJoYXNMYWJlbCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTExMyw3ICsxMTIwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSGFzTm90IChzdHJpbmc/IHByb3BlcnR5S2V5KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJoYXNOb3QiLCBwcm9wZXJ0eUtleSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJoYXNOb3QiLCBwcm9wZXJ0eUtleSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTExMzIsNyArMTEzOSw3IEBACiAgICAgICAgICAgICAgICAgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KDEgKyBvdGhlclZhbHVlcy5MZW5ndGgpIHsgdmFsdWUgfTsKICAgICAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKG90aGVyVmFsdWVzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhc1ZhbHVlIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzVmFsdWUiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTExNDEsNyArMTE0OCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IEhhc1ZhbHVlIChQPyBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImhhc1ZhbHVlIiwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImhhc1ZhbHVlIiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTE1MCw3ICsxMTU3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgb2JqZWN0PiBJZCAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJpZCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaWQiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgb2JqZWN0Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMTU5LDcgKzExNjYsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBJZGVudGl0eSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJpZGVudGl0eSIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaWRlbnRpdHkiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTE3Miw3ICsxMTc5LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PihlZGdlTGFiZWxzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKGVkZ2VMYWJlbHMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaW4iLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJpbiIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVmVydGV4Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMTg1LDcgKzExOTIsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KGVkZ2VMYWJlbHMuTGVuZ3RoKTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UoZWRnZUxhYmVscyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJpbkUiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJpbkUiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIEVkZ2U+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTExOTQsNyArMTIwMSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFZlcnRleD4gSW5WICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImluViIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaW5WIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFZlcnRleD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTIwMyw3ICsxMjEwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gSW5kZXg8VE5ld0VuZD4gKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaW5kZXgiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImluZGV4Iik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEyMTUsMTMgKzEyMjIsMTMgQEAKICAgICAgICAgICAgIC8vIG51bGwgaW5qZWN0aW9ucyBpcyB0cmVhdGVkIGFzIGcuaW5qZWN0KG51bGwpIG1lYW5pbmcgaW5qZWN0IGEgc2luZ2xlIG51bGwgdHJhdmVyc2VyCiAgICAgICAgICAgICBpZiAoaW5qZWN0aW9ucyA9PSBudWxsKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImluamVjdCIsIG5ldyBvYmplY3Q/W10geyBudWxsIH0pOworICAgICAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImluamVjdCIsIG5ldyBvYmplY3Q/W10geyBudWxsIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oaW5qZWN0aW9ucy5MZW5ndGgpOwogICAgICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UoaW5qZWN0aW9ucy5DYXN0PG9iamVjdD8+KCkpOwotICAgICAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImluamVjdCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJpbmplY3QiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CkBAIC0xMjMyLDcgKzEyMzksNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBJbnRlcnNlY3QgKG9iamVjdCBpbnRlcnNlY3RPYmplY3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImludGVyc2VjdCIsIGludGVyc2VjdE9iamVjdCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJpbnRlcnNlY3QiLCBpbnRlcnNlY3RPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMjQxLDcgKzEyNDgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBJcyAob2JqZWN0PyB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaXMiLCB2YWx1ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJpcyIsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTI1MCw3ICsxMjU3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gSXMgKFA/IHByZWRpY2F0ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgiaXMiLCBwcmVkaWNhdGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiaXMiLCBwcmVkaWNhdGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMjU5LDcgKzEyNjYsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBzdHJpbmc+IEtleSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJrZXkiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImtleSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBzdHJpbmc+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEyNjgsNyArMTI3NSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIHN0cmluZz4gTGFiZWwgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibGFiZWwiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImxhYmVsIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIHN0cmluZz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMjc3LDcgKzEyODQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBpbnQ/PiBMZW5ndGggKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibGVuZ3RoIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJsZW5ndGgiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgaW50Pz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMjg2LDcgKzEyOTMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gTGVuZ3RoPFROZXdFbmQ+IChTY29wZSBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibGVuZ3RoIiwgc2NvcGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibGVuZ3RoIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTI5NSw3ICsxMzAyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gTGltaXQ8VE5ld0VuZD4gKFNjb3BlIHNjb3BlLCBsb25nIGxpbWl0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJsaW1pdCIsIHNjb3BlLCBsaW1pdCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJsaW1pdCIsIHNjb3BlLCBsaW1pdCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEzMDQsNyArMTMxMSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IExpbWl0PFROZXdFbmQ+IChsb25nIGxpbWl0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJsaW1pdCIsIGxpbWl0KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImxpbWl0IiwgbGltaXQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMzEzLDcgKzEzMjAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBMb2NhbDxUTmV3RW5kPiAoSVRyYXZlcnNhbCBsb2NhbFRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibG9jYWwiLCBsb2NhbFRyYXZlcnNhbCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJsb2NhbCIsIGxvY2FsVHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTMyMiw3ICsxMzI5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgaW50PiBMb29wcyAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJsb29wcyIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibG9vcHMiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgaW50Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMzMxLDcgKzEzMzgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBpbnQ+IExvb3BzIChzdHJpbmc/IGxvb3BOYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJsb29wcyIsIGxvb3BOYW1lKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoImxvb3BzIiwgbG9vcE5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBpbnQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEzNDAsNyArMTM0Nyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIHN0cmluZz8+IExUcmltICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImxUcmltIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJsVHJpbSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBzdHJpbmc/Pih0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEzNDksNyArMTM1Niw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ/PiBMVHJpbTxUTmV3RW5kPiAoU2NvcGUgc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoImxUcmltIiwgc2NvcGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibFRyaW0iLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ/Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMzU4LDcgKzEzNjUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBNYXA8VE5ld0VuZD4gKElGdW5jdGlvbj8gZnVuY3Rpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1hcCIsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1hcCIsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTM2Nyw3ICsxMzc0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gTWFwPFROZXdFbmQ+IChJVHJhdmVyc2FsIG1hcFRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibWFwIiwgbWFwVHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1hcCIsIG1hcFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEzODAsNyArMTM4Nyw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0PihtYXRjaFRyYXZlcnNhbHMuTGVuZ3RoKTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UobWF0Y2hUcmF2ZXJzYWxzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1hdGNoIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibWF0Y2giLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIElEaWN0aW9uYXJ5PHN0cmluZywgVE5ld0VuZD4+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTEzODksNyArMTM5Niw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIGRvdWJsZT4gTWF0aCAoc3RyaW5nIGV4cHJlc3Npb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1hdGgiLCBleHByZXNzaW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1hdGgiLCBleHByZXNzaW9uKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgZG91YmxlPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xMzk4LDcgKzE0MDUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBNYXg8VE5ld0VuZD4gKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibWF4Iik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJtYXgiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTQwNyw3ICsxNDE0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gTWF4PFROZXdFbmQ+IChTY29wZSBzY29wZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibWF4Iiwgc2NvcGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibWF4Iiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNDE2LDcgKzE0MjMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBNZWFuPFROZXdFbmQ+ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1lYW4iKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lYW4iKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTQyNSw3ICsxNDMyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gTWVhbjxUTmV3RW5kPiAoU2NvcGUgc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1lYW4iLCBzY29wZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJtZWFuIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNDM0LDcgKzE0NDEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBNZXJnZSAob2JqZWN0IG1lcmdlT2JqZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtZXJnZSIsIG1lcmdlT2JqZWN0KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlIiwgbWVyZ2VPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNDQzLDE2ICsxNDUwLDIyIEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIEVkZ2U+IE1lcmdlRSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtZXJnZUUiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlRSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBFZGdlPih0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBBZGRzIHRoZSBtZXJnZUUgc3RlcCB0byB0aGlzIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWx7U1R5cGUsIEVUeXBlfSIgLz4uCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIEVkZ2U+IE1lcmdlRSAoSURpY3Rpb25hcnk8b2JqZWN0LG9iamVjdD4/IG0pCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIEVkZ2U+IE1lcmdlRSAoSURpY3Rpb25hcnk8b2JqZWN0LG9iamVjdD8+PyBtKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtZXJnZUUiLCBtKTsKKyAgICAgICAgICAgIGlmIChtICE9IG51bGwgJiYgbS5Db250YWluc0tleShEaXJlY3Rpb24uT3V0KSAmJiBtW0RpcmVjdGlvbi5PdXRdIGlzIFZlcnRleCBvdXRWKSB7CisgICAgICAgICAgICAgICAgbVtEaXJlY3Rpb24uT3V0XSA9IG91dFYuSWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uQ29udGFpbnNLZXkoRGlyZWN0aW9uLkluKSAmJiBtW0RpcmVjdGlvbi5Jbl0gaXMgVmVydGV4IGluVikgeworICAgICAgICAgICAgICAgIG1bRGlyZWN0aW9uLkluXSA9IGluVi5JZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlRSIsIG0pOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBFZGdlPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNDYxLDcgKzE0NzQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBFZGdlPiBNZXJnZUUgKElUcmF2ZXJzYWw/IHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1lcmdlRSIsIHQpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVyZ2VFIiwgdCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIEVkZ2U+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE0NzAsNyArMTQ4Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFZlcnRleD4gTWVyZ2VWICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm1lcmdlViIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVyZ2VWIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFZlcnRleD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTQ3OSw3ICsxNDkyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVmVydGV4PiBNZXJnZVYgKElEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+PyBtKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtZXJnZVYiLCBtKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlViIsIG0pOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBWZXJ0ZXg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE0ODgsNyArMTUwMSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFZlcnRleD4gTWVyZ2VWIChJVHJhdmVyc2FsPyB0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtZXJnZVYiLCB0KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlViIsIHQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBWZXJ0ZXg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE0OTcsNyArMTUxMCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IE1pbjxUTmV3RW5kPiAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtaW4iKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm1pbiIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNTA2LDcgKzE1MTksNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBNaW48VE5ld0VuZD4gKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJtaW4iLCBzY29wZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJtaW4iLCBzY29wZSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE1MTUsNyArMTUyOCw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IE5vbmUgKFA/IHByZWRpY2F0ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibm9uZSIsIHByZWRpY2F0ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJub25lIiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTUyNCw3ICsxNTM3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gTm90IChJVHJhdmVyc2FsIG5vdFRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgibm90Iiwgbm90VHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm5vdCIsIG5vdFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE1MzMsNyArMTU0Niw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IE9wdGlvbiAob2JqZWN0IHBpY2tUb2tlbiwgSVRyYXZlcnNhbD8gdHJhdmVyc2FsT3B0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvcHRpb24iLCBwaWNrVG9rZW4sIHRyYXZlcnNhbE9wdGlvbik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJvcHRpb24iLCBwaWNrVG9rZW4sIHRyYXZlcnNhbE9wdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE1NDIsNyArMTU1NSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IE9wdGlvbiAob2JqZWN0IHBpY2tUb2tlbiwgSURpY3Rpb25hcnk8b2JqZWN0LG9iamVjdD4/IHRyYXZlcnNhbE9wdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgib3B0aW9uIiwgcGlja1Rva2VuLCB0cmF2ZXJzYWxPcHRpb24pOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgib3B0aW9uIiwgcGlja1Rva2VuLCB0cmF2ZXJzYWxPcHRpb24pOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNTUxLDcgKzE1NjQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBPcHRpb24gKG9iamVjdCBwaWNrVG9rZW4sIElEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+IHRyYXZlcnNhbE9wdGlvbiwgQ2FyZGluYWxpdHkgY2FyZGluYWxpdHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm9wdGlvbiIsIHBpY2tUb2tlbiwgdHJhdmVyc2FsT3B0aW9uLCBjYXJkaW5hbGl0eSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJvcHRpb24iLCBwaWNrVG9rZW4sIHRyYXZlcnNhbE9wdGlvbiwgY2FyZGluYWxpdHkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNTYwLDcgKzE1NzMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBPcHRpb24gKElUcmF2ZXJzYWw/IHRyYXZlcnNhbE9wdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgib3B0aW9uIiwgdHJhdmVyc2FsT3B0aW9uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm9wdGlvbiIsIHRyYXZlcnNhbE9wdGlvbik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE1NjksNyArMTU4Miw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IE9wdGlvbmFsPFROZXdFbmQ+IChJVHJhdmVyc2FsIG9wdGlvbmFsVHJhdmVyc2FsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvcHRpb25hbCIsIG9wdGlvbmFsVHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm9wdGlvbmFsIiwgb3B0aW9uYWxUcmF2ZXJzYWwpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNTgyLDcgKzE1OTUsNyBAQAogCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD4ob3JUcmF2ZXJzYWxzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKG9yVHJhdmVyc2Fscyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvciIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm9yIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNTkxLDcgKzE2MDQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBPcmRlciAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvcmRlciIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgib3JkZXIiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTYwMCw3ICsxNjEzLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gT3JkZXIgKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvcmRlciIsIHNjb3BlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm9yZGVyIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNjA5LDcgKzE2MjIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBWZXJ0ZXg+IE90aGVyViAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvdGhlclYiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm90aGVyViIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBWZXJ0ZXg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE2MjIsNyArMTYzNSw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oZWRnZUxhYmVscy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShlZGdlTGFiZWxzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm91dCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm91dCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVmVydGV4Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNjM1LDcgKzE2NDgsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KGVkZ2VMYWJlbHMuTGVuZ3RoKTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UoZWRnZUxhYmVscyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJvdXRFIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgib3V0RSIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgRWRnZT4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTY0NCw3ICsxNjU3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVmVydGV4PiBPdXRWICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIm91dFYiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIm91dFYiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVmVydGV4Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNjUzLDcgKzE2NjYsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBQYWdlUmFuayAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJwYWdlUmFuayIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicGFnZVJhbmsiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTY2Miw3ICsxNjc1LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gUGFnZVJhbmsgKGRvdWJsZSBhbHBoYSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgicGFnZVJhbmsiLCBhbHBoYSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJwYWdlUmFuayIsIGFscGhhKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTY3MSw3ICsxNjg0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgUGF0aD4gUGF0aCAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJwYXRoIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJwYXRoIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFBhdGg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE2ODAsNyArMTY5Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFBlZXJQcmVzc3VyZSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJwZWVyUHJlc3N1cmUiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInBlZXJQcmVzc3VyZSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNjg5LDcgKzE3MDIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBQcm9kdWN0IChvYmplY3QgcHJvZHVjdE9iamVjdCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgicHJvZHVjdCIsIHByb2R1Y3RPYmplY3QpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicHJvZHVjdCIsIHByb2R1Y3RPYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNjk4LDcgKzE3MTEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBQcm9maWxlPFROZXdFbmQ+ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInByb2ZpbGUiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2ZpbGUiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTcwNyw3ICsxNzIwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gUHJvZmlsZSAoc3RyaW5nIHNpZGVFZmZlY3RLZXkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInByb2ZpbGUiLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2ZpbGUiLCBzaWRlRWZmZWN0S2V5KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTcxNiw3ICsxNzI5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gUHJvZ3JhbSAob2JqZWN0IHZlcnRleFByb2dyYW0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInByb2dyYW0iLCB2ZXJ0ZXhQcm9ncmFtKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2dyYW0iLCB2ZXJ0ZXhQcm9ncmFtKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTczMyw3ICsxNzQ2LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigxICsgb3RoZXJQcm9qZWN0S2V5cy5MZW5ndGgpIHsgcHJvamVjdEtleSB9OwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShvdGhlclByb2plY3RLZXlzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInByb2plY3QiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJwcm9qZWN0IiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBJRGljdGlvbmFyeTxzdHJpbmcsIFROZXdFbmQ+Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNzQ4LDcgKzE3NjEsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KHByb3BlcnR5S2V5cy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShwcm9wZXJ0eUtleXMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgicHJvcGVydGllcyIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInByb3BlcnRpZXMiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE3NjIsNyArMTc3NSw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oMyArIGtleVZhbHVlcy5MZW5ndGgpIHsgY2FyZGluYWxpdHksIGtleSwgdmFsdWUgfTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2Uoa2V5VmFsdWVzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInByb3BlcnR5IiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicHJvcGVydHkiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE3NzUsNyArMTc4OCw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oMiArIGtleVZhbHVlcy5MZW5ndGgpIHsga2V5LCB2YWx1ZSB9OwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShrZXlWYWx1ZXMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgicHJvcGVydHkiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJwcm9wZXJ0eSIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTc4NCw3ICsxNzk3LDMxIEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFByb3BlcnR5IChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4gbWFwKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJwcm9wZXJ0eSIsIG1hcCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJwcm9wZXJ0eSIsIG1hcCk7CisgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFkZHMgdGhlIHByb3BlcnR5IHN0ZXAgdG8gdGhpcyA8c2VlIGNyZWY9IkdyYXBoVHJhdmVyc2Fse1NUeXBlLCBFVHlwZX0iIC8+LgorICAgICAgICAvLy8gICAgIFdoZW4gYSA8c2VlIGNyZWY9IklEaWN0aW9uYXJ5e1RLZXksIFRWYWx1ZX0iIC8+IGlzIHN1cHBsaWVkLCBlYWNoIGtleS92YWx1ZSBwYWlyIGluIHRoZSBtYXAKKyAgICAgICAgLy8vICAgICB3aWxsIGJlIGFkZGVkIGFzIGEgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gPHNlZSBjcmVmPSJDYXJkaW5hbGl0eSIgLz4uCisgICAgICAgIC8vLyAgICAgQSB2YWx1ZSBtYXkgYmUgYSA8c2VlIGNyZWY9IkNhcmRpbmFsaXR5VmFsdWUiIC8+IHRvIG92ZXJyaWRlIHRoZSBjYXJkaW5hbGl0eSBmb3IgdGhhdCBlbnRyeS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gUHJvcGVydHkoQ2FyZGluYWxpdHkgY2FyZGluYWxpdHksIElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiBtYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtYXAgPT0gbnVsbCkgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKKworICAgICAgICAgICAgZm9yZWFjaCAodmFyIGVudHJ5IGluIG1hcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkuVmFsdWUgaXMgQ2FyZGluYWxpdHlWYWx1ZSBjYXJkVmFsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHkoY2FyZFZhbC5DYXJkaW5hbGl0eSEsIGVudHJ5LktleSwgY2FyZFZhbC5WYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5KGNhcmRpbmFsaXR5LCBlbnRyeS5LZXksIGVudHJ5LlZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE3OTgsNyArMTgzNSw3IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4ocHJvcGVydHlLZXlzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKHByb3BlcnR5S2V5cyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJwcm9wZXJ0eU1hcCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInByb3BlcnR5TWFwIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBJRGljdGlvbmFyeTxzdHJpbmcsIFROZXdFbmQ+Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xODA3LDcgKzE4NDQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBSYW5nZTxUTmV3RW5kPiAoU2NvcGUgc2NvcGUsIGxvbmcgbG93LCBsb25nIGhpZ2gpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInJhbmdlIiwgc2NvcGUsIGxvdywgaGlnaCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJyYW5nZSIsIHNjb3BlLCBsb3csIGhpZ2gpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xODE2LDcgKzE4NTMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBSYW5nZTxUTmV3RW5kPiAobG9uZyBsb3csIGxvbmcgaGlnaCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgicmFuZ2UiLCBsb3csIGhpZ2gpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicmFuZ2UiLCBsb3csIGhpZ2gpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xODI1LDcgKzE4NjIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBSZWFkICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInJlYWQiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInJlYWQiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTgzNCw3ICsxODcxLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gUmVwZWF0IChzdHJpbmcgbG9vcE5hbWUsIElUcmF2ZXJzYWwgcmVwZWF0VHJhdmVyc2FsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJyZXBlYXQiLCBsb29wTmFtZSwgcmVwZWF0VHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInJlcGVhdCIsIGxvb3BOYW1lLCByZXBlYXRUcmF2ZXJzYWwpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xODQzLDcgKzE4ODAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBSZXBlYXQgKElUcmF2ZXJzYWwgcmVwZWF0VHJhdmVyc2FsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJyZXBlYXQiLCByZXBlYXRUcmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicmVwZWF0IiwgcmVwZWF0VHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTg1Miw3ICsxODg5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgc3RyaW5nPz4gUmVwbGFjZSAoc3RyaW5nPyBvbGRDaGFyLCBzdHJpbmc/IG5ld0NoYXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInJlcGxhY2UiLCBvbGRDaGFyLCBuZXdDaGFyKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInJlcGxhY2UiLCBvbGRDaGFyLCBuZXdDaGFyKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODYxLDcgKzE4OTgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gUmVwbGFjZTxUTmV3RW5kPiAoU2NvcGUgc2NvcGUsIHN0cmluZz8gb2xkQ2hhciwgc3RyaW5nPyBuZXdDaGFyKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJyZXBsYWNlIiwgc2NvcGUsIG9sZENoYXIsIG5ld0NoYXIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicmVwbGFjZSIsIHNjb3BlLCBvbGRDaGFyLCBuZXdDaGFyKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD8+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE4NzAsNyArMTkwNyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFJldmVyc2UgKCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgicmV2ZXJzZSIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgicmV2ZXJzZSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xODc5LDcgKzE5MTYsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBzdHJpbmc/PiBSVHJpbSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJyVHJpbSIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgiclRyaW0iKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODg4LDcgKzE5MjUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gUlRyaW08VE5ld0VuZD4gKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJyVHJpbSIsIHNjb3BlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInJUcmltIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTg5Nyw3ICsxOTM0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gU2FjazxUTmV3RW5kPiAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzYWNrIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzYWNrIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE5MDYsNyArMTk0Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFNhY2sgKElCaUZ1bmN0aW9uIHNhY2tPcGVyYXRvcikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgic2FjayIsIHNhY2tPcGVyYXRvcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzYWNrIiwgc2Fja09wZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTkxNSw3ICsxOTUyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gU2FtcGxlIChTY29wZSBzY29wZSwgaW50IGFtb3VudFRvU2FtcGxlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzYW1wbGUiLCBzY29wZSwgYW1vdW50VG9TYW1wbGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgic2FtcGxlIiwgc2NvcGUsIGFtb3VudFRvU2FtcGxlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTkyNCw3ICsxOTYxLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gU2FtcGxlIChpbnQgYW1vdW50VG9TYW1wbGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNhbXBsZSIsIGFtb3VudFRvU2FtcGxlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInNhbXBsZSIsIGFtb3VudFRvU2FtcGxlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTkzMyw3ICsxOTcwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgSUNvbGxlY3Rpb248VE5ld0VuZD4+IFNlbGVjdDxUTmV3RW5kPiAoQ29sdW1uIGNvbHVtbikKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgic2VsZWN0IiwgY29sdW1uKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInNlbGVjdCIsIGNvbHVtbik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIElDb2xsZWN0aW9uPFROZXdFbmQ+Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xOTQyLDcgKzE5NzksNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBTZWxlY3Q8VE5ld0VuZD4gKFBvcCBwb3AsIHN0cmluZz8gc2VsZWN0S2V5KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzZWxlY3QiLCBwb3AsIHNlbGVjdEtleSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzZWxlY3QiLCBwb3AsIHNlbGVjdEtleSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE5NTYsNyArMTk5Myw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oMyArIG90aGVyU2VsZWN0S2V5cy5MZW5ndGgpIHsgcG9wLCBzZWxlY3RLZXkxLCBzZWxlY3RLZXkyIH07CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKG90aGVyU2VsZWN0S2V5cyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzZWxlY3QiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzZWxlY3QiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIElEaWN0aW9uYXJ5PHN0cmluZywgVE5ld0VuZD4+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE5NjUsNyArMjAwMiw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFNlbGVjdDxUTmV3RW5kPiAoUG9wIHBvcCwgSVRyYXZlcnNhbCBrZXlUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNlbGVjdCIsIHBvcCwga2V5VHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInNlbGVjdCIsIHBvcCwga2V5VHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTk3NCw3ICsyMDExLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gU2VsZWN0PFROZXdFbmQ+IChzdHJpbmc/IHNlbGVjdEtleSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgic2VsZWN0Iiwgc2VsZWN0S2V5KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInNlbGVjdCIsIHNlbGVjdEtleSk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTE5ODgsNyArMjAyNSw3IEBACiAKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oMiArIG90aGVyU2VsZWN0S2V5cy5MZW5ndGgpIHsgc2VsZWN0S2V5MSwgc2VsZWN0S2V5MiB9OwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShvdGhlclNlbGVjdEtleXMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgic2VsZWN0IiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgic2VsZWN0IiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBJRGljdGlvbmFyeTxzdHJpbmcsIFROZXdFbmQ+Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xOTk3LDcgKzIwMzQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBTZWxlY3Q8VE5ld0VuZD4gKElUcmF2ZXJzYWwga2V5VHJhdmVyc2FsKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzZWxlY3QiLCBrZXlUcmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgic2VsZWN0Iiwga2V5VHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjAwNiw3ICsyMDQzLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgUGF0aD4gU2hvcnRlc3RQYXRoICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNob3J0ZXN0UGF0aCIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgic2hvcnRlc3RQYXRoIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFBhdGg+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIwMTUsNyArMjA1Miw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFNpZGVFZmZlY3QgKElDb25zdW1lcj8gY29uc3VtZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNpZGVFZmZlY3QiLCBjb25zdW1lcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzaWRlRWZmZWN0IiwgY29uc3VtZXIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMDI0LDcgKzIwNjEsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBTaWRlRWZmZWN0IChJVHJhdmVyc2FsIHNpZGVFZmZlY3RUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNpZGVFZmZlY3QiLCBzaWRlRWZmZWN0VHJhdmVyc2FsKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInNpZGVFZmZlY3QiLCBzaWRlRWZmZWN0VHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjAzMyw3ICsyMDcwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gU2ltcGxlUGF0aCAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzaW1wbGVQYXRoIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzaW1wbGVQYXRoIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIwNDIsNyArMjA3OSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFNraXA8VE5ld0VuZD4gKFNjb3BlIHNjb3BlLCBsb25nIHNraXApCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNraXAiLCBzY29wZSwgc2tpcCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJza2lwIiwgc2NvcGUsIHNraXApOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMDUxLDcgKzIwODgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBTa2lwPFROZXdFbmQ+IChsb25nIHNraXApCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNraXAiLCBza2lwKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInNraXAiLCBza2lwKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjA2MCw3ICsyMDk3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgTGlzdDxzdHJpbmc+Pz4gU3BsaXQgKHN0cmluZz8gc3BsaXRDaGFyKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzcGxpdCIsIHNwbGl0Q2hhcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzcGxpdCIsIHNwbGl0Q2hhcik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIExpc3Q8c3RyaW5nPj8+KHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjA2OSw3ICsyMTA2LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgTGlzdDxUTmV3RW5kPj8+IFNwbGl0PFROZXdFbmQ+IChTY29wZSBzY29wZSwgc3RyaW5nPyBzcGxpdENoYXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInNwbGl0Iiwgc2NvcGUsIHNwbGl0Q2hhcik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzcGxpdCIsIHNjb3BlLCBzcGxpdENoYXIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBMaXN0PFROZXdFbmQ+Pz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjA3OCw3ICsyMTE1LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgRWRnZT4gU3ViZ3JhcGggKHN0cmluZyBzaWRlRWZmZWN0S2V5KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzdWJncmFwaCIsIHNpZGVFZmZlY3RLZXkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgic3ViZ3JhcGgiLCBzaWRlRWZmZWN0S2V5KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgRWRnZT4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjA4Nyw3ICsyMTI0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgc3RyaW5nPz4gU3Vic3RyaW5nIChpbnQgc3RhcnRJbmRleCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgic3Vic3RyaW5nIiwgc3RhcnRJbmRleCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzdWJzdHJpbmciLCBzdGFydEluZGV4KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMDk2LDcgKzIxMzMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gU3Vic3RyaW5nPFROZXdFbmQ+IChTY29wZSBzY29wZSwgaW50IHN0YXJ0SW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInN1YnN0cmluZyIsIHNjb3BlLCAgc3RhcnRJbmRleCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzdWJzdHJpbmciLCBzY29wZSwgIHN0YXJ0SW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjEwNSw3ICsyMTQyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgc3RyaW5nPz4gU3Vic3RyaW5nIChpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJzdWJzdHJpbmciLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzdWJzdHJpbmciLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIHN0cmluZz8+KHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjExNCw3ICsyMTUxLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD8+IFN1YnN0cmluZzxUTmV3RW5kPiAoU2NvcGUgc2NvcGUsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInN1YnN0cmluZyIsIHNjb3BlLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJzdWJzdHJpbmciLCBzY29wZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjEyMyw3ICsyMTYwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gU3VtPFROZXdFbmQ+ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInN1bSIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgic3VtIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIxMzIsNyArMjE2OSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFN1bTxUTmV3RW5kPiAoU2NvcGUgc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInN1bSIsIHNjb3BlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInN1bSIsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjE0MSw3ICsyMTc4LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gVGFpbDxUTmV3RW5kPiAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0YWlsIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0YWlsIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIxNTAsNyArMjE4Nyw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFRhaWw8VE5ld0VuZD4gKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0YWlsIiwgc2NvcGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidGFpbCIsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjE1OSw3ICsyMTk2LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD4gVGFpbDxUTmV3RW5kPiAoU2NvcGUgc2NvcGUsIGxvbmcgbGltaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRhaWwiLCBzY29wZSwgbGltaXQpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidGFpbCIsIHNjb3BlLCBsaW1pdCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFROZXdFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIxNjgsNyArMjIwNSw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFRhaWw8VE5ld0VuZD4gKGxvbmcgbGltaXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRhaWwiLCBsaW1pdCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0YWlsIiwgbGltaXQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMTc3LDcgKzIyMTQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBUaW1lTGltaXQgKGxvbmcgdGltZUxpbWl0KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0aW1lTGltaXQiLCB0aW1lTGltaXQpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidGltZUxpbWl0IiwgdGltZUxpbWl0KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjE4Niw3ICsyMjIzLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gVGltZXMgKGludCBtYXhMb29wcykKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidGltZXMiLCBtYXhMb29wcyk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0aW1lcyIsIG1heExvb3BzKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjE5OSw3ICsyMjM2LDcgQEAKIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigxICsgZWRnZUxhYmVscy5MZW5ndGgpIHsgZGlyZWN0aW9uIH07CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKGVkZ2VMYWJlbHMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidG8iLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0byIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVmVydGV4Pih0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIyMDgsNyArMjI0NSw4IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFRvIChvYmplY3Q/IHRvU3RlcFZlcnRleElkT3JMYWJlbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidG8iLCB0b1N0ZXBWZXJ0ZXhJZE9yTGFiZWwpOworICAgICAgICAgICAgdmFyIHRvSWQgPSB0b1N0ZXBWZXJ0ZXhJZE9yTGFiZWwgaXMgVmVydGV4IHRvVmVydGV4ID8gdG9WZXJ0ZXguSWQgOiB0b1N0ZXBWZXJ0ZXhJZE9yTGFiZWw7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0byIsIHRvSWQpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMjE3LDcgKzIyNTUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBUbyAoc3RyaW5nPyB0b1N0ZXBMYWJlbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidG8iLCB0b1N0ZXBMYWJlbCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0byIsIHRvU3RlcExhYmVsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjIyNiw3ICsyMjY0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gVG8gKElUcmF2ZXJzYWwgdG9WZXJ0ZXgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRvIiwgdG9WZXJ0ZXgpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidG8iLCB0b1ZlcnRleCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIyMzUsNyArMjI3Myw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRFbmQ+IFRvIChWZXJ0ZXg/IHRvVmVydGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0byIsIHRvVmVydGV4KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInRvIiwgdG9WZXJ0ZXg/LklkKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjI0OCw3ICsyMjg2LDcgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigxICsgZWRnZUxhYmVscy5MZW5ndGgpIHtkaXJlY3Rpb259OwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShlZGdlTGFiZWxzKTsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRvRSIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInRvRSIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgRWRnZT4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMjU3LDcgKzIyOTUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBzdHJpbmc/PiBUb0xvd2VyICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRvTG93ZXIiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInRvTG93ZXIiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMjY2LDcgKzIzMDQsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gVG9Mb3dlcjxUTmV3RW5kPiAoU2NvcGUgc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRvTG93ZXIiLCBzY29wZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0b0xvd2VyIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMjc1LDcgKzIzMTMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBzdHJpbmc/PiBUb1VwcGVyICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRvVXBwZXIiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInRvVXBwZXIiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgc3RyaW5nPz4odGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMjg0LDcgKzIzMjIsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPz4gVG9VcHBlcjxUTmV3RW5kPiAoU2NvcGUgc2NvcGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRvVXBwZXIiLCBzY29wZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0b1VwcGVyIiwgc2NvcGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPz4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjI5Myw3ICsyMzMxLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVmVydGV4PiBUb1YgKERpcmVjdGlvbj8gZGlyZWN0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0b1YiLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidG9WIiwgZGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVmVydGV4Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMzAyLDcgKzIzNDAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUTmV3RW5kPiBUcmVlPFROZXdFbmQ+ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRyZWUiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInRyZWUiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjMxMSw3ICsyMzQ5LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gVHJlZSAoc3RyaW5nIHNpZGVFZmZlY3RLZXkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInRyZWUiLCBzaWRlRWZmZWN0S2V5KTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInRyZWUiLCBzaWRlRWZmZWN0S2V5KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjMyMCw3ICsyMzU4LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgc3RyaW5nPz4gVHJpbSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0cmltIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ0cmltIik7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIHN0cmluZz8+KHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjMyOSw3ICsyMzY3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVE5ld0VuZD8+IFRyaW08VE5ld0VuZD4gKFNjb3BlIHNjb3BlKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ0cmltIiwgc2NvcGUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidHJpbSIsIHNjb3BlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVE5ld0VuZD8+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIzMzgsNyArMjM3Niw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFVuZm9sZDxUTmV3RW5kPiAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ1bmZvbGQiKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInVuZm9sZCIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMzUxLDcgKzIzODksNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD4odW5pb25UcmF2ZXJzYWxzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKHVuaW9uVHJhdmVyc2Fscyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ1bmlvbiIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInVuaW9uIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMzYwLDcgKzIzOTgsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBVbnRpbCAoSVByZWRpY2F0ZSB1bnRpbFByZWRpY2F0ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidW50aWwiLCB1bnRpbFByZWRpY2F0ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ1bnRpbCIsIHVudGlsUHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjM2OSw3ICsyNDA3LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gVW50aWwgKElUcmF2ZXJzYWwgdW50aWxUcmF2ZXJzYWwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInVudGlsIiwgdW50aWxUcmF2ZXJzYWwpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidW50aWwiLCB1bnRpbFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gV3JhcDxUU3RhcnQsIFRFbmQ+KHRoaXMpOwogICAgICAgICB9CiAKQEAgLTIzNzgsNyArMjQxNiw3IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFROZXdFbmQ+IFZhbHVlPFROZXdFbmQ+ICgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoInZhbHVlIik7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ2YWx1ZSIpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yMzkxLDcgKzI0MjksNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KHByb3BlcnR5S2V5cy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShwcm9wZXJ0eUtleXMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidmFsdWVNYXAiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ2YWx1ZU1hcCIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgSURpY3Rpb25hcnk8VEtleSwgVFZhbHVlPj4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjQwNSw3ICsyNDQzLDcgQEAKIAogICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/PigxICsgcHJvcGVydHlLZXlzLkxlbmd0aCkgeyBpbmNsdWRlVG9rZW5zIH07CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKHByb3BlcnR5S2V5cyk7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ2YWx1ZU1hcCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoInZhbHVlTWFwIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU+Pih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yNDE4LDcgKzI0NTYsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KHByb3BlcnR5S2V5cy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZShwcm9wZXJ0eUtleXMpOwotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgidmFsdWVzIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgidmFsdWVzIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBUTmV3RW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yNDI3LDcgKzI0NjUsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBXaGVyZSAoUCBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIndoZXJlIiwgcHJlZGljYXRlKTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nLkFkZFN0ZXAoIndoZXJlIiwgcHJlZGljYXRlKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjQzNiw3ICsyNDc0LDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gV2hlcmUgKHN0cmluZyBzdGFydEtleSwgUCBwcmVkaWNhdGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlLkFkZFN0ZXAoIndoZXJlIiwgc3RhcnRLZXksIHByZWRpY2F0ZSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ3aGVyZSIsIHN0YXJ0S2V5LCBwcmVkaWNhdGUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yNDQ1LDcgKzI0ODMsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBXaGVyZSAoSVRyYXZlcnNhbCB3aGVyZVRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgid2hlcmUiLCB3aGVyZVRyYXZlcnNhbCk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ3aGVyZSIsIHdoZXJlVHJhdmVyc2FsKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjQ1NCw3ICsyNDkyLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gV2l0aCAoc3RyaW5nIGtleSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgid2l0aCIsIGtleSk7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5BZGRTdGVwKCJ3aXRoIiwga2V5KTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjQ2Myw3ICsyNTAxLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gV2l0aCAoc3RyaW5nIGtleSwgb2JqZWN0PyB2YWx1ZSkKICAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUuQWRkU3RlcCgid2l0aCIsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgid2l0aCIsIGtleSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIFdyYXA8VFN0YXJ0LCBURW5kPih0aGlzKTsKICAgICAgICAgfQogCkBAIC0yNDcyLDcgKzI1MTAsNyBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBURW5kPiBXcml0ZSAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBCeXRlY29kZS5BZGRTdGVwKCJ3cml0ZSIpOworICAgICAgICAgICAgR3JlbWxpbkxhbmcuQWRkU3RlcCgid3JpdGUiKTsKICAgICAgICAgICAgIHJldHVybiBXcmFwPFRTdGFydCwgVEVuZD4odGhpcyk7CiAgICAgICAgIH0KIApAQCAtMjQ4Miw3ICsyNTIwLDcgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4gQ2xvbmUoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVEVuZD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CiAgICAgICAgIH0KICAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyYXBoVHJhdmVyc2FsU291cmNlLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyYXBoVHJhdmVyc2FsU291cmNlLmNzCmluZGV4IDcwYjA0MDMuLjU4MTg4MmYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaFRyYXZlcnNhbFNvdXJjZS5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhUcmF2ZXJzYWxTb3VyY2UuY3MKQEAgLTQ4LDE2ICs0OCwxNiBAQAogICAgICAgICBwdWJsaWMgSUNvbGxlY3Rpb248SVRyYXZlcnNhbFN0cmF0ZWd5PiBUcmF2ZXJzYWxTdHJhdGVnaWVzIHsgZ2V0OyBzZXQ7IH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyBvciBzZXRzIHRoZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5CeXRlY29kZSIgLz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgZ3JhcGggdHJhdmVyc2FsCisgICAgICAgIC8vLyAgICAgR2V0cyBvciBzZXRzIHRoZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5HcmVtbGluTGFuZyIgLz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgZ3JhcGggdHJhdmVyc2FsCiAgICAgICAgIC8vLyAgICAgc291cmNlLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQnl0ZWNvZGUgQnl0ZWNvZGUgeyBnZXQ7IHNldDsgfQorICAgICAgICBwdWJsaWMgR3JlbWxpbkxhbmcgR3JlbWxpbkxhbmcgeyBnZXQ7IHNldDsgfQogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmFwaFRyYXZlcnNhbFNvdXJjZSIgLz4gY2xhc3MuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpCi0gICAgICAgICAgICA6IHRoaXMobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PigpLCBuZXcgQnl0ZWNvZGUoKSkKKyAgICAgICAgICAgIDogdGhpcyhuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KCksIG5ldyBHcmVtbGluTGFuZygpKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtNjUsMjAgKzY1LDIwIEBACiAgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWxTb3VyY2UiIC8+IGNsYXNzLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRyYXZlcnNhbFN0cmF0ZWdpZXMiPlRoZSB0cmF2ZXJzYWwgc3RyYXRlZ2llcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBncmFwaCB0cmF2ZXJzYWwgc291cmNlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYnl0ZWNvZGUiPgotICAgICAgICAvLy8gICAgIFRoZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5CeXRlY29kZSIgLz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgZ3JhcGggdHJhdmVyc2FsCisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZ3JlbWxpbkxhbmciPgorICAgICAgICAvLy8gICAgIFRoZSA8c2VlIGNyZWY9IlRyYXZlcnNhbC5HcmVtbGluTGFuZyIgLz4gYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoaXMgZ3JhcGggdHJhdmVyc2FsCiAgICAgICAgIC8vLyAgICAgc291cmNlLgogICAgICAgICAvLy8gPC9wYXJhbT4KLSAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlKElDb2xsZWN0aW9uPElUcmF2ZXJzYWxTdHJhdGVneT4gdHJhdmVyc2FsU3RyYXRlZ2llcywgQnl0ZWNvZGUgYnl0ZWNvZGUpCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZShJQ29sbGVjdGlvbjxJVHJhdmVyc2FsU3RyYXRlZ3k+IHRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBUcmF2ZXJzYWxTdHJhdGVnaWVzID0gdHJhdmVyc2FsU3RyYXRlZ2llczsKLSAgICAgICAgICAgIEJ5dGVjb2RlID0gYnl0ZWNvZGU7CisgICAgICAgICAgICBHcmVtbGluTGFuZyA9IGdyZW1saW5MYW5nOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlKElDb2xsZWN0aW9uPElUcmF2ZXJzYWxTdHJhdGVneT4gdHJhdmVyc2FsU3RyYXRlZ2llcywgQnl0ZWNvZGUgYnl0ZWNvZGUsCi0gICAgICAgICAgICBJUmVtb3RlQ29ubmVjdGlvbiBjb25uZWN0aW9uKQorICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UoSUNvbGxlY3Rpb248SVRyYXZlcnNhbFN0cmF0ZWd5PiB0cmF2ZXJzYWxTdHJhdGVnaWVzLAorICAgICAgICAgICAgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcsIElSZW1vdGVDb25uZWN0aW9uIGNvbm5lY3Rpb24pCiAgICAgICAgICAgICA6IHRoaXModHJhdmVyc2FsU3RyYXRlZ2llcy5XaGVyZShzdHJhdGVneSA9PiBzdHJhdGVneS5HZXRUeXBlKCkgIT0gdHlwZW9mKFJlbW90ZVN0cmF0ZWd5KSkuVG9MaXN0KCksCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGUpCisgICAgICAgICAgICAgICAgZ3JlbWxpbkxhbmcpCiAgICAgICAgIHsKICAgICAgICAgICAgIF9jb25uZWN0aW9uID0gY29ubmVjdGlvbjsKICAgICAgICAgICAgIFRyYXZlcnNhbFN0cmF0ZWdpZXMuQWRkKG5ldyBSZW1vdGVTdHJhdGVneShjb25uZWN0aW9uKSk7CkBAIC05MSw2MSArOTEsNjAgQEAKIAogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aChzdHJpbmcga2V5LCBvYmplY3Q/IHZhbHVlKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgb3B0aW9uc1N0cmF0ZWd5SW5zdCA9IEJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9ucy5GaW5kKAotICAgICAgICAgICAgICAgIGluc3QgPT4gaW5zdC5PcGVyYXRvck5hbWUgPT0gIndpdGhTdHJhdGVnaWVzIiAmJiBpbnN0LkFyZ3VtZW50c1swXSBpcyBPcHRpb25zU3RyYXRlZ3kpOworICAgICAgICAgICAgdmFyIGV4aXN0aW5nT3B0aW9ucyA9IEdyZW1saW5MYW5nLk9wdGlvbnNTdHJhdGVnaWVzOwogICAgICAgICAgICAgT3B0aW9uc1N0cmF0ZWd5IG9wdGlvbnNTdHJhdGVneTsKIAotICAgICAgICAgICAgaWYgKG9wdGlvbnNTdHJhdGVneUluc3QgPT0gbnVsbCkKKyAgICAgICAgICAgIGlmIChleGlzdGluZ09wdGlvbnMuQ291bnQgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcHRpb25zU3RyYXRlZ3kgPSBuZXcgT3B0aW9uc1N0cmF0ZWd5KCk7CiAgICAgICAgICAgICAgICAgb3B0aW9uc1N0cmF0ZWd5LkNvbmZpZ3VyYXRpb25ba2V5XSA9IHZhbHVlOwogICAgICAgICAgICAgICAgIHJldHVybiBXaXRoU3RyYXRlZ2llcyhvcHRpb25zU3RyYXRlZ3kpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBvcHRpb25zU3RyYXRlZ3kgPSBvcHRpb25zU3RyYXRlZ3lJbnN0LkFyZ3VtZW50c1swXSE7CisgICAgICAgICAgICBvcHRpb25zU3RyYXRlZ3kgPSBleGlzdGluZ09wdGlvbnNbZXhpc3RpbmdPcHRpb25zLkNvdW50IC0gMV07CiAgICAgICAgICAgICBvcHRpb25zU3RyYXRlZ3kuQ29uZmlndXJhdGlvbltrZXldID0gdmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oVHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7CisgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CiAgICAgICAgIH0KIAogCiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBXaXRoQnVsayhib29sIHVzZUJ1bGspCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PihUcmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoQnVsayIsIHVzZUJ1bGspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZS5HcmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhCdWxrIiwgdXNlQnVsayk7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlIFdpdGhQYXRoKCkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHNvdXJjZS5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhQYXRoIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgc291cmNlLkdyZW1saW5MYW5nLkFkZFNvdXJjZSgid2l0aFBhdGgiKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aFNhY2sob2JqZWN0PyBpbml0aWFsVmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PihUcmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2FjayIsIGluaXRpYWxWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgc291cmNlLkdyZW1saW5MYW5nLkFkZFNvdXJjZSgid2l0aFNhY2siLCBpbml0aWFsVmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBXaXRoU2FjayhvYmplY3Q/IGluaXRpYWxWYWx1ZSwgSUJpbmFyeU9wZXJhdG9yPyBtZXJnZU9wZXJhdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oVHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgc291cmNlLkJ5dGVjb2RlLkFkZFNvdXJjZSgid2l0aFNhY2siLCBpbml0aWFsVmFsdWUsIG1lcmdlT3BlcmF0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZS5HcmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhTYWNrIiwgaW5pdGlhbFZhbHVlLCBtZXJnZU9wZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aFNhY2sob2JqZWN0PyBpbml0aWFsVmFsdWUsIElVbmFyeU9wZXJhdG9yPyBzcGxpdE9wZXJhdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oVHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgc291cmNlLkJ5dGVjb2RlLkFkZFNvdXJjZSgid2l0aFNhY2siLCBpbml0aWFsVmFsdWUsIHNwbGl0T3BlcmF0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZS5HcmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhTYWNrIiwgaW5pdGlhbFZhbHVlLCBzcGxpdE9wZXJhdG9yKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIApAQCAtMTUzLDMyICsxNTIsMzIgQEAKICAgICAgICAgICAgIElCaW5hcnlPcGVyYXRvcj8gbWVyZ2VPcGVyYXRvcikKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHNvdXJjZS5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTYWNrIiwgaW5pdGlhbFZhbHVlLCBzcGxpdE9wZXJhdG9yLCBtZXJnZU9wZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICBzb3VyY2UuR3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2FjayIsIGluaXRpYWxWYWx1ZSwgc3BsaXRPcGVyYXRvciwgbWVyZ2VPcGVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlIFdpdGhTYWNrKElTdXBwbGllcj8gaW5pdGlhbFZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oVHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgc291cmNlLkJ5dGVjb2RlLkFkZFNvdXJjZSgid2l0aFNhY2siLCBpbml0aWFsVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZS5HcmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhTYWNrIiwgaW5pdGlhbFZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aFNhY2soSVN1cHBsaWVyPyBpbml0aWFsVmFsdWUsIElCaW5hcnlPcGVyYXRvcj8gbWVyZ2VPcGVyYXRvcikKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHNvdXJjZS5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTYWNrIiwgaW5pdGlhbFZhbHVlLCBtZXJnZU9wZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICBzb3VyY2UuR3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2FjayIsIGluaXRpYWxWYWx1ZSwgbWVyZ2VPcGVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlIFdpdGhTYWNrKElTdXBwbGllcj8gaW5pdGlhbFZhbHVlLCBJVW5hcnlPcGVyYXRvcj8gc3BsaXRPcGVyYXRvcikKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHNvdXJjZS5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTYWNrIiwgaW5pdGlhbFZhbHVlLCBzcGxpdE9wZXJhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICBzb3VyY2UuR3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2FjayIsIGluaXRpYWxWYWx1ZSwgc3BsaXRPcGVyYXRvcik7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlOwogICAgICAgICB9CiAKQEAgLTE4Niw0MCArMTg1LDQwIEBACiAgICAgICAgICAgICBJQmluYXJ5T3BlcmF0b3I/IG1lcmdlT3BlcmF0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PihUcmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2FjayIsIGluaXRpYWxWYWx1ZSwgc3BsaXRPcGVyYXRvciwgbWVyZ2VPcGVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgc291cmNlLkdyZW1saW5MYW5nLkFkZFNvdXJjZSgid2l0aFNhY2siLCBpbml0aWFsVmFsdWUsIHNwbGl0T3BlcmF0b3IsIG1lcmdlT3BlcmF0b3IpOwogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBXaXRoU2lkZUVmZmVjdChzdHJpbmc/IGtleSwgb2JqZWN0PyBpbml0aWFsVmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PihUcmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIGtleSwgaW5pdGlhbFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICBzb3VyY2UuR3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIGtleSwgaW5pdGlhbFZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aFNpZGVFZmZlY3Qoc3RyaW5nPyBrZXksIG9iamVjdD8gaW5pdGlhbFZhbHVlLCBJQmluYXJ5T3BlcmF0b3IgcmVkdWNlcikKICAgICAgICAgewogICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHNvdXJjZS5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTaWRlRWZmZWN0Iiwga2V5LCBpbml0aWFsVmFsdWUsIHJlZHVjZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHNvdXJjZS5HcmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhTaWRlRWZmZWN0Iiwga2V5LCBpbml0aWFsVmFsdWUsIHJlZHVjZXIpOwogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBXaXRoU2lkZUVmZmVjdChzdHJpbmc/IGtleSwgSVN1cHBsaWVyPyBpbml0aWFsVmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PihUcmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIGtleSwgaW5pdGlhbFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICBzb3VyY2UuR3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIGtleSwgaW5pdGlhbFZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aFNpZGVFZmZlY3Qoc3RyaW5nPyBrZXksIElTdXBwbGllcj8gaW5pdGlhbFZhbHVlLCBJQmluYXJ5T3BlcmF0b3I/IHJlZHVjZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UobmV3IExpc3Q8SVRyYXZlcnNhbFN0cmF0ZWd5PihUcmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIGtleSwgaW5pdGlhbFZhbHVlLCByZWR1Y2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICBzb3VyY2UuR3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsIGtleSwgaW5pdGlhbFZhbHVlLCByZWR1Y2VyKTsKICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CiAgICAgICAgIH0KIApAQCAtMjI4LDEwICsyMjcsMTAgQEAKICAgICAgICAgICAgIGlmICh0cmF2ZXJzYWxTdHJhdGVnaWVzID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKHRyYXZlcnNhbFN0cmF0ZWdpZXMpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgdmFyIHNvdXJjZSA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CiAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD4odHJhdmVyc2FsU3RyYXRlZ2llcy5MZW5ndGgpOwogICAgICAgICAgICAgYXJncy5BZGRSYW5nZSh0cmF2ZXJzYWxTdHJhdGVnaWVzKTsKLSAgICAgICAgICAgIHNvdXJjZS5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTdHJhdGVnaWVzIiwgYXJncy5Ub0FycmF5KCkpOworICAgICAgICAgICAgc291cmNlLkdyZW1saW5MYW5nLkFkZFNvdXJjZSgid2l0aFN0cmF0ZWdpZXMiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICByZXR1cm4gc291cmNlOwogICAgICAgICB9CiAKQEAgLTI0MCwxNCArMjM5LDE0IEBACiAgICAgICAgICAgICBpZiAodHJhdmVyc2FsU3RyYXRlZ3lDbGFzc2VzID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKHRyYXZlcnNhbFN0cmF0ZWd5Q2xhc3NlcykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKG5ldyBMaXN0PElUcmF2ZXJzYWxTdHJhdGVneT4oVHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmVtbGluTGFuZy5DbG9uZSgpKTsKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4odHJhdmVyc2FsU3RyYXRlZ3lDbGFzc2VzLkxlbmd0aCk7CiAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKHRyYXZlcnNhbFN0cmF0ZWd5Q2xhc3Nlcyk7Ci0gICAgICAgICAgICBzb3VyY2UuQnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRob3V0U3RyYXRlZ2llcyIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIHNvdXJjZS5HcmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhvdXRTdHJhdGVnaWVzIiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgcmV0dXJuIHNvdXJjZTsKICAgICAgICAgfQogCi0gICAgICAgIFtPYnNvbGV0ZSgiVXNlIHRoZSBCaW5kaW5ncyBjbGFzcyBpbnN0ZWFkLiIsIGZhbHNlKV0KKyAgICAgICAgW09ic29sZXRlKCJVc2UgR1ZhbHVlIGluc3RlYWQuIiwgZmFsc2UpXQogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgV2l0aEJpbmRpbmdzKG9iamVjdD8gYmluZGluZ3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwpAQCAtMjY1LDcgKzI2NCw3IEBACiAgICAgICAgIFtPYnNvbGV0ZSgiUHJlZmVyIHVzZSBvZiBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2Uud2l0aCgpLiIsIGZhbHNlKV0KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlIFdpdGhSZW1vdGUoSVJlbW90ZUNvbm5lY3Rpb24gcmVtb3RlQ29ubmVjdGlvbikgPT4KICAgICAgICAgICAgIG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+KFRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgICAgICAgICAgIG5ldyBCeXRlY29kZShCeXRlY29kZSksIHJlbW90ZUNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgIEdyZW1saW5MYW5nLkNsb25lKCksIHJlbW90ZUNvbm5lY3Rpb24pOwogCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBTcGF3bnMgYSBuZXcgPHNlZSBjcmVmPSJSZW1vdGVUcmFuc2FjdGlvbiIvPiBvYmplY3QgdGhhdCBjYW4gdGhlbiBzdGFydCBhbmQgc3RvcCBhIHRyYW5zYWN0aW9uLgpAQCAtMzAxLDE2ICszMDAsMTYgQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IEUocGFyYW1zIG9iamVjdD9bXT8gZWRnZXNJZHMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOwogICAgICAgICAgICAgaWYgKGVkZ2VzSWRzID09IG51bGwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoIkUiLCBuZXcgb2JqZWN0P1tdIHsgbnVsbCB9KTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiRSIsIG5ldyBvYmplY3Q/W10geyBudWxsIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pz4oZWRnZXNJZHMuTGVuZ3RoKTsKICAgICAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKGVkZ2VzSWRzKTsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiRSIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiRSIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgIH0KQEAgLTMyMSwxNiArMzIwLDIzIEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gVihwYXJhbXMgb2JqZWN0P1tdPyB2ZXJ0ZXhJZHMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOworICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CiAgICAgICAgICAgICBpZiAodmVydGV4SWRzID09IG51bGwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoIlYiLCBuZXcgb2JqZWN0P1tdIHsgbnVsbCB9KTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiViIsIG5ldyBvYmplY3Q/W10geyBudWxsIH0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGV4SWRzLkxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnRleElkc1tpXSBpcyBWZXJ0ZXggdmVydGV4KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhJZHNbaV0gPSB2ZXJ0ZXguSWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgTGlzdDxvYmplY3Q/Pih2ZXJ0ZXhJZHMuTGVuZ3RoKTsKICAgICAgICAgICAgICAgICBhcmdzLkFkZFJhbmdlKHZlcnRleElkcyk7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoIlYiLCBhcmdzLlRvQXJyYXkoKSk7CisgICAgICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoIlYiLCBhcmdzLlRvQXJyYXkoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CkBAIC0zNDEsOCArMzQ3LDggQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IEFkZEUoc3RyaW5nIGxhYmVsKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoImFkZEUiLCBsYWJlbCk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZEUiLCBsYWJlbCk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTM1Miw4ICszNTgsOCBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gQWRkRShJVHJhdmVyc2FsIGVkZ2VMYWJlbFRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxFZGdlLCBFZGdlPihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJhZGRFIiwgZWRnZUxhYmVsVHJhdmVyc2FsKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWRkRSIsIGVkZ2VMYWJlbFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTM2MSwxMCArMzY3LDE2IEBACiAgICAgICAgIC8vLyAgICAgU3Bhd25zIGEgPHNlZSBjcmVmPSJHcmFwaFRyYXZlcnNhbHtTVHlwZSwgRVR5cGV9IiAvPiBvZmYgdGhpcyBncmFwaCB0cmF2ZXJzYWwgc291cmNlIGFuZCBhZGRzIHRoZSBtZXJnZUUgc3RlcCB0byB0aGF0CiAgICAgICAgIC8vLyAgICAgdHJhdmVyc2FsLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gTWVyZ2VFKElEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+PyBtKQorICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gTWVyZ2VFKElEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q/Pj8gbSkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxFZGdlLCBFZGdlPihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJtZXJnZUUiLCBtKTsKKyAgICAgICAgICAgIGlmIChtICE9IG51bGwgJiYgbS5Db250YWluc0tleShEaXJlY3Rpb24uT3V0KSAmJiBtW0RpcmVjdGlvbi5PdXRdIGlzIFZlcnRleCBvdXRWKSB7CisgICAgICAgICAgICAgICAgbVtEaXJlY3Rpb24uT3V0XSA9IG91dFYuSWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobSAhPSBudWxsICYmIG0uQ29udGFpbnNLZXkoRGlyZWN0aW9uLkluKSAmJiBtW0RpcmVjdGlvbi5Jbl0gaXMgVmVydGV4IGluVikgeworICAgICAgICAgICAgICAgIG1bRGlyZWN0aW9uLkluXSA9IGluVi5JZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVyZ2VFIiwgbSk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTM3NCw4ICszODYsOCBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gTWVyZ2VFKElUcmF2ZXJzYWw/IHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8RWRnZSwgRWRnZT4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgibWVyZ2VFIiwgdCk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlRSIsIHQpOwogICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKICAgICAgICAgfQogCkBAIC0zODUsOCArMzk3LDggQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBBZGRWKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiYWRkViIpOworICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWRkViIpOwogICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKICAgICAgICAgfQogCkBAIC0zOTYsOCArNDA4LDggQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBBZGRWKHN0cmluZyBsYWJlbCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiYWRkViIsIGxhYmVsKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZFYiLCBsYWJlbCk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTQwNyw4ICs0MTksOCBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IEFkZFYoSVRyYXZlcnNhbCB2ZXJ0ZXhMYWJlbFRyYXZlcnNhbCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiYWRkViIsIHZlcnRleExhYmVsVHJhdmVyc2FsKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZFYiLCB2ZXJ0ZXhMYWJlbFRyYXZlcnNhbCk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTQxOCw4ICs0MzAsOCBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IE1lcmdlVihJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0Pj8gbSkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgibWVyZ2VWIiwgbSk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJtZXJnZVYiLCBtKTsKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgIH0KIApAQCAtNDI5LDggKzQ0MSw4IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gTWVyZ2VWKElUcmF2ZXJzYWw/IHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoIm1lcmdlViIsIHQpOworICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVyZ2VWIiwgdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTQ0MCwxOCArNDUyLDE4IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4gSW5qZWN0PFRTdGFydD4ocGFyYW1zIFRTdGFydD9bXT8gc3RhcnRzKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVFN0YXJ0PihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOwogCiAgICAgICAgICAgICAvLyBudWxsIHN0YXJ0cyBpcyB0cmVhdGVkIGFzIGcuaW5qZWN0KG51bGwpIG1lYW5pbmcgaW5qZWN0IGEgc2luZ2xlIG51bGwgdHJhdmVyc2VyCiAgICAgICAgICAgICBpZiAoc3RhcnRzID09IG51bGwpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoImluamVjdCIsIG5ldyBvYmplY3Q/W10geyBudWxsIH0pOworICAgICAgICAgICAgICAgIHRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJpbmplY3QiLCBuZXcgb2JqZWN0P1tdIHsgbnVsbCB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBMaXN0PG9iamVjdD8+KHN0YXJ0cy5MZW5ndGgpOwogICAgICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2Uoc3RhcnRzLkNhc3Q8b2JqZWN0Pz4oKSk7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoImluamVjdCIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaW5qZWN0IiwgYXJncy5Ub0FycmF5KCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwpAQCAtNDYzLDggKzQ3NSw4IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4gSW88VFN0YXJ0PihzdHJpbmcgZmlsZSkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiaW8iLCBmaWxlKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoImlvIiwgZmlsZSk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTQ3NCw4ICs0ODYsOCBAQAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+IENhbGw8VFN0YXJ0PigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoImNhbGwiKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoImNhbGwiKTsKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgIH0KIApAQCAtNDg1LDggKzQ5Nyw4IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4gQ2FsbDxUU3RhcnQ+KHN0cmluZz8gc2VydmljZSkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UpOworICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UpOwogICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKICAgICAgICAgfQogCkBAIC00OTYsOCArNTA4LDggQEAKICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVFN0YXJ0PiBDYWxsPFRTdGFydD4oc3RyaW5nPyBzZXJ2aWNlLCBJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4/IG0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIG5ldyBCeXRlY29kZShCeXRlY29kZSkpOwotICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoImNhbGwiLCBzZXJ2aWNlLCBtKTsKKyAgICAgICAgICAgIHZhciB0cmF2ZXJzYWwgPSBuZXcgR3JhcGhUcmF2ZXJzYWw8VFN0YXJ0LCBUU3RhcnQ+KFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdyZW1saW5MYW5nLkNsb25lKCkpOworICAgICAgICAgICAgdHJhdmVyc2FsLkdyZW1saW5MYW5nLkFkZFN0ZXAoImNhbGwiLCBzZXJ2aWNlLCBtKTsKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgIH0KIApAQCAtNTA3LDggKzUxOSw4IEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4gQ2FsbDxUU3RhcnQ+KHN0cmluZz8gc2VydmljZSwgSVRyYXZlcnNhbD8gdCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UsIHQpOworICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgR3JlbWxpbkxhbmcuQ2xvbmUoKSk7CisgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2FsbCIsIHNlcnZpY2UsIHQpOwogICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKICAgICAgICAgfQogCkBAIC01MTksOCArNTMxLDggQEAKICAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVFN0YXJ0PiBDYWxsPFRTdGFydD4oc3RyaW5nPyBzZXJ2aWNlLCBJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4/IG0sCiAgICAgICAgICAgICBJVHJhdmVyc2FsPyB0KQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVFN0YXJ0PihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBuZXcgQnl0ZWNvZGUoQnl0ZWNvZGUpKTsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJjYWxsIiwgc2VydmljZSwgbSwgdCk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVFN0YXJ0PihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBHcmVtbGluTGFuZy5DbG9uZSgpKTsKKyAgICAgICAgICAgIHRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJjYWxsIiwgc2VydmljZSwgbSwgdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsOwogICAgICAgICB9CiAKQEAgLTUzMCwxMCArNTQyLDEwIEBACiAgICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4gVW5pb248VFN0YXJ0PihwYXJhbXMgSVRyYXZlcnNhbFtdIHVuaW9uVHJhdmVyc2FscykKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHRyYXZlcnNhbCA9IG5ldyBHcmFwaFRyYXZlcnNhbDxUU3RhcnQsIFRTdGFydD4oVHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKEJ5dGVjb2RlKSk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2FsID0gbmV3IEdyYXBoVHJhdmVyc2FsPFRTdGFydCwgVFN0YXJ0PihUcmF2ZXJzYWxTdHJhdGVnaWVzLCBHcmVtbGluTGFuZy5DbG9uZSgpKTsKICAgICAgICAgICAgIHZhciBhcmdzID0gbmV3IExpc3Q8b2JqZWN0Pih1bmlvblRyYXZlcnNhbHMuTGVuZ3RoKTsKICAgICAgICAgICAgIGFyZ3MuQWRkUmFuZ2UodW5pb25UcmF2ZXJzYWxzKTsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJ1bmlvbiIsIGFyZ3MuVG9BcnJheSgpKTsKKyAgICAgICAgICAgIHRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJ1bmlvbiIsIGFyZ3MuVG9BcnJheSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNWE5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JlbWxpbkxhbmcuY3MKQEAgLTAsMCArMSw3NjcgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKK3VzaW5nIFN5c3RlbS5OdW1lcmljczsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlN0cmF0ZWd5OwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRGVjb3JhdGlvbjsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZTsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyAgICAgQnVpbGRzIGEgZ3JlbWxpbi1sYW5nIGNvbXBhdGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgdHJhdmVyc2FsLAorICAgIC8vLyAgICAgYWxvbmcgd2l0aCBhIG1hcCBvZiBuYW1lZCBwYXJhbWV0ZXJzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIEdyZW1saW5MYW5nIDogSUNsb25lYWJsZSwgSUVxdWF0YWJsZTxHcmVtbGluTGFuZz4KKyAgICB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IG9iamVjdFtdIEVtcHR5QXJyYXkgPSBBcnJheS5FbXB0eTxvYmplY3Q+KCk7CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmdCdWlsZGVyIF9ncmVtbGluID0gbmV3KCk7CisgICAgICAgIHByaXZhdGUgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gX3BhcmFtZXRlcnMgPSBuZXcoKTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IF9wYXJhbUNvdW50OworICAgICAgICBwcml2YXRlIExpc3Q8T3B0aW9uc1N0cmF0ZWd5PiBfb3B0aW9uc1N0cmF0ZWdpZXMgPSBuZXcoKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JlbWxpbkxhbmciIC8+IGNsYXNzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgR3JlbWxpbkxhbmcoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQWRkcyBhIHRyYXZlcnNhbCBzb3VyY2UgaW5zdHJ1Y3Rpb24gdG8gdGhlIEdyZW1saW5MYW5nLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNvdXJjZU5hbWUiPlRoZSB0cmF2ZXJzYWwgc291cmNlIG1ldGhvZCBuYW1lIChlLmcuIHdpdGhTYWNrKCkpLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYXJndW1lbnRzIj5UaGUgdHJhdmVyc2FsIHNvdXJjZSBtZXRob2QgYXJndW1lbnRzLjwvcGFyYW0+CisgICAgICAgIHB1YmxpYyB2b2lkIEFkZFNvdXJjZShzdHJpbmcgc291cmNlTmFtZSwgcGFyYW1zIG9iamVjdD9bXSBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2VOYW1lID09ICJ3aXRoU3RyYXRlZ2llcyIgJiYgYXJndW1lbnRzLkxlbmd0aCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBhcmdzID0gQnVpbGRTdHJhdGVneUFyZ3MoYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJncy5MZW5ndGggIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIF9ncmVtbGluLkFwcGVuZCgnLicpLkFwcGVuZCgid2l0aFN0cmF0ZWdpZXMiKS5BcHBlbmQoJygnKS5BcHBlbmQoYXJncykuQXBwZW5kKCcpJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQWRkVG9HcmVtbGluKHNvdXJjZU5hbWUsIGFyZ3VtZW50cyk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQWRkcyBhIHRyYXZlcnNhbCBzdGVwIGluc3RydWN0aW9uIHRvIHRoZSBHcmVtbGluTGFuZy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdGVwTmFtZSI+VGhlIHRyYXZlcnNhbCBtZXRob2QgbmFtZSAoZS5nLiBvdXQoKSkuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJhcmd1bWVudHMiPlRoZSB0cmF2ZXJzYWwgbWV0aG9kIGFyZ3VtZW50cy48L3BhcmFtPgorICAgICAgICBwdWJsaWMgdm9pZCBBZGRTdGVwKHN0cmluZyBzdGVwTmFtZSwgcGFyYW1zIG9iamVjdD9bXSBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFkZFRvR3JlbWxpbihzdGVwTmFtZSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBTZXRzIHRoZSBhbGlhcyBmb3IgdGhlIHRyYXZlcnNhbCBzb3VyY2UuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZyI+VGhlIGFsaWFzIHRvIHNldC48L3BhcmFtPgorICAgICAgICBwdWJsaWMgdm9pZCBBZGRHKHN0cmluZyBnKQorICAgICAgICB7CisgICAgICAgICAgICBfcGFyYW1ldGVyc1siZyJdID0gZzsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIHRoZSBncmVtbGluLWxhbmcgY29tcGF0aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gcHJlZml4ZWQgd2l0aCAiZyIuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgZ3JlbWxpbi1sYW5nIHN0cmluZy48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdHJpbmcgR2V0R3JlbWxpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHZXRHcmVtbGluKCJnIik7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgZ3JlbWxpbi1sYW5nIGNvbXBhdGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXguCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icHJlZml4Ij5UaGUgcHJlZml4IHRvIHVzZSAoZS5nLiAiZyIgb3IgIl9fIikuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBncmVtbGluLWxhbmcgc3RyaW5nLjwvcmV0dXJucz4KKyAgICAgICAgcHVibGljIHN0cmluZyBHZXRHcmVtbGluKHN0cmluZyBwcmVmaXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBncmVtbGluU3RyID0gX2dyZW1saW4uVG9TdHJpbmcoKTsKKyAgICAgICAgICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIENhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwKKyAgICAgICAgICAgIGlmIChncmVtbGluU3RyLkxlbmd0aCAhPSAwICYmIGdyZW1saW5TdHJbMF0gIT0gJy4nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBncmVtbGluU3RyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIGdyZW1saW5TdHI7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgcGFyYW1ldGVycyB1c2VkIGluIHRoZSB0cmF2ZXJzYWwuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBQYXJhbWV0ZXJzID0+IF9wYXJhbWV0ZXJzOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBHZXRzIHRoZSBsaXN0IG9mIGV4dHJhY3RlZCBPcHRpb25zU3RyYXRlZ3kgaW5zdGFuY2VzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgTGlzdDxPcHRpb25zU3RyYXRlZ3k+IE9wdGlvbnNTdHJhdGVnaWVzID0+IF9vcHRpb25zU3RyYXRlZ2llczsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGlzIEdyZW1saW5MYW5nIGhhcyBubyBjb250ZW50LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgYm9vbCBJc0VtcHR5ID0+IF9ncmVtbGluLkxlbmd0aCA9PSAwOworICAgICAgICAKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEdldHMgb3Igc2V0cyB0aGUgcmF3IGdyZW1saW4gc3RyaW5nIGNvbnRlbnQgKHdpdGhvdXQgdGhlICJnIiBwcmVmaXgpLgorICAgICAgICAvLy8gICAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgdXNlIG9ubHksIHN1Y2ggYXMgcHJlcGVuZGluZworICAgICAgICAvLy8gICAgIHNvdXJjZSBzdGVwcyBsaWtlIHdpdGhTaWRlRWZmZWN0IGFmdGVyIHRyYXZlcnNhbCBjb25zdHJ1Y3Rpb24uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIGludGVybmFsIHN0cmluZyBHcmVtbGluCisgICAgICAgIHsKKyAgICAgICAgICAgIGdldCA9PiBfZ3JlbWxpbi5Ub1N0cmluZygpOworICAgICAgICAgICAgc2V0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2dyZW1saW4uQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBfZ3JlbWxpbi5BcHBlbmQodmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIFJlc2V0cyB0aGUgc3RhdGljIHBhcmFtZXRlciBjb3VudGVyLiBJbnRlbmRlZCBmb3IgdGVzdCBkZXRlcm1pbmlzbS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIFJlc2V0Q291bnRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEludGVybG9ja2VkLkV4Y2hhbmdlKHJlZiBfcGFyYW1Db3VudCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgQWRkVG9HcmVtbGluKHN0cmluZyBuYW1lLCBvYmplY3Q/W10gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZmxhdHRlbmVkQXJndW1lbnRzID0gRmxhdHRlbkFyZ3VtZW50cyhhcmd1bWVudHMpOworCisgICAgICAgICAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciBDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsCisgICAgICAgICAgICBpZiAobmFtZSA9PSAiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgX2dyZW1saW4uQXBwZW5kKCJDYXJkaW5hbGl0eS4iKS5BcHBlbmQoZmxhdHRlbmVkQXJndW1lbnRzWzBdKQorICAgICAgICAgICAgICAgICAgICAuQXBwZW5kKCcoJykuQXBwZW5kKGZsYXR0ZW5lZEFyZ3VtZW50c1sxXSkuQXBwZW5kKCcpJyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfZ3JlbWxpbi5BcHBlbmQoJy4nKS5BcHBlbmQobmFtZSkuQXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmxhdHRlbmVkQXJndW1lbnRzLkxlbmd0aDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBfZ3JlbWxpbi5BcHBlbmQoJywnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgX2dyZW1saW4uQXBwZW5kKEFyZ0FzU3RyaW5nKGZsYXR0ZW5lZEFyZ3VtZW50c1tpXSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBfZ3JlbWxpbi5BcHBlbmQoJyknKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RyaW5nIEFyZ0FzU3RyaW5nKG9iamVjdD8gYXJnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJnID09IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBzdHJpbmcgcykKKyAgICAgICAgICAgICAgICByZXR1cm4gJCJcIntFc2NhcGVKYXZhKHMpfVwiIjsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBib29sIGIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGIgPyAidHJ1ZSIgOiAiZmFsc2UiOworCisgICAgICAgICAgICBpZiAoYXJnIGlzIGJ5dGUgYnl0ZVZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gJCJ7Ynl0ZVZhbH1CIjsKKyAgICAgICAgICAgIGlmIChhcmcgaXMgc2J5dGUgc2J5dGVWYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuICQie3NieXRlVmFsfUIiOworICAgICAgICAgICAgaWYgKGFyZyBpcyBzaG9ydCBzaG9ydFZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gJCJ7c2hvcnRWYWx9UyI7CisgICAgICAgICAgICBpZiAoYXJnIGlzIGludCBpbnRWYWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludFZhbC5Ub1N0cmluZyhDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKTsKKyAgICAgICAgICAgIGlmIChhcmcgaXMgbG9uZyBsb25nVmFsKQorICAgICAgICAgICAgICAgIHJldHVybiAkIntsb25nVmFsfUwiOworCisgICAgICAgICAgICBpZiAoYXJnIGlzIEJpZ0ludGVnZXIgYmlnSW50VmFsKQorICAgICAgICAgICAgICAgIHJldHVybiAkIntiaWdJbnRWYWx9TiI7CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgZmxvYXQgZmxvYXRWYWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGZsb2F0LklzTmFOKGZsb2F0VmFsKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJOYU4iOworICAgICAgICAgICAgICAgIGlmIChmbG9hdC5Jc1Bvc2l0aXZlSW5maW5pdHkoZmxvYXRWYWwpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIitJbmZpbml0eSI7CisgICAgICAgICAgICAgICAgaWYgKGZsb2F0LklzTmVnYXRpdmVJbmZpbml0eShmbG9hdFZhbCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiLUluZmluaXR5IjsKKyAgICAgICAgICAgICAgICByZXR1cm4gJCJ7Rm9ybWF0RmxvYXRpbmdQb2ludChmbG9hdFZhbC5Ub1N0cmluZyhDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKSl9RiI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgZG91YmxlIGRvdWJsZVZhbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZG91YmxlLklzTmFOKGRvdWJsZVZhbCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiTmFOIjsKKyAgICAgICAgICAgICAgICBpZiAoZG91YmxlLklzUG9zaXRpdmVJbmZpbml0eShkb3VibGVWYWwpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIitJbmZpbml0eSI7CisgICAgICAgICAgICAgICAgaWYgKGRvdWJsZS5Jc05lZ2F0aXZlSW5maW5pdHkoZG91YmxlVmFsKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICItSW5maW5pdHkiOworICAgICAgICAgICAgICAgIHJldHVybiAkIntGb3JtYXRGbG9hdGluZ1BvaW50KGRvdWJsZVZhbC5Ub1N0cmluZyhDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKSl9RCI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgZGVjaW1hbCBkZWNpbWFsVmFsKQorICAgICAgICAgICAgICAgIHJldHVybiAkIntkZWNpbWFsVmFsLlRvU3RyaW5nKEN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUpfU0iOworCisgICAgICAgICAgICBpZiAoYXJnIGlzIERhdGVUaW1lT2Zmc2V0IGR0bykKKyAgICAgICAgICAgICAgICByZXR1cm4gJCJkYXRldGltZShcIntkdG8uVG9Vbml2ZXJzYWxUaW1lKCk6eXl5eS1NTS1kZFRISDptbTpzcy5mZmZafVwiKSI7CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgR3VpZCBndWlkKQorICAgICAgICAgICAgICAgIHJldHVybiAkIlVVSUQoXCJ7Z3VpZH1cIikiOworCisgICAgICAgICAgICBpZiAoYXJnIGlzIEVudW1XcmFwcGVyIGVudW1XcmFwcGVyKQorICAgICAgICAgICAgICAgIHJldHVybiAkIntlbnVtV3JhcHBlci5FbnVtTmFtZX0ue2VudW1XcmFwcGVyLkVudW1WYWx1ZX0iOworCisgICAgICAgICAgICBpZiAoYXJnIGlzIFZlcnRleCB2ZXJ0ZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFyZ0FzU3RyaW5nKHZlcnRleC5JZCk7CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgUCBwKQorICAgICAgICAgICAgICAgIHJldHVybiBBc1N0cmluZyhwKTsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBHcmVtbGluTGFuZyBnbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIga3ZwIGluIGdsLl9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX3BhcmFtZXRlcnNba3ZwLktleV0gPSBrdnAuVmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBnbC5HZXRHcmVtbGluKCJfXyIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJnIGlzIElUcmF2ZXJzYWwgdHJhdmVyc2FsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciB0cmF2ZXJzYWxHbCA9IHRyYXZlcnNhbC5HcmVtbGluTGFuZzsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIga3ZwIGluIHRyYXZlcnNhbEdsLl9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX3BhcmFtZXRlcnNba3ZwLktleV0gPSBrdnAuVmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWxHbC5HZXRHcmVtbGluKCJfXyIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJnIGlzIElHVmFsdWUgZ1ZhbHVlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBrZXkgPSBnVmFsdWUuTmFtZTsKKworICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcmdBc1N0cmluZyhnVmFsdWUuT2JqZWN0VmFsdWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghSXNWYWxpZElkZW50aWZpZXIoa2V5KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigkIkludmFsaWQgcGFyYW1ldGVyIG5hbWUgW3trZXl9XS4iKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoX3BhcmFtZXRlcnMuQ29udGFpbnNLZXkoa2V5KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghRXF1YWxzKF9wYXJhbWV0ZXJzW2tleV0sIGdWYWx1ZS5PYmplY3RWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigkIlBhcmFtZXRlciB3aXRoIG5hbWUgW3trZXl9XSBhbHJlYWR5IGRlZmluZWQuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX3BhcmFtZXRlcnNba2V5XSA9IGdWYWx1ZS5PYmplY3RWYWx1ZSE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgQ2FyZGluYWxpdHlWYWx1ZSBjdikKKyAgICAgICAgICAgICAgICByZXR1cm4gJCJDYXJkaW5hbGl0eS57Y3YuQ2FyZGluYWxpdHkhLkVudW1WYWx1ZX0oe0FyZ0FzU3RyaW5nKGN2LlZhbHVlKX0pIjsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBJRGljdGlvbmFyeSBkaWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBBc1N0cmluZyhkaWN0KTsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBJU2V0PG9iamVjdD8+IG9ialNldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQXNTdHJpbmdTZXQob2JqU2V0KTsKKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGdlbmVyaWMgSGFzaFNldCB0eXBlcworICAgICAgICAgICAgaWYgKElzSGFzaFNldFR5cGUoYXJnLkdldFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFzU3RyaW5nU2V0RW51bWVyYWJsZSgoSUVudW1lcmFibGUpYXJnKTsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBJTGlzdCBsaXN0KQorICAgICAgICAgICAgICAgIHJldHVybiBBc1N0cmluZ0xpc3QobGlzdCk7CisKKyAgICAgICAgICAgIGlmIChhcmcgaXMgQXJyYXkgYXJyKQorICAgICAgICAgICAgICAgIHJldHVybiBBc1N0cmluZ0xpc3QoYXJyKTsKKworICAgICAgICAgICAgaWYgKGFyZyBpcyBUeXBlIHR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUuTmFtZTsKKworICAgICAgICAgICAgcmV0dXJuIEFzUGFyYW1ldGVyKGFyZyk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0cmluZyBBc1BhcmFtZXRlcihvYmplY3QgYXJnKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcGFyYW1OYW1lID0gJCJfe0ludGVybG9ja2VkLkluY3JlbWVudChyZWYgX3BhcmFtQ291bnQpIC0gMX0iOworICAgICAgICAgICAgX3BhcmFtZXRlcnNbcGFyYW1OYW1lXSA9IGFyZzsKKyAgICAgICAgICAgIHJldHVybiBwYXJhbU5hbWU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0cmluZyBBc1N0cmluZyhQIHApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICAgICAgICAgIGlmIChwIGlzIFRleHRQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBjb25uZWN0aXZlIChhbmQvb3IpIG9uIFRleHRQCisgICAgICAgICAgICAgICAgaWYgKHAuT3BlcmF0b3JOYW1lID09ICJhbmQiIHx8IHAuT3BlcmF0b3JOYW1lID09ICJvciIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBWYWx1ZSBpcyB0aGUgbGVmdCBQLCBPdGhlciBpcyB0aGUgcmlnaHQgUAorICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoQXJnQXNTdHJpbmcocC5WYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoJy4nKS5BcHBlbmQocC5PcGVyYXRvck5hbWUpLkFwcGVuZCgnKCcpOworICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoQXJnQXNTdHJpbmcocC5PdGhlcikpOworICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoJyknKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKHAuT3BlcmF0b3JOYW1lKS5BcHBlbmQoJygnKTsKKyAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKEFyZ0FzU3RyaW5nKHAuVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCcpJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocC5PcGVyYXRvck5hbWUgPT0gImFuZCIgfHwgcC5PcGVyYXRvck5hbWUgPT0gIm9yIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBDb25uZWN0aXZlIFA6IFZhbHVlIGlzIHRoZSBsZWZ0IFAsIE90aGVyIGlzIHRoZSByaWdodCBQCisgICAgICAgICAgICAgICAgc2IuQXBwZW5kKEFyZ0FzU3RyaW5nKHAuVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzYi5BcHBlbmQoJy4nKS5BcHBlbmQocC5PcGVyYXRvck5hbWUpLkFwcGVuZCgnKCcpOworICAgICAgICAgICAgICAgIHNiLkFwcGVuZChBcmdBc1N0cmluZyhwLk90aGVyKSk7CisgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCcpJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwLk9wZXJhdG9yTmFtZSA9PSAibm90IikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzYi5BcHBlbmQoIlAubm90KCIpOworICAgICAgICAgICAgICAgIHNiLkFwcGVuZChBcmdBc1N0cmluZyhwLlZhbHVlKSk7CisgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCcpJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUmVndWxhciBQOiByZW5kZXIgd2l0aG91dCAiUC4iIHByZWZpeCB0byBtYXRjaCBKYXZhL0dvL1B5dGhvbiBiZWhhdmlvcgorICAgICAgICAgICAgICAgIHNiLkFwcGVuZChwLk9wZXJhdG9yTmFtZSkuQXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgICAgICAvLyBGb3IgcHJlZGljYXRlcyBsaWtlIGJldHdlZW4vaW5zaWRlLCB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0W10gd2l0aCAyIGVsZW1lbnRzCisgICAgICAgICAgICAgICAgaWYgKHAuVmFsdWUgaXMgb2JqZWN0W10gdmFsQXJyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbEFyci5MZW5ndGggPiAxICYmIHAuT3BlcmF0b3JOYW1lICE9ICJiZXR3ZWVuIiAmJiBwLk9wZXJhdG9yTmFtZSAhPSAiaW5zaWRlIikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCdbJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbEFyci5MZW5ndGg7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHNiLkFwcGVuZCgnLCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZChBcmdBc1N0cmluZyh2YWxBcnJbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgnXScpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxBcnIuTGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSBzYi5BcHBlbmQoJywnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoQXJnQXNTdHJpbmcodmFsQXJyW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocC5WYWx1ZSBpcyBJTGlzdCBsaXN0VmFsICYmIChwLk9wZXJhdG9yTmFtZSA9PSAid2l0aGluIiB8fCBwLk9wZXJhdG9yTmFtZSA9PSAid2l0aG91dCIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gd2l0aGluL3dpdGhvdXQgd2l0aCBhIGxpc3QgdmFsdWUgLSByZW5kZXIgYXMgW2UxLGUyLC4uLl0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RWYWwuQ291bnQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW1wdHkgd2l0aGluKCkgLSBubyBicmFja2V0cworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCdbJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3RWYWwuQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHNiLkFwcGVuZCgnLCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZChBcmdBc1N0cmluZyhsaXN0VmFsW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoJ10nKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoQXJnQXNTdHJpbmcocC5WYWx1ZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgnKScpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc2IuVG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RyaW5nIEFzU3RyaW5nKElEaWN0aW9uYXJ5IGRpY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCJbIik7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IGRpY3QuQ291bnQ7CisKKyAgICAgICAgICAgIGlmIChzaXplID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCc6Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yZWFjaCAoRGljdGlvbmFyeUVudHJ5IGVudHJ5IGluIGRpY3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gQXJnQXNTdHJpbmcoZW50cnkuS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBmb3IgZW51bSBrZXlzCisgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5LZXkgaXMgRW51bVdyYXBwZXIgJiYga2V5LkNvbnRhaW5zKCIuIikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9ICQiKHtrZXl9KSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKGtleSkuQXBwZW5kKCc6JykuQXBwZW5kKEFyZ0FzU3RyaW5nKGVudHJ5LlZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgtLXNpemUgPiAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoJywnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2IuQXBwZW5kKCddJyk7CisgICAgICAgICAgICByZXR1cm4gc2IuVG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RyaW5nIEFzU3RyaW5nU2V0KElTZXQ8b2JqZWN0Pz4gc2V0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigieyIpOworICAgICAgICAgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIHNldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSBzYi5BcHBlbmQoJywnKTsKKyAgICAgICAgICAgICAgICBzYi5BcHBlbmQoQXJnQXNTdHJpbmcoaXRlbSkpOworICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzYi5BcHBlbmQoJ30nKTsKKyAgICAgICAgICAgIHJldHVybiBzYi5Ub1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdHJpbmcgQXNTdHJpbmdTZXRFbnVtZXJhYmxlKElFbnVtZXJhYmxlIHNldCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoInsiKTsKKyAgICAgICAgICAgIHZhciBmaXJzdCA9IHRydWU7CisgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBzZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkgc2IuQXBwZW5kKCcsJyk7CisgICAgICAgICAgICAgICAgc2IuQXBwZW5kKEFyZ0FzU3RyaW5nKGl0ZW0pKTsKKyAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2IuQXBwZW5kKCd9Jyk7CisgICAgICAgICAgICByZXR1cm4gc2IuVG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RyaW5nIEFzU3RyaW5nTGlzdChJRW51bWVyYWJsZSBsaXN0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigiWyIpOworICAgICAgICAgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGxpc3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdCkgc2IuQXBwZW5kKCcsJyk7CisgICAgICAgICAgICAgICAgc2IuQXBwZW5kKEFyZ0FzU3RyaW5nKGl0ZW0pKTsKKyAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2IuQXBwZW5kKCddJyk7CisgICAgICAgICAgICByZXR1cm4gc2IuVG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RyaW5nIEJ1aWxkU3RyYXRlZ3lBcmdzKG9iamVjdD9bXSBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgICAgICB2YXIgY291bnQgPSAwOworICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFyZyBpbiBhcmd1bWVudHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZyBpcyBPcHRpb25zU3RyYXRlZ3kgb3B0aW9uc1N0cmF0ZWd5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgX29wdGlvbnNTdHJhdGVnaWVzLkFkZChvcHRpb25zU3RyYXRlZ3kpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPiAwKQorICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoJywnKTsKKworICAgICAgICAgICAgICAgIGlmIChhcmcgaXMgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdHJhdGVneU5hbWUgPSBzdHJhdGVneS5TdHJhdGVneU5hbWU7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWd1cmF0aW9uID0gc3RyYXRlZ3kuQ29uZmlndXJhdGlvbjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbi5Db3VudCA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoc3RyYXRlZ3lOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgibmV3ICIpLkFwcGVuZChzdHJhdGVneU5hbWUpLkFwcGVuZCgnKCcpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBrdnAgaW4gY29uZmlndXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa3ZwLktleSA9PSAic3RyYXRlZ3kiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgnLCcpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKGt2cC5LZXkpLkFwcGVuZCgnOicpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGt2cC5WYWx1ZSBpcyBJVHJhdmVyc2FsIHRyYXZlcnNhbFZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZChBcmdBc1N0cmluZyh0cmF2ZXJzYWxWYWwuR3JlbWxpbkxhbmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKEFyZ0FzU3RyaW5nKGt2cC5WYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCcpJyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzYi5Ub1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBvYmplY3Q/W10gRmxhdHRlbkFyZ3VtZW50cyhvYmplY3Q/W10gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnRzID09IG51bGwgfHwgYXJndW1lbnRzLkxlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBFbXB0eUFycmF5OworCisgICAgICAgICAgICB2YXIgZmxhdEFyZ3VtZW50cyA9IG5ldyBMaXN0PG9iamVjdD8+KGFyZ3VtZW50cy5MZW5ndGgpOworICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFyZyBpbiBhcmd1bWVudHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFyZyBpcyBvYmplY3RbXSBvYmplY3RzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIG5lc3RPYmplY3QgaW4gb2JqZWN0cykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmxhdEFyZ3VtZW50cy5BZGQoQ29udmVydEFyZ3VtZW50KG5lc3RPYmplY3QpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmbGF0QXJndW1lbnRzLkFkZChDb252ZXJ0QXJndW1lbnQoYXJnKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZsYXRBcmd1bWVudHMuVG9BcnJheSgpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBvYmplY3Q/IENvbnZlcnRBcmd1bWVudChvYmplY3Q/IGFyZ3VtZW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYXJndW1lbnQgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgaWYgKGFyZ3VtZW50IGlzIElUcmF2ZXJzYWwgdHJhdmVyc2FsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghdHJhdmVyc2FsLklzQW5vbnltb3VzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAkIlRoZSBjaGlsZCB0cmF2ZXJzYWwgb2Yge3RyYXZlcnNhbH0gd2FzIG5vdCBzcGF3bmVkIGFub255bW91c2x5IC0gdXNlIHRoZSBfXyBjbGFzcyByYXRoZXIgdGhhbiBhIFRyYXZlcnNhbFNvdXJjZSB0byBjb25zdHJ1Y3QgdGhlIGNoaWxkIHRyYXZlcnNhbCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLkdyZW1saW5MYW5nOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoSXNEaWN0aW9uYXJ5VHlwZShhcmd1bWVudC5HZXRUeXBlKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q/PigpOworICAgICAgICAgICAgICAgIGZvcmVhY2ggKERpY3Rpb25hcnlFbnRyeSBpdGVtIGluIChJRGljdGlvbmFyeSlhcmd1bWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGRpY3RbQ29udmVydEFyZ3VtZW50KGl0ZW0uS2V5KSFdID0gQ29udmVydEFyZ3VtZW50KGl0ZW0uVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKElzTGlzdFR5cGUoYXJndW1lbnQuR2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBMaXN0PG9iamVjdD8+KCgoSUxpc3QpYXJndW1lbnQpLkNvdW50KTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiAoSUxpc3QpYXJndW1lbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsaXN0LkFkZChDb252ZXJ0QXJndW1lbnQoaXRlbSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKElzSGFzaFNldFR5cGUoYXJndW1lbnQuR2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgc2V0ID0gbmV3IEhhc2hTZXQ8b2JqZWN0Pz4oKTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiAoSUVudW1lcmFibGUpYXJndW1lbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZXQuQWRkKENvbnZlcnRBcmd1bWVudChpdGVtKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBzZXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2wgSXNEaWN0aW9uYXJ5VHlwZShUeXBlIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJiB0eXBlLkdldEdlbmVyaWNUeXBlRGVmaW5pdGlvbigpID09IHR5cGVvZihEaWN0aW9uYXJ5PCw+KTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2wgSXNMaXN0VHlwZShUeXBlIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJiB0eXBlLkdldEdlbmVyaWNUeXBlRGVmaW5pdGlvbigpID09IHR5cGVvZihMaXN0PD4pOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbCBJc0hhc2hTZXRUeXBlKFR5cGUgdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHR5cGUuSXNDb25zdHJ1Y3RlZEdlbmVyaWNUeXBlICYmIHR5cGUuR2V0R2VuZXJpY1R5cGVEZWZpbml0aW9uKCkgPT0gdHlwZW9mKEhhc2hTZXQ8Pik7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgRXNjYXBlSmF2YShzdHJpbmcgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKHZhbHVlLkxlbmd0aCk7CisgICAgICAgICAgICBmb3JlYWNoICh2YXIgYyBpbiB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoIlxcXFwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgiXFxcIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgiXFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnXHInOgorICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCJcXHIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBzYi5BcHBlbmQoIlxcdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xiJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZCgiXFxiIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnXGYnOgorICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKCJcXGYiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKGMpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNiLlRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgRW5zdXJlcyBhIGZsb2F0aW5nLXBvaW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBhbHdheXMgY29udGFpbnMgYSBkZWNpbWFsIHBvaW50LAorICAgICAgICAvLy8gICAgIG1hdGNoaW5nIEphdmEncyBEb3VibGUvRmxvYXQgdG9TdHJpbmcoKSBiZWhhdmlvciAoZS5nLiwgIjUuMCIgbm90ICI1IikuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByaXZhdGUgc3RhdGljIHN0cmluZyBGb3JtYXRGbG9hdGluZ1BvaW50KHN0cmluZyB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbHVlLkluZGV4T2YoJy4nKSA8IDAgJiYgdmFsdWUuSW5kZXhPZignRScpIDwgMCAmJiB2YWx1ZS5JbmRleE9mKCdlJykgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICIuMCI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sIElzVmFsaWRJZGVudGlmaWVyKHN0cmluZyBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkobmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGFyLklzTGV0dGVyKG5hbWVbMF0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbmFtZS5MZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoYXIuSXNMZXR0ZXJPckRpZ2l0KG5hbWVbaV0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBDcmVhdGVzIGEgZGVlcCBjb3B5IG9mIHRoaXMgPHNlZSBjcmVmPSJHcmVtbGluTGFuZyIgLz4gaW5zdGFuY2UuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cmV0dXJucz5BIG5ldyA8c2VlIGNyZWY9IkdyZW1saW5MYW5nIiAvPiB3aXRoIGNvcGllZCBzdGF0ZS48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBHcmVtbGluTGFuZyBDbG9uZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG5ldyBHcmVtbGluTGFuZworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9ncmVtbGluID0gbmV3IFN0cmluZ0J1aWxkZXIoX2dyZW1saW4uVG9TdHJpbmcoKSksCisgICAgICAgICAgICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4oX3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgIF9vcHRpb25zU3RyYXRlZ2llcyA9IG5ldyBMaXN0PE9wdGlvbnNTdHJhdGVneT4oX29wdGlvbnNTdHJhdGVnaWVzKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBjbG9uZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBvYmplY3QgSUNsb25lYWJsZS5DbG9uZSgpID0+IENsb25lKCk7CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhHcmVtbGluTGFuZz8gb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMobnVsbCwgb3RoZXIpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gX2dyZW1saW4uVG9TdHJpbmcoKSA9PSBvdGhlci5fZ3JlbWxpbi5Ub1N0cmluZygpICYmCisgICAgICAgICAgICAgICAgICAgRGljdGlvbmFyeUVxdWFscyhfcGFyYW1ldGVycywgb3RoZXIuX3BhcmFtZXRlcnMpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Q/IG9iaikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhudWxsLCBvYmopKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKHRoaXMsIG9iaikpIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKG9iai5HZXRUeXBlKCkgIT0gR2V0VHlwZSgpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gRXF1YWxzKChHcmVtbGluTGFuZylvYmopOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQorICAgICAgICB7CisgICAgICAgICAgICB1bmNoZWNrZWQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IF9ncmVtbGluLlRvU3RyaW5nKCkuR2V0SGFzaENvZGUoKSAqIDM5NzsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIga3ZwIGluIF9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGFzaCBePSAoa3ZwLktleS5HZXRIYXNoQ29kZSgpICogMzEpICsgKGt2cC5WYWx1ZT8uR2V0SGFzaENvZGUoKSA/PyAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZ3JlbWxpbi5Ub1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbCBEaWN0aW9uYXJ5RXF1YWxzKERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IGEsIERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChhLkNvdW50ICE9IGIuQ291bnQpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvcmVhY2ggKHZhciBrdnAgaW4gYSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWIuVHJ5R2V0VmFsdWUoa3ZwLktleSwgb3V0IHZhciB2YWx1ZSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIUVxdWFscyhrdnAuVmFsdWUsIHZhbHVlKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvSVRyYXZlcnNhbC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9JVHJhdmVyc2FsLmNzCmluZGV4IDcyNTg1NGYuLmNiZGRmMzAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9JVHJhdmVyc2FsLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9JVHJhdmVyc2FsLmNzCkBAIC0zNiw5ICszNiw5IEBACiAgICAgcHVibGljIGludGVyZmFjZSBJVHJhdmVyc2FsOiBJRW51bWVyYXRvcgogICAgIHsKICAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgdHJhdmVyc2FsLgorICAgICAgICAvLy8gICAgIEdldHMgdGhlIDxzZWUgY3JlZj0iVHJhdmVyc2FsLkdyZW1saW5MYW5nIiAvPiByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRyYXZlcnNhbC4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgQnl0ZWNvZGUgQnl0ZWNvZGUgeyBnZXQ7IH0KKyAgICAgICAgR3JlbWxpbkxhbmcgR3JlbWxpbkxhbmcgeyBnZXQ7IH0KICAgICAgICAgCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vICAgICBEZXRlcm1pbmVzIGlmIHRoaXMgdHJhdmVyc2FsIHdhcyBzcGF3bmVkIGFub255bW91c2x5IG9yIG5vdC4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9JbnN0cnVjdGlvbi5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9JbnN0cnVjdGlvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAzNGIxMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvSW5zdHJ1Y3Rpb24uY3MKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uTGlucTsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgUmVwcmVzZW50cyBhIDxzZWUgY3JlZj0iQnl0ZWNvZGUiIC8+IGluc3RydWN0aW9uIGJ5IGFuIG9wZXJhdG9yIG5hbWUgYW5kIGl0cyBhcmd1bWVudHMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgSW5zdHJ1Y3Rpb24gOiBJRXF1YXRhYmxlPEluc3RydWN0aW9uPgotICAgIHsgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9Ikluc3RydWN0aW9uIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvcGVyYXRvck5hbWUiPlRoZSBuYW1lIG9mIHRoZSBvcGVyYXRvci48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFyZ3VtZW50cyI+VGhlIGFyZ3VtZW50cy48L3BhcmFtPgotICAgICAgICBwdWJsaWMgSW5zdHJ1Y3Rpb24oc3RyaW5nIG9wZXJhdG9yTmFtZSwgcGFyYW1zIGR5bmFtaWM/W10gYXJndW1lbnRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBPcGVyYXRvck5hbWUgPSBvcGVyYXRvck5hbWUgPz8gdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2Yob3BlcmF0b3JOYW1lKSk7Ci0gICAgICAgICAgICBBcmd1bWVudHMgPSBhcmd1bWVudHMgPz8gdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2YoYXJndW1lbnRzKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0b3IuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgT3BlcmF0b3JOYW1lIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIGFyZ3VtZW50cy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGR5bmFtaWM/W10gQXJndW1lbnRzIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgPHNlZSBjcmVmPSJJbnN0cnVjdGlvbiIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAkIntPcGVyYXRvck5hbWV9KHtzdHJpbmcuSm9pbigiLCAiLCBBcmd1bWVudHMuU2VsZWN0KGEgPT4gYSA/PyAibnVsbCIpKX0pIjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYm9vbCBFcXVhbHMoSW5zdHJ1Y3Rpb24/IG90aGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG51bGwsIG90aGVyKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIE9wZXJhdG9yTmFtZSA9PSBvdGhlci5PcGVyYXRvck5hbWUgJiYgQXJndW1lbnRzLlNlcXVlbmNlRXF1YWwob3RoZXIuQXJndW1lbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0PyBvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMobnVsbCwgb2JqKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvYmopKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChvYmouR2V0VHlwZSgpICE9IEdldFR5cGUoKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIEVxdWFscygoSW5zdHJ1Y3Rpb24pIG9iaik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuY2hlY2tlZAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBoYXNoID0gMTk7Ci0gICAgICAgICAgICAgICAgaGFzaCA9IGhhc2ggKiAzOTcgKyBPcGVyYXRvck5hbWUuR2V0SGFzaENvZGUoKTsKLQotICAgICAgICAgICAgICAgIGhhc2ggPSBBcmd1bWVudHMuQWdncmVnYXRlKGhhc2gsCi0gICAgICAgICAgICAgICAgICAgIChjdXJyZW50LCB2YWx1ZSkgPT4gY3VycmVudCAqIDMxICsgKHZhbHVlID09IG51bGwgPyAwIDogdmFsdWUuR2V0SGFzaENvZGUoKSkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhhc2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0xhbWJkYS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9MYW1iZGEuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDFlYTIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL0xhbWJkYS5jcworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbAotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFJlcHJlc2VudHMgYSBsYW1iZGEuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgaW50ZXJmYWNlIElMYW1iZGEgOiBJRnVuY3Rpb24sIElCaUZ1bmN0aW9uLCBJUHJlZGljYXRlLCBJVW5hcnlPcGVyYXRvciwgSUJpbmFyeU9wZXJhdG9yLCBJQ29tcGFyYXRvciwKLSAgICAgICAgSUNvbnN1bWVyLCBJU3VwcGxpZXIKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSBsYW1iZGEgZXhwcmVzc2lvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgc3RyaW5nIExhbWJkYUV4cHJlc3Npb24geyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgR2V0cyB0aGUgbGFuZ3VhZ2Ugb2YgdGhpcyBsYW1iZGEuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHN0cmluZyBMYW5ndWFnZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBHZXRzIHRoZSBhcmd1bWVudHMgb2YgdGhpcyBsYW1iZGEuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIGludCBBcmd1bWVudHMgeyBnZXQ7ICB9Ci0gICAgfQotCi0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgUHJvdmlkZXMgbWV0aG9kcyB0byBjcmVhdGUgbGFtYmRhcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTGFtYmRhCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG5ldyBHcm9vdnkgbGFtYmRhLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImV4cHJlc3Npb24iPlRoZSBsYW1iZGEgZXhwcmVzc2lvbi48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIGNyZWF0ZWQgbGFtYmRhLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBJTGFtYmRhIEdyb292eShzdHJpbmcgZXhwcmVzc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBHcm9vdnlTdHJpbmdCYXNlZExhbWJkYShleHByZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBDcmVhdGVzIGEgbmV3IEdyb292eSBsYW1iZGEgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBsYW1iZGEgYXJndW1lbnRzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImV4cHJlc3Npb24iPlRoZSBsYW1iZGEgZXhwcmVzc2lvbi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFyZ3VtZW50cyI+VGhlIG51bWJlciBvZiBsYW1iZGEgYXJndW1lbnRzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgY3JlYXRlZCBsYW1iZGEuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIElMYW1iZGEgR3Jvb3Z5KHN0cmluZyBleHByZXNzaW9uLCBpbnQgYXJndW1lbnRzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdyb292eVN0cmluZ0Jhc2VkTGFtYmRhKGV4cHJlc3Npb24sIGFyZ3VtZW50cyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG5ldyBQeXRob24gbGFtYmRhLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImV4cHJlc3Npb24iPlRoZSBsYW1iZGEgZXhwcmVzc2lvbi48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIGNyZWF0ZWQgbGFtYmRhLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBJTGFtYmRhIFB5dGhvbihzdHJpbmcgZXhwcmVzc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCYXNlZExhbWJkYShleHByZXNzaW9uLCAiZ3JlbWxpbi1weXRob24iKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9BYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5LmNzCmluZGV4IGIyYjg0YmUuLjlkMzgxYTAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9BYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5LmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9BYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5LmNzCkBAIC0yOSw3ICsyOSw3IEBACiBuYW1lc3BhY2UgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kKIHsKICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBQcm92aWRlcyBhIGNvbW1vbiBiYXNlIGNsYXNzIGZvciBzdHJhdGVnaWVzIHRoYXQgYXJlIG9ubHkgaW5jbHVkZWQgaW4gPHNlZSBjcmVmPSJCeXRlY29kZSIgLz4KKyAgICAvLy8gICAgIFByb3ZpZGVzIGEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIHN0cmF0ZWdpZXMgdGhhdCBhcmUgb25seSBpbmNsdWRlZCBpbiA8c2VlIGNyZWY9IkdyZW1saW5MYW5nIiAvPgogICAgIC8vLyAgICAgdG8gYmUgYXBwbGllZCByZW1vdGVseS4KICAgICAvLy8gPC9zdW1tYXJ5PgogICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5IDogSVRyYXZlcnNhbFN0cmF0ZWd5LCBJRXF1YXRhYmxlPEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k+CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvRmluYWxpemF0aW9uL0NvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvRmluYWxpemF0aW9uL0NvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kuY3MKaW5kZXggZTMwZWRiNS4uNGVmNTdkYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L0ZpbmFsaXphdGlvbi9Db21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5LmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9GaW5hbGl6YXRpb24vQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneS5jcwpAQCAtMSw0ICsxLDQgQEAKLe+7vyNyZWdpb24gTGljZW5zZQorI3JlZ2lvbiBMaWNlbnNlCiAKIC8qCiAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCkBAIC05LDcgKzksNyBAQAogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9GaW5hbGl6YXRpb24vUHJvZmlsZVN0cmF0ZWd5LmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L0ZpbmFsaXphdGlvbi9Qcm9maWxlU3RyYXRlZ3kuY3MKaW5kZXggYzdmMTc0OS4uMTFiN2JkNiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L0ZpbmFsaXphdGlvbi9Qcm9maWxlU3RyYXRlZ3kuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L0ZpbmFsaXphdGlvbi9Qcm9maWxlU3RyYXRlZ3kuY3MKQEAgLTEsNCArMSw0IEBACi3vu78jcmVnaW9uIExpY2Vuc2UKKyNyZWdpb24gTGljZW5zZQogCiAvKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQpAQCAtOSw3ICs5LDcgQEAKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvRmluYWxpemF0aW9uL1JlZmVyZW5jZUVsZW1lbnRTdHJhdGVneS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9GaW5hbGl6YXRpb24vUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LmNzCmluZGV4IDM1ODRjZDIuLjYxZjc4YjcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9GaW5hbGl6YXRpb24vUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9GaW5hbGl6YXRpb24vUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LmNzCkBAIC0xLDQgKzEsNCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCisjcmVnaW9uIExpY2Vuc2UKIAogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKQEAgLTksNyArOSw3IEBACiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L09wdGltaXphdGlvbi9CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5LmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L09wdGltaXphdGlvbi9CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5LmNzCmluZGV4IGE1M2M0YjkuLjcwMjBjMTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9PcHRpbWl6YXRpb24vQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneS5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvT3B0aW1pemF0aW9uL0J5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kuY3MKQEAgLTEsNCArMSw0IEBACi3vu78jcmVnaW9uIExpY2Vuc2UKKyNyZWdpb24gTGljZW5zZQogCiAvKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQpAQCAtOSw3ICs5LDcgQEAKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCkBAIC0yNCwxNCArMjQsMTQgQEAKIG5hbWVzcGFjZSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneS5PcHRpbWl6YXRpb24KIHsKICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBBIHN0cmF0ZWd5LgorICAgIC8vLyAgICAgT3B0aW1pemVzIHZlcnRleC0gYW5kIHZhbHVlLWVtaXR0aW5nIHN0ZXBzLgogICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgcHVibGljIGNsYXNzIEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kgOiBBYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5CiAgICAgewogICAgICAgICBwcml2YXRlIGNvbnN0IHN0cmluZyBKYXZhRnFjbiA9IE9wdGltaXphdGlvbk5hbWVzcGFjZSArIG5hbWVvZihCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KTsKICAgICAgICAgCiAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5IiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kiIC8+IGNsYXNzLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSgpIDogYmFzZShKYXZhRnFjbikKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L09wdGltaXphdGlvbi9NZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L09wdGltaXphdGlvbi9NZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LmNzCmluZGV4IGU3MWYyNzEuLjgxMGUzM2MgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9PcHRpbWl6YXRpb24vTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneS5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvT3B0aW1pemF0aW9uL01lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kuY3MKQEAgLTEsNCArMSw0IEBACi3vu78jcmVnaW9uIExpY2Vuc2UKKyNyZWdpb24gTGljZW5zZQogCiAvKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQpAQCAtOSw3ICs5LDcgQEAKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvVmVyaWZpY2F0aW9uL0NvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvVmVyaWZpY2F0aW9uL0NvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY3MKaW5kZXggNjc2NDQ0ZS4uZmQ3MzE5YyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L1ZlcmlmaWNhdGlvbi9Db21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5LmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9WZXJpZmljYXRpb24vQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneS5jcwpAQCAtMSw0ICsxLDQgQEAKLe+7vyNyZWdpb24gTGljZW5zZQorI3JlZ2lvbiBMaWNlbnNlCiAKIC8qCiAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCkBAIC05LDcgKzksNyBAQAogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9WZXJpZmljYXRpb24vU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9WZXJpZmljYXRpb24vU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneS5jcwppbmRleCBlMTY2M2VhLi5kM2MwN2JiIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvVmVyaWZpY2F0aW9uL1N0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L1ZlcmlmaWNhdGlvbi9TdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5LmNzCkBAIC0xLDQgKzEsNCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCisjcmVnaW9uIExpY2Vuc2UKIAogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKQEAgLTksNyArOSw3IEBACiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L1ZlcmlmaWNhdGlvbi9WZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJhdGVneS9WZXJpZmljYXRpb24vVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kuY3MKaW5kZXggY2NjNGVmMS4uNDg3NGNmNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmF0ZWd5L1ZlcmlmaWNhdGlvbi9WZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS5jcworKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvU3RyYXRlZ3kvVmVyaWZpY2F0aW9uL1ZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LmNzCkBAIC0xLDQgKzEsNCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCisjcmVnaW9uIExpY2Vuc2UKIAogLyoKICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKQEAgLTksNyArOSw3IEBACiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmluZ0Jhc2VkTGFtYmRhLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL1N0cmluZ0Jhc2VkTGFtYmRhLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmU3NmY0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9TdHJpbmdCYXNlZExhbWJkYS5jcworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgU3RyaW5nQmFzZWRMYW1iZGEgOiBJTGFtYmRhCi0gICAgewotICAgICAgICBwcml2YXRlIGNvbnN0IGludCBEZWZhdWx0QXJndW1lbnQgPSAtMTsKLQotICAgICAgICBwdWJsaWMgU3RyaW5nQmFzZWRMYW1iZGEoc3RyaW5nIGV4cHJlc3Npb24sIHN0cmluZyBsYW5ndWFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgTGFtYmRhRXhwcmVzc2lvbiA9IGV4cHJlc3Npb247Ci0gICAgICAgICAgICBMYW5ndWFnZSA9IGxhbmd1YWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0cmluZyBMYW1iZGFFeHByZXNzaW9uIHsgZ2V0OyB9Ci0KLSAgICAgICAgcHVibGljIHN0cmluZyBMYW5ndWFnZSB7IGdldDsgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgQXJndW1lbnRzIHsgZ2V0OyBwcm90ZWN0ZWQgc2V0OyB9ID0gRGVmYXVsdEFyZ3VtZW50OwotICAgIH0KLQotICAgIGludGVybmFsIGNsYXNzIEdyb292eVN0cmluZ0Jhc2VkTGFtYmRhIDogU3RyaW5nQmFzZWRMYW1iZGEKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBHcm9vdnlTdHJpbmdCYXNlZExhbWJkYShzdHJpbmcgZXhwcmVzc2lvbikgOiBiYXNlKGV4cHJlc3Npb24sICJncmVtbGluLWdyb292eSIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRyeSB0byBkZXRlY3QgMSBvciAyIGFyZ3VtZW50IGxhbWJkYSBpZiBwb3NzaWJsZSBvdGhlcndpc2UgZ28gd2l0aCB1bmtub3duIHdoaWNoIGlzIHRoZSBkZWZhdWx0Ci0gICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24uQ29udGFpbnMoIi0+IikpIHJldHVybjsKLSAgICAgICAgICAgIHZhciBhcmdzID0gZXhwcmVzc2lvbi5TdWJzdHJpbmcoMCwgZXhwcmVzc2lvbi5JbmRleE9mKCItPiIsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbCkpOwotICAgICAgICAgICAgQXJndW1lbnRzID0gYXJncy5Db250YWlucygiLCIpID8gMiA6IDE7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBHcm9vdnlTdHJpbmdCYXNlZExhbWJkYShzdHJpbmcgZXhwcmVzc2lvbiwgaW50IGFyZ3VtZW50cykgOiBiYXNlKGV4cHJlc3Npb24sICJncmVtbGluLWdyb292eSIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKLSAgICAgICAgfQotCi0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9UcmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3IuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvVHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdG9yLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzVmNDkyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9UcmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3IuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMDcgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLlRleHQ7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlN0cmF0ZWd5OwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRGVjb3JhdGlvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlRyYW5zbGF0b3IKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBDb252ZXJ0cyBieXRlY29kZSB0byBhIEdyb292eSBzdHJpbmcgb2YgR3JlbWxpbi4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBHcm9vdnlUcmFuc2xhdG9yCi0gICAgewotICAgICAgICBwcml2YXRlIEdyb292eVRyYW5zbGF0b3Ioc3RyaW5nIHRyYXZlcnNhbFNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgICAgVHJhdmVyc2FsU291cmNlID0gdHJhdmVyc2FsU291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIENyZWF0ZXMgdGhlIHRyYW5zbGF0b3IuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhdmVyc2FsU291cmNlIj5UaGUgdHJhdmVyc2FsIHNvdXJjZSBmb3IgdGhlIHRyYXZlcnNhbCB0byBiZSB0cmFuc2xhdGVkLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgY3JlYXRlZCB0cmFuc2xhdG9yIGluc3RhbmNlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBHcm9vdnlUcmFuc2xhdG9yIE9mKHN0cmluZyB0cmF2ZXJzYWxTb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR3Jvb3Z5VHJhbnNsYXRvcih0cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldCB0aGUgbGFuZ3VhZ2UgdGhhdCB0aGUgdHJhbnNsYXRvciBpcyBjb252ZXJ0aW5nIHRoZSB0cmF2ZXJzYWwgYnl0ZSBjb2RlIHRvLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nIFRhcmdldExhbmd1YWdlID0+ICJncmVtbGluLWdyb292eSI7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIDxzZWUgY3JlZj0iVHJhdmVyc2FsU291cmNlIi8+IHJlcHJlc2VudGF0aW9uIHJvb3RpbmcgdGhpcyB0cmFuc2xhdG9yLgotICAgICAgICAvLy8gICAgIFRoaXMgaXMgdHlwaWNhbGx5IGEgImciLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RyaW5nIFRyYXZlcnNhbFNvdXJjZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUcmFuc2xhdGUgPHNlZSBjcmVmPSJJVHJhdmVyc2FsIi8+IGludG8gZ3JlbWxpbi1ncm9vdnkuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhdmVyc2FsIj5UaGUgdHJhdmVyc2FsIHRvIHRyYW5zbGF0ZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImlzQ2hpbGRUcmF2ZXJzYWwiPldoZXRoZXIgdGhpcyBpcyBhbiBhbm9ueW1vdXMgdHJhdmVyc2FsIChzdGFydGVkIHZpYSAnX18nKS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHRyYW5zbGF0ZWQgZ3JlbWxpbi1ncm9vdnkgdHJhdmVyc2FsLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0cmluZyBUcmFuc2xhdGUoSVRyYXZlcnNhbCB0cmF2ZXJzYWwsIGJvb2wgaXNDaGlsZFRyYXZlcnNhbCA9IGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gVHJhbnNsYXRlKHRyYXZlcnNhbC5CeXRlY29kZSwgaXNDaGlsZFRyYXZlcnNhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUcmFuc2xhdGUgPHNlZSBjcmVmPSJCeXRlY29kZSIvPiBpbnRvIGdyZW1saW4tZ3Jvb3Z5LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJ5dGVjb2RlIj5UaGUgYnl0ZWNvZGUgcmVwcmVzZW50aW5nIHRyYXZlcnNhbCBzb3VyY2UgYW5kIHRyYXZlcnNhbCBtYW5pcHVsYXRpb25zLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNDaGlsZFRyYXZlcnNhbCI+V2hldGhlciB0aGlzIGlzIGFuIGFub255bW91cyB0cmF2ZXJzYWwgKHN0YXJ0ZWQgdmlhICdfXycpLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgdHJhbnNsYXRlZCBncmVtbGluLWdyb292eSB0cmF2ZXJzYWwuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RyaW5nIFRyYW5zbGF0ZShCeXRlY29kZSBieXRlY29kZSwgYm9vbCBpc0NoaWxkVHJhdmVyc2FsID0gZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKGlzQ2hpbGRUcmF2ZXJzYWwgPyAiX18iIDogVHJhdmVyc2FsU291cmNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yZWFjaCAodmFyIHN0ZXAgaW4gYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiLkFwcGVuZChUcmFuc2xhdGVTdGVwKHN0ZXApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yZWFjaCAodmFyIHN0ZXAgaW4gYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9ucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5BcHBlbmQoVHJhbnNsYXRlU3RlcChzdGVwKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzYi5Ub1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgVHJhbnNsYXRlU3RlcChJbnN0cnVjdGlvbiBzdGVwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RlcC5PcGVyYXRvck5hbWUgPT0gIndpdGgiKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAkIi57c3RlcC5PcGVyYXRvck5hbWV9KHtUcmFuc2xhdGVXaXRoQXJndW1lbnRzKHN0ZXAuQXJndW1lbnRzKX0pIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAkIi57c3RlcC5PcGVyYXRvck5hbWV9KHtUcmFuc2xhdGVBcmd1bWVudHMoc3RlcC5Bcmd1bWVudHMpfSkiOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHN0cmluZyBUcmFuc2xhdGVXaXRoQXJndW1lbnRzKGR5bmFtaWM/W10gYXJndW1lbnRzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzWzBdID09IFdpdGhPcHRpb25zLlRva2VucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLkpvaW4oIiwgIiwgYXJndW1lbnRzLlNlbGVjdChhID0+IFByb3BlcnR5TWFwT3B0aW9uc1RyYW5zbGF0aW9uW2FdKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRzWzBdID09IFdpdGhPcHRpb25zLkluZGV4ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5Kb2luKCIsICIsIGFyZ3VtZW50cy5TZWxlY3QoYSA9PiBJbmRleE9wdGlvbnNUcmFuc2xhdGlvblthXSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5Kb2luKCIsICIsIGFyZ3VtZW50cy5TZWxlY3QoVHJhbnNsYXRlQXJndW1lbnQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERpY3Rpb25hcnk8b2JqZWN0LCBzdHJpbmc+IFByb3BlcnR5TWFwT3B0aW9uc1RyYW5zbGF0aW9uID0gbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBzdHJpbmc+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgV2l0aE9wdGlvbnMuVG9rZW5zLCAiV2l0aE9wdGlvbnMudG9rZW5zIiB9LAotICAgICAgICAgICAgeyBXaXRoT3B0aW9ucy5Ob25lLCAiV2l0aE9wdGlvbnMubm9uZSIgfSwKLSAgICAgICAgICAgIHsgV2l0aE9wdGlvbnMuSWRzLCAiV2l0aE9wdGlvbnMuaWRzIiB9LAotICAgICAgICAgICAgeyBXaXRoT3B0aW9ucy5MYWJlbHMsICJXaXRoT3B0aW9ucy5sYWJlbHMiIH0sCi0gICAgICAgICAgICB7IFdpdGhPcHRpb25zLktleXMsICJXaXRoT3B0aW9ucy5rZXlzIiB9LAotICAgICAgICAgICAgeyBXaXRoT3B0aW9ucy5WYWx1ZXMsICJXaXRoT3B0aW9ucy52YWx1ZXMiIH0sCi0gICAgICAgICAgICB7IFdpdGhPcHRpb25zLkFsbCwgIldpdGhPcHRpb25zLmFsbCIgfQotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRGljdGlvbmFyeTxvYmplY3QsIHN0cmluZz4gSW5kZXhPcHRpb25zVHJhbnNsYXRpb24gPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIHN0cmluZz4KLSAgICAgICAgewotICAgICAgICAgICAgeyBXaXRoT3B0aW9ucy5JbmRleGVyLCAiV2l0aE9wdGlvbnMuaW5kZXhlciIgfSwKLSAgICAgICAgICAgIHsgV2l0aE9wdGlvbnMuTGlzdCwgIldpdGhPcHRpb25zLmxpc3QiIH0sCi0gICAgICAgICAgICB7IFdpdGhPcHRpb25zLk1hcCwgIldpdGhPcHRpb25zLm1hcCIgfQotICAgICAgICB9OwotCi0gICAgICAgIHByaXZhdGUgc3RyaW5nIFRyYW5zbGF0ZUFyZ3VtZW50cyhJRW51bWVyYWJsZTxvYmplY3Q/PiBhcmd1bWVudHMpID0+Ci0gICAgICAgICAgICBzdHJpbmcuSm9pbigiLCAiLCBhcmd1bWVudHMuU2VsZWN0KFRyYW5zbGF0ZUFyZ3VtZW50KSk7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgVHJhbnNsYXRlQXJndW1lbnQob2JqZWN0PyBhcmd1bWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50IHN3aXRjaAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG51bGwgPT4gIm51bGwiLAotICAgICAgICAgICAgICAgIHN0cmluZyBzdHIgPT4gJCIne3N0cn0nIiwKLSAgICAgICAgICAgICAgICBjaGFyIGMgPT4gJCIne2N9JyIsCi0gICAgICAgICAgICAgICAgYm9vbCBiID0+IGIgPyAidHJ1ZSIgOiAiZmFsc2UiLAotICAgICAgICAgICAgICAgIERhdGVUaW1lT2Zmc2V0IGR0byA9PiBUcmFuc2xhdGVEYXRlVGltZU9mZnNldChkdG8pLAotICAgICAgICAgICAgICAgIERhdGVUaW1lIGR0ID0+IFRyYW5zbGF0ZURhdGVUaW1lT2Zmc2V0KGR0KSwKLSAgICAgICAgICAgICAgICBHdWlkIGd1aWQgPT4gJCJVVUlELmZyb21TdHJpbmcoJ3tndWlkfScpIiwKLSAgICAgICAgICAgICAgICBQIHAgPT4gVHJhbnNsYXRlUChwKSwKLSAgICAgICAgICAgICAgICBJRGljdGlvbmFyeSBkaWN0ID0+IFRyYW5zbGF0ZURpY3Rpb25hcnkoZGljdCksCi0gICAgICAgICAgICAgICAgSUVudW1lcmFibGUgZSA9PiBUcmFuc2xhdGVDb2xsZWN0aW9uKGUpLAotICAgICAgICAgICAgICAgIElUcmF2ZXJzYWwgdCA9PiBUcmFuc2xhdGVUcmF2ZXJzYWwodCksCi0gICAgICAgICAgICAgICAgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneSA9PiBUcmFuc2xhdGVTdHJhdGVneShzdHJhdGVneSksCi0gICAgICAgICAgICAgICAgXyA9PiBDb252ZXJ0LlRvU3RyaW5nKGFyZ3VtZW50LCBDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKSEKLSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgc3RhdGljIHN0cmluZyBUcmFuc2xhdGVEYXRlVGltZU9mZnNldChEYXRlVGltZU9mZnNldCBkdG8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB5ZWFyID0gZHRvLlllYXIgLSAxOTAwOwotICAgICAgICAgICAgdmFyIG1vbnRoID0gZHRvLk1vbnRoIC0gMTsKLSAgICAgICAgICAgIHZhciBkYXlPZk1vbnRoID0gZHRvLkRheTsKLSAgICAgICAgICAgIHZhciBob3VyID0gZHRvLkhvdXI7Ci0gICAgICAgICAgICB2YXIgbWludXRlID0gZHRvLk1pbnV0ZTsKLSAgICAgICAgICAgIHZhciBzZWNvbmQgPSBkdG8uU2Vjb25kOwotICAgICAgICAgICAgcmV0dXJuICQibmV3IERhdGUoe3llYXJ9LCB7bW9udGh9LCB7ZGF5T2ZNb250aH0sIHtob3VyfSwge21pbnV0ZX0sIHtzZWNvbmR9KSI7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgc3RyaW5nIFRyYW5zbGF0ZVAoUCBwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcC5PdGhlciA9PSBudWxsCi0gICAgICAgICAgICAgICAgPyAkIlAue3AuT3BlcmF0b3JOYW1lfSh7VHJhbnNsYXRlQXJndW1lbnQocC5WYWx1ZSl9KSIKLSAgICAgICAgICAgICAgICA6ICQiUC57cC5PcGVyYXRvck5hbWV9KHtUcmFuc2xhdGVBcmd1bWVudChwLlZhbHVlKX0sIHtUcmFuc2xhdGVBcmd1bWVudChwLk90aGVyKX0pIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgVHJhbnNsYXRlRGljdGlvbmFyeShJRGljdGlvbmFyeSBkaWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIga3ZTdHJpbmdzID0gbmV3IExpc3Q8c3RyaW5nPihkaWN0LkNvdW50KTsKLSAgICAgICAgICAgIGZvcmVhY2ggKERpY3Rpb25hcnlFbnRyeSBrdiBpbiBkaWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGt2U3RyaW5ncy5BZGQoJCJ7VHJhbnNsYXRlQXJndW1lbnQoa3YuS2V5KX06IHtUcmFuc2xhdGVBcmd1bWVudChrdi5WYWx1ZSl9Iik7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0KLSAgICAgICAgICAgIHJldHVybiAkIlt7c3RyaW5nLkpvaW4oIiwgIiwga3ZTdHJpbmdzKX1dIjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RyaW5nIFRyYW5zbGF0ZUNvbGxlY3Rpb24oSUVudW1lcmFibGUgZW51bWVyYWJsZSkgPT4KLSAgICAgICAgICAgICQiW3tUcmFuc2xhdGVBcmd1bWVudHMoZW51bWVyYWJsZS5DYXN0PG9iamVjdD4oKS5Ub0FycmF5KCkpfV0iOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdHJpbmcgVHJhbnNsYXRlVHJhdmVyc2FsKElUcmF2ZXJzYWwgdHJhdmVyc2FsKSA9PiBUcmFuc2xhdGUodHJhdmVyc2FsLkJ5dGVjb2RlLCB0cnVlKTsKLQotICAgICAgICBwcml2YXRlIHN0cmluZyBUcmFuc2xhdGVTdHJhdGVneShBYnN0cmFjdFRyYXZlcnNhbFN0cmF0ZWd5IHN0cmF0ZWd5KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY29uZmlnID0gc3RyaW5nLkpvaW4oIiwgIiwKLSAgICAgICAgICAgICAgICBzdHJhdGVneS5Db25maWd1cmF0aW9uLlNlbGVjdChvcHQgPT4KLSAgICAgICAgICAgICAgICAgICAgJCJ7KHN0cmF0ZWd5LlN0cmF0ZWd5TmFtZSA9PSBuYW1lb2YoT3B0aW9uc1N0cmF0ZWd5KSA/ICQiJ3tvcHQuS2V5fSciIDogb3B0LktleSl9OiB7VHJhbnNsYXRlQXJndW1lbnQob3B0LlZhbHVlKX0iKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAkIm5ldyB7c3RyYXRlZ3kuU3RyYXRlZ3lOYW1lfSh7Y29uZmlnfSkiOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9fXy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9Qcm9jZXNzL1RyYXZlcnNhbC9fXy5jcwppbmRleCA3NTdhMGY1Li5iMTY3MzJhIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvUHJvY2Vzcy9UcmF2ZXJzYWwvX18uY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1Byb2Nlc3MvVHJhdmVyc2FsL19fLmNzCkBAIC0xMzUsMTQgKzEzNSw2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgU3Bhd25zIGEgPHNlZSBjcmVmPSJHcmFwaFRyYXZlcnNhbHtTVHlwZSwgRVR5cGV9IiAvPiBhbmQgYWRkcyB0aGUgbm9uZSBzdGVwIHRvIHRoYXQgdHJhdmVyc2FsLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIEdyYXBoVHJhdmVyc2FsPG9iamVjdCwgb2JqZWN0PiBOb25lKFA/IHByZWRpY2F0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFRyYXZlcnNhbDxvYmplY3QsIG9iamVjdD4oKS5Ob25lKHByZWRpY2F0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgIC8vLyAgICAgU3Bhd25zIGEgPHNlZSBjcmVmPSJHcmFwaFRyYXZlcnNhbHtTVHlwZSwgRVR5cGV9IiAvPiBhbmQgYWRkcyB0aGUgYXMgc3RlcCB0byB0aGF0IHRyYXZlcnNhbC4KICAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICAgcHVibGljIHN0YXRpYyBHcmFwaFRyYXZlcnNhbDxvYmplY3QsIG9iamVjdD4gQXMoc3RyaW5nIGxhYmVsLCBwYXJhbXMgc3RyaW5nW10gbGFiZWxzKQpAQCAtMTA1OSw3ICsxMDUxLDcgQEAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIFNwYXducyBhIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWx7U1R5cGUsIEVUeXBlfSIgLz4gYW5kIGFkZHMgdGhlIG1lcmdlRSBzdGVwIHRvIHRoYXQgdHJhdmVyc2FsLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIEdyYXBoVHJhdmVyc2FsPG9iamVjdCwgRWRnZT4gTWVyZ2VFIChJRGljdGlvbmFyeTxvYmplY3Qsb2JqZWN0Pj8gbSkKKyAgICAgICAgcHVibGljIHN0YXRpYyBHcmFwaFRyYXZlcnNhbDxvYmplY3QsIEVkZ2U+IE1lcmdlRSAoSURpY3Rpb25hcnk8b2JqZWN0LG9iamVjdD8+PyBtKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoVHJhdmVyc2FsPG9iamVjdCwgRWRnZT4oKS5NZXJnZUUobSk7CiAgICAgICAgIH0KQEAgLTExMTMsNiArMTEwNSwxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIFNwYXducyBhIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWx7U1R5cGUsIEVUeXBlfSIgLz4gYW5kIGFkZHMgdGhlIG5vbmUgc3RlcCB0byB0aGF0IHRyYXZlcnNhbC4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBHcmFwaFRyYXZlcnNhbDxvYmplY3QsIG9iamVjdD4gTm9uZShQPyBwcmVkaWNhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhUcmF2ZXJzYWw8b2JqZWN0LCBvYmplY3Q+KCkuTm9uZShwcmVkaWNhdGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgICAvLy8gICAgIFNwYXducyBhIDxzZWUgY3JlZj0iR3JhcGhUcmF2ZXJzYWx7U1R5cGUsIEVUeXBlfSIgLz4gYW5kIGFkZHMgdGhlIG5vdCBzdGVwIHRvIHRoYXQgdHJhdmVyc2FsLgogICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgICBwdWJsaWMgc3RhdGljIEdyYXBoVHJhdmVyc2FsPG9iamVjdCwgb2JqZWN0PiBOb3QoSVRyYXZlcnNhbCBub3RUcmF2ZXJzYWwpCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L0RhdGFUeXBlLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9EYXRhVHlwZS5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4OTYzNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L0RhdGFUeXBlLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeQotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gUmVwcmVzZW50cyBhIEdyYXBoQmluYXJ5IGRhdGEgdHlwZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBEYXRhVHlwZSA6IElFcXVhdGFibGU8RGF0YVR5cGU+Ci0gICAgewotI3ByYWdtYSB3YXJuaW5nIGRpc2FibGUgMTU5MQotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEludCA9IG5ldyBEYXRhVHlwZSgweDAxKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBMb25nID0gbmV3IERhdGFUeXBlKDB4MDIpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFN0cmluZyA9IG5ldyBEYXRhVHlwZSgweDAzKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBEYXRlID0gbmV3IERhdGFUeXBlKDB4MDQpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFRpbWVzdGFtcCA9IG5ldyBEYXRhVHlwZSgweDA1KTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBDbGFzcyA9IG5ldyBEYXRhVHlwZSgweDA2KTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBEb3VibGUgPSBuZXcgRGF0YVR5cGUoMHgwNyk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgRmxvYXQgPSBuZXcgRGF0YVR5cGUoMHgwOCk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTGlzdCA9IG5ldyBEYXRhVHlwZSgweDA5KTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBNYXAgPSBuZXcgRGF0YVR5cGUoMFgwQSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgU2V0ID0gbmV3IERhdGFUeXBlKDBYMEIpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFV1aWQgPSBuZXcgRGF0YVR5cGUoMFgwQyk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgRWRnZSA9IG5ldyBEYXRhVHlwZSgweDBEKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBQYXRoID0gbmV3IERhdGFUeXBlKDB4MEUpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFByb3BlcnR5ID0gbmV3IERhdGFUeXBlKDB4MEYpOwotICAgICAgICAKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBWZXJ0ZXggPSBuZXcgRGF0YVR5cGUoMHgxMSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgVmVydGV4UHJvcGVydHkgPSBuZXcgRGF0YVR5cGUoMHgxMik7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgQmFycmllciA9IG5ldyBEYXRhVHlwZSgweDEzKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBCaW5kaW5nID0gbmV3IERhdGFUeXBlKDB4MTQpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEJ5dGVjb2RlID0gbmV3IERhdGFUeXBlKDB4MTUpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIENhcmRpbmFsaXR5ID0gbmV3IERhdGFUeXBlKDB4MTYpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIENvbHVtbiA9IG5ldyBEYXRhVHlwZSgweDE3KTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBEaXJlY3Rpb24gPSBuZXcgRGF0YVR5cGUoMHgxOCk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgRFQgPSBuZXcgRGF0YVR5cGUoMHgyRik7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgR1R5cGUgPSBuZXcgRGF0YVR5cGUoMHgzMCk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTWVyZ2UgPSBuZXcgRGF0YVR5cGUoMHgyRSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgT3BlcmF0b3IgPSBuZXcgRGF0YVR5cGUoMHgxOSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgT3JkZXIgPSBuZXcgRGF0YVR5cGUoMHgxQSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgUGljayA9IG5ldyBEYXRhVHlwZSgweDFCKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBQb3AgPSBuZXcgRGF0YVR5cGUoMHgxQyk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTGFtYmRhID0gbmV3IERhdGFUeXBlKDB4MUQpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFAgPSBuZXcgRGF0YVR5cGUoMHgxRSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgU2NvcGUgPSBuZXcgRGF0YVR5cGUoMHgxRik7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgVCA9IG5ldyBEYXRhVHlwZSgweDIwKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBUcmF2ZXJzZXIgPSBuZXcgRGF0YVR5cGUoMHgyMSk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgQmlnRGVjaW1hbCA9IG5ldyBEYXRhVHlwZSgweDIyKTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBCaWdJbnRlZ2VyID0gbmV3IERhdGFUeXBlKDB4MjMpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEJ5dGUgPSBuZXcgRGF0YVR5cGUoMHgyNCk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgQnl0ZUJ1ZmZlciA9IG5ldyBEYXRhVHlwZSgweDI1KTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBTaG9ydCA9IG5ldyBEYXRhVHlwZSgweDI2KTsKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBCb29sZWFuID0gbmV3IERhdGFUeXBlKDB4MjcpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFRleHRQID0gbmV3IERhdGFUeXBlKDB4MjgpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFRyYXZlcnNhbFN0cmF0ZWd5ID0gbmV3IERhdGFUeXBlKDB4MjkpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEJ1bGtTZXQgPSBuZXcgRGF0YVR5cGUoMHgyQSk7Ci0gICAgICAgIC8vIFRPRE86IFN1cHBvcnQgbWV0cmljcyBhbmQgdHJhdmVyc2FsIG1ldHJpY3MKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBDaGFyID0gbmV3IERhdGFUeXBlKDB4ODApOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIER1cmF0aW9uID0gbmV3IERhdGFUeXBlKDB4ODEpOwotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIE9mZnNldERhdGVUaW1lID0gbmV3IERhdGFUeXBlKDB4ODgpOwotI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUgMTU5MQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgY3VzdG9tIHR5cGUsIHJlcHJlc2VudGVkIGFzIGEgYmxvYiB2YWx1ZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBDdXN0b20gPSBuZXcgRGF0YVR5cGUoMCk7Ci0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIG51bGwgdmFsdWUgZm9yIGFuIHVuc3BlY2lmaWVkIE9iamVjdCB2YWx1ZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBVbnNwZWNpZmllZE51bGwgPSBuZXcgRGF0YVR5cGUoMHhGRSk7Ci0KLSAgICAgICAgcHJpdmF0ZSBEYXRhVHlwZShpbnQgY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZUNvZGUgPSAoYnl0ZSkgY29kZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEdldHMgdGhlIHR5cGUgY29kZSBvZiB0aGlzIGRhdGEgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGJ5dGUgVHlwZUNvZGUgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3IDxzZWUgY3JlZj0iRGF0YVR5cGUiLz4gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiB0eXBlIGNvZGUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRGF0YVR5cGUgRnJvbVR5cGVDb2RlKGludCBjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERhdGFUeXBlKGNvZGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhEYXRhVHlwZT8gb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMobnVsbCwgb3RoZXIpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gVHlwZUNvZGUgPT0gb3RoZXIuVHlwZUNvZGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGJvb2wgRXF1YWxzKG9iamVjdD8gb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG51bGwsIG9iaikpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHModGhpcywgb2JqKSkgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAob2JqLkdldFR5cGUoKSAhPSBHZXRUeXBlKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBFcXVhbHMoKERhdGFUeXBlKSBvYmopOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gVHlwZUNvZGUuR2V0SGFzaENvZGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIERldGVybWluZXMgd2hldGhlciB0d28gc3BlY2lmaWVkIDxzZWUgY3JlZj0iRGF0YVR5cGUiLz4gaGF2ZSB0aGUgc2FtZSB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbCBvcGVyYXRvciA9PShEYXRhVHlwZSBmaXJzdCwgRGF0YVR5cGUgc2Vjb25kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG51bGwsIGZpcnN0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG51bGwsIHNlY29uZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmaXJzdC5FcXVhbHMoc2Vjb25kKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIERldGVybWluZXMgd2hldGhlciB0d28gc3BlY2lmaWVkIDxzZWUgY3JlZj0iRGF0YVR5cGUiLz4gaGF2ZSBkaWZmZXJlbnQgdmFsdWVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2wgb3BlcmF0b3IgIT0oRGF0YVR5cGUgZmlyc3QsIERhdGFUeXBlIHNlY29uZCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICEoZmlyc3QgPT0gc2Vjb25kKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICQiRGF0YVR5cGV7eyBUeXBlQ29kZSA9IHtUeXBlQ29kZX0gfX0iOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA1YzY2Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBTZXJpYWxpemVzIGRhdGEgdG8gYW5kIGZyb20gR3JlbWxpbiBTZXJ2ZXIgaW4gR3JhcGhCaW5hcnkgZm9ybWF0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIgOiBJTWVzc2FnZVNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgY29uc3Qgc3RyaW5nIE1pbWVUeXBlID0gU2VyaWFsaXphdGlvblRva2Vucy5HcmFwaEJpbmFyeTFNaW1lVHlwZTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYnl0ZVtdIEhlYWRlciA9IEVuY29kaW5nLlVURjguR2V0Qnl0ZXMoTWltZVR5cGUpOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBHcmFwaEJpbmFyeVJlYWRlciBfcmVhZGVyOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEdyYXBoQmluYXJ5V3JpdGVyIF93cml0ZXI7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyIF9yZXF1ZXN0U2VyaWFsaXplciA9IG5ldyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIoKTsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyIF9yZXNwb25zZVNlcmlhbGl6ZXIgPSBuZXcgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcigpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlZ2lzdHJ5Ij5UaGUgPHNlZSBjcmVmPSJUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Ii8+IHRvIHVzZSBmb3Igc2VyaWFsaXphdGlvbi48L3BhcmFtPgotICAgICAgICBwdWJsaWMgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplcihUeXBlU2VyaWFsaXplclJlZ2lzdHJ5PyByZWdpc3RyeSA9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yZWFkZXIgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIocmVnaXN0cnkpOwotICAgICAgICAgICAgX3dyaXRlciA9IG5ldyBHcmFwaEJpbmFyeVdyaXRlcihyZWdpc3RyeSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlYWRlciI+VGhlIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlSZWFkZXIiLz4gdXNlZCB0byBkZXNlcmlhbGl6ZSBmcm9tIEdyYXBoQmluYXJ5LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5UaGUgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVdyaXRlciIvPiB1c2VkIHRvIHNlcmlhbGl6ZSB0byBHcmFwaEJpbmFyeS48L3BhcmFtPgotICAgICAgICBbT2Jzb2xldGUoIlVzZSB0aGUgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBhIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgaW5zdGVhZC4iKV0KLSAgICAgICAgcHVibGljIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIoR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yZWFkZXIgPSByZWFkZXI7Ci0gICAgICAgICAgICBfd3JpdGVyID0gd3JpdGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrPGJ5dGVbXT4gU2VyaWFsaXplTWVzc2FnZUFzeW5jKFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKChieXRlKSBIZWFkZXIuTGVuZ3RoLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMoSGVhZGVyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgX3JlcXVlc3RTZXJpYWxpemVyLldyaXRlVmFsdWVBc3luYyhyZXF1ZXN0TWVzc2FnZSwgc3RyZWFtLCBfd3JpdGVyLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGJ5dGVzID0gc3RyZWFtLlRvQXJyYXkoKTsKLSAgICAgICAgICAgIHJldHVybiBieXRlczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+Pj8+IERlc2VyaWFsaXplTWVzc2FnZUFzeW5jKGJ5dGVbXSBtZXNzYWdlLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbShtZXNzYWdlKTsKLSAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVzcG9uc2VTZXJpYWxpemVyLlJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgX3JlYWRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L0dyYXBoQmluYXJ5UmVhZGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeVJlYWRlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkOGJhZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L0dyYXBoQmluYXJ5UmVhZGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5Ci17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBbGxvd3MgdG8gZGVzZXJpYWxpemUgb2JqZWN0cyBmcm9tIEdyYXBoQmluYXJ5LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5UmVhZGVyCi0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgX3JlZ2lzdHJ5OwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5UmVhZGVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWdpc3RyeSI+VGhlIDxzZWUgY3JlZj0iVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSIvPiB0byB1c2UgZm9yIGRlc2VyaWFsaXphdGlvbi48L3BhcmFtPgotICAgICAgICBwdWJsaWMgR3JhcGhCaW5hcnlSZWFkZXIoVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeT8gcmVnaXN0cnkgPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfcmVnaXN0cnkgPSByZWdpc3RyeSA/PyBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Lkluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgb25seSB0aGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgdHlwZSA8dHlwZXBhcmFtcmVmIG5hbWU9IlQiLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0byByZWFkLjwvdHlwZXBhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q/PiBSZWFkTnVsbGFibGVWYWx1ZUFzeW5jPFQ+KFN0cmVhbSBzdHJlYW0sCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0eXBlZFNlcmlhbGl6ZXIgPSBfcmVnaXN0cnkuR2V0U2VyaWFsaXplckZvcih0eXBlb2YoVCkpOwotICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHR5cGVkU2VyaWFsaXplci5SZWFkTnVsbGFibGVWYWx1ZUFzeW5jKHN0cmVhbSwgdGhpcywgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgb25seSB0aGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgdHlwZSA8dHlwZXBhcmFtcmVmIG5hbWU9IlQiLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0byByZWFkLjwvdHlwZXBhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q+IFJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8VD4oU3RyZWFtIHN0cmVhbSwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHR5cGVkU2VyaWFsaXplciA9IF9yZWdpc3RyeS5HZXRTZXJpYWxpemVyRm9yKHR5cGVvZihUKSk7Ci0gICAgICAgICAgICByZXR1cm4gYXdhaXQgdHlwZWRTZXJpYWxpemVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmMoc3RyZWFtLCB0aGlzLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgdGhlIHR5cGUgY29kZSwgaW5mb3JtYXRpb24gYW5kIHZhbHVlIHdpdGggZnVsbHktcXVhbGlmaWVkIGZvcm1hdC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBHcmFwaEJpbmFyeSBkYXRhIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q/PiBSZWFkQXN5bmMoU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdHlwZSA9IERhdGFUeXBlLkZyb21UeXBlQ29kZShhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpKTsKLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuVW5zcGVjaWZpZWROdWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7IC8vIHJlYWQgdmFsdWUgYnl0ZSB0byBhZHZhbmNlIHRoZSBpbmRleAotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBJVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXI7Ci0gICAgICAgICAgICBpZiAodHlwZSAhPSBEYXRhVHlwZS5DdXN0b20pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHlwZVNlcmlhbGl6ZXIgPSBfcmVnaXN0cnkuR2V0U2VyaWFsaXplckZvcih0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgY3VzdG9tVHlwZU5hbWUgPSAoc3RyaW5nKWF3YWl0IFJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8c3RyaW5nPihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHR5cGVTZXJpYWxpemVyID0gX3JlZ2lzdHJ5LkdldFNlcmlhbGl6ZXJGb3JDdXN0b21UeXBlKGN1c3RvbVR5cGVOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHR5cGVTZXJpYWxpemVyLlJlYWRBc3luYyhzdHJlYW0sIHRoaXMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvR3JhcGhCaW5hcnlXcml0ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMDE1M2MuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci5jcworKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeQotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQWxsb3dzIHRvIHNlcmlhbGl6ZSBvYmplY3RzIHRvIEdyYXBoQmluYXJ5LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5V3JpdGVyCi0gICAgewotICAgICAgICBwcml2YXRlIGNvbnN0IGJ5dGUgVmFsdWVGbGFnTnVsbCA9IDE7Ci0gICAgICAgIHByaXZhdGUgY29uc3QgYnl0ZSBWYWx1ZUZsYWdOb25lID0gMDsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iYnl0ZSIvPiByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEdyYXBoQmluYXJ5IHNwZWNpZmljYXRpb24uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBieXRlIFZlcnNpb25CeXRlID0gMHg4MTsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBieXRlW10gVW5zcGVjaWZpZWROdWxsQnl0ZXMgPSB7RGF0YVR5cGUuVW5zcGVjaWZpZWROdWxsLlR5cGVDb2RlLCAweDAxfTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYnl0ZVtdIEN1c3RvbVR5cGVDb2RlQnl0ZXMgPSB7IERhdGFUeXBlLkN1c3RvbS5UeXBlQ29kZSB9OwotCi0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSBfcmVnaXN0cnk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlXcml0ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlZ2lzdHJ5Ij5UaGUgPHNlZSBjcmVmPSJUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Ii8+IHRvIHVzZSBmb3Igc2VyaWFsaXphdGlvbi48L3BhcmFtPgotICAgICAgICBwdWJsaWMgR3JhcGhCaW5hcnlXcml0ZXIoVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeT8gcmVnaXN0cnkgPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfcmVnaXN0cnkgPSByZWdpc3RyeSA/PyBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Lkluc3RhbmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGEgbnVsbGFibGUgdmFsdWUgd2l0aG91dCBpbmNsdWRpbmcgdHlwZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlTnVsbGFibGVWYWx1ZUFzeW5jKG9iamVjdD8gdmFsdWUsIFN0cmVhbSBzdHJlYW0sCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IFdyaXRlVmFsdWVGbGFnTnVsbEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhciB2YWx1ZVR5cGUgPSB2YWx1ZS5HZXRUeXBlKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IF9yZWdpc3RyeS5HZXRTZXJpYWxpemVyRm9yKHZhbHVlVHlwZSk7Ci0gICAgICAgICAgICBhd2FpdCBzZXJpYWxpemVyLldyaXRlTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLCBzdHJlYW0sIHRoaXMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBhIG5vbi1udWxsYWJsZSB2YWx1ZSB3aXRob3V0IGluY2x1ZGluZyB0eXBlIGluZm9ybWF0aW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHRhc2sgdGhhdCByZXByZXNlbnRzIHRoZSBhc3luY2hyb25vdXMgd3JpdGUgb3BlcmF0aW9uLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMob2JqZWN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQie25hbWVvZih2YWx1ZSl9IGNhbm5vdCBiZSBudWxsIik7Ci0gICAgICAgICAgICB2YXIgdmFsdWVUeXBlID0gdmFsdWUuR2V0VHlwZSgpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBfcmVnaXN0cnkuR2V0U2VyaWFsaXplckZvcih2YWx1ZVR5cGUpOwotICAgICAgICAgICAgYXdhaXQgc2VyaWFsaXplci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZSwgc3RyZWFtLCB0aGlzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGFuIG9iamVjdCBpbiBmdWxseS1xdWFsaWZpZWQgZm9ybWF0LCBjb250YWluaW5nIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHRhc2sgdGhhdCByZXByZXNlbnRzIHRoZSBhc3luY2hyb25vdXMgd3JpdGUgb3BlcmF0aW9uLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgV3JpdGVBc3luYyhvYmplY3Q/IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKFVuc3BlY2lmaWVkTnVsbEJ5dGVzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlLkdldFR5cGUoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gX3JlZ2lzdHJ5LkdldFNlcmlhbGl6ZXJGb3IodmFsdWVUeXBlKTsKLQotICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZXIgaXMgQ3VzdG9tVHlwZVNlcmlhbGl6ZXIgY3VzdG9tVHlwZVNlcmlhbGl6ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMoQ3VzdG9tVHlwZUNvZGVCeXRlcywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBhd2FpdCBXcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhjdXN0b21UeXBlU2VyaWFsaXplci5UeXBlTmFtZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBhd2FpdCBjdXN0b21UeXBlU2VyaWFsaXplci5Xcml0ZUFzeW5jKHZhbHVlLCBzdHJlYW0sIHRoaXMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoc2VyaWFsaXplci5EYXRhVHlwZS5UeXBlQ29kZSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHNlcmlhbGl6ZXIuV3JpdGVBc3luYyh2YWx1ZSwgc3RyZWFtLCB0aGlzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGVzIGEgc2luZ2xlIGJ5dGUgcmVwcmVzZW50aW5nIHRoZSBudWxsIHZhbHVlX2ZsYWcuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlVmFsdWVGbGFnTnVsbEFzeW5jKFN0cmVhbSBzdHJlYW0sIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKFZhbHVlRmxhZ051bGwsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgYSBzaW5nbGUgYnl0ZSB3aXRoIHZhbHVlIDAsIHJlcHJlc2VudGluZyBhbiB1bnNldCB2YWx1ZV9mbGFnLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIHN0cmVhbSB0byB3cml0ZSB0by48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgdGFzayB0aGF0IHJlcHJlc2VudHMgdGhlIGFzeW5jaHJvbm91cyB3cml0ZSBvcGVyYXRpb24uPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBXcml0ZVZhbHVlRmxhZ05vbmVBc3luYyhTdHJlYW0gc3RyZWFtLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpIHsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhWYWx1ZUZsYWdOb25lLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgCi0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvSVR5cGVTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9JVHlwZVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1MDNjNjMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9JVHlwZVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIFJlcHJlc2VudHMgYSBzZXJpYWxpemVyIGZvciBhIGNlcnRhaW4gdHlwZS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBpbnRlcmZhY2UgSVR5cGVTZXJpYWxpemVyCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIHRoZSA8c2VlIGNyZWY9IkRhdGFUeXBlIi8+IHRoYXQgc3VwcG9ydGVkIGJ5IHRoaXMgc2VyaWFsaXplci4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgRGF0YVR5cGUgRGF0YVR5cGUgeyBnZXQ7IH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhlIHR5cGUgY29kZSwgaW5mb3JtYXRpb24gYW5kIHZhbHVlIHRvIGEgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ3cml0ZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVdyaXRlciIvPiB0aGF0IGNhbiBiZSB1c2VkIHRvIHdyaXRlIG5lc3RlZCB2YWx1ZXMuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHRhc2sgdGhhdCByZXByZXNlbnRzIHRoZSBhc3luY2hyb25vdXMgd3JpdGUgb3BlcmF0aW9uLjwvcmV0dXJucz4KLSAgICAgICAgVGFzayBXcml0ZUFzeW5jKG9iamVjdCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhlIG51bGxhYmxlIHZhbHVlIHRvIGEgc3RyZWFtLCBjb21wb3NlZCBieSB0aGUgdmFsdWUgZmxhZyBhbmQgdGhlIHNlcXVlbmNlIG9mIGJ5dGVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ3cml0ZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVdyaXRlciIvPiB0aGF0IGNhbiBiZSB1c2VkIHRvIHdyaXRlIG5lc3RlZCB2YWx1ZXMuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHRhc2sgdGhhdCByZXByZXNlbnRzIHRoZSBhc3luY2hyb25vdXMgd3JpdGUgb3BlcmF0aW9uLjwvcmV0dXJucz4KLSAgICAgICAgVGFzayBXcml0ZU51bGxhYmxlVmFsdWVBc3luYyhvYmplY3QgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7Ci0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBXcml0ZXMgdGhlIG5vbi1udWxsYWJsZSB2YWx1ZSB0byBhIHN0cmVhbSwgY29tcG9zZWQgYnkgdGhlIHZhbHVlIGZsYWcgYW5kIHRoZSBzZXF1ZW5jZSBvZiBieXRlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlXcml0ZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+Ci0gICAgICAgIFRhc2sgV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMob2JqZWN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlYWRzIHRoZSB0eXBlIGluZm9ybWF0aW9uIGFuZCB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlYWRlciI+QSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5UmVhZGVyIi8+IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgotICAgICAgICBUYXNrPG9iamVjdD8+IFJlYWRBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUmVhZHMgdGhlIHZhbHVlIGZyb20gdGhlIHN0cmVhbSAobm90IHRoZSB0eXBlIGluZm9ybWF0aW9uKS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBHcmFwaEJpbmFyeSBkYXRhIHRvIHBhcnNlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVhZGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlSZWFkZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIG5lc3RlZCB2YWx1ZXMuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCB2YWx1ZS48L3JldHVybnM+Ci0gICAgICAgIFRhc2s8b2JqZWN0Pz4gUmVhZE51bGxhYmxlVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlYWRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHJlYW0gKG5vdCB0aGUgdHlwZSBpbmZvcm1hdGlvbikuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlYWRlciI+QSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5UmVhZGVyIi8+IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgotICAgICAgICBUYXNrPG9iamVjdD4gUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1JlcXVlc3RNZXNzYWdlU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODAxNmM1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEFsbG93cyB0byBzZXJpYWxpemUgYSA8c2VlIGNyZWY9IlJlcXVlc3RNZXNzYWdlIi8+LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIFJlcXVlc3RNZXNzYWdlU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gV3JpdGUgdGhlIHJlcXVlc3QgbWVzc2FnZSB0byBhIHN0cmVhbS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZXF1ZXN0TWVzc2FnZSI+VGhlIG1lc3NhZ2UgdG8gc2VyaWFsaXplLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlXcml0ZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgTWVtb3J5U3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoR3JhcGhCaW5hcnlXcml0ZXIuVmVyc2lvbkJ5dGUsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMocmVxdWVzdE1lc3NhZ2UuUmVxdWVzdElkLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMocmVxdWVzdE1lc3NhZ2UuT3BlcmF0aW9uLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMocmVxdWVzdE1lc3NhZ2UuUHJvY2Vzc29yLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMocmVxdWVzdE1lc3NhZ2UuQXJndW1lbnRzLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9SZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9SZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWM4YWQyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEFsbG93cyB0byBkZXNlcmlhbGl6ZSBhIDxzZWUgY3JlZj0iUmVzcG9uc2VNZXNzYWdle1R9Ii8+LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFJlYWRzIGEgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBzdHJlYW0uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlYWRlciI+QSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5UmVhZGVyIi8+IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgcmVzcG9uc2UgbWVzc2FnZS48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrPFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+PiBSZWFkVmFsdWVBc3luYyhNZW1vcnlTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSAmIDB4ZmY7Ci0KLSAgICAgICAgICAgIGlmICh2ZXJzaW9uID4+IDcgIT0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgcmVzcG9uc2Ugc3RyZWFtIHdhcyBpbmNvcnJlY3RseSBidWlsdAotICAgICAgICAgICAgICAgIC8vIE9yIHRoZSBzdHJlYW0gb2Zmc2V0cyBhcmUgd3JvbmcKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgZm9ybWF0Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciByZXF1ZXN0SWQgPQotICAgICAgICAgICAgICAgIChHdWlkPylhd2FpdCByZWFkZXIuUmVhZE51bGxhYmxlVmFsdWVBc3luYzxHdWlkPihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgY29kZSA9IChSZXNwb25zZVN0YXR1c0NvZGUpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgbWVzc2FnZSA9IChzdHJpbmc/KWF3YWl0IHJlYWRlci5SZWFkTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGRpY3RPYmogPSBhd2FpdCByZWFkZXIKLSAgICAgICAgICAgICAgICAuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0Pj4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSAoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4pZGljdE9iajsKLQotICAgICAgICAgICAgdmFyIHN0YXR1cyA9IG5ldyBSZXNwb25zZVN0YXR1cyhjb2RlLCBhdHRyaWJ1dGVzLCBtZXNzYWdlKTsKLQotICAgICAgICAgICAgdmFyIG1ldGEgPSAoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4pYXdhaXQgcmVhZGVyCi0gICAgICAgICAgICAgICAgLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8RGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBkYXRhID0gKExpc3Q8b2JqZWN0Pj8pYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJlc3BvbnNlUmVzdWx0PExpc3Q8b2JqZWN0Pj4oZGF0YSwgbWV0YSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4ocmVxdWVzdElkLCBzdGF0dXMsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9TdHJlYW1FeHRlbnNpb25zLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9TdHJlYW1FeHRlbnNpb25zLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjIxZTkxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvU3RyZWFtRXh0ZW5zaW9ucy5jcworKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeQotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFByb3ZpZGVzIGV4dGVuc2lvbiBtZXRob2RzIGZvciA8c2VlIGNyZWY9IlN0cmVhbSIgLz4gdGhhdCBhcmUgbW9zdGx5IHVzZWZ1bCB3aGVuIGltcGxlbWVudGluZyBHcmFwaEJpbmFyeQotICAgIC8vLyAgICAgc2VyaWFsaXplcnMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0cmVhbUV4dGVuc2lvbnMKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSB3cml0ZXMgYSA8c2VlIGNyZWY9ImJ5dGUiLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJieXRlIi8+IHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9ImJ5dGUiLz4gdG8gd3JpdGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzayBXcml0ZUJ5dGVBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIGJ5dGUgdmFsdWUsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKG5ld1tdIHt2YWx1ZX0sIDAsIDEsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYSA8c2VlIGNyZWY9ImJ5dGUiLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0iYnl0ZSIvPi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxieXRlPiBSZWFkQnl0ZUFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVhZEJ1ZmZlciA9IG5ldyBieXRlWzFdOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhyZWFkQnVmZmVyLCAwLCAxLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIHJlYWRCdWZmZXJbMF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGEgPHNlZSBjcmVmPSJzYnl0ZSIvPiB0byBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHdyaXRlIHRoZSA8c2VlIGNyZWY9InNieXRlIi8+IHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9InNieXRlIi8+IHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVTQnl0ZUFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgc2J5dGUgdmFsdWUsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygoYnl0ZSl2YWx1ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSByZWFkcyBhIDxzZWUgY3JlZj0ic2J5dGUiLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0ic2J5dGUiLz4uPC9yZXR1cm5zPgotICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2s8c2J5dGU+IFJlYWRTQnl0ZUFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKHNieXRlKWF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGFuIDxzZWUgY3JlZj0iaW50Ii8+IHRvIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gd3JpdGUgdGhlIDxzZWUgY3JlZj0iaW50Ii8+IHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9ImludCIvPiB0byB3cml0ZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlSW50QXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBpbnQgdmFsdWUsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlcyA9IEJpdENvbnZlcnRlci5HZXRCeXRlcyh2YWx1ZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhuZXdbXSB7IGJ5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdIH0sIDAsIDQsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYW4gPHNlZSBjcmVmPSJpbnQiLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0iaW50Ii8+LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPGludD4gUmVhZEludEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVs0XTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMoYnl0ZXMsIDAsIDQsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gQml0Q29udmVydGVyLlRvSW50MzIobmV3IFtde2J5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdfSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGEgPHNlZSBjcmVmPSJsb25nIi8+IHRvIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gd3JpdGUgdGhlIDxzZWUgY3JlZj0ibG9uZyIvPiB0by48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJsb25nIi8+IHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVMb25nQXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBsb25nIHZhbHVlLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXModmFsdWUpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtCi0gICAgICAgICAgICAgICAgLldyaXRlQXN5bmMobmV3W10geyBieXRlc1s3XSwgYnl0ZXNbNl0sIGJ5dGVzWzVdLCBieXRlc1s0XSwgYnl0ZXNbM10sIGJ5dGVzWzJdLCBieXRlc1sxXSwgYnl0ZXNbMF0gfSwgMCwKLSAgICAgICAgICAgICAgICAgICAgOCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSByZWFkcyBhIDxzZWUgY3JlZj0ibG9uZyIvPiBmcm9tIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gcmVhZCBmcm9tLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgPHNlZSBjcmVmPSJsb25nIi8+LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPGxvbmc+IFJlYWRMb25nQXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBieXRlWzhdOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhieXRlcywgMCwgOCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBCaXRDb252ZXJ0ZXIuVG9JbnQ2NCgKLSAgICAgICAgICAgICAgICBuZXdbXSB7Ynl0ZXNbN10sIGJ5dGVzWzZdLCBieXRlc1s1XSwgYnl0ZXNbNF0sIGJ5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdfSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGEgPHNlZSBjcmVmPSJmbG9hdCIvPiB0byBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHdyaXRlIHRoZSA8c2VlIGNyZWY9ImZsb2F0Ii8+IHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9ImZsb2F0Ii8+IHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVGbG9hdEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgZmxvYXQgdmFsdWUsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlcyA9IEJpdENvbnZlcnRlci5HZXRCeXRlcyh2YWx1ZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhuZXdbXSB7IGJ5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdIH0sIDAsIDQsIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYSA8c2VlIGNyZWY9ImZsb2F0Ii8+IGZyb20gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byByZWFkIGZyb20uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCA8c2VlIGNyZWY9ImZsb2F0Ii8+LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPGZsb2F0PiBSZWFkRmxvYXRBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBieXRlWzRdOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhieXRlcywgMCwgNCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBCaXRDb252ZXJ0ZXIuVG9TaW5nbGUobmV3IFtde2J5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdfSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGEgPHNlZSBjcmVmPSJkb3VibGUiLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJkb3VibGUiLz4gdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIDxzZWUgY3JlZj0iZG91YmxlIi8+IHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVEb3VibGVBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIGRvdWJsZSB2YWx1ZSwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVzID0gQml0Q29udmVydGVyLkdldEJ5dGVzKHZhbHVlKTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbQotICAgICAgICAgICAgICAgIC5Xcml0ZUFzeW5jKG5ld1tdIHtieXRlc1s3XSwgYnl0ZXNbNl0sIGJ5dGVzWzVdLCBieXRlc1s0XSwgYnl0ZXNbM10sIGJ5dGVzWzJdLCBieXRlc1sxXSwgYnl0ZXNbMF19LCAwLAotICAgICAgICAgICAgICAgICAgICA4LCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHJlYWRzIGEgPHNlZSBjcmVmPSJkb3VibGUiLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0iZG91YmxlIi8+LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPGRvdWJsZT4gUmVhZERvdWJsZUFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVzID0gbmV3IGJ5dGVbOF07Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uUmVhZEFzeW5jKGJ5dGVzLCAwLCA4LCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIEJpdENvbnZlcnRlci5Ub0RvdWJsZSgKLSAgICAgICAgICAgICAgICBuZXdbXSB7Ynl0ZXNbN10sIGJ5dGVzWzZdLCBieXRlc1s1XSwgYnl0ZXNbNF0sIGJ5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdfSwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGEgPHNlZSBjcmVmPSJzaG9ydCIvPiB0byBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHdyaXRlIHRoZSA8c2VlIGNyZWY9InNob3J0Ii8+IHRvLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9InNob3J0Ii8+IHRvIHdyaXRlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVTaG9ydEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgc2hvcnQgdmFsdWUsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlcyA9IEJpdENvbnZlcnRlci5HZXRCeXRlcyh2YWx1ZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhuZXdbXSB7IGJ5dGVzWzFdLCBieXRlc1swXSB9LCAwLCAyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHJlYWRzIGEgPHNlZSBjcmVmPSJzaG9ydCIvPiBmcm9tIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gcmVhZCBmcm9tLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgPHNlZSBjcmVmPSJzaG9ydCIvPi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxzaG9ydD4gUmVhZFNob3J0QXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVsyXTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMoYnl0ZXMsIDAsIDIsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gQml0Q29udmVydGVyLlRvSW50MTYobmV3IFtde2J5dGVzWzFdLCBieXRlc1swXX0sIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0iYm9vbCIvPiB0byBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHdyaXRlIHRoZSA8c2VlIGNyZWY9ImJvb2wiLz4gdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIDxzZWUgY3JlZj0iYm9vbCIvPiB0byB3cml0ZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlQm9vbEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgYm9vbCB2YWx1ZSwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKChieXRlKSh2YWx1ZSA/IDEgOiAwKSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSByZWFkcyBhIDxzZWUgY3JlZj0iYm9vbCIvPiBmcm9tIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gcmVhZCBmcm9tLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgPHNlZSBjcmVmPSJib29sIi8+LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPGJvb2w+IFJlYWRCb29sQXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBiID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBiIHN3aXRjaAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIDEgPT4gdHJ1ZSwKLSAgICAgICAgICAgICAgICAwID0+IGZhbHNlLAotICAgICAgICAgICAgICAgIF8gPT4gdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiQ2Fubm90IHJlYWQgYnl0ZSB7Yn0gYXMgYSBib29sZWFuLiIpCi0gICAgICAgICAgICB9OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0iVDpieXRlW10iLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJUOmJ5dGVbXSIvPiB0by48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJUOmJ5dGVbXSIvPiB0byB3cml0ZS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlQXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBieXRlW10gdmFsdWUsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKHZhbHVlLCAwLCB2YWx1ZS5MZW5ndGgsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYSA8c2VlIGNyZWY9IlQ6Ynl0ZVtdIi8+IGZyb20gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPiBpbnRvIGEgYnVmZmVyLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNvdW50Ij5UaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCA8c2VlIGNyZWY9IlQ6Ynl0ZVtdIi8+LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPGJ5dGVbXT4gUmVhZEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgaW50IGNvdW50LAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IGJ5dGVbY291bnRdOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhidWZmZXIsIDAsIGNvdW50LCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVTZXJpYWxpemVyUmVnaXN0cnkuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVTZXJpYWxpemVyUmVnaXN0cnkuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTY4MGQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlU2VyaWFsaXplclJlZ2lzdHJ5LmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzLkNvZGVBbmFseXNpczsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLk51bWVyaWNzOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneTsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeQotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gUHJvdmlkZXMgR3JhcGhCaW5hcnkgc2VyaWFsaXplcnMgZm9yIGRpZmZlcmVudCB0eXBlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Ci0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8VHlwZSwgSVR5cGVTZXJpYWxpemVyPiBfc2VyaWFsaXplckJ5VHlwZSA9Ci0gICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxUeXBlLCBJVHlwZVNlcmlhbGl6ZXI+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAge3R5cGVvZihpbnQpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuSW50U2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihsb25nKSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkxvbmdTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKHN0cmluZyksIG5ldyBTdHJpbmdTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoRGF0ZVRpbWVPZmZzZXQpLCBuZXcgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoR3JlbWxpblR5cGUpLCBuZXcgQ2xhc3NTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoVHlwZSksIG5ldyBUeXBlU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKGRvdWJsZSksIFNpbmdsZVR5cGVTZXJpYWxpemVycy5Eb3VibGVTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKGZsb2F0KSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkZsb2F0U2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihHdWlkKSwgbmV3IFV1aWRTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoRWRnZSksIG5ldyBFZGdlU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKFBhdGgpLCBuZXcgUGF0aFNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihQcm9wZXJ0eSksIG5ldyBQcm9wZXJ0eVNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihWZXJ0ZXgpLCBuZXcgVmVydGV4U2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKFZlcnRleFByb3BlcnR5KSwgbmV3IFZlcnRleFByb3BlcnR5U2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKEJhcnJpZXIpLCBFbnVtU2VyaWFsaXplcnMuQmFycmllclNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoQmluZGluZyksIG5ldyBCaW5kaW5nU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKEJ5dGVjb2RlKSwgbmV3IEJ5dGVjb2RlU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKElUcmF2ZXJzYWwpLCBuZXcgVHJhdmVyc2FsU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKENhcmRpbmFsaXR5KSwgRW51bVNlcmlhbGl6ZXJzLkNhcmRpbmFsaXR5U2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihDb2x1bW4pLCBFbnVtU2VyaWFsaXplcnMuQ29sdW1uU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihEaXJlY3Rpb24pLCBFbnVtU2VyaWFsaXplcnMuRGlyZWN0aW9uU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihEVCksIEVudW1TZXJpYWxpemVycy5EVFNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoR1R5cGUpLCBFbnVtU2VyaWFsaXplcnMuR1R5cGVTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKE1lcmdlKSwgRW51bVNlcmlhbGl6ZXJzLk1lcmdlU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihPcGVyYXRvciksIEVudW1TZXJpYWxpemVycy5PcGVyYXRvclNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoT3JkZXIpLCBFbnVtU2VyaWFsaXplcnMuT3JkZXJTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKFBpY2spLCBFbnVtU2VyaWFsaXplcnMuUGlja1NlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoUG9wKSwgRW51bVNlcmlhbGl6ZXJzLlBvcFNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoSUxhbWJkYSksIG5ldyBMYW1iZGFTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoUCksIG5ldyBQU2VyaWFsaXplcihEYXRhVHlwZS5QKX0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihTY29wZSksIEVudW1TZXJpYWxpemVycy5TY29wZVNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoVCksIEVudW1TZXJpYWxpemVycy5UU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihUcmF2ZXJzZXIpLCBuZXcgVHJhdmVyc2VyU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKGRlY2ltYWwpLCBuZXcgQmlnRGVjaW1hbFNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge3R5cGVvZihCaWdJbnRlZ2VyKSwgbmV3IEJpZ0ludGVnZXJTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2Yoc2J5dGUpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuQnl0ZVNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoYnl0ZVtdKSwgbmV3IEJ5dGVCdWZmZXJTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2Yoc2hvcnQpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuU2hvcnRTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKGJvb2wpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuQm9vbGVhblNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoVGV4dFApLCBuZXcgUFNlcmlhbGl6ZXIoRGF0YVR5cGUuVGV4dFApfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3kpLCBuZXcgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHt0eXBlb2YoY2hhciksIG5ldyBDaGFyU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7dHlwZW9mKFRpbWVTcGFuKSwgbmV3IER1cmF0aW9uU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBEaWN0aW9uYXJ5PERhdGFUeXBlLCBJVHlwZVNlcmlhbGl6ZXI+IF9zZXJpYWxpemVyQnlEYXRhVHlwZSA9Ci0gICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxEYXRhVHlwZSwgSVR5cGVTZXJpYWxpemVyPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5JbnQsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5JbnRTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuTG9uZywgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkxvbmdTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuU3RyaW5nLCBuZXcgU3RyaW5nU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuRGF0ZSwgRGF0ZVRpbWVTZXJpYWxpemVyLkRhdGVTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuVGltZXN0YW1wLCBEYXRlVGltZVNlcmlhbGl6ZXIuVGltZXN0YW1wU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLkNsYXNzLCBuZXcgQ2xhc3NTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5Eb3VibGUsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5Eb3VibGVTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuRmxvYXQsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5GbG9hdFNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5MaXN0LCBuZXcgTGlzdFNlcmlhbGl6ZXI8b2JqZWN0PigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuTWFwLCBuZXcgTWFwU2VyaWFsaXplcjxvYmplY3QsIG9iamVjdD4oKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlNldCwgbmV3IFNldFNlcmlhbGl6ZXI8SGFzaFNldDxvYmplY3Q/Piwgb2JqZWN0PigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuVXVpZCwgbmV3IFV1aWRTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5FZGdlLCBuZXcgRWRnZVNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlBhdGgsIG5ldyBQYXRoU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuUHJvcGVydHksIG5ldyBQcm9wZXJ0eVNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlZlcnRleCwgbmV3IFZlcnRleFNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlZlcnRleFByb3BlcnR5LCBuZXcgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5CYXJyaWVyLCBFbnVtU2VyaWFsaXplcnMuQmFycmllclNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5CaW5kaW5nLCBuZXcgQmluZGluZ1NlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLkJ5dGVjb2RlLCBuZXcgQnl0ZWNvZGVTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5DYXJkaW5hbGl0eSwgRW51bVNlcmlhbGl6ZXJzLkNhcmRpbmFsaXR5U2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLkNvbHVtbiwgRW51bVNlcmlhbGl6ZXJzLkNvbHVtblNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5EaXJlY3Rpb24sIEVudW1TZXJpYWxpemVycy5EaXJlY3Rpb25TZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuRFQsIEVudW1TZXJpYWxpemVycy5EVFNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5HVHlwZSwgRW51bVNlcmlhbGl6ZXJzLkdUeXBlU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLk1lcmdlLCBFbnVtU2VyaWFsaXplcnMuTWVyZ2VTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuT3BlcmF0b3IsIEVudW1TZXJpYWxpemVycy5PcGVyYXRvclNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5PcmRlciwgRW51bVNlcmlhbGl6ZXJzLk9yZGVyU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlBpY2ssIEVudW1TZXJpYWxpemVycy5QaWNrU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlBvcCwgRW51bVNlcmlhbGl6ZXJzLlBvcFNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5MYW1iZGEsIG5ldyBMYW1iZGFTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5QLCBuZXcgUFNlcmlhbGl6ZXIoRGF0YVR5cGUuUCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5TY29wZSwgRW51bVNlcmlhbGl6ZXJzLlNjb3BlU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlQsIEVudW1TZXJpYWxpemVycy5UU2VyaWFsaXplcn0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlRyYXZlcnNlciwgbmV3IFRyYXZlcnNlclNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLkJpZ0RlY2ltYWwsIG5ldyBCaWdEZWNpbWFsU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuQmlnSW50ZWdlciwgbmV3IEJpZ0ludGVnZXJTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5CeXRlLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuQnl0ZVNlcmlhbGl6ZXJ9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5CeXRlQnVmZmVyLCBuZXcgQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLlNob3J0LCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuU2hvcnRTZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuQm9vbGVhbiwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkJvb2xlYW5TZXJpYWxpemVyfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuVGV4dFAsIG5ldyBQU2VyaWFsaXplcihEYXRhVHlwZS5UZXh0UCl9LAotICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5UcmF2ZXJzYWxTdHJhdGVneSwgbmV3IFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuQnVsa1NldCwgbmV3IEJ1bGtTZXRTZXJpYWxpemVyPExpc3Q8b2JqZWN0Pj4oKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLkNoYXIsIG5ldyBDaGFyU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICB7RGF0YVR5cGUuRHVyYXRpb24sIG5ldyBEdXJhdGlvblNlcmlhbGl6ZXIoKX0sCi0gICAgICAgICAgICAgICAge0RhdGFUeXBlLk9mZnNldERhdGVUaW1lLCBuZXcgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyKCl9LAotICAgICAgICAgICAgfTsKLQotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8c3RyaW5nLCBDdXN0b21UeXBlU2VyaWFsaXplcj4gX3NlcmlhbGl6ZXJCeUN1c3RvbVR5cGVOYW1lID0KLSAgICAgICAgICAgIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgQ3VzdG9tVHlwZVNlcmlhbGl6ZXI+KCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5KExpc3Q8Q3VzdG9tVHlwZVJlZ2lzdHJ5RW50cnk+IGN1c3RvbVR5cGVFbnRyaWVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JlYWNoICh2YXIgZW50cnkgaW4gY3VzdG9tVHlwZUVudHJpZXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbZW50cnkuVHlwZV0gPSBlbnRyeS5UeXBlU2VyaWFsaXplcjsKLSAgICAgICAgICAgICAgICBfc2VyaWFsaXplckJ5Q3VzdG9tVHlwZU5hbWVbZW50cnkuQ3VzdG9tVHlwZU5hbWVdID0gZW50cnkuVHlwZVNlcmlhbGl6ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQcm92aWRlcyBhIGRlZmF1bHQgPHNlZSBjcmVmPSJUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Ii8+IGluc3RhbmNlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgSW5zdGFuY2UgPSBCdWlsZCgpLkNyZWF0ZSgpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEJ1aWxkcyBhIDxzZWUgY3JlZj0iVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIEJ1aWxkKCkgPT4gbmV3IEJ1aWxkZXIoKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIGEgc2VyaWFsaXplciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgdGhlIHZhbHVlIHRvIGJlIHNlcmlhbGl6ZWQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWVUeXBlIj5UeXBlIG9mIHRoZSB2YWx1ZSB0byBiZSBzZXJpYWxpemVkLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHNlcmlhbGl6ZXIgZm9yIHRoZSBwcm92aWRlZCB0eXBlLjwvcmV0dXJucz4KLSAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gbm8gc2VyaWFsaXplciBjYW4gYmUgZm91bmQgZm9yIHRoZSB0eXBlLjwvZXhjZXB0aW9uPgotICAgICAgICBwdWJsaWMgSVR5cGVTZXJpYWxpemVyIEdldFNlcmlhbGl6ZXJGb3IoVHlwZSB2YWx1ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfc2VyaWFsaXplckJ5VHlwZS5UcnlHZXRWYWx1ZSh2YWx1ZVR5cGUsIG91dCB2YXIgc2VyaWFsaXplckZvclR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyRm9yVHlwZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKElzRGljdGlvbmFyeVR5cGUodmFsdWVUeXBlLCBvdXQgdmFyIGRpY3RLZXlUeXBlLCBvdXQgdmFyIGRpY3RWYWx1ZVR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyVHlwZSA9IHR5cGVvZihNYXBTZXJpYWxpemVyPCw+KS5NYWtlR2VuZXJpY1R5cGUoZGljdEtleVR5cGUsIGRpY3RWYWx1ZVR5cGUpOwotICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gKElUeXBlU2VyaWFsaXplcj8pIEFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZShzZXJpYWxpemVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbdmFsdWVUeXBlXSA9IHNlcmlhbGl6ZXIgPz8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJDYW5ub3QgY3JlYXRlIGEgc2VyaWFsaXplciBmb3IgdGhlIGRpY3Rpb25hcnkgdHlwZSB7dmFsdWVUeXBlfS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKElzU2V0VHlwZSh2YWx1ZVR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBtZW1iZXJUeXBlID0gdmFsdWVUeXBlLkdldEdlbmVyaWNBcmd1bWVudHMoKVswXTsKLSAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplclR5cGUgPSB0eXBlb2YoU2V0U2VyaWFsaXplcjwsPikuTWFrZUdlbmVyaWNUeXBlKHZhbHVlVHlwZSwgbWVtYmVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSAoSVR5cGVTZXJpYWxpemVyPykgQWN0aXZhdG9yLkNyZWF0ZUluc3RhbmNlKHNlcmlhbGl6ZXJUeXBlKTsKLSAgICAgICAgICAgICAgICBfc2VyaWFsaXplckJ5VHlwZVt2YWx1ZVR5cGVdID0gc2VyaWFsaXplciA/PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkIkNhbm5vdCBjcmVhdGUgYSBzZXJpYWxpemVyIGZvciB0aGUgc2V0IHR5cGUge3ZhbHVlVHlwZX0uIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUuSXNBcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgbWVtYmVyVHlwZSA9IHZhbHVlVHlwZS5HZXRFbGVtZW50VHlwZSgpOwotICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyVHlwZSA9IHR5cGVvZihBcnJheVNlcmlhbGl6ZXI8PikuTWFrZUdlbmVyaWNUeXBlKG1lbWJlclR5cGUhKTsKLSAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IChJVHlwZVNlcmlhbGl6ZXI/KSBBY3RpdmF0b3IuQ3JlYXRlSW5zdGFuY2Uoc2VyaWFsaXplclR5cGUpOwotICAgICAgICAgICAgICAgIF9zZXJpYWxpemVyQnlUeXBlW3ZhbHVlVHlwZV0gPSBzZXJpYWxpemVyID8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQiQ2Fubm90IGNyZWF0ZSBhIHNlcmlhbGl6ZXIgZm9yIHRoZSBhcnJheSB0eXBlIHt2YWx1ZVR5cGV9LiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoSXNMaXN0VHlwZSh2YWx1ZVR5cGUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBtZW1iZXJUeXBlID0gdmFsdWVUeXBlLkdldEdlbmVyaWNBcmd1bWVudHMoKVswXTsKLSAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplclR5cGUgPSB0eXBlb2YoTGlzdFNlcmlhbGl6ZXI8PikuTWFrZUdlbmVyaWNUeXBlKG1lbWJlclR5cGUpOwotICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gKElUeXBlU2VyaWFsaXplcj8pIEFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZShzZXJpYWxpemVyVHlwZSk7Ci0gICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbdmFsdWVUeXBlXSA9IHNlcmlhbGl6ZXIgPz8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJDYW5ub3QgY3JlYXRlIGEgc2VyaWFsaXplciBmb3IgdGhlIGxpc3QgdHlwZSB7dmFsdWVUeXBlfS4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplcjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yZWFjaCAodmFyIHN1cHBvcnRlZFR5cGUgaW4gbmV3IExpc3Q8VHlwZT4oX3NlcmlhbGl6ZXJCeVR5cGUuS2V5cykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZFR5cGUuSXNBc3NpZ25hYmxlRnJvbSh2YWx1ZVR5cGUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBfc2VyaWFsaXplckJ5VHlwZVtzdXBwb3J0ZWRUeXBlXTsKLSAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbdmFsdWVUeXBlXSA9IHNlcmlhbGl6ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oJCJObyBzZXJpYWxpemVyIGZvdW5kIGZvciB0eXBlICd7dmFsdWVUeXBlfScuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sIElzRGljdGlvbmFyeVR5cGUoVHlwZSB0eXBlLCBbTm90TnVsbFdoZW4ocmV0dXJuVmFsdWU6IHRydWUpXSBvdXQgVHlwZT8ga2V5VHlwZSwKLSAgICAgICAgICAgIFtOb3ROdWxsV2hlbihyZXR1cm5WYWx1ZTogdHJ1ZSldIG91dCBUeXBlPyB2YWx1ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtYXliZUludGVyZmFjZVR5cGUgPSB0eXBlCi0gICAgICAgICAgICAgICAgLkdldEludGVyZmFjZXMoKQotICAgICAgICAgICAgICAgIC5GaXJzdE9yRGVmYXVsdChpbXBsZW1lbnRlZEludGVyZmFjZVR5cGUgPT4gaW1wbGVtZW50ZWRJbnRlcmZhY2VUeXBlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJiBpbXBsZW1lbnRlZEludGVyZmFjZVR5cGUuR2V0R2VuZXJpY1R5cGVEZWZpbml0aW9uKCkgPT0gdHlwZW9mKElEaWN0aW9uYXJ5PCw+KSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXliZUludGVyZmFjZVR5cGUgaXMgeyB9IGludGVyZmFjZVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga2V5VHlwZSA9IGludGVyZmFjZVR5cGUuR2V0R2VuZXJpY0FyZ3VtZW50cygpWzBdOwotICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IGludGVyZmFjZVR5cGUuR2V0R2VuZXJpY0FyZ3VtZW50cygpWzFdOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGtleVR5cGUgPSBudWxsOwotICAgICAgICAgICAgdmFsdWVUeXBlID0gbnVsbDsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbCBJc1NldFR5cGUoVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZS5HZXRJbnRlcmZhY2VzKCkuQW55KGltcGxlbWVudGVkSW50ZXJmYWNlID0+IGltcGxlbWVudGVkSW50ZXJmYWNlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZEludGVyZmFjZS5HZXRHZW5lcmljVHlwZURlZmluaXRpb24oKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YoSVNldDw+KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sIElzTGlzdFR5cGUoVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdHlwZS5HZXRJbnRlcmZhY2VzKCkuQW55KGltcGxlbWVudGVkSW50ZXJmYWNlID0+IGltcGxlbWVudGVkSW50ZXJmYWNlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRlZEludGVyZmFjZS5HZXRHZW5lcmljVHlwZURlZmluaXRpb24oKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YoSUxpc3Q8PikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gR2V0cyBhIHNlcmlhbGl6ZXIgZm9yIHRoZSBnaXZlbiBHcmFwaEJpbmFyeSB0eXBlLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InR5cGUiPlRoZSBHcmFwaEJpbmFyeSB0eXBlIHRoYXQgc2hvdWxkIGJlIChkZSlzZXJpYWxpemVkLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHNlcmlhbGl6ZXIgZm9yIHRoZSBwcm92aWRlZCBHcmFwaEJpbmFyeSB0eXBlLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIElUeXBlU2VyaWFsaXplciBHZXRTZXJpYWxpemVyRm9yKERhdGFUeXBlIHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLkN1c3RvbSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oIkN1c3RvbSB0eXBlIHNlcmlhbGl6ZXJzIGNhbiBub3QgYmUgcmV0cmlldmVkIHVzaW5nIHRoaXMgbWV0aG9kIik7Ci0KLSAgICAgICAgICAgIHJldHVybiBfc2VyaWFsaXplckJ5RGF0YVR5cGVbdHlwZV07Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIGEgc2VyaWFsaXplciBmb3IgdGhlIGdpdmVuIGN1c3RvbSB0eXBlIG5hbWUuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHlwZU5hbWUiPlRoZSBjdXN0b20gdHlwZSBuYW1lLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5BIHNlcmlhbGl6ZXIgZm9yIHRoZSBwcm92aWRlZCBjdXN0b20gdHlwZSBuYW1lLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIEN1c3RvbVR5cGVTZXJpYWxpemVyIEdldFNlcmlhbGl6ZXJGb3JDdXN0b21UeXBlKHN0cmluZyB0eXBlTmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9zZXJpYWxpemVyQnlDdXN0b21UeXBlTmFtZS5UcnlHZXRWYWx1ZSh0eXBlTmFtZSwgb3V0IHZhciBzZXJpYWxpemVyKQotICAgICAgICAgICAgICAgID8gc2VyaWFsaXplcgotICAgICAgICAgICAgICAgIDogdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oJCJObyBzZXJpYWxpemVyIGZvdW5kIGZvciB0eXBlICd7dHlwZU5hbWV9Jy4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFRoZSBidWlsZGVyIG9mIGEgPHNlZSBjcmVmPSJUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Ii8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY2xhc3MgQnVpbGRlcgotICAgICAgICB7Ci0gICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IExpc3Q8Q3VzdG9tVHlwZVJlZ2lzdHJ5RW50cnk+IF9saXN0ID0gbmV3IExpc3Q8Q3VzdG9tVHlwZVJlZ2lzdHJ5RW50cnk+KCk7Ci0KLSAgICAgICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgICAgIC8vLyBDcmVhdGVzIHRoZSA8c2VlIGNyZWY9IlR5cGVTZXJpYWxpemVyUmVnaXN0cnkiLz4uCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgcHVibGljIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgQ3JlYXRlKCkgPT4gbmV3IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkoX2xpc3QpOwotCi0gICAgICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgICAgICAvLy8gQWRkcyBhIHNlcmlhbGl6ZXIgZm9yIGEgY3VzdG9tIHR5cGUuCi0gICAgICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0eXBlIj5UaGUgY3VzdG9tIHR5cGUgc3VwcG9ydGVkIGJ5IHRoZSBzZXJpYWxpemVyLjwvcGFyYW0+Ci0gICAgICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InNlcmlhbGl6ZXIiPlRoZSBzZXJpYWxpemVyIGZvciB0aGUgY3VzdG9tIHR5cGUuPC9wYXJhbT4KLSAgICAgICAgICAgIHB1YmxpYyBCdWlsZGVyIEFkZEN1c3RvbVR5cGUoVHlwZSB0eXBlLCBDdXN0b21UeXBlU2VyaWFsaXplciBzZXJpYWxpemVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVyID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKHNlcmlhbGl6ZXIpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2VyaWFsaXplci5UeXBlTmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oInNlcmlhbGl6ZXIgY3VzdG9tIHR5cGUgbmFtZSBjYW4gbm90IGJlIG51bGwiKTsKLQotICAgICAgICAgICAgICAgIF9saXN0LkFkZChuZXcgQ3VzdG9tVHlwZVJlZ2lzdHJ5RW50cnkodHlwZSwgc2VyaWFsaXplcikpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBjbGFzcyBDdXN0b21UeXBlUmVnaXN0cnlFbnRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBwdWJsaWMgVHlwZSBUeXBlIHsgZ2V0OyB9Ci0gICAgICAgICAgICBwdWJsaWMgQ3VzdG9tVHlwZVNlcmlhbGl6ZXIgVHlwZVNlcmlhbGl6ZXIgeyBnZXQ7IH0KLQotICAgICAgICAgICAgcHVibGljIEN1c3RvbVR5cGVSZWdpc3RyeUVudHJ5KFR5cGUgdHlwZSwgQ3VzdG9tVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVHlwZSA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgVHlwZVNlcmlhbGl6ZXIgPSB0eXBlU2VyaWFsaXplcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1YmxpYyBzdHJpbmcgQ3VzdG9tVHlwZU5hbWUgPT4gVHlwZVNlcmlhbGl6ZXIuVHlwZU5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9BcnJheVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0FycmF5U2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI4N2NmMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0FycmF5U2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIHNlcmlhbGl6ZXIgdGhhdCBzZXJpYWxpemVzIC5ORVQgYXJyYXlzIHRvIEdyYXBoQmluYXJ5IGxpc3RzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVE1lbWJlciI+VGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGFycmF5LjwvdHlwZXBhcmFtPgotICAgIHB1YmxpYyBjbGFzcyBBcnJheVNlcmlhbGl6ZXI8VE1lbWJlcj4gOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxUTWVtYmVyW10+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQXJyYXlTZXJpYWxpemVye1RNZW1iZXJ9IiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEFycmF5U2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5MaXN0KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFRNZW1iZXJbXSB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuTGVuZ3RoLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIHZhbHVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGl0ZW0sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYXMgR3JhcGhCaW5hcnkgaGFzIG5vIGFycmF5IGRhdGEgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIFRhc2s8VE1lbWJlcltdPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigiUmVhZGluZyBhbiBhcnJheSBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CaWdEZWNpbWFsU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQmlnRGVjaW1hbFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MmU4YzEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CaWdEZWNpbWFsU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5OdW1lcmljczsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIHNlcmlhbGl6ZXIgdGhhdCBzZXJpYWxpemVzIDxzZWUgY3JlZj0iZGVjaW1hbCIvPiB2YWx1ZXMgYXMgQmlnRGVjaW1hbCBpbiBHcmFwaEJpbmFyeS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBCaWdEZWNpbWFsU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPGRlY2ltYWw+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQmlnRGVjaW1hbFNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQmlnRGVjaW1hbFNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQmlnRGVjaW1hbCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhkZWNpbWFsIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciAodW5zY2FsZWRWYWx1ZSwgc2NhbGUpID0gR2V0VW5zY2FsZWRWYWx1ZUFuZFNjYWxlKHZhbHVlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhzY2FsZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHVuc2NhbGVkVmFsdWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgKEJpZ0ludGVnZXIsIGludCkgR2V0VW5zY2FsZWRWYWx1ZUFuZFNjYWxlKGRlY2ltYWwgaW5wdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBwYXJ0cyA9IGRlY2ltYWwuR2V0Qml0cyhpbnB1dCk7Ci0KLSAgICAgICAgICAgIHZhciBzaWduID0gKHBhcnRzWzNdICYgMHg4MDAwMDAwMCkgIT0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHNjYWxlID0gKHBhcnRzWzNdID4+IDE2KSAmIDB4N0Y7Ci0KLSAgICAgICAgICAgIHZhciBsb3dCeXRlcyA9IEJpdENvbnZlcnRlci5HZXRCeXRlcyhwYXJ0c1swXSk7Ci0gICAgICAgICAgICB2YXIgbWlkZGxlQnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXMocGFydHNbMV0pOwotICAgICAgICAgICAgdmFyIGhpZ2hCeXRlcyA9IEJpdENvbnZlcnRlci5HZXRCeXRlcyhwYXJ0c1syXSk7Ci0gICAgICAgICAgICB2YXIgdmFsdWVCeXRlcyA9IG5ldyBieXRlWzEyXTsKLSAgICAgICAgICAgIGxvd0J5dGVzLkNvcHlUbyh2YWx1ZUJ5dGVzLCAwKTsKLSAgICAgICAgICAgIG1pZGRsZUJ5dGVzLkNvcHlUbyh2YWx1ZUJ5dGVzLCA0KTsKLSAgICAgICAgICAgIGhpZ2hCeXRlcy5Db3B5VG8odmFsdWVCeXRlcywgOCk7Ci0gICAgICAgICAgICB2YXIgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIodmFsdWVCeXRlcyk7Ci0KLSAgICAgICAgICAgIGlmIChzaWduKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJpZ0ludCA9IC1iaWdJbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiAoYmlnSW50LCBzY2FsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8ZGVjaW1hbD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc2NhbGUgPSAoaW50KWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPGludD4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIHVuc2NhbGVkID0gKEJpZ0ludGVnZXIpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8QmlnSW50ZWdlcj4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICByZXR1cm4gQ29udmVydFNjYWxlQW5kVW5zY2FsZWRWYWx1ZShzY2FsZSwgdW5zY2FsZWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZGVjaW1hbCBDb252ZXJ0U2NhbGVBbmRVbnNjYWxlZFZhbHVlKGludCBzY2FsZSwgQmlnSW50ZWdlciB1bnNjYWxlZFZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGRlY2ltYWwpIHVuc2NhbGVkVmFsdWUgKiAoZGVjaW1hbCkgTWF0aC5Qb3coMTAsIC1zY2FsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CaWdJbnRlZ2VyU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQmlnSW50ZWdlclNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZGQyNGUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CaWdJbnRlZ2VyU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLk51bWVyaWNzOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJCaWdJbnRlZ2VyIi8+IHZhbHVlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBCaWdJbnRlZ2VyU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPEJpZ0ludGVnZXI+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQmlnSW50ZWdlclNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgQmlnSW50ZWdlclNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQmlnSW50ZWdlcikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhCaWdJbnRlZ2VyIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlcyA9IHZhbHVlLlRvQnl0ZUFycmF5KCkuUmV2ZXJzZSgpLlRvQXJyYXkoKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhieXRlcy5MZW5ndGgsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKGJ5dGVzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPEJpZ0ludGVnZXI+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IChpbnQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBhd2FpdCBzdHJlYW0uUmVhZEFzeW5jKGxlbmd0aCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcihieXRlcy5SZXZlcnNlKCkuVG9BcnJheSgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0JpbmRpbmdTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CaW5kaW5nU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE2MmM0Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0JpbmRpbmdTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9IkJpbmRpbmciLz4gdmFsdWVzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEJpbmRpbmdTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8QmluZGluZz4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJCaW5kaW5nU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBCaW5kaW5nU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5CaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKEJpbmRpbmcgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLktleSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuVmFsdWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxCaW5kaW5nPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBrZXkgPSAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmcoa2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CdWxrU2V0U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQnVsa1NldFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzMTcyYTUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CdWxrU2V0U2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIHRoZSBHcmFwaEJpbmFyeSB0eXBlIEJ1bGtTZXQgdGhhdCBnZXRzIGNvbnZlcnRlZCB0byA8dHlwZXBhcmFtcmVmIG5hbWU9IlRMaXN0Ii8+LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVExpc3QiPlRoZSB0eXBlIG9mIHRoZSBsaXN0IHRvIGNvbnZlcnQgdGhlIEJ1bGtTZXQgaW50by48L3R5cGVwYXJhbT4KLSAgICBwdWJsaWMgY2xhc3MgQnVsa1NldFNlcmlhbGl6ZXI8VExpc3Q+IDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VExpc3Q+Ci0gICAgICAgIHdoZXJlIFRMaXN0IDogSUxpc3QsIG5ldygpCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQnVsa1NldFNlcmlhbGl6ZXJ7VExpc3R9IiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEJ1bGtTZXRTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkJ1bGtTZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFRMaXN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTeXN0ZW0uTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oIldyaXRpbmcgYSBCdWxrU2V0IGlzIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxUTGlzdD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGVuZ3RoID0gKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBUTGlzdCgpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB2YXIgYnVsayA9IChsb25nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPGxvbmc+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBidWxrOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuQWRkKHZhbHVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CeXRlQnVmZmVyU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxOGM5MjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CeXRlQnVmZmVyU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgCi0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIGJ5dGVbXS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBCeXRlQnVmZmVyU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPGJ5dGVbXT4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJCeXRlQnVmZmVyU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBCeXRlQnVmZmVyU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5CeXRlQnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKGJ5dGVbXSB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuTGVuZ3RoLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyh2YWx1ZSwgMCwgdmFsdWUuTGVuZ3RoLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPGJ5dGVbXT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGVuZ3RoID0gKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgYnl0ZVtsZW5ndGhdOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhidWZmZXIsIDAsIGxlbmd0aCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBidWZmZXI7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9CeXRlQ29kZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0J5dGVDb2RlU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEzMmY5Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0J5dGVDb2RlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgPHNlZSBjcmVmPSJCeXRlY29kZSIvPiBzZXJpYWxpemVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEJ5dGVjb2RlU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPEJ5dGVjb2RlPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkJ5dGVjb2RlU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBCeXRlY29kZVNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQnl0ZWNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoQnl0ZWNvZGUgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgV3JpdGVJbnN0cnVjdGlvbnNBc3luYyh2YWx1ZS5TdGVwSW5zdHJ1Y3Rpb25zLCBzdHJlYW0sIHdyaXRlciwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IFdyaXRlSW5zdHJ1Y3Rpb25zQXN5bmModmFsdWUuU291cmNlSW5zdHJ1Y3Rpb25zLCBzdHJlYW0sIHdyaXRlciwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVJbnN0cnVjdGlvbnNBc3luYyhJUmVhZE9ubHlDb2xsZWN0aW9uPEluc3RydWN0aW9uPiBpbnN0cnVjdGlvbnMsIFN0cmVhbSBzdHJlYW0sCi0gICAgICAgICAgICBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMoaW5zdHJ1Y3Rpb25zLkNvdW50LCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpbnN0cnVjdGlvbiBpbiBpbnN0cnVjdGlvbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKGluc3RydWN0aW9uLk9wZXJhdG9yTmFtZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBhd2FpdCBXcml0ZUFyZ3VtZW50c0FzeW5jKGluc3RydWN0aW9uLkFyZ3VtZW50cywgc3RyZWFtLCB3cml0ZXIsIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgVGFzayBXcml0ZUFyZ3VtZW50c0FzeW5jKG9iamVjdD9bXSBhcmd1bWVudHMsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMoYXJndW1lbnRzLkxlbmd0aCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICBmb3JlYWNoICh2YXIgdmFsdWUgaW4gYXJndW1lbnRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8Qnl0ZWNvZGU+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBCeXRlY29kZSgpOwotCi0gICAgICAgICAgICB2YXIgc3RlcHNMZW5ndGggPSAoaW50KSBhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RlcHNMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuQWRkU3RlcCgKLSAgICAgICAgICAgICAgICAgICAgKHN0cmluZylhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxzdHJpbmc+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgYXdhaXQgUmVhZEFyZ3VtZW50c0FzeW5jKHN0cmVhbSwgcmVhZGVyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHNvdXJjZXNMZW5ndGggPSBhd2FpdCBzdHJlYW0uUmVhZEludEFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZXNMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuQWRkU291cmNlKAotICAgICAgICAgICAgICAgICAgICAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpLAotICAgICAgICAgICAgICAgICAgICBhd2FpdCBSZWFkQXJndW1lbnRzQXN5bmMoc3RyZWFtLCByZWFkZXIsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgVGFzazxvYmplY3Q/W10+IFJlYWRBcmd1bWVudHNBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHZhbHVlc0xlbmd0aCA9Ci0gICAgICAgICAgICAgICAgKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgb2JqZWN0P1t2YWx1ZXNMZW5ndGhdOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXNMZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB2YWx1ZXM7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9DaGFyU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQ2hhclNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YTMxMWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9DaGFyU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgPHNlZSBjcmVmPSJjaGFyIi8+IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgQ2hhclNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxjaGFyPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkNoYXJTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIENoYXJTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkNoYXIpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoY2hhciB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBFbmNvZGluZy5VVEY4LkdldEJ5dGVzKHZhbHVlLlRvU3RyaW5nKCkpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMoYnl0ZXMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8Y2hhcj4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmlyc3RCeXRlID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBieXRlTGVuZ3RoID0gMTsKLSAgICAgICAgICAgIC8vIEEgYnl0ZSB3aXRoIHRoZSBmaXJzdCBieXRlIE9OICgxMDAwMDAwMCkgc2lnbmFscyB0aGF0IG1vcmUgYnl0ZXMgYXJlIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIFVURi04IGNoYXIKLSAgICAgICAgICAgIGlmICgoZmlyc3RCeXRlICYgMHg4MCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgoZmlyc3RCeXRlICYgMHhmMCkgPT0gMHhmMCkKLSAgICAgICAgICAgICAgICB7IC8vIDB4ZjAgPSAxMTExMDAwMAotICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoID0gNDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChmaXJzdEJ5dGUgJiAweGUwKSA9PSAweGUwKQotICAgICAgICAgICAgICAgIHsgLy8xMTEwMDAwMAotICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoID0gMzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChmaXJzdEJ5dGUgJiAweGMwKSA9PSAweGMwKQotICAgICAgICAgICAgICAgIHsgLy8xMTAwMDAwMAotICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoID0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ5dGVbXSBieXRlczsKLSAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoID09IDEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZXMgPSBuZXdbXSB7Zmlyc3RCeXRlfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBieXRlcyA9IG5ldyBieXRlW2J5dGVMZW5ndGhdOwotICAgICAgICAgICAgICAgIGJ5dGVzWzBdID0gZmlyc3RCeXRlOwotICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMoYnl0ZXMsIDEsIGJ5dGVMZW5ndGggLSAxLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gRW5jb2RpbmcuVVRGOC5HZXRDaGFycyhieXRlcylbMF07Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9DbGFzc1NlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0NsYXNzU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlkNjc4Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0NsYXNzU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIHRoZSBHcmFwaEJpbmFyeSB0eXBlIGNsYXNzIHRoYXQgdGFrZXMgPHNlZSBjcmVmPSJHcmVtbGluVHlwZSIvPiBvYmplY3RzIGFzIHRoZWlyIC5ORVQKLSAgICAvLy8gcmVwcmVzZW50YXRpb24uIAotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIENsYXNzU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPEdyZW1saW5UeXBlPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkNsYXNzU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBDbGFzc1NlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQ2xhc3MpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoR3JlbWxpblR5cGUgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLkZxY24sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIFRhc2s8R3JlbWxpblR5cGU+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCJSZWFkaW5nIGEgQ2xhc3MgaXMgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQ3VzdG9tVHlwZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0N1c3RvbVR5cGVTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFhZWFmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvQ3VzdG9tVHlwZVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gVGhlIGludGVyZmFjZSB0byBpbXBsZW1lbnQgZm9yIHNlcmlhbGl6ZXJzIG9mIGN1c3RvbSB0eXBlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDdXN0b21UeXBlU2VyaWFsaXplciA6IElUeXBlU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gR2V0cyB0aGUgY3VzdG9tIHR5cGUgbmFtZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIGFic3RyYWN0IHN0cmluZyBUeXBlTmFtZSB7IGdldDsgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgRGF0YVR5cGUgRGF0YVR5cGUgPT4gRGF0YVR5cGUuQ3VzdG9tOwotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYWJzdHJhY3QgVGFzayBXcml0ZUFzeW5jKG9iamVjdCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIGFic3RyYWN0IFRhc2sgV3JpdGVOdWxsYWJsZVZhbHVlQXN5bmMob2JqZWN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYWJzdHJhY3QgVGFzayBXcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhvYmplY3QgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCBUYXNrPG9iamVjdD8+IFJlYWRBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYWJzdHJhY3QgVGFzazxvYmplY3Q/PiBSZWFkTnVsbGFibGVWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBhYnN0cmFjdCBUYXNrPG9iamVjdD4gUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0RhdGVUaW1lU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvRGF0ZVRpbWVTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmFmM2FlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvRGF0ZVRpbWVTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgc2VyaWFsaXplciBmb3IgdGhlIEdyYXBoQmluYXJ5IHR5cGVzIERhdGUgYW5kIFRpbWVzdGFtcC4gQm90aCBhcmUgcmVwcmVzZW50ZWQgYXMgPHNlZSBjcmVmPSJEYXRlVGltZU9mZnNldCIvPgotICAgIC8vLyBpbiAuTkVULgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIERhdGVUaW1lU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPERhdGVUaW1lT2Zmc2V0PgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciB0aGUgR3JhcGhCaW5hcnkgdHlwZSBEYXRlLCByZXByZXNlbnRlZCBhcyA8c2VlIGNyZWY9IkRhdGVUaW1lT2Zmc2V0Ii8+IGluIC5ORVQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0ZVRpbWVTZXJpYWxpemVyIERhdGVTZXJpYWxpemVyID0gbmV3IERhdGVUaW1lU2VyaWFsaXplcihEYXRhVHlwZS5EYXRlKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIHRoZSBHcmFwaEJpbmFyeSB0eXBlIFRpbWVzdGFtcCwgcmVwcmVzZW50ZWQgYXMgPHNlZSBjcmVmPSJEYXRlVGltZU9mZnNldCIvPiBpbiAuTkVULgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGVUaW1lU2VyaWFsaXplciBUaW1lc3RhbXBTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBEYXRlVGltZVNlcmlhbGl6ZXIoRGF0YVR5cGUuVGltZXN0YW1wKTsKLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRGF0ZVRpbWVTZXJpYWxpemVyKERhdGFUeXBlIGRhdGFUeXBlKSA6IGJhc2UoZGF0YVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoRGF0ZVRpbWVPZmZzZXQgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlTG9uZ0FzeW5jKHZhbHVlLlRvVW5peFRpbWVNaWxsaXNlY29uZHMoKSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxEYXRlVGltZU9mZnNldD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gRGF0ZVRpbWVPZmZzZXQuRnJvbVVuaXhUaW1lTWlsbGlzZWNvbmRzKGF3YWl0IHN0cmVhbS5SZWFkTG9uZ0FzeW5jKGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvRHVyYXRpb25TZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9EdXJhdGlvblNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2M2E4NmEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9EdXJhdGlvblNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBzZXJpYWxpemVyIHRoYXQgc2VyaWFsaXplcyA8c2VlIGNyZWY9IlRpbWVTcGFuIi8+IHZhbHVlcyBhcyBEdXJhdGlvbiBpbiBHcmFwaEJpbmFyeS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBEdXJhdGlvblNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxUaW1lU3Bhbj4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJEdXJhdGlvblNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgRHVyYXRpb25TZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkR1cmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFRpbWVTcGFuIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUxvbmdBc3luYygobG9uZykgdmFsdWUuVG90YWxTZWNvbmRzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmModmFsdWUuTWlsbGlzZWNvbmRzICogMV8wMDBfMDAwLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPFRpbWVTcGFuPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzZWNvbmRzID0gYXdhaXQgc3RyZWFtLlJlYWRMb25nQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBuYW5vc2Vjb25kcyA9IGF3YWl0IHN0cmVhbS5SZWFkSW50QXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgcmV0dXJuIFRpbWVTcGFuLkZyb21TZWNvbmRzKHNlY29uZHMpICsgVGltZVNwYW4uRnJvbU1pbGxpc2Vjb25kcyhuYW5vc2Vjb25kcyAvIDFfMDAwXzAwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9FZGdlU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvRWRnZVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNjk3NzguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9FZGdlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEFuIDxzZWUgY3JlZj0iRWRnZSIvPiBzZXJpYWxpemVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEVkZ2VTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8RWRnZT4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJFZGdlU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBFZGdlU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5FZGdlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKEVkZ2UgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5MYWJlbCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5JblYuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5JblYuTGFiZWwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlLk91dFYuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5PdXRWLkxhYmVsLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgcGFyZW50IHZlcnRleAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMobnVsbCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBmb3IgdGhlIHByb3BlcnRpZXMKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxFZGdlPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBpZCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGxhYmVsID0gKHN0cmluZylhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxzdHJpbmc+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgdmFyIGluViA9IG5ldyBWZXJ0ZXgoYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSksCi0gICAgICAgICAgICAgICAgKHN0cmluZylhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxzdHJpbmc+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSk7Ci0gICAgICAgICAgICB2YXIgb3V0ViA9IG5ldyBWZXJ0ZXgoYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSksCi0gICAgICAgICAgICAgICAgKHN0cmluZylhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxzdHJpbmc+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSk7Ci0KLSAgICAgICAgICAgIC8vIGRpc2NhcmQgcG9zc2libGUgcGFyZW50IHZlcnRleAotICAgICAgICAgICAgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydGllc0FzQXJyYXkgPSBudWxsID09IHByb3BlcnRpZXMgPyBBcnJheS5FbXB0eTxvYmplY3Q+KCkgOiAocHJvcGVydGllcyBhcyBMaXN0PG9iamVjdD4pPy5Ub0FycmF5KCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgRWRnZShpZCwgb3V0ViwgbGFiZWwsIGluViwgcHJvcGVydGllc0FzQXJyYXkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvRW51bVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0VudW1TZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjgxNzI5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvRW51bVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLXVzaW5nIEJhcnJpZXIgPSBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5CYXJyaWVyOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBQcm92aWRlcyBzZXJpYWxpemVycyBmb3IgZW51bSB0eXBlcy4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRW51bVNlcmlhbGl6ZXJzCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iUHJvY2Vzcy5UcmF2ZXJzYWwuQmFycmllciIvPiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRW51bVNlcmlhbGl6ZXI8QmFycmllcj4gQmFycmllclNlcmlhbGl6ZXIgPQotICAgICAgICAgICAgbmV3IEVudW1TZXJpYWxpemVyPEJhcnJpZXI+KERhdGFUeXBlLkJhcnJpZXIsIEJhcnJpZXIuR2V0QnlWYWx1ZSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9IkNhcmRpbmFsaXR5Ii8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxDYXJkaW5hbGl0eT4gQ2FyZGluYWxpdHlTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBFbnVtU2VyaWFsaXplcjxDYXJkaW5hbGl0eT4oRGF0YVR5cGUuQ2FyZGluYWxpdHksIENhcmRpbmFsaXR5LkdldEJ5VmFsdWUpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJDb2x1bW4iLz4gdmFsdWVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVudW1TZXJpYWxpemVyPENvbHVtbj4gQ29sdW1uU2VyaWFsaXplciA9Ci0gICAgICAgICAgICBuZXcgRW51bVNlcmlhbGl6ZXI8Q29sdW1uPihEYXRhVHlwZS5Db2x1bW4sIENvbHVtbi5HZXRCeVZhbHVlKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iRGlyZWN0aW9uIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxEaXJlY3Rpb24+IERpcmVjdGlvblNlcmlhbGl6ZXIgPQotICAgICAgICAgICAgbmV3IEVudW1TZXJpYWxpemVyPERpcmVjdGlvbj4oRGF0YVR5cGUuRGlyZWN0aW9uLCBEaXJlY3Rpb24uR2V0QnlWYWx1ZSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9IkRUIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxEVD4gRFRTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBFbnVtU2VyaWFsaXplcjxEVD4oRGF0YVR5cGUuRFQsIERULkdldEJ5VmFsdWUpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJNZXJnZSIvPiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRW51bVNlcmlhbGl6ZXI8TWVyZ2U+IE1lcmdlU2VyaWFsaXplciA9Ci0gICAgICAgICAgICBuZXcgRW51bVNlcmlhbGl6ZXI8TWVyZ2U+KERhdGFUeXBlLk1lcmdlLCBNZXJnZS5HZXRCeVZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJHVHlwZSIvPiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRW51bVNlcmlhbGl6ZXI8R1R5cGU+IEdUeXBlU2VyaWFsaXplciA9Ci0gICAgICAgICAgICBuZXcgRW51bVNlcmlhbGl6ZXI8R1R5cGU+KERhdGFUeXBlLkdUeXBlLCBHVHlwZS5HZXRCeVZhbHVlKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iT3BlcmF0b3IiLz4gdmFsdWVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVudW1TZXJpYWxpemVyPE9wZXJhdG9yPiBPcGVyYXRvclNlcmlhbGl6ZXIgPQotICAgICAgICAgICAgbmV3IEVudW1TZXJpYWxpemVyPE9wZXJhdG9yPihEYXRhVHlwZS5PcGVyYXRvciwgT3BlcmF0b3IuR2V0QnlWYWx1ZSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9Ik9yZGVyIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxPcmRlcj4gT3JkZXJTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBFbnVtU2VyaWFsaXplcjxPcmRlcj4oRGF0YVR5cGUuT3JkZXIsIE9yZGVyLkdldEJ5VmFsdWUpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJQaWNrIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxQaWNrPiBQaWNrU2VyaWFsaXplciA9Ci0gICAgICAgICAgICBuZXcgRW51bVNlcmlhbGl6ZXI8UGljaz4oRGF0YVR5cGUuUGljaywgUGljay5HZXRCeVZhbHVlKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iUG9wIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxQb3A+IFBvcFNlcmlhbGl6ZXIgPQotICAgICAgICAgICAgbmV3IEVudW1TZXJpYWxpemVyPFBvcD4oRGF0YVR5cGUuUG9wLCBQb3AuR2V0QnlWYWx1ZSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9IlNjb3BlIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxTY29wZT4gU2NvcGVTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBFbnVtU2VyaWFsaXplcjxTY29wZT4oRGF0YVR5cGUuU2NvcGUsIFNjb3BlLkdldEJ5VmFsdWUpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJUIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxUPiBUU2VyaWFsaXplciA9Ci0gICAgICAgICAgICBuZXcgRW51bVNlcmlhbGl6ZXI8VD4oRGF0YVR5cGUuVCwgVC5HZXRCeVZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEdlbmVyYWxpemVkIHNlcmlhbGl6ZXIgZm9yIGVudW0gdHlwZXMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJURW51bSI+VGhlIHR5cGUgb2YgdGhlIGVudW0gdG8gc2VyaWFsaXplLjwvdHlwZXBhcmFtPgotICAgIHB1YmxpYyBjbGFzcyBFbnVtU2VyaWFsaXplcjxURW51bT4gOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxURW51bT4KLSAgICAgICAgd2hlcmUgVEVudW0gOiBFbnVtV3JhcHBlcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBGdW5jPHN0cmluZywgVEVudW0+IF9yZWFkRnVuYzsKLQotICAgICAgICBpbnRlcm5hbCBFbnVtU2VyaWFsaXplcihEYXRhVHlwZSBkYXRhVHlwZSwgRnVuYzxzdHJpbmcsIFRFbnVtPiByZWFkRnVuYykgOiBiYXNlKGRhdGFUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBfcmVhZEZ1bmMgPSByZWFkRnVuYzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoVEVudW0gdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuRW51bVZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VEVudW0+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbilgIGluc3RlYWQsCi0gICAgICAgICAgICAvLyBidXQgaXQncyB0aGUgc2FtZSBpbiBvdGhlciBHTFZzIGFuZCBjaGFuZ2luZyB0aGlzIHdvdWxkIGJlIGEgYnJlYWtpbmcgY2hhbmdlIGZvciB0aGUgR3JhcGhCaW5hcnkgZm9ybWF0LgotICAgICAgICAgICAgdmFyIGVudW1WYWx1ZSA9IChzdHJpbmc/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChlbnVtVmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiUmVhZCBudWxsIGFzIGEgdmFsdWUgZm9yIHtEYXRhVHlwZX0iKTsKLSAgICAgICAgICAgIHJldHVybiBfcmVhZEZ1bmMuSW52b2tlKGVudW1WYWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9HcmVtbGluVHlwZS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvR3JlbWxpblR5cGUuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZmFhMzEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9HcmVtbGluVHlwZS5jcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBSZXByZXNlbnRzIHRoZSBHcmFwaEJpbmFyeSB0eXBlIENsYXNzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlcmlhbGl6ZSBhIGNsYXNzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyZW1saW5UeXBlCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBHZXRzIHRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3MgbmFtZSB0aGF0IGlkZW50aWZpZXMgdGhlIGNsYXNzIGluIEphdmEuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdHJpbmcgRnFjbiB7IGdldDsgfQotCi0gICAgICAgIHByaXZhdGUgR3JlbWxpblR5cGUoc3RyaW5nIGZxY24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZxY24gPSBmcWNuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIEdyZW1saW5UeXBlIGZvciB0aGlzIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIChmcWNuKS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBHcmVtbGluVHlwZSBGcm9tRnFjbihzdHJpbmcgZnFjbikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluVHlwZShmcWNuKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0xhbWJkYVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0xhbWJkYVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNjAwZDUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9MYW1iZGFTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBzZXJpYWxpemVyIGZvciBsYW1iZGFzLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIExhbWJkYVNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxJTGFtYmRhPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkxhbWJkYVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgTGFtYmRhU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5MYW1iZGEpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoSUxhbWJkYSB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuTGFuZ3VhZ2UsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5MYW1iZGFFeHByZXNzaW9uLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuQXJndW1lbnRzLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8SUxhbWJkYT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGFuZ3VhZ2UgPSAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBkaXNjYXJkIHRoZSBhcmd1bWVudHMKLSAgICAgICAgICAgIGF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPGludD4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0Jhc2VkTGFtYmRhKGV4cHJlc3Npb24sIGxhbmd1YWdlKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0xpc3RTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9MaXN0U2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE5NzhlNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL0xpc3RTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBnZW5lcmljIGxpc3Qgc2VyaWFsaXplci4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRNZW1iZXIiPlRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0LjwvdHlwZXBhcmFtPgotICAgIHB1YmxpYyBjbGFzcyBMaXN0U2VyaWFsaXplcjxUTWVtYmVyPiA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPElMaXN0PFRNZW1iZXI/Pj4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJMaXN0U2VyaWFsaXplcntUTGlzdH0iIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgTGlzdFNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuTGlzdCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhJTGlzdDxUTWVtYmVyPz4gdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLkNvdW50LCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIHZhbHVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGl0ZW0sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxJTGlzdDxUTWVtYmVyPz4+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IChpbnQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IExpc3Q8VE1lbWJlcj8+KGxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdC5BZGQoKFRNZW1iZXI/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9NYXBTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9NYXBTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjUyZTU3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvTWFwU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgZ2VuZXJpYyBkaWN0aW9uYXJ5IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJUS2V5Ij5UaGUgdHlwZSBvZiBrZXlzIGluIHRoZSBkaWN0aW9uYXJ5LjwvdHlwZXBhcmFtPgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRWYWx1ZSI+VGhlIHR5cGUgb2YgdmFsdWVzIGluIHRoZSBkaWN0aW9uYXJ5LjwvdHlwZXBhcmFtPgotICAgIHB1YmxpYyBjbGFzcyBNYXBTZXJpYWxpemVyPFRLZXksIFRWYWx1ZT4gOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU/Pj4gd2hlcmUgVEtleSA6IG5vdG51bGwKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJNYXBTZXJpYWxpemVye1RLZXksIFRWYWx1ZX0iIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgTWFwU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5NYXApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoSURpY3Rpb25hcnk8VEtleSwgVFZhbHVlPz4gdmFsdWUsIFN0cmVhbSBzdHJlYW0sCi0gICAgICAgICAgICBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLkNvdW50LCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBrZXkgaW4gdmFsdWUuS2V5cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhrZXksIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZVtrZXldLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8SURpY3Rpb25hcnk8VEtleSwgVFZhbHVlPz4+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGF3YWl0IHN0cmVhbS5SZWFkSW50QXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU/PihsZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBrZXkgPSAoVEtleT8pIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJSZWFkIG51bGwgYXMgdGhlIGtleSBmb3IgYSBkaWN0aW9uYXJ5LiIpOwotICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IChUVmFsdWU/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuQWRkKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9PZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZWE3YjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9PZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBzZXJpYWxpemVyIGZvciB0aGUgR3JhcGhCaW5hcnkgdHlwZSBPZmZzZXREYXRlVGltZSwgcmVwcmVzZW50ZWQgYXMgPHNlZSBjcmVmPSJEYXRlVGltZU9mZnNldCIvPgotICAgIC8vLyBpbiAuTkVULgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIE9mZnNldERhdGVUaW1lU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPERhdGVUaW1lT2Zmc2V0PgotICAgIHsKLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJPZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLk9mZnNldERhdGVUaW1lKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKERhdGVUaW1lT2Zmc2V0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUludEFzeW5jKHZhbHVlLlllYXIsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoQ29udmVydC5Ub0J5dGUodmFsdWUuTW9udGgpLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKENvbnZlcnQuVG9CeXRlKHZhbHVlLkRheSksIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgbmFub3NlY29uZCBwcmVjaXNpb25zIHdlcmUgYWRkZWQgYWZ0ZXIgLk5FVCA3Ci0gICAgICAgICAgICAvLyBHZXQgdGhlIHRpbWUgb2YgZGF5IGFzIFRpbWVTcGFuCi0gICAgICAgICAgICB2YXIgdGltZU9mRGF5ID0gdmFsdWUuVGltZU9mRGF5OyAKLSAgICAgICAgICAgIC8vIENvbnZlcnQgdGlja3MgdG8gbmFub3NlY29uZHMgKDEgdGljayA9IDEwMCBuYW5vc2Vjb25kcykKLSAgICAgICAgICAgIHZhciBucyA9IHRpbWVPZkRheS5UaWNrcyAqIDEwMDsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUxvbmdBc3luYyhDb252ZXJ0LlRvSW50NjQobnMpLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdmFsdWUuT2Zmc2V0OwotICAgICAgICAgICAgdmFyIG9zID0gb2Zmc2V0LkhvdXJzICogNjAgKiA2MCArIG9mZnNldC5NaW51dGVzICogNjAgKyBvZmZzZXQuU2Vjb25kczsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUludEFzeW5jKG9zLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPERhdGVUaW1lT2Zmc2V0PiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB5ZWFyID0gYXdhaXQgc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIG1vbnRoID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBkYXkgPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIG5zID0gYXdhaXQgc3RyZWFtLlJlYWRMb25nQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciB0aW1lRGVsdGEgPSBUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKG5zIC8gMWU2KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIG9zID0gYXdhaXQgc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIG9mZnNldCA9IFRpbWVTcGFuLkZyb21TZWNvbmRzKG9zKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZU9mZnNldCh5ZWFyLCBDb252ZXJ0LlRvSW50MzIobW9udGgpLCBDb252ZXJ0LlRvSW50MzIoZGF5KSwgMCwgMCwgMCwgb2Zmc2V0KS5BZGQodGltZURlbHRhKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1BTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9QU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkN2Q0OS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1BTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9uczsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkRpYWdub3N0aWNzLkNvZGVBbmFseXNpczsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgPHNlZSBjcmVmPSJQIi8+IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgUFNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxQPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IlBTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFBTZXJpYWxpemVyKERhdGFUeXBlIHR5cGVPZlApIDogYmFzZSh0eXBlT2ZQKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFAgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgSUNvbGxlY3Rpb24gYXJncyA9IHZhbHVlLlZhbHVlIGlzIElDb2xsZWN0aW9uID8gdmFsdWUuVmFsdWUgOiBuZXcgTGlzdDxvYmplY3Q+IHt2YWx1ZS5WYWx1ZX07Ci0KLSAgICAgICAgICAgIHZhciBhcmdzTGVuZ3RoID0gdmFsdWUuT3RoZXIgPT0gbnVsbCA/IGFyZ3MuQ291bnQgOiBhcmdzLkNvdW50ICsgMTsKLQotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLk9wZXJhdG9yTmFtZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKGFyZ3NMZW5ndGgsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgZm9yZWFjaCAodmFyIGFyZyBpbiBhcmdzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGFyZywgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodmFsdWUuT3RoZXIgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5PdGhlciwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPFA+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG9wZXJhdG9yTmFtZSA9IChzdHJpbmcpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8c3RyaW5nPihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgYXJnc0xlbmd0aCA9Ci0gICAgICAgICAgICAgICAgKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgdmFyIGFyZ3MgPSBuZXcgb2JqZWN0P1thcmdzTGVuZ3RoXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc0xlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFyZ3NbaV0gPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG9wZXJhdG9yTmFtZSA9PSAiYW5kIiB8fCBvcGVyYXRvck5hbWUgPT0gIm9yIikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFAob3BlcmF0b3JOYW1lLCBTYWZlbHlDYXN0VG9QKGFyZ3NbMF0pLCBTYWZlbHlDYXN0VG9QKGFyZ3NbMV0pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG9wZXJhdG9yTmFtZSA9PSAibm90IikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFAob3BlcmF0b3JOYW1lLCBTYWZlbHlDYXN0VG9QKGFyZ3NbMF0pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFyZ3NMZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoRGF0YVR5cGUgPT0gRGF0YVR5cGUuVGV4dFApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRQKG9wZXJhdG9yTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc/KSBhcmdzWzBdID8/IHRocm93IG5ldyBJT0V4Y2VwdGlvbigiUmVhZCBudWxsIGJ1dCBleHBlY3RlZCBhIHN0cmluZyIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQKG9wZXJhdG9yTmFtZSwgYXJnc1swXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFAob3BlcmF0b3JOYW1lLCBhcmdzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgUCBTYWZlbHlDYXN0VG9QKFtOb3ROdWxsXSBvYmplY3Q/IHBPYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwT2JqZWN0ID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiUmVhZCBudWxsIGJ1dCBleHBlY3RlZCBQIik7Ci0gICAgICAgICAgICByZXR1cm4gKFApIHBPYmplY3Q7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9QYXRoU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvUGF0aFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwOGQxNTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9QYXRoU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgPHNlZSBjcmVmPSJQYXRoIi8+IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgUGF0aFNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxQYXRoPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IlBhdGhTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFBhdGhTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlBhdGgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoUGF0aCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5MYWJlbHMsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlLk9iamVjdHMsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxQYXRoPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZWFkTGFiZWxPYmplY3RzID0KLSAgICAgICAgICAgICAgICAoTGlzdDxvYmplY3Q+Pylhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChyZWFkTGFiZWxPYmplY3RzID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiUmVhZCBudWxsLCBidXQgZXhwZWN0ZWQgYSBsaXN0IG9mIGxhYmVscyIpOwotICAgICAgICAgICAgdmFyIGxhYmVscyA9IG5ldyBMaXN0PElTZXQ8c3RyaW5nPj4oKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBsYWJlbE9iamVjdExpc3QgaW4gcmVhZExhYmVsT2JqZWN0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgbGFiZWxTZXQgPSBuZXcgSGFzaFNldDxzdHJpbmc+KCk7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGxhYmVsT2JqIGluIChIYXNoU2V0PG9iamVjdD4pIGxhYmVsT2JqZWN0TGlzdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsU2V0LkFkZCgoc3RyaW5nKSBsYWJlbE9iaik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxhYmVscy5BZGQobGFiZWxTZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgb2JqZWN0cyA9IChMaXN0PG9iamVjdD8+PykgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBpZiAob2JqZWN0cyA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCwgYnV0IGV4cGVjdGVkIGEgbGlzdCBvZiBvYmplY3RzIik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFBhdGgobGFiZWxzLCBvYmplY3RzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1Byb3BlcnR5U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvUHJvcGVydHlTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTg5OTJhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvUHJvcGVydHlTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgPHNlZSBjcmVmPSJQcm9wZXJ0eSIvPiBzZXJpYWxpemVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIAotICAgICAgICBQcm9wZXJ0eVNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxQcm9wZXJ0eT4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJQcm9wZXJ0eVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgUHJvcGVydHlTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlByb3BlcnR5KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFByb3BlcnR5IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5LZXksIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlLlZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGZvciB0aGUgcGFyZW50IGVsZW1lbnQKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxQcm9wZXJ0eT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcCA9IG5ldyBQcm9wZXJ0eSgKLSAgICAgICAgICAgICAgICAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpLAotICAgICAgICAgICAgICAgIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpKTsKLQotICAgICAgICAgICAgLy8gZGlzY2FyZCBwYXJlbnQgZWxlbWVudAotICAgICAgICAgICAgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2V0U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2V0U2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q0NjMzOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1NldFNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgZ2VuZXJpYyBzZXQgc2VyaWFsaXplci4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRTZXQiPlRoZSB0eXBlIG9mIHRoZSBzZXQgdG8gc2VyaWFsaXplLjwvdHlwZXBhcmFtPgotICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRNZW1iZXIiPlRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBzZXQuPC90eXBlcGFyYW0+Ci0gICAgcHVibGljIGNsYXNzIFNldFNlcmlhbGl6ZXI8VFNldCwgVE1lbWJlcj4gOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxUU2V0PgotICAgICAgICB3aGVyZSBUU2V0IDogSVNldDxUTWVtYmVyPz4sIG5ldygpCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iU2V0U2VyaWFsaXplcntUU2V0LFRNZW1iZXJ9IiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFNldFNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuU2V0KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFRTZXQgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGVudW1lcmFibGUgPSAoSUVudW1lcmFibGUpIHZhbHVlOwotICAgICAgICAgICAgdmFyIGxpc3QgPSBlbnVtZXJhYmxlLkNhc3Q8b2JqZWN0PigpLlRvTGlzdCgpOwotCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMobGlzdC5Db3VudCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBsaXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGl0ZW0sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxUU2V0PiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBsZW5ndGggPSAoaW50KWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPGludD4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBUU2V0KCk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdC5BZGQoKFRNZW1iZXI/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TaW1wbGVUeXBlU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2ltcGxlVHlwZVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MTRiMmIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TaW1wbGVUeXBlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQmFzZSBjbGFzcyBmb3Igc2VyaWFsaXphdGlvbiBvZiB0eXBlcyB0aGF0IGRvbid0IGNvbnRhaW4gdHlwZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbmx5IHt0eXBlX2NvZGV9LAotICAgIC8vLyB7dmFsdWVfZmxhZ30gYW5kIHt2YWx1ZX0uCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJUIj5UaGUgc3VwcG9ydGVkIHR5cGUuPC90eXBlcGFyYW0+Ci0gICAgcHVibGljIGFic3RyYWN0IGNsYXNzIFNpbXBsZVR5cGVTZXJpYWxpemVyPFQ+IDogSVR5cGVTZXJpYWxpemVyCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iU2ltcGxlVHlwZVNlcmlhbGl6ZXJ7VH0iIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwcm90ZWN0ZWQgU2ltcGxlVHlwZVNlcmlhbGl6ZXIoRGF0YVR5cGUgZGF0YVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIERhdGFUeXBlID0gZGF0YVR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIERhdGFUeXBlIERhdGFUeXBlIHsgZ2V0OyB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlQXN5bmMob2JqZWN0PyB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCBXcml0ZU51bGxhYmxlVmFsdWVBc3luYygoVD8pIHZhbHVlLCBzdHJlYW0sIHdyaXRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBXcml0ZU51bGxhYmxlVmFsdWVBc3luYyhvYmplY3Q/IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZVZhbHVlRmxhZ051bGxBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVWYWx1ZUZsYWdOb25lQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICBhd2FpdCBXcml0ZVZhbHVlQXN5bmMoKFQpIHZhbHVlLCBzdHJlYW0sIHdyaXRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKG9iamVjdCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCBXcml0ZVZhbHVlQXN5bmMoKFQpIHZhbHVlLCBzdHJlYW0sIHdyaXRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFdyaXRlcyBhIG5vbi1udWxsYWJsZSB2YWx1ZSBpbnRvIGEgc3RyZWFtLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ3cml0ZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVdyaXRlciIvPi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPkEgdGFzayB0aGF0IHJlcHJlc2VudHMgdGhlIGFzeW5jaHJvbm91cyB3cml0ZSBvcGVyYXRpb24uPC9yZXR1cm5zPgotICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgVGFzayBXcml0ZVZhbHVlQXN5bmMoVCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8b2JqZWN0Pz4gUmVhZEFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFJlYWROdWxsYWJsZVZhbHVlQXN5bmMoc3RyZWFtLCByZWFkZXIsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8b2JqZWN0Pz4gUmVhZE51bGxhYmxlVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB2YWx1ZUZsYWcgPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgaWYgKCh2YWx1ZUZsYWcgJiAxKSA9PSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gYXdhaXQgUmVhZFZhbHVlQXN5bmMoc3RyZWFtLCByZWFkZXIsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q+IFJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGF3YWl0IFJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgcmVhZGVyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpKSE7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBSZWFkcyBhIG5vbi1udWxsYWJsZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgZm9ybWF0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIEdyYXBoQmluYXJ5IGRhdGEgdG8gcGFyc2UuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWFkZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVJlYWRlciIvPi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIHZhbHVlLjwvcmV0dXJucz4KLSAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFRhc2s8VD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TaW5nbGVUeXBlU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2luZ2xlVHlwZVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzODk0ZmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TaW5nbGVUeXBlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gUHJvdmlkZXMgc2VyaWFsaXplcnMgZm9yIHR5cGVzIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgc2luZ2xlIHZhbHVlIGFuZCB0aGF0IGNhbiBiZSByZWFkIGFuZCB3cml0ZSBpbiBhCi0gICAgLy8vIHNpbmdsZSBvcGVyYXRpb24uCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNpbmdsZVR5cGVTZXJpYWxpemVycwotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9ImludCIvPiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8aW50PiBJbnRTZXJpYWxpemVyID0gbmV3IFNpbmdsZVR5cGVTZXJpYWxpemVyPGludD4oRGF0YVR5cGUuSW50LAotICAgICAgICAgICAgKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uV3JpdGVJbnRBc3luYyh2YWx1ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLAotICAgICAgICAgICAgKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5SZWFkSW50QXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0ibG9uZyIvPiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8bG9uZz4gTG9uZ1NlcmlhbGl6ZXIgPSBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8bG9uZz4oRGF0YVR5cGUuTG9uZywKLSAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlTG9uZ0FzeW5jKHZhbHVlLCBjYW5jZWxsYXRpb25Ub2tlbiksCi0gICAgICAgICAgICAoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLlJlYWRMb25nQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iZG91YmxlIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTaW5nbGVUeXBlU2VyaWFsaXplcjxkb3VibGU+IERvdWJsZVNlcmlhbGl6ZXIgPQotICAgICAgICAgICAgbmV3IFNpbmdsZVR5cGVTZXJpYWxpemVyPGRvdWJsZT4oRGF0YVR5cGUuRG91YmxlLAotICAgICAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlRG91YmxlQXN5bmModmFsdWUsIGNhbmNlbGxhdGlvblRva2VuKSwKLSAgICAgICAgICAgICAgICAoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLlJlYWREb3VibGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikpOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJmbG9hdCIvPiB2YWx1ZXMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8ZmxvYXQ+IEZsb2F0U2VyaWFsaXplciA9Ci0gICAgICAgICAgICBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8ZmxvYXQ+KERhdGFUeXBlLkZsb2F0LAotICAgICAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlRmxvYXRBc3luYyh2YWx1ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLAotICAgICAgICAgICAgICAgIChzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uUmVhZEZsb2F0QXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pKTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0ic2hvcnQiLz4gdmFsdWVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNpbmdsZVR5cGVTZXJpYWxpemVyPHNob3J0PiBTaG9ydFNlcmlhbGl6ZXIgPQotICAgICAgICAgICAgbmV3IFNpbmdsZVR5cGVTZXJpYWxpemVyPHNob3J0PihEYXRhVHlwZS5TaG9ydCwKLSAgICAgICAgICAgICAgICAodmFsdWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5Xcml0ZVNob3J0QXN5bmModmFsdWUsIGNhbmNlbGxhdGlvblRva2VuKSwKLSAgICAgICAgICAgICAgICAoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLlJlYWRTaG9ydEFzeW5jKGNhbmNlbGxhdGlvblRva2VuKSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9ImJvb2wiLz4gdmFsdWVzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNpbmdsZVR5cGVTZXJpYWxpemVyPGJvb2w+IEJvb2xlYW5TZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBTaW5nbGVUeXBlU2VyaWFsaXplcjxib29sPihEYXRhVHlwZS5Cb29sZWFuLAotICAgICAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlQm9vbEFzeW5jKHZhbHVlLCBjYW5jZWxsYXRpb25Ub2tlbiksCi0gICAgICAgICAgICAgICAgKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5SZWFkQm9vbEFzeW5jKGNhbmNlbGxhdGlvblRva2VuKSk7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9InNieXRlIi8+IHZhbHVlcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTaW5nbGVUeXBlU2VyaWFsaXplcjxzYnl0ZT4gQnl0ZVNlcmlhbGl6ZXIgPSBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8c2J5dGU+KERhdGFUeXBlLkJ5dGUsCi0gICAgICAgICAgICAodmFsdWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5Xcml0ZVNCeXRlQXN5bmModmFsdWUsIGNhbmNlbGxhdGlvblRva2VuKSwKLSAgICAgICAgICAgIChzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uUmVhZFNCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pKTsKLSAgICB9Ci0gICAgCi0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBSZXByZXNlbnRzIGEgc2VyaWFsaXplciBmb3IgdHlwZXMgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBzaW5nbGUgdmFsdWUgYW5kIHRoYXQgY2FuIGJlIHJlYWQgYW5kIHdyaXRlIGluIGEKLSAgICAvLy8gc2luZ2xlIG9wZXJhdGlvbi4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBTaW5nbGVUeXBlU2VyaWFsaXplcjxUPiA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPFQ+Ci0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEZ1bmM8VCwgU3RyZWFtLCBDYW5jZWxsYXRpb25Ub2tlbiwgVGFzaz4gX3dyaXRlRnVuYzsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBGdW5jPFN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4sIFRhc2s8VD4+IF9yZWFkRnVuYzsKLQotICAgICAgICBpbnRlcm5hbCBTaW5nbGVUeXBlU2VyaWFsaXplcihEYXRhVHlwZSBkYXRhVHlwZSwgRnVuYzxULCBTdHJlYW0sIENhbmNlbGxhdGlvblRva2VuLCBUYXNrPiB3cml0ZUZ1bmMsCi0gICAgICAgICAgICBGdW5jPFN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4sIFRhc2s8VD4+IHJlYWRGdW5jKQotICAgICAgICAgICAgOiBiYXNlKGRhdGFUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBfd3JpdGVGdW5jID0gd3JpdGVGdW5jOwotICAgICAgICAgICAgX3JlYWRGdW5jID0gcmVhZEZ1bmM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFQgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgX3dyaXRlRnVuYy5JbnZva2UodmFsdWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxUPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVhZEZ1bmMuSW52b2tlKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1N0cmluZ1NlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1N0cmluZ1NlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYjQzODMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TdHJpbmdTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRleHQ7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSA8c2VlIGNyZWY9InN0cmluZyIvPiBzZXJpYWxpemVyLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIFN0cmluZ1NlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxzdHJpbmc+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iU3RyaW5nU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBTdHJpbmdTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlN0cmluZykKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhzdHJpbmcgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVzID0gRW5jb2RpbmcuVVRGOC5HZXRCeXRlcyh2YWx1ZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMoYnl0ZXMuTGVuZ3RoLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhieXRlcywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxzdHJpbmc+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGxlbmd0aCA9IChpbnQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVtsZW5ndGhdOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhieXRlcywgMCwgbGVuZ3RoLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuIEVuY29kaW5nLlVURjguR2V0U3RyaW5nKGJ5dGVzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1RyYXZlcnNhbFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1RyYXZlcnNhbFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhMzc0YjQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9UcmF2ZXJzYWxTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSB0cmF2ZXJzYWwgc2VyaWFsaXplci4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBUcmF2ZXJzYWxTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8SVRyYXZlcnNhbD4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJUcmF2ZXJzYWxTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFRyYXZlcnNhbFNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQnl0ZWNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoSVRyYXZlcnNhbCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuQnl0ZWNvZGUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgVGFzazxJVHJhdmVyc2FsPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigiUmVhZGluZyBhIHRyYXZlcnNhbCBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1RyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1ZWViYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1RyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3k7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnkuVHlwZXMKLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEEgdHJhdmVyc2FsIHN0cmF0ZWd5IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8QWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneT4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJUcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlRyYXZlcnNhbFN0cmF0ZWd5KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3kgdmFsdWUsIFN0cmVhbSBzdHJlYW0sCi0gICAgICAgICAgICBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKEdyZW1saW5UeXBlLkZyb21GcWNuKHZhbHVlLkZxY24pLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuQ29uZmlndXJhdGlvbiwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBUYXNrPEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCJSZWFkaW5nIGEgVHJhdmVyc2FsU3RyYXRlZ3kgaXMgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVHJhdmVyc2VyU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVHJhdmVyc2VyU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRiNTcyNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1RyYXZlcnNlclNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIDxzZWUgY3JlZj0iVHJhdmVyc2VyIi8+IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgVHJhdmVyc2VyU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPFRyYXZlcnNlcj4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJUcmF2ZXJzZXJTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFRyYXZlcnNlclNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuVHJhdmVyc2VyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFRyYXZlcnNlciB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuQnVsaywgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuT2JqZWN0LCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VHJhdmVyc2VyPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBidWxrID0gKGxvbmcpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8bG9uZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIHYgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgVHJhdmVyc2VyKHYsIGJ1bGspOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVHlwZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1R5cGVTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjE0ZDc0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVHlwZVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlN0cmF0ZWd5OwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIC5ORVQgdHlwZXMgcmVwcmVzZW50ZWQgYXMgQ2xhc3MgaW4gR3JhcGhCaW5hcnkuIEN1cnJlbnRseSBvbmx5Ci0gICAgLy8vIDxzZWUgY3JlZj0iQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneSIvPiB0eXBlcyBhcmUgc3VwcG9ydGVkLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIFR5cGVTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VHlwZT4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJUeXBlU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBUeXBlU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5DbGFzcykKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhUeXBlIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YoQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneSkuSXNBc3NpZ25hYmxlRnJvbSh2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIHN0cmF0ZWd5SW5zdGFuY2UgPSAoQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneT8pQWN0aXZhdG9yLkNyZWF0ZUluc3RhbmNlKHZhbHVlKSA/PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQiQ2Fubm90IHdyaXRlIHRoZSBzdHJhdGVneSB7dmFsdWV9IGJlY2F1c2UgYW4gaW5zdGFuY2Ugb2YgdGhhdCBzdHJhdGVneSBjb3VsZCBub3QgYmUgY3JlYXRlZCIpOwotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhzdHJhdGVneUluc3RhbmNlLkZxY24sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJDdXJyZW50bHksIHdyaXRpbmcgb2YgVHlwZXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRyYXZlcnNhbCBzdHJhdGVnaWVzLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBUYXNrPFR5cGU+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCJSZWFkaW5nIGEgVHlwZSBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9VdWlkU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVXVpZFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZGU4YWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9VdWlkU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSBzZXJpYWxpemVyIHRoYXQgc2VyaWFsaXplcyA8c2VlIGNyZWY9Ikd1aWQiLz4gdmFsdWVzIGFzIFV1aWQgaW4gR3JhcGhCaW5hcnkuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgVXVpZFNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxHdWlkPgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IlV1aWRTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFV1aWRTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlV1aWQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoR3VpZCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSB2YWx1ZS5Ub0J5dGVBcnJheSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBmaXJzdCA0IGJ5dGVzIGluIHJldmVyc2Ugb3JkZXI6Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbM10sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMl0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMV0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMF0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIDIgYnl0ZXMgaW4gcmV2ZXJzZSBvcmRlcjoKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1s1XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1s0XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gMyBieXRlcyBpbiByZXZlcnNlIG9yZGVyOgotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzddLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzZdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAzIGJ5dGVzOgotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzhdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzldLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBsYXN0IDYgYnl0ZXM6Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMTBdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzExXSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1sxMl0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMTNdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzE0XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1sxNV0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8R3VpZD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVsxNl07Ci0KLSAgICAgICAgICAgIC8vIGZpcnN0IDQgYnl0ZXMgaW4gcmV2ZXJzZSBvcmRlcjoKLSAgICAgICAgICAgIGJ5dGVzWzNdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJ5dGVzWzJdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJ5dGVzWzFdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJ5dGVzWzBdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gMiBieXRlcyBpbiByZXZlcnNlIG9yZGVyOgotICAgICAgICAgICAgYnl0ZXNbNV0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYnl0ZXNbNF0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAyIGJ5dGVzIGluIHJldmVyc2Ugb3JkZXI6Ci0gICAgICAgICAgICBieXRlc1s3XSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBieXRlc1s2XSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIDIgYnl0ZXM6Ci0gICAgICAgICAgICBieXRlc1s4XSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBieXRlc1s5XSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGxhc3QgNiBieXRlczoKLSAgICAgICAgICAgIGJ5dGVzWzEwXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBieXRlc1sxMV0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYnl0ZXNbMTJdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGJ5dGVzWzEzXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBieXRlc1sxNF0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYnl0ZXNbMTVdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG5ldyBHdWlkKGJ5dGVzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzU2NjYyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcwotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gQSA8c2VlIGNyZWY9IlZlcnRleFByb3BlcnR5Ii8+IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VmVydGV4UHJvcGVydHk+Ci0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iVmVydGV4UHJvcGVydHlTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFZlcnRleFByb3BlcnR5U2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5WZXJ0ZXhQcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhWZXJ0ZXhQcm9wZXJ0eSB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5JZCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLkxhYmVsLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5WYWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBmb3IgdGhlIHBhcmVudCB2ZXJ0ZXgKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIgZm9yIHByb3BlcnRpZXMKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxWZXJ0ZXhQcm9wZXJ0eT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaWQgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBsYWJlbCA9IChzdHJpbmcpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8c3RyaW5nPihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgLy8gZGlzY2FyZCB0aGUgcGFyZW50IHZlcnRleAotICAgICAgICAgICAgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydGllc0FzQXJyYXkgPSBudWxsID09IHByb3BlcnRpZXMgPyBBcnJheS5FbXB0eTxvYmplY3Q+KCkgOiAocHJvcGVydGllcyBhcyBMaXN0PG9iamVjdD4pPy5Ub0FycmF5KCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgVmVydGV4UHJvcGVydHkoaWQsIGxhYmVsLCB2YWx1ZSwgbnVsbCwgcHJvcGVydGllc0FzQXJyYXkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVmVydGV4U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvVmVydGV4U2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzMjBiYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1ZlcnRleFNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBBIDxzZWUgY3JlZj0iVmVydGV4Ii8+IHNlcmlhbGl6ZXIuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgY2xhc3MgVmVydGV4U2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPFZlcnRleD4KLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJWZXJ0ZXhTZXJpYWxpemVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIFZlcnRleFNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuVmVydGV4KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFZlcnRleCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5JZCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLkxhYmVsLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhudWxsLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VmVydGV4PiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBpZCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGxhYmVsID0gKHN0cmluZylhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxzdHJpbmc+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzQXNBcnJheSA9IG51bGwgPT0gcHJvcGVydGllcyA/IEFycmF5LkVtcHR5PG9iamVjdD4oKSA6IChwcm9wZXJ0aWVzIGFzIExpc3Q8b2JqZWN0Pik/LlRvQXJyYXkoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXgoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzQXNBcnJheSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvRGF0YVR5cGUuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9EYXRhVHlwZS5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDkwYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvRGF0YVR5cGUuY3MKQEAgLTAsMCArMSwxNDMgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUmVwcmVzZW50cyBhIEdyYXBoQmluYXJ5IDQuMCBkYXRhIHR5cGUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgY2xhc3MgRGF0YVR5cGUgOiBJRXF1YXRhYmxlPERhdGFUeXBlPgorICAgIHsKKyNwcmFnbWEgd2FybmluZyBkaXNhYmxlIDE1OTEKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBJbnQgPSBuZXcgRGF0YVR5cGUoMHgwMSk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTG9uZyA9IG5ldyBEYXRhVHlwZSgweDAyKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBTdHJpbmcgPSBuZXcgRGF0YVR5cGUoMHgwMyk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgRGF0ZVRpbWUgPSBuZXcgRGF0YVR5cGUoMHgwNCk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgRG91YmxlID0gbmV3IERhdGFUeXBlKDB4MDcpOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEZsb2F0ID0gbmV3IERhdGFUeXBlKDB4MDgpOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIExpc3QgPSBuZXcgRGF0YVR5cGUoMHgwOSk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTWFwID0gbmV3IERhdGFUeXBlKDB4MEEpOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFNldCA9IG5ldyBEYXRhVHlwZSgweDBCKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBVdWlkID0gbmV3IERhdGFUeXBlKDB4MEMpOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEVkZ2UgPSBuZXcgRGF0YVR5cGUoMHgwRCk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgUGF0aCA9IG5ldyBEYXRhVHlwZSgweDBFKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBQcm9wZXJ0eSA9IG5ldyBEYXRhVHlwZSgweDBGKTsKKyAgICAgICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZAorICAgICAgICAvLyBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEdyYXBoID0gbmV3IERhdGFUeXBlKDB4MTApOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFZlcnRleCA9IG5ldyBEYXRhVHlwZSgweDExKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBWZXJ0ZXhQcm9wZXJ0eSA9IG5ldyBEYXRhVHlwZSgweDEyKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBEaXJlY3Rpb24gPSBuZXcgRGF0YVR5cGUoMHgxOCk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgVCA9IG5ldyBEYXRhVHlwZSgweDIwKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBCaWdEZWNpbWFsID0gbmV3IERhdGFUeXBlKDB4MjIpOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIEJpZ0ludGVnZXIgPSBuZXcgRGF0YVR5cGUoMHgyMyk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgQnl0ZSA9IG5ldyBEYXRhVHlwZSgweDI0KTsKKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBCaW5hcnkgPSBuZXcgRGF0YVR5cGUoMHgyNSk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgU2hvcnQgPSBuZXcgRGF0YVR5cGUoMHgyNik7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgQm9vbGVhbiA9IG5ldyBEYXRhVHlwZSgweDI3KTsKKyAgICAgICAgLy8gTm90IHlldCBpbXBsZW1lbnRlZAorICAgICAgICAvLyBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFRyZWUgPSBuZXcgRGF0YVR5cGUoMHgyQik7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTWVyZ2UgPSBuZXcgRGF0YVR5cGUoMHgyRSk7CisgICAgICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICAgLy8gcHVibGljIHN0YXRpYyByZWFkb25seSBEYXRhVHlwZSBDb21wb3NpdGVQRFQgPSBuZXcgRGF0YVR5cGUoMHhGMCk7CisgICAgICAgIC8vIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgUHJpbWl0aXZlUERUID0gbmV3IERhdGFUeXBlKDB4RjEpOworICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIENoYXIgPSBuZXcgRGF0YVR5cGUoMHg4MCk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgRHVyYXRpb24gPSBuZXcgRGF0YVR5cGUoMHg4MSk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRGF0YVR5cGUgTWFya2VyID0gbmV3IERhdGFUeXBlKDB4RkQpOworI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUgMTU5MQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEEgbnVsbCB2YWx1ZSBmb3IgYW4gdW5zcGVjaWZpZWQgT2JqZWN0IHZhbHVlLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERhdGFUeXBlIFVuc3BlY2lmaWVkTnVsbCA9IG5ldyBEYXRhVHlwZSgweEZFKTsKKworICAgICAgICBwcml2YXRlIERhdGFUeXBlKGludCBjb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlQ29kZSA9IChieXRlKSBjb2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgR2V0cyB0aGUgdHlwZSBjb2RlIG9mIHRoaXMgZGF0YSB0eXBlLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgYnl0ZSBUeXBlQ29kZSB7IGdldDsgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIENyZWF0ZXMgYSBuZXcgPHNlZSBjcmVmPSJEYXRhVHlwZSIvPiBpbnN0YW5jZSBmb3IgdGhlIGdpdmVuIHR5cGUgY29kZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBEYXRhVHlwZSBGcm9tVHlwZUNvZGUoaW50IGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YVR5cGUoY29kZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIGJvb2wgRXF1YWxzKERhdGFUeXBlPyBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhudWxsLCBvdGhlcikpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHModGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBUeXBlQ29kZSA9PSBvdGhlci5UeXBlQ29kZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0PyBvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMobnVsbCwgb2JqKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvYmopKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChvYmouR2V0VHlwZSgpICE9IEdldFR5cGUoKSkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIEVxdWFscygoRGF0YVR5cGUpIG9iaik7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUeXBlQ29kZS5HZXRIYXNoQ29kZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBzcGVjaWZpZWQgPHNlZSBjcmVmPSJEYXRhVHlwZSIvPiBoYXZlIHRoZSBzYW1lIHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBib29sIG9wZXJhdG9yID09KERhdGFUeXBlPyBmaXJzdCwgRGF0YVR5cGU/IHNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyhudWxsLCBmaXJzdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmVyZW5jZUVxdWFscyhudWxsLCBzZWNvbmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmlyc3QuRXF1YWxzKHNlY29uZCk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHNwZWNpZmllZCA8c2VlIGNyZWY9IkRhdGFUeXBlIi8+IGhhdmUgZGlmZmVyZW50IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBib29sIG9wZXJhdG9yICE9KERhdGFUeXBlPyBmaXJzdCwgRGF0YVR5cGU/IHNlY29uZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoZmlyc3QgPT0gc2Vjb25kKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFRvU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICQiRGF0YVR5cGV7eyBUeXBlQ29kZSA9IHtUeXBlQ29kZX0gfX0iOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9HcmFwaEJpbmFyeTRNZXNzYWdlU2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTRmMzJiCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw3NyBAQAor77u/I3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKK3VzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTzsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vICAgICBTZXJpYWxpemVzIGRhdGEgdG8gYW5kIGZyb20gR3JlbWxpbiBTZXJ2ZXIgaW4gR3JhcGhCaW5hcnkgNC4wIGZvcm1hdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeTRNZXNzYWdlU2VyaWFsaXplciA6IElNZXNzYWdlU2VyaWFsaXplcgorICAgIHsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBHcmFwaEJpbmFyeVJlYWRlciBfcmVhZGVyOworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEdyYXBoQmluYXJ5V3JpdGVyIF93cml0ZXI7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyIF9yZXF1ZXN0U2VyaWFsaXplciA9IG5ldyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIoKTsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyIF9yZXNwb25zZVNlcmlhbGl6ZXIgPSBuZXcgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcigpOworCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgc3RyaW5nIE1pbWVUeXBlID0+IFNlcmlhbGl6YXRpb25Ub2tlbnMuR3JhcGhCaW5hcnk0TWltZVR5cGU7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyIiAvPiBjbGFzcworICAgICAgICAvLy8gICAgIHdpdGggdGhlIGRlZmF1bHQgdHlwZSBzZXJpYWxpemVyIHJlZ2lzdHJ5LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBfcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICBfd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8Ynl0ZVtdPiBTZXJpYWxpemVNZXNzYWdlQXN5bmMoUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAvLyBObyBNSU1FIHR5cGUgcHJlZml4IOKAlCBIVFRQIHVzZXMgQ29udGVudC1UeXBlIGhlYWRlcgorICAgICAgICAgICAgYXdhaXQgX3JlcXVlc3RTZXJpYWxpemVyLldyaXRlVmFsdWVBc3luYyhyZXF1ZXN0TWVzc2FnZSwgc3RyZWFtLCBfd3JpdGVyLCBjYW5jZWxsYXRpb25Ub2tlbikKKyAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5Ub0FycmF5KCk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8UmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4+IERlc2VyaWFsaXplTWVzc2FnZUFzeW5jKGJ5dGVbXSBtZXNzYWdlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbShtZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVzcG9uc2VTZXJpYWxpemVyLlJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgX3JlYWRlciwgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L0dyYXBoQmluYXJ5UmVhZGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnlSZWFkZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlOWYwOAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L0dyYXBoQmluYXJ5UmVhZGVyLmNzCkBAIC0wLDAgKzEsOTYgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBbGxvd3MgdG8gZGVzZXJpYWxpemUgb2JqZWN0cyBmcm9tIEdyYXBoQmluYXJ5IHY0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5UmVhZGVyCisgICAgeworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgX3JlZ2lzdHJ5OworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5UmVhZGVyIiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWdpc3RyeSI+VGhlIDxzZWUgY3JlZj0iVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSIvPiB0byB1c2UgZm9yIGRlc2VyaWFsaXphdGlvbi48L3BhcmFtPgorICAgICAgICBwdWJsaWMgR3JhcGhCaW5hcnlSZWFkZXIoVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeT8gcmVnaXN0cnkgPSBudWxsKQorICAgICAgICB7CisgICAgICAgICAgICBfcmVnaXN0cnkgPSByZWdpc3RyeSA/PyBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5Lkluc3RhbmNlOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmVhZHMgb25seSB0aGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgdHlwZSA8dHlwZXBhcmFtcmVmIG5hbWU9IlQiLz4uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0byByZWFkLjwvdHlwZXBhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q/PiBSZWFkTnVsbGFibGVWYWx1ZUFzeW5jPFQ+KFN0cmVhbSBzdHJlYW0sCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB0eXBlZFNlcmlhbGl6ZXIgPSBfcmVnaXN0cnkuR2V0U2VyaWFsaXplckZvcih0eXBlb2YoVCkpOworICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHR5cGVkU2VyaWFsaXplci5SZWFkTnVsbGFibGVWYWx1ZUFzeW5jKHN0cmVhbSwgdGhpcywgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmVhZHMgb25seSB0aGUgdmFsdWUgZm9yIGEgc3BlY2lmaWMgdHlwZSA8dHlwZXBhcmFtcmVmIG5hbWU9IlQiLz4uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVCI+VGhlIHR5cGUgb2YgdGhlIG9iamVjdCB0byByZWFkLjwvdHlwZXBhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q+IFJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8VD4oU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHR5cGVkU2VyaWFsaXplciA9IF9yZWdpc3RyeS5HZXRTZXJpYWxpemVyRm9yKHR5cGVvZihUKSk7CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgdHlwZWRTZXJpYWxpemVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmMoc3RyZWFtLCB0aGlzLCBjYW5jZWxsYXRpb25Ub2tlbikKKyAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmVhZHMgdGhlIHR5cGUgY29kZSwgaW5mb3JtYXRpb24gYW5kIHZhbHVlIHdpdGggZnVsbHktcXVhbGlmaWVkIGZvcm1hdC4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBHcmFwaEJpbmFyeSBkYXRhIHRvIHBhcnNlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q/PiBSZWFkQXN5bmMoU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdHlwZSA9IERhdGFUeXBlLkZyb21UeXBlQ29kZShhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpKTsKKworICAgICAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuVW5zcGVjaWZpZWROdWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7IC8vIHJlYWQgdmFsdWUgYnl0ZSB0byBhZHZhbmNlIHRoZSBpbmRleAorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgdHlwZVNlcmlhbGl6ZXIgPSBfcmVnaXN0cnkuR2V0U2VyaWFsaXplckZvcih0eXBlKTsKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCB0eXBlU2VyaWFsaXplci5SZWFkQXN5bmMoc3RyZWFtLCB0aGlzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L0dyYXBoQmluYXJ5V3JpdGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnlXcml0ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVjNGZjNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L0dyYXBoQmluYXJ5V3JpdGVyLmNzCkBAIC0wLDAgKzEsMTM5IEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQWxsb3dzIHRvIHNlcmlhbGl6ZSBvYmplY3RzIHRvIEdyYXBoQmluYXJ5IHY0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5V3JpdGVyCisgICAgeworICAgICAgICBwcml2YXRlIGNvbnN0IGJ5dGUgVmFsdWVGbGFnTnVsbCA9IDE7CisgICAgICAgIHByaXZhdGUgY29uc3QgYnl0ZSBWYWx1ZUZsYWdOb25lID0gMDsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iYnl0ZSIvPiByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEdyYXBoQmluYXJ5IHY0IHNwZWNpZmljYXRpb24uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBjb25zdCBieXRlIFZlcnNpb25CeXRlID0gMHg4NDsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBieXRlW10gVW5zcGVjaWZpZWROdWxsQnl0ZXMgPSB7RGF0YVR5cGUuVW5zcGVjaWZpZWROdWxsLlR5cGVDb2RlLCAweDAxfTsKKworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgX3JlZ2lzdHJ5OworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5V3JpdGVyIiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWdpc3RyeSI+VGhlIDxzZWUgY3JlZj0iVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSIvPiB0byB1c2UgZm9yIHNlcmlhbGl6YXRpb24uPC9wYXJhbT4KKyAgICAgICAgcHVibGljIEdyYXBoQmluYXJ5V3JpdGVyKFR5cGVTZXJpYWxpemVyUmVnaXN0cnk/IHJlZ2lzdHJ5ID0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgX3JlZ2lzdHJ5ID0gcmVnaXN0cnkgPz8gVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5JbnN0YW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFdyaXRlcyBhIG51bGxhYmxlIHZhbHVlIHdpdGhvdXQgaW5jbHVkaW5nIHR5cGUgaW5mb3JtYXRpb24uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1ZSB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIHN0cmVhbSB0byB3cml0ZSB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPkEgdGFzayB0aGF0IHJlcHJlc2VudHMgdGhlIGFzeW5jaHJvbm91cyB3cml0ZSBvcGVyYXRpb24uPC9yZXR1cm5zPgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBXcml0ZU51bGxhYmxlVmFsdWVBc3luYyhvYmplY3Q/IHZhbHVlLCBTdHJlYW0gc3RyZWFtLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhd2FpdCBXcml0ZVZhbHVlRmxhZ051bGxBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgdmFsdWVUeXBlID0gdmFsdWUuR2V0VHlwZSgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBfcmVnaXN0cnkuR2V0U2VyaWFsaXplckZvcih2YWx1ZVR5cGUpOworICAgICAgICAgICAgYXdhaXQgc2VyaWFsaXplci5Xcml0ZU51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZSwgc3RyZWFtLCB0aGlzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBXcml0ZXMgYSBub24tbnVsbGFibGUgdmFsdWUgd2l0aG91dCBpbmNsdWRpbmcgdHlwZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKG9iamVjdCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigkIntuYW1lb2YodmFsdWUpfSBjYW5ub3QgYmUgbnVsbCIpOworICAgICAgICAgICAgdmFyIHZhbHVlVHlwZSA9IHZhbHVlLkdldFR5cGUoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gX3JlZ2lzdHJ5LkdldFNlcmlhbGl6ZXJGb3IodmFsdWVUeXBlKTsKKyAgICAgICAgICAgIGF3YWl0IHNlcmlhbGl6ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUsIHN0cmVhbSwgdGhpcywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFdyaXRlcyBhbiBvYmplY3QgaW4gZnVsbHktcXVhbGlmaWVkIGZvcm1hdCwgY29udGFpbmluZyB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlQXN5bmMob2JqZWN0PyB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhVbnNwZWNpZmllZE51bGxCeXRlcywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciB2YWx1ZVR5cGUgPSB2YWx1ZS5HZXRUeXBlKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IF9yZWdpc3RyeS5HZXRTZXJpYWxpemVyRm9yKHZhbHVlVHlwZSk7CisKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhzZXJpYWxpemVyLkRhdGFUeXBlLlR5cGVDb2RlLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgc2VyaWFsaXplci5Xcml0ZUFzeW5jKHZhbHVlLCBzdHJlYW0sIHRoaXMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBXcml0ZXMgYSBzaW5nbGUgYnl0ZSByZXByZXNlbnRpbmcgdGhlIG51bGwgdmFsdWVfZmxhZy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5BIHRhc2sgdGhhdCByZXByZXNlbnRzIHRoZSBhc3luY2hyb25vdXMgd3JpdGUgb3BlcmF0aW9uLjwvcmV0dXJucz4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUZsYWdOdWxsQXN5bmMoU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoVmFsdWVGbGFnTnVsbCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFdyaXRlcyBhIHNpbmdsZSBieXRlIHdpdGggdmFsdWUgMCwgcmVwcmVzZW50aW5nIGFuIHVuc2V0IHZhbHVlX2ZsYWcuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlVmFsdWVGbGFnTm9uZUFzeW5jKFN0cmVhbSBzdHJlYW0sIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkgeworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKFZhbHVlRmxhZ05vbmUsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvSVR5cGVTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvSVR5cGVTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTk1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9JVHlwZVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSwxMDIgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZXByZXNlbnRzIGEgc2VyaWFsaXplciBmb3IgYSBjZXJ0YWluIHR5cGUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgaW50ZXJmYWNlIElUeXBlU2VyaWFsaXplcgorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gR2V0cyB0aGUgPHNlZSBjcmVmPSJEYXRhVHlwZSIvPiB0aGF0IHN1cHBvcnRlZCBieSB0aGlzIHNlcmlhbGl6ZXIuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIERhdGFUeXBlIERhdGFUeXBlIHsgZ2V0OyB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gV3JpdGVzIHRoZSB0eXBlIGNvZGUsIGluZm9ybWF0aW9uIGFuZCB2YWx1ZSB0byBhIHN0cmVhbS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlXcml0ZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIFRhc2sgV3JpdGVBc3luYyhvYmplY3QgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gV3JpdGVzIHRoZSBudWxsYWJsZSB2YWx1ZSB0byBhIHN0cmVhbSwgY29tcG9zZWQgYnkgdGhlIHZhbHVlIGZsYWcgYW5kIHRoZSBzZXF1ZW5jZSBvZiBieXRlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHdyaXRlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlXcml0ZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIFRhc2sgV3JpdGVOdWxsYWJsZVZhbHVlQXN5bmMob2JqZWN0PyB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKKyAgICAgICAgCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFdyaXRlcyB0aGUgbm9uLW51bGxhYmxlIHZhbHVlIHRvIGEgc3RyZWFtLCBjb21wb3NlZCBieSB0aGUgdmFsdWUgZmxhZyBhbmQgdGhlIHNlcXVlbmNlIG9mIGJ5dGVzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgdmFsdWUgdG8gd3JpdGUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBzdHJlYW0gdG8gd3JpdGUgdG8uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ3cml0ZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVdyaXRlciIvPiB0aGF0IGNhbiBiZSB1c2VkIHRvIHdyaXRlIG5lc3RlZCB2YWx1ZXMuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5BIHRhc2sgdGhhdCByZXByZXNlbnRzIHRoZSBhc3luY2hyb25vdXMgd3JpdGUgb3BlcmF0aW9uLjwvcmV0dXJucz4KKyAgICAgICAgVGFzayBXcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhvYmplY3QgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmVhZHMgdGhlIHR5cGUgaW5mb3JtYXRpb24gYW5kIHZhbHVlIGZyb20gdGhlIHN0cmVhbS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBHcmFwaEJpbmFyeSBkYXRhIHRvIHBhcnNlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVhZGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlSZWFkZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIG5lc3RlZCB2YWx1ZXMuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCB2YWx1ZS48L3JldHVybnM+CisgICAgICAgIFRhc2s8b2JqZWN0Pz4gUmVhZEFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBSZWFkcyB0aGUgdmFsdWUgZnJvbSB0aGUgc3RyZWFtIChub3QgdGhlIHR5cGUgaW5mb3JtYXRpb24pLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIEdyYXBoQmluYXJ5IGRhdGEgdG8gcGFyc2UuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWFkZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVJlYWRlciIvPiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgbmVzdGVkIHZhbHVlcy48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIHZhbHVlLjwvcmV0dXJucz4KKyAgICAgICAgVGFzazxvYmplY3Q/PiBSZWFkTnVsbGFibGVWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmVhZHMgdGhlIHZhbHVlIGZyb20gdGhlIHN0cmVhbSAobm90IHRoZSB0eXBlIGluZm9ybWF0aW9uKS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSBHcmFwaEJpbmFyeSBkYXRhIHRvIHBhcnNlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVhZGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlSZWFkZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIG5lc3RlZCB2YWx1ZXMuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCB2YWx1ZS48L3JldHVybnM+CisgICAgICAgIFRhc2s8b2JqZWN0PiBSZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L01hcmtlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L01hcmtlci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNmMWQzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvTWFya2VyLmNzCkBAIC0wLDAgKzEsODYgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUmVwcmVzZW50cyBhIHNwZWNpYWwgbWFya2VyIHR5cGUgZm9yIHN0cmVhbSBib3VuZGFyaWVzIGluIEdyYXBoQmluYXJ5IDQuMCBzZXJpYWxpemF0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBNYXJrZXJzIGFyZSB1c2VkIHRvIGluZGljYXRlIHN0cmVhbSBib3VuZGFyaWVzIGluIEdyYXBoQmluYXJ5IDQuMCByZXNwb25zZXMuCisgICAgLy8vIFRoZSA8c2VlIGNyZWY9IkVuZE9mU3RyZWFtIi8+IG1hcmtlciBpbmRpY2F0ZXMgdGhlIGVuZCBvZiByZXN1bHQgZGF0YSBpbiBhIHJlc3BvbnNlLAorICAgIC8vLyBzaWduYWxpbmcgdGhhdCB0aGUgZm9vdGVyIChzdGF0dXMgY29kZSwgbWVzc2FnZSwgZXhjZXB0aW9uKSBmb2xsb3dzLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgcHVibGljIHNlYWxlZCBjbGFzcyBNYXJrZXIKKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIE1hcmtlciBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIHJlc3VsdCBzdHJlYW0uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cmVtYXJrcz4KKyAgICAgICAgLy8vIEluIEdyYXBoQmluYXJ5IDQuMCByZXNwb25zZSBmb3JtYXQsIHRoaXMgbWFya2VyICh0eXBlIGNvZGUgMHhGRCB3aXRoIHZhbHVlIDB4MDApCisgICAgICAgIC8vLyBzZXBhcmF0ZXMgdGhlIHJlc3VsdCBkYXRhIGZyb20gdGhlIHJlc3BvbnNlIGZvb3Rlci4KKyAgICAgICAgLy8vIDwvcmVtYXJrcz4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBNYXJrZXIgRW5kT2ZTdHJlYW0gPSBuZXcgTWFya2VyKDApOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEdldHMgdGhlIGJ5dGUgdmFsdWUgb2YgdGhpcyBtYXJrZXIgYXMgdXNlZCBvbiB0aGUgd2lyZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIGJ5dGUgVmFsdWUgeyBnZXQ7IH0KKworICAgICAgICBwcml2YXRlIE1hcmtlcihieXRlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBWYWx1ZSA9IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmV0dXJucyB0aGUgPHNlZSBjcmVmPSJNYXJrZXIiLz4gaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBieXRlIHZhbHVlLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgbWFya2VyIGJ5dGUgdmFsdWUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBjb3JyZXNwb25kaW5nIDxzZWUgY3JlZj0iTWFya2VyIi8+IGluc3RhbmNlLjwvcmV0dXJucz4KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXJndW1lbnRFeGNlcHRpb24iPlRocm93biBpZiB0aGUgdmFsdWUgaXMgbm90IGEga25vd24gbWFya2VyLjwvZXhjZXB0aW9uPgorICAgICAgICBwdWJsaWMgc3RhdGljIE1hcmtlciBPZihieXRlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oJCJVbmtub3duIG1hcmtlciB2YWx1ZToge3ZhbHVlfSIsIG5hbWVvZih2YWx1ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEVuZE9mU3RyZWFtOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKSA9PiAkIk1hcmtlcih7VmFsdWV9KSI7CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Q/IG9iaikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9iaiBpcyBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKHRoaXMsIG9iaikpIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG9iaiBpcyBNYXJrZXIgb3RoZXIgJiYgVmFsdWUgPT0gb3RoZXIuVmFsdWU7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIGludCBHZXRIYXNoQ29kZSgpID0+IFZhbHVlLkdldEhhc2hDb2RlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NWYwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9SZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw2MCBAQAor77u/I3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyAgICAgU2VyaWFsaXplcyBhIDxzZWUgY3JlZj0iUmVxdWVzdE1lc3NhZ2UiLz4gaW4gdGhlIEdyYXBoQmluYXJ5IDQuMCB3aXJlIGZvcm1hdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIKKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBXcml0ZXMgYSByZXF1ZXN0IG1lc3NhZ2UgdG8gYSBzdHJlYW0gaW4gdGhlIDQuMCBmb3JtYXQ6CisgICAgICAgIC8vLyAgICAgdmVyc2lvbiBieXRlICgweDg0KSArIGZpZWxkcyBtYXAgdmFsdWUgKyBncmVtbGluIHN0cmluZyB2YWx1ZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZXF1ZXN0TWVzc2FnZSI+VGhlIG1lc3NhZ2UgdG8gc2VyaWFsaXplLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgc3RyZWFtIHRvIHdyaXRlIHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0id3JpdGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhCaW5hcnlXcml0ZXIiLz4gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgTWVtb3J5U3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyAxLiBWZXJzaW9uIGJ5dGUKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhHcmFwaEJpbmFyeVdyaXRlci5WZXJzaW9uQnl0ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgLy8gMi4gRmllbGRzIGFzIE1hcCB7dmFsdWV9IChsZW5ndGggKyBrZXktdmFsdWUgcGFpcnMsIG5vIHR5cGUgY29kZSBvciB2YWx1ZSBmbGFnKQorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHJlcXVlc3RNZXNzYWdlLkZpZWxkcywgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKKyAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICAvLyAzLiBHcmVtbGluIGFzIFN0cmluZyB7dmFsdWV9IChsZW5ndGggKyBVVEYtOCBieXRlcywgbm8gdHlwZSBjb2RlIG9yIHZhbHVlIGZsYWcpCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMocmVxdWVzdE1lc3NhZ2UuR3JlbWxpbiwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKKyAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1Jlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhiMDViZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1Jlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSwxMDYgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zOwordXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyAgICAgRGVzZXJpYWxpemVzIGEgPHNlZSBjcmVmPSJSZXNwb25zZU1lc3NhZ2V7VH0iLz4gZnJvbSB0aGUgR3JhcGhCaW5hcnkgNC4wIHN0cmVhbWluZyBmb3JtYXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgY2xhc3MgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcgorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIFJlYWRzIGEgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSBzdHJlYW0gaW4gdGhlIDQuMCBmb3JtYXQ6CisgICAgICAgIC8vLyAgICAgdmVyc2lvbiBieXRlICsgYnVsa2VkIGZsYWcgKyByZXN1bHQgZGF0YSArIG1hcmtlciArIHN0YXR1cyBmb290ZXIuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgR3JhcGhCaW5hcnkgZGF0YSB0byBwYXJzZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InJlYWRlciI+QSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5UmVhZGVyIi8+IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCBuZXN0ZWQgdmFsdWVzLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgcmVzcG9uc2UgbWVzc2FnZS48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrPFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+PiBSZWFkVmFsdWVBc3luYyhNZW1vcnlTdHJlYW0gc3RyZWFtLAorICAgICAgICAgICAgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLCBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDEuIFZlcnNpb24gYnl0ZSDigJQgdmFsaWRhdGUgTVNCIGlzIHNldAorICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpICYgMHhGRjsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID4+IDcgIT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzaG91bGQgYmUgc2V0IGFjY29yZGluZyB0byB0aGUgZm9ybWF0Iik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDIuIEJ1bGtlZCBmbGFnCisgICAgICAgICAgICB2YXIgYnVsa2VkQnl0ZSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgYnVsa2VkID0gYnVsa2VkQnl0ZSA9PSAweDAxOworCisgICAgICAgICAgICAvLyAzLiBSZWFkIHJlc3VsdCBkYXRhIHVudGlsIE1hcmtlcgorICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBuZXcgTGlzdDxvYmplY3Q+KCk7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpcyBNYXJrZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYnVsa2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgZnVsbHktcXVhbGlmaWVkIExvbmcgYnVsayBjb3VudCBmb2xsb3dpbmcgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHZhciBidWxrQ291bnQgPSAobG9uZykoYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQorICAgICAgICAgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSkhOworICAgICAgICAgICAgICAgICAgICByZXN1bHRzLkFkZChuZXcgVHJhdmVyc2VyKHZhbHVlLCBidWxrQ291bnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5BZGQodmFsdWUhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIDQuIFN0YXR1cyBmb290ZXI6IHN0YXR1cyBjb2RlIChJbnQgdmFsdWUpCisgICAgICAgICAgICB2YXIgc3RhdHVzQ29kZSA9IChpbnQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PigKKyAgICAgICAgICAgICAgICBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisKKyAgICAgICAgICAgIC8vIDUuIE51bGxhYmxlIHN0YXR1cyBtZXNzYWdlICh2YWx1ZV9mbGFnICsgU3RyaW5nIHZhbHVlKQorICAgICAgICAgICAgdmFyIHN0YXR1c01lc3NhZ2UgPSAoc3RyaW5nPylhd2FpdCByZWFkZXIuUmVhZE51bGxhYmxlVmFsdWVBc3luYzxzdHJpbmc+KAorICAgICAgICAgICAgICAgIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgLy8gNi4gTnVsbGFibGUgZXhjZXB0aW9uICh2YWx1ZV9mbGFnICsgU3RyaW5nIHZhbHVlKQorICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IChzdHJpbmc/KWF3YWl0IHJlYWRlci5SZWFkTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oCisgICAgICAgICAgICAgICAgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPSAyMDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlc3BvbnNlRXhjZXB0aW9uKHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4oYnVsa2VkLCByZXN1bHRzLCBzdGF0dXNDb2RlLAorICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2UsIGV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9TdHJlYW1FeHRlbnNpb25zLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvU3RyZWFtRXh0ZW5zaW9ucy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODU3NjcyCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvU3RyZWFtRXh0ZW5zaW9ucy5jcwpAQCAtMCwwICsxLDI4MSBAQAor77u/I3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vICAgICBQcm92aWRlcyBleHRlbnNpb24gbWV0aG9kcyBmb3IgPHNlZSBjcmVmPSJTdHJlYW0iIC8+IHRoYXQgYXJlIG1vc3RseSB1c2VmdWwgd2hlbiBpbXBsZW1lbnRpbmcgR3JhcGhCaW5hcnkKKyAgICAvLy8gICAgIHNlcmlhbGl6ZXJzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdHJlYW1FeHRlbnNpb25zCisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgd3JpdGVzIGEgPHNlZSBjcmVmPSJieXRlIi8+IHRvIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gd3JpdGUgdGhlIDxzZWUgY3JlZj0iYnl0ZSIvPiB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJieXRlIi8+IHRvIHdyaXRlLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgV3JpdGVCeXRlQXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBieXRlIHZhbHVlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhuZXdbXSB7dmFsdWV9LCAwLCAxLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHJlYWRzIGEgPHNlZSBjcmVmPSJieXRlIi8+IGZyb20gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byByZWFkIGZyb20uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCA8c2VlIGNyZWY9ImJ5dGUiLz4uPC9yZXR1cm5zPgorICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2s8Ynl0ZT4gUmVhZEJ5dGVBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJlYWRCdWZmZXIgPSBuZXcgYnl0ZVsxXTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMocmVhZEJ1ZmZlciwgMCwgMSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiByZWFkQnVmZmVyWzBdOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0ic2J5dGUiLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJzYnl0ZSIvPiB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJzYnl0ZSIvPiB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlU0J5dGVBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIHNieXRlIHZhbHVlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoKGJ5dGUpdmFsdWUsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYSA8c2VlIGNyZWY9InNieXRlIi8+IGZyb20gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byByZWFkIGZyb20uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCA8c2VlIGNyZWY9InNieXRlIi8+LjwvcmV0dXJucz4KKyAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrPHNieXRlPiBSZWFkU0J5dGVBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChzYnl0ZSlhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhbiA8c2VlIGNyZWY9ImludCIvPiB0byBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHdyaXRlIHRoZSA8c2VlIGNyZWY9ImludCIvPiB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJpbnQiLz4gdG8gd3JpdGUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzayBXcml0ZUludEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgaW50IHZhbHVlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXModmFsdWUpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMobmV3W10geyBieXRlc1szXSwgYnl0ZXNbMl0sIGJ5dGVzWzFdLCBieXRlc1swXSB9LCAwLCA0LCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHJlYWRzIGFuIDxzZWUgY3JlZj0iaW50Ii8+IGZyb20gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byByZWFkIGZyb20uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCA8c2VlIGNyZWY9ImludCIvPi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxpbnQ+IFJlYWRJbnRBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gbmV3IGJ5dGVbNF07CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uUmVhZEFzeW5jKGJ5dGVzLCAwLCA0LCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIEJpdENvbnZlcnRlci5Ub0ludDMyKG5ldyBbXXtieXRlc1szXSwgYnl0ZXNbMl0sIGJ5dGVzWzFdLCBieXRlc1swXX0sIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0ibG9uZyIvPiB0byBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHdyaXRlIHRoZSA8c2VlIGNyZWY9ImxvbmciLz4gdG8uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIDxzZWUgY3JlZj0ibG9uZyIvPiB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlTG9uZ0FzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgbG9uZyB2YWx1ZSwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gQml0Q29udmVydGVyLkdldEJ5dGVzKHZhbHVlKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbQorICAgICAgICAgICAgICAgIC5Xcml0ZUFzeW5jKG5ld1tdIHsgYnl0ZXNbN10sIGJ5dGVzWzZdLCBieXRlc1s1XSwgYnl0ZXNbNF0sIGJ5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdIH0sIDAsCisgICAgICAgICAgICAgICAgICAgIDgsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYSA8c2VlIGNyZWY9ImxvbmciLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0ibG9uZyIvPi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxsb25nPiBSZWFkTG9uZ0FzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVs4XTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMoYnl0ZXMsIDAsIDgsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gQml0Q29udmVydGVyLlRvSW50NjQoCisgICAgICAgICAgICAgICAgbmV3W10ge2J5dGVzWzddLCBieXRlc1s2XSwgYnl0ZXNbNV0sIGJ5dGVzWzRdLCBieXRlc1szXSwgYnl0ZXNbMl0sIGJ5dGVzWzFdLCBieXRlc1swXX0sIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0iZmxvYXQiLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJmbG9hdCIvPiB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJmbG9hdCIvPiB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlRmxvYXRBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIGZsb2F0IHZhbHVlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXModmFsdWUpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMobmV3W10geyBieXRlc1szXSwgYnl0ZXNbMl0sIGJ5dGVzWzFdLCBieXRlc1swXSB9LCAwLCA0LCBjYW5jZWxsYXRpb25Ub2tlbikKKyAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHJlYWRzIGEgPHNlZSBjcmVmPSJmbG9hdCIvPiBmcm9tIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gcmVhZCBmcm9tLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgPHNlZSBjcmVmPSJmbG9hdCIvPi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxmbG9hdD4gUmVhZEZsb2F0QXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVs0XTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMoYnl0ZXMsIDAsIDQsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gQml0Q29udmVydGVyLlRvU2luZ2xlKG5ldyBbXXtieXRlc1szXSwgYnl0ZXNbMl0sIGJ5dGVzWzFdLCBieXRlc1swXX0sIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0iZG91YmxlIi8+IHRvIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gd3JpdGUgdGhlIDxzZWUgY3JlZj0iZG91YmxlIi8+IHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9ImRvdWJsZSIvPiB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlRG91YmxlQXN5bmModGhpcyBTdHJlYW0gc3RyZWFtLCBkb3VibGUgdmFsdWUsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBieXRlcyA9IEJpdENvbnZlcnRlci5HZXRCeXRlcyh2YWx1ZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0KKyAgICAgICAgICAgICAgICAuV3JpdGVBc3luYyhuZXdbXSB7Ynl0ZXNbN10sIGJ5dGVzWzZdLCBieXRlc1s1XSwgYnl0ZXNbNF0sIGJ5dGVzWzNdLCBieXRlc1syXSwgYnl0ZXNbMV0sIGJ5dGVzWzBdfSwgMCwKKyAgICAgICAgICAgICAgICAgICAgOCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSByZWFkcyBhIDxzZWUgY3JlZj0iZG91YmxlIi8+IGZyb20gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byByZWFkIGZyb20uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5UaGUgcmVhZCA8c2VlIGNyZWY9ImRvdWJsZSIvPi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxkb3VibGU+IFJlYWREb3VibGVBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBieXRlWzhdOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhieXRlcywgMCwgOCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBCaXRDb252ZXJ0ZXIuVG9Eb3VibGUoCisgICAgICAgICAgICAgICAgbmV3W10ge2J5dGVzWzddLCBieXRlc1s2XSwgYnl0ZXNbNV0sIGJ5dGVzWzRdLCBieXRlc1szXSwgYnl0ZXNbMl0sIGJ5dGVzWzFdLCBieXRlc1swXX0sIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHdyaXRlcyBhIDxzZWUgY3JlZj0ic2hvcnQiLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJzaG9ydCIvPiB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlIj5UaGUgPHNlZSBjcmVmPSJzaG9ydCIvPiB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIFdyaXRlU2hvcnRBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIHNob3J0IHZhbHVlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXModmFsdWUpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMobmV3W10geyBieXRlc1sxXSwgYnl0ZXNbMF0gfSwgMCwgMiwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSByZWFkcyBhIDxzZWUgY3JlZj0ic2hvcnQiLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0ic2hvcnQiLz4uPC9yZXR1cm5zPgorICAgICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2s8c2hvcnQ+IFJlYWRTaG9ydEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gbmV3IGJ5dGVbMl07CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uUmVhZEFzeW5jKGJ5dGVzLCAwLCAyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIEJpdENvbnZlcnRlci5Ub0ludDE2KG5ldyBbXXtieXRlc1sxXSwgYnl0ZXNbMF19LCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSB3cml0ZXMgYSA8c2VlIGNyZWY9ImJvb2wiLz4gdG8gYSA8c2VlIGNyZWY9IlN0cmVhbSIvPi4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byB3cml0ZSB0aGUgPHNlZSBjcmVmPSJib29sIi8+IHRvLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSA8c2VlIGNyZWY9ImJvb2wiLz4gdG8gd3JpdGUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzayBXcml0ZUJvb2xBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIGJvb2wgdmFsdWUsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygoYnl0ZSkodmFsdWUgPyAxIDogMCksIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQXN5bmNocm9ub3VzbHkgcmVhZHMgYSA8c2VlIGNyZWY9ImJvb2wiLz4gZnJvbSBhIDxzZWUgY3JlZj0iU3RyZWFtIi8+LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIDxzZWUgY3JlZj0iU3RyZWFtIi8+IHRvIHJlYWQgZnJvbS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIDxzZWUgY3JlZj0iYm9vbCIvPi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxib29sPiBSZWFkQm9vbEFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYiA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gYiBzd2l0Y2gKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAxID0+IHRydWUsCisgICAgICAgICAgICAgICAgMCA9PiBmYWxzZSwKKyAgICAgICAgICAgICAgICBfID0+IHRocm93IG5ldyBJT0V4Y2VwdGlvbigkIkNhbm5vdCByZWFkIGJ5dGUge2J9IGFzIGEgYm9vbGVhbi4iKQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBBc3luY2hyb25vdXNseSB3cml0ZXMgYSA8c2VlIGNyZWY9IlQ6Ynl0ZVtdIi8+IHRvIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZWFtIj5UaGUgPHNlZSBjcmVmPSJTdHJlYW0iLz4gdG8gd3JpdGUgdGhlIDxzZWUgY3JlZj0iVDpieXRlW10iLz4gdG8uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIDxzZWUgY3JlZj0iVDpieXRlW10iLz4gdG8gd3JpdGUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjYW5jZWxsYXRpb25Ub2tlbiI+VGhlIHRva2VuIHRvIGNhbmNlbCB0aGUgb3BlcmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBOb25lLjwvcGFyYW0+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzayBXcml0ZUFzeW5jKHRoaXMgU3RyZWFtIHN0cmVhbSwgYnl0ZVtdIHZhbHVlLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyh2YWx1ZSwgMCwgdmFsdWUuTGVuZ3RoLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEFzeW5jaHJvbm91c2x5IHJlYWRzIGEgPHNlZSBjcmVmPSJUOmJ5dGVbXSIvPiBmcm9tIGEgPHNlZSBjcmVmPSJTdHJlYW0iLz4gaW50byBhIGJ1ZmZlci4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJlYW0iPlRoZSA8c2VlIGNyZWY9IlN0cmVhbSIvPiB0byByZWFkIGZyb20uPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJjb3VudCI+VGhlIG51bWJlciBvZiBieXRlcyB0byByZWFkLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgPHNlZSBjcmVmPSJUOmJ5dGVbXSIvPi48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzazxieXRlW10+IFJlYWRBc3luYyh0aGlzIFN0cmVhbSBzdHJlYW0sIGludCBjb3VudCwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG5ldyBieXRlW2NvdW50XTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5SZWFkQXN5bmMoYnVmZmVyLCAwLCBjb3VudCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVTZXJpYWxpemVyUmVnaXN0cnkuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI0MjFmMQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVTZXJpYWxpemVyUmVnaXN0cnkuY3MKQEAgLTAsMCArMSwyMTkgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3MuQ29kZUFuYWx5c2lzOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLkxpbnE7Cit1c2luZyBTeXN0ZW0uTnVtZXJpY3M7Cit1c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXM7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcm92aWRlcyBHcmFwaEJpbmFyeSA0LjAgc2VyaWFsaXplcnMgZm9yIGRpZmZlcmVudCB0eXBlcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5CisgICAgeworICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8VHlwZSwgSVR5cGVTZXJpYWxpemVyPiBfc2VyaWFsaXplckJ5VHlwZSA9CisgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxUeXBlLCBJVHlwZVNlcmlhbGl6ZXI+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAge3R5cGVvZihpbnQpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuSW50U2VyaWFsaXplcn0sCisgICAgICAgICAgICAgICAge3R5cGVvZihsb25nKSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkxvbmdTZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKHN0cmluZyksIG5ldyBTdHJpbmdTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoRGF0ZVRpbWVPZmZzZXQpLCBuZXcgRGF0ZVRpbWVTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoZG91YmxlKSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkRvdWJsZVNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoZmxvYXQpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuRmxvYXRTZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKEd1aWQpLCBuZXcgVXVpZFNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge3R5cGVvZihFZGdlKSwgbmV3IEVkZ2VTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoUGF0aCksIG5ldyBQYXRoU2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKFByb3BlcnR5KSwgbmV3IFByb3BlcnR5U2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKFZlcnRleCksIG5ldyBWZXJ0ZXhTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoVmVydGV4UHJvcGVydHkpLCBuZXcgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoRGlyZWN0aW9uKSwgRW51bVNlcmlhbGl6ZXJzLkRpcmVjdGlvblNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoTWVyZ2UpLCBFbnVtU2VyaWFsaXplcnMuTWVyZ2VTZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKFQpLCBFbnVtU2VyaWFsaXplcnMuVFNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHt0eXBlb2YoZGVjaW1hbCksIG5ldyBCaWdEZWNpbWFsU2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKEJpZ0ludGVnZXIpLCBuZXcgQmlnSW50ZWdlclNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge3R5cGVvZihzYnl0ZSksIFNpbmdsZVR5cGVTZXJpYWxpemVycy5CeXRlU2VyaWFsaXplcn0sCisgICAgICAgICAgICAgICAge3R5cGVvZihieXRlW10pLCBuZXcgQmluYXJ5U2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKHNob3J0KSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLlNob3J0U2VyaWFsaXplcn0sCisgICAgICAgICAgICAgICAge3R5cGVvZihib29sKSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkJvb2xlYW5TZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7dHlwZW9mKGNoYXIpLCBuZXcgQ2hhclNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge3R5cGVvZihUaW1lU3BhbiksIG5ldyBEdXJhdGlvblNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge3R5cGVvZihNYXJrZXIpLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuTWFya2VyU2VyaWFsaXplcn0sCisgICAgICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRGljdGlvbmFyeTxEYXRhVHlwZSwgSVR5cGVTZXJpYWxpemVyPiBfc2VyaWFsaXplckJ5RGF0YVR5cGUgPQorICAgICAgICAgICAgbmV3IERpY3Rpb25hcnk8RGF0YVR5cGUsIElUeXBlU2VyaWFsaXplcj4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuSW50LCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuSW50U2VyaWFsaXplcn0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLkxvbmcsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5Mb25nU2VyaWFsaXplcn0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLlN0cmluZywgbmV3IFN0cmluZ1NlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLkRhdGVUaW1lLCBuZXcgRGF0ZVRpbWVTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5Eb3VibGUsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5Eb3VibGVTZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuRmxvYXQsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5GbG9hdFNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5MaXN0LCBuZXcgTGlzdFNlcmlhbGl6ZXI8b2JqZWN0PigpfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuTWFwLCBuZXcgTWFwU2VyaWFsaXplcjxvYmplY3QsIG9iamVjdD4oKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLlNldCwgbmV3IFNldFNlcmlhbGl6ZXI8SGFzaFNldDxvYmplY3Q/Piwgb2JqZWN0PigpfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuVXVpZCwgbmV3IFV1aWRTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5FZGdlLCBuZXcgRWRnZVNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLlBhdGgsIG5ldyBQYXRoU2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuUHJvcGVydHksIG5ldyBQcm9wZXJ0eVNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLlZlcnRleCwgbmV3IFZlcnRleFNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLlZlcnRleFByb3BlcnR5LCBuZXcgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5EaXJlY3Rpb24sIEVudW1TZXJpYWxpemVycy5EaXJlY3Rpb25TZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuTWVyZ2UsIEVudW1TZXJpYWxpemVycy5NZXJnZVNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5ULCBFbnVtU2VyaWFsaXplcnMuVFNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5CaWdEZWNpbWFsLCBuZXcgQmlnRGVjaW1hbFNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLkJpZ0ludGVnZXIsIG5ldyBCaWdJbnRlZ2VyU2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuQnl0ZSwgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzLkJ5dGVTZXJpYWxpemVyfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuQmluYXJ5LCBuZXcgQmluYXJ5U2VyaWFsaXplcigpfSwKKyAgICAgICAgICAgICAgICB7RGF0YVR5cGUuU2hvcnQsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5TaG9ydFNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5Cb29sZWFuLCBTaW5nbGVUeXBlU2VyaWFsaXplcnMuQm9vbGVhblNlcmlhbGl6ZXJ9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5DaGFyLCBuZXcgQ2hhclNlcmlhbGl6ZXIoKX0sCisgICAgICAgICAgICAgICAge0RhdGFUeXBlLkR1cmF0aW9uLCBuZXcgRHVyYXRpb25TZXJpYWxpemVyKCl9LAorICAgICAgICAgICAgICAgIHtEYXRhVHlwZS5NYXJrZXIsIFNpbmdsZVR5cGVTZXJpYWxpemVycy5NYXJrZXJTZXJpYWxpemVyfSwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUHJvdmlkZXMgYSBkZWZhdWx0IDxzZWUgY3JlZj0iVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSIvPiBpbnN0YW5jZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5IEluc3RhbmNlID0gbmV3IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkoKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBHZXRzIGEgc2VyaWFsaXplciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgdGhlIHZhbHVlIHRvIGJlIHNlcmlhbGl6ZWQuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWVUeXBlIj5UeXBlIG9mIHRoZSB2YWx1ZSB0byBiZSBzZXJpYWxpemVkLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cmV0dXJucz5BIHNlcmlhbGl6ZXIgZm9yIHRoZSBwcm92aWRlZCB0eXBlLjwvcmV0dXJucz4KKyAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gbm8gc2VyaWFsaXplciBjYW4gYmUgZm91bmQgZm9yIHRoZSB0eXBlLjwvZXhjZXB0aW9uPgorICAgICAgICBwdWJsaWMgSVR5cGVTZXJpYWxpemVyIEdldFNlcmlhbGl6ZXJGb3IoVHlwZSB2YWx1ZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChfc2VyaWFsaXplckJ5VHlwZS5UcnlHZXRWYWx1ZSh2YWx1ZVR5cGUsIG91dCB2YXIgc2VyaWFsaXplckZvclR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyRm9yVHlwZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKElzRGljdGlvbmFyeVR5cGUodmFsdWVUeXBlLCBvdXQgdmFyIGRpY3RLZXlUeXBlLCBvdXQgdmFyIGRpY3RWYWx1ZVR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyVHlwZSA9IHR5cGVvZihNYXBTZXJpYWxpemVyPCw+KS5NYWtlR2VuZXJpY1R5cGUoZGljdEtleVR5cGUsIGRpY3RWYWx1ZVR5cGUpOworICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gKElUeXBlU2VyaWFsaXplcj8pIEFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZShzZXJpYWxpemVyVHlwZSk7CisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbdmFsdWVUeXBlXSA9IHNlcmlhbGl6ZXIgPz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJDYW5ub3QgY3JlYXRlIGEgc2VyaWFsaXplciBmb3IgdGhlIGRpY3Rpb25hcnkgdHlwZSB7dmFsdWVUeXBlfS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKElzU2V0VHlwZSh2YWx1ZVR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBtZW1iZXJUeXBlID0gdmFsdWVUeXBlLkdldEdlbmVyaWNBcmd1bWVudHMoKVswXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplclR5cGUgPSB0eXBlb2YoU2V0U2VyaWFsaXplcjwsPikuTWFrZUdlbmVyaWNUeXBlKHZhbHVlVHlwZSwgbWVtYmVyVHlwZSk7CisgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSAoSVR5cGVTZXJpYWxpemVyPykgQWN0aXZhdG9yLkNyZWF0ZUluc3RhbmNlKHNlcmlhbGl6ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICBfc2VyaWFsaXplckJ5VHlwZVt2YWx1ZVR5cGVdID0gc2VyaWFsaXplciA/PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkIkNhbm5vdCBjcmVhdGUgYSBzZXJpYWxpemVyIGZvciB0aGUgc2V0IHR5cGUge3ZhbHVlVHlwZX0uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUuSXNBcnJheSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbWVtYmVyVHlwZSA9IHZhbHVlVHlwZS5HZXRFbGVtZW50VHlwZSgpOworICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyVHlwZSA9IHR5cGVvZihBcnJheVNlcmlhbGl6ZXI8PikuTWFrZUdlbmVyaWNUeXBlKG1lbWJlclR5cGUhKTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IChJVHlwZVNlcmlhbGl6ZXI/KSBBY3RpdmF0b3IuQ3JlYXRlSW5zdGFuY2Uoc2VyaWFsaXplclR5cGUpOworICAgICAgICAgICAgICAgIF9zZXJpYWxpemVyQnlUeXBlW3ZhbHVlVHlwZV0gPSBzZXJpYWxpemVyID8/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQiQ2Fubm90IGNyZWF0ZSBhIHNlcmlhbGl6ZXIgZm9yIHRoZSBhcnJheSB0eXBlIHt2YWx1ZVR5cGV9LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoSXNMaXN0VHlwZSh2YWx1ZVR5cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBtZW1iZXJUeXBlID0gdmFsdWVUeXBlLkdldEdlbmVyaWNBcmd1bWVudHMoKVswXTsKKyAgICAgICAgICAgICAgICB2YXIgc2VyaWFsaXplclR5cGUgPSB0eXBlb2YoTGlzdFNlcmlhbGl6ZXI8PikuTWFrZUdlbmVyaWNUeXBlKG1lbWJlclR5cGUpOworICAgICAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gKElUeXBlU2VyaWFsaXplcj8pIEFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZShzZXJpYWxpemVyVHlwZSk7CisgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbdmFsdWVUeXBlXSA9IHNlcmlhbGl6ZXIgPz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJDYW5ub3QgY3JlYXRlIGEgc2VyaWFsaXplciBmb3IgdGhlIGxpc3QgdHlwZSB7dmFsdWVUeXBlfS4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yZWFjaCAodmFyIHN1cHBvcnRlZFR5cGUgaW4gbmV3IExpc3Q8VHlwZT4oX3NlcmlhbGl6ZXJCeVR5cGUuS2V5cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZFR5cGUuSXNBc3NpZ25hYmxlRnJvbSh2YWx1ZVR5cGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBfc2VyaWFsaXplckJ5VHlwZVtzdXBwb3J0ZWRUeXBlXTsKKyAgICAgICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJCeVR5cGVbdmFsdWVUeXBlXSA9IHNlcmlhbGl6ZXI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oJCJObyBzZXJpYWxpemVyIGZvdW5kIGZvciB0eXBlICd7dmFsdWVUeXBlfScuIik7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBHZXRzIGEgc2VyaWFsaXplciBmb3IgdGhlIGdpdmVuIEdyYXBoQmluYXJ5IDQuMCBkYXRhIHR5cGUgY29kZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkYXRhVHlwZSI+VGhlIEdyYXBoQmluYXJ5IDQuMCBkYXRhIHR5cGUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPkEgc2VyaWFsaXplciBmb3IgdGhlIHByb3ZpZGVkIGRhdGEgdHlwZS48L3JldHVybnM+CisgICAgICAgIHB1YmxpYyBJVHlwZVNlcmlhbGl6ZXIgR2V0U2VyaWFsaXplckZvcihEYXRhVHlwZSBkYXRhVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9zZXJpYWxpemVyQnlEYXRhVHlwZVtkYXRhVHlwZV07CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sIElzRGljdGlvbmFyeVR5cGUoVHlwZSB0eXBlLCBbTm90TnVsbFdoZW4ocmV0dXJuVmFsdWU6IHRydWUpXSBvdXQgVHlwZT8ga2V5VHlwZSwKKyAgICAgICAgICAgIFtOb3ROdWxsV2hlbihyZXR1cm5WYWx1ZTogdHJ1ZSldIG91dCBUeXBlPyB2YWx1ZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtYXliZUludGVyZmFjZVR5cGUgPSB0eXBlCisgICAgICAgICAgICAgICAgLkdldEludGVyZmFjZXMoKQorICAgICAgICAgICAgICAgIC5GaXJzdE9yRGVmYXVsdChpbXBsZW1lbnRlZEludGVyZmFjZVR5cGUgPT4gaW1wbGVtZW50ZWRJbnRlcmZhY2VUeXBlLklzQ29uc3RydWN0ZWRHZW5lcmljVHlwZSAmJiBpbXBsZW1lbnRlZEludGVyZmFjZVR5cGUuR2V0R2VuZXJpY1R5cGVEZWZpbml0aW9uKCkgPT0gdHlwZW9mKElEaWN0aW9uYXJ5PCw+KSk7CisKKyAgICAgICAgICAgIGlmIChtYXliZUludGVyZmFjZVR5cGUgaXMgeyB9IGludGVyZmFjZVR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5VHlwZSA9IGludGVyZmFjZVR5cGUuR2V0R2VuZXJpY0FyZ3VtZW50cygpWzBdOworICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IGludGVyZmFjZVR5cGUuR2V0R2VuZXJpY0FyZ3VtZW50cygpWzFdOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBrZXlUeXBlID0gbnVsbDsKKyAgICAgICAgICAgIHZhbHVlVHlwZSA9IG51bGw7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sIElzU2V0VHlwZShUeXBlIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLkdldEludGVyZmFjZXMoKS5BbnkoaW1wbGVtZW50ZWRJbnRlcmZhY2UgPT4gaW1wbGVtZW50ZWRJbnRlcmZhY2UuSXNDb25zdHJ1Y3RlZEdlbmVyaWNUeXBlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkSW50ZXJmYWNlLkdldEdlbmVyaWNUeXBlRGVmaW5pdGlvbigpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZihJU2V0PD4pKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2wgSXNMaXN0VHlwZShUeXBlIHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLkdldEludGVyZmFjZXMoKS5BbnkoaW1wbGVtZW50ZWRJbnRlcmZhY2UgPT4gaW1wbGVtZW50ZWRJbnRlcmZhY2UuSXNDb25zdHJ1Y3RlZEdlbmVyaWNUeXBlICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGVkSW50ZXJmYWNlLkdldEdlbmVyaWNUeXBlRGVmaW5pdGlvbigpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZihJTGlzdDw+KSk7CisgICAgICAgIH0KKworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0FycmF5U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0FycmF5U2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGY5MzliCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvQXJyYXlTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsNjUgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIHNlcmlhbGl6ZXIgdGhhdCBzZXJpYWxpemVzIC5ORVQgYXJyYXlzIHRvIEdyYXBoQmluYXJ5NCBsaXN0cy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRNZW1iZXIiPlRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheS48L3R5cGVwYXJhbT4KKyAgICBwdWJsaWMgY2xhc3MgQXJyYXlTZXJpYWxpemVyPFRNZW1iZXI+IDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VE1lbWJlcltdPgorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkFycmF5U2VyaWFsaXplcntUTWVtYmVyfSIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBBcnJheVNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuTGlzdCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhUTWVtYmVyW10gdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLkxlbmd0aCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhpdGVtLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGFzIEdyYXBoQmluYXJ5IGhhcyBubyBhcnJheSBkYXRhIHR5cGUuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBUYXNrPFRNZW1iZXJbXT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFeGNlcHRpb24oIlJlYWRpbmcgYW4gYXJyYXkgaXMgbm90IHN1cHBvcnRlZCIpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0JpZ0RlY2ltYWxTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvQmlnRGVjaW1hbFNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZjBjNwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0JpZ0RlY2ltYWxTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsOTUgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLk51bWVyaWNzOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIHNlcmlhbGl6ZXIgdGhhdCBzZXJpYWxpemVzIDxzZWUgY3JlZj0iZGVjaW1hbCIvPiB2YWx1ZXMgYXMgQmlnRGVjaW1hbCBpbiBHcmFwaEJpbmFyeTQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgY2xhc3MgQmlnRGVjaW1hbFNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxkZWNpbWFsPgorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkJpZ0RlY2ltYWxTZXJpYWxpemVyIiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIEJpZ0RlY2ltYWxTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkJpZ0RlY2ltYWwpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoZGVjaW1hbCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKHVuc2NhbGVkVmFsdWUsIHNjYWxlKSA9IEdldFVuc2NhbGVkVmFsdWVBbmRTY2FsZSh2YWx1ZSk7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMoc2NhbGUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh1bnNjYWxlZFZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc3RhdGljIChCaWdJbnRlZ2VyLCBpbnQpIEdldFVuc2NhbGVkVmFsdWVBbmRTY2FsZShkZWNpbWFsIGlucHV0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcGFydHMgPSBkZWNpbWFsLkdldEJpdHMoaW5wdXQpOworCisgICAgICAgICAgICB2YXIgc2lnbiA9IChwYXJ0c1szXSAmIDB4ODAwMDAwMDApICE9IDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBzY2FsZSA9IChwYXJ0c1szXSA+PiAxNikgJiAweDdGOworCisgICAgICAgICAgICB2YXIgbG93Qnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXMocGFydHNbMF0pOworICAgICAgICAgICAgdmFyIG1pZGRsZUJ5dGVzID0gQml0Q29udmVydGVyLkdldEJ5dGVzKHBhcnRzWzFdKTsKKyAgICAgICAgICAgIHZhciBoaWdoQnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXMocGFydHNbMl0pOworICAgICAgICAgICAgdmFyIHZhbHVlQnl0ZXMgPSBuZXcgYnl0ZVsxMl07CisgICAgICAgICAgICBsb3dCeXRlcy5Db3B5VG8odmFsdWVCeXRlcywgMCk7CisgICAgICAgICAgICBtaWRkbGVCeXRlcy5Db3B5VG8odmFsdWVCeXRlcywgNCk7CisgICAgICAgICAgICBoaWdoQnl0ZXMuQ29weVRvKHZhbHVlQnl0ZXMsIDgpOworICAgICAgICAgICAgdmFyIGJpZ0ludCA9IG5ldyBCaWdJbnRlZ2VyKHZhbHVlQnl0ZXMpOworCisgICAgICAgICAgICBpZiAoc2lnbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBiaWdJbnQgPSAtYmlnSW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gKGJpZ0ludCwgc2NhbGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPGRlY2ltYWw+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNjYWxlID0gKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciB1bnNjYWxlZCA9IChCaWdJbnRlZ2VyKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPEJpZ0ludGVnZXI+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgcmV0dXJuIENvbnZlcnRTY2FsZUFuZFVuc2NhbGVkVmFsdWUoc2NhbGUsIHVuc2NhbGVkKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIGRlY2ltYWwgQ29udmVydFNjYWxlQW5kVW5zY2FsZWRWYWx1ZShpbnQgc2NhbGUsIEJpZ0ludGVnZXIgdW5zY2FsZWRWYWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChkZWNpbWFsKSB1bnNjYWxlZFZhbHVlICogKGRlY2ltYWwpIE1hdGguUG93KDEwLCAtc2NhbGUpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0JpZ0ludGVnZXJTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvQmlnSW50ZWdlclNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE1NTVhMAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0JpZ0ludGVnZXJTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsNjIgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLkxpbnE7Cit1c2luZyBTeXN0ZW0uTnVtZXJpY3M7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJCaWdJbnRlZ2VyIi8+IHZhbHVlcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBCaWdJbnRlZ2VyU2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPEJpZ0ludGVnZXI+CisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iQmlnSW50ZWdlclNlcmlhbGl6ZXIiIC8+IGNsYXNzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgQmlnSW50ZWdlclNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQmlnSW50ZWdlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhCaWdJbnRlZ2VyIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBieXRlcyA9IHZhbHVlLlRvQnl0ZUFycmF5KCkuUmV2ZXJzZSgpLlRvQXJyYXkoKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhieXRlcy5MZW5ndGgsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKGJ5dGVzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPEJpZ0ludGVnZXI+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IChpbnQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBhd2FpdCBzdHJlYW0uUmVhZEFzeW5jKGxlbmd0aCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQmlnSW50ZWdlcihieXRlcy5SZXZlcnNlKCkuVG9BcnJheSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9CaW5hcnlTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvQmluYXJ5U2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODcyM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvQmluYXJ5U2VyaWFsaXplci5jcwpAQCAtMCwwICsxLDYxIEBACivvu78jcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIAorICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSBzZXJpYWxpemVyIGZvciBieXRlW10uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgY2xhc3MgQmluYXJ5U2VyaWFsaXplciA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPGJ5dGVbXT4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJCaW5hcnlTZXJpYWxpemVyIiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIEJpbmFyeVNlcmlhbGl6ZXIoKSA6IGJhc2UoRGF0YVR5cGUuQmluYXJ5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKGJ5dGVbXSB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuTGVuZ3RoLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyh2YWx1ZSwgMCwgdmFsdWUuTGVuZ3RoLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPGJ5dGVbXT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgYnl0ZVtsZW5ndGhdOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhidWZmZXIsIDAsIGxlbmd0aCwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9DaGFyU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0NoYXJTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTNjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9DaGFyU2VyaWFsaXplci5jcwpAQCAtMCwwICsxLDg3IEBACivvu78jcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UZXh0OwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIDxzZWUgY3JlZj0iY2hhciIvPiBzZXJpYWxpemVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIENoYXJTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8Y2hhcj4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJDaGFyU2VyaWFsaXplciIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBDaGFyU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5DaGFyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKGNoYXIgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gRW5jb2RpbmcuVVRGOC5HZXRCeXRlcyh2YWx1ZS5Ub1N0cmluZygpKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKGJ5dGVzLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPGNoYXI+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGZpcnN0Qnl0ZSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgYnl0ZUxlbmd0aCA9IDE7CisgICAgICAgICAgICAvLyBBIGJ5dGUgd2l0aCB0aGUgZmlyc3QgYnl0ZSBPTiAoMTAwMDAwMDApIHNpZ25hbHMgdGhhdCBtb3JlIGJ5dGVzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBVVEYtOCBjaGFyCisgICAgICAgICAgICBpZiAoKGZpcnN0Qnl0ZSAmIDB4ODApID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGZpcnN0Qnl0ZSAmIDB4ZjApID09IDB4ZjApCisgICAgICAgICAgICAgICAgeyAvLyAweGYwID0gMTExMTAwMDAKKyAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IDQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZmlyc3RCeXRlICYgMHhlMCkgPT0gMHhlMCkKKyAgICAgICAgICAgICAgICB7IC8vMTExMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IDM7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZmlyc3RCeXRlICYgMHhjMCkgPT0gMHhjMCkKKyAgICAgICAgICAgICAgICB7IC8vMTEwMDAwMDAKKyAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBieXRlW10gYnl0ZXM7CisgICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJ5dGVzID0gbmV3W10ge2ZpcnN0Qnl0ZX07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnl0ZXMgPSBuZXcgYnl0ZVtieXRlTGVuZ3RoXTsKKyAgICAgICAgICAgICAgICBieXRlc1swXSA9IGZpcnN0Qnl0ZTsKKyAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW0uUmVhZEFzeW5jKGJ5dGVzLCAxLCBieXRlTGVuZ3RoIC0gMSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIEVuY29kaW5nLlVURjguR2V0Q2hhcnMoYnl0ZXMpWzBdOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0RhdGVUaW1lU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0RhdGVUaW1lU2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZjOTMyCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvRGF0ZVRpbWVTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsNzggQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iRGF0ZVRpbWVPZmZzZXQiLz4gdmFsdWVzIGluIEdyYXBoQmluYXJ5IDQuMC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBEYXRlVGltZVNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxEYXRlVGltZU9mZnNldD4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJEYXRlVGltZVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgRGF0ZVRpbWVTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkRhdGVUaW1lKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKERhdGVUaW1lT2Zmc2V0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUludEFzeW5jKHZhbHVlLlllYXIsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoKGJ5dGUpdmFsdWUuTW9udGgsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoKGJ5dGUpdmFsdWUuRGF5LCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyB0aW1lIGFzIExvbmcgbmFub3NlY29uZHMgc2luY2UgbWlkbmlnaHQKKyAgICAgICAgICAgIHZhciB0aW1lTmFub3MgPSAodmFsdWUuSG91ciAqIDM2MDBMICsgdmFsdWUuTWludXRlICogNjBMICsgdmFsdWUuU2Vjb25kKSAqIDFfMDAwXzAwMF8wMDBMICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLk1pbGxpc2Vjb25kICogMV8wMDBfMDAwTCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUuVGlja3MgJSBUaW1lU3Bhbi5UaWNrc1Blck1pbGxpc2Vjb25kKSAqIDEwMEw7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVMb25nQXN5bmModGltZU5hbm9zLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVJbnRBc3luYygoaW50KXZhbHVlLk9mZnNldC5Ub3RhbFNlY29uZHMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8RGF0ZVRpbWVPZmZzZXQ+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHllYXIgPSBhd2FpdCBzdHJlYW0uUmVhZEludEFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgbW9udGggPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIGRheSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgdGltZU5hbm9zID0gYXdhaXQgc3RyZWFtLlJlYWRMb25nQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBvZmZzZXRTZWNvbmRzID0gYXdhaXQgc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICAvLyBDb252ZXJ0IG5hbm9zZWNvbmRzIHRvIFRpbWVTcGFuICgxMDAgbmFub3NlY29uZHMgcGVyIHRpY2spCisgICAgICAgICAgICB2YXIgdGltZVNwYW4gPSBUaW1lU3Bhbi5Gcm9tVGlja3ModGltZU5hbm9zIC8gMTAwKTsKKyAgICAgICAgICAgIHZhciBvZmZzZXQgPSBUaW1lU3Bhbi5Gcm9tU2Vjb25kcyhvZmZzZXRTZWNvbmRzKTsKKworICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZU9mZnNldCh5ZWFyLCBtb250aCwgZGF5LCB0aW1lU3Bhbi5Ib3VycywgdGltZVNwYW4uTWludXRlcywgdGltZVNwYW4uU2Vjb25kcywgCisgICAgICAgICAgICAgICAgdGltZVNwYW4uTWlsbGlzZWNvbmRzLCBvZmZzZXQpLkFkZFRpY2tzKHRpbWVTcGFuLlRpY2tzICUgVGltZVNwYW4uVGlja3NQZXJNaWxsaXNlY29uZCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9EdXJhdGlvblNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9EdXJhdGlvblNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2ZThkNQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0R1cmF0aW9uU2VyaWFsaXplci5jcwpAQCAtMCwwICsxLDYzIEBACivvu78jcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSBzZXJpYWxpemVyIHRoYXQgc2VyaWFsaXplcyA8c2VlIGNyZWY9IlRpbWVTcGFuIi8+IHZhbHVlcyBhcyBEdXJhdGlvbiBpbiBHcmFwaEJpbmFyeS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBEdXJhdGlvblNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxUaW1lU3Bhbj4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJEdXJhdGlvblNlcmlhbGl6ZXIiIC8+IGNsYXNzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgRHVyYXRpb25TZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkR1cmF0aW9uKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFRpbWVTcGFuIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUxvbmdBc3luYygobG9uZyl2YWx1ZS5Ub3RhbFNlY29uZHMsIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAvLyBHZXQgc3ViLXNlY29uZCB0aWNrcyBhbmQgY29udmVydCB0byBuYW5vc2Vjb25kcyAoMSB0aWNrID0gMTAwIG5hbm9zZWNvbmRzKQorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmMoKGludCkodmFsdWUuVGlja3MgJSBUaW1lU3Bhbi5UaWNrc1BlclNlY29uZCAqIDEwMCksIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VGltZVNwYW4+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBhd2FpdCBzdHJlYW0uUmVhZExvbmdBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIG5hbm9zZWNvbmRzID0gYXdhaXQgc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICAvLyBDb252ZXJ0IG5hbm9zZWNvbmRzIHRvIHRpY2tzICgxIHRpY2sgPSAxMDAgbmFub3NlY29uZHMpCisgICAgICAgICAgICByZXR1cm4gVGltZVNwYW4uRnJvbVNlY29uZHMoc2Vjb25kcykgKyBUaW1lU3Bhbi5Gcm9tVGlja3MobmFub3NlY29uZHMgLyAxMDApOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0VkZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvRWRnZVNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhODA5NwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0VkZ2VTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsODkgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEFuIDxzZWUgY3JlZj0iRWRnZSIvPiBzZXJpYWxpemVyIGZvciBHcmFwaEJpbmFyeSA0LjAuCisgICAgLy8vIEluIHY0LCBsYWJlbHMgYXJlIHNlcmlhbGl6ZWQgYXMgTGlzdCBvZiBTdHJpbmdzIGluc3RlYWQgb2YgYSBzaW5nbGUgU3RyaW5nLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIEVkZ2VTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8RWRnZT4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJFZGdlU2VyaWFsaXplciIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBFZGdlU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5FZGdlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKEVkZ2UgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhuZXcgTGlzdDxzdHJpbmc+IHsgdmFsdWUuTGFiZWwgfSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5JblYuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhuZXcgTGlzdDxzdHJpbmc+IHsgdmFsdWUuSW5WLkxhYmVsIH0sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlLk91dFYuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhuZXcgTGlzdDxzdHJpbmc+IHsgdmFsdWUuT3V0Vi5MYWJlbCB9LCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisKKyAgICAgICAgICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgcGFyZW50IHZlcnRleAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMobnVsbCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBmb3IgdGhlIHByb3BlcnRpZXMKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxFZGdlPiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpZCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIGxhYmVsTGlzdCA9IChMaXN0PHN0cmluZz8+KWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPExpc3Q8c3RyaW5nPz4+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBsYWJlbCA9IGxhYmVsTGlzdC5Db3VudCA+IDAgPyBsYWJlbExpc3RbMF0gPz8gIiIgOiAiIjsKKworICAgICAgICAgICAgdmFyIGluVklkID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgaW5WTGFiZWxMaXN0ID0gKExpc3Q8c3RyaW5nPz4pYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8TGlzdDxzdHJpbmc/Pj4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIGluViA9IG5ldyBWZXJ0ZXgoaW5WSWQsIGluVkxhYmVsTGlzdC5Db3VudCA+IDAgPyBpblZMYWJlbExpc3RbMF0gPz8gIiIgOiAiIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBvdXRWSWQgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBvdXRWTGFiZWxMaXN0ID0gKExpc3Q8c3RyaW5nPz4pYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8TGlzdDxzdHJpbmc/Pj4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIG91dFYgPSBuZXcgVmVydGV4KG91dFZJZCwgb3V0VkxhYmVsTGlzdC5Db3VudCA+IDAgPyBvdXRWTGFiZWxMaXN0WzBdID8/ICIiIDogIiIpOworCisgICAgICAgICAgICAvLyBkaXNjYXJkIHBvc3NpYmxlIHBhcmVudCB2ZXJ0ZXgKKyAgICAgICAgICAgIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworCisgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIHByb3BlcnRpZXNBc0FycmF5ID0gbnVsbCA9PSBwcm9wZXJ0aWVzID8gQXJyYXkuRW1wdHk8b2JqZWN0PigpIDogKHByb3BlcnRpZXMgYXMgTGlzdDxvYmplY3Q+KT8uVG9BcnJheSgpOworCisgICAgICAgICAgICByZXR1cm4gbmV3IEVkZ2UoaWQsIG91dFYsIGxhYmVsLCBpblYsIHByb3BlcnRpZXNBc0FycmF5KTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0VudW1TZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvRW51bVNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4NWM5NwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL0VudW1TZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsOTMgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Cit1c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByb3ZpZGVzIHNlcmlhbGl6ZXJzIGZvciBlbnVtIHR5cGVzIHN1cHBvcnRlZCBpbiBHcmFwaEJpbmFyeSA0LjAuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIEdyYXBoQmluYXJ5IDQuMCBvbmx5IHN1cHBvcnRzIERpcmVjdGlvbiwgVCwgYW5kIE1lcmdlIGVudW0gdHlwZXMuCisgICAgLy8vIFRoZSBmb2xsb3dpbmcgdHlwZXMgd2VyZSByZW1vdmVkIGluIHY0OiBCYXJyaWVyLCBDYXJkaW5hbGl0eSwgQ29sdW1uLCBEVCwgR1R5cGUsCisgICAgLy8vIE9wZXJhdG9yLCBPcmRlciwgUGljaywgUG9wLCBTY29wZS4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRW51bVNlcmlhbGl6ZXJzCisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iRGlyZWN0aW9uIi8+IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxEaXJlY3Rpb24+IERpcmVjdGlvblNlcmlhbGl6ZXIgPQorICAgICAgICAgICAgbmV3IEVudW1TZXJpYWxpemVyPERpcmVjdGlvbj4oRGF0YVR5cGUuRGlyZWN0aW9uLCBEaXJlY3Rpb24uR2V0QnlWYWx1ZSk7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9Ik1lcmdlIi8+IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxNZXJnZT4gTWVyZ2VTZXJpYWxpemVyID0KKyAgICAgICAgICAgIG5ldyBFbnVtU2VyaWFsaXplcjxNZXJnZT4oRGF0YVR5cGUuTWVyZ2UsIE1lcmdlLkdldEJ5VmFsdWUpOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJUIi8+IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBFbnVtU2VyaWFsaXplcjxUPiBUU2VyaWFsaXplciA9CisgICAgICAgICAgICBuZXcgRW51bVNlcmlhbGl6ZXI8VD4oRGF0YVR5cGUuVCwgVC5HZXRCeVZhbHVlKTsKKyAgICB9CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdlbmVyYWxpemVkIHNlcmlhbGl6ZXIgZm9yIGVudW0gdHlwZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJURW51bSI+VGhlIHR5cGUgb2YgdGhlIGVudW0gdG8gc2VyaWFsaXplLjwvdHlwZXBhcmFtPgorICAgIHB1YmxpYyBjbGFzcyBFbnVtU2VyaWFsaXplcjxURW51bT4gOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxURW51bT4KKyAgICAgICAgd2hlcmUgVEVudW0gOiBFbnVtV3JhcHBlcgorICAgIHsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBGdW5jPHN0cmluZywgVEVudW0+IF9yZWFkRnVuYzsKKworICAgICAgICBpbnRlcm5hbCBFbnVtU2VyaWFsaXplcihEYXRhVHlwZSBkYXRhVHlwZSwgRnVuYzxzdHJpbmcsIFRFbnVtPiByZWFkRnVuYykgOiBiYXNlKGRhdGFUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBfcmVhZEZ1bmMgPSByZWFkRnVuYzsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoVEVudW0gdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuRW51bVZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VEVudW0+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgYHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbilgIGluc3RlYWQsCisgICAgICAgICAgICAvLyBidXQgaXQncyB0aGUgc2FtZSBpbiBvdGhlciBHTFZzIGFuZCBjaGFuZ2luZyB0aGlzIHdvdWxkIGJlIGEgYnJlYWtpbmcgY2hhbmdlIGZvciB0aGUgR3JhcGhCaW5hcnkgZm9ybWF0LgorICAgICAgICAgICAgdmFyIGVudW1WYWx1ZSA9IChzdHJpbmc/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGlmIChlbnVtVmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiUmVhZCBudWxsIGFzIGEgdmFsdWUgZm9yIHtEYXRhVHlwZX0iKTsKKyAgICAgICAgICAgIHJldHVybiBfcmVhZEZ1bmMuSW52b2tlKGVudW1WYWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvTGlzdFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9MaXN0U2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M0MTc5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvTGlzdFNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw5NSBAQAorI3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSBnZW5lcmljIGxpc3Qgc2VyaWFsaXplciBmb3IgR3JhcGhCaW5hcnkgNC4wLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVE1lbWJlciI+VGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QuPC90eXBlcGFyYW0+CisgICAgcHVibGljIGNsYXNzIExpc3RTZXJpYWxpemVyPFRNZW1iZXI+IDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8SUxpc3Q8VE1lbWJlcj8+PgorICAgIHsKKyAgICAgICAgcHJpdmF0ZSBjb25zdCBieXRlIFZhbHVlRmxhZ0J1bGtlZCA9IDB4MDI7CisgICAgICAgIAorICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iTGlzdFNlcmlhbGl6ZXJ7VExpc3R9IiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIExpc3RTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLkxpc3QpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzayBXcml0ZVZhbHVlQXN5bmMoSUxpc3Q8VE1lbWJlcj8+IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5Db3VudCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhpdGVtLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIFRhc2s8SUxpc3Q8VE1lbWJlcj8+PiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gc3RhbmRhcmQgZm9ybWF0ICh2YWx1ZUZsYWcgPSAweDAwKQorICAgICAgICAgICAgcmV0dXJuIFJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgcmVhZGVyLCAweDAwLCBjYW5jZWxsYXRpb25Ub2tlbik7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8SUxpc3Q8VE1lbWJlcj8+PiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCisgICAgICAgICAgICBieXRlIHZhbHVlRmxhZywgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGlzdDxUTWVtYmVyPz4oKTsKKyAgICAgICAgICAgIHZhciBpc0J1bGtlZCA9ICh2YWx1ZUZsYWcgJiBWYWx1ZUZsYWdCdWxrZWQpICE9IDA7CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSAoVE1lbWJlcj8pYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzQnVsa2VkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGJ1bGsgPSBhd2FpdCBzdHJlYW0uUmVhZExvbmdBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1bGs7IGorKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkFkZChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuQWRkKGl0ZW0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL01hcFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9NYXBTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZTkxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9NYXBTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsNzYgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEEgZ2VuZXJpYyBkaWN0aW9uYXJ5IHNlcmlhbGl6ZXIgZm9yIEdyYXBoQmluYXJ5IDQuMC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlRLZXkiPlRoZSB0eXBlIG9mIGtleXMgaW4gdGhlIGRpY3Rpb25hcnkuPC90eXBlcGFyYW0+CisgICAgLy8vIDx0eXBlcGFyYW0gbmFtZT0iVFZhbHVlIj5UaGUgdHlwZSBvZiB2YWx1ZXMgaW4gdGhlIGRpY3Rpb25hcnkuPC90eXBlcGFyYW0+CisgICAgcHVibGljIGNsYXNzIE1hcFNlcmlhbGl6ZXI8VEtleSwgVFZhbHVlPiA6IFNpbXBsZVR5cGVTZXJpYWxpemVyPElEaWN0aW9uYXJ5PFRLZXksIFRWYWx1ZT8+PiB3aGVyZSBUS2V5IDogbm90bnVsbAorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9Ik1hcFNlcmlhbGl6ZXJ7VEtleSwgVFZhbHVlfSIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBNYXBTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLk1hcCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU/PiB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwKKyAgICAgICAgICAgIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUuQ291bnQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgZm9yZWFjaCAodmFyIGtleSBpbiB2YWx1ZS5LZXlzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGtleSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlW2tleV0sIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxJRGljdGlvbmFyeTxUS2V5LCBUVmFsdWU/Pj4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXdhaXQgc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PFRLZXksIFRWYWx1ZT8+KGxlbmd0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGtleSA9IChUS2V5PykgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCBhcyB0aGUga2V5IGZvciBhIGRpY3Rpb25hcnkuIik7CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gKFRWYWx1ZT8pIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgICAgIHJlc3VsdC5BZGQoa2V5LCB2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9QYXRoU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1BhdGhTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzZhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9QYXRoU2VyaWFsaXplci5jcwpAQCAtMCwwICsxLDc0IEBACivvu78jcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIDxzZWUgY3JlZj0iUGF0aCIvPiBzZXJpYWxpemVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIFBhdGhTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8UGF0aD4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJQYXRoU2VyaWFsaXplciIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBQYXRoU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5QYXRoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFBhdGggdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuTGFiZWxzLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5PYmplY3RzLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8UGF0aD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVhZExhYmVsT2JqZWN0cyA9CisgICAgICAgICAgICAgICAgKExpc3Q8b2JqZWN0Pj8pYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBpZiAocmVhZExhYmVsT2JqZWN0cyA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCwgYnV0IGV4cGVjdGVkIGEgbGlzdCBvZiBsYWJlbHMiKTsKKyAgICAgICAgICAgIHZhciBsYWJlbHMgPSBuZXcgTGlzdDxJU2V0PHN0cmluZz4+KCk7CisgICAgICAgICAgICBmb3JlYWNoICh2YXIgbGFiZWxPYmplY3RMaXN0IGluIHJlYWRMYWJlbE9iamVjdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGxhYmVsU2V0ID0gbmV3IEhhc2hTZXQ8c3RyaW5nPigpOworICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBsYWJlbE9iaiBpbiAoSGFzaFNldDxvYmplY3Q+KSBsYWJlbE9iamVjdExpc3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsYWJlbFNldC5BZGQoKHN0cmluZykgbGFiZWxPYmopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYWJlbHMuQWRkKGxhYmVsU2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIG9iamVjdHMgPSAoTGlzdDxvYmplY3Q/Pj8pIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgaWYgKG9iamVjdHMgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJSZWFkIG51bGwsIGJ1dCBleHBlY3RlZCBhIGxpc3Qgb2Ygb2JqZWN0cyIpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXRoKGxhYmVscywgb2JqZWN0cyk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvUHJvcGVydHlTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvUHJvcGVydHlTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYmEzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9Qcm9wZXJ0eVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw2OCBAQAor77u/I3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEEgPHNlZSBjcmVmPSJQcm9wZXJ0eSIvPiBzZXJpYWxpemVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIAorICAgICAgICBQcm9wZXJ0eVNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxQcm9wZXJ0eT4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJQcm9wZXJ0eVNlcmlhbGl6ZXIiIC8+IGNsYXNzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgUHJvcGVydHlTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlByb3BlcnR5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKFByb3BlcnR5IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZS5LZXksIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHZhbHVlLlZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGZvciB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxQcm9wZXJ0eT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcCA9IG5ldyBQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpLAorICAgICAgICAgICAgICAgIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpKTsKKworICAgICAgICAgICAgLy8gZGlzY2FyZCBwYXJlbnQgZWxlbWVudAorICAgICAgICAgICAgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1NldFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9TZXRTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NTZhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9TZXRTZXJpYWxpemVyLmNzCkBAIC0wLDAgKzEsNzcgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uTGlucTsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSBnZW5lcmljIHNldCBzZXJpYWxpemVyIGZvciBHcmFwaEJpbmFyeSA0LjAuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJUU2V0Ij5UaGUgdHlwZSBvZiB0aGUgc2V0IHRvIHNlcmlhbGl6ZS48L3R5cGVwYXJhbT4KKyAgICAvLy8gPHR5cGVwYXJhbSBuYW1lPSJUTWVtYmVyIj5UaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgc2V0LjwvdHlwZXBhcmFtPgorICAgIHB1YmxpYyBjbGFzcyBTZXRTZXJpYWxpemVyPFRTZXQsIFRNZW1iZXI+IDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VFNldD4KKyAgICAgICAgd2hlcmUgVFNldCA6IElTZXQ8VE1lbWJlcj8+LCBuZXcoKQorICAgIHsKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IlNldFNlcmlhbGl6ZXJ7VFNldCxUTWVtYmVyfSIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBTZXRTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhUU2V0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbnVtZXJhYmxlID0gKElFbnVtZXJhYmxlKSB2YWx1ZTsKKyAgICAgICAgICAgIHZhciBsaXN0ID0gZW51bWVyYWJsZS5DYXN0PG9iamVjdD4oKS5Ub0xpc3QoKTsKKworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKGxpc3QuQ291bnQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gbGlzdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhpdGVtLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VFNldD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbGVuZ3RoID0gKGludClhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxpbnQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVFNldCgpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuQWRkKChUTWVtYmVyPykgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvU2ltcGxlVHlwZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9TaW1wbGVUeXBlU2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTE1OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvU2ltcGxlVHlwZVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSwxNDMgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBCYXNlIGNsYXNzIGZvciBzZXJpYWxpemF0aW9uIG9mIHR5cGVzIHRoYXQgZG9uJ3QgY29udGFpbiB0eXBlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9ubHkge3R5cGVfY29kZX0sCisgICAgLy8vIHt2YWx1ZV9mbGFnfSBhbmQge3ZhbHVlfS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8dHlwZXBhcmFtIG5hbWU9IlQiPlRoZSBzdXBwb3J0ZWQgdHlwZS48L3R5cGVwYXJhbT4KKyAgICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VD4gOiBJVHlwZVNlcmlhbGl6ZXIKKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJTaW1wbGVUeXBlU2VyaWFsaXplcntUfSIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByb3RlY3RlZCBTaW1wbGVUeXBlU2VyaWFsaXplcihEYXRhVHlwZSBkYXRhVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgRGF0YVR5cGUgPSBkYXRhVHlwZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgRGF0YVR5cGUgRGF0YVR5cGUgeyBnZXQ7IH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgV3JpdGVBc3luYyhvYmplY3Q/IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IFdyaXRlTnVsbGFibGVWYWx1ZUFzeW5jKChUPykgdmFsdWUsIHN0cmVhbSwgd3JpdGVyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlTnVsbGFibGVWYWx1ZUFzeW5jKG9iamVjdD8gdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlVmFsdWVGbGFnTnVsbEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZVZhbHVlRmxhZ05vbmVBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisKKyAgICAgICAgICAgIGF3YWl0IFdyaXRlVmFsdWVBc3luYygoVCkgdmFsdWUsIHN0cmVhbSwgd3JpdGVyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMob2JqZWN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IFdyaXRlVmFsdWVBc3luYygoVCkgdmFsdWUsIHN0cmVhbSwgd3JpdGVyLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gV3JpdGVzIGEgbm9uLW51bGxhYmxlIHZhbHVlIGludG8gYSBzdHJlYW0uCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idmFsdWUiPlRoZSB2YWx1ZSB0byB3cml0ZS48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIHN0cmVhbSB0byB3cml0ZSB0by48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9IndyaXRlciI+QSA8c2VlIGNyZWY9IkdyYXBoQmluYXJ5V3JpdGVyIi8+LjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+QSB0YXNrIHRoYXQgcmVwcmVzZW50cyB0aGUgYXN5bmNocm9ub3VzIHdyaXRlIG9wZXJhdGlvbi48L3JldHVybnM+CisgICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBUYXNrIFdyaXRlVmFsdWVBc3luYyhUIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpOworCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q/PiBSZWFkQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgUmVhZE51bGxhYmxlVmFsdWVBc3luYyhzdHJlYW0sIHJlYWRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxvYmplY3Q/PiBSZWFkTnVsbGFibGVWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHZhbHVlRmxhZyA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBpZiAoKHZhbHVlRmxhZyAmIDEpID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBhd2FpdCBSZWFkVmFsdWVBc3luYyhzdHJlYW0sIHJlYWRlciwgdmFsdWVGbGFnLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8b2JqZWN0PiBSZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBSZWFkVmFsdWVBc3luYyhzdHJlYW0sIHJlYWRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKSkhOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUmVhZHMgYSBub24tbnVsbGFibGUgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSB0eXBlIGZvcm1hdCB3aXRoIHRoZSB2YWx1ZSBmbGFnLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIEdyYXBoQmluYXJ5IGRhdGEgdG8gcGFyc2UuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWFkZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVJlYWRlciIvPi48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InZhbHVlRmxhZyI+VGhlIHZhbHVlIGZsYWcgYnl0ZSB0aGF0IHdhcyByZWFkLjwvcGFyYW0+CisgICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY2FuY2VsbGF0aW9uVG9rZW4iPlRoZSB0b2tlbiB0byBjYW5jZWwgdGhlIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgTm9uZS48L3BhcmFtPgorICAgICAgICAvLy8gPHJldHVybnM+VGhlIHJlYWQgdmFsdWUuPC9yZXR1cm5zPgorICAgICAgICAvLy8gPHJlbWFya3M+CisgICAgICAgIC8vLyBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBoYW5kbGUgdHlwZS1zcGVjaWZpYyB2YWx1ZSBmbGFncyAoZS5nLiwgYnVsa2VkIGZvcm1hdCBmb3IgTGlzdCkuCisgICAgICAgIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWxlZ2F0ZXMgdG8gPHNlZSBjcmVmPSJSZWFkVmFsdWVBc3luYyhTdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyLCBDYW5jZWxsYXRpb25Ub2tlbikiLz4uCisgICAgICAgIC8vLyA8L3JlbWFya3M+CisgICAgICAgIHByb3RlY3RlZCB2aXJ0dWFsIFRhc2s8VD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLCBieXRlIHZhbHVlRmxhZywKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgcmVhZGVyLCBjYW5jZWxsYXRpb25Ub2tlbik7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBSZWFkcyBhIG5vbi1udWxsYWJsZSB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHR5cGUgZm9ybWF0LgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmVhbSI+VGhlIEdyYXBoQmluYXJ5IGRhdGEgdG8gcGFyc2UuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWFkZXIiPkEgPHNlZSBjcmVmPSJHcmFwaEJpbmFyeVJlYWRlciIvPi48L3BhcmFtPgorICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImNhbmNlbGxhdGlvblRva2VuIj5UaGUgdG9rZW4gdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIE5vbmUuPC9wYXJhbT4KKyAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSByZWFkIHZhbHVlLjwvcmV0dXJucz4KKyAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IFRhc2s8VD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvU2luZ2xlVHlwZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9TaW5nbGVUeXBlU2VyaWFsaXplci5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTY0NTgxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvU2luZ2xlVHlwZVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSwxMzMgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0LlR5cGVzCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcm92aWRlcyBzZXJpYWxpemVycyBmb3IgdHlwZXMgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBzaW5nbGUgdmFsdWUgYW5kIHRoYXQgY2FuIGJlIHJlYWQgYW5kIHdyaXRlIGluIGEKKyAgICAvLy8gc2luZ2xlIG9wZXJhdGlvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2luZ2xlVHlwZVNlcmlhbGl6ZXJzCisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iaW50Ii8+IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTaW5nbGVUeXBlU2VyaWFsaXplcjxpbnQ+IEludFNlcmlhbGl6ZXIgPSBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8aW50PihEYXRhVHlwZS5JbnQsCisgICAgICAgICAgICAodmFsdWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5Xcml0ZUludEFzeW5jKHZhbHVlLCBjYW5jZWxsYXRpb25Ub2tlbiksCisgICAgICAgICAgICAoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikpOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJsb25nIi8+IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTaW5nbGVUeXBlU2VyaWFsaXplcjxsb25nPiBMb25nU2VyaWFsaXplciA9IG5ldyBTaW5nbGVUeXBlU2VyaWFsaXplcjxsb25nPihEYXRhVHlwZS5Mb25nLAorICAgICAgICAgICAgKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uV3JpdGVMb25nQXN5bmModmFsdWUsIGNhbmNlbGxhdGlvblRva2VuKSwKKyAgICAgICAgICAgIChzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uUmVhZExvbmdBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikpOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJkb3VibGUiLz4gdmFsdWVzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNpbmdsZVR5cGVTZXJpYWxpemVyPGRvdWJsZT4gRG91YmxlU2VyaWFsaXplciA9CisgICAgICAgICAgICBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8ZG91YmxlPihEYXRhVHlwZS5Eb3VibGUsCisgICAgICAgICAgICAgICAgKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uV3JpdGVEb3VibGVBc3luYyh2YWx1ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLAorICAgICAgICAgICAgICAgIChzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uUmVhZERvdWJsZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKSk7CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gQSBzZXJpYWxpemVyIGZvciA8c2VlIGNyZWY9ImZsb2F0Ii8+IHZhbHVlcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTaW5nbGVUeXBlU2VyaWFsaXplcjxmbG9hdD4gRmxvYXRTZXJpYWxpemVyID0KKyAgICAgICAgICAgIG5ldyBTaW5nbGVUeXBlU2VyaWFsaXplcjxmbG9hdD4oRGF0YVR5cGUuRmxvYXQsCisgICAgICAgICAgICAgICAgKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uV3JpdGVGbG9hdEFzeW5jKHZhbHVlLCBjYW5jZWxsYXRpb25Ub2tlbiksCisgICAgICAgICAgICAgICAgKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5SZWFkRmxvYXRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikpOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJzaG9ydCIvPiB2YWx1ZXMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8c2hvcnQ+IFNob3J0U2VyaWFsaXplciA9CisgICAgICAgICAgICBuZXcgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8c2hvcnQ+KERhdGFUeXBlLlNob3J0LAorICAgICAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlU2hvcnRBc3luYyh2YWx1ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLAorICAgICAgICAgICAgICAgIChzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uUmVhZFNob3J0QXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0iYm9vbCIvPiB2YWx1ZXMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8Ym9vbD4gQm9vbGVhblNlcmlhbGl6ZXIgPQorICAgICAgICAgICAgbmV3IFNpbmdsZVR5cGVTZXJpYWxpemVyPGJvb2w+KERhdGFUeXBlLkJvb2xlYW4sCisgICAgICAgICAgICAgICAgKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKSA9PiBzdHJlYW0uV3JpdGVCb29sQXN5bmModmFsdWUsIGNhbmNlbGxhdGlvblRva2VuKSwKKyAgICAgICAgICAgICAgICAoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLlJlYWRCb29sQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyBBIHNlcmlhbGl6ZXIgZm9yIDxzZWUgY3JlZj0ic2J5dGUiLz4gdmFsdWVzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNpbmdsZVR5cGVTZXJpYWxpemVyPHNieXRlPiBCeXRlU2VyaWFsaXplciA9IG5ldyBTaW5nbGVUeXBlU2VyaWFsaXplcjxzYnl0ZT4oRGF0YVR5cGUuQnl0ZSwKKyAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlU0J5dGVBc3luYyh2YWx1ZSwgY2FuY2VsbGF0aW9uVG9rZW4pLAorICAgICAgICAgICAgKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pID0+IHN0cmVhbS5SZWFkU0J5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikpOworCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIEEgc2VyaWFsaXplciBmb3IgPHNlZSBjcmVmPSJNYXJrZXIiLz4gdmFsdWVzLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNpbmdsZVR5cGVTZXJpYWxpemVyPE1hcmtlcj4gTWFya2VyU2VyaWFsaXplciA9IG5ldyBTaW5nbGVUeXBlU2VyaWFsaXplcjxNYXJrZXI+KERhdGFUeXBlLk1hcmtlciwKKyAgICAgICAgICAgICh2YWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4gc3RyZWFtLldyaXRlQnl0ZUFzeW5jKHZhbHVlLlZhbHVlLCBjYW5jZWxsYXRpb25Ub2tlbiksCisgICAgICAgICAgICBhc3luYyAoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikgPT4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFya2VyVmFsdWUgPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBNYXJrZXIuT2YobWFya2VyVmFsdWUpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUmVwcmVzZW50cyBhIHNlcmlhbGl6ZXIgZm9yIHR5cGVzIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgc2luZ2xlIHZhbHVlIGFuZCB0aGF0IGNhbiBiZSByZWFkIGFuZCB3cml0ZSBpbiBhCisgICAgLy8vIHNpbmdsZSBvcGVyYXRpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgY2xhc3MgU2luZ2xlVHlwZVNlcmlhbGl6ZXI8VD4gOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxUPgorICAgIHsKKyAgICAgICAgcHJpdmF0ZSByZWFkb25seSBGdW5jPFQsIFN0cmVhbSwgQ2FuY2VsbGF0aW9uVG9rZW4sIFRhc2s+IF93cml0ZUZ1bmM7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgRnVuYzxTdHJlYW0sIENhbmNlbGxhdGlvblRva2VuLCBUYXNrPFQ+PiBfcmVhZEZ1bmM7CisKKyAgICAgICAgaW50ZXJuYWwgU2luZ2xlVHlwZVNlcmlhbGl6ZXIoRGF0YVR5cGUgZGF0YVR5cGUsIEZ1bmM8VCwgU3RyZWFtLCBDYW5jZWxsYXRpb25Ub2tlbiwgVGFzaz4gd3JpdGVGdW5jLAorICAgICAgICAgICAgRnVuYzxTdHJlYW0sIENhbmNlbGxhdGlvblRva2VuLCBUYXNrPFQ+PiByZWFkRnVuYykKKyAgICAgICAgICAgIDogYmFzZShkYXRhVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgX3dyaXRlRnVuYyA9IHdyaXRlRnVuYzsKKyAgICAgICAgICAgIF9yZWFkRnVuYyA9IHJlYWRGdW5jOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhUIHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF3YWl0IF93cml0ZUZ1bmMuSW52b2tlKHZhbHVlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VD4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlYWRGdW5jLkludm9rZShzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvU3RyaW5nU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1N0cmluZ1NlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjY2U1NAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1N0cmluZ1NlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw2MiBAQAor77u/I3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGV4dDsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSA8c2VlIGNyZWY9InN0cmluZyIvPiBzZXJpYWxpemVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIFN0cmluZ1NlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxzdHJpbmc+CisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iU3RyaW5nU2VyaWFsaXplciIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBTdHJpbmdTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlN0cmluZykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhzdHJpbmcgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gRW5jb2RpbmcuVVRGOC5HZXRCeXRlcyh2YWx1ZSk7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMoYnl0ZXMuTGVuZ3RoLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhieXRlcywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxzdHJpbmc+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGxlbmd0aCA9IChpbnQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8aW50PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBuZXcgYnl0ZVtsZW5ndGhdOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLlJlYWRBc3luYyhieXRlcywgMCwgbGVuZ3RoLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIEVuY29kaW5nLlVURjguR2V0U3RyaW5nKGJ5dGVzKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9VdWlkU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1V1aWRTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZWNiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9VdWlkU2VyaWFsaXplci5jcwpAQCAtMCwwICsxLDExMSBAQAor77u/I3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uSU87Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQuVHlwZXMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEEgc2VyaWFsaXplciB0aGF0IHNlcmlhbGl6ZXMgPHNlZSBjcmVmPSJHdWlkIi8+IHZhbHVlcyBhcyBVdWlkIGluIEdyYXBoQmluYXJ5LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIFV1aWRTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8R3VpZD4KKyAgICB7CisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJVdWlkU2VyaWFsaXplciIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBVdWlkU2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5VdWlkKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVWYWx1ZUFzeW5jKEd1aWQgdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gdmFsdWUuVG9CeXRlQXJyYXkoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gZmlyc3QgNCBieXRlcyBpbiByZXZlcnNlIG9yZGVyOgorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzNdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzJdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzFdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzBdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyAyIGJ5dGVzIGluIHJldmVyc2Ugb3JkZXI6CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbNV0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbNF0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIDMgYnl0ZXMgaW4gcmV2ZXJzZSBvcmRlcjoKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1s3XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1s2XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gMyBieXRlczoKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1s4XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1s5XSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gbGFzdCA2IGJ5dGVzOgorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzEwXSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1sxMV0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMTJdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKGJ5dGVzWzEzXSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYyhieXRlc1sxNF0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoYnl0ZXNbMTVdLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrPEd1aWQ+IFJlYWRWYWx1ZUFzeW5jKFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGJ5dGVzID0gbmV3IGJ5dGVbMTZdOworCisgICAgICAgICAgICAvLyBmaXJzdCA0IGJ5dGVzIGluIHJldmVyc2Ugb3JkZXI6CisgICAgICAgICAgICBieXRlc1szXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBieXRlc1syXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBieXRlc1sxXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBieXRlc1swXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIDIgYnl0ZXMgaW4gcmV2ZXJzZSBvcmRlcjoKKyAgICAgICAgICAgIGJ5dGVzWzVdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJ5dGVzWzRdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gMiBieXRlcyBpbiByZXZlcnNlIG9yZGVyOgorICAgICAgICAgICAgYnl0ZXNbN10gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYnl0ZXNbNl0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyAyIGJ5dGVzOgorICAgICAgICAgICAgYnl0ZXNbOF0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYnl0ZXNbOV0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBsYXN0IDYgYnl0ZXM6CisgICAgICAgICAgICBieXRlc1sxMF0gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYnl0ZXNbMTFdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJ5dGVzWzEyXSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBieXRlc1sxM10gPSBhd2FpdCBzdHJlYW0uUmVhZEJ5dGVBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYnl0ZXNbMTRdID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGJ5dGVzWzE1XSA9IGF3YWl0IHN0cmVhbS5SZWFkQnl0ZUFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBuZXcgR3VpZChieXRlcyk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjRhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9UeXBlcy9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw3OCBAQAorI3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSA8c2VlIGNyZWY9IlZlcnRleFByb3BlcnR5Ii8+IHNlcmlhbGl6ZXIgZm9yIEdyYXBoQmluYXJ5IDQuMC4KKyAgICAvLy8gSW4gdjQsIGxhYmVscyBhcmUgc2VyaWFsaXplZCBhcyBMaXN0IG9mIFN0cmluZ3MgaW5zdGVhZCBvZiBhIHNpbmdsZSBTdHJpbmcuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgY2xhc3MgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyIDogU2ltcGxlVHlwZVNlcmlhbGl6ZXI8VmVydGV4UHJvcGVydHk+CisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iVmVydGV4UHJvcGVydHlTZXJpYWxpemVyIiAvPiBjbGFzcy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHVibGljIFZlcnRleFByb3BlcnR5U2VyaWFsaXplcigpIDogYmFzZShEYXRhVHlwZS5WZXJ0ZXhQcm9wZXJ0eSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhWZXJ0ZXhQcm9wZXJ0eSB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5JZCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKG5ldyBMaXN0PHN0cmluZz4geyB2YWx1ZS5MYWJlbCB9LCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyh2YWx1ZS5WYWx1ZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBwbGFjZWhvbGRlciBmb3IgdGhlIHBhcmVudCB2ZXJ0ZXgKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIgZm9yIHByb3BlcnRpZXMKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8aW5oZXJpdGRvYyAvPgorICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgVGFzazxWZXJ0ZXhQcm9wZXJ0eT4gUmVhZFZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAorICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaWQgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBsYWJlbExpc3QgPSAoTGlzdDxzdHJpbmc/Pilhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxMaXN0PHN0cmluZz8+PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgbGFiZWwgPSBsYWJlbExpc3QuQ291bnQgPiAwID8gbGFiZWxMaXN0WzBdID8/ICIiIDogIiI7CisgICAgICAgICAgICB2YXIgdmFsdWUgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKworICAgICAgICAgICAgLy8gZGlzY2FyZCB0aGUgcGFyZW50IHZlcnRleAorICAgICAgICAgICAgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7CisgICAgICAgICAgICB2YXIgcHJvcGVydGllc0FzQXJyYXkgPSBudWxsID09IHByb3BlcnRpZXMgPyBBcnJheS5FbXB0eTxvYmplY3Q+KCkgOiAocHJvcGVydGllcyBhcyBMaXN0PG9iamVjdD4pPy5Ub0FycmF5KCk7CisKKyAgICAgICAgICAgIHJldHVybiBuZXcgVmVydGV4UHJvcGVydHkoaWQsIGxhYmVsLCB2YWx1ZSwgbnVsbCwgcHJvcGVydGllc0FzQXJyYXkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvVHlwZXMvVmVydGV4U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1ZlcnRleFNlcmlhbGl6ZXIuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhZDdiZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1R5cGVzL1ZlcnRleFNlcmlhbGl6ZXIuY3MKQEAgLTAsMCArMSw2OCBAQAorI3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NC5UeXBlcworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSA8c2VlIGNyZWY9IlZlcnRleCIvPiBzZXJpYWxpemVyIGZvciBHcmFwaEJpbmFyeSA0LjAuCisgICAgLy8vIEluIHY0LCBsYWJlbHMgYXJlIHNlcmlhbGl6ZWQgYXMgTGlzdCBvZiBTdHJpbmdzIGluc3RlYWQgb2YgYSBzaW5nbGUgU3RyaW5nLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgcHVibGljIGNsYXNzIFZlcnRleFNlcmlhbGl6ZXIgOiBTaW1wbGVUeXBlU2VyaWFsaXplcjxWZXJ0ZXg+CisgICAgeworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iVmVydGV4U2VyaWFsaXplciIgLz4gY2xhc3MuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHB1YmxpYyBWZXJ0ZXhTZXJpYWxpemVyKCkgOiBiYXNlKERhdGFUeXBlLlZlcnRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxpbmhlcml0ZG9jIC8+CisgICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlVmFsdWVBc3luYyhWZXJ0ZXggdmFsdWUsIFN0cmVhbSBzdHJlYW0sIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlciwKKyAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKKyAgICAgICAgeworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmModmFsdWUuSWQsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhuZXcgTGlzdDxzdHJpbmc+IHsgdmFsdWUuTGFiZWwgfSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMobnVsbCwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOyAvLyBwcm9wZXJ0aWVzCisgICAgICAgIH0KKworICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KKyAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIFRhc2s8VmVydGV4PiBSZWFkVmFsdWVBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCisgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpZCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOworICAgICAgICAgICAgdmFyIGxhYmVsTGlzdCA9IChMaXN0PHN0cmluZz8+KWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPExpc3Q8c3RyaW5nPz4+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBsYWJlbCA9IGxhYmVsTGlzdC5Db3VudCA+IDAgPyBsYWJlbExpc3RbMF0gPz8gIiIgOiAiIjsKKworICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzQXNBcnJheSA9IG51bGwgPT0gcHJvcGVydGllcyA/IEFycmF5LkVtcHR5PG9iamVjdD4oKSA6IChwcm9wZXJ0aWVzIGFzIExpc3Q8b2JqZWN0Pik/LlRvQXJyYXkoKTsKKworICAgICAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXgoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzQXNBcnJheSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0JpZ0ludGVnZXJEZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0JpZ0ludGVnZXJEZXNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNGFlZDkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9CaWdJbnRlZ2VyRGVzZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLk51bWVyaWNzOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEJpZ0ludGVnZXJEZXNlcmlhbGl6ZXIgOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbiwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYmlnSW50ZWdlciA9IGdyYXBoc29uLlZhbHVlS2luZCA9PSBKc29uVmFsdWVLaW5kLlN0cmluZyA/IGdyYXBoc29uLkdldFN0cmluZygpIDogZ3JhcGhzb24uR2V0UmF3VGV4dCgpOwotICAgICAgICAgICAgaWYgKGJpZ0ludGVnZXIgPT0gbnVsbCkgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJSZWFkIG51bGwsIGJ1dCBleHBlY3RlZCBhIEJpZ0ludGVnZXIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlci5QYXJzZShiaWdJbnRlZ2VyKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0JpZ0ludGVnZXJTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9CaWdJbnRlZ2VyU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBiM2Y0MC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0JpZ0ludGVnZXJTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uTnVtZXJpY3M7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBCaWdJbnRlZ2VyU2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQmlnSW50ZWdlciB2YWx1ZSA9IG9iamVjdERhdGE7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZSgiQmlnSW50ZWdlciIsIHZhbHVlLlRvU3RyaW5nKCksICJneCIpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQmluZGluZ1NlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0JpbmRpbmdTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjk5YWU4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQmluZGluZ1NlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgQmluZGluZ1NlcmlhbGl6ZXIgOiBJR3JhcGhTT05TZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IERpY3RpZnkoZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBiaW5kaW5nID0gKEJpbmRpbmcpIG9iamVjdERhdGE7Ci0gICAgICAgICAgICB2YXIgdmFsdWVEaWN0ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHdyaXRlci5Ub0RpY3QoYmluZGluZy5WYWx1ZSl9LAotICAgICAgICAgICAgICAgIHsia2V5IiwgYmluZGluZy5LZXl9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUobmFtZW9mKEJpbmRpbmcpLCB2YWx1ZURpY3QpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnVsa1NldFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0J1bGtTZXRTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTEwODIxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnVsa1NldFNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEJ1bGtTZXRTZXJpYWxpemVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgZHluYW1pYyBPYmplY3RpZnkoSnNvbkVsZW1lbnQgZ3JhcGhzb25PYmplY3QsIEdyYXBoU09OUmVhZGVyIHJlYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGdyYXBoc29uT2JqZWN0LlZhbHVlS2luZCAhPSBKc29uVmFsdWVLaW5kLkFycmF5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdDxvYmplY3Q+KDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBjb2VyY2UgdGhlIEJ1bGtTZXQgdG8gTGlzdC4gaWYgdGhlIGJ1bGsgZXhjZWVkcyB0aGUgaW50IHNwYWNlIHRoZW4gd2UgY2FuJ3QgY29lcmNlIHRvIExpc3QgYW55d2F5LCAKLSAgICAgICAgICAgIC8vIHNvIHRoaXMgcXVlcnkgd2lsbCBiZSB0cm91YmxlLiB3ZSdkIG5lZWQgYSBsZWdpdCBCdWxrU2V0IGltcGxlbWVudGF0aW9uIGhlcmUgaW4gQyMuIHRoaXMgY3VycmVudCAKLSAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIGhlcmUgdG8gcmVwbGljYXRlIHRoZSBwcmV2aW91cyBmdW5jdGlvbmFsaXR5IHRoYXQgZXhpc3RlZCBvbiB0aGUgc2VydmVyIHNpZGUgaW4gCi0gICAgICAgICAgICAvLyBwcmV2aW91cyB2ZXJzaW9ucy4KLSAgICAgICAgICAgIHJldHVybiBFbnVtZXJhYmxlLlJhbmdlKDAsIGdyYXBoc29uT2JqZWN0LkdldEFycmF5TGVuZ3RoKCkgLyAyKS5TZWxlY3RNYW55PGludCwgb2JqZWN0PihpID0+Ci0gICAgICAgICAgICAgICAgRW51bWVyYWJsZS5SZXBlYXQ8b2JqZWN0PihyZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3RbaSAqIDJdKSwKLSAgICAgICAgICAgICAgICAgICAgKGludCkgcmVhZGVyLlRvT2JqZWN0KGdyYXBoc29uT2JqZWN0W2kgKiAyICsgMV0pISkpLlRvTGlzdCgpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnl0ZUJ1ZmZlckRlc2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnl0ZUJ1ZmZlckRlc2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzAxYjE3YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0J5dGVCdWZmZXJEZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEJ5dGVCdWZmZXJEZXNlcmlhbGl6ZXIgOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYmFzZTY0U3RyaW5nID0gZ3JhcGhzb25PYmplY3QuR2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKGJhc2U2NFN0cmluZyA/PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCBidXQgZXhwZWN0ZWQgYSBiYXNlNjQgYnl0ZSBzdHJpbmciKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9CeXRlQnVmZmVyU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZjdlOTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9CeXRlQnVmZmVyU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEJ5dGVCdWZmZXJTZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gdmFsdWUgPSBvYmplY3REYXRhOwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUoIkJ5dGVCdWZmZXIiLCBDb252ZXJ0LlRvQmFzZTY0U3RyaW5nKHZhbHVlKSwgImd4Iik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9CeXRlY29kZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0J5dGVjb2RlU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIyOGMxMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0J5dGVjb2RlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEJ5dGVjb2RlU2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIGJ5dGVjb2RlT2JqLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJ5dGVjb2RlIGJ5dGVjb2RlID0gYnl0ZWNvZGVPYmo7Ci0KLSAgICAgICAgICAgIHZhciB2YWx1ZURpY3QgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIElFbnVtZXJhYmxlPElFbnVtZXJhYmxlPGR5bmFtaWM+Pj4oKTsKLSAgICAgICAgICAgIGlmIChieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMuQ291bnQgPiAwKQotICAgICAgICAgICAgICAgIHZhbHVlRGljdFsic291cmNlIl0gPSBEaWN0aWZ5SW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9ucywgd3JpdGVyKTsKLSAgICAgICAgICAgIGlmIChieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zLkNvdW50ID4gMCkKLSAgICAgICAgICAgICAgICB2YWx1ZURpY3RbInN0ZXAiXSA9IERpY3RpZnlJbnN0cnVjdGlvbnMoYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9ucywgd3JpdGVyKTsKLQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUobmFtZW9mKEJ5dGVjb2RlKSwgdmFsdWVEaWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgSUVudW1lcmFibGU8SUVudW1lcmFibGU8ZHluYW1pYz4+IERpY3RpZnlJbnN0cnVjdGlvbnMoSUVudW1lcmFibGU8SW5zdHJ1Y3Rpb24+IGluc3RydWN0aW9ucywKLSAgICAgICAgICAgIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucy5TZWxlY3QoaW5zdHJ1Y3Rpb24gPT4gRGljdGlmeUluc3RydWN0aW9uKGluc3RydWN0aW9uLCB3cml0ZXIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgSUVudW1lcmFibGU8ZHluYW1pYz4gRGljdGlmeUluc3RydWN0aW9uKEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgTGlzdDxkeW5hbWljPiB7aW5zdHJ1Y3Rpb24uT3BlcmF0b3JOYW1lfTsKLSAgICAgICAgICAgIHJlc3VsdC5BZGRSYW5nZShpbnN0cnVjdGlvbi5Bcmd1bWVudHMuU2VsZWN0KGFyZyA9PiB3cml0ZXIuVG9EaWN0KGFyZykpKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9DaGFyQ29udmVydGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9DaGFyQ29udmVydGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGEwNTBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQ2hhckNvbnZlcnRlci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgQ2hhckNvbnZlcnRlciA6IE51bWJlckNvbnZlcnRlcjxjaGFyPgotICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBHcmFwaFNPTlR5cGVOYW1lID0+ICJDaGFyIjsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBQcmVmaXggPT4gImd4IjsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGJvb2wgU3RyaW5naWZ5VmFsdWUgPT4gdHJ1ZTsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGR5bmFtaWMgRnJvbUpzb25FbGVtZW50KEpzb25FbGVtZW50IGdyYXBoc29uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkQnl0ZSA9IGdyYXBoc29uLkdldFN0cmluZygpID8/IHRocm93IG5ldyBJT0V4Y2VwdGlvbigiUmVhZCBudWxsIGJ1dCBleHBlY3RlZCBhIHN0cmluZyIpOwotICAgICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplZEJ5dGVbMF07Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9DbGFzc1NlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0NsYXNzU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVkZjM4Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0NsYXNzU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgQ2xhc3NTZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdHlwZSA9IChUeXBlKSBvYmplY3REYXRhOwotCi0gICAgICAgICAgICAvLyB0cnkgdG8gY3JlYXRlIHRoZSBUeXBlIGFuZCB0aGVuIGFjY2VzcyB0aGUgRnFjbiBwcm9wZXJ0eS4gaWYgdGhhdCdzIG5vdCB0aGVyZSB0aGVuCi0gICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24KLSAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IEFjdGl2YXRvci5DcmVhdGVJbnN0YW5jZSh0eXBlKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgID8/IHRocm93IG5ldyBJT0V4Y2VwdGlvbigkIkNhbm5vdCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2Yge3R5cGUuRnVsbE5hbWV9Iik7Ci0gICAgICAgICAgICB2YXIgZnFjblByb3BlcnR5ID0gdHlwZS5HZXRQcm9wZXJ0eSgiRnFjbiIpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8/IHRocm93IG5ldyBJT0V4Y2VwdGlvbigkIlRoZSB0eXBlIHt0eXBlLkZ1bGxOYW1lfSBkb2VzIG5vdCBoYXZlIGEgJ0ZxY24nIHByb3BlcnR5Iik7Ci0gICAgICAgICAgICB2YXIgZnFjblZhbHVlID0gZnFjblByb3BlcnR5LkdldFZhbHVlKGluc3RhbmNlKSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PyB0aHJvdyBuZXcgSU9FeGNlcHRpb24oJCJUaGUgJ0ZxY24nIHByb3BlcnR5IG9mIHt0eXBlLkZ1bGxOYW1lfSBpcyBudWxsIik7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZSgiQ2xhc3MiLCBmcWNuVmFsdWUpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vRFREZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RURGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzY5ZmZlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vRFREZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBEVERlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEVC5HZXRCeVZhbHVlKGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpID8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oJCJSZWFkIG51bGwgYnV0IGV4cGVjdGVkIGEge25hbWVvZihEVCl9IHN0cmluZyByZXByZXNlbnRhdGlvbiIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RhdGVEZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RhdGVEZXNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MzI3MTMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9EYXRlRGVzZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBEYXRlRGVzZXJpYWxpemVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBEYXRlVGltZU9mZnNldCBVbml4U3RhcnQgPSBuZXcgRGF0ZVRpbWVPZmZzZXQoMTk3MCwgMSwgMSwgMCwgMCwgMCwgMCwgVGltZVNwYW4uWmVybyk7Ci0KLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBncmFwaHNvbk9iamVjdC5HZXRJbnQ2NCgpOwotICAgICAgICAgICAgcmV0dXJuIFVuaXhTdGFydC5BZGRUaWNrcyhUaW1lU3Bhbi5UaWNrc1Blck1pbGxpc2Vjb25kICogbWlsbGlzZWNvbmRzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RlY2ltYWxDb252ZXJ0ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RlY2ltYWxDb252ZXJ0ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3MzZiMzguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9EZWNpbWFsQ29udmVydGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkdsb2JhbGl6YXRpb247Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgRGVjaW1hbENvbnZlcnRlciA6IE51bWJlckNvbnZlcnRlcjxkZWNpbWFsPgotICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBHcmFwaFNPTlR5cGVOYW1lID0+ICJCaWdEZWNpbWFsIjsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBQcmVmaXggPT4gImd4IjsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGJvb2wgU3RyaW5naWZ5VmFsdWUgPT4gdHJ1ZTsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGR5bmFtaWMgRnJvbUpzb25FbGVtZW50KEpzb25FbGVtZW50IGdyYXBoc29uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZ3JhcGhzb24uVmFsdWVLaW5kID09IEpzb25WYWx1ZUtpbmQuU3RyaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBkZWNpbWFsLlBhcnNlKAotICAgICAgICAgICAgICAgICAgICBncmFwaHNvbi5HZXRTdHJpbmcoKSA/PyB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCBidXQgZXhwZWN0ZWQgYSBkZWNpbWFsIHN0cmluZyIpLAotICAgICAgICAgICAgICAgICAgICBDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBncmFwaHNvbi5HZXREZWNpbWFsKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9EaXJlY3Rpb25EZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RpcmVjdGlvbkRlc2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU2YjI5OS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RpcmVjdGlvbkRlc2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIERpcmVjdGlvbkRlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBEaXJlY3Rpb24uR2V0QnlWYWx1ZShncmFwaHNvbk9iamVjdC5HZXRTdHJpbmcoKSA/PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCJSZWFkIG51bGwgYnV0IGV4cGVjdGVkIGEge25hbWVvZihEaXJlY3Rpb24pfSBzdHJpbmcgcmVwcmVzZW50YXRpb24iKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9Eb3VibGVDb252ZXJ0ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RvdWJsZUNvbnZlcnRlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc2YmJjOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0RvdWJsZUNvbnZlcnRlci5jcworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBEb3VibGVDb252ZXJ0ZXIgOiBOdW1iZXJDb252ZXJ0ZXI8ZG91YmxlPgotICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBHcmFwaFNPTlR5cGVOYW1lID0+ICJEb3VibGUiOwotICAgICAgICBwcml2YXRlIGNvbnN0IHN0cmluZyBOYU4gPSAiTmFOIjsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBzdHJpbmcgUG9zaXRpdmVJbmZpbml0eSA9ICJJbmZpbml0eSI7Ci0gICAgICAgIHByaXZhdGUgY29uc3Qgc3RyaW5nIE5lZ2F0aXZlSW5maW5pdHkgPSAiLUluZmluaXR5IjsKLQotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZHluYW1pYyBGcm9tSnNvbkVsZW1lbnQoSnNvbkVsZW1lbnQgZ3JhcGhzb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChncmFwaHNvbi5WYWx1ZUtpbmQgPT0gSnNvblZhbHVlS2luZC5TdHJpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChncmFwaHNvbi5HZXRTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgTmFOOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvdWJsZS5OYU47Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9zaXRpdmVJbmZpbml0eToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb3VibGUuUG9zaXRpdmVJbmZpbml0eTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBOZWdhdGl2ZUluZmluaXR5OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvdWJsZS5OZWdhdGl2ZUluZmluaXR5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gIAotICAgICAgICAgICAgcmV0dXJuIGdyYXBoc29uLkdldERvdWJsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIG9iamVjdCBDb252ZXJ0SW52YWxpZE51bWJlcihkb3VibGUgbnVtYmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZG91YmxlLklzTmFOKG51bWJlcikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvdWJsZS5Jc1Bvc2l0aXZlSW5maW5pdHkobnVtYmVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUG9zaXRpdmVJbmZpbml0eTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvdWJsZS5Jc05lZ2F0aXZlSW5maW5pdHkobnVtYmVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTmVnYXRpdmVJbmZpbml0eTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG51bWJlcjsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0R1cmF0aW9uRGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9EdXJhdGlvbkRlc2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNjODNkYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0R1cmF0aW9uRGVzZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLXVzaW5nIFN5c3RlbS5YbWw7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBEdXJhdGlvbkRlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpOwotICAgICAgICAgICAgcmV0dXJuIFhtbENvbnZlcnQuVG9UaW1lU3BhbihkdXJhdGlvbiA/PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhZCBudWxsIGJ1dCBleHBlY3RlZCBhIER1cmF0aW9uIHN0cmluZyByZXByZXNlbnRhdGlvbiIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0R1cmF0aW9uU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vRHVyYXRpb25TZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGQ1NDliLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vRHVyYXRpb25TZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uWG1sOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgRHVyYXRpb25TZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBUaW1lU3BhbiB2YWx1ZSA9IG9iamVjdERhdGE7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZSgiRHVyYXRpb24iLCBYbWxDb252ZXJ0LlRvU3RyaW5nKHZhbHVlKSwgImd4Iik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9FZGdlRGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9FZGdlRGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWRkYTQzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vRWRnZURlc2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEVkZ2VEZXNlcmlhbGl6ZXIgOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgb3V0VklkID0gcmVhZGVyLlRvT2JqZWN0KGdyYXBoc29uT2JqZWN0LkdldFByb3BlcnR5KCJvdXRWIikpOwotICAgICAgICAgICAgc3RyaW5nIG91dFZMYWJlbCA9IGdyYXBoc29uT2JqZWN0LlRyeUdldFByb3BlcnR5KCJvdXRWTGFiZWwiLCBvdXQgdmFyIG91dFZMYWJlbFByb3BlcnR5KQotICAgICAgICAgICAgICAgID8gb3V0VkxhYmVsUHJvcGVydHkuR2V0U3RyaW5nKCkhCi0gICAgICAgICAgICAgICAgOiBWZXJ0ZXguRGVmYXVsdExhYmVsOwotICAgICAgICAgICAgdmFyIG91dFYgPSBuZXcgVmVydGV4KG91dFZJZCwgb3V0VkxhYmVsKTsKLSAgICAgICAgICAgIHZhciBpblZJZCA9IHJlYWRlci5Ub09iamVjdChncmFwaHNvbk9iamVjdC5HZXRQcm9wZXJ0eSgiaW5WIikpOwotICAgICAgICAgICAgc3RyaW5nIGluVkxhYmVsID0gZ3JhcGhzb25PYmplY3QuVHJ5R2V0UHJvcGVydHkoImluVkxhYmVsIiwgb3V0IHZhciBpblZMYWJlbFByb3BlcnR5KQotICAgICAgICAgICAgICAgID8gaW5WTGFiZWxQcm9wZXJ0eS5HZXRTdHJpbmcoKSEKLSAgICAgICAgICAgICAgICA6IFZlcnRleC5EZWZhdWx0TGFiZWw7Ci0gICAgICAgICAgICB2YXIgaW5WID0gbmV3IFZlcnRleChpblZJZCwgaW5WTGFiZWwpOwotICAgICAgICAgICAgdmFyIGVkZ2VJZCA9IHJlYWRlci5Ub09iamVjdChncmFwaHNvbk9iamVjdC5HZXRQcm9wZXJ0eSgiaWQiKSk7Ci0gICAgICAgICAgICBzdHJpbmcgZWRnZUxhYmVsID0gZ3JhcGhzb25PYmplY3QuVHJ5R2V0UHJvcGVydHkoImxhYmVsIiwgb3V0IHZhciBsYWJlbFByb3BlcnR5KQotICAgICAgICAgICAgICAgID8gbGFiZWxQcm9wZXJ0eS5HZXRTdHJpbmcoKSEKLSAgICAgICAgICAgICAgICA6ICJlZGdlIjsKLQotICAgICAgICAgICAgZHluYW1pY1tdIHByb3BlcnRpZXMgPSBBcnJheS5FbXB0eTxkeW5hbWljPigpOwotICAgICAgICAgICAgaWYgKGdyYXBoc29uT2JqZWN0LlRyeUdldFByb3BlcnR5KCJwcm9wZXJ0aWVzIiwgb3V0IHZhciBwcm9wZXJ0aWVzT2JqZWN0KQotICAgICAgICAgICAgICAgICYmIHByb3BlcnRpZXNPYmplY3QuVmFsdWVLaW5kID09IEpzb25WYWx1ZUtpbmQuT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT2JqZWN0LkVudW1lcmF0ZU9iamVjdCgpCi0gICAgICAgICAgICAgICAgICAgIC5TZWxlY3QocCA9PiByZWFkZXIuVG9PYmplY3QocC5WYWx1ZSkhKS5Ub0FycmF5KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgRWRnZShlZGdlSWQsIG91dFYsIGVkZ2VMYWJlbCwgaW5WLCBwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0VkZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9FZGdlU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRmZjEzOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0VkZ2VTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBFZGdlU2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgRWRnZSBlZGdlID0gb2JqZWN0RGF0YTsKLSAgICAgICAgICAgIHZhciBlZGdlRGljdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7ImlkIiwgd3JpdGVyLlRvRGljdChlZGdlLklkKX0sCi0gICAgICAgICAgICAgICAgeyJvdXRWIiwgd3JpdGVyLlRvRGljdChlZGdlLk91dFYuSWQpfSwKLSAgICAgICAgICAgICAgICB7Im91dFZMYWJlbCIsIGVkZ2UuT3V0Vi5MYWJlbH0sCi0gICAgICAgICAgICAgICAgeyJsYWJlbCIsIGVkZ2UuTGFiZWx9LAotICAgICAgICAgICAgICAgIHsiaW5WIiwgd3JpdGVyLlRvRGljdChlZGdlLkluVi5JZCl9LAotICAgICAgICAgICAgICAgIHsiaW5WTGFiZWwiLCBlZGdlLkluVi5MYWJlbH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZShuYW1lb2YoRWRnZSksIGVkZ2VEaWN0KTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0VudW1TZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9FbnVtU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM3N2FjYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0VudW1TZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEVudW1TZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBFbnVtV3JhcHBlciBlbnVtVG9TZXJpYWxpemUgPSBvYmplY3REYXRhOwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUoZW51bVRvU2VyaWFsaXplLkVudW1OYW1lLCBlbnVtVG9TZXJpYWxpemUuRW51bVZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0Zsb2F0Q29udmVydGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9GbG9hdENvbnZlcnRlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4ODBmMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0Zsb2F0Q29udmVydGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIEZsb2F0Q29udmVydGVyIDogTnVtYmVyQ29udmVydGVyPGZsb2F0PgotICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBHcmFwaFNPTlR5cGVOYW1lID0+ICJGbG9hdCI7Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBkeW5hbWljIEZyb21Kc29uRWxlbWVudChKc29uRWxlbWVudCBncmFwaHNvbikgPT4gZ3JhcGhzb24uR2V0U2luZ2xlKCk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR1R5cGVEZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dUeXBlRGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGNiYWVjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR1R5cGVEZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBHVHlwZURlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHVHlwZS5HZXRCeVZhbHVlKGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpID8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oJCJSZWFkIG51bGwgYnV0IGV4cGVjdGVkIGEge25hbWVvZihHVHlwZSl9IHN0cmluZyByZXByZXNlbnRhdGlvbiIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OMk1lc3NhZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjJNZXNzYWdlU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFmY2IyMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OMk1lc3NhZ2VTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFNlcmlhbGl6ZXMgZGF0YSB0byBhbmQgZnJvbSBHcmVtbGluIFNlcnZlciBpbiBHcmFwaFNPTjIgZm9ybWF0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoU09OMk1lc3NhZ2VTZXJpYWxpemVyIDogR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBzdHJpbmcgTWltZVR5cGUgPSBTZXJpYWxpemF0aW9uVG9rZW5zLkdyYXBoU09OMk1pbWVUeXBlOwotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNlZSBjcmVmPSJHcmFwaFNPTjJNZXNzYWdlU2VyaWFsaXplciIgLz4gY2xhc3Mgd2l0aCBjdXN0b20gc2VyaWFsaXplcnMuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZ3JhcGhTT05SZWFkZXIiPlRoZSA8c2VlIGNyZWY9IkdyYXBoU09OMlJlYWRlciIvPiB1c2VkIHRvIGRlc2VyaWFsaXplIGZyb20gR3JhcGhTT04uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNPTldyaXRlciI+VGhlIDxzZWUgY3JlZj0iR3JhcGhTT04yV3JpdGVyIi8+IHVzZWQgdG8gc2VyaWFsaXplIHRvIEdyYXBoU09OLjwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBHcmFwaFNPTjJNZXNzYWdlU2VyaWFsaXplcihHcmFwaFNPTjJSZWFkZXI/IGdyYXBoU09OUmVhZGVyID0gbnVsbCwgR3JhcGhTT04yV3JpdGVyPyBncmFwaFNPTldyaXRlciA9IG51bGwpCi0gICAgICAgICAgICA6IGJhc2UoTWltZVR5cGUsIGdyYXBoU09OUmVhZGVyID8/IG5ldyBHcmFwaFNPTjJSZWFkZXIoKSwgZ3JhcGhTT05Xcml0ZXIgPz8gbmV3IEdyYXBoU09OMldyaXRlcigpKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjJSZWFkZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OMlJlYWRlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBlNDZkNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OMlJlYWRlci5jcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyBIYW5kbGVzIGRlc2VyaWFsaXphdGlvbiBvZiBHcmFwaFNPTjMgZGF0YS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBHcmFwaFNPTjJSZWFkZXIgOiBHcmFwaFNPTlJlYWRlcgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiA8c2VlIGNyZWY9IkdyYXBoU09OMlJlYWRlciIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEdyYXBoU09OMlJlYWRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiA8c2VlIGNyZWY9IkdyYXBoU09OMlJlYWRlciIvPi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIEdyYXBoU09OMlJlYWRlcihJUmVhZE9ubHlEaWN0aW9uYXJ5PHN0cmluZywgSUdyYXBoU09ORGVzZXJpYWxpemVyPiBkZXNlcmlhbGl6ZXJCeUdyYXBoU09OVHlwZSkgOiAKLSAgICAgICAgICAgIGJhc2UoZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT04yV3JpdGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjJXcml0ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NDAwMjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjJXcml0ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gSGFuZGxlcyBzZXJpYWxpemF0aW9uIG9mIEdyYXBoU09OMiBkYXRhLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoU09OMldyaXRlciA6IEdyYXBoU09OV3JpdGVyCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIDxzZWUgY3JlZj0iR3JhcGhTT04yV3JpdGVyIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgR3JhcGhTT04yV3JpdGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgPHNlZSBjcmVmPSJHcmFwaFNPTjJXcml0ZXIiLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBHcmFwaFNPTjJXcml0ZXIoSVJlYWRPbmx5RGljdGlvbmFyeTxUeXBlLCBJR3JhcGhTT05TZXJpYWxpemVyPiBjdXN0b21TZXJpYWxpemVyQnlUeXBlKSA6IAotICAgICAgICAgICAgYmFzZShjdXN0b21TZXJpYWxpemVyQnlUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNhMmVjYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFNlcmlhbGl6ZXMgZGF0YSB0byBhbmQgZnJvbSBHcmVtbGluIFNlcnZlciBpbiBHcmFwaFNPTjMgZm9ybWF0LgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyIDogR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBjb25zdCBzdHJpbmcgTWltZVR5cGUgPSBTZXJpYWxpemF0aW9uVG9rZW5zLkdyYXBoU09OM01pbWVUeXBlOwotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyIiAvPiBjbGFzcyB3aXRoIGN1c3RvbSBzZXJpYWxpemVycy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNPTlJlYWRlciI+VGhlIDxzZWUgY3JlZj0iR3JhcGhTT04zUmVhZGVyIi8+IHVzZWQgdG8gZGVzZXJpYWxpemUgZnJvbSBHcmFwaFNPTi48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyYXBoU09OV3JpdGVyIj5UaGUgPHNlZSBjcmVmPSJHcmFwaFNPTjNXcml0ZXIiLz4gdXNlZCB0byBzZXJpYWxpemUgdG8gR3JhcGhTT04uPC9wYXJhbT4KLSAgICAgICAgcHVibGljIEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyKEdyYXBoU09OM1JlYWRlcj8gZ3JhcGhTT05SZWFkZXIgPSBudWxsLCBHcmFwaFNPTjNXcml0ZXI/IGdyYXBoU09OV3JpdGVyID0gbnVsbCkKLSAgICAgICAgICAgIDogYmFzZShNaW1lVHlwZSwgZ3JhcGhTT05SZWFkZXIgPz8gbmV3IEdyYXBoU09OM1JlYWRlcigpLCBncmFwaFNPTldyaXRlciA/PyBuZXcgR3JhcGhTT04zV3JpdGVyKCkpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OM1JlYWRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT04zUmVhZGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTA3MDNmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT04zUmVhZGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEhhbmRsZXMgZGVzZXJpYWxpemF0aW9uIG9mIEdyYXBoU09OMyBkYXRhLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoU09OM1JlYWRlciA6IEdyYXBoU09OUmVhZGVyCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJRGljdGlvbmFyeTxzdHJpbmcsIElHcmFwaFNPTkRlc2VyaWFsaXplcj4gR3JhcGhTT04zU3BlY2lmaWNEZXNlcmlhbGl6ZXJzID0KLSAgICAgICAgICAgIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgSUdyYXBoU09ORGVzZXJpYWxpemVyPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHsgImc6TGlzdCIsIG5ldyBMaXN0U2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICAgICAgeyAiZzpTZXQiLCBuZXcgU2V0U2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICAgICAgeyAiZzpNYXAiLCBuZXcgTWFwU2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICAgICAgeyAiZzpCdWxrU2V0IiwgbmV3IEJ1bGtTZXRTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgICAgICB7ICJnOlBhdGgiLCBuZXcgUGF0aDNEZXNlcmlhbGl6ZXIoKSB9Ci0gICAgICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgPHNlZSBjcmVmPSJHcmFwaFNPTjNSZWFkZXIiLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBHcmFwaFNPTjNSZWFkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JlYWNoICh2YXIga3YgaW4gR3JhcGhTT04zU3BlY2lmaWNEZXNlcmlhbGl6ZXJzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERlc2VyaWFsaXplcnNba3YuS2V5XSA9IGt2LlZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgPHNlZSBjcmVmPSJHcmFwaFNPTjNSZWFkZXIiLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUiPgotICAgICAgICAvLy8gICAgIE92ZXJyaWRlcyA8c2VlIGNyZWY9IklHcmFwaFNPTkRlc2VyaWFsaXplciIgLz4gaW5zdGFuY2VzIGJ5IHRoZWlyIHR5cGUgaWRlbnRpZmllci4KLSAgICAgICAgLy8vIDwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBHcmFwaFNPTjNSZWFkZXIoSVJlYWRPbmx5RGljdGlvbmFyeTxzdHJpbmcsIElHcmFwaFNPTkRlc2VyaWFsaXplcj4gZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUpIDogdGhpcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBkZXNlcmlhbGl6ZXJBbmRHcmFwaFNPTlR5cGUgaW4gZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGVzZXJpYWxpemVyc1tkZXNlcmlhbGl6ZXJBbmRHcmFwaFNPTlR5cGUuS2V5XSA9IGRlc2VyaWFsaXplckFuZEdyYXBoU09OVHlwZS5WYWx1ZTsgICAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OM1dyaXRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT04zV3JpdGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWM3NTgyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT04zV3JpdGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vIEhhbmRsZXMgc2VyaWFsaXphdGlvbiBvZiBHcmFwaFNPTjMgZGF0YS4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBjbGFzcyBHcmFwaFNPTjNXcml0ZXIgOiBHcmFwaFNPTldyaXRlcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSURpY3Rpb25hcnk8VHlwZSwgSUdyYXBoU09OU2VyaWFsaXplcj4gR3JhcGhTT04zU3BlY2lmaWNTZXJpYWxpemVycyA9Ci0gICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxUeXBlLCBJR3JhcGhTT05TZXJpYWxpemVyPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHsgdHlwZW9mKElMaXN0PG9iamVjdD4pLCBuZXcgTGlzdFNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgICAgIHsgdHlwZW9mKElTZXQ8b2JqZWN0PiksIG5ldyBTZXRTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgICAgICB7IHR5cGVvZihJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pLCBuZXcgTWFwU2VyaWFsaXplcigpIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIDxzZWUgY3JlZj0iR3JhcGhTT04zV3JpdGVyIi8+LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgR3JhcGhTT04zV3JpdGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yZWFjaCAodmFyIGt2IGluIEdyYXBoU09OM1NwZWNpZmljU2VyaWFsaXplcnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2VyaWFsaXplcnNba3YuS2V5XSA9IGt2LlZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgPHNlZSBjcmVmPSJHcmFwaFNPTjNXcml0ZXIiLz4uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VzdG9tU2VyaWFsaXplckJ5VHlwZSI+Ci0gICAgICAgIC8vLyAgICAgPHNlZSBjcmVmPSJJR3JhcGhTT05TZXJpYWxpemVyIiAvPiBzZXJpYWxpemVycyBpZGVudGlmaWVkIGJ5IHRoZWlyCi0gICAgICAgIC8vLyAgICAgPHNlZSBjcmVmPSJUeXBlIiAvPi4KLSAgICAgICAgLy8vIDwvcGFyYW0+Ci0gICAgICAgIHB1YmxpYyBHcmFwaFNPTjNXcml0ZXIoSVJlYWRPbmx5RGljdGlvbmFyeTxUeXBlLCBJR3JhcGhTT05TZXJpYWxpemVyPiBjdXN0b21TZXJpYWxpemVyQnlUeXBlKSA6IHRoaXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JlYWNoICh2YXIgc2VyaWFsaXplckFuZFR5cGUgaW4gY3VzdG9tU2VyaWFsaXplckJ5VHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTZXJpYWxpemVyc1tzZXJpYWxpemVyQW5kVHlwZS5LZXldID0gc2VyaWFsaXplckFuZFR5cGUuVmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTA4YTQyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgU2VyaWFsaXplcyBkYXRhIHRvIGFuZCBmcm9tIEdyZW1saW4gU2VydmVyIGluIEdyYXBoU09OIGZvcm1hdC4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyIDogSU1lc3NhZ2VTZXJpYWxpemVyCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBKc29uU2VyaWFsaXplck9wdGlvbnMgSnNvbkRlc2VyaWFsaXppbmdPcHRpb25zID0gbmV3IEpzb25TZXJpYWxpemVyT3B0aW9ucwotICAgICAgICAgICAge1Byb3BlcnR5TmFtaW5nUG9saWN5ID0gSnNvbk5hbWluZ1BvbGljeS5DYW1lbENhc2V9OwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmluZyBfbWltZVR5cGU7Ci0gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgR3JhcGhTT05SZWFkZXIgX2dyYXBoU09OUmVhZGVyOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IEdyYXBoU09OV3JpdGVyIF9ncmFwaFNPTldyaXRlcjsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplciIgLz4gY2xhc3MuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibWltZVR5cGUiPlRoZSBNSU1FIHR5cGUgc3VwcG9ydGVkIGJ5IHRoaXMgc2VyaWFsaXplci48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyYXBoU09OUmVhZGVyIj5UaGUgPHNlZSBjcmVmPSJHcmFwaFNPTlJlYWRlciIvPiB1c2VkIHRvIGRlc2VyaWFsaXplIGZyb20gR3JhcGhTT04uPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNvbldyaXRlciI+VGhlIDxzZWUgY3JlZj0iR3JhcGhTT05Xcml0ZXIiLz4gdXNlZCB0byBzZXJpYWxpemUgdG8gR3JhcGhTT04uPC9wYXJhbT4KLSAgICAgICAgcHJvdGVjdGVkIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXIoc3RyaW5nIG1pbWVUeXBlLCBHcmFwaFNPTlJlYWRlciBncmFwaFNPTlJlYWRlciwKLSAgICAgICAgICAgIEdyYXBoU09OV3JpdGVyIGdyYXBoU29uV3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBfbWltZVR5cGUgPSBtaW1lVHlwZTsKLSAgICAgICAgICAgIF9ncmFwaFNPTlJlYWRlciA9IGdyYXBoU09OUmVhZGVyOwotICAgICAgICAgICAgX2dyYXBoU09OV3JpdGVyID0gZ3JhcGhTb25Xcml0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIHZpcnR1YWwgVGFzazxieXRlW10+IFNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblRva2VuIGNhbmNlbGxhdGlvblRva2VuID0gZGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNhbmNlbGxhdGlvblRva2VuLkNhbkJlQ2FuY2VsZWQpIGNhbmNlbGxhdGlvblRva2VuLlRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKTsKLSAgICAgICAgICAgIHZhciBncmFwaFNPTk1lc3NhZ2UgPSBfZ3JhcGhTT05Xcml0ZXIuV3JpdGVPYmplY3QocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChFbmNvZGluZy5VVEY4LkdldEJ5dGVzKE1lc3NhZ2VXaXRoSGVhZGVyKGdyYXBoU09OTWVzc2FnZSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RyaW5nIE1lc3NhZ2VXaXRoSGVhZGVyKHN0cmluZyBtZXNzYWdlQ29udGVudCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICQieyhjaGFyKSBfbWltZVR5cGUuTGVuZ3RofXtfbWltZVR5cGV9e21lc3NhZ2VDb250ZW50fSI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPGluaGVyaXRkb2MgLz4KLSAgICAgICAgcHVibGljIHZpcnR1YWwgVGFzazxSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+Pj8+IERlc2VyaWFsaXplTWVzc2FnZUFzeW5jKGJ5dGVbXSBtZXNzYWdlLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKG5hbWVvZihtZXNzYWdlKSk7Ci0gICAgICAgICAgICBpZiAoY2FuY2VsbGF0aW9uVG9rZW4uQ2FuQmVDYW5jZWxlZCkgY2FuY2VsbGF0aW9uVG9rZW4uVGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCgpOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2UuTGVuZ3RoID09IDApIHJldHVybiBUYXNrLkZyb21SZXN1bHQ8UmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4/PihudWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBVdGY4SnNvblJlYWRlcihtZXNzYWdlKTsKLSAgICAgICAgICAgIHZhciByZXNwb25zZU1lc3NhZ2UgPQotICAgICAgICAgICAgICAgIEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPFJlc3BvbnNlTWVzc2FnZTxKc29uRWxlbWVudD4+KHJlZiByZWFkZXIsIEpzb25EZXNlcmlhbGl6aW5nT3B0aW9ucyk7Ci0gICAgICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlID09IG51bGwpIHJldHVybiBUYXNrLkZyb21SZXN1bHQ8UmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4/PihudWxsKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIGRhdGEgPSBfZ3JhcGhTT05SZWFkZXIuVG9PYmplY3QocmVzcG9uc2VNZXNzYWdlLlJlc3VsdC5EYXRhKTsKLSAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQoQ29weU1lc3NhZ2VXaXRoTmV3RGF0YShyZXNwb25zZU1lc3NhZ2UsIGRhdGEpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+IENvcHlNZXNzYWdlV2l0aE5ld0RhdGEoUmVzcG9uc2VNZXNzYWdlPEpzb25FbGVtZW50PiBvcmlnTXNnLAotICAgICAgICAgICAgZHluYW1pYyBkYXRhKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFJlc3BvbnNlUmVzdWx0PExpc3Q8b2JqZWN0Pj4oZGF0YSA9PSBudWxsID8gbnVsbCA6IG5ldyBMaXN0PG9iamVjdD4oZGF0YSksCi0gICAgICAgICAgICAgICAgb3JpZ01zZy5SZXN1bHQuTWV0YSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+KG9yaWdNc2cuUmVxdWVzdElkLCBvcmlnTXNnLlN0YXR1cywgcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OUmVhZGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTlJlYWRlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmMmVjMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OUmVhZGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgQWxsb3dzIHRvIGRlc2VyaWFsaXplIEdyYXBoU09OIHRvIG9iamVjdHMuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JhcGhTT05SZWFkZXIKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIENvbnRhaW5zIHRoZSA8c2VlIGNyZWY9IklHcmFwaFNPTkRlc2VyaWFsaXplciIgLz4gaW5zdGFuY2VzIGJ5IHRoZWlyIHR5cGUgaWRlbnRpZmllci4gCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBEaWN0aW9uYXJ5PHN0cmluZywgSUdyYXBoU09ORGVzZXJpYWxpemVyPiBEZXNlcmlhbGl6ZXJzID0gbmV3KCkKLSAgICAgICAgewotICAgICAgICAgICAgeyAiZzpUcmF2ZXJzZXIiLCBuZXcgVHJhdmVyc2VyUmVhZGVyKCkgfSwKLSAgICAgICAgICAgIHsgImc6SW50MzIiLCBuZXcgSW50MzJDb252ZXJ0ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpJbnQ2NCIsIG5ldyBJbnQ2NENvbnZlcnRlcigpIH0sCi0gICAgICAgICAgICB7ICJnOkZsb2F0IiwgbmV3IEZsb2F0Q29udmVydGVyKCkgfSwKLSAgICAgICAgICAgIHsgImc6RG91YmxlIiwgbmV3IERvdWJsZUNvbnZlcnRlcigpIH0sCi0gICAgICAgICAgICB7ICJnOkRpcmVjdGlvbiIsIG5ldyBEaXJlY3Rpb25EZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpEVCIsIG5ldyBEVERlc2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7ICJnOkdUeXBlIiwgbmV3IEdUeXBlRGVzZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgImc6TWVyZ2UiLCBuZXcgTWVyZ2VEZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpVVUlEIiwgbmV3IFV1aWREZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpEYXRlIiwgbmV3IERhdGVEZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpUaW1lc3RhbXAiLCBuZXcgRGF0ZURlc2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7ICJnOlZlcnRleCIsIG5ldyBWZXJ0ZXhEZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpFZGdlIiwgbmV3IEVkZ2VEZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZzpQcm9wZXJ0eSIsIG5ldyBQcm9wZXJ0eURlc2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7ICJnOlZlcnRleFByb3BlcnR5IiwgbmV3IFZlcnRleFByb3BlcnR5RGVzZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgImc6UGF0aCIsIG5ldyBQYXRoRGVzZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgImc6VCIsIG5ldyBURGVzZXJpYWxpemVyKCkgfSwKLQotICAgICAgICAgICAgLy9FeHRlbmRlZAotICAgICAgICAgICAgeyAiZ3g6T2Zmc2V0RGF0ZVRpbWUiLCBuZXcgT2Zmc2V0RGF0ZVRpbWVEZXNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyAiZ3g6QmlnRGVjaW1hbCIsIG5ldyBEZWNpbWFsQ29udmVydGVyKCkgfSwKLSAgICAgICAgICAgIHsgImd4OkR1cmF0aW9uIiwgbmV3IER1cmF0aW9uRGVzZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgImd4OkJpZ0ludGVnZXIiLCBuZXcgQmlnSW50ZWdlckRlc2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7ICJneDpCeXRlIiwgbmV3IFNCeXRlQ29udmVydGVyKCkgfSwKLSAgICAgICAgICAgIHsgImd4OkJ5dGVCdWZmZXIiLCBuZXcgQnl0ZUJ1ZmZlckRlc2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7ICJneDpDaGFyIiwgbmV3IENoYXJDb252ZXJ0ZXIoKSB9LAotICAgICAgICAgICAgeyAiZ3g6SW50MTYiLCBuZXcgSW50MTZDb252ZXJ0ZXIoKSB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoU09OUmVhZGVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJvdGVjdGVkIEdyYXBoU09OUmVhZGVyKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIEluaXRpYWxpemVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c2VlIGNyZWY9IkdyYXBoU09OUmVhZGVyIiAvPiBjbGFzcy4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJkZXNlcmlhbGl6ZXJCeUdyYXBoU09OVHlwZSI+Ci0gICAgICAgIC8vLyAgICAgPHNlZSBjcmVmPSJJR3JhcGhTT05EZXNlcmlhbGl6ZXIiIC8+IGRlc2VyaWFsaXplcnMgaWRlbnRpZmllZCBieSB0aGVpcgotICAgICAgICAvLy8gICAgIEdyYXBoU09OIHR5cGUuCi0gICAgICAgIC8vLyA8L3BhcmFtPgotICAgICAgICBwcm90ZWN0ZWQgR3JhcGhTT05SZWFkZXIoSVJlYWRPbmx5RGljdGlvbmFyeTxzdHJpbmcsIElHcmFwaFNPTkRlc2VyaWFsaXplcj4gZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBkZXNlcmlhbGl6ZXJBbmRHcmFwaFNPTlR5cGUgaW4gZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUpCi0gICAgICAgICAgICAgICAgRGVzZXJpYWxpemVyc1tkZXNlcmlhbGl6ZXJBbmRHcmFwaFNPTlR5cGUuS2V5XSA9IGRlc2VyaWFsaXplckFuZEdyYXBoU09OVHlwZS5WYWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBEZXNlcmlhbGl6ZXMgYSBHcmFwaFNPTiBjb2xsZWN0aW9uIHRvIGFuIG9iamVjdC4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJncmFwaFNvbkRhdGEiPlRoZSBHcmFwaFNPTiBjb2xsZWN0aW9uIHRvIGRlc2VyaWFsaXplLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgZGVzZXJpYWxpemVkIG9iamVjdC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyB2aXJ0dWFsIGR5bmFtaWMgVG9PYmplY3QoSUVudW1lcmFibGU8SnNvbkVsZW1lbnQ+IGdyYXBoU29uRGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdyYXBoU29uRGF0YS5TZWxlY3QoZ3JhcGhzb24gPT4gVG9PYmplY3QoZ3JhcGhzb24pKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBEZXNlcmlhbGl6ZXMgR3JhcGhTT04gdG8gYW4gb2JqZWN0LgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImdyYXBoU29uIj5UaGUgR3JhcGhTT04gdG8gZGVzZXJpYWxpemUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBkZXNlcmlhbGl6ZWQgb2JqZWN0LjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHZpcnR1YWwgZHluYW1pYz8gVG9PYmplY3QoSnNvbkVsZW1lbnQgZ3JhcGhTb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoZ3JhcGhTb24uVmFsdWVLaW5kKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgSnNvblZhbHVlS2luZC5BcnJheToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoU29uLkVudW1lcmF0ZUFycmF5KCkuU2VsZWN0KHQgPT4gVG9PYmplY3QodCkpOwotICAgICAgICAgICAgICAgIGNhc2UgSnNvblZhbHVlS2luZC5TdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBncmFwaFNvbi5HZXRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBjYXNlIEpzb25WYWx1ZUtpbmQuTnVsbDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgY2FzZSBKc29uVmFsdWVLaW5kLlRydWU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGNhc2UgSnNvblZhbHVlS2luZC5GYWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGNhc2UgSnNvblZhbHVlS2luZC5PYmplY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24obmFtZW9mKGdyYXBoU29uLlZhbHVlS2luZCksIGdyYXBoU29uLlZhbHVlS2luZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICQiSlNPTiB0eXBlIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChncmFwaFNvbi5UcnlHZXRQcm9wZXJ0eShHcmFwaFNPTlRva2Vucy5UeXBlS2V5LCBvdXQgdmFyIGdyYXBoU29uVHlwZVByb3BlcnR5KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gUmVhZFZhbHVlT2ZUeXBlKGdyYXBoU29uLAotICAgICAgICAgICAgICAgICAgICBncmFwaFNvblR5cGVQcm9wZXJ0eS5HZXRTdHJpbmcoKSA/PwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgR3JhcGhTT04gdHlwZSBrZXkgaXMgbm90IGEgc3RyaW5nIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFJlYWREaWN0aW9uYXJ5KGdyYXBoU29uKTsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBkeW5hbWljIFJlYWRWYWx1ZU9mVHlwZShKc29uRWxlbWVudCB0eXBlZFZhbHVlLCBzdHJpbmcgZ3JhcGhTT05UeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIURlc2VyaWFsaXplcnMuVHJ5R2V0VmFsdWUoZ3JhcGhTT05UeXBlLCBvdXQgdmFyIGRlc2VyaWFsaXplcikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oJCJEZXNlcmlhbGl6ZXIgZm9yIFwie2dyYXBoU09OVHlwZX1cIiBub3QgZm91bmQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZXIuT2JqZWN0aWZ5KHR5cGVkVmFsdWUuR2V0UHJvcGVydHkoR3JhcGhTT05Ub2tlbnMuVmFsdWVLZXkpLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBkeW5hbWljIFJlYWREaWN0aW9uYXJ5KEpzb25FbGVtZW50IGpzb25EaWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4ganNvbkRpY3QuRW51bWVyYXRlT2JqZWN0KCkKLSAgICAgICAgICAgICAgICAuVG9EaWN0aW9uYXJ5KHByb3BlcnR5ID0+IHByb3BlcnR5Lk5hbWUsIHByb3BlcnR5ID0+IFRvT2JqZWN0KHByb3BlcnR5LlZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTlRva2Vucy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05Ub2tlbnMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MGVhZmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTlRva2Vucy5jcworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBHcmFwaFNPTlRva2VucwotICAgIHsKLSAgICAgICAgcHVibGljIHN0YXRpYyBzdHJpbmcgVHlwZUtleSA9ICJAdHlwZSI7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIFZhbHVlS2V5ID0gIkB2YWx1ZSI7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIEdyZW1saW5UeXBlTmFtZXNwYWNlID0gImciOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0dyYXBoU09OVXRpbC5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05VdGlsLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTdkNGIzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05VdGlsLmNzCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICAvLy8gPHN1bW1hcnk+Ci0gICAgLy8vICAgICBQcm92aWRlcyBoZWxwZXIgbWV0aG9kcyBmb3IgR3JhcGhTT04gc2VyaWFsaXphdGlvbi4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgR3JhcGhTT05VdGlsCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgVHJhbnNmb3JtcyBhIHZhbHVlIGludG9zIGl0cyBHcmFwaFNPTiByZXByZXNlbnRhdGlvbiBpbmNsdWRpbmcgdHlwZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0eXBlbmFtZSI+VGhlIG5hbWUgb2YgdGhlIHR5cGUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ2YWx1ZSI+VGhlIHZhbHVlIHRvIHRyYW5zZm9ybS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InByZWZpeCI+QSBuYW1lc3BhY2UgcHJlZml4IGZvciB0aGUgdHlwZW5hbWUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBHcmFwaFNPTiByZXByZXNlbnRhdGlvbiBpbmNsdWRpbmcgdHlwZSBpbmZvcm1hdGlvbi48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IFRvVHlwZWRWYWx1ZShzdHJpbmcgdHlwZW5hbWUsIGR5bmFtaWMgdmFsdWUsIHN0cmluZyBwcmVmaXggPSAiZyIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0eXBlZFZhbHVlID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHtHcmFwaFNPTlRva2Vucy5UeXBlS2V5LCBGb3JtYXRUeXBlTmFtZShwcmVmaXgsIHR5cGVuYW1lKX0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0eXBlZFZhbHVlW0dyYXBoU09OVG9rZW5zLlZhbHVlS2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIHR5cGVkVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgRm9ybWF0cyBhIHR5cGUgbmFtZSB3aXRoIGl0cyBwcmVmaXggdG8gYSBHcmFwaFNPTiBUeXBlSUQuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZXNwYWNlUHJlZml4Ij5UaGUgbmFtZXNwYWNlIHByZWZpeCAoZGVmYXVsdCBpcyAiZyIpLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idHlwZU5hbWUiPlRoZSBuYW1lIG9mIHRoZSB0eXBlLjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgZm9ybWF0dGVkIFR5cGVJRC48L3JldHVybnM+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgc3RyaW5nIEZvcm1hdFR5cGVOYW1lKHN0cmluZyBuYW1lc3BhY2VQcmVmaXgsIHN0cmluZyB0eXBlTmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICQie25hbWVzcGFjZVByZWZpeH06e3R5cGVOYW1lfSI7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb252ZXJ0cyBhIENvbGxlY3Rpb24gdG8gYSByZXByZXNlbnRhdGlvbiBvZiBnOkxpc3Qgb3IgZzpTZXQKLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgaW50ZXJuYWwgc3RhdGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBUb0NvbGxlY3Rpb24oZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgdHlwZW5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gb2JqZWN0RGF0YSBhcyBJRW51bWVyYWJsZTsKLSAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIk9iamVjdCBtdXN0IGltcGxlbWVudCBJRW51bWVyYWJsZSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMaXN0PG9iamVjdD4oKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGNvbGxlY3Rpb24pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LkFkZCh3cml0ZXIuVG9EaWN0KGl0ZW0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBUb1R5cGVkVmFsdWUodHlwZW5hbWUsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTldyaXRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05Xcml0ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MmM3NDEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTldyaXRlci5jcworKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5EaWFnbm9zdGljcy5Db2RlQW5hbHlzaXM7Ci11c2luZyBTeXN0ZW0uTGlucTsKLXVzaW5nIFN5c3RlbS5OdW1lcmljczsKLXVzaW5nIFN5c3RlbS5UZXh0LkVuY29kaW5ncy5XZWI7Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneTsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIEFsbG93cyB0byBzZXJpYWxpemUgb2JqZWN0cyB0byBHcmFwaFNPTi4KLSAgICAvLy8gPC9zdW1tYXJ5PgotICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBHcmFwaFNPTldyaXRlcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSnNvblNlcmlhbGl6ZXJPcHRpb25zIEpzb25PcHRpb25zID0gbmV3KCkKLSAgICAgICAgICAgIHsgRW5jb2RlciA9IEphdmFTY3JpcHRFbmNvZGVyLlVuc2FmZVJlbGF4ZWRKc29uRXNjYXBpbmcgfTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBDb250YWlucyB0aGUgaW5mb3JtYXRpb24gb2Ygc2VyaWFsaXplcnMgYnkgdHlwZS4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IERpY3Rpb25hcnk8VHlwZSwgSUdyYXBoU09OU2VyaWFsaXplcj4gU2VyaWFsaXplcnMgPSBuZXcoKQotICAgICAgICB7Ci0gICAgICAgICAgICB7IHR5cGVvZihJVHJhdmVyc2FsKSwgbmV3IFRyYXZlcnNhbFNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoQnl0ZWNvZGUpLCBuZXcgQnl0ZWNvZGVTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKEJpbmRpbmcpLCBuZXcgQmluZGluZ1NlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoUmVxdWVzdE1lc3NhZ2UpLCBuZXcgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKGludCksIG5ldyBJbnQzMkNvbnZlcnRlcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihsb25nKSwgbmV3IEludDY0Q29udmVydGVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKGZsb2F0KSwgbmV3IEZsb2F0Q29udmVydGVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKGRvdWJsZSksIG5ldyBEb3VibGVDb252ZXJ0ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoR3VpZCksIG5ldyBVdWlkU2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihUeXBlKSwgbmV3IENsYXNzU2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihFbnVtV3JhcHBlciksIG5ldyBFbnVtU2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihQKSwgbmV3IFBTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKFRleHRQKSwgbmV3IFRleHRQU2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihWZXJ0ZXgpLCBuZXcgVmVydGV4U2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihFZGdlKSwgbmV3IEVkZ2VTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKFByb3BlcnR5KSwgbmV3IFByb3BlcnR5U2VyaWFsaXplcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihWZXJ0ZXhQcm9wZXJ0eSksIG5ldyBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneSksIG5ldyBUcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoSUxhbWJkYSksIG5ldyBMYW1iZGFTZXJpYWxpemVyKCkgfSwKLQotICAgICAgICAgICAgLy9FeHRlbmRlZAotICAgICAgICAgICAgeyB0eXBlb2YoRGF0ZVRpbWVPZmZzZXQpLCBuZXcgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyKCkgfSwgLy8gRGF0ZVRpbWVPZmZzZXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIE9mZnNldERhdGVUaW1lU2VyaWFsaXplciBieSBkZWZhdWx0Ci0gICAgICAgICAgICB7IHR5cGVvZihkZWNpbWFsKSwgbmV3IERlY2ltYWxDb252ZXJ0ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoVGltZVNwYW4pLCBuZXcgRHVyYXRpb25TZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKEJpZ0ludGVnZXIpLCBuZXcgQmlnSW50ZWdlclNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2Yoc2J5dGUpLCBuZXcgU0J5dGVDb252ZXJ0ZXIoKSB9LAotICAgICAgICAgICAgeyB0eXBlb2YoYnl0ZVtdKSwgbmV3IEJ5dGVCdWZmZXJTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIHsgdHlwZW9mKGNoYXIpLCBuZXcgQ2hhckNvbnZlcnRlcigpIH0sCi0gICAgICAgICAgICB7IHR5cGVvZihzaG9ydCksIG5ldyBJbnQxNkNvbnZlcnRlcigpIH0KLSAgICAgICAgfTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhTT05Xcml0ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwcm90ZWN0ZWQgR3JhcGhTT05Xcml0ZXIoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgSW5pdGlhbGl6ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDxzZWUgY3JlZj0iR3JhcGhTT05Xcml0ZXIiIC8+IGNsYXNzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImN1c3RvbVNlcmlhbGl6ZXJCeVR5cGUiPgotICAgICAgICAvLy8gICAgIDxzZWUgY3JlZj0iSUdyYXBoU09OU2VyaWFsaXplciIgLz4gc2VyaWFsaXplcnMgaWRlbnRpZmllZCBieSB0aGVpcgotICAgICAgICAvLy8gICAgIDxzZWUgY3JlZj0iVHlwZSIgLz4uCi0gICAgICAgIC8vLyA8L3BhcmFtPgotICAgICAgICBwcm90ZWN0ZWQgR3JhcGhTT05Xcml0ZXIoSVJlYWRPbmx5RGljdGlvbmFyeTxUeXBlLCBJR3JhcGhTT05TZXJpYWxpemVyPiBjdXN0b21TZXJpYWxpemVyQnlUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JlYWNoICh2YXIgc2VyaWFsaXplckFuZFR5cGUgaW4gY3VzdG9tU2VyaWFsaXplckJ5VHlwZSkKLSAgICAgICAgICAgICAgICBTZXJpYWxpemVyc1tzZXJpYWxpemVyQW5kVHlwZS5LZXldID0gc2VyaWFsaXplckFuZFR5cGUuVmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgU2VyaWFsaXplcyBhbiBvYmplY3QgdG8gR3JhcGhTT04uCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib2JqZWN0RGF0YSI+VGhlIG9iamVjdCB0byBzZXJpYWxpemUuPC9wYXJhbT4KLSAgICAgICAgLy8vIDxyZXR1cm5zPlRoZSBzZXJpYWxpemVkIEdyYXBoU09OLjwvcmV0dXJucz4KLSAgICAgICAgcHVibGljIHZpcnR1YWwgc3RyaW5nIFdyaXRlT2JqZWN0KGR5bmFtaWMgb2JqZWN0RGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLlNlcmlhbGl6ZShUb0RpY3Qob2JqZWN0RGF0YSksIEpzb25PcHRpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUcmFuc2Zvcm1zIGFuIG9iamVjdCBpbnRvIGl0cyBHcmFwaFNPTiByZXByZXNlbnRhdGlvbiBpbmNsdWRpbmcgdHlwZSBpbmZvcm1hdGlvbi4KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvYmplY3REYXRhIj5UaGUgb2JqZWN0IHRvIHRyYW5zZm9ybS48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+QSBHcmFwaFNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IHJlYWR5IHRvIGJlIHNlcmlhbGl6ZWQuPC9yZXR1cm5zPgotICAgICAgICBbcmV0dXJuOiBOb3ROdWxsSWZOb3ROdWxsKCJvYmplY3REYXRhIildCi0gICAgICAgIHB1YmxpYyBkeW5hbWljPyBUb0RpY3QoZHluYW1pYz8gb2JqZWN0RGF0YSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG9iamVjdERhdGEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG9iamVjdERhdGEuR2V0VHlwZSgpOwotCi0gICAgICAgICAgICAgICAgSUdyYXBoU09OU2VyaWFsaXplciBzZXJpYWxpemVyID0gVHJ5R2V0U2VyaWFsaXplckZvcih0eXBlKTsKLQotICAgICAgICAgICAgICAgIGlmIChzZXJpYWxpemVyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLkRpY3RpZnkob2JqZWN0RGF0YSwgdGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKElzRGljdGlvbmFyeVR5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBEaWN0VG9HcmFwaFNPTkRpY3Qob2JqZWN0RGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKElzQ29sbGVjdGlvblR5cGUodHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9uVG9HcmFwaFNPTkNvbGxlY3Rpb24ob2JqZWN0RGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0RGF0YTsgICAgICAgICAKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgSUdyYXBoU09OU2VyaWFsaXplcj8gVHJ5R2V0U2VyaWFsaXplckZvcihUeXBlIHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChTZXJpYWxpemVycy5UcnlHZXRWYWx1ZSh0eXBlLCBvdXQgdmFyIHNlcmlhbGl6ZXIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yZWFjaCAodmFyIHN1cHBvcnRlZFR5cGUgaW4gbmV3IExpc3Q8VHlwZT4oU2VyaWFsaXplcnMuS2V5cykpCi0gICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZFR5cGUuSXNBc3NpZ25hYmxlRnJvbSh0eXBlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemVyc1tzdXBwb3J0ZWRUeXBlXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbCBJc0RpY3Rpb25hcnlUeXBlKFR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHR5cGUKLSAgICAgICAgICAgICAgICAuR2V0SW50ZXJmYWNlcygpCi0gICAgICAgICAgICAgICAgLkFueShpbnRlcmZhY2VUeXBlID0+IGludGVyZmFjZVR5cGUuSXNDb25zdHJ1Y3RlZEdlbmVyaWNUeXBlCi0gICAgICAgICAgICAgICAgICAgICYmIGludGVyZmFjZVR5cGUuR2V0R2VuZXJpY1R5cGVEZWZpbml0aW9uKCkgPT0gdHlwZW9mKElFbnVtZXJhYmxlPD4pIAotICAgICAgICAgICAgICAgICAgICAmJiBpbnRlcmZhY2VUeXBlLkdlbmVyaWNUeXBlQXJndW1lbnRzWzBdIGlzIHsgSXNDb25zdHJ1Y3RlZEdlbmVyaWNUeXBlOiB0cnVlIH0gZ2VuZXJpY0FyZ3VtZW50IAotICAgICAgICAgICAgICAgICAgICAmJiBnZW5lcmljQXJndW1lbnQuR2V0R2VuZXJpY1R5cGVEZWZpbml0aW9uKCkgPT0gdHlwZW9mKEtleVZhbHVlUGFpcjwsPikpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdFRvR3JhcGhTT05EaWN0KGR5bmFtaWMgZGljdCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyYXBoU09ORGljdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4oKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBrZXlWYWx1ZSBpbiBkaWN0KQotICAgICAgICAgICAgICAgIGdyYXBoU09ORGljdC5BZGQoVG9EaWN0KGtleVZhbHVlLktleSksIFRvRGljdChrZXlWYWx1ZS5WYWx1ZSkpOwotICAgICAgICAgICAgcmV0dXJuIGdyYXBoU09ORGljdDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbCBJc0NvbGxlY3Rpb25UeXBlKFR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHR5cGUuR2V0SW50ZXJmYWNlcygpLkNvbnRhaW5zKHR5cGVvZihJQ29sbGVjdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBJRW51bWVyYWJsZTxkeW5hbWljPiBDb2xsZWN0aW9uVG9HcmFwaFNPTkNvbGxlY3Rpb24oZHluYW1pYyBjb2xsZWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3JlYWNoICh2YXIgZSBpbiBjb2xsZWN0aW9uKQotICAgICAgICAgICAgICAgIHlpZWxkIHJldHVybiBUb0RpY3QoZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0lHcmFwaFNPTkRlc2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSUdyYXBoU09ORGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWVlYTVjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSUdyYXBoU09ORGVzZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIC8vLyA8c3VtbWFyeT4KLSAgICAvLy8gICAgIFN1cHBvcnRzIGRlc2VyaWFsaXppbmcgR3JhcGhTT04gaW50byBhbiBvYmplY3QuCi0gICAgLy8vIDwvc3VtbWFyeT4KLSAgICBwdWJsaWMgaW50ZXJmYWNlIElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIERlc2VyaWFsaXplcyBHcmFwaFNPTiB0byBhbiBvYmplY3QuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iZ3JhcGhzb25PYmplY3QiPlRoZSBHcmFwaFNPTiBvYmplY3QgdG8gb2JqZWN0aWZ5LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icmVhZGVyIj5BIDxzZWUgY3JlZj0iR3JhcGhTT05SZWFkZXIiIC8+IHRoYXQgY2FuIGJlIHVzZWQgdG8gb2JqZWN0aWZ5IHByb3BlcnRpZXMgb2YgdGhlIEdyYXBoU09OIG9iamVjdC48L3BhcmFtPgotICAgICAgICAvLy8gPHJldHVybnM+VGhlIGRlc2VyaWFsaXplZCBvYmplY3QuPC9yZXR1cm5zPgotICAgICAgICBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9JR3JhcGhTT05TZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9JR3JhcGhTT05TZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGJlZmMzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSUdyYXBoU09OU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgLy8vIDxzdW1tYXJ5PgotICAgIC8vLyAgICAgU3VwcG9ydHMgc2VyaWFsaXppbmcgb2YgYW4gb2JqZWN0IHRvIEdyYXBoU09OLgotICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgcHVibGljIGludGVyZmFjZSBJR3JhcGhTT05TZXJpYWxpemVyCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgVHJhbnNmb3JtcyBhbiBvYmplY3QgaW50byBhIGRpY3Rpb25hcnkgdGhhdCByZXNlbWJsZXMgaXRzIEdyYXBoU09OIHJlcHJlc2VudGF0aW9uLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9iamVjdERhdGEiPlRoZSBvYmplY3QgdG8gZGljdGlmeS48L3BhcmFtPgotICAgICAgICAvLy8gPHBhcmFtIG5hbWU9IndyaXRlciI+QSA8c2VlIGNyZWY9IkdyYXBoU09OV3JpdGVyIiAvPiB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpY3RpZnkgcHJvcGVydGllcyBvZiB0aGUgb2JqZWN0LjwvcGFyYW0+Ci0gICAgICAgIC8vLyA8cmV0dXJucz5UaGUgR3JhcGhTT04gcmVwcmVzZW50YXRpb24uPC9yZXR1cm5zPgotICAgICAgICBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcik7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSW50MTZDb252ZXJ0ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0ludDE2Q29udmVydGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWFhNDBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSW50MTZDb252ZXJ0ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgSW50MTZDb252ZXJ0ZXIgOiBOdW1iZXJDb252ZXJ0ZXI8c2hvcnQ+Ci0gICAgewotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3RyaW5nIEdyYXBoU09OVHlwZU5hbWUgPT4gIkludDE2IjsKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIHN0cmluZyBQcmVmaXggPT4gImd4IjsKLSAgICAgICAgCi0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBkeW5hbWljIEZyb21Kc29uRWxlbWVudChKc29uRWxlbWVudCBncmFwaHNvbikgPT4gZ3JhcGhzb24uR2V0SW50MTYoKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9JbnQzMkNvbnZlcnRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSW50MzJDb252ZXJ0ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmZmYTMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9JbnQzMkNvbnZlcnRlci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBJbnQzMkNvbnZlcnRlciA6IE51bWJlckNvbnZlcnRlcjxpbnQ+Ci0gICAgewotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgc3RyaW5nIEdyYXBoU09OVHlwZU5hbWUgPT4gIkludDMyIjsKLQotICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZHluYW1pYyBGcm9tSnNvbkVsZW1lbnQoSnNvbkVsZW1lbnQgZ3JhcGhzb24pID0+IGdyYXBoc29uLkdldEludDMyKCk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSW50NjRDb252ZXJ0ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0ludDY0Q29udmVydGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzMyOGI0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vSW50NjRDb252ZXJ0ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgSW50NjRDb252ZXJ0ZXIgOiBOdW1iZXJDb252ZXJ0ZXI8bG9uZz4KLSAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdHJpbmcgR3JhcGhTT05UeXBlTmFtZSA9PiAiSW50NjQiOwotICAgICAgICAKLSAgICAgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGR5bmFtaWMgRnJvbUpzb25FbGVtZW50KEpzb25FbGVtZW50IGdyYXBoc29uKSA9PiBncmFwaHNvbi5HZXRJbnQ2NCgpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0xhbWJkYVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0xhbWJkYVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NjUyNjcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9MYW1iZGFTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIExhbWJkYVNlcmlhbGl6ZXIgOiBJR3JhcGhTT05TZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IERpY3RpZnkoZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElMYW1iZGEgbGFtYmRhID0gb2JqZWN0RGF0YTsKLSAgICAgICAgICAgIHZhciB2YWx1ZURpY3QgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJzY3JpcHQiLCBsYW1iZGEuTGFtYmRhRXhwcmVzc2lvbn0sCi0gICAgICAgICAgICAgICAgeyJsYW5ndWFnZSIsIGxhbWJkYS5MYW5ndWFnZX0sCi0gICAgICAgICAgICAgICAgeyJhcmd1bWVudHMiLCBsYW1iZGEuQXJndW1lbnRzfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwuVG9UeXBlZFZhbHVlKG5hbWVvZihMYW1iZGEpLCB2YWx1ZURpY3QpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vTGlzdFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL0xpc3RTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWE2ODVlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vTGlzdFNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBMaXN0U2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplciwgSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSVJlYWRPbmx5TGlzdDxvYmplY3Q+IEVtcHR5TGlzdCA9IEFycmF5LkVtcHR5PG9iamVjdD4oKTsKLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZ3JhcGhzb25PYmplY3QuVmFsdWVLaW5kICE9IEpzb25WYWx1ZUtpbmQuQXJyYXkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEVtcHR5TGlzdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0P1tncmFwaHNvbk9iamVjdC5HZXRBcnJheUxlbmd0aCgpXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0Lkxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IHJlYWRlci5Ub09iamVjdChncmFwaHNvbk9iamVjdFtpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBvYmplY3RbXSBpbXBsZW1lbnRzIElMaXN0PG9iamVjdD4KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IERpY3RpZnkoZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwuVG9Db2xsZWN0aW9uKG9iamVjdERhdGEsIHdyaXRlciwgIkxpc3QiKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL01hcFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL01hcFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjQ5Y2EuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9NYXBTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zOwotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgTWFwU2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplciwgSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChncmFwaHNvbk9iamVjdC5WYWx1ZUtpbmQgIT0gSnNvblZhbHVlS2luZC5BcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0Pz4oZ3JhcGhzb25PYmplY3QuR2V0QXJyYXlMZW5ndGgoKSAvIDIpOwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBncmFwaHNvbk9iamVjdC5HZXRBcnJheUxlbmd0aCgpOyBpICs9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W3JlYWRlci5Ub09iamVjdChncmFwaHNvbk9iamVjdFtpXSldID0gcmVhZGVyLlRvT2JqZWN0KGdyYXBoc29uT2JqZWN0W2kgKyAxXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEob2JqZWN0RGF0YSBpcyBJRGljdGlvbmFyeSBtYXApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJPYmplY3QgbXVzdCBpbXBsZW1lbnQgSURpY3Rpb25hcnkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0P1ttYXAuQ291bnQgKiAyXTsKLSAgICAgICAgICAgIHZhciBpbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3JlYWNoICh2YXIga2V5IGluIG1hcC5LZXlzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdFtpbmRleCsrXSA9IHdyaXRlci5Ub0RpY3Qoa2V5KTsKLSAgICAgICAgICAgICAgICByZXN1bHRbaW5kZXgrK10gPSB3cml0ZXIuVG9EaWN0KG1hcFtrZXldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwuVG9UeXBlZFZhbHVlKCJNYXAiLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vTWVyZ2VEZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL01lcmdlRGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWZmMDUyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vTWVyZ2VEZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBNZXJnZURlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBNZXJnZS5HZXRCeVZhbHVlKGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpID8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCBidXQgZXhwZWN0ZWQgYSBNZXJnZSB2YWx1ZSIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL051bWJlckNvbnZlcnRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vTnVtYmVyQ29udmVydGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTBhMjJmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vTnVtYmVyQ29udmVydGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBhYnN0cmFjdCBjbGFzcyBOdW1iZXJDb252ZXJ0ZXI8VD4gOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIsIElHcmFwaFNPTlNlcmlhbGl6ZXIgd2hlcmUgVCA6IG5vdG51bGwKLSAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBzdHJpbmcgR3JhcGhTT05UeXBlTmFtZSB7IGdldDsgfQotICAgICAgICBwcm90ZWN0ZWQgdmlydHVhbCBzdHJpbmcgUHJlZml4ID0+ICJnIjsKLSAgICAgICAgcHJvdGVjdGVkIHZpcnR1YWwgYm9vbCBTdHJpbmdpZnlWYWx1ZSA9PiBmYWxzZTsKLQotICAgICAgICBwdWJsaWMgZHluYW1pYyBPYmplY3RpZnkoSnNvbkVsZW1lbnQgZ3JhcGhzb25PYmplY3QsIEdyYXBoU09OUmVhZGVyIHJlYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEZyb21Kc29uRWxlbWVudChncmFwaHNvbk9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgZHluYW1pYyBGcm9tSnNvbkVsZW1lbnQoSnNvbkVsZW1lbnQgZ3JhcGhzb24pOwotCi0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgVCBudW1iZXIgPSBvYmplY3REYXRhOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gQ29udmVydEludmFsaWROdW1iZXIobnVtYmVyKTsKLSAgICAgICAgICAgIGlmIChTdHJpbmdpZnlWYWx1ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0cmluZy5Gb3JtYXQoQ3VsdHVyZUluZm8uSW52YXJpYW50Q3VsdHVyZSwgInswfSIsIHZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwuVG9UeXBlZFZhbHVlKEdyYXBoU09OVHlwZU5hbWUsIHZhbHVlLCBQcmVmaXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZpcnR1YWwgb2JqZWN0IENvbnZlcnRJbnZhbGlkTnVtYmVyKFQgbnVtYmVyKSA9PiBudW1iZXI7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vT2Zmc2V0RGF0ZVRpbWVEZXNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL09mZnNldERhdGVUaW1lRGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWU1OTM5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vT2Zmc2V0RGF0ZVRpbWVEZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIE9mZnNldERhdGVUaW1lRGVzZXJpYWxpemVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgZHluYW1pYyBPYmplY3RpZnkoSnNvbkVsZW1lbnQgZ3JhcGhzb25PYmplY3QsIEdyYXBoU09OUmVhZGVyIHJlYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIERhdGVUaW1lT2Zmc2V0LlBhcnNlKGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpID8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJSZWFkIG51bGwgYnV0IGV4cGVjdGVkIGEgT2Zmc2V0RGF0ZVRpbWUgdmFsdWUiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9PZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL09mZnNldERhdGVUaW1lU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5Zjk0Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL09mZnNldERhdGVUaW1lU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRlVGltZU9mZnNldCB2YWx1ZSA9IG9iamVjdERhdGE7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZSgiT2Zmc2V0RGF0ZVRpbWUiLCB2YWx1ZS5Ub1N0cmluZygiTyIpLCAiZ3giKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1BTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9QU2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUzNTU0MC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1BTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFBTZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgcHJlZGljYXRlLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFAgcCA9IHByZWRpY2F0ZTsKLSAgICAgICAgICAgIHZhciB2YWx1ZSA9IHAuT3RoZXIgPT0gbnVsbAotICAgICAgICAgICAgICAgID8gd3JpdGVyLlRvRGljdChwLlZhbHVlKQotICAgICAgICAgICAgICAgIDogbmV3IExpc3Q8ZHluYW1pYz4ge3dyaXRlci5Ub0RpY3QocC5WYWx1ZSksIHdyaXRlci5Ub0RpY3QocC5PdGhlcil9OwotICAgICAgICAgICAgdmFyIGRpY3QgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJwcmVkaWNhdGUiLCBwLk9wZXJhdG9yTmFtZX0sCi0gICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHZhbHVlfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwuVG9UeXBlZFZhbHVlKCJQIiwgZGljdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9QYXRoM0Rlc2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vUGF0aDNEZXNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5MWJhYjguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9QYXRoM0Rlc2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgUGF0aDNEZXNlcmlhbGl6ZXIgOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyAibGFiZWxzIiBpcyBhIG9iamVjdFtdIHdoZXJlIGVhY2ggaXRlbSBpcyBJU2V0PG9iamVjdD4KLSAgICAgICAgICAgIHZhciBsYWJlbFByb3BlcnR5ID0gKG9iamVjdFtdPylyZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoImxhYmVscyIpKTsKLSAgICAgICAgICAgIGlmIChsYWJlbFByb3BlcnR5ID09IG51bGwpIHRocm93IG5ldyBJT0V4Y2VwdGlvbigkIkNvdWxkIG5vdCByZWFkIHRoZSBsYWJlbHMgZm9yIHRoZSB7bmFtZW9mKFBhdGgpfSIpOwotICAgICAgICAgICAgdmFyIGxhYmVscyA9IGxhYmVsUHJvcGVydHkKLSAgICAgICAgICAgICAgICAuU2VsZWN0KHggPT4gbmV3IEhhc2hTZXQ8c3RyaW5nPigoKElTZXQ8b2JqZWN0Pil4KS5DYXN0PHN0cmluZz4oKSkpCi0gICAgICAgICAgICAgICAgLlRvTGlzdDxJU2V0PHN0cmluZz4+KCk7Ci0gICAgICAgICAgICAvLyAib2JqZWN0cyIgaXMgYW4gb2JqZWN0W10KLSAgICAgICAgICAgIG9iamVjdD9bXSBvYmplY3RzID0gcmVhZGVyLlRvT2JqZWN0KGdyYXBoc29uT2JqZWN0LkdldFByb3BlcnR5KCJvYmplY3RzIikpID8/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiQ291bGQgbm90IHJlYWQgdGhlIG9iamVjdHMgZm9yIHRoZSB7bmFtZW9mKFBhdGgpfSIpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXRoKGxhYmVscywgb2JqZWN0cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9QYXRoRGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9QYXRoRGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGMyYjhhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vUGF0aERlc2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgUGF0aERlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBsYWJlbHMgPQotICAgICAgICAgICAgICAgIGdyYXBoc29uT2JqZWN0LkdldFByb3BlcnR5KCJsYWJlbHMiKS5FbnVtZXJhdGVBcnJheSgpCi0gICAgICAgICAgICAgICAgICAgIC5TZWxlY3QocmVhZE9iakxhYmVscyA9PgotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEhhc2hTZXQ8c3RyaW5nPihyZWFkT2JqTGFiZWxzLkVudW1lcmF0ZUFycmF5KCkuU2VsZWN0KGwgPT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLkdldFN0cmluZygpID8/IHRocm93IG5ldyBJT0V4Y2VwdGlvbigiUmVhZCBudWxsIGJ1dCBleHBlY3RlZCBhIFBhdGggbGFiZWwiKSkpKQotICAgICAgICAgICAgICAgICAgICAuVG9MaXN0PElTZXQ8c3RyaW5nPj4oKTsKLSAgICAgICAgICAgIHZhciBvYmplY3RzID0gZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoIm9iamVjdHMiKS5FbnVtZXJhdGVBcnJheSgpLlNlbGVjdChvID0+IHJlYWRlci5Ub09iamVjdChvKSkKLSAgICAgICAgICAgICAgICAuVG9MaXN0KCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFBhdGgobGFiZWxzLCBvYmplY3RzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1Byb3BlcnR5RGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9Qcm9wZXJ0eURlc2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk2NTQ2Mi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1Byb3BlcnR5RGVzZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFByb3BlcnR5RGVzZXJpYWxpemVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgZHluYW1pYyBPYmplY3RpZnkoSnNvbkVsZW1lbnQgZ3JhcGhzb25PYmplY3QsIEdyYXBoU09OUmVhZGVyIHJlYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nIGtleSA9IGdyYXBoc29uT2JqZWN0LkdldFByb3BlcnR5KCJrZXkiKS5HZXRTdHJpbmcoKSE7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSByZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoInZhbHVlIikpOwotICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBncmFwaHNvbk9iamVjdC5UcnlHZXRQcm9wZXJ0eSgiZWxlbWVudCIsIG91dCB2YXIgZWxlbWVudFByb3BlcnR5KQotICAgICAgICAgICAgICAgID8gcmVhZGVyLlRvT2JqZWN0KGVsZW1lbnRQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICA6IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5KGtleSwgdmFsdWUsIGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vUHJvcGVydHlTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9Qcm9wZXJ0eVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MTdiZTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9Qcm9wZXJ0eVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5JTzsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFByb3BlcnR5U2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSBvYmplY3REYXRhOwotICAgICAgICAgICAgdmFyIGVsZW1lbnREaWN0ID0gQ3JlYXRlRWxlbWVudERpY3QocHJvcGVydHkuRWxlbWVudCwgd3JpdGVyKTsKLSAgICAgICAgICAgIHZhciB2YWx1ZURpY3QgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJrZXkiLCBwcm9wZXJ0eS5LZXl9LAotICAgICAgICAgICAgICAgIHsidmFsdWUiLCB3cml0ZXIuVG9EaWN0KHByb3BlcnR5LlZhbHVlKX0sCi0gICAgICAgICAgICAgICAgeyJlbGVtZW50IiwgZWxlbWVudERpY3R9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUobmFtZW9mKFByb3BlcnR5KSwgdmFsdWVEaWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgZHluYW1pYz8gQ3JlYXRlRWxlbWVudERpY3QoRWxlbWVudD8gZWxlbWVudCwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRFbGVtZW50ID0gd3JpdGVyLlRvRGljdChlbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChzZXJpYWxpemVkRWxlbWVudCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgJCJDb3VsZCBub3Qgd3JpdGUgdGhlIHtuYW1lb2YoUHJvcGVydHkuRWxlbWVudCl9IG9mIHRoaXMge25hbWVvZihQcm9wZXJ0eSl9LCB7bmFtZW9mKFByb3BlcnR5LkVsZW1lbnQpfToge2VsZW1lbnR9Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gZWxlbWVudERpY3QgPSBzZXJpYWxpemVkRWxlbWVudDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50RGljdC5Db250YWluc0tleShHcmFwaFNPTlRva2Vucy5WYWx1ZUtleSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRWYWx1ZVNlcmlhbGl6ZWQgPSBlbGVtZW50RGljdFtHcmFwaFNPTlRva2Vucy5WYWx1ZUtleV07Ci0gICAgICAgICAgICAgICAgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IGVsZW1lbnRWYWx1ZURpY3QgPSBlbGVtZW50VmFsdWVTZXJpYWxpemVkOwotICAgICAgICAgICAgICAgIGVsZW1lbnRWYWx1ZURpY3QuUmVtb3ZlKCJvdXRWTGFiZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50VmFsdWVEaWN0LlJlbW92ZSgiaW5WTGFiZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50VmFsdWVEaWN0LlJlbW92ZSgicHJvcGVydGllcyIpOwotICAgICAgICAgICAgICAgIGVsZW1lbnRWYWx1ZURpY3QuUmVtb3ZlKCJ2YWx1ZSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZWRFbGVtZW50OwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9SZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOTAzZWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9SZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFJlcXVlc3RNZXNzYWdlU2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UgbXNnID0gb2JqZWN0RGF0YTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJyZXF1ZXN0SWQiLCBtc2cuUmVxdWVzdElkfSwKLSAgICAgICAgICAgICAgICB7Im9wIiwgbXNnLk9wZXJhdGlvbn0sCi0gICAgICAgICAgICAgICAgeyJwcm9jZXNzb3IiLCBtc2cuUHJvY2Vzc29yfSwKLSAgICAgICAgICAgICAgICB7ImFyZ3MiLCB3cml0ZXIuVG9EaWN0KG1zZy5Bcmd1bWVudHMpfQotICAgICAgICAgICAgfTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1NCeXRlQ29udmVydGVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9TQnl0ZUNvbnZlcnRlci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUzNzIyOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1NCeXRlQ29udmVydGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBTQnl0ZUNvbnZlcnRlciA6IE51bWJlckNvbnZlcnRlcjxzYnl0ZT4KLSAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdHJpbmcgR3JhcGhTT05UeXBlTmFtZSA9PiAiQnl0ZSI7Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBzdHJpbmcgUHJlZml4ID0+ICJneCI7Ci0gICAgICAgIHByb3RlY3RlZCBvdmVycmlkZSBkeW5hbWljIEZyb21Kc29uRWxlbWVudChKc29uRWxlbWVudCBncmFwaHNvbikgPT4gZ3JhcGhzb24uR2V0U0J5dGUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1NldFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1NldFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyY2RhYWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9TZXRTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBTeXN0ZW0uTGlucTsKLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBTZXRTZXJpYWxpemVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyLCBJR3JhcGhTT05TZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgZHluYW1pYyBPYmplY3RpZnkoSnNvbkVsZW1lbnQgZ3JhcGhzb25PYmplY3QsIEdyYXBoU09OUmVhZGVyIHJlYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGdyYXBoc29uT2JqZWN0LlZhbHVlS2luZCAhPSBKc29uVmFsdWVLaW5kLkFycmF5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGFzaFNldDxvYmplY3Q+KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJU2V0PG9iamVjdD4KLSAgICAgICAgICAgIHJldHVybiBuZXcgSGFzaFNldDxvYmplY3Q/PihncmFwaHNvbk9iamVjdC5FbnVtZXJhdGVBcnJheSgpLlNlbGVjdChyZWFkZXIuVG9PYmplY3QpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub0NvbGxlY3Rpb24ob2JqZWN0RGF0YSwgd3JpdGVyLCAiU2V0Iik7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9URGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9URGVzZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDAyZTBjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVERlc2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UZXh0Lkpzb247Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFREZXNlcmlhbGl6ZXIgOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gVC5HZXRCeVZhbHVlKGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpPz8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiUmVhZCBudWxsIGJ1dCBleHBlY3RlZCBhIHtuYW1lb2YoVCl9IHN0cmluZyByZXByZXNlbnRhdGlvbiIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1RleHRQU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVGV4dFBTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzAyZjU4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVGV4dFBTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFRleHRQU2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIHByZWRpY2F0ZSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0UCBwID0gcHJlZGljYXRlOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gcC5PdGhlciA9PSBudWxsCi0gICAgICAgICAgICAgICAgPyB3cml0ZXIuVG9EaWN0KHAuVmFsdWUpCi0gICAgICAgICAgICAgICAgOiBuZXcgTGlzdDxkeW5hbWljPiB7d3JpdGVyLlRvRGljdChwLlZhbHVlKSwgd3JpdGVyLlRvRGljdChwLk90aGVyKX07Ci0gICAgICAgICAgICB2YXIgZGljdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7InByZWRpY2F0ZSIsIHAuT3BlcmF0b3JOYW1lfSwKLSAgICAgICAgICAgICAgICB7InZhbHVlIiwgdmFsdWV9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUoIlRleHRQIiwgZGljdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1RyYXZlcnNhbFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1RyYXZlcnNhbFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ZWJkMjEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9UcmF2ZXJzYWxTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFRyYXZlcnNhbFNlcmlhbGl6ZXIgOiBJR3JhcGhTT05TZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IERpY3RpZnkoZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElUcmF2ZXJzYWwgdHJhdmVyc2FsID0gb2JqZWN0RGF0YTsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IHRyYXZlcnNhbC5CeXRlY29kZTsKLSAgICAgICAgICAgIHJldHVybiB3cml0ZXIuVG9EaWN0KGJ5dGVjb2RlKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1RyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2U2NmFjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneTsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneSBzdHJhdGVneSA9IG9iamVjdERhdGE7Ci0gICAgICAgICAgICB2YXIgc3RyYXREYXRhID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHsiZnFjbiIsIHN0cmF0ZWd5LkZxY259LAotICAgICAgICAgICAgICAgIHsiY29uZiIsIHdyaXRlci5Ub0RpY3Qoc3RyYXRlZ3kuQ29uZmlndXJhdGlvbil9LAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwuVG9UeXBlZFZhbHVlKHN0cmF0ZWd5LlN0cmF0ZWd5TmFtZSwgc3RyYXREYXRhKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1RyYXZlcnNlclJlYWRlci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVHJhdmVyc2VyUmVhZGVyLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTEyODBkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVHJhdmVyc2VyUmVhZGVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgVHJhdmVyc2VyUmVhZGVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgZHluYW1pYyBPYmplY3RpZnkoSnNvbkVsZW1lbnQgZ3JhcGhzb25PYmplY3QsIEdyYXBoU09OUmVhZGVyIHJlYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ1bGtPYmogPSByZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoImJ1bGsiKSk7Ci0gICAgICAgICAgICB2YXIgdmFsdWVPYmogPSByZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoInZhbHVlIikpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmF2ZXJzZXIodmFsdWVPYmosIGJ1bGtPYmopOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVXVpZERlc2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVXVpZERlc2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI5YjA3Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1V1aWREZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgVXVpZERlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB1dWlkU3RyaW5nID0gZ3JhcGhzb25PYmplY3QuR2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAodXVpZFN0cmluZyA9PSBudWxsKSB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlJlYWQgbnVsbCBidXQgZXhwZWN0ZWQgYSBHVUlEIHN0cmluZyByZXByZXNlbnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIEd1aWQuUGFyc2UodXVpZFN0cmluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9VdWlkU2VyaWFsaXplci5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVXVpZFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzU1ZGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9VdWlkU2VyaWFsaXplci5jcworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgVXVpZFNlcmlhbGl6ZXIgOiBJR3JhcGhTT05TZXJpYWxpemVyCi0gICAgewotICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IERpY3RpZnkoZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEd1aWQgZ3VpZCA9IG9iamVjdERhdGE7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZSgiVVVJRCIsIGd1aWQpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVmVydGV4RGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9WZXJ0ZXhEZXNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlODg3ZjYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9WZXJ0ZXhEZXNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFZlcnRleERlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBpZCA9IHJlYWRlci5Ub09iamVjdChncmFwaHNvbk9iamVjdC5HZXRQcm9wZXJ0eSgiaWQiKSk7Ci0gICAgICAgICAgICBzdHJpbmcgbGFiZWwgPSBncmFwaHNvbk9iamVjdC5UcnlHZXRQcm9wZXJ0eSgibGFiZWwiLCBvdXQgdmFyIGxhYmVsUHJvcGVydHkpCi0gICAgICAgICAgICAgICAgPyBsYWJlbFByb3BlcnR5LkdldFN0cmluZygpIQotICAgICAgICAgICAgICAgIDogVmVydGV4LkRlZmF1bHRMYWJlbDsKLQotICAgICAgICAgICAgZHluYW1pY1tdIHByb3BlcnRpZXMgPSBBcnJheS5FbXB0eTxkeW5hbWljPigpOwotICAgICAgICAgICAgaWYgKGdyYXBoc29uT2JqZWN0LlRyeUdldFByb3BlcnR5KCJwcm9wZXJ0aWVzIiwgb3V0IHZhciBwcm9wZXJ0aWVzT2JqZWN0KQotICAgICAgICAgICAgICAgICYmIHByb3BlcnRpZXNPYmplY3QuVmFsdWVLaW5kID09IEpzb25WYWx1ZUtpbmQuT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzT2JqZWN0LkVudW1lcmF0ZU9iamVjdCgpCi0gICAgICAgICAgICAgICAgICAgIC5TZWxlY3RNYW55KHAgPT4gKHJlYWRlci5Ub09iamVjdChwLlZhbHVlKSBhcyBJRW51bWVyYWJsZTxvYmplY3Q+KSEpLlRvQXJyYXkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXgoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1ZlcnRleFByb3BlcnR5RGVzZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9WZXJ0ZXhQcm9wZXJ0eURlc2VyaWFsaXplci5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM3OThmNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1ZlcnRleFByb3BlcnR5RGVzZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkxpbnE7Ci11c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgaW50ZXJuYWwgY2xhc3MgVmVydGV4UHJvcGVydHlEZXNlcmlhbGl6ZXIgOiBJR3JhcGhTT05EZXNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljIE9iamVjdGlmeShKc29uRWxlbWVudCBncmFwaHNvbk9iamVjdCwgR3JhcGhTT05SZWFkZXIgcmVhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgaWQgPSByZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoImlkIikpOwotICAgICAgICAgICAgc3RyaW5nIGxhYmVsID0gZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoImxhYmVsIikuR2V0U3RyaW5nKCkhOwotICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGdyYXBoc29uT2JqZWN0LkdldFByb3BlcnR5KCJ2YWx1ZSIpKTsKLSAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBncmFwaHNvbk9iamVjdC5UcnlHZXRQcm9wZXJ0eSgidmVydGV4Iiwgb3V0IHZhciB2ZXJ0ZXhQcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICA/IG5ldyBWZXJ0ZXgocmVhZGVyLlRvT2JqZWN0KHZlcnRleFByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICA6IG51bGw7Ci0KLSAgICAgICAgICAgIFByb3BlcnR5W10gcHJvcGVydGllcyA9IFN5c3RlbS5BcnJheS5FbXB0eTxQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIGlmIChncmFwaHNvbk9iamVjdC5UcnlHZXRQcm9wZXJ0eSgicHJvcGVydGllcyIsIG91dCB2YXIgcHJvcGVydGllc09iamVjdCkKLSAgICAgICAgICAgICAgICAmJiBwcm9wZXJ0aWVzT2JqZWN0LlZhbHVlS2luZCA9PSBKc29uVmFsdWVLaW5kLk9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllc09iamVjdC5FbnVtZXJhdGVPYmplY3QoKQotICAgICAgICAgICAgICAgICAgICAuU2VsZWN0KHAgPT4gbmV3IFByb3BlcnR5KHAuTmFtZSwgcmVhZGVyLlRvT2JqZWN0KHAuVmFsdWUpKSkuVG9BcnJheSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhQcm9wZXJ0eShpZCwgbGFiZWwsIHZhbHVlLCB2ZXJ0ZXgsIHByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYjhhOTIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIGludGVybmFsIGNsYXNzIFZlcnRleFByb3BlcnR5U2VyaWFsaXplciA6IElHcmFwaFNPTlNlcmlhbGl6ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICAgICAgewotICAgICAgICAgICAgVmVydGV4UHJvcGVydHkgdmVydGV4UHJvcGVydHkgPSBvYmplY3REYXRhOwotICAgICAgICAgICAgdmFyIHZhbHVlRGljdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7ImlkIiwgd3JpdGVyLlRvRGljdCh2ZXJ0ZXhQcm9wZXJ0eS5JZCl9LAotICAgICAgICAgICAgICAgIHsibGFiZWwiLCB2ZXJ0ZXhQcm9wZXJ0eS5MYWJlbH0sCi0gICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHdyaXRlci5Ub0RpY3QodmVydGV4UHJvcGVydHkuVmFsdWUpfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGlmICh2ZXJ0ZXhQcm9wZXJ0eS5WZXJ0ZXggIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZURpY3QuQWRkKCJ2ZXJ0ZXgiLCB3cml0ZXIuVG9EaWN0KHZlcnRleFByb3BlcnR5LlZlcnRleC5JZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUobmFtZW9mKFZlcnRleFByb3BlcnR5KSwgdmFsdWVEaWN0KTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1ZlcnRleFNlcmlhbGl6ZXIuY3MgYi9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL0dyYXBoU09OL1ZlcnRleFNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlZjEyOTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9WZXJ0ZXhTZXJpYWxpemVyLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBWZXJ0ZXhTZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBWZXJ0ZXggdmVydGV4ID0gb2JqZWN0RGF0YTsKLSAgICAgICAgICAgIHZhciB2ZXJ0ZXhEaWN0ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHsiaWQiLCB3cml0ZXIuVG9EaWN0KHZlcnRleC5JZCl9LAotICAgICAgICAgICAgICAgIHsibGFiZWwiLCB3cml0ZXIuVG9EaWN0KHZlcnRleC5MYWJlbCl9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC5Ub1R5cGVkVmFsdWUobmFtZW9mKFZlcnRleCksIHZlcnRleERpY3QpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vU2VyaWFsaXphdGlvblRva2Vucy5jcyBiL2dyZW1saW4tZG90bmV0L3NyYy9HcmVtbGluLk5ldC9TdHJ1Y3R1cmUvSU8vU2VyaWFsaXphdGlvblRva2Vucy5jcwppbmRleCBiOTRlMmU2Li5iZWMwNDk0IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvR3JlbWxpbi5OZXQvU3RydWN0dXJlL0lPL1NlcmlhbGl6YXRpb25Ub2tlbnMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvc3JjL0dyZW1saW4uTmV0L1N0cnVjdHVyZS9JTy9TZXJpYWxpemF0aW9uVG9rZW5zLmNzCkBAIC0yOSwxOCArMjksOCBAQAogICAgIHB1YmxpYyBjbGFzcyBTZXJpYWxpemF0aW9uVG9rZW5zCiAgICAgewogICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyAgICAgVGhlIE1JTUUgdHlwZSBmb3IgR3JhcGhTT04gMi4KKyAgICAgICAgLy8vICAgICBUaGUgTUlNRSB0eXBlIGZvciBHcmFwaEJpbmFyeSA0LjAuCiAgICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBzdHJpbmcgR3JhcGhTT04yTWltZVR5cGUgPSAiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjIuMCtqc29uIjsKLSAgICAgICAgCi0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vICAgICBUaGUgTUlNRSB0eXBlIGZvciBHcmFwaFNPTiAzLgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIEdyYXBoU09OM01pbWVUeXBlID0gImFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbiI7Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gICAgIFRoZSBNSU1FIHR5cGUgZm9yIEdyYXBoQmluYXJ5IDEuCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBjb25zdCBzdHJpbmcgR3JhcGhCaW5hcnkxTWltZVR5cGUgPSAiYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAiOworICAgICAgICBwdWJsaWMgY29uc3Qgc3RyaW5nIEdyYXBoQmluYXJ5NE1pbWVUeXBlID0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIjsKICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvc3JjL3BvbS54bWwgYi9ncmVtbGluLWRvdG5ldC9zcmMvcG9tLnhtbAppbmRleCAyNjBlMWI1Li41MGEzYjJhIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC9zcmMvcG9tLnhtbAorKysgYi9ncmVtbGluLWRvdG5ldC9zcmMvcG9tLnhtbApAQCAtMjEsNyArMjEsNyBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWRvdG5ldDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tZG90bmV0LXNvdXJjZTwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4uTmV0IC0gU291cmNlPC9uYW1lPgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5CZW5jaG1hcmtzL0NvbXByZXNzaW9uQmVuY2htYXJrcy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuQmVuY2htYXJrcy9Db21wcmVzc2lvbkJlbmNobWFya3MuY3MKaW5kZXggMTE1NWE1NC4uYWM1MWUxNyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5CZW5jaG1hcmtzL0NvbXByZXNzaW9uQmVuY2htYXJrcy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkJlbmNobWFya3MvQ29tcHJlc3Npb25CZW5jaG1hcmtzLmNzCkBAIC05LDcgKzksNyBAQAogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgKgogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KQEAgLTI0LDggKzI0LDYgQEAKIHVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuUmVtb3RlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwogdXNpbmcgc3RhdGljIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLkFub255bW91c1RyYXZlcnNhbFNvdXJjZTsKIHVzaW5nIHN0YXRpYyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5fXzsKIApAQCAtMzMsMjkgKzMxLDE3IEBACiAKIHB1YmxpYyBjbGFzcyBDb21wcmVzc2lvbkJlbmNobWFya3MKIHsKLSAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgR3JhcGhTT05XaXRob3V0Q29tcHJlc3Npb24oKQotICAgIHsKLSAgICAgICAgdmFyIGNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA0NTk0MCksIG5ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigpLAotICAgICAgICAgICAgZGlzYWJsZUNvbXByZXNzaW9uOiB0cnVlKTsKLSAgICAgICAgYXdhaXQgUGVyZm9ybUJlbmNobWFya1dpdGhDbGllbnQoY2xpZW50KTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBhc3luYyBUYXNrIEdyYXBoU09OV2l0aENvbXByZXNzaW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgNDU5NDApLCBuZXcgR3JhcGhTT04zTWVzc2FnZVNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgIGF3YWl0IFBlcmZvcm1CZW5jaG1hcmtXaXRoQ2xpZW50KGNsaWVudCk7Ci0gICAgfQotICAgIAogICAgIHB1YmxpYyBzdGF0aWMgYXN5bmMgVGFzayBHcmFwaEJpbmFyeVdpdGhvdXRDb21wcmVzc2lvbigpCiAgICAgewotICAgICAgICB2YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoImxvY2FsaG9zdCIsIDQ1OTQwKSwgbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIoKSwKLSAgICAgICAgICAgIGRpc2FibGVDb21wcmVzc2lvbjogdHJ1ZSk7CisgICAgICAgIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgNDU5NDApLAorICAgICAgICAgICAgY29ubmVjdGlvblNldHRpbmdzOiBuZXcgQ29ubmVjdGlvblNldHRpbmdzIHsgRW5hYmxlQ29tcHJlc3Npb24gPSBmYWxzZSB9KTsKICAgICAgICAgYXdhaXQgUGVyZm9ybUJlbmNobWFya1dpdGhDbGllbnQoY2xpZW50KTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgc3RhdGljIGFzeW5jIFRhc2sgR3JhcGhCaW5hcnlXaXRoQ29tcHJlc3Npb24oKQogICAgIHsKLSAgICAgICAgdmFyIGNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA0NTk0MCksIG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyKCkpOworICAgICAgICB2YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoImxvY2FsaG9zdCIsIDQ1OTQwKSwKKyAgICAgICAgICAgIGNvbm5lY3Rpb25TZXR0aW5nczogbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEVuYWJsZUNvbXByZXNzaW9uID0gdHJ1ZSB9KTsKICAgICAgICAgYXdhaXQgUGVyZm9ybUJlbmNobWFya1dpdGhDbGllbnQoY2xpZW50KTsKICAgICB9CiAKQEAgLTY3LDQgKzUzLDQgQEAKICAgICAgICAgICAgIGF3YWl0IGcuVigpLlJlcGVhdChCb3RoKCkpLlRpbWVzKDEwKS5FbWl0KCkuRm9sZCgpLlByb21pc2UodCA9PiB0LlRvTGlzdCgpKTsKICAgICAgICAgfQogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkJlbmNobWFya3MvTWVzc2FnZVNlcmlhbGl6ZXJCZW5jaG1hcmtzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5CZW5jaG1hcmtzL01lc3NhZ2VTZXJpYWxpemVyQmVuY2htYXJrcy5jcwppbmRleCA2ZWUzZjFkLi4yNWM0NDI3IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkJlbmNobWFya3MvTWVzc2FnZVNlcmlhbGl6ZXJCZW5jaG1hcmtzLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuQmVuY2htYXJrcy9NZXNzYWdlU2VyaWFsaXplckJlbmNobWFya3MuY3MKQEAgLTI4LDggKzI4LDcgQEAKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKIHVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKIHVzaW5nIHN0YXRpYyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2U7CiB1c2luZyBzdGF0aWMgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuX187CiB1c2luZyBzdGF0aWMgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuUDsKQEAgLTM5LDcwICszOCw1NiBAQAogICAgIFtNZW1vcnlEaWFnbm9zZXJdCiAgICAgcHVibGljIGNsYXNzIE1lc3NhZ2VTZXJpYWxpemVyQmVuY2htYXJrcwogICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQnl0ZWNvZGUgRW1wdHlCeXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHcmVtbGluTGFuZyBFbXB0eUdyZW1saW5MYW5nID0gbmV3IEdyZW1saW5MYW5nKCk7CiAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQnl0ZWNvZGUgU29tZUJ5dGVjb2RlID0gVHJhdmVyc2FsKCkuV2l0aChudWxsKS5XaXRoQ29tcHV0ZXIoKS5WKCkuCi0gICAgICAgICAgICBIYXMoIk5hbWUiLCAibWFya28iKS4KLSAgICAgICAgICAgIFdoZXJlKAotICAgICAgICAgICAgICAgIE91dCgia25vd3MiKS4KLSAgICAgICAgICAgICAgICBIYXMoIm5hbWUiLCBXaXRoaW4obmV3IExpc3Q8c3RyaW5nPiB7InN0ZXBoZW4iLCAicGV0ZXIiLCAiam9zaCJ9KSkuCi0gICAgICAgICAgICAgICAgQ291bnQoKS4KLSAgICAgICAgICAgICAgICBJcyhHdCgzKSkpLgotICAgICAgICAgICAgSGFzKCJiaXJ0aERhdGUiLCBMdChEYXRlVGltZU9mZnNldC5QYXJzZSgiMTk4MC0wMS0wMSAwMDowMDowMCIpKSkuCi0gICAgICAgICAgICBCeXRlY29kZTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR3JlbWxpbkxhbmcgU29tZUdyZW1saW5MYW5nID0gQnVpbGRTb21lR3JlbWxpbkxhbmcoKTsKIAotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBSZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0TWVzc2FnZVdpdGhFbXB0eUJ5dGVjb2RlID0gUmVxdWVzdE1lc3NhZ2VGb3IoRW1wdHlCeXRlY29kZSk7Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBSZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0TWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlRm9yKFNvbWVCeXRlY29kZSk7Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHN0YXRpYyBSZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0TWVzc2FnZUZvcihCeXRlY29kZSBieXRlY29kZSkgPT4gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0J5dGVjb2RlKQotICAgICAgICAgICAgLlByb2Nlc3NvcihUb2tlbnMuUHJvY2Vzc29yVHJhdmVyc2FsKS5PdmVycmlkZVJlcXVlc3RJZChHdWlkLk5ld0d1aWQoKSkKLSAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnc0dyZW1saW4sIGJ5dGVjb2RlKS5DcmVhdGUoKTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgR3JlbWxpbkxhbmcgQnVpbGRTb21lR3JlbWxpbkxhbmcoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZHQgPSBEYXRlVGltZU9mZnNldC5QYXJzZSgiMTk4MC0wMS0wMSAwMDowMDowMCIpOworICAgICAgICAgICAgcmV0dXJuIFRyYXZlcnNhbCgpLldpdGgobnVsbCkuV2l0aENvbXB1dGVyKCkuVigpCisgICAgICAgICAgICAgICAgLkhhcygiTmFtZSIsICJtYXJrbyIpCisgICAgICAgICAgICAgICAgLldoZXJlKAorICAgICAgICAgICAgICAgICAgICBPdXQoImtub3dzIikKKyAgICAgICAgICAgICAgICAgICAgLkhhcygibmFtZSIsIFdpdGhpbihuZXcgTGlzdDxzdHJpbmc+IHsic3RlcGhlbiIsICJwZXRlciIsICJqb3NoIn0pKQorICAgICAgICAgICAgICAgICAgICAuQ291bnQoKQorICAgICAgICAgICAgICAgICAgICAuSXMoR3QoMykpKQorICAgICAgICAgICAgICAgIC5IYXMoImJpcnRoRGF0ZSIsIEx0KGR0KSkKKyAgICAgICAgICAgICAgICAuR3JlbWxpbkxhbmc7CisgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyIEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyID0KLSAgICAgICAgICAgIG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFJlcXVlc3RNZXNzYWdlIFJlcXVlc3RNZXNzYWdlV2l0aEVtcHR5R3JlbWxpbkxhbmcgPQorICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2VGb3IoRW1wdHlHcmVtbGluTGFuZyk7CiAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR3JhcGhTT04zTWVzc2FnZVNlcmlhbGl6ZXIKLSAgICAgICAgICAgIEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyID0gbmV3IEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyKCk7Ci0gICAgICAgIAorICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBSZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0TWVzc2FnZSA9CisgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZUZvcihTb21lR3JlbWxpbkxhbmcpOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIFJlcXVlc3RNZXNzYWdlIFJlcXVlc3RNZXNzYWdlRm9yKEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKSA9PgorICAgICAgICAgICAgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzLlJlcXVlc3RNZXNzYWdlLkJ1aWxkKGdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKKyAgICAgICAgICAgICAgICAuQWRkRygiZyIpCisgICAgICAgICAgICAgICAgLkFkZEJpbmRpbmdzKGdyZW1saW5MYW5nLlBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgLkNyZWF0ZSgpOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyIEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyID0gbmV3KCk7CisKICAgICAgICAgW0JlbmNobWFya10KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8Ynl0ZVtdPiBUZXN0V3JpdGVFbXB0eUJ5dGVjb2RlQmluYXJ5KCkgPT4KLSAgICAgICAgICAgIGF3YWl0IEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhSZXF1ZXN0TWVzc2FnZVdpdGhFbXB0eUJ5dGVjb2RlKQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxieXRlW10+IFRlc3RXcml0ZUVtcHR5R3JlbWxpbkxhbmdCaW5hcnkoKSA9PgorICAgICAgICAgICAgYXdhaXQgQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIuU2VyaWFsaXplTWVzc2FnZUFzeW5jKFJlcXVlc3RNZXNzYWdlV2l0aEVtcHR5R3JlbWxpbkxhbmcpCiAgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgCisKICAgICAgICAgW0JlbmNobWFya10KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8Ynl0ZVtdPiBUZXN0V3JpdGVFbXB0eUJ5dGVjb2RlR3JhcGhTT04zKCkgPT4KLSAgICAgICAgICAgIGF3YWl0IEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhSZXF1ZXN0TWVzc2FnZVdpdGhFbXB0eUJ5dGVjb2RlKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBbQmVuY2htYXJrXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxieXRlW10+IFRlc3RXcml0ZUJ5dGVjb2RlQmluYXJ5KCkgPT4KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8Ynl0ZVtdPiBUZXN0V3JpdGVHcmVtbGluTGFuZ0JpbmFyeSgpID0+CiAgICAgICAgICAgICBhd2FpdCBCaW5hcnlNZXNzYWdlU2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMoUmVxdWVzdE1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgCisKICAgICAgICAgW0JlbmNobWFya10KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8Ynl0ZVtdPiBUZXN0V3JpdGVCeXRlY29kZUdyYXBoU09OMygpID0+Ci0gICAgICAgICAgICBhd2FpdCBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMoUmVxdWVzdE1lc3NhZ2UpCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrPFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+PiBUZXN0UmVhZFNtYWxsQmluYXJ5KCkgPT4KKyAgICAgICAgICAgIGF3YWl0IEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyLkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKFRlc3RNZXNzYWdlcy5TbWFsbEJpbmFyeVJlc3BvbnNlTWVzc2FnZUJ5dGVzKQogICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7CiAKICAgICAgICAgW0JlbmNobWFya10KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2s8UmVzcG9uc2VNZXNzYWdlPExpc3Q8b2JqZWN0Pj4/PiBUZXN0UmVhZFNtYWxsUmVzcG9uc2VNZXNzYWdlQmluYXJ5KCkgPT4KLSAgICAgICAgICAgIGF3YWl0IEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyLkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKFRlc3RNZXNzYWdlcy5TbWFsbEJpbmFyeVJlc3BvbnNlTWVzc2FnZUJ5dGVzKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBbQmVuY2htYXJrXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+Pj8+IFRlc3RSZWFkU21hbGxSZXNwb25zZU1lc3NhZ2VHcmFwaFNPTjMoKSA9PgotICAgICAgICAgICAgYXdhaXQgR3JhcGhTT04zTWVzc2FnZVNlcmlhbGl6ZXIuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMoVGVzdE1lc3NhZ2VzLlNtYWxsR3JhcGhTT04zUmVzcG9uc2VNZXNzYWdlQnl0ZXMpCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgCi0gICAgICAgIFtCZW5jaG1hcmtdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrPFJlc3BvbnNlTWVzc2FnZTxMaXN0PG9iamVjdD4+Pz4gVGVzdFJlYWRCaWdSZXNwb25zZU1lc3NhZ2VCaW5hcnkoKSA9PgorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+Pj4gVGVzdFJlYWRCaWdCaW5hcnkoKSA9PgogICAgICAgICAgICAgYXdhaXQgQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMoVGVzdE1lc3NhZ2VzLkJpZ0JpbmFyeVJlc3BvbnNlTWVzc2FnZUJ5dGVzKQogICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIAotICAgICAgICBbQmVuY2htYXJrXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzazxSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+Pj8+IFRlc3RSZWFkQmlnUmVzcG9uc2VNZXNzYWdlR3JhcGhTT04zKCkgPT4KLSAgICAgICAgICAgIGF3YWl0IEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyLkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKFRlc3RNZXNzYWdlcy5CaWdHcmFwaFNPTjNSZXNwb25zZU1lc3NhZ2VCeXRlcykKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkJlbmNobWFya3MvVGVzdE1lc3NhZ2VzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5CZW5jaG1hcmtzL1Rlc3RNZXNzYWdlcy5jcwppbmRleCAzZWFlMmEyLi45ODllNTk2IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkJlbmNobWFya3MvVGVzdE1lc3NhZ2VzLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuQmVuY2htYXJrcy9UZXN0TWVzc2FnZXMuY3MKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgLy8gICBnLlYoKS5Db3VudCgpLk5leHQoKTsKICAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBieXRlW10gU21hbGxCaW5hcnlSZXNwb25zZU1lc3NhZ2VCeXRlcyA9CiAgICAgICAgIHsKLSAgICAgICAgICAgIDB4ODEsIDB4MDAsIDB4OTUsIDB4REIsIDB4RTksIDB4NDksIDB4QjQsIDB4NDUsIDB4NDgsIDB4NkIsIDB4QUYsIDB4RTEsIDB4RjAsIDB4RTAsIDB4REIsIDB4OEUsIDB4M0YsIDB4QzEsCisgICAgICAgICAgICAweDg0LCAweDAwLCAweDk1LCAweERCLCAweEU5LCAweDQ5LCAweEI0LCAweDQ1LCAweDQ4LCAweDZCLCAweEFGLCAweEUxLCAweEYwLCAweEUwLCAweERCLCAweDhFLCAweDNGLCAweEMxLAogICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhDOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgICAgICAgICAgIDB4MDQsIDB4NjgsIDB4NkYsIDB4NzMsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MkYsIDB4MzEsIDB4MzcsIDB4MzIsIDB4MkUsIDB4MzEsIDB4MzcsCiAgICAgICAgICAgICAweDJFLCAweDMwLCAweDJFLCAweDMxLCAweDNBLCAweDM0LCAweDMxLCAweDM2LCAweDM1LCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLApAQCAtNTEsNyArNTEsNyBAQAogICAgICAgICAvLwogICAgICAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGJ5dGVbXSBCaWdCaW5hcnlSZXNwb25zZU1lc3NhZ2VCeXRlcyA9CiAgICAgICAgIHsKLSAgICAgICAgICAgIDB4ODEsIDB4MDAsIDB4RjEsIDB4N0IsIDB4NkUsIDB4NjgsIDB4REQsIDB4NTQsIDB4NDUsIDB4NjQsIDB4ODQsIDB4MjYsIDB4ODYsIDB4Q0QsIDB4QUQsIDB4NTcsIDB4RjYsIDB4NDcsCisgICAgICAgICAgICAweDg0LCAweDAwLCAweEYxLCAweDdCLCAweDZFLCAweDY4LCAweERELCAweDU0LCAweDQ1LCAweDY0LCAweDg0LCAweDI2LCAweDg2LCAweENELCAweEFELCAweDU3LCAweEY2LCAweDQ3LAogICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhDOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgICAgICAgICAgIDB4MDQsIDB4NjgsIDB4NkYsIDB4NzMsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MkYsIDB4MzEsIDB4MzcsIDB4MzIsIDB4MkUsIDB4MzEsIDB4MzcsCiAgICAgICAgICAgICAweDJFLCAweDMwLCAweDJFLCAweDMxLCAweDNBLCAweDM0LCAweDMxLCAweDM0LCAweDM5LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLApAQCAtNTM1LDE0ODQgKzUzNSw1IEBACiAgICAgICAgICAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweEZFLCAweDAxCiAgICAgICAgIH07CiAKLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBieXRlW10gU21hbGxHcmFwaFNPTjNSZXNwb25zZU1lc3NhZ2VCeXRlcyA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NzIsIDB4NjUsIDB4NzEsIDB4NzUsIDB4NjUsIDB4NzMsIDB4NzQsIDB4NDksIDB4NjQsIDB4MjIsIDB4M0EsIDB4MjIsIDB4MzIsIDB4NjEsIDB4MzQsIDB4MzEsCi0gICAgICAgICAgICAweDY1LCAweDY2LCAweDY1LCAweDM0LCAweDJELCAweDYyLCAweDM3LCAweDMyLCAweDYzLCAweDJELCAweDM0LCAweDMwLCAweDMyLCAweDMwLCAweDJELCAweDYyLCAweDM0LCAweDY2LAotICAgICAgICAgICAgMHg2MiwgMHgyRCwgMHgzNCwgMHg2NCwgMHgzNSwgMHgzMiwgMHgzMiwgMHg2MywgMHgzMCwgMHgzNiwgMHg2NiwgMHg2NiwgMHgzMSwgMHg2NiwgMHgyMiwgMHgyQywgMHgyMiwgMHg3MywKLSAgICAgICAgICAgIDB4NzQsIDB4NjEsIDB4NzQsIDB4NzUsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkQsIDB4NjUsIDB4NzMsIDB4NzMsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDIyLCAweDJDLCAweDIyLCAweDYzLCAweDZGLCAweDY0LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDMwLCAweDMwLCAweDJDLCAweDIyLCAweDYxLCAweDc0LCAweDc0LAotICAgICAgICAgICAgMHg3MiwgMHg2OSwgMHg2MiwgMHg3NSwgMHg3NCwgMHg2NSwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsCi0gICAgICAgICAgICAweDIyLCAweDY4LCAweDZGLCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDJGLCAweDMxLCAweDM3LCAweDMyLCAweDJFLCAweDMxLCAweDM3LCAweDJFLCAweDMwLCAweDJFLAotICAgICAgICAgICAgMHgzMSwgMHgzQSwgMHgzNCwgMHgzMSwgMHgzOCwgMHgzMCwgMHgzOCwgMHgyMiwgMHg1RCwgMHg3RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MiwgMHg2NSwgMHg3MywgMHg3NSwgMHg2QywKLSAgICAgICAgICAgIDB4NzQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjQsIDB4NjEsIDB4NzQsIDB4NjEsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwKLSAgICAgICAgICAgIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDYyLCAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgzNiwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RCwgMHg2NSwgMHg3NCwgMHg2MSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDdELCAweDdECi0gICAgICAgIH07Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyByZWFkb25seSBieXRlW10gQmlnR3JhcGhTT04zUmVzcG9uc2VNZXNzYWdlQnl0ZXMgPQotICAgICAgICB7Ci0gICAgICAgICAgICAweDdCLCAweDIyLCAweDcyLCAweDY1LCAweDcxLCAweDc1LCAweDY1LCAweDczLCAweDc0LCAweDQ5LCAweDY0LCAweDIyLCAweDNBLCAweDIyLCAweDM1LCAweDY0LCAweDM4LCAweDMxLAotICAgICAgICAgICAgMHgzOSwgMHgzMSwgMHgzMSwgMHgzNywgMHgyRCwgMHgzNywgMHg2MywgMHgzMiwgMHgzNiwgMHgyRCwgMHgzNCwgMHg2MiwgMHgzOSwgMHg2NCwgMHgyRCwgMHg2MSwgMHgzOSwgMHgzNiwKLSAgICAgICAgICAgIDB4NjUsIDB4MkQsIDB4NjIsIDB4MzMsIDB4MzAsIDB4NjEsIDB4MzgsIDB4MzcsIDB4MzIsIDB4MzYsIDB4MzEsIDB4MzcsIDB4MzcsIDB4MzksIDB4MjIsIDB4MkMsIDB4MjIsIDB4NzMsCi0gICAgICAgICAgICAweDc0LCAweDYxLCAweDc0LCAweDc1LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZELCAweDY1LCAweDczLCAweDczLCAweDYxLCAweDY3LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg2MywgMHg2RiwgMHg2NCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMiwgMHgzMCwgMHgzMCwgMHgyQywgMHgyMiwgMHg2MSwgMHg3NCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzIsIDB4NjksIDB4NjIsIDB4NzUsIDB4NzQsIDB4NjUsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLAotICAgICAgICAgICAgMHgyMiwgMHg2OCwgMHg2RiwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHgyRiwgMHgzMSwgMHgzNywgMHgzMiwgMHgyRSwgMHgzMSwgMHgzNywgMHgyRSwgMHgzMCwgMHgyRSwKLSAgICAgICAgICAgIDB4MzEsIDB4M0EsIDB4MzQsIDB4MzEsIDB4MzUsIDB4MzAsIDB4MzQsIDB4MjIsIDB4NUQsIDB4N0QsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzIsIDB4NjUsIDB4NzMsIDB4NzUsIDB4NkMsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY0LCAweDYxLCAweDc0LCAweDYxLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsCi0gICAgICAgICAgICAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsCi0gICAgICAgICAgICAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RCwgMHg2MSwgMHg3MiwgMHg2QiwgMHg2RiwgMHgyMiwgMHgyQywgMHgyMiwgMHg2MSwgMHg2NywgMHg2NSwgMHgyMiwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDM5LCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LAotICAgICAgICAgICAgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LAotICAgICAgICAgICAgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwKLSAgICAgICAgICAgIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NjQsCi0gICAgICAgICAgICAweDYxLCAweDczLCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDZGLCAweDczLCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDZGLCAweDcwLCAweDIyLCAweDVELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLAotICAgICAgICAgICAgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwKLSAgICAgICAgICAgIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsCi0gICAgICAgICAgICAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkEsIDB4NkYsIDB4NzMsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHgzMiwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwKLSAgICAgICAgICAgIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksCi0gICAgICAgICAgICAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDcyLCAweDY5LCAweDcwLCAweDcwLCAweDZDLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwKLSAgICAgICAgICAgIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzYsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsCi0gICAgICAgICAgICAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHgzNSwgMHg3RCwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwKLSAgICAgICAgICAgIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwKLSAgICAgICAgICAgIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNiwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkQsIDB4NjEsIDB4NzIsIDB4NkIsIDB4NkYsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsCi0gICAgICAgICAgICAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMiwgMHgzOSwgMHg3RCwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwKLSAgICAgICAgICAgIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHgyMiwgMHg3NiwgMHg2MSwgMHg2NCwgMHg2MSwgMHg3MywgMHgyMiwgMHgyQywgMHgyMiwgMHg2QSwgMHg2RiwgMHg3MywgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywKLSAgICAgICAgICAgIDB4NkYsIDB4NzAsIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsCi0gICAgICAgICAgICAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELAotICAgICAgICAgICAgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwKLSAgICAgICAgICAgIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDYyLCAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHgyMiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM1LCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwKLSAgICAgICAgICAgIDB4NjUsIDB4NkMsIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsCi0gICAgICAgICAgICAweDYxLCAweDZELCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDcyLCAweDY5LCAweDcwLCAweDcwLCAweDZDLCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDZFLAotICAgICAgICAgICAgMHg2NywgMHgyMiwgMHgyQywgMHgyMiwgMHg2QSwgMHg2MSwgMHg3NiwgMHg2MSwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywKLSAgICAgICAgICAgIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDZFLCAweDZGLCAweDYyLCAweDZGLCAweDY0LCAweDc5LAotICAgICAgICAgICAgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwKLSAgICAgICAgICAgIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsCi0gICAgICAgICAgICAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsCi0gICAgICAgICAgICAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLAotICAgICAgICAgICAgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLAotICAgICAgICAgICAgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwKLSAgICAgICAgICAgIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NkYsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NkUsIDB4NjcsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDZBLCAweDYxLCAweDc2LCAweDYxLCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LCAweDQzLCAweDZGLCAweDc1LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwKLSAgICAgICAgICAgIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsCi0gICAgICAgICAgICAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NkUsIDB4NkYsIDB4NjIsIDB4NkYsIDB4NjQsIDB4NzksIDB4MjIsIDB4NUQsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsCi0gICAgICAgICAgICAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZGLCAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsCi0gICAgICAgICAgICAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwKLSAgICAgICAgICAgIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLAotICAgICAgICAgICAgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsIDB4NzYsIDB4NjUsIDB4NzIsCi0gICAgICAgICAgICAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDYyLCAweDc1LAotICAgICAgICAgICAgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwKLSAgICAgICAgICAgIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3NiwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELCAweDY1LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2RCwgMHg2MSwgMHg3MiwgMHg2QiwgMHg2RiwgMHgyMiwgMHgyQywgMHgyMiwgMHg2MSwgMHg2NywgMHg2NSwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDM5LCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LCAweDQzLAotICAgICAgICAgICAgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NjQsIDB4NjEsIDB4NzMsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDZBLCAweDZGLCAweDczLCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDZGLCAweDcwLCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDcwLAotICAgICAgICAgICAgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwKLSAgICAgICAgICAgIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsCi0gICAgICAgICAgICAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LAotICAgICAgICAgICAgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLAotICAgICAgICAgICAgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwKLSAgICAgICAgICAgIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDczLCAweDZGLAotICAgICAgICAgICAgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwKLSAgICAgICAgICAgIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NkUsIDB4NjcsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4MjIsIDB4NUQsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LCAweDQzLCAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsCi0gICAgICAgICAgICAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NkUsIDB4NkYsIDB4NjIsIDB4NkYsIDB4NjQsIDB4NzksIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsCi0gICAgICAgICAgICAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsCi0gICAgICAgICAgICAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLAotICAgICAgICAgICAgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwKLSAgICAgICAgICAgIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsCi0gICAgICAgICAgICAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwKLSAgICAgICAgICAgIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELAotICAgICAgICAgICAgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDYyLCAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsCi0gICAgICAgICAgICAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsCi0gICAgICAgICAgICAweDZFLCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDY0LCAweDYxLCAweDczLCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2MSwgMHg2NywgMHg2NSwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4MzcsCi0gICAgICAgICAgICAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LCAweDQzLCAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsCi0gICAgICAgICAgICAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NkUsIDB4NkYsIDB4NjIsIDB4NkYsIDB4NjQsIDB4NzksIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsCi0gICAgICAgICAgICAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LAotICAgICAgICAgICAgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksCi0gICAgICAgICAgICAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsCi0gICAgICAgICAgICAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLAotICAgICAgICAgICAgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDYyLCAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwKLSAgICAgICAgICAgIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsCi0gICAgICAgICAgICAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsCi0gICAgICAgICAgICAweDZGLCAweDZFLCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDZGLCAweDczLCAweDY4LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2MSwgMHg2NywgMHg2NSwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LCAweDQzLCAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsCi0gICAgICAgICAgICAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzAsIDB4NkMsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NkYsIDB4NzAsIDB4MjIsIDB4NUQsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsCi0gICAgICAgICAgICAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZGLCAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwKLSAgICAgICAgICAgIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwKLSAgICAgICAgICAgIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsCi0gICAgICAgICAgICAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDYyLCAweDc1LCAweDZDLAotICAgICAgICAgICAgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwKLSAgICAgICAgICAgIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3NiwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2RSwgMHg2NywgMHgyMiwgMHgyQywgMHgyMiwgMHg2QSwgMHg2MSwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywKLSAgICAgICAgICAgIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg2RSwgMHg2RiwgMHg2MiwgMHg2RiwgMHg2NCwgMHg3OSwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwKLSAgICAgICAgICAgIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsCi0gICAgICAgICAgICAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLAotICAgICAgICAgICAgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywKLSAgICAgICAgICAgIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsCi0gICAgICAgICAgICAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwKLSAgICAgICAgICAgIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsCi0gICAgICAgICAgICAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LAotICAgICAgICAgICAgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsCi0gICAgICAgICAgICAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLAotICAgICAgICAgICAgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwKLSAgICAgICAgICAgIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDMyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDY0LCAweDYxLCAweDczLCAweDIyLCAweDJDLCAweDIyLCAweDYxLCAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4MzcsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsCi0gICAgICAgICAgICAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg2RSwgMHg2RiwgMHg2MiwgMHg2RiwgMHg2NCwgMHg3OSwgMHgyMiwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLAotICAgICAgICAgICAgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsCi0gICAgICAgICAgICAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLAotICAgICAgICAgICAgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsCi0gICAgICAgICAgICAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLAotICAgICAgICAgICAgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywKLSAgICAgICAgICAgIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDZBLCAweDZGLCAweDczLCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDYxLCAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4MzIsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsCi0gICAgICAgICAgICAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3MiwgMHg2OSwgMHg3MCwgMHg3MCwgMHg2QywgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NkYsIDB4NzAsIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsCi0gICAgICAgICAgICAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LAotICAgICAgICAgICAgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsCi0gICAgICAgICAgICAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywKLSAgICAgICAgICAgIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwKLSAgICAgICAgICAgIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDYyLCAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM1LCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsCi0gICAgICAgICAgICAweDcyLCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDcyLCAweDY5LCAweDcwLCAweDcwLCAweDZDLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2RSwgMHg2NywgMHgyMiwgMHgyQywgMHgyMiwgMHg2QSwgMHg2MSwgMHg3NiwgMHg2MSwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwKLSAgICAgICAgICAgIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLAotICAgICAgICAgICAgMHg2RSwgMHg2RiwgMHg2MiwgMHg2RiwgMHg2NCwgMHg3OSwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwKLSAgICAgICAgICAgIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywKLSAgICAgICAgICAgIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksCi0gICAgICAgICAgICAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywKLSAgICAgICAgICAgIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLAotICAgICAgICAgICAgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNSwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LAotICAgICAgICAgICAgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwKLSAgICAgICAgICAgIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwKLSAgICAgICAgICAgIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NkYsIDB4NzAsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDZFLCAweDY3LCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDYxLCAweDc2LCAweDYxLCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LAotICAgICAgICAgICAgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NkUsCi0gICAgICAgICAgICAweDZGLCAweDYyLCAweDZGLCAweDY0LCAweDc5LCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsCi0gICAgICAgICAgICAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZGLCAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LAotICAgICAgICAgICAgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywKLSAgICAgICAgICAgIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLAotICAgICAgICAgICAgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsCi0gICAgICAgICAgICAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwKLSAgICAgICAgICAgIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLAotICAgICAgICAgICAgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLAotICAgICAgICAgICAgMHg2RSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RCwgMHg2MSwgMHg3MiwgMHg2QiwgMHg2RiwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDM5LAotICAgICAgICAgICAgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLAotICAgICAgICAgICAgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDYxLCAweDY0LCAweDYxLCAweDczLCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDZGLCAweDczLCAweDY4LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwKLSAgICAgICAgICAgIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDM0LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLAotICAgICAgICAgICAgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksCi0gICAgICAgICAgICAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LAotICAgICAgICAgICAgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywKLSAgICAgICAgICAgIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NkYsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsCi0gICAgICAgICAgICAweDZFLCAweDY3LCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDYxLCAweDc2LCAweDYxLCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LAotICAgICAgICAgICAgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NkUsIDB4NkYsIDB4NjIsIDB4NkYsIDB4NjQsCi0gICAgICAgICAgICAweDc5LCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywKLSAgICAgICAgICAgIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZGLCAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLAotICAgICAgICAgICAgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNiwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LAotICAgICAgICAgICAgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LAotICAgICAgICAgICAgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwKLSAgICAgICAgICAgIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QSwgMHg2RiwgMHg3MywgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg2MSwgMHg2NywgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDMyLCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LAotICAgICAgICAgICAgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzIsCi0gICAgICAgICAgICAweDY5LCAweDcwLCAweDcwLCAweDZDLCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDZGLCAweDcwLCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDYxLAotICAgICAgICAgICAgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwKLSAgICAgICAgICAgIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsCi0gICAgICAgICAgICAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLAotICAgICAgICAgICAgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwKLSAgICAgICAgICAgIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LAotICAgICAgICAgICAgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LAotICAgICAgICAgICAgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzUsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsCi0gICAgICAgICAgICAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywKLSAgICAgICAgICAgIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsCi0gICAgICAgICAgICAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RCwgMHg2MSwgMHg3MiwKLSAgICAgICAgICAgIDB4NkIsIDB4NkYsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgzMiwgMHgzOSwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsCi0gICAgICAgICAgICAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLAotICAgICAgICAgICAgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDYxLCAweDY0LCAweDYxLCAweDczLCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDZGLAotICAgICAgICAgICAgMHg3MywgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwKLSAgICAgICAgICAgIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LAotICAgICAgICAgICAgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LAotICAgICAgICAgICAgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwKLSAgICAgICAgICAgIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywKLSAgICAgICAgICAgIDB4NkYsIDB4NkUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkEsIDB4NkYsIDB4NzMsIDB4NjgsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDYxLCAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHgzMiwKLSAgICAgICAgICAgIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwKLSAgICAgICAgICAgIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3MiwgMHg2OSwgMHg3MCwgMHg3MCwgMHg2QywgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LAotICAgICAgICAgICAgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LAotICAgICAgICAgICAgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsCi0gICAgICAgICAgICAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLAotICAgICAgICAgICAgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDM2LCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywKLSAgICAgICAgICAgIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDcwLCAweDY1LCAweDc0LCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDYxLCAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4MzUsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsCi0gICAgICAgICAgICAweDQzLCAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LAotICAgICAgICAgICAgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LAotICAgICAgICAgICAgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzYsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsCi0gICAgICAgICAgICAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LAotICAgICAgICAgICAgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLAotICAgICAgICAgICAgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywKLSAgICAgICAgICAgIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDZGLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDZFLCAweDY3LCAweDIyLCAweDJDLCAweDIyLCAweDZBLAotICAgICAgICAgICAgMHg2MSwgMHg3NiwgMHg2MSwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLAotICAgICAgICAgICAgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDZFLCAweDZGLCAweDYyLCAweDZGLCAweDY0LCAweDc5LCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsCi0gICAgICAgICAgICAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsCi0gICAgICAgICAgICAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLAotICAgICAgICAgICAgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsCi0gICAgICAgICAgICAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLAotICAgICAgICAgICAgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwKLSAgICAgICAgICAgIDB4NzcsIDB4NjEsIDB4NzIsIDB4NjUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LAotICAgICAgICAgICAgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsCi0gICAgICAgICAgICAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwKLSAgICAgICAgICAgIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsCi0gICAgICAgICAgICAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELAotICAgICAgICAgICAgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MzIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NjQsIDB4NjEsIDB4NzMsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMiwgMHgzNywgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwKLSAgICAgICAgICAgIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDZFLCAweDZGLCAweDYyLCAweDZGLCAweDY0LCAweDc5LCAweDIyLCAweDVELAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELAotICAgICAgICAgICAgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwKLSAgICAgICAgICAgIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksCi0gICAgICAgICAgICAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsCi0gICAgICAgICAgICAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsCi0gICAgICAgICAgICAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywKLSAgICAgICAgICAgIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsCi0gICAgICAgICAgICAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsCi0gICAgICAgICAgICAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkEsIDB4NkYsIDB4NzMsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHgzMiwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwKLSAgICAgICAgICAgIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDcyLCAweDY5LCAweDcwLCAweDcwLCAweDZDLCAweDY1LCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsCi0gICAgICAgICAgICAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwKLSAgICAgICAgICAgIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsCi0gICAgICAgICAgICAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDdELAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwKLSAgICAgICAgICAgIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwKLSAgICAgICAgICAgIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsCi0gICAgICAgICAgICAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LAotICAgICAgICAgICAgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzUsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLAotICAgICAgICAgICAgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NzIsIDB4NjksIDB4NzAsIDB4NzAsIDB4NkMsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsCi0gICAgICAgICAgICAweDYxLCAweDZFLCAweDY3LCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDYxLCAweDc2LCAweDYxLCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LCAweDY3LAotICAgICAgICAgICAgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LCAweDY1LAotICAgICAgICAgICAgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywKLSAgICAgICAgICAgIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NkUsIDB4NkYsIDB4NjIsIDB4NkYsCi0gICAgICAgICAgICAweDY0LCAweDc5LCAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZGLCAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDM1LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LAotICAgICAgICAgICAgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LAotICAgICAgICAgICAgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM1LCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLAotICAgICAgICAgICAgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MywgMHg2RiwgMHg2NiwgMHg3NCwgMHg3NywgMHg2MSwgMHg3MiwgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwKLSAgICAgICAgICAgIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LAotICAgICAgICAgICAgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwKLSAgICAgICAgICAgIDB4NkUsIDB4NjcsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkEsIDB4NjEsIDB4NzYsIDB4NjEsIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsCi0gICAgICAgICAgICAweDQzLCAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg2RSwgMHg2RiwgMHg2MiwgMHg2RiwgMHg2NCwKLSAgICAgICAgICAgIDB4NzksIDB4MjIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLAotICAgICAgICAgICAgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkYsIDB4NjIsIDB4NkEsIDB4NjUsIDB4NjMsIDB4NzQsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MzUsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzMsIDB4NkYsIDB4NjYsIDB4NzQsIDB4NzcsIDB4NjEsCi0gICAgICAgICAgICAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLAotICAgICAgICAgICAgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksCi0gICAgICAgICAgICAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM0LCAweDdELCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwKLSAgICAgICAgICAgIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsCi0gICAgICAgICAgICAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsCi0gICAgICAgICAgICAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELAotICAgICAgICAgICAgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwKLSAgICAgICAgICAgIDB4NTQsIDB4NzIsIDB4NjEsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDYyLCAweDc1LCAweDZDLCAweDZCLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MzEsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4MkMsIDB4MjIsCi0gICAgICAgICAgICAweDZFLCAweDYxLCAweDZELCAweDY1LCAweDIyLCAweDJDLCAweDIyLCAweDZELCAweDYxLCAweDcyLCAweDZCLCAweDZGLCAweDIyLCAweDJDLCAweDIyLCAweDYxLCAweDY3LCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywKLSAgICAgICAgICAgIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzIsIDB4MzksIDB4N0QsIDB4NUQsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDY1LCAweDY0LCAweDY3LCAweDY1LCAweDQzLCAweDZGLCAweDc1LCAweDZFLCAweDc0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzNiwgMHgzNCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkIsIDB4NkUsIDB4NkYsIDB4NzcsIDB4NzMsIDB4NDEsIDB4NkUsIDB4NjQsIDB4NDMsIDB4NzIsCi0gICAgICAgICAgICAweDY1LCAweDYxLCAweDc0LCAweDY1LCAweDY0LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NjQsIDB4NjEsIDB4NzMsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkEsIDB4NkYsIDB4NzMsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NkYsIDB4NzAsCi0gICAgICAgICAgICAweDIyLCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDYxLCAweDc0LCAweDY4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwKLSAgICAgICAgICAgIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwKLSAgICAgICAgICAgIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDVCLCAweDVELCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZGLCAweDYyLCAweDZBLCAweDY1LCAweDYzLCAweDc0LCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLAotICAgICAgICAgICAgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzUsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LAotICAgICAgICAgICAgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLAotICAgICAgICAgICAgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHg3RCwgMHg3RCwgMHg1RCwgMHg3RCwKLSAgICAgICAgICAgIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4NzIsIDB4NjEsCi0gICAgICAgICAgICAweDc2LCAweDY1LCAweDcyLCAweDczLCAweDY1LCAweDcyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg2MiwgMHg3NSwgMHg2QywgMHg2QiwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzEsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDRELCAweDYxLCAweDcwLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsCi0gICAgICAgICAgICAweDY1LCAweDZDLCAweDIyLCAweDdELCAweDJDLCAweDIyLCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAweDIyLCAweDJDLCAweDIyLCAweDZFLCAweDYxLCAweDZELAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RCwgMHg2MSwgMHg3MiwgMHg2QiwgMHg2RiwgMHgyMiwgMHgyQywgMHgyMiwgMHg2MSwgMHg2NywgMHg2NSwgMHgyMiwgMHgyQywgMHg3QiwKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMyLCAweDM5LCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDY1LCAweDY0LAotICAgICAgICAgICAgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwgMHg3NSwgMHg2RSwgMHg3NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzYsIDB4MzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsCi0gICAgICAgICAgICAweDNBLCAweDMzLCAweDdELCAweDJDLCAweDIyLCAweDZCLCAweDZFLCAweDZGLCAweDc3LCAweDczLCAweDQxLCAweDZFLCAweDY0LCAweDQzLCAweDcyLCAweDY1LCAweDYxLCAweDc0LAotICAgICAgICAgICAgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwKLSAgICAgICAgICAgIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsIDB4NjEsIDB4NjQsCi0gICAgICAgICAgICAweDYxLCAweDczLCAweDIyLCAweDJDLCAweDIyLCAweDZBLCAweDZGLCAweDczLCAweDY4LCAweDIyLCAweDJDLCAweDIyLCAweDZDLCAweDZGLCAweDcwLCAweDIyLCAweDVELCAweDdELAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsCi0gICAgICAgICAgICAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwKLSAgICAgICAgICAgIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTMsIDB4NjUsIDB4NzQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwKLSAgICAgICAgICAgIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsCi0gICAgICAgICAgICAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDVELCAweDdELAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwgMHg3MywgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU2LAotICAgICAgICAgICAgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDM2LCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTYsIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsIDB4N0QsIDB4MkMsIDB4MjIsIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsCi0gICAgICAgICAgICAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLCAweDY1LCAweDIyLCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwKLSAgICAgICAgICAgIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QsIDB4MkMsCi0gICAgICAgICAgICAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDcyLCAweDYxLCAweDc2LCAweDY1LCAweDcyLAotICAgICAgICAgICAgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg2MiwgMHg3NSwKLSAgICAgICAgICAgIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksIDB4NkUsCi0gICAgICAgICAgICAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMxLCAweDdELCAweDJDLCAweDIyLAotICAgICAgICAgICAgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4MjIsIDB4NzYsCi0gICAgICAgICAgICAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LAotICAgICAgICAgICAgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsCi0gICAgICAgICAgICAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwKLSAgICAgICAgICAgIDB4MjIsIDB4M0EsIDB4MzQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTQsCi0gICAgICAgICAgICAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLAotICAgICAgICAgICAgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwgMHgyQywgMHgyMiwgMHg2RSwgMHg2MSwgMHg2RCwgMHg2NSwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4MjIsIDB4NkEsIDB4NkYsIDB4NzMsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsIDB4NjcsIDB4NjUsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHgzMiwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2NSwgMHg2NCwgMHg2NywgMHg2NSwgMHg0MywgMHg2RiwKLSAgICAgICAgICAgIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NDksCi0gICAgICAgICAgICAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDMzLCAweDdELCAweDJDLAotICAgICAgICAgICAgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwgMHg0MywgMHg3MiwgMHg2NSwgMHg2MSwgMHg3NCwgMHg2NSwgMHg2NCwgMHgyMiwgMHgyQywKLSAgICAgICAgICAgIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsIDB4NzQsIDB4MjIsIDB4MkMsCi0gICAgICAgICAgICAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDcyLCAweDY5LCAweDcwLCAweDcwLCAweDZDLCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgyQywgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwKLSAgICAgICAgICAgIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNiwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNCwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLAotICAgICAgICAgICAgMHg2NywgMHgzQSwgMHg1NCwgMHg3MiwgMHg2MSwgMHg3NiwgMHg2NSwgMHg3MiwgMHg3MywgMHg2NSwgMHg3MiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywKLSAgICAgICAgICAgIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjIsIDB4NzUsIDB4NkMsIDB4NkIsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEQsIDB4NjEsIDB4NzAsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsCi0gICAgICAgICAgICAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDIyLCAweDc2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLAotICAgICAgICAgICAgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwKLSAgICAgICAgICAgIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsCi0gICAgICAgICAgICAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY5LCAweDY0LCAweDIyLCAweDdELCAweDJDLAotICAgICAgICAgICAgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0OSwgMHg2RSwgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzYsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksCi0gICAgICAgICAgICAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDU0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2NSwgMHg3MiwgMHg3MywgMHg2RiwgMHg2RSwgMHgyMiwKLSAgICAgICAgICAgIDB4MkMsIDB4MjIsIDB4NkUsIDB4NjEsIDB4NkQsIDB4NjUsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzQsIDB4NjUsIDB4NzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NjEsCi0gICAgICAgICAgICAweDY3LCAweDY1LCAweDIyLCAweDJDLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMywgMHgzNSwgMHg3RCwgMHg1RCwKLSAgICAgICAgICAgIDB4N0QsIDB4MkMsIDB4MjIsIDB4NjUsIDB4NjQsIDB4NjcsIDB4NjUsIDB4NDMsIDB4NkYsIDB4NzUsIDB4NkUsIDB4NzQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsCi0gICAgICAgICAgICAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDM2LCAweDM0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LAotICAgICAgICAgICAgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzMSwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QiwgMHg2RSwgMHg2RiwgMHg3NywgMHg3MywgMHg0MSwgMHg2RSwgMHg2NCwKLSAgICAgICAgICAgIDB4NDMsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NzQsIDB4NjUsIDB4NjQsIDB4MjIsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDRDLCAweDY5LCAweDczLCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLAotICAgICAgICAgICAgMHg1QiwgMHgyMiwgMHg2QywgMHg2RiwgMHg3MCwgMHgyMiwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg3MCwgMHg2MSwgMHg3NCwgMHg2OCwgMHgyMiwgMHgyQywgMHg3QiwgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NTAsIDB4NjEsIDB4NzQsIDB4NjgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDczLCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0QywgMHg2OSwgMHg3MywgMHg3NCwgMHgyMiwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsCi0gICAgICAgICAgICAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLAotICAgICAgICAgICAgMHg1RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1MywgMHg2NSwgMHg3NCwKLSAgICAgICAgICAgIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsCi0gICAgICAgICAgICAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDUzLCAweDY1LCAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLAotICAgICAgICAgICAgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHg1QiwgMHg1RCwgMHg3RCwgMHg1RCwgMHg3RCwgMHgyQywgMHgyMiwgMHg2RiwgMHg2MiwgMHg2QSwgMHg2NSwgMHg2MywgMHg3NCwKLSAgICAgICAgICAgIDB4NzMsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NjcsIDB4M0EsIDB4NEMsIDB4NjksIDB4NzMsCi0gICAgICAgICAgICAweDc0LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLCAweDNBLCAweDVCLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LAotICAgICAgICAgICAgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwgMHg2NSwgMHg3MiwgMHg3NCwgMHg2NSwgMHg3OCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwKLSAgICAgICAgICAgIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NjksIDB4NjQsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsCi0gICAgICAgICAgICAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLCAweDc0LCAweDMzLCAweDMyLCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLAotICAgICAgICAgICAgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNiwgMHg3RCwgMHgyQywgMHgyMiwgMHg2QywgMHg2MSwgMHg2MiwgMHg2NSwgMHg2QywgMHgyMiwgMHgzQSwgMHgyMiwgMHg3MCwgMHg2NSwKLSAgICAgICAgICAgIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4MkMsIDB4N0IsIDB4MjIsIDB4NDAsIDB4NzQsIDB4NzksIDB4NzAsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MjIsCi0gICAgICAgICAgICAweDY3LCAweDNBLCAweDU2LCAweDY1LCAweDcyLCAweDc0LCAweDY1LCAweDc4LCAweDIyLCAweDJDLCAweDIyLCAweDQwLCAweDc2LCAweDYxLCAweDZDLCAweDc1LCAweDY1LCAweDIyLAotICAgICAgICAgICAgMHgzQSwgMHg3QiwgMHgyMiwgMHg2OSwgMHg2NCwgMHgyMiwgMHgzQSwgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywKLSAgICAgICAgICAgIDB4M0EsIDB4NDksIDB4NkUsIDB4NzQsIDB4MzMsIDB4MzIsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4MzMsCi0gICAgICAgICAgICAweDdELCAweDJDLCAweDIyLCAweDZDLCAweDYxLCAweDYyLCAweDY1LCAweDZDLCAweDIyLCAweDNBLCAweDIyLCAweDczLCAweDZGLCAweDY2LCAweDc0LCAweDc3LCAweDYxLCAweDcyLAotICAgICAgICAgICAgMHg2NSwgMHgyMiwgMHg3RCwgMHg3RCwgMHgyQywgMHg3QiwgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg1NiwKLSAgICAgICAgICAgIDB4NjUsIDB4NzIsIDB4NzQsIDB4NjUsIDB4NzgsIDB4MjIsIDB4MkMsIDB4MjIsIDB4NDAsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4N0IsIDB4MjIsCi0gICAgICAgICAgICAweDY5LCAweDY0LCAweDIyLCAweDNBLCAweDdCLCAweDIyLCAweDQwLCAweDc0LCAweDc5LCAweDcwLCAweDY1LCAweDIyLCAweDNBLCAweDIyLCAweDY3LCAweDNBLCAweDQ5LCAweDZFLAotICAgICAgICAgICAgMHg3NCwgMHgzMywgMHgzMiwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwgMHg3NiwgMHg2MSwgMHg2QywgMHg3NSwgMHg2NSwgMHgyMiwgMHgzQSwgMHgzNiwgMHg3RCwgMHgyQywgMHgyMiwKLSAgICAgICAgICAgIDB4NkMsIDB4NjEsIDB4NjIsIDB4NjUsIDB4NkMsIDB4MjIsIDB4M0EsIDB4MjIsIDB4NzAsIDB4NjUsIDB4NzIsIDB4NzMsIDB4NkYsIDB4NkUsIDB4MjIsIDB4N0QsIDB4N0QsIDB4NUQsCi0gICAgICAgICAgICAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDdELCAweDdELCAweDVELCAweDdELCAweDJDLCAweDIyLCAweDZELCAweDY1LCAweDc0LCAweDYxLCAweDIyLCAweDNBLCAweDdCLAotICAgICAgICAgICAgMHgyMiwgMHg0MCwgMHg3NCwgMHg3OSwgMHg3MCwgMHg2NSwgMHgyMiwgMHgzQSwgMHgyMiwgMHg2NywgMHgzQSwgMHg0RCwgMHg2MSwgMHg3MCwgMHgyMiwgMHgyQywgMHgyMiwgMHg0MCwKLSAgICAgICAgICAgIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjUsIDB4MjIsIDB4M0EsIDB4NUIsIDB4NUQsIDB4N0QsIDB4N0QsIDB4N0QKLSAgICAgICAgfTsKICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9EZXYvUHJvdmlkZXIvSW5kZXhUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvRGV2L1Byb3ZpZGVyL0luZGV4VGVzdHMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzOTE5MDEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9EZXYvUHJvdmlkZXIvSW5kZXhUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTjsKLXVzaW5nIFh1bml0OwotdXNpbmcgWHVuaXQuU2RrOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0LkRvY3MuRGV2LlByb3ZpZGVyCi17Ci0vLyB0YWc6Om15VHlwZVNlcmlhbGl6YXRpb25bXQotaW50ZXJuYWwgY2xhc3MgTXlUeXBlCi17Ci0gICAgcHVibGljIHN0YXRpYyBzdHJpbmcgR3JhcGhzb25QcmVmaXggPSAicHJvdmlkZXJ4IjsKLSAgICBwdWJsaWMgc3RhdGljIHN0cmluZyBHcmFwaHNvbkJhc2VUeXBlID0gIk15VHlwZSI7Ci0gICAgcHVibGljIHN0YXRpYyBzdHJpbmcgR3JhcGhzb25UeXBlID0gR3JhcGhTT05VdGlsLkZvcm1hdFR5cGVOYW1lKEdyYXBoc29uUHJlZml4LCBHcmFwaHNvbkJhc2VUeXBlKTsKLQotICAgIHB1YmxpYyBNeVR5cGUoaW50IHgsIGludCB5KQotICAgIHsKLSAgICAgICAgWCA9IHg7Ci0gICAgICAgIFkgPSB5OwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgWCB7IGdldDsgfQotICAgIHB1YmxpYyBpbnQgWSB7IGdldDsgfQotfQotCi1pbnRlcm5hbCBjbGFzcyBNeUNsYXNzV3JpdGVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotewotICAgIHB1YmxpYyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4gRGljdGlmeShkeW5hbWljIG9iamVjdERhdGEsIEdyYXBoU09OV3JpdGVyIHdyaXRlcikKLSAgICB7Ci0gICAgICAgIE15VHlwZSBteVR5cGUgPSBvYmplY3REYXRhOwotICAgICAgICB2YXIgdmFsdWVEaWN0ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsieCIsIG15VHlwZS5YfSwKLSAgICAgICAgICAgIHsieSIsIG15VHlwZS5ZfQotICAgICAgICB9OwotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZShuYW1lb2YoVGVzdENsYXNzKSwgdmFsdWVEaWN0LCBNeVR5cGUuR3JhcGhzb25QcmVmaXgpOwotICAgIH0KLX0KLQotaW50ZXJuYWwgY2xhc3MgTXlUeXBlUmVhZGVyIDogSUdyYXBoU09ORGVzZXJpYWxpemVyCi17Ci0gICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgewotICAgICAgICB2YXIgeCA9IHJlYWRlci5Ub09iamVjdChncmFwaHNvbk9iamVjdC5HZXRQcm9wZXJ0eSgieCIpKTsKLSAgICAgICAgdmFyIHkgPSByZWFkZXIuVG9PYmplY3QoZ3JhcGhzb25PYmplY3QuR2V0UHJvcGVydHkoInkiKSk7Ci0gICAgICAgIHJldHVybiBuZXcgTXlUeXBlKHgsIHkpOwotICAgIH0KLX0KLS8vIGVuZDo6bXlUeXBlU2VyaWFsaXphdGlvbltdCi0gICAgCi0gICAgcHVibGljIGNsYXNzIEluZGV4VGVzdHMKLSAgICB7Ci0gICAgICAgIFtGYWN0KFNraXA9Ik5vIFNlcnZlciB1bmRlciBsb2NhbGhvc3QiKV0KLSAgICAgICAgcHVibGljIHZvaWQgU3VwcG9ydGluZ0dyZW1saW5OZXRJT1Rlc3RzKCkKLSAgICAgICAgewotLy8gdGFnOjpzdXBwb3J0aW5nR3JlbWxpbk5ldElPW10KLXZhciBncmFwaHNvblJlYWRlciA9IG5ldyBHcmFwaFNPTjNSZWFkZXIoCi0gICAgbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBJR3JhcGhTT05EZXNlcmlhbGl6ZXI+IHt7TXlUeXBlLkdyYXBoc29uVHlwZSwgbmV3IE15VHlwZVJlYWRlcigpfX0pOwotdmFyIGdyYXBoc29uV3JpdGVyID0gbmV3IEdyYXBoU09OM1dyaXRlcigKLSAgICBuZXcgRGljdGlvbmFyeTxUeXBlLCBJR3JhcGhTT05TZXJpYWxpemVyPiB7e3R5cGVvZihNeVR5cGUpLCBuZXcgTXlDbGFzc1dyaXRlcigpfX0pOwotCi12YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyKSwgbmV3IEdyYXBoU09OMk1lc3NhZ2VTZXJpYWxpemVyKCkpOwotLy8gZW5kOjpzdXBwb3J0aW5nR3JlbWxpbk5ldElPW10KLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9HcmVtbGluQXBwbGljYXRpb25zVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9HcmVtbGluQXBwbGljYXRpb25zVGVzdHMuY3MKaW5kZXggNTNlNTdkYS4uNjg1MWU4YSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9SZWZlcmVuY2UvR3JlbWxpbkFwcGxpY2F0aW9uc1Rlc3RzLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5BcHBsaWNhdGlvbnNUZXN0cy5jcwpAQCAtNTAsNyArNTAsNyBAQAogICAgICAgICAgICAgYmluZGluZ3MpOwogfQogCi0vLyBieXRlY29kZQorLy8gdHJhdmVyc2FsCiB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4MikpKQogewogICAgIHZhciBnID0gVHJhdmVyc2FsKCkuV2l0aChuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihncmVtbGluQ2xpZW50KSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1JlZmVyZW5jZS9HcmVtbGluVmFyaWFudHNUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5WYXJpYW50c1Rlc3RzLmNzCmluZGV4IDUzOTMwNTYuLjZiMTVlZWUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5WYXJpYW50c1Rlc3RzLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvUmVmZXJlbmNlL0dyZW1saW5WYXJpYW50c1Rlc3RzLmNzCkBAIC0yOSw4ICsyOSw3IEBACiB1c2luZyBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuUHJvY2Vzcy5UcmF2ZXJzYWwuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKIHVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwogdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRGVjb3JhdGlvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTjsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQ7CiB1c2luZyBNaWNyb3NvZnQuRXh0ZW5zaW9ucy5Mb2dnaW5nOwogdXNpbmcgWHVuaXQ7CiAvLyB0YWc6OmNvbW1vbkltcG9ydHNbXQpAQCAtODEsMjYgKzgwLDEwIEBACiAgICAgICAgIHB1YmxpYyB2b2lkIFNlcmlhbGl6YXRpb25HcmFwaEJpbmFyeVRlc3QoKQogICAgICAgICB7CiAvLyB0YWc6OnNlcmlhbGl6YXRpb25CaW5hcnlbXQotdmFyIGNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyKSwgbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIoKSk7Cit2YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoImxvY2FsaG9zdCIsIDgxODIpLCBuZXcgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIoKSk7CiAvLyBlbmQ6OnNlcmlhbGl6YXRpb25CaW5hcnlbXQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBbRmFjdChTa2lwPSJObyBTZXJ2ZXIgdW5kZXIgbG9jYWxob3N0IildCi0gICAgICAgIHB1YmxpYyB2b2lkIFNlcmlhbGl6YXRpb25HcmFwaHNvbjJUZXN0KCkKLSAgICAgICAgewotLy8gdGFnOjpzZXJpYWxpemF0aW9uR3JhcGhTb25bXQotdmFyIGNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyKSwgbmV3IEdyYXBoU09OMk1lc3NhZ2VTZXJpYWxpemVyKCkpOwotLy8gZW5kOjpzZXJpYWxpemF0aW9uR3JhcGhTb25bXQotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3QoU2tpcCA9ICJObyBTZXJ2ZXIgdW5kZXIgbG9jYWxob3N0IildCi0gICAgICAgIHB1YmxpYyB2b2lkIFNlcmlhbGl6YXRpb25HcmFwaHNvbjNUZXN0KCkKLSAgICAgICAgewotLy8gdGFnOjpzZXJpYWxpemF0aW9uR3JhcGhTb24zW10KLXZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4MiksIG5ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigpKTsKLS8vIGVuZDo6c2VyaWFsaXphdGlvbkdyYXBoU29uM1tdCi0gICAgICAgIH0KLQogICAgICAgICBbRmFjdChTa2lwPSJXZSBjYW4ndCBhcHBseSBzdHJhdGVnaWVzIildCiAgICAgICAgIHB1YmxpYyB2b2lkIFRyYXZlcnNhbFN0cmF0ZWdpZXNUZXN0KCkKICAgICAgICAgewpAQCAtMTQ2LDkgKzEyOSw4IEBACiAKIHZhciByZXNwb25zZSA9CiAgICAgYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8c3RyaW5nPigKLSAgICAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0V2YWwpLgotICAgICAgICAgICAgQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NHcmVtbGluLCAiZy5WKCkuY291bnQoKSIpLgotICAgICAgICAgICAgQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NFdmFsVGltZW91dCwgNTAwKS4KKyAgICAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigpLmNvdW50KCkiKS4KKyAgICAgICAgICAgIEFkZEZpZWxkKFRva2Vucy5BcmdzRXZhbFRpbWVvdXQsIDUwMCkuCiAgICAgICAgICAgICBDcmVhdGUoKSk7CiAvLyBlbmQ6OnN1Ym1pdHRpbmdTY3JpcHRzV2l0aFRpbWVvdXRbXQogICAgICAgICB9CkBAIC0xNTksNyArMTQxLDkgQEAKIC8vIHRhZzo6c3VibWl0dGluZ1NjcmlwdHNXaXRoQXV0aGVudGljYXRpb25bXQogdmFyIHVzZXJuYW1lID0gInVzZXJuYW1lIjsKIHZhciBwYXNzd29yZCA9ICJwYXNzd29yZCI7Ci12YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyLCB0cnVlLCB1c2VybmFtZSwgcGFzc3dvcmQpOwordmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4MiwgZW5hYmxlU3NsOiB0cnVlKTsKK3VzaW5nIHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlciwKKyAgICBpbnRlcmNlcHRvcnM6IG5ld1tdIHsgQXV0aC5CYXNpY0F1dGgodXNlcm5hbWUsIHBhc3N3b3JkKSB9KTsKIC8vIGVuZDo6c3VibWl0dGluZ1NjcmlwdHNXaXRoQXV0aGVudGljYXRpb25bXQogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9VcGdyYWRlL1JlbGVhc2UzNVRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRG9jcy9VcGdyYWRlL1JlbGVhc2UzNVRlc3RzLmNzCmluZGV4IDZmMTU0YWQuLmFiNWI0MDQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RvY3MvVXBncmFkZS9SZWxlYXNlMzVUZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Eb2NzL1VwZ3JhZGUvUmVsZWFzZTM1VGVzdHMuY3MKQEAgLTIzLDcgKzIzLDcgQEAKIAogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLlJlbW90ZTsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQ7CiB1c2luZyBYdW5pdDsKIHVzaW5nIHN0YXRpYyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2U7CiAKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgcHVibGljIHZvaWQgR3JhcGhCaW5hcnlUZXN0KCkKICAgICAgICAgewogLy8gdGFnOjpncmFwaEJpbmFyeVtdCi12YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoImxvY2FsaG9zdCIsIDgxODIpLCBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplcigpKTsKK3ZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4MiksIG5ldyBHcmFwaEJpbmFyeTRNZXNzYWdlU2VyaWFsaXplcigpKTsKIHZhciBnID0gVHJhdmVyc2FsKCkuV2l0aChuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihjbGllbnQpKTsKIC8vIGVuZDo6Z3JhcGhCaW5hcnlbXQogICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvQXV0aEludGVncmF0aW9uVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvQXV0aEludGVncmF0aW9uVGVzdHMuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1YzllZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9BdXRoSW50ZWdyYXRpb25UZXN0cy5jcwpAQCAtMCwwICsxLDEwMiBAQAorI3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uTmV0Lkh0dHA7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwordXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwordXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLlJlbW90ZTsKK3VzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwordXNpbmcgWHVuaXQ7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuRHJpdmVyCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyAgICAgSW50ZWdyYXRpb24gdGVzdHMgZm9yIGF1dGhlbnRpY2F0aW9uIGludGVyY2VwdG9ycyBhZ2FpbnN0IHRoZSBzZWN1cmUgR3JlbWxpbiBTZXJ2ZXIKKyAgICAvLy8gICAgIChwb3J0IDQ1OTQxLCBTU0wgKyBTaW1wbGVBdXRoZW50aWNhdG9yKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBBdXRoSW50ZWdyYXRpb25UZXN0cworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc3RyaW5nIFRlc3RIb3N0ID0gQ29uZmlnUHJvdmlkZXIuQ29uZmlndXJhdGlvblsiVGVzdFNlcnZlcklwQWRkcmVzcyJdITsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgaW50IFRlc3RTZWN1cmVQb3J0ID0gQ29udmVydC5Ub0ludDMyKENvbmZpZ1Byb3ZpZGVyLkNvbmZpZ3VyYXRpb25bIlRlc3RTZWN1cmVTZXJ2ZXJQb3J0Il0pOworCisgICAgICAgIHByaXZhdGUgR3JlbWxpbkNsaWVudCBDcmVhdGVTZWN1cmVDbGllbnQoRnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+W10/IGludGVyY2VwdG9ycyA9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RTZWN1cmVQb3J0LCBlbmFibGVTc2w6IHRydWUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIsCisgICAgICAgICAgICAgICAgY29ubmVjdGlvblNldHRpbmdzOiBuZXcgQ29ubmVjdGlvblNldHRpbmdzIHsgU2tpcENlcnRpZmljYXRlVmFsaWRhdGlvbiA9IHRydWUgfSwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnM6IGludGVyY2VwdG9ycyk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQXV0aGVudGljYXRlV2l0aEJhc2ljQXV0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBzZWN1cmUgc2VydmVyIHVzZXMgU2ltcGxlQXV0aGVudGljYXRvciB3aXRoIGNyZWRlbnRpYWxzOiBzdGVwaGVuL3Bhc3N3b3JkCisgICAgICAgICAgICB1c2luZyB2YXIgZ3JlbWxpbkNsaWVudCA9IENyZWF0ZVNlY3VyZUNsaWVudCgKKyAgICAgICAgICAgICAgICBuZXdbXSB7IEF1dGguQmFzaWNBdXRoKCJzdGVwaGVuIiwgInBhc3N3b3JkIikgfSk7CisKKyAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmM8bG9uZz4oImcuaW5qZWN0KDEpLmNvdW50KCkiKTsKKworICAgICAgICAgICAgQXNzZXJ0LlNpbmdsZShyZXNwb25zZSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQXV0aGVudGljYXRlV2l0aEJhc2ljQXV0aFZpYURyaXZlclJlbW90ZUNvbm5lY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUZXN0IHRocm91Z2ggRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiArIHRyYXZlcnNhbAorICAgICAgICAgICAgdXNpbmcgdmFyIGNsaWVudCA9IENyZWF0ZVNlY3VyZUNsaWVudCgKKyAgICAgICAgICAgICAgICBuZXdbXSB7IEF1dGguQmFzaWNBdXRoKCJzdGVwaGVuIiwgInBhc3N3b3JkIikgfSk7CisgICAgICAgICAgICB1c2luZyB2YXIgcmVtb3RlID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oY2xpZW50LCAiZ21vZGVybiIpOworICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChyZW1vdGUpOworCisgICAgICAgICAgICB2YXIgY291bnQgPSBhd2FpdCBnLlYoKS5Db3VudCgpLlByb21pc2UodCA9PiB0Lk5leHQoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGNvdW50ID4gMCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkRmFpbFdpdGhXcm9uZ0NyZWRlbnRpYWxzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgdmFyIGdyZW1saW5DbGllbnQgPSBDcmVhdGVTZWN1cmVDbGllbnQoCisgICAgICAgICAgICAgICAgbmV3W10geyBBdXRoLkJhc2ljQXV0aCgic3RlcGhlbiIsICJ3cm9uZ3Bhc3N3b3JkIikgfSk7CisKKyAgICAgICAgICAgIC8vIFRoZSBzZXJ2ZXIgcmV0dXJucyBhdXRoIGVycm9ycyBhcyBKU09OIChub3QgR3JhcGhCaW5hcnkpLCBzbyBDb25uZWN0aW9uCisgICAgICAgICAgICAvLyBleHRyYWN0cyB0aGUgbWVzc2FnZSBhbmQgdGhyb3dzIEh0dHBSZXF1ZXN0RXhjZXB0aW9uLgorICAgICAgICAgICAgdmFyIGV4ID0gYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPEh0dHBSZXF1ZXN0RXhjZXB0aW9uPigKKyAgICAgICAgICAgICAgICAoKSA9PiBncmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jPGxvbmc+KCJnLmluamVjdCgxKS5jb3VudCgpIikpOworCisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoImluY29ycmVjdCIsIGV4Lk1lc3NhZ2UsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEZhaWxXaXRoTm9DcmVkZW50aWFscygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIHZhciBncmVtbGluQ2xpZW50ID0gQ3JlYXRlU2VjdXJlQ2xpZW50KCk7CisKKyAgICAgICAgICAgIHZhciBleCA9IGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxIdHRwUmVxdWVzdEV4Y2VwdGlvbj4oCisgICAgICAgICAgICAgICAgKCkgPT4gZ3JlbWxpbkNsaWVudC5TdWJtaXRBc3luYzxsb25nPigiZy5pbmplY3QoMSkuY291bnQoKSIpKTsKKworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJjcmVkZW50aWFscyIsIGV4Lk1lc3NhZ2UsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL0Nvbm5lY3Rpb25Qb29sVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvQ29ubmVjdGlvblBvb2xUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkwNWMyOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvQ29ubmVjdGlvblBvb2xUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zOwotdXNpbmcgR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0LlV0aWw7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC5Ecml2ZXIKLXsKLSAgICBwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblBvb2xUZXN0cwotICAgIHsKLSAgICAgICAgcHJpdmF0ZSByZWFkb25seSBSZXF1ZXN0TWVzc2FnZVByb3ZpZGVyIF9yZXF1ZXN0TWVzc2FnZVByb3ZpZGVyID0gbmV3IFJlcXVlc3RNZXNzYWdlUHJvdmlkZXIoKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc3RyaW5nIFRlc3RIb3N0ID0gQ29uZmlnUHJvdmlkZXIuQ29uZmlndXJhdGlvblsiVGVzdFNlcnZlcklwQWRkcmVzcyJdITsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgaW50IFRlc3RQb3J0ID0gQ29udmVydC5Ub0ludDMyKENvbmZpZ1Byb3ZpZGVyLkNvbmZpZ3VyYXRpb25bIlRlc3RTZXJ2ZXJQb3J0Il0pOwotCi0gICAgICAgIHByaXZhdGUgYXN5bmMgVGFzayBFeGVjdXRlTXVsdGlwbGVMb25nUnVubmluZ1JlcXVlc3RzSW5QYXJhbGxlbChJR3JlbWxpbkNsaWVudCBncmVtbGluQ2xpZW50LCBpbnQgbnJSZXF1ZXN0cywKLSAgICAgICAgICAgIGludCByZXF1ZXN0UnVubmluZ1RpbWVJbk1zKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdGFza3MgPSBuZXcgTGlzdDxUYXNrPihuclJlcXVlc3RzKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnJSZXF1ZXN0czsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRhc2tzLkFkZChncmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jKF9yZXF1ZXN0TWVzc2FnZVByb3ZpZGVyLkdldFNsZWVwTWVzc2FnZShyZXF1ZXN0UnVubmluZ1RpbWVJbk1zKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgVGFzay5XaGVuQWxsKHRhc2tzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKDEpXQotICAgICAgICBbSW5saW5lRGF0YSgyKV0KLSAgICAgICAgW0lubGluZURhdGEoOCldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZENyZWF0ZUNvbmZpZ3VyZWROckNvbm5lY3Rpb25zKGludCBjb25uZWN0aW9uUG9vbFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVzaW5nICh2YXIgZ3JlbWxpbkNsaWVudCA9IENyZWF0ZUdyZW1saW5DbGllbnQoY29ubmVjdGlvblBvb2xTaXplKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgbnJDb25uZWN0aW9ucyA9IGdyZW1saW5DbGllbnQuTnJDb25uZWN0aW9uczsKLSAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwoY29ubmVjdGlvblBvb2xTaXplLCBuckNvbm5lY3Rpb25zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRUaHJvd0Nvbm5lY3Rpb25Qb29sQnVzeUV4Y2VwdGlvbldoZW5Qb29sSXNCdXN5KCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IG5yUGFyYWxsZWxSZXF1ZXN0cyA9IDI7Ci0gICAgICAgICAgICB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBDcmVhdGVHcmVtbGluQ2xpZW50KGNvbm5lY3Rpb25Qb29sU2l6ZTogMSwgbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjogMSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IHNsZWVwVGltZSA9IDEwMDsKLQotICAgICAgICAgICAgICAgIHZhciB0aHJvd25FeGNlcHRpb24gPSBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8Q29ubmVjdGlvblBvb2xCdXN5RXhjZXB0aW9uPigoKSA9PgotICAgICAgICAgICAgICAgICAgICBFeGVjdXRlTXVsdGlwbGVMb25nUnVubmluZ1JlcXVlc3RzSW5QYXJhbGxlbChncmVtbGluQ2xpZW50LCBuclBhcmFsbGVsUmVxdWVzdHMsIHNsZWVwVGltZSkpOwotICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucyhuYW1lb2YoQ29ubmVjdGlvblBvb2xTZXR0aW5ncy5NYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKSwgdGhyb3duRXhjZXB0aW9uLk1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucyhuYW1lb2YoQ29ubmVjdGlvblBvb2xTZXR0aW5ncy5Qb29sU2l6ZSksIHRocm93bkV4Y2VwdGlvbi5NZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIEdyZW1saW5DbGllbnQgQ3JlYXRlR3JlbWxpbkNsaWVudChpbnQgY29ubmVjdGlvblBvb2xTaXplID0gMiwgaW50IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFRlc3RIb3N0LCBUZXN0UG9ydCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlciwKLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzOiBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncwotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUG9vbFNpemUgPSBjb25uZWN0aW9uUG9vbFNpemUsCi0gICAgICAgICAgICAgICAgICAgIE1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL0RyaXZlclJlbW90ZUNvbm5lY3Rpb25UZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uVGVzdHMuY3MKaW5kZXggMmQwZmY1My4uYzM0YzIzMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL0RyaXZlclJlbW90ZUNvbm5lY3Rpb25UZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvRHJpdmVyUmVtb3RlQ29ubmVjdGlvblRlc3RzLmNzCkBAIC00NSwxMSArNDUsMTEgQEAKICAgICAgICAgbG9nZ2VyLklzRW5hYmxlZChBcmcuQW55PExvZ0xldmVsPigpKS5SZXR1cm5zKHRydWUpOwogICAgICAgICBsb2dnZXJGYWN0b3J5LkNyZWF0ZUxvZ2dlcihBcmcuQW55PHN0cmluZz4oKSkuUmV0dXJucyhsb2dnZXIpOwogICAgICAgICB1c2luZyB2YXIgZHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKFRlc3RIb3N0LCBUZXN0UG9ydCwgbG9nZ2VyRmFjdG9yeTogbG9nZ2VyRmFjdG9yeSk7Ci0gICAgICAgIHZhciBieXRlY29kZVRvTG9nID0gU29tZVZhbGlkQnl0ZWNvZGU7CisgICAgICAgIHZhciBncmVtbGluTGFuZ1RvTG9nID0gU29tZVZhbGlkR3JlbWxpbkxhbmc7CiAKLSAgICAgICAgYXdhaXQgZHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3QsIG9iamVjdD4oYnl0ZWNvZGVUb0xvZyk7CisgICAgICAgIGF3YWl0IGRyaXZlclJlbW90ZUNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0LCBvYmplY3Q+KGdyZW1saW5MYW5nVG9Mb2cpOwogICAgICAgICAKLSAgICAgICAgbG9nZ2VyLlZlcmlmeU1lc3NhZ2VXYXNMb2dnZWQoTG9nTGV2ZWwuRGVidWcsIGJ5dGVjb2RlVG9Mb2cuVG9TdHJpbmcoKSk7CisgICAgICAgIGxvZ2dlci5WZXJpZnlNZXNzYWdlV2FzTG9nZ2VkKExvZ0xldmVsLkRlYnVnLCBncmVtbGluTGFuZ1RvTG9nLlRvU3RyaW5nKCkpOwogICAgIH0KICAgICAKICAgICBbRmFjdF0KQEAgLTYxLDcgKzYxLDcgQEAKICAgICAgICAgbG9nZ2VyRmFjdG9yeS5DcmVhdGVMb2dnZXIoQXJnLkFueTxzdHJpbmc+KCkpLlJldHVybnMobG9nZ2VyKTsKICAgICAgICAgdXNpbmcgdmFyIGRyaXZlclJlbW90ZUNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihUZXN0SG9zdCwgVGVzdFBvcnQsIGxvZ2dlckZhY3Rvcnk6IGxvZ2dlckZhY3RvcnkpOwogCi0gICAgICAgIGF3YWl0IGRyaXZlclJlbW90ZUNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0LCBvYmplY3Q+KFNvbWVWYWxpZEJ5dGVjb2RlKTsKKyAgICAgICAgYXdhaXQgZHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3QsIG9iamVjdD4oU29tZVZhbGlkR3JlbWxpbkxhbmcpOwogICAgICAgICAKICAgICAgICAgbG9nZ2VyLlZlcmlmeU5vdGhpbmdXYXNMb2dnZWQoKTsKICAgICB9CkBAIC03NiwyMCArNzYsMjAgQEAKICAgICAgICAgdXNpbmcgdmFyIGdyZW1saW5DbGllbnQgPQogICAgICAgICAgICAgbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KSwgbG9nZ2VyRmFjdG9yeTogbG9nZ2VyRmFjdG9yeSk7CiAgICAgICAgIHZhciBkcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oZ3JlbWxpbkNsaWVudCk7Ci0gICAgICAgIHZhciBieXRlY29kZVRvTG9nID0gU29tZVZhbGlkQnl0ZWNvZGU7CisgICAgICAgIHZhciBncmVtbGluTGFuZ1RvTG9nID0gU29tZVZhbGlkR3JlbWxpbkxhbmc7CiAKLSAgICAgICAgYXdhaXQgZHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3QsIG9iamVjdD4oU29tZVZhbGlkQnl0ZWNvZGUpOworICAgICAgICBhd2FpdCBkcml2ZXJSZW1vdGVDb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdCwgb2JqZWN0PihTb21lVmFsaWRHcmVtbGluTGFuZyk7CiAKLSAgICAgICAgbG9nZ2VyLlZlcmlmeU1lc3NhZ2VXYXNMb2dnZWQoTG9nTGV2ZWwuRGVidWcsIGJ5dGVjb2RlVG9Mb2cuVG9TdHJpbmcoKSk7CisgICAgICAgIGxvZ2dlci5WZXJpZnlNZXNzYWdlV2FzTG9nZ2VkKExvZ0xldmVsLkRlYnVnLCBncmVtbGluTGFuZ1RvTG9nLlRvU3RyaW5nKCkpOwogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIEJ5dGVjb2RlIFNvbWVWYWxpZEJ5dGVjb2RlCisgICAgcHJpdmF0ZSBzdGF0aWMgR3JlbWxpbkxhbmcgU29tZVZhbGlkR3JlbWxpbkxhbmcKICAgICB7CiAgICAgICAgIGdldAogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMuQWRkKG5ldyBJbnN0cnVjdGlvbigiaW5qZWN0IiwgMSwgMikpOwotICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlOworICAgICAgICAgICAgdmFyIGdyZW1saW5MYW5nID0gbmV3IEdyZW1saW5MYW5nKCk7CisgICAgICAgICAgICBncmVtbGluTGFuZy5BZGRTdGVwKCJpbmplY3QiLCAxLCAyKTsKKyAgICAgICAgICAgIHJldHVybiBncmVtbGluTGFuZzsKICAgICAgICAgfQogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvR3JlbWxpbkNsaWVudEF1dGhlbnRpY2F0aW9uVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvR3JlbWxpbkNsaWVudEF1dGhlbnRpY2F0aW9uVGVzdHMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NjNkZGEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL0dyZW1saW5DbGllbnRBdXRoZW50aWNhdGlvblRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5OZXQuV2ViU29ja2V0czsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBTeXN0ZW0uTmV0LlNlY3VyaXR5OwotdXNpbmcgU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeS5YNTA5Q2VydGlmaWNhdGVzOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLkV4Y2VwdGlvbnM7Ci11c2luZyBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuVXRpbDsKLXVzaW5nIFh1bml0OwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0LkRyaXZlcgotewotICAgIHB1YmxpYyBjbGFzcyBHcmVtbGluQ2xpZW50QXV0aGVudGljYXRpb25UZXN0cwotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc3RyaW5nIFRlc3RIb3N0ID0gQ29uZmlnUHJvdmlkZXIuQ29uZmlndXJhdGlvblsiVGVzdFNlcnZlcklwQWRkcmVzcyJdITsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgaW50IFRlc3RQb3J0ID0gQ29udmVydC5Ub0ludDMyKENvbmZpZ1Byb3ZpZGVyLkNvbmZpZ3VyYXRpb25bIlRlc3RTZWN1cmVTZXJ2ZXJQb3J0Il0pOwotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IFJlcXVlc3RNZXNzYWdlUHJvdmlkZXIgX3JlcXVlc3RNZXNzYWdlUHJvdmlkZXIgPSBuZXcgUmVxdWVzdE1lc3NhZ2VQcm92aWRlcigpOwotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbCBJZ25vcmVDZXJ0aWZpY2F0ZVZhbGlkYXRpb25MaXZlRGFuZ2Vyb3VzbHlXaGVlZWVlZWVlKAotICAgICAgICAgICAgICBvYmplY3Qgc2VuZGVyLAotICAgICAgICAgICAgICBYNTA5Q2VydGlmaWNhdGU/IGNlcnRpZmljYXRlLAotICAgICAgICAgICAgICBYNTA5Q2hhaW4/IGNoYWluLAotICAgICAgICAgICAgICBTc2xQb2xpY3lFcnJvcnMgc3NsUG9saWN5RXJyb3JzKQotICAgICAgICB7Ci0gICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFRocm93Rm9yTWlzc2luZ0NyZWRlbnRpYWxzKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xpZW50V2ViU29ja2V0T3B0aW9ucz8gb3B0aW9uc1NldCA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgd2ViU29ja2V0Q29uZmlndXJhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbjxDbGllbnRXZWJTb2NrZXRPcHRpb25zPihvcHRpb25zID0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlJlbW90ZUNlcnRpZmljYXRlVmFsaWRhdGlvbkNhbGxiYWNrICs9IElnbm9yZUNlcnRpZmljYXRlVmFsaWRhdGlvbkxpdmVEYW5nZXJvdXNseVdoZWVlZWVlZWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNTZXQgPSBvcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQsIGVuYWJsZVNzbDogdHJ1ZSk7Ci0gICAgICAgICAgICB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyLCB3ZWJTb2NrZXRDb25maWd1cmF0aW9uOiB3ZWJTb2NrZXRDb25maWd1cmF0aW9uKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgZXhjZXB0aW9uID0gYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KAotICAgICAgICAgICAgICAgICAgICBhc3luYyAoKSA9PiBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxzdHJpbmc+KF9yZXF1ZXN0TWVzc2FnZVByb3ZpZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAuR2V0RHVtbXlNZXNzYWdlKCkpKTsKLQotICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiYXV0aGVudGljYXRpb24iLCBleGNlcHRpb24uTWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJjcmVkZW50aWFscyIsIGV4Y2VwdGlvbi5NZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKCJ1bmtub3duVXNlciIsICJwYXNzd29yZERvZXNudE1hdHRlciIpXQotICAgICAgICBbSW5saW5lRGF0YSgic3RlcGhlbiIsICJ3cm9uZ1Bhc3N3b3JkIildCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFRocm93Rm9yV3JvbmdDcmVkZW50aWFscyhzdHJpbmcgdXNlcm5hbWUsIHN0cmluZyBwYXNzd29yZCkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xpZW50V2ViU29ja2V0T3B0aW9ucz8gb3B0aW9uc1NldCA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgd2ViU29ja2V0Q29uZmlndXJhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbjxDbGllbnRXZWJTb2NrZXRPcHRpb25zPihvcHRpb25zID0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlJlbW90ZUNlcnRpZmljYXRlVmFsaWRhdGlvbkNhbGxiYWNrICs9IElnbm9yZUNlcnRpZmljYXRlVmFsaWRhdGlvbkxpdmVEYW5nZXJvdXNseVdoZWVlZWVlZWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNTZXQgPSBvcHRpb25zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQsIHVzZXJuYW1lOiB1c2VybmFtZSwgcGFzc3dvcmQ6IHBhc3N3b3JkLCBlbmFibGVTc2w6IHRydWUpOwotICAgICAgICAgICAgdXNpbmcgKHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlciwgd2ViU29ja2V0Q29uZmlndXJhdGlvbjogd2ViU29ja2V0Q29uZmlndXJhdGlvbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGV4Y2VwdGlvbiA9IGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxSZXNwb25zZUV4Y2VwdGlvbj4oCi0gICAgICAgICAgICAgICAgICAgIGFzeW5jICgpID0+IGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPHN0cmluZz4oX3JlcXVlc3RNZXNzYWdlUHJvdmlkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC5HZXREdW1teU1lc3NhZ2UoKSkpOwotCi0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJVbmF1dGhvcml6ZWQiLCBleGNlcHRpb24uTWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgiJ0hlbGxvJyArICdXb3JsZCciLCAiSGVsbG9Xb3JsZCIpXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTY3JpcHRTaG91bGRCZUV2YWx1YXRlZEFuZFJlc3VsdFJldHVybmVkRm9yQ29ycmVjdENyZWRlbnRpYWxzKHN0cmluZyByZXF1ZXN0TXNnLAotICAgICAgICAgICAgc3RyaW5nIGV4cGVjdGVkUmVzcG9uc2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENsaWVudFdlYlNvY2tldE9wdGlvbnM/IG9wdGlvbnNTZXQgPSBudWxsOwotICAgICAgICAgICAgdmFyIHdlYlNvY2tldENvbmZpZ3VyYXRpb24gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb248Q2xpZW50V2ViU29ja2V0T3B0aW9ucz4ob3B0aW9ucyA9PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5SZW1vdGVDZXJ0aWZpY2F0ZVZhbGlkYXRpb25DYWxsYmFjayArPSBJZ25vcmVDZXJ0aWZpY2F0ZVZhbGlkYXRpb25MaXZlRGFuZ2Vyb3VzbHlXaGVlZWVlZWVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zU2V0ID0gb3B0aW9uczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyB1c2VybmFtZSA9ICJzdGVwaGVuIjsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBwYXNzd29yZCA9ICJwYXNzd29yZCI7Ci0gICAgICAgICAgICB2YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFRlc3RIb3N0LCBUZXN0UG9ydCwgdXNlcm5hbWU6IHVzZXJuYW1lLCBwYXNzd29yZDogcGFzc3dvcmQsIGVuYWJsZVNzbDogdHJ1ZSk7Ci0gICAgICAgICAgICB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyLCB3ZWJTb2NrZXRDb25maWd1cmF0aW9uOiB3ZWJTb2NrZXRDb25maWd1cmF0aW9uKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxzdHJpbmc+KHJlcXVlc3RNc2cpOwotCi0gICAgICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkUmVzcG9uc2UsIHJlc3BvbnNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvR3JlbWxpbkNsaWVudEJlaGF2aW9ySW50ZWdyYXRpb25UZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9HcmVtbGluQ2xpZW50QmVoYXZpb3JJbnRlZ3JhdGlvblRlc3RzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2I5MjYyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9HcmVtbGluQ2xpZW50QmVoYXZpb3JJbnRlZ3JhdGlvblRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLSNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9uczsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKLXVzaW5nIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC5VdGlsOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwotdXNpbmcgWHVuaXQ7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuRHJpdmVyCi17Ci0gICAgcHVibGljIGNsYXNzIEdyZW1saW5DbGllbnRCZWhhdmlvckludGVncmF0aW9uVGVzdHMKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHN0cmluZyBUZXN0SG9zdCA9IENvbmZpZ1Byb3ZpZGVyLkNvbmZpZ3VyYXRpb25bIkdyZW1saW5Tb2NrZXRTZXJ2ZXJJcEFkZHJlc3MiXSE7Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU29ja2V0U2VydmVyU2V0dGluZ3MgU2V0dGluZ3MgPQotICAgICAgICAgICAgU29ja2V0U2VydmVyU2V0dGluZ3MuRnJvbVlhbWwoQ29uZmlnUHJvdmlkZXIuQ29uZmlndXJhdGlvblsiR3JlbWxpblNvY2tldFNlcnZlckNvbmZpZyJdKTsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBJTWVzc2FnZVNlcmlhbGl6ZXIgU2VyaWFsaXplcjsKLQotICAgICAgICBwdWJsaWMgR3JlbWxpbkNsaWVudEJlaGF2aW9ySW50ZWdyYXRpb25UZXN0cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoU2V0dGluZ3MuU2VyaWFsaXplcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlICJHcmFwaFNPTlYyIjoKLSAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTjJNZXNzYWdlU2VyaWFsaXplcigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJHcmFwaFNPTlYzIjoKLSAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJHcmFwaEJpbmFyeVYxIjoKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBTZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVHJ5Q3JlYXRlTmV3Q29ubmVjdGlvbklmQ2xvc2VkQnlTZXJ2ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc2Vzc2lvbklkID0gR3VpZC5OZXdHdWlkKCkuVG9TdHJpbmcoKTsKLSAgICAgICAgICAgIHZhciBwb29sU2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyB7UG9vbFNpemUgPSAxfTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgU2V0dGluZ3MuUG9ydCk7Ci0gICAgICAgICAgICB1c2luZyB2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIsIG1lc3NhZ2VTZXJpYWxpemVyOiBTZXJpYWxpemVyLAotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3M6IHBvb2xTZXR0aW5ncywgc2Vzc2lvbklkOiBzZXNzaW9uSWQpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgZ3JlbWxpbkNsaWVudC5OckNvbm5lY3Rpb25zKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy9TZW5kIGNsb3NlIHJlcXVlc3QgdG8gc2VydmVyLCBlbnN1cmUgc2VydmVyIGNsb3NlcyBjb25uZWN0aW9uCi0gICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8Q29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbj4oYXN5bmMgKCkgPT4KLSAgICAgICAgICAgICAgICBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxWZXJ0ZXg+KFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCIxIikKLSAgICAgICAgICAgICAgICAgICAgLk92ZXJyaWRlUmVxdWVzdElkKFNldHRpbmdzLkNsb3NlQ29ubmVjdGlvblJlcXVlc3RJZCkuQ3JlYXRlKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy92ZXJpZnkgdGhhdCBuZXcgY2xpZW50IHJlY29ubmVjdHMgYW5kIG5ldyByZXF1ZXN0cyBjYW4gYmUgbWFkZSBhZ2FpbgotICAgICAgICAgICAgdmFyIHJlc3BvbnNlMiA9IGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPFZlcnRleD4oUmVxdWVzdE1lc3NhZ2UuQnVpbGQoIjEiKQotICAgICAgICAgICAgICAgIC5PdmVycmlkZVJlcXVlc3RJZChTZXR0aW5ncy5TaW5nbGVWZXJ0ZXhSZXF1ZXN0SWQpLkNyZWF0ZSgpKTsKLSAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKHJlc3BvbnNlMik7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgZ3JlbWxpbkNsaWVudC5OckNvbm5lY3Rpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRJbmNsdWRlVXNlckFnZW50SW5IYW5kc2hha2VSZXF1ZXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgU2V0dGluZ3MuUG9ydCk7Ci0gICAgICAgICAgICB1c2luZyB2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIsIG1lc3NhZ2VTZXJpYWxpemVyOiBTZXJpYWxpemVyKTsKLQotICAgICAgICAgICAgLy92ZXJpZnkgdGhhdCB0aGUgc2VydmVyIHJlY2VpdmVkIHRoZSBjb3JyZWN0IHVzZXIgYWdlbnQgZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuCi0gICAgICAgICAgICB2YXIgdXNlckFnZW50UmVzcG9uc2UgPSBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxTdHJpbmc+KFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCIxIikKLSAgICAgICAgICAgICAgICAuT3ZlcnJpZGVSZXF1ZXN0SWQoU2V0dGluZ3MuVXNlckFnZW50UmVxdWVzdElkKS5DcmVhdGUoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoR3JlbWxpbi5OZXQuUHJvY2Vzcy5VdGlscy5Vc2VyQWdlbnQsIHVzZXJBZ2VudFJlc3BvbnNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGROb3RJbmNsdWRlVXNlckFnZW50SW5IYW5kc2hha2VSZXF1ZXN0SWZEaXNhYmxlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBwb29sU2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyB7IEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IGZhbHNlIH07Ci0KLSAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFNldHRpbmdzLlBvcnQpOwotICAgICAgICAgICAgdXNpbmcgdmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyLCBtZXNzYWdlU2VyaWFsaXplcjogU2VyaWFsaXplciwKLSAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzOiBwb29sU2V0dGluZ3MpOwotCi0gICAgICAgICAgICAvL3ZlcmlmeSB0aGF0IHRoZSBzZXJ2ZXIgZGlkIG5vdCByZWNlaXZlIGFueSB1c2VyIGFnZW50LgotICAgICAgICAgICAgdmFyIHVzZXJBZ2VudFJlc3BvbnNlID0gYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8U3RyaW5nPihSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiMSIpCi0gICAgICAgICAgICAgICAgLk92ZXJyaWRlUmVxdWVzdElkKFNldHRpbmdzLlVzZXJBZ2VudFJlcXVlc3RJZCkuQ3JlYXRlKCkpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCIiLCB1c2VyQWdlbnRSZXNwb25zZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU2VuZFBlclJlcXVlc3RTZXR0aW5nc1RvU2VydmVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgU2V0dGluZ3MuUG9ydCk7Ci0gICAgICAgICAgICB1c2luZyB2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIsIG1lc3NhZ2VTZXJpYWxpemVyOiBTZXJpYWxpemVyKTsKLQotICAgICAgICAgICAgLy92ZXJpZnkgdGhhdCBuZXcgY2xpZW50IHJlY29ubmVjdHMgYW5kIG5ldyByZXF1ZXN0cyBjYW4gYmUgbWFkZSBhZ2FpbgotICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8U3RyaW5nPihSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiMSIpCi0gICAgICAgICAgICAgICAgLk92ZXJyaWRlUmVxdWVzdElkKFNldHRpbmdzLlBlclJlcXVlc3RTZXR0aW5nc1JlcXVlc3RJZCkKLSAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NFdmFsVGltZW91dCwgMTIzNCkKLSAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NCYXRjaFNpemUsIDEyKQotICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnc1VzZXJBZ2VudCwgImhlbGxvV29ybGQiKQotICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnTWF0ZXJpYWxpemVQcm9wZXJ0aWVzLCAidG9rZW5zIikKLSAgICAgICAgICAgICAgICAuQ3JlYXRlKCkpOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRSZXNwb25zZSA9ICQicmVxdWVzdElkPXtTZXR0aW5ncy5QZXJSZXF1ZXN0U2V0dGluZ3NSZXF1ZXN0SWR9IGV2YWx1YXRpb25UaW1lb3V0PTEyMzQsIGJhdGNoU2l6ZT0xMiwgdXNlckFnZW50PWhlbGxvV29ybGQsIG1hdGVyaWFsaXplUHJvcGVydGllcz10b2tlbnMiOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkUmVzcG9uc2UsIHJlc3BvbnNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9HcmVtbGluQ2xpZW50VGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvR3JlbWxpbkNsaWVudFRlc3RzLmNzCmluZGV4IDI1YWY0MDUuLmE5MWRmZTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9HcmVtbGluQ2xpZW50VGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL0dyZW1saW5DbGllbnRUZXN0cy5jcwpAQCAtMjMsOCArMjMsNiBAQAogCiB1c2luZyBTeXN0ZW07CiB1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5OZXQuV2ViU29ja2V0czsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmc7CiB1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLkV4Y2VwdGlvbnM7CkBAIC00Myw4ICs0MSw4IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGludCBUZXN0UG9ydCA9IENvbnZlcnQuVG9JbnQzMihDb25maWdQcm92aWRlci5Db25maWd1cmF0aW9uWyJUZXN0U2VydmVyUG9ydCJdKTsKIAogICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgiJ2p1c3RBU3RyaW5nJyIsICJqdXN0QVN0cmluZyIpXQotICAgICAgICBbSW5saW5lRGF0YSgiJ0hlbGxvJyArICdXb3JsZCciLCAiSGVsbG9Xb3JsZCIpXQorICAgICAgICBbSW5saW5lRGF0YSgiZy5pbmplY3QoJ2p1c3RBU3RyaW5nJykiLCAianVzdEFTdHJpbmciKV0KKyAgICAgICAgW0lubGluZURhdGEoImcuaW5qZWN0KCdIZWxsb1dvcmxkJykiLCAiSGVsbG9Xb3JsZCIpXQogICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZW5kU2NyaXB0Rm9yRXZhbHVhdGlvbkFuZFJldHVybkNvcnJlY3RSZXN1bHQoc3RyaW5nIHJlcXVlc3RNc2csIHN0cmluZyBleHBlY3RlZFJlc3BvbnNlKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFRlc3RIb3N0LCBUZXN0UG9ydCk7CkBAIC02MiwxMiArNjAsMTEgQEAKICAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKICAgICAgICAgICAgIHVzaW5nICh2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciByZXNwb25zZU1zZ1NpemUgPSA1MDAwOwotICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gJCInMScqe3Jlc3BvbnNlTXNnU2l6ZX0iOworICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5LDEwKSI7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxzdHJpbmc+KHJlcXVlc3RNc2cpOworICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmM8aW50PihyZXF1ZXN0TXNnKTsKIAotICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChyZXNwb25zZU1zZ1NpemUsIHJlc3BvbnNlIS5MZW5ndGgpOworICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbCgxMCwgcmVzcG9uc2UuQ291bnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTc3LDE1ICs3NCwxMCBAQAogICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQpOwogICAgICAgICAgICAgdXNpbmcgKHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlcikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGdyZW1saW5TY3JpcHQgPSAiZy5WKCkuaGFzKHByb3BlcnR5S2V5LCBwcm9wZXJ0eVZhbHVlKTsiOwotICAgICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgeyJwcm9wZXJ0eUtleSIsICJuYW1lIn0sCi0gICAgICAgICAgICAgICAgICAgIHsicHJvcGVydHlWYWx1ZSIsICJ1bmtub3duVGVzdE5hbWUifQotICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgdmFyIGdyZW1saW5TY3JpcHQgPSAiZy5WKCkuaGFzKCduYW1lJywndW5rbm93blRlc3ROYW1lJykiOwogCiAgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0KLSAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8b2JqZWN0PihncmVtbGluU2NyaXB0LCBiaW5kaW5ncyk7CisgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPG9iamVjdD4oZ3JlbWxpblNjcmlwdCk7CiAKICAgICAgICAgICAgICAgICBBc3NlcnQuTnVsbChyZXNwb25zZSk7CiAgICAgICAgICAgICB9CkBAIC0xMDMsNDEgKzk1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxSZXNwb25zZUV4Y2VwdGlvbj4oKCkgPT4gZ3JlbWxpbkNsaWVudC5TdWJtaXRBc3luYyhyZXF1ZXN0TXNnKSk7CiAKICAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwodHlwZW9mKFJlc3BvbnNlRXhjZXB0aW9uKSwgZXhjZXB0aW9uLkdldFR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCQiU2VydmVyRXZhbHVhdGlvbkVycm9yOiBObyBzdWNoIHByb3BlcnR5OiB7cmVxdWVzdE1zZ30iLAotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24uTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJGYWlsZWQgdG8gaW50ZXJwcmV0IEdyZW1saW4gcXVlcnkiLCBleGNlcHRpb24uTWVzc2FnZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU3VwcG9ydENhbmNlbGxhdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKLSAgICAgICAgICAgIHVzaW5nIHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlcik7Ci0gICAgICAgICAgICBjb25zdCBpbnQgc2xlZXBUaW1lID0gNTAwMDsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gX3JlcXVlc3RNZXNzYWdlUHJvdmlkZXIuR2V0U2xlZXBNZXNzYWdlKHNsZWVwVGltZSk7Ci0gICAgICAgICAgICB2YXIgY3RzID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7Ci0KLSAgICAgICAgICAgIHZhciBzdWJtaXRUYXNrID0gZ3JlbWxpbkNsaWVudC5TdWJtaXRBc3luYzxvYmplY3Q+KHJlcXVlc3RNc2csIGN0cy5Ub2tlbik7Ci0gICAgICAgICAgICBhd2FpdCBUYXNrLkRlbGF5KFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoc2xlZXBUaW1lICogMC4xKSwgQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSk7Ci0gICAgICAgICAgICBjdHMuQ2FuY2VsKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxUYXNrQ2FuY2VsZWRFeGNlcHRpb24+KCgpID0+IHN1Ym1pdFRhc2spOwotICAgICAgICAgICAgQXNzZXJ0LlRydWUoc3VibWl0VGFzay5Jc0NhbmNlbGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQogICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRSZWFzc2VtYmxlUmVzcG9uc2VCYXRjaGVzKCkKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGJhdGNoU2l6ZSA9IDI7CiAgICAgICAgICAgICB2YXIgZXhwZWN0ZWRSZXN1bHQgPSBuZXcgTGlzdDxpbnQ+IHsxLCAyLCAzLCA0LCA1fTsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0U2NyaXB0ID0gJCJ7bmFtZW9mKGV4cGVjdGVkUmVzdWx0KX0iOwotICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHt7bmFtZW9mKGV4cGVjdGVkUmVzdWx0KSwgZXhwZWN0ZWRSZXN1bHR9fTsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0TWVzc2FnZSA9Ci0gICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0V2YWwpCi0gICAgICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnc0JhdGNoU2l6ZSwgYmF0Y2hTaXplKQotICAgICAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NHcmVtbGluLCByZXF1ZXN0U2NyaXB0KQotICAgICAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NCaW5kaW5ncywgYmluZGluZ3MpCi0gICAgICAgICAgICAgICAgICAgIC5DcmVhdGUoKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0U2NyaXB0ID0gImcuaW5qZWN0KDEsMiwzLDQsNSkiOworICAgICAgICAgICAgdmFyIHJlcXVlc3RNZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQocmVxdWVzdFNjcmlwdCkuQ3JlYXRlKCk7CiAgICAgICAgICAgICB2YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFRlc3RIb3N0LCBUZXN0UG9ydCk7CiAgICAgICAgICAgICB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyKSkKICAgICAgICAgICAgIHsKQEAgLTE0OCw0MSArMTE1LDE1IEBACiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQ29ycmVjdGx5QXNzaWduUmVzcG9uc2VzVG9SZXF1ZXN0cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKLSAgICAgICAgICAgIHVzaW5nICh2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBzbGVlcFRpbWUgPSAxMDA7Ci0gICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkRmlyc3RSZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgIHZhciBncmVtbGluU2NyaXB0ID0gX3JlcXVlc3RNZXNzYWdlUHJvdmlkZXIuR2V0U2xlZXBHcmVtbGluU2NyaXB0KHNsZWVwVGltZSk7Ci0gICAgICAgICAgICAgICAgZ3JlbWxpblNjcmlwdCArPSAkIntleHBlY3RlZEZpcnN0UmVzdWx0fSI7Ci0gICAgICAgICAgICAgICAgdmFyIGZpcnN0UmVxdWVzdE1zZyA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKFRva2Vucy5PcHNFdmFsKQotICAgICAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NHcmVtbGluLCBncmVtbGluU2NyaXB0KS5DcmVhdGUoKTsKLSAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWRTZWNvbmRSZXNwb25zZSA9IDI7Ci0gICAgICAgICAgICAgICAgdmFyIHNlY29uZFNjcmlwdCA9ICQie2V4cGVjdGVkU2Vjb25kUmVzcG9uc2V9IjsKLQotICAgICAgICAgICAgICAgIHZhciBmaXJzdFJlc3BvbnNlVGFzayA9IGdyZW1saW5DbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPGludD4oZmlyc3RSZXF1ZXN0TXNnKTsKLSAgICAgICAgICAgICAgICB2YXIgc2Vjb25kUmVzcG9uc2VUYXNrID0gZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8aW50PihzZWNvbmRTY3JpcHQpOwotCi0gICAgICAgICAgICAgICAgdmFyIHNlY29uZFJlc3BvbnNlID0gYXdhaXQgc2Vjb25kUmVzcG9uc2VUYXNrOwotICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZFNlY29uZFJlc3BvbnNlLCBzZWNvbmRSZXNwb25zZSk7Ci0gICAgICAgICAgICAgICAgdmFyIGZpcnN0UmVzcG9uc2UgPSBhd2FpdCBmaXJzdFJlc3BvbnNlVGFzazsKLSAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRGaXJzdFJlc3VsdCwgZmlyc3RSZXNwb25zZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KICAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkUmV0dXJuRW51bWVyYWJsZVJlc3VsdCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKICAgICAgICAgICAgIHVzaW5nICh2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZFJlc3VsdCA9IG5ldyBMaXN0PGludD4gezEsIDIsIDMsIDQsIDV9OwotICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gJCJ7bmFtZW9mKGV4cGVjdGVkUmVzdWx0KX0iOwotICAgICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7e25hbWVvZihleHBlY3RlZFJlc3VsdCksIGV4cGVjdGVkUmVzdWx0fX07CisgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RNc2cgPSAiZy5pbmplY3QoMSwyLDMsNCw1KSI7CiAKLSAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jPGludD4ocmVxdWVzdE1zZywgYmluZGluZ3MpOworICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmM8aW50PihyZXF1ZXN0TXNnKTsKIAogICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZFJlc3VsdCwgcmVzcG9uc2UpOwogICAgICAgICAgICAgfQpAQCAtMTk3LDcgKzEzOCw2IEBACiAgICAgICAgICAgICB2YXIgcmVzdWx0U2V0ID0gYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRBc3luYzxpbnQ+KHJlcXVlc3RNc2cpOwogCiAgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChyZXN1bHRTZXQuU3RhdHVzQXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBBc3NlcnQuVHJ1ZShyZXN1bHRTZXQuU3RhdHVzQXR0cmlidXRlcy5Db250YWluc0tleSgiaG9zdCIpKTsKICAgICAgICAgfQogCiAgICAgICAgIFtGYWN0XQpAQCAtMjMwLDcyICsxNzAsMTYgQEAKICAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKICAgICAgICAgICAgIHVzaW5nICh2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gImEgKyBiIjsKLSAgICAgICAgICAgICAgICB2YXIgYSA9IDE7Ci0gICAgICAgICAgICAgICAgdmFyIGIgPSAyOwotICAgICAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7eyJhIiwgYX0sIHsiYiIsIGJ9fTsKKyAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdE1zZyA9ICJnLmluamVjdCgzKSI7CiAKICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPQotICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxpbnQ+KHJlcXVlc3RNc2csIGJpbmRpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8aW50PihyZXF1ZXN0TXNnKTsKIAotICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChhICsgYiwgcmVzcG9uc2UpOworICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbCgzLCByZXNwb25zZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQ29uZmlndXJlV2ViU29ja2V0T3B0aW9uc0FzU3BlY2lmaWVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQpOwotICAgICAgICAgICAgQ2xpZW50V2ViU29ja2V0T3B0aW9ucz8gb3B0aW9uc1NldCA9IG51bGw7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRLZWVwQWxpdmVJbnRlcnZhbCA9IFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoMTEpOwotICAgICAgICAgICAgdmFyIHdlYlNvY2tldENvbmZpZ3VyYXRpb24gPQotICAgICAgICAgICAgICAgIG5ldyBBY3Rpb248Q2xpZW50V2ViU29ja2V0T3B0aW9ucz4ob3B0aW9ucyA9PgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5Vc2VEZWZhdWx0Q3JlZGVudGlhbHMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5LZWVwQWxpdmVJbnRlcnZhbCA9IGV4cGVjdGVkS2VlcEFsaXZlSW50ZXJ2YWw7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNTZXQgPSBvcHRpb25zOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgdXNpbmcgKHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlciwgd2ViU29ja2V0Q29uZmlndXJhdGlvbjogd2ViU29ja2V0Q29uZmlndXJhdGlvbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gc2VuZCBkdW1teSBtZXNzYWdlIHRvIGNyZWF0ZSBhdCBsZWFzdCBvbmUgY29ubmVjdGlvbgotICAgICAgICAgICAgICAgIGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmMoX3JlcXVlc3RNZXNzYWdlUHJvdmlkZXIuR2V0RHVtbXlNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKG9wdGlvbnNTZXQpOwotICAgICAgICAgICAgICAgIEFzc2VydC5GYWxzZShvcHRpb25zU2V0LlVzZURlZmF1bHRDcmVkZW50aWFscyk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkS2VlcEFsaXZlSW50ZXJ2YWwsIG9wdGlvbnNTZXQuS2VlcEFsaXZlSW50ZXJ2YWwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFNhdmVWYXJpYWJsZUJldHdlZW5SZXF1ZXN0c0luU2Vzc2lvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKLSAgICAgICAgICAgIHZhciBzZXNzaW9uSWQgPSBHdWlkLk5ld0d1aWQoKS5Ub1N0cmluZygpOwotICAgICAgICAgICAgdXNpbmcgKHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlciwgc2Vzc2lvbklkOiBzZXNzaW9uSWQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmM8aW50PigieCA9IDEiKTsKLQotICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZFJlc3VsdCA9IG5ldyBMaXN0PGludD4gezN9OwotICAgICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGF3YWl0IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmM8aW50PigieCArIDIiKTsKLQotICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZFJlc3VsdCwgcmVzcG9uc2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyLCBzZXNzaW9uSWQ6IHNlc3Npb25JZCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jPGludD4oIngiKTsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LlRydWUoZmFsc2UsICJUaGUgJ3gnIHZhcmlhYmxlIHNob3VsZCBub3QgZXhpc3QgYWZ0ZXIgc2Vzc2lvbiBjbG9zZSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCiAgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZExvZ1dpdGhQcm92aWRlZExvZ2dlckZhY3RvcnkoKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgbG9nZ2VyRmFjdG9yeSA9IFN1YnN0aXR1dGUuRm9yPElMb2dnZXJGYWN0b3J5PigpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL01lc3NhZ2VzVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvTWVzc2FnZXNUZXN0cy5jcwppbmRleCA2Y2ZmZGY5Li4wODI2MTBjIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvTWVzc2FnZXNUZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Ecml2ZXIvTWVzc2FnZXNUZXN0cy5jcwpAQCAtMjIsOCArMjIsNiBAQAogI2VuZHJlZ2lvbgogCiB1c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5EaWFnbm9zdGljczsKIHVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9uczsKQEAgLTQwLDI3ICszOCw2IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGludCBUZXN0UG9ydCA9IENvbnZlcnQuVG9JbnQzMihDb25maWdQcm92aWRlci5Db25maWd1cmF0aW9uWyJUZXN0U2VydmVyUG9ydCJdKTsKIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVXNlQWxpYXNGb3JUcmF2ZXJzYWxTb3VyY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKFRlc3RIb3N0LCBUZXN0UG9ydCk7Ci0gICAgICAgICAgICB1c2luZyAodmFyIGdyZW1saW5DbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChncmVtbGluU2VydmVyKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgYWxpYXNUcmF2ZXJzYWxTb3VyY2UgPSAiZzIiOwotICAgICAgICAgICAgICAgIHZhciBhbGlhc2VzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBzdHJpbmc+IHt7YWxpYXNUcmF2ZXJzYWxTb3VyY2UsICJnIn19OwotICAgICAgICAgICAgICAgIHZhciBncmVtbGluU2NyaXB0ID0gJCJ7YWxpYXNUcmF2ZXJzYWxTb3VyY2V9LlYoKS5jb3VudCgpIjsKLSAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdE1zZyA9Ci0gICAgICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLkJ1aWxkKFRva2Vucy5PcHNFdmFsKQotICAgICAgICAgICAgICAgICAgICAgICAgLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzQWxpYXNlcywgYWxpYXNlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnc0dyZW1saW4sIGdyZW1saW5TY3JpcHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAuQ3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgZ3JlbWxpbkNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8bG9uZz4ocmVxdWVzdE1zZyk7Ci0KLSAgICAgICAgICAgICAgICBBc3NlcnQuSW5SYW5nZShyZXN1bHQsIDAsIGxvbmcuTWF4VmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCiAgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFRocm93Rm9ySW52YWxpZE9wZXJhdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKQEAgLTcyLDU5ICs0OSwxMiBAQAogICAgICAgICAgICAgICAgIHZhciB0aHJvd25FeGNlcHRpb24gPQogICAgICAgICAgICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8UmVzcG9uc2VFeGNlcHRpb24+KCgpID0+IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmM8ZHluYW1pYz4ocmVxdWVzdE1zZykpOwogCi0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJNYWxmb3JtZWRSZXF1ZXN0IiwgdGhyb3duRXhjZXB0aW9uLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiRmFpbGVkIHRvIGludGVycHJldCBHcmVtbGluIHF1ZXJ5IiwgdGhyb3duRXhjZXB0aW9uLk1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucyhpdmFsaWRPcGVyYXRpb25OYW1lLCB0aHJvd25FeGNlcHRpb24uTWVzc2FnZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVGhyb3dGb3JJbnZhbGlkUHJvY2Vzc29yKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQpOwotICAgICAgICAgICAgdXNpbmcgKHZhciBncmVtbGluQ2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQoZ3JlbWxpblNlcnZlcikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFyIGludmFsaWRQcm9jZXNzb3JOYW1lID0gImludmFsaWQiOwotICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoIiIpLlByb2Nlc3NvcihpbnZhbGlkUHJvY2Vzc29yTmFtZSkuQ3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGhyb3duRXhjZXB0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPFJlc3BvbnNlRXhjZXB0aW9uPigoKSA9PiBncmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jPGR5bmFtaWM+KHJlcXVlc3RNc2cpKTsKLQotICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiSW52YWxpZFJlcXVlc3RBcmd1bWVudHMiLCB0aHJvd25FeGNlcHRpb24uTWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKGludmFsaWRQcm9jZXNzb3JOYW1lLCB0aHJvd25FeGNlcHRpb24uTWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJPcFByb2Nlc3NvciIsIHRocm93bkV4Y2VwdGlvbi5NZXNzYWdlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRVc2VTcGVjaWZpZWRFdmFsdWF0aW9uVGltZW91dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKLSAgICAgICAgICAgIHVzaW5nICh2YXIgZ3JlbWxpbkNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGxvbmcgdGltZU91dEluTXMgPSAxTDsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQgc2NyaXB0U2xlZXBUaW1lSW5NcyA9IDYwMDAwOwotICAgICAgICAgICAgICAgIHZhciBzbGVlcFNjcmlwdCA9IF9yZXF1ZXN0TWVzc2FnZVByb3ZpZGVyLkdldFNsZWVwR3JlbWxpblNjcmlwdChzY3JpcHRTbGVlcFRpbWVJbk1zKTsKLQotICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0KLSAgICAgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0V2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NHcmVtbGluLCBzbGVlcFNjcmlwdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudChUb2tlbnMuQXJnc0V2YWxUaW1lb3V0LCB0aW1lT3V0SW5NcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5DcmVhdGUoKTsKLSAgICAgICAgICAgICAgICB2YXIgZXZhbHVhdGlvblN0b3BXYXRjaCA9IG5ldyBTdG9wd2F0Y2goKTsKLSAgICAgICAgICAgICAgICBldmFsdWF0aW9uU3RvcFdhdGNoLlN0YXJ0KCk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgdGhyb3duRXhjZXB0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPFJlc3BvbnNlRXhjZXB0aW9uPigoKSA9PiBncmVtbGluQ2xpZW50LlN1Ym1pdEFzeW5jKHJlcXVlc3RNc2cpKTsKLQotICAgICAgICAgICAgICAgIGV2YWx1YXRpb25TdG9wV2F0Y2guU3RvcCgpOwotICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiU2VydmVyVGltZW91dCIsIHRocm93bkV4Y2VwdGlvbi5NZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnModGltZU91dEluTXMuVG9TdHJpbmcoKSwgdGhyb3duRXhjZXB0aW9uLk1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIEFzc2VydC5UcnVlKGV2YWx1YXRpb25TdG9wV2F0Y2guRWxhcHNlZE1pbGxpc2Vjb25kcyA8IHNjcmlwdFNsZWVwVGltZUluTXMsCi0gICAgICAgICAgICAgICAgICAgICQiRWxhcHNlZCB7ZXZhbHVhdGlvblN0b3BXYXRjaC5FbGFwc2VkTWlsbGlzZWNvbmRzfSA+IHtzY3JpcHRTbGVlcFRpbWVJbk1zfSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCiAgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFRocm93Rm9yVW5zdXBwb3J0ZWRMYW5ndWFnZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBncmVtbGluU2VydmVyID0gbmV3IEdyZW1saW5TZXJ2ZXIoVGVzdEhvc3QsIFRlc3RQb3J0KTsKQEAgLTEzMiwxNyArNjIsMTYgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2YXIgdW5rbm93bkxhbmd1YWdlID0gInVua25vd24iOwogICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0KLSAgICAgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0V2YWwpCi0gICAgICAgICAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NHcmVtbGluLCAiMSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAuQWRkQXJndW1lbnQoVG9rZW5zLkFyZ3NMYW5ndWFnZSwgdW5rbm93bkxhbmd1YWdlKQorICAgICAgICAgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5pbmplY3QoMSkiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkFkZEZpZWxkKFRva2Vucy5BcmdzTGFuZ3VhZ2UsIHVua25vd25MYW5ndWFnZSkKICAgICAgICAgICAgICAgICAgICAgICAgIC5DcmVhdGUoKTsKIAogICAgICAgICAgICAgICAgIHZhciB0aHJvd25FeGNlcHRpb24gPQogICAgICAgICAgICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8UmVzcG9uc2VFeGNlcHRpb24+KCgpID0+IGdyZW1saW5DbGllbnQuU3VibWl0QXN5bmMocmVxdWVzdE1zZykpOwogCi0gICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJTZXJ2ZXJFdmFsdWF0aW9uRXJyb3IiLCB0aHJvd25FeGNlcHRpb24uTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJub3QgYW4gYXZhaWxhYmxlIEdyZW1saW5TY3JpcHQiLCB0aHJvd25FeGNlcHRpb24uTWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKHVua25vd25MYW5ndWFnZSwgdGhyb3duRXhjZXB0aW9uLk1lc3NhZ2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0RyaXZlci9Qcm9wZXJ0eURlc2VyaWFsaXphdGlvblRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL1Byb3BlcnR5RGVzZXJpYWxpemF0aW9uVGVzdHMuY3MKaW5kZXggZTEzMWRjMy4uMDFjZDBiMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL1Byb3BlcnR5RGVzZXJpYWxpemF0aW9uVGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvRHJpdmVyL1Byb3BlcnR5RGVzZXJpYWxpemF0aW9uVGVzdHMuY3MKQEAgLTIyLDExICsyMiwxMSBAQAogI2VuZHJlZ2lvbgogCiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7CiB1c2luZyBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuUHJvY2Vzcy5UcmF2ZXJzYWwuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKIHVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwogdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKIHVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwogdXNpbmcgU3lzdGVtLkxpbnE7CiB1c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwpAQCAtNzIsNyArNzIsNyBAQAogCiAgICAgICAgICAgICB2YXIgdmVydGV4ID0gZy5XaXRoKFRva2Vucy5BcmdNYXRlcmlhbGl6ZVByb3BlcnRpZXMsICJhbGwiKS5WKDEpLk5leHQoKTsKIAotICAgICAgICAgICAgVmVyaWZ5VmVydGV4UHJvcGVydGllcyh2ZXJ0ZXgpOworICAgICAgICAgICAgVmVyaWZ5VmVydGV4UHJvcGVydGllc0F0TGVhc3QodmVydGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIFtUaGVvcnldCkBAIC05Myw3ICs5Myw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBjbGllbnQgPSBfY29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ2xpZW50KHNlcmlhbGl6ZXIpOwogCi0gICAgICAgICAgICB2YXIgdmVydGV4ID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxWZXJ0ZXg+KCJnbW9kZXJuLlYoMSkiKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigxKSIpLkFkZEcoImdtb2Rlcm4iKS5DcmVhdGUoKTsKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBhd2FpdCBjbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPFZlcnRleD4ocmVxdWVzdE1zZyk7CiAKICAgICAgICAgICAgIFZlcmlmeVZlcnRleFByb3BlcnRpZXModmVydGV4KTsKICAgICAgICAgfQpAQCAtMTA0LDcgKzEwNSw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBjbGllbnQgPSBfY29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ2xpZW50KHNlcmlhbGl6ZXIpOwogCi0gICAgICAgICAgICB2YXIgdmVydGV4ID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxWZXJ0ZXg+KCJnaW1tdXRhYmxlLmFkZFYoJ3Rlc3QnKSIpOworICAgICAgICAgICAgdmFyIHJlcXVlc3RNc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5hZGRWKCd0ZXN0JykiKS5BZGRHKCJnaW1tdXRhYmxlIikuQ3JlYXRlKCk7CisgICAgICAgICAgICB2YXIgdmVydGV4ID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxWZXJ0ZXg+KHJlcXVlc3RNc2cpOwogCiAgICAgICAgICAgICBWZXJpZnlFbXB0eVByb3BlcnRpZXModmVydGV4KTsKICAgICAgICAgfQpAQCAtMTE1LDkgKzExNywxMCBAQAogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgY2xpZW50ID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNsaWVudChzZXJpYWxpemVyKTsKIAotICAgICAgICAgICAgdmFyIHZlcnRleCA9IGF3YWl0IGNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8VmVydGV4PigiZ21vZGVybi53aXRoKCdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnLCAnYWxsJykuVigxKSIpOworICAgICAgICAgICAgdmFyIHJlcXVlc3RNc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy53aXRoKCdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnLCAnYWxsJykuVigxKSIpLkFkZEcoImdtb2Rlcm4iKS5DcmVhdGUoKTsKKyAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBhd2FpdCBjbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPFZlcnRleD4ocmVxdWVzdE1zZyk7CiAKLSAgICAgICAgICAgIFZlcmlmeVZlcnRleFByb3BlcnRpZXModmVydGV4KTsKKyAgICAgICAgICAgIFZlcmlmeVZlcnRleFByb3BlcnRpZXNBdExlYXN0KHZlcnRleCk7CiAgICAgICAgIH0KIAogICAgICAgICBbVGhlb3J5XQpAQCAtMTI2LDcgKzEyOSw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBjbGllbnQgPSBfY29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ2xpZW50KHNlcmlhbGl6ZXIpOwogCi0gICAgICAgICAgICB2YXIgdmVydGV4ID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxWZXJ0ZXg+KCJnbW9kZXJuLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKDEpIik7CisgICAgICAgICAgICB2YXIgcmVxdWVzdE1zZyA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCJnLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKDEpIikuQWRkRygiZ21vZGVybiIpLkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIHZlcnRleCA9IGF3YWl0IGNsaWVudC5TdWJtaXRXaXRoU2luZ2xlUmVzdWx0QXN5bmM8VmVydGV4PihyZXF1ZXN0TXNnKTsKIAogICAgICAgICAgICAgVmVyaWZ5RW1wdHlQcm9wZXJ0aWVzKHZlcnRleCk7CiAgICAgICAgIH0KQEAgLTE1Miw3ICsxNTYsNyBAQAogCiAgICAgICAgICAgICB2YXIgdjEgPSBnLkFkZFYoInYxIikuTmV4dCgpOwogICAgICAgICAgICAgdmFyIHYyID0gZy5BZGRWKCJ2MiIpLk5leHQoKTsKLSAgICAgICAgICAgIHZhciBlZGdlID0gZy5BZGRFKCJ0ZXN0IikuRnJvbSh2MSkuVG8odjIpLk5leHQoKTsKKyAgICAgICAgICAgIHZhciBlZGdlID0gZy5BZGRFKCJ0ZXN0IikuRnJvbShfXy5WKHYxIS5JZCkpLlRvKF9fLlYodjIhLklkKSkuTmV4dCgpOwogCiAgICAgICAgICAgICBWZXJpZnlFbXB0eVByb3BlcnRpZXMoZWRnZSk7CiAgICAgICAgIH0KQEAgLTE2Myw3ICsxNjcsOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgY2xpZW50ID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNsaWVudChzZXJpYWxpemVyKTsKIAotICAgICAgICAgICAgdmFyIGVkZ2UgPSBhd2FpdCBjbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPEVkZ2U+KCJnbW9kZXJuLkUoNykiKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuRSg3KSIpLkFkZEcoImdtb2Rlcm4iKS5DcmVhdGUoKTsKKyAgICAgICAgICAgIHZhciBlZGdlID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxFZGdlPihyZXF1ZXN0TXNnKTsKIAogICAgICAgICAgICAgVmVyaWZ5RWRnZVByb3BlcnRpZXMoZWRnZSk7CiAgICAgICAgIH0KQEAgLTE3NCw4ICsxNzksOCBAQAogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgY2xpZW50ID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNsaWVudChzZXJpYWxpemVyKTsKIAotICAgICAgICAgICAgdmFyIGVkZ2UgPSBhd2FpdCBjbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPEVkZ2U+KAotICAgICAgICAgICAgICAgICJnaW1tdXRhYmxlLmFkZFYoKS5hcygndjEnKS5hZGRWKCkuYXMoJ3YyJykuYWRkRSgndGVzdCcpLmZyb20oJ3YxJykudG8oJ3YyJykiKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuYWRkVigpLmFzKCd2MScpLmFkZFYoKS5hcygndjInKS5hZGRFKCd0ZXN0JykuZnJvbSgndjEnKS50bygndjInKSIpLkFkZEcoImdpbW11dGFibGUiKS5DcmVhdGUoKTsKKyAgICAgICAgICAgIHZhciBlZGdlID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxFZGdlPihyZXF1ZXN0TXNnKTsKIAogICAgICAgICAgICAgVmVyaWZ5RW1wdHlQcm9wZXJ0aWVzKGVkZ2UpOwogICAgICAgICB9CkBAIC0yMjIsNyArMjI3LDggQEAKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGNsaWVudCA9IF9jb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVDbGllbnQoc2VyaWFsaXplcik7CiAKLSAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBhd2FpdCBjbGllbnQuU3VibWl0V2l0aFNpbmdsZVJlc3VsdEFzeW5jPFZlcnRleD4oImdjcmV3LlYoNykiKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVig3KSIpLkFkZEcoImdjcmV3IikuQ3JlYXRlKCk7CisgICAgICAgICAgICB2YXIgdmVydGV4ID0gYXdhaXQgY2xpZW50LlN1Ym1pdFdpdGhTaW5nbGVSZXN1bHRBc3luYzxWZXJ0ZXg+KHJlcXVlc3RNc2cpOwogCiAgICAgICAgICAgICBWZXJpZnlWZXJ0ZXhWZXJ0ZXhQcm9wZXJ0aWVzKHZlcnRleCk7CiAgICAgICAgIH0KQEAgLTIzOSw2ICsyNDUsMjYgQEAKICAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyOSwgYWdlLlZhbHVlKTsKICAgICAgICAgfQogCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vICAgICBWZXJpZmllcyB2ZXJ0ZXggaGFzIGF0IGxlYXN0IHRoZSBleHBlY3RlZCB1c2VyIHByb3BlcnRpZXMuIFVzZWQgZm9yIG1hdGVyaWFsaXplUHJvcGVydGllcz1hbGwKKyAgICAgICAgLy8vICAgICB3aGljaCBtYXkgaW5jbHVkZSBhZGRpdGlvbmFsIHN5c3RlbSBwcm9wZXJ0aWVzIGxpa2UgZ3JlbWxpbi50cmF2ZXJzYWxWZXJ0ZXhQcm9ncmFtLmhhbHRlZFRyYXZlcnNlcnMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgVmVyaWZ5VmVydGV4UHJvcGVydGllc0F0TGVhc3QoVmVydGV4PyB2ZXJ0ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKHZlcnRleCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgdmVydGV4LklkKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgicGVyc29uIiwgdmVydGV4LkxhYmVsKTsKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKHZlcnRleC5Qcm9wZXJ0aWVzIS5MZW5ndGggPj0gMiwgJCJFeHBlY3RlZCBhdCBsZWFzdCAyIHByb3BlcnRpZXMsIGdvdDoge0pzb25TZXJpYWxpemVyLlNlcmlhbGl6ZSh2ZXJ0ZXguUHJvcGVydGllcyl9Iik7CisKKyAgICAgICAgICAgIHZhciBhZ2UgPSB2ZXJ0ZXguUHJvcGVydHkoImFnZSIpOworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoYWdlKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyOSwgYWdlLlZhbHVlKTsKKworICAgICAgICAgICAgdmFyIG5hbWUgPSB2ZXJ0ZXguUHJvcGVydHkoIm5hbWUiKTsKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKG5hbWUpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJtYXJrbyIsIG5hbWUuVmFsdWUpOworICAgICAgICB9CisKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBWZXJpZnlWZXJ0ZXhWZXJ0ZXhQcm9wZXJ0aWVzKFZlcnRleD8gdmVydGV4KQogICAgICAgICB7CiAgICAgICAgICAgICBBc3NlcnQuTm90TnVsbCh2ZXJ0ZXgpOwpAQCAtMjgxLDkgKzMwNyw3IEBACiAKICAgICAgICAgcHVibGljIHN0YXRpYyBMaXN0PG9iamVjdFtdPiBTZXJpYWxpemVycyA9PiBuZXcoKQogICAgICAgICB7Ci0gICAgICAgICAgICBuZXcgW10geyBuZXcgR3JhcGhTT04yTWVzc2FnZVNlcmlhbGl6ZXIoKSB9LAotICAgICAgICAgICAgbmV3IFtdIHsgbmV3IEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyKCkgfSwKLSAgICAgICAgICAgIG5ldyBbXSB7IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyKCkgfQorICAgICAgICAgICAgbmV3IG9iamVjdFtdIHsgbmV3IEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyKCkgfQogICAgICAgICB9OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0doZXJraW4vQ29tbW9uU3RlcHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL0NvbW1vblN0ZXBzLmNzCmluZGV4IDQwNGI5ZmYuLmJiM2NmM2UgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0doZXJraW4vQ29tbW9uU3RlcHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9Db21tb25TdGVwcy5jcwpAQCAtMzMsNyArMzMsNyBAQAogdXNpbmcgR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0LkdoZXJraW4uQXR0cmlidXRlczsKIHVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwogdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKIHVzaW5nIFh1bml0OwogCiB1c2luZyBzdGF0aWMgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlOwpAQCAtNTMsMTMgKzUzLDE0IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEpzb25TZXJpYWxpemVyT3B0aW9ucyBKc29uRGVzZXJpYWxpemluZ09wdGlvbnMgPQogICAgICAgICAgICAgbmV3KCkgeyBQcm9wZXJ0eU5hbWluZ1BvbGljeSA9IEpzb25OYW1pbmdQb2xpY3kuQ2FtZWxDYXNlIH07CiAgICAgICAgIAotICAgICAgICBwdWJsaWMgc3RhdGljIFNjZW5hcmlvRGF0YSBTY2VuYXJpb0RhdGEgeyBnZXQ7IHNldDsgfSA9IG5ldyBTY2VuYXJpb0RhdGEobmV3IEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyKCkpOworICAgICAgICBwdWJsaWMgc3RhdGljIFNjZW5hcmlvRGF0YSBTY2VuYXJpb0RhdGEgeyBnZXQ7IHNldDsgfSA9IG5ldyBTY2VuYXJpb0RhdGEobmV3IEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyKCkpOwogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IElEaWN0aW9uYXJ5PFJlZ2V4LCBGdW5jPHN0cmluZywgc3RyaW5nLCBvYmplY3Q/Pj4gUGFyc2VycyA9CiAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIEZ1bmM8c3RyaW5nLCBzdHJpbmcsIG9iamVjdD8+PgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHtAInN0clxbKC4qKVxdIiwgKHgsIGdyYXBoTmFtZSkgPT4geCB9LCAvL3JldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBhcyBpcwogICAgICAgICAgICAgICAgIHtAInZwXFsoLispXF0iLCBUb1ZlcnRleFByb3BlcnR5fSwKKyAgICAgICAgICAgICAgICB7QCJwcm9wXFsoLispXF0iLCBUb1Byb3BlcnR5fSwKICAgICAgICAgICAgICAgICB7QCJkdFxbKC4rKVxdIiwgVG9EYXRlVGltZX0sCiAgICAgICAgICAgICAgICAge0AidXVpZFxbKC4rKVxdIiwgVG9VdWlkfSwKICAgICAgICAgICAgICAgICB7QCJkXFsoLiopXF1cLihbYnNpbGZkbW5dKSIsIFRvTnVtYmVyfSwKQEAgLTIzNywxMyArMjM4LDEzIEBACiAKICAgICAgICAgICAgIHN3aXRjaCAoY29tcGFyaXNvbikgewogICAgICAgICAgICAgICAgIGNhc2UgImNvbnRhaW5pbmciOgotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoZXhwZWN0ZWRNZXNzYWdlLCBfZXJyb3IuTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5Db250YWlucyhleHBlY3RlZE1lc3NhZ2UuVG9VcHBlcigpLCBfZXJyb3IuTWVzc2FnZS5Ub1VwcGVyKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlICJzdGFydGluZyI6Ci0gICAgICAgICAgICAgICAgICAgIEFzc2VydC5TdGFydHNXaXRoKGV4cGVjdGVkTWVzc2FnZSwgX2Vycm9yLk1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICBBc3NlcnQuU3RhcnRzV2l0aChleHBlY3RlZE1lc3NhZ2UuVG9VcHBlcigpLCBfZXJyb3IuTWVzc2FnZS5Ub1VwcGVyKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlICJlbmRpbmciOgotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuRW5kc1dpdGgoZXhwZWN0ZWRNZXNzYWdlLCBfZXJyb3IuTWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgIEFzc2VydC5FbmRzV2l0aChleHBlY3RlZE1lc3NhZ2UuVG9VcHBlcigpLCBfZXJyb3IuTWVzc2FnZS5Ub1VwcGVyKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXhjZXB0aW9uKApAQCAtMjg4LDcgKzI4OSwyMSBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlcmVkKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIF9yZXN1bHQhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZExpc3QgPSBleHBlY3RlZC5Ub0xpc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRMaXN0ID0gX3Jlc3VsdCEuVG9MaXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRMaXN0LkNvdW50LCByZXN1bHRMaXN0LkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRMaXN0LkNvdW50OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkTGlzdFtpXSBpcyBQcm9wZXJ0eSBleHBlY3RlZFByb3AgJiYgcmVzdWx0TGlzdFtpXSBpcyBQcm9wZXJ0eSByZXN1bHRQcm9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkUHJvcC5LZXksIHJlc3VsdFByb3AuS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkUHJvcC5WYWx1ZSwgcmVzdWx0UHJvcC5WYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZExpc3RbaV0sIHJlc3VsdExpc3RbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHsKQEAgLTMxOSw2ICszMzQsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuVHJ1ZShleHBlY3RlZEFycmF5Q29udGFpbnNSZXN1bHRBc1NldCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdEl0ZW0gaXMgUHJvcGVydHkgcmVzdWx0UHJvcGVydHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGV4cGVjdGVkSXRlbSBpbiBleHBlY3RlZEFycmF5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRJdGVtIGlzIFByb3BlcnR5IGV4cGVjdGVkUHJvcGVydHkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQcm9wZXJ0eS5LZXkgPT0gZXhwZWN0ZWRQcm9wZXJ0eS5LZXkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcXVhbHMocmVzdWx0UHJvcGVydHkuVmFsdWUsIGV4cGVjdGVkUHJvcGVydHkuVmFsdWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuVHJ1ZShmb3VuZCwgJCJQcm9wZXJ0eSB7cmVzdWx0SXRlbX0gbm90IGZvdW5kIGluIGV4cGVjdGVkIHJlc3VsdHMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0SXRlbSBpcyBkb3VibGUgcmVzdWx0SXRlbURvdWJsZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQXJyYXkuU2VsZWN0KGUgPT4gZSEuR2V0VHlwZSgpKS5BbnkodCA9PiB0ID09IHR5cGVvZihkZWNpbWFsKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewpAQCAtNTMzLDYgKzU2MywxOSBAQAogICAgICAgICAgICAgcmV0dXJuIFNjZW5hcmlvRGF0YS5HZXRCeUdyYXBoTmFtZShncmFwaE5hbWUpLlZlcnRleFByb3BlcnRpZXNbdHJpcGxldF07CiAgICAgICAgIH0KIAorICAgICAgICBwcml2YXRlIHN0YXRpYyBvYmplY3QgVG9Qcm9wZXJ0eShzdHJpbmcgdmFsdWUsIHN0cmluZyBncmFwaE5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjb21tYUluZGV4ID0gdmFsdWUuSW5kZXhPZignLCcpOworICAgICAgICAgICAgaWYgKGNvbW1hSW5kZXggPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcGVydHkodmFsdWUsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGtleSA9IHZhbHVlLlN1YnN0cmluZygwLCBjb21tYUluZGV4KTsKKyAgICAgICAgICAgIHZhciB2YWx1ZVN0ciA9IHZhbHVlLlN1YnN0cmluZyhjb21tYUluZGV4ICsgMSk7CisgICAgICAgICAgICB2YXIgcGFyc2VkVmFsdWUgPSBQYXJzZVZhbHVlKHZhbHVlU3RyLCBncmFwaE5hbWUpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wZXJ0eShrZXksIHBhcnNlZFZhbHVlKTsKKyAgICAgICAgfQorCiAgICAgICAgIHByaXZhdGUgc3RhdGljIFBhdGggVG9QYXRoKHN0cmluZyB2YWx1ZSwgc3RyaW5nIGdyYXBoTmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXRoKG5ldyBMaXN0PElTZXQ8c3RyaW5nPj4oMCksCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL0doZXJraW5UZXN0UnVubmVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9HaGVya2luVGVzdFJ1bm5lci5jcwppbmRleCA4ZGQ5M2RhLi5kZDhmMzJmIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL0doZXJraW5UZXN0UnVubmVyLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0doZXJraW4vR2hlcmtpblRlc3RSdW5uZXIuY3MKQEAgLTMyLDggKzMyLDcgQEAKIHVzaW5nIEdoZXJraW4uQXN0OwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwogdXNpbmcgR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0LkdoZXJraW4uQXR0cmlidXRlczsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTjsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQ7CiB1c2luZyBYdW5pdC5BYnN0cmFjdGlvbnM7CiAKIG5hbWVzcGFjZSBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuR2hlcmtpbgpAQCAtMTE2LDEzICsxMTUsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5hcmlvLlRhZ3MuQW55KHQgPT4gdC5OYW1lID09ICJAU3RlcFRyZWUiKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5hcmlvLlRhZ3MuQ29uY2F0KGZlYXR1cmUuVGFncykuQW55KHQgPT4gdC5OYW1lID09ICJAU3RlcFRyZWUiKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkU3RlcHMuQWRkKHNjZW5hcmlvLlN0ZXBzLkZpcnN0KCksIG5ldyBJZ25vcmVFeGNlcHRpb24oSWdub3JlUmVhc29uLlRyZWVTdGVwTm90U3VwcG9ydGVkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChzY2VuYXJpby5UYWdzLkFueSh0ID0+IHQuTmFtZSA9PSAiQFN0ZXBTdWJncmFwaCIpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2NlbmFyaW8uVGFncy5Db25jYXQoZmVhdHVyZS5UYWdzKS5BbnkodCA9PiB0Lk5hbWUgPT0gIkBTdGVwV3JpdGUiKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkU3RlcHMuQWRkKHNjZW5hcmlvLlN0ZXBzLkZpcnN0KCksIG5ldyBJZ25vcmVFeGNlcHRpb24oSWdub3JlUmVhc29uLldyaXRlU3RlcFRlc3RpbmdOb3RTdXBwb3J0ZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNjZW5hcmlvLlRhZ3MuQ29uY2F0KGZlYXR1cmUuVGFncykuQW55KHQgPT4gdC5OYW1lID09ICJAU3RlcFN1YmdyYXBoIikpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZFN0ZXBzLkFkZChzY2VuYXJpby5TdGVwcy5GaXJzdCgpLCBuZXcgSWdub3JlRXhjZXB0aW9uKElnbm9yZVJlYXNvbi5TdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTY2LDggKzE3MSw3IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgSUVudW1lcmFibGU8b2JqZWN0W10+IE1lc3NhZ2VTZXJpYWxpemVycyA9PgogICAgICAgICAgICAgbmV3IExpc3Q8b2JqZWN0W10+CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmV3IG9iamVjdFtdIHtuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplcigpfSwKLSAgICAgICAgICAgICAgICBuZXcgb2JqZWN0W10ge25ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigpfQorICAgICAgICAgICAgICAgIG5ldyBvYmplY3RbXSB7bmV3IEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyKCl9CiAgICAgICAgICAgICB9OwogCiAgICAgICAgIHByaXZhdGUgdm9pZCBXcml0ZU91dHB1dChzdHJpbmcgbGluZSkKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0doZXJraW4vR3JlbWxpbi5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0doZXJraW4vR3JlbWxpbi5jcwppbmRleCBkNWNhM2QzLi45ZTcwMDMwIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL0dyZW1saW4uY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9HcmVtbGluLmNzCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgICAgIHsiZ19WWDJYX29wdGlvbmFsWGluWGtub3dzWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMiJdKS5PcHRpb25hbDxvYmplY3Q+KF9fLkluKCJrbm93cyIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc0xhYmVsWHBlcnNvblhfb3B0aW9uYWxYb3V0WGtub3dzWF9vcHRpb25hbFhvdXRYY3JlYXRlZFhYWF9wYXRoIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLk9wdGlvbmFsPG9iamVjdD4oX18uT3V0KCJrbm93cyIpLk9wdGlvbmFsPG9iamVjdD4oX18uT3V0KCJjcmVhdGVkIikpKS5QYXRoKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9vcHRpb25hbFhvdXRfb3B0aW9uYWxYb3V0WFhfcGF0aCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLk9wdGlvbmFsPG9iamVjdD4oX18uT3V0KCkuT3B0aW9uYWw8b2JqZWN0PihfXy5PdXQoKSkpLlBhdGgoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WWDFYX29wdGlvbmFsWGFkZFZYZG9nWFhfbGFiZWwiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PcHRpb25hbDxvYmplY3Q+KF9fLkFkZFYoImRvZyIpKS5MYWJlbCgpLCAoZyxwKSA9PmcuVigpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZYMVhfb3B0aW9uYWxYYWRkVlhkb2dYWF9sYWJlbCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk9wdGlvbmFsPG9iamVjdD4oX18uQWRkVigoc3RyaW5nKSAiZG9nIikpLkxhYmVsKCksIChnLHApID0+Zy5WKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9lbWl0X3BhdGgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpLkVtaXQoKS5QYXRoKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9yZXBlYXRYaW5YX3RpbWVzWDJYX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpLlJlcGVhdChfXy5JbigpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfcmVwZWF0WG91dEVfaW5WWF90aW1lc1gyWF9wYXRoX2J5X25hbWVfYnlfbGFiZWwiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5SZXBlYXQoX18uT3V0RSgpLkluVigpKS5UaW1lcygyKS5QYXRoKCkuQnkoIm5hbWUiKS5CeShULkxhYmVsKX19LCAKQEAgLTIwNiw2MCArMjA2LDYwIEBACiAgICAgICAgICAgICAgICB7ImdfVlgxXzJYX3VuaW9uWG91dEVfY291bnRfX2luRV9jb3VudF9fb3V0RV93ZWlnaHRfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0sIHBbInZpZDIiXSkuVW5pb248b2JqZWN0PihfXy5PdXRFKCkuQ291bnQoKSwgX18uSW5FKCkuQ291bnQoKSwgX18uT3V0RSgpLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKS5TdW08b2JqZWN0PigpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFfMlhfbG9jYWxYdW5pb25Yb3V0RV9jb3VudF9faW5FX2NvdW50X19vdXRFX3dlaWdodF9zdW1YWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0sIHBbInZpZDIiXSkuTG9jYWw8b2JqZWN0PihfXy5VbmlvbjxvYmplY3Q+KF9fLk91dEUoKS5Db3VudCgpLCBfXy5JbkUoKS5Db3VudCgpLCBfXy5PdXRFKCkuVmFsdWVzPG9iamVjdD4oIndlaWdodCIpLlN1bTxvYmplY3Q+KCkpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFfMlhfbG9jYWxYdW5pb25YY291bnRYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0sIHBbInZpZDIiXSkuTG9jYWw8b2JqZWN0PihfXy5VbmlvbjxvYmplY3Q+KF9fLkNvdW50KCkpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ191bmlvblhhZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYm9iWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9jaHJpc1hfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVW5pb248b2JqZWN0PihfXy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLCBfXy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgX18uQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiY2hyaXMiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ191bmlvblhhZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYm9iWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9jaHJpc1hfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVW5pb248b2JqZWN0PihfXy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLCBfXy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgX18uQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiY2hyaXMiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWF9oYXNMYWJlbFhwZXJzb25YX3VuaW9uWF93aGVyZVhfb3V0X2NvdW50X2lzWGd0WDJYWFhfdmFsdWVzWGFnZVhfbm90WF93aGVyZVhfYm90aEVfY291bnRfaXNYZ3QyWFhYX3ZhbHVzWG5hbWVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKS5VbmlvbjxvYmplY3Q+KF9fLldoZXJlKF9fLk91dEUoKS5Db3VudCgpLklzKFAuR3QoMikpKS5WYWx1ZXM8b2JqZWN0PigiYWdlIiksIF9fLk5vdChfXy5XaGVyZShfXy5PdXRFKCkuQ291bnQoKS5JcyhQLkd0KDIpKSkpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMjMpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX21hdGhYYWRkWDBfNVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDEwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLk1hdGgoIl8gKyAwLjUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfaXNYZ3RYMFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuSXMoUC5HdCgwKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3N1bVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMikuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAzKS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuU3VtPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWluWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxKS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDUpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuTWluPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWF4WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA3KS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDE0KS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDIxKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLk1heDxvYmplY3Q+KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDEwWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDYpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJtdWx0aXBsaWVkIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aCgiXyAqIDEwIikpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMjMpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX21hdGhYYWRkWDBfNVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDEwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLk1hdGgoIl8gKyAwLjUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfaXNYZ3RYMFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuSXMoUC5HdCgwKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3N1bVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMikuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAzKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuU3VtPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWluWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDUpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuTWluPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWF4WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA3KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDE0KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDIxKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLk1heDxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDEwWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDYpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJtdWx0aXBsaWVkIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aCgiXyAqIDEwIikpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFg5OVhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9ncm91cENvdW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0Pig5OSkuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA0NTYpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfbWF0aFhtdWxYMTAwMFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDEwMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuTWF0aCgiXyAqIDEwMDAiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX2lzWGVxWDQyWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgNDIpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLklzKFAuRXEoNDIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX3N1bVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTApLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMjApLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMzApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLlN1bTxvYmplY3Q+KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9taW5YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDUpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTUpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMjUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLk1pbjxvYmplY3Q+KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9tYXhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDEwMCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAyMDApLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMzAwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnSW50KS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKS5NYXg8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYbWF0aFhhZGRYOTk5WFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDUwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnSW50KS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKS5Qcm9qZWN0PG9iamVjdD4oIm9yaWdpbmFsIiwgImFkZGVkIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aCgiXyArIDk5OSIpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDQ1NiksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9tYXRoWG11bFgxMDAwWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTAwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQmlnSW50KS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKS5NYXRoKCJfICogMTAwMCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfaXNYZXFYNDJYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA0MiksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuSXMoUC5FcSg0MikpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAyMCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAzMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuU3VtPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX21pblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgNSkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxNSkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAyNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuTWluPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX21heFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTAwKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDIwMCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAzMDApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLk1heDxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhtYXRoWGFkZFg5OTlYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgNTApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLlByb2plY3Q8b2JqZWN0Pigib3JpZ2luYWwiLCAiYWRkZWQiKS5CeShfXy5JZGVudGl0eSgpKS5CeShfXy5NYXRoKCJfICsgOTk5IikpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFg3NzdYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX2dyb3VwQ291bnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDc3NykuQXNOdW1iZXIoR1R5cGUuQmlnSW50KS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKS5Hcm91cENvdW50PG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfbWF0aFhhZGRYMjBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5NYXRoKCJfICsgMjAiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfaXNYbHRYMTBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA3KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQnl0ZSkuSXMoUC5UeXBlT2YoR1R5cGUuQnl0ZSkpLklzKFAuTHQoMTApKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxKS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDIpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMyksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5TdW08b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhtYXRoWG11bFgyWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDgpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CeXRlKS5JcyhQLlR5cGVPZihHVHlwZS5CeXRlKSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJkb3VibGVkIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aCgiXyAqIDIiKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX2Nob29zZVhpc1hlcVgxMlhYX2NvbnN0YW50WHR3ZWx2ZVhfY29uc3RhbnRYb3RoZXJYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMiksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5DaG9vc2U8b2JqZWN0PihfXy5JcyhQLkVxKDEyKSksIF9fLkNvbnN0YW50PG9iamVjdD4oInR3ZWx2ZSIpLCBfXy5Db25zdGFudDxvYmplY3Q+KCJvdGhlciIpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfbWF0aFhhZGRYMjBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5NYXRoKCJfICsgMjAiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfaXNYbHRYMTBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA3KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuQnl0ZSkuSXMoUC5UeXBlT2YoR1R5cGUuQnl0ZSkpLklzKFAuTHQoMTApKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDIpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMyksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5TdW08b2JqZWN0PigpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhtYXRoWG11bFgyWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDgpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5CeXRlKS5JcyhQLlR5cGVPZihHVHlwZS5CeXRlKSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJkb3VibGVkIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aCgiXyAqIDIiKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX2Nob29zZVhpc1hlcVgxMlhYX2NvbnN0YW50WHR3ZWx2ZVhfY29uc3RhbnRYb3RoZXJYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMiksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5DaG9vc2U8b2JqZWN0PihfXy5JcyhQLkVxKDEyKSksIF9fLkNvbnN0YW50PG9iamVjdD4oInR3ZWx2ZSIpLCBfXy5Db25zdGFudDxvYmplY3Q+KCJvdGhlciIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMTVYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfZ3JvdXBDb3VudCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMTUpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5Hcm91cENvdW50PG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuSXMoUC5UeXBlT2YoR1R5cGUuQnl0ZSkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMFoiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRhdGV0aW1lIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYZGF0ZUFkZFhEVF9kYXlYMVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZGF0ZXRpbWUiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLlByb2plY3Q8b2JqZWN0Pigib3JpZ2luYWwiLCAibmV4dERheSIpLkJ5KF9fLklkZW50aXR5KCkpLkJ5KF9fLkRhdGVBZGQoRFQuRGF5LCAxKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2RhdGVEaWZmWGRhdGV0aW1lWDIwMjNfMDhfMTBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMFoiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRhdGV0aW1lIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5EYXRlRGlmZihEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMDozMFoiKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX3doZXJlWGlzWGd0WGRhdGV0aW1lWDIwMjBfMDFfMDFYWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZGF0ZXRpbWUiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLldoZXJlKF9fLklzKFAuR3QoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjAtMDEtMDFUMDA6MDBaIikpKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2Nob29zZVhpc1hlcVhkYXRldGltZVgyMDIzXzA4XzA4WFhYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZGF0ZXRpbWUiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLkNob29zZTxvYmplY3Q+KF9fLklzKFAuRXEoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDgtMDhUMDA6MDBaIikpKSwgX18uQ29uc3RhbnQ8b2JqZWN0PigibWF0Y2giKSwgX18uQ29uc3RhbnQ8b2JqZWN0Pigibm9NYXRjaCIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfbG9jYWxYYWdncmVnYXRlWGFYX2NhcFhhWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMFoiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRhdGV0aW1lIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZSgiYSIpKS5DYXA8b2JqZWN0PigiYSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMFoiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRhdGV0aW1lIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYZGF0ZUFkZFhEVF9kYXlYMVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZGF0ZXRpbWUiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLlByb2plY3Q8b2JqZWN0Pigib3JpZ2luYWwiLCAibmV4dERheSIpLkJ5KF9fLklkZW50aXR5KCkpLkJ5KF9fLkRhdGVBZGQoRFQuRGF5LCAxKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2RhdGVEaWZmWGRhdGV0aW1lWDIwMjNfMDhfMTBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMFoiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRhdGV0aW1lIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5EYXRlRGlmZihEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMDozMFoiKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX3doZXJlWGlzWGd0WGRhdGV0aW1lWDIwMjBfMDFfMDFYWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDEyOjM0OjU2WiIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZGF0ZXRpbWUiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLldoZXJlKF9fLklzKFAuR3QoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjAtMDEtMDFUMDA6MDBaIikpKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2Nob29zZVhpc1hlcVhkYXRldGltZVgyMDIzXzA4XzA4WFhYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZGF0ZXRpbWUiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLkNob29zZTxvYmplY3Q+KF9fLklzKFAuRXEoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDgtMDhUMDA6MDBaIikpKSwgX18uQ29uc3RhbnQ8b2JqZWN0PigibWF0Y2giKSwgX18uQ29uc3RhbnQ8b2JqZWN0Pigibm9NYXRjaCIpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfbG9jYWxYYWdncmVnYXRlWGFYX2NhcFhhWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wOFQwMDowMFoiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRhdGV0aW1lIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZSgiYSIpKS5DYXA8b2JqZWN0PigiYSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfYWdncmVnYXRlWGFYX2NhcFhhWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDgtMDhUMDA6MDBaIikpLklzKFAuVHlwZU9mKEdUeXBlLkRhdGVUaW1lKSkuQWdncmVnYXRlKCJhIikuQ2FwPG9iamVjdD4oImEiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2dyb3VwQ291bnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDEuNWQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJkb3VibGUiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2dyb3VwQ291bnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDEyOjM0OjU2WiIpKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDEuNWQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJkb3VibGUiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19FX3ZhbHVlc1h3ZWlnaHRYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuRSgpLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tYXRoWGNlaWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDIuN2QpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJkb3VibGUiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKS5NYXRoKCJjZWlsIF8iKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9pc1hndFgxXzBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAwLjhkKS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDEuMmQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJkb3VibGUiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKS5JcyhQLkd0KDEuMGQpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9zdW1YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDEuNWQpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMi41ZCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAzLjVkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZG91YmxlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuU3VtPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9taW5YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDAuMWQpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMC41ZCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAwLjlkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZG91YmxlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuTWluPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tYXhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDIuMWQpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMy43ZCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAxLjlkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZG91YmxlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuTWF4PG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tZWFuWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAyLjFkKS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDQuMWQpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgNi4xZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRvdWJsZSIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLk1lYW48b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX29yZGVyX2J5WGFzY1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMy4yZCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAxLjhkKS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDIuNWQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJkb3VibGUiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKS5PcmRlcigpLkJ5KE9yZGVyLkFzYyl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfbWF0aFhjZWlsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAyLjdkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZG91YmxlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuTWF0aCgiY2VpbCBfIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfaXNYZ3RYMV8wWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMC44ZCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAxLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZG91YmxlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuSXMoUC5HdCgxLjBkKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAxLjVkKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDIuNWQpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMy41ZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRvdWJsZSIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLlN1bTxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfbWluWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAwLjFkKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDAuNWQpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMC45ZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRvdWJsZSIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLk1pbjxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfbWF4WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAyLjFkKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDMuN2QpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMS45ZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImRvdWJsZSIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLk1heDxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfbWVhblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMi4xZCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCA0LjFkKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDYuMWQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJkb3VibGUiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKS5NZWFuPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9vcmRlcl9ieVhhc2NYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImRvdWJsZSIsIDMuMmQpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZG91YmxlIiwgMS44ZCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAyLjVkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZG91YmxlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuT3JkZXIoKS5CeShPcmRlci5Bc2MpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFg1XzVkWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfZ3JvdXBDb3VudCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oNS41ZCkuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuR3JvdXBDb3VudDxvYmplY3Q+KCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMi41KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZmxvYXQiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfbWF0aFhtdWxYMlhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMy4wKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZmxvYXQiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5NYXRoKCJfICogMiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9pc1hlcVgxXzVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJmbG9hdCIsIDEuNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImZsb2F0IikuQXNOdW1iZXIoR1R5cGUuRmxvYXQpLklzKFAuVHlwZU9mKEdUeXBlLkZsb2F0KSkuSXMoUC5FcSgxLjUpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJmbG9hdCIsIDEuNSkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJmbG9hdCIsIDIuNSkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJmbG9hdCIsIDMuMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImZsb2F0IikuQXNOdW1iZXIoR1R5cGUuRmxvYXQpLklzKFAuVHlwZU9mKEdUeXBlLkZsb2F0KSkuU3VtPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYbWF0aFhtdWxYMTBYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiZmxvYXQiLCA0LjUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJmbG9hdCIpLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLlByb2plY3Q8b2JqZWN0Pigib3JpZ2luYWwiLCAibXVsdGlwbGllZCIpLkJ5KF9fLklkZW50aXR5KCkpLkJ5KF9fLk1hdGgoIl8gKiAxMCIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfd2hlcmVYaXNYZ3RYMV8wWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMC41KS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMS41KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZmxvYXQiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5XaGVyZShfXy5JcyhQLkd0KDEuMCkpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfY2hvb3NlWGlzWGVxWDNfMFhYX2NvbnN0YW50WHRocmVlWF9jb25zdGFudFhvdGhlclhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMy4wKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZmxvYXQiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5DaG9vc2U8b2JqZWN0PihfXy5JcyhQLkVxKDMuMCkpLCBfXy5Db25zdGFudDxvYmplY3Q+KCJ0aHJlZSIpLCBfXy5Db25zdGFudDxvYmplY3Q+KCJvdGhlciIpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZmxvYXQiLCAyLjUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJmbG9hdCIpLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9tYXRoWG11bFgyWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZmxvYXQiLCAzLjApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJmbG9hdCIpLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLk1hdGgoIl8gKiAyIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX2lzWGVxWDFfNVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMS41KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZmxvYXQiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5JcyhQLkVxKDEuNSkpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9zdW1YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMS41KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMi41KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImZsb2F0IiwgMy4wKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiZmxvYXQiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5TdW08b2JqZWN0PigpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhtYXRoWG11bFgxMFhYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJmbG9hdCIsIDQuNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImZsb2F0IikuQXNOdW1iZXIoR1R5cGUuRmxvYXQpLklzKFAuVHlwZU9mKEdUeXBlLkZsb2F0KSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJtdWx0aXBsaWVkIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aCgiXyAqIDEwIikpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF93aGVyZVhpc1hndFgxXzBYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZmxvYXQiLCAwLjUpLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZmxvYXQiLCAxLjUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJmbG9hdCIpLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLldoZXJlKF9fLklzKFAuR3QoMS4wKSkpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9jaG9vc2VYaXNYZXFYM18wWFhfY29uc3RhbnRYdGhyZWVYX2NvbnN0YW50WG90aGVyWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiZmxvYXQiLCAzLjApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJmbG9hdCIpLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLkNob29zZTxvYmplY3Q+KF9fLklzKFAuRXEoMy4wKSksIF9fLkNvbnN0YW50PG9iamVjdD4oInRocmVlIiksIF9fLkNvbnN0YW50PG9iamVjdD4oIm90aGVyIikpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFgyXzBmWF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9ncm91cENvdW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigyLjApLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5JcyhQLlR5cGVPZihHVHlwZS5JbnQpKX19LCAKQEAgLTI3NCw1MyArMjc0LDUzIEBACiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfZ3JvdXBDb3VudCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5JcyhQLlR5cGVPZihHVHlwZS5JbnQpKS5Hcm91cENvdW50PG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfY291bnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLkZvbGQoKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuQ291bnQoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibGlzdCIsIG5ldyBMaXN0PG9iamVjdD4geyAiYSIsICJiIiwgImMiIH0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJsaXN0IikuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzWGxpc3RfdHlwZU9mWEdUeXBlX0xJU1RYWF92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KSwgKGcscCkgPT5nLlYoKS5IYXMoImxpc3QiLCBQLlR5cGVPZihHVHlwZS5MaXN0KSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3VuZm9sZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJsaXN0IiwgbmV3IExpc3Q8b2JqZWN0PiB7ICJ4IiwgInkiLCAieiIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuVW5mb2xkPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX2NvdW50WGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJsaXN0IiwgbmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMsIDQsIDUgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuQ291bnQoU2NvcGUuTG9jYWwpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfdW5mb2xkX3JhbmdlWDFfM1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibGlzdCIsIG5ldyBMaXN0PG9iamVjdD4geyAiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIiwgImZvdXJ0aCIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuVW5mb2xkPG9iamVjdD4oKS5SYW5nZTxvYmplY3Q+KDEsIDMpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYY291bnRYbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgImFwcGxlIiwgImJhbmFuYSIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJzaXplIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uQ291bnQoU2NvcGUuTG9jYWwpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3doZXJlWGNvdW50WGxvY2FsWF9pc1hndFgyWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSB9KS5BZGRWKCJkYXRhIikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibGlzdCIpLklzKFAuVHlwZU9mKEdUeXBlLkxpc3QpKS5XaGVyZShfXy5Db3VudChTY29wZS5Mb2NhbCkuSXMoUC5HdCgyKSkpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibGlzdCIsIG5ldyBMaXN0PG9iamVjdD4geyAiYSIsICJiIiwgImMiIH0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJsaXN0IikuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfaGFzWGxpc3RfdHlwZU9mWEdUeXBlX0xJU1RYWF92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KSwgKGcscCkgPT5nLlYoKS5IYXMoImxpc3QiLCBQLlR5cGVPZihHVHlwZS5MaXN0KSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3VuZm9sZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJsaXN0IiwgbmV3IExpc3Q8b2JqZWN0PiB7ICJ4IiwgInkiLCAieiIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuVW5mb2xkPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX2NvdW50WGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJsaXN0IiwgbmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMsIDQsIDUgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuQ291bnQoU2NvcGUuTG9jYWwpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfdW5mb2xkX3JhbmdlWDFfM1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibGlzdCIsIG5ldyBMaXN0PG9iamVjdD4geyAiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIiwgImZvdXJ0aCIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuVW5mb2xkPG9iamVjdD4oKS5SYW5nZTxvYmplY3Q+KDEsIDMpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYY291bnRYbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgImFwcGxlIiwgImJhbmFuYSIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxpc3QiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJzaXplIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uQ291bnQoU2NvcGUuTG9jYWwpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3doZXJlWGNvdW50WGxvY2FsWF9pc1hndFgyWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSB9KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImxpc3QiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibGlzdCIpLklzKFAuVHlwZU9mKEdUeXBlLkxpc3QpKS5XaGVyZShfXy5Db3VudChTY29wZS5Mb2NhbCkuSXMoUC5HdCgyKSkpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX2dyb3VwQ291bnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAidGVzdCIgfSkuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibG9uZyIsIDFsKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibG9uZyIpLklzKFAuVHlwZU9mKEdUeXBlLkxvbmcpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2hhc1hsb25nX3R5cGVPZlhHVHlwZV9MT05HWFhfdmFsdWVzWG5hbWVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLlByb3BlcnR5KCJsb25nIiwgMWwpLCAoZyxwKSA9PmcuVigpLkhhcygibG9uZyIsIFAuVHlwZU9mKEdUeXBlLkxvbmcpKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfbWF0aFhtdWxYMlhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImxvbmciLCA1bCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxvbmciKS5JcyhQLlR5cGVPZihHVHlwZS5Mb25nKSkuTWF0aCgiXyAqIDIiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsb25nWF9pc1h0eXBlT2ZYR1R5cGVfTE9OR1hYX2lzWGd0WDVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJsb25nIiwgMTBsKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibG9uZyIpLklzKFAuVHlwZU9mKEdUeXBlLkxvbmcpKS5JcyhQLkd0KDVsKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9zdW1YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImxvbmciLCAxbCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJsb25nIiwgMmwpLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibG9uZyIsIDNsKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibG9uZyIpLklzKFAuVHlwZU9mKEdUeXBlLkxvbmcpKS5TdW08b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibG9uZyIsIDEwMGwpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJsb25nIikuSXMoUC5UeXBlT2YoR1R5cGUuTG9uZykpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKCJhIikpLkNhcDxvYmplY3Q+KCJhIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJsb25nIiwgMWwpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJsb25nIikuSXMoUC5UeXBlT2YoR1R5cGUuTG9uZykpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfaGFzWGxvbmdfdHlwZU9mWEdUeXBlX0xPTkdYWF92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikuUHJvcGVydHkoImxvbmciLCAxbCksIChnLHApID0+Zy5WKCkuSGFzKCJsb25nIiwgUC5UeXBlT2YoR1R5cGUuTG9uZykpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9tYXRoWG11bFgyWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibG9uZyIsIDVsKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibG9uZyIpLklzKFAuVHlwZU9mKEdUeXBlLkxvbmcpKS5NYXRoKCJfICogMiIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfaXNYZ3RYNVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImxvbmciLCAxMGwpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJsb25nIikuSXMoUC5UeXBlT2YoR1R5cGUuTG9uZykpLklzKFAuR3QoNWwpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hsb25nWF9pc1h0eXBlT2ZYR1R5cGVfTE9OR1hYX3N1bVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibG9uZyIsIDFsKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImxvbmciLCAybCkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJsb25nIiwgM2wpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJsb25nIikuSXMoUC5UeXBlT2YoR1R5cGUuTG9uZykpLlN1bTxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJsb25nIiwgMTAwbCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImxvbmciKS5JcyhQLlR5cGVPZihHVHlwZS5Mb25nKSkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoImEiKSkuQ2FwPG9iamVjdD4oImEiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVNYXBfaXNYdHlwZU9mWEdUeXBlX01BUFhYX2NvdW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLkNvdW50KCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9ncm91cENvdW50X2J5WGxhYmVsWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KFQuTGFiZWwpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX01BUFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImFnZSIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoIm1hcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAia2V5MSIsICIxIiB9LCB7ICJrZXkyIiwgIjIiIH19KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibWFwIikuSXMoUC5UeXBlT2YoR1R5cGUuTWFwKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9oYXNYbWFwX3R5cGVPZlhHVHlwZV9NQVBYWF92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikuUHJvcGVydHkoIm1hcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYSIsIDEgfSwgeyAiYiIsIDIgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygibWFwIiwgUC5UeXBlT2YoR1R5cGUuTWFwKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9jb3VudFhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibWFwIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhIiwgMSB9LCB7ICJiIiwgMiB9LCB7ICJjIiwgMyB9fSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm1hcCIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLkNvdW50KFNjb3BlLkxvY2FsKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9zZWxlY3RYdmFsdWVzWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJtYXAiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImNpdHkiLCAiTllDIiB9LCB7ICJjb3VudHJ5IiwgIlVTQSIgfX0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJtYXAiKS5JcyhQLlR5cGVPZihHVHlwZS5NYXApKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF93aGVyZVhfY291bnRYbG9jYWxYX2lzWGd0WDFYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibWFwIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJzaW5nbGUiLCAidmFsdWUiIH19KS5BZGRWKCJkYXRhIikuUHJvcGVydHkoIm1hcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAia2V5MSIsICIxIiB9LCB7ICJrZXkyIiwgIjIiIH19KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibWFwIikuSXMoUC5UeXBlT2YoR1R5cGUuTWFwKSkuV2hlcmUoX18uQ291bnQoU2NvcGUuTG9jYWwpLklzKFAuR3QoMSkpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9mb2xkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJtYXAiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImEiLCAxIH19KS5BZGRWKCJkYXRhIikuUHJvcGVydHkoIm1hcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYiIsIDIgfSwgeyAiYyIsIDMgfX0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJtYXAiKS5JcyhQLlR5cGVPZihHVHlwZS5NYXApKS5Gb2xkKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibWFwIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJrZXkxIiwgIjEiIH0sIHsgImtleTIiLCAiMiIgfX0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJtYXAiKS5JcyhQLlR5cGVPZihHVHlwZS5NYXApKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1htYXBfdHlwZU9mWEdUeXBlX01BUFhYX3ZhbHVlc1huYW1lWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJuYW1lIiwgInRlc3QiKS5Qcm9wZXJ0eSgibWFwIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhIiwgMSB9LCB7ICJiIiwgMiB9fSksIChnLHApID0+Zy5WKCkuSGFzKCJtYXAiLCBQLlR5cGVPZihHVHlwZS5NYXApKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX2NvdW50WGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJtYXAiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImEiLCAxIH0sIHsgImIiLCAyIH0sIHsgImMiLCAzIH19KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibWFwIikuSXMoUC5UeXBlT2YoR1R5cGUuTWFwKSkuQ291bnQoU2NvcGUuTG9jYWwpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX3NlbGVjdFh2YWx1ZXNYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoIm1hcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiY2l0eSIsICJOWUMiIH0sIHsgImNvdW50cnkiLCAiVVNBIiB9fSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm1hcCIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX3doZXJlWF9jb3VudFhsb2NhbFhfaXNYZ3RYMVhYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJtYXAiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgInNpbmdsZSIsICJ2YWx1ZSIgfX0pLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibWFwIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJrZXkxIiwgIjEiIH0sIHsgImtleTIiLCAiMiIgfX0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJtYXAiKS5JcyhQLlR5cGVPZihHVHlwZS5NYXApKS5XaGVyZShfXy5Db3VudChTY29wZS5Mb2NhbCkuSXMoUC5HdCgxKSkpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX2ZvbGRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoIm1hcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYSIsIDEgfX0pLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibWFwIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJiIiwgMiB9LCB7ICJjIiwgMyB9fSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm1hcCIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLkZvbGQoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlWG5hbWVYX2FnZ3JlZ2F0ZVh4WF9jYXBYeFhfaXNYdHlwZU9mWEdUeXBlX1NFVFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLkFnZ3JlZ2F0ZSgieCIpLkNhcDxvYmplY3Q+KCJ4IikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZU1hcF9zZWxlY3RYa2V5c1hfZGVkdXBfaXNYdHlwZU9mWEdUeXBlX1NFVFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLkRlZHVwKCkuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgic2V0IiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7ICJhIiwgImIiLCAiYyIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInNldCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzWHNldF90eXBlT2ZYR1R5cGVfU0VUWFhfdmFsdWVzWG5hbWVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLlByb3BlcnR5KCJzZXQiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgMSwgMiwgMyB9KSwgKGcscCkgPT5nLlYoKS5IYXMoInNldCIsIFAuVHlwZU9mKEdUeXBlLlNldCkpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFhfdW5mb2xkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoInNldCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyAieCIsICJ5IiwgInoiIH0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJzZXQiKS5JcyhQLlR5cGVPZihHVHlwZS5TZXQpKS5VbmZvbGQ8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX2NvdW50WGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJzZXQiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgMSwgMiwgMywgNCwgNSB9KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0Pigic2V0IikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSkuQ291bnQoU2NvcGUuTG9jYWwpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX3doZXJlWGNvdW50WGxvY2FsWF9pc1hlcVgzWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoInNldCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyAxLCAyIH0pLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgic2V0IiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDIsIDMgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInNldCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLldoZXJlKF9fLkNvdW50KFNjb3BlLkxvY2FsKS5JcyhQLkVxKDMpKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFhfdW5mb2xkX2xpbWl0WDJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoInNldCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyAiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIiwgImZvdXJ0aCIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInNldCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLlVuZm9sZDxvYmplY3Q+KCkuTGltaXQ8b2JqZWN0PigyKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJzZXQiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgImEiLCAiYiIsICJjIiB9KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0Pigic2V0IikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9oYXNYc2V0X3R5cGVPZlhHVHlwZV9TRVRYWF92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikuUHJvcGVydHkoInNldCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyAxLCAyLCAzIH0pLCAoZyxwKSA9PmcuVigpLkhhcygic2V0IiwgUC5UeXBlT2YoR1R5cGUuU2V0KSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF91bmZvbGQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgic2V0IiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7ICJ4IiwgInkiLCAieiIgfSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInNldCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLlVuZm9sZDxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFhfY291bnRYbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoInNldCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyAxLCAyLCAzLCA0LCA1IH0pLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJzZXQiKS5JcyhQLlR5cGVPZihHVHlwZS5TZXQpKS5Db3VudChTY29wZS5Mb2NhbCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFhfd2hlcmVYY291bnRYbG9jYWxYX2lzWGVxWDNYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgic2V0IiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDIgfSkuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJzZXQiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgMSwgMiwgMyB9KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0Pigic2V0IikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSkuV2hlcmUoX18uQ291bnQoU2NvcGUuTG9jYWwpLklzKFAuRXEoMykpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF91bmZvbGRfbGltaXRYMlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgic2V0IiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7ICJmaXJzdCIsICJzZWNvbmQiLCAidGhpcmQiLCAiZm91cnRoIiB9KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0Pigic2V0IikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSkuVW5mb2xkPG9iamVjdD4oKS5MaW1pdDxvYmplY3Q+KDIpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF9ncm91cENvdW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgSGFzaFNldDxvYmplY3Q+IHsgInRlc3QiIH0pLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoImludCIsIDEwMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYX21hdGhYbXVsWDEwWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgNTApLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5TaG9ydCkuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKS5NYXRoKCJfICogMTAiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9pc1hiZXR3ZWVuWDIwXzMwWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMjUpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJpbnQiKS5Bc051bWJlcihHVHlwZS5TaG9ydCkuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKS5JcyhQLkJldHdlZW4oMjAsIDMwKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWluWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxMCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAyMCkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAzMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpLk1pbjxvYmplY3Q+KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWF4WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAxNSkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAyNSkuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAzNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpLk1heDxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgiaW50IiwgMTAwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuU2hvcnQpLklzKFAuVHlwZU9mKEdUeXBlLlNob3J0KSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWF0aFhtdWxYMTBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCA1MCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpLk1hdGgoIl8gKiAxMCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYX2lzWGJldHdlZW5YMjBfMzBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJpbnQiLCAyNSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImludCIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpLklzKFAuQmV0d2VlbigyMCwgMzApKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9taW5YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDEwKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDIwKS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDMwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuU2hvcnQpLklzKFAuVHlwZU9mKEdUeXBlLlNob3J0KSkuTWluPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9tYXhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDE1KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDI1KS5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoImludCIsIDM1KSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiaW50IikuQXNOdW1iZXIoR1R5cGUuU2hvcnQpLklzKFAuVHlwZU9mKEdUeXBlLlNob3J0KSkuTWF4PG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYNDJYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9zdG9yZVhhWF9jYXBYYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDQyKS5Bc051bWJlcihHVHlwZS5TaG9ydCkuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImFnZSIpLklzKFAuVHlwZU9mKEdUeXBlLlNob3J0KSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJ1dWlkIiwgR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJ1dWlkIikuSXMoUC5UeXBlT2YoR1R5cGUuVVVJRCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzWHV1aWRfdHlwZU9mWEdUeXBlX1VVSURYWF92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikuUHJvcGVydHkoInV1aWQiLCBHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSksIChnLHApID0+Zy5WKCkuSGFzKCJ1dWlkIiwgUC5UeXBlT2YoR1R5cGUuVVVJRCkpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhjb25zdGFudFh1dWlkWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgidXVpZCIsIEd1aWQuUGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigidXVpZCIpLklzKFAuVHlwZU9mKEdUeXBlLlVVSUQpKS5Qcm9qZWN0PG9iamVjdD4oIm9yaWdpbmFsIiwgInR5cGUiKS5CeShfXy5JZGVudGl0eSgpKS5CeShfXy5Db25zdGFudDxvYmplY3Q+KCJ1dWlkIikpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfd2hlcmVYaXNYZXFYdXVpZFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoInV1aWQiLCBHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInV1aWQiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuV2hlcmUoX18uSXMoUC5FcShHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX2Nob29zZVhpc1hlcVh1dWlkWFhfY29uc3RhbnRYbWF0Y2hYX2NvbnN0YW50WG5vTWF0Y2hYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJ1dWlkIiwgR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJ1dWlkIikuSXMoUC5UeXBlT2YoR1R5cGUuVVVJRCkpLkNob29zZTxvYmplY3Q+KF9fLklzKFAuRXEoR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpKSwgX18uQ29uc3RhbnQ8b2JqZWN0PigibWF0Y2giKSwgX18uQ29uc3RhbnQ8b2JqZWN0Pigibm9NYXRjaCIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJkYXRhIikuUHJvcGVydHkoInV1aWQiLCBHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInV1aWQiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoImEiKSkuQ2FwPG9iamVjdD4oImEiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX2FnZ3JlZ2F0ZVhhWF9jYXBYYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoImRhdGEiKS5Qcm9wZXJ0eSgidXVpZCIsIEd1aWQuUGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigidXVpZCIpLklzKFAuVHlwZU9mKEdUeXBlLlVVSUQpKS5BZ2dyZWdhdGUoImEiKS5DYXA8b2JqZWN0PigiYSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgidXVpZCIsIEd1aWQuUGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigidXVpZCIpLklzKFAuVHlwZU9mKEdUeXBlLlVVSUQpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1h1dWlkX3R5cGVPZlhHVHlwZV9VVUlEWFhfdmFsdWVzWG5hbWVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLlByb3BlcnR5KCJ1dWlkIiwgR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpLCAoZyxwKSA9PmcuVigpLkhhcygidXVpZCIsIFAuVHlwZU9mKEdUeXBlLlVVSUQpKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYY29uc3RhbnRYdXVpZFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoInV1aWQiLCBHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInV1aWQiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuUHJvamVjdDxvYmplY3Q+KCJvcmlnaW5hbCIsICJ0eXBlIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PigidXVpZCIpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX3doZXJlWGlzWGVxWHV1aWRYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJ1dWlkIiwgR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJ1dWlkIikuSXMoUC5UeXBlT2YoR1R5cGUuVVVJRCkpLldoZXJlKF9fLklzKFAuRXEoR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9jaG9vc2VYaXNYZXFYdXVpZFhYX2NvbnN0YW50WG1hdGNoWF9jb25zdGFudFhub01hdGNoWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImRhdGEiKS5Qcm9wZXJ0eSgidXVpZCIsIEd1aWQuUGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigidXVpZCIpLklzKFAuVHlwZU9mKEdUeXBlLlVVSUQpKS5DaG9vc2U8b2JqZWN0PihfXy5JcyhQLkVxKEd1aWQuUGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSksIF9fLkNvbnN0YW50PG9iamVjdD4oIm1hdGNoIiksIF9fLkNvbnN0YW50PG9iamVjdD4oIm5vTWF0Y2giKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZGF0YSIpLlByb3BlcnR5KCJ1dWlkIiwgR3VpZC5QYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJ1dWlkIikuSXMoUC5UeXBlT2YoR1R5cGUuVVVJRCkpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKCJhIikpLkNhcDxvYmplY3Q+KCJhIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9hZ2dyZWdhdGVYYVhfY2FwWGFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJkYXRhIikuUHJvcGVydHkoInV1aWQiLCBHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oInV1aWQiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuQWdncmVnYXRlKCJhIikuQ2FwPG9iamVjdD4oImEiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9ncm91cENvdW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihHdWlkLlBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkuSXMoUC5UeXBlT2YoR1R5cGUuVVVJRCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhVVUlEWDQ3YWYxMGJfNThjY180MzcyX2E1NjdfMGYwMmIyZjNkNDc5WFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KEd1aWQuUGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYVVVJRFhYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oR3VpZC5OZXdHdWlkKCkpfX0sIApAQCAtMzc0LDcgKzM3NCw3IEBACiAgICAgICAgICAgICAgICB7ImdfVl9ib3RoX2JvdGhfZGVkdXBfYnlYbGFiZWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuQm90aCgpLkJvdGgoKS5EZWR1cCgpLkJ5KFQuTGFiZWwpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9kZWR1cF9mb2xkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFQuTGFiZWwpLkJ5KF9fLkJvdGhFKCkuVmFsdWVzPG9iamVjdD4oIndlaWdodCIpLkRlZHVwKCkuT3JkZXIoKS5CeShPcmRlci5Bc2MpLkZvbGQoKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9hc1hhWF9ib3RoX2FzWGJYX2RlZHVwWGFfYlhfYnlYbGFiZWxYX3NlbGVjdFhhX2JYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuQXMoImEiKS5Cb3RoKCkuQXMoImIiKS5EZWR1cCgiYSIsICJiIikuQnkoVC5MYWJlbCkuU2VsZWN0PG9iamVjdD4oImEiLCAiYiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfYXNYYVhfb3V0X2FzWGJYX2luX2FzWGNYX2RlZHVwWGFfYlhfcGF0aF9ieVhuYW1lWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiY2Fyb2wiKS5BcygiYyIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuQWRkRSgibGlrZXMiKS5Gcm9tKCJhIikuVG8oImIiKS5BZGRFKCJsaWtlcyIpLkZyb20oImEiKS5UbygiYyIpLCAoZyxwKSA9PmcuVigpLkFzKCJhIikuT3V0KCkuQXMoImIiKS5JbigpLkFzKCJjIikuRGVkdXAoImEiLCAiYiIpLlBhdGgoKS5CeSgibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfYXNYYVhfb3V0X2FzWGJYX2luX2FzWGNYX2RlZHVwWGFfYlhfcGF0aF9ieVhuYW1lWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiY2Fyb2wiKS5BcygiYyIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuQWRkRSgoc3RyaW5nKSAibGlrZXMiKS5Gcm9tKCJhIikuVG8oImIiKS5BZGRFKChzdHJpbmcpICJsaWtlcyIpLkZyb20oImEiKS5UbygiYyIpLCAoZyxwKSA9PmcuVigpLkFzKCJhIikuT3V0KCkuQXMoImIiKS5JbigpLkFzKCJjIikuRGVkdXAoImEiLCAiYiIpLlBhdGgoKS5CeSgibmFtZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1Zfb3V0RV9hc1hlWF9pblZfYXNYdlhfc2VsZWN0WGVYX29yZGVyX2J5WHdlaWdodF9hc2NYX3NlbGVjdFh2WF92YWx1ZXNYbmFtZVhfZGVkdXAiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5PdXRFKCkuQXMoImUiKS5JblYoKS5BcygidiIpLlNlbGVjdDxvYmplY3Q+KCJlIikuT3JkZXIoKS5CeSgid2VpZ2h0IiwgT3JkZXIuQXNjKS5TZWxlY3Q8b2JqZWN0PigidiIpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuRGVkdXAoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2JvdGhfYm90aF9kZWR1cF9ieVhvdXRFX2NvdW50WF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuQm90aCgpLkJvdGgoKS5EZWR1cCgpLkJ5KF9fLk91dEUoKS5Db3VudCgpKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXAiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Hcm91cENvdW50PG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLkRlZHVwKCl9fSwgCkBAIC0zODksOCArMzg5LDggQEAKICAgICAgICAgICAgICAgIHsiZ19WX2JvdGhfZGVkdXBfYWdlX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Cb3RoKCkuRGVkdXAoKS5CeSgiYWdlIikuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX2FzWGFYX2JvdGhfYXNYYlhfYm90aF9hc1hjWF9kZWR1cFhhX2JYX2FnZV9zZWxlY3RYYV9iX2NYX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5BcygiYSIpLkJvdGgoKS5BcygiYiIpLkJvdGgoKS5BcygiYyIpLkRlZHVwKCJhIiwgImIiKS5CeSgiYWdlIikuU2VsZWN0PG9iamVjdD4oImEiLCAiYiIsICJjIikuQnkoIm5hbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX3ZhbHVlc1hhZ2VYX2RlZHVwWGxvY2FsWF91bmZvbGQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuRGVkdXAoU2NvcGUuTG9jYWwpLlVuZm9sZDxvYmplY3Q+KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKSwgKGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiKS5EZWR1cCgpLkNvdW50KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9wcm9wZXJ0aWVzX2RlZHVwX2J5WHZhbHVlWF9jb3VudCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuRGVkdXAoKS5CeShULlZhbHVlKS5Db3VudCgpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfcHJvcGVydGllc19kZWR1cF9jb3VudCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuRGVkdXAoKS5Db3VudCgpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfcHJvcGVydGllc19kZWR1cF9ieVh2YWx1ZVhfY291bnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLCAoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLkRlZHVwKCkuQnkoVC5WYWx1ZSkuQ291bnQoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2JvdGhfaGFzWGxhYmVsX3NvZnR3YXJlWF9kZWR1cF9ieVhsYW5nWF9ieVhuYW1lWF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuQm90aCgpLkhhcyhULkxhYmVsLCAic29mdHdhcmUiKS5EZWR1cCgpLkJ5KCJsYW5nIikuQnkoIm5hbWUiKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfY291bnRfZGlzY2FyZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkNvdW50KCkuRGlzY2FyZCgpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzTGFiZWxYcGVyc29uWF9kaXNjYXJkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLkRpc2NhcmQoKX19LCAKQEAgLTQwMSwxMCArNDAxLDEwIEBACiAgICAgICAgICAgICAgICB7ImdfVl9kaXNjYXJkX2ZvbGRfZGlzY2FyZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkRpc2NhcmQoKS5Gb2xkKCkuRGlzY2FyZCgpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfZGlzY2FyZF9mb2xkX2NvbnN0YW50WDFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuRGlzY2FyZCgpLkZvbGQoKS5Db25zdGFudDxvYmplY3Q+KDEpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfcHJvamVjdFh4WF9ieVhjb2FsZXNjZVhhZ2VfaXNYZ3RYMjlYWF9kaXNjYXJkWFhfc2VsZWN0WHhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuUHJvamVjdDxvYmplY3Q+KCJ4IikuQnkoX18uQ29hbGVzY2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PigiYWdlIikuSXMoUC5HdCgyOSkpLCBfXy5EaXNjYXJkKCkpKS5TZWxlY3Q8b2JqZWN0PigieCIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfZHJvcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLkFzKCJhIikuQWRkVigpLkFzKCJiIikuQWRkRSgia25vd3MiKS5UbygiYSIpLCAoZyxwKSA9PmcuVigpLkRyb3AoKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX291dEVfZHJvcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLkFzKCJhIikuQWRkVigpLkFzKCJiIikuQWRkRSgia25vd3MiKS5UbygiYSIpLCAoZyxwKSA9PmcuVigpLk91dEUoKS5Ecm9wKCksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9kcm9wIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuQXMoImEiKS5BZGRWKCkuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLlRvKCJhIiksIChnLHApID0+Zy5WKCkuRHJvcCgpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpfX0sIAorICAgICAgICAgICAgICAgeyJnX1Zfb3V0RV9kcm9wIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuQXMoImEiKS5BZGRWKCkuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLlRvKCJhIiksIChnLHApID0+Zy5WKCkuT3V0RSgpLkRyb3AoKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3Byb3BlcnRpZXNfZHJvcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFkZFYoKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLCAoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLkRyb3AoKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19FX3Byb3BlcnRpZXNYd2VpZ2h0WF9kcm9wIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCJ3ZWlnaHQiKS5Ecm9wKCksIChnLHApID0+Zy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfRV9wcm9wZXJ0aWVzWHdlaWdodFhfZHJvcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuRSgpLlByb3BlcnRpZXM8b2JqZWN0Pigid2VpZ2h0IikuRHJvcCgpLCAoZyxwKSA9PmcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfcHJvcGVydGllc19wcm9wZXJ0aWVzWHN0YXJ0VGltZVhfZHJvcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJsb2NhdGlvbiIsICJueSIsICJzdGFydFRpbWUiLCAyMDE0LCAiZW5kVGltZSIsIDIwMTYpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJsb2NhdGlvbiIsICJ2YSIsICJzdGFydFRpbWUiLCAyMDE2KS5BZGRWKCkuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAibG9jYXRpb24iLCAidmEiLCAic3RhcnRUaW1lIiwgMjAxNCwgImVuZFRpbWUiLCAyMDE2KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAibG9jYXRpb24iLCAibnkiLCAic3RhcnRUaW1lIiwgMjAxNiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuUHJvcGVydGllczxvYmplY3Q+KCJzdGFydFRpbWUiKS5Ecm9wKCksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuUHJvcGVydGllczxvYmplY3Q+KCksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuUHJvcGVydGllczxvYmplY3Q+KCJzdGFydFRpbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2ZpbHRlclhpc1gwWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5GaWx0ZXIoX18uSXMoMCkpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfZmlsdGVyWGNvbnN0YW50WDBYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkZpbHRlcihfXy5Db25zdGFudDxvYmplY3Q+KDApKX19LCAKQEAgLTQ1NCw4ICs0NTQsOCBAQAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzWG5hbWVfbm90X2VuZGluZ1dpdGhYYXNYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsIFRleHRQLk5vdEVuZGluZ1dpdGgoImFzIikpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzWG5hbWVfcmVnZXhYck1hclhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgVGV4dFAuUmVnZXgoIl5tYXIiKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNYbmFtZV9ub3RSZWdleFhyTWFyWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCBUZXh0UC5Ob3RSZWdleCgiXm1hciIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIkFwYWNoZSBUaW5rZXJQb3DCqSIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsIFRleHRQLlJlZ2V4KCJUaW5rZXIiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclVuaWNvZGVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJBcGFjaGUgVGlua2VyUG9wwqkiKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCBUZXh0UC5SZWdleCgiVGlua2VyLipcdTAwQTkiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIkFwYWNoZSBUaW5rZXJQb3DCqSIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsIFRleHRQLlJlZ2V4KCJUaW5rZXIiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclVuaWNvZGVYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJBcGFjaGUgVGlua2VyUG9wwqkiKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCBUZXh0UC5SZWdleCgiVGlua2VyLipcdTAwQTkiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc1hwX25lcVh2WFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoInAiLCBQLk5lcSgidiIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc1hhZ2VfZ3RYMThYX2FuZFhsdFgzMFhYb3JYZ3R4MzVYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoImFnZSIsIFAuR3QoMTgpLkFuZChQLkx0KDMwKSkuT3IoUC5HdCgzNSkpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc1hhZ2VfZ3RYMThYX2FuZFhsdFgzMFhYb3JYbHR4MzVYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoImFnZSIsIFAuR3QoMTgpLkFuZChQLkx0KDMwKSkuQW5kKFAuTHQoMzUpKSl9fSwgCkBAIC00NzQsNiArNDc0LDcgQEAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc0lkWGVxWG51bGxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhc0lkKFAuRXEobnVsbCkpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzSWRYMl9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhc0lkKHBbInZpZDIiXSwgbnVsbCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNJZFhtYXJrb3Zhcl92YWRhc3ZhclgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNJZChwWyJ2aWQxIl0sIHBbInZpZDIiXSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9oYXNJZFhtYXJrb3Zhcl92YWRhc3Zhcl9wZXRlcnZhclgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNJZChwWyJ2aWQxIl0sIHBbInZpZDIiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNJZFgyQXNTdHJpbmdfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNJZChwWyJ2aWQyIl0sIG51bGwpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzSWRYMUFzU3RyaW5nXzJBc1N0cmluZ19udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhc0lkKHBbInZpZDEiXSwgcFsidmlkMiJdLCBudWxsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc0lkWG51bGxfMlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNJZChudWxsLCBwWyJ2aWQyIl0pfX0sIApAQCAtNzQ4LDMwICs3NDksMzAgQEAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hPcHRpb25zU3RyYXRlZ3lYX1YiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihPcHRpb25zU3RyYXRlZ3kpKS5WKCl9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYT3JkZXJMaW1pdFN0cmF0ZWd5WF9WIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgT3JkZXJMaW1pdFN0cmF0ZWd5KCkpLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hPcmRlckxpbWl0U3RyYXRlZ3lYX1YiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihPcmRlckxpbWl0U3RyYXRlZ3kpKS5WKCl9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIsICJiIiB9KSkuVigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYyIgfSkpLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9ib3RoRV93ZWlnaHQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLlYoKS5Cb3RoRSgpLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfYm90aEVfd2VpZ2h0IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImIiIH0pKS5WKCkuQm90aEUoKS5WYWx1ZXM8b2JqZWN0Pigid2VpZ2h0Iil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1ZfYm90aEVfZGVkdXBfd2VpZ2h0IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiLCAiYiIgfSkpLlYoKS5Cb3RoRSgpLkRlZHVwKCkuVmFsdWVzPG9iamVjdD4oIndlaWdodCIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9jWFhfVl9ib3RoRV93ZWlnaHQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYyIgfSkpLlYoKS5Cb3RoRSgpLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX1ZfYm90aF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5WKCkuQm90aCgpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2JYWF9WX2JvdGhfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJiIiB9KSkuVigpLkJvdGgoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX2JvdGhfZGVkdXBfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiwgImIiIH0pKS5WKCkuQm90aCgpLkRlZHVwKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfY1hYX1ZfYm90aF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImMiIH0pKS5WKCkuQm90aCgpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX291dF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5WKCkuT3V0KCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfaW5fbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJiIiB9KSkuVigpLkluKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYV9iWFhfVl9vdXRfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiwgImIiIH0pKS5WKCkuT3V0KCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfY1hYX1Zfb3V0X25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYyIgfSkpLlYoKS5PdXQoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYWxpY2VYX2FkZFhzZWxmWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRFKCJzZWxmIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLkhhcygiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLkUoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFh6ZXJvWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkWHNlbGZYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5JbmplY3Q8b2JqZWN0PigwKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZEUoInNlbGYiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKS5IYXMoIl9wYXJ0aXRpb24iLCAiYSIpLCAoZyxwKSA9PmcuRSgpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIiksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYV9iWFhfVl9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIiksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiLCAiYiIgfSkpLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9jWFhfVl9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIiksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImMiIH0pKS5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX1ZfYm90aEVfd2VpZ2h0IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5WKCkuQm90aEUoKS5WYWx1ZXM8b2JqZWN0Pigid2VpZ2h0Iil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2JYWF9WX2JvdGhFX3dlaWdodCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJiIiB9KSkuVigpLkJvdGhFKCkuVmFsdWVzPG9iamVjdD4oIndlaWdodCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX2JvdGhFX2RlZHVwX3dlaWdodCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiwgImIiIH0pKS5WKCkuQm90aEUoKS5EZWR1cCgpLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfY1hYX1ZfYm90aEVfd2VpZ2h0IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImMiIH0pKS5WKCkuQm90aEUoKS5WYWx1ZXM8b2JqZWN0Pigid2VpZ2h0Iil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX2JvdGhfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuVigpLkJvdGgoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9iWFhfVl9ib3RoX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYiIgfSkpLlYoKS5Cb3RoKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYV9iWFhfVl9ib3RoX2RlZHVwX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIsICJiIiB9KSkuVigpLkJvdGgoKS5EZWR1cCgpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX2JvdGhfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJjIiB9KSkuVigpLkJvdGgoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9vdXRfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuVigpLk91dCgpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2JYWF9WX2luX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYiIgfSkpLlYoKS5JbigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1Zfb3V0X25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAyLjBkKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIsICJiIiB9KSkuVigpLk91dCgpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX291dF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImMiIH0pKS5WKCkuT3V0KCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2FsaWNlWF9hZGRYc2VsZlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQWRkRSgoc3RyaW5nKSAic2VsZiIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5IYXMoIl9wYXJ0aXRpb24iLCAiYSIpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLkhhcygiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5FKCl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYemVyb1hfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYWxpY2VYX2FkZFhzZWxmWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuSW5qZWN0PG9iamVjdD4oMCkuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRFKChzdHJpbmcpICJzZWxmIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLkhhcygiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLkUoKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX21lcmdlViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFgwWF9tZXJnZVYiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLkhhcygiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9tZXJnZUUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5FKCkuSGFzKCJrbm93cyIsICJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLkUoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFgwWG1lcmdlRSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLkUoKS5IYXMoImtub3dzIiwgIl9wYXJ0aXRpb24iLCAiYSIpLCAoZyxwKSA9PmcuRSgpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX2FsaWNlWF9vcHRpb25Yb25NYXRjaF9uYW1lX2JvYlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYm9iIikuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLlYoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX21lcmdlVl9vcHRpb25Yb25DcmVhdGVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgImFsaWNlIikuSGFzKCJhZ2UiLCAzNSkuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLlYoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFgwWF9fbWVyZ2VWX29wdGlvblhvbkNyZWF0ZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLCAoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhIiB9KSkuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAiYWxpY2UiKS5IYXMoImFnZSIsIDM1KS5IYXMoIl9wYXJ0aXRpb24iLCAiYSIpLCAoZyxwKSA9PmcuVigpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VFIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYm9iIiksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLCAoZyxwKSA9PmcuRSgpLkhhcygia25vd3MiLCAiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5FKCl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhtZXJnZUUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLkluamVjdDxvYmplY3Q+KDApLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5FKCkuSGFzKCJrbm93cyIsICJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLkUoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9hbGljZVhfb3B0aW9uWG9uTWF0Y2hfbmFtZV9ib2JYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImJvYiIpLkhhcygiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9tZXJnZVZfb3B0aW9uWG9uQ3JlYXRlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIiksIChnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgImEiIH0pKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJhbGljZSIpLkhhcygiYWdlIiwgMzUpLkhhcygiX3BhcnRpdGlvbiIsICJhIiksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhfX21lcmdlVl9vcHRpb25Yb25DcmVhdGVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKSwgKGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyAiYSIgfSkpLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgImFsaWNlIikuSGFzKCJhZ2UiLCAzNSkuSGFzKCJfcGFydGl0aW9uIiwgImEiKSwgKGcscCkgPT5nLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQYXRoUHJvY2Vzc29yU3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlc1huYW1lWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXRoUHJvY2Vzc29yU3RyYXRlZ3koKSkuVigpLkFzKCJhIikuU2VsZWN0PG9iamVjdD4oImEiKS5CeShfXy5WYWx1ZXM8b2JqZWN0PigibmFtZSIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hQYXRoUHJvY2Vzc29yU3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlc1huYW1lWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihQYXRoUHJvY2Vzc29yU3RyYXRlZ3kpKS5WKCkuQXMoImEiKS5TZWxlY3Q8b2JqZWN0PigiYSIpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KCJuYW1lIikpfX0sIAogICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lYX1YiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KCkpLlYoKX19LCAKQEAgLTc4NCw5ICs3ODUsOSBAQAogICAgICAgICAgICAgICAgeyJnX3dpdGhvdXRTdHJhdGVnaWVzWFByb2ZpbGVTdHJhdGVneVhfViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFByb2ZpbGVTdHJhdGVneSkpLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9WIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5WKCl9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9vdXRYa25vd3NYX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5PdXQoImtub3dzIikuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9hZGRWWHBlcnNvblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLkFkZFYoInBlcnNvbiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9mcm9tWFZYMVhYX3RvWFZYMlhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5BZGRFKCJsaW5rIikuRnJvbShfXy5WKHBbInZpZDEiXSkpLlRvKF9fLlYocFsidmlkMiJdKSl9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9hZGRWWHBlcnNvblhfZnJvbVhWWDFYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLkFkZEUoImxpbmsiKS5Gcm9tKF9fLlYocFsidmlkMSJdKSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfYWRkVlhwZXJzb25YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9hZGRWWHBlcnNvblhfZnJvbVhWWDFYWF90b1hWWDJYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuQWRkRSgoc3RyaW5nKSAibGluayIpLkZyb20oX18uVihwWyJ2aWQxIl0pKS5UbyhfXy5WKHBbInZpZDIiXSkpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1ZfYWRkVlhwZXJzb25YX2Zyb21YVlgxWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5BZGRFKChzdHJpbmcpICJsaW5rIikuRnJvbShfXy5WKHBbInZpZDEiXSkpfX0sIAogICAgICAgICAgICAgICAgeyJnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1ZfcHJvcGVydHlYbmFtZV9qb3NoWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9FX3Byb3BlcnR5WHdlaWdodF8wWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuRSgpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2NsYXNzaWNfcmVjb21tZW5kYXRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAiREFSSyBTVEFSIikuQXMoImEiKS5PdXQoImZvbGxvd2VkQnkiKS5BZ2dyZWdhdGUoInN0YXNoIikuSW4oImZvbGxvd2VkQnkiKS5XaGVyZShQLk5lcSgiYSIpLkFuZChQLk5vdChQLldpdGhpbigic3Rhc2giKSkpKS5Hcm91cENvdW50PG9iamVjdD4oKS5VbmZvbGQ8b2JqZWN0PigpLlByb2plY3Q8b2JqZWN0PigieCIsICJ5IiwgInoiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uS2V5cykuVmFsdWVzPG9iamVjdD4oIm5hbWUiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlZhbHVlczxvYmplY3Q+KCJwZXJmb3JtYW5jZXMiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykpLk9yZGVyKCkuQnkoX18uU2VsZWN0PG9iamVjdD4oInoiKSwgT3JkZXIuRGVzYykuQnkoX18uU2VsZWN0PG9iamVjdD4oInkiKSwgT3JkZXIuQXNjKS5MaW1pdDxvYmplY3Q+KDUpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKCJtIikpLlNlbGVjdDxvYmplY3Q+KCJ4Iil9fSwgCkBAIC04MTEsOSArODEyLDkgQEAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9vcmRlcl9ieVhuYW1lWF9yZXBlYXRYYm90aF9vcmRlcl9ieVhuYW1lWF9hZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX2xpbWl0WDEwWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFJlcGVhdFVucm9sbFN0cmF0ZWd5KSkuVigpLk9yZGVyKCkuQnkoIm5hbWUiKS5SZXBlYXQoX18uQm90aCgpLk9yZGVyKCkuQnkoIm5hbWUiKS5BZ2dyZWdhdGUoIngiKSkuVGltZXMoMikuTGltaXQ8b2JqZWN0PigxMCl9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfc2FtcGxlWDFYWF90aW1lc1gyWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoX18uQm90aCgpLlNhbXBsZSgxKSkuVGltZXMoMil9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfc2FtcGxlWDFYWF90aW1lc1gyWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFJlcGVhdFVucm9sbFN0cmF0ZWd5KSkuVigpLlJlcGVhdChfXy5Cb3RoKCkuU2FtcGxlKDEpKS5UaW1lcygyKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl90cnVlWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGlkXzEyM1hfcHJvcGVydHlYbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSkpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJpZCIsIDEyMykuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl90cnVlWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGFnZV8yOVhfcHJvcGVydHlYbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwga2V5czogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhZ2UiIH0pKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aG91dFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhpZF8xMjNYX3Byb3BlcnR5WG5hbWVfbWFya29YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiaWQiLCAxMjMpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuVmFsdWVzPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl90cnVlWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGlkXzEyM1hfcHJvcGVydHlYbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJpZCIsIDEyMykuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl90cnVlWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGFnZV8yOVhfcHJvcGVydHlYbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwga2V5czogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJhZ2UiIH0pKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aG91dFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhpZF8xMjNYX3Byb3BlcnR5WG5hbWVfbWFya29YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgiaWQiLCAxMjMpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuVmFsdWVzPG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1YiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihTZWVkU3RyYXRlZ3kpKS5WKCl9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuVigpfX0sIAogICAgICAgICAgICAgICAgeyJnX3dpdGhvdXRTdHJhdGVnaWVzWFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX1YiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KSkuVigpfX0sIApAQCAtODg0LDQxICs4ODUsNDEgQEAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneVhfViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KSkuV2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCl9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1YiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpKS5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQXMoImEiKS5PdXQoImNyZWF0ZWQiKS5BZGRFKCJjcmVhdGVkQnkiKS5UbygiYSIpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkluRSgpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWF9wcm9wZXJ0eVh3ZWlnaHRfMlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5BcygiYSIpLk91dCgiY3JlYXRlZCIpLkFkZEUoImNyZWF0ZWRCeSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDIuMGQpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW5FKCkuSGFzKCJ3ZWlnaHQiLCAyLjBkKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX291dEVfcHJvcGVydHlYd2VpZ2h0X251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuT3V0RSgpLlByb3BlcnR5KCJ3ZWlnaHQiLCBudWxsKSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIndlaWdodCIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfYWdncmVnYXRlWHhYX2FzWGFYX3NlbGVjdFh4WF91bmZvbGRfYWRkRVhleGlzdHNXaXRoWF90b1hhWF9wcm9wZXJ0eVh0aW1lX25vd1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5BZ2dyZWdhdGUoIngiKS5BcygiYSIpLlNlbGVjdDxvYmplY3Q+KCJ4IikuVW5mb2xkPG9iamVjdD4oKS5BZGRFKCJleGlzdHNXaXRoIikuVG8oImEiKS5Qcm9wZXJ0eSgidGltZSIsICJub3ciKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkluRSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImV4aXN0c1dpdGgiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgiZXhpc3RzV2l0aCIpLkhhcygidGltZSIsICJub3ciKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLkluRSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLk91dEUoImV4aXN0c1dpdGgiKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5Cb3RoRSgiZXhpc3RzV2l0aCIpLkhhcygidGltZSIsICJub3ciKSwgKGcscCkgPT5nLlYocFsidmlkMyJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLkluRSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLk91dEUoImV4aXN0c1dpdGgiKSwgKGcscCkgPT5nLlYocFsidmlkMyJdKS5Cb3RoRSgiZXhpc3RzV2l0aCIpLkhhcygidGltZSIsICJub3ciKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkluRSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLk91dEUoImV4aXN0c1dpdGgiKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5Cb3RoRSgiZXhpc3RzV2l0aCIpLkhhcygidGltZSIsICJub3ciKSwgKGcscCkgPT5nLlYocFsidmlkNSJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLkluRSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLk91dEUoImV4aXN0c1dpdGgiKSwgKGcscCkgPT5nLlYocFsidmlkNSJdKS5Cb3RoRSgiZXhpc3RzV2l0aCIpLkhhcygidGltZSIsICJub3ciKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkluRSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLk91dEUoImV4aXN0c1dpdGgiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgiZXhpc3RzV2l0aCIpLkhhcygidGltZSIsICJub3ciKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF93aGVyZVhuZXFYYVhYX2FzWGJYX2FkZEVYY29kZXZlbG9wZXJYX2Zyb21YYVhfdG9YYlhfcHJvcGVydHlYeWVhcl8yMDA5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFzKCJhIikuT3V0KCJjcmVhdGVkIikuSW4oImNyZWF0ZWQiKS5XaGVyZShQLk5lcSgiYSIpKS5BcygiYiIpLkFkZEUoImNvZGV2ZWxvcGVyIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoInllYXIiLCAyMDA5KSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkluRSgiY29kZXZlbG9wZXIiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCJjb2RldmVsb3BlciIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCJjb2RldmVsb3BlciIpLkhhcygieWVhciIsIDIwMDkpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5JbkUoImNvZGV2ZWxvcGVyIiksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuT3V0RSgiY29kZXZlbG9wZXIiKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5Cb3RoRSgiY29kZXZlbG9wZXIiKS5IYXMoInllYXIiLCAyMDA5KSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkluRSgiY29kZXZlbG9wZXIiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5PdXRFKCJjb2RldmVsb3BlciIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkJvdGhFKCJjb2RldmVsb3BlciIpLkhhcygieWVhciIsIDIwMDkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfYXNYYVhfaW5YY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX2Zyb21YYVhfcHJvcGVydHlYeWVhcl8yMDA5WF9wcm9wZXJ0eVhhY2xfcHVibGljWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFzKCJhIikuSW4oImNyZWF0ZWQiKS5BZGRFKCJjcmVhdGVkQnkiKS5Gcm9tKCJhIikuUHJvcGVydHkoInllYXIiLCAyMDA5KS5Qcm9wZXJ0eSgiYWNsIiwgInB1YmxpYyIpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW5FKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgiY3JlYXRlZEJ5IikuSGFzKCJ5ZWFyIiwgMjAwOSkuSGFzKCJhY2wiLCAicHVibGljIiksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkMyJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLkluRSgiY3JlYXRlZEJ5IiksIChnLHApID0+Zy5WKHBbInZpZDMiXSkuT3V0RSgiY3JlYXRlZEJ5IiksIChnLHApID0+Zy5WKHBbInZpZDMiXSkuQm90aEUoImNyZWF0ZWRCeSIpLkhhcygieWVhciIsIDIwMDkpLkhhcygiYWNsIiwgInB1YmxpYyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuSW5FKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5PdXRFKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5Cb3RoRSgiY3JlYXRlZEJ5IikuSGFzKCJ5ZWFyIiwgMjAwOSkuSGFzKCJhY2wiLCAicHVibGljIiksIChnLHApID0+Zy5WKHBbInZpZDUiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkNSJdKS5JbkUoImNyZWF0ZWRCeSIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLk91dEUoImNyZWF0ZWRCeSIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLkJvdGhFKCJjcmVhdGVkQnkiKS5IYXMoInllYXIiLCAyMDA5KS5IYXMoImFjbCIsICJwdWJsaWMiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkluRSgiY3JlYXRlZEJ5IiksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuT3V0RSgiY3JlYXRlZEJ5IiksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuQm90aEUoImNyZWF0ZWRCeSIpLkhhcygieWVhciIsIDIwMDkpLkhhcygiYWNsIiwgInB1YmxpYyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGJfYlhfVlhhWF9hZGRFWGtub3dzWF90b1hiWF9wcm9wZXJ0eVh3ZWlnaHRfMF81WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkFkZEUoImtub3dzIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5JbkUoImtub3dzIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0RSgia25vd3MiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgia25vd3MiKS5IYXMoIndlaWdodCIsIDAuNSksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5JbkUoImtub3dzIiksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuT3V0RSgia25vd3MiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgia25vd3MiKS5IYXMoIndlaWdodCIsIDAuNSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfYWRkVl9hc1hmaXJzdFhfcmVwZWF0WGFkZEVYbmV4dFhfdG9YYWRkVlhfaW5WWF90aW1lc1g1WF9hZGRFWG5leHRYX3RvWHNlbGVjdFhmaXJzdFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuQXMoImZpcnN0IikuUmVwZWF0KF9fLkFkZEUoIm5leHQiKS5UbyhfXy5BZGRWKCkpLkluVigpKS5UaW1lcyg1KS5BZGRFKCJuZXh0IikuVG8oX18uU2VsZWN0PG9iamVjdD4oImZpcnN0IikpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJuZXh0IiksIChnLHApID0+Zy5WKCkuTGltaXQ8b2JqZWN0PigxKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVigpLkxpbWl0PG9iamVjdD4oMSkuSW5FKCksIChnLHApID0+Zy5WKCkuTGltaXQ8b2JqZWN0PigxKS5PdXRFKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9oYXNYbmFtZV9tYXJrb1hfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYWRkRVhzZWxlY3RYYlhfbGFiZWxYX3RvWGFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5PdXRFKCJjcmVhdGVkIikuQXMoImIiKS5JblYoKS5BZGRFKF9fLlNlbGVjdDxvYmplY3Q+KCJiIikuTGFiZWwoKSkuVG8oImEiKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkluRSgiY3JlYXRlZCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkluKCJjcmVhdGVkIikuSGFzKCJuYW1lIiwgImxvcCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImNyZWF0ZWQiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRFWFZfb3V0RV9sYWJlbF9ncm91cENvdW50X29yZGVyWGxvY2FsWF9ieVh2YWx1ZXNfZGVzY1hfc2VsZWN0WGtleXNYX3VuZm9sZF9saW1pdFgxWFhfZnJvbVhWX2hhc1huYW1lX3ZhZGFzWFhfdG9YVl9oYXNYbmFtZV9sb3BYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkRShfXy5WKCkuT3V0RSgpLkxhYmVsKCkuR3JvdXBDb3VudDxvYmplY3Q+KCkuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KENvbHVtbi5WYWx1ZXMsIE9yZGVyLkRlc2MpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5LZXlzKS5VbmZvbGQ8b2JqZWN0PigpLkxpbWl0PG9iamVjdD4oMSkpLkZyb20oX18uVigpLkhhcygibmFtZSIsICJ2YWRhcyIpKS5UbyhfXy5WKCkuSGFzKCJuYW1lIiwgImxvcCIpKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLkluRSgia25vd3MiKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5PdXRFKCJjcmVhdGVkIiksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuT3V0KCJjcmVhdGVkIikuSGFzKCJuYW1lIiwgImxvcCIpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZEVYa25vd3NYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZEUoImtub3dzIikuRnJvbShfXy5WKHBbInZpZDEiXSkpLlRvKF9fLlYocFsidmlkNiJdKSkuUHJvcGVydHkoIndlaWdodCIsIHBbInh4MSJdKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCJrbm93cyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dCgia25vd3MiKS5IYXMoIm5hbWUiLCAicGV0ZXIiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRFWGtub3dzdmFyWF9mcm9tWFZYdmlkMVhYX3RvWFZYdmlkNlhYX3Byb3BlcnR5WHdlaWdodF8wXzFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5BZGRFKChzdHJpbmcpIHBbInh4MSJdKS5Gcm9tKF9fLlYocFsidmlkMSJdKSkuVG8oX18uVihwWyJ2aWQ2Il0pKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgcFsieHgyIl0pLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImtub3dzIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJwZXRlciIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZYYVhfYWRkRVhrbm93c1hfdG9YYlhfcHJvcGVydHlYd2VpZ2h0XzBfMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5BZGRFKCJrbm93cyIpLlRvKF9fLlYocFsidmlkNiJdKSkuUHJvcGVydHkoIndlaWdodCIsIHBbInh4MSJdKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCJrbm93cyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dCgia25vd3MiKS5IYXMoIm5hbWUiLCAicGV0ZXIiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRFWGtub3dzWHByb3BlcnR5WHdlaWdodF9udWxsWGZyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLkFkZEUoImtub3dzIikuUHJvcGVydHkoIndlaWdodCIsIG51bGwpLkZyb20oX18uVigpLkhhcygibmFtZSIsICJtYXJrbyIpKS5UbyhfXy5WKCkuSGFzKCJuYW1lIiwgInZhZGFzIikpLCAoZyxwKSA9PmcuRSgpLkhhcygia25vd3MiLCAid2VpZ2h0IiwgKG9iamVjdCkgbnVsbCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfYWRkRVhrbm93c3Zhclhwcm9wZXJ0eVh3ZWlnaHRfbnVsbFhmcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5BZGRFKChzdHJpbmcpIHBbInh4MSJdKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgbnVsbCkuRnJvbShfXy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikpLlRvKF9fLlYoKS5IYXMoIm5hbWUiLCAidmFkYXMiKSksIChnLHApID0+Zy5FKCkuSGFzKCJrbm93cyIsICJ3ZWlnaHQiLCAob2JqZWN0KSBudWxsKX19LCAKLSAgICAgICAgICAgICAgIHsiZ191bmlvblhhZGRFWGtub3dzdmFyWHByb3BlcnR5WHdlaWdodF9udWxsWGZyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5VbmlvbjxvYmplY3Q+KF9fLkFkZEUoKHN0cmluZykgcFsieHgxIl0pLlByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5Gcm9tKF9fLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKSkuVG8oX18uVigpLkhhcygibmFtZSIsICJ2YWRhcyIpKSksIChnLHApID0+Zy5FKCkuSGFzKCJrbm93cyIsICJ3ZWlnaHQiLCAxKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRFWGVkZ2VYX2Zyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWF9wcm9wZXJ0eVh3ZWlnaHRfMF81WF93aXRoWGtleV92YWx1ZVhfdmFsdWVzWHdlaWdodF9rZXlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLCAoZyxwKSA9PmcuQWRkRSgiZWRnZSIpLkZyb20oX18uVigpLkhhcygibmFtZSIsICJtYXJrbyIpKS5UbyhfXy5WKCkuSGFzKCJuYW1lIiwgInZhZGFzIikpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLldpdGgoImtleSIsICJ2YWx1ZSIpLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiLCAia2V5Iil9fSwgCi0gICAgICAgICAgICAgICB7ImdfYWRkRVhrbm93c1hfZnJvbVhWX2hhc1huYW1lX21hcmtvWFhfdG9YVl9oYXNYbmFtZV92YWRhc1hYX3Byb3BlcnR5WHdlaWdodF8wXzVYX2FkZEVYa25vd3NYX2Zyb21YVl9oYXNYbmFtZV9tYXJrb1hYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLCAoZyxwKSA9PmcuQWRkRSgia25vd3MiKS5Gcm9tKF9fLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKSkuVG8oX18uVigpLkhhcygibmFtZSIsICJ2YWRhcyIpKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5BZGRFKCJrbm93cyIpLkZyb20oX18uVigpLkhhcygibmFtZSIsICJtYXJrbyIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WWDFYX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhhZ2Vfc2VsZWN0WGFYX2J5WGFnZVhYX3Byb3BlcnR5WG5hbWVfcHVwcHlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQXMoImEiKS5BZGRWKCJhbmltYWwiKS5Qcm9wZXJ0eSgiYWdlIiwgX18uU2VsZWN0PG9iamVjdD4oImEiKS5CeSgiYWdlIikpLlByb3BlcnR5KCJuYW1lIiwgInB1cHB5IiksIChnLHApID0+Zy5WKCkuSGFzKCJhbmltYWwiLCAiYWdlIiwgMjkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfYWRkVlhhbmltYWxYX3Byb3BlcnR5WGFnZV8wWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFkZFYoImFuaW1hbCIpLlByb3BlcnR5KCJhZ2UiLCAwKSwgKGcscCkgPT5nLlYoKS5IYXMoImFuaW1hbCIsICJhZ2UiLCAwKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2FkZFZYYW5pbWFsdmFyWF9wcm9wZXJ0eVhhZ2VfMHZhclgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5BZGRWKChzdHJpbmcpIHBbInh4MSJdKS5Qcm9wZXJ0eSgiYWdlIiwgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLkhhcygiYW5pbWFsIiwgImFnZSIsIDApfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX3N0ZXBoZW5YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJzdGVwaGVuIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfYWRkVlhwZXJzb252YXJYX3Byb3BlcnR5WG5hbWVfc3RlcGhlbnZhclgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZFYoKHN0cmluZykgcFsieHgxIl0pLlByb3BlcnR5KCJuYW1lIiwgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzTGFiZWxYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAob2JqZWN0KSBudWxsKSwgKGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJuYW1lIiwgInN0ZXBoZW4iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJuYW1lIiwgInN0ZXBoZW5tIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVubSIpfX0sIAotICAgICAgICAgICAgICAgeyJnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1fc2luY2VfMjAxMFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW5tIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVubSIpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLkhhcygic2luY2UiLCAyMDEwKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX21hcmtvWF9wcm9wZXJ0eVhmcmllbmRXZWlnaHRfb3V0RVhrbm93c1hfd2VpZ2h0X3N1bV9fYWNsX3ByaXZhdGVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImZyaWVuZFdlaWdodCIsIF9fLk91dEUoImtub3dzIikuVmFsdWVzPG9iamVjdD4oIndlaWdodCIpLlN1bTxvYmplY3Q+KCksICJhY2wiLCAicHJpdmF0ZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImZyaWVuZFdlaWdodCIsIDEuNSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiZnJpZW5kV2VpZ2h0IikuSGFzKCJhY2wiLCAicHJpdmF0ZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImZyaWVuZFdlaWdodCIpLkNvdW50KCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfbWF0ZW9YX3Byb3BlcnR5WG5hbWVfZ2F0ZW9YX3Byb3BlcnR5WG5hbWVfY2F0ZW9YX3Byb3BlcnR5WGFnZV81WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkVigiYW5pbWFsIikuUHJvcGVydHkoIm5hbWUiLCAibWF0ZW8iKS5Qcm9wZXJ0eSgibmFtZSIsICJnYXRlbyIpLlByb3BlcnR5KCJuYW1lIiwgImNhdGVvIikuUHJvcGVydHkoImFnZSIsIDUpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJhbmltYWwiKS5IYXMoIm5hbWUiLCAibWF0ZW8iKS5IYXMoIm5hbWUiLCAiZ2F0ZW8iKS5IYXMoIm5hbWUiLCAiY2F0ZW8iKS5IYXMoImFnZSIsIDUpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGFfbWFya29YX2FkZFZfcHJvcGVydHlYbmFtZV9zZWxlY3RYYVhYX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLldpdGhTaWRlRWZmZWN0KCJhIiwgIm1hcmtvIikuQWRkVigpLlByb3BlcnR5KCJuYW1lIiwgX18uU2VsZWN0PG9iamVjdD4oImEiKSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1fc2luY2VfMjAxMFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAic3RlcGhlbiIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJzdGVwaGVubSIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJzdGVwaGVubSIpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLkhhcygic2luY2UiLCAyMDEwKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhuYW1lX3ZhbHVlc1huYW1lWFhfcHJvcGVydHlYbmFtZV9hbl9hbmltYWxYX3Byb3BlcnR5WHZhbHVlc1huYW1lWF9sYWJlbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5BZGRWKCJhbmltYWwiKS5Qcm9wZXJ0eSgibmFtZSIsIF9fLlZhbHVlczxvYmplY3Q+KCJuYW1lIikpLlByb3BlcnR5KCJuYW1lIiwgImFuIGFuaW1hbCIpLlByb3BlcnR5KF9fLlZhbHVlczxvYmplY3Q+KCJuYW1lIiksIF9fLkxhYmVsKCkpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJhbmltYWwiKS5IYXMoIm5hbWUiLCAibWFya28iKS5IYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuSGFzKCJtYXJrbyIsICJwZXJzb24iKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgiYW5pbWFsIikuSGFzKCJuYW1lIiwgInZhZGFzIikuSGFzKCJuYW1lIiwgImFuIGFuaW1hbCIpLkhhcygidmFkYXMiLCAicGVyc29uIiksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoImFuaW1hbCIpLkhhcygibmFtZSIsICJsb3AiKS5IYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuSGFzKCJsb3AiLCAic29mdHdhcmUiKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgiYW5pbWFsIikuSGFzKCJuYW1lIiwgImpvc2giKS5IYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuSGFzKCJqb3NoIiwgInBlcnNvbiIpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJhbmltYWwiKS5IYXMoIm5hbWUiLCAicmlwcGxlIikuSGFzKCJuYW1lIiwgImFuIGFuaW1hbCIpLkhhcygicmlwcGxlIiwgInNvZnR3YXJlIiksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoImFuaW1hbCIpLkhhcygibmFtZSIsICJwZXRlciIpLkhhcygibmFtZSIsICJhbiBhbmltYWwiKS5IYXMoInBldGVyIiwgInBlcnNvbiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGFfdGVzdFhfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfcHJvcGVydHlYdGVtcF9zZWxlY3RYYVhYX3ZhbHVlTWFwWG5hbWVfdGVtcFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLldpdGhTaWRlRWZmZWN0KCJhIiwgInRlc3QiKS5WKCkuSGFzTGFiZWwoInNvZnR3YXJlIikuUHJvcGVydHkoInRlbXAiLCBfXy5TZWxlY3Q8b2JqZWN0PigiYSIpKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oIm5hbWUiLCAidGVtcCIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGFfbmFtZVhfYWRkVl9wcm9wZXJ0eVhzZWxlY3RYYVhfbWFya29YX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLldpdGhTaWRlRWZmZWN0KCJhIiwgIm5hbWUiKS5BZGRWKCkuUHJvcGVydHkoX18uU2VsZWN0PG9iamVjdD4oImEiKSwgIm1hcmtvIikuVmFsdWVzPG9iamVjdD4oIm5hbWUiKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9vdXRYY3JlYXRlZFhfYXNYYlhfYWRkVlhzZWxlY3RYYVhfbGFiZWxYX3Byb3BlcnR5WHRlc3Rfc2VsZWN0WGJYX2xhYmVsWF92YWx1ZU1hcF93aXRoWHRva2Vuc1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5BcygiYSIpLkhhcygibmFtZSIsICJtYXJrbyIpLk91dCgiY3JlYXRlZCIpLkFzKCJiIikuQWRkVihfXy5TZWxlY3Q8b2JqZWN0PigiYSIpLkxhYmVsKCkpLlByb3BlcnR5KCJ0ZXN0IiwgX18uU2VsZWN0PG9iamVjdD4oImIiKS5MYWJlbCgpKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5XaXRoKFdpdGhPcHRpb25zLlRva2VucyksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAidGVzdCIsICJzb2Z0d2FyZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZYVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydGllc1huYW1lWF9rZXlYX2xhYmVsIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5BZGRWKF9fLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiKS5LZXkoKSkuTGFiZWwoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9hZGRFWGNyZWF0ZWRCeVhfdG9YYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5BcygiYSIpLk91dCgiY3JlYXRlZCIpLkFkZEUoKHN0cmluZykgImNyZWF0ZWRCeSIpLlRvKCJhIiksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW5FKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYX3Byb3BlcnR5WHdlaWdodF8yWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkFzKCJhIikuT3V0KCJjcmVhdGVkIikuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZEJ5IikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMi4wZCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5JbkUoKS5IYXMoIndlaWdodCIsIDIuMGQpfX0sIAorICAgICAgICAgICAgICAgeyJnX1Zfb3V0RV9wcm9wZXJ0eVh3ZWlnaHRfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5PdXRFKCkuUHJvcGVydHkoIndlaWdodCIsIG51bGwpLCAoZyxwKSA9PmcuRSgpLlByb3BlcnRpZXM8b2JqZWN0Pigid2VpZ2h0Iil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9hZ2dyZWdhdGVYeFhfYXNYYVhfc2VsZWN0WHhYX3VuZm9sZF9hZGRFWGV4aXN0c1dpdGhYX3RvWGFYX3Byb3BlcnR5WHRpbWVfbm93WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFnZ3JlZ2F0ZSgieCIpLkFzKCJhIikuU2VsZWN0PG9iamVjdD4oIngiKS5VbmZvbGQ8b2JqZWN0PigpLkFkZEUoKHN0cmluZykgImV4aXN0c1dpdGgiKS5UbygiYSIpLlByb3BlcnR5KCJ0aW1lIiwgIm5vdyIpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW5FKCJleGlzdHNXaXRoIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0RSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCJleGlzdHNXaXRoIikuSGFzKCJ0aW1lIiwgIm5vdyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuSW5FKCJleGlzdHNXaXRoIiksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuT3V0RSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLkJvdGhFKCJleGlzdHNXaXRoIikuSGFzKCJ0aW1lIiwgIm5vdyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDMiXSkuSW5FKCJleGlzdHNXaXRoIiksIChnLHApID0+Zy5WKHBbInZpZDMiXSkuT3V0RSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLkJvdGhFKCJleGlzdHNXaXRoIikuSGFzKCJ0aW1lIiwgIm5vdyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuSW5FKCJleGlzdHNXaXRoIiksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuT3V0RSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkJvdGhFKCJleGlzdHNXaXRoIikuSGFzKCJ0aW1lIiwgIm5vdyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDUiXSkuSW5FKCJleGlzdHNXaXRoIiksIChnLHApID0+Zy5WKHBbInZpZDUiXSkuT3V0RSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLkJvdGhFKCJleGlzdHNXaXRoIikuSGFzKCJ0aW1lIiwgIm5vdyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuSW5FKCJleGlzdHNXaXRoIiksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuT3V0RSgiZXhpc3RzV2l0aCIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkJvdGhFKCJleGlzdHNXaXRoIikuSGFzKCJ0aW1lIiwgIm5vdyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWG5lcVhhWFhfYXNYYlhfYWRkRVhjb2RldmVsb3BlclhfZnJvbVhhWF90b1hiWF9wcm9wZXJ0eVh5ZWFyXzIwMDlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuQXMoImEiKS5PdXQoImNyZWF0ZWQiKS5JbigiY3JlYXRlZCIpLldoZXJlKFAuTmVxKCJhIikpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAiY29kZXZlbG9wZXIiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgieWVhciIsIDIwMDkpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW5FKCJjb2RldmVsb3BlciIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImNvZGV2ZWxvcGVyIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQm90aEUoImNvZGV2ZWxvcGVyIikuSGFzKCJ5ZWFyIiwgMjAwOSksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkluRSgiY29kZXZlbG9wZXIiKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5PdXRFKCJjb2RldmVsb3BlciIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkJvdGhFKCJjb2RldmVsb3BlciIpLkhhcygieWVhciIsIDIwMDkpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuSW5FKCJjb2RldmVsb3BlciIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLk91dEUoImNvZGV2ZWxvcGVyIiksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuQm90aEUoImNvZGV2ZWxvcGVyIikuSGFzKCJ5ZWFyIiwgMjAwOSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9hc1hhWF9pblhjcmVhdGVkWF9hZGRFWGNyZWF0ZWRCeVhfZnJvbVhhWF9wcm9wZXJ0eVh5ZWFyXzIwMDlYX3Byb3BlcnR5WGFjbF9wdWJsaWNYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuQXMoImEiKS5JbigiY3JlYXRlZCIpLkFkZEUoKHN0cmluZykgImNyZWF0ZWRCeSIpLkZyb20oImEiKS5Qcm9wZXJ0eSgieWVhciIsIDIwMDkpLlByb3BlcnR5KCJhY2wiLCAicHVibGljIiksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5JbkUoImNyZWF0ZWRCeSIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImNyZWF0ZWRCeSIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCJjcmVhdGVkQnkiKS5IYXMoInllYXIiLCAyMDA5KS5IYXMoImFjbCIsICJwdWJsaWMiKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDMiXSkuSW5FKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkMyJdKS5PdXRFKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkMyJdKS5Cb3RoRSgiY3JlYXRlZEJ5IikuSGFzKCJ5ZWFyIiwgMjAwOSkuSGFzKCJhY2wiLCAicHVibGljIiksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuQm90aEUoKSwgKGcscCkgPT5nLlYocFsidmlkNCJdKS5JbkUoImNyZWF0ZWRCeSIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLk91dEUoImNyZWF0ZWRCeSIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLkJvdGhFKCJjcmVhdGVkQnkiKS5IYXMoInllYXIiLCAyMDA5KS5IYXMoImFjbCIsICJwdWJsaWMiKSwgKGcscCkgPT5nLlYocFsidmlkNSJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLkluRSgiY3JlYXRlZEJ5IiksIChnLHApID0+Zy5WKHBbInZpZDUiXSkuT3V0RSgiY3JlYXRlZEJ5IiksIChnLHApID0+Zy5WKHBbInZpZDUiXSkuQm90aEUoImNyZWF0ZWRCeSIpLkhhcygieWVhciIsIDIwMDkpLkhhcygiYWNsIiwgInB1YmxpYyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDYiXSkuSW5FKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5PdXRFKCJjcmVhdGVkQnkiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgiY3JlYXRlZEJ5IikuSGFzKCJ5ZWFyIiwgMjAwOSkuSGFzKCJhY2wiLCAicHVibGljIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYYl9iWF9WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5UbygiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkluRSgia25vd3MiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCJrbm93cyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCJrbm93cyIpLkhhcygid2VpZ2h0IiwgMC41KSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5Cb3RoRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkluRSgia25vd3MiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5PdXRFKCJrbm93cyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLkJvdGhFKCJrbm93cyIpLkhhcygid2VpZ2h0IiwgMC41KX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWX2FzWGZpcnN0WF9yZXBlYXRYYWRkRVhuZXh0WF90b1hhZGRWWF9pblZYX3RpbWVzWDVYX2FkZEVYbmV4dFhfdG9Yc2VsZWN0WGZpcnN0WFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKS5BcygiZmlyc3QiKS5SZXBlYXQoX18uQWRkRSgoc3RyaW5nKSAibmV4dCIpLlRvKF9fLkFkZFYoKSkuSW5WKCkpLlRpbWVzKDUpLkFkZEUoKHN0cmluZykgIm5leHQiKS5UbyhfXy5TZWxlY3Q8b2JqZWN0PigiZmlyc3QiKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoIm5leHQiKSwgKGcscCkgPT5nLlYoKS5MaW1pdDxvYmplY3Q+KDEpLkJvdGhFKCksIChnLHApID0+Zy5WKCkuTGltaXQ8b2JqZWN0PigxKS5JbkUoKSwgKGcscCkgPT5nLlYoKS5MaW1pdDxvYmplY3Q+KDEpLk91dEUoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX21hcmtvWF9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hZGRFWHNlbGVjdFhiWF9sYWJlbFhfdG9YYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLk91dEUoImNyZWF0ZWQiKS5BcygiYiIpLkluVigpLkFkZEUoX18uU2VsZWN0PG9iamVjdD4oImIiKS5MYWJlbCgpKS5UbygiYSIpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW5FKCJjcmVhdGVkIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuSW4oImNyZWF0ZWQiKS5IYXMoIm5hbWUiLCAibG9wIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0RSgiY3JlYXRlZCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX2FkZEVYVl9vdXRFX2xhYmVsX2dyb3VwQ291bnRfb3JkZXJYbG9jYWxYX2J5WHZhbHVlc19kZXNjWF9zZWxlY3RYa2V5c1hfdW5mb2xkX2xpbWl0WDFYWF9mcm9tWFZfaGFzWG5hbWVfdmFkYXNYWF90b1hWX2hhc1huYW1lX2xvcFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5BZGRFKF9fLlYoKS5PdXRFKCkuTGFiZWwoKS5Hcm91cENvdW50PG9iamVjdD4oKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoQ29sdW1uLlZhbHVlcywgT3JkZXIuRGVzYykuU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlVuZm9sZDxvYmplY3Q+KCkuTGltaXQ8b2JqZWN0PigxKSkuRnJvbShfXy5WKCkuSGFzKCJuYW1lIiwgInZhZGFzIikpLlRvKF9fLlYoKS5IYXMoIm5hbWUiLCAibG9wIikpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLkJvdGhFKCksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuSW5FKCJrbm93cyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLk91dEUoImNyZWF0ZWQiKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5PdXQoImNyZWF0ZWQiKS5IYXMoIm5hbWUiLCAibG9wIil9fSwgCisgICAgICAgICAgICAgICB7ImdfYWRkRVhrbm93c1hfZnJvbVhWWHZpZDFYWF90b1hWWHZpZDZYWF9wcm9wZXJ0eVh3ZWlnaHRfMF8xWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKF9fLlYocFsidmlkMSJdKSkuVG8oX18uVihwWyJ2aWQ2Il0pKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgcFsieHgxIl0pLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImtub3dzIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJwZXRlciIpfX0sIAorICAgICAgICAgICAgICAgeyJnX2FkZEVYa25vd3N2YXJYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZEUoKHN0cmluZykgcFsieHgxIl0pLkZyb20oX18uVihwWyJ2aWQxIl0pKS5UbyhfXy5WKHBbInZpZDYiXSkpLlByb3BlcnR5KCJ3ZWlnaHQiLCBwWyJ4eDIiXSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0RSgia25vd3MiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInBldGVyIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVlhhWF9hZGRFWGtub3dzWF90b1hiWF9wcm9wZXJ0eVh3ZWlnaHRfMF8xWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkFkZEUoKHN0cmluZykgImtub3dzIikuVG8oX18uVihwWyJ2aWQ2Il0pKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgcFsieHgxIl0pLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImtub3dzIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJwZXRlciIpfX0sIAorICAgICAgICAgICAgICAgeyJnX2FkZEVYa25vd3NYcHJvcGVydHlYd2VpZ2h0X251bGxYZnJvbVhWX2hhc1huYW1lX21hcmtvWFhfdG9YVl9oYXNYbmFtZV92YWRhc1hYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLCAoZyxwKSA9PmcuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgbnVsbCkuRnJvbShfXy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikpLlRvKF9fLlYoKS5IYXMoIm5hbWUiLCAidmFkYXMiKSksIChnLHApID0+Zy5FKCkuSGFzKCJrbm93cyIsICJ3ZWlnaHQiLCAob2JqZWN0KSBudWxsKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRFWGtub3dzdmFyWHByb3BlcnR5WHdlaWdodF9udWxsWGZyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLkFkZEUoKHN0cmluZykgcFsieHgxIl0pLlByb3BlcnR5KCJ3ZWlnaHQiLCBudWxsKS5Gcm9tKF9fLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKSkuVG8oX18uVigpLkhhcygibmFtZSIsICJ2YWRhcyIpKSwgKGcscCkgPT5nLkUoKS5IYXMoImtub3dzIiwgIndlaWdodCIsIChvYmplY3QpIG51bGwpfX0sIAorICAgICAgICAgICAgICAgeyJnX3VuaW9uWGFkZEVYa25vd3N2YXJYcHJvcGVydHlYd2VpZ2h0X251bGxYZnJvbVhWX2hhc1huYW1lX21hcmtvWFhfdG9YVl9oYXNYbmFtZV92YWRhc1hYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLlVuaW9uPG9iamVjdD4oX18uQWRkRSgoc3RyaW5nKSBwWyJ4eDEiXSkuUHJvcGVydHkoIndlaWdodCIsIDEpLkZyb20oX18uVigpLkhhcygibmFtZSIsICJtYXJrbyIpKS5UbyhfXy5WKCkuSGFzKCJuYW1lIiwgInZhZGFzIikpKSwgKGcscCkgPT5nLkUoKS5IYXMoImtub3dzIiwgIndlaWdodCIsIDEpfX0sIAorICAgICAgICAgICAgICAgeyJnX2FkZEVYZWRnZVhfZnJvbVhWX2hhc1huYW1lX21hcmtvWFhfdG9YVl9oYXNYbmFtZV92YWRhc1hYX3Byb3BlcnR5WHdlaWdodF8wXzVYX3dpdGhYa2V5X3ZhbHVlWF92YWx1ZXNYd2VpZ2h0X2tleVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5BZGRFKChzdHJpbmcpICJlZGdlIikuRnJvbShfXy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikpLlRvKF9fLlYoKS5IYXMoIm5hbWUiLCAidmFkYXMiKSkuUHJvcGVydHkoIndlaWdodCIsIDAuNSkuV2l0aCgia2V5IiwgInZhbHVlIikuVmFsdWVzPG9iamVjdD4oIndlaWdodCIsICJrZXkiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRFWGtub3dzWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfYWRkRVhrbm93c1hfZnJvbVhWX2hhc1huYW1lX21hcmtvWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oX18uVigpLkhhcygibmFtZSIsICJtYXJrbyIpKS5UbyhfXy5WKCkuSGFzKCJuYW1lIiwgInZhZGFzIikpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbShfXy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZYMVhfYWRkVlhhbmltYWxYX3Byb3BlcnR5WGFnZV9zZWxlY3RYYVhfYnlYYWdlWFhfcHJvcGVydHlYbmFtZV9wdXBweVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5BcygiYSIpLkFkZFYoKHN0cmluZykgImFuaW1hbCIpLlByb3BlcnR5KCJhZ2UiLCBfXy5TZWxlY3Q8b2JqZWN0PigiYSIpLkJ5KCJhZ2UiKSkuUHJvcGVydHkoIm5hbWUiLCAicHVwcHkiKSwgKGcscCkgPT5nLlYoKS5IYXMoImFuaW1hbCIsICJhZ2UiLCAyOSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlXzBYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuQWRkVigoc3RyaW5nKSAiYW5pbWFsIikuUHJvcGVydHkoImFnZSIsIDApLCAoZyxwKSA9PmcuVigpLkhhcygiYW5pbWFsIiwgImFnZSIsIDApfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfYWRkVlhhbmltYWx2YXJYX3Byb3BlcnR5WGFnZV8wdmFyWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFkZFYoKHN0cmluZykgcFsieHgxIl0pLlByb3BlcnR5KCJhZ2UiLCBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJhbmltYWwiLCAiYWdlIiwgMCl9fSwgCisgICAgICAgICAgICAgICB7ImdfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfc3RlcGhlblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInN0ZXBoZW4iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWWHBlcnNvbnZhclhfcHJvcGVydHlYbmFtZV9zdGVwaGVudmFyWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSBwWyJ4eDEiXSkuUHJvcGVydHkoIm5hbWUiLCBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9oYXNMYWJlbFhwZXJzb25YX3Byb3BlcnR5WG5hbWVfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgicGVyc29uIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAibmFtZSIsIChvYmplY3QpIG51bGwpLCAoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW5tIil9fSwgCisgICAgICAgICAgICAgICB7ImdldF9nX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAibmFtZSIsICJzdGVwaGVuIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAibmFtZSIsICJzdGVwaGVubSIsICJzaW5jZSIsIDIwMTApLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbm0iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW5tIikuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuSGFzKCJzaW5jZSIsIDIwMTApfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnR5WGZyaWVuZFdlaWdodF9vdXRFWGtub3dzWF93ZWlnaHRfc3VtX19hY2xfcHJpdmF0ZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IiwgX18uT3V0RSgia25vd3MiKS5WYWx1ZXM8b2JqZWN0Pigid2VpZ2h0IikuU3VtPG9iamVjdD4oKSwgImFjbCIsICJwcml2YXRlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiZnJpZW5kV2VpZ2h0IiwgMS41KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJmcmllbmRXZWlnaHQiKS5IYXMoImFjbCIsICJwcml2YXRlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiZnJpZW5kV2VpZ2h0IikuQ291bnQoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV9tYXRlb1hfcHJvcGVydHlYbmFtZV9nYXRlb1hfcHJvcGVydHlYbmFtZV9jYXRlb1hfcHJvcGVydHlYYWdlXzVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5BZGRWKChzdHJpbmcpICJhbmltYWwiKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXRlbyIpLlByb3BlcnR5KCJuYW1lIiwgImdhdGVvIikuUHJvcGVydHkoIm5hbWUiLCAiY2F0ZW8iKS5Qcm9wZXJ0eSgiYWdlIiwgNSksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoImFuaW1hbCIpLkhhcygibmFtZSIsICJtYXRlbyIpLkhhcygibmFtZSIsICJnYXRlbyIpLkhhcygibmFtZSIsICJjYXRlbyIpLkhhcygiYWdlIiwgNSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYYV9tYXJrb1hfYWRkVl9wcm9wZXJ0eVhuYW1lX3NlbGVjdFhhWFhfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuV2l0aFNpZGVFZmZlY3QoImEiLCAibWFya28iKS5BZGRWKCkuUHJvcGVydHkoIm5hbWUiLCBfXy5TZWxlY3Q8b2JqZWN0PigiYSIpKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJtYXJrbyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAibmFtZSIsICJzdGVwaGVuIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAibmFtZSIsICJzdGVwaGVubSIsICJzaW5jZSIsIDIwMTApLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJzdGVwaGVuIiksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgInN0ZXBoZW5tIiksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgInN0ZXBoZW5tIikuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuSGFzKCJzaW5jZSIsIDIwMTApfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfdmFsdWVzWG5hbWVYWF9wcm9wZXJ0eVhuYW1lX2FuX2FuaW1hbFhfcHJvcGVydHlYdmFsdWVzWG5hbWVYX2xhYmVsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFkZFYoKHN0cmluZykgImFuaW1hbCIpLlByb3BlcnR5KCJuYW1lIiwgX18uVmFsdWVzPG9iamVjdD4oIm5hbWUiKSkuUHJvcGVydHkoIm5hbWUiLCAiYW4gYW5pbWFsIikuUHJvcGVydHkoX18uVmFsdWVzPG9iamVjdD4oIm5hbWUiKSwgX18uTGFiZWwoKSksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoImFuaW1hbCIpLkhhcygibmFtZSIsICJtYXJrbyIpLkhhcygibmFtZSIsICJhbiBhbmltYWwiKS5IYXMoIm1hcmtvIiwgInBlcnNvbiIpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJhbmltYWwiKS5IYXMoIm5hbWUiLCAidmFkYXMiKS5IYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuSGFzKCJ2YWRhcyIsICJwZXJzb24iKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgiYW5pbWFsIikuSGFzKCJuYW1lIiwgImxvcCIpLkhhcygibmFtZSIsICJhbiBhbmltYWwiKS5IYXMoImxvcCIsICJzb2Z0d2FyZSIpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJhbmltYWwiKS5IYXMoIm5hbWUiLCAiam9zaCIpLkhhcygibmFtZSIsICJhbiBhbmltYWwiKS5IYXMoImpvc2giLCAicGVyc29uIiksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoImFuaW1hbCIpLkhhcygibmFtZSIsICJyaXBwbGUiKS5IYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuSGFzKCJyaXBwbGUiLCAic29mdHdhcmUiKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgiYW5pbWFsIikuSGFzKCJuYW1lIiwgInBldGVyIikuSGFzKCJuYW1lIiwgImFuIGFuaW1hbCIpLkhhcygicGV0ZXIiLCAicGVyc29uIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYYV90ZXN0WF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9wcm9wZXJ0eVh0ZW1wX3NlbGVjdFhhWFhfdmFsdWVNYXBYbmFtZV90ZW1wWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuV2l0aFNpZGVFZmZlY3QoImEiLCAidGVzdCIpLlYoKS5IYXNMYWJlbCgic29mdHdhcmUiKS5Qcm9wZXJ0eSgidGVtcCIsIF9fLlNlbGVjdDxvYmplY3Q+KCJhIikpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigibmFtZSIsICJ0ZW1wIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYYV9uYW1lWF9hZGRWX3Byb3BlcnR5WHNlbGVjdFhhWF9tYXJrb1hfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuV2l0aFNpZGVFZmZlY3QoImEiLCAibmFtZSIpLkFkZFYoKS5Qcm9wZXJ0eShfXy5TZWxlY3Q8b2JqZWN0PigiYSIpLCAibWFya28iKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJtYXJrbyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfYXNYYVhfaGFzWG5hbWVfbWFya29YX291dFhjcmVhdGVkWF9hc1hiWF9hZGRWWHNlbGVjdFhhWF9sYWJlbFhfcHJvcGVydHlYdGVzdF9zZWxlY3RYYlhfbGFiZWxYX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkFzKCJhIikuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJjcmVhdGVkIikuQXMoImIiKS5BZGRWKF9fLlNlbGVjdDxvYmplY3Q+KCJhIikuTGFiZWwoKSkuUHJvcGVydHkoInRlc3QiLCBfXy5TZWxlY3Q8b2JqZWN0PigiYiIpLkxhYmVsKCkpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLldpdGgoV2l0aE9wdGlvbnMuVG9rZW5zKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJ0ZXN0IiwgInNvZnR3YXJlIil9fSwgCisgICAgICAgICAgICAgICB7ImdfYWRkVlhWX2hhc1huYW1lX21hcmtvWF9wcm9wZXJ0aWVzWG5hbWVYX2tleVhfbGFiZWwiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLkFkZFYoX18uVigpLkhhcygibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLktleSgpKS5MYWJlbCgpfX0sIAogICAgICAgICAgICAgICAgeyJnX2FkZFZfcHJvcGVydHlYbGFiZWxfcGVyc29uWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLlByb3BlcnR5KFQuTGFiZWwsICJwZXJzb24iKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgicGVyc29uIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfYWRkVl9wcm9wZXJ0eVhsYWJlbF9wZXJzb252YXJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuUHJvcGVydHkoVC5MYWJlbCwgcFsieHgxIl0pLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKX19LCAKICAgICAgICAgICAgICAgIHsiZ19hZGRWX3Byb3BlcnR5WGlkXzFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuUHJvcGVydHkoVC5JZCwgMSksIChnLHApID0+Zy5WKCkuSGFzSWQoIjEiKX19LCAKQEAgLTkyNywxNCArOTI4LDE0IEBACiAgICAgICAgICAgICAgICB7ImdfYWRkVl9wcm9wZXJ0eVhzaW5nbGVfbWFwWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgImZvbyIgfSwgeyAiYWdlIiwgNDIgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJmb28iKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc1huYW1lX2Zvb1hfcHJvcGVydHlYbmFtZV9zZXRYYmFyWF9hZ2VfNDNYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAibmFtZSIsICJmb28iKS5Qcm9wZXJ0eSgiYWdlIiwgNDIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJmb28iKS5Qcm9wZXJ0eShuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCBDYXJkaW5hbGl0eVZhbHVlLlNldCgiYmFyIikgfSwgeyAiYWdlIiwgNDMgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJmb28iKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAiYmFyIiksIChnLHApID0+Zy5WKCkuSGFzKCJhZ2UiLCA0MyksIChnLHApID0+Zy5WKCkuSGFzKCJhZ2UiLCA0Mil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNYbmFtZV9mb29YX3Byb3BlcnR5WHNldF9uYW1lX2Jhcl9hZ2Vfc2luZ2xlWDQzWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJuYW1lIiwgImZvbyIpLlByb3BlcnR5KCJhZ2UiLCA0MiksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgImZvbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNldCwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgImJhciIgfSwgeyAiYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5TaW5nbGUoNDMpIH19KSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAiZm9vIiksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgImJhciIpLCAoZyxwKSA9PmcuVigpLkhhcygiYWdlIiwgNDMpLCAoZyxwKSA9PmcuVigpLkhhcygiYWdlIiwgNDIpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZfcHJvcGVydHlYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KG51bGwpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKS5WYWx1ZXM8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZfcHJvcGVydHlYZW1wdHlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eShuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKS5WYWx1ZXM8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZfcHJvcGVydHlYc2V0X251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJmb28iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TZXQsIG51bGwpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJmb28iKS5WYWx1ZXM8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZfcHJvcGVydHlYc2V0X2VtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigiZm9vIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2V0LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKS5WYWx1ZXM8b2JqZWN0PigpfX0sIAotICAgICAgICAgICAgICAgeyJnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2pvc2hYX3Byb3BlcnR5WGFnZV9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCBudWxsKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJhZ2UiLCAob2JqZWN0KSBudWxsKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9tYXJrb1hfcHJvcGVydHlYZnJpZW5kV2VpZ2h0X251bGxfYWNsX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJmcmllbmRXZWlnaHQiLCBudWxsLCAiYWNsIiwgbnVsbCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiZnJpZW5kV2VpZ2h0IiwgKG9iamVjdCkgbnVsbCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiZnJpZW5kV2VpZ2h0IikuSGFzKCJhY2wiLCAob2JqZWN0KSBudWxsKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJmcmllbmRXZWlnaHQiKS5Db3VudCgpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzWHBlcnNvbl9uYW1lX2FsaWNlWF9wcm9wZXJ0eVhzaW5nbGVfYWdlX3VuaW9uWGFnZV9jb25zdGFudFgxWFhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJhZ2UiLCA1MCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLlByb3BlcnR5KCJhZ2UiLCBfXy5VbmlvbjxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KCJhZ2UiKSwgX18uQ29uc3RhbnQ8b2JqZWN0PigxKSkuU3VtPG9iamVjdD4oKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAiYWdlIiwgNTApLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgImFnZSIsIDUxKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX2xpbWl0WDNYX2FkZFZYc29mdHdhcmVYX2FnZ3JlZ2F0ZVhhMVhfYnlYbGFiZWxYX2FnZ3JlZ2F0ZVhhMlhfYnlYbGFiZWxYX2NhcFhhMV9hMlhfc2VsZWN0WGFfYlhfYnlYdW5mb2xkWF9mb2xkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkxpbWl0PG9iamVjdD4oMykuQWRkVigic29mdHdhcmUiKS5BZ2dyZWdhdGUoImExIikuQnkoVC5MYWJlbCkuQWdncmVnYXRlKCJhMiIpLkJ5KFQuTGFiZWwpLkNhcDxvYmplY3Q+KCJhMSIsICJhMiIpLlNlbGVjdDxvYmplY3Q+KCJhMSIsICJhMiIpLkJ5KF9fLlVuZm9sZDxvYmplY3Q+KCkuRm9sZCgpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWX3Byb3BlcnR5WG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eShudWxsKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgicGVyc29uIikuVmFsdWVzPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWX3Byb3BlcnR5WGVtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkobmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgicGVyc29uIikuVmFsdWVzPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWX3Byb3BlcnR5WHNldF9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAiZm9vIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2V0LCBudWxsKSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgiZm9vIikuVmFsdWVzPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWX3Byb3BlcnR5WHNldF9lbXB0eVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgImZvbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNldCwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKS5IYXNMYWJlbCgicGVyc29uIikuVmFsdWVzPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9qb3NoWF9wcm9wZXJ0eVhhZ2VfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgbnVsbCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAiYWdlIiwgKG9iamVjdCkgbnVsbCl9fSwgCisgICAgICAgICAgICAgICB7ImdfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfbWFya29YX3Byb3BlcnR5WGZyaWVuZFdlaWdodF9udWxsX2FjbF9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IiwgbnVsbCwgImFjbCIsIG51bGwpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImZyaWVuZFdlaWdodCIsIChvYmplY3QpIG51bGwpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImZyaWVuZFdlaWdodCIpLkhhcygiYWNsIiwgKG9iamVjdCkgbnVsbCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiZnJpZW5kV2VpZ2h0IikuQ291bnQoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1hwZXJzb25fbmFtZV9hbGljZVhfcHJvcGVydHlYc2luZ2xlX2FnZV91bmlvblhhZ2VfY29uc3RhbnRYMVhYX3N1bVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAiYWdlIiwgNTApLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0eSgiYWdlIiwgX18uVW5pb248b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PigiYWdlIiksIF9fLkNvbnN0YW50PG9iamVjdD4oMSkpLlN1bTxvYmplY3Q+KCkpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgImFnZSIsIDUwKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJhZ2UiLCA1MSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9saW1pdFgzWF9hZGRWWHNvZnR3YXJlWF9hZ2dyZWdhdGVYYTFYX2J5WGxhYmVsWF9hZ2dyZWdhdGVYYTJYX2J5WGxhYmVsWF9jYXBYYTFfYTJYX3NlbGVjdFhhX2JYX2J5WHVuZm9sZFhfZm9sZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5MaW1pdDxvYmplY3Q+KDMpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuQWdncmVnYXRlKCJhMSIpLkJ5KFQuTGFiZWwpLkFnZ3JlZ2F0ZSgiYTIiKS5CeShULkxhYmVsKS5DYXA8b2JqZWN0PigiYTEiLCAiYTIiKS5TZWxlY3Q8b2JqZWN0PigiYTEiLCAiYTIiKS5CeShfXy5VbmZvbGQ8b2JqZWN0PigpLkZvbGQoKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfYWRkVl9wcm9wZXJ0eVhuYW1lX21hcmtvWF93aXRoWGtleV92YWx1ZVhfdmFsdWVzWG5hbWVfa2V5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuV2l0aCgia2V5IiwgInZhbHVlIikuVmFsdWVzPG9iamVjdD4oIm5hbWUiLCAia2V5Iil9fSwgCiAgICAgICAgICAgICAgICB7ImdfYWRkVl9wcm9wZXJ0eVhuYW1lX21hcmtvX3NpbmNlXzIwMTBYX3dpdGhYa2V5X3ZhbHVlWF9wcm9wZXJ0aWVzWG5hbWVYX3ZhbHVlc1hzaW5jZV9rZXlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCkuUHJvcGVydHkoIm5hbWUiLCAibWFya28iLCAic2luY2UiLCAyMDEwKS5XaXRoKCJrZXkiLCAidmFsdWUiKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiKS5WYWx1ZXM8b2JqZWN0Pigic2luY2UiLCAia2V5Iil9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WDFYX2FzQm9vbCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMSkuQXNCb29sKCl9fSwgCkBAIC05NjAsNyArOTYxLDcgQEAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMV8yWF9hc0RhdGUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyIH0pLkFzRGF0ZSgpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhudWxsWF9hc0RhdGUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG51bGwpLkFzRGF0ZSgpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhpbnZhbGlkc3RyWF9hc0RhdGUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KCJUaGlzIFN0cmluZyBpcyBub3QgYW4gSVNPIDg2MDEgRGF0ZSIpLkFzRGF0ZSgpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGJpcnRoZGF5WF9hc0RhdGVfYXNOdW1iZXJfYXNEYXRlIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLlByb3BlcnR5KCJiaXJ0aGRheSIsICIyMDIwLTA4LTAyIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9obiIpLlByb3BlcnR5KCJiaXJ0aGRheSIsICIxOTg4LTEyLTEwIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiY2hhcmxpZSIpLlByb3BlcnR5KCJiaXJ0aGRheSIsICIyMDAyLTAyLTAxIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAic3V6eSIpLlByb3BlcnR5KCJiaXJ0aGRheSIsICIxOTY1LTEwLTMxIiksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImJpcnRoZGF5IikuQXNEYXRlKCkuQXNOdW1iZXIoKS5Bc0RhdGUoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2FzTnVtYmVyX2FzRGF0ZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiMjAyMC0wOC0wMiIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvaG4iKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiMTk4OC0xMi0xMCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImNoYXJsaWUiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiMjAwMi0wMi0wMSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiMTk2NS0xMC0zMSIpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJiaXJ0aGRheSIpLkFzRGF0ZSgpLkFzTnVtYmVyKCkuQXNEYXRlKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WDViWF9hc051bWJlciIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oKHNieXRlKSA1KS5Bc051bWJlcigpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFg1c1hfYXNOdW1iZXIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KChzaG9ydCkgNSkuQXNOdW1iZXIoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYNWlYX2FzTnVtYmVyIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0Pig1KS5Bc051bWJlcigpfX0sIApAQCAtOTg3LDcgKzk4OCw3IEBACiAgICAgICAgICAgICAgICB7ImdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX21hdGhYYV9wbHVzX2JYX2J5WGFnZVhfYXNOdW1iZXJYR1R5cGVfSU5UWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkFzKCJhIikuT3V0KCJrbm93cyIpLkFzKCJiIikuTWF0aCgiYSArIGIiKS5CeSgiYWdlIikuQXNOdW1iZXIoR1R5cGUuSW50KX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdFh4XzEwMFhfVl9hZ2VfbWF0aFhfX3BsdXNfeFhfYXNOdW1iZXJYR1R5cGVfTE9OR1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTaWRlRWZmZWN0KCJ4IiwgMTAwKS5WKCkuVmFsdWVzPG9iamVjdD4oImFnZSIpLk1hdGgoIl8gKyB4IikuQXNOdW1iZXIoR1R5cGUuTG9uZyl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYYWdlWF9hc1N0cmluZ19hc051bWJlclhHVHlwZV9ET1VCTEVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImFnZSIpLkFzU3RyaW5nKCkuQXNOdW1iZXIoR1R5cGUuRG91YmxlKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNOdW1iZXJfYXNEYXRlX2FzTnVtYmVyIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLlByb3BlcnR5KCJiaXJ0aGRheSIsIDE1OTYzMjY0MDAwMDApLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvaG4iKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCA1OTc3MTUyMDAwMDApLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImNoYXJsaWUiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAxMDEyNTIxNjAwMDAwKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJzdXp5IikuUHJvcGVydHkoImJpcnRoZGF5IiwgLTEzMTU4NzIwMDAwMCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oImJpcnRoZGF5IikuQXNOdW1iZXIoKS5Bc0RhdGUoKS5Bc051bWJlcigpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWGJpcnRoZGF5WF9hc051bWJlcl9hc0RhdGVfYXNOdW1iZXIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuUHJvcGVydHkoImJpcnRoZGF5IiwgMTU5NjMyNjQwMDAwMCkuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9obiIpLlByb3BlcnR5KCJiaXJ0aGRheSIsIDU5NzcxNTIwMDAwMCkuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiY2hhcmxpZSIpLlByb3BlcnR5KCJiaXJ0aGRheSIsIDEwMTI1MjE2MDAwMDApLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAtMTMxNTg3MjAwMDAwKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigiYmlydGhkYXkiKS5Bc051bWJlcigpLkFzRGF0ZSgpLkFzTnVtYmVyKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WDFfMlhfYXNTdHJpbmciLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEsIDIpLkFzU3RyaW5nKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WDFfMlhfYXNTdHJpbmdYbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxLCAyKS5Bc1N0cmluZzxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYbGlzdF8xXzJYX2FzU3RyaW5nWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSkuQXNTdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCkBAIC0xMDYwLDEyICsxMDYxLDEyIEBACiAgICAgICAgICAgICAgICB7ImdfaGFzTGFiZWxYc29mdHdhcmVYX2FzWGFYX3ZhbHVlc1huYW1lWF9jb25jYXRYdW5zZXNYX2NvbmNhdFhzZWxlY3RYYVh2YWx1ZXNYbGFuZ1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNMYWJlbCgic29mdHdhcmUiKS5BcygiYSIpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuQ29uY2F0KCIgdXNlcyAiKS5Db25jYXQoX18uU2VsZWN0PG9iamVjdD4oImEiKS5WYWx1ZXM8b2JqZWN0PigibGFuZyIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX291dEVfYXNYYVhfVlgxWF92YWx1ZXNYbmFtZXNYX2NvbmNhdFhzZWxlY3RYYVhfbGFiZWxYX2NvbmNhdFhzZWxlY3RYYVhfaW5WX3ZhbHVlc1huYW1lWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCkuQXMoImEiKS5WKHBbInZpZDEiXSkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5Db25jYXQoX18uU2VsZWN0PG9iamVjdD4oImEiKS5MYWJlbCgpKS5Db25jYXQoX18uU2VsZWN0PG9iamVjdD4oImEiKS5JblYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX291dEVfYXNYYVhfVlgxWF92YWx1ZXNYbmFtZXNYX2NvbmNhdFhzZWxlY3RYYVhfbGFiZWxfc2VsZWN0WGFYX2luVl92YWx1ZXNYbmFtZVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0RSgpLkFzKCJhIikuVihwWyJ2aWQxIl0pLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuQ29uY2F0KF9fLlNlbGVjdDxvYmplY3Q+KCJhIikuTGFiZWwoKSwgX18uU2VsZWN0PG9iamVjdD4oImEiKS5JblYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19hZGRWWGNvbnN0YW50WHByZWZpeF9YX2NvbmNhdFhWWDFYX2xhYmVsWF9sYWJlbCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkVihfXy5Db25zdGFudDxvYmplY3Q+KCJwcmVmaXhfIikuQ29uY2F0KF9fLlYocFsidmlkMSJdKS5MYWJlbCgpKSkuTGFiZWwoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19hZGRWWGNvbnN0YW50WHByZWZpeF9YX2NvbmNhdFhWWDFYX2xhYmVsWF9sYWJlbCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuQWRkVihfXy5Db25zdGFudDxvYmplY3Q+KCJwcmVmaXhfIikuQ29uY2F0KF9fLlYocFsidmlkMSJdKS5MYWJlbCgpKSkuTGFiZWwoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYbnVsbFhfY29uam9pblgxWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuQ29uam9pbigoc3RyaW5nKSAiMSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG5hbWVYX2NvbmpvaW5YMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLkNvbmpvaW4oKHN0cmluZykgIjEiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9jb25qb2luWF9YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5vbmV4aXN0YW50IikuRm9sZCgpLkNvbmpvaW4oKHN0cmluZykgIjsiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX2NvbmpvaW5YX1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLk9yZGVyKCkuRm9sZCgpLkNvbmpvaW4oKHN0cmluZykgIl8iKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2ZvbGRfY29uam9pblhfWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5PcmRlcigpLkZvbGQoKS5Db25qb2luKChzdHJpbmcpICI7Iil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYYWdlWF9vcmRlcl9mb2xkX2NvbmpvaW5Yc2VtaWNvbG9uWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5PcmRlcigpLkZvbGQoKS5Db25qb2luKChzdHJpbmcpICI7Iil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9vdXRfcGF0aF9ieVh2YWx1ZXNYbmFtZVhfdG9VcHBlclhfY29uam9pblhNQVJLT1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5PdXQoKS5QYXRoKCkuQnkoX18uVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5Ub1VwcGVyKCkpLkNvbmpvaW4oKHN0cmluZykgIk1BUktPIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WG1hcmtvWF9jb25qb2luWF9YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgIm1hcmtvIiB9KS5Db25qb2luKChzdHJpbmcpICItIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWF9jb25qb2luWDFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCJsb2NhdGlvbiIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuT3JkZXIoU2NvcGUuTG9jYWwpLkNvbmpvaW4oKHN0cmluZykgIjEiKX19LCAKQEAgLTExMDUsOCArMTEwNiw4IEBACiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WGRhdGV0aW1lWHN0cjFYWF9kYXRlRGlmZlhkYXRldGltZVhzdHIyWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTAyVDAwOjAwWiIpLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wMlQwMDowMFoiKSkuRGF0ZURpZmYoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDgtMDlUMDA6MDBaIikpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhkYXRldGltZVhzdHIxWFhfZGF0ZURpZmZYY29uc3RhbnRYZGF0ZXRpbWVYc3RyMlhYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDgtMDhUMDA6MDBaIiksIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKS5EYXRlRGlmZihfXy5Db25zdGFudDxvYmplY3Q+KERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTAxVDAwOjAwWiIpKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WGRhdGV0aW1lWHN0cjFYWF9kYXRlRGlmZlhpbmplY3RYZGF0ZXRpbWVYc3RyMlhYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDgtMDhUMDA6MDBaIiksIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTA4VDAwOjAwWiIpKS5EYXRlRGlmZihfXy5JbmplY3QoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMTAtMTFUMDA6MDBaIikpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2RhdGVEaWZmWGRhdGV0aW1lWDE5NzAwMTAxVDAwMDBaWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuUHJvcGVydHkoImJpcnRoZGF5IiwgIjE1OTYzMjY0MDAwMDAiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb2huIikuUHJvcGVydHkoImJpcnRoZGF5IiwgIjU5NzcxNTIwMDAwMCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImNoYXJsaWUiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiMTAxMjUyMTYwMDAwMCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiLTEzMTU4NzIwMDAwMCIpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJiaXJ0aGRheSIpLkFzTnVtYmVyKCkuQXNEYXRlKCkuRGF0ZURpZmYoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjE5NzAtMDEtMDFUMDA6MDBaIikpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzWG5hbWVfYWxpY2VYX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2RhdGVEaWZmWGNvbnN0YW50WG51bGxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAxNTk2MzI2NDAwMDAwKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAiYWxpY2UiKS5WYWx1ZXM8b2JqZWN0PigiYmlydGhkYXkiKS5Bc0RhdGUoKS5EYXRlRGlmZihfXy5Db25zdGFudDxvYmplY3Q+KG51bGwpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2RhdGVEaWZmWGRhdGV0aW1lWDE5NzAwMTAxVDAwMDBaWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuUHJvcGVydHkoImJpcnRoZGF5IiwgIjE1OTYzMjY0MDAwMDAiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb2huIikuUHJvcGVydHkoImJpcnRoZGF5IiwgIjU5NzcxNTIwMDAwMCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImNoYXJsaWUiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiMTAxMjUyMTYwMDAwMCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAiLTEzMTU4NzIwMDAwMCIpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJiaXJ0aGRheSIpLkFzTnVtYmVyKCkuQXNEYXRlKCkuRGF0ZURpZmYoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjE5NzAtMDEtMDFUMDA6MDBaIikpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfaGFzWG5hbWVfYWxpY2VYX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2RhdGVEaWZmWGNvbnN0YW50WG51bGxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0eSgiYmlydGhkYXkiLCAxNTk2MzI2NDAwMDAwKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAiYWxpY2UiKS5WYWx1ZXM8b2JqZWN0PigiYmlydGhkYXkiKS5Bc0RhdGUoKS5EYXRlRGlmZihfXy5Db25zdGFudDxvYmplY3Q+KG51bGwpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYbnVsbFhfZGlmZmVyZW5jZVhpbmplY3RYMVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihudWxsKS5EaWZmZXJlbmNlKF9fLkluamVjdCgxKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfZGlmZmVyZW5jZVhWX2ZvbGRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5EaWZmZXJlbmNlKF9fLlYoKS5Gb2xkKCkpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfZm9sZF9kaWZmZXJlbmNlWGNvbnN0YW50WG51bGxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkZvbGQoKS5EaWZmZXJlbmNlKF9fLkNvbnN0YW50PG9iamVjdD4obnVsbCkpfX0sIApAQCAtMTE0Niw5ICsxMTQ3LDggQEAKICAgICAgICAgICAgICAgIHsiZ19FIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5FKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfRVgxMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkUocFsiZWlkMTEiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfRVgxMUFzU3RyaW5nWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuRShwWyJlaWQxMSJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19FWGUxMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkUocFsiZTExIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX0VYZTdfZTExWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuRShwWyJlNyJdLCBwWyJlMTEiXSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfRVhsaXN0WGU3X2UxMVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5FKHBbInh4MSJdKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19FWGVpZDdfZWlkMTFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5FKHBbImVpZDciXSwgcFsiZWlkMTEiXSl9fSwgCisgICAgICAgICAgICAgICB7ImdfRVhsaXN0WGVpZDdfZWlkMTFYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuRShwWyJ4eDEiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfRVhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuRShudWxsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19FWGxpc3RYbnVsbFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5FKHBbInh4MSJdKX19LCAKICAgICAgICAgICAgICAgIHsiZ19FWDExX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5FKHBbImVpZDExIl0sIG51bGwpfX0sIApAQCAtMTE1Nyw3ICsxMTU3LDcgQEAKICAgICAgICAgICAgICAgIHsiZ19WX0VYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5FKG51bGwpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfRVhsaXN0WG51bGxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkUocFsieHgxIl0pfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFgxWF9FWDExX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxKS5FKHBbImVpZDExIl0sIG51bGwpfX0sIAotICAgICAgICAgICAgICAgeyJnX2luamVjdFgxWF9jb2FsZXNjZVhFWF9oYXNMYWJlbFh0ZXN0c1hfYWRkRVh0ZXN0c1hfZnJvbV9WX2hhc1huYW1lWF9Yam9zaFhYX3RvWFZfaGFzWG5hbWVYX1h2YWRhc1hYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxKS5Db2FsZXNjZTxvYmplY3Q+KF9fLkUoKS5IYXNMYWJlbCgidGVzdHMiKSwgX18uQWRkRSgidGVzdHMiKS5Gcm9tKF9fLlYoKS5IYXMoIm5hbWUiLCAiam9zaCIpKS5UbyhfXy5WKCkuSGFzKCJuYW1lIiwgInZhZGFzIikpKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgidGVzdHMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMVhfY29hbGVzY2VYRVhfaGFzTGFiZWxYdGVzdHNYX2FkZEVYdGVzdHNYX2Zyb21fVl9oYXNYbmFtZVhfWGpvc2hYWF90b1hWX2hhc1huYW1lWF9YdmFkYXNYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMSkuQ29hbGVzY2U8b2JqZWN0PihfXy5FKCkuSGFzTGFiZWwoInRlc3RzIiksIF9fLkFkZEUoKHN0cmluZykgInRlc3RzIikuRnJvbShfXy5WKCkuSGFzKCJuYW1lIiwgImpvc2giKSkuVG8oX18uVigpLkhhcygibmFtZSIsICJ2YWRhcyIpKSksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoInRlc3RzIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVlgxWF9vdXRFX2luViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoKS5JblYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDJYX2luRV9vdXRWIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKHBbInZpZDIiXSkuSW5FKCkuT3V0VigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1Zfb3V0RV9oYXNYd2VpZ2h0XzFYX291dFYiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5PdXRFKCkuSGFzKCJ3ZWlnaHQiLCAxLjApLk91dFYoKX19LCAKQEAgLTExNjksNiArMTE2OSw3IEBACiAgICAgICAgICAgICAgICB7ImdfVlgxWF9vdXRFWGtub3dzX2NyZWF0ZWRYX2luViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImtub3dzIiwgImNyZWF0ZWQiKS5JblYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX291dEVYa25vd3NYX2JvdGhWIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKHBbInZpZDEiXSkuT3V0RSgia25vd3MiKS5Cb3RoVigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZYMVhfb3V0RVhrbm93c1hfYm90aFZfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoImtub3dzIikuQm90aFYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdG9FWG91dF9rbm93c3ZhclhfdmFsdWVzWHdlaWdodFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Ub0UoRGlyZWN0aW9uLk91dCwgKHN0cmluZykgcFsieHgxIl0pLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX3Byb3BlcnRpZXNfZWxlbWVudCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQyIl0pLlByb3BlcnRpZXM8b2JqZWN0PigpLkVsZW1lbnQoKS5MaW1pdDxvYmplY3Q+KDEpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfcHJvcGVydGllc19lbGVtZW50IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuRWxlbWVudCgpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfcHJvcGVydGllc1hhZ2VYX2VsZW1lbnQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpLkVsZW1lbnQoKX19LCAKQEAgLTEyMjgsOCArMTIyOSw4IEBACiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WF9fZmVhdHVyZV9fWF9sVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oIiAgZmVhdHVyZSAgIikuTFRyaW0oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYTGlzdFhhX2JYWF9sVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICJhIiwgImIiIH0pLkxUcmltKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WExpc3RYMV8yWFhfbFRyaW1YbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiB9KS5MVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9sVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLkxUcmltKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9sVHJpbVhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5PcmRlcigpLkZvbGQoKS5MVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9sVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLkxUcmltKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9sVHJpbVhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5PcmRlcigpLkZvbGQoKS5MVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX2xlbmd0aCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oImZlYXR1cmUiLCAidGVzdCIsIG51bGwpLkxlbmd0aCgpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfbGVuZ3RoWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oImZlYXR1cmUiLCAidGVzdCIsIG51bGwpLkxlbmd0aDxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYTGlzdFhhX2JYWF9sZW5ndGgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAiYSIsICJiIiB9KS5MZW5ndGgoKX19LCAKQEAgLTEzNDksMTAxICsxMzUwLDEwMSBAQAogICAgICAgICAgICAgICAgeyJnX2luamVjdFgzX3RocmVlWF9tZXJnZVhmaXZlX3RocmVlXzdYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMywgInRocmVlIiB9KS5NZXJnZShuZXcgTGlzdDxvYmplY3Q+IHsgImZpdmUiLCAidGhyZWUiLCA3IH0pfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfYXNYbmFtZVhfcHJvamVjdFhuYW1lWF9ieVhuYW1lWF9tZXJnZVhvdGhlcl9ibHVlcHJpbnRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuQXMoIm5hbWUiKS5Qcm9qZWN0PG9iamVjdD4oIm5hbWUiKS5CeSgibmFtZSIpLk1lcmdlKG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAib3RoZXIiLCAiYmx1ZXByaW50IiB9fSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNYbmFtZV9tYXJrb1hfZWxlbWVudE1hcF9tZXJnZVhWX2hhc1huYW1lX2xvcFhfZWxlbWVudE1hcFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5FbGVtZW50TWFwPG9iamVjdD4oKS5NZXJnZShfXy5WKCkuSGFzKCJuYW1lIiwgImxvcCIpLkVsZW1lbnRNYXA8b2JqZWN0PigpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9lbXB0eVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRFKCJzZWxmIiksIChnLHApID0+Zy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKSwgKGcscCkgPT5nLlYoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZEUoInNlbGYiKSwgKGcscCkgPT5nLlYoKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKSwgKGcscCkgPT5nLlYoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX21lcmdlRVhlbXB0eVhfb3B0aW9uWG9uQ3JlYXRlX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuQXMoInYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF9vcHRpb25Yb25DcmVhdGVfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLlYoKS5BcygidiIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInNlbGYiIH0sIHsgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH19KS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJ2IikpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVigpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhlbXB0eVhfZXhpc3RzIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQWRkRSgic2VsZiIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGVtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVYZW1wdHlYX3R3b19leGlzdCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLlYoKS5BcygidiIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF90d29fZXhpc3QiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5WKCkuQXMoInYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJzZWxmIiB9LCB7IERpcmVjdGlvbi5PdXQsIE1lcmdlLk91dFYgfSwgeyBEaXJlY3Rpb24uSW4sIE1lcmdlLkluViB9fSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFWG51bGx2YXJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbGltaXRYMVhfbWVyZ2VFWG51bGx2YXJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTGltaXQ8b2JqZWN0PigxKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VFWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGFfbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUVYc2VsZWN0WGFYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigiYSIpKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvMV9pbl92YWRhczFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfd2VpZ2h0XzA1WF9leGlzdHMiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk91dEUoImtub3dzIikuSGFzKCJ3ZWlnaHQiLCAwLjUpLkluVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9lbXB0eVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRFKChzdHJpbmcpICJzZWxmIiksIChnLHApID0+Zy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZEUoKHN0cmluZykgInNlbGYiKSwgKGcscCkgPT5nLlYoKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX21lcmdlRVhlbXB0eVhfb3B0aW9uWG9uQ3JlYXRlX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuQXMoInYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF9vcHRpb25Yb25DcmVhdGVfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLlYoKS5BcygidiIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInNlbGYiIH0sIHsgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH19KS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJ2IikpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVigpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRVhlbXB0eVhfZXhpc3RzIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGVtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVYZW1wdHlYX3R3b19leGlzdCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLlYoKS5BcygidiIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF90d29fZXhpc3QiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5WKCkuQXMoInYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJzZWxmIiB9LCB7IERpcmVjdGlvbi5PdXQsIE1lcmdlLk91dFYgfSwgeyBEaXJlY3Rpb24uSW4sIE1lcmdlLkluViB9fSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWG51bGx2YXJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfbGltaXRYMVhfbWVyZ2VFWG51bGx2YXJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTGltaXQ8b2JqZWN0PigxKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VFWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGFfbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUVYc2VsZWN0WGFYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigiYSIpKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvMV9pbl92YWRhczFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfd2VpZ2h0XzA1WF9leGlzdHMiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk91dEUoImtub3dzIikuSGFzKCJ3ZWlnaHQiLCAwLjUpLkluVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzX3dlaWdodF8wNVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvX1hfbWVyZ2VFWGxhYmVsX2tub3dzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MyJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9pbmplY3RYMVhfc2VsZWN0WG1YX21lcmdlRSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMSkuU2VsZWN0PG9iamVjdD4oIm0iKS5NZXJnZUUoKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3NfaW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpLkluVigpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpLk91dFYoKS5IYXMoIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX292ZXJyaWRlX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFWG91dF92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZF9lcnJvciIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MyJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIikuT3V0VigpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRVhvdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWRfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5BZGRFKCJrbm93cyIpLkZyb20oImIiKS5UbygiYSIpLlByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MyJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX2R5bmFtaWNfb3ZlcnJpZGVfc2tldGNoaWx5X2FsbG93ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuQWRkRSgia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJzaWRlRWZmZWN0MSIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIk4iKS5PdXRWKCkuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9oYXNYcGVyc29uX25hbWVfbWFya29fWF9tZXJnZUVYbGFiZWxfc2VsZl9vdXRfdmFkYXMxX2luX3ZhZGFzMVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgic2VsZiIpLkJvdGhWKCkuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9leGlzdHMiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIil9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrbzFfaW5fdmFkYXMxWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigiYyIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIk4iKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9hbGlhc2VkX2RpcmVjdGlvbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdFhtMV9sYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfbTJfbGFiZWxfc2VsZl9vdXRfdmFkYXNfaW5fdmFkYXNYX3VuaW9uWHNlbGVjdFhtMVhfc2VsZWN0WG0yWFhfbWVyZ2VFIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5VbmlvbjxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KCJtMSIpLCBfXy5TZWxlY3Q8b2JqZWN0PigibTIiKSkuTWVyZ2VFKCksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk91dCgia25vd3MiKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLk91dCgic2VsZiIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdFhjX2NyZWF0ZWRfWVhfd2l0aFNpZGVFZmZlY3RYbV9tYXRjaGVkWF9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zaWRlRWZmZWN0WHByb3BlcnRpZXNYd2VpZ2h0WF9kcm9wWF9zZWxlY3RYbVhYX2V4aXN0cyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKCJrbm93cyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5Gcm9tKCJhIikuVG8oImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TaWRlRWZmZWN0KF9fLlByb3BlcnRpZXM8b2JqZWN0Pigid2VpZ2h0IikuRHJvcCgpKS5TZWxlY3Q8b2JqZWN0PigibSIpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJ3ZWlnaHQiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfd2l0aF9vdXRWaW5WX29wdGlvbnNfbWFwIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PdXRWLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSkuT3B0aW9uKE1lcmdlLkluViwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJtYXJrbyIpLk91dCgia25vd3MiKS5IYXMoIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfaW5saW5lX3dpdGhfb3V0VmluVl9vcHRpb25zX21hcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBEaXJlY3Rpb24uT3V0LCBNZXJnZS5PdXRWIH0sIHsgRGlyZWN0aW9uLkluLCBNZXJnZS5JblYgfSwgeyBULkxhYmVsLCAia25vd3MiIH19KS5PcHRpb24oTWVyZ2UuT3V0ViwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5JblYsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFX3dpdGhfb3V0VmluVl9vcHRpb25zX3NlbGVjdCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLkFzKCJ4IikuVihwWyJ2aWQyIl0pLkFzKCJ5IikuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJ4IikpLk9wdGlvbihNZXJnZS5JblYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigieSIpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19zZWxlY3QiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5BcygieCIpLlYocFsidmlkMiJdKS5BcygieSIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH0sIHsgVC5MYWJlbCwgImtub3dzIiB9fSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigieCIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInkiKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlRV93aXRoX2VpZF9zcGVjaWZpZWRfYW5kX2luaGVyaXRhbmNlXzEiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCIyMDEiKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFX3dpdGhfZWlkX3NwZWNpZmllZF9hbmRfaW5oZXJpdGFuY2VfMiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoIjIwMSIpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJtYXJrbyIpLk91dCgia25vd3MiKS5IYXMoIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfb3V0Vl9vdmVycmlkZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0X3dpdGhTaWRlRWZmZWN0X21lcmdlRV9vdXRWX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0Pigic2lkZUVmZmVjdDEiKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFX2luVl9vdmVycmlkZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0X21lcmdlRV9pblZfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJzaWRlRWZmZWN0MSIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfbGFiZWxfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfbGFiZWxfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJzaWRlRWZmZWN0MSIpKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfaWRfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVfaWRfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJzaWRlRWZmZWN0MSIpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0cyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIk4iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIk4iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9rbm93c1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfaW5qZWN0WDFYX3NlbGVjdFhtWF9tZXJnZUUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEpLlNlbGVjdDxvYmplY3Q+KCJtIikuTWVyZ2VFKCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk91dCgia25vd3MiKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGxhYmVsX2tub3dzX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIk4iKS5JblYoKS5IYXMoIm5hbWUiLCAidmFkYXMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIk4iKS5PdXRWKCkuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZF9vdmVycmlkZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRVhvdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWRfZXJyb3IiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpLk91dFYoKS5IYXMoIm5hbWUiLCAidmFkYXMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX292ZXJyaWRlX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJiIikuVG8oImEiKS5Qcm9wZXJ0eSgiY3JlYXRlZCIsICJZIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFWG91dF92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZF9keW5hbWljX292ZXJyaWRlX3NrZXRjaGlseV9hbGxvd2VkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYiIpLlRvKCJhIikuUHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0Pigic2lkZUVmZmVjdDEiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MyJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIikuT3V0VigpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvX1hfbWVyZ2VFWGxhYmVsX3NlbGZfb3V0X3ZhZGFzMV9pbl92YWRhczFYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoInNlbGYiKS5Cb3RoVigpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfZXhpc3RzIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFzKCJhIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5BcygiYiIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya28xX2luX3ZhZGFzMVhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiWSIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfYWxpYXNlZF9kaXJlY3Rpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk91dCgia25vd3MiKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYbTFfbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzX20yX2xhYmVsX3NlbGZfb3V0X3ZhZGFzX2luX3ZhZGFzWF91bmlvblhzZWxlY3RYbTFYX3NlbGVjdFhtMlhYX21lcmdlRSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuVW5pb248b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PigibTEiKSwgX18uU2VsZWN0PG9iamVjdD4oIm0yIikpLk1lcmdlRSgpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKS5PdXQoInNlbGYiKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWHdlaWdodFhfZHJvcFhfc2VsZWN0WG1YWF9leGlzdHMiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuRnJvbSgiYSIpLlRvKCJiIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oIndlaWdodCIpLkRyb3AoKSkuU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJjcmVhdGVkIiwgIlkiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygid2VpZ2h0Iil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFX3dpdGhfb3V0VmluVl9vcHRpb25zX21hcCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5JblYsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MyJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19tYXAiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH0sIHsgVC5MYWJlbCwgImtub3dzIiB9fSkuT3B0aW9uKE1lcmdlLk91dFYsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuSW5WLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRV93aXRoX291dFZpblZfb3B0aW9uc19zZWxlY3QiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5BcygieCIpLlYocFsidmlkMiJdKS5BcygieSIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigieCIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInkiKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRV9pbmxpbmVfd2l0aF9vdXRWaW5WX29wdGlvbnNfc2VsZWN0IiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5WKHBbInZpZDEiXSkuQXMoIngiKS5WKHBbInZpZDIiXSkuQXMoInkiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IERpcmVjdGlvbi5PdXQsIE1lcmdlLk91dFYgfSwgeyBEaXJlY3Rpb24uSW4sIE1lcmdlLkluViB9LCB7IFQuTGFiZWwsICJrbm93cyIgfX0pLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIngiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJ5IikpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuVigpLkhhcygibmFtZSIsICJtYXJrbyIpLk91dCgia25vd3MiKS5IYXMoIm5hbWUiLCAidmFkYXMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVfd2l0aF9laWRfc3BlY2lmaWVkX2FuZF9pbmhlcml0YW5jZV8xIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgiMjAxIiksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRV93aXRoX2VpZF9zcGVjaWZpZWRfYW5kX2luaGVyaXRhbmNlXzIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCIyMDEiKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFX291dFZfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdF93aXRoU2lkZUVmZmVjdF9tZXJnZUVfb3V0Vl9keW5hbWljX292ZXJyaWRlX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInNpZGVFZmZlY3QxIikpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRV9pblZfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVfaW5WX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0Pigic2lkZUVmZmVjdDEiKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFX2xhYmVsX292ZXJyaWRlX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFX2xhYmVsX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0Pigic2lkZUVmZmVjdDEiKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VFX2lkX292ZXJyaWRlX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFX2lkX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0Pigic2lkZUVmZmVjdDEiKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX21lcmdlRV9jb21iaW5hdGlvbl9uZXdfdmVydGljZXMiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuQXMoIm91dFYiKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLkFzKCJpblYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm91dFYiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJpblYiKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlVl9tZXJnZUVfY29tYmluYXRpb25fZXhpc3RpbmdfdmVydGljZXMiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuQXMoIm91dFYiKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLkFzKCJpblYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgzIl0pLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm91dFYiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJpblYiKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5WKCkuSGFzKCJuYW1lIiwgIm1hcmtvIikuT3V0KCJrbm93cyIpLkhhcygibmFtZSIsICJ2YWRhcyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfYXNYdlhfbWVyZ2VFWHh4MVhfb3B0aW9uWE1lcmdlX29uTWF0Y2hfeHgyWF9vcHRpb25YTWVyZ2Vfb3V0Vl9zZWxlY3RYdlhYX29wdGlvblhNZXJnZV9pblZfc2VsZWN0WHZYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuVigpLkFzKCJ2IikuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJ2IikpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0eVh3ZWlnaHRfMFhYX2NvbnN0YW50WGVtcHR5WFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMSkuRnJvbSgiYSIpLlRvKCJiIiksIChnLHApID0+Zy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNpZGVFZmZlY3QoX18uUHJvcGVydHkoIndlaWdodCIsIDApKS5Db25zdGFudDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuRSgpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygid2VpZ2h0IiwgMCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0eVh3ZWlnaHRfMFhYX2NvbnN0YW50WGVtcHR5WFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMSkuRnJvbSgiYSIpLlRvKCJiIiksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0eSgid2VpZ2h0IiwgMCkpLkNvbnN0YW50PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJ3ZWlnaHQiLCAxKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoIndlaWdodCIsIDApLCAoZyxwKSA9PmcuVigpLkhhcygid2VpZ2h0Iil9fSwgCi0gICAgICAgICAgICAgICB7ImdfdW5pb25Yc2VsZWN0WG1hcFhfc2VsZWN0WG1hcFhfY29uc3RhbnRYY3JlYXRlZF9OWFhfZm9sZF9hc1htWF9tZXJnZUVYc2VsZWN0WG1YX2xpbWl0WGxvY2FsXzFYX3VuZm9sZFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YX3RhaWxYbG9jYWxYX3VuZm9sZFhfdG9fbWF0Y2giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlVuaW9uPG9iamVjdD4oX18uU2VsZWN0PG9iamVjdD4oIm1hcCIpLCBfXy5TZWxlY3Q8b2JqZWN0PigibWFwIiksIF9fLkNvbnN0YW50PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJjcmVhdGVkIiwgIk4iIH19KSkuRm9sZCgpLkFzKCJtIikuTWVyZ2VFKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLkxpbWl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuUmFuZ2U8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSwgMikuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCkuVW5mb2xkPG9iamVjdD4oKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzKCJjcmVhdGVkIiwgIk4iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0RSgia25vd3MiKS5IYXMoImNyZWF0ZWQiLCAiTiIpLkluVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19jcmVhdGUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlVuaW9uPG9iamVjdD4oX18uU2VsZWN0PG9iamVjdD4oIm1hcCIpLCBfXy5TZWxlY3Q8b2JqZWN0PigibWFwIiksIF9fLkNvbnN0YW50PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJjcmVhdGVkIiwgIk4iIH19KSkuRm9sZCgpLkFzKCJtIikuTWVyZ2VFKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLkxpbWl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuUmFuZ2U8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSwgMikuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCkuVW5mb2xkPG9iamVjdD4oKSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTm90KCJjcmVhdGVkIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk91dEUoImtub3dzIikuSGFzTm90KCJjcmVhdGVkIikuSW5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKS5PdXRFKCJzZWxmIikuSGFzTm90KCJ3ZWlnaHQiKS5JblYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfd2VpZ2h0X251bGxYX2FsbG93ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJ3ZWlnaHQiLCAob2JqZWN0KSBudWxsKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25NYXRjaF93ZWlnaHRfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCksIChnLHApID0+Zy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJ3ZWlnaHQiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYZW1wdHlYX29wdGlvblhvbk1hdGNoX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMjkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VWWGVtcHR5WF9vcHRpb25Yb25NYXRjaF9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuVigpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAyOSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG51bGxYX29wdGlvblhvbkNyZWF0ZV9sYWJlbF9udWxsX25hbWVfbWFya29YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VWWG51bGxYX29wdGlvblhvbkNyZWF0ZV9sYWJlbF9udWxsX25hbWVfbWFya29YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX29wdGlvblhvbkNyZWF0ZV9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuVigpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG51bGxYX29wdGlvblhvbkNyZWF0ZV9lbXB0eVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2VtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuVigpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX21lcmdlRV9jb21iaW5hdGlvbl9leGlzdGluZ192ZXJ0aWNlcyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5Bcygib3V0ViIpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSkuQXMoImluViIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDMiXSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0Pigib3V0ViIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImluViIpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLlYoKS5IYXMoIm5hbWUiLCAibWFya28iKS5PdXQoImtub3dzIikuSGFzKCJuYW1lIiwgInZhZGFzIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9hc1h2WF9tZXJnZUVYeHgxWF9vcHRpb25YTWVyZ2Vfb25NYXRjaF94eDJYX29wdGlvblhNZXJnZV9vdXRWX3NlbGVjdFh2WFhfb3B0aW9uWE1lcmdlX2luVl9zZWxlY3RYdlhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuQXMoInYiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSkuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigidiIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oInYiKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25NYXRjaF9zaWRlRWZmZWN0WHByb3BlcnR5WHdlaWdodF8wWFhfY29uc3RhbnRYZW1wdHlYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5Gcm9tKCJhIikuVG8oImIiKSwgKGcscCkgPT5nLlYoKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0eSgid2VpZ2h0IiwgMCkpLkNvbnN0YW50PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5FKCksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoImtub3dzIikuSGFzKCJ3ZWlnaHQiLCAwKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25NYXRjaF9zaWRlRWZmZWN0WHByb3BlcnR5WHdlaWdodF8wWFhfY29uc3RhbnRYZW1wdHlYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5Gcm9tKCJhIikuVG8oImIiKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TaWRlRWZmZWN0KF9fLlByb3BlcnR5KCJ3ZWlnaHQiLCAwKSkuQ29uc3RhbnQ8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoIndlaWdodCIsIDEpLCAoZyxwKSA9PmcuRSgpLkhhc0xhYmVsKCJrbm93cyIpLkhhcygid2VpZ2h0IiwgMCksIChnLHApID0+Zy5WKCkuSGFzKCJ3ZWlnaHQiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19tYXRjaCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVW5pb248b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PigibWFwIiksIF9fLlNlbGVjdDxvYmplY3Q+KCJtYXAiKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImNyZWF0ZWQiLCAiTiIgfX0pKS5Gb2xkKCkuQXMoIm0iKS5NZXJnZUUoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXMoImNyZWF0ZWQiLCAiTiIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5PdXRFKCJrbm93cyIpLkhhcygiY3JlYXRlZCIsICJOIikuSW5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3VuaW9uWHNlbGVjdFhtYXBYX3NlbGVjdFhtYXBYX2NvbnN0YW50WGNyZWF0ZWRfTlhYX2ZvbGRfYXNYbVhfbWVyZ2VFWHNlbGVjdFhtWF9saW1pdFhsb2NhbF8xWF91bmZvbGRYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYbVhfcmFuZ2VYbG9jYWxfMV8yWF91bmZvbGRYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWF90YWlsWGxvY2FsWF91bmZvbGRYX3RvX2NyZWF0ZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVW5pb248b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PigibWFwIiksIF9fLlNlbGVjdDxvYmplY3Q+KCJtYXAiKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImNyZWF0ZWQiLCAiTiIgfX0pKS5Gb2xkKCkuQXMoIm0iKS5NZXJnZUUoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKSwgKGcscCkgPT5nLkUoKS5IYXNOb3QoImNyZWF0ZWQiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuT3V0RSgia25vd3MiKS5IYXNOb3QoImNyZWF0ZWQiKS5JblYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLk91dEUoInNlbGYiKS5IYXNOb3QoIndlaWdodCIpLkluVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25NYXRjaF93ZWlnaHRfbnVsbFhfYWxsb3dlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoIndlaWdodCIsIChvYmplY3QpIG51bGwpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3dlaWdodF9udWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuQXMoImIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKSwgKGcscCkgPT5nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgia25vd3MiKS5IYXMoIndlaWdodCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhlbXB0eVhfb3B0aW9uWG9uTWF0Y2hfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAyOSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZVZYZW1wdHlYX29wdGlvblhvbk1hdGNoX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDI5KX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLlYoKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2VtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX21lcmdlVlhudWxsWF9vcHRpb25Yb25DcmVhdGVfZW1wdHlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYZW1wdHlYX25vX2V4aXN0aW5nIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMFhfbWVyZ2VWWGVtcHR5WF9ub19leGlzdGluZyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VWWGVtcHR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMjkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfbWVyZ2VWWGVtcHR5WF90d29fZXhpc3QiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMjkpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKS5IYXMoImFnZSIsIDI3KX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLlYoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbnVsbHZhclgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9tZXJnZVZYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLlYoKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5IYXMoImFnZSIsIDE5KX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV8xOVhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMTkpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfd2l0aFNpZGVFZmZlY3RYbV9sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWFhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLkhhcygiYWdlIiwgMTkpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhYX29wdGlvbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigiYyIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDE5KX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3Byb3BlcnR5WG5hbWVfdmFkYXNfYWNsX3B1YmxpY1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiLCAiYWNsIiwgInB1YmxpYyIpLCAoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLkhhc1ZhbHVlKCJ2YWRhcyIpLkhhcygiYWNsIiwgInB1YmxpYyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX2luamVjdFgwWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpfX0sIAotICAgICAgICAgICAgICAgeyJnX2luamVjdFgwWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikuSGFzKCJhZ2UiLCAxOSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzE5WF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAxOSl9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF93aXRoU2lkZUVmZmVjdFhtX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9pbmplY3RYMFhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWFhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLkhhcygiYWdlIiwgMTkpfX0sIAotICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9pbmplY3RYMFhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAxOSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfcHJvcGVydHlYbmFtZV92YWRhc19hY2xfcHVibGljWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIsICJhY2wiLCAicHVibGljIiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuSGFzVmFsdWUoInZhZGFzIikuSGFzKCJhY2wiLCAicHVibGljIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfaW5qZWN0WGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX21lcmdlVlhpZGVudGl0eVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCAicGVyc29uIiB9LCB7ICJuYW1lIiwgIm1hcmtvIiB9fSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJwZXJzb24iIH0sIHsgIm5hbWUiLCAic3RlcGhlbiIgfX0pLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uSWRlbnRpdHkoKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLCAoZyxwKSA9PmcuVigpfX0sIAotICAgICAgICAgICAgICAgeyJnX2luamVjdFhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9tZXJnZVYiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCAicGVyc29uIiB9LCB7ICJuYW1lIiwgIm1hcmtvIiB9fSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJwZXJzb24iIH0sIHsgIm5hbWUiLCAic3RlcGhlbiIgfX0pLk1lcmdlVigpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSwgKGcscCkgPT5nLlYoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfcHJvcGVydHlYbGlzdF9uYW1lX3N0ZXZlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgIm5hbWUiLCAic3RlcGhlbiIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAibmFtZSIsICJzdGV2ZSIpLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLkhhc1ZhbHVlKCJzdGV2ZSIpLCAoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigibmFtZSIpLkhhc1ZhbHVlKCJzdGVwaGVuIiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VYbGFiZWxfcGVyc29uX25hbWVfdmFkYXNYX29wdGlvblhvbk1hdGNoX2FnZV8zNVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCkuSGFzKCJhZ2UiLCAzNSksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9tYXBYbWVyZ2VYbGFiZWxfcGVyc29uX25hbWVfam9zaFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAic3RlcGhlbiIpLlByb3BlcnR5KCJhZ2UiLCAyNyksIChnLHApID0+Zy5WKCkuTWFwPG9iamVjdD4oX18uTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJqb3NoIiksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydGllc1hhZ2VYX2Ryb3BYX3NlbGVjdFhtWFhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigiYyIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNpZGVFZmZlY3QoX18uUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKS5Ecm9wKCkpLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDE5KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydGllc1hhZ2VYX2Ryb3BYX3NlbGVjdFhtWFhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNpZGVFZmZlY3QoX18uUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKS5Ecm9wKCkpLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDE5KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZfb25DcmVhdGVfaW5oZXJpdGFuY2VfZXhpc3RpbmciLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1pa2UiKS5Qcm9wZXJ0eShULklkLCAiMSIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoIjEiKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1pa2UiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYZW1wdHlYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAyOSl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9tZXJnZVZYZW1wdHlYX3R3b19leGlzdCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLlYoKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAyOSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLkhhcygiYWdlIiwgMjcpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLCAoZyxwKSA9PmcuVigpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhudWxsdmFyWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX21lcmdlVlhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuVigpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX29wdGlvblhvbkNyZWF0ZV9sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuX2FnZV8xOVhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLkhhcygiYWdlIiwgMTkpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzE5WF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAxOSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF93aXRoU2lkZUVmZmVjdFhtX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikuSGFzKCJhZ2UiLCAxOSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfb3B0aW9uIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMTkpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfcHJvcGVydHlYbmFtZV92YWRhc19hY2xfcHVibGljWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIsICJhY2wiLCAicHVibGljIiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuSGFzVmFsdWUoInZhZGFzIikuSGFzKCJhY2wiLCAicHVibGljIil9fSwgCisgICAgICAgICAgICAgICB7ImdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIil9fSwgCisgICAgICAgICAgICAgICB7ImdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5IYXMoImFnZSIsIDE5KX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDE5KX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX3dpdGhTaWRlRWZmZWN0WG1fbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX2luamVjdFgwWF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oImMiKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikuSGFzKCJhZ2UiLCAxOSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX2luamVjdFgwWF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhYX29wdGlvbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigiYyIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDE5KX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9wcm9wZXJ0eVhuYW1lX3ZhZGFzX2FjbF9wdWJsaWNYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiwgImFjbCIsICJwdWJsaWMiKSwgKGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiKS5IYXNWYWx1ZSgidmFkYXMiKS5IYXMoImFjbCIsICJwdWJsaWMiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYbGFiZWxfcGVyc29uX25hbWVfbWFya29fbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfbWVyZ2VWWGlkZW50aXR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJwZXJzb24iIH0sIHsgIm5hbWUiLCAibWFya28iIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInBlcnNvbiIgfSwgeyAibmFtZSIsICJzdGVwaGVuIiB9fSkuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5JZGVudGl0eSgpKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiksIChnLHApID0+Zy5WKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfaW5qZWN0WGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX21lcmdlViIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJwZXJzb24iIH0sIHsgIm5hbWUiLCAibWFya28iIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInBlcnNvbiIgfSwgeyAibmFtZSIsICJzdGVwaGVuIiB9fSkuTWVyZ2VWKCksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLCAoZyxwKSA9PmcuVigpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhsaXN0X25hbWVfc3RldmVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAibmFtZSIsICJzdGVwaGVuIiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJuYW1lIiwgInN0ZXZlIiksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuSGFzVmFsdWUoInN0ZXZlIiksIChnLHApID0+Zy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCJuYW1lIikuSGFzVmFsdWUoInN0ZXBoZW4iKSwgKGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVhsYWJlbF9wZXJzb25fbmFtZV92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzM1WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKS5IYXMoImFnZSIsIDM1KSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX21hcFhtZXJnZVhsYWJlbF9wZXJzb25fbmFtZV9qb3NoWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI5KS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJzdGVwaGVuIikuUHJvcGVydHkoImFnZSIsIDI3KSwgKGcscCkgPT5nLlYoKS5NYXA8b2JqZWN0PihfXy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImpvc2giKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF93aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJjIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpLkRyb3AoKSkuU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMTkpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb24iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpLkRyb3AoKSkuU2VsZWN0PG9iamVjdD4oIm0iKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMTkpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVl9vbkNyZWF0ZV9pbmhlcml0YW5jZV9leGlzdGluZyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWlrZSIpLlByb3BlcnR5KFQuSWQsICIxIiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgyIl0pLCAoZyxwKSA9PmcuVigpLCAoZyxwKSA9PmcuVigiMSIpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWlrZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX21lcmdlVl9vbkNyZWF0ZV9pbmhlcml0YW5jZV9uZXdfMSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MiJdKSwgKGcscCkgPT5nLlYoKSwgKGcscCkgPT5nLlYoIjEiKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1pa2UiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19tZXJnZVZfb25DcmVhdGVfaW5oZXJpdGFuY2VfbmV3XzIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSksIChnLHApID0+Zy5WKCksIChnLHApID0+Zy5WKCIxIikuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX2xhYmVsX292ZXJyaWRlX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDIiXSl9fSwgCkBAIC0xNDU1LDIyICsxNDU2LDIyIEBACiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX2hpZGRlbl9pZF9rZXlfb25DcmVhdGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25DcmVhdGVfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF92YWx1ZV9vbkNyZWF0ZV9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZfaGlkZGVuX2lkX2tleV9vbk1hdGNoX21hdGNoZWRfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigidmVydGV4IiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlVl9oaWRkZW5fbGFiZWxfa2V5X21hdGNoZWRfb25NYXRjaF9tYXRjaGVkX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInZlcnRleCIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHBbInh4MSJdKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX2xpc3RYMzNYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMjkpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMyKSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAibWFya28iIH19KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLkxpc3QoMzMpIH19KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAzMyksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV9zZXRYMzNYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMjkpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMyKSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAibWFya28iIH19KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLlNldCgzMykgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDMzKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX3NldFgzMVhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJtYXJrbyIgfX0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuU2V0KDMxKSB9fSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMzEpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2luZ2xlWDMzWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgIm1hcmtvIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5TaW5nbGUoMzMpIH19KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAzMyksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV8zM19zaW5nbGVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJtYXJrbyIgfX0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImFnZSIsIDMzIH19LCBDYXJkaW5hbGl0eS5TaW5nbGUpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDMzKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfbmFtZV9hbGxlbl9hZ2Vfc2V0WDMxWF9zaW5nbGVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJtYXJrbyIgfX0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAiYWxsZW4iIH0sIHsgImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuU2V0KDMxKSB9fSwgQ2FyZGluYWxpdHkuU2luZ2xlKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLkhhcygiYWdlIiwgMzEpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5IYXMoImFnZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9uYW1lX2FsbGVuX2FnZV9zaW5nbGVYMzFYX3NpbmdsZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgIm1hcmtvIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJhbGxlbiIgfSwgeyAiYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5TaW5nbGUoMzEpIH19LCBDYXJkaW5hbGl0eS5TaW5nbGUpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuSGFzKCJhZ2UiLCAzMyksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLkhhcygiYWdlIiwgMzEpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5IYXMoImFnZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVl9oaWRkZW5faWRfa2V5X29uTWF0Y2hfbWF0Y2hlZF9wcm9oaWJpdGVkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJ2ZXJ0ZXgiKSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSl9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfbWF0Y2hlZF9vbk1hdGNoX21hdGNoZWRfcHJvaGliaXRlZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAidmVydGV4IiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgcFsieHgxIl0pfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfbGlzdFgzM1hYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJtYXJrbyIgfX0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuTGlzdCgzMykgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDMzKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX3NldFgzM1hYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzIpLCAoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJtYXJrbyIgfX0pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuU2V0KDMzKSB9fSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMzMpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2V0WDMxWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgIm1hcmtvIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5TZXQoMzEpIH19KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiLCAzMSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV9zaW5nbGVYMzNYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMjkpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMyKSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAibWFya28iIH19KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLlNpbmdsZSgzMykgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIsIDMzKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJhZ2UiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzMzX3NpbmdsZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgIm1hcmtvIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYWdlIiwgMzMgfX0sIENhcmRpbmFsaXR5LlNpbmdsZSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiYWdlIiwgMzMpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5IYXMoImFnZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9uYW1lX2FsbGVuX2FnZV9zZXRYMzFYX3NpbmdsZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMiksIChnLHApID0+Zy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgIm1hcmtvIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJhbGxlbiIgfSwgeyAiYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5TZXQoMzEpIH19LCBDYXJkaW5hbGl0eS5TaW5nbGUpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuSGFzKCJhZ2UiLCAzMSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCisgICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX25hbWVfYWxsZW5fYWdlX3NpbmdsZVgzMVhfc2luZ2xlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAiYWdlIiwgMjkpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsICJhZ2UiLCAzMSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgImFnZSIsIDMyKSwgKGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAibWFya28iIH19KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJuYW1lIiwgImFsbGVuIiB9LCB7ICJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLlNpbmdsZSgzMSkgfX0sIENhcmRpbmFsaXR5LlNpbmdsZSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5IYXMoImFnZSIsIDMzKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuSGFzKCJhZ2UiLCAzMSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG5hbWVfYWxpY2VYX29wdGlvblhvbkNyZWF0ZV9hZ2Vfc2luZ2xlWDgxWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAiYWxpY2UiIH0sIHsgVC5MYWJlbCwgInBlcnNvbiIgfX0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLlNpbmdsZSg4MSkgfX0pLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5IYXMoImFnZSIsIDgxKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuSGFzKCJhZ2UiKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV9zZXRYODFYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAibmFtZSIsICJhbGljZSIgfSwgeyBULkxhYmVsLCAicGVyc29uIiB9fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuU2V0KDgxKSB9fSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLkhhcygiYWdlIiwgODEpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5IYXMoImFnZSIpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5Qcm9wZXJ0aWVzPG9iamVjdD4oImFnZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX21lcmdlVlhuYW1lX2FsaWNlWF9vcHRpb25Yb25DcmVhdGVfYWdlXzgxX3NldFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAiYWxpY2UiIH0sIHsgVC5MYWJlbCwgInBlcnNvbiIgfX0pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhZ2UiLCA4MSB9fSwgQ2FyZGluYWxpdHkuU2V0KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuSGFzKCJhZ2UiLCA4MSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWWG5hbWVfYWxpY2VYX29wdGlvblhvbkNyZWF0ZV9hZ2VfODFfbGFiZWxfcGVyc29uX3NldFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgIm5hbWUiLCAiYWxpY2UiIH19KS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYWdlIiwgODEgfSwgeyBULkxhYmVsLCAicGVyc29uIiB9fSwgQ2FyZGluYWxpdHkuU2V0KSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuSGFzKCJhZ2UiLCA4MSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLkhhcygiYWdlIiksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLlByb3BlcnRpZXM8b2JqZWN0PigiYWdlIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25NYXRjaF9tYXRjaGVkX3Byb2hpYml0ZWQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBwWyJ4eDEiXSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfaW5qZWN0WGxpc3QxX2xpc3QyX2xpc3QzWF9mb2xkX2FzWG1YX21lcmdlVlhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19tYXRjaCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJwZXJzb24iIH0sIHsgIm5hbWUiLCAibWFya28iIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInBlcnNvbiIgfSwgeyAibmFtZSIsICJtYXJrbyIgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiY3JlYXRlZCIsICJOIiB9fSkuRm9sZCgpLkFzKCJtIikuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLkxpbWl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuUmFuZ2U8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSwgMikuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCkuVW5mb2xkPG9iamVjdD4oKSksIChnLHApID0+Zy5WKCkuSGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLkhhcygiY3JlYXRlZCIsICJOIiksIChnLHApID0+Zy5WKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfaW5qZWN0WGxpc3QxX2xpc3QyX2xpc3QzWF9mb2xkX2FzWG1YX21lcmdlVlhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19jcmVhdGUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KSwgKGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCAicGVyc29uIiB9LCB7ICJuYW1lIiwgInN0ZXBoZW4iIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInBlcnNvbiIgfSwgeyAibmFtZSIsICJzdGVwaGVuIiB9fSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJjcmVhdGVkIiwgIk4iIH19KS5Gb2xkKCkuQXMoIm0iKS5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5IYXNOb3QoImNyZWF0ZWQiKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYbGlzdDFfbGlzdDJfbGlzdDNYX2ZvbGRfYXNYbVhfbWVyZ2VWWHNlbGVjdFhtWF9saW1pdFhsb2NhbF8xWF91bmZvbGRYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYbVhfcmFuZ2VYbG9jYWxfMV8yWF91bmZvbGRYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWF90YWlsWGxvY2FsWF91bmZvbGRYX3RvX21hdGNoIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSksIChnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInBlcnNvbiIgfSwgeyAibmFtZSIsICJtYXJrbyIgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCAicGVyc29uIiB9LCB7ICJuYW1lIiwgIm1hcmtvIiB9fSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJjcmVhdGVkIiwgIk4iIH19KS5Gb2xkKCkuQXMoIm0iKS5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KCJtIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpKSwgKGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuSGFzKCJjcmVhdGVkIiwgIk4iKSwgKGcscCkgPT5nLlYoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pbmplY3RYbGlzdDFfbGlzdDJfbGlzdDNYX2ZvbGRfYXNYbVhfbWVyZ2VWWHNlbGVjdFhtWF9saW1pdFhsb2NhbF8xWF91bmZvbGRYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYbVhfcmFuZ2VYbG9jYWxfMV8yWF91bmZvbGRYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWF90YWlsWGxvY2FsWF91bmZvbGRYX3RvX2NyZWF0ZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLCAoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsICJwZXJzb24iIH0sIHsgIm5hbWUiLCAic3RlcGhlbiIgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCAicGVyc29uIiB9LCB7ICJuYW1lIiwgInN0ZXBoZW4iIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImNyZWF0ZWQiLCAiTiIgfX0pLkZvbGQoKS5BcygibSIpLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKS5MaW1pdDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PigibSIpLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDEsIDIpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oIm0iKS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwpLlVuZm9sZDxvYmplY3Q+KCkpLCAoZyxwKSA9PmcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLkhhc05vdCgiY3JlYXRlZCIpLCAoZyxwKSA9PmcuVigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfYWdlX21pbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5NaW48b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfZm9vX21pbiIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJmb28iKS5NaW48b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfbmFtZV9taW4iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLk1pbjxvYmplY3Q+KCl9fSwgCkBAIC0xNTY2LDEzICsxNTY3LDE3IEBACiAgICAgICAgICAgICAgICB7ImdfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWGFnZV9uYW1lWF92YWx1ZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhcygiYWdlIikuUHJvcGVydGllczxvYmplY3Q+KCJhZ2UiLCAibmFtZSIpLlZhbHVlPG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3Byb3BlcnRpZXNYbmFtZV9hZ2VfbnVsbFhfdmFsdWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIm5hbWUiLCAiYWdlIiwgbnVsbCkuVmFsdWU8b2JqZWN0PigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG5hbWVfYWdlX251bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiLCAiYWdlIiwgbnVsbCl9fSwgCisgICAgICAgICAgICAgICB7ImdfRV9wcm9wZXJ0aWVzWHdlaWdodFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oIndlaWdodCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX0VfcHJvcGVydGllcyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuUHJvcGVydHkoInNpbmNlIiwgMjAyMCksIChnLHApID0+Zy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCl9fSwgCisgICAgICAgICAgICAgICB7ImdfRV9wcm9wZXJ0aWVzWHNpbmNlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuUHJvcGVydHkoInNpbmNlIiwgMjAyMCksIChnLHApID0+Zy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCJzaW5jZSIpfX0sIAorICAgICAgICAgICAgICAgeyJnX0VfcHJvcGVydGllc19tdWx0aV9lZGdlcyIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImJvYiIpLkFzKCJiIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuUHJvcGVydHkoInNpbmNlIiwgMjAyMCkuQWRkRSgoc3RyaW5nKSAibGlrZXMiKS5Gcm9tKCJhIikuVG8oImIiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoInRhZyIsICJmcmllbmQiKSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfclRyaW0iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KCJmZWF0dXJlICAiLCAib25lIHRlc3QgIiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCIpLlJUcmltKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3JUcmltWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICIgIGZlYXR1cmUgICIsICIgb25lIHRlc3QgIiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCIgfSkuUlRyaW08b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WF9fZmVhdHVyZV9fWF9yVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oIiAgZmVhdHVyZSAgIikuUlRyaW0oKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYTGlzdFhhX2JYWF9yVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICJhIiwgImIiIH0pLlJUcmltKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WExpc3RYMV8yWFhfclRyaW1YbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiB9KS5SVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9yVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLlJUcmltKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9yVHJpbVhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5PcmRlcigpLkZvbGQoKS5SVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9yVHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLlJUcmltKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9yVHJpbVhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5PcmRlcigpLkZvbGQoKS5SVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RfbnVsbFhfcmVwbGFjZVhoX2pYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigidGhhdCIsICJ0aGlzIiwgInRlc3QiLCBudWxsKS5SZXBsYWNlKCJoIiwgImoiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RfbnVsbFhfZm9sZF9yZXBsYWNlWGxvY2FsX2hfalgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KCJ0aGF0IiwgInRoaXMiLCAidGVzdCIsIG51bGwpLkZvbGQoKS5SZXBsYWNlPG9iamVjdD4oU2NvcGUuTG9jYWwsICJoIiwgImoiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYTGlzdFhhX2JYY1hfcmVwbGFjZVhhX2JYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgImEiLCAiYiIgfSkuUmVwbGFjZSgiYSIsICJiIil9fSwgCkBAIC0xNjU1LDggKzE2NjAsOCBAQAogICAgICAgICAgICAgICAgeyJnX1ZfYXNYYV9uWF9zZWxlY3RYYV9uWF9ieVhhZ2VYX2J5WG5hbWVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuQXMoImEiLCAibiIpLlNlbGVjdDxvYmplY3Q+KCJhIiwgIm4iKS5CeSgiYWdlIikuQnkoIm5hbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYYWdlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BcygiYSIpLlNlbGVjdDxvYmplY3Q+KCJhIikuQnkoImFnZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX3dpdGhTaWRlRWZmZWN0WGtfbnVsbFhfaW5qZWN0WHhYX3NlbGVjdFhrWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuV2l0aFNpZGVFZmZlY3QoImsiLCBudWxsKS5JbmplY3Q8b2JqZWN0PigieCIpLlNlbGVjdDxvYmplY3Q+KCJrIil9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9vdXRfaW5fc2VsZWN0WGFsbF9hX2FfYVhfYnlYdW5mb2xkX25hbWVfZm9sZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoIkEiKS5Qcm9wZXJ0eSgibmFtZSIsICJhMSIpLkFzKCJhMSIpLkFkZFYoIkIiKS5Qcm9wZXJ0eSgibmFtZSIsICJiMSIpLkFzKCJiMSIpLkFkZEUoImFiIikuRnJvbSgiYTEiKS5UbygiYjEiKSwgKGcscCkgPT5nLlYoKS5BcygiYSIpLk91dCgpLkFzKCJhIikuSW4oKS5BcygiYSIpLlNlbGVjdDxvYmplY3Q+KFBvcC5BbGwsICJhIiwgImEiLCAiYSIpLkJ5KF9fLlVuZm9sZDxvYmplY3Q+KCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5Gb2xkKCkpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfYXNYbGFiZWxYX2xvY2FsWGFnZ3JlZ2F0ZVh4WF9zZWxlY3RYeFhfc2VsZWN0WGxhYmVsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkFzKCJsYWJlbCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKCJ4IikpLkJhcnJpZXIoKS5TZWxlY3Q8b2JqZWN0PigieCIpLlNlbGVjdDxvYmplY3Q+KCJsYWJlbCIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1Zfb3V0X2luX3NlbGVjdFhhbGxfYV9hX2FYX2J5WHVuZm9sZF9uYW1lX2ZvbGRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJBIikuUHJvcGVydHkoIm5hbWUiLCAiYTEiKS5BcygiYTEiKS5BZGRWKChzdHJpbmcpICJCIikuUHJvcGVydHkoIm5hbWUiLCAiYjEiKS5BcygiYjEiKS5BZGRFKChzdHJpbmcpICJhYiIpLkZyb20oImExIikuVG8oImIxIiksIChnLHApID0+Zy5WKCkuQXMoImEiKS5PdXQoKS5BcygiYSIpLkluKCkuQXMoImEiKS5TZWxlY3Q8b2JqZWN0PihQb3AuQWxsLCAiYSIsICJhIiwgImEiKS5CeShfXy5VbmZvbGQ8b2JqZWN0PigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuRm9sZCgpKX19LCAKKyAgICAgICAgICAgICAgIHsiZ193aXRob3V0U3RyYXRlZ2llc1hMYXp5QmFycmllclN0cmF0ZWd5WF9WX2FzWGxhYmVsWF9sb2NhbFhhZ2dyZWdhdGVfeFhfc2VsZWN0WHhYX3NlbGVjdFhsYWJlbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihMYXp5QmFycmllclN0cmF0ZWd5KSkuVigpLkFzKCJsYWJlbCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKCJ4IikpLlNlbGVjdDxvYmplY3Q+KCJ4IikuU2VsZWN0PG9iamVjdD4oImxhYmVsIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9uYW1lX2FzWGFYX3NlbGVjdFhmaXJzdF9hWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuQXMoImEiKS5TZWxlY3Q8b2JqZWN0PihQb3AuRmlyc3QsICJhIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9uYW1lX2FzWGFYX3NlbGVjdFhsYXN0X2FYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5BcygiYSIpLlNlbGVjdDxvYmplY3Q+KFBvcC5MYXN0LCAiYSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfbmFtZV9hc1hhWF9zZWxlY3RYbWl4ZWRfYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLkFzKCJhIikuU2VsZWN0PG9iamVjdD4oUG9wLk1peGVkLCAiYSIpfX0sIApAQCAtMTczNyw5ICsxNzQyLDkgQEAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX3RvTG93ZXIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KCJGRUFUVVJFIiwgInRFU3QiLCBudWxsKS5Ub0xvd2VyKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF90b0xvd2VyWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICJGRUFUVVJFIiwgInRFU3QiLCBudWxsIH0pLlRvTG93ZXI8b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WExpc3RYYV9iWFhfdG9Mb3dlciIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICJhIiwgImIiIH0pLlRvTG93ZXIoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF90b0xvd2VyIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJNQVJLTyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiVkFEQVMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiTE9QIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJKT1NIIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiUklQUExFIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJQRVRFUiIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5Ub0xvd2VyKCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfdG9Mb3dlclhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIk1BUktPIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJWQURBUyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJMT1AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIkpPU0giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJSSVBQTEUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIlBFVEVSIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLlRvTG93ZXI8b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF90b0xvd2VyWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiTUFSS08iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIlZBREFTIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIkxPUCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiSk9TSCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIlJJUFBMRSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiUEVURVIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuT3JkZXIoKS5Gb2xkKCkuVG9Mb3dlcjxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF90b0xvd2VyIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJNQVJLTyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiVkFEQVMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiTE9QIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJKT1NIIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiUklQUExFIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJQRVRFUiIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5Ub0xvd2VyKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfdG9Mb3dlclhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIk1BUktPIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJWQURBUyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJMT1AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIkpPU0giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJSSVBQTEUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIlBFVEVSIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLlRvTG93ZXI8b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCisgICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF90b0xvd2VyWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiTUFSS08iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIlZBREFTIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIkxPUCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiSk9TSCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIlJJUFBMRSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiUEVURVIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuT3JkZXIoKS5Gb2xkKCkuVG9Mb3dlcjxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKICAgICAgICAgICAgICAgIHsiZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX3RvVXBwZXIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KCJmZWF0dXJlIiwgInRFU3QiLCBudWxsKS5Ub1VwcGVyKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF90b1VwcGVyWGxvY2FsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICJmZWF0dXJlIiwgInRFU3QiLCBudWxsIH0pLlRvVXBwZXI8b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WExpc3RYYV9iWFhfdG9VcHBlciIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7ICJhIiwgImIiIH0pLlRvVXBwZXIoKX19LCAKQEAgLTE3NTAsOCArMTc1NSw4IEBACiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3RyaW1YbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgIiAgZmVhdHVyZSAgIiwgIiBvbmUgdGVzdCAiLCBudWxsLCAiIiwgIiAiLCAi44CAYWJjIiwgImFiY+OAgCIsICLjgIBhYmPjgIAiLCAi44CA44CAIiB9KS5UcmltPG9iamVjdD4oU2NvcGUuTG9jYWwpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdFhMaXN0WGFfYlhYX3RyaW0iLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAiYSIsICJiIiB9KS5UcmltKCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0WExpc3RYMV8yWFhfdHJpbVhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyIH0pLlRyaW08b2JqZWN0PihTY29wZS5Mb2NhbCl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl92YWx1ZXNYbmFtZVhfdHJpbSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLlRyaW0oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX3RyaW1YbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICIgbWFya28gIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICIgIHZhZGFzICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICBsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2ggICIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgIHJpcHBsZSAgICIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuT3JkZXIoKS5Gb2xkKCkuVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc1huYW1lWF90cmltIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICIgbWFya28gIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICIgIHZhZGFzICAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICBsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2ggICIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgIiAgIHJpcHBsZSAgICIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCJuYW1lIikuVHJpbSgpfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfdHJpbVhsb2NhbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigoc3RyaW5nKSAic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5PcmRlcigpLkZvbGQoKS5UcmltPG9iamVjdD4oU2NvcGUuTG9jYWwpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfbG9jYWxYb3V0RV9mb2xkWF91bmZvbGQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLk91dEUoKS5Gb2xkKCkpLlVuZm9sZDxvYmplY3Q+KCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl92YWx1ZU1hcF91bmZvbGRfbWFwWHNlbGVjdFhrZXlzWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5VbmZvbGQ8b2JqZWN0PigpLk1hcDxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5LZXlzKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNJZFg2WFhfcGF0aF9ieVhuYW1lWF91bmZvbGQiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5SZXBlYXQoX18uQm90aCgpLlNpbXBsZVBhdGgoKSkuVW50aWwoX18uSGFzSWQocFsidmlkNiJdKSkuUGF0aCgpLkJ5KCJuYW1lIikuVW5mb2xkPG9iamVjdD4oKX19LCAKQEAgLTE3OTQsNyArMTc5OSw3IEBACiAgICAgICAgICAgICAgICB7ImdfVlgxWF9vdXRfb3V0X291dCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dCgpLk91dCgpLk91dCgpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZYMVhfb3V0X25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXQoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZYMVhfdG9fWE9VVF9rbm93c1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5UbyhEaXJlY3Rpb24uT3V0LCAia25vd3MiKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19WWDFfMl8zXzRYX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuUHJvcGVydHkoImFnZSIsIDI5KS5BcygibWFya28iKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLlByb3BlcnR5KCJhZ2UiLCAyNykuQXMoInZhZGFzIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoImxvcCIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5Qcm9wZXJ0eSgiYWdlIiwgMzIpLkFzKCJqb3NoIikuQWRkVigic29mdHdhcmUiKS5Qcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5Qcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuQXMoInJpcHBsZSIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInBldGVyIikuUHJvcGVydHkoImFnZSIsIDM1KS5BcygicGV0ZXIiKS5BZGRFKCJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oInZhZGFzIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5Ubygiam9zaCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgibWFya28iKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oInJpcHBsZSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oInBldGVyIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKSwgKGcscCkgPT5nLlYoKS5IYXMoInNvZnR3YXJlIiwgIm5hbWUiLCAibG9wIikuRHJvcCgpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0sIHBbInZpZDIiXSwgcFsidmlkMyJdLCBwWyJ2aWQ0Il0pfX0sIAorICAgICAgICAgICAgICAgeyJnX1ZYMV8yXzNfNFhfbmFtZSIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKChzdHJpbmcpICJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoKHN0cmluZykgImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkhhcygic29mdHdhcmUiLCAibmFtZSIsICJsb3AiKS5Ecm9wKCksIChnLHApID0+Zy5WKHBbInZpZDEiXSwgcFsidmlkMiJdLCBwWyJ2aWQzIl0sIHBbInZpZDQiXSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNMYWJlbFhwZXJzb25YX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNMYWJlbCgicGVyc29uIikuVigpLkhhc0xhYmVsKCJzb2Z0d2FyZSIpLlZhbHVlczxvYmplY3Q+KCJuYW1lIil9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNMYWJlbFhsb29wc1hfYm90aEVYc2VsZlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNMYWJlbCgibG9vcHMiKS5Cb3RoRSgic2VsZiIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzTGFiZWxYbG9vcHNYX2JvdGhYc2VsZlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXNMYWJlbCgibG9vcHMiKS5Cb3RoKCJzZWxmIil9fSwgCkBAIC0xODAzLDcgKzE4MDgsNyBAQAogICAgICAgICAgICAgICAgeyJnX1ZYMVhfVl92YWx1ZXNYbmFtZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYocFsidmlkMSJdKS5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX291dFhrbm93c1hfVl9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuT3V0KCJrbm93cyIpLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfaGFzWG5hbWVfR2FyY2lhWF9pblhzdW5nQnlYX2FzWHNvbmdYX1ZfaGFzWG5hbWVfV2lsbGllX0RpeG9uWF9pblh3cml0dGVuQnlYX3doZXJlWGVxWHNvbmdYWF9uYW1lIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuSGFzKCJhcnRpc3QiLCAibmFtZSIsICJHYXJjaWEiKS5Jbigic3VuZ0J5IikuQXMoInNvbmciKS5WKCkuSGFzKCJhcnRpc3QiLCAibmFtZSIsICJXaWxsaWVfRGl4b24iKS5Jbigid3JpdHRlbkJ5IikuV2hlcmUoUC5FcSgic29uZyIpKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpfX0sIAotICAgICAgICAgICAgICAgeyJnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9WWHNvZnR3YXJlWF9hZGRJbkVYdXNlc19wWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5Qcm9wZXJ0eSgiYWdlIiwgMjkpLkFzKCJtYXJrbyIpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuUHJvcGVydHkoImFnZSIsIDI3KS5BcygidmFkYXMiKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgImxvcCIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygibG9wIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLlByb3BlcnR5KCJhZ2UiLCAzMikuQXMoImpvc2giKS5BZGRWKCJzb2Z0d2FyZSIpLlByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLlByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5BcygicmlwcGxlIikuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5Qcm9wZXJ0eSgiYWdlIiwgMzUpLkFzKCJwZXRlciIpLkFkZEUoImtub3dzIikuRnJvbSgibWFya28iKS5UbygidmFkYXMiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuQWRkRSgia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJqb3NoIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJtYXJrbyIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuQWRkRSgiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygicmlwcGxlIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLkFkZEUoImNyZWF0ZWQiKS5Gcm9tKCJqb3NoIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKCJjcmVhdGVkIikuRnJvbSgicGV0ZXIiKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLCAoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKS5BcygicCIpLlYocFsieHgxIl0pLkFkZEUoInVzZXMiKS5Gcm9tKCJwIiksIChnLHApID0+Zy5FKCkuSGFzTGFiZWwoInVzZXMiKSwgKGcscCkgPT5nLlYocFsidmlkMSJdKS5PdXRFKCJ1c2VzIiksIChnLHApID0+Zy5WKHBbInZpZDIiXSkuT3V0RSgidXNlcyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQzIl0pLkluRSgidXNlcyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ0Il0pLk91dEUoInVzZXMiKSwgKGcscCkgPT5nLlYocFsidmlkNSJdKS5JbkUoInVzZXMiKSwgKGcscCkgPT5nLlYocFsidmlkNiJdKS5PdXRFKCJ1c2VzIil9fSwgCisgICAgICAgICAgICAgICB7ImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX1ZYc29mdHdhcmVYX2FkZEluRVh1c2VzX3BYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLlByb3BlcnR5KCJhZ2UiLCAyOSkuQXMoIm1hcmtvIikuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5Qcm9wZXJ0eSgiYWdlIiwgMjcpLkFzKCJ2YWRhcyIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAibG9wIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJsb3AiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuUHJvcGVydHkoImFnZSIsIDMyKS5Bcygiam9zaCIpLkFkZFYoKHN0cmluZykgInNvZnR3YXJlIikuUHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikuUHJvcGVydHkoImxhbmciLCAiamF2YSIpLkFzKCJyaXBwbGUiKS5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLlByb3BlcnR5KCJhZ2UiLCAzNSkuQXMoInBldGVyIikuQWRkRSgoc3RyaW5nKSAia25vd3MiKS5Gcm9tKCJtYXJrbyIpLlRvKCJ2YWRhcyIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5BZGRFKChzdHJpbmcpICJrbm93cyIpLkZyb20oIm1hcmtvIikuVG8oImpvc2giKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oIm1hcmtvIikuVG8oImxvcCIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5BZGRFKChzdHJpbmcpICJjcmVhdGVkIikuRnJvbSgiam9zaCIpLlRvKCJyaXBwbGUiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuQWRkRSgoc3RyaW5nKSAiY3JlYXRlZCIpLkZyb20oImpvc2giKS5UbygibG9wIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLkFkZEUoKHN0cmluZykgImNyZWF0ZWQiKS5Gcm9tKCJwZXRlciIpLlRvKCJsb3AiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCksIChnLHApID0+Zy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLkFzKCJwIikuVihwWyJ4eDEiXSkuQWRkRSgoc3RyaW5nKSAidXNlcyIpLkZyb20oInAiKSwgKGcscCkgPT5nLkUoKS5IYXNMYWJlbCgidXNlcyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoInVzZXMiKSwgKGcscCkgPT5nLlYocFsidmlkMiJdKS5PdXRFKCJ1c2VzIiksIChnLHApID0+Zy5WKHBbInZpZDMiXSkuSW5FKCJ1c2VzIiksIChnLHApID0+Zy5WKHBbInZpZDQiXSkuT3V0RSgidXNlcyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ1Il0pLkluRSgidXNlcyIpLCAoZyxwKSA9PmcuVihwWyJ2aWQ2Il0pLk91dEUoInVzZXMiKX19LCAKICAgICAgICAgICAgICAgIHsiSW5qZWN0WG51bGxYX2VxWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkVxKG51bGwpKX19LCAKICAgICAgICAgICAgICAgIHsiSW5qZWN0WG51bGxYX25lcVhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5OZXEobnVsbCkpfX0sIAogICAgICAgICAgICAgICAgeyJJbmplY3RYbnVsbFhfbHRYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTHQobnVsbCkpfX0sIApAQCAtMTgyMiw2ICsxODI3LDMwIEBACiAgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfbHRlWE5hTlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTHRlKERvdWJsZS5OYU4pKX19LCAKICAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF9ndFhOYU5YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxLjBkKS5JcyhQLkd0KERvdWJsZS5OYU4pKX19LCAKICAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF9ndGVYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5HdGUoRG91YmxlLk5hTikpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYTmFOWF9lcVgxZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuRXEoMS4wZCkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYTmFOWF9uZXFYMWRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKS5JcyhQLk5lcSgxLjBkKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhOYU5YX2x0WDFkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5MdCgxLjBkKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhOYU5YX2x0ZVgxZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuTHRlKDEuMGQpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WE5hTlhfZ3RYMWRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKS5JcyhQLkd0KDEuMGQpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WE5hTlhfZ3RlWDFkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5HdGUoMS4wZCkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYMWRYX2VxWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxLjBkKS5JcyhQLkVxKG51bGwpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF9uZXFYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTmVxKG51bGwpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF9sdFhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5MdChudWxsKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfbHRlWG51bGxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxLjBkKS5JcyhQLkx0ZShudWxsKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfZ3RYbnVsbFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuR3QobnVsbCkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYMWRYX2d0ZVhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5HdGUobnVsbCkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYbnVsbFhfZXFYMWRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkVxKDEuMGQpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WG51bGxYX25lcVgxZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTmVxKDEuMGQpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WG51bGxYX2x0WDFkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5MdCgxLjBkKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhudWxsWF9sdGVYMWRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkx0ZSgxLjBkKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhudWxsWF9ndFgxZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuR3QoMS4wZCkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYbnVsbFhfZ3RlWDFkWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdGUoMS4wZCkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYbnVsbFhfZXFYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5FcShEb3VibGUuTmFOKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhudWxsWF9uZXFYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5OZXEoRG91YmxlLk5hTikpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYbnVsbFhfbHRYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5MdChEb3VibGUuTmFOKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhudWxsWF9sdGVYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5MdGUoRG91YmxlLk5hTikpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYbnVsbFhfZ3RYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdChEb3VibGUuTmFOKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFhudWxsWF9ndGVYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdGUoRG91YmxlLk5hTikpfX0sIAogICAgICAgICAgICAgICAgeyJJbmplY3RYTmFOWF9lcVhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5FcShudWxsKSl9fSwgCiAgICAgICAgICAgICAgICB7IkluamVjdFhOYU5YX25lcVhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5OZXEobnVsbCkpfX0sIAogICAgICAgICAgICAgICAgeyJJbmplY3RYTmFOWF9sdFhudWxsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5MdChudWxsKSl9fSwgCkBAIC0xODgwLDYgKzE5MDksMTcgQEAKICAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF9ub3RYZmFsc2VYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxZCkuTm90KF9fLklzKFAuTHQoMCkpKX19LCAKICAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF9ub3RYTmFOWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMWQpLk5vdChfXy5JcyhQLkd0KERvdWJsZS5OYU4pKSl9fSwgCiAgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfbm90WGlzWGVxWE5hTlhYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMWQpLk5vdChfXy5JcyhQLkVxKERvdWJsZS5OYU4pKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfbm90WG5vdFhpc1hlcVhOYU5YWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxZCkuTm90KF9fLk5vdChfXy5JcyhQLkVxKERvdWJsZS5OYU4pKSkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYMWRYX3doZXJlWG5vdFhpc1hsdFhOYU5YWFhYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxZCkuV2hlcmUoX18uSW5qZWN0KDEpLk5vdChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYMWRYX3hvclh0cnVlX3RydWVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxKS5GaWx0ZXIoX18uT3IoX18uQW5kKF9fLklzKFAuRXEoMSkpLCBfXy5Ob3QoX18uSXMoUC5FcSgxKSkpKSwgX18uQW5kKF9fLklzKFAuRXEoMSkpLCBfXy5Ob3QoX18uSXMoUC5FcSgxKSkpKSkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYMWRYX3hvclh0cnVlX2ZhbHNlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkVxKDEpKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSksIF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuRXEoMSkpKSkpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF94b3JYdHJ1ZV9lcnJvclgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEpLkZpbHRlcihfXy5PcihfXy5BbmQoX18uSXMoUC5FcSgxKSksIF9fLk5vdChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSkpLCBfXy5BbmQoX18uSXMoUC5MdChEb3VibGUuTmFOKSksIF9fLk5vdChfXy5JcyhQLkVxKDEpKSkpKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfeG9yWGZhbHNlX3RydWVYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxKS5GaWx0ZXIoX18uT3IoX18uQW5kKF9fLklzKFAuR3QoMSkpLCBfXy5Ob3QoX18uSXMoUC5FcSgxKSkpKSwgX18uQW5kKF9fLklzKFAuRXEoMSkpLCBfXy5Ob3QoX18uSXMoUC5HdCgxKSkpKSkpfX0sIAorICAgICAgICAgICAgICAgeyJJbmplY3RYMWRYX3hvclhmYWxzZV9mYWxzZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEpLkZpbHRlcihfXy5PcihfXy5BbmQoX18uSXMoUC5HdCgxKSksIF9fLk5vdChfXy5JcyhQLkd0KDEpKSkpLCBfXy5BbmQoX18uSXMoUC5HdCgxKSksIF9fLk5vdChfXy5JcyhQLkd0KDEpKSkpKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfeG9yWGZhbHNlX2Vycm9yWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuTHQoRG91YmxlLk5hTikpKSksIF9fLkFuZChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSkpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF94b3JYZXJyb3JfdHJ1ZVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KDEpLkZpbHRlcihfXy5PcihfXy5BbmQoX18uSXMoUC5MdChEb3VibGUuTmFOKSksIF9fLk5vdChfXy5JcyhQLkVxKDEpKSkpLCBfXy5BbmQoX18uSXMoUC5FcSgxKSksIF9fLk5vdChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSkpKSl9fSwgCisgICAgICAgICAgICAgICB7IkluamVjdFgxZFhfeG9yWGVycm9yX2ZhbHNlWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSksIF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuTHQoRG91YmxlLk5hTikpKSkpKX19LCAKKyAgICAgICAgICAgICAgIHsiSW5qZWN0WDFkWF94b3JYZXJyb3JfZXJyb3JYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PigxKS5GaWx0ZXIoX18uT3IoX18uQW5kKF9fLklzKFAuTHQoRG91YmxlLk5hTikpLCBfXy5Ob3QoX18uSXMoUC5MdChEb3VibGUuTmFOKSkpKSwgX18uQW5kKF9fLklzKFAuTHQoRG91YmxlLk5hTikpLCBfXy5Ob3QoX18uSXMoUC5MdChEb3VibGUuTmFOKSkpKSkpfX0sIAogICAgICAgICAgICAgICAgeyJJbmplY3RYSW5mWF9lcVhJbmZYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0PihEb3VibGUuUG9zaXRpdmVJbmZpbml0eSkuSXMoUC5FcShEb3VibGUuUG9zaXRpdmVJbmZpbml0eSkpfX0sIAogICAgICAgICAgICAgICAgeyJJbmplY3RYSW5mWF9uZXFYSW5mWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpLklzKFAuTmVxKERvdWJsZS5Qb3NpdGl2ZUluZmluaXR5KSl9fSwgCiAgICAgICAgICAgICAgICB7IkluamVjdFhOZWdJbmZYX2VxWE5lZ0luZlgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkluamVjdDxvYmplY3Q+KERvdWJsZS5OZWdhdGl2ZUluZmluaXR5KS5JcyhQLkVxKERvdWJsZS5OZWdhdGl2ZUluZmluaXR5KSl9fSwgCkBAIC0xODk5LDggKzE5MzksMTAgQEAKICAgICAgICAgICAgICAgIHsiZ19WX3ZhbHVlc19vcmRlciIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlZhbHVlczxvYmplY3Q+KCkuT3JkZXIoKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX3Byb3BlcnRpZXNfb3JkZXIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpfX0sIAogICAgICAgICAgICAgICAgeyJnX1ZfcHJvcGVydGllc19vcmRlcl9pZCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLk9yZGVyKCkuSWQoKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19FX3Byb3BlcnRpZXNfb3JkZXJfdmFsdWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLlByb3BlcnR5KCJhIiwgMTApLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoImEiLCAxMSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5Qcm9wZXJ0eSgiYSIsIDEyKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLlByb3BlcnR5KCJhIiwgMTMpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuUHJvcGVydHkoImEiLCAxNCkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKS5Qcm9wZXJ0eSgiYSIsIDE1KSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpLlZhbHVlPG9iamVjdD4oKX19LCAKLSAgICAgICAgICAgICAgIHsiZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1hfdmFsdWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLlByb3BlcnR5KCJhIiwgMTApLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoImEiLCAxMSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5Qcm9wZXJ0eSgiYSIsIDEyKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLlByb3BlcnR5KCJhIiwgMTMpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuUHJvcGVydHkoImEiLCAxNCkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKS5Qcm9wZXJ0eSgiYSIsIDE1KSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLlZhbHVlPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19FX3Byb3BlcnRpZXNfb3JkZXJfdmFsdWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLlByb3BlcnR5KCJhIiwgMTApLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoImEiLCAxMSkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5Qcm9wZXJ0eSgiYSIsIDEyKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLlByb3BlcnR5KCJhIiwgMTMpLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuUHJvcGVydHkoImEiLCAxNCkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKS5Qcm9wZXJ0eSgiYSIsIDE1KSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpLlZhbHVlPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1hfdmFsdWUiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLlByb3BlcnR5KCJhIiwgMTApLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoImEiLCAxMSkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5Qcm9wZXJ0eSgiYSIsIDEyKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLlByb3BlcnR5KCJhIiwgMTMpLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuUHJvcGVydHkoImEiLCAxNCkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKS5Qcm9wZXJ0eSgiYSIsIDE1KSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLlZhbHVlPG9iamVjdD4oKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19FX3Byb3BlcnRpZXNfb3JkZXIiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLkFkZFYoKHN0cmluZykgInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNWQpLlByb3BlcnR5KCJhIiwgMTApLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoImEiLCAxMSkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5Qcm9wZXJ0eSgiYSIsIDEyKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMGQpLlByb3BlcnR5KCJhIiwgMTMpLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkuUHJvcGVydHkoImEiLCAxNCkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjJkKS5Qcm9wZXJ0eSgiYSIsIDE1KSwgKGcscCkgPT5nLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpfX0sIAorICAgICAgICAgICAgICAgeyJnX0VfcHJvcGVydGllc19vcmRlcl9ieVhkZXNjWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkuUHJvcGVydHkoImEiLCAxMCkuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5Qcm9wZXJ0eSgiYSIsIDExKS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNGQpLlByb3BlcnR5KCJhIiwgMTIpLkFkZEUoKHN0cmluZykgInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkuUHJvcGVydHkoImEiLCAxMykuQWRkRSgoc3RyaW5nKSAic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5Qcm9wZXJ0eSgiYSIsIDE0KS5BZGRFKChzdHJpbmcpICJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuMmQpLlByb3BlcnR5KCJhIiwgMTUpLCAoZyxwKSA9PmcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYyl9fSwgCiAgICAgICAgICAgICAgICB7ImdfaW5qZWN0X29yZGVyIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbmplY3Q8b2JqZWN0Pigienp6IiwgImZvbyIsIEd1aWQuUGFyc2UoIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCBuZXcgTGlzdDxvYmplY3Q+IHsgImEiLCAiYiIsICJjIiwgImQiIH0sIDEsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTA4LTAxVDAwOjAwWiIpLCBuZXcgTGlzdDxvYmplY3Q+IHsgImEiLCAiYiIsICJjIiB9LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImEiLCAiYSIgfSwgeyAiYiIsICJiIiB9fSwgbnVsbCwgMi4wZCwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoIjIwMjMtMDEtMDFUMDA6MDBaIiksIG5ldyBIYXNoU2V0PG9iamVjdD4geyAieCIsICJ5IiwgInoiIH0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyAiYSIsICJhIiB9LCB7ICJiIiwgZmFsc2UgfSwgeyAiYyIsICJjIiB9fSwgImJhciIsIEd1aWQuUGFyc2UoIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCB0cnVlLCBmYWxzZSwgRG91YmxlLlBvc2l0aXZlSW5maW5pdHksIERvdWJsZS5OYU4sIERvdWJsZS5OZWdhdGl2ZUluZmluaXR5KS5PcmRlcigpfX0sIAogICAgICAgICAgICAgICAgeyJnX2luamVjdF9vcmRlcl9ieVhkZXNjWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW5qZWN0PG9iamVjdD4oInp6eiIsICJmb28iLCBHdWlkLlBhcnNlKCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEiKSwgbmV3IExpc3Q8b2JqZWN0PiB7ICJhIiwgImIiLCAiYyIsICJkIiB9LCAxLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMy0wOC0wMVQwMDowMFoiKSwgbmV3IExpc3Q8b2JqZWN0PiB7ICJhIiwgImIiLCAiYyIgfSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJhIiwgImEiIH0sIHsgImIiLCAiYiIgfX0sIG51bGwsIDIuMGQsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKCIyMDIzLTAxLTAxVDAwOjAwWiIpLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgIngiLCAieSIsICJ6IiB9LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgImEiLCAiYSIgfSwgeyAiYiIsIGZhbHNlIH0sIHsgImMiLCAiYyIgfX0sICJiYXIiLCBHdWlkLlBhcnNlKCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEiKSwgdHJ1ZSwgZmFsc2UsIERvdWJsZS5Qb3NpdGl2ZUluZmluaXR5LCBEb3VibGUuTmFOLCBEb3VibGUuTmVnYXRpdmVJbmZpbml0eSkuT3JkZXIoKS5CeShPcmRlci5EZXNjKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX291dF9vdXRfb3JkZXJfYnlYYXNjWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLk91dCgpLk91dCgpLk9yZGVyKCkuQnkoT3JkZXIuQXNjKX19LCAKQEAgLTE5ODgsNiArMjAzMCw3IEBACiAgICAgICAgICAgICAgICB7ImdfVl9oYXNMYWJlbFhzb25nWF9ncm91cF9ieVhuYW1lWF9ieVhwcm9wZXJ0aWVzX2dyb3VwQ291bnRfYnlYbGFiZWxYWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJzb25nIikuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoIm5hbWUiKS5CeShfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5Hcm91cENvdW50PG9iamVjdD4oKS5CeShULkxhYmVsKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9vdXRYZm9sbG93ZWRCeVhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGJvdGhFX2dyb3VwX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5PdXQoImZvbGxvd2VkQnkiKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeSgic29uZ1R5cGUiKS5CeShfXy5Cb3RoRSgpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFQuTGFiZWwpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKS5TdW08b2JqZWN0PigpKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfZ3JvdXBYYVhfYnlYbGFiZWxYX2J5WHdlaWdodF9zdW1YX3dlaWdodF9zdW1YIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoVC5MYWJlbCkuQnkoX18uQm90aEUoKS5Hcm91cCgiYSIpLkJ5KFQuTGFiZWwpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KCJ3ZWlnaHQiKS5TdW08b2JqZWN0PigpKS5WYWx1ZXM8b2JqZWN0Pigid2VpZ2h0IikuU3VtPG9iamVjdD4oKSl9fSwgCisgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYYV9fbWFya29fNjY2X25vb25lX2JsYWhYX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYb3V0RV9sYWJlbF9mb2xkWF9jYXBYYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLldpdGhTaWRlRWZmZWN0KCJhIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7ICJtYXJrbyIsIG5ldyBMaXN0PG9iamVjdD4geyAiNjY2IiB9IH0sIHsgIm5vb25lIiwgbmV3IExpc3Q8b2JqZWN0PiB7ICJibGFoIiB9IH19KS5WKCkuR3JvdXAoImEiKS5CeSgibmFtZSIpLkJ5KF9fLk91dEUoKS5MYWJlbCgpLkZvbGQoKSkuQ2FwPG9iamVjdD4oImEiKS5VbmZvbGQ8b2JqZWN0PigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KENvbHVtbi5LZXlzKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoT3JkZXIuQXNjKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX291dFhjcmVhdGVkWF9ncm91cF9ieVhuYW1lWF9ieVhzZWxlY3RYcFhfdmFsdWVzWGFnZVhfc3VtWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLkhhc0xhYmVsKCJwZXJzb24iKS5BcygicCIpLk91dCgiY3JlYXRlZCIpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KCJuYW1lIikuQnkoX18uU2VsZWN0PG9iamVjdD4oInAiKS5WYWx1ZXM8b2JqZWN0PigiYWdlIikuU3VtPG9iamVjdD4oKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9ncm91cF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoX18uTGFiZWwoKSkuQnkoX18uTGFiZWwoKS5Db3VudCgpKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cF9ieV9ieVhvdXRfb3JkZXJfZm9sZFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgUC5XaXRoaW4oInZhZGFzIiwgInBldGVyIikpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KCkuQnkoX18uT3V0KCkuT3JkZXIoKS5Gb2xkKCkpfX0sIApAQCAtMjA3NSw3ICsyMTE4LDcgQEAKICAgICAgICAgICAgICAgIHsiZ19WX3NhY2tYYXNzaWduWF9ieVhhZ2VYX2J5WG5hbWVYX3NhY2siLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5TYWNrKE9wZXJhdG9yLkFzc2lnbikuQnkoImFnZSIpLkJ5KCJuYW1lIikuU2FjazxvYmplY3Q+KCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9zaWRlRWZmZWN0WGlkZW50aXR5WCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVigpLlNpZGVFZmZlY3QoX18uSWRlbnRpdHkoKSl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9zaWRlRWZmZWN0WGlkZW50aXR5X3ZhbHVlc1huYW1lWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5TaWRlRWZmZWN0KF9fLklkZW50aXR5KCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKSl9fSwgCi0gICAgICAgICAgICAgICB7ImdfVl9zaWRlRWZmZWN0WHByb3BlcnR5WHNpbmdsZV9hZ2VfMjJYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJhZ2UiLCAyMSksIChnLHApID0+Zy5WKCkuU2lkZUVmZmVjdChfXy5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJhZ2UiLCAyMikpLCAoZyxwKSA9PmcuVigpLkhhcygiYWdlIiwgMjEpLCAoZyxwKSA9PmcuVigpLkhhcygiYWdlIiwgMjIpfX0sIAorICAgICAgICAgICAgICAgeyJnX1Zfc2lkZUVmZmVjdFhwcm9wZXJ0eVhzaW5nbGVfYWdlXzIyWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuQWRkVigoc3RyaW5nKSAicGVyc29uIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAiYWdlIiwgMjEpLCAoZyxwKSA9PmcuVigpLlNpZGVFZmZlY3QoX18uUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAiYWdlIiwgMjIpKSwgKGcscCkgPT5nLlYoKS5IYXMoImFnZSIsIDIxKSwgKGcscCkgPT5nLlYoKS5IYXMoImFnZSIsIDIyKX19LCAKICAgICAgICAgICAgICAgIHsiZ19WX2dyb3VwX2J5WHZhbHVlc1huYW1lWF9zaWRlRWZmZWN0WGNvbnN0YW50WHp5eFhYX3N1YnN0cmluZ1gxWFhfYnlYY29uc3RhbnRYMVhfc2lkZUVmZmVjdFhjb25zdGFudFh4eXpYWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShfXy5WYWx1ZXM8b2JqZWN0PigibmFtZSIpLlNpZGVFZmZlY3QoX18uQ29uc3RhbnQ8b2JqZWN0Pigienl4IikpLlN1YnN0cmluZygwLCAxKSkuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PigxKS5TaWRlRWZmZWN0KF9fLkNvbnN0YW50PG9iamVjdD4oInh5eiIpKSl9fSwgCiAgICAgICAgICAgICAgICB7Imdfd2l0aFNpZGVFZmZlY3RYeF9zZXRYX1ZfYm90aF9ib3RoX3NpZGVFZmZlY3RYbG9jYWxYYWdncmVnYXRlWHhYX2J5WG5hbWVYWF9jYXBYeFhfdW5mb2xkIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5XaXRoU2lkZUVmZmVjdCgieCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyAgfSkuVigpLkJvdGgoKS5Cb3RoKCkuU2lkZUVmZmVjdChfXy5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZSgieCIpLkJ5KCJuYW1lIikpKS5DYXA8b2JqZWN0PigieCIpLlVuZm9sZDxvYmplY3Q+KCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9oYXNYYWdlWF9ncm91cENvdW50WGFYX2J5WG5hbWVYX291dF9jYXBYYVgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5IYXMoImFnZSIpLkdyb3VwQ291bnQoImEiKS5CeSgibmFtZSIpLk91dCgpLkNhcDxvYmplY3Q+KCJhIil9fSwgCkBAIC0yMTE1LDYgKzIxNTgsMTIgQEAKICAgICAgICAgICAgICAgIHsiZ19WWDFYX291dEVfaW5WX2JvdGhFX290aGVyVl90cmVlX2J5WG5hbWVYX2J5WGxhYmVsWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuVihwWyJ2aWQxIl0pLk91dEUoKS5JblYoKS5Cb3RoRSgpLk90aGVyVigpLlRyZWU8b2JqZWN0PigpLkJ5KCJuYW1lIikuQnkoVC5MYWJlbCl9fSwgCiAgICAgICAgICAgICAgICB7ImdfVl9vdXRfdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5WKCkuT3V0KCkuVHJlZSgiYSIpLlNlbGVjdDxvYmplY3Q+KCJhIikuQ291bnQoU2NvcGUuTG9jYWwpfX0sIAogICAgICAgICAgICAgICAgeyJnX1Zfb3V0X29yZGVyX2J5WG5hbWVYX2xvY2FsWHRyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLlYoKS5PdXQoKS5Mb2NhbDxvYmplY3Q+KF9fLlRyZWUoImEiKS5TZWxlY3Q8b2JqZWN0PigiYSIpLkNvdW50KFNjb3BlLkxvY2FsKSl9fSwgCisgICAgICAgICAgICAgICB7ImdfaW9fd3JpdGVYa3J5b1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLklvPG9iamVjdD4oInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIpLldyaXRlKCl9fSwgCisgICAgICAgICAgICAgICB7ImdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3J5b1giLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLklvPG9iamVjdD4oInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIpLldpdGgoSU8uV3JpdGVyLCBJTy5HcnlvKS5Xcml0ZSgpfX0sIAorICAgICAgICAgICAgICAgeyJnX2lvX3dyaXRlWGdyYXBoc29uWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW88b2JqZWN0PigidGlua2VycG9wLW1vZGVybi12My5qc29uIikuV3JpdGUoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncmFwaHNvblgiLCBuZXcgTGlzdDxGdW5jPEdyYXBoVHJhdmVyc2FsU291cmNlLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4sIElUcmF2ZXJzYWw+PiB7KGcscCkgPT5nLklvPG9iamVjdD4oInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvbiIpLldpdGgoSU8uV3JpdGVyLCBJTy5HcmFwaFNPTikuV3JpdGUoKX19LCAKKyAgICAgICAgICAgICAgIHsiZ19pb193cml0ZVhncmFwaG1sWCIsIG5ldyBMaXN0PEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4+IHsoZyxwKSA9PmcuSW88b2JqZWN0PigidGlua2VycG9wLW1vZGVybi54bWwiKS5Xcml0ZSgpfX0sIAorICAgICAgICAgICAgICAgeyJnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBobWxYIiwgbmV3IExpc3Q8RnVuYzxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgSURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBJVHJhdmVyc2FsPj4geyhnLHApID0+Zy5JbzxvYmplY3Q+KCJ0aW5rZXJwb3AtbW9kZXJuLnhtbCIpLldpdGgoSU8uV3JpdGVyLCBJTy5HcmFwaE1MKS5Xcml0ZSgpfX0sIAogICAgICAgICAgICAgfTsKIAogICAgICAgICBwdWJsaWMgc3RhdGljIElUcmF2ZXJzYWwgVXNlVHJhdmVyc2FsKHN0cmluZyBzY2VuYXJpb05hbWUsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiBwYXJhbWV0ZXJzLCBJRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4gc2lkZUVmZmVjdHMpCkBAIC0yMTIzLDkgKzIxNzIsMTYgQEAKICAgICAgICAgICAgIEZ1bmM8R3JhcGhUcmF2ZXJzYWxTb3VyY2UsIElEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiwgSVRyYXZlcnNhbD4gZiA9IGxpc3RbMF07CiAgICAgICAgICAgICBsaXN0LlJlbW92ZUF0KDApOwogICAgICAgICAgICAgSVRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBmLkludm9rZShnLCBwYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGZvcmVhY2ggKHZhciBzaWRlRWZmZWN0IGluIHNpZGVFZmZlY3RzKQorICAgICAgICAgICAgLy8gU2lkZSBlZmZlY3RzIG5lZWQgdG8gYmUgcHJlcGVuZGVkIGFzIHNvdXJjZSBzdGVwcyAoYmVmb3JlIHRyYXZlcnNhbCBzdGVwcykuCisgICAgICAgICAgICAvLyBCdWlsZCB0aGVtIGluIGEgdGVtcG9yYXJ5IEdyZW1saW5MYW5nIGFuZCBwcmVwZW5kIHRvIHRoZSB0cmF2ZXJzYWwncyBncmVtbGluIHN0cmluZy4KKyAgICAgICAgICAgIGlmIChzaWRlRWZmZWN0cy5Db3VudCA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFNvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCBzaWRlRWZmZWN0LktleSwgc2lkZUVmZmVjdC5WYWx1ZSk7CisgICAgICAgICAgICAgICAgdmFyIHNpZGVFZmZlY3RMYW5nID0gbmV3IEdyZW1saW5MYW5nKCk7CisgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHNpZGVFZmZlY3QgaW4gc2lkZUVmZmVjdHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzaWRlRWZmZWN0TGFuZy5BZGRTb3VyY2UoIndpdGhTaWRlRWZmZWN0Iiwgc2lkZUVmZmVjdC5LZXksIHNpZGVFZmZlY3QuVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuR3JlbWxpbiA9IHNpZGVFZmZlY3RMYW5nLkdyZW1saW4gKyB0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuR3JlbWxpbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWw7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L0doZXJraW4vSWdub3JlRXhjZXB0aW9uLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9JZ25vcmVFeGNlcHRpb24uY3MKaW5kZXggM2E4NmQ4Mi4uNDY0N2E1MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9JZ25vcmVFeGNlcHRpb24uY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9JZ25vcmVFeGNlcHRpb24uY3MKQEAgLTcwLDYgKzcwLDExIEBACiAgICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAgLy8vIHRyZWUoKSBpcyBub3Qgc3VwcG9ydGVkIHlldAogICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBUcmVlU3RlcE5vdFN1cHBvcnRlZAorICAgICAgICBUcmVlU3RlcE5vdFN1cHBvcnRlZCwKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyB3cml0ZSgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGZvciB0ZXN0aW5nCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIFdyaXRlU3RlcFRlc3RpbmdOb3RTdXBwb3J0ZWQKICAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvR2hlcmtpbi9TY2VuYXJpb0RhdGEuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL1NjZW5hcmlvRGF0YS5jcwppbmRleCAwNGQ0Y2M5Li43MDhiM2RiIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL1NjZW5hcmlvRGF0YS5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9HaGVya2luL1NjZW5hcmlvRGF0YS5jcwpAQCAtMTA5LDcgKzEwOSw4IEBACiAgICAgICAgICAgICAvLyBQcm9wZXJ0eSBuYW1lIG1pZ2h0IG5vdCBleGlzdCBhbmQgQyMgZG9lc24ndCBzdXBwb3J0ICJudWxsIiBrZXlzIGluIERpY3Rpb25hcnkKICAgICAgICAgICAgIGlmIChnLlYoKS5Db3VudCgpLk5leHQoKSA9PSBnLlYoKS5IYXMoIm5hbWUiKS5Db3VudCgpLk5leHQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZy5WKCkuR3JvdXA8c3RyaW5nLCBvYmplY3Q+KCkuQnkoIm5hbWUiKS5CeShfXy5UYWlsPFZlcnRleD4oKSkuTmV4dCgpIQorICAgICAgICAgICAgICAgIHJldHVybiBnLldpdGgoIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJhbGwiKS5WKCkuR3JvdXA8c3RyaW5nLCBvYmplY3Q+KCkKKyAgICAgICAgICAgICAgICAgICAgLkJ5KCJuYW1lIikuQnkoX18uVGFpbDxWZXJ0ZXg+KCkpLk5leHQoKSEKICAgICAgICAgICAgICAgICAgICAgLlRvRGljdGlvbmFyeShrdiA9PiBrdi5LZXksIGt2ID0+IChWZXJ0ZXgpIGt2LlZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTEyMiw4MSArMTIzLDkzIEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIElGdW5jdGlvbiBsYW1iZGEgPSBMYW1iZGEuR3Jvb3Z5KAotICAgICAgICAgICAgICAgICAgICAiaXQub3V0VmVydGV4KCkudmFsdWUoJ25hbWUnKSArICctJyArIGl0LmxhYmVsKCkgKyAnLT4nICsgaXQuaW5WZXJ0ZXgoKS52YWx1ZSgnbmFtZScpIiwgMSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZy5FKCkuR3JvdXA8c3RyaW5nLCBFZGdlPigpCi0gICAgICAgICAgICAgICAgICAgIC5CeShsYW1iZGEpCisgICAgICAgICAgICAgICAgLy8gVXNlIHByb2plY3QoKSBpbnN0ZWFkIG9mIGEgR3Jvb3Z5IGxhbWJkYSB0byBidWlsZCB0aGUgZWRnZSBrZXkgc3RyaW5nCisgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGZvcm0gIm91dFYtbGFiZWwtPmluViIuIFRoaXMgYXZvaWRzIGxhbWJkYXMgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgICAgICAgICAvLyBvdmVyIEhUVFAgNC4wIHdpdGggR3JhcGhCaW5hcnkgc2VyaWFsaXphdGlvbi4KKyAgICAgICAgICAgICAgICB2YXIgZWRnZU1hcCA9IGcuV2l0aCgibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgImFsbCIpLkUoKQorICAgICAgICAgICAgICAgICAgICAuR3JvdXA8SURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBvYmplY3Q+KCkKKyAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLlByb2plY3Q8b2JqZWN0PigibyIsICJsIiwgImkiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLk91dFYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLkxhYmVsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAuQnkoX18uSW5WKCkuVmFsdWVzPG9iamVjdD4oIm5hbWUiKSkpCiAgICAgICAgICAgICAgICAgICAgIC5CeShfXy5UYWlsPG9iamVjdD4oKSkKICAgICAgICAgICAgICAgICAgICAgLk5leHQoKSE7CisKKyAgICAgICAgICAgICAgICB2YXIgZWRnZXMgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIEVkZ2U+KCk7CisgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGt2IGluIGVkZ2VNYXApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga3YuS2V5OworICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ViA9IGtleVsibyJdPy5Ub1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWwgPSBrZXlbImwiXT8uVG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGluViA9IGtleVsiaSJdPy5Ub1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBlZGdlc1skIntvdXRWfS17bGFiZWx9LT57aW5WfSJdID0gKEVkZ2UpIGt2LlZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZWRnZXM7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoUmVzcG9uc2VFeGNlcHRpb24pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgbmFtZSBtaWdodCBub3QgZXhpc3QKICAgICAgICAgICAgICAgICByZXR1cm4gRW1wdHlFZGdlczsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhdGNoIChLZXlOb3RGb3VuZEV4Y2VwdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRW1wdHlFZGdlczsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIElEaWN0aW9uYXJ5PHN0cmluZywgVmVydGV4UHJvcGVydHk+IEdldFZlcnRleFByb3BlcnRpZXMoR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZykKICAgICAgICAgewogICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBUaGlzIGNsb3N1cmUgd2lsbCB0dXJuIGEgVmVydGV4UHJvcGVydHkgaW50byBhIHRyaXBsZSBzdHJpbmcgb2YgdGhlIGZvcm06Ci0gICAgICAgICAgICAgICAgICogInZlcnRleE5hbWUtcHJvcEtleS0+cHJvcFZhbCIKLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAqIEl0IHdpbGwgYWxzbyB0YWtlIGNhcmUgb2Ygd3JhcHBpbmcgcHJvcFZhbCBpbiB0aGUgYXBwcm9wcmlhdGUgTnVtZXJpYyBmb3JtYXQuIFdlIG11c3QgZG8gdGhpcyBpbgotICAgICAgICAgICAgICAgICAqIGNhc2UgYSBWZXJ0ZXggaGFzIG11bHRpcGxlIHByb3BlcnRpZXMgd2l0aCB0aGUgc2FtZSBrZXkgYW5kIG51bWJlciB2YWx1ZSBidXQgaW4gZGlmZmVyZW50IG51bWVyaWMKLSAgICAgICAgICAgICAgICAgKiB0eXBlIHNwYWNlcyAocmFyZSwgYnV0IHBvc3NpYmxlLCBhbmQgcHJlc3VtYWJseSBzb21ldGhpbmcgd2UgbWF5IHdhbnQgdG8gd3JpdGUgdGVzdHMgYXJvdW5kKS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICB2YXIgZ3Jvb3Z5ID0gQCIKLSAgICAgICAgICAgICAgICAgICAgeyB2cCAtPgotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVzdWx0ID0gdnAuZWxlbWVudCgpLnZhbHVlKCduYW1lJykgKyAnLScgKyB2cC5rZXkoKSArICctPicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHZhbHVlID0gdnAudmFsdWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgdHlwZSA9ICcnCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh2YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgeyAhKGl0IGluc3RhbmNlb2YgTnVtYmVyKSB9OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCeXRlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdiJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNob3J0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEludGVnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ2knCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgTG9uZzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnbCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGbG9hdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnZicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ2QnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQmlnRGVjaW1hbDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAnbScKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCaWdJbnRlZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICduJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2RbJyArIHZhbHVlICsgJ10uJyArIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgfSAgCi0gICAgICAgICAgICAgICAgIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBJRnVuY3Rpb24gbGFtYmRhID0gTGFtYmRhLkdyb292eShncm9vdnksIDEpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGcuVigpLlByb3BlcnRpZXM8VmVydGV4UHJvcGVydHk+KCkuR3JvdXA8c3RyaW5nLCBWZXJ0ZXhQcm9wZXJ0eT4oKQotICAgICAgICAgICAgICAgICAgICAuQnkobGFtYmRhKQorICAgICAgICAgICAgICAgIC8vIFVzZSBwcm9qZWN0KCkgaW5zdGVhZCBvZiBhIEdyb292eSBsYW1iZGEgdG8gYnVpbGQgdGhlIHZlcnRleCBwcm9wZXJ0eSBrZXkKKyAgICAgICAgICAgICAgICAvLyBzdHJpbmcgaW4gdGhlIGZvcm0gInZlcnRleE5hbWUtcHJvcEtleS0+cHJvcFZhbCIuIFRoaXMgYXZvaWRzIGxhbWJkYXMgd2hpY2gKKyAgICAgICAgICAgICAgICAvLyBhcmUgbm90IHN1cHBvcnRlZCBvdmVyIEhUVFAgNC4wIHdpdGggR3JhcGhCaW5hcnkgc2VyaWFsaXphdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBUaGUgdG95IGdyYXBocyBvbmx5IHVzZSBTdHJpbmcvSW50L0Zsb2F0L0RvdWJsZSB0eXBlcyBzbyB3ZSBoYW5kbGUgdGhvc2UgaGVyZS4KKyAgICAgICAgICAgICAgICB2YXIgdnBNYXAgPSBnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKQorICAgICAgICAgICAgICAgICAgICAuR3JvdXA8SURpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+LCBvYmplY3Q+KCkKKyAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLlByb2plY3Q8b2JqZWN0PigibiIsICJrIiwgInYiKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLkVsZW1lbnQoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLktleSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgLkJ5KF9fLlZhbHVlPG9iamVjdD4oKSkpCiAgICAgICAgICAgICAgICAgICAgIC5CeShfXy5UYWlsPG9iamVjdD4oKSkKICAgICAgICAgICAgICAgICAgICAgLk5leHQoKSE7CisKKyAgICAgICAgICAgICAgICB2YXIgdnBzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBWZXJ0ZXhQcm9wZXJ0eT4oKTsKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIga3YgaW4gdnBNYXApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga3YuS2V5OworICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtleVsibiJdPy5Ub1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICB2YXIgayA9IGtleVsiayJdPy5Ub1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICB2YXIgdmFsID0ga2V5WyJ2Il07CisgICAgICAgICAgICAgICAgICAgIHZhciB2YWxTdHIgPSBGb3JtYXRWZXJ0ZXhQcm9wZXJ0eVZhbHVlKGshLCB2YWwpOworICAgICAgICAgICAgICAgICAgICB2cHNbJCJ7bmFtZX0te2t9LT57dmFsU3RyfSJdID0gKFZlcnRleFByb3BlcnR5KSBrdi5WYWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZwczsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhdGNoIChSZXNwb25zZUV4Y2VwdGlvbikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gRW1wdHlWZXJ0ZXhQcm9wZXJ0aWVzOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0Y2ggKEtleU5vdEZvdW5kRXhjZXB0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBFbXB0eVZlcnRleFByb3BlcnRpZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgRm9ybWF0cyBhIHZlcnRleCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdXNlIGFzIGEgbG9va3VwIGtleSwgd3JhcHBpbmcgbnVtZXJpYyB2YWx1ZXMKKyAgICAgICAgLy8vICAgICBpbiB0aGUgR2hlcmtpbiBkW3ZhbHVlXS50eXBlIG5vdGF0aW9uLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwcml2YXRlIHN0YXRpYyBzdHJpbmcgRm9ybWF0VmVydGV4UHJvcGVydHlWYWx1ZShzdHJpbmcgcHJvcGVydHlLZXksIG9iamVjdD8gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB0b3kgZ3JhcGhzIHVzZSBrbm93biBwcm9wZXJ0eSBrZXlzIHdpdGggc3BlY2lmaWMgbnVtZXJpYyB0eXBlcy4KKyAgICAgICAgICAgIC8vIE1hdGNoIHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBQeXRob24gR0xWJ3MgX2dldF92X2tleXMgaGVscGVyLgorICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5S2V5IHN3aXRjaAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJ3ZWlnaHQiID0+ICQiZFt7dmFsdWV9XS5kIiwKKyAgICAgICAgICAgICAgICAiYWdlIiBvciAic2luY2UiIG9yICJza2lsbCIgPT4gJCJkW3t2YWx1ZX1dLmkiLAorICAgICAgICAgICAgICAgIF8gPT4gdmFsdWU/LlRvU3RyaW5nKCkgPz8gIiIKKyAgICAgICAgICAgIH07CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlKCkKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvUmVtb3RlL1JlbW90ZVN0cmF0ZWd5VGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1JlbW90ZS9SZW1vdGVTdHJhdGVneVRlc3RzLmNzCmluZGV4IDk5ZDg1MGQuLjA4MzYxZDIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvUmVtb3RlL1JlbW90ZVN0cmF0ZWd5VGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9SZW1vdGUvUmVtb3RlU3RyYXRlZ3lUZXN0cy5jcwpAQCAtMzgsMTQgKzM4LDE0IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGludCBUZXN0UG9ydCA9IENvbnZlcnQuVG9JbnQzMihDb25maWdQcm92aWRlci5Db25maWd1cmF0aW9uWyJUZXN0U2VydmVyUG9ydCJdKTsKIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VuZEJ5dGVjb2RlVG9HcmVtbGluU2VydmVyKCkKKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VuZEdyZW1saW5MYW5nVG9HcmVtbGluU2VydmVyKCkKICAgICAgICAgewogICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGV4cGVjdGVkUmVzdWx0ID0gImdyZW1saW4iOwotICAgICAgICAgICAgdmFyIHRlc3RCeXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgdGVzdEJ5dGVjb2RlLkFkZFN0ZXAoIlYiKTsKLSAgICAgICAgICAgIHRlc3RCeXRlY29kZS5BZGRTdGVwKCJoYXMiLCAidGVzdCIpOwotICAgICAgICAgICAgdGVzdEJ5dGVjb2RlLkFkZFN0ZXAoImluamVjdCIsIGV4cGVjdGVkUmVzdWx0KTsKLSAgICAgICAgICAgIHZhciB0ZXN0VHJhdmVyc2FsID0gQ3JlYXRlVHJhdmVyc2FsV2l0aFJlbW90ZVN0cmF0ZWd5KHRlc3RCeXRlY29kZSk7CisgICAgICAgICAgICB2YXIgZ3JlbWxpbkxhbmcgPSBuZXcgR3JlbWxpbkxhbmcoKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLkFkZFN0ZXAoIlYiKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLkFkZFN0ZXAoImhhcyIsICJ0ZXN0Iik7CisgICAgICAgICAgICBncmVtbGluTGFuZy5BZGRTdGVwKCJpbmplY3QiLCBleHBlY3RlZFJlc3VsdCk7CisgICAgICAgICAgICB2YXIgdGVzdFRyYXZlcnNhbCA9IENyZWF0ZVRyYXZlcnNhbFdpdGhSZW1vdGVTdHJhdGVneShncmVtbGluTGFuZyk7CiAKICAgICAgICAgICAgIHZhciBhY3R1YWxSZXN1bHQgPSB0ZXN0VHJhdmVyc2FsLk5leHQoKTsKIApAQCAtNTMsNDcgKzUzLDQ3IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd09yaWdpbmFsRXhjZXB0aW9uV2hlbkJ5dGVDb2RlSXNJbnZhbGlkKCkKKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVGhyb3dPcmlnaW5hbEV4Y2VwdGlvbldoZW5HcmVtbGluTGFuZ0lzSW52YWxpZCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0ZXN0Qnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHRlc3RCeXRlY29kZS5BZGRTdGVwKCJWIik7Ci0gICAgICAgICAgICB0ZXN0Qnl0ZWNvZGUuQWRkU3RlcCgidGhpc19zdGVwX2RvZXNfbm90X2V4aXN0IiwgInRlc3QiKTsKLSAgICAgICAgICAgIHZhciB0ZXN0VHJhdmVyc2FsID0gQ3JlYXRlVHJhdmVyc2FsV2l0aFJlbW90ZVN0cmF0ZWd5KHRlc3RCeXRlY29kZSk7CisgICAgICAgICAgICB2YXIgZ3JlbWxpbkxhbmcgPSBuZXcgR3JlbWxpbkxhbmcoKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLkFkZFN0ZXAoIlYiKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLkFkZFN0ZXAoInRoaXNfc3RlcF9kb2VzX25vdF9leGlzdCIsICJ0ZXN0Iik7CisgICAgICAgICAgICB2YXIgdGVzdFRyYXZlcnNhbCA9IENyZWF0ZVRyYXZlcnNhbFdpdGhSZW1vdGVTdHJhdGVneShncmVtbGluTGFuZyk7CiAKICAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8UmVzcG9uc2VFeGNlcHRpb24+KCgpID0+IHRlc3RUcmF2ZXJzYWwuTmV4dCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZW5kQnl0ZWNvZGVUb0dyZW1saW5TZXJ2ZXJBc3luY2hyb25vdXNseUZvclRyYXZlcnNhbFByb21pc2UoKQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZW5kR3JlbWxpbkxhbmdUb0dyZW1saW5TZXJ2ZXJBc3luY2hyb25vdXNseUZvclRyYXZlcnNhbFByb21pc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBzdHJpbmcgZXhwZWN0ZWRSZXN1bHQgPSAiZ3JlbWxpbiI7Ci0gICAgICAgICAgICB2YXIgdGVzdEJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICB0ZXN0Qnl0ZWNvZGUuQWRkU3RlcCgiViIpOwotICAgICAgICAgICAgdGVzdEJ5dGVjb2RlLkFkZFN0ZXAoImhhcyIsICJ0ZXN0Iik7Ci0gICAgICAgICAgICB0ZXN0Qnl0ZWNvZGUuQWRkU3RlcCgiaW5qZWN0IiwgZXhwZWN0ZWRSZXN1bHQpOwotICAgICAgICAgICAgdmFyIHRlc3RUcmF2ZXJzYWwgPSBDcmVhdGVUcmF2ZXJzYWxXaXRoUmVtb3RlU3RyYXRlZ3kodGVzdEJ5dGVjb2RlKTsKKyAgICAgICAgICAgIHZhciBncmVtbGluTGFuZyA9IG5ldyBHcmVtbGluTGFuZygpOworICAgICAgICAgICAgZ3JlbWxpbkxhbmcuQWRkU3RlcCgiViIpOworICAgICAgICAgICAgZ3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgInRlc3QiKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLkFkZFN0ZXAoImluamVjdCIsIGV4cGVjdGVkUmVzdWx0KTsKKyAgICAgICAgICAgIHZhciB0ZXN0VHJhdmVyc2FsID0gQ3JlYXRlVHJhdmVyc2FsV2l0aFJlbW90ZVN0cmF0ZWd5KGdyZW1saW5MYW5nKTsKIAogICAgICAgICAgICAgdmFyIGFjdHVhbFJlc3VsdCA9IGF3YWl0IHRlc3RUcmF2ZXJzYWwuUHJvbWlzZSh0ID0+IHQuTmV4dCgpKTsKIAogICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkUmVzdWx0LCBhY3R1YWxSZXN1bHQpOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBEZWZhdWx0VHJhdmVyc2FsPG9iamVjdCwgb2JqZWN0PiBDcmVhdGVUcmF2ZXJzYWxXaXRoUmVtb3RlU3RyYXRlZ3koQnl0ZWNvZGUgYnl0ZWNvZGUpCisgICAgICAgIHByaXZhdGUgRGVmYXVsdFRyYXZlcnNhbDxvYmplY3QsIG9iamVjdD4gQ3JlYXRlVHJhdmVyc2FsV2l0aFJlbW90ZVN0cmF0ZWd5KEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgcmVtb3RlU3RyYXRlZ3kgPQogICAgICAgICAgICAgICAgIG5ldyBSZW1vdGVTdHJhdGVneShuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQpKSkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXN0VHJhdmVyc2FsKHJlbW90ZVN0cmF0ZWd5LCBieXRlY29kZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRlc3RUcmF2ZXJzYWwocmVtb3RlU3RyYXRlZ3ksIGdyZW1saW5MYW5nKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGludGVybmFsIGNsYXNzIFRlc3RUcmF2ZXJzYWwgOiBEZWZhdWx0VHJhdmVyc2FsPG9iamVjdCwgb2JqZWN0PgogICAgIHsKLSAgICAgICAgcHVibGljIFRlc3RUcmF2ZXJzYWwoSVRyYXZlcnNhbFN0cmF0ZWd5IHRyYXZlcnNhbFN0cmF0ZWd5LCBCeXRlY29kZSBieXRlY29kZSkKKyAgICAgICAgcHVibGljIFRlc3RUcmF2ZXJzYWwoSVRyYXZlcnNhbFN0cmF0ZWd5IHRyYXZlcnNhbFN0cmF0ZWd5LCBHcmVtbGluTGFuZyBncmVtbGluTGFuZykKICAgICAgICAgewogICAgICAgICAgICAgVHJhdmVyc2FsU3RyYXRlZ2llcy5BZGQodHJhdmVyc2FsU3RyYXRlZ3kpOwotICAgICAgICAgICAgQnl0ZWNvZGUgPSBieXRlY29kZTsKKyAgICAgICAgICAgIEdyZW1saW5MYW5nID0gZ3JlbWxpbkxhbmc7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgQnl0ZWNvZGUgQnl0ZWNvZGUgeyBnZXQ7IH0KKyAgICAgICAgcHVibGljIG92ZXJyaWRlIEdyZW1saW5MYW5nIEdyZW1saW5MYW5nIHsgZ2V0OyB9CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0J5dGVjb2RlR2VuZXJhdGlvbi9CeXRlY29kZUdlbmVyYXRpb25UZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0J5dGVjb2RlR2VuZXJhdGlvbi9CeXRlY29kZUdlbmVyYXRpb25UZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkxNTI0Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZUdlbmVyYXRpb24vQnl0ZWNvZGVHZW5lcmF0aW9uVGVzdHMuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC5Qcm9jZXNzLlRyYXZlcnNhbC5CeXRlY29kZUdlbmVyYXRpb24KLXsKLSAgICBwdWJsaWMgY2xhc3MgQnl0ZWNvZGVHZW5lcmF0aW9uVGVzdHMKLSAgICB7Ci0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBHcmFwaFRyYXZlcnNhbFN0ZXBzU2hvdWxkVW5yb2xsUGFyYW1zUGFyYW1ldGVycygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7Ci0KLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IGcuVigpLkhhc0xhYmVsKCJmaXJzdExhYmVsIiwgInNlY29uZExhYmVsIiwgInRoaXJkTGFiZWwiKS5CeXRlY29kZTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMiwgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9ucy5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMywgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1sxXS5Bcmd1bWVudHMuTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfT3V0WGNyZWF0ZWRYKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChudWxsKTsKLQotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gZy5WKCkuT3V0KCJjcmVhdGVkIikuQnl0ZWNvZGU7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FbXB0eShieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJWIiwgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJvdXQiLCBieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzFdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImNyZWF0ZWQiLCBieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzFdLkFyZ3VtZW50c1swXSk7Ci0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnNbMV0uQXJndW1lbnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBnX1dpdGhTYWNrWDFYX0VfR3JvdXBDb3VudF9CeVh3ZWlnaHRYKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChudWxsKTsKLQotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gZy5XaXRoU2FjaygxKS5FKCkuR3JvdXBDb3VudDxkb3VibGU+KCkuQnkoIndlaWdodCIpLkJ5dGVjb2RlOwotCi0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIndpdGhTYWNrIiwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMywgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9ucy5Db3VudCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIkUiLCBieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzBdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImdyb3VwQ291bnQiLCBieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzFdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImJ5IiwgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1syXS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ3ZWlnaHQiLCBieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzJdLkFyZ3VtZW50c1swXSk7Ci0gICAgICAgICAgICBBc3NlcnQuRW1wdHkoYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMpOwotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnNbMV0uQXJndW1lbnRzKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1syXS5Bcmd1bWVudHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0WDFfMl8zWCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7Ci0KLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IGcuSW5qZWN0KDEsIDIsIDMpLkJ5dGVjb2RlOwotCi0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJpbmplY3QiLCBieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzBdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMywgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMuTGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBBbm9ueW1vdXNUcmF2ZXJzYWxfU3RhcnRfRW1wdHlCeXRlY29kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IF9fLlN0YXJ0KCkuQnl0ZWNvZGU7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FbXB0eShieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMpOwotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEFub255bW91c1RyYXZlcnNhbF9WWG51bGxYKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gX18uVihudWxsKS5CeXRlY29kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LlNpbmdsZShieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMpOwotICAgICAgICAgICAgQXNzZXJ0Lk51bGwoYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgQW5vbnltb3VzVHJhdmVyc2FsX091dFhudWxsWCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBfXy5PdXQobnVsbCEpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZUdlbmVyYXRpb24vU3RyYXRlZ2llc1Rlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvQnl0ZWNvZGVHZW5lcmF0aW9uL1N0cmF0ZWdpZXNUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU5ZWM1NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZUdlbmVyYXRpb24vU3RyYXRlZ2llc1Rlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci11c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneS5EZWNvcmF0aW9uOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRmluYWxpemF0aW9uOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuT3B0aW1pemF0aW9uOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuVmVyaWZpY2F0aW9uOwotdXNpbmcgWHVuaXQ7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuUHJvY2Vzcy5UcmF2ZXJzYWwuQnl0ZWNvZGVHZW5lcmF0aW9uCi17Ci0gICAgcHVibGljIGNsYXNzIFN0cmF0ZWdpZXNUZXN0cwotICAgIHsKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFRyYXZlcnNhbFdpdGhvdXRTdHJhdGVnaWVzX0FmdGVyV2l0aFN0cmF0ZWdpZXNXYXNDYWxsZWRfV2l0aFN0cmF0ZWdpZXNOb3RBZmZlY3RlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBnID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKCkuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSwgbmV3IEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZWFkT25seVN0cmF0ZWd5KSkuQnl0ZWNvZGU7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ3aXRoU3RyYXRlZ2llcyIsIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMuTGVuZ3RoKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgUmVhZE9ubHlTdHJhdGVneSgpLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzWzBdKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1sxXSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgid2l0aG91dFN0cmF0ZWdpZXMiLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMV0uT3BlcmF0b3JOYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzFdLkFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwodHlwZW9mKFJlYWRPbmx5U3RyYXRlZ3kpLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMV0uQXJndW1lbnRzWzBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRJbmNsdWRlTXVsdGlwbGVTdHJhdGVnaWVzSW5CeXRlY29kZVdoZW5HaXZlblRvV2l0aG91dFN0cmF0ZWdpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZWFkT25seVN0cmF0ZWd5KSwgdHlwZW9mKExhenlCYXJyaWVyU3RyYXRlZ3kpKS5CeXRlY29kZTsKLQotICAgICAgICAgICAgQXNzZXJ0LlNpbmdsZShieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMuTGVuZ3RoKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgid2l0aG91dFN0cmF0ZWdpZXMiLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMF0uT3BlcmF0b3JOYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCh0eXBlb2YoUmVhZE9ubHlTdHJhdGVneSksIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0pOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKHR5cGVvZihMYXp5QmFycmllclN0cmF0ZWd5KSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1sxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkSW5jbHVkZU9uZVN0cmF0ZWd5SW5CeXRlY29kZVdoZW5HaXZlblRvV2l0aG91dFN0cmF0ZWdpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZWFkT25seVN0cmF0ZWd5KSkuQnl0ZWNvZGU7Ci0KLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIndpdGhvdXRTdHJhdGVnaWVzIiwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwodHlwZW9mKFJlYWRPbmx5U3RyYXRlZ3kpLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzWzBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRJbmNsdWRlQ29uZmlndXJhdGlvbkluQnl0ZWNvZGVXaGVuR2l2ZW5Ub1dpdGhTdHJhdGVnaWVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGcgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UoKTsKLQotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gZy5XaXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSgiZ3JlZWR5IikpLkJ5dGVjb2RlOwotCi0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ3aXRoU3RyYXRlZ2llcyIsIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCksIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0pOwotICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJncmVlZHkiLAotICAgICAgICAgICAgICAgICgoTWF0Y2hBbGdvcml0aG1TdHJhdGVneSkgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSEpLkNvbmZpZ3VyYXRpb24uVmFsdWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRJbmNsdWRlTXVsdGlwbGVTdHJhdGVnaWVzSW5CeXRlY29kZVdoZW5HaXZlblRvV2l0aFN0cmF0ZWdpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBnLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIG5ldyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKS5CeXRlY29kZTsKLQotICAgICAgICAgICAgQXNzZXJ0LlNpbmdsZShieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMuTGVuZ3RoKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgid2l0aFN0cmF0ZWdpZXMiLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMF0uT3BlcmF0b3JOYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgUmVhZE9ubHlTdHJhdGVneSgpLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzWzBdKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1sxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkSW5jbHVkZU9uZVN0cmF0ZWd5SW5CeXRlY29kZVdoZW5HaXZlblRvV2l0aFN0cmF0ZWdpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBnLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLkJ5dGVjb2RlOwotCi0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuU2luZ2xlKGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHMpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ3aXRoU3RyYXRlZ2llcyIsIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0pOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJSZWFkT25seVN0cmF0ZWd5IiwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSEuVG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IFJlYWRPbmx5U3RyYXRlZ3koKS5HZXRIYXNoQ29kZSgpLAotICAgICAgICAgICAgICAgIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0hLkdldEhhc2hDb2RlKCkpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDAsIGcuVHJhdmVyc2FsU3RyYXRlZ2llcy5Db3VudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgVHJhdmVyc2FsV2l0aFN0cmF0ZWdpZXNfU3RyYXRlZ2llc19BcHBseVRvUmV1c2VkR3JhcGhUcmF2ZXJzYWxTb3VyY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIG5ldyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKTsKLQotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gZy5WKCkuQnl0ZWNvZGU7Ci0KLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyLCBieXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzLkxlbmd0aCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIndpdGhTdHJhdGVnaWVzIiwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCksIGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMV0pOwotICAgICAgICAgICAgQXNzZXJ0LlNpbmdsZShieXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiViIsIGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnNbMF0uT3BlcmF0b3JOYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBUcmF2ZXJzYWxXaXRoU3RyYXRlZ2llc19TdHJhdGVneVdpdGhUcmF2ZXJzYWxJbkNvbmZpZ19JbmNsdWRlVHJhdmVyc2FsSW5JbkNvbmZpZ0luQnl0ZWNvZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOwotCi0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KF9fLkhhcygibmFtZSIsICJtYXJrbyIpLCBjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlKSkuQnl0ZWNvZGU7Ci0KLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIndpdGhTdHJhdGVnaWVzIiwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLk9wZXJhdG9yTmFtZSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IFN1YmdyYXBoU3RyYXRlZ3koKSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSk7Ci0gICAgICAgICAgICBTdWJncmFwaFN0cmF0ZWd5IHN0cmF0ZWd5ID0gYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSE7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwodHlwZW9mKEdyYXBoVHJhdmVyc2FsPG9iamVjdCwgb2JqZWN0PiksIHN0cmF0ZWd5LkNvbmZpZ3VyYXRpb25bInZlcnRpY2VzIl0hLkdldFR5cGUoKSk7Ci0gICAgICAgICAgICBJVHJhdmVyc2FsIHRyYXZlcnNhbCA9IHN0cmF0ZWd5LkNvbmZpZ3VyYXRpb25bInZlcnRpY2VzIl0hOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJoYXMiLCB0cmF2ZXJzYWwuQnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBMaXN0PHN0cmluZz4geyJuYW1lIiwgIm1hcmtvIn0sIHRyYXZlcnNhbC5CeXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZmFsc2UsIHN0cmF0ZWd5LkNvbmZpZ3VyYXRpb25bImNoZWNrQWRqYWNlbnRWZXJ0aWNlcyJdKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uL0dyYXBoVHJhdmVyc2FsU291cmNlVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uL0dyYXBoVHJhdmVyc2FsU291cmNlVGVzdHMuY3MKaW5kZXggMTUxZjYwZi4uNDVjM2IwYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi9HcmFwaFRyYXZlcnNhbFNvdXJjZVRlc3RzLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24vR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0cy5jcwpAQCAtNTAsMTYgKzUwLDYgQEAKICAgICAgICAgICAgIEFzc2VydC5Db250YWlucygicGV0ZXIiLCByZXN1bHRzKTsKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkSGFuZGxlTGFtYmRhc0luV2l0aFNhY2soKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IF9jb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVSZW1vdGVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICB2YXIgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS5UcmF2ZXJzYWwoKS5XaXRoKGNvbm5lY3Rpb24pOwogCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMjQuMCwgZy5XaXRoU2FjaygxLjAsIChJVW5hcnlPcGVyYXRvcikgTGFtYmRhLkdyb292eSgieCAtPiB4ICsgMSIpKS5WKCkuQm90aCgpLlNhY2s8ZG91YmxlPigpLlN1bTxkb3VibGU+KCkuTmV4dCgpKTsgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyNC4wLCBnLldpdGhTYWNrKChJU3VwcGxpZXIpIExhbWJkYS5Hcm9vdnkoInsxLjBkfSIpLCAoSVVuYXJ5T3BlcmF0b3IpIExhbWJkYS5Hcm9vdnkoInggLT4geCArIDEiKSkuVigpLkJvdGgoKS5TYWNrPGRvdWJsZT4oKS5TdW08ZG91YmxlPigpLk5leHQoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoNDguMCwgZy5XaXRoU2FjaygxLjAsIChJQmluYXJ5T3BlcmF0b3IpIExhbWJkYS5Hcm9vdnkoIngsIHkgLT4geCArIHkgKyAxIikpLlYoKS5Cb3RoKCkuU2Fjazxkb3VibGU+KCkuU3VtPGRvdWJsZT4oKS5OZXh0KCkpOyAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDQ4LjAsIGcuV2l0aFNhY2soKElTdXBwbGllcikgTGFtYmRhLkdyb292eSgiezEuMGR9IiksIChJQmluYXJ5T3BlcmF0b3IpIExhbWJkYS5Hcm9vdnkoIngsIHkgLT4geCArIHkgKyAxIikpLlYoKS5Cb3RoKCkuU2Fjazxkb3VibGU+KCkuU3VtPGRvdWJsZT4oKS5OZXh0KCkpOyAgICAgICAKLSAgICAgICAgfQogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uL0dyYXBoVHJhdmVyc2FsVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uL0dyYXBoVHJhdmVyc2FsVGVzdHMuY3MKaW5kZXggZDZkMWNkNS4uNzE4ZTBmYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi9HcmFwaFRyYXZlcnNhbFRlc3RzLmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24vR3JhcGhUcmF2ZXJzYWxUZXN0cy5jcwpAQCAtMjcsNyArMjcsNiBAQAogdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zOwotdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwogdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7CiB1c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmU7CiB1c2luZyBYdW5pdDsKQEAgLTU2LDggKzU1LDcgQEAKICAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZVJlbW90ZUNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgoY29ubmVjdGlvbik7CiAKLSAgICAgICAgICAgIHZhciBiID0gQmluZGluZ3MuSW5zdGFuY2U7Ci0gICAgICAgICAgICB2YXIgY291bnQgPSBnLlYoKS5IYXMoInBlcnNvbiIsICJhZ2UiLCBiLk9mKCJ4IiwgUC5MdCgzMCkpKS5Db3VudCgpLk5leHQoKTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IGcuVigpLkhhcygicGVyc29uIiwgImFnZSIsIFAuTHQoMzApKS5Db3VudCgpLk5leHQoKTsKIAogICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIGNvdW50KTsKICAgICAgICAgfQpAQCAtMTU0LDEzICsxNTIsOSBAQAogICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChjb25uZWN0aW9uKTsKIAogICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGcuVigxKS5WYWx1ZU1hcDxzdHJpbmcsIElMaXN0PG9iamVjdD4+KCkuTmV4dCgpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKAotICAgICAgICAgICAgICAgIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgSUxpc3Q8b2JqZWN0Pj4KLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHsgImFnZSIsIG5ldyBMaXN0PG9iamVjdD4geyAyOSB9IH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiLCBuZXcgTGlzdDxvYmplY3Q+IHsgIm1hcmtvIiB9IH0KLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShyZXN1bHQuQ291bnQgPj0gMik7IC8vIC5ORVQgbWF5IHJlY2VpdmUgYW4gZXh0cmEgaGFsdGVkVHJhdmVyc2VycyBrZXkgZnJvbSB0aGUgc2VydmVyIHdoaWNoIHdlIGN1cnJlbnRseSBqdXN0IGlnbm9yZQorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBMaXN0PG9iamVjdD4geyAyOSB9LCByZXN1bHRbImFnZSJdKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgTGlzdDxvYmplY3Q+IHsgIm1hcmtvIiB9LCByZXN1bHRbIm5hbWUiXSk7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KQEAgLTE5MSwxMyArMTg1LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZGluZ3NJblRyYXZlcnNhbCgpCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFVzZVBhcmFtZXRlcnNJblRyYXZlcnNhbCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZVJlbW90ZUNvbm5lY3Rpb24oKTsKICAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgoY29ubmVjdGlvbik7CiAKLSAgICAgICAgICAgIHZhciBiID0gbmV3IEJpbmRpbmdzKCk7Ci0gICAgICAgICAgICB2YXIgY291bnQgPSBnLlYoKS5IYXMoYi5PZigicHJvcGVydHlLZXkiLCAibmFtZSIpLCBiLk9mKCJwcm9wZXJ0eVZhbHVlIiwgIm1hcmtvIikpLk91dEUoKS5Db3VudCgpLk5leHQoKTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IGcuVigpLkhhcygibmFtZSIsICJtYXJrbyIpLk91dEUoKS5Db3VudCgpLk5leHQoKTsKIAogICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDMsIGNvdW50KTsKICAgICAgICAgfSAgCkBAIC0yMTUsMTIgKzIwOCw2IEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIHZhciBjb3VudFdpdGhTdHJhdGVneSA9IGcuV2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneShvcHRpb25zKSkuVigpLkNvdW50KCkuTmV4dCgpOwogICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDYsIGNvdW50V2l0aFN0cmF0ZWd5KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHJlc3BvbnNlRXhjZXB0aW9uID0gQXNzZXJ0LlRocm93czxSZXNwb25zZUV4Y2VwdGlvbj4oKCkgPT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuV2l0aCgieSIpLldpdGgoIngiLCAidGVzdCIpLldpdGgoVG9rZW5zLkFyZ3NFdmFsVGltZW91dCwgMTApLkluamVjdCgxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5TaWRlRWZmZWN0KExhbWJkYS5Hcm9vdnkoIlRocmVhZC5zbGVlcCgxMDAwMCkiKSkuSXRlcmF0ZSgpKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChSZXNwb25zZVN0YXR1c0NvZGUuU2VydmVyVGltZW91dCwgcmVzcG9uc2VFeGNlcHRpb24uU3RhdHVzQ29kZSk7Ci0KICAgICAgICAgfQogCiAgICAgICAgIFtGYWN0XQpAQCAtMjcyLDcgKzI1OSw4IEBACiAgICAgICAgICAgICBBc3NlcnQuVHJ1ZShhd2FpdCBnLlYoKS5Qcm9taXNlKHQgPT4gdC5IYXNOZXh0KCksIENhbmNlbGxhdGlvblRva2VuLk5vbmUpKTsKICAgICAgICAgfQogCi0gICAgICAgIFtGYWN0XQorICAgICAgICAvLyBUT0RPOiB1cGRhdGUgYWZ0ZXIgdHggaXMgaW1wbGVtZW50ZWQgaW4gNC4wCisgICAgICAgIFtGYWN0IChTa2lwID0gInRyYW5zYWN0aW9uLXJlbGF0ZWQgdGVzdHMgYXJlIGRpc2FibGVkIHVudGlsIFR4IGltcGxlbWVudGVkIildCiAgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFRocm93RXhjZXB0aW9uT25Db21taXRXaGVuR3JhcGhOb3RTdXBwb3J0VHgoKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IF9jb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVSZW1vdGVDb25uZWN0aW9uKCk7CkBAIC0yODIsNyArMjcwLDcgQEAKICAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiU2VydmVyRXJyb3I6IEdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zIiwgZXhjZXB0aW9uLk1lc3NhZ2UpOwogICAgICAgICB9CiAKLSAgICAgICAgW0ZhY3RdCisgICAgICAgIFtGYWN0IChTa2lwID0gInRyYW5zYWN0aW9uLXJlbGF0ZWQgdGVzdHMgYXJlIGRpc2FibGVkIHVudGlsIFR4IGltcGxlbWVudGVkIildCiAgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFRocm93RXhjZXB0aW9uT25Sb2xsYmFja1doZW5HcmFwaE5vdFN1cHBvcnRUeCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gX2Nvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZVJlbW90ZUNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24vR3JhcGhUcmF2ZXJzYWxUcmFuc2FjdGlvblRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi9HcmFwaFRyYXZlcnNhbFRyYW5zYWN0aW9uVGVzdHMuY3MKaW5kZXggN2E0MTMyNi4uN2Q5MzgzMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi9HcmFwaFRyYXZlcnNhbFRyYW5zYWN0aW9uVGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi9HcmFwaFRyYXZlcnNhbFRyYW5zYWN0aW9uVGVzdHMuY3MKQEAgLTMzLDcgKzMzLDggQEAKICAgICB7CiAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgSVJlbW90ZUNvbm5lY3Rpb24gX2Nvbm5lY3Rpb24gPSBuZXcgUmVtb3RlQ29ubmVjdGlvbkZhY3RvcnkoKS5DcmVhdGVSZW1vdGVDb25uZWN0aW9uKCJndHgiKTsKIAotICAgICAgICBbRmFjdF0KKyAgICAgICAgLy8gVE9ETzogdXBkYXRlIGFmdGVyIHR4IGlzIGltcGxlbWVudGVkIGluIDQuMAorICAgICAgICBbRmFjdChTa2lwID0gInRyYW5zYWN0aW9uLXJlbGF0ZWQgdGVzdHMgYXJlIGRpc2FibGVkIHVudGlsIFR4IGltcGxlbWVudGVkIildCiAgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFN1cHBvcnRSZW1vdGVUcmFuc2FjdGlvbnNDb21taXQoKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS5UcmF2ZXJzYWwoKS5XaXRoKF9jb25uZWN0aW9uKTsKQEAgLTU3LDcgKzU4LDggQEAKICAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyLCBjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFtGYWN0XQorICAgICAgICAvLyBUT0RPOiB1cGRhdGUgYWZ0ZXIgdHggaXMgaW1wbGVtZW50ZWQgaW4gNC4wCisgICAgICAgIFtGYWN0KFNraXAgPSAidHJhbnNhY3Rpb24tcmVsYXRlZCB0ZXN0cyBhcmUgZGlzYWJsZWQgdW50aWwgVHggaW1wbGVtZW50ZWQiKV0KICAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU3VwcG9ydFJlbW90ZVRyYW5zYWN0aW9uc1JvbGxiYWNrKCkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChfY29ubmVjdGlvbik7CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uL1JlbW90ZUNvbm5lY3Rpb25GYWN0b3J5LmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi9SZW1vdGVDb25uZWN0aW9uRmFjdG9yeS5jcwppbmRleCBlNjNhZTMwLi4wODg0YTEwIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uL1JlbW90ZUNvbm5lY3Rpb25GYWN0b3J5LmNzCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24vUmVtb3RlQ29ubmVjdGlvbkZhY3RvcnkuY3MKQEAgLTI1LDcgKzI1LDcgQEAKIHVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwogdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5SZW1vdGU7Ci11c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT047Cit1c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0OwogdXNpbmcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbkltcGwgPSBHcmVtbGluLk5ldC5Ecml2ZXIuUmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CiAKIG5hbWVzcGFjZSBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuUHJvY2Vzcy5UcmF2ZXJzYWwuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgICAgIHB1YmxpYyBSZW1vdGVDb25uZWN0aW9uRmFjdG9yeShJTWVzc2FnZVNlcmlhbGl6ZXI/IG1lc3NhZ2VTZXJpYWxpemVyID0gbnVsbCkKICAgICAgICAgewotICAgICAgICAgICAgX21lc3NhZ2VTZXJpYWxpemVyID0gbWVzc2FnZVNlcmlhbGl6ZXIgPz8gbmV3IEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgICAgICAgICBfbWVzc2FnZVNlcmlhbGl6ZXIgPSBtZXNzYWdlU2VyaWFsaXplciA/PyBuZXcgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBJUmVtb3RlQ29ubmVjdGlvbiBDcmVhdGVSZW1vdGVDb25uZWN0aW9uKGludCBjb25uZWN0aW9uUG9vbFNpemUgPSAyKQpAQCAtNjEsOCArNjEsNyBAQAogICAgICAgICBwdWJsaWMgSUdyZW1saW5DbGllbnQgQ3JlYXRlQ2xpZW50KElNZXNzYWdlU2VyaWFsaXplcj8gbWVzc2FnZVNlcmlhbGl6ZXIgPSBudWxsLCBpbnQgY29ubmVjdGlvblBvb2xTaXplID0gMikKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGMgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcihUZXN0SG9zdCwgVGVzdFBvcnQpLAotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlU2VyaWFsaXplciA/PyBfbWVzc2FnZVNlcmlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3M6IG5ldygpIHsgUG9vbFNpemUgPSBjb25uZWN0aW9uUG9vbFNpemUgfSk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VTZXJpYWxpemVyID8/IF9tZXNzYWdlU2VyaWFsaXplcik7CiAKICAgICAgICAgICAgIF9jbGVhblVwLkFkZChjKTsKICAgICAgICAgICAgIHJldHVybiBjOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhTT05Xcml0ZXJUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyYXBoU09OV3JpdGVyVGVzdHMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0OTA3MDAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhTT05Xcml0ZXJUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci11c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT047Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC5Qcm9jZXNzLlRyYXZlcnNhbAotewotICAgIHB1YmxpYyBjbGFzcyBHcmFwaFNPTldyaXRlclRlc3RzCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJhbWV0ZXJzIGZvciBlYWNoIHRlc3Qgc3VwcG9ydGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBHcmFwaFNPTgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPG9iamVjdFtdPiBWZXJzaW9ucyA9PiBuZXcgW10KLSAgICAgICAgewotICAgICAgICAgICAgbmV3IG9iamVjdFtdIHsgMiB9LAotICAgICAgICAgICAgbmV3IG9iamVjdFtdIHsgMyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplTG9uZ1ByZWRpY2F0ZUNvcnJlY3RseShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgdmFyIHByZWRpY2F0ZSA9IFAuTHQoImIiKS5PcihQLkd0KCJjIikpLkFuZChQLk5lcSgiZCIpKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KHByZWRpY2F0ZSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOlBcIixcIkB2YWx1ZVwiOntcInByZWRpY2F0ZVwiOlwiYW5kXCIsXCJ2YWx1ZVwiOlt7XCJAdHlwZVwiOlwiZzpQXCIsXCJAdmFsdWVcIjp7XCJwcmVkaWNhdGVcIjpcIm9yXCIsXCJ2YWx1ZVwiOlt7XCJAdHlwZVwiOlwiZzpQXCIsXCJAdmFsdWVcIjp7XCJwcmVkaWNhdGVcIjpcImx0XCIsXCJ2YWx1ZVwiOlwiYlwifX0se1wiQHR5cGVcIjpcImc6UFwiLFwiQHZhbHVlXCI6e1wicHJlZGljYXRlXCI6XCJndFwiLFwidmFsdWVcIjpcImNcIn19XX19LHtcIkB0eXBlXCI6XCJnOlBcIixcIkB2YWx1ZVwiOntcInByZWRpY2F0ZVwiOlwibmVxXCIsXCJ2YWx1ZVwiOlwiZFwifX1dfX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIEdyYXBoU09OV3JpdGVyIENyZWF0ZUdyYXBoU09OV3JpdGVyKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmVyc2lvbiA9PSAzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT04zV3JpdGVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OMldyaXRlcigpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nR2VuZXJhdGlvbi9HcmVtbGluTGFuZ0dlbmVyYXRpb25UZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nR2VuZXJhdGlvbi9HcmVtbGluTGFuZ0dlbmVyYXRpb25UZXN0cy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWMwMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JlbWxpbkxhbmdHZW5lcmF0aW9uL0dyZW1saW5MYW5nR2VuZXJhdGlvblRlc3RzLmNzCkBAIC0wLDAgKzEsOTQgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC5Qcm9jZXNzLlRyYXZlcnNhbC5HcmVtbGluTGFuZ0dlbmVyYXRpb24KK3sKKyAgICBwdWJsaWMgY2xhc3MgR3JlbWxpbkxhbmdHZW5lcmF0aW9uVGVzdHMKKyAgICB7CisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBHcmFwaFRyYXZlcnNhbFN0ZXBzU2hvdWxkVW5yb2xsUGFyYW1zUGFyYW1ldGVycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7CisKKyAgICAgICAgICAgIHZhciBncmVtbGluID0gZy5WKCkuSGFzTGFiZWwoImZpcnN0TGFiZWwiLCAic2Vjb25kTGFiZWwiLCAidGhpcmRMYWJlbCIpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKTsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXNMYWJlbChcImZpcnN0TGFiZWxcIixcInNlY29uZExhYmVsXCIsXCJ0aGlyZExhYmVsXCIpIiwgZ3JlbWxpbik7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX091dFhjcmVhdGVkWCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7CisKKyAgICAgICAgICAgIHZhciBncmVtbGluID0gZy5WKCkuT3V0KCJjcmVhdGVkIikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLm91dChcImNyZWF0ZWRcIikiLCBncmVtbGluKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1dpdGhTYWNrWDFYX0VfR3JvdXBDb3VudF9CeVh3ZWlnaHRYKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChudWxsKTsKKworICAgICAgICAgICAgdmFyIGdyZW1saW4gPSBnLldpdGhTYWNrKDEpLkUoKS5Hcm91cENvdW50PGRvdWJsZT4oKS5CeSgid2VpZ2h0IikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcud2l0aFNhY2soMSkuRSgpLmdyb3VwQ291bnQoKS5ieShcIndlaWdodFwiKSIsIGdyZW1saW4pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0WDFfMl8zWCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7CisKKyAgICAgICAgICAgIHZhciBncmVtbGluID0gZy5JbmplY3QoMSwgMiwgMykuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuaW5qZWN0KDEsMiwzKSIsIGdyZW1saW4pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIEFub255bW91c1RyYXZlcnNhbF9TdGFydF9FbXB0eUdyZW1saW5MYW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGdyZW1saW5MYW5nID0gX18uU3RhcnQoKS5HcmVtbGluTGFuZzsKKworICAgICAgICAgICAgQXNzZXJ0LlRydWUoZ3JlbWxpbkxhbmcuSXNFbXB0eSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgQW5vbnltb3VzVHJhdmVyc2FsX1ZYbnVsbFgoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZ3JlbWxpbiA9IF9fLlYobnVsbCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworCisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIi5WKG51bGwpIiwgZ3JlbWxpbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBBbm9ueW1vdXNUcmF2ZXJzYWxfT3V0WG51bGxYKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IF9fLk91dChudWxsISkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JlbWxpbkxhbmdHZW5lcmF0aW9uL1N0cmF0ZWdpZXNUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nR2VuZXJhdGlvbi9TdHJhdGVnaWVzVGVzdHMuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4ZWQyNQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nR2VuZXJhdGlvbi9TdHJhdGVnaWVzVGVzdHMuY3MKQEAgLTAsMCArMSwxMjEgQEAKK++7vyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneS5EZWNvcmF0aW9uOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRmluYWxpemF0aW9uOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuT3B0aW1pemF0aW9uOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuVmVyaWZpY2F0aW9uOwordXNpbmcgWHVuaXQ7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QuUHJvY2Vzcy5UcmF2ZXJzYWwuR3JlbWxpbkxhbmdHZW5lcmF0aW9uCit7CisgICAgcHVibGljIGNsYXNzIFN0cmF0ZWdpZXNUZXN0cworICAgIHsKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFRyYXZlcnNhbFdpdGhvdXRTdHJhdGVnaWVzX0FmdGVyV2l0aFN0cmF0ZWdpZXNXYXNDYWxsZWRfV2l0aFN0cmF0ZWdpZXNOb3RBZmZlY3RlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKCkuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSwgbmV3IEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpOworCisgICAgICAgICAgICB2YXIgZ3JlbWxpbiA9IGcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFJlYWRPbmx5U3RyYXRlZ3kpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygid2l0aFN0cmF0ZWdpZXMoIiwgZ3JlbWxpbik7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIndpdGhvdXRTdHJhdGVnaWVzKCIsIGdyZW1saW4pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEluY2x1ZGVNdWx0aXBsZVN0cmF0ZWdpZXNJbkdyZW1saW5MYW5nV2hlbkdpdmVuVG9XaXRob3V0U3RyYXRlZ2llcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKCk7CisKKyAgICAgICAgICAgIHZhciBncmVtbGluID0gZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVhZE9ubHlTdHJhdGVneSksIHR5cGVvZihMYXp5QmFycmllclN0cmF0ZWd5KSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworCisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIndpdGhvdXRTdHJhdGVnaWVzKCIsIGdyZW1saW4pOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJSZWFkT25seVN0cmF0ZWd5IiwgZ3JlbWxpbik7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIkxhenlCYXJyaWVyU3RyYXRlZ3kiLCBncmVtbGluKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRJbmNsdWRlT25lU3RyYXRlZ3lJbkdyZW1saW5MYW5nV2hlbkdpdmVuVG9XaXRob3V0U3RyYXRlZ2llcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKCk7CisKKyAgICAgICAgICAgIHZhciBncmVtbGluID0gZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVhZE9ubHlTdHJhdGVneSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKTsKKworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJ3aXRob3V0U3RyYXRlZ2llcygiLCBncmVtbGluKTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiUmVhZE9ubHlTdHJhdGVneSIsIGdyZW1saW4pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEluY2x1ZGVDb25maWd1cmF0aW9uSW5HcmVtbGluTGFuZ1doZW5HaXZlblRvV2l0aFN0cmF0ZWdpZXMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOworCisgICAgICAgICAgICB2YXIgZ3JlbWxpbiA9IGcuV2l0aFN0cmF0ZWdpZXMobmV3IE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3koImdyZWVkeSIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygid2l0aFN0cmF0ZWdpZXMoIiwgZ3JlbWxpbik7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkSW5jbHVkZU11bHRpcGxlU3RyYXRlZ2llc0luR3JlbWxpbkxhbmdXaGVuR2l2ZW5Ub1dpdGhTdHJhdGVnaWVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGcgPSBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UoKTsKKworICAgICAgICAgICAgdmFyIGdyZW1saW4gPSBnLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIG5ldyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygid2l0aFN0cmF0ZWdpZXMoIiwgZ3JlbWxpbik7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkSW5jbHVkZU9uZVN0cmF0ZWd5SW5HcmVtbGluTGFuZ1doZW5HaXZlblRvV2l0aFN0cmF0ZWdpZXMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpOworCisgICAgICAgICAgICB2YXIgZ3JlbWxpbiA9IGcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworCisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIndpdGhTdHJhdGVnaWVzKCIsIGdyZW1saW4pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDAsIGcuVHJhdmVyc2FsU3RyYXRlZ2llcy5Db3VudCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgVHJhdmVyc2FsV2l0aFN0cmF0ZWdpZXNfU3RyYXRlZ2llc19BcHBseVRvUmV1c2VkR3JhcGhUcmF2ZXJzYWxTb3VyY2UoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZSgpLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIG5ldyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKTsKKworICAgICAgICAgICAgdmFyIGdyZW1saW4gPSBnLlYoKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygid2l0aFN0cmF0ZWdpZXMoIiwgZ3JlbWxpbik7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIi5WKCkiLCBncmVtbGluKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBUcmF2ZXJzYWxXaXRoU3RyYXRlZ2llc19TdHJhdGVneVdpdGhUcmF2ZXJzYWxJbkNvbmZpZ19JbmNsdWRlVHJhdmVyc2FsSW5HcmVtbGluTGFuZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBnID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKCk7CisKKyAgICAgICAgICAgIHZhciBncmVtbGluID0gZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShfXy5IYXMoIm5hbWUiLCAibWFya28iKSwgY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKTsKKworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJ3aXRoU3RyYXRlZ2llcygiLCBncmVtbGluKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1V0aWwvUmVxdWVzdE1lc3NhZ2VQcm92aWRlci5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuSW50ZWdyYXRpb25UZXN0L1V0aWwvUmVxdWVzdE1lc3NhZ2VQcm92aWRlci5jcwppbmRleCBhNmMwMGZjLi43ZWIwMThhIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC9VdGlsL1JlcXVlc3RNZXNzYWdlUHJvdmlkZXIuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5JbnRlZ3JhdGlvblRlc3QvVXRpbC9SZXF1ZXN0TWVzc2FnZVByb3ZpZGVyLmNzCkBAIC0yMSwzNCArMjEsMTUgQEAKIAogI2VuZHJlZ2lvbgogCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKIAogbmFtZXNwYWNlIEdyZW1saW4uTmV0LkludGVncmF0aW9uVGVzdC5VdGlsCiB7CiAgICAgaW50ZXJuYWwgY2xhc3MgUmVxdWVzdE1lc3NhZ2VQcm92aWRlcgogICAgIHsKLSAgICAgICAgcHVibGljIHN0cmluZyBHZXRTbGVlcEdyZW1saW5TY3JpcHQoaW50IHNsZWVwVGltZUluTXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAkIlRocmVhZC5zbGVlcCh7c2xlZXBUaW1lSW5Nc30pOyI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgR2V0U2xlZXBNZXNzYWdlKGludCBzbGVlcFRpbWVJbk1zKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZ3JlbWxpblNjcmlwdCA9ICQiVGhyZWFkLnNsZWVwKHtuYW1lb2Yoc2xlZXBUaW1lSW5Ncyl9KTsiOwotICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHt7bmFtZW9mKHNsZWVwVGltZUluTXMpLCBzbGVlcFRpbWVJbk1zfX07Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZS5CdWlsZChUb2tlbnMuT3BzRXZhbCkKLSAgICAgICAgICAgICAgICAgICAgLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzR3JlbWxpbiwgZ3JlbWxpblNjcmlwdCkKLSAgICAgICAgICAgICAgICAgICAgLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzQmluZGluZ3MsIGJpbmRpbmdzKQotICAgICAgICAgICAgICAgICAgICAuQ3JlYXRlKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgR2V0RHVtbXlNZXNzYWdlKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyZW1saW5TY3JpcHQgPSAiMSI7Ci0gICAgICAgICAgICByZXR1cm4gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0V2YWwpLkFkZEFyZ3VtZW50KFRva2Vucy5BcmdzR3JlbWxpbiwgZ3JlbWxpblNjcmlwdCkuQ3JlYXRlKCk7CisgICAgICAgICAgICByZXR1cm4gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuaW5qZWN0KDEpIikuQ3JlYXRlKCk7CiAgICAgICAgIH0KICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvQXV0aFRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvQXV0aFRlc3RzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZjUyMzkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9BdXRoVGVzdHMuY3MKQEAgLTAsMCArMSwyNDUgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5OwordXNpbmcgU3lzdGVtLlRleHQ7Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwordXNpbmcgQW1hem9uLlJ1bnRpbWU7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LkRyaXZlcgoreworICAgIHB1YmxpYyBjbGFzcyBBdXRoVGVzdHMKKyAgICB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIEh0dHBSZXF1ZXN0Q29udGV4dCBDcmVhdGVUZXN0Q29udGV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KCJQT1NUIiwgbmV3IFVyaSgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKSwKKyAgICAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4oKSwgbmV3IGJ5dGVbXSB7IDB4MDEgfSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgQmFzaWNBdXRoU2hvdWxkU2V0Q29ycmVjdEF1dGhvcml6YXRpb25IZWFkZXIoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLkJhc2ljQXV0aCgidXNlciIsICJwYXNzIik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IENyZWF0ZVRlc3RDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGF3YWl0IGludGVyY2VwdG9yKGNvbnRleHQpOworCisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSAiQmFzaWMgIiArIENvbnZlcnQuVG9CYXNlNjRTdHJpbmcoRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygidXNlcjpwYXNzIikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBjb250ZXh0LkhlYWRlcnNbIkF1dGhvcml6YXRpb24iXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgQmFzaWNBdXRoU2hvdWxkU2V0SGVhZGVyT25FdmVyeUludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLkJhc2ljQXV0aCgidXNlciIsICJwYXNzIik7CisgICAgICAgICAgICB2YXIgY29udGV4dDEgPSBDcmVhdGVUZXN0Q29udGV4dCgpOworICAgICAgICAgICAgdmFyIGNvbnRleHQyID0gQ3JlYXRlVGVzdENvbnRleHQoKTsKKworICAgICAgICAgICAgYXdhaXQgaW50ZXJjZXB0b3IoY29udGV4dDEpOworICAgICAgICAgICAgYXdhaXQgaW50ZXJjZXB0b3IoY29udGV4dDIpOworCisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSAiQmFzaWMgIiArIENvbnZlcnQuVG9CYXNlNjRTdHJpbmcoRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygidXNlcjpwYXNzIikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBjb250ZXh0MS5IZWFkZXJzWyJBdXRob3JpemF0aW9uIl0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBjb250ZXh0Mi5IZWFkZXJzWyJBdXRob3JpemF0aW9uIl0pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIEJhc2ljQXV0aFNob3VsZEhhbmRsZUNvbG9uc0luUGFzc3dvcmQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLkJhc2ljQXV0aCgidXNlciIsICJwYXNzOndpdGg6Y29sb25zIik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IENyZWF0ZVRlc3RDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGF3YWl0IGludGVyY2VwdG9yKGNvbnRleHQpOworCisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSAiQmFzaWMgIiArIENvbnZlcnQuVG9CYXNlNjRTdHJpbmcoCisgICAgICAgICAgICAgICAgRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygidXNlcjpwYXNzOndpdGg6Y29sb25zIikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBjb250ZXh0LkhlYWRlcnNbIkF1dGhvcml6YXRpb24iXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgQmFzaWNBdXRoU2hvdWxkSGFuZGxlVW5pY29kZUNoYXJhY3RlcnMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLkJhc2ljQXV0aCgi55So5oi3IiwgIuWvhueggSIpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBDcmVhdGVUZXN0Q29udGV4dCgpOworCisgICAgICAgICAgICBhd2FpdCBpbnRlcmNlcHRvcihjb250ZXh0KTsKKworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gIkJhc2ljICIgKyBDb252ZXJ0LlRvQmFzZTY0U3RyaW5nKAorICAgICAgICAgICAgICAgIEVuY29kaW5nLlVURjguR2V0Qnl0ZXMoIueUqOaItzrlr4bnoIEiKSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGNvbnRleHQuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBCYXNpY0F1dGhTaG91bGRPdmVyd3JpdGVFeGlzdGluZ0F1dGhvcml6YXRpb25IZWFkZXIoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLkJhc2ljQXV0aCgidXNlciIsICJwYXNzIik7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IENyZWF0ZVRlc3RDb250ZXh0KCk7CisgICAgICAgICAgICBjb250ZXh0LkhlYWRlcnNbIkF1dGhvcml6YXRpb24iXSA9ICJCZWFyZXIgb2xkLXRva2VuIjsKKworICAgICAgICAgICAgYXdhaXQgaW50ZXJjZXB0b3IoY29udGV4dCk7CisKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9ICJCYXNpYyAiICsgQ29udmVydC5Ub0Jhc2U2NFN0cmluZyhFbmNvZGluZy5VVEY4LkdldEJ5dGVzKCJ1c2VyOnBhc3MiKSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGNvbnRleHQuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBCYXNpY0F1dGhTaG91bGRIYW5kbGVFbXB0eUNyZWRlbnRpYWxzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9yID0gQXV0aC5CYXNpY0F1dGgoIiIsICIiKTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gQ3JlYXRlVGVzdENvbnRleHQoKTsKKworICAgICAgICAgICAgYXdhaXQgaW50ZXJjZXB0b3IoY29udGV4dCk7CisKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9ICJCYXNpYyAiICsgQ29udmVydC5Ub0Jhc2U2NFN0cmluZyhFbmNvZGluZy5VVEY4LkdldEJ5dGVzKCI6IikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBjb250ZXh0LkhlYWRlcnNbIkF1dGhvcml6YXRpb24iXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLS0gU2lnVjQgVGVzdHMgLS0tCisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQmFzaWNBV1NDcmVkZW50aWFscyBUZXN0QmFzaWNDcmVkZW50aWFscyA9CisgICAgICAgICAgICBuZXcgQmFzaWNBV1NDcmVkZW50aWFscygiTU9DS19JRCIsICJNT0NLX0tFWSIpOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNlc3Npb25BV1NDcmVkZW50aWFscyBUZXN0U2Vzc2lvbkNyZWRlbnRpYWxzID0KKyAgICAgICAgICAgIG5ldyBTZXNzaW9uQVdTQ3JlZGVudGlhbHMoIk1PQ0tfSUQiLCAiTU9DS19LRVkiLCAiTU9DS19UT0tFTiIpOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIEh0dHBSZXF1ZXN0Q29udGV4dCBDcmVhdGVTaWd2NFRlc3RDb250ZXh0KGJ5dGVbXT8gYm9keSA9IG51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KCJQT1NUIiwgbmV3IFVyaSgiaHR0cHM6Ly9leGFtcGxlLmNvbTo4MTgyL2dyZW1saW4iKSwKKyAgICAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAiQWNjZXB0IiwgImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIiB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgYm9keSA/PyBuZXcgYnl0ZVtdIHsgMHg4NCwgMHgwMCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaWdWNEF1dGhTaG91bGRBZGRSZXF1aXJlZEhlYWRlcnMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLlNpZ1Y0QXV0aCgiZ3JlbWxpbi1lYXN0LTEiLCAidGlua2VycG9wLXNpZ3Y0IiwgVGVzdEJhc2ljQ3JlZGVudGlhbHMpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBDcmVhdGVTaWd2NFRlc3RDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGF3YWl0IGludGVyY2VwdG9yKGNvbnRleHQpOworCisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShjb250ZXh0LkhlYWRlcnMuQ29udGFpbnNLZXkoIkF1dGhvcml6YXRpb24iKSk7CisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShjb250ZXh0LkhlYWRlcnMuQ29udGFpbnNLZXkoIlgtQW16LURhdGUiKSk7CisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShjb250ZXh0LkhlYWRlcnMuQ29udGFpbnNLZXkoIngtYW16LWNvbnRlbnQtc2hhMjU2IikpOworICAgICAgICAgICAgQXNzZXJ0LlRydWUoY29udGV4dC5IZWFkZXJzLkNvbnRhaW5zS2V5KCJIb3N0IikpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNpZ1Y0QXV0aFNob3VsZEhhdmVDb3JyZWN0QXV0aG9yaXphdGlvblByZWZpeCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvciA9IEF1dGguU2lnVjRBdXRoKCJncmVtbGluLXdlc3QtMiIsICJ0aW5rZXJwb3Atc2lndjQiLCBUZXN0QmFzaWNDcmVkZW50aWFscyk7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IENyZWF0ZVNpZ3Y0VGVzdENvbnRleHQoKTsKKworICAgICAgICAgICAgYXdhaXQgaW50ZXJjZXB0b3IoY29udGV4dCk7CisKKyAgICAgICAgICAgIEFzc2VydC5TdGFydHNXaXRoKCJBV1M0LUhNQUMtU0hBMjU2IENyZWRlbnRpYWw9TU9DS19JRCIsIGNvbnRleHQuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdKTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiZ3JlbWxpbi13ZXN0LTIvdGlua2VycG9wLXNpZ3Y0L2F3czRfcmVxdWVzdCIsIGNvbnRleHQuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaWdWNEF1dGhTaG91bGRBZGRTZXNzaW9uVG9rZW5Gb3JUZW1wb3JhcnlDcmVkZW50aWFscygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvciA9IEF1dGguU2lnVjRBdXRoKCJncmVtbGluLWVhc3QtMSIsICJ0aW5rZXJwb3Atc2lndjQiLCBUZXN0U2Vzc2lvbkNyZWRlbnRpYWxzKTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gQ3JlYXRlU2lndjRUZXN0Q29udGV4dCgpOworCisgICAgICAgICAgICBhd2FpdCBpbnRlcmNlcHRvcihjb250ZXh0KTsKKworICAgICAgICAgICAgQXNzZXJ0LlRydWUoY29udGV4dC5IZWFkZXJzLkNvbnRhaW5zS2V5KCJYLUFtei1TZWN1cml0eS1Ub2tlbiIpKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiTU9DS19UT0tFTiIsIGNvbnRleHQuSGVhZGVyc1siWC1BbXotU2VjdXJpdHktVG9rZW4iXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2lnVjRBdXRoU2hvdWxkTm90QWRkU2Vzc2lvblRva2VuRm9yUGVybWFuZW50Q3JlZGVudGlhbHMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLlNpZ1Y0QXV0aCgiZ3JlbWxpbi1lYXN0LTEiLCAidGlua2VycG9wLXNpZ3Y0IiwgVGVzdEJhc2ljQ3JlZGVudGlhbHMpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBDcmVhdGVTaWd2NFRlc3RDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGF3YWl0IGludGVyY2VwdG9yKGNvbnRleHQpOworCisgICAgICAgICAgICBBc3NlcnQuRmFsc2UoY29udGV4dC5IZWFkZXJzLkNvbnRhaW5zS2V5KCJYLUFtei1TZWN1cml0eS1Ub2tlbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaWdWNEF1dGhDb250ZW50SGFzaFNob3VsZE1hdGNoQm9keVNoYTI1NigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBib2R5ID0gbmV3IGJ5dGVbXSB7IDB4ODQsIDB4MDAsIDB4RkQsIDB4MDEgfTsKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvciA9IEF1dGguU2lnVjRBdXRoKCJncmVtbGluLWVhc3QtMSIsICJ0aW5rZXJwb3Atc2lndjQiLCBUZXN0QmFzaWNDcmVkZW50aWFscyk7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IENyZWF0ZVNpZ3Y0VGVzdENvbnRleHQoYm9keSk7CisKKyAgICAgICAgICAgIGF3YWl0IGludGVyY2VwdG9yKGNvbnRleHQpOworCisgICAgICAgICAgICB1c2luZyB2YXIgc2hhMjU2ID0gU0hBMjU2LkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIGV4cGVjdGVkSGFzaCA9IEJpdENvbnZlcnRlci5Ub1N0cmluZyhzaGEyNTYuQ29tcHV0ZUhhc2goYm9keSkpCisgICAgICAgICAgICAgICAgLlJlcGxhY2UoIi0iLCAiIikuVG9Mb3dlckludmFyaWFudCgpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkSGFzaCwgY29udGV4dC5IZWFkZXJzWyJ4LWFtei1jb250ZW50LXNoYTI1NiJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaWdWNEF1dGhTaG91bGRIYW5kbGVFbXB0eUJvZHkoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLlNpZ1Y0QXV0aCgiZ3JlbWxpbi1lYXN0LTEiLCAidGlua2VycG9wLXNpZ3Y0IiwgVGVzdEJhc2ljQ3JlZGVudGlhbHMpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBDcmVhdGVTaWd2NFRlc3RDb250ZXh0KEFycmF5LkVtcHR5PGJ5dGU+KCkpOworCisgICAgICAgICAgICBhd2FpdCBpbnRlcmNlcHRvcihjb250ZXh0KTsKKworICAgICAgICAgICAgQXNzZXJ0LlRydWUoY29udGV4dC5IZWFkZXJzLkNvbnRhaW5zS2V5KCJBdXRob3JpemF0aW9uIikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1IiwKKyAgICAgICAgICAgICAgICBjb250ZXh0LkhlYWRlcnNbIngtYW16LWNvbnRlbnQtc2hhMjU2Il0pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNpZ1Y0QXV0aFNob3VsZFNldENvcnJlY3RIb3N0KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9yID0gQXV0aC5TaWdWNEF1dGgoImdyZW1saW4tZWFzdC0xIiwgInRpbmtlcnBvcC1zaWd2NCIsIFRlc3RCYXNpY0NyZWRlbnRpYWxzKTsKKyAgICAgICAgICAgIHZhciBjb250ZXh0ID0gQ3JlYXRlU2lndjRUZXN0Q29udGV4dCgpOworCisgICAgICAgICAgICBhd2FpdCBpbnRlcmNlcHRvcihjb250ZXh0KTsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJleGFtcGxlLmNvbSIsIGNvbnRleHQuSGVhZGVyc1siSG9zdCJdKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaWdWNEF1dGhTaG91bGRUaHJvd1doZW5Cb2R5SXNOb3RCeXRlQXJyYXkoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSBBdXRoLlNpZ1Y0QXV0aCgiZ3JlbWxpbi1lYXN0LTEiLCAidGlua2VycG9wLXNpZ3Y0IiwgVGVzdEJhc2ljQ3JlZGVudGlhbHMpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KCJQT1NUIiwgbmV3IFVyaSgiaHR0cHM6Ly9leGFtcGxlLmNvbTo4MTgyL2dyZW1saW4iKSwKKyAgICAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHsgIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCIgfSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJub3QtYnl0ZXMiKTsKKworICAgICAgICAgICAgdmFyIGV4ID0gYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KAorICAgICAgICAgICAgICAgICgpID0+IGludGVyY2VwdG9yKGNvbnRleHQpKTsKKworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJieXRlW10iLCBleC5NZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0Nvbm5lY3Rpb25Qb29sU2V0dGluZ3NUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0Nvbm5lY3Rpb25Qb29sU2V0dGluZ3NUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QyNzg5Zi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9Db25uZWN0aW9uUG9vbFNldHRpbmdzVGVzdHMuY3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LkRyaXZlcgotewotICAgIHB1YmxpYyBjbGFzcyBDb25uZWN0aW9uUG9vbFNldHRpbmdzVGVzdHMKLSAgICB7Ci0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKDApXQotICAgICAgICBbSW5saW5lRGF0YSgtMSldCi0gICAgICAgIFtJbmxpbmVEYXRhKC0xMDApXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd0ZvckludmFsaWRQb29sU2l6ZShpbnQgaW52YWxpZFBvb2xTaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbj4oKCkgPT4gbmV3IENvbm5lY3Rpb25Qb29sU2V0dGluZ3Mge1Bvb2xTaXplID0gaW52YWxpZFBvb2xTaXplfSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKDApXQotICAgICAgICBbSW5saW5lRGF0YSgtMSldCi0gICAgICAgIFtJbmxpbmVEYXRhKC0xMDApXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd0ZvckludmFsaWRNYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKGludCBpbnZhbGlkTWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24+KCgpID0+IG5ldyBDb25uZWN0aW9uUG9vbFNldHRpbmdzCi0gICAgICAgICAgICAgICAge01heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBpbnZhbGlkTWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbn0pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgtMSldCi0gICAgICAgIFtJbmxpbmVEYXRhKC0xMDApXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd0ZvckludmFsaWRSZWNvbm5lY3Rpb25BdHRlbXB0cyhpbnQgcmVjb25uZWN0aW9uQXR0ZW1wdHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PiBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncwotICAgICAgICAgICAgICAgIHtSZWNvbm5lY3Rpb25BdHRlbXB0cyA9IHJlY29ubmVjdGlvbkF0dGVtcHRzfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgtMSldCi0gICAgICAgIFtJbmxpbmVEYXRhKC0xMDAwKV0KLSAgICAgICAgW0lubGluZURhdGEoMCldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFRocm93Rm9ySW52YWxpZFJlY29ubmVjdGlvbkJhc2VEZWxheShpbnQgYmFzZURlbGF5SW5NcykKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24+KCgpID0+IG5ldyBDb25uZWN0aW9uUG9vbFNldHRpbmdzCi0gICAgICAgICAgICAgICAge1JlY29ubmVjdGlvbkJhc2VEZWxheSA9IFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoYmFzZURlbGF5SW5Ncyl9KTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9Db25uZWN0aW9uUG9vbFRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvQ29ubmVjdGlvblBvb2xUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIxNDk3Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9Db25uZWN0aW9uUG9vbFRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMzk0ICswLDAgQEAKLSNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9uczsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKLXVzaW5nIE1pY3Jvc29mdC5FeHRlbnNpb25zLkxvZ2dpbmcuQWJzdHJhY3Rpb25zOwotdXNpbmcgTlN1YnN0aXR1dGU7Ci11c2luZyBOU3Vic3RpdHV0ZS5FeGNlcHRpb25FeHRlbnNpb25zOwotdXNpbmcgTlN1YnN0aXR1dGUuRXh0ZW5zaW9uczsKLXVzaW5nIFh1bml0OwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuRHJpdmVyCi17Ci0gICAgcHVibGljIGNsYXNzIENvbm5lY3Rpb25Qb29sVGVzdHMKLSAgICB7Ci0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKDEpXQotICAgICAgICBbSW5saW5lRGF0YSgyKV0KLSAgICAgICAgW0lubGluZURhdGEoMTApXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRFc3RhYmxpc2hDb25maWd1cmVkTnJDb25uZWN0aW9ucyhpbnQgcG9vbFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtb2NrZWRDb25uZWN0aW9uRmFjdG9yeSA9IFN1YnN0aXR1dGUuRm9yPElDb25uZWN0aW9uRmFjdG9yeT4oKTsKLSAgICAgICAgICAgIHZhciBtb2NrZWRDb25uZWN0aW9uID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb24+KCk7Ci0gICAgICAgICAgICBtb2NrZWRDb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhtb2NrZWRDb25uZWN0aW9uKTsKLSAgICAgICAgICAgIHZhciBwb29sID0gQ3JlYXRlQ29ubmVjdGlvblBvb2wobW9ja2VkQ29ubmVjdGlvbkZhY3RvcnksIHBvb2xTaXplKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKHBvb2xTaXplLCBwb29sLk5yQ29ubmVjdGlvbnMpOwotICAgICAgICAgICAgbW9ja2VkQ29ubmVjdGlvbkZhY3RvcnkuUmVjZWl2ZWQocG9vbFNpemUpLkNyZWF0ZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIG1vY2tlZENvbm5lY3Rpb24uUmVjZWl2ZWQocG9vbFNpemUpLkNvbm5lY3RBc3luYyhBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBHZXRBdmFpbGFibGVDb25uZWN0aW9uU2hvdWxkUmV0dXJuRmlyc3RPcGVuQ29ubmVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBmYWtlQ29ubmVjdGlvbkZhY3RvcnkgPSBTdWJzdGl0dXRlLkZvcjxJQ29ubmVjdGlvbkZhY3Rvcnk+KCk7Ci0gICAgICAgICAgICB2YXIgb3BlbkNvbm5lY3Rpb25Ub1JldHVybiA9IE9wZW5Db25uZWN0aW9uOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKS5SZXR1cm5zKF8gPT4gQ2xvc2VkQ29ubmVjdGlvbiwgXyA9PiBDbG9zZWRDb25uZWN0aW9uLAotICAgICAgICAgICAgICAgIF8gPT4gb3BlbkNvbm5lY3Rpb25Ub1JldHVybik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMyk7Ci0KLSAgICAgICAgICAgIHZhciByZXR1cm5lZENvbm5lY3Rpb24gPSBwb29sLkdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG9wZW5Db25uZWN0aW9uVG9SZXR1cm4sICgoUHJveHlDb25uZWN0aW9uKSByZXR1cm5lZENvbm5lY3Rpb24pLlByb3hpZWRDb25uZWN0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEdldEF2YWlsYWJsZUNvbm5lY3Rpb25TaG91bGRUaHJvd0lmQWxsQ29ubmVjdGlvbnNBcmVDbG9zZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmFrZUNvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKS5SZXR1cm5zKF8gPT4gQ2xvc2VkQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8U2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24+KCgpID0+IHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBHZXRBdmFpbGFibGVDb25uZWN0aW9uU2hvdWxkRW1wdHlQb29sSWZTZXJ2ZXJVbmF2YWlsYWJsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBmYWtlQ29ubmVjdGlvbkZhY3RvcnkgPSBTdWJzdGl0dXRlLkZvcjxJQ29ubmVjdGlvbkZhY3Rvcnk+KCk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpCi0gICAgICAgICAgICAgICAgLlJldHVybnMoXyA9PiBDbG9zZWRDb25uZWN0aW9uLCBfID0+IENsb3NlZENvbm5lY3Rpb24sIF8gPT4gQ2xvc2VkQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMyk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ29uZmlndXJlKCkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoXyA9PiBDYW5ub3RDb25uZWN0Q29ubmVjdGlvbik7Ci0KLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8U2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24+KCgpID0+IHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgwLCBwb29sLk5yQ29ubmVjdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgR2V0QXZhaWxhYmxlQ29ubmVjdGlvblNob3VsZEV2ZW50dWFsbHlSZWZpbGxQb29sSWZFbXB0eSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBmYWtlQ29ubmVjdGlvbkZhY3RvcnkgPSBTdWJzdGl0dXRlLkZvcjxJQ29ubmVjdGlvbkZhY3Rvcnk+KCk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpCi0gICAgICAgICAgICAgICAgLlJldHVybnMoXyA9PiBDbG9zZWRDb25uZWN0aW9uLCBfID0+IENsb3NlZENvbm5lY3Rpb24sIF8gPT4gQ2xvc2VkQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMyk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ29uZmlndXJlKCkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoXyA9PiBDYW5ub3RDb25uZWN0Q29ubmVjdGlvbik7Ci0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPFNlcnZlclVuYXZhaWxhYmxlRXhjZXB0aW9uPigoKSA9PiBwb29sLkdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKSk7Ci0gICAgICAgICAgICAvLyBQb29sIGlzIG5vdyBlbXB0eQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDAsIHBvb2wuTnJDb25uZWN0aW9ucyk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ29uZmlndXJlKCkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoXyA9PiBPcGVuQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnROck9wZW5Db25uZWN0aW9ucyhwb29sLCAzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBHZXRBdmFpbGFibGVDb25uZWN0aW9uc1Nob3VsZEV2ZW50dWFsbHlGaWxsVXBQb29sSWZOb3RGdWxsKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZha2VDb25uZWN0aW9uRmFjdG9yeSA9IFN1YnN0aXR1dGUuRm9yPElDb25uZWN0aW9uRmFjdG9yeT4oKTsKLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkKLSAgICAgICAgICAgICAgICAuUmV0dXJucyhfID0+IENsb3NlZENvbm5lY3Rpb24sIF8gPT4gQ2xvc2VkQ29ubmVjdGlvbiwgXyA9PiBPcGVuQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMyk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ29uZmlndXJlKCkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoXyA9PiBDYW5ub3RDb25uZWN0Q29ubmVjdGlvbik7Ci0gICAgICAgICAgICBwb29sLkdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgLy8gUG9vbCBpcyBub3cganVzdCBwYXJ0aWFsbHkgZmlsbGVkCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgcG9vbC5OckNvbm5lY3Rpb25zKTsgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5Db25maWd1cmUoKS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhfID0+IE9wZW5Db25uZWN0aW9uKTsKLSAgICAgICAgICAgIHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnROck9wZW5Db25uZWN0aW9ucyhwb29sLCAzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIEdldEF2YWlsYWJsZUNvbm5lY3Rpb25TaG91bGRSZXBsYWNlQ2xvc2VkQ29ubmVjdGlvbnMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmFrZUNvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKQotICAgICAgICAgICAgICAgIC5SZXR1cm5zKF8gPT4gQ2xvc2VkQ29ubmVjdGlvbiwgXyA9PiBDbG9zZWRDb25uZWN0aW9uLCBfID0+IE9wZW5Db25uZWN0aW9uKTsKLSAgICAgICAgICAgIHZhciBwb29sID0gQ3JlYXRlQ29ubmVjdGlvblBvb2woZmFrZUNvbm5lY3Rpb25GYWN0b3J5LCAzKTsKLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5Db25maWd1cmUoKS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhfID0+IE9wZW5Db25uZWN0aW9uKTsKLSAgICAgICAgICAgIHZhciBuckNyZWF0ZWRDb25uZWN0aW9ucyA9IHBvb2wuTnJDb25uZWN0aW9uczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcG9vbC5HZXRBdmFpbGFibGVDb25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBwb29sLkdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotCi0gICAgICAgICAgICBBc3NlcnROck9wZW5Db25uZWN0aW9ucyhwb29sLCBuckNyZWF0ZWRDb25uZWN0aW9ucyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIEFzc2VydE5yT3BlbkNvbm5lY3Rpb25zKENvbm5lY3Rpb25Qb29sIGNvbm5lY3Rpb25Qb29sLCBpbnQgZXhwZWN0ZWROckNvbm5lY3Rpb25zKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkTnJDb25uZWN0aW9uczsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gY29ubmVjdGlvblBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIEFzc2VydC5UcnVlKGNvbm5lY3Rpb24uSXNPcGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZE5yQ29ubmVjdGlvbnMsIGNvbm5lY3Rpb25Qb29sLk5yQ29ubmVjdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkTm90Q3JlYXRlTW9yZUNvbm5lY3Rpb25zVGhhbkNvbmZpZ3VyZWRGb3JQYXJhbGxlbFJlcXVlc3RzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1vY2tlZENvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgbW9ja2VkQ29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpCi0gICAgICAgICAgICAgICAgLlJldHVybnMoXyA9PiBDbG9zZWRDb25uZWN0aW9uLCBfID0+IENsb3NlZENvbm5lY3Rpb24sIF8gPT4gT3BlbkNvbm5lY3Rpb24pOwotICAgICAgICAgICAgdmFyIHBvb2wgPSBDcmVhdGVDb25uZWN0aW9uUG9vbChtb2NrZWRDb25uZWN0aW9uRmFjdG9yeSwgMyk7Ci0gICAgICAgICAgICBtb2NrZWRDb25uZWN0aW9uRmFjdG9yeS5Db25maWd1cmUoKS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhfID0+IE9wZW5Db25uZWN0aW9uKTsKLSAgICAgICAgICAgIHZhciBuckNyZWF0ZWRDb25uZWN0aW9ucyA9IHBvb2wuTnJDb25uZWN0aW9uczsKLSAgICAgICAgICAgIHZhciBnZXRDb25uZWN0aW9uVGFza3MgPSBuZXcgTGlzdDxUYXNrPElDb25uZWN0aW9uPj4oKTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZXRDb25uZWN0aW9uVGFza3MuQWRkKFRhc2suUnVuKCgpID0+IHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhd2FpdCBUYXNrLldoZW5BbGwoZ2V0Q29ubmVjdGlvblRhc2tzKTsKLQotICAgICAgICAgICAgYXdhaXQgVGFzay5EZWxheShUaW1lU3Bhbi5Gcm9tTWlsbGlzZWNvbmRzKDEwMCkpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5yQ3JlYXRlZENvbm5lY3Rpb25zLCBwb29sLk5yQ29ubmVjdGlvbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFJlcGxhY2VDb25uZWN0aW9uQ2xvc2VkRHVyaW5nU3VibWl0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1vY2tlZENvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgdmFyIGZha2VkQ29ubmVjdGlvbiA9IFN1YnN0aXR1dGUuRm9yPElDb25uZWN0aW9uPigpOwotICAgICAgICAgICAgZmFrZWRDb25uZWN0aW9uLklzT3Blbi5SZXR1cm5zKHRydWUpOwotICAgICAgICAgICAgbW9ja2VkQ29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoZmFrZWRDb25uZWN0aW9uKTsKLSAgICAgICAgICAgIHZhciBwb29sID0gQ3JlYXRlQ29ubmVjdGlvblBvb2wobW9ja2VkQ29ubmVjdGlvbkZhY3RvcnksIDEpOwotICAgICAgICAgICAgdmFyIHJldHVybmVkQ29ubmVjdGlvbiA9IHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgZmFrZWRDb25uZWN0aW9uLklzT3Blbi5SZXR1cm5zKGZhbHNlKTsKLSAgICAgICAgICAgIG1vY2tlZENvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKS5SZXR1cm5zKF8gPT4gT3BlbkNvbm5lY3Rpb24pOwotCi0gICAgICAgICAgICBhd2FpdCByZXR1cm5lZENvbm5lY3Rpb24uU3VibWl0QXN5bmM8Ym9vbD4oUmVxdWVzdE1lc3NhZ2UuQnVpbGQoc3RyaW5nLkVtcHR5KS5DcmVhdGUoKSwKLSAgICAgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKLSAgICAgICAgICAgIHJldHVybmVkQ29ubmVjdGlvbi5EaXNwb3NlKCk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgxLCBwb29sLk5yQ29ubmVjdGlvbnMpOwotICAgICAgICAgICAgQXNzZXJ0LlRydWUocG9vbC5HZXRBdmFpbGFibGVDb25uZWN0aW9uKCkuSXNPcGVuKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRXYWl0Rm9ySG9zdFRvQmVjb21lQXZhaWxhYmxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZha2VDb25uZWN0aW9uRmFjdG9yeSA9IFN1YnN0aXR1dGUuRm9yPElDb25uZWN0aW9uRmFjdG9yeT4oKTsKLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhfID0+IENsb3NlZENvbm5lY3Rpb24pOwotICAgICAgICAgICAgdmFyIHBvb2wgPSBDcmVhdGVDb25uZWN0aW9uUG9vbChmYWtlQ29ubmVjdGlvbkZhY3RvcnksIDEpOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNvbmZpZ3VyZSgpLkNyZWF0ZUNvbm5lY3Rpb24oKS5SZXR1cm5zKF8gPT4gT3BlbkNvbm5lY3Rpb24pOwotICAgICAgICAgICAgdmFyIG5yQ3JlYXRlZENvbm5lY3Rpb25zID0gcG9vbC5OckNvbm5lY3Rpb25zOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotCi0gICAgICAgICAgICBBc3NlcnROck9wZW5Db25uZWN0aW9ucyhwb29sLCBuckNyZWF0ZWRDb25uZWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuVHJ1ZShjb25uZWN0aW9uLklzT3Blbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgwKV0KLSAgICAgICAgW0lubGluZURhdGEoMSldCi0gICAgICAgIFtJbmxpbmVEYXRhKDIpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRQZXJmb3JtQ29uZmlndXJlZE5yUmVjb25uZWN0aW9uQXR0ZW1wdHNGb3JVbmF2YWlsYWJsZVNlcnZlcihpbnQgbnJBdHRlbXB0cykKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIG1vY2tlZENvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgbW9ja2VkQ29ubmVjdGlvbkZhY3RvcnkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoXyA9PiBDbG9zZWRDb25uZWN0aW9uKTsKLSAgICAgICAgICAgIHZhciBwb29sID0gQ3JlYXRlQ29ubmVjdGlvblBvb2wobW9ja2VkQ29ubmVjdGlvbkZhY3RvcnksIDEsIG5yQXR0ZW1wdHMpOwotCi0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzQW55PEV4Y2VwdGlvbj4oKCkgPT4gcG9vbC5HZXRBdmFpbGFibGVDb25uZWN0aW9uKCkpOwotCi0gICAgICAgICAgICBtb2NrZWRDb25uZWN0aW9uRmFjdG9yeS5SZWNlaXZlZChuckF0dGVtcHRzICsgMikuQ3JlYXRlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgLy8gMiBhZGRpdGlvbmFsIGNhbGxzIGFyZSBleHBlY3RlZDogMSBmb3IgdGhlIGluaXRpYWwgY3JlYXRpb24gb2YgdGhlIHBvb2wgYW5kIDEgd2hlbiB0aGUgY29ubmVjdGlvbiBzaG91bGQKLSAgICAgICAgICAgIC8vIGJlIHJldHVybmVkIGFuZCBub25lIGlzIG9wZW4gZm9yIHRoZSBmaXJzdCBhdHRlbXB0IChiZWZvcmUgYW55IHJldHJpZXMpCi0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVGhyb3dBZnRlcldhaXRpbmdUb29Mb25nRm9yVW5hdmFpbGFibGVTZXJ2ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmFrZUNvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKS5SZXR1cm5zKF8gPT4gQ2xvc2VkQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8U2VydmVyVW5hdmFpbGFibGVFeGNlcHRpb24+KCgpID0+IHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZE5vdExlYWtDb25uZWN0aW9uc0lmRGlzcG9zZUlzQ2FsbGVkV2hpbGVQb29sSXNQb3B1bGF0aW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGZha2VDb25uZWN0aW9uRmFjdG9yeSA9IFN1YnN0aXR1dGUuRm9yPElDb25uZWN0aW9uRmFjdG9yeT4oKTsKLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhfID0+IENsb3NlZENvbm5lY3Rpb24pOwotICAgICAgICAgICAgdmFyIHBvb2wgPSBDcmVhdGVDb25uZWN0aW9uUG9vbChmYWtlQ29ubmVjdGlvbkZhY3RvcnksIDEpOwotICAgICAgICAgICAgdmFyIG1vY2tlZENvbm5lY3Rpb25Ub0JlRGlzcG9zZWQgPSBTdWJzdGl0dXRlLkZvcjxJQ29ubmVjdGlvbj4oKTsKLSAgICAgICAgICAgIHZhciBwb29sV2FzRGlzcG9zZWRTaWduYWwgPSBuZXcgU2VtYXBob3JlU2xpbSgwLCAxKTsKLSAgICAgICAgICAgIG1vY2tlZENvbm5lY3Rpb25Ub0JlRGlzcG9zZWQuQ29ubmVjdEFzeW5jKEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpCi0gICAgICAgICAgICAgICAgLlJldHVybnMoeCA9PiBwb29sV2FzRGlzcG9zZWRTaWduYWwuV2FpdEFzeW5jKENhbmNlbGxhdGlvblRva2VuLk5vbmUpKTsKLSAgICAgICAgICAgIHZhciBjb25uZWN0aW9uV2FzU3VjY2Vzc2Z1bGx5RGlzcG9zZWQgPSBuZXcgU2VtYXBob3JlU2xpbSgwLCAxKTsKLSAgICAgICAgICAgIG1vY2tlZENvbm5lY3Rpb25Ub0JlRGlzcG9zZWQuV2hlbih4ID0+IHguRGlzcG9zZSgpKQotICAgICAgICAgICAgICAgIC5EbyhfID0+IGNvbm5lY3Rpb25XYXNTdWNjZXNzZnVsbHlEaXNwb3NlZC5SZWxlYXNlKCkpOwotICAgICAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSBgQ2FuY2VsbGF0aW9uVG9rZW5gIGhlcmUgYXMgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIGFsc28gYmUgZGlzcG9zZWQgaWYgaXQgZGlkIG5vdAotICAgICAgICAgICAgLy8gIHJlYWN0IG9uIHRoZSBjYW5jZWxsYXRpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdGFzayBpcyBjYW5jZWxsZWQganVzdCBiZWZvcmUgYENvbm5lY3RBc3luY2AgcmV0dXJucy4KLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5Db25maWd1cmUoKS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhtb2NrZWRDb25uZWN0aW9uVG9CZURpc3Bvc2VkKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFNlcnZlclVuYXZhaWxhYmxlRXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGV4cGVjdGVkIGFzIHRoZSBwb29sIG9ubHkgY29udGFpbnMgYSBjbG9zZWQgY29ubmVjdGlvbiBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBvb2wuRGlzcG9zZSgpOwotICAgICAgICAgICAgcG9vbFdhc0Rpc3Bvc2VkU2lnbmFsLlJlbGVhc2UoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbldhc1N1Y2Nlc3NmdWxseURpc3Bvc2VkLldhaXRBc3luYyhUaW1lU3Bhbi5Gcm9tU2Vjb25kcygyKSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMCwgcG9vbC5OckNvbm5lY3Rpb25zKTsKLSAgICAgICAgICAgIGF3YWl0IG1vY2tlZENvbm5lY3Rpb25Ub0JlRGlzcG9zZWQuUmVjZWl2ZWQoMSkuQ29ubmVjdEFzeW5jKEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpOwotICAgICAgICAgICAgbW9ja2VkQ29ubmVjdGlvblRvQmVEaXNwb3NlZC5SZWNlaXZlZCgxKS5EaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBEaXNwb3NlU2hvdWxkQ2FuY2VsQ29ubmVjdGlvbkVzdGFibGlzaG1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZmFrZUNvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKS5SZXR1cm5zKF8gPT4gQ2xvc2VkQ29ubmVjdGlvbik7Ci0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMSwgMCk7Ci0gICAgICAgICAgICB2YXIgbW9ja2VkQ29ubmVjdGlvblRvQmVEaXNwb3NlZCA9IFN1YnN0aXR1dGUuRm9yPElDb25uZWN0aW9uPigpOwotICAgICAgICAgICAgbW9ja2VkQ29ubmVjdGlvblRvQmVEaXNwb3NlZC5Db25uZWN0QXN5bmMoQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKLSAgICAgICAgICAgICAgICAuUmV0dXJucyh4ID0+IFRhc2suRGVsYXkoLTEsIChDYW5jZWxsYXRpb25Ub2tlbil4WzBdKSk7Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbldhc1N1Y2Nlc3NmdWxseURpc3Bvc2VkID0gbmV3IFNlbWFwaG9yZVNsaW0oMCwgMSk7Ci0gICAgICAgICAgICBtb2NrZWRDb25uZWN0aW9uVG9CZURpc3Bvc2VkLldoZW4oeCA9PiB4LkRpc3Bvc2UoKSkKLSAgICAgICAgICAgICAgICAuRG8oXyA9PiBjb25uZWN0aW9uV2FzU3VjY2Vzc2Z1bGx5RGlzcG9zZWQuUmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGZha2VDb25uZWN0aW9uRmFjdG9yeS5Db25maWd1cmUoKS5DcmVhdGVDb25uZWN0aW9uKCkuUmV0dXJucyhtb2NrZWRDb25uZWN0aW9uVG9CZURpc3Bvc2VkKTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvb2wuR2V0QXZhaWxhYmxlQ29ubmVjdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFNlcnZlclVuYXZhaWxhYmxlRXhjZXB0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGV4cGVjdGVkIGFzIHRoZSBwb29sIG9ubHkgY29udGFpbnMgYSBjbG9zZWQgY29ubmVjdGlvbiBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBvb2wuRGlzcG9zZSgpOwotICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb25XYXNTdWNjZXNzZnVsbHlEaXNwb3NlZC5XYWl0QXN5bmMoVGltZVNwYW4uRnJvbVNlY29uZHMoMikpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDAsIHBvb2wuTnJDb25uZWN0aW9ucyk7Ci0gICAgICAgICAgICBhd2FpdCBtb2NrZWRDb25uZWN0aW9uVG9CZURpc3Bvc2VkLlJlY2VpdmVkKDEpLkNvbm5lY3RBc3luYyhBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKTsKLSAgICAgICAgICAgIG1vY2tlZENvbm5lY3Rpb25Ub0JlRGlzcG9zZWQuUmVjZWl2ZWQoMSkuRGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgQ29ubmVjdGlvbnNFc3RhYmxpc2hlZEluUGFyYWxsZWxTaG91bGRBbGxCZURpc3Bvc2VkSWZPbmVUaHJvd3NEdXJpbmdDcmVhdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgdGVzdCB1bmZvcnR1bmF0ZWx5IG5lZWRzIGEgbG90IG9mIGtub3dsZWRnZSBhYm91dCB0aGUgaW5uZXIgd29ya2luZyBvZiB0aGUgQ29ubmVjdGlvblBvb2wgdG8gCi0gICAgICAgICAgICAvLyAgYWRlcXVhdGVseSB0ZXN0IHRoYXQgY29ubmVjdGlvbnMgZXN0YWJsaXNoZWQgaW4gcGFyYWxsZWwgd2lsbCBhbGwgYmUgZGlzcG9zZWQgaWYgb25lIHRocm93cyBhbgotICAgICAgICAgICAgLy8gIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRmlyc3QgY3JlYXRlIGEgcG9vbCB3aXRoIG9ubHkgY2xvc2VkIGNvbm5lY3Rpb25zIHRoYXQgd2UgY2FuIHRoZW4gbGV0IHRoZSBwb29sIHJlcGxhY2U6Ci0gICAgICAgICAgICB2YXIgZmFrZUNvbm5lY3Rpb25GYWN0b3J5ID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb25GYWN0b3J5PigpOwotICAgICAgICAgICAgZmFrZUNvbm5lY3Rpb25GYWN0b3J5LkNyZWF0ZUNvbm5lY3Rpb24oKQotICAgICAgICAgICAgICAgIC5SZXR1cm5zKF8gPT4gQ2xvc2VkQ29ubmVjdGlvbiwgICAgICAvLyBXZSBuZWVkIHRvIGRvIGl0IGxpa2UgdGhpcyBhcyB3ZSB1c2UgYSBkaWN0aW9uYXJ5IG9mIGRlYWQgY29ubmVjdGlvbnMgaW4gCi0gICAgICAgICAgICAgICAgICAgIF8gPT4gQ2xvc2VkQ29ubmVjdGlvbiwgICAgLy8gICBDb25uZWN0aW9uUG9vbCBhbmQgdGhlIHRocmVlIGNvbm5lY3Rpb25zIG5lZWQgdG8gYmUgZGlmZmVyZW50IG9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgXyA9PiBDbG9zZWRDb25uZWN0aW9uKTsgICAgICAgICAgICAgICAgICAvLyAgIGZvciB0aGlzIHRvIHdvcmsuCi0gICAgICAgICAgICB2YXIgcG9vbCA9IENyZWF0ZUNvbm5lY3Rpb25Qb29sKGZha2VDb25uZWN0aW9uRmFjdG9yeSwgMywgMCk7Ci0gICAgICAgICAgICB2YXIgc3RhcnRFc3RhYmxpc2hpbmdQcm9ibGVtYXRpY0Nvbm5lY3Rpb25zID0gbmV3IFNlbWFwaG9yZVNsaW0oMCwgMSk7Ci0gICAgICAgICAgICAvLyBMZXQgdGhlIHBvb2wgZ2V0IG9uZSBjb25uZWN0aW9uIHRoYXQgaXMgc28gc2xvdyB0byBvcGVuIHRoYXQgdGhlIHBvb2wgd2lsbCBhZnRlcndhcmRzIHRyeSB0byBjcmVhdGUgdHdvCi0gICAgICAgICAgICAvLyAgbW9yZSBjb25uZWN0aW9ucyBpbiBwYXJhbGxlbC4KLSAgICAgICAgICAgIHZhciBmYWtlZFNsb3dUb0VzdGFibGlzaENvbm5lY3Rpb24gPSBTdWJzdGl0dXRlLkZvcjxJQ29ubmVjdGlvbj4oKTsKLSAgICAgICAgICAgIGZha2VkU2xvd1RvRXN0YWJsaXNoQ29ubmVjdGlvbi5Db25uZWN0QXN5bmMoQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKLSAgICAgICAgICAgICAgICAuUmV0dXJucyhhc3luYyBfID0+IGF3YWl0IHN0YXJ0RXN0YWJsaXNoaW5nUHJvYmxlbWF0aWNDb25uZWN0aW9ucy5XYWl0QXN5bmMoKSk7Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ29uZmlndXJlKCkuQ3JlYXRlQ29ubmVjdGlvbigpLlJldHVybnMoZmFrZWRTbG93VG9Fc3RhYmxpc2hDb25uZWN0aW9uKTsKLSAgICAgICAgICAgIC8vIFRyaWdnZXIgcmVwbGFjZW1lbnQgb2YgY2xvc2VkIGNvbm5lY3Rpb25zCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb29sLkdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChTZXJ2ZXJVbmF2YWlsYWJsZUV4Y2VwdGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBleHBlY3RlZCBhcyB0aGUgcG9vbCBvbmx5IGNvbnRhaW4gY2xvc2VkIGNvbm5lY3Rpb25zIGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIGZha2VkT3BlbkNvbm5lY3Rpb24gPSBPcGVuQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIHZhciBmYWtlZENhbm5vdENvbm5lY3RDb25uZWN0aW9uID0gQ2Fubm90Q29ubmVjdENvbm5lY3Rpb247Ci0gICAgICAgICAgICBmYWtlQ29ubmVjdGlvbkZhY3RvcnkuQ29uZmlndXJlKCkuQ3JlYXRlQ29ubmVjdGlvbigpCi0gICAgICAgICAgICAgICAgLlJldHVybnMoZmFrZWRPcGVuQ29ubmVjdGlvbiwgZmFrZWRDYW5ub3RDb25uZWN0Q29ubmVjdGlvbik7Ci0gICAgICAgICAgICAvLyBMZXQgdGhlIHNsb3cgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24gZmluaXNoIHNvIHRoZSBwb29sIGNhbiB0cnkgdG8gZXN0YWJsaXNoIHRoZSBvdGhlciB0d28gY29ubmVjdGlvbnMKLSAgICAgICAgICAgIHN0YXJ0RXN0YWJsaXNoaW5nUHJvYmxlbWF0aWNDb25uZWN0aW9ucy5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBhd2FpdCBUYXNrLkRlbGF5KFRpbWVTcGFuLkZyb21TZWNvbmRzKDEpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHBvb2wgdHJpZWQgdG8gZXN0YWJsaXNoIGJvdGggY29ubmVjdGlvbnMgYW5kIHRoZW4gYWxzbyBkaXNwb3NlZCBib3RoLCBldmVuIHRob3VnaCBvbmUgdGhyb3cgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgICBhd2FpdCBmYWtlZE9wZW5Db25uZWN0aW9uLlJlY2VpdmVkKDEpLkNvbm5lY3RBc3luYyhBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKTsKLSAgICAgICAgICAgIGZha2VkT3BlbkNvbm5lY3Rpb24uUmVjZWl2ZWQoMSkuRGlzcG9zZSgpOwotICAgICAgICAgICAgYXdhaXQgZmFrZWRDYW5ub3RDb25uZWN0Q29ubmVjdGlvbi5SZWNlaXZlZCgxKS5Db25uZWN0QXN5bmMoQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7Ci0gICAgICAgICAgICBmYWtlZENhbm5vdENvbm5lY3RDb25uZWN0aW9uLlJlY2VpdmVkKDEpLkRpc3Bvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIElDb25uZWN0aW9uIE9wZW5Db25uZWN0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdldAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBmYWtlZENvbm5lY3Rpb24gPSBTdWJzdGl0dXRlLkZvcjxJQ29ubmVjdGlvbj4oKTsKLSAgICAgICAgICAgICAgICBmYWtlZENvbm5lY3Rpb24uSXNPcGVuLlJldHVybnModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZha2VkQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgSUNvbm5lY3Rpb24gQ2xvc2VkQ29ubmVjdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgZmFrZWRDb25uZWN0aW9uID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb24+KCk7Ci0gICAgICAgICAgICAgICAgZmFrZWRDb25uZWN0aW9uLklzT3Blbi5SZXR1cm5zKGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFrZWRDb25uZWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHN0YXRpYyBJQ29ubmVjdGlvbiBDYW5ub3RDb25uZWN0Q29ubmVjdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBnZXQKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YXIgZmFrZWRDb25uZWN0aW9uID0gU3Vic3RpdHV0ZS5Gb3I8SUNvbm5lY3Rpb24+KCk7Ci0gICAgICAgICAgICAgICAgZmFrZWRDb25uZWN0aW9uLklzT3Blbi5SZXR1cm5zKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBmYWtlZENvbm5lY3Rpb24uQ29ubmVjdEFzeW5jKEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpCi0gICAgICAgICAgICAgICAgICAgIC5UaHJvd3MobmV3IEV4Y2VwdGlvbigiQ2Fubm90IGNvbm5lY3QgdG8gc2VydmVyLiIpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFrZWRDb25uZWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgQ29ubmVjdGlvblBvb2wgQ3JlYXRlQ29ubmVjdGlvblBvb2woSUNvbm5lY3Rpb25GYWN0b3J5IGNvbm5lY3Rpb25GYWN0b3J5LCBpbnQgcG9vbFNpemUgPSAyLAotICAgICAgICAgICAgaW50IHJlY29ubmVjdGlvbkF0dGVtcHRzID0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uUG9vbChjb25uZWN0aW9uRmFjdG9yeSwgbmV3IENvbm5lY3Rpb25Qb29sU2V0dGluZ3MKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQb29sU2l6ZSA9IHBvb2xTaXplLCBSZWNvbm5lY3Rpb25BdHRlbXB0cyA9IHJlY29ubmVjdGlvbkF0dGVtcHRzLAotICAgICAgICAgICAgICAgIFJlY29ubmVjdGlvbkJhc2VEZWxheSA9IFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoMTApIC8vIGxldCB0aGUgdGVzdHMgZXhlY3V0ZSBmYXN0Ci0gICAgICAgICAgICB9LCBOdWxsTG9nZ2VyPENvbm5lY3Rpb25Qb29sPi5JbnN0YW5jZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvQ29ubmVjdGlvblRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvQ29ubmVjdGlvblRlc3RzLmNzCmluZGV4IDc2N2ZiMDEuLmNhNDk5MzggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0Nvbm5lY3Rpb25UZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9Db25uZWN0aW9uVGVzdHMuY3MKQEAgLTEsNCArMSw0IEBACi3vu78jcmVnaW9uIExpY2Vuc2UKKyNyZWdpb24gTGljZW5zZQogCiAvKgogICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQpAQCAtMjMsMzE1ICsyMywxMDQyIEBACiAKIHVzaW5nIFN5c3RlbTsKIHVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLk5ldC5XZWJTb2NrZXRzOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLklPLkNvbXByZXNzaW9uOwordXNpbmcgU3lzdGVtLkxpbnE7Cit1c2luZyBTeXN0ZW0uTmV0OwordXNpbmcgU3lzdGVtLk5ldC5IdHRwOwordXNpbmcgU3lzdGVtLk5ldC5IdHRwLkhlYWRlcnM7CiB1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwogdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKIHVzaW5nIEdyZW1saW4uTmV0LkRyaXZlcjsKLXVzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5FeGNlcHRpb25zOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyLk1lc3NhZ2VzOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU87CiB1c2luZyBOU3Vic3RpdHV0ZTsKLXVzaW5nIE5TdWJzdGl0dXRlLkV4Y2VwdGlvbkV4dGVuc2lvbnM7CiB1c2luZyBYdW5pdDsKIAogbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LkRyaXZlcgogewogICAgIHB1YmxpYyBjbGFzcyBDb25uZWN0aW9uVGVzdHMKICAgICB7Ci0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRIYW5kbGVDbG9zZU1lc3NhZ2VBZnRlckNvbm5lY3RBc3luYygpCisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFVyaSBUZXN0VXJpID0gbmV3IFVyaSgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKTsKKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG1vY2sgSHR0cE1lc3NhZ2VIYW5kbGVyIHRoYXQgY2FwdHVyZXMgdGhlIHJlcXVlc3QgYW5kIHJldHVybnMgYSBjYW5uZWQgcmVzcG9uc2UuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByaXZhdGUgc3RhdGljIChIdHRwQ2xpZW50IGh0dHBDbGllbnQsIE1vY2tIYW5kbGVyIGhhbmRsZXIpIENyZWF0ZU1vY2tIdHRwQ2xpZW50KAorICAgICAgICAgICAgYnl0ZVtdPyByZXNwb25zZUJ5dGVzID0gbnVsbCwgc3RyaW5nPyBjb250ZW50RW5jb2RpbmcgPSBudWxsKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbW9ja2VkQ2xpZW50V2ViU29ja2V0ID0gU3Vic3RpdHV0ZS5Gb3I8SUNsaWVudFdlYlNvY2tldD4oKTsKLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5SZWNlaXZlQXN5bmMoQXJnLkFueTxBcnJheVNlZ21lbnQ8Ynl0ZT4+KCksIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpLlJldHVybnMoCi0gICAgICAgICAgICAgICAgbmV3IFdlYlNvY2tldFJlY2VpdmVSZXN1bHQoMCwgV2ViU29ja2V0TWVzc2FnZVR5cGUuQ2xvc2UsIHRydWUsIFdlYlNvY2tldENsb3NlU3RhdHVzLk1lc3NhZ2VUb29CaWcsCi0gICAgICAgICAgICAgICAgICAgICJNZXNzYWdlIGlzIHRvbyBsYXJnZSIpKTsKLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5PcHRpb25zLlJldHVybnMobmV3IENsaWVudFdlYlNvY2tldCgpLk9wdGlvbnMpOwotICAgICAgICAgICAgdmFyIHVyaSA9IG5ldyBVcmkoIndzczovL2xvY2FsaG9zdDo4MTgyIik7Ci0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IEdldENvbm5lY3Rpb24obW9ja2VkQ2xpZW50V2ViU29ja2V0LCB1cmk6IHVyaSk7CisgICAgICAgICAgICB2YXIgaGFuZGxlciA9IG5ldyBNb2NrSGFuZGxlcihyZXNwb25zZUJ5dGVzID8/IEJ1aWxkTWluaW1hbFJlc3BvbnNlQnl0ZXMoKSwgY29udGVudEVuY29kaW5nKTsKKyAgICAgICAgICAgIHZhciBodHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoaGFuZGxlcik7CisgICAgICAgICAgICByZXR1cm4gKGh0dHBDbGllbnQsIGhhbmRsZXIpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uQ29ubmVjdEFzeW5jKENhbmNlbGxhdGlvblRva2VuLk5vbmUpOworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQnVpbGRzIGEgbWluaW1hbCB2YWxpZCA0LjAgR3JhcGhCaW5hcnkgcmVzcG9uc2U6IHZlcnNpb24gKyBub24tYnVsa2VkICsgbWFya2VyICsgc3RhdHVzIDIwMCArIG51bGwgbXNnICsgbnVsbCBleGMuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBCdWlsZE1pbmltYWxSZXNwb25zZUJ5dGVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgdmFyIG1zID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgbXMuV3JpdGVCeXRlKDB4ODQpOyAvLyB2ZXJzaW9uCisgICAgICAgICAgICBtcy5Xcml0ZUJ5dGUoMHgwMCk7IC8vIG5vbi1idWxrZWQKKyAgICAgICAgICAgIG1zLldyaXRlQnl0ZSgweEZEKTsgLy8gbWFya2VyIHR5cGUgY29kZQorICAgICAgICAgICAgbXMuV3JpdGVCeXRlKDB4MDApOyAvLyBtYXJrZXIgdmFsdWUKKyAgICAgICAgICAgIFdyaXRlSW50KG1zLCAyMDApOyAvLyBzdGF0dXMgY29kZQorICAgICAgICAgICAgbXMuV3JpdGVCeXRlKDB4MDEpOyAvLyBudWxsIHN0YXR1cyBtZXNzYWdlCisgICAgICAgICAgICBtcy5Xcml0ZUJ5dGUoMHgwMSk7IC8vIG51bGwgZXhjZXB0aW9uCisgICAgICAgICAgICByZXR1cm4gbXMuVG9BcnJheSgpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIEFzc2VydC5GYWxzZShjb25uZWN0aW9uLklzT3Blbik7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMCwgY29ubmVjdGlvbi5OclJlcXVlc3RzSW5GbGlnaHQpOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlJlY2VpdmVkKDEpLkNvbm5lY3RBc3luYyh1cmksIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlJlY2VpdmVkKDEpCi0gICAgICAgICAgICAgICAgLlJlY2VpdmVBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7Ci0gICAgICAgICAgICBhd2FpdCBtb2NrZWRDbGllbnRXZWJTb2NrZXQuUmVjZWl2ZWQoMSkuQ2xvc2VBc3luYyhXZWJTb2NrZXRDbG9zZVN0YXR1cy5Ob3JtYWxDbG9zdXJlLCBzdHJpbmcuRW1wdHksCi0gICAgICAgICAgICAgICAgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHZvaWQgV3JpdGVJbnQoU3RyZWFtIHN0cmVhbSwgaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBCaXRDb252ZXJ0ZXIuR2V0Qnl0ZXModmFsdWUpOworICAgICAgICAgICAgaWYgKEJpdENvbnZlcnRlci5Jc0xpdHRsZUVuZGlhbikKKyAgICAgICAgICAgICAgICBBcnJheS5SZXZlcnNlKGJ5dGVzKTsKKyAgICAgICAgICAgIHN0cmVhbS5Xcml0ZShieXRlcywgMCwgNCk7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVGhyb3dJZkNsb3NlZE1lc3NhZ2VSZWNlaXZlZFdpdGhWYWxpZFByb3BlcnRpZXNBc3luYygpCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFNldENvbnRlbnRUeXBlSGVhZGVyKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIG1vY2tlZENsaWVudFdlYlNvY2tldCA9IFN1YnN0aXR1dGUuRm9yPElDbGllbnRXZWJTb2NrZXQ+KCk7Ci0gICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQuT3B0aW9ucy5SZXR1cm5zKG5ldyBDbGllbnRXZWJTb2NrZXQoKS5PcHRpb25zKTsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCk7CiAKLSAgICAgICAgICAgIHZhciB3ZWJTb2NrZXRDb25uZWN0aW9uID0gbmV3IFdlYlNvY2tldENvbm5lY3Rpb24oCi0gICAgICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0LAotICAgICAgICAgICAgICAgIG5ldyBXZWJTb2NrZXRTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKIAotICAgICAgICAgICAgLy8gVGVzdCBhbGwga25vd24gY2xvc2Ugc3RhdHVzZXMKLSAgICAgICAgICAgIGZvcmVhY2ggKEVudW0gY2xvc2VTdGF0dXMgaW4gRW51bS5HZXRWYWx1ZXModHlwZW9mKFdlYlNvY2tldENsb3NlU3RhdHVzKSkpCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoU2VyaWFsaXphdGlvblRva2Vucy5HcmFwaEJpbmFyeTRNaW1lVHlwZSwKKyAgICAgICAgICAgICAgICBoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCEuQ29udGVudCEuSGVhZGVycy5Db250ZW50VHlwZSEuTWVkaWFUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZXRBY2NlcHRIZWFkZXIoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucyhoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCEuSGVhZGVycy5BY2NlcHQsCisgICAgICAgICAgICAgICAgaCA9PiBoLk1lZGlhVHlwZSA9PSBTZXJpYWxpemF0aW9uVG9rZW5zLkdyYXBoQmluYXJ5NE1pbWVUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZW5kUG9zdFJlcXVlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChIdHRwTWV0aG9kLlBvc3QsIGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5NZXRob2QpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFNlbmRUb0NvcnJlY3RVcmkoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChUZXN0VXJpLCBoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCEuUmVxdWVzdFVyaSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU2V0QWNjZXB0RW5jb2RpbmdXaGVuQ29tcHJlc3Npb25FbmFibGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzIHsgRW5hYmxlQ29tcHJlc3Npb24gPSB0cnVlIH07CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50KTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLkhlYWRlcnMuQWNjZXB0RW5jb2RpbmcsCisgICAgICAgICAgICAgICAgZSA9PiBlLlZhbHVlID09ICJkZWZsYXRlIik7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkTm90U2V0QWNjZXB0RW5jb2RpbmdXaGVuQ29tcHJlc3Npb25EaXNhYmxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEVuYWJsZUNvbXByZXNzaW9uID0gZmFsc2UgfTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5Eb2VzTm90Q29udGFpbihoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCEuSGVhZGVycy5BY2NlcHRFbmNvZGluZywKKyAgICAgICAgICAgICAgICBlID0+IGUuVmFsdWUgPT0gImRlZmxhdGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZXRVc2VyQWdlbnRXaGVuRW5hYmxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IHRydWUgfTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5IZWFkZXJzLkNvbnRhaW5zKCJVc2VyLUFnZW50IikpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZE5vdFNldFVzZXJBZ2VudFdoZW5EaXNhYmxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IGZhbHNlIH07CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50KTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICBBc3NlcnQuRmFsc2UoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLkhlYWRlcnMuQ29udGFpbnMoIlVzZXItQWdlbnQiKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU2V0QnVsa1Jlc3VsdHNIZWFkZXJXaGVuRW5hYmxlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEJ1bGtSZXN1bHRzID0gdHJ1ZSB9OworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LlRydWUoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLkhlYWRlcnMuQ29udGFpbnMoImJ1bGtSZXN1bHRzIikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ0cnVlIiwgaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QuSGVhZGVycy5HZXRWYWx1ZXMoImJ1bGtSZXN1bHRzIikuRmlyc3QoKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkTm90U2V0QnVsa1Jlc3VsdHNIZWFkZXJXaGVuRGlzYWJsZWQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MgeyBCdWxrUmVzdWx0cyA9IGZhbHNlIH07CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50KTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICBBc3NlcnQuRmFsc2UoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLkhlYWRlcnMuQ29udGFpbnMoImJ1bGtSZXN1bHRzIikpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZERlY29tcHJlc3NEZWZsYXRlUmVzcG9uc2UoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDb21wcmVzcyB0aGUgbWluaW1hbCByZXNwb25zZSBieXRlcyB3aXRoIGRlZmxhdGUKKyAgICAgICAgICAgIHZhciBvcmlnaW5hbEJ5dGVzID0gQnVpbGRNaW5pbWFsUmVzcG9uc2VCeXRlcygpOworICAgICAgICAgICAgYnl0ZVtdIGNvbXByZXNzZWRCeXRlczsKKyAgICAgICAgICAgIHVzaW5nICh2YXIgY29tcHJlc3NlZFN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQKLSAgICAgICAgICAgICAgICAgICAgLlJlY2VpdmVBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKLSAgICAgICAgICAgICAgICAgICAgLlJldHVybnMobmV3IFdlYlNvY2tldFJlY2VpdmVSZXN1bHQoMCwgV2ViU29ja2V0TWVzc2FnZVR5cGUuQ2xvc2UsIHRydWUsIChXZWJTb2NrZXRDbG9zZVN0YXR1cyljbG9zZVN0YXR1cywgY2xvc2VTdGF0dXMuVG9TdHJpbmcoKSkpOwotCi0gICAgICAgICAgICAgICAgYXdhaXQgQXNzZXJ0RXhwZWN0ZWRDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uKChXZWJTb2NrZXRDbG9zZVN0YXR1cz8pY2xvc2VTdGF0dXMsIGNsb3NlU3RhdHVzLlRvU3RyaW5nKCksICgpID0+IHdlYlNvY2tldENvbm5lY3Rpb24uUmVjZWl2ZU1lc3NhZ2VBc3luYygpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGVzdCBudWxsL2VtcHR5IGNsb3NlIHByb3BlcnR5IHZhbHVlcyBhcyB3ZWxsLgotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0Ci0gICAgICAgICAgICAgICAgLlJlY2VpdmVBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKLSAgICAgICAgICAgICAgICAuUmV0dXJucyhuZXcgV2ViU29ja2V0UmVjZWl2ZVJlc3VsdCgwLCBXZWJTb2NrZXRNZXNzYWdlVHlwZS5DbG9zZSwgdHJ1ZSwgbnVsbCwgbnVsbCkpOwotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0RXhwZWN0ZWRDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uKG51bGwsIG51bGwsICgpID0+IHdlYlNvY2tldENvbm5lY3Rpb24uUmVjZWl2ZU1lc3NhZ2VBc3luYygpKTsKLQotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0Ci0gICAgICAgICAgICAgICAgLlJlY2VpdmVBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKLSAgICAgICAgICAgICAgICAuUmV0dXJucyhuZXcgV2ViU29ja2V0UmVjZWl2ZVJlc3VsdCgwLCBXZWJTb2NrZXRNZXNzYWdlVHlwZS5DbG9zZSwgdHJ1ZSwgbnVsbCwgc3RyaW5nLkVtcHR5KSk7Ci0gICAgICAgICAgICBhd2FpdCBBc3NlcnRFeHBlY3RlZENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24obnVsbCwgc3RyaW5nLkVtcHR5LCAoKSA9PiB3ZWJTb2NrZXRDb25uZWN0aW9uLlJlY2VpdmVNZXNzYWdlQXN5bmMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVGhyb3dPblN1Ym1pdFJlcXVlc3RJZldlYlNvY2tldElzTm90T3BlbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gdGVzdCB0aGF0IHJhY2UgYnVncyBkb24ndCBnZXQgaW50cm9kdWNlZCB3aGljaCB3b3VsZCBjYXVzZSBzdWJtaXR0ZWQgcmVxdWVzdHMgdG8gaGFuZyBpZiB0aGUKLSAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24gaXMgYmVpbmcgY2xvc2VkL2Fib3J0ZWQgb3IgaXMgbm90IGNvbm5lY3RlZC4gSW4gdGhlc2UgY2FzZXMsIFdlYlNvY2tldC5TZW5kQXN5bmMgc2hvdWxkIHRocm93IGZvciB0aGUgdW5kZXJseWluZwotICAgICAgICAgICAgLy8gd2Vic29ja2V0IGlzIG5vdCBvcGVuIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBiZSBub3RpZmllZCBvZiB0aGF0IGZhaWx1cmUuCi0gICAgICAgICAgICB2YXIgbW9ja2VkQ2xpZW50V2ViU29ja2V0ID0gU3Vic3RpdHV0ZS5Gb3I8SUNsaWVudFdlYlNvY2tldD4oKTsKLQotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0Lk9wdGlvbnMuUmV0dXJucyhuZXcgQ2xpZW50V2ViU29ja2V0KCkuT3B0aW9ucyk7Ci0KLSAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gR2V0Q29ubmVjdGlvbihtb2NrZWRDbGllbnRXZWJTb2NrZXQpOwotICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZ3JlbWxpbiIpLkNyZWF0ZSgpOwotCi0gICAgICAgICAgICAvLyBTaW11bGF0ZSB0aGUgU2VuZEFzeW5jIGV4Y2VwdGlvbiBiZWhhdmlvciBpZiB0aGUgdW5kZXJseWluZyB3ZWJzb2NrZXQgaXMgY2xvc2VkIChzZWUgcmVmZXJlbmNlIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9hcGkvc3lzdGVtLm5ldC53ZWJzb2NrZXRzLmNsaWVudHdlYnNvY2tldC5zZW5kYXN5bmM/dmlldz1uZXQtNi4wKQotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0Ci0gICAgICAgICAgICAgICAgLlNlbmRBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxXZWJTb2NrZXRNZXNzYWdlVHlwZT4oKSwgQXJnLkFueTxib29sPigpLAotICAgICAgICAgICAgICAgICAgICBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKQotICAgICAgICAgICAgICAgIC5UaHJvd3NBc3luYyhuZXcgT2JqZWN0RGlzcG9zZWRFeGNlcHRpb24obmFtZW9mKENsaWVudFdlYlNvY2tldCksICJTb2NrZXQgY2xvc2VkIikpOwotCi0gICAgICAgICAgICAvLyBUZXN0IHZhcmlvdXMgY2xvc2luZy9jbG9zZWQgV2ViU29ja2V0U3RhdGVzIHdpdGggU3VibWl0QXN5bmMuCi0gICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQuU3RhdGUuUmV0dXJucyhXZWJTb2NrZXRTdGF0ZS5DbG9zZWQpOwotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPE9iamVjdERpc3Bvc2VkRXhjZXB0aW9uPigoKSA9PiBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPGR5bmFtaWM+KHJlcXVlc3QsIENhbmNlbGxhdGlvblRva2VuLk5vbmUpKTsKLQotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlN0YXRlLlJldHVybnMoV2ViU29ja2V0U3RhdGUuQ2xvc2VTZW50KTsKLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxPYmplY3REaXNwb3NlZEV4Y2VwdGlvbj4oKCkgPT4gY29ubmVjdGlvbi5TdWJtaXRBc3luYzxkeW5hbWljPihyZXF1ZXN0LCBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKSk7Ci0KLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5TdGF0ZS5SZXR1cm5zKFdlYlNvY2tldFN0YXRlLkNsb3NlUmVjZWl2ZWQpOwotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPE9iamVjdERpc3Bvc2VkRXhjZXB0aW9uPigoKSA9PiBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPGR5bmFtaWM+KHJlcXVlc3QsIENhbmNlbGxhdGlvblRva2VuLk5vbmUpKTsKLQotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlN0YXRlLlJldHVybnMoV2ViU29ja2V0U3RhdGUuQWJvcnRlZCk7Ci0gICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8T2JqZWN0RGlzcG9zZWRFeGNlcHRpb24+KCgpID0+IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8ZHluYW1pYz4ocmVxdWVzdCwgQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkpOwotCi0gICAgICAgICAgICAvLyBTaW11bGF0ZSBTZW5kQXN5bmMgZXhjZXB0aW9uIGJlaGF2aW9yIGlmIHVuZGVybHlpbmcgd2Vic29ja2V0IGlzIG5vdCBjb25uZWN0ZWQuCi0gICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQKLSAgICAgICAgICAgICAgICAuU2VuZEFzeW5jKEFyZy5Bbnk8QXJyYXlTZWdtZW50PGJ5dGU+PigpLCBBcmcuQW55PFdlYlNvY2tldE1lc3NhZ2VUeXBlPigpLCBBcmcuQW55PGJvb2w+KCksCi0gICAgICAgICAgICAgICAgICAgIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpLlRocm93c0FzeW5jKG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJTb2NrZXQgbm90IGNvbm5lY3RlZCIpKTsKLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5TdGF0ZS5SZXR1cm5zKFdlYlNvY2tldFN0YXRlLkNvbm5lY3RpbmcpOwotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8ZHluYW1pYz4ocmVxdWVzdCwgQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEhhbmRsZUNsb3NlTWVzc2FnZUZvckluRmxpZ2h0UmVxdWVzdHNBc3luYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRlc3RzIHRoYXQgaW4tZmxpZ2h0IHJlcXVlc3RzIHdpbGwgZ2V0IG5vdGlmaWVkIGlmIGEgY29ubmVjdGlvbiBjbG9zZSBtZXNzYWdlIGlzIHJlY2VpdmVkLgotICAgICAgICAgICAgdmFyIHVyaSA9IG5ldyBVcmkoIndzczovL2xvY2FsaG9zdDo4MTgyIik7Ci0gICAgICAgICAgICB2YXIgY2xvc2VSZXN1bHQgPSBuZXcgV2ViU29ja2V0UmVjZWl2ZVJlc3VsdCgwLCBXZWJTb2NrZXRNZXNzYWdlVHlwZS5DbG9zZSwgdHJ1ZSwgV2ViU29ja2V0Q2xvc2VTdGF0dXMuRW5kcG9pbnRVbmF2YWlsYWJsZSwgIlNlcnZlciBzaHV0ZG93biIpOwotCi0gICAgICAgICAgICB2YXIgcmVjZWl2ZVNlbWFwaG9yZSA9IG5ldyBTZW1hcGhvcmVTbGltKDAsIDEpOwotICAgICAgICAgICAgdmFyIG1vY2tlZENsaWVudFdlYlNvY2tldCA9IFN1YnN0aXR1dGUuRm9yPElDbGllbnRXZWJTb2NrZXQ+KCk7Ci0gICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQuUmVjZWl2ZUFzeW5jKEFyZy5Bbnk8QXJyYXlTZWdtZW50PGJ5dGU+PigpLCBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKQotICAgICAgICAgICAgICAgIC5SZXR1cm5zRm9yQW55QXJncyhhc3luYyB4ID0+CisgICAgICAgICAgICAgICAgdXNpbmcgKHZhciBkZWZsYXRlU3RyZWFtID0gbmV3IERlZmxhdGVTdHJlYW0oY29tcHJlc3NlZFN0cmVhbSwgQ29tcHJlc3Npb25Nb2RlLkNvbXByZXNzLCB0cnVlKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlY2VpdmVTZW1hcGhvcmUuV2FpdEFzeW5jKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5TdGF0ZS5SZXR1cm5zKFdlYlNvY2tldFN0YXRlLkNsb3NlUmVjZWl2ZWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VSZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQuU3RhdGUuUmV0dXJucyhXZWJTb2NrZXRTdGF0ZS5PcGVuKTsKLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5PcHRpb25zLlJldHVybnMobmV3IENsaWVudFdlYlNvY2tldCgpLk9wdGlvbnMpOwotCi0gICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IEdldENvbm5lY3Rpb24obW9ja2VkQ2xpZW50V2ViU29ja2V0LCB1cmk6IHVyaSk7Ci0gICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLkNvbm5lY3RBc3luYyhDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKLQotICAgICAgICAgICAgLy8gQ3JlYXRlIHR3byBpbi1mbGlnaHQgcmVxdWVzdHMgdGhhdCB3aWxsIGJsb2NrIG9uIHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UuCi0gICAgICAgICAgICB2YXIgcmVxdWVzdE1zZzEgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZ3JlbWxpbiIpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHJlcXVlc3RNc2cyID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImdyZW1saW4iKS5DcmVhdGUoKTsKLSAgICAgICAgICAgIFRhc2sgcmVxdWVzdDEgPSBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPGR5bmFtaWM+KHJlcXVlc3RNc2cxLCBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKLSAgICAgICAgICAgIFRhc2sgcmVxdWVzdDIgPSBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPGR5bmFtaWM+KHJlcXVlc3RNc2cyLCBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKLQotICAgICAgICAgICAgLy8gQ29uZmlybSB0aGUgcmVxdWVzdHMgYXJlIGluLWZsaWdodC4KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyLCBjb25uZWN0aW9uLk5yUmVxdWVzdHNJbkZsaWdodCk7Ci0KLSAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGNvbm5lY3Rpb24gY2xvc2UgbWVzc2FnZS4KLSAgICAgICAgICAgIHJlY2VpdmVTZW1hcGhvcmUuUmVsZWFzZSgpOwotCi0gICAgICAgICAgICAvLyBBc3NlcnQgdGhhdCBib3RoIHJlcXVlc3RzIGdldCBub3RpZmllZCB3aXRoIHRoZSBjbG9zZWQgZXhjZXB0aW9uLgotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0RXhwZWN0ZWRDb25uZWN0aW9uQ2xvc2VkRXhjZXB0aW9uKGNsb3NlUmVzdWx0LkNsb3NlU3RhdHVzLCBjbG9zZVJlc3VsdC5DbG9zZVN0YXR1c0Rlc2NyaXB0aW9uLCAoKSA9PiByZXF1ZXN0MSk7Ci0gICAgICAgICAgICBhd2FpdCBBc3NlcnRFeHBlY3RlZENvbm5lY3Rpb25DbG9zZWRFeGNlcHRpb24oY2xvc2VSZXN1bHQuQ2xvc2VTdGF0dXMsIGNsb3NlUmVzdWx0LkNsb3NlU3RhdHVzRGVzY3JpcHRpb24sICgpID0+IHJlcXVlc3QyKTsKLQotICAgICAgICAgICAgLy8gZGVsYXkgZm9yIE5vdGlmeUFib3V0Q29ubmVjdGlvbkZhaWx1cmUgcnVubmluZyBpbiBhbm90aGVyIHRocmVhZAotICAgICAgICAgICAgdmFyIHJ1bnMgPSAwOwotICAgICAgICAgICAgd2hpbGUgKGNvbm5lY3Rpb24uTnJSZXF1ZXN0c0luRmxpZ2h0ID09IDIgJiYgKytydW5zIDwgNSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhd2FpdCBUYXNrLkRlbGF5KDUpOworICAgICAgICAgICAgICAgICAgICBkZWZsYXRlU3RyZWFtLldyaXRlKG9yaWdpbmFsQnl0ZXMsIDAsIG9yaWdpbmFsQnl0ZXMuTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29tcHJlc3NlZEJ5dGVzID0gY29tcHJlc3NlZFN0cmVhbS5Ub0FycmF5KCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEFzc2VydC5GYWxzZShjb25uZWN0aW9uLklzT3Blbik7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMCwgY29ubmVjdGlvbi5OclJlcXVlc3RzSW5GbGlnaHQpOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlJlY2VpdmVkKDEpLkNvbm5lY3RBc3luYyh1cmksIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlJlY2VpdmVkKDEpCi0gICAgICAgICAgICAgICAgLlJlY2VpdmVBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7Ci0gICAgICAgICAgICBhd2FpdCBtb2NrZWRDbGllbnRXZWJTb2NrZXQuUmVjZWl2ZWQoMSkuQ2xvc2VBc3luYyhXZWJTb2NrZXRDbG9zZVN0YXR1cy5Ob3JtYWxDbG9zdXJlLCBzdHJpbmcuRW1wdHksCi0gICAgICAgICAgICAgICAgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoY29tcHJlc3NlZEJ5dGVzLCAiZGVmbGF0ZSIpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEVuYWJsZUNvbXByZXNzaW9uID0gdHJ1ZSB9OworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCk7CisKKyAgICAgICAgICAgIC8vIFNob3VsZCBub3QgdGhyb3cg4oCUIGRlY29tcHJlc3Npb24gc2hvdWxkIHdvcmsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKHJlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkUHJvcGVybHlIYW5kbGVDYW5jZWxsYXRpb25Gb3JTdWJtaXRBc3luYygpCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERpc3Bvc2VXaXRob3V0RXJyb3IoKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbW9ja2VkQ2xpZW50V2ViU29ja2V0ID0gU3Vic3RpdHV0ZS5Gb3I8SUNsaWVudFdlYlNvY2tldD4oKTsKLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5PcHRpb25zLlJldHVybnMobmV3IENsaWVudFdlYlNvY2tldCgpLk9wdGlvbnMpOwotICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBHZXRDb25uZWN0aW9uKG1vY2tlZENsaWVudFdlYlNvY2tldCk7Ci0gICAgICAgICAgICB2YXIgY3RzID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIF8pID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOwogCi0gICAgICAgICAgICB2YXIgdGFzayA9IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihSZXF1ZXN0TWVzc2FnZS5CdWlsZChzdHJpbmcuRW1wdHkpLkNyZWF0ZSgpLAotICAgICAgICAgICAgICAgIGN0cy5Ub2tlbik7Ci0gICAgICAgICAgICBjdHMuQ2FuY2VsKCk7CisgICAgICAgICAgICBjb25uZWN0aW9uLkRpc3Bvc2UoKTsKKyAgICAgICAgICAgIC8vIERvdWJsZSBkaXNwb3NlIHNob3VsZCBub3QgdGhyb3cKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uRGlzcG9zZSgpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxUYXNrQ2FuY2VsZWRFeGNlcHRpb24+KGFzeW5jICgpID0+IGF3YWl0IHRhc2spOwotICAgICAgICAgICAgQXNzZXJ0LlRydWUodGFzay5Jc0NhbmNlbGVkKTsKLSAgICAgICAgICAgIGF3YWl0IG1vY2tlZENsaWVudFdlYlNvY2tldC5SZWNlaXZlZCgxKS5TZW5kQXN5bmMoQXJnLkFueTxBcnJheVNlZ21lbnQ8Ynl0ZT4+KCksCi0gICAgICAgICAgICAgICAgQXJnLkFueTxXZWJTb2NrZXRNZXNzYWdlVHlwZT4oKSwgQXJnLkFueTxib29sPigpLCBjdHMuVG9rZW4pOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LkRpZE5vdFJlY2VpdmUoKS5DbG9zZUFzeW5jKEFyZy5Bbnk8V2ViU29ja2V0Q2xvc2VTdGF0dXM+KCksIEFyZy5Bbnk8c3RyaW5nPigpLAotICAgICAgICAgICAgICAgIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LkRpZE5vdFJlY2VpdmUoKS5SZWNlaXZlQXN5bmMoQXJnLkFueTxBcnJheVNlZ21lbnQ8Ynl0ZT4+KCksIGN0cy5Ub2tlbik7CisgICAgICAgIHByaXZhdGUgc3RhdGljIFJlcXVlc3RNZXNzYWdlIENyZWF0ZVRlc3RSZXF1ZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCJnLlYoKSIpLkFkZEcoImciKS5DcmVhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIElNZXNzYWdlU2VyaWFsaXplciBDcmVhdGVNb2NrU2VyaWFsaXplcigKKyAgICAgICAgICAgIHN0cmluZyBtaW1lVHlwZSA9IFNlcmlhbGl6YXRpb25Ub2tlbnMuR3JhcGhCaW5hcnk0TWltZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBDcmVhdGVNb2NrU2VyaWFsaXplcihuZXcgTGlzdDxvYmplY3Q+KCksIG1pbWVUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIElNZXNzYWdlU2VyaWFsaXplciBDcmVhdGVNb2NrU2VyaWFsaXplcigKKyAgICAgICAgICAgIExpc3Q8b2JqZWN0PiByZXN1bHRzLAorICAgICAgICAgICAgc3RyaW5nIG1pbWVUeXBlID0gU2VyaWFsaXphdGlvblRva2Vucy5HcmFwaEJpbmFyeTRNaW1lVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBTdWJzdGl0dXRlLkZvcjxJTWVzc2FnZVNlcmlhbGl6ZXI+KCk7CisgICAgICAgICAgICBzZXJpYWxpemVyLk1pbWVUeXBlLlJldHVybnMobWltZVR5cGUpOworICAgICAgICAgICAgc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMoQXJnLkFueTxSZXF1ZXN0TWVzc2FnZT4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKKyAgICAgICAgICAgICAgICAuUmV0dXJucyhUYXNrLkZyb21SZXN1bHQobmV3IGJ5dGVbXSB7IDB4ODQgfSkpOworICAgICAgICAgICAgc2VyaWFsaXplci5EZXNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhBcmcuQW55PGJ5dGVbXT4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSkKKyAgICAgICAgICAgICAgICAuUmV0dXJucyhUYXNrLkZyb21SZXN1bHQoCisgICAgICAgICAgICAgICAgICAgIG5ldyBSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+PihmYWxzZSwgcmVzdWx0cywgMjAwLCBudWxsLCBudWxsKSkpOworICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXI7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkUHJvcGVybHlIYW5kbGVDYW5jZWxsYXRpb25Gb3JTdWJtaXRBc3luY0lmQWxyZWFkeUNhbmNlbGxlZCgpCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZENhbGxJbnRlcmNlcHRvcnNJbk9yZGVyKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIG1vY2tlZENsaWVudFdlYlNvY2tldCA9IFN1YnN0aXR1dGUuRm9yPElDbGllbnRXZWJTb2NrZXQ+KCk7Ci0gICAgICAgICAgICBtb2NrZWRDbGllbnRXZWJTb2NrZXQuT3B0aW9ucy5SZXR1cm5zKG5ldyBDbGllbnRXZWJTb2NrZXQoKS5PcHRpb25zKTsKLSAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gR2V0Q29ubmVjdGlvbihtb2NrZWRDbGllbnRXZWJTb2NrZXQpOwotICAgICAgICAgICAgdmFyIHRva2VuID0gbmV3IENhbmNlbGxhdGlvblRva2VuKGNhbmNlbGVkOiB0cnVlKTsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgXykgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworICAgICAgICAgICAgdmFyIGNhbGxPcmRlciA9IG5ldyBMaXN0PGludD4oKTsKIAotICAgICAgICAgICAgdmFyIHRhc2sgPSBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oUmVxdWVzdE1lc3NhZ2UuQnVpbGQoc3RyaW5nLkVtcHR5KS5DcmVhdGUoKSwKLSAgICAgICAgICAgICAgICB0b2tlbik7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3JzID0gbmV3IExpc3Q8RnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0eCA9PiB7IGNhbGxPcmRlci5BZGQoMSk7IHJldHVybiBUYXNrLkNvbXBsZXRlZFRhc2s7IH0sCisgICAgICAgICAgICAgICAgY3R4ID0+IHsgY2FsbE9yZGVyLkFkZCgyKTsgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsgfSwKKyAgICAgICAgICAgICAgICBjdHggPT4geyBjYWxsT3JkZXIuQWRkKDMpOyByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOyB9LAorICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPFRhc2tDYW5jZWxlZEV4Y2VwdGlvbj4oYXN5bmMgKCkgPT4gYXdhaXQgdGFzayk7Ci0gICAgICAgICAgICBBc3NlcnQuVHJ1ZSh0YXNrLklzQ2FuY2VsZWQpOwotICAgICAgICAgICAgYXdhaXQgbW9ja2VkQ2xpZW50V2ViU29ja2V0LkRpZE5vdFJlY2VpdmUoKS5TZW5kQXN5bmMoQXJnLkFueTxBcnJheVNlZ21lbnQ8Ynl0ZT4+KCksCi0gICAgICAgICAgICAgICAgQXJnLkFueTxXZWJTb2NrZXRNZXNzYWdlVHlwZT4oKSwgQXJnLkFueTxib29sPigpLCBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKTsKLSAgICAgICAgICAgIGF3YWl0IG1vY2tlZENsaWVudFdlYlNvY2tldC5EaWROb3RSZWNlaXZlKCkuQ2xvc2VBc3luYyhBcmcuQW55PFdlYlNvY2tldENsb3NlU3RhdHVzPigpLCBBcmcuQW55PHN0cmluZz4oKSwKLSAgICAgICAgICAgICAgICBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKTsKLSAgICAgICAgICAgIGF3YWl0IG1vY2tlZENsaWVudFdlYlNvY2tldC5EaWROb3RSZWNlaXZlKCkuUmVjZWl2ZUFzeW5jKEFyZy5Bbnk8QXJyYXlTZWdtZW50PGJ5dGU+PigpLCB0b2tlbik7CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LCBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgTGlzdDxpbnQ+IHsgMSwgMiwgMyB9LCBjYWxsT3JkZXIpOwogICAgICAgICB9CiAKICAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZENvbnRpbnVlU3VibWl0dGluZ090aGVyTWVzc2FnZXNJZk9uZUlzQ2FuY2VsbGVkKCkKKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkUHJvcGFnYXRlSW50ZXJjZXB0b3JFeGNlcHRpb24oKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbW9ja2VkQ2xpZW50V2ViU29ja2V0ID0gU3Vic3RpdHV0ZS5Gb3I8SUNsaWVudFdlYlNvY2tldD4oKTsKLSAgICAgICAgICAgIG1vY2tlZENsaWVudFdlYlNvY2tldC5PcHRpb25zLlJldHVybnMobmV3IENsaWVudFdlYlNvY2tldCgpLk9wdGlvbnMpOwotICAgICAgICAgICAgdmFyIHRjcyA9IG5ldyBUYXNrQ29tcGxldGlvblNvdXJjZSgpOwotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlNlbmRBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxXZWJTb2NrZXRNZXNzYWdlVHlwZT4oKSwKLSAgICAgICAgICAgICAgICBBcmcuQW55PGJvb2w+KCksIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpLlJldHVybnModGNzLlRhc2spOwotICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBHZXRDb25uZWN0aW9uKG1vY2tlZENsaWVudFdlYlNvY2tldCk7Ci0gICAgICAgICAgICB2YXIgY3RzID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZEV4Y2VwdGlvbiA9IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJpbnRlcmNlcHRvciBmYWlsZWQiKTsKIAotICAgICAgICAgICAgdmFyIHRhc2tUb0NhbmNlbCA9IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihSZXF1ZXN0TWVzc2FnZS5CdWlsZChzdHJpbmcuRW1wdHkpLkNyZWF0ZSgpLAotICAgICAgICAgICAgICAgIGN0cy5Ub2tlbik7Ci0gICAgICAgICAgICB2YXIgdGFza1RvQ29tcGxldGUgPSBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oUmVxdWVzdE1lc3NhZ2UuQnVpbGQoc3RyaW5nLkVtcHR5KS5DcmVhdGUoKSwKLSAgICAgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKLSAgICAgICAgICAgIGN0cy5DYW5jZWwoKTsKLSAgICAgICAgICAgIHZhciB0YXNrVG9Db21wbGV0ZTIgPSBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oUmVxdWVzdE1lc3NhZ2UuQnVpbGQoc3RyaW5nLkVtcHR5KS5DcmVhdGUoKSwKLSAgICAgICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKLSAgICAgICAgICAgIHRjcy5UcnlTZXRSZXN1bHQoKTsKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgXyA9PiB0aHJvdyBleHBlY3RlZEV4Y2VwdGlvbiwKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxUYXNrQ2FuY2VsZWRFeGNlcHRpb24+KGFzeW5jICgpID0+IGF3YWl0IHRhc2tUb0NhbmNlbCk7Ci0gICAgICAgICAgICBBc3NlcnQuVHJ1ZSh0YXNrVG9DYW5jZWwuSXNDYW5jZWxlZCk7Ci0gICAgICAgICAgICBhd2FpdCBUYXNrLkRlbGF5KFRpbWVTcGFuLkZyb21NaWxsaXNlY29uZHMoNDAwKSk7IC8vIHdhaXQgYSBiaXQgdG8gbGV0IHRoZSBtZXNzYWdlcyBiZWluZyBzZW50Ci0gICAgICAgICAgICBhd2FpdCBtb2NrZWRDbGllbnRXZWJTb2NrZXQuUmVjZWl2ZWQoMykuU2VuZEFzeW5jKEFyZy5Bbnk8QXJyYXlTZWdtZW50PGJ5dGU+PigpLAotICAgICAgICAgICAgICAgIEFyZy5Bbnk8V2ViU29ja2V0TWVzc2FnZVR5cGU+KCksIEFyZy5Bbnk8Ym9vbD4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LCBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICB2YXIgZXggPSBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oCisgICAgICAgICAgICAgICAgKCkgPT4gY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpKTsKKworICAgICAgICAgICAgQXNzZXJ0LlNhbWUoZXhwZWN0ZWRFeGNlcHRpb24sIGV4KTsKKyAgICAgICAgICAgIC8vIEhUVFAgcmVxdWVzdCBzaG91bGQgbm90IGhhdmUgYmVlbiBzZW50CisgICAgICAgICAgICBBc3NlcnQuTnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQ29udGludWVTdWJtaXR0aW5nT3RoZXJNZXNzYWdlc0lmT25lSXNBbHJlYWR5Q2FuY2VsbGVkKCkKKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQWxsb3dJbnRlcmNlcHRvclRvTW9kaWZ5SGVhZGVycygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBtb2NrZWRDbGllbnRXZWJTb2NrZXQgPSBTdWJzdGl0dXRlLkZvcjxJQ2xpZW50V2ViU29ja2V0PigpOwotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0Lk9wdGlvbnMuUmV0dXJucyhuZXcgQ2xpZW50V2ViU29ja2V0KCkuT3B0aW9ucyk7Ci0gICAgICAgICAgICB2YXIgY2FuY2VsbGVkVG9rZW4gPSBuZXcgQ2FuY2VsbGF0aW9uVG9rZW4oY2FuY2VsZWQ6IHRydWUpOwotICAgICAgICAgICAgbW9ja2VkQ2xpZW50V2ViU29ja2V0LlNlbmRBc3luYyhBcmcuQW55PEFycmF5U2VnbWVudDxieXRlPj4oKSwgQXJnLkFueTxXZWJTb2NrZXRNZXNzYWdlVHlwZT4oKSwKLSAgICAgICAgICAgICAgICAgICAgQXJnLkFueTxib29sPigpLCBjYW5jZWxsZWRUb2tlbikKLSAgICAgICAgICAgICAgICAuVGhyb3dzKG5ldyBUYXNrQ2FuY2VsZWRFeGNlcHRpb24obnVsbCwgbnVsbCwgY2FuY2VsbGVkVG9rZW4pKTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlVG9TZW5kID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoc3RyaW5nLkVtcHR5KS5DcmVhdGUoKTsKLSAgICAgICAgICAgIHZhciBmYWtlTWVzc2FnZVNlcmlhbGl6ZXIgPSBTdWJzdGl0dXRlLkZvcjxJTWVzc2FnZVNlcmlhbGl6ZXI+KCk7Ci0gICAgICAgICAgICB2YXIgYnl0ZXNUb1NlbmQgPSBuZXcgYnl0ZVtdIHsgMSwgMiwgMyB9OwotICAgICAgICAgICAgZmFrZU1lc3NhZ2VTZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhtZXNzYWdlVG9TZW5kLCBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKQotICAgICAgICAgICAgICAgIC5SZXR1cm5zKGJ5dGVzVG9TZW5kKTsKLSAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gR2V0Q29ubmVjdGlvbihtb2NrZWRDbGllbnRXZWJTb2NrZXQsIGZha2VNZXNzYWdlU2VyaWFsaXplcik7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKIAotICAgICAgICAgICAgdmFyIHRhc2tUb0NhbmNlbCA9IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihSZXF1ZXN0TWVzc2FnZS5CdWlsZChzdHJpbmcuRW1wdHkpLkNyZWF0ZSgpLAotICAgICAgICAgICAgICAgIGNhbmNlbGxlZFRva2VuKTsKLSAgICAgICAgICAgIHZhciB0YXNrVG9Db21wbGV0ZSA9IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihtZXNzYWdlVG9TZW5kLCBDYW5jZWxsYXRpb25Ub2tlbi5Ob25lKTsKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHguSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdID0gIkJhc2ljIGRHVnpkRHAwWlhOMCI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkNvbXBsZXRlZFRhc2s7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxUYXNrQ2FuY2VsZWRFeGNlcHRpb24+KGFzeW5jICgpID0+IGF3YWl0IHRhc2tUb0NhbmNlbCk7Ci0gICAgICAgICAgICBBc3NlcnQuVHJ1ZSh0YXNrVG9DYW5jZWwuSXNDYW5jZWxlZCk7Ci0gICAgICAgICAgICBhd2FpdCBtb2NrZWRDbGllbnRXZWJTb2NrZXQuUmVjZWl2ZWQoMSkuU2VuZEFzeW5jKGJ5dGVzVG9TZW5kLCBBcmcuQW55PFdlYlNvY2tldE1lc3NhZ2VUeXBlPigpLAotICAgICAgICAgICAgICAgIEFyZy5Bbnk8Ym9vbD4oKSwgQXJnLkFueTxDYW5jZWxsYXRpb25Ub2tlbj4oKSk7CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LCBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5IZWFkZXJzLkNvbnRhaW5zKCJBdXRob3JpemF0aW9uIikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJCYXNpYyBkR1Z6ZERwMFpYTjAiLAorICAgICAgICAgICAgICAgIGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0LkhlYWRlcnMuR2V0VmFsdWVzKCJBdXRob3JpemF0aW9uIikuRmlyc3QoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkTm90UHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZvckNhbmNlbGxlZFJlcXVlc3QoKQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZWVFYXJsaWVySW50ZXJjZXB0b3JNb2RpZmljYXRpb25zKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGZha2VNZXNzYWdlU2VyaWFsaXplciA9IFN1YnN0aXR1dGUuRm9yPElNZXNzYWdlU2VyaWFsaXplcj4oKTsKLSAgICAgICAgICAgIHZhciByZWNlaXZlZEJ5dGVzID0gbmV3IGJ5dGVbXSB7IDEsIDIsIDMgfTsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlVG9DYW5jZWwgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZChzdHJpbmcuRW1wdHkpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHJlY2VpdmVkTWVzc2FnZSA9IG5ldyBSZXNwb25zZU1lc3NhZ2U8TGlzdDxvYmplY3Q+PihtZXNzYWdlVG9DYW5jZWwuUmVxdWVzdElkLAotICAgICAgICAgICAgICAgIG5ldyBSZXNwb25zZVN0YXR1cyhSZXNwb25zZVN0YXR1c0NvZGUuU3VjY2VzcyksIG5ldyBSZXNwb25zZVJlc3VsdDxMaXN0PG9iamVjdD4+KG51bGwpKTsKLSAgICAgICAgICAgIGZha2VNZXNzYWdlU2VyaWFsaXplci5EZXNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhyZWNlaXZlZEJ5dGVzLCBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKQotICAgICAgICAgICAgICAgIC5SZXR1cm5zKHJlY2VpdmVkTWVzc2FnZSk7Ci0gICAgICAgICAgICB2YXIgZmFrZVdlYlNvY2tldENvbm5lY3Rpb24gPSBTdWJzdGl0dXRlLkZvcjxJV2ViU29ja2V0Q29ubmVjdGlvbj4oKTsKLSAgICAgICAgICAgIHZhciByZWNlaXZlVGFza0NvbXBsZXRpb25Tb3VyY2UgPSBuZXcgVGFza0NvbXBsZXRpb25Tb3VyY2U8Ynl0ZVtdPigpOwotICAgICAgICAgICAgZmFrZVdlYlNvY2tldENvbm5lY3Rpb24uUmVjZWl2ZU1lc3NhZ2VBc3luYygpLlJldHVybnMocmVjZWl2ZVRhc2tDb21wbGV0aW9uU291cmNlLlRhc2spOwotICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBHZXRDb25uZWN0aW9uKGZha2VXZWJTb2NrZXRDb25uZWN0aW9uLCBmYWtlTWVzc2FnZVNlcmlhbGl6ZXIpOwotICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5Db25uZWN0QXN5bmMoQ2FuY2VsbGF0aW9uVG9rZW4uTm9uZSk7Ci0gICAgICAgICAgICB2YXIgY3RzID0gbmV3IENhbmNlbGxhdGlvblRva2VuU291cmNlKCk7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHN0cmluZz8gb2JzZXJ2ZWRIZWFkZXIgPSBudWxsOwogCi0gICAgICAgICAgICB2YXIgc3VibWl0VGFzayA9IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihtZXNzYWdlVG9DYW5jZWwsIGN0cy5Ub2tlbik7Ci0gICAgICAgICAgICBjdHMuQ2FuY2VsKCk7Ci0gICAgICAgICAgICByZWNlaXZlVGFza0NvbXBsZXRpb25Tb3VyY2UuU2V0UmVzdWx0KHJlY2VpdmVkQnl0ZXMpOwotICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPFRhc2tDYW5jZWxlZEV4Y2VwdGlvbj4oKCkgPT4gc3VibWl0VGFzayk7CisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3JzID0gbmV3IExpc3Q8RnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0eCA9PgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3R4LkhlYWRlcnNbIlgtQ3VzdG9tIl0gPSAiZmlyc3QiOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvYnNlcnZlZEhlYWRlciA9IGN0eC5IZWFkZXJzLkNvbnRhaW5zS2V5KCJYLUN1c3RvbSIpID8gY3R4LkhlYWRlcnNbIlgtQ3VzdG9tIl0gOiBudWxsOworICAgICAgICAgICAgICAgICAgICBjdHguSGVhZGVyc1siWC1DdXN0b20iXSA9ICJzZWNvbmQiOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMCwgY29ubmVjdGlvbi5OclJlcXVlc3RzSW5GbGlnaHQpOworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwgaW50ZXJjZXB0b3JzKTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImZpcnN0Iiwgb2JzZXJ2ZWRIZWFkZXIpOworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJzZWNvbmQiLAorICAgICAgICAgICAgICAgIGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5IZWFkZXJzLkdldFZhbHVlcygiWC1DdXN0b20iKS5GaXJzdCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgc3RhdGljIENvbm5lY3Rpb24gR2V0Q29ubmVjdGlvbihJQ2xpZW50V2ViU29ja2V0IGNsaWVudFdlYlNvY2tldCwKLSAgICAgICAgICAgIElNZXNzYWdlU2VyaWFsaXplcj8gbWVzc2FnZVNlcmlhbGl6ZXIgPSBudWxsLCBVcmk/IHVyaSA9IG51bGwpCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZXJpYWxpemVCZWZvcmVJbnRlcmNlcHRvcnNXaGVuUmVxdWVzdFNlcmlhbGl6ZXJQcm92aWRlZCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBHZXRDb25uZWN0aW9uKG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uKGNsaWVudFdlYlNvY2tldCwgbmV3IFdlYlNvY2tldFNldHRpbmdzKCkpLCBtZXNzYWdlU2VyaWFsaXplciwKLSAgICAgICAgICAgICAgICB1cmkpOworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBfKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICBvYmplY3Q/IG9ic2VydmVkQm9keSA9IG51bGw7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvYnNlcnZlZEJvZHkgPSBjdHguQm9keTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Jc1R5cGU8Ynl0ZVtdPihvYnNlcnZlZEJvZHkpOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgQ29ubmVjdGlvbiBHZXRDb25uZWN0aW9uKElXZWJTb2NrZXRDb25uZWN0aW9uIHdlYlNvY2tldENvbm5lY3Rpb24sCi0gICAgICAgICAgICBJTWVzc2FnZVNlcmlhbGl6ZXI/IG1lc3NhZ2VTZXJpYWxpemVyID0gbnVsbCwgVXJpPyB1cmkgPSBudWxsKQorICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkUGFzc1JlcXVlc3RNZXNzYWdlV2hlblJlcXVlc3RTZXJpYWxpemVySXNOdWxsKCkKICAgICAgICAgewotICAgICAgICAgICAgdXJpID8/PSBuZXcgVXJpKCJ3c3M6Ly9sb2NhbGhvc3Q6ODE4MiIpOwotICAgICAgICAgICAgbWVzc2FnZVNlcmlhbGl6ZXIgPz89IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb24oCi0gICAgICAgICAgICAgICAgd2ViU29ja2V0Q29ubmVjdGlvbiwKLSAgICAgICAgICAgICAgICB1cmk6IHVyaSwKLSAgICAgICAgICAgICAgICB1c2VybmFtZTogInVzZXIiLAotICAgICAgICAgICAgICAgIHBhc3N3b3JkOiAicGFzc3dvcmQiLAotICAgICAgICAgICAgICAgIG1lc3NhZ2VTZXJpYWxpemVyOiBtZXNzYWdlU2VyaWFsaXplciwKLSAgICAgICAgICAgICAgICBzZXNzaW9uSWQ6IG51bGwpOworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBfKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICBvYmplY3Q/IG9ic2VydmVkQm9keSA9IG51bGw7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvYnNlcnZlZEJvZHkgPSBjdHguQm9keTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBib2R5IHNvIHRoZSByZXF1ZXN0IGNhbiBwcm9jZWVkCisgICAgICAgICAgICAgICAgICAgIGN0eC5Cb2R5ID0gbmV3IGJ5dGVbXSB7IDB4ODQgfTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LkhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBudWxsLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Jc1R5cGU8UmVxdWVzdE1lc3NhZ2U+KG9ic2VydmVkQm9keSk7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBUYXNrIEFzc2VydEV4cGVjdGVkQ29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbihXZWJTb2NrZXRDbG9zZVN0YXR1cz8gZXhwZWN0ZWRDbG9zZVN0YXR1cywKLSAgICAgICAgICAgIHN0cmluZz8gZXhwZWN0ZWRDbG9zZURlc2NyaXB0aW9uLCBGdW5jPFRhc2s+IGZ1bmMpCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRUaHJvd1doZW5Cb2R5SXNOb3RCeXRlQXJyYXlBZnRlckludGVyY2VwdG9ycygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleGNlcHRpb24gPSBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8Q29ubmVjdGlvbkNsb3NlZEV4Y2VwdGlvbj4oZnVuYyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRDbG9zZVN0YXR1cywgZXhjZXB0aW9uLlN0YXR1cyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRDbG9zZURlc2NyaXB0aW9uLCBleGNlcHRpb24uRGVzY3JpcHRpb24pOworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIC8vIE5vIGludGVyY2VwdG9yIHNlcmlhbGl6ZXMgdGhlIGJvZHkKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+KCk7CisKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgbnVsbCwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQsCisgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzKTsKKworICAgICAgICAgICAgdmFyIGV4ID0gYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KAorICAgICAgICAgICAgICAgICgpID0+IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiYnl0ZVtdIG9yIEh0dHBDb250ZW50IiwgZXguTWVzc2FnZSk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIlJlcXVlc3RNZXNzYWdlIiwgZXguTWVzc2FnZSk7CisgICAgICAgICAgICAvLyBIVFRQIHJlcXVlc3Qgc2hvdWxkIG5vdCBoYXZlIGJlZW4gc2VudAorICAgICAgICAgICAgQXNzZXJ0Lk51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFN1Y2NlZWRXaGVuSW50ZXJjZXB0b3JTZXJpYWxpemVzQm9keVdpdGhOdWxsUmVxdWVzdFNlcmlhbGl6ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG5ldyBMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3luYyBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHguQm9keSBpcyBSZXF1ZXN0TWVzc2FnZSBtc2cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5Cb2R5ID0gYXdhaXQgc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMobXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5IZWFkZXJzWyJDb250ZW50LVR5cGUiXSA9ICJhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBudWxsLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChyZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZE5vdFNldENvbnRlbnRUeXBlV2hlblJlcXVlc3RTZXJpYWxpemVySXNOdWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICBib29sPyBoYWRDb250ZW50VHlwZSA9IG51bGw7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBoYWRDb250ZW50VHlwZSA9IGN0eC5IZWFkZXJzLkNvbnRhaW5zS2V5KCJDb250ZW50LVR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIHNvIHRoZSByZXF1ZXN0IGNhbiBwcm9jZWVkCisgICAgICAgICAgICAgICAgICAgIGN0eC5Cb2R5ID0gbmV3IGJ5dGVbXSB7IDB4ODQgfTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LkhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBudWxsLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5GYWxzZShoYWRDb250ZW50VHlwZSwgIkNvbnRlbnQtVHlwZSBzaG91bGQgbm90IGJlIHNldCBiZWZvcmUgaW50ZXJjZXB0b3JzIHdoZW4gcmVxdWVzdFNlcmlhbGl6ZXIgaXMgbnVsbCIpOworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCIsCisgICAgICAgICAgICAgICAgaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLkNvbnRlbnQhLkhlYWRlcnMuQ29udGVudFR5cGUhLk1lZGlhVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkV29ya1dpdGhFbXB0eUludGVyY2VwdG9yTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG5ldyBMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4oKTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChyZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFdvcmtXaXRoTm9JbnRlcmNlcHRvcnNQYXJhbWV0ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCk7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQWxsb3dJbnRlcmNlcHRvclRvTW9kaWZ5VXJpKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGFsdFVyaSA9IG5ldyBVcmkoImh0dHA6Ly9vdGhlci1ob3N0Ojk5OTkvZ3JlbWxpbiIpOworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHguVXJpID0gYWx0VXJpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGFsdFVyaSwgaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLlJlcXVlc3RVcmkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEFsbG93SW50ZXJjZXB0b3JUb1JlcGxhY2VCb2R5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnRCb2R5ID0gbmV3IGJ5dGVbXSB7IDB4MDEsIDB4MDIsIDB4MDMgfTsKKworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG5ldyBMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN0eC5Cb2R5ID0gcmVwbGFjZW1lbnRCb2R5OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgdmFyIHNlbnRCeXRlcyA9IGF3YWl0IGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5Db250ZW50IS5SZWFkQXNCeXRlQXJyYXlBc3luYygpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKHJlcGxhY2VtZW50Qm9keSwgc2VudEJ5dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTdG9wSW50ZXJjZXB0b3JDaGFpbk9uRXhjZXB0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICB2YXIgc2Vjb25kQ2FsbGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgXyA9PiB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiZmlyc3QgZmFpbGVkIiksCisgICAgICAgICAgICAgICAgXyA9PgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oCisgICAgICAgICAgICAgICAgKCkgPT4gY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpKTsKKworICAgICAgICAgICAgQXNzZXJ0LkZhbHNlKHNlY29uZENhbGxlZCwgIlNlY29uZCBpbnRlcmNlcHRvciBzaG91bGQgbm90IHJ1biB3aGVuIGZpcnN0IHRocm93cyIpOworICAgICAgICAgICAgQXNzZXJ0Lk51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFN1cHBvcnRBc3luY0ludGVyY2VwdG9ycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9yQ29tcGxldGVkID0gZmFsc2U7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXN5bmMgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBTaW11bGF0ZSBhc3luYyB3b3JrIChlLmcuLCBmZXRjaGluZyBhIHRva2VuKQorICAgICAgICAgICAgICAgICAgICBhd2FpdCBUYXNrLkRlbGF5KDEpOworICAgICAgICAgICAgICAgICAgICBjdHguSGVhZGVyc1siWC1Bc3luYy1IZWFkZXIiXSA9ICJhc3luYy12YWx1ZSI7CisgICAgICAgICAgICAgICAgICAgIGludGVyY2VwdG9yQ29tcGxldGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGludGVyY2VwdG9yQ29tcGxldGVkKTsKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiYXN5bmMtdmFsdWUiLAorICAgICAgICAgICAgICAgIGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5IZWFkZXJzLkdldFZhbHVlcygiWC1Bc3luYy1IZWFkZXIiKS5GaXJzdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRBbGxvd0ludGVyY2VwdG9yVG9SZWFkU2VyaWFsaXplZEJvZHkoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIF8pID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIGJ5dGVbXT8gY2FwdHVyZWRCb2R5ID0gbnVsbDsKKworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG5ldyBMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkQm9keSA9IGN0eC5Cb2R5IGFzIGJ5dGVbXTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGNhcHR1cmVkQm9keSk7CisgICAgICAgICAgICAvLyBUaGUgbW9jayBzZXJpYWxpemVyIHJldHVybnMgeyAweDg0IH0KKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgYnl0ZVtdIHsgMHg4NCB9LCBjYXB0dXJlZEJvZHkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFdvcmtXaXRoU2luZ2xlSW50ZXJjZXB0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHZhciBjYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG5ldyBMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkNvbXBsZXRlZFRhc2s7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgc2VyaWFsaXplciwgc2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQsCisgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzKTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShjYWxsZWQpOworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEFsbG93SW50ZXJjZXB0b3JUb1JlbW92ZUhlYWRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncyB7IEVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IHRydWUgfTsKKworICAgICAgICAgICAgdmFyIGludGVyY2VwdG9ycyA9IG5ldyBMaXN0PEZ1bmM8SHR0cFJlcXVlc3RDb250ZXh0LCBUYXNrPj4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN0eC5IZWFkZXJzLlJlbW92ZSgiVXNlci1BZ2VudCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkZhbHNlKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5IZWFkZXJzLkNvbnRhaW5zKCJVc2VyLUFnZW50IiksCisgICAgICAgICAgICAgICAgIkludGVyY2VwdG9yIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSBoZWFkZXJzIHNldCBieSBDb25uZWN0aW9uIik7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVGhyb3dXaGVuQm9keUlzTnVsbEFmdGVySW50ZXJjZXB0b3JzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHguQm9keSA9IG51bGwhOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CisKKyAgICAgICAgICAgIHZhciBleCA9IGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uPigKKyAgICAgICAgICAgICAgICAoKSA9PiBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSkpOworCisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIm51bGwiLCBleC5NZXNzYWdlKTsKKyAgICAgICAgICAgIEFzc2VydC5OdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRQcmVzZXJ2ZU11bHRpcGxlSW50ZXJjZXB0b3JIZWFkZXJNb2RpZmljYXRpb25zKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHguSGVhZGVyc1siWC1GaXJzdCJdID0gIm9uZSI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkNvbXBsZXRlZFRhc2s7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN0eC5IZWFkZXJzWyJYLVNlY29uZCJdID0gInR3byI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkNvbXBsZXRlZFRhc2s7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBjdHggPT4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGN0eC5IZWFkZXJzWyJYLVRoaXJkIl0gPSAidGhyZWUiOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJvbmUiLCBoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCEuSGVhZGVycy5HZXRWYWx1ZXMoIlgtRmlyc3QiKS5GaXJzdCgpKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgidHdvIiwgaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QuSGVhZGVycy5HZXRWYWx1ZXMoIlgtU2Vjb25kIikuRmlyc3QoKSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoInRocmVlIiwgaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QuSGVhZGVycy5HZXRWYWx1ZXMoIlgtVGhpcmQiKS5GaXJzdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRBbGxvd0N1c3RvbUNvbnRlbnRUeXBlV2hlblJlcXVlc3RTZXJpYWxpemVySXNOdWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjdHguQm9keSA9IG5ldyBieXRlW10geyAweDAxIH07CisgICAgICAgICAgICAgICAgICAgIGN0eC5IZWFkZXJzWyJDb250ZW50LVR5cGUiXSA9ICJhcHBsaWNhdGlvbi9qc29uIjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhc2suQ29tcGxldGVkVGFzazsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBudWxsLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCwKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAgICAgICAgaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QhLkNvbnRlbnQhLkhlYWRlcnMuQ29udGVudFR5cGUhLk1lZGlhVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkVXNlUmVzcG9uc2VTZXJpYWxpemVyV2hlblJlcXVlc3RTZXJpYWxpemVySXNOdWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBfKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgcmVxdWVzdFNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigpOworICAgICAgICAgICAgdmFyIHJlc3BvbnNlU2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisKKyAgICAgICAgICAgIHZhciBpbnRlcmNlcHRvcnMgPSBuZXcgTGlzdDxGdW5jPEh0dHBSZXF1ZXN0Q29udGV4dCwgVGFzaz4+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXN5bmMgY3R4ID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LkJvZHkgaXMgUmVxdWVzdE1lc3NhZ2UgbXNnKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguQm9keSA9IGF3YWl0IHJlcXVlc3RTZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhtc2cpOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LkhlYWRlcnNbIkNvbnRlbnQtVHlwZSJdID0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIG51bGwsIHJlc3BvbnNlU2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQsCisgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzKTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICAvLyBWZXJpZnkgdGhlIHJlc3BvbnNlIHNlcmlhbGl6ZXIgd2FzIGNhbGxlZCBmb3IgZGVzZXJpYWxpemF0aW9uCisgICAgICAgICAgICBhd2FpdCByZXNwb25zZVNlcmlhbGl6ZXIuUmVjZWl2ZWQoMSkKKyAgICAgICAgICAgICAgICAuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMoQXJnLkFueTxieXRlW10+KCksIEFyZy5Bbnk8Q2FuY2VsbGF0aW9uVG9rZW4+KCkpOworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoZSByZXF1ZXN0IHNlcmlhbGl6ZXIgd2FzIE5PVCBjYWxsZWQgYnkgQ29ubmVjdGlvbiAoaW50ZXJjZXB0b3IgY2FsbGVkIGl0IGRpcmVjdGx5KQorICAgICAgICAgICAgYXdhaXQgcmVxdWVzdFNlcmlhbGl6ZXIuRGlkTm90UmVjZWl2ZSgpCisgICAgICAgICAgICAgICAgLkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKEFyZy5Bbnk8Ynl0ZVtdPigpLCBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRBY2NlcHRIdHRwQ29udGVudEJvZHlGcm9tSW50ZXJjZXB0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHZhciBjb250ZW50Qnl0ZXMgPSBuZXcgYnl0ZVtdIHsgMHgwMSwgMHgwMiwgMHgwMyB9OworCisgICAgICAgICAgICB2YXIgaW50ZXJjZXB0b3JzID0gbmV3IExpc3Q8RnVuYzxIdHRwUmVxdWVzdENvbnRleHQsIFRhc2s+PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0eCA9PgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY3R4LkJvZHkgPSBuZXcgQnl0ZUFycmF5Q29udGVudChjb250ZW50Qnl0ZXMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Db21wbGV0ZWRUYXNrOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIG51bGwsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50LAorICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgdmFyIHNlbnRCeXRlcyA9IGF3YWl0IGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5Db250ZW50IS5SZWFkQXNCeXRlQXJyYXlBc3luYygpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGNvbnRlbnRCeXRlcywgc2VudEJ5dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRVc2VSZXNwb25zZVNlcmlhbGl6ZXJNaW1lVHlwZUZvckFjY2VwdEhlYWRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgaGFuZGxlcikgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHJlcXVlc3RTZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoImFwcGxpY2F0aW9uL2N1c3RvbS1yZXF1ZXN0Iik7CisgICAgICAgICAgICB2YXIgcmVzcG9uc2VTZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIoImFwcGxpY2F0aW9uL2N1c3RvbS1yZXNwb25zZSIpOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCByZXF1ZXN0U2VyaWFsaXplciwgcmVzcG9uc2VTZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0PihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoaGFuZGxlci5DYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5IZWFkZXJzLkFjY2VwdCwKKyAgICAgICAgICAgICAgICBoID0+IGguTWVkaWFUeXBlID09ICJhcHBsaWNhdGlvbi9jdXN0b20tcmVzcG9uc2UiKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRVc2VSZXF1ZXN0U2VyaWFsaXplck1pbWVUeXBlRm9yQ29udGVudFR5cGVIZWFkZXIoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIGhhbmRsZXIpID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciByZXF1ZXN0U2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCJhcHBsaWNhdGlvbi9jdXN0b20tcmVxdWVzdCIpOworICAgICAgICAgICAgdmFyIHJlc3BvbnNlU2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKCJhcHBsaWNhdGlvbi9jdXN0b20tcmVzcG9uc2UiKTsKKyAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oVGVzdFVyaSwgcmVxdWVzdFNlcmlhbGl6ZXIsIHJlc3BvbnNlU2VyaWFsaXplciwgc2V0dGluZ3MsIGh0dHBDbGllbnQpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdD4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiYXBwbGljYXRpb24vY3VzdG9tLXJlcXVlc3QiLAorICAgICAgICAgICAgICAgIGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5Db250ZW50IS5IZWFkZXJzLkNvbnRlbnRUeXBlIS5NZWRpYVR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFVzZURpZmZlcmVudE1pbWVUeXBlc0ZvclJlcXVlc3RBbmRSZXNwb25zZVNlcmlhbGl6ZXJzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBoYW5kbGVyKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgcmVxdWVzdFNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigiYXBwbGljYXRpb24vdm5kLmN1c3RvbS1yZXF1ZXN0LXYxLjAiKTsKKyAgICAgICAgICAgIHZhciByZXNwb25zZVNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcigiYXBwbGljYXRpb24vdm5kLmN1c3RvbS1yZXNwb25zZS12Mi4wIik7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHJlcXVlc3RTZXJpYWxpemVyLCByZXNwb25zZVNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50KTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3Q+KENyZWF0ZVRlc3RSZXF1ZXN0KCkpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChoYW5kbGVyLkNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICAvLyBDb250ZW50LVR5cGUgY29tZXMgZnJvbSByZXF1ZXN0IHNlcmlhbGl6ZXIKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiYXBwbGljYXRpb24vdm5kLmN1c3RvbS1yZXF1ZXN0LXYxLjAiLAorICAgICAgICAgICAgICAgIGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0IS5Db250ZW50IS5IZWFkZXJzLkNvbnRlbnRUeXBlIS5NZWRpYVR5cGUpOworICAgICAgICAgICAgLy8gQWNjZXB0IGNvbWVzIGZyb20gcmVzcG9uc2Ugc2VyaWFsaXplcgorICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKGhhbmRsZXIuQ2FwdHVyZWRSZXF1ZXN0LkhlYWRlcnMuQWNjZXB0LAorICAgICAgICAgICAgICAgIGggPT4gaC5NZWRpYVR5cGUgPT0gImFwcGxpY2F0aW9uL3ZuZC5jdXN0b20tcmVzcG9uc2UtdjIuMCIpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEJveE5vblRyYXZlcnNlclJlc3VsdHNJbnRvVHJhdmVyc2VycygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciAoaHR0cENsaWVudCwgXykgPSBDcmVhdGVNb2NrSHR0cENsaWVudCgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNb2NrU2VyaWFsaXplcihuZXcgTGlzdDxvYmplY3Q+IHsgImhlbGxvIiwgNDIgfSk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50KTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8VHJhdmVyc2VyPihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgdmFyIGl0ZW1zID0gcmVzdWx0LlRvTGlzdCgpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIGl0ZW1zLkNvdW50KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiaGVsbG8iLCBpdGVtc1swXS5PYmplY3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDEsIGl0ZW1zWzBdLkJ1bGspOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDQyLCBpdGVtc1sxXS5PYmplY3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDEsIGl0ZW1zWzFdLkJ1bGspOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZE5vdERvdWJsZUJveFRyYXZlcnNlclJlc3VsdHMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgKGh0dHBDbGllbnQsIF8pID0gQ3JlYXRlTW9ja0h0dHBDbGllbnQoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTW9ja1NlcmlhbGl6ZXIobmV3IExpc3Q8b2JqZWN0PiB7IG5ldyBUcmF2ZXJzZXIoImV4aXN0aW5nIiwgNSkgfSk7CisgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblNldHRpbmdzKCk7CisgICAgICAgICAgICB1c2luZyB2YXIgY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKFRlc3RVcmksIHNlcmlhbGl6ZXIsIHNlcmlhbGl6ZXIsIHNldHRpbmdzLCBodHRwQ2xpZW50KTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8VHJhdmVyc2VyPihDcmVhdGVUZXN0UmVxdWVzdCgpKTsKKworICAgICAgICAgICAgdmFyIGl0ZW0gPSByZXN1bHQuU2luZ2xlKCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImV4aXN0aW5nIiwgaXRlbS5PYmplY3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDUsIGl0ZW0uQnVsayk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQm94TWl4ZWRUcmF2ZXJzZXJBbmROb25UcmF2ZXJzZXJSZXN1bHRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIChodHRwQ2xpZW50LCBfKSA9IENyZWF0ZU1vY2tIdHRwQ2xpZW50KCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1vY2tTZXJpYWxpemVyKG5ldyBMaXN0PG9iamVjdD4geyBuZXcgVHJhdmVyc2VyKCJhbHJlYWR5IiwgMyksICJyYXciIH0pOworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncygpOworICAgICAgICAgICAgdXNpbmcgdmFyIGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihUZXN0VXJpLCBzZXJpYWxpemVyLCBzZXJpYWxpemVyLCBzZXR0aW5ncywgaHR0cENsaWVudCk7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPFRyYXZlcnNlcj4oQ3JlYXRlVGVzdFJlcXVlc3QoKSk7CisKKyAgICAgICAgICAgIHZhciBpdGVtcyA9IHJlc3VsdC5Ub0xpc3QoKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgyLCBpdGVtcy5Db3VudCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImFscmVhZHkiLCBpdGVtc1swXS5PYmplY3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDMsIGl0ZW1zWzBdLkJ1bGspOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJyYXciLCBpdGVtc1sxXS5PYmplY3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDEsIGl0ZW1zWzFdLkJ1bGspOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gICAgIEEgdGVzdCBIdHRwTWVzc2FnZUhhbmRsZXIgdGhhdCBjYXB0dXJlcyB0aGUgcmVxdWVzdCBhbmQgcmV0dXJucyBhIGNhbm5lZCByZXNwb25zZS4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBNb2NrSGFuZGxlciA6IEh0dHBNZXNzYWdlSGFuZGxlcgorICAgICAgICB7CisgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJ5dGVbXSBfcmVzcG9uc2VCeXRlczsKKyAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nPyBfY29udGVudEVuY29kaW5nOworCisgICAgICAgICAgICBwdWJsaWMgSHR0cFJlcXVlc3RNZXNzYWdlPyBDYXB0dXJlZFJlcXVlc3QgeyBnZXQ7IHByaXZhdGUgc2V0OyB9CisKKyAgICAgICAgICAgIHB1YmxpYyBNb2NrSGFuZGxlcihieXRlW10gcmVzcG9uc2VCeXRlcywgc3RyaW5nPyBjb250ZW50RW5jb2RpbmcgPSBudWxsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIF9yZXNwb25zZUJ5dGVzID0gcmVzcG9uc2VCeXRlczsKKyAgICAgICAgICAgICAgICBfY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgVGFzazxIdHRwUmVzcG9uc2VNZXNzYWdlPiBTZW5kQXN5bmMoSHR0cFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQ2xvbmUgdGhlIHJlcXVlc3QgaGVhZGVycyBiZWZvcmUgdGhlIG9yaWdpbmFsIHJlcXVlc3QgaXMgZGlzcG9zZWQKKyAgICAgICAgICAgICAgICBDYXB0dXJlZFJlcXVlc3QgPSBDbG9uZVJlcXVlc3QocmVxdWVzdCk7CisKKyAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgSHR0cFJlc3BvbnNlTWVzc2FnZShIdHRwU3RhdHVzQ29kZS5PSykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPSBuZXcgQnl0ZUFycmF5Q29udGVudChfcmVzcG9uc2VCeXRlcykKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIHJlc3BvbnNlLkNvbnRlbnQuSGVhZGVycy5Db250ZW50VHlwZSA9CisgICAgICAgICAgICAgICAgICAgIG5ldyBNZWRpYVR5cGVIZWFkZXJWYWx1ZShTZXJpYWxpemF0aW9uVG9rZW5zLkdyYXBoQmluYXJ5NE1pbWVUeXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoX2NvbnRlbnRFbmNvZGluZyAhPSBudWxsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuQ29udGVudC5IZWFkZXJzLkNvbnRlbnRFbmNvZGluZy5BZGQoX2NvbnRlbnRFbmNvZGluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQocmVzcG9uc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBIdHRwUmVxdWVzdE1lc3NhZ2UgQ2xvbmVSZXF1ZXN0KEh0dHBSZXF1ZXN0TWVzc2FnZSBvcmlnaW5hbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXIgY2xvbmUgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlKG9yaWdpbmFsLk1ldGhvZCwgb3JpZ2luYWwuUmVxdWVzdFVyaSk7CisKKyAgICAgICAgICAgICAgICAvLyBDb3B5IGhlYWRlcnMKKyAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgaGVhZGVyIGluIG9yaWdpbmFsLkhlYWRlcnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjbG9uZS5IZWFkZXJzLlRyeUFkZFdpdGhvdXRWYWxpZGF0aW9uKGhlYWRlci5LZXksIGhlYWRlci5WYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ29weSBjb250ZW50IGhlYWRlcnMgYnkgY3JlYXRpbmcgYSBkdW1teSBjb250ZW50CisgICAgICAgICAgICAgICAgaWYgKG9yaWdpbmFsLkNvbnRlbnQgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50Qnl0ZXMgPSBvcmlnaW5hbC5Db250ZW50LlJlYWRBc0J5dGVBcnJheUFzeW5jKCkuUmVzdWx0OworICAgICAgICAgICAgICAgICAgICBjbG9uZS5Db250ZW50ID0gbmV3IEJ5dGVBcnJheUNvbnRlbnQoY29udGVudEJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGhlYWRlciBpbiBvcmlnaW5hbC5Db250ZW50LkhlYWRlcnMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lLkNvbnRlbnQuSGVhZGVycy5UcnlBZGRXaXRob3V0VmFsaWRhdGlvbihoZWFkZXIuS2V5LCBoZWFkZXIuVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvRHJpdmVyUmVtb3RlQ29ubmVjdGlvblRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvRHJpdmVyUmVtb3RlQ29ubmVjdGlvblRlc3RzLmNzCmluZGV4IDFiYzE0NGUuLjdhNjdjZTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0RyaXZlclJlbW90ZUNvbm5lY3Rpb25UZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uVGVzdHMuY3MKQEAgLTIyLDggKzIyLDE0IEBACiAjZW5kcmVnaW9uCiAKIHVzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLlRocmVhZGluZzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7CiB1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuUmVtb3RlOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneS5EZWNvcmF0aW9uOwogdXNpbmcgTlN1YnN0aXR1dGU7CiB1c2luZyBYdW5pdDsKIApAQCAtNDcsNSArNTMsMTY2IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnROdWxsRXhjZXB0aW9uPigoKSA9PiBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihudWxsISkpOwogICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEJ1aWxkUmVxdWVzdFdpdGhHcmVtbGluU3RyaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2U/IGNhcHR1cmVkUmVxdWVzdCA9IG51bGw7CisgICAgICAgICAgICB2YXIgY2xpZW50ID0gQ3JlYXRlQ2FwdHVyaW5nQ2xpZW50KG1zZyA9PiBjYXB0dXJlZFJlcXVlc3QgPSBtc2cpOworICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihjbGllbnQsICJnIik7CisKKyAgICAgICAgICAgIHZhciBnbCA9IG5ldyBHcmVtbGluTGFuZygpOworICAgICAgICAgICAgZ2wuQWRkU3RlcCgiViIsIEFycmF5LkVtcHR5PG9iamVjdD4oKSk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0LCBvYmplY3Q+KGdsKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoY2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiLlYoKSIsIGNhcHR1cmVkUmVxdWVzdCEuR3JlbWxpbik7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQnVpbGRSZXF1ZXN0V2l0aFRyYXZlcnNhbFNvdXJjZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlPyBjYXB0dXJlZFJlcXVlc3QgPSBudWxsOworICAgICAgICAgICAgdmFyIGNsaWVudCA9IENyZWF0ZUNhcHR1cmluZ0NsaWVudChtc2cgPT4gY2FwdHVyZWRSZXF1ZXN0ID0gbXNnKTsKKyAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oY2xpZW50LCAibXlTb3VyY2UiKTsKKworICAgICAgICAgICAgdmFyIGdsID0gbmV3IEdyZW1saW5MYW5nKCk7CisgICAgICAgICAgICBnbC5BZGRTdGVwKCJWIiwgQXJyYXkuRW1wdHk8b2JqZWN0PigpKTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3QsIG9iamVjdD4oZ2wpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChjYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJteVNvdXJjZSIsIGNhcHR1cmVkUmVxdWVzdCEuRmllbGRzW1Rva2Vucy5BcmdzR10pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZEJ1aWxkUmVxdWVzdFdpdGhEZWZhdWx0TGFuZ3VhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZT8gY2FwdHVyZWRSZXF1ZXN0ID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBjbGllbnQgPSBDcmVhdGVDYXB0dXJpbmdDbGllbnQobXNnID0+IGNhcHR1cmVkUmVxdWVzdCA9IG1zZyk7CisgICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGNsaWVudCwgImciKTsKKworICAgICAgICAgICAgdmFyIGdsID0gbmV3IEdyZW1saW5MYW5nKCk7CisgICAgICAgICAgICBnbC5BZGRTdGVwKCJWIiwgQXJyYXkuRW1wdHk8b2JqZWN0PigpKTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3QsIG9iamVjdD4oZ2wpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChjYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJncmVtbGluLWxhbmciLCBjYXB0dXJlZFJlcXVlc3QhLkZpZWxkc1tUb2tlbnMuQXJnc0xhbmd1YWdlXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkQnVpbGRSZXF1ZXN0V2l0aEJpbmRpbmdzKCkKKyAgICAgICAgeworICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2U/IGNhcHR1cmVkUmVxdWVzdCA9IG51bGw7CisgICAgICAgICAgICB2YXIgY2xpZW50ID0gQ3JlYXRlQ2FwdHVyaW5nQ2xpZW50KG1zZyA9PiBjYXB0dXJlZFJlcXVlc3QgPSBtc2cpOworICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihjbGllbnQsICJnIik7CisKKyAgICAgICAgICAgIHZhciBnbCA9IG5ldyBHcmVtbGluTGFuZygpOworICAgICAgICAgICAgZ2wuUGFyYW1ldGVyc1siXzAiXSA9IDQyOworICAgICAgICAgICAgZ2wuQWRkU3RlcCgiViIsIEFycmF5LkVtcHR5PG9iamVjdD4oKSk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0LCBvYmplY3Q+KGdsKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoY2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IChEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiljYXB0dXJlZFJlcXVlc3QhLkZpZWxkc1tUb2tlbnMuQXJnc0JpbmRpbmdzXTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCg0MiwgYmluZGluZ3NbIl8wIl0pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZERlZmF1bHRCdWxrUmVzdWx0c1RvVHJ1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlPyBjYXB0dXJlZFJlcXVlc3QgPSBudWxsOworICAgICAgICAgICAgdmFyIGNsaWVudCA9IENyZWF0ZUNhcHR1cmluZ0NsaWVudChtc2cgPT4gY2FwdHVyZWRSZXF1ZXN0ID0gbXNnKTsKKyAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oY2xpZW50LCAiZyIpOworCisgICAgICAgICAgICB2YXIgZ2wgPSBuZXcgR3JlbWxpbkxhbmcoKTsKKyAgICAgICAgICAgIGdsLkFkZFN0ZXAoIlYiLCBBcnJheS5FbXB0eTxvYmplY3Q+KCkpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdCwgb2JqZWN0PihnbCk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoInRydWUiLCBjYXB0dXJlZFJlcXVlc3QhLkZpZWxkc1tUb2tlbnMuQXJnc0J1bGtSZXN1bHRzXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkRXh0cmFjdEFsbG93ZWRPcHRpb25zU3RyYXRlZ3lLZXlzKCkKKyAgICAgICAgeworICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2U/IGNhcHR1cmVkUmVxdWVzdCA9IG51bGw7CisgICAgICAgICAgICB2YXIgY2xpZW50ID0gQ3JlYXRlQ2FwdHVyaW5nQ2xpZW50KG1zZyA9PiBjYXB0dXJlZFJlcXVlc3QgPSBtc2cpOworICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihjbGllbnQsICJnIik7CisKKyAgICAgICAgICAgIHZhciBnbCA9IG5ldyBHcmVtbGluTGFuZygpOworICAgICAgICAgICAgZ2wuQWRkU3RlcCgiViIsIEFycmF5LkVtcHR5PG9iamVjdD4oKSk7CisgICAgICAgICAgICBnbC5PcHRpb25zU3RyYXRlZ2llcy5BZGQobmV3IE9wdGlvbnNTdHJhdGVneShuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7IFRva2Vucy5BcmdzRXZhbFRpbWVvdXQsIDUwMDBMIH0sCisgICAgICAgICAgICAgICAgeyBUb2tlbnMuQXJnc0JhdGNoU2l6ZSwgMTAwIH0KKyAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5TdWJtaXRBc3luYzxvYmplY3QsIG9iamVjdD4oZ2wpOworCisgICAgICAgICAgICBBc3NlcnQuTm90TnVsbChjYXB0dXJlZFJlcXVlc3QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDUwMDBMLCBjYXB0dXJlZFJlcXVlc3QhLkZpZWxkc1tUb2tlbnMuQXJnc0V2YWxUaW1lb3V0XSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoMTAwLCBjYXB0dXJlZFJlcXVlc3QuRmllbGRzW1Rva2Vucy5BcmdzQmF0Y2hTaXplXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkUGFzc1Rocm91Z2hDdXN0b21PcHRpb25zU3RyYXRlZ3lLZXlzKCkKKyAgICAgICAgeworICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2U/IGNhcHR1cmVkUmVxdWVzdCA9IG51bGw7CisgICAgICAgICAgICB2YXIgY2xpZW50ID0gQ3JlYXRlQ2FwdHVyaW5nQ2xpZW50KG1zZyA9PiBjYXB0dXJlZFJlcXVlc3QgPSBtc2cpOworICAgICAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihjbGllbnQsICJnIik7CisKKyAgICAgICAgICAgIHZhciBnbCA9IG5ldyBHcmVtbGluTGFuZygpOworICAgICAgICAgICAgZ2wuQWRkU3RlcCgiViIsIEFycmF5LkVtcHR5PG9iamVjdD4oKSk7CisgICAgICAgICAgICBnbC5PcHRpb25zU3RyYXRlZ2llcy5BZGQobmV3IE9wdGlvbnNTdHJhdGVneShuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7ICJzb21lQ3VzdG9tS2V5IiwgInNvbWVWYWx1ZSIgfQorICAgICAgICAgICAgfSkpOworCisgICAgICAgICAgICBhd2FpdCBjb25uZWN0aW9uLlN1Ym1pdEFzeW5jPG9iamVjdCwgb2JqZWN0PihnbCk7CisKKyAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKGNhcHR1cmVkUmVxdWVzdCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoInNvbWVWYWx1ZSIsIGNhcHR1cmVkUmVxdWVzdCEuRmllbGRzWyJzb21lQ3VzdG9tS2V5Il0pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFJlc3BlY3RQZXJSZXF1ZXN0QnVsa1Jlc3VsdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZT8gY2FwdHVyZWRSZXF1ZXN0ID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBjbGllbnQgPSBDcmVhdGVDYXB0dXJpbmdDbGllbnQobXNnID0+IGNhcHR1cmVkUmVxdWVzdCA9IG1zZyk7CisgICAgICAgICAgICB2YXIgY29ubmVjdGlvbiA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGNsaWVudCwgImciKTsKKworICAgICAgICAgICAgdmFyIGdsID0gbmV3IEdyZW1saW5MYW5nKCk7CisgICAgICAgICAgICBnbC5BZGRTdGVwKCJWIiwgQXJyYXkuRW1wdHk8b2JqZWN0PigpKTsKKyAgICAgICAgICAgIGdsLk9wdGlvbnNTdHJhdGVnaWVzLkFkZChuZXcgT3B0aW9uc1N0cmF0ZWd5KG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsgVG9rZW5zLkFyZ3NCdWxrUmVzdWx0cywgImZhbHNlIiB9CisgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24uU3VibWl0QXN5bmM8b2JqZWN0LCBvYmplY3Q+KGdsKTsKKworICAgICAgICAgICAgQXNzZXJ0Lk5vdE51bGwoY2FwdHVyZWRSZXF1ZXN0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZmFsc2UiLCBjYXB0dXJlZFJlcXVlc3QhLkZpZWxkc1tUb2tlbnMuQXJnc0J1bGtSZXN1bHRzXSk7CisgICAgICAgIH0KKworICAgICAgICAvLy8gPHN1bW1hcnk+CisgICAgICAgIC8vLyAgICAgQ3JlYXRlcyBhIG1vY2sgSUdyZW1saW5DbGllbnQgdGhhdCBjYXB0dXJlcyB0aGUgc3VibWl0dGVkIFJlcXVlc3RNZXNzYWdlLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwcml2YXRlIHN0YXRpYyBJR3JlbWxpbkNsaWVudCBDcmVhdGVDYXB0dXJpbmdDbGllbnQoQWN0aW9uPFJlcXVlc3RNZXNzYWdlPiBjYXB0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgY2xpZW50ID0gU3Vic3RpdHV0ZS5Gb3I8SUdyZW1saW5DbGllbnQ+KCk7CisgICAgICAgICAgICBjbGllbnQuU3VibWl0QXN5bmM8VHJhdmVyc2VyPihBcmcuQW55PFJlcXVlc3RNZXNzYWdlPigpLCBBcmcuQW55PENhbmNlbGxhdGlvblRva2VuPigpKQorICAgICAgICAgICAgICAgIC5SZXR1cm5zKGNhbGxJbmZvID0+CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXB0dXJlKGNhbGxJbmZvLkFyZzxSZXF1ZXN0TWVzc2FnZT4oKSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbXB0eVJlc3VsdCA9IG5ldyBSZXN1bHRTZXQ8VHJhdmVyc2VyPigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0PFRyYXZlcnNlcj4oKSwgbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KGVtcHR5UmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQ7CisgICAgICAgIH0KICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTdjMjI4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLSNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5UZXh0OwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTjsKLXVzaW5nIFh1bml0OwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuRHJpdmVyCi17Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJUZXN0cwotICAgIHsKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIERlc2VyaWFsaXppbmdOdWxsVGhyb3dzKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHN1dCA9IENyZWF0ZU1lc3NhZ2VTZXJpYWxpemVyKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpPT4gc3V0LkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKG51bGwhKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgRW1wdHlBcnJheURlc2VyaWFsaXplZEludG9OdWxsKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHN1dCA9IENyZWF0ZU1lc3NhZ2VTZXJpYWxpemVyKCk7Ci0KLSAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBzdXQuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMobmV3IGJ5dGVbMF0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuTnVsbChyZXN1bHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIEVtcHR5U3RyaW5nRGVzZXJpYWxpemVkSW50b051bGwoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc3V0ID0gQ3JlYXRlTWVzc2FnZVNlcmlhbGl6ZXIoKTsKLSAgICAgICAgICAgIHZhciBvZkVtcHR5ID0gRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygiIik7Ci0KLSAgICAgICAgICAgIEFzc2VydC5OdWxsKGF3YWl0IHN1dC5EZXNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhvZkVtcHR5KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgSnNvbk51bGxEZXNlcmlhbGl6ZWRJbnRvTnVsbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzdXQgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOwotICAgICAgICAgICAgdmFyIG9mTnVsbCA9IEVuY29kaW5nLlVURjguR2V0Qnl0ZXMoIm51bGwiKTsKLQotICAgICAgICAgICAgQXNzZXJ0Lk51bGwoYXdhaXQgc3V0LkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKG9mTnVsbCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplciBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT04zTWVzc2FnZVNlcmlhbGl6ZXIobmV3IEdyYXBoU09OM1JlYWRlcigpLCBuZXcgR3JhcGhTT04zV3JpdGVyKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvR3JlbWxpbkNsaWVudFRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvR3JlbWxpbkNsaWVudFRlc3RzLmNzCmluZGV4IDY2YzhjMWQuLmYxODdhZGEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0dyZW1saW5DbGllbnRUZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9HcmVtbGluQ2xpZW50VGVzdHMuY3MKQEAgLTIxLDEwICsyMSw4IEBACiAKICNlbmRyZWdpb24KIAotdXNpbmcgU3lzdGVtOwogdXNpbmcgR3JlbWxpbi5OZXQuRHJpdmVyOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKIHVzaW5nIFh1bml0OwogCiBuYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuRHJpdmVyCkBAIC0zMiw0OSArMzAsMzkgQEAKICAgICBwdWJsaWMgY2xhc3MgR3JlbWxpbkNsaWVudFRlc3RzCiAgICAgewogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVGhyb3dPbkV4ZWN1dGlvbk9mTXVsdGlDb25uZWN0aW9uSW5Qb29sKCkKKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkQ3JlYXRlQ2xpZW50V2l0aERlZmF1bHRTZXR0aW5ncygpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciBob3N0ID0gImxvY2FsaG9zdCI7Ci0gICAgICAgICAgICB2YXIgcG9ydCA9IDgxODI7Ci0gICAgICAgICAgICB2YXIgc2Vzc2lvbklkID0gR3VpZC5OZXdHdWlkKCkuVG9TdHJpbmcoKTsKLSAgICAgICAgICAgIC8vIHNldCBwb29sIHNpemUgbW9yZSB0aGFuIDEKLSAgICAgICAgICAgIHZhciBwb29sU2V0dGluZ3MgPSBuZXcgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyB7UG9vbFNpemUgPSAyfTsKLQotICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihob3N0LCBwb3J0KTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRPdXRPZlJhbmdlRXhjZXB0aW9uPigoKSA9PgotICAgICAgICAgICAgICAgIG5ldyBHcmVtbGluQ2xpZW50KGdyZW1saW5TZXJ2ZXIsIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3M6IHBvb2xTZXR0aW5ncywgc2Vzc2lvbklkOiBzZXNzaW9uSWQpKTsKLSAgICAgICAgfQotCi0jcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSA2MTIsNjE4Ci0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd0ZvckludmFsaWRHcmFwaFNPTlJlYWRlcldyaXRlckNvbWJpbmF0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4KLSAgICAgICAgICAgICAgICBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigpLCBuZXcgR3JhcGhTT04yUmVhZGVyKCksIG5ldyBHcmFwaFNPTjNXcml0ZXIoKSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVGhyb3dGb3JJbnZhbGlkR3JhcGhTT05SZWFkZXJGb3JHaXZlbk1pbWVUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4KLSAgICAgICAgICAgICAgICBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigpLCBuZXcgR3JhcGhTT04zUmVhZGVyKCksIG5ldyBHcmFwaFNPTjJXcml0ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXphdGlvblRva2Vucy5HcmFwaFNPTjJNaW1lVHlwZSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVGhyb3dGb3JJbnZhbGlkR3JhcGhTT05Xcml0ZXJGb3JHaXZlbk1pbWVUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4KLSAgICAgICAgICAgICAgICBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigpLCBuZXcgR3JhcGhTT04yUmVhZGVyKCksIG5ldyBHcmFwaFNPTjNXcml0ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgU2VyaWFsaXphdGlvblRva2Vucy5HcmFwaFNPTjJNaW1lVHlwZSkpOworICAgICAgICAgICAgdXNpbmcgdmFyIGNsaWVudCA9IG5ldyBHcmVtbGluQ2xpZW50KG5ldyBHcmVtbGluU2VydmVyKCkpOworICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvdyDigJQgZGVmYXVsdCBzZXJpYWxpemVyIGFuZCBzZXR0aW5ncyBhcmUgdXNlZAogICAgICAgICB9CiAKICAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFRocm93Rm9yVW5zdXBwb3J0ZWRNaW1lVHlwZSgpCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZENyZWF0ZUNsaWVudFdpdGhDdXN0b21TZXJpYWxpemVyKCkKICAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4KLSAgICAgICAgICAgICAgICBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigpLCBuZXcgR3JhcGhTT04zUmVhZGVyKCksIG5ldyBHcmFwaFNPTjNXcml0ZXIoKSwgInVuc3VwcG9ydGVkIikpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigpLCBtZXNzYWdlU2VyaWFsaXplcjogc2VyaWFsaXplcik7CisgICAgICAgICAgICAvLyBTaG91bGQgbm90IHRocm93CiAgICAgICAgIH0KLSNwcmFnbWEgd2FybmluZyByZXN0b3JlIDYxMiw2MTgKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkQ3JlYXRlQ2xpZW50V2l0aEN1c3RvbVNldHRpbmdzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNldHRpbmdzID0gbmV3IENvbm5lY3Rpb25TZXR0aW5ncworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVuYWJsZUNvbXByZXNzaW9uID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICBCdWxrUmVzdWx0cyA9IHRydWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB1c2luZyB2YXIgY2xpZW50ID0gbmV3IEdyZW1saW5DbGllbnQobmV3IEdyZW1saW5TZXJ2ZXIoKSwgY29ubmVjdGlvblNldHRpbmdzOiBzZXR0aW5ncyk7CisgICAgICAgICAgICAvLyBTaG91bGQgbm90IHRocm93CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGlzcG9zZVdpdGhvdXRFcnJvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXcgR3JlbWxpbkNsaWVudChuZXcgR3JlbWxpblNlcnZlcigpKTsKKyAgICAgICAgICAgIGNsaWVudC5EaXNwb3NlKCk7CisgICAgICAgICAgICAvLyBTaG91bGQgbm90IHRocm93IG9uIGRvdWJsZSBkaXNwb3NlCisgICAgICAgICAgICBjbGllbnQuRGlzcG9zZSgpOworICAgICAgICB9CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0dyZW1saW5TZXJ2ZXJUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0dyZW1saW5TZXJ2ZXJUZXN0cy5jcwppbmRleCBiMjVkZTUxLi5hZGQxM2QxIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9HcmVtbGluU2VydmVyVGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvR3JlbWxpblNlcnZlclRlc3RzLmNzCkBAIC0zNyw3ICszNyw3IEBACiAKICAgICAgICAgICAgIHZhciB1cmkgPSBncmVtbGluU2VydmVyLlVyaTsKIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCQid3M6Ly97aG9zdH06e3BvcnR9L2dyZW1saW4iLCB1cmkuQWJzb2x1dGVVcmkpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCQiaHR0cDovL3tob3N0fTp7cG9ydH0vZ3JlbWxpbiIsIHVyaS5BYnNvbHV0ZVVyaSk7CiAgICAgICAgIH0KIAogICAgICAgICBbRmFjdF0KQEAgLTQ5LDcgKzQ5LDcgQEAKIAogICAgICAgICAgICAgdmFyIHVyaSA9IGdyZW1saW5TZXJ2ZXIuVXJpOwogCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoJCJ3c3M6Ly97aG9zdH06e3BvcnR9L2dyZW1saW4iLCB1cmkuQWJzb2x1dGVVcmkpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCQiaHR0cHM6Ly97aG9zdH06e3BvcnR9L2dyZW1saW4iLCB1cmkuQWJzb2x1dGVVcmkpOwogICAgICAgICB9CiAKICAgICAgICAgW0ZhY3RdCkBAIC02Miw1ICs2MiwyMyBAQAogCiAgICAgICAgICAgICBBc3NlcnQuRXF1YWwoODE4MiwgdXJpLlBvcnQpOwogICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFVzZUN1c3RvbVBhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZ3JlbWxpblNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKCJsb2NhbGhvc3QiLCA4MTgyLCBwYXRoOiAiL2N1c3RvbSIpOworCisgICAgICAgICAgICB2YXIgdXJpID0gZ3JlbWxpblNlcnZlci5Vcmk7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2N1c3RvbSIsIHVyaS5BYnNvbHV0ZVVyaSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlRGVmYXVsdEdyZW1saW5QYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGdyZW1saW5TZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcigibG9jYWxob3N0IiwgODE4Mik7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiL2dyZW1saW4iLCBncmVtbGluU2VydmVyLlVyaS5BYnNvbHV0ZVBhdGgpOworICAgICAgICB9CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0h0dHBSZXF1ZXN0Q29udGV4dFRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvSHR0cFJlcXVlc3RDb250ZXh0VGVzdHMuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkMmJjNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL0h0dHBSZXF1ZXN0Q29udGV4dFRlc3RzLmNzCkBAIC0wLDAgKzEsMTMxIEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLlRleHQ7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LkRyaXZlcgoreworICAgIHB1YmxpYyBjbGFzcyBIdHRwUmVxdWVzdENvbnRleHRUZXN0cworICAgIHsKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZENvbnN0cnVjdFdpdGhCeXRlQXJyYXlCb2R5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1ldGhvZCA9ICJQT1NUIjsKKyAgICAgICAgICAgIHZhciB1cmkgPSBuZXcgVXJpKCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpOworICAgICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4geyB7ICJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAiIH0gfTsKKyAgICAgICAgICAgIHZhciBib2R5ID0gbmV3IGJ5dGVbXSB7IDB4MDEsIDB4MDIsIDB4MDMgfTsKKworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KG1ldGhvZCwgdXJpLCBoZWFkZXJzLCBib2R5KTsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG1ldGhvZCwgY29udGV4dC5NZXRob2QpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKHVyaSwgY29udGV4dC5VcmkpOworICAgICAgICAgICAgQXNzZXJ0LlNhbWUoaGVhZGVycywgY29udGV4dC5IZWFkZXJzKTsKKyAgICAgICAgICAgIEFzc2VydC5TYW1lKGJvZHksIGNvbnRleHQuQm9keSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkQ29uc3RydWN0V2l0aFJlcXVlc3RNZXNzYWdlQm9keSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtZXRob2QgPSAiUE9TVCI7CisgICAgICAgICAgICB2YXIgdXJpID0gbmV3IFVyaSgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKTsKKyAgICAgICAgICAgIHZhciBoZWFkZXJzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBzdHJpbmc+KCk7CisgICAgICAgICAgICB2YXIgYm9keSA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCJnLlYoKSIpLkFkZEcoImciKS5DcmVhdGUoKTsKKworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KG1ldGhvZCwgdXJpLCBoZWFkZXJzLCBib2R5KTsKKworICAgICAgICAgICAgQXNzZXJ0LlNhbWUoYm9keSwgY29udGV4dC5Cb2R5KTsKKyAgICAgICAgICAgIEFzc2VydC5Jc1R5cGU8UmVxdWVzdE1lc3NhZ2U+KGNvbnRleHQuQm9keSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkQWxsb3dNdXRhdGluZ1Byb3BlcnRpZXMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBIdHRwUmVxdWVzdENvbnRleHQoIlBPU1QiLCBuZXcgVXJpKCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpLAorICAgICAgICAgICAgICAgIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPigpLCBuZXcgYnl0ZVtdIHsgMHgwMSB9KTsKKworICAgICAgICAgICAgdmFyIG5ld1VyaSA9IG5ldyBVcmkoImh0dHBzOi8vZXhhbXBsZS5jb20vZ3JlbWxpbiIpOworICAgICAgICAgICAgY29udGV4dC5NZXRob2QgPSAiUFVUIjsKKyAgICAgICAgICAgIGNvbnRleHQuVXJpID0gbmV3VXJpOworICAgICAgICAgICAgY29udGV4dC5Cb2R5ID0gbmV3IGJ5dGVbXSB7IDB4MDIsIDB4MDMgfTsKKyAgICAgICAgICAgIGNvbnRleHQuSGVhZGVyc1siQXV0aG9yaXphdGlvbiJdID0gIkJhc2ljIGRHVnpkQT09IjsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJQVVQiLCBjb250ZXh0Lk1ldGhvZCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3VXJpLCBjb250ZXh0LlVyaSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IGJ5dGVbXSB7IDB4MDIsIDB4MDMgfSwgY29udGV4dC5Cb2R5KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiQmFzaWMgZEdWemRBPT0iLCBjb250ZXh0LkhlYWRlcnNbIkF1dGhvcml6YXRpb24iXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkQ29tcHV0ZVBheWxvYWRIYXNoRm9yS25vd25Cb2R5KCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU0hBLTI1NiBvZiAiaGVsbG8iID0gMmNmMjRkYmE1ZmIwYTMwZTI2ZTgzYjJhYzViOWUyOWUxYjE2MWU1YzFmYTc0MjVlNzMwNDMzNjI5MzhiOTgyNAorICAgICAgICAgICAgdmFyIGJvZHkgPSBFbmNvZGluZy5VVEY4LkdldEJ5dGVzKCJoZWxsbyIpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KCJQT1NUIiwgbmV3IFVyaSgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKSwKKyAgICAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4oKSwgYm9keSk7CisKKyAgICAgICAgICAgIHZhciBoYXNoID0gY29udGV4dC5HZXRQYXlsb2FkSGFzaCgpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoIjJjZjI0ZGJhNWZiMGEzMGUyNmU4M2IyYWM1YjllMjllMWIxNjFlNWMxZmE3NDI1ZTczMDQzMzYyOTM4Yjk4MjQiLCBoYXNoKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRDb21wdXRlUGF5bG9hZEhhc2hGb3JFbXB0eUJvZHkoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgY29udGV4dCA9IG5ldyBIdHRwUmVxdWVzdENvbnRleHQoIlBPU1QiLCBuZXcgVXJpKCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpLAorICAgICAgICAgICAgICAgIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgc3RyaW5nPigpLCBBcnJheS5FbXB0eTxieXRlPigpKTsKKworICAgICAgICAgICAgdmFyIGhhc2ggPSBjb250ZXh0LkdldFBheWxvYWRIYXNoKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSIsIGhhc2gpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFRocm93V2hlbkNvbXB1dGluZ1BheWxvYWRIYXNoRm9yTm9uQnl0ZUFycmF5Qm9keSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBib2R5ID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigpIikuQWRkRygiZyIpLkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KCJQT1NUIiwgbmV3IFVyaSgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKSwKKyAgICAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4oKSwgYm9keSk7CisKKyAgICAgICAgICAgIHZhciBleCA9IEFzc2VydC5UaHJvd3M8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oKCkgPT4gY29udGV4dC5HZXRQYXlsb2FkSGFzaCgpKTsKKworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJSZXF1ZXN0TWVzc2FnZSIsIGV4Lk1lc3NhZ2UpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJieXRlW10iLCBleC5NZXNzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd1doZW5Db21wdXRpbmdQYXlsb2FkSGFzaEZvck51bGxCb2R5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBuZXcgSHR0cFJlcXVlc3RDb250ZXh0KCJQT1NUIiwgbmV3IFVyaSgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKSwKKyAgICAgICAgICAgICAgICBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIHN0cmluZz4oKSwgbnVsbCEpOworCisgICAgICAgICAgICB2YXIgZXggPSBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+IGNvbnRleHQuR2V0UGF5bG9hZEhhc2goKSk7CisKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygibnVsbCIsIGV4Lk1lc3NhZ2UpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvTWVzc2FnZXMvUmVxdWVzdE1lc3NhZ2VUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL01lc3NhZ2VzL1JlcXVlc3RNZXNzYWdlVGVzdHMuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjNzM0ZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvRHJpdmVyL01lc3NhZ2VzL1JlcXVlc3RNZXNzYWdlVGVzdHMuY3MKQEAgLTAsMCArMSwxMTAgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXI7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LkRyaXZlci5NZXNzYWdlcworeworICAgIHB1YmxpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZVRlc3RzCisgICAgeworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2V0R3JlbWxpblByb3BlcnR5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1zZyA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCJnLlYoKSIpLkNyZWF0ZSgpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpIiwgbXNnLkdyZW1saW4pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNldERlZmF1bHRMYW5ndWFnZUZpZWxkKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1zZyA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCJnLlYoKSIpLkNyZWF0ZSgpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImdyZW1saW4tbGFuZyIsIG1zZy5GaWVsZHNbVG9rZW5zLkFyZ3NMYW5ndWFnZV0pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNldEdGaWVsZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5WKCkiKS5BZGRHKCJjdXN0b21HIikuQ3JlYXRlKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiY3VzdG9tRyIsIG1zZy5GaWVsZHNbVG9rZW5zLkFyZ3NHXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2V0QmluZGluZ3MoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVihfMCkiKQorICAgICAgICAgICAgICAgIC5BZGRCaW5kaW5nKCJfMCIsIDEpCisgICAgICAgICAgICAgICAgLkNyZWF0ZSgpOworCisgICAgICAgICAgICB2YXIgYmluZGluZ3MgPSAoRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4pbXNnLkZpZWxkc1tUb2tlbnMuQXJnc0JpbmRpbmdzXTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgxLCBiaW5kaW5nc1siXzAiXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2V0TXVsdGlwbGVCaW5kaW5ncygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7IHsgIl8wIiwgMSB9LCB7ICJfMSIsICJ0ZXN0IiB9IH07CisgICAgICAgICAgICB2YXIgbXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVihfMCkuaGFzKF8xKSIpCisgICAgICAgICAgICAgICAgLkFkZEJpbmRpbmdzKGJpbmRpbmdzKQorICAgICAgICAgICAgICAgIC5DcmVhdGUoKTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdEJpbmRpbmdzID0gKERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KW1zZy5GaWVsZHNbVG9rZW5zLkFyZ3NCaW5kaW5nc107CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgcmVzdWx0QmluZGluZ3NbIl8wIl0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ0ZXN0IiwgcmVzdWx0QmluZGluZ3NbIl8xIl0pOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNldEFkZGl0aW9uYWxGaWVsZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5WKCkiKQorICAgICAgICAgICAgICAgIC5BZGRGaWVsZChUb2tlbnMuQXJnc0V2YWxUaW1lb3V0LCA1MDAwTCkKKyAgICAgICAgICAgICAgICAuQ3JlYXRlKCk7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCg1MDAwTCwgbXNnLkZpZWxkc1tUb2tlbnMuQXJnc0V2YWxUaW1lb3V0XSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkUmVwb3J0SGFzRmllbGQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYnVpbGRlciA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKCJnLlYoKSIpCisgICAgICAgICAgICAgICAgLkFkZEZpZWxkKFRva2Vucy5BcmdzQnVsa1Jlc3VsdHMsICJ0cnVlIik7CisKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGJ1aWxkZXIuSGFzRmllbGQoVG9rZW5zLkFyZ3NCdWxrUmVzdWx0cykpOworICAgICAgICAgICAgQXNzZXJ0LkZhbHNlKGJ1aWxkZXIuSGFzRmllbGQoIm5vbmV4aXN0ZW50IikpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEluY2x1ZGVFbXB0eUJpbmRpbmdzV2hlbk5vbmVBZGRlZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5WKCkiKS5DcmVhdGUoKTsKKworICAgICAgICAgICAgdmFyIGJpbmRpbmdzID0gKERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+KW1zZy5GaWVsZHNbVG9rZW5zLkFyZ3NCaW5kaW5nc107CisgICAgICAgICAgICBBc3NlcnQuRW1wdHkoYmluZGluZ3MpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Ecml2ZXIvUmVxdWVzdE1lc3NhZ2VCdWlsZGVyVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9SZXF1ZXN0TWVzc2FnZUJ1aWxkZXJUZXN0cy5jcwppbmRleCA4OTY2ODU4Li5kZjEwOWE3IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9SZXF1ZXN0TWVzc2FnZUJ1aWxkZXJUZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L0RyaXZlci9SZXF1ZXN0TWVzc2FnZUJ1aWxkZXJUZXN0cy5jcwpAQCAtMzAsMTIgKzMwLDExIEBACiAgICAgcHVibGljIGNsYXNzIFJlcXVlc3RNZXNzYWdlQnVpbGRlclRlc3RzCiAgICAgewogICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlVW5pcXVlUmVxdWVzdElkcygpCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNldERlZmF1bHRMYW5ndWFnZUZpZWxkKCkKICAgICAgICAgewotICAgICAgICAgICAgdmFyIGZpcnN0TXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoVG9rZW5zLk9wc0V2YWwpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHNlY29uZE1zZyA9IFJlcXVlc3RNZXNzYWdlLkJ1aWxkKFRva2Vucy5PcHNFdmFsKS5DcmVhdGUoKTsKKyAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5WKCkiKS5DcmVhdGUoKTsKIAotICAgICAgICAgICAgQXNzZXJ0Lk5vdEVxdWFsKGZpcnN0TXNnLlJlcXVlc3RJZCwgc2Vjb25kTXNnLlJlcXVlc3RJZCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImdyZW1saW4tbGFuZyIsIG1zZy5GaWVsZHNbVG9rZW5zLkFyZ3NMYW5ndWFnZV0pOwogICAgICAgICB9CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9SZW1vdGUvUmVtb3RlVHJhbnNhY3Rpb25UZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9SZW1vdGUvUmVtb3RlVHJhbnNhY3Rpb25UZXN0cy5jcwppbmRleCBiMDY2ZTdhLi4xNGViOTA0IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1Byb2Nlc3MvUmVtb3RlL1JlbW90ZVRyYW5zYWN0aW9uVGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1JlbW90ZS9SZW1vdGVUcmFuc2FjdGlvblRlc3RzLmNzCkBAIC0zMywyNSArMzMsMTIgQEAKICAgICBwdWJsaWMgY2xhc3MgUmVtb3RlVHJhbnNhY3Rpb25UZXN0cwogICAgIHsKICAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZE5vdEFsbG93QmVnaW5Nb3JlVGhhbk9uY2UoKQorICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRUaHJvd05vdFN1cHBvcnRlZEV4Y2VwdGlvbk9uVHgoKQogICAgICAgICB7CiAgICAgICAgICAgICB2YXIgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS5UcmF2ZXJzYWwoKQogICAgICAgICAgICAgICAgIC5XaXRoKG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKFN1YnN0aXR1dGUuRm9yPElHcmVtbGluQ2xpZW50PigpKSk7Ci0gICAgICAgICAgICB2YXIgdHggPSBnLlR4KCk7Ci0gICAgICAgICAgICB0eC5CZWdpbigpOwogCi0gICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+IHR4LkJlZ2luKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkTm90U3VwcG9ydENoaWxkVHJhbnNhY3Rpb25zKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkKLSAgICAgICAgICAgICAgICAuV2l0aChuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihTdWJzdGl0dXRlLkZvcjxJR3JlbWxpbkNsaWVudD4oKSkpOwotICAgICAgICAgICAgdmFyIHR4ID0gZy5UeCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgZ3R4ID0gdHguQmVnaW4oKTsKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbj4oKCkgPT4gZ3R4LlR4KCkpOworICAgICAgICAgICAgQXNzZXJ0LlRocm93czxOb3RTdXBwb3J0ZWRFeGNlcHRpb24+KCgpID0+IGcuVHgoKSk7CiAgICAgICAgIH0KICAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZVRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9CeXRlY29kZVRlc3RzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDVkMjhhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvQnl0ZWNvZGVUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIFN5c3RlbS5MaW5xOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlByb2Nlc3MuVHJhdmVyc2FsCi17Ci0gICAgcHVibGljIGNsYXNzIEJ5dGVjb2RlVGVzdHMKLSAgICB7Ci0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRVc2VCaW5naW5nc0ZvclNpbXBsZVZhbHVlSW5TdGVwQXJndW1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IEJpbmRpbmdzLkluc3RhbmNlOwotCi0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJoYXNMYWJlbCIsIGJpbmRpbmdzLk9mKCJsYWJlbCIsICJ0ZXN0dmFsdWUiKSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgQmluZGluZygibGFiZWwiLCAidGVzdHZhbHVlIiksIGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzWzBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRVc2VCaW5kaW5nc0luc2lkZUFycmF5SW5TdGVwQXJndW1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHZhciBiID0gQmluZGluZ3MuSW5zdGFuY2U7Ci0KLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFN0ZXAoInNvbWVTdGVwIiwgInRlc3QiLCBuZXdbXSB7Yi5PZigiYXJyYXlWYXJpYWJsZSIsICJhcnJheVZhbHVlIil9KTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBCaW5kaW5nKCJhcnJheVZhcmlhYmxlIiwgImFycmF5VmFsdWUiKSwgYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFVzZUJpbmRpbmdzSW5zaWRlRGljdGlvbmFyeVZhbHVlc0luU3RlcEFyZ3VtZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICB2YXIgYiA9IEJpbmRpbmdzLkluc3RhbmNlOwotCi0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJzb21lU3RlcCIsIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7eyJzb21lS2V5IiwgYi5PZigidmFsVmFyaWFibGUiLCAidmFsVmFsdWUiKX19KTsKLQotICAgICAgICAgICAgdmFyIGFyZyA9IGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzWzBdIGFzIElEaWN0aW9uYXJ5OwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBCaW5kaW5nKCJ2YWxWYXJpYWJsZSIsICJ2YWxWYWx1ZSIpLCBhcmchWyJzb21lS2V5Il0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFVzZUJpbmRpbmdzSW5zaWRlRGljdGlvbmFyeUtleXNJblN0ZXBBcmd1bWVudCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgdmFyIGIgPSBCaW5kaW5ncy5JbnN0YW5jZTsKLQotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgic29tZVN0ZXAiLCBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4ge3tiLk9mKCJrZXlWYXJpYWJsZSIsICJrZXlWYWx1ZSIpLCAxMjM0fX0pOwotCi0gICAgICAgICAgICB2YXIgYXJnID0gYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF07Ci0gICAgICAgICAgICB2YXIgYmluZGluZyA9ICgoRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIGFyZyEpLktleXMuRmlyc3QoKSBhcyBCaW5kaW5nOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBCaW5kaW5nKCJrZXlWYXJpYWJsZSIsICJrZXlWYWx1ZSIpLCBiaW5kaW5nKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRVc2VCaW5kaW5nc0luc2lkZUxpc3RJblN0ZXBBcmd1bWVudCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgdmFyIGIgPSBCaW5kaW5ncy5JbnN0YW5jZTsKLQotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgic29tZVN0ZXAiLCBuZXcgTGlzdDxzdHJpbmc+IHsidGVzdCIsIGIuT2YoImxpc3RWYXJpYWJsZSIsICJsaXN0VmFsdWUiKX0pOwotCi0gICAgICAgICAgICB2YXIgYXJnID0gYnl0ZWNvZGUuU3RlcEluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0gYXMgSUxpc3Q7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IEJpbmRpbmcoImxpc3RWYXJpYWJsZSIsICJsaXN0VmFsdWUiKSwgYXJnIVsxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZGluZ3NJbnNpZGVIYXNoU2V0SW5TdGVwQXJndW1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHZhciBiID0gQmluZGluZ3MuSW5zdGFuY2U7Ci0KLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFN0ZXAoInNvbWVTdGVwIiwgbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ICJ0ZXN0IiwgYi5PZigic2V0VmFyaWFibGUiLCAic2V0VmFsdWUiKSB9KTsKLQotICAgICAgICAgICAgdmFyIGFyZyA9IGJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnNbMF0uQXJndW1lbnRzWzBdIGFzIElTZXQ8b2JqZWN0PjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgQmluZGluZygic2V0VmFyaWFibGUiLCAic2V0VmFsdWUiKSwgYXJnIS5Ub0xpc3QoKVsxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZ2luZ3NGb3JTaW1wbGVWYWx1ZUluU291cmNlQXJndW1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHZhciBiaW5kaW5ncyA9IEJpbmRpbmdzLkluc3RhbmNlOwotCi0gICAgICAgICAgICBieXRlY29kZS5BZGRTb3VyY2UoImhhc0xhYmVsIiwgYmluZGluZ3MuT2YoImxhYmVsIiwgInRlc3R2YWx1ZSIpKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBCaW5kaW5nKCJsYWJlbCIsICJ0ZXN0dmFsdWUiKSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZGluZ3NJbnNpZGVBcnJheUluU291cmNlQXJndW1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHZhciBiID0gQmluZGluZ3MuSW5zdGFuY2U7Ci0KLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFNvdXJjZSgic29tZVNvdXJjZSIsICJ0ZXN0IiwgbmV3W10geyBiLk9mKCJhcnJheVZhcmlhYmxlIiwgImFycmF5VmFsdWUiKSB9KTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBCaW5kaW5nKCJhcnJheVZhcmlhYmxlIiwgImFycmF5VmFsdWUiKSwgYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1sxXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZGluZ3NJbnNpZGVEaWN0aW9uYXJ5VmFsdWVzSW5Tb3VyY2VBcmd1bWVudCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgdmFyIGIgPSBCaW5kaW5ncy5JbnN0YW5jZTsKLQotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU291cmNlKCJzb21lU291cmNlIiwgbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHsgeyAic29tZUtleSIsIGIuT2YoInZhbFZhcmlhYmxlIiwgInZhbFZhbHVlIikgfSB9KTsKLQotICAgICAgICAgICAgdmFyIGFyZyA9IGJ5dGVjb2RlLlNvdXJjZUluc3RydWN0aW9uc1swXS5Bcmd1bWVudHNbMF0gYXMgSURpY3Rpb25hcnk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IEJpbmRpbmcoInZhbFZhcmlhYmxlIiwgInZhbFZhbHVlIiksIGFyZyFbInNvbWVLZXkiXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZGluZ3NJbnNpZGVEaWN0aW9uYXJ5S2V5c0luU291cmNlQXJndW1lbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIHZhciBiID0gQmluZGluZ3MuSW5zdGFuY2U7Ci0KLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFNvdXJjZSgic29tZVNvdXJjZSIsIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7IHsgYi5PZigia2V5VmFyaWFibGUiLCAia2V5VmFsdWUiKSwgMTIzNCB9IH0pOwotCi0gICAgICAgICAgICB2YXIgYXJnID0gYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXTsKLSAgICAgICAgICAgIHZhciBiaW5kaW5nID0gKChEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PilhcmchKS5LZXlzLkZpcnN0KCkgYXMgQmluZGluZzsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgQmluZGluZygia2V5VmFyaWFibGUiLCAia2V5VmFsdWUiKSwgYmluZGluZyk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkVXNlQmluZGluZ3NJbnNpZGVMaXN0SW5Tb3VyY2VBcmd1bWVudCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgdmFyIGIgPSBCaW5kaW5ncy5JbnN0YW5jZTsKLQotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU291cmNlKCJzb21lU291cmNlIiwgbmV3IExpc3Q8c3RyaW5nPiB7ICJ0ZXN0IiwgYi5PZigibGlzdFZhcmlhYmxlIiwgImxpc3RWYWx1ZSIpIH0pOwotCi0gICAgICAgICAgICB2YXIgYXJnID0gYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSBhcyBJTGlzdDsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgQmluZGluZygibGlzdFZhcmlhYmxlIiwgImxpc3RWYWx1ZSIpLCBhcmchWzFdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRVc2VCaW5kaW5nc0luc2lkZUhhc2hTZXRJblNvdXJjZUFyZ3VtZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICB2YXIgYiA9IEJpbmRpbmdzLkluc3RhbmNlOwotCi0gICAgICAgICAgICBieXRlY29kZS5BZGRTb3VyY2UoInNvbWVTb3VyY2UiLCBuZXcgSGFzaFNldDxzdHJpbmc+IHsgInRlc3QiLCBiLk9mKCJzZXRWYXJpYWJsZSIsICJzZXRWYWx1ZSIpIH0pOwotCi0gICAgICAgICAgICB2YXIgYXJnID0gYnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zWzBdLkFyZ3VtZW50c1swXSBhcyBJU2V0PG9iamVjdD47Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IEJpbmRpbmcoInNldFZhcmlhYmxlIiwgInNldFZhbHVlIiksIGFyZyEuVG9MaXN0KClbMV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEluY2x1ZGVTdGVwQW5kU291cmNlSW5zdHJ1Y3Rpb25zRm9yVG9TdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFNvdXJjZSgic291cmNlIiwgMSwgMik7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJzdGVwMSIsIDksIDgpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgic3RlcDIiLCAwKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFN0ZXAoInN0ZXAzIiwgMCwgbnVsbCwgMGQpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgic3RlcDQiLCAiMCksIHN0ZXBYKFwiaGVsbG9cIiIpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIltbc291cmNlKDEsIDIpXSwgW3N0ZXAxKDksIDgpLCBzdGVwMigwKSwgc3RlcDMoMCwgbnVsbCwgMCksIHN0ZXA0KDApLCBzdGVwWChcImhlbGxvXCIpXV0iLAotICAgICAgICAgICAgICAgIGJ5dGVjb2RlLlRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0cy5jcwppbmRleCBhNjg3NmViLi45MTM3MGM2IDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyYXBoVHJhdmVyc2FsU291cmNlVGVzdHMuY3MKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmFwaFRyYXZlcnNhbFNvdXJjZVRlc3RzLmNzCkBAIC0zMiw0NiArMzIsNDUgQEAKICAgICBwdWJsaWMgY2xhc3MgR3JhcGhUcmF2ZXJzYWxTb3VyY2VUZXN0cwogICAgIHsKICAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEJlSW5kZXBlbmRlbnRGcm9tUmV0dXJuZWRHcmFwaFRyYXZlcnNhbE1vZGlmeWluZ0J5dGVjb2RlKCkKKyAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkQmVJbmRlcGVuZGVudEZyb21SZXR1cm5lZEdyYXBoVHJhdmVyc2FsKCkKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UuVHJhdmVyc2FsKCkuV2l0aChudWxsKTsKIAogICAgICAgICAgICAgZy5WKCkuSGFzKCJzb21lS2V5IiwgInNvbWVWYWx1ZSIpLkRyb3AoKTsKIAotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KGcuQnl0ZWNvZGUuU3RlcEluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuRW1wdHkoZy5CeXRlY29kZS5Tb3VyY2VJbnN0cnVjdGlvbnMpOworICAgICAgICAgICAgQXNzZXJ0LlRydWUoZy5HcmVtbGluTGFuZy5Jc0VtcHR5KTsKICAgICAgICAgfQogCiAgICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRCZUluZGVwZW5kZW50RnJvbVJldHVybmVkR3JhcGhUcmF2ZXJzYWxTb3VyY2VNb2RpZnlpbmdCeXRlY29kZSgpCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEJlSW5kZXBlbmRlbnRGcm9tUmV0dXJuZWRHcmFwaFRyYXZlcnNhbFNvdXJjZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBnMSA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS5UcmF2ZXJzYWwoKS5XaXRoKG51bGwpOwogCiAgICAgICAgICAgICB2YXIgZzIgPSBnMS5XaXRoU2lkZUVmZmVjdCgic29tZVNpZGVFZmZlY3RLZXkiLCAic29tZVNpZGVFZmZlY3RWYWx1ZSIpOwogCi0gICAgICAgICAgICBBc3NlcnQuRW1wdHkoZzEuQnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5FbXB0eShnMS5CeXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUoZzIuQnl0ZWNvZGUuU291cmNlSW5zdHJ1Y3Rpb25zKTsKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGcxLkdyZW1saW5MYW5nLklzRW1wdHkpOworICAgICAgICAgICAgQXNzZXJ0LkZhbHNlKGcyLkdyZW1saW5MYW5nLklzRW1wdHkpOwogICAgICAgICB9CiAKICAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIENsb25lU2hvdWxkQ3JlYXRlSW5kZXBlbmRlbnRHcmFwaFRyYXZlcnNhbE1vZGlmeWluZ0J5dGVjb2RlKCkKKyAgICAgICAgcHVibGljIHZvaWQgQ2xvbmVTaG91bGRDcmVhdGVJbmRlcGVuZGVudEdyYXBoVHJhdmVyc2FsKCkKICAgICAgICAgeworICAgICAgICAgICAgR3JlbWxpbkxhbmcuUmVzZXRDb3VudGVyKCk7CiAgICAgICAgICAgICB2YXIgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS5UcmF2ZXJzYWwoKS5XaXRoKG51bGwpOwogICAgICAgICAgICAgdmFyIG9yaWdpbmFsID0gZy5WKCkuT3V0KCJjcmVhdGVkIik7CiAgICAgICAgICAgICB2YXIgY2xvbmUgPSBvcmlnaW5hbC5DbG9uZSgpLk91dCgia25vd3MiKTsKICAgICAgICAgICAgIHZhciBjbG9uZUNsb25lID0gY2xvbmUuQ2xvbmUoKS5PdXQoImNyZWF0ZWQiKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIG9yaWdpbmFsLkJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDMsIGNsb25lLkJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMuQ291bnQpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDQsIGNsb25lQ2xvbmUuQnl0ZWNvZGUuU3RlcEluc3RydWN0aW9ucy5Db3VudCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLm91dChcImNyZWF0ZWRcIikiLCBvcmlnaW5hbC5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm91dChcImtub3dzXCIpIiwgY2xvbmUuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5vdXQoXCJrbm93c1wiKS5vdXQoXCJjcmVhdGVkXCIpIiwgY2xvbmVDbG9uZS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOwogCiAgICAgICAgICAgICBvcmlnaW5hbC5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7CiAgICAgICAgICAgICBjbG9uZS5WKCkuT3V0KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgzLCBvcmlnaW5hbC5CeXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zLkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCg1LCBjbG9uZS5CeXRlY29kZS5TdGVwSW5zdHJ1Y3Rpb25zLkNvdW50KTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCg0LCBjbG9uZUNsb25lLkJ5dGVjb2RlLlN0ZXBJbnN0cnVjdGlvbnMuQ291bnQpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikiLCBvcmlnaW5hbC5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm91dChcImtub3dzXCIpLlYoKS5vdXQoKSIsIGNsb25lLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLm91dChcImNyZWF0ZWRcIikub3V0KFwia25vd3NcIikub3V0KFwiY3JlYXRlZFwiKSIsIGNsb25lQ2xvbmUuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgW0ZhY3RdCkBAIC04MSw3ICs4MCw3IEBACiAKICAgICAgICAgICAgIGcuVigwKS5BZGRFKCJzZWxmIikuVG8oX18uVigxKSk7CiAKLSAgICAgICAgICAgIEFzc2VydC5UaHJvd3M8QXJndW1lbnRFeGNlcHRpb24+KCgpID0+IGcuVigwKS5BZGRFKCJzZWxmIikuVG8oZy5WKDEpKSk7CisgICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24+KCgpID0+IGcuVigwKS5BZGRFKCJzZWxmIikuVG8oZy5WKDEpKSk7CiAgICAgICAgIH0KICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmVtbGluTGFuZ1Rlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9HcmVtbGluTGFuZ1Rlc3RzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjc0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL0dyZW1saW5MYW5nVGVzdHMuY3MKQEAgLTAsMCArMSwxMDQ1IEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLk51bWVyaWNzOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBHcmVtbGluLk5ldC5Qcm9jZXNzLlRyYXZlcnNhbC5TdHJhdGVneS5EZWNvcmF0aW9uOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuVmVyaWZpY2F0aW9uOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwordXNpbmcgWHVuaXQ7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5Vbml0VGVzdC5Qcm9jZXNzLlRyYXZlcnNhbAoreworICAgIHB1YmxpYyBjbGFzcyBHcmVtbGluTGFuZ1Rlc3RzIDogSURpc3Bvc2FibGUKKyAgICB7CisgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgX2c7CisKKyAgICAgICAgcHVibGljIEdyZW1saW5MYW5nVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5SZXNldENvdW50ZXIoKTsKKyAgICAgICAgICAgIF9nID0gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBEaXNwb3NlKCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8gLS0tIENvcmUgVHJhdmVyc2FsIFRlc3RzIDEtMzAgLS0tCisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkiLCBfZy5WKCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfMTIzNCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiMVwiLFwiMlwiLFwiM1wiLFwiNFwiKSIsIF9nLlYoIjEiLCAiMiIsICIzIiwgIjQiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX1ZhbHVlTWFwX3RydWUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjNcIikudmFsdWVNYXAodHJ1ZSkiLCBfZy5WKCIzIikuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KHRydWUpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0NvbnN0YW50XzUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmNvbnN0YW50KDUpIiwgX2cuVigpLkNvbnN0YW50KDUpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0NvbnN0YW50XzFfNSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuY29uc3RhbnQoMS41RCkiLCBfZy5WKCkuQ29uc3RhbnQoMS41KS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9Db25zdGFudF9IZWxsbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuY29uc3RhbnQoXCJIZWxsb1wiKSIsIF9nLlYoKS5Db25zdGFudCgiSGVsbG8iKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNMYWJlbF9haXJwb3J0X0xpbWl0XzUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS5saW1pdCg1TCkiLCBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5MaW1pdDxvYmplY3Q+KDUpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc0xhYmVsX1BfV2l0aGluKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXNMYWJlbCh3aXRoaW4oW1wiYVwiLFwiYlwiLFwiY1wiXSkpIiwgX2cuVigpLkhhc0xhYmVsKFAuV2l0aGluKCJhIiwgImIiLCAiYyIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNMYWJlbF9haXJwb3J0X2NvbnRpbmVudF9PdXRfTGltaXRfNSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIsXCJjb250aW5lbnRcIikub3V0KCkubGltaXQoNUwpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiLCAiY29udGluZW50IikuT3V0KCkuTGltaXQ8b2JqZWN0Pig1KS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNMYWJlbF9haXJwb3J0X091dF9WYWx1ZXNfY29kZV9MaW1pdF81KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikub3V0KCkudmFsdWVzKFwiY29kZVwiKS5saW1pdCg1TCkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk91dCgpLlZhbHVlczxvYmplY3Q+KCJjb2RlIikuTGltaXQ8b2JqZWN0Pig1KS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX0FzX2FfT3V0X3JvdXRlX0xpbWl0XzEwX1doZXJlX0VxX2FfQnlfcmVnaW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCIzXCIpLmFzKFwiYVwiKS5vdXQoXCJyb3V0ZVwiKS5saW1pdCgxMEwpLndoZXJlKGVxKFwiYVwiKSkuYnkoXCJyZWdpb25cIikiLAorICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5BcygiYSIpLk91dCgicm91dGUiKS5MaW1pdDxvYmplY3Q+KDEwKS5XaGVyZShQLkVxKCJhIikpLkJ5KCJyZWdpb24iKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX1JlcGVhdF9PdXRfcm91dGVfU2ltcGxlUGF0aF9UaW1lc18yX1BhdGhfQnlfY29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiM1wiKS5yZXBlYXQoX18ub3V0KFwicm91dGVcIikuc2ltcGxlUGF0aCgpKS50aW1lcygyKS5wYXRoKCkuYnkoXCJjb2RlXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCIzIikuUmVwZWF0KF9fLk91dCgicm91dGUiKS5TaW1wbGVQYXRoKCkpLlRpbWVzKDIpLlBhdGgoKS5CeSgiY29kZSIpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc0xhYmVsX2FpcnBvcnRfT3V0X0hhc19yZWdpb25fVVNUWF9WYWx1ZXNfY29kZV9MaW1pdF81KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikub3V0KCkuaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKS52YWx1ZXMoXCJjb2RlXCIpLmxpbWl0KDVMKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3V0KCkuSGFzKCJyZWdpb24iLCAiVVMtVFgiKS5WYWx1ZXM8b2JqZWN0PigiY29kZSIpLkxpbWl0PG9iamVjdD4oNSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzTGFiZWxfYWlycG9ydF9Vbmlvbl9WYWx1ZXNfY2l0eV9WYWx1ZXNfcmVnaW9uX0xpbWl0XzUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS51bmlvbihfXy52YWx1ZXMoXCJjaXR5XCIpLF9fLnZhbHVlcyhcInJlZ2lvblwiKSkubGltaXQoNUwpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5VbmlvbjxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KCJjaXR5IiksIF9fLlZhbHVlczxvYmplY3Q+KCJyZWdpb24iKSkuTGltaXQ8b2JqZWN0Pig1KS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX0FzX2FfT3V0X3JvdXRlX3JvdXRlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiM1wiKS5hcyhcImFcIikub3V0KFwicm91dGVcIixcInJvdXRlc1wiKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMyIpLkFzKCJhIikuT3V0KCJyb3V0ZSIsICJyb3V0ZXMiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9XaGVyZV9WYWx1ZXNfcnVud2F5c19Jc181KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJydW53YXlzXCIpLmlzKDUpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLldoZXJlKF9fLlZhbHVlczxvYmplY3Q+KCJydW53YXlzIikuSXMoNSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzNfUmVwZWF0X091dF9TaW1wbGVQYXRoX1VudGlsX0hhc19jb2RlX0FHUl9QYXRoX0J5X2NvZGVfTGltaXRfNSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiM1wiKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoXCJjb2RlXCIsXCJBR1JcIikpLnBhdGgoKS5ieShcImNvZGVcIikubGltaXQoNUwpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCIzIikuUmVwZWF0KF9fLk91dCgpLlNpbXBsZVBhdGgoKSkuVW50aWwoX18uSGFzKCJjb2RlIiwgIkFHUiIpKS5QYXRoKCkuQnkoImNvZGUiKS5MaW1pdDxvYmplY3Q+KDUpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc0xhYmVsX2FpcnBvcnRfT3JkZXJfQnlfSWQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS5vcmRlcigpLmJ5KF9fLmlkKCkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KF9fLklkKCkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc0xhYmVsX2FpcnBvcnRfT3JkZXJfQnlfVF9JZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLm9yZGVyKCkuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk9yZGVyKCkuQnkoVC5JZCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzTGFiZWxfYWlycG9ydF9PcmRlcl9CeV9JZF9EZXNjKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikub3JkZXIoKS5ieShfXy5pZCgpLE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KF9fLklkKCksIE9yZGVyLkRlc2MpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc0xhYmVsX2FpcnBvcnRfT3JkZXJfQnlfY29kZV9EZXNjKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikub3JkZXIoKS5ieShcImNvZGVcIixPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3JkZXIoKS5CeSgiY29kZSIsIE9yZGVyLkRlc2MpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzEyM19Mb2NhbF9PdXRfT3V0X0RlZHVwX0ZvbGQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjFcIixcIjJcIixcIjNcIikubG9jYWwoX18ub3V0KCkub3V0KCkuZGVkdXAoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCIxIiwgIjIiLCAiMyIpLkxvY2FsPG9iamVjdD4oX18uT3V0KCkuT3V0KCkuRGVkdXAoKS5Gb2xkKCkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzNfT3V0X1BhdGhfQ291bnRfU2NvcGVfTG9jYWwoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjNcIikub3V0KCkucGF0aCgpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMyIpLk91dCgpLlBhdGgoKS5Db3VudChTY29wZS5Mb2NhbCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0VfQ291bnQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuRSgpLmNvdW50KCkiLCBfZy5FKCkuQ291bnQoKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl81X091dEVfcm91dGVfSW5WX1BhdGhfTGltaXRfMTAoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjVcIikub3V0RShcInJvdXRlXCIpLmluVigpLnBhdGgoKS5saW1pdCgxMEwpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCI1IikuT3V0RSgicm91dGUiKS5JblYoKS5QYXRoKCkuTGltaXQ8b2JqZWN0PigxMCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfNV9Qcm9wZXJ0eU1hcF9TZWxlY3RfQ29sdW1uX0tleXMoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjVcIikucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCI1IikuUHJvcGVydHlNYXA8b2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5LZXlzKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl81X1Byb3BlcnR5TWFwX1NlbGVjdF9Db2x1bW5fVmFsdWVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCI1XCIpLnByb3BlcnR5TWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCI1IikuUHJvcGVydHlNYXA8b2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzNfVmFsdWVzX3J1bndheXNfTWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiM1wiKS52YWx1ZXMoXCJydW53YXlzXCIpLm1hdGgoXCJfICsgMVwiKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMyIpLlZhbHVlczxvYmplY3Q+KCJydW53YXlzIikuTWF0aCgiXyArIDEiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX0VtaXRfUmVwZWF0X091dF9TaW1wbGVQYXRoX1RpbWVzXzNfTGltaXRfNV9QYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCIzXCIpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlUGF0aCgpKS50aW1lcygzKS5saW1pdCg1TCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCIzIikuRW1pdCgpLlJlcGVhdChfXy5PdXQoKS5TaW1wbGVQYXRoKCkpLlRpbWVzKDMpLkxpbWl0PG9iamVjdD4oNSkuUGF0aCgpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX01hdGNoX0FzX2FfSGFzX2NvZGVfTEhSX0FzX2JfU2VsZWN0X2JfQnlfY29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcImNvZGVcIixcIkxIUlwiKS5hcyhcImJcIikpLnNlbGVjdChcImJcIikuYnkoXCJjb2RlXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcygiYSIpLkhhcygiY29kZSIsICJMSFIiKS5BcygiYiIpKS5TZWxlY3Q8b2JqZWN0PigiYiIpLkJ5KCJjb2RlIikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIC0tLSBDb3JlIFRyYXZlcnNhbCBUZXN0cyAzMS02MCAtLS0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19rZXl3b3JkX3Byb3BlcnR5X3JlcGVhdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwidGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5XCIsXCJyZXBlYXRcIikiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoInRlc3QtdXNpbmcta2V5d29yZC1hcy1wcm9wZXJ0eSIsICJyZXBlYXQiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8xX0FkZEVfdGVzdF9Ub19WXzQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjFcIikuYWRkRShcInRlc3RcIikudG8oX18uVihcIjRcIikpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCIxIikuQWRkRSgidGVzdCIpLlRvKF9fLlYoIjQiKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfVmFsdWVzX3J1bndheXNfTWF4KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS52YWx1ZXMoXCJydW53YXlzXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuVmFsdWVzPG9iamVjdD4oInJ1bndheXMiKS5NYXg8b2JqZWN0PigpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX1ZhbHVlc19ydW53YXlzX01pbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkudmFsdWVzKFwicnVud2F5c1wiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLlZhbHVlczxvYmplY3Q+KCJydW53YXlzIikuTWluPG9iamVjdD4oKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9WYWx1ZXNfcnVud2F5c19TdW0oKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLnZhbHVlcyhcInJ1bndheXNcIikuc3VtKCkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5WYWx1ZXM8b2JqZWN0PigicnVud2F5cyIpLlN1bTxvYmplY3Q+KCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfVmFsdWVzX3J1bndheXNfTWVhbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkudmFsdWVzKFwicnVud2F5c1wiKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5WYWx1ZXM8b2JqZWN0PigicnVud2F5cyIpLk1lYW48b2JqZWN0PigpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19XaXRoU2Fja18wX1ZfMzVfU2Fja19PcGVyYXRvcl9TdW1fQnlfcnVud2F5c19TYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLndpdGhTYWNrKDApLlYoXCIzXCIsXCI1XCIpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcInJ1bndheXNcIikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICBfZy5XaXRoU2FjaygwKS5WKCIzIiwgIjUiKS5TYWNrKE9wZXJhdG9yLlN1bSkuQnkoInJ1bndheXMiKS5TYWNrPG9iamVjdD4oKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0XzNfNF81KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdCgzLDQsNSkiLCBfZy5JbmplY3QoMywgNCwgNSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0luamVjdF9MaXN0XzNfNF81KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdChbMyw0LDVdKSIsCisgICAgICAgICAgICAgICAgX2cuSW5qZWN0KG5ldyBMaXN0PG9iamVjdD4geyAzLCA0LCA1IH0pLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19JbmplY3RfM180XzVfQ291bnQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuaW5qZWN0KDMsNCw1KS5jb3VudCgpIiwgX2cuSW5qZWN0KDMsIDQsIDUpLkNvdW50KCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX3J1bndheXNfR3RfNV9Db3VudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwicnVud2F5c1wiLGd0KDUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJydW53YXlzIiwgUC5HdCg1KSkuQ291bnQoKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNfcnVud2F5c19MdGVfNV8zX0NvdW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXMoXCJydW53YXlzXCIsbHRlKDUuM0QpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJydW53YXlzIiwgUC5MdGUoNS4zKSkuQ291bnQoKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNfY29kZV9XaXRoaW5fMTIzXzEyNCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwiY29kZVwiLHdpdGhpbihbMTIzLDEyNF0pKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygiY29kZSIsIFAuV2l0aGluKDEyMywgMTI0KSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX2NvZGVfV2l0aGluXzEyM19hYmMoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcImNvZGVcIix3aXRoaW4oWzEyMyxcImFiY1wiXSkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJjb2RlIiwgUC5XaXRoaW4oMTIzLCAiYWJjIikpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19jb2RlX1dpdGhpbl9hYmNfMTIzKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXMoXCJjb2RlXCIsd2l0aGluKFtcImFiY1wiLDEyM10pKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygiY29kZSIsIFAuV2l0aGluKCJhYmMiLCAxMjMpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNfY29kZV9XaXRoaW5fYWJjX3h5eigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwiY29kZVwiLHdpdGhpbihbXCJhYmNcIixcInh5elwiXSkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJjb2RlIiwgUC5XaXRoaW4oImFiYyIsICJ4eXoiKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfMTJfSGFzX3JlZ2lvbl9XaXRoaW5fVVNUWF9VU0dBKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCIxXCIsXCIyXCIpLmhhcyhcInJlZ2lvblwiLHdpdGhpbihbXCJVUy1UWFwiLFwiVVMtR0FcIl0pKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMSIsICIyIikuSGFzKCJyZWdpb24iLCBQLldpdGhpbigiVVMtVFgiLCAiVVMtR0EiKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfQW5kX0hhc19ydW53YXlzX0d0XzVfSGFzX3JlZ2lvbl9VU1RYKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5hbmQoX18uaGFzKFwicnVud2F5c1wiLGd0KDUpKSxfXy5oYXMoXCJyZWdpb25cIixcIlVTLVRYXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkFuZChfXy5IYXMoInJ1bndheXMiLCBQLkd0KDUpKSwgX18uSGFzKCJyZWdpb24iLCAiVVMtVFgiKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfVW5pb25fSGFzX3J1bndheXNfR3RfNV9IYXNfcmVnaW9uX1VTVFgoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLnVuaW9uKF9fLmhhcyhcInJ1bndheXNcIixndCg1KSksX18uaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5VbmlvbjxvYmplY3Q+KF9fLkhhcygicnVud2F5cyIsIFAuR3QoNSkpLCBfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX0Nob29zZV9WYWx1ZXNfcnVud2F5c19Jc18zX0NvbnN0YW50X3RocmVlX0NvbnN0YW50X25vdF90aHJlZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiM1wiKS5jaG9vc2UoX18udmFsdWVzKFwicnVud2F5c1wiKS5pcygzKSxfXy5jb25zdGFudChcInRocmVlXCIpLF9fLmNvbnN0YW50KFwibm90IHRocmVlXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMyIpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KCJydW53YXlzIikuSXMoMyksIF9fLkNvbnN0YW50KCJ0aHJlZSIpLCBfXy5Db25zdGFudCgibm90IHRocmVlIikpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzNfQ2hvb3NlX1ZhbHVlc19ydW53YXlzX09wdGlvbl8xX09wdGlvbl8yKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCIzXCIpLmNob29zZShfXy52YWx1ZXMoXCJydW53YXlzXCIpKS5vcHRpb24oMSxfXy5jb25zdGFudChcInRocmVlXCIpKS5vcHRpb24oMixfXy5jb25zdGFudChcIm5vdCB0aHJlZVwiKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PigicnVud2F5cyIpKS5PcHRpb24oMSwgX18uQ29uc3RhbnQoInRocmVlIikpLk9wdGlvbigyLCBfXy5Db25zdGFudCgibm90IHRocmVlIikpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzNfQ2hvb3NlX1ZhbHVlc19ydW53YXlzX09wdGlvbl8xXzVfT3B0aW9uXzIoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjNcIikuY2hvb3NlKF9fLnZhbHVlcyhcInJ1bndheXNcIikpLm9wdGlvbigxLjVELF9fLmNvbnN0YW50KFwib25lIGFuZCBhIGhhbGZcIikpLm9wdGlvbigyLF9fLmNvbnN0YW50KFwibm90IHRocmVlXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMyIpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KCJydW53YXlzIikpLk9wdGlvbigxLjUsIF9fLkNvbnN0YW50KCJvbmUgYW5kIGEgaGFsZiIpKS5PcHRpb24oMiwgX18uQ29uc3RhbnQoIm5vdCB0aHJlZSIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX1JlcGVhdF9PdXRfU2ltcGxlUGF0aF9VbnRpbF9Mb29wc19Jc18xX0NvdW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCIzXCIpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5SZXBlYXQoX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5VbnRpbChfXy5Mb29wcygpLklzKDEpKS5Db3VudCgpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc0xhYmVsX2FpcnBvcnRfTGltaXRfMjBfR3JvdXBfQnlfcmVnaW9uX0J5X2NvZGVfT3JkZXJfTG9jYWxfQnlfS2V5cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLmxpbWl0KDIwTCkuZ3JvdXAoKS5ieShcInJlZ2lvblwiKS5ieShcImNvZGVcIikub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuTGltaXQ8b2JqZWN0PigyMCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoInJlZ2lvbiIpLkJ5KCJjb2RlIikuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KENvbHVtbi5LZXlzKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8xX0FzX2FfVl8yX0FzX2FfU2VsZWN0X1BvcF9BbGxfYSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiMVwiKS5hcyhcImFcIikuVihcIjJcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLFwiYVwiKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMSIpLkFzKCJhIikuVigiMiIpLkFzKCJhIikuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgImEiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfQWRkVl90ZXN0X1Byb3BlcnR5X0NhcmRpbmFsaXR5X1NldF9wMV8xMCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5hZGRWKFwidGVzdFwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsXCJwMVwiLDEwKSIsCisgICAgICAgICAgICAgICAgX2cuQWRkVigidGVzdCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNldCwgInAxIiwgMTApLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19BZGRWX3Rlc3RfUHJvcGVydHlfQ2FyZGluYWxpdHlfTGlzdF9wMV8xMCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5hZGRWKFwidGVzdFwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LFwicDFcIiwxMCkiLAorICAgICAgICAgICAgICAgIF9nLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAicDEiLCAxMCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0FkZFZfdGVzdF9Qcm9wZXJ0eV9DYXJkaW5hbGl0eV9TaW5nbGVfcDFfMTAoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuYWRkVihcInRlc3RcIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLFwicDFcIiwxMCkiLAorICAgICAgICAgICAgICAgIF9nLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJwMSIsIDEwKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9MaW1pdF81X09yZGVyX0J5X0xhYmVsKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5saW1pdCg1TCkub3JkZXIoKS5ieShfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkxpbWl0PG9iamVjdD4oNSkuT3JkZXIoKS5CeShfXy5MYWJlbCgpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9SYW5nZV8xXzUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLnJhbmdlKDFMLDVMKSIsIF9nLlYoKS5SYW5nZTxvYmplY3Q+KDEsIDUpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLS0gQ29yZSBUcmF2ZXJzYWwgVGVzdHMgNjEtODggLS0tCisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfQWRkVl90ZXN0X1Byb3BlcnR5X3AxXzEyMygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5hZGRWKFwidGVzdFwiKS5wcm9wZXJ0eShcInAxXCIsMTIzKSIsCisgICAgICAgICAgICAgICAgX2cuQWRkVigidGVzdCIpLlByb3BlcnR5KCJwMSIsIDEyMykuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0FkZFZfdGVzdF9Qcm9wZXJ0eV9kYXRlX0RhdGVUaW1lT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmFkZFYoXCJ0ZXN0XCIpLnByb3BlcnR5KFwiZGF0ZVwiLGRhdGV0aW1lKFwiMjAyMS0wMi0wMVQwOTozMDowMC4wMDBaXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuQWRkVigidGVzdCIpLlByb3BlcnR5KCJkYXRlIiwgbmV3IERhdGVUaW1lT2Zmc2V0KDIwMjEsIDIsIDEsIDksIDMwLCAwLCBUaW1lU3Bhbi5aZXJvKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0FkZFZfdGVzdF9Qcm9wZXJ0eV9kYXRlX0RhdGVUaW1lT2Zmc2V0X21pZG5pZ2h0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmFkZFYoXCJ0ZXN0XCIpLnByb3BlcnR5KFwiZGF0ZVwiLGRhdGV0aW1lKFwiMjAyMS0wMi0wMVQwMDowMDowMC4wMDBaXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuQWRkVigidGVzdCIpLlByb3BlcnR5KCJkYXRlIiwgbmV3IERhdGVUaW1lT2Zmc2V0KDIwMjEsIDIsIDEsIDAsIDAsIDAsIFRpbWVTcGFuLlplcm8pKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfQWRkRV9yb3V0ZV9Gcm9tX1ZfMV9Ub19WXzIoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuYWRkRShcInJvdXRlXCIpLmZyb20oX18uVihcIjFcIikpLnRvKF9fLlYoXCIyXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuQWRkRSgicm91dGUiKS5Gcm9tKF9fLlYoIjEiKSkuVG8oX18uVigiMiIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfV2l0aFNpZGVFZmZlY3RfYV9saXN0X1ZfM19TZWxlY3RfYSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy53aXRoU2lkZUVmZmVjdChcImFcIixbMSwyXSkuVihcIjNcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgX2cuV2l0aFNpZGVFZmZlY3QoImEiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiB9KS5WKCIzIikuU2VsZWN0PG9iamVjdD4oImEiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfV2l0aFNpZGVFZmZlY3RfYV8xX1ZfM19TZWxlY3RfYSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy53aXRoU2lkZUVmZmVjdChcImFcIiwxKS5WKFwiM1wiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5XaXRoU2lkZUVmZmVjdCgiYSIsIDEpLlYoIjMiKS5TZWxlY3Q8b2JqZWN0PigiYSIpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19XaXRoU2lkZUVmZmVjdF9hX2FiY19WXzNfU2VsZWN0X2EoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsXCJhYmNcIikuVihcIjNcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgX2cuV2l0aFNpZGVFZmZlY3QoImEiLCAiYWJjIikuVigiMyIpLlNlbGVjdDxvYmplY3Q+KCJhIikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX2FpcnBvcnRfcmVnaW9uX1VTTk1fTGltaXRfM19WYWx1ZXNfZWxldl9Gb2xkX0luZGV4KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXMoXCJhaXJwb3J0XCIsXCJyZWdpb25cIixcIlVTLU5NXCIpLmxpbWl0KDNMKS52YWx1ZXMoXCJlbGV2XCIpLmZvbGQoKS5pbmRleCgpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJhaXJwb3J0IiwgInJlZ2lvbiIsICJVUy1OTSIpLkxpbWl0PG9iamVjdD4oMykuVmFsdWVzPG9iamVjdD4oImVsZXYiKS5Gb2xkKCkuSW5kZXg8b2JqZWN0PigpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzNfUmVwZWF0X1RpbWVMaW1pdF8xMDAwX091dF9TaW1wbGVQYXRoX1VudGlsX0hhc19jb2RlX0FHUl9QYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCIzXCIpLnJlcGVhdChfXy50aW1lTGltaXQoMTAwMEwpLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwiY29kZVwiLFwiQUdSXCIpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5SZXBlYXQoX18uVGltZUxpbWl0KDEwMDApLk91dCgpLlNpbXBsZVBhdGgoKSkuVW50aWwoX18uSGFzKCJjb2RlIiwgIkFHUiIpKS5QYXRoKCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzTGFiZWxfYWlycG9ydF9XaGVyZV9WYWx1ZXNfZWxldl9Jc19HdF8xNDAwMCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLndoZXJlKF9fLnZhbHVlcyhcImVsZXZcIikuaXMoZ3QoMTQwMDApKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLldoZXJlKF9fLlZhbHVlczxvYmplY3Q+KCJlbGV2IikuSXMoUC5HdCgxNDAwMCkpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNMYWJlbF9haXJwb3J0X1doZXJlX091dF9Db3VudF9Jc19HdF8yNTBfVmFsdWVzX2NvZGUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS53aGVyZShfXy5vdXQoKS5jb3VudCgpLmlzKGd0KDI1MCkpKS52YWx1ZXMoXCJjb2RlXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5XaGVyZShfXy5PdXQoKS5Db3VudCgpLklzKFAuR3QoMjUwKSkpLlZhbHVlczxvYmplY3Q+KCJjb2RlIikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzTGFiZWxfYWlycG9ydF9GaWx0ZXJfT3V0X0NvdW50X0lzX0d0XzI1MF9WYWx1ZXNfY29kZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLmZpbHRlcihfXy5vdXQoKS5jb3VudCgpLmlzKGd0KDI1MCkpKS52YWx1ZXMoXCJjb2RlXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5GaWx0ZXIoX18uT3V0KCkuQ291bnQoKS5JcyhQLkd0KDI1MCkpKS5WYWx1ZXM8b2JqZWN0PigiY29kZSIpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19Db21wbGV4X3NhY2tfcmVwZWF0X3VudGlsX2xvY2FsX3VuaW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLndpdGhTYWNrKDApLlYoXCIzXCIpLnJlcGVhdChfXy5vdXRFKFwicm91dGVcIikuc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiZGlzdFwiKS5pblYoKSkudW50aWwoX18uaGFzKFwiY29kZVwiLFwiQUdSXCIpLm9yKCkubG9vcHMoKS5pcyg0KSkuaGFzKFwiY29kZVwiLFwiQUdSXCIpLmxvY2FsKF9fLnVuaW9uKF9fLnBhdGgoKS5ieShcImNvZGVcIikuYnkoXCJkaXN0XCIpLF9fLnNhY2soKSkuZm9sZCgpKS5saW1pdCgxMEwpIiwKKyAgICAgICAgICAgICAgICBfZy5XaXRoU2FjaygwKS5WKCIzIikKKyAgICAgICAgICAgICAgICAgICAgLlJlcGVhdChfXy5PdXRFKCJyb3V0ZSIpLlNhY2soT3BlcmF0b3IuU3VtKS5CeSgiZGlzdCIpLkluVigpKQorICAgICAgICAgICAgICAgICAgICAuVW50aWwoX18uSGFzKCJjb2RlIiwgIkFHUiIpLk9yKCkuTG9vcHMoKS5Jcyg0KSkKKyAgICAgICAgICAgICAgICAgICAgLkhhcygiY29kZSIsICJBR1IiKQorICAgICAgICAgICAgICAgICAgICAuTG9jYWw8b2JqZWN0PihfXy5VbmlvbjxvYmplY3Q+KF9fLlBhdGgoKS5CeSgiY29kZSIpLkJ5KCJkaXN0IiksIF9fLlNhY2s8b2JqZWN0PigpKS5Gb2xkKCkpCisgICAgICAgICAgICAgICAgICAgIC5MaW1pdDxvYmplY3Q+KDEwKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfQWRkVl9Bc19hX0FkZFZfQXNfYl9BZGRFX2tub3dzX0Zyb21fYV9Ub19iKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5BZGRWKCkuQXMoImEiKS5BZGRWKCkuQXMoImIiKS5BZGRFKCJrbm93cyIpLkZyb20oImEiKS5UbygiYiIpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19BZGRWX1BlcnNvbl9Bc19hX0FkZFZfUGVyc29uX0FzX2JfQWRkRV9rbm93c19Gcm9tX2FfVG9fYigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5hZGRWKFwiUGVyc29uXCIpLmFzKFwiYVwiKS5hZGRWKFwiUGVyc29uXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5BZGRWKCJQZXJzb24iKS5BcygiYSIpLkFkZFYoIlBlcnNvbiIpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl8zX1Byb2plY3RfT3V0X0luX0J5X091dF9Db3VudF9CeV9Jbl9Db3VudCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiM1wiKS5wcm9qZWN0KFwiT3V0XCIsXCJJblwiKS5ieShfXy5vdXQoKS5jb3VudCgpKS5ieShfXy5pbigpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCIzIikuUHJvamVjdDxvYmplY3Q+KCJPdXQiLCAiSW4iKS5CeShfXy5PdXQoKS5Db3VudCgpKS5CeShfXy5JbigpLkNvdW50KCkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzQ0X091dF9BZ2dyZWdhdGVfYV9PdXRfV2hlcmVfV2l0aGluX2FfUGF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiNDRcIikub3V0KCkuYWdncmVnYXRlKFwiYVwiKS5vdXQoKS53aGVyZSh3aXRoaW4oW1wiYVwiXSkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgX2cuVigiNDQiKS5PdXQoKS5BZ2dyZWdhdGUoImEiKS5PdXQoKS5XaGVyZShQLldpdGhpbigiYSIpKS5QYXRoKCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX2RhdGVfRGF0ZVRpbWVPZmZzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcImRhdGVcIixkYXRldGltZShcIjIwMjEtMDItMjJUMDA6MDA6MDAuMDAwWlwiKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoImRhdGUiLCBuZXcgRGF0ZVRpbWVPZmZzZXQoMjAyMSwgMiwgMjIsIDAsIDAsIDAsIFRpbWVTcGFuLlplcm8pKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNfZGF0ZV9XaXRoaW5fZGF0ZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcImRhdGVcIix3aXRoaW4oW2RhdGV0aW1lKFwiMjAyMS0wMi0yMlQwMDowMDowMC4wMDBaXCIpLGRhdGV0aW1lKFwiMjAyMS0wMS0wMVQwMDowMDowMC4wMDBaXCIpXSkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJkYXRlIiwgUC5XaXRoaW4oCisgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZU9mZnNldCgyMDIxLCAyLCAyMiwgMCwgMCwgMCwgVGltZVNwYW4uWmVybyksCisgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZU9mZnNldCgyMDIxLCAxLCAxLCAwLCAwLCAwLCBUaW1lU3Bhbi5aZXJvKSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19kYXRlX0JldHdlZW5fZGF0ZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcImRhdGVcIixiZXR3ZWVuKGRhdGV0aW1lKFwiMjAyMS0wMS0wMVQwMDowMDowMC4wMDBaXCIpLGRhdGV0aW1lKFwiMjAyMS0wMi0yMlQwMDowMDowMC4wMDBaXCIpKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoImRhdGUiLCBQLkJldHdlZW4oCisgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZU9mZnNldCgyMDIxLCAxLCAxLCAwLCAwLCAwLCBUaW1lU3Bhbi5aZXJvKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IERhdGVUaW1lT2Zmc2V0KDIwMjEsIDIsIDIyLCAwLCAwLCAwLCBUaW1lU3Bhbi5aZXJvKSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19kYXRlX0luc2lkZV9kYXRlcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwiZGF0ZVwiLGluc2lkZShkYXRldGltZShcIjIwMjEtMDEtMDFUMDA6MDA6MDAuMDAwWlwiKSxkYXRldGltZShcIjIwMjEtMDItMjJUMDA6MDA6MDAuMDAwWlwiKSkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJkYXRlIiwgUC5JbnNpZGUoCisgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZU9mZnNldCgyMDIxLCAxLCAxLCAwLCAwLCAwLCBUaW1lU3Bhbi5aZXJvKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IERhdGVUaW1lT2Zmc2V0KDIwMjEsIDIsIDIyLCAwLCAwLCAwLCBUaW1lU3Bhbi5aZXJvKSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19kYXRlX0d0X0RhdGVUaW1lT2Zmc2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXMoXCJkYXRlXCIsZ3QoZGF0ZXRpbWUoXCIyMDIxLTAxLTAxVDA5OjMwOjAwLjAwMFpcIikpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygiZGF0ZSIsIFAuR3QobmV3IERhdGVUaW1lT2Zmc2V0KDIwMjEsIDEsIDEsIDksIDMwLCAwLCBUaW1lU3Bhbi5aZXJvKSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19ydW53YXlzX0JldHdlZW5fM181KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5oYXMoXCJydW53YXlzXCIsYmV0d2VlbigzLDUpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygicnVud2F5cyIsIFAuQmV0d2VlbigzLCA1KSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX3J1bndheXNfSW5zaWRlXzNfNSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwicnVud2F5c1wiLGluc2lkZSgzLDUpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygicnVud2F5cyIsIFAuSW5zaWRlKDMsIDUpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl80NF9PdXRFX0VsZW1lbnRNYXAoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjQ0XCIpLm91dEUoKS5lbGVtZW50TWFwKCkiLAorICAgICAgICAgICAgICAgIF9nLlYoIjQ0IikuT3V0RSgpLkVsZW1lbnRNYXA8b2JqZWN0PigpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzQ0X1ZhbHVlTWFwX0J5X1VuZm9sZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiNDRcIikudmFsdWVNYXAoKS5ieShfXy51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoIjQ0IikuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoX18uVW5mb2xkPG9iamVjdD4oKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfNDRfVmFsdWVNYXBfV2l0aF9Ub2tlbnNfTGFiZWxzKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCI0NFwiKS52YWx1ZU1hcCgpLndpdGgoXCJ+dGlua2VycG9wLnZhbHVlTWFwLnRva2Vuc1wiLDIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCI0NCIpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLldpdGgoV2l0aE9wdGlvbnMuVG9rZW5zLCBXaXRoT3B0aW9ucy5MYWJlbHMpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzQ0X1ZhbHVlTWFwX1dpdGhfVG9rZW5zKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoXCI0NFwiKS52YWx1ZU1hcCgpLndpdGgoXCJ+dGlua2VycG9wLnZhbHVlTWFwLnRva2Vuc1wiKSIsCisgICAgICAgICAgICAgICAgX2cuVigiNDQiKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5XaXRoKFdpdGhPcHRpb25zLlRva2VucykuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIC0tLSBTdHJhdGVneSBUZXN0cyA4OS05NyAtLS0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19XaXRoU3RyYXRlZ2llc19SZWFkT25seVN0cmF0ZWd5X0FkZFZfdGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5hZGRWKFwidGVzdFwiKSIsCisgICAgICAgICAgICAgICAgX2cuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuQWRkVigidGVzdCIpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19XaXRoU3RyYXRlZ2llc19TdWJncmFwaFN0cmF0ZWd5X3ZlcnRpY2VzX2VkZ2VzX1ZfQ291bnQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gX2cuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koCisgICAgICAgICAgICAgICAgdmVydGljZXM6IF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIiksCisgICAgICAgICAgICAgICAgZWRnZXM6IF9fLkhhc0xhYmVsKCJyb3V0ZSIpKSkuVigpLkNvdW50KCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KCIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoInZlcnRpY2VzOl9fLmhhcyhcInJlZ2lvblwiLFwiVVMtVFhcIikiLCByZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJlZGdlczpfXy5oYXNMYWJlbChcInJvdXRlXCIpIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiKSkuVigpLmNvdW50KCkiLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfV2l0aFN0cmF0ZWdpZXNfU3ViZ3JhcGhTdHJhdGVneV92ZXJ0ZXhQcm9wZXJ0aWVzX1ZfQ291bnQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXNOb3QoXCJydW53YXlzXCIpKSkuVigpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6IF9fLkhhc05vdCgicnVud2F5cyIpKSkuVigpLkNvdW50KCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1dpdGhTdHJhdGVnaWVzX1N1YmdyYXBoU3RyYXRlZ3lfdmVydGljZXNfdmVydGV4UHJvcGVydGllc19WX0NvdW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IF9nLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KAorICAgICAgICAgICAgICAgIHZlcnRpY2VzOiBfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpLAorICAgICAgICAgICAgICAgIHZlcnRleFByb3BlcnRpZXM6IF9fLkhhc05vdCgicnVud2F5cyIpKSkuVigpLkNvdW50KCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KCIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoInZlcnRpY2VzOl9fLmhhcyhcInJlZ2lvblwiLFwiVVMtVFhcIikiLCByZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJ2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhc05vdChcInJ1bndheXNcIikiLCByZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCIpKS5WKCkuY291bnQoKSIsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19XaXRoU3RyYXRlZ2llc19SZWFkT25seV9TdWJncmFwaFN0cmF0ZWd5X3ZlcnRpY2VzX2VkZ2VzX1ZfQ291bnQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gX2cuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSwgbmV3IFN1YmdyYXBoU3RyYXRlZ3koCisgICAgICAgICAgICAgICAgdmVydGljZXM6IF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIiksCisgICAgICAgICAgICAgICAgZWRnZXM6IF9fLkhhc0xhYmVsKCJyb3V0ZSIpKSkuVigpLkNvdW50KCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJSZWFkT25seVN0cmF0ZWd5IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygibmV3IFN1YmdyYXBoU3RyYXRlZ3koIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygidmVydGljZXM6X18uaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKSIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoImVkZ2VzOl9fLmhhc0xhYmVsKFwicm91dGVcIikiLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfV2l0aFN0cmF0ZWdpZXNfUmVhZE9ubHlfU3ViZ3JhcGhTdHJhdGVneV92ZXJ0aWNlc19WX0NvdW50KCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKSkpLlYoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICBfZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpLCBuZXcgU3ViZ3JhcGhTdHJhdGVneSgKKyAgICAgICAgICAgICAgICAgICAgdmVydGljZXM6IF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIikpKS5WKCkuQ291bnQoKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfV2l0aFN0cmF0ZWdpZXNfT3B0aW9uc1N0cmF0ZWd5X1ZfQ291bnQoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBPcHRpb25zU3RyYXRlZ3kgaXMgZXh0cmFjdGVkLCBub3QgcmVuZGVyZWQgaW4gdGhlIHNjcmlwdAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICBfZy5XaXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7IHsgImV2YWx1YXRpb25UaW1lb3V0IiwgNTAwIH0gfSkpLlYoKS5Db3VudCgpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19XaXRoU3RyYXRlZ2llc19QYXJ0aXRpb25TdHJhdGVneV9BZGRWX3Rlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gX2cuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KAorICAgICAgICAgICAgICAgIHBhcnRpdGlvbktleTogInBhcnRpdGlvbiIsCisgICAgICAgICAgICAgICAgd3JpdGVQYXJ0aXRpb246ICJhIiwKKyAgICAgICAgICAgICAgICByZWFkUGFydGl0aW9uczogbmV3IExpc3Q8c3RyaW5nPiB7ICJhIiB9LAorICAgICAgICAgICAgICAgIGluY2x1ZGVNZXRhUHJvcGVydGllczogZmFsc2UpKS5BZGRWKCJ0ZXN0IikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSgiLCByZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJwYXJ0aXRpb25LZXk6XCJwYXJ0aXRpb25cIiIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIndyaXRlUGFydGl0aW9uOlwiYVwiIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygicmVhZFBhcnRpdGlvbnM6W1wiYVwiXSIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIikpLmFkZFYoXCJ0ZXN0XCIpIiwgcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1dpdGhTdHJhdGVnaWVzX1ZlcnRleFByb2dyYW1TdHJhdGVneV9WX1Nob3J0ZXN0UGF0aF9XaXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIixfXy5oYXMoXCJuYW1lXCIsXCJwZXRlclwiKSkiLAorICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpLlNob3J0ZXN0UGF0aCgpLldpdGgoIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldCIsIF9fLkhhcygibmFtZSIsICJwZXRlciIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gLS0tIFRleHRQIGFuZCBNaXNjIFRlc3RzIDk4LTEwNSAtLS0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0NvYWxlc2NlX0VfQWRkRV9wZXJzb24oKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmNvYWxlc2NlKF9fLkUoKSxfXy5hZGRFKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkNvYWxlc2NlPG9iamVjdD4oX18uRSgpLCBfXy5BZGRFKCJwZXJzb24iKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0luamVjdF8xX0UoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuaW5qZWN0KDEpLkUoKSIsIF9nLkluamVjdCgxKS5FKCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX3AxX1N0YXJ0aW5nV2l0aF9mb28oKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcInAxXCIsc3RhcnRpbmdXaXRoKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygicDEiLCBUZXh0UC5TdGFydGluZ1dpdGgoImZvbyIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNfcDFfRW5kaW5nV2l0aF9mb28oKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcInAxXCIsZW5kaW5nV2l0aChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoInAxIiwgVGV4dFAuRW5kaW5nV2l0aCgiZm9vIikpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WX0hhc19wMV9Db250YWluaW5nX2ZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzKFwicDFcIixjb250YWluaW5nKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkhhcygicDEiLCBUZXh0UC5Db250YWluaW5nKCJmb28iKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzX3AxX251bGwoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcInAxXCIsbnVsbCkiLAorICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoInAxIiwgKG9iamVjdD8pbnVsbCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfVmVydGV4XzBfcGVyc29uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoMCkiLCBfZy5WKG5ldyBWZXJ0ZXgoMCwgInBlcnNvbiIpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0X0d1aWQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZ3VpZCA9IG5ldyBHdWlkKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5pbmplY3QoVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgIF9nLkluamVjdCgob2JqZWN0KWd1aWQpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLS0gUHl0aG9uLU9ubHkgVGVzdHMgMTA2LTExNiAtLS0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19FX0VkZ2VfcmVuZGVyc19hc19wYXJhbWV0ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5SZXNldENvdW50ZXIoKTsKKyAgICAgICAgICAgIHZhciBlZGdlID0gbmV3IEVkZ2UoMiwgbmV3IFZlcnRleCgxKSwgImtub3dzIiwgbmV3IFZlcnRleCgzKSk7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gX2cuRShlZGdlKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuRShfMCkiLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0X1ZlcnRleFByb3BlcnR5X3JlbmRlcnNfYXNfcGFyYW1ldGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgR3JlbWxpbkxhbmcuUmVzZXRDb3VudGVyKCk7CisgICAgICAgICAgICB2YXIgdnAgPSBuZXcgVmVydGV4UHJvcGVydHkoMywgInRpbWUiLCAiMTg6MDAiLCBudWxsKTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBfZy5JbmplY3QoKG9iamVjdCl2cCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdChfMCkiLCByZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0X2RpY3RzX3dpdGhfZW51bV9rZXlzKCkKKyAgICAgICAgeworICAgICAgICAgICAgR3JlbWxpbkxhbmcuUmVzZXRDb3VudGVyKCk7CisgICAgICAgICAgICB2YXIgZGljdDEgPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4geyB7ICJuYW1lIiwgImphdmEiIH0gfTsKKyAgICAgICAgICAgIHZhciBkaWN0MiA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7IHsgVC5JZCwgMCB9IH07CisgICAgICAgICAgICB2YXIgZGljdDMgPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4oKTsKKyAgICAgICAgICAgIHZhciBkaWN0NCA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsgImFnZSIsIDEwLjAgfSwKKyAgICAgICAgICAgICAgICB7ICJwb3NfaW5mIiwgZG91YmxlLlBvc2l0aXZlSW5maW5pdHkgfSwKKyAgICAgICAgICAgICAgICB7ICJuZWdfaW5mIiwgZG91YmxlLk5lZ2F0aXZlSW5maW5pdHkgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW4iLCBkb3VibGUuTmFOIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gX2cuSW5qZWN0KChvYmplY3QpZGljdDEsIChvYmplY3QpZGljdDIsIChvYmplY3QpZGljdDMsIChvYmplY3QpZGljdDQpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKTsKKyAgICAgICAgICAgIEFzc2VydC5Db250YWlucygiW1wibmFtZVwiOlwiamF2YVwiXSIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIlsoVC5pZCk6MF0iLCByZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCJbOl0iLCByZXN1bHQpOworICAgICAgICAgICAgQXNzZXJ0LkNvbnRhaW5zKCIxMC4wRCIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIitJbmZpbml0eSIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIi1JbmZpbml0eSIsIHJlc3VsdCk7CisgICAgICAgICAgICBBc3NlcnQuQ29udGFpbnMoIk5hTiIsIHJlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19JbmplY3RfMV8wX0lzX0VxXzFfT3JfR3RfMl9Pcl9MdGVfM19Pcl9HdGVfNCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5pbmplY3QoMS4wRCkuaXMoZXEoMSkub3IoZ3QoMikpLm9yKGx0ZSgzKSkub3IoZ3RlKDQpKSkiLAorICAgICAgICAgICAgICAgIF9nLkluamVjdCgxLjApLklzKFAuRXEoMSkuT3IoUC5HdCgyKSkuT3IoUC5MdGUoMykpLk9yKFAuR3RlKDQpKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzTGFiZWxfcGVyc29uX0hhc19hZ2VfY29tcGxleF9jb25uZWN0aXZlX1AoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhcyhcImFnZVwiLGd0KDEwKS5vcihndGUoMTEpLmFuZChsdCgyMCkpKS5hbmQobHQoMjkpLm9yKGVxKDM1KSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLkhhcygiYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgUC5HdCgxMCkuT3IoUC5HdGUoMTEpLkFuZChQLkx0KDIwKSkpLkFuZChQLkx0KDI5KS5PcihQLkVxKDM1KSkpKQorICAgICAgICAgICAgICAgICAgICAuVmFsdWVzPG9iamVjdD4oIm5hbWUiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0X0hhc2hTZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuaW5qZWN0KHtcImFcIn0pIiwKKyAgICAgICAgICAgICAgICBfZy5JbmplY3QoKG9iamVjdCluZXcgSGFzaFNldDxvYmplY3Q+IHsgImEiIH0pLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19NZXJnZVZfbnVsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5tZXJnZVYobnVsbCkiLCBfZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0Pj8pbnVsbCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX01lcmdlRV9udWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLm1lcmdlRShudWxsKSIsIF9nLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q/Pj8pbnVsbCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0FkZFZfZXNjYXBlZF9xdW90ZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuYWRkVihcIlxcXCJ0ZXN0XFxcIlwiKSIsIF9nLkFkZFYoIlwidGVzdFwiIikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0FkZFZfZXNjYXBlZF9taXhlZF9xdW90ZXMoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuYWRkVihcInQnXFxcImVzdFwiKSIsIF9nLkFkZFYoInQnXCJlc3QiKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfSW5qZWN0X2FsbF9udW1lcmljX3R5cGVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdCh0cnVlLDFCLDJTLDMsNEwsNS4wRCw2LjBELDdOLDhNKSIsCisgICAgICAgICAgICAgICAgX2cuSW5qZWN0KChvYmplY3QpdHJ1ZSwgKG9iamVjdCkoYnl0ZSkxLCAob2JqZWN0KShzaG9ydCkyLCAob2JqZWN0KTMsIChvYmplY3QpKGxvbmcpNCwKKyAgICAgICAgICAgICAgICAgICAgKG9iamVjdCk1LjAsIChvYmplY3QpNi4wLCAob2JqZWN0KW5ldyBCaWdJbnRlZ2VyKDcpLCAob2JqZWN0KShkZWNpbWFsKTgpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLS0gR28tT25seSBUZXN0cyAxMTctMTIzIC0tLQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfNDRfVmFsdWVNYXBfV2l0aF9BbGwoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVihcIjQ0XCIpLnZhbHVlTWFwKCkud2l0aChcIn50aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zXCIsMTUpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCI0NCIpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLldpdGgoV2l0aE9wdGlvbnMuVG9rZW5zLCBXaXRoT3B0aW9ucy5BbGwpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzQ0X1ZhbHVlTWFwX1dpdGhfSW5kZXhlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKFwiNDRcIikudmFsdWVNYXAoKS53aXRoKFwifnRpbmtlcnBvcC5pbmRleC5pbmRleGVyXCIpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCI0NCIpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLldpdGgoV2l0aE9wdGlvbnMuSW5kZXhlcikuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfRmlsdGVyX0hhc19uYW1lX1RleHRQX1N0YXJ0aW5nV2l0aF9tX09yX1N0YXJ0aW5nV2l0aF9wKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS5maWx0ZXIoX18uaGFzKFwibmFtZVwiLHN0YXJ0aW5nV2l0aChcIm1cIikub3Ioc3RhcnRpbmdXaXRoKFwicFwiKSkpKSIsCisgICAgICAgICAgICAgICAgX2cuVigpLkZpbHRlcihfXy5IYXMoIm5hbWUiLCBUZXh0UC5TdGFydGluZ1dpdGgoIm0iKS5PcihUZXh0UC5TdGFydGluZ1dpdGgoInAiKSkpKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIGdfVl9IYXNfcGVyc29uX2FnZV9XaXRoaW5fZW1wdHkoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLmhhcyhcInBlcnNvblwiLFwiYWdlXCIsd2l0aGluKCkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJwZXJzb24iLCAiYWdlIiwgUC5XaXRoaW4oKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX0luamVjdF9OYU5fSXNfRXFfTmFOKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdChOYU4pLmlzKGVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICBfZy5JbmplY3QoZG91YmxlLk5hTikuSXMoUC5FcShkb3VibGUuTmFOKSkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfSGFzTGFiZWxfcGVyc29uX1ZhbHVlc19hZ2VfSXNfQmV0d2Vlbl8yNl8zMF9Pcl9HdF8zNCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmlzKGJldHdlZW4oMjYsMzApLm9yKGd0KDM0KSkpIiwKKyAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpLlZhbHVlczxvYmplY3Q+KCJhZ2UiKS5JcyhQLkJldHdlZW4oMjYsIDMwKS5PcihQLkd0KDM0KSkpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19JbmplY3RfMV9Bc051bWJlcl9HVHlwZV9Eb3VibGUoKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImcuaW5qZWN0KDEpLmFzTnVtYmVyKEdUeXBlLkRPVUJMRSkiLAorICAgICAgICAgICAgICAgIF9nLkluamVjdCgxKS5Bc051bWJlcihHVHlwZS5Eb3VibGUpLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLS0gR1ZhbHVlIFZhbGlkYXRpb24gVGVzdHMgMTI0LTEzMCAtLS0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgR1ZhbHVlX251bGxfbmFtZV90aHJvd3NfQXJndW1lbnROdWxsRXhjZXB0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudE51bGxFeGNlcHRpb24+KCgpID0+IG5ldyBHVmFsdWU8aW50PihudWxsISwgMSkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIEdWYWx1ZV9zcGVjaWFsX2NoYXJfbmFtZV90aHJvd3NfQXJndW1lbnRFeGNlcHRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50RXhjZXB0aW9uPigoKSA9PiBuZXcgR1ZhbHVlPGludD4oIlwiIiwgMSkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIEdWYWx1ZV9udW1lcmljX25hbWVfdGhyb3dzX0FyZ3VtZW50RXhjZXB0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4gbmV3IEdWYWx1ZTxpbnQ+KCIxIiwgMSkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIEdWYWx1ZV9pbnZhbGlkX2lkZW50aWZpZXJfbmFtZV90aHJvd3NfQXJndW1lbnRFeGNlcHRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50RXhjZXB0aW9uPigoKSA9PiBuZXcgR1ZhbHVlPGludD4oIjFhIiwgMSkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIEdWYWx1ZV91bmRlcnNjb3JlX25hbWVfdGhyb3dzX0FyZ3VtZW50RXhjZXB0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgQXNzZXJ0LlRocm93czxBcmd1bWVudEV4Y2VwdGlvbj4oKCkgPT4gbmV3IEdWYWx1ZTxpbnQ+KCJfMSIsIDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBHVmFsdWVfZHVwbGljYXRlX25hbWVfZGlmZmVyZW50X3ZhbHVlX3Rocm93c19Bcmd1bWVudEV4Y2VwdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBndmFsMSA9IG5ldyBHVmFsdWU8aW50PigieCIsIDEpOworICAgICAgICAgICAgdmFyIGd2YWwyID0gbmV3IEdWYWx1ZTxpbnQ+KCJ4IiwgMik7CisgICAgICAgICAgICBBc3NlcnQuVGhyb3dzPEFyZ3VtZW50RXhjZXB0aW9uPigoKSA9PiBfZy5JbmplY3QoKG9iamVjdClndmFsMSkuVihndmFsMikpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIEdWYWx1ZV9yZXVzZV9zYW1lX2luc3RhbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGd2YWwgPSBuZXcgR1ZhbHVlPElMaXN0PG9iamVjdD4+KCJpZHMiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBfZy5JbmplY3QoKG9iamVjdClndmFsKS5WKGd2YWwpLkdyZW1saW5MYW5nOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdChpZHMpLlYoaWRzKSIsIHJlc3VsdC5HZXRHcmVtbGluKCkpOworICAgICAgICAgICAgQXNzZXJ0LlRydWUocmVzdWx0LlBhcmFtZXRlcnMuQ29udGFpbnNLZXkoImlkcyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIC0tLSBDYXJkaW5hbGl0eSB3aXRoIE1hcCBUZXN0cyAtLS0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIHZvaWQgZ19WXzFfUHJvcGVydHlfTGlzdF9NYXBfV2l0aF9DYXJkaW5hbGl0eVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsgImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuU2luZ2xlKDM2KSB9LAorICAgICAgICAgICAgICAgIHsgImNpdHkiLCAid2lsbWluZ3RvbiIgfSwKKyAgICAgICAgICAgICAgICB7ICJzdGF0ZSIsICJkZWxhd2FyZSIgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgKKyAgICAgICAgICAgICAgICAiZy5WKFwiMVwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsXCJhZ2VcIiwzNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCxcImNpdHlcIixcIndpbG1pbmd0b25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCxcInN0YXRlXCIsXCJkZWxhd2FyZVwiKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMSIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIG1hcCkuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgdm9pZCBnX1ZfMV9Qcm9wZXJ0eV9TZXRfTWFwX0FsbF9TYW1lX0NhcmRpbmFsaXR5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsgImNpdHkiLCAid2lsbWluZ3RvbiIgfSwKKyAgICAgICAgICAgICAgICB7ICJzdGF0ZSIsICJkZWxhd2FyZSIgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgKKyAgICAgICAgICAgICAgICAiZy5WKFwiMVwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsXCJjaXR5XCIsXCJ3aWxtaW5ndG9uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCxcInN0YXRlXCIsXCJkZWxhd2FyZVwiKSIsCisgICAgICAgICAgICAgICAgX2cuVigiMSIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNldCwgbWFwKS5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9UZXN0VHJhdmVyc2FsLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9UZXN0VHJhdmVyc2FsLmNzCmluZGV4IDhhYjA2ZTAuLjEzMmJlMDcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvVGVzdFRyYXZlcnNhbC5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL1Rlc3RUcmF2ZXJzYWwuY3MKQEAgLTM0LDcgKzM0LDYgQEAKICAgICAgICAgICAgIHZhciB0cmF2ZXJzZXJzID0gbmV3IExpc3Q8VHJhdmVyc2VyPih0cmF2ZXJzZXJPYmpzLkNvdW50KTsKICAgICAgICAgICAgIHRyYXZlcnNlck9ianMuRm9yRWFjaChvID0+IHRyYXZlcnNlcnMuQWRkKG5ldyBUcmF2ZXJzZXIobykpKTsKICAgICAgICAgICAgIFRyYXZlcnNlcnMgPSB0cmF2ZXJzZXJzOwotICAgICAgICAgICAgQnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBUZXN0VHJhdmVyc2FsKElSZWFkT25seUxpc3Q8b2JqZWN0Pz4gdHJhdmVyc2VyT2JqcywgSVJlYWRPbmx5TGlzdDxsb25nPiB0cmF2ZXJzZXJCdWxrcykKQEAgLTQyLDcgKzQxLDYgQEAKICAgICAgICAgICAgIHZhciB0cmF2ZXJzZXJzID0gbmV3IExpc3Q8VHJhdmVyc2VyPih0cmF2ZXJzZXJPYmpzLkNvdW50KTsKICAgICAgICAgICAgIHRyYXZlcnNlcnMuQWRkUmFuZ2UodHJhdmVyc2VyT2Jqcy5TZWxlY3QoKHQsIGkpID0+IG5ldyBUcmF2ZXJzZXIodCwgdHJhdmVyc2VyQnVsa3NbaV0pKSk7CiAgICAgICAgICAgICBUcmF2ZXJzZXJzID0gdHJhdmVyc2VyczsKLSAgICAgICAgICAgIEJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgVGVzdFRyYXZlcnNhbChJTGlzdDxJVHJhdmVyc2FsU3RyYXRlZ3k+IHRyYXZlcnNhbFN0cmF0ZWdpZXMpCkBAIC01MCw2ICs0OCw2IEBACiAgICAgICAgICAgICBUcmF2ZXJzYWxTdHJhdGVnaWVzID0gdHJhdmVyc2FsU3RyYXRlZ2llczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBCeXRlY29kZSBCeXRlY29kZSB7IGdldDsgfSA9IG5ldygpOworICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgR3JlbWxpbkxhbmcgR3JlbWxpbkxhbmcgeyBnZXQ7IH0gPSBuZXcoKTsKICAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9UcmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3JUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvVHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdG9yVGVzdHMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4MDk3YWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9UcmFuc2xhdG9yL0dyb292eVRyYW5zbGF0b3JUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDUwMCArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRGVjb3JhdGlvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlN0cmF0ZWd5LlZlcmlmaWNhdGlvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci11c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmU7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlByb2Nlc3MuVHJhdmVyc2FsLlRyYW5zbGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBHcm9vdnlUcmFuc2xhdG9yVGVzdHMKLXsKLSAgICBwcml2YXRlIHJlYWRvbmx5IEdyYXBoVHJhdmVyc2FsU291cmNlIF9nID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7Ci0KLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgdm9pZCBTaG91bGRUcmFuc2xhdGVTdGVwc1dpdGhTaW5nbGVBcmd1bWVudHMoKQotICAgIHsKLSAgICAgICAgdmFyIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLk9mKCJnIik7Ci0KLSAgICAgICAgdmFyIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdG9yLlRyYW5zbGF0ZShfZy5WKCkuVmFsdWVzPHN0cmluZz4oIm5hbWUiKS5CeXRlY29kZSk7Ci0KLSAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLlYoKS52YWx1ZXMoJ25hbWUnKSIsIHRyYW5zbGF0ZWQpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZVN0ZXBzV2l0aE11bHRpcGxlQXJndW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIHZhciB0cmFuc2xhdG9yID0gR3Jvb3Z5VHJhbnNsYXRvci5PZigiZyIpOwotCi0gICAgICAgIHZhciB0cmFuc2xhdGVkID0gdHJhbnNsYXRvci5UcmFuc2xhdGUoX2cuVigpLlZhbHVlczxzdHJpbmc+KCJuYW1lIiwgImFnZSIpLkJ5dGVjb2RlKTsKLQotICAgICAgICBBc3NlcnQuRXF1YWwoImcuVigpLnZhbHVlcygnbmFtZScsICdhZ2UnKSIsIHRyYW5zbGF0ZWQpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZU51bGxBcmd1bWVudCgpCi0gICAgewotICAgICAgICBBc3NlcnRUcmFuc2xhdGlvbigibnVsbCIsIG51bGwpOwotICAgIH0KLQotICAgIFtUaGVvcnldCi0gICAgW0lubGluZURhdGEoIjMsIDUiLCAzLCA1KV0KLSAgICBbSW5saW5lRGF0YSgiMy4yLCA1LjEiLCAzLjIsIDUuMSldCi0gICAgW0lubGluZURhdGEoIidjJyIsICdjJyldCi0gICAgW0lubGluZURhdGEoInRydWUiLCB0cnVlKV0KLSAgICBbSW5saW5lRGF0YSgiZmFsc2UiLCBmYWxzZSldCi0gICAgcHVibGljIHZvaWQgU2hvdWxkVHJhbnNsYXRlU2ltcGxlVHlwZXMoc3RyaW5nIGV4cGVjdGVkR3Jvb3Z5LCBwYXJhbXMgb2JqZWN0W10gc2ltcGxlVHlwZXMpCi0gICAgewotICAgICAgICBBc3NlcnRUcmFuc2xhdGlvbihleHBlY3RlZEdyb292eSwgc2ltcGxlVHlwZXMpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZURhdGVUaW1lT2Zmc2V0QXJndW1lbnQoKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIm5ldyBEYXRlKDEyMiwgMTEsIDMwLCAxMiwgMCwgMSkiLCBEYXRlVGltZU9mZnNldC5QYXJzZSgiMjAyMi0xMi0zMFQxMjowMDowMVoiKSk7Ci0gICAgfQotCi0gICAgW0ZhY3RdCi0gICAgcHVibGljIHZvaWQgU2hvdWxkVHJhbnNsYXRlRGF0ZVRpbWVBcmd1bWVudCgpCi0gICAgewotICAgICAgICBBc3NlcnRUcmFuc2xhdGlvbigibmV3IERhdGUoMTIyLCAxMSwgMzAsIDEyLCAwLCAxKSIsIERhdGVUaW1lLlBhcnNlKCIyMDIyLTEyLTMwVDEyOjAwOjAxIikpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZUd1aWQoKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIlVVSUQuZnJvbVN0cmluZygnZmZmZmZmZmYtZmQ0OS0xZTRiLTAwMDAtMDAwMDBkNGI4YTFkJykiLAotICAgICAgICAgICAgR3VpZC5QYXJzZSgiZmZmZmZmZmYtZmQ0OS0xZTRiLTAwMDAtMDAwMDBkNGI4YTFkIikpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZUNvbGxlY3Rpb24oKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIlsndGVzdDEnLCAndGVzdDInXSIsIG5ldyBMaXN0PHN0cmluZz57InRlc3QxIiwgInRlc3QyIn0pOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZURpY3Rpb25hcnkoKQotICAgIHsKLSAgICAgICAgdmFyIGRpY3Rpb25hcnkgPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4KLSAgICAgICAgewotICAgICAgICAgICAgeyAia2V5MSIsICJ2YWx1ZTEiIH0sCi0gICAgICAgICAgICB7IDEsICJ2YWx1ZTIiIH0KLSAgICAgICAgfTsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIlsna2V5MSc6ICd2YWx1ZTEnLCAxOiAndmFsdWUyJ10iLCBkaWN0aW9uYXJ5KTsKLSAgICB9Ci0KLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgdm9pZCBTaG91bGRUcmFuc2xhdGVDb2x1bW4oKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIkNvbHVtbi5rZXlzIiwgQ29sdW1uLktleXMpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZURpcmVjdGlvbigpCi0gICAgewotICAgICAgICBBc3NlcnRUcmFuc2xhdGlvbigiRGlyZWN0aW9uLkJPVEgiLCBEaXJlY3Rpb24uQm90aCk7Ci0gICAgfQotCi0gICAgW0ZhY3RdCi0gICAgcHVibGljIHZvaWQgU2hvdWxkVHJhbnNsYXRlT3JkZXIoKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIk9yZGVyLmRlc2MiLCBPcmRlci5EZXNjKTsKLSAgICB9Ci0KLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgdm9pZCBTaG91bGRUcmFuc2xhdGVQb3AoKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIlBvcC5sYXN0IiwgUG9wLkxhc3QpOwotICAgIH0KLQotICAgIFtGYWN0XQotICAgIHB1YmxpYyB2b2lkIFNob3VsZFRyYW5zbGF0ZVNjb3BlKCkKLSAgICB7Ci0gICAgICAgIEFzc2VydFRyYW5zbGF0aW9uKCJTY29wZS5sb2NhbCIsIFNjb3BlLkxvY2FsKTsKLSAgICB9Ci0KLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgdm9pZCBTaG91bGRUcmFuc2xhdGVQKCkKLSAgICB7Ci0gICAgICAgIEFzc2VydFRyYW5zbGF0aW9uKCJQLmFuZChQLmd0KDIwKSwgUC5sdCgzMCkpIiwgUC5HdCgyMCkuQW5kKFAuTHQoMzApKSk7Ci0gICAgfQotCi0gICAgW0ZhY3RdCi0gICAgcHVibGljIHZvaWQgU2hvdWxkVHJhbnNsYXRlUEJldHdlZW4oKQotICAgIHsKLSAgICAgICAgQXNzZXJ0VHJhbnNsYXRpb24oIlAuYmV0d2VlbihbMjAsIDMwXSkiLCBQLkJldHdlZW4oMjAsIDMwKSk7Ci0gICAgfQotCi0gICAgW0ZhY3RdCi0gICAgcHVibGljIHZvaWQgU2hvdWxkVHJhbnNsYXRlVmFsdWVNYXBPcHRpb25zKCkKLSAgICB7Ci0gICAgICAgIEFzc2VydFRyYXZlcnNhbFRyYW5zbGF0aW9uKCJnLlYoKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5hbGwpLlYoKSIsCi0gICAgICAgICAgICBfZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMsIFdpdGhPcHRpb25zLkFsbCkuVigpKTsKLSAgICB9Ci0KLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgdm9pZCBTaG91bGRUcmFuc2xhdGVJbmRleGVyT3B0aW9ucygpCi0gICAgewotICAgICAgICBBc3NlcnRUcmF2ZXJzYWxUcmFuc2xhdGlvbigiZy5WKCkuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLmxpc3QpIiwKLSAgICAgICAgICAgIF9nLlYoKS5JbmRleDxvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5JbmRleGVyLCBXaXRoT3B0aW9ucy5MaXN0KSk7Ci0gICAgfQotCi0gICAgW0ZhY3RdCi0gICAgcHVibGljIHZvaWQgU2hvdWxkVHJhbnNsYXRlR3JhcGhUcmF2ZXJzYWxTb3VyY2VPcHRpb25zKCkKLSAgICB7Ci0gICAgICAgIEFzc2VydFRyYXZlcnNhbFRyYW5zbGF0aW9uKCJnLndpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3koJ350aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zJzogdHJ1ZSkpLlYoKSIsCi0gICAgICAgICAgICBfZy5XaXRoKFdpdGhPcHRpb25zLlRva2VucykuVigpKTsKLSAgICB9Ci0KLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgdm9pZCBUcmFuc2xhdGlvblRlc3QoKQotICAgIHsKLSAgICAgICAgdmFyIGV4cGVjdGVkR3Jvb3Z5U2NyaXB0QnlUcmF2ZXJzYWwgPSBuZXcgRGljdGlvbmFyeTxJVHJhdmVyc2FsLCBzdHJpbmc+Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgX2cuVigpLCAiZy5WKCkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoIjEiLCAiMiIsICIzIiwgIjQiKSwgImcuVignMScsICcyJywgJzMnLCAnNCcpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCIzIikuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KHRydWUpLCAiZy5WKCczJykudmFsdWVNYXAodHJ1ZSkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5Db25zdGFudCg1KSwgImcuVigpLmNvbnN0YW50KDUpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuQ29uc3RhbnQoMS41KSwgImcuVigpLmNvbnN0YW50KDEuNSkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5Db25zdGFudCgiSGVsbG8iKSwgImcuVigpLmNvbnN0YW50KCdIZWxsbycpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5MaW1pdDxWZXJ0ZXg+KDUpLCAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5saW1pdCg1KSIgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoUC5XaXRoaW4obmV3IExpc3Q8c3RyaW5nPiB7ICJhIiwgImIiLCAiYyIgfSkpLAotICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbChQLndpdGhpbihbJ2EnLCAnYicsICdjJ10pKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLkhhc0xhYmVsKCJhaXJwb3J0IiwgImNvbnRpbmVudCIpLk91dCgpLkxpbWl0PFZlcnRleD4oNSksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JywgJ2NvbnRpbmVudCcpLm91dCgpLmxpbWl0KDUpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PdXQoKS5WYWx1ZXM8c3RyaW5nPigiY29kZSIpLkxpbWl0PFZlcnRleD4oNSksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3V0KCkudmFsdWVzKCdjb2RlJykubGltaXQoNSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5BcygiYSIpLk91dCgicm91dGUiKS5MaW1pdDxWZXJ0ZXg+KDEwKS5XaGVyZShQLkVxKCJhIikpLkJ5KCJyZWdpb24iKSwKLSAgICAgICAgICAgICAgICAiZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJykubGltaXQoMTApLndoZXJlKFAuZXEoJ2EnKSkuYnkoJ3JlZ2lvbicpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCIzIikuUmVwZWF0KF9fLk91dCgicm91dGUiKS5TaW1wbGVQYXRoKCkpLlRpbWVzKDIpLlBhdGgoKS5CeSgiY29kZSIpLAotICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCdyb3V0ZScpLnNpbXBsZVBhdGgoKSkudGltZXMoMikucGF0aCgpLmJ5KCdjb2RlJykiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk91dCgpLkhhcygicmVnaW9uIiwgIlVTLVRYIikuVmFsdWVzPHN0cmluZz4oImNvZGUiKS5MaW1pdDxzdHJpbmc+KDUpLAotICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm91dCgpLmhhcygncmVnaW9uJywgJ1VTLVRYJykudmFsdWVzKCdjb2RlJykubGltaXQoNSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLlVuaW9uPHN0cmluZz4oX18uVmFsdWVzPHN0cmluZz4oImNpdHkiKSwgX18uVmFsdWVzPHN0cmluZz4oInJlZ2lvbiIpKQotICAgICAgICAgICAgICAgICAgICAuTGltaXQ8c3RyaW5nPig1KSwKLSAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS51bmlvbihfXy52YWx1ZXMoJ2NpdHknKSwgX18udmFsdWVzKCdyZWdpb24nKSkubGltaXQoNSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgeyBfZy5WKCIzIikuQXMoImEiKS5PdXQoInJvdXRlIiwgInJvdXRlcyIpLCAiZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJywgJ3JvdXRlcycpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuV2hlcmUoX18uVmFsdWVzPGludD4oInJ1bndheXMiKS5Jcyg1KSksICJnLlYoKS53aGVyZShfXy52YWx1ZXMoJ3J1bndheXMnKS5pcyg1KSkiIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigiMyIpLlJlcGVhdChfXy5PdXQoKS5TaW1wbGVQYXRoKCkpLlVudGlsKF9fLkhhcygiY29kZSIsICJBR1IiKSkuUGF0aCgpLkJ5KCJjb2RlIikuTGltaXQ8UGF0aD4oNSksCi0gICAgICAgICAgICAgICAgImcuVignMycpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygnY29kZScsICdBR1InKSkucGF0aCgpLmJ5KCdjb2RlJykubGltaXQoNSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgeyBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KF9fLklkKCkpLCAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vcmRlcigpLmJ5KF9fLmlkKCkpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KFQuSWQpLCAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vcmRlcigpLmJ5KFQuaWQpIiB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk9yZGVyKCkuQnkoX18uSWQoKSwgT3JkZXIuRGVzYyksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZCgpLCBPcmRlci5kZXNjKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3JkZXIoKS5CeSgiY29kZSIsIE9yZGVyLkRlc2MpLAotICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm9yZGVyKCkuYnkoJ2NvZGUnLCBPcmRlci5kZXNjKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigiMSIsICIyIiwgIjMiKS5Mb2NhbDxvYmplY3Q+KF9fLk91dCgpLk91dCgpLkRlZHVwKCkuRm9sZCgpKSwKLSAgICAgICAgICAgICAgICAiZy5WKCcxJywgJzInLCAnMycpLmxvY2FsKF9fLm91dCgpLm91dCgpLmRlZHVwKCkuZm9sZCgpKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7IF9nLlYoIjMiKS5PdXQoKS5QYXRoKCkuQ291bnQoU2NvcGUuTG9jYWwpLCAiZy5WKCczJykub3V0KCkucGF0aCgpLmNvdW50KFNjb3BlLmxvY2FsKSIgfSwKLSAgICAgICAgICAgIHsgX2cuRSgpLkNvdW50KCksICJnLkUoKS5jb3VudCgpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCc1JykuT3V0RSgicm91dGUiKS5JblYoKS5QYXRoKCkuTGltaXQ8UGF0aD4oMTApLCAiZy5WKCc1Jykub3V0RSgncm91dGUnKS5pblYoKS5wYXRoKCkubGltaXQoMTApIiB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoJzUnKS5Qcm9wZXJ0eU1hcDxvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLAotICAgICAgICAgICAgICAgICJnLlYoJzUnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cykiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoJzUnKS5Qcm9wZXJ0eU1hcDxvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcyksCi0gICAgICAgICAgICAgICAgImcuVignNScpLnByb3BlcnR5TWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsgX2cuVigiMyIpLlZhbHVlczxzdHJpbmc+KCJydW53YXlzIikuTWF0aCgiXyArIDEiKSwgImcuVignMycpLnZhbHVlcygncnVud2F5cycpLm1hdGgoJ18gKyAxJykiIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigiMyIpLkVtaXQoKS5SZXBlYXQoX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5UaW1lcygzKS5MaW1pdDxWZXJ0ZXg+KDUpLlBhdGgoKSwKLSAgICAgICAgICAgICAgICAiZy5WKCczJykuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDMpLmxpbWl0KDUpLnBhdGgoKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoImEiKS5IYXMoImNvZGUiLCAiTEhSIikuQXMoImIiKSkuU2VsZWN0PG9iamVjdD4oImIiKS5CeSgiY29kZSIpLAotICAgICAgICAgICAgICAgICJnLlYoKS5tYXRjaChfXy5hcygnYScpLmhhcygnY29kZScsICdMSFInKS5hcygnYicpKS5zZWxlY3QoJ2InKS5ieSgnY29kZScpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJ0ZXN0LXVzaW5nLWtleXdvcmQtYXMtcHJvcGVydHkiLCAicmVwZWF0IiksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhcygndGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5JywgJ3JlcGVhdCcpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsgX2cuVignMScpLkFkZEUoInRlc3QiKS5UbyhfXy5WKCc0JykpLCAiZy5WKCcxJykuYWRkRSgndGVzdCcpLnRvKF9fLlYoJzQnKSkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5WYWx1ZXM8aW50PigicnVud2F5cyIpLk1heDxpbnQ+KCksICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5tYXgoKSIgfSwKLSAgICAgICAgICAgIHsgX2cuVigpLlZhbHVlczxpbnQ+KCJydW53YXlzIikuTWluPGludD4oKSwgImcuVigpLnZhbHVlcygncnVud2F5cycpLm1pbigpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuVmFsdWVzPGludD4oInJ1bndheXMiKS5TdW08aW50PigpLCAiZy5WKCkudmFsdWVzKCdydW53YXlzJykuc3VtKCkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5WYWx1ZXM8aW50PigicnVud2F5cyIpLk1lYW48ZG91YmxlPigpLCAiZy5WKCkudmFsdWVzKCdydW53YXlzJykubWVhbigpIiB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTYWNrKDApLlYoJzMnLCAnNScpLlNhY2soT3BlcmF0b3IuU3VtKS5CeSgicnVud2F5cyIpLlNhY2s8b2JqZWN0PigpLAotICAgICAgICAgICAgICAgICJnLndpdGhTYWNrKDApLlYoJzMnLCAnNScpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgncnVud2F5cycpLnNhY2soKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7IF9nLkluamVjdCgzLCA0LCA1KSwgImcuaW5qZWN0KDMsIDQsIDUpIiB9LAotICAgICAgICAgICAgeyBfZy5JbmplY3QobmV3IExpc3Q8aW50PiB7IDMsIDQsIDUgfSksICJnLmluamVjdChbMywgNCwgNV0pIiB9LAotICAgICAgICAgICAgeyBfZy5JbmplY3QoMywgNCwgNSkuQ291bnQoKSwgImcuaW5qZWN0KDMsIDQsIDUpLmNvdW50KCkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5IYXMoInJ1bndheXMiLCBQLkd0KDUpKS5Db3VudCgpLCAiZy5WKCkuaGFzKCdydW53YXlzJywgUC5ndCg1KSkuY291bnQoKSIgfSwKLSAgICAgICAgICAgIHsgX2cuVigpLkhhcygicnVud2F5cyIsIFAuTHRlKDUuMykpLkNvdW50KCksICJnLlYoKS5oYXMoJ3J1bndheXMnLCBQLmx0ZSg1LjMpKS5jb3VudCgpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuSGFzKCJjb2RlIiwgUC5XaXRoaW4obmV3IExpc3Q8aW50PiB7IDEyMywgMTI0IH0pKSwgImcuVigpLmhhcygnY29kZScsIFAud2l0aGluKFsxMjMsIDEyNF0pKSIgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCcxJywgJzInKS5IYXMoInJlZ2lvbiIsIFAuV2l0aGluKG5ldyBMaXN0PHN0cmluZz4geyAiVVMtVFgiLCAiVVMtR0EiIH0pKSwKLSAgICAgICAgICAgICAgICAiZy5WKCcxJywgJzInKS5oYXMoJ3JlZ2lvbicsIFAud2l0aGluKFsnVVMtVFgnLCAnVVMtR0EnXSkpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCkuQW5kKF9fLkhhcygicnVud2F5cyIsIFAuR3QoNSkpLCBfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpKSwKLSAgICAgICAgICAgICAgICAiZy5WKCkuYW5kKF9fLmhhcygncnVud2F5cycsIFAuZ3QoNSkpLCBfXy5oYXMoJ3JlZ2lvbicsICdVUy1UWCcpKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLlVuaW9uPG9iamVjdD4oX18uSGFzKCJydW53YXlzIiwgUC5HdCg1KSksIF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIikpLAotICAgICAgICAgICAgICAgICJnLlYoKS51bmlvbihfXy5oYXMoJ3J1bndheXMnLCBQLmd0KDUpKSwgX18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PigicnVud2F5cyIpLklzKDMpLCBfXy5Db25zdGFudCgidGhyZWUiKSwKLSAgICAgICAgICAgICAgICAgICAgX18uQ29uc3RhbnQoIm5vdCB0aHJlZSIpKSwKLSAgICAgICAgICAgICAgICAiZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpLmlzKDMpLCBfXy5jb25zdGFudCgndGhyZWUnKSwgX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigiMyIpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KCJydW53YXlzIikpLk9wdGlvbigxLCBfXy5Db25zdGFudCgidGhyZWUiKSkKLSAgICAgICAgICAgICAgICAgICAgLk9wdGlvbigyLCBfXy5Db25zdGFudCgibm90IHRocmVlIikpLAotICAgICAgICAgICAgICAgICJnLlYoJzMnKS5jaG9vc2UoX18udmFsdWVzKCdydW53YXlzJykpLm9wdGlvbigxLCBfXy5jb25zdGFudCgndGhyZWUnKSkub3B0aW9uKDIsIF9fLmNvbnN0YW50KCdub3QgdGhyZWUnKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PigicnVud2F5cyIpKS5PcHRpb24oMS41LCBfXy5Db25zdGFudCgib25lIGFuZCBhIGhhbGYiKSkKLSAgICAgICAgICAgICAgICAgICAgLk9wdGlvbigyLCBfXy5Db25zdGFudCgibm90IHRocmVlIikpLAotICAgICAgICAgICAgICAgICJnLlYoJzMnKS5jaG9vc2UoX18udmFsdWVzKCdydW53YXlzJykpLm9wdGlvbigxLjUsIF9fLmNvbnN0YW50KCdvbmUgYW5kIGEgaGFsZicpKS5vcHRpb24oMiwgX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigiMyIpLlJlcGVhdChfXy5PdXQoKS5TaW1wbGVQYXRoKCkpLlVudGlsKF9fLkxvb3BzKCkuSXMoMSkpLkNvdW50KCksCi0gICAgICAgICAgICAgICAgImcuVignMycpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMSkpLmNvdW50KCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLkxpbWl0PFZlcnRleD4oMjApLkdyb3VwPFZlcnRleCwgb2JqZWN0PigpLkJ5KCJyZWdpb24iKS5CeSgiY29kZSIpCi0gICAgICAgICAgICAgICAgICAgIC5PcmRlcihTY29wZS5Mb2NhbCkuQnkoQ29sdW1uLktleXMpLAotICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLmxpbWl0KDIwKS5ncm91cCgpLmJ5KCdyZWdpb24nKS5ieSgnY29kZScpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cykiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoJzEnKS5BcygiYSIpLlYoIjIiKS5BcygiYSIpLlNlbGVjdDxvYmplY3Q+KFBvcC5BbGwsICJhIiksCi0gICAgICAgICAgICAgICAgImcuVignMScpLmFzKCdhJykuVignMicpLmFzKCdhJykuc2VsZWN0KFBvcC5hbGwsICdhJykiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TZXQsICJwMSIsIDEwKSwKLSAgICAgICAgICAgICAgICAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCAncDEnLCAxMCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAicDEiLCAxMCksCi0gICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICdwMScsIDEwKSIKLSAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5BZGRWKCJ0ZXN0IikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAicDEiLCAxMCksCi0gICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgJ3AxJywgMTApIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsgX2cuVigpLkxpbWl0PFZlcnRleD4oNSkuT3JkZXIoKS5CeShULkxhYmVsKSwgImcuVigpLmxpbWl0KDUpLm9yZGVyKCkuYnkoVC5sYWJlbCkiIH0sCi0KLSAgICAgICAgICAgIHsgX2cuVigpLlJhbmdlPFZlcnRleD4oMSwgNSksICJnLlYoKS5yYW5nZSgxLCA1KSIgfSwKLQotICAgICAgICAgICAgeyBfZy5BZGRWKCJ0ZXN0IikuUHJvcGVydHkoInAxIiwgMTIzKSwgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdwMScsIDEyMykiIH0sCi0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5BZGRWKCJ0ZXN0IikuUHJvcGVydHkoImRhdGUiLCBuZXcgRGF0ZVRpbWUoMjAyMSwgMywgMSwgOSwgMzAsIDApKSwKLSAgICAgICAgICAgICAgICAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ2RhdGUnLCBuZXcgRGF0ZSgxMjEsIDIsIDEsIDksIDMwLCAwKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eSgiZGF0ZSIsIG5ldyBEYXRlVGltZSgyMDIxLCAzLCAxLCAwLCAwLCAwKSksCi0gICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJywgbmV3IERhdGUoMTIxLCAyLCAxLCAwLCAwLCAwKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgeyBfZy5BZGRFKCJyb3V0ZSIpLkZyb20oX18uVignMScpKS5UbyhfXy5WKCcyJykpLCAiZy5hZGRFKCdyb3V0ZScpLmZyb20oX18uVignMScpKS50byhfXy5WKCcyJykpIiB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTaWRlRWZmZWN0KCJhIiwgbmV3IExpc3Q8aW50PiB7IDEsIDIgfSkuVignMycpLlNlbGVjdDxvYmplY3Q+KCJhIiksCi0gICAgICAgICAgICAgICAgImcud2l0aFNpZGVFZmZlY3QoJ2EnLCBbMSwgMl0pLlYoJzMnKS5zZWxlY3QoJ2EnKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7IF9nLldpdGhTaWRlRWZmZWN0KCJhIiwgMSkuVignMycpLlNlbGVjdDxvYmplY3Q+KCJhIiksICJnLndpdGhTaWRlRWZmZWN0KCdhJywgMSkuVignMycpLnNlbGVjdCgnYScpIiB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTaWRlRWZmZWN0KCJhIiwgImFiYyIpLlYoIjMiKS5TZWxlY3Q8b2JqZWN0PigiYSIpLAotICAgICAgICAgICAgICAgICJnLndpdGhTaWRlRWZmZWN0KCdhJywgJ2FiYycpLlYoJzMnKS5zZWxlY3QoJ2EnKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLkhhcygiYWlycG9ydCIsICJyZWdpb24iLCAiVVMtTk0iKS5MaW1pdDxWZXJ0ZXg+KDMpLlZhbHVlczxvYmplY3Q+KCJlbGV2IikuRm9sZCgpLkluZGV4PG9iamVjdD4oKSwKLSAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdhaXJwb3J0JywgJ3JlZ2lvbicsICdVUy1OTScpLmxpbWl0KDMpLnZhbHVlcygnZWxldicpLmZvbGQoKS5pbmRleCgpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCIzIikuUmVwZWF0KF9fLlRpbWVMaW1pdCgxMDAwKS5PdXQoKS5TaW1wbGVQYXRoKCkpLlVudGlsKF9fLkhhcygiY29kZSIsICJBR1IiKSkuUGF0aCgpLAotICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18udGltZUxpbWl0KDEwMDApLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKCdjb2RlJywgJ0FHUicpKS5wYXRoKCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLldoZXJlKF9fLlZhbHVlczxvYmplY3Q+KCJlbGV2IikuSXMoUC5HdCgxNDAwMCkpKSwKLSAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS53aGVyZShfXy52YWx1ZXMoJ2VsZXYnKS5pcyhQLmd0KDE0MDAwKSkpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5XaGVyZShfXy5PdXQoKS5Db3VudCgpLklzKFAuR3QoMjUwKSkpLlZhbHVlczxvYmplY3Q+KCJjb2RlIiksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykud2hlcmUoX18ub3V0KCkuY291bnQoKS5pcyhQLmd0KDI1MCkpKS52YWx1ZXMoJ2NvZGUnKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuRmlsdGVyKF9fLk91dCgpLkNvdW50KCkuSXMoUC5HdCgyNTApKSkuVmFsdWVzPG9iamVjdD4oImNvZGUiKSwKLSAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5maWx0ZXIoX18ub3V0KCkuY291bnQoKS5pcyhQLmd0KDI1MCkpKS52YWx1ZXMoJ2NvZGUnKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuV2l0aFNhY2soMCkuVignMycpLlJlcGVhdChfXy5PdXRFKCJyb3V0ZSIpLlNhY2soT3BlcmF0b3IuU3VtKS5CeSgiZGlzdCIpLkluVigpKQotICAgICAgICAgICAgICAgICAgICAuVW50aWwoX18uSGFzKCJjb2RlIiwgIkFHUiIpLk9yKCkuTG9vcHMoKS5Jcyg0KSkuSGFzKCJjb2RlIiwgIkFHUiIpCi0gICAgICAgICAgICAgICAgICAgIC5Mb2NhbDxvYmplY3Q+KF9fLlVuaW9uPG9iamVjdD4oX18uUGF0aCgpLkJ5KCJjb2RlIikuQnkoImRpc3QiKSwgX18uU2FjazxvYmplY3Q+KCkpLkZvbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgLkxpbWl0PG9iamVjdD4oMTApLAotICAgICAgICAgICAgICAgICJnLndpdGhTYWNrKDApLlYoJzMnKS5yZXBlYXQoX18ub3V0RSgncm91dGUnKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoJ2Rpc3QnKS5pblYoKSkudW50aWwoX18uaGFzKCdjb2RlJywgJ0FHUicpLm9yKCkubG9vcHMoKS5pcyg0KSkuaGFzKCdjb2RlJywgJ0FHUicpLmxvY2FsKF9fLnVuaW9uKF9fLnBhdGgoKS5ieSgnY29kZScpLmJ5KCdkaXN0JyksIF9fLnNhY2soKSkuZm9sZCgpKS5saW1pdCgxMCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLkFkZFYoKS5BcygiYSIpLkFkZFYoKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIiksCi0gICAgICAgICAgICAgICAgImcuYWRkVigpLmFzKCdhJykuYWRkVigpLmFzKCdiJykuYWRkRSgna25vd3MnKS5mcm9tKCdhJykudG8oJ2InKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuQWRkVigiUGVyc29uIikuQXMoImEiKS5BZGRWKCJQZXJzb24iKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIiksCi0gICAgICAgICAgICAgICAgImcuYWRkVignUGVyc29uJykuYXMoJ2EnKS5hZGRWKCdQZXJzb24nKS5hcygnYicpLmFkZEUoJ2tub3dzJykuZnJvbSgnYScpLnRvKCdiJykiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoIjMiKS5Qcm9qZWN0PG9iamVjdD4oIk91dCIsICJJbiIpLkJ5KF9fLk91dCgpLkNvdW50KCkpLkJ5KF9fLkluKCkuQ291bnQoKSksCi0gICAgICAgICAgICAgICAgImcuVignMycpLnByb2plY3QoJ091dCcsICdJbicpLmJ5KF9fLm91dCgpLmNvdW50KCkpLmJ5KF9fLmluKCkuY291bnQoKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoIjQ0IikuT3V0KCkuQWdncmVnYXRlKCJhIikuT3V0KCkuV2hlcmUoUC5XaXRoaW4obmV3IExpc3Q8c3RyaW5nPiB7ICJhIiB9KSkuUGF0aCgpLAotICAgICAgICAgICAgICAgICJnLlYoJzQ0Jykub3V0KCkuYWdncmVnYXRlKCdhJykub3V0KCkud2hlcmUoUC53aXRoaW4oWydhJ10pKS5wYXRoKCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgeyBfZy5WKCkuSGFzKCJkYXRlIiwgbmV3IERhdGVUaW1lKDIwMjEsIDMsIDIyKSksICJnLlYoKS5oYXMoJ2RhdGUnLCBuZXcgRGF0ZSgxMjEsIDIsIDIyLCAwLCAwLCAwKSkiIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLkhhcygiZGF0ZSIsIFAuV2l0aGluKG5ldyBEYXRlVGltZSgyMDIxLCAzLCAyMiwgMCwgMCwgMCksIG5ldyBEYXRlVGltZSgyMDIxLCAyLCAxLCAwLCAwLCAwKSkpLAotICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2RhdGUnLCBQLndpdGhpbihbbmV3IERhdGUoMTIxLCAyLCAyMiwgMCwgMCwgMCksIG5ldyBEYXRlKDEyMSwgMSwgMSwgMCwgMCwgMCldKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoImRhdGUiLCBQLkJldHdlZW4obmV3IERhdGVUaW1lKDIwMjEsIDIsIDEsIDAsIDAsIDApLCBuZXcgRGF0ZVRpbWUoMjAyMSwgMywgMjIsIDAsIDAsIDApKSksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhcygnZGF0ZScsIFAuYmV0d2VlbihbbmV3IERhdGUoMTIxLCAxLCAxLCAwLCAwLCAwKSwgbmV3IERhdGUoMTIxLCAyLCAyMiwgMCwgMCwgMCldKSkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLlYoKS5IYXMoImRhdGUiLCBQLkluc2lkZShuZXcgRGF0ZVRpbWUoMjAyMSwgMiwgMSwgMCwgMCwgMCksIG5ldyBEYXRlVGltZSgyMDIxLCAzLCAyMiwgMCwgMCwgMCkpKSwKLSAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdkYXRlJywgUC5pbnNpZGUoW25ldyBEYXRlKDEyMSwgMSwgMSwgMCwgMCwgMCksIG5ldyBEYXRlKDEyMSwgMiwgMjIsIDAsIDAsIDApXSkpIgotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCkuSGFzKCJkYXRlIiwgUC5HdChuZXcgRGF0ZVRpbWUoMjAyMSwgMiwgMSwgOSwgMzAsIDApKSksCi0gICAgICAgICAgICAgICAgImcuVigpLmhhcygnZGF0ZScsIFAuZ3QobmV3IERhdGUoMTIxLCAxLCAxLCA5LCAzMCwgMCkpKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5IYXMoInJ1bndheXMiLCBQLkJldHdlZW4oMywgNSkpLCAiZy5WKCkuaGFzKCdydW53YXlzJywgUC5iZXR3ZWVuKFszLCA1XSkpIiB9LAotICAgICAgICAgICAgeyBfZy5WKCkuSGFzKCJydW53YXlzIiwgUC5JbnNpZGUoMywgNSkpLCAiZy5WKCkuaGFzKCdydW53YXlzJywgUC5pbnNpZGUoWzMsIDVdKSkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoIjQ0IikuT3V0RSgpLkVsZW1lbnRNYXA8b2JqZWN0PigpLCAiZy5WKCc0NCcpLm91dEUoKS5lbGVtZW50TWFwKCkiIH0sCi0gICAgICAgICAgICB7IF9nLlYoIjQ0IikuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoX18uVW5mb2xkPG9iamVjdD4oKSksICJnLlYoJzQ0JykudmFsdWVNYXAoKS5ieShfXy51bmZvbGQoKSkiIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigpLlByb3BlcnR5KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7IHsgIm5hbWUiLCAidGVzdCIgfSwgeyAiYWdlIiwgMzAgfSB9KSwKLSAgICAgICAgICAgICAgICAiZy5WKCkucHJvcGVydHkoWyduYW1lJzogJ3Rlc3QnLCAnYWdlJzogMzBdKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7IF9nLlYoKS5FKCIxIiksICJnLlYoKS5FKCcxJykiIH0sCi0KLSAgICAgICAgICAgIC8vIFRPRE86IFN1cHBvcnQgV2l0aE9wdGlvbnMKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZy5WKCI0NCIpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLldpdGgoV2l0aE9wdGlvbnMuVG9rZW5zLCBXaXRoT3B0aW9ucy5MYWJlbHMpLAotICAgICAgICAgICAgICAgICJnLlYoJzQ0JykudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2VucywgV2l0aE9wdGlvbnMubGFiZWxzKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuVigiNDQiKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5XaXRoKFdpdGhPcHRpb25zLlRva2VucyksCi0gICAgICAgICAgICAgICAgImcuVignNDQnKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuQWRkVigidGVzdCIpLAotICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLmFkZFYoJ3Rlc3QnKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuV2l0aFN0cmF0ZWdpZXMoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpLCBlZGdlczogX18uSGFzTGFiZWwoInJvdXRlIikpKS5WKCkuQ291bnQoKSwKLSAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSwgZWRnZXM6IF9fLmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6IF9fLkhhc05vdCgicnVud2F5cyIpKSkuVigpLkNvdW50KCksCi0gICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczogX18uaGFzTm90KCdydW53YXlzJykpKS5WKCkuY291bnQoKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIiksCi0gICAgICAgICAgICAgICAgICAgIHZlcnRleFByb3BlcnRpZXM6IF9fLkhhc05vdCgicnVud2F5cyIpKSkuVigpLkNvdW50KCksCi0gICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcygncmVnaW9uJywgJ1VTLVRYJyksIHZlcnRleFByb3BlcnRpZXM6IF9fLmhhc05vdCgncnVud2F5cycpKSkuVigpLmNvdW50KCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpLCBlZGdlczogX18uSGFzTGFiZWwoInJvdXRlIikpKS5WKCkuQ291bnQoKSwKLSAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpLCBuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSwgZWRnZXM6IF9fLmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKCJyZWdpb24iLCAiVVMtVFgiKSwgY2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlKSkuVigpCi0gICAgICAgICAgICAgICAgICAgIC5Db3VudCgpLAotICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoJ3JlZ2lvbicsICdVUy1UWCcpLCBjaGVja0FkamFjZW50VmVydGljZXM6IHRydWUpKS5WKCkuY291bnQoKSIKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2cuV2l0aCgiZXZhbHVhdGlvblRpbWVvdXQiLCA1MDApLlYoKS5Db3VudCgpLAotICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3koJ2V2YWx1YXRpb25UaW1lb3V0JzogNTAwKSkuVigpLmNvdW50KCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3kobmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHsgeyAiZXZhbHVhdGlvblRpbWVvdXQiLCA1MDAgfSB9KSkKLSAgICAgICAgICAgICAgICAgICAgLlYoKS5Db3VudCgpLAotICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3koJ2V2YWx1YXRpb25UaW1lb3V0JzogNTAwKSkuVigpLmNvdW50KCkiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICJwYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLAotICAgICAgICAgICAgICAgICAgICByZWFkUGFydGl0aW9uczogbmV3IExpc3Q8c3RyaW5nPiB7ICJhIiB9KSkuQWRkVigidGVzdCIpLAotICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6ICdwYXJ0aXRpb24nLCB3cml0ZVBhcnRpdGlvbjogJ2EnLCByZWFkUGFydGl0aW9uczogWydhJ10pKS5hZGRWKCd0ZXN0JykiCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9nLldpdGhTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpLlNob3J0ZXN0UGF0aCgpCi0gICAgICAgICAgICAgICAgICAgIC5XaXRoKFNob3J0ZXN0UGF0aC50YXJnZXQsIF9fLkhhcygibmFtZSIsICJwZXRlciIpKSwKLSAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQnLCBfXy5oYXMoJ25hbWUnLCAncGV0ZXInKSkiCi0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yZWFjaCAodmFyICggdHJhdmVyc2FsLCBleHBlY3RlZEdyb292eVNjcmlwdCkgaW4gZXhwZWN0ZWRHcm9vdnlTY3JpcHRCeVRyYXZlcnNhbCkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0VHJhdmVyc2FsVHJhbnNsYXRpb24oZXhwZWN0ZWRHcm9vdnlTY3JpcHQsIHRyYXZlcnNhbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgQXNzZXJ0VHJhbnNsYXRpb24oc3RyaW5nIGV4cGVjdGVkVHJhbnNsYXRpb24sIHBhcmFtcyBvYmplY3Q/W10/IG9ianMpCi0gICAgewotICAgICAgICBBc3NlcnRUcmF2ZXJzYWxUcmFuc2xhdGlvbigkImcuaW5qZWN0KHtleHBlY3RlZFRyYW5zbGF0aW9ufSkiLCBfZy5JbmplY3Qob2JqcykpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgQXNzZXJ0VHJhdmVyc2FsVHJhbnNsYXRpb24oc3RyaW5nIGV4cGVjdGVkVHJhbnNsYXRpb24sIElUcmF2ZXJzYWwgdHJhdmVyc2FsKQotICAgIHsKLSAgICAgICAgdmFyIHRyYW5zbGF0b3IgPSBHcm9vdnlUcmFuc2xhdG9yLk9mKCJnIik7Ci0KLSAgICAgICAgdmFyIHRyYW5zbGF0ZWQgPSB0cmFuc2xhdG9yLlRyYW5zbGF0ZSh0cmF2ZXJzYWwpOwotCi0gICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZFRyYW5zbGF0aW9uLCB0cmFuc2xhdGVkKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9UcmF2ZXJzYWxUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvUHJvY2Vzcy9UcmF2ZXJzYWwvVHJhdmVyc2FsVGVzdHMuY3MKaW5kZXggZTdkMWViYy4uYTE1OGVkOCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9Qcm9jZXNzL1RyYXZlcnNhbC9UcmF2ZXJzYWxUZXN0cy5jcworKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1Byb2Nlc3MvVHJhdmVyc2FsL1RyYXZlcnNhbFRlc3RzLmNzCkBAIC0yNiw2ICsyNiw3IEBACiB1c2luZyBTeXN0ZW0uTGlucTsKIHVzaW5nIFh1bml0OwogdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmU7CiAKIG5hbWVzcGFjZSBHcmVtbGluLk5ldC5Vbml0VGVzdC5Qcm9jZXNzLlRyYXZlcnNhbAogewpAQCAtMTc5LDUgKzE4MCw0OCBAQAogICAgICAgICAgICAgdmFyIGV4cGVjdGVkT2JqcyA9IFVuZm9sZEJ1bGtzKG9ianMsIGJ1bGtzKTsKICAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZE9ianMsIHRyYXZlcnNlZE9ianMpOwogICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZEV4dHJhY3RJZEZyb21WZXJ0ZXgoKQorICAgICAgICB7CisgICAgICAgICAgICBHcmVtbGluTGFuZy5SZXNldENvdW50ZXIoKTsKKyAgICAgICAgICAgIHZhciBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLlRyYXZlcnNhbCgpLldpdGgobnVsbCk7CisKKyAgICAgICAgICAgIC8vIFRlc3QgYmFzaWMgVigpIHN0ZXAgd2l0aCBtaXhlZCBJRCB0eXBlcworICAgICAgICAgICAgdmFyIHZTdGFydCA9IGcuVigxLCBuZXcgVmVydGV4KDIpKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiZy5WKDEsMikiLCB2U3RhcnQuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKworICAgICAgICAgICAgLy8gVGVzdCBWKCkgc3RlcCBpbiB0aGUgbWlkZGxlIG9mIGEgdHJhdmVyc2FsCisgICAgICAgICAgICB2YXIgdk1pZCA9IGcuSW5qZWN0KCJmb28iKS5WKDEsIG5ldyBWZXJ0ZXgoMikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmluamVjdChcImZvb1wiKS5WKDEsMikiLCB2TWlkLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSk7CisKKyAgICAgICAgICAgIC8vIFRlc3QgZWRnZSBjcmVhdGlvbiB3aXRoIGZyb20vdG8gdmVydGljZXMKKyAgICAgICAgICAgIHZhciBmcm9tVG8gPSBnLkFkZEUoIkVkZ2UiKS5Gcm9tKG5ldyBWZXJ0ZXgoMSkpLlRvKG5ldyBWZXJ0ZXgoMikpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJnLmFkZEUoXCJFZGdlXCIpLmZyb20oMSkudG8oMikiLCBmcm9tVG8uR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKTsKKworICAgICAgICAgICAgLy8gVGVzdCBtZXJnZUUoKSB3aXRoIFZlcnRleCBpbiBkaWN0aW9uYXJ5CisgICAgICAgICAgICB2YXIgbWVyZ2VNYXAgPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7IFQuTGFiZWwsICJrbm93cyIgfSwKKyAgICAgICAgICAgICAgICB7IERpcmVjdGlvbi5PdXQsIG5ldyBWZXJ0ZXgoMSkgfSwKKyAgICAgICAgICAgICAgICB7IERpcmVjdGlvbi5JbiwgbmV3IFZlcnRleCgyKSB9CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB2YXIgbWVyZ2VFU3RhcnQgPSBnLk1lcmdlRShtZXJnZU1hcCk7CisgICAgICAgICAgICAvLyBWZXJpZnkgdGhlIGRpY3Rpb25hcnkgaGFkIFZlcnRleCBJRHMgZXh0cmFjdGVkICh0aGUgbWFwIGlzIG11dGF0ZWQgaW4gcGxhY2UpCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgbWVyZ2VNYXBbRGlyZWN0aW9uLk91dF0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIG1lcmdlTWFwW0RpcmVjdGlvbi5Jbl0pOworCisgICAgICAgICAgICAvLyBUZXN0IG1lcmdlRSgpIGluIHRoZSBtaWRkbGUgb2YgYSB0cmF2ZXJzYWwKKyAgICAgICAgICAgIHZhciBtZXJnZU1hcDIgPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB7IFQuTGFiZWwsICJrbm93cyIgfSwKKyAgICAgICAgICAgICAgICB7IERpcmVjdGlvbi5PdXQsIG5ldyBWZXJ0ZXgoMSkgfSwKKyAgICAgICAgICAgICAgICB7IERpcmVjdGlvbi5JbiwgbmV3IFZlcnRleCgyKSB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIG1lcmdlRU1pZCA9IGcuSW5qZWN0KCJmb28iKS5NZXJnZUUobWVyZ2VNYXAyKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgxLCBtZXJnZU1hcDJbRGlyZWN0aW9uLk91dF0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIG1lcmdlTWFwMltEaXJlY3Rpb24uSW5dKTsKKyAgICAgICAgfQogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVGVzdHMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZTVhYzUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Ci11c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeQotewotICAgIHB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVGVzdHMKLSAgICB7Ci0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRTZXJpYWxpemVSZXF1ZXN0TWVzc2FnZVRvRXhwZWN0ZWRHcmFwaEJpbmFyeSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBieXRlW10KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBoZWFkZXIgbGVuZ3RoCi0gICAgICAgICAgICAgICAgMHgyMCwgCi0gICAgICAgICAgICAgICAgLy8gaGVhZGVyOiBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjEuMAotICAgICAgICAgICAgICAgIDB4NjEsIDB4NzAsIDB4NzAsIDB4NmMsIDB4NjksIDB4NjMsIDB4NjEsIDB4NzQsIDB4NjksIDB4NmYsIDB4NmUsIDB4MmYsIDB4NzYsIDB4NmUsIDB4NjQsIDB4MmUsCi0gICAgICAgICAgICAgICAgMHg2NywgMHg3MiwgMHg2MSwgMHg3MCwgMHg2OCwgMHg2MiwgMHg2OSwgMHg2ZSwgMHg2MSwgMHg3MiwgMHg3OSwgMHgyZCwgMHg3NiwgMHgzMSwgMHgyZSwgMHgzMCwKLSAgICAgICAgICAgICAgICAvLyB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgMHg4MSwKLSAgICAgICAgICAgICAgICAvLyB1dWlkCi0gICAgICAgICAgICAgICAgMHg0MCwgMHgwNSwgMHhiMywgMHg3NCwgMHhiMSwgMHgyMSwgMHg0MCwgMHgxYiwgMHg5MSwgMHg1NywgMHhhYiwgMHgxZiwgMHgxZSwgMHhjYywgMHg4OSwgMHg0ZSwKLSAgICAgICAgICAgICAgICAvLyBvcCBsZW5ndGgKLSAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDA0LAotICAgICAgICAgICAgICAgIC8vIG9wOiAiZXZhbCIKLSAgICAgICAgICAgICAgICAweDY1LCAweDc2LCAweDYxLCAweDZjLAotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NvciBsZW5ndGgKLSAgICAgICAgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgICAgICAgICAgICAgIC8vIGFyZ3MsIG1hcAotICAgICAgICAgICAgICAgICAgICAvLyBsZW5ndGgKLSAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLSAgICAgICAgICAgICAgICAgICAgLy8ga2V5IHR5cGU6IHN0cmluZwotICAgICAgICAgICAgICAgICAgICAweDAzLAotICAgICAgICAgICAgICAgICAgICAvLyBrZXkgbGVuZ3RoOiAKLSAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg2NywgMHg3MiwgMHg2NSwgMHg2ZCwgMHg2YywgMHg2OSwgMHg2ZSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwKLSAgICAgICAgICAgICAgICAgICAgMHgyNywgMHg0OCwgMHg2NSwgMHg2YywgMHg2YywgMHg2ZiwgMHgyNywgMHgyMCwgMHgyYiwgMHgyMCwgMHgyNywgMHg1NywgMHg2ZiwgMHg3MiwgMHg2YywgMHg2NCwgMHgyNwotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZXZhbCIpLk92ZXJyaWRlUmVxdWVzdElkKEd1aWQuUGFyc2UoIjQwMDViMzc0LWIxMjEtNDAxYi05MTU3LWFiMWYxZWNjODk0ZSIpKQotICAgICAgICAgICAgICAgIC5BZGRBcmd1bWVudCgiZ3JlbWxpbiIsICInSGVsbG8nICsgJ1dvcmxkJyIpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOwotCi0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMobXNnKTsKLQotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTZXJpYWxpemVNZXNzYWdlQXN5bmNTaG91bGRTdXBwb3J0Q2FuY2VsbGF0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOwotCi0gICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8VGFza0NhbmNlbGVkRXhjZXB0aW9uPihhc3luYyAoKSA9PgotICAgICAgICAgICAgICAgIGF3YWl0IHNlcmlhbGl6ZXIuU2VyaWFsaXplTWVzc2FnZUFzeW5jKFJlcXVlc3RNZXNzYWdlLkJ1aWxkKHN0cmluZy5FbXB0eSkuQ3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgIG5ldyBDYW5jZWxsYXRpb25Ub2tlbih0cnVlKSkpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBEZXNlcmlhbGl6ZU1lc3NhZ2VBc3luY1Nob3VsZFN1cHBvcnRDYW5jZWxsYXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IENyZWF0ZU1lc3NhZ2VTZXJpYWxpemVyKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxUYXNrQ2FuY2VsZWRFeGNlcHRpb24+KGFzeW5jICgpID0+Ci0gICAgICAgICAgICAgICAgYXdhaXQgc2VyaWFsaXplci5EZXNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhBcnJheS5FbXB0eTxieXRlPigpLCBuZXcgQ2FuY2VsbGF0aW9uVG9rZW4odHJ1ZSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIgQ3JlYXRlTWVzc2FnZVNlcmlhbGl6ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeVRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvR3JhcGhCaW5hcnlUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5MTA4Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9HcmFwaEJpbmFyeVRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsOTk2ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLkdsb2JhbGl6YXRpb247Ci11c2luZyBTeXN0ZW0uSU87Ci11c2luZyBTeXN0ZW0uTnVtZXJpY3M7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5OwotdXNpbmcgWHVuaXQ7Ci11c2luZyBCYXJyaWVyID0gR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuQmFycmllcjsKLXVzaW5nIFBhdGggPSBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuUGF0aDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeQotewotICAgIHB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeVRlc3RzCi0gICAgewotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdE51bGwoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKG51bGwsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0Lk51bGwoYWN0dWFsKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEludCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBleHBlY3RlZCA9IDEwMDsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeV0KLSAgICAgICAgW0lubGluZURhdGEoMSwgbmV3IGJ5dGVbXXsweDAwLCAweDAwLCAweDAwLCAweDAxfSldCi0gICAgICAgIFtJbmxpbmVEYXRhKDI1NywgbmV3IGJ5dGVbXXsweDAwLCAweDAwLCAweDAxLCAweDAxfSldCi0gICAgICAgIFtJbmxpbmVEYXRhKC0xLCBuZXcgYnl0ZVtdezB4RkYsIDB4RkYsIDB4RkYsIDB4RkZ9KV0KLSAgICAgICAgW0lubGluZURhdGEoLTIsIG5ldyBieXRlW117MHhGRiwgMHhGRiwgMHhGRiwgMHhGRX0pXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0SW50U3BlYyhpbnQgdmFsdWUsIGJ5dGVbXSBleHBlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLQotICAgICAgICAgICAgdmFyIHNlckJ5dGVzID0gc2VyaWFsaXphdGlvblN0cmVhbS5Ub0FycmF5KCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIHNlckJ5dGVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RMb25nKCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgbG9uZyBleHBlY3RlZCA9IDEwMDsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgxMDAuMDFmKV0KLSAgICAgICAgW0lubGluZURhdGEoZmxvYXQuTmFOKV0KLSAgICAgICAgW0lubGluZURhdGEoZmxvYXQuTmVnYXRpdmVJbmZpbml0eSldCi0gICAgICAgIFtJbmxpbmVEYXRhKGZsb2F0LlBvc2l0aXZlSW5maW5pdHkpXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RmxvYXQoZmxvYXQgZXhwZWN0ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdERvdWJsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBleHBlY3RlZCA9IDEwMC4wMDE7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RTaG9ydCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHNob3J0IGV4cGVjdGVkID0gMTAwOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RGF0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IERhdGVUaW1lT2Zmc2V0LlBhcnNlRXhhY3QoIjIwMTYtMTItMTQgMTY6MTQ6MzYuMjk1MDAwIiwgInl5eXktTU0tZGQgSEg6bW06c3MuZmZmZmZmIiwKLSAgICAgICAgICAgICAgICBDdWx0dXJlSW5mby5JbnZhcmlhbnRDdWx0dXJlKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUT0RPOiBUZXN0IHRpbWVzdGFtcCwgcHJvYmxlbTogc2FtZSBDIyBhcyBmb3IgZGF0ZQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0U3RyaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGV4cGVjdGVkID0gInNlcmlhbGl6ZSB0aGlzISI7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeV0KLSAgICAgICAgW0lubGluZURhdGEoInNlcmlhbGl6ZSB0aGlzISIsICJzZXJpYWxpemUgdGhhdCEiLCAic2VyaWFsaXplIHRoYXQhIiwgInN0b3AgdGVsbGluZyBtZSB3aGF0IHRvIHNlcmlhbGl6ZSIpXQotICAgICAgICBbSW5saW5lRGF0YSgxLCAyLCAzLCA0LCA1KV0KLSAgICAgICAgW0lubGluZURhdGEoMC4xLCAxLjEsIDIuNSwgZG91YmxlLk5hTildCi0gICAgICAgIFtJbmxpbmVEYXRhKDAuMWYsIDEuMWYsIDIuNWYsIGZsb2F0Lk5hTildCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIb21vZ2VuZW91c0xpc3QocGFyYW1zIG9iamVjdFtdIGxpc3RNZW1iZXJzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgTGlzdDxvYmplY3Q+KGxpc3RNZW1iZXJzKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEhvbW9nZW5lb3VzVHlwZVNhZmVMaXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IExpc3Q8c3RyaW5nPiB7InRlc3QiLCAiMTIzIn07Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIZXRlcm9nZW5lb3VzTGlzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBMaXN0PG9iamVjdD4KLSAgICAgICAgICAgICAgICB7InNlcmlhbGl6ZSB0aGlzISIsIDAsICJzZXJpYWxpemUgdGhhdCEiLCAic2VyaWFsaXplIHRoYXQhIiwgMSwgInN0b3AgdGVsbGluZyBtZSB3aGF0IHRvIHNlcmlhbGl6ZSIsIDJ9OwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEFycmF5KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IHN0cmluZ1tdIHsiaGFsbG8iLCAid2VsdCJ9OwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKCJzZXJpYWxpemUgdGhpcyEiLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiKV0KLSAgICAgICAgW0lubGluZURhdGEoMSwgMiwgMywgNCwgNSldCi0gICAgICAgIFtJbmxpbmVEYXRhKDAuMSwgMS4xLCAyLjUsIGRvdWJsZS5OYU4pXQotICAgICAgICBbSW5saW5lRGF0YSgwLjFmLCAxLjFmLCAyLjVmLCBmbG9hdC5OYU4pXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0SG9tb2dlbmVvdXNTZXQocGFyYW1zIG9iamVjdFtdIGxpc3RNZW1iZXJzKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgSGFzaFNldDxvYmplY3Q+KGxpc3RNZW1iZXJzKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEhvbW9nZW5lb3VzVHlwZVNhZmVTZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgSGFzaFNldDxzdHJpbmc+IHsidGVzdCIsICIxMjMifTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPEhhc2hTZXQ8c3RyaW5nPj4oc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5HZXRUeXBlKCksIGFjdHVhbC5HZXRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEhldGVyb2dlbmVvdXNTZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgSGFzaFNldDxvYmplY3Q+Ci0gICAgICAgICAgICAgICAgeyJzZXJpYWxpemUgdGhpcyEiLCAwLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsIDEsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiLCAyfTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3REaWN0aW9uYXJ5KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJ5byIsICJ3aGF0In0sCi0gICAgICAgICAgICAgICAgeyJnbyIsICJubyEifSwKLSAgICAgICAgICAgICAgICB7Im51bWJlciIsIDEyM30sCi0gICAgICAgICAgICAgICAgezMyMSwgImNyYXp5IHdpdGggdGhlIG51bWJlciBmb3IgYSBrZXkifSwKLSAgICAgICAgICAgICAgICB7OTg3LCBuZXcgTGlzdDxvYmplY3Q+IHsiZ28iLCAiZGVlcCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyJoZXJlIiwgIiEifX19fQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEhvbW9nZW5lb3VzVHlwZVNhZmVEaWN0aW9uYXJ5KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBpbnQ+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJudW1iZXIiLCAxMjN9LAotICAgICAgICAgICAgICAgIHsiYW5kIiwgNDU2fSwKLSAgICAgICAgICAgICAgICB7Im5vdGhpbmcgZWxzZSIsIDc4OX0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIb21vZ2VuZW91c1R5cGVTYWZlRGljdGlvbmFyeVdpdGhDb3JyZWN0VHlwaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBpbnQ+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJudW1iZXIiLCAxMjN9LAotICAgICAgICAgICAgICAgIHsiYW5kIiwgNDU2fSwKLSAgICAgICAgICAgICAgICB7Im5vdGhpbmcgZWxzZSIsIDc4OX0KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4oc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5HZXRUeXBlKCksIGFjdHVhbC5HZXRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEd1aWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBHdWlkLlBhcnNlKCI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RHdWlkU2VyaWFsaXphdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB0b1NlcmlhbGl6ZSA9IEd1aWQuUGFyc2UoIjAwMTEyMjMzLTQ0NTUtNjY3Ny04ODk5LWFhYmJjY2RkZWVmZiIpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLQotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHRvU2VyaWFsaXplLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IGJ5dGVbXQotICAgICAgICAgICAgICAgIHsweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LCAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmfTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbS5Ub0FycmF5KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RWZXJ0ZXgoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgVmVydGV4KDEyMywgInBlcnNvbiIpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBXcml0ZU5vbk51bGxhYmxlVmFsdWVTaG91bGRUaHJvd0Zvck51bGxWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxJT0V4Y2VwdGlvbj4oKCkgPT4gd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKG51bGwhLCBzZXJpYWxpemF0aW9uU3RyZWFtKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RWRnZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBFZGdlKDEyMywgbmV3IFZlcnRleCgxLCAicGVyc29uIiksICJkZXZlbG9wZWQiLCBuZXcgVmVydGV4KDEwLCAic29mdHdhcmUiKSk7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0UGF0aCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgbmV3IFBhdGgoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0PElTZXQ8c3RyaW5nPj4KLSAgICAgICAgICAgICAgICAgICAgICAgIHtuZXcgSGFzaFNldDxzdHJpbmc+IHsiYSIsICJiIn0sIG5ldyBIYXNoU2V0PHN0cmluZz4geyJjIiwgImQifSwgbmV3IEhhc2hTZXQ8c3RyaW5nPiB7ImUifX0sCi0gICAgICAgICAgICAgICAgICAgIG5ldyBMaXN0PG9iamVjdD8+IHsxLCAyLCAzfSk7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0UHJvcGVydHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgUHJvcGVydHkoIm5hbWUiLCAic3RlcGhlbiIsIG51bGwpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0VmVydGV4UHJvcGVydHkoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgVmVydGV4UHJvcGVydHkoMTIzLCAibmFtZSIsICJzdGVwaGVuIiwgbnVsbCk7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RCYXJyaWVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gQmFycmllci5Ob3JtU2FjazsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdENhcmRpbmFsaXR5KCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gQ2FyZGluYWxpdHkuU2V0OwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0Q29sdW1uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gQ29sdW1uLlZhbHVlczsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdERpcmVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IERpcmVjdGlvbi5PdXQ7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RFQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBEVC5NaW51dGU7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0TWVyZ2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBNZXJnZS5PbkNyZWF0ZTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLQotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEdUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gR1R5cGUuQnl0ZTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLQotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdE9wZXJhdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gT3BlcmF0b3IuTWluOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0T3JkZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBPcmRlci5TaHVmZmxlOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0UGljaygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFBpY2suTm9uZTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFBvcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFBvcC5BbGw7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RTY29wZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFNjb3BlLkxvY2FsOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0VCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFQuTGFiZWw7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RCaW5kaW5nKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IEJpbmRpbmcoIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEJ5dGVjb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICBleHBlY3RlZC5Tb3VyY2VJbnN0cnVjdGlvbnMuQWRkKG5ldyBJbnN0cnVjdGlvbigid2l0aFN0cmF0ZWdpZXMiLCAiU3ViZ3JhcGhTdHJhdGVneSIpKTsKLSAgICAgICAgICAgIGV4cGVjdGVkLlN0ZXBJbnN0cnVjdGlvbnMuQWRkKG5ldyBJbnN0cnVjdGlvbigiViIsIDEsIDIsIDMpKTsKLSAgICAgICAgICAgIGV4cGVjdGVkLlN0ZXBJbnN0cnVjdGlvbnMuQWRkKG5ldyBJbnN0cnVjdGlvbigib3V0IikpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSAoQnl0ZWNvZGU/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQuU291cmNlSW5zdHJ1Y3Rpb25zLCBhY3R1YWwhLlNvdXJjZUluc3RydWN0aW9ucyk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQuU3RlcEluc3RydWN0aW9ucywgYWN0dWFsLlN0ZXBJbnN0cnVjdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgxKV0KLSAgICAgICAgW0lubGluZURhdGEoMTIzKV0KLSAgICAgICAgW0lubGluZURhdGEoLTEpXQotICAgICAgICBbSW5saW5lRGF0YSgtMTI4KV0KLSAgICAgICAgW0lubGluZURhdGEoMTI3KV0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFNCeXRlKHNieXRlIGV4cGVjdGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeV0KLSAgICAgICAgW0lubGluZURhdGEoKHNieXRlKTAsIG5ldyBieXRlW10geyAweDAwIH0pXQotICAgICAgICBbSW5saW5lRGF0YSgoc2J5dGUpMSwgbmV3IGJ5dGVbXSB7IDB4MDEgfSldCi0gICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSkxMjcsIG5ldyBieXRlW10geyAweDdGIH0pXQotICAgICAgICBbSW5saW5lRGF0YSgoc2J5dGUpLTEsIG5ldyBieXRlW10geyAweEZGIH0pXQotICAgICAgICBbSW5saW5lRGF0YSgoc2J5dGUpLTEyOCwgbmV3IGJ5dGVbXSB7IDB4ODAgfSldCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RTQnl0ZVNlcmlhbGl6YXRpb25TcGVjKHNieXRlIHZhbHVlLCBieXRlW10gZXhwZWN0ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBuZXcgR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotCi0gICAgICAgICAgICB2YXIgc2VyQnl0ZXMgPSBzZXJpYWxpemF0aW9uU3RyZWFtLlRvQXJyYXkoKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgc2VyQnl0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgoc2J5dGUpMCldCi0gICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSkxKV0KLSAgICAgICAgW0lubGluZURhdGEoKHNieXRlKTEyNyldCi0gICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSktMSldCi0gICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSktMTI4KV0KLSAgICAgICAgW0lubGluZURhdGEoKHNieXRlKTQyKV0KLSAgICAgICAgW0lubGluZURhdGEoKHNieXRlKS00MildCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RTQnl0ZVJvdW5kVHJpcChzYnl0ZSBleHBlY3RlZCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IG5ldyBHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1R5cGU8c2J5dGU+KGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0U0J5dGVNaW5NYXhWYWx1ZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRlc3QgbWluaW11bSB2YWx1ZQotICAgICAgICAgICAgdmFyIG1pblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHNieXRlLk1pblZhbHVlLCBtaW5TdHJlYW0pOwotICAgICAgICAgICAgbWluU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWxNaW4gPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKG1pblN0cmVhbSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoc2J5dGUuTWluVmFsdWUsIGFjdHVhbE1pbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFRlc3QgbWF4aW11bSB2YWx1ZQotICAgICAgICAgICAgdmFyIG1heFN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHNieXRlLk1heFZhbHVlLCBtYXhTdHJlYW0pOwotICAgICAgICAgICAgbWF4U3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWxNYXggPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKG1heFN0cmVhbSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoc2J5dGUuTWF4VmFsdWUsIGFjdHVhbE1heCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0Qnl0ZUJ1ZmZlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBieXRlW10gezEsIDIsIDN9OwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnldCi0gICAgICAgIFtJbmxpbmVEYXRhKHRydWUpXQotICAgICAgICBbSW5saW5lRGF0YShmYWxzZSldCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RCb29sZWFuKGJvb2wgZXhwZWN0ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgnYScpXQotICAgICAgICBbSW5saW5lRGF0YSgnMCcpXQotICAgICAgICBbSW5saW5lRGF0YSgnwqInKV0KLSAgICAgICAgW0lubGluZURhdGEoJ+KCrCcpXQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0Q2hhcihjaGFyIGV4cGVjdGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3REdXJhdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBUaW1lU3BhbigxLCAyLCAzLCA0LCA1KTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEJpZ0ludGVnZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBCaWdJbnRlZ2VyLlBhcnNlKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5XQotICAgICAgICBbSW5saW5lRGF0YSgiMTkwLjAzNSIpXQotICAgICAgICBbSW5saW5lRGF0YSgiMC4xOSIpXQotICAgICAgICBbSW5saW5lRGF0YSgiMTkwMCIpXQotICAgICAgICBbSW5saW5lRGF0YSgiLTE5MDAiKV0KLSAgICAgICAgW0lubGluZURhdGEoIjEwMDAwMDAwMDAwMDAwMCIpXQotICAgICAgICBbSW5saW5lRGF0YSgiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIildCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RCaWdEZWNpbWFsKHN0cmluZyBkZWNpbWFsVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IERlY2ltYWwuUGFyc2UoZGVjaW1hbFZhbHVlKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdExhbWJkYSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IExhbWJkYS5Hcm9vdnkoInNvbWUgZXhwcmVzc2lvbiIpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSAoU3RyaW5nQmFzZWRMYW1iZGE/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQuTGFuZ3VhZ2UsIGFjdHVhbCEuTGFuZ3VhZ2UpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLkxhbWJkYUV4cHJlc3Npb24sIGFjdHVhbC5MYW1iZGFFeHByZXNzaW9uKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5Bcmd1bWVudHMsIGFjdHVhbC5Bcmd1bWVudHMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFBCZXR3ZWVuKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gUC5CZXR3ZWVuKDEsIDIpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSAoUD8pIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5PcGVyYXRvck5hbWUsIGFjdHVhbCEuT3BlcmF0b3JOYW1lKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5PdGhlciwgYWN0dWFsLk90aGVyKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgob2JqZWN0W10pZXhwZWN0ZWQuVmFsdWUsIChvYmplY3RbXSlhY3R1YWwuVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFBHdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFAuR3QoNSk7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgdmFyIGFjdHVhbCA9IChQPykgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLk9wZXJhdG9yTmFtZSwgYWN0dWFsIS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLk90aGVyLCBhY3R1YWwuT3RoZXIpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLlZhbHVlLCBhY3R1YWwuVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RQQW5kKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gUC5Ob3QoUC5MdGUoMTApLkFuZChQLk5vdChQLkJldHdlZW4oMTEsIDIwKSkpKS5BbmQoUC5MdCgyOSkuT3IoUC5FcSgzNSkpKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gKFA/KSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQuVG9TdHJpbmcoKSwgYWN0dWFsIS5Ub1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RUZXh0UCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFRleHRQLkNvbnRhaW5pbmcoIm8iKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gKFRleHRQPykgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLk9wZXJhdG9yTmFtZSwgYWN0dWFsIS5PcGVyYXRvck5hbWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLk90aGVyLCBhY3R1YWwuT3RoZXIpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLlZhbHVlLCBhY3R1YWwuVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFRyYXZlcnNlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBUcmF2ZXJzZXIoInRlc3QiLCAzKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gKFRyYXZlcnNlcj8pIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5PYmplY3QsIGFjdHVhbCEuT2JqZWN0KTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZC5CdWxrLCBhY3R1YWwuQnVsayk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgc3RhdGljIEdyYXBoQmluYXJ5V3JpdGVyIENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaEJpbmFyeVdyaXRlcigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHN0YXRpYyBHcmFwaEJpbmFyeVJlYWRlciBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhCaW5hcnlSZWFkZXIoKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TYW1wbGUvU2FtcGxlUGVyc29uLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2FtcGxlL1NhbXBsZVBlcnNvbi5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWViMTc3ZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TYW1wbGUvU2FtcGxlUGVyc29uLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5LlR5cGVzLlNhbXBsZQotewotICAgIHB1YmxpYyBjbGFzcyBTYW1wbGVQZXJzb24gOiBJRXF1YXRhYmxlPFNhbXBsZVBlcnNvbj4KLSAgICB7Ci0gICAgICAgIHB1YmxpYyBTYW1wbGVQZXJzb24oc3RyaW5nIG5hbWUsIERhdGVUaW1lT2Zmc2V0IGJpcnRoRGF0ZSkKLSAgICAgICAgewotICAgICAgICAgICAgTmFtZSA9IG5hbWU7Ci0gICAgICAgICAgICBCaXJ0aERhdGUgPSBiaXJ0aERhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3RyaW5nIE5hbWUgeyBnZXQ7IH0KLSAgICAgICAgcHVibGljIERhdGVUaW1lT2Zmc2V0IEJpcnRoRGF0ZSB7IGdldDsgfQotCi0gICAgICAgIHB1YmxpYyBib29sIEVxdWFscyhTYW1wbGVQZXJzb24/IG90aGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoUmVmZXJlbmNlRXF1YWxzKG51bGwsIG90aGVyKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIE5hbWUgPT0gb3RoZXIuTmFtZSAmJiBCaXJ0aERhdGUuRXF1YWxzKG90aGVyLkJpcnRoRGF0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYm9vbCBFcXVhbHMob2JqZWN0PyBvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChSZWZlcmVuY2VFcXVhbHMobnVsbCwgb2JqKSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKFJlZmVyZW5jZUVxdWFscyh0aGlzLCBvYmopKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChvYmouR2V0VHlwZSgpICE9IHRoaXMuR2V0VHlwZSgpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gRXF1YWxzKChTYW1wbGVQZXJzb24pb2JqKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSGFzaENvZGUuQ29tYmluZShOYW1lLCBCaXJ0aERhdGUpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5L1R5cGVzL1NhbXBsZS9TYW1wbGVQZXJzb25TZXJpYWxpemVyLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2FtcGxlL1NhbXBsZVBlcnNvblNlcmlhbGl6ZXIuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOTg5NjEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2FtcGxlL1NhbXBsZVBlcnNvblNlcmlhbGl6ZXIuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLklPOwotdXNpbmcgU3lzdGVtLlRleHQ7Ci11c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlczsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcy5TYW1wbGUKLXsKLSAgICBwdWJsaWMgY2xhc3MgU2FtcGxlUGVyc29uU2VyaWFsaXplciA6IEN1c3RvbVR5cGVTZXJpYWxpemVyCi0gICAgewotICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGJ5dGVbXSBfdHlwZUluZm9CeXRlcyA9IHsgMCwgMCwgMCwgMCB9OwotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlQXN5bmMob2JqZWN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdyaXRlIHtjdXN0b20gdHlwZSBpbmZvfSwge3ZhbHVlX2ZsYWd9IGFuZCB7dmFsdWV9Ci0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhfdHlwZUluZm9CeXRlcywgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IFdyaXRlTnVsbGFibGVWYWx1ZUFzeW5jKHZhbHVlLCBzdHJlYW0sIHdyaXRlciwgY2FuY2VsbGF0aW9uVG9rZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIG92ZXJyaWRlIGFzeW5jIFRhc2sgV3JpdGVOdWxsYWJsZVZhbHVlQXN5bmMob2JqZWN0IHZhbHVlLCBTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZVZhbHVlRmxhZ051bGxBc3luYyhzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVWYWx1ZUZsYWdOb25lQXN5bmMoc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICB2YXIgc2FtcGxlUGVyc29uID0gKFNhbXBsZVBlcnNvbil2YWx1ZTsKLSAgICAgICAgICAgIHZhciBuYW1lID0gc2FtcGxlUGVyc29uLk5hbWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHZhbHVlX2xlbmd0aCA9IG5hbWVfYnl0ZV9sZW5ndGggKyBuYW1lX2J5dGVzICsgbG9uZwotICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmMoNCArIEVuY29kaW5nLlVURjguR2V0Qnl0ZXMobmFtZSkuTGVuZ3RoICsgOCwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKG5hbWUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhzYW1wbGVQZXJzb24uQmlydGhEYXRlLCBzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBhc3luYyBUYXNrIFdyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKG9iamVjdCB2YWx1ZSwgU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlVuZXhwZWN0ZWQgbnVsbCB2YWx1ZSB3aGVuIG51bGxhYmxlIGlzIGZhbHNlIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBzYW1wbGVQZXJzb24gPSAoU2FtcGxlUGVyc29uKXZhbHVlOwotICAgICAgICAgICAgdmFyIG5hbWUgPSBzYW1wbGVQZXJzb24uTmFtZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gdmFsdWVfbGVuZ3RoID0gbmFtZV9ieXRlX2xlbmd0aCArIG5hbWVfYnl0ZXMgKyBsb25nCi0gICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVJbnRBc3luYyg0ICsgRW5jb2RpbmcuVVRGOC5HZXRCeXRlcyhuYW1lKS5MZW5ndGggKyA4LCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMobmFtZSwgc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKHNhbXBsZVBlcnNvbi5CaXJ0aERhdGUsIHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBhc3luYyBUYXNrPG9iamVjdD8+IFJlYWRBc3luYyhTdHJlYW0gc3RyZWFtLCBHcmFwaEJpbmFyeVJlYWRlciByZWFkZXIsCi0gICAgICAgICAgICBDYW5jZWxsYXRpb25Ub2tlbiBjYW5jZWxsYXRpb25Ub2tlbiA9IGRlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHtjdXN0b20gdHlwZSBpbmZvfSwge3ZhbHVlX2ZsYWd9IGFuZCB7dmFsdWV9Ci0gICAgICAgICAgICAvLyBObyBjdXN0b21fdHlwZV9pbmZvCi0gICAgICAgICAgICBpZiAoYXdhaXQgc3RyZWFtLlJlYWRJbnRBc3luYyhjYW5jZWxsYXRpb25Ub2tlbikuQ29uZmlndXJlQXdhaXQoZmFsc2UpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJ7Y3VzdG9tX3R5cGVfaW5mb30gc2hvdWxkIG5vdCBiZSBwcm92aWRlZCBmb3IgdGhpcyBjdXN0b20gdHlwZSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gYXdhaXQgUmVhZE51bGxhYmxlVmFsdWVBc3luYyhzdHJlYW0sIHJlYWRlciwgY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBhc3luYyBUYXNrPG9iamVjdD8+IFJlYWROdWxsYWJsZVZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdmFsdWVGbGFnID0gYXdhaXQgc3RyZWFtLlJlYWRCeXRlQXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIGlmICgodmFsdWVGbGFnICYgMSkgPT0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gUmVhZCB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIHZhbHVlIGJ5dGVzCi0gICAgICAgICAgICB2YXIgdmFsdWVMZW5ndGggPSBhd2FpdCBzdHJlYW0uUmVhZEludEFzeW5jKGNhbmNlbGxhdGlvblRva2VuKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigkIlVuZXhwZWN0ZWQgdmFsdWUgbGVuZ3RoOiB7dmFsdWVMZW5ndGh9Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCA+IHN0cmVhbS5MZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiTm90IGVub3VnaCByZWFkYWJsZSBieXRlczoge3ZhbHVlTGVuZ3RofSAoZXhwZWN0ZWQ6IHtzdHJlYW0uTGVuZ3RofSkiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIG5hbWUgPSAoc3RyaW5nKWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPHN0cmluZz4oc3RyZWFtLCBjYW5jZWxsYXRpb25Ub2tlbikKLSAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgdmFyIGJpcnRoRGF0ZSA9Ci0gICAgICAgICAgICAgICAgKERhdGVUaW1lT2Zmc2V0KWF3YWl0IHJlYWRlci5SZWFkTm9uTnVsbGFibGVWYWx1ZUFzeW5jPERhdGVUaW1lT2Zmc2V0PihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgICAgICAuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFNhbXBsZVBlcnNvbihuYW1lLCBiaXJ0aERhdGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgVGFzazxvYmplY3Q+IFJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmMoU3RyZWFtIHN0cmVhbSwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgQ2FuY2VsbGF0aW9uVG9rZW4gY2FuY2VsbGF0aW9uVG9rZW4gPSBkZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZWFkIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgdmFsdWUgYnl0ZXMKLSAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IGF3YWl0IHN0cmVhbS5SZWFkSW50QXN5bmMoY2FuY2VsbGF0aW9uVG9rZW4pLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLQotICAgICAgICAgICAgaWYgKHZhbHVlTGVuZ3RoIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCQiVW5leHBlY3RlZCB2YWx1ZSBsZW5ndGg6IHt2YWx1ZUxlbmd0aH0iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlTGVuZ3RoID4gc3RyZWFtLkxlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oJCJOb3QgZW5vdWdoIHJlYWRhYmxlIGJ5dGVzOiB7dmFsdWVMZW5ndGh9IChleHBlY3RlZDoge3N0cmVhbS5MZW5ndGh9KSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgbmFtZSA9IChzdHJpbmcpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8c3RyaW5nPihzdHJlYW0sIGNhbmNlbGxhdGlvblRva2VuKQotICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICB2YXIgYmlydGhEYXRlID0KLSAgICAgICAgICAgICAgICAoRGF0ZVRpbWVPZmZzZXQpYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8RGF0ZVRpbWVPZmZzZXQ+KHN0cmVhbSwgY2FuY2VsbGF0aW9uVG9rZW4pCi0gICAgICAgICAgICAgICAgICAgIC5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgU2FtcGxlUGVyc29uKG5hbWUsIGJpcnRoRGF0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgb3ZlcnJpZGUgc3RyaW5nIFR5cGVOYW1lID0+ICJzYW1wbGVQcm92aWRlci5TYW1wbGVQZXJzb24iOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TYW1wbGUvU2FtcGxlUGVyc29uU2VyaWFsaXplclRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnkvVHlwZXMvU2FtcGxlL1NhbXBsZVBlcnNvblNlcmlhbGl6ZXJUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYwYzlhZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeS9UeXBlcy9TYW1wbGUvU2FtcGxlUGVyc29uU2VyaWFsaXplclRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5JTzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeS5UeXBlcy5TYW1wbGUKLXsKLSAgICBwdWJsaWMgY2xhc3MgU2FtcGxlUGVyc29uU2VyaWFsaXplclRlc3RzCi0gICAgewotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEN1c3RvbVNlcmlhbGl6YXRpb25XaXRoUGVyc29uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IFNhbXBsZVBlcnNvbigiT2xpdmlhIiwgbmV3IERhdGVUaW1lT2Zmc2V0KDIwMTAsIDQsIDI5LCA1LCAzMCwgMywgVGltZVNwYW4uRnJvbUhvdXJzKDEpKSk7Ci0gICAgICAgICAgICB2YXIgcmVnaXN0cnkgPSBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LkJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuQWRkQ3VzdG9tVHlwZSh0eXBlb2YoU2FtcGxlUGVyc29uKSwgbmV3IFNhbXBsZVBlcnNvblNlcmlhbGl6ZXIoKSkuQ3JlYXRlKCk7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIocmVnaXN0cnkpOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKHJlZ2lzdHJ5KTsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSAoU2FtcGxlUGVyc29uPykgYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgUmVhZE51bGxhYmxlVmFsdWVBbmRXcml0ZU51bGxhYmxlVmFsdWVTaG91bGRCZVN5bW1ldHJpYygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBTYW1wbGVQZXJzb24oIk9saXZpYSIsIG5ldyBEYXRlVGltZU9mZnNldCgyMDEwLCA0LCAyOSwgNSwgMzAsIDMsIFRpbWVTcGFuLkZyb21Ib3VycygxKSkpOwotICAgICAgICAgICAgdmFyIHJlZ2lzdHJ5ID0gVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZCgpCi0gICAgICAgICAgICAgICAgLkFkZEN1c3RvbVR5cGUodHlwZW9mKFNhbXBsZVBlcnNvbiksIG5ldyBTYW1wbGVQZXJzb25TZXJpYWxpemVyKCkpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKHJlZ2lzdHJ5KTsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcihyZWdpc3RyeSk7Ci0gICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKLQotICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTnVsbGFibGVWYWx1ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKS5Db25maWd1cmVBd2FpdChmYWxzZSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIHZhciBhY3R1YWwgPSAoU2FtcGxlUGVyc29uPylhd2FpdCByZWFkZXIuUmVhZE51bGxhYmxlVmFsdWVBc3luYzxTYW1wbGVQZXJzb24+KHNlcmlhbGl6YXRpb25TdHJlYW0pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFJlYWROb25OdWxsYWJsZVZhbHVlQW5kV3JpdGVOb25OdWxsYWJsZVZhbHVlU2hvdWxkQmVTeW1tZXRyaWMoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgU2FtcGxlUGVyc29uKCJPbGl2aWEiLCBuZXcgRGF0ZVRpbWVPZmZzZXQoMjAxMCwgNCwgMjksIDUsIDMwLCAzLCBUaW1lU3Bhbi5Gcm9tSG91cnMoMSkpKTsKLSAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuQnVpbGQoKQotICAgICAgICAgICAgICAgIC5BZGRDdXN0b21UeXBlKHR5cGVvZihTYW1wbGVQZXJzb24pLCBuZXcgU2FtcGxlUGVyc29uU2VyaWFsaXplcigpKS5DcmVhdGUoKTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcihyZWdpc3RyeSk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIocmVnaXN0cnkpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0KLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSkuQ29uZmlndXJlQXdhaXQoZmFsc2UpOwotICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICB2YXIgYWN0dWFsID0gKFNhbXBsZVBlcnNvbilhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxTYW1wbGVQZXJzb24+KHNlcmlhbGl6YXRpb25TdHJlYW0pCi0gICAgICAgICAgICAgICAgLkNvbmZpZ3VyZUF3YWl0KGZhbHNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFdyaXRlVGhyb3dzRXhjZXB0aW9uV2hlbk5vV3JpdGVySXNSZWdpc3RlcmVkRm9yQ3VzdG9tVHlwZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzYW1wbGUgPSBuZXcgU2FtcGxlUGVyc29uKCJPbGl2aWEiLCBuZXcgRGF0ZVRpbWVPZmZzZXQoMjAxMCwgNCwgMjksIDUsIDMwLCAzLCBUaW1lU3Bhbi5Gcm9tSG91cnMoMSkpKTsKLSAgICAgICAgICAgIHZhciByZWdpc3RyeVdpdGhvdXRUeXBlID0gVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZCgpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKHJlZ2lzdHJ5V2l0aG91dFR5cGUpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uPihhc3luYyAoKSA9PgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHNhbXBsZSwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBSZWFkVGhyb3dzRXhjZXB0aW9uV2hlbk5vUmVhZGVySXNSZWdpc3RlcmVkRm9yQ3VzdG9tVHlwZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzYW1wbGUgPSBuZXcgU2FtcGxlUGVyc29uKCJPbGl2aWEiLCBuZXcgRGF0ZVRpbWVPZmZzZXQoMjAxMCwgNCwgMjksIDUsIDMwLCAzLCBUaW1lU3Bhbi5Gcm9tSG91cnMoMSkpKTsKLSAgICAgICAgICAgIHZhciByZWdpc3RyeVdpdGhUeXBlID0gVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZCgpCi0gICAgICAgICAgICAgICAgLkFkZEN1c3RvbVR5cGUodHlwZW9mKFNhbXBsZVBlcnNvbiksIG5ldyBTYW1wbGVQZXJzb25TZXJpYWxpemVyKCkpLkNyZWF0ZSgpOwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKHJlZ2lzdHJ5V2l0aFR5cGUpOwotICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKHNhbXBsZSwgc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFyIHJlZ2lzdHJ5V2l0aG91dFR5cGUgPSBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LkJ1aWxkKCkuQ3JlYXRlKCk7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIocmVnaXN0cnlXaXRob3V0VHlwZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uPihhc3luYyAoKSA9PgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIEdyYXBoQmluYXJ5V3JpdGVyIENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgcmVnaXN0cnkpID0+Ci0gICAgICAgICAgICBuZXcgR3JhcGhCaW5hcnlXcml0ZXIocmVnaXN0cnkpOwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIEdyYXBoQmluYXJ5UmVhZGVyIENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgcmVnaXN0cnkpID0+Ci0gICAgICAgICAgICBuZXcgR3JhcGhCaW5hcnlSZWFkZXIocmVnaXN0cnkpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXJUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9HcmFwaEJpbmFyeTRNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzVjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXJUZXN0cy5jcwpAQCAtMCwwICsxLDgzIEBACivvu78jcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQ7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQKK3sKKyAgICBwdWJsaWMgY2xhc3MgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXJUZXN0cworICAgIHsKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFNob3VsZFNlcmlhbGl6ZVJlcXVlc3RNZXNzYWdlU3RhcnRpbmdXaXRoVmVyc2lvbkJ5dGUoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigpIikuQWRkRygiZyIpLkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOworCisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMobXNnKTsKKworICAgICAgICAgICAgLy8gRmlyc3QgYnl0ZSBzaG91bGQgYmUgdmVyc2lvbiBieXRlIDB4ODQg4oCUIG5vIE1JTUUgcHJlZml4CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoMHg4NCwgYWN0dWFsWzBdKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGROb3RJbmNsdWRlTWltZVByZWZpeEluU2VyaWFsaXplZE1lc3NhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigpIikuQWRkRygiZyIpLkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOworCisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlQXN5bmMobXNnKTsKKworICAgICAgICAgICAgLy8gVGhlIGZpcnN0IGJ5dGUgaXMgdGhlIHZlcnNpb24gYnl0ZSAoMHg4NCksIG5vdCBhIE1JTUUgbGVuZ3RoIGJ5dGUKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGFjdHVhbFswXSA+PiA3ID09IDEsICJGaXJzdCBieXRlIHNob3VsZCBoYXZlIE1TQiBzZXQgKHZlcnNpb24gYnl0ZSkiKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTZXJpYWxpemVNZXNzYWdlQXN5bmNTaG91bGRTdXBwb3J0Q2FuY2VsbGF0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOworCisgICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8VGFza0NhbmNlbGVkRXhjZXB0aW9uPihhc3luYyAoKSA9PgorICAgICAgICAgICAgICAgIGF3YWl0IHNlcmlhbGl6ZXIuU2VyaWFsaXplTWVzc2FnZUFzeW5jKFJlcXVlc3RNZXNzYWdlLkJ1aWxkKHN0cmluZy5FbXB0eSkuQ3JlYXRlKCksCisgICAgICAgICAgICAgICAgICAgIG5ldyBDYW5jZWxsYXRpb25Ub2tlbih0cnVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIERlc2VyaWFsaXplTWVzc2FnZUFzeW5jU2hvdWxkU3VwcG9ydENhbmNlbGxhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTWVzc2FnZVNlcmlhbGl6ZXIoKTsKKworICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPFRhc2tDYW5jZWxlZEV4Y2VwdGlvbj4oYXN5bmMgKCkgPT4KKyAgICAgICAgICAgICAgICBhd2FpdCBzZXJpYWxpemVyLkRlc2VyaWFsaXplTWVzc2FnZUFzeW5jKEFycmF5LkVtcHR5PGJ5dGU+KCksIG5ldyBDYW5jZWxsYXRpb25Ub2tlbih0cnVlKSkpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhCaW5hcnk0TWVzc2FnZVNlcmlhbGl6ZXIgQ3JlYXRlTWVzc2FnZVNlcmlhbGl6ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoQmluYXJ5NE1lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnk0VGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvR3JhcGhCaW5hcnk0VGVzdHMuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRkOGE5NQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9HcmFwaEJpbmFyeTRUZXN0cy5jcwpAQCAtMCwwICsxLDc5NCBAQAorI3JlZ2lvbiBMaWNlbnNlCisKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2VuZHJlZ2lvbgorCit1c2luZyBTeXN0ZW07Cit1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKK3VzaW5nIFN5c3RlbS5HbG9iYWxpemF0aW9uOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLk51bWVyaWNzOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKK3VzaW5nIFh1bml0OwordXNpbmcgUGF0aCA9IEdyZW1saW4uTmV0LlN0cnVjdHVyZS5QYXRoOworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NAoreworICAgIHB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeTRUZXN0cworICAgIHsKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3ROdWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhudWxsLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5OdWxsKGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RJbnQoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgZXhwZWN0ZWQgPSAxMDA7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorCisgICAgICAgIFtUaGVvcnldCisgICAgICAgIFtJbmxpbmVEYXRhKDEsIG5ldyBieXRlW117MHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0pXQorICAgICAgICBbSW5saW5lRGF0YSgyNTcsIG5ldyBieXRlW117MHgwMCwgMHgwMCwgMHgwMSwgMHgwMX0pXQorICAgICAgICBbSW5saW5lRGF0YSgtMSwgbmV3IGJ5dGVbXXsweEZGLCAweEZGLCAweEZGLCAweEZGfSldCisgICAgICAgIFtJbmxpbmVEYXRhKC0yLCBuZXcgYnl0ZVtdezB4RkYsIDB4RkYsIDB4RkYsIDB4RkV9KV0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEludFNwZWMoaW50IHZhbHVlLCBieXRlW10gZXhwZWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh2YWx1ZSwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisKKyAgICAgICAgICAgIHZhciBzZXJCeXRlcyA9IHNlcmlhbGl6YXRpb25TdHJlYW0uVG9BcnJheSgpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBzZXJCeXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0TG9uZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGxvbmcgZXhwZWN0ZWQgPSAxMDA7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW1RoZW9yeV0KKyAgICAgICAgW0lubGluZURhdGEoMTAwLjAxZildCisgICAgICAgIFtJbmxpbmVEYXRhKGZsb2F0Lk5hTildCisgICAgICAgIFtJbmxpbmVEYXRhKGZsb2F0Lk5lZ2F0aXZlSW5maW5pdHkpXQorICAgICAgICBbSW5saW5lRGF0YShmbG9hdC5Qb3NpdGl2ZUluZmluaXR5KV0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEZsb2F0KGZsb2F0IGV4cGVjdGVkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3REb3VibGUoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgZXhwZWN0ZWQgPSAxMDAuMDAxOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0U2hvcnQoKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBzaG9ydCBleHBlY3RlZCA9IDEwMDsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdERhdGVUaW1lKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gRGF0ZVRpbWVPZmZzZXQuUGFyc2VFeGFjdCgiMjAxNi0xMi0xNCAxNjoxNDozNi4yOTUwMDAiLCAieXl5eS1NTS1kZCBISDptbTpzcy5mZmZmZmYiLAorICAgICAgICAgICAgICAgIEN1bHR1cmVJbmZvLkludmFyaWFudEN1bHR1cmUpOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdERhdGVUaW1lV2l0aE5vblV0Y09mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIDIwMDctMTItMDNUMTA6MTU6MzArMDE6MDAg4oCUIHRoZSBleGFtcGxlIGZyb20gdGhlIHNwZWMKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBEYXRlVGltZU9mZnNldCgyMDA3LCAxMiwgMywgMTAsIDE1LCAzMCwgVGltZVNwYW4uRnJvbUhvdXJzKDEpKTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3REYXRlVGltZVdpdGhOZWdhdGl2ZU9mZnNldCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBEYXRlVGltZU9mZnNldCgyMDI0LCA2LCAxNSwgOCwgMzAsIDAsIFRpbWVTcGFuLkZyb21Ib3VycygtNSkpOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdE1hcmtlckVuZE9mU3RyZWFtKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gTWFya2VyLkVuZE9mU3RyZWFtOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdE1hcmtlckVuZE9mU3RyZWFtU3BlYygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKE1hcmtlci5FbmRPZlN0cmVhbSwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgYnl0ZVtdIHsgMHhGRCwgMHgwMCwgMHgwMCB9LCBzZXJpYWxpemF0aW9uU3RyZWFtLlRvQXJyYXkoKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFN0cmluZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9ICJzZXJpYWxpemUgdGhpcyEiOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtUaGVvcnldCisgICAgICAgIFtJbmxpbmVEYXRhKCJzZXJpYWxpemUgdGhpcyEiLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiKV0KKyAgICAgICAgW0lubGluZURhdGEoMSwgMiwgMywgNCwgNSldCisgICAgICAgIFtJbmxpbmVEYXRhKDAuMSwgMS4xLCAyLjUsIGRvdWJsZS5OYU4pXQorICAgICAgICBbSW5saW5lRGF0YSgwLjFmLCAxLjFmLCAyLjVmLCBmbG9hdC5OYU4pXQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0SG9tb2dlbmVvdXNMaXN0KHBhcmFtcyBvYmplY3RbXSBsaXN0TWVtYmVycykKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IExpc3Q8b2JqZWN0PihsaXN0TWVtYmVycyk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIb21vZ2VuZW91c1R5cGVTYWZlTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBMaXN0PHN0cmluZz4geyJ0ZXN0IiwgIjEyMyJ9OworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0SGV0ZXJvZ2VuZW91c0xpc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgTGlzdDxvYmplY3Q+CisgICAgICAgICAgICAgICAgeyJzZXJpYWxpemUgdGhpcyEiLCAwLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsIDEsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiLCAyfTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gVGVzdHMgdGhlIGJ1bGtlZCBsaXN0IGZvcm1hdCAodmFsdWVfZmxhZz0weDAyKSB3aGVyZSBlYWNoIGl0ZW0gaXMgZm9sbG93ZWQgYnkgYSBMb25nIGJ1bGsgY291bnQuCisgICAgICAgIC8vLyBUaGUgd3JpdGVyIGRvZXNuJ3QgcHJvZHVjZSB0aGlzIGZvcm1hdCwgc28gd2UgY29uc3RydWN0IHRoZSBieXRlcyBtYW51YWxseSB0byB0ZXN0IHRoZSByZWFkZXIuCisgICAgICAgIC8vLyA8L3N1bW1hcnk+CisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0QnVsa2VkTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE1hbnVhbGx5IGNvbnN0cnVjdDogdHlwZT1MaXN0KDB4MTIpLCB2YWx1ZV9mbGFnPTB4MDIgKGJ1bGtlZCksIGNvdW50PTIgaXRlbXMKKyAgICAgICAgICAgIC8vIGl0ZW0gMTogU3RyaW5nICJhIiwgYnVsaz0yICDihpIgIFsiYSIsICJhIl0KKyAgICAgICAgICAgIC8vIGl0ZW0gMjogU3RyaW5nICJiIiwgYnVsaz0xICDihpIgIFsiYiJdCisgICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICAvLyB0eXBlIGNvZGUgKyBidWxrZWQgZmxhZworICAgICAgICAgICAgc3RyZWFtLldyaXRlQnl0ZShEYXRhVHlwZS5MaXN0LlR5cGVDb2RlKTsKKyAgICAgICAgICAgIHN0cmVhbS5Xcml0ZUJ5dGUoMHgwMik7IC8vIFZhbHVlRmxhZ0J1bGsKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYygyLCBzdHJlYW0pOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoImEiLCBzdHJlYW0pOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKDJMLCBzdHJlYW0pOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoImIiLCBzdHJlYW0pOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlTm9uTnVsbGFibGVWYWx1ZUFzeW5jKDFMLCBzdHJlYW0pOworCisgICAgICAgICAgICBzdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gKExpc3Q8b2JqZWN0Pz4pIGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc3RyZWFtKTsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBMaXN0PG9iamVjdD8+IHsgImEiLCAiYSIsICJiIiB9LCBhY3R1YWwpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RBcnJheSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBzdHJpbmdbXSB7ImhhbGxvIiwgIndlbHQifTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbVGhlb3J5XQorICAgICAgICBbSW5saW5lRGF0YSgic2VyaWFsaXplIHRoaXMhIiwgInNlcmlhbGl6ZSB0aGF0ISIsICJzZXJpYWxpemUgdGhhdCEiLCAic3RvcCB0ZWxsaW5nIG1lIHdoYXQgdG8gc2VyaWFsaXplIildCisgICAgICAgIFtJbmxpbmVEYXRhKDEsIDIsIDMsIDQsIDUpXQorICAgICAgICBbSW5saW5lRGF0YSgwLjEsIDEuMSwgMi41LCBkb3VibGUuTmFOKV0KKyAgICAgICAgW0lubGluZURhdGEoMC4xZiwgMS4xZiwgMi41ZiwgZmxvYXQuTmFOKV0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEhvbW9nZW5lb3VzU2V0KHBhcmFtcyBvYmplY3RbXSBsaXN0TWVtYmVycykKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IEhhc2hTZXQ8b2JqZWN0PihsaXN0TWVtYmVycyk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIb21vZ2VuZW91c1R5cGVTYWZlU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IEhhc2hTZXQ8c3RyaW5nPiB7InRlc3QiLCAiMTIzIn07CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZE5vbk51bGxhYmxlVmFsdWVBc3luYzxIYXNoU2V0PHN0cmluZz4+KHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQuR2V0VHlwZSgpLCBhY3R1YWwuR2V0VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIZXRlcm9nZW5lb3VzU2V0KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IEhhc2hTZXQ8b2JqZWN0PgorICAgICAgICAgICAgICAgIHsic2VyaWFsaXplIHRoaXMhIiwgMCwgInNlcmlhbGl6ZSB0aGF0ISIsICJzZXJpYWxpemUgdGhhdCEiLCAxLCAic3RvcCB0ZWxsaW5nIG1lIHdoYXQgdG8gc2VyaWFsaXplIiwgMn07CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RGljdGlvbmFyeSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsieW8iLCAid2hhdCJ9LAorICAgICAgICAgICAgICAgIHsiZ28iLCAibm8hIn0sCisgICAgICAgICAgICAgICAgeyJudW1iZXIiLCAxMjN9LAorICAgICAgICAgICAgICAgIHszMjEsICJjcmF6eSB3aXRoIHRoZSBudW1iZXIgZm9yIGEga2V5In0sCisgICAgICAgICAgICAgICAgezk4NywgbmV3IExpc3Q8b2JqZWN0PiB7ImdvIiwgImRlZXAiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3siaGVyZSIsICIhIn19fX0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RIb21vZ2VuZW91c1R5cGVTYWZlRGljdGlvbmFyeSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgaW50PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsibnVtYmVyIiwgMTIzfSwKKyAgICAgICAgICAgICAgICB7ImFuZCIsIDQ1Nn0sCisgICAgICAgICAgICAgICAgeyJub3RoaW5nIGVsc2UiLCA3ODl9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0SG9tb2dlbmVvdXNUeXBlU2FmZURpY3Rpb25hcnlXaXRoQ29ycmVjdFR5cGluZygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgaW50PgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHsibnVtYmVyIiwgMTIzfSwKKyAgICAgICAgICAgICAgICB7ImFuZCIsIDQ1Nn0sCisgICAgICAgICAgICAgICAgeyJub3RoaW5nIGVsc2UiLCA3ODl9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWROb25OdWxsYWJsZVZhbHVlQXN5bmM8RGljdGlvbmFyeTxzdHJpbmcsIGludD4+KHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQuR2V0VHlwZSgpLCBhY3R1YWwuR2V0VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RHdWlkKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gR3VpZC5QYXJzZSgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2Iik7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0R3VpZFNlcmlhbGl6YXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgdG9TZXJpYWxpemUgPSBHdWlkLlBhcnNlKCIwMDExMjIzMy00NDU1LTY2NzctODg5OS1hYWJiY2NkZGVlZmYiKTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyh0b1NlcmlhbGl6ZSwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IG5ldyBieXRlW10KKyAgICAgICAgICAgICAgICB7MHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZn07CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0uVG9BcnJheSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0VmVydGV4KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IFZlcnRleCgxMjMsICJwZXJzb24iKTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgV3JpdGVOb25OdWxsYWJsZVZhbHVlU2hvdWxkVGhyb3dGb3JOdWxsVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8SU9FeGNlcHRpb24+KCgpID0+IHdyaXRlci5Xcml0ZU5vbk51bGxhYmxlVmFsdWVBc3luYyhudWxsISwgc2VyaWFsaXphdGlvblN0cmVhbSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdEVkZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgRWRnZSgxMjMsIG5ldyBWZXJ0ZXgoMSwgInBlcnNvbiIpLCAiZGV2ZWxvcGVkIiwgbmV3IFZlcnRleCgxMCwgInNvZnR3YXJlIikpOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFBhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPQorICAgICAgICAgICAgICAgIG5ldyBQYXRoKAorICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdDxJU2V0PHN0cmluZz4+CisgICAgICAgICAgICAgICAgICAgICAgICB7bmV3IEhhc2hTZXQ8c3RyaW5nPiB7ImEiLCAiYiJ9LCBuZXcgSGFzaFNldDxzdHJpbmc+IHsiYyIsICJkIn0sIG5ldyBIYXNoU2V0PHN0cmluZz4geyJlIn19LAorICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdDxvYmplY3Q/PiB7MSwgMiwgM30pOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFByb3BlcnR5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IFByb3BlcnR5KCJuYW1lIiwgInN0ZXBoZW4iLCBudWxsKTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFZlcnRleFByb3BlcnR5KCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gbmV3IFZlcnRleFByb3BlcnR5KDEyMywgIm5hbWUiLCAic3RlcGhlbiIsIG51bGwpOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RGlyZWN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gRGlyZWN0aW9uLk91dDsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RNZXJnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IE1lcmdlLk9uQ3JlYXRlOworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0VCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFQuTGFiZWw7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW1RoZW9yeV0KKyAgICAgICAgW0lubGluZURhdGEoMSldCisgICAgICAgIFtJbmxpbmVEYXRhKDEyMyldCisgICAgICAgIFtJbmxpbmVEYXRhKC0xKV0KKyAgICAgICAgW0lubGluZURhdGEoLTEyOCldCisgICAgICAgIFtJbmxpbmVEYXRhKDEyNyldCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RTQnl0ZShzYnl0ZSBleHBlY3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtUaGVvcnldCisgICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSkwLCBuZXcgYnl0ZVtdIHsgMHgwMCB9KV0KKyAgICAgICAgW0lubGluZURhdGEoKHNieXRlKTEsIG5ldyBieXRlW10geyAweDAxIH0pXQorICAgICAgICBbSW5saW5lRGF0YSgoc2J5dGUpMTI3LCBuZXcgYnl0ZVtdIHsgMHg3RiB9KV0KKyAgICAgICAgW0lubGluZURhdGEoKHNieXRlKS0xLCBuZXcgYnl0ZVtdIHsgMHhGRiB9KV0KKyAgICAgICAgW0lubGluZURhdGEoKHNieXRlKS0xMjgsIG5ldyBieXRlW10geyAweDgwIH0pXQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0U0J5dGVTZXJpYWxpemF0aW9uU3BlYyhzYnl0ZSB2YWx1ZSwgYnl0ZVtdIGV4cGVjdGVkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVOb25OdWxsYWJsZVZhbHVlQXN5bmModmFsdWUsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworCisgICAgICAgICAgICB2YXIgc2VyQnl0ZXMgPSBzZXJpYWxpemF0aW9uU3RyZWFtLlRvQXJyYXkoKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgc2VyQnl0ZXMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbVGhlb3J5XQorICAgICAgICBbSW5saW5lRGF0YSgoc2J5dGUpMCldCisgICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSkxKV0KKyAgICAgICAgW0lubGluZURhdGEoKHNieXRlKTEyNyldCisgICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSktMSldCisgICAgICAgIFtJbmxpbmVEYXRhKChzYnl0ZSktMTI4KV0KKyAgICAgICAgW0lubGluZURhdGEoKHNieXRlKTQyKV0KKyAgICAgICAgW0lubGluZURhdGEoKHNieXRlKS00MildCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RTQnl0ZVJvdW5kVHJpcChzYnl0ZSBleHBlY3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgICAgICBBc3NlcnQuSXNUeXBlPHNieXRlPihhY3R1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdFNCeXRlTWluTWF4VmFsdWVzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGVzdCBtaW5pbXVtIHZhbHVlCisgICAgICAgICAgICB2YXIgbWluU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoc2J5dGUuTWluVmFsdWUsIG1pblN0cmVhbSk7CisgICAgICAgICAgICBtaW5TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbE1pbiA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMobWluU3RyZWFtKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChzYnl0ZS5NaW5WYWx1ZSwgYWN0dWFsTWluKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVGVzdCBtYXhpbXVtIHZhbHVlCisgICAgICAgICAgICB2YXIgbWF4U3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoc2J5dGUuTWF4VmFsdWUsIG1heFN0cmVhbSk7CisgICAgICAgICAgICBtYXhTdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbE1heCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMobWF4U3RyZWFtKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChzYnl0ZS5NYXhWYWx1ZSwgYWN0dWFsTWF4KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RCaW5hcnkoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgYnl0ZVtdIHsxLCAyLCAzfTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVdyaXRlcigpOworICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXphdGlvblN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXdhaXQgd3JpdGVyLldyaXRlQXN5bmMoZXhwZWN0ZWQsIHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgc2VyaWFsaXphdGlvblN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgYWN0dWFsID0gYXdhaXQgcmVhZGVyLlJlYWRBc3luYyhzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBhY3R1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbVGhlb3J5XQorICAgICAgICBbSW5saW5lRGF0YSh0cnVlKV0KKyAgICAgICAgW0lubGluZURhdGEoZmFsc2UpXQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0Qm9vbGVhbihib29sIGV4cGVjdGVkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW1RoZW9yeV0KKyAgICAgICAgW0lubGluZURhdGEoJ2EnKV0KKyAgICAgICAgW0lubGluZURhdGEoJzAnKV0KKyAgICAgICAgW0lubGluZURhdGEoJ8KiJyldCisgICAgICAgIFtJbmxpbmVEYXRhKCfigqwnKV0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgVGVzdENoYXIoY2hhciBleHBlY3RlZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemF0aW9uU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhd2FpdCB3cml0ZXIuV3JpdGVBc3luYyhleHBlY3RlZCwgc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICBzZXJpYWxpemF0aW9uU3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciBhY3R1YWwgPSBhd2FpdCByZWFkZXIuUmVhZEFzeW5jKHNlcmlhbGl6YXRpb25TdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0RHVyYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBuZXcgVGltZVNwYW4oMSwgMiwgMywgNCwgNSk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBhc3luYyBUYXNrIFRlc3RCaWdJbnRlZ2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gQmlnSW50ZWdlci5QYXJzZSgiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIik7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW1RoZW9yeV0KKyAgICAgICAgW0lubGluZURhdGEoIjE5MC4wMzUiKV0KKyAgICAgICAgW0lubGluZURhdGEoIjAuMTkiKV0KKyAgICAgICAgW0lubGluZURhdGEoIjE5MDAiKV0KKyAgICAgICAgW0lubGluZURhdGEoIi0xOTAwIildCisgICAgICAgIFtJbmxpbmVEYXRhKCIxMDAwMDAwMDAwMDAwMDAiKV0KKyAgICAgICAgW0lubGluZURhdGEoIjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIpXQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBUZXN0QmlnRGVjaW1hbChzdHJpbmcgZGVjaW1hbFZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBEZWNpbWFsLlBhcnNlKGRlY2ltYWxWYWx1ZSk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6YXRpb25TdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF3YWl0IHdyaXRlci5Xcml0ZUFzeW5jKGV4cGVjdGVkLCBzZXJpYWxpemF0aW9uU3RyZWFtKTsKKyAgICAgICAgICAgIHNlcmlhbGl6YXRpb25TdHJlYW0uUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdmFyIGFjdHVhbCA9IGF3YWl0IHJlYWRlci5SZWFkQXN5bmMoc2VyaWFsaXphdGlvblN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgYWN0dWFsKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhCaW5hcnlXcml0ZXIgQ3JlYXRlR3JhcGhCaW5hcnlXcml0ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc3RhdGljIEdyYXBoQmluYXJ5UmVhZGVyIENyZWF0ZUdyYXBoQmluYXJ5UmVhZGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaEJpbmFyeVJlYWRlcigpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9Nb2RlbC5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9Nb2RlbC5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzQ5ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L01vZGVsLmNzCkBAIC0wLDAgKzEsMjEwIEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbTsKK3VzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwordXNpbmcgU3lzdGVtLk51bWVyaWNzOwordXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWw7Cit1c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmU7CisKK25hbWVzcGFjZSBHcmVtbGluLk5ldC5Vbml0VGVzdC5TdHJ1Y3R1cmUuSU8uR3JhcGhCaW5hcnk0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBEZWZpbmVzIHRoZSBzdXBwb3J0ZWQgdHlwZXMgZm9yIEdyYXBoQmluYXJ5IDQuMCBJTyBhbmQgcHJvdmlkZXMgdGVzdCBlbnRyaWVzIGZvciByb3VuZC10cmlwIHRlc3RpbmcuCisgICAgLy8vIAorICAgIC8vLyBUaGUgZm9sbG93aW5nIG1vZGVscyBhcmVuJ3Qgc3VwcG9ydGVkOgorICAgIC8vLyB0aW5rZXItZ3JhcGggICAgICAgICAgICAgIEdyYXBoIHR5cGUgbm90IGltcGxlbWVudGVkCisgICAgLy8vIHRyYXZlcnNhbC10cmVlICAgICAgICAgICAgVHJlZSB0eXBlIG5vdCBpbXBsZW1lbnRlZCAgCisgICAgLy8vIG1heC1vZmZzZXRkYXRldGltZSAgICAgICAgRGF0ZVRpbWVPZmZzZXQuTWF4VmFsdWUgZXhjZWVkcyBzZXJpYWxpemF0aW9uIHJhbmdlCisgICAgLy8vIG1pbi1vZmZzZXRkYXRldGltZSAgICAgICAgRGF0ZVRpbWVPZmZzZXQuTWluVmFsdWUgZXhjZWVkcyBzZXJpYWxpemF0aW9uIHJhbmdlCisgICAgLy8vIGZvcmV2ZXItZHVyYXRpb24gICAgICAgICAgVGltZVNwYW4gY2Fubm90IHJlcHJlc2VudCBEdXJhdGlvbi5GT1JFVkVSCisgICAgLy8vIHBvcy1iaWdkZWNpbWFsICAgICAgICAgICAgSmF2YSBCaWdEZWNpbWFsIHByZWNpc2lvbiAoMzMgZGlnaXRzKSBleGNlZWRzIEMjIGRlY2ltYWwgKDI4LTI5IGRpZ2l0cykKKyAgICAvLy8gbmVnLWJpZ2RlY2ltYWwgICAgICAgICAgICBKYXZhIEJpZ0RlY2ltYWwgcHJlY2lzaW9uICgzMyBkaWdpdHMpIGV4Y2VlZHMgQyMgZGVjaW1hbCAoMjgtMjkgZGlnaXRzKQorICAgIC8vLyB2YXItdHlwZS1tYXAgICAgICAgICAgICAgIERpY3Rpb25hcnkgZG9lc24ndCBzdXBwb3J0IG51bGwga2V5CisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE1vZGVsCisgICAgeworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQcm9wZXJ0eSBTaW5jZVByb3BlcnR5ID0gbmV3KCJzaW5jZSIsIDIwMDksIG51bGwpOworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQcm9wZXJ0eSBTdGFydFRpbWUyMDA1ID0gbmV3KCJzdGFydFRpbWUiLCAyMDA1LCBudWxsKTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUHJvcGVydHkgRW5kVGltZTIwMDUgPSBuZXcoImVuZFRpbWUiLCAyMDA1LCBudWxsKTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUHJvcGVydHkgU3RhcnRUaW1lMjAwMSA9IG5ldygic3RhcnRUaW1lIiwgMjAwMSwgbnVsbCk7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFByb3BlcnR5IEVuZFRpbWUyMDA0ID0gbmV3KCJlbmRUaW1lIiwgMjAwNCwgbnVsbCk7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFByb3BlcnR5IFN0YXJ0VGltZTE5OTcgPSBuZXcoInN0YXJ0VGltZSIsIDE5OTcsIG51bGwpOworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQcm9wZXJ0eSBFbmRUaW1lMjAwMSA9IG5ldygiZW5kVGltZSIsIDIwMDEsIG51bGwpOworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBQcm9wZXJ0eSBQcm9wZXJ0eUFCID0gbmV3KCJhIiwgImIiLCBudWxsKTsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFZlcnRleFByb3BlcnR5IFNhbnRhRmUgPSBuZXcoOSwgImxvY2F0aW9uIiwgInNhbnRhIGZlIiwgbnVsbCwgCisgICAgICAgICAgICBuZXcgZHluYW1pY1tdIHsgbmV3IFByb3BlcnR5KCJzdGFydFRpbWUiLCAyMDA1LCBudWxsKSB9KTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVmVydGV4UHJvcGVydHkgQnJ1c3NlbHMgPSBuZXcoOCwgImxvY2F0aW9uIiwgImJydXNzZWxzIiwgbnVsbCwKKyAgICAgICAgICAgIG5ldyBkeW5hbWljW10geyBTdGFydFRpbWUyMDA1LCBFbmRUaW1lMjAwNSB9KTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVmVydGV4UHJvcGVydHkgU2FudGFDcnV6ID0gbmV3KDcsICJsb2NhdGlvbiIsICJzYW50YSBjcnV6IiwgbnVsbCwKKyAgICAgICAgICAgIG5ldyBkeW5hbWljW10geyBTdGFydFRpbWUyMDAxLCBFbmRUaW1lMjAwNCB9KTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVmVydGV4UHJvcGVydHkgU2FuRGllZ28gPSBuZXcoNiwgImxvY2F0aW9uIiwgInNhbiBkaWVnbyIsIG51bGwsCisgICAgICAgICAgICBuZXcgZHluYW1pY1tdIHsgU3RhcnRUaW1lMTk5NywgRW5kVGltZTIwMDEgfSk7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFZlcnRleFByb3BlcnR5IE5hbWVNYXJrbyA9IG5ldygwLCAibmFtZSIsICJtYXJrbyIsIG51bGwpOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD8+IEVudHJpZXMgeyBnZXQ7IH0gPSBuZXcoKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBCaWdJbnRlZ2VyCisgICAgICAgICAgICBbInBvcy1iaWdpbnRlZ2VyIl0gPSBCaWdJbnRlZ2VyLlBhcnNlKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKSwKKyAgICAgICAgICAgIFsibmVnLWJpZ2ludGVnZXIiXSA9IEJpZ0ludGVnZXIuUGFyc2UoIi0xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQnl0ZSAoc2J5dGUgaW4gQyMpCisgICAgICAgICAgICBbIm1pbi1ieXRlIl0gPSBzYnl0ZS5NaW5WYWx1ZSwgIC8vIC0xMjgKKyAgICAgICAgICAgIFsibWF4LWJ5dGUiXSA9IHNieXRlLk1heFZhbHVlLCAgLy8gMTI3CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEJpbmFyeSAoYnl0ZVtdKQorICAgICAgICAgICAgWyJlbXB0eS1iaW5hcnkiXSA9IEFycmF5LkVtcHR5PGJ5dGU+KCksCisgICAgICAgICAgICBbInN0ci1iaW5hcnkiXSA9IFN5c3RlbS5UZXh0LkVuY29kaW5nLlVURjguR2V0Qnl0ZXMoInNvbWUgYnl0ZXMgZm9yIHlvdSIpLAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEb3VibGUKKyAgICAgICAgICAgIFsibWF4LWRvdWJsZSJdID0gZG91YmxlLk1heFZhbHVlLAorICAgICAgICAgICAgWyJtaW4tZG91YmxlIl0gPSBkb3VibGUuRXBzaWxvbiwKKyAgICAgICAgICAgIFsibmVnLW1heC1kb3VibGUiXSA9IC1kb3VibGUuTWF4VmFsdWUsCisgICAgICAgICAgICBbIm5lZy1taW4tZG91YmxlIl0gPSAtZG91YmxlLkVwc2lsb24sCisgICAgICAgICAgICBbIm5hbi1kb3VibGUiXSA9IGRvdWJsZS5OYU4sCisgICAgICAgICAgICBbInBvcy1pbmYtZG91YmxlIl0gPSBkb3VibGUuUG9zaXRpdmVJbmZpbml0eSwKKyAgICAgICAgICAgIFsibmVnLWluZi1kb3VibGUiXSA9IGRvdWJsZS5OZWdhdGl2ZUluZmluaXR5LAorICAgICAgICAgICAgWyJuZWctemVyby1kb3VibGUiXSA9IC0wLjAsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZsb2F0CisgICAgICAgICAgICAvLyBOb3RlOiBKYXZhJ3MgRmxvYXQuTUlOX1ZBTFVFIGlzIHRoZSBzbWFsbGVzdCBwb3NpdGl2ZSBmbG9hdCAoZXF1aXZhbGVudCB0byBDIydzIGZsb2F0LkVwc2lsb24pLAorICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IG5lZ2F0aXZlIGZsb2F0LgorICAgICAgICAgICAgWyJtYXgtZmxvYXQiXSA9IGZsb2F0Lk1heFZhbHVlLAorICAgICAgICAgICAgWyJtaW4tZmxvYXQiXSA9IGZsb2F0LkVwc2lsb24sICAgICAgIC8vIEphdmEgRmxvYXQuTUlOX1ZBTFVFID0gc21hbGxlc3QgcG9zaXRpdmUgZmxvYXQKKyAgICAgICAgICAgIFsibmVnLW1heC1mbG9hdCJdID0gLWZsb2F0Lk1heFZhbHVlLAorICAgICAgICAgICAgWyJuZWctbWluLWZsb2F0Il0gPSAtZmxvYXQuRXBzaWxvbiwgIC8vIG5lZ2F0ZWQgSmF2YSBGbG9hdC5NSU5fVkFMVUUKKyAgICAgICAgICAgIFsibmFuLWZsb2F0Il0gPSBmbG9hdC5OYU4sCisgICAgICAgICAgICBbInBvcy1pbmYtZmxvYXQiXSA9IGZsb2F0LlBvc2l0aXZlSW5maW5pdHksCisgICAgICAgICAgICBbIm5lZy1pbmYtZmxvYXQiXSA9IGZsb2F0Lk5lZ2F0aXZlSW5maW5pdHksCisgICAgICAgICAgICBbIm5lZy16ZXJvLWZsb2F0Il0gPSAtMC4wZiwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ2hhcgorICAgICAgICAgICAgWyJzaW5nbGUtYnl0ZS1jaGFyIl0gPSAnYScsCisgICAgICAgICAgICBbIm11bHRpLWJ5dGUtY2hhciJdID0gJ1x1MDNBOScsICAvLyBHcmVlayBjYXBpdGFsIGxldHRlciBPbWVnYQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBOdWxsCisgICAgICAgICAgICBbInVuc3BlY2lmaWVkLW51bGwiXSA9IG51bGwsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEJvb2xlYW4KKyAgICAgICAgICAgIFsidHJ1ZS1ib29sZWFuIl0gPSB0cnVlLAorICAgICAgICAgICAgWyJmYWxzZS1ib29sZWFuIl0gPSBmYWxzZSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU3RyaW5nCisgICAgICAgICAgICBbInNpbmdsZS1ieXRlLXN0cmluZyJdID0gImFiYyIsCisgICAgICAgICAgICBbIm1peGVkLXN0cmluZyJdID0gImFiY1x1MDM5MVx1MDM5Mlx1MDM5MyIsICAvLyBhYmMgKyBHcmVlayBsZXR0ZXJzIEFscGhhLCBCZXRhLCBHYW1tYQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCdWxrU2V0IChyZXByZXNlbnRlZCBhcyBMaXN0IHdpdGggZHVwbGljYXRlcykKKyAgICAgICAgICAgIFsidmFyLWJ1bGtsaXN0Il0gPSBuZXcgTGlzdDxvYmplY3Q/PiB7ICJtYXJrbyIsICJqb3NoIiwgImpvc2giIH0sCisgICAgICAgICAgICBbImVtcHR5LWJ1bGtsaXN0Il0gPSBuZXcgTGlzdDxvYmplY3Q/PigpLAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEdXJhdGlvbiAoVGltZVNwYW4pCisgICAgICAgICAgICBbInplcm8tZHVyYXRpb24iXSA9IFRpbWVTcGFuLlplcm8sCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEVkZ2UKKyAgICAgICAgICAgIFsidHJhdmVyc2FsLWVkZ2UiXSA9IG5ldyBFZGdlKDEzLCBuZXcgVmVydGV4KDEsICJwZXJzb24iKSwgImRldmVsb3BzIiwgbmV3IFZlcnRleCgxMCwgInNvZnR3YXJlIiksCisgICAgICAgICAgICAgICAgbmV3IGR5bmFtaWNbXSB7IFNpbmNlUHJvcGVydHkgfSksCisgICAgICAgICAgICBbIm5vLXByb3AtZWRnZSJdID0gbmV3IEVkZ2UoMTMsIG5ldyBWZXJ0ZXgoMSwgInBlcnNvbiIpLCAiZGV2ZWxvcHMiLCBuZXcgVmVydGV4KDEwLCAic29mdHdhcmUiKSksCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEludAorICAgICAgICAgICAgWyJtYXgtaW50Il0gPSBpbnQuTWF4VmFsdWUsCisgICAgICAgICAgICBbIm1pbi1pbnQiXSA9IGludC5NaW5WYWx1ZSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTG9uZworICAgICAgICAgICAgWyJtYXgtbG9uZyJdID0gbG9uZy5NYXhWYWx1ZSwKKyAgICAgICAgICAgIFsibWluLWxvbmciXSA9IGxvbmcuTWluVmFsdWUsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIExpc3QKKyAgICAgICAgICAgIFsidmFyLXR5cGUtbGlzdCJdID0gbmV3IExpc3Q8b2JqZWN0Pz4geyAxLCAicGVyc29uIiwgdHJ1ZSwgbnVsbCB9LAorICAgICAgICAgICAgWyJlbXB0eS1saXN0Il0gPSBuZXcgTGlzdDxvYmplY3Q/PigpLAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBNYXAKKyAgICAgICAgICAgIFsidmFyLXR5cGUtbWFwIl0gPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD8+CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgeyAidGVzdCIsIDEyMyB9LAorICAgICAgICAgICAgICAgIHsgRGF0ZVRpbWVPZmZzZXQuRnJvbVVuaXhUaW1lTWlsbGlzZWNvbmRzKDE0ODEyOTUpLCAicmVkIiB9LAorICAgICAgICAgICAgICAgIHsgbmV3IExpc3Q8b2JqZWN0Pz4geyAxLCAyLCAzIH0sIERhdGVUaW1lT2Zmc2V0LkZyb21Vbml4VGltZU1pbGxpc2Vjb25kcygxNDgxMjk1KSB9LAorICAgICAgICAgICAgICAgIC8vIE5vdGU6IG51bGwga2V5IG5vdCBzdXBwb3J0ZWQgaW4gQyMgRGljdGlvbmFyeQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsiZW1wdHktbWFwIl0gPSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD8+KCksCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFBhdGgKKyAgICAgICAgICAgIFsidHJhdmVyc2FsLXBhdGgiXSA9IG5ldyBQYXRoKAorICAgICAgICAgICAgICAgIG5ldyBMaXN0PElTZXQ8c3RyaW5nPj4geyBuZXcgSGFzaFNldDxzdHJpbmc+KCksIG5ldyBIYXNoU2V0PHN0cmluZz4oKSwgbmV3IEhhc2hTZXQ8c3RyaW5nPigpIH0sCisgICAgICAgICAgICAgICAgbmV3IExpc3Q8b2JqZWN0Pz4geyBuZXcgVmVydGV4KDEsICJwZXJzb24iKSwgbmV3IFZlcnRleCgxMCwgInNvZnR3YXJlIiksIG5ldyBWZXJ0ZXgoMTEsICJzb2Z0d2FyZSIpIH0pLAorICAgICAgICAgICAgWyJlbXB0eS1wYXRoIl0gPSBuZXcgUGF0aChuZXcgTGlzdDxJU2V0PHN0cmluZz4+KCksIG5ldyBMaXN0PG9iamVjdD8+KCkpLAorICAgICAgICAgICAgWyJwcm9wLXBhdGgiXSA9IG5ldyBQYXRoKAorICAgICAgICAgICAgICAgIG5ldyBMaXN0PElTZXQ8c3RyaW5nPj4geyBuZXcgSGFzaFNldDxzdHJpbmc+KCksIG5ldyBIYXNoU2V0PHN0cmluZz4oKSwgbmV3IEhhc2hTZXQ8c3RyaW5nPigpIH0sCisgICAgICAgICAgICAgICAgbmV3IExpc3Q8b2JqZWN0Pz4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5ldyBWZXJ0ZXgoMSwgInBlcnNvbiIsIG5ldyBkeW5hbWljW10KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZlcnRleFByb3BlcnR5KDEyMywgIm5hbWUiLCAic3RlcGhlbiIsIG51bGwsIG5ldyBkeW5hbWljW10KKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVydGV4UHJvcGVydHkoMCwgIm5hbWUiLCAibWFya28iLCBudWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVydGV4UHJvcGVydHkoNiwgImxvY2F0aW9uIiwgbmV3IExpc3Q8b2JqZWN0Pz4oKSwgbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgICAgICAgICBuZXcgVmVydGV4KDEwLCAic29mdHdhcmUiKSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFZlcnRleCgxMSwgInNvZnR3YXJlIikKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvcGVydHkKKyAgICAgICAgICAgIFsiZWRnZS1wcm9wZXJ0eSJdID0gbmV3IFByb3BlcnR5KCJzaW5jZSIsIDIwMDksIG51bGwpLAorICAgICAgICAgICAgWyJudWxsLXByb3BlcnR5Il0gPSBuZXcgUHJvcGVydHkoIiIsIG51bGwsIG51bGwpLAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZXQKKyAgICAgICAgICAgIFsidmFyLXR5cGUtc2V0Il0gPSBuZXcgSGFzaFNldDxvYmplY3Q/PiB7IDIsICJwZXJzb24iLCB0cnVlLCBudWxsIH0sCisgICAgICAgICAgICBbImVtcHR5LXNldCJdID0gbmV3IEhhc2hTZXQ8b2JqZWN0Pz4oKSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2hvcnQKKyAgICAgICAgICAgIFsibWF4LXNob3J0Il0gPSBzaG9ydC5NYXhWYWx1ZSwKKyAgICAgICAgICAgIFsibWluLXNob3J0Il0gPSBzaG9ydC5NaW5WYWx1ZSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVVVJRCAoR3VpZCkKKyAgICAgICAgICAgIFsic3BlY2lmaWVkLXV1aWQiXSA9IEd1aWQuUGFyc2UoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpLAorICAgICAgICAgICAgWyJuaWwtdXVpZCJdID0gR3VpZC5FbXB0eSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVmVydGV4CisgICAgICAgICAgICBbIm5vLXByb3AtdmVydGV4Il0gPSBuZXcgVmVydGV4KDEsICJwZXJzb24iKSwKKyAgICAgICAgICAgIFsidHJhdmVyc2FsLXZlcnRleCJdID0gbmV3IFZlcnRleCgxLCAicGVyc29uIiwgbmV3IGR5bmFtaWNbXQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5ldyBQcm9wZXJ0eSgibmFtZSIsIE5hbWVNYXJrbywgbnVsbCksCisgICAgICAgICAgICAgICAgbmV3IFByb3BlcnR5KCJsb2NhdGlvbiIsIG5ldyBMaXN0PG9iamVjdD8+IHsgU2FuRGllZ28sIFNhbnRhQ3J1eiwgQnJ1c3NlbHMsIFNhbnRhRmUgfSwgbnVsbCkKKyAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBWZXJ0ZXhQcm9wZXJ0eQorICAgICAgICAgICAgWyJ0cmF2ZXJzYWwtdmVydGV4cHJvcGVydHkiXSA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSgwTCwgIm5hbWUiLCAibWFya28iLCBudWxsKSwKKyAgICAgICAgICAgIFsibWV0YS12ZXJ0ZXhwcm9wZXJ0eSJdID0gbmV3IFZlcnRleFByb3BlcnR5KDEsICJwZXJzb24iLCAic3RlcGhlbiIsIG51bGwsIAorICAgICAgICAgICAgICAgIG5ldyBkeW5hbWljW10geyBQcm9wZXJ0eUFCIH0pLAorICAgICAgICAgICAgWyJzZXQtY2FyZGluYWxpdHktdmVydGV4cHJvcGVydHkiXSA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSgxLCAicGVyc29uIiwgCisgICAgICAgICAgICAgICAgbmV3IEhhc2hTZXQ8b2JqZWN0Pz4geyAic3RlcGhlbiIsICJtYXJrbyIgfSwgbnVsbCwgbmV3IGR5bmFtaWNbXSB7IFByb3BlcnR5QUIgfSksCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFQgZW51bQorICAgICAgICAgICAgWyJpZC10Il0gPSBULklkLAorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEaXJlY3Rpb24gZW51bQorICAgICAgICAgICAgWyJvdXQtZGlyZWN0aW9uIl0gPSBEaXJlY3Rpb24uT3V0LAorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9SZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXJUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9SZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXJUZXN0cy5jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWY4M2M3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1JlcXVlc3RNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCkBAIC0wLDAgKzEsOTMgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEdyZW1saW4uTmV0LkRyaXZlci5NZXNzYWdlczsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQ7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQKK3sKKyAgICBwdWJsaWMgY2xhc3MgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyVGVzdHMKKyAgICB7CisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRXcml0ZVZlcnNpb25CeXRlRmlyc3QoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigpIikuQWRkRygiZyIpLkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBuZXcgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICBhd2FpdCBzZXJpYWxpemVyLldyaXRlVmFsdWVBc3luYyhtc2csIHN0cmVhbSwgd3JpdGVyKTsKKworICAgICAgICAgICAgdmFyIGJ5dGVzID0gc3RyZWFtLlRvQXJyYXkoKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgweDg0LCBieXRlc1swXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkTm90SW5jbHVkZU1pbWVQcmVmaXgoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbXNnID0gUmVxdWVzdE1lc3NhZ2UuQnVpbGQoImcuVigpIikuQWRkRygiZyIpLkNyZWF0ZSgpOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBuZXcgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7CisgICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICBhd2FpdCBzZXJpYWxpemVyLldyaXRlVmFsdWVBc3luYyhtc2csIHN0cmVhbSwgd3JpdGVyKTsKKworICAgICAgICAgICAgdmFyIGJ5dGVzID0gc3RyZWFtLlRvQXJyYXkoKTsKKyAgICAgICAgICAgIC8vIEZpcnN0IGJ5dGUgaXMgdmVyc2lvbiBieXRlIChNU0Igc2V0KSwgbm90IGEgTUlNRSBsZW5ndGgKKyAgICAgICAgICAgIEFzc2VydC5UcnVlKGJ5dGVzWzBdID4+IDcgPT0gMSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU2VyaWFsaXplRmllbGRzQW5kR3JlbWxpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5WKCkiKS5BZGRHKCJnIikuQ3JlYXRlKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIoKTsKKyAgICAgICAgICAgIHZhciB3cml0ZXIgPSBuZXcgR3JhcGhCaW5hcnlXcml0ZXIoKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisKKyAgICAgICAgICAgIGF3YWl0IHNlcmlhbGl6ZXIuV3JpdGVWYWx1ZUFzeW5jKG1zZywgc3RyZWFtLCB3cml0ZXIpOworCisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBzdHJlYW0uVG9BcnJheSgpOworICAgICAgICAgICAgLy8gU2hvdWxkIGhhdmUgbW9yZSB0aGFuIGp1c3QgdGhlIHZlcnNpb24gYnl0ZQorICAgICAgICAgICAgQXNzZXJ0LlRydWUoYnl0ZXMuTGVuZ3RoID4gMSk7CisgICAgICAgICAgICAvLyBWZXJzaW9uIGJ5dGUKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgweDg0LCBieXRlc1swXSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkU2VyaWFsaXplVmlhR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5CdWlsZCgiZy5WKCkiKS5BZGRHKCJnIikuQ3JlYXRlKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeTRNZXNzYWdlU2VyaWFsaXplcigpOworCisgICAgICAgICAgICB2YXIgYnl0ZXMgPSBhd2FpdCBzZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhtc2cpOworCisgICAgICAgICAgICAvLyBGaXJzdCBieXRlIGlzIHZlcnNpb24gYnl0ZSwgbm8gTUlNRSBwcmVmaXgKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgweDg0LCBieXRlc1swXSk7CisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShieXRlcy5MZW5ndGggPiAxKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoQmluYXJ5NC9SZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyVGVzdHMuY3MgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYzc2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCkBAIC0wLDAgKzEsMjEwIEBACisjcmVnaW9uIExpY2Vuc2UKKworLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZW5kcmVnaW9uCisKK3VzaW5nIFN5c3RlbS5JTzsKK3VzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Cit1c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuRXhjZXB0aW9uczsKK3VzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwordXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NDsKK3VzaW5nIFh1bml0OworCituYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuU3RydWN0dXJlLklPLkdyYXBoQmluYXJ5NAoreworICAgIHB1YmxpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyVGVzdHMKKyAgICB7CisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGREZXNlcmlhbGl6ZU5vbkJ1bGtlZFJlc3BvbnNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQnVpbGQgYSByZXNwb25zZTogdmVyc2lvbigweDg0KSArIGJ1bGtlZCgweDAwKSArIGludCB2YWx1ZSA0MiArIG1hcmtlciArIHN0YXR1cyBmb290ZXIKKyAgICAgICAgICAgIHVzaW5nIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICB2YXIgd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7CisKKyAgICAgICAgICAgIC8vIFZlcnNpb24gYnl0ZQorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4ODQpOworICAgICAgICAgICAgLy8gQnVsa2VkID0gZmFsc2UKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAwKTsKKyAgICAgICAgICAgIC8vIEZ1bGx5LXF1YWxpZmllZCBpbnQgdmFsdWU6IHR5cGVfY29kZSgweDAxKSArIHZhbHVlX2ZsYWcoMHgwMCkgKyBpbnQzMig0MikKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAxKTsgLy8gRGF0YVR5cGUuSW50CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIHZhbHVlX2ZsYWcgPSBub3QgbnVsbAorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmMoNDIpOworICAgICAgICAgICAgLy8gTWFya2VyOiB0eXBlX2NvZGUoMHhGRCkgKyB2YWx1ZV9mbGFnKDB4MDApICsgdmFsdWUoMHgwMCkKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweEZEKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAwKTsgLy8gdmFsdWVfZmxhZworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDApOyAvLyBtYXJrZXIgdmFsdWUKKyAgICAgICAgICAgIC8vIFN0YXR1cyBmb290ZXI6IHN0YXR1cyBjb2RlIDIwMAorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmMoMjAwKTsKKyAgICAgICAgICAgIC8vIE51bGxhYmxlIHN0YXR1cyBtZXNzYWdlOiBudWxsICh2YWx1ZV9mbGFnID0gMSkKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAxKTsKKyAgICAgICAgICAgIC8vIE51bGxhYmxlIGV4Y2VwdGlvbjogbnVsbCAodmFsdWVfZmxhZyA9IDEpCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMSk7CisKKyAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyKCk7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBzZXJpYWxpemVyLlJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgcmVhZGVyKTsKKworICAgICAgICAgICAgQXNzZXJ0LkZhbHNlKHJlc3VsdC5CdWxrZWQpOworICAgICAgICAgICAgQXNzZXJ0LlNpbmdsZShyZXN1bHQuUmVzdWx0KTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCg0MiwgcmVzdWx0LlJlc3VsdFswXSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoMjAwLCByZXN1bHQuU3RhdHVzQ29kZSk7CisgICAgICAgICAgICBBc3NlcnQuTnVsbChyZXN1bHQuU3RhdHVzTWVzc2FnZSk7CisgICAgICAgICAgICBBc3NlcnQuTnVsbChyZXN1bHQuRXhjZXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGREZXNlcmlhbGl6ZUJ1bGtlZFJlc3BvbnNlV2l0aFRyYXZlcnNlcldyYXBwaW5nKCkKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKworICAgICAgICAgICAgLy8gVmVyc2lvbiBieXRlCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHg4NCk7CisgICAgICAgICAgICAvLyBCdWxrZWQgPSB0cnVlCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMSk7CisgICAgICAgICAgICAvLyBGdWxseS1xdWFsaWZpZWQgc3RyaW5nIHZhbHVlOiB0eXBlX2NvZGUoMHgwMykgKyB2YWx1ZV9mbGFnKDB4MDApICsgc3RyaW5nICJoZWxsbyIKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAzKTsgLy8gRGF0YVR5cGUuU3RyaW5nCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIHZhbHVlX2ZsYWcKKyAgICAgICAgICAgIHZhciBoZWxsb0J5dGVzID0gU3lzdGVtLlRleHQuRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygiaGVsbG8iKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUludEFzeW5jKGhlbGxvQnl0ZXMuTGVuZ3RoKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUFzeW5jKGhlbGxvQnl0ZXMpOworICAgICAgICAgICAgLy8gQnVsayBjb3VudCBhcyBmdWxseS1xdWFsaWZpZWQgTG9uZzogdHlwZV9jb2RlKDB4MDIpICsgdmFsdWVfZmxhZygweDAwKSArIGxvbmcoMykKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAyKTsgLy8gRGF0YVR5cGUuTG9uZworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDApOyAvLyB2YWx1ZV9mbGFnID0gbm90IG51bGwKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUxvbmdBc3luYygzKTsKKyAgICAgICAgICAgIC8vIE1hcmtlcjogdHlwZV9jb2RlKDB4RkQpICsgdmFsdWVfZmxhZygweDAwKSArIHZhbHVlKDB4MDApCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHhGRCk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIHZhbHVlX2ZsYWcKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAwKTsgLy8gbWFya2VyIHZhbHVlCisgICAgICAgICAgICAvLyBTdGF0dXMgZm9vdGVyCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVJbnRBc3luYygyMDApOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDEpOyAvLyBudWxsIG1lc3NhZ2UKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAxKTsgLy8gbnVsbCBleGNlcHRpb24KKworICAgICAgICAgICAgc3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gbmV3IFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIoKTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IHNlcmlhbGl6ZXIuUmVhZFZhbHVlQXN5bmMoc3RyZWFtLCByZWFkZXIpOworCisgICAgICAgICAgICBBc3NlcnQuVHJ1ZShyZXN1bHQuQnVsa2VkKTsKKyAgICAgICAgICAgIEFzc2VydC5TaW5nbGUocmVzdWx0LlJlc3VsdCk7CisgICAgICAgICAgICB2YXIgdHJhdmVyc2VyID0gQXNzZXJ0LklzVHlwZTxUcmF2ZXJzZXI+KHJlc3VsdC5SZXN1bHRbMF0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJoZWxsbyIsIChzdHJpbmcpdHJhdmVyc2VyLk9iamVjdCk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoM0wsIHRyYXZlcnNlci5CdWxrKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRUaHJvd1Jlc3BvbnNlRXhjZXB0aW9uT25FcnJvclN0YXR1cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzaW5nIHZhciBzdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisKKyAgICAgICAgICAgIC8vIFZlcnNpb24gYnl0ZQorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4ODQpOworICAgICAgICAgICAgLy8gQnVsa2VkID0gZmFsc2UKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAwKTsKKyAgICAgICAgICAgIC8vIE5vIHJlc3VsdCBkYXRhIOKAlCBnbyBzdHJhaWdodCB0byBtYXJrZXI6IHR5cGVfY29kZSgweEZEKSArIHZhbHVlX2ZsYWcoMHgwMCkgKyB2YWx1ZSgweDAwKQorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4RkQpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDApOyAvLyB2YWx1ZV9mbGFnCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIG1hcmtlciB2YWx1ZQorICAgICAgICAgICAgLy8gU3RhdHVzIGZvb3Rlcjogc3RhdHVzIGNvZGUgNTAwCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVJbnRBc3luYyg1MDApOworICAgICAgICAgICAgLy8gU3RhdHVzIG1lc3NhZ2U6ICJTZXJ2ZXIgZXJyb3IiCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIHZhbHVlX2ZsYWcgPSBub3QgbnVsbAorICAgICAgICAgICAgdmFyIG1zZ0J5dGVzID0gU3lzdGVtLlRleHQuRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygiU2VydmVyIGVycm9yIik7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVJbnRBc3luYyhtc2dCeXRlcy5MZW5ndGgpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQXN5bmMobXNnQnl0ZXMpOworICAgICAgICAgICAgLy8gRXhjZXB0aW9uOiAiamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24iCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIHZhbHVlX2ZsYWcgPSBub3QgbnVsbAorICAgICAgICAgICAgdmFyIGV4Y0J5dGVzID0gU3lzdGVtLlRleHQuRW5jb2RpbmcuVVRGOC5HZXRCeXRlcygiamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24iKTsKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUludEFzeW5jKGV4Y0J5dGVzLkxlbmd0aCk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVBc3luYyhleGNCeXRlcyk7CisKKyAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyKCk7CisKKyAgICAgICAgICAgIHZhciBleCA9IGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxSZXNwb25zZUV4Y2VwdGlvbj4oCisgICAgICAgICAgICAgICAgKCkgPT4gc2VyaWFsaXplci5SZWFkVmFsdWVBc3luYyhzdHJlYW0sIHJlYWRlcikpOworCisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoNTAwLCBleC5TdGF0dXNDb2RlKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiU2VydmVyIGVycm9yIiwgZXguTWVzc2FnZSk7CisgICAgICAgICAgICBBc3NlcnQuRXF1YWwoImphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uIiwgZXguU2VydmVyRXhjZXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgYXN5bmMgVGFzayBTaG91bGRUaHJvd09uSW52YWxpZFZlcnNpb25CeXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgdXNpbmcgdmFyIHN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIC8vIEludmFsaWQgdmVyc2lvbiBieXRlIChNU0Igbm90IHNldCkKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAxKTsKKworICAgICAgICAgICAgc3RyZWFtLlBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVyID0gbmV3IFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIoKTsKKworICAgICAgICAgICAgYXdhaXQgQXNzZXJ0LlRocm93c0FzeW5jPElPRXhjZXB0aW9uPigKKyAgICAgICAgICAgICAgICAoKSA9PiBzZXJpYWxpemVyLlJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgcmVhZGVyKSk7CisgICAgICAgIH0KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIGFzeW5jIFRhc2sgU2hvdWxkRGVzZXJpYWxpemVNdWx0aXBsZU5vbkJ1bGtlZFJlc3VsdHMoKQorICAgICAgICB7CisgICAgICAgICAgICB1c2luZyB2YXIgc3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbSgpOworCisgICAgICAgICAgICAvLyBWZXJzaW9uICsgbm9uLWJ1bGtlZAorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4ODQpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDApOworICAgICAgICAgICAgLy8gRmlyc3QgcmVzdWx0OiBpbnQgMQorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDEpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDApOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmMoMSk7CisgICAgICAgICAgICAvLyBTZWNvbmQgcmVzdWx0OiBpbnQgMgorICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDEpOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlQnl0ZUFzeW5jKDB4MDApOworICAgICAgICAgICAgYXdhaXQgc3RyZWFtLldyaXRlSW50QXN5bmMoMik7CisgICAgICAgICAgICAvLyBUaGlyZCByZXN1bHQ6IGludCAzCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVJbnRBc3luYygzKTsKKyAgICAgICAgICAgIC8vIE1hcmtlcjogdHlwZV9jb2RlKDB4RkQpICsgdmFsdWVfZmxhZygweDAwKSArIHZhbHVlKDB4MDApCisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHhGRCk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMCk7IC8vIHZhbHVlX2ZsYWcKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUJ5dGVBc3luYygweDAwKTsgLy8gbWFya2VyIHZhbHVlCisgICAgICAgICAgICAvLyBTdGF0dXMgZm9vdGVyOiAyMDAsIG51bGwsIG51bGwKKyAgICAgICAgICAgIGF3YWl0IHN0cmVhbS5Xcml0ZUludEFzeW5jKDIwMCk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMSk7CisgICAgICAgICAgICBhd2FpdCBzdHJlYW0uV3JpdGVCeXRlQXN5bmMoMHgwMSk7CisKKyAgICAgICAgICAgIHN0cmVhbS5Qb3NpdGlvbiA9IDA7CisgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKCk7CisgICAgICAgICAgICB2YXIgc2VyaWFsaXplciA9IG5ldyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyKCk7CisKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBzZXJpYWxpemVyLlJlYWRWYWx1ZUFzeW5jKHN0cmVhbSwgcmVhZGVyKTsKKworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDMsIHJlc3VsdC5SZXN1bHQuQ291bnQpOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDEsIHJlc3VsdC5SZXN1bHRbMF0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDIsIHJlc3VsdC5SZXN1bHRbMV0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDMsIHJlc3VsdC5SZXN1bHRbMl0pOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1JvdW5kVHJpcFRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhCaW5hcnk0L1JvdW5kVHJpcFRlc3RzLmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNzAxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaEJpbmFyeTQvUm91bmRUcmlwVGVzdHMuY3MKQEAgLTAsMCArMSwzNjQgQEAKKyNyZWdpb24gTGljZW5zZQorCisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNlbmRyZWdpb24KKwordXNpbmcgU3lzdGVtOwordXNpbmcgU3lzdGVtLklPOwordXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKK3VzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQ7Cit1c2luZyBYdW5pdDsKKworbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaEJpbmFyeTQKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJvdW5kIHRyaXAgdGVzdGluZyBvZiBHcmFwaEJpbmFyeSA0LjAgY29tcGFyZWQgdG8gYSBjb3JyZWN0ICJtb2RlbCIuCisgICAgLy8vIFNldCB0aGUgSU9fVEVTVF9ESVJFQ1RPUlkgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZQorICAgIC8vLyB0aGUgLmdiaW4gZmlsZXMgdGhhdCByZXByZXNlbnQgdGhlIHNlcmlhbGl6ZWQgIm1vZGVsIiBhcmUgbG9jYXRlZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIHB1YmxpYyBjbGFzcyBSb3VuZFRyaXBUZXN0cworICAgIHsKKyAgICAgICAgcHJpdmF0ZSBjb25zdCBzdHJpbmcgR3JlbWxpblRlc3REaXIgPSAiZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS8iOworICAgICAgICBwcml2YXRlIGNvbnN0IHN0cmluZyBEaXJlY3RvcnlTZWFyY2hQYXR0ZXJuID0gImdyZW1saW4tZG90bmV0IjsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IHN0cmluZyBUZXN0UmVzb3VyY2VEaXJlY3Rvcnk7CisgICAgICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEdyYXBoQmluYXJ5V3JpdGVyIFdyaXRlciA9IG5ldygpOworICAgICAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHcmFwaEJpbmFyeVJlYWRlciBSZWFkZXIgPSBuZXcoKTsKKworICAgICAgICBzdGF0aWMgUm91bmRUcmlwVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZW52RGlyID0gRW52aXJvbm1lbnQuR2V0RW52aXJvbm1lbnRWYXJpYWJsZSgiSU9fVEVTVF9ESVJFQ1RPUlkiKTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoZW52RGlyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXN0UmVzb3VyY2VEaXJlY3RvcnkgPSBlbnZEaXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgcm9vdCBkaXJlY3RvcnkgYnkgc2VhcmNoaW5nIGZvciBncmVtbGluLWRvdG5ldCBpbiB0aGUgY3VycmVudCBwYXRoCisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnREaXIgPSBBcHBEb21haW4uQ3VycmVudERvbWFpbi5CYXNlRGlyZWN0b3J5OworICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGN1cnJlbnREaXIuSW5kZXhPZihEaXJlY3RvcnlTZWFyY2hQYXR0ZXJuLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWwpOworICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RGlyID0gaW5kZXggPj0gMCA/IGN1cnJlbnREaXJbLi5pbmRleF0gOiBjdXJyZW50RGlyOworICAgICAgICAgICAgICAgIFRlc3RSZXNvdXJjZURpcmVjdG9yeSA9IFBhdGguQ29tYmluZShkZWZhdWx0RGlyLCBHcmVtbGluVGVzdERpcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBvYmplY3Q/IEdldEVudHJ5KHN0cmluZyB0aXRsZSkgPT4gTW9kZWwuRW50cmllc1t0aXRsZV07CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIFJlYWRGaWxlQnlOYW1lKHN0cmluZyByZXNvdXJjZU5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBmdWxsTmFtZSA9IFBhdGguQ29tYmluZShUZXN0UmVzb3VyY2VEaXJlY3RvcnksICQie3Jlc291cmNlTmFtZX0tdjQuZ2JpbiIpOworICAgICAgICAgICAgcmV0dXJuIEZpbGUuUmVhZEFsbEJ5dGVzKGZ1bGxOYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vLyA8c3VtbWFyeT4KKyAgICAgICAgLy8vIFJ1bnMgdGhlIHJlZ3VsYXIgc2V0IG9mIHRlc3RzIGZvciB0aGUgdHlwZToKKyAgICAgICAgLy8vIDEuIG1vZGVsIHRvIGRlc2VyaWFsaXplZCBvYmplY3QKKyAgICAgICAgLy8vIDIuIHdyaXR0ZW4gYnl0ZXMgdG8gcmVhZCBieXRlcworICAgICAgICAvLy8gMy4gcm91bmQgdHJpcHBlZCAocmVhZCB0aGVuIHdyaXR0ZW4pIGJ5dGVzIHRvIHJlYWQgYnl0ZXMKKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrIFJ1bihzdHJpbmcgcmVzb3VyY2VOYW1lLCBGdW5jPG9iamVjdD8sIG9iamVjdD8sIGJvb2w+PyBjb21wYXJhdG9yID0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJlc291cmNlQnl0ZXMgPSBSZWFkRmlsZUJ5TmFtZShyZXNvdXJjZU5hbWUpOworICAgICAgICAgICAgdmFyIG1vZGVsID0gR2V0RW50cnkocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdXNpbmcgdmFyIHJlYWRTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKHJlc291cmNlQnl0ZXMpOworICAgICAgICAgICAgdmFyIHJlYWQgPSBhd2FpdCBSZWFkZXIuUmVhZEFzeW5jKHJlYWRTdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY29tcGFyYXRvciAhPSBudWxsKQorICAgICAgICAgICAgICAgIEFzc2VydC5UcnVlKGNvbXBhcmF0b3IobW9kZWwsIHJlYWQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwobW9kZWwsIHJlYWQpOworICAgICAgICAgICAgCisgICAgICAgICAgICB1c2luZyB2YXIgd3JpdGVTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICBhd2FpdCBXcml0ZXIuV3JpdGVBc3luYyhtb2RlbCwgd3JpdGVTdHJlYW0pOworICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKHJlc291cmNlQnl0ZXMsIHdyaXRlU3RyZWFtLlRvQXJyYXkoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVzaW5nIHZhciByb3VuZFRyaXBSZWFkU3RyZWFtID0gbmV3IE1lbW9yeVN0cmVhbShyZXNvdXJjZUJ5dGVzKTsKKyAgICAgICAgICAgIHZhciByb3VuZFRyaXBSZWFkID0gYXdhaXQgUmVhZGVyLlJlYWRBc3luYyhyb3VuZFRyaXBSZWFkU3RyZWFtKTsKKyAgICAgICAgICAgIHVzaW5nIHZhciByb3VuZFRyaXBXcml0ZVN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0oKTsKKyAgICAgICAgICAgIGF3YWl0IFdyaXRlci5Xcml0ZUFzeW5jKHJvdW5kVHJpcFJlYWQsIHJvdW5kVHJpcFdyaXRlU3RyZWFtKTsKKyAgICAgICAgICAgIEFzc2VydC5FcXVhbChyZXNvdXJjZUJ5dGVzLCByb3VuZFRyaXBXcml0ZVN0cmVhbS5Ub0FycmF5KCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUnVucyB0aGUgcmVhZCB0ZXN0IHdoaWNoIGNvbXBhcmVzIHRoZSBtb2RlbCB0byBkZXNlcmlhbGl6ZWQgb2JqZWN0LgorICAgICAgICAvLy8gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG9ubHkgYSBkZXNlcmlhbGl6ZXIKKyAgICAgICAgLy8vIGJ1dCBubyBzZXJpYWxpemVyIGZvciB0aGUgc2FtZSB0eXBlLgorICAgICAgICAvLy8gPC9zdW1tYXJ5PgorICAgICAgICBwcml2YXRlIGFzeW5jIFRhc2sgUnVuUmVhZChzdHJpbmcgcmVzb3VyY2VOYW1lLCBGdW5jPG9iamVjdD8sIG9iamVjdD8sIGJvb2w+PyBjb21wYXJhdG9yID0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJlc291cmNlQnl0ZXMgPSBSZWFkRmlsZUJ5TmFtZShyZXNvdXJjZU5hbWUpOworICAgICAgICAgICAgdmFyIG1vZGVsID0gR2V0RW50cnkocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdXNpbmcgdmFyIHJlYWRTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKHJlc291cmNlQnl0ZXMpOworICAgICAgICAgICAgdmFyIHJlYWQgPSBhd2FpdCBSZWFkZXIuUmVhZEFzeW5jKHJlYWRTdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoY29tcGFyYXRvciAhPSBudWxsKQorICAgICAgICAgICAgICAgIEFzc2VydC5UcnVlKGNvbXBhcmF0b3IobW9kZWwsIHJlYWQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBc3NlcnQuRXF1YWwobW9kZWwsIHJlYWQpOworICAgICAgICB9CisKKyAgICAgICAgLy8vIDxzdW1tYXJ5PgorICAgICAgICAvLy8gUnVucyBhIHJlZHVjZWQgc2V0IG9mIHRlc3RzIGZvciB0aGUgdHlwZToKKyAgICAgICAgLy8vIDEuIG1vZGVsIHRvIGRlc2VyaWFsaXplZCBvYmplY3QKKyAgICAgICAgLy8vIDIuIG1vZGVsIHRvIHJvdW5kIHRyaXBwZWQgKHdyaXR0ZW4gdGhlbiByZWFkKSBvYmplY3QKKyAgICAgICAgLy8vIFVzZSB0aGlzIGluIGNhc2VzIHdoZXJlIHRoZSByZWd1bGFyIFJ1bigpIGZ1bmN0aW9uIGlzIHRvbyBzdHJpbmdlbnQuCisgICAgICAgIC8vLyBFLmcuIHdoZW4gb3JkZXJpbmcgZG9lc24ndCBtYXR0ZXIgbGlrZSBmb3Igc2V0cy4KKyAgICAgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAgICAgcHJpdmF0ZSBhc3luYyBUYXNrIFJ1bldyaXRlUmVhZChzdHJpbmcgcmVzb3VyY2VOYW1lLCBGdW5jPG9iamVjdD8sIG9iamVjdD8sIGJvb2w+PyBjb21wYXJhdG9yID0gbnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHJlc291cmNlQnl0ZXMgPSBSZWFkRmlsZUJ5TmFtZShyZXNvdXJjZU5hbWUpOworICAgICAgICAgICAgdmFyIG1vZGVsID0gR2V0RW50cnkocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdXNpbmcgdmFyIHJlYWRTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKHJlc291cmNlQnl0ZXMpOworICAgICAgICAgICAgdmFyIHJlYWQgPSBhd2FpdCBSZWFkZXIuUmVhZEFzeW5jKHJlYWRTdHJlYW0pOworICAgICAgICAgICAgCisgICAgICAgICAgICB1c2luZyB2YXIgd3JpdGVTdHJlYW0gPSBuZXcgTWVtb3J5U3RyZWFtKCk7CisgICAgICAgICAgICBhd2FpdCBXcml0ZXIuV3JpdGVBc3luYyhtb2RlbCwgd3JpdGVTdHJlYW0pOworICAgICAgICAgICAgdXNpbmcgdmFyIHJvdW5kVHJpcFN0cmVhbSA9IG5ldyBNZW1vcnlTdHJlYW0od3JpdGVTdHJlYW0uVG9BcnJheSgpKTsKKyAgICAgICAgICAgIHZhciByb3VuZFRyaXBwZWQgPSBhd2FpdCBSZWFkZXIuUmVhZEFzeW5jKHJvdW5kVHJpcFN0cmVhbSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjb21wYXJhdG9yICE9IG51bGwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQXNzZXJ0LlRydWUoY29tcGFyYXRvcihtb2RlbCwgcmVhZCkpOworICAgICAgICAgICAgICAgIEFzc2VydC5UcnVlKGNvbXBhcmF0b3IobW9kZWwsIHJvdW5kVHJpcHBlZCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFzc2VydC5FcXVhbChtb2RlbCwgcmVhZCk7CisgICAgICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG1vZGVsLCByb3VuZFRyaXBwZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbCBOYW5Db21wYXJhdG9yKG9iamVjdD8geCwgb2JqZWN0PyB5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4geCBzd2l0Y2gKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZHggd2hlbiB5IGlzIGRvdWJsZSBkeSA9PiBkb3VibGUuSXNOYU4oZHgpICYmIGRvdWJsZS5Jc05hTihkeSksCisgICAgICAgICAgICAgICAgZmxvYXQgZnggd2hlbiB5IGlzIGZsb2F0IGZ5ID0+IGZsb2F0LklzTmFOKGZ4KSAmJiBmbG9hdC5Jc05hTihmeSksCisgICAgICAgICAgICAgICAgXyA9PiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJpZ0ludGVnZXIgdGVzdHMKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RQb3NCaWdJbnRlZ2VyKCkgPT4gUnVuKCJwb3MtYmlnaW50ZWdlciIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TmVnQmlnSW50ZWdlcigpID0+IFJ1bigibmVnLWJpZ2ludGVnZXIiKTsKKworICAgICAgICAvLyBCeXRlIHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TWluQnl0ZSgpID0+IFJ1bigibWluLWJ5dGUiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE1heEJ5dGUoKSA9PiBSdW4oIm1heC1ieXRlIik7CisKKyAgICAgICAgLy8gQmluYXJ5IHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0RW1wdHlCaW5hcnkoKSA9PiBSdW4oImVtcHR5LWJpbmFyeSIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0U3RyQmluYXJ5KCkgPT4gUnVuKCJzdHItYmluYXJ5Iik7CisKKyAgICAgICAgLy8gRG91YmxlIHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TWF4RG91YmxlKCkgPT4gUnVuKCJtYXgtZG91YmxlIik7CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RNaW5Eb3VibGUoKSA9PiBSdW4oIm1pbi1kb3VibGUiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE5lZ01heERvdWJsZSgpID0+IFJ1bigibmVnLW1heC1kb3VibGUiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE5lZ01pbkRvdWJsZSgpID0+IFJ1bigibmVnLW1pbi1kb3VibGUiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE5hbkRvdWJsZSgpID0+IFJ1bldyaXRlUmVhZCgibmFuLWRvdWJsZSIsIE5hbkNvbXBhcmF0b3IpOyAvLyBDIyBoYXMgZGlmZmVyZW50IE5hTiByZXByZXNlbnRhdGlvbgorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0UG9zSW5mRG91YmxlKCkgPT4gUnVuKCJwb3MtaW5mLWRvdWJsZSIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TmVnSW5mRG91YmxlKCkgPT4gUnVuKCJuZWctaW5mLWRvdWJsZSIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TmVnWmVyb0RvdWJsZSgpID0+IFJ1bigibmVnLXplcm8tZG91YmxlIik7CisKKyAgICAgICAgLy8gRmxvYXQgdGVzdHMKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RNYXhGbG9hdCgpID0+IFJ1bigibWF4LWZsb2F0Iik7CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RNaW5GbG9hdCgpID0+IFJ1bigibWluLWZsb2F0Iik7CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3ROZWdNYXhGbG9hdCgpID0+IFJ1bigibmVnLW1heC1mbG9hdCIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TmVnTWluRmxvYXQoKSA9PiBSdW4oIm5lZy1taW4tZmxvYXQiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE5hbkZsb2F0KCkgPT4gUnVuV3JpdGVSZWFkKCJuYW4tZmxvYXQiLCBOYW5Db21wYXJhdG9yKTsgLy8gQyMgaGFzIGRpZmZlcmVudCBOYU4gcmVwcmVzZW50YXRpb24KKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdFBvc0luZkZsb2F0KCkgPT4gUnVuKCJwb3MtaW5mLWZsb2F0Iik7CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3ROZWdJbmZGbG9hdCgpID0+IFJ1bigibmVnLWluZi1mbG9hdCIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TmVnWmVyb0Zsb2F0KCkgPT4gUnVuKCJuZWctemVyby1mbG9hdCIpOworCisgICAgICAgIC8vIENoYXIgdGVzdHMKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RTaW5nbGVCeXRlQ2hhcigpID0+IFJ1bigic2luZ2xlLWJ5dGUtY2hhciIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TXVsdGlCeXRlQ2hhcigpID0+IFJ1bigibXVsdGktYnl0ZS1jaGFyIik7CisKKyAgICAgICAgLy8gTnVsbCB0ZXN0CisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0VW5zcGVjaWZpZWROdWxsKCkgPT4gUnVuKCJ1bnNwZWNpZmllZC1udWxsIik7CisKKyAgICAgICAgLy8gQm9vbGVhbiB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdFRydWVCb29sZWFuKCkgPT4gUnVuKCJ0cnVlLWJvb2xlYW4iKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdEZhbHNlQm9vbGVhbigpID0+IFJ1bigiZmFsc2UtYm9vbGVhbiIpOworCisgICAgICAgIC8vIFN0cmluZyB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdFNpbmdsZUJ5dGVTdHJpbmcoKSA9PiBSdW4oInNpbmdsZS1ieXRlLXN0cmluZyIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TWl4ZWRTdHJpbmcoKSA9PiBSdW4oIm1peGVkLXN0cmluZyIpOworCisgICAgICAgIC8vIEJ1bGtTZXQgdGVzdHMgKHJlYWQgb25seSAtIEJ1bGtTZXQgZGVzZXJpYWxpemVkIGFzIExpc3QpCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0VmFyQnVsa0xpc3QoKSA9PiBSdW5SZWFkKCJ2YXItYnVsa2xpc3QiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdEVtcHR5QnVsa0xpc3QoKSA9PiBSdW5SZWFkKCJlbXB0eS1idWxrbGlzdCIpOworCisgICAgICAgIC8vIER1cmF0aW9uIHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0WmVyb0R1cmF0aW9uKCkgPT4gUnVuKCJ6ZXJvLWR1cmF0aW9uIik7CisKKyAgICAgICAgLy8gRWRnZSB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdFRyYXZlcnNhbEVkZ2UoKSA9PiBSdW5Xcml0ZVJlYWQoInRyYXZlcnNhbC1lZGdlIik7IC8vIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE5vUHJvcEVkZ2UoKSA9PiBSdW5Xcml0ZVJlYWQoIm5vLXByb3AtZWRnZSIpOyAvLyBwcm9wZXJ0aWVzIHdyaXR0ZW4gYXMgbnVsbCBub3QgZW1wdHkgbGlzdAorCisgICAgICAgIC8vIEludCB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE1heEludCgpID0+IFJ1bigibWF4LWludCIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TWluSW50KCkgPT4gUnVuKCJtaW4taW50Iik7CisKKyAgICAgICAgLy8gTG9uZyB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE1heExvbmcoKSA9PiBSdW4oIm1heC1sb25nIik7CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RNaW5Mb25nKCkgPT4gUnVuKCJtaW4tbG9uZyIpOworCisgICAgICAgIC8vIExpc3QgdGVzdHMKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RWYXJUeXBlTGlzdCgpID0+IFJ1bigidmFyLXR5cGUtbGlzdCIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0RW1wdHlMaXN0KCkgPT4gUnVuKCJlbXB0eS1saXN0Iik7CisKKyAgICAgICAgLy8gTWFwIHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0RW1wdHlNYXAoKSA9PiBSdW4oImVtcHR5LW1hcCIpOworCisgICAgICAgIC8vIFBhdGggdGVzdHMKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RUcmF2ZXJzYWxQYXRoKCkgPT4gUnVuV3JpdGVSZWFkKCJ0cmF2ZXJzYWwtcGF0aCIpOyAvLyBwcm9wZXJ0aWVzIHdyaXR0ZW4gYXMgbnVsbCBub3QgZW1wdHkgbGlzdAorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0RW1wdHlQYXRoKCkgPT4gUnVuKCJlbXB0eS1wYXRoIik7CisKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RQcm9wUGF0aCgpID0+IFJ1bldyaXRlUmVhZCgicHJvcC1wYXRoIik7IC8vIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQKKworICAgICAgICAvLyBQcm9wZXJ0eSB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdEVkZ2VQcm9wZXJ0eSgpID0+IFJ1bigiZWRnZS1wcm9wZXJ0eSIpOworCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TnVsbFByb3BlcnR5KCkgPT4gUnVuKCJudWxsLXByb3BlcnR5Iik7CisKKyAgICAgICAgLy8gU2V0IHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0VmFyVHlwZVNldCgpID0+IFJ1bldyaXRlUmVhZCgidmFyLXR5cGUtc2V0Iik7IC8vIG9yZGVyIG5vdCBndWFyYW50ZWVkIGluIEhhc2hTZXQKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdEVtcHR5U2V0KCkgPT4gUnVuKCJlbXB0eS1zZXQiKTsKKworICAgICAgICAvLyBTaG9ydCB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE1heFNob3J0KCkgPT4gUnVuKCJtYXgtc2hvcnQiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE1pblNob3J0KCkgPT4gUnVuKCJtaW4tc2hvcnQiKTsKKworICAgICAgICAvLyBVVUlEIHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0U3BlY2lmaWVkVXVpZCgpID0+IFJ1bigic3BlY2lmaWVkLXV1aWQiKTsKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdE5pbFV1aWQoKSA9PiBSdW4oIm5pbC11dWlkIik7CisKKyAgICAgICAgLy8gVmVydGV4IHRlc3RzCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0Tm9Qcm9wVmVydGV4KCkgPT4gUnVuV3JpdGVSZWFkKCJuby1wcm9wLXZlcnRleCIpOyAvLyBwcm9wZXJ0aWVzIHdyaXR0ZW4gYXMgbnVsbCBub3QgZW1wdHkgbGlzdAorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0VHJhdmVyc2FsVmVydGV4KCkgPT4gUnVuV3JpdGVSZWFkKCJ0cmF2ZXJzYWwtdmVydGV4Iik7IC8vIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQKKworICAgICAgICAvLyBWZXJ0ZXhQcm9wZXJ0eSB0ZXN0cworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdFRyYXZlcnNhbFZlcnRleFByb3BlcnR5KCkgPT4gUnVuV3JpdGVSZWFkKCJ0cmF2ZXJzYWwtdmVydGV4cHJvcGVydHkiKTsgLy8gcHJvcGVydGllcyBhcmVuJ3Qgc2VyaWFsaXplZAorCisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0TWV0YVZlcnRleFByb3BlcnR5KCkgPT4gUnVuV3JpdGVSZWFkKCJtZXRhLXZlcnRleHByb3BlcnR5Iik7IC8vIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQKKworICAgICAgICBbRmFjdF0KKyAgICAgICAgcHVibGljIFRhc2sgVGVzdFNldENhcmRpbmFsaXR5VmVydGV4UHJvcGVydHkoKSA9PiBSdW5Xcml0ZVJlYWQoInNldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eSIpOyAvLyBwcm9wZXJ0aWVzIGFyZW4ndCBzZXJpYWxpemVkCisKKyAgICAgICAgLy8gVCBlbnVtIHRlc3QKKyAgICAgICAgW0ZhY3RdCisgICAgICAgIHB1YmxpYyBUYXNrIFRlc3RJZFQoKSA9PiBSdW4oImlkLXQiKTsKKworICAgICAgICAvLyBEaXJlY3Rpb24gZW51bSB0ZXN0CisgICAgICAgIFtGYWN0XQorICAgICAgICBwdWJsaWMgVGFzayBUZXN0T3V0RGlyZWN0aW9uKCkgPT4gUnVuKCJvdXQtZGlyZWN0aW9uIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnl0ZWNvZGVHcmFwaFNPTlNlcmlhbGl6ZXJUZXN0cy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoU09OL0J5dGVjb2RlR3JhcGhTT05TZXJpYWxpemVyVGVzdHMuY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNWI4ZmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vQnl0ZWNvZGVHcmFwaFNPTlNlcmlhbGl6ZXJUZXN0cy5jcworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwotdXNpbmcgWHVuaXQ7Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Vbml0VGVzdC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBwdWJsaWMgY2xhc3MgQnl0ZWNvZGVHcmFwaFNPTlNlcmlhbGl6ZXJUZXN0cwotICAgIHsKLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyYW1ldGVycyBmb3IgZWFjaCB0ZXN0IHN1cHBvcnRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgR3JhcGhTT04KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBJRW51bWVyYWJsZTxvYmplY3RbXT4gVmVyc2lvbnMgPT4gbmV3IFtdCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBvYmplY3RbXSB7IDIgfSwKLSAgICAgICAgICAgIG5ldyBvYmplY3RbXSB7IDMgfQotICAgICAgICB9OwotCi0gICAgICAgIHByaXZhdGUgR3JhcGhTT05Xcml0ZXIgQ3JlYXRlR3JhcGhTT05Xcml0ZXIoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IDMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFNPTjNXcml0ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT04yV3JpdGVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVCeXRlQ29kZVdpdGhOZXN0ZWRUcmF2ZXJzYWwoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgiViIpOwotICAgICAgICAgICAgdmFyIG5lc3RlZEJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICB2YXIgbmVzdGVkVHJhdmVyc2FsID0gbmV3IFRlc3RUcmF2ZXJzYWwobmVzdGVkQnl0ZWNvZGUpOwotICAgICAgICAgICAgbmVzdGVkQnl0ZWNvZGUuQWRkU3RlcCgib3V0Iik7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJyZXBlYXQiLCBuZXN0ZWRUcmF2ZXJzYWwpOwotICAgICAgICAgICAgdmFyIGdyYXBoc29uV3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNPTiA9IGdyYXBoc29uV3JpdGVyLldyaXRlT2JqZWN0KGJ5dGVjb2RlKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTb24gPQotICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpCeXRlY29kZVwiLFwiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJWXCJdLFtcInJlcGVhdFwiLHtcIkB0eXBlXCI6XCJnOkJ5dGVjb2RlXCIsXCJAdmFsdWVcIjp7XCJzdGVwXCI6W1tcIm91dFwiXV19fV1dfX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTb24sIGdyYXBoU09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUJ5dGVjb2RlV2l0aE51bWJlcnMoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgiViIsIChsb25nKSAxKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFN0ZXAoImhhcyIsICJhZ2UiLCAyMCk7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJoYXMiLCAiaGVpZ2h0IiwgNi41KTsKLSAgICAgICAgICAgIHZhciBncmFwaHNvbldyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTT04gPSBncmFwaHNvbldyaXRlci5Xcml0ZU9iamVjdChieXRlY29kZSk7Ci0KLSAgICAgICAgICAgIHZhciBleHBlY3RlZEdyYXBoU29uID0KLSAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6Qnl0ZWNvZGVcIixcIkB2YWx1ZVwiOntcInN0ZXBcIjpbW1wiVlwiLHtcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjoxfV0sW1wiaGFzXCIsXCJhZ2VcIix7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6MjB9XSxbXCJoYXNcIixcImhlaWdodFwiLHtcIkB0eXBlXCI6XCJnOkRvdWJsZVwiLFwiQHZhbHVlXCI6Ni41fV1dfX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTb24sIGdyYXBoU09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZV9nX1YoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgiViIpOwotICAgICAgICAgICAgdmFyIGdyYXBoc29uV3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNPTiA9IGdyYXBoc29uV3JpdGVyLldyaXRlT2JqZWN0KGJ5dGVjb2RlKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ7XCJAdHlwZVwiOlwiZzpCeXRlY29kZVwiLFwiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJWXCJdXX19IiwgZ3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplX2dfVl9Db3VudChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJWIik7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJjb3VudCIpOwotICAgICAgICAgICAgdmFyIGdyYXBoc29uV3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNPTiA9IGdyYXBoc29uV3JpdGVyLldyaXRlT2JqZWN0KGJ5dGVjb2RlKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImc6Qnl0ZWNvZGVcIixcIkB2YWx1ZVwiOntcInN0ZXBcIjpbW1wiVlwiXSxbXCJjb3VudFwiXV19fSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRHcmFwaFNvbiwgZ3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplX2dfVl9IYXNYUGVyc29uX05hbWVfR3JlbWxpblhfQ291bnQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgiViIpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgiaGFzIiwgIlBlcnNvbiIsICJOYW1lIiwgIkdyZW1saW4iKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFN0ZXAoImNvdW50Iik7Ci0gICAgICAgICAgICB2YXIgZ3JhcGhzb25Xcml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU09OID0gZ3JhcGhzb25Xcml0ZXIuV3JpdGVPYmplY3QoYnl0ZWNvZGUpOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRHcmFwaFNvbiA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOkJ5dGVjb2RlXCIsXCJAdmFsdWVcIjp7XCJzdGVwXCI6W1tcIlZcIl0sW1wiaGFzXCIsXCJQZXJzb25cIixcIk5hbWVcIixcIkdyZW1saW5cIl0sW1wiY291bnRcIl1dfX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTb24sIGdyYXBoU09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUJ5dGVjb2RlV2l0aFNvdXJjZXNTdGVwKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlLkFkZFNvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCAiYSIsICJqb3NoIik7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJWIiwgMSk7Ci0gICAgICAgICAgICBieXRlY29kZS5BZGRTdGVwKCJ2YWx1ZXMiLCAibmFtZSIpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgid2hlcmUiLCBuZXcgUCgid2l0aGluIiwgImEiKSk7Ci0gICAgICAgICAgICB2YXIgZ3JhcGhzb25Xcml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU09OID0gZ3JhcGhzb25Xcml0ZXIuV3JpdGVPYmplY3QoYnl0ZWNvZGUpOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRHcmFwaFNvbiA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOkJ5dGVjb2RlXCIsXCJAdmFsdWVcIjp7XCJzb3VyY2VcIjpbW1wid2l0aFNpZGVFZmZlY3RcIixcImFcIixcImpvc2hcIl1dLFwic3RlcFwiOltbXCJWXCIse1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjF9XSxbXCJ2YWx1ZXNcIixcIm5hbWVcIl0sW1wid2hlcmVcIix7XCJAdHlwZVwiOlwiZzpQXCIsXCJAdmFsdWVcIjp7XCJwcmVkaWNhdGVcIjpcIndpdGhpblwiLFwidmFsdWVcIjpcImFcIn19XV19fSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRHcmFwaFNvbiwgZ3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplQnl0ZWNvZGVXaXRoQmluZGluZ3MoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICAgICAgYnl0ZWNvZGUuQWRkU3RlcCgiViIsIG5ldyBCaW5kaW5nKCJpZCIsIDEyMykpOwotICAgICAgICAgICAgdmFyIGdyYXBoc29uV3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IGdyYXBoc29uV3JpdGVyLldyaXRlT2JqZWN0KGJ5dGVjb2RlKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTb24gPQotICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpCeXRlY29kZVwiLFwiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJWXCIse1wiQHR5cGVcIjpcImc6QmluZGluZ1wiLFwiQHZhbHVlXCI6e1widmFsdWVcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6MTIzfSxcImtleVwiOlwiaWRcIn19XV19fSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRHcmFwaFNvbiwgZ3JhcGhTb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50ZXJuYWwgY2xhc3MgVGVzdFRyYXZlcnNhbCA6IERlZmF1bHRUcmF2ZXJzYWw8b2JqZWN0LCBvYmplY3Q+Ci0gICAgewotICAgICAgICBwdWJsaWMgVGVzdFRyYXZlcnNhbChCeXRlY29kZSBieXRlY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgQnl0ZWNvZGUgPSBieXRlY29kZTsKLSAgICAgICAgICAgIElzQW5vbnltb3VzID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBvdmVycmlkZSBCeXRlY29kZSBCeXRlY29kZSB7IGdldDsgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT04zTWVzc2FnZVNlcmlhbGl6ZXJUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkMzcwNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplclRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAot77u/I3JlZ2lvbiBMaWNlbnNlCi0KLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNlbmRyZWdpb24KLQotdXNpbmcgU3lzdGVtOwotdXNpbmcgU3lzdGVtLlRocmVhZGluZzsKLXVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7Ci11c2luZyBHcmVtbGluLk5ldC5Ecml2ZXIuTWVzc2FnZXM7Ci11c2luZyBHcmVtbGluLk5ldC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT047Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTjsKLQotcHVibGljIGNsYXNzIEdyYXBoU09OM01lc3NhZ2VTZXJpYWxpemVyVGVzdHMKLXsKLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgYXN5bmMgVGFzayBTZXJpYWxpemVNZXNzYWdlQXN5bmNTaG91bGRTdXBwb3J0Q2FuY2VsbGF0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzZXJpYWxpemVyID0gQ3JlYXRlTWVzc2FnZVNlcmlhbGl6ZXIoKTsKLQotICAgICAgICBhd2FpdCBBc3NlcnQuVGhyb3dzQXN5bmM8T3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24+KGFzeW5jICgpID0+Ci0gICAgICAgICAgICBhd2FpdCBzZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2VBc3luYyhSZXF1ZXN0TWVzc2FnZS5CdWlsZChzdHJpbmcuRW1wdHkpLkNyZWF0ZSgpLAotICAgICAgICAgICAgICAgIG5ldyBDYW5jZWxsYXRpb25Ub2tlbih0cnVlKSkpOwotICAgIH0KLSAgICAKLSAgICBbRmFjdF0KLSAgICBwdWJsaWMgYXN5bmMgVGFzayBEZXNlcmlhbGl6ZU1lc3NhZ2VBc3luY1Nob3VsZFN1cHBvcnRDYW5jZWxsYXRpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNlcmlhbGl6ZXIgPSBDcmVhdGVNZXNzYWdlU2VyaWFsaXplcigpOwotCi0gICAgICAgIGF3YWl0IEFzc2VydC5UaHJvd3NBc3luYzxPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbj4oYXN5bmMgKCkgPT4KLSAgICAgICAgICAgIGF3YWl0IHNlcmlhbGl6ZXIuRGVzZXJpYWxpemVNZXNzYWdlQXN5bmMoQXJyYXkuRW1wdHk8Ynl0ZT4oKSwgbmV3IENhbmNlbGxhdGlvblRva2VuKHRydWUpKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhTT04zTWVzc2FnZVNlcmlhbGl6ZXIgQ3JlYXRlTWVzc2FnZVNlcmlhbGl6ZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFNPTjNNZXNzYWdlU2VyaWFsaXplcigpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTlJlYWRlclRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05SZWFkZXJUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRhN2ZlOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTlJlYWRlclRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNzA4ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLk51bWVyaWNzOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlOwotdXNpbmcgR3JlbWxpbi5OZXQuU3RydWN0dXJlLklPLkdyYXBoU09OOwotdXNpbmcgTlN1YnN0aXR1dGU7Ci11c2luZyBYdW5pdDsKLQotbmFtZXNwYWNlIEdyZW1saW4uTmV0LlVuaXRUZXN0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTgotewotICAgIHB1YmxpYyBjbGFzcyBHcmFwaFNPTlJlYWRlclRlc3RzCi0gICAgewotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJhbWV0ZXJzIGZvciBlYWNoIHRlc3Qgc3VwcG9ydGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBHcmFwaFNPTgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPG9iamVjdFtdPiBWZXJzaW9ucyA9PiBuZXcgW10KLSAgICAgICAgewotICAgICAgICAgICAgbmV3IG9iamVjdFtdIHsgMiB9LAotICAgICAgICAgICAgbmV3IG9iamVjdFtdIHsgMyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyYW1ldGVycyBmb3IgZWFjaCBjb2xsZWN0aW9ucyB0ZXN0IHN1cHBvcnRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgR3JhcGhTT04KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBJRW51bWVyYWJsZTxvYmplY3RbXT4gVmVyc2lvbnNTdXBwb3J0aW5nQ29sbGVjdGlvbnMgPT4gbmV3IFtdCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBvYmplY3RbXSB7IDMgfQotICAgICAgICB9OwotCi0gICAgICAgIHByaXZhdGUgR3JhcGhTT05SZWFkZXIgQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcihpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gMykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OM1JlYWRlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFNPTjJSZWFkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZVdpdGhDdXN0b21EZXNlcmlhbGl6ZXJGb3JOZXdUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplckJ5R3JhcGhTT05UeXBlID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBJR3JhcGhTT05EZXNlcmlhbGl6ZXI+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJOUzpUZXN0Q2xhc3MiLCBuZXcgVGVzdEdyYXBoU09ORGVzZXJpYWxpemVyKCl9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBHcmFwaFNPTjJSZWFkZXIoZGVzZXJpYWxpemVyQnlHcmFwaFNPTlR5cGUpOwotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU09OID0gIntcIkB0eXBlXCI6XCJOUzpUZXN0Q2xhc3NcIixcIkB2YWx1ZVwiOlwidGVzdFwifSI7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU09OKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ0ZXN0IiwgZGVzZXJpYWxpemVkVmFsdWUhLlZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplV2l0aEN1c3RvbURlc2VyaWFsaXplckZvckNvbW1vblR5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgY3VzdG9tU2VyaWFsaXplck1vY2sgPSBTdWJzdGl0dXRlLkZvcjxJR3JhcGhTT05EZXNlcmlhbGl6ZXI+KCk7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgb3ZlcnJpZGVUeXBlU3RyaW5nID0gImc6SW50NjQiOwotICAgICAgICAgICAgdmFyIGN1c3RvbVNlcmlhbGl6ZXJCeVR5cGUgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIElHcmFwaFNPTkRlc2VyaWFsaXplcj4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7b3ZlcnJpZGVUeXBlU3RyaW5nLCBjdXN0b21TZXJpYWxpemVyTW9ja30KLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEdyYXBoU09OMlJlYWRlcihjdXN0b21TZXJpYWxpemVyQnlUeXBlKTsKLQotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0KLSAgICAgICAgICAgICAgICBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oJCJ7e1wiQHR5cGVcIjpcIntvdmVycmlkZVR5cGVTdHJpbmd9XCIsXCJAdmFsdWVcIjoxMn19Iik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotCi0gICAgICAgICAgICBjdXN0b21TZXJpYWxpemVyTW9jay5SZWNlaXZlZCgxKS5PYmplY3RpZnkoQXJnLkFueTxKc29uRWxlbWVudD4oKSwgQXJnLkFueTxHcmFwaFNPTlJlYWRlcj4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplRGF0ZVRvRGF0ZVRpbWVPZmZzZXQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZzpEYXRlXCIsXCJAdmFsdWVcIjoxNDc1NTgzNDQyNTUyfSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWREYXRlVGltZU9mZnNldCA9IFRlc3RVdGlscy5Gcm9tSmF2YVRpbWUoMTQ3NTU4MzQ0MjU1Mik7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWREYXRlVGltZU9mZnNldCwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZURpY3Rpb25hcnkoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBzZXJpYWxpemVkRGljdCA9ICJ7XCJhZ2VcIjpbe1wiQHR5cGVcIjpcImc6SW50MzJcIiwgXCJAdmFsdWVcIjoyOX1dLCBcIm5hbWVcIjpbXCJtYXJrb1wiXSwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJnZW5kZXJcIjogbnVsbH0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWREaWN0KTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGV4cGVjdGVkRGljdCA9IG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz8+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeyJhZ2UiLCBuZXcgTGlzdDxvYmplY3Q+IHsyOX19LAotICAgICAgICAgICAgICAgIHsibmFtZSIsIG5ldyBMaXN0PG9iamVjdD4geyJtYXJrbyJ9fSwKLSAgICAgICAgICAgICAgICB7ImdlbmRlciIsIG51bGx9Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkRGljdCwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUVkZ2UoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZzpFZGdlXCIsIFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLCBcIkB2YWx1ZVwiOjE3fSwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJsYWJlbFwiOlwia25vd3NcIiwgXCJpblZcIjpcInhcIiwgXCJvdXRWXCI6XCJ5XCIsIFwiaW5WTGFiZWxcIjpcInhMYWJcIiwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJwcm9wZXJ0aWVzXCI6e1wiYUtleVwiOlwiYVZhbHVlXCIsIFwiYktleVwiOnRydWV9fX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIEVkZ2UgcmVhZEVkZ2UgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpITsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoKGxvbmcpIDE3LCByZWFkRWRnZS5JZCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImtub3dzIiwgcmVhZEVkZ2UuTGFiZWwpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBWZXJ0ZXgoIngiLCAieExhYmVsIiksIHJlYWRFZGdlLkluVik7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IFZlcnRleCgieSIpLCByZWFkRWRnZS5PdXRWKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVJbnQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkVmFsdWUgPSAie1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjV9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDUsIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVMb25nKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgc2VyaWFsaXplZFZhbHVlID0gIntcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjo1fSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKChsb25nKSA1LCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplRmxvYXQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBzZXJpYWxpemVkVmFsdWUgPSAie1wiQHR5cGVcIjpcImc6RmxvYXRcIixcIkB2YWx1ZVwiOjMxLjN9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoKGZsb2F0KSAzMS4zLCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplRG91YmxlKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgc2VyaWFsaXplZFZhbHVlID0gIntcIkB0eXBlXCI6XCJnOkRvdWJsZVwiLFwiQHZhbHVlXCI6MzEuMn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgzMS4yLCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplTmFOKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgc2VyaWFsaXplZFZhbHVlID0gIntcIkB0eXBlXCI6XCJnOkRvdWJsZVwiLFwiQHZhbHVlXCI6XCJOYU5cIn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChEb3VibGUuTmFOLCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplUG9zaXRpdmVJbmZpbml0eShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZSA9ICJ7XCJAdHlwZVwiOlwiZzpEb3VibGVcIixcIkB2YWx1ZVwiOlwiSW5maW5pdHlcIn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChkb3VibGUuUG9zaXRpdmVJbmZpbml0eSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZU5lZ2F0aXZlSW5maW5pdHkoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBzZXJpYWxpemVkVmFsdWUgPSAie1wiQHR5cGVcIjpcImc6RG91YmxlXCIsXCJAdmFsdWVcIjpcIi1JbmZpbml0eVwifSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGRvdWJsZS5OZWdhdGl2ZUluZmluaXR5LCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplRGVjaW1hbChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZSA9ICJ7XCJAdHlwZVwiOlwiZ3g6QmlnRGVjaW1hbFwiLFwiQHZhbHVlXCI6LTguMjAxfSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKC04LjIwMU0sIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVEZWNpbWFsVmFsdWVBc1N0cmluZyhpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZSA9ICJ7XCJAdHlwZVwiOlwiZ3g6QmlnRGVjaW1hbFwiLFwiQHZhbHVlXCI6XCI3LjUwXCJ9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICAgICAgZGVjaW1hbCBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDcuNU0sIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVCeXRlKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgc2VyaWFsaXplZFZhbHVlID0gIntcIkB0eXBlXCI6XCJneDpCeXRlXCIsXCJAdmFsdWVcIjoxfSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDEsIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1R5cGU8c2J5dGU+KGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVCeXRlTmVnYXRpdmUoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBzZXJpYWxpemVkVmFsdWUgPSAie1wiQHR5cGVcIjpcImd4OkJ5dGVcIixcIkB2YWx1ZVwiOi00Mn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgtNDIsIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIEFzc2VydC5Jc1R5cGU8c2J5dGU+KGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVDaGFyKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgc2VyaWFsaXplZFZhbHVlID0gIntcIkB0eXBlXCI6XCJneDpDaGFyXCIsXCJAdmFsdWVcIjpcInhcIn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgneCcsIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVMaXN0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgc2VyaWFsaXplZFZhbHVlID0gIlt7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOjV9LCB7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJAdmFsdWVcIjo2fSwgbnVsbF0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgTGlzdDxvYmplY3Q/PiB7NSwgNiwgbnVsbH0sIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVUKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZ3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImc6VFwiLFwiQHZhbHVlXCI6XCJsYWJlbFwifSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgVCByZWFkVCA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCkhOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChULkxhYmVsLCByZWFkVCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZURpcmVjdGlvbihpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZSA9ICJ7XCJAdHlwZVwiOlwiZzpEaXJlY3Rpb25cIixcIkB2YWx1ZVwiOlwiT1VUXCJ9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoRGlyZWN0aW9uLk91dCwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVEVChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZSA9ICJ7XCJAdHlwZVwiOlwiZzpEVFwiLFwiQHZhbHVlXCI6XCJtaW51dGVcIn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKERULk1pbnV0ZSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVNZXJnZShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIHNlcmlhbGl6ZWRWYWx1ZSA9ICJ7XCJAdHlwZVwiOlwiZzpNZXJnZVwiLFwiQHZhbHVlXCI6XCJvbk1hdGNoXCJ9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChNZXJnZS5Pbk1hdGNoLCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplR1R5cGUoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBzZXJpYWxpemVkVmFsdWUgPSAie1wiQHR5cGVcIjpcImc6R1R5cGVcIixcIkB2YWx1ZVwiOlwiQllURVwifSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KHNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoR1R5cGUuQnl0ZSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVQYXRoRnJvbUdyYXBoU09OMigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOlBhdGhcIixcIkB2YWx1ZVwiOntcImxhYmVsc1wiOltbXCJhXCJdLFtcImJcIixcImNcIl0sW11dLFwib2JqZWN0c1wiOlt7XCJAdHlwZVwiOlwiZzpWZXJ0ZXhcIixcIkB2YWx1ZVwiOntcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjF9LFwibGFiZWxcIjpcInBlcnNvblwiLFwicHJvcGVydGllc1wiOntcIm5hbWVcIjpbe1wiQHR5cGVcIjpcImc6VmVydGV4UHJvcGVydHlcIixcIkB2YWx1ZVwiOntcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50NjRcIixcIkB2YWx1ZVwiOjB9LFwidmFsdWVcIjpcIm1hcmtvXCIsXCJsYWJlbFwiOlwibmFtZVwifX1dLFwiYWdlXCI6W3tcIkB0eXBlXCI6XCJnOlZlcnRleFByb3BlcnR5XCIsXCJAdmFsdWVcIjp7XCJpZFwiOntcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjoxfSxcInZhbHVlXCI6e1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjI5fSxcImxhYmVsXCI6XCJhZ2VcIn19XX19fSx7XCJAdHlwZVwiOlwiZzpWZXJ0ZXhcIixcIkB2YWx1ZVwiOntcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjN9LFwibGFiZWxcIjpcInNvZnR3YXJlXCIsXCJwcm9wZXJ0aWVzXCI6e1wibmFtZVwiOlt7XCJAdHlwZVwiOlwiZzpWZXJ0ZXhQcm9wZXJ0eVwiLFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6NH0sXCJ2YWx1ZVwiOlwibG9wXCIsXCJsYWJlbFwiOlwibmFtZVwifX1dLFwibGFuZ1wiOlt7XCJAdHlwZVwiOlwiZzpWZXJ0ZXhQcm9wZXJ0eVwiLFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6NX0sXCJ2YWx1ZVwiOlwiamF2YVwiLFwibGFiZWxcIjpcImxhbmdcIn19XX19fSxcImxvcFwiXX19IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKDIpOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICBQYXRoIHJlYWRQYXRoID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KSE7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJwYXRoW3ZbMV0sIHZbM10sIGxvcF0iLCByZWFkUGF0aC5Ub1N0cmluZygpKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgVmVydGV4KDEpLCByZWFkUGF0aFswXSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IFZlcnRleCgxKSwgcmVhZFBhdGhbImEiXSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImxvcCIsIHJlYWRQYXRoWzJdKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgzLCByZWFkUGF0aC5Db3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZVBhdGhGcm9tR3JhcGhTT04zKCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0gIntcIkB0eXBlXCI6XCJnOlBhdGhcIixcIkB2YWx1ZVwiOnsiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcImxhYmVsc1wiOntcIkB0eXBlXCI6XCJnOkxpc3RcIixcIkB2YWx1ZVwiOlt7XCJAdHlwZVwiOlwiZzpTZXRcIixcIkB2YWx1ZVwiOltcInpcIl19XX0sIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJvYmplY3RzXCI6e1wiQHR5cGVcIjpcImc6TGlzdFwiLFwiQHZhbHVlXCI6W3tcIkB0eXBlXCI6XCJnOlZlcnRleFwiLFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6NX0sXCJsYWJlbFwiOlwiXCJ9fV19fX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIoMyk7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIFBhdGggcmVhZFBhdGggPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpITsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoInBhdGhbdls1XV0iLCByZWFkUGF0aC5Ub1N0cmluZygpKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgVmVydGV4KDVMKSwgcmVhZFBhdGhbMF0pOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBWZXJ0ZXgoNUwpLCByZWFkUGF0aFsieiJdKTsKLSAgICAgICAgICAgIEFzc2VydC5TaW5nbGUocmVhZFBhdGgpOwotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KHJlYWRQYXRoWzBdIS5Qcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVQcm9wZXJ0eVdpdGhFZGdlRWxlbWVudChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0gIntcIkB0eXBlXCI6XCJnOlByb3BlcnR5XCIsIFwiQHZhbHVlXCI6e1wia2V5XCI6XCJhS2V5XCIsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwidmFsdWVcIjp7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLCBcIkB2YWx1ZVwiOjE3fSwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJlbGVtZW50XCI6e1wiQHR5cGVcIjpcImc6RWRnZVwiLCBcIkB2YWx1ZVwiOntcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50NjRcIiwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJAdmFsdWVcIjoxMjJ9LCBcImxhYmVsXCI6XCJrbm93c1wiLCBcImluVlwiOlwieFwiLCBcIm91dFZcIjpcInlcIiwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJpblZMYWJlbFwiOlwieExhYlwifX19fSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgUHJvcGVydHkgcmVhZFByb3BlcnR5ID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KSE7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJhS2V5IiwgcmVhZFByb3BlcnR5LktleSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoKGxvbmcpIDE3LCByZWFkUHJvcGVydHkuVmFsdWUpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKHR5cGVvZihFZGdlKSwgcmVhZFByb3BlcnR5LkVsZW1lbnQhLkdldFR5cGUoKSk7Ci0gICAgICAgICAgICB2YXIgZWRnZSA9IHJlYWRQcm9wZXJ0eS5FbGVtZW50IGFzIEVkZ2U7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoKGxvbmcpIDEyMiwgZWRnZSEuSWQpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJrbm93cyIsIGVkZ2UuTGFiZWwpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ4IiwgZWRnZS5JblYuSWQpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ5IiwgZWRnZS5PdXRWLklkKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVUaW1lc3RhbXBUb0RhdGVUaW1lT2Zmc2V0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZ3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImc6VGltZXN0YW1wXCIsXCJAdmFsdWVcIjoxNDc1NTgzNDQyNTU4fSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWREYXRlVGltZU9mZnNldCA9IFRlc3RVdGlscy5Gcm9tSmF2YVRpbWUoMTQ3NTU4MzQ0MjU1OCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWREYXRlVGltZU9mZnNldCwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUd1aWQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZzpVVUlEXCIsXCJAdmFsdWVcIjpcIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NlwifSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoR3VpZC5QYXJzZSgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IiksIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVWZXJ0ZXhQcm9wZXJ0eShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0gIntcIkB0eXBlXCI6XCJnOlZlcnRleFByb3BlcnR5XCIsIFwiQHZhbHVlXCI6e1wiaWRcIjpcImFuSWRcIiwgXCJsYWJlbFwiOlwiYUtleVwiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcInZhbHVlXCI6dHJ1ZSwgXCJ2ZXJ0ZXhcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOjl9fX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIFZlcnRleFByb3BlcnR5IHJlYWRWZXJ0ZXhQcm9wZXJ0eSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCkhOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgiYW5JZCIsIHJlYWRWZXJ0ZXhQcm9wZXJ0eS5JZCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImFLZXkiLCByZWFkVmVydGV4UHJvcGVydHkuTGFiZWwpOwotICAgICAgICAgICAgQXNzZXJ0LlRydWUocmVhZFZlcnRleFByb3BlcnR5LlZhbHVlKTsKLSAgICAgICAgICAgIEFzc2VydC5Ob3ROdWxsKHJlYWRWZXJ0ZXhQcm9wZXJ0eS5WZXJ0ZXgpOwotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KHJlYWRWZXJ0ZXhQcm9wZXJ0eS5Qcm9wZXJ0aWVzKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVWZXJ0ZXhQcm9wZXJ0eVdpdGhMYWJlbChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0gIntcIkB0eXBlXCI6XCJnOlZlcnRleFByb3BlcnR5XCIsIFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIkB2YWx1ZVwiOjF9LCBcImxhYmVsXCI6XCJuYW1lXCIsIFwidmFsdWVcIjpcIm1hcmtvXCJ9fSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgVmVydGV4UHJvcGVydHkgcmVhZFZlcnRleFByb3BlcnR5ID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KSE7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKDEsIHJlYWRWZXJ0ZXhQcm9wZXJ0eS5JZCk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIm5hbWUiLCByZWFkVmVydGV4UHJvcGVydHkuTGFiZWwpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJtYXJrbyIsIHJlYWRWZXJ0ZXhQcm9wZXJ0eS5WYWx1ZSk7Ci0gICAgICAgICAgICBBc3NlcnQuTnVsbChyZWFkVmVydGV4UHJvcGVydHkuVmVydGV4KTsKLSAgICAgICAgICAgIEFzc2VydC5FbXB0eShyZWFkVmVydGV4UHJvcGVydHkuUHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplVmVydGV4KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZ3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImc6VmVydGV4XCIsIFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpGbG9hdFwiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIkB2YWx1ZVwiOjQ1LjIzfX19IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgVmVydGV4KDQ1LjIzZiksIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgICAgIEFzc2VydC5FbXB0eShkZXNlcmlhbGl6ZWRWYWx1ZSEuUHJvcGVydGllcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplVmVydGV4V2l0aExhYmVsKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZ3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImc6VmVydGV4XCIsIFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpGbG9hdFwiLCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIkB2YWx1ZVwiOjQ1LjIzfSwgXCJsYWJlbFwiOiBcInBlcnNvblwifX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIFZlcnRleCBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCkhOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgicGVyc29uIiwgZGVzZXJpYWxpemVkVmFsdWUuTGFiZWwpOwotICAgICAgICAgICAgQXNzZXJ0LkVtcHR5KGRlc2VyaWFsaXplZFZhbHVlLlByb3BlcnRpZXMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZVZlcnRleFdpdGhFZGdlcyhpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0KLSAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6VmVydGV4XCIsIFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6MX0sXCJsYWJlbFwiOlwicGVyc29uXCIsXCJvdXRFXCI6e1wiY3JlYXRlZFwiOlt7XCJpZFwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo5fSxcImluVlwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjozfSxcInByb3BlcnRpZXNcIjp7XCJ3ZWlnaHRcIjp7XCJAdHlwZVwiOlwiZzpEb3VibGVcIixcIkB2YWx1ZVwiOjAuNH19fV0sXCJrbm93c1wiOlt7XCJpZFwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo3fSxcImluVlwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoyfSxcInByb3BlcnRpZXNcIjp7XCJ3ZWlnaHRcIjp7XCJAdHlwZVwiOlwiZzpEb3VibGVcIixcIkB2YWx1ZVwiOjAuNX19fSx7XCJpZFwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo4fSxcImluVlwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo0fSxcInByb3BlcnRpZXNcIjp7XCJ3ZWlnaHRcIjp7XCJAdHlwZVwiOlwiZzpEb3VibGVcIixcIkB2YWx1ZVwiOjEuMH19fV19LFwicHJvcGVydGllc1wiOntcIm5hbWVcIjpbe1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6MH0sXCJ2YWx1ZVwiOlwibWFya29cIn1dLFwiYWdlXCI6W3tcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50NjRcIixcIkB2YWx1ZVwiOjF9LFwidmFsdWVcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6Mjl9fV19fX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIFZlcnRleCByZWFkVmVydGV4ID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KSE7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKG5ldyBWZXJ0ZXgoMSksIHJlYWRWZXJ0ZXgpOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJwZXJzb24iLCByZWFkVmVydGV4LkxhYmVsKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCh0eXBlb2YoaW50KSwgcmVhZFZlcnRleC5JZCEuR2V0VHlwZSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnNTdXBwb3J0aW5nQ29sbGVjdGlvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVFbXB0eUdMaXN0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZ3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImc6TGlzdFwiLCBcIkB2YWx1ZVwiOiBbXX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIG9iamVjdFtdIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKEFycmF5LkVtcHR5PG9iamVjdD4oKSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUdMaXN0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcganNvbiA9ICJ7XCJAdHlwZVwiOlwiZzpMaXN0XCIsIFwiQHZhbHVlXCI6IFt7XCJAdHlwZVwiOiBcImc6SW50MzJcIiwgXCJAdmFsdWVcIjogMX0sIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOiBcImc6SW50MzJcIiwgXCJAdmFsdWVcIjogMn0sIHtcIkB0eXBlXCI6IFwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOiAzfV19IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50Pihqc29uKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKChJTGlzdDxvYmplY3Q+KW5ldyBvYmplY3RbXSB7IDEsIDIsIDN9LCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zU3VwcG9ydGluZ0NvbGxlY3Rpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplR1NldChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0gIntcIkB0eXBlXCI6XCJnOlNldFwiLCBcIkB2YWx1ZVwiOiBbe1wiQHR5cGVcIjogXCJnOkludDMyXCIsIFwiQHZhbHVlXCI6IDF9LCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6IFwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOiAyfSwge1wiQHR5cGVcIjogXCJnOkludDMyXCIsIFwiQHZhbHVlXCI6IDN9XX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKChJU2V0PG9iamVjdD4pbmV3IEhhc2hTZXQ8b2JqZWN0PnsgMSwgMiwgM30sIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnNTdXBwb3J0aW5nQ29sbGVjdGlvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVHTWFwKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcganNvbiA9ICJ7XCJAdHlwZVwiOlwiZzpNYXBcIiwgXCJAdmFsdWVcIjogW1wiYVwiLHtcIkB0eXBlXCI6IFwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOiAxfSwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcImJcIiwge1wiQHR5cGVcIjogXCJnOkludDMyXCIsIFwiQHZhbHVlXCI6IDJ9XX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGpzb24pOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+eyB7ICJhIiwgMSB9LCB7ICJiIiwgMiB9fSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUdNYXBXaXRoTm9uU3RyaW5nS2V5cyhpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGpzb24gPSAie1wiQHR5cGVcIjpcImc6TWFwXCIsIFwiQHZhbHVlXCI6IFt7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOjEyM30sIFwicmVkXCJdfSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oanNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD57IHsgMTIzLCAicmVkIiB9fSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUJ1bGtTZXQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOiBcImc6QnVsa1NldFwiLCBcIkB2YWx1ZVwiOiBbIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJtYXJrb1wiLCB7XCJAdHlwZVwiOiBcImc6SW50NjRcIiwgXCJAdmFsdWVcIjogMX0sICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiam9zaFwiLCB7XCJAdHlwZVwiOiBcImc6SW50NjRcIiwgXCJAdmFsdWVcIjogM31dfSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwobmV3IExpc3Q8b2JqZWN0PnsgIm1hcmtvIiwgImpvc2giLCAiam9zaCIsICJqb3NoIiB9LCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtGYWN0XQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUJ1bGtTZXRXaXRoR3JhcGhTT04zKCkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGdyYXBoU29uID0KLSAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6TGlzdFwiLFwiQHZhbHVlXCI6W3tcIkB0eXBlXCI6XCJnOlRyYXZlcnNlclwiLFwiQHZhbHVlXCI6e1wiYnVsa1wiOntcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjoxfSxcInZhbHVlXCI6e1wiQHR5cGVcIjpcImc6QnVsa1NldFwiLFwiQHZhbHVlXCI6W3tcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjoxfSx7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6Mn0se1wiQHR5cGVcIjpcImc6SW50NjRcIixcIkB2YWx1ZVwiOjB9LHtcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjozfSx7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6Mn0se1wiQHR5cGVcIjpcImc6SW50NjRcIixcIkB2YWx1ZVwiOjF9LHtcIkB0eXBlXCI6XCJnOkRvdWJsZVwiLFwiQHZhbHVlXCI6MS4wfSx7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6Mn1dfX19XX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIoMyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZVRyYXZlcnNlcihpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGpzb24gPSAie1wiQHR5cGVcIjpcImc6VHJhdmVyc2VyXCIsIFwiQHZhbHVlXCI6e1wiYnVsa1wiOntcIkB0eXBlXCI6XCJnOkludDY0XCIsICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJAdmFsdWVcIjoxMH0sIFwidmFsdWVcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLCBcIkB2YWx1ZVwiOjF9fX0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGpzb24pOwotICAgICAgICAgICAgVHJhdmVyc2VyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KSE7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgxMCwgZGVzZXJpYWxpemVkVmFsdWUuQnVsayk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMSwgZGVzZXJpYWxpemVkVmFsdWUuT2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVEdXJhdGlvblRvVGltZVNwYW4oaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZ3g6RHVyYXRpb25cIixcIkB2YWx1ZVwiOlwiUFQxMjBIXCJ9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChUaW1lU3Bhbi5Gcm9tRGF5cyg1KSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUJpZ0ludGVnZXIoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZ3g6QmlnSW50ZWdlclwiLFwiQHZhbHVlXCI6MTIzNDU2Nzg5fSI7Ci0gICAgICAgICAgICB2YXIgcmVhZGVyID0gQ3JlYXRlU3RhbmRhcmRHcmFwaFNPTlJlYWRlcih2ZXJzaW9uKTsKLSAgICAgICAgCi0gICAgICAgICAgICB2YXIganNvbkVsZW1lbnQgPSBKc29uU2VyaWFsaXplci5EZXNlcmlhbGl6ZTxKc29uRWxlbWVudD4oZ3JhcGhTb24pOwotICAgICAgICAgICAgdmFyIGRlc2VyaWFsaXplZFZhbHVlID0gcmVhZGVyLlRvT2JqZWN0KGpzb25FbGVtZW50KTsKLSAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoQmlnSW50ZWdlci5QYXJzZSgiMTIzNDU2Nzg5IiksIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkRGVzZXJpYWxpemVCaWdJbnRlZ2VyVmFsdWVBc1N0cmluZyhpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gIntcIkB0eXBlXCI6XCJneDpCaWdJbnRlZ2VyXCIsIFwiQHZhbHVlXCI6XCIxMjM0NTY3ODlcIn0iOwotICAgICAgICAgICAgdmFyIHJlYWRlciA9IENyZWF0ZVN0YW5kYXJkR3JhcGhTT05SZWFkZXIodmVyc2lvbik7Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIGpzb25FbGVtZW50ID0gSnNvblNlcmlhbGl6ZXIuRGVzZXJpYWxpemU8SnNvbkVsZW1lbnQ+KGdyYXBoU29uKTsKLSAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZWRWYWx1ZSA9IHJlYWRlci5Ub09iamVjdChqc29uRWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKEJpZ0ludGVnZXIuUGFyc2UoIjEyMzQ1Njc4OSIpLCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplUmVhbGx5QmlnSW50ZWdlclZhbHVlKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZ3JhcGhTb24gPSAie1wiQHR5cGVcIjpcImd4OkJpZ0ludGVnZXJcIiwgXCJAdmFsdWVcIjoxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjF9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChCaWdJbnRlZ2VyLlBhcnNlKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKSwgZGVzZXJpYWxpemVkVmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGREZXNlcmlhbGl6ZUJ5dGVCdWZmZXIoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZ3g6Qnl0ZUJ1ZmZlclwiLCBcIkB2YWx1ZVwiOlwiYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxXCJ9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChDb252ZXJ0LkZyb21CYXNlNjRTdHJpbmcoImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MSIpLCBkZXNlcmlhbGl6ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZERlc2VyaWFsaXplSW50MTYoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBncmFwaFNvbiA9ICJ7XCJAdHlwZVwiOlwiZ3g6SW50MTZcIiwgXCJAdmFsdWVcIjoxMDB9IjsKLSAgICAgICAgICAgIHZhciByZWFkZXIgPSBDcmVhdGVTdGFuZGFyZEdyYXBoU09OUmVhZGVyKHZlcnNpb24pOwotICAgICAgICAKLSAgICAgICAgICAgIHZhciBqc29uRWxlbWVudCA9IEpzb25TZXJpYWxpemVyLkRlc2VyaWFsaXplPEpzb25FbGVtZW50PihncmFwaFNvbik7Ci0gICAgICAgICAgICB2YXIgZGVzZXJpYWxpemVkVmFsdWUgPSByZWFkZXIuVG9PYmplY3QoanNvbkVsZW1lbnQpOwotICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgxMDAsIGRlc2VyaWFsaXplZFZhbHVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludGVybmFsIGNsYXNzIFRlc3RHcmFwaFNPTkRlc2VyaWFsaXplciA6IElHcmFwaFNPTkRlc2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIGR5bmFtaWMgT2JqZWN0aWZ5KEpzb25FbGVtZW50IGdyYXBoc29uT2JqZWN0LCBHcmFwaFNPTlJlYWRlciByZWFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgVGVzdENsYXNzIHtWYWx1ZSA9IGdyYXBoc29uT2JqZWN0LkdldFN0cmluZygpfTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTldyaXRlclRlc3RzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vR3JhcGhTT05Xcml0ZXJUZXN0cy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkZTAxYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9HcmFwaFNPTldyaXRlclRlc3RzLmNzCisrKyAvZGV2L251bGwKQEAgLTEsNjU3ICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLXVzaW5nIFN5c3RlbTsKLXVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwotdXNpbmcgU3lzdGVtLk51bWVyaWNzOwotdXNpbmcgU3lzdGVtLlRleHQuSnNvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsOwotdXNpbmcgR3JlbWxpbi5OZXQuUHJvY2Vzcy5UcmF2ZXJzYWwuU3RyYXRlZ3kuRGVjb3JhdGlvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlN0cmF0ZWd5Lk9wdGltaXphdGlvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlByb2Nlc3MuVHJhdmVyc2FsLlN0cmF0ZWd5LlZlcmlmaWNhdGlvbjsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZTsKLXVzaW5nIEdyZW1saW4uTmV0LlN0cnVjdHVyZS5JTy5HcmFwaFNPTjsKLXVzaW5nIFh1bml0OwotCi1uYW1lc3BhY2UgR3JlbWxpbi5OZXQuVW5pdFRlc3QuU3RydWN0dXJlLklPLkdyYXBoU09OCi17Ci0gICAgcHVibGljIGNsYXNzIEdyYXBoU09OV3JpdGVyVGVzdHMKLSAgICB7Ci0gICAgICAgIC8vLyA8c3VtbWFyeT4KLSAgICAgICAgLy8vIFBhcmFtZXRlcnMgZm9yIGVhY2ggdGVzdCBzdXBwb3J0aW5nIG11bHRpcGxlIHZlcnNpb25zIG9mIEdyYXBoU09OCi0gICAgICAgIC8vLyA8L3N1bW1hcnk+Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgSUVudW1lcmFibGU8b2JqZWN0W10+IFZlcnNpb25zID0+IG5ldyBbXQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXcgb2JqZWN0W10geyAyIH0sCi0gICAgICAgICAgICBuZXcgb2JqZWN0W10geyAzIH0KLSAgICAgICAgfTsKLQotICAgICAgICAvLy8gPHN1bW1hcnk+Ci0gICAgICAgIC8vLyBQYXJhbWV0ZXJzIGZvciBlYWNoIGNvbGxlY3Rpb25zIHRlc3Qgc3VwcG9ydGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBHcmFwaFNPTgotICAgICAgICAvLy8gPC9zdW1tYXJ5PgotICAgICAgICBwdWJsaWMgc3RhdGljIElFbnVtZXJhYmxlPG9iamVjdFtdPiBWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucyA9PiBuZXcgW10KLSAgICAgICAgewotICAgICAgICAgICAgbmV3IG9iamVjdFtdIHsgMyB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8vIDxzdW1tYXJ5PgotICAgICAgICAvLy8gUGFyYW1ldGVycyBmb3IgZWFjaCBjb2xsZWN0aW9ucyB0ZXN0IHN1cHBvcnRpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgR3JhcGhTT04KLSAgICAgICAgLy8vIDwvc3VtbWFyeT4KLSAgICAgICAgcHVibGljIHN0YXRpYyBJRW51bWVyYWJsZTxvYmplY3RbXT4gVmVyc2lvbnNOb3RTdXBwb3J0aW5nQ29sbGVjdGlvbnMgPT4gbmV3IFtdCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5ldyBvYmplY3RbXSB7IDIgfQotICAgICAgICB9OwotCi0gICAgICAgIHByaXZhdGUgR3JhcGhTT05Xcml0ZXIgQ3JlYXRlR3JhcGhTT05Xcml0ZXIoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IDMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaFNPTjNXcml0ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT04yV3JpdGVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVJbnQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KDEpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoxfSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUxvbmcoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KChsb25nKSAyKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6Mn0iLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVGbG9hdChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTb24gPSB3cml0ZXIuV3JpdGVPYmplY3QoKGZsb2F0KSAzLjIpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIntcIkB0eXBlXCI6XCJnOkZsb2F0XCIsXCJAdmFsdWVcIjozLjJ9IiwgZ3JhcGhTb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplRG91YmxlKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdCgzLjIpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIntcIkB0eXBlXCI6XCJnOkRvdWJsZVwiLFwiQHZhbHVlXCI6My4yfSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZU5hTihpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTb24gPSB3cml0ZXIuV3JpdGVPYmplY3QoRG91YmxlLk5hTik7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgie1wiQHR5cGVcIjpcImc6RG91YmxlXCIsXCJAdmFsdWVcIjpcIk5hTlwifSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVBvc2l0aXZlSW5maW5pdHkoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KERvdWJsZS5Qb3NpdGl2ZUluZmluaXR5KTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ7XCJAdHlwZVwiOlwiZzpEb3VibGVcIixcIkB2YWx1ZVwiOlwiSW5maW5pdHlcIn0iLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVOZWdhdGl2ZUluZmluaXR5KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdChEb3VibGUuTmVnYXRpdmVJbmZpbml0eSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgie1wiQHR5cGVcIjpcImc6RG91YmxlXCIsXCJAdmFsdWVcIjpcIi1JbmZpbml0eVwifSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZURlY2ltYWwoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KDYuNU0pOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIntcIkB0eXBlXCI6XCJneDpCaWdEZWNpbWFsXCIsXCJAdmFsdWVcIjpcIjYuNVwifSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUJvb2xlYW4oaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KHRydWUpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoInRydWUiLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVBcnJheShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgdmFyIGFycmF5ID0gbmV3W10gezUsIDZ9OwotCi0gICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdyYXBoU09OID0gd3JpdGVyLldyaXRlT2JqZWN0KGFycmF5KTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTT04gPSAiW3tcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo1fSx7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6Nn1dIjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkR3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplQmluZGluZyhpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgdmFyIGJpbmRpbmcgPSBuZXcgQmluZGluZygidGhlS2V5IiwgMTIzKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KGJpbmRpbmcpOwotCi0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpCaW5kaW5nXCIsXCJAdmFsdWVcIjp7XCJ2YWx1ZVwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoxMjN9LFwia2V5XCI6XCJ0aGVLZXlcIn19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgZ3JhcGhTb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgW0ZhY3RdCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVdpdGhDdXN0b21TZXJpYWxpemVyRm9yTmV3VHlwZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciBjdXN0b21TZXJpYWxpemVyQnlUeXBlID0gbmV3IERpY3Rpb25hcnk8VHlwZSwgSUdyYXBoU09OU2VyaWFsaXplcj4KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB7dHlwZW9mKFRlc3RDbGFzcyksIG5ldyBUZXN0R3JhcGhTT05TZXJpYWxpemVyIHtUZXN0TmFtZXNwYWNlID0gIk5TIn19Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgdmFyIHdyaXRlciA9IG5ldyBHcmFwaFNPTjJXcml0ZXIoY3VzdG9tU2VyaWFsaXplckJ5VHlwZSk7Ci0gICAgICAgICAgICB2YXIgdGVzdE9iaiA9IG5ldyBUZXN0Q2xhc3Mge1ZhbHVlID0gInRlc3QifTsKLQotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWQgPSB3cml0ZXIuV3JpdGVPYmplY3QodGVzdE9iaik7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgie1wiQHR5cGVcIjpcIk5TOlRlc3RDbGFzc1wiLFwiQHZhbHVlXCI6XCJ0ZXN0XCJ9Iiwgc2VyaWFsaXplZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBbRmFjdF0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplV2l0aEN1c3RvbVNlcmlhbGl6ZXJGb3JDb21tb25UeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGN1c3RvbVNlcmlhbGl6ZXIgPSBuZXcgQ3VzdG9tRHVtbXlTZXJpYWxpemVyKCk7Ci0gICAgICAgICAgICB2YXIgY3VzdG9tU2VyaWFsaXplckJ5VHlwZSA9IG5ldyBEaWN0aW9uYXJ5PFR5cGUsIElHcmFwaFNPTlNlcmlhbGl6ZXI+Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAge3R5cGVvZihpbnQpLCBjdXN0b21TZXJpYWxpemVyfQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBuZXcgR3JhcGhTT04yV3JpdGVyKGN1c3RvbVNlcmlhbGl6ZXJCeVR5cGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZXIuV3JpdGVPYmplY3QoMTIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoMTIsIGN1c3RvbVNlcmlhbGl6ZXIuRGljdGlmaWVkTGFzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgY2xhc3MgQ3VzdG9tRHVtbXlTZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgICAgICB7Ci0gICAgICAgICAgICBwdWJsaWMgZHluYW1pYyBEaWN0aWZpZWRMYXN0IHsgZ2V0OyBwcml2YXRlIHNldDsgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBwdWJsaWMgRGljdGlvbmFyeTxzdHJpbmcsIGR5bmFtaWM+IERpY3RpZnkoZHluYW1pYyBvYmplY3REYXRhLCBHcmFwaFNPTldyaXRlciB3cml0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGljdGlmaWVkTGFzdCA9IG9iamVjdERhdGE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgZHluYW1pYz4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZURhdGVUaW1lT2Zmc2V0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgZGF0ZVRpbWVPZmZzZXQgPSBUZXN0VXRpbHMuRnJvbUphdmFUaW1lKDE0NzU1ODM0NDI1NTIpOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTb24gPSB3cml0ZXIuV3JpdGVPYmplY3QoZGF0ZVRpbWVPZmZzZXQpOwotCi0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZXhwZWN0ZWQgPSAie1wiQHR5cGVcIjpcImd4Ok9mZnNldERhdGVUaW1lXCIsXCJAdmFsdWVcIjpcIjIwMTYtMTAtMDRUMTI6MTc6MjIuNTUyMDAwMCswMDowMFwifSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZURpY3Rpb25hcnkoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5ID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHsiYWdlIiwgbmV3IExpc3Q8aW50PiB7Mjl9fSwKLSAgICAgICAgICAgICAgICB7Im5hbWUiLCBuZXcgTGlzdDxzdHJpbmc+IHsibWFya28ifX0KLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkRGljdCA9IHdyaXRlci5Xcml0ZU9iamVjdChkaWN0aW9uYXJ5KTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTT04gPSAie1wiYWdlXCI6W3tcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoyOX1dLFwibmFtZVwiOltcIm1hcmtvXCJdfSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRHcmFwaFNPTiwgc2VyaWFsaXplZERpY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplRWRnZShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgdmFyIGVkZ2UgPSBuZXcgRWRnZSg3LCBuZXcgVmVydGV4KDAsICJwZXJzb24iKSwgImtub3dzIiwgbmV3IFZlcnRleCgxLCAiZG9nIikpOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTT04gPSB3cml0ZXIuV3JpdGVPYmplY3QoZWRnZSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOkVkZ2VcIixcIkB2YWx1ZVwiOntcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjd9LFwib3V0VlwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjowfSxcIm91dFZMYWJlbFwiOlwicGVyc29uXCIsXCJsYWJlbFwiOlwia25vd3NcIixcImluVlwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoxfSxcImluVkxhYmVsXCI6XCJkb2dcIn19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgZ3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplRGlyZWN0aW9uKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkRW51bSA9IHdyaXRlci5Xcml0ZU9iamVjdChEaXJlY3Rpb24uQm90aCk7Ci0KLSAgICAgICAgICAgIHZhciBleHBlY3RlZEdyYXBoU09OID0gIntcIkB0eXBlXCI6XCJnOkRpcmVjdGlvblwiLFwiQHZhbHVlXCI6XCJCT1RIXCJ9IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkRW51bSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVEVChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIgc2VyaWFsaXplZEVudW0gPSB3cml0ZXIuV3JpdGVPYmplY3QoRFQuTWludXRlKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTT04gPSAie1wiQHR5cGVcIjpcImc6RFRcIixcIkB2YWx1ZVwiOlwibWludXRlXCJ9IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkRW51bSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVNZXJnZShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotCi0gICAgICAgICAgICB2YXIgc2VyaWFsaXplZEVudW0gPSB3cml0ZXIuV3JpdGVPYmplY3QoTWVyZ2UuT25NYXRjaCk7Ci0KLSAgICAgICAgICAgIHZhciBleHBlY3RlZEdyYXBoU09OID0gIntcIkB0eXBlXCI6XCJnOk1lcmdlXCIsXCJAdmFsdWVcIjpcIm9uTWF0Y2hcIn0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTT04sIHNlcmlhbGl6ZWRFbnVtKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplR1R5cGUoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRFbnVtID0gd3JpdGVyLldyaXRlT2JqZWN0KEdUeXBlLkJ5dGUpOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRHcmFwaFNPTiA9ICJ7XCJAdHlwZVwiOlwiZzpHVHlwZVwiLFwiQHZhbHVlXCI6XCJCWVRFXCJ9IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkRW51bSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVMaXN0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgbGlzdCA9IG5ldyBMaXN0PGludD4gezUsIDZ9OwotCi0gICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdyYXBoU09OID0gd3JpdGVyLldyaXRlT2JqZWN0KGxpc3QuVG9BcnJheSgpKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTT04gPSAiW3tcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo1fSx7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6Nn1dIjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkR3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnNTdXBwb3J0aW5nQ29sbGVjdGlvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplR0xpc3QoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciBsaXN0ID0gbmV3IExpc3Q8b2JqZWN0Pz4gezUsIDYsIG51bGx9OwotCi0gICAgICAgICAgICB2YXIgc2VyaWFsaXplZEdyYXBoU09OID0gd3JpdGVyLldyaXRlT2JqZWN0KGxpc3QpOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRHcmFwaFNPTiA9ICJ7XCJAdHlwZVwiOlwiZzpMaXN0XCIsXCJAdmFsdWVcIjpbe1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjV9LCIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6SW50MzJcIixcIkB2YWx1ZVwiOjZ9LG51bGxdfSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRHcmFwaFNPTiwgc2VyaWFsaXplZEdyYXBoU09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zU3VwcG9ydGluZ0NvbGxlY3Rpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUdTZXQoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIElTZXQ8b2JqZWN0PiBzZXQgPSBuZXcgSGFzaFNldDxvYmplY3Q+IHs2MDBMLCA3MDBMfTsKLQotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFwaFNPTiA9IHdyaXRlci5Xcml0ZU9iamVjdChzZXQpOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRHcmFwaFNPTiA9ICJ7XCJAdHlwZVwiOlwiZzpTZXRcIixcIkB2YWx1ZVwiOlt7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6NjAwfSwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOkludDY0XCIsXCJAdmFsdWVcIjo3MDB9XX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTT04sIHNlcmlhbGl6ZWRHcmFwaFNPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVHTWFwKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICBJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4gbWFwID0gbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHsgeyAxTCwgImEifSwgeyAyMDBMLCAiYiJ9fTsKLQotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRHcmFwaFNPTiA9IHdyaXRlci5Xcml0ZU9iamVjdChtYXApOwotCi0gICAgICAgICAgICB2YXIgZXhwZWN0ZWRHcmFwaFNPTiA9ICJ7XCJAdHlwZVwiOlwiZzpNYXBcIixcIkB2YWx1ZVwiOlt7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6MX0sXCJhXCIsIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpJbnQ2NFwiLFwiQHZhbHVlXCI6MjAwfSxcImJcIl19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkR3JhcGhTT04pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc05vdFN1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVQcmVkaWNhdGVXaXRoTXVsdGlwbGVWYWx1ZXNBc0pTT05BcnJheShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgdmFyIHByZWRpY2F0ZSA9IG5ldyBQKCJ3aXRoaW4iLCBuZXcgTGlzdDxpbnQ+IHsxLCAyfSk7Ci0KLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkUHJlZGljYXRlID0gd3JpdGVyLldyaXRlT2JqZWN0KHByZWRpY2F0ZSk7Ci0KLSAgICAgICAgICAgIHZhciBleHBlY3RlZEdyYXBoU09OID0KLSAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6UFwiLFwiQHZhbHVlXCI6e1wicHJlZGljYXRlXCI6XCJ3aXRoaW5cIixcInZhbHVlXCI6W3tcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoxfSx7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6Mn1dfX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTT04sIHNlcmlhbGl6ZWRQcmVkaWNhdGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBwcmVkaWNhdGUgPSBQLldpdGhpbigxLCAyKTsKLQotICAgICAgICAgICAgc2VyaWFsaXplZFByZWRpY2F0ZSA9IHdyaXRlci5Xcml0ZU9iamVjdChwcmVkaWNhdGUpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWRHcmFwaFNPTiwgc2VyaWFsaXplZFByZWRpY2F0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9uc1N1cHBvcnRpbmdDb2xsZWN0aW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVQcmVkaWNhdGVXaXRoTXVsdGlwbGVWYWx1ZXMoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciBwcmVkaWNhdGUgPSBQLldpdGhpbihuZXcgTGlzdDxpbnQ+IHsxLCAyfSk7Ci0KLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkUHJlZGljYXRlID0gd3JpdGVyLldyaXRlT2JqZWN0KHByZWRpY2F0ZSk7Ci0KLSAgICAgICAgICAgIHZhciBleHBlY3RlZEdyYXBoU09OID0KLSAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6UFwiLFwiQHZhbHVlXCI6e1wicHJlZGljYXRlXCI6XCJ3aXRoaW5cIixcInZhbHVlXCI6e1wiQHR5cGVcIjpcImc6TGlzdFwiLFwiQHZhbHVlXCI6W3tcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjoxfSx7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6Mn1dfX19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkUHJlZGljYXRlKTsKLQotICAgICAgICAgICAgcHJlZGljYXRlID0gUC5XaXRoaW4oMSwgMik7Ci0KLSAgICAgICAgICAgIHNlcmlhbGl6ZWRQcmVkaWNhdGUgPSB3cml0ZXIuV3JpdGVPYmplY3QocHJlZGljYXRlKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkR3JhcGhTT04sIHNlcmlhbGl6ZWRQcmVkaWNhdGUpOwotCi0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVQcmVkaWNhdGVXaXRoU2luZ2xlVmFsdWUoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciBwcmVkaWNhdGUgPSBuZXcgUCgibHQiLCA1KTsKLQotICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRQcmVkaWNhdGUgPSB3cml0ZXIuV3JpdGVPYmplY3QocHJlZGljYXRlKTsKLQotICAgICAgICAgICAgdmFyIGV4cGVjdGVkR3JhcGhTT04gPQotICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpQXCIsXCJAdmFsdWVcIjp7XCJwcmVkaWNhdGVcIjpcImx0XCIsXCJ2YWx1ZVwiOntcIkB0eXBlXCI6XCJnOkludDMyXCIsXCJAdmFsdWVcIjo1fX19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZEdyYXBoU09OLCBzZXJpYWxpemVkUHJlZGljYXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVByb3BlcnR5V2l0aEVkZ2VFbGVtZW50KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoImFLZXkiLCAiYVZhbHVlIiwgbmV3IEVkZ2UoImFuSWQiLCBuZXcgVmVydGV4KDEpLCAiZWRnZUxhYmVsIiwgbmV3IFZlcnRleCgyKSkpOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTT04gPSB3cml0ZXIuV3JpdGVPYmplY3QocHJvcGVydHkpOwotCi0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpQcm9wZXJ0eVwiLFwiQHZhbHVlXCI6e1wia2V5XCI6XCJhS2V5XCIsXCJ2YWx1ZVwiOlwiYVZhbHVlXCIsXCJlbGVtZW50XCI6e1wiQHR5cGVcIjpcImc6RWRnZVwiLFwiQHZhbHVlXCI6e1wiaWRcIjpcImFuSWRcIixcIm91dFZcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6MX0sXCJsYWJlbFwiOlwiZWRnZUxhYmVsXCIsXCJpblZcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6Mn19fX19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgZ3JhcGhTT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplUHJvcGVydHlXaXRoVmVydGV4UHJvcGVydHlFbGVtZW50KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoIm5hbWUiLCAibWFya28iLAotICAgICAgICAgICAgICAgIG5ldyBWZXJ0ZXhQcm9wZXJ0eSgiYW5JZCIsICJhS2V5IiwgMjEzNDUsIG5ldyBWZXJ0ZXgoInZlcnRleElkIikpKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU09OID0gd3JpdGVyLldyaXRlT2JqZWN0KHByb3BlcnR5KTsKLQotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGV4cGVjdGVkID0KLSAgICAgICAgICAgICAgICAie1wiQHR5cGVcIjpcImc6UHJvcGVydHlcIixcIkB2YWx1ZVwiOntcImtleVwiOlwibmFtZVwiLFwidmFsdWVcIjpcIm1hcmtvXCIsXCJlbGVtZW50XCI6e1wiQHR5cGVcIjpcImc6VmVydGV4UHJvcGVydHlcIixcIkB2YWx1ZVwiOntcImlkXCI6XCJhbklkXCIsXCJsYWJlbFwiOlwiYUtleVwiLFwidmVydGV4XCI6XCJ2ZXJ0ZXhJZFwifX19fSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGdyYXBoU09OKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVZlcnRleFByb3BlcnR5KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgdmVydGV4UHJvcGVydHkgPSBuZXcgVmVydGV4UHJvcGVydHkoImJsYWgiLCAia2V5QSIsIHRydWUsIG5ldyBWZXJ0ZXgoInN0ZXBoZW4iKSk7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNPTiA9IHdyaXRlci5Xcml0ZU9iamVjdCh2ZXJ0ZXhQcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOlZlcnRleFByb3BlcnR5XCIsXCJAdmFsdWVcIjp7XCJpZFwiOlwiYmxhaFwiLFwibGFiZWxcIjpcImtleUFcIixcInZhbHVlXCI6dHJ1ZSxcInZlcnRleFwiOlwic3RlcGhlblwifX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVHdWlkKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgZ3VpZCA9IEd1aWQuUGFyc2UoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTb24gPSB3cml0ZXIuV3JpdGVPYmplY3QoZ3VpZCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9ICJ7XCJAdHlwZVwiOlwiZzpVVUlEXCIsXCJAdmFsdWVcIjpcIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NlwifSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVZlcnRleChpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgdmFyIHZlcnRleCA9IG5ldyBWZXJ0ZXgoNDUuMjNmKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU09OID0gd3JpdGVyLldyaXRlT2JqZWN0KHZlcnRleCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOlZlcnRleFwiLFwiQHZhbHVlXCI6e1wiaWRcIjp7XCJAdHlwZVwiOlwiZzpGbG9hdFwiLFwiQHZhbHVlXCI6NDUuMjN9LFwibGFiZWxcIjpcInZlcnRleFwifX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVWZXJ0ZXhXaXRoTGFiZWwoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciB2ZXJ0ZXggPSBuZXcgVmVydGV4KChsb25nKSAxMjMsICJwcm9qZWN0Iik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNPTiA9IHdyaXRlci5Xcml0ZU9iamVjdCh2ZXJ0ZXgpOwotCi0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZXhwZWN0ZWQgPQotICAgICAgICAgICAgICAgICJ7XCJAdHlwZVwiOlwiZzpWZXJ0ZXhcIixcIkB2YWx1ZVwiOntcImlkXCI6e1wiQHR5cGVcIjpcImc6SW50NjRcIixcIkB2YWx1ZVwiOjEyM30sXCJsYWJlbFwiOlwicHJvamVjdFwifX0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVSZWFkT25seVN0cmF0ZWd5KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgcmVhZG9ubHlTdHJhdGVneSA9IG5ldyBSZWFkT25seVN0cmF0ZWd5KCk7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdChyZWFkb25seVN0cmF0ZWd5KTsKLQotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGV4cGVjdGVkID0gIntcIkB0eXBlXCI6XCJnOlJlYWRPbmx5U3RyYXRlZ3lcIixcIkB2YWx1ZVwiOntcImZxY25cIjpcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3lcIixcImNvbmZcIjp7fX19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgZ3JhcGhTb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplU3ViZ3JhcGhTdHJhdGVneUVtcHR5Q29uZmlnKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgcmVhZG9ubHlTdHJhdGVneSA9IG5ldyBTdWJncmFwaFN0cmF0ZWd5KCk7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdChyZWFkb25seVN0cmF0ZWd5KTsKLQotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGV4cGVjdGVkID0gIntcIkB0eXBlXCI6XCJnOlN1YmdyYXBoU3RyYXRlZ3lcIixcIkB2YWx1ZVwiOntcImZxY25cIjpcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5XCIsXCJjb25mXCI6e319fSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVN1YmdyYXBoU3RyYXRlZ3koaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciByZWFkb25seVN0cmF0ZWd5ID0gbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhc0xhYmVsKCJwZXJzb24iKSk7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdChyZWFkb25seVN0cmF0ZWd5KTsKLQotICAgICAgICAgICAgY29uc3Qgc3RyaW5nIGV4cGVjdGVkID0gIntcIkB0eXBlXCI6XCJnOlN1YmdyYXBoU3RyYXRlZ3lcIixcIkB2YWx1ZVwiOntcImZxY25cIjpcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5XCIsXCJjb25mXCI6e1widmVydGljZXNcIjp7XCJAdHlwZVwiOlwiZzpCeXRlY29kZVwiLFwiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJoYXNMYWJlbFwiLFwicGVyc29uXCJdXX19fX19IjsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbChleHBlY3RlZCwgZ3JhcGhTb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgW1RoZW9yeSwgTWVtYmVyRGF0YShuYW1lb2YoVmVyc2lvbnMpKV0KLSAgICAgICAgcHVibGljIHZvaWQgU2hvdWxkU2VyaWFsaXplQ2xhc3MoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciB0eXBlID0gdHlwZW9mKElubGluZUZpbHRlclN0cmF0ZWd5KTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KHR5cGUpOwotCi0gICAgICAgICAgICBjb25zdCBzdHJpbmcgZXhwZWN0ZWQgPSAie1wiQHR5cGVcIjpcImc6Q2xhc3NcIixcIkB2YWx1ZVwiOlwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uSW5saW5lRmlsdGVyU3RyYXRlZ3lcIn0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVMYW1iZGEoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLSAgICAgICAgICAgIHZhciBsYW1iZGEgPSBMYW1iZGEuR3Jvb3Z5KCJ7IGl0LmdldCgpIH0iKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KGxhbWJkYSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgIntcIkB0eXBlXCI6XCJnOkxhbWJkYVwiLFwiQHZhbHVlXCI6e1wic2NyaXB0XCI6XCJ7IGl0LmdldCgpIH1cIixcImxhbmd1YWdlXCI6XCJncmVtbGluLWdyb292eVwiLFwiYXJndW1lbnRzXCI6LTF9fSI7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoZXhwZWN0ZWQsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZVRpbWVTcGFuKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgdGltZVNwYW4gPSBuZXcgVGltZVNwYW4oNSwgNCwgMywgMiwgMSk7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdCh0aW1lU3Bhbik7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9ICJ7XCJAdHlwZVwiOlwiZ3g6RHVyYXRpb25cIixcIkB2YWx1ZVwiOlwiUDVEVDRIM00yLjAwMVNcIn0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVCaWdJbnRlZ2VyKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgYmlnSW50ZWdlciA9IEJpZ0ludGVnZXIuUGFyc2UoIjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSIpOwotCi0gICAgICAgICAgICB2YXIgZ3JhcGhTb24gPSB3cml0ZXIuV3JpdGVPYmplY3QoYmlnSW50ZWdlcik7Ci0KLSAgICAgICAgICAgIGNvbnN0IHN0cmluZyBleHBlY3RlZCA9ICJ7XCJAdHlwZVwiOlwiZ3g6QmlnSW50ZWdlclwiLFwiQHZhbHVlXCI6XCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjFcIn0iOwotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKGV4cGVjdGVkLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVCeXRlKGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdCgoc2J5dGUpMSk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgie1wiQHR5cGVcIjpcImd4OkJ5dGVcIixcIkB2YWx1ZVwiOjF9IiwgZ3JhcGhTb24pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBbVGhlb3J5LCBNZW1iZXJEYXRhKG5hbWVvZihWZXJzaW9ucykpXQotICAgICAgICBwdWJsaWMgdm9pZCBTaG91bGRTZXJpYWxpemVCeXRlTmVnYXRpdmVWYWx1ZShpbnQgdmVyc2lvbikKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHdyaXRlciA9IENyZWF0ZUdyYXBoU09OV3JpdGVyKHZlcnNpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB2YXIgZ3JhcGhTb24gPSB3cml0ZXIuV3JpdGVPYmplY3QoKHNieXRlKS00Mik7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgie1wiQHR5cGVcIjpcImd4OkJ5dGVcIixcIkB2YWx1ZVwiOi00Mn0iLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFRlc3RTQnl0ZUdyYXBoU09ORm9ybWF0KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSAoc2J5dGUpNDI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhciBzZXJpYWxpemVkID0gd3JpdGVyLldyaXRlT2JqZWN0KHZhbHVlKTsKLSAgICAgICAgICAgIHZhciBqc29uRG9jID0gSnNvbkRvY3VtZW50LlBhcnNlKHNlcmlhbGl6ZWQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuVHJ1ZShqc29uRG9jLlJvb3RFbGVtZW50LlRyeUdldFByb3BlcnR5KCJAdHlwZSIsIG91dCB2YXIgdHlwZVByb3BlcnR5KSk7Ci0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoImd4OkJ5dGUiLCB0eXBlUHJvcGVydHkuR2V0U3RyaW5nKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBc3NlcnQuVHJ1ZShqc29uRG9jLlJvb3RFbGVtZW50LlRyeUdldFByb3BlcnR5KCJAdmFsdWUiLCBvdXQgdmFyIHZhbHVlUHJvcGVydHkpKTsKLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCg0MiwgdmFsdWVQcm9wZXJ0eS5HZXRTQnl0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUJ5dGVCdWZmZXIoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KENvbnZlcnQuRnJvbUJhc2U2NFN0cmluZygiYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxIikpOwotCi0gICAgICAgICAgICBBc3NlcnQuRXF1YWwoIntcIkB0eXBlXCI6XCJneDpCeXRlQnVmZmVyXCIsXCJAdmFsdWVcIjpcImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MVwifSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUNoYXIoaW50IHZlcnNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhciB3cml0ZXIgPSBDcmVhdGVHcmFwaFNPTldyaXRlcih2ZXJzaW9uKTsKLQotICAgICAgICAgICAgdmFyIGdyYXBoU29uID0gd3JpdGVyLldyaXRlT2JqZWN0KCd4Jyk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5FcXVhbCgie1wiQHR5cGVcIjpcImd4OkNoYXJcIixcIkB2YWx1ZVwiOlwieFwifSIsIGdyYXBoU29uKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtUaGVvcnksIE1lbWJlckRhdGEobmFtZW9mKFZlcnNpb25zKSldCi0gICAgICAgIHB1YmxpYyB2b2lkIFNob3VsZFNlcmlhbGl6ZUludDE2KGludCB2ZXJzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgd3JpdGVyID0gQ3JlYXRlR3JhcGhTT05Xcml0ZXIodmVyc2lvbik7Ci0KLSAgICAgICAgICAgIHZhciBncmFwaFNvbiA9IHdyaXRlci5Xcml0ZU9iamVjdCgoc2hvcnQpMTAwKTsKLQotICAgICAgICAgICAgQXNzZXJ0LkVxdWFsKCJ7XCJAdHlwZVwiOlwiZ3g6SW50MTZcIixcIkB2YWx1ZVwiOjEwMH0iLCBncmFwaFNvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnRlcm5hbCBjbGFzcyBUZXN0R3JhcGhTT05TZXJpYWxpemVyIDogSUdyYXBoU09OU2VyaWFsaXplcgotICAgIHsKLSAgICAgICAgcHVibGljIHN0cmluZz8gVGVzdE5hbWVzcGFjZSB7IGdldDsgc2V0OyB9Ci0KLSAgICAgICAgcHVibGljIERpY3Rpb25hcnk8c3RyaW5nLCBkeW5hbWljPiBEaWN0aWZ5KGR5bmFtaWMgb2JqZWN0RGF0YSwgR3JhcGhTT05Xcml0ZXIgd3JpdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLlRvVHlwZWRWYWx1ZShuYW1lb2YoVGVzdENsYXNzKSwgb2JqZWN0RGF0YS5WYWx1ZSwgVGVzdE5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVGVzdENsYXNzLmNzIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9HcmVtbGluLk5ldC5Vbml0VGVzdC9TdHJ1Y3R1cmUvSU8vR3JhcGhTT04vVGVzdENsYXNzLmNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTkxODNhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoU09OL1Rlc3RDbGFzcy5jcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLe+7vyNyZWdpb24gTGljZW5zZQotCi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jZW5kcmVnaW9uCi0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Vbml0VGVzdC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBjbGFzcyBUZXN0Q2xhc3MKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBkeW5hbWljPyBWYWx1ZSB7IGdldDsgc2V0OyB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoU09OL1Rlc3RVdGlscy5jcyBiL2dyZW1saW4tZG90bmV0L3Rlc3QvR3JlbWxpbi5OZXQuVW5pdFRlc3QvU3RydWN0dXJlL0lPL0dyYXBoU09OL1Rlc3RVdGlscy5jcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZmYjM5Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L0dyZW1saW4uTmV0LlVuaXRUZXN0L1N0cnVjdHVyZS9JTy9HcmFwaFNPTi9UZXN0VXRpbHMuY3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi3vu78jcmVnaW9uIExpY2Vuc2UKLQotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2VuZHJlZ2lvbgotCi11c2luZyBTeXN0ZW07Ci0KLW5hbWVzcGFjZSBHcmVtbGluLk5ldC5Vbml0VGVzdC5TdHJ1Y3R1cmUuSU8uR3JhcGhTT04KLXsKLSAgICBpbnRlcm5hbCBzdGF0aWMgY2xhc3MgVGVzdFV0aWxzCi0gICAgewotICAgICAgICBwdWJsaWMgc3RhdGljIERhdGVUaW1lT2Zmc2V0IEZyb21KYXZhVGltZShsb25nIG1pbGxpc2Vjb25kcykKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIGVwb2NoID0gbmV3IERhdGVUaW1lT2Zmc2V0KDE5NzAsIDEsIDEsIDAsIDAsIDAsIDAsIFRpbWVTcGFuLlplcm8pOwotICAgICAgICAgICAgcmV0dXJuIGVwb2NoLkFkZFRpY2tzKFRpbWVTcGFuLlRpY2tzUGVyTWlsbGlzZWNvbmQgKiBtaWxsaXNlY29uZHMpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZG90bmV0L3Rlc3QvcG9tLnhtbCBiL2dyZW1saW4tZG90bmV0L3Rlc3QvcG9tLnhtbAppbmRleCAwNGM0Nzk3Li5hNTQ2ZDdmIDEwMDY0NAotLS0gYS9ncmVtbGluLWRvdG5ldC90ZXN0L3BvbS54bWwKKysrIGIvZ3JlbWxpbi1kb3RuZXQvdGVzdC9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tZG90bmV0PC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1kb3RuZXQtdGVzdHM8L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGluLk5ldCAtIFRlc3RzPC9uYW1lPgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvcG9tLnhtbCBiL2dyZW1saW4tZHJpdmVyL3BvbS54bWwKaW5kZXggNmMzMjE5Zi4uNTNlMDRkMCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvcG9tLnhtbAorKysgYi9ncmVtbGluLWRyaXZlci9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tZHJpdmVyPC9hcnRpZmFjdElkPgogICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogR3JlbWxpbiBEcml2ZXI8L25hbWU+CkBAIC01MCw2ICs1MCwzNiBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nYmFjay1jbGFzc2ljPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPG9wdGlvbmFsPnRydWU8L29wdGlvbmFsPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+c29mdHdhcmUuYW1hem9uLmF3c3NkazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHAtYXV0aC1hd3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2F3c3Nkay52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPnNvZnR3YXJlLmFtYXpvbi5hd3NzZGs8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwLWNsaWVudC1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4ke2F3c3Nkay52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPnNvZnR3YXJlLmFtYXpvbi5hd3NzZGs8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwLWF1dGgtc3BpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHthd3NzZGsudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXV0aDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+c29mdHdhcmUuYW1hem9uLmF3c3NkazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnV0aWxzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHthd3NzZGsudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+cHJvdG9jb2wtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDwhLS0gVGlua2VyR3JhcGggaXMgYW4gb3B0aW9uYWwgZGVwZW5kZW5jeSB0aGF0IGlzIG9ubHkgcmVxdWlyZWQgaWYgZG9pbmcgZGVzZXJpYWxpemF0aW9uIG9mIEdyYXBoIGluc3RhbmNlcyAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KQEAgLTY1LDEyICs5NSw2IEBACiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tc29ja2V0LXNlcnZlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CkBAIC0xNTQsOSArMTc4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RTZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZXhjbHVkZSBsb2dnaW5nIHN0dWZmIGZyb20gdWJlcmphciAtIHNoYWRpbmcgcHJldmVudHMgcHJvcGVyIGxvZ2dlciBpbml0aWFsaXphdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Y2gucW9zLmxvZ2JhY2s6bG9nYmFjay1jbGFzc2ljPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Y2gucW9zLmxvZ2JhY2s6KjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPm9yZy5zbGY0ajpzbGY0ai1hcGk8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5vcmcuc2xmNGo6amNsLW92ZXItc2xmNGo8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVkZXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdFNldD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVsb2NhdGlvbnM+CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL2V4YW1wbGVzL0Nvbm5lY3Rpb25zLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL2V4YW1wbGVzL0Nvbm5lY3Rpb25zLmphdmEKaW5kZXggMTJhYzg3YS4uNDJmZTc4ZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9leGFtcGxlcy9Db25uZWN0aW9ucy5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvZXhhbXBsZXMvQ29ubmVjdGlvbnMuamF2YQpAQCAtMTksNyArMTksNiBAQAogCiBwYWNrYWdlIGV4YW1wbGVzOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CkBAIC0zMCw3ICsyOSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LlR5cGVTZXJpYWxpemVyUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0OwogCiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKIApAQCAtNzcsMTIgKzc2LDEwIEBACiAgICAgLy8gU2VlIHJlZmVyZW5jZS8jZ3JlbWxpbi1qYXZhLWNvbmZpZ3VyYXRpb24gZm9yIGZ1bGwgbGlzdCBvZiBjb25maWd1cmF0aW9ucwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd2l0aENsdXN0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZChTRVJWRVJfSE9TVCkuCi0gICAgICAgICAgICBjaGFubmVsaXplcihDaGFubmVsaXplci5XZWJTb2NrZXRDaGFubmVsaXplci5jbGFzcykuCi0gICAgICAgICAgICBrZWVwQWxpdmVJbnRlcnZhbCgxODAwMDApLgogICAgICAgICAgICAgbWF4Q29ubmVjdGlvblBvb2xTaXplKDgpLgogICAgICAgICAgICAgcGF0aCgiL2dyZW1saW4iKS4KICAgICAgICAgICAgIHBvcnQoU0VSVkVSX1BPUlQpLgotICAgICAgICAgICAgc2VyaWFsaXplcihuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCkpLgorICAgICAgICAgICAgc2VyaWFsaXplcihuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KCkpLgogICAgICAgICAgICAgY3JlYXRlKCk7CiAgICAgICAgIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlciwgImciKSk7CiAKQEAgLTk4LDcgKzk1LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHdpdGhTZXJpYWxpemVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIElvUmVnaXN0cnkgcmVnaXN0cnkgPSBuZXcgRmFrZUlvUmVnaXN0cnkoKTsgLy8gYW4gSW9SZWdpc3RyeSBpbnN0YW5jZSBleHBvc2VkIGJ5IGEgc3BlY2lmaWMgZ3JhcGggcHJvdmlkZXIKICAgICAgICAgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSB0eXBlU2VyaWFsaXplclJlZ2lzdHJ5ID0gVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5idWlsZCgpLmFkZFJlZ2lzdHJ5KHJlZ2lzdHJ5KS5jcmVhdGUoKTsKLSAgICAgICAgTWVzc2FnZVNlcmlhbGl6ZXIgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEodHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSk7CisgICAgICAgIE1lc3NhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KHR5cGVTZXJpYWxpemVyUmVnaXN0cnkpOwogICAgICAgICBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKFNFUlZFUl9IT1NUKS4KICAgICAgICAgICAgIHBvcnQoU0VSVkVSX1BPUlQpLgogICAgICAgICAgICAgc2VyaWFsaXplcihzZXJpYWxpemVyKS4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvZXhhbXBsZXMvTW9kZXJuVHJhdmVyc2Fscy5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9leGFtcGxlcy9Nb2Rlcm5UcmF2ZXJzYWxzLmphdmEKaW5kZXggOTBlMWMwYy4uYWZhZDFjZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9leGFtcGxlcy9Nb2Rlcm5UcmF2ZXJzYWxzLmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9leGFtcGxlcy9Nb2Rlcm5UcmF2ZXJzYWxzLmphdmEKQEAgLTQ1LDggKzQ1LDggQEAKICAgICAgICAgTGlzdDxFZGdlPiBlMiA9IGcuVigxKS5ib3RoRSgpLndoZXJlKG90aGVyVigpLmhhc0lkKDIpKS50b0xpc3QoKTsgLy8gKDIpCiAgICAgICAgIFZlcnRleCB2MSA9IGcuVigxKS5uZXh0KCk7CiAgICAgICAgIFZlcnRleCB2MiA9IGcuVigyKS5uZXh0KCk7Ci0gICAgICAgIExpc3Q8RWRnZT4gZTMgPSBnLlYodjEpLmJvdGhFKCkud2hlcmUob3RoZXJWKCkuaXModjIpKS50b0xpc3QoKTsgLy8gKDMpCi0gICAgICAgIExpc3Q8RWRnZT4gZTQgPSBnLlYodjEpLm91dEUoKS53aGVyZShpblYoKS5pcyh2MikpLnRvTGlzdCgpOyAvLyAoNCkKKyAgICAgICAgTGlzdDxFZGdlPiBlMyA9IGcuVih2MSkuYm90aEUoKS53aGVyZShvdGhlclYoKS5pZCgpLmlzKHYyKSkudG9MaXN0KCk7IC8vICgzKQorICAgICAgICBMaXN0PEVkZ2U+IGU0ID0gZy5WKHYxKS5vdXRFKCkud2hlcmUoaW5WKCkuaWQoKS5pcyh2MikpLnRvTGlzdCgpOyAvLyAoNCkKICAgICAgICAgTGlzdDxFZGdlPiBlNSA9IGcuVigxKS5vdXRFKCkud2hlcmUoaW5WKCkuaGFzKGlkLCB3aXRoaW4oMiwzKSkpLnRvTGlzdCgpOyAvLyAoNSkKICAgICAgICAgTGlzdDxWZXJ0ZXg+IGU2ID0gZy5WKDEpLm91dCgpLndoZXJlKGluKCkuaGFzSWQoNikpLnRvTGlzdCgpOyAvLyAoNikKIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9BdXRoUHJvcGVydGllcy5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9BdXRoUHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDMxMTQzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQXV0aFByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBQcm9wZXJ0aWVzIHRvIHN1cHBseSB0byB0aGUge0BsaW5rIENsdXN0ZXJ9IGZvciBhdXRoZW50aWNhdGlvbiBwdXJwb3Nlcy4KLSAqLwotcHVibGljIGNsYXNzIEF1dGhQcm9wZXJ0aWVzIHsKLQotICAgIC8qKgotICAgICAqIEFuIGVudW0gb2YgdGhlIGF2YWlsYWJsZSBhdXRob3JpemF0aW9uIHByb3BlcnRpZXMuCi0gICAgICovCi0gICAgcHVibGljIGVudW0gUHJvcGVydHkgewotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHVzZXJuYW1lLgotICAgICAgICAgKi8KLSAgICAgICAgVVNFUk5BTUUsCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBwYXNzd29yZC4KLSAgICAgICAgICovCi0gICAgICAgIFBBU1NXT1JELAotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgcHJvdG9jb2wgZm9yIHdoaWNoIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQgKGUuZy4sICJsZGFwIikuCi0gICAgICAgICAqLwotICAgICAgICBQUk9UT0NPTCwKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIG5hbWUgdXNlZCBhcyB0aGUgaW5kZXggaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHtAY29kZSBMb2dpbkNvbnRleHR9LgotICAgICAgICAgKi8KLSAgICAgICAgSkFBU19FTlRSWQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgTWFwPFByb3BlcnR5LCBTdHJpbmc+IHByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEge0BsaW5rIFByb3BlcnR5fSB3aXRoIHZhbHVlIHRvIHRoZSBhdXRob3JpemF0aW9uIHByb3BlcnR5IHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgQXV0aFByb3BlcnRpZXMgd2l0aChmaW5hbCBQcm9wZXJ0eSBrZXksIGZpbmFsIFN0cmluZyB2YWx1ZSkgewotICAgICAgICBwcm9wZXJ0aWVzLnB1dChrZXksIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBhIHByb3BlcnR5IGdpdmVuIHRoZSBrZXkuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXQoZmluYWwgUHJvcGVydHkga2V5KSB7Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldChrZXkpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NoYW5uZWxpemVyLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NoYW5uZWxpemVyLmphdmEKaW5kZXggOGU5Nzg3Yi4uNDI3Zjc2YyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9DaGFubmVsaXplci5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2hhbm5lbGl6ZXIuamF2YQpAQCAtMTgsMzggKzE4LDM3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uQ29ubmVjdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyLkh0dHBHcmVtbGluUmVxdWVzdEVuY29kZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5IdHRwR3JlbWxpblJlc3BvbnNlRGVjb2RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyLldlYlNvY2tldENsaWVudEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5XZWJTb2NrZXRHcmVtbGluUmVxdWVzdEVuY29kZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5XZWJTb2NrZXRHcmVtbGluUmVzcG9uc2VEZWNvZGVyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKIGltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEluaXRpYWxpemVyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuc29ja2V0LlNvY2tldENoYW5uZWw7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJzOwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwQ2xpZW50Q29kZWM7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3RBZ2dyZWdhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0SHR0cEhlYWRlcnM7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguQ2xvc2VXZWJTb2NrZXRGcmFtZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5XZWJTb2NrZXRWZXJzaW9uOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LmV4dGVuc2lvbnMuY29tcHJlc3Npb24uV2ViU29ja2V0Q2xpZW50Q29tcHJlc3Npb25IYW5kbGVyOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsQ29udGV4dDsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC5Tc2xIYW5kbGVyOwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIudGltZW91dC5JZGxlU3RhdGVIYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Db25uZWN0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuR3JlbWxpblJlc3BvbnNlSGFuZGxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyLkh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5IdHRwR3JlbWxpblJlcXVlc3RFbmNvZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuSHR0cEdyZW1saW5SZXNwb25zZURlY29kZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5JZGxlQ29ubmVjdGlvbkhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5JbmFjdGl2ZUNoYW5uZWxIYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKIAotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRNYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOwogCi1pbXBvcnQgc3RhdGljIGphdmEubGFuZy5NYXRoLnRvSW50RXhhY3Q7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwQ2xpZW50Q29kZWMuREVGQVVMVF9GQUlMX09OX01JU1NJTkdfUkVTUE9OU0U7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwQ2xpZW50Q29kZWMuREVGQVVMVF9QQVJTRV9IVFRQX0FGVEVSX0NPTk5FQ1RfUkVRVUVTVDsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3REZWNvZGVyLkRFRkFVTFRfQUxMT1dfRFVQTElDQVRFX0NPTlRFTlRfTEVOR1RIUzsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3REZWNvZGVyLkRFRkFVTFRfSU5JVElBTF9CVUZGRVJfU0laRTsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3REZWNvZGVyLkRFRkFVTFRfTUFYX0hFQURFUl9TSVpFOworaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cE9iamVjdERlY29kZXIuREVGQVVMVF9NQVhfSU5JVElBTF9MSU5FX0xFTkdUSDsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3REZWNvZGVyLkRFRkFVTFRfVkFMSURBVEVfSEVBREVSUzsKIAogLyoqCiAgKiBDbGllbnQtc2lkZSBjaGFubmVsIGluaXRpYWxpemVyIGludGVyZmFjZS4gIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIE5ldHR5IHtAY29kZSBDaGFubmVsUGlwZWxpbmV9CkBAIC02MiwyNyArNjEsMjcgQEAKICAgICAvKioKICAgICAgKiBJbml0aWFsaXplcyB0aGUge0Bjb2RlIENoYW5uZWxpemVyfS4gQ2FsbGVkIGp1c3QgYWZ0ZXIgY29uc3RydWN0aW9uLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgQ29ubmVjdGlvbiBjb25uZWN0aW9uKTsKKyAgICB2b2lkIGluaXQoZmluYWwgQ29ubmVjdGlvbiBjb25uZWN0aW9uKTsKIAogICAgIC8qKgogICAgICAqIENhbGxlZCBvbiB7QGxpbmsgQ29ubmVjdGlvbiNjbG9zZUFzeW5jKCl9IHRvIHBlcmZvcm0gYW4ge0Bjb2RlIENoYW5uZWxpemVyfSBzcGVjaWZpYyBmdW5jdGlvbnMuICBOb3RlIHRoYXQgdGhlCiAgICAgICoge0BsaW5rIENvbm5lY3Rpb259IGFscmVhZHkgY2FsbHMge0Bjb2RlIENoYW5uZWwuY2xvc2UoKX0gc28gdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHRoYXQgbWV0aG9kIGhlcmUuCiAgICAgICogQW4gaW1wbGVtZW50YXRpb24gd2lsbCB0eXBpY2FsbHkgdXNlIHRoaXMgbWV0aG9kIHRvIHNlbmQgYSB7QGNvZGUgQ2hhbm5lbGl6ZXJ9IHNwZWNpZmljIG1lc3NhZ2UgdG8gdGhlCi0gICAgICogc2VydmVyIHRvIG5vdGlmeSBvZiBzaHV0ZG93biBjb21pbmcgZnJvbSB0aGUgY2xpZW50IHNpZGUgKGUuZy4gYSAiY2xvc2UiIHdlYnNvY2tldCBmcmFtZSkuCisgICAgICogc2VydmVyIHRvIG5vdGlmeSBvZiBzaHV0ZG93biBjb21pbmcgZnJvbSB0aGUgY2xpZW50IHNpZGUuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgY2xvc2UoZmluYWwgQ2hhbm5lbCBjaGFubmVsKTsKKyAgICB2b2lkIGNsb3NlKGZpbmFsIENoYW5uZWwgY2hhbm5lbCk7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgYWZ0ZXIgdGhlIGNoYW5uZWwgY29ubmVjdHMuIFRoZSB7QGNvZGUgQ2hhbm5lbGl6ZXJ9IG1heSBuZWVkIHRvIHBlcmZvcm0gc29tZSBmdW5jdGlvbnMsIHN1Y2ggYXMgYQogICAgICAqIGhhbmRzaGFrZS4KICAgICAgKi8KLSAgICBwdWJsaWMgZGVmYXVsdCB2b2lkIGNvbm5lY3RlZCgpIHsKKyAgICBkZWZhdWx0IHZvaWQgY29ubmVjdGVkKCkgewogICAgIH0KIAogICAgIC8qKgogICAgICAqIEdldHMgdGhlIHNjaGVtZSB0byB1c2UgdG8gY29uc3RydWN0IHRoZSBVUkwgYW5kIGJ5IGRlZmF1bHQgdXNlcyBIVFRQLgogICAgICAqLwotICAgIHB1YmxpYyBkZWZhdWx0IFN0cmluZyBnZXRTY2hlbWUoZmluYWwgYm9vbGVhbiBzc2xFbmFibGVkKSB7CisgICAgZGVmYXVsdCBTdHJpbmcgZ2V0U2NoZW1lKGZpbmFsIGJvb2xlYW4gc3NsRW5hYmxlZCkgewogICAgICAgICByZXR1cm4gc3NsRW5hYmxlZCA/ICJodHRwcyIgOiAiaHR0cCI7CiAgICAgfQogCkBAIC05MiwxMSArOTEsMjQgQEAKICAgICBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENoYW5uZWxpemVyIGV4dGVuZHMgQ2hhbm5lbEluaXRpYWxpemVyPFNvY2tldENoYW5uZWw+IGltcGxlbWVudHMgQ2hhbm5lbGl6ZXIgewogICAgICAgICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBjb25uZWN0aW9uOwogICAgICAgICBwcm90ZWN0ZWQgQ2x1c3RlciBjbHVzdGVyOwotICAgICAgICBwcml2YXRlIENvbmN1cnJlbnRNYXA8VVVJRCwgUmVzdWx0UXVldWU+IHBlbmRpbmc7CisgICAgICAgIHByb3RlY3RlZCBTc2xIYW5kbGVyIHNzbEhhbmRsZXI7CisgICAgICAgIHByaXZhdGUgQXRvbWljUmVmZXJlbmNlPFJlc3VsdFNldD4gcGVuZGluZzsKIAotICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9HUkVNTElOX1NBU0xfSEFORExFUiA9ICJncmVtbGluLXNhc2wtaGFuZGxlciI7CiAgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBJUEVMSU5FX0dSRU1MSU5fSEFORExFUiA9ICJncmVtbGluLWhhbmRsZXIiOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9TU0xfSEFORExFUiA9ICJncmVtbGluLXNzbC1oYW5kbGVyIjsKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfU1NMX0hBTkRMRVIgPSAiZ3JlbWxpbi1zc2wtaGFuZGxlciI7CisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBJUEVMSU5FX0lETEVfU1RBVEVfSEFORExFUiA9ICJpZGxlLXN0YXRlLWhhbmRsZXIiOworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9JRExFX0NPTk5FQ1RJT05fSEFORExFUiA9ICJpZGxlLWNvbm5lY3Rpb24taGFuZGxlciI7CisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBJUEVMSU5FX0hUVFBfQ09ERUMgPSAiaHR0cC1jb2RlYyI7CisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBJUEVMSU5FX0hUVFBfQUdHUkVHQVRPUiA9ICJodHRwLWFnZ3JlZ2F0b3IiOworICAgICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9IVFRQX0VOQ09ERVIgPSAiZ3JlbWxpbi1lbmNvZGVyIjsKKyAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfSFRUUF9ERUNPREVSID0gImdyZW1saW4tZGVjb2RlciI7CisgICAgICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBJUEVMSU5FX0hUVFBfREVDT01QUkVTU0lPTl9IQU5ETEVSID0gImh0dHAtZGVjb21wcmVzc2lvbi1oYW5kbGVyIjsKKyAgICAgICAgCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIQU5EU0hBS0VfRVJST1IgPSAiQ291bGQgbm90IGNvbXBsZXRlIGNvbm5lY3Rpb24gc2V0dXAgdG8gdGhlIHNlcnZlci4gRW5zdXJlIHRoYXQgU1NMIGlzIGNvcnJlY3RseSAiICsKKyAgICAgICAgICAgICAgICAiY29uZmlndXJlZCBhdCBib3RoIHRoZSBjbGllbnQgYW5kIHRoZSBzZXJ2ZXIuIEVuc3VyZSB0aGF0IGNsaWVudCBodHRwIGhhbmRzaGFrZSAiICsKKyAgICAgICAgICAgICAgICAicHJvdG9jb2wgbWF0Y2hlcyB0aGUgc2VydmVyLiBFbnN1cmUgdGhhdCB0aGUgc2VydmVyIGlzIHN0aWxsIHJlYWNoYWJsZS4iOworCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEluYWN0aXZlQ2hhbm5lbEhhbmRsZXIgaW5hY3RpdmVDaGFubmVsSGFuZGxlciA9IG5ldyBJbmFjdGl2ZUNoYW5uZWxIYW5kbGVyKCk7CiAKICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNTc2woKSB7CiAgICAgICAgICAgICByZXR1cm4gY2x1c3Rlci5jb25uZWN0aW9uUG9vbFNldHRpbmdzKCkuZW5hYmxlU3NsOwpAQCAtMTIxLDcgKzEzMyw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgaW5pdENoYW5uZWwoZmluYWwgU29ja2V0Q2hhbm5lbCBzb2NrZXRDaGFubmVsKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgaW5pdENoYW5uZWwoZmluYWwgU29ja2V0Q2hhbm5lbCBzb2NrZXRDaGFubmVsKSB7CiAgICAgICAgICAgICBmaW5hbCBDaGFubmVsUGlwZWxpbmUgcGlwZWxpbmUgPSBzb2NrZXRDaGFubmVsLnBpcGVsaW5lKCk7CiAgICAgICAgICAgICBmaW5hbCBPcHRpb25hbDxTc2xDb250ZXh0PiBzc2xDdHg7CiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNTc2woKSkgewpAQCAtMTM1LDE0MyArMTQ3LDY1IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChzc2xDdHguaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTc2xIYW5kbGVyIHNzbEhhbmRsZXIgPSBzc2xDdHguZ2V0KCkubmV3SGFuZGxlcihzb2NrZXRDaGFubmVsLmFsbG9jKCksIGNvbm5lY3Rpb24uZ2V0VXJpKCkuZ2V0SG9zdCgpLCBjb25uZWN0aW9uLmdldFVyaSgpLmdldFBvcnQoKSk7CisgICAgICAgICAgICAgICAgc3NsSGFuZGxlciA9IHNzbEN0eC5nZXQoKS5uZXdIYW5kbGVyKHNvY2tldENoYW5uZWwuYWxsb2MoKSwgY29ubmVjdGlvbi5nZXRVcmkoKS5nZXRIb3N0KCksIGNvbm5lY3Rpb24uZ2V0VXJpKCkuZ2V0UG9ydCgpKTsKICAgICAgICAgICAgICAgICAvLyBUSU5LRVJQT1AtMjgxNC4gUmVtb3ZlIHRoZSBTU0wgaGFuZHNoYWtlIHRpbWVvdXQgc28gdGhhdCBoYW5kc2hha2VzIHRoYXQgdGFrZSBsb25nZXIgdGhhbiAxMDAwMG1zCiAgICAgICAgICAgICAgICAgLy8gKE5ldHR5IGRlZmF1bHQpIGJ1dCBsZXNzIHRoYW4gY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcyBjYW4gc3VjY2VlZC4gVGhpcyBtZWFucyB0aGUgU1NMIGhhbmRzaGFrZQogICAgICAgICAgICAgICAgIC8vIHdpbGwgaW5zdGVhZCBiZSBjYXBwZWQgYnkgY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcy4KICAgICAgICAgICAgICAgICBzc2xIYW5kbGVyLnNldEhhbmRzaGFrZVRpbWVvdXRNaWxsaXMoMCk7CiAgICAgICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9TU0xfSEFORExFUiwgc3NsSGFuZGxlcik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoUElQRUxJTkVfU1NMX0hBTkRMRVIsIGluYWN0aXZlQ2hhbm5lbEhhbmRsZXIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb25maWd1cmUocGlwZWxpbmUpOwotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9HUkVNTElOX1NBU0xfSEFORExFUiwgbmV3IEhhbmRsZXIuR3JlbWxpblNhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXIoY2x1c3Rlci5hdXRoUHJvcGVydGllcygpKSk7Ci0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0dSRU1MSU5fSEFORExFUiwgbmV3IEhhbmRsZXIuR3JlbWxpblJlc3BvbnNlSGFuZGxlcihwZW5kaW5nKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXZWJTb2NrZXQge0BsaW5rIENoYW5uZWxpemVyfSBpbXBsZW1lbnRhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdENoYW5uZWxpemVyIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFdlYlNvY2tldENoYW5uZWxpemVyLmNsYXNzKTsKLSAgICAgICAgcHJpdmF0ZSBXZWJTb2NrZXRDbGllbnRIYW5kbGVyIGhhbmRsZXI7Ci0KLSAgICAgICAgcHJpdmF0ZSBXZWJTb2NrZXRHcmVtbGluUmVxdWVzdEVuY29kZXIgZ3JlbWxpblJlcXVlc3RFbmNvZGVyOwotICAgICAgICBwcml2YXRlIFdlYlNvY2tldEdyZW1saW5SZXNwb25zZURlY29kZXIgZ3JlbWxpblJlc3BvbnNlRGVjb2RlcjsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgaW5pdChmaW5hbCBDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIHN1cGVyLmluaXQoY29ubmVjdGlvbik7Ci0gICAgICAgICAgICBncmVtbGluUmVxdWVzdEVuY29kZXIgPSBuZXcgV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyKHRydWUsIGNsdXN0ZXIuZ2V0U2VyaWFsaXplcigpKTsKLSAgICAgICAgICAgIGdyZW1saW5SZXNwb25zZURlY29kZXIgPSBuZXcgV2ViU29ja2V0R3JlbWxpblJlc3BvbnNlRGVjb2RlcihjbHVzdGVyLmdldFNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU2VuZHMgYSB7QGNvZGUgQ2xvc2VXZWJTb2NrZXRGcmFtZX0gdG8gdGhlIHNlcnZlciBmb3IgdGhlIHNwZWNpZmllZCBjaGFubmVsLgotICAgICAgICAgKi8KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKGZpbmFsIENoYW5uZWwgY2hhbm5lbCkgewotICAgICAgICAgICAgaWYgKGNoYW5uZWwuaXNPcGVuKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJTZW5kaW5nIENsb3NlV1MgZnJhbWUgdG8gc2VydmVyIGZyb20gY2hhbm5lbD17fSIsIGNoYW5uZWwuaWQoKS5hc1Nob3J0VGV4dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2hhbm5lbC53cml0ZUFuZEZsdXNoKG5ldyBDbG9zZVdlYlNvY2tldEZyYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzU3NsKCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNjaGVtZSA9IGNvbm5lY3Rpb24uZ2V0VXJpKCkuZ2V0U2NoZW1lKCk7Ci0gICAgICAgICAgICByZXR1cm4gIndzcyIuZXF1YWxzSWdub3JlQ2FzZShzY2hlbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBDaGFubmVsUGlwZWxpbmUgcGlwZWxpbmUpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzY2hlbWUgPSBjb25uZWN0aW9uLmdldFVyaSgpLmdldFNjaGVtZSgpOwotICAgICAgICAgICAgaWYgKCEid3MiLmVxdWFsc0lnbm9yZUNhc2Uoc2NoZW1lKSAmJiAhIndzcyIuZXF1YWxzSWdub3JlQ2FzZShzY2hlbWUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVuc3VwcG9ydGVkIHNjaGVtZSAob25seSB3czogb3Igd3NzOiBzdXBwb3J0ZWQpOiAiICsgc2NoZW1lKTsKLQotICAgICAgICAgICAgaWYgKCFzdXBwb3J0c1NzbCgpICYmICJ3c3MiLmVxdWFsc0lnbm9yZUNhc2Uoc2NoZW1lKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUbyB1c2Ugd3NzIHNjaGVtZSBlbnN1cmUgdGhhdCBlbmFibGVTc2wgaXMgc2V0IHRvIHRydWUgaW4gY29uZmlndXJhdGlvbiIpOwotCi0gICAgICAgICAgICBmaW5hbCBpbnQgbWF4Q29udGVudExlbmd0aCA9IGNsdXN0ZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncygpLm1heENvbnRlbnRMZW5ndGg7Ci0gICAgICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBodHRwSGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKTsKLSAgICAgICAgICAgIGlmKGNvbm5lY3Rpb24uZ2V0Q2x1c3RlcigpLmlzVXNlckFnZW50T25Db25uZWN0RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaHR0cEhlYWRlcnMuc2V0KFVzZXJBZ2VudC5VU0VSX0FHRU5UX0hFQURFUl9OQU1FLCBVc2VyQWdlbnQuVVNFUl9BR0VOVCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoYW5kbGVyID0gbmV3IFdlYlNvY2tldENsaWVudEhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgIG5ldyBXZWJTb2NrZXRDbGllbnRIYW5kbGVyLkludGVyY2VwdGVkV2ViU29ja2V0Q2xpZW50SGFuZHNoYWtlcjEzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZ2V0VXJpKCksIFdlYlNvY2tldFZlcnNpb24uVjEzLCBudWxsLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBIZWFkZXJzLCBtYXhDb250ZW50TGVuZ3RoLCB0cnVlLCBmYWxzZSwgLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3IoKSksIGNsdXN0ZXIuZ2V0Q29ubmVjdGlvblNldHVwVGltZW91dCgpLCBzdXBwb3J0c1NzbCgpKTsKLQotICAgICAgICAgICAgZmluYWwgaW50IGtlZXBBbGl2ZUludGVydmFsID0gdG9JbnRFeGFjdChUaW1lVW5pdC5TRUNPTkRTLmNvbnZlcnQoCi0gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncygpLmtlZXBBbGl2ZUludGVydmFsLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpKTsKLQotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiaHR0cC1jb2RlYyIsIG5ldyBIdHRwQ2xpZW50Q29kZWMoKSk7Ci0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KCJhZ2dyZWdhdG9yIiwgbmV3IEh0dHBPYmplY3RBZ2dyZWdhdG9yKG1heENvbnRlbnRMZW5ndGgpKTsKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uLmdldENsdXN0ZXIoKS5lbmFibGVDb21wcmVzc2lvbigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWRkIGNvbXByZXNzaW9uIGV4dGVuc2lvbiBmb3IgV2ViU29ja2V0IGRlZmluZWQgaW4gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc2OTIKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFdlYlNvY2tldENsaWVudENvbXByZXNzaW9uSGFuZGxlci5JTlNUQU5DRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KCJpZGxlLXN0YXRlLUhhbmRsZXIiLCBuZXcgSWRsZVN0YXRlSGFuZGxlcigwLCBrZWVwQWxpdmVJbnRlcnZhbCwgMCkpOwotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgid3MtaGFuZGxlciIsIGhhbmRsZXIpOwotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiZ3JlbWxpbi1lbmNvZGVyIiwgZ3JlbWxpblJlcXVlc3RFbmNvZGVyKTsKLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoImdyZW1saW4tZGVjb2RlciIsIGdyZW1saW5SZXNwb25zZURlY29kZXIpOworICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9HUkVNTElOX0hBTkRMRVIsIG5ldyBHcmVtbGluUmVzcG9uc2VIYW5kbGVyKHBlbmRpbmcpKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBjb25uZWN0ZWQoKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIEJsb2NrIHVudGlsIHRoZSBoYW5kc2hha2UgaXMgY29tcGxldGUgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLiBUaGUgaGFuZHNoYWtlIGZ1dHVyZQotICAgICAgICAgICAgICAgIC8vIHdpbGwgY29tcGxldGUgd2l0aCBhIHRpbWVvdXQgZXhjZXB0aW9uIGFmdGVyIHNvbWUgdGltZSBzbyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhpcyBmdXR1cmUgd2lsbAotICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlLgotICAgICAgICAgICAgICAgIC8vIElmIGZ1dHVyZSBjb21wbGV0ZWQgd2l0aCBhbiBleGNlcHRpb24gbW9yZSB0aGFuIGxpa2VseSwgU1NMIGlzIGVuYWJsZWQgb24gdGhlIHNlcnZlciwgYnV0IHRoZSBjbGllbnQKLSAgICAgICAgICAgICAgICAvLyBmb3Jnb3QgdG8gZW5hYmxlIGl0IG9yIHBlcmhhcHMgdGhlIHNlcnZlciBpcyBub3QgY29uZmlndXJlZCBmb3Igd2Vic29ja2V0cy4KLSAgICAgICAgICAgICAgICBoYW5kbGVyLmhhbmRzaGFrZUZ1dHVyZSgpLnN5bmMoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBlcnJNc2cgPSAiIjsKLSAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBUaW1lb3V0RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVyck1zZyA9ICJUaW1lZCBvdXQgd2hpbGUgd2FpdGluZyB0byBjb21wbGV0ZSB0aGUgY29ubmVjdGlvbiBzZXR1cC4gQ29uc2lkZXIgaW5jcmVhc2luZyB0aGUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIldlYlNvY2tldCBoYW5kc2hha2UgdGltZW91dCBkdXJhdGlvbi4iOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGVyck1zZyA9ICJDb3VsZCBub3QgY29tcGxldGUgY29ubmVjdGlvbiBzZXR1cCB0byB0aGUgc2VydmVyLiBFbnN1cmUgdGhhdCBTU0wgaXMgY29ycmVjdGx5ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25maWd1cmVkIGF0IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci4gRW5zdXJlIHRoYXQgY2xpZW50IFdlYlNvY2tldCBoYW5kc2hha2UgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3RvY29sIG1hdGNoZXMgdGhlIHNlcnZlci4gRW5zdXJlIHRoYXQgdGhlIHNlcnZlciBpcyBzdGlsbCByZWFjaGFibGUuIjsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1NzbCgpKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQmxvY2sgdW50aWwgdGhlIGhhbmRzaGFrZSBpcyBjb21wbGV0ZSBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHdpdGggYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIHNzbEhhbmRsZXIuaGFuZHNoYWtlRnV0dXJlKCkuc3luYygpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkV4Y2VwdGlvbihjb25uZWN0aW9uLmdldFVyaSgpLCBIQU5EU0hBS0VfRVJST1IsIGV4KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3Rpb25FeGNlcHRpb24oY29ubmVjdGlvbi5nZXRVcmkoKSwgZXJyTXNnLCBleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRTY2hlbWUoYm9vbGVhbiBzc2xFbmFibGVkKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3NsRW5hYmxlZCA/ICJ3c3MiIDogIndzIjsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgogICAgICAqIFNlbmRzIHJlcXVlc3RzIG92ZXIgdGhlIEhUVFAgZW5kcG9pbnQuIENsaWVudCBmdW5jdGlvbmFsaXR5IGlzIGdvdmVybmVkIGJ5IHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgSFRUUCBlbmRwb2ludCwKICAgICAgKiBtZWFuaW5nIHRoYXQgc2Vzc2lvbnMgYXJlIG5vdCBhdmFpbGFibGUgYW5kIGFzIHN1Y2gge0Bjb2RlIHR4KCl9IChpLmUuIHRyYW5zYWN0aW9ucykgYXJlIG5vdCBhdmFpbGFibGUgb3ZlciB0aGlzCi0gICAgICogY2hhbm5lbGl6ZXIuIE9ubHkgc2Vzc2lvbmxlc3MgcmVxdWVzdHMgYXJlIHBvc3NpYmxlLiBTb21lIGRyaXZlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWF5IG5vdCBiZSByZWxldmFudCB3aGVuCi0gICAgICogdXNpbmcgSFRUUCwgc3VjaCBhcyB7QGxpbmsgVG9rZW5zI0FSR1NfQkFUQ0hfU0laRX0gc2luY2UgSFRUUCBkb2VzIG5vdCBzdHJlYW0gcmVzdWx0cyBiYWNrIGluIHRoYXQgZmFzaGlvbi4KKyAgICAgKiBjaGFubmVsaXplci4gT25seSBzZXNzaW9ubGVzcyByZXF1ZXN0cyBhcmUgcG9zc2libGUuCiAgICAgICovCi0gICAgcHVibGljIGZpbmFsIGNsYXNzIEh0dHBDaGFubmVsaXplciBleHRlbmRzIEFic3RyYWN0Q2hhbm5lbGl6ZXIgewotCi0gICAgICAgIHByaXZhdGUgSHR0cENsaWVudENvZGVjIGhhbmRsZXI7CisgICAgZmluYWwgY2xhc3MgSHR0cENoYW5uZWxpemVyIGV4dGVuZHMgQWJzdHJhY3RDaGFubmVsaXplciB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGlzIHJlc3BvbnNlIGlzIHVzZWQgYXMgYSBzaWduYWwgZm9yIGRldGVybWluaW5nIGlmIGFsbCBjb250ZW50IG9mIHRoZSByZXNwb25zZSBoYXMgYmVlbiByZWFkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgTEFTVF9DT05URU5UX1JFQURfUkVTUE9OU0UgPQorICAgICAgICAgICAgICAgIFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpLmNvZGUoSHR0cFJlc3BvbnNlU3RhdHVzLk5PX0NPTlRFTlQpLnJlc3VsdChDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkuY3JlYXRlKCk7CiAKICAgICAgICAgcHJpdmF0ZSBIdHRwR3JlbWxpblJlcXVlc3RFbmNvZGVyIGdyZW1saW5SZXF1ZXN0RW5jb2RlcjsKICAgICAgICAgcHJpdmF0ZSBIdHRwR3JlbWxpblJlc3BvbnNlRGVjb2RlciBncmVtbGluUmVzcG9uc2VEZWNvZGVyOwogCisgICAgICAgIHByaXZhdGUgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlciBodHRwQ29tcHJlc3Npb25EZWNvZGVyOworICAgICAgICBwcml2YXRlIElkbGVTdGF0ZUhhbmRsZXIgaWRsZVN0YXRlSGFuZGxlcjsKKyAgICAgICAgcHJpdmF0ZSBJZGxlQ29ubmVjdGlvbkhhbmRsZXIgaWRsZUNvbm5lY3Rpb25IYW5kbGVyOworCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBpbml0KGZpbmFsIENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgICAgICAgICAgc3VwZXIuaW5pdChjb25uZWN0aW9uKTsKIAotICAgICAgICAgICAgLy8gc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2Vzc2lvbnMgc28gdGhpcyBjaGFubmVybGl6ZXIgY2FuJ3Qgc3VwcG9ydCB0aGUgU2Vzc2lvbmVkQ2xpZW50Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5nZXRDbGllbnQoKSBpbnN0YW5jZW9mIENsaWVudC5TZXNzaW9uZWRDbGllbnQpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJDYW5ub3QgdXNlIHNlc3Npb25zIG9yIHR4KCkgd2l0aCAlcyIsIEh0dHBDaGFubmVsaXplci5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpKTsKLQotICAgICAgICAgICAgZ3JlbWxpblJlcXVlc3RFbmNvZGVyID0gbmV3IEh0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIoY2x1c3Rlci5nZXRTZXJpYWxpemVyKCksIGNsdXN0ZXIuZ2V0UmVxdWVzdEludGVyY2VwdG9yKCksIGNsdXN0ZXIuaXNVc2VyQWdlbnRPbkNvbm5lY3RFbmFibGVkKCkpOworICAgICAgICAgICAgaHR0cENvbXByZXNzaW9uRGVjb2RlciA9IG5ldyBIdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgICAgICBncmVtbGluUmVxdWVzdEVuY29kZXIgPSBuZXcgSHR0cEdyZW1saW5SZXF1ZXN0RW5jb2RlcihjbHVzdGVyLmdldFNlcmlhbGl6ZXIoKSwgY2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCksCisgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuaXNVc2VyQWdlbnRPbkNvbm5lY3RFbmFibGVkKCksIGNsdXN0ZXIuaXNCdWxrUmVzdWx0c0VuYWJsZWQoKSwgY29ubmVjdGlvbi5nZXRVcmkoKSk7CiAgICAgICAgICAgICBncmVtbGluUmVzcG9uc2VEZWNvZGVyID0gbmV3IEh0dHBHcmVtbGluUmVzcG9uc2VEZWNvZGVyKGNsdXN0ZXIuZ2V0U2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgIGlmIChjbHVzdGVyLmdldElkbGVDb25uZWN0aW9uVGltZW91dCgpID4gMCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBpZGxlQ29ubmVjdGlvblRpbWVvdXQgPSAoaW50KSAoY2x1c3Rlci5nZXRJZGxlQ29ubmVjdGlvblRpbWVvdXQoKSAvIDEwMDApOworICAgICAgICAgICAgICAgIGlkbGVTdGF0ZUhhbmRsZXIgPSBuZXcgSWRsZVN0YXRlSGFuZGxlcihpZGxlQ29ubmVjdGlvblRpbWVvdXQsIGlkbGVDb25uZWN0aW9uVGltZW91dCwgMCk7CisgICAgICAgICAgICAgICAgaWRsZUNvbm5lY3Rpb25IYW5kbGVyID0gbmV3IElkbGVDb25uZWN0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0yOTQsMTMgKzIyOCwyMyBAQAogICAgICAgICAgICAgaWYgKCFzdXBwb3J0c1NzbCgpICYmICJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShzY2hlbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRvIHVzZSBodHRwcyBzY2hlbWUgZW5zdXJlIHRoYXQgZW5hYmxlU3NsIGlzIHNldCB0byB0cnVlIGluIGNvbmZpZ3VyYXRpb24iKTsKIAotICAgICAgICAgICAgZmluYWwgaW50IG1heENvbnRlbnRMZW5ndGggPSBjbHVzdGVyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MoKS5tYXhDb250ZW50TGVuZ3RoOwotICAgICAgICAgICAgaGFuZGxlciA9IG5ldyBIdHRwQ2xpZW50Q29kZWMoKTsKKyAgICAgICAgICAgIGlmIChjbHVzdGVyLmdldElkbGVDb25uZWN0aW9uVGltZW91dCgpID4gMCkgeworICAgICAgICAgICAgICAgIC8vIGlkbGUgY29ubmVjdGlvbiBoYW5kbGluZyBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9JRExFX1NUQVRFX0hBTkRMRVIsIGlkbGVTdGF0ZUhhbmRsZXIpOworICAgICAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoUElQRUxJTkVfSURMRV9DT05ORUNUSU9OX0hBTkRMRVIsIGlkbGVDb25uZWN0aW9uSGFuZGxlcik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoImh0dHAtY29kZWMiLCBoYW5kbGVyKTsKLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoImFnZ3JlZ2F0b3IiLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IobWF4Q29udGVudExlbmd0aCkpOwotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiZ3JlbWxpbi1lbmNvZGVyIiwgZ3JlbWxpblJlcXVlc3RFbmNvZGVyKTsKLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoImdyZW1saW4tZGVjb2RlciIsIGdyZW1saW5SZXNwb25zZURlY29kZXIpOworICAgICAgICAgICAgZmluYWwgSHR0cENsaWVudENvZGVjIGhhbmRsZXIgPSBuZXcgSHR0cENsaWVudENvZGVjKERFRkFVTFRfTUFYX0lOSVRJQUxfTElORV9MRU5HVEgsIERFRkFVTFRfTUFYX0hFQURFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAxMDI0ICogMTAyNCwgREVGQVVMVF9GQUlMX09OX01JU1NJTkdfUkVTUE9OU0UsCisgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfVkFMSURBVEVfSEVBREVSUywgREVGQVVMVF9JTklUSUFMX0JVRkZFUl9TSVpFLCBERUZBVUxUX1BBUlNFX0hUVFBfQUZURVJfQ09OTkVDVF9SRVFVRVNULAorICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0FMTE9XX0RVUExJQ0FURV9DT05URU5UX0xFTkdUSFMsIGZhbHNlKTsKKworICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9IVFRQX0NPREVDLCBoYW5kbGVyKTsKKyAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoUElQRUxJTkVfSFRUUF9BR0dSRUdBVE9SLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoY2x1c3Rlci5nZXRNYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgoKSA+IDAKKyAgICAgICAgICAgICAgICAgICAgPyAoaW50KSBjbHVzdGVyLmdldE1heFJlc3BvbnNlQ29udGVudExlbmd0aCgpIDogSW50ZWdlci5NQVhfVkFMVUUpKTsKKyAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoUElQRUxJTkVfSFRUUF9FTkNPREVSLCBncmVtbGluUmVxdWVzdEVuY29kZXIpOworICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9IVFRQX0RFQ09NUFJFU1NJT05fSEFORExFUiwgaHR0cENvbXByZXNzaW9uRGVjb2Rlcik7CisgICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0hUVFBfREVDT0RFUiwgZ3JlbWxpblJlc3BvbnNlRGVjb2Rlcik7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsaWVudC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9DbGllbnQuamF2YQppbmRleCAxZmQxYjhiLi4yNmMyNGYyIDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsaWVudC5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2xpZW50LmphdmEKQEAgLTE4LDMyICsxOCwyMiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOwogCi1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguV2ViU29ja2V0Q2xpZW50SGFuZHNoYWtlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5leGNlcHRpb24uRXhjZXB0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Db25uZWN0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CiBpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0YWJsZUZ1dHVyZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0aW9uRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwpAQCAtNTIsMTEgKzQyLDggQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkNvbnN1bWVyOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5TdXBwbGllcjsKIGltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnMuZ2V0UmVxdWVzdE9wdGlvbnM7Ci0KIC8qKgogICogQSB7QGNvZGUgQ2xpZW50fSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGEge0BsaW5rIENsdXN0ZXJ9IGFuZCByZXByZXNlbnRzIGEgd2F5IHRvIHNlbmQgbWVzc2FnZXMgdG8gR3JlbWxpbiBTZXJ2ZXIuCiAgKiBUaGlzIGNsYXNzIGl0c2VsZiBpcyBhIGJhc2UgY2xhc3MgYXMgdGhlcmUgYXJlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBwcm92aWRlIGRpZmZlcmluZyBraW5kcyBvZgpAQCAtNjYsMjEgKzUzLDE5IEBACiAgKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2xpZW50IHsKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBDbGllbnQgaW1wbGVtZW50cyBSZXF1ZXN0U3VibWl0dGVyLCBSZXF1ZXN0U3VibWl0dGVyQXN5bmMgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKENsaWVudC5jbGFzcyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9PX01BTllfSU5fRkxJR0hUX1JFUVVFU1RTID0gIk51bWJlciBvZiBhY3RpdmUgcmVxdWVzdHMgZXhjZWVkcyBwb29sIHNpemUuICIgKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPT19NQU5ZX0lOX0ZMSUdIVF9SRVFVRVNUUyA9ICJOdW1iZXIgb2YgYWN0aXZlIHJlcXVlc3RzICglcykgZXhjZWVkcyBwb29sIHNpemUgKCVzKS4gIiArCiAgICAgICAgICAgICAiQ29uc2lkZXIgaW5jcmVhc2luZyB0aGUgdmFsdWUgZm9yIG1heENvbm5lY3Rpb25Qb29sU2l6ZS4iOwogCiAgICAgcHJvdGVjdGVkIGZpbmFsIENsdXN0ZXIgY2x1c3RlcjsKICAgICBwcm90ZWN0ZWQgdm9sYXRpbGUgYm9vbGVhbiBpbml0aWFsaXplZDsKLSAgICBwcm90ZWN0ZWQgZmluYWwgQ2xpZW50LlNldHRpbmdzIHNldHRpbmdzOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKIAotICAgIENsaWVudChmaW5hbCBDbHVzdGVyIGNsdXN0ZXIsIGZpbmFsIENsaWVudC5TZXR0aW5ncyBzZXR0aW5ncykgeworICAgIENsaWVudChmaW5hbCBDbHVzdGVyIGNsdXN0ZXIpIHsKICAgICAgICAgdGhpcy5jbHVzdGVyID0gY2x1c3RlcjsKLSAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTE0LDk0ICs5OSw3IEBACiAgICAgICogQHBhcmFtIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UgcmViaW5kcyB0aGUgc3BlY2lmaWVkIGdsb2JhbCBHcmVtbGluIFNlcnZlciB2YXJpYWJsZSB0byAiZyIKICAgICAgKi8KICAgICBwdWJsaWMgQ2xpZW50IGFsaWFzKGZpbmFsIFN0cmluZyBncmFwaE9yVHJhdmVyc2FsU291cmNlKSB7Ci0gICAgICAgIHJldHVybiBhbGlhcyhtYWtlRGVmYXVsdEFsaWFzTWFwKGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEge0Bjb2RlIENsaWVudH0gdGhhdCBzdXBwbGllcyB0aGUgc3BlY2lmaWVkIHNldCBvZiBhbGlhc2VzLCB0aHVzIGFsbG93aW5nIHRoZSB1c2VyIHRvIHJlLW5hbWUKLSAgICAgKiBvbmUgb3IgbW9yZSBnbG9iYWxseSBkZWZpbmVkIHtAbGluayBHcmFwaH0gb3Ige0BsaW5rIFRyYXZlcnNhbFNvdXJjZX0gc2VydmVyIGJpbmRpbmdzIGZvciB0aGUgY29udGV4dCBvZgotICAgICAqIHRoZSBjcmVhdGVkIHtAY29kZSBDbGllbnR9LgotICAgICAqLwotICAgIHB1YmxpYyBDbGllbnQgYWxpYXMoZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQWxpYXNDbHVzdGVyZWRDbGllbnQodGhpcywgYWxpYXNlcywgc2V0dGluZ3MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN1Ym1pdCBhIHtAbGluayBUcmF2ZXJzYWx9IHRvIHRoZSBzZXJ2ZXIgZm9yIHJlbW90ZSBleGVjdXRpb24uUmVzdWx0cyBhcmUgcmV0dXJuZWQgYXMge0BsaW5rIFRyYXZlcnNlcn0KLSAgICAgKiBpbnN0YW5jZXMgYW5kIGFyZSB0aGVyZWZvcmUgYnVsa2VkLCBtZWFuaW5nIHRoYXQgdG8gcHJvcGVybHkgaXRlcmF0ZSB0aGUgY29udGVudHMgb2YgdGhlIHJlc3VsdCBlYWNoCi0gICAgICoge0BsaW5rIFRyYXZlcnNlciNidWxrKCl9IG11c3QgYmUgZXhhbWluZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBvYmplY3Qgc2hvdWxkIGJlIHByZXNlbnRlZCBpbgotICAgICAqIGl0ZXJhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgUmVzdWx0U2V0IHN1Ym1pdChmaW5hbCBUcmF2ZXJzYWwgdHJhdmVyc2FsKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gc3VibWl0QXN5bmModHJhdmVyc2FsKS5nZXQoKTsKLSAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgdGhyb3cgcmU7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQW4gYXN5bmNocm9ub3VzIHZlcnNpb24gb2Yge0BsaW5rICNzdWJtaXQoVHJhdmVyc2FsKX0uIFJlc3VsdHMgYXJlIHJldHVybmVkIGFzIHtAbGluayBUcmF2ZXJzZXJ9IGluc3RhbmNlcyBhbmQKLSAgICAgKiBhcmUgdGhlcmVmb3JlIGJ1bGtlZCwgbWVhbmluZyB0aGF0IHRvIHByb3Blcmx5IGl0ZXJhdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXN1bHQgZWFjaCB7QGxpbmsgVHJhdmVyc2VyI2J1bGsoKX0KLSAgICAgKiBtdXN0IGJlIGV4YW1pbmVkIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgb2JqZWN0IHNob3VsZCBiZSBwcmVzZW50ZWQgaW4gaXRlcmF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHN1Ym1pdEFzeW5jKGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHN1cHBvcnQgVHJhdmVyc2FsIHN1Ym1pc3Npb24gLSB1c2UgYSBzZXNzaW9ubGVzcyBDbGllbnQgY3JlYXRlZCB3aXRoIGZyb20gdGhlIGFsaWFzKCkgbWV0aG9kIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3VibWl0IGEge0BsaW5rIEJ5dGVjb2RlfSB0byB0aGUgc2VydmVyIGZvciByZW1vdGUgZXhlY3V0aW9uLiBSZXN1bHRzIGFyZSByZXR1cm5lZCBhcyB7QGxpbmsgVHJhdmVyc2VyfQotICAgICAqIGluc3RhbmNlcyBhbmQgYXJlIHRoZXJlZm9yZSBidWxrZWQsIG1lYW5pbmcgdGhhdCB0byBwcm9wZXJseSBpdGVyYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzdWx0IGVhY2gKLSAgICAgKiB7QGxpbmsgVHJhdmVyc2VyI2J1bGsoKX0gbXVzdCBiZSBleGFtaW5lZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IG9iamVjdCBzaG91bGQgYmUgcHJlc2VudGVkIGluCi0gICAgICogaXRlcmF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBSZXN1bHRTZXQgc3VibWl0KGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gc3VibWl0QXN5bmMoYnl0ZWNvZGUpLmdldCgpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICB0aHJvdyByZTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHZlcnNpb24gb2Yge0BsaW5rICNzdWJtaXQoQnl0ZWNvZGUpfSB3aGljaCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZXQgcGVyLXJlcXVlc3Qgb3B0aW9ucy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBieXRlY29kZSByZXF1ZXN0IGluIHRoZSBmb3JtIG9mIGdyZW1saW4ge0BsaW5rIEJ5dGVjb2RlfQotICAgICAqIEBwYXJhbSBvcHRpb25zICBmb3IgdGhlIHJlcXVlc3QKLSAgICAgKiBAc2VlICNzdWJtaXQoQnl0ZWNvZGUpCi0gICAgICovCi0gICAgcHVibGljIFJlc3VsdFNldCBzdWJtaXQoZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUsIGZpbmFsIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBzdWJtaXRBc3luYyhieXRlY29kZSwgb3B0aW9ucykuZ2V0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgIHRocm93IHJlOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuIGFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIHtAbGluayAjc3VibWl0KFRyYXZlcnNhbCl9LiBSZXN1bHRzIGFyZSByZXR1cm5lZCBhcyB7QGxpbmsgVHJhdmVyc2VyfSBpbnN0YW5jZXMgYW5kCi0gICAgICogYXJlIHRoZXJlZm9yZSBidWxrZWQsIG1lYW5pbmcgdGhhdCB0byBwcm9wZXJseSBpdGVyYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzdWx0IGVhY2gge0BsaW5rIFRyYXZlcnNlciNidWxrKCl9Ci0gICAgICogbXVzdCBiZSBleGFtaW5lZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IG9iamVjdCBzaG91bGQgYmUgcHJlc2VudGVkIGluIGl0ZXJhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBzdWJtaXRBc3luYyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUcmF2ZXJzYWwgc3VibWlzc2lvbiAtIHVzZSBhIHNlc3Npb25sZXNzIENsaWVudCBjcmVhdGVkIHdpdGggZnJvbSB0aGUgYWxpYXMoKSBtZXRob2QiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHZlcnNpb24gb2Yge0BsaW5rICNzdWJtaXQoQnl0ZWNvZGUpfSB3aGljaCBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZXQgcGVyLXJlcXVlc3Qgb3B0aW9ucy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBieXRlY29kZSByZXF1ZXN0IGluIHRoZSBmb3JtIG9mIGdyZW1saW4ge0BsaW5rIEJ5dGVjb2RlfQotICAgICAqIEBwYXJhbSBvcHRpb25zICBmb3IgdGhlIHJlcXVlc3QKLSAgICAgKiBAc2VlICNzdWJtaXRBc3luYyhCeXRlY29kZSkKLSAgICAgKi8KLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBzdWJtaXRBc3luYyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSwgZmluYWwgUmVxdWVzdE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgc3VwcG9ydCBUcmF2ZXJzYWwgc3VibWlzc2lvbiAtIHVzZSBhIHNlc3Npb25sZXNzIENsaWVudCBjcmVhdGVkIHdpdGggZnJvbSB0aGUgYWxpYXMoKSBtZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIG5ldyBBbGlhc0NsdXN0ZXJlZENsaWVudCh0aGlzLCBncmFwaE9yVHJhdmVyc2FsU291cmNlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTMwNywzMiArMjA1LDggQEAKICAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHN1Ym1pdEFzeW5jKGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBTdHJpbmcgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtZXRlcnMpIHsKLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gbnVsbDsKLSAgICAgICAgaWYgKGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UgIT0gbnVsbCAmJiAhZ3JhcGhPclRyYXZlcnNhbFNvdXJjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGFsaWFzZXMgPSBtYWtlRGVmYXVsdEFsaWFzTWFwKGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1Ym1pdEFzeW5jKGdyZW1saW4sIGFsaWFzZXMsIHBhcmFtZXRlcnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiB7QGxpbmsgI3N1Ym1pdChTdHJpbmcsIE1hcCl9fSB3aGVyZSB0aGUgcmV0dXJuZWQgZnV0dXJlIHdpbGwgY29tcGxldGUgd2hlbiB0aGUKLSAgICAgKiB3cml0ZSBvZiB0aGUgcmVxdWVzdCBjb21wbGV0ZXMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZ3JlbWxpbiAgICB0aGUgZ3JlbWxpbiBzY3JpcHQgdG8gZXhlY3V0ZQotICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIGEgbWFwIG9mIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGJvdW5kIHRvIHRoZSBzY3JpcHQgb24gZXhlY3V0aW9uCi0gICAgICogQHBhcmFtIGFsaWFzZXMgICAgYWxpYXNlcyB0aGUgc3BlY2lmaWVkIGdsb2JhbCBHcmVtbGluIFNlcnZlciB2YXJpYWJsZSBzb21lIG90aGVyIG5hbWUgdGhhdCB0aGVuIGJlIHVzZWQgaW4gdGhlCi0gICAgICogICAgICAgICAgICAgICAgICAgc2NyaXB0IHdoZXJlIHRoZSBrZXkgaXMgdGhlIGFsaWFzIG5hbWUgYW5kIHRoZSB2YWx1ZSByZXByZXNlbnRzIHRoZSBnbG9iYWwgdmFyaWFibGUgb24gdGhlCi0gICAgICogICAgICAgICAgICAgICAgICAgc2VydmVyCi0gICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjQuMCwgcmVwbGFjZWQgYnkge0BsaW5rICNzdWJtaXRBc3luYyhTdHJpbmcsIFJlcXVlc3RPcHRpb25zKX0uCi0gICAgICovCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBzdWJtaXRBc3luYyhmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1ldGVycykgewogICAgICAgICBmaW5hbCBSZXF1ZXN0T3B0aW9ucy5CdWlsZGVyIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpOwotICAgICAgICBpZiAoYWxpYXNlcyAhPSBudWxsICYmICFhbGlhc2VzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKG9wdGlvbnM6OmFkZEFsaWFzKTsKLSAgICAgICAgfQorICAgICAgICBvcHRpb25zLmFkZEcoZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSk7CiAKICAgICAgICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCAmJiAhcGFyYW1ldGVycy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHBhcmFtZXRlcnMuZm9yRWFjaChvcHRpb25zOjphZGRQYXJhbWV0ZXIpOwpAQCAtMzU1LDE4ICsyMjksMTcgQEAKIAogICAgICAgICAvLyBuZWVkIHRvIGNhbGwgYnVpbGRNZXNzYWdlKCkgcmlnaHQgYXdheSB0byBnZXQgY2xpZW50IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLCB0aGF0IHdheSByZXF1ZXN0IHNwZWNpZmljCiAgICAgICAgIC8vIG9uZXMgY2FuIG92ZXJyaWRlIGFzIG5lZWRlZAotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIHJlcXVlc3QgPSBidWlsZE1lc3NhZ2UoUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKSkKLSAgICAgICAgICAgICAgICAuYWRkKFRva2Vucy5BUkdTX0dSRU1MSU4sIGdyZW1saW4pCi0gICAgICAgICAgICAgICAgLmFkZChUb2tlbnMuQVJHU19CQVRDSF9TSVpFLCBiYXRjaFNpemUpOworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIHJlcXVlc3QgPSBidWlsZE1lc3NhZ2UoUmVxdWVzdE1lc3NhZ2UuYnVpbGQoZ3JlbWxpbikpCisgICAgICAgICAgICAgICAgLmFkZENodW5rU2l6ZShiYXRjaFNpemUpOwogCiAgICAgICAgIC8vIGFwcGx5IHNldHRpbmdzIGlmIHRoZXkgd2VyZSBtYWRlIGF2YWlsYWJsZQotICAgICAgICBvcHRpb25zLmdldFRpbWVvdXQoKS5pZlByZXNlbnQodGltZW91dCAtPiByZXF1ZXN0LmFkZChUb2tlbnMuQVJHU19FVkFMX1RJTUVPVVQsIHRpbWVvdXQpKTsKLSAgICAgICAgb3B0aW9ucy5nZXRQYXJhbWV0ZXJzKCkuaWZQcmVzZW50KHBhcmFtcyAtPiByZXF1ZXN0LmFkZEFyZyhUb2tlbnMuQVJHU19CSU5ESU5HUywgcGFyYW1zKSk7Ci0gICAgICAgIG9wdGlvbnMuZ2V0QWxpYXNlcygpLmlmUHJlc2VudChhbGlhc2VzIC0+IHJlcXVlc3QuYWRkQXJnKFRva2Vucy5BUkdTX0FMSUFTRVMsIGFsaWFzZXMpKTsKLSAgICAgICAgb3B0aW9ucy5nZXRPdmVycmlkZVJlcXVlc3RJZCgpLmlmUHJlc2VudChyZXF1ZXN0OjpvdmVycmlkZVJlcXVlc3RJZCk7Ci0gICAgICAgIG9wdGlvbnMuZ2V0VXNlckFnZW50KCkuaWZQcmVzZW50KHVzZXJBZ2VudCAtPiByZXF1ZXN0LmFkZEFyZyhUb2tlbnMuQVJHU19VU0VSX0FHRU5ULCB1c2VyQWdlbnQpKTsKLSAgICAgICAgb3B0aW9ucy5nZXRMYW5ndWFnZSgpLmlmUHJlc2VudChsYW5nIC0+IHJlcXVlc3QuYWRkQXJnKFRva2Vucy5BUkdTX0xBTkdVQUdFLCBsYW5nKSk7Ci0gICAgICAgIG9wdGlvbnMuZ2V0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzKCkuaWZQcmVzZW50KG1wIC0+IHJlcXVlc3QuYWRkQXJnKFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMsIG1wKSk7CisgICAgICAgIG9wdGlvbnMuZ2V0VGltZW91dCgpLmlmUHJlc2VudCh0aW1lb3V0IC0+IHJlcXVlc3QuYWRkVGltZW91dE1pbGxpcyh0aW1lb3V0KSk7CisgICAgICAgIG9wdGlvbnMuZ2V0UGFyYW1ldGVycygpLmlmUHJlc2VudChwYXJhbXMgLT4gcmVxdWVzdC5hZGRCaW5kaW5ncyhwYXJhbXMpKTsKKyAgICAgICAgb3B0aW9ucy5nZXRHKCkuaWZQcmVzZW50KGcgLT4gcmVxdWVzdC5hZGRHKGcpKTsKKyAgICAgICAgb3B0aW9ucy5nZXRMYW5ndWFnZSgpLmlmUHJlc2VudChsYW5nIC0+IHJlcXVlc3QuYWRkTGFuZ3VhZ2UobGFuZykpOworICAgICAgICBvcHRpb25zLmdldE1hdGVyaWFsaXplUHJvcGVydGllcygpLmlmUHJlc2VudChtcCAtPiByZXF1ZXN0LmFkZE1hdGVyaWFsaXplUHJvcGVydGllcyhtcCkpOworICAgICAgICBvcHRpb25zLmdldEJ1bGtSZXN1bHRzKCkuaWZQcmVzZW50KGJ1bGtlZCAtPiByZXF1ZXN0LmFkZEJ1bGtSZXN1bHRzKEJvb2xlYW4ucGFyc2VCb29sZWFuKGJ1bGtlZCkpKTsKKyAgICAgICAgb3B0aW9ucy5nZXRUcmFuc2FjdGlvbklkKCkuaWZQcmVzZW50KHRyYW5zYWN0aW9uSWQgLT4gcmVxdWVzdC5hZGRUcmFuc2FjdGlvbklkKHRyYW5zYWN0aW9uSWQpKTsKIAogICAgICAgICByZXR1cm4gc3VibWl0QXN5bmMocmVxdWVzdC5jcmVhdGUoKSk7CiAgICAgfQpAQCAtNDA4LDM5ICsyODEsMzEgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB7QGxpbmsgQ2xpZW50LlNldHRpbmdzfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2V0dGluZ3MgZ2V0U2V0dGluZ3MoKSB7Ci0gICAgICAgIHJldHVybiBzZXR0aW5nczsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBHZXRzIHRoZSB7QGxpbmsgQ2x1c3Rlcn0gdGhhdCBzcGF3bmVkIHRoaXMge0Bjb2RlIENsaWVudH0uCiAgICAgICovCiAgICAgcHVibGljIENsdXN0ZXIgZ2V0Q2x1c3RlcigpIHsKICAgICAgICAgcmV0dXJuIGNsdXN0ZXI7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFrZURlZmF1bHRBbGlhc01hcChmaW5hbCBTdHJpbmcgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSkgewotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGFsaWFzZXMucHV0KCJnIiwgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgICAgIHJldHVybiBhbGlhc2VzOworICAgIHByb3RlY3RlZCBIb3N0IGNob29zZVJhbmRvbUhvc3QoKSB7CisgICAgICAgIGNsdXN0ZXIuaW5pdCgpOworICAgICAgICBmaW5hbCBMaXN0PEhvc3Q+IGhvc3RzID0gbmV3IEFycmF5TGlzdDw+KGNsdXN0ZXIuYWxsSG9zdHMoKSk7CisgICAgICAgIGZpbmFsIGludCBpeCA9IHJhbmRvbS5uZXh0SW50KGhvc3RzLnNpemUoKSk7CisgICAgICAgIHJldHVybiBob3N0cy5nZXQoaXgpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEEge0Bjb2RlIENsaWVudH0gaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBvcGVyYXRlIGluIGEgc2Vzc2lvbi4gIFJlcXVlc3RzIGFyZSBzZW50IHRvIG11bHRpcGxlIHNlcnZlcnMKLSAgICAgKiBnaXZlbiBhIHtAbGluayBMb2FkQmFsYW5jaW5nU3RyYXRlZ3l9LiAgVHJhbnNhY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNvbW1pdHRlZAotICAgICAqIChvciByb2xsZWQtYmFjayBvbiBlcnJvcikgYWZ0ZXIgZWFjaCByZXF1ZXN0LgorICAgICAqIEEge0Bjb2RlIENsaWVudH0gaW1wbGVtZW50YXRpb24uICBSZXF1ZXN0cyBhcmUgc2VudCB0byBtdWx0aXBsZSBzZXJ2ZXJzIGdpdmVuIGEge0BsaW5rIExvYWRCYWxhbmNpbmdTdHJhdGVneX0uCisgICAgICogVHJhbnNhY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGNvbW1pdHRlZCAob3Igcm9sbGVkLWJhY2sgb24gZXJyb3IpIGFmdGVyIGVhY2ggcmVxdWVzdC4KICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIENsdXN0ZXJlZENsaWVudCBleHRlbmRzIENsaWVudCB7CiAKLSAgICAgICAgU3VwcGxpZXI8Q29ubmVjdGlvbkZhY3Rvcnk+IGNvbm5lY3Rpb25GYWN0b3J5U3VwcGxpZXIgPSBDb25uZWN0aW9uRmFjdG9yeS5EZWZhdWx0Q29ubmVjdGlvbkZhY3Rvcnk6Om5ldzsKICAgICAgICAgZmluYWwgQ29uY3VycmVudE1hcDxIb3N0LCBDb25uZWN0aW9uUG9vbD4gaG9zdENvbm5lY3Rpb25Qb29scyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDw+KCk7CiAgICAgICAgIHByaXZhdGUgZmluYWwgQXRvbWljUmVmZXJlbmNlPENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+PiBjbG9zaW5nID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KG51bGwpOwogICAgICAgICBwcml2YXRlIFRocm93YWJsZSBpbml0aWFsaXphdGlvbkZhaWx1cmUgPSBudWxsOwogCi0gICAgICAgIENsdXN0ZXJlZENsaWVudChmaW5hbCBDbHVzdGVyIGNsdXN0ZXIsIGZpbmFsIENsaWVudC5TZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICAgICAgc3VwZXIoY2x1c3Rlciwgc2V0dGluZ3MpOworICAgICAgICBDbHVzdGVyZWRDbGllbnQoZmluYWwgQ2x1c3RlciBjbHVzdGVyKSB7CisgICAgICAgICAgICBzdXBlcihjbHVzdGVyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtNDgzLDE3ICszNDgsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBDbGllbnQgYWxpYXMoZmluYWwgU3RyaW5nIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGFsaWFzZXMucHV0KCJnIiwgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgICAgICAgICByZXR1cm4gYWxpYXMoYWxpYXNlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICoge0Bpbmhlcml0RG9jfQotICAgICAgICAgKi8KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBDbGllbnQgYWxpYXMoZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEFsaWFzQ2x1c3RlcmVkQ2xpZW50KHRoaXMsIGFsaWFzZXMsIHNldHRpbmdzKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQWxpYXNDbHVzdGVyZWRDbGllbnQodGhpcywgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTUxMSwxMiArMzY2LDYgQEAKICAgICAgICAgICAgIHJldHVybiBwb29sLmJvcnJvd0Nvbm5lY3Rpb24oY2x1c3Rlci5jb25uZWN0aW9uUG9vbFNldHRpbmdzKCkubWF4V2FpdEZvckNvbm5lY3Rpb24sIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIEhvc3QgY2hvb3NlUmFuZG9tSG9zdCgpIHsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8SG9zdD4gaG9zdHMgPSBuZXcgQXJyYXlMaXN0PD4oY2x1c3Rlci5hbGxIb3N0cygpKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBpeCA9IHJhbmRvbS5uZXh0SW50KGhvc3RzLnNpemUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gaG9zdHMuZ2V0KGl4KTsKLSAgICAgICAgfQotCiAgICAgICAgIC8qKgogICAgICAgICAgKiBJbml0aWFsaXplcyB0aGUgY29ubmVjdGlvbiBwb29scyBvbiBhbGwgaG9zdHMuCiAgICAgICAgICAqLwpAQCAtNTU5LDggKzQwOCw3IEBACiAgICAgICAgIHByaXZhdGUgdm9pZCB0aHJvd05vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbigpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290Q2F1c2UgPSBFeGNlcHRpb25VdGlscy5nZXRSb290Q2F1c2UoaW5pdGlhbGl6YXRpb25GYWlsdXJlKTsKICAgICAgICAgICAgIC8vIGFsbG93IHRoZSBjZXJ0YWluIGV4Y2VwdGlvbnMgdG8gcHJvcGFnYXRlIGFzIGEgY2F1c2UKLSAgICAgICAgICAgIGlmIChyb290Q2F1c2UgaW5zdGFuY2VvZiBTU0xFeGNlcHRpb24gfHwgcm9vdENhdXNlIGluc3RhbmNlb2YgQ29ubmVjdEV4Y2VwdGlvbiB8fAotICAgICAgICAgICAgICAgICAgICByb290Q2F1c2UgaW5zdGFuY2VvZiBXZWJTb2NrZXRDbGllbnRIYW5kc2hha2VFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIGlmIChyb290Q2F1c2UgaW5zdGFuY2VvZiBTU0xFeGNlcHRpb24gfHwgcm9vdENhdXNlIGluc3RhbmNlb2YgQ29ubmVjdEV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24oaW5pdGlhbGl6YXRpb25GYWlsdXJlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbigpOwpAQCAtNTg0LDExICs0MzIsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBjbG9zaW5nLmdldCgpOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBDb25zdW1lcjxIb3N0PiBpbml0aWFsaXplQ29ubmVjdGlvblNldHVwRm9ySG9zdCA9IGhvc3QgLT4geworICAgICAgICBwcml2YXRlIGZpbmFsIENvbnN1bWVyPEhvc3Q+IGluaXRpYWxpemVDb25uZWN0aW9uU2V0dXBGb3JIb3N0ID0gaG9zdCAtPiB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIC8vIGhvc3RzIHRoYXQgZG9uJ3QgaW5pdGlhbGl6ZSBjb25uZWN0aW9uIHBvb2xzIHdpbGwgY29tZSB1cCBhcyBhIGRlYWQgaG9zdC4KLSAgICAgICAgICAgICAgICBob3N0Q29ubmVjdGlvblBvb2xzLnB1dChob3N0LCBuZXcgQ29ubmVjdGlvblBvb2woaG9zdCwgQ2x1c3RlcmVkQ2xpZW50LnRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbC5lbXB0eSgpLCBPcHRpb25hbC5lbXB0eSgpLCBjb25uZWN0aW9uRmFjdG9yeVN1cHBsaWVyLmdldCgpKSk7CisgICAgICAgICAgICAgICAgaG9zdENvbm5lY3Rpb25Qb29scy5wdXQoaG9zdCwgbmV3IENvbm5lY3Rpb25Qb29sKGhvc3QsIENsdXN0ZXJlZENsaWVudC50aGlzKSk7CiAKICAgICAgICAgICAgICAgICAvLyBob3N0cyBhcmUgbm90IG1hcmtlZCBhcyBhdmFpbGFibGUgYXQgY2x1c3RlciBpbml0aWFsaXphdGlvbiBhbmQgYXJlIG1hZGUgYXZhaWxhYmxlIGhlcmUgaW5zdGVhZC4KICAgICAgICAgICAgICAgICBob3N0Lm1ha2VBdmFpbGFibGUoKTsKQEAgLTYzOCw2NyArNDg1LDI1IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBBbGlhc0NsdXN0ZXJlZENsaWVudCBleHRlbmRzIENsaWVudCB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgQ2xpZW50IGNsaWVudDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2U7CiAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGNsb3NlID0gbmV3IENvbXBsZXRhYmxlRnV0dXJlPD4oKTsKIAotICAgICAgICBBbGlhc0NsdXN0ZXJlZENsaWVudChmaW5hbCBDbGllbnQgY2xpZW50LCBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMsIGZpbmFsIENsaWVudC5TZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICAgICAgc3VwZXIoY2xpZW50LmNsdXN0ZXIsIHNldHRpbmdzKTsKKyAgICAgICAgQWxpYXNDbHVzdGVyZWRDbGllbnQoZmluYWwgQ2xpZW50IGNsaWVudCwgZmluYWwgU3RyaW5nIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpIHsKKyAgICAgICAgICAgIHN1cGVyKGNsaWVudC5jbHVzdGVyKTsKICAgICAgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OwotICAgICAgICAgICAgdGhpcy5hbGlhc2VzLnB1dEFsbChhbGlhc2VzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBzdWJtaXRBc3luYyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICAgICAgcmV0dXJuIHN1Ym1pdEFzeW5jKGJ5dGVjb2RlLCBnZXRSZXF1ZXN0T3B0aW9ucyhieXRlY29kZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHN1Ym1pdEFzeW5jKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIG5lZWQgdG8gY2FsbCBidWlsZE1lc3NhZ2UoKSByaWdodCBhd2F5IHRvIGdldCBjbGllbnQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIHRoYXQgd2F5IHJlcXVlc3Qgc3BlY2lmaWMKLSAgICAgICAgICAgICAgICAvLyBvbmVzIGNhbiBvdmVycmlkZSBhcyBuZWVkZWQKLSAgICAgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIHJlcXVlc3QgPSBidWlsZE1lc3NhZ2UoUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19CWVRFQ09ERSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInRyYXZlcnNhbCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sIGJ5dGVjb2RlKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBhcHBseSBzZXR0aW5ncyBpZiB0aGV5IHdlcmUgbWFkZSBhdmFpbGFibGUKLSAgICAgICAgICAgICAgICBvcHRpb25zLmdldEJhdGNoU2l6ZSgpLmlmUHJlc2VudChiYXRjaFNpemUgLT4gcmVxdWVzdC5hZGQoVG9rZW5zLkFSR1NfQkFUQ0hfU0laRSwgYmF0Y2hTaXplKSk7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5nZXRUaW1lb3V0KCkuaWZQcmVzZW50KHRpbWVvdXQgLT4gcmVxdWVzdC5hZGQoVG9rZW5zLkFSR1NfRVZBTF9USU1FT1VULCB0aW1lb3V0KSk7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5nZXRPdmVycmlkZVJlcXVlc3RJZCgpLmlmUHJlc2VudChyZXF1ZXN0OjpvdmVycmlkZVJlcXVlc3RJZCk7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5nZXRVc2VyQWdlbnQoKS5pZlByZXNlbnQodXNlckFnZW50IC0+IHJlcXVlc3QuYWRkKFRva2Vucy5BUkdTX1VTRVJfQUdFTlQsIHVzZXJBZ2VudCkpOwotICAgICAgICAgICAgICAgIG9wdGlvbnMuZ2V0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzKCkuaWZQcmVzZW50KG1wIC0+IHJlcXVlc3QuYWRkQXJnKFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMsIG1wKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gc3VibWl0QXN5bmMocmVxdWVzdC5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgcmU7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UgPSBncmFwaE9yVHJhdmVyc2FsU291cmNlOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHN1Ym1pdEFzeW5jKGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgewogICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyID0gUmVxdWVzdE1lc3NhZ2UuZnJvbShtc2cpOwogCi0gICAgICAgICAgICAvLyBvbmx5IGFkZCBhbGlhc2VzIHdoaWNoIGFyZW4ndCBhbHJlYWR5IHByZXNlbnQuIGlmIHRoZXkgYXJlIHByZXNlbnQgdGhlbiB0aGV5IHJlcHJlc2VudCByZXF1ZXN0IGxldmVsCi0gICAgICAgICAgICAvLyBvdmVycmlkZXMgd2hpY2ggc2hvdWxkIGJlIG11Y2tlZCB3aXRoCi0gICAgICAgICAgICBpZiAoIWFsaWFzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWFwIG9yaWdpbmFsID0gKE1hcCkgbXNnLmdldEFyZ3MoKS5nZXRPckRlZmF1bHQoVG9rZW5zLkFSR1NfQUxJQVNFUywgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKChrLCB2KSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghb3JpZ2luYWwuY29udGFpbnNLZXkoaykpCi0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEFyZyhUb2tlbnMuQVJHU19BTElBU0VTLCBhbGlhc2VzKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkRyhncmFwaE9yVHJhdmVyc2FsU291cmNlKTsKIAogICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnN1Ym1pdEFzeW5jKGJ1aWxkZXIuY3JlYXRlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHN1Ym1pdEFzeW5jKGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwpIHsKLSAgICAgICAgICAgIHJldHVybiBzdWJtaXRBc3luYyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgQ2xpZW50IGluaXQoKSB7CiAgICAgICAgICAgICBpZiAoY2xvc2UuaXNEb25lKCkpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNsaWVudCBpcyBjbG9zZWQiKTsKIApAQCAtNzExLDggKzUxNiw3IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciBidWlsZE1lc3NhZ2UoZmluYWwgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyKSB7CiAgICAgICAgICAgICBpZiAoY2xvc2UuaXNEb25lKCkpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNsaWVudCBpcyBjbG9zZWQiKTsKLSAgICAgICAgICAgIGlmICghYWxpYXNlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hZGRBcmcoVG9rZW5zLkFSR1NfQUxJQVNFUywgYWxpYXNlcyk7CisgICAgICAgICAgICBidWlsZGVyLmFkZEcoZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSk7CiAKICAgICAgICAgICAgIHJldHVybiBjbGllbnQuYnVpbGRNZXNzYWdlKGJ1aWxkZXIpOwogICAgICAgICB9CkBAIC03NTUsMTYwICs1NTksNDYgQEAKICAgICAgICAgICoge0Bpbmhlcml0RG9jfQogICAgICAgICAgKi8KICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBDbGllbnQgYWxpYXMoZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzKSB7CisgICAgICAgIHB1YmxpYyBDbGllbnQgYWxpYXMoZmluYWwgU3RyaW5nIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpIHsKICAgICAgICAgICAgIGlmIChjbG9zZS5pc0RvbmUoKSkgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2xpZW50IGlzIGNsb3NlZCIpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBBbGlhc0NsdXN0ZXJlZENsaWVudChjbGllbnQsIGFsaWFzZXMsIHNldHRpbmdzKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQWxpYXNDbHVzdGVyZWRDbGllbnQoY2xpZW50LCBncmFwaE9yVHJhdmVyc2FsU291cmNlKTsKICAgICAgICAgfQorCiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQSB7QGNvZGUgQ2xpZW50fSBpbXBsZW1lbnRhdGlvbiB0aGF0IG9wZXJhdGVzIGluIHRoZSBjb250ZXh0IG9mIGEgc2Vzc2lvbi4ge0Bjb2RlIENoaWxkU2Vzc2lvbkNsaWVudH0gaXMgdGllZCB0bwotICAgICAqIGFub3RoZXIgY2xpZW50IGFzIGEgY2hpbGQsIGl0IGJvcnJvd3MgdGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgcGFyZW50IGNsaWVudCdzIHBvb2wgZm9yIHRoZSB0cmFuc2FjdGlvbi4gUmVxdWVzdHMgYXJlCi0gICAgICogc2VudCB0byBhIHNpbmdsZSBzZXJ2ZXIsIHdoZXJlIGVhY2ggcmVxdWVzdCBpcyBib3VuZCB0byB0aGUgc2FtZSB0aHJlYWQgYW5kIHNhbWUgY29ubmVjdGlvbiB3aXRoIHRoZSBzYW1lIHNldCBvZgotICAgICAqIGJpbmRpbmdzIGFjcm9zcyByZXF1ZXN0cy4KLSAgICAgKiBUcmFuc2FjdGlvbiBhcmUgbm90IGF1dG9tYXRpY2FsbHkgY29tbWl0dGVkLiBJdCBpcyB1cCB0aGUgY2xpZW50IHRvIGlzc3VlIGNvbW1pdC9yb2xsYmFjayBjb21tYW5kcy4KKyAgICAgKiBBIHtAbGluayBDbGllbnR9IHRoYXQgcGlucyBhbGwgcmVxdWVzdHMgdG8gYSBzaW5nbGUge0BsaW5rIEhvc3R9LiBVc2VkIGludGVybmFsbHkgYnkgdHJhbnNhY3Rpb25zCisgICAgICogdG8gZW5zdXJlIGFsbCByZXF1ZXN0cyB3aXRoaW4gYSB0cmFuc2FjdGlvbiBnbyB0byB0aGUgc2FtZSBzZXJ2ZXIuCisgICAgICogPHA+CisgICAgICogVGhpcyBjbGllbnQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgZGlyZWN0bHkg4oCUIG9idGFpbiBhIHtAbGluayBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UcmFuc2FjdGlvbn0KKyAgICAgKiB2aWEge0BsaW5rIENsdXN0ZXIjdHJhbnNhY3QoKX0gb3Ige0BsaW5rIENsdXN0ZXIjdHJhbnNhY3QoU3RyaW5nKX0gaW5zdGVhZC4KICAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFNlc3Npb25lZENoaWxkQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc2Vzc2lvbklkOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbWFuYWdlVHJhbnNhY3Rpb25zOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uOwotICAgICAgICBwcml2YXRlIGZpbmFsIENsaWVudCBwYXJlbnRDbGllbnQ7Ci0gICAgICAgIHByaXZhdGUgQ29ubmVjdGlvbiBib3Jyb3dlZENvbm5lY3Rpb247Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBjbG9zZWQ7Ci0KLSAgICAgICAgcHVibGljIFNlc3Npb25lZENoaWxkQ2xpZW50KGZpbmFsIENsaWVudCBwYXJlbnRDbGllbnQsIFN0cmluZyBzZXNzaW9uSWQpIHsKLSAgICAgICAgICAgIHN1cGVyKHBhcmVudENsaWVudC5jbHVzdGVyLCBwYXJlbnRDbGllbnQuc2V0dGluZ3MpOwotICAgICAgICAgICAgdGhpcy5wYXJlbnRDbGllbnQgPSBwYXJlbnRDbGllbnQ7Ci0gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHNlc3Npb25JZDsKLSAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICB0aGlzLm1hbmFnZVRyYW5zYWN0aW9ucyA9IHBhcmVudENsaWVudC5zZXR0aW5ncy5nZXRTZXNzaW9uKCkubWFwKHMgLT4gcy5tYW5hZ2VUcmFuc2FjdGlvbnMpLm9yRWxzZShmYWxzZSk7Ci0gICAgICAgICAgICB0aGlzLm1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbiA9IHBhcmVudENsaWVudC5zZXR0aW5ncy5nZXRTZXNzaW9uKCkubWFwKHMgLT4gcy5tYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24pLm9yRWxzZShmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNlc3Npb25JZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBzZXNzaW9uSWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgYnVpbGRNZXNzYWdlKGZpbmFsIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICAgICAgYnVpbGRlci5wcm9jZXNzb3IoInNlc3Npb24iKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYWRkQXJnKFRva2Vucy5BUkdTX1NFU1NJT04sIHNlc3Npb25JZCk7Ci0gICAgICAgICAgICBidWlsZGVyLmFkZEFyZyhUb2tlbnMuQVJHU19NQU5BR0VfVFJBTlNBQ1RJT04sIG1hbmFnZVRyYW5zYWN0aW9ucyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFkZEFyZyhUb2tlbnMuQVJHU19NQUlOVEFJTl9TVEFURV9BRlRFUl9FWENFUFRJT04sIG1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBpbml0aWFsaXplSW1wbGVtZW50YXRpb24oKSB7Ci0gICAgICAgICAgICAvLyBkbyBub3RoaW5nLCBwYXJlbnRDbGllbnQgaXMgYWxyZWFkeSBpbml0aWFsaXplZAotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBzeW5jaHJvbml6ZWQgQ29ubmVjdGlvbiBjaG9vc2VDb25uZWN0aW9uKFJlcXVlc3RNZXNzYWdlIG1zZykgdGhyb3dzIFRpbWVvdXRFeGNlcHRpb24sIENvbm5lY3Rpb25FeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKGJvcnJvd2VkQ29ubmVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy9Cb3Jyb3cgZnJvbSBwYXJlbnRDbGllbnQncyBwb29sIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICBib3Jyb3dlZENvbm5lY3Rpb24gPSBwYXJlbnRDbGllbnQuY2hvb3NlQ29ubmVjdGlvbihtc2cpOwotICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiU2Vzc2lvbmVkQ2hpbGRDbGllbnQgY2hvb3Npbmcge30iLCBib3Jyb3dlZENvbm5lY3Rpb24pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy9JbmNyZW1lbnQgZXZlcnl0aW1lLCB0aGUgY29ubmVjdGlvbiBpcyBjaG9zZW4sIGFsbCB0aGVzZSB3aWxsIGJlIGRlY3JlbWVudGVkIHdoZW4gdHJhbnNhY3Rpb24gaXMgY29tbWl0ZWQvcm9sbGVkYmFjawotICAgICAgICAgICAgYm9ycm93ZWRDb25uZWN0aW9uLmJvcnJvd2VkLmluY3JlbWVudEFuZEdldCgpOwotICAgICAgICAgICAgcmV0dXJuIGJvcnJvd2VkQ29ubmVjdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGNsb3NlQXN5bmMoKSB7Ci0gICAgICAgICAgICBpZiAoYm9ycm93ZWRDb25uZWN0aW9uICE9IG51bGwgJiYgIWJvcnJvd2VkQ29ubmVjdGlvbi5pc0RlYWQoKSkgewotCi0gICAgICAgICAgICAgICAgLy9EZWNyZW1lbnQgYm9ycm93ZWQgb25lIGxhc3QgdGltZSB3aGljaCB3YXMgaW5jcmVtZW50ZWQgYnkgcGFyZW50Q2xpZW50IHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgYm9ycm93ZWQgaW5pdGlhbGx5Ci0gICAgICAgICAgICAgICAgLy9yZXR1cm5Ub1Bvb2woKSBkb2VzIHRoaXMKLSAgICAgICAgICAgICAgICBib3Jyb3dlZENvbm5lY3Rpb24ucmV0dXJuVG9Qb29sKCk7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJTZXNzaW9uIGNsb3NlZCBmb3Ige30gd2l0aCBjb3VudCB7fSIsIGJvcnJvd2VkQ29ubmVjdGlvbiwgYm9ycm93ZWRDb25uZWN0aW9uLmJvcnJvd2VkLmdldCgpKTsKLQotICAgICAgICAgICAgICAgIGJvcnJvd2VkQ29ubmVjdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbG9zZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIENvbXBsZXRhYmxlRnV0dXJlLmNvbXBsZXRlZEZ1dHVyZShudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyZW50Q2xpZW50LmlzQ2xvc2luZygpIHx8IGNsb3NlZDsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQSB7QGNvZGUgQ2xpZW50fSBpbXBsZW1lbnRhdGlvbiB0aGF0IG9wZXJhdGVzIGluIHRoZSBjb250ZXh0IG9mIGEgc2Vzc2lvbi4gIFJlcXVlc3RzIGFyZSBzZW50IHRvIGEgc2luZ2xlCi0gICAgICogc2VydmVyLCB3aGVyZSBlYWNoIHJlcXVlc3QgaXMgYm91bmQgdG8gdGhlIHNhbWUgdGhyZWFkIHdpdGggdGhlIHNhbWUgc2V0IG9mIGJpbmRpbmdzIGFjcm9zcyByZXF1ZXN0cy4KLSAgICAgKiBUcmFuc2FjdGlvbiBhcmUgbm90IGF1dG9tYXRpY2FsbHkgY29tbWl0dGVkLiBJdCBpcyB1cCB0aGUgY2xpZW50IHRvIGlzc3VlIGNvbW1pdC9yb2xsYmFjayBjb21tYW5kcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFNlc3Npb25lZENsaWVudCBleHRlbmRzIENsaWVudCB7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHNlc3Npb25JZDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1hbmFnZVRyYW5zYWN0aW9uczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbjsKLQotICAgICAgICBwcml2YXRlIENvbm5lY3Rpb25Qb29sIGNvbm5lY3Rpb25Qb29sOwotCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBQaW5uZWRDbGllbnQgZXh0ZW5kcyBDbGllbnQgeworICAgICAgICBwcml2YXRlIGZpbmFsIENsdXN0ZXJlZENsaWVudCBjbHVzdGVyZWRDbGllbnQ7CisgICAgICAgIHByaXZhdGUgZmluYWwgSG9zdCBwaW5uZWRIb3N0OwogICAgICAgICBwcml2YXRlIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPj4gY2xvc2luZyA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PihudWxsKTsKIAotICAgICAgICBTZXNzaW9uZWRDbGllbnQoZmluYWwgQ2x1c3RlciBjbHVzdGVyLCBmaW5hbCBDbGllbnQuU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgICAgIHN1cGVyKGNsdXN0ZXIsIHNldHRpbmdzKTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gc2V0dGluZ3MuZ2V0U2Vzc2lvbigpLmdldCgpLnNlc3Npb25JZDsKLSAgICAgICAgICAgIHRoaXMubWFuYWdlVHJhbnNhY3Rpb25zID0gc2V0dGluZ3MuZ2V0U2Vzc2lvbigpLmdldCgpLm1hbmFnZVRyYW5zYWN0aW9uczsKLSAgICAgICAgICAgIHRoaXMubWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uID0gc2V0dGluZ3MuZ2V0U2Vzc2lvbigpLmdldCgpLm1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbjsKKyAgICAgICAgUGlubmVkQ2xpZW50KGZpbmFsIENsdXN0ZXIgY2x1c3RlcikgeworICAgICAgICAgICAgc3VwZXIoY2x1c3Rlcik7CisgICAgICAgICAgICB0aGlzLnBpbm5lZEhvc3QgPSBjaG9vc2VSYW5kb21Ib3N0KCk7CisgICAgICAgICAgICB0aGlzLmNsdXN0ZXJlZENsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogICAgICAgICB9CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdGhlIHNlc3Npb24gaWRlbnRpZmllciBib3VuZCB0byB0aGlzIHtAY29kZSBDbGllbnR9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRTZXNzaW9uSWQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbklkOworICAgICAgICBwdWJsaWMgSG9zdCBnZXRQaW5uZWRIb3N0KCkgeworICAgICAgICAgICAgcmV0dXJuIHBpbm5lZEhvc3Q7CiAgICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogQWRkcyB0aGUge0BsaW5rIFRva2VucyNBUkdTX1NFU1NJT059IHZhbHVlIHRvIGV2ZXJ5IHtAbGluayBSZXF1ZXN0TWVzc2FnZX0uCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgYnVpbGRNZXNzYWdlKGZpbmFsIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICAgICAgYnVpbGRlci5wcm9jZXNzb3IoInNlc3Npb24iKTsKLSAgICAgICAgICAgIGJ1aWxkZXIuYWRkQXJnKFRva2Vucy5BUkdTX1NFU1NJT04sIHNlc3Npb25JZCk7Ci0gICAgICAgICAgICBidWlsZGVyLmFkZEFyZyhUb2tlbnMuQVJHU19NQU5BR0VfVFJBTlNBQ1RJT04sIG1hbmFnZVRyYW5zYWN0aW9ucyk7Ci0gICAgICAgICAgICBidWlsZGVyLmFkZEFyZyhUb2tlbnMuQVJHU19NQUlOVEFJTl9TVEFURV9BRlRFUl9FWENFUFRJT04sIG1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbik7Ci0gICAgICAgICAgICByZXR1cm4gYnVpbGRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBTaW5jZSB0aGUgc2Vzc2lvbiBpcyBib3VuZCB0byBhIHNpbmdsZSBob3N0LCBzaW1wbHkgYm9ycm93IGEgY29ubmVjdGlvbiBmcm9tIHRoYXQgcG9vbC4KLSAgICAgICAgICovCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgQ29ubmVjdGlvbiBjaG9vc2VDb25uZWN0aW9uKGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgdGhyb3dzIFRpbWVvdXRFeGNlcHRpb24sIENvbm5lY3Rpb25FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25Qb29sLmJvcnJvd0Nvbm5lY3Rpb24oY2x1c3Rlci5jb25uZWN0aW9uUG9vbFNldHRpbmdzKCkubWF4V2FpdEZvckNvbm5lY3Rpb24sIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmFuZG9tbHkgY2hvb3NlIGFuIGF2YWlsYWJsZSB7QGxpbmsgSG9zdH0gdG8gYmluZCB0aGUgc2Vzc2lvbiB0b28gYW5kIGluaXRpYWxpemUgdGhlIHtAbGluayBDb25uZWN0aW9uUG9vbH0uCi0gICAgICAgICAqLwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUltcGxlbWVudGF0aW9uKCkgewotICAgICAgICAgICAgLy8gY2hvb3NlcyBhIGhvc3QgYXQgcmFuZG9tIGZyb20gYWxsIGhvc3RzCi0gICAgICAgICAgICBpZiAoY2x1c3Rlci5hbGxIb3N0cygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIGF2YWlsYWJsZSBob3N0IGluIHRoZSBjbHVzdGVyIik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmNsdXN0ZXJlZENsaWVudC5pbml0KCk7CisgICAgICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgIH0KIAotICAgICAgICAgICAgZmluYWwgTGlzdDxIb3N0PiBob3N0cyA9IG5ldyBBcnJheUxpc3Q8PihjbHVzdGVyLmFsbEhvc3RzKCkpOwotICAgICAgICAgICAgQ29sbGVjdGlvbnMuc2h1ZmZsZShob3N0cyk7Ci0gICAgICAgICAgICAvLyBpZiBhIGhvc3QgaGFzIGJlZW4gbWFya2VkIGFzIGF2YWlsYWJsZSwgdXNlIGl0IGluc3RlYWQKLSAgICAgICAgICAgIE9wdGlvbmFsPEhvc3Q+IGhvc3QgPSBob3N0cy5zdHJlYW0oKS5maWx0ZXIoSG9zdDo6aXNBdmFpbGFibGUpLmZpbmRGaXJzdCgpOwotICAgICAgICAgICAgZmluYWwgSG9zdCBzZWxlY3RlZEhvc3QgPSBob3N0Lm9yRWxzZShob3N0cy5nZXQoMCkpOwotCi0gICAgICAgICAgICAvLyBvbmx5IG1hcmsgaG9zdCBhcyBhdmFpbGFibGUgaWYgd2UgY2FuIGluaXRpYWxpemUgdGhlIGNvbm5lY3Rpb24gcG9vbCBzdWNjZXNzZnVsbHkKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY29ubmVjdGlvblBvb2wgPSBuZXcgQ29ubmVjdGlvblBvb2woc2VsZWN0ZWRIb3N0LCB0aGlzLCBPcHRpb25hbC5vZigxKSwgT3B0aW9uYWwub2YoMSkpOwotICAgICAgICAgICAgICAgIHNlbGVjdGVkSG9zdC5tYWtlQXZhaWxhYmxlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjbGllbnQgZm9yIHt9IiwgaG9zdCwgZXgpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24oZXgpOwotICAgICAgICAgICAgfQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIENvbm5lY3Rpb24gY2hvb3NlQ29ubmVjdGlvbihmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cpIHRocm93cyBUaW1lb3V0RXhjZXB0aW9uLCBDb25uZWN0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIENvbm5lY3Rpb25Qb29sIHBvb2wgPSBjbHVzdGVyZWRDbGllbnQuaG9zdENvbm5lY3Rpb25Qb29scy5nZXQocGlubmVkSG9zdCk7CisgICAgICAgICAgICBpZiAocG9vbCA9PSBudWxsKSB0aHJvdyBuZXcgTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gcG9vbC5ib3Jyb3dDb25uZWN0aW9uKGNsdXN0ZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncygpLm1heFdhaXRGb3JDb25uZWN0aW9uLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC05MTcsMTg5ICs2MDcsMTQgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBDbG9zZSB0aGUgYm91bmQge0BsaW5rIENvbm5lY3Rpb25Qb29sfS4KKyAgICAgICAgICogTWFya3MgdGhpcyBjbGllbnQgYXMgY2xvc2VkLiBUaGUgdW5kZXJseWluZyBwb29sIGlzIG93bmVkIGJ5IHtAbGluayBDbHVzdGVyZWRDbGllbnR9IGFuZCBpcyBub3QgY2xvc2VkIGhlcmUuCiAgICAgICAgICAqLwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCBDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPiBjbG9zZUFzeW5jKCkgewotICAgICAgICAgICAgaWYgKGNsb3NpbmcuZ2V0KCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2luZy5nZXQoKTsKKyAgICAgICAgICAgIGlmIChjbG9zaW5nLmdldCgpICE9IG51bGwpIHJldHVybiBjbG9zaW5nLmdldCgpOwogCi0gICAgICAgICAgICAvLyB0aGUgY29ubmVjdGlvbiBwb29sIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGlmIHJlcXVlc3RzIHdlcmVuJ3Qgc2VudCBhY3Jvc3MgaXQuIGluIHRob3NlIGNhc2VzCi0gICAgICAgICAgICAvLyB3ZSBqdXN0IG5lZWQgdG8gcmV0dXJuIGEgcHJlLWNvbXBsZXRlZCBmdXR1cmUKLSAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGNvbm5lY3Rpb25Qb29sQ2xvc2UgPSBudWxsID09IGNvbm5lY3Rpb25Qb29sID8KLSAgICAgICAgICAgICAgICAgICAgQ29tcGxldGFibGVGdXR1cmUuY29tcGxldGVkRnV0dXJlKG51bGwpIDogY29ubmVjdGlvblBvb2wuY2xvc2VBc3luYygpOwotICAgICAgICAgICAgY2xvc2luZy5zZXQoY29ubmVjdGlvblBvb2xDbG9zZSk7Ci0gICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvblBvb2xDbG9zZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHRpbmdzIGdpdmVuIHRvIHtAbGluayBDbHVzdGVyI2Nvbm5lY3QoQ2xpZW50LlNldHRpbmdzKX0gdGhhdCBjb25maWd1cmVzIGhvdyBhIHtAbGluayBDbGllbnR9IHdpbGwgYmVoYXZlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2V0dGluZ3MgewotICAgICAgICBwcml2YXRlIGZpbmFsIE9wdGlvbmFsPFNlc3Npb25TZXR0aW5ncz4gc2Vzc2lvbjsKLQotICAgICAgICBwcml2YXRlIFNldHRpbmdzKGZpbmFsIEJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICAgICAgdGhpcy5zZXNzaW9uID0gYnVpbGRlci5zZXNzaW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGJ1aWxkKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUge0BsaW5rIENsaWVudH0gaXMgdG8gYmUgY29uc3RydWN0ZWQgd2l0aCBhIHNlc3Npb24uIElmIHRoZSB2YWx1ZSBpcyBwcmVzZW50LCB0aGVuIGEKLSAgICAgICAgICogc2Vzc2lvbiBpcyBleHBlY3RlZC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBPcHRpb25hbDxTZXNzaW9uU2V0dGluZ3M+IGdldFNlc3Npb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2Vzc2lvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgICAgICAgICBwcml2YXRlIE9wdGlvbmFsPFNlc3Npb25TZXR0aW5ncz4gc2Vzc2lvbiA9IE9wdGlvbmFsLmVtcHR5KCk7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgQnVpbGRlcigpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBFbmFibGVzIGEgc2Vzc2lvbi4gQnkgZGVmYXVsdCB0aGlzIHdpbGwgY3JlYXRlIGEgcmFuZG9tIHNlc3Npb24gbmFtZSBhbmQgY29uZmlndXJlIHRyYW5zYWN0aW9ucyB0byBiZQotICAgICAgICAgICAgICogdW5tYW5hZ2VkLiBUaGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIHNldHRpbmdzIHByb3ZpZGVkIGJ5IGNhbGxzIHRvIHRoZSBvdGhlciBvdmVybG9hZHMgb2YKLSAgICAgICAgICAgICAqIHtAY29kZSB1c2VTZXNzaW9ufS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgdXNlU2Vzc2lvbihmaW5hbCBib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBzZXNzaW9uID0gZW5hYmxlZCA/IE9wdGlvbmFsLm9mKFNlc3Npb25TZXR0aW5ncy5idWlsZCgpLmNyZWF0ZSgpKSA6IE9wdGlvbmFsLmVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogRW5hYmxlcyBhIHNlc3Npb24uIEJ5IGRlZmF1bHQgdGhpcyB3aWxsIGNyZWF0ZSBhIHNlc3Npb24gd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbmQgY29uZmlndXJlCi0gICAgICAgICAgICAgKiB0cmFuc2FjdGlvbnMgdG8gYmUgdW5tYW5hZ2VkLiBUaGlzIG1ldGhvZCB3aWxsIG92ZXJyaWRlIHNldHRpbmdzIHByb3ZpZGVkIGJ5IGNhbGxzIHRvIHRoZSBvdGhlcgotICAgICAgICAgICAgICogb3ZlcmxvYWRzIG9mIHtAY29kZSB1c2VTZXNzaW9ufS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgdXNlU2Vzc2lvbihmaW5hbCBTdHJpbmcgc2Vzc2lvbklkKSB7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbiA9IHNlc3Npb25JZCAhPSBudWxsICYmICFzZXNzaW9uSWQuaXNFbXB0eSgpID8KLSAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsLm9mKFNlc3Npb25TZXR0aW5ncy5idWlsZCgpLnNlc3Npb25JZChzZXNzaW9uSWQpLmNyZWF0ZSgpKSA6IE9wdGlvbmFsLmVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogRW5hYmxlcyBhIHNlc3Npb24uIFRoaXMgbWV0aG9kIHdpbGwgb3ZlcnJpZGUgc2V0dGluZ3MgcHJvdmlkZWQgYnkgY2FsbHMgdG8gdGhlIG90aGVyIG92ZXJsb2FkcyBvZgotICAgICAgICAgICAgICoge0Bjb2RlIHVzZVNlc3Npb259LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwdWJsaWMgQnVpbGRlciB1c2VTZXNzaW9uKGZpbmFsIFNlc3Npb25TZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICAgICAgICAgIHNlc3Npb24gPSBPcHRpb25hbC5vZk51bGxhYmxlKHNldHRpbmdzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIFNldHRpbmdzIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNldHRpbmdzKHRoaXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXR0aW5ncyBmb3IgYSB7QGxpbmsgQ2xpZW50fSB0aGF0IGludm9sdmUgYSBzZXNzaW9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2Vzc2lvblNldHRpbmdzIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1hbmFnZVRyYW5zYWN0aW9uczsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc2Vzc2lvbklkOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gZm9yY2VDbG9zZWQ7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb247Ci0KLSAgICAgICAgcHJpdmF0ZSBTZXNzaW9uU2V0dGluZ3MoZmluYWwgQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgICAgICBtYW5hZ2VUcmFuc2FjdGlvbnMgPSBidWlsZGVyLm1hbmFnZVRyYW5zYWN0aW9uczsKLSAgICAgICAgICAgIHNlc3Npb25JZCA9IGJ1aWxkZXIuc2Vzc2lvbklkOwotICAgICAgICAgICAgZm9yY2VDbG9zZWQgPSBidWlsZGVyLmZvcmNlQ2xvc2VkOwotICAgICAgICAgICAgbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uID0gYnVpbGRlci5tYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogSWYgZW5hYmxlZCwgdHJhbnNhY3Rpb25zIHdpbGwgYmUgIm1hbmFnZWQiIHN1Y2ggdGhhdCBlYWNoIHJlcXVlc3Qgd2lsbCByZXByZXNlbnQgYSBjb21wbGV0ZSB0cmFuc2FjdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG1hbmFnZVRyYW5zYWN0aW9ucygpIHsKLSAgICAgICAgICAgIHJldHVybiBtYW5hZ2VUcmFuc2FjdGlvbnM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUHJvdmlkZXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHNlc3Npb24uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNlc3Npb25JZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBzZXNzaW9uSWQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc2Vzc2lvbiB3aWxsIGJlIGZvcmNlIGNsb3NlZC4gU2VlIHtAbGluayBCdWlsZGVyI2ZvcmNlQ2xvc2VkKGJvb2xlYW4pfSBmb3IgbW9yZSBkZXRhaWxzCi0gICAgICAgICAqIG9uIHdoYXQgdGhhdCBtZWFucy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRm9yY2VDbG9zZWQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZm9yY2VDbG9zZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBTZXNzaW9uU2V0dGluZ3MuQnVpbGRlciBidWlsZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU2Vzc2lvblNldHRpbmdzLkJ1aWxkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVpbGRlciB7Ci0gICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gbWFuYWdlVHJhbnNhY3Rpb25zID0gZmFsc2U7Ci0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBzZXNzaW9uSWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpOwotICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGZvcmNlQ2xvc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgQnVpbGRlcigpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBXaGVuIHtAY29kZSB0cnVlfSBhbiBleGNlcHRpb24gd2l0aGluIGEgc2Vzc2lvbiB3aWxsIG5vdCBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgcmVtb3ZlIHRoZSBzdGF0ZSBib3VuZCB0bwotICAgICAgICAgICAgICogdGhhdCBzZXNzaW9uLiBUaGlzIHNldHRpbmcgaXMgZm9yIHRoZSB7QGNvZGUgVW5pZmllZENoYW5uZWxpemVyfSBhbmQgd2hlbiBzZXQgdG8ge0Bjb2RlIHRydWV9IHdpbGwgYWxsb3cKLSAgICAgICAgICAgICAqIHNlc3Npb25zIHRvIGJlaGF2ZSBzaW1pbGFyIHRvIGhvdyB0aGV5IGRpZCB1bmRlciB0aGUge0Bjb2RlIE9wUHJvY2Vzc29yfSBhcHByb2FjaCBvcmlnaW5hbCB0byBHcmVtbGluCi0gICAgICAgICAgICAgKiBTZXJ2ZXIuIEJ5IGRlZmF1bHQgdGhpcyB2YWx1ZSBpcyB7QGNvZGUgZmFsc2V9LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwdWJsaWMgQnVpbGRlciBtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24oZmluYWwgYm9vbGVhbiBtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICB0aGlzLm1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbiA9IG1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBJZiBlbmFibGVkLCB0cmFuc2FjdGlvbnMgd2lsbCBiZSAibWFuYWdlZCIgc3VjaCB0aGF0IGVhY2ggcmVxdWVzdCB3aWxsIHJlcHJlc2VudCBhIGNvbXBsZXRlIHRyYW5zYWN0aW9uLgotICAgICAgICAgICAgICogQnkgZGVmYXVsdCB0aGlzIHZhbHVlIGlzIHtAY29kZSBmYWxzZX0uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHB1YmxpYyBCdWlsZGVyIG1hbmFnZVRyYW5zYWN0aW9ucyhmaW5hbCBib29sZWFuIG1hbmFnZSkgewotICAgICAgICAgICAgICAgIG1hbmFnZVRyYW5zYWN0aW9ucyA9IG1hbmFnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBQcm92aWRlcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgc2Vzc2lvbi4gVGhpcyB2YWx1ZSBjYW5ub3QgYmUgbnVsbCBvciBlbXB0eS4gQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8KLSAgICAgICAgICAgICAqIGEgcmFuZG9tIHtAY29kZSBVVUlEfS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgc2Vzc2lvbklkKGZpbmFsIFN0cmluZyBzZXNzaW9uSWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBzZXNzaW9uSWQgfHwgc2Vzc2lvbklkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic2Vzc2lvbklkIGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5Iik7Ci0gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc2Vzc2lvbiBzaG91bGQgYmUgZm9yY2UgY2xvc2VkIHdoZW4gdGhlIGNsaWVudCBpcyBjbG9zZWQuIEZvcmNlIGNsb3Npbmcgd2lsbCBub3QKLSAgICAgICAgICAgICAqIGF0dGVtcHQgdG8gY2xvc2Ugb3BlbiB0cmFuc2FjdGlvbnMgZnJvbSBleGlzdGluZyBydW5uaW5nIGpvYnMgYW5kIGxlYXZlIGl0IHRvIHRoZSB1bmRlcmx5aW5nIGdyYXBoIHRvCi0gICAgICAgICAgICAgKiBkZWNpZGVkIGhvdyB0byBwcm9jZWVkIHdpdGggdGhvc2Ugb3JwaGFuZWQgdHJhbnNhY3Rpb25zLiBTZXR0aW5nIHRoaXMgdG8ge0Bjb2RlIHRydWV9IHRlbmRzIHRvIGxlYWQgdG8KLSAgICAgICAgICAgICAqIGZhc3RlciBjbG9zZSBvcGVyYXRpb24gd2hpY2ggY2FuIGJlIGRlc2lyYWJsZSBpZiBHcmVtbGluIFNlcnZlciBoYXMgYSBsb25nIHNlc3Npb24gdGltZW91dCBhbmQgYSBsb25nCi0gICAgICAgICAgICAgKiBzY3JpcHQgZXZhbHVhdGlvbiB0aW1lb3V0IGFzIGF0dGVtcHRzIHRvIGNsb3NlIGxvbmcgcnVuIGpvYnMgY2FuIG9jY3VyIG1vcmUgcmFwaWRseS4gQnkgZGVmYXVsdCwgdGhpcwotICAgICAgICAgICAgICogdmFsdWUgaXMge0Bjb2RlIGZhbHNlfS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcHVibGljIEJ1aWxkZXIgZm9yY2VDbG9zZWQoZmluYWwgYm9vbGVhbiBmb3JjZWQpIHsKLSAgICAgICAgICAgICAgICB0aGlzLmZvcmNlQ2xvc2VkID0gZm9yY2VkOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU2Vzc2lvblNldHRpbmdzIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlc3Npb25TZXR0aW5ncyh0aGlzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3Npbmcuc2V0KGNsdXN0ZXJlZENsaWVudC5jbG9zZUFzeW5jKCkpOworICAgICAgICAgICAgcmV0dXJuIGNsb3NpbmcuZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsdXN0ZXIuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2x1c3Rlci5qYXZhCmluZGV4IDY0ODJmN2UuLmNhYzE5MzggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2x1c3Rlci5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2x1c3Rlci5qYXZhCkBAIC0xOCwyOCArMTgsMzIgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKIAoraW1wb3J0IGlvLm5ldHR5LmJvb3RzdHJhcC5Cb290c3RyYXA7CiBpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlBvb2xlZEJ5dGVCdWZBbGxvY2F0b3I7CiBpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsT3B0aW9uOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5GdWxsSHR0cFJlcXVlc3Q7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5uaW8uTmlvRXZlbnRMb29wR3JvdXA7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsQ29udGV4dDsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC5Tc2xDb250ZXh0QnVpbGRlcjsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC5Tc2xQcm92aWRlcjsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC51dGlsLkluc2VjdXJlVHJ1c3RNYW5hZ2VyRmFjdG9yeTsKIGltcG9ydCBpby5uZXR0eS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXplcnM7Ci1pbXBvcnQgaW8ubmV0dHkuYm9vdHN0cmFwLkJvb3RzdHJhcDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLm5pby5OaW9FdmVudExvb3BHcm91cDsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuY29uY3VycmVudC5CYXNpY1RocmVhZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnR1cGxlLlBhaXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuYXV0aC5BdXRoOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaW50ZXJjZXB0b3IuUGF5bG9hZFNlcmlhbGl6aW5nSW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkh0dHBSZW1vdGVUcmFuc2FjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UcmFuc2FjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YXgubmV0LnNzbC5LZXlNYW5hZ2VyRmFjdG9yeTsKIGltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlckZhY3Rvcnk7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CkBAIC01OSw4ICs2MywxMCBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRNYXA7CkBAIC02OSw3ICs3NSw2IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlVuYXJ5T3BlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogCiAvKioKQEAgLTc4LDkgKzgzLDEwIEBACiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBDbHVzdGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVJJQUxJWkVSX0lOVEVSQ0VQVE9SX05BTUUgPSAic2VyaWFsaXplciI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKENsdXN0ZXIuY2xhc3MpOwogCi0gICAgcHJpdmF0ZSBNYW5hZ2VyIG1hbmFnZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBNYW5hZ2VyIG1hbmFnZXI7CiAKICAgICBwcml2YXRlIENsdXN0ZXIoZmluYWwgQnVpbGRlciBidWlsZGVyKSB7CiAgICAgICAgIHRoaXMubWFuYWdlciA9IG5ldyBNYW5hZ2VyKGJ1aWxkZXIpOwpAQCAtOTIsNzIgKzk4LDMzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHtAbGluayBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50fSBpbnN0YW5jZSB0byB0aGlzIHtAY29kZSBDbHVzdGVyfSwgbWVhbmluZyByZXF1ZXN0cyB3aWxsIGJlIHJvdXRlZCB0bwotICAgICAqIG9uZSBvciBtb3JlIHNlcnZlcnMgKGRlcGVuZGluZyBvbiB0aGUgY2x1c3RlciBjb25maWd1cmF0aW9uKSwgd2hlcmUgZWFjaCByZXF1ZXN0IHJlcHJlc2VudHMgdGhlIGVudGlyZXR5IG9mIGEKLSAgICAgKiB0cmFuc2FjdGlvbi4gIEEgY29tbWl0IG9yIHJvbGxiYWNrIChpbiBjYXNlIG9mIGVycm9yKSBpcyBhdXRvbWF0aWNhbGx5IGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgdGhlIHJlcXVlc3QuCi0gICAgICogPHAvPgotICAgICAqIE5vdGUgdGhhdCBjYWxsaW5nIHRoaXMgbWV0aG9kIGRvZXMgbm90IGltcGx5IHRoYXQgYSBjb25uZWN0aW9uIGlzIG1hZGUgdG8gdGhlIHNlcnZlciBpdHNlbGYgYXQgdGhpcyBwb2ludC4KLSAgICAgKiBUaGVyZWZvcmUsIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlcnZlciBzcGVjaWZpZWQgaW4gdGhlIHtAY29kZSBDbHVzdGVyfSBhbmQgdGhhdCBzZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSBhbgotICAgICAqIGVycm9yIHdpbGwgbm90IGJlIHJhaXNlZCBhdCB0aGlzIHBvaW50LiAgQ29ubmVjdGlvbnMgZ2V0IGluaXRpYWxpemVkIGluIHRoZSB7QGxpbmsgQ2xpZW50fSB3aGVuIGEgcmVxdWVzdCBpcwotICAgICAqIHN1Ym1pdHRlZCBvciBjYW4gYmUgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdmlhIHtAbGluayBDbGllbnQjaW5pdCgpfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgPFQgZXh0ZW5kcyBDbGllbnQ+IFQgY29ubmVjdCgpIHsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IG5ldyBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50KHRoaXMsIENsaWVudC5TZXR0aW5ncy5idWlsZCgpLmNyZWF0ZSgpKTsKLSAgICAgICAgbWFuYWdlci50cmFja0NsaWVudChjbGllbnQpOwotICAgICAgICByZXR1cm4gKFQpIGNsaWVudDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEge0BsaW5rIENsaWVudC5TZXNzaW9uZWRDbGllbnR9IGluc3RhbmNlIHRvIHRoaXMge0Bjb2RlIENsdXN0ZXJ9LCBtZWFuaW5nIHJlcXVlc3RzIHdpbGwgYmUgcm91dGVkIHRvCi0gICAgICogYSBzaW5nbGUgc2VydmVyIChyYW5kb21seSBzZWxlY3RlZCBmcm9tIHRoZSBjbHVzdGVyKSwgd2hlcmUgdGhlIHNhbWUgYmluZGluZ3Mgd2lsbCBiZSBhdmFpbGFibGUgb24gZWFjaCByZXF1ZXN0LgotICAgICAqIFJlcXVlc3RzIGFyZSBib3VuZCB0byB0aGUgc2FtZSB0aHJlYWQgb24gdGhlIHNlcnZlciBhbmQgdGh1cyB0cmFuc2FjdGlvbnMgbWF5IGV4dGVuZCBiZXlvbmQgdGhlIGJvdW5kcyBvZiBhCi0gICAgICogc2luZ2xlIHJlcXVlc3QuICBUaGUgdHJhbnNhY3Rpb25zIGFyZSBtYW5hZ2VkIGJ5IHRoZSB1c2VyIGFuZCBtdXN0IGJlIGNvbW1pdHRlZCBvciByb2xsZWQtYmFjayBtYW51YWxseS4KLSAgICAgKiA8cC8+Ci0gICAgICogTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBtZXRob2QgZG9lcyBub3QgaW1wbHkgdGhhdCBhIGNvbm5lY3Rpb24gaXMgbWFkZSB0byB0aGUgc2VydmVyIGl0c2VsZiBhdCB0aGlzIHBvaW50LgotICAgICAqIFRoZXJlZm9yZSwgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VydmVyIHNwZWNpZmllZCBpbiB0aGUge0Bjb2RlIENsdXN0ZXJ9IGFuZCB0aGF0IHNlcnZlciBpcyBub3QgYXZhaWxhYmxlIGFuCi0gICAgICogZXJyb3Igd2lsbCBub3QgYmUgcmFpc2VkIGF0IHRoaXMgcG9pbnQuICBDb25uZWN0aW9ucyBnZXQgaW5pdGlhbGl6ZWQgaW4gdGhlIHtAbGluayBDbGllbnR9IHdoZW4gYSByZXF1ZXN0IGlzCi0gICAgICogc3VibWl0dGVkIG9yIGNhbiBiZSBkaXJlY3RseSBpbml0aWFsaXplZCB2aWEge0BsaW5rIENsaWVudCNpbml0KCl9LgotICAgICAqCi0gICAgICogQHBhcmFtIHNlc3Npb25JZCB1c2VyIHN1cHBsaWVkIGlkIGZvciB0aGUgc2Vzc2lvbiB3aGljaCBzaG91bGQgYmUgdW5pcXVlIChhIFVVSUQgaXMgaWRlYWwpLgotICAgICAqLwotICAgIHB1YmxpYyA8VCBleHRlbmRzIENsaWVudD4gVCBjb25uZWN0KGZpbmFsIFN0cmluZyBzZXNzaW9uSWQpIHsKLSAgICAgICAgcmV0dXJuIGNvbm5lY3Qoc2Vzc2lvbklkLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHtAbGluayBDbGllbnQuU2Vzc2lvbmVkQ2xpZW50fSBpbnN0YW5jZSB0byB0aGlzIHtAY29kZSBDbHVzdGVyfSwgbWVhbmluZyByZXF1ZXN0cyB3aWxsIGJlIHJvdXRlZCB0bwotICAgICAqIGEgc2luZ2xlIHNlcnZlciAocmFuZG9tbHkgc2VsZWN0ZWQgZnJvbSB0aGUgY2x1c3RlciksIHdoZXJlIHRoZSBzYW1lIGJpbmRpbmdzIHdpbGwgYmUgYXZhaWxhYmxlIG9uIGVhY2ggcmVxdWVzdC4KLSAgICAgKiBSZXF1ZXN0cyBhcmUgYm91bmQgdG8gdGhlIHNhbWUgdGhyZWFkIG9uIHRoZSBzZXJ2ZXIgYW5kIHRodXMgdHJhbnNhY3Rpb25zIG1heSBleHRlbmQgYmV5b25kIHRoZSBib3VuZHMgb2YgYQotICAgICAqIHNpbmdsZSByZXF1ZXN0LiAgSWYge0Bjb2RlIG1hbmFnZVRyYW5zYWN0aW9uc30gaXMgc2V0IHRvIHtAY29kZSBmYWxzZX0gdGhlbiB0cmFuc2FjdGlvbnMgYXJlIG1hbmFnZWQgYnkgdGhlCi0gICAgICogdXNlciBhbmQgbXVzdCBiZSBjb21taXR0ZWQgb3Igcm9sbGVkLWJhY2sgbWFudWFsbHkuIFdoZW4gc2V0IHRvIHtAY29kZSB0cnVlfSB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9yCi0gICAgICogcm9sbGVkLWJhY2sgYXQgdGhlIGVuZCBvZiBlYWNoIHJlcXVlc3QuCi0gICAgICogPHAvPgotICAgICAqIE5vdGUgdGhhdCBjYWxsaW5nIHRoaXMgbWV0aG9kIGRvZXMgbm90IGltcGx5IHRoYXQgYSBjb25uZWN0aW9uIGlzIG1hZGUgdG8gdGhlIHNlcnZlciBpdHNlbGYgYXQgdGhpcyBwb2ludC4KLSAgICAgKiBUaGVyZWZvcmUsIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlcnZlciBzcGVjaWZpZWQgaW4gdGhlIHtAY29kZSBDbHVzdGVyfSBhbmQgdGhhdCBzZXJ2ZXIgaXMgbm90IGF2YWlsYWJsZSBhbgotICAgICAqIGVycm9yIHdpbGwgbm90IGJlIHJhaXNlZCBhdCB0aGlzIHBvaW50LiAgQ29ubmVjdGlvbnMgZ2V0IGluaXRpYWxpemVkIGluIHRoZSB7QGxpbmsgQ2xpZW50fSB3aGVuIGEgcmVxdWVzdCBpcwotICAgICAqIHN1Ym1pdHRlZCBvciBjYW4gYmUgZGlyZWN0bHkgaW5pdGlhbGl6ZWQgdmlhIHtAbGluayBDbGllbnQjaW5pdCgpfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZXNzaW9uSWQgdXNlciBzdXBwbGllZCBpZCBmb3IgdGhlIHNlc3Npb24gd2hpY2ggc2hvdWxkIGJlIHVuaXF1ZSAoYSBVVUlEIGlzIGlkZWFsKS4KLSAgICAgKiBAcGFyYW0gbWFuYWdlVHJhbnNhY3Rpb25zIGVuYWJsZXMgYXV0by10cmFuc2FjdGlvbnMgd2hlbiBzZXQgdG8gdHJ1ZQotICAgICAqLwotICAgIHB1YmxpYyA8VCBleHRlbmRzIENsaWVudD4gVCBjb25uZWN0KGZpbmFsIFN0cmluZyBzZXNzaW9uSWQsIGZpbmFsIGJvb2xlYW4gbWFuYWdlVHJhbnNhY3Rpb25zKSB7Ci0gICAgICAgIGZpbmFsIENsaWVudC5TZXNzaW9uU2V0dGluZ3Mgc2Vzc2lvblNldHRpbmdzID0gQ2xpZW50LlNlc3Npb25TZXR0aW5ncy5idWlsZCgpCi0gICAgICAgICAgICAgICAgLm1hbmFnZVRyYW5zYWN0aW9ucyhtYW5hZ2VUcmFuc2FjdGlvbnMpCi0gICAgICAgICAgICAgICAgLnNlc3Npb25JZChzZXNzaW9uSWQpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQuU2V0dGluZ3Mgc2V0dGluZ3MgPSBDbGllbnQuU2V0dGluZ3MuYnVpbGQoKS51c2VTZXNzaW9uKHNlc3Npb25TZXR0aW5ncykuY3JlYXRlKCk7Ci0gICAgICAgIHJldHVybiBjb25uZWN0KHNldHRpbmdzKTsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBDbGllbnR9IGJhc2VkIG9uIHRoZSBzZXR0aW5ncyBwcm92aWRlZC4KICAgICAgKi8KLSAgICBwdWJsaWMgPFQgZXh0ZW5kcyBDbGllbnQ+IFQgY29ubmVjdChmaW5hbCBDbGllbnQuU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IHNldHRpbmdzLmdldFNlc3Npb24oKS5pc1ByZXNlbnQoKSA/IG5ldyBDbGllbnQuU2Vzc2lvbmVkQ2xpZW50KHRoaXMsIHNldHRpbmdzKSA6Ci0gICAgICAgICAgICAgICAgbmV3IENsaWVudC5DbHVzdGVyZWRDbGllbnQodGhpcywgc2V0dGluZ3MpOworICAgIHB1YmxpYyA8VCBleHRlbmRzIENsaWVudD4gVCBjb25uZWN0KCkgeworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudC5DbHVzdGVyZWRDbGllbnQodGhpcyk7CiAgICAgICAgIG1hbmFnZXIudHJhY2tDbGllbnQoY2xpZW50KTsKICAgICAgICAgcmV0dXJuIChUKSBjbGllbnQ7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgVHJhbnNhY3Rpb259IHVzaW5nIHRoZSBzZXJ2ZXIncyBkZWZhdWx0IHRyYXZlcnNhbCBzb3VyY2UuCisgICAgICogVGhlIHNlcnZlciB3aWxsIGJpbmQgdG8gImciIGJ5IGRlZmF1bHQgd2hlbiBubyB0cmF2ZXJzYWwgc291cmNlIGlzIHNwZWNpZmllZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgUmVtb3RlVHJhbnNhY3Rpb24gdHJhbnNhY3QoKSB7CisgICAgICAgIHJldHVybiB0cmFuc2FjdChudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBUcmFuc2FjdGlvbn0gYm91bmQgdG8gdGhlIHNwZWNpZmllZCBncmFwaCBvciB0cmF2ZXJzYWwgc291cmNlLgorICAgICAqCisgICAgICogQHBhcmFtIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UgdGhlIGdyYXBoL3RyYXZlcnNhbCBzb3VyY2UgYWxpYXMsIG9yIG51bGwgdG8gdXNlIHRoZSBzZXJ2ZXIgZGVmYXVsdAorICAgICAqLworICAgIHB1YmxpYyBSZW1vdGVUcmFuc2FjdGlvbiB0cmFuc2FjdChmaW5hbCBTdHJpbmcgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSkgeworICAgICAgICBmaW5hbCBDbGllbnQuUGlubmVkQ2xpZW50IHBpbm5lZENsaWVudCA9IG5ldyBDbGllbnQuUGlubmVkQ2xpZW50KHRoaXMpOworICAgICAgICBtYW5hZ2VyLnRyYWNrQ2xpZW50KHBpbm5lZENsaWVudCk7CisgICAgICAgIHJldHVybiBuZXcgSHR0cFJlbW90ZVRyYW5zYWN0aW9uKHBpbm5lZENsaWVudCwgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuIG1hbmFnZXIudG9TdHJpbmcoKTsKQEAgLTE3MSw2ICsxMzgsMTAgQEAKICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKGFkZHJlc3MpOwogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBidWlsZChmaW5hbCBSZXF1ZXN0SW50ZXJjZXB0b3Igc2VyaWFsaXppbmdJbnRlcmNlcHRvcikgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXIoc2VyaWFsaXppbmdJbnRlcmNlcHRvcik7CisgICAgfQorCiAgICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGJ1aWxkKGZpbmFsIEZpbGUgY29uZmlndXJhdGlvbkZpbGUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IFNldHRpbmdzLnJlYWQobmV3IEZpbGVJbnB1dFN0cmVhbShjb25maWd1cmF0aW9uRmlsZSkpOwogICAgICAgICByZXR1cm4gZ2V0QnVpbGRlckZyb21TZXR0aW5ncyhzZXR0aW5ncyk7CkBAIC0xNzgsMTQgKzE0OSwxMyBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQnVpbGRlciBnZXRCdWlsZGVyRnJvbVNldHRpbmdzKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7CiAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBhZGRyZXNzZXMgPSBzZXR0aW5ncy5ob3N0czsKLSAgICAgICAgaWYgKGFkZHJlc3Nlcy5zaXplKCkgPT0gMCkKKyAgICAgICAgaWYgKGFkZHJlc3Nlcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQgdG8gdGhlIGhvc3RzIHNldHRpbmciKTsKIAogICAgICAgICBmaW5hbCBCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcihzZXR0aW5ncy5ob3N0cy5nZXQoMCkpCiAgICAgICAgICAgICAgICAgLnBvcnQoc2V0dGluZ3MucG9ydCkKICAgICAgICAgICAgICAgICAucGF0aChzZXR0aW5ncy5wYXRoKQogICAgICAgICAgICAgICAgIC5lbmFibGVTc2woc2V0dGluZ3MuY29ubmVjdGlvblBvb2wuZW5hYmxlU3NsKQotICAgICAgICAgICAgICAgIC5rZWVwQWxpdmVJbnRlcnZhbChzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5rZWVwQWxpdmVJbnRlcnZhbCkKICAgICAgICAgICAgICAgICAua2V5U3RvcmUoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wua2V5U3RvcmUpCiAgICAgICAgICAgICAgICAgLmtleVN0b3JlUGFzc3dvcmQoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wua2V5U3RvcmVQYXNzd29yZCkKICAgICAgICAgICAgICAgICAua2V5U3RvcmVUeXBlKHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLmtleVN0b3JlVHlwZSkKQEAgLTE5OSwyOCArMTY5LDE4IEBACiAgICAgICAgICAgICAgICAgLndvcmtlclBvb2xTaXplKHNldHRpbmdzLndvcmtlclBvb2xTaXplKQogICAgICAgICAgICAgICAgIC5yZWNvbm5lY3RJbnRlcnZhbChzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5yZWNvbm5lY3RJbnRlcnZhbCkKICAgICAgICAgICAgICAgICAucmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLnJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSkKLSAgICAgICAgICAgICAgICAuY2hhbm5lbGl6ZXIoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wuY2hhbm5lbGl6ZXIpCi0gICAgICAgICAgICAgICAgLm1heENvbnRlbnRMZW5ndGgoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4Q29udGVudExlbmd0aCkKKyAgICAgICAgICAgICAgICAubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoKHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLm1heFJlc3BvbnNlQ29udGVudExlbmd0aCkKICAgICAgICAgICAgICAgICAubWF4V2FpdEZvckNvbm5lY3Rpb24oc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4V2FpdEZvckNvbm5lY3Rpb24pCi0gICAgICAgICAgICAgICAgLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24oc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbikKLSAgICAgICAgICAgICAgICAubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbihzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5taW5JblByb2Nlc3NQZXJDb25uZWN0aW9uKQotICAgICAgICAgICAgICAgIC5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKQotICAgICAgICAgICAgICAgIC5taW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKQogICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4U2l6ZSkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLm1pblNpemUpCiAgICAgICAgICAgICAgICAgLmNvbm5lY3Rpb25TZXR1cFRpbWVvdXRNaWxsaXMoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcykKKyAgICAgICAgICAgICAgICAuaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzKHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLmlkbGVDb25uZWN0aW9uVGltZW91dCkKICAgICAgICAgICAgICAgICAuZW5hYmxlVXNlckFnZW50T25Db25uZWN0KHNldHRpbmdzLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCkKLSAgICAgICAgICAgICAgICAuZW5hYmxlQ29tcHJlc3Npb24oc2V0dGluZ3MuZW5hYmxlQ29tcHJlc3Npb24pCisgICAgICAgICAgICAgICAgLmJ1bGtSZXN1bHRzKHNldHRpbmdzLmJ1bGtSZXN1bHRzKQogICAgICAgICAgICAgICAgIC52YWxpZGF0aW9uUmVxdWVzdChzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC52YWxpZGF0aW9uUmVxdWVzdCk7CiAKLSAgICAgICAgaWYgKHNldHRpbmdzLnVzZXJuYW1lICE9IG51bGwgJiYgc2V0dGluZ3MucGFzc3dvcmQgIT0gbnVsbCkKLSAgICAgICAgICAgIGJ1aWxkZXIuY3JlZGVudGlhbHMoc2V0dGluZ3MudXNlcm5hbWUsIHNldHRpbmdzLnBhc3N3b3JkKTsKLQotICAgICAgICBpZiAoc2V0dGluZ3MuamFhc0VudHJ5ICE9IG51bGwpCi0gICAgICAgICAgICBidWlsZGVyLmphYXNFbnRyeShzZXR0aW5ncy5qYWFzRW50cnkpOwotCi0gICAgICAgIGlmIChzZXR0aW5ncy5wcm90b2NvbCAhPSBudWxsKQotICAgICAgICAgICAgYnVpbGRlci5wcm90b2NvbChzZXR0aW5ncy5wcm90b2NvbCk7CisgICAgICAgIGlmICghc2V0dGluZ3MuYXV0aC50eXBlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYnVpbGRlci5hdXRoKEF1dGguZnJvbShzZXR0aW5ncy5hdXRoKSk7CisgICAgICAgIH0KIAogICAgICAgICAvLyB0aGUgZmlyc3QgYWRkcmVzcyB3YXMgYWRkZWQgYWJvdmUgaW4gdGhlIGNvbnN0cnVjdG9yLCBzbyBza2lwIGl0IGlmIHRoZXJlIGFyZSBtb3JlCiAgICAgICAgIGlmIChhZGRyZXNzZXMuc2l6ZSgpID4gMSkKQEAgLTMxNSwyMCArMjc1LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTaXplIG9mIHRoZSBwb29sIGZvciBoYW5kbGluZyByZXF1ZXN0L3Jlc3BvbnNlIG9wZXJhdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXROaW9Qb29sU2l6ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIubmlvUG9vbFNpemU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2l6ZSBvZiB0aGUgcG9vbCBmb3IgaGFuZGxpbmcgYmFja2dyb3VuZCB3b3JrLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0V29ya2VyUG9vbFNpemUoKSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyLndvcmtlclBvb2xTaXplOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIEdldCB0aGUge0BsaW5rIE1lc3NhZ2VTZXJpYWxpemVyfSBNSU1FIHR5cGVzIHN1cHBvcnRlZC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0U2VyaWFsaXplcnMoKSB7CkBAIC0zNDMsMzYgKzI4OSw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWluaW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIHRoYXQgY2FuIG9jY3VyIG9uIGEge0BsaW5rIENvbm5lY3Rpb259IGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkCi0gICAgICogZm9yIGNsb3Npbmcgb24gcmV0dXJuIHRvIHRoZSB7QGxpbmsgQ29ubmVjdGlvblBvb2x9LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0TWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncy5taW5JblByb2Nlc3NQZXJDb25uZWN0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCByZXF1ZXN0cyB0aGF0IGNhbiBvY2N1ciBvbiBhIHtAbGluayBDb25uZWN0aW9ufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldE1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0aGF0IGEge0BsaW5rIENvbm5lY3Rpb259IGNhbiBiZSBib3Jyb3dlZCBmcm9tIHRoZSBwb29sIHNpbXVsdGFuZW91c2x5LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgbWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKCkgewotICAgICAgICByZXR1cm4gbWFuYWdlci5jb25uZWN0aW9uUG9vbFNldHRpbmdzLm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyB0aGF0IGEge0BsaW5rIENvbm5lY3Rpb259IHNob3VsZCBiZSBib3Jyb3dlZCBmcm9tIHRoZSBwb29sIGJlZm9yZSBpdCBmYWxscwotICAgICAqIHVuZGVyIGNvbnNpZGVyYXRpb24gZm9yIGNsb3NpbmcuCi0gICAgICovCi0gICAgcHVibGljIGludCBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIEdldHMgdGhlIG1heGltdW0gc2l6ZSB0aGF0IHRoZSB7QGxpbmsgQ29ubmVjdGlvblBvb2x9IGNhbiBncm93LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgbWF4Q29ubmVjdGlvblBvb2xTaXplKCkgewpAQCAtMzgwLDEzICsyOTYsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUge0BsaW5rIENvbm5lY3Rpb25Qb29sfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncy5taW5TaXplOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIEdldHMgdGhlIG92ZXJyaWRlIGZvciB0aGUgc2VydmVyIHNldHRpbmcgdGhhdCBkZXRlcm1pbmVzIGhvdyBtYW55IHJlc3VsdHMgYXJlIHJldHVybmVkIHBlciBiYXRjaC4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldFJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSgpIHsKQEAgLTQwOCw0MSArMzE3LDE3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIGFueSByZXF1ZXN0IHNlbnQgdG8gdGhlIHNlcnZlci4KKyAgICAgKiBHZXRzIHRoZSBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgYW55IHJlcXVlc3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0TWF4Q29udGVudExlbmd0aCgpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncy5tYXhDb250ZW50TGVuZ3RoOworICAgIHB1YmxpYyBsb25nIGdldE1heFJlc3BvbnNlQ29udGVudExlbmd0aCgpIHsKKyAgICAgICAgcmV0dXJuIG1hbmFnZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncy5tYXhSZXNwb25zZUNvbnRlbnRMZW5ndGg7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogR2V0cyB0aGUge0BsaW5rIENoYW5uZWxpemVyfSBpbXBsZW1lbnRhdGlvbiB0byB1c2Ugb24gdGhlIGNsaWVudCB3aGVuIGNyZWF0aW5nIGEge0BsaW5rIENvbm5lY3Rpb259LgorICAgICAqIEdldCB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBkcml2ZXIgd2lsbCBhbGxvdyBhIGNoYW5uZWwgdG8gbm90IHJlY2VpdmUgcmVhZCBvciB3cml0ZXMgYmVmb3JlIGl0IGF1dG9tYXRpY2FsbHkgY2xvc2VzLgogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhbm5lbGl6ZXIoKSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MuY2hhbm5lbGl6ZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gcmV0cmllcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVjb25uZWN0IHRvIGEgZGVhZCBob3N0LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UmVjb25uZWN0SW50ZXJ2YWwoKSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MucmVjb25uZWN0SW50ZXJ2YWw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGFmdGVyIHRoZSBsYXN0IG1lc3NhZ2UgaXMgc2VudCBvdmVyIGEgY29ubmVjdGlvbiBiZWZvcmUgc2VuZGluZyBhIGtlZXAtYWxpdmUKLSAgICAgKiBtZXNzYWdlIHRvIHRoZSBzZXJ2ZXIuCi0gICAgICovCi0gICAgcHVibGljIGxvbmcgZ2V0S2VlcEFsaXZlSW50ZXJ2YWwoKSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3Mua2VlcEFsaXZlSW50ZXJ2YWw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aW1lIGR1cmF0aW9uIG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHByb3ZpZGVkIGZvciBjb25uZWN0aW9uIHNldHVwIHRvIGNvbXBsZXRlIHdoaWNoIGluY2x1ZGVzIFdlYlNvY2tldAotICAgICAqIGhhbmRzaGFrZSBhbmQgU1NMIGhhbmRzaGFrZS4gQmV5b25kIHRoaXMgZHVyYXRpb24gYW4gZXhjZXB0aW9uIHdvdWxkIGJlIHRocm93biBpZiB0aGUgaGFuZHNoYWtlIGlzIG5vdCBjb21wbGV0ZQotICAgICAqIGJ5IHRoZW4uCi0gICAgICovCi0gICAgcHVibGljIGxvbmcgZ2V0Q29ubmVjdGlvblNldHVwVGltZW91dCgpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncy5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzOworICAgIHB1YmxpYyBsb25nIGdldElkbGVDb25uZWN0aW9uVGltZW91dCgpIHsKKyAgICAgICAgcmV0dXJuIG1hbmFnZXIuY29ubmVjdGlvblBvb2xTZXR0aW5ncy5pZGxlQ29ubmVjdGlvblRpbWVvdXQ7CiAgICAgfQogCiAgICAgLyoqCkBAIC00NjAsMTkgKzM0NSwyMCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIERldGVybWluZXMgd2hldGhlciB0byByZXVzZSBjb25uZWN0aW9ucyBmb3IgdHJhbnNhY3Rpb25zIG9yIGNyZWF0ZSBuZXcgb25lcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1JldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucygpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIucmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIEdldHMgYSBsaXN0IG9mIGFsbCB0aGUgY29uZmlndXJlZCBob3N0cy4KICAgICAgKi8KICAgICBwdWJsaWMgQ29sbGVjdGlvbjxIb3N0PiBhbGxIb3N0cygpIHsKICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUNvbGxlY3Rpb24obWFuYWdlci5hbGxIb3N0cygpKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0cmFja1RyYW5zYWN0aW9uKGZpbmFsIEh0dHBSZW1vdGVUcmFuc2FjdGlvbiB0eCkgeworICAgICAgICBtYW5hZ2VyLnRyYWNrVHJhbnNhY3Rpb24odHgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVudHJhY2tUcmFuc2FjdGlvbihmaW5hbCBIdHRwUmVtb3RlVHJhbnNhY3Rpb24gdHgpIHsKKyAgICAgICAgbWFuYWdlci51bnRyYWNrVHJhbnNhY3Rpb24odHgpOworICAgIH0KKwogICAgIEZhY3RvcnkgZ2V0RmFjdG9yeSgpIHsKICAgICAgICAgcmV0dXJuIG1hbmFnZXIuZmFjdG9yeTsKICAgICB9CkBAIC00ODEsOCArMzY3LDggQEAKICAgICAgICAgcmV0dXJuIG1hbmFnZXIuc2VyaWFsaXplcjsKICAgICB9CiAKLSAgICBVbmFyeU9wZXJhdG9yPEZ1bGxIdHRwUmVxdWVzdD4gZ2V0UmVxdWVzdEludGVyY2VwdG9yKCkgewotICAgICAgICByZXR1cm4gbWFuYWdlci5pbnRlcmNlcHRvcjsKKyAgICBMaXN0PFBhaXI8U3RyaW5nLCA/IGV4dGVuZHMgUmVxdWVzdEludGVyY2VwdG9yPj4gZ2V0UmVxdWVzdEludGVyY2VwdG9ycygpIHsKKyAgICAgICAgcmV0dXJuIG1hbmFnZXIuaW50ZXJjZXB0b3JzOwogICAgIH0KIAogICAgIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcigpIHsKQEAgLTUwNSwxMCArMzkxLDYgQEAKICAgICAgICAgcmV0dXJuIG1hbmFnZXIubG9hZEJhbGFuY2luZ1N0cmF0ZWd5OwogICAgIH0KIAotICAgIEF1dGhQcm9wZXJ0aWVzIGF1dGhQcm9wZXJ0aWVzKCkgewotICAgICAgICByZXR1cm4gbWFuYWdlci5hdXRoUHJvcHM7Ci0gICAgfQotCiAgICAgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciB2YWxpZGF0aW9uUmVxdWVzdCgpIHsKICAgICAgICAgcmV0dXJuIG1hbmFnZXIudmFsaWRhdGlvblJlcXVlc3QuZ2V0KCk7CiAgICAgfQpAQCAtNTg3LDMyICs0NjksMjcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgY2x1c3RlciBpcyBjb25maWd1cmVkIHRvIHVzZSBwZXItbWVzc2FnZSBkZWZsYXRlIGNvbXByZXNzaW9uCisgICAgICogQ2hlY2tzIGlmIGNsdXN0ZXIgaXMgY29uZmlndXJlZCB0byBidWxrIHJlc3VsdHMKICAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVDb21wcmVzc2lvbigpIHsKLSAgICAgICAgcmV0dXJuIG1hbmFnZXIuZW5hYmxlQ29tcHJlc3Npb24oKTsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0J1bGtSZXN1bHRzRW5hYmxlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1hbmFnZXIuaXNCdWxrUmVzdWx0c0VuYWJsZWQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBwcml2YXRlIExpc3Q8SW5ldEFkZHJlc3M+IGFkZHJlc3NlcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBwcml2YXRlIHN0YXRpYyBpbnQgSU5URVJDRVBUT1JfTk9UX0ZPVU5EID0gLTE7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEluZXRBZGRyZXNzPiBhZGRyZXNzZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgcHJpdmF0ZSBpbnQgcG9ydCA9IDgxODI7CiAgICAgICAgIHByaXZhdGUgU3RyaW5nIHBhdGggPSAiL2dyZW1saW4iOwogICAgICAgICBwcml2YXRlIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIgPSBudWxsOwogICAgICAgICBwcml2YXRlIGludCBuaW9Qb29sU2l6ZSA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmF2YWlsYWJsZVByb2Nlc3NvcnMoKTsKICAgICAgICAgcHJpdmF0ZSBpbnQgd29ya2VyUG9vbFNpemUgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5hdmFpbGFibGVQcm9jZXNzb3JzKCkgKiAyOwotICAgICAgICBwcml2YXRlIGludCBtaW5Db25uZWN0aW9uUG9vbFNpemUgPSBDb25uZWN0aW9uUG9vbC5NSU5fUE9PTF9TSVpFOwogICAgICAgICBwcml2YXRlIGludCBtYXhDb25uZWN0aW9uUG9vbFNpemUgPSBDb25uZWN0aW9uUG9vbC5NQVhfUE9PTF9TSVpFOwotICAgICAgICBwcml2YXRlIGludCBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPSBDb25uZWN0aW9uUG9vbC5NSU5fU0lNVUxUQU5FT1VTX1VTQUdFX1BFUl9DT05ORUNUSU9OOwotICAgICAgICBwcml2YXRlIGludCBtYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPSBDb25uZWN0aW9uUG9vbC5NQVhfU0lNVUxUQU5FT1VTX1VTQUdFX1BFUl9DT05ORUNUSU9OOwotICAgICAgICBwcml2YXRlIGludCBtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uID0gQ29ubmVjdGlvbi5NQVhfSU5fUFJPQ0VTUzsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiA9IENvbm5lY3Rpb24uTUlOX0lOX1BST0NFU1M7CiAgICAgICAgIHByaXZhdGUgaW50IG1heFdhaXRGb3JDb25uZWN0aW9uID0gQ29ubmVjdGlvbi5NQVhfV0FJVF9GT1JfQ09OTkVDVElPTjsKICAgICAgICAgcHJpdmF0ZSBpbnQgbWF4V2FpdEZvckNsb3NlID0gQ29ubmVjdGlvbi5NQVhfV0FJVF9GT1JfQ0xPU0U7Ci0gICAgICAgIHByaXZhdGUgaW50IG1heENvbnRlbnRMZW5ndGggPSBDb25uZWN0aW9uLk1BWF9DT05URU5UX0xFTkdUSDsKKyAgICAgICAgcHJpdmF0ZSBsb25nIG1heFJlc3BvbnNlQ29udGVudExlbmd0aCA9IENvbm5lY3Rpb24uTUFYX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIOwogICAgICAgICBwcml2YXRlIGludCByZWNvbm5lY3RJbnRlcnZhbCA9IENvbm5lY3Rpb24uUkVDT05ORUNUX0lOVEVSVkFMOwogICAgICAgICBwcml2YXRlIGludCByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgPSBDb25uZWN0aW9uLlJFU1VMVF9JVEVSQVRJT05fQkFUQ0hfU0laRTsKLSAgICAgICAgcHJpdmF0ZSBsb25nIGtlZXBBbGl2ZUludGVydmFsID0gQ29ubmVjdGlvbi5LRUVQX0FMSVZFX0lOVEVSVkFMOwotICAgICAgICBwcml2YXRlIFN0cmluZyBjaGFubmVsaXplciA9IENoYW5uZWxpemVyLldlYlNvY2tldENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZVNzbCA9IGZhbHNlOwogICAgICAgICBwcml2YXRlIFN0cmluZyBrZXlTdG9yZSA9IG51bGw7CiAgICAgICAgIHByaXZhdGUgU3RyaW5nIGtleVN0b3JlUGFzc3dvcmQgPSBudWxsOwpAQCAtNjI2LDE5ICs1MDMsMjUgQEAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIHNzbFNraXBDZXJ0VmFsaWRhdGlvbiA9IGZhbHNlOwogICAgICAgICBwcml2YXRlIFNzbENvbnRleHQgc3NsQ29udGV4dCA9IG51bGw7CiAgICAgICAgIHByaXZhdGUgTG9hZEJhbGFuY2luZ1N0cmF0ZWd5IGxvYWRCYWxhbmNpbmdTdHJhdGVneSA9IG5ldyBMb2FkQmFsYW5jaW5nU3RyYXRlZ3kuUm91bmRSb2JpbigpOwotICAgICAgICBwcml2YXRlIFVuYXJ5T3BlcmF0b3I8RnVsbEh0dHBSZXF1ZXN0PiBpbnRlcmNlcHRvciA9IEhhbmRzaGFrZUludGVyY2VwdG9yLk5PX09QOwotICAgICAgICBwcml2YXRlIEF1dGhQcm9wZXJ0aWVzIGF1dGhQcm9wcyA9IG5ldyBBdXRoUHJvcGVydGllcygpOworICAgICAgICBwcml2YXRlIExpbmtlZExpc3Q8UGFpcjxTdHJpbmcsID8gZXh0ZW5kcyBSZXF1ZXN0SW50ZXJjZXB0b3I+PiBpbnRlcmNlcHRvcnMgPSBuZXcgTGlua2VkTGlzdDw+KCk7CiAgICAgICAgIHByaXZhdGUgbG9uZyBjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzID0gQ29ubmVjdGlvbi5DT05ORUNUSU9OX1NFVFVQX1RJTUVPVVRfTUlMTElTOworICAgICAgICBwcml2YXRlIGxvbmcgaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzID0gQ29ubmVjdGlvbi5DT05ORUNUSU9OX0lETEVfVElNRU9VVF9NSUxMSVM7CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBlbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgPSB0cnVlOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlQ29tcHJlc3Npb24gPSB0cnVlOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zID0gZmFsc2U7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBidWxrUmVzdWx0cyA9IGZhbHNlOwogCiAgICAgICAgIHByaXZhdGUgQnVpbGRlcigpIHsKLSAgICAgICAgICAgIC8vIGVtcHR5IHRvIHByZXZlbnQgZGlyZWN0IGluc3RhbnRpYXRpb24KKyAgICAgICAgICAgIGFkZEludGVyY2VwdG9yKFNFUklBTElaRVJfSU5URVJDRVBUT1JfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFBheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yKG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBCdWlsZGVyKGZpbmFsIFN0cmluZyBhZGRyZXNzKSB7CiAgICAgICAgICAgICBhZGRDb250YWN0UG9pbnQoYWRkcmVzcyk7CisgICAgICAgICAgICBhZGRJbnRlcmNlcHRvcihTRVJJQUxJWkVSX0lOVEVSQ0VQVE9SX05BTUUsCisgICAgICAgICAgICAgICAgICAgIG5ldyBQYXlsb2FkU2VyaWFsaXppbmdJbnRlcmNlcHRvcihuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgQnVpbGRlcihmaW5hbCBSZXF1ZXN0SW50ZXJjZXB0b3IgYm9keVNlcmlhbGl6ZXIpIHsKKyAgICAgICAgICAgIGFkZEludGVyY2VwdG9yKFNFUklBTElaRVJfSU5URVJDRVBUT1JfTkFNRSwgYm9keVNlcmlhbGl6ZXIpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC03MTQsMTUgKzU5Nyw2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogTGVuZ3RoIG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgb24gYW4gaWRsZSBjb25uZWN0aW9uIGJlZm9yZSBzZW5kaW5nIGEga2VlcC1hbGl2ZSByZXF1ZXN0LiBTZXQgdG8KLSAgICAgICAgICogemVybyB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGtlZXBBbGl2ZUludGVydmFsKGZpbmFsIGxvbmcga2VlcEFsaXZlSW50ZXJ2YWwpIHsKLSAgICAgICAgICAgIHRoaXMua2VlcEFsaXZlSW50ZXJ2YWwgPSBrZWVwQWxpdmVJbnRlcnZhbDsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBmaWxlIGxvY2F0aW9uIG9mIHRoZSBwcml2YXRlIGtleSBpbiBKS1Mgb3IgUEtDUyMxMiBmb3JtYXQuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciBrZXlTdG9yZShmaW5hbCBTdHJpbmcga2V5U3RvcmUpIHsKQEAgLTgwMSw1MyArNjc1LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIHRoYXQgY2FuIG9jY3VyIG9uIGEge0BsaW5rIENvbm5lY3Rpb259IGJlZm9yZSBpdCBpcyBjb25zaWRlcmVkCi0gICAgICAgICAqIGZvciBjbG9zaW5nIG9uIHJldHVybiB0byB0aGUge0BsaW5rIENvbm5lY3Rpb25Qb29sfS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24oZmluYWwgaW50IG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIHRoaXMubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiA9IG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb247Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgaW4tZmxpZ2h0IHJlcXVlc3RzIHRoYXQgY2FuIG9jY3VyIG9uIGEge0BsaW5rIENvbm5lY3Rpb259LiBUaGlzIHJlcHJlc2VudHMgYW4KLSAgICAgICAgICogaW5kaWNhdGlvbiBvZiBob3cgYnVzeSBhIHtAbGluayBDb25uZWN0aW9ufSBpcyBhbGxvd2VkIHRvIGJlLiAgVGhpcyBudW1iZXIgaXMgbGlua2VkIHRvIHRoZQotICAgICAgICAgKiB7QGxpbmsgI21heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbn0gc2V0dGluZywgYnV0IGlzIHNsaWdodGx5IGRpZmZlcmVudCBpbiB0aGF0IGl0IHJlZmVycyB0bwotICAgICAgICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlcXVlc3RzIG9uIGEge0BsaW5rIENvbm5lY3Rpb259LiAgSW4gb3RoZXIgd29yZHMsIGEge0BsaW5rIENvbm5lY3Rpb259IG1pZ2h0Ci0gICAgICAgICAqIGJlIGJvcnJvd2VkIG9uY2UgdG8gaGF2ZSBtdWx0aXBsZSByZXF1ZXN0cyBleGVjdXRlZCBhZ2FpbnN0IGl0LiAgVGhpcyBudW1iZXIgY29udHJvbHMgdGhlIG1heGltdW0KLSAgICAgICAgICogbnVtYmVyIG9mIHJlcXVlc3RzIHdoZXJlYXMge0BsaW5rICNtYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb259IGNvbnRyb2xzIHRoZSB0aW1lcyBib3Jyb3dlZC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24oZmluYWwgaW50IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pIHsKLSAgICAgICAgICAgIHRoaXMubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiA9IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb247Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhhdCBhIHtAbGluayBDb25uZWN0aW9ufSBjYW4gYmUgYm9ycm93ZWQgZnJvbSB0aGUgcG9vbCBzaW11bHRhbmVvdXNseS4KLSAgICAgICAgICogVGhpcyByZXByZXNlbnRzIGFuIGluZGljYXRpb24gb2YgaG93IGJ1c3kgYSB7QGxpbmsgQ29ubmVjdGlvbn0gaXMgYWxsb3dlZCB0byBiZS4gIFNldCB0b28gbGFyZ2UgYW5kIHRoZQotICAgICAgICAgKiB7QGxpbmsgQ29ubmVjdGlvbn0gbWF5IHF1ZXVlIHJlcXVlc3RzIHRvbyBxdWlja2x5LCByYXRoZXIgdGhhbiB3YWl0IGZvciBhbiBhdmFpbGFibGUge0BsaW5rIENvbm5lY3Rpb259Ci0gICAgICAgICAqIG9yIGNyZWF0ZSBhIGZyZXNoIG9uZS4gIElmIHNldCB0b28gc21hbGwsIHRoZSB7QGxpbmsgQ29ubmVjdGlvbn0gd2lsbCBzaG93IGFzIGJ1c3kgdmVyeSBxdWlja2x5IHRodXMKLSAgICAgICAgICogZm9yY2luZyB3YWl0cyBmb3IgYXZhaWxhYmxlIHtAbGluayBDb25uZWN0aW9ufSBpbnN0YW5jZXMgaW4gdGhlIHBvb2wgd2hlbiB0aGVyZSBpcyBtb3JlIGNhcGFjaXR5IGF2YWlsYWJsZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbihmaW5hbCBpbnQgbWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKSB7Ci0gICAgICAgICAgICB0aGlzLm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiA9IG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyB0aGF0IGEge0BsaW5rIENvbm5lY3Rpb259IHNob3VsZCBiZSBib3Jyb3dlZCBmcm9tIHRoZSBwb29sIGJlZm9yZSBpdCBmYWxscwotICAgICAgICAgKiB1bmRlciBjb25zaWRlcmF0aW9uIGZvciBjbG9zaW5nLiAgSWYgYSB7QGxpbmsgQ29ubmVjdGlvbn0gaXMgbm90IGJ1c3kgYW5kIHRoZQotICAgICAgICAgKiB7QGxpbmsgI21pbkNvbm5lY3Rpb25Qb29sU2l6ZX0gaXMgZXhjZWVkZWQsIHRoZW4gdGhlcmUgaXMgbm8gcmVhc29uIHRvIGtlZXAgdGhhdCBjb25uZWN0aW9uIG9wZW4uICBTZXQKLSAgICAgICAgICogdG9vIGxhcmdlIGFuZCB7QGxpbmsgQ29ubmVjdGlvbn0gdGhhdCBpc24ndCBidXN5IHdpbGwgY29udGludWUgdG8gY29uc3VtZSByZXNvdXJjZXMgd2hlbiBpdCBpcyBub3QgYmVpbmcKLSAgICAgICAgICogdXNlZC4gIFNldCB0b28gc21hbGwgYW5kIHtAbGluayBDb25uZWN0aW9ufSBpbnN0YW5jZXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB0aGUgZHJpdmVyIG1pZ2h0IHN0aWxsIGJlCi0gICAgICAgICAqIGJ1c3kuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oZmluYWwgaW50IG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbikgewotICAgICAgICAgICAgdGhpcy5taW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPSBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb247Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgbWF4aW11bSBzaXplIHRoYXQgdGhlIHtAbGluayBDb25uZWN0aW9uUG9vbH0gY2FuIGdyb3cuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgQnVpbGRlciBtYXhDb25uZWN0aW9uUG9vbFNpemUoZmluYWwgaW50IG1heFNpemUpIHsKQEAgLTg1NiwxNSArNjgzLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgbWluaW11bSBzaXplIG9mIHRoZSB7QGxpbmsgQ29ubmVjdGlvblBvb2x9LiAgV2hlbiB0aGUge0BsaW5rIENsaWVudH0gaXMgc3RhcnRlZCwge0BsaW5rIENvbm5lY3Rpb259Ci0gICAgICAgICAqIG9iamVjdHMgd2lsbCBiZSBpbml0aWFsbHkgY29uc3RydWN0ZWQgdG8gdGhpcyBzaXplLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgbWluQ29ubmVjdGlvblBvb2xTaXplKGZpbmFsIGludCBtaW5TaXplKSB7Ci0gICAgICAgICAgICB0aGlzLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSA9IG1pblNpemU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgogICAgICAgICAgKiBPdmVycmlkZSB0aGUgc2VydmVyIHNldHRpbmcgdGhhdCBkZXRlcm1pbmVzIGhvdyBtYW55IHJlc3VsdHMgYXJlIHJldHVybmVkIHBlciBiYXRjaC4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZShmaW5hbCBpbnQgc2l6ZSkgewpAQCAtODgxLDE0ICs2OTksNiBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIElmIHRydWUsIHJldXNlcyB0aGUgY29ubmVjdGlvbnMgZm9yIHRyYW5zYWN0aW9ucwotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zKGZpbmFsIGJvb2xlYW4gcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zKSB7Ci0gICAgICAgICAgICB0aGlzLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyA9IHJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9uczsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCB0aGUgY29ubmVjdGlvbiB0byBjbG9zZSBiZWZvcmUgdGltaW5nIG91dCB3aGVyZSB0aGUgZGVmYXVsdAogICAgICAgICAgKiB2YWx1ZSBpcyAzMDAwLiBUaGlzIHRpbWVvdXQgYWxsb3dzIGZvciBhIGRlbGF5IHRvIG9jY3VyIGluIHdhaXRpbmcgZm9yIHJlbWFpbmluZyBtZXNzYWdlcyB0aGF0IG1heSBzdGlsbAogICAgICAgICAgKiBiZSByZXR1cm5pbmcgZnJvbSB0aGUgc2VydmVyIHdoaWxlIGEge0BsaW5rIENsaWVudCNjbG9zZSgpfSBpcyBjYWxsZWQuCkBAIC04OTksMzAgKzcwOSwxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBtYXhpbXVtIHNpemUgaW4gYnl0ZXMgb2YgYW55IHJlcXVlc3Qgc2VudCB0byB0aGUgc2VydmVyLiAgIFRoaXMgbnVtYmVyIHNob3VsZCBub3QgZXhjZWVkIHRoZSBzYW1lCi0gICAgICAgICAqIHNldHRpbmcgZGVmaW5lZCBvbiB0aGUgc2VydmVyLgorICAgICAgICAgKiBUaGUgbWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIGFueSByZXNwb25zZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBtYXhDb250ZW50TGVuZ3RoKGZpbmFsIGludCBtYXhDb250ZW50TGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aGlzLm1heENvbnRlbnRMZW5ndGggPSBtYXhDb250ZW50TGVuZ3RoOworICAgICAgICBwdWJsaWMgQnVpbGRlciBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgoZmluYWwgbG9uZyBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoID0gbWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogU3BlY2lmeSB0aGUge0BsaW5rIENoYW5uZWxpemVyfSBpbXBsZW1lbnRhdGlvbiB0byB1c2Ugb24gdGhlIGNsaWVudCB3aGVuIGNyZWF0aW5nIGEge0BsaW5rIENvbm5lY3Rpb259LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgY2hhbm5lbGl6ZXIoZmluYWwgU3RyaW5nIGNoYW5uZWxpemVyQ2xhc3MpIHsKLSAgICAgICAgICAgIHRoaXMuY2hhbm5lbGl6ZXIgPSBjaGFubmVsaXplckNsYXNzOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogU3BlY2lmeSB0aGUge0BsaW5rIENoYW5uZWxpemVyfSBpbXBsZW1lbnRhdGlvbiB0byB1c2Ugb24gdGhlIGNsaWVudCB3aGVuIGNyZWF0aW5nIGEge0BsaW5rIENvbm5lY3Rpb259LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgY2hhbm5lbGl6ZXIoZmluYWwgQ2xhc3MgY2hhbm5lbGl6ZXJDbGFzcykgewotICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWxpemVyKGNoYW5uZWxpemVyQ2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgogICAgICAgICAgKiBTcGVjaWZ5IGEgdmFsaWQgR3JlbWxpbiBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHJlbW90ZSBvcGVyYXRpb25zLiBUaGlzIHNjcmlwdCBzaG91bGQgYmUgZGVzaWduZWQKICAgICAgICAgICogdG8gcmV0dXJuIHF1aWNrbHkgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIG92ZXJoZWFkIHBvc3NpYmxlLiBCeSBkZWZhdWx0LCB0aGUgc2NyaXB0IHNlbmRzIGFuIGVtcHR5IHN0cmluZy4KICAgICAgICAgICogSWYgdGhlIGdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdGhhdCBzb3J0IG9mIHNjcmlwdCBiZWNhdXNlIGl0IHJlcXVpcmVzIGFsbCBzY3JpcHRzIHRvIGluY2x1ZGUgYSByZWZlcmVuY2UKQEAgLTk1MCw1NyArNzQ0LDgyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogU3BlY2lmaWVzIGFuIHtAbGluayBIYW5kc2hha2VJbnRlcmNlcHRvcn0gdGhhdCB3aWxsIGFsbG93IG1hbmlwdWxhdGlvbiBvZiB0aGUge0Bjb2RlIEZ1bGxIdHRwUmVxdWVzdH0gcHJpb3IKLSAgICAgICAgICogdG8gaXRzIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlci4KLSAgICAgICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjYuNiwgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3JlcXVlc3RJbnRlcmNlcHRvcihSZXF1ZXN0SW50ZXJjZXB0b3IpfS4KKyAgICAgICAgICogQWRkcyBhIHtAbGluayBSZXF1ZXN0SW50ZXJjZXB0b3J9IGFmdGVyIGFub3RoZXIgb25lIHRoYXQgd2lsbCBhbGxvdyBtYW5pcHVsYXRpb24gb2YgdGhlIHtAY29kZSBIdHRwUmVxdWVzdH0KKyAgICAgICAgICogcHJpb3IgdG8gaXRzIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlci4KICAgICAgICAgICovCi0gICAgICAgIEBEZXByZWNhdGVkCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGhhbmRzaGFrZUludGVyY2VwdG9yKGZpbmFsIEhhbmRzaGFrZUludGVyY2VwdG9yIGludGVyY2VwdG9yKSB7Ci0gICAgICAgICAgICAvLyB3aGVuIHRoaXMgZGVwcmVjYXRlZCBtZXRob2QgaXMgcmVtb3ZlZCwgdGhlIGludGVyY2VwdG9yIGNhbiBoYXZlIGl0cyB0eXBlIHByb21vdGVkIGZyb20KLSAgICAgICAgICAgIC8vIFVuYXJ5T3BlcmF0b3I8RnVsbEh0dHBSZXF1ZXN0PiB0byBSZXF1ZXN0SW50ZXJjZXB0b3IKLSAgICAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3IgPSBpbnRlcmNlcHRvcjsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkSW50ZXJjZXB0b3JBZnRlcihmaW5hbCBTdHJpbmcgcHJpb3JJbnRlcmNlcHRvck5hbWUsIGZpbmFsIFN0cmluZyBuYW1lT2ZJbnRlcmNlcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IGdldEludGVyY2VwdG9ySW5kZXgocHJpb3JJbnRlcmNlcHRvck5hbWUpOworICAgICAgICAgICAgaWYgKElOVEVSQ0VQVE9SX05PVF9GT1VORCA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24ocHJpb3JJbnRlcmNlcHRvck5hbWUgKyAiIGludGVyY2VwdG9yIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChnZXRJbnRlcmNlcHRvckluZGV4KG5hbWVPZkludGVyY2VwdG9yKSAhPSBJTlRFUkNFUFRPUl9OT1RfRk9VTkQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKG5hbWVPZkludGVyY2VwdG9yICsgIiBpbnRlcmNlcHRvciBhbHJlYWR5IGV4aXN0cyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50ZXJjZXB0b3JzLmFkZChpbmRleCArIDEsIFBhaXIub2YobmFtZU9mSW50ZXJjZXB0b3IsIGludGVyY2VwdG9yKSk7CisKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFNwZWNpZmllcyBhbiB7QGxpbmsgSGFuZHNoYWtlSW50ZXJjZXB0b3J9IHRoYXQgd2lsbCBhbGxvdyBtYW5pcHVsYXRpb24gb2YgdGhlIHtAY29kZSBGdWxsSHR0cFJlcXVlc3R9IHByaW9yCi0gICAgICAgICAqIHRvIGl0cyBiZWluZyBzZW50IHRvIHRoZSBzZXJ2ZXIuIEZvciB3ZWJzb2NrZXRzIHRoZSBpbnRlcmNlcHRvciBpcyBvbmx5IGNhbGxlZCBvbiB0aGUgaGFuZHNoYWtlLgorICAgICAgICAgKiBBZGRzIGEge0BsaW5rIFJlcXVlc3RJbnRlcmNlcHRvcn0gYmVmb3JlIGFub3RoZXIgb25lIHRoYXQgd2lsbCBhbGxvdyBtYW5pcHVsYXRpb24gb2YgdGhlIHtAY29kZSBIdHRwUmVxdWVzdH0KKyAgICAgICAgICogcHJpb3IgdG8gaXRzIGJlaW5nIHNlbnQgdG8gdGhlIHNlcnZlci4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHJlcXVlc3RJbnRlcmNlcHRvcihmaW5hbCBSZXF1ZXN0SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IpIHsKLSAgICAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3IgPSBpbnRlcmNlcHRvcjsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkSW50ZXJjZXB0b3JCZWZvcmUoZmluYWwgU3RyaW5nIHN1YnNlcXVlbnRJbnRlcmNlcHRvck5hbWUsIGZpbmFsIFN0cmluZyBuYW1lT2ZJbnRlcmNlcHRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVxdWVzdEludGVyY2VwdG9yIGludGVyY2VwdG9yKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW5kZXggPSBnZXRJbnRlcmNlcHRvckluZGV4KHN1YnNlcXVlbnRJbnRlcmNlcHRvck5hbWUpOworICAgICAgICAgICAgaWYgKElOVEVSQ0VQVE9SX05PVF9GT1VORCA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oc3Vic2VxdWVudEludGVyY2VwdG9yTmFtZSArICIgaW50ZXJjZXB0b3Igbm90IGZvdW5kIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdldEludGVyY2VwdG9ySW5kZXgobmFtZU9mSW50ZXJjZXB0b3IpICE9IElOVEVSQ0VQVE9SX05PVF9GT1VORCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24obmFtZU9mSW50ZXJjZXB0b3IgKyAiIGludGVyY2VwdG9yIGFscmVhZHkgZXhpc3RzIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDApIHsKKyAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnMuYWRkRmlyc3QoUGFpci5vZihuYW1lT2ZJbnRlcmNlcHRvciwgaW50ZXJjZXB0b3IpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzLmFkZChpbmRleCAtIDEsIFBhaXIub2YobmFtZU9mSW50ZXJjZXB0b3IsIGludGVyY2VwdG9yKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFNwZWNpZmllcyBwYXJhbWV0ZXJzIGZvciBhdXRoZW50aWNhdGlvbiB0byBHcmVtbGluIFNlcnZlci4KKyAgICAgICAgICogQWRkcyBhIHtAbGluayBSZXF1ZXN0SW50ZXJjZXB0b3J9IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgdGhhdCB3aWxsIGFsbG93IG1hbmlwdWxhdGlvbiBvZiB0aGUKKyAgICAgICAgICoge0Bjb2RlIEh0dHBSZXF1ZXN0fSBwcmlvciB0byBpdHMgYmVpbmcgc2VudCB0byB0aGUgc2VydmVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYXV0aFByb3BlcnRpZXMoZmluYWwgQXV0aFByb3BlcnRpZXMgYXV0aFByb3BzKSB7Ci0gICAgICAgICAgICB0aGlzLmF1dGhQcm9wcyA9IGF1dGhQcm9wczsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkSW50ZXJjZXB0b3IoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFJlcXVlc3RJbnRlcmNlcHRvciBpbnRlcmNlcHRvcikgeworICAgICAgICAgICAgaWYgKGdldEludGVyY2VwdG9ySW5kZXgobmFtZSkgIT0gSU5URVJDRVBUT1JfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihuYW1lICsgIiBpbnRlcmNlcHRvciBhbHJlYWR5IGV4aXN0cyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50ZXJjZXB0b3JzLmFkZChQYWlyLm9mKG5hbWUsIGludGVyY2VwdG9yKSk7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB7QGxpbmsgQXV0aFByb3BlcnRpZXMuUHJvcGVydHkjVVNFUk5BTUV9IGFuZCB7QGxpbmsgQXV0aFByb3BlcnRpZXMuUHJvcGVydHkjUEFTU1dPUkR9IHByb3BlcnRpZXMKLSAgICAgICAgICogZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdyZW1saW4gU2VydmVyLgorICAgICAgICAgKiBSZW1vdmVzIGEge0BsaW5rIFJlcXVlc3RJbnRlcmNlcHRvcn0gZnJvbSB0aGUgbGlzdC4gVGhpcyBjYW4gYmUgdXNlZCB0byByZW1vdmUgdGhlIGRlZmF1bHQgaW50ZXJjZXB0b3JzIHRoYXQKKyAgICAgICAgICogYXJlbid0IG5lZWRlZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGNyZWRlbnRpYWxzKGZpbmFsIFN0cmluZyB1c2VybmFtZSwgZmluYWwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgICAgICBhdXRoUHJvcHMgPSBhdXRoUHJvcHMud2l0aChBdXRoUHJvcGVydGllcy5Qcm9wZXJ0eS5VU0VSTkFNRSwgdXNlcm5hbWUpLndpdGgoQXV0aFByb3BlcnRpZXMuUHJvcGVydHkuUEFTU1dPUkQsIHBhc3N3b3JkKTsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgcmVtb3ZlSW50ZXJjZXB0b3IoZmluYWwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IGdldEludGVyY2VwdG9ySW5kZXgobmFtZSk7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gSU5URVJDRVBUT1JfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihuYW1lICsgIiBpbnRlcmNlcHRvciBub3QgZm91bmQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludGVyY2VwdG9ycy5yZW1vdmUoaW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUge0BsaW5rIEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5I1BST1RPQ09MfSBwcm9wZXJ0aWVzIGZvciBhdXRoZW50aWNhdGlvbiB0byBHcmVtbGluIFNlcnZlci4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHByb3RvY29sKGZpbmFsIFN0cmluZyBwcm90b2NvbCkgewotICAgICAgICAgICAgdGhpcy5hdXRoUHJvcHMgPSBhdXRoUHJvcHMud2l0aChBdXRoUHJvcGVydGllcy5Qcm9wZXJ0eS5QUk9UT0NPTCwgcHJvdG9jb2wpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIHByaXZhdGUgaW50IGdldEludGVyY2VwdG9ySW5kZXgoZmluYWwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJjZXB0b3JzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGludGVyY2VwdG9ycy5nZXQoaSkuZ2V0TGVmdCgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBJTlRFUkNFUFRPUl9OT1RfRk9VTkQ7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogU2V0cyB0aGUge0BsaW5rIEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5I0pBQVNfRU5UUll9IHByb3BlcnRpZXMgZm9yIGF1dGhlbnRpY2F0aW9uIHRvIEdyZW1saW4gU2VydmVyLgorICAgICAgICAgKiBBZGRzIGFuIEF1dGgge0BsaW5rIFJlcXVlc3RJbnRlcmNlcHRvcn0gdG8gdGhlIGVuZCBvZiBsaXN0IG9mIGludGVyY2VwdG9ycy4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGphYXNFbnRyeShmaW5hbCBTdHJpbmcgamFhc0VudHJ5KSB7Ci0gICAgICAgICAgICB0aGlzLmF1dGhQcm9wcyA9IGF1dGhQcm9wcy53aXRoKEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LkpBQVNfRU5UUlksIGphYXNFbnRyeSk7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGF1dGgoZmluYWwgQXV0aCBhdXRoKSB7CisgICAgICAgICAgICBhZGRJbnRlcmNlcHRvcihhdXRoLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLnRvTG93ZXJDYXNlKCkgKyAiLWF1dGgiLCBhdXRoKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKQEAgLTEwNDcsNiArODY2LDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyB0aGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgZHJpdmVyIHdpbGwgYWxsb3cgYSBjaGFubmVsIHRvIG5vdCByZWNlaXZlIHJlYWQgb3Igd3JpdGVzIGJlZm9yZSBpdCBhdXRvbWF0aWNhbGx5IGNsb3Nlcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpcyhmaW5hbCBsb25nIGlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpcykgeworICAgICAgICAgICAgdGhpcy5pZGxlQ29ubmVjdGlvblRpbWVvdXRNaWxsaXMgPSBpZGxlQ29ubmVjdGlvblRpbWVvdXRNaWxsaXM7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgogICAgICAgICAgKiBDb25maWd1cmVzIHdoZXRoZXIgY2x1c3RlciB3aWxsIHNlbmQgYSB1c2VyIGFnZW50IGR1cmluZwogICAgICAgICAgKiB3ZWIgc29ja2V0IGhhbmRzaGFrZXMKICAgICAgICAgICogQHBhcmFtIGVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCB0cnVlIGVuYWJsZXMgdGhlIHVzZXJhZ2VudC4gZmFsc2UgZGlzYWJsZXMgdGhlIHVzZXJhZ2VudC4KQEAgLTEwNTcsMTAgKzg4NCwxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIENvbmZpZ3VyZXMgdXNlIG9mIHBlci1tZXNzYWdlIGRlZmxhdGUgY29tcHJlc3Npb24uIERlZmF1bHRzIHRvIHRydWUuCisgICAgICAgICAqIENvbmZpZ3VyZXMgd2hldGhlciBjbHVzdGVyIHdpbGwgZW5hYmxlIHJlc3VsdCBidWxraW5nIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlLgorICAgICAgICAgKiBAcGFyYW0gYnVsa1Jlc3VsdHMgdHJ1ZSBlbmFibGVzIGJ1bGtpbmcuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBlbmFibGVDb21wcmVzc2lvbihmaW5hbCBib29sZWFuIGVuYWJsZUNvbXByZXNzaW9uKSB7Ci0gICAgICAgICAgICB0aGlzLmVuYWJsZUNvbXByZXNzaW9uID0gZW5hYmxlQ29tcHJlc3Npb247CisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGJ1bGtSZXN1bHRzKGZpbmFsIGJvb2xlYW4gYnVsa1Jlc3VsdHMpIHsKKyAgICAgICAgICAgIHRoaXMuYnVsa1Jlc3VsdHMgPSBidWxrUmVzdWx0czsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKQEAgLTEwNjksOCArODk3LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBDbHVzdGVyIGNyZWF0ZSgpIHsKLSAgICAgICAgICAgIGlmIChhZGRyZXNzZXMuc2l6ZSgpID09IDApIGFkZENvbnRhY3RQb2ludCgibG9jYWxob3N0Iik7Ci0gICAgICAgICAgICBpZiAobnVsbCA9PSBzZXJpYWxpemVyKSBzZXJpYWxpemVyID0gU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEuc2ltcGxlSW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGlmIChhZGRyZXNzZXMuaXNFbXB0eSgpKSBhZGRDb250YWN0UG9pbnQoImxvY2FsaG9zdCIpOworICAgICAgICAgICAgaWYgKG51bGwgPT0gc2VyaWFsaXplcikgc2VyaWFsaXplciA9IFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LnNpbXBsZUluc3RhbmNlKCk7CiAgICAgICAgICAgICByZXR1cm4gbmV3IENsdXN0ZXIodGhpcyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTAyLDE2ICs5MzAsMTYgQEAKIAogICAgIGNsYXNzIE1hbmFnZXIgewogICAgICAgICBwcml2YXRlIGZpbmFsIENvbmN1cnJlbnRNYXA8SW5ldFNvY2tldEFkZHJlc3MsIEhvc3Q+IGhvc3RzID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8SHR0cFJlbW90ZVRyYW5zYWN0aW9uPiBvcGVuVHJhbnNhY3Rpb25zID0gQ29uY3VycmVudEhhc2hNYXAubmV3S2V5U2V0KCk7CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZDsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEluZXRTb2NrZXRBZGRyZXNzPiBjb250YWN0UG9pbnRzOwogICAgICAgICBwcml2YXRlIGZpbmFsIEZhY3RvcnkgZmFjdG9yeTsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZXJpYWxpemVyOwogICAgICAgICBwcml2YXRlIGZpbmFsIFNldHRpbmdzLkNvbm5lY3Rpb25Qb29sU2V0dGluZ3MgY29ubmVjdGlvblBvb2xTZXR0aW5nczsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBMb2FkQmFsYW5jaW5nU3RyYXRlZ3kgbG9hZEJhbGFuY2luZ1N0cmF0ZWd5OwotICAgICAgICBwcml2YXRlIGZpbmFsIEF1dGhQcm9wZXJ0aWVzIGF1dGhQcm9wczsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBPcHRpb25hbDxTc2xDb250ZXh0PiBzc2xDb250ZXh0T3B0aW9uYWw7CiAgICAgICAgIHByaXZhdGUgZmluYWwgU3VwcGxpZXI8UmVxdWVzdE1lc3NhZ2UuQnVpbGRlcj4gdmFsaWRhdGlvblJlcXVlc3Q7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgVW5hcnlPcGVyYXRvcjxGdWxsSHR0cFJlcXVlc3Q+IGludGVyY2VwdG9yOworICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8UGFpcjxTdHJpbmcsID8gZXh0ZW5kcyBSZXF1ZXN0SW50ZXJjZXB0b3I+PiBpbnRlcmNlcHRvcnM7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRocmVhZCBwb29sIGZvciByZXF1ZXN0cy4KQEAgLTExMzMsOCArOTYxLDcgQEAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgcG9ydDsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGF0aDsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGVuYWJsZUNvbXByZXNzaW9uOwotICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zOworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYnVsa1Jlc3VsdHM7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNSZWZlcmVuY2U8Q29tcGxldGFibGVGdXR1cmU8Vm9pZD4+IGNsb3NlRnV0dXJlID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KCk7CiAKQEAgLTExNDQsMjMgKzk3MSwxNiBAQAogICAgICAgICAgICAgdmFsaWRhdGVCdWlsZGVyKGJ1aWxkZXIpOwogCiAgICAgICAgICAgICB0aGlzLmxvYWRCYWxhbmNpbmdTdHJhdGVneSA9IGJ1aWxkZXIubG9hZEJhbGFuY2luZ1N0cmF0ZWd5OwotICAgICAgICAgICAgdGhpcy5hdXRoUHJvcHMgPSBidWlsZGVyLmF1dGhQcm9wczsKICAgICAgICAgICAgIHRoaXMuY29udGFjdFBvaW50cyA9IGJ1aWxkZXIuZ2V0Q29udGFjdFBvaW50cygpOwotICAgICAgICAgICAgdGhpcy5pbnRlcmNlcHRvciA9IGJ1aWxkZXIuaW50ZXJjZXB0b3I7CisgICAgICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IGJ1aWxkZXIuaW50ZXJjZXB0b3JzOwogICAgICAgICAgICAgdGhpcy5lbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgPSBidWlsZGVyLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDsKLSAgICAgICAgICAgIHRoaXMuZW5hYmxlQ29tcHJlc3Npb24gPSBidWlsZGVyLmVuYWJsZUNvbXByZXNzaW9uOwotICAgICAgICAgICAgdGhpcy5yZXVzZUNvbm5lY3Rpb25zRm9yU2Vzc2lvbnMgPSBidWlsZGVyLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9uczsKKyAgICAgICAgICAgIHRoaXMuYnVsa1Jlc3VsdHMgPSBidWlsZGVyLmJ1bGtSZXN1bHRzOwogCiAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzID0gbmV3IFNldHRpbmdzLkNvbm5lY3Rpb25Qb29sU2V0dGluZ3MoKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiA9IGJ1aWxkZXIubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiA9IGJ1aWxkZXIubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uID0gYnVpbGRlci5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb247Ci0gICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiA9IGJ1aWxkZXIubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uOwogICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncy5tYXhTaXplID0gYnVpbGRlci5tYXhDb25uZWN0aW9uUG9vbFNpemU7Ci0gICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLm1pblNpemUgPSBidWlsZGVyLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZTsKICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWF4V2FpdEZvckNvbm5lY3Rpb24gPSBidWlsZGVyLm1heFdhaXRGb3JDb25uZWN0aW9uOwogICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncy5tYXhXYWl0Rm9yQ2xvc2UgPSBidWlsZGVyLm1heFdhaXRGb3JDbG9zZTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWF4Q29udGVudExlbmd0aCA9IGJ1aWxkZXIubWF4Q29udGVudExlbmd0aDsKKyAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoID0gYnVpbGRlci5tYXhSZXNwb25zZUNvbnRlbnRMZW5ndGg7CiAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLnJlY29ubmVjdEludGVydmFsID0gYnVpbGRlci5yZWNvbm5lY3RJbnRlcnZhbDsKICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MucmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplID0gYnVpbGRlci5yZXN1bHRJdGVyYXRpb25CYXRjaFNpemU7CiAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLmVuYWJsZVNzbCA9IGJ1aWxkZXIuZW5hYmxlU3NsOwpAQCAtMTE3MywxMCArOTkzLDkgQEAKICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3Muc3NsQ2lwaGVyU3VpdGVzID0gYnVpbGRlci5zc2xDaXBoZXJTdWl0ZXM7CiAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLnNzbEVuYWJsZWRQcm90b2NvbHMgPSBidWlsZGVyLnNzbEVuYWJsZWRQcm90b2NvbHM7CiAgICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLnNzbFNraXBDZXJ0VmFsaWRhdGlvbiA9IGJ1aWxkZXIuc3NsU2tpcENlcnRWYWxpZGF0aW9uOwotICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncy5rZWVwQWxpdmVJbnRlcnZhbCA9IGJ1aWxkZXIua2VlcEFsaXZlSW50ZXJ2YWw7Ci0gICAgICAgICAgICBjb25uZWN0aW9uUG9vbFNldHRpbmdzLmNoYW5uZWxpemVyID0gYnVpbGRlci5jaGFubmVsaXplcjsKICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb29sU2V0dGluZ3MudmFsaWRhdGlvblJlcXVlc3QgPSBidWlsZGVyLnZhbGlkYXRpb25SZXF1ZXN0OwogICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncy5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzID0gYnVpbGRlci5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzOworICAgICAgICAgICAgY29ubmVjdGlvblBvb2xTZXR0aW5ncy5pZGxlQ29ubmVjdGlvblRpbWVvdXQgPSBidWlsZGVyLmlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpczsKIAogICAgICAgICAgICAgc3NsQ29udGV4dE9wdGlvbmFsID0gT3B0aW9uYWwub2ZOdWxsYWJsZShidWlsZGVyLnNzbENvbnRleHQpOwogCkBAIC0xMjAxLDQ4ICsxMDIwLDI0IEBACiAKICAgICAgICAgICAgIC8vIHdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGhvc3RTY2hlZHVsZXIgYW5kIHRoZSBjb25uZWN0aW9uU2NoZWR1bGVyIGJlY2F1c2UgeW91IGNhbiBlbmQgaW4gZGVhZGxvY2sKICAgICAgICAgICAgIC8vIGlmIGFsbCB0aGUgcG9zc2libGUgam9icyB0aGUgZHJpdmVyIGFsbG93cyBmb3IgZ28gdG8gYSBzaW5nbGUgdGhyZWFkIHBvb2wuCi0gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TY2hlZHVsZXIgPSBuZXcgU2NoZWR1bGVkVGhyZWFkUG9vbEV4ZWN1dG9yKGNvbnRhY3RQb2ludHMuc2l6ZSgpICsgMSwKKyAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvblNjaGVkdWxlciA9IG5ldyBTY2hlZHVsZWRUaHJlYWRQb29sRXhlY3V0b3IoUnVudGltZS5nZXRSdW50aW1lKCkuYXZhaWxhYmxlUHJvY2Vzc29ycygpLAogICAgICAgICAgICAgICAgICAgICBuZXcgQmFzaWNUaHJlYWRGYWN0b3J5LkJ1aWxkZXIoKS5uYW1pbmdQYXR0ZXJuKCJncmVtbGluLWRyaXZlci1jb25uLXNjaGVkdWxlci0lZCIpLmJ1aWxkKCkpOwogCi0gICAgICAgICAgICB2YWxpZGF0aW9uUmVxdWVzdCA9ICgpIC0+IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkuYWRkKFRva2Vucy5BUkdTX0dSRU1MSU4sIGJ1aWxkZXIudmFsaWRhdGlvblJlcXVlc3QpOworICAgICAgICAgICAgdmFsaWRhdGlvblJlcXVlc3QgPSAoKSAtPiBSZXF1ZXN0TWVzc2FnZS5idWlsZChidWlsZGVyLnZhbGlkYXRpb25SZXF1ZXN0KTsKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUJ1aWxkZXIoZmluYWwgQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgICAgICBpZiAoYnVpbGRlci5taW5JblByb2Nlc3NQZXJDb25uZWN0aW9uIDwgMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8iKTsKLQotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiA8IDEpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0KLSAgICAgICAgICAgIGlmIChidWlsZGVyLm1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPiBidWlsZGVyLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24iKTsKLQotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uIDwgMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyIpOwotCi0gICAgICAgICAgICBpZiAoYnVpbGRlci5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPCAxKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0KLSAgICAgICAgICAgIGlmIChidWlsZGVyLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiA+IGJ1aWxkZXIubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIpOwotCi0gICAgICAgICAgICBpZiAoYnVpbGRlci5taW5Db25uZWN0aW9uUG9vbFNpemUgPCAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIik7Ci0KICAgICAgICAgICAgIGlmIChidWlsZGVyLm1heENvbm5lY3Rpb25Qb29sU2l6ZSA8IDEpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4Q29ubmVjdGlvblBvb2xTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKIAotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubWluQ29ubmVjdGlvblBvb2xTaXplID4gYnVpbGRlci5tYXhDb25uZWN0aW9uUG9vbFNpemUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4Q29ubmVjdGlvblBvb2xTaXplIGNhbm5vdCBiZSBsZXNzIHRoYW4gbWluQ29ubmVjdGlvblBvb2xTaXplIik7Ci0KICAgICAgICAgICAgIGlmIChidWlsZGVyLm1heFdhaXRGb3JDb25uZWN0aW9uIDwgMSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtYXhXYWl0Rm9yQ29ubmVjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7CiAKICAgICAgICAgICAgIGlmIChidWlsZGVyLm1heFdhaXRGb3JDbG9zZSA8IDEpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4V2FpdEZvckNsb3NlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKIAotICAgICAgICAgICAgaWYgKGJ1aWxkZXIubWF4Q29udGVudExlbmd0aCA8IDEpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWF4Q29udGVudExlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7CisgICAgICAgICAgICBpZiAoYnVpbGRlci5tYXhSZXNwb25zZUNvbnRlbnRMZW5ndGggPCAwKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1heFJlc3BvbnNlQ29udGVudExlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIik7CiAKICAgICAgICAgICAgIGlmIChidWlsZGVyLnJlY29ubmVjdEludGVydmFsIDwgMSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyZWNvbm5lY3RJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7CkBAIC0xMjU5LDEyICsxMDU0LDExIEBACiAgICAgICAgICAgICBpZiAoYnVpbGRlci5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzIDwgMSkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKIAotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKGJ1aWxkZXIuY2hhbm5lbGl6ZXIpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIGNoYW5uZWxpemVyIHNwZWNpZmllZCBbIiArIGJ1aWxkZXIuY2hhbm5lbGl6ZXIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIl0gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCAtIGl0IHNob3VsZCBiZSB0aGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzbmFtZSBvZiBhIENoYW5uZWxpemVyIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBvbiB0aGUgY2xhc3NwYXRoIiwgZXgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gemVybyB2YWx1ZSB3aWxsIGRpc2FibGUgaWRsZSBjb25uZWN0aW9uIGRldGVjdGlvbgorICAgICAgICAgICAgLy8gbm9uLXplcm8gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2Vjb25kcyBzbyBhbnkgdmFsdWUgYmV0d2VlbiAxIGFuZCA5OTkgaXMgaW52YWxpZCBhcyBpdCB3aWxsIGJlIGxlc3MgdGhhbiAxIHNlY29uZAorICAgICAgICAgICAgaWYgKGJ1aWxkZXIuaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzICE9IDAgJiYgYnVpbGRlci5pZGxlQ29ubmVjdGlvblRpbWVvdXRNaWxsaXMgPCAxMDAwKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpcyBtdXN0IGJlIHplcm8gb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEwMDAiKTsKKwogICAgICAgICB9CiAKICAgICAgICAgc3luY2hyb25pemVkIHZvaWQgaW5pdCgpIHsKQEAgLTEyODIsNiArMTA3NiwxNCBAQAogICAgICAgICAgICAgb3BlbmVkQ2xpZW50cy5hZGQobmV3IFdlYWtSZWZlcmVuY2U8PihjbGllbnQpKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdHJhY2tUcmFuc2FjdGlvbihmaW5hbCBIdHRwUmVtb3RlVHJhbnNhY3Rpb24gdHgpIHsKKyAgICAgICAgICAgIG9wZW5UcmFuc2FjdGlvbnMuYWRkKHR4KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdW50cmFja1RyYW5zYWN0aW9uKGZpbmFsIEh0dHBSZW1vdGVUcmFuc2FjdGlvbiB0eCkgeworICAgICAgICAgICAgb3BlblRyYW5zYWN0aW9ucy5yZW1vdmUodHgpOworICAgICAgICB9CisKICAgICAgICAgcHVibGljIEhvc3QgYWRkKGZpbmFsIEluZXRTb2NrZXRBZGRyZXNzIGFkZHJlc3MpIHsKICAgICAgICAgICAgIGZpbmFsIEhvc3QgbmV3SG9zdCA9IG5ldyBIb3N0KGFkZHJlc3MsIENsdXN0ZXIudGhpcyk7CiAgICAgICAgICAgICBmaW5hbCBIb3N0IHByZXZpb3VzID0gaG9zdHMucHV0SWZBYnNlbnQoYWRkcmVzcywgbmV3SG9zdCk7CkBAIC0xMjk3LDYgKzEwOTksMTcgQEAKICAgICAgICAgICAgIGlmIChjbG9zZUZ1dHVyZS5nZXQoKSAhPSBudWxsKQogICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZUZ1dHVyZS5nZXQoKTsKIAorICAgICAgICAgICAgLy8gYmVzdC1lZmZvcnQgcm9sbGJhY2sgb2YgYW55IG9wZW4gdHJhbnNhY3Rpb25zIGJlZm9yZSBjbG9zaW5nCisgICAgICAgICAgICAvLyBzbmFwc2hvdCB0byBhdm9pZCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBzaW5jZSByb2xsYmFjaygpIGNhbGxzIHVudHJhY2tUcmFuc2FjdGlvbigpCisgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PD4ob3BlblRyYW5zYWN0aW9ucykuZm9yRWFjaCh0eCAtPiB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdHgucm9sbGJhY2soKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiRmFpbGVkIHRvIHJvbGxiYWNrIHRyYW5zYWN0aW9uIG9uIGNsdXN0ZXIgY2xvc2UiLCBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG9wZW5UcmFuc2FjdGlvbnMuY2xlYXIoKTsKKwogICAgICAgICAgICAgZmluYWwgTGlzdDxDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPj4gY2xpZW50Q2xvc2VGdXR1cmVzID0gbmV3IEFycmF5TGlzdDw+KG9wZW5lZENsaWVudHMuc2l6ZSgpKTsKICAgICAgICAgICAgIGZvciAoV2Vha1JlZmVyZW5jZTxDbGllbnQ+IG9wZW5lZENsaWVudCA6IG9wZW5lZENsaWVudHMpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gb3BlbmVkQ2xpZW50LmdldCgpOwpAQCAtMTM0NiwxMCArMTE1OSwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIENoZWNrcyBpZiBjbHVzdGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHBlci1tZXNzYWdlIGRlZmxhdGUgY29tcHJlc3Npb24KKyAgICAgICAgICogQ2hlY2tzIGlmIGNsdXN0ZXIgaXMgY29uZmlndXJlZCB0byBzZW5kIGJ1bGtlZCByZXN1bHRzCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVDb21wcmVzc2lvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBlbmFibGVDb21wcmVzc2lvbjsKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNCdWxrUmVzdWx0c0VuYWJsZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gYnVsa1Jlc3VsdHM7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0Nvbm5lY3Rpb24uamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ29ubmVjdGlvbi5qYXZhCmluZGV4IDQzY2JjMWYuLmNiOTRiMzkgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ29ubmVjdGlvbi5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ29ubmVjdGlvbi5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuSWRsZUNvbm5lY3Rpb25IYW5kbGVyOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLkNvbm5lY3Rpb25FeGNlcHRpb247CkBAIC0zMSwxNyArMzEsMTEgQEAKIAogaW1wb3J0IGphdmEubmV0LlVSSTsKIGltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0YWJsZUZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50TWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWU7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNSZWZlcmVuY2U7CiAKIC8qKgpAQCAtNTAsNDEgKzQ0LDMyIEBACiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCiAgKi8KIGZpbmFsIGNsYXNzIENvbm5lY3Rpb24geworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9XQUlUX0ZPUl9DT05ORUNUSU9OID0gMTYwMDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1dBSVRfRk9SX0NMT1NFID0gMzAwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDT05ORUNUX0lOVEVSVkFMID0gMTAwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfSVRFUkFUSU9OX0JBVENIX1NJWkUgPSA2NDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgQ09OTkVDVElPTl9TRVRVUF9USU1FT1VUX01JTExJUyA9IDE1MDAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBDT05ORUNUSU9OX0lETEVfVElNRU9VVF9NSUxMSVMgPSAxODAwMDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKENvbm5lY3Rpb24uY2xhc3MpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBDaGFubmVsIGNoYW5uZWw7CiAgICAgcHJpdmF0ZSBmaW5hbCBVUkkgdXJpOwotICAgIHByaXZhdGUgZmluYWwgQ29uY3VycmVudE1hcDxVVUlELCBSZXN1bHRRdWV1ZT4gcGVuZGluZyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNSZWZlcmVuY2U8UmVzdWx0U2V0PiBwZW5kaW5nID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBDbHVzdGVyIGNsdXN0ZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBDbGllbnQgY2xpZW50OwogICAgIHByaXZhdGUgZmluYWwgQ29ubmVjdGlvblBvb2wgcG9vbDsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGluZ1RocmVhZDsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBjcmVhdGVkVGltZXN0YW1wOwogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0lOX1BST0NFU1MgPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTl9JTl9QUk9DRVNTID0gMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfV0FJVF9GT1JfQ09OTkVDVElPTiA9IDE2MDAwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9XQUlUX0ZPUl9DTE9TRSA9IDMwMDA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NPTlRFTlRfTEVOR1RIID0gMTAgKiAxMDI0ICogMTAyNDsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQ09OTkVDVF9JTlRFUlZBTCA9IDEwMDA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVTVUxUX0lURVJBVElPTl9CQVRDSF9TSVpFID0gNjQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIEtFRVBfQUxJVkVfSU5URVJWQUwgPSAxODAwMDA7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBsb25nIENPTk5FQ1RJT05fU0VUVVBfVElNRU9VVF9NSUxMSVMgPSAxNTAwMDsKLQogICAgIC8qKgotICAgICAqIFdoZW4gYSB7QGNvZGUgQ29ubmVjdGlvbn0gaXMgYm9ycm93ZWQgZnJvbSB0aGUgcG9vbCwgdGhpcyBudW1iZXIgaXMgaW5jcmVtZW50ZWQgdG8gaW5kaWNhdGUgdGhlIG51bWJlciBvZgotICAgICAqIHRpbWVzIGl0IGhhcyBiZWVuIHRha2VuIGFuZCBpcyBkZWNyZW1lbnRlZCB3aGVuIGl0IGlzIHJldHVybmVkLiAgVGhpcyBudW1iZXIgaXMgb25lIGluZGljYXRpb24gYXMgdG8gaG93Ci0gICAgICogYnVzeSBhIHBhcnRpY3VsYXIge0Bjb2RlIENvbm5lY3Rpb259IGlzLgorICAgICAqIElzIGEge0Bjb2RlIENvbm5lY3Rpb259IGJvcnJvd2VkIGZyb20gdGhlIHBvb2wuCiAgICAgICovCi0gICAgcHVibGljIGZpbmFsIEF0b21pY0ludGVnZXIgYm9ycm93ZWQgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gaXNCb3Jyb3dlZCA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKICAgICAvKioKICAgICAgKiBUaGlzIGJvb2xlYW4gZ3VhcmRzIHRoZSByZXBsYWNlIG9mIHRoZSBjb25uZWN0aW9uIGFuZCBlbnN1cmVzIHRoYXQgaXQgb25seSBvY2N1cnMgb25jZS4KICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgQXRvbWljQm9vbGVhbiBpc0JlaW5nUmVwbGFjZWQgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNSZWZlcmVuY2U8Q2xhc3M8Q2hhbm5lbGl6ZXI+PiBjaGFubmVsaXplckNsYXNzID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KG51bGwpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbWF4SW5Qcm9jZXNzOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY29ubmVjdGlvbkxhYmVsOwogCkBAIC05MywxMiArNzgsMTEgQEAKICAgICBwcml2YXRlIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPj4gY2xvc2VGdXR1cmUgPSBuZXcgQXRvbWljUmVmZXJlbmNlPD4oKTsKICAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gc2h1dGRvd25Jbml0aWF0ZWQgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7CiAKLSAgICBwdWJsaWMgQ29ubmVjdGlvbihmaW5hbCBVUkkgdXJpLCBmaW5hbCBDb25uZWN0aW9uUG9vbCBwb29sLCBmaW5hbCBpbnQgbWF4SW5Qcm9jZXNzKSB0aHJvd3MgQ29ubmVjdGlvbkV4Y2VwdGlvbiB7CisgICAgcHVibGljIENvbm5lY3Rpb24oZmluYWwgVVJJIHVyaSwgZmluYWwgQ29ubmVjdGlvblBvb2wgcG9vbCkgdGhyb3dzIENvbm5lY3Rpb25FeGNlcHRpb24gewogICAgICAgICB0aGlzLnVyaSA9IHVyaTsKICAgICAgICAgdGhpcy5jbHVzdGVyID0gcG9vbC5nZXRDbHVzdGVyKCk7CiAgICAgICAgIHRoaXMuY2xpZW50ID0gcG9vbC5nZXRDbGllbnQoKTsKICAgICAgICAgdGhpcy5wb29sID0gcG9vbDsKLSAgICAgICAgdGhpcy5tYXhJblByb2Nlc3MgPSBtYXhJblByb2Nlc3M7CiAgICAgICAgIHRoaXMuY3JlYXRpbmdUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKTsKICAgICAgICAgdGhpcy5jcmVhdGVkVGltZXN0YW1wID0gSW5zdGFudC5ub3coKS50b1N0cmluZygpOwogICAgICAgICBjb25uZWN0aW9uTGFiZWwgPSAiQ29ubmVjdGlvbntob3N0PSIgKyBwb29sLmhvc3QgKyAifSI7CkBAIC0xMDYsMTMgKzkwLDEyIEBACiAgICAgICAgIGlmIChjbHVzdGVyLmlzQ2xvc2luZygpKQogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IG9wZW4gYSBjb25uZWN0aW9uIHdpdGggdGhlIGNsdXN0ZXIgYWZ0ZXIgY2xvc2UoKSBpcyBjYWxsZWQiKTsKIAorICAgICAgICBpZiAoY2xpZW50LmlzQ2xvc2luZygpKQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IG9wZW4gYSBjb25uZWN0aW9uIHdpdGggdGhlIGNsaWVudCBhZnRlciBjbG9zZSgpIGlzIGNhbGxlZCIpOworCiAgICAgICAgIGZpbmFsIEJvb3RzdHJhcCBiID0gdGhpcy5jbHVzdGVyLmdldEZhY3RvcnkoKS5jcmVhdGVCb290c3RyYXAoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChjaGFubmVsaXplckNsYXNzLmdldCgpID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjaGFubmVsaXplckNsYXNzLmNvbXBhcmVBbmRTZXQobnVsbCwgKENsYXNzPENoYW5uZWxpemVyPikgQ2xhc3MuZm9yTmFtZShjbHVzdGVyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MoKS5jaGFubmVsaXplcikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjaGFubmVsaXplciA9IGNoYW5uZWxpemVyQ2xhc3MuZ2V0KCkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIGNoYW5uZWxpemVyID0gbmV3IENoYW5uZWxpemVyLkh0dHBDaGFubmVsaXplcigpOwogICAgICAgICAgICAgY2hhbm5lbGl6ZXIuaW5pdCh0aGlzKTsKICAgICAgICAgICAgIGIuY2hhbm5lbChOaW9Tb2NrZXRDaGFubmVsLmNsYXNzKS5oYW5kbGVyKGNoYW5uZWxpemVyKTsKIApAQCAtMTI1LDM2ICsxMDgsMjcgQEAKICAgICAgICAgICAgIGNoYW5uZWwuY2xvc2VGdXR1cmUoKS5hZGRMaXN0ZW5lcigoQ2hhbm5lbEZ1dHVyZUxpc3RlbmVyKSBmdXR1cmUgLT4gewogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiT25DaGFubmVsQ2xvc2UgY2FsbGJhY2sgY2FsbGVkIGZvciBjaGFubmVsIHt9IiwgY2hhbm5lbCk7CiAKLSAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2xvc2VGdXR1cmUgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdCBjbG9zZUFzeW5jKCkgd2Fzbid0IGNhbGxlZCB3aGljaCBtZWFucyB0aGF0IHRoZQotICAgICAgICAgICAgICAgIC8vIGNsb3NlIGRpZCBub3QgY29tZSBmcm9tIHRoZSBjbGllbnQgc2lkZS4gaXQgbWVhbnMgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNoYW5uZWwgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICAgICAgICAgIC8vIGl0J3MgaW1wb3J0YW50IHRvIGRpc3Rpbmd1aXNoIHRoYXQgZGlmZmVyZW5jZSBpbiBkZWJ1Z2dpbmcKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2xvc2VGdXR1cmUgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdCBjbG9zZUFzeW5jKCkgd2Fzbid0IGNhbGxlZAogICAgICAgICAgICAgICAgIGlmICh0aGlzQ29ubmVjdGlvbi5jbG9zZUZ1dHVyZS5nZXQoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2ZXIgY2xvc2VkIHRoZSBDb25uZWN0aW9uIG9uIGNoYW5uZWwgJXMgLSBzY2hlZHVsaW5nIHJlbW92YWwgZnJvbSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbC5pZCgpLmFzU2hvcnRUZXh0KCksIHRoaXNDb25uZWN0aW9uLnBvb2wuZ2V0UG9vbEluZm8odGhpc0Nvbm5lY3Rpb24pKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hhbm5lbC5oYXNBdHRyKElkbGVDb25uZWN0aW9uSGFuZGxlci5JRExFX1NUQVRFX0VWRU5UKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaWRsZSBzdGF0ZSBldmVudCBpcyBub3QgcHJlc2VudCwgaXQgbWVhbnMgdGhlIHNlcnZlciBjbG9zZWQgdGhlIGNoYW5uZWwgZm9yIHNvbWUgcmVhc29uLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBpbXBvcnRhbnQgdG8gZGlzdGluZ3Vpc2ggdGhhdCBkaWZmZXJlbmNlIGluIGRlYnVnZ2luZworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2ZXIgY2xvc2VkIHRoZSBDb25uZWN0aW9uIG9uIGNoYW5uZWwgJXMgLSBzY2hlZHVsaW5nIHJlbW92YWwgZnJvbSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWwuaWQoKS5hc1Nob3J0VGV4dCgpLCB0aGlzQ29ubmVjdGlvbi5wb29sLmdldFBvb2xJbmZvKHRoaXNDb25uZWN0aW9uKSkpOworICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgdGhlIHRhc2sgdG8gc2NoZWR1bGVyIHRocmVhZCBhbmQgZnJlZSB1cCB0aGUgZXZlbnQgbG9vcAotICAgICAgICAgICAgICAgICAgICB0aGlzQ29ubmVjdGlvbi5jbHVzdGVyLmNvbm5lY3Rpb25TY2hlZHVsZXIoKS5zdWJtaXQoKCkgLT4gdGhpc0Nvbm5lY3Rpb24ucG9vbC5kZWZpbml0ZWx5RGVzdHJveUNvbm5lY3Rpb24odGhpc0Nvbm5lY3Rpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpc0Nvbm5lY3Rpb24uY2x1c3Rlci5jb25uZWN0aW9uU2NoZWR1bGVyKCkuc3VibWl0KCgpIC0+IHRoaXNDb25uZWN0aW9uLnBvb2wuZGVzdHJveUNvbm5lY3Rpb24odGhpc0Nvbm5lY3Rpb24pKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNyZWF0ZWQgbmV3IGNvbm5lY3Rpb24gZm9yIHt9IiwgdXJpKTsKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ3JlYXRlZCBuZXcgY29ubmVjdGlvbiBmb3Ige30iLCB1cmkpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXhjZXB0aW9uKHVyaSwgIkNvdWxkIG5vdCBvcGVuICIgKyBnZXRDb25uZWN0aW9uSW5mbyh0cnVlKSwgZXgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQSBjb25uZWN0aW9uIGNhbiBvbmx5IGhhdmUgc28gbWFueSB0aGluZ3MgaW4gcHJvY2VzcyBoYXBwZW5pbmcgb24gaXQgYXQgb25jZSwgd2hlcmUgImluIHByb2Nlc3MiIHJlZmVycyB0bwotICAgICAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbi1wcm9jZXNzIHJlcXVlc3RzIGxlc3MgdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlc3BvbnNlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGF2YWlsYWJsZUluUHJvY2VzcygpIHsKLSAgICAgICAgLy8gbm8gbmVlZCBmb3IgYSBuZWdhdGl2ZSBhdmFpbGFibGUgYW1vdW50IC0gbm90IHN1cmUgdGhhdCB0aGUgcGVuZGluZyBzaXplIGNhbiBldmVyIGV4Y2VlZCBtYXhpbXVtLCBidXQKLSAgICAgICAgLy8gYmV0dGVyIHRvIGF2b2lkIHRoZSBuZWdhdGl2ZXMgdGhhdCB3b3VsZCBlbnN1ZSBpZiBpdCBkaWQKLSAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIG1heEluUHJvY2VzcyAtIHBlbmRpbmcuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBDb25zaWRlciBhIGNvbm5lY3Rpb24gYXMgZGVhZCBpZiB0aGUgdW5kZXJseWluZyBjaGFubmVsIGlzIG5vdCBjb25uZWN0ZWQuCiAgICAgICogPHA+CiAgICAgICogTm90ZTogQSBkZWFkIGNvbm5lY3Rpb24gZG9lcyBub3QgbmVjZXNzYXJpbHkgaW1wbHkgdGhhdCB0aGUgc2VydmVyIGlzIHVuYXZhaWxhYmxlLiBBZGRpdGlvbmFsIGNoZWNrcwpAQCAtMTY0LDYgKzEzOCwxMCBAQAogICAgICAgICByZXR1cm4gKGNoYW5uZWwgIT0gbnVsbCAmJiAhY2hhbm5lbC5pc0FjdGl2ZSgpKTsKICAgICB9CiAKKyAgICBwdWJsaWMgQXRvbWljQm9vbGVhbiBpc0JvcnJvd2VkKCkgeworICAgICAgICByZXR1cm4gaXNCb3Jyb3dlZDsKKyAgICB9CisKICAgICBib29sZWFuIGlzQ2xvc2luZygpIHsKICAgICAgICAgcmV0dXJuIGNsb3NlRnV0dXJlLmdldCgpICE9IG51bGw7CiAgICAgfQpAQCAtMTc2LDExICsxNTQsNyBAQAogICAgICAgICByZXR1cm4gY2x1c3RlcjsKICAgICB9CiAKLSAgICBDbGllbnQgZ2V0Q2xpZW50KCkgewotICAgICAgICByZXR1cm4gY2xpZW50OwotICAgIH0KLQotICAgIENvbmN1cnJlbnRNYXA8VVVJRCwgUmVzdWx0UXVldWU+IGdldFBlbmRpbmcoKSB7CisgICAgQXRvbWljUmVmZXJlbmNlPFJlc3VsdFNldD4gZ2V0UGVuZGluZygpIHsKICAgICAgICAgcmV0dXJuIHBlbmRpbmc7CiAgICAgfQogCkBAIC0yMDksMTIgKzE4Myw4IEBACiAgICAgICAgIHJldHVybiBmdXR1cmU7CiAgICAgfQogCi0gICAgcHVibGljIENoYW5uZWxQcm9taXNlIHdyaXRlKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHJlc3VsdFF1ZXVlU2V0dXApIHsKLSAgICAgICAgLy8gZG9udCBhbGxvdyB0aGUgc2FtZSByZXF1ZXN0IGlkIHRvIGJlIHVzZWQgYXMgb25lIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgcXVldWUKLSAgICAgICAgaWYgKHBlbmRpbmcuY29udGFpbnNLZXkocmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJUaGVyZSBpcyBhbHJlYWR5IGEgcmVxdWVzdCBwZW5kaW5nIHdpdGggYW4gaWQgb2Y6ICVzIiwgcmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkpKTsKLQotICAgICAgICAvLyBvbmNlIHRoZXJlIGlzIGEgY29tcGxldGVkIHdyaXRlLCB0aGVuIGNyZWF0ZSBhIHRyYXZlcnNlciBmb3IgdGhlIHJlc3VsdCBzZXQgYW5kIGNvbXBsZXRlCisgICAgcHVibGljIENoYW5uZWxQcm9taXNlIHdyaXRlKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHJlc3VsdFNldEZ1dHVyZSkgeworICAgICAgICAvLyBvbmNlIHRoZXJlIGlzIGEgY29tcGxldGVkIHdyaXRlLCB0aGVuIGNyZWF0ZSBhIFJlc3VsdFNldCBhbmQgY29tcGxldGUKICAgICAgICAgLy8gdGhlIHByb21pc2Ugc28gdGhhdCB0aGUgY2xpZW50IGtub3dzIHRoYXQgaXQgY2FuIHN0YXJ0IGNoZWNraW5nIGZvciByZXN1bHRzLgogICAgICAgICBmaW5hbCBDb25uZWN0aW9uIHRoaXNDb25uZWN0aW9uID0gdGhpczsKIApAQCAtMjI3LDEyICsxOTcsMTEgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29ubmVjdGlvbkNsZWFudXBPbkVycm9yKHRoaXNDb25uZWN0aW9uKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5leGVjdXRvcigpLnN1Ym1pdCgoKSAtPiByZXN1bHRRdWV1ZVNldHVwLmNvbXBsZXRlRXhjZXB0aW9uYWxseShmLmNhdXNlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXIuZXhlY3V0b3IoKS5zdWJtaXQoKCkgLT4gcmVzdWx0U2V0RnV0dXJlLmNvbXBsZXRlRXhjZXB0aW9uYWxseShmLmNhdXNlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpbmtlZEJsb2NraW5nUXVldWU8UmVzdWx0PiByZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlID0gbmV3IExpbmtlZEJsb2NraW5nUXVldWU8PigpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8Vm9pZD4gcmVhZENvbXBsZXRlZCA9IG5ldyBDb21wbGV0YWJsZUZ1dHVyZTw+KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0U2V0ID0gbmV3IFJlc3VsdFNldChjbHVzdGVyLmV4ZWN1dG9yKCksIHJlcXVlc3RNZXNzYWdlLCBwb29sLmhvc3QpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICByZWFkQ29tcGxldGVkLndoZW5Db21wbGV0ZUFzeW5jKCh2LCB0KSAtPiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXQuZ2V0UmVhZENvbXBsZXRlZCgpLndoZW5Db21wbGV0ZUFzeW5jKCh2LCB0KSAtPiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY2FsbGJhY2sgZm9yIHdoZW4gdGhlIHJlYWQgZmFpbGVkLiBhIGZhaWxlZCByZWFkIG1lYW5zIHRoZSByZXF1ZXN0IHdlbnQgdG8gdGhlIHNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgY2FtZSBiYWNrIHdpdGggYSBzZXJ2ZXItc2lkZSBlcnJvciBvZiBzb21lIHNvcnQuICBpdCBtZWFucyB0aGUgc2VydmVyIGlzIHJlc3BvbnNpdmUKQEAgLTI0MSw3ICsyMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkVycm9yIHdoaWxlIHByb2Nlc3NpbmcgcmVxdWVzdCBvbiB0aGUgc2VydmVyIHt9LiIsIHRoaXMsIHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVDb25uZWN0aW9uQ2xlYW51cE9uRXJyb3IodGhpc0Nvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsYmFjayBmb3Igd2hlbiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgbWVhbmluZyB0aGF0IFJlc3VsdFF1ZXVlLm1hcmtDb21wbGV0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjYWxsYmFjayBmb3Igd2hlbiB0aGUgcmVhZCB3YXMgc3VjY2Vzc2Z1bCwgbWVhbmluZyB0aGF0IFJlc3VsdFNldC5tYXJrQ29tcGxldGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3YXMgY2FsbGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNDb25uZWN0aW9uLnJldHVyblRvUG9vbCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI1MiwxNCArMjIxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5U2h1dGRvd24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNsdXN0ZXIuZXhlY3V0b3IoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3VsdFF1ZXVlIGhhbmRsZXIgPSBuZXcgUmVzdWx0UXVldWUocmVzdWx0TGlua2VkQmxvY2tpbmdRdWV1ZSwgcmVhZENvbXBsZXRlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLnB1dChyZXF1ZXN0TWVzc2FnZS5nZXRSZXF1ZXN0SWQoKSwgaGFuZGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLnNldChyZXN1bHRTZXQpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHRRdWV1ZVNldHVwIHNob3VsZCBvbmx5IGJlIGNvbXBsZXRlZCBieSBhIHdvcmtlciBzaW5jZSB0aGUgYXBwbGljYXRpb24gY29kZSBtaWdodCBoYXZlIHN5bmMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc3VsdFNldEZ1dHVyZSBzaG91bGQgb25seSBiZSBjb21wbGV0ZWQgYnkgYSB3b3JrZXIgc2luY2UgdGhlIGFwcGxpY2F0aW9uIGNvZGUgbWlnaHQgaGF2ZSBzeW5jCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV0aW9uIHN0YWdlcyBhdHRhY2hlZCB0byBpdCB3aGljaCBhbmQgd2UgZG8gbm90IHdhbnQgdGhlIGV2ZW50IGxvb3AgdGhyZWFkcyB0byBwcm9jZXNzIHRob3NlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFnZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyLmV4ZWN1dG9yKCkuc3VibWl0KCgpIC0+IHJlc3VsdFF1ZXVlU2V0dXAuY29tcGxldGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZXN1bHRTZXQoaGFuZGxlciwgY2x1c3Rlci5leGVjdXRvcigpLCByZWFkQ29tcGxldGVkLCByZXF1ZXN0TWVzc2FnZSwgcG9vbC5ob3N0KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rlci5leGVjdXRvcigpLnN1Ym1pdCgoKSAtPiByZXN1bHRTZXRGdXR1cmUuY29tcGxldGUocmVzdWx0U2V0KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgY2hhbm5lbC53cml0ZUFuZEZsdXNoKHJlcXVlc3RNZXNzYWdlLCByZXF1ZXN0UHJvbWlzZSk7CkBAIC0yNjcsNyArMjM0LDcgQEAKICAgICAgICAgcmV0dXJuIHJlcXVlc3RQcm9taXNlOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJldHVyblRvUG9vbCgpIHsKKyAgICBwcml2YXRlIHZvaWQgcmV0dXJuVG9Qb29sKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKHBvb2wgIT0gbnVsbCkgcG9vbC5yZXR1cm5Db25uZWN0aW9uKHRoaXMpOwogICAgICAgICB9IGNhdGNoIChDb25uZWN0aW9uRXhjZXB0aW9uIGNlKSB7CkBAIC0yODUsNyArMjUyLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNPa1RvQ2xvc2UoKSB7Ci0gICAgICAgIHJldHVybiBwZW5kaW5nLmlzRW1wdHkoKSB8fCAoY2hhbm5lbCAhPSBudWxsICYmICFjaGFubmVsLmlzT3BlbigpKSB8fCAhcG9vbC5ob3N0LmlzQXZhaWxhYmxlKCk7CisgICAgICAgIHJldHVybiBwZW5kaW5nLmdldCgpID09IG51bGwgfHwgKGNoYW5uZWwgIT0gbnVsbCAmJiAhY2hhbm5lbC5pc09wZW4oKSkgfHwgIXBvb2wuaG9zdC5pc0F2YWlsYWJsZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzA3LDM4ICsyNzQsNiBAQAogICAgICAgICAvLyBndWVzcykuIHRoYXQgc2VlbXMgdG8gcHV0IHRoZSBleGVjdXRvciB0aHJlYWQgaW4gYSBtb25pdG9yIHN0YXRlIHRoYXQgaXQgZG9lc24ndCByZWNvdmVyIGZyb20uIHNpbmNlIGFsbAogICAgICAgICAvLyB0aGUgY29kZSBpbiBoZXJlIGlzIGJlaGluZCBzaHV0ZG93bkluaXRpYXRlZCB0aGUgc3luY2hyb25pemVkIGRvZXNuJ3Qgc2VlbSBuZWNlc3NhcnkKICAgICAgICAgaWYgKHNodXRkb3duSW5pdGlhdGVkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7Ci0gICAgICAgICAgICAvLyB0aGUgc2Vzc2lvbiBjbG9zZSBtZXNzYWdlIHdhcyByZW1vdmVkIGluIDMuNS4wIGFmdGVyIGRlcHJlY2F0aW9uIGF0IDMuMy4xMS4gVGhhdCByZW1vdmFsIHdhcyBwZXJoYXBzCi0gICAgICAgICAgICAvLyBhIGJpdCBoYXN0eSBhcyBzZXNzaW9uIHNlbWFudGljcyBtYXkgc3RpbGwgcmVxdWlyZSB0aGlzIG1lc3NhZ2UgaW4gY2VydGFpbiBjYXNlcy4gVW50aWwgd2UgY2FuIGxvb2sKLSAgICAgICAgICAgIC8vIGF0IHRoaXMgaW4gbW9yZSBkZXRhaWwsIGl0IHNlZW1zIGJlc3QgdG8gYnJpbmcgYmFjayB0aGUgb2xkIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIGRyaXZlci4KLSAgICAgICAgICAgIGlmIChjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQuU2Vzc2lvbmVkQ2xpZW50KSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBmb3JjZUNsb3NlID0gY2xpZW50LmdldFNldHRpbmdzKCkuZ2V0U2Vzc2lvbigpLmdldCgpLmlzRm9yY2VDbG9zZWQoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBjbG9zZU1lc3NhZ2UgPSBjbGllbnQuYnVpbGRNZXNzYWdlKAotICAgICAgICAgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19DTE9TRSkuYWRkQXJnKFRva2Vucy5BUkdTX0ZPUkNFLCBmb3JjZUNsb3NlKSkuY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IGNsb3NlZCA9IG5ldyBDb21wbGV0YWJsZUZ1dHVyZTw+KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUSU5LRVJQT1AtMjgyMiBzaG91bGQgaW52ZXN0aWdhdGUgdGhpcyB3cml0ZSBtb3JlIGNhcmVmdWxseSB0byBjaGVjayBmb3Igc2Vuc2libGUgYmVoYXZpb3IKLSAgICAgICAgICAgICAgICAvLyBpbiB0aGUgZXZlbnQgdGhlIENoYW5uZWwgd2FzIG5vdCBjcmVhdGVkIGJ1dCB3ZSB0cnkgdG8gc2VuZCB0aGUgY2xvc2UgbWVzc2FnZQotICAgICAgICAgICAgICAgIHdyaXRlKGNsb3NlTWVzc2FnZSwgY2xvc2VkKTsKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBnZXQgYSByZXNwb25zZSBoZXJlIHRvIHZhbGlkYXRlIHRoYXQgdGhpbmdzIGNsb3NlZCBhcyBleHBlY3RlZC4gIG9uIGVycm9yLCB3ZSdsbCBsZXQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNlcnZlciB0cnkgdG8gY2xlYW4gdXAgb24gaXRzIG93bi4gIHRoZSBwcmltYXJ5IGVycm9yIGhlcmUgc2hvdWxkIHByb2JhYmx5IGJlIHJlbGF0ZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8gcHJvdG9jb2wgaXNzdWVzIHdoaWNoIHNob3VsZCBub3QgYmUgc29tZXRoaW5nIGEgdXNlciBoYXMgdG8gZnVzcyB3aXRoLgotICAgICAgICAgICAgICAgICAgICBjbG9zZWQuam9pbigpLmFsbCgpLmdldChjbHVzdGVyLmdldE1heFdhaXRGb3JDbG9zZSgpLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFRpbWVvdXRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWVvdXQgd2hpbGUgdHJ5aW5nIHRvIGNsb3NlIGNvbm5lY3Rpb24gb24gJXMgLSBmb3JjZSBjbG9zaW5nIC0gc2VydmVyIHdpbGwgY2xvc2Ugc2Vzc2lvbiBvbiBzaHV0ZG93biBvciBleHBpcmF0aW9uLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDbGllbnQuU2Vzc2lvbmVkQ2xpZW50KSBjbGllbnQpLmdldFNlc3Npb25JZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnLCBleCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmNvdW50ZXJlZCBhbiBlcnJvciB0cnlpbmcgdG8gY2xvc2UgY29ubmVjdGlvbiBvbiAlcyAtIGZvcmNlIGNsb3NpbmcgLSBzZXJ2ZXIgd2lsbCBjbG9zZSBzZXNzaW9uIG9uIHNodXRkb3duIG9yIGV4cGlyYXRpb24uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENsaWVudC5TZXNzaW9uZWRDbGllbnQpIGNsaWVudCkuZ2V0U2Vzc2lvbklkKCkpOwotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2Fybihtc2csIGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIC8vIHRha2UgYSBkZWZlbnNpdmUgcG9zdHVyZSBoZXJlIGluIHRoZSBldmVudCB0aGUgY2hhbm5lbGl6ZXIgZGlkbid0IGdldCBpbml0aWFsaXplZCBzb21laG93IGFuZCBhCiAgICAgICAgICAgICAvLyBjbG9zZSgpIG9uIHRoZSBDb25uZWN0aW9uIGlzIHN0aWxsIGNhbGxlZAogICAgICAgICAgICAgaWYgKGNoYW5uZWxpemVyICE9IG51bGwpCkBAIC0zOTMsOSArMzI4LDkgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldENvbm5lY3Rpb25JbmZvKGZpbmFsIGJvb2xlYW4gc2hvd0hvc3QpIHsKICAgICAgICAgcmV0dXJuIHNob3dIb3N0ID8KICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJDb25uZWN0aW9ue2NoYW5uZWw9JXMgaG9zdD0lcyBpc0RlYWQ9JXMgYm9ycm93ZWQ9JXMgcGVuZGluZz0lcyBtYXJrZWRSZXBsYWNlZD0lcyBjbG9zaW5nPSVzIGNyZWF0ZWQ9JXMgdGhyZWFkPSVzfSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFubmVsSWQoKSwgcG9vbC5ob3N0LnRvU3RyaW5nKCksIGlzRGVhZCgpLCB0aGlzLmJvcnJvd2VkLmdldCgpLCBnZXRQZW5kaW5nKCkuc2l6ZSgpLCB0aGlzLmlzQmVpbmdSZXBsYWNlZCwgaXNDbG9zaW5nKCksIGNyZWF0ZWRUaW1lc3RhbXAsIGNyZWF0aW5nVGhyZWFkKSA6CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFubmVsSWQoKSwgcG9vbC5ob3N0LnRvU3RyaW5nKCksIGlzRGVhZCgpLCB0aGlzLmlzQm9ycm93ZWQoKS5nZXQoKSwgZ2V0UGVuZGluZygpLmdldCgpID09IG51bGwgPyAwIDogMSwgdGhpcy5pc0JlaW5nUmVwbGFjZWQsIGlzQ2xvc2luZygpLCBjcmVhdGVkVGltZXN0YW1wLCBjcmVhdGluZ1RocmVhZCkgOgogICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkNvbm5lY3Rpb257Y2hhbm5lbD0lcyBpc0RlYWQ9JXMgYm9ycm93ZWQ9JXMgcGVuZGluZz0lcyBtYXJrZWRSZXBsYWNlZD0lcyBjbG9zaW5nPSVzIGNyZWF0ZWQ9JXMgdGhyZWFkPSVzfSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFubmVsSWQoKSwgaXNEZWFkKCksIHRoaXMuYm9ycm93ZWQuZ2V0KCksIGdldFBlbmRpbmcoKS5zaXplKCksIHRoaXMuaXNCZWluZ1JlcGxhY2VkLCBpc0Nsb3NpbmcoKSwgY3JlYXRlZFRpbWVzdGFtcCwgY3JlYXRpbmdUaHJlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhbm5lbElkKCksIGlzRGVhZCgpLCB0aGlzLmlzQm9ycm93ZWQoKS5nZXQoKSwgZ2V0UGVuZGluZygpLmdldCgpID09IG51bGwgPyAwIDogMSwgdGhpcy5pc0JlaW5nUmVwbGFjZWQsIGlzQ2xvc2luZygpLCBjcmVhdGVkVGltZXN0YW1wLCBjcmVhdGluZ1RocmVhZCk7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0Nvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0Nvbm5lY3Rpb25GYWN0b3J5LmphdmEKaW5kZXggZmI5YzU5ZS4uYWI4MjNmYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Db25uZWN0aW9uRmFjdG9yeS5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMzAsMTIgKzMwLDEyIEBACiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGEgY29ubmVjdGlvbiBmb3IgdGhlIHNwZWNpZmllZCB7QGxpbmsgQ29ubmVjdGlvblBvb2x9LgogICAgICAqLwotICAgIHB1YmxpYyBkZWZhdWx0IENvbm5lY3Rpb24gY3JlYXRlKGZpbmFsIENvbm5lY3Rpb25Qb29sIHBvb2wpIHRocm93cyBDb25uZWN0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uKHBvb2wuaG9zdC5nZXRIb3N0VXJpKCksIHBvb2wsIHBvb2wuc2V0dGluZ3MoKS5tYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKTsKKyAgICBkZWZhdWx0IENvbm5lY3Rpb24gY3JlYXRlKGZpbmFsIENvbm5lY3Rpb25Qb29sIHBvb2wpIHRocm93cyBDb25uZWN0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uKHBvb2wuaG9zdC5nZXRIb3N0VXJpKCksIHBvb2wpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBEZWZhdWx0Q29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBDb25uZWN0aW9uRmFjdG9yeSB7IH0KKyAgICBjbGFzcyBEZWZhdWx0Q29ubmVjdGlvbkZhY3RvcnkgaW1wbGVtZW50cyBDb25uZWN0aW9uRmFjdG9yeSB7IH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ29ubmVjdGlvblBvb2wuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ29ubmVjdGlvblBvb2wuamF2YQppbmRleCA3NzkxNTYwLi5lZTRjMzRjIDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0Nvbm5lY3Rpb25Qb29sLmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Db25uZWN0aW9uUG9vbC5qYXZhCkBAIC0xOCw2ICsxOCw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7CiAKK2ltcG9ydCBqYXZhLnV0aWwuUXVldWU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudExpbmtlZFF1ZXVlOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLkNvbm5lY3Rpb25FeGNlcHRpb247CkBAIC00Miw3ICs0NCw2IEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuQ29uZGl0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLkxvY2s7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50TG9jazsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKIC8qKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQpAQCAtNTAsMTAgKzUxLDcgQEAKIGZpbmFsIGNsYXNzIENvbm5lY3Rpb25Qb29sIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQ29ubmVjdGlvblBvb2wuY2xhc3MpOwogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1BPT0xfU0laRSA9IDI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1BPT0xfU0laRSA9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX1NJTVVMVEFORU9VU19VU0FHRV9QRVJfQ09OTkVDVElPTiA9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NJTVVMVEFORU9VU19VU0FHRV9QRVJfQ09OTkVDVElPTiA9IDE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9QT09MX1NJWkUgPSAxMjg7CiAgICAgLy8gQSBzbWFsbCBidWZmZXIgaW4gbWlsbGlzIHVzZWQgZm9yIGNvbXBhcmluZyBpZiBhIGNvbm5lY3Rpb24gd2FzIGNyZWF0ZWQgd2l0aGluIGEgY2VydGFpbiBhbW91bnQgb2YgdGltZS4KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTl9TRVRVUF9USU1FX0RFTFRBID0gMjU7CiAKQEAgLTYyLDEyICs2MCw5IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBDbGllbnQgY2xpZW50OwogICAgIHByaXZhdGUgZmluYWwgTGlzdDxDb25uZWN0aW9uPiBjb25uZWN0aW9uczsKICAgICBwcml2YXRlIGZpbmFsIEF0b21pY0ludGVnZXIgb3BlbjsKKyAgICBwcml2YXRlIGZpbmFsIFF1ZXVlPENvbm5lY3Rpb24+IGF2YWlsYWJsZUNvbm5lY3Rpb25zID0gbmV3IENvbmN1cnJlbnRMaW5rZWRRdWV1ZTw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8Q29ubmVjdGlvbj4gYmluID0gbmV3IENvcHlPbldyaXRlQXJyYXlTZXQ8PigpOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1pblBvb2xTaXplOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1heFBvb2xTaXplOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBtYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb247Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbWluSW5Qcm9jZXNzOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHBvb2xMYWJlbDsKIAogICAgIHByaXZhdGUgZmluYWwgQXRvbWljSW50ZWdlciBzY2hlZHVsZWRGb3JDcmVhdGlvbiA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CkBAIC03NSw3ICs3MCw3IEBACiAKICAgICBwcml2YXRlIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPj4gY2xvc2VGdXR1cmUgPSBuZXcgQXRvbWljUmVmZXJlbmNlPD4oKTsKIAotICAgIHByaXZhdGUgdm9sYXRpbGUgaW50IHdhaXRlciA9IDA7CisgICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNJbnRlZ2VyIHdhaXRlciA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBMb2NrIHdhaXRMb2NrID0gbmV3IFJlZW50cmFudExvY2sodHJ1ZSk7CiAgICAgcHJpdmF0ZSBmaW5hbCBDb25kaXRpb24gaGFzQXZhaWxhYmxlQ29ubmVjdGlvbiA9IHdhaXRMb2NrLm5ld0NvbmRpdGlvbigpOwogICAgIENvbm5lY3Rpb25GYWN0b3J5IGNvbm5lY3Rpb25GYWN0b3J5OwpAQCAtODMsNyArNzgsNyBAQAogICAgIC8qKgogICAgICAqIFRoZSByZXN1bHQgb2YgYSBjb25uZWN0aW9uIGF0dGVtcHQuIEEgbnVsbCB2YWx1ZSBmb3IgZmFpbHVyZUNhdXNlIG1lYW5zIHRoYXQgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCB3YXMgc3VjY2Vzc2Z1bC4KICAgICAgKi8KLSAgICBwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblJlc3VsdCB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb25uZWN0aW9uUmVzdWx0IHsKICAgICAgICAgcHJpdmF0ZSBsb25nIHRpbWVPZkNvbm5lY3Rpb25BdHRlbXB0OwogICAgICAgICBwcml2YXRlIFRocm93YWJsZSBmYWlsdXJlQ2F1c2U7CiAKQEAgLTk2LDE2ICs5MSwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBDb25uZWN0aW9uUG9vbChmaW5hbCBIb3N0IGhvc3QsIGZpbmFsIENsaWVudCBjbGllbnQpIHsKLSAgICAgICAgdGhpcyhob3N0LCBjbGllbnQsIE9wdGlvbmFsLmVtcHR5KCksIE9wdGlvbmFsLmVtcHR5KCkpOworICAgICAgICB0aGlzKGhvc3QsIGNsaWVudCwgT3B0aW9uYWwuZW1wdHkoKSk7CiAgICAgfQogCi0gICAgcHVibGljIENvbm5lY3Rpb25Qb29sKGZpbmFsIEhvc3QgaG9zdCwgZmluYWwgQ2xpZW50IGNsaWVudCwgZmluYWwgT3B0aW9uYWw8SW50ZWdlcj4gb3ZlcnJpZGVNaW5Qb29sU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8SW50ZWdlcj4gb3ZlcnJpZGVNYXhQb29sU2l6ZSkgewotICAgICAgICB0aGlzKGhvc3QsIGNsaWVudCwgb3ZlcnJpZGVNaW5Qb29sU2l6ZSwgb3ZlcnJpZGVNYXhQb29sU2l6ZSwgbmV3IENvbm5lY3Rpb25GYWN0b3J5LkRlZmF1bHRDb25uZWN0aW9uRmFjdG9yeSgpKTsKKyAgICBwdWJsaWMgQ29ubmVjdGlvblBvb2woZmluYWwgSG9zdCBob3N0LCBmaW5hbCBDbGllbnQgY2xpZW50LCBmaW5hbCBPcHRpb25hbDxJbnRlZ2VyPiBvdmVycmlkZU1heFBvb2xTaXplKSB7CisgICAgICAgIHRoaXMoaG9zdCwgY2xpZW50LCBvdmVycmlkZU1heFBvb2xTaXplLCBuZXcgQ29ubmVjdGlvbkZhY3RvcnkuRGVmYXVsdENvbm5lY3Rpb25GYWN0b3J5KCkpOwogICAgIH0KIAotICAgIENvbm5lY3Rpb25Qb29sKGZpbmFsIEhvc3QgaG9zdCwgZmluYWwgQ2xpZW50IGNsaWVudCwgZmluYWwgT3B0aW9uYWw8SW50ZWdlcj4gb3ZlcnJpZGVNaW5Qb29sU2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8SW50ZWdlcj4gb3ZlcnJpZGVNYXhQb29sU2l6ZSwgZmluYWwgQ29ubmVjdGlvbkZhY3RvcnkgY29ubmVjdGlvbkZhY3RvcnkpIHsKKyAgICBDb25uZWN0aW9uUG9vbChmaW5hbCBIb3N0IGhvc3QsIGZpbmFsIENsaWVudCBjbGllbnQsIGZpbmFsIE9wdGlvbmFsPEludGVnZXI+IG92ZXJyaWRlTWF4UG9vbFNpemUsIGZpbmFsIENvbm5lY3Rpb25GYWN0b3J5IGNvbm5lY3Rpb25GYWN0b3J5KSB7CiAgICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7CiAgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OwogICAgICAgICB0aGlzLmNsdXN0ZXIgPSBjbGllbnQuY2x1c3RlcjsKQEAgLTExMyw2OCArMTA2LDQzIEBACiAgICAgICAgIHBvb2xMYWJlbCA9ICJDb25uZWN0aW9uIFBvb2wge2hvc3Q9IiArIGhvc3QgKyAifSI7CiAKICAgICAgICAgZmluYWwgU2V0dGluZ3MuQ29ubmVjdGlvblBvb2xTZXR0aW5ncyBzZXR0aW5ncyA9IHNldHRpbmdzKCk7Ci0gICAgICAgIHRoaXMubWluUG9vbFNpemUgPSBvdmVycmlkZU1pblBvb2xTaXplLm9yRWxzZShzZXR0aW5ncy5taW5TaXplKTsKICAgICAgICAgdGhpcy5tYXhQb29sU2l6ZSA9IG92ZXJyaWRlTWF4UG9vbFNpemUub3JFbHNlKHNldHRpbmdzLm1heFNpemUpOwotICAgICAgICB0aGlzLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiA9IHNldHRpbmdzLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbjsKLSAgICAgICAgdGhpcy5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPSBzZXR0aW5ncy5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb247Ci0gICAgICAgIHRoaXMubWluSW5Qcm9jZXNzID0gc2V0dGluZ3MubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjsKIAogICAgICAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PD4oKTsKICAgICAgICAgdGhpcy5vcGVuID0gbmV3IEF0b21pY0ludGVnZXIoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgTGlzdDxDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPj4gY29ubmVjdGlvbkNyZWF0aW9uRnV0dXJlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW5Qb29sU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY29ubmVjdGlvbkNyZWF0aW9uRnV0dXJlcy5hZGQoQ29tcGxldGFibGVGdXR1cmUucnVuQXN5bmMoKCkgLT4gewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb25uZWN0aW9uUmVzdWx0IHJlc3VsdCA9IG5ldyBDb25uZWN0aW9uUmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25zLmFkZChjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGUodGhpcykpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuLmluY3JlbWVudEFuZEdldCgpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChDb25uZWN0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRGYWlsdXJlQ2F1c2UoZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tcGxldGlvbkV4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRUaW1lTm93KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxhdGVzdENvbm5lY3Rpb25SZXN1bHQuZ2V0KCkgPT0gbnVsbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhdGVzdENvbm5lY3Rpb25SZXN1bHQuZ2V0KCkuZ2V0VGltZSgpIDwgcmVzdWx0LmdldFRpbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RDb25uZWN0aW9uUmVzdWx0LnNldChyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gYXR0ZW1wdCBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIGVuc3VyZSB0aGUgaG9zdCBpcyB2aWFibGUKKyAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIHRyYWZmaWMsIGl0IHdpbGwgZXZlbnR1YWxseSBiZSBjbG9zZWQgYnkgSWRsZUNvbm5lY3Rpb25IYW5kbGVyCisgICAgICAgICAgICBDb21wbGV0YWJsZUZ1dHVyZS5ydW5Bc3luYygoKSAtPiB7CisgICAgICAgICAgICAgICAgZmluYWwgQ29ubmVjdGlvblJlc3VsdCByZXN1bHQgPSBuZXcgQ29ubmVjdGlvblJlc3VsdCgpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbm5lY3Rpb24gY29ubiA9IGNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9ucy5hZGQoY29ubik7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlQ29ubmVjdGlvbnMuYWRkKGNvbm4pOworICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4uaW5jcmVtZW50QW5kR2V0KCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ29ubmVjdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRGYWlsdXJlQ2F1c2UoZSk7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb21wbGV0aW9uRXhjZXB0aW9uKGUpOworICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXRUaW1lTm93KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgobGF0ZXN0Q29ubmVjdGlvblJlc3VsdC5nZXQoKSA9PSBudWxsKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXRlc3RDb25uZWN0aW9uUmVzdWx0LmdldCgpLmdldFRpbWUoKSA8IHJlc3VsdC5nZXRUaW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RDb25uZWN0aW9uUmVzdWx0LnNldChyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwgY2x1c3Rlci5jb25uZWN0aW9uU2NoZWR1bGVyKCkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQ29tcGxldGFibGVGdXR1cmUuYWxsT2YoY29ubmVjdGlvbkNyZWF0aW9uRnV0dXJlcy50b0FycmF5KG5ldyBDb21wbGV0YWJsZUZ1dHVyZVswXSkpLmpvaW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LCBjbHVzdGVyLmNvbm5lY3Rpb25TY2hlZHVsZXIoKSkuam9pbigpOwogICAgICAgICB9IGNhdGNoIChDYW5jZWxsYXRpb25FeGNlcHRpb24gY2UpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJJbml0aWFsaXphdGlvbiBvZiBjb25uZWN0aW9ucyBjYW5jZWxsZWQgZm9yIHt9IiwgdGhpcy5nZXRQb29sSW5mbygpLCBjZSk7CisgICAgICAgICAgICBsb2dnZXIud2FybigiSW5pdGlhbGl6YXRpb24gb2YgY29ubmVjdGlvbiBwb29sIGNhbmNlbGxlZCBmb3Ige30iLCB0aGlzLmdldFBvb2xJbmZvKCksIGNlKTsKICAgICAgICAgICAgIHRocm93IGNlOwogICAgICAgICB9IGNhdGNoIChDb21wbGV0aW9uRXhjZXB0aW9uIGNlKSB7Ci0gICAgICAgICAgICAvLyBTb21lIGNvbm5lY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBpbml0aWFsaXplZCwgbGV0J3MgcmVzcGVjdCB0aG9zZSBhcyBvZiAzLjcuNQotICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBjb25uZWN0aW9uIHBvb2wgc2luY2Ugd2UgaGF2ZSB6ZXJvIGNvbm5lY3Rpb25zCi0gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzeW5jKCk7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXJyTXNnID0gIkNvdWxkIG5vdCBpbml0aWFsaXplICIgKyBtaW5Qb29sU2l6ZSArICIgKG1pblBvb2xTaXplKSBjb25uZWN0aW9ucyBpbiBwb29sIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuaG9zdCArICIuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBTdWNjZXNzZnVsIGNvbm5lY3Rpb25zPSIgKyB0aGlzLmNvbm5lY3Rpb25zLnNpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiLiBDbG9zaW5nIHRoZSBjb25uZWN0aW9uIHBvb2wuIjsKLQotICAgICAgICAgICAgICAgIFRocm93YWJsZSBjYXVzZTsKLSAgICAgICAgICAgICAgICBUaHJvd2FibGUgcmVzdWx0ID0gY2U7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSAoY2F1c2UgPSByZXN1bHQuZ2V0Q2F1c2UoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2F1c2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbXBsZXRpb25FeGNlcHRpb24oZXJyTXNnLCByZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyB3YXJuIHRoYXQgdGhlIGVycm9yIG1heSBoYXZlIHRoZSBkcml2ZXIgYmVsb3cgdGhlIG1pbiBwb29sIHNpemUuIGV4cGVjdCByZWNvdmVyeSwgYnV0IG5vIHBvaW50Ci0gICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uIGZvciBwb3RlbnRpYWxseSBhIHNpbmdsZSBjb25uZWN0aW9uIGVycm9yLgotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDb25uZWN0aW9uUG9vbCBmb3IgIiArIHRoaXMuaG9zdCArICIgaW5pdGlhbGl6ZWQgd2l0aCAiICsgY29ubmVjdGlvbnMuc2l6ZSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBleHBlY3RlZCBtaW5Qb29sU2l6ZSB3YXMgIiArIG1pblBvb2xTaXplICsgIiAtIHdpbGwgYXR0ZW1wdCB0byByZWNvdmVyIiwgY2UpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGNvbm5lY3Rpb24gcG9vbCBncmFjZWZ1bGx5IHRvIGNsb3NlIGFueSBvcGVuIGNvbm5lY3Rpb25zLgorICAgICAgICAgICAgdGhpcy5jbG9zZUFzeW5jKCk7CisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcmVzdWx0ID0gY2UuZ2V0Q2F1c2UoKSA9PSBudWxsID8gY2UgOiBjZS5nZXRDYXVzZSgpOworICAgICAgICAgICAgdGhyb3cgbmV3IENvbXBsZXRpb25FeGNlcHRpb24oIkNvdWxkIG5vdCBpbml0aWFsaXplIGNvbm5lY3Rpb24gaW4gcG9vbC4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbiBwb29sLiIsIHJlc3VsdCk7CiAgICAgICAgIH0KIAotICAgICAgICBsb2dnZXIuaW5mbygiT3BlbmluZyBjb25uZWN0aW9uIHBvb2wgb24ge30gd2l0aCBjb3JlIHNpemUgb2Yge30iLCBob3N0LCBtaW5Qb29sU2l6ZSk7CisgICAgICAgIGxvZ2dlci5pbmZvKCJPcGVuaW5nIGNvbm5lY3Rpb24gcG9vbCBvbiB7fSIsIGhvc3QpOwogICAgIH0KIAogICAgIHB1YmxpYyBTZXR0aW5ncy5Db25uZWN0aW9uUG9vbFNldHRpbmdzIHNldHRpbmdzKCkgewpAQCAtMTgyLDc1ICsxNTAsNjAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgQ29ubmVjdGlvbiBib3Jyb3dDb25uZWN0aW9uKGZpbmFsIGxvbmcgdGltZW91dCwgZmluYWwgVGltZVVuaXQgdW5pdCkgdGhyb3dzIFRpbWVvdXRFeGNlcHRpb24sIENvbm5lY3Rpb25FeGNlcHRpb24gewotICAgICAgICBsb2dnZXIuZGVidWcoIkJvcnJvd2luZyBjb25uZWN0aW9uIGZyb20gcG9vbCBvbiB7fSAtIHRpbWVvdXQgaW4ge30ge30iLCBob3N0LCB0aW1lb3V0LCB1bml0KTsKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJCb3Jyb3dpbmcgY29ubmVjdGlvbiBmcm9tIHBvb2wgb24ge30gLSB0aW1lb3V0IGluIHt9IHt9IHdpdGgge30iLCBob3N0LCB0aW1lb3V0LCB1bml0LCBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKIAogICAgICAgICBpZiAoaXNDbG9zZWQoKSkgdGhyb3cgbmV3IENvbm5lY3Rpb25FeGNlcHRpb24oaG9zdC5nZXRIb3N0VXJpKCksIGhvc3QuZ2V0QWRkcmVzcygpLCAiUG9vbCBpcyBzaHV0ZG93biIpOwogCi0gICAgICAgIGlmIChjb25uZWN0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiVHJpZWQgdG8gYm9ycm93IGNvbm5lY3Rpb24gYnV0IHRoZSBwb29sIHdhcyBlbXB0eSBmb3Ige30gLSBzY2hlZHVsaW5nIHBvb2wgY3JlYXRpb24gYW5kIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24iLCBob3N0KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWluUG9vbFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIC8vIElmIG1hbnkgY29ubmVjdGlvbnMgYXJlIGJvcnJvd2VkIGF0IHRoZSBzYW1lIHRpbWUgdGhlcmUgbmVlZHMgdG8gYmUgYSBjaGVjayB0byBtYWtlIHN1cmUgbm8KLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIG9uZXMgZ2V0IHNjaGVkdWxlZCBmb3IgY3JlYXRpb24KLSAgICAgICAgICAgICAgICBpZiAoc2NoZWR1bGVkRm9yQ3JlYXRpb24uZ2V0KCkgPCBtaW5Qb29sU2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBzY2hlZHVsZWRGb3JDcmVhdGlvbi5pbmNyZW1lbnRBbmRHZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gR2V0IHZhbGlkIGNvbm5lY3Rpb24KKyAgICAgICAgQ29ubmVjdGlvbiBhdmFpbGFibGVDb25uZWN0aW9uOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gYWNxdWlyZSBsb2NrIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG9idGFpbiBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBhbmQgcG90ZW50aWFsbHkgd2FpdGluZyBmb3Igb25lCisgICAgICAgICAgICAvLyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIHRocmVhZHMgdGhhdCBhcmUgcmVsZWFzaW5nIG9yIGNyZWF0aW5nIG5ldyBjb25uZWN0aW9ucworICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIHNpZ25hbCBtYXkgYmUgY2FsbGVkIGJlZm9yZSBhd2FpdCB3aGljaCB3b3VsZCByZXN1bHQgaW4gdGltZW91dHMKKyAgICAgICAgICAgIHdhaXRMb2NrLmxvY2soKTsKKyAgICAgICAgICAgIGF2YWlsYWJsZUNvbm5lY3Rpb24gPSBnZXRBdmFpbGFibGVDb25uZWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlQ29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlQ29ubmVjdGlvbiA9IHdhaXRGb3JDb25uZWN0aW9uKHRpbWVvdXQsIHVuaXQpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbm5lY3Rpb24odGltZW91dCwgdW5pdCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICB3YWl0TG9jay51bmxvY2soKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEdldCB0aGUgbGVhc3QgdXNlZCB2YWxpZCBjb25uZWN0aW9uCi0gICAgICAgIGZpbmFsIENvbm5lY3Rpb24gbGVhc3RVc2VkQ29ubiA9IGdldExlYXN0VXNlZFZhbGlkQ29ubmVjdGlvbigpOwotCi0gICAgICAgIGlmIChudWxsID09IGxlYXN0VXNlZENvbm4pIHsKLSAgICAgICAgICAgIGlmIChpc0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXhjZXB0aW9uKGhvc3QuZ2V0SG9zdFVyaSgpLCBob3N0LmdldEFkZHJlc3MoKSwgIlBvb2wgaXMgc2h1dGRvd24iKTsKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUG9vbCB3YXMgaW5pdGlhbGl6ZWQgYnV0IGEgY29ubmVjdGlvbiBjb3VsZCBub3QgYmUgc2VsZWN0ZWQgZWFybGllciAtIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gb24ge30iLCBob3N0KTsKLSAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29ubmVjdGlvbih0aW1lb3V0LCB1bml0KTsKKyAgICAgICAgaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkJvcnJvd2VkIHt9IG9uIHt9IHdpdGgge30iLCBhdmFpbGFibGVDb25uZWN0aW9uLmdldENvbm5lY3Rpb25JbmZvKCksIGhvc3QsIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKQotICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJSZXR1cm4gbGVhc3QgdXNlZCB7fSBvbiB7fSIsIGxlYXN0VXNlZENvbm4uZ2V0Q29ubmVjdGlvbkluZm8oKSwgaG9zdCk7Ci0gICAgICAgIHJldHVybiBsZWFzdFVzZWRDb25uOworICAgICAgICByZXR1cm4gYXZhaWxhYmxlQ29ubmVjdGlvbjsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCByZXR1cm5Db25uZWN0aW9uKGZpbmFsIENvbm5lY3Rpb24gY29ubmVjdGlvbikgdGhyb3dzIENvbm5lY3Rpb25FeGNlcHRpb24gewogICAgICAgICBsb2dnZXIuZGVidWcoIkF0dGVtcHRpbmcgdG8gcmV0dXJuIHt9IG9uIHt9IiwgY29ubmVjdGlvbiwgaG9zdCk7CiAgICAgICAgIGlmIChpc0Nsb3NlZCgpKSB0aHJvdyBuZXcgQ29ubmVjdGlvbkV4Y2VwdGlvbihob3N0LmdldEhvc3RVcmkoKSwgaG9zdC5nZXRBZGRyZXNzKCksICJQb29sIGlzIHNodXRkb3duIik7CiAKLSAgICAgICAgZmluYWwgaW50IGJvcnJvd2VkID0gY29ubmVjdGlvbi5ib3Jyb3dlZC5kZWNyZW1lbnRBbmRHZXQoKTsKKyAgICAgICAgY29ubmVjdGlvbi5pc0JvcnJvd2VkKCkuc2V0KGZhbHNlKTsKIAogICAgICAgICBpZiAoY29ubmVjdGlvbi5pc0RlYWQoKSkgewogICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJNYXJraW5nIHt9IGFzIGRlYWQiLCB0aGlzLmhvc3QpOwogICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChiaW4uY29udGFpbnMoY29ubmVjdGlvbikgJiYgYm9ycm93ZWQgPT0gMCkgeworICAgICAgICAgICAgaWYgKGJpbi5jb250YWlucyhjb25uZWN0aW9uKSkgewogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygie30gaXMgYWxyZWFkeSBpbiB0aGUgYmluIGFuZCBpdCBoYXMgbm8gaW5mbGlnaHQgcmVxdWVzdHMgc28gaXQgaXMgc2FmZSB0byBjbG9zZSIsIGNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIGlmIChiaW4ucmVtb3ZlKGNvbm5lY3Rpb24pKQogICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlQXN5bmMoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIGRlc3Ryb3kgYSBjb25uZWN0aW9uIHRoYXQgZXhjZWVkcyB0aGUgbWluaW11bSBwb29sIHNpemUgLSBpdCBkb2VzIG5vdCBoYXZlIHRoZSByaWdodCB0byBsaXZlIGlmIGl0Ci0gICAgICAgICAgICAvLyBpc24ndCBidXN5LiByZXBsYWNlIGEgY29ubmVjdGlvbiB0aGF0IGhhcyBhIGxvdyBhdmFpbGFibGUgaW4gcHJvY2VzcyBjb3VudCB3aGljaCBsaWtlbHkgbWVhbnMgdGhhdAotICAgICAgICAgICAgLy8gaXQncyBiYWNraW5nIHVwIHdpdGggcmVxdWVzdHMgdGhhdCBtaWdodCBuZXZlciBoYXZlIHJldHVybmVkLiBjb25zaWRlciB0aGUgbWF4UG9vbFNpemUgaW4gdGhpcyBjb25kaXRpb24KLSAgICAgICAgICAgIC8vIGJlY2F1c2UgaWYgaXQgaXMgZXF1YWwgdG8gMSAod2hpY2ggaXQgaXMgZm9yIGEgc2Vzc2lvbikgdGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIHJlcGxhY2UgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICAgIC8vIGFzIGl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGV2ZXJ5IHNpbmdsZSByZXF1ZXN0LiBpZiBuZWl0aGVyIG9mIHRoZXNlIHNjZW5hcmlvcyBhcmUgbWV0IHRoZW4gbGV0IHRoZQotICAgICAgICAgICAgLy8gd29ybGQga25vdyB0aGUgY29ubmVjdGlvbiBpcyBhdmFpbGFibGUuCisgICAgICAgICAgICAvLyBEZXN0cm95IGFueSBleHRyYSBjb25uZWN0aW9ucyB0aGF0IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIHBvb2wgc2l6ZS4gSWRsZSBjb25uZWN0aW9ucyB3aWxsIGJlIHJlbW92ZWQKKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZWlyIGlkbGUgdGltZW91dCBzbyB0aGF0IGlzbid0IGhhbmRsZWQgaGVyZS4KICAgICAgICAgICAgIGZpbmFsIGludCBwb29sU2l6ZSA9IGNvbm5lY3Rpb25zLnNpemUoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBhdmFpbGFibGVJblByb2Nlc3MgPSBjb25uZWN0aW9uLmF2YWlsYWJsZUluUHJvY2VzcygpOwotICAgICAgICAgICAgaWYgKHBvb2xTaXplID4gbWluUG9vbFNpemUgJiYgYm9ycm93ZWQgPD0gbWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKSB7CisgICAgICAgICAgICBpZiAocG9vbFNpemUgPiBtYXhQb29sU2l6ZSkgewogICAgICAgICAgICAgICAgIGlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJPbiB7fSBwb29sIHNpemUgb2Yge30gPiBtaW5Qb29sU2l6ZSB7fSBhbmQgYm9ycm93ZWQgb2Yge30gPD0gbWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uIHt9IHNvIGRlc3Ryb3kge30iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QsIHBvb2xTaXplLCBtaW5Qb29sU2l6ZSwgYm9ycm93ZWQsIG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiwgY29ubmVjdGlvbi5nZXRDb25uZWN0aW9uSW5mbygpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJkZXN0cm95IHt9IiwgY29ubmVjdGlvbi5nZXRDb25uZWN0aW9uSW5mbygpKTsKICAgICAgICAgICAgICAgICBkZXN0cm95Q29ubmVjdGlvbihjb25uZWN0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYXZhaWxhYmxlSW5Qcm9jZXNzIDwgbWluSW5Qcm9jZXNzICYmIG1heFBvb2xTaXplID4gMSkgewotICAgICAgICAgICAgICAgIGlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJPbiB7fSBhdmFpbGFibGVJblByb2Nlc3Mge30gPCBtaW5JblByb2Nlc3Mge30gc28gcmVwbGFjZSB7fSIsIGhvc3QsIGF2YWlsYWJsZUluUHJvY2VzcywgbWluSW5Qcm9jZXNzLCBjb25uZWN0aW9uLmdldENvbm5lY3Rpb25JbmZvKCkpOwotICAgICAgICAgICAgICAgIHJlcGxhY2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwotICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUG9vbCBzaXplIGlzIHt9IC0gcmV0dXJuaW5nIGNvbm5lY3Rpb24gdG8gcG9vbDoge30iLCBwb29sU2l6ZSwgY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlQ29ubmVjdGlvbnMuYWRkKGNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIGFubm91bmNlQXZhaWxhYmxlQ29ubmVjdGlvbigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNzIsNyArMjI1LDcgQEAKICAgICBwdWJsaWMgc3luY2hyb25pemVkIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGNsb3NlQXN5bmMoKSB7CiAgICAgICAgIGlmIChjbG9zZUZ1dHVyZS5nZXQoKSAhPSBudWxsKSByZXR1cm4gY2xvc2VGdXR1cmUuZ2V0KCk7CiAKLSAgICAgICAgbG9nZ2VyLmluZm8oIlNpZ25hbGxlZCBjbG9zaW5nIG9mIGNvbm5lY3Rpb24gcG9vbCBvbiB7fSB3aXRoIGNvcmUgc2l6ZSBvZiB7fSIsIGhvc3QsIG1pblBvb2xTaXplKTsKKyAgICAgICAgbG9nZ2VyLmluZm8oIlNpZ25hbGxlZCBjbG9zaW5nIG9mIGNvbm5lY3Rpb24gcG9vbCBvbiB7fSB3aXRoIGN1cnJlbnQgY29ubmVjdGlvbiBzaXplIG9mIHt9IiwgaG9zdCwgY29ubmVjdGlvbnMuc2l6ZSgpKTsKIAogICAgICAgICBhbm5vdW5jZUFsbEF2YWlsYWJsZUNvbm5lY3Rpb24oKTsKICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8Vm9pZD4gZnV0dXJlID0ga2lsbEF2YWlsYWJsZUNvbm5lY3Rpb25zKCk7CkBAIC0zMjMsNyArMjc2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGNvbnNpZGVyTmV3Q29ubmVjdGlvbigpOwotICAgICAgICBkZWZpbml0ZWx5RGVzdHJveUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAgICAgIGRlc3Ryb3lDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBjb25zaWRlck5ld0Nvbm5lY3Rpb24oKSB7CkBAIC0zNDQsNiArMjk3LDkgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbmV3Q29ubmVjdGlvbigpIHsKKyAgICAgICAgaWYgKGxvZ2dlci5pc1RyYWNlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBsb2dnZXIudHJhY2UoIlNjaGVkdWxpbmcgY3JlYXRpb24gb2YgbmV3IGNvbm5lY3Rpb24gZm9yIGNvbm5lY3Rpb24gcG9vbCB7fSB1c2luZyBzY2hlZHVsZXIge30iLCB0aGlzLmdldFBvb2xJbmZvKCksIGNsdXN0ZXIuY29ubmVjdGlvblNjaGVkdWxlcigpKTsKKyAgICAgICAgfQogICAgICAgICBjbHVzdGVyLmNvbm5lY3Rpb25TY2hlZHVsZXIoKS5zdWJtaXQoKCkgLT4gewogICAgICAgICAgICAgLy8gc2VlbXMgbGlrZSB0aGlzIHNob3VsZCBiZSBkZWNyZW1lbnRlZCBmaXJzdCBiZWNhdXNlIGlmIGFkZENvbm5lY3Rpb25JZlVuZGVyTWF4aW11bSBmYWlscyB0aGVyZSBpcwogICAgICAgICAgICAgLy8gbm90aGluZyB0aGF0IHdhbnRzIHRvIGRlY3JlbWVudCB0aGlzIG51bWJlciBhbmQgc28gaXQgbGVhdmVzIHRoaW5ncyBpbiBhIHN0YXRlIHdoZXJlIHlvdSBjb3VsZApAQCAtMzc5LDcgKzMzNSwxMCBAQAogCiAgICAgICAgIGZpbmFsIENvbm5lY3Rpb25SZXN1bHQgcmVzdWx0ID0gbmV3IENvbm5lY3Rpb25SZXN1bHQoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25zLmFkZChjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGUodGhpcykpOworICAgICAgICAgICAgZmluYWwgQ29ubmVjdGlvbiBjb25uID0gY29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlKHRoaXMpOworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJDcmVhdGVkIGNvbm5lY3Rpb24ge30iLCBjb25uLmdldENvbm5lY3Rpb25JbmZvKCkpOworICAgICAgICAgICAgY29ubmVjdGlvbnMuYWRkKGNvbm4pOworICAgICAgICAgICAgYXZhaWxhYmxlQ29ubmVjdGlvbnMuYWRkKGNvbm4pOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIG9wZW4uZGVjcmVtZW50QW5kR2V0KCk7CiAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoU3RyaW5nLmZvcm1hdCgKQEAgLTQwMCwzNSArMzU5LDIxIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBkZXN0cm95Q29ubmVjdGlvbihmaW5hbCBDb25uZWN0aW9uIGNvbm5lY3Rpb24pIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBvcGVuZWQgPSBvcGVuLmdldCgpOwotICAgICAgICAgICAgaWYgKG9wZW5lZCA8PSBtaW5Qb29sU2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChvcGVuLmNvbXBhcmVBbmRTZXQob3BlbmVkLCBvcGVuZWQgLSAxKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmluaXRlbHlEZXN0cm95Q29ubmVjdGlvbihjb25uZWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZGVmaW5pdGVseURlc3Ryb3lDb25uZWN0aW9uKGZpbmFsIENvbm5lY3Rpb24gY29ubmVjdGlvbikgeworICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3lDb25uZWN0aW9uKGZpbmFsIENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgICAgICAvLyBvbmx5IGFkZCB0byB0aGUgYmluIGZvciBmdXR1cmUgcmVtb3ZhbCBpZiBpdHMgbm90IGFscmVhZHkgdGhlcmUuCiAgICAgICAgIGlmICghYmluLmNvbnRhaW5zKGNvbm5lY3Rpb24pICYmICFjb25uZWN0aW9uLmlzQ2xvc2luZygpKSB7CiAgICAgICAgICAgICBiaW4uYWRkKGNvbm5lY3Rpb24pOwogICAgICAgICAgICAgY29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rpb24pOworICAgICAgICAgICAgYXZhaWxhYmxlQ29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rpb24pOwogICAgICAgICAgICAgb3Blbi5kZWNyZW1lbnRBbmRHZXQoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIG9ubHkgY2xvc2UgdGhlIGNvbm5lY3Rpb24gZm9yIGdvb2Qgb25jZSBpdCBpcyBkb25lIGJlaW5nIGJvcnJvd2VkIG9yIHdoZW4gaXQgaXMgZGVhZAotICAgICAgICBpZiAoY29ubmVjdGlvbi5pc0RlYWQoKSB8fCBjb25uZWN0aW9uLmJvcnJvd2VkLmdldCgpID09IDApIHsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24uaXNEZWFkKCkgfHwgIWNvbm5lY3Rpb24uaXNCb3Jyb3dlZCgpLmdldCgpKSB7CiAgICAgICAgICAgICBpZiAoYmluLnJlbW92ZShjb25uZWN0aW9uKSkgewogICAgICAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGNsb3NlRnV0dXJlID0gY29ubmVjdGlvbi5jbG9zZUFzeW5jKCk7Ci0gICAgICAgICAgICAgICAgY2xvc2VGdXR1cmUud2hlbkNvbXBsZXRlKCh2LCB0KSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRGVzdHJveWVkIHt9e317fSIsIGNvbm5lY3Rpb24uZ2V0Q29ubmVjdGlvbkluZm8oKSwgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSwgdGhpcy5nZXRQb29sSW5mbygpKTsKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBjbG9zZUZ1dHVyZS53aGVuQ29tcGxldGUoKHYsIHQpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkRlc3Ryb3llZCB7fXt9e30iLCBjb25uZWN0aW9uLmdldENvbm5lY3Rpb25JbmZvKCksIFN5c3RlbS5saW5lU2VwYXJhdG9yKCksIHRoaXMuZ2V0UG9vbEluZm8oKSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNDQxLDYgKzM4Niw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGF3YWl0QXZhaWxhYmxlQ29ubmVjdGlvbihyZW1haW5pbmcsIHVuaXQpOwogICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJXYWl0IHdhcyBpbnRlcnJ1cHRlZCIsIGUpOwogICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7CiAgICAgICAgICAgICAgICAgdG8gPSAwOwogICAgICAgICAgICAgfQpAQCAtNDQ4LDE2ICszOTQsMTYgQEAKICAgICAgICAgICAgIGlmIChpc0Nsb3NlZCgpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb25uZWN0aW9uRXhjZXB0aW9uKGhvc3QuZ2V0SG9zdFVyaSgpLCBob3N0LmdldEFkZHJlc3MoKSwgIlBvb2wgaXMgc2h1dGRvd24iKTsKIAotICAgICAgICAgICAgZmluYWwgQ29ubmVjdGlvbiBsZWFzdFVzZWQgPSBnZXRMZWFzdFVzZWRWYWxpZENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIGZpbmFsIENvbm5lY3Rpb24gY29ubiA9IGdldEF2YWlsYWJsZUNvbm5lY3Rpb24oKTsKIAotICAgICAgICAgICAgaWYgKGxlYXN0VXNlZCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoY29ubiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlJldHVybiBsZWFzdCB1c2VkIHt9IG9uIHt9IGFmdGVyIHdhaXRpbmciLCBsZWFzdFVzZWQuZ2V0Q29ubmVjdGlvbkluZm8oKSwgaG9zdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxlYXN0VXNlZDsKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJSZXR1cm4ge30gb24ge30gYWZ0ZXIgd2FpdGluZyBvbiB7fSIsIGNvbm4uZ2V0Q29ubmVjdGlvbkluZm8oKSwgaG9zdCwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJlbWFpbmluZyA9IHRvIC0gVGltZVV0aWwudGltZVNpbmNlKHN0YXJ0LCB1bml0KTsKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ29udGludWUgdG8gd2FpdCBmb3IgY29ubmVjdGlvbiBvbiB7fSBpZiB7fSA+IDAiLCBob3N0LCByZW1haW5pbmcpOworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJDb250aW51ZSB0byB3YWl0IGZvciBjb25uZWN0aW9uIG9uIHt9IGlmIHt9ID4gMCBvbiB7fSIsIGhvc3QsIHJlbWFpbmluZywgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7CiAgICAgICAgIH0gd2hpbGUgKHJlbWFpbmluZyA+IDApOwogCiAgICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgY2F1c2UgPSBuZXcgU3RyaW5nQnVpbGRlcigiUG90ZW50aWFsIENhdXNlOiAiKTsKQEAgLTQ2OSw3ICs0MTUsNyBAQAogICAgICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSByb290IGNhdXNlIHdpbGwgZ2l2ZSBiZXR0ZXIgaW5mb3JtYXRpb24gYWJvdXQgd2h5IHRoZSBjb25uZWN0aW9uIGZhaWxlZC4KICAgICAgICAgICAgIGNhdXNlLmFwcGVuZChFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKHJlcy5nZXRGYWlsdXJlQ2F1c2UoKSkuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChvcGVuLmdldCgpID49IG1heFBvb2xTaXplKSB7Ci0gICAgICAgICAgICBjYXVzZS5hcHBlbmQoQ2xpZW50LlRPT19NQU5ZX0lOX0ZMSUdIVF9SRVFVRVNUUyk7CisgICAgICAgICAgICBjYXVzZS5hcHBlbmQoU3RyaW5nLmZvcm1hdChDbGllbnQuVE9PX01BTllfSU5fRkxJR0hUX1JFUVVFU1RTLCBvcGVuLmdldCgpLCBtYXhQb29sU2l6ZSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgY2F1c2Uuc2V0TGVuZ3RoKDApOwogICAgICAgICB9CkBAIC00ODIsNyArNDI4LDcgQEAKICAgICAgICAgLy8gdXNlciBpZiB0aGUgcG9vbCB3YXMgcnVubmluZyBhdCBtYXhpbXVtLgogICAgICAgICBmaW5hbCBTdHJpbmcgdGltZW91dEVycm9yTWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgIlRpbWVkLW91dCAoJXMgJXMpIHdhaXRpbmcgZm9yIGNvbm5lY3Rpb24gb24gJXMuICVzJXMlcyIsCi0gICAgICAgICAgICAgICAgdGltZW91dCwgdW5pdCwgaG9zdCwgY2F1c2UudG9TdHJpbmcoKSwgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSwgdGhpcy5nZXRQb29sSW5mbygpKTsKKyAgICAgICAgICAgICAgICB0aW1lb3V0LCB1bml0LCBob3N0LCBjYXVzZSwgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSwgdGhpcy5nZXRQb29sSW5mbygpKTsKIAogICAgICAgICBsb2dnZXIuZXJyb3IodGltZW91dEVycm9yTWVzc2FnZSk7CiAKQEAgLTUxMSw3ICs0NTcsNyBAQAogICAgICAgICAgICAgLy8gbGV0IHRoZSBsb2FkLWJhbGFuY2VyIGtub3cgdGhhdCB0aGUgaG9zdCBpcyBhY3RpbmcgcG9vcmx5CiAgICAgICAgICAgICBpZiAoIWhvc3QuaXNBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBob3N0IGlzIHVuYXZhaWxhYmxlIHRoZW4gd2Ugc2hvdWxkIHJlbGVhc2UgdGhlIGNvbm5lY3Rpb25zCi0gICAgICAgICAgICAgICAgY29ubmVjdGlvbnMuZm9yRWFjaCh0aGlzOjpkZWZpbml0ZWx5RGVzdHJveUNvbm5lY3Rpb24pOworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zLmZvckVhY2godGhpczo6ZGVzdHJveUNvbm5lY3Rpb24pOwogICAgICAgICAgICAgICAgIHRoaXMuY2x1c3Rlci5sb2FkQmFsYW5jaW5nU3RyYXRlZ3koKS5vblVuYXZhaWxhYmxlKGhvc3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NTQsOSArNTAwLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBhbm5vdW5jZUF2YWlsYWJsZUNvbm5lY3Rpb24oKSB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQW5ub3VuY2UgY29ubmVjdGlvbiBhdmFpbGFibGUgb24ge30iLCBob3N0KTsKLQotICAgICAgICBpZiAod2FpdGVyID09IDApCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGxvZ0Nvbm5lY3Rpb25Qb29sU3RhdHVzKCk7CiAKICAgICAgICAgd2FpdExvY2subG9jaygpOwogICAgICAgICB0cnkgewpAQCAtNTY3LDU4ICs1MTEsNDkgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHZXQgdGhlIGxlYXN0LXVzZWQgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sLiBBbHNvIHRyaWdnZXJzIGNvbnNpZGVyYXRpb24gb2YgYSBuZXcgY29ubmVjdGlvbiBpZiB0aGUgbGVhc3QtdXNlZAorICAgICAqIEdldCBhbiBhdmFpbGFibGUgY29ubmVjdGlvbiBmcm9tIHRoZSBwb29sLiBBbHNvIHRyaWdnZXJzIGNvbnNpZGVyYXRpb24gb2YgYSBuZXcgY29ubmVjdGlvbiBpZiB0aGUgbGVhc3QtdXNlZAogICAgICAqIGNvbm5lY3Rpb24gaGFzIGhpdCB0aGUgdXNhZ2UgbWF4aW11bSBvciBubyB2YWxpZCBjb25uZWN0aW9uIGNvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBwb29sLgogICAgICAqCi0gICAgICogQHJldHVybiBUaGUgbGVhc3QtdXNlZCBjb25uZWN0aW9uIGZyb20gdGhlIHBvb2wuIFJldHVybnMgbnVsbCBpZiBubyB2YWxpZCBjb25uZWN0aW9uIGNvdWxkIGJlIHJldHJpZXZlZCBmcm9tIHRoZQorICAgICAqIEByZXR1cm4gYW4gYXZhaWxhYmxlIGNvbm5lY3Rpb24gZnJvbSB0aGUgcG9vbC4gUmV0dXJucyBudWxsIGlmIG5vIHZhbGlkIGNvbm5lY3Rpb24gY291bGQgYmUgcmV0cmlldmVkIGZyb20gdGhlCiAgICAgICogcG9vbC4KICAgICAgKi8KLSAgICBwcml2YXRlIHN5bmNocm9uaXplZCBDb25uZWN0aW9uIGdldExlYXN0VXNlZFZhbGlkQ29ubmVjdGlvbigpIHsKLSAgICAgICAgaW50IG1pbkluRmxpZ2h0ID0gSW50ZWdlci5NQVhfVkFMVUU7Ci0gICAgICAgIENvbm5lY3Rpb24gbGVhc3RCdXN5ID0gbnVsbDsKLSAgICAgICAgZm9yIChDb25uZWN0aW9uIGNvbm5lY3Rpb24gOiBjb25uZWN0aW9ucykgewotICAgICAgICAgICAgZmluYWwgaW50IGluRmxpZ2h0ID0gY29ubmVjdGlvbi5ib3Jyb3dlZC5nZXQoKTsKLSAgICAgICAgICAgIGlmICghY29ubmVjdGlvbi5pc0RlYWQoKSAmJiBpbkZsaWdodCA8IG1pbkluRmxpZ2h0ICYmIGluRmxpZ2h0IDwgbWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgbWluSW5GbGlnaHQgPSBpbkZsaWdodDsKLSAgICAgICAgICAgICAgICBsZWFzdEJ1c3kgPSBjb25uZWN0aW9uOworICAgIHByaXZhdGUgQ29ubmVjdGlvbiBnZXRBdmFpbGFibGVDb25uZWN0aW9uKCkgeworICAgICAgICBDb25uZWN0aW9uIGF2YWlsYWJsZSA9IG51bGw7CisKKyAgICAgICAgLy8gcmVtb3ZlIGhlYWQgb2YgcXVldWUgdW50aWwgd2UgY2FuIGJvcnJvdyBhIGNvbm5lY3Rpb24gb3IgdGhlIHF1ZXVlIGlzIGVtcHR5CisgICAgICAgIENvbm5lY3Rpb24gaGVhZCA9IGF2YWlsYWJsZUNvbm5lY3Rpb25zLnBvbGwoKTsKKyAgICAgICAgd2hpbGUgKGhlYWQgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gdHJ5IHRvIGJvcnJvdyBjb25uZWN0aW9uCisgICAgICAgICAgICBpZiAoIWhlYWQuaXNEZWFkKCkgJiYgIWhlYWQuaXNCb3Jyb3dlZCgpLmdldCgpICYmIGhlYWQuaXNCb3Jyb3dlZCgpLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gaGVhZDsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhlYWQgPSBhdmFpbGFibGVDb25uZWN0aW9ucy5wb2xsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGVhc3RCdXN5ICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIEluY3JlbWVudCBib3Jyb3cgY291bnQgYW5kIGNvbnNpZGVyIG1ha2luZyBhIG5ldyBjb25uZWN0aW9uIGlmIGxlYXN0IHVzZWQgY29ubmVjdGlvbiBoaXRzIHVzYWdlIG1heGltdW0KLSAgICAgICAgICAgIGlmIChsZWFzdEJ1c3kuYm9ycm93ZWQuaW5jcmVtZW50QW5kR2V0KCkgPj0gbWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICYmIGNvbm5lY3Rpb25zLnNpemUoKSA8IG1heFBvb2xTaXplKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkxlYXN0IHVzZWQge30gb24ge30gcmVhY2hlZCBtYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gYnV0IHBvb2wgc2l6ZSB7fSA8IG1heFBvb2xTaXplIC0gY29uc2lkZXIgbmV3IGNvbm5lY3Rpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXN0QnVzeS5nZXRDb25uZWN0aW9uSW5mbygpLCBob3N0LCBjb25uZWN0aW9ucy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGNvbnNpZGVyTmV3Q29ubmVjdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNvbm5lY3Rpb25zLnNpemUoKSA8IG1heFBvb2xTaXplKSB7Ci0gICAgICAgICAgICAvLyBBIHNhZmVndWFyZCBmb3Igc2NlbmFyaW9zIHdoZXJlIGNvbnNpZGVyYXRpb24gb2YgYSBuZXcgY29ubmVjdGlvbiB3YXMgc29tZWhvdyBub3QgdHJpZ2dlcmVkIGJ5IGFuCi0gICAgICAgICAgICAvLyBleGlzdGluZyBjb25uZWN0aW9uIGhpdHRpbmcgdGhlIHVzYWdlIG1heGltdW0KKyAgICAgICAgaWYgKGF2YWlsYWJsZSA9PSBudWxsICYmIGNvbm5lY3Rpb25zLnNpemUoKSA8IG1heFBvb2xTaXplKSB7CiAgICAgICAgICAgICBjb25zaWRlck5ld0Nvbm5lY3Rpb24oKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBsZWFzdEJ1c3k7CisgICAgICAgIHJldHVybiBhdmFpbGFibGU7CiAgICAgfQotCisgICAgCiAgICAgcHJpdmF0ZSB2b2lkIGF3YWl0QXZhaWxhYmxlQ29ubmVjdGlvbihsb25nIHRpbWVvdXQsIFRpbWVVbml0IHVuaXQpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGxvZ2dlci5kZWJ1ZygiV2FpdCB7fSB7fSBmb3IgYW4gYXZhaWxhYmxlIGNvbm5lY3Rpb24gb24ge30gd2l0aCB7fSIsIHRpbWVvdXQsIHVuaXQsIGhvc3QsIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOworICAgICAgICBsb2dDb25uZWN0aW9uUG9vbFN0YXR1cygpOwogCi0gICAgICAgIHdhaXRMb2NrLmxvY2soKTsKLSAgICAgICAgd2FpdGVyKys7CisgICAgICAgIHdhaXRlci5pbmNyZW1lbnRBbmRHZXQoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGhhc0F2YWlsYWJsZUNvbm5lY3Rpb24uYXdhaXQodGltZW91dCwgdW5pdCk7CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB3YWl0ZXItLTsKLSAgICAgICAgICAgIHdhaXRMb2NrLnVubG9jaygpOworICAgICAgICAgICAgd2FpdGVyLmRlY3JlbWVudEFuZEdldCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFubm91bmNlQWxsQXZhaWxhYmxlQ29ubmVjdGlvbigpIHsKLSAgICAgICAgaWYgKHdhaXRlciA9PSAwKQotICAgICAgICAgICAgcmV0dXJuOwotCisgICAgICAgIGxvZ2dlci5kZWJ1ZygiQW5ub3VuY2UgdG8gYWxsIGNvbm5lY3Rpb24gYXZhaWxhYmxlIG9uIHt9IiwgaG9zdCk7CisgICAgICAgIGxvZ0Nvbm5lY3Rpb25Qb29sU3RhdHVzKCk7CisgICAgICAgIAogICAgICAgICB3YWl0TG9jay5sb2NrKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBoYXNBdmFpbGFibGVDb25uZWN0aW9uLnNpZ25hbEFsbCgpOwpAQCAtNjI4LDE0ICs1NjMsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBDaGFubmVsIElEcyBtYWludGFpbmVkIGJ5IHRoZSBjb25uZWN0aW9uIHBvb2wuCi0gICAgICogQ3VycmVudGx5LCBvbmx5IHVzZWQgZm9yIHRlc3RpbmcuCi0gICAgICovCi0gICAgU2V0PFN0cmluZz4gZ2V0Q29ubmVjdGlvbklEcygpIHsKLSAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25zLnN0cmVhbSgpLm1hcChDb25uZWN0aW9uOjpnZXRDaGFubmVsSWQpLmNvbGxlY3QoQ29sbGVjdG9ycy50b1NldCgpKTsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBHZXRzIGEgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldFBvb2xJbmZvKCkgewpAQCAtNjU3LDggKzU4NCw4IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgY29ubmVjdGlvbkNvdW50ID0gY29ubmVjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgc2IuYXBwZW5kKFN5c3RlbS5saW5lU2VwYXJhdG9yKCkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKFN0cmluZy5mb3JtYXQoIkNvbm5lY3Rpb24gUG9vbCBTdGF0dXMgKHNpemU9JXMgbWF4PSVzIG1pbj0lcyB0b0NyZWF0ZT0lcyBiaW49JXMpIiwKLSAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbkNvdW50LCBtYXhQb29sU2l6ZSwgbWluUG9vbFNpemUsIHRoaXMuc2NoZWR1bGVkRm9yQ3JlYXRpb24uZ2V0KCksIGJpbi5zaXplKCkpKTsKKyAgICAgICAgICAgIHNiLmFwcGVuZChTdHJpbmcuZm9ybWF0KCJDb25uZWN0aW9uIFBvb2wgU3RhdHVzIChzaXplPSVzIGF2YWlsYWJsZT0lcyBtYXg9JXMgdG9DcmVhdGU9JXMgYmluPSVzIHdhaXRlcj0lcykiLAorICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQ291bnQsIGF2YWlsYWJsZUNvbm5lY3Rpb25zLnNpemUoKSwgbWF4UG9vbFNpemUsIHRoaXMuc2NoZWR1bGVkRm9yQ3JlYXRpb24uZ2V0KCksIGJpbi5zaXplKCksIHdhaXRlci5nZXQoKSkpOwogICAgICAgICAgICAgc2IuYXBwZW5kKFN5c3RlbS5saW5lU2VwYXJhdG9yKCkpOwogCiAgICAgICAgICAgICBhcHBlbmRDb25uZWN0aW9ucyhzYiwgY29ubmVjdGlvblRvQ2FsbG91dCwgKENvcHlPbldyaXRlQXJyYXlMaXN0PENvbm5lY3Rpb24+KSBjb25uZWN0aW9ucyk7CkBAIC02ODksNiArNjE2LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgbG9nQ29ubmVjdGlvblBvb2xTdGF0dXMoKSB7CisgICAgICAgIGlmIChsb2dnZXIuaXNUcmFjZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbG9nZ2VyLnRyYWNlKCJDb25uZWN0aW9uIFBvb2wgc3RhdHVzOiB7fSAiLCB0aGlzLmdldFBvb2xJbmZvKCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuIHBvb2xMYWJlbDsKZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9IYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4OGM1NGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9IYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7Ci0KLWltcG9ydCBpby5uZXR0eS51dGlsLkF0dHJpYnV0ZU1hcDsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuZXhjZXB0aW9uLkV4Y2VwdGlvblV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5SZXNwb25zZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5TaW1wbGVDaGFubmVsSW5ib3VuZEhhbmRsZXI7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGU7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5ldC5JbmV0U29ja2V0QWRkcmVzczsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2aWxlZ2VkQWN0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50TWFwOwotCi1pbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5TdWJqZWN0OwotaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGguY2FsbGJhY2suQ2FsbGJhY2s7Ci1pbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXI7Ci1pbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5OYW1lQ2FsbGJhY2s7Ci1pbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5QYXNzd29yZENhbGxiYWNrOwotaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGgubG9naW4uTG9naW5Db250ZXh0OwotaW1wb3J0IGphdmF4LnNlY3VyaXR5LmF1dGgubG9naW4uTG9naW5FeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VjdXJpdHkuc2FzbC5TYXNsOwotaW1wb3J0IGphdmF4LnNlY3VyaXR5LnNhc2wuU2FzbENsaWVudDsKLWltcG9ydCBqYXZheC5zZWN1cml0eS5zYXNsLlNhc2xFeGNlcHRpb247Ci0KLS8qKgotICogSG9sZGVyIGZvciBpbnRlcm5hbCBoYW5kbGVyIGNsYXNzZXMgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIGNoYW5uZWwgcGlwZWxpbmUuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1maW5hbCBjbGFzcyBIYW5kbGVyIHsKLQotICAgIC8qKgotICAgICAqIEdlbmVyaWMgU0FTTCBoYW5kbGVyIHRoYXQgd2lsbCBhdXRoZW50aWNhdGUgYWdhaW5zdCB0aGUgZ3JlbWxpbiBzZXJ2ZXIuCi0gICAgICovCi0gICAgc3RhdGljIGNsYXNzIEdyZW1saW5TYXNsQXV0aGVudGljYXRpb25IYW5kbGVyIGV4dGVuZHMgU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyPFJlc3BvbnNlTWVzc2FnZT4gaW1wbGVtZW50cyBDYWxsYmFja0hhbmRsZXIgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JlbWxpblNhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXIuY2xhc3MpOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8U3ViamVjdD4gc3ViamVjdEtleSA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJzdWJqZWN0Iik7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZUtleTxTYXNsQ2xpZW50PiBzYXNsQ2xpZW50S2V5ID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoInNhc2xjbGllbnQiKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBTQVNMX1BST1BFUlRJRVMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKSB7eyBwdXQoU2FzbC5TRVJWRVJfQVVUSCwgInRydWUiKTsgfX07Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBOVUxMX0NIQUxMRU5HRSA9IG5ldyBieXRlWzBdOwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJhc2U2NC5FbmNvZGVyIEJBU0U2NF9FTkNPREVSID0gQmFzZTY0LmdldEVuY29kZXIoKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmFzZTY0LkRlY29kZXIgQkFTRTY0X0RFQ09ERVIgPSBCYXNlNjQuZ2V0RGVjb2RlcigpOwotCi0gICAgICAgIHByaXZhdGUgZmluYWwgQXV0aFByb3BlcnRpZXMgYXV0aFByb3BzOwotCi0gICAgICAgIHB1YmxpYyBHcmVtbGluU2FzbEF1dGhlbnRpY2F0aW9uSGFuZGxlcihmaW5hbCBBdXRoUHJvcGVydGllcyBhdXRoUHJvcHMpIHsKLSAgICAgICAgICAgIHRoaXMuYXV0aFByb3BzID0gYXV0aFByb3BzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGNoYW5uZWxSZWFkMChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0LCBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBBVVRIRU5USUNBVEUgcmVzcG9uc2VzIGhlcmUuIEV2ZXJ5dGhpbmcgZWxzZSBjYW4KLSAgICAgICAgICAgIC8vIGdldCBwYXNzZWQgZG93biB0aGUgcGlwZWxpbmUKLSAgICAgICAgICAgIGlmIChyZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgPT0gUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURSkgewotICAgICAgICAgICAgICAgIGZpbmFsIEF0dHJpYnV0ZTxTYXNsQ2xpZW50PiBzYXNsQ2xpZW50ID0gKChBdHRyaWJ1dGVNYXApIGNoYW5uZWxIYW5kbGVyQ29udGV4dCkuYXR0cihzYXNsQ2xpZW50S2V5KTsKLSAgICAgICAgICAgICAgICBmaW5hbCBBdHRyaWJ1dGU8U3ViamVjdD4gc3ViamVjdCA9ICgoQXR0cmlidXRlTWFwKSBjaGFubmVsSGFuZGxlckNvbnRleHQpLmF0dHIoc3ViamVjdEtleSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciBtZXNzYWdlQnVpbGRlciA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfQVVUSEVOVElDQVRJT04pOwotICAgICAgICAgICAgICAgIC8vIEZpcnN0IHRpbWUgdGhyb3VnaCB3ZSBkb24ndCBoYXZlIGEgc2FzbCBjbGllbnQKLSAgICAgICAgICAgICAgICBpZiAoc2FzbENsaWVudC5nZXQoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YmplY3Quc2V0KGxvZ2luKCkpOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2FzbENsaWVudC5zZXQoc2FzbENsaWVudChnZXRIb3N0TmFtZShjaGFubmVsSGFuZGxlckNvbnRleHQpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFNhc2xFeGNlcHRpb24gc2FzbEV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHVzaCB0aGUgc2FzbCBlcnJvciBpbnRvIGEgZmFpbHVyZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuIHRoaXMgZW5zdXJlcyB0aGF0IHN0YW5kYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzaW5nIGZvciB0aGUgUmVzdWx0UXVldWUgaXMga2VwdC4gd2l0aG91dCB0aGlzIFNhc2xFeGNlcHRpb24gdHJhcCBhbmQgc3Vic2VxdWVudAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiB0byBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlLCB0aGUgY2xvc2UoKSBvZiB0aGUgY29ubmVjdGlvbiBtaWdodCBub3QKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2NlZWQgYXMgaXQgd2lsbCBhcHBlYXIgYXMgdGhvdWdoIHBlbmRpbmcgbWVzc2FnZXMgcmVtYWluIHByZXNlbnQgaW4gdGhlIHF1ZXVlIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdGlvbiBhbmQgdGhlIHNodXRkb3duIHdvbid0IHByb2NlZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBjbGllbnRTaWRlRXJyb3IgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQocmVzcG9uc2UuZ2V0UmVxdWVzdElkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5GT1JCSURERU4pLnN0YXR1c01lc3NhZ2Uoc2FzbEV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEhhbmRsZXJDb250ZXh0LmZpcmVDaGFubmVsUmVhZChjbGllbnRTaWRlRXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUJ1aWxkZXIuYWRkQXJnKFRva2Vucy5BUkdTX1NBU0xfTUVDSEFOSVNNLCBnZXRNZWNoYW5pc20oKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VCdWlsZGVyLmFkZEFyZyhUb2tlbnMuQVJHU19TQVNMLCBzYXNsQ2xpZW50LmdldCgpLmhhc0luaXRpYWxSZXNwb25zZSgpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVNFNjRfRU5DT0RFUi5lbmNvZGVUb1N0cmluZyhldmFsdWF0ZUNoYWxsZW5nZShzdWJqZWN0LCBzYXNsQ2xpZW50LCBOVUxMX0NIQUxMRU5HRSkpIDogbnVsbCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHNlcnZlciBzZW5kcyBiYXNlNjQgZW5jb2RlZCBzYXNsIGFzIHdlbGwgYXMgdGhlIGJ5dGUgYXJyYXkuIHRoZSBieXRlIGFycmF5IHdpbGwgZXZlbnR1YWxseSBiZQotICAgICAgICAgICAgICAgICAgICAvLyBwaGFzZWQgb3V0LCBidXQgaXMgcHJlc2VudCBub3cgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gMy4yLngKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGJhc2U2NHNhc2wgPSByZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfU0FTTCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpLmdldChUb2tlbnMuQVJHU19TQVNMKS50b1N0cmluZygpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIEJBU0U2NF9FTkNPREVSLmVuY29kZVRvU3RyaW5nKChieXRlW10pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUJ1aWxkZXIuYWRkQXJnKFRva2Vucy5BUkdTX1NBU0wsIEJBU0U2NF9FTkNPREVSLmVuY29kZVRvU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVDaGFsbGVuZ2Uoc3ViamVjdCwgc2FzbENsaWVudCwgQkFTRTY0X0RFQ09ERVIuZGVjb2RlKGJhc2U2NHNhc2wpKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjaGFubmVsSGFuZGxlckNvbnRleHQud3JpdGVBbmRGbHVzaChtZXNzYWdlQnVpbGRlci5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFNpbXBsZUNoYW5uZWxJbmJvdW5kSGFuZGxlciB3aWxsIHJlbGVhc2UgdGhlIGZyYW1lIGlmIHdlIGRvbid0IHJldGFpbiBpdCBleHBsaWNpdGx5LgotICAgICAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50VXRpbC5yZXRhaW4ocmVzcG9uc2UpOwotICAgICAgICAgICAgICAgIGNoYW5uZWxIYW5kbGVyQ29udGV4dC5maXJlQ2hhbm5lbFJlYWQocmVzcG9uc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlKGZpbmFsIENhbGxiYWNrW10gY2FsbGJhY2tzKSB7Ci0gICAgICAgICAgICBmb3IgKENhbGxiYWNrIGNhbGxiYWNrIDogY2FsbGJhY2tzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrIGluc3RhbmNlb2YgTmFtZUNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoUHJvcHMuZ2V0KEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LlVTRVJOQU1FKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKE5hbWVDYWxsYmFjayljYWxsYmFjaykuc2V0TmFtZShhdXRoUHJvcHMuZ2V0KEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LlVTRVJOQU1FKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNhbGxiYWNrIGluc3RhbmNlb2YgUGFzc3dvcmRDYWxsYmFjaykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aFByb3BzLmdldChBdXRoUHJvcGVydGllcy5Qcm9wZXJ0eS5QQVNTV09SRCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgKChQYXNzd29yZENhbGxiYWNrKWNhbGxiYWNrKS5zZXRQYXNzd29yZChhdXRoUHJvcHMuZ2V0KEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LlBBU1NXT1JEKS50b0NoYXJBcnJheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJTQVNMIGhhbmRsZXIgZ290IGEgY2FsbGJhY2sgb2YgdHlwZSAiICsgY2FsbGJhY2suZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYnl0ZVtdIGV2YWx1YXRlQ2hhbGxlbmdlKGZpbmFsIEF0dHJpYnV0ZTxTdWJqZWN0PiBzdWJqZWN0LCBmaW5hbCBBdHRyaWJ1dGU8U2FzbENsaWVudD4gc2FzbENsaWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGNoYWxsZW5nZSkgdGhyb3dzIFNhc2xFeGNlcHRpb24gewotCi0gICAgICAgICAgICBpZiAoc3ViamVjdC5nZXQoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNhc2xDbGllbnQuZ2V0KCkuZXZhbHVhdGVDaGFsbGVuZ2UoY2hhbGxlbmdlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHN1YmplY3QgdGhlbiBydW4gdGhpcyBhcyBhIHByaXZpbGVnZWQgYWN0aW9uIHVzaW5nIHRoZSBzdWJqZWN0Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN1YmplY3QuZG9BcyhzdWJqZWN0LmdldCgpLCAoUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbjxieXRlW10+KSAoKSAtPiBzYXNsQ2xpZW50LmdldCgpLmV2YWx1YXRlQ2hhbGxlbmdlKGNoYWxsZW5nZSkpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFByaXZpbGVnZWRBY3Rpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyAoU2FzbEV4Y2VwdGlvbillLmdldEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3ViamVjdCBsb2dpbigpIHRocm93cyBMb2dpbkV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBMb2dpbiBpZiB0aGUgdXNlciBwcm92aWRlZCB1cyB3aXRoIGFuIGVudHJ5IGludG8gdGhlIEpBQVMgY29uZmlnIGZpbGUKLSAgICAgICAgICAgIGlmIChhdXRoUHJvcHMuZ2V0KEF1dGhQcm9wZXJ0aWVzLlByb3BlcnR5LkpBQVNfRU5UUlkpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBMb2dpbkNvbnRleHQgbG9naW4gPSBuZXcgTG9naW5Db250ZXh0KGF1dGhQcm9wcy5nZXQoQXV0aFByb3BlcnRpZXMuUHJvcGVydHkuSkFBU19FTlRSWSkpOwotICAgICAgICAgICAgICAgIGxvZ2luLmxvZ2luKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvZ2luLmdldFN1YmplY3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTYXNsQ2xpZW50IHNhc2xDbGllbnQoZmluYWwgU3RyaW5nIGhvc3RuYW1lKSB0aHJvd3MgU2FzbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICByZXR1cm4gU2FzbC5jcmVhdGVTYXNsQ2xpZW50KG5ldyBTdHJpbmdbXSB7IGdldE1lY2hhbmlzbSgpIH0sIG51bGwsIGF1dGhQcm9wcy5nZXQoQXV0aFByb3BlcnRpZXMuUHJvcGVydHkuUFJPVE9DT0wpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSwgU0FTTF9QUk9QRVJUSUVTLCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGdldEhvc3ROYW1lKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjaGFubmVsSGFuZGxlckNvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiAoKEluZXRTb2NrZXRBZGRyZXNzKWNoYW5uZWxIYW5kbGVyQ29udGV4dC5jaGFubmVsKCkucmVtb3RlQWRkcmVzcygpKS5nZXRBZGRyZXNzKCkuZ2V0SG9zdE5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBXb3JrIG91dCB0aGUgU2FzbCBtZWNoYW5pc20gYmFzZWQgb24gdGhlIHVzZXIgc3VwcGxpZWQgcGFyYW1ldGVycy4KLSAgICAgICAgICogSWYgd2UgaGF2ZSBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB1c2UgUExBSU4gb3RoZXJ3aXNlIEdTU0FQSQotICAgICAgICAgKiBUb0RvOiBoYXZlIGdyZW1saW4tc2VydmVyIHByb3ZpZGUgdGhlIG1lY2hhbmlzbShzKSBpdCBpcyBjb25maWd1cmVkIHdpdGgsIHNvIHRoYXQgYWRkaXRpb25hbCBtZWNoYW5pc21zIGNhbgotICAgICAgICAgKiBiZSBzdXBwb3J0ZWQgaW4gdGhlIGRyaXZlciBhbmQgY29uZnVzaW5nIEdTU0V4Y2VwdGlvbiBtZXNzYWdlcyBmcm9tIHRoZSBkcml2ZXIgYXJlIGF2b2lkZWQKLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIGdldE1lY2hhbmlzbSgpIHsKLSAgICAgICAgICAgIGlmICgoYXV0aFByb3BzLmdldChBdXRoUHJvcGVydGllcy5Qcm9wZXJ0eS5VU0VSTkFNRSkgIT0gbnVsbCkgJiYKLSAgICAgICAgICAgICAgICAoYXV0aFByb3BzLmdldChBdXRoUHJvcGVydGllcy5Qcm9wZXJ0eS5QQVNTV09SRCkgIT0gbnVsbCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIlBMQUlOIjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJHU1NBUEkiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGFrZXMgYSBtYXAgb2YgcmVxdWVzdHMgcGVuZGluZyByZXNwb25zZXMgYW5kIHdyaXRlcyByZXNwb25zZXMgdG8gdGhlIHtAbGluayBSZXN1bHRRdWV1ZX0gb2YgYSByZXF1ZXN0Ci0gICAgICogYXMgdGhlIHtAbGluayBSZXNwb25zZU1lc3NhZ2V9IG9iamVjdHMgYXJlIGRlc2VyaWFsaXplZC4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgR3JlbWxpblJlc3BvbnNlSGFuZGxlciBleHRlbmRzIFNpbXBsZUNoYW5uZWxJbmJvdW5kSGFuZGxlcjxSZXNwb25zZU1lc3NhZ2U+IHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEdyZW1saW5SZXNwb25zZUhhbmRsZXIuY2xhc3MpOwotICAgICAgICBwcml2YXRlIGZpbmFsIENvbmN1cnJlbnRNYXA8VVVJRCwgUmVzdWx0UXVldWU+IHBlbmRpbmc7Ci0KLSAgICAgICAgcHVibGljIEdyZW1saW5SZXNwb25zZUhhbmRsZXIoZmluYWwgQ29uY3VycmVudE1hcDxVVUlELCBSZXN1bHRRdWV1ZT4gcGVuZGluZykgewotICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gcGVuZGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBjaGFubmVsSW5hY3RpdmUoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvLyBvY2N1cnMgd2hlbiB0aGUgc2VydmVyIHNodXRzIGRvd24gaW4gYSBkaXNvcmRlcmx5IGZhc2hpb24sIG90aGVyd2lzZSBpbiBhbiBvcmRlcmx5IHNodXRkb3duIHRoZSBzZXJ2ZXIKLSAgICAgICAgICAgIC8vIHNob3VsZCBmaXJlIG9mZiBhIGNsb3NlIG1lc3NhZ2Ugd2hpY2ggd2lsbCBwcm9wZXJseSByZWxlYXNlIHRoZSBkcml2ZXIuCi0gICAgICAgICAgICBzdXBlci5jaGFubmVsSW5hY3RpdmUoY3R4KTsKLQotICAgICAgICAgICAgLy8gdGhlIGNoYW5uZWwgaXNuJ3QgZ29pbmcgdG8gZ2V0IGFueW1vcmUgcmVzdWx0cyBhcyBpdCBpcyBjbG9zZWQgc28gcmVsZWFzZSBhbGwgcGVuZGluZyByZXF1ZXN0cwotICAgICAgICAgICAgcGVuZGluZy52YWx1ZXMoKS5mb3JFYWNoKHZhbCAtPiB2YWwubWFya0Vycm9yKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvbm5lY3Rpb24gdG8gc2VydmVyIGlzIG5vIGxvbmdlciBhY3RpdmUiKSkpOwotICAgICAgICAgICAgcGVuZGluZy5jbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGNoYW5uZWxSZWFkMChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0LCBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIHN0YXR1c0NvZGUgPSByZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCk7Ci0gICAgICAgICAgICBmaW5hbCBSZXN1bHRRdWV1ZSBxdWV1ZSA9IHBlbmRpbmcuZ2V0KHJlc3BvbnNlLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlID09IFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTIHx8IHN0YXR1c0NvZGUgPT0gUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCkgewotICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBkYXRhID0gcmVzcG9uc2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhICJyZXN1bHQiIGZyb20gdGhlIHNlcnZlciB3aGljaCBpcyBlaXRoZXIgdGhlIHJlc3VsdCBvZiBhIHNjcmlwdCBvciBhCi0gICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplZCB0cmF2ZXJzYWwKLSAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gdW5yb2xscyB0aGUgY29sbGVjdGlvbiBpbnRvIGluZGl2aWR1YWwgcmVzdWx0cyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBxdWV1ZS4KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGxpc3RUb1Vucm9sbCA9IChMaXN0PE9iamVjdD4pIGRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RUb1Vucm9sbC5mb3JFYWNoKGl0ZW0gLT4gcXVldWUuYWRkKG5ldyBSZXN1bHQoaXRlbSkpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGlzIGlzIG5vdCBhIGxpc3QgaXQgY2FuIGp1c3QgYmUgYWRkZWQgdG8gdGhlIHF1ZXVlCi0gICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZChuZXcgUmVzdWx0KHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBhICJzdWNjZXNzIiBidXQgcmVwcmVzZW50cyBubyByZXN1bHRzIG90aGVyd2lzZSBpdCBpcyBhbiBlcnJvcgotICAgICAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IFJlc3BvbnNlU3RhdHVzQ29kZS5OT19DT05URU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBhdHRyaWJ1dGVzID0gcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc3RhY2tUcmFjZSA9IGF0dHJpYnV0ZXMuY29udGFpbnNLZXkoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfU1RBQ0tfVFJBQ0UpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBhdHRyaWJ1dGVzLmdldChUb2tlbnMuU1RBVFVTX0FUVFJJQlVURV9TVEFDS19UUkFDRSkgOiBudWxsOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gZXhjZXB0aW9ucyA9IGF0dHJpYnV0ZXMuY29udGFpbnNLZXkoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRVhDRVBUSU9OUykgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMaXN0PFN0cmluZz4pIGF0dHJpYnV0ZXMuZ2V0KFRva2Vucy5TVEFUVVNfQVRUUklCVVRFX0VYQ0VQVElPTlMpIDogbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgcXVldWUubWFya0Vycm9yKG5ldyBSZXNwb25zZUV4Y2VwdGlvbihyZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCksIHJlc3BvbnNlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLCBzdGFja1RyYWNlLCBjbGVhblN0YXR1c0F0dHJpYnV0ZXMoYXR0cmlidXRlcykpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGFzIHRoaXMgaXMgYSBub24tUEFSVElBTF9DT05URU5UIGNvZGUgLSB0aGUgc3RyZWFtIGlzIGRvbmUuCi0gICAgICAgICAgICBpZiAoc3RhdHVzQ29kZSAhPSBSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5UKSB7Ci0gICAgICAgICAgICAgICAgcGVuZGluZy5yZW1vdmUocmVzcG9uc2UuZ2V0UmVxdWVzdElkKCkpLm1hcmtDb21wbGV0ZShyZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGV4Y2VwdGlvbkNhdWdodChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBUaHJvd2FibGUgY2F1c2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAgICAgLy8gaWYgdGhpcyBoYXBwZW5zIGVub3VnaCB0aW1lcyAobGlrZSB0aGUgY2xpZW50IGlzIHVuYWJsZSB0byBkZXNlcmlhbGl6ZSBhIHJlc3BvbnNlKSB0aGUgcGVuZGluZwotICAgICAgICAgICAgLy8gbWVzc2FnZXMgcXVldWUgd2lsbCBub3QgY2xlYXIuICB3b25kZXIgaWYgdGhlcmUgaXMgc29tZSB3YXkgdG8gY29wZSB3aXRoIHRoYXQuICBvZiBjb3Vyc2UsIGlmCi0gICAgICAgICAgICAvLyB0aGVyZSBhcmUgdGhhdCBtYW55IGZhaWx1cmVzIHNvbWVvbmUgd291bGQgdGFrZSBub3RpY2UgYW5kIGhvcGVmdWxseSBzdG9wIHRoZSBjbGllbnQuCi0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkIG5vdCBwcm9jZXNzIHRoZSByZXNwb25zZSIsIGNhdXNlKTsKLQotICAgICAgICAgICAgLy8gdGhlIGNoYW5uZWwgdG9vayBhbiBlcnJvciBiZWNhdXNlIG9mIHNvbWV0aGluZyBwcmV0dHkgYmFkIHNvIHJlbGVhc2UgYWxsIHRoZSBmdXR1cmVzIG91dCB0aGVyZQotICAgICAgICAgICAgcGVuZGluZy52YWx1ZXMoKS5mb3JFYWNoKHZhbCAtPiB2YWwubWFya0Vycm9yKGNhdXNlKSk7Ci0gICAgICAgICAgICBwZW5kaW5nLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgIC8vIHNlcmlhbGl6YXRpb24gZXhjZXB0aW9ucyBzaG91bGQgbm90IGNsb3NlIHRoZSBjaGFubmVsIC0gdGhhdCdzIHdvcnRoIGEgcmV0cnkKLSAgICAgICAgICAgIGlmICghSXRlcmF0b3JVdGlscy5hbnlNYXRjaChFeGNlcHRpb25VdGlscy5nZXRUaHJvd2FibGVMaXN0KGNhdXNlKS5pdGVyYXRvcigpLCB0IC0+IHQgaW5zdGFuY2VvZiBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKSkKLSAgICAgICAgICAgICAgICBpZiAoY3R4LmNoYW5uZWwoKS5pc0FjdGl2ZSgpKSBjdHguY2xvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgTWFwPFN0cmluZyxPYmplY3Q+IGNsZWFuU3RhdHVzQXR0cmlidXRlcyhmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gc3RhdHVzQXR0cmlidXRlcykgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IG0gPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGVzLmZvckVhY2goKGssdikgLT4gewotICAgICAgICAgICAgICAgIGlmICghay5lcXVhbHMoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRVhDRVBUSU9OUykgJiYgIWsuZXF1YWxzKFRva2Vucy5TVEFUVVNfQVRUUklCVVRFX1NUQUNLX1RSQUNFKSkKLSAgICAgICAgICAgICAgICAgICAgbS5wdXQoayx2KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcmV0dXJuIG07Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSGFuZHNoYWtlSW50ZXJjZXB0b3IuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSGFuZHNoYWtlSW50ZXJjZXB0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiNTc2OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0hhbmRzaGFrZUludGVyY2VwdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5GdWxsSHR0cFJlcXVlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uVW5hcnlPcGVyYXRvcjsKLQotLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB3ZWJzb2NrZXQgaGFuZHNoYWtlIGlzIGF0dGVtcHRlZCBhbmQgdGhlIGZpcnN0IHtAY29kZSBGdWxsSHR0cFJlcXVlc3R9IGlzIHNlbnQgdG8KLSAqIHRoZSBzZXJ2ZXIuIFRoZSBpbnRlcmNlcHRvciBhbGxvd3MgdGhpcyBtZXNzYWdlIHRvIGJlIG1vZGlmaWVkIGFzIG5lZWRlZCBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgc2VydmVyLgotICogSW1wbGVtZW50YXRpb25zIGFyZSBzdXBwbGllZCB0byB7QGxpbmsgQ2x1c3Rlci5CdWlsZGVyI2hhbmRzaGFrZUludGVyY2VwdG9yKEhhbmRzaGFrZUludGVyY2VwdG9yKX0uCi0gKiBAZGVwcmVjYXRlZCBBcyBvZiByZWxlYXNlIDMuNi42LCByZXBsYWNlZCBieSB7QGxpbmsgUmVxdWVzdEludGVyY2VwdG9yfS4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBpbnRlcmZhY2UgSGFuZHNoYWtlSW50ZXJjZXB0b3IgZXh0ZW5kcyBVbmFyeU9wZXJhdG9yPEZ1bGxIdHRwUmVxdWVzdD4gewotCi0gICAgLyoqCi0gICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYSB7QGxpbmsgSGFuZHNoYWtlSW50ZXJjZXB0b3J9IGFuZCBiZWhhdmVzIGFzIGEgbm8tb3AuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBIYW5kc2hha2VJbnRlcmNlcHRvciBOT19PUCA9IG8gLT4gbzsKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSG9zdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Ib3N0LmphdmEKaW5kZXggYTNhZDI2Ni4uZTcwMWQ4ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Ib3N0LmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Ib3N0LmphdmEKQEAgLTI2LDcgKzI2LDYgQEAKIGltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uOwogCkBAIC00OSw4ICs0OCw3IEBACiAgICAgSG9zdChmaW5hbCBJbmV0U29ja2V0QWRkcmVzcyBhZGRyZXNzLCBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIpIHsKICAgICAgICAgdGhpcy5jbHVzdGVyID0gY2x1c3RlcjsKICAgICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLSAgICAgICAgdGhpcy5ob3N0VXJpID0gbWFrZVVyaUZyb21BZGRyZXNzKGFkZHJlc3MsIGNsdXN0ZXIuZ2V0UGF0aCgpLCBjbHVzdGVyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MoKS5lbmFibGVTc2wsCi0gICAgICAgICAgICAgICAgY2x1c3Rlci5nZXRDaGFubmVsaXplcigpKTsKKyAgICAgICAgdGhpcy5ob3N0VXJpID0gbWFrZVVyaUZyb21BZGRyZXNzKGFkZHJlc3MsIGNsdXN0ZXIuZ2V0UGF0aCgpLCBjbHVzdGVyLmNvbm5lY3Rpb25Qb29sU2V0dGluZ3MoKS5lbmFibGVTc2wpOwogICAgICAgICBob3N0TGFiZWwgPSBTdHJpbmcuZm9ybWF0KCJIb3N0e2FkZHJlc3M9JXMsIGhvc3RVcmk9JXN9IiwgYWRkcmVzcywgaG9zdFVyaSk7CiAgICAgfQogCkBAIC0xMTMsMTMgKzExMSw4IEBACiAgICAgICAgIG1ha2VBdmFpbGFibGUoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBVUkkgbWFrZVVyaUZyb21BZGRyZXNzKGZpbmFsIEluZXRTb2NrZXRBZGRyZXNzIGFkZHksIGZpbmFsIFN0cmluZyBwYXRoLCBmaW5hbCBib29sZWFuIHNzbCwgZmluYWwgU3RyaW5nIGNoYW5uZWxpemVyQ2xhc3MpIHsKLSAgICAgICAgZmluYWwgQ2hhbm5lbGl6ZXIgY2hhbm5lbGl6ZXI7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjaGFubmVsaXplciA9IChDaGFubmVsaXplcikgQ2xhc3MuZm9yTmFtZShjaGFubmVsaXplckNsYXNzKS5uZXdJbnN0YW5jZSgpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoIkludmFsaWQgQ2hhbm5lbGl6ZXIgaW5zdGFuY2U6ICVzIiwgY2hhbm5lbGl6ZXJDbGFzcykpOwotICAgICAgICB9CisgICAgcHJpdmF0ZSBzdGF0aWMgVVJJIG1ha2VVcmlGcm9tQWRkcmVzcyhmaW5hbCBJbmV0U29ja2V0QWRkcmVzcyBhZGR5LCBmaW5hbCBTdHJpbmcgcGF0aCwgZmluYWwgYm9vbGVhbiBzc2wpIHsKKyAgICAgICAgZmluYWwgQ2hhbm5lbGl6ZXIgY2hhbm5lbGl6ZXIgPSBuZXcgQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyKCk7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzY2hlbWUgPSBjaGFubmVsaXplci5nZXRTY2hlbWUoc3NsKTsKQEAgLTEzNCwxMyArMTI3LDEzIEBACiAgICAgICAgIHJldHVybiBob3N0TGFiZWw7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgTGlzdGVuZXIgewotICAgICAgICBwdWJsaWMgdm9pZCBvbkF2YWlsYWJsZShmaW5hbCBIb3N0IGhvc3QpOworICAgIHB1YmxpYyBpbnRlcmZhY2UgTGlzdGVuZXIgeworICAgICAgICB2b2lkIG9uQXZhaWxhYmxlKGZpbmFsIEhvc3QgaG9zdCk7CiAKLSAgICAgICAgcHVibGljIHZvaWQgb25VbmF2YWlsYWJsZShmaW5hbCBIb3N0IGhvc3QpOworICAgICAgICB2b2lkIG9uVW5hdmFpbGFibGUoZmluYWwgSG9zdCBob3N0KTsKIAotICAgICAgICBwdWJsaWMgdm9pZCBvbk5ldyhmaW5hbCBIb3N0IGhvc3QpOworICAgICAgICB2b2lkIG9uTmV3KGZpbmFsIEhvc3QgaG9zdCk7CiAKLSAgICAgICAgcHVibGljIHZvaWQgb25SZW1vdmUoZmluYWwgSG9zdCBob3N0KTsKKyAgICAgICAgdm9pZCBvblJlbW92ZShmaW5hbCBIb3N0IGhvc3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSHR0cFJlcXVlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSHR0cFJlcXVlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTMyNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9IdHRwUmVxdWVzdC5qYXZhCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKKworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIEh0dHBSZXF1ZXN0IHJlcHJlc2VudHMgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhY3R1YWwgcmVxdWVzdCB0byB0aGUgcmVtb3RlIGVuZHBvaW50LiBJdCB3aWxsIGJlCisgKiBwYXNzZWQgdG8gZGlmZmVyZW50IHtAbGluayBSZXF1ZXN0SW50ZXJjZXB0b3J9IHRoYXQgY2FuIHVwZGF0ZSBpdHMgdmFsdWVzLiBUaGUgYm9keSBjYW4gYmUgYW55dGhpbmcgYXMgdGhlCisgKiBpbnRlcmNlcHRvciBtYXkgY2hhbmdlIHdoYXQgdGhlIHBheWxvYWQgaXMuIEFsc28gY29udGFpbnMgc29tZSBjb252ZW5pZW5jZSBTdHJpbmdzIGZvciBjb21tb24gSFRUUCBoZWFkZXIga2V5IGFuZAorICogdmFsdWVzIGFuZCBIVFRQIG1ldGhvZHMuCisgKi8KK3B1YmxpYyBjbGFzcyBIdHRwUmVxdWVzdCB7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBIZWFkZXJzIHsKKyAgICAgICAgLy8gQWRkIGFzIG5lZWRlZC4gSGVhZGVycyBhcmUgY2FzZS1pbnNlbnNpdGl2ZTsgbG93ZXIgY2FzZSBmb3Igbm93IHRvIG1hdGNoIE5ldHR5LgorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ0NFUFQgPSAiYWNjZXB0IjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNDRVBUX0VOQ09ESU5HID0gImFjY2VwdC1lbmNvZGluZyI7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFVVEhPUklaQVRJT04gPSAiYXV0aG9yaXphdGlvbiI7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRFTlRfVFlQRSA9ICJjb250ZW50LXR5cGUiOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05URU5UX0xFTkdUSCA9ICJjb250ZW50LWxlbmd0aCI7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkxBVEUgPSAiZGVmbGF0ZSI7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhPU1QgPSAiaG9zdCI7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFVTRVJfQUdFTlQgPSAidXNlci1hZ2VudCI7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBNZXRob2QgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHRVQgPSAiR0VUIjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE9TVCA9ICJQT1NUIjsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVyczsKKyAgICBwcml2YXRlIE9iamVjdCBib2R5OworICAgIHByaXZhdGUgVVJJIHVyaTsKKyAgICBwcml2YXRlIFN0cmluZyBtZXRob2Q7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciB0aGF0IGRlZmF1bHRzIHRoZSBtZXRob2QgdG8ge0Bjb2RlIFBPU1R9LgorICAgICAqLworICAgIHB1YmxpYyBIdHRwUmVxdWVzdChmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcnMsIGZpbmFsIE9iamVjdCBib2R5LCBmaW5hbCBVUkkgdXJpKSB7CisgICAgICAgIHRoaXMoaGVhZGVycywgYm9keSwgdXJpLCBNZXRob2QuUE9TVCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRnVsbCBjb25zdHJ1Y3Rvci4KKyAgICAgKi8KKyAgICBwdWJsaWMgSHR0cFJlcXVlc3QoZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJzLCBmaW5hbCBPYmplY3QgYm9keSwgZmluYWwgVVJJIHVyaSwgZmluYWwgU3RyaW5nIG1ldGhvZCkgeworICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzOworICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICB0aGlzLnVyaSA9IHVyaTsKKyAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBoZWFkZXJzIG9mIHRoZSByZXF1ZXN0LgorICAgICAqCisgICAgICogQHJldHVybiBhIG1hcCBvZiBoZWFkZXJzLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRpcmVjdGx5IHVwZGF0ZSB0aGUgZW50cmllcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJzKCkgeworICAgICAgICByZXR1cm4gaGVhZGVyczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGFuIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGJvZHkuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRCb2R5KCkgeworICAgICAgICByZXR1cm4gYm9keTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIFVSSSBvZiB0aGUgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHJlcXVlc3QgVVJJLgorICAgICAqLworICAgIHB1YmxpYyBVUkkgZ2V0VXJpKCkgeworICAgICAgICByZXR1cm4gdXJpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgSFRUUCBtZXRob2Qgb2YgdGhlIHJlcXVlc3QuIFRoZSBzdGFuZGFyZCB7QGNvZGUgL2dyZW1saW59IGVuZHBvaW50IG9ubHkgc3VwcG9ydHMge0Bjb2RlIFBPU1R9LgorICAgICAqCisgICAgICogQHJldHVybiB0aGUgSFRUUCBtZXRob2QuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRNZXRob2QoKSB7CisgICAgICAgIHJldHVybiBtZXRob2Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBIVFRQIGJvZHkgb2YgdGhlIHJlcXVlc3QuIER1cmluZyBwcm9jZXNzaW5nLCB0aGUgYm9keSBjYW4gYmUgYW55IHR5cGUgYnV0IHRoZSBmaW5hbCBpbnRlcmNlcHRvciBtdXN0IHNldAorICAgICAqIHRoZSBib2R5IHRvIGEge0Bjb2RlIGJ5dGVbXX0uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoaXMgSHR0cFJlcXVlc3QgZm9yIG1ldGhvZCBjaGFpbmluZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgSHR0cFJlcXVlc3Qgc2V0Qm9keShmaW5hbCBPYmplY3QgYm9keSkgeworICAgICAgICB0aGlzLmJvZHkgPSBib2R5OworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0LgorICAgICAqCisgICAgICogQHJldHVybiB0aGlzIEh0dHBSZXF1ZXN0IGZvciBtZXRob2QgY2hhaW5pbmcuCisgICAgICovCisgICAgcHVibGljIEh0dHBSZXF1ZXN0IHNldE1ldGhvZChmaW5hbCBTdHJpbmcgbWV0aG9kKSB7CisgICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIFVSSSBvZiB0aGUgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhpcyBIdHRwUmVxdWVzdCBmb3IgbWV0aG9kIGNoYWluaW5nLgorICAgICAqLworICAgIHB1YmxpYyBIdHRwUmVxdWVzdCBzZXRVcmkoZmluYWwgVVJJIHVyaSkgeworICAgICAgICB0aGlzLnVyaSA9IHVyaTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZW1vdGVUcmFuc2FjdGlvbi5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZW1vdGVUcmFuc2FjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NTA1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlbW90ZVRyYW5zYWN0aW9uLmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVHJhbnNhY3Rpb247CisKKy8qKgorICogQSB7QGxpbmsgVHJhbnNhY3Rpb259IGludGVyZmFjZSBmb3IgcmVtb3RlIGNvbm5lY3Rpb25zIHRoYXQgY29tYmluZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgc3luY2hyb25vdXMgc3VibWlzc2lvbi4KKyAqCisgKiBOb3RlOiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBpbnRlcmZhY2UgYXJlIGdlbmVyYWxseSA8Yj5OT1Q8L2I+IHRocmVhZC1zYWZlLgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlbW90ZVRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24sIFJlcXVlc3RTdWJtaXR0ZXIgeworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNlcnZlci1nZW5lcmF0ZWQgdHJhbnNhY3Rpb24gSUQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgdHJhbnNhY3Rpb24gaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkIHZpYQorICAgICAqIHtAbGluayAjYmVnaW4oQ2xhc3MpfS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHRyYW5zYWN0aW9uIElELCBvciBudWxsIGlmIG5vdCB5ZXQgYmVndW4KKyAgICAgKi8KKyAgICBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25JZCgpOworfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXF1ZXN0SW50ZXJjZXB0b3IuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVxdWVzdEludGVyY2VwdG9yLmphdmEKaW5kZXggOTg3OTg5ZC4uNzQwNTUzMCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXF1ZXN0SW50ZXJjZXB0b3IuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlcXVlc3RJbnRlcmNlcHRvci5qYXZhCkBAIC0xOCwxOSArMTgsMTQgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKIAotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5GdWxsSHR0cFJlcXVlc3Q7Ci0KIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uVW5hcnlPcGVyYXRvcjsKIAogLyoqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhIHtAY29kZSBGdWxsSHR0cFJlcXVlc3R9IGNvbnN0cnVjdGVkIGFuZCBhbGxvdyBpdCB0byBiZSBtb2RpZmllZCBhcyBuZWVkZWQgYmVmb3JlIGl0IGlzCi0gKiBzZW50IHRvIHRoZSBzZXJ2ZXIuIEltcGxlbWVudGF0aW9ucyBhcmUgc3VwcGxpZWQgdG8ge0BsaW5rIENsdXN0ZXIuQnVpbGRlciNyZXF1ZXN0SW50ZXJjZXB0b3IoUmVxdWVzdEludGVyY2VwdG9yKX0uCi0gKiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpcyBkZXBlbmRlbnQgb24gdGhlIHtAbGluayBDaGFubmVsaXplcn0gaW1wbGVtZW50YXRpb24uCisgKiBJbnRlcmNlcHRvcnMgYXJlIHJ1biBhcyBhIGxpc3QgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIHRoZSBIVFRQIHJlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci4gVGhlIGZpcnN0CisgKiBpbnRlcmNlcHRvciB3aWxsIGJlIHByb3ZpZGVkIHdpdGggYSB7QGxpbmsgSHR0cFJlcXVlc3R9IHRoYXQgaG9sZHMgYQorICoge0BsaW5rIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlfSBpbiB0aGUgYm9keS4gVGhlIGZpbmFsIGludGVyY2VwdG9yIHNob3VsZCBjb250YWluIGEKKyAqIHtAY29kZSBieXRlW119IGluIHRoZSBib2R5LgogICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmNlcHRvciBleHRlbmRzIFVuYXJ5T3BlcmF0b3I8RnVsbEh0dHBSZXF1ZXN0PiB7CitwdWJsaWMgaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmNlcHRvciBleHRlbmRzIFVuYXJ5T3BlcmF0b3I8SHR0cFJlcXVlc3Q+IHsKIAotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGEge0BsaW5rIFJlcXVlc3RJbnRlcmNlcHRvcn0gYW5kIGJlaGF2ZXMgYXMgYSBuby1vcC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFJlcXVlc3RJbnRlcmNlcHRvciBOT19PUCA9IG8gLT4gbzsKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVxdWVzdE9wdGlvbnMuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVxdWVzdE9wdGlvbnMuamF2YQppbmRleCA5OTJiNTY4Li5jNTFmMmI4IDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlcXVlc3RPcHRpb25zLmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXF1ZXN0T3B0aW9ucy5qYXZhCkBAIC0xOCwyMiArMTgsMjEgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5CeXRlY29kZUhlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKIAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIAogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zLkFSR1NfQkFUQ0hfU0laRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2Vucy5CVUxLX1JFU1VMVFM7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuQVJHU19FVkFMX1RJTUVPVVQ7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuQVJHU19HOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zLkFSR1NfTEFOR1VBR0U7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuQVJHU19NQVRFUklBTElaRV9QUk9QRVJUSUVTOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zLkFSR1NfVVNFUl9BR0VOVDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2Vucy5SRVFVRVNUX0lEOwogCiAvKioKICAqIE9wdGlvbnMgdGhhdCBjYW4gYmUgc3VwcGxpZWQgb24gYSBwZXIgcmVxdWVzdCBiYXNpcy4KQEAgLTQ0LDMyICs0MywyOCBAQAogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBFTVBUWSA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkuY3JlYXRlKCk7CiAKLSAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsU3RyaW5nPiBhbGlhc2VzOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgcHJpdmF0ZSBmaW5hbCBJbnRlZ2VyIGJhdGNoU2l6ZTsKICAgICBwcml2YXRlIGZpbmFsIExvbmcgdGltZW91dDsKLSAgICBwcml2YXRlIGZpbmFsIFVVSUQgb3ZlcnJpZGVSZXF1ZXN0SWQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXNlckFnZW50OwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGxhbmd1YWdlOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1hdGVyaWFsaXplUHJvcGVydGllczsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBidWxrUmVzdWx0czsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB0cmFuc2FjdGlvbklkOwogCiAgICAgcHJpdmF0ZSBSZXF1ZXN0T3B0aW9ucyhmaW5hbCBCdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgdGhpcy5hbGlhc2VzID0gYnVpbGRlci5hbGlhc2VzOworICAgICAgICB0aGlzLmdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UgPSBidWlsZGVyLmdyYXBoT3JUcmF2ZXJzYWxTb3VyY2U7CiAgICAgICAgIHRoaXMucGFyYW1ldGVycyA9IGJ1aWxkZXIucGFyYW1ldGVyczsKICAgICAgICAgdGhpcy5iYXRjaFNpemUgPSBidWlsZGVyLmJhdGNoU2l6ZTsKICAgICAgICAgdGhpcy50aW1lb3V0ID0gYnVpbGRlci50aW1lb3V0OwotICAgICAgICB0aGlzLm92ZXJyaWRlUmVxdWVzdElkID0gYnVpbGRlci5vdmVycmlkZVJlcXVlc3RJZDsKLSAgICAgICAgdGhpcy51c2VyQWdlbnQgPSBidWlsZGVyLnVzZXJBZ2VudDsKICAgICAgICAgdGhpcy5sYW5ndWFnZSA9IGJ1aWxkZXIubGFuZ3VhZ2U7CiAgICAgICAgIHRoaXMubWF0ZXJpYWxpemVQcm9wZXJ0aWVzID0gYnVpbGRlci5tYXRlcmlhbGl6ZVByb3BlcnRpZXM7CisgICAgICAgIHRoaXMuYnVsa1Jlc3VsdHMgPSBidWlsZGVyLmJ1bGtSZXN1bHRzOworICAgICAgICB0aGlzLnRyYW5zYWN0aW9uSWQgPSBidWlsZGVyLnRyYW5zYWN0aW9uSWQ7CiAgICAgfQogCi0gICAgcHVibGljIE9wdGlvbmFsPFVVSUQ+IGdldE92ZXJyaWRlUmVxdWVzdElkKCkgewotICAgICAgICByZXR1cm4gT3B0aW9uYWwub2ZOdWxsYWJsZShvdmVycmlkZVJlcXVlc3RJZCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9wdGlvbmFsPE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldEFsaWFzZXMoKSB7Ci0gICAgICAgIHJldHVybiBPcHRpb25hbC5vZk51bGxhYmxlKGFsaWFzZXMpOworICAgIHB1YmxpYyBPcHRpb25hbDxTdHJpbmc+IGdldEcoKSB7CisgICAgICAgIHJldHVybiBPcHRpb25hbC5vZk51bGxhYmxlKGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpOwogICAgIH0KIAogICAgIHB1YmxpYyBPcHRpb25hbDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRQYXJhbWV0ZXJzKCkgewpAQCAtODQsNTkgKzc5LDgxIEBACiAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZk51bGxhYmxlKHRpbWVvdXQpOwogICAgIH0KIAotICAgIHB1YmxpYyBPcHRpb25hbDxTdHJpbmc+IGdldFVzZXJBZ2VudCgpIHsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUodXNlckFnZW50KTsKLSAgICB9Ci0KICAgICBwdWJsaWMgT3B0aW9uYWw8U3RyaW5nPiBnZXRMYW5ndWFnZSgpIHsKICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUobGFuZ3VhZ2UpOwogICAgIH0KIAogICAgIHB1YmxpYyBPcHRpb25hbDxTdHJpbmc+IGdldE1hdGVyaWFsaXplUHJvcGVydGllcygpIHsgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUobWF0ZXJpYWxpemVQcm9wZXJ0aWVzKTsgfQogCisgICAgcHVibGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0QnVsa1Jlc3VsdHMoKSB7IHJldHVybiBPcHRpb25hbC5vZk51bGxhYmxlKGJ1bGtSZXN1bHRzKTsgfQorCisgICAgcHVibGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0VHJhbnNhY3Rpb25JZCgpIHsgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUodHJhbnNhY3Rpb25JZCk7IH0KKwogICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBidWlsZCgpIHsKICAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKCk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBSZXF1ZXN0T3B0aW9ucyBnZXRSZXF1ZXN0T3B0aW9ucyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICBmaW5hbCBJdGVyYXRvcjxPcHRpb25zU3RyYXRlZ3k+IGl0dHkgPSBCeXRlY29kZUhlbHBlci5maW5kU3RyYXRlZ2llcyhieXRlY29kZSwgT3B0aW9uc1N0cmF0ZWd5LmNsYXNzKTsKLSAgICAgICAgZmluYWwgQnVpbGRlciBidWlsZGVyID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKTsKKyAgICBwdWJsaWMgc3RhdGljIFJlcXVlc3RPcHRpb25zIGdldFJlcXVlc3RPcHRpb25zKGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKSB7CisgICAgICAgIGZpbmFsIEl0ZXJhdG9yPE9wdGlvbnNTdHJhdGVneT4gaXR0eSA9IGdyZW1saW5MYW5nLmdldE9wdGlvbnNTdHJhdGVnaWVzKCkuaXRlcmF0b3IoKTsKKyAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMuQnVpbGRlciBidWlsZGVyID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKTsKICAgICAgICAgd2hpbGUgKGl0dHkuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICBmaW5hbCBPcHRpb25zU3RyYXRlZ3kgb3B0aW9uc1N0cmF0ZWd5ID0gaXR0eS5uZXh0KCk7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gb3B0aW9ucyA9IG9wdGlvbnNTdHJhdGVneS5nZXRPcHRpb25zKCk7CisgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG9wdGlvbnMgPSBvcHRpb25zU3RyYXRlZ3kuZ2V0T3B0aW9ucygpOwogICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnNLZXkoQVJHU19FVkFMX1RJTUVPVVQpKQogICAgICAgICAgICAgICAgIGJ1aWxkZXIudGltZW91dCgoKE51bWJlcikgb3B0aW9ucy5nZXQoQVJHU19FVkFMX1RJTUVPVVQpKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgICAgICBpZiAob3B0aW9ucy5jb250YWluc0tleShSRVFVRVNUX0lEKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLm92ZXJyaWRlUmVxdWVzdElkKChVVUlEKSBvcHRpb25zLmdldChSRVFVRVNUX0lEKSk7CiAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb250YWluc0tleShBUkdTX0JBVENIX1NJWkUpKQogICAgICAgICAgICAgICAgIGJ1aWxkZXIuYmF0Y2hTaXplKCgoTnVtYmVyKSBvcHRpb25zLmdldChBUkdTX0JBVENIX1NJWkUpKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zS2V5KEFSR1NfVVNFUl9BR0VOVCkpCi0gICAgICAgICAgICAgICAgYnVpbGRlci51c2VyQWdlbnQoKFN0cmluZykgb3B0aW9ucy5nZXQoQVJHU19VU0VSX0FHRU5UKSk7CiAgICAgICAgICAgICBpZiAob3B0aW9ucy5jb250YWluc0tleShBUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpKQogICAgICAgICAgICAgICAgIGJ1aWxkZXIubWF0ZXJpYWxpemVQcm9wZXJ0aWVzKChTdHJpbmcpIG9wdGlvbnMuZ2V0KEFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUykpOworICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnNLZXkoQVJHU19MQU5HVUFHRSkpCisgICAgICAgICAgICAgICAgYnVpbGRlci5sYW5ndWFnZSgoU3RyaW5nKSBvcHRpb25zLmdldChBUkdTX0xBTkdVQUdFKSk7CisgICAgICAgICAgICBpZiAob3B0aW9ucy5jb250YWluc0tleShCVUxLX1JFU1VMVFMpKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYnVsa1Jlc3VsdHMoKGJvb2xlYW4pIG9wdGlvbnMuZ2V0KEJVTEtfUkVTVUxUUykpOworICAgICAgICB9CisgICAgICAgIC8vIHJlcXVlc3QgdGhlIHNlcnZlciB0byBidWxrIHJlc3VsdHMgYnkgZGVmYXVsdCB3aGVuIHVzaW5nIERSQyB0aHJvdWdoIHJlcXVlc3Qgb3B0aW9ucworICAgICAgICBpZiAoYnVpbGRlci5idWxrUmVzdWx0cyA9PSBudWxsKQorICAgICAgICAgICAgYnVpbGRlci5idWxrUmVzdWx0cyh0cnVlKTsKKworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtZXRlcnMgPSBncmVtbGluTGFuZy5nZXRQYXJhbWV0ZXJzKCk7CisgICAgICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwgJiYgIXBhcmFtZXRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmZvckVhY2goYnVpbGRlcjo6YWRkUGFyYW1ldGVyKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYnVpbGRlci5jcmVhdGUoKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBwcml2YXRlIE1hcDxTdHJpbmcsU3RyaW5nPiBhbGlhc2VzID0gbnVsbDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSA9IG51bGw7CiAgICAgICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbWV0ZXJzID0gbnVsbDsKICAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIGJhdGNoU2l6ZSA9IG51bGw7CiAgICAgICAgIHByaXZhdGUgTG9uZyB0aW1lb3V0ID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBVVUlEIG92ZXJyaWRlUmVxdWVzdElkID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdXNlckFnZW50ID0gbnVsbDsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzID0gbnVsbDsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbGFuZ3VhZ2UgPSBudWxsOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uID0gZmFsc2U7CisgICAgICAgIHByaXZhdGUgU3RyaW5nIGJ1bGtSZXN1bHRzID0gbnVsbDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdHJhbnNhY3Rpb25JZCA9IG51bGw7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQnVpbGRlcn0gcG9wdWxhdGVkIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCB7QGxpbmsgUmVxdWVzdE9wdGlvbnN9LgorICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBjb3B5IGZyb20KKyAgICAgICAgICogQHJldHVybiBhIHtAbGluayBCdWlsZGVyfSB3aXRoIHRoZSBjb3BpZWQgb3B0aW9ucworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGZyb20oZmluYWwgUmVxdWVzdE9wdGlvbnMgb3B0aW9ucykgeworICAgICAgICAgICAgZmluYWwgQnVpbGRlciBidWlsZGVyID0gYnVpbGQoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSA9IG9wdGlvbnMuZ3JhcGhPclRyYXZlcnNhbFNvdXJjZTsKKyAgICAgICAgICAgIGJ1aWxkZXIucGFyYW1ldGVycyA9IG9wdGlvbnMucGFyYW1ldGVyczsKKyAgICAgICAgICAgIGJ1aWxkZXIuYmF0Y2hTaXplID0gb3B0aW9ucy5iYXRjaFNpemU7CisgICAgICAgICAgICBidWlsZGVyLnRpbWVvdXQgPSBvcHRpb25zLnRpbWVvdXQ7CisgICAgICAgICAgICBidWlsZGVyLm1hdGVyaWFsaXplUHJvcGVydGllcyA9IG9wdGlvbnMubWF0ZXJpYWxpemVQcm9wZXJ0aWVzOworICAgICAgICAgICAgYnVpbGRlci5sYW5ndWFnZSA9IG9wdGlvbnMubGFuZ3VhZ2U7CisgICAgICAgICAgICBidWlsZGVyLmJ1bGtSZXN1bHRzID0gb3B0aW9ucy5idWxrUmVzdWx0czsKKyAgICAgICAgICAgIGJ1aWxkZXIudHJhbnNhY3Rpb25JZCA9IG9wdGlvbnMudHJhbnNhY3Rpb25JZDsKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyOworICAgICAgICB9CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBhbGlhc2VzIHRvIHNldCBvbiB0aGUgcmVxdWVzdC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEFsaWFzKGZpbmFsIFN0cmluZyBhbGlhc05hbWUsIGZpbmFsIFN0cmluZyBhY3R1YWxOYW1lKSB7Ci0gICAgICAgICAgICBpZiAobnVsbCA9PSBhbGlhc2VzKQotICAgICAgICAgICAgICAgIGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0KLSAgICAgICAgICAgIGFsaWFzZXMucHV0KGFsaWFzTmFtZSwgYWN0dWFsTmFtZSk7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEcoZmluYWwgU3RyaW5nIGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UpIHsKKyAgICAgICAgICAgIHRoaXMuZ3JhcGhPclRyYXZlcnNhbFNvdXJjZSA9IGdyYXBoT3JUcmF2ZXJzYWxTb3VyY2U7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCkBAIC0xNDcsMTUgKzE2NCwxNSBAQAogICAgICAgICAgICAgaWYgKG51bGwgPT0gcGFyYW1ldGVycykKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8PigpOwogCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLnB1dChuYW1lLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKEFSR1NfRy5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmdyYXBoT3JUcmF2ZXJzYWxTb3VyY2UgPSAoU3RyaW5nKSB2YWx1ZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvKioKLSAgICAgICAgICogT3ZlcnJpZGVzIHRoZSBpZGVudGlmaWVyIHRvIGJlIHNlbnQgb24gdGhlIHJlcXVlc3QuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBvdmVycmlkZVJlcXVlc3RJZChmaW5hbCBVVUlEIG92ZXJyaWRlUmVxdWVzdElkKSB7Ci0gICAgICAgICAgICB0aGlzLm92ZXJyaWRlUmVxdWVzdElkID0gb3ZlcnJpZGVSZXF1ZXN0SWQ7CisgICAgICAgICAgICBpZiAoQVJHU19MQU5HVUFHRS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlID0gKFN0cmluZykgdmFsdWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBhcmFtZXRlcnMucHV0KG5hbWUsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKQEAgLTE3OSwxNCArMTk2LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBTZXRzIHRoZSB1c2VyQWdlbnQgaWRlbnRpZmllciB0byBiZSBzZW50IG9uIHRoZSByZXF1ZXN0LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgdXNlckFnZW50KGZpbmFsIFN0cmluZyB1c2VyQWdlbnQpIHsKLSAgICAgICAgICAgIHRoaXMudXNlckFnZW50ID0gdXNlckFnZW50OwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKICAgICAgICAgICogU2V0cyB0aGUgbGFuZ3VhZ2UgaWRlbnRpZmllciB0byBiZSBzZW50IG9uIHRoZSByZXF1ZXN0LgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1aWxkZXIgbGFuZ3VhZ2UoZmluYWwgU3RyaW5nIGxhbmd1YWdlKSB7CkBAIC0yMDIsOSArMjExLDI0IEBACiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSBidWxrUmVzdWx0cyBmbGFnIHRvIGJlIHNlbnQgb24gdGhlIHJlcXVlc3QuIEEgdmFsdWUgb2YgdHVybiB3aWxsIGVuYWJsZSBzZXJ2ZXIgdG8gYnVsayByZXN1bHRzLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYnVsa1Jlc3VsdHMoZmluYWwgYm9vbGVhbiBidWxraW5nKSB7CisgICAgICAgICAgICB0aGlzLmJ1bGtSZXN1bHRzID0gU3RyaW5nLnZhbHVlT2YoYnVsa2luZyk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIHRoZSB0cmFuc2FjdGlvbklkIHZhbHVlIHRvIGJlIHNlbnQgb24gdGhlIHJlcXVlc3QuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQnVpbGRlciB0cmFuc2FjdGlvbklkKGZpbmFsIFN0cmluZyBpZCkgeworICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbklkID0gaWQ7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCiAgICAgICAgIHB1YmxpYyBSZXF1ZXN0T3B0aW9ucyBjcmVhdGUoKSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IFJlcXVlc3RPcHRpb25zKHRoaXMpOwogICAgICAgICB9Ci0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlcXVlc3RTdWJtaXR0ZXIuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVxdWVzdFN1Ym1pdHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZmM4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlcXVlc3RTdWJtaXR0ZXIuamF2YQpAQCAtMCwwICsxLDYxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIERlZmluZXMgdGhlIHN5bmNocm9ub3VzIHJlcXVlc3Qgc3VibWlzc2lvbiBjb250cmFjdCBmb3IgR3JlbWxpbiByZXF1ZXN0cy4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgYm90aCB7QGxpbmsgQ2xpZW50fSBhbmQgdHJhbnNhY3Rpb24gY2xhc3NlcyB0byBlbnN1cmUgYSBjb25zaXN0ZW50IEFQSSBmb3IKKyAqIHN1Ym1pdHRpbmcgR3JlbWxpbiBzY3JpcHRzLiBUaGUgc3luY2hyb25vdXMgbmF0dXJlIG9mIHRoZXNlIG1ldGhvZHMgbWVhbnMgdGhleSBibG9jayB1bnRpbCB0aGUgcmVxdWVzdCBjb21wbGV0ZXMuCisgKiA8cD4KKyAqIEZvciBhc3luY2hyb25vdXMgc3VibWlzc2lvbiwgc2VlIHtAbGluayBSZXF1ZXN0U3VibWl0dGVyQXN5bmN9LgorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlcXVlc3RTdWJtaXR0ZXIgeworCisgICAgLyoqCisgICAgICogU3VibWl0cyBhIEdyZW1saW4gc2NyaXB0IGFuZCBibG9ja3MgdW50aWwgdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorICAgICAqCisgICAgICogQHBhcmFtIGdyZW1saW4gdGhlIEdyZW1saW4gc2NyaXB0IHRvIGV4ZWN1dGUKKyAgICAgKiBAcmV0dXJuIHRoZSByZXN1bHRzIG9mIHRoZSBzY3JpcHQgZXhlY3V0aW9uCisgICAgICovCisgICAgUmVzdWx0U2V0IHN1Ym1pdChTdHJpbmcgZ3JlbWxpbik7CisKKyAgICAvKioKKyAgICAgKiBTdWJtaXRzIGEgR3JlbWxpbiBzY3JpcHQgd2l0aCBib3VuZCBwYXJhbWV0ZXJzIGFuZCBibG9ja3MgdW50aWwgdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorICAgICAqIDxwPgorICAgICAqIFByZWZlciB0aGlzIG1ldGhvZCBvdmVyIHN0cmluZyBjb25jYXRlbmF0aW9uIHdoZW4gZXhlY3V0aW5nIHNjcmlwdHMgd2l0aCB2YXJpYWJsZQorICAgICAqIGFyZ3VtZW50cywgYXMgcGFyYW1ldGVyaXplZCBzY3JpcHRzIHBlcmZvcm0gYmV0dGVyLgorICAgICAqCisgICAgICogQHBhcmFtIGdyZW1saW4gdGhlIEdyZW1saW4gc2NyaXB0IHRvIGV4ZWN1dGUKKyAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBhIG1hcCBvZiBwYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBib3VuZCB0byB0aGUgc2NyaXB0IG9uIGV4ZWN1dGlvbgorICAgICAqIEByZXR1cm4gdGhlIHJlc3VsdHMgb2YgdGhlIHNjcmlwdCBleGVjdXRpb24KKyAgICAgKi8KKyAgICBSZXN1bHRTZXQgc3VibWl0KFN0cmluZyBncmVtbGluLCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtZXRlcnMpOworCisgICAgLyoqCisgICAgICogU3VibWl0cyBhIEdyZW1saW4gc2NyaXB0IHdpdGggcmVxdWVzdCBvcHRpb25zIGFuZCBibG9ja3MgdW50aWwgdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorICAgICAqCisgICAgICogQHBhcmFtIGdyZW1saW4gdGhlIEdyZW1saW4gc2NyaXB0IHRvIGV4ZWN1dGUKKyAgICAgKiBAcGFyYW0gb3B0aW9ucyB0aGUgb3B0aW9ucyB0byBzdXBwbHkgZm9yIHRoaXMgcmVxdWVzdAorICAgICAqIEByZXR1cm4gdGhlIHJlc3VsdHMgb2YgdGhlIHNjcmlwdCBleGVjdXRpb24KKyAgICAgKi8KKyAgICBSZXN1bHRTZXQgc3VibWl0KFN0cmluZyBncmVtbGluLCBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zKTsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVxdWVzdFN1Ym1pdHRlckFzeW5jLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlcXVlc3RTdWJtaXR0ZXJBc3luYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGVkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1JlcXVlc3RTdWJtaXR0ZXJBc3luYy5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7CisKKy8qKgorICogRGVmaW5lcyB0aGUgYXN5bmNocm9ub3VzIHJlcXVlc3Qgc3VibWlzc2lvbiBjb250cmFjdCBmb3IgR3JlbWxpbiByZXF1ZXN0cy4KKyAqIDxwPgorICogVGhpcyBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkge0BsaW5rIENsaWVudH0gdG8gcHJvdmlkZSBub24tYmxvY2tpbmcgcmVxdWVzdCBzdWJtaXNzaW9uLiBUaGUgcmV0dXJuZWQKKyAqIHtAbGluayBDb21wbGV0YWJsZUZ1dHVyZX0gY29tcGxldGVzIHdoZW4gdGhlIHdyaXRlIG9mIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLCBub3Qgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQuCisgKiA8cD4KKyAqIE5vdGU6IFRyYW5zYWN0aW9uIGNsYXNzZXMgaW50ZW50aW9uYWxseSBkbyBub3QgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGJlY2F1c2UgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb25zIHJlcXVpcmUKKyAqIHNlcXVlbnRpYWwgZXhlY3V0aW9uIHRvIG1haW50YWluIG9yZGVyaW5nIGd1YXJhbnRlZXMgb3ZlciBIVFRQLgorICogPHA+CisgKiBGb3Igc3luY2hyb25vdXMgc3VibWlzc2lvbiwgc2VlIHtAbGluayBSZXF1ZXN0U3VibWl0dGVyfS4KKyAqLworcHVibGljIGludGVyZmFjZSBSZXF1ZXN0U3VibWl0dGVyQXN5bmMgeworCisgICAgLyoqCisgICAgICogU3VibWl0cyBhIEdyZW1saW4gc2NyaXB0IGFzeW5jaHJvbm91c2x5LgorICAgICAqIDxwPgorICAgICAqIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHdyaXRlIG9mIHRoZSByZXF1ZXN0IGlzIGNvbXBsZXRlLgorICAgICAqCisgICAgICogQHBhcmFtIGdyZW1saW4gdGhlIEdyZW1saW4gc2NyaXB0IHRvIGV4ZWN1dGUKKyAgICAgKiBAcmV0dXJuIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHJlc3VsdHMgd2hlbiB0aGUgcmVxdWVzdCB3cml0ZSBpcyBjb21wbGV0ZQorICAgICAqLworICAgIENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4gc3VibWl0QXN5bmMoU3RyaW5nIGdyZW1saW4pOworCisgICAgLyoqCisgICAgICogU3VibWl0cyBhIEdyZW1saW4gc2NyaXB0IHdpdGggYm91bmQgcGFyYW1ldGVycyBhc3luY2hyb25vdXNseS4KKyAgICAgKiA8cD4KKyAgICAgKiBQcmVmZXIgdGhpcyBtZXRob2Qgb3ZlciBzdHJpbmcgY29uY2F0ZW5hdGlvbiB3aGVuIGV4ZWN1dGluZyBzY3JpcHRzIHdpdGggdmFyaWFibGUKKyAgICAgKiBhcmd1bWVudHMsIGFzIHBhcmFtZXRlcml6ZWQgc2NyaXB0cyBwZXJmb3JtIGJldHRlci4KKyAgICAgKgorICAgICAqIEBwYXJhbSBncmVtbGluIHRoZSBHcmVtbGluIHNjcmlwdCB0byBleGVjdXRlCisgICAgICogQHBhcmFtIHBhcmFtZXRlcnMgYSBtYXAgb2YgcGFyYW1ldGVycyB0aGF0IHdpbGwgYmUgYm91bmQgdG8gdGhlIHNjcmlwdCBvbiBleGVjdXRpb24KKyAgICAgKiBAcmV0dXJuIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHJlc3VsdHMgd2hlbiB0aGUgcmVxdWVzdCB3cml0ZSBpcyBjb21wbGV0ZQorICAgICAqLworICAgIENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4gc3VibWl0QXN5bmMoU3RyaW5nIGdyZW1saW4sIE1hcDxTdHJpbmcsIE9iamVjdD4gcGFyYW1ldGVycyk7CisKKyAgICAvKioKKyAgICAgKiBTdWJtaXRzIGEgR3JlbWxpbiBzY3JpcHQgd2l0aCByZXF1ZXN0IG9wdGlvbnMgYXN5bmNocm9ub3VzbHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZ3JlbWxpbiB0aGUgR3JlbWxpbiBzY3JpcHQgdG8gZXhlY3V0ZQorICAgICAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIHRvIHN1cHBseSBmb3IgdGhpcyByZXF1ZXN0CisgICAgICogQHJldHVybiBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSByZXN1bHRzIHdoZW4gdGhlIHJlcXVlc3Qgd3JpdGUgaXMgY29tcGxldGUKKyAgICAgKi8KKyAgICBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHN1Ym1pdEFzeW5jKFN0cmluZyBncmVtbGluLCBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zKTsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1Jlc3VsdC5qYXZhCmluZGV4IGU5YzM2NjkuLjQ2MzBlMjUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0LmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHQuamF2YQpAQCAtMTgsMTMgKzE4LDEzIEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBhdGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FbGVtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVJlc3VsdDsKIAogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRRdWV1ZS5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRRdWV1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzI4Yzk4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0UXVldWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlBhaXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5RdWV1ZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0YWJsZUZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50TGlua2VkUXVldWU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOwotCi0vKioKLSAqIEEgcXVldWUgb2YgaW5jb21pbmcge0BsaW5rIFJlc3VsdH0gb2JqZWN0cy4gIFRoZSBxdWV1ZSBpcyB1cGRhdGVkIGJ5IHRoZSB7QGxpbmsgSGFuZGxlci5HcmVtbGluUmVzcG9uc2VIYW5kbGVyfQotICogdW50aWwgYSByZXNwb25zZSB0ZXJtaW5hdG9yIGlzIGlkZW50aWZpZWQuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AU3VwcHJlc3NXYXJuaW5ncygiVGhyb3dhYmxlUmVzdWx0T2ZNZXRob2RDYWxsSWdub3JlZCIpCi1maW5hbCBjbGFzcyBSZXN1bHRRdWV1ZSB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIExpbmtlZEJsb2NraW5nUXVldWU8UmVzdWx0PiByZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNSZWZlcmVuY2U8VGhyb3dhYmxlPiBlcnJvciA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PigpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPiByZWFkQ29tcGxldGU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFF1ZXVlPFBhaXI8Q29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PixJbnRlZ2VyPj4gd2FpdGluZyA9IG5ldyBDb25jdXJyZW50TGlua2VkUXVldWU8PigpOwotCi0gICAgcHJpdmF0ZSBNYXA8U3RyaW5nLE9iamVjdD4gc3RhdHVzQXR0cmlidXRlcyA9IG51bGw7Ci0KLSAgICBwdWJsaWMgUmVzdWx0UXVldWUoZmluYWwgTGlua2VkQmxvY2tpbmdRdWV1ZTxSZXN1bHQ+IHJlc3VsdExpbmtlZEJsb2NraW5nUXVldWUsIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IHJlYWRDb21wbGV0ZSkgewotICAgICAgICB0aGlzLnJlc3VsdExpbmtlZEJsb2NraW5nUXVldWUgPSByZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlOwotICAgICAgICB0aGlzLnJlYWRDb21wbGV0ZSA9IHJlYWRDb21wbGV0ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEge0BsaW5rIFJlc3VsdH0gdG8gdGhlIHF1ZXVlIHdoaWNoIHdpbGwgYmUgbGF0ZXIgcmVhZCBieSB0aGUge0BsaW5rIFJlc3VsdFNldH0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVzdWx0IGEgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHtAbGluayBUcmF2ZXJzYWx9IG9yIHNjcmlwdCBzdWJtaXR0ZWQgZm9yIGV4ZWN1dGlvbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChmaW5hbCBSZXN1bHQgcmVzdWx0KSB7Ci0gICAgICAgIHRoaXMucmVzdWx0TGlua2VkQmxvY2tpbmdRdWV1ZS5vZmZlcihyZXN1bHQpOwotICAgICAgICB0cnlEcmFpbk5leHRXYWl0aW5nKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBhd2FpdChmaW5hbCBpbnQgaXRlbXMpIHsKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiByZXN1bHQgPSBuZXcgQ29tcGxldGFibGVGdXR1cmU8PigpOwotICAgICAgICB3YWl0aW5nLmFkZChQYWlyLndpdGgocmVzdWx0LCBpdGVtcykpOwotCi0gICAgICAgIHRyeURyYWluTmV4dFdhaXRpbmcoZmFsc2UpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBzaXplKCkgewotICAgICAgICBpZiAoZXJyb3IuZ2V0KCkgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXJyb3IuZ2V0KCkpOwotICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlLnNpemUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotICAgICAgICBpZiAoZXJyb3IuZ2V0KCkgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXJyb3IuZ2V0KCkpOwotICAgICAgICByZXR1cm4gdGhpcy5zaXplKCkgPT0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NvbXBsZXRlKCkgewotICAgICAgICByZXR1cm4gcmVhZENvbXBsZXRlLmlzRG9uZSgpOwotICAgIH0KLQotICAgIHZvaWQgZHJhaW5UbyhmaW5hbCBDb2xsZWN0aW9uPFJlc3VsdD4gY29sbGVjdGlvbikgewotICAgICAgICBpZiAoZXJyb3IuZ2V0KCkgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXJyb3IuZ2V0KCkpOwotICAgICAgICByZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlLmRyYWluVG8oY29sbGVjdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCBtYXJrQ29tcGxldGUoZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IHN0YXR1c0F0dHJpYnV0ZXMpIHsKLSAgICAgICAgdGhpcy5zdGF0dXNBdHRyaWJ1dGVzID0gbnVsbCA9PSBzdGF0dXNBdHRyaWJ1dGVzID8gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSA6IHN0YXR1c0F0dHJpYnV0ZXM7Ci0KLSAgICAgICAgdGhpcy5yZWFkQ29tcGxldGUuY29tcGxldGUobnVsbCk7Ci0KLSAgICAgICAgdGhpcy5kcmFpbkFsbFdhaXRpbmcoKTsKLSAgICB9Ci0KLSAgICB2b2lkIG1hcmtFcnJvcihmaW5hbCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7Ci0gICAgICAgIGVycm9yLnNldCh0aHJvd2FibGUpOwotICAgICAgICB0aGlzLnJlYWRDb21wbGV0ZS5jb21wbGV0ZUV4Y2VwdGlvbmFsbHkodGhyb3dhYmxlKTsKLSAgICAgICAgdGhpcy5kcmFpbkFsbFdhaXRpbmcoKTsKLSAgICB9Ci0KLSAgICBNYXA8U3RyaW5nLE9iamVjdD4gZ2V0U3RhdHVzQXR0cmlidXRlcygpIHsKLSAgICAgICAgcmV0dXJuIHN0YXR1c0F0dHJpYnV0ZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGxldGVzIHRoZSBuZXh0IHdhaXRpbmcgZnV0dXJlIGlmIHRoZXJlIGlzIG9uZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHRyeURyYWluTmV4dFdhaXRpbmcoZmluYWwgYm9vbGVhbiBmb3JjZSkgewotICAgICAgICAvLyBuZWVkIHRvIHBlZWsgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBpdGVtcyBuZWVkcyB0byBiZSA+PSB0aGUgZXhwZWN0ZWQgc2l6ZSBmb3IgdGhhdCBmdXR1cmUuIGlmIG5vdAotICAgICAgICAvLyBpdCBuZWVkcyB0byBrZWVwIHdhaXRpbmcKLSAgICAgICAgZmluYWwgUGFpcjxDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+LCBJbnRlZ2VyPiBuZXh0V2FpdGluZyA9IHdhaXRpbmcucGVlaygpOwotICAgICAgICBpZiAobmV4dFdhaXRpbmcgIT0gbnVsbCAmJiAoZm9yY2UgfHwgKHJlc3VsdExpbmtlZEJsb2NraW5nUXVldWUuc2l6ZSgpID49IG5leHRXYWl0aW5nLmdldFZhbHVlMSgpIHx8IHJlYWRDb21wbGV0ZS5pc0RvbmUoKSkpKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgaXRlbXMgPSBuZXh0V2FpdGluZy5nZXRWYWx1ZTEoKTsKLSAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlID0gbmV4dFdhaXRpbmcuZ2V0VmFsdWUwKCk7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8PihpdGVtcyk7Ci0gICAgICAgICAgICByZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlLmRyYWluVG8ocmVzdWx0cywgaXRlbXMpOwotCi0gICAgICAgICAgICAvLyBpdCdzIGltcG9ydGFudCB0byBjaGVjayBmb3IgZXJyb3IgaGVyZSBiZWNhdXNlIGEgZnV0dXJlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBxdWV1ZWQgaW4gIndhaXRpbmciIHByaW9yCi0gICAgICAgICAgICAvLyB0byB0aGUgZmlyc3QgcmVzcG9uc2UgYmFjayBmcm9tIHRoZSBzZXJ2ZXIuIGlmIHRoYXQgaGFwcGVucywgYW55ICJ3YWl0aW5nIiBmdXR1cmVzIHNob3VsZCBiZSBjb21wbGV0ZWQKLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbmFsbHkgb3RoZXJ3aXNlIGl0IHdpbGwgbG9vayBsaWtlIHN1Y2Nlc3MuCi0gICAgICAgICAgICBpZiAobnVsbCA9PSBlcnJvci5nZXQoKSkKLSAgICAgICAgICAgICAgICBmdXR1cmUuY29tcGxldGUocmVzdWx0cyk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZnV0dXJlLmNvbXBsZXRlRXhjZXB0aW9uYWxseShlcnJvci5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHdhaXRpbmcucmVtb3ZlKG5leHRXYWl0aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBsZXRlcyBhbGwgcmVtYWluaW5nIGZ1dHVyZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGRyYWluQWxsV2FpdGluZygpIHsKLSAgICAgICAgd2hpbGUgKCF3YWl0aW5nLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgdHJ5RHJhaW5OZXh0V2FpdGluZyh0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0U2V0LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1Jlc3VsdFNldC5qYXZhCmluZGV4IDc3YjgyM2YuLmI1ZDUwNmIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0U2V0LmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRTZXQuamF2YQpAQCAtMTksMjUgKzE5LDI4IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CitpbXBvcnQgb3JnLmphdmF0dXBsZXMuUGFpcjsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5RdWV1ZTsKIGltcG9ydCBqYXZhLnV0aWwuU3BsaXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLlNwbGl0ZXJhdG9yczsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0YWJsZUZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRMaW5rZWRRdWV1ZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtU3VwcG9ydDsKIAogLyoqCiAgKiBBIHtAY29kZSBSZXN1bHRTZXR9IGlzIHJldHVybmVkIGZyb20gdGhlIHN1Ym1pc3Npb24gb2YgYSBHcmVtbGluIHNjcmlwdCB0byB0aGUgc2VydmVyIGFuZCByZXByZXNlbnRzIHRoZQogICogcmVzdWx0cyBwcm92aWRlZCBieSB0aGUgc2VydmVyLiAgVGhlIHJlc3VsdHMgZnJvbSB0aGUgc2VydmVyIGFyZSBzdHJlYW1lZCBpbnRvIHRoZSB7QGNvZGUgUmVzdWx0U2V0fSBhbmQKLSAqIHRoZXJlZm9yZSBtYXkgbm90IGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseS4gIEFzIHN1Y2gsIHtAY29kZSBSZXN1bHRTZXR9IHByb3ZpZGVzIGFjY2VzcyB0byBhIGEgbnVtYmVyCisgKiB0aGVyZWZvcmUgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW1tZWRpYXRlbHkuICBBcyBzdWNoLCB7QGNvZGUgUmVzdWx0U2V0fSBwcm92aWRlcyBhY2Nlc3MgdG8gYSBudW1iZXIKICAqIG9mIGZ1bmN0aW9ucyB0aGF0IGhlbHAgdG8gd29yayB3aXRoIHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIHRoZSBkYXRhIHN0cmVhbWluZyBiYWNrLiAgRGF0YSBmcm9tIHJlc3VsdHMKICAqIGlzIHN0b3JlZCBpbiBhbiB7QGxpbmsgUmVzdWx0fSB3aGljaCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgaXRlbSBvbmNlIGl0IGlzIG9uIHRoZSBjbGllbnQgc2lkZS4KICAqIDxwLz4KQEAgLTUxLDIwICs1NCwxOCBAQAogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgUmVzdWx0U2V0IGltcGxlbWVudHMgSXRlcmFibGU8UmVzdWx0PiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZXN1bHRRdWV1ZSByZXN1bHRRdWV1ZTsKKyAgICBwcml2YXRlIGZpbmFsIExpbmtlZEJsb2NraW5nUXVldWU8UmVzdWx0PiByZXN1bHRRdWV1ZSA9IG5ldyBMaW5rZWRCbG9ja2luZ1F1ZXVlPD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIFF1ZXVlPFBhaXI8Q29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiwgSW50ZWdlcj4+IHdhaXRpbmcgPSBuZXcgQ29uY3VycmVudExpbmtlZFF1ZXVlPD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxUaHJvd2FibGU+IGVycm9yID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPiByZWFkQ29tcGxldGVkID0gbmV3IENvbXBsZXRhYmxlRnV0dXJlPD4oKTsKKwogICAgIHByaXZhdGUgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOwogICAgIHByaXZhdGUgZmluYWwgUmVxdWVzdE1lc3NhZ2Ugb3JpZ2luYWxSZXF1ZXN0TWVzc2FnZTsKICAgICBwcml2YXRlIGZpbmFsIEhvc3QgaG9zdDsKIAotICAgIHByaXZhdGUgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8Vm9pZD4gcmVhZENvbXBsZXRlZDsKLQotICAgIHB1YmxpYyBSZXN1bHRTZXQoZmluYWwgUmVzdWx0UXVldWUgcmVzdWx0UXVldWUsIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciwKLSAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IHJlYWRDb21wbGV0ZWQsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG9yaWdpbmFsUmVxdWVzdE1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICBmaW5hbCBIb3N0IGhvc3QpIHsKKyAgICBwdWJsaWMgUmVzdWx0U2V0KGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciwgZmluYWwgUmVxdWVzdE1lc3NhZ2Ugb3JpZ2luYWxSZXF1ZXN0TWVzc2FnZSwgZmluYWwgSG9zdCBob3N0KSB7CiAgICAgICAgIHRoaXMuZXhlY3V0b3IgPSBleGVjdXRvcjsKICAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDsKLSAgICAgICAgdGhpcy5yZXN1bHRRdWV1ZSA9IHJlc3VsdFF1ZXVlOwotICAgICAgICB0aGlzLnJlYWRDb21wbGV0ZWQgPSByZWFkQ29tcGxldGVkOwogICAgICAgICB0aGlzLm9yaWdpbmFsUmVxdWVzdE1lc3NhZ2UgPSBvcmlnaW5hbFJlcXVlc3RNZXNzYWdlOwogICAgIH0KIApAQCAtNzcsMjIgKzc4LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSB3aGVuIHtAbGluayAjYWxsSXRlbXNBdmFpbGFibGUoKX0gaXMge0Bjb2RlIHRydWV9IGFuZCB3aWxsIGNvbnRhaW4gdGhlCi0gICAgICogYXR0cmlidXRlcyBmcm9tIHRoZSByZXNwb25zZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8TWFwPFN0cmluZyxPYmplY3Q+PiBzdGF0dXNBdHRyaWJ1dGVzKCkgewotICAgICAgICByZXR1cm4gcmVhZENvbXBsZXRlZC5oYW5kbGVBc3luYygodW51c2VkSW5wdXQsIHRocm93YWJsZSkgLT4gewotICAgICAgICAgICAgaWYgKHRocm93YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgdGhyb3dhYmxlIGluc3RhbmNlb2YgQ29tcGxldGlvbkV4Y2VwdGlvbiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAoQ29tcGxldGlvbkV4Y2VwdGlvbil0aHJvd2FibGU6IG5ldyBDb21wbGV0aW9uRXhjZXB0aW9uKHRocm93YWJsZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiAobnVsbCA9PSByZXN1bHRRdWV1ZS5nZXRTdGF0dXNBdHRyaWJ1dGVzKCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSA6IHJlc3VsdFF1ZXVlLmdldFN0YXR1c0F0dHJpYnV0ZXMoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIGV4ZWN1dG9yKTsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBEZXRlcm1pbmVzIGlmIGFsbCBpdGVtcyBoYXZlIGJlZW4gcmV0dXJuZWQgdG8gdGhlIGNsaWVudC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBhbGxJdGVtc0F2YWlsYWJsZSgpIHsKQEAgLTExMyw2ICs5OCw3IEBACiAgICAgICogR2V0cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGF2YWlsYWJsZSBvbiB0aGUgY2xpZW50LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0QXZhaWxhYmxlSXRlbUNvdW50KCkgeworICAgICAgICBpZiAoZXJyb3IuZ2V0KCkgIT0gbnVsbCkgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXJyb3IuZ2V0KCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0UXVldWUuc2l6ZSgpOwogICAgIH0KIApAQCAtMTMzLDcgKzExOSwxMCBAQAogICAgICAqIGNvbXBsZXRlZCBhbmQgdGhlcmUgYXJlIGxlc3MgdGhhbiB0aGF0IG51bWJlciBzcGVjaWZpZWQgYXZhaWxhYmxlLgogICAgICAqLwogICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IHNvbWUoZmluYWwgaW50IGl0ZW1zKSB7Ci0gICAgICAgIHJldHVybiByZXN1bHRRdWV1ZS5hd2FpdChpdGVtcyk7CisgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gcmVzdWx0ID0gbmV3IENvbXBsZXRhYmxlRnV0dXJlPD4oKTsKKyAgICAgICAgd2FpdGluZy5hZGQoUGFpci53aXRoKHJlc3VsdCwgaXRlbXMpKTsKKyAgICAgICAgdHJ5RHJhaW5OZXh0V2FpdGluZyhmYWxzZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDQsNiArMTMzLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBhbGwoKSB7CiAgICAgICAgIHJldHVybiByZWFkQ29tcGxldGVkLnRoZW5BcHBseUFzeW5jKHVudXNlZElucHV0IC0+IHsKKyAgICAgICAgICAgIGlmIChlcnJvci5nZXQoKSAhPSBudWxsKSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlcnJvci5nZXQoKSk7CiAgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICAgcmVzdWx0UXVldWUuZHJhaW5UbyhsaXN0KTsKICAgICAgICAgICAgIHJldHVybiBsaXN0OwpAQCAtMTkzLDQgKzE4Myw5NSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgIH0KKworICAgIC8vID09PT09PT09PT09PT09PT09PT09IE1ldGhvZHMgY2FsbGVkIGJ5IEhhbmRsZXJzID09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBBZGRzIGEge0BsaW5rIFJlc3VsdH0gdG8gdGhlIHF1ZXVlIHdoaWNoIHdpbGwgYmUgbGF0ZXIgcmVhZCBieSBjb25zdW1lcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVzdWx0IGEgcmV0dXJuIHZhbHVlIGZyb20gdGhlIHRyYXZlcnNhbCBvciBzY3JpcHQgc3VibWl0dGVkIGZvciBleGVjdXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGQoZmluYWwgUmVzdWx0IHJlc3VsdCkgeworICAgICAgICB0aGlzLnJlc3VsdFF1ZXVlLm9mZmVyKHJlc3VsdCk7CisgICAgICAgIHRyeURyYWluTmV4dFdhaXRpbmcoZmFsc2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1hcmtzIHRoZSByZXN1bHQgc3RyZWFtIGFzIGNvbXBsZXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1hcmtDb21wbGV0ZSgpIHsKKyAgICAgICAgdGhpcy5yZWFkQ29tcGxldGVkLmNvbXBsZXRlKG51bGwpOworICAgICAgICB0aGlzLmRyYWluQWxsV2FpdGluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1hcmtzIHRoZSByZXN1bHQgc3RyZWFtIGFzIGZhaWxlZCB3aXRoIGFuIGVycm9yLgorICAgICAqCisgICAgICogQHBhcmFtIHRocm93YWJsZSB0aGUgZXJyb3IgdGhhdCBvY2N1cnJlZAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG1hcmtFcnJvcihmaW5hbCBUaHJvd2FibGUgdGhyb3dhYmxlKSB7CisgICAgICAgIGVycm9yLnNldCh0aHJvd2FibGUpOworICAgICAgICB0aGlzLnJlYWRDb21wbGV0ZWQuY29tcGxldGVFeGNlcHRpb25hbGx5KHRocm93YWJsZSk7CisgICAgICAgIHRoaXMuZHJhaW5BbGxXYWl0aW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdoZW4gcmVhZGluZyBpcyBkb25lLiBVc2VkIGludGVybmFsbHkKKyAgICAgKiBmb3IgY29ubmVjdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudC4KKyAgICAgKi8KKyAgICBDb21wbGV0YWJsZUZ1dHVyZTxWb2lkPiBnZXRSZWFkQ29tcGxldGVkKCkgeworICAgICAgICByZXR1cm4gcmVhZENvbXBsZXRlZDsKKyAgICB9CisKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PSBJbnRlcm5hbCBxdWV1ZSBtYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgorICAgICAqLworICAgIGJvb2xlYW4gaXNFbXB0eSgpIHsKKyAgICAgICAgaWYgKGVycm9yLmdldCgpICE9IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGVycm9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdFF1ZXVlLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEcmFpbnMgcmVzdWx0cyB0byB0aGUgcHJvdmlkZWQgY29sbGVjdGlvbi4KKyAgICAgKi8KKyAgICB2b2lkIGRyYWluVG8oZmluYWwgQ29sbGVjdGlvbjxSZXN1bHQ+IGNvbGxlY3Rpb24pIHsKKyAgICAgICAgaWYgKGVycm9yLmdldCgpICE9IG51bGwpIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGVycm9yLmdldCgpKTsKKyAgICAgICAgcmVzdWx0UXVldWUuZHJhaW5Ubyhjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21wbGV0ZXMgdGhlIG5leHQgd2FpdGluZyBmdXR1cmUgaWYgdGhlcmUgaXMgb25lIGFuZCBlbm91Z2ggcmVzdWx0cyBhcmUgYXZhaWxhYmxlLgorICAgICAqLworICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgdHJ5RHJhaW5OZXh0V2FpdGluZyhmaW5hbCBib29sZWFuIGZvcmNlKSB7CisgICAgICAgIC8vIG5lZWQgdG8gcGVlayBiZWNhdXNlIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGl0ZW1zIG5lZWRzIHRvIGJlID49IHRoZSBleHBlY3RlZCBzaXplIGZvciB0aGF0IGZ1dHVyZS4gaWYgbm90CisgICAgICAgIC8vIGl0IG5lZWRzIHRvIGtlZXAgd2FpdGluZworICAgICAgICBmaW5hbCBQYWlyPENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4sIEludGVnZXI+IG5leHRXYWl0aW5nID0gd2FpdGluZy5wZWVrKCk7CisgICAgICAgIGlmIChuZXh0V2FpdGluZyAhPSBudWxsICYmIChmb3JjZSB8fCAocmVzdWx0UXVldWUuc2l6ZSgpID49IG5leHRXYWl0aW5nLmdldFZhbHVlMSgpIHx8IHJlYWRDb21wbGV0ZWQuaXNEb25lKCkpKSkgeworICAgICAgICAgICAgZmluYWwgaW50IGl0ZW1zID0gbmV4dFdhaXRpbmcuZ2V0VmFsdWUxKCk7CisgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IG5leHRXYWl0aW5nLmdldFZhbHVlMCgpOworICAgICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PD4oaXRlbXMpOworICAgICAgICAgICAgcmVzdWx0UXVldWUuZHJhaW5UbyhyZXN1bHRzLCBpdGVtcyk7CisKKyAgICAgICAgICAgIC8vIGl0J3MgaW1wb3J0YW50IHRvIGNoZWNrIGZvciBlcnJvciBoZXJlIGJlY2F1c2UgYSBmdXR1cmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHF1ZXVlZCBpbiAid2FpdGluZyIgcHJpb3IKKyAgICAgICAgICAgIC8vIHRvIHRoZSBmaXJzdCByZXNwb25zZSBiYWNrIGZyb20gdGhlIHNlcnZlci4gaWYgdGhhdCBoYXBwZW5zLCBhbnkgIndhaXRpbmciIGZ1dHVyZXMgc2hvdWxkIGJlIGNvbXBsZXRlZAorICAgICAgICAgICAgLy8gZXhjZXB0aW9uYWxseSBvdGhlcndpc2UgaXQgd2lsbCBsb29rIGxpa2Ugc3VjY2Vzcy4KKyAgICAgICAgICAgIGlmIChudWxsID09IGVycm9yLmdldCgpKQorICAgICAgICAgICAgICAgIGZ1dHVyZS5jb21wbGV0ZShyZXN1bHRzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmdXR1cmUuY29tcGxldGVFeGNlcHRpb25hbGx5KGVycm9yLmdldCgpKTsKKworICAgICAgICAgICAgd2FpdGluZy5yZW1vdmUobmV4dFdhaXRpbmcpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcGxldGVzIGFsbCByZW1haW5pbmcgZnV0dXJlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZHJhaW5BbGxXYWl0aW5nKCkgeworICAgICAgICB3aGlsZSAoIXdhaXRpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICB0cnlEcmFpbk5leHRXYWl0aW5nKHRydWUpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9TZXR0aW5ncy5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9TZXR0aW5ncy5qYXZhCmluZGV4IGM2MTQyMjMuLjkwNzkwOWMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvU2V0dGluZ3MuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1NldHRpbmdzLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKIGltcG9ydCBvcmcueWFtbC5zbmFrZXlhbWwuTG9hZGVyT3B0aW9uczsKIGltcG9ydCBvcmcueWFtbC5zbmFrZXlhbWwuVHlwZURlc2NyaXB0aW9uOwpAQCAtNDEsMTAgKzQxLDEwIEBACiAgKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCi1maW5hbCBjbGFzcyBTZXR0aW5ncyB7CitwdWJsaWMgZmluYWwgY2xhc3MgU2V0dGluZ3MgewogCiAgICAgLyoqCi0gICAgICogVGhlIHBvcnQgb2YgdGhlIEdyZW1saW4gU2VydmVyIHRvIGNvbm5lY3QgdG8gd2hpY2ggZGVmYXVsdHMgdG8ge0Bjb2RlIDgxOTJ9LiBUaGUgc2FtZSBwb3J0IHdpbGwgYmUgYXBwbGllZCBmb3IKKyAgICAgKiBUaGUgcG9ydCBvZiB0aGUgR3JlbWxpbiBTZXJ2ZXIgdG8gY29ubmVjdCB0byB3aGljaCBkZWZhdWx0cyB0byB7QGNvZGUgODE4Mn0uIFRoZSBzYW1lIHBvcnQgd2lsbCBiZSBhcHBsaWVkIGZvcgogICAgICAqIGFsbCB7QGxpbmsgI2hvc3RzfS4KICAgICAgKi8KICAgICBwdWJsaWMgaW50IHBvcnQgPSA4MTgyOwpAQCAtNzEsNiArNzEsMTEgQEAKICAgICBwdWJsaWMgQ29ubmVjdGlvblBvb2xTZXR0aW5ncyBjb25uZWN0aW9uUG9vbCA9IG5ldyBDb25uZWN0aW9uUG9vbFNldHRpbmdzKCk7CiAKICAgICAvKioKKyAgICAgKiBTZXR0aW5ncyBmb3IgYXV0aGVudGljYXRpb24uCisgICAgICovCisgICAgcHVibGljIEF1dGhTZXR0aW5ncyBhdXRoID0gbmV3IEF1dGhTZXR0aW5ncygpOworCisgICAgLyoqCiAgICAgICogVGhlIHNpemUgb2YgdGhlIHRocmVhZCBwb29sIGRlZmF1bHRlZCB0byB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgbmlvUG9vbFNpemUgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5hdmFpbGFibGVQcm9jZXNzb3JzKCk7CkBAIC04MSw0MSArODYsMTQgQEAKICAgICBwdWJsaWMgaW50IHdvcmtlclBvb2xTaXplID0gUnVudGltZS5nZXRSdW50aW1lKCkuYXZhaWxhYmxlUHJvY2Vzc29ycygpICogMjsKIAogICAgIC8qKgotICAgICAqIFRoZSB1c2VybmFtZSB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgdXNlcm5hbWUgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogVGhlIHBhc3N3b3JkIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBwYXNzd29yZCA9IG51bGw7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgSkFBUyB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgamFhc0VudHJ5ID0gbnVsbDsKLQotICAgIC8qKgotICAgICAqIFRoZSBKQUFTIHByb3RvY29sIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBwcm90b2NvbCA9IG51bGw7Ci0KLSAgICAvKioKICAgICAgKiBUb2dnbGVzIGlmIHVzZXIgYWdlbnQgc2hvdWxkIGJlIHNlbnQgaW4gd2ViIHNvY2tldCBoYW5kc2hha2VzLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IHRydWU7CiAKICAgICAvKioKLSAgICAgKiBDb25maWd1cmVzIHVzZSBvZiBwZXItbWVzc2FnZSBkZWZsYXRlIGNvbXByZXNzaW9uLiBEZWZhdWx0cyB0byB0cnVlLgorICAgICAqIFRvZ2dsZXMgaWYgcmVzdWx0IGZyb20gc2VydmVyIGlzIGJ1bGtlZC4gRGVmYXVsdCBpcyBmYWxzZS4KICAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVDb21wcmVzc2lvbiA9IHRydWU7Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdXNlIFNlc3Npb25lZENoaWxkQ2xpZW50ICh0cnVlKSBvciBTZXNzaW9uZWRDbGllbnQgKGZhbHNlKSBmb3IgdHJhbnNhY3Rpb25zLgotICAgICAqIFNlc3Npb25lZENoaWxkQ2xpZW50IHJldXNlcyB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbnMgd2hlcmVhcyBTZXNzb2luZWRDbGllbnQgY3JlYXRlcyBhIG5ldyBvbmUgZm9yIGV2ZXJ5IHRyYW5zYWN0aW9uLgotICAgICAqIERlZmF1bHRzIHRvIGZhbHNlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyA9IGZhbHNlOworICAgIHB1YmxpYyBib29sZWFuIGJ1bGtSZXN1bHRzID0gZmFsc2U7CiAKICAgICAvKioKICAgICAgKiBSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGZpbGUgaW50byBhIG5ldyB7QGxpbmsgU2V0dGluZ3N9IG9iamVjdC4KQEAgLTE1MSwyNiArMTI5LDExIEBACiAgICAgICAgIGlmIChjb25mLmNvbnRhaW5zS2V5KCJ3b3JrZXJQb29sU2l6ZSIpKQogICAgICAgICAgICAgc2V0dGluZ3Mud29ya2VyUG9vbFNpemUgPSBjb25mLmdldEludCgid29ya2VyUG9vbFNpemUiKTsKIAotICAgICAgICBpZiAoY29uZi5jb250YWluc0tleSgidXNlcm5hbWUiKSkKLSAgICAgICAgICAgIHNldHRpbmdzLnVzZXJuYW1lID0gY29uZi5nZXRTdHJpbmcoInVzZXJuYW1lIik7Ci0KLSAgICAgICAgaWYgKGNvbmYuY29udGFpbnNLZXkoInBhc3N3b3JkIikpCi0gICAgICAgICAgICBzZXR0aW5ncy5wYXNzd29yZCA9IGNvbmYuZ2V0U3RyaW5nKCJwYXNzd29yZCIpOwotCi0gICAgICAgIGlmIChjb25mLmNvbnRhaW5zS2V5KCJqYWFzRW50cnkiKSkKLSAgICAgICAgICAgIHNldHRpbmdzLmphYXNFbnRyeSA9IGNvbmYuZ2V0U3RyaW5nKCJqYWFzRW50cnkiKTsKLQotICAgICAgICBpZiAoY29uZi5jb250YWluc0tleSgicHJvdG9jb2wiKSkKLSAgICAgICAgICAgIHNldHRpbmdzLnByb3RvY29sID0gY29uZi5nZXRTdHJpbmcoInByb3RvY29sIik7Ci0KICAgICAgICAgaWYgKGNvbmYuY29udGFpbnNLZXkoImVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCIpKQogICAgICAgICAgICAgc2V0dGluZ3MuZW5hYmxlVXNlckFnZW50T25Db25uZWN0ID0gY29uZi5nZXRCb29sZWFuKCJlbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QiKTsKIAotICAgICAgICBpZiAoY29uZi5jb250YWluc0tleSgiZW5hYmxlQ29tcHJlc3Npb24iKSkKLSAgICAgICAgICAgIHNldHRpbmdzLmVuYWJsZUNvbXByZXNzaW9uID0gY29uZi5nZXRCb29sZWFuKCJlbmFibGVDb21wcmVzc2lvbiIpOwotCi0gICAgICAgIGlmIChjb25mLmNvbnRhaW5zS2V5KCJyZXVzZUNvbm5lY3Rpb25zRm9yU2Vzc2lvbnMiKSkKLSAgICAgICAgICAgIHNldHRpbmdzLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyA9IGNvbmYuZ2V0Qm9vbGVhbigicmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zIik7CisgICAgICAgIGlmIChjb25mLmNvbnRhaW5zS2V5KCJidWxrUmVzdWx0cyIpKQorICAgICAgICAgICAgc2V0dGluZ3MuYnVsa1Jlc3VsdHMgPSBjb25mLmdldEJvb2xlYW4oImJ1bGtSZXN1bHRzIik7CiAKICAgICAgICAgaWYgKGNvbmYuY29udGFpbnNLZXkoImhvc3RzIikpCiAgICAgICAgICAgICBzZXR0aW5ncy5ob3N0cyA9IGNvbmYuZ2V0TGlzdCgiaG9zdHMiKS5zdHJlYW0oKS5tYXAoT2JqZWN0Ojp0b1N0cmluZykuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKQEAgLTE5NSw5ICsxNTgsNiBAQAogICAgICAgICBpZiAoSXRlcmF0b3JVdGlscy5jb3VudChjb25uZWN0aW9uUG9vbENvbmYuZ2V0S2V5cygpKSA+IDApIHsKICAgICAgICAgICAgIGZpbmFsIENvbm5lY3Rpb25Qb29sU2V0dGluZ3MgY3BTZXR0aW5ncyA9IG5ldyBDb25uZWN0aW9uUG9vbFNldHRpbmdzKCk7CiAKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoImNoYW5uZWxpemVyIikpCi0gICAgICAgICAgICAgICAgY3BTZXR0aW5ncy5jaGFubmVsaXplciA9IGNvbm5lY3Rpb25Qb29sQ29uZi5nZXRTdHJpbmcoImNoYW5uZWxpemVyIik7Ci0KICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoImVuYWJsZVNzbCIpKQogICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MuZW5hYmxlU3NsID0gY29ubmVjdGlvblBvb2xDb25mLmdldEJvb2xlYW4oImVuYWJsZVNzbCIpOwogCkBAIC0yMzAsMzIgKzE5MCwxNyBAQAogICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb29sQ29uZi5jb250YWluc0tleSgic3NsU2tpcENlcnRWYWxpZGF0aW9uIikpCiAgICAgICAgICAgICAgICAgY3BTZXR0aW5ncy5zc2xTa2lwQ2VydFZhbGlkYXRpb24gPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0Qm9vbGVhbigic3NsU2tpcENlcnRWYWxpZGF0aW9uIik7CiAKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1pblNpemUiKSkKLSAgICAgICAgICAgICAgICBjcFNldHRpbmdzLm1pblNpemUgPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0SW50KCJtaW5TaXplIik7Ci0KICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1heFNpemUiKSkKICAgICAgICAgICAgICAgICBjcFNldHRpbmdzLm1heFNpemUgPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0SW50KCJtYXhTaXplIik7CiAKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIpKQotICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uID0gY29ubmVjdGlvblBvb2xDb25mLmdldEludCgibWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uIik7Ci0KLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIpKQotICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uID0gY29ubmVjdGlvblBvb2xDb25mLmdldEludCgibWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uIik7Ci0KLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24iKSkKLSAgICAgICAgICAgICAgICBjcFNldHRpbmdzLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0SW50KCJtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uIik7Ci0KLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24iKSkKLSAgICAgICAgICAgICAgICBjcFNldHRpbmdzLm1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0SW50KCJtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uIik7Ci0KICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1heFdhaXRGb3JDb25uZWN0aW9uIikpCiAgICAgICAgICAgICAgICAgY3BTZXR0aW5ncy5tYXhXYWl0Rm9yQ29ubmVjdGlvbiA9IGNvbm5lY3Rpb25Qb29sQ29uZi5nZXRJbnQoIm1heFdhaXRGb3JDb25uZWN0aW9uIik7CiAKICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1heFdhaXRGb3JDbG9zZSIpKQogICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MubWF4V2FpdEZvckNsb3NlID0gY29ubmVjdGlvblBvb2xDb25mLmdldEludCgibWF4V2FpdEZvckNsb3NlIik7CiAKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoIm1heENvbnRlbnRMZW5ndGgiKSkKLSAgICAgICAgICAgICAgICBjcFNldHRpbmdzLm1heENvbnRlbnRMZW5ndGggPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0SW50KCJtYXhDb250ZW50TGVuZ3RoIik7CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvb2xDb25mLmNvbnRhaW5zS2V5KCJtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgiKSkKKyAgICAgICAgICAgICAgICBjcFNldHRpbmdzLm1heFJlc3BvbnNlQ29udGVudExlbmd0aCA9IGNvbm5lY3Rpb25Qb29sQ29uZi5nZXRJbnQoIm1heFJlc3BvbnNlQ29udGVudExlbmd0aCIpOwogCiAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvb2xDb25mLmNvbnRhaW5zS2V5KCJyZWNvbm5lY3RJbnRlcnZhbCIpKQogICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MucmVjb25uZWN0SW50ZXJ2YWwgPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0SW50KCJyZWNvbm5lY3RJbnRlcnZhbCIpOwpAQCAtMjYzLDE4ICsyMDgsMzQgQEAKICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoInJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSIpKQogICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MucmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplID0gY29ubmVjdGlvblBvb2xDb25mLmdldEludCgicmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplIik7CiAKLSAgICAgICAgICAgIGlmIChjb25uZWN0aW9uUG9vbENvbmYuY29udGFpbnNLZXkoImtlZXBBbGl2ZUludGVydmFsIikpCi0gICAgICAgICAgICAgICAgY3BTZXR0aW5ncy5rZWVwQWxpdmVJbnRlcnZhbCA9IGNvbm5lY3Rpb25Qb29sQ29uZi5nZXRMb25nKCJrZWVwQWxpdmVJbnRlcnZhbCIpOwotCiAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvb2xDb25mLmNvbnRhaW5zS2V5KCJ2YWxpZGF0aW9uUmVxdWVzdCIpKQogICAgICAgICAgICAgICAgIGNwU2V0dGluZ3MudmFsaWRhdGlvblJlcXVlc3QgPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0U3RyaW5nKCJ2YWxpZGF0aW9uUmVxdWVzdCIpOwogCiAgICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvb2xDb25mLmNvbnRhaW5zS2V5KCJjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzIikpCiAgICAgICAgICAgICAgICAgY3BTZXR0aW5ncy5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzID0gY29ubmVjdGlvblBvb2xDb25mLmdldExvbmcoImNvbm5lY3Rpb25TZXR1cFRpbWVvdXRNaWxsaXMiKTsKIAorICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb29sQ29uZi5jb250YWluc0tleSgiaWRsZUNvbm5lY3Rpb25UaW1lb3V0IikpCisgICAgICAgICAgICAgICAgY3BTZXR0aW5ncy5pZGxlQ29ubmVjdGlvblRpbWVvdXQgPSBjb25uZWN0aW9uUG9vbENvbmYuZ2V0TG9uZygiaWRsZUNvbm5lY3Rpb25UaW1lb3V0Iik7CisKICAgICAgICAgICAgIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sID0gY3BTZXR0aW5nczsKICAgICAgICAgfQogCisgICAgICAgIGZpbmFsIENvbmZpZ3VyYXRpb24gYXV0aENvbmYgPSBjb25mLnN1YnNldCgiYXV0aCIpOworICAgICAgICBpZiAoSXRlcmF0b3JVdGlscy5jb3VudChhdXRoQ29uZi5nZXRLZXlzKCkpID4gMCkgeworICAgICAgICAgICAgZmluYWwgQXV0aFNldHRpbmdzIGF1dGhTZXR0aW5ncyA9IG5ldyBBdXRoU2V0dGluZ3MoKTsKKworICAgICAgICAgICAgaWYgKGF1dGhDb25mLmNvbnRhaW5zS2V5KCJ0eXBlIikpCisgICAgICAgICAgICAgICAgYXV0aFNldHRpbmdzLnR5cGUgPSBhdXRoQ29uZi5nZXRTdHJpbmcoInR5cGUiKTsKKworICAgICAgICAgICAgaWYgKGF1dGhDb25mLmNvbnRhaW5zS2V5KCJ1c2VybmFtZSIpKQorICAgICAgICAgICAgICAgIGF1dGhTZXR0aW5ncy51c2VybmFtZSA9IGF1dGhDb25mLmdldFN0cmluZygidXNlcm5hbWUiKTsKKworICAgICAgICAgICAgaWYgKGF1dGhDb25mLmNvbnRhaW5zS2V5KCJwYXNzd29yZCIpKQorICAgICAgICAgICAgICAgIGF1dGhTZXR0aW5ncy5wYXNzd29yZCA9IGF1dGhDb25mLmdldFN0cmluZygicGFzc3dvcmQiKTsKKworICAgICAgICAgICAgc2V0dGluZ3MuYXV0aCA9IGF1dGhTZXR0aW5nczsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBzZXR0aW5nczsKICAgICB9CiAKQEAgLTM0MCw0NyArMzAxLDExIEBACiAgICAgICAgIHB1YmxpYyBib29sZWFuIHNzbFNraXBDZXJ0VmFsaWRhdGlvbiA9IGZhbHNlOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgbWluaW11bSBzaXplIG9mIGEgY29ubmVjdGlvbiBwb29sIGZvciBhIHtAbGluayBIb3N0fS4gQnkgZGVmYXVsdCB0aGlzIGlzIHNldCB0byAyLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBtaW5TaXplID0gQ29ubmVjdGlvblBvb2wuTUlOX1BPT0xfU0laRTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIG1heGltdW0gc2l6ZSBvZiBhIGNvbm5lY3Rpb24gcG9vbCBmb3IgYSB7QGxpbmsgSG9zdH0uIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gOC4KKyAgICAgICAgICogVGhlIG1heGltdW0gc2l6ZSBvZiBhIGNvbm5lY3Rpb24gcG9vbCBmb3IgYSB7QGxpbmsgSG9zdH0uIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gMTI4LgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGludCBtYXhTaXplID0gQ29ubmVjdGlvblBvb2wuTUFYX1BPT0xfU0laRTsKIAogICAgICAgICAvKioKLSAgICAgICAgICogTGVuZ3RoIG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgb24gYW4gaWRsZSBjb25uZWN0aW9uIGJlZm9yZSBzZW5kaW5nIGEga2VlcC1hbGl2ZSByZXF1ZXN0LiBTZXQgdG8KLSAgICAgICAgICogemVybyB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBsb25nIGtlZXBBbGl2ZUludGVydmFsID0gQ29ubmVjdGlvbi5LRUVQX0FMSVZFX0lOVEVSVkFMOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBIGNvbm5lY3Rpb24gdW5kZXIgbG93IHVzZSBjYW4gYmUgZGVzdHJveWVkLiBUaGlzIHNldHRpbmcgZGV0ZXJtaW5lcyB0aGUgdGhyZXNob2xkIGZvciBkZXRlcm1pbmluZyB3aGVuCi0gICAgICAgICAqIHRoYXQgY29ubmVjdGlvbiBjYW4gYmUgcmVsZWFzZWQgYW5kIGlzIGRlZmF1bHRlZCB0byA4LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPSBDb25uZWN0aW9uUG9vbC5NSU5fU0lNVUxUQU5FT1VTX1VTQUdFX1BFUl9DT05ORUNUSU9OOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBJZiBhIGNvbm5lY3Rpb24gaXMgb3ZlciB1c2VkLCB0aGVuIGl0IG1pZ2h0IG1lYW4gdGhhdCBpcyBuZWNlc3NhcnkgdG8gZXhwYW5kIHRoZSBwb29sIGJ5IGFkZGluZyBhIG5ldwotICAgICAgICAgKiBjb25uZWN0aW9uLiAgVGhpcyBzZXR0aW5nIGRldGVybWluZXMgdGhlIHRocmVzaG9sZCBmb3IgYSBjb25uZWN0aW9ucyBvdmVyIHVzZSBhbmQgaXMgZGVmYXVsdGVkIHRvIDE2Ci0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiA9IENvbm5lY3Rpb25Qb29sLk1BWF9TSU1VTFRBTkVPVVNfVVNBR0VfUEVSX0NPTk5FQ1RJT047Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyBpbiBmbGlnaHQgb24gYSBjb25uZWN0aW9uIHdoZXJlIHRoZSBkZWZhdWx0IGlzIDQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLk1BWF9JTl9QUk9DRVNTOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBIGNvbm5lY3Rpb24gaGFzIGF2YWlsYWJsZSBpbi1wcm9jZXNzIHJlcXVlc3RzIHdoaWNoIGlzIGNhbGN1bGF0ZWQgYnkgc3VidHJhY3RpbmcgdGhlIG51bWJlciBvZiBjdXJyZW50Ci0gICAgICAgICAqIGluLWZsaWdodCByZXF1ZXN0cyBvbiBhIGNvbm5lY3Rpb24gYW5kIHN1YnRyYWN0aW5nIHRoYXQgZnJvbSB0aGUge0BsaW5rICNtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9ufS4gV2hlbgotICAgICAgICAgKiB0aGF0IG51bWJlciBkcm9wcyBiZWxvdyB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgdGhlIGNvbm5lY3Rpb24gaXMgcmVjb21tZW5kZWQgZm9yIHJlcGxhY2VtZW50LiBUaGUKLSAgICAgICAgICogZGVmYXVsdCBmb3IgdGhpcyBzZXR0aW5nIGlzIDEuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBDb25uZWN0aW9uLk1JTl9JTl9QUk9DRVNTOwotCi0gICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgbmV3IGNvbm5lY3Rpb24gYmVmb3JlIHRpbWluZyBvdXQgd2hlcmUgdGhlIGRlZmF1bHQgdmFsdWUKICAgICAgICAgICogaXMgMzAwMC4KICAgICAgICAgICovCkBAIC0zOTQsMTAgKzMxOSwxMCBAQAogICAgICAgICBwdWJsaWMgaW50IG1heFdhaXRGb3JDbG9zZSA9IENvbm5lY3Rpb24uTUFYX1dBSVRfRk9SX0NMT1NFOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgbWF4aW11bSBsZW5ndGggaW4gYnl0ZXMgdGhhdCBhIG1lc3NhZ2UgY2FuIGJlIHNlbnQgdG8gdGhlIHNlcnZlci4gVGhpcyBudW1iZXIgY2FuIGJlIG5vIGdyZWF0ZXIgdGhhbgotICAgICAgICAgKiB0aGUgc2V0dGluZyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjU1MzYuCisgICAgICAgICAqIFRoZSBtYXhpbXVtIGxlbmd0aCBpbiBieXRlcyBvZiBhIHJlc3BvbnNlIG1lc3NhZ2UgdGhhdCBjYW4gYmUgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcworICAgICAgICAgKiB7QGxpbmsgSW50ZWdlciNNQVhfVkFMVUV9LgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBtYXhDb250ZW50TGVuZ3RoID0gQ29ubmVjdGlvbi5NQVhfQ09OVEVOVF9MRU5HVEg7CisgICAgICAgIHB1YmxpYyBsb25nIG1heFJlc3BvbnNlQ29udGVudExlbmd0aCA9IENvbm5lY3Rpb24uTUFYX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHRyeWluZyB0byByZWNvbm5lY3QgdG8gYSBkZWFkIGhvc3QuIFRoZSBkZWZhdWx0IHZhbHVlIGlzCkBAIC00MTIsMTYgKzMzNyw5IEBACiAgICAgICAgIHB1YmxpYyBpbnQgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplID0gQ29ubmVjdGlvbi5SRVNVTFRfSVRFUkFUSU9OX0JBVENIX1NJWkU7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoYW5uZWwgdGhhdCBjb25uZWN0cyB0byB0aGUgc2VydmVyLiBUaGlzIHZhbHVlIHNob3VsZCBiZSB0aGUgZnVsbHkgcXVhbGlmaWVkCi0gICAgICAgICAqIGNsYXNzIG5hbWUgb2YgYSBHcmVtbGluIERyaXZlciB7QGxpbmsgQ2hhbm5lbGl6ZXJ9IGltcGxlbWVudGF0aW9uLiAgQnkgZGVmYXVsdCB0aGlzIHZhbHVlIGlzIHNldCB0bwotICAgICAgICAgKiB7QGxpbmsgQ2hhbm5lbGl6ZXIuV2ViU29ja2V0Q2hhbm5lbGl6ZXJ9LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN0cmluZyBjaGFubmVsaXplciA9IENoYW5uZWxpemVyLldlYlNvY2tldENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKLQotICAgICAgICAvKioKICAgICAgICAgICogQSB2YWxpZCBHcmVtbGluIHNjcmlwdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QgcmVtb3RlIG9wZXJhdGlvbnMuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIHZhbGlkYXRpb25SZXF1ZXN0ID0gIicnIjsKKyAgICAgICAgcHVibGljIFN0cmluZyB2YWxpZGF0aW9uUmVxdWVzdCA9ICJnLmluamVjdCgwKSI7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIER1cmF0aW9uIG9mIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHByb3ZpZGVkIGZvciBjb25uZWN0aW9uIHNldHVwIHRvIGNvbXBsZXRlIHdoaWNoIGluY2x1ZGVzIFdlYlNvY2tldApAQCAtNDI5LDE1ICszNDcsMjMgQEAKICAgICAgICAgICogY29tcGxldGUgYnkgdGhlbi4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBsb25nIGNvbm5lY3Rpb25TZXR1cFRpbWVvdXRNaWxsaXMgPSBDb25uZWN0aW9uLkNPTk5FQ1RJT05fU0VUVVBfVElNRU9VVF9NSUxMSVM7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoYXQgdGhlIGRyaXZlciB3aWxsIGFsbG93IGEgY2hhbm5lbCB0byBub3QgcmVjZWl2ZSByZWFkIG9yIHdyaXRlcyBiZWZvcmUgaXQgYXV0b21hdGljYWxseSBjbG9zZXMuCisgICAgICAgICAqIE5vdGUgdGhhdCB3aGlsZSB0aGlzIHZhbHVlIGlzIHRvIGJlIHByb3ZpZGVkIGFzIG1pbGxpc2Vjb25kcyBpdCB3aWxsIHJlc29sdmUgdG8KKyAgICAgICAgICogc2Vjb25kIHByZWNpc2lvbi4gU2V0IHRoaXMgdmFsdWUgdG8gMCB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBsb25nIGlkbGVDb25uZWN0aW9uVGltZW91dCA9IENvbm5lY3Rpb24uQ09OTkVDVElPTl9JRExFX1RJTUVPVVRfTUlMTElTOworCiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTZXJpYWxpemVyU2V0dGluZ3MgewogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGZ1bGx5IHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSB7QGxpbmsgTWVzc2FnZVNlcmlhbGl6ZXJ9IHRoYXQgd2lsbCBiZSB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlCiAgICAgICAgICAqIHNlcnZlci4gTm90ZSB0aGF0IHRoZSBzZXJpYWxpemVyIGNvbmZpZ3VyZWQgb24gdGhlIGNsaWVudCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi4KLSAgICAgICAgICogQnkgZGVmYXVsdCB0aGUgc2V0dGluZyBpcyBjb25maWd1cmVkIHRvIHtAbGluayBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjF9LgorICAgICAgICAgKiBCeSBkZWZhdWx0IHRoZSBzZXR0aW5nIGlzIGNvbmZpZ3VyZWQgdG8ge0BsaW5rIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNH0uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIGNsYXNzTmFtZSA9IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCk7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgY2xhc3NOYW1lID0gR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKTsKIAogICAgICAgICAvKioKICAgICAgICAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgc2VyaWFsaXplciB3aXRoIHRoZSB7QGxpbmsgI2NsYXNzTmFtZX0uCkBAIC00NTEsNCArMzc3LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplcjsKICAgICAgICAgfQogICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQXV0aFNldHRpbmdzIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFR5cGUgb2YgQXV0aCB0byBzdWJtaXQgb24gcmVxdWVzdHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIFN0cmluZyB0eXBlID0gIiI7CisgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgdXNlcm5hbWUgdG8gc3VibWl0IG9uIHJlcXVlc3RzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdXNlcm5hbWUgPSBudWxsOworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHBhc3N3b3JkIHRvIHN1Ym1pdCBvbiByZXF1ZXN0cyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3RyaW5nIHBhc3N3b3JkID0gbnVsbDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHJlZ2lvbiBzZXR0aW5nIGZvciBzaWd2NCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVnaW9uID0gbnVsbDsKKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIHNlcnZpY2UgbmFtZSBzZXR0aW5nIGZvciBzaWd2NCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBTdHJpbmcgc2VydmljZU5hbWUgPSBudWxsOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvYXV0aC9BdXRoLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2F1dGgvQXV0aC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOGQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2F1dGgvQXV0aC5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmF1dGg7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXF1ZXN0SW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuU2V0dGluZ3M7CitpbXBvcnQgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5hdXRoLmNyZWRlbnRpYWxzLkF3c0NyZWRlbnRpYWxzUHJvdmlkZXI7CisKK3B1YmxpYyBpbnRlcmZhY2UgQXV0aCBleHRlbmRzIFJlcXVlc3RJbnRlcmNlcHRvciB7CisgICAgU3RyaW5nIEFVVEhfQkFTSUMgPSAiYmFzaWMiOworICAgIFN0cmluZyBBVVRIX1NJR1Y0ID0gInNpZ3Y0IjsKKworICAgIHN0YXRpYyBBdXRoIGJhc2ljKGZpbmFsIFN0cmluZyB1c2VybmFtZSwgZmluYWwgU3RyaW5nIHBhc3N3b3JkKSB7CisgICAgICAgIHJldHVybiBuZXcgQmFzaWModXNlcm5hbWUsIHBhc3N3b3JkKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQXV0aCBzaWd2NChmaW5hbCBTdHJpbmcgcmVnaW9uTmFtZSwgZmluYWwgU3RyaW5nIHNlcnZpY2VOYW1lKSB7CisgICAgICAgIHJldHVybiBuZXcgU2lndjQocmVnaW9uTmFtZSwgc2VydmljZU5hbWUpOworICAgIH0KKworICAgIHN0YXRpYyBBdXRoIHNpZ3Y0KGZpbmFsIFN0cmluZyByZWdpb25OYW1lLCBmaW5hbCBBd3NDcmVkZW50aWFsc1Byb3ZpZGVyIGF3c0NyZWRlbnRpYWxzUHJvdmlkZXIsIGZpbmFsIFN0cmluZyBzZXJ2aWNlTmFtZSkgeworICAgICAgICByZXR1cm4gbmV3IFNpZ3Y0KHJlZ2lvbk5hbWUsIGF3c0NyZWRlbnRpYWxzUHJvdmlkZXIsIHNlcnZpY2VOYW1lKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQXV0aCBmcm9tKFNldHRpbmdzLkF1dGhTZXR0aW5ncyBzZXR0aW5ncykgeworICAgICAgICBpZiAoc2V0dGluZ3MudHlwZS5lcXVhbHMoQVVUSF9CQVNJQykpIHsKKyAgICAgICAgICAgIHJldHVybiBiYXNpYyhzZXR0aW5ncy51c2VybmFtZSwgc2V0dGluZ3MucGFzc3dvcmQpOworICAgICAgICB9CisgICAgICAgIGlmIChzZXR0aW5ncy50eXBlLmVxdWFscyhBVVRIX1NJR1Y0KSkgeworICAgICAgICAgICAgcmV0dXJuIHNpZ3Y0KHNldHRpbmdzLnJlZ2lvbiwgc2V0dGluZ3Muc2VydmljZU5hbWUpOworICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gYXV0aCB0eXBlOiAiICsgc2V0dGluZ3MudHlwZSk7CisgICAgfQorCisgICAgY2xhc3MgQXV0aGVudGljYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uKEV4Y2VwdGlvbiBjYXVzZSkgeworICAgICAgICAgICAgc3VwZXIoY2F1c2UpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9hdXRoL0Jhc2ljLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2F1dGgvQmFzaWMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWE0OGMyCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9hdXRoL0Jhc2ljLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuYXV0aDsKKworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5GdWxsSHR0cFJlcXVlc3Q7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJOYW1lczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5IdHRwUmVxdWVzdDsKKworaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CisKK3B1YmxpYyBjbGFzcyBCYXNpYyBpbXBsZW1lbnRzIEF1dGggeworCisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXNlcm5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcGFzc3dvcmQ7CisKKyAgICBwdWJsaWMgQmFzaWMoZmluYWwgU3RyaW5nIHVzZXJuYW1lLCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQpIHsKKyAgICAgICAgdGhpcy51c2VybmFtZSA9IHVzZXJuYW1lOworICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEh0dHBSZXF1ZXN0IGFwcGx5KGZpbmFsIEh0dHBSZXF1ZXN0IGh0dHBSZXF1ZXN0KSB7CisgICAgICAgIGZpbmFsIFN0cmluZyB2YWx1ZVRvRW5jb2RlID0gdXNlcm5hbWUgKyAiOiIgKyBwYXNzd29yZDsKKyAgICAgICAgaHR0cFJlcXVlc3QuaGVhZGVycygpLnB1dChIdHRwUmVxdWVzdC5IZWFkZXJzLkFVVEhPUklaQVRJT04sCisgICAgICAgICAgICAgICAgIkJhc2ljICIgKyBCYXNlNjQuZ2V0RW5jb2RlcigpLmVuY29kZVRvU3RyaW5nKHZhbHVlVG9FbmNvZGUuZ2V0Qnl0ZXMoKSkpOworICAgICAgICByZXR1cm4gaHR0cFJlcXVlc3Q7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9hdXRoL1NpZ3Y0LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2F1dGgvU2lndjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjUxYWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9hdXRoL1NpZ3Y0LmphdmEKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmF1dGg7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkh0dHBSZXF1ZXN0OworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5hdXRoLmNyZWRlbnRpYWxzLkF3c0NyZWRlbnRpYWxzOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NDcmVkZW50aWFsc1Byb3ZpZGVyOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NTZXNzaW9uQ3JlZGVudGlhbHM7CitpbXBvcnQgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5hdXRoLmNyZWRlbnRpYWxzLkRlZmF1bHRDcmVkZW50aWFsc1Byb3ZpZGVyOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuaHR0cC5Db250ZW50U3RyZWFtUHJvdmlkZXI7CitpbXBvcnQgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLlNka0h0dHBNZXRob2Q7CitpbXBvcnQgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLlNka0h0dHBSZXF1ZXN0OworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuaHR0cC5hdXRoLmF3cy5zaWduZXIuQXdzVjRIdHRwU2lnbmVyOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuaHR0cC5hdXRoLnNwaS5zaWduZXIuU2lnbmVkUmVxdWVzdDsKK2ltcG9ydCBzb2Z0d2FyZS5hbWF6b24uYXdzc2RrLnV0aWxzLmh0dHAuU2RrSHR0cFV0aWxzOworCitpbXBvcnQgc3RhdGljIHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuaHR0cC5hdXRoLmF3cy5pbnRlcm5hbC5zaWduZXIudXRpbC5TaWduZXJDb25zdGFudC5BVVRIT1JJWkFUSU9OOworaW1wb3J0IHN0YXRpYyBzb2Z0d2FyZS5hbWF6b24uYXdzc2RrLmh0dHAuYXV0aC5hd3MuaW50ZXJuYWwuc2lnbmVyLnV0aWwuU2lnbmVyQ29uc3RhbnQuSE9TVDsKK2ltcG9ydCBzdGF0aWMgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLmF1dGguYXdzLmludGVybmFsLnNpZ25lci51dGlsLlNpZ25lckNvbnN0YW50LlhfQU1aX0NPTlRFTlRfU0hBMjU2OworaW1wb3J0IHN0YXRpYyBzb2Z0d2FyZS5hbWF6b24uYXdzc2RrLmh0dHAuYXV0aC5hd3MuaW50ZXJuYWwuc2lnbmVyLnV0aWwuU2lnbmVyQ29uc3RhbnQuWF9BTVpfREFURTsKK2ltcG9ydCBzdGF0aWMgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLmF1dGguYXdzLmludGVybmFsLnNpZ25lci51dGlsLlNpZ25lckNvbnN0YW50LlhfQU1aX1NFQ1VSSVRZX1RPS0VOOworCisvKioKKyAqIEEge0BsaW5rIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlcXVlc3RJbnRlcmNlcHRvcn0gdGhhdCBwcm92aWRlcyBoZWFkZXJzIHJlcXVpcmVkIGZvciBTaWdWNC4gQmVjYXVzZQorICogdGhlIHNpZ25pbmcgcHJvY2VzcyByZXF1aXJlcyBmaW5hbCBoZWFkZXIgYW5kIGJvZHkgZGF0YSwgdGhpcyBpbnRlcmNlcHRvciBzaG91bGQgYWxtb3N0IGFsd2F5cyBiZSBsYXN0LgorICovCitwdWJsaWMgY2xhc3MgU2lndjQgaW1wbGVtZW50cyBBdXRoIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoU2lndjQuY2xhc3MpOworICAgIHByaXZhdGUgZmluYWwgQXdzQ3JlZGVudGlhbHNQcm92aWRlciBhd3NDcmVkZW50aWFsc1Byb3ZpZGVyOworICAgIHByaXZhdGUgZmluYWwgQXdzVjRIdHRwU2lnbmVyIGF3czRTaWduZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc2VydmljZU5hbWU7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVnaW9uTmFtZTsKKworICAgIHB1YmxpYyBTaWd2NChmaW5hbCBTdHJpbmcgcmVnaW9uTmFtZSwgZmluYWwgU3RyaW5nIHNlcnZpY2VOYW1lKSB7CisgICAgICAgIHRoaXMocmVnaW9uTmFtZSwgRGVmYXVsdENyZWRlbnRpYWxzUHJvdmlkZXIuY3JlYXRlKCksIHNlcnZpY2VOYW1lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2lndjQoZmluYWwgU3RyaW5nIHJlZ2lvbk5hbWUsIGZpbmFsIEF3c0NyZWRlbnRpYWxzUHJvdmlkZXIgYXdzQ3JlZGVudGlhbHNQcm92aWRlciwgZmluYWwgU3RyaW5nIHNlcnZpY2VOYW1lKSB7CisgICAgICAgIHRoaXMuYXdzQ3JlZGVudGlhbHNQcm92aWRlciA9IGF3c0NyZWRlbnRpYWxzUHJvdmlkZXI7CisKKyAgICAgICAgYXdzNFNpZ25lciA9IEF3c1Y0SHR0cFNpZ25lci5jcmVhdGUoKTsKKyAgICAgICAgdGhpcy5yZWdpb25OYW1lID0gcmVnaW9uTmFtZTsKKyAgICAgICAgdGhpcy5zZXJ2aWNlTmFtZSA9IHNlcnZpY2VOYW1lOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBIdHRwUmVxdWVzdCBhcHBseShmaW5hbCBIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ29udGVudFN0cmVhbVByb3ZpZGVyIGNvbnRlbnQgPSB0b0NvbnRlbnRTdHJlYW0oaHR0cFJlcXVlc3QpOworICAgICAgICAgICAgLy8gQ29udmVydCBIdHRwIHJlcXVlc3QgaW50byBhbiBBV1MgU0RLIHNpZ25hYmxlIHJlcXVlc3QKKyAgICAgICAgICAgIGZpbmFsIFNka0h0dHBSZXF1ZXN0IGF3c1NpZ25hYmxlUmVxdWVzdCA9IHRvU2lnbmFibGVSZXF1ZXN0KGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgICAgIGZpbmFsIEF3c0NyZWRlbnRpYWxzIGNyZWRlbnRpYWxzID0gYXdzQ3JlZGVudGlhbHNQcm92aWRlci5yZXNvbHZlQ3JlZGVudGlhbHMoKTsKKworICAgICAgICAgICAgLy8gU2lnbiB0aGUgQVdTIFNESyBzaWduYWJsZSByZXF1ZXN0ICh3aGljaCBpbnRlcm5hbGx5IGFkZHMgc29tZSBIVFRQIGhlYWRlcnMpCisgICAgICAgICAgICBmaW5hbCBTaWduZWRSZXF1ZXN0IHNpZ25lZCA9IGF3czRTaWduZXIuc2lnbihyIC0+IHIuaWRlbnRpdHkoY3JlZGVudGlhbHMpCisgICAgICAgICAgICAgICAgICAgIC5yZXF1ZXN0KGF3c1NpZ25hYmxlUmVxdWVzdCkKKyAgICAgICAgICAgICAgICAgICAgLnBheWxvYWQoY29udGVudCkKKyAgICAgICAgICAgICAgICAgICAgLnB1dFByb3BlcnR5KEF3c1Y0SHR0cFNpZ25lci5TRVJWSUNFX1NJR05JTkdfTkFNRSwgdGhpcy5zZXJ2aWNlTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgLnB1dFByb3BlcnR5KEF3c1Y0SHR0cFNpZ25lci5SRUdJT05fTkFNRSwgdGhpcy5yZWdpb25OYW1lKSk7CisKKyAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVycyA9IGh0dHBSZXF1ZXN0LmhlYWRlcnMoKTsKKyAgICAgICAgICAgIHNldFNpZ25lZEhlYWRlcnMoaGVhZGVycywgc2lnbmVkKTsKKyAgICAgICAgICAgIHNldFNlc3Npb25Ub2tlbihoZWFkZXJzLCBjcmVkZW50aWFscyk7CisgICAgICAgIH0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJFcnJvciBzaWduaW5nIEhUVFAgcmVxdWVzdDoge30iLCBleC5nZXRNZXNzYWdlKCksIGV4KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkV4Y2VwdGlvbihleCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGh0dHBSZXF1ZXN0OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRTZXNzaW9uVG9rZW4oZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXJzLCBmaW5hbCBBd3NDcmVkZW50aWFscyBjcmVkZW50aWFscykgeworICAgICAgICAvLyBleHRyYWN0IHNlc3Npb24gdG9rZW4gaWYgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZAorICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGluc3RhbmNlb2YgQXdzU2Vzc2lvbkNyZWRlbnRpYWxzKSkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNlc3Npb25Ub2tlbiA9ICgoQXdzU2Vzc2lvbkNyZWRlbnRpYWxzKSBjcmVkZW50aWFscykuc2Vzc2lvblRva2VuKCk7CisgICAgICAgICAgICBpZiAoc2Vzc2lvblRva2VuICE9IG51bGwgJiYgIXNlc3Npb25Ub2tlbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBoZWFkZXJzLnB1dChYX0FNWl9TRUNVUklUWV9UT0tFTiwgc2Vzc2lvblRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRTaWduZWRIZWFkZXJzKGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaGVhZGVycywgZmluYWwgU2lnbmVkUmVxdWVzdCBzaWduZWQpIHsKKyAgICAgICAgaGVhZGVycy5yZW1vdmUoSHR0cFJlcXVlc3QuSGVhZGVycy5IT1NUKTsKKyAgICAgICAgaGVhZGVycy5wdXQoSE9TVCwgc2lnbmVkLnJlcXVlc3QoKS5ob3N0KCkpOworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHNpZ25lZEhlYWRlcnMgPSBzaWduZWQucmVxdWVzdCgpLmhlYWRlcnMoKTsKKyAgICAgICAgaGVhZGVycy5wdXQoWF9BTVpfREFURSwgZ2V0U2luZ2xlSGVhZGVyVmFsdWUoc2lnbmVkSGVhZGVycywgWF9BTVpfREFURSkpOworICAgICAgICBoZWFkZXJzLnB1dChBVVRIT1JJWkFUSU9OLCBnZXRTaW5nbGVIZWFkZXJWYWx1ZShzaWduZWRIZWFkZXJzLCBBVVRIT1JJWkFUSU9OKSk7CisgICAgICAgIGhlYWRlcnMucHV0KFhfQU1aX0NPTlRFTlRfU0hBMjU2LCBnZXRTaW5nbGVIZWFkZXJWYWx1ZShzaWduZWRIZWFkZXJzLCBYX0FNWl9DT05URU5UX1NIQTI1NikpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGdldFNpbmdsZUhlYWRlclZhbHVlKGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gaGVhZGVycywgZmluYWwgU3RyaW5nIGhlYWRlck5hbWUpIHsKKyAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gaGVhZGVyVmFsdWVzID0gbmV3IEhhc2hTZXQ8PihoZWFkZXJzLmNvbnRhaW5zS2V5KGhlYWRlck5hbWUpID8gaGVhZGVycy5nZXQoaGVhZGVyTmFtZSkgOiBDb2xsZWN0aW9ucy5lbXB0eVNldCgpKTsKKyAgICAgICAgaWYgKGhlYWRlclZhbHVlcy5zaXplKCkgIT0gMSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJFeHBlY3RlZCAxIGhlYWRlciAlcyBidXQgZm91bmQgJWQiLCBoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZXMuc2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhlYWRlclZhbHVlcy5pdGVyYXRvcigpLm5leHQoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIENvbnRlbnRTdHJlYW1Qcm92aWRlciB0b0NvbnRlbnRTdHJlYW0oZmluYWwgSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QpIHsKKyAgICAgICAgLy8gY2Fycnkgb3ZlciB0aGUgZW50aXR5IChvciBhbiBlbXB0eSBlbnRpdHksIGlmIG5vIGVudGl0eSBpcyBwcm92aWRlZCkKKyAgICAgICAgaWYgKCEoaHR0cFJlcXVlc3QuZ2V0Qm9keSgpIGluc3RhbmNlb2YgYnl0ZVtdKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRXhwZWN0ZWQgYnl0ZVtdIGluIEh0dHBSZXF1ZXN0IGJvZHkgYnV0IGdvdCAiICsgaHR0cFJlcXVlc3QuZ2V0Qm9keSgpLmdldENsYXNzKCkpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGJ5dGVbXSBib2R5ID0gKGJ5dGVbXSkgaHR0cFJlcXVlc3QuZ2V0Qm9keSgpOworICAgICAgICByZXR1cm4gKGJvZHkubGVuZ3RoICE9IDApID8gQ29udGVudFN0cmVhbVByb3ZpZGVyLmZyb21CeXRlQXJyYXkoYm9keSkgOiBDb250ZW50U3RyZWFtUHJvdmlkZXIuZnJvbVV0ZjhTdHJpbmcoIiIpOworICAgIH0KKworICAgIHByaXZhdGUgU2RrSHR0cFJlcXVlc3QgdG9TaWduYWJsZVJlcXVlc3QoZmluYWwgSHR0cFJlcXVlc3QgcmVxdWVzdCkgeworCisgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBjb250YWlucyB0aGUgbWluaW1hbCByZXF1aXJlZCBzZXQgb2YgaW5mb3JtYXRpb24KKyAgICAgICAgY2hlY2tOb3ROdWxsKHJlcXVlc3QuZ2V0VXJpKCksICJUaGUgcmVxdWVzdCBVUkkgbXVzdCBub3QgYmUgbnVsbCIpOworICAgICAgICBjaGVja05vdE51bGwocmVxdWVzdC5nZXRNZXRob2QoKSwgIlRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IG5vdCBiZSBudWxsIik7CisKKyAgICAgICAgLy8gY29udmVydCB0aGUgaGVhZGVycyB0byB0aGUgaW50ZXJuYWwgQVBJIGZvcm1hdAorICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcnMgPSByZXF1ZXN0LmhlYWRlcnMoKTsKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBoZWFkZXJzSW50ZXJuYWwgPSBuZXcgSGFzaE1hcDw+KCk7CisKKyAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBhZGQgdGhlIEhvc3QgaGVhZGVyIGFzIHRoZSBTaWduZXIgYWx3YXlzIGFkZHMgdGhlIGhvc3QgaGVhZGVyLgorICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gaGVhZGVyIDogaGVhZGVycy5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAvLyBTa2lwIGFkZGluZyB0aGUgSG9zdCBoZWFkZXIgYXMgdGhlIHNpZ25pbmcgcHJvY2VzcyB3aWxsIGFkZCBvbmUuCisgICAgICAgICAgICBpZiAoIWhlYWRlci5nZXRLZXkoKS5lcXVhbHNJZ25vcmVDYXNlKEh0dHBSZXF1ZXN0LkhlYWRlcnMuSE9TVCkpIHsKKyAgICAgICAgICAgICAgICBoZWFkZXJzSW50ZXJuYWwucHV0KGhlYWRlci5nZXRLZXkoKSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChoZWFkZXIuZ2V0VmFsdWUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gY29udmVydCB0aGUgcGFyYW1ldGVycyB0byB0aGUgaW50ZXJuYWwgQVBJIGZvcm1hdAorICAgICAgICBmaW5hbCBVUkkgdXJpID0gcmVxdWVzdC5nZXRVcmkoKTsKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBwYXJhbWV0ZXJzSW50ZXJuYWwgPSBleHRyYWN0UGFyYW1ldGVyc0Zyb21RdWVyeVN0cmluZyh1cmkuZ2V0UXVlcnkoKSk7CisKKyAgICAgICAgZmluYWwgVVJJIGVuZHBvaW50VXJpID0gVVJJLmNyZWF0ZSh1cmkuZ2V0U2NoZW1lKCkgKyAiOi8vIiArIHVyaS5nZXRIb3N0KCkpOworCisgICAgICAgIC8vIGNyZWF0ZSB0aGUgSFRUUCBBV1MgU2RrSHR0cFJlcXVlc3QgYW5kIGNhcnJ5IG92ZXIgaW5mb3JtYXRpb24KKyAgICAgICAgcmV0dXJuIFNka0h0dHBSZXF1ZXN0LmJ1aWxkZXIoKQorICAgICAgICAgICAgICAgIC51cmkoZW5kcG9pbnRVcmkpCisgICAgICAgICAgICAgICAgLmVuY29kZWRQYXRoKHVyaS5nZXRQYXRoKCkpCisgICAgICAgICAgICAgICAgLm1ldGhvZChTZGtIdHRwTWV0aG9kLmZyb21WYWx1ZShyZXF1ZXN0LmdldE1ldGhvZCgpKSkKKyAgICAgICAgICAgICAgICAuaGVhZGVycyhoZWFkZXJzSW50ZXJuYWwpCisgICAgICAgICAgICAgICAgLnJhd1F1ZXJ5UGFyYW1ldGVycyhwYXJhbWV0ZXJzSW50ZXJuYWwpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBleHRyYWN0UGFyYW1ldGVyc0Zyb21RdWVyeVN0cmluZyhmaW5hbCBTdHJpbmcgcXVlcnlTdHIpIHsKKworICAgICAgICBmaW5hbCBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBwYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8PigpOworCisgICAgICAgIGlmIChxdWVyeVN0ciA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNvbnZlcnQgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGludGVybmFsIEFQSSBmb3JtYXQKKyAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcgcXVlcnlQYXJhbSA6IHF1ZXJ5U3RyLnNwbGl0KCImIikpIHsKKworICAgICAgICAgICAgaWYgKCFxdWVyeVBhcmFtLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGtleVZhbHVlUGFpciA9IHF1ZXJ5UGFyYW0uc3BsaXQoIj0iLCAyKTsKKworICAgICAgICAgICAgICAgIC8vIHBhcmFtZXRlcnMgYXJlIGVuY29kZWQgaW4gdGhlIEhUVFAgcmVxdWVzdCwgd2UgbmVlZCB0byBkZWNvZGUgdGhlbSBoZXJlCisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGtleSA9IFNka0h0dHBVdGlscy51cmxEZWNvZGUoa2V5VmFsdWVQYWlyWzBdKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFsdWU7CisKKyAgICAgICAgICAgICAgICBpZiAoa2V5VmFsdWVQYWlyLmxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gU2RrSHR0cFV0aWxzLnVybERlY29kZShrZXlWYWx1ZVBhaXJbMV0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gaW5zZXJ0IHRoZSBwYXJhbWV0ZXIga2V5IGludG8gdGhlIG1hcCwgaWYgbm90IHlldCBwcmVzZW50CisgICAgICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXQoa2V5LCBuZXcgQXJyYXlMaXN0PD4oKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gYXBwZW5kIHRoZSBwYXJhbWV0ZXIgdmFsdWUgdG8gdGhlIGxpc3QgZm9yIHRoZSBnaXZlbiBrZXkKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmdldChrZXkpLmFkZCh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tOb3ROdWxsKGZpbmFsIE9iamVjdCBvYmosIGZpbmFsIFN0cmluZyBlcnJNc2cpIHsKKyAgICAgICAgaWYgKG9iaiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGVyck1zZyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2V4Y2VwdGlvbi9SZXNwb25zZUV4Y2VwdGlvbi5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9leGNlcHRpb24vUmVzcG9uc2VFeGNlcHRpb24uamF2YQppbmRleCAzNWNhMWUyLi4xYzBkOGU3IDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2V4Y2VwdGlvbi9SZXNwb25zZUV4Y2VwdGlvbi5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvZXhjZXB0aW9uL1Jlc3BvbnNlRXhjZXB0aW9uLmphdmEKQEAgLTE4LDY0ICsxOCwzNCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbjsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOwogCiAvKioKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKICAqLwogcHVibGljIGNsYXNzIFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICBwcml2YXRlIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSByZXNwb25zZVN0YXR1c0NvZGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVtb3RlU3RhY2tUcmFjZTsKLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8U3RyaW5nPiByZW1vdGVFeGNlcHRpb25IaWVyYXJjaHk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYXR0cmlidXRlczsKKyAgICBwcml2YXRlIGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyByZXNwb25zZVN0YXR1c0NvZGU7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIFJlc3BvbnNlRXhjZXB0aW9uKGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSByZXNwb25zZVN0YXR1c0NvZGUsIGZpbmFsIFN0cmluZyBzZXJ2ZXJNZXNzYWdlKSB7Ci0gICAgICAgIHRoaXMocmVzcG9uc2VTdGF0dXNDb2RlLCBzZXJ2ZXJNZXNzYWdlLCBudWxsLCBudWxsKTsKKyAgICBwdWJsaWMgUmVzcG9uc2VFeGNlcHRpb24oZmluYWwgSHR0cFJlc3BvbnNlU3RhdHVzIHJlc3BvbnNlU3RhdHVzQ29kZSwgZmluYWwgU3RyaW5nIHNlcnZlck1lc3NhZ2UpIHsKKyAgICAgICAgdGhpcyhyZXNwb25zZVN0YXR1c0NvZGUsIHNlcnZlck1lc3NhZ2UsIG51bGwpOwogICAgIH0KIAotICAgIHB1YmxpYyBSZXNwb25zZUV4Y2VwdGlvbihmaW5hbCBSZXNwb25zZVN0YXR1c0NvZGUgcmVzcG9uc2VTdGF0dXNDb2RlLCBmaW5hbCBTdHJpbmcgc2VydmVyTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IHJlbW90ZUV4Y2VwdGlvbkhpZXJhcmNoeSwgZmluYWwgU3RyaW5nIHJlbW90ZVN0YWNrVHJhY2UpIHsKLSAgICAgICAgdGhpcyhyZXNwb25zZVN0YXR1c0NvZGUsIHNlcnZlck1lc3NhZ2UsIHJlbW90ZUV4Y2VwdGlvbkhpZXJhcmNoeSwgcmVtb3RlU3RhY2tUcmFjZSwgbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIFJlc3BvbnNlRXhjZXB0aW9uKGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSByZXNwb25zZVN0YXR1c0NvZGUsIGZpbmFsIFN0cmluZyBzZXJ2ZXJNZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gcmVtb3RlRXhjZXB0aW9uSGllcmFyY2h5LCBmaW5hbCBTdHJpbmcgcmVtb3RlU3RhY2tUcmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IHN0YXR1c0F0dHJpYnV0ZXMpIHsKKyAgICBwdWJsaWMgUmVzcG9uc2VFeGNlcHRpb24oZmluYWwgSHR0cFJlc3BvbnNlU3RhdHVzIHJlc3BvbnNlU3RhdHVzQ29kZSwgZmluYWwgU3RyaW5nIHNlcnZlck1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZW1vdGVFeGNlcHRpb24pIHsKICAgICAgICAgc3VwZXIoc2VydmVyTWVzc2FnZSk7CiAgICAgICAgIHRoaXMucmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXNDb2RlOwotICAgICAgICB0aGlzLnJlbW90ZUV4Y2VwdGlvbkhpZXJhcmNoeSA9IHJlbW90ZUV4Y2VwdGlvbkhpZXJhcmNoeSAhPSBudWxsID8gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChyZW1vdGVFeGNlcHRpb25IaWVyYXJjaHkpIDogbnVsbDsKLSAgICAgICAgdGhpcy5yZW1vdGVTdGFja1RyYWNlID0gcmVtb3RlU3RhY2tUcmFjZTsKLSAgICAgICAgdGhpcy5hdHRyaWJ1dGVzID0gc3RhdHVzQXR0cmlidXRlcyAhPSBudWxsID8gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKHN0YXR1c0F0dHJpYnV0ZXMpIDogbnVsbDsKKyAgICAgICAgdGhpcy5yZW1vdGVFeGNlcHRpb24gPSByZW1vdGVFeGNlcHRpb247CiAgICAgfQogCi0gICAgcHVibGljIFJlc3BvbnNlU3RhdHVzQ29kZSBnZXRSZXNwb25zZVN0YXR1c0NvZGUoKSB7CisgICAgcHVibGljIEh0dHBSZXNwb25zZVN0YXR1cyBnZXRSZXNwb25zZVN0YXR1c0NvZGUoKSB7CiAgICAgICAgIHJldHVybiByZXNwb25zZVN0YXR1c0NvZGU7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVGhlIHN0YWNrdHJhY2UgcHJvZHVjZWQgYnkgdGhlIHJlbW90ZSBzZXJ2ZXIuCisgICAgICogVGhlIGV4Y2VwdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZlci4KICAgICAgKi8KLSAgICBwdWJsaWMgT3B0aW9uYWw8U3RyaW5nPiBnZXRSZW1vdGVTdGFja1RyYWNlKCkgewotICAgICAgICByZXR1cm4gT3B0aW9uYWwub2ZOdWxsYWJsZShyZW1vdGVTdGFja1RyYWNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbGlzdCBvZiBleGNlcHRpb25zIGdlbmVyYXRlZCBieSB0aGUgc2VydmVyIHN0YXJ0aW5nIHdpdGggdGhlIHRvcC1tb3N0IG9uZSBmb2xsb3dlZCBieSBpdHMgImNhdXNlIi4gVGhhdAotICAgICAqIGNhdXNlIGlzIHRoZW4gZm9sbG93ZWQgYnkgaXRzIGNhdXNlIGFuZCBzbyBvbiBkb3duIHRoZSBsaW5lLgotICAgICAqLwotICAgIHB1YmxpYyBPcHRpb25hbDxMaXN0PFN0cmluZz4+IGdldFJlbW90ZUV4Y2VwdGlvbkhpZXJhcmNoeSgpIHsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUocmVtb3RlRXhjZXB0aW9uSGllcmFyY2h5KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIGFueSBzdGF0dXMgYXR0cmlidXRlcyBmcm9tIHRoZSByZXNwb25zZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgT3B0aW9uYWw8TWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0U3RhdHVzQXR0cmlidXRlcygpIHsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUoYXR0cmlidXRlcyk7CisgICAgcHVibGljIFN0cmluZyBnZXRSZW1vdGVFeGNlcHRpb24oKSB7CisgICAgICAgIHJldHVybiByZW1vdGVFeGNlcHRpb247CiAgICAgfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9HcmVtbGluUmVzcG9uc2VIYW5kbGVyLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvR3JlbWxpblJlc3BvbnNlSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Y2ZiMTYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvR3JlbWxpblJlc3BvbnNlSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5TaW1wbGVDaGFubmVsSW5ib3VuZEhhbmRsZXI7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKK2ltcG9ydCBpby5uZXR0eS51dGlsLkF0dHJpYnV0ZUtleTsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuZXhjZXB0aW9uLkV4Y2VwdGlvblV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHRTZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLlJlc3BvbnNlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkV4Y2VwdGlvbkhlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CisKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY1JlZmVyZW5jZTsKKworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuTEFTVF9DT05URU5UX1JFQURfUkVTUE9OU0U7CisKKy8qKgorICogV3JpdGVzIHJlc3BvbnNlcyB0byB0aGUge0BsaW5rIFJlc3VsdFNldH0gb2YgYSByZXF1ZXN0IGFzIHRoZSB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfSBvYmplY3RzIGFyZSBkZXNlcmlhbGl6ZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBHcmVtbGluUmVzcG9uc2VIYW5kbGVyIGV4dGVuZHMgU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyPFJlc3BvbnNlTWVzc2FnZT4geworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFRocm93YWJsZT4gSU5CT1VORF9TU0xfRVhDRVBUSU9OID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoImluYm91bmRTc2xFeGNlcHRpb24iKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JlbWxpblJlc3BvbnNlSGFuZGxlci5jbGFzcyk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFJlc3BvbnNlRXhjZXB0aW9uPiBDQVVHSFRfRVhDRVBUSU9OID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoImNhdWdodEV4Y2VwdGlvbiIpOworICAgIHByaXZhdGUgZmluYWwgQXRvbWljUmVmZXJlbmNlPFJlc3VsdFNldD4gcGVuZGluZ1Jlc3VsdFNldDsKKworICAgIHB1YmxpYyBHcmVtbGluUmVzcG9uc2VIYW5kbGVyKGZpbmFsIEF0b21pY1JlZmVyZW5jZTxSZXN1bHRTZXQ+IHBlbmRpbmcpIHsKKyAgICAgICAgdGhpcy5wZW5kaW5nUmVzdWx0U2V0ID0gcGVuZGluZzsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjaGFubmVsSW5hY3RpdmUoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIG9jY3VycyB3aGVuIHRoZSBzZXJ2ZXIgc2h1dHMgZG93biBpbiBhIGRpc29yZGVybHkgZmFzaGlvbiwgb3RoZXJ3aXNlIGluIGFuIG9yZGVybHkgc2h1dGRvd24gdGhlIHNlcnZlcgorICAgICAgICAvLyBzaG91bGQgZmlyZSBvZmYgYSBjbG9zZSBtZXNzYWdlIHdoaWNoIHdpbGwgcHJvcGVybHkgcmVsZWFzZSB0aGUgZHJpdmVyLgorICAgICAgICBzdXBlci5jaGFubmVsSW5hY3RpdmUoY3R4KTsKKworICAgICAgICBmaW5hbCBSZXN1bHRTZXQgY3VycmVudCA9IHBlbmRpbmdSZXN1bHRTZXQuZ2V0QW5kU2V0KG51bGwpOworICAgICAgICBpZiAoY3VycmVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBjdXJyZW50Lm1hcmtFcnJvcihuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb25uZWN0aW9uIHRvIHNlcnZlciBpcyBubyBsb25nZXIgYWN0aXZlIikpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgY2hhbm5lbFJlYWQwKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjaGFubmVsSGFuZGxlckNvbnRleHQsIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSkgeworICAgICAgICBmaW5hbCBIdHRwUmVzcG9uc2VTdGF0dXMgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLmdldFN0YXR1cygpID09IG51bGwgPyBudWxsIDogcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpOworICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0U2V0ID0gcGVuZGluZ1Jlc3VsdFNldC5nZXQoKTsKKworICAgICAgICBpZiAoKG51bGwgPT0gc3RhdHVzQ29kZSkgfHwgKHN0YXR1c0NvZGUgPT0gSHR0cFJlc3BvbnNlU3RhdHVzLk9LKSkgeworICAgICAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGRhdGEgPSByZXNwb25zZS5nZXRSZXN1bHQoKS5nZXREYXRhKCk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGJ1bGtlZCA9IGNoYW5uZWxIYW5kbGVyQ29udGV4dC5jaGFubmVsKCkuYXR0cihIdHRwR3JlbWxpblJlc3BvbnNlU3RyZWFtRGVjb2Rlci5JU19CVUxLRUQpLmdldCgpOworICAgICAgICAgICAgLy8gdW5yb2xscyB0aGUgY29sbGVjdGlvbiBpbnRvIGluZGl2aWR1YWwgcmVzdWx0cyB0byBiZSBoYW5kbGVkIGJ5IHRoZSBSZXN1bHRTZXQuCisgICAgICAgICAgICBpZiAoYnVsa2VkKSB7CisgICAgICAgICAgICAgICAgZm9yIChJdGVyYXRvcjxPYmplY3Q+IGl0ZXIgPSBkYXRhLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOyApIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG9iaiA9IGl0ZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGJ1bGsgPSAobG9uZykgaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIERlZmF1bHRSZW1vdGVUcmF2ZXJzZXI8T2JqZWN0PiBpdGVtID0gbmV3IERlZmF1bHRSZW1vdGVUcmF2ZXJzZXI8PihvYmosIGJ1bGspOworICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXQuYWRkKG5ldyBSZXN1bHQoaXRlbSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gLT4gcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KGl0ZW0pKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgYSAic3VjY2VzcyIgYnV0IHJlcHJlc2VudHMgbm8gcmVzdWx0cyBvdGhlcndpc2UgaXQgaXMgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9IEh0dHBSZXNwb25zZVN0YXR1cy5OT19DT05URU5UKSB7CisgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgZXJyb3IgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHN1YnNlcXVlbnQgSHR0cENvbnRlbnQgY29taW5nIChwcm9iYWJseSBqdXN0IHRyYWlsZXJzKS4gQWxsCisgICAgICAgICAgICAgICAgLy8gY29udGVudCBzaG91bGQgYmUgcmVhZCBmaXJzdCBiZWZvcmUgbWFya2luZyB0aGUgUmVzdWx0U2V0IG9yIGVsc2UgdGhpcyBjaGFubmVsIG1pZ2h0IGdldCByZXVzZWQgdG9vIGVhcmx5LgorICAgICAgICAgICAgICAgIGNoYW5uZWxIYW5kbGVyQ29udGV4dC5jaGFubmVsKCkuYXR0cihDQVVHSFRfRVhDRVBUSU9OKS5zZXQoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVzcG9uc2VFeGNlcHRpb24ocmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLCByZXNwb25zZS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmdldFN0YXR1cygpLmdldEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHJlYW0gaXMgZG9uZSB3aGVuIHRoZSBsYXN0IGNvbnRlbnQgc2lnbmFsaW5nIHJlc3BvbnNlIG1lc3NhZ2UgaXMgcmVhZC4KKyAgICAgICAgaWYgKExBU1RfQ09OVEVOVF9SRUFEX1JFU1BPTlNFID09IHJlc3BvbnNlKSB7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcnMgPSBwZW5kaW5nUmVzdWx0U2V0LmdldEFuZFNldChudWxsKTsKKyAgICAgICAgICAgIGlmIChycyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gY2hhbm5lbEhhbmRsZXJDb250ZXh0LmNoYW5uZWwoKS5hdHRyKENBVUdIVF9FWENFUFRJT04pLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJzLm1hcmtDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJzLm1hcmtFcnJvcihjaGFubmVsSGFuZGxlckNvbnRleHQuY2hhbm5lbCgpLmF0dHIoQ0FVR0hUX0VYQ0VQVElPTikuZ2V0QW5kU2V0KG51bGwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBleGNlcHRpb25DYXVnaHQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgVGhyb3dhYmxlIGNhdXNlKSB7CisgICAgICAgIC8vIGlmIHRoaXMgaGFwcGVucyBlbm91Z2ggdGltZXMgKGxpa2UgdGhlIGNsaWVudCBpcyB1bmFibGUgdG8gZGVzZXJpYWxpemUgYSByZXNwb25zZSkgdGhlIHBlbmRpbmcKKyAgICAgICAgLy8gbWVzc2FnZXMgcXVldWUgd2lsbCBub3QgY2xlYXIuICB3b25kZXIgaWYgdGhlcmUgaXMgc29tZSB3YXkgdG8gY29wZSB3aXRoIHRoYXQuICBvZiBjb3Vyc2UsIGlmCisgICAgICAgIC8vIHRoZXJlIGFyZSB0aGF0IG1hbnkgZmFpbHVyZXMgc29tZW9uZSB3b3VsZCB0YWtlIG5vdGljZSBhbmQgaG9wZWZ1bGx5IHN0b3AgdGhlIGNsaWVudC4KKyAgICAgICAgbG9nZ2VyLmVycm9yKCJDb3VsZCBub3QgcHJvY2VzcyB0aGUgcmVzcG9uc2UiLCBjYXVzZSk7CisKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdFNldCA9IHRoaXMucGVuZGluZ1Jlc3VsdFNldC5nZXRBbmRTZXQobnVsbCk7CisgICAgICAgIGlmIChyZXN1bHRTZXQgIT0gbnVsbCkgcmVzdWx0U2V0Lm1hcmtFcnJvcihjYXVzZSk7CisKKyAgICAgICAgaWYgKEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoY2F1c2UpIGluc3RhbmNlb2YgU1NMRXhjZXB0aW9uKSB7CisgICAgICAgICAgICAvLyBpbmJvdW5kIHNzbCBlcnJvciBjYW4gaGFwcGVuIHdpdGggdGxzIDEuMyBiZWNhdXNlIGNsaWVudCBjZXJ0aWZpY2F0aW9uIGF1dGggY2FuIGZhaWwgYWZ0ZXIgdGhlIGhhbmRzaGFrZSBjb21wbGV0ZXMKKyAgICAgICAgICAgIC8vIHN0b3JlIHRoZSBpbmJvdW5kIHNzbCBlcnJvciBzbyB0aGF0IG91dGJvdW5kIGNhbiByZXRyaWV2ZSBpdAorICAgICAgICAgICAgY3R4LmNoYW5uZWwoKS5hdHRyKElOQk9VTkRfU1NMX0VYQ0VQVElPTikuc2V0KGNhdXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHNlcmlhbGl6YXRpb24gZXhjZXB0aW9ucyBzaG91bGQgbm90IGNsb3NlIHRoZSBjaGFubmVsIC0gdGhhdCdzIHdvcnRoIGEgcmV0cnkKKyAgICAgICAgaWYgKCFJdGVyYXRvclV0aWxzLmFueU1hdGNoKEV4Y2VwdGlvblV0aWxzLmdldFRocm93YWJsZUxpc3QoY2F1c2UpLml0ZXJhdG9yKCksIHQgLT4gdCBpbnN0YW5jZW9mIFNlcmlhbGl6YXRpb25FeGNlcHRpb24pKQorICAgICAgICAgICAgaWYgKGN0eC5jaGFubmVsKCkuaXNBY3RpdmUoKSkgY3R4LmNsb3NlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXIuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9IdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzZTFiOQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9IdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZlV0aWw7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkOworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXI7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwQ29udGVudDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cEhlYWRlck5hbWVzOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5MYXN0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC56aXAuRGF0YUZvcm1hdEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLkluZmxhdGVyOworCisvKioKKyAqIEhhbmRsZXMgZGVjb21wcmVzc2lvbiBvZiBjb250ZW50IHdoZW4gdGhlIHJlc3BvbnNlIGNvbnRhaW5zIHRoZSAiQ29udGVudC1FbmNvZGluZyIgaGVhZGVyLiBDdXJyZW50bHkgc3VwcG9ydHMgImRlZmxhdGUiLgorICogVGhpcyBjbGFzcyBpcyBzcGVjaWZpY2FsbHkgbWVhbnQgdG8gd29yayB3aXRoIHNlcmlhbGl6ZWQgR3JhcGhCaW5hcnkgY2h1bmtzIGFzIHRoZXkgbmVlZCB0byBiZSBpbmZsYXRlZCBwZXIgY2h1bmsgc3VjaAorICogdGhhdCB0aGUgY2h1bmsgZW5kcyB3aXRoIGEgTWFya2VyLkVORF9PRl9TVFJFQU0uCisgKi8KK0BDaGFubmVsSGFuZGxlci5TaGFyYWJsZQorcHVibGljIGNsYXNzIEh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXIgZXh0ZW5kcyBDaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8SW5mbGF0ZXI+IElORkxBVEVSID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoImluZmxhdGVyIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9CVUZGRVJfU0laRSA9IDE2OyAvLyBEb24ndCB3YW50IGEgYnVmZmVyIHRvbyBzbWFsbCBhcyBpdCBjb3VsZCBjYXVzZSBsb3RzIG9mIHJlc2l6aW5nLgorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2hhbm5lbFJlYWQoQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgT2JqZWN0IG1zZykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIE9iamVjdCBvdXQgPSBtc2c7CisKKyAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSAmJiAoaGFzRGVmbGF0ZVRyYW5zZmVyRW5jb2RpbmcoKChIdHRwUmVzcG9uc2UpIG1zZykuaGVhZGVycygpKSkpIHsKKyAgICAgICAgICAgIGN0eC5hdHRyKElORkxBVEVSKS5zZXQobmV3IEluZmxhdGVyKCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIEh0dHBDb250ZW50KSB7CisgICAgICAgICAgICBmaW5hbCBJbmZsYXRlciBkZWNvbXByZXNzb3IgPSBjdHguYXR0cihJTkZMQVRFUikuZ2V0KCk7CisgICAgICAgICAgICBpZiAobnVsbCA9PSBkZWNvbXByZXNzb3IpIHsKKyAgICAgICAgICAgICAgICBzdXBlci5jaGFubmVsUmVhZChjdHgsIG1zZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBCeXRlQnVmIGNodW5rID0gKChIdHRwQ29udGVudCkgbXNnKS5jb250ZW50KCk7CisgICAgICAgICAgICBkZWNvbXByZXNzb3Iuc2V0SW5wdXQoQnl0ZUJ1ZlV0aWwuZ2V0Qnl0ZXMoY2h1bmspKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBkZWNvbXByZXNzZWRTaXplRXN0aW1hdGUgPSBjaHVuay5yZWFkYWJsZUJ5dGVzKCkgKiA4OworICAgICAgICAgICAgYnl0ZVtdIG91dEJ1ZiA9IG5ldyBieXRlW01hdGgubWF4KGRlY29tcHJlc3NlZFNpemVFc3RpbWF0ZSwgTUlOX0JVRkZFUl9TSVpFKV07CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW50IHdyaXRlSWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gZGVjb21wcmVzc29yLmluZmxhdGUob3V0QnVmLCB3cml0ZUlkeCwgb3V0QnVmLmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoYnl0ZXNXcml0dGVuID09IChvdXRCdWYubGVuZ3RoIC0gd3JpdGVJZHgpKSB7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlSWR4ICs9IGJ5dGVzV3JpdHRlbjsKKyAgICAgICAgICAgICAgICAgICAgb3V0QnVmID0gQXJyYXlzLmNvcHlPZihvdXRCdWYsIG91dEJ1Zi5sZW5ndGggKiAyKTsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXNXcml0dGVuID0gZGVjb21wcmVzc29yLmluZmxhdGUob3V0QnVmLCB3cml0ZUlkeCwgb3V0QnVmLmxlbmd0aCAtIHdyaXRlSWR4KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3cml0ZUlkeCArPSBieXRlc1dyaXR0ZW47CisgICAgICAgICAgICAgICAgb3V0ID0gKChIdHRwQ29udGVudCkgbXNnKS5yZXBsYWNlKFVucG9vbGVkLndyYXBwZWRCdWZmZXIob3V0QnVmKS53cml0ZXJJbmRleCh3cml0ZUlkeCkpOworICAgICAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50VXRpbC5yZWxlYXNlKG1zZyk7CisKKyAgICAgICAgICAgICAgICBpZiAob3V0IGluc3RhbmNlb2YgTGFzdEh0dHBDb250ZW50KSB7IGN0eC5hdHRyKElORkxBVEVSKS5nZXRBbmRTZXQobnVsbCkuZW5kKCk7IH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKERhdGFGb3JtYXRFeGNlcHRpb24gZGZlKSB7CisgICAgICAgICAgICAgICAgY3R4LmF0dHIoSU5GTEFURVIpLmdldEFuZFNldChudWxsKS5lbmQoKTsKKyAgICAgICAgICAgICAgICBjdHguZmlyZUV4Y2VwdGlvbkNhdWdodChkZmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN1cGVyLmNoYW5uZWxSZWFkKGN0eCwgb3V0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzRGVmbGF0ZVRyYW5zZmVyRW5jb2RpbmcoSHR0cEhlYWRlcnMgaGVhZGVycykgeworICAgICAgICBmb3IgKFN0cmluZyB2YWx1ZSA6IGhlYWRlcnMuZ2V0QWxsKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX0VOQ09ESU5HKSkgeworICAgICAgICAgICAgaWYgKCJkZWZsYXRlIi5lcXVhbHModmFsdWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9IdHRwR3JlbWxpblJlcXVlc3RFbmNvZGVyLmphdmEKaW5kZXggY2UyNDgwOS4uMGY4ZWRlNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvSHR0cEdyZW1saW5SZXF1ZXN0RW5jb2Rlci5qYXZhCkBAIC0xOSw3MyArMTksMTI0IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7CiAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXI7CiBpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5NZXNzYWdlVG9NZXNzYWdlRW5jb2RlcjsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdDsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXM7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBNZXRob2Q7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFZlcnNpb247CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnR1cGxlLlBhaXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuSHR0cFJlcXVlc3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdEludGVyY2VwdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlVzZXJBZ2VudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5hdXRoLkF1dGguQXV0aGVudGljYXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLlJlc3BvbnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJUb2tlbnM7CiAKK2ltcG9ydCBqYXZhLm5ldC5JbmV0U29ja2V0QWRkcmVzczsKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlVuYXJ5T3BlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyLkluYWN0aXZlQ2hhbm5lbEhhbmRsZXIuUkVRVUVTVF9TRU5UOwogCiAvKioKICAqIENvbnZlcnRzIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gdG8gYSB7QGNvZGUgSHR0cFJlcXVlc3R9LgogICovCiBAQ2hhbm5lbEhhbmRsZXIuU2hhcmFibGUKIHB1YmxpYyBmaW5hbCBjbGFzcyBIdHRwR3JlbWxpblJlcXVlc3RFbmNvZGVyIGV4dGVuZHMgTWVzc2FnZVRvTWVzc2FnZUVuY29kZXI8UmVxdWVzdE1lc3NhZ2U+IHsKKwogICAgIHByaXZhdGUgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplcjsKICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdXNlckFnZW50RW5hYmxlZDsKLSAgICBwcml2YXRlIGZpbmFsIFVuYXJ5T3BlcmF0b3I8RnVsbEh0dHBSZXF1ZXN0PiBpbnRlcmNlcHRvcjsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYnVsa1Jlc3VsdHM7CisgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFBhaXI8U3RyaW5nLCA/IGV4dGVuZHMgUmVxdWVzdEludGVyY2VwdG9yPj4gaW50ZXJjZXB0b3JzOworICAgIHByaXZhdGUgZmluYWwgVVJJIHVyaTsKIAotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIEh0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIoZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciwgZmluYWwgVW5hcnlPcGVyYXRvcjxGdWxsSHR0cFJlcXVlc3Q+IGludGVyY2VwdG9yKSB7CisgICAgcHVibGljIEh0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIoZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFBhaXI8U3RyaW5nLCA/IGV4dGVuZHMgUmVxdWVzdEludGVyY2VwdG9yPj4gaW50ZXJjZXB0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlckFnZW50RW5hYmxlZCwgYm9vbGVhbiBidWxrUmVzdWx0cywgZmluYWwgVVJJIHVyaSkgewogICAgICAgICB0aGlzLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyOwotICAgICAgICB0aGlzLmludGVyY2VwdG9yID0gaW50ZXJjZXB0b3I7Ci0gICAgICAgIHRoaXMudXNlckFnZW50RW5hYmxlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIEh0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIoZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciwgZmluYWwgVW5hcnlPcGVyYXRvcjxGdWxsSHR0cFJlcXVlc3Q+IGludGVyY2VwdG9yLCBib29sZWFuIHVzZXJBZ2VudEVuYWJsZWQpIHsKLSAgICAgICAgdGhpcy5zZXJpYWxpemVyID0gc2VyaWFsaXplcjsKLSAgICAgICAgdGhpcy5pbnRlcmNlcHRvciA9IGludGVyY2VwdG9yOworICAgICAgICB0aGlzLmludGVyY2VwdG9ycyA9IGludGVyY2VwdG9yczsKICAgICAgICAgdGhpcy51c2VyQWdlbnRFbmFibGVkID0gdXNlckFnZW50RW5hYmxlZDsKKyAgICAgICAgdGhpcy5idWxrUmVzdWx0cyA9IGJ1bGtSZXN1bHRzOworICAgICAgICB0aGlzLnVyaSA9IHVyaTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBlbmNvZGUoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGNoYW5uZWxIYW5kbGVyQ29udGV4dCwgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIGZpbmFsIExpc3Q8T2JqZWN0PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3RyaW5nIG1pbWVUeXBlID0gc2VyaWFsaXplci5taW1lVHlwZXNTdXBwb3J0ZWQoKVswXTsKLSAgICAgICAgLy8gb25seSBHcmFwaFNPTjMgYW5kIEdyYXBoQmluYXJ5IHJlY29tbWVuZGVkIGZvciBzZXJpYWxpemF0aW9uIG9mIEJ5dGVjb2RlIHJlcXVlc3RzCi0gICAgICAgIGlmIChyZXF1ZXN0TWVzc2FnZS5nZXRBcmcoImdyZW1saW4iKSBpbnN0YW5jZW9mIEJ5dGVjb2RlICYmCi0gICAgICAgICAgICAgICAgIW1pbWVUeXBlLmVxdWFscyhTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMykgJiYKLSAgICAgICAgICAgICAgICAhbWltZVR5cGUuZXF1YWxzKFNlclRva2Vucy5NSU1FX0dSQVBIQklOQVJZX1YxKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJlc3BvbnNlRXhjZXB0aW9uKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX1NFUklBTElaQVRJT04sIFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc2VyaWFsaXphdGlvbiBvZiB0aGlzIHJlcXVlc3QgWyVzXSAtIGl0IGNvdWxkIG5vdCBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIgLSBSZWFzb246IG9ubHkgR3JhcGhTT04zIGFuZCBHcmFwaEJpbmFyeSByZWNvbW1lbmRlZCBmb3Igc2VyaWFsaXphdGlvbiBvZiBCeXRlY29kZSByZXF1ZXN0cywgYnV0IHVzZWQgJXMiLAotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZSwgc2VyaWFsaXplci5nZXRDbGFzcygpLmdldE5hbWUoKSkpOworICAgICAgICBpZiAocmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGQoImdyZW1saW4iKSBpbnN0YW5jZW9mIEdyZW1saW5MYW5nKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFeGNlcHRpb24oSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNULCBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24gb2YgdGhpcyByZXF1ZXN0IFslc10gLSBpdCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUgc2VydmVyIC0gUmVhc29uOiBHcmVtbGluTGFuZyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VuZCBhcyBxdWVyeS4iLAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZSkpOwogICAgICAgICB9CiAKKyAgICAgICAgZmluYWwgSW5ldFNvY2tldEFkZHJlc3MgcmVtb3RlQWRkcmVzcyA9IGdldFJlbW90ZUFkZHJlc3MoY2hhbm5lbEhhbmRsZXJDb250ZXh0LmNoYW5uZWwoKSk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KHJlcXVlc3RNZXNzYWdlLCBjaGFubmVsSGFuZGxlckNvbnRleHQuYWxsb2MoKSk7Ci0gICAgICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgcmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIvIiwgYnVmZmVyKTsKLSAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycygpLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBtaW1lVHlwZSk7Ci0gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMoKS5hZGQoSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfTEVOR1RILCBidWZmZXIucmVhZGFibGVCeXRlcygpKTsKLSAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycygpLmFkZChIdHRwSGVhZGVyTmFtZXMuQUNDRVBULCBtaW1lVHlwZSk7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcnNNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBoZWFkZXJzTWFwLnB1dChIdHRwUmVxdWVzdC5IZWFkZXJzLkhPU1QsIHJlbW90ZUFkZHJlc3MuZ2V0QWRkcmVzcygpLmdldEhvc3RBZGRyZXNzKCkpOworICAgICAgICAgICAgaGVhZGVyc01hcC5wdXQoSHR0cFJlcXVlc3QuSGVhZGVycy5BQ0NFUFQsIG1pbWVUeXBlKTsKKyAgICAgICAgICAgIGhlYWRlcnNNYXAucHV0KEh0dHBSZXF1ZXN0LkhlYWRlcnMuQUNDRVBUX0VOQ09ESU5HLCBIdHRwUmVxdWVzdC5IZWFkZXJzLkRFRkxBVEUpOwogICAgICAgICAgICAgaWYgKHVzZXJBZ2VudEVuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMoKS5hZGQoSHR0cEhlYWRlck5hbWVzLlVTRVJfQUdFTlQsIFVzZXJBZ2VudC5VU0VSX0FHRU5UKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJzTWFwLnB1dChIdHRwUmVxdWVzdC5IZWFkZXJzLlVTRVJfQUdFTlQsIFVzZXJBZ2VudC5VU0VSX0FHRU5UKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9iamVjdHMuYWRkKGludGVyY2VwdG9yLmFwcGx5KHJlcXVlc3QpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFeGNlcHRpb24oUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfU0VSSUFMSVpBVElPTiwgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBzZXJpYWxpemF0aW9uIG9mIHRoaXMgcmVxdWVzdCBbJXNdIC0gaXQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlIHNlcnZlciAtIFJlYXNvbjogJXMiLAorICAgICAgICAgICAgaWYgKGJ1bGtSZXN1bHRzKSB7CisgICAgICAgICAgICAgICAgaGVhZGVyc01hcC5wdXQoVG9rZW5zLkJVTEtfUkVTVUxUUywgInRydWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQWRkIFgtVHJhbnNhY3Rpb24tSWQgaGVhZGVyIHRvIGNvbXBseSB3aXRoIHNwZWNpZmljYXRpb24ncyBkdWFsIHRyYW5zbWlzc2lvbiAoaGVhZGVyIGFuZCBib2R5KQorICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRyYW5zYWN0aW9uSWQgPSByZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZChUb2tlbnMuQVJHU19UUkFOU0FDVElPTl9JRCk7CisgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25JZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaGVhZGVyc01hcC5wdXQoVG9rZW5zLkhlYWRlcnMuVFJBTlNBQ1RJT05fSUQsIHRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBIdHRwUmVxdWVzdCBncmVtbGluUmVxdWVzdCA9IG5ldyBIdHRwUmVxdWVzdChoZWFkZXJzTWFwLCByZXF1ZXN0TWVzc2FnZSwgdXJpKTsKKworICAgICAgICAgICAgZm9yIChmaW5hbCBQYWlyPFN0cmluZywgPyBleHRlbmRzIFJlcXVlc3RJbnRlcmNlcHRvcj4gaW50ZXJjZXB0b3IgOiBpbnRlcmNlcHRvcnMpIHsKKyAgICAgICAgICAgICAgICBncmVtbGluUmVxdWVzdCA9IGludGVyY2VwdG9yLmdldFJpZ2h0KCkuYXBwbHkoZ3JlbWxpblJlcXVlc3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgZmluYWxSZXF1ZXN0ID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlcXVlc3QoSHR0cFZlcnNpb24uSFRUUF8xXzEsIEh0dHBNZXRob2QuUE9TVCwKKyAgICAgICAgICAgICAgICAgICAgdXJpLmdldFBhdGgoKSwgY29udmVydEJvZHkoZ3JlbWxpblJlcXVlc3QpKTsKKyAgICAgICAgICAgIGdyZW1saW5SZXF1ZXN0LmhlYWRlcnMoKS5mb3JFYWNoKChrLCB2KSAtPiBmaW5hbFJlcXVlc3QuaGVhZGVycygpLmFkZChrLCB2KSk7CisKKyAgICAgICAgICAgIG9iamVjdHMuYWRkKGZpbmFsUmVxdWVzdCk7CisgICAgICAgICAgICBjaGFubmVsSGFuZGxlckNvbnRleHQuY2hhbm5lbCgpLmF0dHIoUkVRVUVTVF9TRU5UKS5zZXQodHJ1ZSk7CisgICAgICAgIH0gY2F0Y2ggKEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFeGNlcHRpb24oSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNULCBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGF1dGhlbnRpY2F0aW9uIFslc10gLSBpdCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUgc2VydmVyIC0gUmVhc29uOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLCBleCkpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgSW5ldFNvY2tldEFkZHJlc3MgZ2V0UmVtb3RlQWRkcmVzcyhDaGFubmVsIGNoYW5uZWwpIHsKKyAgICAgICAgZmluYWwgSW5ldFNvY2tldEFkZHJlc3MgcmVtb3RlQWRkcmVzcyA9IChJbmV0U29ja2V0QWRkcmVzcykgY2hhbm5lbC5yZW1vdGVBZGRyZXNzKCk7CisgICAgICAgIGlmIChyZW1vdGVBZGRyZXNzID09IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBzc2xFeGNlcHRpb24gPSBjaGFubmVsLmF0dHIoR3JlbWxpblJlc3BvbnNlSGFuZGxlci5JTkJPVU5EX1NTTF9FWENFUFRJT04pLmdldCgpOworICAgICAgICAgICAgaWYgKHNzbEV4Y2VwdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlJlcXVlc3QgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYmVjYXVzZSB0aGUgY2hhbm5lbCBpcyBub3QgY29ubmVjdGVkIGR1ZSB0byBhbiBzc2wgZXJyb3IuIiwgc3NsRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJSZXF1ZXN0IGNhbm5vdCBiZSBzZXJpYWxpemVkIGJlY2F1c2UgdGhlIGNoYW5uZWwgaXMgbm90IGNvbm5lY3RlZCIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZW1vdGVBZGRyZXNzOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmIGNvbnZlcnRCb2R5KGZpbmFsIEh0dHBSZXF1ZXN0IHJlcXVlc3QpIHsKKyAgICAgICAgZmluYWwgT2JqZWN0IGJvZHkgPSByZXF1ZXN0LmdldEJvZHkoKTsKKyAgICAgICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBieXRlW10pIHsKKyAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycygpLnB1dChIdHRwUmVxdWVzdC5IZWFkZXJzLkNPTlRFTlRfTEVOR1RILCBTdHJpbmcudmFsdWVPZigoKGJ5dGVbXSkgYm9keSkubGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm4gVW5wb29sZWQud3JhcHBlZEJ1ZmZlcigoYnl0ZVtdKSBib2R5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZpbmFsIGJvZHkgbXVzdCBiZSBieXRlW10gYnV0IGZvdW5kICIKKyAgICAgICAgICAgICAgICAgICAgKyBib2R5LmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9IdHRwR3JlbWxpblJlc3BvbnNlRGVjb2Rlci5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVzcG9uc2VEZWNvZGVyLmphdmEKaW5kZXggNjY0Y2MzNC4uZWVjMGE5YiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVzcG9uc2VEZWNvZGVyLmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVzcG9uc2VEZWNvZGVyLmphdmEKQEAgLTE4LDI4ICsxOCwzNSBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7CiAKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZklucHV0U3RyZWFtOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXI7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5NZXNzYWdlVG9NZXNzYWdlRGVjb2RlcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLlRvb0xvbmdGcmFtZUV4Y2VwdGlvbjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEh0dHBPYmplY3Q7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkZ1bGxIdHRwUmVzcG9uc2U7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBDb250ZW50OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXM7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZTsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5MYXN0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGU7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIAotLyoqCi0gKiBDb252ZXJ0cyB7QGNvZGUgSHR0cFJlc3BvbnNlfSB0byBhIHtAbGluayBSZXNwb25zZU1lc3NhZ2V9LgotICovCi1AQ2hhbm5lbEhhbmRsZXIuU2hhcmFibGUKLXB1YmxpYyBmaW5hbCBjbGFzcyBIdHRwR3JlbWxpblJlc3BvbnNlRGVjb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyPEZ1bGxIdHRwUmVzcG9uc2U+IHsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLkxBU1RfQ09OVEVOVF9SRUFEX1JFU1BPTlNFOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyLkh0dHBHcmVtbGluUmVzcG9uc2VTdHJlYW1EZWNvZGVyLklTX0JVTEtFRDsKKworcHVibGljIGNsYXNzIEh0dHBHcmVtbGluUmVzcG9uc2VEZWNvZGVyIGV4dGVuZHMgTWVzc2FnZVRvTWVzc2FnZURlY29kZXI8RnVsbEh0dHBSZXNwb25zZT4geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFX05BTUUgPSAibWVzc2FnZSI7CiAgICAgcHJpdmF0ZSBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZXJpYWxpemVyOwogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKIApAQCAtNDgsMTUgKzU1LDM2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZGVjb2RlKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjaGFubmVsSGFuZGxlckNvbnRleHQsIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2UgaHR0cFJlc3BvbnNlLCBmaW5hbCBMaXN0PE9iamVjdD4gb2JqZWN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChodHRwUmVzcG9uc2Uuc3RhdHVzKCkgPT0gSHR0cFJlc3BvbnNlU3RhdHVzLk9LKSB7Ci0gICAgICAgICAgICBvYmplY3RzLmFkZChzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoaHR0cFJlc3BvbnNlLmNvbnRlbnQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgcm9vdCA9IG1hcHBlci5yZWFkVHJlZShuZXcgQnl0ZUJ1ZklucHV0U3RyZWFtKGh0dHBSZXNwb25zZS5jb250ZW50KCkpKTsKLSAgICAgICAgICAgIG9iamVjdHMuYWRkKFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELmZyb21TdHJpbmcocm9vdC5nZXQoVG9rZW5zLlJFUVVFU1RfSUQpLmFzVGV4dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShyb290LmdldChTZXJUb2tlbnMuVE9LRU5fTUVTU0FHRSkuYXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCkpOworICAgIHByb3RlY3RlZCB2b2lkIGRlY29kZShDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBGdWxsSHR0cFJlc3BvbnNlIG1zZywgTGlzdDxPYmplY3Q+IG91dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIEEgdmFsdWUgbXVzdCBiZSBzZXQgaW4gb3JkZXIgdG8gc2lnbmFsIHRvIHRoZSBJbmFjdGl2ZUNoYW5uZWxIYW5kbGVyIHRoYXQgZGF0YSBoYXMgYmVlbiByZWNlaXZlZC4KKyAgICAgICAgY3R4LmNoYW5uZWwoKS5hdHRyKEluYWN0aXZlQ2hhbm5lbEhhbmRsZXIuQllURVNfUkVBRCkuc2V0KDApOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgY29udGVudCA9IG1zZy5jb250ZW50KCk7CisgICAgICAgIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZTsKKyAgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBubyBtb3JlIGNodW5rcyBleHBlY3RlZAorICAgICAgICAgICAgaWYgKGlzRXJyb3IobXNnLnN0YXR1cygpKSAmJiAhc2VyaWFsaXplci5taW1lVHlwZXNTdXBwb3J0ZWQoKVswXS5lcXVhbHMobXNnLmhlYWRlcnMoKS5nZXQoSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfVFlQRSkpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBjb250ZW50LnRvU3RyaW5nKENoYXJzZXRVdGlsLlVURl84KTsKKyAgICAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gbm9kZS5oYXMoTUVTU0FHRV9OQU1FKSA/IG5vZGUuZ2V0KE1FU1NBR0VfTkFNRSkuYXNUZXh0KCkgOiAiIjsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAuY29kZShtc2cuc3RhdHVzKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShtZXNzYWdlLmlzRW1wdHkoKSA/IG1zZy5zdGF0dXMoKS5yZWFzb25QaHJhc2UoKSA6IG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGNvbnRlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdHguY2hhbm5lbCgpLmF0dHIoSVNfQlVMS0VEKS5zZXQocmVzcG9uc2UuZ2V0UmVzdWx0KCkuaXNCdWxrZWQoKSk7CisgICAgICAgICAgICBvdXQuYWRkKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIG91dC5hZGQoTEFTVF9DT05URU5UX1JFQURfUkVTUE9OU0UpOworICAgICAgICB9IGNhdGNoIChTZXJpYWxpemF0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAgICAgfQotfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Vycm9yKGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1cyAhPSBIdHRwUmVzcG9uc2VTdGF0dXMuT0s7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9IdHRwR3JlbWxpblJlc3BvbnNlU3RyZWFtRGVjb2Rlci5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVzcG9uc2VTdHJlYW1EZWNvZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyOTI3MQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9IdHRwR3JlbWxpblJlc3BvbnNlU3RyZWFtRGVjb2Rlci5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5NZXNzYWdlVG9NZXNzYWdlRGVjb2RlcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLlRvb0xvbmdGcmFtZUV4Y2VwdGlvbjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEh0dHBPYmplY3Q7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBDb250ZW50OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXM7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5MYXN0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGU7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVNYXA7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuTEFTVF9DT05URU5UX1JFQURfUkVTUE9OU0U7CisKK3B1YmxpYyBjbGFzcyBIdHRwR3JlbWxpblJlc3BvbnNlU3RyZWFtRGVjb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyPERlZmF1bHRIdHRwT2JqZWN0PiB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZUtleTxCb29sZWFuPiBJU19CVUxLRUQgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigiaXNCdWxrZWQiKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8Qm9vbGVhbj4gSVNfRklSU1RfQ0hVTksgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigiaXNGaXJzdENodW5rIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PEh0dHBSZXNwb25zZVN0YXR1cz4gUkVTUE9OU0VfU1RBVFVTID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoInJlc3BvbnNlU3RhdHVzIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFN0cmluZz4gUkVTUE9OU0VfRU5DT0RJTkcgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigicmVzcG9uc2VTZXJpYWxpemVyIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PExvbmc+IEJZVEVTX1JFQUQgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigiYnl0ZXNSZWFkIik7CisKKyAgICBwcml2YXRlIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1heFJlc3BvbnNlQ29udGVudExlbmd0aDsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisKKyAgICBwdWJsaWMgSHR0cEdyZW1saW5SZXNwb25zZVN0cmVhbURlY29kZXIoZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciwgZmluYWwgbG9uZyBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgpIHsKKyAgICAgICAgdGhpcy5zZXJpYWxpemVyID0gc2VyaWFsaXplcjsKKyAgICAgICAgdGhpcy5tYXhSZXNwb25zZUNvbnRlbnRMZW5ndGggPSBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGg7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgZGVjb2RlKENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIERlZmF1bHRIdHRwT2JqZWN0IG1zZywgTGlzdDxPYmplY3Q+IG91dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEF0dHJpYnV0ZTxCb29sZWFuPiBpc0ZpcnN0Q2h1bmsgPSAoKEF0dHJpYnV0ZU1hcCkgY3R4KS5hdHRyKElTX0ZJUlNUX0NIVU5LKTsKKyAgICAgICAgZmluYWwgQXR0cmlidXRlPEJvb2xlYW4+IGlzQnVsa2VkID0gKChBdHRyaWJ1dGVNYXApIGN0eCkuYXR0cihJU19CVUxLRUQpOworICAgICAgICBmaW5hbCBBdHRyaWJ1dGU8SHR0cFJlc3BvbnNlU3RhdHVzPiByZXNwb25zZVN0YXR1cyA9ICgoQXR0cmlidXRlTWFwKSBjdHgpLmF0dHIoUkVTUE9OU0VfU1RBVFVTKTsKKyAgICAgICAgZmluYWwgQXR0cmlidXRlPFN0cmluZz4gcmVzcG9uc2VFbmNvZGluZyA9ICgoQXR0cmlidXRlTWFwKSBjdHgpLmF0dHIoUkVTUE9OU0VfRU5DT0RJTkcpOworCisgICAgICAgIGlmIChtc2cgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHsKKyAgICAgICAgICAgIGN0eC5jaGFubmVsKCkuYXR0cihCWVRFU19SRUFEKS5zZXQoMEwpOworCisgICAgICAgICAgICBmaW5hbCBIdHRwUmVzcG9uc2UgcmVzcCA9IChIdHRwUmVzcG9uc2UpIG1zZzsKKyAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzLnNldChyZXNwLnN0YXR1cygpKTsKKyAgICAgICAgICAgIHJlc3BvbnNlRW5jb2Rpbmcuc2V0KHJlc3AuaGVhZGVycygpLmdldChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFKSk7CisKKyAgICAgICAgICAgIGlzRmlyc3RDaHVuay5zZXQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgSHR0cENvbnRlbnQpIHsKKyAgICAgICAgICAgIEJ5dGVCdWYgY29udGVudCA9ICgoSHR0cENvbnRlbnQpIG1zZykuY29udGVudCgpOworICAgICAgICAgICAgQXR0cmlidXRlPExvbmc+IGJ5dGVzUmVhZCA9IGN0eC5jaGFubmVsKCkuYXR0cihCWVRFU19SRUFEKTsKKyAgICAgICAgICAgIGJ5dGVzUmVhZC5zZXQoYnl0ZXNSZWFkLmdldCgpICsgY29udGVudC5yZWFkYWJsZUJ5dGVzKCkpOworICAgICAgICAgICAgaWYgKG1heFJlc3BvbnNlQ29udGVudExlbmd0aCA+IDAgJiYgYnl0ZXNSZWFkLmdldCgpID4gbWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRvb0xvbmdGcmFtZUV4Y2VwdGlvbigiUmVzcG9uc2UgZXhjZWVkZWQgIiArIG1heFJlc3BvbnNlQ29udGVudExlbmd0aCArICIgYnl0ZXMuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgLy8gbm8gbW9yZSBjaHVua3MgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICBpZiAoaXNFcnJvcihyZXNwb25zZVN0YXR1cy5nZXQoKSkgJiYgIVNlclRva2Vucy5NSU1FX0dSQVBIQklOQVJZX1Y0LmVxdWFscyhyZXNwb25zZUVuY29kaW5nLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGNvbnRlbnQudG9TdHJpbmcoQ2hhcnNldFV0aWwuVVRGXzgpKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBub2RlLmdldCgibWVzc2FnZSIpLmFzVGV4dCgpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKHJlc3BvbnNlU3RhdHVzLmdldCgpKS5zdGF0dXNNZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgICAgICAgICAgICAgIG91dC5hZGQocmVzcG9uc2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBjaHVuayA9IHNlcmlhbGl6ZXIucmVhZENodW5rKGNvbnRlbnQsIGlzRmlyc3RDaHVuay5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2h1bmsuZ2V0KCkpeworICAgICAgICAgICAgICAgICAgICAgICAgaXNCdWxrZWQuc2V0KGNodW5rLmdldFJlc3VsdCgpLmlzQnVsa2VkKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlzRmlyc3RDaHVuay5zZXQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBvdXQuYWRkKGNodW5rKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgTGFzdEh0dHBDb250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5hZGQoTEFTVF9DT05URU5UX1JFQURfUkVTUE9OU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKFNlcmlhbGl6YXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Vycm9yKGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBzdGF0dXMpIHsKKyAgICAgICAgcmV0dXJuIHN0YXR1cyAhPSBIdHRwUmVzcG9uc2VTdGF0dXMuT0s7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0lkbGVDb25uZWN0aW9uSGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0lkbGVDb25uZWN0aW9uSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzBkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvSWRsZUNvbm5lY3Rpb25IYW5kbGVyLmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlcjsKKworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbER1cGxleEhhbmRsZXI7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnRpbWVvdXQuSWRsZVN0YXRlRXZlbnQ7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKKworLyoqCisgKiBEZXRlY3RzIHtAbGluayBJZGxlU3RhdGVFdmVudH1zIGFuZCBjbG9zZXMgdGhlIGNoYW5uZWwgd2l0aCB0aGUgZ29hbCBvZiByZWxlYXNpbmcgcmVzb3VyY2VzIHRoYXQgaGF2ZW4ndCBiZWVuIHVzZWQgaW4gYSB3aGlsZS4KKyAqLworQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCitwdWJsaWMgY2xhc3MgSWRsZUNvbm5lY3Rpb25IYW5kbGVyIGV4dGVuZHMgQ2hhbm5lbER1cGxleEhhbmRsZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihJZGxlQ29ubmVjdGlvbkhhbmRsZXIuY2xhc3MpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PElkbGVTdGF0ZUV2ZW50PiBJRExFX1NUQVRFX0VWRU5UID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoImlkbGVTdGF0ZUV2ZW50Iik7CisKKyAgICAvKioKKyAgICAgKiBEZXRlY3RzIGlmIGFuIHtAbGluayBJZGxlU3RhdGVFdmVudH0gaGFzIG9jY3VycmVkIGFuZCBjbG9zZXMgdGhlIGNoYW5uZWwuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdXNlckV2ZW50VHJpZ2dlcmVkKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBldnQpIHsKKyAgICAgICAgaWYgKGV2dCBpbnN0YW5jZW9mIElkbGVTdGF0ZUV2ZW50KSB7CisgICAgICAgICAgICBmaW5hbCBJZGxlU3RhdGVFdmVudCBlID0gKElkbGVTdGF0ZUV2ZW50KSBldnQ7CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiRGV0ZWN0ZWQgSWRsZVN0YXRlRXZlbnQge30gLSBjbG9zaW5nIGNoYW5uZWwge30iLCBlLCBjdHguY2hhbm5lbCgpLmlkKCkuYXNTaG9ydFRleHQoKSk7CisgICAgICAgICAgICBjdHguY2hhbm5lbCgpLmF0dHIoSURMRV9TVEFURV9FVkVOVCkuc2V0KGUpOworICAgICAgICAgICAgY3R4LmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvSW5hY3RpdmVDaGFubmVsSGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0luYWN0aXZlQ2hhbm5lbEhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQyNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0luYWN0aXZlQ2hhbm5lbEhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDU1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXI7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CisKKy8qKgorICogSGFuZGxlciB1c2VkIHRvIGRldGVjdCBpZiB0aGUgY2hhbm5lbCBoYXMgYmVjb21lIGluYWN0aXZlIGFuZCB0aHJvdyBhbiBlcnJvciBpbiBjZXJ0YWluIHNjZW5hcmlvcy4KKyAqLworQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCitwdWJsaWMgY2xhc3MgSW5hY3RpdmVDaGFubmVsSGFuZGxlciBleHRlbmRzIENoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXIgeworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PEludGVnZXI+IEJZVEVTX1JFQUQgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigiYnl0ZXNSZWFkIik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8Qm9vbGVhbj4gUkVRVUVTVF9TRU5UID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoInJlcXVlc3RTZW50Iik7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjaGFubmVsSW5hY3RpdmUoQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgcmVxdWlyZXMgU1NML1RMUywgdGhlbiBpdCB3aWxsIHNpbXBseSBzaHV0IGRvd24gdGhlIGNvbm5lY3Rpb24gaWYgaXQgZG9lc24ndCBnZXQgdGhlIHJpZ2h0CisgICAgICAgIC8vIGhhbmRzaGFrZS4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBUQ1AgY29ubmVjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQuIElmIG5vIHBhY2tldHMgd2VyZSByZWNlaXZlZCBmcm9tCisgICAgICAgIC8vIHRoZSBzZXJ2ZXIgYW5kIHRoZSBjb25uZWN0aW9uIGNsb3NlcyBhZnRlciBhbiBIVFRQIHJlcXVlc3Qgd2FzIHNlbnQsIHRoZW4gdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGF0IHRoaXMgaXMKKyAgICAgICAgLy8gYmVjYXVzZSB0aGUgc2VydmVyIGV4cGVjdGVkIGEgU1NML1RMUyBoYW5kc2hha2UuCisgICAgICAgIGlmICgobnVsbCA9PSBjdHguY2hhbm5lbCgpLmF0dHIoQllURVNfUkVBRCkuZ2V0KCkpICYmIChudWxsICE9IGN0eC5jaGFubmVsKCkuYXR0cihSRVFVRVNUX1NFTlQpLmdldCgpKSkgeworICAgICAgICAgICAgLy8gQllURVNfUkVBRCBpcyBzZXQgYnkgdGhlIEh0dHBHcmVtbGluUmVzcG9uc2VTdHJlYW1EZWNvZGVyIHdoZW4gYW55IGRhdGEgaXMgcmVjZWl2ZWQuIElmIGl0IGlzbid0IHNldCwKKyAgICAgICAgICAgIC8vIGl0IGNhbiBiZSBhc3N1bWVkIHRoYXQgbm8gYnl0ZXMgd2VyZSByZWNlaXZlZCB3aGVuIHRoZSBjb25uZWN0aW9uIGNsb3NlZC4KKyAgICAgICAgICAgIFN0cmluZyBlcnJNc2c7CisgICAgICAgICAgICBpZiAoY3R4LmNoYW5uZWwoKS5oYXNBdHRyKElkbGVDb25uZWN0aW9uSGFuZGxlci5JRExFX1NUQVRFX0VWRU5UKSkgeworICAgICAgICAgICAgICAgIGVyck1zZyA9ICJJZGxlIHRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIHJlc3BvbnNlIGNvdWxkIGJlIHJlY2VpdmVkIGZyb20gc2VydmVyIC0gY29uc2lkZXIgaW5jcmVhc2luZyBpZGxlQ29ubmVjdGlvblRpbWVvdXQiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJNc2cgPSAiQ29ubmVjdGlvbiB0byBzZXJ2ZXIgY2xvc2VkIHVuZXhwZWN0ZWRseS4gRW5zdXJlIHRoYXQgdGhlIHNlcnZlciBpcyBzdGlsbCIgKworICAgICAgICAgICAgICAgICAgICAgICAgIiByZWFjaGFibGUuIFRoZSBzZXJ2ZXIgbWF5IGJlIGV4cGVjdGluZyBTU0wgdG8gYmUgZW5hYmxlZC4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LmZpcmVFeGNlcHRpb25DYXVnaHQobmV3IFJ1bnRpbWVFeGNlcHRpb24oZXJyTXNnKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdXBlci5jaGFubmVsSW5hY3RpdmUoY3R4KTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9XZWJTb2NrZXRDbGllbnRIYW5kbGVyLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvV2ViU29ja2V0Q2xpZW50SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjhjMzk2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9XZWJTb2NrZXRDbGllbnRIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxGdXR1cmU7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUHJvbWlzZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyczsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5QaW5nV2ViU29ja2V0RnJhbWU7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguV2ViU29ja2V0Q2xpZW50SGFuZHNoYWtlcjEzOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LldlYlNvY2tldENsaWVudFByb3RvY29sSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5XZWJTb2NrZXRDbGllbnRIYW5kc2hha2VyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LldlYlNvY2tldFZlcnNpb247Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC5Tc2xIYW5kc2hha2VDb21wbGV0aW9uRXZlbnQ7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci50aW1lb3V0LklkbGVTdGF0ZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnRpbWVvdXQuSWRsZVN0YXRlRXZlbnQ7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5jb25jdXJyZW50LlByb21pc2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uVW5hcnlPcGVyYXRvcjsKLQotaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMSGFuZHNoYWtlRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5IYW5kc2hha2VJbnRlcmNlcHRvcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi0vKioKLSAqIFdyYXBwZXIgb3ZlciB7QGxpbmsgV2ViU29ja2V0Q2xpZW50UHJvdG9jb2xIYW5kbGVyfS4gVGhpcyB3cmFwcGVyIHByb3ZpZGVzIGEgZnV0dXJlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHRlcm1pbmF0aW9uCi0gKiBvZiBhIFdTIGhhbmRzaGFrZSAoYm90aCBzdWNjZXNzIGFuZCBmYWlsdXJlKS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFdlYlNvY2tldENsaWVudEhhbmRsZXIgZXh0ZW5kcyBXZWJTb2NrZXRDbGllbnRQcm90b2NvbEhhbmRsZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihXZWJTb2NrZXRDbGllbnRIYW5kbGVyLmNsYXNzKTsKLQotICAgIHByaXZhdGUgZmluYWwgbG9uZyBjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzOwotICAgIHByaXZhdGUgQ2hhbm5lbFByb21pc2UgaGFuZHNoYWtlRnV0dXJlOwotICAgIHByaXZhdGUgYm9vbGVhbiBzc2xIYW5kc2hha2VDb21wbGV0ZWQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIHVzZVNzbDsKLQotICAgIHB1YmxpYyBXZWJTb2NrZXRDbGllbnRIYW5kbGVyKGZpbmFsIFdlYlNvY2tldENsaWVudEhhbmRzaGFrZXIgaGFuZHNoYWtlciwgZmluYWwgbG9uZyB0aW1lb3V0TWlsbGlzLCBmaW5hbCBib29sZWFuIHVzZVNzbCkgewotICAgICAgICBzdXBlcihoYW5kc2hha2VyLCAvKmhhbmRsZUNsb3NlRnJhbWVzKi90cnVlLCAvKmRyb3BQb25nRnJhbWVzKi90cnVlLCB0aW1lb3V0TWlsbGlzKTsKLSAgICAgICAgdGhpcy5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzID0gdGltZW91dE1pbGxpczsKLSAgICAgICAgdGhpcy51c2VTc2wgPSB1c2VTc2w7Ci0gICAgfQotCi0gICAgcHVibGljIENoYW5uZWxGdXR1cmUgaGFuZHNoYWtlRnV0dXJlKCkgewotICAgICAgICByZXR1cm4gaGFuZHNoYWtlRnV0dXJlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGhhbmRsZXJBZGRlZChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4KSB7Ci0gICAgICAgIHN1cGVyLmhhbmRsZXJBZGRlZChjdHgpOwotICAgICAgICBoYW5kc2hha2VGdXR1cmUgPSBjdHgubmV3UHJvbWlzZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGV4Y2VwdGlvbkNhdWdodChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBUaHJvd2FibGUgY2F1c2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpZiAoIWhhbmRzaGFrZUZ1dHVyZS5pc0RvbmUoKSkgewotICAgICAgICAgICAgaGFuZHNoYWtlRnV0dXJlLnNldEZhaWx1cmUoY2F1c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbGV0IHRoZSBHcmVtbGluUmVzcG9uc2VIYW5kbGVyIHRha2UgY2FyZSBvZiBleGNlcHRpb24gbG9nZ2luZywgY2hhbm5lbCBjbG9zaW5nLCBhbmQgY2xlYW51cAotICAgICAgICBjdHguZmlyZUV4Y2VwdGlvbkNhdWdodChjYXVzZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2hhbm5lbEluYWN0aXZlKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpZiAoIWhhbmRzaGFrZUZ1dHVyZS5pc0RvbmUoKSkgewotICAgICAgICAgICAgLy8gY2hhbm5lbCB3YXMgY2xvc2VkIGJlZm9yZSB0aGUgaGFuZHNoYWtlIGNvdWxkIGJlIGNvbXBsZXRlZC4KLSAgICAgICAgICAgIGhhbmRzaGFrZUZ1dHVyZS5zZXRGYWlsdXJlKAotICAgICAgICAgICAgICAgICAgICBuZXcgUnVudGltZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJXZWJTb2NrZXQgY2hhbm5lbD1bJXNdIGNsb3NlZCBiZWZvcmUgdGhlIGhhbmRzaGFrZSBjb3VsZCBjb21wbGV0ZS4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU2VydmVyIGxvZ3MgY291bGQgY29udGFpbiB0aGUgcmVhc29uIGZvciBhYnJ1cHQgY29ubmVjdGlvbiBkaXNjb25uZWN0IG9yIHRoZSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2ZXIgbWlnaHQgbm90IGJlIHJlYWNoYWJsZSBmcm9tIHRoZSBjbGllbnQgYW55bW9yZS4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jaGFubmVsKCkuaWQoKS5hc1Nob3J0VGV4dCgpKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3VwZXIuY2hhbm5lbEluYWN0aXZlKGN0eCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdXNlckV2ZW50VHJpZ2dlcmVkKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBldmVudCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIElkbGVTdGF0ZUV2ZW50KSB7Ci0gICAgICAgICAgICBJZGxlU3RhdGVFdmVudCBlID0gKElkbGVTdGF0ZUV2ZW50KSBldmVudDsKLSAgICAgICAgICAgIGlmIChlLnN0YXRlKCkgPT0gSWRsZVN0YXRlLlJFQURFUl9JRExFKSB7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIldlYlNvY2tldCBjb25uZWN0aW9uIHt9IGhhcyBiZWVuIGlkbGUgZm9yIHRvbyBsb25nLiIsIGN0eC5jaGFubmVsKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChlLnN0YXRlKCkgPT0gSWRsZVN0YXRlLldSSVRFUl9JRExFKSB7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJTZW5kaW5nIHBpbmcgZnJhbWUgdG8gdGhlIHNlcnZlciIpOwotICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKG5ldyBQaW5nV2ViU29ja2V0RnJhbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoQ2xpZW50SGFuZHNoYWtlU3RhdGVFdmVudC5IQU5EU0hBS0VfQ09NUExFVEUuZXF1YWxzKGV2ZW50KSkgewotICAgICAgICAgICAgaWYgKCFoYW5kc2hha2VGdXR1cmUuaXNEb25lKCkpIHsKLSAgICAgICAgICAgICAgICBoYW5kc2hha2VGdXR1cmUuc2V0U3VjY2VzcygpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKENsaWVudEhhbmRzaGFrZVN0YXRlRXZlbnQuSEFORFNIQUtFX1RJTUVPVVQuZXF1YWxzKGV2ZW50KSkgewotICAgICAgICAgICAgaWYgKCFoYW5kc2hha2VGdXR1cmUuaXNEb25lKCkpIHsKLSAgICAgICAgICAgICAgICBUaW1lb3V0RXhjZXB0aW9uIHRlID0gbmV3IFRpbWVvdXRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCh1c2VTc2wgJiYgIXNzbEhhbmRzaGFrZUNvbXBsZXRlZCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgaGFuZHNoYWtlIG5vdCBjb21wbGV0ZWQgaW4gc3RpcHVsYXRlZCB0aW1lPVslc11tcyIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJTb2NrZXQgaGFuZHNoYWtlIG5vdCBjb21wbGV0ZWQgaW4gc3RpcHVsYXRlZCB0aW1lPVslc11tcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25TZXR1cFRpbWVvdXRNaWxsaXMpKTsKLSAgICAgICAgICAgICAgICBoYW5kc2hha2VGdXR1cmUuc2V0RmFpbHVyZSh0ZSk7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHRlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh1c2VTc2wgJiYgIXNzbEhhbmRzaGFrZUNvbXBsZXRlZCkgewotICAgICAgICAgICAgICAgIFNzbEhhbmRsZXIgaGFuZGxlciA9ICgoU3NsSGFuZGxlcikgY3R4LnBpcGVsaW5lKCkuZ2V0KENoYW5uZWxpemVyLkFic3RyYWN0Q2hhbm5lbGl6ZXIuUElQRUxJTkVfU1NMX0hBTkRMRVIpKTsKLSAgICAgICAgICAgICAgICAoKFByb21pc2U8Q2hhbm5lbD4pIGhhbmRsZXIuaGFuZHNoYWtlRnV0dXJlKCkpLnRyeUZhaWx1cmUobmV3IFNTTEhhbmRzaGFrZUV4Y2VwdGlvbigiU1NMIGhhbmRzaGFrZSB0aW1lZCBvdXQuIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgU3NsSGFuZHNoYWtlQ29tcGxldGlvbkV2ZW50KSB7Ci0gICAgICAgICAgICBzc2xIYW5kc2hha2VDb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3VwZXIudXNlckV2ZW50VHJpZ2dlcmVkKGN0eCwgZXZlbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRXh0ZW5zaW9uIHRvIHRoZSBOZXR0eSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFsbG93cyBmb3IgdGhlIHtAbGluayAjbmV3SGFuZHNoYWtlUmVxdWVzdCgpfSB0byBiZSBtb2RpZmllZCBieSB3YXkKLSAgICAgKiBvZiBhIHtAbGluayBIYW5kc2hha2VJbnRlcmNlcHRvcn0gdGhhdCBpcyBzdXBwbGllZCB0byB0aGUge0BsaW5rIENsdXN0ZXJ9IHdoZW4gaXQgaXMgY3JlYXRlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEludGVyY2VwdGVkV2ViU29ja2V0Q2xpZW50SGFuZHNoYWtlcjEzIGV4dGVuZHMgV2ViU29ja2V0Q2xpZW50SGFuZHNoYWtlcjEzIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIFVuYXJ5T3BlcmF0b3I8RnVsbEh0dHBSZXF1ZXN0PiBpbnRlcmNlcHRvcjsKLQotICAgICAgICBwdWJsaWMgSW50ZXJjZXB0ZWRXZWJTb2NrZXRDbGllbnRIYW5kc2hha2VyMTMoZmluYWwgVVJJIHdlYlNvY2tldFVSTCwgZmluYWwgV2ViU29ja2V0VmVyc2lvbiB2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHN1YnByb3RvY29sLCBmaW5hbCBib29sZWFuIGFsbG93RXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGN1c3RvbUhlYWRlcnMsIGZpbmFsIGludCBtYXhGcmFtZVBheWxvYWRMZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHBlcmZvcm1NYXNraW5nLCBmaW5hbCBib29sZWFuIGFsbG93TWFza01pc21hdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBmb3JjZUNsb3NlVGltZW91dE1pbGxpcywgZmluYWwgVW5hcnlPcGVyYXRvcjxGdWxsSHR0cFJlcXVlc3Q+IGludGVyY2VwdG9yKSB7Ci0gICAgICAgICAgICBzdXBlcih3ZWJTb2NrZXRVUkwsIHZlcnNpb24sIHN1YnByb3RvY29sLCBhbGxvd0V4dGVuc2lvbnMsIGN1c3RvbUhlYWRlcnMsIG1heEZyYW1lUGF5bG9hZExlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgcGVyZm9ybU1hc2tpbmcsIGFsbG93TWFza01pc21hdGNoLCBmb3JjZUNsb3NlVGltZW91dE1pbGxpcyk7Ci0gICAgICAgICAgICB0aGlzLmludGVyY2VwdG9yID0gaW50ZXJjZXB0b3I7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIEZ1bGxIdHRwUmVxdWVzdCBuZXdIYW5kc2hha2VSZXF1ZXN0KCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJjZXB0b3IuYXBwbHkoc3VwZXIubmV3SGFuZHNoYWtlUmVxdWVzdCgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9XZWJTb2NrZXRHcmVtbGluUmVxdWVzdEVuY29kZXIuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9XZWJTb2NrZXRHcmVtbGluUmVxdWVzdEVuY29kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MwODJiNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5SZXNwb25zZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5NZXNzYWdlVGV4dFNlcmlhbGl6ZXI7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLk1lc3NhZ2VUb01lc3NhZ2VFbmNvZGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LkJpbmFyeVdlYlNvY2tldEZyYW1lOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LlRleHRXZWJTb2NrZXRGcmFtZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgZmluYWwgY2xhc3MgV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyIGV4dGVuZHMgTWVzc2FnZVRvTWVzc2FnZUVuY29kZXI8UmVxdWVzdE1lc3NhZ2U+IHsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYmluYXJ5RW5jb2Rpbmc7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXI7Ci0KLSAgICBwdWJsaWMgV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyKGZpbmFsIGJvb2xlYW4gYmluYXJ5RW5jb2RpbmcsIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIpIHsKLSAgICAgICAgdGhpcy5iaW5hcnlFbmNvZGluZyA9IGJpbmFyeUVuY29kaW5nOwotICAgICAgICB0aGlzLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGVuY29kZShmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0LCBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgTGlzdDxPYmplY3Q+IG9iamVjdHMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKGJpbmFyeUVuY29kaW5nKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQnl0ZUJ1ZiBlbmNvZGVkTWVzc2FnZSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KHJlcXVlc3RNZXNzYWdlLCBjaGFubmVsSGFuZGxlckNvbnRleHQuYWxsb2MoKSk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0cy5hZGQobmV3IEJpbmFyeVdlYlNvY2tldEZyYW1lKGVuY29kZWRNZXNzYWdlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjw/PiB0ZXh0U2VyaWFsaXplciA9IChNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4pIHNlcmlhbGl6ZXI7Ci0gICAgICAgICAgICAgICAgb2JqZWN0cy5hZGQobmV3IFRleHRXZWJTb2NrZXRGcmFtZSh0ZXh0U2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNTdHJpbmcocmVxdWVzdE1lc3NhZ2UsIGNoYW5uZWxIYW5kbGVyQ29udGV4dC5hbGxvYygpKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZXNwb25zZUV4Y2VwdGlvbihSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9TRVJJQUxJWkFUSU9OLCBTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24gb2YgdGhpcyByZXF1ZXN0IFslc10gLSBpdCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUgc2VydmVyIC0gUmVhc29uOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLCBleCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL1dlYlNvY2tldEdyZW1saW5SZXNwb25zZURlY29kZXIuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaGFuZGxlci9XZWJTb2NrZXRHcmVtbGluUmVzcG9uc2VEZWNvZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNTY4MzUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL1dlYlNvY2tldEdyZW1saW5SZXNwb25zZURlY29kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5NZXNzYWdlVGV4dFNlcmlhbGl6ZXI7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLk1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LkJpbmFyeVdlYlNvY2tldEZyYW1lOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LlRleHRXZWJTb2NrZXRGcmFtZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5XZWJTb2NrZXRGcmFtZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgZmluYWwgY2xhc3MgV2ViU29ja2V0R3JlbWxpblJlc3BvbnNlRGVjb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyPFdlYlNvY2tldEZyYW1lPiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZXJpYWxpemVyOwotCi0gICAgcHVibGljIFdlYlNvY2tldEdyZW1saW5SZXNwb25zZURlY29kZXIoZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplcikgewotICAgICAgICB0aGlzLnNlcmlhbGl6ZXIgPSBzZXJpYWxpemVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGRlY29kZShmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0LCBmaW5hbCBXZWJTb2NrZXRGcmFtZSB3ZWJTb2NrZXRGcmFtZSwgZmluYWwgTGlzdDxPYmplY3Q+IG9iamVjdHMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpZiAod2ViU29ja2V0RnJhbWUgaW5zdGFuY2VvZiBCaW5hcnlXZWJTb2NrZXRGcmFtZSkgewotICAgICAgICAgICAgZmluYWwgQmluYXJ5V2ViU29ja2V0RnJhbWUgdGYgPSAoQmluYXJ5V2ViU29ja2V0RnJhbWUpIHdlYlNvY2tldEZyYW1lOwotICAgICAgICAgICAgb2JqZWN0cy5hZGQoc2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlc3BvbnNlKHRmLmNvbnRlbnQoKSkpOwotICAgICAgICB9IGVsc2UgaWYgKHdlYlNvY2tldEZyYW1lIGluc3RhbmNlb2YgVGV4dFdlYlNvY2tldEZyYW1lKSB7Ci0gICAgICAgICAgICBmaW5hbCBUZXh0V2ViU29ja2V0RnJhbWUgdGYgPSAoVGV4dFdlYlNvY2tldEZyYW1lKSB3ZWJTb2NrZXRGcmFtZTsKLSAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjw/PiB0ZXh0U2VyaWFsaXplciA9IChNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4pIHNlcmlhbGl6ZXI7Ci0gICAgICAgICAgICBvYmplY3RzLmFkZCh0ZXh0U2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlc3BvbnNlKHRmLnRleHQoKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgiV2ViU29ja2V0IGNoYW5uZWwgZG9lcyBub3QgaGFuZGxlIHRoaXMgdHlwZSBvZiBtZXNzYWdlOiAlcyIsIHdlYlNvY2tldEZyYW1lLmdldENsYXNzKCkuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2ludGVyY2VwdG9yL1BheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2ludGVyY2VwdG9yL1BheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzNWJjMAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvaW50ZXJjZXB0b3IvUGF5bG9hZFNlcmlhbGl6aW5nSW50ZXJjZXB0b3IuamF2YQpAQCAtMCwwICsxLDczIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5pbnRlcmNlcHRvcjsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmVXRpbDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkh0dHBSZXF1ZXN0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlcXVlc3RJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworLyoqCisgKiBBIHtAbGluayBSZXF1ZXN0SW50ZXJjZXB0b3J9IHRoYXQgc2VyaWFsaXplcyB0aGUgcmVxdWVzdCBib2R5IHVzbmcgdGhlIHByb3ZpZGVkIHtAbGluayBNZXNzYWdlU2VyaWFsaXplcn0uIFRoaXMKKyAqIGludGVyY2VwdG9yIHNob3VsZCBiZSBydW4gYmVmb3JlIG90aGVyIGludGVyY2VwdG9ycyB0aGF0IG5lZWQgdG8gY2FsY3VsYXRlIHZhbHVlcyBiYXNlZCBvbiB0aGUgcmVxdWVzdCBib2R5LgorICovCitwdWJsaWMgY2xhc3MgUGF5bG9hZFNlcmlhbGl6aW5nSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBSZXF1ZXN0SW50ZXJjZXB0b3IgeworICAgIC8vIFNob3VsZCBiZSB0aHJlYWQtc2FmZSBhcyB0aGUgR3JhcGhCaW5hcnlXcml0ZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplciBkb2Vzbid0IG1haW50YWluIHN0YXRlLgorICAgIHByaXZhdGUgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXIgc2VyaWFsaXplcjsKKworICAgIHB1YmxpYyBQYXlsb2FkU2VyaWFsaXppbmdJbnRlcmNlcHRvcihmaW5hbCBNZXNzYWdlU2VyaWFsaXplciBzZXJpYWxpemVyKSB7CisgICAgICAgIHRoaXMuc2VyaWFsaXplciA9IHNlcmlhbGl6ZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEh0dHBSZXF1ZXN0IGFwcGx5KEh0dHBSZXF1ZXN0IGh0dHBSZXF1ZXN0KSB7CisgICAgICAgIGlmICghKGh0dHBSZXF1ZXN0LmdldEJvZHkoKSBpbnN0YW5jZW9mIFJlcXVlc3RNZXNzYWdlKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT25seSBSZXF1ZXN0TWVzc2FnZSBzZXJpYWxpemF0aW9uIGlzIHN1cHBvcnRlZCIpOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IChSZXF1ZXN0TWVzc2FnZSkgaHR0cFJlcXVlc3QuZ2V0Qm9keSgpOworICAgICAgICBmaW5hbCBCeXRlQnVmIHJlcXVlc3RCdWY7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXF1ZXN0QnVmID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkocmVxdWVzdCwgQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUKTsKKyAgICAgICAgfSBjYXRjaCAoU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBzZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24obmV3IFJlc3BvbnNlRXhjZXB0aW9uKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBzZXJpYWxpemF0aW9uIG9mIHRoaXMgcmVxdWVzdCBbJXNdIC0gaXQgY291bGQgbm90IGJlIHNlbnQgdG8gdGhlIHNlcnZlciAtIFJlYXNvbjogJXMiLAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LCBzZSkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbnZlcnQgZnJvbSBCeXRlQnVmIHRvIGJ5dGVzW10gYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGUgZmluYWwgcmVxdWVzdCBib2R5IHNob3VsZCBjb250YWluLgorICAgICAgICBmaW5hbCBieXRlW10gcmVxdWVzdEJ5dGVzID0gQnl0ZUJ1ZlV0aWwuZ2V0Qnl0ZXMocmVxdWVzdEJ1Zik7CisgICAgICAgIHJlcXVlc3RCdWYucmVsZWFzZSgpOworCisgICAgICAgIGh0dHBSZXF1ZXN0LnNldEJvZHkocmVxdWVzdEJ5dGVzKTsKKyAgICAgICAgaHR0cFJlcXVlc3QuaGVhZGVycygpLnB1dChIdHRwUmVxdWVzdC5IZWFkZXJzLkNPTlRFTlRfVFlQRSwgc2VyaWFsaXplci5taW1lVHlwZXNTdXBwb3J0ZWQoKVswXSk7CisKKyAgICAgICAgcmV0dXJuIGh0dHBSZXF1ZXN0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24uamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0RyaXZlclJlbW90ZUNvbm5lY3Rpb24uamF2YQppbmRleCBlNWY4YmJhLi5jOTA5ZTQ4IDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uLmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5qYXZhCkBAIC0xOSwyNiArMTksMTkgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlOwogCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUuUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5SZW1vdGVUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlRyYW5zYWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwogCiBpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuQVJHU19CQVRDSF9TSVpFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zLkFSR1NfRVZBTF9USU1FT1VUOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zLkFSR1NfVVNFUl9BR0VOVDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2Vucy5SRVFVRVNUX0lEOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zLkFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUzsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnMuZ2V0UmVxdWVzdE9wdGlvbnM7CiAKIC8qKgpAQCAtNzcsNyArNzAsNyBAQAogICAgICAgICAgICAgICAgIGNsdXN0ZXIgPSBjb25mLmNvbnRhaW5zS2V5KEdSRU1MSU5fUkVNT1RFX0RSSVZFUl9DTFVTVEVSRklMRSkgPwogICAgICAgICAgICAgICAgICAgICAgICAgQ2x1c3Rlci5vcGVuKGNvbmYuZ2V0U3RyaW5nKEdSRU1MSU5fUkVNT1RFX0RSSVZFUl9DTFVTVEVSRklMRSkpIDogQ2x1c3Rlci5vcGVuKGNvbmYuc3Vic2V0KCJjbHVzdGVyQ29uZmlndXJhdGlvbiIpKTsKIAotICAgICAgICAgICAgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KENsaWVudC5TZXR0aW5ncy5idWlsZCgpLmNyZWF0ZSgpKS5hbGlhcyhyZW1vdGVUcmF2ZXJzYWxTb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKHJlbW90ZVRyYXZlcnNhbFNvdXJjZU5hbWUpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZXgpOwogICAgICAgICB9CkBAIC05MCw3ICs4Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGZpbmFsIENsdXN0ZXIgY2x1c3RlciwgZmluYWwgYm9vbGVhbiB0cnlDbG9zZUNsdXN0ZXIsIGZpbmFsIFN0cmluZyByZW1vdGVUcmF2ZXJzYWxTb3VyY2VOYW1lKSB7Ci0gICAgICAgIGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChDbGllbnQuU2V0dGluZ3MuYnVpbGQoKS5jcmVhdGUoKSkuYWxpYXMocmVtb3RlVHJhdmVyc2FsU291cmNlTmFtZSk7CisgICAgICAgIGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKHJlbW90ZVRyYXZlcnNhbFNvdXJjZU5hbWUpOwogICAgICAgICB0aGlzLnJlbW90ZVRyYXZlcnNhbFNvdXJjZU5hbWUgPSByZW1vdGVUcmF2ZXJzYWxTb3VyY2VOYW1lOwogICAgICAgICB0aGlzLnRyeUNsb3NlQ2x1c3RlciA9IHRyeUNsb3NlQ2x1c3RlcjsKICAgICAgICAgYXR0YWNoRWxlbWVudHMgPSBmYWxzZTsKQEAgLTEwNSw3ICs5OCw3IEBACiAKICAgICAgICAgYXR0YWNoRWxlbWVudHMgPSBjb25mLmNvbnRhaW5zS2V5KEdSRU1MSU5fUkVNT1RFICsgImF0dGFjaG1lbnQiKTsKIAotICAgICAgICBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoQ2xpZW50LlNldHRpbmdzLmJ1aWxkKCkuY3JlYXRlKCkpLmFsaWFzKHJlbW90ZVRyYXZlcnNhbFNvdXJjZU5hbWUpOworICAgICAgICBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcyhyZW1vdGVUcmF2ZXJzYWxTb3VyY2VOYW1lKTsKICAgICAgICAgdHJ5Q2xvc2VDbHVzdGVyID0gZmFsc2U7CiAgICAgICAgIHRyeUNsb3NlQ2xpZW50ID0gdHJ1ZTsKICAgICAgICAgdGhpcy5jb25mID0gT3B0aW9uYWwub2YoY29uZik7CkBAIC0yMjIsOSArMjE1LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxFPiBDb21wbGV0YWJsZUZ1dHVyZTxSZW1vdGVUcmF2ZXJzYWw8PywgRT4+IHN1Ym1pdEFzeW5jKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB0aHJvd3MgUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbiB7CisgICAgcHVibGljIDxFPiBDb21wbGV0YWJsZUZ1dHVyZTxSZW1vdGVUcmF2ZXJzYWw8PywgRT4+IHN1Ym1pdEFzeW5jKGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nKSB0aHJvd3MgUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gY2xpZW50LnN1Ym1pdEFzeW5jKGJ5dGVjb2RlLCBnZXRSZXF1ZXN0T3B0aW9ucyhieXRlY29kZSkpLnRoZW5BcHBseShycyAtPiBuZXcgRHJpdmVyUmVtb3RlVHJhdmVyc2FsPD4ocnMsIGNsaWVudCwgYXR0YWNoRWxlbWVudHMsIGNvbmYpKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nLmFkZEcocmVtb3RlVHJhdmVyc2FsU291cmNlTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gY2xpZW50LnN1Ym1pdEFzeW5jKGdyZW1saW5MYW5nLmdldEdyZW1saW4oKSwgZ2V0UmVxdWVzdE9wdGlvbnMoZ3JlbWxpbkxhbmcpKQorICAgICAgICAgICAgICAgICAgICAudGhlbkFwcGx5KHJzIC0+IG5ldyBEcml2ZXJSZW1vdGVUcmF2ZXJzYWw8PihycywgY2xpZW50LCBhdHRhY2hFbGVtZW50cywgY29uZikpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uKGV4KTsKICAgICAgICAgfQpAQCAtMjM0LDEzICsyMjksNyBAQAogICAgICAqIElmIHRoZSBjb25uZWN0aW9uIGlzIGJvdW5kIHRvIGEgc2Vzc2lvbiwgdGhlbiBnZXQgdGhlIHNlc3Npb24gaWRlbnRpZmllciBmcm9tIGl0LgogICAgICAqLwogICAgIE9wdGlvbmFsPFN0cmluZz4gZ2V0U2Vzc2lvbklkKCkgewotICAgICAgICBpZiAoY2xpZW50IGluc3RhbmNlb2YgQ2xpZW50LlNlc3Npb25lZENsaWVudCkgewotICAgICAgICAgICAgZmluYWwgQ2xpZW50LlNlc3Npb25lZENsaWVudCBjID0gKENsaWVudC5TZXNzaW9uZWRDbGllbnQpIGNsaWVudDsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZihjLmdldFNlc3Npb25JZCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQuU2Vzc2lvbmVkQ2hpbGRDbGllbnQpIHsKLSAgICAgICAgICAgIGZpbmFsIENsaWVudC5TZXNzaW9uZWRDaGlsZENsaWVudCBjID0gKENsaWVudC5TZXNzaW9uZWRDaGlsZENsaWVudCkgY2xpZW50OwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mKGMuZ2V0U2Vzc2lvbklkKCkpOwotICAgICAgICB9CisgICAgICAgIC8vIHRvZG86IG5vdCBpbXBsZW1lbnRlZAogCiAgICAgICAgIHJldHVybiBPcHRpb25hbC5lbXB0eSgpOwogICAgIH0KQEAgLTI1OSwyOCArMjQ4LDEzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgRHJpdmVyUmVtb3RlVHJhbnNhY3Rpb259LgorICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIEh0dHBSZW1vdGVUcmFuc2FjdGlvbn0gZm9yIGV4ZWN1dGluZyB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgbmV3IHtAbGluayBIdHRwUmVtb3RlVHJhbnNhY3Rpb259CiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFRyYW5zYWN0aW9uIHR4KCkgewotICAgICAgICBpZiAoY2xpZW50LmdldENsdXN0ZXIoKS5nZXRDaGFubmVsaXplcigpLmVxdWFsc0lnbm9yZUNhc2UoQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgiQ2Fubm90IHVzZSBzZXNzaW9ucyBvciB0eCgpIHdpdGggJXMiLCBDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBib29sZWFuIHJldXNlQ29ubmVjdGlvbnMgPSBjbGllbnQuZ2V0Q2x1c3RlcigpLmlzUmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzZXNzaW9uSWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpOwotICAgICAgICBmaW5hbCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGNvbm5lY3Rpb247Ci0KLSAgICAgICAgaWYgKHJldXNlQ29ubmVjdGlvbnMpIHsKLSAgICAgICAgICAgIGNsaWVudC5pbml0KCk7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQuU2Vzc2lvbmVkQ2hpbGRDbGllbnQgY2hpbGRDbGllbnQgPSBuZXcgQ2xpZW50LlNlc3Npb25lZENoaWxkQ2xpZW50KGNsaWVudCwgc2Vzc2lvbklkKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24gPSAgbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oCi0gICAgICAgICAgICAgICAgICAgIGNoaWxkQ2xpZW50LCByZW1vdGVUcmF2ZXJzYWxTb3VyY2VOYW1lLCB0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbigKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50LmdldENsdXN0ZXIoKS5jb25uZWN0KHNlc3Npb25JZCksIHJlbW90ZVRyYXZlcnNhbFNvdXJjZU5hbWUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgRHJpdmVyUmVtb3RlVHJhbnNhY3Rpb24oY29ubmVjdGlvbik7CisgICAgICAgIHJldHVybiBjbGllbnQuZ2V0Q2x1c3RlcigpLnRyYW5zYWN0KHJlbW90ZVRyYXZlcnNhbFNvdXJjZU5hbWUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvRHJpdmVyUmVtb3RlVHJhbnNhY3Rpb24uamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0RyaXZlclJlbW90ZVRyYW5zYWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNzljNWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvRHJpdmVyUmVtb3RlVHJhbnNhY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLlJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLlJlbW90ZVRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UcmFuc2FjdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5Db25zdW1lcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyYXBoT3AuVFhfQ09NTUlUOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyYXBoT3AuVFhfUk9MTEJBQ0s7Ci0KLS8qKgotICogQSByZW1vdGUge0BsaW5rIFRyYW5zYWN0aW9ufSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIGltcGxlbWVudGVkIHdpdGggdGhlIEphdmEgZHJpdmVyLiBJdCBpcyBhbHNvIGEgcHJveHkgZm9yIGEKLSAqIHtAbGluayBSZW1vdGVDb25uZWN0aW9ufSB0aGF0IGlzIGJvdW5kIHRvIGEgc2Vzc2lvbi4KLSAqIDxwLz4KLSAqIEZvciB1c2Vycywgc3RhcnRpbmcgYSB0cmFuc2FjdGlvbiB3aXRoIHtAbGluayAjYmVnaW4oKX0gd2lsbCBwcm9kdWNlIGEge0BsaW5rIFRyYXZlcnNhbFNvdXJjZX0gdGhhdCBjYW4gYmUgdXNlZAotICogYWNyb3NzIG11bHRpcGxlIHRocmVhZHMgc2VuZGluZyB0aGUgYnl0ZWNvZGUgYmFzZWQgcmVxdWVzdHMgdG8gYSByZW1vdGUgc2Vzc2lvbi4gSXQgaXMgd29ydGggbm90aW5nIHRoYXQgdGhlIHNlc3Npb24KLSAqIHdpbGwgcHJvY2VzcyB0aGVzZSByZXF1ZXN0cyBpbiBhIHNlcmlhbCBmYXNoaW9uIGFuZCBub3QgaW4gcGFyYWxsZWwuIENhbGxpbmcge0BsaW5rICNjb21taXQoKX0gb3IKLSAqIHtAbGluayAjcm9sbGJhY2soKX0gd2lsbCBhbHNvIGNsb3NlIHRoZSBzZXNzaW9uIGFuZCBubyBhZGRpdGlvbmFsIHRyYXZlcnNhbCBjYW4gYmUgZXhlY3V0ZWQgb24gdGhlCi0gKiB7QGxpbmsgVHJhdmVyc2FsU291cmNlfS4gQSBmcmVzaCBjYWxsIHRvIHtAbGluayAjYmVnaW4oKX0gd2lsbCBiZSByZXF1aXJlZCB0byBvcGVuIGEgZnJlc2ggc2Vzc2lvbiB0byB3b3JrIHdpdGguCi0gKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB7QGxpbmsgI2Nsb3NlKCl9IGlzIHRvIGNvbW1pdCB0aGUgdHJhbnNhY3Rpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEcml2ZXJSZW1vdGVUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIFRyYW5zYWN0aW9uLCBSZW1vdGVDb25uZWN0aW9uIHsKLQotICAgIHByaXZhdGUgZmluYWwgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBzZXNzaW9uQmFzZWRDb25uZWN0aW9uOwotCi0gICAgcHJvdGVjdGVkIENvbnN1bWVyPFRyYW5zYWN0aW9uPiBjbG9zZUNvbnN1bWVyID0gQ0xPU0VfQkVIQVZJT1IuQ09NTUlUOwotCi0gICAgcHVibGljIERyaXZlclJlbW90ZVRyYW5zYWN0aW9uKGZpbmFsIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbikgewotICAgICAgICB0aGlzLnNlc3Npb25CYXNlZENvbm5lY3Rpb24gPSBzZXNzaW9uQmFzZWRDb25uZWN0aW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8VCBleHRlbmRzIFRyYXZlcnNhbFNvdXJjZT4gVCBiZWdpbihmaW5hbCBDbGFzczxUPiB0cmF2ZXJzYWxTb3VyY2VDbGFzcykgewotICAgICAgICBpZiAoIWlzT3BlbigpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVHJhbnNhY3Rpb24gY2Fubm90IGJlZ2luIGFzIHRoZSBzZXNzaW9uIGlzIGFscmVhZHkgY2xvc2VkIC0gY3JlYXRlIGEgbmV3IFRyYW5zYWN0aW9uIik7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWxTb3VyY2VDbGFzcy5nZXRDb25zdHJ1Y3RvcihSZW1vdGVDb25uZWN0aW9uLmNsYXNzKS5uZXdJbnN0YW5jZSh0aGlzKTsKLSAgICAgICAgfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQnkgdmlydHVlIG9mIGNyZWF0aW5nIGEge0Bjb2RlIERyaXZlclJlbW90ZVRyYW5zYWN0aW9ufSwgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbnNpZGVyZWQgb3Blbi4gVGhlcmUgaXMgbm8gbmVlZAotICAgICAqIHRvIGNhbGwgdGhpcyBtZXRob2QuIENhbGxpbmcgaXQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gaXMgY2xvc2VkIHdpbGwgcmVzdWx0IGluIGV4Y2VwdGlvbi4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvcGVuKCkgewotICAgICAgICAvLyBubyBuZWVkIHRvIGlzc3VlIGEgY29tbWFuZCB0byBvcGVuIHRoZSB0cmFuc2FjdGlvbiwgdGhlIHNlcnZlciBpcyBhbHJlYWR5IGluIHN1Y2ggYSBzdGF0ZSBpZiB0aGUKLSAgICAgICAgaWYgKCFpc09wZW4oKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRyYW5zYWN0aW9uIGNhbm5vdCBiZSBvcGVuZWQgYXMgdGhlIHNlc3Npb24gaXMgYWxyZWFkeSBjbG9zZWQgLSBjcmVhdGUgYSBuZXcgVHJhbnNhY3Rpb24iKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB7Ci0gICAgICAgIGNsb3NlUmVtb3RlVHJhbnNhY3Rpb24oVFhfQ09NTUlULCAiVHJhbnNhY3Rpb24gY29tbWl0IGZvciAlcyBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByb2xsYmFjaygpIHsKLSAgICAgICAgY2xvc2VSZW1vdGVUcmFuc2FjdGlvbihUWF9ST0xMQkFDSywgIlRyYW5zYWN0aW9uIHJvbGxiYWNrIGZvciAlcyBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2xvc2VSZW1vdGVUcmFuc2FjdGlvbihmaW5hbCBHcmFwaE9wIGNsb3NlVHhXaXRoLCBmaW5hbCBTdHJpbmcgZmFpbHVyZU1zZykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8ga2luZGEgd2VpcmQgYnV0IHdlIGhhc05leHQoKSB0aGUgZ3JhcGggY29tbWFuZCBoZXJlIHRvIGVuc3VyZSB0aGF0IGl0IHJ1bnMgdG8gY29tcGxldGlvbiBvcgotICAgICAgICAgICAgLy8gZWxzZSB5b3UgZG9uJ3QgZ3VhcmFudGVlIHRoYXQgd2UgaGF2ZSB0aGUgcmV0dXJuZWQgTk9fQ09OVEVOVCBtZXNzYWdlIGluIGhhbmQgYmVmb3JlIHByb2NlZWRpbmcKLSAgICAgICAgICAgIC8vIHdoaWNoIGNvdWxkIG1lYW4gdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIGluIHRoZSBwcm9jZXNzIG9mIGNvbW1pdHRpbmcuIG5vdCBzdXJlIHdoeSBpdGVyYXRlKCkKLSAgICAgICAgICAgIC8vIGRvZXNuJ3QgcXVpdGUgd29yayBpbiB0aGlzIGNvbnRleHQuCi0gICAgICAgICAgICB0aGlzLnNlc3Npb25CYXNlZENvbm5lY3Rpb24uc3VibWl0QXN5bmMoY2xvc2VUeFdpdGguZ2V0Qnl0ZWNvZGUoKSkuam9pbigpLmhhc05leHQoKTsKLSAgICAgICAgICAgIHRoaXMuc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5jbG9zZSgpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoZmFpbHVyZU1zZywgc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5nZXRTZXNzaW9uSWQoKSksIGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzT3BlbigpIHsKLSAgICAgICAgLy8gZm9yIHR4IHB1cnBvc2VzIGNsb3NpbmcgaXMgYSBnb29kIGVub3VnaCBjaGVjawotICAgICAgICByZXR1cm4gIXNlc3Npb25CYXNlZENvbm5lY3Rpb24uY2xpZW50LmlzQ2xvc2luZygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBkZWZhdWx0IGNsb3NlIGJlaGF2aW9yIGZvciB0aGlzIHtAbGluayBUcmFuc2FjdGlvbn0gaW1wbGVtZW50YXRpb24gaXMgdG8ge0BsaW5rICNjb21taXQoKX0uCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgICAgIHRoaXMuY2xvc2VDb25zdW1lci5hY2NlcHQodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyB7QGxpbmsgVHJhbnNhY3Rpb259IGltcGxlbWVudGF0aW9uIGlzIG5vdCBhdXRvLW1hbmFnZWQgYW5kIHRoZXJlZm9yZSB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlYWRXcml0ZSgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJSZW1vdGUgdHJhbnNhY3Rpb24gYmVoYXZpb3JzIGFyZSBub3QgYXV0by1tYW5hZ2VkIC0gdGhleSBhcmUgYWx3YXlzIG1hbnVhbGx5IGNvbnRyb2xsZWQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIHtAbGluayBUcmFuc2FjdGlvbn0gaW1wbGVtZW50YXRpb24gaXMgbm90IGF1dG8tbWFuYWdlZCBhbmQgdGhlcmVmb3JlIHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFRyYW5zYWN0aW9uIG9uUmVhZFdyaXRlKGZpbmFsIENvbnN1bWVyPFRyYW5zYWN0aW9uPiBjb25zdW1lcikgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlJlbW90ZSB0cmFuc2FjdGlvbiBiZWhhdmlvcnMgYXJlIG5vdCBjb25maWd1cmFibGUgLSB0aGV5IGFyZSBhbHdheXMgbWFudWFsbHkgY29udHJvbGxlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUcmFuc2FjdGlvbiBvbkNsb3NlKGZpbmFsIENvbnN1bWVyPFRyYW5zYWN0aW9uPiBjb25zdW1lcikgewotICAgICAgICB0aGlzLmNsb3NlQ29uc3VtZXIgPSBjb25zdW1lcjsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgcmVtb3RlIHRyYW5zYWN0aW9uIGxpc3RlbmVycy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhZGRUcmFuc2FjdGlvbkxpc3RlbmVyKGZpbmFsIENvbnN1bWVyPFN0YXR1cz4gbGlzdGVuZXIpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJSZW1vdGUgdHJhbnNhY3Rpb25zIGNhbm5vdCBoYXZlIGxpc3RlbmVycyBhdHRhY2hlZCIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIHJlbW90ZSB0cmFuc2FjdGlvbiBsaXN0ZW5lcnMuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVHJhbnNhY3Rpb25MaXN0ZW5lcihmaW5hbCBDb25zdW1lcjxTdGF0dXM+IGxpc3RlbmVyKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVtb3RlIHRyYW5zYWN0aW9ucyBjYW5ub3QgaGF2ZSBsaXN0ZW5lcnMgYXR0YWNoZWQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGVyZSBpcyBubyBzdXBwb3J0IGZvciByZW1vdGUgdHJhbnNhY3Rpb24gbGlzdGVuZXJzLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsZWFyVHJhbnNhY3Rpb25MaXN0ZW5lcnMoKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVtb3RlIHRyYW5zYWN0aW9ucyBjYW5ub3QgaGF2ZSBsaXN0ZW5lcnMgYXR0YWNoZWQiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBjaGlsZCB0cmFuc2FjdGlvbnMsIHRoZXJlZm9yZSB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyB7QGxpbmsgVHJhbnNhY3Rpb24jTk9fT1B9LgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUcmFuc2FjdGlvbiB0eCgpIHsKLSAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uLk5PX09QOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8RT4gQ29tcGxldGFibGVGdXR1cmU8UmVtb3RlVHJhdmVyc2FsPD8sIEU+PiBzdWJtaXRBc3luYyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgdGhyb3dzIFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5zdWJtaXRBc3luYyhieXRlY29kZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvRHJpdmVyUmVtb3RlVHJhdmVyc2FsLmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9Ecml2ZXJSZW1vdGVUcmF2ZXJzYWwuamF2YQppbmRleCBjNjA2ZWI1Li43ZDFkM2Q1IDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9Ecml2ZXJSZW1vdGVUcmF2ZXJzYWwuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9Ecml2ZXJSZW1vdGVUcmF2ZXJzYWwuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHRTZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS50cmF2ZXJzYWwuQWJzdHJhY3RSZW1vdGVUcmF2ZXJzYWw7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS50cmF2ZXJzYWwuRGVmYXVsdFJlbW90ZVRyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5SZW1vdGVUcmF2ZXJzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS50cmF2ZXJzYWwuc3RlcC5tYXAuUmVtb3RlU3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKQEAgLTExMiw3ICsxMTMsMTAgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFRyYXZlcnNlci5BZG1pbjxFPiBuZXh0KCkgewotICAgICAgICAgICAgcmV0dXJuIChSZW1vdGVUcmF2ZXJzZXI8RT4pIGlubmVyLm5leHQoKS5nZXRPYmplY3QoKTsKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCBuZXh0ID0gaW5uZXIubmV4dCgpLmdldE9iamVjdCgpOworICAgICAgICAgICAgcmV0dXJuIG5leHQgaW5zdGFuY2VvZiBSZW1vdGVUcmF2ZXJzZXIKKyAgICAgICAgICAgICAgICAgICAgPyAoUmVtb3RlVHJhdmVyc2VyPEU+KSBuZXh0CisgICAgICAgICAgICAgICAgICAgIDogbmV3IERlZmF1bHRSZW1vdGVUcmF2ZXJzZXI8PigoRSkgbmV4dCwgMSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0h0dHBSZW1vdGVUcmFuc2FjdGlvbi5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvSHR0cFJlbW90ZVRyYW5zYWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0ZGRlMwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0h0dHBSZW1vdGVUcmFuc2FjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuSG9zdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZW1vdGVUcmFuc2FjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXF1ZXN0T3B0aW9uczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0U2V0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlRyYW5zYWN0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuVHJhbnNhY3Rpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CitpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkNvbnN1bWVyOworCisvKioKKyAqIEEge0BsaW5rIFRyYW5zYWN0aW9ufSBpbXBsZW1lbnRhdGlvbiBmb3IgSFRUUC1iYXNlZCByZW1vdGUgY29ubmVjdGlvbnMuCisgKiA8cD4KKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgc3luY2hyb25vdXMsIHNlcXVlbnRpYWwgcmVxdWVzdCBleGVjdXRpb24gd2l0aGluIGEgdHJhbnNhY3Rpb24gY29udGV4dC4KKyAqIEFsbCByZXF1ZXN0cyBhcmUgcGlubmVkIHRvIGEgc2luZ2xlIGhvc3QgYW5kIGluY2x1ZGUgdGhlIHRyYW5zYWN0aW9uIElEIChhZnRlciBiZWdpbigpKS4KKyAqIDxwPgorICogS2V5IGNoYXJhY3RlcmlzdGljczoKKyAqIDx1bD4KKyAqICAgPGxpPlN5bmNocm9ub3VzIEFQSSBvbmx5IC0gbm8gc3VibWl0QXN5bmMoKSBtZXRob2RzPC9saT4KKyAqICAgPGxpPkhvc3QgcGlubmluZyAtIGFsbCByZXF1ZXN0cyBnbyB0byB0aGUgc2FtZSBzZXJ2ZXI8L2xpPgorICogICA8bGk+U2VxdWVudGlhbCBleGVjdXRpb24gLSByZXF1ZXN0cyBibG9jayB1bnRpbCBjb21wbGV0ZTwvbGk+CisgKiA8L3VsPgorICogPHA+CisgKiBVc2FnZToKKyAqIDxwcmU+CisgKiBUcmFuc2FjdGlvbiB0eCA9IGNsdXN0ZXIudHJhbnNhY3QoImciKTsKKyAqIEdyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IHR4LmJlZ2luKCk7CisgKiBndHguYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5pdGVyYXRlKCk7CisgKiB0eC5jb21taXQoKTsKKyAqIDwvcHJlPgorICoKKyAqIFRoaXMgY2xhc3MgaXMgPGI+Tk9UPC9iPiB0aHJlYWQtc2FmZS4KKyAqLworcHVibGljIGNsYXNzIEh0dHBSZW1vdGVUcmFuc2FjdGlvbiBpbXBsZW1lbnRzIFJlbW90ZVRyYW5zYWN0aW9uIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoSHR0cFJlbW90ZVRyYW5zYWN0aW9uLmNsYXNzKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIENMT1NJTkdfTUFYX1dBSVRfTVMgPSAxMDAwMDsKKworICAgIHByb3RlY3RlZCBDb25zdW1lcjxUcmFuc2FjdGlvbj4gY2xvc2VDb25zdW1lciA9IENMT1NFX0JFSEFWSU9SLkNPTU1JVDsKKyAgICBwcml2YXRlIGZpbmFsIENsaWVudC5QaW5uZWRDbGllbnQgcGlubmVkQ2xpZW50OworICAgIHByaXZhdGUgZmluYWwgQ2x1c3RlciBjbHVzdGVyOworICAgIHByaXZhdGUgZmluYWwgSG9zdCBwaW5uZWRIb3N0OworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGdyYXBoQWxpYXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgdHJhbnNhY3Rpb25JZDsgIC8vIG51bGwgdW50aWwgYmVnaW4oKSwgc2V0IGZyb20gc2VydmVyIHJlc3BvbnNlCisgICAgcHJpdmF0ZSBUcmFuc2FjdGlvblN0YXRlIHN0YXRlID0gVHJhbnNhY3Rpb25TdGF0ZS5OT1RfU1RBUlRFRDsKKworICAgIHByaXZhdGUgZW51bSBUcmFuc2FjdGlvblN0YXRlIHsKKyAgICAgICAgTk9UX1NUQVJURUQsIE9QRU4sIENMT1NFRAorICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgSFRUUCB0cmFuc2FjdGlvbi4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgdHJhbnNhY3Rpb24gaXMgbm90IHN0YXJ0ZWQgdW50aWwge0BsaW5rICNiZWdpbihDbGFzcyl9IGlzIGNhbGxlZC4KKyAgICAgKiBBIGhvc3QgaXMgc2VsZWN0ZWQgYXQgY3JlYXRpb24gdGltZSBhbmQgYWxsIHJlcXVlc3RzIHdpbGwgYmUgcGlubmVkIHRvIGl0LgorICAgICAqCisgICAgICogQHBhcmFtIHBpbm5lZENsaWVudCB0aGUgdW5kZXJseWluZyBjbGllbnQgZm9yIGNvbm5lY3Rpb24gYWNjZXNzCisgICAgICogQHBhcmFtIGdyYXBoQWxpYXMgdGhlIGdyYXBoL3RyYXZlcnNhbCBzb3VyY2UgYWxpYXMgKGUuZy4sICJnIikKKyAgICAgKiBAdGhyb3dzIE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbiBpZiBubyBob3N0cyBhcmUgYXZhaWxhYmxlIGluIHRoZSBjbHVzdGVyCisgICAgICovCisgICAgcHVibGljIEh0dHBSZW1vdGVUcmFuc2FjdGlvbihmaW5hbCBDbGllbnQuUGlubmVkQ2xpZW50IHBpbm5lZENsaWVudCwgZmluYWwgU3RyaW5nIGdyYXBoQWxpYXMpIHsKKyAgICAgICAgdGhpcy5waW5uZWRDbGllbnQgPSBwaW5uZWRDbGllbnQ7CisgICAgICAgIHRoaXMuZ3JhcGhBbGlhcyA9IGdyYXBoQWxpYXM7CisgICAgICAgIHRoaXMucGlubmVkSG9zdCA9IHBpbm5lZENsaWVudC5nZXRQaW5uZWRIb3N0KCk7CisgICAgICAgIHRoaXMuY2x1c3RlciA9IHBpbm5lZENsaWVudC5nZXRDbHVzdGVyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm90IHN1cHBvcnRlZCBmb3IgcmVtb3RlIHRyYW5zYWN0aW9ucy4gVXNlIHtAbGluayAjYmVnaW4oQ2xhc3MpfSBpbnN0ZWFkLgorICAgICAqCisgICAgICogQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBhbHdheXMKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvcGVuKCkgeworICAgICAgICBiZWdpbigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyBhIHRyYW5zYWN0aW9uIGFuZCByZXR1cm5zIGEgdHJhdmVyc2FsIHNvdXJjZSBib3VuZCB0byBpdC4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIG1ldGhvZCBzZW5kcyB7QGNvZGUgZy50eCgpLmJlZ2luKCl9IHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHJldHVybnMKKyAgICAgKiB0aGUgdHJhbnNhY3Rpb24gSUQuIEFsbCBzdWJzZXF1ZW50IHJlcXVlc3RzIHdpbGwgaW5jbHVkZSB0aGlzIElELgorICAgICAqCisgICAgICogQHBhcmFtIHRyYXZlcnNhbFNvdXJjZUNsYXNzIHRoZSBjbGFzcyBvZiB0aGUgdHJhdmVyc2FsIHNvdXJjZSB0byBjcmVhdGUKKyAgICAgKiBAcGFyYW0gPFQ+IHRoZSB0eXBlIG9mIHRoZSB0cmF2ZXJzYWwgc291cmNlCisgICAgICogQHJldHVybiBhIG5ldyB0cmF2ZXJzYWwgc291cmNlIGJvdW5kIHRvIHRoaXMgdHJhbnNhY3Rpb24KKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBzdGFydGVkCisgICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSB0cmFuc2FjdGlvbiBmYWlscyB0byBiZWdpbgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8VCBleHRlbmRzIFRyYXZlcnNhbFNvdXJjZT4gVCBiZWdpbihmaW5hbCBDbGFzczxUPiB0cmF2ZXJzYWxTb3VyY2VDbGFzcykgeworICAgICAgICBpZiAoc3RhdGUgIT0gVHJhbnNhY3Rpb25TdGF0ZS5OT1RfU1RBUlRFRCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVHJhbnNhY3Rpb24gYWxyZWFkeSBzdGFydGVkIik7CisgICAgICAgIH0KKyAgICAgICAgY2x1c3Rlci50cmFja1RyYW5zYWN0aW9uKHRoaXMpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBTZW5kIGJlZ2luIC0gbm8gdHhJZCBhdHRhY2hlZCB5ZXQKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCBycyA9IHN1Ym1pdEludGVybmFsKCJnLnR4KCkuYmVnaW4oKSIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTZXJ2ZXIgcmV0dXJucyB0aGUgdHJhbnNhY3Rpb24gSUQKKyAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25JZCA9IGV4dHJhY3RUcmFuc2FjdGlvbklkKHJzKTsKKyAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBUcmFuc2FjdGlvblN0YXRlLk9QRU47CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBjbGVhblVwKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIGJlZ2luIHRyYW5zYWN0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCksIGUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIFJlbW90ZUNvbm5lY3Rpb24gZm9yIHRoZSB0cmF2ZXJzYWwgc291cmNlCisgICAgICAgIGZpbmFsIFRyYW5zYWN0aW9uUmVtb3RlQ29ubmVjdGlvbiB0eENvbm5lY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25SZW1vdGVDb25uZWN0aW9uKHRoaXMpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsU291cmNlQ2xhc3MuZ2V0Q29uc3RydWN0b3IoUmVtb3RlQ29ubmVjdGlvbi5jbGFzcykubmV3SW5zdGFuY2UodHhDb25uZWN0aW9uKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJvbGxiYWNrKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIFRyYXZlcnNhbFNvdXJjZSIsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRXh0cmFjdHMgdGhlIHRyYW5zYWN0aW9uIElEIGZyb20gdGhlIGJlZ2luKCkgcmVzcG9uc2UuCisgICAgICogPHA+CisgICAgICogVGhlIHNlcnZlciByZXR1cm5zIHRoZSB0cmFuc2FjdGlvbiBJRCBhcyBwYXJ0IG9mIHRoZSByZXNwb25zZSB0byBnLnR4KCkuYmVnaW4oKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBycyB0aGUgcmVzdWx0IHNldCBmcm9tIHRoZSBiZWdpbiByZXF1ZXN0CisgICAgICogQHJldHVybiB0aGUgdHJhbnNhY3Rpb24gSUQKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBleHRyYWN0VHJhbnNhY3Rpb25JZChmaW5hbCBSZXN1bHRTZXQgcnMpIHsKKyAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHJlc3VsdHMgYW5kIGV4dHJhY3QgdGhlIHRyYW5zYWN0aW9uIElECisgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gcnMuYWxsKCkuam9pbigpOworICAgICAgICBpZiAocmVzdWx0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlNlcnZlciBkaWQgbm90IHJldHVybiB0cmFuc2FjdGlvbiBJRCIpOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBPYmplY3QgaWQgPSByZXN1bHRzLmdldCgwKS5nZXQoTWFwLmNsYXNzKS5nZXQoInRyYW5zYWN0aW9uSWQiKTsKKyAgICAgICAgICAgIGlmIChpZCA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTZXJ2ZXIgZGlkIG5vdCByZXR1cm4gdHJhbnNhY3Rpb24gSUQiKTsKKworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGlkU3RyID0gaWQudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmIChpZFN0ci5pc0JsYW5rKCkpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlNlcnZlciByZXR1cm5lZCBlbXB0eSB0cmFuc2FjdGlvbiBJRCIpOworCisgICAgICAgICAgICByZXR1cm4gaWRTdHI7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTZXJ2ZXIgZGlkIG5vdCByZXR1cm4gdHJhbnNhY3Rpb24gSUQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbW1pdHMgdGhlIHRyYW5zYWN0aW9uLgorICAgICAqIDxwPgorICAgICAqIFNlbmRzIHtAY29kZSBnLnR4KCkuY29tbWl0KCl9IHRvIHRoZSBzZXJ2ZXIgYW5kIGNsb3NlcyB0aGUgdHJhbnNhY3Rpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgbm90IG9wZW4KKyAgICAgKiBAdGhyb3dzIFRyYW5zYWN0aW9uRXhjZXB0aW9uIGlmIHRoZSBjb21taXQgZmFpbHMKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjb21taXQoKSB7CisgICAgICAgIGNsb3NlUmVtb3RlVHJhbnNhY3Rpb24oImcudHgoKS5jb21taXQoKSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJvbGxzIGJhY2sgdGhlIHRyYW5zYWN0aW9uLgorICAgICAqIDxwPgorICAgICAqIFNlbmRzIHtAY29kZSBnLnR4KCkucm9sbGJhY2soKX0gdG8gdGhlIHNlcnZlciBhbmQgY2xvc2VzIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBub3Qgb3BlbgorICAgICAqIEB0aHJvd3MgVHJhbnNhY3Rpb25FeGNlcHRpb24gaWYgdGhlIHJvbGxiYWNrIGZhaWxzCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcm9sbGJhY2soKSB7CisgICAgICAgIGNsb3NlUmVtb3RlVHJhbnNhY3Rpb24oImcudHgoKS5yb2xsYmFjaygpIik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNsb3NlUmVtb3RlVHJhbnNhY3Rpb24oZmluYWwgU3RyaW5nIGNsb3NlU2NyaXB0KSB7CisgICAgICAgIGlmIChzdGF0ZSAhPSBUcmFuc2FjdGlvblN0YXRlLk9QRU4pIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRyYW5zYWN0aW9uIGlzIG5vdCBvcGVuIik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN1Ym1pdEludGVybmFsKGNsb3NlU2NyaXB0KS5hbGwoKS5nZXQoQ0xPU0lOR19NQVhfV0FJVF9NUywgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICAgICAgICAgIGNsZWFuVXAoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJGYWlsZWQgdG8ge30gdHJhbnNhY3Rpb24gb24ge30iLCBjbG9zZVNjcmlwdCwgcGlubmVkSG9zdCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNhY3Rpb25FeGNlcHRpb24oIkZhaWxlZCB0byAiICsgY2xvc2VTY3JpcHQsIGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNsZWFuVXAoKSB7CisgICAgICAgIHN0YXRlID0gVHJhbnNhY3Rpb25TdGF0ZS5DTE9TRUQ7CisgICAgICAgIGNsdXN0ZXIudW50cmFja1RyYW5zYWN0aW9uKHRoaXMpOworICAgICAgICBwaW5uZWRDbGllbnQuY2xvc2VBc3luYygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNlcnZlci1nZW5lcmF0ZWQgdHJhbnNhY3Rpb24gSUQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgdHJhbnNhY3Rpb24KKyAgICAgKiBoYXMgbm90IHlldCBiZWVuIHN0YXJ0ZWQgdmlhIHtAbGluayAjYmVnaW4oQ2xhc3MpfS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHRyYW5zYWN0aW9uIElELCBvciBudWxsIGlmIG5vdCB5ZXQgYmVndW4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGdldFRyYW5zYWN0aW9uSWQoKSB7CisgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbklkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzT3BlbigpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRlID09IFRyYW5zYWN0aW9uU3RhdGUuT1BFTjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZWFkV3JpdGUoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVtb3RlIHRyYW5zYWN0aW9uIGJlaGF2aW9ycyBhcmUgbm90IGNvbmZpZ3VyYWJsZSAtIHRoZXkgYXJlIGFsd2F5cyBtYW51YWxseSBjb250cm9sbGVkIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIGNsb3NlQ29uc3VtZXIuYWNjZXB0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgLy8gdGhpcyBpcyBqdXN0IGZvciBzYWZldHkgaW4gY2FzZSBvZiBjdXN0b20gY2xvc2VDb25zdW1lciBidXQgc2hvdWxkIG5vcm1hbGx5IGJlIGhhbmRsZWQgYnkgY29tbWl0L3JvbGxiYWNrCisgICAgICAgIGNsZWFuVXAoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgVHJhbnNhY3Rpb24gb25SZWFkV3JpdGUoZmluYWwgQ29uc3VtZXI8VHJhbnNhY3Rpb24+IGNvbnN1bWVyKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiUmVtb3RlIHRyYW5zYWN0aW9uIGJlaGF2aW9ycyBhcmUgbm90IGNvbmZpZ3VyYWJsZSAtIHRoZXkgYXJlIGFsd2F5cyBtYW51YWxseSBjb250cm9sbGVkIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFRyYW5zYWN0aW9uIG9uQ2xvc2UoZmluYWwgQ29uc3VtZXI8VHJhbnNhY3Rpb24+IGNvbnN1bWVyKSB7CisgICAgICAgIHRoaXMuY2xvc2VDb25zdW1lciA9IGNvbnN1bWVyOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhZGRUcmFuc2FjdGlvbkxpc3RlbmVyKGZpbmFsIENvbnN1bWVyPFN0YXR1cz4gbGlzdGVuZXIpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJSZW1vdGUgdHJhbnNhY3Rpb25zIGNhbm5vdCBoYXZlIGxpc3RlbmVycyBhdHRhY2hlZCIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRyYW5zYWN0aW9uTGlzdGVuZXIoZmluYWwgQ29uc3VtZXI8U3RhdHVzPiBsaXN0ZW5lcikgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlJlbW90ZSB0cmFuc2FjdGlvbnMgY2Fubm90IGhhdmUgbGlzdGVuZXJzIGF0dGFjaGVkIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xlYXJUcmFuc2FjdGlvbkxpc3RlbmVycygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJSZW1vdGUgdHJhbnNhY3Rpb25zIGNhbm5vdCBoYXZlIGxpc3RlbmVycyBhdHRhY2hlZCIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXN1bHRTZXQgc3VibWl0KGZpbmFsIFN0cmluZyBncmVtbGluKSB7CisgICAgICAgIHJldHVybiBzdWJtaXQoZ3JlbWxpbiwgUmVxdWVzdE9wdGlvbnMuRU1QVFkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXN1bHRTZXQgc3VibWl0KGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtZXRlcnMpIHsKKyAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMuQnVpbGRlciBidWlsZGVyID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKTsKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCAmJiAhcGFyYW1ldGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuZm9yRWFjaChidWlsZGVyOjphZGRQYXJhbWV0ZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdWJtaXQoZ3JlbWxpbiwgYnVpbGRlci5jcmVhdGUoKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFJlc3VsdFNldCBzdWJtaXQoZmluYWwgU3RyaW5nIGdyZW1saW4sIGZpbmFsIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMpIHsKKyAgICAgICAgaWYgKHN0YXRlICE9IFRyYW5zYWN0aW9uU3RhdGUuT1BFTikgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVHJhbnNhY3Rpb24gaXMgbm90IG9wZW4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VibWl0SW50ZXJuYWwoZ3JlbWxpbiwgb3B0aW9ucyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBSZXN1bHRTZXQgc3VibWl0SW50ZXJuYWwoZmluYWwgU3RyaW5nIGdyZW1saW4pIHsKKyAgICAgICAgcmV0dXJuIHN1Ym1pdEludGVybmFsKGdyZW1saW4sIFJlcXVlc3RPcHRpb25zLkVNUFRZKTsKKyAgICB9CisKKyAgICAvLyBzeW5jaHJvbml6ZWQgaGVyZSBpcyBhIGJpdCBkZWZlbnNpdmUgYnV0IGVuc3VyZXMgdGhhdCBldmVuIGlmIGEgdXNlciBhY2NpZGVudGFsbHkgdXNlcyB0aGlzIGluIGRpZmZlcmVudCB0aHJlYWRzLAorICAgIC8vIHRoZSBzZXJ2ZXIgd2lsbCBzdGlsbCByZWNlaXZlIHRoZSByZXF1ZXN0cyBpbiB0aGUgY29ycmVjdCBvcmRlcgorICAgIHByaXZhdGUgc3luY2hyb25pemVkIFJlc3VsdFNldCBzdWJtaXRJbnRlcm5hbChmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgUmVxdWVzdE9wdGlvbnMgb3B0aW9ucykgeworICAgICAgICBmaW5hbCBSZXF1ZXN0T3B0aW9ucy5CdWlsZGVyIGJ1aWxkZXIgPSBSZXF1ZXN0T3B0aW9ucy5CdWlsZGVyLmZyb20ob3B0aW9ucyk7CisgICAgICAgIGlmIChncmFwaEFsaWFzICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHBlci1yZXF1ZXN0IG92ZXJyaWRlIG9mICJnIiBhcyB0cmFuc2FjdGlvbnMgc2hvdWxkIG9ubHkgdGFyZ2V0IGEgc2luZ2xlIEdyYXBoIGluc3RhbmNlLgorICAgICAgICAgICAgYnVpbGRlci5hZGRHKGdyYXBoQWxpYXMpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQXR0YWNoIHR4SWQgaWYgd2UgaGF2ZSBvbmUgKG5vdCBwcmVzZW50IGZvciBiZWdpbigpKQorICAgICAgICBpZiAodHJhbnNhY3Rpb25JZCAhPSBudWxsKSB7CisgICAgICAgICAgICBidWlsZGVyLnRyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHBpbm5lZENsaWVudC5zdWJtaXQoZ3JlbWxpbiwgYnVpbGRlci5jcmVhdGUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVHJhbnNhY3Rpb24gcmVxdWVzdCBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9UcmFuc2FjdGlvblJlbW90ZUNvbm5lY3Rpb24uamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL1RyYW5zYWN0aW9uUmVtb3RlQ29ubmVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTljZTUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9UcmFuc2FjdGlvblJlbW90ZUNvbm5lY3Rpb24uamF2YQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlcXVlc3RPcHRpb25zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdFNldDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLlJlbW90ZUNvbm5lY3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLlJlbW90ZVRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlRyYW5zYWN0aW9uOworCitpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlcXVlc3RPcHRpb25zLmdldFJlcXVlc3RPcHRpb25zOworCisvKioKKyAqIEEge0BsaW5rIFJlbW90ZUNvbm5lY3Rpb259IHRoYXQgcm91dGVzIGFsbCBzdWJtaXNzaW9ucyB0aHJvdWdoIGFuIHtAbGluayBIdHRwUmVtb3RlVHJhbnNhY3Rpb259LgorICogPHA+CisgKiBUaGlzIGNvbm5lY3Rpb24gYWRhcHRzIHRoZSBzeW5jaHJvbm91cyB0cmFuc2FjdGlvbiBBUEkgdG8gdGhlIGFzeW5jIHtAbGluayBSZW1vdGVDb25uZWN0aW9ufQorICogaW50ZXJmYWNlIHJlcXVpcmVkIGJ5IHtAbGluayBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZX0uCisgKiA8cD4KKyAqLworY2xhc3MgVHJhbnNhY3Rpb25SZW1vdGVDb25uZWN0aW9uIGltcGxlbWVudHMgUmVtb3RlQ29ubmVjdGlvbiB7CisKKyAgICBwcml2YXRlIGZpbmFsIEh0dHBSZW1vdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgY29ubmVjdGlvbiBib3VuZCB0byB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSB0cmFuc2FjdGlvbiB0aGF0IG93bnMgdGhpcyBjb25uZWN0aW9uCisgICAgICovCisgICAgVHJhbnNhY3Rpb25SZW1vdGVDb25uZWN0aW9uKGZpbmFsIEh0dHBSZW1vdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbikgeworICAgICAgICB0aGlzLnRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogU3VibWl0cyBhIHRyYXZlcnNhbCB0aHJvdWdoIHRoZSB0cmFuc2FjdGlvbi4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGUgc3VibWlzc2lvbiBpcyBzeW5jaHJvbm91cyBpbnRlcm5hbGx5IGJ1dCByZXR1cm5zIGEgY29tcGxldGVkIGZ1dHVyZQorICAgICAqIHRvIHNhdGlzZnkgdGhlIHtAbGluayBSZW1vdGVDb25uZWN0aW9ufSBpbnRlcmZhY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZ3JlbWxpbkxhbmcgdGhlIHRyYXZlcnNhbCB0byBzdWJtaXQKKyAgICAgKiBAcmV0dXJuIGEgY29tcGxldGVkIGZ1dHVyZSB3aXRoIHRoZSB0cmF2ZXJzYWwgcmVzdWx0cworICAgICAqIEB0aHJvd3MgUmVtb3RlQ29ubmVjdGlvbkV4Y2VwdGlvbiBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgbm90IG9wZW4gb3Igc3VibWlzc2lvbiBmYWlscworICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyA8RT4gQ29tcGxldGFibGVGdXR1cmU8UmVtb3RlVHJhdmVyc2FsPD8sIEU+PiBzdWJtaXRBc3luYyhmaW5hbCBHcmVtbGluTGFuZyBncmVtbGluTGFuZykKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVDb25uZWN0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi5pc09wZW4oKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb24oIlRyYW5zYWN0aW9uIGlzIG5vdCBvcGVuIik7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gU3luY2hyb25vdXMgc3VibWlzc2lvbiB0aHJvdWdoIHRyYW5zYWN0aW9uCisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcnMgPSB0cmFuc2FjdGlvbi5zdWJtaXQoZ3JlbWxpbkxhbmcuZ2V0R3JlbWxpbigpLCBnZXRSZXF1ZXN0T3B0aW9ucyhncmVtbGluTGFuZykpOworCisgICAgICAgICAgICBmaW5hbCBSZW1vdGVUcmF2ZXJzYWw8PywgRT4gdHJhdmVyc2FsID0gbmV3IERyaXZlclJlbW90ZVRyYXZlcnNhbDw+KHJzLAorICAgICAgICAgICAgICAgIG51bGwsICAgLy8gY2xpZW50IG5vdCBuZWVkZWQgZm9yIGl0ZXJhdGlvbgorICAgICAgICAgICAgICAgIGZhbHNlLCAgLy8gYXR0YWNoRWxlbWVudHMKKyAgICAgICAgICAgICAgICBPcHRpb25hbC5lbXB0eSgpKTsKKworICAgICAgICAgICAgcmV0dXJuIENvbXBsZXRhYmxlRnV0dXJlLmNvbXBsZXRlZEZ1dHVyZSh0cmF2ZXJzYWwpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUNvbm5lY3Rpb25FeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBvd25pbmcgdHJhbnNhY3Rpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSB0cmFuc2FjdGlvbiB0aGF0IG93bnMgdGhpcyBjb25uZWN0aW9uCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFRyYW5zYWN0aW9uIHR4KCkgeworICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb247CisgICAgfQorCisgICAgLyoqCisgICAgICogTm8tb3AgY2xvc2UgaW1wbGVtZW50YXRpb24uCisgICAgICogPHA+CisgICAgICogVGhlIHRyYW5zYWN0aW9uIG1hbmFnZXMgaXRzIG93biBsaWZlY3ljbGUgLSB1c2VycyBzaG91bGQgY2FsbAorICAgICAqIHtAbGluayBUcmFuc2FjdGlvbiNjb21taXQoKX0gb3Ige0BsaW5rIFRyYW5zYWN0aW9uI3JvbGxiYWNrKCl9IGV4cGxpY2l0bHkuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIC8vIFRyYW5zYWN0aW9uIG1hbmFnZXMgaXRzIG93biBsaWZlY3ljbGUgLSBkb24ndCBjbG9zZSBpdCBoZXJlCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9zaW1wbGUvQWJzdHJhY3RDbGllbnQuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvc2ltcGxlL0Fic3RyYWN0Q2xpZW50LmphdmEKaW5kZXggZDYyNjM1NC4uNTcyYzU4MCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9zaW1wbGUvQWJzdHJhY3RDbGllbnQuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3NpbXBsZS9BYnN0cmFjdENsaWVudC5qYXZhCkBAIC0yNiwxMiArMjYsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKIAotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0YWJsZUZ1dHVyZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQ29uc3VtZXI7CiAKQEAgLTUxLDcgKzQ2LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHN1Ym1pdChmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgQ29uc3VtZXI8UmVzcG9uc2VNZXNzYWdlPiBjYWxsYmFjaykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGNhbGxiYWNrUmVzcG9uc2VIYW5kbGVyLmNhbGxiYWNrQnlSZXF1ZXN0SWQucHV0KHJlcXVlc3RNZXNzYWdlLmdldFJlcXVlc3RJZCgpLCBjYWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrUmVzcG9uc2VIYW5kbGVyLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgIHdyaXRlQW5kRmx1c2gocmVxdWVzdE1lc3NhZ2UpOwogICAgIH0KIApAQCAtNjMsMzMgKzU4LDEyIEBACiAgICAgICAgIHJldHVybiBzdWJtaXRBc3luYyhyZXF1ZXN0TWVzc2FnZSkuZ2V0KDE4MCwgVGltZVVuaXQuU0VDT05EUyk7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gc3VibWl0QXN5bmMoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3BvbnNlTWVzc2FnZT4+IGYgPSBuZXcgQ29tcGxldGFibGVGdXR1cmU8PigpOwotICAgICAgICBjYWxsYmFja1Jlc3BvbnNlSGFuZGxlci5jYWxsYmFja0J5UmVxdWVzdElkLnB1dChyZXF1ZXN0TWVzc2FnZS5nZXRSZXF1ZXN0SWQoKSwgcmVzcG9uc2UgLT4gewotICAgICAgICAgICAgaWYgKGYuaXNEb25lKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkEgdGVybWluYXRpbmcgbWVzc2FnZSB3YXMgYWxyZWFkeSBlbmNvdW50ZXJlZCAtIG5vIG1vcmUgbWVzc2FnZXMgc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCIpOwotCi0gICAgICAgICAgICByZXN1bHRzLmFkZChyZXNwb25zZSk7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IG1lc3NhZ2UgaXMgdGVybWluYXRpbmcgLSBpZiBpdCBpcyB0aGVuIHdlIGNhbiBtYXJrIGNvbXBsZXRlCi0gICAgICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmlzRmluYWxSZXNwb25zZSgpKSB7Ci0gICAgICAgICAgICAgICAgZi5jb21wbGV0ZShyZXN1bHRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgd3JpdGVBbmRGbHVzaChyZXF1ZXN0TWVzc2FnZSk7Ci0KLSAgICAgICAgcmV0dXJuIGY7Ci0gICAgfQotCiAgICAgc3RhdGljIGNsYXNzIENhbGxiYWNrUmVzcG9uc2VIYW5kbGVyIGV4dGVuZHMgU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyPFJlc3BvbnNlTWVzc2FnZT4gewotICAgICAgICBwdWJsaWMgTWFwPFVVSUQsIENvbnN1bWVyPFJlc3BvbnNlTWVzc2FnZT4+IGNhbGxiYWNrQnlSZXF1ZXN0SWQgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHB1YmxpYyBDb25zdW1lcjxSZXNwb25zZU1lc3NhZ2U+IGNhbGxiYWNrOwogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjaGFubmVsUmVhZDAoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGNoYW5uZWxIYW5kbGVyQ29udGV4dCwgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGNhbGxiYWNrQnlSZXF1ZXN0SWQuZ2V0KHJlc3BvbnNlLmdldFJlcXVlc3RJZCgpKS5hY2NlcHQocmVzcG9uc2UpOworICAgICAgICAgICAgY2FsbGJhY2suYWNjZXB0KHJlc3BvbnNlKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvc2ltcGxlL1NpbXBsZUNsaWVudC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9zaW1wbGUvU2ltcGxlQ2xpZW50LmphdmEKaW5kZXggNTAxOTgyNC4uOGNkZjk4NiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9zaW1wbGUvU2ltcGxlQ2xpZW50LmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9zaW1wbGUvU2ltcGxlQ2xpZW50LmphdmEKQEAgLTE4LDcgKzE4LDYgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5zaW1wbGU7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKIApAQCAtMzMsMTkgKzMyLDE5IEBACiBwdWJsaWMgaW50ZXJmYWNlIFNpbXBsZUNsaWVudCBleHRlbmRzIENsb3NlYWJsZSB7CiAKICAgICBwdWJsaWMgZGVmYXVsdCB2b2lkIHN1Ym1pdChmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgQ29uc3VtZXI8UmVzcG9uc2VNZXNzYWdlPiBjYWxsYmFjaykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1Ym1pdChSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCBncmVtbGluKS5jcmVhdGUoKSwgY2FsbGJhY2spOworICAgICAgICBzdWJtaXQoUmVxdWVzdE1lc3NhZ2UuYnVpbGQoZ3JlbWxpbikuY3JlYXRlKCksIGNhbGxiYWNrKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdWJtaXQoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIGZpbmFsIENvbnN1bWVyPFJlc3BvbnNlTWVzc2FnZT4gY2FsbGJhY2spIHRocm93cyBFeGNlcHRpb247CiAKICAgICBwdWJsaWMgZGVmYXVsdCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gc3VibWl0KGZpbmFsIFN0cmluZyBncmVtbGluKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHN1Ym1pdChSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCBncmVtbGluKS5jcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBzdWJtaXQoUmVxdWVzdE1lc3NhZ2UuYnVpbGQoZ3JlbWxpbikuY3JlYXRlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gc3VibWl0KGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB0aHJvd3MgRXhjZXB0aW9uOwogCiAgICAgcHVibGljIGRlZmF1bHQgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXNwb25zZU1lc3NhZ2U+PiBzdWJtaXRBc3luYyhmaW5hbCBTdHJpbmcgZ3JlbWxpbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBzdWJtaXRBc3luYyhSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCBncmVtbGluKS5jcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBzdWJtaXRBc3luYyhSZXF1ZXN0TWVzc2FnZS5idWlsZChncmVtbGluKS5jcmVhdGUoKSk7CiAgICAgfQogCiAgICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gc3VibWl0QXN5bmMoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb247CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3NpbXBsZS9TaW1wbGVIdHRwQ2xpZW50LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3NpbXBsZS9TaW1wbGVIdHRwQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0ZDZjNwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvc2ltcGxlL1NpbXBsZUh0dHBDbGllbnQuamF2YQpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuc2ltcGxlOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlBvb2xlZEJ5dGVCdWZBbGxvY2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsT3B0aW9uOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuc3NsLlNzbENvbnRleHQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsQ29udGV4dEJ1aWxkZXI7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wudXRpbC5JbnNlY3VyZVRydXN0TWFuYWdlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnR1cGxlLlBhaXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5IdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuSHR0cEdyZW1saW5SZXNwb25zZVN0cmVhbURlY29kZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5IdHRwR3JlbWxpblJlcXVlc3RFbmNvZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmludGVyY2VwdG9yLlBheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBpby5uZXR0eS5ib290c3RyYXAuQm9vdHN0cmFwOworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbml0aWFsaXplcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxQaXBlbGluZTsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLnNvY2tldC5Tb2NrZXRDaGFubmVsOworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuc29ja2V0Lm5pby5OaW9Tb2NrZXRDaGFubmVsOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwQ2xpZW50Q29kZWM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeU1hcHBlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CisKKy8qKgorICogQSBzaW1wbGUsIG5vbi10aHJlYWQgc2FmZSBHcmVtbGluIFNlcnZlciBjbGllbnQgdXNpbmcgSFRUUC4gVHlwaWNhbCB1c2UgaXMgZm9yIHRlc3RpbmcgYW5kIGRlbW9uc3RyYXRpb24uCisgKi8KK3B1YmxpYyBjbGFzcyBTaW1wbGVIdHRwQ2xpZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnQgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihTaW1wbGVIdHRwQ2xpZW50LmNsYXNzKTsKKyAgICBwcml2YXRlIGZpbmFsIENoYW5uZWwgY2hhbm5lbDsKKworICAgIHB1YmxpYyBTaW1wbGVIdHRwQ2xpZW50KCkgeworICAgICAgICB0aGlzKFVSSS5jcmVhdGUoImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikpOworICAgIH0KKworICAgIHB1YmxpYyBTaW1wbGVIdHRwQ2xpZW50KGZpbmFsIFVSSSB1cmkpIHsKKyAgICAgICAgc3VwZXIoInNpbXBsZS1odHRwLWNsaWVudC0lZCIpOworICAgICAgICBmaW5hbCBCb290c3RyYXAgYiA9IG5ldyBCb290c3RyYXAoKS5ncm91cChncm91cCk7CisgICAgICAgIGIub3B0aW9uKENoYW5uZWxPcHRpb24uQUxMT0NBVE9SLCBQb29sZWRCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBwcm90b2NvbCA9IHVyaS5nZXRTY2hlbWUoKTsKKyAgICAgICAgaWYgKCEiaHR0cCIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkgJiYgISJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBwcm90b2NvbDogIiArIHByb3RvY29sKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGhvc3QgPSB1cmkuZ2V0SG9zdCgpOworICAgICAgICBmaW5hbCBpbnQgcG9ydDsKKyAgICAgICAgaWYgKHVyaS5nZXRQb3J0KCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmICgiaHR0cCIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpIHsKKyAgICAgICAgICAgICAgICBwb3J0ID0gODA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpIHsKKyAgICAgICAgICAgICAgICBwb3J0ID0gNDQzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwb3J0ID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwb3J0ID0gdXJpLmdldFBvcnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIHNzbCA9ICJodHRwcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCk7CisgICAgICAgICAgICBmaW5hbCBTc2xDb250ZXh0IHNzbEN0eDsKKyAgICAgICAgICAgIGlmIChzc2wpIHsKKyAgICAgICAgICAgICAgICBzc2xDdHggPSBTc2xDb250ZXh0QnVpbGRlci5mb3JDbGllbnQoKQorICAgICAgICAgICAgICAgICAgICAgICAgLnRydXN0TWFuYWdlcihJbnNlY3VyZVRydXN0TWFuYWdlckZhY3RvcnkuSU5TVEFOQ0UpLmJ1aWxkKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNzbEN0eCA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPEdyYXBoQmluYXJ5TWFwcGVyPiBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICAgICAgYi5jaGFubmVsKE5pb1NvY2tldENoYW5uZWwuY2xhc3MpCisgICAgICAgICAgICAgICAgICAgIC5oYW5kbGVyKG5ldyBDaGFubmVsSW5pdGlhbGl6ZXI8U29ja2V0Q2hhbm5lbD4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGluaXRDaGFubmVsKGZpbmFsIFNvY2tldENoYW5uZWwgY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGFubmVsUGlwZWxpbmUgcCA9IGNoLnBpcGVsaW5lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNzbEN0eCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYWRkTGFzdChzc2xDdHgubmV3SGFuZGxlcihjaC5hbGxvYygpLCBob3N0LCBwb3J0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYWRkTGFzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIdHRwQ2xpZW50Q29kZWMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSHR0cEdyZW1saW5SZXNwb25zZVN0cmVhbURlY29kZXIoc2VyaWFsaXplciwgSW50ZWdlci5NQVhfVkFMVUUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEh0dHBHcmVtbGluUmVxdWVzdEVuY29kZXIoc2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWlyLm9mKCJzZXJpYWxpemVyIiwgbmV3IFBheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgpKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UsIHVyaSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1Jlc3BvbnNlSGFuZGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBjaGFubmVsID0gYi5jb25uZWN0KHVyaS5nZXRIb3N0KCksIHVyaS5nZXRQb3J0KCkpLnN5bmMoKS5jaGFubmVsKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gc3VibWl0QXN5bmMoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3BvbnNlTWVzc2FnZT4+IGYgPSBuZXcgQ29tcGxldGFibGVGdXR1cmU8PigpOworICAgICAgICBjYWxsYmFja1Jlc3BvbnNlSGFuZGxlci5jYWxsYmFjayA9IHJlc3BvbnNlIC0+IHsKKyAgICAgICAgICAgIC8vIG1lc3NhZ2Ugd2l0aCB0cmFpbGVycworICAgICAgICAgICAgaWYgKGYuaXNEb25lKCkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkEgdGVybWluYXRpbmcgbWVzc2FnZSB3YXMgYWxyZWFkeSBlbmNvdW50ZXJlZCAtIG5vIG1vcmUgbWVzc2FnZXMgc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCIpOworCisgICAgICAgICAgICByZXN1bHRzLmFkZChyZXNwb25zZSk7CisKKyAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBjdXJyZW50IG1lc3NhZ2UgaXMgdGVybWluYXRpbmcgLSBpZiBpdCBpcyB0aGVuIHdlIGNhbiBtYXJrIGNvbXBsZXRlCisgICAgICAgICAgICBpZiAoQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLkxBU1RfQ09OVEVOVF9SRUFEX1JFU1BPTlNFID09IHJlc3BvbnNlKSB7CisgICAgICAgICAgICAgICAgZi5jb21wbGV0ZShyZXN1bHRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB3cml0ZUFuZEZsdXNoKHJlcXVlc3RNZXNzYWdlKTsKKworICAgICAgICByZXR1cm4gZjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZUFuZEZsdXNoKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgY2hhbm5lbC53cml0ZUFuZEZsdXNoKHJlcXVlc3RNZXNzYWdlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjaGFubmVsLmNsb3NlKCkuZ2V0KDMwLCBUaW1lVW5pdC5TRUNPTkRTKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWx1cmUgY2xvc2luZyBzaW1wbGUgV2ViU29ja2V0Q2xpZW50IiwgZXgpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKCFncm91cC5zaHV0ZG93bkdyYWNlZnVsbHkoKS5hd2FpdFVuaW50ZXJydXB0aWJseSgzMCwgVGltZVVuaXQuU0VDT05EUykpIHsKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkIG5vdCBjbGVhbmx5IHNodXRkb3duIHRocmVhZCBwb29sIG9uIFdlYlNvY2tldENsaWVudCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9zaW1wbGUvV2ViU29ja2V0Q2xpZW50LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3NpbXBsZS9XZWJTb2NrZXRDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDViMWY5OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3NpbXBsZS9XZWJTb2NrZXRDbGllbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5zaW1wbGU7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuUG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxPcHRpb247Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkVtcHR5SHR0cEhlYWRlcnM7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC5Tc2xDb250ZXh0QnVpbGRlcjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC51dGlsLkluc2VjdXJlVHJ1c3RNYW5hZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuaGFuZGxlci5XZWJTb2NrZXRDbGllbnRIYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuV2ViU29ja2V0R3JlbWxpblJlc3BvbnNlRGVjb2RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBpby5uZXR0eS5ib290c3RyYXAuQm9vdHN0cmFwOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbml0aWFsaXplcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxQaXBlbGluZTsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLnNvY2tldC5Tb2NrZXRDaGFubmVsOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuc29ja2V0Lm5pby5OaW9Tb2NrZXRDaGFubmVsOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwQ2xpZW50Q29kZWM7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3RBZ2dyZWdhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LldlYlNvY2tldENsaWVudEhhbmRzaGFrZXJGYWN0b3J5OwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LldlYlNvY2tldFZlcnNpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5TWFwcGVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoqCi0gKiBBIHNpbXBsZSwgbm9uLXRocmVhZCBzYWZlIEdyZW1saW4gU2VydmVyIGNsaWVudCB1c2luZyB3ZWJzb2NrZXRzLiAgVHlwaWNhbCB1c2UgaXMgZm9yIHRlc3RpbmcgYW5kIGRlbW9uc3RyYXRpb24uCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgV2ViU29ja2V0Q2xpZW50IGV4dGVuZHMgQWJzdHJhY3RDbGllbnQgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihXZWJTb2NrZXRDbGllbnQuY2xhc3MpOwotICAgIHByaXZhdGUgZmluYWwgQ2hhbm5lbCBjaGFubmVsOwotCi0gICAgcHVibGljIFdlYlNvY2tldENsaWVudCgpIHsKLSAgICAgICAgdGhpcyhVUkkuY3JlYXRlKCJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFdlYlNvY2tldENsaWVudChmaW5hbCBVUkkgdXJpKSB7Ci0gICAgICAgIHN1cGVyKCJ3cy1jbGllbnQtJWQiKTsKLSAgICAgICAgZmluYWwgQm9vdHN0cmFwIGIgPSBuZXcgQm9vdHN0cmFwKCkuZ3JvdXAoZ3JvdXApOwotICAgICAgICBiLm9wdGlvbihDaGFubmVsT3B0aW9uLkFMTE9DQVRPUiwgUG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcHJvdG9jb2wgPSB1cmkuZ2V0U2NoZW1lKCk7Ci0gICAgICAgIGlmICghIndzIi5lcXVhbHNJZ25vcmVDYXNlKHByb3RvY29sKSAmJiAhIndzcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBwcm90b2NvbDogIiArIHByb3RvY29sKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIGhvc3QgPSB1cmkuZ2V0SG9zdCgpOwotICAgICAgICBmaW5hbCBpbnQgcG9ydDsKLSAgICAgICAgaWYgKHVyaS5nZXRQb3J0KCkgPT0gLTEpIHsKLSAgICAgICAgICAgIGlmICgid3MiLmVxdWFsc0lnbm9yZUNhc2UocHJvdG9jb2wpKSB7Ci0gICAgICAgICAgICAgICAgcG9ydCA9IDgwOwotICAgICAgICAgICAgfSBlbHNlIGlmICgid3NzIi5lcXVhbHNJZ25vcmVDYXNlKHByb3RvY29sKSkgewotICAgICAgICAgICAgICAgIHBvcnQgPSA0NDM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBvcnQgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBvcnQgPSB1cmkuZ2V0UG9ydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3NsID0gIndzcyIuZXF1YWxzSWdub3JlQ2FzZShwcm90b2NvbCk7Ci0gICAgICAgICAgICBmaW5hbCBTc2xDb250ZXh0IHNzbEN0eDsKLSAgICAgICAgICAgIGlmIChzc2wpIHsKLSAgICAgICAgICAgICAgICBzc2xDdHggPSBTc2xDb250ZXh0QnVpbGRlci5mb3JDbGllbnQoKQotICAgICAgICAgICAgICAgICAgICAgICAgLnRydXN0TWFuYWdlcihJbnNlY3VyZVRydXN0TWFuYWdlckZhY3RvcnkuSU5TVEFOQ0UpLmJ1aWxkKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNzbEN0eCA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBXZWJTb2NrZXRDbGllbnRIYW5kbGVyIHdzSGFuZGxlciA9IG5ldyBXZWJTb2NrZXRDbGllbnRIYW5kbGVyKFdlYlNvY2tldENsaWVudEhhbmRzaGFrZXJGYWN0b3J5Lm5ld0hhbmRzaGFrZXIoCi0gICAgICAgICAgICAgICAgICAgIHVyaSwgV2ViU29ja2V0VmVyc2lvbi5WMTMsIG51bGwsIHRydWUsIEVtcHR5SHR0cEhlYWRlcnMuSU5TVEFOQ0UsIDY1NTM2KSwgMTAwMDAsIGZhbHNlKTsKLSAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPEdyYXBoQmluYXJ5TWFwcGVyPiBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpOwotICAgICAgICAgICAgYi5jaGFubmVsKE5pb1NvY2tldENoYW5uZWwuY2xhc3MpCi0gICAgICAgICAgICAgICAgICAgIC5oYW5kbGVyKG5ldyBDaGFubmVsSW5pdGlhbGl6ZXI8U29ja2V0Q2hhbm5lbD4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIGluaXRDaGFubmVsKGZpbmFsIFNvY2tldENoYW5uZWwgY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGFubmVsUGlwZWxpbmUgcCA9IGNoLnBpcGVsaW5lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNzbEN0eCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYWRkTGFzdChzc2xDdHgubmV3SGFuZGxlcihjaC5hbGxvYygpLCBob3N0LCBwb3J0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuYWRkTGFzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIdHRwQ2xpZW50Q29kZWMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIdHRwT2JqZWN0QWdncmVnYXRvcig2NTUzNiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c0hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2ViU29ja2V0R3JlbWxpblJlcXVlc3RFbmNvZGVyKHRydWUsIHNlcmlhbGl6ZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdlYlNvY2tldEdyZW1saW5SZXNwb25zZURlY29kZXIoc2VyaWFsaXplciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja1Jlc3BvbnNlSGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBjaGFubmVsID0gYi5jb25uZWN0KHVyaS5nZXRIb3N0KCksIHVyaS5nZXRQb3J0KCkpLnN5bmMoKS5jaGFubmVsKCk7Ci0gICAgICAgICAgICB3c0hhbmRsZXIuaGFuZHNoYWtlRnV0dXJlKCkuZ2V0KDMwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB3cml0ZUFuZEZsdXNoKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgY2hhbm5lbC53cml0ZUFuZEZsdXNoKHJlcXVlc3RNZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjaGFubmVsLmNsb3NlKCkuZ2V0KDMwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWx1cmUgY2xvc2luZyBzaW1wbGUgV2ViU29ja2V0Q2xpZW50IiwgZXgpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaWYgKCFncm91cC5zaHV0ZG93bkdyYWNlZnVsbHkoKS5hd2FpdFVuaW50ZXJydXB0aWJseSgzMCwgVGltZVVuaXQuU0VDT05EUykpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNvdWxkIG5vdCBjbGVhbmx5IHNodXRkb3duIHRocmVhZCBwb29sIG9uIFdlYlNvY2tldENsaWVudCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci91dGlsL0NvbmZpZ3VyYXRpb25FdmFsdWF0b3IuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvdXRpbC9Db25maWd1cmF0aW9uRXZhbHVhdG9yLmphdmEKaW5kZXggZjFjNGMxOC4uYWE2NDVmMSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci91dGlsL0NvbmZpZ3VyYXRpb25FdmFsdWF0b3IuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3V0aWwvQ29uZmlndXJhdGlvbkV2YWx1YXRvci5qYXZhCkBAIC0zMiwxMiArMzIsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgQ29uZmlndXJhdGlvbkV2YWx1YXRvciB7CiAKLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gbWluQ29ubmVjdGlvblBvb2xTaXplUmFuZ2UgPSBBcnJheXMuYXNMaXN0KDQsOCwxMiwxNiwzMiw2NCw5NiwxMjgsMTkyLDI1NiwzODQsNTEyKTsKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gbWF4Q29ubmVjdGlvblBvb2xTaXplUmFuZ2UgPSBBcnJheXMuYXNMaXN0KDE2LDMyLDY0LDk2LDEyOCwxOTIsMjU2LDM4NCw1MTIpOwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxJbnRlZ2VyPiBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb25SYW5nZSA9IEFycmF5cy5hc0xpc3QoNCw4LDE2LDI0LDMyLDY0LDk2LDEyOCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvblJhbmdlID0gQXJyYXlzLmFzTGlzdCg0LDgsMTYsMjQsMzIsNjQsOTYsMTI4KTsKLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gbWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvblJhbmdlID0gQXJyYXlzLmFzTGlzdCgyLDQsOCwxNiwzMiw2NCw5NiwxMjgpOwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxJbnRlZ2VyPiBtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uUmFuZ2UgPSBBcnJheXMuYXNMaXN0KDE2LDMyLDY0LDk2LDEyOCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IHdvcmtlclBvb2xTaXplUmFuZ2UgPSBBcnJheXMuYXNMaXN0KDEsMiwzLDQsOCwxNiwzMik7CiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEludGVnZXI+IG5pb1Bvb2xTaXplUmFuZ2UgPSBBcnJheXMuYXNMaXN0KDEsMiw0KTsKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8SW50ZWdlcj4gcGFyYWxsZWxpc21TaXplUmFuZ2UgPSBBcnJheXMuYXNMaXN0KDEsMiw0LDgsMTYpOwpAQCAtNDksNDMgKzQ0LDIzIEBACiAgICAgICAgIGZvciAoaW50IGlyID0gMDsgaXIgPCBuaW9Qb29sU2l6ZVJhbmdlLnNpemUoKTsgaXIrKykgewogICAgICAgICAgICAgZm9yIChpbnQgaXMgPSAwOyBpcyA8IHBhcmFsbGVsaXNtU2l6ZVJhbmdlLnNpemUoKTsgaXMrKykgewogICAgICAgICAgICAgICAgIGZvciAoaW50IGl0ID0gMDsgaXQgPCB3b3JrZXJQb29sU2l6ZVJhbmdlLnNpemUoKTsgaXQrKykgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpdSA9IDA7IGl1IDwgbWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvblJhbmdlLnNpemUoKTsgaXUrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaXYgPSAwOyBpdiA8IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb25SYW5nZS5zaXplKCk7IGl2KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpdyA9IDA7IGl3IDwgbWluQ29ubmVjdGlvblBvb2xTaXplUmFuZ2Uuc2l6ZSgpOyBpdysrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCBtYXhDb25uZWN0aW9uUG9vbFNpemVSYW5nZS5zaXplKCk7IGl4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGl5ID0gMDsgaXkgPCBtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb25SYW5nZS5zaXplKCk7IGl5KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpeiA9IDA7IGl6IDwgbWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uUmFuZ2Uuc2l6ZSgpOyBpeisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaW5Db25uZWN0aW9uUG9vbFNpemVSYW5nZS5nZXQoaXcpIDw9IG1heENvbm5lY3Rpb25Qb29sU2l6ZVJhbmdlLmdldChpeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uUmFuZ2UuZ2V0KGl1KSA8PSBtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uUmFuZ2UuZ2V0KGl2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvblJhbmdlLmdldChpeSkgPD0gbWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uUmFuZ2UuZ2V0KGl6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvblJhbmdlLmdldChpeikgPD0gbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvblJhbmdlLmdldChpdikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzID0gU3RyaW5nLmpvaW4oIiwiLCBTdHJpbmcudmFsdWVPZihpciksIFN0cmluZy52YWx1ZU9mKGlzKSwgU3RyaW5nLnZhbHVlT2YoaXQpLCBTdHJpbmcudmFsdWVPZihpdSksIFN0cmluZy52YWx1ZU9mKGl2KSwgU3RyaW5nLnZhbHVlT2YoaXcpLCBTdHJpbmcudmFsdWVPZihpeCksIFN0cmluZy52YWx1ZU9mKGl5KSwgU3RyaW5nLnZhbHVlT2YoaXopKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnc1RyaWVkLmNvbnRhaW5zKHMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gYXJnc1RvUHJvZmlsZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtLm9mKCJuaW9Qb29sU2l6ZSIsIG5pb1Bvb2xTaXplUmFuZ2UuZ2V0KGlyKS50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFyYWxsZWxpc20iLCBwYXJhbGxlbGlzbVNpemVSYW5nZS5nZXQoaXMpLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b3JrZXJQb29sU2l6ZSIsIHdvcmtlclBvb2xTaXplUmFuZ2UuZ2V0KGl0KS50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiIsIG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb25SYW5nZS5nZXQoaXUpLnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uIiwgbWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvblJhbmdlLmdldChpdikudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSIsIG1pbkNvbm5lY3Rpb25Qb29sU2l6ZVJhbmdlLmdldChpdykudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heENvbm5lY3Rpb25Qb29sU2l6ZSIsIG1heENvbm5lY3Rpb25Qb29sU2l6ZVJhbmdlLmdldChpeCkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIsIG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvblJhbmdlLmdldChpeSkudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIsIG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvblJhbmdlLmdldChpeikudG9TdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vRXhpdCIsIEJvb2xlYW4uVFJVRS50b1N0cmluZygpKS50b0FycmF5KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCBtYXhDb25uZWN0aW9uUG9vbFNpemVSYW5nZS5zaXplKCk7IGl4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzID0gU3RyaW5nLmpvaW4oIiwiLCBTdHJpbmcudmFsdWVPZihpciksIFN0cmluZy52YWx1ZU9mKGlzKSwgU3RyaW5nLnZhbHVlT2YoaXQpLCBTdHJpbmcudmFsdWVPZihpeCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdzVHJpZWQuY29udGFpbnMocykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSBhcmdzVG9Qcm9maWxlciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0ub2YoIm5pb1Bvb2xTaXplIiwgbmlvUG9vbFNpemVSYW5nZS5nZXQoaXIpLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJhbGxlbGlzbSIsIHBhcmFsbGVsaXNtU2l6ZVJhbmdlLmdldChpcykudG9TdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvcmtlclBvb2xTaXplIiwgd29ya2VyUG9vbFNpemVSYW5nZS5nZXQoaXQpLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhDb25uZWN0aW9uUG9vbFNpemUiLCBtYXhDb25uZWN0aW9uUG9vbFNpemVSYW5nZS5nZXQoaXgpLnRvU3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub0V4aXQiLCBCb29sZWFuLlRSVUUudG9TdHJpbmcoKSkudG9BcnJheSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gd2l0aEV4dHJhQXJncyA9IGFyZ3MubGVuZ3RoID4gMCA/IFN0cmVhbS5jb25jYXQoU3RyZWFtLm9mKGFyZ3MpLCBTdHJlYW0ub2YoYXJnc1RvUHJvZmlsZXIpKS50b0FycmF5KCkgOiBhcmdzVG9Qcm9maWxlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3RbXSB3aXRoRXh0cmFBcmdzID0gYXJncy5sZW5ndGggPiAwID8gU3RyZWFtLmNvbmNhdChTdHJlYW0ub2YoYXJncyksIFN0cmVhbS5vZihhcmdzVG9Qcm9maWxlcikpLnRvQXJyYXkoKSA6IGFyZ3NUb1Byb2ZpbGVyOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc3RyaW5nUHJvZmlsZXJBcmdzID0gQXJyYXlzLmNvcHlPZih3aXRoRXh0cmFBcmdzLCB3aXRoRXh0cmFBcmdzLmxlbmd0aCwgU3RyaW5nW10uY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyB3aXRoOiAiICsgQXJyYXlzLnRvU3RyaW5nKHN0cmluZ1Byb2ZpbGVyQXJncykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGluZ0FwcGxpY2F0aW9uLm1haW4oc3RyaW5nUHJvZmlsZXJBcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lVW5pdC5TRUNPTkRTLnNsZWVwKDUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3NUcmllZC5hZGQocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc3RyaW5nUHJvZmlsZXJBcmdzID0gQXJyYXlzLmNvcHlPZih3aXRoRXh0cmFBcmdzLCB3aXRoRXh0cmFBcmdzLmxlbmd0aCwgU3RyaW5nW10uY2xhc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGVzdGluZyB3aXRoOiAiICsgQXJyYXlzLnRvU3RyaW5nKHN0cmluZ1Byb2ZpbGVyQXJncykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2ZpbGluZ0FwcGxpY2F0aW9uLm1haW4oc3RyaW5nUHJvZmlsZXJBcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lVW5pdC5TRUNPTkRTLnNsZWVwKDUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3NUcmllZC5hZGQocyk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3V0aWwvUHJvZmlsaW5nQXBwbGljYXRpb24uamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvdXRpbC9Qcm9maWxpbmdBcHBsaWNhdGlvbi5qYXZhCmluZGV4IDcyODM5NGMuLmZjZDA4NWEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvdXRpbC9Qcm9maWxpbmdBcHBsaWNhdGlvbi5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvdXRpbC9Qcm9maWxpbmdBcHBsaWNhdGlvbi5qYXZhCkBAIC0yMCwxMSArMjAsMTAgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuY29uY3VycmVudC5CYXNpY1RocmVhZEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkVsZW1lbnRIZWxwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CiBpbXBvcnQgamF2YS5pby5GaWxlOwpAQCAtMTk1LDMyICsxOTQsMjAgQEAKICAgICAgICAgZmluYWwgaW50IGV4ZWN1dGlvbnMgPSBJbnRlZ2VyLnBhcnNlSW50KG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJleGVjdXRpb25zIiwgIjEwIikudG9TdHJpbmcoKSk7CiAgICAgICAgIGZpbmFsIGludCBuaW9Qb29sU2l6ZSA9IEludGVnZXIucGFyc2VJbnQob3B0aW9ucy5nZXRPckRlZmF1bHQoIm5pb1Bvb2xTaXplIiwgIjEiKS50b1N0cmluZygpKTsKICAgICAgICAgZmluYWwgaW50IHJlcXVlc3RzID0gSW50ZWdlci5wYXJzZUludChvcHRpb25zLmdldE9yRGVmYXVsdCgicmVxdWVzdHMiLCAiMTAwMDAiKS50b1N0cmluZygpKTsKLSAgICAgICAgZmluYWwgaW50IG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSA9IEludGVnZXIucGFyc2VJbnQob3B0aW9ucy5nZXRPckRlZmF1bHQoIm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSIsICIyNTYiKS50b1N0cmluZygpKTsKICAgICAgICAgZmluYWwgaW50IG1heENvbm5lY3Rpb25Qb29sU2l6ZSA9IEludGVnZXIucGFyc2VJbnQob3B0aW9ucy5nZXRPckRlZmF1bHQoIm1heENvbm5lY3Rpb25Qb29sU2l6ZSIsICIyNTYiKS50b1N0cmluZygpKTsKLSAgICAgICAgZmluYWwgaW50IG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiA9IEludGVnZXIucGFyc2VJbnQob3B0aW9ucy5nZXRPckRlZmF1bHQoIm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIsICI4IikudG9TdHJpbmcoKSk7Ci0gICAgICAgIGZpbmFsIGludCBtYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gPSBJbnRlZ2VyLnBhcnNlSW50KG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJtYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24iLCAiMzIiKS50b1N0cmluZygpKTsKLSAgICAgICAgZmluYWwgaW50IG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gPSBJbnRlZ2VyLnBhcnNlSW50KG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uIiwgIjY0IikudG9TdHJpbmcoKSk7Ci0gICAgICAgIGZpbmFsIGludCBtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uID0gSW50ZWdlci5wYXJzZUludChvcHRpb25zLmdldE9yRGVmYXVsdCgibWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiIsICIxNiIpLnRvU3RyaW5nKCkpOwogICAgICAgICBmaW5hbCBpbnQgbWF4V2FpdEZvckNvbm5lY3Rpb24gPSBJbnRlZ2VyLnBhcnNlSW50KG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJtYXhXYWl0Rm9yQ29ubmVjdGlvbiIsICIzMDAwIikudG9TdHJpbmcoKSk7CiAgICAgICAgIGZpbmFsIGludCB3b3JrZXJQb29sU2l6ZSA9IEludGVnZXIucGFyc2VJbnQob3B0aW9ucy5nZXRPckRlZmF1bHQoIndvcmtlclBvb2xTaXplIiwgUnVudGltZS5nZXRSdW50aW1lKCkuYXZhaWxhYmxlUHJvY2Vzc29ycygpICogMikudG9TdHJpbmcoKSk7CiAgICAgICAgIGZpbmFsIGludCB0b29TbG93VGhyZXNob2xkID0gSW50ZWdlci5wYXJzZUludChvcHRpb25zLmdldE9yRGVmYXVsdCgidG9vU2xvd1RocmVzaG9sZCIsICIxMjUiKS50b1N0cmluZygpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIGNoYW5uZWxpemVyID0gb3B0aW9ucy5nZXRPckRlZmF1bHQoImNoYW5uZWxpemVyIiwgQ2hhbm5lbGl6ZXIuV2ViU29ja2V0Q2hhbm5lbGl6ZXIuY2xhc3MuZ2V0TmFtZSgpKS50b1N0cmluZygpOwotICAgICAgICBmaW5hbCBTdHJpbmcgc2VyaWFsaXplciA9IG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJzZXJpYWxpemVyIiwgU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEubmFtZSgpKS50b1N0cmluZygpOworICAgICAgICBmaW5hbCBTdHJpbmcgc2VyaWFsaXplciA9IG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJzZXJpYWxpemVyIiwgU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjQubmFtZSgpKS50b1N0cmluZygpOwogICAgICAgICBmaW5hbCBpbnQgcGF1c2VCZXR3ZWVuUnVucyA9IEludGVnZXIucGFyc2VJbnQob3B0aW9ucy5nZXRPckRlZmF1bHQoInBhdXNlQmV0d2VlblJ1bnMiLCAiMTAwMCIpLnRvU3RyaW5nKCkpOwogICAgICAgICBmaW5hbCBib29sZWFuIHN1cHByZXNzU3RhY2tUcmFjZXMgPSBCb29sZWFuLnBhcnNlQm9vbGVhbihvcHRpb25zLmdldE9yRGVmYXVsdCgic3VwcHJlc3NTdGFja1RyYWNlcyIsICJmYWxzZSIpLnRvU3RyaW5nKCkpOwogCiAgICAgICAgIGZpbmFsIGJvb2xlYW4gZXhlcmNpc2UgPSBCb29sZWFuLnBhcnNlQm9vbGVhbihvcHRpb25zLmdldE9yRGVmYXVsdCgiZXhlcmNpc2UiLCAiZmFsc2UiKS50b1N0cmluZygpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJzY3JpcHQiLCAiMSsxIikudG9TdHJpbmcoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IG9wdGlvbnMuZ2V0T3JEZWZhdWx0KCJzY3JpcHQiLCAiZy5pbmplY3QoMSkiKS50b1N0cmluZygpOwogCiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoaG9zdCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSkKICAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKG1heENvbm5lY3Rpb25Qb29sU2l6ZSkKLSAgICAgICAgICAgICAgICAubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbikKLSAgICAgICAgICAgICAgICAubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKG1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbikKLSAgICAgICAgICAgICAgICAubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbihtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uKQotICAgICAgICAgICAgICAgIC5tYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pCiAgICAgICAgICAgICAgICAgLm5pb1Bvb2xTaXplKG5pb1Bvb2xTaXplKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihjaGFubmVsaXplcikKICAgICAgICAgICAgICAgICAubWF4V2FpdEZvckNvbm5lY3Rpb24obWF4V2FpdEZvckNvbm5lY3Rpb24pCiAgICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMudmFsdWVPZihzZXJpYWxpemVyKSkKICAgICAgICAgICAgICAgICAud29ya2VyUG9vbFNpemUod29ya2VyUG9vbFNpemUpLmNyZWF0ZSgpOwpAQCAtMjQ5LDcgKzIzNiw3IEBACiAgICAgICAgICAgICAgICAgZmluYWwgRmlsZSBmID0gbnVsbCA9PSBmaWxlTmFtZSA/IG51bGwgOiBuZXcgRmlsZShmaWxlTmFtZS50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICBpZiAoZiAhPSBudWxsICYmIGYubGVuZ3RoKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgKGZpbmFsIFByaW50V3JpdGVyIHdyaXRlciA9IG5ldyBQcmludFdyaXRlcihuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoZiwgdHJ1ZSkpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oInBhcmFsbGVsaXNtXHRuaW9Qb29sU2l6ZVx0bWluQ29ubmVjdGlvblBvb2xTaXplXHRtYXhDb25uZWN0aW9uUG9vbFNpemVcdG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvblx0bWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uXHRtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uXHRtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uXHR3b3JrZXJQb29sU2l6ZVx0cmVxdWVzdFBlclNlY29uZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oInBhcmFsbGVsaXNtXHRuaW9Qb29sU2l6ZVx0bWF4Q29ubmVjdGlvblBvb2xTaXplXHR3b3JrZXJQb29sU2l6ZVx0cmVxdWVzdFBlclNlY29uZCIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yODAsNyArMjY3LDcgQEAKICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oU3RyaW5nLmZvcm1hdCgiYXZnIHJlcS9zZWM6ICVzIiwgYXZlcmFnZVJlcXVlc3RQZXJTZWNvbmQpKTsKICAgICAgICAgICAgICAgICBpZiAoZiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSAoZmluYWwgUHJpbnRXcml0ZXIgd3JpdGVyID0gbmV3IFByaW50V3JpdGVyKG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihmLCB0cnVlKSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbihTdHJpbmcuam9pbigiXHQiLCBTdHJpbmcudmFsdWVPZihwYXJhbGxlbGlzbSksIFN0cmluZy52YWx1ZU9mKG5pb1Bvb2xTaXplKSwgU3RyaW5nLnZhbHVlT2YobWluQ29ubmVjdGlvblBvb2xTaXplKSwgU3RyaW5nLnZhbHVlT2YobWF4Q29ubmVjdGlvblBvb2xTaXplKSwgU3RyaW5nLnZhbHVlT2YobWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKSwgU3RyaW5nLnZhbHVlT2YobWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKSwgU3RyaW5nLnZhbHVlT2YobWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiksIFN0cmluZy52YWx1ZU9mKG1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24pLCBTdHJpbmcudmFsdWVPZih3b3JrZXJQb29sU2l6ZSksIFN0cmluZy52YWx1ZU9mKGF2ZXJhZ2VSZXF1ZXN0UGVyU2Vjb25kKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oU3RyaW5nLmpvaW4oIlx0IiwgU3RyaW5nLnZhbHVlT2YocGFyYWxsZWxpc20pLCBTdHJpbmcudmFsdWVPZihuaW9Qb29sU2l6ZSksIFN0cmluZy52YWx1ZU9mKG1heENvbm5lY3Rpb25Qb29sU2l6ZSksIFN0cmluZy52YWx1ZU9mKHdvcmtlclBvb2xTaXplKSwgU3RyaW5nLnZhbHVlT2YoYXZlcmFnZVJlcXVlc3RQZXJTZWNvbmQpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFRlc3RUeXBlLkxBVEVOQ1kgPT0gdGVzdFR5cGUpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL3N0YXRpYy9MSUNFTlNFIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKaW5kZXggMmE2ZmMwOC4uZmI0NTM1MSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKQEAgLTIyMSw5ICsyMjEsMTAgQEAKIAogVGhlIEFwYWNoZSBUaW5rZXJQb3AgcHJvamVjdCBidW5kbGVzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyB1bmRlciB0aGUgTUlUIExpY2Vuc2U6CiAKLSAgICAgU0xGNEogQVBJIE1vZHVsZSAob3JnLnNsZjRqOnNsZjRqLWFwaToxLjcuMjUgLSBodHRwOi8vd3d3LnNsZjRqLm9yZykKKyAgICAgU0xGNEogQVBJIE1vZHVsZSAob3JnLnNsZjRqOnNsZjRqLWFwaToyLjAuMTYgLSBodHRwOi8vd3d3LnNsZjRqLm9yZykKICAgICAgICAtIHNoYWRlZCB0byBvcmcuc2hhZGVkLnNsZjRqCiAgICAgICAgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL3NsZjRqCisgICAgIFJlYWN0aXZlIFN0cmVhbXMgKG9yZy5yZWFjdGl2ZXN0cmVhbXM6cmVhY3RpdmUtc3RyZWFtczoxLjAuNCAtIGh0dHBzOi8vd3d3LnJlYWN0aXZlLXN0cmVhbXMub3JnLykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL3JlYWN0aXZlLXN0cmVhbXMKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBPdGhlciBMaWNlbnNlcwpAQCAtMjMxLDUgKzIzMiw1IEBACiAKIFRoZSBBcGFjaGUgVGlua2VyUG9wIHByb2plY3QgYnVuZGxlcyB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgdW5kZXIgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMS4wOgogCi0gICAgIGxvZ2JhY2stY29yZSAoY2gucW9zLmxvZ2JhY2s6bG9nYmFjay1jb3JlOjEuMi4zIC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKLSAgICAgbG9nYmFjay1jbGFzc2ljIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNsYXNzaWM6MS4yLjMgLSBodHRwczovL2xvZ2JhY2sucW9zLmNoKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvbG9nYmFjawpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgbG9nYmFjay1jb3JlIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNvcmU6MS4zLjE1IC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKKyAgICAgbG9nYmFjay1jbGFzc2ljIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNsYXNzaWM6MS4zLjE1IC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9zdGF0aWMvTk9USUNFIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vc3RhdGljL05PVElDRQppbmRleCBhNWM0ODQ2Li5jOTNjOTllIDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvbWFpbi9zdGF0aWMvTk9USUNFCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL3N0YXRpYy9OT1RJQ0UKQEAgLTU3LDMgKzU3LDIyIEBACiBPYmplbmVzaXMgMy4zIC0gc2hhZGVkIGluIGdyZW1saW4tc2hhZGVkIHRvIG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5vYmplbmVzaXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29weXJpZ2h0IDIwMDYtMjAyMiBKb2UgV2FsbmVzLCBIZW5yaSBUcmVtYmxheSwgTGVvbmFyZG8gTWVzcXVpdGEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBV1MgU0RLIGZvciBKYXZhIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQorQW1hem9uIFRlY2hub2xvZ2llcywgSW5jIChodHRwOi8vd3d3LmFtYXpvbi5jb20vKS4KKworKioqKioqKioqKioqKioqKioqKioqKgorVEhJUkQgUEFSVFkgQ09NUE9ORU5UUworKioqKioqKioqKioqKioqKioqKioqKgorVGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0czoKKy0gWE1MIHBhcnNpbmcgYW5kIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gSmV0UzN0IC0gQ29weXJpZ2h0IDIwMDYtMjAwOSBKYW1lcyBNdXJ0eS4KKy0gUEtDUyMxIFBFTSBlbmNvZGVkIHByaXZhdGUga2V5IHBhcnNpbmcgYW5kIHV0aWxpdHkgZnVuY3Rpb25zIGZyb20gb2F1dGguZ29vZ2xlY29kZS5jb20gLSBDb3B5cmlnaHQgMTk5OC0yMDEwIEFPTCBJbmMuCistIEFwYWNoZSBDb21tb25zIExhbmcgLSBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2NvbW1vbnMtbGFuZworLSBOZXR0eSBSZWFjdGl2ZSBTdHJlYW1zIC0gaHR0cHM6Ly9naXRodWIuY29tL3BsYXlmcmFtZXdvcmsvbmV0dHktcmVhY3RpdmUtc3RyZWFtcworLSBKYWNrc29uLWNvcmUgLSBodHRwczovL2dpdGh1Yi5jb20vRmFzdGVyWE1ML2phY2tzb24tY29yZQorLSBKYWNrc29uLWRhdGFmb3JtYXQtY2JvciAtIGh0dHBzOi8vZ2l0aHViLmNvbS9GYXN0ZXJYTUwvamFja3Nvbi1kYXRhZm9ybWF0cy1iaW5hcnkKZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL3N0YXRpYy9saWNlbnNlcy9yZWFjdGl2ZS1zdHJlYW1zIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL21haW4vc3RhdGljL2xpY2Vuc2VzL3JlYWN0aXZlLXN0cmVhbXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2Y2E3OQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy9tYWluL3N0YXRpYy9saWNlbnNlcy9yZWFjdGl2ZS1zdHJlYW1zCkBAIC0wLDAgKzEsMTggQEAKK01JVCBObyBBdHRyaWJ1dGlvbgorCitDb3B5cmlnaHQgMjAxNCBSZWFjdGl2ZSBTdHJlYW1zCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzby4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9BYnN0cmFjdFJlc3VsdFF1ZXVlVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9BYnN0cmFjdFJlc3VsdFF1ZXVlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjI5MGNmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQWJzdHJhY3RSZXN1bHRRdWV1ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKLQotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuTGlua2VkQmxvY2tpbmdRdWV1ZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFJlc3VsdFF1ZXVlVGVzdCB7Ci0gICAgcHJvdGVjdGVkIEV4ZWN1dG9yU2VydmljZSBwb29sOwotICAgIHByb3RlY3RlZCBSZXN1bHRRdWV1ZSByZXN1bHRRdWV1ZTsKLSAgICBwcm90ZWN0ZWQgQ29tcGxldGFibGVGdXR1cmU8Vm9pZD4gcmVhZENvbXBsZXRlZDsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKLSAgICAgICAgZmluYWwgTGlua2VkQmxvY2tpbmdRdWV1ZTxSZXN1bHQ+IHJlc3VsdExpbmtlZEJsb2NraW5nUXVldWUgPSBuZXcgTGlua2VkQmxvY2tpbmdRdWV1ZTw+KCk7Ci0gICAgICAgIHJlYWRDb21wbGV0ZWQgPSBuZXcgQ29tcGxldGFibGVGdXR1cmU8PigpOwotICAgICAgICByZXN1bHRRdWV1ZSA9IG5ldyBSZXN1bHRRdWV1ZShyZXN1bHRMaW5rZWRCbG9ja2luZ1F1ZXVlLCByZWFkQ29tcGxldGVkKTsKLSAgICAgICAgcG9vbCA9ICBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbCgpOwotICAgIH0KLQotICAgIEBBZnRlcgotICAgIHB1YmxpYyB2b2lkIGNsb3NlUG9vbCgpIHsKLSAgICAgICAgaWYgKCFwb29sLmlzU2h1dGRvd24oKSkgewotICAgICAgICAgICAgcG9vbC5zaHV0ZG93bigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFRocmVhZCBhZGRUb1F1ZXVlKGZpbmFsIGludCBudW1iZXJPZkl0ZW1zVG9BZGQsIGZpbmFsIGxvbmcgcGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzdGFydCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBhZGRUb1F1ZXVlKG51bWJlck9mSXRlbXNUb0FkZCwgcGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcywgc3RhcnQsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgVGhyZWFkIGFkZFRvUXVldWUoZmluYWwgaW50IG51bWJlck9mSXRlbXNUb0FkZCwgZmluYWwgbG9uZyBwYXVzZUJldHdlZW5JdGVtc0luTWlsbGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHN0YXJ0LCBmaW5hbCBib29sZWFuIG1hcmtEb25lKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGFkZFRvUXVldWUobnVtYmVyT2ZJdGVtc1RvQWRkLCBwYXVzZUJldHdlZW5JdGVtc0luTWlsbGlzLCBzdGFydCwgbWFya0RvbmUsIDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgc29tZSB0ZXN0IGl0ZW1zIHRvIHRoZSB7QGxpbmsgUmVzdWx0UXVldWV9LiBUaGlzIG1ldGhvZCBoYXMgdGhlIHBvdGVudGlhbCB0byBibG9jayBpZiB0aGUKLSAgICAgKiB7QGNvZGUgaXRlbXNUb1dhaXRGb3IgPiAwfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBudW1iZXJPZkl0ZW1zVG9BZGQgdGhlIG51bWJlciBvZiBpdGVtcyB0byBhZGQgaW4gdG90YWwKLSAgICAgKiBAcGFyYW0gcGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcyBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJldHdlZW4gYWRkaXRpb25zIHRvIHRoZSB7QGxpbmsgUmVzdWx0UXVldWV9Ci0gICAgICogQHBhcmFtIHN0YXJ0IHNldCB0byB7QGNvZGUgdHJ1ZX0gdG8gc3RhcnQgdGhlIHRocmVhZAotICAgICAqIEBwYXJhbSBtYXJrRG9uZSBmb3JjZSBtYXJrIHRoZSBxdWV1ZSBhcyBjb21wbGV0ZQotICAgICAqIEBwYXJhbSBpdGVtc1RvV2FpdEZvciBibG9jayB1bnRpbCB0aGlzIG1hbnkgaXRlbXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSB7QGxpbmsgUmVzdWx0UXVldWV9Ci0gICAgICogQHJldHVybiB0aGUgdGhyZWFkIHRoYXQgaXMgZG9pbmcgdGhlIHdvcmsgb2YgYWRkaW5nIHRvIHRoZSBxdWV1ZQotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFRocmVhZCBhZGRUb1F1ZXVlKGZpbmFsIGludCBudW1iZXJPZkl0ZW1zVG9BZGQsIGZpbmFsIGxvbmcgcGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzdGFydCwgZmluYWwgYm9vbGVhbiBtYXJrRG9uZSwgZmluYWwgaW50IGl0ZW1zVG9XYWl0Rm9yKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goaXRlbXNUb1dhaXRGb3IpOwotICAgICAgICBmaW5hbCBUaHJlYWQgdCA9IG5ldyBUaHJlYWQoKCkgLT4gewotICAgICAgICAgICAgYm9vbGVhbiBkb25lID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgbnVtYmVyT2ZJdGVtc1RvQWRkICYmICFkb25lOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaXNJbnRlcnJ1cHRlZCgpKSB0aHJvdyBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGN1cnJlbnRJbmRleCA9IGl4OwotICAgICAgICAgICAgICAgICAgICBwb29sLnN1Ym1pdCgoKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXN1bHQgcmVzdWx0ID0gbmV3IFJlc3VsdCgidGVzdC0iICsgY3VycmVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFF1ZXVlLmFkZChyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBUaW1lVW5pdC5NSUxMSVNFQ09ORFMuc2xlZXAocGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGllKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1hcmtEb25lKSByZXN1bHRRdWV1ZS5tYXJrQ29tcGxldGUoQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSk7Ci0KLSAgICAgICAgfSwgIlJlc3VsdFF1ZXVlVGVzdC1qb2Itc3VibWl0dGVyIik7Ci0KLSAgICAgICAgaWYgKHN0YXJ0KSB0LnN0YXJ0KCk7Ci0KLSAgICAgICAgLy8gd2FpdCBmb3IgdGhlIG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHF1ZXVlCi0gICAgICAgIGxhdGNoLmF3YWl0KCk7Ci0KLSAgICAgICAgcmV0dXJuIHQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9BYnN0cmFjdFJlc3VsdFNldFRlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQWJzdHJhY3RSZXN1bHRTZXRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwNTRmMgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQWJzdHJhY3RSZXN1bHRTZXRUZXN0LmphdmEKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OworCisvKioKKyAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UmVzdWx0U2V0VGVzdCB7CisgICAgcHJvdGVjdGVkIEV4ZWN1dG9yU2VydmljZSBwb29sOworICAgIHByb3RlY3RlZCBSZXN1bHRTZXQgcmVzdWx0U2V0OworCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgeworICAgICAgICBwb29sID0gRXhlY3V0b3JzLm5ld0NhY2hlZFRocmVhZFBvb2woKTsKKyAgICAgICAgcmVzdWx0U2V0ID0gbmV3IFJlc3VsdFNldChwb29sLCBSZXF1ZXN0TWVzc2FnZS5idWlsZCgidHJhdmVyc2FsIikuY3JlYXRlKCksIG51bGwpOworICAgIH0KKworICAgIEBBZnRlcgorICAgIHB1YmxpYyB2b2lkIGNsb3NlUG9vbCgpIHsKKyAgICAgICAgaWYgKCFwb29sLmlzU2h1dGRvd24oKSkgeworICAgICAgICAgICAgcG9vbC5zaHV0ZG93bigpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIFRocmVhZCBhZGRUb1F1ZXVlKGZpbmFsIGludCBudW1iZXJPZkl0ZW1zVG9BZGQsIGZpbmFsIGxvbmcgcGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzdGFydCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBhZGRUb1F1ZXVlKG51bWJlck9mSXRlbXNUb0FkZCwgcGF1c2VCZXR3ZWVuSXRlbXNJbk1pbGxpcywgc3RhcnQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgVGhyZWFkIGFkZFRvUXVldWUoZmluYWwgaW50IG51bWJlck9mSXRlbXNUb0FkZCwgZmluYWwgbG9uZyBwYXVzZUJldHdlZW5JdGVtc0luTWlsbGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHN0YXJ0LCBmaW5hbCBib29sZWFuIG1hcmtEb25lKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGFkZFRvUXVldWUobnVtYmVyT2ZJdGVtc1RvQWRkLCBwYXVzZUJldHdlZW5JdGVtc0luTWlsbGlzLCBzdGFydCwgbWFya0RvbmUsIDApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgc29tZSB0ZXN0IGl0ZW1zIHRvIHRoZSB7QGxpbmsgUmVzdWx0U2V0fS4gVGhpcyBtZXRob2QgaGFzIHRoZSBwb3RlbnRpYWwgdG8gYmxvY2sgaWYgdGhlCisgICAgICoge0Bjb2RlIGl0ZW1zVG9XYWl0Rm9yID4gMH0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gbnVtYmVyT2ZJdGVtc1RvQWRkIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gYWRkIGluIHRvdGFsCisgICAgICogQHBhcmFtIHBhdXNlQmV0d2Vlbkl0ZW1zSW5NaWxsaXMgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIGFkZGl0aW9ucyB0byB0aGUge0BsaW5rIFJlc3VsdFNldH0KKyAgICAgKiBAcGFyYW0gc3RhcnQgc2V0IHRvIHtAY29kZSB0cnVlfSB0byBzdGFydCB0aGUgdGhyZWFkCisgICAgICogQHBhcmFtIG1hcmtEb25lIGZvcmNlIG1hcmsgdGhlIHJlc3VsdCBzZXQgYXMgY29tcGxldGUKKyAgICAgKiBAcGFyYW0gaXRlbXNUb1dhaXRGb3IgYmxvY2sgdW50aWwgdGhpcyBtYW55IGl0ZW1zIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUge0BsaW5rIFJlc3VsdFNldH0KKyAgICAgKiBAcmV0dXJuIHRoZSB0aHJlYWQgdGhhdCBpcyBkb2luZyB0aGUgd29yayBvZiBhZGRpbmcgdG8gdGhlIHJlc3VsdCBzZXQKKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAqLworICAgIHByb3RlY3RlZCBUaHJlYWQgYWRkVG9RdWV1ZShmaW5hbCBpbnQgbnVtYmVyT2ZJdGVtc1RvQWRkLCBmaW5hbCBsb25nIHBhdXNlQmV0d2Vlbkl0ZW1zSW5NaWxsaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3RhcnQsIGZpbmFsIGJvb2xlYW4gbWFya0RvbmUsIGZpbmFsIGludCBpdGVtc1RvV2FpdEZvcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKGl0ZW1zVG9XYWl0Rm9yKTsKKyAgICAgICAgZmluYWwgVGhyZWFkIHQgPSBuZXcgVGhyZWFkKCgpIC0+IHsKKyAgICAgICAgICAgIGJvb2xlYW4gZG9uZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IG51bWJlck9mSXRlbXNUb0FkZCAmJiAhZG9uZTsgaXgrKykgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpLmlzSW50ZXJydXB0ZWQoKSkgdGhyb3cgbmV3IEludGVycnVwdGVkRXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50SW5kZXggPSBpeDsKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5zdWJtaXQoKCkgLT4geworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzdWx0IHJlc3VsdCA9IG5ldyBSZXN1bHQoInRlc3QtIiArIGN1cnJlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRTZXQuYWRkKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXRjaC5jb3VudERvd24oKTsKKyAgICAgICAgICAgICAgICAgICAgfSkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFRpbWVVbml0Lk1JTExJU0VDT05EUy5zbGVlcChwYXVzZUJldHdlZW5JdGVtc0luTWlsbGlzKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWUpIHsKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobWFya0RvbmUpIHJlc3VsdFNldC5tYXJrQ29tcGxldGUoKTsKKworICAgICAgICB9LCAiUmVzdWx0U2V0VGVzdC1qb2Itc3VibWl0dGVyIik7CisKKyAgICAgICAgaWYgKHN0YXJ0KSB0LnN0YXJ0KCk7CisKKyAgICAgICAgLy8gd2FpdCBmb3IgdGhlIG51bWJlciBvZiBpdGVtcyByZXF1ZXN0ZWQgdG8gYmUgYWRkZWQgdG8gdGhlIHJlc3VsdCBzZXQKKyAgICAgICAgbGF0Y2guYXdhaXQoKTsKKworICAgICAgICByZXR1cm4gdDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsdXN0ZXJCdWlsZGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9DbHVzdGVyQnVpbGRlclRlc3QuamF2YQppbmRleCBmOGNmMGM3Li41YmVmMjhjIDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsdXN0ZXJCdWlsZGVyVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2x1c3RlckJ1aWxkZXJUZXN0LmphdmEKQEAgLTM4LDI0ICszOCwxMiBAQAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7CiAgICAgICAgIHJldHVybiBBcnJheXMuYXNMaXN0KG5ldyBPYmplY3RbXVtdewotICAgICAgICAgICAgICAgIHsibWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbjAiLCBDbHVzdGVyLmJ1aWxkKCkubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigwKSwgIm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LAotICAgICAgICAgICAgICAgIHsibWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbk5lZzEiLCBDbHVzdGVyLmJ1aWxkKCkubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigtMSksICJtYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8ifSwKLSAgICAgICAgICAgICAgICB7Im1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb25OZWcxIiwgQ2x1c3Rlci5idWlsZCgpLm1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24oLTEpLCAibWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIn0sCi0gICAgICAgICAgICAgICAgeyJtaW5JblByb2Nlc3NQZXJDb25uZWN0aW9uTHRNYXgiLCBDbHVzdGVyLmJ1aWxkKCkubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigxMDApLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24oOTkpLCAibWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbiBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24ifSwKLSAgICAgICAgICAgICAgICB7Im1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbjAiLCBDbHVzdGVyLmJ1aWxkKCkubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKDApLCAibWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8ifSwKLSAgICAgICAgICAgICAgICB7Im1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbk5lZzEiLCBDbHVzdGVyLmJ1aWxkKCkubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKC0xKSwgIm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn0sCi0gICAgICAgICAgICAgICAgeyJtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb25OZWcxIiwgQ2x1c3Rlci5idWlsZCgpLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbigtMSksICJtaW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyJ9LAotICAgICAgICAgICAgICAgIHsibWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uTHRNYXgiLCBDbHVzdGVyLmJ1aWxkKCkubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKDEwMCkubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKDk5KSwgIm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiJ9LAogICAgICAgICAgICAgICAgIHsibWF4Q29ubmVjdGlvblBvb2xTaXplMCIsIENsdXN0ZXIuYnVpbGQoKS5tYXhDb25uZWN0aW9uUG9vbFNpemUoMCksICJtYXhDb25uZWN0aW9uUG9vbFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LAogICAgICAgICAgICAgICAgIHsibWF4Q29ubmVjdGlvblBvb2xTaXplTmVnMSIsIENsdXN0ZXIuYnVpbGQoKS5tYXhDb25uZWN0aW9uUG9vbFNpemUoLTEpLCAibWF4Q29ubmVjdGlvblBvb2xTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8ifSwKLSAgICAgICAgICAgICAgICB7Im1pbkNvbm5lY3Rpb25Qb29sU2l6ZU5lZzEiLCBDbHVzdGVyLmJ1aWxkKCkubWluQ29ubmVjdGlvblBvb2xTaXplKC0xKSwgIm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIn0sCi0gICAgICAgICAgICAgICAgeyJtaW5Db25uZWN0aW9uUG9vbFNpemVMdGVNYXgiLCBDbHVzdGVyLmJ1aWxkKCkubWluQ29ubmVjdGlvblBvb2xTaXplKDEwMCkubWF4Q29ubmVjdGlvblBvb2xTaXplKDk5KSwgIm1heENvbm5lY3Rpb25Qb29sU2l6ZSBjYW5ub3QgYmUgbGVzcyB0aGFuIG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSJ9LAotICAgICAgICAgICAgICAgIHsibWluQ29ubmVjdGlvblBvb2xTaXplTHRlTWF4IiwgQ2x1c3Rlci5idWlsZCgpLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxMDApLm1heENvbm5lY3Rpb25Qb29sU2l6ZSg5OSksICJtYXhDb25uZWN0aW9uUG9vbFNpemUgY2Fubm90IGJlIGxlc3MgdGhhbiBtaW5Db25uZWN0aW9uUG9vbFNpemUifSwKICAgICAgICAgICAgICAgICB7Im1heENvbm5lY3Rpb25Qb29sU2l6ZTAiLCBDbHVzdGVyLmJ1aWxkKCkubWF4V2FpdEZvckNvbm5lY3Rpb24oMCksICJtYXhXYWl0Rm9yQ29ubmVjdGlvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn0sCiAgICAgICAgICAgICAgICAgeyJtYXhXYWl0Rm9yQ2xvc2UwIiwgQ2x1c3Rlci5idWlsZCgpLm1heFdhaXRGb3JDbG9zZSgwKSwgIm1heFdhaXRGb3JDbG9zZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn0sCiAgICAgICAgICAgICAgICAgeyJtYXhXYWl0Rm9yQ2xvc2VOZWcxIiwgQ2x1c3Rlci5idWlsZCgpLm1heFdhaXRGb3JDbG9zZSgtMSksICJtYXhXYWl0Rm9yQ2xvc2UgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LAotICAgICAgICAgICAgICAgIHsibWF4Q29udGVudExlbmd0aDAiLCBDbHVzdGVyLmJ1aWxkKCkubWF4Q29udGVudExlbmd0aCgwKSwgIm1heENvbnRlbnRMZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LAotICAgICAgICAgICAgICAgIHsibWF4Q29udGVudExlbmd0aE5lZzEiLCBDbHVzdGVyLmJ1aWxkKCkubWF4Q29udGVudExlbmd0aCgtMSksICJtYXhDb250ZW50TGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8ifSwKKyAgICAgICAgICAgICAgICB7Im1heFJlc3BvbnNlQ29udGVudExlbmd0aE5lZzEiLCBDbHVzdGVyLmJ1aWxkKCkubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoKC0xKSwgIm1heFJlc3BvbnNlQ29udGVudExlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIn0sCiAgICAgICAgICAgICAgICAgeyJyZWNvbm5lY3RJbnRlcnZhbDAiLCBDbHVzdGVyLmJ1aWxkKCkucmVjb25uZWN0SW50ZXJ2YWwoMCksICJyZWNvbm5lY3RJbnRlcnZhbCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn0sCiAgICAgICAgICAgICAgICAgeyJyZWNvbm5lY3RJbnRlcnZhbE5lZzEiLCBDbHVzdGVyLmJ1aWxkKCkucmVjb25uZWN0SW50ZXJ2YWwoLTEpLCAicmVjb25uZWN0SW50ZXJ2YWwgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LAogICAgICAgICAgICAgICAgIHsicmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplMCIsIENsdXN0ZXIuYnVpbGQoKS5yZXN1bHRJdGVyYXRpb25CYXRjaFNpemUoMCksICJyZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LApAQCAtNjMsOSArNTEsMTEgQEAKICAgICAgICAgICAgICAgICB7Im5pb1Bvb2xTaXplMCIsIENsdXN0ZXIuYnVpbGQoKS5uaW9Qb29sU2l6ZSgwKSwgIm5pb1Bvb2xTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8ifSwKICAgICAgICAgICAgICAgICB7Im5pb1Bvb2xTaXplTmVnMSIsIENsdXN0ZXIuYnVpbGQoKS5uaW9Qb29sU2l6ZSgtMSksICJuaW9Qb29sU2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn0sCiAgICAgICAgICAgICAgICAgeyJjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzMCIsIENsdXN0ZXIuYnVpbGQoKS5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzKDApLCAiY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn0sCisgICAgICAgICAgICAgICAgeyJpZGxlQ29ubmVjdGlvblRpbWVvdXRNaWxsaXNOZWcxIiwgQ2x1c3Rlci5idWlsZCgpLmlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpcygtMSksICJpZGxlQ29ubmVjdGlvblRpbWVvdXRNaWxsaXMgbXVzdCBiZSB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAxMDAwIn0sCisgICAgICAgICAgICAgICAgeyJpZGxlQ29ubmVjdGlvblRpbWVvdXRNaWxsaXNPbmUiLCBDbHVzdGVyLmJ1aWxkKCkuaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzKDEpLCAiaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzIG11c3QgYmUgemVybyBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCJ9LAorICAgICAgICAgICAgICAgIHsiaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOTk5IiwgQ2x1c3Rlci5idWlsZCgpLmlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpcyg5OTkpLCAiaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzIG11c3QgYmUgemVybyBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMTAwMCJ9LAogICAgICAgICAgICAgICAgIHsid29ya2VyUG9vbFNpemUwIiwgQ2x1c3Rlci5idWlsZCgpLndvcmtlclBvb2xTaXplKDApLCAid29ya2VyUG9vbFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyJ9LAotICAgICAgICAgICAgICAgIHsid29ya2VyUG9vbFNpemVOZWcxIiwgQ2x1c3Rlci5idWlsZCgpLndvcmtlclBvb2xTaXplKC0xKSwgIndvcmtlclBvb2xTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8ifSwKLSAgICAgICAgICAgICAgICB7ImNoYW5uZWxpemVyIiwgQ2x1c3Rlci5idWlsZCgpLmNoYW5uZWxpemVyKCJNaXNzaW5nQ2hhbm5lbGl6ZXIiKSwgIlRoZSBjaGFubmVsaXplciBzcGVjaWZpZWQgW01pc3NpbmdDaGFubmVsaXplcl0gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCAtIGl0IHNob3VsZCBiZSB0aGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzbmFtZSBvZiBhIENoYW5uZWxpemVyIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSBvbiB0aGUgY2xhc3NwYXRoIn19KTsKKyAgICAgICAgICAgICAgICB7IndvcmtlclBvb2xTaXplTmVnMSIsIENsdXN0ZXIuYnVpbGQoKS53b3JrZXJQb29sU2l6ZSgtMSksICJ3b3JrZXJQb29sU2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIn19KTsKICAgICB9CiAKICAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXIodmFsdWUgPSAwKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9DbHVzdGVyQ29uZmlnVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9DbHVzdGVyQ29uZmlnVGVzdC5qYXZhCmluZGV4IGY2YTVkYmYuLjEyZDhkYTAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2x1c3RlckNvbmZpZ1Rlc3QuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsdXN0ZXJDb25maWdUZXN0LmphdmEKQEAgLTIwLDggKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5CYXNlQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMzsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLlN0cmVhbVJlYWRDb25zdHJhaW50czsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIApAQCAtMzMsMzcgKzMyLDE4IEBACiBwdWJsaWMgY2xhc3MgQ2x1c3RlckNvbmZpZ1Rlc3QgewogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9wYWdhdGVTZXJpYWxpemVyQ29uc3RyYWludHNGb3JHcmFwaFNPTjMoKSB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUHJvcGFnYXRlU2VyaWFsaXplckNvbnN0cmFpbnRzRm9yR3JhcGhTT040KCkgewogICAgICAgICBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZyA9IG5ldyBCYXNlQ29uZmlndXJhdGlvbigpOwogICAgICAgICBjb25maWcuc2V0UHJvcGVydHkoInNlcmlhbGl6ZXIuY29uZmlnLm1heE51bWJlckxlbmd0aCIsIDk5OSk7CiAgICAgICAgIGNvbmZpZy5zZXRQcm9wZXJ0eSgic2VyaWFsaXplci5jb25maWcubWF4U3RyaW5nTGVuZ3RoIiwgMTIzNDU2KTsKICAgICAgICAgY29uZmlnLnNldFByb3BlcnR5KCJzZXJpYWxpemVyLmNvbmZpZy5tYXhOZXN0aW5nRGVwdGgiLCA1NSk7CiAgICAgICAgIGNvbmZpZy5zZXRQcm9wZXJ0eSgiaG9zdHMiLCBBcnJheXMuYXNMaXN0KCJsb2NhbGhvc3QiKSk7CiAKLSAgICAgICAgY29uZmlnLnNldFByb3BlcnR5KCJzZXJpYWxpemVyLmNsYXNzTmFtZSIsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMy5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCkpOworICAgICAgICBjb25maWcuc2V0UHJvcGVydHkoInNlcmlhbGl6ZXIuY2xhc3NOYW1lIiwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKSk7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIub3Blbihjb25maWcpOwotICAgICAgICBhc3NlcnRUcnVlKGNsdXN0ZXIuZ2V0U2VyaWFsaXplcigpIGluc3RhbmNlb2YgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzKTsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzIHNlclYzID0gKEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMykgY2x1c3Rlci5nZXRTZXJpYWxpemVyKCk7Ci0gICAgICAgIGZpbmFsIFN0cmVhbVJlYWRDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHNlclYzLmdldE1hcHBlcigpLmdldEZhY3RvcnkoKS5zdHJlYW1SZWFkQ29uc3RyYWludHMoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoOTk5LCBjb25zdHJhaW50cy5nZXRNYXhOdW1iZXJMZW5ndGgoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMjM0NTYsIGNvbnN0cmFpbnRzLmdldE1heFN0cmluZ0xlbmd0aCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDU1LCBjb25zdHJhaW50cy5nZXRNYXhOZXN0aW5nRGVwdGgoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9wYWdhdGVTZXJpYWxpemVyQ29uc3RyYWludHNGb3JHcmFwaFNPTjIoKSB7Ci0gICAgICAgIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlnID0gbmV3IEJhc2VDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIGNvbmZpZy5zZXRQcm9wZXJ0eSgic2VyaWFsaXplci5jb25maWcubWF4TnVtYmVyTGVuZ3RoIiwgOTk5KTsKLSAgICAgICAgY29uZmlnLnNldFByb3BlcnR5KCJzZXJpYWxpemVyLmNvbmZpZy5tYXhTdHJpbmdMZW5ndGgiLCAxMjM0NTYpOwotICAgICAgICBjb25maWcuc2V0UHJvcGVydHkoInNlcmlhbGl6ZXIuY29uZmlnLm1heE5lc3RpbmdEZXB0aCIsIDU1KTsKLSAgICAgICAgY29uZmlnLnNldFByb3BlcnR5KCJob3N0cyIsIEFycmF5cy5hc0xpc3QoImxvY2FsaG9zdCIpKTsKLQotICAgICAgICBjb25maWcuc2V0UHJvcGVydHkoInNlcmlhbGl6ZXIuY2xhc3NOYW1lIiwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyLmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKSk7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIub3Blbihjb25maWcpOwotICAgICAgICBhc3NlcnRUcnVlKGNsdXN0ZXIuZ2V0U2VyaWFsaXplcigpIGluc3RhbmNlb2YgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKTsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyIHNlclYyID0gKEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMikgY2x1c3Rlci5nZXRTZXJpYWxpemVyKCk7Ci0gICAgICAgIGZpbmFsIFN0cmVhbVJlYWRDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHNlclYyLmdldE1hcHBlcigpLmdldEZhY3RvcnkoKS5zdHJlYW1SZWFkQ29uc3RyYWludHMoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShjbHVzdGVyLmdldFNlcmlhbGl6ZXIoKSBpbnN0YW5jZW9mIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCk7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJWNCA9IChHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQpIGNsdXN0ZXIuZ2V0U2VyaWFsaXplcigpOworICAgICAgICBmaW5hbCBTdHJlYW1SZWFkQ29uc3RyYWludHMgY29uc3RyYWludHMgPSBzZXJWNC5nZXRNYXBwZXIoKS5nZXRGYWN0b3J5KCkuc3RyZWFtUmVhZENvbnN0cmFpbnRzKCk7CiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDk5OSwgY29uc3RyYWludHMuZ2V0TWF4TnVtYmVyTGVuZ3RoKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMTIzNDU2LCBjb25zdHJhaW50cy5nZXRNYXhTdHJpbmdMZW5ndGgoKSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsdXN0ZXJUZXN0LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsdXN0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVkYzEyYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2x1c3RlclRlc3QuamF2YQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudHVwbGUuUGFpcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5pbnRlcmNlcHRvci5QYXlsb2FkU2VyaWFsaXppbmdJbnRlcmNlcHRvcjsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXIuU0VSSUFMSVpFUl9JTlRFUkNFUFRPUl9OQU1FOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0luc3RhbmNlT2YuaW5zdGFuY2VPZjsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCisvKioKKyAqIFRlc3QgQ2x1c3RlciBhbmQgQ2x1c3Rlci5CdWlsZGVyLgorICovCitwdWJsaWMgY2xhc3MgQ2x1c3RlclRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFJlcXVlc3RJbnRlcmNlcHRvciBURVNUX0lOVEVSQ0VQVE9SID0gaHR0cFJlcXVlc3QgLT4gbmV3IEh0dHBSZXF1ZXN0KG51bGwsIG51bGwsIG51bGwpOworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBbGxvd01vZGlmeWluZ1JlbGF0aXZlVG9Ob25FeGlzdGVudEludGVyY2VwdG9yKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2x1c3Rlci5idWlsZCgpLmFkZEludGVyY2VwdG9yQWZ0ZXIoIm5vbmUiLCAidGVzdCIsIHJlcSAtPiByZXEpOworICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCBoYXZlIGFsbG93ZWQgaW50ZXJjZXB0b3IgdG8gYmUgYWRkZWQuIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBhc3NlcnRUaGF0KGUsIGluc3RhbmNlT2YoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5vbmUgaW50ZXJjZXB0b3Igbm90IGZvdW5kIiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsdXN0ZXIuYnVpbGQoKS5hZGRJbnRlcmNlcHRvckJlZm9yZSgibm9uZSIsICJ0ZXN0IiwgcmVxIC0+IHJlcSk7CisgICAgICAgICAgICBmYWlsKCJTaG91bGQgbm90IGhhdmUgYWxsb3dlZCBpbnRlcmNlcHRvciB0byBiZSBhZGRlZC4iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZSwgaW5zdGFuY2VPZihJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibm9uZSBpbnRlcmNlcHRvciBub3QgZm91bmQiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2x1c3Rlci5idWlsZCgpLnJlbW92ZUludGVyY2VwdG9yKCJub25leGlzdGVudCIpOworICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCBoYXZlIGFsbG93ZWQgaW50ZXJjZXB0b3IgdG8gYmUgcmVtb3ZlZC4iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZSwgaW5zdGFuY2VPZihJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibm9uZXhpc3RlbnQgaW50ZXJjZXB0b3Igbm90IGZvdW5kIiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBZGRUb0ludGVyY2VwdG9yVG9CZWdpbm5pbmdJZkJlZm9yZUZpcnN0KCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIHRlc3RDbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgpCisgICAgICAgICAgICAgICAgLmFkZEludGVyY2VwdG9yKCJiIiwgcmVxIC0+IHJlcSkKKyAgICAgICAgICAgICAgICAuYWRkSW50ZXJjZXB0b3JCZWZvcmUoU0VSSUFMSVpFUl9JTlRFUkNFUFRPUl9OQU1FLCAiYSIsIFRFU1RfSU5URVJDRVBUT1IpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoImEiLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDApLmdldExlZnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhURVNUX0lOVEVSQ0VQVE9SLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDApLmdldFJpZ2h0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoU0VSSUFMSVpFUl9JTlRFUkNFUFRPUl9OQU1FLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDEpLmdldExlZnQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBZGRUb0ludGVyY2VwdG9yQWZ0ZXIoKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgdGVzdENsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuYWRkSW50ZXJjZXB0b3IoImIiLCByZXEgLT4gcmVxKQorICAgICAgICAgICAgICAgIC5hZGRJbnRlcmNlcHRvckFmdGVyKFNFUklBTElaRVJfSU5URVJDRVBUT1JfTkFNRSwgImEiLCBURVNUX0lOVEVSQ0VQVE9SKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKFNFUklBTElaRVJfSU5URVJDRVBUT1JfTkFNRSwgdGVzdENsdXN0ZXIuZ2V0UmVxdWVzdEludGVyY2VwdG9ycygpLmdldCgwKS5nZXRMZWZ0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImEiLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDEpLmdldExlZnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhURVNUX0lOVEVSQ0VQVE9SLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDEpLmdldFJpZ2h0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImIiLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDIpLmdldExlZnQoKSk7CisKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEFkZFRvSW50ZXJjZXB0b3JMYXN0KCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIHRlc3RDbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgpCisgICAgICAgICAgICAgICAgLmFkZEludGVyY2VwdG9yKCJjIiwgcmVxIC0+IHJlcSkKKyAgICAgICAgICAgICAgICAuYWRkSW50ZXJjZXB0b3IoImIiLCByZXEgLT4gcmVxKQorICAgICAgICAgICAgICAgIC5hZGRJbnRlcmNlcHRvcigiYSIsIHJlcSAtPiByZXEpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoU0VSSUFMSVpFUl9JTlRFUkNFUFRPUl9OQU1FLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDApLmdldExlZnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiYyIsIHRlc3RDbHVzdGVyLmdldFJlcXVlc3RJbnRlcmNlcHRvcnMoKS5nZXQoMSkuZ2V0TGVmdCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJiIiwgdGVzdENsdXN0ZXIuZ2V0UmVxdWVzdEludGVyY2VwdG9ycygpLmdldCgyKS5nZXRMZWZ0KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImEiLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuZ2V0KDMpLmdldExlZnQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBbGxvd0FkZGluZ0R1cGxpY2F0ZU5hbWUoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbHVzdGVyLmJ1aWxkKCkuYWRkSW50ZXJjZXB0b3IoIm5hbWUiLCByZXEgLT4gcmVxKS5hZGRJbnRlcmNlcHRvcigibmFtZSIsIHJlcSAtPiByZXEpOworICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCBoYXZlIGFsbG93ZWQgaW50ZXJjZXB0b3IgdG8gYmUgYWRkZWQuIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBhc3NlcnRUaGF0KGUsIGluc3RhbmNlT2YoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUgaW50ZXJjZXB0b3IgYWxyZWFkeSBleGlzdHMiLCBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2x1c3Rlci5idWlsZCgpLmFkZEludGVyY2VwdG9yKCJuYW1lIiwgcmVxIC0+IHJlcSkuYWRkSW50ZXJjZXB0b3JBZnRlcigibmFtZSIsICJuYW1lIiwgcmVxIC0+IHJlcSk7CisgICAgICAgICAgICBmYWlsKCJTaG91bGQgbm90IGhhdmUgYWxsb3dlZCBpbnRlcmNlcHRvciB0byBiZSBhZGRlZC4iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZSwgaW5zdGFuY2VPZihJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSBpbnRlcmNlcHRvciBhbHJlYWR5IGV4aXN0cyIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBDbHVzdGVyLmJ1aWxkKCkuYWRkSW50ZXJjZXB0b3IoIm5hbWUiLCByZXEgLT4gcmVxKS5hZGRJbnRlcmNlcHRvckJlZm9yZSgibmFtZSIsICJuYW1lIiwgcmVxIC0+IHJlcSk7CisgICAgICAgICAgICBmYWlsKCJTaG91bGQgbm90IGhhdmUgYWxsb3dlZCBpbnRlcmNlcHRvciB0byBiZSBhZGRlZC4iKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZSwgaW5zdGFuY2VPZihJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSBpbnRlcmNlcHRvciBhbHJlYWR5IGV4aXN0cyIsIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ29udGFpbkJvZHlTZXJpYWxpemVyQnlEZWZhdWx0KCkgeworICAgICAgICBmaW5hbCBMaXN0PFBhaXI8U3RyaW5nLCA/IGV4dGVuZHMgUmVxdWVzdEludGVyY2VwdG9yPj4gaW50ZXJjZXB0b3JzID0gQ2x1c3Rlci5idWlsZCgpLmNyZWF0ZSgpLmdldFJlcXVlc3RJbnRlcmNlcHRvcnMoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGludGVyY2VwdG9ycy5zaXplKCkpOworICAgICAgICBhc3NlcnRUcnVlKGludGVyY2VwdG9ycy5nZXQoMCkuZ2V0UmlnaHQoKSBpbnN0YW5jZW9mIFBheWxvYWRTZXJpYWxpemluZ0ludGVyY2VwdG9yKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlbW92ZURlZmF1bHRTZXJpYWxpemVyKCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIHRlc3RDbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgpLnJlbW92ZUludGVyY2VwdG9yKFNFUklBTElaRVJfSU5URVJDRVBUT1JfTkFNRSkuY3JlYXRlKCk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCB0ZXN0Q2x1c3Rlci5nZXRSZXF1ZXN0SW50ZXJjZXB0b3JzKCkuc2l6ZSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0Nvbm5lY3Rpb25Qb29sVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Db25uZWN0aW9uUG9vbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzNiYmIzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Db25uZWN0aW9uUG9vbFRlc3QuamF2YQpAQCAtMCwwICsxLDk5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5jb25jdXJyZW50LkJhc2ljVGhyZWFkRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnk7CitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by53aGVuOworCitwdWJsaWMgY2xhc3MgQ29ubmVjdGlvblBvb2xUZXN0IHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ3JlYXRlQW5kU2NhbGVQb29sKCkgdGhyb3dzIFRpbWVvdXRFeGNlcHRpb24geworICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvbm5lY3Rpb25zQ3JlYXRlZCA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOworCisgICAgICAgIGZpbmFsIENvbm5lY3Rpb24gbW9ja0Nvbm4wID0gbW9jayhDb25uZWN0aW9uLmNsYXNzKTsKKyAgICAgICAgd2hlbihtb2NrQ29ubjAuaXNCb3Jyb3dlZCgpKS50aGVuUmV0dXJuKG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIGZpbmFsIENvbm5lY3Rpb24gbW9ja0Nvbm4xID0gbW9jayhDb25uZWN0aW9uLmNsYXNzKTsKKyAgICAgICAgd2hlbihtb2NrQ29ubjEuaXNCb3Jyb3dlZCgpKS50aGVuUmV0dXJuKG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIGZpbmFsIExpc3Q8Q29ubmVjdGlvbj4gbW9ja0Nvbm5zID0gQXJyYXlzLmFzTGlzdChtb2NrQ29ubjAsIG1vY2tDb25uMSk7CisKKyAgICAgICAgZmluYWwgQ29ubmVjdGlvbkZhY3RvcnkgY29ubmVjdGlvbkZhY3RvcnkgPSBtb2NrKENvbm5lY3Rpb25GYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgd2hlbihjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGUoYW55KENvbm5lY3Rpb25Qb29sLmNsYXNzKSkpCisgICAgICAgICAgICAgICAgLnRoZW5BbnN3ZXIoaSAtPiBtb2NrQ29ubnMuZ2V0KGNvbm5lY3Rpb25zQ3JlYXRlZC5nZXRBbmRJbmNyZW1lbnQoKSkpOworCisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IG1vY2soQ2x1c3Rlci5jbGFzcyk7CisgICAgICAgIHdoZW4oY2x1c3Rlci5jb25uZWN0aW9uUG9vbFNldHRpbmdzKCkpLnRoZW5SZXR1cm4obmV3IFNldHRpbmdzLkNvbm5lY3Rpb25Qb29sU2V0dGluZ3MoKSk7CisgICAgICAgIGZpbmFsIFNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvciBjb25uZWN0aW9uU2NoZWR1bGVyID0gbmV3IFNjaGVkdWxlZFRocmVhZFBvb2xFeGVjdXRvcigyLAorICAgICAgICAgICAgICAgIG5ldyBCYXNpY1RocmVhZEZhY3RvcnkuQnVpbGRlcigpLm5hbWluZ1BhdHRlcm4oImdyZW1saW4tZHJpdmVyLWNvbm4tc2NoZWR1bGVyLSVkIikuYnVpbGQoKSk7CisgICAgICAgIHdoZW4oY2x1c3Rlci5jb25uZWN0aW9uU2NoZWR1bGVyKCkpLnRoZW5SZXR1cm4oY29ubmVjdGlvblNjaGVkdWxlcik7CisKKyAgICAgICAgZmluYWwgSG9zdCBob3N0ID0gbW9jayhIb3N0LmNsYXNzKTsKKworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gbmV3IENsaWVudC5DbHVzdGVyZWRDbGllbnQoY2x1c3Rlcik7CisKKyAgICAgICAgLy8gY3JlYXRlIHBvb2wgLSBzdGFydHMgd2l0aCAxIGNvbm5lY3Rpb24KKyAgICAgICAgZmluYWwgQ29ubmVjdGlvblBvb2wgY29ubmVjdGlvblBvb2wgPSBuZXcgQ29ubmVjdGlvblBvb2woaG9zdCwgY2xpZW50LCBPcHRpb25hbC5vZigyKSwgY29ubmVjdGlvbkZhY3RvcnkpOworICAgICAgICAvLyB0cnkgdG8gYm9ycm93IGEgY29ubmVjdGlvbi4KKyAgICAgICAgZmluYWwgQ29ubmVjdGlvbiBjb25uMCA9IGNvbm5lY3Rpb25Qb29sLmJvcnJvd0Nvbm5lY3Rpb24oMTAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworCisgICAgICAgIGFzc2VydE5vdE51bGwoY29ubmVjdGlvblBvb2wpOworICAgICAgICBhc3NlcnROb3ROdWxsKGNvbm4wKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbm5lY3Rpb25zQ3JlYXRlZC5nZXQoKSk7CisKKyAgICAgICAgLy8gdHJ5IHRvIGJvcnJvdyBjb25uZWN0aW9uLiBjb25uMCBpcyBtb2NrZWQgYXMgYm9ycm93ZWQsIHNvIHNob3VsZCBjcmVhdGUgbmV3IG9uZQorICAgICAgICB3aGVuKG1vY2tDb25uMC5pc0JvcnJvd2VkKCkpLnRoZW5SZXR1cm4obmV3IEF0b21pY0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICBmaW5hbCBDb25uZWN0aW9uIGNvbm4xID0gY29ubmVjdGlvblBvb2wuYm9ycm93Q29ubmVjdGlvbigxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChjb25uMSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjb25uZWN0aW9uc0NyZWF0ZWQuZ2V0KCkpOworCisgICAgICAgIC8vIG1hcmsgY29ubjEgYXMgYm9ycm93ZWQgYW5kIHRyeSB0byBnZXQgb25lIG1vcmUgY29ubmVjdGlvbgorICAgICAgICB3aGVuKG1vY2tDb25uMS5pc0JvcnJvd2VkKCkpLnRoZW5SZXR1cm4obmV3IEF0b21pY0Jvb2xlYW4odHJ1ZSkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29ubmVjdGlvblBvb2wuYm9ycm93Q29ubmVjdGlvbigxMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgICAgICAgICAgZmFpbCgiUG9vbCBhbHJlYWR5IGF0IGZvb2wgY2FwYWNpdHksIGNvbm5lY3Rpb24gY2FuJ3QgYmUgYWRkZWQiKTsKKyAgICAgICAgfSBjYXRjaCAoVGltZW91dEV4Y2VwdGlvbiB0ZSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbm5lY3Rpb25zQ3JlYXRlZC5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyByZXR1cm4gY29ubjAgdG8gcG9vbCwgY2FuIGJlIGJvcnJvd2VkIGFnYWluCisgICAgICAgIGNvbm5lY3Rpb25Qb29sLnJldHVybkNvbm5lY3Rpb24oY29ubjApOworICAgICAgICB3aGVuKG1vY2tDb25uMC5pc0JvcnJvd2VkKCkpLnRoZW5SZXR1cm4obmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAgICAgZmluYWwgQ29ubmVjdGlvbiBjb25uMDAgPSBjb25uZWN0aW9uUG9vbC5ib3Jyb3dDb25uZWN0aW9uKDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKGNvbm4wMCk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjb25uZWN0aW9uc0NyZWF0ZWQuZ2V0KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSG9zdFRlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvSG9zdFRlc3QuamF2YQppbmRleCA1YmVlZGE0Li5lOTgyNzZhIDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0hvc3RUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9Ib3N0VGVzdC5qYXZhCkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIGZpbmFsIEluZXRTb2NrZXRBZGRyZXNzIGFkZHkgPSBuZXcgSW5ldFNvY2tldEFkZHJlc3MoImxvY2FsaG9zdCIsIDgxODIpOwogICAgICAgICBmaW5hbCBIb3N0IGhvc3QgPSBuZXcgSG9zdChhZGR5LCBDbHVzdGVyLm9wZW4oKSk7CiAgICAgICAgIGZpbmFsIFVSSSB3ZWJTb2NrZXRVcmkgPSBob3N0LmdldEhvc3RVcmkoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLCB3ZWJTb2NrZXRVcmkudG9TdHJpbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLCB3ZWJTb2NrZXRVcmkudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgZmluYWwgSW5ldFNvY2tldEFkZHJlc3MgYWRkeSA9IG5ldyBJbmV0U29ja2V0QWRkcmVzcygibG9jYWxob3N0IiwgODE4Myk7CiAgICAgICAgIGZpbmFsIEhvc3QgaG9zdCA9IG5ldyBIb3N0KGFkZHksIENsdXN0ZXIuYnVpbGQoKS5wb3J0KDgxODMpLnBhdGgoIi9hcmdoIikuY3JlYXRlKCkpOwogICAgICAgICBmaW5hbCBVUkkgd2ViU29ja2V0VXJpID0gaG9zdC5nZXRIb3N0VXJpKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygid3M6Ly9sb2NhbGhvc3Q6ODE4My9hcmdoIiwgd2ViU29ja2V0VXJpLnRvU3RyaW5nKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6ODE4My9hcmdoIiwgd2ViU29ja2V0VXJpLnRvU3RyaW5nKCkpOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXF1ZXN0TWVzc2FnZVRlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVxdWVzdE1lc3NhZ2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MzkwNTAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXF1ZXN0TWVzc2FnZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgUmVxdWVzdE1lc3NhZ2VUZXN0IHsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkT3ZlcnJpZGVSZXF1ZXN0KCkgewotICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3QgPSBVVUlELnJhbmRvbVVVSUQoKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoIm9wIikub3ZlcnJpZGVSZXF1ZXN0SWQocmVxdWVzdCkuY3JlYXRlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0LCBtc2cuZ2V0UmVxdWVzdElkKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2V0UHJvY2Vzc29yKCkgewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgib3AiKS5wcm9jZXNzb3IoInBwcCIpLmNyZWF0ZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBwcCIsIG1zZy5nZXRQcm9jZXNzb3IoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXRPcFdpdGhEZWZhdWx0cygpIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoIm9wIikuY3JlYXRlKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIiIsIG1zZy5nZXRQcm9jZXNzb3IoKSk7ICAgIC8vIHN0YW5kYXJkIG9wIHByb2Nlc3NvcgotICAgICAgICBhc3NlcnROb3ROdWxsKG1zZy5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygib3AiLCBtc2cuZ2V0T3AoKSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwobXNnLmdldEFyZ3MoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5FbXB0eU9wdGlvbmFsQXJnKCkgewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgib3AiKS5jcmVhdGUoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UobXNnLm9wdGlvbmFsQXJncygidGVzdCIpLmlzUHJlc2VudCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybkFyZ0FzT3B0aW9uYWwoKSB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJvcCIpLmFkZCgidGVzdCIsICJ0ZXN0aW5nIikuY3JlYXRlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdGluZyIsIG1zZy5vcHRpb25hbEFyZ3MoInRlc3QiKS5nZXQoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRRdWV1ZVRlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0UXVldWVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMjFlODMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRRdWV1ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5leGNlcHRpb24uRXhjZXB0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmdyZWF0ZXJUaGFuOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFJlc3VsdFF1ZXVlVGVzdCBleHRlbmRzIEFic3RyYWN0UmVzdWx0UXVldWVUZXN0IHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBBVFRSSUJVVEVTID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKSB7ewotICAgICAgICBwdXQoInRoaXMiLCAidGhhdCIpOwotICAgIH19OwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRTaXplVW50aWxFcnJvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaHJlYWQgdCA9IGFkZFRvUXVldWUoMTAwLCAxMCwgdHJ1ZSwgZmFsc2UsIDEpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRRdWV1ZS5zaXplKCksIGlzKGdyZWF0ZXJUaGFuKDApKSk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlYWRDb21wbGV0ZWQuaXNEb25lKCksIGlzKGZhbHNlKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEV4Y2VwdGlvbiB0aGVQcm9ibGVtID0gbmV3IEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgcmVzdWx0UXVldWUubWFya0Vycm9yKHRoZVByb2JsZW0pOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyZWFkQ29tcGxldGVkLmlzRG9uZSgpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UXVldWUuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24iKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh0aGVQcm9ibGVtLCBleC5nZXRDYXVzZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHQuaW50ZXJydXB0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEJlRW1wdHlUaGVuTm90RW1wdHkoKSB7Ci0gICAgICAgIGFzc2VydFRoYXQocmVzdWx0UXVldWUuaXNFbXB0eSgpLCBpcyh0cnVlKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0IikpOwotICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFF1ZXVlLmlzRW1wdHkoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEJlRW1wdHlVbnRpbEVycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFRocmVhZCB0ID0gYWRkVG9RdWV1ZSgxMDAsIDEwLCB0cnVlLCBmYWxzZSwgMSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFF1ZXVlLmlzRW1wdHkoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocmVhZENvbXBsZXRlZC5pc0RvbmUoKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAgICAgZmluYWwgRXhjZXB0aW9uIHRoZVByb2JsZW0gPSBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXN1bHRRdWV1ZS5tYXJrRXJyb3IodGhlUHJvYmxlbSk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlYWRDb21wbGV0ZWQuaXNEb25lKCksIGlzKHRydWUpKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXN1bHRRdWV1ZS5pc0VtcHR5KCk7Ci0gICAgICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiIpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRoZVByb2JsZW0sIGV4LmdldENhdXNlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgdC5pbnRlcnJ1cHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRHJhaW5VbnRpbEVycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFRocmVhZCB0ID0gYWRkVG9RdWV1ZSgxMDAsIDEwLCB0cnVlLCBmYWxzZSwgMSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFF1ZXVlLmlzRW1wdHkoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiBkcmFpbiA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgcmVzdWx0UXVldWUuZHJhaW5UbyhkcmFpbik7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGRyYWluLnNpemUoKSwgaXMoZ3JlYXRlclRoYW4oMCkpKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocmVhZENvbXBsZXRlZC5pc0RvbmUoKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHNvbWUgbW9yZSBpdGVtcyBnZXQgYWRkZWQgdG8gdGhlIHF1ZXVlIGJlZm9yZSBhc3NlcnQKLSAgICAgICAgICAgIFRpbWVVbml0Lk1JTExJU0VDT05EUy5zbGVlcCgxMDApOwotCi0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFF1ZXVlLmlzRW1wdHkoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocmVhZENvbXBsZXRlZC5pc0RvbmUoKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAgICAgZmluYWwgRXhjZXB0aW9uIHRoZVByb2JsZW0gPSBuZXcgRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXN1bHRRdWV1ZS5tYXJrRXJyb3IodGhlUHJvYmxlbSk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlYWRDb21wbGV0ZWQuaXNEb25lKCksIGlzKHRydWUpKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXN1bHRRdWV1ZS5kcmFpblRvKG5ldyBBcnJheUxpc3Q8PigpKTsKLSAgICAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gYW4gZXhjZXB0aW9uIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHModGhlUHJvYmxlbSwgZXguZ2V0Q2F1c2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0LmludGVycnVwdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBd2FpdEV2ZXJ5dGhpbmdBbmRGbHVzaE9uTWFya0NvbXBsZXRlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IHJlc3VsdFF1ZXVlLmF3YWl0KDQpOwotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MiIpKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QzIikpOwotCi0gICAgICAgIGFzc2VydFRoYXQoZnV0dXJlLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwotICAgICAgICByZXN1bHRRdWV1ZS5tYXJrQ29tcGxldGUoQVRUUklCVVRFUyk7Ci0gICAgICAgIGFzc2VydFRoYXQoZnV0dXJlLmlzRG9uZSgpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMgPSBmdXR1cmUuZ2V0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDEiLCByZXN1bHRzLmdldCgwKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDIiLCByZXN1bHRzLmdldCgxKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDMiLCByZXN1bHRzLmdldCgyKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCByZXN1bHRzLnNpemUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRRdWV1ZS5pc0VtcHR5KCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGF0IiwgcmVzdWx0UXVldWUuZ2V0U3RhdHVzQXR0cmlidXRlcygpLmdldCgidGhpcyIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0RmFpbFRoZUZ1dHVyZU9uTWFya0Vycm9yKCkgewotICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IHJlc3VsdFF1ZXVlLmF3YWl0KDQpOwotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MiIpKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QzIikpOwotCi0gICAgICAgIGFzc2VydFRoYXQoZnV0dXJlLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwotICAgICAgICByZXN1bHRRdWV1ZS5tYXJrRXJyb3IobmV3IEV4Y2VwdGlvbigibm8gd29ya3kiKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZnV0dXJlLmlzRG9uZSgpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZ1dHVyZS5nZXQoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdCA9IEV4Y2VwdGlvblV0aWxzLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5vIHdvcmt5IiwgdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBd2FpdFRvRXhwZWN0ZWRWYWx1ZUFuZERyYWluT25BZGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmUgPSByZXN1bHRRdWV1ZS5hd2FpdCgzKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QxIikpOwotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7Ci0KLSAgICAgICAgLy8gc2hvdWxkbid0IGNvbXBsZXRlIHVudGlsIHRoZSB0aGlyZCBpdGVtIGlzIGluIHBsYXkKLSAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKGZhbHNlKSk7Ci0KLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QzIikpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gZnV0dXJlLmdldCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QxIiwgcmVzdWx0cy5nZXQoMCkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QyIiwgcmVzdWx0cy5nZXQoMSkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QzIiwgcmVzdWx0cy5nZXQoMikuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgcmVzdWx0cy5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydFRoYXQocmVzdWx0UXVldWUuaXNFbXB0eSgpLCBpcyh0cnVlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBd2FpdE11bHRpcGxlVG9FeHBlY3RlZFZhbHVlQW5kRHJhaW5PbkFkZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZTEgPSByZXN1bHRRdWV1ZS5hd2FpdCgzKTsKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmUyID0gcmVzdWx0UXVldWUuYXdhaXQoMSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MSIpKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QyIikpOwotCi0gICAgICAgIC8vIHNob3VsZG4ndCBjb21wbGV0ZSB0aGUgZmlyc3QgZnV0dXJlIHVudGlsIHRoZSB0aGlyZCBpdGVtIGlzIGluIHBsYXkKLSAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUxLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZTIuaXNEb25lKCksIGlzKGZhbHNlKSk7Ci0KLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QzIikpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzMSA9IGZ1dHVyZTEuZ2V0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDEiLCByZXN1bHRzMS5nZXQoMCkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QyIiwgcmVzdWx0czEuZ2V0KDEpLmdldFN0cmluZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MyIsIHJlc3VsdHMxLmdldCgyKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCByZXN1bHRzMS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZTEuaXNEb25lKCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUyLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwotCi0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0NCIpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUxLmlzRG9uZSgpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZnV0dXJlMi5pc0RvbmUoKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzMiA9IGZ1dHVyZTIuZ2V0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDQiLCByZXN1bHRzMi5nZXQoMCkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzdWx0czIuc2l6ZSgpKTsKLQotICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFF1ZXVlLmlzRW1wdHkoKSwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXdhaXRUb0V4cGVjdGVkVmFsdWVBbmREcmFpbk9uQXdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QxIikpOwotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MyIpKTsKLQotICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IHJlc3VsdFF1ZXVlLmF3YWl0KDMpOwotICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZS5pc0RvbmUoKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gZnV0dXJlLmdldCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QxIiwgcmVzdWx0cy5nZXQoMCkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QyIiwgcmVzdWx0cy5nZXQoMSkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QzIiwgcmVzdWx0cy5nZXQoMikuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgcmVzdWx0cy5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydFRoYXQocmVzdWx0UXVldWUuaXNFbXB0eSgpLCBpcyh0cnVlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBd2FpdFRvUmVhZENvbXBsZXRlZEFuZERyYWluT25Bd2FpdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MiIpKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QzIikpOwotCi0gICAgICAgIHJlc3VsdFF1ZXVlLm1hcmtDb21wbGV0ZShBVFRSSUJVVEVTKTsKLQotICAgICAgICAvLyB5b3UgbWlnaHQgd2FudCAzMCBidXQgdGhlcmUgYXJlIG9ubHkgdGhyZWUKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmUgPSByZXN1bHRRdWV1ZS5hd2FpdCgzMCk7Ci0gICAgICAgIGFzc2VydFRoYXQoZnV0dXJlLmlzRG9uZSgpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMgPSBmdXR1cmUuZ2V0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDEiLCByZXN1bHRzLmdldCgwKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDIiLCByZXN1bHRzLmdldCgxKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDMiLCByZXN1bHRzLmdldCgyKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCByZXN1bHRzLnNpemUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRRdWV1ZS5pc0VtcHR5KCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGF0IiwgcmVzdWx0UXVldWUuZ2V0U3RhdHVzQXR0cmlidXRlcygpLmdldCgidGhpcyIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZERyYWluQXNJdGVtc0Fycml2ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaHJlYWQgdCA9IGFkZFRvUXVldWUoMTAwMCwgMSwgdHJ1ZSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvdW50MSA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOwotICAgICAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudDIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAgICAgICAgIGZpbmFsIEF0b21pY0ludGVnZXIgY291bnQzID0gbmV3IEF0b21pY0ludGVnZXIoMCk7Ci0gICAgICAgICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgzKTsKLQotICAgICAgICAgICAgcmVzdWx0UXVldWUuYXdhaXQoNTAwKS50aGVuQWNjZXB0QXN5bmMociAtPiB7Ci0gICAgICAgICAgICAgICAgY291bnQxLnNldChyLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcmVzdWx0UXVldWUuYXdhaXQoMTUwKS50aGVuQWNjZXB0QXN5bmMociAtPiB7Ci0gICAgICAgICAgICAgICAgY291bnQyLnNldChyLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgcmVzdWx0UXVldWUuYXdhaXQoMzUwKS50aGVuQWNjZXB0QXN5bmMociAtPiB7Ci0gICAgICAgICAgICAgICAgY291bnQzLnNldChyLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgYXNzZXJ0VGhhdChsYXRjaC5hd2FpdCgxMDAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKSwgaXModHJ1ZSkpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNTAwLCBjb3VudDEuZ2V0KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDE1MCwgY291bnQyLmdldCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzNTAsIGNvdW50My5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0UXVldWUuaXNFbXB0eSgpLCBpcyh0cnVlKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0LmludGVycnVwdCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRTZXRRdWV1aW5nVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRTZXRRdWV1aW5nVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzBmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1Jlc3VsdFNldFF1ZXVpbmdUZXN0LmphdmEKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmV4Y2VwdGlvbi5FeGNlcHRpb25VdGlsczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmdyZWF0ZXJUaGFuOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCisvKioKKyAqIFRlc3RzIGZvciB0aGUgaW50ZXJuYWwgcXVldWluZyBmdW5jdGlvbmFsaXR5IG9mIHtAbGluayBSZXN1bHRTZXR9LgorICogCisgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCisgKi8KK3B1YmxpYyBjbGFzcyBSZXN1bHRTZXRRdWV1aW5nVGVzdCBleHRlbmRzIEFic3RyYWN0UmVzdWx0U2V0VGVzdCB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEdldFNpemVVbnRpbEVycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFRocmVhZCB0ID0gYWRkVG9RdWV1ZSgxMDAsIDEwLCB0cnVlLCBmYWxzZSwgMSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5nZXRBdmFpbGFibGVJdGVtQ291bnQoKSwgaXMoZ3JlYXRlclRoYW4oMCkpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmFsbEl0ZW1zQXZhaWxhYmxlKCksIGlzKGZhbHNlKSk7CisKKyAgICAgICAgICAgIGZpbmFsIEV4Y2VwdGlvbiB0aGVQcm9ibGVtID0gbmV3IEV4Y2VwdGlvbigpOworICAgICAgICAgICAgcmVzdWx0U2V0Lm1hcmtFcnJvcih0aGVQcm9ibGVtKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmFsbEl0ZW1zQXZhaWxhYmxlKCksIGlzKHRydWUpKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXN1bHRTZXQuZ2V0QXZhaWxhYmxlSXRlbUNvdW50KCk7CisgICAgICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGFuIGV4Y2VwdGlvbiIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRoZVByb2JsZW0sIGV4LmdldENhdXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdC5pbnRlcnJ1cHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQmVFbXB0eVRoZW5Ob3RFbXB0eSgpIHsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRTZXQuaXNFbXB0eSgpLCBpcyh0cnVlKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdCIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRTZXQuaXNFbXB0eSgpLCBpcyhmYWxzZSkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkTm90QmVFbXB0eVVudGlsRXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgVGhyZWFkIHQgPSBhZGRUb1F1ZXVlKDEwMCwgMTAsIHRydWUsIGZhbHNlLCAxKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmlzRW1wdHkoKSwgaXMoZmFsc2UpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmFsbEl0ZW1zQXZhaWxhYmxlKCksIGlzKGZhbHNlKSk7CisKKyAgICAgICAgICAgIGZpbmFsIEV4Y2VwdGlvbiB0aGVQcm9ibGVtID0gbmV3IEV4Y2VwdGlvbigpOworICAgICAgICAgICAgcmVzdWx0U2V0Lm1hcmtFcnJvcih0aGVQcm9ibGVtKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmFsbEl0ZW1zQXZhaWxhYmxlKCksIGlzKHRydWUpKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXN1bHRTZXQuaXNFbXB0eSgpOworICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh0aGVQcm9ibGVtLCBleC5nZXRDYXVzZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHQuaW50ZXJydXB0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZERyYWluVW50aWxFcnJvcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBUaHJlYWQgdCA9IGFkZFRvUXVldWUoMTAwLCAxMCwgdHJ1ZSwgZmFsc2UsIDEpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRTZXQuaXNFbXB0eSgpLCBpcyhmYWxzZSkpOworICAgICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IGRyYWluID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgICAgICByZXN1bHRTZXQuZHJhaW5UbyhkcmFpbik7CisgICAgICAgICAgICBhc3NlcnRUaGF0KGRyYWluLnNpemUoKSwgaXMoZ3JlYXRlclRoYW4oMCkpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmFsbEl0ZW1zQXZhaWxhYmxlKCksIGlzKGZhbHNlKSk7CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBzb21lIG1vcmUgaXRlbXMgZ2V0IGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0IGJlZm9yZSBhc3NlcnQKKyAgICAgICAgICAgIFRpbWVVbml0Lk1JTExJU0VDT05EUy5zbGVlcCgxMDApOworCisgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5pc0VtcHR5KCksIGlzKGZhbHNlKSk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyhmYWxzZSkpOworCisgICAgICAgICAgICBmaW5hbCBFeGNlcHRpb24gdGhlUHJvYmxlbSA9IG5ldyBFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJlc3VsdFNldC5tYXJrRXJyb3IodGhlUHJvYmxlbSk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyh0cnVlKSk7CisKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmVzdWx0U2V0LmRyYWluVG8obmV3IEFycmF5TGlzdDw+KCkpOworICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24iKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh0aGVQcm9ibGVtLCBleC5nZXRDYXVzZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHQuaW50ZXJydXB0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0RXZlcnl0aGluZ0FuZEZsdXNoT25NYXJrQ29tcGxldGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlID0gcmVzdWx0U2V0LnNvbWUoNCk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDMiKSk7CisKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKGZhbHNlKSk7CisgICAgICAgIHJlc3VsdFNldC5tYXJrQ29tcGxldGUoKTsKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKHRydWUpKTsKKworICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MSIsIHJlc3VsdHMuZ2V0KDApLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MiIsIHJlc3VsdHMuZ2V0KDEpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MyIsIHJlc3VsdHMuZ2V0KDIpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdHMuc2l6ZSgpKTsKKworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5pc0VtcHR5KCksIGlzKHRydWUpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0RmFpbFRoZUZ1dHVyZU9uTWFya0Vycm9yKCkgeworICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IHJlc3VsdFNldC5zb21lKDQpOworICAgICAgICByZXN1bHRTZXQuYWRkKG5ldyBSZXN1bHQoInRlc3QxIikpOworICAgICAgICByZXN1bHRTZXQuYWRkKG5ldyBSZXN1bHQoInRlc3QyIikpOworICAgICAgICByZXN1bHRTZXQuYWRkKG5ldyBSZXN1bHQoInRlc3QzIikpOworCisgICAgICAgIGFzc2VydFRoYXQoZnV0dXJlLmlzRG9uZSgpLCBpcyhmYWxzZSkpOworICAgICAgICByZXN1bHRTZXQubWFya0Vycm9yKG5ldyBFeGNlcHRpb24oIm5vIHdvcmt5IikpOworICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZS5pc0RvbmUoKSwgaXModHJ1ZSkpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmdXR1cmUuZ2V0KCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBFeGNlcHRpb25VdGlscy5nZXRSb290Q2F1c2UoZXgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJubyB3b3JreSIsIHQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQXdhaXRUb0V4cGVjdGVkVmFsdWVBbmREcmFpbk9uQWRkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlID0gcmVzdWx0U2V0LnNvbWUoMyk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7CisKKyAgICAgICAgLy8gc2hvdWxkbid0IGNvbXBsZXRlIHVudGlsIHRoZSB0aGlyZCBpdGVtIGlzIGluIHBsYXkKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKGZhbHNlKSk7CisKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0MyIpKTsKKworICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MSIsIHJlc3VsdHMuZ2V0KDApLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MiIsIHJlc3VsdHMuZ2V0KDEpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MyIsIHJlc3VsdHMuZ2V0KDIpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdHMuc2l6ZSgpKTsKKworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5pc0VtcHR5KCksIGlzKHRydWUpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0TXVsdGlwbGVUb0V4cGVjdGVkVmFsdWVBbmREcmFpbk9uQWRkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlMSA9IHJlc3VsdFNldC5zb21lKDMpOworICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZTIgPSByZXN1bHRTZXQuc29tZSgxKTsKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0MSIpKTsKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0MiIpKTsKKworICAgICAgICAvLyBzaG91bGRuJ3QgY29tcGxldGUgdGhlIGZpcnN0IGZ1dHVyZSB1bnRpbCB0aGUgdGhpcmQgaXRlbSBpcyBpbiBwbGF5CisgICAgICAgIGFzc2VydFRoYXQoZnV0dXJlMS5pc0RvbmUoKSwgaXMoZmFsc2UpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUyLmlzRG9uZSgpLCBpcyhmYWxzZSkpOworCisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDMiKSk7CisKKyAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMxID0gZnV0dXJlMS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MSIsIHJlc3VsdHMxLmdldCgwKS5nZXRTdHJpbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygidGVzdDIiLCByZXN1bHRzMS5nZXQoMSkuZ2V0U3RyaW5nKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QzIiwgcmVzdWx0czEuZ2V0KDIpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdHMxLnNpemUoKSk7CisgICAgICAgIGFzc2VydFRoYXQoZnV0dXJlMS5pc0RvbmUoKSwgaXModHJ1ZSkpOworICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZTIuaXNEb25lKCksIGlzKGZhbHNlKSk7CisKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0NCIpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUxLmlzRG9uZSgpLCBpcyh0cnVlKSk7CisgICAgICAgIGFzc2VydFRoYXQoZnV0dXJlMi5pc0RvbmUoKSwgaXModHJ1ZSkpOworCisgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzMiA9IGZ1dHVyZTIuZ2V0KCk7CisgICAgICAgIGFzc2VydEVxdWFscygidGVzdDQiLCByZXN1bHRzMi5nZXQoMCkuZ2V0U3RyaW5nKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzdWx0czIuc2l6ZSgpKTsKKworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5pc0VtcHR5KCksIGlzKHRydWUpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0VG9FeHBlY3RlZFZhbHVlQW5kRHJhaW5PbkF3YWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDMiKSk7CisKKyAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmUgPSByZXN1bHRTZXQuc29tZSgzKTsKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKHRydWUpKTsKKworICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MSIsIHJlc3VsdHMuZ2V0KDApLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MiIsIHJlc3VsdHMuZ2V0KDEpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MyIsIHJlc3VsdHMuZ2V0KDIpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdHMuc2l6ZSgpKTsKKworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5pc0VtcHR5KCksIGlzKHRydWUpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0VG9SZWFkQ29tcGxldGVkQW5kRHJhaW5PbkF3YWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDMiKSk7CisKKyAgICAgICAgcmVzdWx0U2V0Lm1hcmtDb21wbGV0ZSgpOworCisgICAgICAgIC8vIHlvdSBtaWdodCB3YW50IDMwIGJ1dCB0aGVyZSBhcmUgb25seSB0aHJlZQorICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IHJlc3VsdFNldC5zb21lKDMwKTsKKyAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKHRydWUpKTsKKworICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGZ1dHVyZS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MSIsIHJlc3VsdHMuZ2V0KDApLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MiIsIHJlc3VsdHMuZ2V0KDEpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MyIsIHJlc3VsdHMuZ2V0KDIpLmdldFN0cmluZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdHMuc2l6ZSgpKTsKKworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5pc0VtcHR5KCksIGlzKHRydWUpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZERyYWluQXNJdGVtc0Fycml2ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBUaHJlYWQgdCA9IGFkZFRvUXVldWUoMTAwMCwgMSwgdHJ1ZSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvdW50MSA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOworICAgICAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudDIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKKyAgICAgICAgICAgIGZpbmFsIEF0b21pY0ludGVnZXIgY291bnQzID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CisgICAgICAgICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgzKTsKKworICAgICAgICAgICAgcmVzdWx0U2V0LnNvbWUoNTAwKS50aGVuQWNjZXB0QXN5bmMociAtPiB7CisgICAgICAgICAgICAgICAgY291bnQxLnNldChyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmVzdWx0U2V0LnNvbWUoMTUwKS50aGVuQWNjZXB0QXN5bmMociAtPiB7CisgICAgICAgICAgICAgICAgY291bnQyLnNldChyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgcmVzdWx0U2V0LnNvbWUoMzUwKS50aGVuQWNjZXB0QXN5bmMociAtPiB7CisgICAgICAgICAgICAgICAgY291bnQzLnNldChyLnNpemUoKSk7CisgICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgYXNzZXJ0VGhhdChsYXRjaC5hd2FpdCgxMDAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKSwgaXModHJ1ZSkpOworCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNTAwLCBjb3VudDEuZ2V0KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDE1MCwgY291bnQyLmdldCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygzNTAsIGNvdW50My5nZXQoKSk7CisKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmlzRW1wdHkoKSwgaXModHJ1ZSkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgdC5pbnRlcnJ1cHQoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvUmVzdWx0U2V0VGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRTZXRUZXN0LmphdmEKaW5kZXggYTIwZjhlZi4uNGJmM2I4YyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRTZXRUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9SZXN1bHRTZXRUZXN0LmphdmEKQEAgLTE4LDE0ICsxOCwxMCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwpAQCAtNDEsMzEgKzM3LDEzIEBACiAvKioKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKICAqLwotcHVibGljIGNsYXNzIFJlc3VsdFNldFRlc3QgZXh0ZW5kcyBBYnN0cmFjdFJlc3VsdFF1ZXVlVGVzdCB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gQVRUUklCVVRFUyA9IG5ldyBIYXNoTWFwPFN0cmluZyxPYmplY3Q+KCkge3sKLSAgICAgICAgcHV0KCJ0aGlzIiwgInRoYXQiKTsKLSAgICB9fTsKLQotICAgIHByaXZhdGUgUmVzdWx0U2V0IHJlc3VsdFNldDsKLQotICAgIEBCZWZvcmUKLSAgICBwdWJsaWMgdm9pZCBzZXR1cFRoaXMoKSB7Ci0gICAgICAgIHJlc3VsdFNldCA9IG5ldyBSZXN1bHRTZXQocmVzdWx0UXVldWUsIHBvb2wsIHJlYWRDb21wbGV0ZWQsIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJ0cmF2ZXJzYWwiKS5jcmVhdGUoKSwgbnVsbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5FbXB0eU1hcEZvck5vUmVzcG9uc2VBdHRyaWJ1dGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPE1hcDxTdHJpbmcsT2JqZWN0Pj4gYXR0cnMgPSByZXN1bHRTZXQuc3RhdHVzQXR0cmlidXRlcygpOwotICAgICAgICByZWFkQ29tcGxldGVkLmNvbXBsZXRlKG51bGwpOwotICAgICAgICBhc3NlcnRUaGF0KGF0dHJzLmdldCgpLmlzRW1wdHkoKSwgaXModHJ1ZSkpOwotICAgIH0KK3B1YmxpYyBjbGFzcyBSZXN1bHRTZXRUZXN0IGV4dGVuZHMgQWJzdHJhY3RSZXN1bHRTZXRUZXN0IHsKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGF2ZUFsbEl0ZW1zQXZhaWxhYmxlQXN5bmNocm9ub3VzbHlPblJlYWRDb21wbGV0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGFsbCA9IHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZUFzeW5jKCk7CiAgICAgICAgIGFzc2VydFRoYXQoYWxsLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwotICAgICAgICByZWFkQ29tcGxldGVkLmNvbXBsZXRlKG51bGwpOworICAgICAgICByZXN1bHRTZXQubWFya0NvbXBsZXRlKCk7CiAgICAgICAgIC8vIGZsdXNoIGFsbCB0YXNrcyBpbiBwb29sCiAgICAgICAgIHBvb2wuYXdhaXRUZXJtaW5hdGlvbigyLCBUaW1lVW5pdC5TRUNPTkRTKTsKICAgICAgICAgYXNzZXJ0VGhhdChhbGwuaXNEb25lKCksIGlzKHRydWUpKTsKQEAgLTc1LDcgKzUzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYXZlQWxsSXRlbXNBdmFpbGFibGVBc3luY2hyb25vdXNseU9uUmVhZENvbXBsZXRlRXhjZXB0aW9uYWxseSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFZvaWQ+IGFsbCA9IHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZUFzeW5jKCk7CiAgICAgICAgIGFzc2VydFRoYXQoYWxsLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwotICAgICAgICByZWFkQ29tcGxldGVkLmNvbXBsZXRlRXhjZXB0aW9uYWxseShuZXcgUnVudGltZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmVzdWx0U2V0Lm1hcmtFcnJvcihuZXcgUnVudGltZUV4Y2VwdGlvbigpKTsKICAgICAgICAgLy8gZmx1c2ggYWxsIHRhc2tzIGluIHBvb2wKICAgICAgICAgcG9vbC5hd2FpdFRlcm1pbmF0aW9uKDIsIFRpbWVVbml0LlNFQ09ORFMpOwogICAgICAgICBhc3NlcnRUaGF0KGFsbC5pc0RvbmUoKSwgaXModHJ1ZSkpOwpAQCAtODMsMjggKzYxLDkgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVTdGF0dXNBdHRyaWJ1dGVzQ29tcGxldGVPblJlYWRDb21wbGV0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPE1hcDxTdHJpbmcsT2JqZWN0Pj4gYXR0cmJGdXQgPSByZXN1bHRTZXQuc3RhdHVzQXR0cmlidXRlcygpOwotICAgICAgICByZWFkQ29tcGxldGVkLmNvbXBsZXRlKG51bGwpOwotICAgICAgICAvLyBmbHVzaCBhbGwgdGFza3MgaW4gcG9vbAotICAgICAgICBwb29sLmF3YWl0VGVybWluYXRpb24oMiwgVGltZVVuaXQuU0VDT05EUyk7Ci0gICAgICAgIGFzc2VydFRoYXQoYXR0cmJGdXQuaXNEb25lKCksIGlzKHRydWUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVTdGF0dXNBdHRyaWJ1dGVzQ29tcGxldGVPblJlYWRDb21wbGV0ZUV4Y2VwdGlvbmFsbHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxNYXA8U3RyaW5nLE9iamVjdD4+IGF0dHJiRnV0ID0gcmVzdWx0U2V0LnN0YXR1c0F0dHJpYnV0ZXMoKTsKLSAgICAgICAgcmVhZENvbXBsZXRlZC5jb21wbGV0ZUV4Y2VwdGlvbmFsbHkobmV3IFJ1bnRpbWVFeGNlcHRpb24oKSk7Ci0gICAgICAgIC8vIGZsdXNoIGFsbCB0YXNrcyBpbiBwb29sCi0gICAgICAgIHBvb2wuYXdhaXRUZXJtaW5hdGlvbigyLCBUaW1lVW5pdC5TRUNPTkRTKTsKLSAgICAgICAgYXNzZXJ0VGhhdChhdHRyYkZ1dC5pc0RvbmUoKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGF0dHJiRnV0LmlzQ29tcGxldGVkRXhjZXB0aW9uYWxseSgpLCBpcyh0cnVlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYXZlQWxsSXRlbXNBdmFpbGFibGVPblJlYWRDb21wbGV0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0U2V0LmFsbEl0ZW1zQXZhaWxhYmxlKCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIHJlYWRDb21wbGV0ZWQuY29tcGxldGUobnVsbCk7CisgICAgICAgIHJlc3VsdFNldC5tYXJrQ29tcGxldGUoKTsKICAgICAgICAgLy8gZmx1c2ggYWxsIHRhc2tzIGluIHBvb2wKICAgICAgICAgcG9vbC5hd2FpdFRlcm1pbmF0aW9uKDIsIFRpbWVVbml0LlNFQ09ORFMpOwogICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyh0cnVlKSk7CkBAIC0xMTcsNyArNzYsNyBAQAogCiAgICAgICAgIGZpbmFsIEF0b21pY0Jvb2xlYW4gYXRMZWFzdE9uY2UgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7CiAgICAgICAgIGFkZFRvUXVldWUoMTAwMCwgMSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgIHdoaWxlICghcmVhZENvbXBsZXRlZC5pc0RvbmUoKSkgeworICAgICAgICB3aGlsZSAoIXJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZSgpKSB7CiAgICAgICAgICAgICBhdExlYXN0T25jZS5zZXQodHJ1ZSk7CiAgICAgICAgICAgICBpZiAoIWF0TGVhc3RPbmNlLmdldCgpKQogICAgICAgICAgICAgICAgIGFzc2VydFRoYXQoYWxsLmlzRG9uZSgpLCBpcyhmYWxzZSkpOwpAQCAtMTM2LDcgKzk1LDcgQEAKIAogICAgICAgICBmaW5hbCBBdG9taWNCb29sZWFuIGF0TGVhc3RPbmNlID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICBhZGRUb1F1ZXVlKDEwMDAsIDEsIHRydWUsIHRydWUpOwotICAgICAgICB3aGlsZSAoIXJlYWRDb21wbGV0ZWQuaXNEb25lKCkpIHsKKyAgICAgICAgd2hpbGUgKCFyZXN1bHRTZXQuYWxsSXRlbXNBdmFpbGFibGUoKSkgewogICAgICAgICAgICAgYXRMZWFzdE9uY2Uuc2V0KHRydWUpOwogICAgICAgICAgICAgaWYgKCFhdExlYXN0T25jZS5nZXQoKSkKICAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyhmYWxzZSkpOwpAQCAtMTQ5LDEyICsxMDgsMTIgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEF3YWl0RXZlcnl0aGluZ0FuZEZsdXNoT25NYXJrQ29tcGxldGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlID0gcmVzdWx0U2V0LnNvbWUoNCk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MSIpKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QyIikpOwotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDMiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDEiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7CisgICAgICAgIHJlc3VsdFNldC5hZGQobmV3IFJlc3VsdCgidGVzdDMiKSk7CiAKICAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLm1hcmtDb21wbGV0ZShBVFRSSUJVVEVTKTsKKyAgICAgICAgcmVzdWx0U2V0Lm1hcmtDb21wbGV0ZSgpOwogICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZS5pc0RvbmUoKSwgaXModHJ1ZSkpOwogCiAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gZnV0dXJlLmdldCgpOwpAQCAtMTY1LDE5ICsxMjQsMTcgQEAKIAogICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdFNldC5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyh0cnVlKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCByZXN1bHRTZXQuZ2V0QXZhaWxhYmxlSXRlbUNvdW50KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygidGhhdCIsIHJlc3VsdFF1ZXVlLmdldFN0YXR1c0F0dHJpYnV0ZXMoKS5nZXQoInRoaXMiKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRBbGxPbmx5T25Db21wbGV0ZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZSA9IHJlc3VsdFNldC5hbGwoKTsKLSAgICAgICAgcmVzdWx0UXVldWUuYWRkKG5ldyBSZXN1bHQoInRlc3QxIikpOwotICAgICAgICByZXN1bHRRdWV1ZS5hZGQobmV3IFJlc3VsdCgidGVzdDIiKSk7Ci0gICAgICAgIHJlc3VsdFF1ZXVlLmFkZChuZXcgUmVzdWx0KCJ0ZXN0MyIpKTsKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0MSIpKTsKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0MiIpKTsKKyAgICAgICAgcmVzdWx0U2V0LmFkZChuZXcgUmVzdWx0KCJ0ZXN0MyIpKTsKIAogICAgICAgICBhc3NlcnRUaGF0KGZ1dHVyZS5pc0RvbmUoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgcmVzdWx0UXVldWUubWFya0NvbXBsZXRlKEFUVFJJQlVURVMpOworICAgICAgICByZXN1bHRTZXQubWFya0NvbXBsZXRlKCk7CiAKICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMgPSBmdXR1cmUuZ2V0KCk7CiAgICAgICAgIGFzc2VydEVxdWFscygidGVzdDEiLCByZXN1bHRzLmdldCgwKS5nZXRTdHJpbmcoKSk7CkBAIC0xODgsOCArMTQ1LDYgQEAKICAgICAgICAgYXNzZXJ0VGhhdChmdXR1cmUuaXNEb25lKCksIGlzKHRydWUpKTsKICAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRTZXQuYWxsSXRlbXNBdmFpbGFibGUoKSwgaXModHJ1ZSkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMCwgcmVzdWx0U2V0LmdldEF2YWlsYWJsZUl0ZW1Db3VudCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoInRoYXQiLCByZXN1bHRRdWV1ZS5nZXRTdGF0dXNBdHRyaWJ1dGVzKCkuZ2V0KCJ0aGlzIikpOwogICAgIH0KIAogICAgIEBUZXN0CmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1NldHRpbmdzVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9TZXR0aW5nc1Rlc3QuamF2YQppbmRleCA0MTA5NjZmLi41MDQwNTQxIDEwMDY0NAotLS0gYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1NldHRpbmdzVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvU2V0dGluZ3NUZXN0LmphdmEKQEAgLTIxLDYgKzIxLDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQmFzZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb247CkBAIC0zOSwxNiArNDAsMTQgQEAKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgicG9ydCIsIDgwMDApOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJuaW9Qb29sU2l6ZSIsIDE2KTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgid29ya2VyUG9vbFNpemUiLCAzMik7Ci0gICAgICAgIGNvbmYuc2V0UHJvcGVydHkoInVzZXJuYW1lIiwgInVzZXIxIik7Ci0gICAgICAgIGNvbmYuc2V0UHJvcGVydHkoInBhc3N3b3JkIiwgInBhc3N3b3JkMSIpOwotICAgICAgICBjb25mLnNldFByb3BlcnR5KCJqYWFzRW50cnkiLCAiSmFhc0l0Iik7Ci0gICAgICAgIGNvbmYuc2V0UHJvcGVydHkoInByb3RvY29sIiwgInByb3RvY29sMCIpOworICAgICAgICBjb25mLnNldFByb3BlcnR5KCJhdXRoLnR5cGUiLCAiYmFzaWMiKTsKKyAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiYXV0aC51c2VybmFtZSIsICJ1c2VyMSIpOworICAgICAgICBjb25mLnNldFByb3BlcnR5KCJhdXRoLnBhc3N3b3JkIiwgInBhc3N3b3JkMSIpOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJob3N0cyIsIEFycmF5cy5hc0xpc3QoIjI1NS4wLjAuMSIsICIyNTUuMC4wLjIiLCAiMjU1LjAuMC4zIikpOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJzZXJpYWxpemVyLmNsYXNzTmFtZSIsICJteS5zZXJpYWxpemVycy5NeVNlcmlhbGl6ZXIiKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgic2VyaWFsaXplci5jb25maWcuYW55IiwgInRoaW5nIik7CiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCIsIGZhbHNlKTsKLSAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiZW5hYmxlQ29tcHJlc3Npb24iLCBmYWxzZSk7Ci0gICAgICAgIGNvbmYuc2V0UHJvcGVydHkoInJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyIsIHRydWUpOworICAgICAgICBjb25mLnNldFByb3BlcnR5KCJidWxrUmVzdWx0cyIsIHRydWUpOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJjb25uZWN0aW9uUG9vbC5lbmFibGVTc2wiLCB0cnVlKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wua2V5U3RvcmUiLCAic2VydmVyLmprcyIpOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJjb25uZWN0aW9uUG9vbC5rZXlTdG9yZVBhc3N3b3JkIiwgInBhc3N3b3JkMiIpOwpAQCAtNTksMzYgKzU4LDM0IEBACiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImNvbm5lY3Rpb25Qb29sLnNzbEVuYWJsZWRQcm90b2NvbHMiLCBBcnJheXMuYXNMaXN0KCJUTFN2MS4xIiwiVExTdjEuMiIpKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wuc3NsQ2lwaGVyU3VpdGVzIiwgQXJyYXlzLmFzTGlzdCgiVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IiwgIlRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQiKSk7CiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImNvbm5lY3Rpb25Qb29sLnNzbFNraXBDZXJ0VmFsaWRhdGlvbiIsIHRydWUpOwotICAgICAgICBjb25mLnNldFByb3BlcnR5KCJjb25uZWN0aW9uUG9vbC5taW5TaXplIiwgMTAwKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wubWF4U2l6ZSIsIDIwMCk7CiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImNvbm5lY3Rpb25Qb29sLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIsIDMwMCk7CiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImNvbm5lY3Rpb25Qb29sLm1heFNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbiIsIDQwMCk7CiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImNvbm5lY3Rpb25Qb29sLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24iLCA1MDApOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJjb25uZWN0aW9uUG9vbC5taW5JblByb2Nlc3NQZXJDb25uZWN0aW9uIiwgNjAwKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wubWF4V2FpdEZvckNvbm5lY3Rpb24iLCA3MDApOwotICAgICAgICBjb25mLnNldFByb3BlcnR5KCJjb25uZWN0aW9uUG9vbC5tYXhDb250ZW50TGVuZ3RoIiwgODAwKTsKKyAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoIiwgODAwKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wucmVjb25uZWN0SW50ZXJ2YWwiLCA5MDApOwogICAgICAgICBjb25mLnNldFByb3BlcnR5KCJjb25uZWN0aW9uUG9vbC5yZXN1bHRJdGVyYXRpb25CYXRjaFNpemUiLCAxMTAwKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wuY2hhbm5lbGl6ZXIiLCAiY2hhbm5lbGl6ZXIwIik7CiAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImNvbm5lY3Rpb25Qb29sLnZhbGlkYXRpb25SZXF1ZXN0IiwgImcuaW5qZWN0KCkiKTsKICAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcyIsIDE1MDAwKTsKKyAgICAgICAgY29uZi5zZXRQcm9wZXJ0eSgiY29ubmVjdGlvblBvb2wuaWRsZUNvbm5lY3Rpb25UaW1lb3V0IiwgMTYwMDAwKTsKIAogICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IFNldHRpbmdzLmZyb20oY29uZik7CiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDgwMDAsIHNldHRpbmdzLnBvcnQpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMTYsIHNldHRpbmdzLm5pb1Bvb2xTaXplKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDMyLCBzZXR0aW5ncy53b3JrZXJQb29sU2l6ZSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidXNlcjEiLCBzZXR0aW5ncy51c2VybmFtZSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGFzc3dvcmQxIiwgc2V0dGluZ3MucGFzc3dvcmQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkphYXNJdCIsIHNldHRpbmdzLmphYXNFbnRyeSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicHJvdG9jb2wwIiwgc2V0dGluZ3MucHJvdG9jb2wpOworICAgICAgICBhc3NlcnRFcXVhbHMoImJhc2ljIiwgc2V0dGluZ3MuYXV0aC50eXBlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1c2VyMSIsIHNldHRpbmdzLmF1dGgudXNlcm5hbWUpOworICAgICAgICBhc3NlcnRFcXVhbHMoInBhc3N3b3JkMSIsIHNldHRpbmdzLmF1dGgucGFzc3dvcmQpOwogICAgICAgICBhc3NlcnRFcXVhbHMoQXJyYXlzLmFzTGlzdCgiMjU1LjAuMC4xIiwgIjI1NS4wLjAuMiIsICIyNTUuMC4wLjMiKSwgc2V0dGluZ3MuaG9zdHMpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm15LnNlcmlhbGl6ZXJzLk15U2VyaWFsaXplciIsIHNldHRpbmdzLnNlcmlhbGl6ZXIuY2xhc3NOYW1lKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGluZyIsIHNldHRpbmdzLnNlcmlhbGl6ZXIuY29uZmlnLmdldCgiYW55IikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoZmFsc2UsIHNldHRpbmdzLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmYWxzZSwgc2V0dGluZ3MuZW5hYmxlQ29tcHJlc3Npb24pOworICAgICAgICBhc3NlcnRUcnVlKHNldHRpbmdzLmJ1bGtSZXN1bHRzKTsKICAgICAgICAgYXNzZXJ0VGhhdChzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5lbmFibGVTc2wsIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHRydWUsIHNldHRpbmdzLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyk7CiAgICAgICAgIGFzc2VydEVxdWFscygic2VydmVyLmprcyIsIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLmtleVN0b3JlKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwYXNzd29yZDIiLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5rZXlTdG9yZVBhc3N3b3JkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwa2NzMTIiLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5rZXlTdG9yZVR5cGUpOwpAQCAtOTgsMTggKzk1LDEzIEBACiAgICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KCJUTFN2MS4xIiwiVExTdjEuMiIpLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5zc2xFbmFibGVkUHJvdG9jb2xzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3QoIlRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCIsICJUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0IiksIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLnNzbENpcGhlclN1aXRlcyk7CiAgICAgICAgIGFzc2VydFRoYXQoc2V0dGluZ3MuY29ubmVjdGlvblBvb2wuc3NsU2tpcENlcnRWYWxpZGF0aW9uLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDAsIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLm1pblNpemUpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5tYXhTaXplKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMCwgc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWluU2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMCwgc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgc2V0dGluZ3MuY29ubmVjdGlvblBvb2wubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2MDAsIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLm1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24pOwogICAgICAgICBhc3NlcnRFcXVhbHMoNzAwLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5tYXhXYWl0Rm9yQ29ubmVjdGlvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg4MDAsIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLm1heENvbnRlbnRMZW5ndGgpOworICAgICAgICBhc3NlcnRFcXVhbHMoODAwLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5tYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgpOwogICAgICAgICBhc3NlcnRFcXVhbHMoOTAwLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5yZWNvbm5lY3RJbnRlcnZhbCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxNTAwMCwgc2V0dGluZ3MuY29ubmVjdGlvblBvb2wuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcyk7CisgICAgICAgIGFzc2VydEVxdWFscygxNjAwMDAsIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLmlkbGVDb25uZWN0aW9uVGltZW91dCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxMTAwLCBzZXR0aW5ncy5jb25uZWN0aW9uUG9vbC5yZXN1bHRJdGVyYXRpb25CYXRjaFNpemUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImNoYW5uZWxpemVyMCIsIHNldHRpbmdzLmNvbm5lY3Rpb25Qb29sLmNoYW5uZWxpemVyKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdCgpIiwgc2V0dGluZ3MuY29ubmVjdGlvblBvb2wudmFsaWRhdGlvblJlcXVlc3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvV2ViU29ja2V0Q2xpZW50QmVoYXZpb3JJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1dlYlNvY2tldENsaWVudEJlaGF2aW9ySW50ZWdyYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzcxZTYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvV2ViU29ja2V0Q2xpZW50QmVoYXZpb3JJbnRlZ3JhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MDEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXI7Ci0KLWltcG9ydCBubC5hbHRpbmRhZy5sb2cuTG9nQ2FwdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc29ja2V0LnNlcnZlci5TaW1wbGVTb2NrZXRTZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zb2NrZXQuc2VydmVyLlNvY2tldFNlcnZlclNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc29ja2V0LnNlcnZlci5UZXN0Q2hhbm5lbGl6ZXJzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc29ja2V0LnNlcnZlci5UZXN0V1NHcmVtbGluSW5pdGlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5SdWxlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydWxlcy5UZXN0TmFtZTsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkV4Y2VwdGlvbkhlbHBlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlU3lzdGVtczsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTb2NrZXRDbGllbnRCZWhhdmlvckludGVncmF0ZVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihXZWJTb2NrZXRDbGllbnRCZWhhdmlvckludGVncmF0ZVRlc3QuY2xhc3MpOwotCi0gICAgQFJ1bGUKLSAgICBwdWJsaWMgVGVzdE5hbWUgbmFtZSA9IG5ldyBUZXN0TmFtZSgpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTG9nQ2FwdG9yIGxvZ0NhcHRvcjsKLQotICAgIHByaXZhdGUgZmluYWwgU29ja2V0U2VydmVyU2V0dGluZ3Mgc2V0dGluZ3M7Ci0KLSAgICBwcml2YXRlIFNpbXBsZVNvY2tldFNlcnZlciBzZXJ2ZXI7Ci0KLSAgICBwdWJsaWMgV2ViU29ja2V0Q2xpZW50QmVoYXZpb3JJbnRlZ3JhdGVUZXN0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgc2V0dGluZ3MgPSBTb2NrZXRTZXJ2ZXJTZXR0aW5ncy5yZWFkKEZpbGVTeXN0ZW1zLmdldERlZmF1bHQoKS5nZXRQYXRoKCIuLiIsImdyZW1saW4tdG9vbHMiLCAiZ3JlbWxpbi1zb2NrZXQtc2VydmVyIiwgImNvbmYiLCAidGVzdC13cy1ncmVtbGluLnlhbWwiKSk7Ci0gICAgICAgIHNldHRpbmdzLlNFUklBTElaRVIgPSAiR3JhcGhTT05WMiI7Ci0gICAgfQotCi0gICAgQEJlZm9yZUNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwTG9nQ2FwdG9yKCkgewotICAgICAgICBsb2dDYXB0b3IgPSBMb2dDYXB0b3IuZm9yUm9vdCgpOwotICAgIH0KLQotICAgIEBBZnRlckNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duKCkgewotICAgICAgICBsb2dDYXB0b3IuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAQmVmb3JlCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBsb2dDYXB0b3IuY2xlYXJMb2dzKCk7Ci0KLSAgICAgICAgc2VydmVyID0gbmV3IFNpbXBsZVNvY2tldFNlcnZlcihzZXR0aW5ncyk7Ci0gICAgICAgIGlmIChuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZEF0dGVtcHRIYW5kc2hha2VGb3JMb25nZXJUaGFuRGVmYXVsdE5ldHR5U3NsSGFuZHNoYWtlVGltZW91dCIpIHx8Ci0gICAgICAgICAgICAgICAgbmFtZS5nZXRNZXRob2ROYW1lKCkuZXF1YWxzKCJzaG91bGRQcmludENvcnJlY3RFcnJvckZvclJlZ3VsYXJXZWJTb2NrZXRIYW5kc2hha2VUaW1lb3V0IikpIHsKLSAgICAgICAgICAgIHNlcnZlci5zdGFydChuZXcgVGVzdENoYW5uZWxpemVycy5UZXN0V1NOb09wSW5pdGlhbGl6ZXIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmFtZS5nZXRNZXRob2ROYW1lKCkuZXF1YWxzKCJzaG91bGRDb250aW51ZVJ1bm5pbmdSZW1haW5pbmdDb25uZWN0aW9uc0lmU2VydmVyVGhyb3R0bGVzTmV3Q29ubmVjdGlvbnMiKSB8fAotICAgICAgICAgICAgICAgIG5hbWUuZ2V0TWV0aG9kTmFtZSgpLmVxdWFscygic2hvdWxkUmV0dXJuQ29ycmVjdEV4Y2VwdGlvbklmU2VydmVyVGhyb3R0bGVzTmV3Q29ubmVjdGlvbnNBbmRNYXhXYWl0RXhjZWVkZWQiKSkgewotICAgICAgICAgICAgc2VydmVyLnN0YXJ0KG5ldyBUZXN0Q2hhbm5lbGl6ZXJzLlRlc3RDb25uZWN0aW9uVGhyb3R0bGluZ0luaXRpYWxpemVyKHNldHRpbmdzKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzZXJ2ZXIuc3RhcnQobmV3IFRlc3RXU0dyZW1saW5Jbml0aWFsaXplcihzZXR0aW5ncykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQEFmdGVyCi0gICAgcHVibGljIHZvaWQgc2h1dGRvd24oKSB7Ci0gICAgICAgIHNlcnZlci5zdG9wKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBjbGllbnQgaXMgY29ycmVjdGx5IHNlbmRpbmcgdXNlciBhZ2VudCBkdXJpbmcgd2ViIHNvY2tldCBoYW5kc2hha2UgYnkgaGF2aW5nIHRoZSBzZXJ2ZXIgcmV0dXJuCi0gICAgICogdGhlIGNhcHR1cmVkIHVzZXIgYWdlbnQuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRJbmNsdWRlVXNlckFnZW50SW5IYW5kc2hha2VSZXF1ZXN0KCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKS5wb3J0KHNldHRpbmdzLlBPUlQpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgLy8gdHJpZ2dlciB0aGUgdGVzdGluZyBzZXJ2ZXIgdG8gcmV0dXJuIGNhcHR1cmVkIHVzZXIgYWdlbnQKLSAgICAgICAgU3RyaW5nIHJldHVybmVkVXNlckFnZW50ID0gY2xpZW50LnN1Ym1pdCgiMSIsIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChzZXR0aW5ncy5VU0VSX0FHRU5UX1JFUVVFU1RfSUQpLmNyZWF0ZSgpKS5vbmUoKS5nZXRTdHJpbmcoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFVzZXJBZ2VudC5VU0VSX0FHRU5ULCByZXR1cm5lZFVzZXJBZ2VudCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBubyB1c2VyIGFnZW50IGlzIHNlbnQgdG8gc2VydmVyIHdoZW4gdGhhdCBiZWhhdmlvdXIgaXMgZGlzYWJsZWQuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RJbmNsdWRlVXNlckFnZW50SW5IYW5kc2hha2VSZXF1ZXN0SWZEaXNhYmxlZCgpIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpCi0gICAgICAgICAgICAgICAgLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdChmYWxzZSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgLy8gdHJpZ2dlciB0aGUgdGVzdGluZyBzZXJ2ZXIgdG8gcmV0dXJuIGNhcHR1cmVkIHVzZXIgYWdlbnQKLSAgICAgICAgU3RyaW5nIHJldHVybmVkVXNlckFnZW50ID0gY2xpZW50LnN1Ym1pdCgiMSIsIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAub3ZlcnJpZGVSZXF1ZXN0SWQoc2V0dGluZ3MuVVNFUl9BR0VOVF9SRVFVRVNUX0lEKS5jcmVhdGUoKSkub25lKCkuZ2V0U3RyaW5nKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIiwgcmV0dXJuZWRVc2VyQWdlbnQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3RzIHRoYXQgY2xpZW50IGlzIGNvcnJlY3RseSByZXF1ZXN0aW5nIHBlcm1lc3NhZ2UgZGVmbGF0ZSBjb21wcmVzc2lvbiBpcyB1c2VkCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXF1ZXN0Q29tcHJlc3Npb25CeURlZmF1bHQoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLnBvcnQoc2V0dGluZ3MuUE9SVCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YyKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0ZXN0aW5nIHNlcnZlciB0byByZXR1cm4gY2FwdHVyZWQgc2VjLXdlYnNvY2tldC1leHRlbnNpb25zIGhlYWRlcgotICAgICAgICBTdHJpbmcgcmV0dXJuZWRXc0V4dGVuc2lvbnMgPSBjbGllbnQuc3VibWl0KCIxIiwgUmVxdWVzdE9wdGlvbnMuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChzZXR0aW5ncy5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlMpLmNyZWF0ZSgpKS5vbmUoKS5nZXRTdHJpbmcoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXR1cm5lZFdzRXh0ZW5zaW9ucy5jb250YWlucygicGVybWVzc2FnZS1kZWZsYXRlIikpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3RzIHRoYXQgY2xpZW50IGlzIGNvcnJlY3RseSByZXF1ZXN0aW5nIHBlcm1lc3NhZ2UgZGVmbGF0ZSBjb21wcmVzc2lvbiBpcyB1c2VkCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXF1ZXN0Q29tcHJlc3Npb25XaGVuRW5hYmxlZCgpIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpCi0gICAgICAgICAgICAgICAgLmVuYWJsZUNvbXByZXNzaW9uKHRydWUpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIC8vIHRyaWdnZXIgdGhlIHRlc3Rpbmcgc2VydmVyIHRvIHJldHVybiBjYXB0dXJlZCBzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMgaGVhZGVyCi0gICAgICAgIFN0cmluZyByZXR1cm5lZFdzRXh0ZW5zaW9ucyA9IGNsaWVudC5zdWJtaXQoIjEiLCBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKHNldHRpbmdzLlNFQ19XRUJTT0NLRVRfRVhURU5TSU9OUykuY3JlYXRlKCkpLm9uZSgpLmdldFN0cmluZygpOwotICAgICAgICBhc3NlcnRUcnVlKHJldHVybmVkV3NFeHRlbnNpb25zLmNvbnRhaW5zKCJwZXJtZXNzYWdlLWRlZmxhdGUiKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBubyB1c2VyIGFnZW50IGlzIHNlbnQgdG8gc2VydmVyIHdoZW4gdGhhdCBiZWhhdmlvdXIgaXMgZGlzYWJsZWQuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RSZXF1ZXN0Q29tcHJlc3Npb25XaGVuRGlzYWJsZWQoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLnBvcnQoc2V0dGluZ3MuUE9SVCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YyKQotICAgICAgICAgICAgICAgIC5lbmFibGVDb21wcmVzc2lvbihmYWxzZSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgLy8gdHJpZ2dlciB0aGUgdGVzdGluZyBzZXJ2ZXIgdG8gcmV0dXJuIGNhcHR1cmVkIHNlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucyBoZWFkZXIKLSAgICAgICAgU3RyaW5nIHJldHVybmVkV3NFeHRlbnNpb25zID0gY2xpZW50LnN1Ym1pdCgiMSIsIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAub3ZlcnJpZGVSZXF1ZXN0SWQoc2V0dGluZ3MuU0VDX1dFQlNPQ0tFVF9FWFRFTlNJT05TKS5jcmVhdGUoKSkub25lKCkuZ2V0U3RyaW5nKCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHJldHVybmVkV3NFeHRlbnNpb25zLmNvbnRhaW5zKCJwZXJtZXNzYWdlLWRlZmxhdGUiKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIGRlYWRsb2NrIHNpdHVhdGlvbiB3aGVuIGluaXRpYWxpemluZyBhIHtAbGluayBDbGllbnR9IG9iamVjdCBpbiBzZXNzaW9ubGVzcyBmb3JtIHRoYXQgbGVhZHMgdG8KLSAgICAgKiBoYW5naW5nIGJlaGF2aW9yIGluIGxvdyByZXNvdXJjZSBlbnZpcm9ubWVudHMgKFRJTktFUlBPUC0yNTA0KSBhbmQgZm9yIGNlcnRhaW4gY29uZmlndXJhdGlvbnMgb2YgdGhlCi0gICAgICoge0BsaW5rIENsdXN0ZXJ9IG9iamVjdCB3aGVyZSB0aGVyZSBhcmUgc2ltcGx5IG5vdCBlbm91Z2ggdGhyZWFkcyB0byBwcm9wZXJseSBhbGxvdyB0aGUge0BsaW5rIEhvc3R9IGFuZCBpdHMKLSAgICAgKiByZWxhdGVkIHtAbGluayBDb25uZWN0aW9uUG9vbH0gb2JqZWN0cyB0byBzcGluIHVwIHByb3Blcmx5IC0gc2VlIFRJTktFUlBPUC0yNTUwLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90RGVhZGxvY2tPbkluaXRpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGl0IHNlZW1zIHlvdSBjYW4gYWRkIHRoZSBzYW1lIGhvc3QgbW9yZSB0aGFuIG9uY2Ugc28gd2hpbGUga2luZGEgd2VpcmQgaXQgaXMgaGVscGZ1bCBpbiBmYWl0aGZ1bGx5Ci0gICAgICAgIC8vIHJlY3JlYXRpbmcgdGhlIGRlYWRsb2NrIHNpdHVhdGlvbiwgdGhvdWdoIGl0IGNhbi93aWxsIGhhcHBlbiB3aXRoIGp1c3Qgb25lIGhvc3QuIHdvcmtlclBvb2xTaXplIGF0Ci0gICAgICAgIC8vICIxIiBhbHNvIGhlbHBzIGZhaXRoZnVsbHkgcmVwcm9kdWNlIHRoZSBwcm9ibGVtIHRob3VnaCBpdCBjYW4gaGFwcGVuIGF0IGxhcmdlciBwb29sIHNpemVzIGRlcGVuZGluZwotICAgICAgICAvLyBvbiB0aGUgdGltaW5nL2ludGVybGVhdmluZyBvZiB0YXNrcy4gdGhlIGxhcmdlciBjb25uZWN0aW9uIHBvb2wgc2l6ZXMgbWF5IG5vdCBiZSByZXF1aXJlZCBnaXZlbiB0aGUKLSAgICAgICAgLy8gb3RoZXIgc2V0dGluZ3MgYXQgcGxheSBidXQgYWdhaW4sIGp1c3QgdHJ5aW5nIHRvIG1ha2Ugc3VyZSB0aGUgZGVhZGxvY2sgc3RhdGUgaXMgY29uc2lzdGVudGx5IHByb2R1Y2VkCi0gICAgICAgIC8vIGFuZCBhIGxhcmdlciBwb29sIHNpemUgd2lsbCBtZWFuIG1vcmUgdGltZSB0byBlbGFwc2Ugc2NoZWR1bGluZyBjb25uZWN0aW9uIGNyZWF0aW9uIHRhc2tzIHdoaWNoIG1heQotICAgICAgICAvLyBmdXJ0aGVyIGltcHJvdmUgY2hhbmNlcyBvZiBzY2hlZHVsaW5nIGNvbmZsaWN0cyB0aGF0IHByb2R1Y2UgdGhlIGRlYWRsb2NrLgotICAgICAgICAvLwotICAgICAgICAvLyB0byBmb3JjZSB0aGlzIHRlc3QgdG8gYSBmYWlsIHN0YXRlLCBjaGFuZ2UgQ2x1c3RlcmVkQ2xpZW50LmluaXRpYWxpemVJbXBsZW1lbnRhdGlvbigpIHRvIHVzZSB0aGUKLSAgICAgICAgLy8gc3RhbmRhcmQgQ2x1c3Rlci5leGVjdXRvciByYXRoZXIgdGhhbiB0aGUgaG9zdEV4ZWN1dG9yICh3aGljaCBpcyBhIHNpbmdsZSB0aHJlYWRlZCBpbmRlcGVuZGVudCB0aHJlYWQKLSAgICAgICAgLy8gcG9vbCB1c2VkIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGluaXRpYWxpemluZyB0aGUgaG9zdHMpLgotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKS4KLSAgICAgICAgICAgICAgICBhZGRDb250YWN0UG9pbnQoImxvY2FsaG9zdCIpLgotICAgICAgICAgICAgICAgIGFkZENvbnRhY3RQb2ludCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKS4KLSAgICAgICAgICAgICAgICB3b3JrZXJQb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICBtaW5Db25uZWN0aW9uUG9vbFNpemUoMzIpLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgzMikuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQXRvbWljQm9vbGVhbiBmYWlsZWQgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7Ci0gICAgICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwotICAgICAgICBleGVjdXRvci5zdWJtaXQoKCkgLT4gewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0ZXN0IHdpbGwgaGFuZyBpbiBpbml0KCkgd2hlcmUgdGhlIEhvc3QgYW5kIENvbm5lY3Rpb25Qb29sIGFyZSBzdGFydGVkIHVwCi0gICAgICAgICAgICAgICAgY2xpZW50LmluaXQoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIC8vIHNob3VsZCBub3QgImZhaWwiIC0ganVzdCBoYW5nIGFuZCB0aGVuIHRpbWVvdXQgZHVyaW5nIHRoZSBleGVjdXRvciBzaHV0ZG93biBhcyB0aGVyZSBpcwotICAgICAgICAgICAgICAgIC8vIGEgZGVhZGxvY2sgc3RhdGUsIGJ1dCB3ZSBoYXZlIHRoaXMgaGVyZSBqdXN0IGluIGNhc2UuIGEgZmFpbGVkIGFzc2VydGlvbiBvZiB0aGlzIHZhbHVlCi0gICAgICAgICAgICAgICAgLy8gYmVsb3cgY291bGQgYmUgaW50ZXJlc3RpbmcKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNsaWVudCBpbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBleGNlcHRpb24gd2hpY2ggd2FzIHVuZXhwZWN0ZWQiLCBleCk7Ci0gICAgICAgICAgICAgICAgZmFpbGVkLnNldCh0cnVlKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBleGVjdXRvci5zaHV0ZG93bigpOwotCi0gICAgICAgIC8vIDMwIHNlY29uZHMgc2hvdWxkIGJlIGFtcGxlIHRpbWUsIGV2ZW4gZm9yIHRyYXZpcy4gdGhlIGRlYWRsb2NrIHN0YXRlIGhhcHBlbnMgcXVpdGUgaW1tZWRpYXRlbHkgaW4KLSAgICAgICAgLy8gdGVzdGluZyBhbmQgaW4gbW9zdCBzaXR1YXRpb25zIHRoaXMgdGVzdCBzaG91bGQgemlwIGJ5IGluIHN1YnNlY29uZCBwYWNlCi0gICAgICAgIGFzc2VydFRoYXQoZXhlY3V0b3IuYXdhaXRUZXJtaW5hdGlvbigzMCwgVGltZVVuaXQuU0VDT05EUyksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChmYWlsZWQuZ2V0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdCBhIHNjZW5hcmlvIHdoZW4gc2VydmVyIGNsb3NlcyBhIGNvbm5lY3Rpb24gd2hpY2ggZG9lcyBub3QgaGF2ZSBhbnkgYWN0aXZlIHJlcXVlc3RzLiBTdWNoIGNvbm5lY3Rpb24KLSAgICAgKiBzaG91bGQgYmUgZGVzdHJveWVkIGFuZCByZXBsYWNlZCBieSBhbm90aGVyIGNvbm5lY3Rpb24gb24gbmV4dCByZXF1ZXN0LgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVtb3ZlQ29ubmVjdGlvbkZyb21Qb29sV2hlblNlcnZlckNsb3NlX1dpdGhOb1BlbmRpbmdSZXF1ZXN0cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLnBvcnQoc2V0dGluZ3MuUE9SVCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YyKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBjbGllbnQgcHJlZW1wdGl2ZWx5Ci0gICAgICAgIGNsaWVudC5pbml0KCk7Ci0KLSAgICAgICAgLy8gYXNzZXJ0IG51bWJlciBvZiBjb25uZWN0aW9ucyBvcGVuZWQKLSAgICAgICAgZmluYWwgQ29ubmVjdGlvblBvb2wgY2hhbm5lbFBvb2wgPSBjbGllbnQuaG9zdENvbm5lY3Rpb25Qb29scy52YWx1ZXMoKS5zdHJlYW0oKS5maW5kRmlyc3QoKS5nZXQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNoYW5uZWxQb29sLmdldENvbm5lY3Rpb25JRHMoKS5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBvcmlnaW5hbENvbm5lY3Rpb25JRCA9IGNoYW5uZWxQb29sLmdldENvbm5lY3Rpb25JRHMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgbG9nZ2VyLmluZm8oIk9uIGNsaWVudCBpbml0IENvbm5lY3Rpb25JRHM6ICIgKyBjaGFubmVsUG9vbC5nZXRDb25uZWN0aW9uSURzKCkpOwotCi0gICAgICAgIC8vIHRyaWdnZXIgdGhlIHRlc3Rpbmcgc2VydmVyIHRvIHNlbmQgYSBXUyBjbG9zZSBmcmFtZQotICAgICAgICBWZXJ0ZXggdiA9IGNsaWVudC5zdWJtaXQoIjEiLCBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKHNldHRpbmdzLlNJTkdMRV9WRVJURVhfREVMQVlFRF9DTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSUQpLmNyZWF0ZSgpKQotICAgICAgICAgICAgICAgIC5vbmUoKS5nZXRWZXJ0ZXgoKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKHYpOwotCi0gICAgICAgIC8vIGFzc2VydCBjb25uZWN0aW9uIGlzIG5vdCBjbG9zZWQgeWV0Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjaGFubmVsUG9vbC5nZXRDb25uZWN0aW9uSURzKCkuc2l6ZSgpKTsKLQotICAgICAgICAvLyB3YWl0IGZvciBzZXJ2ZXIgdG8gc2VuZCB0aGUgY2xvc2UgV1MgZnJhbWUKLSAgICAgICAgVGhyZWFkLnNsZWVwKDYwMDApOwotCi0gICAgICAgIC8vIGFzc2VydCB0aGF0IG9yaWdpbmFsIGNvbm5lY3Rpb24gaXMgbm90IHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gcG9vbCBhbnkgbW9yZQotICAgICAgICBhc3NlcnRUaGF0KCJUaGUgb3JpZ2luYWwgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNsb3NlZCBieSB0aGUgc2VydmVyLiIsCi0gICAgICAgICAgICAgICAgY2hhbm5lbFBvb2wuZ2V0Q29ubmVjdGlvbklEcygpLmNvbnRhaW5zKG9yaWdpbmFsQ29ubmVjdGlvbklEKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAvLyBhc3NlcnQgc2FuaXR5IGFmdGVyIGNvbm5lY3Rpb24gcmVwbGFjZW1lbnQKLSAgICAgICAgdiA9IGNsaWVudC5zdWJtaXQoIjEiLAotICAgICAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkub3ZlcnJpZGVSZXF1ZXN0SWQoc2V0dGluZ3MuU0lOR0xFX1ZFUlRFWF9SRVFVRVNUX0lEKS5jcmVhdGUoKSkKLSAgICAgICAgICAgICAgICAub25lKCkuZ2V0VmVydGV4KCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwodik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgYSBzY2VuYXJpbyB3aGVuIHRoZSBjb25uZWN0aW9uIGEgZmF1bHR5IGNvbm5lY3Rpb24gcmVwbGFjZWQgYnkgYSBuZXcgY29ubmVjdGlvbi4KLSAgICAgKiBFbnN1cmVzIHRoYXQgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHJlcGxhY2VtZW50IGNoYW5uZWwgb25seSBoYXBwZW5zIG9uY2UuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZW1vdmVDb25uZWN0aW9uRnJvbVBvb2xXaGVuU2VydmVyQ2xvc2VfV2l0aFBlbmRpbmdSZXF1ZXN0cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY2xpZW50IHByZWVtcHRpdmVseQotICAgICAgICBjbGllbnQuaW5pdCgpOwotCi0gICAgICAgIC8vIGFzc2VydCBudW1iZXIgb2YgY29ubmVjdGlvbnMgb3BlbmVkCi0gICAgICAgIGZpbmFsIENvbm5lY3Rpb25Qb29sIGNoYW5uZWxQb29sID0gY2xpZW50Lmhvc3RDb25uZWN0aW9uUG9vbHMudmFsdWVzKCkuc3RyZWFtKCkuZmluZEZpcnN0KCkuZ2V0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjaGFubmVsUG9vbC5nZXRDb25uZWN0aW9uSURzKCkuc2l6ZSgpKTsKLQotICAgICAgICAvLyBTZW5kIHR3byByZXF1ZXN0cyBpbiBmbGlnaHQuIEJvdGggc2hvdWxkIGVycm9yIG91dC4KLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiByZXExID0gY2xpZW50LnN1Ym1pdEFzeW5jKCIxIiwgUmVxdWVzdE9wdGlvbnMuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChzZXR0aW5ncy5DTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSUQpLmNyZWF0ZSgpKTsKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiByZXEyID0gY2xpZW50LnN1Ym1pdEFzeW5jKCIxIiwgUmVxdWVzdE9wdGlvbnMuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChzZXR0aW5ncy5DTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSURfMikuY3JlYXRlKCkpOwotCi0KLSAgICAgICAgLy8gYXNzZXJ0IGJvdGggYXJlIHNlbnQgb24gc2FtZSBjb25uZWN0aW9uCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBjaGFubmVsUG9vbC5nZXRDb25uZWN0aW9uSURzKCkuc2l6ZSgpKTsKLQotICAgICAgICAvLyB0cmlnZ2VyIHdyaXRlIGZvciBib3RoIHJlcXVlc3RzCi0gICAgICAgIHJlcTEuZ2V0KCk7Ci0gICAgICAgIHJlcTIuZ2V0KCk7Ci0KLSAgICAgICAgLy8gd2FpdCBmb3IgY2xvc2UgbWVzc2FnZSB0byBhcnJpdmUgZnJvbSBzZXJ2ZXIKLSAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDApOwotCi0gICAgICAgIC8vIEFzc2VydCB0aGF0IHdlIHNob3VsZCBjb25zaWRlciBjcmVhdGluZyBhIGNvbm5lY3Rpb24gb25seSBvbmNlLCBzaW5jZSBvbmx5IG9uZSBjb25uZWN0aW9uIGlzIGJlaW5nIGNsb3NlZC4KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuZmlsdGVyKHN0ciAtPiBzdHIuY29udGFpbnMoIkNvbnNpZGVyaW5nIG5ldyBjb25uZWN0aW9uIG9uIikpLmNvdW50KCkpOwotCi0gICAgICAgIC8vIGFzc2VydCBzYW5pdHkgYWZ0ZXIgY29ubmVjdGlvbiByZXBsYWNlbWVudAotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGNsaWVudC5zdWJtaXQoIjEiLAotICAgICAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkub3ZlcnJpZGVSZXF1ZXN0SWQoc2V0dGluZ3MuU0lOR0xFX1ZFUlRFWF9SRVFVRVNUX0lEKS5jcmVhdGUoKSkKLSAgICAgICAgICAgICAgICAub25lKCkuZ2V0VmVydGV4KCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwodik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhlIHNjZW5hcmlvIHdoZW4gY2xpZW50IGludGVudGlvbmFsbHkgY2xvc2VzIHRoZSBjb25uZWN0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZQotICAgICAqIGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSByZWN5Y2xlZC4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdENyZWF0ZVJlcGxhY2VtZW50Q29ubmVjdGlvbldoZW5DbGllbnRDbG9zZXNDb25uZWN0aW9uKCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKS5wb3J0KHNldHRpbmdzLlBPUlQpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgY2xpZW50IHByZWVtcHRpdmVseQotICAgICAgICBjbGllbnQuaW5pdCgpOwotCi0gICAgICAgIC8vIENsZWFyaW5nIGxvZ0NhcHRvciBiZWZvcmUgYXR0ZW1wdGluZyB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBpcyBpbiByZXNwb25zZSB0byBhbiBpc3N1ZSB3aGVyZSB0aGlzIHRlc3QgY2FuCi0gICAgICAgIC8vIGJlIHBvbGx1dGVkIGJ5IGxvZ3MgZnJvbSBhIHByZXZpb3VzIHRlc3Qgd2hlbiBydW5uaW5nIG9uIHNsb3cgaGFyZHdhcmUuCi0gICAgICAgIGxvZ0NhcHRvci5jbGVhckxvZ3MoKTsKLQotICAgICAgICAvLyBhc3NlcnQgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG9wZW5lZAotICAgICAgICBmaW5hbCBDb25uZWN0aW9uUG9vbCBjaGFubmVsUG9vbCA9IGNsaWVudC5ob3N0Q29ubmVjdGlvblBvb2xzLnZhbHVlcygpLnN0cmVhbSgpLmZpbmRGaXJzdCgpLmdldCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY2hhbm5lbFBvb2wuZ2V0Q29ubmVjdGlvbklEcygpLnNpemUoKSk7Ci0KLSAgICAgICAgLy8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gcG9vbCBpbiBhbiBhdXRoZW50aWMgbWFubmVyCi0gICAgICAgIGNoYW5uZWxQb29sLmNsb3NlQXN5bmMoKS5nZXQoKTsKLQotICAgICAgICAvLyB3YWl0IGZvciBjaGFubmVsIGNsb3N1cmUgY2FsbGJhY2sgdG8gdHJpZ2dlcgotICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJPbkNsb3NlIGNhbGxiYWNrIHNob3VsZCBiZSBjYWxsZWQgYnV0IG9ubHkgb25jZSIsIDEsCi0gICAgICAgICAgICAgICAgbG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5maWx0ZXIoc3RyIC0+IHN0ci5jb250YWlucygiT25DaGFubmVsQ2xvc2UgY2FsbGJhY2sgY2FsbGVkIGZvciBjaGFubmVsIikpLmNvdW50KCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygiTm8gbmV3IGNvbm5lY3Rpb24gY3JlYXRpb24gc2hvdWxkIGJlIHN0YXJ0ZWQiLCAwLAotICAgICAgICAgICAgICAgIGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuZmlsdGVyKHN0ciAtPiBzdHIuY29udGFpbnMoIkNvbnNpZGVyaW5nIG5ldyBjb25uZWN0aW9uIG9uIikpLmNvdW50KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIChUSU5LRVJQT1AtMjgxNCkgVGVzdHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIFNTTCBoYW5kc2hha2UgaXMgbm93IGNhcHBlZCBieSBjb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzIGFuZCBub3QKLSAgICAgKiB0aGUgZGVmYXVsdCBOZXR0eSBTU0wgaGFuZHNoYWtlIHRpbWVvdXQgb2YgMTAsMDAwbXMuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBdHRlbXB0SGFuZHNoYWtlRm9yTG9uZ2VyVGhhbkRlZmF1bHROZXR0eVNzbEhhbmRzaGFrZVRpbWVvdXQoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLnBvcnQoc2V0dGluZ3MuUE9SVCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5jb25uZWN0aW9uU2V0dXBUaW1lb3V0TWlsbGlzKDIwMDAwKSAvLyBuZWVkcyB0byBiZSBsYXJnZXIgdGhhbiAxMDAwMG1zLgotICAgICAgICAgICAgICAgIC5lbmFibGVTc2wodHJ1ZSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgZmluYWwgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCi0gICAgICAgIEV4Y2VwdGlvbiBjYXVnaHQgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgY2F1Z2h0ID0gZTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIC8vIFRlc3QgYWdhaW5zdCAxNTAwMG1zIHdoaWNoIHNob3VsZCBnaXZlIGEgYmlnIGVub3VnaCBidWZmZXIgdG8gYXZvaWQgdGltaW5nIGlzc3Vlcy4KLSAgICAgICAgICAgIGFzc2VydFRydWUoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCA+IDE1MDAwKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoY2F1Z2h0ICE9IG51bGwpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjYXVnaHQgaW5zdGFuY2VvZiBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24pOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKHN0ciAtPiBzdHIuY29udGFpbnMoIlNTTCBoYW5kc2hha2Ugbm90IGNvbXBsZXRlZCIpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSBpcyBsb2dnZWQgd2hlbiBhIG5vbi1TU0wgY29ubmVjdGlvbiBhdHRlbXB0IHRpbWVzIG91dC4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFByaW50Q29ycmVjdEVycm9yRm9yUmVndWxhcldlYlNvY2tldEhhbmRzaGFrZVRpbWVvdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKS5wb3J0KHNldHRpbmdzLlBPUlQpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcygxMjApCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgRXhjZXB0aW9uIGNhdWdodCA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCIxIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBjYXVnaHQgPSBlOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjYXVnaHQgIT0gbnVsbCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGNhdWdodCBpbnN0YW5jZW9mIE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbik7Ci0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTUwKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChzdHIgLT4gc3RyLmNvbnRhaW5zKCJXZWJTb2NrZXQgaGFuZHNoYWtlIG5vdCBjb21wbGV0ZWQiKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3RzIHRoYXQgaWYgYSBzZXJ2ZXIgdGhyb3R0bGVzIG5ldyBjb25uZWN0aW9ucyAoZG9lc24ndCBhbGxvdyBuZXcgY29ubmVjdGlvbnMgdG8gYmUgbWFkZSkgdGhlbiBhbGwgcmVxdWVzdHMKLSAgICAgKiB3aWxsIHJ1biBhbmQgY29tcGxldGUgb24gdGhlIGNvbm5lY3Rpb25zIHRoYXQgYXJlIGFscmVhZHkgb3Blbi4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbnRpbnVlUnVubmluZ1JlbWFpbmluZ0Nvbm5lY3Rpb25zSWZTZXJ2ZXJUaHJvdHRsZXNOZXdDb25uZWN0aW9ucygpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKDUpCi0gICAgICAgICAgICAgICAgLm1heFdhaXRGb3JDb25uZWN0aW9uKDE1MDAwKSAvLyBsYXJnZSB2YWx1ZSBlbnN1cmVzIHRoYXQgcmVxdWVzdCB3aWxsIGV2ZW50dWFsbHkgZmluZCBhIGNvbm5lY3Rpb24uCi0gICAgICAgICAgICAgICAgLmNvbm5lY3Rpb25TZXR1cFRpbWVvdXRNaWxsaXMoMTAwMCkKLSAgICAgICAgICAgICAgICAubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigwKQotICAgICAgICAgICAgICAgIC5tYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbigwKQotICAgICAgICAgICAgICAgIC5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oMSkKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICBmaW5hbCBMaXN0PENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4+KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1bHRzLmFkZChjbGllbnQuc3VibWl0QXN5bmMoIjUwMCIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiByZXN1bHQgOiByZXN1bHRzKSB7Ci0gICAgICAgICAgICBhc3NlcnROb3ROdWxsKHJlc3VsdC5nZXQoNjAwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUykub25lKCkuZ2V0VmVydGV4KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3RzIHRoYXQgaWYgYSBzZXJ2ZXIgdGhyb3R0bGVzIG5ldyBjb25uZWN0aW9ucyAoZG9lc24ndCBhbGxvdyBuZXcgY29ubmVjdGlvbnMgdG8gYmUgbWFkZSkgdGhlbiBhbnkgcmVxdWVzdAotICAgICAqIHRoYXQgY2FuJ3QgZmluZCBhIGNvbm5lY3Rpb24gd2l0aGluIGl0cyBtYXhXYWl0Rm9yQ29ubmVjdGlvbiB3aWxsIHJldHVybiBhbiBpbmZvcm1hdGl2ZSBleGNlcHRpb24gcmVnYXJkaW5nCi0gICAgICogdGhlIGluYWJpbGl0eSB0byBvcGVuIG5ldyBjb25uZWN0aW9ucy4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybkNvcnJlY3RFeGNlcHRpb25JZlNlcnZlclRocm90dGxlc05ld0Nvbm5lY3Rpb25zQW5kTWF4V2FpdEV4Y2VlZGVkKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBDbHVzdGVyLmJ1aWxkKCJsb2NhbGhvc3QiKS5wb3J0KHNldHRpbmdzLlBPUlQpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKQotICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoNSkKLSAgICAgICAgICAgICAgICAubWF4V2FpdEZvckNvbm5lY3Rpb24oMjUwKSAvLyBzbWFsbCB2YWx1ZSBlbnN1cmVzIHRoYXQgcmVxdWVzdHMgd2lsbCByZXR1cm4gVGltZW91dEV4Y2VwdGlvbi4KLSAgICAgICAgICAgICAgICAuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcygxMDApCi0gICAgICAgICAgICAgICAgLm1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24oMCkKLSAgICAgICAgICAgICAgICAubWF4SW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigxKQotICAgICAgICAgICAgICAgIC5taW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oMCkKLSAgICAgICAgICAgICAgICAubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2xpZW50LnN1Ym1pdEFzeW5jKCIzMDAwIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290Q2F1c2UgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGUpOwotICAgICAgICAgICAgICAgIGFzc2VydFRydWUocm9vdENhdXNlIGluc3RhbmNlb2YgVGltZW91dEV4Y2VwdGlvbik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyb290Q2F1c2UuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJXZWJTb2NrZXQgaGFuZHNoYWtlIG5vdCBjb21wbGV0ZWQiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCB0aGUgY2xpZW50IGNvbnRpbnVlcyB0byB3b3JrIGlmIHRoZSBzZXJ2ZXIgdGVtcG9yYXJpbHkgZ29lcyBkb3duIGJldHdlZW4gdHdvIHJlcXVlc3RzLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29udGludWVSdW5uaW5nSWZTZXJ2ZXJHb2VzRG93blRlbXBvcmFyaWx5KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgICAgICAgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZFBvb2wgPSBFeGVjdXRvcnMubmV3U2NoZWR1bGVkVGhyZWFkUG9vbCgxKTsKLSAgICAgICAgc2NoZWR1bGVkUG9vbC5zY2hlZHVsZSgoKSAtPiB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNlcnZlci5zdG9wU3luYygpOwotICAgICAgICAgICAgICAgIHNlcnZlciA9IG5ldyBTaW1wbGVTb2NrZXRTZXJ2ZXIoc2V0dGluZ3MpOwotICAgICAgICAgICAgICAgIHNlcnZlci5zdGFydChuZXcgVGVzdFdTR3JlbWxpbkluaXRpYWxpemVyKHNldHRpbmdzKSk7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2subm90aWZ5KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gaWdub3JlZCkgewotICAgICAgICAgICAgICAgIC8vIElnbm9yZWQuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0sIDEwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChsb2NrKSB7Ci0gICAgICAgICAgICBhc3NlcnROb3ROdWxsKGNsaWVudC5zdWJtaXQoIjEiKS5vbmUoKS5nZXRWZXJ0ZXgoKSk7Ci0gICAgICAgICAgICBsb2NrLndhaXQoMzAwMDApOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChjbGllbnQuc3VibWl0KCIxIikub25lKCkuZ2V0VmVydGV4KCkpOwotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUZXN0cyB0aGF0IGlmIHRoZSBob3N0IGlzIHVuYXZhaWxhYmxlIHRoZW4gdGhlIGNsaWVudCB3aWxsIHJldHVybiBhbiBleGNlcHRpb24gdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAotICAgICAqIHRoZSBzdGF0dXMgb2YgdGhlIGhvc3QuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5Db3JyZWN0RXhjZXB0aW9uSWZTZXJ2ZXJHb2VzRG93bigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIuYnVpbGQoImxvY2FsaG9zdCIpLnBvcnQoc2V0dGluZ3MuUE9SVCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLm1heFdhaXRGb3JDb25uZWN0aW9uKDUwMCkKLSAgICAgICAgICAgICAgICAuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcygxMDApCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoIjEiKTsKLQotICAgICAgICBzZXJ2ZXIuc3RvcFN5bmMoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3RDYXVzZSA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHJvb3RDYXVzZSBpbnN0YW5jZW9mIFRpbWVvdXRFeGNlcHRpb24pOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyb290Q2F1c2UuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJDb25uZWN0aW9uIHJlZnVzZWQiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBjbGllbnQgaXMgY29ycmVjdGx5IHNlbmRpbmcgYWxsIG92ZXJyaWRhYmxlIHBlciByZXF1ZXN0IHNldHRpbmdzIChyZXF1ZXN0SWQsIGJhdGNoU2l6ZSwKLSAgICAgKiBldmFsdWF0aW9uVGltZW91dCwgYW5kIHVzZXJBZ2VudCkgdG8gdGhlIHNlcnZlci4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlbmRQZXJSZXF1ZXN0U2V0dGluZ3NUb1NlcnZlcigpIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gQ2x1c3Rlci5idWlsZCgibG9jYWxob3N0IikucG9ydChzZXR0aW5ncy5QT1JUKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKLSAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIC8vIHRyaWdnZXIgdGhlIHRlc3Rpbmcgc2VydmVyIHRvIHJldHVybiBjYXB0dXJlZCByZXF1ZXN0IHNldHRpbmdzCi0gICAgICAgIFN0cmluZyByZXNwb25zZSA9IGNsaWVudC5zdWJtaXQoIjEiLCBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKHNldHRpbmdzLlBFUl9SRVFVRVNUX1NFVFRJTkdTX1JFUVVFU1RfSUQpCi0gICAgICAgICAgICAgICAgLnRpbWVvdXQoMTIzNCkudXNlckFnZW50KCJoZWxsb1dvcmxkIikuYmF0Y2hTaXplKDEyKQotICAgICAgICAgICAgICAgIC5tYXRlcmlhbGl6ZVByb3BlcnRpZXMoInRva2VucyIpLmNyZWF0ZSgpKS5vbmUoKS5nZXRTdHJpbmcoKTsKLQotICAgICAgICBTdHJpbmcgZXhwZWN0ZWRSZXNwb25zZSA9IFN0cmluZy5mb3JtYXQoInJlcXVlc3RJZD0lcyBldmFsdWF0aW9uVGltZW91dD0lZCwgYmF0Y2hTaXplPSVkLCB1c2VyQWdlbnQ9JXMsIG1hdGVyaWFsaXplUHJvcGVydGllcz0lcyIsCi0gICAgICAgICAgICAgICAgc2V0dGluZ3MuUEVSX1JFUVVFU1RfU0VUVElOR1NfUkVRVUVTVF9JRCwgMTIzNCwgMTIsICJoZWxsb1dvcmxkIiwgInRva2VucyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZXNwb25zZSwgcmVzcG9uc2UpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvYXV0aC9TaWd2NFRlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvYXV0aC9TaWd2NFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzdlY2QxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9hdXRoL1NpZ3Y0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmF1dGg7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CitpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5IdHRwUmVxdWVzdDsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5SdWxlOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2s7CitpbXBvcnQgb3JnLm1vY2tpdG8uanVuaXQuTW9ja2l0b0pVbml0OworaW1wb3J0IG9yZy5tb2NraXRvLmp1bml0Lk1vY2tpdG9SdWxlOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NCYXNpY0NyZWRlbnRpYWxzOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NDcmVkZW50aWFsc1Byb3ZpZGVyOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NTZXNzaW9uQ3JlZGVudGlhbHM7CitpbXBvcnQgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLmF1dGguYXdzLmludGVybmFsLnNpZ25lci51dGlsLlNpZ25lckNvbnN0YW50OworCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuYWxsT2Y7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuY29udGFpbnNTdHJpbmc7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuc3RhcnRzV2l0aDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by53aGVuOworaW1wb3J0IHN0YXRpYyBzb2Z0d2FyZS5hbWF6b24uYXdzc2RrLmh0dHAuYXV0aC5hd3MuaW50ZXJuYWwuc2lnbmVyLnV0aWwuU2lnbmVyQ29uc3RhbnQuQVVUSE9SSVpBVElPTjsKK2ltcG9ydCBzdGF0aWMgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLmF1dGguYXdzLmludGVybmFsLnNpZ25lci51dGlsLlNpZ25lckNvbnN0YW50LlhfQU1aX0NPTlRFTlRfU0hBMjU2OworaW1wb3J0IHN0YXRpYyBzb2Z0d2FyZS5hbWF6b24uYXdzc2RrLmh0dHAuYXV0aC5hd3MuaW50ZXJuYWwuc2lnbmVyLnV0aWwuU2lnbmVyQ29uc3RhbnQuWF9BTVpfREFURTsKK2ltcG9ydCBzdGF0aWMgc29mdHdhcmUuYW1hem9uLmF3c3Nkay5odHRwLmF1dGguYXdzLmludGVybmFsLnNpZ25lci51dGlsLlNpZ25lckNvbnN0YW50LlhfQU1aX1NFQ1VSSVRZX1RPS0VOOworCitwdWJsaWMgY2xhc3MgU2lndjRUZXN0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVHSU9OID0gInVzLXdlc3QtMiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfTkFNRSA9ICJzZXJ2aWNlLW5hbWUiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBSRVFVRVNUX0JPRFkgPSAie1wiZ3JlbWxpblwiOlwiMi0xXCJ9Ii5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVURl84KTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVCA9ICJsb2NhbGhvc3QiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUklfV0lUSF9RVUVSWV9QQVJBTVMgPSAiaHR0cDovLyIgKyBIT1NUICsgIjo4MTgyP2E9MSZiPTIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVkgPSAiZm9vIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VDUkVUID0gImJhciI7CisgICAgQFJ1bGUKKyAgICBwdWJsaWMgTW9ja2l0b1J1bGUgbW9ja2l0b1J1bGUgPSBNb2NraXRvSlVuaXQucnVsZSgpOworICAgIEBNb2NrCisgICAgcHJpdmF0ZSBBd3NDcmVkZW50aWFsc1Byb3ZpZGVyIGNyZWRlbnRpYWxzUHJvdmlkZXI7CisgICAgcHJpdmF0ZSBTaWd2NCBzaWd2NDsKKworICAgIEBCZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBzZXR1cCgpIHsKKyAgICAgICAgc2lndjQgPSBuZXcgU2lndjQoUkVHSU9OLCBjcmVkZW50aWFsc1Byb3ZpZGVyLCBTRVJWSUNFX05BTUUpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQWRkU2lnbmVkSGVhZGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB3aGVuKGNyZWRlbnRpYWxzUHJvdmlkZXIucmVzb2x2ZUNyZWRlbnRpYWxzKCkpLnRoZW5SZXR1cm4oQXdzQmFzaWNDcmVkZW50aWFscy5jcmVhdGUoS0VZLCBTRUNSRVQpKTsKKyAgICAgICAgSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBjcmVhdGVSZXF1ZXN0KCk7CisgICAgICAgIHNpZ3Y0LmFwcGx5KGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdmFsaWRhdGVFeHBlY3RlZEhlYWRlcnMoaHR0cFJlcXVlc3QpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQWRkU2lnbmVkSGVhZGVyc0FuZFNlc3Npb25Ub2tlbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgc2Vzc2lvblRva2VuID0gImZvb2JhcnoiOworICAgICAgICB3aGVuKGNyZWRlbnRpYWxzUHJvdmlkZXIucmVzb2x2ZUNyZWRlbnRpYWxzKCkpLnRoZW5SZXR1cm4oQXdzU2Vzc2lvbkNyZWRlbnRpYWxzLmNyZWF0ZShLRVksIFNFQ1JFVCwgc2Vzc2lvblRva2VuKSk7CisgICAgICAgIEh0dHBSZXF1ZXN0IGh0dHBSZXF1ZXN0ID0gY3JlYXRlUmVxdWVzdCgpOworICAgICAgICBzaWd2NC5hcHBseShodHRwUmVxdWVzdCk7CisgICAgICAgIHZhbGlkYXRlRXhwZWN0ZWRIZWFkZXJzKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNlc3Npb25Ub2tlbiwgaHR0cFJlcXVlc3QuaGVhZGVycygpLmdldChYX0FNWl9TRUNVUklUWV9UT0tFTikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dJZlJlcXVlc3ROb25CeXRlQXJyYXkoKSB7CisgICAgICAgIEF1dGguQXV0aGVudGljYXRpb25FeGNlcHRpb24gZXggPSBhc3NlcnRUaHJvd3MoQXV0aC5BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAoKSAtPiBzaWd2NC5hcHBseShuZXcgSHR0cFJlcXVlc3QobmV3IEhhc2hNYXA8PigpLCAibm90IGJ5dGUgYXJyYXkiLCBuZXcgVVJJKFVSSV9XSVRIX1FVRVJZX1BBUkFNUykpKSk7CisgICAgICAgIGFzc2VydFRydWUoZXguZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJFeHBlY3RlZCBieXRlW10gaW4gSHR0cFJlcXVlc3QgYm9keSIpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRocm93SWZOb1JlcXVlc3RNZXRob2QoKSB7CisgICAgICAgIEF1dGguQXV0aGVudGljYXRpb25FeGNlcHRpb24gZXggPSBhc3NlcnRUaHJvd3MoQXV0aC5BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAoKSAtPiBzaWd2NC5hcHBseShuZXcgSHR0cFJlcXVlc3QobmV3IEhhc2hNYXA8PigpLCBSRVFVRVNUX0JPRFksIG5ldyBVUkkoVVJJX1dJVEhfUVVFUllfUEFSQU1TKSwgbnVsbCkpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShleC5nZXRNZXNzYWdlKCkuY29udGFpbnMoIlRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IG5vdCBiZSBudWxsIikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dJZk5vUmVxdWVzdFVSSSgpIHsKKyAgICAgICAgQXV0aC5BdXRoZW50aWNhdGlvbkV4Y2VwdGlvbiBleCA9IGFzc2VydFRocm93cyhBdXRoLkF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICgpIC0+IHNpZ3Y0LmFwcGx5KG5ldyBIdHRwUmVxdWVzdChuZXcgSGFzaE1hcDw+KCksIFJFUVVFU1RfQk9EWSwgbnVsbCkpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShleC5nZXRNZXNzYWdlKCkuY29udGFpbnMoIlRoZSByZXF1ZXN0IFVSSSBtdXN0IG5vdCBiZSBudWxsIikpOworICAgIH0KKworICAgIHByaXZhdGUgSHR0cFJlcXVlc3QgY3JlYXRlUmVxdWVzdCgpIHRocm93cyBVUklTeW50YXhFeGNlcHRpb24geworICAgICAgICBIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBIdHRwUmVxdWVzdChuZXcgSGFzaE1hcDw+KCksIFJFUVVFU1RfQk9EWSwgbmV3IFVSSShVUklfV0lUSF9RVUVSWV9QQVJBTVMpKTsKKyAgICAgICAgaHR0cFJlcXVlc3QuaGVhZGVycygpLnB1dCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgaHR0cFJlcXVlc3QuaGVhZGVycygpLnB1dCgiSG9zdCIsICJ0aGlzLXNob3VsZC1iZS1pZ25vcmVkLWZvci1zaWduZWQtaG9zdC1oZWFkZXIiKTsKKyAgICAgICAgcmV0dXJuIGh0dHBSZXF1ZXN0OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUV4cGVjdGVkSGVhZGVycyhIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCkgeworICAgICAgICBhc3NlcnRFcXVhbHMoSE9TVCwgaHR0cFJlcXVlc3QuaGVhZGVycygpLmdldChTaWduZXJDb25zdGFudC5IT1NUKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoaHR0cFJlcXVlc3QuaGVhZGVycygpLmdldChYX0FNWl9EQVRFKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoaHR0cFJlcXVlc3QuaGVhZGVycygpLmdldChYX0FNWl9DT05URU5UX1NIQTI1NikpOworICAgICAgICBhc3NlcnRUaGF0KGh0dHBSZXF1ZXN0LmhlYWRlcnMoKS5nZXQoQVVUSE9SSVpBVElPTiksCisgICAgICAgICAgICAgICAgYWxsT2Yoc3RhcnRzV2l0aCgiQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPSIgKyBLRVkpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnNTdHJpbmcoIi8iICsgUkVHSU9OICsgIi9zZXJ2aWNlLW5hbWUvYXdzNF9yZXF1ZXN0IiksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluc1N0cmluZygiU2lnbmF0dXJlPSIpKSk7CisgICAgfQorCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXJUZXN0LmphdmEgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ0ZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXJUZXN0LmphdmEKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5lbWJlZGRlZC5FbWJlZGRlZENoYW5uZWw7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRGdWxsSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRIdHRwSGVhZGVyczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJzOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2U7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLkRhdGFGb3JtYXRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLnppcC5EZWZsYXRlcjsKKworaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfRU5DT0RJTkc7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyVmFsdWVzLkRFRkxBVEU7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuT0s7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwVmVyc2lvbi5IVFRQXzFfMTsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkxhc3RIdHRwQ29udGVudC5FTVBUWV9MQVNUX0NPTlRFTlQ7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKKworcHVibGljIGNsYXNzIEh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXJUZXN0IHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdERlY29tcHJlc3NJZlJlc3BvbnNlRG9lc05vdENvbnRhaW5Db250ZW50RW5jb2RpbmcoKSB7CisgICAgICAgIGZpbmFsIEh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXIgZGVjb21wcmVzc2lvbkhhbmRsZXIgPSBuZXcgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlcigpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKGRlY29tcHJlc3Npb25IYW5kbGVyKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBjb250ZW50ID0gdGVzdENoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgY29udGVudC53cml0ZUNoYXJTZXF1ZW5jZSgiYWJjIiwgQ2hhcnNldFV0aWwuVVRGXzgpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBPSywgY29udGVudCwgaGVhZGVycywgaGVhZGVycyk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKHJlc3BvbnNlKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIGluYm91bmQgPSB0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoImFiYyIsIGluYm91bmQuY29udGVudCgpLnRvU3RyaW5nKENoYXJzZXRVdGlsLlVURl84KSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGREZWNvbXByZXNzSWZSZXNwb25zZURvZXNDb250YWluQ29udGVudEVuY29kaW5nKCkgeworICAgICAgICBmaW5hbCBIdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyIGRlY29tcHJlc3Npb25IYW5kbGVyID0gbmV3IEh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXIoKTsKKyAgICAgICAgZmluYWwgRW1iZWRkZWRDaGFubmVsIHRlc3RDaGFubmVsID0gbmV3IEVtYmVkZGVkQ2hhbm5lbChkZWNvbXByZXNzaW9uSGFuZGxlcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgY29udGVudCA9IHRlc3RDaGFubmVsLmFsbG9jKCkuYnVmZmVyKCk7CisgICAgICAgIGNvbnRlbnQud3JpdGVCeXRlcyhuZXcgYnl0ZVtdIHsweDc4LCAoYnl0ZSkgMHg5YywgMHg0YiwgMHg0YywgMHg0YywgMHg0LCAweDAsIDB4MiwgMHg0OSwgMHgxLCAweDI0fSk7CisgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkuYWRkKENPTlRFTlRfRU5DT0RJTkcsIERFRkxBVEUpOworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBPSywgY29udGVudCwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQocmVzcG9uc2UpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgaW5jb21pbmdDb250ZW50ID0gKChGdWxsSHR0cFJlc3BvbnNlKSB0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpKS5jb250ZW50KCk7CisgICAgICAgIGFzc2VydFRydWUoImFhYSIuY29udGVudEVxdWFscyhpbmNvbWluZ0NvbnRlbnQucmVhZENoYXJTZXF1ZW5jZShpbmNvbWluZ0NvbnRlbnQucmVhZGFibGVCeXRlcygpLCBDaGFyc2V0VXRpbC5VVEZfOCkpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZERlY29tcHJlc3NMYXJnZUNodW5rKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIGludCBsYXJnZUFycmF5U2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGZpbmFsIGludCBjb21wcmVzc2VkU2l6ZSA9IDY1MjM5OyAvLyBwcmUtY2FsY3VsYXRlZCBjb21wcmVzc2VkIHNpemUgb2YgdGVzdCBkYXRhLgorICAgICAgICBmaW5hbCBieXRlW10gbGFyZ2VBcnJheSA9IG5ldyBieXRlW2xhcmdlQXJyYXlTaXplXTsKKyAgICAgICAgQXJyYXlzLmZpbGwobGFyZ2VBcnJheSwgKGJ5dGUpIDB4NjUpOworCisgICAgICAgIGZpbmFsIERlZmxhdGVyIGNvbXByZXNzb3IgPSBuZXcgRGVmbGF0ZXIoKTsKKyAgICAgICAgY29tcHJlc3Nvci5zZXRJbnB1dChsYXJnZUFycmF5KTsKKyAgICAgICAgY29tcHJlc3Nvci5maW5pc2goKTsKKyAgICAgICAgZmluYWwgYnl0ZVtdIGNvbXByZXNzZWRBcnJheSA9IG5ldyBieXRlW2NvbXByZXNzZWRTaXplXTsKKyAgICAgICAgY29tcHJlc3Nvci5kZWZsYXRlKGNvbXByZXNzZWRBcnJheSwgMCwgY29tcHJlc3NlZEFycmF5Lmxlbmd0aCwgRGVmbGF0ZXIuRlVMTF9GTFVTSCk7CisKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlciBkZWNvbXByZXNzaW9uSGFuZGxlciA9IG5ldyBIdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoZGVjb21wcmVzc2lvbkhhbmRsZXIpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBpbmJvdW5kID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKAorICAgICAgICAgICAgICAgIEhUVFBfMV8xLCBPSywgVW5wb29sZWQud3JhcHBlZEJ1ZmZlcihjb21wcmVzc2VkQXJyYXksIDAsIGNvbXByZXNzZWRBcnJheS5sZW5ndGgpLCBoZWFkZXJzLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChpbmJvdW5kKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gdGVzdENoYW5uZWwucmVhZEluYm91bmQoKTsKKyAgICAgICAgZmluYWwgYnl0ZVtdIGNvbnRlbnRCeXRlcyA9IG5ldyBieXRlW3Jlc3BvbnNlLmNvbnRlbnQoKS5yZWFkYWJsZUJ5dGVzKCldOworICAgICAgICByZXNwb25zZS5jb250ZW50KCkucmVhZEJ5dGVzKGNvbnRlbnRCeXRlcyk7CisgICAgICAgIHJlc3BvbnNlLnJlbGVhc2UoKTsKKworICAgICAgICBhc3NlcnRBcnJheUVxdWFscyhsYXJnZUFycmF5LCBjb250ZW50Qnl0ZXMpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRGVjb21wcmVzc0NvbnRlbnRJbk11bHRpcGxlQ2h1bmtzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXIgZGVjb21wcmVzc2lvbkhhbmRsZXIgPSBuZXcgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlcigpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKGRlY29tcHJlc3Npb25IYW5kbGVyKTsKKworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gbmV3IERlZmF1bHRIdHRwUmVzcG9uc2UoSFRUUF8xXzEsIE9LLCBoZWFkZXJzKTsKKworICAgICAgICBmaW5hbCBEZWZsYXRlciBjb21wcmVzc29yID0gbmV3IERlZmxhdGVyKCk7CisgICAgICAgIGZpbmFsIExpc3Q8Ynl0ZVtdPiBkZWNvbXByZXNzZWRDaHVua3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBpbnQgbGVuOworICAgICAgICBmaW5hbCBieXRlW10gY29tcHJlc3Npb25CdWZmZXIgPSBuZXcgYnl0ZVsxMDBdOworICAgICAgICBjb21wcmVzc29yLnNldElucHV0KCJhYWEiLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsKKyAgICAgICAgbGVuID0gY29tcHJlc3Nvci5kZWZsYXRlKGNvbXByZXNzaW9uQnVmZmVyLCAwLCBjb21wcmVzc2lvbkJ1ZmZlci5sZW5ndGgsIERlZmxhdGVyLlNZTkNfRkxVU0gpOworICAgICAgICBkZWNvbXByZXNzZWRDaHVua3MuYWRkKEFycmF5cy5jb3B5T2ZSYW5nZShjb21wcmVzc2lvbkJ1ZmZlciwgMCwgbGVuKSk7CisKKyAgICAgICAgY29tcHJlc3Nvci5zZXRJbnB1dCgiYmJiIi5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisgICAgICAgIGxlbiA9IGNvbXByZXNzb3IuZGVmbGF0ZShjb21wcmVzc2lvbkJ1ZmZlciwgMCwgY29tcHJlc3Npb25CdWZmZXIubGVuZ3RoLCBEZWZsYXRlci5TWU5DX0ZMVVNIKTsKKyAgICAgICAgZGVjb21wcmVzc2VkQ2h1bmtzLmFkZChBcnJheXMuY29weU9mUmFuZ2UoY29tcHJlc3Npb25CdWZmZXIsIDAsIGxlbikpOworCisgICAgICAgIGNvbXByZXNzb3Iuc2V0SW5wdXQoImNjYyIuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpOworICAgICAgICBsZW4gPSBjb21wcmVzc29yLmRlZmxhdGUoY29tcHJlc3Npb25CdWZmZXIsIDAsIGNvbXByZXNzaW9uQnVmZmVyLmxlbmd0aCwgRGVmbGF0ZXIuU1lOQ19GTFVTSCk7CisgICAgICAgIGRlY29tcHJlc3NlZENodW5rcy5hZGQoQXJyYXlzLmNvcHlPZlJhbmdlKGNvbXByZXNzaW9uQnVmZmVyLCAwLCBsZW4pKTsKKyAgICAgICAgY29tcHJlc3Nvci5yZXNldCgpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChyZXNwb25zZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICBieXRlW10gY2h1bmsgPSBkZWNvbXByZXNzZWRDaHVua3MuZ2V0KGkpOworICAgICAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKG5ldyBEZWZhdWx0SHR0cENvbnRlbnQoVW5wb29sZWQud3JhcHBlZEJ1ZmZlcihjaHVuaywgMCwgY2h1bmsubGVuZ3RoKSkpOworICAgICAgICB9CisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChFTVBUWV9MQVNUX0NPTlRFTlQpOworCisgICAgICAgIGFzc2VydEVxdWFscyg1LCB0ZXN0Q2hhbm5lbC5pbmJvdW5kTWVzc2FnZXMoKS5zaXplKCkpOworCisgICAgICAgIHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCk7IC8vIERpc2NhcmQgYmVnaW5uaW5nIEh0dHBSZXNwb25zZS4KKworICAgICAgICBmaW5hbCBCeXRlQnVmIGZpcnN0Q29udGVudCA9IHRlc3RDaGFubmVsLjxIdHRwQ29udGVudD5yZWFkSW5ib3VuZCgpLmNvbnRlbnQoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiYWFhIi5jb250ZW50RXF1YWxzKGZpcnN0Q29udGVudC5yZWFkQ2hhclNlcXVlbmNlKGZpcnN0Q29udGVudC5yZWFkYWJsZUJ5dGVzKCksIENoYXJzZXRVdGlsLlVURl84KSkpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgc2Vjb25kQ29udGVudCA9IHRlc3RDaGFubmVsLjxIdHRwQ29udGVudD5yZWFkSW5ib3VuZCgpLmNvbnRlbnQoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiYmJiIi5jb250ZW50RXF1YWxzKHNlY29uZENvbnRlbnQucmVhZENoYXJTZXF1ZW5jZShzZWNvbmRDb250ZW50LnJlYWRhYmxlQnl0ZXMoKSwgQ2hhcnNldFV0aWwuVVRGXzgpKSk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiB0aGlyZENvbnRlbnQgPSB0ZXN0Q2hhbm5lbC48SHR0cENvbnRlbnQ+cmVhZEluYm91bmQoKS5jb250ZW50KCk7CisgICAgICAgIGFzc2VydFRydWUoImNjYyIuY29udGVudEVxdWFscyh0aGlyZENvbnRlbnQucmVhZENoYXJTZXF1ZW5jZSh0aGlyZENvbnRlbnQucmVhZGFibGVCeXRlcygpLCBDaGFyc2V0VXRpbC5VVEZfOCkpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUVtcHR5RnJhbWVEZWNvbXByZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIERlZmxhdGVyIGNvbXByZXNzb3IgPSBuZXcgRGVmbGF0ZXIoKTsKKyAgICAgICAgY29tcHJlc3Nvci5zZXRJbnB1dChuZXcgYnl0ZVswXSk7CisgICAgICAgIGNvbXByZXNzb3IuZmluaXNoKCk7CisgICAgICAgIGZpbmFsIGJ5dGVbXSBjb21wcmVzc2VkQXJyYXkgPSBuZXcgYnl0ZVs4XTsgLy8gbGVuZ3RoIG9mIHdoZW4gemxpYiBlbmNvZGVzIGVtcHR5IGJ1ZmZlci4KKyAgICAgICAgY29tcHJlc3Nvci5kZWZsYXRlKGNvbXByZXNzZWRBcnJheSk7CisKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlciBkZWNvbXByZXNzaW9uSGFuZGxlciA9IG5ldyBIdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoZGVjb21wcmVzc2lvbkhhbmRsZXIpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBpbiA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXNwb25zZShIVFRQXzFfMSwgT0ssIFVucG9vbGVkLndyYXBwZWRCdWZmZXIoY29tcHJlc3NlZEFycmF5KSwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQoaW4pOworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIHJlc3VsdCA9IHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCByZXN1bHQuY29udGVudCgpLnJlYWRhYmxlQnl0ZXMoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRGaXJlRXhjZXB0aW9uV2hlbkNvbnRlbnRJbmNvcnJlY3RseUNvbXByZXNzZWQoKSB7CisgICAgICAgIGZpbmFsIEh0dHBDb250ZW50RGVjb21wcmVzc2lvbkhhbmRsZXIgZGVjb21wcmVzc2lvbkhhbmRsZXIgPSBuZXcgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlcigpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKGRlY29tcHJlc3Npb25IYW5kbGVyKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBjb250ZW50ID0gdGVzdENoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgY29udGVudC53cml0ZUNoYXJTZXF1ZW5jZSgiYWJjIiwgQ2hhcnNldFV0aWwuVVRGXzgpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSByZXNwb25zZSA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXNwb25zZShIVFRQXzFfMSwgT0ssIGNvbnRlbnQsIGhlYWRlcnMsIGhlYWRlcnMpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQocmVzcG9uc2UpOworICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uLiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgRGF0YUZvcm1hdEV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVVuY29tcHJlc3NlZEJpbmFyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBpbnQgYXJyYXlTaXplID0gMTI4OworICAgICAgICBmaW5hbCBieXRlW10gbGFyZ2VBcnJheSA9IG5ldyBieXRlW2FycmF5U2l6ZV07CisgICAgICAgIG5ldyBSYW5kb20oKS5uZXh0Qnl0ZXMobGFyZ2VBcnJheSk7CisKKyAgICAgICAgZmluYWwgRGVmbGF0ZXIgY29tcHJlc3NvciA9IG5ldyBEZWZsYXRlcigpOworICAgICAgICBjb21wcmVzc29yLnNldElucHV0KGxhcmdlQXJyYXkpOworICAgICAgICBjb21wcmVzc29yLmZpbmlzaCgpOworICAgICAgICBmaW5hbCBieXRlW10gY29tcHJlc3NlZEFycmF5ID0gbmV3IGJ5dGVbYXJyYXlTaXplICsgNTBdOyAvLyBBZGRlZCBidWZmZXIgc2luY2UgYmluYXJ5IHByb2JhYmx5IHdvbid0IGNvbXByZXNzLgorICAgICAgICBmaW5hbCBpbnQgbGVuID0gY29tcHJlc3Nvci5kZWZsYXRlKGNvbXByZXNzZWRBcnJheSwgMCwgY29tcHJlc3NlZEFycmF5Lmxlbmd0aCwgRGVmbGF0ZXIuRlVMTF9GTFVTSCk7CisKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnREZWNvbXByZXNzaW9uSGFuZGxlciBkZWNvbXByZXNzaW9uSGFuZGxlciA9IG5ldyBIdHRwQ29udGVudERlY29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoZGVjb21wcmVzc2lvbkhhbmRsZXIpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBpbmJvdW5kID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKAorICAgICAgICAgICAgICAgIEhUVFBfMV8xLCBPSywgVW5wb29sZWQud3JhcHBlZEJ1ZmZlcihjb21wcmVzc2VkQXJyYXksIDAsIGxlbiksIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGluYm91bmQpOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSB0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpOworICAgICAgICBmaW5hbCBieXRlW10gY29udGVudEJ5dGVzID0gbmV3IGJ5dGVbcmVzcG9uc2UuY29udGVudCgpLnJlYWRhYmxlQnl0ZXMoKV07CisgICAgICAgIHJlc3BvbnNlLmNvbnRlbnQoKS5yZWFkQnl0ZXMoY29udGVudEJ5dGVzKTsKKyAgICAgICAgcmVzcG9uc2UucmVsZWFzZSgpOworCisgICAgICAgIGFzc2VydEFycmF5RXF1YWxzKGxhcmdlQXJyYXksIGNvbnRlbnRCeXRlcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVzcG9uc2VTdHJlYW1EZWNvZGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0h0dHBHcmVtbGluUmVzcG9uc2VTdHJlYW1EZWNvZGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZDM1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvSHR0cEdyZW1saW5SZXNwb25zZVN0cmVhbURlY29kZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLmVtYmVkZGVkLkVtYmVkZGVkQ2hhbm5lbDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLlRvb0xvbmdGcmFtZUV4Y2VwdGlvbjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2U7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRIdHRwSGVhZGVyczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cE9iamVjdEFnZ3JlZ2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFNlcnZlckNvZGVjOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwVmVyc2lvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK2ltcG9ydCBpby5uZXR0eS51dGlsLkF0dHJpYnV0ZUtleTsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKKworcHVibGljIGNsYXNzIEh0dHBHcmVtbGluUmVzcG9uc2VTdHJlYW1EZWNvZGVyVGVzdCB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Y2NlZWRJZlJlc3BvbnNlU2l6ZVVuZGVyTWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgY29udGVudCA9ICJ0aGlzIHJlc3BvbnNlIGlzIHNtYWxsZXIgdGhhbiB0aGUgbWF4IGFsbG93ZWQiOworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIGh0dHBSZXNwb25zZSA9IGNyZWF0ZVJlc3BvbnNlKGNvbnRlbnQpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBpbml0aWFsaXplQ2hhbm5lbChodHRwUmVzcG9uc2UuY29udGVudCgpLnJlYWRhYmxlQnl0ZXMoKSArIDEpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChodHRwUmVzcG9uc2UpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgaW5ib3VuZCA9IHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhjb250ZW50LCBpbmJvdW5kLmdldFJlc3VsdCgpLmdldERhdGEoKS5nZXQoMCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU3VjY2VlZElmUmVzcG9uc2VTaXplRXF1YWxUb01heFJlc3BvbnNlQ29udGVudExlbmd0aCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGNvbnRlbnQgPSAidGhpcyByZXNwb25zZSBpcyBlcXVhbCB0byB0aGUgbWF4IGFsbG93ZWQiOworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIGh0dHBSZXNwb25zZSA9IGNyZWF0ZVJlc3BvbnNlKGNvbnRlbnQpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBpbml0aWFsaXplQ2hhbm5lbChodHRwUmVzcG9uc2UuY29udGVudCgpLnJlYWRhYmxlQnl0ZXMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXNwb25zZSk7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBpbmJvdW5kID0gdGVzdENoYW5uZWwucmVhZEluYm91bmQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnRlbnQsIGluYm91bmQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTdWNjZWVkSWZNYXhSZXNwb25zZUNvbnRlbnRMZW5ndGhaZXJvKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgbGFyZ2VSZXNwb25zZSA9IFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbSgzMDAwKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBodHRwUmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZShsYXJnZVJlc3BvbnNlKTsKKyAgICAgICAgZmluYWwgRW1iZWRkZWRDaGFubmVsIHRlc3RDaGFubmVsID0gaW5pdGlhbGl6ZUNoYW5uZWwoMCk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXNwb25zZSk7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBpbmJvdW5kID0gdGVzdENoYW5uZWwucmVhZEluYm91bmQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGxhcmdlUmVzcG9uc2UsIGluYm91bmQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRUaHJvd0lmUmVzcG9uc2VTaXplTGFyZ2VyVGhhbk1heFJlc3BvbnNlQ29udGVudExlbmd0aCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBodHRwUmVzcG9uc2UgPSBjcmVhdGVSZXNwb25zZSgidGhpcyByZXNwb25zZSBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IGFsbG93ZWQiKTsKKyAgICAgICAgZmluYWwgRW1iZWRkZWRDaGFubmVsIHRlc3RDaGFubmVsID0gaW5pdGlhbGl6ZUNoYW5uZWwoaHR0cFJlc3BvbnNlLmNvbnRlbnQoKS5yZWFkYWJsZUJ5dGVzKCkgLSAxKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXNwb25zZSk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBUb29Mb25nRnJhbWVFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoVG9vTG9uZ0ZyYW1lRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiUmVzcG9uc2UgZXhjZWVkZWQgNjAgYnl0ZXMuIiwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXRCdWxrZWRGbGFnQ3R4VmFsdWVXaXRoRWFjaFJlc3BvbnNlKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBpbml0aWFsaXplQ2hhbm5lbChJbnRlZ2VyLk1BWF9WQUxVRSk7CisKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBodHRwUmVzcG9uc2UxID0gY3JlYXRlQnVsa2VkUmVzcG9uc2UodHJ1ZSk7CisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChodHRwUmVzcG9uc2UxKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBidWxrZWQxID0gKGJvb2xlYW4pIHRlc3RDaGFubmVsLnBpcGVsaW5lKCkuY2hhbm5lbCgpLmF0dHIoQXR0cmlidXRlS2V5LnZhbHVlT2YoImlzQnVsa2VkIikpLmdldCgpOworICAgICAgICBhc3NlcnRUcnVlKGJ1bGtlZDEpOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2UgaHR0cFJlc3BvbnNlMiA9IGNyZWF0ZUJ1bGtlZFJlc3BvbnNlKGZhbHNlKTsKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXNwb25zZTIpOworICAgICAgICBmaW5hbCBib29sZWFuIGJ1bGtlZDIgPSAoYm9vbGVhbikgdGVzdENoYW5uZWwucGlwZWxpbmUoKS5jaGFubmVsKCkuYXR0cihBdHRyaWJ1dGVLZXkudmFsdWVPZigiaXNCdWxrZWQiKSkuZ2V0KCk7CisgICAgICAgIGFzc2VydEZhbHNlKGJ1bGtlZDIpOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2UgaHR0cFJlc3BvbnNlMyA9IGNyZWF0ZUJ1bGtlZFJlc3BvbnNlKHRydWUpOworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQoaHR0cFJlc3BvbnNlMyk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gYnVsa2VkMyA9IChib29sZWFuKSB0ZXN0Q2hhbm5lbC5waXBlbGluZSgpLmNoYW5uZWwoKS5hdHRyKEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJpc0J1bGtlZCIpKS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShidWxrZWQzKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIGh0dHBSZXNwb25zZTQgPSBjcmVhdGVCdWxrZWRSZXNwb25zZShmYWxzZSk7CisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChodHRwUmVzcG9uc2U0KTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBidWxrZWQ0ID0gKGJvb2xlYW4pIHRlc3RDaGFubmVsLnBpcGVsaW5lKCkuY2hhbm5lbCgpLmF0dHIoQXR0cmlidXRlS2V5LnZhbHVlT2YoImlzQnVsa2VkIikpLmdldCgpOworICAgICAgICBhc3NlcnRGYWxzZShidWxrZWQ0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIEZ1bGxIdHRwUmVzcG9uc2UgY3JlYXRlUmVzcG9uc2UoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spLnJlc3VsdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGNvbnRlbnQpKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5zaW1wbGVJbnN0YW5jZSgpLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2UsIEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVCk7CisgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2UoSHR0cFZlcnNpb24uSFRUUF8xXzEsIEh0dHBSZXNwb25zZVN0YXR1cy5PSywgYnVmZmVyLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCksIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBGdWxsSHR0cFJlc3BvbnNlIGNyZWF0ZUJ1bGtlZFJlc3BvbnNlKGZpbmFsIGJvb2xlYW4gYnVsa2VkRmxhZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKS5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykuYnVsa2VkKGJ1bGtlZEZsYWcpLnJlc3VsdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ0ZXN0IGJ1bGtlZCIpKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5zaW1wbGVJbnN0YW5jZSgpLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2UsIEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVCk7CisgICAgICAgIHJldHVybiBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2UoSHR0cFZlcnNpb24uSFRUUF8xXzEsIEh0dHBSZXNwb25zZVN0YXR1cy5PSywgYnVmZmVyLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCksIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBFbWJlZGRlZENoYW5uZWwgaW5pdGlhbGl6ZUNoYW5uZWwoZmluYWwgbG9uZyBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgpIHsKKyAgICAgICAgZmluYWwgSHR0cEdyZW1saW5SZXNwb25zZVN0cmVhbURlY29kZXIgZGVjb2RlciA9IG5ldyBIdHRwR3JlbWxpblJlc3BvbnNlU3RyZWFtRGVjb2RlcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5zaW1wbGVJbnN0YW5jZSgpLCBtYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKG5ldyBIdHRwU2VydmVyQ29kZWMoKSwgbmV3IEh0dHBPYmplY3RBZ2dyZWdhdG9yKEludGVnZXIuTUFYX1ZBTFVFKSwgZGVjb2Rlcik7CisgICAgICAgIHJldHVybiB0ZXN0Q2hhbm5lbDsKKyAgICB9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL2hhbmRsZXIvSWRsZUNvbm5lY3Rpb25IYW5kbGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0lkbGVDb25uZWN0aW9uSGFuZGxlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGYzYWYxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9oYW5kbGVyL0lkbGVDb25uZWN0aW9uSGFuZGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXI7CisKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLmVtYmVkZGVkLkVtYmVkZGVkQ2hhbm5lbDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnRpbWVvdXQuSWRsZVN0YXRlRXZlbnQ7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitwdWJsaWMgY2xhc3MgSWRsZUNvbm5lY3Rpb25IYW5kbGVyVGVzdCB7CisgICAgcHJpdmF0ZSBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWw7CisKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgc2V0dXAoKSB7CisgICAgICAgIHRlc3RDaGFubmVsID0gbmV3IEVtYmVkZGVkQ2hhbm5lbChuZXcgSWRsZUNvbm5lY3Rpb25IYW5kbGVyKCkpOworICAgIH0KKworICAgIEBBZnRlcgorICAgIHB1YmxpYyB2b2lkIHRlYXJkb3duKCkgeworICAgICAgICAvLyBpZiBhbnkgZXhjZXB0aW9ucyBoYXBwZW5lZCwgdGhyb3cgdGhlbSBvdGhlcndpc2UgdGhlIHRlc3Qgd2lsbCBvbmx5IHNpbGVudGx5IGZhaWwKKyAgICAgICAgdGVzdENoYW5uZWwuY2hlY2tFeGNlcHRpb24oKTsKKyAgICB9CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdXNlckV2ZW50VHJpZ2dlcmVkX3NldHNJZGxlU3RhdGVFdmVudEF0dHJpYnV0ZSgpIHsKKyAgICAgICAgdGVzdENoYW5uZWwucGlwZWxpbmUoKS5maXJlVXNlckV2ZW50VHJpZ2dlcmVkKElkbGVTdGF0ZUV2ZW50LldSSVRFUl9JRExFX1NUQVRFX0VWRU5UKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0Q2hhbm5lbC5oYXNBdHRyKElkbGVDb25uZWN0aW9uSGFuZGxlci5JRExFX1NUQVRFX0VWRU5UKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB1c2VyRXZlbnRUcmlnZ2VyZWRfbm90SWRsZVN0YXRlRXZlbnRfZG9lc05vdFNldEF0dHJpYnV0ZSgpIHsKKyAgICAgICAgdGVzdENoYW5uZWwucGlwZWxpbmUoKS5maXJlVXNlckV2ZW50VHJpZ2dlcmVkKCJzb21lIG90aGVyIGV2ZW50Iik7CisgICAgICAgIGFzc2VydEZhbHNlKHRlc3RDaGFubmVsLmhhc0F0dHIoSWRsZUNvbm5lY3Rpb25IYW5kbGVyLklETEVfU1RBVEVfRVZFTlQpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvRHJpdmVyUmVtb3RlQ29ubmVjdGlvblRlc3QuamF2YSBiL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0RyaXZlclJlbW90ZUNvbm5lY3Rpb25UZXN0LmphdmEKaW5kZXggZWQ1OTA1Ny4uOTg2MTQ5NiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvRHJpdmVyUmVtb3RlQ29ubmVjdGlvblRlc3QuamF2YQorKysgYi9ncmVtbGluLWRyaXZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uVGVzdC5qYXZhCkBAIC0yNCw4ICsyNCw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCi1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnMuZ2V0UmVxdWVzdE9wdGlvbnM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogCkBAIC0zNywxOSArMzUsMTUgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQnVpbGRSZXF1ZXN0T3B0aW9ucygpIHsKLSAgICAgICAgZmluYWwgVVVJRCByZXF1ZXN0SWQgPSBVVUlELmZyb21TdHJpbmcoIjM0YTlmNDVmLTg4NTQtNGQzMy04YjQwLTkyYTgxNzFlZTQ5NSIpOwogICAgICAgICBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zID0gZ2V0UmVxdWVzdE9wdGlvbnMoCiAgICAgICAgICAgICAgICAgZy53aXRoKCJ4IikuCiAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoKCJ5IiwgMTAwKS4KICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGgoVG9rZW5zLkFSR1NfQkFUQ0hfU0laRSwgMTAwMCkuCi0gICAgICAgICAgICAgICAgICAgICAgICB3aXRoKFRva2Vucy5SRVFVRVNUX0lELCByZXF1ZXN0SWQpLgogICAgICAgICAgICAgICAgICAgICAgICAgd2l0aChUb2tlbnMuQVJHU19FVkFMX1RJTUVPVVQsIDEwMDAwMEwpLgogICAgICAgICAgICAgICAgICAgICAgICAgd2l0aChUb2tlbnMuQVJHU19VU0VSX0FHRU5ULCAidGVzdCIpLgotICAgICAgICAgICAgICAgICAgICAgICAgVigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3RJZCwgb3B0aW9ucy5nZXRPdmVycmlkZVJlcXVlc3RJZCgpLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFYoKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxMDAwLCBvcHRpb25zLmdldEJhdGNoU2l6ZSgpLmdldCgpLmludFZhbHVlKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMDAwTCwgb3B0aW9ucy5nZXRUaW1lb3V0KCkuZ2V0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBvcHRpb25zLmdldFVzZXJBZ2VudCgpLmdldCgpKTsKICAgICB9CiAKICAgICBAVGVzdApAQCAtNTcsNyArNTEsNyBAQAogICAgICAgICBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zID0gZ2V0UmVxdWVzdE9wdGlvbnMoCiAgICAgICAgICAgICAgICAgZy53aXRoKFRva2Vucy5BUkdTX0JBVENIX1NJWkUsIDEwMCkuCiAgICAgICAgICAgICAgICAgICB3aXRoKFRva2Vucy5BUkdTX0VWQUxfVElNRU9VVCwgMTAwMCkuCi0gICAgICAgICAgICAgICAgICBWKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOworICAgICAgICAgICAgICAgICAgVigpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxMDApLCBvcHRpb25zLmdldEJhdGNoU2l6ZSgpLmdldCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxMDAwKSwgb3B0aW9ucy5nZXRUaW1lb3V0KCkuZ2V0KCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZHJpdmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL1BlcmZvcm1hbmNlVGVzdC5qYXZhIGIvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvUGVyZm9ybWFuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDRhNzkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1kcml2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvUGVyZm9ybWFuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHRTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOwotaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotCi0vKioKLSAqIERPIE5PVCBVU0UgLSBUSElTIFdJTEwgQkUgREVMRVRFRAotICogVGhpcyBmaWxlIGlzIGludGVuZGVkIGZvciBnZW5lcmF0aW5nIFBlcmZvcm1hbmNlIHRlc3QgcmVzdWx0cyBvbmx5LgotICogSXQgaXMgbm90IHRvIGJlIHVzZWQgaW4gYSBwcm9kdWN0aW9uIHNldHRpbmcuCi0gKiBJdCBpcyBiZWluZyBtYWRlIGF2YWlsYWJsZSBhcyBhIHJlZmVyZW5jZSB0byB0aGUgdGVzdCByZXN1bHRzIGZvcgotICogYW55b25lIHRoYXQgd2FudHMgc2VlIHRoZSBjb2RlIHVzZWQgdG8gb2J0YWluIHRoZSBwZXJmb3JtYW5jZSBtZXRyaWNzLgotICovCi1jbGFzcyBQZXJmb3JtYW5jZVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQU1QTEVfU0laRSA9IDU1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWQUxVRV9NQVBfUkVQRUFUUyA9IDUwMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSE9TVCA9ICJsb2NhbGhvc3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQT1JUID0gNDU5NDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPT0xJTkdfQ09OVEVOVF9MRU5HVEggPSAyNSAqIDEwMjQgKiAxMDI0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfQ09OVEVOVF9MRU5HVEggPSAzMDAgKiAxMDI0ICogMTAyNDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVNT1RFX1RSQVZFUlNBTF9TT1VSQ0UgPSAiZ2dyYXRlZnVsIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9PTElOR19UUkFWRVJTQUxfU0laRSA9IDEwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8SW50ZWdlcj4gUE9PTF9TSVpFID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxJbnRlZ2VyPiBQT09MX1FVRVJZX0NPVU5UID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgc3RhdGljIHsKLSAgICAgICAgUE9PTF9TSVpFLmFkZCgxKTsKLSAgICAgICAgUE9PTF9TSVpFLmFkZCgyKTsKLSAgICAgICAgUE9PTF9TSVpFLmFkZCg0KTsKLSAgICAgICAgUE9PTF9TSVpFLmFkZCg4KTsKLSAgICAgICAgUE9PTF9RVUVSWV9DT1VOVC5hZGQoNTApOwotICAgICAgICBQT09MX1FVRVJZX0NPVU5ULmFkZCgxMDApOwotICAgICAgICBQT09MX1FVRVJZX0NPVU5ULmFkZCgyNTApOwotICAgICAgICBQT09MX1FVRVJZX0NPVU5ULmFkZCg1MDApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIC8vIGV4ZWN1dGVQZXJmb3JtYW5jZVRlc3RzKCk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gZ2V0RHJpdmVyUmVtb3RlQ29ubmVjdGlvbihmaW5hbCBJbnRlZ2VyIHBvb2xTaXplKSB7Ci0gICAgICAgIHJldHVybiBEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGdldENsdXN0ZXIocG9vbFNpemUpLCBSRU1PVEVfVFJBVkVSU0FMX1NPVVJDRSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ2x1c3RlciBnZXRDbHVzdGVyKGZpbmFsIEludGVnZXIgcG9vbFNpemUpIHsKLQotICAgICAgICByZXR1cm4gKHBvb2xTaXplID09IG51bGwpID8gQ2x1c3Rlci5idWlsZChIT1NUKS5wb3J0KFBPUlQpLm1heENvbnRlbnRMZW5ndGgoTUFYX0NPTlRFTlRfTEVOR1RIKS5jcmVhdGUoKQotICAgICAgICAgICAgICAgIDpDbHVzdGVyLmJ1aWxkKEhPU1QpLnBvcnQoUE9SVCkubWF4Q29udGVudExlbmd0aChQT09MSU5HX0NPTlRFTlRfTEVOR1RIKS5tYXhDb25uZWN0aW9uUG9vbFNpemUocG9vbFNpemUpLmNyZWF0ZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIENsaWVudCBnZXRDbGllbnQoZmluYWwgQ2x1c3RlciBjbHVzdGVyKSB7Ci0gICAgICAgIHJldHVybiBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcyhSRU1PVEVfVFJBVkVSU0FMX1NPVVJDRSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ2V0R3JhcGhUcmF2ZXJzYWxTb3VyY2UoZmluYWwgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7Ci0gICAgICAgIHJldHVybiB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGdldEFyZ3MoZmluYWwgaW50IHJlcGVhdHMpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nW10gYXJncyA9IG5ldyBTdHJpbmdbcmVwZWF0c107Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0czsgaSsrKSB7Ci0gICAgICAgICAgICBhcmdzW2ldID0gSW50ZWdlci50b1N0cmluZyhpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXJnczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBHcmFwaFRyYXZlcnNhbDw/LCA/PiBnZXRQcm9qZWN0VHJhdmVyc2FsKGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcsIGZpbmFsIGludCByZXBlYXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gYXJncykgewotICAgICAgICBHcmFwaFRyYXZlcnNhbDw/LCA/PiB0cmF2ZXJzYWwgPSBnLlYoKS5wcm9qZWN0KGFyZ3NbMF0sIEFycmF5cy5jb3B5T2ZSYW5nZShhcmdzLCAxLCByZXBlYXRzKSk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwZWF0czsgaSsrKSB7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwgPSB0cmF2ZXJzYWwuYnkoX18udmFsdWVNYXAodHJ1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cmF2ZXJzYWw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBleGVjdXRlUGVyZm9ybWFuY2VUZXN0cygpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ+fn5+fn5+IFBFUkZPUk1BTkNFIFRFU1RTIFNUQVJURUQgfn5+fn5+fiIpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIn5+fn5+fn4gUlVOTklORyBPTkUgSVRFTSBQRVJGT1JNQU5DRSBURVNUIH5+fn5+fn4iKTsKLSAgICAgICAgZXhlY3V0ZUdldE5leHRQZXJmb3JtYW5jZVRlc3QoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ+fn5+fn5+IFJVTk5JTkcgTElTVCBQRVJGT1JNQU5DRSBURVNUIH5+fn5+fn4iKTsKLSAgICAgICAgZXhlY3V0ZUdldFRvTGlzdFBlcmZvcm1hbmNlVGVzdCgpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIn5+fn5+fn4gUlVOTklORyBUSFJPVUdIUFVUIFBFUkZPUk1BTkNFIFRFU1Qgfn5+fn5+fiIpOwotICAgICAgICBQT09MX1FVRVJZX0NPVU5ULmZvckVhY2gocXVlcnlDb3VudCAtPiB7Ci0gICAgICAgICAgICBQT09MX1NJWkUuZm9yRWFjaChwb29sU2l6ZSAtPiB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ+fn4gUG9vbCBzaXplICIgKyBwb29sU2l6ZSArICIsIHF1ZXJ5IGNvdW50ICIgKyBxdWVyeUNvdW50ICsgIiB+fn4iKTsKLSAgICAgICAgICAgICAgICBleGVjdXRlVGhyb3VnaHB1dFBlcmZvcm1hbmNlVGVzdChwb29sU2l6ZSwgcXVlcnlDb3VudCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigifn5+fn5+fiBQRVJGT1JNQU5DRSBURVNUUyBDT01QTEVURSB+fn5+fn5+Iik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBleGVjdXRlVGhyb3VnaHB1dFBlcmZvcm1hbmNlVGVzdChmaW5hbCBpbnQgcG9vbFNpemUsIGZpbmFsIGludCBxdWVyeUNvdW50KSB7Ci0gICAgICAgIGZpbmFsIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9IGdldERyaXZlclJlbW90ZUNvbm5lY3Rpb24ocG9vbFNpemUpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ2V0R3JhcGhUcmF2ZXJzYWxTb3VyY2UoY29ubmVjdGlvbik7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBnZXRDbGllbnQoZ2V0Q2x1c3Rlcihwb29sU2l6ZSkpOwotICAgICAgICBmaW5hbCBMaXN0PER1cmF0aW9uPiBkdXJhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8Q29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0Pj4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgICAgIGZpbmFsIEluc3RhbnQgc3RhcnQgPSBJbnN0YW50Lm5vdygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcXVlcnlDb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGFyZ3MgPSBnZXRBcmdzKFBPT0xJTkdfVFJBVkVSU0FMX1NJWkUpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFkZChjbGllbnQuc3VibWl0QXN5bmMoZ2V0UHJvamVjdFRyYXZlcnNhbChnLCBQT09MSU5HX1RSQVZFUlNBTF9TSVpFLCBhcmdzKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4gcmVzdWx0IDogcmVzdWx0cykgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0KCkuYWxsKCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsIEluc3RhbnQgZW5kID0gSW5zdGFudC5ub3coKTsKLSAgICAgICAgICAgICAgICBkdXJhdGlvbnMuYWRkKER1cmF0aW9uLmJldHdlZW4oc3RhcnQsIGVuZCkpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIFRpbWluZ0RhdGEgZGF0YSA9IGdldFRpbWluZ0RhdGFGcm9tRHVyYXRpb25MaXN0KGR1cmF0aW9ucyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkYXRhLnRvVGhyb3VnaHB1dCgiUG9vbGluZyIsIHF1ZXJ5Q291bnQpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGV4ZWN1dGVHZXROZXh0UGVyZm9ybWFuY2VUZXN0KCkgewotICAgICAgICBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ2V0R3JhcGhUcmF2ZXJzYWxTb3VyY2UoZ2V0RHJpdmVyUmVtb3RlQ29ubmVjdGlvbihudWxsKSk7Ci0gICAgICAgIGZpbmFsIExpc3Q8RHVyYXRpb24+IGR1cmF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNBTVBMRV9TSVpFOyBpKyspIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gYXJncyA9IGdldEFyZ3MoVkFMVUVfTUFQX1JFUEVBVFMpOwotICAgICAgICAgICAgICAgIGZpbmFsIEluc3RhbnQgc3RhcnRzID0gSW5zdGFudC5ub3coKTsKLSAgICAgICAgICAgICAgICAvLyBleGVjdXRlIGFuZCByZXRyaWV2ZSh0aW1lZCkKLSAgICAgICAgICAgICAgICBnZXRQcm9qZWN0VHJhdmVyc2FsKGcsIFZBTFVFX01BUF9SRVBFQVRTLCBhcmdzKS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgSW5zdGFudCBlbmRzID0gSW5zdGFudC5ub3coKTsKLSAgICAgICAgICAgICAgICBkdXJhdGlvbnMuYWRkKER1cmF0aW9uLmJldHdlZW4oc3RhcnRzLCBlbmRzKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgVGltaW5nRGF0YSBkYXRhID0gZ2V0VGltaW5nRGF0YUZyb21EdXJhdGlvbkxpc3QoZHVyYXRpb25zKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEudG9TdHJpbmdNaWxsaXMoIk9uZSBJdGVtIikpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZXhlY3V0ZUdldFRvTGlzdFBlcmZvcm1hbmNlVGVzdCgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdldEdyYXBoVHJhdmVyc2FsU291cmNlKGdldERyaXZlclJlbW90ZUNvbm5lY3Rpb24obnVsbCkpOwotICAgICAgICBmaW5hbCBMaXN0PER1cmF0aW9uPiBkdXJhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTQU1QTEVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGFyZ3MgPSBnZXRBcmdzKFZBTFVFX01BUF9SRVBFQVRTKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBJbnN0YW50IHN0YXJ0cyA9IEluc3RhbnQubm93KCk7Ci0gICAgICAgICAgICAgICAgLy8gZXhlY3V0ZSBhbmQgcmV0cmlldmUodGltZWQpCi0gICAgICAgICAgICAgICAgZ2V0UHJvamVjdFRyYXZlcnNhbChnLCBWQUxVRV9NQVBfUkVQRUFUUywgYXJncykudG9MaXN0KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgSW5zdGFudCBlbmRzID0gSW5zdGFudC5ub3coKTsKLSAgICAgICAgICAgICAgICBkdXJhdGlvbnMuYWRkKER1cmF0aW9uLmJldHdlZW4oc3RhcnRzLCBlbmRzKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgVGltaW5nRGF0YSBkYXRhID0gZ2V0VGltaW5nRGF0YUZyb21EdXJhdGlvbkxpc3QoZHVyYXRpb25zKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGRhdGEudG9TdHJpbmdNaWxsaXMoIkxpc3QiKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgVGltaW5nRGF0YSBnZXRUaW1pbmdEYXRhRnJvbUR1cmF0aW9uTGlzdChmaW5hbCBMaXN0PER1cmF0aW9uPiBkdXJhdGlvbnMpIHsKLSAgICAgICAgQ29sbGVjdGlvbnMuc29ydChkdXJhdGlvbnMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotICAgICAgICAgICAgZHVyYXRpb25zLnJlbW92ZShkdXJhdGlvbnMuc2l6ZSgpIC0gMSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBUaW1pbmdEYXRhKAotICAgICAgICAgICAgICAgIGR1cmF0aW9ucy5zdHJlYW0oKS5yZWR1Y2UoRHVyYXRpb24uWkVSTywgRHVyYXRpb246OnBsdXMpLmRpdmlkZWRCeShkdXJhdGlvbnMuc2l6ZSgpKSwKLSAgICAgICAgICAgICAgICBkdXJhdGlvbnMuZ2V0KGR1cmF0aW9ucy5zaXplKCkgLyAyKSwKLSAgICAgICAgICAgICAgICBkdXJhdGlvbnMuZ2V0KChpbnQpIChkdXJhdGlvbnMuc2l6ZSgpICogMC45MCkpLAotICAgICAgICAgICAgICAgIGR1cmF0aW9ucy5nZXQoKGludCkgKGR1cmF0aW9ucy5zaXplKCkgKiAwLjk1KSksCi0gICAgICAgICAgICAgICAgZHVyYXRpb25zLmdldCgoaW50KSAoZHVyYXRpb25zLnNpemUoKSAqIDAuMTApKSwKLSAgICAgICAgICAgICAgICBkdXJhdGlvbnMuZ2V0KChpbnQpIChkdXJhdGlvbnMuc2l6ZSgpICogMC4wNSkpLAotICAgICAgICAgICAgICAgIGR1cmF0aW9ucy5nZXQoMCksCi0gICAgICAgICAgICAgICAgZHVyYXRpb25zLmdldChkdXJhdGlvbnMuc2l6ZSgpIC0gMSkKLSAgICAgICAgKTsKLSAgICB9Ci19Ci0KLQotY2xhc3MgVGltaW5nRGF0YSB7Ci0gICAgZmluYWwgRHVyYXRpb24gQVZHOwotICAgIGZpbmFsIER1cmF0aW9uIE1FRElBTjsKLSAgICBmaW5hbCBEdXJhdGlvbiBQRVJDRU5USUxFXzkwOwotICAgIGZpbmFsIER1cmF0aW9uIFBFUkNFTlRJTEVfOTU7Ci0gICAgZmluYWwgRHVyYXRpb24gUEVSQ0VOVElMRV8xMDsKLSAgICBmaW5hbCBEdXJhdGlvbiBQRVJDRU5USUxFXzU7Ci0gICAgZmluYWwgRHVyYXRpb24gTUlOOwotICAgIGZpbmFsIER1cmF0aW9uIE1BWDsKLQotICAgIFRpbWluZ0RhdGEoRHVyYXRpb24gYXZnLCBEdXJhdGlvbiBtZWRpYW4sIER1cmF0aW9uIHBlcmNlbnRpbGVfOTAsIER1cmF0aW9uIHBlcmNlbnRpbGVfOTUsIER1cmF0aW9uIHBlcmNlbnRpbGVfMTAsIER1cmF0aW9uIHBlcmNlbnRpbGVfNSwgRHVyYXRpb24gbWluLAotICAgICAgICAgICAgICAgRHVyYXRpb24gbWF4KSB7Ci0gICAgICAgIEFWRyA9IGF2ZzsKLSAgICAgICAgTUVESUFOID0gbWVkaWFuOwotICAgICAgICBQRVJDRU5USUxFXzkwID0gcGVyY2VudGlsZV85MDsKLSAgICAgICAgUEVSQ0VOVElMRV85NSA9IHBlcmNlbnRpbGVfOTU7Ci0gICAgICAgIFBFUkNFTlRJTEVfMTAgPSBwZXJjZW50aWxlXzEwOwotICAgICAgICBQRVJDRU5USUxFXzUgPSBwZXJjZW50aWxlXzU7Ci0gICAgICAgIE1JTiA9IG1pbjsKLSAgICAgICAgTUFYID0gbWF4OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmdNaWxsaXMoZmluYWwgU3RyaW5nIHRlc3RUeXBlKSB7Ci0gICAgICAgIHJldHVybiAiVGVzdCBUeXBlOiAiICsgdGVzdFR5cGUgKyAiXG4iICsKLSAgICAgICAgICAgICAgICAiXHRBVkc9IiArIEFWRy50b01pbGxpcygpICsgIm1zIFxuIiArCi0gICAgICAgICAgICAgICAgIlx0UEVSQ0VOVElMRV81PSIgKyBQRVJDRU5USUxFXzUudG9NaWxsaXMoKSArICJtcyBcbiIgKwotICAgICAgICAgICAgICAgICJcdFBFUkNFTlRJTEVfMTA9IiArIFBFUkNFTlRJTEVfMTAudG9NaWxsaXMoKSArICJtcyBcbiIgKwotICAgICAgICAgICAgICAgICJcdE1FRElBTj0iICsgTUVESUFOLnRvTWlsbGlzKCkgKyAibXMgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRQRVJDRU5USUxFXzkwPSIgKyBQRVJDRU5USUxFXzkwLnRvTWlsbGlzKCkgKyAibXMgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRQRVJDRU5USUxFXzk1PSIgKyBQRVJDRU5USUxFXzk1LnRvTWlsbGlzKCkgKyAibXMgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRNSU49IiArIE1JTi50b01pbGxpcygpICsgIm1zIFxuIiArCi0gICAgICAgICAgICAgICAgIlx0TUFYPSIgKyBNQVgudG9NaWxsaXMoKSArICJtcyBcbiI7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1Rocm91Z2hwdXQoZmluYWwgU3RyaW5nIHRlc3RUeXBlLCBpbnQgcXVlcnlDb3VudCkgewotICAgICAgICByZXR1cm4gIlRlc3QgVHlwZTogIiArIHRlc3RUeXBlICsgIlxuIiArCi0gICAgICAgICAgICAgICAgIlx0QVZHPSIgKyAoKDEwMDBMICogcXVlcnlDb3VudCkgLyBBVkcudG9NaWxsaXMoKSkgKyAiIHF1ZXJ5L3MgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRQRVJDRU5USUxFXzU9IiArICgoMTAwMEwgKiBxdWVyeUNvdW50KSAvIFBFUkNFTlRJTEVfOTUudG9NaWxsaXMoKSkgKyAiIHF1ZXJ5L3MgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRQRVJDRU5USUxFXzEwPSIgKyAoKDEwMDBMICogcXVlcnlDb3VudCkgLyBQRVJDRU5USUxFXzkwLnRvTWlsbGlzKCkpICsgIiBxdWVyeS9zIFxuIiArCi0gICAgICAgICAgICAgICAgIlx0TUVESUFOPSIgKyAoKDEwMDBMICogcXVlcnlDb3VudCkgLyBNRURJQU4udG9NaWxsaXMoKSkgKyAiIHF1ZXJ5L3MgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRQRVJDRU5USUxFXzkwPSIgKyAoKDEwMDBMICogcXVlcnlDb3VudCkgLyBQRVJDRU5USUxFXzEwLnRvTWlsbGlzKCkpICsgIiBxdWVyeS9zIFxuIiArCi0gICAgICAgICAgICAgICAgIlx0UEVSQ0VOVElMRV85NT0iICsgKCgxMDAwTCAqIHF1ZXJ5Q291bnQpIC8gUEVSQ0VOVElMRV81LnRvTWlsbGlzKCkpICsgIiBxdWVyeS9zIFxuIiArCi0gICAgICAgICAgICAgICAgIlx0TUlOPSIgKyAoKDEwMDBMICogcXVlcnlDb3VudCkgLyBNQVgudG9NaWxsaXMoKSkgKyAiIHF1ZXJ5L3MgXG4iICsKLSAgICAgICAgICAgICAgICAiXHRNQVg9IiArICgoMTAwMEwgKiBxdWVyeUNvdW50KSAvIE1JTi50b01pbGxpcygpKSArICIgcXVlcnkvcyBcbiI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9SRUFETUUubWQgYi9ncmVtbGluLWdvL1JFQURNRS5tZAppbmRleCBmM2JkNGM3Li5kMGQyMjVkIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL1JFQURNRS5tZAorKysgYi9ncmVtbGluLWdvL1JFQURNRS5tZApAQCAtOCw3ICs4LDcgQEAKICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogCi0gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIAogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgpAQCAtNDksNyArNDksNyBAQAogCiBmdW5jIG1haW4oKSB7CiAJLy8gQ3JlYXRpbmcgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciB3aXRoIGRlZmF1bHQgc2V0dGluZ3MuCi0JZHJpdmVyUmVtb3RlQ29ubmVjdGlvbiwgZXJyIDo9IGdyZW1saW5nby5OZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQorCWRyaXZlclJlbW90ZUNvbm5lY3Rpb24sIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQogCS8vIEhhbmRsZSBlcnJvcgogCWlmIGVyciAhPSBuaWwgewogCQlmbXQuUHJpbnRsbihlcnIpCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2J1aWxkL2dlbmVyYXRlLmdyb292eSBiL2dyZW1saW4tZ28vYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5CmluZGV4IDE3NTkyY2EuLjBlZDM5MzcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5CisrKyBiL2dyZW1saW4tZ28vYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgICdcbicgKwogICAgICAgICAnaW1wb3J0IChcbicgKwogICAgICAgICAnXHQgXCJlcnJvcnNcIlxuJyArCi0gICAgICAgICdcdCBcImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzL2RyaXZlclwiXG4nICsKKyAgICAgICAgJ1x0IFwiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjQvZHJpdmVyXCJcbicgKwogICAgICAgICAnXHQgXCJnaXRodWIuY29tL2dvb2dsZS91dWlkXCJcbicgKwogICAgICAgICAnXHQgXCJtYXRoXCJcbicgKwogICAgICAgICAnXHQgXCJ0aW1lXCJcbicgKwpAQCAtNzIsNyArNzIsNyBAQAogICAgICkKIAogICAgIGRlZiBzdGF0aWNUcmFuc2xhdGUgPSBbCi0gICAgImdfd2l0aFNhY2tYMjE0NzQ4MzY0N2lYX2luamVjdFgwXzVmWF9zYWNrWGRpdlhfc2FjayI6IiAgICBcImdfd2l0aFNhY2tYMjE0NzQ4MzY0N2lYX2luamVjdFgwXzVmWF9zYWNrWGRpdlhfc2Fja1wiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuV2l0aFNhY2soaW50MzIoMjE0NzQ4MzY0NykpLkluamVjdCgwLjUpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLkRpdikuU2FjaygpfX0sICIsIC8vU2NlbmFyaW8gZmFpbHMgZHVlIHRvIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9yIGluIEdvIGlmIHRoaXMgaXMgYWxsb3dlZCB0byBjb3JyZWN0bHkgdHJhbnNsYXRlIHRvIGZsb2F0MzIoMC41KQorICAgICAgICAiZ193aXRoU2Fja1gyMTQ3NDgzNjQ3aVhfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrIjoiICAgIFwiZ193aXRoU2Fja1gyMTQ3NDgzNjQ3aVhfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrXCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5XaXRoU2FjayhpbnQzMigyMTQ3NDgzNjQ3KSkuSW5qZWN0KDAuNSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuRGl2KS5TYWNrKCl9fSwgIiwgLy9TY2VuYXJpbyBmYWlscyBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3IgaW4gR28gaWYgdGhpcyBpcyBhbGxvd2VkIHRvIGNvcnJlY3RseSB0cmFuc2xhdGUgdG8gZmxvYXQzMigwLjUpCiAgICAgXQogCiAgICAgZ3JlbWxpbnMuZWFjaCB7IGssdiAtPgpAQCAtODQsNyArODQsNiBAQAogICAgICAgICAgICAgd3JpdGVyLndyaXRlKGspCiAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIlwiOiB7IikKICAgICAgICAgICAgIGRlZiBjb2xsZWN0ZWQgPSB2LmNvbGxlY3QgeyBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoaXQsIFRyYW5zbGF0b3IuR08pIH0KLSAgICAgICAgICAgIGRlZiB1bmlxdWVCaW5kaW5ncyA9IGNvbGxlY3RlZC5jb2xsZWN0IHsgaXQuZ2V0UGFyYW1ldGVycygpIH0uZmxhdHRlbigpLnVuaXF1ZSgpCiAgICAgICAgICAgICBkZWYgZ3JlbWxpbkl0dHkgPSBjb2xsZWN0ZWQuaXRlcmF0b3IoKQogICAgICAgICAgICAgd2hpbGUgKGdyZW1saW5JdHR5Lmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgIGRlZiB0ID0gZ3JlbWxpbkl0dHkubmV4dCgpCkBAIC05Miw3ICs5MSw3IEBACiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKHQuZ2V0VHJhbnNsYXRlZCgpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VBbGwoInh4KFswLTldKykiLCAicFtcInh4XCQxXCJdIikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUFsbCgidihbMC05XSspIiwgInBbXCJ2XCQxXCJdIikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUFsbCgiXi12KFswLTldKyleLSIsICJwW1widlwkMVwiXSIpLiAvLyB1c2luZyBeLSB0byBhdm9pZCBtYXRjaGluZyBvbiBnLmlvKCkgdGVzdHMgLSB1bmV4cGVjdGVkIHNpZGUtZWZmZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUFsbCgidmlkKFswLTldKykiLCAicFtcInZpZFwkMVwiXSIpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VBbGwoImUoWzAtOV0rKSIsICJwW1wiZVwkMVwiXSIpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VBbGwoImVpZChbMC05XSspIiwgInBbXCJlaWRcJDFcIl0iKS4KQEAgLTEyMSw5ICsxMjAsNiBAQAogICAgICcgICAgICAgICAgIHRyYXZlcnNhbEZuIDo9IHRyYXZlcnNhbEZuc1swXVxuJyArCiAgICAgJyAgICAgICAgICAgdHJhbnNsYXRpb25NYXBbc2NlbmFyaW9OYW1lXSA9IHRyYXZlcnNhbEZuc1sxOl1cbicgKwogICAgICcgICAgICAgICAgIHRyYXZlcnNhbCA6PSB0cmF2ZXJzYWxGbihnLCBwYXJhbWV0ZXJzKVxuJyArCi0gICAgJyAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgOj0gcmFuZ2Ugc2lkZUVmZmVjdHMge1xuJyArCi0gICAgJyAgICAgICAgICAgICAgIHRyYXZlcnNhbC5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTaWRlRWZmZWN0Iiwga2V5LCB2YWx1ZSlcbicgKwotICAgICcgICAgICAgICAgIH1cbicgKwogICAgICcgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwsIG5pbFxuJyArCiAgICAgJyAgICAgICB9IGVsc2Uge1xuJyArCiAgICAgJyAgICAgICAgICAgcmV0dXJuIG5pbCwgZXJyb3JzLk5ldygic2NlbmFyaW8gZm9yIHRyYXZlcnNhbCBub3QgcmVjb2duaXplZCIpXG4nICsKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZGVzaWduLm1kIGIvZ3JlbWxpbi1nby9kZXNpZ24ubWQKaW5kZXggOTdiNDhmYi4uNTM4NmVjNiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kZXNpZ24ubWQKKysrIGIvZ3JlbWxpbi1nby9kZXNpZ24ubWQKQEAgLTM1LDI4ICszNSwyMyBAQAogCiBBIGBDbGllbnRgIHJlcHJlc2VudHMgdGhlIGVudHJ5IHBvaW50IHRvIGludGVyYWN0aW9uIHdpdGggYSBHcmVtbGluLXN1cHBvcnRlZCBzZXJ2ZXIuIEEgVVJMIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgY29uc3RydWN0aW9uLCB3aXRoIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHN1Y2ggYXMgSFRUUCBoZWFkZXJzIGFuZCBUTFMgY29uZmlndXJhdGlvbiBhdmFpbGFibGUuCiAKLVRoZSBgQ2xpZW50YCBoYXMgdHdvIG1haW4gcmVzcG9uc2liaWxpdGllczoKLQotKiBIYW5kbGVzIGluaXRpYWxpemF0aW9uIGFuZCBjb25maWd1cmF0aW9uLgotKiBIYW5kbGVzIGNyZWF0aW9uIGFuZCBhbGxvY2F0aW9uIChpLmUuIHBvb2xpbmcpIG9mIGBjb25uZWN0aW9uYCB0eXBlcy4KLQogIyMjIyMgQ2FyZGluYWxpdGllcwogCi0qIE9uZSBgY29ubmVjdGlvblBvb2wKKyogT25lIGBjb25uZWN0aW9uYAogCiAjIyMjIyBMaWZlY3ljbGUgYW5kIFN0YXRlcwogCiAqIFRoZSBgQ2xpZW50YCBkb2VzIG5vdCB0cmFjayBvciBoYXZlIGFueSByZWFsIHN0YXRlLgotKiBIb3dldmVyLCBgQ2xvc2UoKWAgY2FuIGJlIGludm9rZWQgb24gYSBgQ2xpZW50YCBpbiBvcmRlciB0byBjbG9zZSBhbnkgaW5zdGFuY2VzIG9mIGBjb25uZWN0aW9uYCB0aGF0IGluIGl0cyBjdXJyZW50IGBjb25uZWN0aW9uUG9vbGAuCisqIEhvd2V2ZXIsIGBDbG9zZSgpYCBjYW4gYmUgaW52b2tlZCBvbiBhIGBDbGllbnRgIGluIG9yZGVyIHRvIGNsb3NlIGFueSBpbnN0YW5jZXMgY2xpZW50IHJlc291cmNlcy4KIAogYGBgbWVybWFpZAogY2xhc3NEaWFncmFtCiAJY2xhc3MgQ2xpZW50Ci0JQ2xpZW50OiBwb29sIGNvbm5lY3Rpb25Qb29sCisJQ2xpZW50OiBjb25uICpjb25uZWN0aW9uCiAJQ2xpZW50OiBOZXdDbGllbnQoaG9zdCwgY29uZmlndXJhdGlvbnMpIENsaWVudAogCUNsaWVudDogQ2xvc2UoKQogCUNsaWVudDogU3VibWl0KHRyYXZlcnNhbCkgUmVzdWx0U2V0Ci0JQ2xpZW50OiBzdWJtaXQoYnl0ZWNvZGUpIFJlc3VsdFNldAorCUNsaWVudDogU3VibWl0V2l0aE9wdGlvbnModHJhdmVyc2FsU3RyaW5nLCBvcHRpb25zKSBSZXN1bHRTZXQKIGBgYAogCiBgYGBtZXJtYWlkCkBAIC02OSw5NCArNjQsMzggQEAKIAkKIGBgYAogCi0jIyMjIGNvbm5lY3Rpb25Qb29sCi0KLUEgYGNvbm5lY3Rpb25Qb29sYCBpcyBhIGNvbGxlY3Rpb24gb2YgYGNvbm5lY3Rpb25gLiBUaGUgaW1wbGVtZW50YXRpb24gdXNlZCBpcyBhIGBsb2FkQmFsYW5jaW5nUG9vbGAuIEl0IGF0dGVtcHRzIHRvIGV2ZW5seSBsb2FkIGJhbGFuY2UgdHJhdmVyc2FscyBieSBkZWxlZ2F0aW5nIGl0IHRvIHRoZSBsZWFzdC1idXN5IGNvbm5lY3Rpb24gaW4gdGhlIHBvb2wuIFRoZSBgbG9hZEJhbGFuY2luZ1Bvb2xgIGhhcyBhIG1heGltdW0gY29ubmVjdGlvbiBjb3VudCwgYW5kIGEgYG5ld0Nvbm5lY3Rpb25UaGVzaG9sZGAsIHdoZXJlIGlmIHRoZSBjdXJyZW50bHkgbGVhc3QtdXNlZCBjb25uZWN0aW9uIGhhcyByZWFjaGVkLCB3aWxsIHRyaWdnZXIgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGBjb25uZWN0aW9uYCBmb3IgdXNlLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgYGNvbm5lY3Rpb25gIHRoYXQgc2l0IHVudXNlZCwgYWxsIGJ1dCBvbmUgd2lsbCBiZSBgY2xvc2VkYCBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBwb29sLgotCi0jIyMjIyBDYXJkaW5hbGl0aWVzCi0KLSogTWFueSBgY29ubmVjdGlvbmAKLQotIyMjIyMgTGlmZWN5Y2xlIGFuZCBTdGF0ZXMKLQotKiBObyBzdGF0ZXMsIGJ1dCB3aGVuIGBjbG9zZSgpYCBpbiBpbnZva2VkLCBhbGwgYGNvbm5lY3Rpb25gIGhhdmUgdGhlaXIgcmVzcGVjdGl2ZSBgY2xvc2UoKWAgbWV0aG9kIGludm9rZWQgYXN5bmNocm9ub3VzbHkgYW5kIGFyZSByZW1vdmVkIGZyb20gdGhlIHBvb2wuCi0KICMjIyMgY29ubmVjdGlvbgogCi1BIGBjb25uZWN0aW9uYCByZXByZXNlbnRzIGFuIGluZGl2aWR1YWwgY29tbXVuaWNhdGlvbiBjb21wb25lbnQgd2l0aCBhIEdyZW1saW4gU2VydmVyLiBBIGBjb25uZWN0aW9uYCBoYXMgdGhlIHNvbGUgcmVzcG9uc2liaWxpdHkgb2YgYmVpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsIHRvIGEgR3JlbWxpbiBTZXJ2ZXIsIHByb3ZpZGluZyB0aGUgaW50ZXJmYWNlIGZvciBzZW5kaW5nIHJlcXVlc3RzIHRvIHNhaWQgc2VydmVyLCBhcyB3ZWxsIGFzIGhvbGRpbmcgcmVzcG9uc2UgYFJlc3VsdFNldGAgaW5zdGFuY2VzIHRvIGNvbnN1bWUgcmVzcG9uc2VzIGFzeW5jaHJvbm91c2x5IHVudGlsIHRoZXkgYXJlIGNvbnN1bWVkLgorVGhlIGBjb25uZWN0aW9uYCBlbnRpdHkgaXMgdGhlIHVuaWZpZWQgSFRUUCBjb21tdW5pY2F0aW9uIGxheWVyIHRoYXQgaGFuZGxlcyBzZXJpYWxpemF0aW9uLCBIVFRQIHJlcXVlc3QvcmVzcG9uc2UsIGFuZCBzdHJlYW1pbmcgZGVzZXJpYWxpemF0aW9uLiBJdCBtYW5hZ2VzIHRoZSBsaWZlY3ljbGUgb2YgcmVxdWVzdHMgc2VudCB0byBhbmQgcmVzcG9uc2VzIHJlY2VpdmVkIGZyb20gYSBHcmVtbGluIFNlcnZlci4gVXBvbiBzZW5kaW5nIGEgcmVxdWVzdCwgdGhlIGBjb25uZWN0aW9uYCBzdGFydHMgYSBgZ29yb3V0aW5lYCB0byBhc3luY2hyb25vdXNseSBzdHJlYW0gYW5kIHBvcHVsYXRlIGRhdGEgaW50byBhIGBSZXN1bHRTZXRgLgogCiAjIyMjIyBDYXJkaW5hbGl0aWVzCiAKLSogT25lIGBwcm90b2NvbGAKLSogTXVsdGlwbGUgdGVtcG9yYXJ5IGluc3RhbmNlcyBvZiBgUmVzdWx0U2V0YAorKiBPbmUgYHNlcmlhbGl6ZXJgCisqIE9uZSBgaHR0cC5DbGllbnRgCiAKICMjIyMjIExpZmVjeWNsZSBhbmQgU3RhdGVzCiAKLSogU3RhdGVzCi0gICogYGluaXRpYWxpemVkYAotICAqIGBlc3RhYmxpc2hlZGAKLSAgKiBgY2xvc2VkYAotICAqIGBjbG9zZWREdWVUb0Vycm9yYAotKiBXaGVuIGBjbG9zZSgpYCBpcyBpbnZva2VkLCBzZXQgdGhlIHN0YXRlIHRvIGBjbG9zZWRgIGFuZCBhbHNvIGludm9rZSBgY2xvc2UoKWAgb24gdGhlIGBwcm90b2NvbGAuCisqIFdoZW4gYGNsb3NlKClgIGlzIGludm9rZWQsIGlkbGUgSFRUUCBjb25uZWN0aW9ucyBhcmUgY2xvc2VkLgogCiBgYGBtZXJtYWlkCiBjbGFzc0RpYWdyYW0KIAljbGFzcyBjb25uZWN0aW9uCi0JY29ubmVjdGlvbjogcHJvdG9jb2wgKnByb3RvY29sCi0JY29ubmVjdGlvbjogcmVzdWx0cyAibWFwW3N0cmluZ11SZXN1bHRTZXQiCi0JY29ubmVjdGlvbjogc3RhdGUgY29ubmVjdGlvblN0YXRlCisJY29ubmVjdGlvbjogaHR0cENsaWVudCAqaHR0cC5DbGllbnQKKwljb25uZWN0aW9uOiBzZXJpYWxpemVyICpHcmFwaEJpbmFyeVNlcmlhbGl6ZXIKKwljb25uZWN0aW9uOiBjb25uU2V0dGluZ3MgKmNvbm5lY3Rpb25TZXR0aW5ncwogCWNvbm5lY3Rpb246IGNsb3NlKCkKLQljb25uZWN0aW9uOiBjcmVhdGVDb25uZWN0aW9uKGhvc3QpCi0JY29ubmVjdGlvbjogd3JpdGUocmVxdWVzdCkgUmVzdWx0U2V0CisJY29ubmVjdGlvbjogc3VibWl0KHJlcXVlc3QpIFJlc3VsdFNldAogYGBgCiAKIGBgYG1lcm1haWQKIHNlcXVlbmNlRGlhZ3JhbQotCUNsaWVudC0+PmNvbm5lY3Rpb24oUG9vbCk6IHdyaXRlKCkKLQljb25uZWN0aW9uLT4+cHJvdG9jb2w6IHdyaXRlKFJlc3VsdFNldCkKLQlwcm90b2NvbC0tPj5jb25uZWN0aW9uKFBvb2wpOiBSZXN1bHRTZXQKLQlsb29wIFJlYWRsb29wCi0JCXByb3RvY29sLT4+cHJvdG9jb2w6IEFzeW5jIHBvcHVsYXRpb24gb2YgUmVzdWx0U2V0Ci0JZW5kCi0JY29ubmVjdGlvbi0tPj5DbGllbnQ6IFJlc3VsdFNldAotCQotYGBgCi0KLSMjIyMgcHJvdG9jb2wKLQotVGhlIGBwcm90b2NvbGAgZW50aXR5IGhhbmRsZXMgaW52b2tpbmcgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uIG9mIGRhdGEsIGFzIHdlbGwgYXMgaGFuZGxpbmcgdGhlIGxpZmVjeWNsZSBvZiByYXcgZGF0YSBwYXNzZWQgdG8gYW5kIHJlY2VpdmVkIGZyb20gdGhlIGB0cmFuc3BvcnRlcmAgbGF5ZXIuIFVwb24gY3JlYXRpb24sIGFuIGluc3RhbmNlIG9mIGBwcm90b2NvbGAgc3RhcnRzIGEgYGdvcm91dGluZWAgdG8gYXN5bmNocm9ub3VzbHkgcmVhZCBhbmQgcG9wdWxhdGUgZGF0YSBpbnRvIGEgIGBSZXN1bHRTZXRgIHRoYXQgaXMgb3duZWQgYnkgdGhlIHBhcmVudCBgY29ubmVjdGlvbmAuCi0KLSMjIyMjIENhcmRpbmFsaXRpZXMKLQotKiBPbmUgYHRyYW5zcG9ydGVyYAotKiBPbmUgYHNlcmlhbGl6ZXJgCi0KLSMjIyMjIExpZmVjeWNsZSBhbmQgU3RhdGVzCi0KLSogU3RhdGVzCi0gICogYGNsb3NlZCBib29sYAotKiBXaGVuIGBjbG9zZSgpYCBpcyBpbnZva2VkLCBzZXQgdGhlIGBjbG9zZWRgIGJvb2xlYW4gdG8gYHRydWVgIHdoaWNoIHdpbGwgdGVybWluYXRlIHRoZSBgZ29yb3V0aW5lYCB1c2VkIGZvciBhc3luY2hyb25vdXNseSByZWFkaW5nLCBhbmQgaW52b2tlIGBjbG9zZSgpYCBvbiB0aGUgYHRyYW5zcG9ydGVyYC4KLQotYGBgbWVybWFpZAotY2xhc3NEaWFncmFtCi0JY2xhc3MgcHJvdG9jb2wKLQlwcm90b2NvbDogdHJhbnNwb3J0ZXIgKnRyYW5zcG9ydGVyCi0JcHJvdG9jb2w6IHNlcmlhbGl6ZXIgKnNlcmlhbGl6ZXIKLQlwcm90b2NvbDogY2xvc2UoKQotCXByb3RvY29sOiB3cml0ZShyZXF1ZXN0KQotCXByb3RvY29sOiByZWFkTG9vcChtYXBbc3RyaW5nXVJlc3VsdFNldCkKLWBgYAotCi1gYGBtZXJtYWlkCi1zZXF1ZW5jZURpYWdyYW0KLQljb25uZWN0aW9uLT4+cHJvdG9jb2w6IHdyaXRlKHJlcXVlc3QpCi0JcHJvdG9jb2wtPj5zZXJpYWxpemVyOiBzZXJpYWxpemVNZXNzYWdlKHJlcXVlc3QpCi0Jc2VyaWFsaXplci0tPj5wcm90b2NvbDogYnl0ZXMKLQlwcm90b2NvbC0+PnRyYW5zcG9ydGVyOiBXcml0ZShieXRlcykKLQl0cmFuc3BvcnRlci0tPj5wcm90b2NvbDogcmVzcG9uc2UKLQlwcm90b2NvbC0+PnNlcmlhbGl6ZXI6IGRlc2VyaWFsaXplTWVzc2FnZShyZXNwb25zZSkKLQlzZXJpYWxpemVyLS0+PnByb3RvY29sOiBwb3B1bGF0aW9uIG9mIFJlc3VsdFNldAotCXByb3RvY29sLS0+PmNvbm5lY3Rpb246IHBvcHVsYXRpb24gb2YgUmVzdWx0U2V0CisgICAgQ2xpZW50LT4+Y29ubmVjdGlvbjogc3VibWl0KHJlcXVlc3QpCisgICAgY29ubmVjdGlvbi0tPj5DbGllbnQ6IFJlc3VsdFNldAorCWNvbm5lY3Rpb24tPj5zZXJpYWxpemVyOiBTZXJpYWxpemVNZXNzYWdlKHJlcXVlc3QpCisJc2VyaWFsaXplci0tPj5jb25uZWN0aW9uOiBieXRlcworCWNvbm5lY3Rpb24tPj5odHRwQ2xpZW50OiBEbyhodHRwUmVxdWVzdCkKKwlodHRwQ2xpZW50LS0+PmNvbm5lY3Rpb246IGh0dHBSZXNwb25zZQorICAgIGNvbm5lY3Rpb24tPj5jb25uZWN0aW9uOiBzdHJlYW1Ub1Jlc3VsdFNldCAoYXN5bmMpCiAJCiAKIGBgYApAQCAtMTgwLDI4ICsxMTksNiBAQAogCXNlcmlhbGl6ZXI6IGRlc2VyaWFsaXplTWVzc2FnZShbXWJ5dGUpIHJlc3BvbnNlCiBgYGAKIAotIyMjIyB0cmFuc3BvcnRlcgotCi1UaGUgYHRyYW5zcG9ydGVyYCBpcyBhbiBpbnRlcmZhY2UgdGhhdCBkZXNjcmliZXMgdGhlIGxvd2VzdC1sZXZlbCBtZXRob2RzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciBzZW5kaW5nIGFuZCByZWNlaXZpbmcgcmVxdWVzdHMsIHdoaWNoIGltcGxlbWVudGluZyB0eXBlcyBhcmUgb25lcyB0aGF0IGFyZSBpbXBsZW1lbnRhdGlvbnMgb2YgbmV0d29yayBwcm90b2NvbHMuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZWQgZm9yIEdyZW1saW4tR28gaXMgW0dvcmlsbGEgV2ViU29ja2V0XShodHRwczovL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQpLCBhIEdvIGltcGxlbWVudGF0aW9uIG9mIHRoZSBXZWJTb2NrZXQgcHJvdG9jb2wuCi0KLSMjIyMjIENhcmRpbmFsaXRpZXMgKEdvcmlsbGEpCi0KLSogTm9uZQotCi0jIyMjIyBMaWZlY3ljbGUgYW5kIFN0YXRlcwotCi0qIFRoZSBgdHJhbnNwb3J0ZXJgIGludGVyZmFjZSByZXF1aXJlcyBtZXRob2QgYGNsb3NlKClgLCB3aGljaCBjbG9zZXMgdGhlIG5ldHdvcmsgcHJvdG9jb2wgZGVwZW5kaW5nIG9uIGl0cyBpbXBsZW1lbnRhdGlvbi4KLQotYGBgbWVybWFpZAotY2xhc3NEaWFncmFtCi0JY2xhc3MgdHJhbnNwb3J0ZXIKLQl0cmFuc3BvcnRlcjogQ29ubmVjdCgpCi0JdHJhbnNwb3J0ZXI6IFdyaXRlKFtdYnl0ZSkKLQl0cmFuc3BvcnRlcjogUmVhZChbXWJ5dGUpCi0JdHJhbnNwb3J0ZXI6IENsb3NlKCkKLQl0cmFuc3BvcnRlcjogSXNDbG9zZWQoKSBib29sCi1gYGAKLQogIyMjIyBSZXN1bHQKIAogQSBgUmVzdWx0YCByZXByZXNlbnRzIGFuIGluZGl2aWR1YWwgb3V0cHV0IGZyb20gYSBHcmVtbGluIHRyYXZlcnNhbCBxdWVyeS4gSXRzIGludGVyZmFjZSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byB0cmFuc2Zvcm0gdGhlIG91dHB1dCBpbnRvIEdvIGRhdGEgdHlwZXMgZm9yIHVzZS4KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZG9ja2VyLWNvbXBvc2UueW1sIGIvZ3JlbWxpbi1nby9kb2NrZXItY29tcG9zZS55bWwKaW5kZXggMTFhZDJkZi4uMzcyMDYxNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kb2NrZXItY29tcG9zZS55bWwKKysrIGIvZ3JlbWxpbi1nby9kb2NrZXItY29tcG9zZS55bWwKQEAgLTM1LDEzICszNSwxMSBAQAogICAgICAgLSAke0hPTUV9Ly5tMjovcm9vdC8ubTIKICAgICAgIC0gJHtBQlNfUFJPSkVDVF9IT01FfS9ncmVtbGluLXRlc3QvdGFyZ2V0Oi9vcHQvZ3JlbWxpbi10ZXN0CiAgICAgaGVhbHRoY2hlY2s6Ci0gICAgICB0ZXN0OiBbICJDTUQtU0hFTEwiLCAiYXBrIGFkZCBjdXJsICYmIGN1cmwgLWYgaHR0cDovL2xvY2FsaG9zdDo0NTk0MD9ncmVtbGluPTEwMC0xIiBdCisgICAgICB0ZXN0OiBbICJDTUQtU0hFTEwiLCAiY3VybCAtc2YgLVggUE9TVCAtSCAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyAtZCAne1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSlcIn0nIGh0dHA6Ly9sb2NhbGhvc3Q6NDU5NDAiIF0KICAgICAgIGludGVydmFsOiAzMHMKICAgICAgIHRpbWVvdXQ6IDEwcwogICAgICAgcmV0cmllczogMzAKICAgICAgIHN0YXJ0X3BlcmlvZDogMzBzCi0gICAgZGVwZW5kc19vbjoKLSAgICAgIC0gZ3JlbWxpbi1zb2NrZXQtc2VydmVyCiAKICAgZ3JlbWxpbi1nby1pbnRlZ3JhdGlvbi10ZXN0czoKICAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1nby1pbnRlZ3JhdGlvbi10ZXN0cwpAQCAtNTAsMTYgKzQ4LDEzIEBACiAgICAgICAtIC46L2dvX2FwcAogICAgICAgLSAuLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlczovZ3JlbWxpbi10ZXN0CiAgICAgICAtIC4uL2RvY2tlci9ncmVtbGluLXRlc3Qtc2VydmVyOi9nb19hcHAvZ3JlbWxpbi10ZXN0LXNlcnZlcgotICAgICAgLSAuLi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mOi9nb19hcHAvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmYvCiAgICAgZW52aXJvbm1lbnQ6CiAgICAgICAtIENVQ1VNQkVSX0ZFQVRVUkVfRk9MREVSPS9ncmVtbGluLXRlc3QKLSAgICAgIC0gR1JFTUxJTl9TRVJWRVJfVVJMPXdzOi8vZ3JlbWxpbi1zZXJ2ZXItdGVzdDo0NTk0MC9ncmVtbGluCi0gICAgICAtIEdSRU1MSU5fU0VSVkVSX0JBU0lDX0FVVEhfVVJMPXdzczovL2dyZW1saW4tc2VydmVyLXRlc3Q6NDU5NDEvZ3JlbWxpbgorICAgICAgLSBHUkVNTElOX1NFUlZFUl9VUkw9aHR0cDovL2dyZW1saW4tc2VydmVyLXRlc3Q6NDU5NDAvZ3JlbWxpbgorICAgICAgLSBHUkVNTElOX1NFUlZFUl9CQVNJQ19BVVRIX1VSTD1odHRwczovL2dyZW1saW4tc2VydmVyLXRlc3Q6NDU5NDEvZ3JlbWxpbgogICAgICAgLSBSVU5fSU5URUdSQVRJT05fVEVTVFM9dHJ1ZQogICAgICAgLSBSVU5fSU5URUdSQVRJT05fV0lUSF9BTElBU19URVNUUz10cnVlCiAgICAgICAtIFJVTl9CQVNJQ19BVVRIX0lOVEVHUkFUSU9OX1RFU1RTPXRydWUKLSAgICAgIC0gR1JFTUxJTl9TT0NLRVRfU0VSVkVSX1VSTD13czovL2dyZW1saW4tc29ja2V0LXNlcnZlci1nbwotICAgICAgLSBHUkVNTElOX1NPQ0tFVF9TRVJWRVJfQ09ORklHX1BBVEg9L2dvX2FwcC9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvY29uZi90ZXN0LXdzLWdyZW1saW4ueWFtbAogICAgICAgLSBWRVJURVhfTEFCRUw9Z28tZXhhbXBsZQogICAgIHdvcmtpbmdfZGlyOiAvZ29fYXBwCiAgICAgY29tbWFuZDogPgpAQCAtNzMsOSArNjgsMyBAQAogICAgIGRlcGVuZHNfb246CiAgICAgICBncmVtbGluLXNlcnZlci10ZXN0OgogICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQotCi0gIGdyZW1saW4tc29ja2V0LXNlcnZlcjoKLSAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1zb2NrZXQtc2VydmVyLWdvCi0gICAgaW1hZ2U6IHRpbmtlcnBvcC9ncmVtbGluLXNvY2tldC1zZXJ2ZXI6JHtHUkVNTElOX1NFUlZFUn0KLSAgICBwb3J0czoKLSAgICAgIC0gIjQ1OTQzOjQ1OTQzIgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvUkVBRE1FLm1kIGIvZ3JlbWxpbi1nby9kcml2ZXIvUkVBRE1FLm1kCmluZGV4IDgxYTFmNWIuLmNiOTQxMjAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL1JFQURNRS5tZAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9SRUFETUUubWQKQEAgLTgsNyArOCw3IEBACiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIAotIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAKICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KQEAgLTIyLDcgKzIyLDcgQEAKIAogIyMgUHJlcmVxdWlzaXRlcwogCi0qIGBncmVtbGluLWdvYCByZXF1aXJlcyBHb2xhbmcgMS4yMiBvciBsYXRlciwgcGxlYXNlIHNlZSBbR28gRG93bmxvYWRdW2dvXSBmb3IgbW9yZSBkZXRhaWxzIG9uIGluc3RhbGxpbmcgR29sYW5nLgorKiBgZ3JlbWxpbi1nb2AgcmVxdWlyZXMgR29sYW5nIDEuMjUgb3IgbGF0ZXIsIHBsZWFzZSBzZWUgW0dvIERvd25sb2FkXVtnb10gZm9yIG1vcmUgZGV0YWlscyBvbiBpbnN0YWxsaW5nIEdvbGFuZy4KICogQSBiYXNpYyB1bmRlcnN0YW5kaW5nIG9mIFtHbyBNb2R1bGVzXVtnb21vZHNdCiAqIEEgcHJvamVjdCBzZXQgdXAgd2hpY2ggdXNlcyBHbyBNb2R1bGVzCiAKQEAgLTUzLDEzICs1MywxMiBAQAogCiBnbyAxLjI1CiAKLXJlcXVpcmUgZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28gdjAuMC4wLTIwMjIwMTMxMjI1MTUyLTU0OTIwNjM3YmY5NAorcmVxdWlyZSBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92MyB2PHZlcnNpb24+CiAKIHJlcXVpcmUgKAotCWdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQgdjEuMy4wIC8vIGluZGlyZWN0Ci0JZ2l0aHViLmNvbS9nb3JpbGxhL3dlYnNvY2tldCB2MS40LjIgLy8gaW5kaXJlY3QKLQlnaXRodWIuY29tL25pY2tzbnlkZXIvZ28taTE4bi92MiB2Mi4xLjIgLy8gaW5kaXJlY3QKLQlnb2xhbmcub3JnL3gvdGV4dCB2MC4zLjcgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2dvb2dsZS91dWlkIHYxLjYuMCAvLyBpbmRpcmVjdAorCWdpdGh1Yi5jb20vbmlja3NueWRlci9nby1pMThuL3YyIHYyLjYuMCAvLyBpbmRpcmVjdAorCWdvbGFuZy5vcmcveC90ZXh0IHYwLjMyLjAgLy8gaW5kaXJlY3QKICkKIGBgYAogQXMgd2VsbCBhcyBhIHBvcHVsYXRlZCBgZ28uc3VtYCBmaWxlLgpAQCAtNzIsMTUgKzcxLDEyIEBACiAjIyBUcm91Ymxlc2hvb3RpbmcKIAogIyMjIENhbid0IGVzdGFibGlzaCBjb25uZWN0aW9uIGFuZCBnZXQgYW55IHJlc3VsdAotKiBWZXJpZnkgeW91IGFyZSB1c2luZyB2YWxpZCBzZXJ2ZXIgcHJvdG9jb2wgYW5kIHBhdGguIE5vdGUgdGhhdCBmb3Igc2VjdXJlIGNvbm5lY3Rpb24gYHdzc2Agc2hvdWxkIGJlIHVzZWQuCisqIFZlcmlmeSB5b3UgYXJlIHVzaW5nIHZhbGlkIHNlcnZlciBwcm90b2NvbCBhbmQgcGF0aC4gTm90ZSB0aGF0IGZvciBzZWN1cmUgY29ubmVjdGlvbiBgaHR0cHNgIHNob3VsZCBiZSB1c2VkLgogKiBWZXJpZnkgZmlyZXdhbGwgc2V0dGluZ3MuCiAKICMjIyBMb2NhbCBzZXJ2ZXIgZG9lc24ndCBoYXZlIHZhbGlkIGNlcnRpZmljYXRlCiAqIFNldCBjb25uZWN0aW9uIG9wdGlvbiAmdGxzLkNvbmZpZ3tJbnNlY3VyZVNraXBWZXJpZnk6IHRydWV9CiAKLSMjIyBDbGllbnQgaGFuZ3Mgb24gcmVxdWVzdHMgd2l0aCBsYXJnZSBhbW91bnQgb2YgZGF0YQotKiBJbmNyZWFzZSByZWFkIGJ1ZmZlciBzaXplIGJ5IHNldHRpbmdzIGNvbm5lY3Rpb24gb3B0aW9uIGByZWFkQnVmZmVyU2l6ZWAuCi0KICMgR3JlbWxpbi1HbyBEZXZlbG9wbWVudAogCiAjIyBEZXNpZ24gQXJjaGl0ZWN0dXJlCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9hbm9ueW1vdXNUcmF2ZXJzYWwuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9hbm9ueW1vdXNUcmF2ZXJzYWwuZ28KaW5kZXggNWE2M2RmMC4uOGExNmViOSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvYW5vbnltb3VzVHJhdmVyc2FsLmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL2Fub255bW91c1RyYXZlcnNhbC5nbwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJTWVyZ2VWKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbAogCS8vIE1pbiBhZGRzIHRoZSBtaW4gc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiAJTWluKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbAotCS8vIE5vbmUgYWRkcyB0aGUgbm90IHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgorCS8vIE5vbmUgYWRkcyB0aGUgbm9uZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIAlOb25lKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbAogCS8vIE5vdCBhZGRzIHRoZSBub3Qgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiAJTm90KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbApAQCAtMzM3LDcgKzMzNyw3IEBACiAKIHZhciBUX18gQW5vbnltb3VzVHJhdmVyc2FsID0gJmFub255bW91c1RyYXZlcnNhbHsKIAlmdW5jKCkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJcmV0dXJuIE5ld0dyYXBoVHJhdmVyc2FsKG5pbCwgTmV3Qnl0ZWNvZGUobmlsKSwgbmlsKQorCQlyZXR1cm4gTmV3R3JhcGhUcmF2ZXJzYWwobmlsLCBOZXdHcmVtbGluTGFuZyhuaWwpLCBuaWwpCiAJfSwKIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvYXV0aC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2F1dGguZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBmMjc5MQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL2F1dGguZ28KQEAgLTAsMCArMSwxMTkgQEAKKy8qCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGdyZW1saW5nbworCitpbXBvcnQgKAorCSJjb250ZXh0IgorCSJlbmNvZGluZy9iYXNlNjQiCisJImZtdCIKKwkic3luYyIKKwkidGltZSIKKworCSJnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2F3cyIKKwl2NCAiZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9hd3Mvc2lnbmVyL3Y0IgorCSJnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2NvbmZpZyIKKykKKworLy8gQmFzaWNBdXRoIHJldHVybnMgYSBSZXF1ZXN0SW50ZXJjZXB0b3IgdGhhdCBhZGRzIEJhc2ljIGF1dGhlbnRpY2F0aW9uIGhlYWRlci4KK2Z1bmMgQmFzaWNBdXRoKHVzZXJuYW1lLCBwYXNzd29yZCBzdHJpbmcpIFJlcXVlc3RJbnRlcmNlcHRvciB7CisJZW5jb2RlZCA6PSBiYXNlNjQuU3RkRW5jb2RpbmcuRW5jb2RlVG9TdHJpbmcoW11ieXRlKHVzZXJuYW1lICsgIjoiICsgcGFzc3dvcmQpKQorCXJldHVybiBmdW5jKHJlcSAqSHR0cFJlcXVlc3QpIGVycm9yIHsKKwkJcmVxLkhlYWRlcnMuU2V0KEhlYWRlckF1dGhvcml6YXRpb24sICJCYXNpYyAiK2VuY29kZWQpCisJCXJldHVybiBuaWwKKwl9Cit9CisKKy8vIFNpZ1Y0QXV0aCByZXR1cm5zIGEgUmVxdWVzdEludGVyY2VwdG9yIHRoYXQgc2lnbnMgcmVxdWVzdHMgdXNpbmcgQVdTIFNpZ1Y0LgorLy8gSXQgdXNlcyB0aGUgZGVmYXVsdCBBV1MgY3JlZGVudGlhbCBjaGFpbiAoZW52IHZhcnMsIHNoYXJlZCBjb25maWcsIElBTSByb2xlLCBldGMuKQorZnVuYyBTaWdWNEF1dGgocmVnaW9uLCBzZXJ2aWNlIHN0cmluZykgUmVxdWVzdEludGVyY2VwdG9yIHsKKwlyZXR1cm4gU2lnVjRBdXRoV2l0aENyZWRlbnRpYWxzKHJlZ2lvbiwgc2VydmljZSwgbmlsKQorfQorCisvLyBTaWdWNEF1dGhXaXRoQ3JlZGVudGlhbHMgcmV0dXJucyBhIFJlcXVlc3RJbnRlcmNlcHRvciB0aGF0IHNpZ25zIHJlcXVlc3RzIHVzaW5nIEFXUyBTaWdWNAorLy8gd2l0aCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMgcHJvdmlkZXIuIElmIHByb3ZpZGVyIGlzIG5pbCwgdXNlcyBkZWZhdWx0IGNyZWRlbnRpYWwgY2hhaW4uCisvLyBJZiB0aGUgcmVxdWVzdCBib2R5IGhhcyBub3QgYmVlbiBzZXJpYWxpemVkIHlldCAoKlJlcXVlc3RNZXNzYWdlKSwgaXQgaXMgYXV0b21hdGljYWxseQorLy8gc2VyaWFsaXplZCB0byBHcmFwaEJpbmFyeSBiZWZvcmUgc2lnbmluZy4KKy8vCisvLyBDYWNoZXMgdGhlIHNpZ25lciBhbmQgY3JlZGVudGlhbHMgcHJvdmlkZXIgZm9yIGVmZmljaWVuY3kuCitmdW5jIFNpZ1Y0QXV0aFdpdGhDcmVkZW50aWFscyhyZWdpb24sIHNlcnZpY2Ugc3RyaW5nLCBjcmVkZW50aWFsc1Byb3ZpZGVyIGF3cy5DcmVkZW50aWFsc1Byb3ZpZGVyKSBSZXF1ZXN0SW50ZXJjZXB0b3IgeworCS8vIENyZWF0ZSBzaWduZXIgb25jZSAtIGl0J3Mgc3RhdGVsZXNzIGFuZCBzYWZlIHRvIHJldXNlCisJc2lnbmVyIDo9IHY0Lk5ld1NpZ25lcigpCisJc2VyaWFsaXplIDo9IFNlcmlhbGl6ZVJlcXVlc3QoKQorCisJLy8gQ2FjaGUgZm9yIHJlc29sdmVkIGNyZWRlbnRpYWxzIHByb3ZpZGVyIChsYXp5IGluaXRpYWxpemF0aW9uKQorCXZhciBjYWNoZWRQcm92aWRlciBhd3MuQ3JlZGVudGlhbHNQcm92aWRlcgorCXZhciBwcm92aWRlck9uY2Ugc3luYy5PbmNlCisJdmFyIHByb3ZpZGVyRXJyIGVycm9yCisKKwlyZXR1cm4gZnVuYyhyZXEgKkh0dHBSZXF1ZXN0KSBlcnJvciB7CisJCS8vIElmIEJvZHkgaXMgc3RpbGwgKlJlcXVlc3RNZXNzYWdlLCBzZXJpYWxpemUgaXQgdG8gR3JhcGhCaW5hcnkgYmVmb3JlIHNpZ25pbmcuCisJCWlmIF8sIG9rIDo9IHJlcS5Cb2R5LigqUmVxdWVzdE1lc3NhZ2UpOyBvayB7CisJCQlpZiBlcnIgOj0gc2VyaWFsaXplKHJlcSk7IGVyciAhPSBuaWwgeworCQkJCXJldHVybiBmbXQuRXJyb3JmKCJTaWdWNCBhdXRvLXNlcmlhbGl6YXRpb24gZmFpbGVkOiAldyIsIGVycikKKwkJCX0KKwkJfQorCisJCWlmIF8sIG9rIDo9IHJlcS5Cb2R5LihbXWJ5dGUpOyAhb2sgeworCQkJcmV0dXJuIGZtdC5FcnJvcmYoIlNpZ1Y0IHNpZ25pbmcgcmVxdWlyZXMgYm9keSB0byBiZSBbXWJ5dGU7IGdvdCAlVCIsIHJlcS5Cb2R5KQorCQl9CisKKwkJY3R4IDo9IGNvbnRleHQuQmFja2dyb3VuZCgpCisKKwkJLy8gUmVzb2x2ZSBjcmVkZW50aWFscyBwcm92aWRlciBvbmNlIGlmIG5vdCBwcm92aWRlZAorCQlwcm92aWRlciA6PSBjcmVkZW50aWFsc1Byb3ZpZGVyCisJCWlmIHByb3ZpZGVyID09IG5pbCB7CisJCQlwcm92aWRlck9uY2UuRG8oZnVuYygpIHsKKwkJCQljZmcsIGVyciA6PSBjb25maWcuTG9hZERlZmF1bHRDb25maWcoY3R4LCBjb25maWcuV2l0aFJlZ2lvbihyZWdpb24pKQorCQkJCWlmIGVyciAhPSBuaWwgeworCQkJCQlwcm92aWRlckVyciA9IGVycgorCQkJCQlyZXR1cm4KKwkJCQl9CisJCQkJY2FjaGVkUHJvdmlkZXIgPSBjZmcuQ3JlZGVudGlhbHMKKwkJCX0pCisJCQlpZiBwcm92aWRlckVyciAhPSBuaWwgeworCQkJCXJldHVybiBwcm92aWRlckVycgorCQkJfQorCQkJcHJvdmlkZXIgPSBjYWNoZWRQcm92aWRlcgorCQl9CisKKwkJLy8gUmV0cmlldmUgY3JlZGVudGlhbHMgKHRoZSBwcm92aWRlciBoYW5kbGVzIGNhY2hpbmcgaW50ZXJuYWxseSkKKwkJY3JlZHMsIGVyciA6PSBwcm92aWRlci5SZXRyaWV2ZShjdHgpCisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGVycgorCQl9CisKKwkJc3RkUmVxLCBlcnIgOj0gcmVxLlRvU3RkUmVxdWVzdCgpCisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGVycgorCQl9CisJCXN0ZFJlcS5Cb2R5ID0gbmlsIC8vIEJvZHkgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IHZpYSBwYXlsb2FkIGhhc2gKKworCQlpZiBlcnIgOj0gc2lnbmVyLlNpZ25IVFRQKGN0eCwgY3JlZHMsIHN0ZFJlcSwgcmVxLlBheWxvYWRIYXNoKCksIHNlcnZpY2UsIHJlZ2lvbiwgdGltZS5Ob3coKSk7IGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGVycgorCQl9CisKKwkJLy8gQ29weSBzaWduZWQgaGVhZGVycyBiYWNrIHRvIEh0dHBSZXF1ZXN0CisJCWZvciBrLCB2IDo9IHJhbmdlIHN0ZFJlcS5IZWFkZXIgeworCQkJcmVxLkhlYWRlcnNba10gPSB2CisJCX0KKworCQlyZXR1cm4gbmlsCisJfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvYXV0aEluZm8uZ28gYi9ncmVtbGluLWdvL2RyaXZlci9hdXRoSW5mby5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFiZGFiYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9hdXRoSW5mby5nbworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1wYWNrYWdlIGdyZW1saW5nbwotCi1pbXBvcnQgIm5ldC9odHRwIgotCi0vLyBBdXRoSW5mb1Byb3ZpZGVyIGlzIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiB0byBiZSBzcGVjaWZpZWQuCi10eXBlIEF1dGhJbmZvUHJvdmlkZXIgaW50ZXJmYWNlIHsKLQlHZXRIZWFkZXIoKSBodHRwLkhlYWRlcgotCUdldEJhc2ljQXV0aCgpIChvayBib29sLCB1c2VybmFtZSwgcGFzc3dvcmQgc3RyaW5nKQotfQotCi0vLyBBdXRoSW5mbyBpcyBhbiBvcHRpb24gc3RydWN0IHRoYXQgYWxsb3dzIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHRvIGJlIHNwZWNpZmllZCBzdGF0aWNhbGx5LgotLy8gQXV0aGVudGljYXRpb24gY2FuIGJlIHByb3ZpZGVkIHZpYSBodHRwLkhlYWRlciBkaXJlY3RseS4KLS8vIEJhc2ljIGF1dGhlbnRpY2F0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdmlhIHRoZSBCYXNpY0F1dGhJbmZvIGZ1bmN0aW9uLgotdHlwZSBBdXRoSW5mbyBzdHJ1Y3QgewotCUhlYWRlciAgIGh0dHAuSGVhZGVyCi0JVXNlcm5hbWUgc3RyaW5nCi0JUGFzc3dvcmQgc3RyaW5nCi19Ci0KLXZhciBfIEF1dGhJbmZvUHJvdmlkZXIgPSAoKkF1dGhJbmZvKShuaWwpCi0KLS8vIEdldEhlYWRlciBwcm92aWRlcyBhIHNhZmUgd2F5IHRvIGdldCBhIGhlYWRlciBmcm9tIHRoZSBBdXRoSW5mbyBldmVuIGlmIGl0IGlzIG5pbC4KLS8vIFRoaXMgd2F5IHdlIGRvbid0IG5lZWQgYW55IGFkZGl0aW9uYWwgbG9naWMgaW4gdGhlIHRyYW5zcG9ydCBsYXllci4KLWZ1bmMgKGF1dGhJbmZvICpBdXRoSW5mbykgR2V0SGVhZGVyKCkgaHR0cC5IZWFkZXIgewotCWlmIGF1dGhJbmZvID09IG5pbCB7Ci0JCXJldHVybiBuaWwKLQl9IGVsc2UgewotCQlyZXR1cm4gYXV0aEluZm8uSGVhZGVyCi0JfQotfQotCi0vLyBHZXRCYXNpY0F1dGggcHJvdmlkZXMgYSBzYWZlIHdheSB0byBjaGVjayBpZiBiYXNpYyBhdXRoIGluZm8gaXMgYXZhaWxhYmxlIGZyb20gdGhlIEF1dGhJbmZvIGV2ZW4gaWYgaXQgaXMgbmlsLgotLy8gVGhpcyB3YXkgd2UgZG9uJ3QgbmVlZCBhbnkgYWRkaXRpb25hbCBsb2dpYyBpbiB0aGUgdHJhbnNwb3J0IGxheWVyLgotZnVuYyAoYXV0aEluZm8gKkF1dGhJbmZvKSBHZXRCYXNpY0F1dGgoKSAoYm9vbCwgc3RyaW5nLCBzdHJpbmcpIHsKLQlpZiBhdXRoSW5mbyA9PSBuaWwgfHwgKGF1dGhJbmZvLlVzZXJuYW1lID09ICIiICYmIGF1dGhJbmZvLlBhc3N3b3JkID09ICIiKSB7Ci0JCXJldHVybiBmYWxzZSwgIiIsICIiCi0JfQotCXJldHVybiB0cnVlLCBhdXRoSW5mby5Vc2VybmFtZSwgYXV0aEluZm8uUGFzc3dvcmQKLX0KLQotLy8gQmFzaWNBdXRoSW5mbyBwcm92aWRlcyBhIHdheSB0byBnZW5lcmF0ZSBBdXRoSW5mby4gRW50ZXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFuZCBnZXQgdGhlIEF1dGhJbmZvIGJhY2suCi1mdW5jIEJhc2ljQXV0aEluZm8odXNlcm5hbWUgc3RyaW5nLCBwYXNzd29yZCBzdHJpbmcpICpBdXRoSW5mbyB7Ci0JcmV0dXJuICZBdXRoSW5mb3tVc2VybmFtZTogdXNlcm5hbWUsIFBhc3N3b3JkOiBwYXNzd29yZH0KLX0KLQotLy8gSGVhZGVyQXV0aEluZm8gcHJvdmlkZXMgYSB3YXkgdG8gZ2VuZXJhdGUgQXV0aEluZm8gd2l0aCBvbmx5IEhlYWRlciBpbmZvcm1hdGlvbi4KLWZ1bmMgSGVhZGVyQXV0aEluZm8oaGVhZGVyIGh0dHAuSGVhZGVyKSAqQXV0aEluZm8gewotCXJldHVybiAmQXV0aEluZm97SGVhZGVyOiBoZWFkZXJ9Ci19Ci0KLS8vIER5bmFtaWNBdXRoIGlzIGFuIEF1dGhJbmZvUHJvdmlkZXIgdGhhdCBhbGxvd3MgZHluYW1pYyBjcmVkZW50aWFsIGdlbmVyYXRpb24uCi10eXBlIER5bmFtaWNBdXRoIHN0cnVjdCB7Ci0JZm4gZnVuYygpIEF1dGhJbmZvUHJvdmlkZXIKLX0KLQotdmFyICgKLQlfIEF1dGhJbmZvUHJvdmlkZXIgPSAoKkR5bmFtaWNBdXRoKShuaWwpCi0KLQkvLyBOb29wQXV0aEluZm8gaXMgYSBuby1vcCBBdXRoSW5mb1Byb3ZpZGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSBhdXRoZW50aWNhdGlvbi4KLQlOb29wQXV0aEluZm8gPSBOZXdEeW5hbWljQXV0aChmdW5jKCkgQXV0aEluZm9Qcm92aWRlciB7IHJldHVybiAmQXV0aEluZm97fSB9KQotKQotCi0vLyBOZXdEeW5hbWljQXV0aCBwcm92aWRlcyBhIHdheSB0byBnZW5lcmF0ZSBkeW5hbWljIGNyZWRlbnRpYWxzIHdpdGggdGhlIHNwZWNpZmllZCBnZW5lcmF0b3IgZnVuY3Rpb24uCi1mdW5jIE5ld0R5bmFtaWNBdXRoKGYgZnVuYygpIEF1dGhJbmZvUHJvdmlkZXIpICpEeW5hbWljQXV0aCB7Ci0JcmV0dXJuICZEeW5hbWljQXV0aHtmbjogZn0KLX0KLQotLy8gR2V0SGVhZGVyIGNhbGxzIHRoZSBzdG9yZWQgZnVuY3Rpb24gdG8gZ2V0IHRoZSBoZWFkZXIgZHluYW1pY2FsbHkuCi1mdW5jIChkICpEeW5hbWljQXV0aCkgR2V0SGVhZGVyKCkgaHR0cC5IZWFkZXIgewotCXJldHVybiBkLmZuKCkuR2V0SGVhZGVyKCkKLX0KLQotLy8gR2V0SGVhZGVyIGNhbGxzIHRoZSBzdG9yZWQgZnVuY3Rpb24gdG8gZ2V0IGJhc2ljIGF1dGhlbnRpY2F0aW9uIGR5bmFtaWNhbGx5LgotZnVuYyAoZCAqRHluYW1pY0F1dGgpIEdldEJhc2ljQXV0aCgpIChib29sLCBzdHJpbmcsIHN0cmluZykgewotCXJldHVybiBkLmZuKCkuR2V0QmFzaWNBdXRoKCkKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2F1dGhfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2F1dGhfdGVzdC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM0MDc5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvYXV0aF90ZXN0LmdvCkBAIC0wLDAgKzEsMTE0IEBACisvKgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBncmVtbGluZ28KKworaW1wb3J0ICgKKwkiY29udGV4dCIKKwkiZW5jb2RpbmcvYmFzZTY0IgorCSJzdHJpbmdzIgorCSJ0ZXN0aW5nIgorCisJImdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvYXdzIgorCSJnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0IgorKQorCitmdW5jIGNyZWF0ZU1vY2tSZXF1ZXN0KCkgKkh0dHBSZXF1ZXN0IHsKKwlyZXEsIF8gOj0gTmV3SHR0cFJlcXVlc3QoIlBPU1QiLCAiaHR0cHM6Ly90ZXN0X3VybDo4MTgyL2dyZW1saW4iKQorCXJlcS5IZWFkZXJzLlNldCgiQ29udGVudC1UeXBlIiwgZ3JhcGhCaW5hcnlNaW1lVHlwZSkKKwlyZXEuSGVhZGVycy5TZXQoIkFjY2VwdCIsIGdyYXBoQmluYXJ5TWltZVR5cGUpCisJcmVxLkJvZHkgPSBbXWJ5dGUoYHsiZ3JlbWxpbiI6ImcuVigpIn1gKQorCXJldHVybiByZXEKK30KKworZnVuYyBUZXN0QmFzaWNBdXRoKHQgKnRlc3RpbmcuVCkgeworCXQuUnVuKCJhZGRzIGF1dGhvcml6YXRpb24gaGVhZGVyIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJcmVxIDo9IGNyZWF0ZU1vY2tSZXF1ZXN0KCkKKwkJYXNzZXJ0LkVtcHR5KHQsIHJlcS5IZWFkZXJzLkdldChIZWFkZXJBdXRob3JpemF0aW9uKSkKKworCQlpbnRlcmNlcHRvciA6PSBCYXNpY0F1dGgoInVzZXJuYW1lIiwgInBhc3N3b3JkIikKKwkJZXJyIDo9IGludGVyY2VwdG9yKHJlcSkKKworCQlhc3NlcnQuTm9FcnJvcih0LCBlcnIpCisJCWF1dGhIZWFkZXIgOj0gcmVxLkhlYWRlcnMuR2V0KEhlYWRlckF1dGhvcml6YXRpb24pCisJCWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuSGFzUHJlZml4KGF1dGhIZWFkZXIsICJCYXNpYyAiKSkKKworCQkvLyBWZXJpZnkgZW5jb2RpbmcKKwkJZW5jb2RlZCA6PSBzdHJpbmdzLlRyaW1QcmVmaXgoYXV0aEhlYWRlciwgIkJhc2ljICIpCisJCWRlY29kZWQsIGVyciA6PSBiYXNlNjQuU3RkRW5jb2RpbmcuRGVjb2RlU3RyaW5nKGVuY29kZWQpCisJCWFzc2VydC5Ob0Vycm9yKHQsIGVycikKKwkJYXNzZXJ0LkVxdWFsKHQsICJ1c2VybmFtZTpwYXNzd29yZCIsIHN0cmluZyhkZWNvZGVkKSkKKwl9KQorfQorCisvLyBtb2NrQ3JlZGVudGlhbHNQcm92aWRlciBpbXBsZW1lbnRzIGF3cy5DcmVkZW50aWFsc1Byb3ZpZGVyIGZvciB0ZXN0aW5nCit0eXBlIG1vY2tDcmVkZW50aWFsc1Byb3ZpZGVyIHN0cnVjdCB7CisJYWNjZXNzS2V5ICAgIHN0cmluZworCXNlY3JldEtleSAgICBzdHJpbmcKKwlzZXNzaW9uVG9rZW4gc3RyaW5nCit9CisKK2Z1bmMgKG0gKm1vY2tDcmVkZW50aWFsc1Byb3ZpZGVyKSBSZXRyaWV2ZShjdHggY29udGV4dC5Db250ZXh0KSAoYXdzLkNyZWRlbnRpYWxzLCBlcnJvcikgeworCXJldHVybiBhd3MuQ3JlZGVudGlhbHN7CisJCUFjY2Vzc0tleUlEOiAgICAgbS5hY2Nlc3NLZXksCisJCVNlY3JldEFjY2Vzc0tleTogbS5zZWNyZXRLZXksCisJCVNlc3Npb25Ub2tlbjogICAgbS5zZXNzaW9uVG9rZW4sCisJfSwgbmlsCit9CisKK2Z1bmMgVGVzdFNpZ1Y0QXV0aCh0ICp0ZXN0aW5nLlQpIHsKKwl0LlJ1bigiYWRkcyBzaWduZWQgaGVhZGVycyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXJlcSA6PSBjcmVhdGVNb2NrUmVxdWVzdCgpCisJCWFzc2VydC5FbXB0eSh0LCByZXEuSGVhZGVycy5HZXQoIkF1dGhvcml6YXRpb24iKSkKKwkJYXNzZXJ0LkVtcHR5KHQsIHJlcS5IZWFkZXJzLkdldCgiWC1BbXotRGF0ZSIpKQorCisJCXByb3ZpZGVyIDo9ICZtb2NrQ3JlZGVudGlhbHNQcm92aWRlcnsKKwkJCWFjY2Vzc0tleTogIk1PQ0tfSUQiLAorCQkJc2VjcmV0S2V5OiAiTU9DS19LRVkiLAorCQl9CisJCWludGVyY2VwdG9yIDo9IFNpZ1Y0QXV0aFdpdGhDcmVkZW50aWFscygiZ3JlbWxpbi1lYXN0LTEiLCAidGlua2VycG9wLXNpZ3Y0IiwgcHJvdmlkZXIpCisJCWVyciA6PSBpbnRlcmNlcHRvcihyZXEpCisKKwkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQorCQlhc3NlcnQuTm90RW1wdHkodCwgcmVxLkhlYWRlcnMuR2V0KCJYLUFtei1EYXRlIikpCisJCWF1dGhIZWFkZXIgOj0gcmVxLkhlYWRlcnMuR2V0KCJBdXRob3JpemF0aW9uIikKKwkJYXNzZXJ0LlRydWUodCwgc3RyaW5ncy5IYXNQcmVmaXgoYXV0aEhlYWRlciwgIkFXUzQtSE1BQy1TSEEyNTYgQ3JlZGVudGlhbD1NT0NLX0lEIikpCisJCWFzc2VydC5Db250YWlucyh0LCBhdXRoSGVhZGVyLCAiZ3JlbWxpbi1lYXN0LTEvdGlua2VycG9wLXNpZ3Y0L2F3czRfcmVxdWVzdCIpCisJCWFzc2VydC5Db250YWlucyh0LCBhdXRoSGVhZGVyLCAiU2lnbmF0dXJlPSIpCisJfSkKKworCXQuUnVuKCJhZGRzIHNlc3Npb24gdG9rZW4gd2hlbiBwcm92aWRlZCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXJlcSA6PSBjcmVhdGVNb2NrUmVxdWVzdCgpCisJCWFzc2VydC5FbXB0eSh0LCByZXEuSGVhZGVycy5HZXQoIlgtQW16LVNlY3VyaXR5LVRva2VuIikpCisKKwkJcHJvdmlkZXIgOj0gJm1vY2tDcmVkZW50aWFsc1Byb3ZpZGVyeworCQkJYWNjZXNzS2V5OiAgICAiTU9DS19JRCIsCisJCQlzZWNyZXRLZXk6ICAgICJNT0NLX0tFWSIsCisJCQlzZXNzaW9uVG9rZW46ICJNT0NLX1RPS0VOIiwKKwkJfQorCQlpbnRlcmNlcHRvciA6PSBTaWdWNEF1dGhXaXRoQ3JlZGVudGlhbHMoImdyZW1saW4tZWFzdC0xIiwgInRpbmtlcnBvcC1zaWd2NCIsIHByb3ZpZGVyKQorCQllcnIgOj0gaW50ZXJjZXB0b3IocmVxKQorCisJCWFzc2VydC5Ob0Vycm9yKHQsIGVycikKKwkJYXNzZXJ0LkVxdWFsKHQsICJNT0NLX1RPS0VOIiwgcmVxLkhlYWRlcnMuR2V0KCJYLUFtei1TZWN1cml0eS1Ub2tlbiIpKQorCQlhdXRoSGVhZGVyIDo9IHJlcS5IZWFkZXJzLkdldCgiQXV0aG9yaXphdGlvbiIpCisJCWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuSGFzUHJlZml4KGF1dGhIZWFkZXIsICJBV1M0LUhNQUMtU0hBMjU2IENyZWRlbnRpYWw9IikpCisJCWFzc2VydC5Db250YWlucyh0LCBhdXRoSGVhZGVyLCAiZ3JlbWxpbi1lYXN0LTEvdGlua2VycG9wLXNpZ3Y0L2F3czRfcmVxdWVzdCIpCisJfSkKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2J5dGVjb2RlLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvYnl0ZWNvZGUuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1MDQ3MTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvYnl0ZWNvZGUuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgZ3JlbWxpbmdvCi0KLWltcG9ydCAoCi0JImZtdCIKLQkicmVmbGVjdCIKLSkKLQotLy8gQnl0ZWNvZGUgYSBsaXN0IG9mIG9yZGVyZWQgaW5zdHJ1Y3Rpb25zIGZvciB0cmF2ZXJzYWwgdGhhdCBjYW4gYmUgc2VyaWFsaXplZCBiZXR3ZWVuIGVudmlyb25tZW50cyBhbmQgbWFjaGluZXMuCi10eXBlIEJ5dGVjb2RlIHN0cnVjdCB7Ci0Jc291cmNlSW5zdHJ1Y3Rpb25zIFtdaW5zdHJ1Y3Rpb24KLQlzdGVwSW5zdHJ1Y3Rpb25zICAgW11pbnN0cnVjdGlvbgotCWJpbmRpbmdzICAgICAgICAgICBtYXBbc3RyaW5nXWludGVyZmFjZXt9Ci19Ci0KLS8vIE5ld0J5dGVjb2RlIGNyZWF0ZXMgYSBuZXcgQnl0ZWNvZGUgdG8gYmUgdXNlZCBpbiB0cmF2ZXJzYWxzLgotZnVuYyBOZXdCeXRlY29kZShiYyAqQnl0ZWNvZGUpICpCeXRlY29kZSB7Ci0Jc291cmNlSW5zdHJ1Y3Rpb25zIDo9IG1ha2UoW11pbnN0cnVjdGlvbiwgMCkKLQlzdGVwSW5zdHJ1Y3Rpb25zIDo9IG1ha2UoW11pbnN0cnVjdGlvbiwgMCkKLQliaW5kaW5nTWFwIDo9IG1ha2UobWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKLQlpZiBiYyAhPSBuaWwgewotCQlzb3VyY2VJbnN0cnVjdGlvbnMgPSBhcHBlbmQoc291cmNlSW5zdHJ1Y3Rpb25zLCBiYy5zb3VyY2VJbnN0cnVjdGlvbnMuLi4pCi0JCXN0ZXBJbnN0cnVjdGlvbnMgPSBhcHBlbmQoc3RlcEluc3RydWN0aW9ucywgYmMuc3RlcEluc3RydWN0aW9ucy4uLikKLQl9Ci0KLQlyZXR1cm4gJkJ5dGVjb2RlewotCQlzb3VyY2VJbnN0cnVjdGlvbnM6IHNvdXJjZUluc3RydWN0aW9ucywKLQkJc3RlcEluc3RydWN0aW9uczogICBzdGVwSW5zdHJ1Y3Rpb25zLAotCQliaW5kaW5nczogICAgICAgICAgIGJpbmRpbmdNYXAsCi0JfQotfQotCi1mdW5jIChieXRlY29kZSAqQnl0ZWNvZGUpIGNyZWF0ZUluc3RydWN0aW9uKG9wZXJhdG9yIHN0cmluZywgYXJncyAuLi5pbnRlcmZhY2V7fSkgKCppbnN0cnVjdGlvbiwgZXJyb3IpIHsKLQlpbnN0cnVjdGlvbiA6PSAmaW5zdHJ1Y3Rpb257Ci0JCW9wZXJhdG9yOiAgb3BlcmF0b3IsCi0JCWFyZ3VtZW50czogbWFrZShbXWludGVyZmFjZXt9LCAwKSwKLQl9Ci0KLQlmb3IgXywgYXJnIDo9IHJhbmdlIGFyZ3MgewotCQljb252ZXJ0ZWQsIGVyciA6PSBieXRlY29kZS5jb252ZXJ0QXJndW1lbnQoYXJnKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCWluc3RydWN0aW9uLmFyZ3VtZW50cyA9IGFwcGVuZChpbnN0cnVjdGlvbi5hcmd1bWVudHMsIGNvbnZlcnRlZCkKLQl9Ci0KLQlyZXR1cm4gaW5zdHJ1Y3Rpb24sIG5pbAotfQotCi0vLyBBZGRTb3VyY2UgYWRkIGEgdHJhdmVyc2FsIHNvdXJjZSBpbnN0cnVjdGlvbiB0byB0aGUgYnl0ZWNvZGUuCi1mdW5jIChieXRlY29kZSAqQnl0ZWNvZGUpIEFkZFNvdXJjZShzb3VyY2VOYW1lIHN0cmluZywgYXJncyAuLi5pbnRlcmZhY2V7fSkgZXJyb3IgewotCWluc3RydWN0aW9uLCBlcnIgOj0gYnl0ZWNvZGUuY3JlYXRlSW5zdHJ1Y3Rpb24oc291cmNlTmFtZSwgYXJncy4uLikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgotCX0KLQotCWJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucyA9IGFwcGVuZChieXRlY29kZS5zb3VyY2VJbnN0cnVjdGlvbnMsICppbnN0cnVjdGlvbikKLQlyZXR1cm4gZXJyCi19Ci0KLS8vIEFkZFN0ZXAgYWRkcyBhIHRyYXZlcnNhbCBpbnN0cnVjdGlvbiB0byB0aGUgYnl0ZWNvZGUKLWZ1bmMgKGJ5dGVjb2RlICpCeXRlY29kZSkgQWRkU3RlcChzdGVwTmFtZSBzdHJpbmcsIGFyZ3MgLi4uaW50ZXJmYWNle30pIGVycm9yIHsKLQlpbnN0cnVjdGlvbiwgZXJyIDo9IGJ5dGVjb2RlLmNyZWF0ZUluc3RydWN0aW9uKHN0ZXBOYW1lLCBhcmdzLi4uKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCi0JYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9ucyA9IGFwcGVuZChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zLCAqaW5zdHJ1Y3Rpb24pCi0JcmV0dXJuIGVycgotfQotCi1mdW5jIChieXRlY29kZSAqQnl0ZWNvZGUpIGNvbnZlcnRBcmd1bWVudChhcmcgaW50ZXJmYWNle30pIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlpZiBhcmcgPT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgbmlsCi0JfQotCXQgOj0gcmVmbGVjdC5UeXBlT2YoYXJnKQotCWlmIHQgPT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgbmlsCi0JfQotCXN3aXRjaCB0LktpbmQoKSB7Ci0JY2FzZSByZWZsZWN0Lk1hcDoKLQkJbmV3TWFwIDo9IG1ha2UobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KQotCQlpdGVyIDo9IHJlZmxlY3QuVmFsdWVPZihhcmcpLk1hcFJhbmdlKCkKLQkJZm9yIGl0ZXIuTmV4dCgpIHsKLQkJCWsgOj0gaXRlci5LZXkoKS5JbnRlcmZhY2UoKQotCQkJdiA6PSBpdGVyLlZhbHVlKCkuSW50ZXJmYWNlKCkKLQkJCWNvbnZlcnRlZEtleSwgZXJyIDo9IGJ5dGVjb2RlLmNvbnZlcnRBcmd1bWVudChrKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIG5pbCwgZXJyCi0JCQl9Ci0JCQljb252ZXJ0ZWRWYWx1ZSwgZXJyIDo9IGJ5dGVjb2RlLmNvbnZlcnRBcmd1bWVudCh2KQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuIG5pbCwgZXJyCi0JCQl9Ci0JCQluZXdNYXBbY29udmVydGVkS2V5XSA9IGNvbnZlcnRlZFZhbHVlCi0JCX0KLQkJcmV0dXJuIG5ld01hcCwgbmlsCi0JY2FzZSByZWZsZWN0LlNsaWNlOgotCQluZXdTbGljZSA6PSBtYWtlKFtdaW50ZXJmYWNle30sIDApCi0JCW9sZFNsaWNlIDo9IHJlZmxlY3QuVmFsdWVPZihhcmcpCi0JCWZvciBpIDo9IDA7IGkgPCBvbGRTbGljZS5MZW4oKTsgaSsrIHsKLQkJCWNvbnZlcnRlZCwgZXJyIDo9IGJ5dGVjb2RlLmNvbnZlcnRBcmd1bWVudChvbGRTbGljZS5JbmRleChpKS5JbnRlcmZhY2UoKSkKLQkJCWlmIGVyciAhPSBuaWwgewotCQkJCXJldHVybiBuaWwsIGVycgotCQkJfQotCQkJbmV3U2xpY2UgPSBhcHBlbmQobmV3U2xpY2UsIGNvbnZlcnRlZCkKLQkJfQotCQlyZXR1cm4gbmV3U2xpY2UsIG5pbAotCWRlZmF1bHQ6Ci0JCXN3aXRjaCB2IDo9IGFyZy4odHlwZSkgewotCQljYXNlICpCaW5kaW5nOgotCQkJY29udmVydGVkVmFsdWUsIGVyciA6PSBieXRlY29kZS5jb252ZXJ0QXJndW1lbnQodi5WYWx1ZSkKLQkJCWlmIGVyciAhPSBuaWwgewotCQkJCXJldHVybiBuaWwsIGVycgotCQkJfQotCQkJYnl0ZWNvZGUuYmluZGluZ3Nbdi5LZXldID0gdi5WYWx1ZQotCQkJcmV0dXJuICZCaW5kaW5newotCQkJCUtleTogICB2LktleSwKLQkJCQlWYWx1ZTogY29udmVydGVkVmFsdWUsCi0JCQl9LCBuaWwKLQkJY2FzZSAqR3JhcGhUcmF2ZXJzYWw6Ci0JCQlpZiB2LmdyYXBoICE9IG5pbCB7Ci0JCQkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMTAwMUNvbnZlcnRBcmd1bWVudENoaWxkVHJhdmVyc2FsTm90RnJvbUFub25FcnJvcikKLQkJCX0KLQkJCWZvciBrLCB2YWwgOj0gcmFuZ2Ugdi5CeXRlY29kZS5iaW5kaW5ncyB7Ci0JCQkJYnl0ZWNvZGUuYmluZGluZ3Nba10gPSB2YWwKLQkJCX0KLQkJCXJldHVybiB2LkJ5dGVjb2RlLCBuaWwKLQkJZGVmYXVsdDoKLQkJCXJldHVybiBhcmcsIG5pbAotCQl9Ci0JfQotCi19Ci0KLXR5cGUgaW5zdHJ1Y3Rpb24gc3RydWN0IHsKLQlvcGVyYXRvciAgc3RyaW5nCi0JYXJndW1lbnRzIFtdaW50ZXJmYWNle30KLX0KLQotLy8gQmluZGluZyBhc3NvY2lhdGVzIGEgc3RyaW5nIHZhcmlhYmxlIHdpdGggYSB2YWx1ZQotdHlwZSBCaW5kaW5nIHN0cnVjdCB7Ci0JS2V5ICAgc3RyaW5nCi0JVmFsdWUgaW50ZXJmYWNle30KLX0KLQotLy8gU3RyaW5nIHJldHVybnMgdGhlIGtleSB2YWx1ZSBiaW5kaW5nIGluIHN0cmluZyBmb3JtYXQKLWZ1bmMgKGIgKkJpbmRpbmcpIFN0cmluZygpIHN0cmluZyB7Ci0JcmV0dXJuIGZtdC5TcHJpbnRmKCJiaW5kaW5nWyV2PSV2XSIsIGIuS2V5LCBiLlZhbHVlKQotfQotCi0vLyBCaW5kaW5ncyBhcmUgdXNlZCB0byBhc3NvY2lhdGUgYSB2YXJpYWJsZSB3aXRoIGEgdmFsdWUuIFRoZXkgZW5hYmxlIHRoZSBjcmVhdGlvbiBvZiBCaW5kaW5nLCB1c3VhbGx5IHVzZWQgd2l0aAotLy8gTGFtYmRhIHNjcmlwdHMgdG8gYXZvaWQgY29udGludWVkIHJlY29tcGlsYXRpb24gY29zdHMuIEJpbmRpbmdzIGFsbG93IGEgcmVtb3RlIGVuZ2luZSB0byBjYWNoZSB0cmF2ZXJzYWxzIHRoYXQKLS8vIHdpbGwgYmUgcmV1c2VkIG92ZXIgYW5kIG92ZXIgYWdhaW4gc2F2ZSB0aGF0IHNvbWUgcGFyYW1ldGVyaXphdGlvbiBtYXkgY2hhbmdlLgotLy8gVXNlZCBhcyBnLlYoKS5PdXQoJkJpbmRpbmdze30uT2YoImtleSIsIHZhbHVlKSkKLXR5cGUgQmluZGluZ3Mgc3RydWN0e30KLQotLy8gT2YgY3JlYXRlcyBhIEJpbmRpbmcKLWZ1bmMgKCpCaW5kaW5ncykgT2Yoa2V5IHN0cmluZywgdmFsdWUgaW50ZXJmYWNle30pICpCaW5kaW5nIHsKLQlyZXR1cm4gJkJpbmRpbmd7Ci0JCUtleTogICBrZXksCi0JCVZhbHVlOiB2YWx1ZSwKLQl9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9ieXRlY29kZV90ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvYnl0ZWNvZGVfdGVzdC5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhMWI3Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9ieXRlY29kZV90ZXN0LmdvCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLS8qCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1wYWNrYWdlIGdyZW1saW5nbwotCi1pbXBvcnQgKAotCSJ0ZXN0aW5nIgotCi0JImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCi0pCi0KLWZ1bmMgVGVzdEJ5dGVjb2RlKHQgKnRlc3RpbmcuVCkgewotCXQuUnVuKCJDb25zdHJ1Y3RvciIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWJjMSA6PSBOZXdCeXRlY29kZShuaWwpCi0JCWFzc2VydC5Ob3ROaWwodCwgYmMxLmJpbmRpbmdzKQotCQlhc3NlcnQuTm90TmlsKHQsIGJjMS5zb3VyY2VJbnN0cnVjdGlvbnMpCi0JCWFzc2VydC5Ob3ROaWwodCwgYmMxLnN0ZXBJbnN0cnVjdGlvbnMpCi0JCWFzc2VydC5FbXB0eSh0LCBiYzEuYmluZGluZ3MpCi0JCWFzc2VydC5FbXB0eSh0LCBiYzEuc291cmNlSW5zdHJ1Y3Rpb25zKQotCQlhc3NlcnQuRW1wdHkodCwgYmMxLnN0ZXBJbnN0cnVjdGlvbnMpCi0KLQkJc291cmNlSW5zdHJ1Y3Rpb25zIDo9IFtdaW5zdHJ1Y3Rpb257ewotCQkJb3BlcmF0b3I6ICAibW9ja1NvdXJjZSIsCi0JCQlhcmd1bWVudHM6IG5pbCwKLQkJfX0KLQkJc3RlcEluc3RydWN0aW9ucyA6PSBbXWluc3RydWN0aW9ue3sKLQkJCW9wZXJhdG9yOiAgIm1vY2tTdGVwIiwKLQkJCWFyZ3VtZW50czogbmlsLAotCQl9fQotCQliaW5kaW5nTWFwIDo9IG1ha2UobWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKLQkJYmluZGluZ01hcFsibW9jayJdID0gMTIzCi0JCWJjMS5zb3VyY2VJbnN0cnVjdGlvbnMgPSBzb3VyY2VJbnN0cnVjdGlvbnMKLQkJYmMxLnN0ZXBJbnN0cnVjdGlvbnMgPSBzdGVwSW5zdHJ1Y3Rpb25zCi0JCWJjMS5iaW5kaW5ncyA9IGJpbmRpbmdNYXAKLQotCQliYzIgOj0gTmV3Qnl0ZWNvZGUoYmMxKQotCQlhc3NlcnQuTm90TmlsKHQsIGJjMi5iaW5kaW5ncykKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBiYzIuc291cmNlSW5zdHJ1Y3Rpb25zKQotCQlhc3NlcnQuTm90TmlsKHQsIGJjMi5zdGVwSW5zdHJ1Y3Rpb25zKQotCQlhc3NlcnQuRW1wdHkodCwgYmMyLmJpbmRpbmdzKQotCQlhc3NlcnQuRXF1YWwodCwgc291cmNlSW5zdHJ1Y3Rpb25zLCBiYzIuc291cmNlSW5zdHJ1Y3Rpb25zKQotCQlhc3NlcnQuRXF1YWwodCwgc3RlcEluc3RydWN0aW9ucywgYmMyLnN0ZXBJbnN0cnVjdGlvbnMpCi0JfSkKLQotCXQuUnVuKCJBZGRTb3VyY2UiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlleHBlY3RlZFNvdXJjZUluc3RydWN0aW9ucyA6PSBbXWluc3RydWN0aW9ue3sKLQkJCW9wZXJhdG9yOiAgIm1vY2tTb3VyY2UiLAotCQkJYXJndW1lbnRzOiBbXWludGVyZmFjZXt9ezEyM30sCi0JCX19Ci0JCWJjIDo9IE5ld0J5dGVjb2RlKG5pbCkKLQkJZXJyIDo9IGJjLkFkZFNvdXJjZSgibW9ja1NvdXJjZSIsIDEyMykKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5FcXVhbCh0LCBleHBlY3RlZFNvdXJjZUluc3RydWN0aW9ucywgYmMuc291cmNlSW5zdHJ1Y3Rpb25zKQotCX0pCi0KLQl0LlJ1bigiYWRkU3RlcCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWV4cGVjdGVkU3RlcEluc3RydWN0aW9ucyA6PSBbXWluc3RydWN0aW9ue3sKLQkJCW9wZXJhdG9yOiAgIm1vY2tTdGVwIiwKLQkJCWFyZ3VtZW50czogW11pbnRlcmZhY2V7fXsxMjN9LAotCQl9fQotCQliYyA6PSBOZXdCeXRlY29kZShuaWwpCi0JCWVyciA6PSBiYy5BZGRTdGVwKCJtb2NrU3RlcCIsIDEyMykKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5FcXVhbCh0LCBleHBlY3RlZFN0ZXBJbnN0cnVjdGlvbnMsIGJjLnN0ZXBJbnN0cnVjdGlvbnMpCi0JfSkKLQotCXQuUnVuKCJjb252ZXJ0QXJndW1lbnQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQliYyA6PSBOZXdCeXRlY29kZShuaWwpCi0KLQkJdC5SdW4oIm1hcCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQl0ZXN0TWFwIDo9IG1ha2UobWFwW3N0cmluZ11pbnQpCi0JCQl0ZXN0TWFwWyJ0ZXN0Il0gPSAxMjMKLQkJCWNvbnZlcnRlZCwgZXJyIDo9IGJjLmNvbnZlcnRBcmd1bWVudCh0ZXN0TWFwKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlmb3IgaywgdiA6PSByYW5nZSBjb252ZXJ0ZWQuKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSkgewotCQkJCWtleSA6PSBrLihzdHJpbmcpCi0JCQkJdmFsdWUgOj0gdi4oaW50KQotCQkJCWFzc2VydC5FcXVhbCh0LCAidGVzdCIsIGtleSkKLQkJCQlhc3NlcnQuRXF1YWwodCwgMTIzLCB2YWx1ZSkKLQkJCX0KLQkJfSkKLQotCQl0LlJ1bigic2xpY2UiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJdGVzdFNsaWNlIDo9IFtdaW50ezEsIDIsIDN9Ci0JCQljb252ZXJ0ZWQsIGVyciA6PSBiYy5jb252ZXJ0QXJndW1lbnQodGVzdFNsaWNlKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlmb3IgaSwgdmFsdWUgOj0gcmFuZ2UgY29udmVydGVkLihbXWludGVyZmFjZXt9KSB7Ci0JCQkJYXNzZXJ0LkVxdWFsKHQsIHRlc3RTbGljZVtpXSwgdmFsdWUpCi0JCQl9Ci0JCX0pCi0KLQkJdC5SdW4oImJpbmRpbmciLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJdGVzdEtleSA6PSAidGVzdEtleSIKLQkJCXRlc3RWYWx1ZSA6PSAidGVzdFZhbHVlIgotCQkJdGVzdEJpbmRpbmcgOj0gJkJpbmRpbmd7Ci0JCQkJS2V5OiAgIHRlc3RLZXksCi0JCQkJVmFsdWU6IHRlc3RWYWx1ZSwKLQkJCX0KLQkJCWNvbnZlcnRlZCwgZXJyIDo9IGJjLmNvbnZlcnRBcmd1bWVudCh0ZXN0QmluZGluZykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHRlc3RCaW5kaW5nLCBjb252ZXJ0ZWQpCi0JCQlhc3NlcnQuRXF1YWwodCwgdGVzdFZhbHVlLCBiYy5iaW5kaW5nc1t0ZXN0S2V5XSkKLQkJfSkKLQl9KQotCi0JdC5SdW4oIlRlc3QgQnl0ZWNvZGUgdHJhdmVyc2FsIGFyZ3VtZW50IGNvbnZlcnNpb24gd2l0aG91dCBHcmFwaCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWJjIDo9IEJ5dGVjb2Rle30KLQkJdHJhdmVyc2FsIDo9ICZHcmFwaFRyYXZlcnNhbHsKLQkJCSZUcmF2ZXJzYWx7fSwKLQkJfQotCQl0cmF2ZXJzYWwuZ3JhcGggPSBuaWwKLQkJdHJhdmVyc2FsLkJ5dGVjb2RlID0gJkJ5dGVjb2Rle30KLQkJdHJhdmVyc2FsQnl0ZWNvZGUsIGVyciA6PSBiYy5jb252ZXJ0QXJndW1lbnQodHJhdmVyc2FsKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LkVxdWFsKHQsIHRyYXZlcnNhbC5CeXRlY29kZSwgdHJhdmVyc2FsQnl0ZWNvZGUpCi0JfSkKLQotCXQuUnVuKCJUZXN0IEJ5dGVjb2RlIHRyYXZlcnNhbCBhcmd1bWVudCBjb252ZXJzaW9uIHdpdGggR3JhcGgiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkvLyBUaGlzIHNob3VsZCBmYWlsLgotCQliYyA6PSBCeXRlY29kZXt9Ci0JCXRyYXZlcnNhbCA6PSAmR3JhcGhUcmF2ZXJzYWx7Ci0JCQkmVHJhdmVyc2Fse30sCi0JCX0KLQkJdHJhdmVyc2FsLmdyYXBoID0gJkdyYXBoe30KLQkJdHJhdmVyc2FsLkJ5dGVjb2RlID0gJkJ5dGVjb2Rle30KLQkJdHJhdmVyc2FsQnl0ZWNvZGUsIGVyciA6PSBiYy5jb252ZXJ0QXJndW1lbnQodHJhdmVyc2FsKQotCQlhc3NlcnQuRXF1YWwodCwgbmV3RXJyb3IoZXJyMTAwMUNvbnZlcnRBcmd1bWVudENoaWxkVHJhdmVyc2FsTm90RnJvbUFub25FcnJvciksIGVycikKLQkJYXNzZXJ0Lk5pbCh0LCB0cmF2ZXJzYWxCeXRlY29kZSkKLQl9KQotCi0JdC5SdW4oIlRlc3QgQnl0ZWNvZGUgdHJhdmVyc2FsIGFyZ3VtZW50IG11bHRpcGxlIGJpbmRpbmdzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJYmMgOj0gQnl0ZWNvZGV7fQotCQliYy5iaW5kaW5ncyA9IG1hcFtzdHJpbmddaW50ZXJmYWNle317fQotCQl0ZXN0VHJhdmVyc2FsIDo9ICZHcmFwaFRyYXZlcnNhbHsKLQkJCSZUcmF2ZXJzYWx7fSwKLQkJfQotCQl0ZXN0VHJhdmVyc2FsLkJ5dGVjb2RlID0gJkJ5dGVjb2Rle30KLQkJdGVzdFRyYXZlcnNhbC5CeXRlY29kZS5iaW5kaW5ncyA9IG1hcFtzdHJpbmddaW50ZXJmYWNle317Im1vY2siOiAiMTIzIn0KLQkJdHJhdmVyc2FsQnl0ZWNvZGUsIGVyciA6PSBiYy5jb252ZXJ0QXJndW1lbnQodGVzdFRyYXZlcnNhbCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5FcXVhbCh0LCB0ZXN0VHJhdmVyc2FsLkJ5dGVjb2RlLCB0cmF2ZXJzYWxCeXRlY29kZSkKLQl9KQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvY2xpZW50LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvY2xpZW50LmdvCmluZGV4IGM1MWM5MGQuLjRkNzk5YjggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2NsaWVudC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9jbGllbnQuZ28KQEAgLTIxLDExMSArMjEsMTA3IEBACiAKIGltcG9ydCAoCiAJImNyeXB0by90bHMiCi0JInJ1bnRpbWUiCisJInJlZmxlY3QiCiAJInRpbWUiCiAKIAkiZ29sYW5nLm9yZy94L3RleHQvbGFuZ3VhZ2UiCiApCiAKK2NvbnN0IGNvbm5lY3Rpb25UaW1lb3V0RGVmYXVsdCA9IDUgKiB0aW1lLlNlY29uZAorCiAvLyBDbGllbnRTZXR0aW5ncyBpcyB1c2VkIHRvIG1vZGlmeSBhIENsaWVudCdzIHNldHRpbmdzIG9uIGluaXRpYWxpemF0aW9uLgogdHlwZSBDbGllbnRTZXR0aW5ncyBzdHJ1Y3QgewogCVRyYXZlcnNhbFNvdXJjZSAgIHN0cmluZwotCVRyYW5zcG9ydGVyVHlwZSAgIFRyYW5zcG9ydGVyVHlwZQogCUxvZ1ZlcmJvc2l0eSAgICAgIExvZ1ZlcmJvc2l0eQogCUxvZ2dlciAgICAgICAgICAgIExvZ2dlcgogCUxhbmd1YWdlICAgICAgICAgIGxhbmd1YWdlLlRhZwotCUF1dGhJbmZvICAgICAgICAgIEF1dGhJbmZvUHJvdmlkZXIKIAlUbHNDb25maWcgICAgICAgICAqdGxzLkNvbmZpZwotCUtlZXBBbGl2ZUludGVydmFsIHRpbWUuRHVyYXRpb24KLQlXcml0ZURlYWRsaW5lICAgICB0aW1lLkR1cmF0aW9uCiAJQ29ubmVjdGlvblRpbWVvdXQgdGltZS5EdXJhdGlvbgogCUVuYWJsZUNvbXByZXNzaW9uIGJvb2wKLQlSZWFkQnVmZmVyU2l6ZSAgICBpbnQKLQlXcml0ZUJ1ZmZlclNpemUgICBpbnQKLQlTZXNzaW9uICAgICAgICAgICBzdHJpbmcKIAotCS8vIE1pbmltdW0gYW1vdW50IG9mIGNvbmN1cnJlbnQgYWN0aXZlIHRyYXZlcnNhbHMgb24gYSBjb25uZWN0aW9uIHRvIHRyaWdnZXIgY3JlYXRpb24gb2YgYSBuZXcgY29ubmVjdGlvbgotCU5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQgaW50Ci0JLy8gTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucy4gRGVmYXVsdDogbnVtYmVyIG9mIHJ1bnRpbWUgcHJvY2Vzc29ycworCS8vIE1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVENQIGNvbm5lY3Rpb25zCisJLy8gdG8gdGhlIEdyZW1saW4gc2VydmVyLiBUaGlzIGxpbWl0cyBob3cgbWFueSByZXF1ZXN0cyBjYW4gYmUgaW4tZmxpZ2h0IHNpbXVsdGFuZW91c2x5LgorCS8vIERlZmF1bHQ6IDEyOC4gU2V0IHRvIDAgdG8gdXNlIHRoZSBkZWZhdWx0LgogCU1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgaW50Ci0JLy8gSW5pdGlhbCBhbW91bnQgb2YgaW5zdGFudGlhdGVkIGNvbm5lY3Rpb25zLiBEZWZhdWx0OiAxCi0JSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucyBpbnQKLQlFbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgICAgIGJvb2wKKworCS8vIE1heElkbGVDb25uZWN0aW9ucyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaWRsZSAoa2VlcC1hbGl2ZSkgY29ubmVjdGlvbnMgdG8gcmV0YWluCisJLy8gaW4gdGhlIGNvbm5lY3Rpb24gcG9vbC4gSWRsZSBjb25uZWN0aW9ucyBhcmUgcmV1c2VkIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzLgorCS8vIERlZmF1bHQ6IDguIFNldCB0byAwIHRvIHVzZSB0aGUgZGVmYXVsdC4KKwlNYXhJZGxlQ29ubmVjdGlvbnMgaW50CisKKwkvLyBJZGxlQ29ubmVjdGlvblRpbWVvdXQgaXMgaG93IGxvbmcgYW4gaWRsZSBjb25uZWN0aW9uIHJlbWFpbnMgaW4gdGhlIHBvb2wgYmVmb3JlCisJLy8gYmVpbmcgY2xvc2VkLiBTZXQgdGhpcyB0byBtYXRjaCB5b3VyIHNlcnZlcidzIGlkbGUgdGltZW91dCBpZiBuZWVkZWQuCisJLy8gRGVmYXVsdDogMTgwIHNlY29uZHMgKDMgbWludXRlcykuIFNldCB0byAwIHRvIHVzZSB0aGUgZGVmYXVsdC4KKwlJZGxlQ29ubmVjdGlvblRpbWVvdXQgdGltZS5EdXJhdGlvbgorCisJLy8gS2VlcEFsaXZlSW50ZXJ2YWwgaXMgdGhlIGludGVydmFsIGJldHdlZW4gVENQIGtlZXAtYWxpdmUgcHJvYmVzIG9uIGlkbGUgY29ubmVjdGlvbnMuCisJLy8gVGhpcyBoZWxwcyBkZXRlY3QgZGVhZCBjb25uZWN0aW9ucyBhbmQga2VlcHMgY29ubmVjdGlvbnMgYWxpdmUgdGhyb3VnaCBmaXJld2FsbHMuCisJLy8gRGVmYXVsdDogMzAgc2Vjb25kcy4gU2V0IHRvIDAgdG8gdXNlIHRoZSBkZWZhdWx0LgorCUtlZXBBbGl2ZUludGVydmFsIHRpbWUuRHVyYXRpb24KKworCUVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCBib29sCisKKwkvLyBSZXF1ZXN0SW50ZXJjZXB0b3JzIGFyZSBmdW5jdGlvbnMgdGhhdCBtb2RpZnkgSFRUUCByZXF1ZXN0cyBiZWZvcmUgc2VuZGluZy4KKwlSZXF1ZXN0SW50ZXJjZXB0b3JzIFtdUmVxdWVzdEludGVyY2VwdG9yCiB9CiAKIC8vIENsaWVudCBpcyB1c2VkIHRvIGNvbm5lY3QgYW5kIGludGVyYWN0IHdpdGggYSBHcmVtbGluLXN1cHBvcnRlZCBzZXJ2ZXIuCiB0eXBlIENsaWVudCBzdHJ1Y3QgewotCXVybCAgICAgICAgICAgICBzdHJpbmcKLQl0cmF2ZXJzYWxTb3VyY2Ugc3RyaW5nCi0JbG9nSGFuZGxlciAgICAgICpsb2dIYW5kbGVyCi0JdHJhbnNwb3J0ZXJUeXBlIFRyYW5zcG9ydGVyVHlwZQotCWNvbm5lY3Rpb25zICAgICBjb25uZWN0aW9uUG9vbAotCXNlc3Npb24gICAgICAgICBzdHJpbmcKKwl1cmwgICAgICAgICAgICAgICAgc3RyaW5nCisJdHJhdmVyc2FsU291cmNlICAgIHN0cmluZworCWxvZ0hhbmRsZXIgICAgICAgICAqbG9nSGFuZGxlcgorCWNvbm5lY3Rpb25TZXR0aW5ncyAqY29ubmVjdGlvblNldHRpbmdzCisJY29ubiAgICAgICAgICAgICAgICpjb25uZWN0aW9uCiB9CiAKLS8vIE5ld0NsaWVudCBjcmVhdGVzIGEgQ2xpZW50IGFuZCBjb25maWd1cmVzIGl0IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIER1cmluZyBjcmVhdGlvbiBvZiB0aGUgQ2xpZW50LCBhIGNvbm5lY3Rpb24KLS8vIGlzIGNyZWF0ZWQsIHdoaWNoIGVzdGFibGlzaGVzIGEgd2Vic29ja2V0LgorLy8gTmV3Q2xpZW50IGNyZWF0ZXMgYSBDbGllbnQgYW5kIGNvbmZpZ3VyZXMgaXQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4KIC8vIEltcG9ydGFudCBub3RlOiB0byBhdm9pZCBsZWFraW5nIGEgY29ubmVjdGlvbiwgYWx3YXlzIGNsb3NlIHRoZSBDbGllbnQuCiBmdW5jIE5ld0NsaWVudCh1cmwgc3RyaW5nLCBjb25maWd1cmF0aW9ucyAuLi5mdW5jKHNldHRpbmdzICpDbGllbnRTZXR0aW5ncykpICgqQ2xpZW50LCBlcnJvcikgewogCXNldHRpbmdzIDo9ICZDbGllbnRTZXR0aW5nc3sKIAkJVHJhdmVyc2FsU291cmNlOiAgICAgICAgICAiZyIsCi0JCVRyYW5zcG9ydGVyVHlwZTogICAgICAgICAgR29yaWxsYSwKIAkJTG9nVmVyYm9zaXR5OiAgICAgICAgICAgICBJbmZvLAogCQlMb2dnZXI6ICAgICAgICAgICAgICAgICAgICZkZWZhdWx0TG9nZ2Vye30sCiAJCUxhbmd1YWdlOiAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UuRW5nbGlzaCwKLQkJQXV0aEluZm86ICAgICAgICAgICAgICAgICAmQXV0aEluZm97fSwKIAkJVGxzQ29uZmlnOiAgICAgICAgICAgICAgICAmdGxzLkNvbmZpZ3t9LAotCQlLZWVwQWxpdmVJbnRlcnZhbDogICAgICAgIGtlZXBBbGl2ZUludGVydmFsRGVmYXVsdCwKLQkJV3JpdGVEZWFkbGluZTogICAgICAgICAgICB3cml0ZURlYWRsaW5lRGVmYXVsdCwKIAkJQ29ubmVjdGlvblRpbWVvdXQ6ICAgICAgICBjb25uZWN0aW9uVGltZW91dERlZmF1bHQsCiAJCUVuYWJsZUNvbXByZXNzaW9uOiAgICAgICAgZmFsc2UsCiAJCUVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogdHJ1ZSwKLQkJUmVhZEJ1ZmZlclNpemU6ICAgICAgICAgICByZWFkQnVmZmVyU2l6ZURlZmF1bHQsCi0JCVdyaXRlQnVmZmVyU2l6ZTogICAgICAgICAgd3JpdGVCdWZmZXJTaXplRGVmYXVsdCwKIAotCQlOZXdDb25uZWN0aW9uVGhyZXNob2xkOiAgICAgICBkZWZhdWx0TmV3Q29ubmVjdGlvblRocmVzaG9sZCwKLQkJTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9uczogcnVudGltZS5OdW1DUFUoKSwKLQkJSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9uczogZGVmYXVsdEluaXRpYWxDb25jdXJyZW50Q29ubmVjdGlvbnMsCisJCU1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnM6IDAsIC8vIFVzZSBkZWZhdWx0ICgxMjgpCisJCU1heElkbGVDb25uZWN0aW9uczogICAgICAgICAgIDAsIC8vIFVzZSBkZWZhdWx0ICg4KQorCQlJZGxlQ29ubmVjdGlvblRpbWVvdXQ6ICAgICAgICAwLCAvLyBVc2UgZGVmYXVsdCAoMTgwcykKKwkJS2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICAgICAgMCwgLy8gVXNlIGRlZmF1bHQgKDMwcykKIAl9CiAJZm9yIF8sIGNvbmZpZ3VyYXRpb24gOj0gcmFuZ2UgY29uZmlndXJhdGlvbnMgewogCQljb25maWd1cmF0aW9uKHNldHRpbmdzKQogCX0KIAogCWNvbm5TZXR0aW5ncyA6PSAmY29ubmVjdGlvblNldHRpbmdzewotCQlhdXRoSW5mbzogICAgICAgICAgICAgICAgIHNldHRpbmdzLkF1dGhJbmZvLAogCQl0bHNDb25maWc6ICAgICAgICAgICAgICAgIHNldHRpbmdzLlRsc0NvbmZpZywKLQkJa2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICBzZXR0aW5ncy5LZWVwQWxpdmVJbnRlcnZhbCwKLQkJd3JpdGVEZWFkbGluZTogICAgICAgICAgICBzZXR0aW5ncy5Xcml0ZURlYWRsaW5lLAogCQljb25uZWN0aW9uVGltZW91dDogICAgICAgIHNldHRpbmdzLkNvbm5lY3Rpb25UaW1lb3V0LAorCQltYXhDb25uc1Blckhvc3Q6ICAgICAgICAgIHNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMsCisJCW1heElkbGVDb25uc1Blckhvc3Q6ICAgICAgc2V0dGluZ3MuTWF4SWRsZUNvbm5lY3Rpb25zLAorCQlpZGxlQ29ublRpbWVvdXQ6ICAgICAgICAgIHNldHRpbmdzLklkbGVDb25uZWN0aW9uVGltZW91dCwKKwkJa2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICBzZXR0aW5ncy5LZWVwQWxpdmVJbnRlcnZhbCwKIAkJZW5hYmxlQ29tcHJlc3Npb246ICAgICAgICBzZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbiwKLQkJcmVhZEJ1ZmZlclNpemU6ICAgICAgICAgICBzZXR0aW5ncy5SZWFkQnVmZmVyU2l6ZSwKLQkJd3JpdGVCdWZmZXJTaXplOiAgICAgICAgICBzZXR0aW5ncy5Xcml0ZUJ1ZmZlclNpemUsCiAJCWVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogc2V0dGluZ3MuRW5hYmxlVXNlckFnZW50T25Db25uZWN0LAogCX0KIAogCWxvZ0hhbmRsZXIgOj0gbmV3TG9nSGFuZGxlcihzZXR0aW5ncy5Mb2dnZXIsIHNldHRpbmdzLkxvZ1ZlcmJvc2l0eSwgc2V0dGluZ3MuTGFuZ3VhZ2UpCiAKLQlpZiBzZXR0aW5ncy5Jbml0aWFsQ29uY3VycmVudENvbm5lY3Rpb25zID4gc2V0dGluZ3MuTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucyB7Ci0JCWxvZ0hhbmRsZXIubG9nZihXYXJuaW5nLCBwb29sSW5pdGlhbEV4Y2VlZHNNYXhpbXVtLCBzZXR0aW5ncy5Jbml0aWFsQ29uY3VycmVudENvbm5lY3Rpb25zLAotCQkJc2V0dGluZ3MuTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucywgc2V0dGluZ3MuTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucykKLQkJc2V0dGluZ3MuSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucyA9IHNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMKLQl9Ci0JcG9vbCwgZXJyIDo9IG5ld0xvYWRCYWxhbmNpbmdQb29sKHVybCwgbG9nSGFuZGxlciwgY29ublNldHRpbmdzLCBzZXR0aW5ncy5OZXdDb25uZWN0aW9uVGhyZXNob2xkLAotCQlzZXR0aW5ncy5NYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zLCBzZXR0aW5ncy5Jbml0aWFsQ29uY3VycmVudENvbm5lY3Rpb25zKQotCWlmIGVyciAhPSBuaWwgewotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCWxvZ0hhbmRsZXIubG9nZihFcnJvciwgbG9nRXJyb3JHZW5lcmljLCAiTmV3Q2xpZW50IiwgZXJyLkVycm9yKCkpCi0JCX0KLQkJcmV0dXJuIG5pbCwgZXJyCisJY29ubiA6PSBuZXdDb25uZWN0aW9uKGxvZ0hhbmRsZXIsIHVybCwgY29ublNldHRpbmdzKQorCisJLy8gQWRkIHVzZXItcHJvdmlkZWQgaW50ZXJjZXB0b3JzCisJZm9yIF8sIGludGVyY2VwdG9yIDo9IHJhbmdlIHNldHRpbmdzLlJlcXVlc3RJbnRlcmNlcHRvcnMgeworCQljb25uLkFkZEludGVyY2VwdG9yKGludGVyY2VwdG9yKQogCX0KIAogCWNsaWVudCA6PSAmQ2xpZW50ewotCQl1cmw6ICAgICAgICAgICAgIHVybCwKLQkJdHJhdmVyc2FsU291cmNlOiBzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UsCi0JCWxvZ0hhbmRsZXI6ICAgICAgbG9nSGFuZGxlciwKLQkJdHJhbnNwb3J0ZXJUeXBlOiBzZXR0aW5ncy5UcmFuc3BvcnRlclR5cGUsCi0JCWNvbm5lY3Rpb25zOiAgICAgcG9vbCwKLQkJc2Vzc2lvbjogICAgICAgICBzZXR0aW5ncy5TZXNzaW9uLAorCQl1cmw6ICAgICAgICAgICAgICAgIHVybCwKKwkJdHJhdmVyc2FsU291cmNlOiAgICBzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UsCisJCWxvZ0hhbmRsZXI6ICAgICAgICAgbG9nSGFuZGxlciwKKwkJY29ubmVjdGlvblNldHRpbmdzOiBjb25uU2V0dGluZ3MsCisJCWNvbm46ICAgICAgICAgICAgICAgY29ubiwKIAl9CiAKIAlyZXR1cm4gY2xpZW50LCBuaWwKQEAgLTEzNCwyNyArMTMwLDIyIEBACiAvLyBDbG9zZSBjbG9zZXMgdGhlIGNsaWVudCB2aWEgY29ubmVjdGlvbi4KIC8vIFRoaXMgaXMgaWRlbXBvdGVudCBkdWUgdG8gdGhlIHVuZGVybHlpbmcgY2xvc2UoKSBtZXRob2RzIGJlaW5nIGlkZW1wb3RlbnQgYXMgd2VsbC4KIGZ1bmMgKGNsaWVudCAqQ2xpZW50KSBDbG9zZSgpIHsKLQkvLyBJZiBpdCBpcyBhIHNlc3Npb24sIGNhbGwgY2xvc2VTZXNzaW9uCi0JaWYgY2xpZW50LnNlc3Npb24gIT0gIiIgewotCQllcnIgOj0gY2xpZW50LmNsb3NlU2Vzc2lvbigpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJY2xpZW50LmxvZ0hhbmRsZXIubG9nZihXYXJuaW5nLCBjbG9zZVNlc3Npb25SZXF1ZXN0RXJyb3IsIGNsaWVudC51cmwsIGNsaWVudC5zZXNzaW9uLCBlcnIuRXJyb3IoKSkKLQkJfQotCQljbGllbnQuc2Vzc2lvbiA9ICIiCi0JfQogCWNsaWVudC5sb2dIYW5kbGVyLmxvZ2YoSW5mbywgY2xvc2VDbGllbnQsIGNsaWVudC51cmwpCi0JY2xpZW50LmNvbm5lY3Rpb25zLmNsb3NlKCkKKwlpZiBjbGllbnQuY29ubiAhPSBuaWwgeworCQljbGllbnQuY29ubi5jbG9zZSgpCisJfQorfQorCitmdW5jIChjbGllbnQgKkNsaWVudCkgZXJyb3JDYWxsYmFjaygpIHsKKwljbGllbnQubG9nSGFuZGxlci5sb2coRXJyb3IsIGVycm9yQ2FsbGJhY2spCiB9CiAKIC8vIFN1Ym1pdFdpdGhPcHRpb25zIHN1Ym1pdHMgYSBHcmVtbGluIHNjcmlwdCB0byB0aGUgc2VydmVyIHdpdGggc3BlY2lmaWVkIFJlcXVlc3RPcHRpb25zIGFuZCByZXR1cm5zIGEgUmVzdWx0U2V0LgogZnVuYyAoY2xpZW50ICpDbGllbnQpIFN1Ym1pdFdpdGhPcHRpb25zKHRyYXZlcnNhbFN0cmluZyBzdHJpbmcsIHJlcXVlc3RPcHRpb25zIFJlcXVlc3RPcHRpb25zKSAoUmVzdWx0U2V0LCBlcnJvcikgewogCWNsaWVudC5sb2dIYW5kbGVyLmxvZ2YoRGVidWcsIHN1Ym1pdFN0YXJ0ZWRTdHJpbmcsIHRyYXZlcnNhbFN0cmluZykKLQlyZXF1ZXN0IDo9IE1ha2VTdHJpbmdSZXF1ZXN0KHRyYXZlcnNhbFN0cmluZywgY2xpZW50LnRyYXZlcnNhbFNvdXJjZSwgY2xpZW50LnNlc3Npb24sIHJlcXVlc3RPcHRpb25zKQotCXJlc3VsdCwgZXJyIDo9IGNsaWVudC5jb25uZWN0aW9ucy53cml0ZSgmcmVxdWVzdCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJY2xpZW50LmxvZ0hhbmRsZXIubG9nZihFcnJvciwgbG9nRXJyb3JHZW5lcmljLCAiQ2xpZW50LlN1Ym1pdCgpIiwgZXJyLkVycm9yKCkpCi0JfQotCXJldHVybiByZXN1bHQsIGVycgorCXJlcXVlc3QgOj0gTWFrZVN0cmluZ1JlcXVlc3QodHJhdmVyc2FsU3RyaW5nLCBjbGllbnQudHJhdmVyc2FsU291cmNlLCByZXF1ZXN0T3B0aW9ucykKKwlycywgZXJyIDo9IGNsaWVudC5jb25uLnN1Ym1pdCgmcmVxdWVzdCkKKwlyZXR1cm4gcnMsIGVycgogfQogCiAvLyBTdWJtaXQgc3VibWl0cyBhIEdyZW1saW4gc2NyaXB0IHRvIHRoZSBzZXJ2ZXIgYW5kIHJldHVybnMgYSBSZXN1bHRTZXQuIFN1Ym1pdCBjYW4gb3B0aW9uYWxseSBhY2NlcHQgYSBtYXAgb2YgYmluZGluZ3MKQEAgLTE2OCwxOSArMTU5LDQzIEBACiAJcmV0dXJuIGNsaWVudC5TdWJtaXRXaXRoT3B0aW9ucyh0cmF2ZXJzYWxTdHJpbmcsIHJlcXVlc3RPcHRpb25zQnVpbGRlci5DcmVhdGUoKSkKIH0KIAotLy8gc3VibWl0Qnl0ZWNvZGUgc3VibWl0cyBCeXRlY29kZSB0byB0aGUgc2VydmVyIHRvIGV4ZWN1dGUgYW5kIHJldHVybnMgYSBSZXN1bHRTZXQuCi1mdW5jIChjbGllbnQgKkNsaWVudCkgc3VibWl0Qnl0ZWNvZGUoYnl0ZWNvZGUgKkJ5dGVjb2RlKSAoUmVzdWx0U2V0LCBlcnJvcikgewotCWNsaWVudC5sb2dIYW5kbGVyLmxvZ2YoRGVidWcsIHN1Ym1pdFN0YXJ0ZWRCeXRlY29kZSwgKmJ5dGVjb2RlKQotCXJlcXVlc3QgOj0gTWFrZUJ5dGVjb2RlUmVxdWVzdChieXRlY29kZSwgY2xpZW50LnRyYXZlcnNhbFNvdXJjZSwgY2xpZW50LnNlc3Npb24pCi0JcmV0dXJuIGNsaWVudC5jb25uZWN0aW9ucy53cml0ZSgmcmVxdWVzdCkKKy8vIHN1Ym1pdEdyZW1saW5MYW5nIHN1Ym1pdHMgR3JlbWxpbkxhbmcgdG8gdGhlIHNlcnZlciB0byBleGVjdXRlIGFuZCByZXR1cm5zIGEgUmVzdWx0U2V0LgorZnVuYyAoY2xpZW50ICpDbGllbnQpIHN1Ym1pdEdyZW1saW5MYW5nKGdyZW1saW5MYW5nICpHcmVtbGluTGFuZykgKFJlc3VsdFNldCwgZXJyb3IpIHsKKwljbGllbnQubG9nSGFuZGxlci5sb2dmKERlYnVnLCBzdWJtaXRTdGFydGVkU3RyaW5nLCAqZ3JlbWxpbkxhbmcpCisJcmVxdWVzdE9wdGlvbnNCdWlsZGVyIDo9IG5ldyhSZXF1ZXN0T3B0aW9uc0J1aWxkZXIpCisJaWYgbGVuKGdyZW1saW5MYW5nLkdldFBhcmFtZXRlcnMoKSkgPiAwIHsKKwkJcmVxdWVzdE9wdGlvbnNCdWlsZGVyLlNldEJpbmRpbmdzKGdyZW1saW5MYW5nLkdldFBhcmFtZXRlcnMoKSkKKwl9CisJaWYgbGVuKGdyZW1saW5MYW5nLm9wdGlvbnNTdHJhdGVnaWVzKSA+IDAgeworCQlyZXF1ZXN0T3B0aW9uc0J1aWxkZXIgPSBhcHBseU9wdGlvbnNDb25maWcocmVxdWVzdE9wdGlvbnNCdWlsZGVyLCBncmVtbGluTGFuZy5vcHRpb25zU3RyYXRlZ2llc1swXS5jb25maWd1cmF0aW9uKQorCX0KKworCXJlcXVlc3QgOj0gTWFrZVN0cmluZ1JlcXVlc3QoZ3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpLCBjbGllbnQudHJhdmVyc2FsU291cmNlLCByZXF1ZXN0T3B0aW9uc0J1aWxkZXIuQ3JlYXRlKCkpCisJcmV0dXJuIGNsaWVudC5jb25uLnN1Ym1pdCgmcmVxdWVzdCkKIH0KIAotZnVuYyAoY2xpZW50ICpDbGllbnQpIGNsb3NlU2Vzc2lvbigpIGVycm9yIHsKLQltZXNzYWdlIDo9IG1ha2VDbG9zZVNlc3Npb25SZXF1ZXN0KGNsaWVudC5zZXNzaW9uKQotCXJlc3VsdCwgZXJyIDo9IGNsaWVudC5jb25uZWN0aW9ucy53cml0ZSgmbWVzc2FnZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgorZnVuYyBhcHBseU9wdGlvbnNDb25maWcoYnVpbGRlciAqUmVxdWVzdE9wdGlvbnNCdWlsZGVyLCBjb25maWcgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKlJlcXVlc3RPcHRpb25zQnVpbGRlciB7CisJYnVpbGRlclZhbHVlIDo9IHJlZmxlY3QuVmFsdWVPZihidWlsZGVyKQorCisJLy8gTWFwIGNvbmZpZ3VyYXRpb24ga2V5cyB0byBzZXR0ZXIgbWV0aG9kIG5hbWVzCisJc2V0dGVyTWFwIDo9IG1hcFtzdHJpbmddc3RyaW5neworCQkicmVxdWVzdElkIjogICAgICAgICAgICAgIlNldFJlcXVlc3RJZCIsCisJCSJldmFsdWF0aW9uVGltZW91dCI6ICAgICAiU2V0RXZhbHVhdGlvblRpbWVvdXQiLAorCQkiYmF0Y2hTaXplIjogICAgICAgICAgICAgIlNldEJhdGNoU2l6ZSIsCisJCSJ1c2VyQWdlbnQiOiAgICAgICAgICAgICAiU2V0VXNlckFnZW50IiwKKwkJImJpbmRpbmdzIjogICAgICAgICAgICAgICJTZXRCaW5kaW5ncyIsCisJCSJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiOiAiU2V0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwKIAl9Ci0JXywgZXJyID0gcmVzdWx0LkFsbCgpCi0JcmV0dXJuIGVycgorCisJZm9yIGtleSwgdmFsdWUgOj0gcmFuZ2UgY29uZmlnIHsKKwkJaWYgbWV0aG9kTmFtZSwgZXhpc3RzIDo9IHNldHRlck1hcFtrZXldOyBleGlzdHMgeworCQkJbWV0aG9kIDo9IGJ1aWxkZXJWYWx1ZS5NZXRob2RCeU5hbWUobWV0aG9kTmFtZSkKKwkJCWlmIG1ldGhvZC5Jc1ZhbGlkKCkgeworCQkJCWFyZ3MgOj0gW11yZWZsZWN0LlZhbHVle3JlZmxlY3QuVmFsdWVPZih2YWx1ZSl9CisJCQkJbWV0aG9kLkNhbGwoYXJncykKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBidWlsZGVyCiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9jbGllbnRfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2NsaWVudF90ZXN0LmdvCmluZGV4IDc5YzU2ODkuLjQ3ZDcwNjIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2NsaWVudF90ZXN0LmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL2NsaWVudF90ZXN0LmdvCkBAIC0yMSwyMSArMjEsMTUgQEAKIAogaW1wb3J0ICgKIAkiY3J5cHRvL3RscyIKLQkiZm10IgotCSJsb2ciCi0JIm9zIgogCSJ0ZXN0aW5nIgogCi0JImdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQiCiAJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCi0JImdvcGtnLmluL3lhbWwudjMiCiApCiAKIGZ1bmMgVGVzdENsaWVudCh0ICp0ZXN0aW5nLlQpIHsKIAkvLyBJbnRlZ3JhdGlvbiB0ZXN0IHZhcmlhYmxlcy4KIAl0ZXN0Tm9BdXRoVXJsIDo9IGdldEVudk9yRGVmYXVsdFN0cmluZygiR1JFTUxJTl9TRVJWRVJfVVJMIiwgbm9BdXRoVXJsKQogCXRlc3ROb0F1dGhFbmFibGUgOj0gZ2V0RW52T3JEZWZhdWx0Qm9vbCgiUlVOX0lOVEVHUkFUSU9OX1RFU1RTIiwgdHJ1ZSkKLQl0ZXN0Tm9BdXRoQXV0aEluZm8gOj0gJkF1dGhJbmZve30KIAl0ZXN0Tm9BdXRoVGxzQ29uZmlnIDo9ICZ0bHMuQ29uZmlne30KIAogCXQuUnVuKCJUZXN0IGNsaWVudC5TdWJtaXRXaXRoT3B0aW9ucygpIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKQEAgLTQzLDcgKzM3LDYgQEAKIAkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3ROb0F1dGhVcmwsCiAJCQlmdW5jKHNldHRpbmdzICpDbGllbnRTZXR0aW5ncykgewogCQkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhUbHNDb25maWcKLQkJCQlzZXR0aW5ncy5BdXRoSW5mbyA9IHRlc3ROb0F1dGhBdXRoSW5mbwogCQkJfSkKIAkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQogCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKQEAgLTYzLDE5ICs1NiwxNCBAQAogCQljbGllbnQsIGVyciA6PSBOZXdDbGllbnQodGVzdE5vQXV0aFVybCwKIAkJCWZ1bmMoc2V0dGluZ3MgKkNsaWVudFNldHRpbmdzKSB7CiAJCQkJc2V0dGluZ3MuVGxzQ29uZmlnID0gdGVzdE5vQXV0aFRsc0NvbmZpZwotCQkJCXNldHRpbmdzLkF1dGhJbmZvID0gdGVzdE5vQXV0aEF1dGhJbmZvCiAJCQl9KQogCQlhc3NlcnQuTm9FcnJvcih0LCBlcnIpCiAJCWFzc2VydC5Ob3ROaWwodCwgY2xpZW50KQotCQlyZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0KCIyKzIiKQorCQlyZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0KCJnLmluamVjdCgyKSIpCiAJCWFzc2VydC5Ob0Vycm9yKHQsIGVycikKIAkJYXNzZXJ0Lk5vdE5pbCh0LCByZXN1bHRTZXQpCiAKIAkJY2xpZW50LkNsb3NlKCkKLQkJcG9vbCA6PSBjbGllbnQuY29ubmVjdGlvbnMuKCpsb2FkQmFsYW5jaW5nUG9vbCkKLQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbihwb29sLmNvbm5lY3Rpb25zKSkKLQkJYXNzZXJ0LlRydWUodCwgcG9vbC5pc0Nsb3NlZCkKLQkJYXNzZXJ0LkVxdWFsKHQsIGNsb3NlZCwgcG9vbC5jb25uZWN0aW9uc1swXS5zdGF0ZSkKIAl9KQogCiAJdC5SdW4oIlRlc3QgY2xpZW50LlN1Ym1pdCgpIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKQEAgLTgzLDcgKzcxLDYgQEAKIAkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3ROb0F1dGhVcmwsCiAJCQlmdW5jKHNldHRpbmdzICpDbGllbnRTZXR0aW5ncykgewogCQkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhUbHNDb25maWcKLQkJCQlzZXR0aW5ncy5BdXRoSW5mbyA9IHRlc3ROb0F1dGhBdXRoSW5mbwogCQkJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9IHRlc3RTZXJ2ZXJNb2Rlcm5HcmFwaEFsaWFzCiAJCQl9KQogCQlhc3NlcnQuTm9FcnJvcih0LCBlcnIpCkBAIC0xMDYsMTYgKzkzLDE1IEBACiAJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAogCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKIAkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KIAkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyTW9kZXJuR3JhcGhBbGlhcwogCQkJfSkKIAkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQogCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKIAkJZGVmZXIgY2xpZW50LkNsb3NlKCkKIAotCQliaW5kaW5ncyA6PSBtYXBbc3RyaW5nXWludGVyZmFjZXt9eyJ4IjogMn0KKwkJYmluZGluZ3MgOj0gbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsieCI6IDF9CiAKLQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdCgieCArIHgiLCBiaW5kaW5ncykKKwkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdCgiZy5WKHgpLnZhbHVlcyhcIm5hbWVcIikiLCBiaW5kaW5ncykKIAkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQogCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKIApAQCAtMTIzLDcgKzEwOSw3IEBACiAJCWFzc2VydC5Ob0Vycm9yKHQsIGVycikKIAkJYXNzZXJ0LlRydWUodCwgb2spCiAKLQkJYXNzZXJ0LkVxdWFsKHQsIGludDY0KDQpLCByZXN1bHQuRGF0YSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJtYXJrbyIsIHJlc3VsdC5EYXRhKQogCX0pCiAKIAl0LlJ1bigiVGVzdCBjbGllbnQuU3VibWl0V2l0aE9wdGlvbnMoKSB3aXRoIGJpbmRpbmdzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKQEAgLTEzMSwxNiArMTE3LDE1IEBACiAJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAogCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKIAkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KIAkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyTW9kZXJuR3JhcGhBbGlhcwogCQkJfSkKIAkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQogCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKIAkJZGVmZXIgY2xpZW50LkNsb3NlKCkKIAotCQliaW5kaW5ncyA6PSBtYXBbc3RyaW5nXWludGVyZmFjZXt9eyJ4IjogMn0KKwkJYmluZGluZ3MgOj0gbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsieCI6IDF9CiAKLQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCJ4ICsgeCIsIG5ldyhSZXF1ZXN0T3B0aW9uc0J1aWxkZXIpLlNldEJpbmRpbmdzKGJpbmRpbmdzKS5DcmVhdGUoKSkKKwkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCJnLlYoeCkudmFsdWVzKFwibmFtZVwiKSIsIG5ldyhSZXF1ZXN0T3B0aW9uc0J1aWxkZXIpLlNldEJpbmRpbmdzKGJpbmRpbmdzKS5DcmVhdGUoKSkKIAkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQogCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKIApAQCAtMTQ4LDcgKzEzMyw3IEBACiAJCWFzc2VydC5Ob0Vycm9yKHQsIGVycikKIAkJYXNzZXJ0LlRydWUodCwgb2spCiAKLQkJYXNzZXJ0LkVxdWFsKHQsIGludDY0KDQpLCByZXN1bHQuRGF0YSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJtYXJrbyIsIHJlc3VsdC5EYXRhKQogCX0pCiAKIAl0LlJ1bigiVGVzdCBjbGllbnQuc3VibWl0KCkgd2l0aCBtYXRlcmlhbGl6ZVByb3BlcnRpZXMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewpAQCAtMTU2LDcgKzE0MSw2IEBACiAJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAogCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKIAkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KIAkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyTW9kZXJuR3JhcGhBbGlhcwogCQkJfSkKIApAQCAtMTc5LDcgKzE2Myw2IEBACiAJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAogCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKIAkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KIAkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyQ3Jld0dyYXBoQWxpYXMKIAkJCX0pCiAKQEAgLTE5NiwzOCArMTc5LDYgQEAKIAogCQlBc3NlcnRWZXJ0ZXhQcm9wZXJ0aWVzV2l0aFByb3BlcnRpZXModCwgcmVzdWx0KQogCX0pCi0KLQl0LlJ1bigiVGVzdCBzZXNzaW9uZWQgY2xpZW50IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3ROb0F1dGhVcmwsCi0JCQlmdW5jKHNldHRpbmdzICpDbGllbnRTZXR0aW5ncykgewotCQkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhUbHNDb25maWcKLQkJCQlzZXR0aW5ncy5BdXRoSW5mbyA9IHRlc3ROb0F1dGhBdXRoSW5mbwotCQkJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9IHRlc3RTZXJ2ZXJNb2Rlcm5HcmFwaEFsaWFzCi0JCQkJc2V0dGluZ3MuU2Vzc2lvbiA9ICJzZXNzaW9uSUQiCi0JCQl9KQotCQlhc3NlcnQuTm9FcnJvcih0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgY2xpZW50KQotCQlkZWZlciBjbGllbnQuQ2xvc2UoKQotCi0JCXJlc3VsdFNldCwgZXJyIDo9IGNsaWVudC5TdWJtaXQoInggPSAxKzEiKQotCQlhc3NlcnQuTm9FcnJvcih0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCi0JCXJlc3VsdCwgb2ssIGVyciA6PSByZXN1bHRTZXQuT25lKCkKLQkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQotCQlhc3NlcnQuVHJ1ZSh0LCBvaykKLQkJYXNzZXJ0LkVxdWFsVmFsdWVzKHQsIDIsIHJlc3VsdC5EYXRhKQotCi0JCXJlc3VsdFNldCwgZXJyID0gY2xpZW50LlN1Ym1pdCgieCsxIikKLQkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKLQotCQlyZXN1bHQsIG9rLCBlcnIgPSByZXN1bHRTZXQuT25lKCkKLQkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQotCQlhc3NlcnQuVHJ1ZSh0LCBvaykKLQkJYXNzZXJ0LkVxdWFsVmFsdWVzKHQsIDMsIHJlc3VsdC5EYXRhKQotCX0pCiB9CiAKIGZ1bmMgQXNzZXJ0VmVydGV4UHJvcGVydGllc1dpdGhQcm9wZXJ0aWVzKHQgKnRlc3RpbmcuVCwgcmVzdWx0ICpSZXN1bHQpIHsKQEAgLTI4OCwyMDIgKzIzOSwzIEBACiAJYXNzZXJ0LlRydWUodCwgb2spCiAJYXNzZXJ0LkVxdWFsKHQsIDAsIGxlbihwcm9wZXJ0aWVzKSkKIH0KLQotLy8gQ2xpZW50IGlzIHVzZWQgdG8gY29ubmVjdCBhbmQgaW50ZXJhY3Qgd2l0aCBhIEdyZW1saW4tc3VwcG9ydGVkIHNlcnZlci4KLXR5cGUgU29ja2V0U2VydmVyU2V0dGluZ3Mgc3RydWN0IHsKLQlQT1JUIGludCBgeWFtbDoiUE9SVCJgCi0JLyoqCi0JICogQ29uZmlndXJlcyB3aGljaCBzZXJpYWxpemVyIHdpbGwgYmUgdXNlZC4gRXg6ICJHcmFwaEJpbmFyeVYxIiBvciAiR3JhcGhTT05WMiIKLQkgKi8KLQlTRVJJQUxJWkVSIHN0cmluZyBgeWFtbDoiU0VSSUFMSVpFUiJgCi0JLyoqCi0JICogSWYgYSByZXF1ZXN0IHdpdGggdGhpcyBJRCBjb21lcyB0byB0aGUgc2VydmVyLCB0aGUgc2VydmVyIHJlc3BvbmRzIGJhY2sgd2l0aCBhIHNpbmdsZSB2ZXJ0ZXggcGlja2VkIGZyb20gTW9kZXJuCi0JICogZ3JhcGguCi0JICovCi0JU0lOR0xFX1ZFUlRFWF9SRVFVRVNUX0lEIHV1aWQuVVVJRCBgeWFtbDoiU0lOR0xFX1ZFUlRFWF9SRVFVRVNUX0lEImAKLQkvKioKLQkgKiBJZiBhIHJlcXVlc3Qgd2l0aCB0aGlzIElEIGNvbWVzIHRvIHRoZSBzZXJ2ZXIsIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgYmFjayB3aXRoIGEgc2luZ2xlIHZlcnRleCBwaWNrZWQgZnJvbSBNb2Rlcm4KLQkgKiBncmFwaC4gQWZ0ZXIgYSAyIHNlY29uZCBkZWxheSwgc2VydmVyIHNlbmRzIGEgQ2xvc2UgV2ViU29ja2V0IGZyYW1lIG9uIHRoZSBzYW1lIGNvbm5lY3Rpb24uCi0JICovCi0JU0lOR0xFX1ZFUlRFWF9ERUxBWUVEX0NMT1NFX0NPTk5FQ1RJT05fUkVRVUVTVF9JRCB1dWlkLlVVSUQgYHlhbWw6IlNJTkdMRV9WRVJURVhfREVMQVlFRF9DTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSUQiYAotCS8qKgotCSAqIFNlcnZlciB3YWl0cyBmb3IgMSBzZWNvbmQsIHRoZW4gcmVzcG9uZHMgd2l0aCBhIDUwMCBlcnJvciBzdGF0dXMgY29kZQotCSAqLwotCUZBSUxFRF9BRlRFUl9ERUxBWV9SRVFVRVNUX0lEIHV1aWQuVVVJRCBgeWFtbDoiRkFJTEVEX0FGVEVSX0RFTEFZX1JFUVVFU1RfSUQiYAotCS8qKgotCSAqIFNlcnZlciB3YWl0cyBmb3IgMSBzZWNvbmQgdGhlbiByZXNwb25kcyB3aXRoIGEgY2xvc2Ugd2ViIHNvY2tldCBmcmFtZQotCSAqLwotCUNMT1NFX0NPTk5FQ1RJT05fUkVRVUVTVF9JRCB1dWlkLlVVSUQgYHlhbWw6IkNMT1NFX0NPTk5FQ1RJT05fUkVRVUVTVF9JRCJgCi0JLyoqCi0JICogU2FtZSBhcyBDTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSUQKLQkgKi8KLQlDTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSURfMiB1dWlkLlVVSUQgYHlhbWw6IkNMT1NFX0NPTk5FQ1RJT05fUkVRVUVTVF9JRF8yImAKLQkvKioKLQkgKiBJZiBhIHJlcXVlc3Qgd2l0aCB0aGlzIElEIGNvbWVzIHRvIHRoZSBzZXJ2ZXIsIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCB0aGUgdXNlciBhZ2VudCAoaWYgYW55KSB0aGF0IHdhcyBjYXB0dXJlZAotCSAqIGR1cmluZyB0aGUgd2ViIHNvY2tldCBoYW5kc2hha2UuCi0JICovCi0JVVNFUl9BR0VOVF9SRVFVRVNUX0lEIHV1aWQuVVVJRCBgeWFtbDoiVVNFUl9BR0VOVF9SRVFVRVNUX0lEImAKLQkvKioKLQkgKiBJZiBhIHJlcXVlc3Qgd2l0aCB0aGlzIElEIGNvbWVzIHRvIHRoZSBzZXJ2ZXIsIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGFsbCBvdmVycmlkZGVuCi0JICogcGVyIHJlcXVlc3Qgc2V0dGluZ3MgZnJvbSB0aGUgcmVxdWVzdCBtZXNzYWdlLiBTdHJpbmcgd2lsbCBiZSBvZiB0aGUgZm9ybQotCSAqICJyZXF1ZXN0SWQ9MTk0MzZkOWUtZjhmYy00YjY3LThhNzYtZGVlYzYwOTE4NDI0IGV2YWx1YXRpb25UaW1lb3V0PTEyMzQsIGJhdGNoU2l6ZT0xMiwgdXNlckFnZW50PXRlc3RVc2VyQWdlbnQiCi0JICovCi0JUEVSX1JFUVVFU1RfU0VUVElOR1NfUkVRVUVTVF9JRCB1dWlkLlVVSUQgYHlhbWw6IlBFUl9SRVFVRVNUX1NFVFRJTkdTX1JFUVVFU1RfSUQiYAotfQotCi1mdW5jIEZyb21ZYW1sKHBhdGggc3RyaW5nKSAqU29ja2V0U2VydmVyU2V0dGluZ3MgewotCXNvY2tldFNlcnZlclNldHRpbmdzIDo9IG5ldyhTb2NrZXRTZXJ2ZXJTZXR0aW5ncykKLQlmLCBlcnIgOj0gb3MuUmVhZEZpbGUocGF0aCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JaWYgZXJyIDo9IHlhbWwuVW5tYXJzaGFsKGYsIHNvY2tldFNlcnZlclNldHRpbmdzKTsgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCXJldHVybiBzb2NrZXRTZXJ2ZXJTZXR0aW5ncwotfQotCi1mdW5jIFRlc3RDbGllbnRBZ2FpbnN0U29ja2V0U2VydmVyKHQgKnRlc3RpbmcuVCkgewotCS8vIEludGVncmF0aW9uIHRlc3QgdmFyaWFibGVzLgotCXRlc3ROb0F1dGhFbmFibGUgOj0gZ2V0RW52T3JEZWZhdWx0Qm9vbCgiUlVOX0lOVEVHUkFUSU9OX1RFU1RTIiwgdHJ1ZSkKLQlzZXR0aW5ncyA6PSBGcm9tWWFtbChnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fU09DS0VUX1NFUlZFUl9DT05GSUdfUEFUSCIsICIuLi8uLi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mL3Rlc3Qtd3MtZ3JlbWxpbi55YW1sIikpCi0JdGVzdFNvY2tldFNlcnZlclVybCA6PSBnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fU09DS0VUX1NFUlZFUl9VUkwiLCAid3M6Ly9sb2NhbGhvc3QiKQotCXRlc3RTb2NrZXRTZXJ2ZXJVcmwgPSBmbXQuU3ByaW50ZigiJXM6JXYvZ3JlbWxpbiIsIHRlc3RTb2NrZXRTZXJ2ZXJVcmwsIHNldHRpbmdzLlBPUlQpCi0KLQkvKioKLQkgKiBOb3RlOiBUaGlzIHRlc3QgZG9lcyBub3QgZGVtb25zdHJhdGUgYW55dGhpbmcgdXNlZnVsIG90aGVyIHRoYW4gdGhlIGFiaWxpdHkgdG8gY29ubmVjdCB0byBhbmQKLQkgKiB1c2UgZ3JlbWxpbi1zb2NrZXQtc2VydmVyLiBDdXJyZW50bHksIGltcGxlbWVudGluZyBtb3JlIHVzZWZ1bCB0ZXN0cyBhcmUgYmxvY2tlZCBieSBUSU5LRVJQT1AtMjg0NS4KLQkgKiBUaGlzIHRlc3QgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9uY2UgbW9yZSBpbnRlcmVzdGluZyB0ZXN0cyBoYXZlIGJlZW4gYWRkZWQgd2hpY2ggdXRpbGl6ZQotCSAqIGdyZW1saW4tc29ja2V0LXNlcnZlci4KLQkgKi8KLQl0LlJ1bigiU2hvdWxkIGdldCBzaW5nbGUgdmVydGV4IHJlc3BvbnNlIGZyb20gZ3JlbWxpbiBzb2NrZXQgc2VydmVyIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3RTb2NrZXRTZXJ2ZXJVcmwpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKLQkJZGVmZXIgY2xpZW50LkNsb3NlKCkKLQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCIxIiwgbmV3KFJlcXVlc3RPcHRpb25zQnVpbGRlcikuCi0JCQlTZXRSZXF1ZXN0SWQoc2V0dGluZ3MuU0lOR0xFX1ZFUlRFWF9SRVFVRVNUX0lEKS5DcmVhdGUoKSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCQlyZXN1bHQsIG9rLCBlcnIgOj0gcmVzdWx0U2V0Lk9uZSgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuVHJ1ZSh0LCBvaykKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByZXN1bHQpCi0JfSkKLQotCS8qKgotCSAqIFRlc3RzIHRoYXQgY2xpZW50IGlzIGNvcnJlY3RseSBzZW5kaW5nIHVzZXIgYWdlbnQgZHVyaW5nIHdlYiBzb2NrZXQgaGFuZHNoYWtlIGJ5IGhhdmluZyB0aGUgc2VydmVyIHJldHVybgotCSAqIHRoZSBjYXB0dXJlZCB1c2VyIGFnZW50LgotCSAqLwotCXQuUnVuKCJTaG91bGQgaW5jbHVkZSB1c2VyIGFnZW50IGluIGhhbmRzaGFrZSByZXF1ZXN0IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3RTb2NrZXRTZXJ2ZXJVcmwpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKLQkJZGVmZXIgY2xpZW50LkNsb3NlKCkKLQotCQlyZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0V2l0aE9wdGlvbnMoIjEiLCBuZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS4KLQkJCVNldFJlcXVlc3RJZChzZXR0aW5ncy5VU0VSX0FHRU5UX1JFUVVFU1RfSUQpLkNyZWF0ZSgpKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByZXN1bHRTZXQpCi0KLQkJcmVzdWx0LCBvaywgZXJyIDo9IHJlc3VsdFNldC5PbmUoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LlRydWUodCwgb2spCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0KQotCi0JCXVzZXJBZ2VudFJlc3BvbnNlIDo9IHJlc3VsdC5HZXRTdHJpbmcoKQotCQlhc3NlcnQuRXF1YWwodCwgdXNlckFnZW50LCB1c2VyQWdlbnRSZXNwb25zZSkKLQl9KQotCi0JLyoqCi0JICogVGVzdHMgdGhhdCBubyB1c2VyIGFnZW50IChvdGhlciB0aGFuIHRoZSBkZWZhdWx0IG9uZSBwcm92aWRlZCBieSBnb3JpbGxhKSBpcyBzZW50IHRvIHNlcnZlciB3aGVuCi0JICogdGhhdCBiZWhhdmlvdXIgaXMgZGlzYWJsZWQuCi0JICovCi0JdC5SdW4oIlNob3VsZCBub3QgaW5jbHVkZSB1c2VyIGFnZW50IGluIGhhbmRzaGFrZSByZXF1ZXN0IGlmIGRpc2FibGVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3RTb2NrZXRTZXJ2ZXJVcmwsCi0JCQlmdW5jKHNldHRpbmdzICpDbGllbnRTZXR0aW5ncykgewotCQkJCXNldHRpbmdzLkVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCA9IGZhbHNlCi0JCQl9KQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBjbGllbnQpCi0JCWRlZmVyIGNsaWVudC5DbG9zZSgpCi0KLQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCIxIiwgbmV3KFJlcXVlc3RPcHRpb25zQnVpbGRlcikuCi0JCQlTZXRSZXF1ZXN0SWQoc2V0dGluZ3MuVVNFUl9BR0VOVF9SRVFVRVNUX0lEKS5DcmVhdGUoKSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCi0JCXJlc3VsdCwgb2ssIGVyciA6PSByZXN1bHRTZXQuT25lKCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5UcnVlKHQsIG9rKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdCkKLQotCQl1c2VyQWdlbnRSZXNwb25zZSA6PSByZXN1bHQuR2V0U3RyaW5nKCkKLQkJLy9JZiB0aGUgZ3JlbWxpbiB1c2VyIGFnZW50IGlzIGRpc2FibGVkLCB0aGUgdW5kZXJseWluZyB3ZWIgc29ja2V0IGxpYnJhcnkgcmV2ZXJ0cyB0byBzZW5kaW5nIGl0cyBkZWZhdWx0IHVzZXIgYWdlbnQKLQkJLy9kdXJpbmcgY29ubmVjdGlvbiByZXF1ZXN0cy4KLQkJYXNzZXJ0LkNvbnRhaW5zKHQsIHVzZXJBZ2VudFJlc3BvbnNlLCAiR28taHR0cC1jbGllbnQvIikKLQl9KQotCi0JLyoqCi0JICogVGVzdHMgdGhhdCBjbGllbnQgaXMgY29ycmVjdGx5IHNlbmRpbmcgYWxsIG92ZXJyaWRhYmxlIHBlciByZXF1ZXN0IHNldHRpbmdzIChyZXF1ZXN0SWQsIGJhdGNoU2l6ZSwKLQkgKiBldmFsdWF0aW9uVGltZW91dCwgYW5kIHVzZXJBZ2VudCkgdG8gdGhlIHNlcnZlci4KLQkgKi8KLQl0LlJ1bigiU2hvdWxkIFNlbmQgUGVyIFJlcXVlc3QgU2V0dGluZ3MgVG8gU2VydmVyIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY2xpZW50LCBlcnIgOj0gTmV3Q2xpZW50KHRlc3RTb2NrZXRTZXJ2ZXJVcmwpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKLQkJZGVmZXIgY2xpZW50LkNsb3NlKCkKLQotCQlyZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0V2l0aE9wdGlvbnMoIjEiLCBuZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS4KLQkJCVNldFJlcXVlc3RJZChzZXR0aW5ncy5QRVJfUkVRVUVTVF9TRVRUSU5HU19SRVFVRVNUX0lEKS4KLQkJCVNldEV2YWx1YXRpb25UaW1lb3V0KDEyMzQpLgotCQkJU2V0QmF0Y2hTaXplKDEyKS4KLQkJCVNldFVzZXJBZ2VudCgiaGVsbG9Xb3JsZCIpLgotCQkJU2V0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzKCJ0b2tlbnMiKS4KLQkJCUNyZWF0ZSgpKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByZXN1bHRTZXQpCi0JCXJlc3VsdCwgb2ssIGVyciA6PSByZXN1bHRTZXQuT25lKCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5UcnVlKHQsIG9rKQotCQlleHBlY3RlZFJlc3VsdCA6PSBmbXQuU3ByaW50ZigicmVxdWVzdElkPSV2IGV2YWx1YXRpb25UaW1lb3V0PSV2LCBiYXRjaFNpemU9JXYsIHVzZXJBZ2VudD0ldiwgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzPSV2IiwKLQkJCXNldHRpbmdzLlBFUl9SRVFVRVNUX1NFVFRJTkdTX1JFUVVFU1RfSUQsIDEyMzQsIDEyLCAiaGVsbG9Xb3JsZCIsICJ0b2tlbnMiKQotCQlhc3NlcnQuRXF1YWwodCwgZXhwZWN0ZWRSZXN1bHQsIHJlc3VsdC5EYXRhKQotCX0pCi0KLQkvKioKLQkgKiBOb3RlOiBUaGlzIHRlc3QgY3VycmVudGx5IGZhaWxzIGR1ZSB0byByYWNlIGNvbmRpdGlvbiBjaGVjayBpbiBnbyB0ZXN0IGFuZCBpcyBvbmx5IGluY2x1ZGVkIGZvciBkZW1vbnN0cmF0aW9uCi0JICogcHVycG9zZXMuIFNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUC0yODQ1LgotCSAqIFRoaXMgdGVzdCBzaG91bGQgYmUgdW5jb21tZW50ZWQgd2l0aCB0aGUgcmVzb2x1dGlvbiBvZiBUSU5LRVJQT1AtMjg0NQotCSAqLwotCS8qCi0JCXQuUnVuKCJTaG91bGQgdHJ5IGNyZWF0ZSBuZXcgY29ubmVjdGlvbiBpZiBjbG9zZWQgYnkgc2VydmVyIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCi0JCQljbGllbnQsIGVyciA6PSBOZXdDbGllbnQodGVzdFNvY2tldFNlcnZlclVybCkKLQkJCWRlZmVyIGNsaWVudC5DbG9zZSgpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5Ob3ROaWwodCwgY2xpZW50KQotCQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCIxIiwgbmV3KFJlcXVlc3RPcHRpb25zQnVpbGRlcikuCi0JCQkJU2V0UmVxdWVzdElkKHNldHRpbmdzLkNMT1NFX0NPTk5FQ1RJT05fUkVRVUVTVF9JRCkuQ3JlYXRlKCkpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCi0JCQlyZXN1bHQsIG9rLCBlcnIgOj0gcmVzdWx0U2V0Lk9uZSgpCi0KLQkJCWFzc2VydC5FcXVhbEVycm9yKHQsIGVyciwgIndlYnNvY2tldDogY2xvc2UgMTAwNSAobm8gc3RhdHVzKSIpCi0KLQkJCXJlc3VsdFNldCwgZXJyID0gY2xpZW50LlN1Ym1pdFdpdGhPcHRpb25zKCIxIiwgbmV3KFJlcXVlc3RPcHRpb25zQnVpbGRlcikuCi0JCQkJU2V0UmVxdWVzdElkKHNldHRpbmdzLlNJTkdMRV9WRVJURVhfUkVRVUVTVF9JRCkuQ3JlYXRlKCkpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCQkJcmVzdWx0LCBvaywgZXJyID0gcmVzdWx0U2V0Lk9uZSgpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5UcnVlKHQsIG9rKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCByZXN1bHQpCi0JCX0pCi0JKi8KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2Nvbm5lY3Rpb24uZ28gYi9ncmVtbGluLWdvL2RyaXZlci9jb25uZWN0aW9uLmdvCmluZGV4IGFiOTNlYzMuLjU0ZGVmNTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2Nvbm5lY3Rpb24uZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvY29ubmVjdGlvbi5nbwpAQCAtMjAsMTM5ICsyMCwzMjQgQEAKIHBhY2thZ2UgZ3JlbWxpbmdvCiAKIGltcG9ydCAoCisJImJ5dGVzIgorCSJjb21wcmVzcy96bGliIgogCSJjcnlwdG8vdGxzIgorCSJlbmNvZGluZy9qc29uIgorCSJmbXQiCisJImlvIgorCSJuZXQiCisJIm5ldC9odHRwIgorCSJzdHJpbmdzIgogCSJzeW5jIgogCSJ0aW1lIgogKQogCi10eXBlIGNvbm5lY3Rpb25TdGF0ZSBpbnQKLQotY29uc3QgKAotCWluaXRpYWxpemVkIGNvbm5lY3Rpb25TdGF0ZSA9IGlvdGEgKyAxCi0JZXN0YWJsaXNoZWQKLQljbG9zZWQKLQljbG9zZWREdWVUb0Vycm9yCi0pCi0KLXR5cGUgY29ubmVjdGlvbiBzdHJ1Y3QgewotCWxvZ0hhbmRsZXIgKmxvZ0hhbmRsZXIKLQlwcm90b2NvbCAgIHByb3RvY29sCi0JcmVzdWx0cyAgICAqc3luY2hyb25pemVkTWFwCi0Jc3RhdGUgICAgICBjb25uZWN0aW9uU3RhdGUKLX0KLQorLy8gY29ubmVjdGlvblNldHRpbmdzIGhvbGRzIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb25uZWN0aW9uLgogdHlwZSBjb25uZWN0aW9uU2V0dGluZ3Mgc3RydWN0IHsKLQlhdXRoSW5mbyAgICAgICAgICAgICAgICAgQXV0aEluZm9Qcm92aWRlcgogCXRsc0NvbmZpZyAgICAgICAgICAgICAgICAqdGxzLkNvbmZpZwotCWtlZXBBbGl2ZUludGVydmFsICAgICAgICB0aW1lLkR1cmF0aW9uCi0Jd3JpdGVEZWFkbGluZSAgICAgICAgICAgIHRpbWUuRHVyYXRpb24KIAljb25uZWN0aW9uVGltZW91dCAgICAgICAgdGltZS5EdXJhdGlvbgorCW1heENvbm5zUGVySG9zdCAgICAgICAgICBpbnQKKwltYXhJZGxlQ29ubnNQZXJIb3N0ICAgICAgaW50CisJaWRsZUNvbm5UaW1lb3V0ICAgICAgICAgIHRpbWUuRHVyYXRpb24KKwlrZWVwQWxpdmVJbnRlcnZhbCAgICAgICAgdGltZS5EdXJhdGlvbgogCWVuYWJsZUNvbXByZXNzaW9uICAgICAgICBib29sCi0JcmVhZEJ1ZmZlclNpemUgICAgICAgICAgIGludAotCXdyaXRlQnVmZmVyU2l6ZSAgICAgICAgICBpbnQKIAllbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgYm9vbAogfQogCi1mdW5jIChjb25uZWN0aW9uICpjb25uZWN0aW9uKSBlcnJvckNhbGxiYWNrKCkgewotCWNvbm5lY3Rpb24ubG9nSGFuZGxlci5sb2coRXJyb3IsIGVycm9yQ2FsbGJhY2spCi0JY29ubmVjdGlvbi5zdGF0ZSA9IGNsb3NlZER1ZVRvRXJyb3IKKy8vIGNvbm5lY3Rpb24gaGFuZGxlcyBIVFRQIHJlcXVlc3QvcmVzcG9uc2UgZm9yIEdyZW1saW4gcXVlcmllcy4KKy8vIFRoaXMgaXMgdGhlIHRyYW5zcG9ydCBsYXllciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGEgR3JlbWxpbiBzZXJ2ZXIuCit0eXBlIGNvbm5lY3Rpb24gc3RydWN0IHsKKwl1cmwgICAgICAgICAgc3RyaW5nCisJaHR0cENsaWVudCAgICpodHRwLkNsaWVudAorCWNvbm5TZXR0aW5ncyAqY29ubmVjdGlvblNldHRpbmdzCisJbG9nSGFuZGxlciAgICpsb2dIYW5kbGVyCisJc2VyaWFsaXplciAgICpHcmFwaEJpbmFyeVNlcmlhbGl6ZXIKKwlpbnRlcmNlcHRvcnMgW11SZXF1ZXN0SW50ZXJjZXB0b3IKKwl3ZyAgICAgICAgICAgc3luYy5XYWl0R3JvdXAKK30KIAotCS8vIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGZyb20gd2l0aGluIHByb3RvY29sLnJlYWRMb29wLiBUaGVyZWZvcmUsCi0JLy8gaXQgY2Fubm90IHdhaXQgZm9yIGl0IHRvIGZpbmlzaCB0byBhdm9pZCBhIGRlYWRsb2NrLgotCWlmIGVyciA6PSBjb25uZWN0aW9uLnByb3RvY29sLmNsb3NlKGZhbHNlKTsgZXJyICE9IG5pbCB7Ci0JCWNvbm5lY3Rpb24ubG9nSGFuZGxlci5sb2dmKEVycm9yLCBmYWlsZWRUb0Nsb3NlSW5FcnJvckNhbGxiYWNrLCBlcnIuRXJyb3IoKSkKKy8vIENvbm5lY3Rpb24gcG9vbCBkZWZhdWx0cyBhbGlnbmVkIHdpdGggSmF2YSBkcml2ZXIKK2NvbnN0ICgKKwlkZWZhdWx0TWF4Q29ubnNQZXJIb3N0ICAgICA9IDEyOCAgICAgICAgICAgICAgIC8vIEphdmE6IENvbm5lY3Rpb25Qb29sLk1BWF9QT09MX1NJWkUKKwlkZWZhdWx0TWF4SWRsZUNvbm5zUGVySG9zdCA9IDggICAgICAgICAgICAgICAgIC8vIEtlZXAgc29tZSBjb25uZWN0aW9ucyB3YXJtCisJZGVmYXVsdElkbGVDb25uVGltZW91dCAgICAgPSAxODAgKiB0aW1lLlNlY29uZCAvLyBKYXZhOiBDT05ORUNUSU9OX0lETEVfVElNRU9VVF9NSUxMSVMKKwlkZWZhdWx0Q29ubmVjdGlvblRpbWVvdXQgICA9IDE1ICogdGltZS5TZWNvbmQgIC8vIEphdmE6IENPTk5FQ1RJT05fU0VUVVBfVElNRU9VVF9NSUxMSVMKKwlkZWZhdWx0S2VlcEFsaXZlSW50ZXJ2YWwgICA9IDMwICogdGltZS5TZWNvbmQgIC8vIFRDUCBrZWVwLWFsaXZlIHByb2JlIGludGVydmFsCispCisKK2Z1bmMgbmV3Q29ubmVjdGlvbihoYW5kbGVyICpsb2dIYW5kbGVyLCB1cmwgc3RyaW5nLCBjb25uU2V0dGluZ3MgKmNvbm5lY3Rpb25TZXR0aW5ncykgKmNvbm5lY3Rpb24geworCS8vIEFwcGx5IGRlZmF1bHRzIGZvciB6ZXJvIHZhbHVlcworCWNvbm5lY3Rpb25UaW1lb3V0IDo9IGNvbm5TZXR0aW5ncy5jb25uZWN0aW9uVGltZW91dAorCWlmIGNvbm5lY3Rpb25UaW1lb3V0ID09IDAgeworCQljb25uZWN0aW9uVGltZW91dCA9IGRlZmF1bHRDb25uZWN0aW9uVGltZW91dAorCX0KKworCW1heENvbm5zUGVySG9zdCA6PSBjb25uU2V0dGluZ3MubWF4Q29ubnNQZXJIb3N0CisJaWYgbWF4Q29ubnNQZXJIb3N0ID09IDAgeworCQltYXhDb25uc1Blckhvc3QgPSBkZWZhdWx0TWF4Q29ubnNQZXJIb3N0CisJfQorCisJbWF4SWRsZUNvbm5zUGVySG9zdCA6PSBjb25uU2V0dGluZ3MubWF4SWRsZUNvbm5zUGVySG9zdAorCWlmIG1heElkbGVDb25uc1Blckhvc3QgPT0gMCB7CisJCW1heElkbGVDb25uc1Blckhvc3QgPSBkZWZhdWx0TWF4SWRsZUNvbm5zUGVySG9zdAorCX0KKworCWlkbGVDb25uVGltZW91dCA6PSBjb25uU2V0dGluZ3MuaWRsZUNvbm5UaW1lb3V0CisJaWYgaWRsZUNvbm5UaW1lb3V0ID09IDAgeworCQlpZGxlQ29ublRpbWVvdXQgPSBkZWZhdWx0SWRsZUNvbm5UaW1lb3V0CisJfQorCisJa2VlcEFsaXZlSW50ZXJ2YWwgOj0gY29ublNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsCisJaWYga2VlcEFsaXZlSW50ZXJ2YWwgPT0gMCB7CisJCWtlZXBBbGl2ZUludGVydmFsID0gZGVmYXVsdEtlZXBBbGl2ZUludGVydmFsCisJfQorCisJdHJhbnNwb3J0IDo9ICZodHRwLlRyYW5zcG9ydHsKKwkJRGlhbENvbnRleHQ6ICgmbmV0LkRpYWxlcnsKKwkJCVRpbWVvdXQ6ICAgY29ubmVjdGlvblRpbWVvdXQsCisJCQlLZWVwQWxpdmU6IGtlZXBBbGl2ZUludGVydmFsLAorCQl9KS5EaWFsQ29udGV4dCwKKwkJVExTQ2xpZW50Q29uZmlnOiAgICAgY29ublNldHRpbmdzLnRsc0NvbmZpZywKKwkJTWF4Q29ubnNQZXJIb3N0OiAgICAgbWF4Q29ubnNQZXJIb3N0LAorCQlNYXhJZGxlQ29ubnNQZXJIb3N0OiBtYXhJZGxlQ29ubnNQZXJIb3N0LAorCQlJZGxlQ29ublRpbWVvdXQ6ICAgICBpZGxlQ29ublRpbWVvdXQsCisJCURpc2FibGVDb21wcmVzc2lvbjogICFjb25uU2V0dGluZ3MuZW5hYmxlQ29tcHJlc3Npb24sCisJfQorCisJcmV0dXJuICZjb25uZWN0aW9ueworCQl1cmw6ICAgICAgICAgIHVybCwKKwkJaHR0cENsaWVudDogICAmaHR0cC5DbGllbnR7VHJhbnNwb3J0OiB0cmFuc3BvcnR9LCAvLyBObyBUaW1lb3V0IC0gYWxsb3dzIHN0cmVhbWluZworCQljb25uU2V0dGluZ3M6IGNvbm5TZXR0aW5ncywKKwkJbG9nSGFuZGxlcjogICBoYW5kbGVyLAorCQlzZXJpYWxpemVyOiAgIG5ld0dyYXBoQmluYXJ5U2VyaWFsaXplcihoYW5kbGVyKSwKIAl9CiB9CiAKLWZ1bmMgKGNvbm5lY3Rpb24gKmNvbm5lY3Rpb24pIGNsb3NlKCkgZXJyb3IgewotCWlmIGNvbm5lY3Rpb24uc3RhdGUgIT0gZXN0YWJsaXNoZWQgewotCQlyZXR1cm4gbmV3RXJyb3IoZXJyMDEwMUNvbm5lY3Rpb25DbG9zZUVycm9yKQotCX0KLQljb25uZWN0aW9uLmxvZ0hhbmRsZXIubG9nKEluZm8sIGNsb3NlQ29ubmVjdGlvbikKLQl2YXIgZXJyIGVycm9yCi0JaWYgY29ubmVjdGlvbi5wcm90b2NvbCAhPSBuaWwgewotCQllcnIgPSBjb25uZWN0aW9uLnByb3RvY29sLmNsb3NlKHRydWUpCi0JfQotCWNvbm5lY3Rpb24uc3RhdGUgPSBjbG9zZWQKLQlyZXR1cm4gZXJyCisvLyBBZGRJbnRlcmNlcHRvciBhZGRzIGEgcmVxdWVzdCBpbnRlcmNlcHRvciB0byB0aGUgY2hhaW4uCitmdW5jIChjICpjb25uZWN0aW9uKSBBZGRJbnRlcmNlcHRvcihpbnRlcmNlcHRvciBSZXF1ZXN0SW50ZXJjZXB0b3IpIHsKKwljLmludGVyY2VwdG9ycyA9IGFwcGVuZChjLmludGVyY2VwdG9ycywgaW50ZXJjZXB0b3IpCiB9CiAKLWZ1bmMgKGNvbm5lY3Rpb24gKmNvbm5lY3Rpb24pIHdyaXRlKHJlcXVlc3QgKnJlcXVlc3QpIChSZXN1bHRTZXQsIGVycm9yKSB7Ci0JaWYgY29ubmVjdGlvbi5zdGF0ZSAhPSBlc3RhYmxpc2hlZCB7Ci0JCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjAxMDJXcml0ZUNvbm5lY3Rpb25DbG9zZWRFcnJvcikKLQl9Ci0JY29ubmVjdGlvbi5sb2dIYW5kbGVyLmxvZyhEZWJ1Zywgd3JpdGVSZXF1ZXN0KQotCXJlcXVlc3RJRCA6PSByZXF1ZXN0LnJlcXVlc3RJRC5TdHJpbmcoKQotCWNvbm5lY3Rpb24ubG9nSGFuZGxlci5sb2dmKERlYnVnLCBjcmVhdGluZ1JlcXVlc3QsIHJlcXVlc3RJRCkKLQlyZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldChyZXF1ZXN0SUQsIGNvbm5lY3Rpb24ucmVzdWx0cykKLQljb25uZWN0aW9uLnJlc3VsdHMuc3RvcmUocmVxdWVzdElELCByZXN1bHRTZXQpCi0JcmV0dXJuIHJlc3VsdFNldCwgY29ubmVjdGlvbi5wcm90b2NvbC53cml0ZShyZXF1ZXN0KQorLy8gc3VibWl0IHNlbmRzIHJlcXVlc3QgYW5kIHN0cmVhbXMgcmVzdWx0cyBkaXJlY3RseSB0byBSZXN1bHRTZXQKK2Z1bmMgKGMgKmNvbm5lY3Rpb24pIHN1Ym1pdChyZXEgKlJlcXVlc3RNZXNzYWdlKSAoUmVzdWx0U2V0LCBlcnJvcikgeworCXJzIDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQoKQorCisJYy53Zy5BZGQoMSkKKwlnbyBmdW5jKCkgeworCQlkZWZlciBjLndnLkRvbmUoKQorCQljLmV4ZWN1dGVBbmRTdHJlYW0ocmVxLCBycykKKwl9KCkKKworCXJldHVybiBycywgbmlsCiB9CiAKLWZ1bmMgKGNvbm5lY3Rpb24gKmNvbm5lY3Rpb24pIGFjdGl2ZVJlc3VsdHMoKSBpbnQgewotCXJldHVybiBjb25uZWN0aW9uLnJlc3VsdHMuc2l6ZSgpCi19CitmdW5jIChjICpjb25uZWN0aW9uKSBleGVjdXRlQW5kU3RyZWFtKHJlcSAqUmVxdWVzdE1lc3NhZ2UsIHJzIFJlc3VsdFNldCkgeworCWRlZmVyIHJzLkNsb3NlKCkKIAotLy8gY3JlYXRlQ29ubmVjdGlvbiBlc3RhYmxpc2hlcyBhIGNvbm5lY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycy4gQSBjb25uZWN0aW9uIHNob3VsZCBhbHdheXMgYmUgY2xvc2VkIHRvIGF2b2lkCi0vLyBsZWFraW5nIGNvbm5lY3Rpb25zLiBUaGUgY29ubmVjdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBzdGF0ZXM6Ci0vLwotLy8JaW5pdGlhbGl6ZWQ6IGNvbm5lY3Rpb24gc3RydWN0IGlzIGNyZWF0ZWQgYnV0IGhhcyBub3QgZXN0YWJsaXNoZWQgY29tbXVuaWNhdGlvbiB3aXRoIHNlcnZlcgotLy8JZXN0YWJsaXNoZWQ6IGNvbm5lY3Rpb24gaGFzIGVzdGFibGlzaGVkIGNvbW11bmljYXRpb24gZXN0YWJsaXNoZWQgd2l0aCB0aGUgc2VydmVyCi0vLwljbG9zZWQ6IGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBieSB0aGUgdXNlci4KLS8vCWNsb3NlZER1ZVRvRXJyb3I6IGNvbm5lY3Rpb24gd2FzIGNsb3NlZCBpbnRlcm5hbGx5IGR1ZSB0byBhbiBlcnJvci4KLWZ1bmMgY3JlYXRlQ29ubmVjdGlvbih1cmwgc3RyaW5nLCBsb2dIYW5kbGVyICpsb2dIYW5kbGVyLCBjb25uU2V0dGluZ3MgKmNvbm5lY3Rpb25TZXR0aW5ncykgKCpjb25uZWN0aW9uLCBlcnJvcikgewotCWNvbm4gOj0gJmNvbm5lY3Rpb257Ci0JCWxvZ0hhbmRsZXIsCi0JCW5pbCwKLQkJJnN5bmNocm9uaXplZE1hcHttYXBbc3RyaW5nXVJlc3VsdFNldHt9LCBzeW5jLk11dGV4e319LAotCQlpbml0aWFsaXplZCwKLQl9Ci0JbG9nSGFuZGxlci5sb2coSW5mbywgY29ubmVjdENvbm5lY3Rpb24pCi0JcHJvdG9jb2wsIGVyciA6PSBuZXdHcmVtbGluU2VydmVyV1NQcm90b2NvbChsb2dIYW5kbGVyLCBHb3JpbGxhLCB1cmwsIGNvbm5TZXR0aW5ncywgY29ubi5yZXN1bHRzLCBjb25uLmVycm9yQ2FsbGJhY2spCisJLy8gQ3JlYXRlIEh0dHBSZXF1ZXN0IGZvciBpbnRlcmNlcHRvcnMKKwlodHRwUmVxLCBlcnIgOj0gTmV3SHR0cFJlcXVlc3QoaHR0cC5NZXRob2RQb3N0LCBjLnVybCkKIAlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nSGFuZGxlci5sb2dmKFdhcm5pbmcsIGZhaWxlZENvbm5lY3Rpb24pCi0JCWNvbm4uc3RhdGUgPSBjbG9zZWREdWVUb0Vycm9yCi0JCXJldHVybiBuaWwsIGVycgorCQljLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgZmFpbGVkVG9TZW5kUmVxdWVzdCwgZXJyLkVycm9yKCkpCisJCXJzLnNldEVycm9yKGVycikKKwkJcmV0dXJuCiAJfQotCWNvbm4ucHJvdG9jb2wgPSBwcm90b2NvbAotCWNvbm4uc3RhdGUgPSBlc3RhYmxpc2hlZAotCXJldHVybiBjb25uLCBlcnIKLX0KIAotdHlwZSBzeW5jaHJvbml6ZWRNYXAgc3RydWN0IHsKLQlpbnRlcm5hbE1hcCBtYXBbc3RyaW5nXVJlc3VsdFNldAotCXN5bmNMb2NrICAgIHN5bmMuTXV0ZXgKLX0KKwkvLyBTZXQgZGVmYXVsdCBoZWFkZXJzIGJlZm9yZSBpbnRlcmNlcHRvcnMKKwljLnNldEh0dHBSZXF1ZXN0SGVhZGVycyhodHRwUmVxKQogCi1mdW5jIChzICpzeW5jaHJvbml6ZWRNYXApIHN0b3JlKGtleSBzdHJpbmcsIHZhbHVlIFJlc3VsdFNldCkgewotCXMuc3luY0xvY2suTG9jaygpCi0JZGVmZXIgcy5zeW5jTG9jay5VbmxvY2soKQotCXMuaW50ZXJuYWxNYXBba2V5XSA9IHZhbHVlCi19CisJLy8gU2V0IEJvZHkgdG8gdGhlIHJhdyAqUmVxdWVzdE1lc3NhZ2Ugc28gaW50ZXJjZXB0b3JzIGNhbiBpbnNwZWN0L21vZGlmeSBpdAorCWh0dHBSZXEuQm9keSA9IHJlcQogCi1mdW5jIChzICpzeW5jaHJvbml6ZWRNYXApIGxvYWQoa2V5IHN0cmluZykgUmVzdWx0U2V0IHsKLQlzLnN5bmNMb2NrLkxvY2soKQotCWRlZmVyIHMuc3luY0xvY2suVW5sb2NrKCkKLQlyZXR1cm4gcy5pbnRlcm5hbE1hcFtrZXldCi19Ci0KLWZ1bmMgKHMgKnN5bmNocm9uaXplZE1hcCkgZGVsZXRlKGtleSBzdHJpbmcpIHsKLQlzLnN5bmNMb2NrLkxvY2soKQotCWRlZmVyIHMuc3luY0xvY2suVW5sb2NrKCkKLQlkZWxldGUocy5pbnRlcm5hbE1hcCwga2V5KQotfQotCi1mdW5jIChzICpzeW5jaHJvbml6ZWRNYXApIHNpemUoKSBpbnQgewotCXMuc3luY0xvY2suTG9jaygpCi0JZGVmZXIgcy5zeW5jTG9jay5VbmxvY2soKQotCXJldHVybiBsZW4ocy5pbnRlcm5hbE1hcCkKLX0KLQotZnVuYyAocyAqc3luY2hyb25pemVkTWFwKSBjbG9zZUFsbChlcnIgZXJyb3IpIHsKLQlzLnN5bmNMb2NrLkxvY2soKQotCWRlZmVyIHMuc3luY0xvY2suVW5sb2NrKCkKLQlmb3IgXywgcmVzdWx0U2V0IDo9IHJhbmdlIHMuaW50ZXJuYWxNYXAgewotCQlyZXN1bHRTZXQuc2V0RXJyb3IoZXJyKQotCQlyZXN1bHRTZXQudW5sb2NrZWRDbG9zZSgpCisJLy8gQXBwbHkgaW50ZXJjZXB0b3JzIOKAlCB0aGV5IHNlZSAqUmVxdWVzdE1lc3NhZ2UgaW4gQm9keSAocHJlLXNlcmlhbGl6YXRpb24pLgorCS8vIEludGVyY2VwdG9ycyBtYXkgcmVwbGFjZSBCb2R5IHdpdGggW11ieXRlLCBpby5SZWFkZXIsIG9yICpodHRwLlJlcXVlc3QuCisJZm9yIF8sIGludGVyY2VwdG9yIDo9IHJhbmdlIGMuaW50ZXJjZXB0b3JzIHsKKwkJaWYgZXJyIDo9IGludGVyY2VwdG9yKGh0dHBSZXEpOyBlcnIgIT0gbmlsIHsKKwkJCWMubG9nSGFuZGxlci5sb2dmKEVycm9yLCBmYWlsZWRUb1NlbmRSZXF1ZXN0LCBlcnIuRXJyb3IoKSkKKwkJCXJzLnNldEVycm9yKGVycikKKwkJCXJldHVybgorCQl9CiAJfQorCisJLy8gQWZ0ZXIgaW50ZXJjZXB0b3JzLCBzZXJpYWxpemUgaWYgQm9keSBpcyBzdGlsbCAqUmVxdWVzdE1lc3NhZ2UKKwlpZiByLCBvayA6PSBodHRwUmVxLkJvZHkuKCpSZXF1ZXN0TWVzc2FnZSk7IG9rIHsKKwkJaWYgYy5zZXJpYWxpemVyICE9IG5pbCB7CisJCQlkYXRhLCBlcnIgOj0gYy5zZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2UocikKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCWMubG9nSGFuZGxlci5sb2dmKEVycm9yLCBmYWlsZWRUb1NlbmRSZXF1ZXN0LCBlcnIuRXJyb3IoKSkKKwkJCQlycy5zZXRFcnJvcihlcnIpCisJCQkJcmV0dXJuCisJCQl9CisJCQlodHRwUmVxLkJvZHkgPSBkYXRhCisJCX0gZWxzZSB7CisJCQllcnJNc2cgOj0gInJlcXVlc3QgYm9keSB3YXMgbm90IHNlcmlhbGl6ZWQ7IGVpdGhlciBwcm92aWRlIGEgc2VyaWFsaXplciBvciBhZGQgYW4gaW50ZXJjZXB0b3IgdGhhdCBzZXJpYWxpemVzIHRoZSByZXF1ZXN0IgorCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvU2VuZFJlcXVlc3QsIGVyck1zZykKKwkJCXJzLnNldEVycm9yKGZtdC5FcnJvcmYoIiVzIiwgZXJyTXNnKSkKKwkJCXJldHVybgorCQl9CisJfQorCisJLy8gQ3JlYXRlIGFjdHVhbCBodHRwLlJlcXVlc3QgZnJvbSBIdHRwUmVxdWVzdCBiYXNlZCBvbiBCb2R5IHR5cGUKKwl2YXIgaHR0cEdvUmVxICpodHRwLlJlcXVlc3QKKwlzd2l0Y2ggYm9keSA6PSBodHRwUmVxLkJvZHkuKHR5cGUpIHsKKwljYXNlIFtdYnl0ZToKKwkJaHR0cEdvUmVxLCBlcnIgPSBodHRwLk5ld1JlcXVlc3QoaHR0cFJlcS5NZXRob2QsIGh0dHBSZXEuVVJMLlN0cmluZygpLCBieXRlcy5OZXdSZWFkZXIoYm9keSkpCisJCWlmIGVyciAhPSBuaWwgeworCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvU2VuZFJlcXVlc3QsIGVyci5FcnJvcigpKQorCQkJcnMuc2V0RXJyb3IoZXJyKQorCQkJcmV0dXJuCisJCX0KKwkJaHR0cEdvUmVxLkhlYWRlciA9IGh0dHBSZXEuSGVhZGVycworCWNhc2UgaW8uUmVhZGVyOgorCQlodHRwR29SZXEsIGVyciA9IGh0dHAuTmV3UmVxdWVzdChodHRwUmVxLk1ldGhvZCwgaHR0cFJlcS5VUkwuU3RyaW5nKCksIGJvZHkpCisJCWlmIGVyciAhPSBuaWwgeworCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvU2VuZFJlcXVlc3QsIGVyci5FcnJvcigpKQorCQkJcnMuc2V0RXJyb3IoZXJyKQorCQkJcmV0dXJuCisJCX0KKwkJaHR0cEdvUmVxLkhlYWRlciA9IGh0dHBSZXEuSGVhZGVycworCWNhc2UgKmh0dHAuUmVxdWVzdDoKKwkJaHR0cEdvUmVxID0gYm9keQorCWRlZmF1bHQ6CisJCWVyck1zZyA6PSBmbXQuU3ByaW50ZigidW5zdXBwb3J0ZWQgYm9keSB0eXBlIGFmdGVyIGludGVyY2VwdG9yczogJVQiLCBib2R5KQorCQljLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgZmFpbGVkVG9TZW5kUmVxdWVzdCwgZXJyTXNnKQorCQlycy5zZXRFcnJvcihmbXQuRXJyb3JmKCIlcyIsIGVyck1zZykpCisJCXJldHVybgorCX0KKworCXJlc3AsIGVyciA6PSBjLmh0dHBDbGllbnQuRG8oaHR0cEdvUmVxKQorCWlmIGVyciAhPSBuaWwgeworCQljLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgZmFpbGVkVG9TZW5kUmVxdWVzdCwgZXJyLkVycm9yKCkpCisJCXJzLnNldEVycm9yKGVycikKKwkJcmV0dXJuCisJfQorCWRlZmVyIGZ1bmMoKSB7CisJCS8vIERyYWluIGFueSB1bnJlYWQgYnl0ZXMgc28gdGhlIGNvbm5lY3Rpb24gY2FuIGJlIHJldXNlZCBncmFjZWZ1bGx5LgorCQkvLyBXaXRob3V0IHRoaXMsIEdvJ3MgSFRUUCBjbGllbnQgc2VuZHMgYSBUQ1AgUlNUIGluc3RlYWQgb2YgRklOLAorCQkvLyBjYXVzaW5nICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiIGVycm9ycyBvbiB0aGUgc2VydmVyLgorCQlpby5Db3B5KGlvLkRpc2NhcmQsIHJlc3AuQm9keSkKKwkJaWYgZXJyIDo9IHJlc3AuQm9keS5DbG9zZSgpOyBlcnIgIT0gbmlsIHsKKwkJCWMubG9nSGFuZGxlci5sb2dmKERlYnVnLCBmYWlsZWRUb0Nsb3NlUmVzcG9uc2VCb2R5LCBlcnIuRXJyb3IoKSkKKwkJfQorCX0oKQorCisJLy8gSWYgdGhlIEhUVFAgc3RhdHVzIGluZGljYXRlcyBhbiBlcnJvciBhbmQgdGhlIHJlc3BvbnNlIGlzIG5vdCBHcmFwaEJpbmFyeSwKKwkvLyByZWFkIHRoZSBib2R5IGFzIGEgdGV4dC9KU09OIGVycm9yIG1lc3NhZ2UgaW5zdGVhZCBvZiBhdHRlbXB0aW5nIGJpbmFyeQorCS8vIGRlc2VyaWFsaXphdGlvbiB3aGljaCB3b3VsZCBwcm9kdWNlIGNyeXB0aWMgZXJyb3JzLgorCWNvbnRlbnRUeXBlIDo9IHJlc3AuSGVhZGVyLkdldChIZWFkZXJDb250ZW50VHlwZSkKKwlpZiByZXNwLlN0YXR1c0NvZGUgPj0gNDAwICYmICFzdHJpbmdzLkNvbnRhaW5zKGNvbnRlbnRUeXBlLCBncmFwaEJpbmFyeU1pbWVUeXBlKSB7CisJCWJvZHlCeXRlcywgcmVhZEVyciA6PSBpby5SZWFkQWxsKHJlc3AuQm9keSkKKwkJaWYgcmVhZEVyciAhPSBuaWwgeworCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvUmVjZWl2ZVJlc3BvbnNlLCByZWFkRXJyLkVycm9yKCkpCisJCQlycy5zZXRFcnJvcihmbXQuRXJyb3JmKCJHcmVtbGluIFNlcnZlciByZXR1cm5lZCBIVFRQICVkIGFuZCBmYWlsZWQgdG8gcmVhZCBib2R5OiAldyIsCisJCQkJcmVzcC5TdGF0dXNDb2RlLCByZWFkRXJyKSkKKwkJCXJldHVybgorCQl9CisJCWVycm9yQm9keSA6PSBzdHJpbmcoYm9keUJ5dGVzKQorCQllcnJvck1zZyA6PSB0cnlFeHRyYWN0SlNPTkVycm9yKGVycm9yQm9keSkKKwkJaWYgZXJyb3JNc2cgPT0gIiIgeworCQkJZXJyb3JNc2cgPSBmbXQuU3ByaW50ZigiR3JlbWxpbiBTZXJ2ZXIgcmV0dXJuZWQgSFRUUCAlZDogJXMiLCByZXNwLlN0YXR1c0NvZGUsIGVycm9yQm9keSkKKwkJfQorCQljLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgZmFpbGVkVG9SZWNlaXZlUmVzcG9uc2UsIGVycm9yTXNnKQorCQlycy5zZXRFcnJvcihmbXQuRXJyb3JmKCIlcyIsIGVycm9yTXNnKSkKKwkJcmV0dXJuCisJfQorCisJcmVhZGVyLCB6bGliUmVhZGVyLCBlcnIgOj0gYy5nZXRSZWFkZXIocmVzcCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvUmVjZWl2ZVJlc3BvbnNlLCBlcnIuRXJyb3IoKSkKKwkJcnMuc2V0RXJyb3IoZXJyKQorCQlyZXR1cm4KKwl9CisJaWYgemxpYlJlYWRlciAhPSBuaWwgeworCQlkZWZlciBmdW5jKCkgeworCQkJaWYgZXJyIDo9IHpsaWJSZWFkZXIuQ2xvc2UoKTsgZXJyICE9IG5pbCB7CisJCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRGVidWcsIGZhaWxlZFRvQ2xvc2VEZWNvbXBSZWFkZXIsIGVyci5FcnJvcigpKQorCQkJfQorCQl9KCkKKwl9CisKKwljLnN0cmVhbVRvUmVzdWx0U2V0KHJlYWRlciwgcnMpCit9CisKKy8vIHNldEh0dHBSZXF1ZXN0SGVhZGVycyBzZXRzIGRlZmF1bHQgaGVhZGVycyBvbiBIdHRwUmVxdWVzdCAoZm9yIGludGVyY2VwdG9ycykKK2Z1bmMgKGMgKmNvbm5lY3Rpb24pIHNldEh0dHBSZXF1ZXN0SGVhZGVycyhyZXEgKkh0dHBSZXF1ZXN0KSB7CisJcmVxLkhlYWRlcnMuU2V0KEhlYWRlckNvbnRlbnRUeXBlLCBncmFwaEJpbmFyeU1pbWVUeXBlKQorCXJlcS5IZWFkZXJzLlNldChIZWFkZXJBY2NlcHQsIGdyYXBoQmluYXJ5TWltZVR5cGUpCisKKwlpZiBjLmNvbm5TZXR0aW5ncy5lbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgeworCQlyZXEuSGVhZGVycy5TZXQoSGVhZGVyVXNlckFnZW50LCB1c2VyQWdlbnQpCisJfQorCWlmIGMuY29ublNldHRpbmdzLmVuYWJsZUNvbXByZXNzaW9uIHsKKwkJcmVxLkhlYWRlcnMuU2V0KEhlYWRlckFjY2VwdEVuY29kaW5nLCAiZGVmbGF0ZSIpCisJfQorfQorCitmdW5jIChjICpjb25uZWN0aW9uKSBnZXRSZWFkZXIocmVzcCAqaHR0cC5SZXNwb25zZSkgKGlvLlJlYWRlciwgaW8uQ2xvc2VyLCBlcnJvcikgeworCWlmIHJlc3AuSGVhZGVyLkdldCgiQ29udGVudC1FbmNvZGluZyIpID09ICJkZWZsYXRlIiB7CisJCXpyLCBlcnIgOj0gemxpYi5OZXdSZWFkZXIocmVzcC5Cb2R5KQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIG5pbCwgZXJyCisJCX0KKwkJcmV0dXJuIHpyLCB6ciwgbmlsCisJfQorCXJldHVybiByZXNwLkJvZHksIG5pbCwgbmlsCit9CisKK2Z1bmMgKGMgKmNvbm5lY3Rpb24pIHN0cmVhbVRvUmVzdWx0U2V0KHJlYWRlciBpby5SZWFkZXIsIHJzIFJlc3VsdFNldCkgeworCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIocmVhZGVyKQorCWlmIGVyciA6PSBkLlJlYWRIZWFkZXIoKTsgZXJyICE9IG5pbCB7CisJCWlmIGVyciAhPSBpby5FT0YgeworCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvUmVjZWl2ZVJlc3BvbnNlLCBlcnIuRXJyb3IoKSkKKwkJCXJzLnNldEVycm9yKGVycikKKwkJfQorCQlyZXR1cm4KKwl9CisKKwlmb3IgeworCQlvYmosIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJCWlmIGVyciAhPSBuaWwgeworCQkJaWYgZXJyICE9IGlvLkVPRiB7CisJCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvUmVjZWl2ZVJlc3BvbnNlLCBlcnIuRXJyb3IoKSkKKwkJCQlycy5zZXRFcnJvcihlcnIpCisJCQl9CisJCQlyZXR1cm4KKwkJfQorCisJCWlmIG1hcmtlciwgb2sgOj0gb2JqLihNYXJrZXIpOyBvayAmJiBtYXJrZXIgPT0gRW5kT2ZTdHJlYW0oKSB7CisJCQljb2RlLCBtc2csIF8sIGVyciA6PSBkLlJlYWRTdGF0dXMoKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJYy5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGZhaWxlZFRvUmVjZWl2ZVJlc3BvbnNlLCBlcnIuRXJyb3IoKSkKKwkJCQlycy5zZXRFcnJvcihlcnIpCisJCQkJcmV0dXJuCisJCQl9CisJCQlpZiBjb2RlICE9IDIwMCAmJiBjb2RlICE9IDAgeworCQkJCXJzLnNldEVycm9yKG5ld0Vycm9yKGVycjA1MDJSZXNwb25zZVJlYWRMb29wRXJyb3IsIG1zZywgY29kZSkpCisJCQl9CisJCQlyZXR1cm4KKwkJfQorCisJCXJzLkNoYW5uZWwoKSA8LSAmUmVzdWx0e29ian0KKwl9Cit9CisKKy8vIHRyeUV4dHJhY3RKU09ORXJyb3IgYXR0ZW1wdHMgdG8gZXh0cmFjdCBhbiBlcnJvciBtZXNzYWdlIGZyb20gYSBKU09OIHJlc3BvbnNlIGJvZHkuCisvLyBUaGUgc2VydmVyIHNvbWV0aW1lcyByZXNwb25kcyB3aXRoIGEgSlNPTiBvYmplY3QgY29udGFpbmluZyBhICJtZXNzYWdlIiBmaWVsZAorLy8gZXZlbiB3aGVuIGl0IGNhbm5vdCBwcm9kdWNlIGEgR3JhcGhCaW5hcnkgcmVzcG9uc2UuCitmdW5jIHRyeUV4dHJhY3RKU09ORXJyb3IoYm9keSBzdHJpbmcpIHN0cmluZyB7CisJdmFyIG9iaiBtYXBbc3RyaW5nXWludGVyZmFjZXt9CisJaWYgZXJyIDo9IGpzb24uVW5tYXJzaGFsKFtdYnl0ZShib2R5KSwgJm9iaik7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gIiIKKwl9CisJaWYgbXNnLCBvayA6PSBvYmpbIm1lc3NhZ2UiXTsgb2sgeworCQlpZiBzLCBvayA6PSBtc2cuKHN0cmluZyk7IG9rIHsKKwkJCXJldHVybiBzCisJCX0KKwl9CisJcmV0dXJuICIiCit9CisKK2Z1bmMgKGMgKmNvbm5lY3Rpb24pIGNsb3NlKCkgeworCWMud2cuV2FpdCgpCisJYy5odHRwQ2xpZW50LkNsb3NlSWRsZUNvbm5lY3Rpb25zKCkKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2Nvbm5lY3Rpb25Qb29sLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvY29ubmVjdGlvblBvb2wuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5Y2E1NzYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvY29ubmVjdGlvblBvb2wuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgZ3JlbWxpbmdvCi0KLWltcG9ydCAoCi0JInN5bmMiCi0pCi0KLXR5cGUgY29ubmVjdGlvblBvb2wgaW50ZXJmYWNlIHsKLQl3cml0ZSgqcmVxdWVzdCkgKFJlc3VsdFNldCwgZXJyb3IpCi0JY2xvc2UoKQotfQotCi1jb25zdCBkZWZhdWx0TmV3Q29ubmVjdGlvblRocmVzaG9sZCA9IDQKLWNvbnN0IGRlZmF1bHRJbml0aWFsQ29uY3VycmVudENvbm5lY3Rpb25zID0gMQotCi0vLyBsb2FkQmFsYW5jaW5nUG9vbCBoYXMgdHdvIGNvbmZpZ3VyYXRpb25zOiBtYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zL2NhcChjb25uZWN0aW9ucykgYW5kIG5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQuCi0vLyBtYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zIGRlbm90ZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGFjdGl2ZSBjb25uZWN0aW9ucyBhdCBhbnkgZ2l2ZW4gdGltZS4KLS8vIG5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQgc3BlY2lmaWVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb25jdXJyZW50IGFjdGl2ZSB0cmF2ZXJzYWxzIG9uIHRoZSBsZWFzdCB1c2VkIGNvbm5lY3Rpb24KLS8vIHdoaWNoIHdpbGwgdHJpZ2dlciBjcmVhdGlvbiBvZiBhIG5ldyBjb25uZWN0aW9uIGlmIG1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgaGFzIG5vdCBiZWVuIHJlYWNoZWQuCi0vLyBsb2FkQmFsYW5jaW5nUG9vbCB3aWxsIHVzZSB0aGUgbGVhc3QtdXNlZCBjb25uZWN0aW9uLCBhbmQgYXMgYSBwYXJ0IG9mIHRoZSBwcm9jZXNzLCBnZXRMZWFzdFVzZWRDb25uZWN0aW9uKCksIHdpbGwKLS8vIHJlbW92ZSBhbnkgZXJyb3JlZCBjb25uZWN0aW9ucyBmcm9tIHRoZSBwb29sIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgY29ubmVjdGlvbiBpcyB1c2FibGUuCi10eXBlIGxvYWRCYWxhbmNpbmdQb29sIHN0cnVjdCB7Ci0JdXJsICAgICAgICAgIHN0cmluZwotCWxvZ0hhbmRsZXIgICAqbG9nSGFuZGxlcgotCWNvbm5TZXR0aW5ncyAqY29ubmVjdGlvblNldHRpbmdzCi0KLQluZXdDb25uZWN0aW9uVGhyZXNob2xkIGludAotCWNvbm5lY3Rpb25zICAgICAgICAgICAgW10qY29ubmVjdGlvbgotCWxvYWRCYWxhbmNlTG9jayAgICAgICAgc3luYy5NdXRleAotCWlzQ2xvc2VkICAgICAgICAgICAgICAgYm9vbAotfQotCi1mdW5jIChwb29sICpsb2FkQmFsYW5jaW5nUG9vbCkgY2xvc2UoKSB7Ci0JcG9vbC5sb2FkQmFsYW5jZUxvY2suTG9jaygpCi0JZGVmZXIgcG9vbC5sb2FkQmFsYW5jZUxvY2suVW5sb2NrKCkKLQotCWlmICFwb29sLmlzQ2xvc2VkIHsKLQkJZm9yIF8sIGNvbm5lY3Rpb24gOj0gcmFuZ2UgcG9vbC5jb25uZWN0aW9ucyB7Ci0JCQllcnIgOj0gY29ubmVjdGlvbi5jbG9zZSgpCi0JCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQlwb29sLmxvZ0hhbmRsZXIubG9nZihXYXJuaW5nLCBlcnJvckNsb3NpbmdDb25uZWN0aW9uLCBlcnIuRXJyb3IoKSkKLQkJCX0KLQkJfQotCQlwb29sLmlzQ2xvc2VkID0gdHJ1ZQotCX0KLX0KLQotZnVuYyAocG9vbCAqbG9hZEJhbGFuY2luZ1Bvb2wpIHdyaXRlKHJlcXVlc3QgKnJlcXVlc3QpIChSZXN1bHRTZXQsIGVycm9yKSB7Ci0JcG9vbC5sb2FkQmFsYW5jZUxvY2suTG9jaygpCi0JZGVmZXIgcG9vbC5sb2FkQmFsYW5jZUxvY2suVW5sb2NrKCkKLQotCWlmIHBvb2wuaXNDbG9zZWQgewotCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwMTAzQ29ubmVjdGlvblBvb2xDbG9zZWRFcnJvcikKLQl9Ci0KLQljb25uLCBlcnIgOj0gcG9vbC5nZXRMZWFzdFVzZWRDb25uZWN0aW9uKCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXJldHVybiBjb25uLndyaXRlKHJlcXVlc3QpCi19Ci0KLS8vIE5vdCB0aHJlYWQtc2FmZS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHdyaXRlIHdoaWNoIGVuc3VyZXMgbm8gY29uY3VycmVuY3kuCi1mdW5jIChwb29sICpsb2FkQmFsYW5jaW5nUG9vbCkgZ2V0TGVhc3RVc2VkQ29ubmVjdGlvbigpICgqY29ubmVjdGlvbiwgZXJyb3IpIHsKLQkvLyBuZXdDb25uZWN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoaW4gZ2V0TGVhc3RVc2VkQ29ubmVjdGlvbiBhbmQgdGhlcmVmb3JlIGlzIGEgbGFtYmRhLgotCW5ld0Nvbm5lY3Rpb24gOj0gZnVuYygpICgqY29ubmVjdGlvbiwgZXJyb3IpIHsKLQkJY29ubmVjdGlvbiwgZXJyIDo9IGNyZWF0ZUNvbm5lY3Rpb24ocG9vbC51cmwsIHBvb2wubG9nSGFuZGxlciwgcG9vbC5jb25uU2V0dGluZ3MpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQkJcG9vbC5jb25uZWN0aW9ucyA9IGFwcGVuZChwb29sLmNvbm5lY3Rpb25zLCBjb25uZWN0aW9uKQotCQlyZXR1cm4gY29ubmVjdGlvbiwgbmlsCi0JfQotCi0JLy8gSWYgb3VyIHBvb2wgaXMgZW1wdHksIHJldHVybiBhIG5ldyBjb25uZWN0aW9uLgotCWlmIGxlbihwb29sLmNvbm5lY3Rpb25zKSA9PSAwIHsKLQkJcmV0dXJuIG5ld0Nvbm5lY3Rpb24oKQotCX0KLQotCS8vIFJlbW92ZSBjb25uZWN0aW9ucyB3aGljaCBhcmUgZGVhZCBhbmQgZmluZCBsZWFzdCB1c2VkLgotCXZhciBsZWFzdFVzZWQgKmNvbm5lY3Rpb24gPSBuaWwKLQl2YWxpZENvbm5lY3Rpb25zIDo9IG1ha2UoW10qY29ubmVjdGlvbiwgMCwgY2FwKHBvb2wuY29ubmVjdGlvbnMpKQotCWZvciBfLCBjb25uZWN0aW9uIDo9IHJhbmdlIHBvb2wuY29ubmVjdGlvbnMgewotCQlpZiBjb25uZWN0aW9uLnN0YXRlID09IGVzdGFibGlzaGVkIHx8IGNvbm5lY3Rpb24uc3RhdGUgPT0gaW5pdGlhbGl6ZWQgewotCQkJdmFsaWRDb25uZWN0aW9ucyA9IGFwcGVuZCh2YWxpZENvbm5lY3Rpb25zLCBjb25uZWN0aW9uKQotCQl9Ci0JCWlmIGNvbm5lY3Rpb24uc3RhdGUgPT0gZXN0YWJsaXNoZWQgewotCQkJLy8gU2V0IHRoZSBsZWFzdCB1c2VkIGNvbm5lY3Rpb24uCi0JCQlpZiBsZWFzdFVzZWQgPT0gbmlsIHx8IGNvbm5lY3Rpb24uYWN0aXZlUmVzdWx0cygpIDwgbGVhc3RVc2VkLmFjdGl2ZVJlc3VsdHMoKSB7Ci0JCQkJbGVhc3RVc2VkID0gY29ubmVjdGlvbgotCQkJfQotCQl9Ci0JfQotCXBvb2wuY29ubmVjdGlvbnMgPSB2YWxpZENvbm5lY3Rpb25zCi0KLQlpZiBsZWFzdFVzZWQgPT0gbmlsIHsKLQkJLy8gSWYgbm8gdmFsaWQgY29ubmVjdGlvbiBpcyBmb3VuZC4KLQkJaWYgbGVuKHBvb2wuY29ubmVjdGlvbnMpID49IGNhcChwb29sLmNvbm5lY3Rpb25zKSB7Ci0JCQkvLyBSZXR1cm4gZXJyb3IgaWYgcG9vbCBpcyBmdWxsIGFuZCBubyB2YWxpZCBjb25uZWN0aW9uIHdhcyBmb3VuZCAoc2hvdWxkIG5vdCBldmVyIGhhcHBlbikuCi0JCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwMTA1Q29ubmVjdGlvblBvb2xGdWxsQnV0Tm9uZVZhbGlkKQotCQl9IGVsc2UgewotCQkJLy8gUmV0dXJuIG5ldyBjb25uZWN0aW9uIGlmIG5vIHZhbGlkIGNvbm5lY3Rpb24gd2FzIGZvdW5kIGFuZCBwb29sIGhhcyBjYXBhY2l0eS4KLQkJCXJldHVybiBuZXdDb25uZWN0aW9uKCkKLQkJfQotCX0gZWxzZSBpZiBsZWFzdFVzZWQuYWN0aXZlUmVzdWx0cygpID49IHBvb2wubmV3Q29ubmVjdGlvblRocmVzaG9sZCAmJiBsZW4ocG9vbC5jb25uZWN0aW9ucykgPCBjYXAocG9vbC5jb25uZWN0aW9ucykgewotCQkvLyBJZiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSByZXN1bHRzIGluIG91ciBsZWFzdCB1c2VkIGNvbm5lY3Rpb24gaGFzIHJlYWNoZWQgdGhlIHRocmVzaG9sZAotCQkvLyBBTkQgb3VyIHBvb2wgc2l6ZSBoYXMgbm90IHJlYWNoZWQgdGhlIGNhcGFjaXR5LCBhdHRlbXB0IHRvIHJldHVybiBhIG5ldyBjb25uZWN0aW9uLgotCQluZXdDb25uZWN0aW9uLCBlcnIgOj0gbmV3Q29ubmVjdGlvbigpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJLy8gTmV3IGNvbm5lY3Rpb24gY3JlYXRpb24gZmFpbGVkOyB1c2UgZXhpc3RpbmcgZ3JhYmJlZCBsZWFzdC11c2VkIGNvbm5lY3Rpb24uCi0JCQlwb29sLmxvZ0hhbmRsZXIubG9nZihXYXJuaW5nLCBwb29sTmV3Q29ubmVjdGlvbkVycm9yLCBlcnIuRXJyb3IoKSkKLQkJCXJldHVybiBsZWFzdFVzZWQsIG5pbAotCQl9Ci0JCXJldHVybiBuZXdDb25uZWN0aW9uLCBuaWwKLQl9IGVsc2UgewotCQkvLyBJZiBvdXIgcG9vbCBpcyBhdCBjYXBhY2l0eSBPUiBvdXIgbGVhc3QgYnVzeSBjb25uZWN0aW9uIGlzIGxlc3MgdGhhbiB0aGUgdGhyZXNob2xkLCByZXR1cm4gdGhlIGxlYXN0IHVzZWQgY29ubmVjdGlvbi4KLQkJcmV0dXJuIGxlYXN0VXNlZCwgbmlsCi0JfQotfQotCi1mdW5jIG5ld0xvYWRCYWxhbmNpbmdQb29sKHVybCBzdHJpbmcsIGxvZ0hhbmRsZXIgKmxvZ0hhbmRsZXIsIGNvbm5TZXR0aW5ncyAqY29ubmVjdGlvblNldHRpbmdzLAotCW5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQgaW50LCBtYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zIGludCwgaW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucyBpbnQpIChjb25uZWN0aW9uUG9vbCwgZXJyb3IpIHsKLQl2YXIgd2cgc3luYy5XYWl0R3JvdXAKLQl3Zy5BZGQoaW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucykKLQl2YXIgYXBwZW5kTG9jayBzeW5jLk11dGV4Ci0KLQlwb29sIDo9IG1ha2UoW10qY29ubmVjdGlvbiwgMCwgbWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucykKLQllcnJvckxpc3QgOj0gbWFrZShbXWVycm9yLCAwLCBtYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zKQotCWZvciBpIDo9IDA7IGkgPCBpbml0aWFsQ29uY3VycmVudENvbm5lY3Rpb25zOyBpKysgewotCQlnbyBmdW5jKCkgewotCQkJZGVmZXIgd2cuRG9uZSgpCi0JCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbih1cmwsIGxvZ0hhbmRsZXIsIGNvbm5TZXR0aW5ncykKLQotCQkJYXBwZW5kTG9jay5Mb2NrKCkKLQkJCWRlZmVyIGFwcGVuZExvY2suVW5sb2NrKCkKLQkJCWlmIGVyciAhPSBuaWwgewotCQkJCWxvZ0hhbmRsZXIubG9nZihXYXJuaW5nLCBjcmVhdGVDb25uZWN0aW9uRXJyb3IsIGVyci5FcnJvcigpKQotCQkJCWVycm9yTGlzdCA9IGFwcGVuZChlcnJvckxpc3QsIGVycikKLQkJCX0gZWxzZSB7Ci0JCQkJcG9vbCA9IGFwcGVuZChwb29sLCBjb25uZWN0aW9uKQotCQkJfQotCQl9KCkKLQl9Ci0KLQl3Zy5XYWl0KCkKLQlpZiBsZW4ocG9vbCkgPT0gMCAmJiBsZW4oZXJyb3JMaXN0KSAhPSAwIHsKLQkJLy8gSWYgYWxsIGluc3RhbnRpYXRpb24gZmFpbHMgcmV0dXJuIHRoZSBmaXJzdCBlcnJvcidzIGRldGFpbHMuCi0JCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjAxMDRDb25uZWN0aW9uUG9vbEluc3RhbnRpYXRlRmFpbCwgZXJyb3JMaXN0WzBdLkVycm9yKCkpCi0JfQotCXJldHVybiAmbG9hZEJhbGFuY2luZ1Bvb2x7Ci0JCXVybDogICAgICAgICAgICAgICAgICAgIHVybCwKLQkJbG9nSGFuZGxlcjogICAgICAgICAgICAgbG9nSGFuZGxlciwKLQkJY29ublNldHRpbmdzOiAgICAgICAgICAgY29ublNldHRpbmdzLAotCQluZXdDb25uZWN0aW9uVGhyZXNob2xkOiBuZXdDb25uZWN0aW9uVGhyZXNob2xkLAotCQljb25uZWN0aW9uczogICAgICAgICAgICBwb29sLAotCX0sIG5pbAotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvY29ubmVjdGlvblBvb2xfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2Nvbm5lY3Rpb25Qb29sX3Rlc3QuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzNDYzNzEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvY29ubmVjdGlvblBvb2xfdGVzdC5nbworKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi1kaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi1zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi1LSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLXNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLXVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotcGFja2FnZSBncmVtbGluZ28KLQotaW1wb3J0ICgKLQkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L2Fzc2VydCIKLQkiZ29sYW5nLm9yZy94L3RleHQvbGFuZ3VhZ2UiCi0JInN0cmNvbnYiCi0JInN5bmMiCi0JInRlc3RpbmciCi0pCi0KLS8vIEFyYml0cmFyaWx5IGhpZ2ggdmFsdWUgdG8gdXNlIHRvIG5vdCB0cmlnZ2VyIGNyZWF0aW9uIG9mIG5ldyBjb25uZWN0aW9ucwotY29uc3QgbmV3Q29ubmVjdGlvblRocmVzaG9sZCA9IDEwMAotCi12YXIgbG9nZ2VyID0gbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKQotCi1mdW5jIGdldFBvb2xGb3JUZXN0aW5nKCkgKmxvYWRCYWxhbmNpbmdQb29sIHsKLQlyZXR1cm4gJmxvYWRCYWxhbmNpbmdQb29sewotCQl1cmw6ICAgICAgICAgICAgICAgICAgICAiIiwKLQkJY29ublNldHRpbmdzOiAgICAgICAgICAgbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpLAotCQlsb2dIYW5kbGVyOiAgICAgICAgICAgICBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpLAotCQluZXdDb25uZWN0aW9uVGhyZXNob2xkOiBuZXdDb25uZWN0aW9uVGhyZXNob2xkLAotCQljb25uZWN0aW9uczogICAgICAgICAgICBuaWwsCi0JCWxvYWRCYWxhbmNlTG9jazogICAgICAgIHN5bmMuTXV0ZXh7fSwKLQl9Ci19Ci0KLWZ1bmMgZ2V0TW9ja0Nvbm5lY3Rpb24oKSAqY29ubmVjdGlvbiB7Ci0JcmV0dXJuICZjb25uZWN0aW9uewotCQlsb2dIYW5kbGVyOiBsb2dnZXIsCi0JCXByb3RvY29sOiAgIG5pbCwKLQkJcmVzdWx0czogJnN5bmNocm9uaXplZE1hcHsKLQkJCWludGVybmFsTWFwOiBtYWtlKG1hcFtzdHJpbmddUmVzdWx0U2V0KSwKLQkJCXN5bmNMb2NrOiAgICBzeW5jLk11dGV4e30sCi0JCX0sCi0JCXN0YXRlOiBlc3RhYmxpc2hlZCwKLQl9Ci19Ci0KLWZ1bmMgVGVzdENvbm5lY3Rpb25Qb29sKHQgKnRlc3RpbmcuVCkgewotCXQuUnVuKCJsb2FkQmFsYW5jaW5nUG9vbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXNtYWxsTWFwIDo9IG1ha2UobWFwW3N0cmluZ11SZXN1bHRTZXQpCi0JCWJpZ01hcCA6PSBtYWtlKG1hcFtzdHJpbmddUmVzdWx0U2V0KQotCQlmb3IgaSA6PSAxOyBpIDwgNDsgaSsrIHsKLQkJCWJpZ01hcFtzdHJjb252Lkl0b2EoaSldID0gbmlsCi0JCQlpZiBpIDwgMyB7Ci0JCQkJc21hbGxNYXBbc3RyY29udi5JdG9hKGkpXSA9IG5pbAotCQkJfQotCQl9Ci0KLQkJdC5SdW4oImdldExlYXN0VXNlZENvbm5lY3Rpb24iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJdC5SdW4oImdldHRpbmcgdGhlIGxlYXN0IHVzZWQgY29ubmVjdGlvbiIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQkJcG9vbCA6PSBnZXRQb29sRm9yVGVzdGluZygpCi0JCQkJZGVmZXIgcG9vbC5jbG9zZSgpCi0JCQkJbW9ja0Nvbm5lY3Rpb24xIDo9IGdldE1vY2tDb25uZWN0aW9uKCkKLQkJCQltb2NrQ29ubmVjdGlvbjIgOj0gZ2V0TW9ja0Nvbm5lY3Rpb24oKQotCQkJCW1vY2tDb25uZWN0aW9uMyA6PSBnZXRNb2NrQ29ubmVjdGlvbigpCi0JCQkJbW9ja0Nvbm5lY3Rpb24xLnJlc3VsdHMuaW50ZXJuYWxNYXAgPSBiaWdNYXAKLQkJCQltb2NrQ29ubmVjdGlvbjIucmVzdWx0cy5pbnRlcm5hbE1hcCA9IHNtYWxsTWFwCi0JCQkJbW9ja0Nvbm5lY3Rpb24zLnJlc3VsdHMuaW50ZXJuYWxNYXAgPSBiaWdNYXAKLQkJCQljb25uZWN0aW9ucyA6PSBbXSpjb25uZWN0aW9ue21vY2tDb25uZWN0aW9uMSwgbW9ja0Nvbm5lY3Rpb24yLCBtb2NrQ29ubmVjdGlvbjN9Ci0JCQkJcG9vbC5jb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25zCi0KLQkJCQljb25uZWN0aW9uLCBlcnIgOj0gcG9vbC5nZXRMZWFzdFVzZWRDb25uZWN0aW9uKCkKLQkJCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCQlhc3NlcnQuRXF1YWwodCwgbW9ja0Nvbm5lY3Rpb24yLCBjb25uZWN0aW9uKQotCQkJfSkKLQotCQkJdC5SdW4oInB1cmdlIG5vbi1lc3RhYmxpc2hlZCBjb25uZWN0aW9ucyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQkJcG9vbCA6PSBnZXRQb29sRm9yVGVzdGluZygpCi0JCQkJZGVmZXIgcG9vbC5jbG9zZSgpCi0JCQkJbW9ja0Nvbm5lY3Rpb24gOj0gZ2V0TW9ja0Nvbm5lY3Rpb24oKQotCQkJCW1vY2tDb25uZWN0aW9uLnJlc3VsdHMuaW50ZXJuYWxNYXAgPSBzbWFsbE1hcAotCQkJCW5vbkVzdGFibGlzaGVkIDo9ICZjb25uZWN0aW9uewotCQkJCQlsb2dIYW5kbGVyOiBsb2dnZXIsCi0JCQkJCXByb3RvY29sOiAgIG5pbCwKLQkJCQkJcmVzdWx0czogICAgbmlsLAotCQkJCQlzdGF0ZTogICAgICBjbG9zZWQsCi0JCQkJfQotCQkJCWNvbm5lY3Rpb25zIDo9IFtdKmNvbm5lY3Rpb257bm9uRXN0YWJsaXNoZWQsIG1vY2tDb25uZWN0aW9ufQotCQkJCXBvb2wuY29ubmVjdGlvbnMgPSBjb25uZWN0aW9ucwotCi0JCQkJY29ubmVjdGlvbiwgZXJyIDo9IHBvb2wuZ2V0TGVhc3RVc2VkQ29ubmVjdGlvbigpCi0JCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQkJYXNzZXJ0LkVxdWFsKHQsIG1vY2tDb25uZWN0aW9uLCBjb25uZWN0aW9uKQotCQkJCWFzc2VydC5MZW4odCwgcG9vbC5jb25uZWN0aW9ucywgMSkKLQkJCX0pCi0JCX0pCi0KLQkJdC5SdW4oImNsb3NlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvb2wgOj0gZ2V0UG9vbEZvclRlc3RpbmcoKQotCQkJZW1wdHkgOj0gJnN5bmNocm9uaXplZE1hcHsKLQkJCQlpbnRlcm5hbE1hcDogbWFrZShtYXBbc3RyaW5nXVJlc3VsdFNldCksCi0JCQkJc3luY0xvY2s6ICAgIHN5bmMuTXV0ZXh7fSwKLQkJCX0KLQkJCW9wZW5Db25uMSA6PSAmY29ubmVjdGlvbnsKLQkJCQlsb2dIYW5kbGVyOiBsb2dnZXIsCi0JCQkJcHJvdG9jb2w6ICAgbmlsLAotCQkJCXJlc3VsdHM6ICAgIGVtcHR5LAotCQkJCXN0YXRlOiAgICAgIGVzdGFibGlzaGVkLAotCQkJfQotCQkJb3BlbkNvbm4yIDo9ICZjb25uZWN0aW9uewotCQkJCWxvZ0hhbmRsZXI6IGxvZ2dlciwKLQkJCQlwcm90b2NvbDogICBuaWwsCi0JCQkJcmVzdWx0czogICAgZW1wdHksCi0JCQkJc3RhdGU6ICAgICAgZXN0YWJsaXNoZWQsCi0JCQl9Ci0JCQljb25uZWN0aW9ucyA6PSBbXSpjb25uZWN0aW9ue29wZW5Db25uMSwgb3BlbkNvbm4yfQotCQkJcG9vbC5jb25uZWN0aW9ucyA9IGNvbm5lY3Rpb25zCi0KLQkJCXBvb2wuY2xvc2UoKQotCQkJYXNzZXJ0LkVxdWFsKHQsIGNsb3NlZCwgb3BlbkNvbm4xLnN0YXRlKQotCQkJYXNzZXJ0LkVxdWFsKHQsIGNsb3NlZCwgb3BlbkNvbm4yLnN0YXRlKQotCQl9KQotCX0pCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9jb25uZWN0aW9uX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9jb25uZWN0aW9uX3Rlc3QuZ28KaW5kZXggNDNjODYxZi4uNGE3MzBiOSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvY29ubmVjdGlvbl90ZXN0LmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL2Nvbm5lY3Rpb25fdGVzdC5nbwpAQCAtMjAsMTkgKzIwLDIzIEBACiBwYWNrYWdlIGdyZW1saW5nbwogCiBpbXBvcnQgKAorCSJieXRlcyIKIAkiY3J5cHRvL3RscyIKKwkiZm10IgorCSJpbyIKIAkibWF0aC9iaWciCisJIm5ldC9odHRwIgorCSJuZXQvaHR0cC9odHRwdGVzdCIKIAkib3MiCiAJInJlZmxlY3QiCi0JInJ1bnRpbWUiCiAJInNvcnQiCiAJInN0cmNvbnYiCiAJInN5bmMiCiAJInRlc3RpbmciCiAJInRpbWUiCiAKLQkiZ2l0aHViLmNvbS9nb29nbGUvdXVpZCIKIAkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L2Fzc2VydCIKKwkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L3JlcXVpcmUiCiAJImdvbGFuZy5vcmcveC90ZXh0L2xhbmd1YWdlIgogKQogCkBAIC00MSwzMSArNDUsMjcgQEAKIGNvbnN0IG5hbWVLZXkgPSAibmFtZSIKIGNvbnN0IGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSA9ICJpbnRlZ3JhdGlvbiIKIGNvbnN0IGJhc2ljQXV0aEludGVncmF0aW9uVGVzdFN1aXRlID0gImJhc2ljIGF1dGhlbnRpY2F0aW9uIGludGVncmF0aW9uIgotY29uc3QgdmFsaWRIb3N0SW52YWxpZFBvcnRWYWxpZFBhdGggPSAid3M6Ly9sb2NhbGhvc3Q6MTIzNDEyNTMvZ3JlbWxpbiIKLWNvbnN0IGludmFsaWRIb3N0VmFsaWRQb3J0VmFsaWRQYXRoID0gIndzOi8vaW52YWxpZGhvc3Q6ODE4Mi9ncmVtbGluIgorY29uc3QgdmFsaWRIb3N0SW52YWxpZFBvcnRWYWxpZFBhdGggPSAiaHR0cDovL2xvY2FsaG9zdDoxMjM0MTI1My9ncmVtbGluIgorY29uc3QgaW52YWxpZEhvc3RWYWxpZFBvcnRWYWxpZFBhdGggPSAiaHR0cDovL2ludmFsaWRob3N0OjgxODIvZ3JlbWxpbiIKIGNvbnN0IHRlc3RTZXJ2ZXJNb2Rlcm5HcmFwaEFsaWFzID0gImdtb2Rlcm4iCiBjb25zdCB0ZXN0U2VydmVyR3JhcGhBbGlhcyA9ICJnaW1tdXRhYmxlIgogY29uc3QgdGVzdFNlcnZlckNyZXdHcmFwaEFsaWFzID0gImdjcmV3IgogY29uc3QgbWFudWFsVGVzdFN1aXRlTmFtZSA9ICJtYW51YWwiCi1jb25zdCBub25Sb3V0YWJsZUlQRm9yQ29ubmVjdGlvblRpbWVvdXQgPSAid3M6Ly8xMC4yNTUuMjU1LjEvIgorY29uc3Qgbm9uUm91dGFibGVJUEZvckNvbm5lY3Rpb25UaW1lb3V0ID0gImh0dHA6Ly8xMC4yNTUuMjU1LjEvIgogCiAvLyB0cmFuc2FjdGlvbiBpcyBlbmFibGVkIG9uIHRoZSBzYW1lIHBvcnQgYXMgbm8gYXV0aCB1cmwKLWNvbnN0IG5vQXV0aFVybCA9ICJ3czovL2xvY2FsaG9zdDo0NTk0MC9ncmVtbGluIgotY29uc3QgYmFzaWNBdXRoV2l0aFNzbCA9ICJ3c3M6Ly9sb2NhbGhvc3Q6NDU5NDEvZ3JlbWxpbiIKK2NvbnN0IG5vQXV0aFVybCA9ICJodHRwOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW4iCitjb25zdCBub0F1dGhTc2xVcmwgPSAiaHR0cHM6Ly9sb2NhbGhvc3Q6NDU5NDEvZ3JlbWxpbiIKK2NvbnN0IGJhc2ljQXV0aFdpdGhTc2wgPSAiaHR0cHM6Ly9sb2NhbGhvc3Q6NDU5NDEvZ3JlbWxpbiIKIAogdmFyIHRlc3ROYW1lcyA9IFtdc3RyaW5neyJMeW5kb24iLCAiWWFuZyIsICJTaW1vbiIsICJSaXRoaW4iLCAiQWxleGV5IiwgIlZhbGVudHluIn0KIAogZnVuYyBuZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCkgKmNvbm5lY3Rpb25TZXR0aW5ncyB7CiAJcmV0dXJuICZjb25uZWN0aW9uU2V0dGluZ3N7Ci0JCWF1dGhJbmZvOiAgICAgICAgICAgICAgICAgJkF1dGhJbmZve30sCiAJCXRsc0NvbmZpZzogICAgICAgICAgICAgICAgJnRscy5Db25maWd7fSwKLQkJa2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICBrZWVwQWxpdmVJbnRlcnZhbERlZmF1bHQsCi0JCXdyaXRlRGVhZGxpbmU6ICAgICAgICAgICAgd3JpdGVEZWFkbGluZURlZmF1bHQsCiAJCWNvbm5lY3Rpb25UaW1lb3V0OiAgICAgICAgY29ubmVjdGlvblRpbWVvdXREZWZhdWx0LAogCQllbmFibGVDb21wcmVzc2lvbjogICAgICAgIGZhbHNlLAogCQllbmFibGVVc2VyQWdlbnRPbkNvbm5lY3Q6IHRydWUsCi0JCXJlYWRCdWZmZXJTaXplOiAgICAgICAgICAgcmVhZEJ1ZmZlclNpemVEZWZhdWx0LAotCQl3cml0ZUJ1ZmZlclNpemU6ICAgICAgICAgIHdyaXRlQnVmZmVyU2l6ZURlZmF1bHQsCiAJfQogfQogCkBAIC05MiwxMSArOTIsMTAgQEAKIAlhc3NlcnQuTmlsKHQsIDwtcHJvbWlzZSkKIH0KIAotZnVuYyBnZXRUZXN0R3JhcGgodCAqdGVzdGluZy5ULCB1cmwgc3RyaW5nLCBhdXRoIEF1dGhJbmZvUHJvdmlkZXIsIHRscyAqdGxzLkNvbmZpZykgKkdyYXBoVHJhdmVyc2FsU291cmNlIHsKK2Z1bmMgZ2V0VGVzdEdyYXBoKHQgKnRlc3RpbmcuVCwgdXJsIHN0cmluZywgdGxzICp0bHMuQ29uZmlnKSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgewogCXJlbW90ZSwgZXJyIDo9IE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24odXJsLAogCQlmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKIAkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRscwotCQkJc2V0dGluZ3MuQXV0aEluZm8gPSBhdXRoCiAJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyR3JhcGhBbGlhcwogCQl9KQogCWFzc2VydC5OaWwodCwgZXJyKQpAQCAtMTA2LDggKzEwNSw4IEBACiAJcmV0dXJuIGcKIH0KIAotZnVuYyBpbml0aWFsaXplR3JhcGgodCAqdGVzdGluZy5ULCB1cmwgc3RyaW5nLCBhdXRoIEF1dGhJbmZvUHJvdmlkZXIsIHRscyAqdGxzLkNvbmZpZykgKkdyYXBoVHJhdmVyc2FsU291cmNlIHsKLQlnIDo9IGdldFRlc3RHcmFwaCh0LCB1cmwsIGF1dGgsIHRscykKK2Z1bmMgaW5pdGlhbGl6ZUdyYXBoKHQgKnRlc3RpbmcuVCwgdXJsIHN0cmluZywgdGxzICp0bHMuQ29uZmlnKSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgeworCWcgOj0gZ2V0VGVzdEdyYXBoKHQsIHVybCwgdGxzKQogCiAJLy8gRHJvcCB0aGUgZ3JhcGggYW5kIGNoZWNrIHRoYXQgaXQgaXMgZW1wdHkuCiAJZHJvcEdyYXBoKHQsIGcpCkBAIC0yNDYsNDA0ICsyNDUsMTAxIEBACiAJcmV0dXJuIGRlZmF1bHRWYWx1ZQogfQogCi1mdW5jIGdldEJhc2ljQXV0aEluZm8oKSAqQXV0aEluZm8gewotCXJldHVybiBCYXNpY0F1dGhJbmZvKGdldEVudk9yRGVmYXVsdFN0cmluZygiR1JFTUxJTl9HT19CQVNJQ19BVVRIX1VTRVJOQU1FIiwgInN0ZXBoZW4iKSwKLQkJZ2V0RW52T3JEZWZhdWx0U3RyaW5nKCJHUkVNTElOX0dPX0JBU0lDX0FVVEhfUEFTU1dPUkQiLCAicGFzc3dvcmQiKSkKLX0KLQogZnVuYyBza2lwVGVzdHNJZk5vdEVuYWJsZWQodCAqdGVzdGluZy5ULCB0ZXN0U3VpdGVOYW1lIHN0cmluZywgdGVzdFN1aXRlRW5hYmxlZCBib29sKSB7CiAJaWYgIXRlc3RTdWl0ZUVuYWJsZWQgewogCQl0LlNraXBmKCJTa2lwcGluZyAlcyBiZWNhdXNlICVzIHRlc3RzIGFyZSBub3QgZW5hYmxlZC4iLCB0Lk5hbWUoKSwgdGVzdFN1aXRlTmFtZSkKIAl9CiB9CiAKLWZ1bmMgZGVmZXJyZWRDbGVhbnVwKHQgKnRlc3RpbmcuVCwgY29ubmVjdGlvbiAqY29ubmVjdGlvbikgewotCWFzc2VydC5OaWwodCwgY29ubmVjdGlvbi5jbG9zZSgpKQotfQotCiBmdW5jIFRlc3RDb25uZWN0aW9uKHQgKnRlc3RpbmcuVCkgewogCS8vIEludGVncmF0aW9uIHRlc3QgdmFyaWFibGVzLgogCXRlc3ROb0F1dGhVcmwgOj0gZ2V0RW52T3JEZWZhdWx0U3RyaW5nKCJHUkVNTElOX1NFUlZFUl9VUkwiLCBub0F1dGhVcmwpCiAJdGVzdE5vQXV0aEVuYWJsZSA6PSBnZXRFbnZPckRlZmF1bHRCb29sKCJSVU5fSU5URUdSQVRJT05fVEVTVFMiLCB0cnVlKQotCXRlc3ROb0F1dGhBdXRoSW5mbyA6PSAmQXV0aEluZm97fQogCXRlc3ROb0F1dGhUbHNDb25maWcgOj0gJnRscy5Db25maWd7fQogCiAJLy8gTm8gYXV0aGVudGljYXRpb24gaW50ZWdyYXRpb24gdGVzdCB3aXRoIGdyYXBocyBsb2FkZWQgYW5kIGFsaWFzIGNvbmZpZ3VyZWQgc2VydmVyCiAJdGVzdE5vQXV0aFdpdGhBbGlhc1VybCA6PSBnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fU0VSVkVSX1VSTCIsIG5vQXV0aFVybCkKIAl0ZXN0Tm9BdXRoV2l0aEFsaWFzRW5hYmxlIDo9IGdldEVudk9yRGVmYXVsdEJvb2woIlJVTl9JTlRFR1JBVElPTl9XSVRIX0FMSUFTX1RFU1RTIiwgdHJ1ZSkKLQl0ZXN0Tm9BdXRoV2l0aEFsaWFzQXV0aEluZm8gOj0gJkF1dGhJbmZve30KIAl0ZXN0Tm9BdXRoV2l0aEFsaWFzVGxzQ29uZmlnIDo9ICZ0bHMuQ29uZmlne30KIAogCS8vIEJhc2ljIGF1dGhlbnRpY2F0aW9uIGludGVncmF0aW9uIHRlc3QgdmFyaWFibGVzLgotCS8vIFRPRE8gdXNpbmcgIndzczoiIHRvIGNvbm5lY3QgdG8gYW4gYXV0aCBzZXJ2ZXIgd2l0aG91dCBzc2wgZW5hYmxlZCAoIndzOiIpIHdpbGwgZ2l2ZSBhbiAiRU9GIiBlcnJvciBpbiBOZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uLCBidWc/CiAJdGVzdEJhc2ljQXV0aFVybCA6PSBnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fU0VSVkVSX0JBU0lDX0FVVEhfVVJMIiwgYmFzaWNBdXRoV2l0aFNzbCkKIAl0ZXN0QmFzaWNBdXRoRW5hYmxlIDo9IGdldEVudk9yRGVmYXVsdEJvb2woIlJVTl9CQVNJQ19BVVRIX0lOVEVHUkFUSU9OX1RFU1RTIiwgZmFsc2UpCi0JdGVzdEJhc2ljQXV0aEF1dGhJbmZvIDo9IGdldEJhc2ljQXV0aEluZm8oKQorCXRlc3RCYXNpY0F1dGhVc2VybmFtZSA6PSBnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fR09fQkFTSUNfQVVUSF9VU0VSTkFNRSIsICJzdGVwaGVuIikKKwl0ZXN0QmFzaWNBdXRoUGFzc3dvcmQgOj0gZ2V0RW52T3JEZWZhdWx0U3RyaW5nKCJHUkVNTElOX0dPX0JBU0lDX0FVVEhfUEFTU1dPUkQiLCAicGFzc3dvcmQiKQogCXRlc3RCYXNpY0F1dGhUbHNDb25maWcgOj0gJnRscy5Db25maWd7SW5zZWN1cmVTa2lwVmVyaWZ5OiB0cnVlfQogCi0JdGVzdE1hbnVhbCA6PSBnZXRFbnZPckRlZmF1bHRCb29sKCJSVU5fTUFOVUFMX1RFU1QiLCBmYWxzZSkKLQotCXQuUnVuKCJUZXN0IGNyZWF0ZUNvbm5lY3Rpb24gd2l0aG91dCB2YWxpZCBzZXJ2ZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbihpbnZhbGlkSG9zdFZhbGlkUG9ydFZhbGlkUGF0aCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLAotCQkJbGFuZ3VhZ2UuRW5nbGlzaCksIG5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKSkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0JCWFzc2VydC5OaWwodCwgY29ubmVjdGlvbikKLQl9KQotCi0JdC5SdW4oIlRlc3QgY3JlYXRlQ29ubmVjdGlvbiB3aXRob3V0IHZhbGlkIHBvcnQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbih2YWxpZEhvc3RJbnZhbGlkUG9ydFZhbGlkUGF0aCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLAotCQkJbGFuZ3VhZ2UuRW5nbGlzaCksIG5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKSkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0JCWFzc2VydC5OaWwodCwgY29ubmVjdGlvbikKLQl9KQotCi0JdC5SdW4oIlRlc3QgY3JlYXRlQ29ubmVjdGlvbiB3aXRob3V0IHZhbGlkIHBhdGgiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljb25uU2V0dGluZ3MgOj0gbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpCi0JCXQuUnVuKCJUZXN0IDEgc2Vjb25kIHRpbWVvdXQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJY29ublNldHRpbmdzLmNvbm5lY3Rpb25UaW1lb3V0ID0gMSAqIHRpbWUuU2Vjb25kCi0JCQl0MSA6PSB0aW1lLk5vdygpCi0JCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbihub25Sb3V0YWJsZUlQRm9yQ29ubmVjdGlvblRpbWVvdXQsIG5ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgSW5mbywKLQkJCQlsYW5ndWFnZS5FbmdsaXNoKSwgY29ublNldHRpbmdzKQotCQkJdDIgOj0gdGltZS5TaW5jZSh0MSkKLQkJCWFzc2VydC5UcnVlKHQsIHQyLlNlY29uZHMoKSA8IDEuNSAmJiB0Mi5TZWNvbmRzKCkgPiAwLjUpCi0JCQlhc3NlcnQuTm90TmlsKHQsIGVycikKLQkJCWFzc2VydC5OaWwodCwgY29ubmVjdGlvbikKLQkJfSkKLQotCQl0LlJ1bigiVGVzdCAyIHNlY29uZCB0aW1lb3V0IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCWNvbm5TZXR0aW5ncy5jb25uZWN0aW9uVGltZW91dCA9IDIgKiB0aW1lLlNlY29uZAotCQkJdDEgOj0gdGltZS5Ob3coKQotCQkJY29ubmVjdGlvbiwgZXJyIDo9IGNyZWF0ZUNvbm5lY3Rpb24obm9uUm91dGFibGVJUEZvckNvbm5lY3Rpb25UaW1lb3V0LCBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sCi0JCQkJbGFuZ3VhZ2UuRW5nbGlzaCksIGNvbm5TZXR0aW5ncykKLQkJCXQyIDo9IHRpbWUuU2luY2UodDEpCi0JCQlhc3NlcnQuVHJ1ZSh0LCB0Mi5TZWNvbmRzKCkgPCAyLjUgJiYgdDIuU2Vjb25kcygpID4gMS41KQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTmlsKHQsIGNvbm5lY3Rpb24pCi0JCX0pCi0KLQkJdC5SdW4oIlRlc3QgMyBzZWNvbmQgdGltZW91dCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQljb25uU2V0dGluZ3MuY29ubmVjdGlvblRpbWVvdXQgPSAzICogdGltZS5TZWNvbmQKLQkJCXQxIDo9IHRpbWUuTm93KCkKLQkJCWNvbm5lY3Rpb24sIGVyciA6PSBjcmVhdGVDb25uZWN0aW9uKG5vblJvdXRhYmxlSVBGb3JDb25uZWN0aW9uVGltZW91dCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLAotCQkJCWxhbmd1YWdlLkVuZ2xpc2gpLCBjb25uU2V0dGluZ3MpCi0JCQl0MiA6PSB0aW1lLlNpbmNlKHQxKQotCQkJYXNzZXJ0LlRydWUodCwgdDIuU2Vjb25kcygpIDwgMy41ICYmIHQyLlNlY29uZHMoKSA+IDIuNSkKLQkJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQotCQkJYXNzZXJ0Lk5pbCh0LCBjb25uZWN0aW9uKQotCQl9KQotCX0pCi0KLQl0LlJ1bigiVGVzdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIEdyYXBoVHJhdmVyc2FsIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQotCQkvLyBJbml0aWFsaXplIGdyYXBoCi0JCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhBdXRoSW5mbywgdGVzdE5vQXV0aFRsc0NvbmZpZykKLQkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKLQotCQkvLyBSZWFkIHRlc3QgZGF0YSBvdXQgb2YgdGhlIGdyYXBoIGFuZCBjaGVjayB0aGF0IGl0IGlzIGNvcnJlY3QuCi0JCXJlYWRUZXN0RGF0YVZlcnRleFByb3BlcnRpZXModCwgZykKLQkJcmVhZFRlc3REYXRhVmFsdWVzKHQsIGcpCi0KLQkJLy8gUmVzZXQgR3JhcGgKLQkJcmVzZXRHcmFwaCh0LCBnKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBjcmVhdGVDb25uZWN0aW9uIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY29ubmVjdGlvbiwgZXJyIDo9IGNyZWF0ZUNvbm5lY3Rpb24odGVzdE5vQXV0aFVybCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwKLQkJCW5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgY29ubmVjdGlvbikKLQkJYXNzZXJ0LkVxdWFsKHQsIGVzdGFibGlzaGVkLCBjb25uZWN0aW9uLnN0YXRlKQotCQlkZWZlciBkZWZlcnJlZENsZWFudXAodCwgY29ubmVjdGlvbikKLQl9KQotCi0JdC5SdW4oIlRlc3QgY3JlYXRlQ29ubmVjdGlvbiB3aXRoIGNvbXByZXNzaW9uIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJc2V0dGluZyA6PSBuZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCkKLQkJc2V0dGluZy5lbmFibGVDb21wcmVzc2lvbiA9IHRydWUKLQkJY29ubmVjdGlvbiwgZXJyIDo9IGNyZWF0ZUNvbm5lY3Rpb24odGVzdE5vQXV0aFVybCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwKLQkJCXNldHRpbmcpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIGNvbm5lY3Rpb24pCi0JCWFzc2VydC5FcXVhbCh0LCBlc3RhYmxpc2hlZCwgY29ubmVjdGlvbi5zdGF0ZSkKLQkJZGVmZXIgZGVmZXJyZWRDbGVhbnVwKHQsIGNvbm5lY3Rpb24pCi0JfSkKLQotCXQuUnVuKCJUZXN0IGNvbm5lY3Rpb24ud3JpdGUoKSB3aXRoIHNtYWxsIGJ1ZmZlciBzaXplIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJc2V0dGluZyA6PSBuZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCkKLQkJc2V0dGluZy5yZWFkQnVmZmVyU2l6ZSA9IDEwMAotCQlzZXR0aW5nLndyaXRlQnVmZmVyU2l6ZSA9IDE1MAotCQlzZXR0aW5nLmNvbm5lY3Rpb25UaW1lb3V0ID0gMSAqIHRpbWUuU2Vjb25kCi0JCWNvbm5lY3Rpb24sIGVyciA6PSBjcmVhdGVDb25uZWN0aW9uKHRlc3ROb0F1dGhVcmwsIG5ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgSW5mbywgbGFuZ3VhZ2UuRW5nbGlzaCksCi0JCQlzZXR0aW5nKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBjb25uZWN0aW9uKQotCQlhc3NlcnQuRXF1YWwodCwgZXN0YWJsaXNoZWQsIGNvbm5lY3Rpb24uc3RhdGUpCi0JCWRlZmVyIGRlZmVycmVkQ2xlYW51cCh0LCBjb25uZWN0aW9uKQotCQlyZXF1ZXN0IDo9IE1ha2VTdHJpbmdSZXF1ZXN0KCJnLlYoKS5jb3VudCgpIiwgImciLCAiIiwgKm5ldyhSZXF1ZXN0T3B0aW9ucykpCi0JCXJlc3VsdFNldCwgZXJyIDo9IGNvbm5lY3Rpb24ud3JpdGUoJnJlcXVlc3QpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKLQkJcmVzdWx0LCBvaywgZXJyIDo9IHJlc3VsdFNldC5PbmUoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LlRydWUodCwgb2spCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0KQotCX0pCi0KLQl0LlJ1bigiVGVzdCBjb25uZWN0aW9uLndyaXRlKCkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQotCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbih0ZXN0Tm9BdXRoVXJsLCBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpLAotCQkJbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBjb25uZWN0aW9uKQotCQlhc3NlcnQuRXF1YWwodCwgZXN0YWJsaXNoZWQsIGNvbm5lY3Rpb24uc3RhdGUpCi0JCWRlZmVyIGRlZmVycmVkQ2xlYW51cCh0LCBjb25uZWN0aW9uKQotCQlyZXF1ZXN0IDo9IE1ha2VTdHJpbmdSZXF1ZXN0KCJnLlYoKS5jb3VudCgpIiwgImciLCAiIiwgKm5ldyhSZXF1ZXN0T3B0aW9ucykpCi0JCXJlc3VsdFNldCwgZXJyIDo9IGNvbm5lY3Rpb24ud3JpdGUoJnJlcXVlc3QpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKLQkJcmVzdWx0LCBvaywgZXJyIDo9IHJlc3VsdFNldC5PbmUoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LlRydWUodCwgb2spCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0KQotCX0pCi0KLQl0LlJ1bigiVGVzdCBjb25uZWN0aW9uLmNsb3NlKCkgZmFpbHVyZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCi0JCWNvbm5lY3Rpb24sIGVyciA6PSBjcmVhdGVDb25uZWN0aW9uKHRlc3ROb0F1dGhVcmwsIG5ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgSW5mbywgbGFuZ3VhZ2UuRW5nbGlzaCksCi0JCQluZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCkpCi0JCWFzc2VydC5FcXVhbCh0LCBlc3RhYmxpc2hlZCwgY29ubmVjdGlvbi5zdGF0ZSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWVyciA9IGNvbm5lY3Rpb24uY2xvc2UoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LkVxdWFsKHQsIGNsb3NlZCwgY29ubmVjdGlvbi5zdGF0ZSkKLQkJZXJyID0gY29ubmVjdGlvbi5jbG9zZSgpCi0JCWFzc2VydC5FcXVhbCh0LCBuZXdFcnJvcihlcnIwMTAxQ29ubmVjdGlvbkNsb3NlRXJyb3IpLCBlcnIpCi0JCWFzc2VydC5FcXVhbCh0LCBjbG9zZWQsIGNvbm5lY3Rpb24uc3RhdGUpCi0JCWVyciA9IGNvbm5lY3Rpb24uY2xvc2UoKQotCQlhc3NlcnQuRXF1YWwodCwgbmV3RXJyb3IoZXJyMDEwMUNvbm5lY3Rpb25DbG9zZUVycm9yKSwgZXJyKQotCQlhc3NlcnQuRXF1YWwodCwgY2xvc2VkLCBjb25uZWN0aW9uLnN0YXRlKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBjb25uZWN0aW9uLndyaXRlKCkgYWZ0ZXIgY2xvc2UoKSBmYWlsdXJlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJY29ubmVjdGlvbiwgZXJyIDo9IGNyZWF0ZUNvbm5lY3Rpb24odGVzdE5vQXV0aFVybCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwKLQkJCW5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIGVzdGFibGlzaGVkLCBjb25uZWN0aW9uLnN0YXRlKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJZXJyID0gY29ubmVjdGlvbi5jbG9zZSgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuRXF1YWwodCwgY2xvc2VkLCBjb25uZWN0aW9uLnN0YXRlKQotCQlyZXF1ZXN0IDo9IE1ha2VTdHJpbmdSZXF1ZXN0KCJnLlYoKS5jb3VudCgpIiwgImciLCAiIiwgKm5ldyhSZXF1ZXN0T3B0aW9ucykpCi0JCXJlc3VsdFNldCwgZXJyIDo9IGNvbm5lY3Rpb24ud3JpdGUoJnJlcXVlc3QpCi0JCWFzc2VydC5OaWwodCwgcmVzdWx0U2V0KQotCQlhc3NlcnQuRXF1YWwodCwgbmV3RXJyb3IoZXJyMDEwMldyaXRlQ29ubmVjdGlvbkNsb3NlZEVycm9yKSwgZXJyKQotCQlhc3NlcnQuRXF1YWwodCwgY2xvc2VkLCBjb25uZWN0aW9uLnN0YXRlKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBzZXJ2ZXIgY2xvc2VzIHdlYnNvY2tldCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBtYW51YWxUZXN0U3VpdGVOYW1lLCB0ZXN0TWFudWFsKQotCQljb25uU2V0dGluZ3MgOj0gbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpCi0JCWNvbm5TZXR0aW5ncy5rZWVwQWxpdmVJbnRlcnZhbCA9IDUwMCAqIGtlZXBBbGl2ZUludGVydmFsRGVmYXVsdAotCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbih0ZXN0Tm9BdXRoVXJsLCBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpLAotCQkJY29ublNldHRpbmdzKQotCQlhc3NlcnQuRXF1YWwodCwgZXN0YWJsaXNoZWQsIGNvbm5lY3Rpb24uc3RhdGUpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQl0aW1lLlNsZWVwKDEyMCAqIHRpbWUuU2Vjb25kKQotCQlyZXF1ZXN0IDo9IE1ha2VTdHJpbmdSZXF1ZXN0KCJnLlYoKS5jb3VudCgpIiwgImciLCAiIiwgKm5ldyhSZXF1ZXN0T3B0aW9ucykpCi0JCXJlc3VsdFNldCwgZXJyIDo9IGNvbm5lY3Rpb24ud3JpdGUoJnJlcXVlc3QpCi0JCWFzc2VydC5OaWwodCwgcmVzdWx0U2V0KQotCQlhc3NlcnQuTm90TmlsKHQsIGVycikKLQl9KQotCi0JdC5SdW4oIlRlc3QgbmV3TG9hZEJhbGFuY2luZ1Bvb2wiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQotCQluZXdQb29sU2l6ZSA6PSAyCi0JCXBvb2wsIGVyciA6PSBuZXdMb2FkQmFsYW5jaW5nUG9vbCh0ZXN0Tm9BdXRoVXJsLCBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpLAotCQkJbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpLCA0LCA0LCBuZXdQb29sU2l6ZSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWRlZmVyIHBvb2wuY2xvc2UoKQotCQlhc3NlcnQuTGVuKHQsIHBvb2wuKCpsb2FkQmFsYW5jaW5nUG9vbCkuY29ubmVjdGlvbnMsIG5ld1Bvb2xTaXplKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBsb2FkQmFsYW5jaW5nUG9vbC5uZXdDb25uZWN0aW9uIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJbmV3UG9vbFNpemUgOj0gMAotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQotCQlwb29sLCBlcnIgOj0gbmV3TG9hZEJhbGFuY2luZ1Bvb2wodGVzdE5vQXV0aFVybCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwKLQkJCW5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKSwgNCwgNCwgbmV3UG9vbFNpemUpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlkZWZlciBwb29sLmNsb3NlKCkKLQkJbGhwIDo9IHBvb2wuKCpsb2FkQmFsYW5jaW5nUG9vbCkKLQkJLy8gUG9vbCBpbnN0YW50aWF0ZWQgd2l0aCBubyBjb25uZWN0aW9ucyBzbyB0aGlzIHdpbGwgaW52b2tlIG5ld0Nvbm5lY3Rpb24KLQkJbmV3Q29ubiwgZXJyIDo9IGxocC5nZXRMZWFzdFVzZWRDb25uZWN0aW9uKCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5MZW4odCwgbGhwLmNvbm5lY3Rpb25zLCBuZXdQb29sU2l6ZSsxKQotCQkvLyBXb3JrYXJvdW5kIGZvciBmYWxzZSBwb3NpdGl2ZSBpbiByYWNlIGNvbmRpdGlvbiBjaGVjawotCQlmb3VuZCA6PSBmYWxzZQotCQlmb3IgXywgY29ubiA6PSByYW5nZSBsaHAuY29ubmVjdGlvbnMgewotCQkJaWYgY29ubiA9PSBuZXdDb25uIHsKLQkJCQlmb3VuZCA9IHRydWUKLQkJCX0KLQkJfQotCQlhc3NlcnQuVHJ1ZSh0LCBmb3VuZCkKLQl9KQotCi0JdC5SdW4oIlRlc3QgbG9hZEJhbGFuY2luZ1Bvb2wuZ2V0TGVhc3RVc2VkQ29ubmVjdGlvbiIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCW5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQgOj0gMgotCQltYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zIDo9IDIKLQkJbG9nSGFuZGxlciA6PSBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpCi0JCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCi0KLQkJdC5SdW4oInBvb2wgaXMgZW1wdHkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9vbCwgZXJyIDo9IG5ld0xvYWRCYWxhbmNpbmdQb29sKHRlc3ROb0F1dGhVcmwsIG5ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgSW5mbywgbGFuZ3VhZ2UuRW5nbGlzaCksCi0JCQkJbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpLAotCQkJCW5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQsIG1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMsIDApCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWxicCA6PSBwb29sLigqbG9hZEJhbGFuY2luZ1Bvb2wpCi0JCQlkZWZlciBsYnAuY2xvc2UoKQotCQkJY29ubiwgZXJyIDo9IGxicC5nZXRMZWFzdFVzZWRDb25uZWN0aW9uKCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCBjb25uKQotCQkJYXNzZXJ0Lkxlbih0LCBsYnAuY29ubmVjdGlvbnMsIDEpCi0JCX0pCi0KLQkJdC5SdW4oIm5ld0NvbmN1cnJlbnRUaHJlc2hvbGQgcmVhY2hlZCB3aXRoIGNhcGFjaXR5IHJlbWFpbmluZyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb29sLCBlcnIgOj0gbmV3TG9hZEJhbGFuY2luZ1Bvb2wodGVzdE5vQXV0aFVybCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwKLQkJCQluZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCksCi0JCQkJbmV3Q29ubmVjdGlvblRocmVzaG9sZCwgbWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucywgMCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJbGJwIDo9IHBvb2wuKCpsb2FkQmFsYW5jaW5nUG9vbCkKLQkJCWRlZmVyIGxicC5jbG9zZSgpCi0JCQl0aHJlc2hvbGRSZWFjaGVkUmVzdWx0cyA6PSAmc3luY2hyb25pemVkTWFwewotCQkJCWludGVybmFsTWFwOiBtYXBbc3RyaW5nXVJlc3VsdFNldHt9LAotCQkJCXN5bmNMb2NrOiAgICBzeW5jLk11dGV4e30sCi0JCQl9Ci0JCQl0aHJlc2hvbGRSZWFjaGVkUmVzdWx0cy5zdG9yZSgiMSIsIG5pbCkKLQkJCXRocmVzaG9sZFJlYWNoZWRSZXN1bHRzLnN0b3JlKCIyIiwgbmlsKQotCQkJZnVsbENvbm5lY3Rpb24gOj0gJmNvbm5lY3Rpb257Ci0JCQkJbG9nSGFuZGxlcjogbG9nSGFuZGxlciwKLQkJCQlwcm90b2NvbDogICBuaWwsCi0JCQkJcmVzdWx0czogICAgdGhyZXNob2xkUmVhY2hlZFJlc3VsdHMsCi0JCQkJc3RhdGU6ICAgICAgZXN0YWJsaXNoZWQsCi0JCQl9Ci0JCQljYXBhY2l0eUF2YWlsYWJsZVBvb2wgOj0gbWFrZShbXSpjb25uZWN0aW9uLCAwLCBtYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zKQotCQkJY2FwYWNpdHlBdmFpbGFibGVQb29sID0gYXBwZW5kKGNhcGFjaXR5QXZhaWxhYmxlUG9vbCwgZnVsbENvbm5lY3Rpb24pCi0JCQlsYnAuY29ubmVjdGlvbnMgPSBjYXBhY2l0eUF2YWlsYWJsZVBvb2wKLQkJCWNvbm4sIGVyciA6PSBsYnAuZ2V0TGVhc3RVc2VkQ29ubmVjdGlvbigpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5Ob3ROaWwodCwgY29ubikKLQkJCWFzc2VydC5Ob3RFcXVhbCh0LCBmdWxsQ29ubmVjdGlvbiwgY29ubikKLQkJCWFzc2VydC5MZW4odCwgbGJwLmNvbm5lY3Rpb25zLCAyKQotCQl9KQotCi0JCXQuUnVuKCJuZXdDb25jdXJyZW50VGhyZXNob2xkIHJlYWNoZWQgd2l0aCBubyBjYXBhY2l0eSByZW1haW5pbmciLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJY2FwYWNpdHlGdWxsQ29ubmVjdGlvblBvb2wsIGVyciA6PSBuZXdMb2FkQmFsYW5jaW5nUG9vbCh0ZXN0Tm9BdXRoVXJsLCBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sCi0JCQkJbGFuZ3VhZ2UuRW5nbGlzaCksIG5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKSwKLQkJCQkxLCAxLCAxKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTm90TmlsKHQsIGNhcGFjaXR5RnVsbENvbm5lY3Rpb25Qb29sKQotCQkJY2FwYWNpdHlGdWxsTGJwIDo9IGNhcGFjaXR5RnVsbENvbm5lY3Rpb25Qb29sLigqbG9hZEJhbGFuY2luZ1Bvb2wpCi0JCQlkZWZlciBjYXBhY2l0eUZ1bGxMYnAuY2xvc2UoKQotCQkJY2FwYWNpdHlGdWxsTGJwLmNvbm5lY3Rpb25zWzBdLnJlc3VsdHMuc3RvcmUoIm1vY2tGaWxsQ2FwYWNpdHkiLAotCQkJCW5ld0NoYW5uZWxSZXN1bHRTZXQoIm1vY2tGaWxsQ2FwYWNpdHkiLCBjYXBhY2l0eUZ1bGxMYnAuY29ubmVjdGlvbnNbMF0ucmVzdWx0cykpCi0JCQljb25uLCBlcnIgOj0gY2FwYWNpdHlGdWxsTGJwLmdldExlYXN0VXNlZENvbm5lY3Rpb24oKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTm90TmlsKHQsIGNvbm4pCi0JCQlhc3NlcnQuTGVuKHQsIGNhcGFjaXR5RnVsbExicC5jb25uZWN0aW9ucywgMSkKLQkJfSkKLQotCQl0LlJ1bigiYWxsIGNvbm5lY3Rpb25zIGluIHBvb2wgaW52YWxpZCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb29sLCBlcnIgOj0gbmV3TG9hZEJhbGFuY2luZ1Bvb2wodGVzdE5vQXV0aFVybCwgbmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwKLQkJCQluZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCksCi0JCQkJbmV3Q29ubmVjdGlvblRocmVzaG9sZCwgbWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucywgMCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJbGJwIDo9IHBvb2wuKCpsb2FkQmFsYW5jaW5nUG9vbCkKLQkJCWRlZmVyIGxicC5jbG9zZSgpCi0JCQlpbnZhbGlkQ29ubmVjdGlvbjEgOj0gJmNvbm5lY3Rpb257Ci0JCQkJbG9nSGFuZGxlcjogbG9nSGFuZGxlciwKLQkJCQlwcm90b2NvbDogICBuaWwsCi0JCQkJcmVzdWx0czogICAgbmlsLAotCQkJCXN0YXRlOiAgICAgIGNsb3NlZCwKLQkJCX0KLQkJCWludmFsaWRDb25uZWN0aW9uMiA6PSAmY29ubmVjdGlvbnsKLQkJCQlsb2dIYW5kbGVyOiBsb2dIYW5kbGVyLAotCQkJCXByb3RvY29sOiAgIG5pbCwKLQkJCQlyZXN1bHRzOiAgICBuaWwsCi0JCQkJc3RhdGU6ICAgICAgY2xvc2VkRHVlVG9FcnJvciwKLQkJCX0KLQkJCWludmFsaWRQb29sIDo9IFtdKmNvbm5lY3Rpb257aW52YWxpZENvbm5lY3Rpb24xLCBpbnZhbGlkQ29ubmVjdGlvbjJ9Ci0JCQlsYnAuY29ubmVjdGlvbnMgPSBpbnZhbGlkUG9vbAotCQkJY29ubiwgZXJyIDo9IGxicC5nZXRMZWFzdFVzZWRDb25uZWN0aW9uKCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCBjb25uKQotCQkJYXNzZXJ0Lk5vdEVxdWFsKHQsIGludmFsaWRDb25uZWN0aW9uMSwgY29ubikKLQkJCWFzc2VydC5Ob3RFcXVhbCh0LCBpbnZhbGlkQ29ubmVjdGlvbjIsIGNvbm4pCi0JCQlhc3NlcnQuTGVuKHQsIGxicC5jb25uZWN0aW9ucywgMSkKLQkJCWFzc2VydC5Ob3RDb250YWlucyh0LCBsYnAuY29ubmVjdGlvbnMsIGludmFsaWRDb25uZWN0aW9uMSkKLQkJCWFzc2VydC5Ob3RDb250YWlucyh0LCBsYnAuY29ubmVjdGlvbnMsIGludmFsaWRDb25uZWN0aW9uMikKLQkJfSkKLQl9KQotCisJLy8gdGhpcyB0ZXN0IGlzIHVzZWQgdG8gdGVzdCB0aGUgd3MtPmh0dHAgUE9DIGNoYW5nZXMgdmlhIG1hbnVhbCBleGVjdXRpb24gd2l0aCBhIGxvY2FsIFRQIDQuMCBncmVtbGluIHNlcnZlciBydW5uaW5nIG9uIDgxODIKIAl0LlJ1bigiVGVzdCBjbGllbnQuc3VibWl0KCkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCisJCXRsc0NvbmYgOj0gdGxzLkNvbmZpZ3sKKwkJCUluc2VjdXJlU2tpcFZlcmlmeTogdHJ1ZSwKKwkJfQorCiAJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAorCQkJLy9jbGllbnQsIGVyciA6PSBOZXdDbGllbnQobm9BdXRoU3NsVXJsLAogCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKLQkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KKwkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSAmdGxzQ29uZgorCQkJCXNldHRpbmdzLkVuYWJsZUNvbXByZXNzaW9uID0gdHJ1ZQorCQkJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9IHRlc3RTZXJ2ZXJNb2Rlcm5HcmFwaEFsaWFzCiAJCQl9KQogCQlhc3NlcnQuTmlsKHQsIGVycikKIAkJYXNzZXJ0Lk5vdE5pbCh0LCBjbGllbnQpCiAJCWRlZmVyIGNsaWVudC5DbG9zZSgpCiAKLQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdCgiZy5WKCkuY291bnQoKSIpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKLQkJcmVzdWx0LCBvaywgZXJyIDo9IHJlc3VsdFNldC5PbmUoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LlRydWUodCwgb2spCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0KQorCQkvLyBzeW5jaHJvbm91cworCQlmb3IgaSA6PSAwOyBpIDwgNTsgaSsrIHsKKwkJCXN1Ym1pdENvdW50KGksIGNsaWVudCwgdCkKKwkJfQogCi0JCWcgOj0gY2xvbmVHcmFwaFRyYXZlcnNhbFNvdXJjZSgmR3JhcGh7fSwgTmV3Qnl0ZWNvZGUobmlsKSwgbmlsKQotCQliIDo9IGcuVigpLkNvdW50KCkuQnl0ZWNvZGUKLQkJcmVzdWx0U2V0LCBlcnIgPSBjbGllbnQuc3VibWl0Qnl0ZWNvZGUoYikKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCQlyZXN1bHQsIG9rLCBlcnIgPSByZXN1bHRTZXQuT25lKCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5UcnVlKHQsIG9rKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdCkKKwkJLy8gYXN5bmMKKwkJdmFyIHdnIHN5bmMuV2FpdEdyb3VwCisJCWZvciBpIDo9IDA7IGkgPCA1OyBpKysgeworCQkJd2cuQWRkKDEpCisJCQlnbyBmdW5jKGkgaW50KSB7CisJCQkJZGVmZXIgd2cuRG9uZSgpCisJCQkJc3VibWl0Q291bnQoaSwgY2xpZW50LCB0KQorCQkJfShpKQorCQl9CisJCXdnLldhaXQoKQogCX0pCiAKLQl0LlJ1bigiVGVzdCBjbGllbnQuc3VibWl0KCkgb24gc2Vzc2lvbiIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJdC5SdW4oIlRlc3QgY2xpZW50LnN1Ym1pdCgpIHdpdGggY29uY3VycmVuY3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCiAJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAogCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKIAkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KKwkJCQlzZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbiA9IHRydWUKKwkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyTW9kZXJuR3JhcGhBbGlhcwogCQkJfSkKLQkJY2xpZW50LnNlc3Npb24gPSAiYWJjMTIzIgogCQlhc3NlcnQuTmlsKHQsIGVycikKIAkJYXNzZXJ0Lk5vdE5pbCh0LCBjbGllbnQpCiAJCWRlZmVyIGNsaWVudC5DbG9zZSgpCiAKLQkJcmVzdWx0U2V0LCBlcnIgOj0gY2xpZW50LlN1Ym1pdCgiZy5WKCkuY291bnQoKSIpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdFNldCkKLQkJcmVzdWx0LCBvaywgZXJyIDo9IHJlc3VsdFNldC5PbmUoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LlRydWUodCwgb2spCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0KQorCQkvLyBzeW5jaHJvbm91cworCQlmb3IgaSA6PSAwOyBpIDwgNTsgaSsrIHsKKwkJCXN1Ym1pdENvdW50KGksIGNsaWVudCwgdCkKKwkJfQorCisJCS8vIGFzeW5jCisJCXZhciB3ZyBzeW5jLldhaXRHcm91cAorCQlmb3IgaSA6PSAwOyBpIDwgNTsgaSsrIHsKKwkJCXdnLkFkZCgxKQorCQkJZ28gZnVuYyhpIGludCkgeworCQkJCWRlZmVyIHdnLkRvbmUoKQorCQkJCXN1Ym1pdENvdW50KGksIGNsaWVudCwgdCkKKwkJCX0oaSkKKwkJfQorCQl3Zy5XYWl0KCkKIAl9KQogCiAJdC5SdW4oIlRlc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBHcmFwaFRyYXZlcnNhbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CiAJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCiAKIAkJLy8gSW5pdGlhbGl6ZSBncmFwaAotCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoQXV0aEluZm8sIHRlc3ROb0F1dGhUbHNDb25maWcpCisJCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhUbHNDb25maWcpCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJLy8gUmVhZCB0ZXN0IGRhdGEgb3V0IG9mIHRoZSBncmFwaCBhbmQgY2hlY2sgdGhhdCBpdCBpcyBjb3JyZWN0LgpAQCAtNjU4LDcgKzM1NCw3IEBACiAJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCiAKIAkJLy8gSW5pdGlhbGl6ZSBncmFwaAotCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoQXV0aEluZm8sIHRlc3ROb0F1dGhUbHNDb25maWcpCisJCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhUbHNDb25maWcpCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJcmVhZFdpdGhOZXh0QW5kSGFzTmV4dCh0LCBnKQpAQCAtNjY5LDcgKzM2NSw3IEBACiAJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCiAKIAkJLy8gSW5pdGlhbGl6ZSBncmFwaAotCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoQXV0aEluZm8sIHRlc3ROb0F1dGhUbHNDb25maWcpCisJCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhUbHNDb25maWcpCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJcmVzdWx0U2V0LCBlcnIgOj0gZy5WKCkuSGFzTGFiZWwocGVyc29uTGFiZWwpLlByb3BlcnRpZXMobmFtZUtleSkuR2V0UmVzdWx0U2V0KCkKQEAgLTY5Myw3ICszODksNyBAQAogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCiAJCS8vIEluaXRpYWxpemUgZ3JhcGgKLQkJZyA6PSBnZXRUZXN0R3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aEF1dGhJbmZvLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQorCQlnIDo9IGdldFRlc3RHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCS8vIERyb3AgdGhlIGdyYXBoLgpAQCAtNzM4LDcgKzQzNCw3IEBACiAJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCiAKIAkJLy8gSW5pdGlhbGl6ZSBncmFwaAotCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoQXV0aEluZm8sIHRlc3ROb0F1dGhUbHNDb25maWcpCisJCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhUbHNDb25maWcpCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJLy8gUmVhZCB0ZXN0IGRhdGEgb3V0IG9mIHRoZSBncmFwaCBhbmQgY2hlY2sgdGhhdCBpdCBpcyBjb3JyZWN0LgpAQCAtNzU0LDcgKzQ1MCw3IEBACiAJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCiAKIAkJLy8gSW5pdGlhbGl6ZSBncmFwaAotCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoQXV0aEluZm8sIHRlc3ROb0F1dGhUbHNDb25maWcpCisJCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhUbHNDb25maWcpCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJLy8gUnVuIHRyYXZlcnNhbCBhbmQgdGVzdCBOZXh0L0hhc05leHQgY2FsbHMKQEAgLTc4MCw3ICs0NzYsNyBAQAogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCiAJCS8vIEluaXRpYWxpemUgZ3JhcGgKLQkJZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aEF1dGhJbmZvLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQorCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCXJlYWRVc2luZ0Fub255bW91c1RyYXZlcnNhbCh0LCBnKQpAQCAtODA5LDcgKzUwNSw5IEBACiAJCXJlbW90ZSwgZXJyIDo9IE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24odGVzdEJhc2ljQXV0aFVybCwKIAkJCWZ1bmMoc2V0dGluZ3MgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgewogCQkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3RCYXNpY0F1dGhUbHNDb25maWcKLQkJCQlzZXR0aW5ncy5BdXRoSW5mbyA9IHRlc3RCYXNpY0F1dGhBdXRoSW5mbworCQkJCXNldHRpbmdzLlJlcXVlc3RJbnRlcmNlcHRvcnMgPSBbXVJlcXVlc3RJbnRlcmNlcHRvcnsKKwkJCQkJQmFzaWNBdXRoKHRlc3RCYXNpY0F1dGhVc2VybmFtZSwgdGVzdEJhc2ljQXV0aFBhc3N3b3JkKSwKKwkJCQl9CiAJCQl9KQogCQlhc3NlcnQuTmlsKHQsIGVycikKIAkJYXNzZXJ0Lk5vdE5pbCh0LCByZW1vdGUpCkBAIC04MzUsNyArNTMzLDcgQEAKIAkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKIAogCQkvLyBJbml0aWFsaXplIGdyYXBoCi0JCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhBdXRoSW5mbywgdGVzdE5vQXV0aFRsc0NvbmZpZykKKwkJZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aFRsc0NvbmZpZykKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQlyLCBlcnIgOj0gZy5XaXRoU2FjaygxKS5WKCkuSGFzKCJuYW1lIiwgIkx5bmRvbiIpLlZhbHVlcygiZm9vIikuU2FjayhPcGVyYXRvci5TdW0pLlNhY2soKS5Ub0xpc3QoKQpAQCAtODQ5LDQ4ICs1NDcsMzAgQEAKIAkJcmVzZXRHcmFwaCh0LCBnKQogCX0pCiAKLQl0LlJ1bigiVGVzdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIEdyYXBoVHJhdmVyc2FsIHdpdGggUHJvZmlsZSgpIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQotCQkvLyBJbml0aWFsaXplIGdyYXBoCi0JCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhBdXRoSW5mbywgdGVzdE5vQXV0aFRsc0NvbmZpZykKLQkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKLQotCQlyLCBlcnIgOj0gZy5WKCkuSGFzKCJuYW1lIiwgIkx5bmRvbiIpLlZhbHVlcygiZm9vIikuUHJvZmlsZSgpLlRvTGlzdCgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHIpCi0JCWFzc2VydC5FcXVhbCh0LCAxLCBsZW4ocikpCi0JCW1ldHJpY3MgOj0gclswXS5EYXRhLigqVHJhdmVyc2FsTWV0cmljcykKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBtZXRyaWNzKQotCQlhc3NlcnQuR3JlYXRlck9yRXF1YWwodCwgbGVuKG1ldHJpY3MuTWV0cmljcyksIDIpCi0KLQkJcmVzZXRHcmFwaCh0LCBnKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIEdyYXBoVHJhdmVyc2FsIHdpdGggR3JlbWxpblR5cGUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQotCi0JCS8vIEluaXRpYWxpemUgZ3JhcGgKLQkJZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aEF1dGhJbmZvLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQotCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQotCi0JCXByb3AgOj0gJkdyZW1saW5UeXBleyJqYXZhLmxhbmcuT2JqZWN0In0KLQkJaSA6PSBnLkFkZFYoInR5cGVfdGVzdCIpLlByb3BlcnR5KCJkYXRhIiwgcHJvcCkuSXRlcmF0ZSgpCi0JCWVyciA6PSA8LWkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0KLQkJciwgZXJyIDo9IGcuVigpLkhhc0xhYmVsKCJ0eXBlX3Rlc3QiKS5WYWx1ZXMoImRhdGEiKS5OZXh0KCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5FcXVhbCh0LCBwcm9wLCByLkRhdGEuKCpHcmVtbGluVHlwZSkpCi0KLQkJcmVzZXRHcmFwaCh0LCBnKQotCX0pCisJLy8gVE9ETyByZS1lbmFibGUgYWZ0ZXIgcHJvZmlsZSgpIHN0ZXAgaXMgdXBkYXRlZCBpbiBzZXJ2ZXIKKwkvL3QuUnVuKCJUZXN0IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gR3JhcGhUcmF2ZXJzYWwgd2l0aCBQcm9maWxlKCkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCisJLy8KKwkvLwkvLyBJbml0aWFsaXplIGdyYXBoCisJLy8JZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aFRsc0NvbmZpZykKKwkvLwlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQorCS8vCisJLy8JciwgZXJyIDo9IGcuVigpLkhhcygibmFtZSIsICJMeW5kb24iKS5WYWx1ZXMoImZvbyIpLlByb2ZpbGUoKS5Ub0xpc3QoKQorCS8vCWFzc2VydC5OaWwodCwgZXJyKQorCS8vCWFzc2VydC5Ob3ROaWwodCwgcikKKwkvLwlhc3NlcnQuRXF1YWwodCwgMSwgbGVuKHIpKQorCS8vCW1ldHJpY3MgOj0gclswXS5EYXRhLigqVHJhdmVyc2FsTWV0cmljcykKKwkvLwlhc3NlcnQuTm90TmlsKHQsIG1ldHJpY3MpCisJLy8JYXNzZXJ0LkdyZWF0ZXJPckVxdWFsKHQsIGxlbihtZXRyaWNzLk1ldHJpY3MpLCAyKQorCS8vCisJLy8JcmVzZXRHcmFwaCh0LCBnKQorCS8vfSkKIAogCXQuUnVuKCJUZXN0IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gR3JhcGhUcmF2ZXJzYWwgd2l0aCBCaWdEZWNpbWFsIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKIAkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKIAogCQkvLyBJbml0aWFsaXplIGdyYXBoCi0JCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhBdXRoSW5mbywgdGVzdE5vQXV0aFRsc0NvbmZpZykKKwkJZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aFRsc0NvbmZpZykKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQlwcm9wIDo9ICZCaWdEZWNpbWFsezExLCBiaWcuTmV3SW50KGludDY0KDIyKSl9CkBAIC04OTgsOSArNTc4LDEwIEBACiAJCWVyciA6PSA8LWkKIAkJYXNzZXJ0Lk5pbCh0LCBlcnIpCiAKLQkJciwgZXJyIDo9IGcuVigpLkhhc0xhYmVsKCJ0eXBlX3Rlc3QiKS5WYWx1ZXMoImRhdGEiKS5OZXh0KCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5FcXVhbCh0LCBwcm9wLCByLkRhdGEuKCpCaWdEZWNpbWFsKSkKKwkJLy8gVE9ETyByZXZpc2l0IEJpZ0RlY2ltYWwgaW1wbGVtZW50YXRpb24KKwkJLy9yLCBlcnIgOj0gZy5WKCkuSGFzTGFiZWwoInR5cGVfdGVzdCIpLlZhbHVlcygiZGF0YSIpLk5leHQoKQorCQkvL2Fzc2VydC5OaWwodCwgZXJyKQorCQkvL2Fzc2VydC5FcXVhbCh0LCBwcm9wLCByLkRhdGEuKCpCaWdEZWNpbWFsKSkKIAogCQlyZXNldEdyYXBoKHQsIGcpCiAJfSkKQEAgLTkwOSw3ICs1OTAsNyBAQAogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCiAJCS8vIEluaXRpYWxpemUgZ3JhcGgKLQkJZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aEF1dGhJbmZvLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQorCQlnIDo9IGluaXRpYWxpemVHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoVGxzQ29uZmlnKQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCXByb3AgOj0gJkJ5dGVCdWZmZXJ7W11ieXRle2J5dGUoMTI3KSwgYnl0ZSgyNTUpfX0KQEAgLTkyOSw3ICs2MTAsNiBAQAogCQlyZW1vdGUsIGVyciA6PSBOZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHRlc3ROb0F1dGhXaXRoQWxpYXNVcmwsCiAJCQlmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKIAkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoV2l0aEFsaWFzVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoV2l0aEFsaWFzQXV0aEluZm8KIAkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyTW9kZXJuR3JhcGhBbGlhcwogCQkJfSkKIAkJYXNzZXJ0Lk5pbCh0LCBlcnIpCkBAIC05NDUsMTQ5ICs2MjUsMTEgQEAKIAkJfQogCX0pCiAKLQl0LlJ1bigiVGVzdCBTZXNzaW9ucyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXQuUnVuKCJUZXN0IENyZWF0ZVNlc3Npb25zIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCi0JCQlyZW1vdGUsIGVyciA6PSBOZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHRlc3ROb0F1dGhXaXRoQWxpYXNVcmwsCi0JCQkJZnVuYyhzZXR0aW5ncyAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7Ci0JCQkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhUbHNDb25maWcKLQkJCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KLQkJCQl9KQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTm90TmlsKHQsIHJlbW90ZSkKLQkJCWRlZmVyIHJlbW90ZS5DbG9zZSgpCi0KLQkJCXJlbW90ZVNlc3Npb24xLCBlcnIgOj0gcmVtb3RlLkNyZWF0ZVNlc3Npb24oKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTm90TmlsKHQsIHJlbW90ZVNlc3Npb24xKQotCQkJZGVmZXIgcmVtb3RlU2Vzc2lvbjEuQ2xvc2UoKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHJlbW90ZS5jbGllbnQuc2Vzc2lvbiwgIiIpCi0JCQlhc3NlcnQuTm90RXF1YWwodCwgcmVtb3RlU2Vzc2lvbjEuY2xpZW50LnNlc3Npb24sICIiKQotCQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbihyZW1vdGUuc3Bhd25lZFNlc3Npb25zKSkKLQkJCWZpeGVkVVVJRCA6PSB1dWlkLk5ldygpLlN0cmluZygpCi0KLQkJCXJlbW90ZVNlc3Npb24yLCBlcnIgOj0gcmVtb3RlLkNyZWF0ZVNlc3Npb24oZml4ZWRVVUlEKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTm90TmlsKHQsIHJlbW90ZVNlc3Npb24yKQotCQkJZGVmZXIgcmVtb3RlU2Vzc2lvbjIuQ2xvc2UoKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHJlbW90ZVNlc3Npb24yLmNsaWVudC5zZXNzaW9uLCBmaXhlZFVVSUQpCi0JCQlhc3NlcnQuRXF1YWwodCwgMiwgbGVuKHJlbW90ZS5zcGF3bmVkU2Vzc2lvbnMpKQotCQl9KQotCi0JCXQuUnVuKCJUZXN0IHNlc3Npb24gY2xvc2UiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQkJCXJlbW90ZSwgZXJyIDo9IE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24odGVzdE5vQXV0aFdpdGhBbGlhc1VybCwKLQkJCQlmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKLQkJCQkJc2V0dGluZ3MuVGxzQ29uZmlnID0gdGVzdE5vQXV0aFRsc0NvbmZpZwotCQkJCQlzZXR0aW5ncy5BdXRoSW5mbyA9IHRlc3ROb0F1dGhBdXRoSW5mbwotCQkJCX0pCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5Ob3ROaWwodCwgcmVtb3RlKQotCi0JCQlzZXNzaW9uMSwgXyA6PSByZW1vdGUuQ3JlYXRlU2Vzc2lvbigpCi0JCQlhc3NlcnQuTm90TmlsKHQsIHNlc3Npb24xLmNsaWVudC5zZXNzaW9uKQotCQkJc2Vzc2lvbjEuQ2xvc2UoKQotCQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbihyZW1vdGUuc3Bhd25lZFNlc3Npb25zKSkKLQkJCXNJZCA6PSBzZXNzaW9uMS5HZXRTZXNzaW9uSWQoKQotCQkJc2Vzc2lvbjIsIF8gOj0gcmVtb3RlLkNyZWF0ZVNlc3Npb24oc0lkKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCBzZXNzaW9uMi5jbGllbnQuc2Vzc2lvbikKLQkJCXNlc3Npb24zLCBfIDo9IHJlbW90ZS5DcmVhdGVTZXNzaW9uKCkKLQkJCWFzc2VydC5Ob3ROaWwodCwgc2Vzc2lvbjMuY2xpZW50LnNlc3Npb24pCi0JCQlhc3NlcnQuRXF1YWwodCwgMywgbGVuKHJlbW90ZS5zcGF3bmVkU2Vzc2lvbnMpKQotCi0JCQlyZW1vdGUuQ2xvc2UoKQotCQkJYXNzZXJ0LkVxdWFsKHQsIDAsIGxlbihyZW1vdGUuc3Bhd25lZFNlc3Npb25zKSkKLQkJfSkKLQotCQl0LlJ1bigiVGVzdCBzZXNzaW9uIGZhaWx1cmVzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXNraXBUZXN0c0lmTm90RW5hYmxlZCh0LCBpbnRlZ3JhdGlvblRlc3RTdWl0ZU5hbWUsIHRlc3ROb0F1dGhFbmFibGUpCi0JCQlyZW1vdGUsIGVyciA6PSBOZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHRlc3ROb0F1dGhXaXRoQWxpYXNVcmwsCi0JCQkJZnVuYyhzZXR0aW5ncyAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7Ci0JCQkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhUbHNDb25maWcKLQkJCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KLQkJCQl9KQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuTm90TmlsKHQsIHJlbW90ZSkKLQkJCWRlZmVyIHJlbW90ZS5DbG9zZSgpCi0JCQlzMSwgZXJyIDo9IHJlbW90ZS5DcmVhdGVTZXNzaW9uKCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCBzMSkKLQkJCWRlZmVyIHMxLkNsb3NlKCkKLQkJCXMyLCBlcnIgOj0gczEuQ3JlYXRlU2Vzc2lvbigpCi0JCQlhc3NlcnQuTmlsKHQsIHMyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIG5ld0Vycm9yKGVycjAyMDJDcmVhdGVTZXNzaW9uRnJvbVNlc3Npb25FcnJvciksIGVycikKLQkJfSkKLQotCQl0LlJ1bigiVGVzdCBDcmVhdGVTZXNzaW9uIHdpdGggbXVsdGlwbGUgVVVJRHMgZmFpbHVyZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQotCQkJcmVtb3RlLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbih0ZXN0Tm9BdXRoV2l0aEFsaWFzVXJsLAotCQkJCWZ1bmMoc2V0dGluZ3MgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgewotCQkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJCXNldHRpbmdzLkF1dGhJbmZvID0gdGVzdE5vQXV0aEF1dGhJbmZvCi0JCQkJfSkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCByZW1vdGUpCi0JCQlkZWZlciByZW1vdGUuQ2xvc2UoKQotCQkJczEsIGVyciA6PSByZW1vdGUuQ3JlYXRlU2Vzc2lvbih1dWlkLk5ldygpLlN0cmluZygpLCB1dWlkLk5ldygpLlN0cmluZygpKQotCQkJYXNzZXJ0Lk5pbCh0LCBzMSkKLQkJCWFzc2VydC5FcXVhbCh0LCBuZXdFcnJvcihlcnIwMjAxQ3JlYXRlU2Vzc2lvbk11bHRpcGxlSWRzRXJyb3IpLCBlcnIpCi0JCX0pCi0JfSkKLQotCXQuUnVuKCJUZXN0IENsaWVudC5TdWJtaXQoKSBTaW1wbGUgU3RyaW5nIFF1ZXJ5IHdpdGggQmluZGluZ3MiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQotCi0JCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCh0ZXN0Tm9BdXRoVXJsLAotCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKLQkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoQXV0aEluZm8KLQkJCX0pCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIGNsaWVudCkKLQkJZGVmZXIgY2xpZW50LkNsb3NlKCkKLQotCQlyZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0KCJ4ICsgeCIsIG1hcFtzdHJpbmddaW50ZXJmYWNle317IngiOiAyfSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQotCQlyZXN1bHQsIG9rLCBlcnIgOj0gcmVzdWx0U2V0Lk9uZSgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuVHJ1ZSh0LCBvaykKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByZXN1bHQpCi0JCXJlcywgZXJyIDo9IHJlc3VsdC5HZXRJbnQoKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LkVxdWFsKHQsIDQsIHJlcykKLQl9KQotCi0JdC5SdW4oIlRlc3QgQmluZGluZ3MgVG8gU2VydmVyIENvbmZpZ3VyZWQgd2l0aCBNb2Rlcm4gR3JhcGgiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoV2l0aEFsaWFzRW5hYmxlKQotCQlyZW1vdGUsIGVyciA6PSBOZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHRlc3ROb0F1dGhXaXRoQWxpYXNVcmwsCi0JCQlmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKLQkJCQlzZXR0aW5ncy5UbHNDb25maWcgPSB0ZXN0Tm9BdXRoV2l0aEFsaWFzVGxzQ29uZmlnCi0JCQkJc2V0dGluZ3MuQXV0aEluZm8gPSB0ZXN0Tm9BdXRoV2l0aEFsaWFzQXV0aEluZm8KLQkJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSB0ZXN0U2VydmVyTW9kZXJuR3JhcGhBbGlhcwotCQkJfSkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgcmVtb3RlKQotCQlkZWZlciByZW1vdGUuQ2xvc2UoKQotCQlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKLQotCQlyLCBlcnIgOj0gZy5WKCgmQmluZGluZ3N7fSkuT2YoIngiLCAxKSkuT3V0KCJjcmVhdGVkIikuTWFwKCZMYW1iZGF7U2NyaXB0OiAiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKS5sZW5ndGgoKSIsIExhbmd1YWdlOiAiIn0pLlN1bSgpLlRvTGlzdCgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlmb3IgXywgcmVzIDo9IHJhbmdlIHIgewotCQkJYXNzZXJ0LkVxdWFsKHQsIGludDMyKDMpLCByZXMuR2V0SW50ZXJmYWNlKCkpCi0JCX0KLQkJciwgZXJyID0gZy5WKCgmQmluZGluZ3N7fSkuT2YoIngiLCA0KSkuT3V0KCJjcmVhdGVkIikuTWFwKCZMYW1iZGF7U2NyaXB0OiAiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKS5sZW5ndGgoKSIsIExhbmd1YWdlOiAiIn0pLlN1bSgpLlRvTGlzdCgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlmb3IgXywgcmVzIDo9IHJhbmdlIHIgewotCQkJYXNzZXJ0LkVxdWFsKHQsIGludDMyKDkpLCByZXMuR2V0SW50ZXJmYWNlKCkpCi0JCX0KLQl9KQotCiAJdC5SdW4oIlRlc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBJbnZhbGlkIEdyYXBoVHJhdmVyc2FsIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKIAkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKIAogCQkvLyBJbml0aWFsaXplIGdyYXBoCi0JCWcgOj0gaW5pdGlhbGl6ZUdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsIHRlc3ROb0F1dGhBdXRoSW5mbywgdGVzdE5vQXV0aFRsc0NvbmZpZykKKwkJZyA6PSBpbml0aWFsaXplR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgdGVzdE5vQXV0aFRsc0NvbmZpZykKIAogCQkvLyBEcm9wIHRoZSBncmFwaC4KIAkJZHJvcEdyYXBoKHQsIGcpCkBAIC0xMDk1LDcgKzYzNyw3IEBACiAJCS8vIEFkZCB2ZXJ0aWNlcyBhbmQgZWRnZXMgdG8gZ3JhcGguCiAJCXJzLCBlcnIgOj0gZy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgiaWQiLCBUX18uVW5mb2xkKCkuUHJvcGVydHkoKS5BZGRWKCkpLlRvTGlzdCgpCiAJCWFzc2VydC5OaWwodCwgcnMpCi0JCWFzc2VydC5UcnVlKHQsIGlzU2FtZUVycm9yQ29kZShuZXdFcnJvcihlcnIwNTAyUmVzcG9uc2VIYW5kbGVyUmVhZExvb3BFcnJvciksIGVycikpCisJCWFzc2VydC5UcnVlKHQsIGlzU2FtZUVycm9yQ29kZShuZXdFcnJvcihlcnIwNTAyUmVzcG9uc2VFcnJvciksIGVycikpCiAKIAkJcnMsIGVyciA9IGcuVigpLkNvdW50KCkuVG9MaXN0KCkKIAkJYXNzZXJ0Lk5vdE5pbCh0LCBycykKQEAgLTExMDUsOTggKzY0NywxMCBAQAogCQlkcm9wR3JhcGgodCwgZykKIAl9KQogCi0JLy8gVGhpcyB0ZXN0IG5lZWRzIHRvIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUgc2luY2Ugb3RoZXIgdGVzdHMgcnVubmluZyBjYW4gY2F1c2UgZ29yb3V0aW5lIGNvdW50IHRvIGZsdWN0dWF0ZS4KLQkvLyBJZiB0aGlzIHRlc3QgaXMgbm90IHJ1biBtYW51YWxseSBhbmQgaXNvbGF0ZWQgaXQgd2lsbCBoYXZlIGZsb2F0aW5nIGZhaWx1cmVzLgotCXQuUnVuKCJUZXN0IGNvbm5lY3Rpb24gZ29yb3V0aW5lIGNsZWFudXAiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgbWFudWFsVGVzdFN1aXRlTmFtZSwgdGVzdE1hbnVhbCkKLQotCQlzdGFydENvdW50IDo9IHJ1bnRpbWUuTnVtR29yb3V0aW5lKCkKLQotCQljb25uZWN0aW9uLCBlcnIgOj0gY3JlYXRlQ29ubmVjdGlvbih0ZXN0Tm9BdXRoVXJsLCBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpLAotCQkJbmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBjb25uZWN0aW9uKQotCQlhc3NlcnQuRXF1YWwodCwgZXN0YWJsaXNoZWQsIGNvbm5lY3Rpb24uc3RhdGUpCi0KLQkJLy8gUmVhZCBsb29wLCB3cml0ZSBsb29wLCB0aGlzIHJvdXRpbmUuCi0JCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50KzIsIHJ1bnRpbWUuTnVtR29yb3V0aW5lKCkpCi0KLQkJYXNzZXJ0Lk5pbCh0LCBjb25uZWN0aW9uLmNsb3NlKCkpCi0KLQkJLy8gVGhpcyByb3V0aW5lLgotCQlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCwgcnVudGltZS5OdW1Hb3JvdXRpbmUoKSkKLQl9KQotCi0JdC5SdW4oIlRlc3QgcGVyLXJlcXVlc3QgYXJndW1lbnRzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKLQotCQlnIDo9IGdldFRlc3RHcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCB0ZXN0Tm9BdXRoQXV0aEluZm8sIHRlc3ROb0F1dGhUbHNDb25maWcpCi0JCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCi0KLQkJcmVxQXJnc1Rlc3RzIDo9IFtdc3RydWN0IHsKLQkJCW1zZyAgICAgICBzdHJpbmcKLQkJCXRyYXZlcnNhbCAqR3JhcGhUcmF2ZXJzYWwKLQkJCW5pbEVyciAgICBib29sCi0JCX17Ci0JCQl7Ci0JCQkJIlRyYXZlcnNhbCBtdXN0IHRpbWUgb3V0IChXaXRoKSIsCi0JCQkJZy4KLQkJCQkJV2l0aCgiZXZhbHVhdGlvblRpbWVvdXQiLCAxMCkuCi0JCQkJCUluamVjdCgxKS4KLQkJCQkJU2lkZUVmZmVjdCgmTGFtYmRheyJUaHJlYWQuc2xlZXAoNTAwMCkiLCAiZ3JlbWxpbi1ncm9vdnkifSksCi0JCQkJZmFsc2UsCi0JCQl9LAotCQkJewotCQkJCSJUcmF2ZXJzYWwgbXVzdCBmaW5pc2ggKFdpdGgpIiwKLQkJCQlnLgotCQkJCQlXaXRoKCJldmFsdWF0aW9uVGltZW91dCIsIDEwMDAwKS4KLQkJCQkJSW5qZWN0KDEpLgotCQkJCQlTaWRlRWZmZWN0KCZMYW1iZGF7IlRocmVhZC5zbGVlcCg1MDAwKSIsICJncmVtbGluLWdyb292eSJ9KSwKLQkJCQl0cnVlLAotCQkJfSwKLQkJCXsKLQkJCQkiZXZhbHVhdGlvblRpbWVvdXQgaXMgb3ZlcnJpZGRlbiBhbmQgdHJhdmVyc2FsIG11c3QgdGltZSBvdXQgKFdpdGgpIiwKLQkJCQlnLgotCQkJCQlXaXRoKCJldmFsdWF0aW9uVGltZW91dCIsIDEwMDAwKS5XaXRoKCJldmFsdWF0aW9uVGltZW91dCIsIDEwKS4KLQkJCQkJSW5qZWN0KDEpLgotCQkJCQlTaWRlRWZmZWN0KCZMYW1iZGF7IlRocmVhZC5zbGVlcCg1MDAwKSIsICJncmVtbGluLWdyb292eSJ9KSwKLQkJCQlmYWxzZSwKLQkJCX0sCi0JCQl7Ci0JCQkJIlRyYXZlcnNhbCBtdXN0IHRpbWUgb3V0IChPcHRpb25zU3RyYXRlZ3kpIiwKLQkJCQlnLgotCQkJCQlXaXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kobWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZXZhbHVhdGlvblRpbWVvdXQiOiAxMH0pKS4KLQkJCQkJSW5qZWN0KDEpLgotCQkJCQlTaWRlRWZmZWN0KCZMYW1iZGF7IlRocmVhZC5zbGVlcCg1MDAwKSIsICJncmVtbGluLWdyb292eSJ9KSwKLQkJCQlmYWxzZSwKLQkJCX0sCi0JCQl7Ci0JCQkJIlRyYXZlcnNhbCBtdXN0IGZpbmlzaCAoT3B0aW9uc1N0cmF0ZWd5KSIsCi0JCQkJZy4KLQkJCQkJV2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KG1hcFtzdHJpbmddaW50ZXJmYWNle317ImV2YWx1YXRpb25UaW1lb3V0IjogMTAwMDB9KSkuCi0JCQkJCUluamVjdCgxKS4KLQkJCQkJU2lkZUVmZmVjdCgmTGFtYmRheyJUaHJlYWQuc2xlZXAoNTAwMCkiLCAiZ3JlbWxpbi1ncm9vdnkifSksCi0JCQkJdHJ1ZSwKLQkJCX0sCi0JCX0KLQotCQlnb3RFcnJzIDo9IG1ha2UoW108LWNoYW4gZXJyb3IsIGxlbihyZXFBcmdzVGVzdHMpKQotCi0JCS8vIFJ1biB0ZXN0cyBpbiBwYXJhbGxlbC4KLQkJZm9yIGksIHR0IDo9IHJhbmdlIHJlcUFyZ3NUZXN0cyB7Ci0JCQlnb3RFcnJzW2ldID0gdHQudHJhdmVyc2FsLkl0ZXJhdGUoKQotCQl9Ci0KLQkJLy8gQ2hlY2sgZXJyb3IgcHJvbWlzZXMuCi0JCWZvciBpLCB0dCA6PSByYW5nZSByZXFBcmdzVGVzdHMgewotCQkJYXNzZXJ0LkVxdWFsKHQsIDwtZ290RXJyc1tpXSA9PSBuaWwsIHR0Lm5pbEVyciwgdHQubXNnKQotCQl9Ci0JfSkKLQogCXQuUnVuKCJHZXQgYWxsIHByb3BlcnRpZXMgd2hlbiBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgaXMgYWxsIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKIAkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKIAotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJLy8gdmVydGV4IGNvbnRhaW5zIDIgcHJvcGVydGllcywgbmFtZSBhbmQgYWdlCkBAIC0xMjA5LDcgKzY2Myw3IEBACiAJdC5SdW4oIlNraXAgcHJvcGVydGllcyB3aGVuIG1hdGVyaWFsaXplUHJvcGVydGllcyBpcyB0b2tlbnMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCi0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQkvLyB2ZXJ0ZXggY29udGFpbnMgMiBwcm9wZXJ0aWVzLCBuYW1lIGFuZCBhZ2UKQEAgLTEyMjIsNyArNjc2LDcgQEAKIAl0LlJ1bigiR2V0IGFsbCBwcm9wZXJ0aWVzIHdoZW4gbm8gbWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKIAkJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aEVuYWJsZSkKIAotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJciwgZXJyIDo9IGcuVigpLkhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5OZXh0KCkKQEAgLTEyMzQsNyArNjg4LDcgQEAKIAl0LlJ1bigiVGVzdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIFRyYXZlcnNhbCBXaXRoIG1hdGVyaWFsaXplUHJvcGVydGllcyBpbiBNb2Rlcm4gR3JhcGgiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCB0ZXN0Tm9BdXRoRW5hYmxlKQogCi0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQl2ZXJ0aWNlcywgZXJyIDo9IGcuV2l0aCgibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgTWF0ZXJpYWxpemVQcm9wZXJ0aWVzLlRva2VucykuVigpLlRvTGlzdCgpCkBAIC0xMzIyLDMgKzc3Niw1NDUgQEAKIAkJfQogCX0pCiB9CisKK2Z1bmMgc3VibWl0Q291bnQoaSBpbnQsIGNsaWVudCAqQ2xpZW50LCB0ICp0ZXN0aW5nLlQpIHsKKwlyZXN1bHRTZXQsIGVyciA6PSBjbGllbnQuU3VibWl0KCJnLlYoKS5jb3VudCgpLmFzKCdjJykubWF0aCgnYyArICIgKyBzdHJjb252Lkl0b2EoaSkgKyAiJykiKQorCWFzc2VydC5OaWwodCwgZXJyKQorCWFzc2VydC5Ob3ROaWwodCwgcmVzdWx0U2V0KQorCXJlc3VsdCwgb2ssIGVyciA6PSByZXN1bHRTZXQuT25lKCkKKwlhc3NlcnQuTmlsKHQsIGVycikKKwlhc3NlcnQuVHJ1ZSh0LCBvaykKKwlhc3NlcnQuTm90TmlsKHQsIHJlc3VsdCkKKwljLCBlcnIgOj0gcmVzdWx0LkdldEludCgpCisJYXNzZXJ0LkVxdWFsKHQsIDYraSwgYykKKwlfLCBfID0gZm10LkZwcmludGYob3MuU3Rkb3V0LCAiUmVjZWl2ZWQgcmVzdWx0IDogJXNcbiIsIHJlc3VsdCkKK30KKworZnVuYyBUZXN0U3RyZWFtaW5nUmVzdWx0RGVsaXZlcnkodCAqdGVzdGluZy5UKSB7CisJdGVzdE5vQXV0aFdpdGhBbGlhc0VuYWJsZSA6PSBnZXRFbnZPckRlZmF1bHRCb29sKCJSVU5fSU5URUdSQVRJT05fV0lUSF9BTElBU19URVNUUyIsIHRydWUpCisJc2tpcFRlc3RzSWZOb3RFbmFibGVkKHQsIGludGVncmF0aW9uVGVzdFN1aXRlTmFtZSwgdGVzdE5vQXV0aFdpdGhBbGlhc0VuYWJsZSkKKwlyZW1vdGUsIGVyciA6PSBOZXdEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGdldEVudk9yRGVmYXVsdFN0cmluZygiR1JFTUxJTl9TRVJWRVJfVVJMIiwgbm9BdXRoVXJsKSwKKwkJZnVuYyhzZXR0aW5ncyAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7CisJCQlzZXR0aW5ncy5UbHNDb25maWcgPSAmdGxzLkNvbmZpZ3t9CisJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSAiZ2dyYXRlZnVsIgorCQl9KQorCWFzc2VydC5OaWwodCwgZXJyKQorCWFzc2VydC5Ob3ROaWwodCwgcmVtb3RlKQorCWcgOj0gVHJhdmVyc2FsXygpLldpdGgocmVtb3RlKQorCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCisKKwl0LlJ1bigiZmlyc3QgcmVzdWx0IGFycml2ZXMgYmVmb3JlIGFsbCByZXN1bHRzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJc3RhcnQgOj0gdGltZS5Ob3coKQorCQlycywgZXJyIDo9IGcuVigpLlByb3BlcnRpZXMoKS5HZXRSZXN1bHRTZXQoKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKworCQkvLyBGaXJzdCByZXN1bHQgc2hvdWxkIGFycml2ZSBxdWlja2x5CisJCV8sIG9rLCBlcnIgOj0gcnMuT25lKCkKKwkJZmlyc3RSZXN1bHRUaW1lIDo9IHRpbWUuU2luY2Uoc3RhcnQpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuVHJ1ZSh0LCBvaykKKworCQkvLyBEcmFpbiByZW1haW5pbmcKKwkJXywgZXJyID0gcnMuQWxsKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCXRvdGFsVGltZSA6PSB0aW1lLlNpbmNlKHN0YXJ0KQorCisJCXQuTG9nZigiRmlyc3QgcmVzdWx0OiAldiwgVG90YWw6ICV2LCBSYXRpbzogJS4yZiUlIiwKKwkJCWZpcnN0UmVzdWx0VGltZSwgdG90YWxUaW1lLCBmbG9hdDY0KGZpcnN0UmVzdWx0VGltZSkvZmxvYXQ2NCh0b3RhbFRpbWUpKjEwMCkKKwl9KQorCisJdC5SdW4oInJlc3VsdHMgYXJyaXZlIGluY3JlbWVudGFsbHkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlycywgZXJyIDo9IGcuVigpLlByb3BlcnRpZXMoKS5HZXRSZXN1bHRTZXQoKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKworCQl2YXIgdGltZXN0YW1wcyBbXXRpbWUuVGltZQorCQlzdGFydCA6PSB0aW1lLk5vdygpCisKKwkJZm9yIHsKKwkJCV8sIG9rLCBlcnIgOj0gcnMuT25lKCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJaWYgIW9rIHsKKwkJCQlicmVhaworCQkJfQorCQkJdGltZXN0YW1wcyA9IGFwcGVuZCh0aW1lc3RhbXBzLCB0aW1lLk5vdygpKQorCQl9CisKKwkJaWYgbGVuKHRpbWVzdGFtcHMpIDwgMiB7CisJCQl0LlNraXAoIm5lZWQgbW9yZSByZXN1bHRzIHRvIHRlc3QgaW5jcmVtZW50YWwgZGVsaXZlcnkiKQorCQl9CisKKwkJZmlyc3RIYWxmIDo9IHRpbWVzdGFtcHNbbGVuKHRpbWVzdGFtcHMpLzJdLlN1YihzdGFydCkKKwkJdG90YWwgOj0gdGltZXN0YW1wc1tsZW4odGltZXN0YW1wcyktMV0uU3ViKHN0YXJ0KQorCQl0LkxvZ2YoIkhhbGYgcmVzdWx0cyBhdDogJXYsIEFsbCByZXN1bHRzIGF0OiAldiIsIGZpcnN0SGFsZiwgdG90YWwpCisJfSkKK30KKworLy8gVW5pdCB0ZXN0cyBmb3IgY29ubmVjdGlvbiAobW92ZWQgZnJvbSBodHRwQ29ubmVjdGlvbl90ZXN0LmdvKQorCitmdW5jIG5ld1Rlc3RMb2dIYW5kbGVyKCkgKmxvZ0hhbmRsZXIgeworCXJldHVybiBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIFdhcm5pbmcsIGxhbmd1YWdlLkVuZ2xpc2gpCit9CisKK2Z1bmMgVGVzdE5ld0Nvbm5lY3Rpb24odCAqdGVzdGluZy5UKSB7CisJdC5SdW4oImNyZWF0ZXMgY29ubmVjdGlvbiB3aXRoIGRlZmF1bHQgc2V0dGluZ3MiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwgJmNvbm5lY3Rpb25TZXR0aW5nc3t9KQorCisJCWFzc2VydC5Ob3ROaWwodCwgY29ubi5odHRwQ2xpZW50KQorCQlhc3NlcnQuTm90TmlsKHQsIGNvbm4uaHR0cENsaWVudC5UcmFuc3BvcnQpCisJfSkKKworCXQuUnVuKCJhcHBsaWVzIFRMUyBjb25maWciLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQl0bHNDb25maWcgOj0gJnRscy5Db25maWd7SW5zZWN1cmVTa2lwVmVyaWZ5OiB0cnVlfQorCQljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgImh0dHBzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIsICZjb25uZWN0aW9uU2V0dGluZ3N7CisJCQl0bHNDb25maWc6IHRsc0NvbmZpZywKKwkJfSkKKworCQl0cmFuc3BvcnQgOj0gY29ubi5odHRwQ2xpZW50LlRyYW5zcG9ydC4oKmh0dHAuVHJhbnNwb3J0KQorCQlhc3NlcnQuRXF1YWwodCwgdGxzQ29uZmlnLCB0cmFuc3BvcnQuVExTQ2xpZW50Q29uZmlnKQorCX0pCit9CisKK2Z1bmMgVGVzdFNldEh0dHBSZXF1ZXN0SGVhZGVycyh0ICp0ZXN0aW5nLlQpIHsKKwl0LlJ1bigic2V0cyBjb250ZW50IHR5cGUgYW5kIGFjY2VwdCBoZWFkZXJzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksICJodHRwOi8vbG9jYWxob3N0L2dyZW1saW4iLCAmY29ubmVjdGlvblNldHRpbmdze30pCisJCXJlcSwgXyA6PSBOZXdIdHRwUmVxdWVzdChodHRwLk1ldGhvZFBvc3QsICJodHRwOi8vbG9jYWxob3N0L2dyZW1saW4iKQorCisJCWNvbm4uc2V0SHR0cFJlcXVlc3RIZWFkZXJzKHJlcSkKKworCQlhc3NlcnQuRXF1YWwodCwgZ3JhcGhCaW5hcnlNaW1lVHlwZSwgcmVxLkhlYWRlcnMuR2V0KCJDb250ZW50LVR5cGUiKSkKKwkJYXNzZXJ0LkVxdWFsKHQsIGdyYXBoQmluYXJ5TWltZVR5cGUsIHJlcS5IZWFkZXJzLkdldCgiQWNjZXB0IikpCisJfSkKKworCXQuUnVuKCJzZXRzIHVzZXIgYWdlbnQgd2hlbiBlbmFibGVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksICJodHRwOi8vbG9jYWxob3N0L2dyZW1saW4iLCAmY29ubmVjdGlvblNldHRpbmdzeworCQkJZW5hYmxlVXNlckFnZW50T25Db25uZWN0OiB0cnVlLAorCQl9KQorCQlyZXEsIF8gOj0gTmV3SHR0cFJlcXVlc3QoaHR0cC5NZXRob2RQb3N0LCAiaHR0cDovL2xvY2FsaG9zdC9ncmVtbGluIikKKworCQljb25uLnNldEh0dHBSZXF1ZXN0SGVhZGVycyhyZXEpCisKKwkJYXNzZXJ0Lk5vdEVtcHR5KHQsIHJlcS5IZWFkZXJzLkdldChIZWFkZXJVc2VyQWdlbnQpKQorCX0pCisKKwl0LlJ1bigic2V0cyBjb21wcmVzc2lvbiBoZWFkZXIgd2hlbiBlbmFibGVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksICJodHRwOi8vbG9jYWxob3N0L2dyZW1saW4iLCAmY29ubmVjdGlvblNldHRpbmdzeworCQkJZW5hYmxlQ29tcHJlc3Npb246IHRydWUsCisJCX0pCisJCXJlcSwgXyA6PSBOZXdIdHRwUmVxdWVzdChodHRwLk1ldGhvZFBvc3QsICJodHRwOi8vbG9jYWxob3N0L2dyZW1saW4iKQorCisJCWNvbm4uc2V0SHR0cFJlcXVlc3RIZWFkZXJzKHJlcSkKKworCQlhc3NlcnQuRXF1YWwodCwgImRlZmxhdGUiLCByZXEuSGVhZGVycy5HZXQoIkFjY2VwdC1FbmNvZGluZyIpKQorCX0pCit9CisKK2Z1bmMgVGVzdEdldFJlYWRlcih0ICp0ZXN0aW5nLlQpIHsKKwljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgImh0dHA6Ly9sb2NhbGhvc3QvZ3JlbWxpbiIsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKworCXQuUnVuKCJyZXR1cm5zIGJvZHkgZm9yIG5vbi1jb21wcmVzc2VkIHJlc3BvbnNlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJcmVzcCA6PSAmaHR0cC5SZXNwb25zZXsKKwkJCUhlYWRlcjogaHR0cC5IZWFkZXJ7fSwKKwkJCUJvZHk6ICAgaHR0cC5Ob0JvZHksCisJCX0KKworCQlyZWFkZXIsIGNsb3NlciwgZXJyIDo9IGNvbm4uZ2V0UmVhZGVyKHJlc3ApCisKKwkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQorCQlhc3NlcnQuTmlsKHQsIGNsb3NlcikKKwkJYXNzZXJ0LkVxdWFsKHQsIHJlc3AuQm9keSwgcmVhZGVyKQorCX0pCisKKwl0LlJ1bigicmV0dXJucyB6bGliIHJlYWRlciBmb3IgZGVmbGF0ZSByZXNwb25zZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIFZhbGlkIHpsaWIgY29tcHJlc3NlZCBlbXB0eSBkYXRhCisJCXpsaWJEYXRhIDo9IFtdYnl0ZXsweDc4LCAweDljLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfQorCQlyZXNwIDo9ICZodHRwLlJlc3BvbnNleworCQkJSGVhZGVyOiBodHRwLkhlYWRlcnsiQ29udGVudC1FbmNvZGluZyI6IFtdc3RyaW5neyJkZWZsYXRlIn19LAorCQkJQm9keTogICBpby5Ob3BDbG9zZXIoYnl0ZXMuTmV3UmVhZGVyKHpsaWJEYXRhKSksCisJCX0KKworCQlyZWFkZXIsIGNsb3NlciwgZXJyIDo9IGNvbm4uZ2V0UmVhZGVyKHJlc3ApCisKKwkJYXNzZXJ0Lk5vRXJyb3IodCwgZXJyKQorCQlhc3NlcnQuTm90TmlsKHQsIGNsb3NlcikKKwkJYXNzZXJ0Lk5vdE5pbCh0LCByZWFkZXIpCisJCXJlcXVpcmUuTm9FcnJvcih0LCBjbG9zZXIuQ2xvc2UoKSkKKwl9KQorCisJdC5SdW4oInJldHVybnMgZXJyb3IgZm9yIGludmFsaWQgemxpYiBkYXRhIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJcmVzcCA6PSAmaHR0cC5SZXNwb25zZXsKKwkJCUhlYWRlcjogaHR0cC5IZWFkZXJ7IkNvbnRlbnQtRW5jb2RpbmciOiBbXXN0cmluZ3siZGVmbGF0ZSJ9fSwKKwkJCUJvZHk6ICAgaW8uTm9wQ2xvc2VyKGJ5dGVzLk5ld1JlYWRlcihbXWJ5dGV7MHgwMCwgMHgwMH0pKSwKKwkJfQorCisJCV8sIF8sIGVyciA6PSBjb25uLmdldFJlYWRlcihyZXNwKQorCisJCWFzc2VydC5FcnJvcih0LCBlcnIpCisJfSkKK30KKworZnVuYyBUZXN0Q29ubmVjdGlvbldpdGhNb2NrU2VydmVyKHQgKnRlc3RpbmcuVCkgeworCXQuUnVuKCJoYW5kbGVzIGNvbm5lY3Rpb24gZXJyb3IiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgImh0dHA6Ly9sb2NhbGhvc3Q6OTk5OTkvZ3JlbWxpbiIsICZjb25uZWN0aW9uU2V0dGluZ3N7CisJCQljb25uZWN0aW9uVGltZW91dDogMTAwICogdGltZS5NaWxsaXNlY29uZCwKKwkJfSkKKworCQlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJCWFzc2VydC5Ob0Vycm9yKHQsIGVycikgLy8gc3VibWl0IHJldHVybnMgbmlsLCBlcnJvciBnb2VzIHRvIFJlc3VsdFNldAorCisJCS8vIEFsbCgpIGJsb2NrcyB1bnRpbCBzdHJlYW0gY2xvc2VzLCB0aGVuIHdlIGNhbiBjaGVjayBlcnJvcgorCQlfLCBfID0gcnMuQWxsKCkKKwkJYXNzZXJ0LkVycm9yKHQsIHJzLkdldEVycm9yKCkpCisJfSkKKworCXQuUnVuKCJyZWNlaXZlcyBoZWFkZXJzIGZyb20gcmVxdWVzdCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWhlYWRlcnNDaCA6PSBtYWtlKGNoYW4gaHR0cC5IZWFkZXIsIDEpCisJCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCQloZWFkZXJzQ2ggPC0gci5IZWFkZXIuQ2xvbmUoKQorCQkJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c09LKQorCQl9KSkKKwkJZGVmZXIgc2VydmVyLkNsb3NlKCkKKworCQljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgc2VydmVyLlVSTCwgJmNvbm5lY3Rpb25TZXR0aW5nc3sKKwkJCWVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogdHJ1ZSwKKwkJCWVuYWJsZUNvbXByZXNzaW9uOiAgICAgICAgdHJ1ZSwKKwkJfSkKKworCQlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIpCisKKwkJc2VsZWN0IHsKKwkJY2FzZSByZWNlaXZlZEhlYWRlcnMgOj0gPC1oZWFkZXJzQ2g6CisJCQlhc3NlcnQuRXF1YWwodCwgZ3JhcGhCaW5hcnlNaW1lVHlwZSwgcmVjZWl2ZWRIZWFkZXJzLkdldCgiQ29udGVudC1UeXBlIikpCisJCQlhc3NlcnQuRXF1YWwodCwgImRlZmxhdGUiLCByZWNlaXZlZEhlYWRlcnMuR2V0KCJBY2NlcHQtRW5jb2RpbmciKSkKKwkJCWFzc2VydC5Ob3RFbXB0eSh0LCByZWNlaXZlZEhlYWRlcnMuR2V0KHVzZXJBZ2VudEhlYWRlcikpCisJCWNhc2UgPC10aW1lLkFmdGVyKHRpbWUuU2Vjb25kKToKKwkJCXQuRmF0YWwoInRpbWVvdXQgd2FpdGluZyBmb3IgcmVxdWVzdCIpCisJCX0KKworCQlfLCBfID0gcnMuQWxsKCkgLy8gZHJhaW4KKwl9KQorCisJdC5SdW4oInJldHVybnMgcGxhaW4gdGV4dCBlcnJvciBmb3Igbm9uLUdyYXBoQmluYXJ5IDUwMCByZXNwb25zZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCQl3LkhlYWRlcigpLlNldCgiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW4iKQorCQkJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c0ludGVybmFsU2VydmVyRXJyb3IpCisJCQl3LldyaXRlKFtdYnl0ZSgiSW50ZXJuYWwgU2VydmVyIEVycm9yIikpCisJCX0pKQorCQlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCBzZXJ2ZXIuVVJMLCAmY29ubmVjdGlvblNldHRpbmdze30pCisJCXJzLCBlcnIgOj0gY29ubi5zdWJtaXQoJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwkJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKworCQlfLCBfID0gcnMuQWxsKCkKKwkJcnNFcnIgOj0gcnMuR2V0RXJyb3IoKQorCQlyZXF1aXJlLkVycm9yKHQsIHJzRXJyKQorCQlhc3NlcnQuQ29udGFpbnModCwgcnNFcnIuRXJyb3IoKSwgIkhUVFAgNTAwIikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIHJzRXJyLkVycm9yKCksICJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiKQorCX0pCisKKwl0LlJ1bigiZXh0cmFjdHMgbWVzc2FnZSBmcm9tIEpTT04gZXJyb3IgcmVzcG9uc2UiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlzZXJ2ZXIgOj0gaHR0cHRlc3QuTmV3U2VydmVyKGh0dHAuSGFuZGxlckZ1bmMoZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkgeworCQkJdy5IZWFkZXIoKS5TZXQoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIikKKwkJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNVbmF1dGhvcml6ZWQpCisJCQl3LldyaXRlKFtdYnl0ZShgeyJtZXNzYWdlIjoiQXV0aGVudGljYXRpb24gcmVxdWlyZWQifWApKQorCQl9KSkKKwkJZGVmZXIgc2VydmVyLkNsb3NlKCkKKworCQljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgc2VydmVyLlVSTCwgJmNvbm5lY3Rpb25TZXR0aW5nc3t9KQorCQlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIpCisKKwkJXywgXyA9IHJzLkFsbCgpCisJCXJzRXJyIDo9IHJzLkdldEVycm9yKCkKKwkJcmVxdWlyZS5FcnJvcih0LCByc0VycikKKwkJYXNzZXJ0LkVxdWFsKHQsICJBdXRoZW50aWNhdGlvbiByZXF1aXJlZCIsIHJzRXJyLkVycm9yKCkpCisJfSkKKworCXQuUnVuKCJmYWxscyBiYWNrIHRvIHJhdyBib2R5IGZvciBub24tSlNPTiBlcnJvciByZXNwb25zZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCQl3LkhlYWRlcigpLlNldCgiQ29udGVudC1UeXBlIiwgInRleHQvaHRtbCIpCisJCQl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzQmFkR2F0ZXdheSkKKwkJCXcuV3JpdGUoW11ieXRlKCI8aHRtbD5CYWQgR2F0ZXdheTwvaHRtbD4iKSkKKwkJfSkpCisJCWRlZmVyIHNlcnZlci5DbG9zZSgpCisKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKwkJcnMsIGVyciA6PSBjb25uLnN1Ym1pdCgmUmVxdWVzdE1lc3NhZ2V7R3JlbWxpbjogImcuVigpIiwgRmllbGRzOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9e319KQorCQlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCisJCV8sIF8gPSBycy5BbGwoKQorCQlyc0VyciA6PSBycy5HZXRFcnJvcigpCisJCXJlcXVpcmUuRXJyb3IodCwgcnNFcnIpCisJCWFzc2VydC5Db250YWlucyh0LCByc0Vyci5FcnJvcigpLCAiSFRUUCA1MDIiKQorCQlhc3NlcnQuQ29udGFpbnModCwgcnNFcnIuRXJyb3IoKSwgIjxodG1sPkJhZCBHYXRld2F5PC9odG1sPiIpCisJfSkKKworCXQuUnVuKCJmYWxscyB0aHJvdWdoIHRvIEdyYXBoQmluYXJ5IGRlc2VyaWFsaXphdGlvbiBmb3IgR3JhcGhCaW5hcnkgZXJyb3IgcmVzcG9uc2VzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJc2VydmVyIDo9IGh0dHB0ZXN0Lk5ld1NlcnZlcihodHRwLkhhbmRsZXJGdW5jKGZ1bmModyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKKwkJCXcuSGVhZGVyKCkuU2V0KCJDb250ZW50LVR5cGUiLCBncmFwaEJpbmFyeU1pbWVUeXBlKQorCQkJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c0ludGVybmFsU2VydmVyRXJyb3IpCisJCQkvLyBXcml0ZSBpbnZhbGlkIEdyYXBoQmluYXJ5IOKAlCB0aGUgcG9pbnQgaXMgdGhhdCB3ZSBkb24ndCBzaG9ydC1jaXJjdWl0CisJCQkvLyB0byB0aGUgdGV4dCBlcnJvciBwYXRoIHdoZW4gQ29udGVudC1UeXBlIGlzIEdyYXBoQmluYXJ5CisJCQl3LldyaXRlKFtdYnl0ZXsweDAwfSkKKwkJfSkpCisJCWRlZmVyIHNlcnZlci5DbG9zZSgpCisKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKwkJcnMsIGVyciA6PSBjb25uLnN1Ym1pdCgmUmVxdWVzdE1lc3NhZ2V7R3JlbWxpbjogImcuVigpIiwgRmllbGRzOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9e319KQorCQlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCisJCV8sIF8gPSBycy5BbGwoKQorCQlyc0VyciA6PSBycy5HZXRFcnJvcigpCisJCS8vIFNob3VsZCBnZXQgYSBkZXNlcmlhbGl6YXRpb24gZXJyb3IsIE5PVCBhbiAiSFRUUCA1MDAiIHRleHQgZXJyb3IKKwkJaWYgcnNFcnIgIT0gbmlsIHsKKwkJCWFzc2VydC5Ob3RDb250YWlucyh0LCByc0Vyci5FcnJvcigpLCAiSFRUUCA1MDAiKQorCQl9CisJfSkKKworCXQuUnVuKCJpbnRlcmNlcHRvcnMgcnVuIGJlZm9yZSBzZXJpYWxpemF0aW9uIGlzIGNoZWNrZWQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQl2YXIgaW50ZXJjZXB0b3JIZWFkZXJzIGh0dHAuSGVhZGVyCisJCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCQl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCisJCX0pKQorCQlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCBzZXJ2ZXIuVVJMLCAmY29ubmVjdGlvblNldHRpbmdze30pCisJCWNvbm4uQWRkSW50ZXJjZXB0b3IoZnVuYyhyZXEgKkh0dHBSZXF1ZXN0KSBlcnJvciB7CisJCQlpbnRlcmNlcHRvckhlYWRlcnMgPSByZXEuSGVhZGVycy5DbG9uZSgpCisJCQlyZXR1cm4gbmlsCisJCX0pCisKKwkJcnMsIGVyciA6PSBjb25uLnN1Ym1pdCgmUmVxdWVzdE1lc3NhZ2V7R3JlbWxpbjogImcuVigpIiwgRmllbGRzOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9e319KQorCQlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCQlfLCBfID0gcnMuQWxsKCkKKworCQkvLyBJbnRlcmNlcHRvciBzaG91bGQgc2VlIHRoZSBkZWZhdWx0IGhlYWRlcnMKKwkJYXNzZXJ0LkVxdWFsKHQsIGdyYXBoQmluYXJ5TWltZVR5cGUsIGludGVyY2VwdG9ySGVhZGVycy5HZXQoIkNvbnRlbnQtVHlwZSIpKQorCQlhc3NlcnQuRXF1YWwodCwgZ3JhcGhCaW5hcnlNaW1lVHlwZSwgaW50ZXJjZXB0b3JIZWFkZXJzLkdldCgiQWNjZXB0IikpCisJfSkKKworCXQuUnVuKCJjbG9zZSB3YWl0cyBmb3IgaW4tZmxpZ2h0IHJlcXVlc3RzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJc2VydmVyIDo9IGh0dHB0ZXN0Lk5ld1NlcnZlcihodHRwLkhhbmRsZXJGdW5jKGZ1bmModyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKKwkJCXRpbWUuU2xlZXAoMjAwICogdGltZS5NaWxsaXNlY29uZCkKKwkJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKKwkJfSkpCisJCWRlZmVyIHNlcnZlci5DbG9zZSgpCisKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKworCQlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIpCisKKwkJc3RhcnQgOj0gdGltZS5Ob3coKQorCQljb25uLmNsb3NlKCkKKwkJZWxhcHNlZCA6PSB0aW1lLlNpbmNlKHN0YXJ0KQorCisJCS8vIGNsb3NlKCkgc2hvdWxkIGhhdmUgd2FpdGVkIGZvciB0aGUgaW4tZmxpZ2h0IGdvcm91dGluZQorCQlhc3NlcnQuR3JlYXRlck9yRXF1YWwodCwgZWxhcHNlZC5NaWxsaXNlY29uZHMoKSwgaW50NjQoMTUwKSwKKwkJCSJjbG9zZSgpIHNob3VsZCB3YWl0IGZvciBpbi1mbGlnaHQgcmVxdWVzdHMgdG8gY29tcGxldGUiKQorCisJCS8vIFJlc3VsdFNldCBzaG91bGQgYmUgY2xvc2VkIChnb3JvdXRpbmUgZmluaXNoZWQpCisJCV8sIF8gPSBycy5BbGwoKQorCX0pCit9CisKKy8vIFRlc3RzIGZvciBjb25uZWN0aW9uIHBvb2wgY29uZmlndXJhdGlvbiBzZXR0aW5ncworCitmdW5jIFRlc3RUcnlFeHRyYWN0SlNPTkVycm9yKHQgKnRlc3RpbmcuVCkgeworCXQuUnVuKCJleHRyYWN0cyBtZXNzYWdlIGZyb20gdmFsaWQgSlNPTiIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXJlc3VsdCA6PSB0cnlFeHRyYWN0SlNPTkVycm9yKGB7Im1lc3NhZ2UiOiJhdXRoIGZhaWxlZCIsImNvZGUiOjQwMX1gKQorCQlhc3NlcnQuRXF1YWwodCwgImF1dGggZmFpbGVkIiwgcmVzdWx0KQorCX0pCisKKwl0LlJ1bigicmV0dXJucyBlbXB0eSBmb3IgSlNPTiB3aXRob3V0IG1lc3NhZ2UgZmllbGQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlyZXN1bHQgOj0gdHJ5RXh0cmFjdEpTT05FcnJvcihgeyJlcnJvciI6InNvbWV0aGluZyB3ZW50IHdyb25nIn1gKQorCQlhc3NlcnQuRXF1YWwodCwgIiIsIHJlc3VsdCkKKwl9KQorCisJdC5SdW4oInJldHVybnMgZW1wdHkgZm9yIGludmFsaWQgSlNPTiIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXJlc3VsdCA6PSB0cnlFeHRyYWN0SlNPTkVycm9yKCJub3QganNvbiBhdCBhbGwiKQorCQlhc3NlcnQuRXF1YWwodCwgIiIsIHJlc3VsdCkKKwl9KQorCisJdC5SdW4oInJldHVybnMgZW1wdHkgZm9yIEhUTUwgY29udGVudCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXJlc3VsdCA6PSB0cnlFeHRyYWN0SlNPTkVycm9yKCI8aHRtbD48Ym9keT5FcnJvcjwvYm9keT48L2h0bWw+IikKKwkJYXNzZXJ0LkVxdWFsKHQsICIiLCByZXN1bHQpCisJfSkKKworCXQuUnVuKCJyZXR1cm5zIGVtcHR5IGZvciBlbXB0eSBzdHJpbmciLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlyZXN1bHQgOj0gdHJ5RXh0cmFjdEpTT05FcnJvcigiIikKKwkJYXNzZXJ0LkVxdWFsKHQsICIiLCByZXN1bHQpCisJfSkKK30KKworZnVuYyBUZXN0Q29ubmVjdGlvblBvb2xTZXR0aW5ncyh0ICp0ZXN0aW5nLlQpIHsKKwl0LlJ1bigiZGVmYXVsdCB2YWx1ZXMgYXJlIGFwcGxpZWQgd2hlbiBzZXR0aW5ncyBhcmUgMCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIENyZWF0ZSBjb25uZWN0aW9uIHdpdGggZW1wdHkgc2V0dGluZ3MgKGFsbCB6ZXJvcykKKwkJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksICJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKworCQl0cmFuc3BvcnQgOj0gY29ubi5odHRwQ2xpZW50LlRyYW5zcG9ydC4oKmh0dHAuVHJhbnNwb3J0KQorCisJCS8vIFZlcmlmeSBkZWZhdWx0IHZhbHVlcyBhcmUgYXBwbGllZAorCQlhc3NlcnQuRXF1YWwodCwgMTI4LCB0cmFuc3BvcnQuTWF4Q29ubnNQZXJIb3N0LCAiTWF4Q29ubnNQZXJIb3N0IHNob3VsZCBkZWZhdWx0IHRvIDEyOCIpCisJCWFzc2VydC5FcXVhbCh0LCA4LCB0cmFuc3BvcnQuTWF4SWRsZUNvbm5zUGVySG9zdCwgIk1heElkbGVDb25uc1Blckhvc3Qgc2hvdWxkIGRlZmF1bHQgdG8gOCIpCisJCWFzc2VydC5FcXVhbCh0LCAxODAqdGltZS5TZWNvbmQsIHRyYW5zcG9ydC5JZGxlQ29ublRpbWVvdXQsICJJZGxlQ29ublRpbWVvdXQgc2hvdWxkIGRlZmF1bHQgdG8gMTgwcyIpCisJfSkKKworCXQuUnVuKCJjdXN0b20gdmFsdWVzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byBodHRwLlRyYW5zcG9ydCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWN1c3RvbVNldHRpbmdzIDo9ICZjb25uZWN0aW9uU2V0dGluZ3N7CisJCQltYXhDb25uc1Blckhvc3Q6ICAgICAyNTYsCisJCQltYXhJZGxlQ29ubnNQZXJIb3N0OiAxNiwKKwkJCWlkbGVDb25uVGltZW91dDogICAgIDMwMCAqIHRpbWUuU2Vjb25kLAorCQkJa2VlcEFsaXZlSW50ZXJ2YWw6ICAgNjAgKiB0aW1lLlNlY29uZCwKKwkJCWNvbm5lY3Rpb25UaW1lb3V0OiAgIDMwICogdGltZS5TZWNvbmQsCisJCX0KKworCQljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIiwgY3VzdG9tU2V0dGluZ3MpCisKKwkJdHJhbnNwb3J0IDo9IGNvbm4uaHR0cENsaWVudC5UcmFuc3BvcnQuKCpodHRwLlRyYW5zcG9ydCkKKworCQkvLyBWZXJpZnkgY3VzdG9tIHZhbHVlcyBhcmUgYXBwbGllZAorCQlhc3NlcnQuRXF1YWwodCwgMjU2LCB0cmFuc3BvcnQuTWF4Q29ubnNQZXJIb3N0LCAiTWF4Q29ubnNQZXJIb3N0IHNob3VsZCBiZSBjdXN0b20gdmFsdWUiKQorCQlhc3NlcnQuRXF1YWwodCwgMTYsIHRyYW5zcG9ydC5NYXhJZGxlQ29ubnNQZXJIb3N0LCAiTWF4SWRsZUNvbm5zUGVySG9zdCBzaG91bGQgYmUgY3VzdG9tIHZhbHVlIikKKwkJYXNzZXJ0LkVxdWFsKHQsIDMwMCp0aW1lLlNlY29uZCwgdHJhbnNwb3J0LklkbGVDb25uVGltZW91dCwgIklkbGVDb25uVGltZW91dCBzaG91bGQgYmUgY3VzdG9tIHZhbHVlIikKKwl9KQorCisJdC5SdW4oInBhcnRpYWwgY3VzdG9tIHNldHRpbmdzIHVzZSBkZWZhdWx0cyBmb3IgdW5zZXQgdmFsdWVzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gT25seSBzZXQgbWF4Q29ubnNQZXJIb3N0LCBsZWF2ZSBvdGhlcnMgYXQgMAorCQljdXN0b21TZXR0aW5ncyA6PSAmY29ubmVjdGlvblNldHRpbmdzeworCQkJbWF4Q29ubnNQZXJIb3N0OiA2NCwKKwkJfQorCisJCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCAiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLCBjdXN0b21TZXR0aW5ncykKKworCQl0cmFuc3BvcnQgOj0gY29ubi5odHRwQ2xpZW50LlRyYW5zcG9ydC4oKmh0dHAuVHJhbnNwb3J0KQorCisJCS8vIFZlcmlmeSBjdXN0b20gdmFsdWUgaXMgYXBwbGllZAorCQlhc3NlcnQuRXF1YWwodCwgNjQsIHRyYW5zcG9ydC5NYXhDb25uc1Blckhvc3QsICJNYXhDb25uc1Blckhvc3Qgc2hvdWxkIGJlIGN1c3RvbSB2YWx1ZSIpCisJCS8vIFZlcmlmeSBkZWZhdWx0cyBhcmUgdXNlZCBmb3IgdW5zZXQgdmFsdWVzCisJCWFzc2VydC5FcXVhbCh0LCA4LCB0cmFuc3BvcnQuTWF4SWRsZUNvbm5zUGVySG9zdCwgIk1heElkbGVDb25uc1Blckhvc3Qgc2hvdWxkIGRlZmF1bHQgdG8gOCIpCisJCWFzc2VydC5FcXVhbCh0LCAxODAqdGltZS5TZWNvbmQsIHRyYW5zcG9ydC5JZGxlQ29ublRpbWVvdXQsICJJZGxlQ29ublRpbWVvdXQgc2hvdWxkIGRlZmF1bHQgdG8gMTgwcyIpCisJfSkKK30KKworZnVuYyBUZXN0Q2xpZW50U2V0dGluZ3NXaXJpbmcodCAqdGVzdGluZy5UKSB7CisJdC5SdW4oIkNsaWVudFNldHRpbmdzIHdpcmVzIGNvbm5lY3Rpb24gcG9vbCBzZXR0aW5ncyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWNsaWVudCwgZXJyIDo9IE5ld0NsaWVudCgiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLAorCQkJZnVuYyhzZXR0aW5ncyAqQ2xpZW50U2V0dGluZ3MpIHsKKwkJCQlzZXR0aW5ncy5NYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zID0gMjAwCisJCQkJc2V0dGluZ3MuTWF4SWRsZUNvbm5lY3Rpb25zID0gMjAKKwkJCQlzZXR0aW5ncy5JZGxlQ29ubmVjdGlvblRpbWVvdXQgPSAyNDAgKiB0aW1lLlNlY29uZAorCQkJCXNldHRpbmdzLktlZXBBbGl2ZUludGVydmFsID0gNDUgKiB0aW1lLlNlY29uZAorCQkJfSkKKwkJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKwkJZGVmZXIgY2xpZW50LkNsb3NlKCkKKworCQkvLyBWZXJpZnkgc2V0dGluZ3Mgd2VyZSB3aXJlZCB0byBjb25uZWN0aW9uU2V0dGluZ3MKKwkJYXNzZXJ0LkVxdWFsKHQsIDIwMCwgY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5tYXhDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCAyMCwgY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5tYXhJZGxlQ29ubnNQZXJIb3N0KQorCQlhc3NlcnQuRXF1YWwodCwgMjQwKnRpbWUuU2Vjb25kLCBjbGllbnQuY29ubmVjdGlvblNldHRpbmdzLmlkbGVDb25uVGltZW91dCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDQ1KnRpbWUuU2Vjb25kLCBjbGllbnQuY29ubmVjdGlvblNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsKQorCisJCS8vIFZlcmlmeSBzZXR0aW5ncyB3ZXJlIGFwcGxpZWQgdG8gaHR0cC5UcmFuc3BvcnQKKwkJdHJhbnNwb3J0IDo9IGNsaWVudC5jb25uLmh0dHBDbGllbnQuVHJhbnNwb3J0LigqaHR0cC5UcmFuc3BvcnQpCisJCWFzc2VydC5FcXVhbCh0LCAyMDAsIHRyYW5zcG9ydC5NYXhDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCAyMCwgdHJhbnNwb3J0Lk1heElkbGVDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCAyNDAqdGltZS5TZWNvbmQsIHRyYW5zcG9ydC5JZGxlQ29ublRpbWVvdXQpCisJfSkKKworCXQuUnVuKCJDbGllbnRTZXR0aW5ncyB1c2VzIGRlZmF1bHRzIHdoZW4gbm90IGNvbmZpZ3VyZWQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQljbGllbnQsIGVyciA6PSBOZXdDbGllbnQoImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKKwkJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKwkJZGVmZXIgY2xpZW50LkNsb3NlKCkKKworCQkvLyBWZXJpZnkgZGVmYXVsdHMgYXJlIHVzZWQgKDAgaW4gc2V0dGluZ3MgbWVhbnMgdXNlIGRlZmF1bHQpCisJCWFzc2VydC5FcXVhbCh0LCAwLCBjbGllbnQuY29ubmVjdGlvblNldHRpbmdzLm1heENvbm5zUGVySG9zdCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDAsIGNsaWVudC5jb25uZWN0aW9uU2V0dGluZ3MubWF4SWRsZUNvbm5zUGVySG9zdCkKKwkJYXNzZXJ0LkVxdWFsKHQsIHRpbWUuRHVyYXRpb24oMCksIGNsaWVudC5jb25uZWN0aW9uU2V0dGluZ3MuaWRsZUNvbm5UaW1lb3V0KQorCQlhc3NlcnQuRXF1YWwodCwgdGltZS5EdXJhdGlvbigwKSwgY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5rZWVwQWxpdmVJbnRlcnZhbCkKKworCQkvLyBWZXJpZnkgZGVmYXVsdHMgd2VyZSBhcHBsaWVkIHRvIGh0dHAuVHJhbnNwb3J0CisJCXRyYW5zcG9ydCA6PSBjbGllbnQuY29ubi5odHRwQ2xpZW50LlRyYW5zcG9ydC4oKmh0dHAuVHJhbnNwb3J0KQorCQlhc3NlcnQuRXF1YWwodCwgMTI4LCB0cmFuc3BvcnQuTWF4Q29ubnNQZXJIb3N0KQorCQlhc3NlcnQuRXF1YWwodCwgOCwgdHJhbnNwb3J0Lk1heElkbGVDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCAxODAqdGltZS5TZWNvbmQsIHRyYW5zcG9ydC5JZGxlQ29ublRpbWVvdXQpCisJfSkKK30KKworZnVuYyBUZXN0RHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzV2lyaW5nKHQgKnRlc3RpbmcuVCkgeworCXQuUnVuKCJEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3Mgd2lyZXMgY29ubmVjdGlvbiBwb29sIHNldHRpbmdzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZHJjLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iLAorCQkJZnVuYyhzZXR0aW5ncyAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7CisJCQkJc2V0dGluZ3MuTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucyA9IDE1MAorCQkJCXNldHRpbmdzLk1heElkbGVDb25uZWN0aW9ucyA9IDE1CisJCQkJc2V0dGluZ3MuSWRsZUNvbm5lY3Rpb25UaW1lb3V0ID0gMjAwICogdGltZS5TZWNvbmQKKwkJCQlzZXR0aW5ncy5LZWVwQWxpdmVJbnRlcnZhbCA9IDQwICogdGltZS5TZWNvbmQKKwkJCX0pCisJCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIpCisJCWRlZmVyIGRyYy5DbG9zZSgpCisKKwkJLy8gVmVyaWZ5IHNldHRpbmdzIHdlcmUgd2lyZWQgdG8gY29ubmVjdGlvblNldHRpbmdzCisJCWFzc2VydC5FcXVhbCh0LCAxNTAsIGRyYy5jbGllbnQuY29ubmVjdGlvblNldHRpbmdzLm1heENvbm5zUGVySG9zdCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDE1LCBkcmMuY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5tYXhJZGxlQ29ubnNQZXJIb3N0KQorCQlhc3NlcnQuRXF1YWwodCwgMjAwKnRpbWUuU2Vjb25kLCBkcmMuY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5pZGxlQ29ublRpbWVvdXQpCisJCWFzc2VydC5FcXVhbCh0LCA0MCp0aW1lLlNlY29uZCwgZHJjLmNsaWVudC5jb25uZWN0aW9uU2V0dGluZ3Mua2VlcEFsaXZlSW50ZXJ2YWwpCisKKwkJLy8gVmVyaWZ5IHNldHRpbmdzIHdlcmUgYXBwbGllZCB0byBodHRwLlRyYW5zcG9ydAorCQl0cmFuc3BvcnQgOj0gZHJjLmNsaWVudC5jb25uLmh0dHBDbGllbnQuVHJhbnNwb3J0LigqaHR0cC5UcmFuc3BvcnQpCisJCWFzc2VydC5FcXVhbCh0LCAxNTAsIHRyYW5zcG9ydC5NYXhDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCAxNSwgdHJhbnNwb3J0Lk1heElkbGVDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCAyMDAqdGltZS5TZWNvbmQsIHRyYW5zcG9ydC5JZGxlQ29ublRpbWVvdXQpCisJfSkKKworCXQuUnVuKCJEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MgdXNlcyBkZWZhdWx0cyB3aGVuIG5vdCBjb25maWd1cmVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZHJjLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbigiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQorCQlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCQlkZWZlciBkcmMuQ2xvc2UoKQorCisJCS8vIFZlcmlmeSBkZWZhdWx0cyBhcmUgdXNlZCAoMCBpbiBzZXR0aW5ncyBtZWFucyB1c2UgZGVmYXVsdCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDAsIGRyYy5jbGllbnQuY29ubmVjdGlvblNldHRpbmdzLm1heENvbm5zUGVySG9zdCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDAsIGRyYy5jbGllbnQuY29ubmVjdGlvblNldHRpbmdzLm1heElkbGVDb25uc1Blckhvc3QpCisJCWFzc2VydC5FcXVhbCh0LCB0aW1lLkR1cmF0aW9uKDApLCBkcmMuY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5pZGxlQ29ublRpbWVvdXQpCisJCWFzc2VydC5FcXVhbCh0LCB0aW1lLkR1cmF0aW9uKDApLCBkcmMuY2xpZW50LmNvbm5lY3Rpb25TZXR0aW5ncy5rZWVwQWxpdmVJbnRlcnZhbCkKKworCQkvLyBWZXJpZnkgZGVmYXVsdHMgd2VyZSBhcHBsaWVkIHRvIGh0dHAuVHJhbnNwb3J0CisJCXRyYW5zcG9ydCA6PSBkcmMuY2xpZW50LmNvbm4uaHR0cENsaWVudC5UcmFuc3BvcnQuKCpodHRwLlRyYW5zcG9ydCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDEyOCwgdHJhbnNwb3J0Lk1heENvbm5zUGVySG9zdCkKKwkJYXNzZXJ0LkVxdWFsKHQsIDgsIHRyYW5zcG9ydC5NYXhJZGxlQ29ubnNQZXJIb3N0KQorCQlhc3NlcnQuRXF1YWwodCwgMTgwKnRpbWUuU2Vjb25kLCB0cmFuc3BvcnQuSWRsZUNvbm5UaW1lb3V0KQorCX0pCit9CisKKy8vIFRlc3RDb25uZWN0aW9uV2l0aE1vY2tTZXJ2ZXJfQmFzaWNBdXRoIHZlcmlmaWVzIHRoYXQgQmFzaWNBdXRoIGludGVyY2VwdG9yIHNldHMgdGhlIGNvcnJlY3QKKy8vIEF1dGhvcml6YXRpb24gaGVhZGVyIGFuZCB0aGUgYm9keSBpcyBzdGlsbCB2YWxpZCBzZXJpYWxpemVkIGJ5dGVzLgorZnVuYyBUZXN0Q29ubmVjdGlvbldpdGhNb2NrU2VydmVyX0Jhc2ljQXV0aCh0ICp0ZXN0aW5nLlQpIHsKKwl2YXIgY2FwdHVyZWRBdXRoSGVhZGVyIHN0cmluZworCXZhciBjYXB0dXJlZEJvZHkgW11ieXRlCisKKwlzZXJ2ZXIgOj0gaHR0cHRlc3QuTmV3U2VydmVyKGh0dHAuSGFuZGxlckZ1bmMoZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkgeworCQljYXB0dXJlZEF1dGhIZWFkZXIgPSByLkhlYWRlci5HZXQoIkF1dGhvcml6YXRpb24iKQorCQlib2R5LCBlcnIgOj0gaW8uUmVhZEFsbChyLkJvZHkpCisJCWlmIGVyciA9PSBuaWwgeworCQkJY2FwdHVyZWRCb2R5ID0gYm9keQorCQl9CisJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKKwl9KSkKKwlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKwljb25uLkFkZEludGVyY2VwdG9yKEJhc2ljQXV0aCgidGVzdHVzZXIiLCAidGVzdHBhc3MiKSkKKworCXJzLCBlcnIgOj0gY29ubi5zdWJtaXQoJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCV8sIF8gPSBycy5BbGwoKSAvLyBkcmFpbgorCisJLy8gQmFzaWNBdXRoIHNob3VsZCBzZXQgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2l0aCBiYXNlNjQoInRlc3R1c2VyOnRlc3RwYXNzIikgPSAiZEdWemRIVnpaWEk2ZEdWemRIQmhjM009IgorCWFzc2VydC5FcXVhbCh0LCAiQmFzaWMgZEdWemRIVnpaWEk2ZEdWemRIQmhjM009IiwgY2FwdHVyZWRBdXRoSGVhZGVyLAorCQkiQXV0aG9yaXphdGlvbiBoZWFkZXIgc2hvdWxkIGJlIEJhc2ljIGJhc2U2NCh0ZXN0dXNlcjp0ZXN0cGFzcykiKQorCisJLy8gQm9keSBzaG91bGQgc3RpbGwgYmUgdmFsaWQgc2VyaWFsaXplZCBieXRlcworCWFzc2VydC5Ob3RFbXB0eSh0LCBjYXB0dXJlZEJvZHksICJzZXJpYWxpemVkIGJvZHkgc2hvdWxkIGJlIG5vbi1lbXB0eSB3aXRoIEJhc2ljQXV0aCIpCisJYXNzZXJ0LkVxdWFsKHQsIGJ5dGUoMHg4NCksIGNhcHR1cmVkQm9keVswXSwKKwkJImJvZHkgc2hvdWxkIHN0YXJ0IHdpdGggR3JhcGhCaW5hcnkgdmVyc2lvbiBieXRlIDB4ODQiKQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvY3VjdW1iZXIvY3VjdW1iZXJTdGVwc190ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvY3VjdW1iZXIvY3VjdW1iZXJTdGVwc190ZXN0LmdvCmluZGV4IGVkZmZjZTEuLjg3ZDFlY2QgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2N1Y3VtYmVyL2N1Y3VtYmVyU3RlcHNfdGVzdC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9jdWN1bWJlci9jdWN1bWJlclN0ZXBzX3Rlc3QuZ28KQEAgLTM0LDcgKzM0LDcgQEAKIAkidGVzdGluZyIKIAkidGltZSIKIAotCWdyZW1saW5nbyAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMvZHJpdmVyIgorCWdyZW1saW5nbyAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjQvZHJpdmVyIgogCSJnaXRodWIuY29tL2N1Y3VtYmVyL2dvZG9nIgogCSJnaXRodWIuY29tL2dvb2dsZS91dWlkIgogKQpAQCAtNTYsNiArNTYsNyBAQAogCQlyZWdleHAuTXVzdENvbXBpbGUoYF5kXFsoLiopXVwuW25dJGApOiAgICAgdG9CaWdJbnQsCiAJCXJlZ2V4cC5NdXN0Q29tcGlsZShgXmRcWyguKildXC5baV0kYCk6ICAgICB0b0ludDMyLAogCQlyZWdleHAuTXVzdENvbXBpbGUoYF52cFxbKC4rKV0kYCk6ICAgICAgICAgdG9WZXJ0ZXhQcm9wZXJ0eSwKKwkJcmVnZXhwLk11c3RDb21waWxlKGBecHJvcFxbKC4rKV0kYCk6ICAgICAgIHRvUHJvcGVydHksCiAJCXJlZ2V4cC5NdXN0Q29tcGlsZShgXnZcWyguKyldJGApOiAgICAgICAgICB0b1ZlcnRleCwKIAkJcmVnZXhwLk11c3RDb21waWxlKGBedlxbKC4rKV1cLmlkJGApOiAgICAgIHRvVmVydGV4SWQsCiAJCXJlZ2V4cC5NdXN0Q29tcGlsZShgXmVcWyguKyldJGApOiAgICAgICAgICB0b0VkZ2UsCkBAIC0xNzQsNiArMTc1LDE0IEBACiAJcmV0dXJuIGludDMyKHZhbCkKIH0KIAorLy8gUGFyc2UgcHJvcGVydHkgYXMga2V5L3ZhbHVlIHBhaXIuCitmdW5jIHRvUHJvcGVydHkoc3RyaW5nVmFsLCBncmFwaE5hbWUgc3RyaW5nKSBpbnRlcmZhY2V7fSB7CisJY29tbWFJZHggOj0gc3RyaW5ncy5JbmRleChzdHJpbmdWYWwsICIsIikKKwlrZXkgOj0gc3RyaW5nVmFsWzpjb21tYUlkeF0KKwl2YWx1ZSA6PSBwYXJzZVZhbHVlKHN0cmluZ1ZhbFtjb21tYUlkeCsxOl0sIGdyYXBoTmFtZSkKKwlyZXR1cm4gJmdyZW1saW5nby5Qcm9wZXJ0eXtLZXk6IGtleSwgVmFsdWU6IHZhbHVlfQorfQorCiAvLyBQYXJzZSB2ZXJ0ZXggcHJvcGVydHkuCiBmdW5jIHRvVmVydGV4UHJvcGVydHkobmFtZSwgZ3JhcGhOYW1lIHN0cmluZykgaW50ZXJmYWNle30gewogCWlmIHZwLCBvayA6PSB0Zy5nZXREYXRhR3JhcGhGcm9tTWFwKGdyYXBoTmFtZSkudmVydGV4UHJvcGVydGllc1tuYW1lXTsgb2sgewpAQCAtNDU3LDcgKzQ2Niw3IEBACiBmdW5jICh0ZyAqdGlua2VyUG9wR3JhcGgpIGNob29zZUdyYXBoKGdyYXBoTmFtZSBzdHJpbmcpIGVycm9yIHsKIAl0Zy5ncmFwaE5hbWUgPSBncmFwaE5hbWUKIAlkYXRhIDo9IHRnLmdyYXBoRGF0YU1hcFtncmFwaE5hbWVdCi0JdGcuZyA9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChkYXRhLmNvbm5lY3Rpb24pCisJdGcuZyA9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChkYXRhLmNvbm5lY3Rpb24pLldpdGgoImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpCiAJaWYgZ3JhcGhOYW1lID09ICJlbXB0eSIgewogCQllcnIgOj0gdGcuY2xlYW5FbXB0eURhdGFHcmFwaCh0Zy5nKQogCQlpZiBlcnIgIT0gbmlsIHsKQEAgLTkwOSwxOSArOTE4LDE5IEBACiAJfQogCXN3aXRjaCBjb21wYXJpc29uIHsKIAljYXNlICJjb250YWluaW5nIjoKLQkJaWYgc3RyaW5ncy5Db250YWlucyh0Zy5lcnJvclt0cnVlXSwgZXhwZWN0ZWRNZXNzYWdlKSB7CisJCWlmIHN0cmluZ3MuQ29udGFpbnMoc3RyaW5ncy5Ub1VwcGVyKHRnLmVycm9yW3RydWVdKSwgc3RyaW5ncy5Ub1VwcGVyKGV4cGVjdGVkTWVzc2FnZSkpIHsKIAkJCXJldHVybiBuaWwKIAkJfSBlbHNlIHsKIAkJCXJldHVybiBmbXQuRXJyb3JmKCJ0cmF2ZXJzYWwgZXJyb3IgbWVzc2FnZSBtdXN0IGNvbnRhaW4gJXMiLCBleHBlY3RlZE1lc3NhZ2UpCiAJCX0KIAljYXNlICJzdGFydGluZyI6Ci0JCWlmIHN0cmluZ3MuQ29udGFpbnModGcuZXJyb3JbdHJ1ZV0sIGV4cGVjdGVkTWVzc2FnZSkgeworCQlpZiBzdHJpbmdzLkNvbnRhaW5zKHN0cmluZ3MuVG9VcHBlcih0Zy5lcnJvclt0cnVlXSksIHN0cmluZ3MuVG9VcHBlcihleHBlY3RlZE1lc3NhZ2UpKSB7CiAJCQlyZXR1cm4gbmlsCiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gZm10LkVycm9yZigidHJhdmVyc2FsIGVycm9yIG1lc3NhZ2UgbXVzdCBjb250YWluICVzIiwgZXhwZWN0ZWRNZXNzYWdlKQogCQl9CiAJY2FzZSAiZW5kaW5nIjoKLQkJaWYgc3RyaW5ncy5Db250YWlucyh0Zy5lcnJvclt0cnVlXSwgZXhwZWN0ZWRNZXNzYWdlKSB7CisJCWlmIHN0cmluZ3MuQ29udGFpbnMoc3RyaW5ncy5Ub1VwcGVyKHRnLmVycm9yW3RydWVdKSwgc3RyaW5ncy5Ub1VwcGVyKGV4cGVjdGVkTWVzc2FnZSkpIHsKIAkJCXJldHVybiBuaWwKIAkJfSBlbHNlIHsKIAkJCXJldHVybiBmbXQuRXJyb3JmKCJ0cmF2ZXJzYWwgZXJyb3IgbWVzc2FnZSBtdXN0IGNvbnRhaW4gJXMiLCBleHBlY3RlZE1lc3NhZ2UpCkBAIC0xMDA1LDcgKzEwMTQsNyBAQAogCQlUZXN0U3VpdGVJbml0aWFsaXplcjogSW5pdGlhbGl6ZVRlc3RTdWl0ZSwKIAkJU2NlbmFyaW9Jbml0aWFsaXplcjogIEluaXRpYWxpemVTY2VuYXJpbywKIAkJT3B0aW9uczogJmdvZG9nLk9wdGlvbnN7Ci0JCQlUYWdzOiAgICAgIn5AR3JhcGhDb21wdXRlck9ubHkgJiYgfkBBbGxvd051bGxQcm9wZXJ0eVZhbHVlcyAmJiB+QFN0ZXBTdWJncmFwaCAmJiB+QFN0ZXBUcmVlIiwKKwkJCVRhZ3M6ICAgICAifkBHcmFwaENvbXB1dGVyT25seSAmJiB+QEFsbG93TnVsbFByb3BlcnR5VmFsdWVzICYmIH5AU3RlcFN1YmdyYXBoICYmIH5AU3RlcFRyZWUgJiYgfkBTdGVwV3JpdGUiLAogCQkJRm9ybWF0OiAgICJwcmV0dHkiLAogCQkJUGF0aHM6ICAgIFtdc3RyaW5ne2dldEVudk9yRGVmYXVsdFN0cmluZygiQ1VDVU1CRVJfRkVBVFVSRV9GT0xERVIiLCAiLi4vLi4vLi4vZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMiKX0sCiAJCQlUZXN0aW5nVDogdCwgLy8gVGVzdGluZyBpbnN0YW5jZSB0aGF0IHdpbGwgcnVuIHN1YnRlc3RzLgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvY3VjdW1iZXIvY3VjdW1iZXJXb3JsZC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2N1Y3VtYmVyL2N1Y3VtYmVyV29ybGQuZ28KaW5kZXggOWZlNGQwNC4uMjA2MDk0NSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvY3VjdW1iZXIvY3VjdW1iZXJXb3JsZC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9jdWN1bWJlci9jdWN1bWJlcldvcmxkLmdvCkBAIC0yMSwxMSArMjEsMTIgQEAKIAogaW1wb3J0ICgKIAkiZm10IgotCWdyZW1saW5nbyAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMvZHJpdmVyIgotCSJnaXRodWIuY29tL2N1Y3VtYmVyL2dvZG9nIgogCSJvcyIKIAkicmVmbGVjdCIKIAkic3RyY29udiIKKworCWdyZW1saW5nbyAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjQvZHJpdmVyIgorCSJnaXRodWIuY29tL2N1Y3VtYmVyL2dvZG9nIgogKQogCiB0eXBlIEN1Y3VtYmVyV29ybGQgc3RydWN0IHsKQEAgLTY5LDcgKzcwLDcgQEAKIH0KIAogZnVuYyBzY2VuYXJpb1VybCgpIHN0cmluZyB7Ci0JcmV0dXJuIGdldEVudk9yRGVmYXVsdFN0cmluZygiR1JFTUxJTl9TRVJWRVJfVVJMIiwgIndzOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW4iKQorCXJldHVybiBnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fU0VSVkVSX1VSTCIsICJodHRwOi8vbG9jYWxob3N0OjQ1OTQwL2dyZW1saW4iKQogfQogCiBmdW5jIE5ld0N1Y3VtYmVyV29ybGQoKSAqQ3VjdW1iZXJXb3JsZCB7CkBAIC0xMDgsNyArMTA5LDcgQEAKIAkJCWlmIGVyciAhPSBuaWwgewogCQkJCXBhbmljKGZtdC5TcHJpbnRmKCJGYWlsZWQgdG8gY3JlYXRlIGNvbm5lY3Rpb24gJyV2JyIsIGVycikpCiAJCQl9Ci0JCQlnIDo9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChjb25uZWN0aW9uKQorCQkJZyA6PSBncmVtbGluZ28uVHJhdmVyc2FsXygpLldpdGgoY29ubmVjdGlvbikuV2l0aCgibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1sYW5nIikKIAkJCXQuZ3JhcGhEYXRhTWFwW25hbWVdID0gJkRhdGFHcmFwaHsKIAkJCQluYW1lOiAgICAgICAgICAgICBuYW1lLAogCQkJCWNvbm5lY3Rpb246ICAgICAgIGNvbm5lY3Rpb24sCkBAIC0xMjksNyArMTMwLDcgQEAKIAogZnVuYyAodCAqQ3VjdW1iZXJXb3JsZCkgcmVsb2FkRW1wdHlEYXRhKCkgewogCWdyYXBoRGF0YSA6PSB0LmdldERhdGFHcmFwaEZyb21NYXAoImVtcHR5IikKLQlnIDo9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChncmFwaERhdGEuY29ubmVjdGlvbikKKwlnIDo9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChncmFwaERhdGEuY29ubmVjdGlvbikuV2l0aCgibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1sYW5nIikKIAlncmFwaERhdGEudmVydGljZXMgPSBnZXRWZXJ0aWNlcyhnKQogCWdyYXBoRGF0YS5lZGdlcyA9IGdldEVkZ2VzKGcpCiB9CkBAIC0xNjQsOCArMTY1LDExIEBACiAKIGZ1bmMgZ2V0RWRnZXMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlKSBtYXBbc3RyaW5nXSpncmVtbGluZ28uRWRnZSB7CiAJZWRnZU1hcCA6PSBtYWtlKG1hcFtzdHJpbmddKmdyZW1saW5nby5FZGdlKQotCXJlc0UsIGVyciA6PSBnLkUoKS5Hcm91cCgpLkJ5KGdyZW1saW5nby5UX18uUHJvamVjdCgibyIsICJsIiwgImkiKS4KLQkJQnkoZ3JlbWxpbmdvLlRfXy5PdXRWKCkuVmFsdWVzKCJuYW1lIikpLkJ5KGdyZW1saW5nby5UX18uTGFiZWwoKSkuQnkoZ3JlbWxpbmdvLlRfXy5JblYoKS5WYWx1ZXMoIm5hbWUiKSkpLgorCXJlc0UsIGVyciA6PSBnLkUoKS5Hcm91cCgpLgorCQlCeShncmVtbGluZ28uVF9fLlByb2plY3QoIm8iLCAibCIsICJpIikuCisJCQlCeShncmVtbGluZ28uVF9fLk91dFYoKS5WYWx1ZXMoIm5hbWUiKSkuCisJCQlCeShncmVtbGluZ28uVF9fLkxhYmVsKCkpLgorCQkJQnkoZ3JlbWxpbmdvLlRfXy5JblYoKS5WYWx1ZXMoIm5hbWUiKSkpLgogCQlCeShncmVtbGluZ28uVF9fLlRhaWwoKSkuTmV4dCgpCiAJaWYgZXJyICE9IG5pbCB7CiAJCXJldHVybiBuaWwKQEAgLTE5MCwzOCArMTk0LDQ0IEBACiB9CiAKIGZ1bmMgZ2V0VmVydGV4UHJvcGVydGllcyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIG1hcFtzdHJpbmddKmdyZW1saW5nby5WZXJ0ZXhQcm9wZXJ0eSB7Ci0JdmVydGV4UHJvcGVydHlNYXAgOj0gbWFrZShtYXBbc3RyaW5nXSpncmVtbGluZ28uVmVydGV4UHJvcGVydHkpCi0JcmVzLCBlcnIgOj0gZy5WKCkuUHJvcGVydGllcygpLkdyb3VwKCkuQnkoJmdyZW1saW5nby5MYW1iZGF7Ci0JCVNjcmlwdDogInsgaXQgLT4gXG4iICsKLQkJCSIgIGRlZiB2YWwgPSBpdC52YWx1ZSgpXG4iICsKLQkJCSIgIGlmICh2YWwgaW5zdGFuY2VvZiBJbnRlZ2VyKVxuIiArCi0JCQkiICAgIHZhbCA9ICdkWycgKyB2YWwgKyAnXS5pJ1xuIiArCi0JCQkiICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBGbG9hdClcbiIgKwotCQkJIiAgICB2YWwgPSAnZFsnICsgdmFsICsgJ10uZidcbiIgKwotCQkJIiAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgRG91YmxlKVxuIiArCi0JCQkiICAgIHZhbCA9ICdkWycgKyB2YWwgKyAnXS5kJ1xuIiArCi0JCQkiICByZXR1cm4gaXQuZWxlbWVudCgpLnZhbHVlKCduYW1lJykgKyAnLScgKyBpdC5rZXkoKSArICctPicgKyB2YWxcbiIgKwotCQkJIn0iLAotCQlMYW5ndWFnZTogIiIsCi0JfSkuQnkoZ3JlbWxpbmdvLlRfXy5UYWlsKCkpLk5leHQoKQorCXZlcnRleFByb3BzTWFwIDo9IG1ha2UobWFwW3N0cmluZ10qZ3JlbWxpbmdvLlZlcnRleFByb3BlcnR5KQorCXJlcywgZXJyIDo9IGcuVigpLlByb3BlcnRpZXMoKS5Hcm91cCgpLgorCQlCeShncmVtbGluZ28uVF9fLlByb2plY3QoIm4iLCAiayIsICJ2IikuCisJCQlCeShncmVtbGluZ28uVF9fLkVsZW1lbnQoKS5WYWx1ZXMoIm5hbWUiKSkuCisJCQlCeShncmVtbGluZ28uVF9fLktleSgpKS4KKwkJCUJ5KGdyZW1saW5nby5UX18uVmFsdWUoKSkpLgorCQlCeShncmVtbGluZ28uVF9fLlRhaWwoKSkuTmV4dCgpCiAJaWYgcmVzID09IG5pbCB7CiAJCXJldHVybiBuaWwKIAl9CiAJaWYgZXJyICE9IG5pbCB7CiAJCXJldHVybiBuaWwKIAl9Ci0JdiA6PSByZWZsZWN0LlZhbHVlT2YocmVzLkdldEludGVyZmFjZSgpKQotCWlmIHYuS2luZCgpICE9IHJlZmxlY3QuTWFwIHsKLQkJZm10LlByaW50ZigiRXhwZWN0aW5nIHRvIGdldCBhIG1hcCBhcyBhIHJlc3VsdCwgZ290ICV2IGluc3RlYWQuIiwgdi5LaW5kKCkpCisJdmFsTWFwIDo9IHJlZmxlY3QuVmFsdWVPZihyZXMuR2V0SW50ZXJmYWNlKCkpCisJaWYgdmFsTWFwLktpbmQoKSAhPSByZWZsZWN0Lk1hcCB7CisJCWZtdC5QcmludGYoIkV4cGVjdGluZyB0byBnZXQgYSBtYXAgYXMgYSByZXN1bHQsIGdvdCAldiBpbnN0ZWFkLiIsIHZhbE1hcC5LaW5kKCkpCiAJCXJldHVybiBuaWwKIAl9Ci0Ja2V5cyA6PSB2Lk1hcEtleXMoKQorCWtleXMgOj0gdmFsTWFwLk1hcEtleXMoKQogCWZvciBfLCBrIDo9IHJhbmdlIGtleXMgewotCQljb252S2V5IDo9IGsuQ29udmVydCh2LlR5cGUoKS5LZXkoKSkKLQkJdmFsIDo9IHYuTWFwSW5kZXgoY29udktleSkKLQkJdmVydGV4UHJvcGVydHlNYXBbay5JbnRlcmZhY2UoKS4oc3RyaW5nKV0gPSB2YWwuSW50ZXJmYWNlKCkuKCpncmVtbGluZ28uVmVydGV4UHJvcGVydHkpCisJCWNvbnZLZXkgOj0gay5Db252ZXJ0KHZhbE1hcC5UeXBlKCkuS2V5KCkpCisJCXZhbCA6PSB2YWxNYXAuTWFwSW5kZXgoY29udktleSkKKwkJa2V5TWFwIDo9IHJlZmxlY3QuVmFsdWVPZihrLkludGVyZmFjZSgpKS5FbGVtKCkuSW50ZXJmYWNlKCkuKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSkKKwkJdmVydGV4UHJvcHNNYXBbZ2V0VlBLZXkoa2V5TWFwKV0gPSB2YWwuSW50ZXJmYWNlKCkuKCpncmVtbGluZ28uVmVydGV4UHJvcGVydHkpCiAJfQotCXJldHVybiB2ZXJ0ZXhQcm9wZXJ0eU1hcAorCXJldHVybiB2ZXJ0ZXhQcm9wc01hcAorfQorCitmdW5jIGdldFZQS2V5KHZwS2V5TWFwIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSkgc3RyaW5nIHsKKwlrIDo9IHZwS2V5TWFwWyJrIl0KKwl2IDo9IHZwS2V5TWFwWyJ2Il0KKwlpZiBrID09ICJ3ZWlnaHQiIHsKKwkJdiA9IGZtdC5TcHJpbnQoImRbIiwgdiwgIl0uZCIpCisJfSBlbHNlIGlmIGsgPT0gImFnZSIgfHwgayA9PSAic2luY2UiIHx8IGsgPT0gInNraWxsIiB7CisJCXYgPSBmbXQuU3ByaW50KCJkWyIsIHYsICJdLmkiKQorCX0KKwkvLyBGb3JtYXQgYXMgbi1rLT52CisJcmV0dXJuIGZtdC5TcHJpbnQodnBLZXlNYXBbIm4iXSwgIi0iLCBrLCAiLT4iLCB2KQogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaXNvbGF0ZSBjb25uZWN0aW9uIHByb2JsZW1zIHRvIGVhY2ggc2NlbmFyaW8sIGFuZCB1c2VkIGluIHRoZSBCZWZvcmUgY29udGV4dCBob29rIHRvIHByZXZlbnQKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2N1Y3VtYmVyL2dyZW1saW4uZ28gYi9ncmVtbGluLWdvL2RyaXZlci9jdWN1bWJlci9ncmVtbGluLmdvCmluZGV4IDQzZDU2MzIuLmQ0MmMwODggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2N1Y3VtYmVyL2dyZW1saW4uZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvY3VjdW1iZXIvZ3JlbWxpbi5nbwpAQCAtMjYsNyArMjYsNyBAQAogCiBpbXBvcnQgKAogCSAiZXJyb3JzIgotCSAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMvZHJpdmVyIgorCSAiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjQvZHJpdmVyIgogCSAiZ2l0aHViLmNvbS9nb29nbGUvdXVpZCIKIAkgIm1hdGgiCiAJICJ0aW1lIgpAQCAtMjA3LDExICsyMDcsMTEgQEAKICAgICAiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuQWRkVigiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCB0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoIlVUQyswMDowMCIsIDApKSl9LCBmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuVmFsdWVzKCJkYXRldGltZSIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKX19LCAKICAgICAiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYZGF0ZUFkZFhEVF9kYXlYMVhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoImV2ZW50IikuUHJvcGVydHkoImRhdGV0aW1lIiwgdGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiZGF0ZXRpbWUiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkuUHJvamVjdCgib3JpZ2luYWwiLCAibmV4dERheSIpLkJ5KGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuQnkoZ3JlbWxpbmdvLlRfXy5EYXRlQWRkKGdyZW1saW5nby5EVC5EYXksIDEpKX19LCAKICAgICAiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfZGF0ZURpZmZYZGF0ZXRpbWVYMjAyM18wOF8xMFhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoImV2ZW50IikuUHJvcGVydHkoImRhdGV0aW1lIiwgdGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiZGF0ZXRpbWUiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkuRGF0ZURpZmYodGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDMwLCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpKX19LCAKLSAgICAiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfd2hlcmVYaXNYZ3RYZGF0ZXRpbWVYMjAyMF8wMV8wMVhYWFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuQWRkVigiZXZlbnQiKS5Qcm9wZXJ0eSgiZGF0ZXRpbWUiLCB0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoIlVUQyswMDowMCIsIDApKSl9LCBmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuVmFsdWVzKCJkYXRldGltZSIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKS5XaGVyZShncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KHRpbWUuRGF0ZSgyMDIwLCAxLCAxLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpKSkpfX0sIAorICAgICJnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF93aGVyZVhpc1hndFhkYXRldGltZVgyMDIwXzAxXzAxWFhYWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5BZGRWKCJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAxMiwgMzQsIDU2LCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpKX0sIGZ1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZXMoImRhdGV0aW1lIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5EYXRlVGltZSkpLldoZXJlKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QodGltZS5EYXRlKDIwMjAsIDEsIDEsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpKSl9fSwgCiAgICAgImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2Nob29zZVhpc1hlcVhkYXRldGltZVgyMDIzXzA4XzA4WFhYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoImV2ZW50IikuUHJvcGVydHkoImRhdGV0aW1lIiwgdGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiZGF0ZXRpbWUiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkuQ2hvb3NlKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEodGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudCgibWF0Y2giKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudCgibm9NYXRjaCIpKX19LCAKICAgICAiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfbG9jYWxYYWdncmVnYXRlWGFYX2NhcFhhWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5BZGRWKCJldmVudCIpLlByb3BlcnR5KCJkYXRldGltZSIsIHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpKX0sIGZ1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZXMoImRhdGV0aW1lIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5EYXRlVGltZSkpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKCJhIikpLkNhcCgiYSIpfX0sIAogICAgICJnX2luamVjdFhkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfYWdncmVnYXRlWGFYX2NhcFhhWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKS5BZ2dyZWdhdGUoImEiKS5DYXAoImEiKX19LCAKLSAgICAiZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2dyb3VwQ291bnQiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkuR3JvdXBDb3VudCgpfX0sIAorICAgICJnX2luamVjdFhkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfZ3JvdXBDb3VudCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDgsIDgsIDEyLCAzNCwgNTYsIDAsIHRpbWUuRml4ZWRab25lKCJVVEMrMDA6MDAiLCAwKSkpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKS5Hcm91cENvdW50KCl9fSwgCiAgICAgImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAxLjUpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiZG91YmxlIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5Eb3VibGUpKX19LCAKICAgICAiZ19FX3ZhbHVlc1h3ZWlnaHRYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5FKCkuVmFsdWVzKCJ3ZWlnaHQiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkpfX0sIAogICAgICJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21hdGhYY2VpbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuQWRkVigiZGF0YSIpLlByb3BlcnR5KCJkb3VibGUiLCAyLjcpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiZG91YmxlIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5Eb3VibGUpKS5NYXRoKCJjZWlsIF8iKX19LCAKQEAgLTQ0NCw2ICs0NDQsNyBAQAogICAgICJnX1ZfaGFzSWRYZXFYbnVsbFhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5IYXNJZChncmVtbGluZ28uUC5FcShuaWwpKX19LCAKICAgICAiZ19WX2hhc0lkWDJfbnVsbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkhhc0lkKHBbInZpZDIiXSwgbmlsKX19LCAKICAgICAiZ19WX2hhc0lkWG1hcmtvdmFyX3ZhZGFzdmFyWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuSGFzSWQocFsidmlkMSJdLCBwWyJ2aWQyIl0pfX0sIAorICAgICJnX1ZfaGFzSWRYbWFya292YXJfdmFkYXN2YXJfcGV0ZXJ2YXJYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5IYXNJZChwWyJ2aWQxIl0sIHBbInZpZDIiXSl9fSwgCiAgICAgImdfVl9oYXNJZFgyQXNTdHJpbmdfbnVsbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkhhc0lkKHBbInZpZDIiXSwgbmlsKX19LCAKICAgICAiZ19WX2hhc0lkWDFBc1N0cmluZ18yQXNTdHJpbmdfbnVsbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkhhc0lkKHBbInZpZDEiXSwgcFsidmlkMiJdLCBuaWwpfX0sIAogICAgICJnX1ZfaGFzSWRYbnVsbF8yWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuSGFzSWQobmlsLCBwWyJ2aWQyIl0pfX0sIApAQCAtMTAzNSw3ICsxMDM2LDcgQEAKICAgICAiZ19WX3ZhbHVlc1huYW1lWF9jb25qb2luWDFYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZXMoIm5hbWUiKS5Db25qb2luKCIxIil9fSwgCiAgICAgImdfVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRfY29uam9pblhfWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuVmFsdWVzKCJub25leGlzdGFudCIpLkZvbGQoKS5Db25qb2luKCI7Iil9fSwgCiAgICAgImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9jb25qb2luWF9YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZXMoIm5hbWUiKS5PcmRlcigpLkZvbGQoKS5Db25qb2luKCJfIil9fSwgCi0gICAgImdfVl92YWx1ZXNYYWdlWF9vcmRlcl9mb2xkX2NvbmpvaW5YX1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiYWdlIikuT3JkZXIoKS5Gb2xkKCkuQ29uam9pbigiOyIpfX0sIAorICAgICJnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfZm9sZF9jb25qb2luWHNlbWljb2xvblgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygiYWdlIikuT3JkZXIoKS5Gb2xkKCkuQ29uam9pbigiOyIpfX0sIAogICAgICJnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX2NvbmpvaW5YTUFSS09YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5PdXQoKS5QYXRoKCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoIm5hbWUiKS5Ub1VwcGVyKCkpLkNvbmpvaW4oIk1BUktPIil9fSwgCiAgICAgImdfaW5qZWN0WG1hcmtvWF9jb25qb2luWF9YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdChbXWludGVyZmFjZXt9eyJtYXJrbyJ9KS5Db25qb2luKCItIil9fSwgCiAgICAgImdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWF9jb25qb2luWDFYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZU1hcCgibG9jYXRpb24iKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuQ29uam9pbigiMSIpfX0sIApAQCAtMTExNiw5ICsxMTE3LDggQEAKICAgICAiZ19FIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUoKX19LCAKICAgICAiZ19FWDExWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5FKHBbImVpZDExIl0pfX0sIAogICAgICJnX0VYMTFBc1N0cmluZ1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRShwWyJlaWQxMSJdKX19LCAKLSAgICAiZ19FWGUxMVgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRShwWyJlMTEiXSl9fSwgCi0gICAgImdfRVhlN19lMTFYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUocFsiZTciXSwgcFsiZTExIl0pfX0sIAotICAgICJnX0VYbGlzdFhlN19lMTFYWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5FKHBbInh4MSJdKX19LCAKKyAgICAiZ19FWGVpZDdfZWlkMTFYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUocFsiZWlkNyJdLCBwWyJlaWQxMSJdKX19LCAKKyAgICAiZ19FWGxpc3RYZWlkN19laWQxMVhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUocFsieHgxIl0pfX0sIAogICAgICJnX0VYbnVsbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRShuaWwpfX0sIAogICAgICJnX0VYbGlzdFhudWxsWFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRShwWyJ4eDEiXSl9fSwgCiAgICAgImdfRVgxMV9udWxsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5FKHBbImVpZDExIl0sIG5pbCl9fSwgCkBAIC0xMTM5LDYgKzExMzksNyBAQAogICAgICJnX1ZYMVhfb3V0RVhrbm93c19jcmVhdGVkWF9pblYiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVihwWyJ2aWQxIl0pLk91dEUoImtub3dzIiwgImNyZWF0ZWQiKS5JblYoKX19LCAKICAgICAiZ19WWDFYX291dEVYa25vd3NYX2JvdGhWIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYocFsidmlkMSJdKS5PdXRFKCJrbm93cyIpLkJvdGhWKCl9fSwgCiAgICAgImdfVlgxWF9vdXRFWGtub3dzWF9ib3RoVl9uYW1lIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYocFsidmlkMSJdKS5PdXRFKCJrbm93cyIpLkJvdGhWKCkuVmFsdWVzKCJuYW1lIil9fSwgCisgICAgImdfVl90b0VYb3V0X2tub3dzdmFyWF92YWx1ZXNYd2VpZ2h0WCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuVG9FKGdyZW1saW5nby5EaXJlY3Rpb24uT3V0LCBwWyJ4eDEiXSkuVmFsdWVzKCJ3ZWlnaHQiKX19LCAKICAgICAiZ19WWDFYX3Byb3BlcnRpZXNfZWxlbWVudCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKHBbInZpZDIiXSkuUHJvcGVydGllcygpLkVsZW1lbnQoKS5MaW1pdCgxKX19LCAKICAgICAiZ19WX3Byb3BlcnRpZXNfZWxlbWVudCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuUHJvcGVydGllcygpLkVsZW1lbnQoKX19LCAKICAgICAiZ19WX3Byb3BlcnRpZXNYYWdlWF9lbGVtZW50Ijoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5Qcm9wZXJ0aWVzKCJhZ2UiKS5FbGVtZW50KCl9fSwgCkBAIC0xNTM2LDYgKzE1MzcsMTAgQEAKICAgICAiZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYYWdlX25hbWVYX3ZhbHVlIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5IYXMoImFnZSIpLlByb3BlcnRpZXMoImFnZSIsICJuYW1lIikuVmFsdWUoKX19LCAKICAgICAiZ19WX3Byb3BlcnRpZXNYbmFtZV9hZ2VfbnVsbFhfdmFsdWUiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlByb3BlcnRpZXMoIm5hbWUiLCAiYWdlIiwgbmlsKS5WYWx1ZSgpfX0sIAogICAgICJnX1ZfdmFsdWVzWG5hbWVfYWdlX251bGxYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZXMoIm5hbWUiLCAiYWdlIiwgbmlsKX19LCAKKyAgICAiZ19FX3Byb3BlcnRpZXNYd2VpZ2h0WCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5FKCkuUHJvcGVydGllcygid2VpZ2h0Iil9fSwgCisgICAgImdfRV9wcm9wZXJ0aWVzIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIndlaWdodCIsIDAuNSkuUHJvcGVydHkoInNpbmNlIiwgaW50MzIoMjAyMCkpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRSgpLlByb3BlcnRpZXMoKX19LCAKKyAgICAiZ19FX3Byb3BlcnRpZXNYc2luY2VYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIndlaWdodCIsIDAuNSkuUHJvcGVydHkoInNpbmNlIiwgaW50MzIoMjAyMCkpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRSgpLlByb3BlcnRpZXMoInNpbmNlIil9fSwgCisgICAgImdfRV9wcm9wZXJ0aWVzX211bHRpX2VkZ2VzIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJib2IiKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIndlaWdodCIsIDAuNSkuUHJvcGVydHkoInNpbmNlIiwgaW50MzIoMjAyMCkpLkFkZEUoImxpa2VzIikuRnJvbSgiYSIpLlRvKCJiIikuUHJvcGVydHkoIndlaWdodCIsIDEuMCkuUHJvcGVydHkoInRhZyIsICJmcmllbmQiKX0sIGZ1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUoKS5Qcm9wZXJ0aWVzKCl9fSwgCiAgICAgImdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3JUcmltIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgiZmVhdHVyZSAgIiwgIm9uZSB0ZXN0ICIsIG5pbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCIpLlJUcmltKCl9fSwgCiAgICAgImdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3JUcmltWGxvY2FsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoW11pbnRlcmZhY2V7fXsiICBmZWF0dXJlICAiLCAiIG9uZSB0ZXN0ICIsIG5pbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCJ9KS5SVHJpbShncmVtbGluZ28uU2NvcGUuTG9jYWwpfX0sIAogICAgICJnX2luamVjdFhfX2ZlYXR1cmVfX1hfclRyaW0iOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KCIgIGZlYXR1cmUgICIpLlJUcmltKCl9fSwgCkBAIC0xNjI2LDcgKzE2MzEsNyBAQAogICAgICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FzWGFYX3NlbGVjdFhhWF9ieVhhZ2VYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQXMoImEiKS5TZWxlY3QoImEiKS5CeSgiYWdlIil9fSwgCiAgICAgImdfd2l0aFNpZGVFZmZlY3RYa19udWxsWF9pbmplY3RYeFhfc2VsZWN0WGtYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLldpdGhTaWRlRWZmZWN0KCJrIiwgbmlsKS5JbmplY3QoIngiKS5TZWxlY3QoImsiKX19LCAKICAgICAiZ19WX291dF9pbl9zZWxlY3RYYWxsX2FfYV9hWF9ieVh1bmZvbGRfbmFtZV9mb2xkWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5BZGRWKCJBIikuUHJvcGVydHkoIm5hbWUiLCAiYTEiKS5BcygiYTEiKS5BZGRWKCJCIikuUHJvcGVydHkoIm5hbWUiLCAiYjEiKS5BcygiYjEiKS5BZGRFKCJhYiIpLkZyb20oImExIikuVG8oImIxIil9LCBmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuQXMoImEiKS5PdXQoKS5BcygiYSIpLkluKCkuQXMoImEiKS5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5BbGwsICJhIiwgImEiLCAiYSIpLkJ5KGdyZW1saW5nby5UX18uVW5mb2xkKCkuVmFsdWVzKCJuYW1lIikuRm9sZCgpKX19LCAKLSAgICAiZ19WX2FzWGxhYmVsWF9sb2NhbFhhZ2dyZWdhdGVYeFhfc2VsZWN0WHhYX3NlbGVjdFhsYWJlbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkFzKCJsYWJlbCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKCJ4IikpLkJhcnJpZXIoKS5TZWxlY3QoIngiKS5TZWxlY3QoImxhYmVsIil9fSwgCisgICAgImdfd2l0aG91dFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9hc1hsYWJlbFhfbG9jYWxYYWdncmVnYXRlX3hYX3NlbGVjdFh4WF9zZWxlY3RYbGFiZWxYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5MYXp5QmFycmllclN0cmF0ZWd5KCkpLlYoKS5BcygibGFiZWwiKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZSgieCIpKS5TZWxlY3QoIngiKS5TZWxlY3QoImxhYmVsIil9fSwgCiAgICAgImdfVl9uYW1lX2FzWGFYX3NlbGVjdFhmaXJzdF9hWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuVmFsdWVzKCJuYW1lIikuQXMoImEiKS5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5GaXJzdCwgImEiKX19LCAKICAgICAiZ19WX25hbWVfYXNYYVhfc2VsZWN0WGxhc3RfYVgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlZhbHVlcygibmFtZSIpLkFzKCJhIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgImEiKX19LCAKICAgICAiZ19WX25hbWVfYXNYYVhfc2VsZWN0WG1peGVkX2FYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5WYWx1ZXMoIm5hbWUiKS5BcygiYSIpLlNlbGVjdChncmVtbGluZ28uUG9wLk1peGVkLCAiYSIpfX0sIApAQCAtMTc5Miw2ICsxNzk3LDMwIEBACiAgICAgIkluamVjdFgxZFhfbHRlWE5hTlgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTHRlKG1hdGguTmFOKCkpKX19LCAKICAgICAiSW5qZWN0WDFkWF9ndFhOYU5YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkd0KG1hdGguTmFOKCkpKX19LCAKICAgICAiSW5qZWN0WDFkWF9ndGVYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMS4wKS5JcyhncmVtbGluZ28uUC5HdGUobWF0aC5OYU4oKSkpfX0sIAorICAgICJJbmplY3RYTmFOWF9lcVgxZFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLkVxKDEuMCkpfX0sIAorICAgICJJbmplY3RYTmFOWF9uZXFYMWRYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5OZXEoMS4wKSl9fSwgCisgICAgIkluamVjdFhOYU5YX2x0WDFkWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuTHQoMS4wKSl9fSwgCisgICAgIkluamVjdFhOYU5YX2x0ZVgxZFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLkx0ZSgxLjApKX19LCAKKyAgICAiSW5qZWN0WE5hTlhfZ3RYMWRYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5HdCgxLjApKX19LCAKKyAgICAiSW5qZWN0WE5hTlhfZ3RlWDFkWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuR3RlKDEuMCkpfX0sIAorICAgICJJbmplY3RYMWRYX2VxWG51bGxYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkVxKG5pbCkpfX0sIAorICAgICJJbmplY3RYMWRYX25lcVhudWxsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMS4wKS5JcyhncmVtbGluZ28uUC5OZXEobmlsKSl9fSwgCisgICAgIkluamVjdFgxZFhfbHRYbnVsbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTHQobmlsKSl9fSwgCisgICAgIkluamVjdFgxZFhfbHRlWG51bGxYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkx0ZShuaWwpKX19LCAKKyAgICAiSW5qZWN0WDFkWF9ndFhudWxsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMS4wKS5JcyhncmVtbGluZ28uUC5HdChuaWwpKX19LCAKKyAgICAiSW5qZWN0WDFkWF9ndGVYbnVsbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuR3RlKG5pbCkpfX0sIAorICAgICJJbmplY3RYbnVsbFhfZXFYMWRYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkVxKDEuMCkpfX0sIAorICAgICJJbmplY3RYbnVsbFhfbmVxWDFkWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5OZXEoMS4wKSl9fSwgCisgICAgIkluamVjdFhudWxsWF9sdFgxZFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuTHQoMS4wKSl9fSwgCisgICAgIkluamVjdFhudWxsWF9sdGVYMWRYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkx0ZSgxLjApKX19LCAKKyAgICAiSW5qZWN0WG51bGxYX2d0WDFkWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5HdCgxLjApKX19LCAKKyAgICAiSW5qZWN0WG51bGxYX2d0ZVgxZFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuR3RlKDEuMCkpfX0sIAorICAgICJJbmplY3RYbnVsbFhfZXFYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5FcShtYXRoLk5hTigpKSl9fSwgCisgICAgIkluamVjdFhudWxsWF9uZXFYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5OZXEobWF0aC5OYU4oKSkpfX0sIAorICAgICJJbmplY3RYbnVsbFhfbHRYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSl9fSwgCisgICAgIkluamVjdFhudWxsWF9sdGVYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5MdGUobWF0aC5OYU4oKSkpfX0sIAorICAgICJJbmplY3RYbnVsbFhfZ3RYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5HdChtYXRoLk5hTigpKSl9fSwgCisgICAgIkluamVjdFhudWxsWF9ndGVYTmFOWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5HdGUobWF0aC5OYU4oKSkpfX0sIAogICAgICJJbmplY3RYTmFOWF9lcVhudWxsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuRXEobmlsKSl9fSwgCiAgICAgIkluamVjdFhOYU5YX25lcVhudWxsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuTmVxKG5pbCkpfX0sIAogICAgICJJbmplY3RYTmFOWF9sdFhudWxsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuTHQobmlsKSl9fSwgCkBAIC0xODUwLDYgKzE4NzksMTcgQEAKICAgICAiSW5qZWN0WDFkWF9ub3RYZmFsc2VYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxKS5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdCgwKSkpfX0sIAogICAgICJJbmplY3RYMWRYX25vdFhOYU5YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxKS5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdChtYXRoLk5hTigpKSkpfX0sIAogICAgICJJbmplY3RYMWRYX25vdFhpc1hlcVhOYU5YWFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEpLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKG1hdGguTmFOKCkpKSl9fSwgCisgICAgIkluamVjdFgxZFhfbm90WG5vdFhpc1hlcVhOYU5YWFhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxKS5Ob3QoZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcShtYXRoLk5hTigpKSkpKX19LCAKKyAgICAiSW5qZWN0WDFkWF93aGVyZVhub3RYaXNYbHRYTmFOWFhYWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMSkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5JbmplY3QoMSkuTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSl9fSwgCisgICAgIkluamVjdFgxZFhfeG9yWHRydWVfdHJ1ZVgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSkpKSkpfX0sIAorICAgICJJbmplY3RYMWRYX3hvclh0cnVlX2ZhbHNlWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpKSksIGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSkpKSl9fSwgCisgICAgIkluamVjdFgxZFhfeG9yWHRydWVfZXJyb3JYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdCgxKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSkpKSwgZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpKSkpKX19LCAKKyAgICAiSW5qZWN0WDFkWF94b3JYZmFsc2VfdHJ1ZVgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxKSkpKSkpfX0sIAorICAgICJJbmplY3RYMWRYX3hvclhmYWxzZV9mYWxzZVgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxKSkpKSkpfX0sIAorICAgICJJbmplY3RYMWRYX3hvclhmYWxzZV9lcnJvclgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxKSkpKSkpfX0sIAorICAgICJJbmplY3RYMWRYX3hvclhlcnJvcl90cnVlWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpKSksIGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpKSl9fSwgCisgICAgIkluamVjdFgxZFhfeG9yWGVycm9yX2ZhbHNlWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpKSksIGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpKSl9fSwgCisgICAgIkluamVjdFgxZFhfeG9yWGVycm9yX2Vycm9yWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QoMSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSksIGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpKSl9fSwgCiAgICAgIkluamVjdFhJbmZYX2VxWEluZlgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KG1hdGguSW5mKDEpKS5JcyhncmVtbGluZ28uUC5FcShtYXRoLkluZigxKSkpfX0sIAogICAgICJJbmplY3RYSW5mWF9uZXFYSW5mWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbmplY3QobWF0aC5JbmYoMSkpLklzKGdyZW1saW5nby5QLk5lcShtYXRoLkluZigxKSkpfX0sIAogICAgICJJbmplY3RYTmVnSW5mWF9lcVhOZWdJbmZYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkluamVjdChtYXRoLkluZigtMSkpLklzKGdyZW1saW5nby5QLkVxKG1hdGguSW5mKC0xKSkpfX0sIApAQCAtMTg3MSw2ICsxOTExLDggQEAKICAgICAiZ19WX3Byb3BlcnRpZXNfb3JkZXJfaWQiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLlByb3BlcnRpZXMoKS5PcmRlcigpLklkKCl9fSwgCiAgICAgImdfRV9wcm9wZXJ0aWVzX29yZGVyX3ZhbHVlIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNSkuUHJvcGVydHkoImEiLCBpbnQzMigxMCkpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5Qcm9wZXJ0eSgiYSIsIGludDMyKDExKSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLlByb3BlcnR5KCJhIiwgaW50MzIoMTIpKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMCkuUHJvcGVydHkoImEiLCBpbnQzMigxMykpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5Qcm9wZXJ0eSgiYSIsIGludDMyKDE0KSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpLlByb3BlcnR5KCJhIiwgaW50MzIoMTUpKX0sIGZ1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUoKS5Qcm9wZXJ0aWVzKCkuT3JkZXIoKS5WYWx1ZSgpfX0sIAogICAgICJnX0VfcHJvcGVydGllc19vcmRlcl9ieVhkZXNjWF92YWx1ZSI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5BZGRWKCJwZXJzb24iKS5Qcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLkFzKCJhIikuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLlByb3BlcnR5KCJhIiwgaW50MzIoMTApKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMCkuUHJvcGVydHkoImEiLCBpbnQzMigxMSkpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5Qcm9wZXJ0eSgiYSIsIGludDMyKDEyKSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLlByb3BlcnR5KCJhIiwgaW50MzIoMTMpKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNCkuUHJvcGVydHkoImEiLCBpbnQzMigxNCkpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKS5Qcm9wZXJ0eSgiYSIsIGludDMyKDE1KSl9LCBmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5FKCkuUHJvcGVydGllcygpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLlZhbHVlKCl9fSwgCisgICAgImdfRV9wcm9wZXJ0aWVzX29yZGVyIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuQXMoImEiKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNSkuUHJvcGVydHkoImEiLCBpbnQzMigxMCkpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5Qcm9wZXJ0eSgiYSIsIGludDMyKDExKSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLlByb3BlcnR5KCJhIiwgaW50MzIoMTIpKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDEuMCkuUHJvcGVydHkoImEiLCBpbnQzMigxMykpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5Qcm9wZXJ0eSgiYSIsIGludDMyKDE0KSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpLlByb3BlcnR5KCJhIiwgaW50MzIoMTUpKX0sIGZ1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLkUoKS5Qcm9wZXJ0aWVzKCkuT3JkZXIoKX19LCAKKyAgICAiZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuQWRkVigicGVyc29uIikuUHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5BcygiYSIpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5Qcm9wZXJ0eSgiYSIsIGludDMyKDEwKSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLlByb3BlcnR5KCJhIiwgaW50MzIoMTEpKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuNCkuUHJvcGVydHkoImEiLCBpbnQzMigxMikpLkFkZEUoInNlbGYiKS5Gcm9tKCJhIikuVG8oImEiKS5Qcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5Qcm9wZXJ0eSgiYSIsIGludDMyKDEzKSkuQWRkRSgic2VsZiIpLkZyb20oImEiKS5UbygiYSIpLlByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLlByb3BlcnR5KCJhIiwgaW50MzIoMTQpKS5BZGRFKCJzZWxmIikuRnJvbSgiYSIpLlRvKCJhIikuUHJvcGVydHkoIndlaWdodCIsIDAuMikuUHJvcGVydHkoImEiLCBpbnQzMigxNSkpfSwgZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuRSgpLlByb3BlcnRpZXMoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5EZXNjKX19LCAKICAgICAiZ19pbmplY3Rfb3JkZXIiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KCJ6enoiLCAiZm9vIiwgdXVpZC5NdXN0UGFyc2UoIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCBbXWludGVyZmFjZXt9eyJhIiwgImIiLCAiYyIsICJkIn0sIDEsIHRpbWUuRGF0ZSgyMDIzLCA4LCAxLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpLCBbXWludGVyZmFjZXt9eyJhIiwgImIiLCAiYyJ9LCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317ImEiOiAiYSIsICJiIjogImIiIH0sIG5pbCwgMi4wLCB0aW1lLkRhdGUoMjAyMywgMSwgMSwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoIlVUQyswMDowMCIsIDApKSwgZ3JlbWxpbmdvLk5ld1NpbXBsZVNldCgieCIsICJ5IiwgInoiKSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyJhIjogImEiLCAiYiI6IGZhbHNlLCAiYyI6ICJjIiB9LCAiYmFyIiwgdXVpZC5NdXN0UGFyc2UoIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCB0cnVlLCBmYWxzZSwgbWF0aC5JbmYoMSksIG1hdGguTmFOKCksIG1hdGguSW5mKC0xKSkuT3JkZXIoKX19LCAKICAgICAiZ19pbmplY3Rfb3JkZXJfYnlYZGVzY1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW5qZWN0KCJ6enoiLCAiZm9vIiwgdXVpZC5NdXN0UGFyc2UoIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCBbXWludGVyZmFjZXt9eyJhIiwgImIiLCAiYyIsICJkIn0sIDEsIHRpbWUuRGF0ZSgyMDIzLCA4LCAxLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZSgiVVRDKzAwOjAwIiwgMCkpLCBbXWludGVyZmFjZXt9eyJhIiwgImIiLCAiYyJ9LCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317ImEiOiAiYSIsICJiIjogImIiIH0sIG5pbCwgMi4wLCB0aW1lLkRhdGUoMjAyMywgMSwgMSwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoIlVUQyswMDowMCIsIDApKSwgZ3JlbWxpbmdvLk5ld1NpbXBsZVNldCgieCIsICJ5IiwgInoiKSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyJhIjogImEiLCAiYiI6IGZhbHNlLCAiYyI6ICJjIiB9LCAiYmFyIiwgdXVpZC5NdXN0UGFyc2UoIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCB0cnVlLCBmYWxzZSwgbWF0aC5JbmYoMSksIG1hdGguTmFOKCksIG1hdGguSW5mKC0xKSkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYyl9fSwgCiAgICAgImdfVl9vdXRfb3V0X29yZGVyX2J5WGFzY1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLk91dCgpLk91dCgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkFzYyl9fSwgCkBAIC0xOTU4LDYgKzIwMDAsNyBAQAogICAgICJnX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkhhc0xhYmVsKCJzb25nIikuR3JvdXAoKS5CeSgibmFtZSIpLkJ5KGdyZW1saW5nby5UX18uUHJvcGVydGllcygpLkdyb3VwQ291bnQoKS5CeShncmVtbGluZ28uVC5MYWJlbCkpfX0sIAogICAgICJnX1Zfb3V0WGZvbGxvd2VkQnlYX2dyb3VwX2J5WHNvbmdUeXBlWF9ieVhib3RoRV9ncm91cF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5PdXQoImZvbGxvd2VkQnkiKS5Hcm91cCgpLkJ5KCJzb25nVHlwZSIpLkJ5KGdyZW1saW5nby5UX18uQm90aEUoKS5Hcm91cCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcygid2VpZ2h0IikuU3VtKCkpKX19LCAKICAgICAiZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV9ncm91cFhhWF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhfd2VpZ2h0X3N1bVgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkdyb3VwKCkuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpLkJ5KGdyZW1saW5nby5UX18uQm90aEUoKS5Hcm91cCgiYSIpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcygid2VpZ2h0IikuU3VtKCkpLlZhbHVlcygid2VpZ2h0IikuU3VtKCkpfX0sIAorICAgICJnX3dpdGhTaWRlRWZmZWN0WGFfX21hcmtvXzY2Nl9ub29uZV9ibGFoWF9WX2dyb3VwWGFYX2J5WG5hbWVYX2J5WG91dEVfbGFiZWxfZm9sZFhfY2FwWGFYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLldpdGhTaWRlRWZmZWN0KCJhIiwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyJtYXJrbyI6IFtdaW50ZXJmYWNle317IjY2NiJ9LCAibm9vbmUiOiBbXWludGVyZmFjZXt9eyJibGFoIn0gfSkuVigpLkdyb3VwKCJhIikuQnkoIm5hbWUiKS5CeShncmVtbGluZ28uVF9fLk91dEUoKS5MYWJlbCgpLkZvbGQoKSkuQ2FwKCJhIikuVW5mb2xkKCkuR3JvdXAoKS5CeShncmVtbGluZ28uQ29sdW1uLktleXMpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KGdyZW1saW5nby5PcmRlci5Bc2MpKX19LCAKICAgICAiZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfb3V0WGNyZWF0ZWRYX2dyb3VwX2J5WG5hbWVYX2J5WHNlbGVjdFhwWF92YWx1ZXNYYWdlWF9zdW1YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5IYXNMYWJlbCgicGVyc29uIikuQXMoInAiKS5PdXQoImNyZWF0ZWQiKS5Hcm91cCgpLkJ5KCJuYW1lIikuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoInAiKS5WYWx1ZXMoImFnZSIpLlN1bSgpKX19LCAKICAgICAiZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuVigpLkdyb3VwKCkuQnkoZ3JlbWxpbmdvLlRfXy5MYWJlbCgpKS5CeShncmVtbGluZ28uVF9fLkxhYmVsKCkuQ291bnQoKSl9fSwgCiAgICAgImdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X29yZGVyX2ZvbGRYIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLlYoKS5IYXMoInBlcnNvbiIsICJuYW1lIiwgZ3JlbWxpbmdvLlAuV2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5Hcm91cCgpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkZvbGQoKSl9fSwgCkBAIC0yMDg1LDYgKzIxMjgsMTIgQEAKICAgICAiZ19WWDFYX291dEVfaW5WX2JvdGhFX290aGVyVl90cmVlX2J5WG5hbWVYX2J5WGxhYmVsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKHBbInZpZDEiXSkuT3V0RSgpLkluVigpLkJvdGhFKCkuT3RoZXJWKCkuVHJlZSgpLkJ5KCJuYW1lIikuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpfX0sIAogICAgICJnX1Zfb3V0X3RyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuT3V0KCkuVHJlZSgiYSIpLlNlbGVjdCgiYSIpLkNvdW50KGdyZW1saW5nby5TY29wZS5Mb2NhbCl9fSwgCiAgICAgImdfVl9vdXRfb3JkZXJfYnlYbmFtZVhfbG9jYWxYdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5WKCkuT3V0KCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5UcmVlKCJhIikuU2VsZWN0KCJhIikuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSl9fSwgCisgICAgImdfaW9fd3JpdGVYa3J5b1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW8oInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIpLldyaXRlKCl9fSwgCisgICAgImdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3J5b1giOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW8oInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIpLldpdGgoZ3JlbWxpbmdvLklPLldyaXRlciwgZ3JlbWxpbmdvLklPLkdyeW8pLldyaXRlKCl9fSwgCisgICAgImdfaW9fd3JpdGVYZ3JhcGhzb25YIjoge2Z1bmMoZyAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsU291cmNlLCBwIG1hcFtzdHJpbmddaW50ZXJmYWNle30pICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwge3JldHVybiBnLklvKCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb24iKS5Xcml0ZSgpfX0sIAorICAgICJnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBoc29uWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbygidGlua2VycG9wLW1vZGVybi12My5qc29uIikuV2l0aChncmVtbGluZ28uSU8uV3JpdGVyLCBncmVtbGluZ28uSU8uR3JhcGhzb24pLldyaXRlKCl9fSwgCisgICAgImdfaW9fd3JpdGVYZ3JhcGhtbFgiOiB7ZnVuYyhnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbCB7cmV0dXJuIGcuSW8oInRpbmtlcnBvcC1tb2Rlcm4ueG1sIikuV3JpdGUoKX19LCAKKyAgICAiZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncmFwaG1sWCI6IHtmdW5jKGcgKmdyZW1saW5nby5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgcCBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAqZ3JlbWxpbmdvLkdyYXBoVHJhdmVyc2FsIHtyZXR1cm4gZy5JbygidGlua2VycG9wLW1vZGVybi54bWwiKS5XaXRoKGdyZW1saW5nby5JTy5Xcml0ZXIsIGdyZW1saW5nby5JTy5HcmFwaG1sKS5Xcml0ZSgpfX0sIAogfQogCiAgICBmdW5jIEdldFRyYXZlcnNhbChzY2VuYXJpb05hbWUgc3RyaW5nLCBnICpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHBhcmFtZXRlcnMgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSwgc2lkZUVmZmVjdHMgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgKCpncmVtbGluZ28uR3JhcGhUcmF2ZXJzYWwsIGVycm9yKSB7CkBAIC0yMDkyLDkgKzIxNDEsNiBAQAogICAgICAgICAgICB0cmF2ZXJzYWxGbiA6PSB0cmF2ZXJzYWxGbnNbMF0KICAgICAgICAgICAgdHJhbnNsYXRpb25NYXBbc2NlbmFyaW9OYW1lXSA9IHRyYXZlcnNhbEZuc1sxOl0KICAgICAgICAgICAgdHJhdmVyc2FsIDo9IHRyYXZlcnNhbEZuKGcsIHBhcmFtZXRlcnMpCi0gICAgICAgICAgIGZvciBrZXksIHZhbHVlIDo9IHJhbmdlIHNpZGVFZmZlY3RzIHsKLSAgICAgICAgICAgICAgIHRyYXZlcnNhbC5CeXRlY29kZS5BZGRTb3VyY2UoIndpdGhTaWRlRWZmZWN0Iiwga2V5LCB2YWx1ZSkKLSAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLCBuaWwKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbmlsLCBlcnJvcnMuTmV3KCJzY2VuYXJpbyBmb3IgdHJhdmVyc2FsIG5vdCByZWNvZ25pemVkIikKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2RyaXZlclJlbW90ZUNvbm5lY3Rpb24uZ28gYi9ncmVtbGluLWdvL2RyaXZlci9kcml2ZXJSZW1vdGVDb25uZWN0aW9uLmdvCmluZGV4IDY0YzAwYjMuLjcyMzliOGQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2RyaXZlclJlbW90ZUNvbm5lY3Rpb24uZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5nbwpAQCAtMjEsMTIwICsyMSwxMDUgQEAKIAogaW1wb3J0ICgKIAkiY3J5cHRvL3RscyIKLQkicnVudGltZSIKIAkidGltZSIKIAotCSJnaXRodWIuY29tL2dvb2dsZS91dWlkIgogCSJnb2xhbmcub3JnL3gvdGV4dC9sYW5ndWFnZSIKICkKIAogLy8gRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzIGFyZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi4KIHR5cGUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzIHN0cnVjdCB7Ci0Jc2Vzc2lvbiBzdHJpbmcKLQogCVRyYXZlcnNhbFNvdXJjZSAgICAgICAgICBzdHJpbmcKLQlUcmFuc3BvcnRlclR5cGUgICAgICAgICAgVHJhbnNwb3J0ZXJUeXBlCiAJTG9nVmVyYm9zaXR5ICAgICAgICAgICAgIExvZ1ZlcmJvc2l0eQogCUxvZ2dlciAgICAgICAgICAgICAgICAgICBMb2dnZXIKIAlMYW5ndWFnZSAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UuVGFnCi0JQXV0aEluZm8gICAgICAgICAgICAgICAgIEF1dGhJbmZvUHJvdmlkZXIKIAlUbHNDb25maWcgICAgICAgICAgICAgICAgKnRscy5Db25maWcKLQlLZWVwQWxpdmVJbnRlcnZhbCAgICAgICAgdGltZS5EdXJhdGlvbgotCVdyaXRlRGVhZGxpbmUgICAgICAgICAgICB0aW1lLkR1cmF0aW9uCiAJQ29ubmVjdGlvblRpbWVvdXQgICAgICAgIHRpbWUuRHVyYXRpb24KIAlFbmFibGVDb21wcmVzc2lvbiAgICAgICAgYm9vbAogCUVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCBib29sCi0JUmVhZEJ1ZmZlclNpemUgICAgICAgICAgIGludAotCVdyaXRlQnVmZmVyU2l6ZSAgICAgICAgICBpbnQKIAotCS8vIE1pbmltdW0gYW1vdW50IG9mIGNvbmN1cnJlbnQgYWN0aXZlIHRyYXZlcnNhbHMgb24gYSBjb25uZWN0aW9uIHRvIHRyaWdnZXIgY3JlYXRpb24gb2YgYSBuZXcgY29ubmVjdGlvbgotCU5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQgaW50Ci0JLy8gTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCBjb25uZWN0aW9ucy4gRGVmYXVsdDogbnVtYmVyIG9mIHJ1bnRpbWUgcHJvY2Vzc29ycworCS8vIE1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgVENQIGNvbm5lY3Rpb25zCisJLy8gdG8gdGhlIEdyZW1saW4gc2VydmVyLiBUaGlzIGxpbWl0cyBob3cgbWFueSByZXF1ZXN0cyBjYW4gYmUgaW4tZmxpZ2h0IHNpbXVsdGFuZW91c2x5LgorCS8vIERlZmF1bHQ6IDEyOC4gU2V0IHRvIDAgdG8gdXNlIHRoZSBkZWZhdWx0LgogCU1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgaW50Ci0JLy8gSW5pdGlhbCBhbW91bnQgb2YgaW5zdGFudGlhdGVkIGNvbm5lY3Rpb25zLiBEZWZhdWx0OiAxCi0JSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucyBpbnQKKworCS8vIE1heElkbGVDb25uZWN0aW9ucyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaWRsZSAoa2VlcC1hbGl2ZSkgY29ubmVjdGlvbnMgdG8gcmV0YWluCisJLy8gaW4gdGhlIGNvbm5lY3Rpb24gcG9vbC4gSWRsZSBjb25uZWN0aW9ucyBhcmUgcmV1c2VkIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzLgorCS8vIERlZmF1bHQ6IDguIFNldCB0byAwIHRvIHVzZSB0aGUgZGVmYXVsdC4KKwlNYXhJZGxlQ29ubmVjdGlvbnMgaW50CisKKwkvLyBJZGxlQ29ubmVjdGlvblRpbWVvdXQgaXMgaG93IGxvbmcgYW4gaWRsZSBjb25uZWN0aW9uIHJlbWFpbnMgaW4gdGhlIHBvb2wgYmVmb3JlCisJLy8gYmVpbmcgY2xvc2VkLiBTZXQgdGhpcyB0byBtYXRjaCB5b3VyIHNlcnZlcidzIGlkbGUgdGltZW91dCBpZiBuZWVkZWQuCisJLy8gRGVmYXVsdDogMTgwIHNlY29uZHMgKDMgbWludXRlcykuIFNldCB0byAwIHRvIHVzZSB0aGUgZGVmYXVsdC4KKwlJZGxlQ29ubmVjdGlvblRpbWVvdXQgdGltZS5EdXJhdGlvbgorCisJLy8gS2VlcEFsaXZlSW50ZXJ2YWwgaXMgdGhlIGludGVydmFsIGJldHdlZW4gVENQIGtlZXAtYWxpdmUgcHJvYmVzIG9uIGlkbGUgY29ubmVjdGlvbnMuCisJLy8gVGhpcyBoZWxwcyBkZXRlY3QgZGVhZCBjb25uZWN0aW9ucyBhbmQga2VlcHMgY29ubmVjdGlvbnMgYWxpdmUgdGhyb3VnaCBmaXJld2FsbHMuCisJLy8gRGVmYXVsdDogMzAgc2Vjb25kcy4gU2V0IHRvIDAgdG8gdXNlIHRoZSBkZWZhdWx0LgorCUtlZXBBbGl2ZUludGVydmFsIHRpbWUuRHVyYXRpb24KKworCS8vIFJlcXVlc3RJbnRlcmNlcHRvcnMgYXJlIGZ1bmN0aW9ucyB0aGF0IG1vZGlmeSBIVFRQIHJlcXVlc3RzIGJlZm9yZSBzZW5kaW5nLgorCVJlcXVlc3RJbnRlcmNlcHRvcnMgW11SZXF1ZXN0SW50ZXJjZXB0b3IKIH0KIAogLy8gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBpcyBhIHJlbW90ZSBjb25uZWN0aW9uLgogdHlwZSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHN0cnVjdCB7Ci0JY2xpZW50ICAgICAgICAgICpDbGllbnQKLQlzcGF3bmVkU2Vzc2lvbnMgW10qRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgotCWlzQ2xvc2VkICAgICAgICBib29sCi0Jc2V0dGluZ3MgICAgICAgICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MKKwljbGllbnQgICAqQ2xpZW50CisJaXNDbG9zZWQgYm9vbAorCXNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MKIH0KIAogLy8gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBjcmVhdGVzIGEgbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24uCiAvLyBJZiBubyBjdXN0b20gY29ubmVjdGlvbiBzZXR0aW5ncyBhcmUgcGFzc2VkIGluLCBhIGNvbm5lY3Rpb24gd2lsbCBiZSBjcmVhdGVkIHdpdGggImciIGFzIHRoZSBkZWZhdWx0IFRyYXZlcnNhbFNvdXJjZSwKLS8vIEdvcmlsbGEgYXMgdGhlIGRlZmF1bHQgVHJhbnNwb3J0ZXIsIEluZm8gYXMgdGhlIGRlZmF1bHQgTG9nVmVyYm9zaXR5LCBhIGRlZmF1bHQgbG9nZ2VyIHN0cnVjdCwgYW5kIEVuZ2xpc2ggYW5kIGFzIHRoZQorLy8gSW5mbyBhcyB0aGUgZGVmYXVsdCBMb2dWZXJib3NpdHksIGEgZGVmYXVsdCBsb2dnZXIgc3RydWN0LCBhbmQgRW5nbGlzaCBhbmQgYXMgdGhlCiAvLyBkZWZhdWx0IGxhbmd1YWdlCiBmdW5jIE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24oCiAJdXJsIHN0cmluZywKIAljb25maWd1cmF0aW9ucyAuLi5mdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpKSAoKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24sIGVycm9yKSB7CiAJc2V0dGluZ3MgOj0gJkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5nc3sKLQkJc2Vzc2lvbjogIiIsCi0KIAkJVHJhdmVyc2FsU291cmNlOiAgICAgICAgICAiZyIsCi0JCVRyYW5zcG9ydGVyVHlwZTogICAgICAgICAgR29yaWxsYSwKIAkJTG9nVmVyYm9zaXR5OiAgICAgICAgICAgICBJbmZvLAogCQlMb2dnZXI6ICAgICAgICAgICAgICAgICAgICZkZWZhdWx0TG9nZ2Vye30sCiAJCUxhbmd1YWdlOiAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UuRW5nbGlzaCwKLQkJQXV0aEluZm86ICAgICAgICAgICAgICAgICAmQXV0aEluZm97fSwKIAkJVGxzQ29uZmlnOiAgICAgICAgICAgICAgICAmdGxzLkNvbmZpZ3t9LAotCQlLZWVwQWxpdmVJbnRlcnZhbDogICAgICAgIGtlZXBBbGl2ZUludGVydmFsRGVmYXVsdCwKLQkJV3JpdGVEZWFkbGluZTogICAgICAgICAgICB3cml0ZURlYWRsaW5lRGVmYXVsdCwKIAkJQ29ubmVjdGlvblRpbWVvdXQ6ICAgICAgICBjb25uZWN0aW9uVGltZW91dERlZmF1bHQsCiAJCUVuYWJsZUNvbXByZXNzaW9uOiAgICAgICAgZmFsc2UsCiAJCUVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogdHJ1ZSwKLQkJUmVhZEJ1ZmZlclNpemU6ICAgICAgICAgICByZWFkQnVmZmVyU2l6ZURlZmF1bHQsCi0JCVdyaXRlQnVmZmVyU2l6ZTogICAgICAgICAgd3JpdGVCdWZmZXJTaXplRGVmYXVsdCwKIAotCQlOZXdDb25uZWN0aW9uVGhyZXNob2xkOiAgICAgICBkZWZhdWx0TmV3Q29ubmVjdGlvblRocmVzaG9sZCwKLQkJTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9uczogcnVudGltZS5OdW1DUFUoKSwKLQkJSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9uczogZGVmYXVsdEluaXRpYWxDb25jdXJyZW50Q29ubmVjdGlvbnMsCisJCU1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnM6IDAsIC8vIFVzZSBkZWZhdWx0ICgxMjgpCisJCU1heElkbGVDb25uZWN0aW9uczogICAgICAgICAgIDAsIC8vIFVzZSBkZWZhdWx0ICg4KQorCQlJZGxlQ29ubmVjdGlvblRpbWVvdXQ6ICAgICAgICAwLCAvLyBVc2UgZGVmYXVsdCAoMTgwcykKKwkJS2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICAgICAgMCwgLy8gVXNlIGRlZmF1bHQgKDMwcykKIAl9CiAJZm9yIF8sIGNvbmZpZ3VyYXRpb24gOj0gcmFuZ2UgY29uZmlndXJhdGlvbnMgewogCQljb25maWd1cmF0aW9uKHNldHRpbmdzKQogCX0KIAogCWNvbm5TZXR0aW5ncyA6PSAmY29ubmVjdGlvblNldHRpbmdzewotCQlhdXRoSW5mbzogICAgICAgICAgICAgICAgIHNldHRpbmdzLkF1dGhJbmZvLAogCQl0bHNDb25maWc6ICAgICAgICAgICAgICAgIHNldHRpbmdzLlRsc0NvbmZpZywKLQkJa2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICBzZXR0aW5ncy5LZWVwQWxpdmVJbnRlcnZhbCwKLQkJd3JpdGVEZWFkbGluZTogICAgICAgICAgICBzZXR0aW5ncy5Xcml0ZURlYWRsaW5lLAogCQljb25uZWN0aW9uVGltZW91dDogICAgICAgIHNldHRpbmdzLkNvbm5lY3Rpb25UaW1lb3V0LAorCQltYXhDb25uc1Blckhvc3Q6ICAgICAgICAgIHNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMsCisJCW1heElkbGVDb25uc1Blckhvc3Q6ICAgICAgc2V0dGluZ3MuTWF4SWRsZUNvbm5lY3Rpb25zLAorCQlpZGxlQ29ublRpbWVvdXQ6ICAgICAgICAgIHNldHRpbmdzLklkbGVDb25uZWN0aW9uVGltZW91dCwKKwkJa2VlcEFsaXZlSW50ZXJ2YWw6ICAgICAgICBzZXR0aW5ncy5LZWVwQWxpdmVJbnRlcnZhbCwKIAkJZW5hYmxlQ29tcHJlc3Npb246ICAgICAgICBzZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbiwKLQkJcmVhZEJ1ZmZlclNpemU6ICAgICAgICAgICBzZXR0aW5ncy5SZWFkQnVmZmVyU2l6ZSwKLQkJd3JpdGVCdWZmZXJTaXplOiAgICAgICAgICBzZXR0aW5ncy5Xcml0ZUJ1ZmZlclNpemUsCiAJCWVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogc2V0dGluZ3MuRW5hYmxlVXNlckFnZW50T25Db25uZWN0LAogCX0KIAogCWxvZ0hhbmRsZXIgOj0gbmV3TG9nSGFuZGxlcihzZXR0aW5ncy5Mb2dnZXIsIHNldHRpbmdzLkxvZ1ZlcmJvc2l0eSwgc2V0dGluZ3MuTGFuZ3VhZ2UpCi0JaWYgc2V0dGluZ3Muc2Vzc2lvbiAhPSAiIiB7Ci0JCWxvZ0hhbmRsZXIubG9nKERlYnVnLCBzZXNzaW9uRGV0ZWN0ZWQpCi0JCXNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgPSAxCi0JfQogCi0JaWYgc2V0dGluZ3MuSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucyA+IHNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgewotCQlsb2dIYW5kbGVyLmxvZ2YoV2FybmluZywgcG9vbEluaXRpYWxFeGNlZWRzTWF4aW11bSwgc2V0dGluZ3MuSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucywKLQkJCXNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMsIHNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMpCi0JCXNldHRpbmdzLkluaXRpYWxDb25jdXJyZW50Q29ubmVjdGlvbnMgPSBzZXR0aW5ncy5NYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zCi0JfQotCXBvb2wsIGVyciA6PSBuZXdMb2FkQmFsYW5jaW5nUG9vbCh1cmwsIGxvZ0hhbmRsZXIsIGNvbm5TZXR0aW5ncywgc2V0dGluZ3MuTmV3Q29ubmVjdGlvblRocmVzaG9sZCwKLQkJc2V0dGluZ3MuTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucywgc2V0dGluZ3MuSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucykKLQlpZiBlcnIgIT0gbmlsIHsKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlsb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGxvZ0Vycm9yR2VuZXJpYywgIk5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24iLCBlcnIuRXJyb3IoKSkKLQkJfQotCQlyZXR1cm4gbmlsLCBlcnIKKwljb25uIDo9IG5ld0Nvbm5lY3Rpb24obG9nSGFuZGxlciwgdXJsLCBjb25uU2V0dGluZ3MpCisKKwkvLyBBZGQgdXNlci1wcm92aWRlZCBpbnRlcmNlcHRvcnMKKwlmb3IgXywgaW50ZXJjZXB0b3IgOj0gcmFuZ2Ugc2V0dGluZ3MuUmVxdWVzdEludGVyY2VwdG9ycyB7CisJCWNvbm4uQWRkSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpCiAJfQogCiAJY2xpZW50IDo9ICZDbGllbnR7Ci0JCXVybDogICAgICAgICAgICAgdXJsLAotCQl0cmF2ZXJzYWxTb3VyY2U6IHNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSwKLQkJbG9nSGFuZGxlcjogICAgICBsb2dIYW5kbGVyLAotCQl0cmFuc3BvcnRlclR5cGU6IHNldHRpbmdzLlRyYW5zcG9ydGVyVHlwZSwKLQkJY29ubmVjdGlvbnM6ICAgICBwb29sLAotCQlzZXNzaW9uOiAgICAgICAgIHNldHRpbmdzLnNlc3Npb24sCisJCXVybDogICAgICAgICAgICAgICAgdXJsLAorCQl0cmF2ZXJzYWxTb3VyY2U6ICAgIHNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSwKKwkJbG9nSGFuZGxlcjogICAgICAgICBsb2dIYW5kbGVyLAorCQljb25uZWN0aW9uU2V0dGluZ3M6IGNvbm5TZXR0aW5ncywKKwkJY29ubjogICAgICAgICAgICAgICBjb25uLAogCX0KIAogCXJldHVybiAmRHJpdmVyUmVtb3RlQ29ubmVjdGlvbntjbGllbnQ6IGNsaWVudCwgaXNDbG9zZWQ6IGZhbHNlLCBzZXR0aW5nczogc2V0dGluZ3N9LCBuaWwKQEAgLTE0MywyMCArMTI4LDcgQEAKIC8vIENsb3NlIGNsb3NlcyB0aGUgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi4KIC8vIEVycm9ycyBpZiBhbnkgd2lsbCBiZSBsb2dnZWQKIGZ1bmMgKGRyaXZlciAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvbikgQ2xvc2UoKSB7Ci0JLy8gSWYgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBoYXMgc3Bhd25lZFNlc3Npb25zIHRoZW4gdGhleSBtdXN0IGJlIGNsb3NlZCBhcyB3ZWxsLgotCWlmIGxlbihkcml2ZXIuc3Bhd25lZFNlc3Npb25zKSA+IDAgewotCQlkcml2ZXIuY2xpZW50LmxvZ0hhbmRsZXIubG9nZihEZWJ1ZywgY2xvc2luZ1NwYXduZWRTZXNzaW9ucywgZHJpdmVyLmNsaWVudC51cmwpCi0JCWZvciBfLCBzZXNzaW9uIDo9IHJhbmdlIGRyaXZlci5zcGF3bmVkU2Vzc2lvbnMgewotCQkJc2Vzc2lvbi5DbG9zZSgpCi0JCX0KLQkJZHJpdmVyLnNwYXduZWRTZXNzaW9ucyA9IGRyaXZlci5zcGF3bmVkU2Vzc2lvbnNbOjBdCi0JfQotCi0JaWYgZHJpdmVyLmlzU2Vzc2lvbigpIHsKLQkJZHJpdmVyLmNsaWVudC5sb2dIYW5kbGVyLmxvZ2YoSW5mbywgY2xvc2VTZXNzaW9uLCBkcml2ZXIuY2xpZW50LnVybCwgZHJpdmVyLmNsaWVudC5zZXNzaW9uKQotCX0gZWxzZSB7Ci0JCWRyaXZlci5jbGllbnQubG9nSGFuZGxlci5sb2dmKEluZm8sIGNsb3NlRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiwgZHJpdmVyLmNsaWVudC51cmwpCi0JfQorCWRyaXZlci5jbGllbnQubG9nSGFuZGxlci5sb2dmKEluZm8sIGNsb3NlRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiwgZHJpdmVyLmNsaWVudC51cmwpCiAJZHJpdmVyLmNsaWVudC5DbG9zZSgpCiAJZHJpdmVyLmlzQ2xvc2VkID0gdHJ1ZQogfQpAQCAtMTc1LDY5ICsxNDcsMTAgQEAKIAlyZXR1cm4gZHJpdmVyLlN1Ym1pdFdpdGhPcHRpb25zKHRyYXZlcnNhbFN0cmluZywgKm5ldyhSZXF1ZXN0T3B0aW9ucykpCiB9CiAKLS8vIHN1Ym1pdEJ5dGVjb2RlIHNlbmRzIGEgQnl0ZWNvZGUgdHJhdmVyc2FsIHRvIHRoZSBzZXJ2ZXIuCi1mdW5jIChkcml2ZXIgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pIHN1Ym1pdEJ5dGVjb2RlKGJ5dGVjb2RlICpCeXRlY29kZSkgKFJlc3VsdFNldCwgZXJyb3IpIHsKKy8vIHN1Ym1pdEdyZW1saW5MYW5nIHNlbmRzIGEgR3JlbWxpbkxhbmcgdHJhdmVyc2FsIHRvIHRoZSBzZXJ2ZXIuCitmdW5jIChkcml2ZXIgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pIHN1Ym1pdEdyZW1saW5MYW5nKGdyZW1saW5MYW5nICpHcmVtbGluTGFuZykgKFJlc3VsdFNldCwgZXJyb3IpIHsKIAlpZiBkcml2ZXIuaXNDbG9zZWQgewotCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwMjAzU3VibWl0Qnl0ZWNvZGVUb0Nsb3NlZENvbm5lY3Rpb25FcnJvcikKKwkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDIwM1N1Ym1pdEdyZW1saW5MYW5nVG9DbG9zZWRDb25uZWN0aW9uRXJyb3IpCiAJfQotCXJldHVybiBkcml2ZXIuY2xpZW50LnN1Ym1pdEJ5dGVjb2RlKGJ5dGVjb2RlKQotfQotCi1mdW5jIChkcml2ZXIgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pIGlzU2Vzc2lvbigpIGJvb2wgewotCXJldHVybiBkcml2ZXIuY2xpZW50LnNlc3Npb24gIT0gIiIKLX0KLQotLy8gQ3JlYXRlU2Vzc2lvbiBnZW5lcmF0ZXMgYSBuZXcgc2Vzc2lvbi4gc2Vzc2lvbklkIHN0b3JlcyB0aGUgb3B0aW9uYWwgVVVJRCBwYXJhbS4gSXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2Vzc2lvbiB3aXRoIGEgc3BlY2lmaWMgVVVJRC4KLWZ1bmMgKGRyaXZlciAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvbikgQ3JlYXRlU2Vzc2lvbihzZXNzaW9uSWQgLi4uc3RyaW5nKSAoKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24sIGVycm9yKSB7Ci0JaWYgbGVuKHNlc3Npb25JZCkgPiAxIHsKLQkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDIwMUNyZWF0ZVNlc3Npb25NdWx0aXBsZUlkc0Vycm9yKQotCX0gZWxzZSBpZiBkcml2ZXIuaXNTZXNzaW9uKCkgewotCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwMjAyQ3JlYXRlU2Vzc2lvbkZyb21TZXNzaW9uRXJyb3IpCi0JfQotCi0JZHJpdmVyLmNsaWVudC5sb2dIYW5kbGVyLmxvZyhJbmZvLCBjcmVhdGluZ1Nlc3Npb25Db25uZWN0aW9uKQotCWRyYywgZXJyIDo9IE5ld0RyaXZlclJlbW90ZUNvbm5lY3Rpb24oZHJpdmVyLmNsaWVudC51cmwsIGZ1bmMoc2V0dGluZ3MgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgewotCQlpZiBsZW4oc2Vzc2lvbklkKSA9PSAxIHsKLQkJCXNldHRpbmdzLnNlc3Npb24gPSBzZXNzaW9uSWRbMF0KLQkJfSBlbHNlIHsKLQkJCXNldHRpbmdzLnNlc3Npb24gPSB1dWlkLk5ldygpLlN0cmluZygpCi0JCX0KLQkJLy8gY29weSBvdGhlciBzZXR0aW5ncyBmcm9tIHBhcmVudAotCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSBkcml2ZXIuc2V0dGluZ3MuVHJhdmVyc2FsU291cmNlCi0JCXNldHRpbmdzLlRyYW5zcG9ydGVyVHlwZSA9IGRyaXZlci5zZXR0aW5ncy5UcmFuc3BvcnRlclR5cGUKLQkJc2V0dGluZ3MuTG9nZ2VyID0gZHJpdmVyLnNldHRpbmdzLkxvZ2dlcgotCQlzZXR0aW5ncy5Mb2dWZXJib3NpdHkgPSBkcml2ZXIuc2V0dGluZ3MuTG9nVmVyYm9zaXR5Ci0JCXNldHRpbmdzLkxhbmd1YWdlID0gZHJpdmVyLnNldHRpbmdzLkxhbmd1YWdlCi0JCXNldHRpbmdzLkF1dGhJbmZvID0gZHJpdmVyLnNldHRpbmdzLkF1dGhJbmZvCi0JCXNldHRpbmdzLlRsc0NvbmZpZyA9IGRyaXZlci5zZXR0aW5ncy5UbHNDb25maWcKLQkJc2V0dGluZ3MuS2VlcEFsaXZlSW50ZXJ2YWwgPSBkcml2ZXIuc2V0dGluZ3MuS2VlcEFsaXZlSW50ZXJ2YWwKLQkJc2V0dGluZ3MuV3JpdGVEZWFkbGluZSA9IGRyaXZlci5zZXR0aW5ncy5Xcml0ZURlYWRsaW5lCi0JCXNldHRpbmdzLkNvbm5lY3Rpb25UaW1lb3V0ID0gZHJpdmVyLnNldHRpbmdzLkNvbm5lY3Rpb25UaW1lb3V0Ci0JCXNldHRpbmdzLk5ld0Nvbm5lY3Rpb25UaHJlc2hvbGQgPSBkcml2ZXIuc2V0dGluZ3MuTmV3Q29ubmVjdGlvblRocmVzaG9sZAotCQlzZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbiA9IGRyaXZlci5zZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbgotCQlzZXR0aW5ncy5SZWFkQnVmZmVyU2l6ZSA9IGRyaXZlci5zZXR0aW5ncy5SZWFkQnVmZmVyU2l6ZQotCQlzZXR0aW5ncy5Xcml0ZUJ1ZmZlclNpemUgPSBkcml2ZXIuc2V0dGluZ3MuV3JpdGVCdWZmZXJTaXplCi0JCXNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgPSBkcml2ZXIuc2V0dGluZ3MuTWF4aW11bUNvbmN1cnJlbnRDb25uZWN0aW9ucwotCX0pCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlkcml2ZXIuc3Bhd25lZFNlc3Npb25zID0gYXBwZW5kKGRyaXZlci5zcGF3bmVkU2Vzc2lvbnMsIGRyYykKLQlyZXR1cm4gZHJjLCBuaWwKLX0KLQotZnVuYyAoZHJpdmVyICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uKSBHZXRTZXNzaW9uSWQoKSBzdHJpbmcgewotCXJldHVybiBkcml2ZXIuY2xpZW50LnNlc3Npb24KLX0KLQotZnVuYyAoZHJpdmVyICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uKSBjb21taXQoKSAoUmVzdWx0U2V0LCBlcnJvcikgewotCWJjIDo9ICZCeXRlY29kZXt9Ci0JYmMuQWRkU291cmNlKCJ0eCIsICJjb21taXQiKQotCXJldHVybiBkcml2ZXIuc3VibWl0Qnl0ZWNvZGUoYmMpCi19Ci0KLWZ1bmMgKGRyaXZlciAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvbikgcm9sbGJhY2soKSAoUmVzdWx0U2V0LCBlcnJvcikgewotCWJjIDo9ICZCeXRlY29kZXt9Ci0JYmMuQWRkU291cmNlKCJ0eCIsICJyb2xsYmFjayIpCi0JcmV0dXJuIGRyaXZlci5zdWJtaXRCeXRlY29kZShiYykKKwlyZXR1cm4gZHJpdmVyLmNsaWVudC5zdWJtaXRHcmVtbGluTGFuZyhncmVtbGluTGFuZykKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2RyaXZlclJlbW90ZUNvbm5lY3Rpb25fdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2RyaXZlclJlbW90ZUNvbm5lY3Rpb25fdGVzdC5nbwppbmRleCA1ZDA4ZTc4Li5hYjIzMGVjIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9kcml2ZXJSZW1vdGVDb25uZWN0aW9uX3Rlc3QuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZHJpdmVyUmVtb3RlQ29ubmVjdGlvbl90ZXN0LmdvCkBAIC0yMCw3ICsyMCw2IEBACiBwYWNrYWdlIGdyZW1saW5nbwogCiBpbXBvcnQgKAotCSJuZXQvaHR0cCIKIAkidGVzdGluZyIKIAogCSJnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0IgpAQCAtMjgsMjAgKzI3LDExIEBACiAKIGZ1bmMgVGVzdEF1dGhlbnRpY2F0aW9uKHQgKnRlc3RpbmcuVCkgewogCi0JdC5SdW4oIlRlc3QgQmFzaWNBdXRoSW5mby4iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQloZWFkZXIgOj0gQmFzaWNBdXRoSW5mbygiTHluZG9uIiwgIkJhdXRvIikKLQkJYXNzZXJ0Lk5pbCh0LCBoZWFkZXIuR2V0SGVhZGVyKCkpCi0JCWIsIF8sIF8gOj0gaGVhZGVyLkdldEJhc2ljQXV0aCgpCi0JCWFzc2VydC5UcnVlKHQsIGIpCi0JfSkKLQotCXQuUnVuKCJUZXN0IEdldEhlYWRlci4iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQloZWFkZXIgOj0gJkF1dGhJbmZve30KLQkJYXNzZXJ0Lk5pbCh0LCBoZWFkZXIuR2V0SGVhZGVyKCkpCi0JCWhlYWRlciA9IG5pbAotCQlhc3NlcnQuTmlsKHQsIGhlYWRlci5HZXRIZWFkZXIoKSkKLQkJaHR0cEhlYWRlciA6PSBodHRwLkhlYWRlcnt9Ci0JCWhlYWRlciA9ICZBdXRoSW5mb3tIZWFkZXI6IGh0dHBIZWFkZXJ9Ci0JCWFzc2VydC5FcXVhbCh0LCBodHRwSGVhZGVyLCBoZWFkZXIuR2V0SGVhZGVyKCkpCisJdC5SdW4oIlRlc3QgQmFzaWNBdXRoIGludGVyY2VwdG9yIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJaW50ZXJjZXB0b3IgOj0gQmFzaWNBdXRoKCJ1c2VyIiwgInBhc3MiKQorCQlyZXEsIF8gOj0gTmV3SHR0cFJlcXVlc3QoIlBPU1QiLCAiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQorCQllcnIgOj0gaW50ZXJjZXB0b3IocmVxKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIHJlcS5IZWFkZXJzLkdldChIZWFkZXJBdXRob3JpemF0aW9uKSwgIkJhc2ljICIpCiAJfSkKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2Vycm9yX2NvZGVzLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZXJyb3JfY29kZXMuZ28KaW5kZXggZGY5MDQ1Mi4uNmMwZGVhNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvZXJyb3JfY29kZXMuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZXJyb3JfY29kZXMuZ28KQEAgLTI0LDcgKzI0LDcgQEAKIAkiZm10IgogCSJzdHJpbmdzIgogCi0JImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzL2RyaXZlci9yZXNvdXJjZXMiCisJImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3Y0L2RyaXZlci9yZXNvdXJjZXMiCiAJImdpdGh1Yi5jb20vbmlja3NueWRlci9nby1pMThuL3YyL2kxOG4iCiAJImdvbGFuZy5vcmcveC90ZXh0L2xhbmd1YWdlIgogKQpAQCAtMzYsMTUgKzM2LDkgQEAKIAllcnIwMTAxQ29ubmVjdGlvbkNsb3NlRXJyb3IgICAgICAgZXJyb3JDb2RlID0gIkUwMTAxX0NPTk5FQ1RJT05fQ0xPU0VfRVJST1IiCiAJZXJyMDEwMldyaXRlQ29ubmVjdGlvbkNsb3NlZEVycm9yIGVycm9yQ29kZSA9ICJFMDEwMl9DT05ORUNUSU9OX1dSSVRFX0NMT1NFRF9FUlJPUiIKIAotCS8vIGNvbm5lY3Rpb25Qb29sLmdvIGVycm9ycwotCWVycjAxMDNDb25uZWN0aW9uUG9vbENsb3NlZEVycm9yICAgICAgZXJyb3JDb2RlID0gIkUwMTAzX0NPTk5FQ1RJT05QT09MX0NMT1NFRF9FUlJPUiIKLQllcnIwMTA0Q29ubmVjdGlvblBvb2xJbnN0YW50aWF0ZUZhaWwgIGVycm9yQ29kZSA9ICJFMDEwNF9DT05ORUNUSU9OUE9PTF9JTlNUQU5USUFURV9GQUlMIgotCWVycjAxMDVDb25uZWN0aW9uUG9vbEZ1bGxCdXROb25lVmFsaWQgZXJyb3JDb2RlID0gIkUwMTA1X0NPTk5FQ1RJT05QT09MX0ZVTExfTk9ORV9WQUxJRCIKLQogCS8vIGRyaXZlclJlbW90ZUNvbm5lY3Rpb24uZ28gZXJyb3JzCi0JZXJyMDIwMUNyZWF0ZVNlc3Npb25NdWx0aXBsZUlkc0Vycm9yICAgICAgICAgZXJyb3JDb2RlID0gIkUwMjAxX0RSSVZFUl9SRU1PVEVfQ09OTkVDVElPTl9DUkVBVEVTRVNTSU9OX01VTFRJUExFX1VVSURTX0VSUk9SIgotCWVycjAyMDJDcmVhdGVTZXNzaW9uRnJvbVNlc3Npb25FcnJvciAgICAgICAgIGVycm9yQ29kZSA9ICJFMDIwMl9EUklWRVJfUkVNT1RFX0NPTk5FQ1RJT05fQ1JFQVRFU0VTU0lPTl9TRVNTSU9OX0ZST01fU0VTU0lPTl9FUlJPUiIKLQllcnIwMjAzU3VibWl0Qnl0ZWNvZGVUb0Nsb3NlZENvbm5lY3Rpb25FcnJvciBlcnJvckNvZGUgPSAiRTAyMDNfRFJJVkVSX1JFTU9URV9DT05ORUNUSU9OX1NVQk1JVEJZVEVDT0RFX1RPX0NMT1NFRF9DT05ORUNUSU9OX0VSUk9SIgorCWVycjAyMDNTdWJtaXRHcmVtbGluTGFuZ1RvQ2xvc2VkQ29ubmVjdGlvbkVycm9yIGVycm9yQ29kZSA9ICJFMDIwM19EUklWRVJfUkVNT1RFX0NPTk5FQ1RJT05fU1VCTUlUR1JFTUxJTkxBTkdfVE9fQ0xPU0VEX0NPTk5FQ1RJT05fRVJST1IiCisJZXJyMDIwM1N1Ym1pdEJ5dGVjb2RlVG9DbG9zZWRDb25uZWN0aW9uRXJyb3IgICAgZXJyb3JDb2RlID0gIkUwMjAzX0RSSVZFUl9SRU1PVEVfQ09OTkVDVElPTl9TVUJNSVRCWVRFQ09ERV9UT19DTE9TRURfQ09OTkVDVElPTl9FUlJPUiIKIAogCS8vIGdyYXBoLmdvIGVycm9ycwogCWVycjAzMDFHZXRQYXRoT2JqZWN0SW52YWxpZFBhdGhVbmVxdWFsTGVuZ3Roc0Vycm9yIGVycm9yQ29kZSA9ICJFMDMwMV9HUkFQSF9HRVRQQVRIT0JKRUNUX1VORVFVQUxfTEFCRUxTX09CSkVDVFNfTEVOR1RIX0VSUk9SIgpAQCAtNjIsMTAgKzU2LDExIEBACiAJZXJyMDQwOEdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duVHlwZUVycm9yICAgICAgIGVycm9yQ29kZSA9ICJFMDQwOF9HUkFQSF9CSU5BUllfR0VUU0VSSUFMSVpFUlRPUkVBRF9VTktOT1dOX1RZUEVfRVJST1IiCiAJZXJyMDQwOUdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duQ3VzdG9tVHlwZUVycm9yIGVycm9yQ29kZSA9ICJFMDQwOV9HUkFQSF9CSU5BUllfR0VUU0VSSUFMSVpFUlRPUkVBRF9VTktOT1dOX0NVU1RPTV9UWVBFX0VSUk9SIgogCi0JLy8gcHJvdG9jb2wuZ28gZXJyb3JzCi0JZXJyMDUwMVJlc3BvbnNlSGFuZGxlclJlc3VsdFNldE5vdENyZWF0ZWRFcnJvciBlcnJvckNvZGUgPSAiRTA1MDFfUFJPVE9DT0xfUkVTUE9OU0VIQU5ETEVSX05PX1JFU1VMVFNFVF9PTl9EQVRBX1JFQ0VJVkUiCi0JZXJyMDUwMlJlc3BvbnNlSGFuZGxlclJlYWRMb29wRXJyb3IgICAgICAgICAgICBlcnJvckNvZGUgPSAiRTA1MDJfUFJPVE9DT0xfUkVTUE9OU0VIQU5ETEVSX1JFQURfTE9PUF9FUlJPUiIKLQllcnIwNTAzUmVzcG9uc2VIYW5kbGVyQXV0aEVycm9yICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJFMDUwM19QUk9UT0NPTF9SRVNQT05TRUhBTkRMRVJfQVVUSF9FUlJPUiIKKwkvLyByZXNwb25zZSBoYW5kbGluZyBlcnJvcnMKKwllcnIwNTAxUmVzcG9uc2VSZXN1bHRTZXROb3RDcmVhdGVkRXJyb3IgZXJyb3JDb2RlID0gIkUwNTAxX1JFU1BPTlNFX05PX1JFU1VMVFNFVF9PTl9EQVRBX1JFQ0VJVkUiCisJZXJyMDUwMlJlc3BvbnNlUmVhZExvb3BFcnJvciAgICAgICAgICAgIGVycm9yQ29kZSA9ICJFMDUwMl9SRVNQT05TRV9SRUFEX0xPT1BfRVJST1IiCisJZXJyMDUwMlJlc3BvbnNlRXJyb3IgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJFMDUwMl9SRVNQT05TRV9FUlJPUiIKKwllcnIwNTAzUmVzcG9uc2VBdXRoRXJyb3IgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIkUwNTAzX1JFU1BPTlNFX0FVVEhfRVJST1IiCiAKIAkvLyByZXN1bHQuZ28gZXJyb3JzCiAJZXJyMDYwMVJlc3VsdE5vdFZlcnRleEVycm9yICAgICAgICAgZXJyb3JDb2RlID0gIkUwNjAxX1JFU1VMVF9OT1RfVkVSVEVYX0VSUk9SIgpAQCAtODIsOSArNzcsNiBAQAogCWVycjA3MDNSZWFkTWFwTm9uU3RyaW5nS2V5RXJyb3IgICAgIGVycm9yQ29kZSA9ICJFMDcwM19TRVJJQUxJWkVSX1JFQURNQVBfTk9OX1NUUklOR19LRVlfRVJST1IiCiAJZXJyMDcwNENvbnZlcnRBcmdzTm9TZXJpYWxpemVyRXJyb3IgZXJyb3JDb2RlID0gIkUwNzA0X1NFUklBTElaRVJfQ09OVkVSVEFSR1NfTk9fU0VSSUFMSVpFUl9FUlJPUiIKIAotCS8vIHRyYW5zcG9ydGVyRmFjdG9yeS5nbyBlcnJvcnMKLQllcnIwODAxR2V0VHJhbnNwb3J0TGF5ZXJOb1R5cGVFcnJvciBlcnJvckNvZGUgPSAiRTA4MDFfVFJBTlNQT1JURVJGQUNUT1JZX0dFVFRSQU5TUE9SVExBWUVSX05PX1RZUEVfRVJST1IiCi0KIAkvLyB0cmF2ZXJzYWwuZ28gZXJyb3JzCiAJZXJyMDkwMVRvTGlzdEFub25UcmF2ZXJzYWxFcnJvciAgZXJyb3JDb2RlID0gIkUwOTAxX1RSQVZFUlNBTF9UT0xJU1RfQU5PTl9UUkFWRVJTQUxfRVJST1IiCiAJZXJyMDkwMkl0ZXJhdGVBbm9uVHJhdmVyc2FsRXJyb3IgZXJyb3JDb2RlID0gIkUwOTAyX1RSQVZFUlNBTF9JVEVSQVRFX0FOT05fVFJBVkVSU0FMX0VSUk9SIgpAQCAtOTgsOSArOTAsNiBAQAogCWVycjExMDJUcmFuc2FjdGlvblJvbGxiYWNrTm90T3BlbmVkRXJyb3IgZXJyb3JDb2RlID0gIkUxMTAyX1RSQU5TQUNUSU9OX1JPTExCQUNLX05PVF9PUEVORURfRVJST1IiCiAJZXJyMTEwM1RyYW5zYWN0aW9uQ29tbWl0Tm90T3BlbmVkRXJyb3IgICBlcnJvckNvZGUgPSAiRTExMDNfVFJBTlNBQ1RJT05fQ09NTUlUX05PVF9PUEVORURfRVJST1IiCiAJZXJyMTEwNFRyYW5zYWN0aW9uUmVwZWF0ZWRDbG9zZUVycm9yICAgICBlcnJvckNvZGUgPSAiRTExMDRfVFJBTlNBQ1RJT05fUkVQRUFURURfQ0xPU0VfRVJST1IiCi0KLQkvLyBnb3JpbGxhVHJhbnNwb3J0ZXIuZ28gZXJyb3JzCi0JZXJyMTIwMVJlcXVlc3RTaXplRXhjZWVkc1dyaXRlQnVmZmVyRXJyb3IgZXJyb3JDb2RlID0gIkUxMjAxX1JFUVVFU1RfU0laRV9FWENFRURTX1dSSVRFX0JVRkZFUl9FUlJPUiIKICkKIAogdmFyIGxvY2FsaXplciAqaTE4bi5Mb2NhbGl6ZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2dWYWx1ZS5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2dWYWx1ZS5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjllYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ1ZhbHVlLmdvCkBAIC0wLDAgKzEsNTUgQEAKKy8qCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGdyZW1saW5nbworCitpbXBvcnQgKAorCSJmbXQiCisJInN0cmluZ3MiCispCisKKy8vIEdWYWx1ZSBpcyBhIHZhcmlhYmxlIG9yIGxpdGVyYWwgdmFsdWUgdGhhdCBpcyB1c2VkIGluIGEgVHJhdmVyc2FsLiBJdCBpcyBjb21wb3NlZCBvZiBhIGtleS12YWx1ZSBwYWlyIHdoZXJlIHRoZSBrZXkKKy8vIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YXJpYWJsZSBhbmQgdGhlIHZhbHVlIGlzIHRoZSBvYmplY3QgdGhhdCB0aGUgdmFyaWFibGUgcmVzb2x2ZWQgdG8uCit0eXBlIEdWYWx1ZSBzdHJ1Y3QgeworCW5hbWUgIHN0cmluZworCXZhbHVlIGludGVyZmFjZXt9Cit9CisKKy8vIE5ld0dWYWx1ZSBjcmVhdGVzIGEgbmV3IEdWYWx1ZSB0byBiZSB1c2VkIGluIHRyYXZlcnNhbHMuIFRoZSBHVmFsdWUgbmFtZSBjYW5ub3QgYmVnaW4gd2l0aCAiXyIuCitmdW5jIE5ld0dWYWx1ZShuYW1lIHN0cmluZywgdmFsdWUgaW50ZXJmYWNle30pIEdWYWx1ZSB7CisJaWYgc3RyaW5ncy5IYXNQcmVmaXgobmFtZSwgIl8iKSB7CisJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIEdWYWx1ZSBuYW1lICcldicuIFNob3VsZCBub3Qgc3RhcnQgd2l0aCBfLiIsIG5hbWUpKQorCX0KKwlyZXR1cm4gR1ZhbHVle25hbWUsIHZhbHVlfQorfQorCisvLyBOYW1lIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIEdWYWx1ZS4KK2Z1bmMgKGd2IEdWYWx1ZSkgTmFtZSgpIHN0cmluZyB7CisJcmV0dXJuIGd2Lm5hbWUKK30KKworLy8gSXNOaWwgZGV0ZXJtaW5lcyBpZiB0aGUgdmFsdWUgaGVsZCBpcyBvZiBhIG5pbCB2YWx1ZS4KK2Z1bmMgKGd2IEdWYWx1ZSkgSXNOaWwoKSBib29sIHsKKwlyZXR1cm4gZ3YudmFsdWUgPT0gbmlsCit9CisKKy8vIFZhbHVlIHJldHVybnMgdGhlIHZhbHVlIGhlbGQgYnkgdGhlIEdWYWx1ZS4KK2Z1bmMgKGd2IEdWYWx1ZSkgVmFsdWUoKSBpbnRlcmZhY2V7fSB7CisJcmV0dXJuIGd2LnZhbHVlCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9nVmFsdWVfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2dWYWx1ZV90ZXN0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjM2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9nVmFsdWVfdGVzdC5nbwpAQCAtMCwwICsxLDg3IEBACisvKgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBncmVtbGluZ28KKworaW1wb3J0ICgKKwkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L2Fzc2VydCIKKwkidGVzdGluZyIKKykKKworZnVuYyBUZXN0R1ZhbHVlKHQgKnRlc3RpbmcuVCkgeworCisJdC5SdW4oInRlc3Qgc2ltcGxlIGdWYWx1ZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWdWYWwgOj0gTmV3R1ZhbHVlKCJpbnRWYWwiLCAyKQorCQlhc3NlcnQuRXF1YWwodCwgImludFZhbCIsIGdWYWwuTmFtZSgpKQorCQlhc3NlcnQuRXF1YWwodCwgMiwgZ1ZhbC5WYWx1ZSgpKQorCQlhc3NlcnQuRmFsc2UodCwgZ1ZhbC5Jc05pbCgpKQorCX0pCisKKwl0LlJ1bigidGVzdCBnVmFsdWUgYWxsb3cgcGFyYW1ldGVyIHJldXNlIHdpdGggYXJyYXlzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZyA6PSBOZXdHcmFwaFRyYXZlcnNhbFNvdXJjZShuaWwsIG5pbCkKKwkJdmFsIDo9IFszXWludHsxLCAyLCAzfQorCQlwYXJhbSA6PSBOZXdHVmFsdWUoImlkcyIsIHZhbCkKKwkJZ2wgOj0gZy5JbmplY3QocGFyYW0pLlYocGFyYW0pLkdyZW1saW5MYW5nCisJCWFzc2VydC5FcXVhbCh0LCAiZy5pbmplY3QoaWRzKS5WKGlkcykiLCBnbC5HZXRHcmVtbGluKCkpCisJCWFzc2VydC5FcXVhbCh0LCB2YWwsIGdsLnBhcmFtZXRlcnNbImlkcyJdKQorCX0pCisKKwl0LlJ1bigidGVzdCBnVmFsdWUgYWxsb3cgcGFyYW1ldGVyIHJldXNlIHdpdGggc2xpY2VzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZyA6PSBOZXdHcmFwaFRyYXZlcnNhbFNvdXJjZShuaWwsIG5pbCkKKwkJdmFsIDo9IFtdaW50ezEsIDIsIDN9CisJCXBhcmFtIDo9IE5ld0dWYWx1ZSgiaWRzIiwgdmFsKQorCQlnbCA6PSBnLkluamVjdChwYXJhbSkuVihwYXJhbSkuR3JlbWxpbkxhbmcKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLmluamVjdChpZHMpLlYoaWRzKSIsIGdsLkdldEdyZW1saW4oKSkKKwkJYXNzZXJ0LkVxdWFsKHQsIHZhbCwgZ2wucGFyYW1ldGVyc1siaWRzIl0pCisJfSkKKworCXQuUnVuKCJ0ZXN0IGdWYWx1ZSBhbGxvdyBwYXJhbWV0ZXIgcmV1c2Ugd2l0aCBtYXBzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZyA6PSBOZXdHcmFwaFRyYXZlcnNhbFNvdXJjZShuaWwsIG5pbCkKKwkJdmFsIDo9IG1hcFtzdHJpbmddaW50eyJmb28iOiAxLCAiYmFyIjogMn0KKwkJcGFyYW0gOj0gTmV3R1ZhbHVlKCJpZHMiLCB2YWwpCisJCWdsIDo9IGcuSW5qZWN0KHBhcmFtKS5WKHBhcmFtKS5HcmVtbGluTGFuZworCQlhc3NlcnQuRXF1YWwodCwgImcuaW5qZWN0KGlkcykuVihpZHMpIiwgZ2wuR2V0R3JlbWxpbigpKQorCQlhc3NlcnQuRXF1YWwodCwgdmFsLCBnbC5wYXJhbWV0ZXJzWyJpZHMiXSkKKwl9KQorCisJdC5SdW4oInRlc3QgZ1ZhbHVlIG5hbWUgbm90IGR1cGxpY2F0ZWQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlnIDo9IE5ld0dyYXBoVHJhdmVyc2FsU291cmNlKG5pbCwgbmlsKQorCQlwYXJhbTEgOj0gTmV3R1ZhbHVlKCJpZHMiLCBbMl1pbnR7MSwgMn0pCisJCXBhcmFtMiA6PSBOZXdHVmFsdWUoImlkcyIsIFsyXWludHsyLCAzfSkKKwkJYXNzZXJ0LlBhbmljcyh0LCBmdW5jKCkgeyBnLkluamVjdChwYXJhbTEpLlYocGFyYW0yKSB9LCAicGFyYW1ldGVyIHdpdGggbmFtZSBpZHMgYWxyZWFkeSBleGlzdHMuIikKKwl9KQorCisJdC5SdW4oInRlc3QgaW52YWxpZCBuYW1lIHRoYXQgc3RhcnRzIHdpdGggXyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWcgOj0gTmV3R3JhcGhUcmF2ZXJzYWxTb3VyY2UobmlsLCBuaWwpCisJCWFzc2VydC5QYW5pY3ModCwgZnVuYygpIHsgZy5JbmplY3QoTmV3R1ZhbHVlKCJfaWRzIiwgWzJdaW50ezEsIDJ9KSkgfSwKKwkJCSJpbnZhbGlkIEdWYWx1ZSBuYW1lIF8xLiBTaG91bGQgbm90IHN0YXJ0IHdpdGggXy4iKQorCX0pCisKKwl0LlJ1bigidGVzdCBuYW1lIGlzIHZhbGlkIGlkZW50aWZpZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlnIDo9IE5ld0dyYXBoVHJhdmVyc2FsU291cmNlKG5pbCwgbmlsKQorCQlhc3NlcnQuUGFuaWNzKHQsIGZ1bmMoKSB7IGcuSW5qZWN0KE5ld0dWYWx1ZSgiMWEiLCBbMl1pbnR7MSwgMn0pKSB9LAorCQkJImludmFsaWQgcGFyYW1ldGVyIG5hbWUgJzFhJyIpCisJfSkKKworCXQuUnVuKCJ0ZXN0IG5hbWUgaXMgbm90IGEgbnVtYmVyIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZyA6PSBOZXdHcmFwaFRyYXZlcnNhbFNvdXJjZShuaWwsIG5pbCkKKwkJYXNzZXJ0LlBhbmljcyh0LCBmdW5jKCkgeyBnLkluamVjdChOZXdHVmFsdWUoIjEiLCBbMl1pbnR7MSwgMn0pKSB9LAorCQkJImludmFsaWQgcGFyYW1ldGVyIG5hbWUgJzEnIikKKwl9KQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvZ29yaWxsYVRyYW5zcG9ydGVyLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ29yaWxsYVRyYW5zcG9ydGVyLmdvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmQ4ZTU0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL2dvcmlsbGFUcmFuc3BvcnRlci5nbworKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi1kaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi1zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi1LSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLXNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLXVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotcGFja2FnZSBncmVtbGluZ28KLQotaW1wb3J0ICgKLQkibmV0L2h0dHAiCi0JIm5ldC91cmwiCi0JInN5bmMiCi0JInRpbWUiCi0KLQkiZ2l0aHViLmNvbS9nb3JpbGxhL3dlYnNvY2tldCIKLSkKLQotY29uc3Qga2VlcEFsaXZlSW50ZXJ2YWxEZWZhdWx0ID0gNSAqIHRpbWUuU2Vjb25kCi1jb25zdCB3cml0ZURlYWRsaW5lRGVmYXVsdCA9IDMgKiB0aW1lLlNlY29uZAotY29uc3Qgd3JpdGVDaGFubmVsU2l6ZURlZmF1bHQgPSAxMDAKLWNvbnN0IGNvbm5lY3Rpb25UaW1lb3V0RGVmYXVsdCA9IDUgKiB0aW1lLlNlY29uZAotCi0vLyBSZWFkQnVmZmVyU2l6ZSBhbmQgV3JpdGVCdWZmZXJTaXplIHNwZWNpZnkgSS9PIGJ1ZmZlciBzaXplcyBpbiBieXRlcy4gVGhlIGRlZmF1bHQgaXMgMTA0ODU3Ni4KLS8vIElmIGEgYnVmZmVyIHNpemUgaXMgc2V0IHplcm8sIHRoZW4gdGhlIEdvcmlsbGEgd2Vic29ja2V0IDQwOTYgZGVmYXVsdCBzaXplIGlzIHVzZWQuIFRoZSBJL08gYnVmZmVyCi0vLyBzaXplcyBkbyBub3QgbGltaXQgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIHNlbnQgb3IgcmVjZWl2ZWQuCi1jb25zdCByZWFkQnVmZmVyU2l6ZURlZmF1bHQgPSAxMDQ4NTc2Ci1jb25zdCB3cml0ZUJ1ZmZlclNpemVEZWZhdWx0ID0gMTA0ODU3NgotCi0vLyBUcmFuc3BvcnQgbGF5ZXIgdGhhdCB1c2VzIGdvcmlsbGEvd2Vic29ja2V0OiBodHRwczovL2dpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQKLS8vIEdvcmlsbGEgV2ViU29ja2V0IGlzIGEgd2lkZWx5IHVzZWQgYW5kIHN0YWJsZSBHbyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV2ViU29ja2V0IHByb3RvY29sLgotdHlwZSBnb3JpbGxhVHJhbnNwb3J0ZXIgc3RydWN0IHsKLQl1cmwgICAgICAgICAgc3RyaW5nCi0JY29ubmVjdGlvbiAgIHdlYnNvY2tldENvbm4KLQlpc0Nsb3NlZCAgICAgYm9vbAotCWxvZ0hhbmRsZXIgICAqbG9nSGFuZGxlcgotCWNvbm5TZXR0aW5ncyAqY29ubmVjdGlvblNldHRpbmdzCi0Jd3JpdGVDaGFubmVsIGNoYW4gW11ieXRlCi0Jd2cgICAgICAgICAgICpzeW5jLldhaXRHcm91cAotfQotCi0vLyBDb25uZWN0IHVzZWQgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbi4KLWZ1bmMgKHRyYW5zcG9ydGVyICpnb3JpbGxhVHJhbnNwb3J0ZXIpIENvbm5lY3QoKSAoZXJyIGVycm9yKSB7Ci0JaWYgdHJhbnNwb3J0ZXIuY29ubmVjdGlvbiAhPSBuaWwgewotCQlyZXR1cm4KLQl9Ci0KLQl2YXIgdSAqdXJsLlVSTAotCXUsIGVyciA9IHVybC5QYXJzZSh0cmFuc3BvcnRlci51cmwpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybgotCX0KLQotCWRpYWxlciA6PSAmd2Vic29ja2V0LkRpYWxlcnsKLQkJUHJveHk6ICAgICAgICAgICAgIGh0dHAuUHJveHlGcm9tRW52aXJvbm1lbnQsCi0JCUhhbmRzaGFrZVRpbWVvdXQ6ICB0cmFuc3BvcnRlci5jb25uU2V0dGluZ3MuY29ubmVjdGlvblRpbWVvdXQsCi0JCVRMU0NsaWVudENvbmZpZzogICB0cmFuc3BvcnRlci5jb25uU2V0dGluZ3MudGxzQ29uZmlnLAotCQlFbmFibGVDb21wcmVzc2lvbjogdHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLmVuYWJsZUNvbXByZXNzaW9uLAotCQlSZWFkQnVmZmVyU2l6ZTogICAgdHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLnJlYWRCdWZmZXJTaXplLAotCQlXcml0ZUJ1ZmZlclNpemU6ICAgdHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLndyaXRlQnVmZmVyU2l6ZSwKLQl9Ci0KLQloZWFkZXIgOj0gdHJhbnNwb3J0ZXIuZ2V0QXV0aEluZm8oKS5HZXRIZWFkZXIoKQotCWlmIHRyYW5zcG9ydGVyLmNvbm5TZXR0aW5ncy5lbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgewotCQlpZiBoZWFkZXIgPT0gbmlsIHsKLQkJCWhlYWRlciA9IG1ha2UoaHR0cC5IZWFkZXIpCi0JCX0KLQkJaGVhZGVyLlNldCh1c2VyQWdlbnRIZWFkZXIsIHVzZXJBZ2VudCkKLQl9Ci0KLQkvLyBOaWwgaXMgYWNjZXB0ZWQgYXMgYSB2YWxpZCBoZWFkZXIsIHNvIGl0IGNhbiBhbHdheXMgYmUgcGFzc2VkIGRpcmVjdGx5IHRocm91Z2guCi0JY29ubiwgXywgZXJyIDo9IGRpYWxlci5EaWFsKHUuU3RyaW5nKCksIGhlYWRlcikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIGVycgotCX0KLQl0cmFuc3BvcnRlci5jb25uZWN0aW9uID0gY29ubgotCXRyYW5zcG9ydGVyLmNvbm5lY3Rpb24uU2V0UG9uZ0hhbmRsZXIoZnVuYyhzdHJpbmcpIGVycm9yIHsKLQkJZXJyIDo9IHRyYW5zcG9ydGVyLmNvbm5lY3Rpb24uU2V0UmVhZERlYWRsaW5lKHRpbWUuTm93KCkuQWRkKDIgKiB0cmFuc3BvcnRlci5jb25uU2V0dGluZ3Mua2VlcEFsaXZlSW50ZXJ2YWwpKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBlcnIKLQkJfQotCQlyZXR1cm4gbmlsCi0JfSkKLQl0cmFuc3BvcnRlci53Zy5BZGQoMSkKLQlnbyB0cmFuc3BvcnRlci53cml0ZUxvb3AoKQotCXJldHVybgotfQotCi0vLyBXcml0ZSB1c2VkIHRvIHdyaXRlIGRhdGEgdG8gdGhlIHRyYW5zcG9ydGVyLiBPcGVucyBjb25uZWN0aW9uIGlmIGNsb3NlZC4KLWZ1bmMgKHRyYW5zcG9ydGVyICpnb3JpbGxhVHJhbnNwb3J0ZXIpIFdyaXRlKGRhdGEgW11ieXRlKSBlcnJvciB7Ci0JaWYgdHJhbnNwb3J0ZXIuY29ubmVjdGlvbiA9PSBuaWwgewotCQllcnIgOj0gdHJhbnNwb3J0ZXIuQ29ubmVjdCgpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgotCQl9Ci0JfQotCS8vIE9ubHkgdmFsaWRhdGUgYnVmZmVyIHNpemUgaWYgd3JpdGVCdWZmZXJTaXplIGlzIGV4cGxpY2l0bHkgc2V0ICg+IDApCi0JLy8gV2hlbiB3cml0ZUJ1ZmZlclNpemUgaXMgMCwgbGV0IEdvcmlsbGEgV2ViU29ja2V0IGhhbmRsZSBpdCB3aXRoIGl0cyBvd24gZGVmYXVsdHMKLQlpZiB0cmFuc3BvcnRlci5jb25uU2V0dGluZ3Mud3JpdGVCdWZmZXJTaXplID4gMCAmJiBsZW4oZGF0YSkgPiB0cmFuc3BvcnRlci5jb25uU2V0dGluZ3Mud3JpdGVCdWZmZXJTaXplIHsKLQkJcmV0dXJuIG5ld0Vycm9yKGVycjEyMDFSZXF1ZXN0U2l6ZUV4Y2VlZHNXcml0ZUJ1ZmZlckVycm9yKQotCX0KLQl0cmFuc3BvcnRlci53cml0ZUNoYW5uZWwgPC0gZGF0YQotCXJldHVybiBuaWwKLX0KLQotZnVuYyAodHJhbnNwb3J0ZXIgKmdvcmlsbGFUcmFuc3BvcnRlcikgZ2V0QXV0aEluZm8oKSBBdXRoSW5mb1Byb3ZpZGVyIHsKLQlpZiB0cmFuc3BvcnRlci5jb25uU2V0dGluZ3MuYXV0aEluZm8gPT0gbmlsIHsKLQkJcmV0dXJuIE5vb3BBdXRoSW5mbwotCX0KLQlyZXR1cm4gdHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLmF1dGhJbmZvCi19Ci0KLS8vIFJlYWQgdXNlZCB0byByZWFkIGRhdGEgZnJvbSB0aGUgdHJhbnNwb3J0ZXIuIE9wZW5zIGNvbm5lY3Rpb24gaWYgY2xvc2VkLgotZnVuYyAodHJhbnNwb3J0ZXIgKmdvcmlsbGFUcmFuc3BvcnRlcikgUmVhZCgpIChbXWJ5dGUsIGVycm9yKSB7Ci0JaWYgdHJhbnNwb3J0ZXIuY29ubmVjdGlvbiA9PSBuaWwgewotCQllcnIgOj0gdHJhbnNwb3J0ZXIuQ29ubmVjdCgpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQl9Ci0KLQllcnIgOj0gdHJhbnNwb3J0ZXIuY29ubmVjdGlvbi5TZXRSZWFkRGVhZGxpbmUodGltZS5Ob3coKS5BZGQodHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsICogMikpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlfLCBieXRlcywgZXJyIDo9IHRyYW5zcG9ydGVyLmNvbm5lY3Rpb24uUmVhZE1lc3NhZ2UoKQotCXJldHVybiBieXRlcywgZXJyCi0KLX0KLQotLy8gQ2xvc2UgdXNlZCB0byBjbG9zZSBhIGNvbm5lY3Rpb24gaWYgaXQgaXMgb3BlbmVkLgotZnVuYyAodHJhbnNwb3J0ZXIgKmdvcmlsbGFUcmFuc3BvcnRlcikgQ2xvc2UoKSAoZXJyIGVycm9yKSB7Ci0JaWYgIXRyYW5zcG9ydGVyLmlzQ2xvc2VkIHsKLQkJaWYgdHJhbnNwb3J0ZXIud3JpdGVDaGFubmVsICE9IG5pbCB7Ci0JCQljbG9zZSh0cmFuc3BvcnRlci53cml0ZUNoYW5uZWwpCi0JCX0KLQkJaWYgdHJhbnNwb3J0ZXIud2cgIT0gbmlsIHsKLQkJCXRyYW5zcG9ydGVyLndnLldhaXQoKQotCQl9Ci0JCWVyciA9IHRyYW5zcG9ydGVyLmNvbm5lY3Rpb24uQ2xvc2UoKQotCQl0cmFuc3BvcnRlci5pc0Nsb3NlZCA9IHRydWUKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gZXJyCi0JCX0KLQl9Ci0JcmV0dXJuCi19Ci0KLS8vIElzQ2xvc2VkIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0cmFuc3BvcnRlciBpcyBjbG9zZWQuCi1mdW5jICh0cmFuc3BvcnRlciAqZ29yaWxsYVRyYW5zcG9ydGVyKSBJc0Nsb3NlZCgpIGJvb2wgewotCXJldHVybiB0cmFuc3BvcnRlci5pc0Nsb3NlZAotfQotCi1mdW5jICh0cmFuc3BvcnRlciAqZ29yaWxsYVRyYW5zcG9ydGVyKSB3cml0ZUxvb3AoKSB7Ci0JZGVmZXIgdHJhbnNwb3J0ZXIud2cuRG9uZSgpCi0KLQl0aWNrZXIgOj0gdGltZS5OZXdUaWNrZXIodHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsKQotCWRlZmVyIHRpY2tlci5TdG9wKCkKLQotCWZvciB7Ci0JCXNlbGVjdCB7Ci0JCWNhc2UgbWVzc2FnZSwgb2sgOj0gPC10cmFuc3BvcnRlci53cml0ZUNoYW5uZWw6Ci0JCQlpZiAhb2sgewotCQkJCS8vIENoYW5uZWwgd2FzIGNsb3NlZCwgd2UgY2FuIGRpc2Nvbm5lY3QgYW5kIGV4aXQuCi0JCQkJcmV0dXJuCi0JCQl9Ci0KLQkJCS8vIFNldCB3cml0ZSBkZWFkbGluZS4KLQkJCWVyciA6PSB0cmFuc3BvcnRlci5jb25uZWN0aW9uLlNldFdyaXRlRGVhZGxpbmUodGltZS5Ob3coKS5BZGQodHJhbnNwb3J0ZXIuY29ublNldHRpbmdzLndyaXRlRGVhZGxpbmUpKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdHJhbnNwb3J0ZXIubG9nSGFuZGxlci5sb2dmKEVycm9yLCBmYWlsZWRUb1NldFdyaXRlRGVhZGxpbmUsIGVyci5FcnJvcigpKQotCQkJCXJldHVybgotCQkJfQotCi0JCQkvLyBXcml0ZSBiaW5hcnkgbWVzc2FnZSB0aGF0IHdhcyBzdWJtaXR0ZWQgdG8gY2hhbm5lbC4KLQkJCWVyciA9IHRyYW5zcG9ydGVyLmNvbm5lY3Rpb24uV3JpdGVNZXNzYWdlKHdlYnNvY2tldC5CaW5hcnlNZXNzYWdlLCBtZXNzYWdlKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdHJhbnNwb3J0ZXIubG9nSGFuZGxlci5sb2dmKEVycm9yLCBmYWlsZWRUb1dyaXRlTWVzc2FnZSwgIkJpbmFyeU1lc3NhZ2UiLCBlcnIuRXJyb3IoKSkKLQkJCQlyZXR1cm4KLQkJCX0KLQkJY2FzZSA8LXRpY2tlci5DOgotCQkJLy8gU2V0IHdyaXRlIGRlYWRsaW5lLgotCQkJZXJyIDo9IHRyYW5zcG9ydGVyLmNvbm5lY3Rpb24uU2V0V3JpdGVEZWFkbGluZSh0aW1lLk5vdygpLkFkZCh0cmFuc3BvcnRlci5jb25uU2V0dGluZ3Mua2VlcEFsaXZlSW50ZXJ2YWwpKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdHJhbnNwb3J0ZXIubG9nSGFuZGxlci5sb2dmKEVycm9yLCBmYWlsZWRUb1NldFdyaXRlRGVhZGxpbmUsIGVyci5FcnJvcigpKQotCQkJCXJldHVybgotCQkJfQotCi0JCQkvLyBXcml0ZSBwb25nIG1lc3NhZ2UuCi0JCQllcnIgPSB0cmFuc3BvcnRlci5jb25uZWN0aW9uLldyaXRlTWVzc2FnZSh3ZWJzb2NrZXQuUGluZ01lc3NhZ2UsIG5pbCkKLQkJCWlmIGVyciAhPSBuaWwgewotCQkJCXRyYW5zcG9ydGVyLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgZmFpbGVkVG9Xcml0ZU1lc3NhZ2UsICJQaW5nTWVzc2FnZSIsIGVyci5FcnJvcigpKQotCQkJCXJldHVybgotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvZ29yaWxsYVRyYW5zcG9ydGVyX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9nb3JpbGxhVHJhbnNwb3J0ZXJfdGVzdC5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhjYWIyZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9nb3JpbGxhVHJhbnNwb3J0ZXJfdGVzdC5nbworKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi1kaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi1zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi1LSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLXNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLXVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotcGFja2FnZSBncmVtbGluZ28KLQotaW1wb3J0ICgKLQkiZXJyb3JzIgotCSJzeW5jIgotCSJ0ZXN0aW5nIgotCSJ0aW1lIgotCi0JImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCi0JImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9tb2NrIgotCSJnb2xhbmcub3JnL3gvdGV4dC9sYW5ndWFnZSIKLSkKLQotY29uc3QgbW9ja01lc3NhZ2Ugc3RyaW5nID0gIk1vY2tNZXNzYWdlIgotY29uc3QgbW9ja1JlYWRFcnJNZXNzYWdlIHN0cmluZyA9ICJNb2NrUmVhZE1lc3NhZ2VFcnJNZXNzYWdlIgotCi10eXBlIG1vY2tXZWJzb2NrZXRDb25uIHN0cnVjdCB7Ci0JbW9jay5Nb2NrCi19Ci0KLWZ1bmMgKGNvbm4gKm1vY2tXZWJzb2NrZXRDb25uKSBXcml0ZU1lc3NhZ2UobWVzc2FnZVR5cGUgaW50LCBkYXRhIFtdYnl0ZSkgZXJyb3IgewotCWFyZ3MgOj0gY29ubi5DYWxsZWQobWVzc2FnZVR5cGUsIGRhdGEpCi0JcmV0dXJuIGFyZ3MuRXJyb3IoMCkKLX0KLQotZnVuYyAoY29ubiAqbW9ja1dlYnNvY2tldENvbm4pIFJlYWRNZXNzYWdlKCkgKGludCwgW11ieXRlLCBlcnJvcikgewotCWFyZ3MgOj0gY29ubi5DYWxsZWQoKQotCXJldHVybiBhcmdzLkdldCgwKS4oaW50KSwgYXJncy5HZXQoMSkuKFtdYnl0ZSksIGFyZ3MuRXJyb3IoMikKLX0KLQotZnVuYyAoY29ubiAqbW9ja1dlYnNvY2tldENvbm4pIENsb3NlKCkgZXJyb3IgewotCWFyZ3MgOj0gY29ubi5DYWxsZWQoKQotCXJldHVybiBhcmdzLkVycm9yKDApCi19Ci0KLWZ1bmMgKGNvbm4gKm1vY2tXZWJzb2NrZXRDb25uKSBTZXRSZWFkRGVhZGxpbmUodGltZSB0aW1lLlRpbWUpIGVycm9yIHsKLQlhcmdzIDo9IGNvbm4uQ2FsbGVkKHRpbWUpCi0JcmV0dXJuIGFyZ3MuRXJyb3IoMCkKLX0KLQotZnVuYyAoY29ubiAqbW9ja1dlYnNvY2tldENvbm4pIFNldFdyaXRlRGVhZGxpbmUodGltZSB0aW1lLlRpbWUpIGVycm9yIHsKLQlhcmdzIDo9IGNvbm4uQ2FsbGVkKHRpbWUpCi0JcmV0dXJuIGFyZ3MuRXJyb3IoMCkKLX0KLQotZnVuYyAoY29ubiAqbW9ja1dlYnNvY2tldENvbm4pIFNldFBvbmdIYW5kbGVyKGggZnVuYyhhcHBEYXRhIHN0cmluZykgZXJyb3IpIHsKLQljb25uLkNhbGxlZChoKQotfQotCi1mdW5jIGdldE5ld0dvcmlsbGFUcmFuc3BvcnRlcigpIChnb3JpbGxhVHJhbnNwb3J0ZXIsICptb2NrV2Vic29ja2V0Q29ubikgewotCXJldHVybiBnZXROZXdHb3JpbGxhVHJhbnNwb3J0ZXJXaXRoU2V0dGluZ3MobmV3RGVmYXVsdENvbm5lY3Rpb25TZXR0aW5ncygpKQotfQotCi1mdW5jIGdldE5ld0dvcmlsbGFUcmFuc3BvcnRlcldpdGhTZXR0aW5ncyhjb25uZWN0aW9uU2V0dGluZ3MgKmNvbm5lY3Rpb25TZXR0aW5ncykgKGdvcmlsbGFUcmFuc3BvcnRlciwgKm1vY2tXZWJzb2NrZXRDb25uKSB7Ci0JbW9ja0Nvbm4gOj0gbmV3KG1vY2tXZWJzb2NrZXRDb25uKQotCXJldHVybiBnb3JpbGxhVHJhbnNwb3J0ZXJ7Ci0JCXVybDogICAgICAgICAgIndzOi8vbW9ja0hvc3Q6ODE4Mi9ncmVtbGluIiwKLQkJbG9nSGFuZGxlcjogICBuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEluZm8sIGxhbmd1YWdlLkVuZ2xpc2gpLAotCQljb25uZWN0aW9uOiAgIG1vY2tDb25uLAotCQlpc0Nsb3NlZDogICAgIGZhbHNlLAotCQljb25uU2V0dGluZ3M6IGNvbm5lY3Rpb25TZXR0aW5ncywKLQkJd3JpdGVDaGFubmVsOiBtYWtlKGNoYW4gW11ieXRlLCAxMDApLAotCQl3ZzogICAgICAgICAgICZzeW5jLldhaXRHcm91cHt9LAotCX0sIG1vY2tDb25uCi19Ci0KLWZ1bmMgVGVzdEdvcmlsbGFUcmFuc3BvcnRlcih0ICp0ZXN0aW5nLlQpIHsKLQl0LlJ1bigiU3VjY2VzcyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXRyYW5zcG9ydGVyLCBtb2NrQ29ubiA6PSBnZXROZXdHb3JpbGxhVHJhbnNwb3J0ZXIoKQotCQl0LlJ1bigiV3JpdGVNZXNzYWdlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCW1vY2tDb25uLk9uKCJXcml0ZU1lc3NhZ2UiLCAyLCBtYWtlKFtdYnl0ZSwgMTApKS5SZXR1cm4obmlsKQotCQkJZXJyIDo9IHRyYW5zcG9ydGVyLldyaXRlKG1ha2UoW11ieXRlLCAxMCkpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJfSkKLQotCQl0LlJ1bigiUmVhZCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQltb2NrQ29ubi5PbigiUmVhZE1lc3NhZ2UiKS5SZXR1cm4oMCwgW11ieXRlKG1vY2tNZXNzYWdlKSwgbmlsKQotCQkJbW9ja0Nvbm4uT24oIlNldFBvbmdIYW5kbGVyIiwgbW9jay5Bbnl0aGluZ09mVHlwZSgiZnVuYyhzdHJpbmcpIGVycm9yIikpLlJldHVybihuaWwpCi0JCQltb2NrQ29ubi5PbigiU2V0UmVhZERlYWRsaW5lIiwgbW9jay5Bbnl0aGluZykuUmV0dXJuKG5pbCkKLQkJCW1vY2tDb25uLk9uKCJTZXRXcml0ZURlYWRsaW5lIiwgbW9jay5Bbnl0aGluZykuUmV0dXJuKG5pbCkKLQkJCW1lc3NhZ2UsIGVyciA6PSB0cmFuc3BvcnRlci5SZWFkKCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIG1vY2tNZXNzYWdlLCBzdHJpbmcobWVzc2FnZVs6XSkpCi0JCX0pCi0KLQkJdC5SdW4oIkNsb3NlIGFuZCBJc0Nsb3NlZCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQltb2NrQ29ubi5PbigiQ2xvc2UiKS5SZXR1cm4obmlsKQotCQkJaXNDbG9zZWQgOj0gdHJhbnNwb3J0ZXIuSXNDbG9zZWQoKQotCQkJYXNzZXJ0LkZhbHNlKHQsIGlzQ2xvc2VkKQotCQkJZXJyIDo9IHRyYW5zcG9ydGVyLkNsb3NlKCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJaXNDbG9zZWQgPSB0cmFuc3BvcnRlci5Jc0Nsb3NlZCgpCi0JCQlhc3NlcnQuVHJ1ZSh0LCBpc0Nsb3NlZCkKLQkJfSkKLQl9KQotCi0JdC5SdW4oIkVycm9yIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJdHJhbnNwb3J0ZXIsIG1vY2tDb25uIDo9IGdldE5ld0dvcmlsbGFUcmFuc3BvcnRlcigpCi0JCXQuUnVuKCJSZWFkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCW1vY2tDb25uLk9uKCJSZWFkTWVzc2FnZSIpLlJldHVybigwLCBbXWJ5dGV7fSwgZXJyb3JzLk5ldyhtb2NrUmVhZEVyck1lc3NhZ2UpKQotCQkJbW9ja0Nvbm4uT24oIlNldFBvbmdIYW5kbGVyIiwgbW9jay5Bbnl0aGluZ09mVHlwZSgiZnVuYyhzdHJpbmcpIGVycm9yIikpLlJldHVybihuaWwpCi0JCQltb2NrQ29ubi5PbigiU2V0UmVhZERlYWRsaW5lIiwgbW9jay5Bbnl0aGluZykuUmV0dXJuKG5pbCkKLQkJCW1vY2tDb25uLk9uKCJTZXRXcml0ZURlYWRsaW5lIiwgbW9jay5Bbnl0aGluZykuUmV0dXJuKG5pbCkKLQkJCW1vY2tDb25uLk9uKCJXcml0ZU1lc3NhZ2UiLCBtb2NrLkFueXRoaW5nLCBtb2NrLkFueXRoaW5nKS5SZXR1cm4obmlsKQotCQkJXywgZXJyIDo9IHRyYW5zcG9ydGVyLlJlYWQoKQotCQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgbW9ja1JlYWRFcnJNZXNzYWdlLCBlcnIuRXJyb3IoKSkKLQkJfSkKLQotCQl0LlJ1bigiQ2xvc2UgYW5kIElzQ2xvc2VkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCW1vY2tDb25uLk9uKCJDbG9zZSIpLlJldHVybihuaWwpCi0JCQlpc0Nsb3NlZCA6PSB0cmFuc3BvcnRlci5Jc0Nsb3NlZCgpCi0JCQlhc3NlcnQuRmFsc2UodCwgaXNDbG9zZWQpCi0JCQllcnIgOj0gdHJhbnNwb3J0ZXIuQ2xvc2UoKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlpc0Nsb3NlZCA9IHRyYW5zcG9ydGVyLklzQ2xvc2VkKCkKLQkJCWFzc2VydC5UcnVlKHQsIGlzQ2xvc2VkKQotCQl9KQotCX0pCi0KLQl0LlJ1bigiU2hvdWxkIGVycm9yIGlmIHJlcXVlc3Qgc2l6ZSBleGNlZWRzIFdyaXRlQnVmZmVyU2l6ZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWNvbm5TZXR0aW5ncyA6PSBuZXdEZWZhdWx0Q29ubmVjdGlvblNldHRpbmdzKCkKLQkJY29ublNldHRpbmdzLndyaXRlQnVmZmVyU2l6ZSA9IDMwCi0JCXRyYW5zcG9ydGVyLCBtb2NrQ29ubiA6PSBnZXROZXdHb3JpbGxhVHJhbnNwb3J0ZXJXaXRoU2V0dGluZ3MoY29ublNldHRpbmdzKQotCi0JCXQuUnVuKCJTbWFsbCBtZXNzYWdlIHNob3VsZCBzdWNjZWVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCW1vY2tDb25uLk9uKCJXcml0ZU1lc3NhZ2UiLCAyLCBtYWtlKFtdYnl0ZSwgMTApKS5SZXR1cm4obmlsKQotCQkJZXJyIDo9IHRyYW5zcG9ydGVyLldyaXRlKG1ha2UoW11ieXRlLCAxMCkpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJfSkKLQotCQl0LlJ1bigiTGFyZ2UgbWVzc2FnZSBzaG91bGQgZXJyb3IiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJbW9ja0Nvbm4uT24oIldyaXRlTWVzc2FnZSIsIDIsIG1ha2UoW11ieXRlLCAxMCkpLlJldHVybihuaWwpCi0JCQllcnIgOj0gdHJhbnNwb3J0ZXIuV3JpdGUobWFrZShbXWJ5dGUsIDMxKSkKLQkJCWFzc2VydC5FcXVhbCh0LCBuZXdFcnJvcihlcnIxMjAxUmVxdWVzdFNpemVFeGNlZWRzV3JpdGVCdWZmZXJFcnJvciksIGVycikKLQkJfSkKLQotCQl0LlJ1bigiRXhhY3Qgc2l6ZSBzaG91bGQgc3VjY2VlZCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQltb2NrQ29ubi5PbigiV3JpdGVNZXNzYWdlIiwgMiwgbWFrZShbXWJ5dGUsIDEwKSkuUmV0dXJuKG5pbCkKLQkJCWVyciA6PSB0cmFuc3BvcnRlci5Xcml0ZShtYWtlKFtdYnl0ZSwgMzApKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCX0pCi0JfSkKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2dyYXBoQmluYXJ5LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnkuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNmE4ODguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnkuZ28KKysrIC9kZXYvbnVsbApAQCAtMSwxNTE0ICswLDAgQEAKLS8qCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1wYWNrYWdlIGdyZW1saW5nbwotCi1pbXBvcnQgKAotCSJieXRlcyIKLQkiZW5jb2RpbmcvYmluYXJ5IgotCSJmbXQiCi0JIm1hdGgiCi0JIm1hdGgvYmlnIgotCSJyZWZsZWN0IgotCSJ0aW1lIgotCi0JImdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQiCi0pCi0KLS8vIFZlcnNpb24gMS4wCi0KLS8vIGRhdGFUeXBlIGdyYXBoQmluYXJ5IHR5cGVzLgotdHlwZSBkYXRhVHlwZSB1aW50OAotCi0vLyBkYXRhVHlwZSBkZWZpbmVkIGFzIGNvbnN0YW50cy4KLWNvbnN0ICgKLQljdXN0b21UeXBlICAgICAgICAgICAgZGF0YVR5cGUgPSAweDAwCi0JaW50VHlwZSAgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgwMQotCWxvbmdUeXBlICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MDIKLQlzdHJpbmdUeXBlICAgICAgICAgICAgZGF0YVR5cGUgPSAweDAzCi0JZGF0ZVR5cGUgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgwNAotCXRpbWVzdGFtcFR5cGUgICAgICAgICBkYXRhVHlwZSA9IDB4MDUKLQljbGFzc1R5cGUgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDA2Ci0JZG91YmxlVHlwZSAgICAgICAgICAgIGRhdGFUeXBlID0gMHgwNwotCWZsb2F0VHlwZSAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MDgKLQlsaXN0VHlwZSAgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDA5Ci0JbWFwVHlwZSAgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgwYQotCXNldFR5cGUgICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MGIKLQl1dWlkVHlwZSAgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDBjCi0JZWRnZVR5cGUgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgwZAotCXBhdGhUeXBlICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MGUKLQlwcm9wZXJ0eVR5cGUgICAgICAgICAgZGF0YVR5cGUgPSAweDBmCi0JdmVydGV4VHlwZSAgICAgICAgICAgIGRhdGFUeXBlID0gMHgxMQotCXZlcnRleFByb3BlcnR5VHlwZSAgICBkYXRhVHlwZSA9IDB4MTIKLQliYXJyaWVyVHlwZSAgICAgICAgICAgZGF0YVR5cGUgPSAweDEzCi0JYmluZGluZ1R5cGUgICAgICAgICAgIGRhdGFUeXBlID0gMHgxNAotCWNhcmRpbmFsaXR5VHlwZSAgICAgICBkYXRhVHlwZSA9IDB4MTYKLQlieXRlY29kZVR5cGUgICAgICAgICAgZGF0YVR5cGUgPSAweDE1Ci0JY29sdW1uVHlwZSAgICAgICAgICAgIGRhdGFUeXBlID0gMHgxNwotCWRpcmVjdGlvblR5cGUgICAgICAgICBkYXRhVHlwZSA9IDB4MTgKLQlvcGVyYXRvclR5cGUgICAgICAgICAgZGF0YVR5cGUgPSAweDE5Ci0Jb3JkZXJUeXBlICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgxYQotCXBpY2tUeXBlICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MWIKLQlwb3BUeXBlICAgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDFjCi0JbGFtYmRhVHlwZSAgICAgICAgICAgIGRhdGFUeXBlID0gMHgxZAotCXBUeXBlICAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MWUKLQlzY29wZVR5cGUgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDFmCi0JdFR5cGUgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgyMAotCXRyYXZlcnNlclR5cGUgICAgICAgICBkYXRhVHlwZSA9IDB4MjEKLQliaWdEZWNpbWFsVHlwZSAgICAgICAgZGF0YVR5cGUgPSAweDIyCi0JYmlnSW50ZWdlclR5cGUgICAgICAgIGRhdGFUeXBlID0gMHgyMwotCWJ5dGVUeXBlICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MjQKLQlieXRlQnVmZmVyICAgICAgICAgICAgZGF0YVR5cGUgPSAweDI1Ci0Jc2hvcnRUeXBlICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgyNgotCWJvb2xlYW5UeXBlICAgICAgICAgICBkYXRhVHlwZSA9IDB4MjcKLQl0ZXh0UFR5cGUgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDI4Ci0JdHJhdmVyc2FsU3RyYXRlZ3lUeXBlIGRhdGFUeXBlID0gMHgyOQotCWJ1bGtTZXRUeXBlICAgICAgICAgICBkYXRhVHlwZSA9IDB4MmEKLQltZXJnZVR5cGUgICAgICAgICAgICAgZGF0YVR5cGUgPSAweDJlCi0JZHRUeXBlICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHgyZgotCWdUeXBlVHlwZSAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MzAKLQltZXRyaWNzVHlwZSAgICAgICAgICAgZGF0YVR5cGUgPSAweDJjCi0JdHJhdmVyc2FsTWV0cmljc1R5cGUgIGRhdGFUeXBlID0gMHgyZAotCWR1cmF0aW9uVHlwZSAgICAgICAgICBkYXRhVHlwZSA9IDB4ODEKLQlvZmZzZXREYXRlVGltZVR5cGUgICAgZGF0YVR5cGUgPSAweDg4Ci0JbnVsbFR5cGUgICAgICAgICAgICAgIGRhdGFUeXBlID0gMHhGRQotKQotCi12YXIgbnVsbEJ5dGVzID0gW11ieXRle251bGxUeXBlLmdldENvZGVCeXRlKCksIDB4MDF9Ci0KLWZ1bmMgKGRhdGFUeXBlIGRhdGFUeXBlKSBnZXRDb2RlQnl0ZSgpIGJ5dGUgewotCXJldHVybiBieXRlKGRhdGFUeXBlKQotfQotCi1mdW5jIChkYXRhVHlwZSBkYXRhVHlwZSkgZ2V0Q29kZUJ5dGVzKCkgW11ieXRlIHsKLQlyZXR1cm4gW11ieXRle2RhdGFUeXBlLmdldENvZGVCeXRlKCl9Ci19Ci0KLS8vIGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIgc3RydWN0IGZvciB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbGl6ZXJzLgotdHlwZSBncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyIHN0cnVjdCB7Ci0JbG9nSGFuZGxlciAqbG9nSGFuZGxlcgotfQotCi1mdW5jIChzZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSB3cml0ZVR5cGUodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB3cml0ZXIgd3JpdGVyKSAoW11ieXRlLCBlcnJvcikgewotCXJldHVybiBzZXJpYWxpemVyLndyaXRlVHlwZVZhbHVlKHZhbHVlLCBidWZmZXIsIHdyaXRlciwgdHJ1ZSkKLX0KLQotZnVuYyAoc2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgd3JpdGVUeXBlVmFsdWUodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB3cml0ZXIgd3JpdGVyLCBudWxsYWJsZSBib29sKSAoW11ieXRlLCBlcnJvcikgewotCWlmIHZhbHVlID09IG5pbCB7Ci0JCWlmICFudWxsYWJsZSB7Ci0JCQlzZXJpYWxpemVyLmxvZ0hhbmRsZXIubG9nKEVycm9yLCB1bmV4cGVjdGVkTnVsbCkKLQkJCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDFXcml0ZVR5cGVWYWx1ZVVuZXhwZWN0ZWROdWxsRXJyb3IpCi0JCX0KLQkJc2VyaWFsaXplci53cml0ZVZhbHVlRmxhZ051bGwoYnVmZmVyKQotCQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotCX0KLQlpZiBudWxsYWJsZSB7Ci0JCXNlcmlhbGl6ZXIud3JpdGVWYWx1ZUZsYWdOb25lKGJ1ZmZlcikKLQl9Ci0JcmV0dXJuIHdyaXRlcih2YWx1ZSwgYnVmZmVyLCBzZXJpYWxpemVyKQotfQotCi0vLyBGb3JtYXQ6IHtsZW5ndGh9e2l0ZW1fMH0uLi57aXRlbV9ufQotZnVuYyBsaXN0V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdiA6PSByZWZsZWN0LlZhbHVlT2YodmFsdWUpCi0JdmFsTGVuIDo9IHYuTGVuKCkKLQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIodmFsTGVuKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWZvciBpIDo9IDA7IGkgPCB2YWxMZW47IGkrKyB7Ci0JCV8sIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZSh2LkluZGV4KGkpLkludGVyZmFjZSgpLCBidWZmZXIpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQl9Ci0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotLy8gRm9ybWF0OiB7bGVuZ3RofXt2YWx1ZX0KLWZ1bmMgYnl0ZUJ1ZmZlcldyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCXZhciB2IEJ5dGVCdWZmZXIKLQlpZiByZWZsZWN0LlR5cGVPZih2YWx1ZSkuS2luZCgpID09IHJlZmxlY3QuUHRyIHsKLQkJdiA9ICoodmFsdWUuKCpCeXRlQnVmZmVyKSkKLQl9IGVsc2UgewotCQl2ID0gdmFsdWUuKEJ5dGVCdWZmZXIpCi0JfQotCi0JZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKGxlbih2LkRhdGEpKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWJ1ZmZlci5Xcml0ZSh2LkRhdGEpCi0KLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotfQotCi0vLyBGb3JtYXQ6IHtsZW5ndGh9e2l0ZW1fMH0uLi57aXRlbV9ufQotLy8gSXRlbSBmb3JtYXQ6IHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9Ci1mdW5jIG1hcFdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCWlmIHZhbHVlID09IG5pbCB7Ci0JCV8sIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZVZhbHVlKGludDMyKDApLCBidWZmZXIsIGZhbHNlKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgbmlsCi0JfQotCi0JdiA6PSByZWZsZWN0LlZhbHVlT2YodmFsdWUpCi0Ja2V5cyA6PSB2Lk1hcEtleXMoKQotCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMihsZW4oa2V5cykpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JZm9yIF8sIGsgOj0gcmFuZ2Uga2V5cyB7Ci0JCWNvbnZLZXkgOj0gay5Db252ZXJ0KHYuVHlwZSgpLktleSgpKQotCQkvLyBzZXJpYWxpemUgawotCQlfLCBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUoay5JbnRlcmZhY2UoKSwgYnVmZmVyKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCS8vIHNlcmlhbGl6ZSB2Lk1hcEluZGV4KGNfa2V5KQotCQl2YWwgOj0gdi5NYXBJbmRleChjb252S2V5KQotCQlfLCBlcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZSh2YWwuSW50ZXJmYWNlKCksIGJ1ZmZlcikKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gbmlsLCBlcnIKLQkJfQotCX0KLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotfQotCi1mdW5jIGluc3RydWN0aW9uV3JpdGVyKGluc3RydWN0aW9ucyBbXWluc3RydWN0aW9uLCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKLQkvLyBXcml0ZSB7c3RlcHNfbGVuZ3RofSwgaS5lIG51bWJlciBvZiBzdGVwcy4KLQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIobGVuKGluc3RydWN0aW9ucykpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCi0JLy8gV3JpdGUge3N0ZXBfMH0gdG8ge3N0ZXBfbn0uCi0JZm9yIF8sIGluc3RydWN0aW9uIDo9IHJhbmdlIGluc3RydWN0aW9ucyB7Ci0JCS8vIFdyaXRlIHtuYW1lfSBvZiB7c3RlcF9pfS4KLQkJLy8gTm90ZToge25hbWV9IGZvbGxvd3Mgc3RyaW5nIHdyaXRpbmcsIHRoZXJlZm9yZSB3cml0ZSBzdHJpbmcgbGVuZ3RoIGZvbGxvd2VkIGJ5IGFjdHVhbCBzdHJpbmcuCi0JCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUoaW5zdHJ1Y3Rpb24ub3BlcmF0b3IsIGJ1ZmZlciwgZmFsc2UpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgotCQl9Ci0KLQkJLy8gV3JpdGUge3ZhbHVlc19sZW5ndGh9IG9mIHtzdGVwX2l9LgotCQllcnIgPSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMihsZW4oaW5zdHJ1Y3Rpb24uYXJndW1lbnRzKSkpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIGVycgotCQl9Ci0KLQkJLy8gV3JpdGUge3ZhbHVlc18wfSB0byB7dmFsdWVzX259LgotCQlmb3IgXywgYXJndW1lbnQgOj0gcmFuZ2UgaW5zdHJ1Y3Rpb24uYXJndW1lbnRzIHsKLQkJCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlKGFyZ3VtZW50LCBidWZmZXIpCi0JCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1cm4gZXJyCi0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIG5pbAotfQotCi0vLyBGb3JtYXQ6IHtzdGVwc19sZW5ndGh9e3N0ZXBfMH3igKZ7c3RlcF9ufXtzb3VyY2VzX2xlbmd0aH17c291cmNlXzB94oCme3NvdXJjZV9ufQotLy8gV2hlcmU6Ci0vLwotLy8JCQl7c3RlcHNfbGVuZ3RofSBpcyBhbiBJbnQgdmFsdWUgZGVzY3JpYmluZyB0aGUgYW1vdW50IG9mIHN0ZXBzLgotLy8JCQl7c3RlcF9pfSBpcyBjb21wb3NlZCBvZiB7bmFtZX17dmFsdWVzX2xlbmd0aH17dmFsdWVfMH3igKZ7dmFsdWVfbn0sIHdoZXJlOgotLy8JICAgICB7bmFtZX0gaXMgYSBTdHJpbmcuIFRoaXMgaXMgYWxzbyBrbm93biBhcyB0aGUgb3BlcmF0b3IuCi0vLwkJCXt2YWx1ZXNfbGVuZ3RofSBpcyBhbiBJbnQgZGVzY3JpYmluZyB0aGUgYW1vdW50IHZhbHVlcy4KLS8vCQkJe3ZhbHVlX2l9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9IGRlc2NyaWJpbmcgdGhlIHN0ZXAgYXJndW1lbnQuCi1mdW5jIGJ5dGVjb2RlV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdmFyIGJjIEJ5dGVjb2RlCi0Jc3dpdGNoIHR5cGVkVmFsIDo9IHZhbHVlLih0eXBlKSB7Ci0JY2FzZSAqR3JhcGhUcmF2ZXJzYWw6Ci0JCWJjID0gKnR5cGVkVmFsLkJ5dGVjb2RlCi0JY2FzZSBCeXRlY29kZToKLQkJYmMgPSB0eXBlZFZhbAotCWNhc2UgKkJ5dGVjb2RlOgotCQliYyA9ICp0eXBlZFZhbAotCWRlZmF1bHQ6Ci0JCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDJCeXRlY29kZVdyaXRlckVycm9yKQotCX0KLQotCS8vIFdyaXRlIHtzdGVwc19sZW5ndGh9IGFuZCB7c3RlcF8wfSB0aHJvdWdoIHtzdGVwX259LCB0aGVuIHtzb3VyY2VzX2xlbmd0aH0gYW5kIHtzb3VyY2VfMH0gdGhyb3VnaCB7c291cmNlX259Ci0JZXJyIDo9IGluc3RydWN0aW9uV3JpdGVyKGJjLnN0ZXBJbnN0cnVjdGlvbnMsIGJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQllcnIgPSBpbnN0cnVjdGlvbldyaXRlcihiYy5zb3VyY2VJbnN0cnVjdGlvbnMsIGJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotfQotCi1mdW5jIHN0cmluZ1dyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKGxlbih2YWx1ZS4oc3RyaW5nKSkpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JXywgZXJyID0gYnVmZmVyLldyaXRlU3RyaW5nKHZhbHVlLihzdHJpbmcpKQotCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgZXJyCi19Ci0KLWZ1bmMgbG9uZ1dyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0Jc3dpdGNoIHYgOj0gdmFsdWUuKHR5cGUpIHsKLQljYXNlIGludDoKLQkJdmFsdWUgPSBpbnQ2NCh2KQotCWNhc2UgdWludDMyOgotCQl2YWx1ZSA9IGludDY0KHYpCi0JfQotCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZSkKLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIGVycgotfQotCi1mdW5jIGludFdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0Jc3dpdGNoIHYgOj0gdmFsdWUuKHR5cGUpIHsKLQljYXNlIHVpbnQxNjoKLQkJdmFsdWUgPSBpbnQzMih2KQotCX0KLQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUuKGludDMyKSkKLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIGVycgotfQotCi1mdW5jIHNob3J0V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgXyAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQlzd2l0Y2ggdiA6PSB2YWx1ZS4odHlwZSkgewotCWNhc2UgaW50ODoKLQkJdmFsdWUgPSBpbnQxNih2KQotCX0KLQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUuKGludDE2KSkKLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIGVycgotfQotCi0vLyBHb2xhbmcgc3RvcmVzIEJpZ0ludGVnZXJzIHdpdGggYmlnLkludCB0eXBlcwotLy8gaXQgY29udGFpbnMgYW4gdW5zaWduZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBhbmQgdXNlcyBhIGJvb2xlYW4gdG8gdHJhY2sgK3ZlIGFuZCAtdmUKLS8vIGdldFNpZ25lZEJ5dGVzRnJvbUJpZ0ludCBnaXZlcyB1cyB0aGUgc2lnbmVkKHR3bydzIGNvbXBsZW1lbnQpIGJ5dGUgYXJyYXkgdGhhdCByZXByZXNlbnRzIHRoZSB1bnNpZ25lZCBieXRlIGFycmF5IGluCi0vLyBiaWcuSW50Ci1mdW5jIGdldFNpZ25lZEJ5dGVzRnJvbUJpZ0ludChuICpiaWcuSW50KSBbXWJ5dGUgewotCXZhciBvbmUgPSBiaWcuTmV3SW50KDEpCi0JaWYgbi5TaWduKCkgPT0gMSB7Ci0JCS8vIGFkZCBhIGJ1ZmZlciAweDAwIGJ5dGUgdG8gdGhlIHN0YXJ0IG9mIGJ5dGUgYXJyYXkgaWYgbnVtYmVyIGlzIHBvc2l0aXZlIGFuZCBoYXMgYSAxIGluIGl0cyBNU0IKLQkJYiA6PSBuLkJ5dGVzKCkKLQkJaWYgYlswXSYweDgwID4gMCB7Ci0JCQliID0gYXBwZW5kKFtdYnl0ZXswfSwgYi4uLikKLQkJfQotCQlyZXR1cm4gYgotCX0gZWxzZSBpZiBuLlNpZ24oKSA9PSAtMSB7Ci0JCS8vIENvbnZlcnQgVW5zaWduZWQgYnl0ZSBhcnJheSB0byBzaWduZWQgYnl0ZSBhcnJheQotCQlsZW5ndGggOj0gdWludChuLkJpdExlbigpLzgrMSkgKiA4Ci0JCWIgOj0gbmV3KGJpZy5JbnQpLkFkZChuLCBuZXcoYmlnLkludCkuTHNoKG9uZSwgbGVuZ3RoKSkuQnl0ZXMoKQotCQkvLyBTdHJpcCBhbnkgcmVkdW5kYW50IDB4ZmYgYnl0ZXMgZnJvbSB0aGUgZnJvbnQgb2YgdGhlIGJ5dGUgYXJyYXkgaWYgdGhlIGZvbGxvd2luZyBieXRlIHN0YXJ0cyB3aXRoIGEgMQotCQlpZiBsZW4oYikgPj0gMiAmJiBiWzBdID09IDB4ZmYgJiYgYlsxXSYweDgwICE9IDAgewotCQkJYiA9IGJbMTpdCi0JCX0KLQkJcmV0dXJuIGIKLQl9Ci0JcmV0dXJuIFtdYnl0ZXt9Ci19Ci0KLS8vIEZvcm1hdDoge2xlbmd0aH17dmFsdWVfMH0uLi57dmFsdWVfbn0KLWZ1bmMgYmlnSW50V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgXyAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQl2YXIgdiBiaWcuSW50Ci0Jc3dpdGNoIHZhbCA6PSB2YWx1ZS4odHlwZSkgewotCWNhc2UgdWludDoKLQkJdiA9ICoobmV3KGJpZy5JbnQpLlNldFVpbnQ2NCh1aW50NjQodmFsKSkpCi0JY2FzZSB1aW50NjQ6Ci0JCXYgPSAqKG5ldyhiaWcuSW50KS5TZXRVaW50NjQodmFsKSkKLQlkZWZhdWx0OgotCQlpZiByZWZsZWN0LlR5cGVPZih2YWx1ZSkuS2luZCgpID09IHJlZmxlY3QuUHRyIHsKLQkJCXYgPSAqKHZhbHVlLigqYmlnLkludCkpCi0JCX0gZWxzZSB7Ci0JCQl2ID0gdmFsdWUuKGJpZy5JbnQpCi0JCX0KLQl9Ci0Jc2lnbmVkQnl0ZXMgOj0gZ2V0U2lnbmVkQnl0ZXNGcm9tQmlnSW50KCZ2KQotCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMihsZW4oc2lnbmVkQnl0ZXMpKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWZvciBpIDo9IDA7IGkgPCBsZW4oc2lnbmVkQnl0ZXMpOyBpKysgewotCQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgc2lnbmVkQnl0ZXNbaV0pCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQl9Ci0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotLy8gRm9ybWF0OiB7c2NhbGV9e3Vuc2NhbGVkX3ZhbHVlfQotZnVuYyBiaWdEZWNpbWFsV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdmFyIHYgQmlnRGVjaW1hbAotCWlmIHJlZmxlY3QuVHlwZU9mKHZhbHVlKS5LaW5kKCkgPT0gcmVmbGVjdC5QdHIgewotCQl2ID0gKih2YWx1ZS4oKkJpZ0RlY2ltYWwpKQotCX0gZWxzZSB7Ci0JCXYgPSB2YWx1ZS4oQmlnRGVjaW1hbCkKLQl9Ci0JZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIHYuU2NhbGUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCXJldHVybiBiaWdJbnRXcml0ZXIodi5VbnNjYWxlZFZhbHVlLCBidWZmZXIsIHR5cGVTZXJpYWxpemVyKQotfQotCi1mdW5jIGNsYXNzV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdmFyIHYgR3JlbWxpblR5cGUKLQlpZiByZWZsZWN0LlR5cGVPZih2YWx1ZSkuS2luZCgpID09IHJlZmxlY3QuUHRyIHsKLQkJdiA9ICoodmFsdWUuKCpHcmVtbGluVHlwZSkpCi0JfSBlbHNlIHsKLQkJdiA9IHZhbHVlLihHcmVtbGluVHlwZSkKLQl9Ci0JcmV0dXJuIHN0cmluZ1dyaXRlcih2LkZxY24sIGJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIpCi19Ci0KLS8vIEZvcm1hdDoge0lkfXtMYWJlbH17cHJvcGVydGllc30KLWZ1bmMgdmVydGV4V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdiA6PSB2YWx1ZS4oKlZlcnRleCkKLQlfLCBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUodi5JZCwgYnVmZmVyKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQkvLyBOb3QgZnVsbHkgcXVhbGlmaWVkLgotCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUodi5MYWJlbCwgYnVmZmVyLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCS8vIE5vdGUgdGhhdCBhcyBUaW5rZXJQb3AgY3VycmVudGx5IHNlbmQgInJlZmVyZW5jZXMiIG9ubHksIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgbnVsbAotCWJ1ZmZlci5Xcml0ZShudWxsQnl0ZXMpCi0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotLy8gRm9ybWF0OiB7SWR9e0xhYmVsfXtpblZJZH17aW5WTGFiZWx9e291dFZJZH17b3V0VkxhYmVsfXtwYXJlbnR9e3Byb3BlcnRpZXN9Ci1mdW5jIGVkZ2VXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQllIDo9IHZhbHVlLigqRWRnZSkKLQlfLCBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUoZS5JZCwgYnVmZmVyKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQkvLyBOb3QgZnVsbHkgcXVhbGlmaWVkCi0JXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZShlLkxhYmVsLCBidWZmZXIsIGZhbHNlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQkvLyBXcml0ZSBpbi12ZXJ0ZXgKLQlfLCBlcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZShlLkluVi5JZCwgYnVmZmVyKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQkvLyBOb3QgZnVsbHkgcXVhbGlmaWVkLgotCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUoZS5JblYuTGFiZWwsIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQkvLyBXcml0ZSBvdXQtdmVydGV4Ci0JXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGUoZS5PdXRWLklkLCBidWZmZXIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCS8vIE5vdCBmdWxseSBxdWFsaWZpZWQuCi0JXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZShlLk91dFYuTGFiZWwsIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCS8vIE5vdGUgdGhhdCBhcyBUaW5rZXJQb3AgY3VycmVudGx5IHNlbmQgInJlZmVyZW5jZXMiIG9ubHksIHBhcmVudCBhbmQgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBudWxsCi0JYnVmZmVyLldyaXRlKG51bGxCeXRlcykKLQlidWZmZXIuV3JpdGUobnVsbEJ5dGVzKQotCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgbmlsCi19Ci0KLS8vIEZvcm1hdDoge0tleX17VmFsdWV9e3BhcmVudH0KLWZ1bmMgcHJvcGVydHlXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQl2IDo9IHZhbHVlLigqUHJvcGVydHkpCi0KLQkvLyBOb3QgZnVsbHkgcXVhbGlmaWVkLgotCV8sIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZVZhbHVlKHYuS2V5LCBidWZmZXIsIGZhbHNlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQlfLCBlcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZSh2LlZhbHVlLCBidWZmZXIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQkvLyBOb3RlIHRoYXQgYXMgVGlua2VyUG9wIGN1cnJlbnRseSBzZW5kICJyZWZlcmVuY2VzIiBvbmx5LCBwYXJlbnQgYW5kIHByb3BlcnRpZXMgIHdpbGwgYWx3YXlzIGJlIG51bGwKLQlidWZmZXIuV3JpdGUobnVsbEJ5dGVzKQotCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgbmlsCi19Ci0KLS8vIEZvcm1hdDoge0lkfXtMYWJlbH17VmFsdWV9e3BhcmVudH17cHJvcGVydGllc30KLWZ1bmMgdmVydGV4UHJvcGVydHlXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQl2cCA6PSB2YWx1ZS4oKlZlcnRleFByb3BlcnR5KQotCV8sIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZSh2cC5JZCwgYnVmZmVyKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQkvLyBOb3QgZnVsbHkgcXVhbGlmaWVkLgotCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUodnAuTGFiZWwsIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlfLCBlcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZSh2cC5WYWx1ZSwgYnVmZmVyKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JLy8gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZCAicmVmZXJlbmNlcyIgb25seSwgcGFyZW50IGFuZCBwcm9wZXJ0aWVzIHdpbGwgYWx3YXlzIGJlIG51bGwKLQlidWZmZXIuV3JpdGUobnVsbEJ5dGVzKQotCWJ1ZmZlci5Xcml0ZShudWxsQnl0ZXMpCi0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotLy8gRm9ybWF0OiB7TGFiZWxzfXtPYmplY3RzfQotZnVuYyBwYXRoV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JcCA6PSB2YWx1ZS4oKlBhdGgpCi0JXywgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlKHAuTGFiZWxzLCBidWZmZXIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlfLCBlcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZShwLk9iamVjdHMsIGJ1ZmZlcikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgbmlsCi19Ci0KLS8vIEZvcm1hdDogU2FtZSBhcyBMaXN0LgotLy8gTW9zdGx5IHNpbWlsYXIgdG8gbGlzdFdyaXRlciB3aXRoIHNtYWxsIGNoYW5nZXMKLWZ1bmMgc2V0V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0Jc2xpY2UgOj0gdmFsdWUuKFNldCkuVG9TbGljZSgpCi0JcmV0dXJuIGxpc3RXcml0ZXIoc2xpY2UsIGJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIpCi19Ci0KLWZ1bmMgdGltZVdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdCA6PSB2YWx1ZS4odGltZS5UaW1lKQotCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCB0LlVuaXhNaWxsaSgpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotZnVuYyBvZmZzZXREYXRlVGltZVdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdCA6PSB2YWx1ZS4odGltZS5UaW1lKQotCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMih0LlllYXIoKSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCWVyciA9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGJ5dGUodC5Nb250aCgpKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWVyciA9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGJ5dGUodC5EYXkoKSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQkvLyBjb25zdHJ1Y3QgdGltZSBvZiBkYXkgaW4gbmFub3NlY29uZHMKLQloIDo9IGludDY0KHQuSG91cigpKQotCW0gOj0gaW50NjQodC5NaW51dGUoKSkKLQlzIDo9IGludDY0KHQuU2Vjb25kKCkpCi0JbnMgOj0gKGggKiA2MCAqIDYwICogMWU5KSArIChtICogNjAgKiAxZTkpICsgKHMgKiAxZTkpICsgaW50NjQodC5OYW5vc2Vjb25kKCkpCi0JZXJyID0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgbnMpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlfLCBvcyA6PSB0LlpvbmUoKQotCWVyciA9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKG9zKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotZnVuYyBkdXJhdGlvbldyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdCA6PSB2YWx1ZS4odGltZS5EdXJhdGlvbikKLQlzZWMgOj0gaW50NjQodCAvIHRpbWUuU2Vjb25kKQotCW5hbm9zIDo9IGludDMyKHQgJSB0aW1lLlNlY29uZCkKLQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgc2VjKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JZXJyID0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgbmFub3MpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotfQotCi1jb25zdCAoCi0JdmFsdWVGbGFnTnVsbCBieXRlID0gMQotCXZhbHVlRmxhZ05vbmUgYnl0ZSA9IDAKLSkKLQotZnVuYyBlbnVtV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JXywgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlKHJlZmxlY3QuVmFsdWVPZih2YWx1ZSkuU3RyaW5nKCksIGJ1ZmZlcikKLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIGVycgotfQotCi0vLyBGb3JtYXQ6IHtsYW5ndWFnZX17c2NyaXB0fXthcmd1bWVudHNfbGVuZ3RofQotZnVuYyBsYW1iZGFXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQlsYW1iZGEgOj0gdmFsdWUuKCpMYW1iZGEpCi0JaWYgbGFtYmRhLkxhbmd1YWdlID09ICIiIHsKLQkJbGFtYmRhLkxhbmd1YWdlID0gImdyZW1saW4tZ3Jvb3Z5IgotCX0KLQlfLCBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZShsYW1iZGEuTGFuZ3VhZ2UsIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUobGFtYmRhLlNjcmlwdCwgYnVmZmVyLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JLy8gSXQncyBoYXJkIHRvIGtub3cgaG93IG1hbnkgcGFyYW1ldGVycyB0aGVyZSBhcmUgd2l0aG91dCBleHRlbnNpdmUgc3RyaW5nIHBhcnNpbmcuCi0JLy8gSW5zdGVhZCwgd2UgY2FuIHNldCAtMSB3aGljaCBtZWFucyB1bmtub3duLgotCWVyciA9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKC0xKSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBuaWwKLX0KLQotLy8gRm9ybWF0OiB7c3RyYXRlZ3lfY2xhc3N9e2NvbmZpZ3VyYXRpb259Ci1mdW5jIHRyYXZlcnNhbFN0cmF0ZWd5V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdHMgOj0gdmFsdWUuKCp0cmF2ZXJzYWxTdHJhdGVneSkKLQotCV8sIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZVZhbHVlKHRzLm5hbWUsIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCXJldHVybiBtYXBXcml0ZXIodHMuY29uZmlndXJhdGlvbiwgYnVmZmVyLCB0eXBlU2VyaWFsaXplcikKLX0KLQotZnVuYyBwV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JdmFyIHYgcAotCWlmIHJlZmxlY3QuVHlwZU9mKHZhbHVlKS5LaW5kKCkgPT0gcmVmbGVjdC5QdHIgewotCQl2ID0gKih2YWx1ZS4oKnApKQotCX0gZWxzZSB7Ci0JCXYgPSB2YWx1ZS4ocCkKLQl9Ci0JXywgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUodi5vcGVyYXRvciwgYnVmZmVyLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JZXJyID0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIobGVuKHYudmFsdWVzKSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCWZvciBfLCBwVmFsdWUgOj0gcmFuZ2Ugdi52YWx1ZXMgewotCQlfLCBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUocFZhbHVlLCBidWZmZXIpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQl9Ci0JcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBlcnIKLX0KLQotZnVuYyB0ZXh0UFdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCXZhciB2IHRleHRQCi0JaWYgcmVmbGVjdC5UeXBlT2YodmFsdWUpLktpbmQoKSA9PSByZWZsZWN0LlB0ciB7Ci0JCXYgPSAqKHZhbHVlLigqdGV4dFApKQotCX0gZWxzZSB7Ci0JCXYgPSB2YWx1ZS4odGV4dFApCi0JfQotCV8sIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZVZhbHVlKHYub3BlcmF0b3IsIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCWVyciA9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKGxlbih2LnZhbHVlcykpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQlmb3IgXywgcFZhbHVlIDo9IHJhbmdlIHYudmFsdWVzIHsKLQkJXywgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlKHBWYWx1ZSwgYnVmZmVyKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JfQotCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgZXJyCi19Ci0KLS8vIEZvcm1hdDoge2tleX17dmFsdWV9Ci1mdW5jIGJpbmRpbmdXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQl2YXIgdiBCaW5kaW5nCi0JaWYgcmVmbGVjdC5UeXBlT2YodmFsdWUpLktpbmQoKSA9PSByZWZsZWN0LlB0ciB7Ci0JCXYgPSAqKHZhbHVlLigqQmluZGluZykpCi0JfSBlbHNlIHsKLQkJdiA9IHZhbHVlLihCaW5kaW5nKQotCX0KLQotCS8vIE5vdCBmdWxseSBxdWFsaWZpZWQuCi0JXywgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUodi5LZXksIGJ1ZmZlciwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCV8sIGVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlKHYuVmFsdWUsIGJ1ZmZlcikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgbmlsCi19Ci0KLS8vIGN1c3RvbVR5cGVXcml0ZXIgaGFuZGxlcyBzZXJpYWxpemF0aW9uIG9mIGN1c3RvbSB0eXBlcyByZWdpc3RlcmVkIHZpYSBSZWdpc3RlckN1c3RvbVR5cGVXcml0ZXIuCi0vLyBGb3JtYXQ6IHt0eXBlX2NvZGV9e3R5cGVfbmFtZX17Y3VzdG9tX3BheWxvYWR9Ci0vLyB3aGVyZToKLS8vICAgLSB0eXBlX2NvZGUgPSAweDAwIChjdXN0b21UeXBlKSAtIGFscmVhZHkgd3JpdHRlbiBpbiB3cml0ZSgpIGJlZm9yZSBpbnZva2luZyB0aGlzIGZ1bmN0aW9uCi0vLyAgIC0gdHlwZV9uYW1lID0gc3RyaW5nIHdpdGggbGVuZ3RoIHByZWZpeCAtIHdyaXR0ZW4gYnkgdGhpcyBmdW5jdGlvbgotLy8gICAtIGN1c3RvbV9wYXlsb2FkID0gZXZlcnl0aGluZyBlbHNlIC0gd3JpdHRlbiBieSB0aGUgdXNlcidzIEN1c3RvbVR5cGVXcml0ZXIgZnVuY3Rpb24KLS8vCi0vLyBUaGUgY3VzdG9tX3BheWxvYWQgdHlwaWNhbGx5IGluY2x1ZGVzIHt2YWx1ZV9mbGFnfXt2YWx1ZX0sIGJ1dCBjdXN0b20gdHlwZXMgbWF5IGluY2x1ZGUKLS8vIGFkZGl0aW9uYWwgbWV0YWRhdGEgKGUuZy4sIEphbnVzR3JhcGgncyBjdXN0b21UeXBlSW5mbykgYmVmb3JlIHRoZSB2YWx1ZV9mbGFnLgotZnVuYyBjdXN0b21UeXBlV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JLy8gTG9vayB1cCB0aGUgY3VzdG9tIHR5cGUgaW5mbwotCXZhbFR5cGUgOj0gcmVmbGVjdC5UeXBlT2YodmFsdWUpCi0JY3VzdG9tVHlwZVdyaXRlckxvY2suUkxvY2soKQotCXR5cGVJbmZvLCBleGlzdHMgOj0gY3VzdG9tU2VyaWFsaXplcnNbdmFsVHlwZV0KLQljdXN0b21UeXBlV3JpdGVyTG9jay5SVW5sb2NrKCkKLQotCWlmICFleGlzdHMgfHwgY3VzdG9tU2VyaWFsaXplcnMgPT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwN0dldFNlcmlhbGl6ZXJUb1dyaXRlVW5rbm93blR5cGVFcnJvciwgdmFsVHlwZS5OYW1lKCkpCi0JfQotCi0JLy8gV3JpdGUgdGhlIGN1c3RvbSB0eXBlIG5hbWUgYXMgYSBTdHJpbmcgKGxlbmd0aCBwcmVmaXggKyBVVEYtOCBieXRlcykKLQl0eXBlTmFtZSA6PSB0eXBlSW5mby5UeXBlTmFtZQotCXR5cGVOYW1lQnl0ZXMgOj0gW11ieXRlKHR5cGVOYW1lKQotCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMihsZW4odHlwZU5hbWVCeXRlcykpKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlpZiBfLCBlcnIgOj0gYnVmZmVyLldyaXRlKHR5cGVOYW1lQnl0ZXMpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JLy8gQ2FsbCB0aGUgY3VzdG9tIHdyaXRlciB0byBzZXJpYWxpemUgdGhlIHZhbHVlCi0JaWYgZXJyIDo9IHR5cGVJbmZvLldyaXRlcih2YWx1ZSwgYnVmZmVyLCB0eXBlU2VyaWFsaXplcik7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotfQotCi1mdW5jIChzZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBnZXRUeXBlKHZhbCBpbnRlcmZhY2V7fSkgKGRhdGFUeXBlLCBlcnJvcikgewotCS8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWdpc3RlcmVkIGN1c3RvbSB0eXBlCi0JdmFsVHlwZSA6PSByZWZsZWN0LlR5cGVPZih2YWwpCi0JY3VzdG9tVHlwZVdyaXRlckxvY2suUkxvY2soKQotCXZhciBpc0N1c3RvbVR5cGUgYm9vbAotCWlmIGN1c3RvbVNlcmlhbGl6ZXJzICE9IG5pbCB7Ci0JCV8sIGlzQ3VzdG9tVHlwZSA9IGN1c3RvbVNlcmlhbGl6ZXJzW3ZhbFR5cGVdCi0JfQotCWN1c3RvbVR5cGVXcml0ZXJMb2NrLlJVbmxvY2soKQotCWlmIGlzQ3VzdG9tVHlwZSB7Ci0JCXJldHVybiBjdXN0b21UeXBlLCBuaWwKLQl9Ci0KLQlzd2l0Y2ggdmFsLih0eXBlKSB7Ci0JY2FzZSAqQnl0ZWNvZGUsIEJ5dGVjb2RlLCAqR3JhcGhUcmF2ZXJzYWw6Ci0JCXJldHVybiBieXRlY29kZVR5cGUsIG5pbAotCWNhc2Ugc3RyaW5nOgotCQlyZXR1cm4gc3RyaW5nVHlwZSwgbmlsCi0JY2FzZSB1aW50LCB1aW50NjQsICpiaWcuSW50OgotCQlyZXR1cm4gYmlnSW50ZWdlclR5cGUsIG5pbAotCWNhc2UgaW50NjQsIGludCwgdWludDMyOgotCQlyZXR1cm4gbG9uZ1R5cGUsIG5pbAotCWNhc2UgaW50MzIsIHVpbnQxNjoKLQkJcmV0dXJuIGludFR5cGUsIG5pbAotCWNhc2UgaW50OCwgaW50MTY6IC8vIEdyYXBoQmluYXJ5IGRvZXNuJ3QgaGF2ZSBhIHR5cGUgZm9yIHNpZ25lZCA4LWJpdCBpbnRlZ2VyLCBzZXJpYWxpemluZyBpbnQ4IGFzIFNob3J0IGluc3RlYWQuCi0JCXJldHVybiBzaG9ydFR5cGUsIG5pbAotCWNhc2UgdWludDg6Ci0JCXJldHVybiBieXRlVHlwZSwgbmlsCi0JY2FzZSBib29sOgotCQlyZXR1cm4gYm9vbGVhblR5cGUsIG5pbAotCWNhc2UgdXVpZC5VVUlEOgotCQlyZXR1cm4gdXVpZFR5cGUsIG5pbAotCWNhc2UgZmxvYXQzMjoKLQkJcmV0dXJuIGZsb2F0VHlwZSwgbmlsCi0JY2FzZSBmbG9hdDY0OgotCQlyZXR1cm4gZG91YmxlVHlwZSwgbmlsCi0JY2FzZSAqVmVydGV4OgotCQlyZXR1cm4gdmVydGV4VHlwZSwgbmlsCi0JY2FzZSAqRWRnZToKLQkJcmV0dXJuIGVkZ2VUeXBlLCBuaWwKLQljYXNlICpQcm9wZXJ0eToKLQkJcmV0dXJuIHByb3BlcnR5VHlwZSwgbmlsCi0JY2FzZSAqVmVydGV4UHJvcGVydHk6Ci0JCXJldHVybiB2ZXJ0ZXhQcm9wZXJ0eVR5cGUsIG5pbAotCWNhc2UgKkxhbWJkYToKLQkJcmV0dXJuIGxhbWJkYVR5cGUsIG5pbAotCWNhc2UgKnRyYXZlcnNhbFN0cmF0ZWd5OgotCQlyZXR1cm4gdHJhdmVyc2FsU3RyYXRlZ3lUeXBlLCBuaWwKLQljYXNlICpQYXRoOgotCQlyZXR1cm4gcGF0aFR5cGUsIG5pbAotCWNhc2UgU2V0OgotCQlyZXR1cm4gc2V0VHlwZSwgbmlsCi0JY2FzZSB0aW1lLlRpbWU6Ci0JCXJldHVybiBvZmZzZXREYXRlVGltZVR5cGUsIG5pbCAvLyBkZWZhdWx0IHNlcmlhbGl6YXRpb24gb2YgVGltZSB3aWxsIGJlY29tZSBPZmZzZXREYXRlVGltZQotCWNhc2UgdGltZS5EdXJhdGlvbjoKLQkJcmV0dXJuIGR1cmF0aW9uVHlwZSwgbmlsCi0JY2FzZSBjYXJkaW5hbGl0eToKLQkJcmV0dXJuIGNhcmRpbmFsaXR5VHlwZSwgbmlsCi0JY2FzZSBjb2x1bW46Ci0JCXJldHVybiBjb2x1bW5UeXBlLCBuaWwKLQljYXNlIGRpcmVjdGlvbjoKLQkJcmV0dXJuIGRpcmVjdGlvblR5cGUsIG5pbAotCWNhc2Ugb3BlcmF0b3I6Ci0JCXJldHVybiBvcGVyYXRvclR5cGUsIG5pbAotCWNhc2Ugb3JkZXI6Ci0JCXJldHVybiBvcmRlclR5cGUsIG5pbAotCWNhc2UgcGljazoKLQkJcmV0dXJuIHBpY2tUeXBlLCBuaWwKLQljYXNlIHBvcDoKLQkJcmV0dXJuIHBvcFR5cGUsIG5pbAotCWNhc2UgdDoKLQkJcmV0dXJuIHRUeXBlLCBuaWwKLQljYXNlIGJhcnJpZXI6Ci0JCXJldHVybiBiYXJyaWVyVHlwZSwgbmlsCi0JY2FzZSBzY29wZToKLQkJcmV0dXJuIHNjb3BlVHlwZSwgbmlsCi0JY2FzZSBtZXJnZToKLQkJcmV0dXJuIG1lcmdlVHlwZSwgbmlsCi0JY2FzZSBkdDoKLQkJcmV0dXJuIGR0VHlwZSwgbmlsCi0JY2FzZSBnVHlwZToKLQkJcmV0dXJuIGdUeXBlVHlwZSwgbmlsCi0JY2FzZSBwLCBQcmVkaWNhdGU6Ci0JCXJldHVybiBwVHlwZSwgbmlsCi0JY2FzZSB0ZXh0UCwgVGV4dFByZWRpY2F0ZToKLQkJcmV0dXJuIHRleHRQVHlwZSwgbmlsCi0JY2FzZSAqQmluZGluZywgQmluZGluZzoKLQkJcmV0dXJuIGJpbmRpbmdUeXBlLCBuaWwKLQljYXNlICpCaWdEZWNpbWFsLCBCaWdEZWNpbWFsOgotCQlyZXR1cm4gYmlnRGVjaW1hbFR5cGUsIG5pbAotCWNhc2UgKkdyZW1saW5UeXBlLCBHcmVtbGluVHlwZToKLQkJcmV0dXJuIGNsYXNzVHlwZSwgbmlsCi0JY2FzZSAqTWV0cmljcywgTWV0cmljczoKLQkJcmV0dXJuIG1ldHJpY3NUeXBlLCBuaWwKLQljYXNlICpUcmF2ZXJzYWxNZXRyaWNzLCBUcmF2ZXJzYWxNZXRyaWNzOgotCQlyZXR1cm4gdHJhdmVyc2FsTWV0cmljc1R5cGUsIG5pbAotCWNhc2UgKkJ5dGVCdWZmZXIsIEJ5dGVCdWZmZXI6Ci0JCXJldHVybiBieXRlQnVmZmVyLCBuaWwKLQlkZWZhdWx0OgotCQlzd2l0Y2ggcmVmbGVjdC5UeXBlT2YodmFsKS5LaW5kKCkgewotCQljYXNlIHJlZmxlY3QuTWFwOgotCQkJcmV0dXJuIG1hcFR5cGUsIG5pbAotCQljYXNlIHJlZmxlY3QuQXJyYXksIHJlZmxlY3QuU2xpY2U6Ci0JCQkvLyBXZSBjYW4gd3JpdGUgYW4gYXJyYXkgb3Igc2xpY2UgaW50byB0aGUgbGlzdCBkYXRhVHlwZS4KLQkJCXJldHVybiBsaXN0VHlwZSwgbmlsCi0JCWRlZmF1bHQ6Ci0JCQlzZXJpYWxpemVyLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgc2VyaWFsaXplRGF0YVR5cGVFcnJvciwgcmVmbGVjdC5UeXBlT2YodmFsKS5OYW1lKCkpCi0JCQlyZXR1cm4gaW50VHlwZSwgbmV3RXJyb3IoZXJyMDQwN0dldFNlcmlhbGl6ZXJUb1dyaXRlVW5rbm93blR5cGVFcnJvciwgcmVmbGVjdC5UeXBlT2YodmFsKS5OYW1lKCkpCi0JCX0KLQl9Ci19Ci0KLWZ1bmMgKHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGdldFdyaXRlcihkYXRhVHlwZSBkYXRhVHlwZSkgKHdyaXRlciwgZXJyb3IpIHsKLQlpZiB3cml0ZXIsIG9rIDo9IHNlcmlhbGl6ZXJzW2RhdGFUeXBlXTsgb2sgewotCQlyZXR1cm4gd3JpdGVyLCBuaWwKLQl9Ci0Jc2VyaWFsaXplci5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGRlc2VyaWFsaXplRGF0YVR5cGVFcnJvciwgaW50MzIoZGF0YVR5cGUpKQotCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDdHZXRTZXJpYWxpemVyVG9Xcml0ZVVua25vd25UeXBlRXJyb3IsIGRhdGFUeXBlKQotfQotCi0vLyBnZXRzIHRoZSB0eXBlIG9mIHRoZSBzZXJpYWxpemVyIGJhc2VkIG9uIHRoZSB2YWx1ZQotZnVuYyAoc2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZ2V0U2VyaWFsaXplclRvV3JpdGUodmFsIGludGVyZmFjZXt9KSAod3JpdGVyLCBkYXRhVHlwZSwgZXJyb3IpIHsKLQlkYXRhVHlwZSwgZXJyIDo9IHNlcmlhbGl6ZXIuZ2V0VHlwZSh2YWwpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGludFR5cGUsIGVycgotCX0KLQl3cml0ZXIsIGVyciA6PSBzZXJpYWxpemVyLmdldFdyaXRlcihkYXRhVHlwZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgaW50VHlwZSwgZXJyCi0JfQotCi0JcmV0dXJuIHdyaXRlciwgZGF0YVR5cGUsIG5pbAotfQotCi0vLyBXcml0ZXMgYW4gb2JqZWN0IGluIGZ1bGx5LXF1YWxpZmllZCBmb3JtYXQsIGNvbnRhaW5pbmcge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0uCi1mdW5jIChzZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSB3cml0ZSh2YWx1ZU9iamVjdCBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlpZiB2YWx1ZU9iamVjdCA9PSBuaWwgewotCQkvLyByZXR1cm4gT2JqZWN0IG9mIHR5cGUgInVuc3BlY2lmaWVkIG9iamVjdCBudWxsIiB3aXRoIHRoZSB2YWx1ZSBmbGFnIHNldCB0byBudWxsLgotCQlidWZmZXIuV3JpdGUobnVsbEJ5dGVzKQotCQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotCX0KLQotCXdyaXRlciwgZGF0YVR5cGUsIGVyciA6PSBzZXJpYWxpemVyLmdldFNlcmlhbGl6ZXJUb1dyaXRlKHZhbHVlT2JqZWN0KQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JYnVmZmVyLldyaXRlKGRhdGFUeXBlLmdldENvZGVCeXRlcygpKQotCWlmIGRhdGFUeXBlID09IGN1c3RvbVR5cGUgewotCQkvLyBDdXN0b20gdHlwZSBmb3JtYXQgdHlwaWNhbGx5OiB7dHlwZV9jb2RlPTB4MDB9e3R5cGVfbmFtZX17Y3VzdG9tX3dyaXRlcl9vdXRwdXR9Ci0JCS8vIFRoZSB0eXBlX25hbWUgaW1tZWRpYXRlbHkgZm9sbG93cyB0eXBlX2NvZGUgd2l0aCBOTyB2YWx1ZV9mbGFnIGluIGJldHdlZW4uCi0JCS8vIHdyaXRlVHlwZSB3b3VsZCBpbnNlcnQgYW4gZXh0cmEgdmFsdWVfZmxhZyBieXRlIHRoYXQgc2hpZnRzIHRoZSB0eXBlX25hbWUKLQkJLy8gc3RyaW5nLCBjYXVzaW5nIHRoZSBzZXJ2ZXIgdG8gY29tcHV0ZSB0aGUgd3Jvbmcgc3RyaW5nIGxlbmd0aCDihpIgUFJPQ0VTU0lOR19FUlJPUi4KLQkJcmV0dXJuIHdyaXRlcih2YWx1ZU9iamVjdCwgYnVmZmVyLCBzZXJpYWxpemVyKQotCX0KLQlyZXR1cm4gc2VyaWFsaXplci53cml0ZVR5cGUodmFsdWVPYmplY3QsIGJ1ZmZlciwgd3JpdGVyKQotfQotCi0vLyBXcml0ZXMgYSB2YWx1ZSB3aXRob3V0IGluY2x1ZGluZyB0eXBlIGluZm9ybWF0aW9uLgotZnVuYyAoc2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgd3JpdGVWYWx1ZSh2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIG51bGxhYmxlIGJvb2wpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlpZiB2YWx1ZSA9PSBuaWwgewotCQlpZiAhbnVsbGFibGUgewotCQkJc2VyaWFsaXplci5sb2dIYW5kbGVyLmxvZyhFcnJvciwgdW5leHBlY3RlZE51bGwpCi0JCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNDAzV3JpdGVWYWx1ZVVuZXhwZWN0ZWROdWxsRXJyb3IpCi0JCX0KLQkJc2VyaWFsaXplci53cml0ZVZhbHVlRmxhZ051bGwoYnVmZmVyKQotCQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIG5pbAotCX0KLQotCXdyaXRlciwgXywgZXJyIDo9IHNlcmlhbGl6ZXIuZ2V0U2VyaWFsaXplclRvV3JpdGUodmFsdWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQltZXNzYWdlLCBlcnIgOj0gc2VyaWFsaXplci53cml0ZVR5cGVWYWx1ZSh2YWx1ZSwgYnVmZmVyLCB3cml0ZXIsIG51bGxhYmxlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JcmV0dXJuIG1lc3NhZ2UsIG5pbAotfQotCi1mdW5jIChzZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSB3cml0ZVZhbHVlRmxhZ051bGwoYnVmZmVyICpieXRlcy5CdWZmZXIpIHsKLQlidWZmZXIuV3JpdGVCeXRlKHZhbHVlRmxhZ051bGwpCi19Ci0KLWZ1bmMgKHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIHdyaXRlVmFsdWVGbGFnTm9uZShidWZmZXIgKmJ5dGVzLkJ1ZmZlcikgewotCWJ1ZmZlci5Xcml0ZUJ5dGUodmFsdWVGbGFnTm9uZSkKLX0KLQotLy8gcmVhZGVycwotCi1mdW5jIHJlYWRUZW1wKGRhdGEgKltdYnl0ZSwgaSAqaW50LCBsZW4gaW50KSAqW11ieXRlIHsKLQl0bXAgOj0gbWFrZShbXWJ5dGUsIGxlbikKLQlmb3IgaiA6PSAwOyBqIDwgbGVuOyBqKysgewotCQl0bXBbal0gPSAoKmRhdGEpW2orKmldCi0JfQotCSppICs9IGxlbgotCXJldHVybiAmdG1wCi19Ci0KLS8vIFByaW1pdGl2ZQotZnVuYyByZWFkQm9vbGVhbihkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCWIsIF8gOj0gcmVhZEJ5dGUoZGF0YSwgaSkKLQlyZXR1cm4gYiAhPSB1aW50OCgwKSwgbmlsCi19Ci0KLWZ1bmMgcmVhZEJ5dGVTYWZlKGRhdGEgKltdYnl0ZSwgaSAqaW50KSBieXRlIHsKLQkqaSsrCi0JcmV0dXJuICgqZGF0YSlbKmktMV0KLX0KLWZ1bmMgcmVhZEJ5dGUoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlyZXR1cm4gcmVhZEJ5dGVTYWZlKGRhdGEsIGkpLCBuaWwKLX0KLQotZnVuYyByZWFkU2hvcnQoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlyZXR1cm4gaW50MTYoYmluYXJ5LkJpZ0VuZGlhbi5VaW50MTYoKnJlYWRUZW1wKGRhdGEsIGksIDIpKSksIG5pbAotfQotCi1mdW5jIHJlYWRJbnRTYWZlKGRhdGEgKltdYnl0ZSwgaSAqaW50KSBpbnQzMiB7Ci0JcmV0dXJuIGludDMyKGJpbmFyeS5CaWdFbmRpYW4uVWludDMyKCpyZWFkVGVtcChkYXRhLCBpLCA0KSkpCi19Ci1mdW5jIHJlYWRJbnQoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlyZXR1cm4gcmVhZEludFNhZmUoZGF0YSwgaSksIG5pbAotfQotCi1mdW5jIHJlYWRMb25nU2FmZShkYXRhICpbXWJ5dGUsIGkgKmludCkgaW50NjQgewotCXJldHVybiBpbnQ2NChiaW5hcnkuQmlnRW5kaWFuLlVpbnQ2NCgqcmVhZFRlbXAoZGF0YSwgaSwgOCkpKQotfQotZnVuYyByZWFkTG9uZyhkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCXJldHVybiByZWFkTG9uZ1NhZmUoZGF0YSwgaSksIG5pbAotfQotCi1mdW5jIHJlYWRCaWdJbnQoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlzeiA6PSByZWFkSW50U2FmZShkYXRhLCBpKQotCWIgOj0gcmVhZFRlbXAoZGF0YSwgaSwgaW50KHN6KSkKLQotCXZhciBuZXdCaWdJbnQgPSBiaWcuTmV3SW50KDApLlNldEJ5dGVzKCpiKQotCXZhciBvbmUgPSBiaWcuTmV3SW50KDEpCi0JaWYgbGVuKCpiKSA9PSAwIHsKLQkJcmV0dXJuIG5ld0JpZ0ludCwgbmlsCi0JfQotCS8vIElmIHRoZSBmaXJzdCBiaXQgaW4gdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGJ5dGUgYXJyYXkgaXMgYSAxLCB3ZSBuZWVkIHRvIGludGVycHJldCB0aGUgYnl0ZSBhcnJheSBhcyBhIHR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24KLQlpZiAoKmIpWzBdJjB4ODAgPT0gMHgwMCB7Ci0JCW5ld0JpZ0ludC5TZXRCeXRlcygqYikKLQkJcmV0dXJuIG5ld0JpZ0ludCwgbmlsCi0JfQotCS8vIFVuZG8gdHdvJ3MgY29tcGxlbWVudCB0byBieXRlIGFycmF5IGFuZCBzZXQgbmVnYXRpdmUgYm9vbGVhbiB0byB0cnVlCi0JbGVuZ3RoIDo9IHVpbnQoKGxlbigqYikqOCkvOCsxKSAqIDgKLQliMiA6PSBuZXcoYmlnLkludCkuU3ViKG5ld0JpZ0ludCwgbmV3KGJpZy5JbnQpLkxzaChvbmUsIGxlbmd0aCkpLkJ5dGVzKCkKLQotCS8vIFN0cmlwIHRoZSByZXN1bHRpbmcgMHhmZiBieXRlIGF0IHRoZSBzdGFydCBvZiBhcnJheQotCWIyID0gYjJbMTpdCi0KLQkvLyBTdHJpcCBhbnkgcmVkdW5kYW50IDB4MDAgYnl0ZSBhdCB0aGUgc3RhcnQgb2YgYXJyYXkKLQlpZiBiMlswXSA9PSAweDAwIHsKLQkJYjIgPSBiMlsxOl0KLQl9Ci0JbmV3QmlnSW50ID0gYmlnLk5ld0ludCgwKQotCW5ld0JpZ0ludC5TZXRCeXRlcyhiMikKLQluZXdCaWdJbnQuTmVnKG5ld0JpZ0ludCkKLQlyZXR1cm4gbmV3QmlnSW50LCBuaWwKLX0KLQotZnVuYyByZWFkQmlnRGVjaW1hbChkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCWJpZ0RlY2ltYWwgOj0gJkJpZ0RlY2ltYWx7fQotCWJpZ0RlY2ltYWwuU2NhbGUgPSByZWFkSW50U2FmZShkYXRhLCBpKQotCXVuc2NhbGVkLCBlcnIgOj0gcmVhZEJpZ0ludChkYXRhLCBpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JYmlnRGVjaW1hbC5VbnNjYWxlZFZhbHVlID0gdW5zY2FsZWQuKCpiaWcuSW50KQotCXJldHVybiBiaWdEZWNpbWFsLCBuaWwKLX0KLQotZnVuYyByZWFkVWludDMyU2FmZShkYXRhICpbXWJ5dGUsIGkgKmludCkgdWludDMyIHsKLQlyZXR1cm4gYmluYXJ5LkJpZ0VuZGlhbi5VaW50MzIoKnJlYWRUZW1wKGRhdGEsIGksIDQpKQotfQotCi1mdW5jIHJlYWRGbG9hdChkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCXJldHVybiBtYXRoLkZsb2F0MzJmcm9tYml0cyhiaW5hcnkuQmlnRW5kaWFuLlVpbnQzMigqcmVhZFRlbXAoZGF0YSwgaSwgNCkpKSwgbmlsCi19Ci0KLWZ1bmMgcmVhZERvdWJsZShkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCXJldHVybiBtYXRoLkZsb2F0NjRmcm9tYml0cyhiaW5hcnkuQmlnRW5kaWFuLlVpbnQ2NCgqcmVhZFRlbXAoZGF0YSwgaSwgOCkpKSwgbmlsCi19Ci0KLWZ1bmMgcmVhZFN0cmluZyhkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCXN6IDo9IGludChyZWFkVWludDMyU2FmZShkYXRhLCBpKSkKLQlpZiBzeiA9PSAwIHsKLQkJcmV0dXJuICIiLCBuaWwKLQl9Ci0JKmkgKz0gc3oKLQlyZXR1cm4gc3RyaW5nKCgqZGF0YSlbKmktc3ogOiAqaV0pLCBuaWwKLX0KLQotZnVuYyByZWFkRGF0YVR5cGUoZGF0YSAqW11ieXRlLCBpICppbnQpIGRhdGFUeXBlIHsKLQlyZXR1cm4gZGF0YVR5cGUocmVhZEJ5dGVTYWZlKGRhdGEsIGkpKQotfQotCi1mdW5jIGdldERlZmF1bHRWYWx1ZShkYXRhVHlwZSBkYXRhVHlwZSkgaW50ZXJmYWNle30gewotCXN3aXRjaCBkYXRhVHlwZSB7Ci0JY2FzZSBpbnRUeXBlLCBiaWdJbnRlZ2VyVHlwZSwgbG9uZ1R5cGUsIHNob3J0VHlwZSwgYnl0ZVR5cGUsIGJvb2xlYW5UeXBlLCBmbG9hdFR5cGUsIGRvdWJsZVR5cGU6Ci0JCXJldHVybiAwCi0JY2FzZSB0cmF2ZXJzZXJUeXBlLCBzdHJpbmdUeXBlOgotCQlyZXR1cm4gIiIKLQljYXNlIHV1aWRUeXBlOgotCQlyZXR1cm4gdXVpZC5OaWwKLQljYXNlIHZlcnRleFR5cGU6Ci0JCXJldHVybiBWZXJ0ZXh7fQotCWNhc2UgZWRnZVR5cGU6Ci0JCXJldHVybiBFZGdle30KLQljYXNlIHByb3BlcnR5VHlwZToKLQkJcmV0dXJuIFByb3BlcnR5e30KLQljYXNlIHZlcnRleFByb3BlcnR5VHlwZToKLQkJcmV0dXJuIFZlcnRleFByb3BlcnR5e30KLQljYXNlIHBhdGhUeXBlOgotCQlyZXR1cm4gUGF0aHt9Ci0JY2FzZSBzZXRUeXBlOgotCQlyZXR1cm4gU2ltcGxlU2V0e30KLQljYXNlIGRhdGVUeXBlLCB0aW1lc3RhbXBUeXBlOgotCQlyZXR1cm4gdGltZS5UaW1le30KLQljYXNlIGR1cmF0aW9uVHlwZToKLQkJcmV0dXJuIHRpbWUuRHVyYXRpb24oMCkKLQlkZWZhdWx0OgotCQlyZXR1cm4gbmlsCi0JfQotfQotCi0vLyBDb21wb3NpdGUKLWZ1bmMgcmVhZExpc3QoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlzeiA6PSByZWFkSW50U2FmZShkYXRhLCBpKQotCXZhciB2YWxMaXN0IFtdaW50ZXJmYWNle30KLQlmb3IgaiA6PSBpbnQzMigwKTsgaiA8IHN6OyBqKysgewotCQl2YWwsIGVyciA6PSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZShkYXRhLCBpLCB0cnVlKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCXZhbExpc3QgPSBhcHBlbmQodmFsTGlzdCwgdmFsKQotCX0KLQlyZXR1cm4gdmFsTGlzdCwgbmlsCi19Ci0KLWZ1bmMgcmVhZEJ5dGVCdWZmZXIoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlyIDo9ICZCeXRlQnVmZmVye30KLQlzeiA6PSByZWFkSW50U2FmZShkYXRhLCBpKQotCXIuRGF0YSA9IG1ha2UoW11ieXRlLCBzeikKLQlmb3IgaiA6PSBpbnQzMigwKTsgaiA8IHN6OyBqKysgewotCQlyLkRhdGFbal0gPSByZWFkQnl0ZVNhZmUoZGF0YSwgaSkKLQl9Ci0JcmV0dXJuIHIsIG5pbAotfQotCi1mdW5jIHJlYWRNYXAoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlzeiA6PSByZWFkVWludDMyU2FmZShkYXRhLCBpKQotCXZhciBtYXBEYXRhID0gbWFrZShtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pCi0JZm9yIGogOj0gdWludDMyKDApOyBqIDwgc3o7IGorKyB7Ci0JCWssIGVyciA6PSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZShkYXRhLCBpLCB0cnVlKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCXYsIGVyciA6PSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZShkYXRhLCBpLCB0cnVlKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCWlmIGsgPT0gbmlsIHsKLQkJCW1hcERhdGFbbmlsXSA9IHYKLQkJfSBlbHNlIGlmIHJlZmxlY3QuVHlwZU9mKGspLkNvbXBhcmFibGUoKSB7Ci0JCQltYXBEYXRhW2tdID0gdgotCQl9IGVsc2UgewotCQkJc3dpdGNoIHJlZmxlY3QuVHlwZU9mKGspLktpbmQoKSB7Ci0JCQljYXNlIHJlZmxlY3QuTWFwOgotCQkJCW1hcERhdGFbJmtdID0gdgotCQkJZGVmYXVsdDoKLQkJCQltYXBEYXRhW2ZtdC5TcHJpbnQoayldID0gdgotCQkJfQotCQl9Ci0JfQotCXJldHVybiBtYXBEYXRhLCBuaWwKLX0KLQotZnVuYyByZWFkTWFwVW5xdWFsaWZpZWQoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlzeiA6PSByZWFkVWludDMyU2FmZShkYXRhLCBpKQotCXZhciBtYXBEYXRhID0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQotCWZvciBqIDo9IHVpbnQzMigwKTsgaiA8IHN6OyBqKysgewotCQlrZXlEYXRhVHlwZSA6PSByZWFkRGF0YVR5cGUoZGF0YSwgaSkKLQkJaWYga2V5RGF0YVR5cGUgIT0gc3RyaW5nVHlwZSB7Ci0JCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNzAzUmVhZE1hcE5vblN0cmluZ0tleUVycm9yLCBrZXlEYXRhVHlwZSkKLQkJfQotCi0JCS8vIFNraXAgbnVsbGFibGUsIGtleSBtdXN0IGJlIHByZXNlbnQKLQkJKmkrKwotCi0JCWssIGVyciA6PSByZWFkU3RyaW5nKGRhdGEsIGkpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQkJbWFwRGF0YVtrLihzdHJpbmcpXSwgZXJyID0gcmVhZEZ1bGx5UXVhbGlmaWVkTnVsbGFibGUoZGF0YSwgaSwgdHJ1ZSkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gbmlsLCBlcnIKLQkJfQotCX0KLQlyZXR1cm4gbWFwRGF0YSwgbmlsCi19Ci0KLWZ1bmMgcmVhZFNldChkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCWxpc3QsIGVyciA6PSByZWFkTGlzdChkYXRhLCBpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JcmV0dXJuIE5ld1NpbXBsZVNldChsaXN0LihbXWludGVyZmFjZXt9KS4uLiksIG5pbAotfQotCi1mdW5jIHJlYWRVdWlkKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JaWQsIF8gOj0gdXVpZC5Gcm9tQnl0ZXMoKnJlYWRUZW1wKGRhdGEsIGksIDE2KSkKLQlyZXR1cm4gaWQsIG5pbAotfQotCi1mdW5jIHRpbWVSZWFkZXIoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlyZXR1cm4gdGltZS5Vbml4TWlsbGkocmVhZExvbmdTYWZlKGRhdGEsIGkpKSwgbmlsCi19Ci0KLWZ1bmMgb2Zmc2V0RGF0ZVRpbWVSZWFkZXIoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQl5ZWFyIDo9IHJlYWRJbnRTYWZlKGRhdGEsIGkpCi0JbW9udGggOj0gcmVhZEJ5dGVTYWZlKGRhdGEsIGkpCi0JZGF5IDo9IHJlYWRCeXRlU2FmZShkYXRhLCBpKQotCXRvdGFsTlMgOj0gcmVhZExvbmdTYWZlKGRhdGEsIGkpCi0JLy8gY2FsY3VsYXRlIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBhbmQgbnMgZnJvbSB0b3RhbE5TIChpbnQ2NCkgdG8gcHJldmVudCBpbnQgb3ZlcmZsb3cgaW4gdGhlIG5hbm9zZWNvbmRzIGFyZwotCW5zIDo9IHRvdGFsTlMgJSAxZTkKLQl0b3RhbFMgOj0gdG90YWxOUyAvIDFlOQotCXMgOj0gdG90YWxTICUgNjAKLQl0b3RhbE0gOj0gdG90YWxTIC8gNjAKLQltIDo9IHRvdGFsTSAlIDYwCi0JaCA6PSB0b3RhbE0gLyA2MAotCi0Jb2Zmc2V0IDo9IHJlYWRJbnRTYWZlKGRhdGEsIGkpCi0JZGF0ZXRpbWUgOj0gdGltZS5EYXRlKGludCh5ZWFyKSwgdGltZS5Nb250aChtb250aCksIGludChkYXkpLCBpbnQoaCksIGludChtKSwgaW50KHMpLCBpbnQobnMpLCBHZXRUaW1lem9uZUZyb21PZmZzZXQoaW50KG9mZnNldCkpKQotCXJldHVybiBkYXRldGltZSwgbmlsCi19Ci0KLS8vIEdldFRpbWV6b25lRnJvbU9mZnNldCBpcyBhIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFuIG9mZnNldCBpbiBzZWNvbmRzIHRvIGEgdGltZS5Mb2NhdGlvbgotZnVuYyBHZXRUaW1lem9uZUZyb21PZmZzZXQob2Zmc2V0U2Vjb25kcyBpbnQpICp0aW1lLkxvY2F0aW9uIHsKLQkvLyBjYWxjdWxhdGUgaG91cnMgYW5kIG1pbnV0ZXMgZnJvbSBzZWNvbmRzCi0JaG91cnMgOj0gb2Zmc2V0U2Vjb25kcyAvIDM2MDAKLQltaW51dGVzIDo9IChvZmZzZXRTZWNvbmRzICUgMzYwMCkgLyA2MAotCi0JLy8gZm9ybWF0IHRoZSB0aW1lem9uZSBuYW1lIGluIHRoZSBmb3JtYXQgdGhhdCBnbyBleHBlY3RzCi0JLy8gZm9yIGV4YW1wbGU6ICJVVEMrMDE6MDAiIG9yICJVVEMtMDU6MzAiCi0Jc2lnbiA6PSAiKyIKLQlpZiBob3VycyA8IDAgewotCQlzaWduID0gIi0iCi0JCWhvdXJzID0gLWhvdXJzCi0JCW1pbnV0ZXMgPSAtbWludXRlcwotCX0KLQl0ek5hbWUgOj0gZm10LlNwcmludGYoIlVUQyVzJTAyZDolMDJkIiwgc2lnbiwgaG91cnMsIG1pbnV0ZXMpCi0KLQlyZXR1cm4gdGltZS5GaXhlZFpvbmUodHpOYW1lLCBvZmZzZXRTZWNvbmRzKQotfQotCi1mdW5jIGR1cmF0aW9uUmVhZGVyKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JcmV0dXJuIHRpbWUuRHVyYXRpb24ocmVhZExvbmdTYWZlKGRhdGEsIGkpKmludDY0KHRpbWUuU2Vjb25kKSArIGludDY0KHJlYWRJbnRTYWZlKGRhdGEsIGkpKSksIG5pbAotfQotCi0vLyBHcmFwaAotCi0vLyB7ZnVsbHkgcXVhbGlmaWVkIGlkfXt1bnF1YWxpZmllZCBsYWJlbH0KLWZ1bmMgdmVydGV4UmVhZGVyKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JcmV0dXJuIHZlcnRleFJlYWRlclJlYWRpbmdQcm9wZXJ0aWVzKGRhdGEsIGksIHRydWUpCi19Ci0KLS8vIHtmdWxseSBxdWFsaWZpZWQgaWR9e3VucXVhbGlmaWVkIGxhYmVsfXtmdWxseSBxdWFsaWZpZWQgcHJvcGVydGllc30KLWZ1bmMgdmVydGV4UmVhZGVyUmVhZGluZ1Byb3BlcnRpZXMoZGF0YSAqW11ieXRlLCBpICppbnQsIHJlYWRQcm9wZXJ0aWVzIGJvb2wpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQl2YXIgZXJyIGVycm9yCi0JdiA6PSBuZXcoVmVydGV4KQotCXYuSWQsIGVyciA9IHJlYWRGdWxseVF1YWxpZmllZE51bGxhYmxlKGRhdGEsIGksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlsYWJlbCwgZXJyIDo9IHJlYWRVbnF1YWxpZmllZChkYXRhLCBpLCBzdHJpbmdUeXBlLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXYuTGFiZWwgPSBsYWJlbC4oc3RyaW5nKQotCWlmIHJlYWRQcm9wZXJ0aWVzIHsKLQkJcHJvcHMsIGVyciA6PSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZShkYXRhLCBpLCB0cnVlKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCS8vIG51bGwgcHJvcGVydGllcyBhcmUgcmV0dXJuZWQgYXMgZW1wdHkgc2xpY2VzCi0JCXYuUHJvcGVydGllcyA9IG1ha2UoW11pbnRlcmZhY2V7fSwgMCkKLQkJaWYgcHJvcHMgIT0gbmlsIHsKLQkJCXYuUHJvcGVydGllcyA9IHByb3BzCi0JCX0KLQl9Ci0JcmV0dXJuIHYsIG5pbAotfQotCi0vLyB7ZnVsbHkgcXVhbGlmaWVkIGlkfXt1bnF1YWxpZmllZCBsYWJlbH17aW4gdmVydGV4IHcvbyBudWxsIGJ5dGV9e291dCB2ZXJ0ZXh9e3VudXNlZCBudWxsIGJ5dGV9e2Z1bGx5IHF1YWxpZmllZCBwcm9wZXJ0aWVzfQotZnVuYyBlZGdlUmVhZGVyKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JdmFyIGVyciBlcnJvcgotCWUgOj0gbmV3KEVkZ2UpCi0JZS5JZCwgZXJyID0gcmVhZEZ1bGx5UXVhbGlmaWVkTnVsbGFibGUoZGF0YSwgaSwgdHJ1ZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWxhYmVsLCBlcnIgOj0gcmVhZFVucXVhbGlmaWVkKGRhdGEsIGksIHN0cmluZ1R5cGUsIGZhbHNlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JZS5MYWJlbCA9IGxhYmVsLihzdHJpbmcpCi0JdiwgZXJyIDo9IHZlcnRleFJlYWRlclJlYWRpbmdQcm9wZXJ0aWVzKGRhdGEsIGksIGZhbHNlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JZS5JblYgPSAqdi4oKlZlcnRleCkKLQl2LCBlcnIgPSB2ZXJ0ZXhSZWFkZXJSZWFkaW5nUHJvcGVydGllcyhkYXRhLCBpLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWUuT3V0ViA9ICp2LigqVmVydGV4KQotCSppICs9IDIKLQlwcm9wcywgZXJyIDo9IHJlYWRGdWxseVF1YWxpZmllZE51bGxhYmxlKGRhdGEsIGksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQkvLyBudWxsIHByb3BlcnRpZXMgYXJlIHJldHVybmVkIGFzIGVtcHR5IHNsaWNlcwotCWUuUHJvcGVydGllcyA9IG1ha2UoW11pbnRlcmZhY2V7fSwgMCkKLQlpZiBwcm9wcyAhPSBuaWwgewotCQllLlByb3BlcnRpZXMgPSBwcm9wcwotCX0KLQlyZXR1cm4gZSwgbmlsCi19Ci0KLS8vIHt1bnF1YWxpZmllZCBrZXl9e2Z1bGx5IHF1YWxpZmllZCB2YWx1ZX17bnVsbCBieXRlfQotZnVuYyBwcm9wZXJ0eVJlYWRlcihkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCXAgOj0gbmV3KFByb3BlcnR5KQotCWtleSwgZXJyIDo9IHJlYWRVbnF1YWxpZmllZChkYXRhLCBpLCBzdHJpbmdUeXBlLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXAuS2V5ID0ga2V5LihzdHJpbmcpCi0JcC5WYWx1ZSwgZXJyID0gcmVhZEZ1bGx5UXVhbGlmaWVkTnVsbGFibGUoZGF0YSwgaSwgdHJ1ZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCSppICs9IDIKLQlyZXR1cm4gcCwgbmlsCi19Ci0KLS8vIHtmdWxseSBxdWFsaWZpZWQgaWR9e3VucXVhbGlmaWVkIGxhYmVsfXtmdWxseSBxdWFsaWZpZWQgdmFsdWV9e251bGwgYnl0ZX17bnVsbCBieXRlfQotZnVuYyB2ZXJ0ZXhQcm9wZXJ0eVJlYWRlcihkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCXZhciBlcnIgZXJyb3IKLQl2cCA6PSBuZXcoVmVydGV4UHJvcGVydHkpCi0JdnAuSWQsIGVyciA9IHJlYWRGdWxseVF1YWxpZmllZE51bGxhYmxlKGRhdGEsIGksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlsYWJlbCwgZXJyIDo9IHJlYWRVbnF1YWxpZmllZChkYXRhLCBpLCBzdHJpbmdUeXBlLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXZwLkxhYmVsID0gbGFiZWwuKHN0cmluZykKLQl2cC5WYWx1ZSwgZXJyID0gcmVhZEZ1bGx5UXVhbGlmaWVkTnVsbGFibGUoZGF0YSwgaSwgdHJ1ZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JKmkgKz0gMgotCi0JcHJvcHMsIGVyciA6PSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZShkYXRhLCBpLCB0cnVlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0KLQkvLyBudWxsIHByb3BlcnRpZXMgYXJlIHJldHVybmVkIGFzIGVtcHR5IHNsaWNlcwotCXZwLlByb3BlcnRpZXMgPSBtYWtlKFtdaW50ZXJmYWNle30sIDApCi0JaWYgcHJvcHMgIT0gbmlsIHsKLQkJdnAuUHJvcGVydGllcyA9IHByb3BzCi0JfQotCi0JcmV0dXJuIHZwLCBuaWwKLX0KLQotLy8ge2xpc3Qgb2Ygc2V0IG9mIHN0cmluZ3N9e2xpc3Qgb2YgZnVsbHkgcXVhbGlmaWVkIG9iamVjdHN9Ci1mdW5jIHBhdGhSZWFkZXIoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlwYXRoIDo9IG5ldyhQYXRoKQotCW5ld0xhYmVscywgZXJyIDo9IHJlYWRGdWxseVF1YWxpZmllZE51bGxhYmxlKGRhdGEsIGksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlmb3IgXywgcGFyYW0gOj0gcmFuZ2UgbmV3TGFiZWxzLihbXWludGVyZmFjZXt9KSB7Ci0JCXBhdGguTGFiZWxzID0gYXBwZW5kKHBhdGguTGFiZWxzLCBwYXJhbS4oKlNpbXBsZVNldCkpCi0JfQotCW9iamVjdHMsIGVyciA6PSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZShkYXRhLCBpLCB0cnVlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JcGF0aC5PYmplY3RzID0gb2JqZWN0cy4oW11pbnRlcmZhY2V7fSkKLQlyZXR1cm4gcGF0aCwgZXJyCi19Ci0KLS8vIHtidWxrIGludH17ZnVsbHkgcXVhbGlmaWVkIHZhbHVlfQotZnVuYyB0cmF2ZXJzZXJSZWFkZXIoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQl2YXIgZXJyIGVycm9yCi0JdHJhdmVyc2VyIDo9IG5ldyhUcmF2ZXJzZXIpCi0JdHJhdmVyc2VyLmJ1bGsgPSByZWFkTG9uZ1NhZmUoZGF0YSwgaSkKLQl0cmF2ZXJzZXIudmFsdWUsIGVyciA9IHJlYWRGdWxseVF1YWxpZmllZE51bGxhYmxlKGRhdGEsIGksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlyZXR1cm4gdHJhdmVyc2VyLCBuaWwKLX0KLQotLy8ge2ludDMyIGxlbmd0aH17ZnVsbHkgcXVhbGlmaWVkIGl0ZW1fMH17aW50NjQgcmVwZXRpdGlvbl8wfS4uLntmdWxseSBxdWFsaWZpZWQgaXRlbV9ufXtpbnQ2NCByZXBldGl0aW9uX259Ci1mdW5jIGJ1bGtTZXRSZWFkZXIoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlzeiA6PSBpbnQocmVhZEludFNhZmUoZGF0YSwgaSkpCi0JdmFyIHZhbExpc3QgW11pbnRlcmZhY2V7fQotCWZvciBqIDo9IDA7IGogPCBzejsgaisrIHsKLQkJdmFsLCBlcnIgOj0gcmVhZEZ1bGx5UXVhbGlmaWVkTnVsbGFibGUoZGF0YSwgaSwgdHJ1ZSkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gbmlsLCBlcnIKLQkJfQotCQlyZXAgOj0gcmVhZExvbmdTYWZlKGRhdGEsIGkpCi0JCWZvciBrIDo9IDA7IGsgPCBpbnQocmVwKTsgaysrIHsKLQkJCXZhbExpc3QgPSBhcHBlbmQodmFsTGlzdCwgdmFsKQotCQl9Ci0JfQotCXJldHVybiB2YWxMaXN0LCBuaWwKLX0KLQotLy8ge3R5cGUgY29kZSAoYWx3YXlzIHN0cmluZyBzbyBpZ25vcmUpfXtuaWwgY29kZSAoYWx3YXlzIGZhbHNlIHNvIGlnbm9yZSl9e2ludDMyIHNpemV9e3N0cmluZyBlbnVtfQotZnVuYyBlbnVtUmVhZGVyKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JdHlwZUNvZGUgOj0gcmVhZERhdGFUeXBlKGRhdGEsIGkpCi0JaWYgdHlwZUNvZGUgIT0gc3RyaW5nVHlwZSB7Ci0JCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDZFbnVtUmVhZGVySW52YWxpZFR5cGVFcnJvcikKLQl9Ci0JKmkrKwotCXJldHVybiByZWFkU3RyaW5nKGRhdGEsIGkpCi19Ci0KLS8vIHt1bnF1YWxpZmllZCBrZXl9e2Z1bGx5IHF1YWxpZmllZCB2YWx1ZX0KLWZ1bmMgYmluZGluZ1JlYWRlcihkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCWIgOj0gbmV3KEJpbmRpbmcpCi0JdmFsLCBlcnIgOj0gcmVhZFVucXVhbGlmaWVkKGRhdGEsIGksIHN0cmluZ1R5cGUsIGZhbHNlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JYi5LZXkgPSB2YWwuKHN0cmluZykKLQotCWIuVmFsdWUsIGVyciA9IHJlYWRGdWxseVF1YWxpZmllZE51bGxhYmxlKGRhdGEsIGksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlyZXR1cm4gYiwgbmlsCi19Ci0KLS8vIHtpZH17bmFtZX17ZHVyYXRpb259e2NvdW50c317YW5ub3RhdGlvbnN9e25lc3RlZF9tZXRyaWNzfQotZnVuYyBtZXRyaWNzUmVhZGVyKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JbWV0cmljcyA6PSBuZXcoTWV0cmljcykKLQl2YWwsIGVyciA6PSByZWFkVW5xdWFsaWZpZWQoZGF0YSwgaSwgc3RyaW5nVHlwZSwgZmFsc2UpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQltZXRyaWNzLklkID0gdmFsLihzdHJpbmcpCi0KLQl2YWwsIGVyciA9IHJlYWRVbnF1YWxpZmllZChkYXRhLCBpLCBzdHJpbmdUeXBlLCBmYWxzZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCW1ldHJpY3MuTmFtZSA9IHZhbC4oc3RyaW5nKQotCi0JZHVyLCBlcnIgOj0gcmVhZExvbmcoZGF0YSwgaSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCW1ldHJpY3MuRHVyYXRpb24gPSBkdXIuKGludDY0KQotCi0JY291bnRzLCBlcnIgOj0gcmVhZE1hcChkYXRhLCBpKQotCWNtYXAgOj0gY291bnRzLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQltZXRyaWNzLkNvdW50cyA9IG1ha2UobWFwW3N0cmluZ11pbnQ2NCwgbGVuKGNtYXApKQotCWZvciBrIDo9IHJhbmdlIGNtYXAgewotCQltZXRyaWNzLkNvdW50c1trLihzdHJpbmcpXSA9IGNtYXBba10uKGludDY0KQotCX0KLQotCWFubm90YXRpb25zLCBlcnIgOj0gcmVhZE1hcChkYXRhLCBpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JYW1hcCA6PSBhbm5vdGF0aW9ucy4obWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JbWV0cmljcy5Bbm5vdGF0aW9ucyA9IG1ha2UobWFwW3N0cmluZ11pbnRlcmZhY2V7fSwgbGVuKGFtYXApKQotCWZvciBrIDo9IHJhbmdlIGFtYXAgewotCQltZXRyaWNzLkFubm90YXRpb25zW2suKHN0cmluZyldID0gYW1hcFtrXQotCX0KLQotCW5lc3RlZCwgZXJyIDo9IHJlYWRMaXN0KGRhdGEsIGkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlsaXN0IDo9IG5lc3RlZC4oW11pbnRlcmZhY2V7fSkKLQltZXRyaWNzLk5lc3RlZE1ldHJpY3MgPSBtYWtlKFtdTWV0cmljcywgbGVuKGxpc3QpKQotCWZvciBpLCBtZXRyaWMgOj0gcmFuZ2UgbGlzdCB7Ci0JCW1ldHJpY3MuTmVzdGVkTWV0cmljc1tpXSA9IG1ldHJpYy4oTWV0cmljcykKLQl9Ci0KLQlyZXR1cm4gbWV0cmljcywgbmlsCi19Ci0KLS8vIHtpZH17bmFtZX17ZHVyYXRpb259e2NvdW50c317YW5ub3RhdGlvbnN9e25lc3RlZF9tZXRyaWNzfQotZnVuYyB0cmF2ZXJzYWxNZXRyaWNzUmVhZGVyKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JbSA6PSBuZXcoVHJhdmVyc2FsTWV0cmljcykKLQlkdXIsIGVyciA6PSByZWFkTG9uZyhkYXRhLCBpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JbS5EdXJhdGlvbiA9IGR1ci4oaW50NjQpCi0KLQluZXN0ZWQsIGVyciA6PSByZWFkTGlzdChkYXRhLCBpKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JbGlzdCA6PSBuZXN0ZWQuKFtdaW50ZXJmYWNle30pCi0JbS5NZXRyaWNzID0gbWFrZShbXU1ldHJpY3MsIGxlbihsaXN0KSkKLQlmb3IgaSwgbWV0cmljIDo9IHJhbmdlIGxpc3QgewotCQltLk1ldHJpY3NbaV0gPSAqbWV0cmljLigqTWV0cmljcykKLQl9Ci0KLQlyZXR1cm4gbSwgbmlsCi19Ci0KLS8vIEZvcm1hdDogQSBTdHJpbmcgY29udGFpbmluZyB0aGUgZnFjbi4KLWZ1bmMgcmVhZENsYXNzKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JZ3JlbWxpblR5cGUgOj0gbmV3KEdyZW1saW5UeXBlKQotCXN0ciwgZXJyIDo9IHJlYWRTdHJpbmcoZGF0YSwgaSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCWdyZW1saW5UeXBlLkZxY24gPSBzdHIuKHN0cmluZykKLQotCXJldHVybiBncmVtbGluVHlwZSwgbmlsCi19Ci0KLWZ1bmMgcmVhZFVucXVhbGlmaWVkKGRhdGEgKltdYnl0ZSwgaSAqaW50LCBkYXRhVHlwIGRhdGFUeXBlLCBudWxsYWJsZSBib29sKSAoaW50ZXJmYWNle30sIGVycm9yKSB7Ci0JaWYgbnVsbGFibGUgJiYgcmVhZEJ5dGVTYWZlKGRhdGEsIGkpID09IHZhbHVlRmxhZ051bGwgewotCQlyZXR1cm4gZ2V0RGVmYXVsdFZhbHVlKGRhdGFUeXApLCBuaWwKLQl9Ci0JZGVzZXJpYWxpemVyLCBvayA6PSBkZXNlcmlhbGl6ZXJzW2RhdGFUeXBdCi0JaWYgIW9rIHsKLQkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwOEdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duVHlwZUVycm9yLCBkYXRhVHlwKQotCX0KLQlyZXR1cm4gZGVzZXJpYWxpemVyKGRhdGEsIGkpCi19Ci0KLWZ1bmMgcmVhZEZ1bGx5UXVhbGlmaWVkTnVsbGFibGUoZGF0YSAqW11ieXRlLCBpICppbnQsIG51bGxhYmxlIGJvb2wpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKLQlkYXRhVHlwIDo9IHJlYWREYXRhVHlwZShkYXRhLCBpKQotCWlmIGRhdGFUeXAgPT0gbnVsbFR5cGUgewotCQlpZiByZWFkQnl0ZVNhZmUoZGF0YSwgaSkgIT0gdmFsdWVGbGFnTnVsbCB7Ci0JCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNDA0UmVhZE51bGxUeXBlRXJyb3IpCi0JCX0KLQkJcmV0dXJuIG5pbCwgbmlsCi0JfSBlbHNlIGlmIG51bGxhYmxlIHsKLQkJaWYgcmVhZEJ5dGVTYWZlKGRhdGEsIGkpID09IHZhbHVlRmxhZ051bGwgewotCQkJcmV0dXJuIGdldERlZmF1bHRWYWx1ZShkYXRhVHlwKSwgbmlsCi0JCX0KLQl9Ci0JZGVzZXJpYWxpemVyLCBvayA6PSBkZXNlcmlhbGl6ZXJzW2RhdGFUeXBdCi0JaWYgIW9rIHsKLQkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwOEdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duVHlwZUVycm9yLCBkYXRhVHlwKQotCX0KLQotCXJldHVybiBkZXNlcmlhbGl6ZXIoZGF0YSwgaSkKLX0KLQotLy8ge25hbWV9e3R5cGUgc3BlY2lmaWMgcGF5bG9hZH0KLWZ1bmMgY3VzdG9tVHlwZVJlYWRlcihkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCS8vIHdlIG5lZWQgdG8gZGVjcmVtZW50IHRoZSBpbmRleCBieSAxIHRvIGJlIHJlYWQgdGhlIDMyLWJpdCBpbnQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nCi0JKmkgPSAqaSAtIDEKLQljdXN0b21UeXBlTmFtZSwgZXJyIDo9IHJlYWRTdHJpbmcoZGF0YSwgaSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JLy8gZ3JhYiBhIHJlYWQgbG9jayBmb3IgdGhlIG1hcCBvZiBkZXNlcmlhbGl6ZXJzLCBzaW5jZSB0aGVzZSBjYW4gYmUgdXBkYXRlZCBvdXQtb2YtYmFuZAotCWN1c3RvbVR5cGVSZWFkZXJMb2NrLlJMb2NrKCkKLQlkZWZlciBjdXN0b21UeXBlUmVhZGVyTG9jay5SVW5sb2NrKCkKLQlkZXNlcmlhbGl6ZXIsIG9rIDo9IGN1c3RvbURlc2VyaWFsaXplcnNbY3VzdG9tVHlwZU5hbWUuKHN0cmluZyldCi0JaWYgIW9rIHsKLQkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwOUdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duQ3VzdG9tVHlwZUVycm9yLCBjdXN0b21UeXBlTmFtZSkKLQl9Ci0JcmV0dXJuIGRlc2VyaWFsaXplcihkYXRhLCBpKQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9ncmFwaEJpbmFyeURlc2VyaWFsaXplci5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWNlOWJjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIuZ28KQEAgLTAsMCArMSw2MzMgQEAKKy8qCisgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgZ3JlbWxpbmdvCisKK2ltcG9ydCAoCisJImJ1ZmlvIgorCSJlbmNvZGluZy9iaW5hcnkiCisJImZtdCIKKwkiaW8iCisJIm1hdGgiCisJIm1hdGgvYmlnIgorCSJyZWZsZWN0IgorCSJ0aW1lIgorCisJImdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQiCispCisKKy8vIEdyYXBoQmluYXJ5RGVzZXJpYWxpemVyIHJlYWRzIEdyYXBoQmluYXJ5IGRhdGEgZGlyZWN0bHkgZnJvbSBhbiBpby5SZWFkZXIsCisvLyBlbmFibGluZyBzdHJlYW1pbmcgZGVzZXJpYWxpemF0aW9uIG9mIHNlcnZlciByZXNwb25zZXMuCisvLworLy8gU3RyZWFtaW5nIEJlaGF2aW9yOgorLy8gVGhlIGRlc2VyaWFsaXplciBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggSFRUUCBjaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nIHdoZXJlCisvLyB0aGUgc2VydmVyIHN0cmVhbXMgcmVzdWx0cyBhcyB0aGV5IGJlY29tZSBhdmFpbGFibGUuIEtleSBiZWhhdmlvcnM6CisvLworLy8gIDEuIEJsb2NraW5nIG9uIHBhcnRpYWwgZGF0YTogV2hlbiByZWFkaW5nIGFuIG9iamVjdCwgaWYgdGhlIHVuZGVybHlpbmcgcmVhZGVyCisvLyAgICAgZG9lc24ndCBoYXZlIGVub3VnaCBieXRlcyBhdmFpbGFibGUsIHRoZSBkZXNlcmlhbGl6ZXIgYmxvY2tzIHVudGlsIHRoZSBkYXRhCisvLyAgICAgYXJyaXZlcy4gVGhpcyBpcyBoYW5kbGVkIGJ5IGlvLlJlYWRGdWxsIHdoaWNoIHdhaXRzIGZvciB0aGUgZXhhY3QgbnVtYmVyIG9mCisvLyAgICAgYnl0ZXMgbmVlZGVkIGJhc2VkIG9uIEdyYXBoQmluYXJ5J3Mgc2VsZi1kZXNjcmliaW5nIGZvcm1hdCAodHlwZSBjb2RlcyBhbmQKKy8vICAgICBsZW5ndGggcHJlZml4ZXMpLgorLy8KKy8vICAyLiBDaHVuayBib3VuZGFyeSBpbmRlcGVuZGVuY2U6IEdvJ3MgSFRUUCBjbGllbnQgbWF5IHJlY2VpdmUgZGF0YSBpbiBjaHVua3MgdGhhdAorLy8gICAgIGRvbid0IGFsaWduIHdpdGggc2VydmVyLXNlbnQgR3JhcGhCaW5hcnkgb2JqZWN0IGJvdW5kYXJpZXMuIFRoZSBkZXNlcmlhbGl6ZXIKKy8vICAgICBoYW5kbGVzIHRoaXMgdHJhbnNwYXJlbnRseSAtIGl0IHJlYWRzIGV4YWN0bHkgdGhlIGJ5dGVzIG5lZWRlZCBmb3IgZWFjaCBvYmplY3QsCisvLyAgICAgYmxvY2tpbmcgaWYgbmVjZXNzYXJ5LCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgZGF0YSB3YXMgY2h1bmtlZCBieSB0aGUgbmV0d29yay4KKy8vCisvLyAgMy4gSW1tZWRpYXRlIG9iamVjdCBkZWxpdmVyeTogRWFjaCBjb21wbGV0ZSBvYmplY3QgaXMgcmV0dXJuZWQgYXMgc29vbiBhcyBpdCdzCisvLyAgICAgZnVsbHkgcmVhZCwgYWxsb3dpbmcgdGhlIGNhbGxlciB0byBwcm9jZXNzIHJlc3VsdHMgaW5jcmVtZW50YWxseSByYXRoZXIgdGhhbgorLy8gICAgIHdhaXRpbmcgZm9yIHRoZSBlbnRpcmUgcmVzcG9uc2UuCisvLworLy8gVGhlIGJ1ZmlvLlJlYWRlciB3cmFwcGVyIHByb3ZpZGVzIGVmZmljaWVudCBidWZmZXJpbmcgd2l0aG91dCBhZmZlY3RpbmcgdGhlCisvLyBzdHJlYW1pbmcgc2VtYW50aWNzIC0gaXQgc2ltcGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiB1bmRlcmx5aW5nIHJlYWQgc3lzY2FsbHMuCit0eXBlIEdyYXBoQmluYXJ5RGVzZXJpYWxpemVyIHN0cnVjdCB7CisJciAgICpidWZpby5SZWFkZXIKKwlidWYgWzhdYnl0ZQorCWVyciBlcnJvciAvLyBzdGlja3kgZXJyb3IKK30KKworLy8gR3JhcGhCaW5hcnkgZmxhZyBmb3IgYnVsa2VkIGxpc3Qvc2V0Citjb25zdCBmbGFnQnVsa2VkID0gMHgwMgorCisvLyBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplciBjcmVhdGVzIGEgbmV3IEdyYXBoQmluYXJ5RGVzZXJpYWxpemVyIHRoYXQgcmVhZHMgZnJvbSB0aGUgZ2l2ZW4gaW8uUmVhZGVyLgorLy8gVGhlIHJlYWRlciBpcyB3cmFwcGVkIGluIGEgYnVmZmVyZWQgcmVhZGVyIGZvciBlZmZpY2llbnQgcmVhZGluZy4KK2Z1bmMgTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIociBpby5SZWFkZXIpICpHcmFwaEJpbmFyeURlc2VyaWFsaXplciB7CisJcmV0dXJuICZHcmFwaEJpbmFyeURlc2VyaWFsaXplcntyOiBidWZpby5OZXdSZWFkZXJTaXplKHIsIDgxOTIpfQorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZEJ5dGUoKSAoYnl0ZSwgZXJyb3IpIHsKKwlpZiBkLmVyciAhPSBuaWwgeworCQlyZXR1cm4gMCwgZC5lcnIKKwl9CisJYiwgZXJyIDo9IGQuci5SZWFkQnl0ZSgpCisJaWYgZXJyICE9IG5pbCB7CisJCWQuZXJyID0gZXJyCisJCXJldHVybiAwLCBlcnIKKwl9CisJcmV0dXJuIGIsIG5pbAorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZEJ5dGVzKG4gaW50KSAoW11ieXRlLCBlcnJvcikgeworCWlmIGQuZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGQuZXJyCisJfQorCWJ1ZiA6PSBtYWtlKFtdYnl0ZSwgbikKKwlfLCBlcnIgOj0gaW8uUmVhZEZ1bGwoZC5yLCBidWYpCisJaWYgZXJyICE9IG5pbCB7CisJCWQuZXJyID0gZXJyCisJCXJldHVybiBuaWwsIGVycgorCX0KKwlyZXR1cm4gYnVmLCBuaWwKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWRJbnQzMigpIChpbnQzMiwgZXJyb3IpIHsKKwlpZiBkLmVyciAhPSBuaWwgeworCQlyZXR1cm4gMCwgZC5lcnIKKwl9CisJXywgZXJyIDo9IGlvLlJlYWRGdWxsKGQuciwgZC5idWZbOjRdKQorCWlmIGVyciAhPSBuaWwgeworCQlkLmVyciA9IGVycgorCQlyZXR1cm4gMCwgZXJyCisJfQorCXJldHVybiBpbnQzMihiaW5hcnkuQmlnRW5kaWFuLlVpbnQzMihkLmJ1Zls6NF0pKSwgbmlsCit9CisKK2Z1bmMgKGQgKkdyYXBoQmluYXJ5RGVzZXJpYWxpemVyKSByZWFkVWludDMyKCkgKHVpbnQzMiwgZXJyb3IpIHsKKwlpZiBkLmVyciAhPSBuaWwgeworCQlyZXR1cm4gMCwgZC5lcnIKKwl9CisJXywgZXJyIDo9IGlvLlJlYWRGdWxsKGQuciwgZC5idWZbOjRdKQorCWlmIGVyciAhPSBuaWwgeworCQlkLmVyciA9IGVycgorCQlyZXR1cm4gMCwgZXJyCisJfQorCXJldHVybiBiaW5hcnkuQmlnRW5kaWFuLlVpbnQzMihkLmJ1Zls6NF0pLCBuaWwKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWRJbnQ2NCgpIChpbnQ2NCwgZXJyb3IpIHsKKwlpZiBkLmVyciAhPSBuaWwgeworCQlyZXR1cm4gMCwgZC5lcnIKKwl9CisJXywgZXJyIDo9IGlvLlJlYWRGdWxsKGQuciwgZC5idWZbOjhdKQorCWlmIGVyciAhPSBuaWwgeworCQlkLmVyciA9IGVycgorCQlyZXR1cm4gMCwgZXJyCisJfQorCXJldHVybiBpbnQ2NChiaW5hcnkuQmlnRW5kaWFuLlVpbnQ2NChkLmJ1Zls6OF0pKSwgbmlsCit9CisKKy8vIFJlYWRIZWFkZXIgcmVhZHMgYW5kIHZhbGlkYXRlcyB0aGUgR3JhcGhCaW5hcnkgcmVzcG9uc2UgaGVhZGVyLgorLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgcmVhZGluZyBhbnkgb2JqZWN0cyBmcm9tIHRoZSBzdHJlYW0uCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgUmVhZEhlYWRlcigpIGVycm9yIHsKKwlpZiBfLCBlcnIgOj0gZC5yZWFkQnl0ZSgpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlfLCBlcnIgOj0gZC5yZWFkQnl0ZSgpCisJcmV0dXJuIGVycgorfQorCisvLyBSZWFkRnVsbHlRdWFsaWZpZWQgcmVhZHMgdGhlIG5leHQgZnVsbHktcXVhbGlmaWVkIEdyYXBoQmluYXJ5IHZhbHVlIGZyb20gdGhlIHN0cmVhbS4KKy8vIFJldHVybnMgdGhlIGRlc2VyaWFsaXplZCBvYmplY3QsIG9yIGFuIGVycm9yIGlmIHJlYWRpbmcgZmFpbHMuCisvLyBXaGVuIHRoZSBlbmQgb2YgdGhlIHJlc3VsdCBzdHJlYW0gaXMgcmVhY2hlZCwgdGhpcyByZXR1cm5zIGEgTWFya2VyIGVxdWFsIHRvIEVuZE9mU3RyZWFtKCkuCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgUmVhZEZ1bGx5UXVhbGlmaWVkKCkgKGludGVyZmFjZXt9LCBlcnJvcikgeworCWR0Qnl0ZSwgZXJyIDo9IGQucmVhZEJ5dGUoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJZHQgOj0gZGF0YVR5cGUoZHRCeXRlKQorCWlmIGR0ID09IG51bGxUeXBlIHsKKwkJaWYgXywgZXJyIDo9IGQucmVhZEJ5dGUoKTsgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlyZXR1cm4gbmlsLCBuaWwKKwl9CisJZmxhZywgZXJyIDo9IGQucmVhZEJ5dGUoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJaWYgZmxhZyA9PSB2YWx1ZUZsYWdOdWxsIHsKKwkJcmV0dXJuIG5pbCwgbmlsCisJfQorCXJldHVybiBkLnJlYWRWYWx1ZShkdCwgZmxhZykKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWRWYWx1ZShkdCBkYXRhVHlwZSwgZmxhZyBieXRlKSAoaW50ZXJmYWNle30sIGVycm9yKSB7CisJc3dpdGNoIGR0IHsKKwljYXNlIGludFR5cGU6CisJCXJldHVybiBkLnJlYWRJbnQzMigpCisJY2FzZSBsb25nVHlwZToKKwkJcmV0dXJuIGQucmVhZEludDY0KCkKKwljYXNlIHN0cmluZ1R5cGU6CisJCXJldHVybiBkLnJlYWRTdHJpbmcoKQorCWNhc2UgZG91YmxlVHlwZToKKwkJaWYgZC5lcnIgIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIGQuZXJyCisJCX0KKwkJaWYgXywgZXJyIDo9IGlvLlJlYWRGdWxsKGQuciwgZC5idWZbOjhdKTsgZXJyICE9IG5pbCB7CisJCQlkLmVyciA9IGVycgorCQkJcmV0dXJuIG5pbCwgZXJyCisJCX0KKwkJcmV0dXJuIG1hdGguRmxvYXQ2NGZyb21iaXRzKGJpbmFyeS5CaWdFbmRpYW4uVWludDY0KGQuYnVmWzo4XSkpLCBuaWwKKwljYXNlIGZsb2F0VHlwZToKKwkJaWYgZC5lcnIgIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIGQuZXJyCisJCX0KKwkJaWYgXywgZXJyIDo9IGlvLlJlYWRGdWxsKGQuciwgZC5idWZbOjRdKTsgZXJyICE9IG5pbCB7CisJCQlkLmVyciA9IGVycgorCQkJcmV0dXJuIG5pbCwgZXJyCisJCX0KKwkJcmV0dXJuIG1hdGguRmxvYXQzMmZyb21iaXRzKGJpbmFyeS5CaWdFbmRpYW4uVWludDMyKGQuYnVmWzo0XSkpLCBuaWwKKwljYXNlIGJvb2xlYW5UeXBlOgorCQliLCBlcnIgOj0gZC5yZWFkQnl0ZSgpCisJCXJldHVybiBiICE9IDAsIGVycgorCWNhc2UgYnl0ZVR5cGU6CisJCXJldHVybiBkLnJlYWRCeXRlKCkKKwljYXNlIHNob3J0VHlwZToKKwkJaWYgZC5lcnIgIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIGQuZXJyCisJCX0KKwkJaWYgXywgZXJyIDo9IGlvLlJlYWRGdWxsKGQuciwgZC5idWZbOjJdKTsgZXJyICE9IG5pbCB7CisJCQlkLmVyciA9IGVycgorCQkJcmV0dXJuIG5pbCwgZXJyCisJCX0KKwkJcmV0dXJuIGludDE2KGJpbmFyeS5CaWdFbmRpYW4uVWludDE2KGQuYnVmWzoyXSkpLCBuaWwKKwljYXNlIHV1aWRUeXBlOgorCQlidWYsIGVyciA6PSBkLnJlYWRCeXRlcygxNikKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlpZCwgZXJyIDo9IHV1aWQuRnJvbUJ5dGVzKGJ1ZikKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlyZXR1cm4gaWQsIG5pbAorCWNhc2UgbGlzdFR5cGU6CisJCXJldHVybiBkLnJlYWRMaXN0KGZsYWcgPT0gZmxhZ0J1bGtlZCkKKwljYXNlIHNldFR5cGU6CisJCWxpc3QsIGVyciA6PSBkLnJlYWRMaXN0KGZsYWcgPT0gZmxhZ0J1bGtlZCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlyZXR1cm4gTmV3U2ltcGxlU2V0KGxpc3QuKFtdaW50ZXJmYWNle30pLi4uKSwgbmlsCisJY2FzZSBtYXBUeXBlOgorCQlyZXR1cm4gZC5yZWFkTWFwKCkKKwljYXNlIHZlcnRleFR5cGU6CisJCXJldHVybiBkLnJlYWRWZXJ0ZXgodHJ1ZSkKKwljYXNlIGVkZ2VUeXBlOgorCQlyZXR1cm4gZC5yZWFkRWRnZSgpCisJY2FzZSBwYXRoVHlwZToKKwkJcmV0dXJuIGQucmVhZFBhdGgoKQorCWNhc2UgcHJvcGVydHlUeXBlOgorCQlyZXR1cm4gZC5yZWFkUHJvcGVydHkoKQorCWNhc2UgdmVydGV4UHJvcGVydHlUeXBlOgorCQlyZXR1cm4gZC5yZWFkVmVydGV4UHJvcGVydHkoKQorCWNhc2UgYmlnSW50ZWdlclR5cGU6CisJCXJldHVybiBkLnJlYWRCaWdJbnQoKQorCWNhc2UgYmlnRGVjaW1hbFR5cGU6CisJCXJldHVybiBkLnJlYWRCaWdEZWNpbWFsKCkKKwljYXNlIGRhdGV0aW1lVHlwZToKKwkJcmV0dXJuIGQucmVhZERhdGVUaW1lKCkKKwljYXNlIGR1cmF0aW9uVHlwZToKKwkJcmV0dXJuIGQucmVhZER1cmF0aW9uKCkKKwljYXNlIG1hcmtlclR5cGU6CisJCWIsIGVyciA6PSBkLnJlYWRCeXRlKCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlyZXR1cm4gT2YoYikKKwljYXNlIGJ5dGVCdWZmZXI6CisJCXJldHVybiBkLnJlYWRCeXRlQnVmZmVyKCkKKwljYXNlIHRUeXBlLCBkaXJlY3Rpb25UeXBlLCBtZXJnZVR5cGUsIGdUeXBlVHlwZToKKwkJcmV0dXJuIGQucmVhZEVudW0oZHQpCisJZGVmYXVsdDoKKwkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwOEdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duVHlwZUVycm9yLCBkdCkKKwl9Cit9CisKK2Z1bmMgKGQgKkdyYXBoQmluYXJ5RGVzZXJpYWxpemVyKSByZWFkU3RyaW5nKCkgKHN0cmluZywgZXJyb3IpIHsKKwlsZW5ndGgsIGVyciA6PSBkLnJlYWRJbnQzMigpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiAiIiwgZXJyCisJfQorCWlmIGxlbmd0aCA9PSAwIHsKKwkJcmV0dXJuICIiLCBuaWwKKwl9CisJYnVmLCBlcnIgOj0gZC5yZWFkQnl0ZXMoaW50KGxlbmd0aCkpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiAiIiwgZXJyCisJfQorCXJldHVybiBzdHJpbmcoYnVmKSwgbmlsCit9CisKK2Z1bmMgKGQgKkdyYXBoQmluYXJ5RGVzZXJpYWxpemVyKSByZWFkTGlzdChidWxrZWQgYm9vbCkgKGludGVyZmFjZXt9LCBlcnJvcikgeworCWxlbmd0aCwgZXJyIDo9IGQucmVhZEludDMyKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCWxpc3QgOj0gbWFrZShbXWludGVyZmFjZXt9LCAwLCBsZW5ndGgpCisJZm9yIGkgOj0gaW50MzIoMCk7IGkgPCBsZW5ndGg7IGkrKyB7CisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlpZiBidWxrZWQgeworCQkJYnVsaywgZXJyIDo9IGQucmVhZEludDY0KCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCXJldHVybiBuaWwsIGVycgorCQkJfQorCQkJZm9yIGogOj0gaW50NjQoMCk7IGogPCBidWxrOyBqKysgeworCQkJCWxpc3QgPSBhcHBlbmQobGlzdCwgdmFsKQorCQkJfQorCQl9IGVsc2UgeworCQkJbGlzdCA9IGFwcGVuZChsaXN0LCB2YWwpCisJCX0KKwl9CisJcmV0dXJuIGxpc3QsIG5pbAorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZE1hcCgpIChpbnRlcmZhY2V7fSwgZXJyb3IpIHsKKwlsZW5ndGgsIGVyciA6PSBkLnJlYWRVaW50MzIoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJbSA6PSBtYWtlKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSwgbGVuZ3RoKQorCWZvciBpIDo9IHVpbnQzMigwKTsgaSA8IGxlbmd0aDsgaSsrIHsKKwkJa2V5LCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIGVycgorCQl9CisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gbmlsLCBlcnIKKwkJfQorCQlpZiBrZXkgPT0gbmlsIHsKKwkJCW1bbmlsXSA9IHZhbAorCQl9IGVsc2UgaWYgcmVmbGVjdC5UeXBlT2Yoa2V5KS5Db21wYXJhYmxlKCkgeworCQkJbVtrZXldID0gdmFsCisJCX0gZWxzZSBpZiByZWZsZWN0LlR5cGVPZihrZXkpLktpbmQoKSA9PSByZWZsZWN0Lk1hcCB7CisJCQltWyZrZXldID0gdmFsCisJCX0gZWxzZSB7CisJCQltW2ZtdC5TcHJpbnQoa2V5KV0gPSB2YWwKKwkJfQorCX0KKwlyZXR1cm4gbSwgbmlsCit9CisKK2Z1bmMgKGQgKkdyYXBoQmluYXJ5RGVzZXJpYWxpemVyKSByZWFkVmVydGV4KHdpdGhQcm9wcyBib29sKSAoKlZlcnRleCwgZXJyb3IpIHsKKwlpZCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCWxhYmVscywgZXJyIDo9IGQucmVhZExpc3QoZmFsc2UpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlsYWJlbFNsaWNlLCBvayA6PSBsYWJlbHMuKFtdaW50ZXJmYWNle30pCisJaWYgIW9rIHx8IGxlbihsYWJlbFNsaWNlKSA9PSAwIHsKKwkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwNFJlYWROdWxsVHlwZUVycm9yKQorCX0KKwlsYWJlbCwgb2sgOj0gbGFiZWxTbGljZVswXS4oc3RyaW5nKQorCWlmICFvayB7CisJCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDRSZWFkTnVsbFR5cGVFcnJvcikKKwl9CisJdiA6PSAmVmVydGV4e0VsZW1lbnQ6IEVsZW1lbnR7SWQ6IGlkLCBMYWJlbDogbGFiZWx9fQorCWlmIHdpdGhQcm9wcyB7CisJCXByb3BzLCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIGVycgorCQl9CisJCXYuUHJvcGVydGllcyA9IG1ha2UoW11pbnRlcmZhY2V7fSwgMCkKKwkJaWYgcHJvcHMgIT0gbmlsIHsKKwkJCXYuUHJvcGVydGllcyA9IHByb3BzCisJCX0KKwl9CisJcmV0dXJuIHYsIG5pbAorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZEVkZ2UoKSAoKkVkZ2UsIGVycm9yKSB7CisJaWQsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlsYWJlbHMsIGVyciA6PSBkLnJlYWRMaXN0KGZhbHNlKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJbGFiZWxTbGljZSwgb2sgOj0gbGFiZWxzLihbXWludGVyZmFjZXt9KQorCWlmICFvayB8fCBsZW4obGFiZWxTbGljZSkgPT0gMCB7CisJCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDRSZWFkTnVsbFR5cGVFcnJvcikKKwl9CisJbGFiZWwsIG9rIDo9IGxhYmVsU2xpY2VbMF0uKHN0cmluZykKKwlpZiAhb2sgeworCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNDA0UmVhZE51bGxUeXBlRXJyb3IpCisJfQorCWluViwgZXJyIDo9IGQucmVhZFZlcnRleChmYWxzZSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCW91dFYsIGVyciA6PSBkLnJlYWRWZXJ0ZXgoZmFsc2UpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlpZiBfLCBlcnIgOj0gZC5yZWFkQnl0ZXMoMik7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJcHJvcHMsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwllIDo9ICZFZGdleworCQlFbGVtZW50OiBFbGVtZW50e0lkOiBpZCwgTGFiZWw6IGxhYmVsfSwKKwkJSW5WOiAgICAgKmluViwKKwkJT3V0VjogICAgKm91dFYsCisJfQorCWUuUHJvcGVydGllcyA9IG1ha2UoW11pbnRlcmZhY2V7fSwgMCkKKwlpZiBwcm9wcyAhPSBuaWwgeworCQllLlByb3BlcnRpZXMgPSBwcm9wcworCX0KKwlyZXR1cm4gZSwgbmlsCit9CisKK2Z1bmMgKGQgKkdyYXBoQmluYXJ5RGVzZXJpYWxpemVyKSByZWFkUGF0aCgpICgqUGF0aCwgZXJyb3IpIHsKKwlsYWJlbHMsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlvYmplY3RzLCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJb2JqZWN0U2xpY2UsIG9rIDo9IG9iamVjdHMuKFtdaW50ZXJmYWNle30pCisJaWYgIW9rIHsKKwkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwNFJlYWROdWxsVHlwZUVycm9yKQorCX0KKwlwYXRoIDo9ICZQYXRoe09iamVjdHM6IG9iamVjdFNsaWNlfQorCWlmIGxhYmVscyAhPSBuaWwgeworCQlsYWJlbFNsaWNlLCBvayA6PSBsYWJlbHMuKFtdaW50ZXJmYWNle30pCisJCWlmICFvayB7CisJCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNDA0UmVhZE51bGxUeXBlRXJyb3IpCisJCX0KKwkJZm9yIF8sIGwgOj0gcmFuZ2UgbGFiZWxTbGljZSB7CisJCQlzZXQsIG9rIDo9IGwuKCpTaW1wbGVTZXQpCisJCQlpZiAhb2sgeworCQkJCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDRSZWFkTnVsbFR5cGVFcnJvcikKKwkJCX0KKwkJCXBhdGguTGFiZWxzID0gYXBwZW5kKHBhdGguTGFiZWxzLCBzZXQpCisJCX0KKwl9CisJcmV0dXJuIHBhdGgsIG5pbAorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZFByb3BlcnR5KCkgKCpQcm9wZXJ0eSwgZXJyb3IpIHsKKwlrZXksIGVyciA6PSBkLnJlYWRTdHJpbmcoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJdmFsdWUsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlpZiBfLCBlcnIgOj0gZC5yZWFkQnl0ZXMoMik7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJcmV0dXJuICZQcm9wZXJ0eXtLZXk6IGtleSwgVmFsdWU6IHZhbHVlfSwgbmlsCit9CisKK2Z1bmMgKGQgKkdyYXBoQmluYXJ5RGVzZXJpYWxpemVyKSByZWFkVmVydGV4UHJvcGVydHkoKSAoKlZlcnRleFByb3BlcnR5LCBlcnJvcikgeworCWlkLCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJbGFiZWxzLCBlcnIgOj0gZC5yZWFkTGlzdChmYWxzZSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCWxhYmVsU2xpY2UsIG9rIDo9IGxhYmVscy4oW11pbnRlcmZhY2V7fSkKKwlpZiAhb2sgfHwgbGVuKGxhYmVsU2xpY2UpID09IDAgeworCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNDA0UmVhZE51bGxUeXBlRXJyb3IpCisJfQorCWxhYmVsLCBvayA6PSBsYWJlbFNsaWNlWzBdLihzdHJpbmcpCisJaWYgIW9rIHsKKwkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDQwNFJlYWROdWxsVHlwZUVycm9yKQorCX0KKwl2YWx1ZSwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCWlmIF8sIGVyciA6PSBkLnJlYWRCeXRlcygyKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlwcm9wcywgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCXZwIDo9ICZWZXJ0ZXhQcm9wZXJ0eXsKKwkJRWxlbWVudDogRWxlbWVudHtJZDogaWQsIExhYmVsOiBsYWJlbH0sCisJCUtleTogICAgIGxhYmVsLAorCQlWYWx1ZTogICB2YWx1ZSwKKwl9CisJdnAuUHJvcGVydGllcyA9IG1ha2UoW11pbnRlcmZhY2V7fSwgMCkKKwlpZiBwcm9wcyAhPSBuaWwgeworCQl2cC5Qcm9wZXJ0aWVzID0gcHJvcHMKKwl9CisJcmV0dXJuIHZwLCBuaWwKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWRCaWdJbnQoKSAoKmJpZy5JbnQsIGVycm9yKSB7CisJbGVuZ3RoLCBlcnIgOj0gZC5yZWFkSW50MzIoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJaWYgbGVuZ3RoID09IDAgeworCQlyZXR1cm4gYmlnLk5ld0ludCgwKSwgbmlsCisJfQorCWIsIGVyciA6PSBkLnJlYWRCeXRlcyhpbnQobGVuZ3RoKSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCWJpIDo9IGJpZy5OZXdJbnQoMCkuU2V0Qnl0ZXMoYikKKwlpZiBiWzBdJjB4ODAgIT0gMCB7CisJCW9uZSA6PSBiaWcuTmV3SW50KDEpCisJCWJpdExlbiA6PSB1aW50KChsZW4oYikqOCkvOCsxKSAqIDgKKwkJYmkuU3ViKGJpLCBuZXcoYmlnLkludCkuTHNoKG9uZSwgYml0TGVuKSkKKwl9CisJcmV0dXJuIGJpLCBuaWwKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWRCaWdEZWNpbWFsKCkgKCpCaWdEZWNpbWFsLCBlcnJvcikgeworCXNjYWxlLCBlcnIgOj0gZC5yZWFkSW50MzIoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJdW5zY2FsZWQsIGVyciA6PSBkLnJlYWRCaWdJbnQoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJcmV0dXJuICZCaWdEZWNpbWFse1NjYWxlOiBzY2FsZSwgVW5zY2FsZWRWYWx1ZTogdW5zY2FsZWR9LCBuaWwKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWREYXRlVGltZSgpICh0aW1lLlRpbWUsIGVycm9yKSB7CisJeWVhciwgZXJyIDo9IGQucmVhZEludDMyKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIHRpbWUuVGltZXt9LCBlcnIKKwl9CisJbW9udGgsIGVyciA6PSBkLnJlYWRCeXRlKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIHRpbWUuVGltZXt9LCBlcnIKKwl9CisJZGF5LCBlcnIgOj0gZC5yZWFkQnl0ZSgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiB0aW1lLlRpbWV7fSwgZXJyCisJfQorCXRvdGFsTlMsIGVyciA6PSBkLnJlYWRJbnQ2NCgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiB0aW1lLlRpbWV7fSwgZXJyCisJfQorCW9mZnNldCwgZXJyIDo9IGQucmVhZEludDMyKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIHRpbWUuVGltZXt9LCBlcnIKKwl9CisJbnMgOj0gdG90YWxOUyAlIDFlOQorCXRvdGFsUyA6PSB0b3RhbE5TIC8gMWU5CisJcyA6PSB0b3RhbFMgJSA2MAorCXRvdGFsTSA6PSB0b3RhbFMgLyA2MAorCW0gOj0gdG90YWxNICUgNjAKKwloIDo9IHRvdGFsTSAvIDYwCisJcmV0dXJuIHRpbWUuRGF0ZShpbnQoeWVhciksIHRpbWUuTW9udGgobW9udGgpLCBpbnQoZGF5KSwgaW50KGgpLCBpbnQobSksIGludChzKSwgaW50KG5zKSwgR2V0VGltZXpvbmVGcm9tT2Zmc2V0KGludChvZmZzZXQpKSksIG5pbAorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZER1cmF0aW9uKCkgKHRpbWUuRHVyYXRpb24sIGVycm9yKSB7CisJc2Vjb25kcywgZXJyIDo9IGQucmVhZEludDY0KCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIDAsIGVycgorCX0KKwluYW5vcywgZXJyIDo9IGQucmVhZEludDMyKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIDAsIGVycgorCX0KKwlyZXR1cm4gdGltZS5EdXJhdGlvbihzZWNvbmRzKmludDY0KHRpbWUuU2Vjb25kKSArIGludDY0KG5hbm9zKSksIG5pbAorfQorCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgcmVhZEJ5dGVCdWZmZXIoKSAoKkJ5dGVCdWZmZXIsIGVycm9yKSB7CisJbGVuZ3RoLCBlcnIgOj0gZC5yZWFkSW50MzIoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJZGF0YSwgZXJyIDo9IGQucmVhZEJ5dGVzKGludChsZW5ndGgpKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJcmV0dXJuICZCeXRlQnVmZmVye0RhdGE6IGRhdGF9LCBuaWwKK30KKworZnVuYyAoZCAqR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIpIHJlYWRFbnVtKGR0IGRhdGFUeXBlKSAoaW50ZXJmYWNle30sIGVycm9yKSB7CisJaWYgXywgZXJyIDo9IGQucmVhZEJ5dGUoKTsgZXJyICE9IG5pbCB7IC8vIHR5cGUgY29kZSAoc3RyaW5nKQorCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJaWYgXywgZXJyIDo9IGQucmVhZEJ5dGUoKTsgZXJyICE9IG5pbCB7IC8vIG51bGwgZmxhZworCQlyZXR1cm4gbmlsLCBlcnIKKwl9CisJcywgZXJyIDo9IGQucmVhZFN0cmluZygpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlzd2l0Y2ggZHQgeworCWNhc2UgdFR5cGU6CisJCXJldHVybiB0KHMpLCBuaWwKKwljYXNlIGRpcmVjdGlvblR5cGU6CisJCXJldHVybiBkaXJlY3Rpb24ocyksIG5pbAorCWNhc2UgbWVyZ2VUeXBlOgorCQlyZXR1cm4gbWVyZ2UocyksIG5pbAorCWNhc2UgZ1R5cGVUeXBlOgorCQlyZXR1cm4gZ1R5cGUocyksIG5pbAorCWRlZmF1bHQ6CisJCXJldHVybiBzLCBuaWwKKwl9Cit9CisKKy8vIFJlYWRTdGF0dXMgcmVhZHMgdGhlIHJlc3BvbnNlIHN0YXR1cyBhZnRlciB0aGUgRW5kT2ZTdHJlYW0gbWFya2VyLgorLy8gUmV0dXJucyB0aGUgc3RhdHVzIGNvZGUsIG1lc3NhZ2UsIGV4Y2VwdGlvbiBzdHJpbmcsIGFuZCBhbnkgZXJyb3IgZW5jb3VudGVyZWQuCisvLyBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgUmVhZEZ1bGx5UXVhbGlmaWVkKCkgcmV0dXJucyBhbiBFbmRPZlN0cmVhbSBtYXJrZXIuCitmdW5jIChkICpHcmFwaEJpbmFyeURlc2VyaWFsaXplcikgUmVhZFN0YXR1cygpIChjb2RlIHVpbnQzMiwgbWVzc2FnZSBzdHJpbmcsIGV4Y2VwdGlvbiBzdHJpbmcsIGVyciBlcnJvcikgeworCWNvZGUsIGVyciA9IGQucmVhZFVpbnQzMigpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiAwLCAiIiwgIiIsIGVycgorCX0KKwlmbGFnLCBlcnIgOj0gZC5yZWFkQnl0ZSgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBjb2RlLCAiIiwgIiIsIGVycgorCX0KKwlpZiBmbGFnICE9IHZhbHVlRmxhZ051bGwgeworCQltZXNzYWdlLCBlcnIgPSBkLnJlYWRTdHJpbmcoKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBjb2RlLCAiIiwgIiIsIGVycgorCQl9CisJfQorCWZsYWcsIGVyciA9IGQucmVhZEJ5dGUoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gY29kZSwgbWVzc2FnZSwgIiIsIGVycgorCX0KKwlpZiBmbGFnICE9IHZhbHVlRmxhZ051bGwgeworCQlleGNlcHRpb24sIGVyciA9IGQucmVhZFN0cmluZygpCisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGNvZGUsIG1lc3NhZ2UsICIiLCBlcnIKKwkJfQorCX0KKwlyZXR1cm4gY29kZSwgbWVzc2FnZSwgZXhjZXB0aW9uLCBuaWwKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2dyYXBoQmluYXJ5RGVzZXJpYWxpemVyX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9ncmFwaEJpbmFyeURlc2VyaWFsaXplcl90ZXN0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NGRhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9ncmFwaEJpbmFyeURlc2VyaWFsaXplcl90ZXN0LmdvCkBAIC0wLDAgKzEsNTA2IEBACisvKgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBncmVtbGluZ28KKworaW1wb3J0ICgKKwkiYnl0ZXMiCisJImlvIgorCSJzeW5jIgorCSJ0ZXN0aW5nIgorCSJ0aW1lIgorCisJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCisJImdvbGFuZy5vcmcveC90ZXh0L2xhbmd1YWdlIgorKQorCisvLyBzbG93UmVhZGVyIHNpbXVsYXRlcyBhIG5ldHdvcmsgc3RyZWFtIHRoYXQgZGVsaXZlcnMgZGF0YSBpbiBjaHVua3Mgd2l0aCBkZWxheXMuCisvLyBUaGlzIG1pbWljcyBob3cgR28ncyBIVFRQIGNsaWVudCByZWNlaXZlcyBjaHVua2VkIHRyYW5zZmVyLWVuY29kZWQgcmVzcG9uc2VzCisvLyB3aGVyZSBjaHVuayBib3VuZGFyaWVzIGRvbid0IGFsaWduIHdpdGggR3JhcGhCaW5hcnkgb2JqZWN0IGJvdW5kYXJpZXMuCit0eXBlIHNsb3dSZWFkZXIgc3RydWN0IHsKKwljaHVua3MgW11bXWJ5dGUKKwlkZWxheSAgdGltZS5EdXJhdGlvbgorCWluZGV4ICBpbnQKKwlvZmZzZXQgaW50CisJbXUgICAgIHN5bmMuTXV0ZXgKK30KKworZnVuYyBuZXdTbG93UmVhZGVyKGNodW5rcyBbXVtdYnl0ZSwgZGVsYXkgdGltZS5EdXJhdGlvbikgKnNsb3dSZWFkZXIgeworCXJldHVybiAmc2xvd1JlYWRlcntjaHVua3M6IGNodW5rcywgZGVsYXk6IGRlbGF5fQorfQorCitmdW5jIChyICpzbG93UmVhZGVyKSBSZWFkKHAgW11ieXRlKSAobiBpbnQsIGVyciBlcnJvcikgeworCXIubXUuTG9jaygpCisJZGVmZXIgci5tdS5VbmxvY2soKQorCisJaWYgci5pbmRleCA+PSBsZW4oci5jaHVua3MpIHsKKwkJcmV0dXJuIDAsIGlvLkVPRgorCX0KKworCS8vIFNpbXVsYXRlIG5ldHdvcmsgZGVsYXkgYmV0d2VlbiBjaHVua3MKKwlpZiByLm9mZnNldCA9PSAwICYmIHIuaW5kZXggPiAwIHsKKwkJci5tdS5VbmxvY2soKQorCQl0aW1lLlNsZWVwKHIuZGVsYXkpCisJCXIubXUuTG9jaygpCisJfQorCisJY2h1bmsgOj0gci5jaHVua3Nbci5pbmRleF0KKwlyZW1haW5pbmcgOj0gY2h1bmtbci5vZmZzZXQ6XQorCW4gPSBjb3B5KHAsIHJlbWFpbmluZykKKwlyLm9mZnNldCArPSBuCisKKwlpZiByLm9mZnNldCA+PSBsZW4oY2h1bmspIHsKKwkJci5pbmRleCsrCisJCXIub2Zmc2V0ID0gMAorCX0KKworCXJldHVybiBuLCBuaWwKK30KKworZnVuYyBUZXN0R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIodCAqdGVzdGluZy5UKSB7CisJdC5SdW4oInJlYWRJbnQzMiIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWRhdGEgOj0gW11ieXRlezB4MDAsIDB4MDAsIDB4MDAsIDB4MkF9IC8vIDQyCisJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGRhdGEpKQorCQl2YWwsIGVyciA6PSBkLnJlYWRJbnQzMigpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuRXF1YWwodCwgaW50MzIoNDIpLCB2YWwpCisJfSkKKworCXQuUnVuKCJyZWFkSW50NjQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlkYXRhIDo9IFtdYnl0ZXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0fSAvLyAxMDAKKwkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoZGF0YSkpCisJCXZhbCwgZXJyIDo9IGQucmVhZEludDY0KCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCBpbnQ2NCgxMDApLCB2YWwpCisJfSkKKworCXQuUnVuKCJyZWFkU3RyaW5nIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZGF0YSA6PSBbXWJ5dGV7MHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgJ2gnLCAnZScsICdsJywgJ2wnLCAnbyd9CisJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGRhdGEpKQorCQl2YWwsIGVyciA6PSBkLnJlYWRTdHJpbmcoKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJYXNzZXJ0LkVxdWFsKHQsICJoZWxsbyIsIHZhbCkKKwl9KQorCisJdC5SdW4oInJlYWRTdHJpbmcgZW1wdHkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlkYXRhIDo9IFtdYnl0ZXsweDAwLCAweDAwLCAweDAwLCAweDAwfQorCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihkYXRhKSkKKwkJdmFsLCBlcnIgOj0gZC5yZWFkU3RyaW5nKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCAiIiwgdmFsKQorCX0pCisKKwl0LlJ1bigiZXJyb3Igb24gaW5jb21wbGV0ZSBkYXRhIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZGF0YSA6PSBbXWJ5dGV7MHgwMCwgMHgwMH0gLy8gaW5jb21wbGV0ZSBpbnQzMgorCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihkYXRhKSkKKwkJXywgZXJyIDo9IGQucmVhZEludDMyKCkKKwkJYXNzZXJ0LkVycm9ySXModCwgZXJyLCBpby5FcnJVbmV4cGVjdGVkRU9GKQorCX0pCisKKwl0LlJ1bigic3RpY2t5IGVycm9yIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZGF0YSA6PSBbXWJ5dGV7MHgwMH0gLy8gdG9vIHNob3J0CisJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGRhdGEpKQorCisJCV8sIGVycjEgOj0gZC5yZWFkSW50MzIoKQorCQlhc3NlcnQuRXJyb3IodCwgZXJyMSkKKworCQkvLyBTdWJzZXF1ZW50IHJlYWRzIHNob3VsZCBhbHNvIGZhaWwKKwkJXywgZXJyMiA6PSBkLnJlYWRJbnQzMigpCisJCWFzc2VydC5FcnJvcih0LCBlcnIyKQorCX0pCit9CisKK2Z1bmMgVGVzdFN0cmVhbWluZ0NoYW5uZWxEZWxpdmVyeSh0ICp0ZXN0aW5nLlQpIHsKKwl0LlJ1bigicmVzdWx0cyBhcnJpdmUgaW5jcmVtZW50YWxseSB2aWEgY2hhbm5lbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXJzIDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQoKQorCisJCS8vIFNpbXVsYXRlIHN0cmVhbWluZyAtIHNlbmQgcmVzdWx0cyB3aXRoIGRlbGF5cworCQlnbyBmdW5jKCkgeworCQkJZm9yIGkgOj0gMDsgaSA8IDU7IGkrKyB7CisJCQkJdGltZS5TbGVlcCgxMCAqIHRpbWUuTWlsbGlzZWNvbmQpCisJCQkJcnMuQ2hhbm5lbCgpIDwtICZSZXN1bHR7aX0KKwkJCX0KKwkJCXJzLkNsb3NlKCkKKwkJfSgpCisKKwkJdmFyIHRpbWVzIFtddGltZS5EdXJhdGlvbgorCQlzdGFydCA6PSB0aW1lLk5vdygpCisKKwkJZm9yIHsKKwkJCV8sIG9rLCBfIDo9IHJzLk9uZSgpCisJCQlpZiAhb2sgeworCQkJCWJyZWFrCisJCQl9CisJCQl0aW1lcyA9IGFwcGVuZCh0aW1lcywgdGltZS5TaW5jZShzdGFydCkpCisJCX0KKworCQlhc3NlcnQuRXF1YWwodCwgNSwgbGVuKHRpbWVzKSkKKworCQkvLyBSZXN1bHRzIHNob3VsZCBhcnJpdmUgfjEwbXMgYXBhcnQsIG5vdCBhbGwgYXQgb25jZQorCQlmb3IgaSA6PSAxOyBpIDwgbGVuKHRpbWVzKTsgaSsrIHsKKwkJCWdhcCA6PSB0aW1lc1tpXSAtIHRpbWVzW2ktMV0KKwkJCWFzc2VydC5HcmVhdGVyT3JFcXVhbCh0LCBnYXAsIDUqdGltZS5NaWxsaXNlY29uZCwKKwkJCQkiUmVzdWx0cyAlZCBhbmQgJWQgYXJyaXZlZCB0b28gY2xvc2UgdG9nZXRoZXI6ICV2IiwgaS0xLCBpLCBnYXApCisJCX0KKwl9KQorfQorCisvLyBUZXN0R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXJCbG9ja3NPblBhcnRpYWxEYXRhIHZlcmlmaWVzIHRoYXQgdGhlIGRlc2VyaWFsaXplciBjb3JyZWN0bHkgYmxvY2tzCisvLyB3aGVuIGl0IHJlY2VpdmVzIHBhcnRpYWwgZGF0YSwgd2FpdGluZyBmb3IgdGhlIHJlc3Qgb2YgdGhlIG9iamVjdCB0byBhcnJpdmUuCisvLyBUaGlzIHNpbXVsYXRlcyB0aGUgcmVhbC13b3JsZCBzY2VuYXJpbyB3aGVyZSBHbydzIEhUVFAgY2xpZW50IHJlY2VpdmVzIGNodW5rcworLy8gdGhhdCBkb24ndCBhbGlnbiB3aXRoIHNlcnZlci1zZW50IEdyYXBoQmluYXJ5IG9iamVjdCBib3VuZGFyaWVzLgorZnVuYyBUZXN0R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXJCbG9ja3NPblBhcnRpYWxEYXRhKHQgKnRlc3RpbmcuVCkgeworCXQuUnVuKCJibG9ja3MgdW50aWwgY29tcGxldGUgaW50MzIgaXMgYXZhaWxhYmxlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gU3BsaXQgYSA0LWJ5dGUgaW50MzIgYWNyb3NzIHR3byBjaHVua3MKKwkJY2h1bmsxIDo9IFtdYnl0ZXsweDAwLCAweDAwfSAvLyBGaXJzdCAyIGJ5dGVzCisJCWNodW5rMiA6PSBbXWJ5dGV7MHgwMCwgMHgyQX0gLy8gTGFzdCAyIGJ5dGVzICh0b3RhbCA9IDQyKQorCisJCXJlYWRlciA6PSBuZXdTbG93UmVhZGVyKFtdW11ieXRle2NodW5rMSwgY2h1bmsyfSwgMjAqdGltZS5NaWxsaXNlY29uZCkKKwkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihyZWFkZXIpCisKKwkJc3RhcnQgOj0gdGltZS5Ob3coKQorCQl2YWwsIGVyciA6PSBkLnJlYWRJbnQzMigpCisJCWVsYXBzZWQgOj0gdGltZS5TaW5jZShzdGFydCkKKworCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJYXNzZXJ0LkVxdWFsKHQsIGludDMyKDQyKSwgdmFsKQorCQkvLyBTaG91bGQgaGF2ZSBibG9ja2VkIHdhaXRpbmcgZm9yIHNlY29uZCBjaHVuaworCQlhc3NlcnQuR3JlYXRlck9yRXF1YWwodCwgZWxhcHNlZCwgMTUqdGltZS5NaWxsaXNlY29uZCwKKwkJCSJTaG91bGQgaGF2ZSBibG9ja2VkIHdhaXRpbmcgZm9yIHJlbWFpbmluZyBieXRlcyIpCisJfSkKKworCXQuUnVuKCJibG9ja3MgdW50aWwgY29tcGxldGUgc3RyaW5nIGlzIGF2YWlsYWJsZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIFN0cmluZyAiaGVsbG8iIHNwbGl0IGFjcm9zcyBjaHVua3M6CisJCS8vIENodW5rIDE6IGxlbmd0aCAoNCBieXRlcykgKyBwYXJ0aWFsIGNvbnRlbnQKKwkJLy8gQ2h1bmsgMjogcmVtYWluaW5nIGNvbnRlbnQKKwkJY2h1bmsxIDo9IFtdYnl0ZXsweDAwLCAweDAwLCAweDAwLCAweDA1LCAnaCcsICdlJ30gLy8gbGVuZ3RoPTUsICJoZSIKKwkJY2h1bmsyIDo9IFtdYnl0ZXsnbCcsICdsJywgJ28nfSAgICAgICAgICAgICAgICAgICAgLy8gImxsbyIKKworCQlyZWFkZXIgOj0gbmV3U2xvd1JlYWRlcihbXVtdYnl0ZXtjaHVuazEsIGNodW5rMn0sIDIwKnRpbWUuTWlsbGlzZWNvbmQpCisJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIocmVhZGVyKQorCisJCXN0YXJ0IDo9IHRpbWUuTm93KCkKKwkJdmFsLCBlcnIgOj0gZC5yZWFkU3RyaW5nKCkKKwkJZWxhcHNlZCA6PSB0aW1lLlNpbmNlKHN0YXJ0KQorCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuRXF1YWwodCwgImhlbGxvIiwgdmFsKQorCQlhc3NlcnQuR3JlYXRlck9yRXF1YWwodCwgZWxhcHNlZCwgMTUqdGltZS5NaWxsaXNlY29uZCwKKwkJCSJTaG91bGQgaGF2ZSBibG9ja2VkIHdhaXRpbmcgZm9yIHJlbWFpbmluZyBzdHJpbmcgYnl0ZXMiKQorCX0pCit9CisKKy8vIFRlc3RHcmFwaEJpbmFyeURlc2VyaWFsaXplck11bHRpcGxlT2JqZWN0cyB2ZXJpZmllcyB0aGF0IG11bHRpcGxlIEdyYXBoQmluYXJ5IG9iamVjdHMKKy8vIGNhbiBiZSByZWFkIGZyb20gYSBzdHJlYW0sIHdpdGggZWFjaCBvYmplY3QgcmV0dXJuZWQgYXMgc29vbiBhcyBpdCdzIGNvbXBsZXRlLgorZnVuYyBUZXN0R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXJNdWx0aXBsZU9iamVjdHModCAqdGVzdGluZy5UKSB7CisJdC5SdW4oInJlYWRzIG11bHRpcGxlIG9iamVjdHMgYXMgdGhleSBhcnJpdmUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBCdWlsZCBhIHN0cmVhbSB3aXRoIDMgZnVsbHktcXVhbGlmaWVkIGludDMyIHZhbHVlcworCQkvLyBFYWNoIGludDMyOiB0eXBlKDEpICsgZmxhZygxKSArIHZhbHVlKDQpID0gNiBieXRlcworCQlvYmoxIDo9IFtdYnl0ZXsweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSAvLyBpbnQzMiA9IDEKKwkJb2JqMiA6PSBbXWJ5dGV7MHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMn0gLy8gaW50MzIgPSAyCisJCW9iajMgOj0gW11ieXRlezB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDN9IC8vIGludDMyID0gMworCisJCS8vIERlbGl2ZXIgZWFjaCBvYmplY3QgYXMgYSBzZXBhcmF0ZSBjaHVuayB3aXRoIGRlbGF5CisJCXJlYWRlciA6PSBuZXdTbG93UmVhZGVyKFtdW11ieXRle29iajEsIG9iajIsIG9iajN9LCAxNSp0aW1lLk1pbGxpc2Vjb25kKQorCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKHJlYWRlcikKKworCQl2YXIgcmVzdWx0cyBbXWludDMyCisJCXZhciB0aW1lcyBbXXRpbWUuRHVyYXRpb24KKwkJc3RhcnQgOj0gdGltZS5Ob3coKQorCisJCWZvciBpIDo9IDA7IGkgPCAzOyBpKysgeworCQkJdmFsLCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlyZXN1bHRzID0gYXBwZW5kKHJlc3VsdHMsIHZhbC4oaW50MzIpKQorCQkJdGltZXMgPSBhcHBlbmQodGltZXMsIHRpbWUuU2luY2Uoc3RhcnQpKQorCQl9CisKKwkJYXNzZXJ0LkVxdWFsKHQsIFtdaW50MzJ7MSwgMiwgM30sIHJlc3VsdHMpCisKKwkJLy8gT2JqZWN0cyBzaG91bGQgYXJyaXZlIHdpdGggZGVsYXlzIGJldHdlZW4gdGhlbQorCQlmb3IgaSA6PSAxOyBpIDwgbGVuKHRpbWVzKTsgaSsrIHsKKwkJCWdhcCA6PSB0aW1lc1tpXSAtIHRpbWVzW2ktMV0KKwkJCWFzc2VydC5HcmVhdGVyT3JFcXVhbCh0LCBnYXAsIDEwKnRpbWUuTWlsbGlzZWNvbmQsCisJCQkJIk9iamVjdCAlZCBzaG91bGQgaGF2ZSBhcnJpdmVkIGFmdGVyIGEgZGVsYXkiLCBpKQorCQl9CisJfSkKKworCXQuUnVuKCJoYW5kbGVzIG9iamVjdCBzcGxpdCBhY3Jvc3MgY2h1bmsgYm91bmRhcnkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBGaXJzdCBjaHVuazogY29tcGxldGUgb2JqZWN0ICsgcGFydGlhbCBzZWNvbmQgb2JqZWN0CisJCS8vIFNlY29uZCBjaHVuazogcmVzdCBvZiBzZWNvbmQgb2JqZWN0ICsgY29tcGxldGUgdGhpcmQgb2JqZWN0CisJCWNodW5rMSA6PSBbXWJ5dGV7CisJCQkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAvLyBpbnQzMiA9IDEgKGNvbXBsZXRlKQorCQkJMHgwMSwgMHgwMCwgMHgwMCwgLy8gcGFydGlhbCBpbnQzMiAodHlwZSArIGZsYWcgKyAyIGJ5dGVzIG9mIHZhbHVlKQorCQl9CisJCWNodW5rMiA6PSBbXWJ5dGV7CisJCQkweDAwLCAweDAwLCAweDAyLCAvLyByZXN0IG9mIGludDMyID0gMgorCQkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgLy8gaW50MzIgPSAzIChjb21wbGV0ZSkKKwkJfQorCisJCXJlYWRlciA6PSBuZXdTbG93UmVhZGVyKFtdW11ieXRle2NodW5rMSwgY2h1bmsyfSwgMjAqdGltZS5NaWxsaXNlY29uZCkKKwkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihyZWFkZXIpCisKKwkJLy8gRmlyc3Qgb2JqZWN0IHNob3VsZCByZXR1cm4gaW1tZWRpYXRlbHkKKwkJdmFsMSwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCBpbnQzMigxKSwgdmFsMSkKKworCQkvLyBTZWNvbmQgb2JqZWN0IHNob3VsZCBibG9jayB3YWl0aW5nIGZvciBjaHVuazIKKwkJc3RhcnQgOj0gdGltZS5Ob3coKQorCQl2YWwyLCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCQllbGFwc2VkIDo9IHRpbWUuU2luY2Uoc3RhcnQpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuRXF1YWwodCwgaW50MzIoMiksIHZhbDIpCisJCWFzc2VydC5HcmVhdGVyT3JFcXVhbCh0LCBlbGFwc2VkLCAxNSp0aW1lLk1pbGxpc2Vjb25kLAorCQkJIlNob3VsZCBoYXZlIGJsb2NrZWQgd2FpdGluZyBmb3IgcmVzdCBvZiBvYmplY3QiKQorCisJCS8vIFRoaXJkIG9iamVjdCBzaG91bGQgcmV0dXJuIGltbWVkaWF0ZWx5IChhbHJlYWR5IGluIGJ1ZmZlcikKKwkJdmFsMywgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCBpbnQzMigzKSwgdmFsMykKKwl9KQorfQorCisvLyBUZXN0R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXJXaXRoRW5kT2ZTdHJlYW1NYXJrZXIgdmVyaWZpZXMgdGhhdCB0aGUgZGVzZXJpYWxpemVyIGNvcnJlY3RseQorLy8gaGFuZGxlcyB0aGUgRW5kT2ZTdHJlYW0gbWFya2VyIGFuZCBzdWJzZXF1ZW50IHN0YXR1cyByZWFkaW5nLgorZnVuYyBUZXN0R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXJXaXRoRW5kT2ZTdHJlYW1NYXJrZXIodCAqdGVzdGluZy5UKSB7CisJdC5SdW4oInJlYWRzIEVuZE9mU3RyZWFtIG1hcmtlciBhbmQgc3RhdHVzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gQnVpbGQgYSBjb21wbGV0ZSByZXNwb25zZToKKwkJLy8gLSBIZWFkZXIgKDIgYnl0ZXMpOiB2ZXJzaW9uICsgZmxhZ3MKKwkJLy8gLSBPbmUgaW50MzIgcmVzdWx0CisJCS8vIC0gRW5kT2ZTdHJlYW0gbWFya2VyCisJCS8vIC0gU3RhdHVzOiBjb2RlKDQpICsgbWVzc2FnZShudWxsYWJsZSkgKyBleGNlcHRpb24obnVsbGFibGUpCisJCWRhdGEgOj0gW11ieXRleworCQkJMHg4NCwgMHgwMCwgLy8gSGVhZGVyOiB2ZXJzaW9uIGJ5dGUgKyBubyBidWxraW5nCisJCQkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJBLCAvLyBpbnQzMiA9IDQyCisJCQkweGZkLCAweDAwLCAweDAwLCAvLyBNYXJrZXIgdHlwZSArIGZsYWcgKyB2YWx1ZT0wIChFbmRPZlN0cmVhbSkKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4QzgsIC8vIFN0YXR1cyBjb2RlID0gMjAwCisJCQkweDAxLCAvLyBNZXNzYWdlIGlzIG51bGwKKwkJCTB4MDEsIC8vIEV4Y2VwdGlvbiBpcyBudWxsCisJCX0KKworCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihkYXRhKSkKKworCQkvLyBSZWFkIGhlYWRlcgorCQllcnIgOj0gZC5SZWFkSGVhZGVyKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisKKwkJLy8gUmVhZCB0aGUgcmVzdWx0CisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCBpbnQzMig0MiksIHZhbCkKKworCQkvLyBSZWFkIEVuZE9mU3RyZWFtIG1hcmtlcgorCQltYXJrZXIsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuRXF1YWwodCwgRW5kT2ZTdHJlYW0oKSwgbWFya2VyKQorCisJCS8vIFJlYWQgc3RhdHVzCisJCWNvZGUsIG1zZywgZXhjLCBlcnIgOj0gZC5SZWFkU3RhdHVzKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCB1aW50MzIoMjAwKSwgY29kZSkKKwkJYXNzZXJ0LkVxdWFsKHQsICIiLCBtc2cpCisJCWFzc2VydC5FcXVhbCh0LCAiIiwgZXhjKQorCX0pCisKKwl0LlJ1bigicmVhZHMgc3RhdHVzIHdpdGggbWVzc2FnZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIFN0YXR1cyB3aXRoIGEgbWVzc2FnZQorCQlkYXRhIDo9IFtdYnl0ZXsKKwkJCTB4ZmQsIDB4MDAsIDB4MDAsIC8vIEVuZE9mU3RyZWFtIG1hcmtlcgorCQkJMHgwMCwgMHgwMCwgMHgwMSwgMHg5MCwgLy8gU3RhdHVzIGNvZGUgPSA0MDAKKwkJCTB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNZXNzYWdlIGlzIG5vdCBudWxsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAnZScsICdyJywgJ3InLCAnbycsICdyJywgLy8gTWVzc2FnZSA9ICJlcnJvciIKKwkJCTB4MDEsIC8vIEV4Y2VwdGlvbiBpcyBudWxsCisJCX0KKworCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihkYXRhKSkKKworCQltYXJrZXIsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuRXF1YWwodCwgRW5kT2ZTdHJlYW0oKSwgbWFya2VyKQorCisJCWNvZGUsIG1zZywgZXhjLCBlcnIgOj0gZC5SZWFkU3RhdHVzKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCWFzc2VydC5FcXVhbCh0LCB1aW50MzIoNDAwKSwgY29kZSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJlcnJvciIsIG1zZykKKwkJYXNzZXJ0LkVxdWFsKHQsICIiLCBleGMpCisJfSkKK30KKworLy8gVGVzdEdyYXBoQmluYXJ5RGVzZXJpYWxpemVyQ29tcGxleFR5cGVzIHZlcmlmaWVzIHN0cmVhbWluZyBkZXNlcmlhbGl6YXRpb24gb2YgY29tcGxleCB0eXBlcworLy8gbGlrZSB2ZXJ0aWNlcywgZWRnZXMsIGFuZCBwYXRocy4KK2Z1bmMgVGVzdEdyYXBoQmluYXJ5RGVzZXJpYWxpemVyQ29tcGxleFR5cGVzKHQgKnRlc3RpbmcuVCkgeworCXQuUnVuKCJyZWFkcyB2ZXJ0ZXggZnJvbSBzdHJlYW0iLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBWZXJ0ZXg6IGlkKGludDMyKSArIGxhYmVscyhsaXN0IG9mIHN0cmluZykgKyBwcm9wZXJ0aWVzKG51bGxhYmxlKQorCQlkYXRhIDo9IFtdYnl0ZXsKKwkJCTB4MTEsIDB4MDAsIC8vIFZlcnRleCB0eXBlICsgZmxhZworCQkJLy8gSUQ6IGludDMyID0gMQorCQkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKKwkJCS8vIExhYmVsczogbGlzdCB3aXRoIG9uZSBzdHJpbmcgInBlcnNvbiIKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIC8vIGxpc3QgbGVuZ3RoID0gMQorCQkJMHgwMywgMHgwMCwgLy8gc3RyaW5nIHR5cGUgKyBmbGFnCisJCQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAncCcsICdlJywgJ3InLCAncycsICdvJywgJ24nLAorCQkJLy8gUHJvcGVydGllczogbnVsbAorCQkJMHhmZSwgMHgwMSwKKwkJfQorCisJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGRhdGEpKQorCQl2YWwsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCisJCXYsIG9rIDo9IHZhbC4oKlZlcnRleCkKKwkJYXNzZXJ0LlRydWUodCwgb2spCisJCWFzc2VydC5FcXVhbCh0LCBpbnQzMigxKSwgdi5JZCkKKwkJYXNzZXJ0LkVxdWFsKHQsICJwZXJzb24iLCB2LkxhYmVsKQorCX0pCisKKwl0LlJ1bigicm91bmQtdHJpcCBWZXJ0ZXhQcm9wZXJ0eSBwcmVzZXJ2ZXMgS2V5IGZpZWxkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJb3JpZ2luYWwgOj0gJlZlcnRleFByb3BlcnR5eworCQkJRWxlbWVudDogRWxlbWVudHtJZDogaW50MzIoMSksIExhYmVsOiAibmFtZSJ9LAorCQkJS2V5OiAgICAgIm5hbWUiLAorCQkJVmFsdWU6ICAgIm1hcmtvIiwKKwkJfQorCisJCXZhciBidWYgYnl0ZXMuQnVmZmVyCisJCXNlciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCisJCWVyciA6PSBzZXIuc2VyLndyaXRlKG9yaWdpbmFsLCAmYnVmKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKworCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKCZidWYpCisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisKKwkJdnAgOj0gdmFsLigqVmVydGV4UHJvcGVydHkpCisJCWFzc2VydC5FcXVhbCh0LCAibWFya28iLCB2cC5WYWx1ZSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJuYW1lIiwgdnAuS2V5LCAiVmVydGV4UHJvcGVydHkuS2V5IHNob3VsZCBzdXJ2aXZlIHJvdW5kLXRyaXAiKQorCX0pCisKKwl0LlJ1bigicm91bmQtdHJpcCBtYXAgd2l0aCBUIGVudW0ga2V5cyBwcmVzZXJ2ZXMgdHlwZXMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlvcmlnaW5hbCA6PSBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317CisJCQlULklkOiAgICAiMSIsCisJCQlULkxhYmVsOiAicGVyc29uIiwKKwkJCSJuYW1lIjogICJtYXJrbyIsCisJCX0KKworCQl2YXIgYnVmIGJ5dGVzLkJ1ZmZlcgorCQlzZXIgOj0gbmV3R3JhcGhCaW5hcnlTZXJpYWxpemVyKG5ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgRXJyb3IsIGxhbmd1YWdlLkVuZ2xpc2gpKQorCQllcnIgOj0gc2VyLnNlci53cml0ZShvcmlnaW5hbCwgJmJ1ZikKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisKKwkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcigmYnVmKQorCQl2YWwsIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCisJCW0gOj0gdmFsLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pCisJCWFzc2VydC5FcXVhbCh0LCAiMSIsIG1bVC5JZF0sICJULklkIGtleSBzaG91bGQgc3Vydml2ZSByb3VuZC10cmlwIikKKwkJYXNzZXJ0LkVxdWFsKHQsICJwZXJzb24iLCBtW1QuTGFiZWxdLCAiVC5MYWJlbCBrZXkgc2hvdWxkIHN1cnZpdmUgcm91bmQtdHJpcCIpCisJCWFzc2VydC5FcXVhbCh0LCAibWFya28iLCBtWyJuYW1lIl0pCisJfSkKKworCXQuUnVuKCJyb3VuZC10cmlwIG1hcCB3aXRoIERpcmVjdGlvbiBlbnVtIGtleXMgcHJlc2VydmVzIHR5cGVzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJb3JpZ2luYWwgOj0gbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eworCQkJRGlyZWN0aW9uLk91dDogIm91dFZlcnRleCIsCisJCQlEaXJlY3Rpb24uSW46ICAiaW5WZXJ0ZXgiLAorCQl9CisKKwkJdmFyIGJ1ZiBieXRlcy5CdWZmZXIKKwkJc2VyIDo9IG5ld0dyYXBoQmluYXJ5U2VyaWFsaXplcihuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEVycm9yLCBsYW5ndWFnZS5FbmdsaXNoKSkKKwkJZXJyIDo9IHNlci5zZXIud3JpdGUob3JpZ2luYWwsICZidWYpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCisJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoJmJ1ZikKKwkJdmFsLCBlcnIgOj0gZC5SZWFkRnVsbHlRdWFsaWZpZWQoKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKworCQltIDo9IHZhbC4obWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KQorCQlhc3NlcnQuRXF1YWwodCwgIm91dFZlcnRleCIsIG1bRGlyZWN0aW9uLk91dF0sICJEaXJlY3Rpb24uT3V0IGtleSBzaG91bGQgc3Vydml2ZSByb3VuZC10cmlwIikKKwkJYXNzZXJ0LkVxdWFsKHQsICJpblZlcnRleCIsIG1bRGlyZWN0aW9uLkluXSwgIkRpcmVjdGlvbi5JbiBrZXkgc2hvdWxkIHN1cnZpdmUgcm91bmQtdHJpcCIpCisJfSkKKworCXQuUnVuKCJyb3VuZC10cmlwIG1hcCB3aXRoIE1lcmdlIGVudW0ga2V5cyBwcmVzZXJ2ZXMgdHlwZXMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlvcmlnaW5hbCA6PSBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317CisJCQlNZXJnZS5PbkNyZWF0ZTogImNyZWF0ZWQiLAorCQkJTWVyZ2UuT25NYXRjaDogICJtYXRjaGVkIiwKKwkJfQorCisJCXZhciBidWYgYnl0ZXMuQnVmZmVyCisJCXNlciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCisJCWVyciA6PSBzZXIuc2VyLndyaXRlKG9yaWdpbmFsLCAmYnVmKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKworCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKCZidWYpCisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisKKwkJbSA6PSB2YWwuKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJjcmVhdGVkIiwgbVtNZXJnZS5PbkNyZWF0ZV0sICJNZXJnZS5PbkNyZWF0ZSBrZXkgc2hvdWxkIHN1cnZpdmUgcm91bmQtdHJpcCIpCisJCWFzc2VydC5FcXVhbCh0LCAibWF0Y2hlZCIsIG1bTWVyZ2UuT25NYXRjaF0sICJNZXJnZS5Pbk1hdGNoIGtleSBzaG91bGQgc3Vydml2ZSByb3VuZC10cmlwIikKKwl9KQorCisJdC5SdW4oInJvdW5kLXRyaXAgbWFwIHdpdGggR1R5cGUgZW51bSBrZXlzIHByZXNlcnZlcyB0eXBlcyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCW9yaWdpbmFsIDo9IG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsKKwkJCUdUeXBlLkludDogICAgImludGVnZXIiLAorCQkJR1R5cGUuU3RyaW5nOiAic3RyaW5nIiwKKwkJfQorCisJCXZhciBidWYgYnl0ZXMuQnVmZmVyCisJCXNlciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCisJCWVyciA6PSBzZXIuc2VyLndyaXRlKG9yaWdpbmFsLCAmYnVmKQorCQlhc3NlcnQuTmlsKHQsIGVycikKKworCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKCZidWYpCisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisKKwkJbSA6PSB2YWwuKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJpbnRlZ2VyIiwgbVtHVHlwZS5JbnRdLCAiR1R5cGUuSW50IGtleSBzaG91bGQgc3Vydml2ZSByb3VuZC10cmlwIikKKwkJYXNzZXJ0LkVxdWFsKHQsICJzdHJpbmciLCBtW0dUeXBlLlN0cmluZ10sICJHVHlwZS5TdHJpbmcga2V5IHNob3VsZCBzdXJ2aXZlIHJvdW5kLXRyaXAiKQorCX0pCisKKwl0LlJ1bigicmVhZHMgbGlzdCBvZiBpbnRlZ2VycyBmcm9tIGNodW5rZWQgc3RyZWFtIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gTGlzdCB0eXBlIHNwbGl0IGFjcm9zcyBjaHVua3MKKwkJY2h1bmsxIDo9IFtdYnl0ZXsKKwkJCTB4MDksIDB4MDAsIC8vIExpc3QgdHlwZSArIGZsYWcKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIC8vIGxlbmd0aCA9IDMKKwkJCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEEsIC8vIGludDMyID0gMTAKKwkJfQorCQljaHVuazIgOj0gW11ieXRleworCQkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgLy8gaW50MzIgPSAyMAorCQkJMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxRSwgLy8gaW50MzIgPSAzMAorCQl9CisKKwkJcmVhZGVyIDo9IG5ld1Nsb3dSZWFkZXIoW11bXWJ5dGV7Y2h1bmsxLCBjaHVuazJ9LCAxNSp0aW1lLk1pbGxpc2Vjb25kKQorCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKHJlYWRlcikKKworCQlzdGFydCA6PSB0aW1lLk5vdygpCisJCXZhbCwgZXJyIDo9IGQuUmVhZEZ1bGx5UXVhbGlmaWVkKCkKKwkJZWxhcHNlZCA6PSB0aW1lLlNpbmNlKHN0YXJ0KQorCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlsaXN0LCBvayA6PSB2YWwuKFtdaW50ZXJmYWNle30pCisJCWFzc2VydC5UcnVlKHQsIG9rKQorCQlhc3NlcnQuRXF1YWwodCwgMywgbGVuKGxpc3QpKQorCQlhc3NlcnQuRXF1YWwodCwgaW50MzIoMTApLCBsaXN0WzBdKQorCQlhc3NlcnQuRXF1YWwodCwgaW50MzIoMjApLCBsaXN0WzFdKQorCQlhc3NlcnQuRXF1YWwodCwgaW50MzIoMzApLCBsaXN0WzJdKQorCisJCS8vIFNob3VsZCBoYXZlIGJsb2NrZWQgZm9yIHNlY29uZCBjaHVuaworCQlhc3NlcnQuR3JlYXRlck9yRXF1YWwodCwgZWxhcHNlZCwgMTAqdGltZS5NaWxsaXNlY29uZCkKKwl9KQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlTZXJpYWxpemVyLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlTZXJpYWxpemVyLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzNiYjgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9ncmFwaEJpbmFyeVNlcmlhbGl6ZXIuZ28KQEAgLTAsMCArMSw1NzkgQEAKKy8qCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGdyZW1saW5nbworCitpbXBvcnQgKAorCSJlbmNvZGluZy9iaW5hcnkiCisJImZtdCIKKwkiaW8iCisJIm1hdGgvYmlnIgorCSJyZWZsZWN0IgorCSJ0aW1lIgorCisJImdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQiCispCisKKy8vIFZlcnNpb24gMS4wCisKKy8vIGRhdGFUeXBlIGdyYXBoQmluYXJ5IHR5cGVzLgordHlwZSBkYXRhVHlwZSB1aW50OAorCisvLyBkYXRhVHlwZSBkZWZpbmVkIGFzIGNvbnN0YW50cy4KK2NvbnN0ICgKKwljdXN0b21UeXBlICAgICAgICAgZGF0YVR5cGUgPSAweDAwCisJaW50VHlwZSAgICAgICAgICAgIGRhdGFUeXBlID0gMHgwMQorCWxvbmdUeXBlICAgICAgICAgICBkYXRhVHlwZSA9IDB4MDIKKwlzdHJpbmdUeXBlICAgICAgICAgZGF0YVR5cGUgPSAweDAzCisJZGF0ZXRpbWVUeXBlICAgICAgIGRhdGFUeXBlID0gMHgwNAorCWRvdWJsZVR5cGUgICAgICAgICBkYXRhVHlwZSA9IDB4MDcKKwlmbG9hdFR5cGUgICAgICAgICAgZGF0YVR5cGUgPSAweDA4CisJbGlzdFR5cGUgICAgICAgICAgIGRhdGFUeXBlID0gMHgwOQorCW1hcFR5cGUgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MGEKKwlzZXRUeXBlICAgICAgICAgICAgZGF0YVR5cGUgPSAweDBiCisJdXVpZFR5cGUgICAgICAgICAgIGRhdGFUeXBlID0gMHgwYworCWVkZ2VUeXBlICAgICAgICAgICBkYXRhVHlwZSA9IDB4MGQKKwlwYXRoVHlwZSAgICAgICAgICAgZGF0YVR5cGUgPSAweDBlCisJcHJvcGVydHlUeXBlICAgICAgIGRhdGFUeXBlID0gMHgwZgorCXZlcnRleFR5cGUgICAgICAgICBkYXRhVHlwZSA9IDB4MTEKKwl2ZXJ0ZXhQcm9wZXJ0eVR5cGUgZGF0YVR5cGUgPSAweDEyCisJZGlyZWN0aW9uVHlwZSAgICAgIGRhdGFUeXBlID0gMHgxOAorCXRUeXBlICAgICAgICAgICAgICBkYXRhVHlwZSA9IDB4MjAKKwliaWdEZWNpbWFsVHlwZSAgICAgZGF0YVR5cGUgPSAweDIyCisJYmlnSW50ZWdlclR5cGUgICAgIGRhdGFUeXBlID0gMHgyMworCWJ5dGVUeXBlICAgICAgICAgICBkYXRhVHlwZSA9IDB4MjQKKwlieXRlQnVmZmVyICAgICAgICAgZGF0YVR5cGUgPSAweDI1CisJc2hvcnRUeXBlICAgICAgICAgIGRhdGFUeXBlID0gMHgyNgorCWJvb2xlYW5UeXBlICAgICAgICBkYXRhVHlwZSA9IDB4MjcKKwltZXJnZVR5cGUgICAgICAgICAgZGF0YVR5cGUgPSAweDJlCisJZ1R5cGVUeXBlICAgICAgICAgIGRhdGFUeXBlID0gMHgzMAorCWR1cmF0aW9uVHlwZSAgICAgICBkYXRhVHlwZSA9IDB4ODEKKwltYXJrZXJUeXBlICAgICAgICAgZGF0YVR5cGUgPSAweGZkCisJbnVsbFR5cGUgICAgICAgICAgIGRhdGFUeXBlID0gMHhGRQorKQorCit2YXIgbnVsbEJ5dGVzID0gW11ieXRle251bGxUeXBlLmdldENvZGVCeXRlKCksIDB4MDF9CisKK2Z1bmMgKGRhdGFUeXBlIGRhdGFUeXBlKSBnZXRDb2RlQnl0ZSgpIGJ5dGUgeworCXJldHVybiBieXRlKGRhdGFUeXBlKQorfQorCitmdW5jIChkYXRhVHlwZSBkYXRhVHlwZSkgZ2V0Q29kZUJ5dGVzKCkgW11ieXRlIHsKKwlyZXR1cm4gW11ieXRle2RhdGFUeXBlLmdldENvZGVCeXRlKCl9Cit9CisKKy8vIGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIgc3RydWN0IGZvciB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIHNlcmlhbGl6ZXJzLgordHlwZSBncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyIHN0cnVjdCB7CisJbG9nSGFuZGxlciAqbG9nSGFuZGxlcgorfQorCitmdW5jIChzZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSB3cml0ZVR5cGUodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB3cml0ZXIgd3JpdGVyKSBlcnJvciB7CisJcmV0dXJuIHNlcmlhbGl6ZXIud3JpdGVUeXBlVmFsdWUodmFsdWUsIHcsIHdyaXRlciwgdHJ1ZSkKK30KKworZnVuYyAoc2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgd3JpdGVUeXBlVmFsdWUodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB3cml0ZXIgd3JpdGVyLCBudWxsYWJsZSBib29sKSBlcnJvciB7CisJaWYgdmFsdWUgPT0gbmlsIHsKKwkJaWYgIW51bGxhYmxlIHsKKwkJCXNlcmlhbGl6ZXIubG9nSGFuZGxlci5sb2coRXJyb3IsIHVuZXhwZWN0ZWROdWxsKQorCQkJcmV0dXJuIG5ld0Vycm9yKGVycjA0MDFXcml0ZVR5cGVWYWx1ZVVuZXhwZWN0ZWROdWxsRXJyb3IpCisJCX0KKwkJcmV0dXJuIHNlcmlhbGl6ZXIud3JpdGVWYWx1ZUZsYWdOdWxsKHcpCisJfQorCWlmIG51bGxhYmxlIHsKKwkJaWYgZXJyIDo9IHNlcmlhbGl6ZXIud3JpdGVWYWx1ZUZsYWdOb25lKHcpOyBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBlcnIKKwkJfQorCX0KKwlyZXR1cm4gd3JpdGVyKHZhbHVlLCB3LCBzZXJpYWxpemVyKQorfQorCisvLyBGb3JtYXQ6IHtsZW5ndGh9e2l0ZW1fMH0uLi57aXRlbV9ufQorZnVuYyBsaXN0V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwl2IDo9IHJlZmxlY3QuVmFsdWVPZih2YWx1ZSkKKwl2YWxMZW4gOj0gdi5MZW4oKQorCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIodmFsTGVuKSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCWZvciBpIDo9IDA7IGkgPCB2YWxMZW47IGkrKyB7CisJCWlmIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZSh2LkluZGV4KGkpLkludGVyZmFjZSgpLCB3KTsgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwl9CisJcmV0dXJuIG5pbAorfQorCisvLyBGb3JtYXQ6IHtsZW5ndGh9e3ZhbHVlfQorZnVuYyBieXRlQnVmZmVyV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwl2YXIgdiBCeXRlQnVmZmVyCisJaWYgcmVmbGVjdC5UeXBlT2YodmFsdWUpLktpbmQoKSA9PSByZWZsZWN0LlB0ciB7CisJCXYgPSAqKHZhbHVlLigqQnl0ZUJ1ZmZlcikpCisJfSBlbHNlIHsKKwkJdiA9IHZhbHVlLihCeXRlQnVmZmVyKQorCX0KKworCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIobGVuKHYuRGF0YSkpKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJXywgZXJyIDo9IHcuV3JpdGUodi5EYXRhKQorCXJldHVybiBlcnIKK30KKworLy8gRm9ybWF0OiB7bGVuZ3RofXtpdGVtXzB9Li4ue2l0ZW1fbn0KKy8vIEl0ZW0gZm9ybWF0OiB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfQorZnVuYyBtYXBXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCWlmIHZhbHVlID09IG5pbCB7CisJCXJldHVybiB0eXBlU2VyaWFsaXplci53cml0ZVZhbHVlKGludDMyKDApLCB3LCBmYWxzZSkKKwl9CisKKwl2IDo9IHJlZmxlY3QuVmFsdWVPZih2YWx1ZSkKKwlrZXlzIDo9IHYuTWFwS2V5cygpCisJaWYgZXJyIDo9IGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMihsZW4oa2V5cykpKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJZm9yIF8sIGsgOj0gcmFuZ2Uga2V5cyB7CisJCWNvbnZLZXkgOj0gay5Db252ZXJ0KHYuVHlwZSgpLktleSgpKQorCQkvLyBzZXJpYWxpemUgaworCQlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUoay5JbnRlcmZhY2UoKSwgdyk7IGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGVycgorCQl9CisJCS8vIHNlcmlhbGl6ZSB2Lk1hcEluZGV4KGNfa2V5KQorCQl2YWwgOj0gdi5NYXBJbmRleChjb252S2V5KQorCQlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUodmFsLkludGVyZmFjZSgpLCB3KTsgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwl9CisJcmV0dXJuIG5pbAorfQorCitmdW5jIHN0cmluZ1dyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwlzdHIgOj0gdmFsdWUuKHN0cmluZykKKwlpZiBlcnIgOj0gYmluYXJ5LldyaXRlKHcsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKGxlbihzdHIpKSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCV8sIGVyciA6PSBpby5Xcml0ZVN0cmluZyh3LCBzdHIpCisJcmV0dXJuIGVycgorfQorCitmdW5jIGxvbmdXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCBfICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJc3dpdGNoIHYgOj0gdmFsdWUuKHR5cGUpIHsKKwljYXNlIGludDoKKwkJdmFsdWUgPSBpbnQ2NCh2KQorCWNhc2UgdWludDMyOgorCQl2YWx1ZSA9IGludDY0KHYpCisJfQorCXJldHVybiBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUpCit9CisKK2Z1bmMgaW50V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgXyAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCXN3aXRjaCB2IDo9IHZhbHVlLih0eXBlKSB7CisJY2FzZSB1aW50MTY6CisJCXZhbHVlID0gaW50MzIodikKKwl9CisJcmV0dXJuIGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZS4oaW50MzIpKQorfQorCitmdW5jIHNob3J0V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgXyAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCXN3aXRjaCB2IDo9IHZhbHVlLih0eXBlKSB7CisJY2FzZSBpbnQ4OgorCQl2YWx1ZSA9IGludDE2KHYpCisJfQorCXJldHVybiBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUuKGludDE2KSkKK30KKworLy8gR29sYW5nIHN0b3JlcyBCaWdJbnRlZ2VycyB3aXRoIGJpZy5JbnQgdHlwZXMKKy8vIGl0IGNvbnRhaW5zIGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgYW5kIHVzZXMgYSBib29sZWFuIHRvIHRyYWNrICt2ZSBhbmQgLXZlCisvLyBnZXRTaWduZWRCeXRlc0Zyb21CaWdJbnQgZ2l2ZXMgdXMgdGhlIHNpZ25lZCh0d28ncyBjb21wbGVtZW50KSBieXRlIGFycmF5IHRoYXQgcmVwcmVzZW50cyB0aGUgdW5zaWduZWQgYnl0ZSBhcnJheSBpbgorLy8gYmlnLkludAorZnVuYyBnZXRTaWduZWRCeXRlc0Zyb21CaWdJbnQobiAqYmlnLkludCkgW11ieXRlIHsKKwl2YXIgb25lID0gYmlnLk5ld0ludCgxKQorCWlmIG4uU2lnbigpID09IDEgeworCQkvLyBhZGQgYSBidWZmZXIgMHgwMCBieXRlIHRvIHRoZSBzdGFydCBvZiBieXRlIGFycmF5IGlmIG51bWJlciBpcyBwb3NpdGl2ZSBhbmQgaGFzIGEgMSBpbiBpdHMgTVNCCisJCWIgOj0gbi5CeXRlcygpCisJCWlmIGJbMF0mMHg4MCA+IDAgeworCQkJYiA9IGFwcGVuZChbXWJ5dGV7MH0sIGIuLi4pCisJCX0KKwkJcmV0dXJuIGIKKwl9IGVsc2UgaWYgbi5TaWduKCkgPT0gLTEgeworCQkvLyBDb252ZXJ0IFVuc2lnbmVkIGJ5dGUgYXJyYXkgdG8gc2lnbmVkIGJ5dGUgYXJyYXkKKwkJbGVuZ3RoIDo9IHVpbnQobi5CaXRMZW4oKS84KzEpICogOAorCQliIDo9IG5ldyhiaWcuSW50KS5BZGQobiwgbmV3KGJpZy5JbnQpLkxzaChvbmUsIGxlbmd0aCkpLkJ5dGVzKCkKKwkJLy8gU3RyaXAgYW55IHJlZHVuZGFudCAweGZmIGJ5dGVzIGZyb20gdGhlIGZyb250IG9mIHRoZSBieXRlIGFycmF5IGlmIHRoZSBmb2xsb3dpbmcgYnl0ZSBzdGFydHMgd2l0aCBhIDEKKwkJaWYgbGVuKGIpID49IDIgJiYgYlswXSA9PSAweGZmICYmIGJbMV0mMHg4MCAhPSAwIHsKKwkJCWIgPSBiWzE6XQorCQl9CisJCXJldHVybiBiCisJfQorCXJldHVybiBbXWJ5dGV7fQorfQorCisvLyBGb3JtYXQ6IHtsZW5ndGh9e3ZhbHVlXzB9Li4ue3ZhbHVlX259CitmdW5jIGJpZ0ludFdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwl2YXIgdiBiaWcuSW50CisJc3dpdGNoIHZhbCA6PSB2YWx1ZS4odHlwZSkgeworCWNhc2UgdWludDoKKwkJdiA9ICoobmV3KGJpZy5JbnQpLlNldFVpbnQ2NCh1aW50NjQodmFsKSkpCisJY2FzZSB1aW50NjQ6CisJCXYgPSAqKG5ldyhiaWcuSW50KS5TZXRVaW50NjQodmFsKSkKKwlkZWZhdWx0OgorCQlpZiByZWZsZWN0LlR5cGVPZih2YWx1ZSkuS2luZCgpID09IHJlZmxlY3QuUHRyIHsKKwkJCXYgPSAqKHZhbHVlLigqYmlnLkludCkpCisJCX0gZWxzZSB7CisJCQl2ID0gdmFsdWUuKGJpZy5JbnQpCisJCX0KKwl9CisJc2lnbmVkQnl0ZXMgOj0gZ2V0U2lnbmVkQnl0ZXNGcm9tQmlnSW50KCZ2KQorCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIobGVuKHNpZ25lZEJ5dGVzKSkpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlfLCBlcnIgOj0gdy5Xcml0ZShzaWduZWRCeXRlcykKKwlyZXR1cm4gZXJyCit9CisKKy8vIEZvcm1hdDoge3NjYWxlfXt1bnNjYWxlZF92YWx1ZX0KK2Z1bmMgYmlnRGVjaW1hbFdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJdmFyIHYgQmlnRGVjaW1hbAorCWlmIHJlZmxlY3QuVHlwZU9mKHZhbHVlKS5LaW5kKCkgPT0gcmVmbGVjdC5QdHIgeworCQl2ID0gKih2YWx1ZS4oKkJpZ0RlY2ltYWwpKQorCX0gZWxzZSB7CisJCXYgPSB2YWx1ZS4oQmlnRGVjaW1hbCkKKwl9CisJaWYgZXJyIDo9IGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCB2LlNjYWxlKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisKKwlyZXR1cm4gYmlnSW50V3JpdGVyKHYuVW5zY2FsZWRWYWx1ZSwgdywgdHlwZVNlcmlhbGl6ZXIpCit9CisKKy8vIEZvcm1hdDoge0lkfXtMYWJlbH17cHJvcGVydGllc30KK2Z1bmMgdmVydGV4V3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwl2IDo9IHZhbHVlLigqVmVydGV4KQorCWlmIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZSh2LklkLCB3KTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisKKwkvLyBOb3QgZnVsbHkgcXVhbGlmaWVkLgorCWlmIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZVZhbHVlKFsxXXN0cmluZ3t2LkxhYmVsfSwgdywgZmFsc2UpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkvLyBOb3RlIHRoYXQgYXMgVGlua2VyUG9wIGN1cnJlbnRseSBzZW5kICJyZWZlcmVuY2VzIiBvbmx5LCBwcm9wZXJ0aWVzIHdpbGwgYWx3YXlzIGJlIG51bGwKKwlfLCBlcnIgOj0gdy5Xcml0ZShudWxsQnl0ZXMpCisJcmV0dXJuIGVycgorfQorCisvLyBGb3JtYXQ6IHtJZH17TGFiZWx9e2luVklkfXtpblZMYWJlbH17b3V0VklkfXtvdXRWTGFiZWx9e3BhcmVudH17cHJvcGVydGllc30KK2Z1bmMgZWRnZVdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJZSA6PSB2YWx1ZS4oKkVkZ2UpCisJaWYgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlKGUuSWQsIHcpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKworCS8vIE5vdCBmdWxseSBxdWFsaWZpZWQKKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZShbMV1zdHJpbmd7ZS5MYWJlbH0sIHcsIGZhbHNlKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisKKwkvLyBXcml0ZSBpbi12ZXJ0ZXgKKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUoZS5JblYuSWQsIHcpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKworCS8vIE5vdCBmdWxseSBxdWFsaWZpZWQuCisJaWYgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUoWzFdc3RyaW5ne2UuSW5WLkxhYmVsfSwgdywgZmFsc2UpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkvLyBXcml0ZSBvdXQtdmVydGV4CisJaWYgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlKGUuT3V0Vi5JZCwgdyk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCisJLy8gTm90IGZ1bGx5IHF1YWxpZmllZC4KKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZShbMV1zdHJpbmd7ZS5PdXRWLkxhYmVsfSwgdywgZmFsc2UpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKworCS8vIE5vdGUgdGhhdCBhcyBUaW5rZXJQb3AgY3VycmVudGx5IHNlbmQgInJlZmVyZW5jZXMiIG9ubHksIHBhcmVudCBhbmQgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBudWxsCisJaWYgXywgZXJyIDo9IHcuV3JpdGUobnVsbEJ5dGVzKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJXywgZXJyIDo9IHcuV3JpdGUobnVsbEJ5dGVzKQorCXJldHVybiBlcnIKK30KKworLy8gRm9ybWF0OiB7S2V5fXtWYWx1ZX17cGFyZW50fQorZnVuYyBwcm9wZXJ0eVdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJdiA6PSB2YWx1ZS4oKlByb3BlcnR5KQorCisJLy8gTm90IGZ1bGx5IHF1YWxpZmllZC4KKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZSh2LktleSwgdywgZmFsc2UpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKworCWlmIGVyciA6PSB0eXBlU2VyaWFsaXplci53cml0ZSh2LlZhbHVlLCB3KTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJLy8gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZCAicmVmZXJlbmNlcyIgb25seSwgcGFyZW50IGFuZCBwcm9wZXJ0aWVzICB3aWxsIGFsd2F5cyBiZSBudWxsCisJXywgZXJyIDo9IHcuV3JpdGUobnVsbEJ5dGVzKQorCXJldHVybiBlcnIKK30KKworLy8gRm9ybWF0OiB7SWR9e0xhYmVsfXtWYWx1ZX17cGFyZW50fXtwcm9wZXJ0aWVzfQorZnVuYyB2ZXJ0ZXhQcm9wZXJ0eVdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJdnAgOj0gdmFsdWUuKCpWZXJ0ZXhQcm9wZXJ0eSkKKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUodnAuSWQsIHcpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKworCS8vIE5vdCBmdWxseSBxdWFsaWZpZWQuCisJaWYgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUoWzFdc3RyaW5ne3ZwLkxhYmVsfSwgdywgZmFsc2UpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGUodnAuVmFsdWUsIHcpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwkvLyBOb3RlIHRoYXQgYXMgVGlua2VyUG9wIGN1cnJlbnRseSBzZW5kICJyZWZlcmVuY2VzIiBvbmx5LCBwYXJlbnQgYW5kIHByb3BlcnRpZXMgd2lsbCBhbHdheXMgYmUgbnVsbAorCWlmIF8sIGVyciA6PSB3LldyaXRlKG51bGxCeXRlcyk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCV8sIGVyciA6PSB3LldyaXRlKG51bGxCeXRlcykKKwlyZXR1cm4gZXJyCit9CisKKy8vIEZvcm1hdDoge0xhYmVsc317T2JqZWN0c30KK2Z1bmMgcGF0aFdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJcCA6PSB2YWx1ZS4oKlBhdGgpCisJaWYgZXJyIDo9IHR5cGVTZXJpYWxpemVyLndyaXRlKHAuTGFiZWxzLCB3KTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmV0dXJuIHR5cGVTZXJpYWxpemVyLndyaXRlKHAuT2JqZWN0cywgdykKK30KKworLy8gRm9ybWF0OiBTYW1lIGFzIExpc3QuCisvLyBNb3N0bHkgc2ltaWxhciB0byBsaXN0V3JpdGVyIHdpdGggc21hbGwgY2hhbmdlcworZnVuYyBzZXRXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCXNsaWNlIDo9IHZhbHVlLihTZXQpLlRvU2xpY2UoKQorCXJldHVybiBsaXN0V3JpdGVyKHNsaWNlLCB3LCB0eXBlU2VyaWFsaXplcikKK30KKworZnVuYyBkYXRlVGltZVdyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwl0IDo9IHZhbHVlLih0aW1lLlRpbWUpCisJaWYgZXJyIDo9IGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCBpbnQzMih0LlllYXIoKSkpOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlpZiBlcnIgOj0gYmluYXJ5LldyaXRlKHcsIGJpbmFyeS5CaWdFbmRpYW4sIGJ5dGUodC5Nb250aCgpKSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgYnl0ZSh0LkRheSgpKSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCS8vIGNvbnN0cnVjdCB0aW1lIG9mIGRheSBpbiBuYW5vc2Vjb25kcworCWggOj0gdC5Ib3VyKCkKKwltIDo9IHQuTWludXRlKCkKKwlzIDo9IHQuU2Vjb25kKCkKKwlucyA6PSAoaCAqIDYwICogNjAgKiAxZTkpICsgKG0gKiA2MCAqIDFlOSkgKyAocyAqIDFlOSkgKyB0Lk5hbm9zZWNvbmQoKQorCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgaW50NjQobnMpKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJXywgb3MgOj0gdC5ab25lKCkKKwlyZXR1cm4gYmluYXJ5LldyaXRlKHcsIGJpbmFyeS5CaWdFbmRpYW4sIGludDMyKG9zKSkKK30KKworZnVuYyBkdXJhdGlvbldyaXRlcih2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIF8gKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwl0IDo9IHZhbHVlLih0aW1lLkR1cmF0aW9uKQorCXNlYyA6PSBpbnQ2NCh0IC8gdGltZS5TZWNvbmQpCisJbmFub3MgOj0gaW50MzIodCAlIHRpbWUuU2Vjb25kKQorCWlmIGVyciA6PSBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgc2VjKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmV0dXJuIGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCBuYW5vcykKK30KKworZnVuYyBlbnVtV3JpdGVyKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwlyZXR1cm4gdHlwZVNlcmlhbGl6ZXIud3JpdGUocmVmbGVjdC5WYWx1ZU9mKHZhbHVlKS5TdHJpbmcoKSwgdykKK30KKworZnVuYyBtYXJrZXJXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCBfICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJbSA6PSB2YWx1ZS4oTWFya2VyKQorCXJldHVybiBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgbS5HZXRWYWx1ZSgpKQorfQorCisvLyBGb3JtYXQ6IHtzdHJhdGVneV9jbGFzc317Y29uZmlndXJhdGlvbn0KK2Z1bmMgdHJhdmVyc2FsU3RyYXRlZ3lXcml0ZXIodmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCXRzIDo9IHZhbHVlLigqdHJhdmVyc2FsU3RyYXRlZ3kpCisKKwlpZiBlcnIgOj0gdHlwZVNlcmlhbGl6ZXIud3JpdGVWYWx1ZSh0cy5uYW1lLCB3LCBmYWxzZSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCisJcmV0dXJuIG1hcFdyaXRlcih0cy5jb25maWd1cmF0aW9uLCB3LCB0eXBlU2VyaWFsaXplcikKK30KKworY29uc3QgKAorCXZhbHVlRmxhZ051bGwgYnl0ZSA9IDEKKwl2YWx1ZUZsYWdOb25lIGJ5dGUgPSAwCispCisKK2Z1bmMgKHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGdldFR5cGUodmFsIGludGVyZmFjZXt9KSAoZGF0YVR5cGUsIGVycm9yKSB7CisJc3dpdGNoIHZhbC4odHlwZSkgeworCWNhc2Ugc3RyaW5nOgorCQlyZXR1cm4gc3RyaW5nVHlwZSwgbmlsCisJY2FzZSB1aW50LCB1aW50NjQsICpiaWcuSW50OgorCQlyZXR1cm4gYmlnSW50ZWdlclR5cGUsIG5pbAorCWNhc2UgaW50NjQsIGludCwgdWludDMyOgorCQlyZXR1cm4gbG9uZ1R5cGUsIG5pbAorCWNhc2UgaW50MzIsIHVpbnQxNjoKKwkJcmV0dXJuIGludFR5cGUsIG5pbAorCWNhc2UgaW50OCwgaW50MTY6IC8vIEdyYXBoQmluYXJ5IGRvZXNuJ3QgaGF2ZSBhIHR5cGUgZm9yIHNpZ25lZCA4LWJpdCBpbnRlZ2VyLCBzZXJpYWxpemluZyBpbnQ4IGFzIFNob3J0IGluc3RlYWQuCisJCXJldHVybiBzaG9ydFR5cGUsIG5pbAorCWNhc2UgdWludDg6CisJCXJldHVybiBieXRlVHlwZSwgbmlsCisJY2FzZSBib29sOgorCQlyZXR1cm4gYm9vbGVhblR5cGUsIG5pbAorCWNhc2UgdXVpZC5VVUlEOgorCQlyZXR1cm4gdXVpZFR5cGUsIG5pbAorCWNhc2UgZmxvYXQzMjoKKwkJcmV0dXJuIGZsb2F0VHlwZSwgbmlsCisJY2FzZSBmbG9hdDY0OgorCQlyZXR1cm4gZG91YmxlVHlwZSwgbmlsCisJY2FzZSAqVmVydGV4OgorCQlyZXR1cm4gdmVydGV4VHlwZSwgbmlsCisJY2FzZSAqRWRnZToKKwkJcmV0dXJuIGVkZ2VUeXBlLCBuaWwKKwljYXNlICpQcm9wZXJ0eToKKwkJcmV0dXJuIHByb3BlcnR5VHlwZSwgbmlsCisJY2FzZSAqVmVydGV4UHJvcGVydHk6CisJCXJldHVybiB2ZXJ0ZXhQcm9wZXJ0eVR5cGUsIG5pbAorCWNhc2UgKlBhdGg6CisJCXJldHVybiBwYXRoVHlwZSwgbmlsCisJY2FzZSBTZXQ6CisJCXJldHVybiBzZXRUeXBlLCBuaWwKKwljYXNlIHRpbWUuVGltZToKKwkJcmV0dXJuIGRhdGV0aW1lVHlwZSwgbmlsCisJY2FzZSB0aW1lLkR1cmF0aW9uOgorCQlyZXR1cm4gZHVyYXRpb25UeXBlLCBuaWwKKwljYXNlIGRpcmVjdGlvbjoKKwkJcmV0dXJuIGRpcmVjdGlvblR5cGUsIG5pbAorCWNhc2UgdDoKKwkJcmV0dXJuIHRUeXBlLCBuaWwKKwljYXNlIG1lcmdlOgorCQlyZXR1cm4gbWVyZ2VUeXBlLCBuaWwKKwljYXNlIGdUeXBlOgorCQlyZXR1cm4gZ1R5cGVUeXBlLCBuaWwKKwljYXNlICpCaWdEZWNpbWFsLCBCaWdEZWNpbWFsOgorCQlyZXR1cm4gYmlnRGVjaW1hbFR5cGUsIG5pbAorCWNhc2UgKkJ5dGVCdWZmZXIsIEJ5dGVCdWZmZXI6CisJCXJldHVybiBieXRlQnVmZmVyLCBuaWwKKwlkZWZhdWx0OgorCQlzd2l0Y2ggcmVmbGVjdC5UeXBlT2YodmFsKS5LaW5kKCkgeworCQljYXNlIHJlZmxlY3QuTWFwOgorCQkJcmV0dXJuIG1hcFR5cGUsIG5pbAorCQljYXNlIHJlZmxlY3QuQXJyYXksIHJlZmxlY3QuU2xpY2U6CisJCQkvLyBXZSBjYW4gd3JpdGUgYW4gYXJyYXkgb3Igc2xpY2UgaW50byB0aGUgbGlzdCBkYXRhVHlwZS4KKwkJCXJldHVybiBsaXN0VHlwZSwgbmlsCisJCWRlZmF1bHQ6CisJCQlzZXJpYWxpemVyLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgc2VyaWFsaXplRGF0YVR5cGVFcnJvciwgcmVmbGVjdC5UeXBlT2YodmFsKS5OYW1lKCkpCisJCQlyZXR1cm4gaW50VHlwZSwgbmV3RXJyb3IoZXJyMDQwN0dldFNlcmlhbGl6ZXJUb1dyaXRlVW5rbm93blR5cGVFcnJvciwgcmVmbGVjdC5UeXBlT2YodmFsKS5OYW1lKCkpCisJCX0KKwl9Cit9CisKK2Z1bmMgKHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGdldFdyaXRlcihkYXRhVHlwZSBkYXRhVHlwZSkgKHdyaXRlciwgZXJyb3IpIHsKKwlpZiB3cml0ZXIsIG9rIDo9IHNlcmlhbGl6ZXJzW2RhdGFUeXBlXTsgb2sgeworCQlyZXR1cm4gd3JpdGVyLCBuaWwKKwl9CisJc2VyaWFsaXplci5sb2dIYW5kbGVyLmxvZ2YoRXJyb3IsIGRlc2VyaWFsaXplRGF0YVR5cGVFcnJvciwgaW50MzIoZGF0YVR5cGUpKQorCXJldHVybiBuaWwsIG5ld0Vycm9yKGVycjA0MDdHZXRTZXJpYWxpemVyVG9Xcml0ZVVua25vd25UeXBlRXJyb3IsIGRhdGFUeXBlKQorfQorCisvLyBnZXRzIHRoZSB0eXBlIG9mIHRoZSBzZXJpYWxpemVyIGJhc2VkIG9uIHRoZSB2YWx1ZQorZnVuYyAoc2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZ2V0U2VyaWFsaXplclRvV3JpdGUodmFsIGludGVyZmFjZXt9KSAod3JpdGVyLCBkYXRhVHlwZSwgZXJyb3IpIHsKKwlkYXRhVHlwZSwgZXJyIDo9IHNlcmlhbGl6ZXIuZ2V0VHlwZSh2YWwpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGludFR5cGUsIGVycgorCX0KKwl3cml0ZXIsIGVyciA6PSBzZXJpYWxpemVyLmdldFdyaXRlcihkYXRhVHlwZSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgaW50VHlwZSwgZXJyCisJfQorCisJcmV0dXJuIHdyaXRlciwgZGF0YVR5cGUsIG5pbAorfQorCisvLyBXcml0ZXMgYW4gb2JqZWN0IGluIGZ1bGx5LXF1YWxpZmllZCBmb3JtYXQsIGNvbnRhaW5pbmcge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0uCitmdW5jIChzZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSB3cml0ZSh2YWx1ZU9iamVjdCBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIpIGVycm9yIHsKKwlpZiB2YWx1ZU9iamVjdCA9PSBuaWwgeworCQkvLyByZXR1cm4gT2JqZWN0IG9mIHR5cGUgInVuc3BlY2lmaWVkIG9iamVjdCBudWxsIiB3aXRoIHRoZSB2YWx1ZSBmbGFnIHNldCB0byBudWxsLgorCQlfLCBlcnIgOj0gdy5Xcml0ZShudWxsQnl0ZXMpCisJCXJldHVybiBlcnIKKwl9CisKKwl3cml0ZXIsIGRhdGFUeXBlLCBlcnIgOj0gc2VyaWFsaXplci5nZXRTZXJpYWxpemVyVG9Xcml0ZSh2YWx1ZU9iamVjdCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlpZiBfLCBlcnIgOj0gdy5Xcml0ZShkYXRhVHlwZS5nZXRDb2RlQnl0ZXMoKSk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCXJldHVybiBzZXJpYWxpemVyLndyaXRlVHlwZSh2YWx1ZU9iamVjdCwgdywgd3JpdGVyKQorfQorCisvLyBXcml0ZXMgYSB2YWx1ZSB3aXRob3V0IGluY2x1ZGluZyB0eXBlIGluZm9ybWF0aW9uLgorZnVuYyAoc2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgd3JpdGVWYWx1ZSh2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIG51bGxhYmxlIGJvb2wpIGVycm9yIHsKKwlpZiB2YWx1ZSA9PSBuaWwgeworCQlpZiAhbnVsbGFibGUgeworCQkJc2VyaWFsaXplci5sb2dIYW5kbGVyLmxvZyhFcnJvciwgdW5leHBlY3RlZE51bGwpCisJCQlyZXR1cm4gbmV3RXJyb3IoZXJyMDQwM1dyaXRlVmFsdWVVbmV4cGVjdGVkTnVsbEVycm9yKQorCQl9CisJCXJldHVybiBzZXJpYWxpemVyLndyaXRlVmFsdWVGbGFnTnVsbCh3KQorCX0KKworCXdyaXRlciwgXywgZXJyIDo9IHNlcmlhbGl6ZXIuZ2V0U2VyaWFsaXplclRvV3JpdGUodmFsdWUpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJcmV0dXJuIHNlcmlhbGl6ZXIud3JpdGVUeXBlVmFsdWUodmFsdWUsIHcsIHdyaXRlciwgbnVsbGFibGUpCit9CisKK2Z1bmMgKHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIHdyaXRlVmFsdWVGbGFnTnVsbCh3IGlvLldyaXRlcikgZXJyb3IgeworCV8sIGVyciA6PSB3LldyaXRlKFtdYnl0ZXt2YWx1ZUZsYWdOdWxsfSkKKwlyZXR1cm4gZXJyCit9CisKK2Z1bmMgKHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIHdyaXRlVmFsdWVGbGFnTm9uZSh3IGlvLldyaXRlcikgZXJyb3IgeworCV8sIGVyciA6PSB3LldyaXRlKFtdYnl0ZXt2YWx1ZUZsYWdOb25lfSkKKwlyZXR1cm4gZXJyCit9CisKKy8vIEdldFRpbWV6b25lRnJvbU9mZnNldCBpcyBhIGhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IGFuIG9mZnNldCBpbiBzZWNvbmRzIHRvIGEgdGltZS5Mb2NhdGlvbgorZnVuYyBHZXRUaW1lem9uZUZyb21PZmZzZXQob2Zmc2V0U2Vjb25kcyBpbnQpICp0aW1lLkxvY2F0aW9uIHsKKwkvLyBjYWxjdWxhdGUgaG91cnMgYW5kIG1pbnV0ZXMgZnJvbSBzZWNvbmRzCisJaG91cnMgOj0gb2Zmc2V0U2Vjb25kcyAvIDM2MDAKKwltaW51dGVzIDo9IChvZmZzZXRTZWNvbmRzICUgMzYwMCkgLyA2MAorCisJLy8gZm9ybWF0IHRoZSB0aW1lem9uZSBuYW1lIGluIHRoZSBmb3JtYXQgdGhhdCBnbyBleHBlY3RzCisJLy8gZm9yIGV4YW1wbGU6ICJVVEMrMDE6MDAiIG9yICJVVEMtMDU6MzAiCisJc2lnbiA6PSAiKyIKKwlpZiBob3VycyA8IDAgeworCQlzaWduID0gIi0iCisJCWhvdXJzID0gLWhvdXJzCisJCW1pbnV0ZXMgPSAtbWludXRlcworCX0KKwl0ek5hbWUgOj0gZm10LlNwcmludGYoIlVUQyVzJTAyZDolMDJkIiwgc2lnbiwgaG91cnMsIG1pbnV0ZXMpCisKKwlyZXR1cm4gdGltZS5GaXhlZFpvbmUodHpOYW1lLCBvZmZzZXRTZWNvbmRzKQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlTZXJpYWxpemVyX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9ncmFwaEJpbmFyeVNlcmlhbGl6ZXJfdGVzdC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDAzZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlTZXJpYWxpemVyX3Rlc3QuZ28KQEAgLTAsMCArMSw1MzcgQEAKKy8qCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGdyZW1saW5nbworCitpbXBvcnQgKAorCSJieXRlcyIKKwkiZW5jb2RpbmcvYmluYXJ5IgorCSJlcnJvcnMiCisJImZtdCIKKwkibWF0aC9iaWciCisJInJlZmxlY3QiCisJInRlc3RpbmciCisJInRpbWUiCisKKwkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L2Fzc2VydCIKKwkiZ29sYW5nLm9yZy94L3RleHQvbGFuZ3VhZ2UiCispCisKKy8vIGZhaWxpbmdXcml0ZXIgaXMgYW4gaW8uV3JpdGVyIHRoYXQgZmFpbHMgYWZ0ZXIgd3JpdGluZyBhIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuCisvLyBVc2VkIHRvIHRlc3QgZXJyb3IgcHJvcGFnYXRpb24gdGhyb3VnaCB0aGUgc2VyaWFsaXphdGlvbiBjaGFpbi4KKy8vIEZlYXR1cmU6IHNlcmlhbGl6ZXItd3JpdGVyLXJlZmFjdG9yLCBQcm9wZXJ0eSA0OiBXcml0ZXIgRXJyb3IgUHJvcGFnYXRpb24KK3R5cGUgZmFpbGluZ1dyaXRlciBzdHJ1Y3QgeworCWZhaWxBZnRlciBpbnQgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIGJlZm9yZSBmYWlsaW5nCisJd3JpdHRlbiAgIGludCAvLyBOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzbyBmYXIKK30KKworZnVuYyAodyAqZmFpbGluZ1dyaXRlcikgV3JpdGUocCBbXWJ5dGUpIChuIGludCwgZXJyIGVycm9yKSB7CisJaWYgdy53cml0dGVuID49IHcuZmFpbEFmdGVyIHsKKwkJcmV0dXJuIDAsIGVycm9ycy5OZXcoInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9CisJLy8gQ2FsY3VsYXRlIGhvdyBtYW55IGJ5dGVzIHdlIGNhbiB3cml0ZSBiZWZvcmUgZmFpbGluZworCXJlbWFpbmluZyA6PSB3LmZhaWxBZnRlciAtIHcud3JpdHRlbgorCWlmIGxlbihwKSA8PSByZW1haW5pbmcgeworCQl3LndyaXR0ZW4gKz0gbGVuKHApCisJCXJldHVybiBsZW4ocCksIG5pbAorCX0KKwkvLyBQYXJ0aWFsIHdyaXRlIHRoZW4gZmFpbAorCXcud3JpdHRlbiArPSByZW1haW5pbmcKKwlyZXR1cm4gcmVtYWluaW5nLCBlcnJvcnMuTmV3KCJzaW11bGF0ZWQgd3JpdGUgZmFpbHVyZSIpCit9CisKK2Z1bmMgVGVzdEdyYXBoQmluYXJ5VjQodCAqdGVzdGluZy5UKSB7CisJdC5SdW4oImdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIgdGVzdHMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlzZXJpYWxpemVyIDo9IGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXJ7bmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCl9CisKKwkJdC5SdW4oImdldFR5cGUgc2hvdWxkIHJldHVybiBjb3JyZWN0IHR5cGUgZm9yIHNpbXBsZSB0eXBlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCXJlcywgZXJyIDo9IHNlcmlhbGl6ZXIuZ2V0VHlwZShpbnQzMigxKSkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJYXNzZXJ0LkVxdWFsKHQsIGludFR5cGUsIHJlcykKKwkJfSkKKwkJdC5SdW4oImdldFR5cGUgc2hvdWxkIHJldHVybiBjb3JyZWN0IHR5cGUgZm9yIGNvbXBsZXggdHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQlyZXMsIGVyciA6PSBzZXJpYWxpemVyLmdldFR5cGUoW11ieXRlezEsIDIsIDN9KQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgbGlzdFR5cGUsIHJlcykKKwkJfSkKKwkJdC5SdW4oImdldFR5cGUgc2hvdWxkIHJldHVybiBlcnJvciBmb3IgbWlzc2luZyB0eXBlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCV8sIGVyciA6PSBzZXJpYWxpemVyLmdldFR5cGUoRXJyb3IpCisJCQlhc3NlcnQuTm90TmlsKHQsIGVycikKKwkJfSkKKworCQl0LlJ1bigiZ2V0V3JpdGVyIHNob3VsZCByZXR1cm4gY29ycmVjdCBmdW5jIGZvciBkYXRhVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl3cml0ZXIsIGVyciA6PSBzZXJpYWxpemVyLmdldFdyaXRlcihpbnRUeXBlKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgcmVmbGVjdC5WYWx1ZU9mKGludFdyaXRlcikuUG9pbnRlcigpLCByZWZsZWN0LlZhbHVlT2Yod3JpdGVyKS5Qb2ludGVyKCkpCisJCX0pCisJCXQuUnVuKCJnZXRXcml0ZXIgc2hvdWxkIHJldHVybiBlcnJvciBmb3IgbWlzc2luZyBkYXRhVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQlfLCBlcnIgOj0gc2VyaWFsaXplci5nZXRXcml0ZXIobnVsbFR5cGUpCisJCQlhc3NlcnQuTm90TmlsKHQsIGVycikKKwkJfSkKKworCQl0LlJ1bigiZ2V0U2VyaWFsaXplclRvV3JpdGUgc2hvdWxkIHJldHVybiBjb3JyZWN0IGZ1bmMgZm9yIGludCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl3cml0ZXIsIGRhdGFUeXBlLCBlcnIgOj0gc2VyaWFsaXplci5nZXRTZXJpYWxpemVyVG9Xcml0ZShpbnQzMigxKSkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJYXNzZXJ0LkVxdWFsKHQsIGludFR5cGUsIGRhdGFUeXBlKQorCQkJYXNzZXJ0LkVxdWFsKHQsIHJlZmxlY3QuVmFsdWVPZihpbnRXcml0ZXIpLlBvaW50ZXIoKSwgcmVmbGVjdC5WYWx1ZU9mKHdyaXRlcikuUG9pbnRlcigpKQorCQl9KQorCQl0LlJ1bigiZ2V0U2VyaWFsaXplclRvV3JpdGUgc2hvdWxkIHJldHVybiBlcnJvciBmb3IgbWlzc2luZyBkYXRhVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQlfLCBfLCBlcnIgOj0gc2VyaWFsaXplci5nZXRTZXJpYWxpemVyVG9Xcml0ZShudWxsVHlwZSkKKwkJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQorCQl9KQorCX0pCisKKwl0LlJ1bigicmVhZC13cml0ZSB0ZXN0cyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXQuUnVuKCJyZWFkLXdyaXRlIHN0cmluZyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc3RyIDo9ICJ0ZXN0IHN0cmluZyIKKwkJCWVyciA6PSBzdHJpbmdXcml0ZXIoc3RyLCAmYnVmZmVyLCBuaWwpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGJ1ZmZlci5CeXRlcygpKSkKKwkJCXJlcywgZXJyIDo9IGQucmVhZFN0cmluZygpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWFzc2VydC5FcXVhbCh0LCBzdHIsIHJlcykKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgYm9vbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJZiA6PSBmdW5jKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwkJCQlyZXR1cm4gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUuKGJvb2wpKQorCQkJfQorCQkJZXJyIDo9IGYoZmFsc2UsICZidWZmZXIsIG5pbCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJYiwgZXJyIDo9IGQucmVhZEJ5dGUoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRmFsc2UodCwgYiAhPSAwKQorCisJCQlidWZmZXIuUmVzZXQoKQorCQkJZXJyID0gZih0cnVlLCAmYnVmZmVyLCBuaWwpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWQgPSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJYiwgZXJyID0gZC5yZWFkQnl0ZSgpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWFzc2VydC5UcnVlKHQsIGIgIT0gMCkKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgQmlnRGVjaW1hbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9ICZCaWdEZWNpbWFsezExLCBiaWcuTmV3SW50KGludDY0KDIyKSl9CisJCQllcnIgOj0gYmlnRGVjaW1hbFdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJcmVzLCBlcnIgOj0gZC5yZWFkQmlnRGVjaW1hbCgpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgaW50IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCisJCQlzb3VyY2UgOj0gaW50MzIoMTIzKQorCQkJZXJyIDo9IGludFdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJcmVzLCBlcnIgOj0gZC5yZWFkSW50MzIoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIHNob3J0IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCisJCQlzb3VyY2UgOj0gaW50MTYoMTIzKQorCQkJZXJyIDo9IHNob3J0V3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlidWYsIGVyciA6PSBkLnJlYWRCeXRlcygyKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlyZXMgOj0gaW50MTYoYmluYXJ5LkJpZ0VuZGlhbi5VaW50MTYoYnVmKSkKKwkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgc2hvcnQgaW50OCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9IGludDgoMTIzKQorCQkJZXJyIDo9IHNob3J0V3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlidWYsIGVyciA6PSBkLnJlYWRCeXRlcygyKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlyZXMgOj0gaW50MTYoYmluYXJ5LkJpZ0VuZGlhbi5VaW50MTYoYnVmKSkKKwkJCWFzc2VydC5FcXVhbCh0LCBpbnQxNihzb3VyY2UpLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIGxvbmciLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKKwkJCXNvdXJjZSA6PSAxMjMKKwkJCWVyciA6PSBsb25nV3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlyZXMsIGVyciA6PSBkLnJlYWRJbnQ2NCgpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWFzc2VydC5FcXVhbCh0LCBpbnQ2NChzb3VyY2UpLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIGJpZ0ludCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9IGJpZy5OZXdJbnQoMTIzKQorCQkJZXJyIDo9IGJpZ0ludFdyaXRlcigqc291cmNlLCAmYnVmZmVyLCBuaWwpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGJ1ZmZlci5CeXRlcygpKSkKKwkJCXJlcywgZXJyIDo9IGQucmVhZEJpZ0ludCgpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgYmlnSW50IHVpbnQ2NCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9IHVpbnQ2NCgxMjMpCisJCQllcnIgOj0gYmlnSW50V3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlyZXMsIGVyciA6PSBkLnJlYWRCaWdJbnQoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgbmV3KGJpZy5JbnQpLlNldFVpbnQ2NChzb3VyY2UpLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIGJpZ0ludCB1aW50IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCisJCQlzb3VyY2UgOj0gdWludCgxMjMpCisJCQllcnIgOj0gYmlnSW50V3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlyZXMsIGVyciA6PSBkLnJlYWRCaWdJbnQoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgbmV3KGJpZy5JbnQpLlNldFVpbnQ2NCh1aW50NjQoc291cmNlKSksIHJlcykKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgbGlzdCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9IFtdaW50ZXJmYWNle317aW50MzIoMTExKSwgInN0ciJ9CisJCQlzZXJpYWxpemVyIDo9IGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXJ7bmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCl9CisJCQllcnIgOj0gbGlzdFdyaXRlcihzb3VyY2UsICZidWZmZXIsICZzZXJpYWxpemVyKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlyZXMsIGVyciA6PSBkLnJlYWRMaXN0KGZhbHNlKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIGJ5dGVCdWZmZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKKwkJCXNvdXJjZSA6PSAmQnl0ZUJ1ZmZlcntbXWJ5dGV7Ynl0ZSgxMjcpLCBieXRlKDI1NSl9fQorCQkJZXJyIDo9IGJ5dGVCdWZmZXJXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGJ1ZmZlci5CeXRlcygpKSkKKwkJCXJlcywgZXJyIDo9IGQucmVhZEJ5dGVCdWZmZXIoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIHNldCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9IE5ld1NpbXBsZVNldChpbnQzMigxMTEpLCAic3RyIikKKwkJCXNlcmlhbGl6ZXIgOj0gZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcntuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEVycm9yLCBsYW5ndWFnZS5FbmdsaXNoKX0KKwkJCWVyciA6PSBzZXRXcml0ZXIoc291cmNlLCAmYnVmZmVyLCAmc2VyaWFsaXplcikKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJbGlzdCwgZXJyIDo9IGQucmVhZExpc3QoZmFsc2UpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCXJlcyA6PSBOZXdTaW1wbGVTZXQobGlzdC4oW11pbnRlcmZhY2V7fSkuLi4pCisJCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCisJCX0pCisJCXQuUnVuKCJyZWFkLXdyaXRlIG1hcCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgorCQkJc291cmNlIDo9IG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtpbnQzMigxKTogInMxIiwgInMyIjogaW50MzIoMiksIG5pbDogbmlsfQorCQkJc2VyaWFsaXplciA6PSBncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVye25ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgRXJyb3IsIGxhbmd1YWdlLkVuZ2xpc2gpfQorCQkJZXJyIDo9IG1hcFdyaXRlcihzb3VyY2UsICZidWZmZXIsICZzZXJpYWxpemVyKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlyZXMsIGVyciA6PSBkLnJlYWRNYXAoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlhc3NlcnQuRXF1YWwodCwgZm10LlNwcmludGYoIiV2Iiwgc291cmNlKSwgZm10LlNwcmludGYoIiV2IiwgcmVzKSkKKwkJfSkKKwkJdC5SdW4oInJlYWQgaW5jb21wYXJhYmxlIG1hcDogYSBtYXAgdmFsdWUgYXMgdGhlIGtleSIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCQkvLyBwcmVwYXJlIHRlc3QgZGF0YQorCQkJdmFyIGJ1ZiA9ICZieXRlcy5CdWZmZXJ7fQorCQkJdHlwZVNlcmlhbGl6ZXIgOj0gJmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXJ7bmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCl9CisJCQkvLyB3cml0ZSB0aGUgc2l6ZSBvZiBtYXAKKwkJCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmLCBiaW5hcnkuQmlnRW5kaWFuLCB1aW50MzIoMSkpCisJCQlpZiBlcnIgIT0gbmlsIHsKKwkJCQl0LkZhdGFsZigiRmFpbGVkIHRvIHdyaXRlIGRhdGE6ICV2IiwgZXJyKQorCQkJfQorCQkJLy8gd3JpdGUgYSBtYXAgdmFsdWUgYXMgdGhlIGtleQorCQkJazEgOj0gbWFwW3N0cmluZ11zdHJpbmd7ImtleSI6ICJ2YWx1ZSJ9CisJCQllcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZShyZWZsZWN0LlZhbHVlT2YoazEpLkludGVyZmFjZSgpLCBidWYpCisJCQlpZiBlcnIgIT0gbmlsIHsKKwkJCQl0LkZhdGFsZigiRmFpbGVkIHRvIGVuY29kZSBkYXRhOiAldiIsIGVycikKKwkJCX0KKwkJCXYxIDo9ICJ2YWx1ZTEiCisJCQllcnIgPSB0eXBlU2VyaWFsaXplci53cml0ZShyZWZsZWN0LlZhbHVlT2YodjEpLkludGVyZmFjZSgpLCBidWYpCisJCQlpZiBlcnIgIT0gbmlsIHsKKwkJCQl0LkZhdGFsZigiRmFpbGVkIHRvIGVuY29kZSBkYXRhOiAldiIsIGVycikKKwkJCX0KKworCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmLkJ5dGVzKCkpKQorCQkJcmVzdWx0LCBlcnIgOj0gZC5yZWFkTWFwKCkKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCXQuRmF0YWxmKCJyZWFkTWFwIGZhaWxlZDogJXYiLCBlcnIpCisJCQl9CisJCQltUmVzdWx0LCBvayA6PSByZXN1bHQuKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSkKKwkJCWlmICFvayB7CisJCQkJdC5GYXRhbGYoInJlYWRNYXAgcmVzdWx0IG5vdCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30iKQorCQkJfQorCQkJZm9yIGssIHYgOj0gcmFuZ2UgbVJlc3VsdCB7CisJCQkJYXNzZXJ0LkVxdWFsKHQsIHJlZmxlY3QuUHRyLCByZWZsZWN0LlR5cGVPZihrKS5LaW5kKCkpCisJCQkJYXNzZXJ0LkVxdWFsKHQsICJ2YWx1ZTEiLCB2KQorCQkJfQorCQl9KQorCQl0LlJ1bigicmVhZCBpbmNvbXBhcmFibGUgbWFwOiBhIHNsaWNlIHZhbHVlIGFzIHRoZSBrZXkiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkJLy8gcHJlcGFyZSB0ZXN0IGRhdGEKKwkJCXZhciBidWYgPSAmYnl0ZXMuQnVmZmVye30KKwkJCXR5cGVTZXJpYWxpemVyIDo9ICZncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVye25ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgRXJyb3IsIGxhbmd1YWdlLkVuZ2xpc2gpfQorCQkJLy8gd3JpdGUgdGhlIHNpemUgb2YgbWFwCisJCQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZiwgYmluYXJ5LkJpZ0VuZGlhbiwgdWludDMyKDEpKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJdC5GYXRhbGYoIkZhaWxlZCB0byB3cml0ZSBkYXRhOiAldiIsIGVycikKKwkJCX0KKwkJCS8vIHdyaXRlIGEgc2xpY2UgdmFsdWUgYXMgdGhlIGtleQorCQkJazIgOj0gW11pbnR7MSwgMiwgM30KKwkJCWVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlKHJlZmxlY3QuVmFsdWVPZihrMikuSW50ZXJmYWNlKCksIGJ1ZikKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCXQuRmF0YWxmKCJGYWlsZWQgdG8gZW5jb2RlIGRhdGE6ICV2IiwgZXJyKQorCQkJfQorCQkJdjIgOj0gInZhbHVlMiIKKwkJCWVyciA9IHR5cGVTZXJpYWxpemVyLndyaXRlKHJlZmxlY3QuVmFsdWVPZih2MikuSW50ZXJmYWNlKCksIGJ1ZikKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCXQuRmF0YWxmKCJGYWlsZWQgdG8gZW5jb2RlIGRhdGE6ICV2IiwgZXJyKQorCQkJfQorCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWYuQnl0ZXMoKSkpCisJCQlyZXN1bHQsIGVyciA6PSBkLnJlYWRNYXAoKQorCQkJaWYgZXJyICE9IG5pbCB7CisJCQkJdC5GYXRhbGYoInJlYWRNYXAgZmFpbGVkOiAldiIsIGVycikKKwkJCX0KKwkJCWV4cGVjdGVkIDo9IG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsKKwkJCQkiWzEgMiAzXSI6ICJ2YWx1ZTIiLAorCQkJfQorCQkJaWYgIXJlZmxlY3QuRGVlcEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpIHsKKwkJCQl0LkVycm9yZigiRXhwZWN0ZWQgJXYsIGJ1dCBnb3QgJXYiLCBleHBlY3RlZCwgcmVzdWx0KQorCQkJfQorCQl9KQorCQl0LlJ1bigicmVhZC13cml0ZSB0aW1lIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCisJCQlzb3VyY2UgOj0gdGltZS5EYXRlKDIwMjIsIDUsIDEwLCA5LCA1MSwgMCwgMCwgdGltZS5Mb2NhbCkKKwkJCWVyciA6PSBkYXRlVGltZVdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJcmVzLCBlcnIgOj0gZC5yZWFkRGF0ZVRpbWUoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQkvLyBJU08gZm9ybWF0CisJCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLkZvcm1hdCh0aW1lLlJGQzMzMzlOYW5vKSwgcmVzLkZvcm1hdCh0aW1lLlJGQzMzMzlOYW5vKSkKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgbG9jYWwgZGF0ZXRpbWUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKKwkJCXNvdXJjZSA6PSB0aW1lLkRhdGUoMjAyMiwgNSwgMTAsIDksIDUxLCAwLCAwLCB0aW1lLkxvY2FsKQorCQkJZXJyIDo9IGRhdGVUaW1lV3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCQlyZXMsIGVyciA6PSBkLnJlYWREYXRlVGltZSgpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCS8vIElTTyBmb3JtYXQKKwkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UuRm9ybWF0KHRpbWUuUkZDMzMzOU5hbm8pLCByZXMuRm9ybWF0KHRpbWUuUkZDMzMzOU5hbm8pKQorCQl9KQorCQl0LlJ1bigicmVhZC13cml0ZSBVVEMgZGF0ZXRpbWUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKKwkJCXNvdXJjZSA6PSB0aW1lLkRhdGUoMjAyMiwgNSwgMTAsIDksIDUxLCAwLCAwLCB0aW1lLlVUQykKKwkJCWVyciA6PSBkYXRlVGltZVdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJZCA6PSBOZXdHcmFwaEJpbmFyeURlc2VyaWFsaXplcihieXRlcy5OZXdSZWFkZXIoYnVmZmVyLkJ5dGVzKCkpKQorCQkJcmVzLCBlcnIgOj0gZC5yZWFkRGF0ZVRpbWUoKQorCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCQkvLyBJU08gZm9ybWF0CisJCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLkZvcm1hdCh0aW1lLlJGQzMzMzlOYW5vKSwgcmVzLkZvcm1hdCh0aW1lLlJGQzMzMzlOYW5vKSkKKwkJfSkKKwkJdC5SdW4oInJlYWQtd3JpdGUgSFNUIGRhdGV0aW1lIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCisJCQlzb3VyY2UgOj0gdGltZS5EYXRlKDIwMjIsIDUsIDEwLCA5LCA1MSwgMzQsIDEyMzQ1Njc4OSwgR2V0VGltZXpvbmVGcm9tT2Zmc2V0KC0zNjAwMCkpCisJCQllcnIgOj0gZGF0ZVRpbWVXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCisJCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKGJ1ZmZlci5CeXRlcygpKSkKKwkJCXJlcywgZXJyIDo9IGQucmVhZERhdGVUaW1lKCkKKwkJCWFzc2VydC5OaWwodCwgZXJyKQorCQkJLy8gSVNPIGZvcm1hdAorCQkJYXNzZXJ0LkVxdWFsKHQsIHNvdXJjZS5Gb3JtYXQodGltZS5SRkMzMzM5TmFubyksIHJlcy5Gb3JtYXQodGltZS5SRkMzMzM5TmFubykpCisJCX0pCisJfSkKKworCXQuUnVuKCJyZWFkLXdyaXRlIG1hcmtlciIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCisJCXNvdXJjZSA6PSBFbmRPZlN0cmVhbSgpCisJCWVyciA6PSBtYXJrZXJXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlkIDo9IE5ld0dyYXBoQmluYXJ5RGVzZXJpYWxpemVyKGJ5dGVzLk5ld1JlYWRlcihidWZmZXIuQnl0ZXMoKSkpCisJCWIsIGVyciA6PSBkLnJlYWRCeXRlKCkKKwkJYXNzZXJ0Lk5pbCh0LCBlcnIpCisJCXJlcywgZXJyIDo9IE9mKGIpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCisJfSkKKworfQorCisvLyBUZXN0V3JpdGVyRXJyb3JQcm9wYWdhdGlvbiB0ZXN0cyB0aGF0IGVycm9ycyBmcm9tIGlvLldyaXRlciBhcmUgcHJvcGVybHkgcHJvcGFnYXRlZAorLy8gdGhyb3VnaCB0aGUgc2VyaWFsaXphdGlvbiBjaGFpbi4KKy8vIEZlYXR1cmU6IHNlcmlhbGl6ZXItd3JpdGVyLXJlZmFjdG9yLCBQcm9wZXJ0eSA0OiBXcml0ZXIgRXJyb3IgUHJvcGFnYXRpb24KKy8vICoqVmFsaWRhdGVzOiBSZXF1aXJlbWVudHMgNy4xLCA3LjQqKgorZnVuYyBUZXN0V3JpdGVyRXJyb3JQcm9wYWdhdGlvbih0ICp0ZXN0aW5nLlQpIHsKKwlzZXJpYWxpemVyIDo9IGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXJ7bmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCl9CisKKwl0LlJ1bigiZXJyb3IgcHJvcGFnYXRlcyBmcm9tIHN0cmluZ1dyaXRlciIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIFN0cmluZyAiaGVsbG8iIHJlcXVpcmVzOiA0IGJ5dGVzIGZvciBsZW5ndGggKyA1IGJ5dGVzIGZvciBjb250ZW50ID0gOSBieXRlcworCQkvLyBGYWlsIGFmdGVyIDIgYnl0ZXMgKGR1cmluZyBsZW5ndGggd3JpdGUpCisJCXcgOj0gJmZhaWxpbmdXcml0ZXJ7ZmFpbEFmdGVyOiAyfQorCQllcnIgOj0gc3RyaW5nV3JpdGVyKCJoZWxsbyIsIHcsIG5pbCkKKwkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9KQorCisJdC5SdW4oImVycm9yIHByb3BhZ2F0ZXMgZnJvbSBzdHJpbmdXcml0ZXIgZHVyaW5nIGNvbnRlbnQgd3JpdGUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBTdHJpbmcgImhlbGxvIiByZXF1aXJlczogNCBieXRlcyBmb3IgbGVuZ3RoICsgNSBieXRlcyBmb3IgY29udGVudCA9IDkgYnl0ZXMKKwkJLy8gRmFpbCBhZnRlciA2IGJ5dGVzIChkdXJpbmcgY29udGVudCB3cml0ZSkKKwkJdyA6PSAmZmFpbGluZ1dyaXRlcntmYWlsQWZ0ZXI6IDZ9CisJCWVyciA6PSBzdHJpbmdXcml0ZXIoImhlbGxvIiwgdywgbmlsKQorCQlhc3NlcnQuTm90TmlsKHQsIGVycikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIGVyci5FcnJvcigpLCAic2ltdWxhdGVkIHdyaXRlIGZhaWx1cmUiKQorCX0pCisKKwl0LlJ1bigiZXJyb3IgcHJvcGFnYXRlcyBmcm9tIGludFdyaXRlciIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIGludDMyIHJlcXVpcmVzIDQgYnl0ZXMKKwkJLy8gRmFpbCBhZnRlciAyIGJ5dGVzCisJCXcgOj0gJmZhaWxpbmdXcml0ZXJ7ZmFpbEFmdGVyOiAyfQorCQllcnIgOj0gaW50V3JpdGVyKGludDMyKDQyKSwgdywgbmlsKQorCQlhc3NlcnQuTm90TmlsKHQsIGVycikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIGVyci5FcnJvcigpLCAic2ltdWxhdGVkIHdyaXRlIGZhaWx1cmUiKQorCX0pCisKKwl0LlJ1bigiZXJyb3IgcHJvcGFnYXRlcyBmcm9tIGxvbmdXcml0ZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBpbnQ2NCByZXF1aXJlcyA4IGJ5dGVzCisJCS8vIEZhaWwgYWZ0ZXIgNCBieXRlcworCQl3IDo9ICZmYWlsaW5nV3JpdGVye2ZhaWxBZnRlcjogNH0KKwkJZXJyIDo9IGxvbmdXcml0ZXIoaW50NjQoNDIpLCB3LCBuaWwpCisJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQorCQlhc3NlcnQuQ29udGFpbnModCwgZXJyLkVycm9yKCksICJzaW11bGF0ZWQgd3JpdGUgZmFpbHVyZSIpCisJfSkKKworCXQuUnVuKCJlcnJvciBwcm9wYWdhdGVzIGZyb20gbGlzdFdyaXRlciIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIExpc3Qgd2l0aCBvbmUgaW50MzIgZWxlbWVudCByZXF1aXJlczoKKwkJLy8gNCBieXRlcyBmb3IgbGVuZ3RoICsgKDEgYnl0ZSB0eXBlIGNvZGUgKyAxIGJ5dGUgdmFsdWUgZmxhZyArIDQgYnl0ZXMgaW50IHZhbHVlKSA9IDEwIGJ5dGVzCisJCS8vIEZhaWwgYWZ0ZXIgMiBieXRlcyAoZHVyaW5nIGxlbmd0aCB3cml0ZSkKKwkJdyA6PSAmZmFpbGluZ1dyaXRlcntmYWlsQWZ0ZXI6IDJ9CisJCWVyciA6PSBsaXN0V3JpdGVyKFtdaW50ZXJmYWNle317aW50MzIoMSl9LCB3LCAmc2VyaWFsaXplcikKKwkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9KQorCisJdC5SdW4oImVycm9yIHByb3BhZ2F0ZXMgZnJvbSBsaXN0V3JpdGVyIGR1cmluZyBlbGVtZW50IHdyaXRlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gTGlzdCB3aXRoIG9uZSBpbnQzMiBlbGVtZW50IHJlcXVpcmVzOgorCQkvLyA0IGJ5dGVzIGZvciBsZW5ndGggKyAoMSBieXRlIHR5cGUgY29kZSArIDEgYnl0ZSB2YWx1ZSBmbGFnICsgNCBieXRlcyBpbnQgdmFsdWUpID0gMTAgYnl0ZXMKKwkJLy8gRmFpbCBhZnRlciA2IGJ5dGVzIChkdXJpbmcgZWxlbWVudCB3cml0ZSkKKwkJdyA6PSAmZmFpbGluZ1dyaXRlcntmYWlsQWZ0ZXI6IDZ9CisJCWVyciA6PSBsaXN0V3JpdGVyKFtdaW50ZXJmYWNle317aW50MzIoMSl9LCB3LCAmc2VyaWFsaXplcikKKwkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9KQorCisJdC5SdW4oImVycm9yIHByb3BhZ2F0ZXMgZnJvbSBtYXBXcml0ZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBNYXAgd2l0aCBvbmUgZW50cnkgcmVxdWlyZXM6CisJCS8vIDQgYnl0ZXMgZm9yIGxlbmd0aCArIGtleSBieXRlcyArIHZhbHVlIGJ5dGVzCisJCS8vIEZhaWwgYWZ0ZXIgMiBieXRlcyAoZHVyaW5nIGxlbmd0aCB3cml0ZSkKKwkJdyA6PSAmZmFpbGluZ1dyaXRlcntmYWlsQWZ0ZXI6IDJ9CisJCWVyciA6PSBtYXBXcml0ZXIobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e2ludDMyKDEpOiAidiJ9LCB3LCAmc2VyaWFsaXplcikKKwkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9KQorCisJdC5SdW4oImVycm9yIHByb3BhZ2F0ZXMgZnJvbSBncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyLndyaXRlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gV3JpdGluZyBhIGZ1bGx5LXF1YWxpZmllZCBpbnQzMiByZXF1aXJlczoKKwkJLy8gMSBieXRlIHR5cGUgY29kZSArIDEgYnl0ZSB2YWx1ZSBmbGFnICsgNCBieXRlcyB2YWx1ZSA9IDYgYnl0ZXMKKwkJLy8gRmFpbCBpbW1lZGlhdGVseQorCQl3IDo9ICZmYWlsaW5nV3JpdGVye2ZhaWxBZnRlcjogMH0KKwkJZXJyIDo9IHNlcmlhbGl6ZXIud3JpdGUoaW50MzIoNDIpLCB3KQorCQlhc3NlcnQuTm90TmlsKHQsIGVycikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIGVyci5FcnJvcigpLCAic2ltdWxhdGVkIHdyaXRlIGZhaWx1cmUiKQorCX0pCisKKwl0LlJ1bigiZXJyb3IgcHJvcGFnYXRlcyBmcm9tIGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIud3JpdGUgZHVyaW5nIHZhbHVlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gV3JpdGluZyBhIGZ1bGx5LXF1YWxpZmllZCBpbnQzMiByZXF1aXJlczoKKwkJLy8gMSBieXRlIHR5cGUgY29kZSArIDEgYnl0ZSB2YWx1ZSBmbGFnICsgNCBieXRlcyB2YWx1ZSA9IDYgYnl0ZXMKKwkJLy8gRmFpbCBhZnRlciAzIGJ5dGVzIChkdXJpbmcgdmFsdWUgd3JpdGUpCisJCXcgOj0gJmZhaWxpbmdXcml0ZXJ7ZmFpbEFmdGVyOiAzfQorCQllcnIgOj0gc2VyaWFsaXplci53cml0ZShpbnQzMig0MiksIHcpCisJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQorCQlhc3NlcnQuQ29udGFpbnModCwgZXJyLkVycm9yKCksICJzaW11bGF0ZWQgd3JpdGUgZmFpbHVyZSIpCisJfSkKKworCXQuUnVuKCJlcnJvciBwcm9wYWdhdGVzIGZyb20gZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplci53cml0ZVZhbHVlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gV3JpdGluZyBhIG5vbi1udWxsYWJsZSBpbnQzMiB2YWx1ZSByZXF1aXJlczoKKwkJLy8gNCBieXRlcyB2YWx1ZQorCQkvLyBGYWlsIGFmdGVyIDIgYnl0ZXMKKwkJdyA6PSAmZmFpbGluZ1dyaXRlcntmYWlsQWZ0ZXI6IDJ9CisJCWVyciA6PSBzZXJpYWxpemVyLndyaXRlVmFsdWUoaW50MzIoNDIpLCB3LCBmYWxzZSkKKwkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9KQorCisJdC5SdW4oImVycm9yIHByb3BhZ2F0ZXMgZnJvbSBncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyLndyaXRlVmFsdWUgbnVsbGFibGUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBXcml0aW5nIGEgbnVsbGFibGUgaW50MzIgdmFsdWUgcmVxdWlyZXM6CisJCS8vIDEgYnl0ZSB2YWx1ZSBmbGFnICsgNCBieXRlcyB2YWx1ZSA9IDUgYnl0ZXMKKwkJLy8gRmFpbCBpbW1lZGlhdGVseSAoZHVyaW5nIHZhbHVlIGZsYWcgd3JpdGUpCisJCXcgOj0gJmZhaWxpbmdXcml0ZXJ7ZmFpbEFmdGVyOiAwfQorCQllcnIgOj0gc2VyaWFsaXplci53cml0ZVZhbHVlKGludDMyKDQyKSwgdywgdHJ1ZSkKKwkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgInNpbXVsYXRlZCB3cml0ZSBmYWlsdXJlIikKKwl9KQorCisJdC5SdW4oImVycm9yIHByb3BhZ2F0ZXMgZnJvbSBiaWdJbnRXcml0ZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBCaWdJbnQgcmVxdWlyZXM6IDQgYnl0ZXMgZm9yIGxlbmd0aCArIHZhcmlhYmxlIGJ5dGVzIGZvciB2YWx1ZQorCQkvLyBGYWlsIGFmdGVyIDIgYnl0ZXMgKGR1cmluZyBsZW5ndGggd3JpdGUpCisJCXcgOj0gJmZhaWxpbmdXcml0ZXJ7ZmFpbEFmdGVyOiAyfQorCQllcnIgOj0gYmlnSW50V3JpdGVyKGJpZy5OZXdJbnQoMTIzNDUpLCB3LCBuaWwpCisJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQorCQlhc3NlcnQuQ29udGFpbnModCwgZXJyLkVycm9yKCksICJzaW11bGF0ZWQgd3JpdGUgZmFpbHVyZSIpCisJfSkKKworCXQuUnVuKCJlcnJvciBwcm9wYWdhdGVzIGZyb20gZGF0ZVRpbWVXcml0ZXIiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQkvLyBEYXRlVGltZSByZXF1aXJlczogNCBieXRlcyB5ZWFyICsgMSBieXRlIG1vbnRoICsgMSBieXRlIGRheSArIDggYnl0ZXMgbmFub3NlY29uZHMgKyA0IGJ5dGVzIG9mZnNldCA9IDE4IGJ5dGVzCisJCS8vIEZhaWwgYWZ0ZXIgMiBieXRlcyAoZHVyaW5nIHllYXIgd3JpdGUpCisJCXcgOj0gJmZhaWxpbmdXcml0ZXJ7ZmFpbEFmdGVyOiAyfQorCQllcnIgOj0gZGF0ZVRpbWVXcml0ZXIodGltZS5Ob3coKSwgdywgbmlsKQorCQlhc3NlcnQuTm90TmlsKHQsIGVycikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIGVyci5FcnJvcigpLCAic2ltdWxhdGVkIHdyaXRlIGZhaWx1cmUiKQorCX0pCisKKwl0LlJ1bigic3VjY2Vzc2Z1bCB3cml0ZSB3aXRoIHN1ZmZpY2llbnQgYnVmZmVyIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJLy8gVmVyaWZ5IHRoYXQgd3JpdGVzIHN1Y2NlZWQgd2hlbiB0aGUgd3JpdGVyIGhhcyBlbm91Z2ggY2FwYWNpdHkKKwkJdyA6PSAmZmFpbGluZ1dyaXRlcntmYWlsQWZ0ZXI6IDEwMH0KKwkJZXJyIDo9IHN0cmluZ1dyaXRlcigiaGVsbG8iLCB3LCBuaWwpCisJCWFzc2VydC5OaWwodCwgZXJyKQorCQkvLyBTdHJpbmcgImhlbGxvIiA9IDQgYnl0ZXMgbGVuZ3RoICsgNSBieXRlcyBjb250ZW50ID0gOSBieXRlcworCQlhc3NlcnQuRXF1YWwodCwgOSwgdy53cml0dGVuKQorCX0pCisKKwl0LlJ1bigic3VjY2Vzc2Z1bCB3cml0ZSBvZiBjb21wbGV4IHR5cGUgd2l0aCBzdWZmaWNpZW50IGJ1ZmZlciIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCS8vIFZlcmlmeSB0aGF0IGNvbXBsZXggdHlwZSB3cml0ZXMgc3VjY2VlZCB3aGVuIHRoZSB3cml0ZXIgaGFzIGVub3VnaCBjYXBhY2l0eQorCQl3IDo9ICZmYWlsaW5nV3JpdGVye2ZhaWxBZnRlcjogMTAwfQorCQllcnIgOj0gc2VyaWFsaXplci53cml0ZShbXWludGVyZmFjZXt9e2ludDMyKDEpLCAidGVzdCJ9LCB3KQorCQlhc3NlcnQuTmlsKHQsIGVycikKKwkJLy8gTGlzdCB0eXBlIGNvZGUgKDEpICsgdmFsdWUgZmxhZyAoMSkgKyBsZW5ndGggKDQpICsKKwkJLy8gaW50MzI6IHR5cGUgY29kZSAoMSkgKyB2YWx1ZSBmbGFnICgxKSArIHZhbHVlICg0KSArCisJCS8vIHN0cmluZzogdHlwZSBjb2RlICgxKSArIHZhbHVlIGZsYWcgKDEpICsgbGVuZ3RoICg0KSArICJ0ZXN0IiAoNCkKKwkJLy8gVG90YWwgPSAyMiBieXRlcworCQlhc3NlcnQuRXF1YWwodCwgMjIsIHcud3JpdHRlbikKKwl9KQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2dyYXBoQmluYXJ5X3Rlc3QuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTNiNTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhCaW5hcnlfdGVzdC5nbworKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0vKgotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi1kaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi1zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi1LSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLXNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLXVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotcGFja2FnZSBncmVtbGluZ28KLQotaW1wb3J0ICgKLQkiYnl0ZXMiCi0JImVuY29kaW5nL2JpbmFyeSIKLQkiZm10IgotCSJnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkvYXNzZXJ0IgotCSJnb2xhbmcub3JnL3gvdGV4dC9sYW5ndWFnZSIKLQkibWF0aC9iaWciCi0JInJlZmxlY3QiCi0JInRlc3RpbmciCi0JInRpbWUiCi0pCi0KLWZ1bmMgVGVzdEdyYXBoQmluYXJ5VjEodCAqdGVzdGluZy5UKSB7Ci0JdC5SdW4oImdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIgdGVzdHMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlzZXJpYWxpemVyIDo9IGdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXJ7bmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCl9Ci0KLQkJdC5SdW4oImdldFR5cGUgc2hvdWxkIHJldHVybiBjb3JyZWN0IHR5cGUgZm9yIHNpbXBsZSB0eXBlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXJlcywgZXJyIDo9IHNlcmlhbGl6ZXIuZ2V0VHlwZShpbnQzMigxKSkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIGludFR5cGUsIHJlcykKLQkJfSkKLQkJdC5SdW4oImdldFR5cGUgc2hvdWxkIHJldHVybiBjb3JyZWN0IHR5cGUgZm9yIGNvbXBsZXggdHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlyZXMsIGVyciA6PSBzZXJpYWxpemVyLmdldFR5cGUoW11ieXRlezEsIDIsIDN9KQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgbGlzdFR5cGUsIHJlcykKLQkJfSkKLQkJdC5SdW4oImdldFR5cGUgc2hvdWxkIHJldHVybiBlcnJvciBmb3IgbWlzc2luZyB0eXBlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCV8sIGVyciA6PSBzZXJpYWxpemVyLmdldFR5cGUoRXJyb3IpCi0JCQlhc3NlcnQuTm90TmlsKHQsIGVycikKLQkJfSkKLQotCQl0LlJ1bigiZ2V0V3JpdGVyIHNob3VsZCByZXR1cm4gY29ycmVjdCBmdW5jIGZvciBkYXRhVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQl3cml0ZXIsIGVyciA6PSBzZXJpYWxpemVyLmdldFdyaXRlcihpbnRUeXBlKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgcmVmbGVjdC5WYWx1ZU9mKGludFdyaXRlcikuUG9pbnRlcigpLCByZWZsZWN0LlZhbHVlT2Yod3JpdGVyKS5Qb2ludGVyKCkpCi0JCX0pCi0JCXQuUnVuKCJnZXRXcml0ZXIgc2hvdWxkIHJldHVybiBlcnJvciBmb3IgbWlzc2luZyBkYXRhVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlfLCBlcnIgOj0gc2VyaWFsaXplci5nZXRXcml0ZXIobnVsbFR5cGUpCi0JCQlhc3NlcnQuTm90TmlsKHQsIGVycikKLQkJfSkKLQotCQl0LlJ1bigiZ2V0U2VyaWFsaXplclRvV3JpdGUgc2hvdWxkIHJldHVybiBjb3JyZWN0IGZ1bmMgZm9yIGludCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQl3cml0ZXIsIGRhdGFUeXBlLCBlcnIgOj0gc2VyaWFsaXplci5nZXRTZXJpYWxpemVyVG9Xcml0ZShpbnQzMigxKSkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIGludFR5cGUsIGRhdGFUeXBlKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHJlZmxlY3QuVmFsdWVPZihpbnRXcml0ZXIpLlBvaW50ZXIoKSwgcmVmbGVjdC5WYWx1ZU9mKHdyaXRlcikuUG9pbnRlcigpKQotCQl9KQotCQl0LlJ1bigiZ2V0U2VyaWFsaXplclRvV3JpdGUgc2hvdWxkIHJldHVybiBlcnJvciBmb3IgbWlzc2luZyBkYXRhVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlfLCBfLCBlcnIgOj0gc2VyaWFsaXplci5nZXRTZXJpYWxpemVyVG9Xcml0ZShudWxsVHlwZSkKLQkJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQotCQl9KQotCX0pCi0KLQl0LlJ1bigicmVhZC13cml0ZSB0ZXN0cyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXQuUnVuKCJyZWFkLXdyaXRlIHN0cmluZyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb3MgOj0gMAotCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKLQkJCXN0ciA6PSAidGVzdCBzdHJpbmciCi0JCQlidWYsIGVyciA6PSBzdHJpbmdXcml0ZXIoc3RyLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHJlYWRTdHJpbmcoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHN0ciwgcmVzKQotCQl9KQotCQl0LlJ1bigicmVhZC13cml0ZSBHcmVtbGluVHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb3MgOj0gMAotCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKLQkJCXNvdXJjZSA6PSAmR3JlbWxpblR5cGV7InRlc3QgZnFjbiJ9Ci0JCQlidWYsIGVyciA6PSBjbGFzc1dyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZENsYXNzKCZidWYsICZwb3MpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKLQkJfSkKLQkJdC5SdW4oInJlYWQtd3JpdGUgYm9vbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb3MgOj0gMAotCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKLQkJCWYgOj0gZnVuYyh2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCQkJCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZS4oYm9vbCkpCi0JCQkJcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBlcnIKLQkJCX0KLQkJCWRhdGEsIGVyciA6PSBmKGZhbHNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHJlYWRCb29sZWFuKCZkYXRhLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRmFsc2UodCwgcmVzLihib29sKSkKLQotCQkJZGF0YSwgZXJyID0gZih0cnVlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyID0gcmVhZEJvb2xlYW4oJmRhdGEsICZwb3MpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5UcnVlKHQsIHJlcy4oYm9vbCkpCi0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIEJpZ0RlY2ltYWwiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gJkJpZ0RlY2ltYWx7MTEsIGJpZy5OZXdJbnQoaW50NjQoMjIpKX0KLQkJCWJ1ZiwgZXJyIDo9IGJpZ0RlY2ltYWxXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHJlYWRCaWdEZWNpbWFsKCZidWYsICZwb3MpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKLQkJfSkKLQkJdC5SdW4oInJlYWQtd3JpdGUgaW50IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvcyA6PSAwCi0JCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgotCQkJc291cmNlIDo9IGludDMyKDEyMykKLQkJCWJ1ZiwgZXJyIDo9IGludFdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZEludCgmYnVmLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCi0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIHNob3J0IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvcyA6PSAwCi0JCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgotCQkJc291cmNlIDo9IGludDE2KDEyMykKLQkJCWJ1ZiwgZXJyIDo9IHNob3J0V3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlyZXMsIGVyciA6PSByZWFkU2hvcnQoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHNvdXJjZSwgcmVzKQotCQl9KQotCQl0LlJ1bigicmVhZC13cml0ZSBzaG9ydCBpbnQ4IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvcyA6PSAwCi0JCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgotCQkJc291cmNlIDo9IGludDgoMTIzKQotCQkJYnVmLCBlcnIgOj0gc2hvcnRXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHJlYWRTaG9ydCgmYnVmLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgaW50MTYoc291cmNlKSwgcmVzKQotCQl9KQotCQl0LlJ1bigicmVhZC13cml0ZSBsb25nIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvcyA6PSAwCi0JCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgotCQkJc291cmNlIDo9IDEyMwotCQkJYnVmLCBlcnIgOj0gbG9uZ1dyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZExvbmcoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIGludDY0KHNvdXJjZSksIHJlcykKLQkJfSkKLQkJdC5SdW4oInJlYWQtd3JpdGUgYmlnSW50IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvcyA6PSAwCi0JCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgotCQkJc291cmNlIDo9IGJpZy5OZXdJbnQoMTIzKQotCQkJYnVmLCBlcnIgOj0gYmlnSW50V3JpdGVyKCpzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZEJpZ0ludCgmYnVmLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLCByZXMpCi0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIGJpZ0ludCB1aW50NjQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gdWludDY0KDEyMykKLQkJCWJ1ZiwgZXJyIDo9IGJpZ0ludFdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZEJpZ0ludCgmYnVmLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgbmV3KGJpZy5JbnQpLlNldFVpbnQ2NChzb3VyY2UpLCByZXMpCi0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIGJpZ0ludCB1aW50NjQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gdWludCgxMjMpCi0JCQlidWYsIGVyciA6PSBiaWdJbnRXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHJlYWRCaWdJbnQoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIG5ldyhiaWcuSW50KS5TZXRVaW50NjQodWludDY0KHNvdXJjZSkpLCByZXMpCi0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIGxpc3QiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gW11pbnRlcmZhY2V7fXtpbnQzMigxMTEpLCAic3RyIn0KLQkJCWJ1ZiwgZXJyIDo9IGxpc3RXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHJlYWRMaXN0KCZidWYsICZwb3MpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKLQkJfSkKLQkJdC5SdW4oInJlYWQtd3JpdGUgYnl0ZUJ1ZmZlciIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb3MgOj0gMAotCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKLQkJCXNvdXJjZSA6PSAmQnl0ZUJ1ZmZlcntbXWJ5dGV7Ynl0ZSgxMjcpLCBieXRlKDI1NSl9fQotCQkJYnVmLCBlcnIgOj0gYnl0ZUJ1ZmZlcldyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZEJ5dGVCdWZmZXIoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHNvdXJjZSwgcmVzKQotCQl9KQotCQl0LlJ1bigicmVhZC13cml0ZSBzZXQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gTmV3U2ltcGxlU2V0KGludDMyKDExMSksICJzdHIiKQotCQkJYnVmLCBlcnIgOj0gc2V0V3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlyZXMsIGVyciA6PSByZWFkU2V0KCZidWYsICZwb3MpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UsIHJlcykKLQkJfSkKLQkJdC5SdW4oInJlYWQtd3JpdGUgbWFwIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXBvcyA6PSAwCi0JCQl2YXIgYnVmZmVyIGJ5dGVzLkJ1ZmZlcgotCQkJc291cmNlIDo9IG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsxOiAiczEiLCAiczIiOiAyLCBuaWw6IG5pbH0KLQkJCWJ1ZiwgZXJyIDo9IG1hcFdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gcmVhZE1hcCgmYnVmLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlhc3NlcnQuRXF1YWwodCwgZm10LlNwcmludGYoIiV2Iiwgc291cmNlKSwgZm10LlNwcmludGYoIiV2IiwgcmVzKSkKLQkJfSkKLQkJdC5SdW4oInJlYWQgaW5jb21wYXJhYmxlIG1hcDogYSBtYXAgdmFsdWUgYXMgdGhlIGtleSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQkvLyBwcmVwYXJlIHRlc3QgZGF0YQotCQkJdmFyIGJ1ZiA9ICZieXRlcy5CdWZmZXJ7fQotCQkJdHlwZVNlcmlhbGl6ZXIgOj0gJmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXJ7fQotCQkJLy8gd3JpdGUgdGhlIHNpemUgb2YgbWFwCi0JCQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZiwgYmluYXJ5LkJpZ0VuZGlhbiwgdWludDMyKDEpKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdC5GYXRhbGYoIkZhaWxlZCB0byB3cml0ZSBkYXRhOiAldiIsIGVycikKLQkJCX0KLQkJCS8vIHdyaXRlIGEgbWFwIHZhbHVlIGFzIHRoZSBrZXkKLQkJCWsxIDo9IG1hcFtzdHJpbmddc3RyaW5neyJrZXkiOiAidmFsdWUifQotCQkJXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGUocmVmbGVjdC5WYWx1ZU9mKGsxKS5JbnRlcmZhY2UoKSwgYnVmKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdC5GYXRhbGYoIkZhaWxlZCB0byBlbmNvZGUgZGF0YTogJXYiLCBlcnIpCi0JCQl9Ci0JCQl2MSA6PSAidmFsdWUxIgotCQkJXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGUocmVmbGVjdC5WYWx1ZU9mKHYxKS5JbnRlcmZhY2UoKSwgYnVmKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdC5GYXRhbGYoIkZhaWxlZCB0byBlbmNvZGUgZGF0YTogJXYiLCBlcnIpCi0JCQl9Ci0KLQkJCWRhdGEgOj0gYnVmLkJ5dGVzKCkKLQkJCWkgOj0gMAotCQkJcmVzdWx0LCBlcnIgOj0gcmVhZE1hcCgmZGF0YSwgJmkpCi0JCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQl0LkZhdGFsZigicmVhZE1hcCBmYWlsZWQ6ICV2IiwgZXJyKQotCQkJfQotCQkJbVJlc3VsdCwgb2sgOj0gcmVzdWx0LihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pCi0JCQlpZiAhb2sgewotCQkJCXQuRmF0YWxmKCJyZWFkTWFwIHJlc3VsdCBub3QgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9IikKLQkJCX0KLQkJCWZvciBrLCB2IDo9IHJhbmdlIG1SZXN1bHQgewotCQkJCWFzc2VydC5FcXVhbCh0LCByZWZsZWN0LlB0ciwgcmVmbGVjdC5UeXBlT2YoaykuS2luZCgpKQotCQkJCWFzc2VydC5FcXVhbCh0LCAidmFsdWUxIiwgdikKLQkJCX0KLQkJfSkKLQkJdC5SdW4oInJlYWQgaW5jb21wYXJhYmxlIG1hcDogYSBzbGljZSB2YWx1ZSBhcyB0aGUga2V5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCS8vIHByZXBhcmUgdGVzdCBkYXRhCi0JCQl2YXIgYnVmID0gJmJ5dGVzLkJ1ZmZlcnt9Ci0JCQl0eXBlU2VyaWFsaXplciA6PSAmZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcnt9Ci0JCQkvLyB3cml0ZSB0aGUgc2l6ZSBvZiBtYXAKLQkJCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmLCBiaW5hcnkuQmlnRW5kaWFuLCB1aW50MzIoMSkpCi0JCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQl0LkZhdGFsZigiRmFpbGVkIHRvIHdyaXRlIGRhdGE6ICV2IiwgZXJyKQotCQkJfQotCQkJLy8gd3JpdGUgYSBzbGljZSB2YWx1ZSBhcyB0aGUga2V5Ci0JCQlrMiA6PSBbXWludHsxLCAyLCAzfQotCQkJXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGUocmVmbGVjdC5WYWx1ZU9mKGsyKS5JbnRlcmZhY2UoKSwgYnVmKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdC5GYXRhbGYoIkZhaWxlZCB0byBlbmNvZGUgZGF0YTogJXYiLCBlcnIpCi0JCQl9Ci0JCQl2MiA6PSAidmFsdWUyIgotCQkJXywgZXJyID0gdHlwZVNlcmlhbGl6ZXIud3JpdGUocmVmbGVjdC5WYWx1ZU9mKHYyKS5JbnRlcmZhY2UoKSwgYnVmKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJdC5GYXRhbGYoIkZhaWxlZCB0byBlbmNvZGUgZGF0YTogJXYiLCBlcnIpCi0JCQl9Ci0KLQkJCWRhdGEgOj0gYnVmLkJ5dGVzKCkKLQkJCWkgOj0gMAotCQkJcmVzdWx0LCBlcnIgOj0gcmVhZE1hcCgmZGF0YSwgJmkpCi0JCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQl0LkZhdGFsZigicmVhZE1hcCBmYWlsZWQ6ICV2IiwgZXJyKQotCQkJfQotCQkJZXhwZWN0ZWQgOj0gbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9ewotCQkJCSJbMSAyIDNdIjogInZhbHVlMiIsCi0JCQl9Ci0JCQlpZiAhcmVmbGVjdC5EZWVwRXF1YWwocmVzdWx0LCBleHBlY3RlZCkgewotCQkJCXQuRXJyb3JmKCJFeHBlY3RlZCAldiwgYnV0IGdvdCAldiIsIGV4cGVjdGVkLCByZXN1bHQpCi0JCQl9Ci0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIHRpbWUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gdGltZS5EYXRlKDIwMjIsIDUsIDEwLCA5LCA1MSwgMCwgMCwgdGltZS5Mb2NhbCkKLQkJCWJ1ZiwgZXJyIDo9IHRpbWVXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IHRpbWVSZWFkZXIoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJYXNzZXJ0LkVxdWFsKHQsIHNvdXJjZSwgcmVzKQotCQl9KQotCQl0LlJ1bigicmVhZC13cml0ZSBsb2NhbCBkYXRldGltZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb3MgOj0gMAotCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKLQkJCXNvdXJjZSA6PSB0aW1lLkRhdGUoMjAyMiwgNSwgMTAsIDksIDUxLCAwLCAwLCB0aW1lLkxvY2FsKQotCQkJYnVmLCBlcnIgOj0gb2Zmc2V0RGF0ZVRpbWVXcml0ZXIoc291cmNlLCAmYnVmZmVyLCBuaWwpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCXJlcywgZXJyIDo9IG9mZnNldERhdGVUaW1lUmVhZGVyKCZidWYsICZwb3MpCi0JCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJCS8vIElTTyBmb3JtYXQKLQkJCWFzc2VydC5FcXVhbCh0LCBzb3VyY2UuRm9ybWF0KHRpbWUuUkZDMzMzOU5hbm8pLCByZXMuKHRpbWUuVGltZSkuRm9ybWF0KHRpbWUuUkZDMzMzOU5hbm8pKQotCQl9KQotCQl0LlJ1bigicmVhZC13cml0ZSBVVEMgZGF0ZXRpbWUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkJcG9zIDo9IDAKLQkJCXZhciBidWZmZXIgYnl0ZXMuQnVmZmVyCi0JCQlzb3VyY2UgOj0gdGltZS5EYXRlKDIwMjIsIDUsIDEwLCA5LCA1MSwgMCwgMCwgdGltZS5VVEMpCi0JCQlidWYsIGVyciA6PSBvZmZzZXREYXRlVGltZVdyaXRlcihzb3VyY2UsICZidWZmZXIsIG5pbCkKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJcmVzLCBlcnIgOj0gb2Zmc2V0RGF0ZVRpbWVSZWFkZXIoJmJ1ZiwgJnBvcykKLQkJCWFzc2VydC5OaWwodCwgZXJyKQotCQkJLy8gSVNPIGZvcm1hdAotCQkJYXNzZXJ0LkVxdWFsKHQsIHNvdXJjZS5Gb3JtYXQodGltZS5SRkMzMzM5TmFubyksIHJlcy4odGltZS5UaW1lKS5Gb3JtYXQodGltZS5SRkMzMzM5TmFubykpCi0JCX0pCi0JCXQuUnVuKCJyZWFkLXdyaXRlIEhTVCBkYXRldGltZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlwb3MgOj0gMAotCQkJdmFyIGJ1ZmZlciBieXRlcy5CdWZmZXIKLQkJCXNvdXJjZSA6PSB0aW1lLkRhdGUoMjAyMiwgNSwgMTAsIDksIDUxLCAzNCwgMTIzNDU2Nzg5LCBHZXRUaW1lem9uZUZyb21PZmZzZXQoLTM2MDAwKSkKLQkJCWJ1ZiwgZXJyIDo9IG9mZnNldERhdGVUaW1lV3JpdGVyKHNvdXJjZSwgJmJ1ZmZlciwgbmlsKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQlyZXMsIGVyciA6PSBvZmZzZXREYXRlVGltZVJlYWRlcigmYnVmLCAmcG9zKQotCQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCQkvLyBJU08gZm9ybWF0Ci0JCQlhc3NlcnQuRXF1YWwodCwgc291cmNlLkZvcm1hdCh0aW1lLlJGQzMzMzlOYW5vKSwgcmVzLih0aW1lLlRpbWUpLkZvcm1hdCh0aW1lLlJGQzMzMzlOYW5vKSkKLQkJfSkKLQl9KQotCi0JdC5SdW4oImVycm9yIGhhbmRsZSB0ZXN0cyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXQuUnVuKCJ0ZXN0IG1hcCBrZXkgbm90IHN0cmluZyBmYWlsdXJlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCWkgOj0gMAotCQkJYnVmZiA6PSBbXWJ5dGV7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMX0KLQkJCW0sIGVyciA6PSByZWFkTWFwVW5xdWFsaWZpZWQoJmJ1ZmYsICZpKQotCQkJYXNzZXJ0Lk5pbCh0LCBtKQotCQkJYXNzZXJ0LkVxdWFsKHQsIG5ld0Vycm9yKGVycjA3MDNSZWFkTWFwTm9uU3RyaW5nS2V5RXJyb3IsIGludFR5cGUpLCBlcnIpCi0JCX0pCi0JfSkKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2dyYXBoVHJhdmVyc2FsLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWwuZ28KaW5kZXggYmZlNTIxYS4uMDNhYTY4MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWwuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWwuZ28KQEAgLTM2LDEyICszNiwxNSBAQAogCiAvLyBOZXdHcmFwaFRyYXZlcnNhbCBtYWtlIGEgbmV3IEdyYXBoVHJhdmVyc2FsLgogLy8gd2h5IGlzIHRoaXMgdGFraW5nIGEgbm9uIGV4cG9ydGVkIGZpZWxkIGFzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uIC0gcmVtb3ZlIG9yIHJlcGxhY2U/Ci1mdW5jIE5ld0dyYXBoVHJhdmVyc2FsKGdyYXBoICpHcmFwaCwgYnl0ZWNvZGUgKkJ5dGVjb2RlLCByZW1vdGUgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pICpHcmFwaFRyYXZlcnNhbCB7CitmdW5jIE5ld0dyYXBoVHJhdmVyc2FsKGdyYXBoICpHcmFwaCwgZ3JlbWxpbkxhbmcgKkdyZW1saW5MYW5nLCByZW1vdGUgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pICpHcmFwaFRyYXZlcnNhbCB7CisJaWYgZ3JlbWxpbkxhbmcgPT0gbmlsIHsKKwkJZ3JlbWxpbkxhbmcgPSBOZXdHcmVtbGluTGFuZyhuaWwpCisJfQogCWd0IDo9ICZHcmFwaFRyYXZlcnNhbHsKIAkJVHJhdmVyc2FsOiAmVHJhdmVyc2FsewotCQkJZ3JhcGg6ICAgIGdyYXBoLAotCQkJQnl0ZWNvZGU6IGJ5dGVjb2RlLAotCQkJcmVtb3RlOiAgIHJlbW90ZSwKKwkJCWdyYXBoOiAgICAgICBncmFwaCwKKwkJCUdyZW1saW5MYW5nOiBncmVtbGluTGFuZywKKwkJCXJlbW90ZTogICAgICByZW1vdGUsCiAJCX0sCiAJfQogCXJldHVybiBndApAQCAtNDksODI5ICs1Miw4NTQgQEAKIAogLy8gQ2xvbmUgbWFrZSBhIGNvcHkgb2YgYSB0cmF2ZXJzYWwgdGhhdCBpcyByZXNldCBmb3IgaXRlcmF0aW9uLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIENsb25lKCkgKkdyYXBoVHJhdmVyc2FsIHsKLQlyZXR1cm4gTmV3R3JhcGhUcmF2ZXJzYWwoZy5ncmFwaCwgTmV3Qnl0ZWNvZGUoZy5CeXRlY29kZSksIGcucmVtb3RlKQorCXJldHVybiBOZXdHcmFwaFRyYXZlcnNhbChnLmdyYXBoLCBOZXdHcmVtbGluTGFuZyhnLkdyZW1saW5MYW5nKSwgZy5yZW1vdGUpCiB9CiAKIC8vIFYgYWRkcyB0aGUgdiBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBWKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJWIiwgYXJncy4uLikKKwlmb3IgaSA6PSAwOyBpIDwgbGVuKGFyZ3MpOyBpKysgeworCQlpZiB2LCBvayA6PSBhcmdzW2ldLigqVmVydGV4KTsgb2sgeworCQkJYXJnc1tpXSA9IHYuSWQKKwkJfQorCX0KKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIlYiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEUgYWRkcyB0aGUgZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBFKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJFIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIkUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEFkZEUgYWRkcyB0aGUgYWRkRSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBBZGRFKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJhZGRFIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZEUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEFkZFYgYWRkcyB0aGUgYWRkViBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBBZGRWKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJhZGRWIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFkZFYiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEFnZ3JlZ2F0ZSBhZGRzIHRoZSBhZ2dyZWdhdGUgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQWdncmVnYXRlKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJhZ2dyZWdhdGUiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWdncmVnYXRlIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBBbGwgYWRkcyB0aGUgYWxsIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEFsbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiYWxsIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFsbCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQW5kIGFkZHMgdGhlIGFuZCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBBbmQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImFuZCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJhbmQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEFueSBhZGRzIHRoZSBhbnkgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQW55KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJhbnkiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYW55IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBBcyBhZGRzIHRoZSBhcyBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBBcyhhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiYXMiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYXMiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEFzQm9vbCBhZGRzIHRoZSBhc0Jvb2wgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQXNCb29sKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJhc0Jvb2wiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYXNCb29sIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBBc0RhdGUgYWRkcyB0aGUgYXNEYXRlIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEFzRGF0ZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiYXNEYXRlIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFzRGF0ZSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQXNOdW1iZXIgYWRkcyB0aGUgYXNOdW1iZXIgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQXNOdW1iZXIoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImFzTnVtYmVyIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImFzTnVtYmVyIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBBc1N0cmluZyBhZGRzIHRoZSBhc1N0cmluZyBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBBc1N0cmluZyhhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiYXNTdHJpbmciLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYXNTdHJpbmciLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEJhcnJpZXIgYWRkcyB0aGUgYmFycmllciBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBCYXJyaWVyKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7CiAJLy8gRm9yY2UgaW50MzIgc2VyaWFsaXphdGlvbiBmb3IgdmFsaWQgbnVtYmVyIHZhbHVlcyBmb3Igc2VydmVyIGNvbXBhdGliaWxpdHkKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImJhcnJpZXIiLCBpbnQzMkFyZ3MoYXJncykuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJiYXJyaWVyIiwgaW50MzJBcmdzKGFyZ3MpLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEJvdGggYWRkcyB0aGUgYm90aCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBCb3RoKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJib3RoIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImJvdGgiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEJvdGhFIGFkZHMgdGhlIGJvdGhFIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEJvdGhFKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJib3RoRSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJib3RoRSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQm90aFYgYWRkcyB0aGUgYm90aFYgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQm90aFYoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImJvdGhWIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImJvdGhWIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBCcmFuY2ggYWRkcyB0aGUgYnJhbmNoIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEJyYW5jaChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiYnJhbmNoIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImJyYW5jaCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQnkgYWRkcyB0aGUgYnkgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQnkoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImJ5IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImJ5IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBDYWxsIGFkZHMgdGhlIGNhbGwgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQ2FsbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiY2FsbCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJjYWxsIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBDYXAgYWRkcyB0aGUgY2FwIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIENhcChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiY2FwIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImNhcCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQ2hvb3NlIGFkZHMgdGhlIGNob29zZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBDaG9vc2UoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImNob29zZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJjaG9vc2UiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIENvYWxlc2NlIGFkZHMgdGhlIGNvYWxlc2NlIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIENvYWxlc2NlKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJjb2FsZXNjZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJjb2FsZXNjZSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQ29pbiBhZGRzIHRoZSBjb2ludCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBDb2luKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJjb2luIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImNvaW4iLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIENvbWJpbmUgYWRkcyB0aGUgY29tYmluZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBDb21iaW5lKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJjb21iaW5lIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImNvbWJpbmUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIENvbmNhdCBhZGRzIHRoZSBjb25jYXQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQ29uY2F0KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJjb25jYXQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiY29uY2F0IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBDb25qb2luIGFkZHMgdGhlIGNvbmpvaW4gc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQ29uam9pbihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiY29uam9pbiIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJjb25qb2luIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBDb25uZWN0ZWRDb21wb25lbnQgYWRkcyB0aGUgY29ubmVjdGVkQ29tcG9uZW50IHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIENvbm5lY3RlZENvbXBvbmVudChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiY29ubmVjdGVkQ29tcG9uZW50IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImNvbm5lY3RlZENvbXBvbmVudCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gQ29uc3RhbnQgYWRkcyB0aGUgY29uc3RhbnQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgQ29uc3RhbnQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKIAkvLyBGb3JjZSBpbnQzMiBzZXJpYWxpemF0aW9uIGZvciB2YWxpZCBudW1iZXIgdmFsdWVzIGZvciBzZXJ2ZXIgY29tcGF0aWJpbGl0eQotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiY29uc3RhbnQiLCBpbnQzMkFyZ3MoYXJncykuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJjb25zdGFudCIsIGludDMyQXJncyhhcmdzKS4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBDb3VudCBhZGRzIHRoZSBjb3VudCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBDb3VudChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiY291bnQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiY291bnQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEN5Y2xpY1BhdGggYWRkcyB0aGUgY3ljbGljUGF0aCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBDeWNsaWNQYXRoKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJjeWNsaWNQYXRoIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImN5Y2xpY1BhdGgiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIERhdGVBZGQgYWRkcyB0aGUgZGF0ZUFkZCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBEYXRlQWRkKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJkYXRlQWRkIiwgaW50MzJBcmdzKGFyZ3MpLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGF0ZUFkZCIsIGludDMyQXJncyhhcmdzKS4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBEYXRlRGlmZiBhZGRzIHRoZSBkYXRlRGlmZiBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBEYXRlRGlmZihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZGF0ZURpZmYiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGF0ZURpZmYiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIERlZHVwIGFkZHMgdGhlIGRlZHVwIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIERlZHVwKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJkZWR1cCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJkZWR1cCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gRGlmZmVyZW5jZSBhZGRzIHRoZSBkaWZmZXJlbmNlIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIERpZmZlcmVuY2UoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImRpZmZlcmVuY2UiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGlmZmVyZW5jZSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gRGlzY2FyZCBhZGRzIHRoZSBkaXNjYXJkIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIERpc2NhcmQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImRpc2NhcmQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZGlzY2FyZCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gRGlzanVuY3QgYWRkcyB0aGUgZGlzanVuY3Qgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgRGlzanVuY3QoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImRpc2p1bmN0IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImRpc2p1bmN0IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBEcm9wIGFkZHMgdGhlIGRyb3Agc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgRHJvcChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZHJvcCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJkcm9wIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBFbGVtZW50IGFkZHMgdGhlIGVsZW1lbnQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgRWxlbWVudChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZWxlbWVudCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJlbGVtZW50IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBFbGVtZW50TWFwIGFkZHMgdGhlIGVsZW1lbnRNYXAgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgRWxlbWVudE1hcChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZWxlbWVudE1hcCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJlbGVtZW50TWFwIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBFbWl0IGFkZHMgdGhlIGVtaXQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgRW1pdChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZW1pdCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJlbWl0IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBGYWlsIGFkZHMgdGhlIGZhaWwgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgRmFpbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZmFpbCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJmYWlsIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBGaWx0ZXIgYWRkcyB0aGUgZmlsdGVyIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEZpbHRlcihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZmlsdGVyIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImZpbHRlciIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gRmxhdE1hcCBhZGRzIHRoZSBmbGF0TWFwIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEZsYXRNYXAoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImZsYXRNYXAiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZmxhdE1hcCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gRm9sZCBhZGRzIHRoZSBmb2xkIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEZvbGQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImZvbGQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZm9sZCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gRm9ybWF0IGFkZHMgdGhlIGZvcm1hdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBGb3JtYXQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImZvcm1hdCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJmb3JtYXQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEZyb20gYWRkcyB0aGUgZnJvbSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBGcm9tKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJmcm9tIiwgYXJncy4uLikKKwlmb3IgaSA6PSAwOyBpIDwgbGVuKGFyZ3MpOyBpKysgeworCQlpZiB2LCBvayA6PSBhcmdzW2ldLigqVmVydGV4KTsgb2sgeworCQkJYXJnc1tpXSA9IFRfXy5WKHYuSWQpCisJCX0KKwl9CisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJmcm9tIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBHcm91cCBhZGRzIHRoZSBncm91cCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBHcm91cChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiZ3JvdXAiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiZ3JvdXAiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEdyb3VwQ291bnQgYWRkcyB0aGUgZ3JvdXBDb3VudCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBHcm91cENvdW50KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJncm91cENvdW50IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImdyb3VwQ291bnQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEhhcyBhZGRzIHRoZSBoYXMgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgSGFzKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJoYXMiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBIYXNJZCBhZGRzIHRoZSBoYXNJZCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBIYXNJZChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiaGFzSWQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzSWQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEhhc0tleSBhZGRzIHRoZSBoYXNLZXkgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgSGFzS2V5KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJoYXNLZXkiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzS2V5IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBIYXNMYWJlbCBhZGRzIHRoZSBoYXNMYWJlbCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBIYXNMYWJlbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiaGFzTGFiZWwiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzTGFiZWwiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEhhc05vdCBhZGRzIHRoZSBoYXNOb3Qgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgSGFzTm90KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJoYXNOb3QiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzTm90IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBIYXNWYWx1ZSBhZGRzIHRoZSBoYXNWYWx1ZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBIYXNWYWx1ZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiaGFzVmFsdWUiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgiaGFzVmFsdWUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIElkIGFkZHMgdGhlIGlkIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIElkKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJpZCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJpZCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gSWRlbnRpdHkgYWRkcyB0aGUgaWRlbnRpdHkgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgSWRlbnRpdHkoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImlkZW50aXR5IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImlkZW50aXR5IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBJbkUgYWRkcyB0aGUgaW5FIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEluRShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiaW5FIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImluRSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gSW5WIGFkZHMgdGhlIGluViBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBJblYoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImluViIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJpblYiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIEluIGFkZHMgdGhlIGluIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEluKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJpbiIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJpbiIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gSW5kZXggYWRkcyB0aGUgaW5kZXggc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgSW5kZXgoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImluZGV4IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImluZGV4IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBJbmplY3QgYWRkcyB0aGUgaW5qZWN0IHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEluamVjdChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCS8vIEZvcmNlIGludDMyIHNlcmlhbGl6YXRpb24gZm9yIHZhbGlkIG51bWJlciB2YWx1ZXMgZm9yIHNlcnZlciBjb21wYXRpYmlsaXR5Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJpbmplY3QiLCBpbnQzMkFyZ3MoYXJncykuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJpbmplY3QiLCBpbnQzMkFyZ3MoYXJncykuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gSW50ZXJzZWN0IGFkZHMgdGhlIGludGVyc2VjdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBJbnRlcnNlY3QoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKIAkvLyBGb3JjZSBpbnQzMiBzZXJpYWxpemF0aW9uIGZvciB2YWxpZCBudW1iZXIgdmFsdWVzIGZvciBzZXJ2ZXIgY29tcGF0aWJpbGl0eQotCWcuQnl0ZWNvZGUuQWRkU3RlcCgiaW50ZXJzZWN0IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImludGVyc2VjdCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gSXMgYWRkcyB0aGUgaXMgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgSXMoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImlzIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImlzIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBLZXkgYWRkcyB0aGUga2V5IHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIEtleShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgia2V5IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImtleSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTGFiZWwgYWRkcyB0aGUgbGFiZWwgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTGFiZWwoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImxhYmVsIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImxhYmVsIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBMZW5ndGggYWRkcyB0aGUgbGVuZ3RoIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIExlbmd0aChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibGVuZ3RoIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImxlbmd0aCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTGltaXQgYWRkcyB0aGUgbGltaXQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTGltaXQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImxpbWl0IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImxpbWl0IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBMb2NhbCBhZGRzIHRoZSBsb2NhbCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBMb2NhbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibG9jYWwiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgibG9jYWwiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIExvb3BzIGFkZHMgdGhlIGxvb3BzIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIExvb3BzKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJsb29wcyIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJsb29wcyIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTFRyaW0gYWRkcyB0aGUgbFRyaW0gc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTFRyaW0oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoImxUcmltIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoImxUcmltIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBNYXAgYWRkcyB0aGUgbWFwIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE1hcChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibWFwIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm1hcCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTWF0Y2ggYWRkcyB0aGUgbWF0Y2ggc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTWF0Y2goYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm1hdGNoIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm1hdGNoIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBNYXRoIGFkZHMgdGhlIG1hdGggc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTWF0aChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibWF0aCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJtYXRoIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBNYXggYWRkcyB0aGUgbWF4IHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE1heChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibWF4IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm1heCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTWVhbiBhZGRzIHRoZSBtZWFuIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE1lYW4oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm1lYW4iLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVhbiIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTWVyZ2UgYWRkcyB0aGUgbWVyZ2Ugc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTWVyZ2UoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm1lcmdlIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm1lcmdlIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBNZXJnZUUgYWRkcyB0aGUgbWVyZ2VFIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE1lcmdlRShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibWVyZ2VFIiwgYXJncy4uLikKKwlpZiBsZW4oYXJncykgIT0gMCB7CisJCWlmIG0sIG9rIDo9IGFyZ3NbMF0uKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSk7IG9rIHsKKwkJCWlmIHYsIG9rIDo9IG1bRGlyZWN0aW9uLk91dF0uKCpWZXJ0ZXgpOyBvayB7CisJCQkJbVtEaXJlY3Rpb24uT3V0XSA9IHYuSWQKKwkJCX0KKwkJCWlmIHYsIG9rIDo9IG1bRGlyZWN0aW9uLkluXS4oKlZlcnRleCk7IG9rIHsKKwkJCQltW0RpcmVjdGlvbi5Jbl0gPSB2LklkCisJCQl9CisJCX0KKwl9CisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJtZXJnZUUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIE1lcmdlViBhZGRzIHRoZSBtZXJnZUUgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgTWVyZ2VWKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJtZXJnZVYiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVyZ2VWIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBNaW4gYWRkcyB0aGUgbWluIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE1pbihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgibWluIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm1pbiIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTm9uZSBhZGRzIHRoZSBub25lIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE5vbmUoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm5vbmUiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgibm9uZSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gTm90IGFkZHMgdGhlIG5vdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBOb3QoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm5vdCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJub3QiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIE9wdGlvbiBhZGRzIHRoZSBvcHRpb24gc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgT3B0aW9uKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJvcHRpb24iLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgib3B0aW9uIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBPcHRpb25hbCBhZGRzIHRoZSBvcHRpb25hbCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBPcHRpb25hbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgib3B0aW9uYWwiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgib3B0aW9uYWwiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIE9yIGFkZHMgdGhlIG9yIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE9yKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJvciIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJvciIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gT3JkZXIgYWRkcyB0aGUgb3JkZXIgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgT3JkZXIoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm9yZGVyIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm9yZGVyIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBPdGhlclYgYWRkcyB0aGUgb3RoZXJWIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIE90aGVyVihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgib3RoZXJWIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm90aGVyViIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gT3V0IGFkZHMgdGhlIG91dCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBPdXQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIm91dCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJvdXQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIE91dEUgYWRkcyB0aGUgb3V0RSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBPdXRFKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJvdXRFIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm91dEUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIE91dFYgYWRkcyB0aGUgb3V0ViBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBPdXRWKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJvdXRWIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIm91dFYiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFBhZ2VSYW5rIGFkZHMgdGhlIHBhZ2VSYW5rIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFBhZ2VSYW5rKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwYWdlUmFuayIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJwYWdlUmFuayIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gUGF0aCBhZGRzIHRoZSBwYXRoIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFBhdGgoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInBhdGgiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgicGF0aCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gUGVlclByZXNzdXJlIGFkZHMgdGhlIHBlZXJQcmVzc3VyZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBQZWVyUHJlc3N1cmUoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInBlZXJQcmVzc3VyZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJwZWVyUHJlc3N1cmUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFByb2R1Y3QgYWRkcyB0aGUgcHJvZHVjdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBQcm9kdWN0KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwcm9kdWN0IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2R1Y3QiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFByb2ZpbGUgYWRkcyB0aGUgcHJvZmlsZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBQcm9maWxlKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwcm9maWxlIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2ZpbGUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFByb2dyYW0gYWRkcyB0aGUgcHJvZ3JhbSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBQcm9ncmFtKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwcm9ncmFtIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2dyYW0iLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFByb2plY3QgYWRkcyB0aGUgcHJvamVjdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBQcm9qZWN0KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwcm9qZWN0IiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInByb2plY3QiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFByb3BlcnRpZXMgYWRkcyB0aGUgcHJvcGVydGllcyBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBQcm9wZXJ0aWVzKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwcm9wZXJ0aWVzIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInByb3BlcnRpZXMiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFByb3BlcnR5IGFkZHMgdGhlIHByb3BlcnR5IHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFByb3BlcnR5KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJwcm9wZXJ0eSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJwcm9wZXJ0eSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gUHJvcGVydHlNYXAgYWRkcyB0aGUgcHJvcGVydHlNYXAgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgUHJvcGVydHlNYXAoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInByb3BlcnR5TWFwIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInByb3BlcnR5TWFwIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBSYW5nZSBhZGRzIHRoZSByYW5nZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBSYW5nZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgicmFuZ2UiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgicmFuZ2UiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFJlYWQgYWRkcyB0aGUgcmVhZCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBSZWFkKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJyZWFkIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInJlYWQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFJlcGVhdCBhZGRzIHRoZSByZXBlYXQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgUmVwZWF0KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJyZXBlYXQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgicmVwZWF0IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBSZXBsYWNlIGFkZHMgdGhlIHJlcGxhY2Ugc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgUmVwbGFjZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgicmVwbGFjZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJyZXBsYWNlIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBSZXZlcnNlIGFkZHMgdGhlIHJldmVyc2Ugc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgUmV2ZXJzZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgicmV2ZXJzZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJyZXZlcnNlIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBSVHJpbSBhZGRzIHRoZSByZXBlYXQgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgUlRyaW0oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInJUcmltIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInJUcmltIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTYWNrIGFkZHMgdGhlIHNhY2sgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgU2FjayhhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgic2FjayIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJzYWNrIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTYW1wbGUgYWRkcyB0aGUgc2FtcGxlIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFNhbXBsZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCS8vIEZvcmNlIGludDMyIHNlcmlhbGl6YXRpb24gZm9yIHZhbGlkIG51bWJlciB2YWx1ZXMgZm9yIHNlcnZlciBjb21wYXRpYmlsaXR5Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJzYW1wbGUiLCBpbnQzMkFyZ3MoYXJncykuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJzYW1wbGUiLCBpbnQzMkFyZ3MoYXJncykuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gU2VsZWN0IGFkZHMgdGhlIHNlbGVjdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBTZWxlY3QoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInNlbGVjdCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJzZWxlY3QiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFNob3J0ZXN0UGF0aCBhZGRzIHRoZSBzaG9ydGVzdFBhdGggc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgU2hvcnRlc3RQYXRoKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJzaG9ydGVzdFBhdGgiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgic2hvcnRlc3RQYXRoIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTaWRlRWZmZWN0IGFkZHMgdGhlIHNpZGVFZmZlY3Qgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgU2lkZUVmZmVjdChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgic2lkZUVmZmVjdCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJzaWRlRWZmZWN0IiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTaW1wbGVQYXRoIGFkZHMgdGhlIHNpbXBsZVBhdGggc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgU2ltcGxlUGF0aChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgic2ltcGxlUGF0aCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJzaW1wbGVQYXRoIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTa2lwIGFkZHMgdGhlIHNraXAgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgU2tpcChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgic2tpcCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJza2lwIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTcGxpdCBhZGRzIHRoZSBzcGxpdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBTcGxpdChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgic3BsaXQiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgic3BsaXQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFN1YmdyYXBoIGFkZHMgdGhlIHN1YmdyYXBoIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFN1YmdyYXBoKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJzdWJncmFwaCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJzdWJncmFwaCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gU3Vic3RyaW5nIGFkZHMgdGhlIHN1YnN0cmluZyBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBTdWJzdHJpbmcoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInN1YnN0cmluZyIsIGludDMyQXJncyhhcmdzKS4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInN1YnN0cmluZyIsIGludDMyQXJncyhhcmdzKS4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBTdW0gYWRkcyB0aGUgc3VtIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFN1bShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgic3VtIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInN1bSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gVGFpbCBhZGRzIHRoZSB0YWlsIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFRhaWwoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInRhaWwiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgidGFpbCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gVGltZUxpbWl0IGFkZHMgdGhlIHRpbWVMaW1pdCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBUaW1lTGltaXQoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInRpbWVMaW1pdCIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJ0aW1lTGltaXQiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFRpbWVzIGFkZHMgdGhlIHRpbWVzIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFRpbWVzKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7CiAJLy8gRm9yY2UgaW50MzIgc2VyaWFsaXphdGlvbiBmb3IgdmFsaWQgbnVtYmVyIHZhbHVlcyBmb3Igc2VydmVyIGNvbXBhdGliaWxpdHkKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInRpbWVzIiwgaW50MzJBcmdzKGFyZ3MpLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgidGltZXMiLCBpbnQzMkFyZ3MoYXJncykuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gVG8gYWRkcyB0aGUgdG8gc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgVG8oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInRvIiwgYXJncy4uLikKKwlmb3IgaSA6PSAwOyBpIDwgbGVuKGFyZ3MpOyBpKysgeworCQlpZiB2LCBvayA6PSBhcmdzW2ldLigqVmVydGV4KTsgb2sgeworCQkJYXJnc1tpXSA9IFRfXy5WKHYuSWQpCisJCX0KKwl9CisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJ0byIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gVG9FIGFkZHMgdGhlIHRvRSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBUb0UoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInRvRSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJ0b0UiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFRvTG93ZXIgYWRkcyB0aGUgdG9Mb3dlciBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBUb0xvd2VyKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJ0b0xvd2VyIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInRvTG93ZXIiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFRvVXBwZXIgYWRkcyB0aGUgdG9VcHBlciBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBUb1VwcGVyKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJ0b1VwcGVyIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInRvVXBwZXIiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFRvViBhZGRzIHRoZSB0b1Ygc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgVG9WKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJ0b1YiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgidG9WIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBUcmVlIGFkZHMgdGhlIHRyZWUgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgVHJlZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgidHJlZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJ0cmVlIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBUcmltIGFkZHMgdGhlIHRyZWUgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgVHJpbShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgidHJpbSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJ0cmltIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBVbmZvbGQgYWRkcyB0aGUgdW5mb2xkIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFVuZm9sZChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgidW5mb2xkIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInVuZm9sZCIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gVW5pb24gYWRkcyB0aGUgdW5pb24gc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgVW5pb24oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInVuaW9uIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInVuaW9uIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBVbnRpbCBhZGRzIHRoZSB1bnRpbCBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBVbnRpbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgidW50aWwiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgidW50aWwiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKIC8vIFZhbHVlIGFkZHMgdGhlIHZhbHVlIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFZhbHVlKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJ2YWx1ZSIsIGFyZ3MuLi4pCisJZy5HcmVtbGluTGFuZy5BZGRTdGVwKCJ2YWx1ZSIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gVmFsdWVNYXAgYWRkcyB0aGUgdmFsdWVNYXAgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgVmFsdWVNYXAoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoInZhbHVlTWFwIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInZhbHVlTWFwIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBWYWx1ZXMgYWRkcyB0aGUgdmFsdWVzIHN0ZXAgdG8gdGhlIEdyYXBoVHJhdmVyc2FsLgogZnVuYyAoZyAqR3JhcGhUcmF2ZXJzYWwpIFZhbHVlcyhhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgidmFsdWVzIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoInZhbHVlcyIsIGFyZ3MuLi4pCiAJcmV0dXJuIGcKIH0KIAogLy8gV2hlcmUgYWRkcyB0aGUgd2hlcmUgc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgV2hlcmUoYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKLQlnLkJ5dGVjb2RlLkFkZFN0ZXAoIndoZXJlIiwgYXJncy4uLikKKwlnLkdyZW1saW5MYW5nLkFkZFN0ZXAoIndoZXJlIiwgYXJncy4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBXaXRoIGFkZHMgdGhlIHdpdGggc3RlcCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuCiBmdW5jIChnICpHcmFwaFRyYXZlcnNhbCkgV2l0aChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCS8vIEZvcmNlIGludDMyIHNlcmlhbGl6YXRpb24gZm9yIHZhbGlkIG51bWJlciB2YWx1ZXMgZm9yIHNlcnZlciBjb21wYXRpYmlsaXR5Ci0JZy5CeXRlY29kZS5BZGRTdGVwKCJ3aXRoIiwgaW50MzJBcmdzKGFyZ3MpLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgid2l0aCIsIGludDMyQXJncyhhcmdzKS4uLikKIAlyZXR1cm4gZwogfQogCiAvLyBXcml0ZSBhZGRzIHRoZSB3cml0ZSBzdGVwIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC4KIGZ1bmMgKGcgKkdyYXBoVHJhdmVyc2FsKSBXcml0ZShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewotCWcuQnl0ZWNvZGUuQWRkU3RlcCgid3JpdGUiLCBhcmdzLi4uKQorCWcuR3JlbWxpbkxhbmcuQWRkU3RlcCgid3JpdGUiLCBhcmdzLi4uKQogCXJldHVybiBnCiB9CiAKQEAgLTkwNCwxMSArOTMyLDEwIEBACiB9CiAKIHR5cGUgVHJhbnNhY3Rpb24gc3RydWN0IHsKLQlnICAgICAgICAgICAgICAgICAgICAgICpHcmFwaFRyYXZlcnNhbFNvdXJjZQotCXNlc3Npb25CYXNlZENvbm5lY3Rpb24gKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24KLQlyZW1vdGVDb25uZWN0aW9uICAgICAgICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uCi0JaXNPcGVuICAgICAgICAgICAgICAgICBib29sCi0JbXV0ZXggICAgICAgICAgICAgICAgICBzeW5jLk11dGV4CisJZyAgICAgICAgICAgICAgICAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UKKwlyZW1vdGVDb25uZWN0aW9uICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uCisJaXNPcGVuICAgICAgICAgICBib29sCisJbXV0ZXggICAgICAgICAgICBzeW5jLk11dGV4CiB9CiAKIGZ1bmMgKHQgKlRyYW5zYWN0aW9uKSBCZWdpbigpICgqR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIGVycm9yKSB7CkBAIC05MTksMTcgKzk0Niw5IEBACiAJCXJldHVybiBuaWwsIGVycgogCX0KIAotCXNjLCBlcnIgOj0gdC5yZW1vdGVDb25uZWN0aW9uLkNyZWF0ZVNlc3Npb24oKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JdC5zZXNzaW9uQmFzZWRDb25uZWN0aW9uID0gc2MKLQl0LmlzT3BlbiA9IHRydWUKLQogCWd0cyA6PSAmR3JhcGhUcmF2ZXJzYWxTb3VyY2V7Ci0JCWdyYXBoOiAgICAgICAgICAgIHQuZy5ncmFwaCwKLQkJYnl0ZWNvZGU6ICAgICAgICAgdC5nLmJ5dGVjb2RlLAotCQlyZW1vdGVDb25uZWN0aW9uOiB0LnNlc3Npb25CYXNlZENvbm5lY3Rpb259CisJCWdyYXBoOiAgICAgICB0LmcuZ3JhcGgsCisJCWdyZW1saW5MYW5nOiB0LmcuZ3JlbWxpbkxhbmd9CiAJcmV0dXJuIGd0cywgbmlsCiB9CiAKQEAgLTk0MSw3ICs5NjAsOCBAQAogCQlyZXR1cm4gZXJyCiAJfQogCi0JcmV0dXJuIHQuY2xvc2VTZXNzaW9uKHQuc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5yb2xsYmFjaygpKQorCXQuY2xvc2UoKQorCXJldHVybiBuaWwKIH0KIAogZnVuYyAodCAqVHJhbnNhY3Rpb24pIENvbW1pdCgpIGVycm9yIHsKQEAgLTk1Miw3ICs5NzIsOCBAQAogCQlyZXR1cm4gZXJyCiAJfQogCi0JcmV0dXJuIHQuY2xvc2VTZXNzaW9uKHQuc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5jb21taXQoKSkKKwl0LmNsb3NlKCkKKwlyZXR1cm4gbmlsCiB9CiAKIGZ1bmMgKHQgKlRyYW5zYWN0aW9uKSBDbG9zZSgpIGVycm9yIHsKQEAgLTk2MywxMyArOTg0LDExIEBACiAJCXJldHVybiBlcnIKIAl9CiAKLQlyZXR1cm4gdC5jbG9zZVNlc3Npb24obmlsLCBuaWwpCisJdC5jbG9zZSgpCisJcmV0dXJuIG5pbAogfQogCiBmdW5jICh0ICpUcmFuc2FjdGlvbikgSXNPcGVuKCkgYm9vbCB7Ci0JaWYgdC5zZXNzaW9uQmFzZWRDb25uZWN0aW9uICE9IG5pbCAmJiB0LnNlc3Npb25CYXNlZENvbm5lY3Rpb24uaXNDbG9zZWQgewotCQl0LmlzT3BlbiA9IGZhbHNlCi0JfQogCXJldHVybiB0LmlzT3BlbgogfQogCkBAIC05ODAsMzEgKzk5OSw2IEBACiAJcmV0dXJuIG5pbAogfQogCi1mdW5jICh0ICpUcmFuc2FjdGlvbikgY2xvc2VTZXNzaW9uKHJzIFJlc3VsdFNldCwgZXJyIGVycm9yKSBlcnJvciB7Ci0JZGVmZXIgdC5jbG9zZUNvbm5lY3Rpb24oKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCWlmIHJzID09IG5pbCB7Ci0JCXJldHVybiBuaWwKLQl9Ci0JXywgZSA6PSBycy5BbGwoKQotCXJldHVybiBlCi19Ci0KLWZ1bmMgKHQgKlRyYW5zYWN0aW9uKSBjbG9zZUNvbm5lY3Rpb24oKSB7Ci0JdC5zZXNzaW9uQmFzZWRDb25uZWN0aW9uLkNsb3NlKCkKLQotCS8vIHJlbW92ZSBzZXNzaW9uIGJhc2VkIGNvbm5lY3Rpb24gZnJvbSBzcGF3bmVkU2Vzc2lvbnMKLQljb25uZWN0aW9uQ291bnQgOj0gbGVuKHQucmVtb3RlQ29ubmVjdGlvbi5zcGF3bmVkU2Vzc2lvbnMpCi0JaWYgY29ubmVjdGlvbkNvdW50ID4gMCB7Ci0JCWZvciBpLCB4IDo9IHJhbmdlIHQucmVtb3RlQ29ubmVjdGlvbi5zcGF3bmVkU2Vzc2lvbnMgewotCQkJaWYgeCA9PSB0LnNlc3Npb25CYXNlZENvbm5lY3Rpb24gewotCQkJCXQucmVtb3RlQ29ubmVjdGlvbi5zcGF3bmVkU2Vzc2lvbnNbaV0gPSB0LnJlbW90ZUNvbm5lY3Rpb24uc3Bhd25lZFNlc3Npb25zW2Nvbm5lY3Rpb25Db3VudC0xXQotCQkJCXQucmVtb3RlQ29ubmVjdGlvbi5zcGF3bmVkU2Vzc2lvbnMgPSB0LnJlbW90ZUNvbm5lY3Rpb24uc3Bhd25lZFNlc3Npb25zWzpjb25uZWN0aW9uQ291bnQtMV0KLQkJCQlicmVhawotCQkJfQotCQl9Ci0JfQorZnVuYyAodCAqVHJhbnNhY3Rpb24pIGNsb3NlKCkgewogCXQuaXNPcGVuID0gZmFsc2UKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2dyYXBoVHJhdmVyc2FsU291cmNlLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWxTb3VyY2UuZ28KaW5kZXggNjhlYTEzZS4uYzU1MGJkOSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWxTb3VyY2UuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWxTb3VyY2UuZ28KQEAgLTMwLDcgKzMwLDcgQEAKIC8vIEdyYXBoVHJhdmVyc2FsU291cmNlIGNhbiBiZSB1c2VkIHRvIHN0YXJ0IEdyYXBoVHJhdmVyc2FsLgogdHlwZSBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzdHJ1Y3QgewogCWdyYXBoICAgICAgICAgICAgKkdyYXBoCi0JYnl0ZWNvZGUgICAgICAgICAqQnl0ZWNvZGUKKwlncmVtbGluTGFuZyAgICAgICpHcmVtbGluTGFuZwogCXJlbW90ZUNvbm5lY3Rpb24gKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24KIAlncmFwaFRyYXZlcnNhbCAgICpHcmFwaFRyYXZlcnNhbAogfQpAQCAtMzksMzQgKzM5LDMyIEBACiAvLyBHcmFwaCBhbmQgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBjYW4gYmUgc2V0IHRvIG5pbCBhcyB2YWxpZCBkZWZhdWx0IHZhbHVlcy4KIGZ1bmMgTmV3R3JhcGhUcmF2ZXJzYWxTb3VyY2UoZ3JhcGggKkdyYXBoLCByZW1vdGVDb25uZWN0aW9uICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uLAogCXRyYXZlcnNhbFN0cmF0ZWdpZXMgLi4uVHJhdmVyc2FsU3RyYXRlZ3kpICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7Ci0JY29udmVydGVkQXJncyA6PSBjb252ZXJ0U3RyYXRlZ3lWYXJhcmdzKHRyYXZlcnNhbFN0cmF0ZWdpZXMpCi0JYmMgOj0gTmV3Qnl0ZWNvZGUobmlsKQotCWJjLkFkZFNvdXJjZSgid2l0aFN0cmF0ZWdpZXMiLCBjb252ZXJ0ZWRBcmdzLi4uKQotCXJldHVybiAmR3JhcGhUcmF2ZXJzYWxTb3VyY2V7Z3JhcGg6IGdyYXBoLCBieXRlY29kZTogYmMsIHJlbW90ZUNvbm5lY3Rpb246IHJlbW90ZUNvbm5lY3Rpb259CisJLy8gVE9ETzogcmV2aXNpdCB3aGVuIHVwZGF0aW5nIHN0cmF0ZWdpZXMKKwlnbCA6PSBOZXdHcmVtbGluTGFuZyhuaWwpCisJcmV0dXJuICZHcmFwaFRyYXZlcnNhbFNvdXJjZXtncmFwaDogZ3JhcGgsIGdyZW1saW5MYW5nOiBnbCwgcmVtb3RlQ29ubmVjdGlvbjogcmVtb3RlQ29ubmVjdGlvbn0KIH0KIAogLy8gTmV3RGVmYXVsdEdyYXBoVHJhdmVyc2FsU291cmNlIGNyZWF0ZXMgYSBuZXcgZ3JhcGggR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugd2l0aG91dCBhIGdyYXBoLCBzdHJhdGVneSwgb3IgZXhpc3RpbmcgdHJhdmVyc2FsLgogZnVuYyBOZXdEZWZhdWx0R3JhcGhUcmF2ZXJzYWxTb3VyY2UoKSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgewotCXJldHVybiAmR3JhcGhUcmF2ZXJzYWxTb3VyY2V7Z3JhcGg6IG5pbCwgYnl0ZWNvZGU6IE5ld0J5dGVjb2RlKG5pbCksIHJlbW90ZUNvbm5lY3Rpb246IG5pbH0KKwlyZXR1cm4gJkdyYXBoVHJhdmVyc2FsU291cmNle2dyYXBoOiBuaWwsIGdyZW1saW5MYW5nOiBOZXdHcmVtbGluTGFuZyhuaWwpLCByZW1vdGVDb25uZWN0aW9uOiBuaWx9CiB9CiAKLS8vIEdldEJ5dGVjb2RlIGdldHMgdGhlIHRyYXZlcnNhbCBCeXRlY29kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBncmFwaCB0cmF2ZXJzYWwgc291cmNlLgotZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgR2V0Qnl0ZWNvZGUoKSAqQnl0ZWNvZGUgewotCXJldHVybiBndHMuYnl0ZWNvZGUKK2Z1bmMgKGd0cyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIEdldEdyZW1saW5MYW5nKCkgKkdyZW1saW5MYW5nIHsKKwlyZXR1cm4gZ3RzLmdyZW1saW5MYW5nCiB9CiAKIC8vIEdldEdyYXBoVHJhdmVyc2FsIGdldHMgdGhlIGdyYXBoIHRyYXZlcnNhbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBncmFwaCB0cmF2ZXJzYWwgc291cmNlLgogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgR2V0R3JhcGhUcmF2ZXJzYWwoKSAqR3JhcGhUcmF2ZXJzYWwgewotCXJldHVybiBOZXdHcmFwaFRyYXZlcnNhbChndHMuZ3JhcGgsIE5ld0J5dGVjb2RlKGd0cy5ieXRlY29kZSksIGd0cy5yZW1vdGVDb25uZWN0aW9uKQorCXJldHVybiBOZXdHcmFwaFRyYXZlcnNhbChndHMuZ3JhcGgsIE5ld0dyZW1saW5MYW5nKGd0cy5ncmVtbGluTGFuZyksIGd0cy5yZW1vdGVDb25uZWN0aW9uKQogfQogCiBmdW5jIChndHMgKkdyYXBoVHJhdmVyc2FsU291cmNlKSBjbG9uZSgpICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7Ci0JcmV0dXJuIGNsb25lR3JhcGhUcmF2ZXJzYWxTb3VyY2UoZ3RzLmdyYXBoLCBOZXdCeXRlY29kZShndHMuYnl0ZWNvZGUpLCBndHMucmVtb3RlQ29ubmVjdGlvbikKKwlyZXR1cm4gY2xvbmVHcmFwaFRyYXZlcnNhbFNvdXJjZShndHMuZ3JhcGgsIE5ld0dyZW1saW5MYW5nKGd0cy5ncmVtbGluTGFuZyksIGd0cy5yZW1vdGVDb25uZWN0aW9uKQogfQogCi1mdW5jIGNsb25lR3JhcGhUcmF2ZXJzYWxTb3VyY2UoZ3JhcGggKkdyYXBoLCBiYyAqQnl0ZWNvZGUsIHJlbW90ZUNvbm5lY3Rpb24gKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CitmdW5jIGNsb25lR3JhcGhUcmF2ZXJzYWxTb3VyY2UoZ3JhcGggKkdyYXBoLCBnbCAqR3JlbWxpbkxhbmcsIHJlbW90ZUNvbm5lY3Rpb24gKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24pICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CiAJcmV0dXJuICZHcmFwaFRyYXZlcnNhbFNvdXJjZXtncmFwaDogZ3JhcGgsCi0JCWJ5dGVjb2RlOiAgICAgICAgIGJjLAorCQlncmVtbGluTGFuZzogICAgICBnbCwKIAkJcmVtb3RlQ29ubmVjdGlvbjogcmVtb3RlQ29ubmVjdGlvbiwKIAl9CiB9CkBAIC03NCwxNyArNzIsMTQgQEAKIC8vIFdpdGhCdWxrIGFsbG93cyBmb3IgY29udHJvbCBvZiBidWxraW5nIG9wZXJhdGlvbnMuCiBmdW5jIChndHMgKkdyYXBoVHJhdmVyc2FsU291cmNlKSBXaXRoQnVsayhhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgewogCXNvdXJjZSA6PSBndHMuY2xvbmUoKQotCWVyciA6PSBzb3VyY2UuYnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoQnVsayIsIGFyZ3MuLi4pCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwKLQl9CisJc291cmNlLmdyZW1saW5MYW5nLkFkZFNvdXJjZSgid2l0aEJ1bGsiLCBhcmdzLi4uKQogCXJldHVybiBzb3VyY2UKIH0KIAogLy8gV2l0aFBhdGggYWRkcyBhIHBhdGggdG8gYmUgdXNlZCB0aHJvdWdob3V0IHRoZSBsaWZlIG9mIGEgc3Bhd25lZCBUcmF2ZXJzYWwuCiBmdW5jIChndHMgKkdyYXBoVHJhdmVyc2FsU291cmNlKSBXaXRoUGF0aChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgewogCXNvdXJjZSA6PSBndHMuY2xvbmUoKQotCXNvdXJjZS5ieXRlY29kZS5BZGRTb3VyY2UoIndpdGhQYXRoIiwgYXJncy4uLikKKwlzb3VyY2UuZ3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoUGF0aCIsIGFyZ3MuLi4pCiAJcmV0dXJuIHNvdXJjZQogfQogCkBAIC05MiwxNCArODcsMTQgQEAKIGZ1bmMgKGd0cyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIFdpdGhTYWNrKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CiAJc291cmNlIDo9IGd0cy5jbG9uZSgpCiAJLy8gRm9yY2UgaW50MzIgc2VyaWFsaXphdGlvbiBmb3IgdmFsaWQgbnVtYmVyIHZhbHVlcyBmb3Igc2VydmVyIGNvbXBhdGliaWxpdHkKLQlzb3VyY2UuYnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU2FjayIsIGludDMyQXJncyhhcmdzKS4uLikKKwlzb3VyY2UuZ3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRoU2FjayIsIGludDMyQXJncyhhcmdzKS4uLikKIAlyZXR1cm4gc291cmNlCiB9CiAKIC8vIFdpdGhTaWRlRWZmZWN0IGFkZHMgYSBzaWRlIGVmZmVjdCB0byBiZSB1c2VkIHRocm91Z2hvdXQgdGhlIGxpZmUgb2YgYSBzcGF3bmVkIFRyYXZlcnNhbC4KIGZ1bmMgKGd0cyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIFdpdGhTaWRlRWZmZWN0KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CiAJc291cmNlIDo9IGd0cy5jbG9uZSgpCi0Jc291cmNlLmJ5dGVjb2RlLkFkZFNvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCBhcmdzLi4uKQorCXNvdXJjZS5ncmVtbGluTGFuZy5BZGRTb3VyY2UoIndpdGhTaWRlRWZmZWN0IiwgYXJncy4uLikKIAlyZXR1cm4gc291cmNlCiB9CiAKQEAgLTEwNyw3ICsxMDIsNyBAQAogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgV2l0aFN0cmF0ZWdpZXMoYXJncyAuLi5UcmF2ZXJzYWxTdHJhdGVneSkgKkdyYXBoVHJhdmVyc2FsU291cmNlIHsKIAljb252ZXJ0ZWRBcmdzIDo9IGNvbnZlcnRTdHJhdGVneVZhcmFyZ3MoYXJncykKIAlzb3VyY2UgOj0gZ3RzLmNsb25lKCkKLQlzb3VyY2UuYnl0ZWNvZGUuQWRkU291cmNlKCJ3aXRoU3RyYXRlZ2llcyIsIGNvbnZlcnRlZEFyZ3MuLi4pCisJc291cmNlLmdyZW1saW5MYW5nLkFkZFNvdXJjZSgid2l0aFN0cmF0ZWdpZXMiLCBjb252ZXJ0ZWRBcmdzLi4uKQogCXJldHVybiBzb3VyY2UKIH0KIApAQCAtMTE1LDcgKzExMCw3IEBACiBmdW5jIChndHMgKkdyYXBoVHJhdmVyc2FsU291cmNlKSBXaXRob3V0U3RyYXRlZ2llcyhhcmdzIC4uLlRyYXZlcnNhbFN0cmF0ZWd5KSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgewogCWNvbnZlcnRlZEFyZ3MgOj0gY29udmVydFN0cmF0ZWd5VmFyYXJncyhhcmdzKQogCXNvdXJjZSA6PSBndHMuY2xvbmUoKQotCXNvdXJjZS5ieXRlY29kZS5BZGRTb3VyY2UoIndpdGhvdXRTdHJhdGVnaWVzIiwgY29udmVydGVkQXJncy4uLikKKwlzb3VyY2UuZ3JlbWxpbkxhbmcuQWRkU291cmNlKCJ3aXRob3V0U3RyYXRlZ2llcyIsIGNvbnZlcnRlZEFyZ3MuLi4pCiAJcmV0dXJuIHNvdXJjZQogfQogCkBAIC0xMjMsMTMgKzExOCwxMCBAQAogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgV2l0aChrZXkgaW50ZXJmYWNle30sIHZhbHVlIGludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UgewogCXNvdXJjZSA6PSBndHMuY2xvbmUoKQogCisJLy9UT0RPIHZlcmlmeSByZW1vdGUgd2hlbiBjb25uZWN0aW9uIGlzIHNldC11cAogCXZhciBvcHRpb25zU3RyYXRlZ3kgVHJhdmVyc2FsU3RyYXRlZ3kgPSBuaWwKLQlmb3IgXywgdiA6PSByYW5nZSBndHMuYnl0ZWNvZGUuc291cmNlSW5zdHJ1Y3Rpb25zIHsKLQkJaWYgdi5vcGVyYXRvciA9PSAid2l0aFN0cmF0ZWdpZXMiICYmCi0JCQl2LmFyZ3VtZW50c1swXS4oKnRyYXZlcnNhbFN0cmF0ZWd5KS5uYW1lID09IGRlY29yYXRpb25OYW1lc3BhY2UrIk9wdGlvbnNTdHJhdGVneSIgewotCQkJb3B0aW9uc1N0cmF0ZWd5ID0gdi5hcmd1bWVudHNbMF0KLQkJCWJyZWFrCi0JCX0KKwlpZiBsZW4oZ3RzLmdyZW1saW5MYW5nLm9wdGlvbnNTdHJhdGVnaWVzKSAhPSAwIHsKKwkJb3B0aW9uc1N0cmF0ZWd5ID0gZ3RzLmdyZW1saW5MYW5nLm9wdGlvbnNTdHJhdGVnaWVzWzBdCiAJfQogCiAJaWYgb3B0aW9uc1N0cmF0ZWd5ID09IG5pbCB7CkBAIC0xNTQsMzUgKzE0Niw0MCBAQAogLy8gRSByZWFkcyBlZGdlcyBmcm9tIHRoZSBncmFwaCB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgRShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCXRyYXZlcnNhbCA6PSBndHMuR2V0R3JhcGhUcmF2ZXJzYWwoKQotCXRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJFIiwgYXJncy4uLikKKwl0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiRSIsIGFyZ3MuLi4pCiAJcmV0dXJuIHRyYXZlcnNhbAogfQogCiAvLyBWIHJlYWRzIHZlcnRpY2VzIGZyb20gdGhlIGdyYXBoIHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCiBmdW5jIChndHMgKkdyYXBoVHJhdmVyc2FsU291cmNlKSBWKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7CisJZm9yIGkgOj0gMDsgaSA8IGxlbihhcmdzKTsgaSsrIHsKKwkJaWYgdiwgb2sgOj0gYXJnc1tpXS4oKlZlcnRleCk7IG9rIHsKKwkJCWFyZ3NbaV0gPSB2LklkCisJCX0KKwl9CiAJdHJhdmVyc2FsIDo9IGd0cy5HZXRHcmFwaFRyYXZlcnNhbCgpCi0JdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoIlYiLCBhcmdzLi4uKQorCXRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJWIiwgYXJncy4uLikKIAlyZXR1cm4gdHJhdmVyc2FsCiB9CiAKIC8vIEFkZEUgYWRkcyBhbiBFZGdlIHRvIHN0YXJ0IHRoZSB0cmF2ZXJzYWwuCiBmdW5jIChndHMgKkdyYXBoVHJhdmVyc2FsU291cmNlKSBBZGRFKGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7CiAJdHJhdmVyc2FsIDo9IGd0cy5HZXRHcmFwaFRyYXZlcnNhbCgpCi0JdHJhdmVyc2FsLkJ5dGVjb2RlLkFkZFN0ZXAoImFkZEUiLCBhcmdzLi4uKQorCXRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJhZGRFIiwgYXJncy4uLikKIAlyZXR1cm4gdHJhdmVyc2FsCiB9CiAKIC8vIEFkZFYgYWRkcyBhIFZlcnRleCB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgQWRkVihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCXRyYXZlcnNhbCA6PSBndHMuR2V0R3JhcGhUcmF2ZXJzYWwoKQotCXRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJhZGRWIiwgYXJncy4uLikKKwl0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiYWRkViIsIGFyZ3MuLi4pCiAJcmV0dXJuIHRyYXZlcnNhbAogfQogCiAvLyBDYWxsIHN0YXJ0cyB0aGUgdHJhdmVyc2FsIGJ5IGV4ZWN1dGluZyBhIHByb2NlZHVyZQogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgQ2FsbChhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCXRyYXZlcnNhbCA6PSBndHMuR2V0R3JhcGhUcmF2ZXJzYWwoKQotCXRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJjYWxsIiwgYXJncy4uLikKKwl0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgiY2FsbCIsIGFyZ3MuLi4pCiAJcmV0dXJuIHRyYXZlcnNhbAogfQogCkBAIC0xOTAsMzUgKzE4Nyw0NSBAQAogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgSW5qZWN0KGFyZ3MgLi4uaW50ZXJmYWNle30pICpHcmFwaFRyYXZlcnNhbCB7CiAJdHJhdmVyc2FsIDo9IGd0cy5HZXRHcmFwaFRyYXZlcnNhbCgpCiAJLy8gRm9yY2UgaW50MzIgc2VyaWFsaXphdGlvbiBmb3IgdmFsaWQgbnVtYmVyIHZhbHVlcyBmb3Igc2VydmVyIGNvbXBhdGliaWxpdHkKLQl0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiaW5qZWN0IiwgaW50MzJBcmdzKGFyZ3MpLi4uKQorCXRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJpbmplY3QiLCBpbnQzMkFyZ3MoYXJncykuLi4pCiAJcmV0dXJuIHRyYXZlcnNhbAogfQogCiAvLyBJbyBhZGRzIHRoZSBpbyBzdGVwcyB0byBzdGFydCB0aGUgdHJhdmVyc2FsLgogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgSW8oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKIAl0cmF2ZXJzYWwgOj0gZ3RzLkdldEdyYXBoVHJhdmVyc2FsKCkKLQl0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgiaW8iLCBhcmdzLi4uKQorCXRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJpbyIsIGFyZ3MuLi4pCiAJcmV0dXJuIHRyYXZlcnNhbAogfQogCiAvLyBNZXJnZUUgdXNlcyBhbiB1cHNlcnQtbGlrZSBvcGVyYXRpb24gdG8gYWRkIGFuIEVkZ2UgdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KIGZ1bmMgKGd0cyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIE1lcmdlRShhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgeworCWlmIGxlbihhcmdzKSAhPSAwIHsKKwkJaWYgbSwgb2sgOj0gYXJnc1swXS4obWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KTsgb2sgeworCQkJaWYgdiwgb2sgOj0gbVtEaXJlY3Rpb24uT3V0XS4oKlZlcnRleCk7IG9rIHsKKwkJCQltW0RpcmVjdGlvbi5PdXRdID0gdi5JZAorCQkJfQorCQkJaWYgdiwgb2sgOj0gbVtEaXJlY3Rpb24uSW5dLigqVmVydGV4KTsgb2sgeworCQkJCW1bRGlyZWN0aW9uLkluXSA9IHYuSWQKKwkJCX0KKwkJfQorCX0KIAl0cmF2ZXJzYWwgOj0gZ3RzLkdldEdyYXBoVHJhdmVyc2FsKCkKLQl0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgibWVyZ2VFIiwgYXJncy4uLikKKwl0cmF2ZXJzYWwuR3JlbWxpbkxhbmcuQWRkU3RlcCgibWVyZ2VFIiwgYXJncy4uLikKIAlyZXR1cm4gdHJhdmVyc2FsCiB9CiAKIC8vIE1lcmdlViB1c2VzIGFuIHVwc2VydC1saWtlIG9wZXJhdGlvbiB0byBhZGQgYSBWZXJ0ZXggdG8gc3RhcnQgdGhlIHRyYXZlcnNhbC4KIGZ1bmMgKGd0cyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIE1lcmdlVihhcmdzIC4uLmludGVyZmFjZXt9KSAqR3JhcGhUcmF2ZXJzYWwgewogCXRyYXZlcnNhbCA6PSBndHMuR2V0R3JhcGhUcmF2ZXJzYWwoKQotCXRyYXZlcnNhbC5CeXRlY29kZS5BZGRTdGVwKCJtZXJnZVYiLCBhcmdzLi4uKQorCXRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJtZXJnZVYiLCBhcmdzLi4uKQogCXJldHVybiB0cmF2ZXJzYWwKIH0KIAogLy8gVW5pb24gYWxsb3dzIGZvciBhIG11bHRpLWJyYW5jaGVkIHN0YXJ0IHRvIGEgdHJhdmVyc2FsLgogZnVuYyAoZ3RzICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgVW5pb24oYXJncyAuLi5pbnRlcmZhY2V7fSkgKkdyYXBoVHJhdmVyc2FsIHsKIAl0cmF2ZXJzYWwgOj0gZ3RzLkdldEdyYXBoVHJhdmVyc2FsKCkKLQl0cmF2ZXJzYWwuQnl0ZWNvZGUuQWRkU3RlcCgidW5pb24iLCBhcmdzLi4uKQorCXRyYXZlcnNhbC5HcmVtbGluTGFuZy5BZGRTdGVwKCJ1bmlvbiIsIGFyZ3MuLi4pCiAJcmV0dXJuIHRyYXZlcnNhbAogfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9ncmFwaFRyYXZlcnNhbFNvdXJjZV90ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvZ3JhcGhUcmF2ZXJzYWxTb3VyY2VfdGVzdC5nbwppbmRleCA1Yzk1N2MwLi4xOWRmNTA1IDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9ncmFwaFRyYXZlcnNhbFNvdXJjZV90ZXN0LmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL2dyYXBoVHJhdmVyc2FsU291cmNlX3Rlc3QuZ28KQEAgLTI4LDQxICsyOCwyOSBAQAogCiAJdC5SdW4oIkdyYXBoVHJhdmVyc2FsU291cmNlLldpdGggdGVzdHMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewogCQl0LlJ1bigiVGVzdCBmb3Igc2luZ2xlIHByb3BlcnR5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCWcgOj0gJkdyYXBoVHJhdmVyc2FsU291cmNle2dyYXBoOiAmR3JhcGh7fSwgYnl0ZWNvZGU6IE5ld0J5dGVjb2RlKG5pbCksIHJlbW90ZUNvbm5lY3Rpb246IG5pbH0KKwkJCWcgOj0gJkdyYXBoVHJhdmVyc2FsU291cmNle2dyYXBoOiAmR3JhcGh7fSwgZ3JlbWxpbkxhbmc6IE5ld0dyZW1saW5MYW5nKG5pbCksIHJlbW90ZUNvbm5lY3Rpb246IG5pbH0KIAkJCXRyYXZlcnNhbCA6PSBnLldpdGgoImZvbyIsICJiYXIiKQogCQkJYXNzZXJ0Lk5vdE5pbCh0LCB0cmF2ZXJzYWwpCi0JCQlhc3NlcnQuRXF1YWwodCwgMSwgbGVuKHRyYXZlcnNhbC5ieXRlY29kZS5zb3VyY2VJbnN0cnVjdGlvbnMpKQotCQkJaW5zdHJ1Y3Rpb24gOj0gdHJhdmVyc2FsLmJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9uc1swXQotCQkJYXNzZXJ0LkVxdWFsKHQsICJ3aXRoU3RyYXRlZ2llcyIsIGluc3RydWN0aW9uLm9wZXJhdG9yKQotCQkJYXNzZXJ0LkVxdWFsKHQsICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5IiwKLQkJCQlpbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkubmFtZSkKLQkJCWNvbmZpZyA6PSBpbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkuY29uZmlndXJhdGlvbgorCQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbih0cmF2ZXJzYWwuZ3JlbWxpbkxhbmcub3B0aW9uc1N0cmF0ZWdpZXMpKQorCQkJY29uZmlnIDo9IHRyYXZlcnNhbC5ncmVtbGluTGFuZy5vcHRpb25zU3RyYXRlZ2llc1swXS5jb25maWd1cmF0aW9uCiAJCQlhc3NlcnQuRXF1YWwodCwgbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZm9vIjogImJhciJ9LCBjb25maWcpCiAJCX0pCiAKIAkJdC5SdW4oIlRlc3QgZm9yIG11bHRpcGxlIHByb3BlcnR5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCWcgOj0gJkdyYXBoVHJhdmVyc2FsU291cmNle2dyYXBoOiAmR3JhcGh7fSwgYnl0ZWNvZGU6IE5ld0J5dGVjb2RlKG5pbCksIHJlbW90ZUNvbm5lY3Rpb246IG5pbH0KKwkJCWcgOj0gJkdyYXBoVHJhdmVyc2FsU291cmNle2dyYXBoOiAmR3JhcGh7fSwgZ3JlbWxpbkxhbmc6IE5ld0dyZW1saW5MYW5nKG5pbCksIHJlbW90ZUNvbm5lY3Rpb246IG5pbH0KIAkJCXRyYXZlcnNhbCA6PSBnLldpdGgoImZvbyIsICJiYXIiKS5XaXRoKCJmb28yIiwgImJhcjIiKQogCQkJYXNzZXJ0Lk5vdE5pbCh0LCB0cmF2ZXJzYWwpCi0JCQlhc3NlcnQuRXF1YWwodCwgMSwgbGVuKHRyYXZlcnNhbC5ieXRlY29kZS5zb3VyY2VJbnN0cnVjdGlvbnMpKQotCQkJaW5zdHJ1Y3Rpb24gOj0gdHJhdmVyc2FsLmJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9uc1swXQotCQkJYXNzZXJ0LkVxdWFsKHQsICJ3aXRoU3RyYXRlZ2llcyIsIGluc3RydWN0aW9uLm9wZXJhdG9yKQotCQkJYXNzZXJ0LkVxdWFsKHQsICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5IiwKLQkJCQlpbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkubmFtZSkKLQkJCWNvbmZpZyA6PSBpbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkuY29uZmlndXJhdGlvbgorCQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbih0cmF2ZXJzYWwuZ3JlbWxpbkxhbmcub3B0aW9uc1N0cmF0ZWdpZXMpKQorCQkJY29uZmlnIDo9IHRyYXZlcnNhbC5ncmVtbGluTGFuZy5vcHRpb25zU3RyYXRlZ2llc1swXS5jb25maWd1cmF0aW9uCiAJCQlhc3NlcnQuRXF1YWwodCwgbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZm9vIjogImJhciIsICJmb28yIjogImJhcjIifSwgY29uZmlnKQogCQl9KQogCiAJCXQuUnVuKCJUZXN0IGZvciBwcm9wZXJ0eSByZXBsYWNlbWVudCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCQlnIDo9ICZHcmFwaFRyYXZlcnNhbFNvdXJjZXtncmFwaDogJkdyYXBoe30sIGJ5dGVjb2RlOiBOZXdCeXRlY29kZShuaWwpLCByZW1vdGVDb25uZWN0aW9uOiBuaWx9CisJCQlnIDo9ICZHcmFwaFRyYXZlcnNhbFNvdXJjZXtncmFwaDogJkdyYXBoe30sIGdyZW1saW5MYW5nOiBOZXdHcmVtbGluTGFuZyhuaWwpLCByZW1vdGVDb25uZWN0aW9uOiBuaWx9CiAJCQl0cmF2ZXJzYWwgOj0gZy5XaXRoKCJmb28iLCAiYmFyIikuV2l0aCgiZm9vIiwgIm5vdCBiYXIiKQogCQkJYXNzZXJ0Lk5vdE5pbCh0LCB0cmF2ZXJzYWwpCi0JCQlhc3NlcnQuRXF1YWwodCwgMSwgbGVuKHRyYXZlcnNhbC5ieXRlY29kZS5zb3VyY2VJbnN0cnVjdGlvbnMpKQotCQkJaW5zdHJ1Y3Rpb24gOj0gdHJhdmVyc2FsLmJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9uc1swXQotCQkJYXNzZXJ0LkVxdWFsKHQsICJ3aXRoU3RyYXRlZ2llcyIsIGluc3RydWN0aW9uLm9wZXJhdG9yKQotCQkJYXNzZXJ0LkVxdWFsKHQsICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5IiwKLQkJCQlpbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkubmFtZSkKLQkJCWNvbmZpZyA6PSBpbnN0cnVjdGlvbi5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkuY29uZmlndXJhdGlvbgorCQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbih0cmF2ZXJzYWwuZ3JlbWxpbkxhbmcub3B0aW9uc1N0cmF0ZWdpZXMpKQorCQkJY29uZmlnIDo9IHRyYXZlcnNhbC5ncmVtbGluTGFuZy5vcHRpb25zU3RyYXRlZ2llc1swXS5jb25maWd1cmF0aW9uCiAJCQlhc3NlcnQuRXF1YWwodCwgbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZm9vIjogIm5vdCBiYXIifSwgY29uZmlnKQogCQl9KQogCX0pCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9ncmVtbGlubGFuZy5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL2dyZW1saW5sYW5nLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ODNmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9ncmVtbGlubGFuZy5nbwpAQCAtMCwwICsxLDU5MyBAQAorLyoKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgZ3JlbWxpbmdvCisKK2ltcG9ydCAoCisJImZtdCIKKwkiZ28vdG9rZW4iCisJIm1hdGgiCisJIm1hdGgvYmlnIgorCSJyZWZsZWN0IgorCSJzdHJjb252IgorCSJzdHJpbmdzIgorCSJzeW5jL2F0b21pYyIKKwkidGltZSIKKworCSJnaXRodWIuY29tL2dvb2dsZS91dWlkIgorKQorCit0eXBlIEdyZW1saW5MYW5nIHN0cnVjdCB7CisJZW1wdHlBcnJheSAgICAgICAgW11pbnRlcmZhY2V7fQorCWdyZW1saW4gICAgICAgICAgIFtdc3RyaW5nCisJcGFyYW1ldGVycyAgICAgICAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fQorCW9wdGlvbnNTdHJhdGVnaWVzIFtdKnRyYXZlcnNhbFN0cmF0ZWd5CisJcGFyYW1Db3VudCAgICAgICAgKmF0b21pYy5VaW50NjQKK30KKworLy8gTmV3R3JlbWxpbkxhbmcgY3JlYXRlcyBhIG5ldyBHcmVtbGluTGFuZyB0byBiZSB1c2VkIGluIHRyYXZlcnNhbHMuCitmdW5jIE5ld0dyZW1saW5MYW5nKGdsICpHcmVtbGluTGFuZykgKkdyZW1saW5MYW5nIHsKKwlncmVtbGluIDo9IG1ha2UoW11zdHJpbmcsIDApCisJcGFyYW1ldGVycyA6PSBtYWtlKG1hcFtzdHJpbmddaW50ZXJmYWNle30pCisJb3B0aW9uc1N0cmF0ZWdpZXMgOj0gbWFrZShbXSp0cmF2ZXJzYWxTdHJhdGVneSwgMCkKKwlwYXJhbUNvdW50IDo9IGF0b21pYy5VaW50NjR7fQorCWlmIGdsICE9IG5pbCB7CisJCWdyZW1saW4gPSBtYWtlKFtdc3RyaW5nLCBsZW4oZ2wuZ3JlbWxpbikpCisJCWNvcHkoZ3JlbWxpbiwgZ2wuZ3JlbWxpbikKKworCQlwYXJhbWV0ZXJzID0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQorCQlmb3IgaywgdiA6PSByYW5nZSBnbC5wYXJhbWV0ZXJzIHsKKwkJCXBhcmFtZXRlcnNba10gPSB2CisJCX0KKworCQlvcHRpb25zU3RyYXRlZ2llcyA9IG1ha2UoW10qdHJhdmVyc2FsU3RyYXRlZ3ksIGxlbihnbC5vcHRpb25zU3RyYXRlZ2llcykpCisJCWNvcHkob3B0aW9uc1N0cmF0ZWdpZXMsIGdsLm9wdGlvbnNTdHJhdGVnaWVzKQorCisJCXBhcmFtQ291bnQuU3RvcmUoZ2wucGFyYW1Db3VudC5Mb2FkKCkpCisJfQorCisJcmV0dXJuICZHcmVtbGluTGFuZ3sKKwkJZ3JlbWxpbjogICAgICAgICAgIGdyZW1saW4sCisJCXBhcmFtZXRlcnM6ICAgICAgICBwYXJhbWV0ZXJzLAorCQlvcHRpb25zU3RyYXRlZ2llczogb3B0aW9uc1N0cmF0ZWdpZXMsCisJCXBhcmFtQ291bnQ6ICAgICAgICAmcGFyYW1Db3VudCwKKwl9Cit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgYWRkVG9HcmVtbGluKG5hbWUgc3RyaW5nLCBhcmdzIC4uLmludGVyZmFjZXt9KSBlcnJvciB7CisJZmxhdHRlbmVkQXJncyA6PSBnbC5mbGF0dGVuQXJndW1lbnRzKGFyZ3MuLi4pCisJaWYgbmFtZSA9PSAiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIgeworCQlzdHIwLCBlcnIgOj0gZ2wuYXJnQXNTdHJpbmcoZmxhdHRlbmVkQXJnc1swXSkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwkJc3RyMSwgZXJyIDo9IGdsLmFyZ0FzU3RyaW5nKGZsYXR0ZW5lZEFyZ3NbMV0pCisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuIGVycgorCQl9CisJCWdsLmdyZW1saW4gPSBhcHBlbmQoZ2wuZ3JlbWxpbiwgc3RyMCkKKwkJZ2wuZ3JlbWxpbiA9IGFwcGVuZChnbC5ncmVtbGluLCAiKCIpCisJCWdsLmdyZW1saW4gPSBhcHBlbmQoZ2wuZ3JlbWxpbiwgc3RyMSkKKwkJZ2wuZ3JlbWxpbiA9IGFwcGVuZChnbC5ncmVtbGluLCAiKSIpCisJCXJldHVybiBuaWwKKwl9CisKKwlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sICIuIikKKwlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sIG5hbWUpCisJZ2wuZ3JlbWxpbiA9IGFwcGVuZChnbC5ncmVtbGluLCAiKCIpCisKKwlmb3IgaSA6PSAwOyBpIDwgbGVuKGZsYXR0ZW5lZEFyZ3MpOyBpKysgeworCQlpZiBpID4gMCB7CisJCQlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sICIsIikKKwkJfQorCQljb252ZXJ0QXJnLCBlcnIgOj0gZ2wuY29udmVydEFyZ3VtZW50KGZsYXR0ZW5lZEFyZ3NbaV0pIC8vLkluZGV4KGkpLkludGVyZmFjZSgpKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBlcnIKKwkJfQorCQlhcmdTdHIsIGVyciA6PSBnbC5hcmdBc1N0cmluZyhjb252ZXJ0QXJnKQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBlcnIKKwkJfQorCQlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sIGFyZ1N0cikKKwl9CisJZ2wuZ3JlbWxpbiA9IGFwcGVuZChnbC5ncmVtbGluLCAiKSIpCisJcmV0dXJuIG5pbAorfQorCisvLyBlc2NhcGVTdHJpbmcgZXNjYXBlcyBhIHN0cmluZyB2YWx1ZSBmb3Igc2FmZSBlbWJlZGRpbmcgaW4gYSBHcmVtbGluTGFuZyBzY3JpcHQuCitmdW5jIGVzY2FwZVN0cmluZyhzIHN0cmluZykgc3RyaW5nIHsKKwl2YXIgc2Igc3RyaW5ncy5CdWlsZGVyCisJZm9yIF8sIGMgOj0gcmFuZ2UgcyB7CisJCXN3aXRjaCBjIHsKKwkJY2FzZSAnXFwnOgorCQkJc2IuV3JpdGVTdHJpbmcoYFxcYCkKKwkJY2FzZSAnIic6CisJCQlzYi5Xcml0ZVN0cmluZyhgXCJgKQorCQljYXNlICdcbic6CisJCQlzYi5Xcml0ZVN0cmluZyhgXG5gKQorCQljYXNlICdccic6CisJCQlzYi5Xcml0ZVN0cmluZyhgXHJgKQorCQljYXNlICdcdCc6CisJCQlzYi5Xcml0ZVN0cmluZyhgXHRgKQorCQljYXNlICdcYic6CisJCQlzYi5Xcml0ZVN0cmluZyhgXGJgKQorCQljYXNlICdcZic6CisJCQlzYi5Xcml0ZVN0cmluZyhgXGZgKQorCQlkZWZhdWx0OgorCQkJc2IuV3JpdGVSdW5lKGMpCisJCX0KKwl9CisJcmV0dXJuIHNiLlN0cmluZygpCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgYXJnQXNTdHJpbmcoYXJnIGludGVyZmFjZXt9KSAoc3RyaW5nLCBlcnJvcikgeworCWlmIGFyZyA9PSBuaWwgeworCQlyZXR1cm4gIm51bGwiLCBuaWwKKwl9CisKKwlzd2l0Y2ggdiA6PSBhcmcuKHR5cGUpIHsKKwljYXNlIHN0cmluZzoKKwkJcmV0dXJuIGZtdC5TcHJpbnRmKCJcIiVzXCIiLCBlc2NhcGVTdHJpbmcodikpLCBuaWwKKwljYXNlIGJvb2w6CisJCXJldHVybiBzdHJjb252LkZvcm1hdEJvb2wodiksIG5pbAorCWNhc2UgaW50OCwgdWludDg6CisJCXJldHVybiBmbXQuU3ByaW50ZigiJWRCIiwgdiksIG5pbAorCWNhc2UgaW50MTY6CisJCXJldHVybiBmbXQuU3ByaW50ZigiJWRTIiwgdiksIG5pbAorCWNhc2UgaW50MzIsIHVpbnQxNjoKKwkJcmV0dXJuIGZtdC5TcHJpbnRmKCIlZCIsIHYpLCBuaWwKKwljYXNlIGludDoKKwkJaWYgdiA8PSBtYXRoLk1heEludDMyICYmIHYgPj0gbWF0aC5NaW5JbnQzMiB7CisJCQlyZXR1cm4gZm10LlNwcmludGYoIiVkIiwgdiksIG5pbAorCQl9IGVsc2UgeworCQkJcmV0dXJuIGZtdC5TcHJpbnRmKCIlZEwiLCB2KSwgbmlsCisJCX0KKwljYXNlIGludDY0LCB1aW50MzI6CisJCXJldHVybiBmbXQuU3ByaW50ZigiJWRMIiwgdiksIG5pbAorCWNhc2UgdWludDoKKwkJaWYgdiA8PSBtYXRoLk1heFVpbnQzMiB7CisJCQlyZXR1cm4gZm10LlNwcmludGYoIiVkTCIsIHYpLCBuaWwKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBmbXQuU3ByaW50ZigiJWROIiwgdiksIG5pbAorCQl9CisJY2FzZSB1aW50NjQsICpiaWcuSW50OgorCQlyZXR1cm4gZm10LlNwcmludGYoIiVkTiIsIHYpLCBuaWwKKwljYXNlIGZsb2F0MzI6CisJCWlmIG1hdGguSXNOYU4oZmxvYXQ2NCh2KSkgeworCQkJcmV0dXJuICJOYU4iLCBuaWwKKwkJfQorCQlpZiBtYXRoLklzSW5mKGZsb2F0NjQodiksIDEpIHsKKwkJCXJldHVybiAiSW5maW5pdHkiLCBuaWwKKwkJfQorCQlpZiBtYXRoLklzSW5mKGZsb2F0NjQodiksIC0xKSB7CisJCQlyZXR1cm4gIi1JbmZpbml0eSIsIG5pbAorCQl9CisJCXJldHVybiBmbXQuU3ByaW50ZigiJXZGIiwgdiksIG5pbAorCWNhc2UgZmxvYXQ2NDoKKwkJaWYgbWF0aC5Jc05hTih2KSB7CisJCQlyZXR1cm4gIk5hTiIsIG5pbAorCQl9CisJCWlmIG1hdGguSXNJbmYodiwgMSkgeworCQkJcmV0dXJuICJJbmZpbml0eSIsIG5pbAorCQl9CisJCWlmIG1hdGguSXNJbmYodiwgLTEpIHsKKwkJCXJldHVybiAiLUluZmluaXR5IiwgbmlsCisJCX0KKwkJcmV0dXJuIGZtdC5TcHJpbnRmKCIldkQiLCB2KSwgbmlsCisJY2FzZSAqU2ltcGxlU2V0OgorCQlyZXR1cm4gZ2wudHJhbnNsYXRlU2V0KHYuVG9TbGljZSgpKQorCWNhc2UgQmlnRGVjaW1hbDoKKwkJcmV0dXJuIGZtdC5TcHJpbnRmKCIldk0iLCB2LlZhbHVlKCkpLCBuaWwKKwljYXNlICpCaWdEZWNpbWFsOgorCQlyZXR1cm4gZm10LlNwcmludGYoIiV2TSIsIHYuVmFsdWUoKSksIG5pbAorCWNhc2UgdGltZS5UaW1lOgorCQlyZXR1cm4gZm10LlNwcmludGYoImRhdGV0aW1lKFwiJXZcIikiLCB2LkZvcm1hdCgiMjAwNi0wMS0wMlQxNTowNDowNS4wMDBaMDc6MDAiKSksIG5pbCAvLyBlcXVpdmFsZW50IHRvIHRpbWUuUkZDMzMzOSBidXQgd2l0aCBtcyBwcmVjaXNpb24gaW5zdGVhZCBvZiBzZWNvbmRzCisJY2FzZSBjYXJkaW5hbGl0eSwgY29sdW1uLCBkaXJlY3Rpb24sIG9wZXJhdG9yLCBvcmRlciwgcGljaywgcG9wLCBiYXJyaWVyLCBzY29wZSwgdCwgbWVyZ2UsIGdUeXBlOgorCQluYW1lIDo9IHJlZmxlY3QuVmFsdWVPZih2KS5UeXBlKCkuTmFtZSgpCisJCXJldHVybiBmbXQuU3ByaW50ZigiJXMuJXMiLCBzdHJpbmdzLlRvVXBwZXIobmFtZVs6MV0pK25hbWVbMTpdLCB2KSwgbmlsCisJY2FzZSBkdDoKKwkJbmFtZSA6PSByZWZsZWN0LlZhbHVlT2YodikuVHlwZSgpLk5hbWUoKQorCQlyZXR1cm4gZm10LlNwcmludGYoIiVzLiVzIiwgc3RyaW5ncy5Ub1VwcGVyKG5hbWUpLCB2KSwgbmlsCisJY2FzZSAqVmVydGV4OgorCQlyZXR1cm4gZ2wuYXJnQXNTdHJpbmcodi5JZCkKKwljYXNlIHRleHRQOgorCQlyZXR1cm4gZ2wudHJhbnNsYXRlVGV4dFByZWRpY2F0ZSgmdikKKwljYXNlICp0ZXh0UDoKKwkJcmV0dXJuIGdsLnRyYW5zbGF0ZVRleHRQcmVkaWNhdGUodikKKwljYXNlIHA6CisJCXJldHVybiBnbC50cmFuc2xhdGVQcmVkaWNhdGUoJnYpCisJY2FzZSAqcDoKKwkJcmV0dXJuIGdsLnRyYW5zbGF0ZVByZWRpY2F0ZSh2KQorCWNhc2UgVHJhdmVyc2FsOgorCQlncmVtbGluTGFuZyA6PSB2LkdyZW1saW5MYW5nCisJCWZvciBrZXksIHZhbCA6PSByYW5nZSBncmVtbGluTGFuZy5wYXJhbWV0ZXJzIHsKKwkJCWdsLnBhcmFtZXRlcnNba2V5XSA9IHZhbAorCQl9CisJCXJldHVybiBncmVtbGluTGFuZy5HZXRHcmVtbGluKCJfXyIpLCBuaWwKKwljYXNlICpUcmF2ZXJzYWw6CisJCWdyZW1saW5MYW5nIDo9IHYuR3JlbWxpbkxhbmcKKwkJZm9yIGtleSwgdmFsIDo9IHJhbmdlIGdyZW1saW5MYW5nLnBhcmFtZXRlcnMgeworCQkJZ2wucGFyYW1ldGVyc1trZXldID0gdmFsCisJCX0KKwkJcmV0dXJuIGdyZW1saW5MYW5nLkdldEdyZW1saW4oIl9fIiksIG5pbAorCWNhc2UgR3JhcGhUcmF2ZXJzYWw6CisJCWdyZW1saW5MYW5nIDo9IHYuR3JlbWxpbkxhbmcKKwkJZm9yIGtleSwgdmFsIDo9IHJhbmdlIGdyZW1saW5MYW5nLnBhcmFtZXRlcnMgeworCQkJZ2wucGFyYW1ldGVyc1trZXldID0gdmFsCisJCX0KKwkJcmV0dXJuIGdyZW1saW5MYW5nLkdldEdyZW1saW4oIl9fIiksIG5pbAorCWNhc2UgKkdyYXBoVHJhdmVyc2FsOgorCQlncmVtbGluTGFuZyA6PSB2LkdyZW1saW5MYW5nCisJCWZvciBrZXksIHZhbCA6PSByYW5nZSBncmVtbGluTGFuZy5wYXJhbWV0ZXJzIHsKKwkJCWdsLnBhcmFtZXRlcnNba2V5XSA9IHZhbAorCQl9CisJCXJldHVybiBncmVtbGluTGFuZy5HZXRHcmVtbGluKCJfXyIpLCBuaWwKKwljYXNlIEdyZW1saW5MYW5nOgorCQlmb3Iga2V5LCB2YWwgOj0gcmFuZ2Ugdi5wYXJhbWV0ZXJzIHsKKwkJCWdsLnBhcmFtZXRlcnNba2V5XSA9IHZhbAorCQl9CisJCXJldHVybiB2LkdldEdyZW1saW4oIl9fIiksIG5pbAorCWNhc2UgKkdyZW1saW5MYW5nOgorCQlmb3Iga2V5LCB2YWwgOj0gcmFuZ2Ugdi5wYXJhbWV0ZXJzIHsKKwkJCWdsLnBhcmFtZXRlcnNba2V5XSA9IHZhbAorCQl9CisJCXJldHVybiB2LkdldEdyZW1saW4oIl9fIiksIG5pbAorCWNhc2UgR1ZhbHVlOgorCQlrZXkgOj0gdi5OYW1lKCkKKwkJaWYgIXRva2VuLklzSWRlbnRpZmllcihrZXkpIHsKKwkJCXBhbmljKGZtdC5TcHJpbnRmKCJpbnZhbGlkIHBhcmFtZXRlciBuYW1lICcldicuIiwga2V5KSkKKwkJfQorCQl2YWx1ZSA6PSB2LlZhbHVlKCkKKwkJaWYgdmFsLCBvayA6PSBnbC5wYXJhbWV0ZXJzW2tleV07IG9rIHsKKwkJCWlmIHJlZmxlY3QuVHlwZU9mKHZhbCkuS2luZCgpID09IHJlZmxlY3QuU2xpY2UgfHwgcmVmbGVjdC5UeXBlT2YodmFsdWUpLktpbmQoKSA9PSByZWZsZWN0LlNsaWNlIHx8CisJCQkJcmVmbGVjdC5UeXBlT2YodmFsKS5LaW5kKCkgPT0gcmVmbGVjdC5NYXAgfHwgcmVmbGVjdC5UeXBlT2YodmFsdWUpLktpbmQoKSA9PSByZWZsZWN0Lk1hcCB7CisJCQkJaWYgIXJlZmxlY3QuRGVlcEVxdWFsKHZhbCwgdmFsdWUpIHsKKwkJCQkJcGFuaWMoZm10LlNwcmludGYoInBhcmFtZXRlciB3aXRoIG5hbWUgJyV2JyBhbHJlYWR5IGV4aXN0cy4iLCBrZXkpKQorCQkJCX0KKwkJCX0gZWxzZSBpZiB2YWwgIT0gdmFsdWUgeworCQkJCXBhbmljKGZtdC5TcHJpbnRmKCJwYXJhbWV0ZXIgd2l0aCBuYW1lICcldicgYWxyZWFkeSBleGlzdHMuIiwga2V5KSkKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWdsLnBhcmFtZXRlcnNba2V5XSA9IHYuVmFsdWUoKQorCQl9CisJCXJldHVybiBrZXksIG5pbAorCWNhc2UgdXVpZC5VVUlEOgorCQlyZXR1cm4gZm10LlNwcmludGYoIlVVSUQoXCIldlwiKSIsIHYuU3RyaW5nKCkpLCBuaWwKKwlkZWZhdWx0OgorCQlzd2l0Y2ggcmVmbGVjdC5UeXBlT2YoYXJnKS5LaW5kKCkgeworCQljYXNlIHJlZmxlY3QuTWFwOgorCQkJcmV0dXJuIGdsLnRyYW5zbGF0ZU1hcChhcmcpCisJCWNhc2UgcmVmbGVjdC5TbGljZToKKwkJCXJldHVybiBnbC50cmFuc2xhdGVTbGljZShhcmcpCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZ2wuYXNQYXJhbWV0ZXIoYXJnKSwgbmlsCisJCX0KKwl9Cit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgdHJhbnNsYXRlTWFwKGFyZyBpbnRlcmZhY2V7fSkgKHN0cmluZywgZXJyb3IpIHsKKwlzYiA6PSBzdHJpbmdzLkJ1aWxkZXJ7fQorCXNiLldyaXRlU3RyaW5nKCJbIikKKwlzaXplIDo9IHJlZmxlY3QuVmFsdWVPZihhcmcpLkxlbigpCisJaWYgc2l6ZSA9PSAwIHsKKwkJc2IuV3JpdGVTdHJpbmcoIjoiKQorCX0gZWxzZSB7CisJCWl0ZXIgOj0gcmVmbGVjdC5WYWx1ZU9mKGFyZykuTWFwUmFuZ2UoKQorCQlmb3IgaXRlci5OZXh0KCkgeworCQkJayA6PSBpdGVyLktleSgpLkludGVyZmFjZSgpCisJCQlrU3RyaW5nLCBlcnIgOj0gZ2wuYXJnQXNTdHJpbmcoaykKKwkJCWlmIGVyciAhPSBuaWwgeworCQkJCXJldHVybiAiIiwgZXJyCisJCQl9CisJCQl2IDo9IGl0ZXIuVmFsdWUoKS5JbnRlcmZhY2UoKQorCQkJdlN0cmluZywgZXJyIDo9IGdsLmFyZ0FzU3RyaW5nKHYpCisJCQlpZiBlcnIgIT0gbmlsIHsKKwkJCQlyZXR1cm4gIiIsIGVycgorCQkJfQorCQkJc2IuV3JpdGVTdHJpbmcoa1N0cmluZykKKwkJCXNiLldyaXRlQnl0ZSgnOicpCisJCQlzYi5Xcml0ZVN0cmluZyh2U3RyaW5nKQorCQkJc2l6ZS0tCisJCQlpZiBzaXplID4gMCB7CisJCQkJc2IuV3JpdGVTdHJpbmcoIiwiKQorCQkJfQorCQl9CisJfQorCisJc2IuV3JpdGVTdHJpbmcoIl0iKQorCXJldHVybiBzYi5TdHJpbmcoKSwgbmlsCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgdHJhbnNsYXRlU2xpY2UoYXJnIGludGVyZmFjZXt9KSAoc3RyaW5nLCBlcnJvcikgeworCXJldHVybiBnbC50cmFuc2xhdGVDb2xsZWN0aW9uKGFyZywgIlsiLCAiXSIpCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgdHJhbnNsYXRlU2V0KGFyZyBpbnRlcmZhY2V7fSkgKHN0cmluZywgZXJyb3IpIHsKKwlyZXR1cm4gZ2wudHJhbnNsYXRlQ29sbGVjdGlvbihhcmcsICJ7IiwgIn0iKQorfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIHRyYW5zbGF0ZUNvbGxlY3Rpb24oYXJnIGludGVyZmFjZXt9LCBvcGVuLCBjbG9zZSBzdHJpbmcpIChzdHJpbmcsIGVycm9yKSB7CisJc2IgOj0gc3RyaW5ncy5CdWlsZGVye30KKwlzYi5Xcml0ZVN0cmluZyhvcGVuKQorCWxpc3QgOj0gcmVmbGVjdC5WYWx1ZU9mKGFyZykKKworCWZvciBpIDo9IDA7IGkgPCBsaXN0LkxlbigpOyBpKysgeworCQlpZiBpID4gMCB7CisJCQlzYi5Xcml0ZVN0cmluZygiLCIpCisJCX0KKwkJdlN0cmluZywgZXJyIDo9IGdsLmFyZ0FzU3RyaW5nKGxpc3QuSW5kZXgoaSkuSW50ZXJmYWNlKCkpCisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuICIiLCBlcnIKKwkJfQorCQlzYi5Xcml0ZVN0cmluZyh2U3RyaW5nKQorCX0KKwlzYi5Xcml0ZVN0cmluZyhjbG9zZSkKKwlyZXR1cm4gc2IuU3RyaW5nKCksIG5pbAorfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIHRyYW5zbGF0ZVRleHRQcmVkaWNhdGUodiAqdGV4dFApIChzdHJpbmcsIGVycm9yKSB7CisJaWYgdi5vcGVyYXRvciA9PSAiIiAmJiBsZW4odi52YWx1ZXMpID09IDAgeworCQlyZXR1cm4gIiIsIG5pbAorCX0KKworCWlmIHYub3BlcmF0b3IgPT0gIm9yIiB8fCB2Lm9wZXJhdG9yID09ICJhbmQiIHsKKwkJcmV0dXJuIGdsLnRyYW5zbGF0ZUNvbm5QT3Aodi5vcGVyYXRvciwgdi52YWx1ZXMsIGdsLmdldFByZWRpY2F0ZVN0cmluZykKKwl9CisJcmV0dXJuIGdsLnRyYW5zbGF0ZVBWYWx1ZSh2Lm9wZXJhdG9yLCB2LnZhbHVlcykKK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSB0cmFuc2xhdGVQcmVkaWNhdGUodiAqcCkgKHN0cmluZywgZXJyb3IpIHsKKwlpZiB2Lm9wZXJhdG9yID09ICIiICYmIGxlbih2LnZhbHVlcykgPT0gMCB7CisJCXJldHVybiAiIiwgbmlsCisJfQorCisJaWYgdi5vcGVyYXRvciA9PSAib3IiIHx8IHYub3BlcmF0b3IgPT0gImFuZCIgeworCQlyZXR1cm4gZ2wudHJhbnNsYXRlQ29ublBPcCh2Lm9wZXJhdG9yLCB2LnZhbHVlcywgZ2wuZ2V0UHJlZGljYXRlU3RyaW5nKQorCX0KKwlyZXR1cm4gZ2wudHJhbnNsYXRlUFZhbHVlKHYub3BlcmF0b3IsIHYudmFsdWVzKQorfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIHRyYW5zbGF0ZUNvbm5QT3Aob3BlcmF0b3Igc3RyaW5nLCB2YWx1ZXMgW11pbnRlcmZhY2V7fSwgdHJhbnNsYXRvciBmdW5jKGludGVyZmFjZXt9KSAoc3RyaW5nLCBlcnJvcikpIChzdHJpbmcsIGVycm9yKSB7CisJYXJnMSwgZXJyIDo9IHRyYW5zbGF0b3IodmFsdWVzWzBdKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gIiIsIGVycgorCX0KKwlhcmcyLCBlcnIgOj0gdHJhbnNsYXRvcih2YWx1ZXNbMV0pCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiAiIiwgZXJyCisJfQorCXJldHVybiBhcmcxICsgIi4iICsgb3BlcmF0b3IgKyAiKCIgKyBhcmcyICsgIikiLCBuaWwKK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSBnZXRQcmVkaWNhdGVTdHJpbmcodiBpbnRlcmZhY2V7fSkgKHN0cmluZywgZXJyb3IpIHsKKwlpZiB2YWwsIG9rIDo9IHYuKHRleHRQKTsgb2sgeworCQlyZXR1cm4gZ2wudHJhbnNsYXRlVGV4dFByZWRpY2F0ZSgmdmFsKQorCX0KKwlpZiB2YWwsIG9rIDo9IHYuKCp0ZXh0UCk7IG9rIHsKKwkJcmV0dXJuIGdsLnRyYW5zbGF0ZVRleHRQcmVkaWNhdGUodmFsKQorCX0KKwlpZiB2YWwsIG9rIDo9IHYuKHApOyBvayB7CisJCXJldHVybiBnbC50cmFuc2xhdGVQcmVkaWNhdGUoJnZhbCkKKwl9CisJcmV0dXJuIGdsLnRyYW5zbGF0ZVByZWRpY2F0ZSh2LigqcCkpCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgdHJhbnNsYXRlUFZhbHVlKG9wZXJhdG9yIHN0cmluZywgdmFsdWVzIFtdaW50ZXJmYWNle30pIChzdHJpbmcsIGVycm9yKSB7CisJc2IgOj0gc3RyaW5ncy5CdWlsZGVye30KKwlzYi5Xcml0ZVN0cmluZyhvcGVyYXRvciArICIoIikKKworCWlmIGxlbih2YWx1ZXMpID4gMSAmJiBvcGVyYXRvciAhPSAiYmV0d2VlbiIgJiYgb3BlcmF0b3IgIT0gImluc2lkZSIgeworCQlzYi5Xcml0ZVN0cmluZygiWyIpCisJfQorCisJZm9yIGksIGFyZyA6PSByYW5nZSB2YWx1ZXMgeworCQlhcmdTdHJpbmcsIGVyciA6PSBnbC5hcmdBc1N0cmluZyhhcmcpCisJCWlmIGVyciAhPSBuaWwgeworCQkJcmV0dXJuICIiLCBlcnIKKwkJfQorCQlzYi5Xcml0ZVN0cmluZyhhcmdTdHJpbmcpCisJCWlmIGkgPCBsZW4odmFsdWVzKS0xICYmIGFyZ1N0cmluZyAhPSAiIiB7CisJCQlzYi5Xcml0ZVN0cmluZygiLCIpCisJCX0KKwl9CisKKwlpZiBsZW4odmFsdWVzKSA+IDEgJiYgb3BlcmF0b3IgIT0gImJldHdlZW4iICYmIG9wZXJhdG9yICE9ICJpbnNpZGUiIHsKKwkJc2IuV3JpdGVTdHJpbmcoIl0iKQorCX0KKwlzYi5Xcml0ZVN0cmluZygiKSIpCisKKwlyZXR1cm4gc2IuU3RyaW5nKCksIG5pbAorfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIGFzUGFyYW1ldGVyKGFyZyBpbnRlcmZhY2V7fSkgc3RyaW5nIHsKKwlwYXJhbU5hbWUgOj0gZm10LlNwcmludGYoIl8lZCIsIGdsLnBhcmFtQ291bnQuTG9hZCgpKQorCWdsLnBhcmFtQ291bnQuQWRkKDEpCisJZ2wucGFyYW1ldGVyc1twYXJhbU5hbWVdID0gYXJnCisJcmV0dXJuIHBhcmFtTmFtZQorfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIEdldEdyZW1saW4oYXJnIC4uLnN0cmluZykgc3RyaW5nIHsKKwl2YXIgZyBzdHJpbmcKKwlncmVtbGluIDo9IHN0cmluZ3MuSm9pbihnbC5ncmVtbGluLCAiIikKKwlpZiBsZW4oYXJnKSA9PSAwIHsKKwkJZyA9ICJnIgorCX0gZWxzZSB7CisJCWcgPSBhcmdbMF0KKwl9CisJLy8gc3BlY2lhbCBoYW5kbGluZyBmb3IgQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbAorCWlmIGxlbihnbC5ncmVtbGluKSAhPSAwICYmIHN0cmluZyhncmVtbGluWzBdKSAhPSAiLiIgeworCQlyZXR1cm4gZ3JlbWxpbgorCX0KKwlyZXR1cm4gZyArIGdyZW1saW4KK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSBHZXRQYXJhbWV0ZXJzKCkgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSB7CisJcmV0dXJuIGdsLnBhcmFtZXRlcnMKK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSBBZGRHKGcgc3RyaW5nKSB7CisJZ2wucGFyYW1ldGVyc1siZyJdID0gZworfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIFJlc2V0KCkgeworCWdsLnBhcmFtQ291bnQuU3RvcmUoMCkKK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSBBZGRTb3VyY2UobmFtZSBzdHJpbmcsIGFyZ3VtZW50cyAuLi5pbnRlcmZhY2V7fSkgeworCWlmIChuYW1lID09ICJ3aXRoU3RyYXRlZ2llcyIgfHwgbmFtZSA9PSAid2l0aG91dFN0cmF0ZWdpZXMiKSAmJiBsZW4oYXJndW1lbnRzKSAhPSAwIHsKKwkJYXJncyA6PSBnbC5idWlsZFN0cmF0ZWd5QXJncyhhcmd1bWVudHMuLi4pCisJCS8vIHBvc3NpYmxlIHRvIGhhdmUgZW1wdHkgc3RyYXRlZ2llcyBsaXN0IHRvIHNlbmQKKwkJaWYgbGVuKGFyZ3MpICE9IDAgeworCQkJaWYgbmFtZSA9PSAid2l0aG91dFN0cmF0ZWdpZXMiIHsKKwkJCQlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sICIud2l0aG91dFN0cmF0ZWdpZXMoIikKKwkJCX0gZWxzZSB7CisJCQkJZ2wuZ3JlbWxpbiA9IGFwcGVuZChnbC5ncmVtbGluLCAiLndpdGhTdHJhdGVnaWVzKCIpCisJCQl9CisJCQlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sIGFyZ3MpCisJCQlnbC5ncmVtbGluID0gYXBwZW5kKGdsLmdyZW1saW4sICIpIikKKwkJfQorCQlyZXR1cm4KKwl9CisJZ2wuYWRkVG9HcmVtbGluKG5hbWUsIGFyZ3VtZW50cykKK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSBidWlsZFN0cmF0ZWd5QXJncyhhcmdzIC4uLmludGVyZmFjZXt9KSBzdHJpbmcgeworCXNiIDo9IHN0cmluZ3MuQnVpbGRlcnt9CisJYyA6PSAwCisJZm9yIF8sIGFyZyA6PSByYW5nZSBhcmdzIHsKKwkJaWYgYyA+IDAgeworCQkJc2IuV3JpdGVTdHJpbmcoIiwiKQorCQl9CisJCXN0cmF0ZWd5LCBvayA6PSBhcmcuKCp0cmF2ZXJzYWxTdHJhdGVneSkKKwkJaWYgIW9rIHsKKwkJCS8vIGVycm9yPworCQkJY29udGludWUKKwkJfQorCQkvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciBPcHRpb25zU3RyYXRlZ3kKKwkJaWYgc3RyYXRlZ3kubmFtZSA9PSAiT3B0aW9uc1N0cmF0ZWd5IiB7CisJCQlnbC5vcHRpb25zU3RyYXRlZ2llcyA9IGFwcGVuZChnbC5vcHRpb25zU3RyYXRlZ2llcywgc3RyYXRlZ3kpCisJCQljb250aW51ZQorCQl9CisJCWlmIGxlbihzdHJhdGVneS5jb25maWd1cmF0aW9uKSA9PSAwIHsKKwkJCXNiLldyaXRlU3RyaW5nKHN0cmF0ZWd5Lm5hbWUpCisJCX0gZWxzZSB7CisJCQlzYi5Xcml0ZVN0cmluZygibmV3ICIpCisJCQlzYi5Xcml0ZVN0cmluZyhzdHJhdGVneS5uYW1lKQorCQkJc2IuV3JpdGVTdHJpbmcoIigiKQorCQkJY3QgOj0gMAorCQkJZm9yIGtleSwgdmFsIDo9IHJhbmdlIHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb24geworCQkJCWlmIGN0ID4gMCB7CisJCQkJCXNiLldyaXRlU3RyaW5nKCIsIikKKwkJCQl9CisJCQkJc2IuV3JpdGVTdHJpbmcoa2V5KQorCQkJCXNiLldyaXRlU3RyaW5nKCI6IikKKwkJCQl0cmF2ZXJzYWwsIG9rIDo9IHZhbC4oKlRyYXZlcnNhbCkKKwkJCQlpZiBvayB7CisJCQkJCXN0cmluZ1RyYXZlcnNhbCwgXyA6PSBnbC5hcmdBc1N0cmluZyh0cmF2ZXJzYWwuR3JlbWxpbkxhbmcpCisJCQkJCXNiLldyaXRlU3RyaW5nKHN0cmluZ1RyYXZlcnNhbCkKKwkJCQl9IGVsc2UgeworCQkJCQlzdHJpbmdBcmcsIF8gOj0gZ2wuYXJnQXNTdHJpbmcodmFsKQorCQkJCQlzYi5Xcml0ZVN0cmluZyhzdHJpbmdBcmcpCisJCQkJfQorCQkJCWN0KysKKwkJCX0KKwkJCXNiLldyaXRlU3RyaW5nKCIpIikKKwkJfQorCQljKysKKwl9CisJcmV0dXJuIHNiLlN0cmluZygpCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgQWRkU3RlcChzdGVwTmFtZSBzdHJpbmcsIGFyZ3VtZW50cyAuLi5pbnRlcmZhY2V7fSkgZXJyb3IgeworCWVyciA6PSBnbC5hZGRUb0dyZW1saW4oc3RlcE5hbWUsIGFyZ3VtZW50cykKKwlyZXR1cm4gZXJyCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgR2V0T3B0aW9uc1N0cmF0ZWdpZXMoKSBbXSp0cmF2ZXJzYWxTdHJhdGVneSB7CisJcmV0dXJuIGdsLm9wdGlvbnNTdHJhdGVnaWVzCit9CisKK2Z1bmMgKGdsICpHcmVtbGluTGFuZykgSXNFbXB0eSgpIGJvb2wgeworCXJldHVybiBsZW4oZ2wuZ3JlbWxpbikgPT0gMAorfQorCitmdW5jIChnbCAqR3JlbWxpbkxhbmcpIGZsYXR0ZW5Bcmd1bWVudHMoYXJndW1lbnRzIC4uLmludGVyZmFjZXt9KSBbXWludGVyZmFjZXt9IHsKKwlpZiBhcmd1bWVudHMgPT0gbmlsIHx8IGxlbihhcmd1bWVudHMpID09IDAgeworCQlyZXR1cm4gZ2wuZW1wdHlBcnJheQorCX0KKwlmbGF0QXJncyA6PSBtYWtlKFtdaW50ZXJmYWNle30sIDApCisJZm9yIF8sIGFyZ3VtZW50IDo9IHJhbmdlIGFyZ3VtZW50cyB7CisJCWFyZywgb2sgOj0gYXJndW1lbnQuKFtdaW50ZXJmYWNle30pCisJCWlmIG9rIHsKKwkJCWZvciBfLCBuZXN0ZWRBcmcgOj0gcmFuZ2UgYXJnIHsKKwkJCQlfLCBpc1VVSUQgOj0gbmVzdGVkQXJnLih1dWlkLlVVSUQpCisJCQkJaWYgaXNVVUlEIHsKKwkJCQkJZmxhdEFyZ3MgPSBhcHBlbmQoZmxhdEFyZ3MsIG5lc3RlZEFyZykKKwkJCQl9IGVsc2UgeworCQkJCQljb252ZXJ0ZWQsIF8gOj0gZ2wuY29udmVydEFyZ3VtZW50KG5lc3RlZEFyZykKKwkJCQkJZmxhdEFyZ3MgPSBhcHBlbmQoZmxhdEFyZ3MsIGNvbnZlcnRlZCkKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQljb252ZXJ0ZWQsIF8gOj0gZ2wuY29udmVydEFyZ3VtZW50KGFyZ3VtZW50KQorCQkJZmxhdEFyZ3MgPSBhcHBlbmQoZmxhdEFyZ3MsIGNvbnZlcnRlZCkKKwkJfQorCX0KKwlyZXR1cm4gZmxhdEFyZ3MKK30KKworZnVuYyAoZ2wgKkdyZW1saW5MYW5nKSBjb252ZXJ0QXJndW1lbnQoYXJnIGludGVyZmFjZXt9KSAoaW50ZXJmYWNle30sIGVycm9yKSB7CisJaWYgYXJnID09IG5pbCB7CisJCXJldHVybiBuaWwsIG5pbAorCX0KKwlzd2l0Y2ggdiA6PSBhcmcuKHR5cGUpIHsKKwljYXNlICpUcmF2ZXJzYWw6CisJCWlmIHYuZ3JhcGggIT0gbmlsIHsKKwkJCXJldHVybiBuaWwsIGZtdC5FcnJvcmYoInRoZSBjaGlsZCB0cmF2ZXJzYWwgb2YgJXMgd2FzIG5vdCBzcGF3bmVkIGFub255bW91c2x5IC0gIisKKwkJCQkidXNlIHRoZSBfXyBjbGFzcyByYXRoZXIgdGhhbiBhIFRyYXZlcnNhbFNvdXJjZSB0byBjb25zdHJ1Y3QgdGhlIGNoaWxkIHRyYXZlcnNhbCIsIGFyZykKKwkJfQorCQlyZXR1cm4gdi5HcmVtbGluTGFuZywgbmlsCisJZGVmYXVsdDoKKwkJc3dpdGNoIHJlZmxlY3QuVHlwZU9mKGFyZykuS2luZCgpIHsKKwkJY2FzZSByZWZsZWN0Lk1hcDoKKwkJCWFyZ01hcCA6PSByZWZsZWN0LlZhbHVlT2YoYXJnKQorCQkJbmV3TWFwIDo9IG1ha2UobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9LCBhcmdNYXAuTGVuKCkpCisJCQlmb3IgXywga2V5IDo9IHJhbmdlIGFyZ01hcC5NYXBLZXlzKCkgeworCQkJCWNvbnZlcnRLZXksIF8gOj0gZ2wuY29udmVydEFyZ3VtZW50KGtleS5JbnRlcmZhY2UoKSkKKwkJCQljb252ZXJ0VmFsdWUsIF8gOj0gZ2wuY29udmVydEFyZ3VtZW50KGFyZ01hcC5NYXBJbmRleChrZXkpLkludGVyZmFjZSgpKQorCQkJCW5ld01hcFtjb252ZXJ0S2V5XSA9IGNvbnZlcnRWYWx1ZQorCQkJfQorCQkJcmV0dXJuIG5ld01hcCwgbmlsCisJCWNhc2UgcmVmbGVjdC5BcnJheSwgcmVmbGVjdC5TbGljZToKKwkJCV8sIGlzVVVJRCA6PSBhcmcuKHV1aWQuVVVJRCkKKwkJCWlmIGlzVVVJRCB7CisJCQkJcmV0dXJuIGFyZywgbmlsCisJCQl9CisJCQlhcmdMaXN0IDo9IHJlZmxlY3QuVmFsdWVPZihhcmcpCisJCQluZXdMaXN0IDo9IG1ha2UoW11pbnRlcmZhY2V7fSwgYXJnTGlzdC5MZW4oKSkKKwkJCWZvciBpIDo9IDA7IGkgPCBhcmdMaXN0LkxlbigpOyBpKysgeworCQkJCWNvbnZlcnRWYWx1ZSwgXyA6PSBnbC5jb252ZXJ0QXJndW1lbnQoYXJnTGlzdC5JbmRleChpKS5JbnRlcmZhY2UoKSkKKwkJCQluZXdMaXN0W2ldID0gY29udmVydFZhbHVlCisJCQl9CisJCQlyZXR1cm4gbmV3TGlzdCwgbmlsCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gYXJnLCBuaWwKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL2dyZW1saW5sYW5nX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9ncmVtbGlubGFuZ190ZXN0LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5Y2I1ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9ncmVtbGlubGFuZ190ZXN0LmdvCkBAIC0wLDAgKzEsNzU0IEBACisvKgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworcGFja2FnZSBncmVtbGluZ28KKworaW1wb3J0ICgKKwkibWF0aCIKKwkicmVnZXhwIgorCSJ0ZXN0aW5nIgorCSJ0aW1lIgorCisJImdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQiCispCisKK2Z1bmMgVGVzdF9HcmVtbGluTGFuZyh0ICp0ZXN0aW5nLlQpIHsKKwl0eXBlIHRlc3Qgc3RydWN0IHsKKwkJbmFtZSAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcKKwkJYXNzZXJ0ICAgICAgICAgICAgICAgICAgICBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwKKwkJZXF1YWxzICAgICAgICAgICAgICAgICAgICBzdHJpbmcKKwkJb25seSAgICAgICAgICAgICAgICAgICAgICBib29sCisJCXNraXAgICAgICAgICAgICAgICAgICAgICAgYm9vbAorCQl3YW50RXJyICAgICAgICAgICAgICAgICAgIGJvb2wKKwkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtcyBib29sCisJfQorCXRlc3RzIDo9IFtddGVzdHsKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkgfSwKKwkJCWVxdWFsczogImcuVigpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCIxIiwgIjIiLCAiMyIsICI0IikgfSwKKwkJCWVxdWFsczogImcuVihcIjFcIixcIjJcIixcIjNcIixcIjRcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7IHJldHVybiBnLlYoIjMiKS5WYWx1ZU1hcCh0cnVlKSB9LAorCQkJZXF1YWxzOiAiZy5WKFwiM1wiKS52YWx1ZU1hcCh0cnVlKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigpLkNvbnN0YW50KDUpIH0sCisJCQllcXVhbHM6ICJnLlYoKS5jb25zdGFudCg1KSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigpLkNvbnN0YW50KDEuNSkgfSwKKwkJCWVxdWFsczogImcuVigpLmNvbnN0YW50KDEuNUQpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkuQ29uc3RhbnQoIkhlbGxvIikgfSwKKwkJCWVxdWFsczogImcuVigpLmNvbnN0YW50KFwiSGVsbG9cIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7IHJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLkxpbWl0KDUpIH0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikubGltaXQoNSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7IHJldHVybiBnLlYoKS5IYXNMYWJlbChQLldpdGhpbigiYSIsICJiIiwgImMiKSkgfSwKKwkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKHdpdGhpbihbXCJhXCIsXCJiXCIsXCJjXCJdKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IiwgImNvbnRpbmVudCIpLk91dCgpLkxpbWl0KDUpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIsXCJjb250aW5lbnRcIikub3V0KCkubGltaXQoNSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3V0KCkuVmFsdWVzKCJjb2RlIikuTGltaXQoNSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikub3V0KCkudmFsdWVzKFwiY29kZVwiKS5saW1pdCg1KSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCIzIikuQXMoImEiKS5PdXQoInJvdXRlIikuTGltaXQoMTApLldoZXJlKFAuRXEoImEiKSkuQnkoInJlZ2lvbiIpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiM1wiKS5hcyhcImFcIikub3V0KFwicm91dGVcIikubGltaXQoMTApLndoZXJlKGVxKFwiYVwiKSkuYnkoXCJyZWdpb25cIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uT3V0KCJyb3V0ZSIpLlNpbXBsZVBhdGgoKSkuVGltZXMoMikuUGF0aCgpLkJ5KCJjb2RlIikKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoXCIzXCIpLnJlcGVhdChfXy5vdXQoXCJyb3V0ZVwiKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDIpLnBhdGgoKS5ieShcImNvZGVcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3V0KCkuSGFzKCJyZWdpb24iLCAiVVMtVFgiKS5WYWx1ZXMoImNvZGUiKS5MaW1pdCg1KQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS5vdXQoKS5oYXMoXCJyZWdpb25cIixcIlVTLVRYXCIpLnZhbHVlcyhcImNvZGVcIikubGltaXQoNSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuVW5pb24oVF9fLlZhbHVlcygiY2l0eSIpLCBUX18uVmFsdWVzKCJyZWdpb24iKSkuTGltaXQoNSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikudW5pb24oX18udmFsdWVzKFwiY2l0eVwiKSxfXy52YWx1ZXMoXCJyZWdpb25cIikpLmxpbWl0KDUpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCIzIikuQXMoImEiKS5PdXQoInJvdXRlIiwgInJvdXRlcyIpIH0sCisJCQllcXVhbHM6ICJnLlYoXCIzXCIpLmFzKFwiYVwiKS5vdXQoXCJyb3V0ZVwiLFwicm91dGVzXCIpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkuV2hlcmUoVF9fLlZhbHVlcygicnVud2F5cyIpLklzKDUpKSB9LAorCQkJZXF1YWxzOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwicnVud2F5c1wiKS5pcyg1KSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5VbnRpbChUX18uSGFzKCJjb2RlIiwgIkFHUiIpKS5QYXRoKCkuQnkoImNvZGUiKS5MaW1pdCg1KQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikucmVwZWF0KF9fLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwiY29kZVwiLFwiQUdSXCIpKS5wYXRoKCkuYnkoXCJjb2RlXCIpLmxpbWl0KDUpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KFRfXy5JZCgpKSB9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLm9yZGVyKCkuYnkoX18uaWQoKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7IHJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk9yZGVyKCkuQnkoVC5JZCkgfSwKKwkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS5vcmRlcigpLmJ5KFQuaWQpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk9yZGVyKCkuQnkoVF9fLklkKCksIE9yZGVyLkRlc2MpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLm9yZGVyKCkuYnkoX18uaWQoKSxPcmRlci5kZXNjKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KCJjb2RlIiwgT3JkZXIuRGVzYykKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikub3JkZXIoKS5ieShcImNvZGVcIixPcmRlci5kZXNjKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCIxIiwgIjIiLCAiMyIpLkxvY2FsKFRfXy5PdXQoKS5PdXQoKS5EZWR1cCgpLkZvbGQoKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoXCIxXCIsXCIyXCIsXCIzXCIpLmxvY2FsKF9fLm91dCgpLm91dCgpLmRlZHVwKCkuZm9sZCgpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCIzIikuT3V0KCkuUGF0aCgpLkNvdW50KFNjb3BlLkxvY2FsKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikub3V0KCkucGF0aCgpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5FKCkuQ291bnQoKQorCQkJfSwKKwkJCWVxdWFsczogImcuRSgpLmNvdW50KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiNSIpLk91dEUoInJvdXRlIikuSW5WKCkuUGF0aCgpLkxpbWl0KDEwKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjVcIikub3V0RShcInJvdXRlXCIpLmluVigpLnBhdGgoKS5saW1pdCgxMCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiNSIpLlByb3BlcnR5TWFwKCkuU2VsZWN0KENvbHVtbi5LZXlzKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjVcIikucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoIjUiKS5Qcm9wZXJ0eU1hcCgpLlNlbGVjdChDb2x1bW4uVmFsdWVzKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjVcIikucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLlZhbHVlcygicnVud2F5cyIpLk1hdGgoIl8gKyAxIikKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoXCIzXCIpLnZhbHVlcyhcInJ1bndheXNcIikubWF0aChcIl8gKyAxXCIpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoIjMiKS5FbWl0KCkuUmVwZWF0KFRfXy5PdXQoKS5TaW1wbGVQYXRoKCkpLlRpbWVzKDMpLkxpbWl0KDUpLlBhdGgoKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDMpLmxpbWl0KDUpLnBhdGgoKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuTWF0Y2goVF9fLkFzKCJhIikuSGFzKCJjb2RlIiwgIkxIUiIpLkFzKCJiIikpLlNlbGVjdCgiYiIpLkJ5KCJjb2RlIikKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwiY29kZVwiLFwiTEhSXCIpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKS5ieShcImNvZGVcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygidGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5IiwgInJlcGVhdCIpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwidGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5XCIsXCJyZXBlYXRcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMSIpLkFkZEUoInRlc3QiKS5UbyhUX18uVigiNCIpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjFcIikuYWRkRShcInRlc3RcIikudG8oX18uVihcIjRcIikpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5WYWx1ZXMoInJ1bndheXMiKS5NYXgoKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLnZhbHVlcyhcInJ1bndheXNcIikubWF4KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLlZhbHVlcygicnVud2F5cyIpLk1pbigpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkudmFsdWVzKFwicnVud2F5c1wiKS5taW4oKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuVmFsdWVzKCJydW53YXlzIikuU3VtKCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS52YWx1ZXMoXCJydW53YXlzXCIpLnN1bSgpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5WYWx1ZXMoInJ1bndheXMiKS5NZWFuKCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS52YWx1ZXMoXCJydW53YXlzXCIpLm1lYW4oKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5XaXRoU2FjaygwKS5WKCIzIiwgIjUiKS5TYWNrKE9wZXJhdG9yLlN1bSkuQnkoInJ1bndheXMiKS5TYWNrKCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLndpdGhTYWNrKDApLlYoXCIzXCIsXCI1XCIpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcInJ1bndheXNcIikuc2FjaygpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLkluamVjdCgzLCA0LCA1KQorCQkJfSwKKwkJCWVxdWFsczogImcuaW5qZWN0KDMsNCw1KSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCA0LCA1fSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLmluamVjdChbMyw0LDVdKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5JbmplY3QoMywgNCwgNSkuQ291bnQoKQorCQkJfSwKKwkJCWVxdWFsczogImcuaW5qZWN0KDMsNCw1KS5jb3VudCgpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoInJ1bndheXMiLCBQLkd0KDUpKS5Db3VudCgpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwicnVud2F5c1wiLGd0KDUpKS5jb3VudCgpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoInJ1bndheXMiLCBQLkx0ZSg1LjMpKS5Db3VudCgpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwicnVud2F5c1wiLGx0ZSg1LjNEKSkuY291bnQoKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJjb2RlIiwgUC5XaXRoaW4oMTIzLCAxMjQpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhcyhcImNvZGVcIix3aXRoaW4oWzEyMywxMjRdKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygiY29kZSIsIFAuV2l0aGluKDEyMywgImFiYyIpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhcyhcImNvZGVcIix3aXRoaW4oWzEyMyxcImFiY1wiXSkpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoImNvZGUiLCBQLldpdGhpbigiYWJjIiwgMTIzKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJjb2RlXCIsd2l0aGluKFtcImFiY1wiLDEyM10pKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJjb2RlIiwgUC5XaXRoaW4oImFiYyIsICJ4eXoiKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJjb2RlXCIsd2l0aGluKFtcImFiY1wiLFwieHl6XCJdKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMSIsICIyIikuSGFzKCJyZWdpb24iLCBQLldpdGhpbigiVVMtVFgiLCAiVVMtR0EiKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoXCIxXCIsXCIyXCIpLmhhcyhcInJlZ2lvblwiLHdpdGhpbihbXCJVUy1UWFwiLFwiVVMtR0FcIl0pKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuQW5kKFRfXy5IYXMoInJ1bndheXMiLCBQLkd0KDUpKSwgVF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIikpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuYW5kKF9fLmhhcyhcInJ1bndheXNcIixndCg1KSksX18uaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLlVuaW9uKFRfXy5IYXMoInJ1bndheXMiLCBQLkd0KDUpKSwgVF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIikpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkudW5pb24oX18uaGFzKFwicnVud2F5c1wiLGd0KDUpKSxfXy5oYXMoXCJyZWdpb25cIixcIlVTLVRYXCIpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCIzIikuQ2hvb3NlKFRfXy5WYWx1ZXMoInJ1bndheXMiKS5JcygzKSwgVF9fLkNvbnN0YW50KCJ0aHJlZSIpLCBUX18uQ29uc3RhbnQoIm5vdCB0aHJlZSIpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikuY2hvb3NlKF9fLnZhbHVlcyhcInJ1bndheXNcIikuaXMoMyksX18uY29uc3RhbnQoXCJ0aHJlZVwiKSxfXy5jb25zdGFudChcIm5vdCB0aHJlZVwiKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLkNob29zZShUX18uVmFsdWVzKCJydW53YXlzIikpLk9wdGlvbigxLCBUX18uQ29uc3RhbnQoInRocmVlIikpLk9wdGlvbigyLCBUX18uQ29uc3RhbnQoIm5vdCB0aHJlZSIpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikuY2hvb3NlKF9fLnZhbHVlcyhcInJ1bndheXNcIikpLm9wdGlvbigxLF9fLmNvbnN0YW50KFwidGhyZWVcIikpLm9wdGlvbigyLF9fLmNvbnN0YW50KFwibm90IHRocmVlXCIpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCIzIikuQ2hvb3NlKFRfXy5WYWx1ZXMoInJ1bndheXMiKSkuT3B0aW9uKDEuNSwgVF9fLkNvbnN0YW50KCJvbmUgYW5kIGEgaGFsZiIpKS5PcHRpb24oMiwgVF9fLkNvbnN0YW50KCJub3QgdGhyZWUiKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoXCIzXCIpLmNob29zZShfXy52YWx1ZXMoXCJydW53YXlzXCIpKS5vcHRpb24oMS41RCxfXy5jb25zdGFudChcIm9uZSBhbmQgYSBoYWxmXCIpKS5vcHRpb24oMixfXy5jb25zdGFudChcIm5vdCB0aHJlZVwiKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5VbnRpbChUX18uTG9vcHMoKS5JcygxKSkuQ291bnQoKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikucmVwZWF0KF9fLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18ubG9vcHMoKS5pcygxKSkuY291bnQoKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5MaW1pdCgyMCkuR3JvdXAoKS5CeSgicmVnaW9uIikuQnkoImNvZGUiKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoQ29sdW1uLktleXMpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoXCJhaXJwb3J0XCIpLmxpbWl0KDIwKS5ncm91cCgpLmJ5KFwicmVnaW9uXCIpLmJ5KFwiY29kZVwiKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLmtleXMpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoIjEiKS5BcygiYSIpLlYoIjIiKS5BcygiYSIpLlNlbGVjdChQb3AuQWxsLCAiYSIpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiMVwiKS5hcyhcImFcIikuVihcIjJcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLFwiYVwiKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5BZGRWKCJ0ZXN0IikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2V0LCAicDEiLCAxMCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLmFkZFYoXCJ0ZXN0XCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCxcInAxXCIsMTApIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAicDEiLCAxMCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLmFkZFYoXCJ0ZXN0XCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsXCJwMVwiLDEwKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5BZGRWKCJ0ZXN0IikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCAicDEiLCAxMCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLmFkZFYoXCJ0ZXN0XCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSxcInAxXCIsMTApIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5MaW1pdCg1KS5PcmRlcigpLkJ5KFRfXy5MYWJlbCgpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmxpbWl0KDUpLm9yZGVyKCkuYnkoX18ubGFiZWwoKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLlJhbmdlKDEsIDUpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkucmFuZ2UoMSw1KSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5BZGRWKCJ0ZXN0IikuUHJvcGVydHkoInAxIiwgMTIzKQorCQkJfSwKKwkJCWVxdWFsczogImcuYWRkVihcInRlc3RcIikucHJvcGVydHkoXCJwMVwiLDEyMykiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygiZGF0ZSIsIFAuR3QodGltZS5EYXRlKDIwMjEsIDEsIDEsIDksIDMwLCAwLCAwLCB0aW1lLlVUQykpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhcyhcImRhdGVcIixndChkYXRldGltZShcIjIwMjEtMDEtMDFUMDk6MzA6MDAuMDAwWlwiKSkpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLkFkZEUoInJvdXRlIikuRnJvbShUX18uVigiMSIpKS5UbyhUX18uVigiMiIpKQorCQkJfSwKKwkJCWVxdWFsczogImcuYWRkRShcInJvdXRlXCIpLmZyb20oX18uVihcIjFcIikpLnRvKF9fLlYoXCIyXCIpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5XaXRoU2lkZUVmZmVjdCgiYSIsIFtdaW50ZXJmYWNle317MSwgMn0pLlYoIjMiKS5TZWxlY3QoImEiKQorCQkJfSwKKwkJCWVxdWFsczogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsWzEsMl0pLlYoXCIzXCIpLnNlbGVjdChcImFcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFNpZGVFZmZlY3QoImEiLCAxKS5WKCIzIikuU2VsZWN0KCJhIikKKwkJCX0sCisJCQllcXVhbHM6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLDEpLlYoXCIzXCIpLnNlbGVjdChcImFcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFNpZGVFZmZlY3QoImEiLCAiYWJjIikuVigiMyIpLlNlbGVjdCgiYSIpCisJCQl9LAorCQkJZXF1YWxzOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIixcImFiY1wiKS5WKFwiM1wiKS5zZWxlY3QoXCJhXCIpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoImFpcnBvcnQiLCAicmVnaW9uIiwgIlVTLU5NIikuTGltaXQoMykuVmFsdWVzKCJlbGV2IikuRm9sZCgpLkluZGV4KCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJhaXJwb3J0XCIsXCJyZWdpb25cIixcIlVTLU5NXCIpLmxpbWl0KDMpLnZhbHVlcyhcImVsZXZcIikuZm9sZCgpLmluZGV4KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uVGltZUxpbWl0KDEwMDApLk91dCgpLlNpbXBsZVBhdGgoKSkuVW50aWwoVF9fLkhhcygiY29kZSIsICJBR1IiKSkuUGF0aCgpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiM1wiKS5yZXBlYXQoX18udGltZUxpbWl0KDEwMDApLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwiY29kZVwiLFwiQUdSXCIpKS5wYXRoKCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuV2hlcmUoVF9fLlZhbHVlcygiZWxldiIpLklzKFAuR3QoMTQwMDApKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXNMYWJlbChcImFpcnBvcnRcIikud2hlcmUoX18udmFsdWVzKFwiZWxldlwiKS5pcyhndCgxNDAwMCkpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5XaGVyZShUX18uT3V0KCkuQ291bnQoKS5JcyhQLkd0KDI1MCkpKS5WYWx1ZXMoImNvZGUiKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS53aGVyZShfXy5vdXQoKS5jb3VudCgpLmlzKGd0KDI1MCkpKS52YWx1ZXMoXCJjb2RlXCIpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLkZpbHRlcihUX18uT3V0KCkuQ291bnQoKS5JcyhQLkd0KDI1MCkpKS5WYWx1ZXMoImNvZGUiKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKFwiYWlycG9ydFwiKS5maWx0ZXIoX18ub3V0KCkuY291bnQoKS5pcyhndCgyNTApKSkudmFsdWVzKFwiY29kZVwiKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5XaXRoU2FjaygwKS4KKwkJCQkJVigiMyIpLgorCQkJCQlSZXBlYXQoVF9fLk91dEUoInJvdXRlIikuU2FjayhPcGVyYXRvci5TdW0pLkJ5KCJkaXN0IikuSW5WKCkpLgorCQkJCQlVbnRpbChUX18uSGFzKCJjb2RlIiwgIkFHUiIpLk9yKCkuTG9vcHMoKS5Jcyg0KSkuCisJCQkJCUhhcygiY29kZSIsICJBR1IiKS4KKwkJCQkJTG9jYWwoVF9fLlVuaW9uKFRfXy5QYXRoKCkuQnkoImNvZGUiKS5CeSgiZGlzdCIpLCBUX18uU2FjaygpKS5Gb2xkKCkpLgorCQkJCQlMaW1pdCgxMCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLndpdGhTYWNrKDApLlYoXCIzXCIpLnJlcGVhdChfXy5vdXRFKFwicm91dGVcIikuc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiZGlzdFwiKS5pblYoKSkudW50aWwoX18uaGFzKFwiY29kZVwiLFwiQUdSXCIpLm9yKCkubG9vcHMoKS5pcyg0KSkuaGFzKFwiY29kZVwiLFwiQUdSXCIpLmxvY2FsKF9fLnVuaW9uKF9fLnBhdGgoKS5ieShcImNvZGVcIikuYnkoXCJkaXN0XCIpLF9fLnNhY2soKSkuZm9sZCgpKS5saW1pdCgxMCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuQWRkVigpLkFzKCJhIikuQWRkVigpLkFzKCJiIikuQWRkRSgia25vd3MiKS5Gcm9tKCJhIikuVG8oImIiKQorCQkJfSwKKwkJCWVxdWFsczogImcuYWRkVigpLmFzKFwiYVwiKS5hZGRWKCkuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuQWRkVigiUGVyc29uIikuQXMoImEiKS5BZGRWKCJQZXJzb24iKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikKKwkJCX0sCisJCQllcXVhbHM6ICJnLmFkZFYoXCJQZXJzb25cIikuYXMoXCJhXCIpLmFkZFYoXCJQZXJzb25cIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiMyIpLlByb2plY3QoIk91dCIsICJJbiIpLkJ5KFRfXy5PdXQoKS5Db3VudCgpKS5CeShUX18uSW4oKS5Db3VudCgpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjNcIikucHJvamVjdChcIk91dFwiLFwiSW5cIikuYnkoX18ub3V0KCkuY291bnQoKSkuYnkoX18uaW4oKS5jb3VudCgpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCI0NCIpLk91dCgpLkFnZ3JlZ2F0ZSgiYSIpLk91dCgpLldoZXJlKFAuV2l0aGluKCJhIikpLlBhdGgoKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjQ0XCIpLm91dCgpLmFnZ3JlZ2F0ZShcImFcIikub3V0KCkud2hlcmUod2l0aGluKFwiYVwiKSkucGF0aCgpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoImRhdGUiLCB0aW1lLkRhdGUoMjAyMSwgMiwgMjIsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJkYXRlXCIsZGF0ZXRpbWUoXCIyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFpcIikpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoImRhdGUiLCBQLldpdGhpbih0aW1lLkRhdGUoMjAyMSwgMiwgMjIsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSwgdGltZS5EYXRlKDIwMjEsIDEsIDEsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwiZGF0ZVwiLHdpdGhpbihbZGF0ZXRpbWUoXCIyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFpcIiksZGF0ZXRpbWUoXCIyMDIxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIildKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygiZGF0ZSIsIFAuQmV0d2Vlbih0aW1lLkRhdGUoMjAyMSwgMSwgMSwgMCwgMCwgMCwgMCwgdGltZS5VVEMpLCB0aW1lLkRhdGUoMjAyMSwgMiwgMjIsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwiZGF0ZVwiLGJldHdlZW4oZGF0ZXRpbWUoXCIyMDIxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIiksZGF0ZXRpbWUoXCIyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFpcIikpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJkYXRlIiwgUC5JbnNpZGUodGltZS5EYXRlKDIwMjEsIDEsIDEsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSwgdGltZS5EYXRlKDIwMjEsIDIsIDIyLCAwLCAwLCAwLCAwLCB0aW1lLlVUQykpKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhcyhcImRhdGVcIixpbnNpZGUoZGF0ZXRpbWUoXCIyMDIxLTAxLTAxVDAwOjAwOjAwLjAwMFpcIiksZGF0ZXRpbWUoXCIyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFpcIikpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJkYXRlIiwgUC5HdCh0aW1lLkRhdGUoMjAyMSwgMSwgMSwgOSwgMzAsIDAsIDAsIHRpbWUuVVRDKSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwiZGF0ZVwiLGd0KGRhdGV0aW1lKFwiMjAyMS0wMS0wMVQwOTozMDowMC4wMDBaXCIpKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygicnVud2F5cyIsIFAuQmV0d2VlbigzLCA1KSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJydW53YXlzXCIsYmV0d2VlbigzLDUpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJydW53YXlzIiwgUC5JbnNpZGUoMywgNSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwicnVud2F5c1wiLGluc2lkZSgzLDUpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCI0NCIpLk91dEUoKS5FbGVtZW50TWFwKCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoXCI0NFwiKS5vdXRFKCkuZWxlbWVudE1hcCgpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoIjQ0IikuVmFsdWVNYXAoKS5CeShUX18uVW5mb2xkKCkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiNDRcIikudmFsdWVNYXAoKS5ieShfXy51bmZvbGQoKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigiNDQiKS5WYWx1ZU1hcCgpLldpdGgoV2l0aE9wdGlvbnMuVG9rZW5zLCBXaXRoT3B0aW9ucy5MYWJlbHMpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiNDRcIikudmFsdWVNYXAoKS53aXRoKFwifnRpbmtlcnBvcC52YWx1ZU1hcC50b2tlbnNcIiwyKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCI0NCIpLlZhbHVlTWFwKCkuV2l0aChXaXRoT3B0aW9ucy5BbGwpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiNDRcIikudmFsdWVNYXAoKS53aXRoKDE1KSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCI0NCIpLlZhbHVlTWFwKCkuV2l0aChXaXRoT3B0aW9ucy5JbmRleGVyKQorCQkJfSwKKwkJCWVxdWFsczogImcuVihcIjQ0XCIpLnZhbHVlTWFwKCkud2l0aChcIn50aW5rZXJwb3AuaW5kZXguaW5kZXhlclwiKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCI0NCIpLlZhbHVlTWFwKCkuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKFwiNDRcIikudmFsdWVNYXAoKS53aXRoKFwifnRpbmtlcnBvcC52YWx1ZU1hcC50b2tlbnNcIikiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpKS5BZGRWKCJ0ZXN0IikKKwkJCX0sCisJCQllcXVhbHM6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLmFkZFYoXCJ0ZXN0XCIpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLldpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogVF9fLkhhcygicmVnaW9uIiwgIlVTLVRYIiksIEVkZ2VzOiBUX18uSGFzTGFiZWwoInJvdXRlIil9KSkuVigpLkNvdW50KCkKKwkJCX0sCisJCQljb250YWluc1JhbmRvbUNsYXNzUGFyYW1zOiB0cnVlLAorCQkJZXF1YWxzOiAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKSxlZGdlczpfXy5oYXNMYWJlbChcInJvdXRlXCIpKSkuVigpLmNvdW50KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShTdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRleFByb3BlcnRpZXM6IFRfXy5IYXNOb3QoInJ1bndheXMiKX0pKS5WKCkuQ291bnQoKQorCQkJfSwKKwkJCWVxdWFsczogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXNOb3QoXCJydW53YXlzXCIpKSkuVigpLmNvdW50KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShTdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBUX18uSGFzKCJyZWdpb24iLCAiVVMtVFgiKSwgVmVydGV4UHJvcGVydGllczogVF9fLkhhc05vdCgicnVud2F5cyIpfSkpLlYoKS5Db3VudCgpCisJCQl9LAorCQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtczogdHJ1ZSwKKwkJCWVxdWFsczogICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcInJlZ2lvblwiLFwiVVMtVFhcIiksdmVydGV4UHJvcGVydGllczpfXy5oYXNOb3QoXCJydW53YXlzXCIpKSkuVigpLmNvdW50KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpLCBTdWJncmFwaFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IFRfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpLCBFZGdlczogVF9fLkhhc0xhYmVsKCJyb3V0ZSIpfSkpLlYoKS5Db3VudCgpCisJCQl9LAorCQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtczogdHJ1ZSwKKwkJCWVxdWFsczogICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwicmVnaW9uXCIsXCJVUy1UWFwiKSxlZGdlczpfXy5oYXNMYWJlbChcInJvdXRlXCIpKSkuVigpLmNvdW50KCkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpLCBTdWJncmFwaFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IFRfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpfSkpLlYoKS5Db3VudCgpCisJCQl9LAorCQkJZXF1YWxzOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcInJlZ2lvblwiLFwiVVMtVFhcIikpKS5WKCkuY291bnQoKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5XaXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kobWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZXZhbHVhdGlvblRpbWVvdXQiOiA1MDB9KSkuVigpLkNvdW50KCkKKwkJCX0sCisJCQkvLyBPcHRpb25zU3RyYXRlZ3kgYXJlIG5vdyBleHRyYWN0ZWQgaW50byByZXF1ZXN0IG1lc3NhZ2UgYW5kIGlzIG5vIGxvbmdlciBzZW50IHdpdGggdGhlIHNjcmlwdAorCQkJZXF1YWxzOiAiZy5WKCkuY291bnQoKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5XaXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShQYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6ICJwYXJ0aXRpb24iLCBXcml0ZVBhcnRpdGlvbjogImEiLCBSZWFkUGFydGl0aW9uczogTmV3U2ltcGxlU2V0KCJhIil9KSkuQWRkVigidGVzdCIpCisJCQl9LAorCQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtczogdHJ1ZSwKKwkJCWVxdWFsczogICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShpbmNsdWRlTWV0YVByb3BlcnRpZXM6ZmFsc2UscGFydGl0aW9uS2V5OlwicGFydGl0aW9uXCIsd3JpdGVQYXJ0aXRpb246XCJhXCIscmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmFkZFYoXCJ0ZXN0XCIpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLldpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneShWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lDb25maWd7fSkpLlYoKS5TaG9ydGVzdFBhdGgoKS5XaXRoKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQiLCBUX18uSGFzKCJuYW1lIiwgInBldGVyIikpCisJCQl9LAorCQkJZXF1YWxzOiAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsX18uaGFzKFwibmFtZVwiLFwicGV0ZXJcIikpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoInAxIiwgVGV4dFAuU3RhcnRpbmdXaXRoKCJmb28iKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJwMVwiLHN0YXJ0aW5nV2l0aChcImZvb1wiKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygicDEiLCBUZXh0UC5FbmRpbmdXaXRoKCJmb28iKSkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJwMVwiLGVuZGluZ1dpdGgoXCJmb29cIikpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXMoInAxIiwgVGV4dFAuQ29udGFpbmluZygiZm9vIikpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwicDFcIixjb250YWluaW5nKFwiZm9vXCIpKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJwMSIsIG5pbCkKKwkJCX0sCisJCQllcXVhbHM6ICJnLlYoKS5oYXMoXCJwMVwiLG51bGwpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5IYXNMYWJlbCgicGVyc29uIikuVmFsdWVzKCJhZ2UiKS5JcyhQLkJldHdlZW4oMjYsIDMwKS5PcihQLkd0KDM0KSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmlzKGJldHdlZW4oMjYsMzApLm9yKGd0KDM0KSkpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLkluamVjdCgxKS5Bc051bWJlcihHVHlwZS5Eb3VibGUpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5pbmplY3QoMSkuYXNOdW1iZXIoR1R5cGUuRE9VQkxFKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5JbmplY3QodXVpZC5NdXN0UGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKQorCQkJfSwKKwkJCWVxdWFsczogImcuaW5qZWN0KFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKwkJfSwKKwkJeworCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeworCQkJCXJldHVybiBnLlYoKS5GaWx0ZXIoVF9fLkhhcygibmFtZSIsIFRleHRQLlN0YXJ0aW5nV2l0aCgibSIpLk9yKFRleHRQLlN0YXJ0aW5nV2l0aCgicCIpKSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIixzdGFydGluZ1dpdGgoXCJtXCIpLm9yKHN0YXJ0aW5nV2l0aChcInBcIikpKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuVigpLkhhcygicGVyc29uIiwgImFnZSIsIFAuV2l0aGluKCkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJhZ2VcIix3aXRoaW4oKSkiLAorCQl9LAorCQl7CisJCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7CisJCQkJcmV0dXJuIGcuSW5qZWN0KG1hdGguTmFOKCkpLklzKFAuRXEobWF0aC5OYU4oKSkpCisJCQl9LAorCQkJZXF1YWxzOiAiZy5pbmplY3QoTmFOKS5pcyhlcShOYU4pKSIsCisJCX0sCisJCXsKKwkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKKwkJCQlyZXR1cm4gZy5WKCkuSGFzKCJuYW1lIiwgIlwibWFya29cblxyXHRcYlxmXCIiKQorCQkJfSwKKwkJCWVxdWFsczogImcuVigpLmhhcyhcIm5hbWVcIixcIlxcXCJtYXJrb1xcblxcclxcdFxcYlxcZlxcXCJcIikiLAorCQl9LAorCX0KKworCXZhciB0ZXN0c1RvUnVuIFtddGVzdAorCisJb25seVRlc3RzIDo9IG1ha2UoW110ZXN0LCAwKQorCWZvciBfLCB0dCA6PSByYW5nZSB0ZXN0cyB7CisJCWlmIHR0Lm9ubHkgeworCQkJb25seVRlc3RzID0gYXBwZW5kKG9ubHlUZXN0cywgdHQpCisJCX0KKwl9CisKKwlpZiBsZW4ob25seVRlc3RzKSA+IDAgeworCQl0ZXN0c1RvUnVuID0gb25seVRlc3RzCisJfSBlbHNlIHsKKwkJdGVzdHNUb1J1biA9IHRlc3RzCisJfQorCisJZm9yIF8sIHR0IDo9IHJhbmdlIHRlc3RzVG9SdW4geworCQlpZiB0dC5za2lwIHsKKwkJCWNvbnRpbnVlCisJCX0KKworCQl0ZXN0TmFtZSA6PSB0dC5uYW1lCisJCWlmIHRlc3ROYW1lID09ICIiIHsKKwkJCXRlc3ROYW1lID0gdHQuZXF1YWxzCisJCX0KKworCQl0LlJ1bih0ZXN0TmFtZSwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJCWcgOj0gTmV3R3JhcGhUcmF2ZXJzYWxTb3VyY2UobmlsLCBuaWwpCisJCQlncmVtbGluTGFuZyA6PSB0dC5hc3NlcnQoZykuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpCisJCQlpZiAhdHQuY29udGFpbnNSYW5kb21DbGFzc1BhcmFtcyAmJiBncmVtbGluTGFuZyAhPSB0dC5lcXVhbHMgeworCQkJCXQuRXJyb3JmKCJHcmVtbGluTGFuZyA9ICV2LCBlcXVhbHMgJXYiLCBncmVtbGluTGFuZywgdHQuZXF1YWxzKQorCQkJfQorCQkJaWYgdHQuY29udGFpbnNSYW5kb21DbGFzc1BhcmFtcyB7CisJCQkJZXF1YWxzUGFyYW1zIDo9IGdldEFyZ3ModHQuZXF1YWxzKQorCQkJCWdvdFBhcmFtcyA6PSBnZXRBcmdzKGdyZW1saW5MYW5nKQorCisJCQkJaWYgbGVuKGVxdWFsc1BhcmFtcykgIT0gbGVuKGdvdFBhcmFtcykgeworCQkJCQl0LkVycm9yZigiR3JlbWxpbkxhbmcgPSAldiwgZXF1YWxzICV2IiwgZ3JlbWxpbkxhbmcsIHR0LmVxdWFscykKKwkJCQl9CisKKwkJCQlmb3IgXywgZXF1YWxzUGFyYW0gOj0gcmFuZ2UgZXF1YWxzUGFyYW1zIHsKKwkJCQkJZm91bmQgOj0gZmFsc2UKKwkJCQkJZm9yIF8sIGdvdFBhcmFtIDo9IHJhbmdlIGdvdFBhcmFtcyB7CisJCQkJCQlpZiBlcXVhbHNQYXJhbSA9PSBnb3RQYXJhbSB7CisJCQkJCQkJZm91bmQgPSB0cnVlCisJCQkJCQkJYnJlYWsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlpZiAhZm91bmQgeworCQkJCQkJdC5FcnJvcmYoInRyYW5zbGF0b3IuVHJhbnNsYXRlKCkgPSAldiwgZXF1YWxzICV2IiwgZ3JlbWxpbkxhbmcsIHR0LmVxdWFscykKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSkKKwl9Cit9CisKK2Z1bmMgZ2V0QXJncyhyZXN1bHQgc3RyaW5nKSBbXXN0cmluZyB7CisJcGF0dGVybiA6PSBgKFx3KzouKj8pYAorCXJlIDo9IHJlZ2V4cC5NdXN0Q29tcGlsZShwYXR0ZXJuKQorCW1hdGNoZXMgOj0gcmUuRmluZEFsbFN0cmluZ1N1Ym1hdGNoKHJlc3VsdCwgLTEpCisKKwlwYXJhbXMgOj0gbWFrZShbXXN0cmluZywgMCkKKwlmb3IgXywgbWF0Y2ggOj0gcmFuZ2UgbWF0Y2hlcyB7CisJCWlmIGxlbihtYXRjaCkgPiAwIHsKKwkJCXBhcmFtcyA9IGFwcGVuZChwYXJhbXMsIG1hdGNoWzBdKQorCQl9CisJfQorCisJcmV0dXJuIHBhcmFtcworfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvaW50ZXJjZXB0b3IuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9pbnRlcmNlcHRvci5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2UwYzhlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvaW50ZXJjZXB0b3IuZ28KQEAgLTAsMCArMSwxMTMgQEAKKy8qCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGdyZW1saW5nbworCitpbXBvcnQgKAorCSJieXRlcyIKKwkiY3J5cHRvL3NoYTI1NiIKKwkiZW5jb2RpbmcvaGV4IgorCSJpbyIKKwkibmV0L2h0dHAiCisJIm5ldC91cmwiCispCisKKy8vIENvbW1vbiBIVFRQIGhlYWRlciBrZXlzCitjb25zdCAoCisJSGVhZGVyQ29udGVudFR5cGUgICAgPSAiQ29udGVudC1UeXBlIgorCUhlYWRlckFjY2VwdCAgICAgICAgID0gIkFjY2VwdCIKKwlIZWFkZXJVc2VyQWdlbnQgICAgICA9ICJVc2VyLUFnZW50IgorCUhlYWRlckFjY2VwdEVuY29kaW5nID0gIkFjY2VwdC1FbmNvZGluZyIKKwlIZWFkZXJBdXRob3JpemF0aW9uICA9ICJBdXRob3JpemF0aW9uIgorKQorCisvLyBIdHRwUmVxdWVzdCByZXByZXNlbnRzIGFuIEhUVFAgcmVxdWVzdCB0aGF0IGNhbiBiZSBtb2RpZmllZCBieSBpbnRlcmNlcHRvcnMuCit0eXBlIEh0dHBSZXF1ZXN0IHN0cnVjdCB7CisJTWV0aG9kICBzdHJpbmcKKwlVUkwgICAgICp1cmwuVVJMCisJSGVhZGVycyBodHRwLkhlYWRlcgorCUJvZHkgICAgYW55Cit9CisKKy8vIE5ld0h0dHBSZXF1ZXN0IGNyZWF0ZXMgYSBuZXcgSHR0cFJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gbWV0aG9kIGFuZCBVUkwuCitmdW5jIE5ld0h0dHBSZXF1ZXN0KG1ldGhvZCwgcmF3VVJMIHN0cmluZykgKCpIdHRwUmVxdWVzdCwgZXJyb3IpIHsKKwl1LCBlcnIgOj0gdXJsLlBhcnNlKHJhd1VSTCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIG5pbCwgZXJyCisJfQorCXJldHVybiAmSHR0cFJlcXVlc3R7CisJCU1ldGhvZDogIG1ldGhvZCwKKwkJVVJMOiAgICAgdSwKKwkJSGVhZGVyczogbWFrZShodHRwLkhlYWRlciksCisJfSwgbmlsCit9CisKKy8vIFRvU3RkUmVxdWVzdCBjb252ZXJ0cyBIdHRwUmVxdWVzdCB0byBhIHN0YW5kYXJkIGh0dHAuUmVxdWVzdCBmb3Igc2lnbmluZy4KKy8vIFJldHVybnMgbmlsIGlmIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBjcmVhdGVkIChpbnZhbGlkIG1ldGhvZCBvciBVUkwpLgorZnVuYyAociAqSHR0cFJlcXVlc3QpIFRvU3RkUmVxdWVzdCgpICgqaHR0cC5SZXF1ZXN0LCBlcnJvcikgeworCXZhciBib2R5IGlvLlJlYWRlcgorCXN3aXRjaCBiIDo9IHIuQm9keS4odHlwZSkgeworCWNhc2UgW11ieXRlOgorCQlib2R5ID0gYnl0ZXMuTmV3UmVhZGVyKGIpCisJZGVmYXVsdDoKKwkJYm9keSA9IGh0dHAuTm9Cb2R5CisJfQorCXJlcSwgZXJyIDo9IGh0dHAuTmV3UmVxdWVzdChyLk1ldGhvZCwgci5VUkwuU3RyaW5nKCksIGJvZHkpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsIGVycgorCX0KKwlyZXEuSGVhZGVyID0gci5IZWFkZXJzCisJcmV0dXJuIHJlcSwgbmlsCit9CisKKy8vIFBheWxvYWRIYXNoIHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIHRoZSByZXF1ZXN0IGJvZHkgZm9yIFNpZ1Y0IHNpZ25pbmcuCitmdW5jIChyICpIdHRwUmVxdWVzdCkgUGF5bG9hZEhhc2goKSBzdHJpbmcgeworCXN3aXRjaCBiIDo9IHIuQm9keS4odHlwZSkgeworCWNhc2UgW11ieXRlOgorCQlpZiBsZW4oYikgPT0gMCB7CisJCQlyZXR1cm4gImUzYjBjNDQyOThmYzFjMTQ5YWZiZjRjODk5NmZiOTI0MjdhZTQxZTQ2NDliOTM0Y2E0OTU5OTFiNzg1MmI4NTUiIC8vIFNIQTI1NiBvZiBlbXB0eSBzdHJpbmcKKwkJfQorCQloIDo9IHNoYTI1Ni5TdW0yNTYoYikKKwkJcmV0dXJuIGhleC5FbmNvZGVUb1N0cmluZyhoWzpdKQorCWRlZmF1bHQ6CisJCXJldHVybiAiZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSIgLy8gU0hBMjU2IG9mIGVtcHR5IHN0cmluZworCX0KK30KKworLy8gUmVxdWVzdEludGVyY2VwdG9yIGlzIGEgZnVuY3Rpb24gdGhhdCBtb2RpZmllcyBhbiBIVFRQIHJlcXVlc3QgYmVmb3JlIGl0IGlzIHNlbnQuCit0eXBlIFJlcXVlc3RJbnRlcmNlcHRvciBmdW5jKCpIdHRwUmVxdWVzdCkgZXJyb3IKKworLy8gU2VyaWFsaXplUmVxdWVzdCByZXR1cm5zIGEgUmVxdWVzdEludGVyY2VwdG9yIHRoYXQgc2VyaWFsaXplcyB0aGUgcmF3ICpSZXF1ZXN0TWVzc2FnZSBib2R5CisvLyB0byBHcmFwaEJpbmFyeSBbXWJ5dGUuIFBsYWNlIHRoaXMgYmVmb3JlIGF1dGggaW50ZXJjZXB0b3JzIChlLmcuLCBTaWdWNEF1dGgpIHRoYXQKKy8vIG5lZWQgdGhlIHNlcmlhbGl6ZWQgYm9keSBieXRlcy4KK2Z1bmMgU2VyaWFsaXplUmVxdWVzdCgpIFJlcXVlc3RJbnRlcmNlcHRvciB7CisJc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmlsKQorCXJldHVybiBmdW5jKHJlcSAqSHR0cFJlcXVlc3QpIGVycm9yIHsKKwkJciwgb2sgOj0gcmVxLkJvZHkuKCpSZXF1ZXN0TWVzc2FnZSkKKwkJaWYgIW9rIHsKKwkJCXJldHVybiBuaWwgLy8gYWxyZWFkeSBzZXJpYWxpemVkIG9yIG5vdCBhICpSZXF1ZXN0TWVzc2FnZQorCQl9CisJCWRhdGEsIGVyciA6PSBzZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2UocikKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwkJcmVxLkJvZHkgPSBkYXRhCisJCXJldHVybiBuaWwKKwl9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9pbnRlcmNlcHRvcl90ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvaW50ZXJjZXB0b3JfdGVzdC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE5NDdhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvaW50ZXJjZXB0b3JfdGVzdC5nbwpAQCAtMCwwICsxLDQ1MCBAQAorLyoKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgZ3JlbWxpbmdvCisKK2ltcG9ydCAoCisJImJ5dGVzIgorCSJmbXQiCisJImlvIgorCSJuZXQvaHR0cCIKKwkibmV0L2h0dHAvaHR0cHRlc3QiCisJInJlZmxlY3QiCisJInN0cmluZ3MiCisJInRlc3RpbmciCisKKwkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L2Fzc2VydCIKKwkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L3JlcXVpcmUiCispCisKKy8vIFRlc3RJbnRlcmNlcHRvclJlY2VpdmVzUmF3UmVxdWVzdCB2ZXJpZmllcyB0aGF0IGludGVyY2VwdG9ycyByZWNlaXZlIHRoZSByYXcgKlJlcXVlc3RNZXNzYWdlCisvLyBvYmplY3QgaW4gSHR0cFJlcXVlc3QuQm9keSwgbm90IHNlcmlhbGl6ZWQgW11ieXRlLgorZnVuYyBUZXN0SW50ZXJjZXB0b3JSZWNlaXZlc1Jhd1JlcXVlc3QodCAqdGVzdGluZy5UKSB7CisJLy8gTW9jayBzZXJ2ZXIgdGhhdCBhY2NlcHRzIHRoZSByZXF1ZXN0ICh3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXNwb25zZSBmb3IgdGhpcyB0ZXN0KQorCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKKwl9KSkKKwlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJLy8gQ3JlYXRlIGNvbm5lY3Rpb24gd2l0aCBub24tbmlsIHNlcmlhbGl6ZXIgKGRlZmF1bHQgYmVoYXZpb3Igb2YgbmV3Q29ubmVjdGlvbikKKwljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgc2VydmVyLlVSTCwgJmNvbm5lY3Rpb25TZXR0aW5nc3t9KQorCisJdmFyIGNhcHR1cmVkQm9keVR5cGUgcmVmbGVjdC5UeXBlCisJdmFyIGNhcHR1cmVkQm9keSBpbnRlcmZhY2V7fQorCisJY29ubi5BZGRJbnRlcmNlcHRvcihmdW5jKHJlcSAqSHR0cFJlcXVlc3QpIGVycm9yIHsKKwkJY2FwdHVyZWRCb2R5ID0gcmVxLkJvZHkKKwkJY2FwdHVyZWRCb2R5VHlwZSA9IHJlZmxlY3QuVHlwZU9mKHJlcS5Cb2R5KQorCQlyZXR1cm4gbmlsCisJfSkKKworCS8vIFN1Ym1pdCBhIHJlcXVlc3Qgd2l0aCBhIGtub3duIGdyZW1saW4gcXVlcnkKKwlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkuY291bnQoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCV8sIF8gPSBycy5BbGwoKSAvLyBkcmFpbiByZXN1bHQgc2V0CisKKwlhc3NlcnQuRXF1YWwodCwgcmVmbGVjdC5UeXBlT2YoKCpSZXF1ZXN0TWVzc2FnZSkobmlsKSksIGNhcHR1cmVkQm9keVR5cGUsCisJCSJpbnRlcmNlcHRvciBzaG91bGQgcmVjZWl2ZSAqUmVxdWVzdE1lc3NhZ2UgaW4gQm9keSwgZ290ICV2IiwgY2FwdHVyZWRCb2R5VHlwZSkKKworCXIsIHR5cGVBc3NlcnRPayA6PSBjYXB0dXJlZEJvZHkuKCpSZXF1ZXN0TWVzc2FnZSkKKwlhc3NlcnQuVHJ1ZSh0LCB0eXBlQXNzZXJ0T2ssICJpbnRlcmNlcHRvciBzaG91bGQgYmUgYWJsZSB0byB0eXBlLWFzc2VydCBCb2R5IHRvICpSZXF1ZXN0TWVzc2FnZSIpCisJaWYgdHlwZUFzc2VydE9rIHsKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLlYoKS5jb3VudCgpIiwgci5HcmVtbGluLAorCQkJImludGVyY2VwdG9yIHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgdGhlIEdyZW1saW4gZmllbGQgZnJvbSB0aGUgcmF3IHJlcXVlc3QiKQorCX0KK30KKworLy8gVGVzdFNpZ1Y0QXV0aFdpdGhTZXJpYWxpemVJbnRlcmNlcHRvciB2ZXJpZmllcyB0aGF0IFNlcmlhbGl6ZVJlcXVlc3QoKSArIFNpZ1Y0QXV0aAorLy8gd29ya3MgaW4gYSBjaGFpbi4gU2VyaWFsaXplUmVxdWVzdCBjb252ZXJ0cyAqUmVxdWVzdE1lc3NhZ2UgdG8gW11ieXRlLCB0aGVuIFNpZ1Y0QXV0aAorLy8gY2FuIHNpZ24gdGhlIHNlcmlhbGl6ZWQgYm9keS4KK2Z1bmMgVGVzdFNpZ1Y0QXV0aFdpdGhTZXJpYWxpemVJbnRlcmNlcHRvcih0ICp0ZXN0aW5nLlQpIHsKKwl2YXIgY2FwdHVyZWRIZWFkZXJzIGh0dHAuSGVhZGVyCisJdmFyIGNhcHR1cmVkQm9keSBbXWJ5dGUKKworCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCWNhcHR1cmVkSGVhZGVycyA9IHIuSGVhZGVyLkNsb25lKCkKKwkJYm9keSwgZXJyIDo9IGlvLlJlYWRBbGwoci5Cb2R5KQorCQlpZiBlcnIgPT0gbmlsIHsKKwkJCWNhcHR1cmVkQm9keSA9IGJvZHkKKwkJfQorCQl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCisJfSkpCisJZGVmZXIgc2VydmVyLkNsb3NlKCkKKworCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCBzZXJ2ZXIuVVJMLCAmY29ubmVjdGlvblNldHRpbmdze30pCisKKwltb2NrUHJvdmlkZXIgOj0gJm1vY2tDcmVkZW50aWFsc1Byb3ZpZGVyeworCQlhY2Nlc3NLZXk6ICJNT0NLX0lEIiwKKwkJc2VjcmV0S2V5OiAiTU9DS19LRVkiLAorCX0KKworCWNvbm4uQWRkSW50ZXJjZXB0b3IoU2VyaWFsaXplUmVxdWVzdCgpKQorCWNvbm4uQWRkSW50ZXJjZXB0b3IoU2lnVjRBdXRoV2l0aENyZWRlbnRpYWxzKCJncmVtbGluLWVhc3QtMSIsICJ0aW5rZXJwb3Atc2lndjQiLCBtb2NrUHJvdmlkZXIpKQorCisJcnMsIGVyciA6PSBjb25uLnN1Ym1pdCgmUmVxdWVzdE1lc3NhZ2V7R3JlbWxpbjogImcuVigpLmNvdW50KCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKwlfLCBfID0gcnMuQWxsKCkgLy8gZHJhaW4KKworCS8vIFNpZ1Y0IHNob3VsZCBoYXZlIGFkZGVkIEF1dGhvcml6YXRpb24gYW5kIFgtQW16LURhdGUgaGVhZGVycworCWFzc2VydC5Ob3RFbXB0eSh0LCBjYXB0dXJlZEhlYWRlcnMuR2V0KCJBdXRob3JpemF0aW9uIiksCisJCSJTaWdWNEF1dGggc2hvdWxkIHNldCBBdXRob3JpemF0aW9uIGhlYWRlciBhZnRlciBTZXJpYWxpemVSZXF1ZXN0IikKKwlhc3NlcnQuTm90RW1wdHkodCwgY2FwdHVyZWRIZWFkZXJzLkdldCgiWC1BbXotRGF0ZSIpLAorCQkiU2lnVjRBdXRoIHNob3VsZCBzZXQgWC1BbXotRGF0ZSBoZWFkZXIiKQorCWFzc2VydC5Db250YWlucyh0LCBjYXB0dXJlZEhlYWRlcnMuR2V0KCJBdXRob3JpemF0aW9uIiksICJBV1M0LUhNQUMtU0hBMjU2IiwKKwkJIkF1dGhvcml6YXRpb24gaGVhZGVyIHNob3VsZCB1c2UgQVdTNC1ITUFDLVNIQTI1NiBzaWduaW5nIGFsZ29yaXRobSIpCisKKwkvLyBCb2R5IHNob3VsZCBiZSB2YWxpZCBzZXJpYWxpemVkIGJ5dGVzCisJYXNzZXJ0Lk5vdEVtcHR5KHQsIGNhcHR1cmVkQm9keSwgImJvZHkgc2hvdWxkIGJlIG5vbi1lbXB0eSBzZXJpYWxpemVkIGJ5dGVzIikKKwlhc3NlcnQuRXF1YWwodCwgYnl0ZSgweDg0KSwgY2FwdHVyZWRCb2R5WzBdLAorCQkiYm9keSBzaG91bGQgc3RhcnQgd2l0aCBHcmFwaEJpbmFyeSB2ZXJzaW9uIGJ5dGUgMHg4NCIpCit9CisKKy8vIFRlc3RTaWdWNEF1dGhfQXV0b1NlcmlhbGl6ZXNJbkNoYWluIHZlcmlmaWVzIHRoYXQgU2lnVjRBdXRoIHdvcmtzIGFzIHRoZSBvbmx5CisvLyBpbnRlcmNlcHRvciDigJQgaXQgYXV0by1zZXJpYWxpemVzICpSZXF1ZXN0TWVzc2FnZSBiZWZvcmUgc2lnbmluZy4KK2Z1bmMgVGVzdFNpZ1Y0QXV0aF9BdXRvU2VyaWFsaXplc0luQ2hhaW4odCAqdGVzdGluZy5UKSB7CisJdmFyIGNhcHR1cmVkSGVhZGVycyBodHRwLkhlYWRlcgorCXZhciBjYXB0dXJlZEJvZHkgW11ieXRlCisKKwlzZXJ2ZXIgOj0gaHR0cHRlc3QuTmV3U2VydmVyKGh0dHAuSGFuZGxlckZ1bmMoZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkgeworCQljYXB0dXJlZEhlYWRlcnMgPSByLkhlYWRlci5DbG9uZSgpCisJCWJvZHksIGVyciA6PSBpby5SZWFkQWxsKHIuQm9keSkKKwkJaWYgZXJyID09IG5pbCB7CisJCQljYXB0dXJlZEJvZHkgPSBib2R5CisJCX0KKwkJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c09LKQorCX0pKQorCWRlZmVyIHNlcnZlci5DbG9zZSgpCisKKwljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgc2VydmVyLlVSTCwgJmNvbm5lY3Rpb25TZXR0aW5nc3t9KQorCisJbW9ja1Byb3ZpZGVyIDo9ICZtb2NrQ3JlZGVudGlhbHNQcm92aWRlcnsKKwkJYWNjZXNzS2V5OiAiTU9DS19JRCIsCisJCXNlY3JldEtleTogIk1PQ0tfS0VZIiwKKwl9CisKKwkvLyBPbmx5IFNpZ1Y0QXV0aCDigJQgbm8gU2VyaWFsaXplUmVxdWVzdCgpIG5lZWRlZAorCWNvbm4uQWRkSW50ZXJjZXB0b3IoU2lnVjRBdXRoV2l0aENyZWRlbnRpYWxzKCJncmVtbGluLWVhc3QtMSIsICJ0aW5rZXJwb3Atc2lndjQiLCBtb2NrUHJvdmlkZXIpKQorCisJcnMsIGVyciA6PSBjb25uLnN1Ym1pdCgmUmVxdWVzdE1lc3NhZ2V7R3JlbWxpbjogImcuVigpLmNvdW50KCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKwlfLCBfID0gcnMuQWxsKCkKKworCWFzc2VydC5Ob3RFbXB0eSh0LCBjYXB0dXJlZEhlYWRlcnMuR2V0KCJBdXRob3JpemF0aW9uIiksCisJCSJTaWdWNEF1dGggc2hvdWxkIHNldCBBdXRob3JpemF0aW9uIGhlYWRlciIpCisJYXNzZXJ0LkNvbnRhaW5zKHQsIGNhcHR1cmVkSGVhZGVycy5HZXQoIkF1dGhvcml6YXRpb24iKSwgIkFXUzQtSE1BQy1TSEEyNTYiKQorCWFzc2VydC5Ob3RFbXB0eSh0LCBjYXB0dXJlZEJvZHksICJib2R5IHNob3VsZCBiZSBub24tZW1wdHkgc2VyaWFsaXplZCBieXRlcyIpCisJYXNzZXJ0LkVxdWFsKHQsIGJ5dGUoMHg4NCksIGNhcHR1cmVkQm9keVswXSwKKwkJImJvZHkgc2hvdWxkIHN0YXJ0IHdpdGggR3JhcGhCaW5hcnkgdmVyc2lvbiBieXRlIDB4ODQiKQorfQorCisvLyBUZXN0TXVsdGlwbGVJbnRlcmNlcHRvcnNfU2VyaWFsaXplVGhlbkF1dGggdmVyaWZpZXMgdGhhdCBhIGN1c3RvbSBpbnRlcmNlcHRvciBjYW4KKy8vIG1vZGlmeSB0aGUgcmF3IHJlcXVlc3QsIHRoZW4gU2VyaWFsaXplUmVxdWVzdCBzZXJpYWxpemVzIGl0LCB0aGVuIEJhc2ljQXV0aCBhZGRzIGhlYWRlcnMuCitmdW5jIFRlc3RNdWx0aXBsZUludGVyY2VwdG9yc19TZXJpYWxpemVUaGVuQXV0aCh0ICp0ZXN0aW5nLlQpIHsKKwl2YXIgY2FwdHVyZWRBdXRoSGVhZGVyIHN0cmluZworCXZhciBjYXB0dXJlZEJvZHkgW11ieXRlCisKKwlzZXJ2ZXIgOj0gaHR0cHRlc3QuTmV3U2VydmVyKGh0dHAuSGFuZGxlckZ1bmMoZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkgeworCQljYXB0dXJlZEF1dGhIZWFkZXIgPSByLkhlYWRlci5HZXQoIkF1dGhvcml6YXRpb24iKQorCQlib2R5LCBlcnIgOj0gaW8uUmVhZEFsbChyLkJvZHkpCisJCWlmIGVyciA9PSBuaWwgeworCQkJY2FwdHVyZWRCb2R5ID0gYm9keQorCQl9CisJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKKwl9KSkKKwlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKworCS8vIEN1c3RvbSBpbnRlcmNlcHRvciB0aGF0IG1vZGlmaWVzIHRoZSByYXcgcmVxdWVzdCBmaWVsZHMKKwljb25uLkFkZEludGVyY2VwdG9yKGZ1bmMocmVxICpIdHRwUmVxdWVzdCkgZXJyb3IgeworCQlyLCBvayA6PSByZXEuQm9keS4oKlJlcXVlc3RNZXNzYWdlKQorCQlpZiAhb2sgeworCQkJcmV0dXJuIGZtdC5FcnJvcmYoImV4cGVjdGVkICpSZXF1ZXN0TWVzc2FnZSwgZ290ICVUIiwgcmVxLkJvZHkpCisJCX0KKwkJLy8gQWRkIGEgY3VzdG9tIGZpZWxkIHRvIHRoZSByZXF1ZXN0CisJCXIuRmllbGRzWyJjdXN0b21GaWVsZCJdID0gImN1c3RvbVZhbHVlIgorCQlyZXR1cm4gbmlsCisJfSkKKworCS8vIFNlcmlhbGl6ZVJlcXVlc3QgY29udmVydHMgdGhlIG1vZGlmaWVkICpSZXF1ZXN0TWVzc2FnZSB0byBbXWJ5dGUKKwljb25uLkFkZEludGVyY2VwdG9yKFNlcmlhbGl6ZVJlcXVlc3QoKSkKKworCS8vIEJhc2ljQXV0aCBhZGRzIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciAod29ya3Mgb24gYW55IGJvZHkgdHlwZSkKKwljb25uLkFkZEludGVyY2VwdG9yKEJhc2ljQXV0aCgiYWRtaW4iLCAic2VjcmV0IikpCisKKwlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKwlfLCBfID0gcnMuQWxsKCkgLy8gZHJhaW4KKworCS8vIEJhc2ljQXV0aCBzaG91bGQgaGF2ZSBzZXQgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyCisJYXNzZXJ0LkVxdWFsKHQsICJCYXNpYyBZV1J0YVc0NmMyVmpjbVYwIiwgY2FwdHVyZWRBdXRoSGVhZGVyLAorCQkiQXV0aG9yaXphdGlvbiBoZWFkZXIgc2hvdWxkIGJlIEJhc2ljIGJhc2U2NChhZG1pbjpzZWNyZXQpIikKKworCS8vIEJvZHkgc2hvdWxkIGJlIHZhbGlkIHNlcmlhbGl6ZWQgYnl0ZXMgKGZyb20gU2VyaWFsaXplUmVxdWVzdCkKKwlhc3NlcnQuTm90RW1wdHkodCwgY2FwdHVyZWRCb2R5LCAiYm9keSBzaG91bGQgYmUgbm9uLWVtcHR5IHNlcmlhbGl6ZWQgYnl0ZXMiKQorCWFzc2VydC5FcXVhbCh0LCBieXRlKDB4ODQpLCBjYXB0dXJlZEJvZHlbMF0sCisJCSJib2R5IHNob3VsZCBzdGFydCB3aXRoIEdyYXBoQmluYXJ5IHZlcnNpb24gYnl0ZSAweDg0IikKK30KKworLy8gVGVzdEludGVyY2VwdG9yX0lvUmVhZGVyQm9keSB2ZXJpZmllcyB0aGF0IGFuIGludGVyY2VwdG9yIGNhbiBzZXQgQm9keSB0byBhbiBpby5SZWFkZXIKKy8vIGFuZCB0aGUgcmVxdWVzdCBpcyBzZW50IGNvcnJlY3RseS4KK2Z1bmMgVGVzdEludGVyY2VwdG9yX0lvUmVhZGVyQm9keSh0ICp0ZXN0aW5nLlQpIHsKKwl2YXIgY2FwdHVyZWRCb2R5IFtdYnl0ZQorCisJc2VydmVyIDo9IGh0dHB0ZXN0Lk5ld1NlcnZlcihodHRwLkhhbmRsZXJGdW5jKGZ1bmModyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKKwkJYm9keSwgZXJyIDo9IGlvLlJlYWRBbGwoci5Cb2R5KQorCQlpZiBlcnIgPT0gbmlsIHsKKwkJCWNhcHR1cmVkQm9keSA9IGJvZHkKKwkJfQorCQl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCisJfSkpCisJZGVmZXIgc2VydmVyLkNsb3NlKCkKKworCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCBzZXJ2ZXIuVVJMLCAmY29ubmVjdGlvblNldHRpbmdze30pCisKKwljdXN0b21QYXlsb2FkIDo9IFtdYnl0ZSgiY3VzdG9tIGJpbmFyeSBwYXlsb2FkIikKKworCS8vIEludGVyY2VwdG9yIHJlcGxhY2VzIEJvZHkgd2l0aCBhbiBpby5SZWFkZXIKKwljb25uLkFkZEludGVyY2VwdG9yKGZ1bmMocmVxICpIdHRwUmVxdWVzdCkgZXJyb3IgeworCQlyZXEuQm9keSA9IGJ5dGVzLk5ld1JlYWRlcihjdXN0b21QYXlsb2FkKQorCQlyZXR1cm4gbmlsCisJfSkKKworCXJzLCBlcnIgOj0gY29ubi5zdWJtaXQoJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCV8sIF8gPSBycy5BbGwoKSAvLyBkcmFpbgorCisJLy8gVGhlIHNlcnZlciBzaG91bGQgcmVjZWl2ZSB0aGUgY3VzdG9tIHBheWxvYWQgZnJvbSB0aGUgaW8uUmVhZGVyCisJYXNzZXJ0LkVxdWFsKHQsIGN1c3RvbVBheWxvYWQsIGNhcHR1cmVkQm9keSwKKwkJInNlcnZlciBzaG91bGQgcmVjZWl2ZSB0aGUgY3VzdG9tIHBheWxvYWQgc2V0IHZpYSBpby5SZWFkZXIiKQorfQorCisvLyBUZXN0SW50ZXJjZXB0b3JfTmlsU2VyaWFsaXplck5vU2VyaWFsaXphdGlvbiB2ZXJpZmllcyB0aGF0IHdoZW4gc2VyaWFsaXplciBpcyBuaWwKKy8vIGFuZCBubyBpbnRlcmNlcHRvciBzZXJpYWxpemVzLCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlIGlzIHByb2R1Y2VkLgorZnVuYyBUZXN0SW50ZXJjZXB0b3JfTmlsU2VyaWFsaXplck5vU2VyaWFsaXphdGlvbih0ICp0ZXN0aW5nLlQpIHsKKwlzZXJ2ZXIgOj0gaHR0cHRlc3QuTmV3U2VydmVyKGh0dHAuSGFuZGxlckZ1bmMoZnVuYyh3IGh0dHAuUmVzcG9uc2VXcml0ZXIsIHIgKmh0dHAuUmVxdWVzdCkgeworCQl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCisJfSkpCisJZGVmZXIgc2VydmVyLkNsb3NlKCkKKworCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCBzZXJ2ZXIuVVJMLCAmY29ubmVjdGlvblNldHRpbmdze30pCisJY29ubi5zZXJpYWxpemVyID0gbmlsIC8vIGV4cGxpY2l0bHkgbmlsIHNlcmlhbGl6ZXIKKworCXJzLCBlcnIgOj0gY29ubi5zdWJtaXQoJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCisJXywgXyA9IHJzLkFsbCgpIC8vIGRyYWluIOKAlCB0aGlzIHRyaWdnZXJzIHRoZSBhc3luYyBleGVjdXRlQW5kU3RyZWFtCisJcnNFcnIgOj0gcnMuR2V0RXJyb3IoKQorCXJlcXVpcmUuRXJyb3IodCwgcnNFcnIsICJzaG91bGQgZ2V0IGFuIGVycm9yIHdoZW4gc2VyaWFsaXplciBpcyBuaWwgYW5kIG5vIGludGVyY2VwdG9yIHNlcmlhbGl6ZXMiKQorCWFzc2VydC5Db250YWlucyh0LCByc0Vyci5FcnJvcigpLCAicmVxdWVzdCBib2R5IHdhcyBub3Qgc2VyaWFsaXplZCIsCisJCSJlcnJvciBtZXNzYWdlIHNob3VsZCBpbmRpY2F0ZSB0aGUgYm9keSB3YXMgbm90IHNlcmlhbGl6ZWQiKQorfQorCisvLyBUZXN0SW50ZXJjZXB0b3JfSHR0cFJlcXVlc3RCb2R5IHZlcmlmaWVzIHRoYXQgYW4gaW50ZXJjZXB0b3IgY2FuIHNldCBCb2R5IHRvICpodHRwLlJlcXVlc3QKKy8vIGFuZCB0aGUgZHJpdmVyIHNlbmRzIGl0IGRpcmVjdGx5LCB1c2luZyB0aGUgKmh0dHAuUmVxdWVzdCdzIGhlYWRlcnMgYW5kIGJvZHkgaW5zdGVhZCBvZgorLy8gSHR0cFJlcXVlc3QuSGVhZGVycy4KK2Z1bmMgVGVzdEludGVyY2VwdG9yX0h0dHBSZXF1ZXN0Qm9keSh0ICp0ZXN0aW5nLlQpIHsKKwl2YXIgY2FwdHVyZWRIZWFkZXJzIGh0dHAuSGVhZGVyCisJdmFyIGNhcHR1cmVkQm9keSBbXWJ5dGUKKworCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCWNhcHR1cmVkSGVhZGVycyA9IHIuSGVhZGVyLkNsb25lKCkKKwkJYm9keSwgZXJyIDo9IGlvLlJlYWRBbGwoci5Cb2R5KQorCQlpZiBlcnIgPT0gbmlsIHsKKwkJCWNhcHR1cmVkQm9keSA9IGJvZHkKKwkJfQorCQl3LldyaXRlSGVhZGVyKGh0dHAuU3RhdHVzT0spCisJfSkpCisJZGVmZXIgc2VydmVyLkNsb3NlKCkKKworCWNvbm4gOj0gbmV3Q29ubmVjdGlvbihuZXdUZXN0TG9nSGFuZGxlcigpLCBzZXJ2ZXIuVVJMLCAmY29ubmVjdGlvblNldHRpbmdze30pCisKKwljdXN0b21Cb2R5IDo9IFtdYnl0ZSgiY3VzdG9tLWh0dHAtcmVxdWVzdC1ib2R5IikKKworCS8vIEludGVyY2VwdG9yIGJ1aWxkcyBhIGNvbXBsZXRlICpodHRwLlJlcXVlc3QgYW5kIHNldHMgaXQgYXMgQm9keQorCWNvbm4uQWRkSW50ZXJjZXB0b3IoZnVuYyhyZXEgKkh0dHBSZXF1ZXN0KSBlcnJvciB7CisJCWh0dHBHb1JlcSwgZXJyIDo9IGh0dHAuTmV3UmVxdWVzdChodHRwLk1ldGhvZFBvc3QsIHJlcS5VUkwuU3RyaW5nKCksIGJ5dGVzLk5ld1JlYWRlcihjdXN0b21Cb2R5KSkKKwkJaWYgZXJyICE9IG5pbCB7CisJCQlyZXR1cm4gZXJyCisJCX0KKwkJaHR0cEdvUmVxLkhlYWRlci5TZXQoIlgtQ3VzdG9tLUhlYWRlciIsICJjdXN0b20tdmFsdWUiKQorCQlodHRwR29SZXEuSGVhZGVyLlNldCgiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpCisJCXJlcS5Cb2R5ID0gaHR0cEdvUmVxCisJCXJldHVybiBuaWwKKwl9KQorCisJLy8gQWxzbyBzZXQgYSBoZWFkZXIgb24gSHR0cFJlcXVlc3QuSGVhZGVycyB0aGF0IHNob3VsZCBOT1QgYXBwZWFyLAorCS8vIGJlY2F1c2UgKmh0dHAuUmVxdWVzdCBib2R5IGJ5cGFzc2VzIEh0dHBSZXF1ZXN0LkhlYWRlcnMKKwljb25uLkFkZEludGVyY2VwdG9yKGZ1bmMocmVxICpIdHRwUmVxdWVzdCkgZXJyb3IgeworCQlyZXEuSGVhZGVycy5TZXQoIlgtU2hvdWxkLU5vdC1BcHBlYXIiLCAiaWdub3JlZCIpCisJCXJldHVybiBuaWwKKwl9KQorCisJcnMsIGVyciA6PSBjb25uLnN1Ym1pdCgmUmVxdWVzdE1lc3NhZ2V7R3JlbWxpbjogImcuVigpIiwgRmllbGRzOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9e319KQorCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIpCisJXywgXyA9IHJzLkFsbCgpIC8vIGRyYWluCisKKwkvLyBUaGUgc2VydmVyIHNob3VsZCByZWNlaXZlIGhlYWRlcnMgZnJvbSB0aGUgKmh0dHAuUmVxdWVzdCwgbm90IGZyb20gSHR0cFJlcXVlc3QuSGVhZGVycworCWFzc2VydC5FcXVhbCh0LCAiY3VzdG9tLXZhbHVlIiwgY2FwdHVyZWRIZWFkZXJzLkdldCgiWC1DdXN0b20tSGVhZGVyIiksCisJCSJzZXJ2ZXIgc2hvdWxkIHJlY2VpdmUgY3VzdG9tIGhlYWRlciBmcm9tICpodHRwLlJlcXVlc3QiKQorCWFzc2VydC5FcXVhbCh0LCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwgY2FwdHVyZWRIZWFkZXJzLkdldCgiQ29udGVudC1UeXBlIiksCisJCSJzZXJ2ZXIgc2hvdWxkIHJlY2VpdmUgQ29udGVudC1UeXBlIGZyb20gKmh0dHAuUmVxdWVzdCIpCisJYXNzZXJ0LkVtcHR5KHQsIGNhcHR1cmVkSGVhZGVycy5HZXQoIlgtU2hvdWxkLU5vdC1BcHBlYXIiKSwKKwkJImhlYWRlcnMgc2V0IG9uIEh0dHBSZXF1ZXN0LkhlYWRlcnMgc2hvdWxkIG5vdCBhcHBlYXIgd2hlbiBCb2R5IGlzICpodHRwLlJlcXVlc3QiKQorCisJLy8gVGhlIHNlcnZlciBzaG91bGQgcmVjZWl2ZSB0aGUgYm9keSBmcm9tIHRoZSAqaHR0cC5SZXF1ZXN0CisJYXNzZXJ0LkVxdWFsKHQsIGN1c3RvbUJvZHksIGNhcHR1cmVkQm9keSwKKwkJInNlcnZlciBzaG91bGQgcmVjZWl2ZSBib2R5IGZyb20gdGhlICpodHRwLlJlcXVlc3QiKQorfQorCisvLyBUZXN0SW50ZXJjZXB0b3JfRXJyb3JQcm9wYWdhdGlvbiB2ZXJpZmllcyB0aGF0IHdoZW4gYW4gaW50ZXJjZXB0b3IgcmV0dXJucyBhbiBlcnJvciwKKy8vIGl0IGlzIHByb3BhZ2F0ZWQgdG8gdGhlIFJlc3VsdFNldC4KK2Z1bmMgVGVzdEludGVyY2VwdG9yX0Vycm9yUHJvcGFnYXRpb24odCAqdGVzdGluZy5UKSB7CisJc2VydmVyIDo9IGh0dHB0ZXN0Lk5ld1NlcnZlcihodHRwLkhhbmRsZXJGdW5jKGZ1bmModyBodHRwLlJlc3BvbnNlV3JpdGVyLCByICpodHRwLlJlcXVlc3QpIHsKKwkJdy5Xcml0ZUhlYWRlcihodHRwLlN0YXR1c09LKQorCX0pKQorCWRlZmVyIHNlcnZlci5DbG9zZSgpCisKKwljb25uIDo9IG5ld0Nvbm5lY3Rpb24obmV3VGVzdExvZ0hhbmRsZXIoKSwgc2VydmVyLlVSTCwgJmNvbm5lY3Rpb25TZXR0aW5nc3t9KQorCisJY29ubi5BZGRJbnRlcmNlcHRvcihmdW5jKHJlcSAqSHR0cFJlcXVlc3QpIGVycm9yIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoImludGVyY2VwdG9yIGZhaWxlZCIpCisJfSkKKworCXJzLCBlcnIgOj0gY29ubi5zdWJtaXQoJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCisJXywgXyA9IHJzLkFsbCgpIC8vIGRyYWluIOKAlCB0cmlnZ2VycyBhc3luYyBleGVjdXRlQW5kU3RyZWFtCisJcnNFcnIgOj0gcnMuR2V0RXJyb3IoKQorCXJlcXVpcmUuRXJyb3IodCwgcnNFcnIsICJpbnRlcmNlcHRvciBlcnJvciBzaG91bGQgcHJvcGFnYXRlIHRvIFJlc3VsdFNldCIpCisJYXNzZXJ0LkNvbnRhaW5zKHQsIHJzRXJyLkVycm9yKCksICJpbnRlcmNlcHRvciBmYWlsZWQiLAorCQkiUmVzdWx0U2V0IGVycm9yIHNob3VsZCBjb250YWluIHRoZSBpbnRlcmNlcHRvcidzIGVycm9yIG1lc3NhZ2UiKQorfQorCisvLyBUZXN0SW50ZXJjZXB0b3JfVW5zdXBwb3J0ZWRCb2R5VHlwZSB2ZXJpZmllcyB0aGF0IHNldHRpbmcgQm9keSB0byBhbiB1bnN1cHBvcnRlZCB0eXBlCisvLyAoZS5nLiwgYW4gaW50KSBwcm9kdWNlcyB0aGUgInVuc3VwcG9ydGVkIGJvZHkgdHlwZSIgZXJyb3IuCitmdW5jIFRlc3RJbnRlcmNlcHRvcl9VbnN1cHBvcnRlZEJvZHlUeXBlKHQgKnRlc3RpbmcuVCkgeworCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKKwl9KSkKKwlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKworCS8vIEludGVyY2VwdG9yIHNldHMgQm9keSB0byBhbiB1bnN1cHBvcnRlZCB0eXBlCisJY29ubi5BZGRJbnRlcmNlcHRvcihmdW5jKHJlcSAqSHR0cFJlcXVlc3QpIGVycm9yIHsKKwkJcmVxLkJvZHkgPSA0MgorCQlyZXR1cm4gbmlsCisJfSkKKworCXJzLCBlcnIgOj0gY29ubi5zdWJtaXQoJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fSkKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCisJXywgXyA9IHJzLkFsbCgpIC8vIGRyYWluCisJcnNFcnIgOj0gcnMuR2V0RXJyb3IoKQorCXJlcXVpcmUuRXJyb3IodCwgcnNFcnIsICJ1bnN1cHBvcnRlZCBib2R5IHR5cGUgc2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IiKQorCWFzc2VydC5Db250YWlucyh0LCByc0Vyci5FcnJvcigpLCAidW5zdXBwb3J0ZWQgYm9keSB0eXBlIiwKKwkJImVycm9yIG1lc3NhZ2Ugc2hvdWxkIGluZGljYXRlIHVuc3VwcG9ydGVkIGJvZHkgdHlwZSIpCit9CisKKy8vIFRlc3RJbnRlcmNlcHRvcl9DaGFpbk9yZGVyIHZlcmlmaWVzIHRoYXQgaW50ZXJjZXB0b3JzIHJ1biBpbiB0aGUgb3JkZXIgdGhleSBhcmUgYWRkZWQuCitmdW5jIFRlc3RJbnRlcmNlcHRvcl9DaGFpbk9yZGVyKHQgKnRlc3RpbmcuVCkgeworCXNlcnZlciA6PSBodHRwdGVzdC5OZXdTZXJ2ZXIoaHR0cC5IYW5kbGVyRnVuYyhmdW5jKHcgaHR0cC5SZXNwb25zZVdyaXRlciwgciAqaHR0cC5SZXF1ZXN0KSB7CisJCXcuV3JpdGVIZWFkZXIoaHR0cC5TdGF0dXNPSykKKwl9KSkKKwlkZWZlciBzZXJ2ZXIuQ2xvc2UoKQorCisJY29ubiA6PSBuZXdDb25uZWN0aW9uKG5ld1Rlc3RMb2dIYW5kbGVyKCksIHNlcnZlci5VUkwsICZjb25uZWN0aW9uU2V0dGluZ3N7fSkKKworCXZhciBvcmRlciBbXWludAorCisJY29ubi5BZGRJbnRlcmNlcHRvcihmdW5jKHJlcSAqSHR0cFJlcXVlc3QpIGVycm9yIHsKKwkJb3JkZXIgPSBhcHBlbmQob3JkZXIsIDEpCisJCXJldHVybiBuaWwKKwl9KQorCWNvbm4uQWRkSW50ZXJjZXB0b3IoZnVuYyhyZXEgKkh0dHBSZXF1ZXN0KSBlcnJvciB7CisJCW9yZGVyID0gYXBwZW5kKG9yZGVyLCAyKQorCQlyZXR1cm4gbmlsCisJfSkKKwljb25uLkFkZEludGVyY2VwdG9yKGZ1bmMocmVxICpIdHRwUmVxdWVzdCkgZXJyb3IgeworCQlvcmRlciA9IGFwcGVuZChvcmRlciwgMykKKwkJcmV0dXJuIG5pbAorCX0pCisKKwlycywgZXJyIDo9IGNvbm4uc3VibWl0KCZSZXF1ZXN0TWVzc2FnZXtHcmVtbGluOiAiZy5WKCkiLCBGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317fX0pCisJcmVxdWlyZS5Ob0Vycm9yKHQsIGVycikKKwlfLCBfID0gcnMuQWxsKCkgLy8gZHJhaW4KKworCWFzc2VydC5FcXVhbCh0LCBbXWludHsxLCAyLCAzfSwgb3JkZXIsCisJCSJpbnRlcmNlcHRvcnMgc2hvdWxkIHJ1biBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIikKK30KKworLy8gVGVzdFNpZ1Y0QXV0aF9SZWplY3RzTm9uQnl0ZUJvZHkgdmVyaWZpZXMgdGhhdCBTaWdWNEF1dGggcmV0dXJucyBhbiBlcnJvciB3aGVuIEJvZHkKKy8vIGlzIG5vdCBbXWJ5dGUgYW5kIG5vdCAqUmVxdWVzdE1lc3NhZ2UgKGUuZy4sIGFuIGlvLlJlYWRlcikuCitmdW5jIFRlc3RTaWdWNEF1dGhfUmVqZWN0c05vbkJ5dGVCb2R5KHQgKnRlc3RpbmcuVCkgeworCXByb3ZpZGVyIDo9ICZtb2NrQ3JlZGVudGlhbHNQcm92aWRlcnsKKwkJYWNjZXNzS2V5OiAiTU9DS19JRCIsCisJCXNlY3JldEtleTogIk1PQ0tfS0VZIiwKKwl9CisJaW50ZXJjZXB0b3IgOj0gU2lnVjRBdXRoV2l0aENyZWRlbnRpYWxzKCJncmVtbGluLWVhc3QtMSIsICJ0aW5rZXJwb3Atc2lndjQiLCBwcm92aWRlcikKKworCXJlcSwgZXJyIDo9IE5ld0h0dHBSZXF1ZXN0KCJQT1NUIiwgImh0dHBzOi8vdGVzdF91cmw6ODE4Mi9ncmVtbGluIikKKwlyZXF1aXJlLk5vRXJyb3IodCwgZXJyKQorCXJlcS5IZWFkZXJzLlNldCgiQ29udGVudC1UeXBlIiwgZ3JhcGhCaW5hcnlNaW1lVHlwZSkKKwlyZXEuSGVhZGVycy5TZXQoIkFjY2VwdCIsIGdyYXBoQmluYXJ5TWltZVR5cGUpCisKKwkvLyBTZXQgQm9keSB0byBhbiB1bnN1cHBvcnRlZCB0eXBlIChub3QgW11ieXRlIGFuZCBub3QgKlJlcXVlc3RNZXNzYWdlKQorCXJlcS5Cb2R5ID0gc3RyaW5ncy5OZXdSZWFkZXIoIm5vdCBieXRlcyIpCisKKwllcnIgPSBpbnRlcmNlcHRvcihyZXEpCisJcmVxdWlyZS5FcnJvcih0LCBlcnIsICJTaWdWNEF1dGggc2hvdWxkIHJlamVjdCBub24tW11ieXRlLCBub24tKlJlcXVlc3RNZXNzYWdlIGJvZHkiKQorCWFzc2VydC5Db250YWlucyh0LCBlcnIuRXJyb3IoKSwgIlNpZ1Y0IHNpZ25pbmcgcmVxdWlyZXMgYm9keSB0byBiZSBbXWJ5dGUiLAorCQkiZXJyb3IgbWVzc2FnZSBzaG91bGQgaW5kaWNhdGUgU2lnVjQgcmVxdWlyZXMgW11ieXRlIGJvZHkiKQorfQorCisvLyBUZXN0U2lnVjRBdXRoX0F1dG9TZXJpYWxpemVzUmVxdWVzdE1lc3NhZ2UgdmVyaWZpZXMgdGhhdCBTaWdWNEF1dGggYXV0b21hdGljYWxseQorLy8gc2VyaWFsaXplcyAqUmVxdWVzdE1lc3NhZ2UgdG8gW11ieXRlIGJlZm9yZSBzaWduaW5nLgorZnVuYyBUZXN0U2lnVjRBdXRoX0F1dG9TZXJpYWxpemVzUmVxdWVzdE1lc3NhZ2UodCAqdGVzdGluZy5UKSB7CisJcHJvdmlkZXIgOj0gJm1vY2tDcmVkZW50aWFsc1Byb3ZpZGVyeworCQlhY2Nlc3NLZXk6ICJNT0NLX0lEIiwKKwkJc2VjcmV0S2V5OiAiTU9DS19LRVkiLAorCX0KKwlpbnRlcmNlcHRvciA6PSBTaWdWNEF1dGhXaXRoQ3JlZGVudGlhbHMoImdyZW1saW4tZWFzdC0xIiwgInRpbmtlcnBvcC1zaWd2NCIsIHByb3ZpZGVyKQorCisJcmVxLCBlcnIgOj0gTmV3SHR0cFJlcXVlc3QoIlBPU1QiLCAiaHR0cHM6Ly90ZXN0X3VybDo4MTgyL2dyZW1saW4iKQorCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIpCisJcmVxLkhlYWRlcnMuU2V0KCJDb250ZW50LVR5cGUiLCBncmFwaEJpbmFyeU1pbWVUeXBlKQorCXJlcS5IZWFkZXJzLlNldCgiQWNjZXB0IiwgZ3JhcGhCaW5hcnlNaW1lVHlwZSkKKworCS8vIFNldCBCb2R5IHRvICpSZXF1ZXN0TWVzc2FnZSDigJQgU2lnVjRBdXRoIHNob3VsZCBhdXRvLXNlcmlhbGl6ZSBpdAorCXJlcS5Cb2R5ID0gJlJlcXVlc3RNZXNzYWdle0dyZW1saW46ICJnLlYoKSIsIEZpZWxkczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9fQorCisJZXJyID0gaW50ZXJjZXB0b3IocmVxKQorCXJlcXVpcmUuTm9FcnJvcih0LCBlcnIsICJTaWdWNEF1dGggc2hvdWxkIGF1dG8tc2VyaWFsaXplICpSZXF1ZXN0TWVzc2FnZSIpCisKKwkvLyBCb2R5IHNob3VsZCBub3cgYmUgW11ieXRlIChzZXJpYWxpemVkKQorCWJvZHlCeXRlcywgb2sgOj0gcmVxLkJvZHkuKFtdYnl0ZSkKKwlhc3NlcnQuVHJ1ZSh0LCBvaywgIkJvZHkgc2hvdWxkIGJlIFtdYnl0ZSBhZnRlciBTaWdWNEF1dGggYXV0by1zZXJpYWxpemF0aW9uIikKKwlhc3NlcnQuTm90RW1wdHkodCwgYm9keUJ5dGVzLCAic2VyaWFsaXplZCBib2R5IHNob3VsZCBiZSBub24tZW1wdHkiKQorCisJLy8gU2lnVjQgaGVhZGVycyBzaG91bGQgYmUgc2V0CisJYXNzZXJ0Lk5vdEVtcHR5KHQsIHJlcS5IZWFkZXJzLkdldCgiQXV0aG9yaXphdGlvbiIpLCAiQXV0aG9yaXphdGlvbiBoZWFkZXIgc2hvdWxkIGJlIHNldCIpCisJYXNzZXJ0Lk5vdEVtcHR5KHQsIHJlcS5IZWFkZXJzLkdldCgiWC1BbXotRGF0ZSIpLCAiWC1BbXotRGF0ZSBoZWFkZXIgc2hvdWxkIGJlIHNldCIpCisJYXNzZXJ0LkNvbnRhaW5zKHQsIHJlcS5IZWFkZXJzLkdldCgiQXV0aG9yaXphdGlvbiIpLCAiQVdTNC1ITUFDLVNIQTI1NiIpCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9sb2dnZXIuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9sb2dnZXIuZ28KaW5kZXggYzU1NjY4MS4uOWFlNjI0MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvbG9nZ2VyLmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL2xvZ2dlci5nbwpAQCAtMjMsNyArMjMsNyBAQAogCSJlbmNvZGluZy9qc29uIgogCSJsb2ciCiAKLQkiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMvZHJpdmVyL3Jlc291cmNlcyIKKwkiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjQvZHJpdmVyL3Jlc291cmNlcyIKIAkiZ2l0aHViLmNvbS9uaWNrc255ZGVyL2dvLWkxOG4vdjIvaTE4biIKIAkiZ29sYW5nLm9yZy94L3RleHQvbGFuZ3VhZ2UiCiApCkBAIC0xMDIsMjkgKzEwMiwxOCBAQAogCWRlc2VyaWFsaXplRGF0YVR5cGVFcnJvciAgICAgZXJyb3JLZXkgPSAiVU5LTk9XTl9ERVNFUl9EQVRBVFlQRSIKIAludWxsSW5wdXQgICAgICAgICAgICAgICAgICAgIGVycm9yS2V5ID0gIk5VTExfSU5QVVQiCiAJdW5leHBlY3RlZE51bGwgICAgICAgICAgICAgICBlcnJvcktleSA9ICJVTkVYUEVDVEVEX05VTExfVkFMVUUiCi0JY2xvc2VDb25uZWN0aW9uICAgICAgICAgICAgICBlcnJvcktleSA9ICJDTE9TSU5HX0NPTk5FQ1RJT04iCi0JY29ubmVjdENvbm5lY3Rpb24gICAgICAgICAgICBlcnJvcktleSA9ICJPUEVOSU5HX0NPTk5FQ1RJT04iCi0JZmFpbGVkQ29ubmVjdGlvbiAgICAgICAgICAgICBlcnJvcktleSA9ICJGQUlMRURfQ09OTkVDVElPTiIKIAl3cml0ZVJlcXVlc3QgICAgICAgICAgICAgICAgIGVycm9yS2V5ID0gIldSSVRFX1JFUVVFU1QiCi0JcmVhZExvb3BFcnJvciAgICAgICAgICAgICAgICBlcnJvcktleSA9ICJSRUFEX0xPT1BfRVJST1IiCiAJZXJyb3JDYWxsYmFjayAgICAgICAgICAgICAgICBlcnJvcktleSA9ICJFUlJPUl9DQUxMQkFDSyIKIAljcmVhdGluZ1JlcXVlc3QgICAgICAgICAgICAgIGVycm9yS2V5ID0gIkNSRUFUSU5HX1JFUVVFU1QiCiAJcmVhZENvbXBsZXRlICAgICAgICAgICAgICAgICBlcnJvcktleSA9ICJSRUFEX0NPTVBMRVRFIgogCXN1Ym1pdFN0YXJ0ZWRTdHJpbmcgICAgICAgICAgZXJyb3JLZXkgPSAiU1VCTUlUX1NUQVJURURfU1RSSU5HIgotCXN1Ym1pdFN0YXJ0ZWRCeXRlY29kZSAgICAgICAgZXJyb3JLZXkgPSAiU1VCTUlUX1NUQVJURURfQllURUNPREUiCiAJZmFpbGVkVG9DbG9zZUluRXJyb3JDYWxsYmFjayBlcnJvcktleSA9ICJGQUlMRURfVE9fQ0xPU0VfSU5fRVJST1JfQ0FMTEJBQ0siCiAJZmFpbGVkVG9Xcml0ZU1lc3NhZ2UgICAgICAgICBlcnJvcktleSA9ICJGQUlMRURfVE9fV1JJVEVfTUVTU0FHRSIKLQlmYWlsZWRUb1NldFdyaXRlRGVhZGxpbmUgICAgIGVycm9yS2V5ID0gIkZBSUxFRF9UT19TRVRfV1JJVEVfREVBRExJTkUiCisJZmFpbGVkVG9SZWNlaXZlUmVzcG9uc2UgICAgICBlcnJvcktleSA9ICJGQUlMRURfVE9fUkVDRUlWRV9SRVNQT05TRSIKKwlmYWlsZWRUb1NlbmRSZXF1ZXN0ICAgICAgICAgIGVycm9yS2V5ID0gIkZBSUxFRF9UT19TRU5EX1JFUVVFU1QiCiAJbG9nRXJyb3JHZW5lcmljICAgICAgICAgICAgICBlcnJvcktleSA9ICJMT0dfRVJST1JfR0VORVJJQyIKLQljcmVhdGluZ1Nlc3Npb25Db25uZWN0aW9uICAgIGVycm9yS2V5ID0gIkNSRUFUSU5HX1NFU1NJT05fQ09OTkVDVElPTiIKLQljbG9zZVNlc3Npb24gICAgICAgICAgICAgICAgIGVycm9yS2V5ID0gIkNMT1NFX1NFU1NJT04iCi0JY2xvc2VTZXNzaW9uUmVxdWVzdEVycm9yICAgICBlcnJvcktleSA9ICJDTE9TRV9TRVNTSU9OX1JFUVVFU1RfRVJST1IiCiAJY2xvc2VEcml2ZXJSZW1vdGVDb25uZWN0aW9uICBlcnJvcktleSA9ICJDTE9TRV9EUklWRVJfUkVNT1RFX0NPTk5FQ1RJT04iCi0JY2xvc2luZ1NwYXduZWRTZXNzaW9ucyAgICAgICBlcnJvcktleSA9ICJDTE9TSU5HX1NQQVdORURfU0VTU0lPTlMiCiAJY2xvc2VDbGllbnQgICAgICAgICAgICAgICAgICBlcnJvcktleSA9ICJDTE9TRV9DTElFTlQiCi0JZXJyb3JDbG9zaW5nQ29ubmVjdGlvbiAgICAgICBlcnJvcktleSA9ICJFUlJPUl9DTE9TSU5HX0NPTk5FQ1RJT04iCi0JY3JlYXRlQ29ubmVjdGlvbkVycm9yICAgICAgICBlcnJvcktleSA9ICJDUkVBVEVfQ09OTkVDVElPTl9FUlJPUiIKLQlwb29sTmV3Q29ubmVjdGlvbkVycm9yICAgICAgIGVycm9yS2V5ID0gIlBPT0xfTkVXX0NPTk5FQ1RJT05fRVJST1IiCi0Jc2Vzc2lvbkRldGVjdGVkICAgICAgICAgICAgICBlcnJvcktleSA9ICJTRVNTSU9OX0RFVEVDVEVEIgotCXBvb2xJbml0aWFsRXhjZWVkc01heGltdW0gICAgZXJyb3JLZXkgPSAiUE9PTF9JTklUSUFMX0VYQ0VFRFNfTUFYSU1VTSIKKwlmYWlsZWRUb0Nsb3NlUmVzcG9uc2VCb2R5ICAgIGVycm9yS2V5ID0gIkZBSUxFRF9UT19DTE9TRV9SRVNQT05TRV9CT0RZIgorCWZhaWxlZFRvQ2xvc2VEZWNvbXBSZWFkZXIgICAgZXJyb3JLZXkgPSAiRkFJTEVEX1RPX0NMT1NFX0RFQ09NUFJFU1NJT05fUkVBREVSIgogKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvbWFya2VyLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvbWFya2VyLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNTUwOGMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWdvL2RyaXZlci9tYXJrZXIuZ28KQEAgLTAsMCArMSw0NiBAQAorLyoKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgZ3JlbWxpbmdvCisKK2ltcG9ydCAiZm10IgorCisvLyBNYXJrZXIgaXMgdXNlZCBpbiByZXNwb25zZQordHlwZSBNYXJrZXIgaW50ZXJmYWNlIHsKKwlHZXRWYWx1ZSgpIGJ5dGUKK30KKwordHlwZSBtYXJrZXIgc3RydWN0IHsKKwl2YWx1ZSBieXRlCit9CisKK2Z1bmMgRW5kT2ZTdHJlYW0oKSBNYXJrZXIgeworCXJldHVybiBtYXJrZXJ7Ynl0ZSgwKX0KK30KKworZnVuYyAobSBtYXJrZXIpIEdldFZhbHVlKCkgYnl0ZSB7CisJcmV0dXJuIG0udmFsdWUKK30KKworZnVuYyBPZih2YWx1ZSBieXRlKSAoTWFya2VyLCBlcnJvcikgeworCWlmIHZhbHVlICE9IDAgeworCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJtYXJrZXIgdmFsdWUgZXJvcnIiKQorCX0KKwlyZXR1cm4gRW5kT2ZTdHJlYW0oKSwgbmlsCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZVN1aXRlLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvcGVyZm9ybWFuY2UvcGVyZm9ybWFuY2VTdWl0ZS5nbwppbmRleCA4YjM0NWM4Li5jODY3NzAxIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZVN1aXRlLmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL3BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlU3VpdGUuZ28KQEAgLTI5LDcgKzI5LDcgQEAKIAkic3RyY29udiIKIAkidGltZSIKIAotCSJnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92My9kcml2ZXIiCisJImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3Y0L2RyaXZlciIKICkKIAogdHlwZSBSZXN1bHRTZXQgPSBncmVtbGluZ28uUmVzdWx0U2V0CkBAIC0zNjQsMjYgKzM2NCwyMSBAQAogY29uc3QgYnVmZmVyU2l6ZSA9IDMxNDU3MjgwMAogY29uc3QgcG9vbGluZ0J1ZmZlclNpemUgPSAyNjIxNDQwMAogCi0vLwogLy8gY3JlYXRlQ29ubmVjdGlvbjogQ3JlYXRlcyBhIGNvbm5lY3Rpb24gdG8gYSByZW1vdGUgZW5kcG9pbnQgYW5kIHJldHVybnMgYQogLy8gR3JhcGhUcmF2ZXJzYWxTb3VyY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBzdWJtaXQgR3JlbWxpbiBxdWVyaWVzLgotLy8KIGZ1bmMgY3JlYXRlQ29ubmVjdGlvbihob3N0IHN0cmluZywgcG9ydCwgcG9vbFNpemUsIGJ1ZmZlcnNTaXplIGludCkgKCpHcmFwaFRyYXZlcnNhbFNvdXJjZSwgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24sIGVycm9yKSB7CiAJdmFyIGcgKkdyYXBoVHJhdmVyc2FsU291cmNlCiAJdmFyIGRyYyAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgogCXZhciBlcnIgZXJyb3IKIAotCWVuZHBvaW50IDo9IGZtdC5TcHJpbnRmKCJ3czovLyVzOiVkL2dyZW1saW4iLCBob3N0LCBwb3J0KQorCWVuZHBvaW50IDo9IGZtdC5TcHJpbnRmKCJodHRwOi8vJXM6JWQvZ3JlbWxpbiIsIGhvc3QsIHBvcnQpCiAJbG9nLlByaW50bG4oIkF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byA6ICIgKyBlbmRwb2ludCkKIAogCS8vIEVzdGFibGlzaCBhIG5ldyBjb25uZWN0aW9uIGFuZCBjYXRjaCBhbnkgZXJyb3JzIHRoYXQgbWF5IG9jY3VyCiAJZHJjLCBlcnIgPSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbihlbmRwb2ludCwgZnVuYyhzZXR0aW5ncyAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvblNldHRpbmdzKSB7CiAJCXNldHRpbmdzLkxvZ1ZlcmJvc2l0eSA9IEdyZW1saW5XYXJuaW5nCiAJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9IGdyYXRlZnVsR3JhcGhBbGlhcwotCQlzZXR0aW5ncy5OZXdDb25uZWN0aW9uVGhyZXNob2xkID0gdGhyZXNob2xkCiAJCXNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgPSBwb29sU2l6ZQotCQlzZXR0aW5ncy5Xcml0ZUJ1ZmZlclNpemUgPSBidWZmZXJzU2l6ZQotCQlzZXR0aW5ncy5SZWFkQnVmZmVyU2l6ZSA9IGJ1ZmZlcnNTaXplCiAJfSkKIAogCWlmIGVyciAhPSBuaWwgewpAQCAtNDE2LDkgKzQxMSw3IEBACiBgCiApCiAKLS8vCiAvLyBtYWluOiBQcm9ncmFtIGVudHJ5IHBvaW50LiBDcmVhdGUgdGhlIGNvbm5lY3Rpb24sIHJ1biBwZXJmb3JtYW5jZSB0ZXN0cywgc2h1dGRvd24uCi0vLwogZnVuYyBtYWluKCkgewogCWhvc3RQdHIgOj0gZmxhZy5TdHJpbmcoImhvc3QiLCBIb3N0LCAiU2VydmVyIGhvc3QsIHRoZSBkZWZhdWx0IGlzIGxvY2FsaG9zdC4iKQogCXBvcnRQdHIgOj0gZmxhZy5JbnQoInBvcnQiLCBQb3J0LCAiU2VydmVyIHBvcnQsIHRoZSBkZWZhdWx0IGlzIDQ1OTQwLiIpCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9wcm90b2NvbC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3Byb3RvY29sLmdvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzE5NDhhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3Byb3RvY29sLmdvCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1wYWNrYWdlIGdyZW1saW5nbwotCi1pbXBvcnQgKAotCSJlbmNvZGluZy9iYXNlNjQiCi0JIm5ldC9odHRwIgotCSJzeW5jIgotKQotCi0vLyBwcm90b2NvbCBoYW5kbGVzIGludm9raW5nIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbiwgYXMgd2VsbCBhcyBoYW5kbGluZyB0aGUgbGlmZWN5Y2xlIG9mIHJhdyBkYXRhIHBhc3NlZCB0bwotLy8gYW5kIHJlY2VpdmVkIGZyb20gdGhlIHRyYW5zcG9ydCBsYXllci4KLXR5cGUgcHJvdG9jb2wgaW50ZXJmYWNlIHsKLQlyZWFkTG9vcChyZXN1bHRTZXRzICpzeW5jaHJvbml6ZWRNYXAsIGVycm9yQ2FsbGJhY2sgZnVuYygpKQotCXdyaXRlKHJlcXVlc3QgKnJlcXVlc3QpIGVycm9yCi0JY2xvc2Uod2FpdCBib29sKSBlcnJvcgotfQotCi1jb25zdCBhdXRoZW50aWNhdGlvbkZhaWxlZCA9IHVpbnQxNigxNTEpCi0KLXR5cGUgcHJvdG9jb2xCYXNlIHN0cnVjdCB7Ci0JcHJvdG9jb2wKLQotCXRyYW5zcG9ydGVyIHRyYW5zcG9ydGVyCi19Ci0KLXR5cGUgZ3JlbWxpblNlcnZlcldTUHJvdG9jb2wgc3RydWN0IHsKLQkqcHJvdG9jb2xCYXNlCi0KLQlzZXJpYWxpemVyIFNlcmlhbGl6ZXIKLQlsb2dIYW5kbGVyICpsb2dIYW5kbGVyCi0JY2xvc2VkICAgICBib29sCi0JbXV0ZXggICAgICBzeW5jLk11dGV4Ci0Jd2cgICAgICAgICAqc3luYy5XYWl0R3JvdXAKLX0KLQotZnVuYyAocHJvdG9jb2wgKmdyZW1saW5TZXJ2ZXJXU1Byb3RvY29sKSByZWFkTG9vcChyZXN1bHRTZXRzICpzeW5jaHJvbml6ZWRNYXAsIGVycm9yQ2FsbGJhY2sgZnVuYygpKSB7Ci0JZGVmZXIgcHJvdG9jb2wud2cuRG9uZSgpCi0KLQlmb3IgewotCQkvLyBSZWFkIGZyb20gdHJhbnNwb3J0IGxheWVyLiBJZiB0aGUgY2hhbm5lbCBpcyBjbG9zZWQsIHRoaXMgd2lsbCBlcnJvciBvdXQgYW5kIGV4aXQuCi0JCW1zZywgZXJyIDo9IHByb3RvY29sLnRyYW5zcG9ydGVyLlJlYWQoKQotCQlwcm90b2NvbC5tdXRleC5Mb2NrKCkKLQkJaWYgcHJvdG9jb2wuY2xvc2VkIHsKLQkJCXByb3RvY29sLm11dGV4LlVubG9jaygpCi0JCQlyZXR1cm4KLQkJfQotCQlwcm90b2NvbC5tdXRleC5VbmxvY2soKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCS8vIElnbm9yZSBlcnJvciBoZXJlLCB3ZSBhbHJlYWR5IGdvdCBhbiBlcnJvciBvbiByZWFkLCBjYW5ub3QgZG8gYW55dGhpbmcgd2l0aCB0aGlzLgotCQkJXyA9IHByb3RvY29sLnRyYW5zcG9ydGVyLkNsb3NlKCkKLQkJCXByb3RvY29sLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgcmVhZExvb3BFcnJvciwgZXJyLkVycm9yKCkpCi0JCQlyZWFkRXJyb3JIYW5kbGVyKHJlc3VsdFNldHMsIGVycm9yQ2FsbGJhY2ssIGVyciwgcHJvdG9jb2wubG9nSGFuZGxlcikKLQkJCXJldHVybgotCQl9Ci0KLQkJLy8gRGVzZXJpYWxpemUgbWVzc2FnZSBhbmQgdW5wYWNrLgotCQlyZXNwLCBlcnIgOj0gcHJvdG9jb2wuc2VyaWFsaXplci5EZXNlcmlhbGl6ZU1lc3NhZ2UobXNnKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXByb3RvY29sLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgbG9nRXJyb3JHZW5lcmljLCAiZ3JlbWxpblNlcnZlcldTUHJvdG9jb2wucmVhZExvb3AoKSIsIGVyci5FcnJvcigpKQotCQkJcmVhZEVycm9ySGFuZGxlcihyZXN1bHRTZXRzLCBlcnJvckNhbGxiYWNrLCBlcnIsIHByb3RvY29sLmxvZ0hhbmRsZXIpCi0JCQlyZXR1cm4KLQkJfQotCi0JCWVyciA9IHByb3RvY29sLnJlc3BvbnNlSGFuZGxlcihyZXN1bHRTZXRzLCByZXNwKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJlYWRFcnJvckhhbmRsZXIocmVzdWx0U2V0cywgZXJyb3JDYWxsYmFjaywgZXJyLCBwcm90b2NvbC5sb2dIYW5kbGVyKQotCQkJcmV0dXJuCi0JCX0KLQl9Ci19Ci0KLS8vIElmIHRoZXJlIGlzIGFuIGVycm9yLCB3ZSBuZWVkIHRvIGNsb3NlIHRoZSBSZXN1bHRTZXRzIGFuZCB0aGVuIHBhc3MgdGhlIGVycm9yIGJhY2suCi1mdW5jIHJlYWRFcnJvckhhbmRsZXIocmVzdWx0U2V0cyAqc3luY2hyb25pemVkTWFwLCBlcnJvckNhbGxiYWNrIGZ1bmMoKSwgZXJyIGVycm9yLCBsb2cgKmxvZ0hhbmRsZXIpIHsKLQlsb2cubG9nZihFcnJvciwgcmVhZExvb3BFcnJvciwgZXJyLkVycm9yKCkpCi0JcmVzdWx0U2V0cy5jbG9zZUFsbChlcnIpCi0JZXJyb3JDYWxsYmFjaygpCi19Ci0KLWZ1bmMgKHByb3RvY29sICpncmVtbGluU2VydmVyV1NQcm90b2NvbCkgcmVzcG9uc2VIYW5kbGVyKHJlc3VsdFNldHMgKnN5bmNocm9uaXplZE1hcCwgcmVzcG9uc2UgUmVzcG9uc2UpIGVycm9yIHsKLQlyZXNwb25zZUlELCBzdGF0dXNDb2RlLCBtZXRhZGF0YSwgZGF0YSA6PSByZXNwb25zZS5SZXNwb25zZUlELCByZXNwb25zZS5SZXNwb25zZVN0YXR1cy5jb2RlLAotCQlyZXNwb25zZS5SZXNwb25zZVJlc3VsdC5NZXRhLCByZXNwb25zZS5SZXNwb25zZVJlc3VsdC5EYXRhCi0JcmVzcG9uc2VJRFN0cmluZyA6PSByZXNwb25zZUlELlN0cmluZygpCi0JaWYgcmVzdWx0U2V0cy5sb2FkKHJlc3BvbnNlSURTdHJpbmcpID09IG5pbCB7Ci0JCXJldHVybiBuZXdFcnJvcihlcnIwNTAxUmVzcG9uc2VIYW5kbGVyUmVzdWx0U2V0Tm90Q3JlYXRlZEVycm9yKQotCX0KLQlpZiBhZ2dyZWdhdGVUbywgb2sgOj0gbWV0YWRhdGFbImFnZ3JlZ2F0ZVRvIl07IG9rIHsKLQkJcmVzdWx0U2V0cy5sb2FkKHJlc3BvbnNlSURTdHJpbmcpLnNldEFnZ3JlZ2F0ZVRvKGFnZ3JlZ2F0ZVRvLihzdHJpbmcpKQotCX0KLQotCS8vIEhhbmRsZSBzdGF0dXMgY29kZXMgYXBwcm9wcmlhdGVseS4gSWYgc3RhdHVzIGNvZGUgaXMgaHR0cC5TdGF0dXNQYXJ0aWFsQ29udGVudCwgd2UgbmVlZCB0byByZS1yZWFkIGRhdGEuCi0JaWYgc3RhdHVzQ29kZSA9PSBodHRwLlN0YXR1c05vQ29udGVudCB7Ci0JCXJlc3VsdFNldHMubG9hZChyZXNwb25zZUlEU3RyaW5nKS5hZGRSZXN1bHQoJlJlc3VsdHttYWtlKFtdaW50ZXJmYWNle30sIDApfSkKLQkJcmVzdWx0U2V0cy5sb2FkKHJlc3BvbnNlSURTdHJpbmcpLkNsb3NlKCkKLQkJcHJvdG9jb2wubG9nSGFuZGxlci5sb2dmKERlYnVnLCByZWFkQ29tcGxldGUsIHJlc3BvbnNlSURTdHJpbmcpCi0JfSBlbHNlIGlmIHN0YXR1c0NvZGUgPT0gaHR0cC5TdGF0dXNPSyB7Ci0JCS8vIEFkZCBkYXRhIGFuZCBzdGF0dXMgYXR0cmlidXRlcyB0byB0aGUgUmVzdWx0U2V0LgotCQlyZXN1bHRTZXRzLmxvYWQocmVzcG9uc2VJRFN0cmluZykuYWRkUmVzdWx0KCZSZXN1bHR7ZGF0YX0pCi0JCXJlc3VsdFNldHMubG9hZChyZXNwb25zZUlEU3RyaW5nKS5zZXRTdGF0dXNBdHRyaWJ1dGVzKHJlc3BvbnNlLlJlc3BvbnNlU3RhdHVzLmF0dHJpYnV0ZXMpCi0JCXJlc3VsdFNldHMubG9hZChyZXNwb25zZUlEU3RyaW5nKS5DbG9zZSgpCi0JCXByb3RvY29sLmxvZ0hhbmRsZXIubG9nZihEZWJ1ZywgcmVhZENvbXBsZXRlLCByZXNwb25zZUlEU3RyaW5nKQotCX0gZWxzZSBpZiBzdGF0dXNDb2RlID09IGh0dHAuU3RhdHVzUGFydGlhbENvbnRlbnQgewotCQkvLyBBZGQgZGF0YSB0byB0aGUgUmVzdWx0U2V0LgotCQlyZXN1bHRTZXRzLmxvYWQocmVzcG9uc2VJRFN0cmluZykuYWRkUmVzdWx0KCZSZXN1bHR7ZGF0YX0pCi0JfSBlbHNlIGlmIHN0YXR1c0NvZGUgPT0gaHR0cC5TdGF0dXNQcm94eUF1dGhSZXF1aXJlZCB8fCBzdGF0dXNDb2RlID09IGF1dGhlbnRpY2F0aW9uRmFpbGVkIHsKLQkJLy8gaHR0cCBzdGF0dXMgY29kZSAxNTEgaXMgbm90IGRlZmluZWQgaGVyZSwgYnV0IGNvcnJlc3BvbmRzIHdpdGggNDAzLCBpLmUuIGF1dGhlbnRpY2F0aW9uIGhhcyBmYWlsZWQuCi0JCS8vIFNlcnZlciBoYXMgcmVxdWVzdGVkIGJhc2ljIGF1dGguCi0JCWF1dGhJbmZvIDo9IHByb3RvY29sLnRyYW5zcG9ydGVyLmdldEF1dGhJbmZvKCkKLQkJaWYgb2ssIHVzZXJuYW1lLCBwYXNzd29yZCA6PSBhdXRoSW5mby5HZXRCYXNpY0F1dGgoKTsgb2sgewotCQkJYXV0aEJ5dGVzIDo9IG1ha2UoW11ieXRlLCAwKQotCQkJYXV0aEJ5dGVzID0gYXBwZW5kKGF1dGhCeXRlcywgMCkKLQkJCWF1dGhCeXRlcyA9IGFwcGVuZChhdXRoQnl0ZXMsIFtdYnl0ZSh1c2VybmFtZSkuLi4pCi0JCQlhdXRoQnl0ZXMgPSBhcHBlbmQoYXV0aEJ5dGVzLCAwKQotCQkJYXV0aEJ5dGVzID0gYXBwZW5kKGF1dGhCeXRlcywgW11ieXRlKHBhc3N3b3JkKS4uLikKLQkJCWVuY29kZWQgOj0gYmFzZTY0LlN0ZEVuY29kaW5nLkVuY29kZVRvU3RyaW5nKGF1dGhCeXRlcykKLQkJCXJlcXVlc3QgOj0gbWFrZUJhc2ljQXV0aFJlcXVlc3QoZW5jb2RlZCkKLQkJCWVyciA6PSBwcm90b2NvbC53cml0ZSgmcmVxdWVzdCkKLQkJCWlmIGVyciAhPSBuaWwgewotCQkJCXJldHVybiBlcnIKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJlc3VsdFNldHMubG9hZChyZXNwb25zZUlEU3RyaW5nKS5DbG9zZSgpCi0JCQlyZXR1cm4gbmV3RXJyb3IoZXJyMDUwM1Jlc3BvbnNlSGFuZGxlckF1dGhFcnJvciwgcmVzcG9uc2UuUmVzcG9uc2VTdGF0dXMsIHJlc3BvbnNlLlJlc3BvbnNlUmVzdWx0KQotCQl9Ci0JfSBlbHNlIHsKLQkJbmV3RXJyb3IgOj0gbmV3RXJyb3IoZXJyMDUwMlJlc3BvbnNlSGFuZGxlclJlYWRMb29wRXJyb3IsIHJlc3BvbnNlLlJlc3BvbnNlU3RhdHVzLCBzdGF0dXNDb2RlKQotCQlyZXN1bHRTZXRzLmxvYWQocmVzcG9uc2VJRFN0cmluZykuc2V0RXJyb3IobmV3RXJyb3IpCi0JCXJlc3VsdFNldHMubG9hZChyZXNwb25zZUlEU3RyaW5nKS5DbG9zZSgpCi0JCXByb3RvY29sLmxvZ0hhbmRsZXIubG9nZihFcnJvciwgbG9nRXJyb3JHZW5lcmljLCAiZ3JlbWxpblNlcnZlcldTUHJvdG9jb2wucmVzcG9uc2VIYW5kbGVyKCkiLCBuZXdFcnJvci5FcnJvcigpKQotCX0KLQlyZXR1cm4gbmlsCi19Ci0KLWZ1bmMgKHByb3RvY29sICpncmVtbGluU2VydmVyV1NQcm90b2NvbCkgd3JpdGUocmVxdWVzdCAqcmVxdWVzdCkgZXJyb3IgewotCWJ5dGVzLCBlcnIgOj0gcHJvdG9jb2wuc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlKHJlcXVlc3QpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKLQl9Ci0JcmV0dXJuIHByb3RvY29sLnRyYW5zcG9ydGVyLldyaXRlKGJ5dGVzKQotfQotCi1mdW5jIChwcm90b2NvbCAqZ3JlbWxpblNlcnZlcldTUHJvdG9jb2wpIGNsb3NlKHdhaXQgYm9vbCkgZXJyb3IgewotCXZhciBlcnIgZXJyb3IKLQotCXByb3RvY29sLm11dGV4LkxvY2soKQotCWlmICFwcm90b2NvbC5jbG9zZWQgewotCQllcnIgPSBwcm90b2NvbC50cmFuc3BvcnRlci5DbG9zZSgpCi0JCXByb3RvY29sLmNsb3NlZCA9IHRydWUKLQl9Ci0JcHJvdG9jb2wubXV0ZXguVW5sb2NrKCkKLQotCWlmIHdhaXQgewotCQlwcm90b2NvbC53Zy5XYWl0KCkKLQl9Ci0KLQlyZXR1cm4gZXJyCi19Ci0KLWZ1bmMgbmV3R3JlbWxpblNlcnZlcldTUHJvdG9jb2woaGFuZGxlciAqbG9nSGFuZGxlciwgdHJhbnNwb3J0ZXJUeXBlIFRyYW5zcG9ydGVyVHlwZSwgdXJsIHN0cmluZywgY29ublNldHRpbmdzICpjb25uZWN0aW9uU2V0dGluZ3MsIHJlc3VsdHMgKnN5bmNocm9uaXplZE1hcCwKLQllcnJvckNhbGxiYWNrIGZ1bmMoKSkgKHByb3RvY29sLCBlcnJvcikgewotCXdnIDo9ICZzeW5jLldhaXRHcm91cHt9Ci0JdHJhbnNwb3J0LCBlcnIgOj0gZ2V0VHJhbnNwb3J0TGF5ZXIodHJhbnNwb3J0ZXJUeXBlLCB1cmwsIGNvbm5TZXR0aW5ncywgaGFuZGxlcikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JZ3JlbWxpblByb3RvY29sIDo9ICZncmVtbGluU2VydmVyV1NQcm90b2NvbHsKLQkJcHJvdG9jb2xCYXNlOiAmcHJvdG9jb2xCYXNle3RyYW5zcG9ydGVyOiB0cmFuc3BvcnR9LAotCQlzZXJpYWxpemVyOiAgIG5ld0dyYXBoQmluYXJ5U2VyaWFsaXplcihoYW5kbGVyKSwKLQkJbG9nSGFuZGxlcjogICBoYW5kbGVyLAotCQljbG9zZWQ6ICAgICAgIGZhbHNlLAotCQltdXRleDogICAgICAgIHN5bmMuTXV0ZXh7fSwKLQkJd2c6ICAgICAgICAgICB3ZywKLQl9Ci0JZXJyID0gZ3JlbWxpblByb3RvY29sLnRyYW5zcG9ydGVyLkNvbm5lY3QoKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0Jd2cuQWRkKDEpCi0JZ28gZ3JlbWxpblByb3RvY29sLnJlYWRMb29wKHJlc3VsdHMsIGVycm9yQ2FsbGJhY2spCi0JcmV0dXJuIGdyZW1saW5Qcm90b2NvbCwgbmlsCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9wcm90b2NvbF90ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvcHJvdG9jb2xfdGVzdC5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEzYzk0Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9wcm90b2NvbF90ZXN0LmdvCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgZ3JlbWxpbmdvCi0KLWltcG9ydCAoCi0JInN5bmMiCi0JInRlc3RpbmciCi0JInRpbWUiCi0KLQkiZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5L2Fzc2VydCIKLQkiZ29sYW5nLm9yZy94L3RleHQvbGFuZ3VhZ2UiCi0pCi0KLWZ1bmMgVGVzdFByb3RvY29sKHQgKnRlc3RpbmcuVCkgewotCXQuUnVuKCJUZXN0IHByb3RvY29sIGNvbm5lY3QgZXJyb3IuIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJY29ublNldHRpbmdzIDo9IG5ld0RlZmF1bHRDb25uZWN0aW9uU2V0dGluZ3MoKQotCQljb25uU2V0dGluZ3MuYXV0aEluZm8sIGNvbm5TZXR0aW5ncy50bHNDb25maWcgPSBuaWwsIG5pbAotCQljb25uU2V0dGluZ3Mua2VlcEFsaXZlSW50ZXJ2YWwsIGNvbm5TZXR0aW5ncy53cml0ZURlYWRsaW5lLCBjb25uU2V0dGluZ3Mud3JpdGVEZWFkbGluZSA9IGtlZXBBbGl2ZUludGVydmFsRGVmYXVsdCwgd3JpdGVEZWFkbGluZURlZmF1bHQsIGNvbm5lY3Rpb25UaW1lb3V0RGVmYXVsdAotCi0JCXByb3RvY29sLCBlcnIgOj0gbmV3R3JlbWxpblNlcnZlcldTUHJvdG9jb2wobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBJbmZvLCBsYW5ndWFnZS5FbmdsaXNoKSwgR29yaWxsYSwKLQkJCSJ3czovL2xvY2FsaG9zdDo5MDAwL2dyZW1saW4iLCBjb25uU2V0dGluZ3MsCi0JCQluaWwsIG5pbCkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0JCWFzc2VydC5OaWwodCwgcHJvdG9jb2wpCi0JfSkKLQotCXQuUnVuKCJUZXN0IHByb3RvY29sIGNsb3NlIHdhaXQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQl3ZyA6PSAmc3luYy5XYWl0R3JvdXB7fQotCQlwcm90b2NvbCA6PSAmZ3JlbWxpblNlcnZlcldTUHJvdG9jb2x7Ci0JCQljbG9zZWQ6IHRydWUsCi0JCQltdXRleDogIHN5bmMuTXV0ZXh7fSwKLQkJCXdnOiAgICAgd2csCi0JCX0KLQkJd2cuQWRkKDEpCi0KLQkJZG9uZSA6PSBtYWtlKGNoYW4gYm9vbCkKLQotCQlnbyBmdW5jKCkgewotCQkJcHJvdG9jb2wuY2xvc2UodHJ1ZSkKLQkJCWRvbmUgPC0gdHJ1ZQotCQl9KCkKLQotCQlzZWxlY3QgewotCQljYXNlIDwtdGltZS5BZnRlcigxICogdGltZS5TZWNvbmQpOgotCQkJLy8gT2suIENsb3NlIG11c3Qgd2FpdC4KLQkJY2FzZSA8LWRvbmU6Ci0JCQl0LkZhdGFsKCJwcm90b2NvbC5jbG9zZSBpcyBub3Qgd2FpdGluZyIpCi0JCX0KLQl9KQotCi0JdC5SdW4oIlRlc3QgcHJvdG9jb2wgY2xvc2Ugbm8gd2FpdCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXdnIDo9ICZzeW5jLldhaXRHcm91cHt9Ci0JCXByb3RvY29sIDo9ICZncmVtbGluU2VydmVyV1NQcm90b2NvbHsKLQkJCWNsb3NlZDogdHJ1ZSwKLQkJCW11dGV4OiAgc3luYy5NdXRleHt9LAotCQkJd2c6ICAgICB3ZywKLQkJfQotCQl3Zy5BZGQoMSkKLQotCQlkb25lIDo9IG1ha2UoY2hhbiBib29sKQotCi0JCWdvIGZ1bmMoKSB7Ci0JCQlwcm90b2NvbC5jbG9zZShmYWxzZSkKLQkJCWRvbmUgPC0gdHJ1ZQotCQl9KCkKLQotCQlzZWxlY3QgewotCQljYXNlIDwtdGltZS5BZnRlcigxICogdGltZS5TZWNvbmQpOgotCQkJdC5GYXRhbCgicHJvdG9jb2wuY2xvc2UgaXMgd2FpdGluZyIpCi0JCWNhc2UgPC1kb25lOgotCQkJLy8gT2suIENsb3NlIG11c3Qgbm90IHdhaXQuCi0JCX0KLQl9KQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvcmVxdWVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3JlcXVlc3QuZ28KaW5kZXggZWJiMTIyNC4uZWFmYzBhNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvcmVxdWVzdC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9yZXF1ZXN0LmdvCkBAIC0xOSwzMyArMTksMjEgQEAKIAogcGFja2FnZSBncmVtbGluZ28KIAotaW1wb3J0ICgKLQkiZ2l0aHViLmNvbS9nb29nbGUvdXVpZCIKLSkKLQotLy8gcmVxdWVzdCByZXByZXNlbnRzIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyLgotdHlwZSByZXF1ZXN0IHN0cnVjdCB7Ci0JcmVxdWVzdElEIHV1aWQuVVVJRAotCW9wICAgICAgICBzdHJpbmcKLQlwcm9jZXNzb3Igc3RyaW5nCi0JYXJncyAgICAgIG1hcFtzdHJpbmddaW50ZXJmYWNle30KKy8vIFJlcXVlc3RNZXNzYWdlIHJlcHJlc2VudHMgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuCit0eXBlIFJlcXVlc3RNZXNzYWdlIHN0cnVjdCB7CisJR3JlbWxpbiBzdHJpbmcKKwlGaWVsZHMgIG1hcFtzdHJpbmddaW50ZXJmYWNle30KIH0KIAotY29uc3Qgc2Vzc2lvblByb2Nlc3NvciA9ICJzZXNzaW9uIgotCi1jb25zdCBzdHJpbmdPcCA9ICJldmFsIgotY29uc3Qgc3RyaW5nUHJvY2Vzc29yID0gIiIKLQogLy8gTWFrZVN0cmluZ1JlcXVlc3QgY3JlYXRlcyBhIHJlcXVlc3QgZnJvbSBhIEdyZW1saW4gc3RyaW5nIHF1ZXJ5IGZvciBzdWJtaXNzaW9uIHRvIGEgR3JlbWxpbiBzZXJ2ZXIuCiAvLwogLy8gVGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkIHB1YmxpY2x5IHRvIGVuYWJsZSBhbHRlcm5hdGl2ZSB0cmFuc3BvcnQgcHJvdG9jb2xzIChnUlBDLCBIVFRQLzIsIGV0Yy4pCi0vLyB0byBjb25zdHJ1Y3QgcHJvcGVybHkgZm9ybWF0dGVkIHJlcXVlc3RzIG91dHNpZGUgdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBjbGllbnQuIFRoZSByZXR1cm5lZAorLy8gdG8gY29uc3RydWN0IHByb3Blcmx5IGZvcm1hdHRlZCByZXF1ZXN0cyBvdXRzaWRlIHRoZSBzdGFuZGFyZCBIVFRQIGNsaWVudC4gVGhlIHJldHVybmVkCiAvLyByZXF1ZXN0IGNhbiB0aGVuIGJlIHNlcmlhbGl6ZWQgdXNpbmcgU2VyaWFsaXplTWVzc2FnZSgpLgogLy8KIC8vIFBhcmFtZXRlcnM6CiAvLyAgIC0gc3RyaW5nR3JlbWxpbjogVGhlIEdyZW1saW4gcXVlcnkgc3RyaW5nIHRvIGV4ZWN1dGUKIC8vICAgLSB0cmF2ZXJzYWxTb3VyY2U6IFRoZSBuYW1lIG9mIHRoZSB0cmF2ZXJzYWwgc291cmNlICh0eXBpY2FsbHkgImciKQotLy8gICAtIHNlc3Npb25JZDogT3B0aW9uYWwgc2Vzc2lvbiBJRCBmb3Igc3RhdGVmdWwgcmVxdWVzdHMgKHVzZSAiIiBmb3Igc3RhdGVsZXNzKQogLy8gICAtIHJlcXVlc3RPcHRpb25zOiBPcHRpb25zIHN1Y2ggYXMgYmluZGluZ3MsIHRpbWVvdXQsIGJhdGNoIHNpemUsIGV0Yy4KIC8vCiAvLyBSZXR1cm5zOgpAQCAtNTMsMTA1ICs0MSwzOSBAQAogLy8KIC8vIEV4YW1wbGUgZm9yIGFsdGVybmF0aXZlIHRyYW5zcG9ydHM6CiAvLwotLy8JcmVxIDo9IE1ha2VTdHJpbmdSZXF1ZXN0KCJnLlYoKS5jb3VudCgpIiwgImciLCAiIiwgUmVxdWVzdE9wdGlvbnN7fSkKKy8vCXJlcSA6PSBNYWtlU3RyaW5nUmVxdWVzdCgiZy5WKCkuY291bnQoKSIsICJnIiwgUmVxdWVzdE9wdGlvbnN7fSkKIC8vCXNlcmlhbGl6ZXIgOj0gbmV3R3JhcGhCaW5hcnlTZXJpYWxpemVyKG5pbCkKIC8vCWJ5dGVzLCBfIDo9IHNlcmlhbGl6ZXIuKGdyYXBoQmluYXJ5U2VyaWFsaXplcikuU2VyaWFsaXplTWVzc2FnZSgmcmVxKQogLy8JLy8gU2VuZCBieXRlcyBvdmVyIGdSUEMsIEhUVFAvMiwgZXRjLgotZnVuYyBNYWtlU3RyaW5nUmVxdWVzdChzdHJpbmdHcmVtbGluIHN0cmluZywgdHJhdmVyc2FsU291cmNlIHN0cmluZywgc2Vzc2lvbklkIHN0cmluZywgcmVxdWVzdE9wdGlvbnMgUmVxdWVzdE9wdGlvbnMpIChyZXEgcmVxdWVzdCkgewotCW5ld1Byb2Nlc3NvciA6PSBzdHJpbmdQcm9jZXNzb3IKLQluZXdBcmdzIDo9IG1hcFtzdHJpbmddaW50ZXJmYWNle317Ci0JCSJncmVtbGluIjogc3RyaW5nR3JlbWxpbiwKLQkJImFsaWFzZXMiOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9ewotCQkJImciOiB0cmF2ZXJzYWxTb3VyY2UsCi0JCX0sCi0JfQotCWlmIHNlc3Npb25JZCAhPSAiIiB7Ci0JCW5ld1Byb2Nlc3NvciA9IHNlc3Npb25Qcm9jZXNzb3IKLQkJbmV3QXJnc1sic2Vzc2lvbiJdID0gc2Vzc2lvbklkCi0JfQotCXZhciByZXF1ZXN0SWQgdXVpZC5VVUlECi0JaWYgcmVxdWVzdE9wdGlvbnMucmVxdWVzdElEID09IHV1aWQuTmlsIHsKLQkJcmVxdWVzdElkID0gdXVpZC5OZXcoKQotCX0gZWxzZSB7Ci0JCXJlcXVlc3RJZCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3RJRAorZnVuYyBNYWtlU3RyaW5nUmVxdWVzdChzdHJpbmdHcmVtbGluIHN0cmluZywgdHJhdmVyc2FsU291cmNlIHN0cmluZywgcmVxdWVzdE9wdGlvbnMgUmVxdWVzdE9wdGlvbnMpIChyZXEgUmVxdWVzdE1lc3NhZ2UpIHsKKwluZXdGaWVsZHMgOj0gbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsKKwkJImxhbmd1YWdlIjogImdyZW1saW4tbGFuZyIsCisJCSJnIjogICAgICAgIHRyYXZlcnNhbFNvdXJjZSwKIAl9CiAKIAlpZiByZXF1ZXN0T3B0aW9ucy5iaW5kaW5ncyAhPSBuaWwgewotCQluZXdBcmdzWyJiaW5kaW5ncyJdID0gcmVxdWVzdE9wdGlvbnMuYmluZGluZ3MKKwkJbmV3RmllbGRzWyJiaW5kaW5ncyJdID0gcmVxdWVzdE9wdGlvbnMuYmluZGluZ3MKIAl9CiAKIAlpZiByZXF1ZXN0T3B0aW9ucy5ldmFsdWF0aW9uVGltZW91dCAhPSAwIHsKLQkJbmV3QXJnc1siZXZhbHVhdGlvblRpbWVvdXQiXSA9IHJlcXVlc3RPcHRpb25zLmV2YWx1YXRpb25UaW1lb3V0CisJCW5ld0ZpZWxkc1siZXZhbHVhdGlvblRpbWVvdXQiXSA9IHJlcXVlc3RPcHRpb25zLmV2YWx1YXRpb25UaW1lb3V0CiAJfQogCiAJaWYgcmVxdWVzdE9wdGlvbnMuYmF0Y2hTaXplICE9IDAgewotCQluZXdBcmdzWyJiYXRjaFNpemUiXSA9IHJlcXVlc3RPcHRpb25zLmJhdGNoU2l6ZQorCQluZXdGaWVsZHNbImJhdGNoU2l6ZSJdID0gcmVxdWVzdE9wdGlvbnMuYmF0Y2hTaXplCiAJfQogCiAJaWYgcmVxdWVzdE9wdGlvbnMudXNlckFnZW50ICE9ICIiIHsKLQkJbmV3QXJnc1sidXNlckFnZW50Il0gPSByZXF1ZXN0T3B0aW9ucy51c2VyQWdlbnQKKwkJbmV3RmllbGRzWyJ1c2VyQWdlbnQiXSA9IHJlcXVlc3RPcHRpb25zLnVzZXJBZ2VudAogCX0KIAogCWlmIHJlcXVlc3RPcHRpb25zLm1hdGVyaWFsaXplUHJvcGVydGllcyAhPSAiIiB7Ci0JCW5ld0FyZ3NbIm1hdGVyaWFsaXplUHJvcGVydGllcyJdID0gcmVxdWVzdE9wdGlvbnMubWF0ZXJpYWxpemVQcm9wZXJ0aWVzCisJCW5ld0ZpZWxkc1sibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIl0gPSByZXF1ZXN0T3B0aW9ucy5tYXRlcmlhbGl6ZVByb3BlcnRpZXMKIAl9CiAKLQlyZXR1cm4gcmVxdWVzdHsKLQkJcmVxdWVzdElEOiByZXF1ZXN0SWQsCi0JCW9wOiAgICAgICAgc3RyaW5nT3AsCi0JCXByb2Nlc3NvcjogbmV3UHJvY2Vzc29yLAotCQlhcmdzOiAgICAgIG5ld0FyZ3MsCi0JfQotfQotCi1jb25zdCBieXRlY29kZU9wID0gImJ5dGVjb2RlIgotY29uc3QgYnl0ZWNvZGVQcm9jZXNzb3IgPSAidHJhdmVyc2FsIgotY29uc3QgYXV0aE9wID0gImF1dGhlbnRpY2F0aW9uIgotY29uc3QgYXV0aFByb2Nlc3NvciA9ICJ0cmF2ZXJzYWwiCi0KLS8vIE1ha2VCeXRlY29kZVJlcXVlc3QgY3JlYXRlcyBhIHJlcXVlc3QgZnJvbSBHcmVtbGluIGJ5dGVjb2RlIGZvciBzdWJtaXNzaW9uIHRvIGEgR3JlbWxpbiBzZXJ2ZXIuCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkIHB1YmxpY2x5IHRvIGVuYWJsZSBhbHRlcm5hdGl2ZSB0cmFuc3BvcnQgcHJvdG9jb2xzIChnUlBDLCBIVFRQLzIsIGV0Yy4pCi0vLyB0byBjb25zdHJ1Y3QgcHJvcGVybHkgZm9ybWF0dGVkIHJlcXVlc3RzIG91dHNpZGUgdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBjbGllbnQuIFRoZSByZXR1cm5lZAotLy8gcmVxdWVzdCBjYW4gdGhlbiBiZSBzZXJpYWxpemVkIHVzaW5nIFNlcmlhbGl6ZU1lc3NhZ2UoKS4KLS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8gICAtIGJ5dGVjb2RlR3JlbWxpbjogVGhlIEdyZW1saW4gYnl0ZWNvZGUgdG8gZXhlY3V0ZQotLy8gICAtIHRyYXZlcnNhbFNvdXJjZTogVGhlIG5hbWUgb2YgdGhlIHRyYXZlcnNhbCBzb3VyY2UgKHR5cGljYWxseSAiZyIpCi0vLyAgIC0gc2Vzc2lvbklkOiBPcHRpb25hbCBzZXNzaW9uIElEIGZvciBzdGF0ZWZ1bCByZXF1ZXN0cyAodXNlICIiIGZvciBzdGF0ZWxlc3MpCi0vLwotLy8gUmV0dXJuczoKLS8vICAgLSByZXF1ZXN0OiBBIHJlcXVlc3Qgc3RydWN0dXJlIHJlYWR5IGZvciBzZXJpYWxpemF0aW9uCi0vLwotLy8gRXhhbXBsZSBmb3IgYWx0ZXJuYXRpdmUgdHJhbnNwb3J0czoKLS8vCi0vLwlieXRlY29kZSA6PSBnLlYoKS5IYXNMYWJlbCgicGVyc29uIikuQnl0ZWNvZGUKLS8vCXJlcSA6PSBNYWtlQnl0ZWNvZGVSZXF1ZXN0KGJ5dGVjb2RlLCAiZyIsICIiKQotLy8Jc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmlsKQotLy8JYnl0ZXMsIF8gOj0gc2VyaWFsaXplci4oZ3JhcGhCaW5hcnlTZXJpYWxpemVyKS5TZXJpYWxpemVNZXNzYWdlKCZyZXEpCi0vLwkvLyBTZW5kIGJ5dGVzIG92ZXIgZ1JQQywgSFRUUC8yLCBldGMuCi1mdW5jIE1ha2VCeXRlY29kZVJlcXVlc3QoYnl0ZWNvZGVHcmVtbGluICpCeXRlY29kZSwgdHJhdmVyc2FsU291cmNlIHN0cmluZywgc2Vzc2lvbklkIHN0cmluZykgKHJlcSByZXF1ZXN0KSB7Ci0JbmV3UHJvY2Vzc29yIDo9IGJ5dGVjb2RlUHJvY2Vzc29yCi0JbmV3QXJncyA6PSBtYXBbc3RyaW5nXWludGVyZmFjZXt9ewotCQkiZ3JlbWxpbiI6ICpieXRlY29kZUdyZW1saW4sCi0JCSJhbGlhc2VzIjogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsKLQkJCSJnIjogdHJhdmVyc2FsU291cmNlLAotCQl9LAotCX0KLQlpZiBzZXNzaW9uSWQgIT0gIiIgewotCQluZXdQcm9jZXNzb3IgPSBzZXNzaW9uUHJvY2Vzc29yCi0JCW5ld0FyZ3NbInNlc3Npb24iXSA9IHNlc3Npb25JZAotCX0KLQotCWZvciBrLCB2IDo9IHJhbmdlIGV4dHJhY3RSZXFBcmdzKGJ5dGVjb2RlR3JlbWxpbikgewotCQluZXdBcmdzW2tdID0gdgotCX0KLQotCXJldHVybiByZXF1ZXN0ewotCQlyZXF1ZXN0SUQ6IHV1aWQuTmV3KCksCi0JCW9wOiAgICAgICAgYnl0ZWNvZGVPcCwKLQkJcHJvY2Vzc29yOiBuZXdQcm9jZXNzb3IsCi0JCWFyZ3M6ICAgICAgbmV3QXJncywKKwlyZXR1cm4gUmVxdWVzdE1lc3NhZ2V7CisJCUdyZW1saW46IHN0cmluZ0dyZW1saW4sCisJCUZpZWxkczogIG5ld0ZpZWxkcywKIAl9CiB9CiAKQEAgLTE2NCw5NCArODYsMyBAQAogCSJ1c2VyQWdlbnQiOiAgICAgICAgICAgICB0cnVlLAogCSJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiOiB0cnVlLAogfQotCi0vLyBleHRyYWN0UmVxQXJncyBleHRyYWN0cyByZXF1ZXN0IGFyZ3VtZW50cyBmcm9tIHRoZSBwcm92aWRlZCBieXRlY29kZS4KLWZ1bmMgZXh0cmFjdFJlcUFyZ3MoYnl0ZWNvZGUgKkJ5dGVjb2RlKSBtYXBbc3RyaW5nXWludGVyZmFjZXt9IHsKLQlhcmdzIDo9IG1ha2UobWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKLQotCWZvciBfLCBpbnNuIDo9IHJhbmdlIGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucyB7Ci0JCXN3aXRjaCBpbnNuLm9wZXJhdG9yIHsKLQkJY2FzZSAid2l0aFN0cmF0ZWdpZXMiOgotCQkJZm9yIGssIHYgOj0gcmFuZ2UgZXh0cmFjdFdpdGhTdHJhdGVnaWVzUmVxQXJncyhpbnNuKSB7Ci0JCQkJYXJnc1trXSA9IHYKLQkJCX0KLQkJY2FzZSAid2l0aCI6Ci0JCQlpZiBrLCB2IDo9IGV4dHJhY3RXaXRoUmVxQXJnKGluc24pOyBrICE9ICIiIHsKLQkJCQlhcmdzW2tdID0gdgotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGFyZ3MKLX0KLQotLy8gZXh0cmFjdFdpdGhTdHJhdGVnaWVzUmVxQXJncyBleHRyYWN0cyByZXF1ZXN0IGFyZ3VtZW50cyBmcm9tIHRoZSBwYXNzZWQKLS8vICJ3aXRoU3RyYXRlZ2llcyIgc291cmNlIGluc3RydWN0aW9uLiBPbmx5IE9wdGlvbnNTdHJhdGVneSBpcyBjb25zaWRlcmVkLgotZnVuYyBleHRyYWN0V2l0aFN0cmF0ZWdpZXNSZXFBcmdzKGluc24gaW5zdHJ1Y3Rpb24pIG1hcFtzdHJpbmddaW50ZXJmYWNle30gewotCWFyZ3MgOj0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQotCi0JZm9yIF8sIHN0cmF0ZWd5SW50ZXJmYWNlIDo9IHJhbmdlIGluc24uYXJndW1lbnRzIHsKLQkJc3RyYXRlZ3ksIG9rIDo9IHN0cmF0ZWd5SW50ZXJmYWNlLigqdHJhdmVyc2FsU3RyYXRlZ3kpCi0JCWlmICFvayB7Ci0JCQkvLyAoKkdyYXBoVHJhdmVyc2FsU291cmNlKS5XaXRoU3RyYXRlZ2llcyBhY2NlcHRzCi0JCQkvLyBUcmF2ZXJzYWxTdHJhdGVneSBwYXJhbWV0ZXJzIG9ubHkuIFRodXMsIHRoaXMKLQkJCS8vIHNob3VsZCBiZSB1bnJlYWNoYWJsZS4KLQkJCWNvbnRpbnVlCi0JCX0KLQotCQlpZiBzdHJhdGVneS5uYW1lICE9IGRlY29yYXRpb25OYW1lc3BhY2UrIk9wdGlvbnNTdHJhdGVneSIgewotCQkJY29udGludWUKLQkJfQotCi0JCWZvciBrLCB2IDo9IHJhbmdlIHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb24gewotCQkJaWYgYWxsb3dlZFJlcUFyZ3Nba10gewotCQkJCWFyZ3Nba10gPSB2Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gYXJncwotfQotCi0vLyBleHRyYWN0V2l0aFJlcUFyZyBleHRyYWN0cyBhIHJlcXVlc3QgYXJndW1lbnQgZnJvbSB0aGUgcGFzc2VkICJ3aXRoIiBzb3VyY2UKLS8vIGluc3RydWN0aW9uLgotZnVuYyBleHRyYWN0V2l0aFJlcUFyZyhpbnNuIGluc3RydWN0aW9uKSAoa2V5IHN0cmluZywgdmFsdWUgaW50ZXJmYWNle30pIHsKLQlpZiBsZW4oaW5zbi5hcmd1bWVudHMpICE9IDIgewotCQkvLyAoKkdyYXBoVHJhdmVyc2FsU291cmNlKS5XaXRoIGFjY2VwdHMgdHdvIHBhcmFtZXRlcnMuIFRodXMsCi0JCS8vIHRoaXMgc2hvdWxkIGJlIHVucmVhY2hhYmxlLgotCQlyZXR1cm4gIiIsIG5pbAotCX0KLQotCWtleSwgb2sgOj0gaW5zbi5hcmd1bWVudHNbMF0uKHN0cmluZykKLQlpZiAhb2sgewotCQlyZXR1cm4gIiIsIG5pbAotCX0KLQotCWlmICFhbGxvd2VkUmVxQXJnc1trZXldIHsKLQkJcmV0dXJuICIiLCBuaWwKLQl9Ci0KLQlyZXR1cm4ga2V5LCBpbnNuLmFyZ3VtZW50c1sxXQotfQotCi1mdW5jIG1ha2VCYXNpY0F1dGhSZXF1ZXN0KGF1dGggc3RyaW5nKSAocmVxIHJlcXVlc3QpIHsKLQlyZXR1cm4gcmVxdWVzdHsKLQkJcmVxdWVzdElEOiB1dWlkLk5ldygpLAotCQlvcDogICAgICAgIGF1dGhPcCwKLQkJcHJvY2Vzc29yOiBhdXRoUHJvY2Vzc29yLAotCQlhcmdzOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9ewotCQkJInNhc2wiOiBhdXRoLAotCQl9LAotCX0KLX0KLQotZnVuYyBtYWtlQ2xvc2VTZXNzaW9uUmVxdWVzdChzZXNzaW9uSWQgc3RyaW5nKSByZXF1ZXN0IHsKLQlyZXR1cm4gcmVxdWVzdHsKLQkJcmVxdWVzdElEOiB1dWlkLk5ldygpLAotCQlvcDogICAgICAgICJjbG9zZSIsCi0JCXByb2Nlc3NvcjogInNlc3Npb24iLAotCQlhcmdzOiBtYXBbc3RyaW5nXWludGVyZmFjZXt9ewotCQkJInNlc3Npb24iOiBzZXNzaW9uSWQsCi0JCX0sCi0JfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvcmVxdWVzdF90ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvcmVxdWVzdF90ZXN0LmdvCmluZGV4IGYwZjI4NTYuLjZiZDkxZjUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3JlcXVlc3RfdGVzdC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9yZXF1ZXN0X3Rlc3QuZ28KQEAgLTIyLDQ2ICsyMiwzMyBAQAogaW1wb3J0ICgKIAkidGVzdGluZyIKIAotCSJnaXRodWIuY29tL2dvb2dsZS91dWlkIgotCiAJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCiApCiAKIGZ1bmMgVGVzdFJlcXVlc3QodCAqdGVzdGluZy5UKSB7Ci0JdC5SdW4oIlRlc3QgbWFrZVN0cmluZ1JlcXVlc3QoKSB3aXRoIGN1c3RvbSByZXF1ZXN0SUQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlyZXF1ZXN0SWQgOj0gdXVpZC5OZXcoKQotCQlyIDo9IE1ha2VTdHJpbmdSZXF1ZXN0KCJnLlYoKSIsICJnIiwgIiIsCi0JCQluZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS5TZXRSZXF1ZXN0SWQocmVxdWVzdElkKS5DcmVhdGUoKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIHJlcXVlc3RJZCwgci5yZXF1ZXN0SUQpCi0JfSkKLQogCXQuUnVuKCJUZXN0IG1ha2VTdHJpbmdSZXF1ZXN0KCkgd2l0aCBubyBiaW5kaW5ncyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXIgOj0gTWFrZVN0cmluZ1JlcXVlc3QoImcuVigpIiwgImciLCAiIiwgKm5ldyhSZXF1ZXN0T3B0aW9ucykpCi0JCWFzc2VydC5Ob3ROaWwodCwgci5yZXF1ZXN0SUQpCi0JCWFzc2VydC5Ob3RFcXVhbCh0LCB1dWlkLk5pbCwgci5yZXF1ZXN0SUQpCisJCXIgOj0gTWFrZVN0cmluZ1JlcXVlc3QoImcuVigpIiwgImciLCAqbmV3KFJlcXVlc3RPcHRpb25zKSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLlYoKSIsIHIuR3JlbWxpbikKKwkJYXNzZXJ0LkVxdWFsKHQsICJnIiwgci5GaWVsZHNbImciXSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJncmVtbGluLWxhbmciLCByLkZpZWxkc1sibGFuZ3VhZ2UiXSkKKwkJYXNzZXJ0Lk5pbCh0LCByLkZpZWxkc1siYmluZGluZ3MiXSkKIAl9KQogCiAJdC5SdW4oIlRlc3QgbWFrZVN0cmluZ1JlcXVlc3QoKSB3aXRoIGN1c3RvbSBldmFsdWF0aW9uVGltZW91dCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXIgOj0gTWFrZVN0cmluZ1JlcXVlc3QoImcuVigpIiwgImciLCAiIiwKKwkJciA6PSBNYWtlU3RyaW5nUmVxdWVzdCgiZy5WKCkiLCAiZyIsCiAJCQluZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS5TZXRFdmFsdWF0aW9uVGltZW91dCgxMjM0KS5DcmVhdGUoKSkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByLnJlcXVlc3RJRCkKLQkJYXNzZXJ0Lk5vdEVxdWFsKHQsIHV1aWQuTmlsLCByLnJlcXVlc3RJRCkKLQkJYXNzZXJ0LkVxdWFsKHQsIDEyMzQsIHIuYXJnc1siZXZhbHVhdGlvblRpbWVvdXQiXSkKKwkJYXNzZXJ0LkVxdWFsKHQsIDEyMzQsIHIuRmllbGRzWyJldmFsdWF0aW9uVGltZW91dCJdKQogCX0pCiAKIAl0LlJ1bigiVGVzdCBtYWtlU3RyaW5nUmVxdWVzdCgpIHdpdGggY3VzdG9tIGJhdGNoU2l6ZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXIgOj0gTWFrZVN0cmluZ1JlcXVlc3QoImcuVigpIiwgImciLCAiIiwKKwkJciA6PSBNYWtlU3RyaW5nUmVxdWVzdCgiZy5WKCkiLCAiZyIsCiAJCQluZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS5TZXRCYXRjaFNpemUoMTIzKS5DcmVhdGUoKSkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByLnJlcXVlc3RJRCkKLQkJYXNzZXJ0Lk5vdEVxdWFsKHQsIHV1aWQuTmlsLCByLnJlcXVlc3RJRCkKLQkJYXNzZXJ0LkVxdWFsKHQsIDEyMywgci5hcmdzWyJiYXRjaFNpemUiXSkKKwkJYXNzZXJ0LkVxdWFsKHQsIDEyMywgci5GaWVsZHNbImJhdGNoU2l6ZSJdKQogCX0pCiAKIAl0LlJ1bigiVGVzdCBtYWtlU3RyaW5nUmVxdWVzdCgpIHdpdGggY3VzdG9tIHVzZXJBZ2VudCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXIgOj0gTWFrZVN0cmluZ1JlcXVlc3QoImcuVigpIiwgImciLCAiIiwKKwkJciA6PSBNYWtlU3RyaW5nUmVxdWVzdCgiZy5WKCkiLCAiZyIsCiAJCQluZXcoUmVxdWVzdE9wdGlvbnNCdWlsZGVyKS5TZXRVc2VyQWdlbnQoIlRlc3RVc2VyQWdlbnQiKS5DcmVhdGUoKSkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByLnJlcXVlc3RJRCkKLQkJYXNzZXJ0Lk5vdEVxdWFsKHQsIHV1aWQuTmlsLCByLnJlcXVlc3RJRCkKLQkJYXNzZXJ0LkVxdWFsKHQsICJUZXN0VXNlckFnZW50Iiwgci5hcmdzWyJ1c2VyQWdlbnQiXSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJUZXN0VXNlckFnZW50Iiwgci5GaWVsZHNbInVzZXJBZ2VudCJdKQogCX0pCiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9yZXNvdXJjZXMvZXJyb3ItbWVzc2FnZXMvZW4uanNvbiBiL2dyZW1saW4tZ28vZHJpdmVyL3Jlc291cmNlcy9lcnJvci1tZXNzYWdlcy9lbi5qc29uCmluZGV4IGZkZGFiNTYuLmVjYWU4YTEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3Jlc291cmNlcy9lcnJvci1tZXNzYWdlcy9lbi5qc29uCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL3Jlc291cmNlcy9lcnJvci1tZXNzYWdlcy9lbi5qc29uCkBAIC01LDggKzUsNiBAQAogICAiRTAxMDRfQ09OTkVDVElPTlBPT0xfSU5TVEFOVElBVEVfRkFJTCI6ICJFMDEwNDogbm8gc3VjY2Vzc2Z1bCBjb25uZWN0aW9ucyBjb3VsZCBiZSBtYWRlOiAlcyIsCiAgICJFMDEwNV9DT05ORUNUSU9OUE9PTF9GVUxMX05PTkVfVkFMSUQiOiAiRTAxMDU6IG5vIHZhbGlkIGNvbm5lY3Rpb25zIGZvdW5kIGFuZCBtYXhpbXVtIGNvbmN1cnJlbnQgY29ubmVjdGlvbiBjb3VudCByZWFjaGVkIiwKIAotICAiRTAyMDFfRFJJVkVSX1JFTU9URV9DT05ORUNUSU9OX0NSRUFURVNFU1NJT05fTVVMVElQTEVfVVVJRFNfRVJST1IiOiAiRTAyMDE6IG1vcmUgdGhhbiBvbmUgU2Vzc2lvbiBJRCBzcGVjaWZpZWQuIENhbm5vdCBjcmVhdGUgU2Vzc2lvbiB3aXRoIG11bHRpcGxlIFVVSURzIiwKLSAgIkUwMjAyX0RSSVZFUl9SRU1PVEVfQ09OTkVDVElPTl9DUkVBVEVTRVNTSU9OX1NFU1NJT05fRlJPTV9TRVNTSU9OX0VSUk9SIjogIkUwMjAyOiBjb25uZWN0aW9uIGlzIGFscmVhZHkgYm91bmQgdG8gYSBTZXNzaW9uIC0gY2hpbGQgc2Vzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIiwKICAgIkUwMjAzX0RSSVZFUl9SRU1PVEVfQ09OTkVDVElPTl9TVUJNSVRCWVRFQ09ERV9UT19DTE9TRURfQ09OTkVDVElPTl9FUlJPUiI6ICJFMDIwMzogY2Fubm90IHN1Ym1pdCBieXRlY29kZSB0byBjbG9zZWQgY29ubmVjdGlvbiIsCiAKICAgIkUwMzAxX0dSQVBIX0dFVFBBVEhPQkpFQ1RfVU5FUVVBTF9MQUJFTFNfT0JKRUNUU19MRU5HVEhfRVJST1IiOiAiRTAzMDE6IHBhdGggaXMgaW52YWxpZCBiZWNhdXNlIGl0IGRvZXMgbm90IGNvbnRhaW4gYW4gZXF1YWwgbnVtYmVyIG9mIExhYmVscyBhbmQgT2JqZWN0cyIsCkBAIC0yMyw5ICsyMSwxMCBAQAogICAiRTA0MDhfR1JBUEhfQklOQVJZX0dFVFNFUklBTElaRVJUT1JFQURfVU5LTk9XTl9UWVBFX0VSUk9SIjogIkUwNDA4OiB1bmtub3duIGRhdGEgdHlwZSB0byBkZXNlcmlhbGl6ZSAweCV4IiwKICAgIkUwNDA5X0dSQVBIX0JJTkFSWV9HRVRTRVJJQUxJWkVSVE9SRUFEX1VOS05PV05fQ1VTVE9NX1RZUEVfRVJST1IiOiAiRTA0MDk6IHVua25vd24gY3VzdG9tIGRhdGEgdHlwZSB0byBkZXNlcmlhbGl6ZSAlcyIsCiAKLSAgIkUwNTAxX1BST1RPQ09MX1JFU1BPTlNFSEFORExFUl9OT19SRVNVTFRTRVRfT05fREFUQV9SRUNFSVZFIjoiRTA1MDE6IHJlc3VsdFNldCB3YXMgbm90IGNyZWF0ZWQgYmVmb3JlIGRhdGEgd2FzIHJlY2VpdmVkIiwKLSAgIkUwNTAyX1BST1RPQ09MX1JFU1BPTlNFSEFORExFUl9SRUFEX0xPT1BfRVJST1IiOiAiRTA1MDI6IGVycm9yIGluIHJlYWQgbG9vcCwgZXJyb3IgbWVzc2FnZSAnJSt2Jy4gc3RhdHVzQ29kZTogJWQiLAotICAiRTA1MDNfUFJPVE9DT0xfUkVTUE9OU0VIQU5ETEVSX0FVVEhfRVJST1IiOiJFMDUwMzogZmFpbGVkIHRvIGF1dGhlbnRpY2F0ZSAldiA6ICV2IiwKKyAgIkUwNTAxX1JFU1BPTlNFX05PX1JFU1VMVFNFVF9PTl9EQVRBX1JFQ0VJVkUiOiJFMDUwMTogcmVzdWx0U2V0IHdhcyBub3QgY3JlYXRlZCBiZWZvcmUgZGF0YSB3YXMgcmVjZWl2ZWQiLAorICAiRTA1MDJfUkVTUE9OU0VfRVJST1IiOiAiRTA1MDI6IGVycm9yIGhhbmRsaW5nIHJlc3BvbnNlLCBlcnJvciBtZXNzYWdlICclK3YnLiBzdGF0dXNDb2RlOiAlZCIsCisgICJFMDUwMl9SRVNQT05TRV9SRUFEX0xPT1BfRVJST1IiOiAiRTA1MDI6IGVycm9yIGluIHJlYWQgbG9vcCwgZXJyb3IgbWVzc2FnZSAnJXYnLiBzdGF0dXNDb2RlOiAlZCIsCisgICJFMDUwM19SRVNQT05TRV9BVVRIX0VSUk9SIjoiRTA1MDM6IGZhaWxlZCB0byBhdXRoZW50aWNhdGUgJXYgOiAldiIsCiAKICAgIkUwNjAxX1JFU1VMVF9OT1RfVkVSVEVYX0VSUk9SIjoiRTA2MDE6IHJlc3VsdCBpcyBub3QgYSBWZXJ0ZXgiLAogICAiRTA2MDJfUkVTVUxUX05PVF9FREdFX0VSUk9SIjogIkUwNjAyOiByZXN1bHQgaXMgbm90IGFuIEVkZ2UiLApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvcmVzb3VyY2VzL2xvZ2dlci1tZXNzYWdlcy9lbi5qc29uIGIvZ3JlbWxpbi1nby9kcml2ZXIvcmVzb3VyY2VzL2xvZ2dlci1tZXNzYWdlcy9lbi5qc29uCmluZGV4IDYzMjg3ZGIuLmY3MDI1ZTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3Jlc291cmNlcy9sb2dnZXItbWVzc2FnZXMvZW4uanNvbgorKysgYi9ncmVtbGluLWdvL2RyaXZlci9yZXNvdXJjZXMvbG9nZ2VyLW1lc3NhZ2VzL2VuLmpzb24KQEAgLTgsMjQgKzgsMTkgQEAKICAgIk9QRU5JTkdfQ09OTkVDVElPTiI6ICJDb25uZWN0aW5nLiIsCiAgICJXUklURV9SRVFVRVNUIjogIldyaXRpbmcgcmVxdWVzdC4iLAogICAiUkVBRF9MT09QX0VSUk9SIjogIlJlYWQgbG9vcCBlcnJvciAnJXMnLCBjbG9zaW5nIHJlYWQgbG9vcC4iLAotICAiRVJST1JfQ0FMTEJBQ0siOiAiQ29ubmVjdGlvbiBlcnJvciBjYWxsYmFjayBpbnZva2VkLCBjbG9zaW5nIHByb3RvY29sLiIsCi0gICJDUkVBVElOR19SRVFVRVNUIjogIkNyZWF0ZWQgcmVxdWVzdCB3aXRoIGlkICclcyciLAotICAiUkVBRF9DT01QTEVURSI6ICJSZWFkIGNvbXBsZXRlIGZvciByZXNwb25zZSB3aXRoIGlkICclcyciLAorICAiQ1JFQVRJTkdfUkVRVUVTVCI6ICJDcmVhdGluZyByZXF1ZXN0IiwKKyAgIlJFQURfQ09NUExFVEUiOiAiUmVhZCBjb21wbGV0ZSBmb3IgcmVzcG9uc2UiLAogICAiU1VCTUlUX1NUQVJURURfU1RSSU5HIjogIkNsaWVudCBpbnZva2VkIFN1Ym1pdCB3aXRoIHN0cmluZyBhcmd1bWVudDogJXMiLAogICAiU1VCTUlUX1NUQVJURURfQllURUNPREUiOiAiQ2xpZW50IGludm9rZWQgU3VibWl0IHdpdGggYnl0ZWNvZGUgYXJndW1lbnQ6ICUrdlxuIiwKLSAgIkZBSUxFRF9UT19DTE9TRV9JTl9FUlJPUl9DQUxMQkFDSyI6ICJGYWlsZWQgdG8gY2xvc2UgcHJvdG9jb2wgaW4gZXJyb3IgY2FsbGJhY2sgJyVzJyIsCi0gICJGQUlMRURfVE9fV1JJVEVfTUVTU0FHRSI6ICJGYWlsZWQgdG8gd3JpdGUgbWVzc2FnZSB0eXBlOiAnJXMnLCBlcnJvcjogJyVzJyIsCi0gICJGQUlMRURfVE9fU0VUX1dSSVRFX0RFQURMSU5FIjogIkZhaWxlZCB0byBzZXQgd3JpdGUgZGVhZGxpbmUsIGVycm9yOiAnJXMnIiwKICAgIkxPR19FUlJPUl9HRU5FUklDIjogIkVycm9yIG9jY3VycmVkIGR1cmluZyBvcGVyYXRpb24gJXM6ICclcyciLAotICAiQ1JFQVRJTkdfU0VTU0lPTl9DT05ORUNUSU9OIjogIkNyZWF0aW5nIFNlc3Npb24gYmFzZWQgY29ubmVjdGlvbiIsCi0gICJDTE9TSU5HX1NQQVdORURfU0VTU0lPTlMiOiAiQ2xvc2luZyBzcGF3bmVkIHNlc3Npb25zIGZyb20gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiB3aXRoIHVybCAnJXMnIiwKLSAgIkNMT1NFX1NFU1NJT04iOiAiQ2xvc2luZyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHdpdGggdXJsICclcycgd2l0aCBzZXNzaW9uICclcyciLAotICAiQ0xPU0VfU0VTU0lPTl9SRVFVRVNUX0VSUk9SIjogIkVycm9yIHdoaWxlIGNsb3NpbmcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiB3aXRoIHVybCAnJXMnIGFuZCB3aXRoIHNlc3Npb24gJyVzJzogJXMiLAogICAiQ0xPU0VfRFJJVkVSX1JFTU9URV9DT05ORUNUSU9OIjogIkNsb3NpbmcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiB3aXRoIHVybCAnJXMnIiwKICAgIkNMT1NFX0NMSUVOVCI6ICJDbG9zaW5nIENsaWVudCB3aXRoIHVybCAnJXMnIiwKICAgIkVSUk9SX0NMT1NJTkdfQ09OTkVDVElPTiI6ICJJZ25vcmluZyBlcnJvciBjbG9zaW5nIGNvbm5lY3Rpb246ICVzIiwKICAgIkNSRUFURV9DT05ORUNUSU9OX0VSUk9SIjogIkVycm9yIGNyZWF0aW5nIG5ldyBjb25uZWN0aW9uIGZvciBjb25uZWN0aW9uIHBvb2w6ICVzIiwKICAgIlBPT0xfTkVXX0NPTk5FQ1RJT05fRVJST1IiOiAiRmFsbGluZyBiYWNrIHRvIGxlYXN0LXVzZWQgY29ubmVjdGlvbi4gQ3JlYXRpbmcgbmV3IGNvbm5lY3Rpb24gZHVlIHRvIGxlYXN0LXVzZWQgY29ubmVjdGlvbiBleGNlZWRpbmcgY29uY3VycmVudCB1c2FnZSB0aHJlc2hvbGQgZmFpbGVkOiAlcyIsCi0gICJTRVNTSU9OX0RFVEVDVEVEIjogIlNlc3Npb24gZGV0ZWN0ZWQuIFNldHRpbmcgY29ubmVjdGlvbiBwb29sIHNpemUgbWF4aW11bSB0byAxLiIsCi0gICJQT09MX0lOSVRJQUxfRVhDRUVEU19NQVhJTVVNIjogIkluaXRpYWxDb25jdXJyZW50Q29ubmVjdGlvbnMgc2V0dGluZyAlZCBleGNlZWRlZCBNYXhpbXVtQ29uY3VycmVudENvbm5lY3Rpb25zIHNldHRpbmcgJWQgLSBsaW1pdGluZyBJbml0aWFsQ29uY3VycmVudENvbm5lY3Rpb25zIHRvICVkLiIKKyAgIlBPT0xfSU5JVElBTF9FWENFRURTX01BWElNVU0iOiAiSW5pdGlhbENvbmN1cnJlbnRDb25uZWN0aW9ucyBzZXR0aW5nICVkIGV4Y2VlZGVkIE1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgc2V0dGluZyAlZCAtIGxpbWl0aW5nIEluaXRpYWxDb25jdXJyZW50Q29ubmVjdGlvbnMgdG8gJWQuIiwKKyAgIkZBSUxFRF9UT19SRUNFSVZFX1JFU1BPTlNFIjogIkZhaWxlZCB0byByZWNlaXZlIHJlc3BvbnNlOiAlcyIsCisgICJGQUlMRURfVE9fU0VORF9SRVFVRVNUIjogIkZhaWxlZCB0byBzZW5kIHJlcXVlc3Q6ICVzIiwKKyAgIkZBSUxFRF9UT19DTE9TRV9SRVNQT05TRV9CT0RZIjogIkVycm9yIGNsb3NpbmcgcmVzcG9uc2UgYm9keTogJXMiLAorICAiRkFJTEVEX1RPX0NMT1NFX0RFQ09NUFJFU1NJT05fUkVBREVSIjogIkVycm9yIGNsb3NpbmcgZGVjb21wcmVzc2lvbiByZWFkZXI6ICVzIgogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvcmVzcG9uc2UuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9yZXNwb25zZS5nbwppbmRleCBkY2FkM2FmLi5kZGE2ZjViIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9yZXNwb25zZS5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9yZXNwb25zZS5nbwpAQCAtMTksMjQgKzE5LDIwIEBACiAKIHBhY2thZ2UgZ3JlbWxpbmdvCiAKLWltcG9ydCAiZ2l0aHViLmNvbS9nb29nbGUvdXVpZCIKLQogLy8gUmVzcG9uc2VTdGF0dXMgY29udGFpbnMgdGhlIHN0YXR1cyBpbmZvIG9mIHRoZSByZXNwb25zZS4KIHR5cGUgUmVzcG9uc2VTdGF0dXMgc3RydWN0IHsKLQljb2RlICAgICAgIHVpbnQxNgotCW1lc3NhZ2UgICAgc3RyaW5nCi0JYXR0cmlidXRlcyBtYXBbc3RyaW5nXWludGVyZmFjZXt9CisJY29kZSAgICAgIHVpbnQzMgorCW1lc3NhZ2UgICBzdHJpbmcKKwlleGNlcHRpb24gc3RyaW5nCiB9CiAKIC8vIFJlc3BvbnNlUmVzdWx0IGNvbnRhaW5zIHRoZSByZXN1bHQgaW5mbyBvZiB0aGUgcmVzcG9uc2UuCiB0eXBlIFJlc3BvbnNlUmVzdWx0IHN0cnVjdCB7Ci0JTWV0YSBtYXBbc3RyaW5nXWludGVyZmFjZXt9CiAJRGF0YSBpbnRlcmZhY2V7fQogfQogCiAvLyBSZXNwb25zZSByZXByZXNlbnRzIGEgUmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLgogdHlwZSBSZXNwb25zZSBzdHJ1Y3QgewotCVJlc3BvbnNlSUQgICAgIHV1aWQuVVVJRAogCVJlc3BvbnNlU3RhdHVzIFJlc3BvbnNlU3RhdHVzCiAJUmVzcG9uc2VSZXN1bHQgUmVzcG9uc2VSZXN1bHQKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL3Jlc3VsdFNldC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3Jlc3VsdFNldC5nbwppbmRleCA4NGRmMjI4Li5mMjc0YjVhIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9yZXN1bHRTZXQuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvcmVzdWx0U2V0LmdvCkBAIC0zMCwxMiArMzAsOCBAQAogdHlwZSBSZXN1bHRTZXQgaW50ZXJmYWNlIHsKIAlzZXRBZ2dyZWdhdGVUbyh2YWwgc3RyaW5nKQogCUdldEFnZ3JlZ2F0ZVRvKCkgc3RyaW5nCi0Jc2V0U3RhdHVzQXR0cmlidXRlcyhzdGF0dXNBdHRyaWJ1dGVzIG1hcFtzdHJpbmddaW50ZXJmYWNle30pCi0JR2V0U3RhdHVzQXR0cmlidXRlcygpIG1hcFtzdHJpbmddaW50ZXJmYWNle30KLQlHZXRSZXF1ZXN0SUQoKSBzdHJpbmcKIAlJc0VtcHR5KCkgYm9vbAogCUNsb3NlKCkKLQl1bmxvY2tlZENsb3NlKCkKIAlDaGFubmVsKCkgY2hhbiAqUmVzdWx0CiAJYWRkUmVzdWx0KHJlc3VsdCAqUmVzdWx0KQogCU9uZSgpICgqUmVzdWx0LCBib29sLCBlcnJvcikKQEAgLTQ2LDE2ICs0MiwxMyBAQAogCiAvLyBjaGFubmVsUmVzdWx0U2V0IENoYW5uZWwgYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgUmVzdWx0U2V0LgogdHlwZSBjaGFubmVsUmVzdWx0U2V0IHN0cnVjdCB7Ci0JY2hhbm5lbCAgICAgICAgICBjaGFuICpSZXN1bHQKLQlyZXF1ZXN0SUQgICAgICAgIHN0cmluZwotCWNvbnRhaW5lciAgICAgICAgKnN5bmNocm9uaXplZE1hcAotCWFnZ3JlZ2F0ZVRvICAgICAgc3RyaW5nCi0Jc3RhdHVzQXR0cmlidXRlcyBtYXBbc3RyaW5nXWludGVyZmFjZXt9Ci0JY2xvc2VkICAgICAgICAgICBib29sCi0JZXJyICAgICAgICAgICAgICBlcnJvcgotCXdhaXRTaWduYWwgICAgICAgY2hhbiBib29sCi0JY2hhbm5lbE11dGV4ICAgICBzeW5jLk11dGV4Ci0Jd2FpdFNpZ25hbE11dGV4ICBzeW5jLk11dGV4CisJY2hhbm5lbCAgICAgICAgIGNoYW4gKlJlc3VsdAorCWFnZ3JlZ2F0ZVRvICAgICBzdHJpbmcKKwljbG9zZWQgICAgICAgICAgYm9vbAorCWVyciAgICAgICAgICAgICBlcnJvcgorCXdhaXRTaWduYWwgICAgICBjaGFuIGJvb2wKKwljaGFubmVsTXV0ZXggICAgc3luYy5NdXRleAorCXdhaXRTaWduYWxNdXRleCBzeW5jLk11dGV4CiB9CiAKIGZ1bmMgKGNoYW5uZWxSZXN1bHRTZXQgKmNoYW5uZWxSZXN1bHRTZXQpIHNlbmRTaWduYWwoKSB7CkBAIC0xMTQsMjAgKzEwNyw2IEBACiAJaWYgIWNoYW5uZWxSZXN1bHRTZXQuY2xvc2VkIHsKIAkJY2hhbm5lbFJlc3VsdFNldC5jaGFubmVsTXV0ZXguTG9jaygpCiAJCWNoYW5uZWxSZXN1bHRTZXQuY2xvc2VkID0gdHJ1ZQotCQljaGFubmVsUmVzdWx0U2V0LmNvbnRhaW5lci5kZWxldGUoY2hhbm5lbFJlc3VsdFNldC5yZXF1ZXN0SUQpCi0JCWNsb3NlKGNoYW5uZWxSZXN1bHRTZXQuY2hhbm5lbCkKLQkJY2hhbm5lbFJlc3VsdFNldC5jaGFubmVsTXV0ZXguVW5sb2NrKCkKLQkJY2hhbm5lbFJlc3VsdFNldC5zZW5kU2lnbmFsKCkKLQl9Ci19Ci0KLS8vIENsb3NlIGFuZCByZW1vdmUgZnJvbSB0aGUgY2hhbm5lbFJlc3VsdFNldCBmcm9tIHRoZSBjb250YWluZXIgd2l0aG91dCBsb2NraW5nIGNvbnRhaW5lci4gTWVhbnQgZm9yIHVzZSB3aGVuIGNhbGxpbmcKLS8vIGZ1bmN0aW9uIGFscmVhZHkgbG9ja3MgdGhlIGNvbnRhaW5lci4KLWZ1bmMgKGNoYW5uZWxSZXN1bHRTZXQgKmNoYW5uZWxSZXN1bHRTZXQpIHVubG9ja2VkQ2xvc2UoKSB7Ci0JaWYgIWNoYW5uZWxSZXN1bHRTZXQuY2xvc2VkIHsKLQkJY2hhbm5lbFJlc3VsdFNldC5jaGFubmVsTXV0ZXguTG9jaygpCi0JCWNoYW5uZWxSZXN1bHRTZXQuY2xvc2VkID0gdHJ1ZQotCQlkZWxldGUoY2hhbm5lbFJlc3VsdFNldC5jb250YWluZXIuaW50ZXJuYWxNYXAsIGNoYW5uZWxSZXN1bHRTZXQucmVxdWVzdElEKQogCQljbG9zZShjaGFubmVsUmVzdWx0U2V0LmNoYW5uZWwpCiAJCWNoYW5uZWxSZXN1bHRTZXQuY2hhbm5lbE11dGV4LlVubG9jaygpCiAJCWNoYW5uZWxSZXN1bHRTZXQuc2VuZFNpZ25hbCgpCkBAIC0xNDMsMjAgKzEyMiw2IEBACiAJcmV0dXJuIGNoYW5uZWxSZXN1bHRTZXQuYWdncmVnYXRlVG8KIH0KIAotZnVuYyAoY2hhbm5lbFJlc3VsdFNldCAqY2hhbm5lbFJlc3VsdFNldCkgc2V0U3RhdHVzQXR0cmlidXRlcyh2YWwgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgewotCWNoYW5uZWxSZXN1bHRTZXQuc3RhdHVzQXR0cmlidXRlcyA9IHZhbAotfQotCi0vLyBHZXRTdGF0dXNBdHRyaWJ1dGVzIHJldHVybnMgc3RhdHVzQXR0cmlidXRlcyBmb3IgdGhlIGNoYW5uZWxSZXN1bHRTZXQuCi1mdW5jIChjaGFubmVsUmVzdWx0U2V0ICpjaGFubmVsUmVzdWx0U2V0KSBHZXRTdGF0dXNBdHRyaWJ1dGVzKCkgbWFwW3N0cmluZ11pbnRlcmZhY2V7fSB7Ci0JcmV0dXJuIGNoYW5uZWxSZXN1bHRTZXQuc3RhdHVzQXR0cmlidXRlcwotfQotCi0vLyBHZXRSZXF1ZXN0SUQgcmV0dXJucyByZXF1ZXN0SUQgZm9yIHRoZSBjaGFubmVsUmVzdWx0U2V0LgotZnVuYyAoY2hhbm5lbFJlc3VsdFNldCAqY2hhbm5lbFJlc3VsdFNldCkgR2V0UmVxdWVzdElEKCkgc3RyaW5nIHsKLQlyZXR1cm4gY2hhbm5lbFJlc3VsdFNldC5yZXF1ZXN0SUQKLX0KLQogLy8gQ2hhbm5lbCByZXR1cm5zIGNoYW5uZWwgZm9yIHRoZSBjaGFubmVsUmVzdWx0U2V0LgogZnVuYyAoY2hhbm5lbFJlc3VsdFNldCAqY2hhbm5lbFJlc3VsdFNldCkgQ2hhbm5lbCgpIGNoYW4gKlJlc3VsdCB7CiAJcmV0dXJuIGNoYW5uZWxSZXN1bHRTZXQuY2hhbm5lbApAQCAtMTg3LDggKzE1Miw4IEBACiAKIGZ1bmMgKGNoYW5uZWxSZXN1bHRTZXQgKmNoYW5uZWxSZXN1bHRTZXQpIGFkZFJlc3VsdChyICpSZXN1bHQpIHsKIAljaGFubmVsUmVzdWx0U2V0LmNoYW5uZWxNdXRleC5Mb2NrKCkKLQlpZiByLkdldFR5cGUoKS5LaW5kKCkgPT0gcmVmbGVjdC5BcnJheSB8fCByLkdldFR5cGUoKS5LaW5kKCkgPT0gcmVmbGVjdC5TbGljZSB7Ci0JCWZvciBfLCB2IDo9IHJhbmdlIHIuRGF0YS4oW11pbnRlcmZhY2V7fSkgeworCWlmIGRhdGEsIG9rIDo9IHIuRGF0YS4oW11pbnRlcmZhY2V7fSk7IG9rIHsKKwkJZm9yIF8sIHYgOj0gcmFuZ2UgZGF0YSB7CiAJCQlpZiByZWZsZWN0LlR5cGVPZih2KSA9PSByZWZsZWN0LlR5cGVPZigmVHJhdmVyc2Vye30pIHsKIAkJCQlmb3IgaSA6PSBpbnQ2NCgwKTsgaSA8ICh2LigqVHJhdmVyc2VyKSkuYnVsazsgaSsrIHsKIAkJCQkJY2hhbm5lbFJlc3VsdFNldC5jaGFubmVsIDwtICZSZXN1bHR7KHYuKCpUcmF2ZXJzZXIpKS52YWx1ZX0KQEAgLTIwNCwxMiArMTY5LDEyIEBACiAJY2hhbm5lbFJlc3VsdFNldC5zZW5kU2lnbmFsKCkKIH0KIAotZnVuYyBuZXdDaGFubmVsUmVzdWx0U2V0Q2FwYWNpdHkocmVxdWVzdElEIHN0cmluZywgY29udGFpbmVyICpzeW5jaHJvbml6ZWRNYXAsIGNoYW5uZWxTaXplIGludCkgUmVzdWx0U2V0IHsKLQlyZXR1cm4gJmNoYW5uZWxSZXN1bHRTZXR7bWFrZShjaGFuICpSZXN1bHQsIGNoYW5uZWxTaXplKSwgcmVxdWVzdElELCBjb250YWluZXIsICIiLCBuaWwsIGZhbHNlLCBuaWwsIG5pbCwgc3luYy5NdXRleHt9LCBzeW5jLk11dGV4e319CitmdW5jIG5ld0NoYW5uZWxSZXN1bHRTZXRDYXBhY2l0eShjaGFubmVsU2l6ZSBpbnQpIFJlc3VsdFNldCB7CisJcmV0dXJuICZjaGFubmVsUmVzdWx0U2V0e21ha2UoY2hhbiAqUmVzdWx0LCBjaGFubmVsU2l6ZSksICIiLCBmYWxzZSwgbmlsLCBuaWwsIHN5bmMuTXV0ZXh7fSwgc3luYy5NdXRleHt9fQogfQogCi1mdW5jIG5ld0NoYW5uZWxSZXN1bHRTZXQocmVxdWVzdElEIHN0cmluZywgY29udGFpbmVyICpzeW5jaHJvbml6ZWRNYXApIFJlc3VsdFNldCB7Ci0JcmV0dXJuIG5ld0NoYW5uZWxSZXN1bHRTZXRDYXBhY2l0eShyZXF1ZXN0SUQsIGNvbnRhaW5lciwgZGVmYXVsdENhcGFjaXR5KQorZnVuYyBuZXdDaGFubmVsUmVzdWx0U2V0KCkgUmVzdWx0U2V0IHsKKwlyZXR1cm4gbmV3Q2hhbm5lbFJlc3VsdFNldENhcGFjaXR5KGRlZmF1bHRDYXBhY2l0eSkKIH0KIAogLy8gTmV3UmVzdWx0U2V0IGNyZWF0ZXMgYSBuZXcgUmVzdWx0U2V0IGZyb20gYSBzbGljZSBvZiBSZXN1bHQgb2JqZWN0cy4KQEAgLTIyMCw3ICsxODUsNiBAQAogLy8gYW5kIGNsb3NlcyB0aGUgY2hhbm5lbCB0byBpbmRpY2F0ZSBjb21wbGV0aW9uLgogLy8KIC8vIFBhcmFtZXRlcnM6Ci0vLyAgIC0gcmVxdWVzdElEOiBUaGUgcmVxdWVzdCBpZGVudGlmaWVyIGZvciB0aGlzIFJlc3VsdFNldAogLy8gICAtIHJlc3VsdHM6IEEgc2xpY2Ugb2YgUmVzdWx0IG9iamVjdHMgdG8gaW5jbHVkZSBpbiB0aGUgUmVzdWx0U2V0CiAvLwogLy8gUmV0dXJuczoKQEAgLTIzNiwxMyArMjAwLDEzIEBACiAvLwl9CiAvLwlyZXN1bHRTZXQgOj0gTmV3UmVzdWx0U2V0KCJyZXF1ZXN0LTEyMyIsIHJlc3VsdHMpCiAvLwlhbGxSZXN1bHRzLCBfIDo9IHJlc3VsdFNldC5BbGwoKQotZnVuYyBOZXdSZXN1bHRTZXQocmVxdWVzdElEIHN0cmluZywgcmVzdWx0cyBbXSpSZXN1bHQpIFJlc3VsdFNldCB7CitmdW5jIE5ld1Jlc3VsdFNldChyZXN1bHRzIFtdKlJlc3VsdCkgUmVzdWx0U2V0IHsKIAkvLyBDcmVhdGUgYSBjaGFubmVsLWJhc2VkIHJlc3VsdCBzZXQgd2l0aCBjYXBhY2l0eSBmb3IgYWxsIHJlc3VsdHMKIAljaGFubmVsU2l6ZSA6PSBsZW4ocmVzdWx0cykKIAlpZiBjaGFubmVsU2l6ZSA9PSAwIHsKIAkJY2hhbm5lbFNpemUgPSAxIC8vIEVuc3VyZSBhdCBsZWFzdCBzaXplIDEKIAl9Ci0JcnMgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldENhcGFjaXR5KHJlcXVlc3RJRCwgJnN5bmNocm9uaXplZE1hcHttYWtlKG1hcFtzdHJpbmddUmVzdWx0U2V0KSwgc3luYy5NdXRleHt9fSwgY2hhbm5lbFNpemUpLigqY2hhbm5lbFJlc3VsdFNldCkKKwlycyA6PSBuZXdDaGFubmVsUmVzdWx0U2V0Q2FwYWNpdHkoY2hhbm5lbFNpemUpLigqY2hhbm5lbFJlc3VsdFNldCkKIAogCS8vIEFkZCBhbGwgcmVzdWx0cyB0byB0aGUgY2hhbm5lbAogCWZvciBfLCByZXN1bHQgOj0gcmFuZ2UgcmVzdWx0cyB7CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci9yZXN1bHRTZXRfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3Jlc3VsdFNldF90ZXN0LmdvCmluZGV4IDE2MDM1YzAuLjU1YWYyNzUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3Jlc3VsdFNldF90ZXN0LmdvCisrKyBiL2dyZW1saW4tZ28vZHJpdmVyL3Jlc3VsdFNldF90ZXN0LmdvCkBAIC0yMSw0MyArMjEsMjkgQEAKIAogaW1wb3J0ICgKIAkiZm10IgotCSJzeW5jIgogCSJ0ZXN0aW5nIgogCSJ0aW1lIgogCiAJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCiApCiAKLWZ1bmMgZ2V0U3luY01hcCgpICpzeW5jaHJvbml6ZWRNYXAgewotCXJldHVybiAmc3luY2hyb25pemVkTWFwewotCQltYWtlKG1hcFtzdHJpbmddUmVzdWx0U2V0KSwKLQkJc3luYy5NdXRleHt9LAotCX0KLX0KLQogZnVuYyBUZXN0Q2hhbm5lbFJlc3VsdFNldCh0ICp0ZXN0aW5nLlQpIHsKIAljb25zdCBtb2NrSUQgPSAibW9ja0lEIgogCiAJdC5SdW4oIlRlc3QgUmVzdWx0U2V0IHRlc3QgZ2V0dGVyL3NldHRlcnMuIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJciA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KG1vY2tJRCwgZ2V0U3luY01hcCgpKQotCQl0ZXN0U3RhdHVzQXR0cmlidXRlIDo9IG1hcFtzdHJpbmddaW50ZXJmYWNle317Ci0JCQkiMSI6IDEyMzQsCi0JCQkiMiI6ICJmb28iLAotCQl9CisJCXIgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldCgpCiAJCXRlc3RBZ2dyZWdhdGVUbyA6PSAidGVzdDIiCi0JCXIuc2V0U3RhdHVzQXR0cmlidXRlcyh0ZXN0U3RhdHVzQXR0cmlidXRlKQotCQlhc3NlcnQuRXF1YWwodCwgci5HZXRTdGF0dXNBdHRyaWJ1dGVzKCksIHRlc3RTdGF0dXNBdHRyaWJ1dGUpCiAJCXIuc2V0QWdncmVnYXRlVG8odGVzdEFnZ3JlZ2F0ZVRvKQogCQlhc3NlcnQuRXF1YWwodCwgci5HZXRBZ2dyZWdhdGVUbygpLCB0ZXN0QWdncmVnYXRlVG8pCiAJfSkKIAogCXQuUnVuKCJUZXN0IFJlc3VsdFNldCBjbG9zZS4iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQobW9ja0lELCBnZXRTeW5jTWFwKCkpCisJCWNoYW5uZWxSZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldCgpCiAJCWFzc2VydC5Ob3RQYW5pY3ModCwgZnVuYygpIHsgY2hhbm5lbFJlc3VsdFNldC5DbG9zZSgpIH0pCiAJfSkKIAogCXQuUnVuKCJUZXN0IFJlc3VsdFNldCBvbmUuIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJY2hhbm5lbFJlc3VsdFNldCA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KG1vY2tJRCwgZ2V0U3luY01hcCgpKQorCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQoKQogCQlBZGRSZXN1bHRzKGNoYW5uZWxSZXN1bHRTZXQsIDEwKQogCQlpZHggOj0gMAogCQlmb3IgaSA6PSAwOyBpIDwgMTA7IGkrKyB7CkBAIC03NSw3ICs2MSw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IFJlc3VsdFNldCBvbmUgUGF1c2VkLiIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWNoYW5uZWxSZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldChtb2NrSUQsIGdldFN5bmNNYXAoKSkKKwkJY2hhbm5lbFJlc3VsdFNldCA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KCkKIAkJZ28gQWRkUmVzdWx0c1BhdXNlKGNoYW5uZWxSZXN1bHRTZXQsIDEwLCA1MDApCiAJCWlkeCA6PSAwCiAJCWZvciBpIDo9IDA7IGkgPCAxMDsgaSsrIHsKQEAgLTkzLDEyICs3OSwxMiBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCBSZXN1bHRTZXQgb25lIGNsb3NlLiIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWNoYW5uZWxSZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldChtb2NrSUQsIGdldFN5bmNNYXAoKSkKKwkJY2hhbm5lbFJlc3VsdFNldCA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KCkKIAkJY2hhbm5lbFJlc3VsdFNldC5DbG9zZSgpCiAJfSkKIAogCXQuUnVuKCJUZXN0IFJlc3VsdFNldCBBbGwuIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJY2hhbm5lbFJlc3VsdFNldCA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KG1vY2tJRCwgZ2V0U3luY01hcCgpKQorCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQoKQogCQlBZGRSZXN1bHRzKGNoYW5uZWxSZXN1bHRTZXQsIDEwKQogCQlnbyBjbG9zZUFmdGVyVGltZSg1MDAsIGNoYW5uZWxSZXN1bHRTZXQpCiAJCXJlc3VsdHMsIGVyciA6PSBjaGFubmVsUmVzdWx0U2V0LkFsbCgpCkBAIC0xMDksNyArOTUsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCBSZXN1bHRTZXQgQWxsIGNsb3NlIGJlZm9yZS4iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQobW9ja0lELCBnZXRTeW5jTWFwKCkpCisJCWNoYW5uZWxSZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldCgpCiAJCUFkZFJlc3VsdHMoY2hhbm5lbFJlc3VsdFNldCwgMTApCiAJCWNoYW5uZWxSZXN1bHRTZXQuQ2xvc2UoKQogCQlyZXN1bHRzLCBlcnIgOj0gY2hhbm5lbFJlc3VsdFNldC5BbGwoKQpAQCAtMTIxLDIxICsxMDcsMjEgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgUmVzdWx0U2V0IElzRW1wdHkgYmVmb3JlIHNpZ25hbC4iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQobW9ja0lELCBnZXRTeW5jTWFwKCkpCisJCWNoYW5uZWxSZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldCgpCiAJCWdvIGNsb3NlQWZ0ZXJUaW1lKDUwMCwgY2hhbm5lbFJlc3VsdFNldCkKIAkJZW1wdHkgOj0gY2hhbm5lbFJlc3VsdFNldC5Jc0VtcHR5KCkKIAkJYXNzZXJ0LlRydWUodCwgZW1wdHkpCiAJfSkKIAogCXQuUnVuKCJUZXN0IFJlc3VsdFNldCBJc0VtcHR5IGFmdGVyIHNpZ25hbC4iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQobW9ja0lELCBnZXRTeW5jTWFwKCkpCisJCWNoYW5uZWxSZXN1bHRTZXQgOj0gbmV3Q2hhbm5lbFJlc3VsdFNldCgpCiAJCWNoYW5uZWxSZXN1bHRTZXQuQ2xvc2UoKQogCQllbXB0eSA6PSBjaGFubmVsUmVzdWx0U2V0LklzRW1wdHkoKQogCQlhc3NlcnQuVHJ1ZSh0LCBlbXB0eSkKIAl9KQogCiAJdC5SdW4oIlRlc3QgUmVzdWx0U2V0IElzRW1wdHkgYWZ0ZXIgY2xvc2UuIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJY2hhbm5lbFJlc3VsdFNldCA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KG1vY2tJRCwgZ2V0U3luY01hcCgpKQorCQljaGFubmVsUmVzdWx0U2V0IDo9IG5ld0NoYW5uZWxSZXN1bHRTZXQoKQogCQlnbyBhZGRBZnRlclRpbWUoNTAwLCBjaGFubmVsUmVzdWx0U2V0KQogCQllbXB0eSA6PSBjaGFubmVsUmVzdWx0U2V0LklzRW1wdHkoKQogCQlhc3NlcnQuRmFsc2UodCwgZW1wdHkpCkBAIC0xNDQsMTYgKzEzMCw2IEBACiAJCWVtcHR5ID0gY2hhbm5lbFJlc3VsdFNldC5Jc0VtcHR5KCkKIAkJYXNzZXJ0LlRydWUodCwgZW1wdHkpCiAJfSkKLQotCXQuUnVuKCJUZXN0IFJlc3VsdFNldCByZW1vdmVzIHNlbGYgZnJvbSBjb250YWluZXIuIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJY29udGFpbmVyIDo9IGdldFN5bmNNYXAoKQotCQlhc3NlcnQuRXF1YWwodCwgMCwgY29udGFpbmVyLnNpemUoKSkKLQkJY2hhbm5lbFJlc3VsdFNldCA6PSBuZXdDaGFubmVsUmVzdWx0U2V0KG1vY2tJRCwgY29udGFpbmVyKQotCQljb250YWluZXIuc3RvcmUobW9ja0lELCBjaGFubmVsUmVzdWx0U2V0KQotCQlhc3NlcnQuRXF1YWwodCwgMSwgY29udGFpbmVyLnNpemUoKSkKLQkJY2hhbm5lbFJlc3VsdFNldC5DbG9zZSgpCi0JCWFzc2VydC5FcXVhbCh0LCAwLCBjb250YWluZXIuc2l6ZSgpKQotCX0pCiB9CiAKIGZ1bmMgQWRkUmVzdWx0c1BhdXNlKHJlc3VsdFNldCBSZXN1bHRTZXQsIGNvdW50IGludCwgdGlja3MgdGltZS5EdXJhdGlvbikgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvc2VyaWFsaXplci5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3NlcmlhbGl6ZXIuZ28KaW5kZXggZTM1NDlkMi4uYTZjNGM5ZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvc2VyaWFsaXplci5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9zZXJpYWxpemVyLmdvCkBAIC0yMiwxOSArMjIsMTUgQEAKIGltcG9ydCAoCiAJImJ5dGVzIgogCSJlbmNvZGluZy9iaW5hcnkiCi0JIm1hdGgvYmlnIgotCSJyZWZsZWN0IgotCSJzdHJpbmdzIgorCSJpbyIKIAkic3luYyIKLQotCSJnaXRodWIuY29tL2dvb2dsZS91dWlkIgogKQogCi1jb25zdCBncmFwaEJpbmFyeU1pbWVUeXBlID0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wIgorY29uc3QgZ3JhcGhCaW5hcnlNaW1lVHlwZSA9ICJhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCIKIAogLy8gU2VyaWFsaXplciBpbnRlcmZhY2UgZm9yIHNlcmlhbGl6ZXJzLgogdHlwZSBTZXJpYWxpemVyIGludGVyZmFjZSB7Ci0JU2VyaWFsaXplTWVzc2FnZShyZXF1ZXN0ICpyZXF1ZXN0KSAoW11ieXRlLCBlcnJvcikKKwlTZXJpYWxpemVNZXNzYWdlKHJlcXVlc3QgKlJlcXVlc3RNZXNzYWdlKSAoW11ieXRlLCBlcnJvcikKIAlEZXNlcmlhbGl6ZU1lc3NhZ2UobWVzc2FnZSBbXWJ5dGUpIChSZXNwb25zZSwgZXJyb3IpCiB9CiAKQEAgLTQ0LDczICs0MCwzNSBAQAogfQogCiAvLyBDdXN0b21UeXBlUmVhZGVyIHVzZXIgcHJvdmlkZWQgZnVuY3Rpb24gdG8gZGVzZXJpYWxpemUgY3VzdG9tIHR5cGVzCisvLyBEZXByZWNhdGVkOiBDdXN0b20gdHlwZSBkZXNlcmlhbGl6YXRpb24gaXMgaGFuZGxlZCBieSBHcmFwaEJpbmFyeURlc2VyaWFsaXplcgogdHlwZSBDdXN0b21UeXBlUmVhZGVyIGZ1bmMoZGF0YSAqW11ieXRlLCBpICppbnQpIChpbnRlcmZhY2V7fSwgZXJyb3IpCiAKLS8vIEN1c3RvbVR5cGVXcml0ZXIgdXNlciBwcm92aWRlZCBmdW5jdGlvbiB0byBzZXJpYWxpemUgY3VzdG9tIHR5cGVzCi10eXBlIEN1c3RvbVR5cGVXcml0ZXIgZnVuYyh2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yCit0eXBlIHdyaXRlciBmdW5jKGludGVyZmFjZXt9LCBpby5Xcml0ZXIsICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvcgogCi0vLyBDdXN0b21UeXBlSW5mbyBob2xkcyBtZXRhZGF0YSBmb3IgYSByZWdpc3RlcmVkIGN1c3RvbSB0eXBlCi10eXBlIEN1c3RvbVR5cGVJbmZvIHN0cnVjdCB7Ci0JVHlwZU5hbWUgc3RyaW5nCi0JV3JpdGVyICAgQ3VzdG9tVHlwZVdyaXRlcgotfQotCi10eXBlIHdyaXRlciBmdW5jKGludGVyZmFjZXt9LCAqYnl0ZXMuQnVmZmVyLCAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpCi10eXBlIHJlYWRlciBmdW5jKGRhdGEgKltdYnl0ZSwgaSAqaW50KSAoaW50ZXJmYWNle30sIGVycm9yKQotCi12YXIgZGVzZXJpYWxpemVycyBtYXBbZGF0YVR5cGVdcmVhZGVyCiB2YXIgc2VyaWFsaXplcnMgbWFwW2RhdGFUeXBlXXdyaXRlcgogCiAvLyBjdXN0b21UeXBlUmVhZGVyTG9jayB1c2VkIHRvIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgY3VzdG9tRGVzZXJpYWxpemVycyBtYXAKKy8vIERlcHJlY2F0ZWQ6IEN1c3RvbSB0eXBlIGRlc2VyaWFsaXphdGlvbiBpcyBoYW5kbGVkIGJ5IEdyYXBoQmluYXJ5RGVzZXJpYWxpemVyCiB2YXIgY3VzdG9tVHlwZVJlYWRlckxvY2sgPSBzeW5jLlJXTXV0ZXh7fQogdmFyIGN1c3RvbURlc2VyaWFsaXplcnMgbWFwW3N0cmluZ11DdXN0b21UeXBlUmVhZGVyCiAKLS8vIGN1c3RvbVR5cGVXcml0ZXJMb2NrIHVzZWQgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBjdXN0b21TZXJpYWxpemVycyBtYXAKLXZhciBjdXN0b21UeXBlV3JpdGVyTG9jayA9IHN5bmMuUldNdXRleHt9Ci12YXIgY3VzdG9tU2VyaWFsaXplcnMgbWFwW3JlZmxlY3QuVHlwZV1DdXN0b21UeXBlSW5mbwotCiBmdW5jIGluaXQoKSB7CiAJaW5pdFNlcmlhbGl6ZXJzKCkKLQlpbml0RGVzZXJpYWxpemVycygpCisJY3VzdG9tRGVzZXJpYWxpemVycyA9IG1hcFtzdHJpbmddQ3VzdG9tVHlwZVJlYWRlcnt9CiB9CiAKLWZ1bmMgbmV3R3JhcGhCaW5hcnlTZXJpYWxpemVyKGhhbmRsZXIgKmxvZ0hhbmRsZXIpIFNlcmlhbGl6ZXIgeworZnVuYyBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIoaGFuZGxlciAqbG9nSGFuZGxlcikgKkdyYXBoQmluYXJ5U2VyaWFsaXplciB7CiAJc2VyaWFsaXplciA6PSBncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVye2hhbmRsZXJ9Ci0JcmV0dXJuIEdyYXBoQmluYXJ5U2VyaWFsaXplcnsmc2VyaWFsaXplcn0KLX0KLQotY29uc3QgdmVyc2lvbkJ5dGUgYnl0ZSA9IDB4ODEKLQotZnVuYyBjb252ZXJ0QXJncyhyZXF1ZXN0ICpyZXF1ZXN0LCBncyBHcmFwaEJpbmFyeVNlcmlhbGl6ZXIpIChtYXBbc3RyaW5nXWludGVyZmFjZXt9LCBlcnJvcikgewotCWlmIHJlcXVlc3Qub3AgIT0gYnl0ZWNvZGVQcm9jZXNzb3IgewotCQlyZXR1cm4gcmVxdWVzdC5hcmdzLCBuaWwKLQl9Ci0KLQkvLyBDb252ZXJ0IHRvIGZvcm1hdDoKLQkvLyBhcmdzWyJncmVtbGluIl06IDxzZXJpYWxpemVkIGFyZ3NbImdyZW1saW4iXT4KLQlncmVtbGluIDo9IHJlcXVlc3QuYXJnc1siZ3JlbWxpbiJdCi0Jc3dpdGNoIGdyZW1saW4uKHR5cGUpIHsKLQljYXNlIEJ5dGVjb2RlOgotCQlidWZmZXIgOj0gYnl0ZXMuQnVmZmVye30KLQkJZ3JlbWxpbkJ1ZmZlciwgZXJyIDo9IGdzLnNlci53cml0ZShncmVtbGluLCAmYnVmZmVyKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JCXJlcXVlc3QuYXJnc1siZ3JlbWxpbiJdID0gZ3JlbWxpbkJ1ZmZlcgotCQlyZXR1cm4gcmVxdWVzdC5hcmdzLCBuaWwKLQlkZWZhdWx0OgotCQl2YXIgdHlwZU5hbWUgc3RyaW5nCi0JCWlmIGdyZW1saW4gIT0gbmlsIHsKLQkJCXR5cGVOYW1lID0gcmVmbGVjdC5UeXBlT2YoZ3JlbWxpbikuTmFtZSgpCi0JCX0KLQotCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwNzA0Q29udmVydEFyZ3NOb1NlcmlhbGl6ZXJFcnJvciwgdHlwZU5hbWUpCisJcmV0dXJuICZHcmFwaEJpbmFyeVNlcmlhbGl6ZXJ7CisJCXNlcjogJnNlcmlhbGl6ZXIsCiAJfQogfQogCitjb25zdCB2ZXJzaW9uQnl0ZSBieXRlID0gMHg4NAorCiAvLyBTZXJpYWxpemVNZXNzYWdlIHNlcmlhbGl6ZXMgYSByZXF1ZXN0IG1lc3NhZ2UgaW50byBHcmFwaEJpbmFyeSBmb3JtYXQuCiAvLwotLy8gVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUgc2VyaWFsaXplciBpbnRlcmZhY2UgYW5kIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgV2ViU29ja2V0IGRyaXZlci4KKy8vIFRoaXMgbWV0aG9kIGlzIHBhcnQgb2YgdGhlIHNlcmlhbGl6ZXIgaW50ZXJmYWNlIGFuZCBpcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIEhUVFAgZHJpdmVyLgogLy8gSXQgaXMgYWxzbyBleHBvc2VkIHB1YmxpY2x5IHRvIGVuYWJsZSBhbHRlcm5hdGl2ZSB0cmFuc3BvcnQgcHJvdG9jb2xzIChnUlBDLCBIVFRQLzIsIGV0Yy4pIHRvCiAvLyBzZXJpYWxpemUgcmVxdWVzdHMgY3JlYXRlZCB3aXRoIE1ha2VCeXRlY29kZVJlcXVlc3QoKSBvciBNYWtlU3RyaW5nUmVxdWVzdCgpLgogLy8KQEAgLTEyOSw5NyArODcsMzcgQEAKIC8vCXNlcmlhbGl6ZXIgOj0gbmV3R3JhcGhCaW5hcnlTZXJpYWxpemVyKG5pbCkKIC8vCWJ5dGVzLCBlcnIgOj0gc2VyaWFsaXplci4oZ3JhcGhCaW5hcnlTZXJpYWxpemVyKS5TZXJpYWxpemVNZXNzYWdlKCZyZXEpCiAvLwkvLyBTZW5kIGJ5dGVzIG92ZXIgY3VzdG9tIHRyYW5zcG9ydAotZnVuYyAoZ3MgR3JhcGhCaW5hcnlTZXJpYWxpemVyKSBTZXJpYWxpemVNZXNzYWdlKHJlcXVlc3QgKnJlcXVlc3QpIChbXWJ5dGUsIGVycm9yKSB7Ci0JYXJncywgZXJyIDo9IGNvbnZlcnRBcmdzKHJlcXVlc3QsIGdzKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JZmluYWxNZXNzYWdlLCBlcnIgOj0gZ3MuYnVpbGRNZXNzYWdlKHJlcXVlc3QucmVxdWVzdElELCBieXRlKGxlbihncmFwaEJpbmFyeU1pbWVUeXBlKSksIHJlcXVlc3Qub3AsIHJlcXVlc3QucHJvY2Vzc29yLCBhcmdzKQorLy8KKy8vIFNlcmlhbGl6ZU1lc3NhZ2Ugc2VyaWFsaXplcyBhIHJlcXVlc3QgbWVzc2FnZSBpbnRvIEdyYXBoQmluYXJ5LgorZnVuYyAoZ3MgKkdyYXBoQmluYXJ5U2VyaWFsaXplcikgU2VyaWFsaXplTWVzc2FnZShyZXF1ZXN0ICpSZXF1ZXN0TWVzc2FnZSkgKFtdYnl0ZSwgZXJyb3IpIHsKKwlmaW5hbE1lc3NhZ2UsIGVyciA6PSBncy5idWlsZE1lc3NhZ2UocmVxdWVzdC5HcmVtbGluLCByZXF1ZXN0LkZpZWxkcykKIAlpZiBlcnIgIT0gbmlsIHsKIAkJcmV0dXJuIG5pbCwgZXJyCiAJfQogCXJldHVybiBmaW5hbE1lc3NhZ2UsIG5pbAogfQogCi1mdW5jIChncyAqR3JhcGhCaW5hcnlTZXJpYWxpemVyKSBidWlsZE1lc3NhZ2UoaWQgdXVpZC5VVUlELCBtaW1lTGVuIGJ5dGUsIG9wIHN0cmluZywgcHJvY2Vzc29yIHN0cmluZywgYXJncyBtYXBbc3RyaW5nXWludGVyZmFjZXt9KSAoW11ieXRlLCBlcnJvcikgeworZnVuYyAoZ3MgKkdyYXBoQmluYXJ5U2VyaWFsaXplcikgYnVpbGRNZXNzYWdlKGdyZW1saW4gc3RyaW5nLCBhcmdzIG1hcFtzdHJpbmddaW50ZXJmYWNle30pIChbXWJ5dGUsIGVycm9yKSB7CiAJYnVmZmVyIDo9IGJ5dGVzLkJ1ZmZlcnt9CiAKLQkvLyBtaW1lIGhlYWRlcgotCWJ1ZmZlci5Xcml0ZUJ5dGUobWltZUxlbikKLQlidWZmZXIuV3JpdGVTdHJpbmcoZ3JhcGhCaW5hcnlNaW1lVHlwZSkKLQogCS8vIFZlcnNpb24KIAlidWZmZXIuV3JpdGVCeXRlKHZlcnNpb25CeXRlKQogCi0JLy8gUmVxdWVzdCB1dWlkCi0JYmlnSW50VVVJRCA6PSB1dWlkVG9CaWdJbnQoaWQpCi0JbG93ZXIgOj0gYmlnSW50VVVJRC5VaW50NjQoKQotCXVwcGVyQmlnSW50IDo9IGJpZ0ludFVVSUQuUnNoKCZiaWdJbnRVVUlELCA2NCkKLQl1cHBlciA6PSB1cHBlckJpZ0ludC5VaW50NjQoKQotCWVyciA6PSBiaW5hcnkuV3JpdGUoJmJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgdXBwZXIpCisJZXJyIDo9IGdzLnNlci53cml0ZVZhbHVlKGFyZ3MsICZidWZmZXIsIGZhbHNlKQogCWlmIGVyciAhPSBuaWwgewogCQlyZXR1cm4gbmlsLCBlcnIKIAl9Ci0JZXJyID0gYmluYXJ5LldyaXRlKCZidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGxvd2VyKQorCWVyciA9IGdzLnNlci53cml0ZVZhbHVlKGdyZW1saW4sICZidWZmZXIsIGZhbHNlKQogCWlmIGVyciAhPSBuaWwgewogCQlyZXR1cm4gbmlsLCBlcnIKIAl9CiAKLQkvLyBvcAotCWVyciA9IGJpbmFyeS5Xcml0ZSgmYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCB1aW50MzIobGVuKG9wKSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCV8sIGVyciA9IGJ1ZmZlci5Xcml0ZVN0cmluZyhvcCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCi0JLy8gcHJvY2Vzc29yCi0JZXJyID0gYmluYXJ5LldyaXRlKCZidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIHVpbnQzMihsZW4ocHJvY2Vzc29yKSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCV8sIGVyciA9IGJ1ZmZlci5Xcml0ZVN0cmluZyhwcm9jZXNzb3IpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQotCS8vIGFyZ3MKLQllcnIgPSBiaW5hcnkuV3JpdGUoJmJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgdWludDMyKGxlbihhcmdzKSkpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBuaWwsIGVycgotCX0KLQlmb3IgaywgdiA6PSByYW5nZSBhcmdzIHsKLQkJXywgZXJyID0gZ3Muc2VyLndyaXRlKGssICZidWZmZXIpCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuIG5pbCwgZXJyCi0JCX0KLQotCQlzd2l0Y2ggdCA6PSB2Lih0eXBlKSB7Ci0JCWNhc2UgW11ieXRlOgotCQkJXywgZXJyID0gYnVmZmVyLldyaXRlKHQpCi0JCWRlZmF1bHQ6Ci0JCQlfLCBlcnIgPSBncy5zZXIud3JpdGUodCwgJmJ1ZmZlcikKLQkJfQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiBuaWwsIGVycgotCQl9Ci0JfQogCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgbmlsCiB9CiAKLWZ1bmMgdXVpZFRvQmlnSW50KHJlcXVlc3RJRCB1dWlkLlVVSUQpIGJpZy5JbnQgewotCXZhciBiaWdJbnQgYmlnLkludAotCWJpZ0ludC5TZXRTdHJpbmcoc3RyaW5ncy5SZXBsYWNlKHJlcXVlc3RJRC5TdHJpbmcoKSwgIi0iLCAiIiwgNCksIDE2KQotCXJldHVybiBiaWdJbnQKLX0KLQogLy8gRGVzZXJpYWxpemVNZXNzYWdlIGRlc2VyaWFsaXplcyBhIEdyYXBoQmluYXJ5LWVuY29kZWQgcmVzcG9uc2UgbWVzc2FnZS4KIC8vCi0vLyBUaGlzIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBzZXJpYWxpemVyIGludGVyZmFjZSBhbmQgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBXZWJTb2NrZXQgZHJpdmVyLgorLy8gVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUgc2VyaWFsaXplciBpbnRlcmZhY2UgYW5kIGlzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgSFRUUCBkcml2ZXIuCiAvLyBJdCBpcyBhbHNvIGV4cG9zZWQgcHVibGljbHkgdG8gZW5hYmxlIGFsdGVybmF0aXZlIHRyYW5zcG9ydCBwcm90b2NvbHMgKGdSUEMsIEhUVFAvMiwgZXRjLikgdG8KIC8vIGRlc2VyaWFsaXplIHJlc3BvbnNlcyByZWNlaXZlZCBmcm9tIGEgR3JlbWxpbiBzZXJ2ZXIuCiAvLwpAQCAtMjI3LDcgKzEyNSw3IEBACiAvLyAgIC0gbWVzc2FnZTogVGhlIEdyYXBoQmluYXJ5LWVuY29kZWQgcmVzcG9uc2UgYnl0ZXMKIC8vCiAvLyBSZXR1cm5zOgotLy8gICAtIHJlc3BvbnNlOiBUaGUgZGVzZXJpYWxpemVkIHJlc3BvbnNlIGNvbnRhaW5pbmcgcmVzdWx0cyBhbmQgbWV0YWRhdGEKKy8vICAgLSByZXNwb25zZTogVGhlIGRlc2VyaWFsaXplZCBSZXNwb25zZSBjb250YWluaW5nIHJlc3VsdHMgYW5kIG1ldGFkYXRhCiAvLyAgIC0gZXJyb3I6IEFueSBkZXNlcmlhbGl6YXRpb24gZXJyb3IgZW5jb3VudGVyZWQKIC8vCiAvLyBFeGFtcGxlIGZvciBhbHRlcm5hdGl2ZSB0cmFuc3BvcnRzOgpAQCAtMjM2LDcgKzEzNCw3IEBACiAvLwlzZXJpYWxpemVyIDo9IG5ld0dyYXBoQmluYXJ5U2VyaWFsaXplcihuaWwpCiAvLwlyZXNwLCBlcnIgOj0gc2VyaWFsaXplci4oZ3JhcGhCaW5hcnlTZXJpYWxpemVyKS5EZXNlcmlhbGl6ZU1lc3NhZ2UocmVzcG9uc2VCeXRlcykKIC8vCXJlc3VsdHMgOj0gcmVzcC5yZXNwb25zZVJlc3VsdC5kYXRhCi1mdW5jIChncyBHcmFwaEJpbmFyeVNlcmlhbGl6ZXIpIERlc2VyaWFsaXplTWVzc2FnZShtZXNzYWdlIFtdYnl0ZSkgKFJlc3BvbnNlLCBlcnJvcikgeworZnVuYyAoZ3MgKkdyYXBoQmluYXJ5U2VyaWFsaXplcikgRGVzZXJpYWxpemVNZXNzYWdlKG1lc3NhZ2UgW11ieXRlKSAoUmVzcG9uc2UsIGVycm9yKSB7CiAJdmFyIG1zZyBSZXNwb25zZQogCiAJaWYgbWVzc2FnZSA9PSBuaWwgfHwgbGVuKG1lc3NhZ2UpID09IDAgewpAQCAtMjQ0LDE1NiArMTQyLDg3IEBACiAJCXJldHVybiBtc2csIG5ld0Vycm9yKGVycjA0MDVSZWFkVmFsdWVJbnZhbGlkTnVsbElucHV0RXJyb3IpCiAJfQogCi0JLy8gU2tpcCB2ZXJzaW9uIGFuZCBudWxsYWJsZSBieXRlLgotCWkgOj0gMgotCWlkLCBlcnIgOj0gcmVhZFV1aWQoJm1lc3NhZ2UsICZpKQotCWlmIGVyciAhPSBuaWwgeworCWQgOj0gTmV3R3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIoYnl0ZXMuTmV3UmVhZGVyKG1lc3NhZ2UpKQorCisJLy8gUmVhZCBoZWFkZXIKKwlpZiBlcnIgOj0gZC5SZWFkSGVhZGVyKCk7IGVyciAhPSBuaWwgewogCQlyZXR1cm4gbXNnLCBlcnIKIAl9Ci0JbXNnLlJlc3BvbnNlSUQgPSBpZC4odXVpZC5VVUlEKQotCW1zZy5SZXNwb25zZVN0YXR1cy5jb2RlID0gdWludDE2KHJlYWRVaW50MzJTYWZlKCZtZXNzYWdlLCAmaSkgJiAweEZGKQotCWlzTWVzc2FnZVZhbGlkIDo9IHJlYWRCeXRlU2FmZSgmbWVzc2FnZSwgJmkpCi0JaWYgaXNNZXNzYWdlVmFsaWQgPT0gMCB7Ci0JCW1lc3NhZ2UsIGVyciA6PSByZWFkU3RyaW5nKCZtZXNzYWdlLCAmaSkKKworCXJlc3VsdHMgOj0gbWFrZShbXWludGVyZmFjZXt9LCAwKQorCWZvciB7CisJCW4sIGVyciA6PSBkLlJlYWRGdWxseVF1YWxpZmllZCgpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJcmV0dXJuIG1zZywgZXJyCiAJCX0KLQkJbXNnLlJlc3BvbnNlU3RhdHVzLm1lc3NhZ2UgPSBtZXNzYWdlLihzdHJpbmcpCisJCWlmIG4gPT0gRW5kT2ZTdHJlYW0oKSB7CisJCQlicmVhaworCQl9CisJCXJlc3VsdHMgPSBhcHBlbmQocmVzdWx0cywgbikKIAl9Ci0JYXR0ciwgZXJyIDo9IHJlYWRNYXBVbnF1YWxpZmllZCgmbWVzc2FnZSwgJmkpCisKKwltc2cuUmVzcG9uc2VSZXN1bHQuRGF0YSA9IHJlc3VsdHMKKworCWNvZGUsIHN0YXR1c01zZywgZXhjZXB0aW9uLCBlcnIgOj0gZC5SZWFkU3RhdHVzKCkKIAlpZiBlcnIgIT0gbmlsIHsKIAkJcmV0dXJuIG1zZywgZXJyCiAJfQotCW1zZy5SZXNwb25zZVN0YXR1cy5hdHRyaWJ1dGVzID0gYXR0ci4obWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKLQltZXRhLCBlcnIgOj0gcmVhZE1hcFVucXVhbGlmaWVkKCZtZXNzYWdlLCAmaSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG1zZywgZXJyCisJbXNnLlJlc3BvbnNlU3RhdHVzLmNvZGUgPSBjb2RlCisJbXNnLlJlc3BvbnNlU3RhdHVzLm1lc3NhZ2UgPSAiT0siCisJaWYgc3RhdHVzTXNnICE9ICIiIHsKKwkJbXNnLlJlc3BvbnNlU3RhdHVzLm1lc3NhZ2UgPSBzdGF0dXNNc2cKIAl9Ci0JbXNnLlJlc3BvbnNlUmVzdWx0Lk1ldGEgPSBtZXRhLihtYXBbc3RyaW5nXWludGVyZmFjZXt9KQotCW1zZy5SZXNwb25zZVJlc3VsdC5EYXRhLCBlcnIgPSByZWFkRnVsbHlRdWFsaWZpZWROdWxsYWJsZSgmbWVzc2FnZSwgJmksIHRydWUpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBtc2csIGVycgorCWlmIGV4Y2VwdGlvbiAhPSAiIiB7CisJCW1zZy5SZXNwb25zZVN0YXR1cy5leGNlcHRpb24gPSBleGNlcHRpb24KIAl9CisKIAlyZXR1cm4gbXNnLCBuaWwKIH0KIAogZnVuYyBpbml0U2VyaWFsaXplcnMoKSB7CiAJc2VyaWFsaXplcnMgPSBtYXBbZGF0YVR5cGVdd3JpdGVyewotCQljdXN0b21UeXBlOiAgICAgY3VzdG9tVHlwZVdyaXRlciwKLQkJYnl0ZWNvZGVUeXBlOiAgIGJ5dGVjb2RlV3JpdGVyLAogCQlzdHJpbmdUeXBlOiAgICAgc3RyaW5nV3JpdGVyLAogCQliaWdEZWNpbWFsVHlwZTogYmlnRGVjaW1hbFdyaXRlciwKIAkJYmlnSW50ZWdlclR5cGU6IGJpZ0ludFdyaXRlciwKIAkJbG9uZ1R5cGU6ICAgICAgIGxvbmdXcml0ZXIsCiAJCWludFR5cGU6ICAgICAgICBpbnRXcml0ZXIsCiAJCXNob3J0VHlwZTogICAgICBzaG9ydFdyaXRlciwKLQkJYnl0ZVR5cGU6IGZ1bmModmFsdWUgaW50ZXJmYWNle30sIGJ1ZmZlciAqYnl0ZXMuQnVmZmVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgKFtdYnl0ZSwgZXJyb3IpIHsKLQkJCWVyciA6PSBiaW5hcnkuV3JpdGUoYnVmZmVyLCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZS4odWludDgpKQotCQkJcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBlcnIKKwkJYnl0ZVR5cGU6IGZ1bmModmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCQkJcmV0dXJuIGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZS4odWludDgpKQogCQl9LAotCQlib29sZWFuVHlwZTogZnVuYyh2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCQkJZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIHZhbHVlLihib29sKSkKLQkJCXJldHVybiBidWZmZXIuQnl0ZXMoKSwgZXJyCisJCWJvb2xlYW5UeXBlOiBmdW5jKHZhbHVlIGludGVyZmFjZXt9LCB3IGlvLldyaXRlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIGVycm9yIHsKKwkJCXJldHVybiBiaW5hcnkuV3JpdGUodywgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUuKGJvb2wpKQogCQl9LAotCQl1dWlkVHlwZTogZnVuYyh2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCQkJZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIHZhbHVlKQotCQkJcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBlcnIKKwkJdXVpZFR5cGU6IGZ1bmModmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCQkJcmV0dXJuIGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZSkKIAkJfSwKLQkJZmxvYXRUeXBlOiBmdW5jKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgdHlwZVNlcmlhbGl6ZXIgKmdyYXBoQmluYXJ5VHlwZVNlcmlhbGl6ZXIpIChbXWJ5dGUsIGVycm9yKSB7Ci0JCQllcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgdmFsdWUpCi0JCQlyZXR1cm4gYnVmZmVyLkJ5dGVzKCksIGVycgorCQlmbG9hdFR5cGU6IGZ1bmModmFsdWUgaW50ZXJmYWNle30sIHcgaW8uV3JpdGVyLCB0eXBlU2VyaWFsaXplciAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgeworCQkJcmV0dXJuIGJpbmFyeS5Xcml0ZSh3LCBiaW5hcnkuQmlnRW5kaWFuLCB2YWx1ZSkKIAkJfSwKLQkJZG91YmxlVHlwZTogZnVuYyh2YWx1ZSBpbnRlcmZhY2V7fSwgYnVmZmVyICpieXRlcy5CdWZmZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSAoW11ieXRlLCBlcnJvcikgewotCQkJZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIHZhbHVlKQotCQkJcmV0dXJuIGJ1ZmZlci5CeXRlcygpLCBlcnIKKwkJZG91YmxlVHlwZTogZnVuYyh2YWx1ZSBpbnRlcmZhY2V7fSwgdyBpby5Xcml0ZXIsIHR5cGVTZXJpYWxpemVyICpncmFwaEJpbmFyeVR5cGVTZXJpYWxpemVyKSBlcnJvciB7CisJCQlyZXR1cm4gYmluYXJ5LldyaXRlKHcsIGJpbmFyeS5CaWdFbmRpYW4sIHZhbHVlKQogCQl9LAotCQl2ZXJ0ZXhUeXBlOiAgICAgICAgICAgIHZlcnRleFdyaXRlciwKLQkJZWRnZVR5cGU6ICAgICAgICAgICAgICBlZGdlV3JpdGVyLAotCQlwcm9wZXJ0eVR5cGU6ICAgICAgICAgIHByb3BlcnR5V3JpdGVyLAotCQl2ZXJ0ZXhQcm9wZXJ0eVR5cGU6ICAgIHZlcnRleFByb3BlcnR5V3JpdGVyLAotCQlsYW1iZGFUeXBlOiAgICAgICAgICAgIGxhbWJkYVdyaXRlciwKLQkJdHJhdmVyc2FsU3RyYXRlZ3lUeXBlOiB0cmF2ZXJzYWxTdHJhdGVneVdyaXRlciwKLQkJcGF0aFR5cGU6ICAgICAgICAgICAgICBwYXRoV3JpdGVyLAotCQlzZXRUeXBlOiAgICAgICAgICAgICAgIHNldFdyaXRlciwKLQkJZGF0ZVR5cGU6ICAgICAgICAgICAgICB0aW1lV3JpdGVyLAotCQlkdXJhdGlvblR5cGU6ICAgICAgICAgIGR1cmF0aW9uV3JpdGVyLAotCQlvZmZzZXREYXRlVGltZVR5cGU6ICAgIG9mZnNldERhdGVUaW1lV3JpdGVyLAotCQljYXJkaW5hbGl0eVR5cGU6ICAgICAgIGVudW1Xcml0ZXIsCi0JCWNvbHVtblR5cGU6ICAgICAgICAgICAgZW51bVdyaXRlciwKLQkJZGlyZWN0aW9uVHlwZTogICAgICAgICBlbnVtV3JpdGVyLAotCQlkdFR5cGU6ICAgICAgICAgICAgICAgIGVudW1Xcml0ZXIsCi0JCWdUeXBlVHlwZTogICAgICAgICAgICAgZW51bVdyaXRlciwKLQkJb3BlcmF0b3JUeXBlOiAgICAgICAgICBlbnVtV3JpdGVyLAotCQlvcmRlclR5cGU6ICAgICAgICAgICAgIGVudW1Xcml0ZXIsCi0JCXBpY2tUeXBlOiAgICAgICAgICAgICAgZW51bVdyaXRlciwKLQkJcG9wVHlwZTogICAgICAgICAgICAgICBlbnVtV3JpdGVyLAotCQl0VHlwZTogICAgICAgICAgICAgICAgIGVudW1Xcml0ZXIsCi0JCWJhcnJpZXJUeXBlOiAgICAgICAgICAgZW51bVdyaXRlciwKLQkJc2NvcGVUeXBlOiAgICAgICAgICAgICBlbnVtV3JpdGVyLAotCQltZXJnZVR5cGU6ICAgICAgICAgICAgIGVudW1Xcml0ZXIsCi0JCXBUeXBlOiAgICAgICAgICAgICAgICAgcFdyaXRlciwKLQkJdGV4dFBUeXBlOiAgICAgICAgICAgICB0ZXh0UFdyaXRlciwKLQkJYmluZGluZ1R5cGU6ICAgICAgICAgICBiaW5kaW5nV3JpdGVyLAotCQltYXBUeXBlOiAgICAgICAgICAgICAgIG1hcFdyaXRlciwKLQkJbGlzdFR5cGU6ICAgICAgICAgICAgICBsaXN0V3JpdGVyLAotCQlieXRlQnVmZmVyOiAgICAgICAgICAgIGJ5dGVCdWZmZXJXcml0ZXIsCi0JCWNsYXNzVHlwZTogICAgICAgICAgICAgY2xhc3NXcml0ZXIsCisJCXZlcnRleFR5cGU6ICAgICAgICAgdmVydGV4V3JpdGVyLAorCQllZGdlVHlwZTogICAgICAgICAgIGVkZ2VXcml0ZXIsCisJCXByb3BlcnR5VHlwZTogICAgICAgcHJvcGVydHlXcml0ZXIsCisJCXZlcnRleFByb3BlcnR5VHlwZTogdmVydGV4UHJvcGVydHlXcml0ZXIsCisJCXBhdGhUeXBlOiAgICAgICAgICAgcGF0aFdyaXRlciwKKwkJZGF0ZXRpbWVUeXBlOiAgICAgICBkYXRlVGltZVdyaXRlciwKKwkJZHVyYXRpb25UeXBlOiAgICAgICBkdXJhdGlvbldyaXRlciwKKwkJZGlyZWN0aW9uVHlwZTogICAgICBlbnVtV3JpdGVyLAorCQlnVHlwZVR5cGU6ICAgICAgICAgIGVudW1Xcml0ZXIsCisJCXRUeXBlOiAgICAgICAgICAgICAgZW51bVdyaXRlciwKKwkJbWVyZ2VUeXBlOiAgICAgICAgICBlbnVtV3JpdGVyLAorCQltYXBUeXBlOiAgICAgICAgICAgIG1hcFdyaXRlciwKKwkJbGlzdFR5cGU6ICAgICAgICAgICBsaXN0V3JpdGVyLAorCQlzZXRUeXBlOiAgICAgICAgICAgIHNldFdyaXRlciwKKwkJYnl0ZUJ1ZmZlcjogICAgICAgICBieXRlQnVmZmVyV3JpdGVyLAorCQltYXJrZXJUeXBlOiAgICAgICAgIG1hcmtlcldyaXRlciwKIAl9CiB9CiAKLWZ1bmMgaW5pdERlc2VyaWFsaXplcnMoKSB7Ci0JZGVzZXJpYWxpemVycyA9IG1hcFtkYXRhVHlwZV1yZWFkZXJ7Ci0JCS8vIFByaW1pdGl2ZQotCQlib29sZWFuVHlwZTogICAgcmVhZEJvb2xlYW4sCi0JCWJ5dGVUeXBlOiAgICAgICByZWFkQnl0ZSwKLQkJc2hvcnRUeXBlOiAgICAgIHJlYWRTaG9ydCwKLQkJaW50VHlwZTogICAgICAgIHJlYWRJbnQsCi0JCWxvbmdUeXBlOiAgICAgICByZWFkTG9uZywKLQkJYmlnRGVjaW1hbFR5cGU6IHJlYWRCaWdEZWNpbWFsLAotCQliaWdJbnRlZ2VyVHlwZTogcmVhZEJpZ0ludCwKLQkJZmxvYXRUeXBlOiAgICAgIHJlYWRGbG9hdCwKLQkJZG91YmxlVHlwZTogICAgIHJlYWREb3VibGUsCi0JCXN0cmluZ1R5cGU6ICAgICByZWFkU3RyaW5nLAotCi0JCS8vIENvbXBvc2l0ZQotCQlsaXN0VHlwZTogICByZWFkTGlzdCwKLQkJbWFwVHlwZTogICAgcmVhZE1hcCwKLQkJc2V0VHlwZTogICAgcmVhZFNldCwKLQkJdXVpZFR5cGU6ICAgcmVhZFV1aWQsCi0JCWJ5dGVCdWZmZXI6IHJlYWRCeXRlQnVmZmVyLAotCQljbGFzc1R5cGU6ICByZWFkQ2xhc3MsCi0KLQkJLy8gRGF0ZSBUaW1lCi0JCWRhdGVUeXBlOiAgICAgICAgICAgdGltZVJlYWRlciwKLQkJdGltZXN0YW1wVHlwZTogICAgICB0aW1lUmVhZGVyLAotCQlvZmZzZXREYXRlVGltZVR5cGU6IG9mZnNldERhdGVUaW1lUmVhZGVyLAotCQlkdXJhdGlvblR5cGU6ICAgICAgIGR1cmF0aW9uUmVhZGVyLAotCi0JCS8vIEdyYXBoCi0JCXRyYXZlcnNlclR5cGU6ICAgICAgdHJhdmVyc2VyUmVhZGVyLAotCQl2ZXJ0ZXhUeXBlOiAgICAgICAgIHZlcnRleFJlYWRlciwKLQkJZWRnZVR5cGU6ICAgICAgICAgICBlZGdlUmVhZGVyLAotCQlwcm9wZXJ0eVR5cGU6ICAgICAgIHByb3BlcnR5UmVhZGVyLAotCQl2ZXJ0ZXhQcm9wZXJ0eVR5cGU6IHZlcnRleFByb3BlcnR5UmVhZGVyLAotCQlwYXRoVHlwZTogICAgICAgICAgIHBhdGhSZWFkZXIsCi0JCWJ1bGtTZXRUeXBlOiAgICAgICAgYnVsa1NldFJlYWRlciwKLQkJdFR5cGU6ICAgICAgICAgICAgICBlbnVtUmVhZGVyLAotCQlkaXJlY3Rpb25UeXBlOiAgICAgIGVudW1SZWFkZXIsCi0JCWR0VHlwZTogICAgICAgICAgICAgZW51bVJlYWRlciwKLQkJZ1R5cGVUeXBlOiAgICAgICAgICBlbnVtUmVhZGVyLAotCQliaW5kaW5nVHlwZTogICAgICAgIGJpbmRpbmdSZWFkZXIsCi0KLQkJLy8gTWV0cmljcwotCQltZXRyaWNzVHlwZTogICAgICAgICAgbWV0cmljc1JlYWRlciwKLQkJdHJhdmVyc2FsTWV0cmljc1R5cGU6IHRyYXZlcnNhbE1ldHJpY3NSZWFkZXIsCi0KLQkJLy8gQ3VzdG9tZXIKLQkJY3VzdG9tVHlwZTogY3VzdG9tVHlwZVJlYWRlciwKLQl9Ci0JY3VzdG9tRGVzZXJpYWxpemVycyA9IG1hcFtzdHJpbmddQ3VzdG9tVHlwZVJlYWRlcnt9Ci19Ci0KIC8vIFJlZ2lzdGVyQ3VzdG9tVHlwZVJlYWRlciByZWdpc3RlciBhIHJlYWRlciAoZGVzZXJpYWxpemVyKSBmb3IgYSBjdXN0b20gdHlwZQorLy8gRGVwcmVjYXRlZDogQ3VzdG9tIHR5cGUgZGVzZXJpYWxpemF0aW9uIHNob3VsZCBiZSBoYW5kbGVkIGJ5IGV4dGVuZGluZyBHcmFwaEJpbmFyeURlc2VyaWFsaXplcgogZnVuYyBSZWdpc3RlckN1c3RvbVR5cGVSZWFkZXIoY3VzdG9tVHlwZU5hbWUgc3RyaW5nLCByZWFkZXIgQ3VzdG9tVHlwZVJlYWRlcikgewogCWN1c3RvbVR5cGVSZWFkZXJMb2NrLkxvY2soKQogCWRlZmVyIGN1c3RvbVR5cGVSZWFkZXJMb2NrLlVubG9jaygpCkBAIC00MDEsMzEgKzIzMCw5IEBACiB9CiAKIC8vIFVucmVnaXN0ZXJDdXN0b21UeXBlUmVhZGVyIHVucmVnaXN0ZXIgYSByZWFkZXIgKGRlc2VyaWFsaXplcikgZm9yIGEgY3VzdG9tIHR5cGUKKy8vIERlcHJlY2F0ZWQ6IEN1c3RvbSB0eXBlIGRlc2VyaWFsaXphdGlvbiBzaG91bGQgYmUgaGFuZGxlZCBieSBleHRlbmRpbmcgR3JhcGhCaW5hcnlEZXNlcmlhbGl6ZXIKIGZ1bmMgVW5yZWdpc3RlckN1c3RvbVR5cGVSZWFkZXIoY3VzdG9tVHlwZU5hbWUgc3RyaW5nKSB7CiAJY3VzdG9tVHlwZVJlYWRlckxvY2suTG9jaygpCiAJZGVmZXIgY3VzdG9tVHlwZVJlYWRlckxvY2suVW5sb2NrKCkKIAlkZWxldGUoY3VzdG9tRGVzZXJpYWxpemVycywgY3VzdG9tVHlwZU5hbWUpCiB9Ci0KLS8vIFJlZ2lzdGVyQ3VzdG9tVHlwZVdyaXRlciByZWdpc3RlcnMgYSB3cml0ZXIgKHNlcmlhbGl6ZXIpIGZvciBhIGN1c3RvbSB0eXBlLgotLy8gVGhlIHZhbHVlVHlwZSBzaG91bGQgYmUgdGhlIHJlZmxlY3QuVHlwZSBvZiB0aGUgY3VzdG9tIHR5cGUgKGUuZy4sIHJlZmxlY3QuVHlwZU9mKCgqTXlUeXBlKShuaWwpKSkKLS8vIFRoZSB0eXBlTmFtZSBpcyB0aGUgR3JhcGhCaW5hcnkgY3VzdG9tIHR5cGUgbmFtZSAoZS5nLiwgImphbnVzZ3JhcGguUmVsYXRpb25JZGVudGlmaWVyIikKLS8vIFRoZSB3cml0ZXIgZnVuY3Rpb24gc2hvdWxkIHNlcmlhbGl6ZSB0aGUgdmFsdWUgaW50byB0aGUgYnVmZmVyIGluIEdyYXBoQmluYXJ5IGN1c3RvbSB0eXBlIGZvcm1hdC4KLWZ1bmMgUmVnaXN0ZXJDdXN0b21UeXBlV3JpdGVyKHZhbHVlVHlwZSByZWZsZWN0LlR5cGUsIHR5cGVOYW1lIHN0cmluZywgd3JpdGVyIEN1c3RvbVR5cGVXcml0ZXIpIHsKLQljdXN0b21UeXBlV3JpdGVyTG9jay5Mb2NrKCkKLQlkZWZlciBjdXN0b21UeXBlV3JpdGVyTG9jay5VbmxvY2soKQotCWlmIGN1c3RvbVNlcmlhbGl6ZXJzID09IG5pbCB7Ci0JCWN1c3RvbVNlcmlhbGl6ZXJzID0gbWFrZShtYXBbcmVmbGVjdC5UeXBlXUN1c3RvbVR5cGVJbmZvKQotCX0KLQljdXN0b21TZXJpYWxpemVyc1t2YWx1ZVR5cGVdID0gQ3VzdG9tVHlwZUluZm97Ci0JCVR5cGVOYW1lOiB0eXBlTmFtZSwKLQkJV3JpdGVyOiAgIHdyaXRlciwKLQl9Ci19Ci0KLS8vIFVucmVnaXN0ZXJDdXN0b21UeXBlV3JpdGVyIHVucmVnaXN0ZXJzIGEgd3JpdGVyIChzZXJpYWxpemVyKSBmb3IgYSBjdXN0b20gdHlwZQotZnVuYyBVbnJlZ2lzdGVyQ3VzdG9tVHlwZVdyaXRlcih2YWx1ZVR5cGUgcmVmbGVjdC5UeXBlKSB7Ci0JY3VzdG9tVHlwZVdyaXRlckxvY2suTG9jaygpCi0JZGVmZXIgY3VzdG9tVHlwZVdyaXRlckxvY2suVW5sb2NrKCkKLQlkZWxldGUoY3VzdG9tU2VyaWFsaXplcnMsIHZhbHVlVHlwZSkKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL3NlcmlhbGl6ZXJfdGVzdC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3NlcmlhbGl6ZXJfdGVzdC5nbwppbmRleCA5NDVmODI2Li45MjIyNWYyIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci9zZXJpYWxpemVyX3Rlc3QuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvc2VyaWFsaXplcl90ZXN0LmdvCkBAIC0yMCwyOSArMjAsMjEgQEAKIHBhY2thZ2UgZ3JlbWxpbmdvCiAKIGltcG9ydCAoCi0JImJ5dGVzIgotCSJlbmNvZGluZy9iaW5hcnkiCi0JImVycm9ycyIKIAkiZm10IgotCSJyZWZsZWN0IgogCSJ0ZXN0aW5nIgogCi0JImdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQiCiAJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCiAJImdvbGFuZy5vcmcveC90ZXh0L2xhbmd1YWdlIgogKQogCi1jb25zdCBtYXBEYXRhT3JkZXIxID0gIlszMiA5NyAxMTIgMTEyIDEwOCAxMDUgOTkgOTcgMTE2IDEwNSAxMTEgMTEwIDQ3IDExOCAxMTAgMTAwIDQ2IDEwMyAxMTQgOTcgMTEyIDEwNCA5OCAxMDUgMTEwIDk3IDExNCAxMjEgNDUgMTE4IDQ5IDQ2IDQ4IDEyOSA2NSAyMTAgMjI2IDEzOCAzMiAxNjQgNzQgMTc2IDE3OSAxMjEgMjE2IDE2IDIyMiAyMjIgNTUgMTM0IDAgMCAwIDQgMTAxIDExOCA5NyAxMDggMCAwIDAgMCAwIDAgMCAyIDMgMCAwIDAgMCA3IDEwMyAxMTQgMTAxIDEwOSAxMDggMTA1IDExMCAzIDAgMCAwIDAgMTMgMTAzIDQ2IDg2IDQwIDQxIDQ2IDk5IDExMSAxMTcgMTEwIDExNiA0MCA0MSAzIDAgMCAwIDAgNyA5NyAxMDggMTA1IDk3IDExNSAxMDEgMTE1IDEwIDAgMCAwIDAgMSAzIDAgMCAwIDAgMSAxMDMgMyAwIDAgMCAwIDEgMTAzXSIKLWNvbnN0IG1hcERhdGFPcmRlcjIgPSAiWzMyIDk3IDExMiAxMTIgMTA4IDEwNSA5OSA5NyAxMTYgMTA1IDExMSAxMTAgNDcgMTE4IDExMCAxMDAgNDYgMTAzIDExNCA5NyAxMTIgMTA0IDk4IDEwNSAxMTAgOTcgMTE0IDEyMSA0NSAxMTggNDkgNDYgNDggMTI5IDY1IDIxMCAyMjYgMTM4IDMyIDE2NCA3NCAxNzYgMTc5IDEyMSAyMTYgMTYgMjIyIDIyMiA1NSAxMzQgMCAwIDAgNCAxMDEgMTE4IDk3IDEwOCAwIDAgMCAwIDAgMCAwIDIgMyAwIDAgMCAwIDcgOTcgMTA4IDEwNSA5NyAxMTUgMTAxIDExNSAxMCAwIDAgMCAwIDEgMyAwIDAgMCAwIDEgMTAzIDMgMCAwIDAgMCAxIDEwMyAzIDAgMCAwIDAgNyAxMDMgMTE0IDEwMSAxMDkgMTA4IDEwNSAxMTAgMyAwIDAgMCAwIDEzIDEwMyA0NiA4NiA0MCA0MSA0NiA5OSAxMTEgMTE3IDExMCAxMTYgNDAgNDFdIgorY29uc3QgbWFwRGF0YU9yZGVyMSA9ICJbMTMyIDAgMCAwIDIgMyAwIDAgMCAwIDggMTA4IDk3IDExMCAxMDMgMTE3IDk3IDEwMyAxMDEgMyAwIDAgMCAwIDEyIDEwMyAxMTQgMTAxIDEwOSAxMDggMTA1IDExMCA0NSAxMDggOTcgMTEwIDEwMyAzIDAgMCAwIDAgMSAxMDMgMyAwIDAgMCAwIDEgMTAzIDAgMCAwIDEzIDEwMyA0NiA4NiA0MCA0MSA0NiA5OSAxMTEgMTE3IDExMCAxMTYgNDAgNDFdIgorY29uc3QgbWFwRGF0YU9yZGVyMiA9ICJbMTMyIDAgMCAwIDIgMyAwIDAgMCAwIDEgMTAzIDMgMCAwIDAgMCAxIDEwMyAzIDAgMCAwIDAgOCAxMDggOTcgMTEwIDEwMyAxMTcgOTcgMTAzIDEwMSAzIDAgMCAwIDAgMTIgMTAzIDExNCAxMDEgMTA5IDEwOCAxMDUgMTEwIDQ1IDEwOCA5NyAxMTAgMTAzIDAgMCAwIDEzIDEwMyA0NiA4NiA0MCA0MSA0NiA5OSAxMTEgMTE3IDExMCAxMTYgNDAgNDFdIgogCiBmdW5jIFRlc3RTZXJpYWxpemVyKHQgKnRlc3RpbmcuVCkgewogCXQuUnVuKCJ0ZXN0IHNlcmlhbGl6ZWQgcmVxdWVzdCBtZXNzYWdlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJdmFyIHUsIF8gPSB1dWlkLlBhcnNlKCI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiKQotCQl0ZXN0UmVxdWVzdCA6PSByZXF1ZXN0ewotCQkJcmVxdWVzdElEOiB1LAotCQkJb3A6ICAgICAgICAiZXZhbCIsCi0JCQlwcm9jZXNzb3I6ICIiLAotCQkJYXJnczogICAgICBtYXBbc3RyaW5nXWludGVyZmFjZXt9eyJncmVtbGluIjogImcuVigpLmNvdW50KCkiLCAiYWxpYXNlcyI6IG1hcFtzdHJpbmddaW50ZXJmYWNle317ImciOiAiZyJ9fSwKKwkJdGVzdFJlcXVlc3QgOj0gUmVxdWVzdE1lc3NhZ2V7CisJCQlHcmVtbGluOiAiZy5WKCkuY291bnQoKSIsCisJCQlGaWVsZHM6ICBtYXBbc3RyaW5nXWludGVyZmFjZXt9eyJnIjogImciLCAibGFuZ3VhZ2UiOiAiZ3JlbWxpbi1sYW5nIn0sCiAJCX0KIAkJc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCiAJCXNlcmlhbGl6ZWQsIF8gOj0gc2VyaWFsaXplci5TZXJpYWxpemVNZXNzYWdlKCZ0ZXN0UmVxdWVzdCkKQEAgLTUzLDE3NiArNDUsMjggQEAKIAl9KQogCiAJdC5SdW4oInRlc3Qgc2VyaWFsaXplZCByZXNwb25zZSBtZXNzYWdlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJcmVzcG9uc2VCeXRlQXJyYXkgOj0gW11ieXRlezEyOSwgMCwgMjUxLCAzNywgNDIsIDc0LCAxMTcsIDIyMSwgNzEsIDE5MSwgMTgzLCA3OCwgODYsIDUzLCAwLCAxMiwgMTMyLCAxMDAsIDAsIDAsIDAsIDIwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMywgMCwgMCwgMCwgMCwgNCwgMTA0LCAxMTEsIDExNSwgMTE2LCAzLCAwLCAwLCAwLCAwLCAxNiwgNDcsIDQ5LCA1MCwgNTUsIDQ2LCA0OCwgNDYsIDQ4LCA0NiwgNDksIDU4LCA1NCwgNTAsIDQ4LCA1MSwgNTMsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDEsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9CisJCS8vIHJlc3BvbnNlIG9mIHN0YXR1cyBjb2RlIDIwMCB3aXRoIG1lc3NhZ2UgT0sgYW5kIGRhdGEgb2YgbGlzdCBvZiBzaW5nbGUgaXRlbSBvZiBpbnRlZ2VyIHplcm8KKwkJcmVzcG9uc2VCeXRlQXJyYXkgOj0gW11ieXRlezEyOSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMjUzLCAwLCAwLCAwLCAwLCAwLCAyMDAsIDEsIDF9CiAJCXNlcmlhbGl6ZXIgOj0gbmV3R3JhcGhCaW5hcnlTZXJpYWxpemVyKG5ld0xvZ0hhbmRsZXIoJmRlZmF1bHRMb2dnZXJ7fSwgRXJyb3IsIGxhbmd1YWdlLkVuZ2xpc2gpKQogCQlyZXNwb25zZSwgZXJyIDo9IHNlcmlhbGl6ZXIuRGVzZXJpYWxpemVNZXNzYWdlKHJlc3BvbnNlQnl0ZUFycmF5KQogCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0LkVxdWFsKHQsICJmYjI1MmE0YS03NWRkLTQ3YmYtYjc0ZS01NjM1MDAwYzg0NjQiLCByZXNwb25zZS5SZXNwb25zZUlELlN0cmluZygpKQotCQlhc3NlcnQuRXF1YWwodCwgdWludDE2KDIwMCksIHJlc3BvbnNlLlJlc3BvbnNlU3RhdHVzLmNvZGUpCi0JCWFzc2VydC5FcXVhbCh0LCAiIiwgcmVzcG9uc2UuUmVzcG9uc2VTdGF0dXMubWVzc2FnZSkKLQkJYXNzZXJ0LkVxdWFsKHQsIG1hcFtzdHJpbmddaW50ZXJmYWNle317Imhvc3QiOiAiLzEyNy4wLjAuMTo2MjAzNSJ9LCByZXNwb25zZS5SZXNwb25zZVN0YXR1cy5hdHRyaWJ1dGVzKQotCQlhc3NlcnQuRXF1YWwodCwgbWFwW3N0cmluZ11pbnRlcmZhY2V7fXt9LCByZXNwb25zZS5SZXNwb25zZVJlc3VsdC5NZXRhKQotCQlhc3NlcnQuRXF1YWwodCwgW11pbnRlcmZhY2V7fXtpbnQ2NCgwKX0sIHJlc3BvbnNlLlJlc3BvbnNlUmVzdWx0LkRhdGEpCi0JfSkKLQotCXQuUnVuKCJ0ZXN0IHNlcmlhbGl6ZWQgcmVzcG9uc2UgbWVzc2FnZSB3LyBjdXN0b20gdHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCVJlZ2lzdGVyQ3VzdG9tVHlwZVJlYWRlcigiamFudXNncmFwaC5SZWxhdGlvbklkZW50aWZpZXIiLCBleGFtcGxlSmFudXNncmFwaFJlbGF0aW9uSWRlbnRpZmllclJlYWRlcikKLQkJZGVmZXIgZnVuYygpIHsKLQkJCVVucmVnaXN0ZXJDdXN0b21UeXBlUmVhZGVyKCJqYW51c2dyYXBoLlJlbGF0aW9uSWRlbnRpZmllciIpCi0JCX0oKQotCQlyZXNwb25zZUJ5dGVBcnJheSA6PSBbXWJ5dGV7MTI5LCAwLCA2OSwgMjIyLCA0MCwgNTUsIDk1LCA2MiwgNzUsIDI0OSwgMTM0LCAxMzMsIDE1NSwgMTMzLCA0MywgMTUxLCAyMjEsIDY4LCAwLCAwLCAwLCAyMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDMsIDAsIDAsIDAsIDAsIDQsIDEwNCwgMTExLCAxMTUsIDExNiwgMywgMCwgMCwgMCwgMCwgMTgsIDQ3LCA0OSwgNDgsIDQ2LCA1MCwgNTIsIDUyLCA0NiwgNDgsIDQ2LCA1MSwgNTEsIDU4LCA1MywgNDksIDUyLCA1NSwgNDgsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDEsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAyOSwgMTA2LCA5NywgMTEwLCAxMTcsIDExNSwgMTAzLCAxMTQsIDk3LCAxMTIsIDEwNCwgNDYsIDgyLCAxMDEsIDEwOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDEwMCwgMTAxLCAxMTAsIDExNiwgMTA1LCAxMDIsIDEwNSwgMTAxLCAxMTQsIDAsIDAsIDE2LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDAsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAyNCwgMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyLCA1Nn0KLQkJc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCi0JCXJlc3BvbnNlLCBlcnIgOj0gc2VyaWFsaXplci5EZXNlcmlhbGl6ZU1lc3NhZ2UocmVzcG9uc2VCeXRlQXJyYXkpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuRXF1YWwodCwgIjQ1ZGUyODM3LTVmM2UtNGJmOS04Njg1LTliODUyYjk3ZGQ0NCIsIHJlc3BvbnNlLlJlc3BvbnNlSUQuU3RyaW5nKCkpCi0JCWFzc2VydC5FcXVhbCh0LCB1aW50MTYoMjAwKSwgcmVzcG9uc2UuUmVzcG9uc2VTdGF0dXMuY29kZSkKLQkJYXNzZXJ0LkVxdWFsKHQsICIiLCByZXNwb25zZS5SZXNwb25zZVN0YXR1cy5tZXNzYWdlKQotCQlhc3NlcnQuRXF1YWwodCwgbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiaG9zdCI6ICIvMTAuMjQ0LjAuMzM6NTE0NzAifSwgcmVzcG9uc2UuUmVzcG9uc2VTdGF0dXMuYXR0cmlidXRlcykKLQkJYXNzZXJ0LkVxdWFsKHQsIG1hcFtzdHJpbmddaW50ZXJmYWNle317fSwgcmVzcG9uc2UuUmVzcG9uc2VSZXN1bHQuTWV0YSkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCByZXNwb25zZS5SZXNwb25zZVJlc3VsdC5EYXRhKQotCX0pCi0KLQl0LlJ1bigidGVzdCBzZXJpYWxpemVkIHJlcXVlc3QgbWVzc2FnZSB3LyBjdXN0b20gdHlwZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWN1c3RvbVR5cGUgOj0gcmVmbGVjdC5UeXBlT2YoKCpUZXN0Q3VzdG9tVHlwZSkobmlsKSkKLQkJdHlwZU5hbWUgOj0gInRlc3QuQ3VzdG9tVHlwZSIKLQotCQkvLyBSZWdpc3RlciB0aGUgY3VzdG9tIHR5cGUgd3JpdGVyCi0JCVJlZ2lzdGVyQ3VzdG9tVHlwZVdyaXRlcihjdXN0b21UeXBlLCB0eXBlTmFtZSwgdGVzdEN1c3RvbVR5cGVXcml0ZXIpCi0JCWRlZmVyIFVucmVnaXN0ZXJDdXN0b21UeXBlV3JpdGVyKGN1c3RvbVR5cGUpCi0KLQkJdGVzdFZhbHVlIDo9ICZUZXN0Q3VzdG9tVHlwZXsKLQkJCUlEOiAgICAxMjM0NSwKLQkJCVZhbHVlOiAidGVzdCB2YWx1ZSIsCi0JCX0KLQotCQl2YXIgdSwgXyA9IHV1aWQuUGFyc2UoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpCi0JCXRlc3RSZXF1ZXN0IDo9IHJlcXVlc3R7Ci0JCQlyZXF1ZXN0SUQ6IHUsCi0JCQlvcDogICAgICAgICJldmFsIiwKLQkJCXByb2Nlc3NvcjogIiIsCi0JCQlhcmdzOiAgICAgIG1hcFtzdHJpbmddaW50ZXJmYWNle317ImdyZW1saW4iOiAiZy5WKCkuY291bnQoKSIsICJjdXN0b21BcmciOiB0ZXN0VmFsdWV9LAotCQl9Ci0KLQkJc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCi0JCXNlcmlhbGl6ZWQsIGVyciA6PSBzZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2UoJnRlc3RSZXF1ZXN0KQotCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuTm90TmlsKHQsIHNlcmlhbGl6ZWQpCi0KLQkJLy8gVmVyaWZ5IHRoZSBzZXJpYWxpemVkIGRhdGEgY29udGFpbnMgdGhlIGN1c3RvbSB0eXBlIG5hbWUgYnl0ZXMKLQkJdHlwZU5hbWVCeXRlcyA6PSBbXWJ5dGUodHlwZU5hbWUpCi0JCWZvdW5kIDo9IGZhbHNlCi0JCWZvciBpIDo9IDA7IGkgPD0gbGVuKHNlcmlhbGl6ZWQpLWxlbih0eXBlTmFtZUJ5dGVzKTsgaSsrIHsKLQkJCWlmIGJ5dGVzLkVxdWFsKHNlcmlhbGl6ZWRbaTppK2xlbih0eXBlTmFtZUJ5dGVzKV0sIHR5cGVOYW1lQnl0ZXMpIHsKLQkJCQlmb3VuZCA9IHRydWUKLQkJCQlicmVhawotCQkJfQotCQl9Ci0JCWFzc2VydC5UcnVlKHQsIGZvdW5kLCAiRXhwZWN0ZWQgc2VyaWFsaXplZCBkYXRhIHRvIGNvbnRhaW4gY3VzdG9tIHR5cGUgbmFtZSIpCisJCWFzc2VydC5FcXVhbCh0LCB1aW50MzIoMjAwKSwgcmVzcG9uc2UuUmVzcG9uc2VTdGF0dXMuY29kZSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJPSyIsIHJlc3BvbnNlLlJlc3BvbnNlU3RhdHVzLm1lc3NhZ2UpCisJCWFzc2VydC5FcXVhbCh0LCBbXWludGVyZmFjZXt9e2ludDMyKDApfSwgcmVzcG9uc2UuUmVzcG9uc2VSZXN1bHQuRGF0YSkKIAl9KQogfQogCiBmdW5jIFRlc3RTZXJpYWxpemVyRmFpbHVyZXModCAqdGVzdGluZy5UKSB7Ci0JdC5SdW4oInRlc3QgY29udmVydEFyZ3MgZmFpbHVyZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCXZhciB1LCBfID0gdXVpZC5QYXJzZSgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikKLQkJdGVzdFJlcXVlc3QgOj0gcmVxdWVzdHsKLQkJCXJlcXVlc3RJRDogdSwKLQkJCW9wOiAgICAgICAgInRyYXZlcnNhbCIsCi0JCQlwcm9jZXNzb3I6ICIiLAotCQkJLy8gSW52YWxpZCBJbnB1dCBpbiBhcmdzLCBzbyBzaG91bGQgZmFpbAotCQkJYXJnczogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiaW52YWxpZElucHV0IjogImludmFsaWRJbnB1dCIsICJhbGlhc2VzIjogbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZyI6ICJnIn19LAorCXQuUnVuKCJ0ZXN0IHNlcmlhbGl6ZSByZXF1ZXN0IGZpZWxkcyBmYWlsdXJlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJaW52YWxpZCA6PSAiaW52YWxpZCIKKwkJdGVzdFJlcXVlc3QgOj0gUmVxdWVzdE1lc3NhZ2V7CisJCQkvLyBJbnZhbGlkIHBvaW50ZXIgdHlwZSBpbiBmaWVsZHMsIHNvIHNob3VsZCBmYWlsCisJCQlGaWVsZHM6IG1hcFtzdHJpbmddaW50ZXJmYWNle317ImludmFsaWRJbnB1dCI6ICZpbnZhbGlkLCAiZyI6ICJnIn0sCiAJCX0KIAkJc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCiAJCXJlc3AsIGVyciA6PSBzZXJpYWxpemVyLlNlcmlhbGl6ZU1lc3NhZ2UoJnRlc3RSZXF1ZXN0KQogCQlhc3NlcnQuTmlsKHQsIHJlc3ApCiAJCWFzc2VydC5Ob3ROaWwodCwgZXJyKQotCQlhc3NlcnQuVHJ1ZSh0LCBpc1NhbWVFcnJvckNvZGUobmV3RXJyb3IoZXJyMDcwNENvbnZlcnRBcmdzTm9TZXJpYWxpemVyRXJyb3IpLCBlcnIpKQotCX0pCi0KLQl0LlJ1bigidGVzdCB1bmtvd25DdXN0b21UeXBlIGZhaWx1cmUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlyZXNwb25zZUJ5dGVBcnJheSA6PSBbXWJ5dGV7MTI5LCAwLCA2OSwgMjIyLCA0MCwgNTUsIDk1LCA2MiwgNzUsIDI0OSwgMTM0LCAxMzMsIDE1NSwgMTMzLCA0MywgMTUxLCAyMjEsIDY4LCAwLCAwLCAwLCAyMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDMsIDAsIDAsIDAsIDAsIDQsIDEwNCwgMTExLCAxMTUsIDExNiwgMywgMCwgMCwgMCwgMCwgMTgsIDQ3LCA0OSwgNDgsIDQ2LCA1MCwgNTIsIDUyLCA0NiwgNDgsIDQ2LCA1MSwgNTEsIDU4LCA1MywgNDksIDUyLCA1NSwgNDgsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDEsIDMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAyOSwgMTA2LCA5NywgMTEwLCAxMTcsIDExNSwgMTAzLCAxMTQsIDk3LCAxMTIsIDEwNCwgNDYsIDgyLCAxMDEsIDEwOCwgOTcsIDExNiwgMTA1LCAxMTEsIDExMCwgNzMsIDEwMCwgMTAxLCAxMTAsIDExNiwgMTA1LCAxMDIsIDEwNSwgMTAxLCAxMTQsIDAsIDAsIDE2LCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNiwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDAsIDIxLCAwLCAwLCAwLCAwLCAwLCAwLCAyNCwgMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyLCA1Nn0KLQkJc2VyaWFsaXplciA6PSBuZXdHcmFwaEJpbmFyeVNlcmlhbGl6ZXIobmV3TG9nSGFuZGxlcigmZGVmYXVsdExvZ2dlcnt9LCBFcnJvciwgbGFuZ3VhZ2UuRW5nbGlzaCkpCi0JCXJlc3AsIGVyciA6PSBzZXJpYWxpemVyLkRlc2VyaWFsaXplTWVzc2FnZShyZXNwb25zZUJ5dGVBcnJheSkKLQkJLy8gYSBwYXJ0aWFsIG1lc3NhZ2Ugd2lsbCBzdGlsbCBiZSByZXR1cm5lZAotCQlhc3NlcnQuTm90TmlsKHQsIHJlc3ApCi0JCWFzc2VydC5Ob3ROaWwodCwgZXJyKQotCQlhc3NlcnQuVHJ1ZSh0LCBpc1NhbWVFcnJvckNvZGUobmV3RXJyb3IoZXJyMDQwOUdldFNlcmlhbGl6ZXJUb1JlYWRVbmtub3duQ3VzdG9tVHlwZUVycm9yKSwgZXJyKSkKLQl9KQotCi0JdC5SdW4oInRlc3QgdW5yZWdpc3RlcmVkIGN1c3RvbSB0eXBlIHdyaXRlciBmYWlsdXJlIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJdHlwZSBVbnJlZ2lzdGVyZWRUeXBlIHN0cnVjdCB7Ci0JCQlWYWx1ZSBzdHJpbmcKLQkJfQotCi0JCXRlc3RWYWx1ZSA6PSAmVW5yZWdpc3RlcmVkVHlwZXtWYWx1ZTogInRlc3QifQotCi0JCXZhciB1LCBfID0gdXVpZC5QYXJzZSgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikKLQkJdGVzdFJlcXVlc3QgOj0gcmVxdWVzdHsKLQkJCXJlcXVlc3RJRDogdSwKLQkJCW9wOiAgICAgICAgImV2YWwiLAotCQkJcHJvY2Vzc29yOiAiIiwKLQkJCWFyZ3M6ICAgICAgbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiZ3JlbWxpbiI6ICJnLlYoKS5jb3VudCgpIiwgInVucmVnaXN0ZXJlZCI6IHRlc3RWYWx1ZX0sCi0JCX0KLQotCQlzZXJpYWxpemVyIDo9IG5ld0dyYXBoQmluYXJ5U2VyaWFsaXplcihuZXdMb2dIYW5kbGVyKCZkZWZhdWx0TG9nZ2Vye30sIEVycm9yLCBsYW5ndWFnZS5FbmdsaXNoKSkKLQkJc2VyaWFsaXplZCwgZXJyIDo9IHNlcmlhbGl6ZXIuU2VyaWFsaXplTWVzc2FnZSgmdGVzdFJlcXVlc3QpCi0KLQkJYXNzZXJ0Lk5pbCh0LCBzZXJpYWxpemVkKQotCQlhc3NlcnQuTm90TmlsKHQsIGVycikKIAkJYXNzZXJ0LlRydWUodCwgaXNTYW1lRXJyb3JDb2RlKG5ld0Vycm9yKGVycjA0MDdHZXRTZXJpYWxpemVyVG9Xcml0ZVVua25vd25UeXBlRXJyb3IpLCBlcnIpKQogCX0pCiB9Ci0KLS8vIFRlc3RDdXN0b21UeXBlIGlzIGEgdGVzdCBjdXN0b20gdHlwZSBmb3Igd3JpdGVyIHRlc3RzCi10eXBlIFRlc3RDdXN0b21UeXBlIHN0cnVjdCB7Ci0JSUQgICAgaW50NjQKLQlWYWx1ZSBzdHJpbmcKLX0KLQotLy8gdGVzdEN1c3RvbVR5cGVXcml0ZXIgaXMgYSB3cml0ZXIgZm9yIHRoZSB0ZXN0IGN1c3RvbSB0eXBlCi12YXIgdGVzdEN1c3RvbVR5cGVXcml0ZXIgPSBmdW5jKHZhbHVlIGludGVyZmFjZXt9LCBidWZmZXIgKmJ5dGVzLkJ1ZmZlciwgXyAqZ3JhcGhCaW5hcnlUeXBlU2VyaWFsaXplcikgZXJyb3IgewotCWN1c3RvbVZhbHVlLCBvayA6PSB2YWx1ZS4oKlRlc3RDdXN0b21UeXBlKQotCWlmICFvayB7Ci0JCXJldHVybiBlcnJvcnMuTmV3KCJleHBlY3RlZCAqVGVzdEN1c3RvbVR5cGUiKQotCX0KLQotCS8vIFdyaXRlIElEIGFzIGludDY0Ci0JaWYgZXJyIDo9IGJpbmFyeS5Xcml0ZShidWZmZXIsIGJpbmFyeS5CaWdFbmRpYW4sIGN1c3RvbVZhbHVlLklEKTsgZXJyICE9IG5pbCB7Ci0JCXJldHVybiBlcnIKLQl9Ci0KLQkvLyBXcml0ZSBWYWx1ZSBhcyBzdHJpbmcgKGxlbmd0aC1wcmVmaXhlZCkKLQl2YWx1ZUJ5dGVzIDo9IFtdYnl0ZShjdXN0b21WYWx1ZS5WYWx1ZSkKLQlpZiBlcnIgOj0gYmluYXJ5LldyaXRlKGJ1ZmZlciwgYmluYXJ5LkJpZ0VuZGlhbiwgaW50MzIobGVuKHZhbHVlQnl0ZXMpKSk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCWlmIF8sIGVyciA6PSBidWZmZXIuV3JpdGUodmFsdWVCeXRlcyk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCi0JcmV0dXJuIG5pbAotfQotCi0vLyBleGFtcGxlSmFudXNncmFwaFJlbGF0aW9uSWRlbnRpZmllclJlYWRlciB0aGlzIGltcGxlbWVudGF0aW9uIGlzIG5vdCBjb21wbGV0ZSBhbmQgaXMgdXNlZCBvbmx5IGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZyBjdXN0b20gcmVhZGVycwotZnVuYyBleGFtcGxlSmFudXNncmFwaFJlbGF0aW9uSWRlbnRpZmllclJlYWRlcihkYXRhICpbXWJ5dGUsIGkgKmludCkgKGludGVyZmFjZXt9LCBlcnJvcikgewotCWNvbnN0IHJlbGF0aW9uSWRlbnRpZmllclR5cGUgPSAweDEwMDEKLQljb25zdCBsb25nTWFya2VyID0gMAotCi0JLy8gZXhwZWN0IHR5cGUgY29kZQotCWN1c3RvbURhdGFUeXAgOj0gcmVhZFVpbnQzMlNhZmUoZGF0YSwgaSkKLQlpZiBjdXN0b21EYXRhVHlwICE9IHJlbGF0aW9uSWRlbnRpZmllclR5cGUgewotCQlyZXR1cm4gbmlsLCBmbXQuRXJyb3JmKCJ1bmtub3duIHR5cGUgY29kZS4gZ290IDB4JXgsIGV4cGVjdGVkIDB4JXgiLCBjdXN0b21EYXRhVHlwLCByZWxhdGlvbklkZW50aWZpZXJUeXBlKQotCX0KLQotCS8vIHZhbHVlIGZsYWcsIGV4cGVjdCB0aGlzIHRvIGJlIG5vbi1udWxsYWJsZQotCWlmIHJlYWRCeXRlU2FmZShkYXRhLCBpKSAhPSB2YWx1ZUZsYWdOb25lIHsKLQkJcmV0dXJuIG5pbCwgZXJyb3JzLk5ldygiZXhwZWN0ZWQgbm9uLW51bGwgdmFsdWUiKQotCX0KLQotCS8vIG91dFZlcnRleElkCi0JaWYgcmVhZEJ5dGVTYWZlKGRhdGEsIGkpID09IGxvbmdNYXJrZXIgewotCQlyZXR1cm4gcmVhZExvbmdTYWZlKGRhdGEsIGkpLCBuaWwKLQl9IGVsc2UgewotCQlyZXR1cm4gcmVhZFN0cmluZyhkYXRhLCBpKQotCX0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL3N0cmF0ZWdpZXMuZ28gYi9ncmVtbGluLWdvL2RyaXZlci9zdHJhdGVnaWVzLmdvCmluZGV4IDA3NmIyMmYuLmI1NTAxYWEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3N0cmF0ZWdpZXMuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvc3RyYXRlZ2llcy5nbwpAQCAtMTksMjAgKzE5LDYgQEAKIAogcGFja2FnZSBncmVtbGluZ28KIAotY29uc3QgKAotCWJhc2VOYW1lc3BhY2UgICAgICAgICAgICAgICAgID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuIgotCWRlY29yYXRpb25OYW1lc3BhY2UgICAgICAgICAgID0gYmFzZU5hbWVzcGFjZSArICJkZWNvcmF0aW9uLiIKLQlmaW5hbGl6YXRpb25OYW1lc3BhY2UgICAgICAgICA9IGJhc2VOYW1lc3BhY2UgKyAiZmluYWxpemF0aW9uLiIKLQlvcHRpbWl6YXRpb25OYW1lc3BhY2UgICAgICAgICA9IGJhc2VOYW1lc3BhY2UgKyAib3B0aW1pemF0aW9uLiIKLQl2ZXJpZmljYXRpb25OYW1lc3BhY2UgICAgICAgICA9IGJhc2VOYW1lc3BhY2UgKyAidmVyaWZpY2F0aW9uLiIKLQljb21wdXRlckRlY29yYXRpb25OYW1lc3BhY2UgICA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uIgotCWNvbXB1dGVyVmVyaWZpY2F0aW9uTmFtZXNwYWNlID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLiIKLQkvLyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbgotCS8vIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uCi0JY29tcHV0ZXJGaW5hbGl6YXRpb25OYW1lc3BhY2UgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uIgotCWNvbXB1dGVyT3B0aW1pemF0aW9uTmFtZXNwYWNlID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLiIKLSkKLQogdHlwZSBUcmF2ZXJzYWxTdHJhdGVneSBpbnRlcmZhY2UgewogfQogCkBAIC00MiwxMiArMjgsMTcgQEAKIAlhcHBseSAgICAgICAgIGZ1bmMoZyBHcmFwaFRyYXZlcnNhbCkKIH0KIAorLy8gTmV3VHJhdmVyc2FsU3RyYXRlZ3kgY3JlYXRlcyBhIG5ldyBzdHJhdGVneSB3aXRoIGN1c3RvbSBuYW1lIGFuZCBjb25maWcKK2Z1bmMgTmV3VHJhdmVyc2FsU3RyYXRlZ3kobmFtZSBzdHJpbmcsIGNvbmZpZ3VyYXRpb24gbWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgVHJhdmVyc2FsU3RyYXRlZ3kgeworCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogbmFtZSwgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvbn0KK30KKwogLy8gRGVjb3JhdGlvbiBzdHJhdGVnaWVzCiAKIC8vIENvbm5lY3RpdmVTdHJhdGVneSByZXdyaXRlcyB0aGUgYmluYXJ5IGNvbmp1bmN0aW9uIGZvcm0gb2YgYS5BbmQoKS5iIGludG8gYSBBbmRTdGVwIG9mCiAvLyBBbmQoYSxiKSAobGlrZXdpc2UgZm9yIE9yU3RlcCkuCiBmdW5jIENvbm5lY3RpdmVTdHJhdGVneSgpIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IGRlY29yYXRpb25OYW1lc3BhY2UgKyAiQ29ubmVjdGl2ZVN0cmF0ZWd5In0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJDb25uZWN0aXZlU3RyYXRlZ3kifQogfQogCiAvLyBFbGVtZW50SWRTdHJhdGVneSBwcm92aWRlcyBhIGRlZ3JlZSBvZiBjb250cm9sIG92ZXIgZWxlbWVudCBpZGVudGlmaWVyIGFzc2lnbm1lbnQgYXMgc29tZSBHcmFwaHMgZG9uJ3QgcHJvdmlkZQpAQCAtNTUsNyArNDYsNyBAQAogLy8gdW5kZXIgdGhlIGhvb2QsIHRodXMgc2ltdWxhdGluZyB0aGF0IGNhcGFiaWxpdHkuCiAvLyBCeSBkZWZhdWx0LCB3aGVuIGFuIGlkZW50aWZpZXIgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZSB1c2VyLCBuZXdseSBnZW5lcmF0ZWQgaWRlbnRpZmllcnMgYXJlIFVVSUQgb2JqZWN0cy4KIGZ1bmMgRWxlbWVudElkU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBkZWNvcmF0aW9uTmFtZXNwYWNlICsgIkVsZW1lbnRJZFN0cmF0ZWd5In0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJFbGVtZW50SWRTdHJhdGVneSJ9CiB9CiAKIGZ1bmMgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koY29uZmlnIC4uLkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5Q29uZmlnKSBUcmF2ZXJzYWxTdHJhdGVneSB7CkBAIC02NSw3ICs1Niw3IEBACiAJCQljb25maWdNYXBbImhhbHRlZFRyYXZlcnNlckZhY3RvcnkiXSA9IGNvbmZpZ1swXS5IYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5CiAJCX0KIAl9Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBkZWNvcmF0aW9uTmFtZXNwYWNlICsgIkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnTWFwfQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnTWFwfQogfQogCiAvLyBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneUNvbmZpZyBwcm92aWRlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5LgpAQCAtODMsOCArNzQsNyBAQAogCWlmIGxlbihvcHRpb25zKSA+IDAgewogCQlvcHRzTWFwID0gb3B0aW9uc1swXQogCX0KLQotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogZGVjb3JhdGlvbk5hbWVzcGFjZSArICJPcHRpb25zU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBvcHRzTWFwfQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIk9wdGlvbnNTdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IG9wdHNNYXB9CiB9CiAKIC8vIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvbnMgdGhlIFZlcnRpY2VzLCBFZGdlcyBhbmQgVmVydGV4IHByb3BlcnRpZXMgb2YgYSBHcmFwaCBpbnRvIFN0cmluZyBuYW1lZApAQCAtMTAxLDcgKzkxLDcgQEAKIAlpZiBsZW4oY29uZmlnLlJlYWRQYXJ0aXRpb25zLlRvU2xpY2UoKSkgIT0gMCB7CiAJCWNvbmZpZ01hcFsicmVhZFBhcnRpdGlvbnMiXSA9IGNvbmZpZy5SZWFkUGFydGl0aW9ucwogCX0KLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IGRlY29yYXRpb25OYW1lc3BhY2UgKyAiUGFydGl0aW9uU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiUGFydGl0aW9uU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CiB9CiAKIC8vIFBhcnRpdGlvblN0cmF0ZWd5Q29uZmlnIHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUGFydGl0aW9uU3RyYXRlZ3kuCkBAIC0xMjUsOCArMTE1LDcgQEAKIAlpZiBsZW4oY29uZmlnKSA+IDAgewogCQljb25maWdNYXBbInNlZWQiXSA9IGNvbmZpZ1swXS5TZWVkCiAJfQotCi0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBkZWNvcmF0aW9uTmFtZXNwYWNlICsgIlNlZWRTdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ01hcH0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJTZWVkU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CiB9CiAKIC8vIFNlZWRTdHJhdGVneUNvbmZpZyBwcm92aWRlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNlZWRTdHJhdGVneS4gWmVyb2VkICh1bnNldCkgdmFsdWVzIGFyZSB1c2VkLgpAQCAtMTUxLDcgKzE0MCw3IEBACiAJaWYgY29uZmlnLkNoZWNrQWRqYWNlbnRWZXJ0aWNlcyAhPSBuaWwgewogCQljb25maWdNYXBbImNoZWNrQWRqYWNlbnRWZXJ0aWNlcyJdID0gY29uZmlnLkNoZWNrQWRqYWNlbnRWZXJ0aWNlcy4oYm9vbCkKIAl9Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBkZWNvcmF0aW9uTmFtZXNwYWNlICsgIlN1YmdyYXBoU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiU3ViZ3JhcGhTdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ01hcH0KIH0KIAogLy8gU3ViZ3JhcGhTdHJhdGVneUNvbmZpZyBwcm92aWRlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFN1YmdyYXBoU3RyYXRlZ3kuIFplcm9lZCAodW5zZXQpIHZhbHVlcyBhcmUgaWdub3JlZC4KQEAgLTE4Nyw4ICsxNzYsNyBAQAogCQkJY29uZmlnTWFwW2tdID0gdgogCQl9CiAJfQotCi0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBjb21wdXRlckRlY29yYXRpb25OYW1lc3BhY2UgKyAiVmVydGV4UHJvZ3JhbVN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnTWFwfQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIlZlcnRleFByb2dyYW1TdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ01hcH0KIH0KIAogLy8gVmVydGV4UHJvZ3JhbVN0cmF0ZWd5Q29uZmlnIHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LgpAQCAtMjEyLDggKzIwMCw3IEBACiAJCQljb25maWdNYXBbIm1hdGNoQWxnb3JpdGhtIl0gPSBjb25maWdbMF0uTWF0Y2hBbGdvcml0aG0KIAkJfQogCX0KLQotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogZmluYWxpemF0aW9uTmFtZXNwYWNlICsgIk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiTWF0Y2hBbGdvcml0aG1TdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ01hcH0KIH0KIAogLy8gTWF0Y2hBbGdvcml0aG1TdHJhdGVneUNvbmZpZyBwcm92aWRlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kuCkBAIC0yMjIsMjIgKzIwOSwzOCBAQAogCU1hdGNoQWxnb3JpdGhtIHN0cmluZwogfQogCi1mdW5jIFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSgpIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IGZpbmFsaXphdGlvbk5hbWVzcGFjZSArICJSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kifQorZnVuYyBSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kob3B0aW9ucyAuLi5tYXBbc3RyaW5nXWludGVyZmFjZXt9KSBUcmF2ZXJzYWxTdHJhdGVneSB7CisJY29uZmlnIDo9IG1ha2UobWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKKwlpZiBsZW4ob3B0aW9ucykgPiAwIHsKKwkJY29uZmlnID0gb3B0aW9uc1swXQorCX0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWd9CiB9CiAKLWZ1bmMgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSgpIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IGNvbXB1dGVyRmluYWxpemF0aW9uTmFtZXNwYWNlICsgIkNvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kifQorZnVuYyBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KG9wdGlvbnMgLi4ubWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgVHJhdmVyc2FsU3RyYXRlZ3kgeworCWNvbmZpZyA6PSBtYWtlKG1hcFtzdHJpbmddaW50ZXJmYWNle30pCisJaWYgbGVuKG9wdGlvbnMpID4gMCB7CisJCWNvbmZpZyA9IG9wdGlvbnNbMF0KKwl9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ30KIH0KIAotZnVuYyBQcm9maWxlU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBmaW5hbGl6YXRpb25OYW1lc3BhY2UgKyAiUHJvZmlsZVN0cmF0ZWd5In0KK2Z1bmMgUHJvZmlsZVN0cmF0ZWd5KG9wdGlvbnMgLi4ubWFwW3N0cmluZ11pbnRlcmZhY2V7fSkgVHJhdmVyc2FsU3RyYXRlZ3kgeworCWNvbmZpZyA6PSBtYWtlKG1hcFtzdHJpbmddaW50ZXJmYWNle30pCisJaWYgbGVuKG9wdGlvbnMpID4gMCB7CisJCWNvbmZpZyA9IG9wdGlvbnNbMF0KKwl9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiUHJvZmlsZVN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnfQogfQogCiAvLyBWZXJpZmljYXRpb24gc3RyYXRlZ2llcwogCi1mdW5jIENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiB2ZXJpZmljYXRpb25OYW1lc3BhY2UgKyAiQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSJ9CitmdW5jIENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kob3B0aW9ucyAuLi5tYXBbc3RyaW5nXWludGVyZmFjZXt9KSBUcmF2ZXJzYWxTdHJhdGVneSB7CisJY29uZmlnIDo9IG1ha2UobWFwW3N0cmluZ11pbnRlcmZhY2V7fSkKKwlpZiBsZW4ob3B0aW9ucykgPiAwIHsKKwkJY29uZmlnID0gb3B0aW9uc1swXQorCX0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnfQogfQogCiAvLyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSBkb2VzIG5vdCBhbGxvdyBFZGdlIHRyYXZlcnNhbCBzdGVwcyB0byBoYXZlIG5vIGxhYmVsIHNwZWNpZmllZC4KQEAgLTI1MCw3ICsyNTMsNyBAQAogCQljb25maWdNYXBbInRocm93RXhjZXB0aW9uIl0gPSBjb25maWdbMF0uVGhyb3dFeGNlcHRpb24KIAl9CiAKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IHZlcmlmaWNhdGlvbk5hbWVzcGFjZSArICJFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ01hcH0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSIsIGNvbmZpZ3VyYXRpb246IGNvbmZpZ01hcH0KIH0KIAogLy8gRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3lDb25maWcgcHJvdmlkZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneS4KQEAgLTI2NSwxMiArMjY4LDEyIEBACiAvLyBhYm91dCB0aGUgdHJhdmVyc2FsLiBUaGlzIHN0cmF0ZWd5IGlzIG5vdCBhY3RpdmF0ZWQgYnkgZGVmYXVsdC4gSG93ZXZlciwgZ3JhcGggc3lzdGVtIHByb3ZpZGVycyBtYXkgY2hvb3NlCiAvLyB0byBtYWtlIHRoaXMgYSBkZWZhdWx0IHN0cmF0ZWd5IGluIG9yZGVyIHRvIGVuc3VyZSB0aGVpciByZXNwZWN0aXZlIHN0cmF0ZWdpZXMgYXJlIGJldHRlciBhYmxlIHRvIG9wZXJhdGUuCiBmdW5jIExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiB2ZXJpZmljYXRpb25OYW1lc3BhY2UgKyAiTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSJ9CiB9CiAKIC8vIFJlYWRPbmx5U3RyYXRlZ3kgZGV0ZWN0cyBzdGVwcyBtYXJrZWQgd2l0aCBNdXRhdGluZyBhbmQgcmV0dXJucyBhbiBlcnJvciBpZiBvbmUgaXMgZm91bmQuCiBmdW5jIFJlYWRPbmx5U3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiB2ZXJpZmljYXRpb25OYW1lc3BhY2UgKyAiUmVhZE9ubHlTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiUmVhZE9ubHlTdHJhdGVneSJ9CiB9CiAKIC8vIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5IGRldGVjdHMgcHJvcGVydHkga2V5cyB0aGF0IHNob3VsZCBub3QgYmUgdXNlZCBieSB0aGUgdHJhdmVyc2FsLgpAQCAtMjg0LDcgKzI4Nyw3IEBACiAJCQljb25maWdNYXBbImtleXMiXSA9IGNvbmZpZ1swXS5LZXlzCiAJCX0KIAl9Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiB2ZXJpZmljYXRpb25OYW1lc3BhY2UgKyAiUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWdNYXB9CiB9CiAKIC8vIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5Q29uZmlnIHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kuCkBAIC0yOTYsMTEgKzI5OSwxMSBAQAogfQogCiBmdW5jIFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiB2ZXJpZmljYXRpb25OYW1lc3BhY2UgKyAiU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSJ9CiB9CiAKIGZ1bmMgVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBjb21wdXRlclZlcmlmaWNhdGlvbk5hbWVzcGFjZSArICJWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kifQogfQogCiAvLyBPcHRpbWl6YXRpb24gc3RyYXRlZ2llcwpAQCAtMzEzLDIwICszMTYsMjAgQEAKIC8vIHRoZSBWZXJ0ZXggb24gdGhlIG90aGVyIHNpZGUgb2YgYW4gRWRnZSkgY2FuIGJlIHNhdGlzZmllZCBieSB0cmlwcyB0byBpbmNpZGVudCBHcmFwaCBFbGVtZW50cyAoZS5nLiBqdXN0IHRoZSBFZGdlCiAvLyBpdHNlbGYpLgogZnVuYyBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IG9wdGltaXphdGlvbk5hbWVzcGFjZSArICJBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kifQogfQogCiAvLyBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5IGxvb2tzIGZvciBzdGFuZGFyZCB0cmF2ZXJzYWxzIGluIEJ5LW1vZHVsYXRvcnMgYW5kIHJlcGxhY2VzIHRoZW0gd2l0aCBtb3JlCiAvLyBvcHRpbWl6ZWQgdHJhdmVyc2FscyAoZS5nLiBUb2tlblRyYXZlcnNhbCkgaWYgcG9zc2libGUuCiBmdW5jIEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBvcHRpbWl6YXRpb25OYW1lc3BhY2UgKyAiQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSJ9CiB9CiAKIC8vIENvdW50U3RyYXRlZ3kgb3B0aW1pemVzIGFueSBvY2N1cnJlbmNlIG9mIENvdW50R2xvYmFsU3RlcCBmb2xsb3dlZCBieSBhbiBJc1N0ZXAgVGhlIGlkZWEgaXMgdG8gbGltaXQKIC8vIHRoZSBudW1iZXIgb2YgaW5jb21pbmcgZWxlbWVudHMgaW4gYSB3YXkgdGhhdCBpdCdzIGVub3VnaCBmb3IgdGhlIElzU3RlcCB0byBkZWNpZGUgd2hldGhlciBpdCBldmFsdWF0ZXMKIC8vIHRydWUgb3IgZmFsc2UuIElmIHRoZSB0cmF2ZXJzYWwgYWxyZWFkeSBjb250YWlucyBhIHVzZXIgc3VwcGxpZWQgbGltaXQsIHRoZSBzdHJhdGVneSB3b24ndCBtb2RpZnkgaXQuCiBmdW5jIENvdW50U3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBvcHRpbWl6YXRpb25OYW1lc3BhY2UgKyAiQ291bnRTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiQ291bnRTdHJhdGVneSJ9CiB9CiAKIC8vIEVhcmx5TGltaXRTdHJhdGVneSBsb29rcyBmb3IgUmFuZ2VHbG9iYWxTdGVwcyB0aGF0IGNhbiBiZSBtb3ZlZCBmdXJ0aGVyIGxlZnQgaW4gdGhlIHRyYXZlcnNhbCBhbmQgdGh1cyBiZSBhcHBsaWVkCkBAIC0zMzQsNyArMzM3LDcgQEAKIC8vIElmIHRoZSBsb2dpY2FsIGNvbnNlcXVlbmNlIG9mIG9uZSBvciBtdWx0aXBsZSBSYW5nZUdsb2JhbFN0ZXBzIGlzIGFuIGVtcHR5IHJlc3VsdCwgdGhlIHN0cmF0ZWd5IHdpbGwgcmVtb3ZlCiAvLyBhcyBtYW55IHN0ZXBzIGFzIHBvc3NpYmxlIGFuZCBhZGQgYSBOb25lU3RlcCBpbnN0ZWFkLgogZnVuYyBFYXJseUxpbWl0U3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBvcHRpbWl6YXRpb25OYW1lc3BhY2UgKyAiRWFybHlMaW1pdFN0cmF0ZWd5In0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJFYXJseUxpbWl0U3RyYXRlZ3kifQogfQogCiAvLyBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgcmVvcmRlcnMgZmlsdGVyLSBhbmQgb3JkZXItc3RlcHMgYWNjb3JkaW5nIHRvIHRoZWlyIHJhbmsuIFN0ZXAgcmFua3MgYXJlIGRlZmluZWQgd2l0aGluCkBAIC0zNDIsMTggKzM0NSwxOCBAQAogLy8gcHVzaCBzdGVwIGxhYmVscyBhcyBmYXIgInJpZ2h0IiBhcyBwb3NzaWJsZSBpbiBvcmRlciB0byBrZWVwIFRyYXZlcnNlcnMgYXMgc21hbGwgYW5kIGJ1bGthYmxlIGFzIHBvc3NpYmxlIHByaW9yIHRvCiAvLyB0aGUgYWJzb2x1dGUgbmVlZCBmb3IgUGF0aC1sYWJlbGluZy4KIGZ1bmMgRmlsdGVyUmFua2luZ1N0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIkZpbHRlclJhbmtpbmdTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiRmlsdGVyUmFua2luZ1N0cmF0ZWd5In0KIH0KIAogZnVuYyBHcmFwaEZpbHRlclN0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogY29tcHV0ZXJPcHRpbWl6YXRpb25OYW1lc3BhY2UgKyAiR3JhcGhGaWx0ZXJTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiR3JhcGhGaWx0ZXJTdHJhdGVneSJ9CiB9CiAKIC8vIElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5IGxvb2tzIGZvciBJZGVudGl0eVN0ZXAgaW5zdGFuY2VzIGFuZCByZW1vdmVzIHRoZW0uCiAvLyBJZiB0aGUgaWRlbnRpdHkgc3RlcCBpcyBsYWJlbGVkLCBpdHMgbGFiZWxzIGFyZSBhZGRlZCB0byB0aGUgcHJldmlvdXMgc3RlcC4KIC8vIElmIHRoZSBpZGVudGl0eSBzdGVwIGlzIGxhYmVsZWQgYW5kIGl0J3MgdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIHRyYXZlcnNhbCwgaXQgc3RheXMuCiBmdW5jIElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIklkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5In0KKwlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6ICJJZGVudGl0eVJlbW92YWxTdHJhdGVneSJ9CiB9CiAKIC8vIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5IGxvb2tzIGZvciAuT3V0RSgpLkluVigpLCAuSW5FKCkuT3V0VigpIGFuZCAuQm90aEUoKS5PdGhlclYoKQpAQCAtMzY0LDcgKzM2Nyw3IEBACiAvLwl0aGUgdHJhdmVyc2FsIGNvbnRhaW5zIGEgUGF0aCBzdGVwCiAvLwl0aGUgdHJhdmVyc2FsIGNvbnRhaW5zIGEgTGFtYmRhIHN0ZXAKIGZ1bmMgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBvcHRpbWl6YXRpb25OYW1lc3BhY2UgKyAiSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kifQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5In0KIH0KIAogLy8gSW5saW5lRmlsdGVyU3RyYXRlZ3kgYW5hbHl6ZXMgZmlsdGVyLXN0ZXBzIHdpdGggY2hpbGQgdHJhdmVyc2FscyB0aGF0IHRoZW1zZWx2ZXMgYXJlIHB1cmUgZmlsdGVycy4gSWYKQEAgLTM3Myw3ICszNzYsNyBAQAogLy8gYSBncmFwaCBwcm92aWRlciBtYXkgbmVlZCB0byByZWFzb24gYWJvdXQgd2hlbiB3cml0aW5nIHRoZWlyIG93biBzdHJhdGVnaWVzLiBBcyBhIHJlc3VsdCwgdGhpcyBzdHJhdGVneSBoZWxwcwogLy8gaW5jcmVhc2UgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIHByb3ZpZGVyJ3MgZmlsdGVyaW5nIG9wdGltaXphdGlvbiB3aWxsIHN1Y2NlZWQgYXQgcmUtd3JpdGluZyB0aGUgdHJhdmVyc2FsLgogZnVuYyBJbmxpbmVGaWx0ZXJTdHJhdGVneSgpIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IG9wdGltaXphdGlvbk5hbWVzcGFjZSArICJJbmxpbmVGaWx0ZXJTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiSW5saW5lRmlsdGVyU3RyYXRlZ3kifQogfQogCiAvLyBMYXp5QmFycmllclN0cmF0ZWd5IGlzIGFuIE9MVFAtb25seSBzdHJhdGVneSB0aGF0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhIE5vT3BCYXJyaWVyU3RlcCBhZnRlciBldmVyeQpAQCAtMzgxLDI1ICszODQsMjkgQEAKIC8vIHRyYXZlcnNhbCdzIGxhc3Qgc3RlcCBvciBhIGJhcnJpZXIuIE5vT3BCYXJyaWVyU3RlcHMgYWxsb3cgVHJhdmVyc2VycyB0byBiZSBidWxrZWQsIHRodXMgdGhpcyBzdHJhdGVneQogLy8gaXMgbWVhbnQgdG8gcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMgYW5kIGltcHJvdmUgdGhlIG92ZXJhbGwgcXVlcnkgcGVyZm9ybWFuY2UuCiBmdW5jIExhenlCYXJyaWVyU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBvcHRpbWl6YXRpb25OYW1lc3BhY2UgKyAiTGF6eUJhcnJpZXJTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiTGF6eUJhcnJpZXJTdHJhdGVneSJ9CiB9CiAKIC8vIE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kgd2lsbCBmb2xkIGFueSBwb3N0LVdoZXJlKCkgc3RlcCB0aGF0IG1haW50YWlucyBhIHRyYXZlcnNhbCBjb25zdHJhaW50IGludG8KIC8vIE1hdGNoKCkuIE1hdGNoU3RlcCBpcyBpbnRlbGxpZ2VudCB3aXRoIHRyYXZlcnNhbCBjb25zdHJhaW50IGFwcGxpY2F0aW9ucyBhbmQgdGh1cywgY2FuIG1vcmUKIC8vIGVmZmljaWVudGx5IHVzZSB0aGUgY29uc3RyYWludCBvZiBXaGVyZVRyYXZlcnNhbFN0ZXAgb3IgV2hlcmVQcmVkaWNhdGVTdGVwLgogZnVuYyBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIk1hdGNoUHJlZGljYXRlU3RyYXRlZ3kifQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIk1hdGNoUHJlZGljYXRlU3RyYXRlZ3kifQogfQogCi1mdW5jIE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3koKSBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0JcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiBjb21wdXRlck9wdGltaXphdGlvbk5hbWVzcGFjZSArICJNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5In0KK2Z1bmMgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneShvcHRpb25zIC4uLm1hcFtzdHJpbmddaW50ZXJmYWNle30pIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKwljb25maWcgOj0gbWFrZShtYXBbc3RyaW5nXWludGVyZmFjZXt9KQorCWlmIGxlbihvcHRpb25zKSA+IDAgeworCQljb25maWcgPSBvcHRpb25zWzBdCisJfQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIk1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kiLCBjb25maWd1cmF0aW9uOiBjb25maWd9CiB9CiAKIC8vIE9yZGVyTGltaXRTdHJhdGVneSBpcyBhbiBPTEFQIHN0cmF0ZWd5IHRoYXQgZm9sZHMgYSBSYW5nZUdsb2JhbFN0ZXAgaW50byBhIHByZWNlZGluZwogLy8gT3JkZXJHbG9iYWxTdGVwLiBUaGlzIGhlbHBzIHRvIGVsaW1pbmF0ZSB0cmF2ZXJzZXJzIGVhcmx5IGluIHRoZSB0cmF2ZXJzYWwgYW5kIGNhbgogLy8gc2lnbmlmaWNhbnRseSByZWR1Y2UgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIE9MQVAgZXhlY3V0aW9uIGVuZ2luZS4KIGZ1bmMgT3JkZXJMaW1pdFN0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIk9yZGVyTGltaXRTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiT3JkZXJMaW1pdFN0cmF0ZWd5In0KIH0KIAogLy8gUGF0aFByb2Nlc3NvclN0cmF0ZWd5ICBpcyBhbiBPTEFQIHN0cmF0ZWd5IHRoYXQgZG9lcyBpdHMgYmVzdCB0byB0dXJuIG5vbi1sb2NhbCBjaGlsZHJlbiBpbiBXaGVyZSgpCkBAIC00MDcsMTMgKzQxNCwxMyBAQAogLy8gUGF0aFByb2Nlc3NvclN0cmF0ZWd5IGhlbHBzIHRvIGVuc3VyZSB0aGF0IG1vcmUgdHJhdmVyc2FscyBtZWV0IHRoZSBsb2NhbCBjaGlsZCBjb25zdHJhaW50IGltcG9zZWQKIC8vIG9uIE9MQVAgdHJhdmVyc2Fscy4KIGZ1bmMgUGF0aFByb2Nlc3NvclN0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIlBhdGhQcm9jZXNzb3JTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiUGF0aFByb2Nlc3NvclN0cmF0ZWd5In0KIH0KIAogLy8gUGF0aFJldHJhY3Rpb25TdHJhdGVneSB3aWxsIHJlbW92ZSBQYXRocyBmcm9tIHRoZSBUcmF2ZXJzZXJzIGFuZCBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBidWxraW5nCiAvLyBhcyBQYXRoIGRhdGEgaXMgbm90IHJlcXVpcmVkIGFmdGVyIFNlbGVjdCgnYicpLgogZnVuYyBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KCkgVHJhdmVyc2FsU3RyYXRlZ3kgewotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kifQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kifQogfQogCiAvLyBQcm9kdWN0aXZlQnlTdHJhdGVneSB0YWtlcyBhbiBhcmd1bWVudCBvZiBCeSgpIGFuZCB3cmFwcyBpdCBDb2FsZXNjZVN0ZXAgc28gdGhhdCB0aGUgcmVzdWx0IGlzIGVpdGhlcgpAQCAtNDI2LDcgKzQzMyw3IEBACiAJCWNvbmZpZ01hcFsicHJvZHVjdGl2ZUtleXMiXSA9IGNvbmZpZ1swXS5Qcm9kdWN0aXZlS2V5cwogCX0KIAotCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogb3B0aW1pemF0aW9uTmFtZXNwYWNlICsgIlByb2R1Y3RpdmVCeVN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnTWFwfQorCXJldHVybiAmdHJhdmVyc2FsU3RyYXRlZ3l7bmFtZTogIlByb2R1Y3RpdmVCeVN0cmF0ZWd5IiwgY29uZmlndXJhdGlvbjogY29uZmlnTWFwfQogfQogCiAvLyBQcm9kdWN0aXZlQnlTdHJhdGVneUNvbmZpZyBwcm92aWRlcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFByb2R1Y3RpdmVCeVN0cmF0ZWd5LgpAQCAtNDQzLDcgKzQ1MCw3IEBACiAvLwlMb29wc1N0ZXAKIC8vCUxhbWJkYUhvbGRlcgogZnVuYyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLQlyZXR1cm4gJnRyYXZlcnNhbFN0cmF0ZWd5e25hbWU6IG9wdGltaXphdGlvbk5hbWVzcGFjZSArICJSZXBlYXRVbnJvbGxTdHJhdGVneSJ9CisJcmV0dXJuICZ0cmF2ZXJzYWxTdHJhdGVneXtuYW1lOiAiUmVwZWF0VW5yb2xsU3RyYXRlZ3kifQogfQogCiAvLyBSZW1vdGVTdHJhdGVneSByZWNvbnN0cnVjdHMgYSBUcmF2ZXJzYWwgYnkgYXBwZW5kaW5nIGEgUmVtb3RlU3RlcCB0byBpdHMgZW5kLiBUaGF0IHN0ZXAgd2lsbCBzdWJtaXQgdGhlIFRyYXZlcnNhbCB0bwpAQCAtNDU1LDcgKzQ2Miw3IEBACiAJCQlyZXR1cm4KIAkJfQogCi0JCXJzLCBlcnIgOj0gY29ubmVjdGlvbi5zdWJtaXRCeXRlY29kZShnLkJ5dGVjb2RlKQorCQlycywgZXJyIDo9IGNvbm5lY3Rpb24uc3VibWl0R3JlbWxpbkxhbmcoZy5HcmVtbGluTGFuZykKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlyZXR1cm4KIAkJfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvc3RyYXRlZ2llc190ZXN0LmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvc3RyYXRlZ2llc190ZXN0LmdvCmluZGV4IDQ5NDZhNzQuLjI3ZGYzMmUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3N0cmF0ZWdpZXNfdGVzdC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci9zdHJhdGVnaWVzX3Rlc3QuZ28KQEAgLTIxLDE2ICsyMSwxNiBAQAogCiBpbXBvcnQgKAogCSJjcnlwdG8vdGxzIgorCSJzdHJpbmdzIgogCSJ0ZXN0aW5nIgogCiAJImdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeS9hc3NlcnQiCiApCiAKLWZ1bmMgZ2V0TW9kZXJuR3JhcGgodCAqdGVzdGluZy5ULCB1cmwgc3RyaW5nLCBhdXRoIEF1dGhJbmZvUHJvdmlkZXIsIHRscyAqdGxzLkNvbmZpZykgKkdyYXBoVHJhdmVyc2FsU291cmNlIHsKK2Z1bmMgZ2V0TW9kZXJuR3JhcGgodCAqdGVzdGluZy5ULCB1cmwgc3RyaW5nLCB0bHMgKnRscy5Db25maWcpICpHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CiAJcmVtb3RlLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbih1cmwsCiAJCWZ1bmMoc2V0dGluZ3MgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb25TZXR0aW5ncykgewogCQkJc2V0dGluZ3MuVGxzQ29uZmlnID0gdGxzCi0JCQlzZXR0aW5ncy5BdXRoSW5mbyA9IGF1dGgKIAkJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9IHRlc3RTZXJ2ZXJNb2Rlcm5HcmFwaEFsaWFzCiAJCX0pCiAJYXNzZXJ0Lk5pbCh0LCBlcnIpCkBAIC00NCw3ICs0NCw3IEBACiAJdGVzdE5vQXV0aFVybCA6PSBnZXRFbnZPckRlZmF1bHRTdHJpbmcoIkdSRU1MSU5fU0VSVkVSX1VSTCIsIG5vQXV0aFVybCkKIAogCXQuUnVuKCJUZXN0IHJlYWQgd2l0aCBDb25uZWN0aXZlU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY291bnQsIGVyciA6PSBnLldpdGhTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSgpKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtNTcsNyArNTcsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggT3B0aW9uc1N0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kobWFwW3N0cmluZ11pbnRlcmZhY2V7fXsiYSI6ICJiIn0pKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtNzAsNyArNzAsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggUGFydGl0aW9uU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY29uZmlnIDo9IFBhcnRpdGlvblN0cmF0ZWd5Q29uZmlnewpAQCAtODksNyArODksNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggU2VlZFN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvbmZpZyA6PSBTZWVkU3RyYXRlZ3lDb25maWd7U2VlZDogMX0KQEAgLTEwMyw3ICsxMDMsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggU3ViZ3JhcGhTdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAkJY29uZmlnIDo9IFN1YmdyYXBoU3RyYXRlZ3lDb25maWd7CiAJCQlWZXJ0aWNlczogICAgICAgICAgICAgIFRfXy5IYXNMYWJlbCh0ZXN0TGFiZWwpLApAQCAtMTIwLDIzICsxMjAsMTYgQEAKIAkJYXNzZXJ0LkVxdWFsKHQsIGludDMyKDApLCB2YWwpCiAJfSkKIAotCXQuUnVuKCJUZXN0IEJ5dGVjb2RlIGdlbmVyYXRpb24gZm9yIE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQotCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQorCXQuUnVuKCJUZXN0IEdyZW1saW5MYW5nIGdlbmVyYXRpb24gZm9yIE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlnIDo9IE5ld0dyYXBoVHJhdmVyc2FsU291cmNlKG5pbCwgbmlsKQogCiAJCWNvbmZpZyA6PSBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5Q29uZmlne01hdGNoQWxnb3JpdGhtOiAiZ3JlZWR5In0KLQkJYnl0ZWNvZGUgOj0gZy5XaXRoU3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KGNvbmZpZykpLmJ5dGVjb2RlCi0JCWFzc2VydC5FcXVhbCh0LCAxLCBsZW4oYnl0ZWNvZGUuc291cmNlSW5zdHJ1Y3Rpb25zKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIDEsIGxlbihieXRlY29kZS5zb3VyY2VJbnN0cnVjdGlvbnNbMF0uYXJndW1lbnRzKSkKLQkJYXNzZXJ0LkVxdWFsKHQsICJ3aXRoU3RyYXRlZ2llcyIsIGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9uc1swXS5vcGVyYXRvcikKLQkJYXNzZXJ0LkVxdWFsKHQsICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5NYXRjaEFsZ29yaXRobVN0cmF0ZWd5IiwKLQkJCWJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9uc1swXS5hcmd1bWVudHNbMF0uKCp0cmF2ZXJzYWxTdHJhdGVneSkubmFtZSkKLQkJYXNzZXJ0LkVxdWFsKHQsIG1hcFtzdHJpbmddaW50ZXJmYWNle317Im1hdGNoQWxnb3JpdGhtIjogImdyZWVkeSJ9LAotCQkJYnl0ZWNvZGUuc291cmNlSW5zdHJ1Y3Rpb25zWzBdLmFyZ3VtZW50c1swXS4oKnRyYXZlcnNhbFN0cmF0ZWd5KS5jb25maWd1cmF0aW9uKQorCQlnbCA6PSBnLldpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3koY29uZmlnKSkuZ3JlbWxpbkxhbmcKKwkJYXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhnbC5HZXRHcmVtbGluKCksICJ3aXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hBbGdvcml0aG1TdHJhdGVneShtYXRjaEFsZ29yaXRobTpcImdyZWVkeVwiKSkiKSkKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtMTQ5LDcgKzE0Miw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IHJlYWQgd2l0aCBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KCkpLlYoKS5Db3VudCgpLlRvTGlzdCgpCkBAIC0xNjIsNyArMTU1LDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIENvdW50U3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY291bnQsIGVyciA6PSBnLldpdGhTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTE3NSw3ICsxNjgsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggRWFybHlMaW1pdFN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTE4OCw3ICsxODEsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggRmlsdGVyUmFua2luZ1N0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTIwMSw3ICsxOTQsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY291bnQsIGVyciA6PSBnLldpdGhTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KCkpLlYoKS5Db3VudCgpLlRvTGlzdCgpCkBAIC0yMTQsNyArMjA3LDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtMjI3LDcgKzIyMCw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IHJlYWQgd2l0aCBJbmxpbmVGaWx0ZXJTdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQljb3VudCwgZXJyIDo9IGcuV2l0aFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTI0MCw3ICsyMzMsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggTGF6eUJhcnJpZXJTdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQljb3VudCwgZXJyIDo9IGcuV2l0aFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSgpKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtMjUzLDcgKzI0Niw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IHJlYWQgd2l0aCBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KCkpLlYoKS5Db3VudCgpLlRvTGlzdCgpCkBAIC0yNjYsNyArMjU5LDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIE9yZGVyTGltaXRTdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQljb3VudCwgZXJyIDo9IGcuV2l0aFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KCkpLlYoKS5Db3VudCgpLlRvTGlzdCgpCkBAIC0yNzksNyArMjcyLDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIFBhdGhQcm9jZXNzb3JTdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQljb3VudCwgZXJyIDo9IGcuV2l0aFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KCkpLlYoKS5Db3VudCgpLlRvTGlzdCgpCkBAIC0yOTIsNyArMjg1LDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY291bnQsIGVyciA6PSBnLldpdGhTdHJhdGVnaWVzKFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTMwNSw3ICsyOTgsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY29uZmlnIDo9IFByb2R1Y3RpdmVCeVN0cmF0ZWd5Q29uZmlne1Byb2R1Y3RpdmVLZXlzOiBbXXN0cmluZ3siYSIsICJiIn19CkBAIC0zMTksNyArMzEyLDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIFJlcGVhdFVucm9sbFN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtMzMyLDcgKzMyNSw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IHJlYWQgd2l0aCBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQljb25maWcgOj0gRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3lDb25maWd7CkBAIC0zNDksNyArMzQyLDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY291bnQsIGVyciA6PSBnLldpdGhTdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTM2Miw3ICszNTUsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCByZWFkIHdpdGggVGVzdFJlYWRPbmx5U3RyYXRlZ3kiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZBdXRoSW5mb3t9LCAmdGxzLkNvbmZpZ3t9KQorCQlnIDo9IGdldE1vZGVybkdyYXBoKHQsIHRlc3ROb0F1dGhVcmwsICZ0bHMuQ29uZmlne30pCiAJCWRlZmVyIGcucmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCiAKIAkJY291bnQsIGVyciA6PSBnLldpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLkNvdW50KCkuVG9MaXN0KCkKQEAgLTM3NSw3ICszNjgsNyBAQAogCX0pCiAKIAl0LlJ1bigiVGVzdCB3cml0ZSB3aXRoIFRlc3RSZWFkT25seVN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCXByb21pc2UgOj0gZy5XaXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLkFkZFYoInBlcnNvbiIpLlByb3BlcnR5KCJuYW1lIiwgImZvbyIpLkl0ZXJhdGUoKQpAQCAtMzgzLDcgKzM3Niw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IHJlYWQgd2l0aCBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJkF1dGhJbmZve30sICZ0bHMuQ29uZmlne30pCisJCWcgOj0gZ2V0TW9kZXJuR3JhcGgodCwgdGVzdE5vQXV0aFVybCwgJnRscy5Db25maWd7fSkKIAkJZGVmZXIgZy5yZW1vdGVDb25uZWN0aW9uLkNsb3NlKCkKIAogCQljb25maWcgOj0gUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lDb25maWd7CkBAIC00MDIsNyArMzk1LDcgQEAKIAl9KQogCiAJdC5SdW4oIlRlc3QgcmVhZCB3aXRoIFJlcGVhdFVucm9sbFN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuQ291bnQoKS5Ub0xpc3QoKQpAQCAtNDE1LDcgKzQwOCw3IEBACiAJfSkKIAogCXQuUnVuKCJUZXN0IHdpdGhvdXQgc3RyYXRlZ2llcyBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5IiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmQXV0aEluZm97fSwgJnRscy5Db25maWd7fSkKKwkJZyA6PSBnZXRNb2Rlcm5HcmFwaCh0LCB0ZXN0Tm9BdXRoVXJsLCAmdGxzLkNvbmZpZ3t9KQogCQlkZWZlciBnLnJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQogCiAJCWNvdW50LCBlcnIgOj0gZy5XaXRob3V0U3RyYXRlZ2llcyhNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKS5Db3VudCgpLlRvTGlzdCgpCkBAIC00MjcsNCArNDIwLDI4IEBACiAJCWFzc2VydC5FcXVhbCh0LCBpbnQzMig2KSwgdmFsKQogCX0pCiAKKwl0LlJ1bigiVGVzdCBHcmVtbGluTGFuZyBnZW5lcmF0aW9uIGZvciBzaW1wbGUgY3VzdG9tIHN0cmF0ZWdpZXMiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCQlnIDo9IE5ld0dyYXBoVHJhdmVyc2FsU291cmNlKG5pbCwgbmlsKQorCisJCWN1c3RvbVN0cmF0ZWd5IDo9IE5ld1RyYXZlcnNhbFN0cmF0ZWd5KCJDdXN0b21TaW5nbGV0b25TdHJhdGVneSIsIG5pbCkKKwkJZ2wgOj0gZy5XaXRoU3RyYXRlZ2llcyhjdXN0b21TdHJhdGVneSkuZ3JlbWxpbkxhbmcKKwkJYXNzZXJ0LlRydWUodCwgc3RyaW5ncy5Db250YWlucyhnbC5HZXRHcmVtbGluKCksICJ3aXRoU3RyYXRlZ2llcyhDdXN0b21TaW5nbGV0b25TdHJhdGVneSkiKSkKKwl9KQorCisJdC5SdW4oIlRlc3QgR3JlbWxpbkxhbmcgZ2VuZXJhdGlvbiBmb3IgY29uZmlnIGN1c3RvbSBzdHJhdGVnaWVzIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKKwkJZyA6PSBOZXdHcmFwaFRyYXZlcnNhbFNvdXJjZShuaWwsIG5pbCkKKworCQljdXN0b21TdHJhdGVneSA6PSBOZXdUcmF2ZXJzYWxTdHJhdGVneSgiQ3VzdG9tQ29uZmlndXJhYmxlU3RyYXRlZ3kiLAorCQkJbWFwW3N0cmluZ11pbnRlcmZhY2V7fXsic3RyaW5nS2V5IjogInN0cmluZyB2YWx1ZSIsICJpbnRLZXkiOiA1LCAiYm9vbGVhbktleSI6IHRydWV9KQorCQlnbCA6PSBnLldpdGhTdHJhdGVnaWVzKGN1c3RvbVN0cmF0ZWd5KS5ncmVtbGluTGFuZworCQkvLyBOb3RlIHRoYXQgY29uZmlnIG1hcCBkb2Vzbid0IGd1YXJhbnRlZSBvcmRlciwgc28gYXNzZXJ0IGluZGl2aWR1YWxseQorCQlhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkNvbnRhaW5zKGdsLkdldEdyZW1saW4oKSwKKwkJCSJ3aXRoU3RyYXRlZ2llcyhuZXcgQ3VzdG9tQ29uZmlndXJhYmxlU3RyYXRlZ3koIikpCisJCWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoZ2wuR2V0R3JlbWxpbigpLAorCQkJInN0cmluZ0tleTpcInN0cmluZyB2YWx1ZVwiIikpCisJCWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoZ2wuR2V0R3JlbWxpbigpLAorCQkJImludEtleTo1IikpCisJCWFzc2VydC5UcnVlKHQsIHN0cmluZ3MuQ29udGFpbnMoZ2wuR2V0R3JlbWxpbigpLAorCQkJImJvb2xlYW5LZXk6dHJ1ZSIpKQorCX0pCiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci90cmFuc2xhdG9yLmdvIGIvZ3JlbWxpbi1nby9kcml2ZXIvdHJhbnNsYXRvci5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI5MmQ2OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci90cmFuc2xhdG9yLmdvCisrKyAvZGV2L251bGwKQEAgLTEsMzY1ICswLDAgQEAKLS8qCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1wYWNrYWdlIGdyZW1saW5nbwotCi1pbXBvcnQgKAotCSJmbXQiCi0JInJlZmxlY3QiCi0JInN0cmluZ3MiCi0JInRpbWUiCi0pCi0KLXR5cGUgVHJhbnNsYXRvciBpbnRlcmZhY2UgewotCVRyYW5zbGF0ZShieXRlY29kZSAqQnl0ZWNvZGUpIChzdHJpbmcsIGVycm9yKQotfQotCi10eXBlIHRyYW5zbGF0b3Igc3RydWN0IHsKLQlzb3VyY2Ugc3RyaW5nCi19Ci0KLWZ1bmMgTmV3VHJhbnNsYXRvcihzb3VyY2Ugc3RyaW5nKSBUcmFuc2xhdG9yIHsKLQlyZXR1cm4gJnRyYW5zbGF0b3J7c291cmNlfQotfQotCi1mdW5jICh0ICp0cmFuc2xhdG9yKSBUcmFuc2xhdGUoYnl0ZWNvZGUgKkJ5dGVjb2RlKSAoc3RyaW5nLCBlcnJvcikgewotCXJldHVybiB0LnRyYW5zbGF0ZShieXRlY29kZSwgdHJ1ZSkKLX0KLQotZnVuYyAodCAqdHJhbnNsYXRvcikgdHJhbnNsYXRlKGJ5dGVjb2RlICpCeXRlY29kZSwgaW5pdGlhbCBib29sKSAoc3RyaW5nLCBlcnJvcikgewotCXRyYW5zbGF0ZWQgOj0gIiIKLQotCWlmIGluaXRpYWwgewotCQl0cmFuc2xhdGVkICs9IHQuc291cmNlCi0JCWFwcGVuZERvdCgmdHJhbnNsYXRlZCkKLQl9Ci0KLQlmb3IgXywgaW5zdHJ1Y3Rpb24gOj0gcmFuZ2UgYnl0ZWNvZGUuc291cmNlSW5zdHJ1Y3Rpb25zIHsKLQkJaWYgbGVuKGluc3RydWN0aW9uLmFyZ3VtZW50cykgPT0gMCB7Ci0JCQljb250aW51ZQotCQl9Ci0KLQkJYXBwZW5kRG90KCZ0cmFuc2xhdGVkKQotCi0JCXRyYW5zbGF0ZWRJbnN0cnVjdGlvbiwgZXJyIDo9IHQudHJhbnNsYXRlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuICIiLCBlcnIKLQkJfQotCQl0cmFuc2xhdGVkICs9IHRyYW5zbGF0ZWRJbnN0cnVjdGlvbgotCX0KLQotCWFwcGVuZERvdCgmdHJhbnNsYXRlZCkKLQotCWZvciBfLCBpbnN0cnVjdGlvbiA6PSByYW5nZSBieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zIHsKLQotCQlhcHBlbmREb3QoJnRyYW5zbGF0ZWQpCi0KLQkJdHJhbnNsYXRlZEluc3RydWN0aW9uLCBlcnIgOj0gdC50cmFuc2xhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbikKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gIiIsIGVycgotCQl9Ci0JCXRyYW5zbGF0ZWQgKz0gdHJhbnNsYXRlZEluc3RydWN0aW9uCi0JfQotCi0JcmV0dXJuIHRyYW5zbGF0ZWQsIG5pbAotfQotCi1mdW5jICh0ICp0cmFuc2xhdG9yKSB0cmFuc2xhdGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgKHN0cmluZywgZXJyb3IpIHsKLQlpbnN0cnVjdGlvblN0cmluZyA6PSBmbXQuU3ByaW50ZigiJXYoIiwgaW5zdHJ1Y3Rpb24ub3BlcmF0b3IpCi0KLQlmb3IgaW5kZXgsIGFyZyA6PSByYW5nZSBpbnN0cnVjdGlvbi5hcmd1bWVudHMgewotCQlpZiBpbmRleCA+IDAgewotCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIiwiCi0JCX0KLQotCQlpZiBpbnN0cnVjdGlvbi5vcGVyYXRvciA9PSAid2l0aCIgewotCQkJc3dpdGNoIHYgOj0gYXJnLih0eXBlKSB7Ci0JCQljYXNlIGludDMyLCBzdHJpbmc6Ci0JCQkJdHJhbnNsYXRlZEFyZywgZXJyIDo9IHQudHJhbnNsYXRlV2l0aE9wdGlvbnModikKLQkJCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQkJcmV0dXJuICIiLCBlcnIKLQkJCQl9Ci0JCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gdHJhbnNsYXRlZEFyZwotCQkJCWNvbnRpbnVlCi0JCQl9Ci0JCX0KLQotCQlhcmdTdHJpbmcsIGVyciA6PSB0LnRvU3RyaW5nKGFyZykKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gIiIsIGVycgotCQl9Ci0JCWluc3RydWN0aW9uU3RyaW5nICs9IGFyZ1N0cmluZwotCi0JfQotCi0JaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIikiCi0KLQlyZXR1cm4gaW5zdHJ1Y3Rpb25TdHJpbmcsIG5pbAotfQotCi1mdW5jICh0ICp0cmFuc2xhdG9yKSB0cmFuc2xhdGVXaXRoT3B0aW9ucyhhcmcgaW50ZXJmYWNle30pIChzdHJpbmcsIGVycm9yKSB7Ci0JaWYgZ3Jvb3Z5V2l0aE9wdGlvbnNbYXJnXSAhPSAiIiB7Ci0JCXJldHVybiBncm9vdnlXaXRoT3B0aW9uc1thcmddLCBuaWwKLQl9Ci0KLQlyZXR1cm4gdC50b1N0cmluZyhhcmcpCi19Ci0KLWZ1bmMgKHQgKnRyYW5zbGF0b3IpIHRyYW5zbGF0ZU1hcChhcmcgaW50ZXJmYWNle30sIGlzQ2xhc3NQYXJhbXNNYXAgYm9vbCkgKHN0cmluZywgZXJyb3IpIHsKLQlpbnN0cnVjdGlvblN0cmluZyA6PSAiIgotCWl0ZXIgOj0gcmVmbGVjdC5WYWx1ZU9mKGFyZykuTWFwUmFuZ2UoKQotCi0JaW5kZXggOj0gMAotCWZvciBpdGVyLk5leHQoKSB7Ci0JCWlmIGluZGV4ID09IDAgJiYgIWlzQ2xhc3NQYXJhbXNNYXAgewotCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gInsiCi0JCX0KLQotCQlrIDo9IGl0ZXIuS2V5KCkuSW50ZXJmYWNlKCkKLQkJa1N0cmluZywgZXJyIDo9IHQudG9TdHJpbmcoaykKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gIiIsIGVycgotCQl9Ci0JCWlmIGlzQ2xhc3NQYXJhbXNNYXAgewotCQkJa1N0cmluZyA9IHN0cmluZ3MuUmVwbGFjZShrU3RyaW5nLCAiJyIsICIiLCAtMSkKLQkJfQotCQl2IDo9IGl0ZXIuVmFsdWUoKS5JbnRlcmZhY2UoKQotCQl2U3RyaW5nLCBlcnIgOj0gdC50b1N0cmluZyh2KQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiAiIiwgZXJyCi0JCX0KLQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gZm10LlNwcmludGYoIiV2OiV2Iiwga1N0cmluZywgdlN0cmluZykKLQotCQlpZiBpbmRleCA8IHJlZmxlY3QuVmFsdWVPZihhcmcpLkxlbigpLTEgewotCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIiwiCi0JCX0KLQotCQlpZiBpbmRleCA9PSByZWZsZWN0LlZhbHVlT2YoYXJnKS5MZW4oKS0xICYmICFpc0NsYXNzUGFyYW1zTWFwIHsKLQkJCWluc3RydWN0aW9uU3RyaW5nICs9ICJ9IgotCQl9Ci0JCWluZGV4KysKLQotCX0KLQotCXJldHVybiBpbnN0cnVjdGlvblN0cmluZywgbmlsCi19Ci0KLWZ1bmMgKHQgKnRyYW5zbGF0b3IpIHRyYW5zbGF0ZVNsaWNlKGFyZyBpbnRlcmZhY2V7fSkgKHN0cmluZywgZXJyb3IpIHsKLQlpbnN0cnVjdGlvblN0cmluZyA6PSAiWyIKLQlvbGRTbGljZSA6PSByZWZsZWN0LlZhbHVlT2YoYXJnKQotCWlmIG9sZFNsaWNlLkxlbigpID09IDAgewotCQlyZXR1cm4gIiIsIG5pbAotCX0KLQotCWZvciBpIDo9IDA7IGkgPCBvbGRTbGljZS5MZW4oKTsgaSsrIHsKLQkJaWYgaSA+IDAgewotCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIiwiCi0JCX0KLQkJaW5zdHJ1Y3Rpb25TdGVwU3RyaW5nLCBlcnIgOj0gdC50b1N0cmluZyhvbGRTbGljZS5JbmRleChpKS5JbnRlcmZhY2UoKSkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlyZXR1cm4gIiIsIGVycgotCQl9Ci0JCWluc3RydWN0aW9uU3RyaW5nICs9IGZtdC5TcHJpbnRmKCIldiIsIGluc3RydWN0aW9uU3RlcFN0cmluZykKLQl9Ci0JaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIl0iCi0KLQlyZXR1cm4gaW5zdHJ1Y3Rpb25TdHJpbmcsIG5pbAotfQotCi1mdW5jICh0ICp0cmFuc2xhdG9yKSB0cmFuc2xhdGVUZXh0UHJlZGljYXRlKHYgKnRleHRQKSAoc3RyaW5nLCBlcnJvcikgewotCWlmIHYub3BlcmF0b3IgPT0gIiIgfHwgbGVuKHYudmFsdWVzKSA9PSAwIHsKLQkJcmV0dXJuICIiLCBuaWwKLQl9Ci0KLQlpbnN0cnVjdGlvblN0cmluZyA6PSAiIgotCWluc3RydWN0aW9uU3RyaW5nICs9IHYub3BlcmF0b3IKLQlpbnN0cnVjdGlvblN0cmluZyArPSAiKCIKLQlpZiBsZW4odi52YWx1ZXMpID09IDEgewotCQlhcmdTdHJpbmcsIGVyciA6PSB0LnRvU3RyaW5nKHYudmFsdWVzWzBdKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCXJldHVybiAiIiwgZXJyCi0JCX0KLQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gYXJnU3RyaW5nCi0JfSBlbHNlIGlmIGxlbih2LnZhbHVlcykgPiAxIHsKLQkJZm9yIGluZGV4LCBhcmcgOj0gcmFuZ2Ugdi52YWx1ZXMgewotCQkJYXJnU3RyaW5nLCBlcnIgOj0gdC50b1N0cmluZyhhcmcpCi0JCQlpZiBlcnIgIT0gbmlsIHsKLQkJCQlyZXR1cm4gIiIsIGVycgotCQkJfQotCi0JCQlpbnN0cnVjdGlvblN0cmluZyArPSBhcmdTdHJpbmcKLQkJCWlmIGluZGV4IDwgbGVuKHYudmFsdWVzKS0xICYmIGFyZ1N0cmluZyAhPSAiIiB7Ci0JCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIiwiCi0JCQl9Ci0JCX0KLQl9Ci0KLQlpbnN0cnVjdGlvblN0cmluZyArPSAiKSIKLQotCXJldHVybiBpbnN0cnVjdGlvblN0cmluZywgbmlsCi19Ci0KLWZ1bmMgKHQgKnRyYW5zbGF0b3IpIHRyYW5zbGF0ZVByZWRpY2F0ZSh2ICpwKSAoc3RyaW5nLCBlcnJvcikgewotCi0JaWYgdi5vcGVyYXRvciA9PSAiIiB8fCBsZW4odi52YWx1ZXMpID09IDAgewotCQlyZXR1cm4gIiIsIG5pbAotCX0KLQotCWluc3RydWN0aW9uU3RyaW5nIDo9ICIiCi0JaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gdi5vcGVyYXRvcgotCWluc3RydWN0aW9uU3RyaW5nICs9ICIoIgotCWlmIGxlbih2LnZhbHVlcykgPT0gMSB7Ci0JCWFyZ1N0cmluZywgZXJyIDo9IHQudG9TdHJpbmcodi52YWx1ZXNbMF0pCi0JCWlmIGVyciAhPSBuaWwgewotCQkJcmV0dXJuICIiLCBlcnIKLQkJfQotCQlpbnN0cnVjdGlvblN0cmluZyArPSBhcmdTdHJpbmcKLQl9IGVsc2UgaWYgbGVuKHYudmFsdWVzKSA+IDEgewotCQlpZiB2Lm9wZXJhdG9yICE9ICJiZXR3ZWVuIiAmJiB2Lm9wZXJhdG9yICE9ICJpbnNpZGUiIHsKLQkJCWluc3RydWN0aW9uU3RyaW5nICs9ICJbIgotCQl9Ci0JCWZvciBpbmRleCwgYXJnIDo9IHJhbmdlIHYudmFsdWVzIHsKLQkJCWFyZ1N0cmluZywgZXJyIDo9IHQudG9TdHJpbmcoYXJnKQotCQkJaWYgZXJyICE9IG5pbCB7Ci0JCQkJcmV0dXJuICIiLCBlcnIKLQkJCX0KLQotCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gYXJnU3RyaW5nCi0JCQlpZiBpbmRleCA8IGxlbih2LnZhbHVlcyktMSAmJiBhcmdTdHJpbmcgIT0gIiIgewotCQkJCWluc3RydWN0aW9uU3RyaW5nICs9ICIsIgotCQkJfQotCQl9Ci0JCWlmIHYub3BlcmF0b3IgIT0gImJldHdlZW4iICYmIHYub3BlcmF0b3IgIT0gImluc2lkZSIgewotCQkJaW5zdHJ1Y3Rpb25TdHJpbmcgKz0gIl0iCi0JCX0KLQl9Ci0KLQlpbnN0cnVjdGlvblN0cmluZyArPSAiKSIKLQotCXJldHVybiBpbnN0cnVjdGlvblN0cmluZywgbmlsCi19Ci0KLWZ1bmMgKHQgKnRyYW5zbGF0b3IpIHRyYW5zbGF0ZVRyYXZlcnNhbFN0cmF0ZWd5KHYgKnRyYXZlcnNhbFN0cmF0ZWd5KSAoc3RyaW5nLCBlcnJvcikgewotCi0JaW5zdHJ1Y3Rpb25TdHJpbmcgOj0gIiIKLQljbGFzc05hbWUgOj0gZ2V0R3Jvb3Z5Q2xhc3NOYW1lKHYubmFtZSkKLQlpbnN0cnVjdGlvblN0cmluZyArPSBmbXQuU3ByaW50ZigibmV3ICV2KCIsIGNsYXNzTmFtZSkKLQlpbnN0cnVjdGlvbkNvbmZpZ3VyYXRpb25TdHJpbmcsIGVyciA6PSB0LnRyYW5zbGF0ZU1hcChpbnRlcmZhY2V7fSh2LmNvbmZpZ3VyYXRpb24pLCB0cnVlKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gIiIsIGVycgotCX0KLQlpbnN0cnVjdGlvblN0cmluZyArPSBpbnN0cnVjdGlvbkNvbmZpZ3VyYXRpb25TdHJpbmcKLQlpbnN0cnVjdGlvblN0cmluZyArPSAiKSIKLQotCXJldHVybiBpbnN0cnVjdGlvblN0cmluZywgbmlsCi0KLX0KLQotZnVuYyAodCAqdHJhbnNsYXRvcikgdG9TdHJpbmcoYXJnIGludGVyZmFjZXt9KSAoc3RyaW5nLCBlcnJvcikgewotCWlmIGFyZyA9PSBuaWwgewotCQlyZXR1cm4gIm51bGwiLCBuaWwKLQl9Ci0JcmVmbGVjdGVkQXJnIDo9IHJlZmxlY3QuVHlwZU9mKGFyZykKLQlzd2l0Y2ggcmVmbGVjdGVkQXJnLktpbmQoKSB7Ci0KLQljYXNlIHJlZmxlY3QuTWFwOgotCQlyZXR1cm4gdC50cmFuc2xhdGVNYXAoYXJnLCBmYWxzZSkKLQljYXNlIHJlZmxlY3QuU2xpY2U6Ci0JCXJldHVybiB0LnRyYW5zbGF0ZVNsaWNlKGFyZykKLQlkZWZhdWx0OgotCQlzd2l0Y2ggdiA6PSBhcmcuKHR5cGUpIHsKLQkJY2FzZSB3aXRoT3B0aW9uczoKLQkJCXsKLQkJCQlyZXR1cm4gZ3Jvb3Z5V2l0aE9wdGlvbnNbdl0sIG5pbAotCQkJfQotCQljYXNlIEFub255bW91c1RyYXZlcnNhbDoKLQkJY2FzZSAqQW5vbnltb3VzVHJhdmVyc2FsOgotCQkJcmV0dXJuIHQudG9TdHJpbmcoYXJnKQotCQljYXNlICpCaW5kaW5nOgotCQkJcmV0dXJuIHYuU3RyaW5nKCksIG5pbAotCQljYXNlIEdyYXBoVHJhdmVyc2FsOgotCQljYXNlICpHcmFwaFRyYXZlcnNhbDoKLQkJCXJldHVybiB0LnRyYW5zbGF0ZSh2LkJ5dGVjb2RlLCBmYWxzZSkKLQkJY2FzZSB0cmF2ZXJzYWxTdHJhdGVneToKLQkJY2FzZSAqdHJhdmVyc2FsU3RyYXRlZ3k6Ci0JCQlyZXR1cm4gdC50cmFuc2xhdGVUcmF2ZXJzYWxTdHJhdGVneSh2KQotCQljYXNlICpCeXRlY29kZToKLQkJCXJldHVybiB0LnRyYW5zbGF0ZSh2LCBmYWxzZSkKLQkJY2FzZSB0ZXh0UDoKLQkJY2FzZSAqdGV4dFA6Ci0JCQlyZXR1cm4gdC50cmFuc2xhdGVUZXh0UHJlZGljYXRlKHYpCi0JCWNhc2UgcDoKLQkJY2FzZSAqcDoKLQkJCXJldHVybiB0LnRyYW5zbGF0ZVByZWRpY2F0ZSh2KQotCQlkZWZhdWx0OgotCQkJewotCQkJCXN3aXRjaCB2IDo9IGFyZy4odHlwZSkgewotCQkJCWNhc2UgdGltZS5UaW1lOgotCQkJCQl7Ci0JCQkJCQlyZXR1cm4gdGltZVRvR3Jvb3Z5VGltZSh2KSwgbmlsCi0JCQkJCX0KLQkJCQljYXNlIHN0cmluZzoKLQkJCQkJewotCQkJCQkJcmV0dXJuIGZtdC5TcHJpbnRmKCInJXYnIiwgdiksIG5pbAotCQkJCQl9Ci0JCQkJZGVmYXVsdDoKLQkJCQkJewotCQkJCQkJcmV0dXJuIGZtdC5TcHJpbnRmKCIldiIsIHYpLCBuaWwKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAiIiwgbmlsCi0KLX0KLQotZnVuYyBhcHBlbmREb3QocyAqc3RyaW5nKSB7Ci0JaWYgbGVuKCpzKSA9PSAwIHsKLQkJcmV0dXJuCi0JfQotCi0JaWYgKCpzKVtsZW4oKnMpLTFdICE9ICcuJyB7Ci0JCSpzICs9ICIuIgotCX0KLX0KLQotZnVuYyBnZXRHcm9vdnlDbGFzc05hbWUoY2xhc3NQYXRoIHN0cmluZykgc3RyaW5nIHsKLQljbGFzc1BhdGhBcnJheSA6PSBzdHJpbmdzLlNwbGl0KGNsYXNzUGF0aCwgIi4iKQotCXJldHVybiBjbGFzc1BhdGhBcnJheVtsZW4oY2xhc3NQYXRoQXJyYXkpLTFdCi19Ci0KLWZ1bmMgdGltZVRvR3Jvb3Z5VGltZSh0IHRpbWUuVGltZSkgc3RyaW5nIHsKLQlyZXR1cm4gZm10LlNwcmludGYoIm5ldyBEYXRlKCV2LCV2LCV2LCV2LCV2LCV2KSIsIHQuWWVhcigpLTE5MDAsIGludCh0Lk1vbnRoKCkpLCB0LkRheSgpLCB0LkhvdXIoKSwgdC5NaW51dGUoKSwgdC5TZWNvbmQoKSkKLQotfQotCi12YXIgZ3Jvb3Z5V2l0aE9wdGlvbnMgbWFwW2FueV1zdHJpbmcgPSBtYXBbYW55XXN0cmluZ3sKLQlXaXRoT3B0aW9ucy5Ub2tlbnM6ICAiV2l0aE9wdGlvbnMudG9rZW5zIiwKLQlXaXRoT3B0aW9ucy5Ob25lOiAgICAiV2l0aE9wdGlvbnMubm9uZSIsCi0JV2l0aE9wdGlvbnMuSWRzOiAgICAgIldpdGhPcHRpb25zLmlkcyIsCi0JV2l0aE9wdGlvbnMuTGFiZWxzOiAgIldpdGhPcHRpb25zLmxhYmVscyIsCi0JV2l0aE9wdGlvbnMuS2V5czogICAgIldpdGhPcHRpb25zLmtleXMiLAotCVdpdGhPcHRpb25zLlZhbHVlczogICJXaXRoT3B0aW9ucy52YWx1ZXMiLAotCVdpdGhPcHRpb25zLkFsbDogICAgICJXaXRoT3B0aW9ucy5hbGwiLAotCVdpdGhPcHRpb25zLkluZGV4ZXI6ICJXaXRoT3B0aW9ucy5pbmRleGVyIiwKLQlXaXRoT3B0aW9ucy5MaXN0OiAgICAiV2l0aE9wdGlvbnMubGlzdCIsCi0JV2l0aE9wdGlvbnMuTWFwOiAgICAgIldpdGhPcHRpb25zLm1hcCIsCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci90cmFuc2xhdG9yX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci90cmFuc2xhdG9yX3Rlc3QuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYzcyOTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvdHJhbnNsYXRvcl90ZXN0LmdvCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi1vciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLWRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi1yZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi10byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0iTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi13aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1wYWNrYWdlIGdyZW1saW5nbwotCi1pbXBvcnQgKAotCSJyZWdleHAiCi0JInRlc3RpbmciCi0JInRpbWUiCi0pCi0KLWZ1bmMgVGVzdF90cmFuc2xhdG9yX1RyYW5zbGF0ZSh0ICp0ZXN0aW5nLlQpIHsKLQl0eXBlIHRlc3Qgc3RydWN0IHsKLQkJbmFtZSAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcKLQkJYXNzZXJ0ICAgICAgICAgICAgICAgICAgICBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwKLQkJZXF1YWxzICAgICAgICAgICAgICAgICAgICBzdHJpbmcKLQkJb25seSAgICAgICAgICAgICAgICAgICAgICBib29sCi0JCXNraXAgICAgICAgICAgICAgICAgICAgICAgYm9vbAotCQl3YW50RXJyICAgICAgICAgICAgICAgICAgIGJvb2wKLQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtcyBib29sCi0JfQotCXRlc3RzIDo9IFtddGVzdHsKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkgfSwKLQkJCWVxdWFsczogImcuVigpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCIxIiwgIjIiLCAiMyIsICI0IikgfSwKLQkJCWVxdWFsczogImcuVignMScsJzInLCczJywnNCcpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCIzIikuVmFsdWVNYXAodHJ1ZSkgfSwKLQkJCWVxdWFsczogImcuVignMycpLnZhbHVlTWFwKHRydWUpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkuQ29uc3RhbnQoNSkgfSwKLQkJCWVxdWFsczogImcuVigpLmNvbnN0YW50KDUpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgeyByZXR1cm4gZy5WKCkuQ29uc3RhbnQoMS41KSB9LAotCQkJZXF1YWxzOiAiZy5WKCkuY29uc3RhbnQoMS41KSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigpLkNvbnN0YW50KCJIZWxsbyIpIH0sCi0JCQllcXVhbHM6ICJnLlYoKS5jb25zdGFudCgnSGVsbG8nKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuTGltaXQoNSkgfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykubGltaXQoNSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7IHJldHVybiBnLlYoKS5IYXNMYWJlbChQLldpdGhpbigiYSIsICJiIiwgImMiKSkgfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKHdpdGhpbihbJ2EnLCdiJywnYyddKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IiwgImNvbnRpbmVudCIpLk91dCgpLkxpbWl0KDUpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnLCdjb250aW5lbnQnKS5vdXQoKS5saW1pdCg1KSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PdXQoKS5WYWx1ZXMoImNvZGUiKS5MaW1pdCg1KQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3V0KCkudmFsdWVzKCdjb2RlJykubGltaXQoNSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMyIpLkFzKCJhIikuT3V0KCJyb3V0ZSIpLkxpbWl0KDEwKS5XaGVyZShQLkVxKCJhIikpLkJ5KCJyZWdpb24iKQotCQkJfSwKLQkJCWVxdWFsczogImcuVignMycpLmFzKCdhJykub3V0KCdyb3V0ZScpLmxpbWl0KDEwKS53aGVyZShlcSgnYScpKS5ieSgncmVnaW9uJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uT3V0KCJyb3V0ZSIpLlNpbXBsZVBhdGgoKSkuVGltZXMoMikuUGF0aCgpLkJ5KCJjb2RlIikKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzMnKS5yZXBlYXQob3V0KCdyb3V0ZScpLnNpbXBsZVBhdGgoKSkudGltZXMoMikucGF0aCgpLmJ5KCdjb2RlJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3V0KCkuSGFzKCJyZWdpb24iLCAiVVMtVFgiKS5WYWx1ZXMoImNvZGUiKS5MaW1pdCg1KQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3V0KCkuaGFzKCdyZWdpb24nLCdVUy1UWCcpLnZhbHVlcygnY29kZScpLmxpbWl0KDUpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLlVuaW9uKFRfXy5WYWx1ZXMoImNpdHkiKSwgVF9fLlZhbHVlcygicmVnaW9uIikpLkxpbWl0KDUpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS51bmlvbih2YWx1ZXMoJ2NpdHknKSx2YWx1ZXMoJ3JlZ2lvbicpKS5saW1pdCg1KSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigiMyIpLkFzKCJhIikuT3V0KCJyb3V0ZSIsICJyb3V0ZXMiKSB9LAotCQkJZXF1YWxzOiAiZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJywncm91dGVzJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7IHJldHVybiBnLlYoKS5XaGVyZShUX18uVmFsdWVzKCJydW53YXlzIikuSXMoNSkpIH0sCi0JCQllcXVhbHM6ICJnLlYoKS53aGVyZSh2YWx1ZXMoJ3J1bndheXMnKS5pcyg1KSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5VbnRpbChUX18uSGFzKCJjb2RlIiwgIkFHUiIpKS5QYXRoKCkuQnkoImNvZGUiKS5MaW1pdCg1KQotCQkJfSwKLQkJCWVxdWFsczogImcuVignMycpLnJlcGVhdChvdXQoKS5zaW1wbGVQYXRoKCkpLnVudGlsKGhhcygnY29kZScsJ0FHUicpKS5wYXRoKCkuYnkoJ2NvZGUnKS5saW1pdCg1KSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3JkZXIoKS5CeShUX18uSWQoKSkgfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShpZCgpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsgcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuT3JkZXIoKS5CeShULklkKSB9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vcmRlcigpLmJ5KGlkKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5PcmRlcigpLkJ5KFRfXy5JZCgpLCBPcmRlci5EZXNjKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShpZCgpLGRlc2MpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLk9yZGVyKCkuQnkoImNvZGUiLCBPcmRlci5EZXNjKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieSgnY29kZScsZGVzYykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMSIsICIyIiwgIjMiKS5Mb2NhbChUX18uT3V0KCkuT3V0KCkuRGVkdXAoKS5Gb2xkKCkpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCcxJywnMicsJzMnKS5sb2NhbChvdXQoKS5vdXQoKS5kZWR1cCgpLmZvbGQoKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMyIpLk91dCgpLlBhdGgoKS5Db3VudChTY29wZS5Mb2NhbCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzMnKS5vdXQoKS5wYXRoKCkuY291bnQobG9jYWwpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLkUoKS5Db3VudCgpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5FKCkuY291bnQoKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCI1IikuT3V0RSgicm91dGUiKS5JblYoKS5QYXRoKCkuTGltaXQoMTApCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCc1Jykub3V0RSgncm91dGUnKS5pblYoKS5wYXRoKCkubGltaXQoMTApIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjUiKS5Qcm9wZXJ0eU1hcCgpLlNlbGVjdChDb2x1bW4uS2V5cykKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzUnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdChrZXlzKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCI1IikuUHJvcGVydHlNYXAoKS5TZWxlY3QoQ29sdW1uLlZhbHVlcykKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzUnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdCh2YWx1ZXMpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjMiKS5WYWx1ZXMoInJ1bndheXMiKS5NYXRoKCJfICsgMSIpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCczJykudmFsdWVzKCdydW53YXlzJykubWF0aCgnXyArIDEnKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCIzIikuRW1pdCgpLlJlcGVhdChUX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5UaW1lcygzKS5MaW1pdCg1KS5QYXRoKCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzMnKS5lbWl0KCkucmVwZWF0KG91dCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykubGltaXQoNSkucGF0aCgpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5NYXRjaChUX18uQXMoImEiKS5IYXMoImNvZGUiLCAiTEhSIikuQXMoImIiKSkuU2VsZWN0KCJiIikuQnkoImNvZGUiKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLm1hdGNoKGFzKCdhJykuaGFzKCdjb2RlJywnTEhSJykuYXMoJ2InKSkuc2VsZWN0KCdiJykuYnkoJ2NvZGUnKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJ0ZXN0LXVzaW5nLWtleXdvcmQtYXMtcHJvcGVydHkiLCAicmVwZWF0IikKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ3Rlc3QtdXNpbmcta2V5d29yZC1hcy1wcm9wZXJ0eScsJ3JlcGVhdCcpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjEiKS5BZGRFKCJ0ZXN0IikuVG8oVF9fLlYoIjQiKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzEnKS5hZGRFKCd0ZXN0JykudG8oVignNCcpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuVmFsdWVzKCJydW53YXlzIikuTWF4KCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5tYXgoKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuVmFsdWVzKCJydW53YXlzIikuTWluKCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5taW4oKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuVmFsdWVzKCJydW53YXlzIikuU3VtKCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5zdW0oKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuVmFsdWVzKCJydW53YXlzIikuTWVhbigpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkudmFsdWVzKCdydW53YXlzJykubWVhbigpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLldpdGhTYWNrKDApLlYoIjMiLCAiNSIpLlNhY2soT3BlcmF0b3IuU3VtKS5CeSgicnVud2F5cyIpLlNhY2soKQotCQkJfSwKLQkJCWVxdWFsczogImcud2l0aFNhY2soMCkuVignMycsJzUnKS5zYWNrKHN1bSkuYnkoJ3J1bndheXMnKS5zYWNrKCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuSW5qZWN0KDMsIDQsIDUpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5pbmplY3QoMyw0LDUpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLkluamVjdChbXWludGVyZmFjZXt9ezMsIDQsIDV9KQotCQkJfSwKLQkJCWVxdWFsczogImcuaW5qZWN0KFszLDQsNV0pIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLkluamVjdCgzLCA0LCA1KS5Db3VudCgpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5pbmplY3QoMyw0LDUpLmNvdW50KCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhcygicnVud2F5cyIsIFAuR3QoNSkpLkNvdW50KCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ3J1bndheXMnLGd0KDUpKS5jb3VudCgpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXMoInJ1bndheXMiLCBQLkx0ZSg1LjMpKS5Db3VudCgpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdydW53YXlzJyxsdGUoNS4zKSkuY291bnQoKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJjb2RlIiwgUC5XaXRoaW4oMTIzLCAxMjQpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhcygnY29kZScsd2l0aGluKFsxMjMsMTI0XSkpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXMoImNvZGUiLCBQLldpdGhpbigxMjMsICJhYmMiKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbMTIzLCdhYmMnXSkpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXMoImNvZGUiLCBQLldpdGhpbigiYWJjIiwgMTIzKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbJ2FiYycsMTIzXSkpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXMoImNvZGUiLCBQLldpdGhpbigiYWJjIiwgInh5eiIpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhcygnY29kZScsd2l0aGluKFsnYWJjJywneHl6J10pKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCIxIiwgIjIiKS5IYXMoInJlZ2lvbiIsIFAuV2l0aGluKCJVUy1UWCIsICJVUy1HQSIpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVignMScsJzInKS5oYXMoJ3JlZ2lvbicsd2l0aGluKFsnVVMtVFgnLCdVUy1HQSddKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkFuZChUX18uSGFzKCJydW53YXlzIiwgUC5HdCg1KSksIFRfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmFuZChoYXMoJ3J1bndheXMnLGd0KDUpKSxoYXMoJ3JlZ2lvbicsJ1VTLVRYJykpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5VbmlvbihUX18uSGFzKCJydW53YXlzIiwgUC5HdCg1KSksIFRfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLnVuaW9uKGhhcygncnVud2F5cycsZ3QoNSkpLGhhcygncmVnaW9uJywnVVMtVFgnKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMyIpLkNob29zZShUX18uVmFsdWVzKCJydW53YXlzIikuSXMoMyksIFRfXy5Db25zdGFudCgidGhyZWUiKSwgVF9fLkNvbnN0YW50KCJub3QgdGhyZWUiKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzMnKS5jaG9vc2UodmFsdWVzKCdydW53YXlzJykuaXMoMyksY29uc3RhbnQoJ3RocmVlJyksY29uc3RhbnQoJ25vdCB0aHJlZScpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCIzIikuQ2hvb3NlKFRfXy5WYWx1ZXMoInJ1bndheXMiKSkuT3B0aW9uKDEsIFRfXy5Db25zdGFudCgidGhyZWUiKSkuT3B0aW9uKDIsIFRfXy5Db25zdGFudCgibm90IHRocmVlIikpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCczJykuY2hvb3NlKHZhbHVlcygncnVud2F5cycpKS5vcHRpb24oMSxjb25zdGFudCgndGhyZWUnKSkub3B0aW9uKDIsY29uc3RhbnQoJ25vdCB0aHJlZScpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCIzIikuQ2hvb3NlKFRfXy5WYWx1ZXMoInJ1bndheXMiKSkuT3B0aW9uKDEuNSwgVF9fLkNvbnN0YW50KCJvbmUgYW5kIGEgaGFsZiIpKS5PcHRpb24oMiwgVF9fLkNvbnN0YW50KCJub3QgdGhyZWUiKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzMnKS5jaG9vc2UodmFsdWVzKCdydW53YXlzJykpLm9wdGlvbigxLjUsY29uc3RhbnQoJ29uZSBhbmQgYSBoYWxmJykpLm9wdGlvbigyLGNvbnN0YW50KCdub3QgdGhyZWUnKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiMyIpLlJlcGVhdChUX18uT3V0KCkuU2ltcGxlUGF0aCgpKS5VbnRpbChUX18uTG9vcHMoKS5JcygxKSkuQ291bnQoKQotCQkJfSwKLQkJCWVxdWFsczogImcuVignMycpLnJlcGVhdChvdXQoKS5zaW1wbGVQYXRoKCkpLnVudGlsKGxvb3BzKCkuaXMoMSkpLmNvdW50KCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuTGltaXQoMjApLkdyb3VwKCkuQnkoInJlZ2lvbiIpLkJ5KCJjb2RlIikuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KENvbHVtbi5LZXlzKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykubGltaXQoMjApLmdyb3VwKCkuYnkoJ3JlZ2lvbicpLmJ5KCdjb2RlJykub3JkZXIobG9jYWwpLmJ5KGtleXMpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjEiKS5BcygiYSIpLlYoIjIiKS5BcygiYSIpLlNlbGVjdChQb3AuQWxsLCAiYSIpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCcxJykuYXMoJ2EnKS5WKCcyJykuYXMoJ2EnKS5zZWxlY3QoYWxsLCdhJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuQWRkVigidGVzdCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNldCwgInAxIiwgMTApCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoc2V0LCdwMScsMTApIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCAicDEiLCAxMCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eShsaXN0LCdwMScsMTApIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLkFkZFYoInRlc3QiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsICJwMSIsIDEwKQotCQkJfSwKLQkJCWVxdWFsczogImcuYWRkVigndGVzdCcpLnByb3BlcnR5KHNpbmdsZSwncDEnLDEwKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuTGltaXQoNSkuT3JkZXIoKS5CeShUX18uTGFiZWwoKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5saW1pdCg1KS5vcmRlcigpLmJ5KGxhYmVsKCkpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5SYW5nZSgxLCA1KQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLnJhbmdlKDEsNSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuQWRkVigidGVzdCIpLlByb3BlcnR5KCJwMSIsIDEyMykKLQkJCX0sCi0JCQllcXVhbHM6ICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eSgncDEnLDEyMykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhcygiZGF0ZSIsIFAuR3QodGltZS5EYXRlKDIwMjEsIDEsIDEsIDksIDMwLCAwLCAwLCB0aW1lLlVUQykpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhcygnZGF0ZScsZ3QobmV3IERhdGUoMTIxLDEsMSw5LDMwLDApKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuQWRkRSgicm91dGUiKS5Gcm9tKFRfXy5WKCIxIikpLlRvKFRfXy5WKCIyIikpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5hZGRFKCdyb3V0ZScpLmZyb20oVignMScpKS50byhWKCcyJykpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLldpdGhTaWRlRWZmZWN0KCJhIiwgW11pbnRlcmZhY2V7fXsxLCAyfSkuVigiMyIpLlNlbGVjdCgiYSIpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy53aXRoU2lkZUVmZmVjdCgnYScsWzEsMl0pLlYoJzMnKS5zZWxlY3QoJ2EnKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5XaXRoU2lkZUVmZmVjdCgiYSIsIDEpLlYoIjMiKS5TZWxlY3QoImEiKQotCQkJfSwKLQkJCWVxdWFsczogImcud2l0aFNpZGVFZmZlY3QoJ2EnLDEpLlYoJzMnKS5zZWxlY3QoJ2EnKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5XaXRoU2lkZUVmZmVjdCgiYSIsICJhYmMiKS5WKCIzIikuU2VsZWN0KCJhIikKLQkJCX0sCi0JCQllcXVhbHM6ICJnLndpdGhTaWRlRWZmZWN0KCdhJywnYWJjJykuVignMycpLnNlbGVjdCgnYScpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXMoImFpcnBvcnQiLCAicmVnaW9uIiwgIlVTLU5NIikuTGltaXQoMykuVmFsdWVzKCJlbGV2IikuRm9sZCgpLkluZGV4KCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ2FpcnBvcnQnLCdyZWdpb24nLCdVUy1OTScpLmxpbWl0KDMpLnZhbHVlcygnZWxldicpLmZvbGQoKS5pbmRleCgpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjMiKS5SZXBlYXQoVF9fLlRpbWVMaW1pdCgxMDAwKS5PdXQoKS5TaW1wbGVQYXRoKCkpLlVudGlsKFRfXy5IYXMoImNvZGUiLCAiQUdSIikpLlBhdGgoKQotCQkJfSwKLQkJCWVxdWFsczogImcuVignMycpLnJlcGVhdCh0aW1lTGltaXQoMTAwMCkub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChoYXMoJ2NvZGUnLCdBR1InKSkucGF0aCgpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXNMYWJlbCgiYWlycG9ydCIpLldoZXJlKFRfXy5WYWx1ZXMoImVsZXYiKS5JcyhQLkd0KDE0MDAwKSkpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS53aGVyZSh2YWx1ZXMoJ2VsZXYnKS5pcyhndCgxNDAwMCkpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzTGFiZWwoImFpcnBvcnQiKS5XaGVyZShUX18uT3V0KCkuQ291bnQoKS5JcyhQLkd0KDI1MCkpKS5WYWx1ZXMoImNvZGUiKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykud2hlcmUob3V0KCkuY291bnQoKS5pcyhndCgyNTApKSkudmFsdWVzKCdjb2RlJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhc0xhYmVsKCJhaXJwb3J0IikuRmlsdGVyKFRfXy5PdXQoKS5Db3VudCgpLklzKFAuR3QoMjUwKSkpLlZhbHVlcygiY29kZSIpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5maWx0ZXIob3V0KCkuY291bnQoKS5pcyhndCgyNTApKSkudmFsdWVzKCdjb2RlJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuV2l0aFNhY2soMCkuCi0JCQkJCVYoIjMiKS4KLQkJCQkJUmVwZWF0KFRfXy5PdXRFKCJyb3V0ZSIpLlNhY2soT3BlcmF0b3IuU3VtKS5CeSgiZGlzdCIpLkluVigpKS4KLQkJCQkJVW50aWwoVF9fLkhhcygiY29kZSIsICJBR1IiKS5PcigpLkxvb3BzKCkuSXMoNCkpLgotCQkJCQlIYXMoImNvZGUiLCAiQUdSIikuCi0JCQkJCUxvY2FsKFRfXy5VbmlvbihUX18uUGF0aCgpLkJ5KCJjb2RlIikuQnkoImRpc3QiKSwgVF9fLlNhY2soKSkuRm9sZCgpKS4KLQkJCQkJTGltaXQoMTApCi0JCQl9LAotCQkJZXF1YWxzOiAiZy53aXRoU2FjaygwKS5WKCczJykucmVwZWF0KG91dEUoJ3JvdXRlJykuc2FjayhzdW0pLmJ5KCdkaXN0JykuaW5WKCkpLnVudGlsKGhhcygnY29kZScsJ0FHUicpLm9yKCkubG9vcHMoKS5pcyg0KSkuaGFzKCdjb2RlJywnQUdSJykubG9jYWwodW5pb24ocGF0aCgpLmJ5KCdjb2RlJykuYnkoJ2Rpc3QnKSxzYWNrKCkpLmZvbGQoKSkubGltaXQoMTApIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLkFkZFYoKS5BcygiYSIpLkFkZFYoKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikKLQkJCX0sCi0JCQllcXVhbHM6ICJnLmFkZFYoKS5hcygnYScpLmFkZFYoKS5hcygnYicpLmFkZEUoJ2tub3dzJykuZnJvbSgnYScpLnRvKCdiJykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuQWRkVigiUGVyc29uIikuQXMoImEiKS5BZGRWKCJQZXJzb24iKS5BcygiYiIpLkFkZEUoImtub3dzIikuRnJvbSgiYSIpLlRvKCJiIikKLQkJCX0sCi0JCQllcXVhbHM6ICJnLmFkZFYoJ1BlcnNvbicpLmFzKCdhJykuYWRkVignUGVyc29uJykuYXMoJ2InKS5hZGRFKCdrbm93cycpLmZyb20oJ2EnKS50bygnYicpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjMiKS5Qcm9qZWN0KCJPdXQiLCAiSW4iKS5CeShUX18uT3V0KCkuQ291bnQoKSkuQnkoVF9fLkluKCkuQ291bnQoKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzMnKS5wcm9qZWN0KCdPdXQnLCdJbicpLmJ5KG91dCgpLmNvdW50KCkpLmJ5KGluKCkuY291bnQoKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiNDQiKS5PdXQoKS5BZ2dyZWdhdGUoImEiKS5PdXQoKS5XaGVyZShQLldpdGhpbigiYSIpKS5QYXRoKCkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzQ0Jykub3V0KCkuYWdncmVnYXRlKCdhJykub3V0KCkud2hlcmUod2l0aGluKCdhJykpLnBhdGgoKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJkYXRlIiwgdGltZS5EYXRlKDIwMjEsIDIsIDIyLCAwLCAwLCAwLCAwLCB0aW1lLlVUQykpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdkYXRlJyxuZXcgRGF0ZSgxMjEsMiwyMiwwLDAsMCkpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoKS5IYXMoImRhdGUiLCBQLldpdGhpbih0aW1lLkRhdGUoMjAyMSwgMiwgMjIsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSwgdGltZS5EYXRlKDIwMjEsIDEsIDEsIDAsIDAsIDAsIDAsIHRpbWUuVVRDKSkpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdkYXRlJyx3aXRoaW4oW25ldyBEYXRlKDEyMSwyLDIyLDAsMCwwKSxuZXcgRGF0ZSgxMjEsMSwxLDAsMCwwKV0pKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJkYXRlIiwgUC5CZXR3ZWVuKHRpbWUuRGF0ZSgyMDIxLCAxLCAxLCAwLCAwLCAwLCAwLCB0aW1lLlVUQyksIHRpbWUuRGF0ZSgyMDIxLCAyLCAyMiwgMCwgMCwgMCwgMCwgdGltZS5VVEMpKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ2RhdGUnLGJldHdlZW4obmV3IERhdGUoMTIxLDEsMSwwLDAsMCksbmV3IERhdGUoMTIxLDIsMjIsMCwwLDApKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhcygiZGF0ZSIsIFAuSW5zaWRlKHRpbWUuRGF0ZSgyMDIxLCAxLCAxLCAwLCAwLCAwLCAwLCB0aW1lLlVUQyksIHRpbWUuRGF0ZSgyMDIxLCAyLCAyMiwgMCwgMCwgMCwgMCwgdGltZS5VVEMpKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ2RhdGUnLGluc2lkZShuZXcgRGF0ZSgxMjEsMSwxLDAsMCwwKSxuZXcgRGF0ZSgxMjEsMiwyMiwwLDAsMCkpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJkYXRlIiwgUC5HdCh0aW1lLkRhdGUoMjAyMSwgMSwgMSwgOSwgMzAsIDAsIDAsIHRpbWUuVVRDKSkpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdkYXRlJyxndChuZXcgRGF0ZSgxMjEsMSwxLDksMzAsMCkpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJydW53YXlzIiwgUC5CZXR3ZWVuKDMsIDUpKQotCQkJfSwKLQkJCWVxdWFsczogImcuVigpLmhhcygncnVud2F5cycsYmV0d2VlbigzLDUpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJydW53YXlzIiwgUC5JbnNpZGUoMywgNSkpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdydW53YXlzJyxpbnNpZGUoMyw1KSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiNDQiKS5PdXRFKCkuRWxlbWVudE1hcCgpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCc0NCcpLm91dEUoKS5lbGVtZW50TWFwKCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiNDQiKS5WYWx1ZU1hcCgpLkJ5KFRfXy5VbmZvbGQoKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoJzQ0JykudmFsdWVNYXAoKS5ieSh1bmZvbGQoKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigiNDQiKS5WYWx1ZU1hcCgpLldpdGgoV2l0aE9wdGlvbnMuVG9rZW5zLCBXaXRoT3B0aW9ucy5MYWJlbHMpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsV2l0aE9wdGlvbnMubGFiZWxzKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCI0NCIpLlZhbHVlTWFwKCkuV2l0aChXaXRoT3B0aW9ucy5BbGwpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy5hbGwpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLlYoIjQ0IikuVmFsdWVNYXAoKS5XaXRoKFdpdGhPcHRpb25zLkluZGV4ZXIpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy5pbmRleGVyKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCI0NCIpLlZhbHVlTWFwKCkuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLldpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuQWRkVigidGVzdCIpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5hZGRWKCd0ZXN0JykiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShTdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBUX18uSGFzKCJyZWdpb24iLCAiVVMtVFgiKSwgRWRnZXM6IFRfXy5IYXNMYWJlbCgicm91dGUiKX0pKS5WKCkuQ291bnQoKQotCQkJfSwKLQkJCWNvbnRhaW5zUmFuZG9tQ2xhc3NQYXJhbXM6IHRydWUsCi0JCQllcXVhbHM6ICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpoYXMoJ3JlZ2lvbicsJ1VTLVRYJyksZWRnZXM6aGFzTGFiZWwoJ3JvdXRlJykpKS5WKCkuY291bnQoKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5XaXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGV4UHJvcGVydGllczogVF9fLkhhc05vdCgicnVud2F5cyIpfSkpLlYoKS5Db3VudCgpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOmhhc05vdCgncnVud2F5cycpKSkuVigpLmNvdW50KCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShTdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBUX18uSGFzKCJyZWdpb24iLCAiVVMtVFgiKSwgVmVydGV4UHJvcGVydGllczogVF9fLkhhc05vdCgicnVud2F5cyIpfSkpLlYoKS5Db3VudCgpCi0JCQl9LAotCQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtczogdHJ1ZSwKLQkJCWVxdWFsczogICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOmhhcygncmVnaW9uJywnVVMtVFgnKSx2ZXJ0ZXhQcm9wZXJ0aWVzOmhhc05vdCgncnVud2F5cycpKSkuVigpLmNvdW50KCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpLCBTdWJncmFwaFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IFRfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpLCBFZGdlczogVF9fLkhhc0xhYmVsKCJyb3V0ZSIpfSkpLlYoKS5Db3VudCgpCi0JCQl9LAotCQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtczogdHJ1ZSwKLQkJCWVxdWFsczogICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6aGFzKCdyZWdpb24nLCdVUy1UWCcpLGVkZ2VzOmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuV2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpLCBTdWJncmFwaFN0cmF0ZWd5KFN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IFRfXy5IYXMoInJlZ2lvbiIsICJVUy1UWCIpfSkpLlYoKS5Db3VudCgpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpLG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOmhhcygncmVnaW9uJywnVVMtVFgnKSkpLlYoKS5jb3VudCgpIiwKLQkJfSwKLQkJewotCQkJYXNzZXJ0OiBmdW5jKGcgKkdyYXBoVHJhdmVyc2FsU291cmNlKSAqR3JhcGhUcmF2ZXJzYWwgewotCQkJCXJldHVybiBnLldpdGhTdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneShtYXBbc3RyaW5nXWludGVyZmFjZXt9eyJldmFsdWF0aW9uVGltZW91dCI6IDUwMH0pKS5WKCkuQ291bnQoKQotCQkJfSwKLQkJCWVxdWFsczogImcud2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneShldmFsdWF0aW9uVGltZW91dDo1MDApKS5WKCkuY291bnQoKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5XaXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShQYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6ICJwYXJ0aXRpb24iLCBXcml0ZVBhcnRpdGlvbjogImEiLCBSZWFkUGFydGl0aW9uczogTmV3U2ltcGxlU2V0KCJhIil9KSkuQWRkVigidGVzdCIpCi0JCQl9LAotCQkJY29udGFpbnNSYW5kb21DbGFzc1BhcmFtczogdHJ1ZSwKLQkJCWVxdWFsczogICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShpbmNsdWRlTWV0YVByb3BlcnRpZXM6ZmFsc2UscGFydGl0aW9uS2V5OidwYXJ0aXRpb24nLHdyaXRlUGFydGl0aW9uOidhJyxyZWFkUGFydGl0aW9uczpbJ2EnXSkpLmFkZFYoJ3Rlc3QnKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5XaXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koVmVydGV4UHJvZ3JhbVN0cmF0ZWd5Q29uZmlne30pKS5WKCkuU2hvcnRlc3RQYXRoKCkuV2l0aCgifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0IiwgVF9fLkhhcygibmFtZSIsICJwZXRlciIpKQotCQkJfSwKLQkJCWVxdWFsczogImcud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aCgnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0JyxoYXMoJ25hbWUnLCdwZXRlcicpKSIsCi0JCX0sCi0JCXsKLQkJCWFzc2VydDogZnVuYyhnICpHcmFwaFRyYXZlcnNhbFNvdXJjZSkgKkdyYXBoVHJhdmVyc2FsIHsKLQkJCQlyZXR1cm4gZy5WKCkuSGFzKCJwMSIsIFRleHRQLlN0YXJ0aW5nV2l0aCgiZm9vIikpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdwMScsc3RhcnRpbmdXaXRoKCdmb28nKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhcygicDEiLCBUZXh0UC5FbmRpbmdXaXRoKCJmb28iKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ3AxJyxlbmRpbmdXaXRoKCdmb28nKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhcygicDEiLCBUZXh0UC5Db250YWluaW5nKCJmb28iKSkKLQkJCX0sCi0JCQllcXVhbHM6ICJnLlYoKS5oYXMoJ3AxJyxjb250YWluaW5nKCdmb28nKSkiLAotCQl9LAotCQl7Ci0JCQlhc3NlcnQ6IGZ1bmMoZyAqR3JhcGhUcmF2ZXJzYWxTb3VyY2UpICpHcmFwaFRyYXZlcnNhbCB7Ci0JCQkJcmV0dXJuIGcuVigpLkhhcygicDEiLCBuaWwpCi0JCQl9LAotCQkJZXF1YWxzOiAiZy5WKCkuaGFzKCdwMScsbnVsbCkiLAotCQl9LAotCX0KLQotCXZhciB0ZXN0c1RvUnVuIFtddGVzdAotCi0Jb25seVRlc3RzIDo9IG1ha2UoW110ZXN0LCAwKQotCWZvciBfLCB0dCA6PSByYW5nZSB0ZXN0cyB7Ci0JCWlmIHR0Lm9ubHkgewotCQkJb25seVRlc3RzID0gYXBwZW5kKG9ubHlUZXN0cywgdHQpCi0JCX0KLQl9Ci0KLQlpZiBsZW4ob25seVRlc3RzKSA+IDAgewotCQl0ZXN0c1RvUnVuID0gb25seVRlc3RzCi0JfSBlbHNlIHsKLQkJdGVzdHNUb1J1biA9IHRlc3RzCi0JfQotCi0JZm9yIF8sIHR0IDo9IHJhbmdlIHRlc3RzVG9SdW4gewotCQlpZiB0dC5za2lwIHsKLQkJCWNvbnRpbnVlCi0JCX0KLQotCQl0ZXN0TmFtZSA6PSB0dC5uYW1lCi0JCWlmIHRlc3ROYW1lID09ICIiIHsKLQkJCXRlc3ROYW1lID0gdHQuZXF1YWxzCi0JCX0KLQotCQl0LlJ1bih0ZXN0TmFtZSwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJCXRyIDo9ICZ0cmFuc2xhdG9yewotCQkJCXNvdXJjZTogImciLAotCQkJfQotCQkJZyA6PSBOZXdHcmFwaFRyYXZlcnNhbFNvdXJjZShuaWwsIG5pbCkKLQkJCWJ5dGVjb2RlIDo9IHR0LmFzc2VydChnKS5CeXRlY29kZQotCQkJZ290LCBlcnIgOj0gdHIuVHJhbnNsYXRlKGJ5dGVjb2RlKQotCQkJaWYgKGVyciAhPSBuaWwpICE9IHR0LndhbnRFcnIgewotCQkJCXQuRXJyb3JmKCJ0cmFuc2xhdG9yLlRyYW5zbGF0ZSgpIGVycm9yID0gJXYsIHdhbnRFcnIgJXYiLCBlcnIsIHR0LndhbnRFcnIpCi0JCQkJcmV0dXJuCi0JCQl9Ci0JCQlpZiAhdHQuY29udGFpbnNSYW5kb21DbGFzc1BhcmFtcyAmJiBnb3QgIT0gdHQuZXF1YWxzIHsKLQkJCQl0LkVycm9yZigidHJhbnNsYXRvci5UcmFuc2xhdGUoKSA9ICV2LCBlcXVhbHMgJXYiLCBnb3QsIHR0LmVxdWFscykKLQkJCX0KLQotCQkJaWYgdHQuY29udGFpbnNSYW5kb21DbGFzc1BhcmFtcyB7Ci0JCQkJZXF1YWxzUGFyYW1zIDo9IGdldFBhcmFtcyh0dC5lcXVhbHMpCi0JCQkJZ290UGFyYW1zIDo9IGdldFBhcmFtcyhnb3QpCi0KLQkJCQlpZiBsZW4oZXF1YWxzUGFyYW1zKSAhPSBsZW4oZ290UGFyYW1zKSB7Ci0JCQkJCXQuRXJyb3JmKCJ0cmFuc2xhdG9yLlRyYW5zbGF0ZSgpID0gJXYsIGVxdWFscyAldiIsIGdvdCwgdHQuZXF1YWxzKQotCQkJCX0KLQotCQkJCWZvciBfLCBlcXVhbHNQYXJhbSA6PSByYW5nZSBlcXVhbHNQYXJhbXMgewotCQkJCQlmb3VuZCA6PSBmYWxzZQotCQkJCQlmb3IgXywgZ290UGFyYW0gOj0gcmFuZ2UgZ290UGFyYW1zIHsKLQkJCQkJCWlmIGVxdWFsc1BhcmFtID09IGdvdFBhcmFtIHsKLQkJCQkJCQlmb3VuZCA9IHRydWUKLQkJCQkJCQlicmVhawotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWlmICFmb3VuZCB7Ci0JCQkJCQl0LkVycm9yZigidHJhbnNsYXRvci5UcmFuc2xhdGUoKSA9ICV2LCBlcXVhbHMgJXYiLCBnb3QsIHR0LmVxdWFscykKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSkKLQl9Ci19Ci0KLWZ1bmMgZ2V0UGFyYW1zKHJlc3VsdCBzdHJpbmcpIFtdc3RyaW5nIHsKLQlwYXR0ZXJuIDo9IGAoXHcrOi4qPylgCi0JcmUgOj0gcmVnZXhwLk11c3RDb21waWxlKHBhdHRlcm4pCi0JbWF0Y2hlcyA6PSByZS5GaW5kQWxsU3RyaW5nU3VibWF0Y2gocmVzdWx0LCAtMSkKLQotCXBhcmFtcyA6PSBtYWtlKFtdc3RyaW5nLCAwKQotCWZvciBfLCBtYXRjaCA6PSByYW5nZSBtYXRjaGVzIHsKLQkJaWYgbGVuKG1hdGNoKSA+IDAgewotCQkJcGFyYW1zID0gYXBwZW5kKHBhcmFtcywgbWF0Y2hbMF0pCi0JCX0KLQl9Ci0KLQlyZXR1cm4gcGFyYW1zCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci90cmFuc3BvcnRlci5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3RyYW5zcG9ydGVyLmdvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzhjYTBjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZ28vZHJpdmVyL3RyYW5zcG9ydGVyLmdvCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgZ3JlbWxpbmdvCi0KLWltcG9ydCAidGltZSIKLQotdHlwZSB0cmFuc3BvcnRlciBpbnRlcmZhY2UgewotCUNvbm5lY3QoKSBlcnJvcgotCVdyaXRlKGRhdGEgW11ieXRlKSBlcnJvcgotCVJlYWQoKSAoW11ieXRlLCBlcnJvcikKLQlDbG9zZSgpIGVycm9yCi0JSXNDbG9zZWQoKSBib29sCi0JZ2V0QXV0aEluZm8oKSBBdXRoSW5mb1Byb3ZpZGVyCi19Ci0KLXR5cGUgd2Vic29ja2V0Q29ubiBpbnRlcmZhY2UgewotCVdyaXRlTWVzc2FnZShpbnQsIFtdYnl0ZSkgZXJyb3IKLQlSZWFkTWVzc2FnZSgpIChpbnQsIFtdYnl0ZSwgZXJyb3IpCi0JU2V0UG9uZ0hhbmRsZXIoaCBmdW5jKGFwcERhdGEgc3RyaW5nKSBlcnJvcikKLQlDbG9zZSgpIGVycm9yCi0JU2V0UmVhZERlYWRsaW5lKHQgdGltZS5UaW1lKSBlcnJvcgotCVNldFdyaXRlRGVhZGxpbmUodCB0aW1lLlRpbWUpIGVycm9yCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2RyaXZlci90cmFuc3BvcnRlckZhY3RvcnkuZ28gYi9ncmVtbGluLWdvL2RyaXZlci90cmFuc3BvcnRlckZhY3RvcnkuZ28KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYzZhN2UuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvdHJhbnNwb3J0ZXJGYWN0b3J5LmdvCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgZ3JlbWxpbmdvCi0KLWltcG9ydCAoCi0JInN5bmMiCi0pCi0KLS8vIFRyYW5zcG9ydGVyVHlwZSBpcyBhbiBhbGlhcyBmb3IgdmFsaWQgdHJhbnNwb3J0IHByb3RvY29scy4KLXR5cGUgVHJhbnNwb3J0ZXJUeXBlIGludAotCi1jb25zdCAoCi0JLy8gR29yaWxsYSB0cmFuc3BvcnQgbGF5ZXI6IGdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQKLQlHb3JpbGxhIFRyYW5zcG9ydGVyVHlwZSA9IGlvdGEgKyAxCi0pCi0KLWZ1bmMgZ2V0VHJhbnNwb3J0TGF5ZXIodHJhbnNwb3J0ZXJUeXBlIFRyYW5zcG9ydGVyVHlwZSwgdXJsIHN0cmluZywgY29ublNldHRpbmdzICpjb25uZWN0aW9uU2V0dGluZ3MsIGxvZ0hhbmRsZXIgKmxvZ0hhbmRsZXIpICh0cmFuc3BvcnRlciwgZXJyb3IpIHsKLQl2YXIgdHJhbnNwb3J0ZXIgdHJhbnNwb3J0ZXIKLQlzd2l0Y2ggdHJhbnNwb3J0ZXJUeXBlIHsKLQljYXNlIEdvcmlsbGE6Ci0JCXRyYW5zcG9ydGVyID0gJmdvcmlsbGFUcmFuc3BvcnRlcnsKLQkJCXVybDogICAgICAgICAgdXJsLAotCQkJbG9nSGFuZGxlcjogICBsb2dIYW5kbGVyLAotCQkJY29ublNldHRpbmdzOiBjb25uU2V0dGluZ3MsCi0JCQl3cml0ZUNoYW5uZWw6IG1ha2UoY2hhbiBbXWJ5dGUsIHdyaXRlQ2hhbm5lbFNpemVEZWZhdWx0KSwKLQkJCXdnOiAgICAgICAgICAgJnN5bmMuV2FpdEdyb3Vwe30sCi0JCX0KLQlkZWZhdWx0OgotCQlyZXR1cm4gbmlsLCBuZXdFcnJvcihlcnIwODAxR2V0VHJhbnNwb3J0TGF5ZXJOb1R5cGVFcnJvcikKLQl9Ci0JZXJyIDo9IHRyYW5zcG9ydGVyLkNvbm5lY3QoKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gbmlsLCBlcnIKLQl9Ci0JcmV0dXJuIHRyYW5zcG9ydGVyLCBuaWwKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZHJpdmVyL3RyYXZlcnNhbC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3RyYXZlcnNhbC5nbwppbmRleCA2YmEwOTdiLi5lZDI1ZWVhIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci90cmF2ZXJzYWwuZ28KKysrIGIvZ3JlbWxpbi1nby9kcml2ZXIvdHJhdmVyc2FsLmdvCkBAIC0zMiwxMCArMzIsMTAgQEAKIAogLy8gVHJhdmVyc2FsIGlzIHRoZSBwcmltYXJ5IHdheSBpbiB3aGljaCBncmFwaHMgYXJlIHByb2Nlc3NlZC4KIHR5cGUgVHJhdmVyc2FsIHN0cnVjdCB7Ci0JZ3JhcGggICAgKkdyYXBoCi0JQnl0ZWNvZGUgKkJ5dGVjb2RlCi0JcmVtb3RlICAgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24KLQlyZXN1bHRzICBSZXN1bHRTZXQKKwlncmFwaCAgICAgICAqR3JhcGgKKwlHcmVtbGluTGFuZyAqR3JlbWxpbkxhbmcKKwlyZW1vdGUgICAgICAqRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgorCXJlc3VsdHMgICAgIFJlc3VsdFNldAogfQogCiAvLyBUb0xpc3QgcmV0dXJucyB0aGUgcmVzdWx0IGluIGEgbGlzdC4KQEAgLTQ0LDcgKzQ0LDcgQEAKIAkJcmV0dXJuIG5pbCwgbmV3RXJyb3IoZXJyMDkwMVRvTGlzdEFub25UcmF2ZXJzYWxFcnJvcikKIAl9CiAKLQlyZXN1bHRzLCBlcnIgOj0gdC5yZW1vdGUuc3VibWl0Qnl0ZWNvZGUodC5CeXRlY29kZSkKKwlyZXN1bHRzLCBlcnIgOj0gdC5yZW1vdGUuc3VibWl0R3JlbWxpbkxhbmcodC5HcmVtbGluTGFuZykKIAlpZiBlcnIgIT0gbmlsIHsKIAkJcmV0dXJuIG5pbCwgZXJyCiAJfQpAQCAtNzcsMTIgKzc3LDkgQEAKIAkJCXJldHVybgogCQl9CiAKLQkJaWYgZXJyIDo9IHQuQnl0ZWNvZGUuQWRkU3RlcCgiZGlzY2FyZCIpOyBlcnIgIT0gbmlsIHsKLQkJCXIgPC0gZXJyCi0JCQlyZXR1cm4KLQkJfQorCQl0LkdyZW1saW5MYW5nLkFkZFN0ZXAoImRpc2NhcmQiKQogCi0JCXJlcywgZXJyIDo9IHQucmVtb3RlLnN1Ym1pdEJ5dGVjb2RlKHQuQnl0ZWNvZGUpCisJCXJlcywgZXJyIDo9IHQucmVtb3RlLnN1Ym1pdEdyZW1saW5MYW5nKHQuR3JlbWxpbkxhbmcpCiAJCWlmIGVyciAhPSBuaWwgewogCQkJciA8LSBlcnIKIAkJCXJldHVybgpAQCAtMTI1LDcgKzEyMiw3IEBACiAvLyBHZXRSZXN1bHRTZXQgc3VibWl0cyB0aGUgdHJhdmVyc2FsIGFuZCByZXR1cm5zIHRoZSBSZXN1bHRTZXQuCiBmdW5jICh0ICpUcmF2ZXJzYWwpIEdldFJlc3VsdFNldCgpIChSZXN1bHRTZXQsIGVycm9yKSB7CiAJaWYgdC5yZXN1bHRzID09IG5pbCB7Ci0JCXJlc3VsdHMsIGVyciA6PSB0LnJlbW90ZS5zdWJtaXRCeXRlY29kZSh0LkJ5dGVjb2RlKQorCQlyZXN1bHRzLCBlcnIgOj0gdC5yZW1vdGUuc3VibWl0R3JlbWxpbkxhbmcodC5HcmVtbGluTGFuZykKIAkJaWYgZXJyICE9IG5pbCB7CiAJCQlyZXR1cm4gbmlsLCBlcnIKIAkJfQpAQCAtMTYxLDMzICsxNTgsMzMgQEAKIH0KIAogdHlwZSBjdiBzdHJ1Y3QgewotCUJ5dGVjb2RlICpCeXRlY29kZQorCUdyZW1saW5MYW5nICpHcmVtbGluTGFuZwogfQogCiB0eXBlIENhcmRWYWx1ZSBpbnRlcmZhY2UgewotCVNpbmdsZSh2YWwgaW50ZXJmYWNle30pIEJ5dGVjb2RlCi0JU2V0KHZhbCBpbnRlcmZhY2V7fSkgQnl0ZWNvZGUKLQlMaXN0KHZhbCBpbnRlcmZhY2V7fSkgQnl0ZWNvZGUKKwlTaW5nbGUodmFsIGludGVyZmFjZXt9KSBHcmVtbGluTGFuZworCVNldCh2YWwgaW50ZXJmYWNle30pIEdyZW1saW5MYW5nCisJTGlzdCh2YWwgaW50ZXJmYWNle30pIEdyZW1saW5MYW5nCiB9CiAKIHZhciBDYXJkaW5hbGl0eVZhbHVlIENhcmRWYWx1ZSA9ICZjdnt9CiAKLWZ1bmMgKCpjdikgU2luZ2xlKHZhbCBpbnRlcmZhY2V7fSkgQnl0ZWNvZGUgewotCWJjIDo9IEJ5dGVjb2Rle30KLQliYy5BZGRTb3VyY2UoIkNhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwiLCBDYXJkaW5hbGl0eS5TaW5nbGUsIHZhbCkKLQlyZXR1cm4gYmMKK2Z1bmMgKCpjdikgU2luZ2xlKHZhbCBpbnRlcmZhY2V7fSkgR3JlbWxpbkxhbmcgeworCWdsIDo9IEdyZW1saW5MYW5ne30KKwlnbC5BZGRTb3VyY2UoIkNhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwiLCBDYXJkaW5hbGl0eS5TaW5nbGUsIHZhbCkKKwlyZXR1cm4gZ2wKIH0KIAotZnVuYyAoKmN2KSBTZXQodmFsIGludGVyZmFjZXt9KSBCeXRlY29kZSB7Ci0JYmMgOj0gQnl0ZWNvZGV7fQotCWJjLkFkZFNvdXJjZSgiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIsIENhcmRpbmFsaXR5LlNldCwgdmFsKQotCXJldHVybiBiYworZnVuYyAoKmN2KSBTZXQodmFsIGludGVyZmFjZXt9KSBHcmVtbGluTGFuZyB7CisJZ2wgOj0gR3JlbWxpbkxhbmd7fQorCWdsLkFkZFNvdXJjZSgiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIsIENhcmRpbmFsaXR5LlNldCwgdmFsKQorCXJldHVybiBnbAogfQogCi1mdW5jICgqY3YpIExpc3QodmFsIGludGVyZmFjZXt9KSBCeXRlY29kZSB7Ci0JYmMgOj0gQnl0ZWNvZGV7fQotCWJjLkFkZFNvdXJjZSgiQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCIsIENhcmRpbmFsaXR5Lkxpc3QsIHZhbCkKLQlyZXR1cm4gYmMKK2Z1bmMgKCpjdikgTGlzdCh2YWwgaW50ZXJmYWNle30pIEdyZW1saW5MYW5nIHsKKwlnbCA6PSBHcmVtbGluTGFuZ3t9CisJZ2wuQWRkU291cmNlKCJDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsIiwgQ2FyZGluYWxpdHkuTGlzdCwgdmFsKQorCXJldHVybiBnbAogfQogCiB0eXBlIGNvbHVtbiBzdHJpbmcKQEAgLTUxNyw3ICs1MTQsNyBAQAogCXJldHVybiAmcHtvcGVyYXRvcjogb3BlcmF0b3IsIHZhbHVlczogdmFsdWVzfQogfQogCi1mdW5jIG5ld1BXaXRoUChvcGVyYXRvciBzdHJpbmcsIHBwIHAsIGFyZ3MgLi4uaW50ZXJmYWNle30pIFByZWRpY2F0ZSB7CitmdW5jIG5ld1BXaXRoUChvcGVyYXRvciBzdHJpbmcsIHBwICpwLCBhcmdzIC4uLmludGVyZmFjZXt9KSBQcmVkaWNhdGUgewogCXZhbHVlcyA6PSBtYWtlKFtdaW50ZXJmYWNle30sIDEpCiAJdmFsdWVzWzBdID0gcHAKIAl2YWx1ZXMgPSBhcHBlbmQodmFsdWVzLCBhcmdzLi4uKQpAQCAtNjA1LDEyICs2MDIsMTIgQEAKIAogLy8gQW5kIFByZWRpY2F0ZSByZXR1cm5zIGEgUHJlZGljYXRlIGNvbXBvc2VkIG9mIHR3byBwcmVkaWNhdGVzIChsb2dpY2FsIEFORCBvZiB0aGVtKS4KIGZ1bmMgKHBwICpwKSBBbmQoYXJncyAuLi5pbnRlcmZhY2V7fSkgUHJlZGljYXRlIHsKLQlyZXR1cm4gbmV3UFdpdGhQKCJhbmQiLCAqcHAsIGFyZ3MuLi4pCisJcmV0dXJuIG5ld1BXaXRoUCgiYW5kIiwgcHAsIGFyZ3MuLi4pCiB9CiAKIC8vIE9yIFByZWRpY2F0ZSByZXR1cm5zIGEgUHJlZGljYXRlIGNvbXBvc2VkIG9mIHR3byBwcmVkaWNhdGVzIChsb2dpY2FsIE9SIG9mIHRoZW0pLgogZnVuYyAocHAgKnApIE9yKGFyZ3MgLi4uaW50ZXJmYWNle30pIFByZWRpY2F0ZSB7Ci0JcmV0dXJuIG5ld1BXaXRoUCgib3IiLCAqcHAsIGFyZ3MuLi4pCisJcmV0dXJuIG5ld1BXaXRoUCgib3IiLCBwcCwgYXJncy4uLikKIH0KIAogdHlwZSBUZXh0UHJlZGljYXRlIGludGVyZmFjZSB7CkBAIC03MzAsNyArNzI3LDcgQEAKIAlNYXA6ICAgICAxLAogfQogCi10eXBlIGlvIHN0cnVjdCB7Cit0eXBlIGlvY29uZmlnIHN0cnVjdCB7CiAJR3JhcGhzb24gc3RyaW5nCiAJR3J5byAgICAgc3RyaW5nCiAJR3JhcGhtbCAgc3RyaW5nCkBAIC03MzksNDAgKzczNiwxNCBAQAogCVJlZ2lzdHJ5IHN0cmluZwogfQogCi0vLyBJTyBob2xkcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHRoZSBHcmFwaFRyYXZlcnNhbC5pby4KLXZhciBJTyA9IGlveworLy8gSU8gaG9sZHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byB0aGUgR3JhcGhUcmF2ZXJzYWwuaW9jb25maWcuCit2YXIgSU8gPSBpb2NvbmZpZ3sKIAlHcmFwaHNvbjogImdyYXBoc29uIiwKIAlHcnlvOiAgICAgImdyeW8iLAogCUdyYXBobWw6ICAiZ3JhcGhtbCIsCi0JUmVhZGVyOiAgICJ+dGlua2VycG9wLmlvLnJlYWRlciIsCi0JV3JpdGVyOiAgICJ+dGlua2VycG9wLmlvLndyaXRlciIsCi0JUmVnaXN0cnk6ICJ+dGlua2VycG9wLmlvLnJlZ2lzdHJ5IiwKLX0KLQotLy8gTWV0cmljcyBob2xkcyBtZXRyaWNzIGRhdGE7IHR5cGljYWxseSBmb3IgLnByb2ZpbGUoKS1zdGVwIGFuYWx5c2lzLiBNZXRyaWNzIG1heSBiZSBuZXN0ZWQuIE5lc3RpbmcgZW5hYmxlcwotLy8gdGhlIGFiaWxpdHkgdG8gY2FwdHVyZSBleHBsaWNpdCBtZXRyaWNzIGZvciBtdWx0aXBsZSBkaXN0aW5jdCBvcGVyYXRpb25zLiBBbm5vdGF0aW9ucyBhcmUgdXNlZCB0byBzdG9yZQotLy8gbWlzY2VsbGFuZW91cyBub3RlcyB0aGF0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhIGRldmVsb3BlciB3aGVuIGV4YW1pbmluZyByZXN1bHRzLCBzdWNoIGFzIGluZGV4IGNvdmVyYWdlCi0vLyBmb3IgU3RlcHMgaW4gYSBUcmF2ZXJzYWwuCi10eXBlIE1ldHJpY3Mgc3RydWN0IHsKLQlJZCAgIHN0cmluZwotCU5hbWUgc3RyaW5nCi0JLy8gdGhlIGR1cmF0aW9uIGluIG5hbm9zZWNvbmRzLgotCUR1cmF0aW9uICAgICAgaW50NjQKLQlDb3VudHMgICAgICAgIG1hcFtzdHJpbmddaW50NjQKLQlBbm5vdGF0aW9ucyAgIG1hcFtzdHJpbmddaW50ZXJmYWNle30KLQlOZXN0ZWRNZXRyaWNzIFtdTWV0cmljcwotfQotCi0vLyBUcmF2ZXJzYWxNZXRyaWNzIGNvbnRhaW5zIHRoZSBNZXRyaWNzIGdhdGhlcmVkIGZvciBhIFRyYXZlcnNhbCBhcyB0aGUgcmVzdWx0IG9mIHRoZSAucHJvZmlsZSgpLXN0ZXAuCi10eXBlIFRyYXZlcnNhbE1ldHJpY3Mgc3RydWN0IHsKLQkvLyB0aGUgZHVyYXRpb24gaW4gbmFub3NlY29uZHMuCi0JRHVyYXRpb24gaW50NjQKLQlNZXRyaWNzICBbXU1ldHJpY3MKLX0KLQotLy8gR3JlbWxpblR5cGUgcmVwcmVzZW50cyB0aGUgR3JhcGhCaW5hcnkgdHlwZSBDbGFzcyB3aGljaCBjYW4gYmUgdXNlZCB0byBzZXJpYWxpemUgYSBjbGFzcy4KLXR5cGUgR3JlbWxpblR5cGUgc3RydWN0IHsKLQlGcWNuIHN0cmluZworCVJlYWRlcjogICAifnRpbmtlcnBvcC5pb2NvbmZpZy5yZWFkZXIiLAorCVdyaXRlcjogICAifnRpbmtlcnBvcC5pb2NvbmZpZy53cml0ZXIiLAorCVJlZ2lzdHJ5OiAifnRpbmtlcnBvcC5pb2NvbmZpZy5yZWdpc3RyeSIsCiB9CiAKIC8vIEJpZ0RlY2ltYWwgcmVwcmVzZW50cyBhbiBhcmJpdHJhcnktcHJlY2lzaW9uIHNpZ25lZCBkZWNpbWFsIG51bWJlciwgY29uc2lzdGluZyBvZiBhbiBhcmJpdHJhcnkgcHJlY2lzaW9uIGludGVnZXIKQEAgLTc4Miw2ICs3NTMsMTggQEAKIAlVbnNjYWxlZFZhbHVlICpiaWcuSW50CiB9CiAKK2Z1bmMgKGJkICpCaWdEZWNpbWFsKSBWYWx1ZSgpICpiaWcuRmxvYXQgeworCS8vIENyZWF0ZSB0aGUgZGl2aXNvcjogMTBec2NhbGUKKwlkaXZpc29yIDo9IG5ldyhiaWcuSW50KS5FeHAoYmlnLk5ld0ludCgxMCksIGJpZy5OZXdJbnQoaW50NjQoYmQuU2NhbGUpKSwgbmlsKQorCisJLy8gQ29udmVydCB1bnNjYWxlZCB2YWx1ZSBhbmQgZGl2aXNvciB0byBiaWcuRmxvYXQKKwl1bnNjYWxlZCA6PSBuZXcoYmlnLkZsb2F0KS5TZXRJbnQoYmQuVW5zY2FsZWRWYWx1ZSkKKwlkaXYgOj0gbmV3KGJpZy5GbG9hdCkuU2V0SW50KGRpdmlzb3IpCisKKwkvLyBEaXZpZGU6IHVuc2NhbGVkVmFsdWUgLyAxMF5zY2FsZQorCXJldHVybiBuZXcoYmlnLkZsb2F0KS5RdW8odW5zY2FsZWQsIGRpdikKK30KKwogLy8gUGFyc2VCaWdEZWNpbWFsIGNyZWF0ZXMgYSBCaWdEZWNpbWFsIGZyb20gYSBzdHJpbmcgdmFsdWUuCiBmdW5jIFBhcnNlQmlnRGVjaW1hbChzdHJWYWx1ZSBzdHJpbmcpICpCaWdEZWNpbWFsIHsKIAl2YWwgOj0gJkJpZ0RlY2ltYWx7fQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvdHJhdmVyc2FsX3Rlc3QuZ28gYi9ncmVtbGluLWdvL2RyaXZlci90cmF2ZXJzYWxfdGVzdC5nbwppbmRleCAxNjEyZDQ1Li5lMDc5NTU2IDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2RyaXZlci90cmF2ZXJzYWxfdGVzdC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci90cmF2ZXJzYWxfdGVzdC5nbwpAQCAtMzEsMzY2ICszMSwzNDMgQEAKIGZ1bmMgVGVzdFRyYXZlcnNhbCh0ICp0ZXN0aW5nLlQpIHsKIAogCXQuUnVuKCJUZXN0IGNsb25lIHRyYXZlcnNhbCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gY2xvbmVHcmFwaFRyYXZlcnNhbFNvdXJjZSgmR3JhcGh7fSwgTmV3Qnl0ZWNvZGUobmlsKSwgbmlsKQorCQlnIDo9IGNsb25lR3JhcGhUcmF2ZXJzYWxTb3VyY2UoJkdyYXBoe30sIE5ld0dyZW1saW5MYW5nKG5pbCksIG5pbCkKIAkJb3JpZ2luYWwgOj0gZy5WKCkuT3V0KCJjcmVhdGVkIikKIAkJY2xvbmUgOj0gb3JpZ2luYWwuQ2xvbmUoKS5PdXQoImtub3dzIikKIAkJY2xvbmVDbG9uZSA6PSBjbG9uZS5DbG9uZSgpLk91dCgiY3JlYXRlZCIpCiAKLQkJYXNzZXJ0LkVxdWFsKHQsIDIsIGxlbihvcmlnaW5hbC5CeXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIDMsIGxlbihjbG9uZS5CeXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIDQsIGxlbihjbG9uZUNsb25lLkJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnMpKQorCQlhc3NlcnQuRXF1YWwodCwgImcuVigpLm91dChcImNyZWF0ZWRcIikiLCBvcmlnaW5hbC5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCkpCisJCWFzc2VydC5FcXVhbCh0LCAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5vdXQoXCJrbm93c1wiKSIsIGNsb25lLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm91dChcImtub3dzXCIpLm91dChcImNyZWF0ZWRcIikiLCBjbG9uZUNsb25lLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKIAogCQlvcmlnaW5hbC5IYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikKIAkJY2xvbmUuVigpLk91dCgpCiAKLQkJYXNzZXJ0LkVxdWFsKHQsIDMsIGxlbihvcmlnaW5hbC5CeXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIDUsIGxlbihjbG9uZS5CeXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIDQsIGxlbihjbG9uZUNsb25lLkJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnMpKQorCQlhc3NlcnQuRXF1YWwodCwgImcuVigpLm91dChcImNyZWF0ZWRcIikuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKSIsIG9yaWdpbmFsLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm91dChcImtub3dzXCIpLlYoKS5vdXQoKSIsIGNsb25lLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm91dChcImtub3dzXCIpLm91dChcImNyZWF0ZWRcIikiLCBjbG9uZUNsb25lLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKIAl9KQogCiAJdC5SdW4oIlRlc3QgSXRlcmF0ZSB3aXRoIGVtcHR5IHJlbW92ZUNvbm5lY3Rpb24iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQlnIDo9IE5ld0dyYXBoVHJhdmVyc2FsU291cmNlKCZHcmFwaHt9LCBuaWwsIE5ld0J5dGVjb2RlKG5pbCkpCisJCWcgOj0gTmV3R3JhcGhUcmF2ZXJzYWxTb3VyY2UoJkdyYXBoe30sIG5pbCwgTmV3R3JlbWxpbkxhbmcobmlsKSkKIAogCQlwcm9taXNlIDo9IGcuVigpLkNvdW50KCkuSXRlcmF0ZSgpCiAJCWFzc2VydC5Ob3ROaWwodCwgPC1wcm9taXNlKQogCX0pCiAKLQl0LlJ1bigiVGVzdCB0cmF2ZXJzYWwgd2l0aCBiaW5kaW5ncyIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCWcgOj0gY2xvbmVHcmFwaFRyYXZlcnNhbFNvdXJjZSgmR3JhcGh7fSwgTmV3Qnl0ZWNvZGUobmlsKSwgbmlsKQotCQlieXRlY29kZSA6PSBnLlYoKCZCaW5kaW5nc3t9KS5PZigiYSIsIFtdaW50MzJ7MSwgMiwgM30pKS4KLQkJCU91dCgoJkJpbmRpbmdze30pLk9mKCJiIiwgImNyZWF0ZWQiKSkuCi0JCQlXaGVyZShUX18uSW4oKCZCaW5kaW5nc3t9KS5PZigiYyIsICJjcmVhdGVkIiksICgmQmluZGluZ3N7fSkuT2YoImQiLCAia25vd3MiKSkuCi0JCQkJQ291bnQoKS5JcygoJkJpbmRpbmdze30pLk9mKCJlIiwgUC5HdCgyKSkpKS5CeXRlY29kZQotCQlhc3NlcnQuRXF1YWwodCwgNSwgbGVuKGJ5dGVjb2RlLmJpbmRpbmdzKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIFtdaW50MzJ7MSwgMiwgM30sIGJ5dGVjb2RlLmJpbmRpbmdzWyJhIl0pCi0JCWFzc2VydC5FcXVhbCh0LCAiY3JlYXRlZCIsIGJ5dGVjb2RlLmJpbmRpbmdzWyJiIl0pCi0JCWFzc2VydC5FcXVhbCh0LCAiY3JlYXRlZCIsIGJ5dGVjb2RlLmJpbmRpbmdzWyJjIl0pCi0JCWFzc2VydC5FcXVhbCh0LCAia25vd3MiLCBieXRlY29kZS5iaW5kaW5nc1siZCJdKQotCQlhc3NlcnQuRXF1YWwodCwgUC5HdCgyKSwgYnl0ZWNvZGUuYmluZGluZ3NbImUiXSkKLQkJYXNzZXJ0LkVxdWFsKHQsICZCaW5kaW5newotCQkJS2V5OiAgICJiIiwKLQkJCVZhbHVlOiAiY3JlYXRlZCIsCi0JCX0sIGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMV0uYXJndW1lbnRzWzBdKQotCQlhc3NlcnQuRXF1YWwodCwgImJpbmRpbmdbYj1jcmVhdGVkXSIsIGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMV0uYXJndW1lbnRzWzBdLigqQmluZGluZykuU3RyaW5nKCkpCi0JfSkKLQotCXQuUnVuKCJUZXN0IFRyYW5zYWN0aW9uIGNvbW1pdCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgotCQlyZW1vdGUgOj0gbmV3Q29ubmVjdGlvbih0KQotCQlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKLQkJc3RhcnRDb3VudCA6PSBnZXRDb3VudCh0LCBnKQotCQl0eCA6PSBnLlR4KCkKLQotCQkvLyBFeGNlcHQgdHJhbnNhY3Rpb24gdG8gbm90IGJlIG9wZW4gdW50aWwgYmVnaW4gaXMgY2FsbGVkLgotCQlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCi0JCWd0eCwgXyA6PSB0eC5CZWdpbigpCi0JCWFzc2VydC5UcnVlKHQsIHR4LklzT3BlbigpKQotCi0JCWFkZFYodCwgZ3R4LCAibHluZG9uIikKLQkJYWRkVih0LCBndHgsICJ2YWxlbnR5biIpCi0JCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50LCBnZXRDb3VudCh0LCBnKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMiwgZ2V0Q291bnQodCwgZ3R4KSkKLQotCQkvLyBDb21taXQgdGhlIHRyYW5zYWN0aW9uLCB0aGlzIHNob3VsZCBjbG9zZSBpdC4KLQkJLy8gT3VyIHZlcnRleCBjb3VudCBvdXRzaWRlIHRoZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgMiArIHRoZSBzdGFydCBjb3VudC4KLQkJZXJyIDo9IHR4LkNvbW1pdCgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCi0JCWFzc2VydC5GYWxzZSh0LCB0eC5Jc09wZW4oKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMiwgZ2V0Q291bnQodCwgZykpCi0KLQkJZHJvcEdyYXBoQ2hlY2tDb3VudCh0LCBnKQotCQl2ZXJpZnlHdHhDbG9zZWQodCwgZ3R4KQotCX0pCi0KLQl0LlJ1bigiVGVzdCBUcmFuc2FjdGlvbiByb2xsYmFjayIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgotCQlyZW1vdGUgOj0gbmV3Q29ubmVjdGlvbih0KQotCQlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKLQkJc3RhcnRDb3VudCA6PSBnZXRDb3VudCh0LCBnKQotCQl0eCA6PSBnLlR4KCkKLQotCQkvLyBFeGNlcHQgdHJhbnNhY3Rpb24gdG8gbm90IGJlIG9wZW4gdW50aWwgYmVnaW4gaXMgY2FsbGVkLgotCQlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCi0JCWd0eCwgXyA6PSB0eC5CZWdpbigpCi0JCWFzc2VydC5UcnVlKHQsIHR4LklzT3BlbigpKQotCi0JCWFkZFYodCwgZ3R4LCAibHluZG9uIikKLQkJYWRkVih0LCBndHgsICJ2YWxlbnR5biIpCi0JCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50LCBnZXRDb3VudCh0LCBnKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMiwgZ2V0Q291bnQodCwgZ3R4KSkKLQotCQkvLyBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24sIHRoaXMgc2hvdWxkIGNsb3NlIGl0LgotCQkvLyBPdXIgdmVydGV4IGNvdW50IG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSB0aGUgc3RhcnQgY291bnQuCi0JCWVyciA6PSB0eC5Sb2xsYmFjaygpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCi0JCWFzc2VydC5GYWxzZSh0LCB0eC5Jc09wZW4oKSkKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQsIGdldENvdW50KHQsIGcpKQotCi0JCWRyb3BHcmFwaENoZWNrQ291bnQodCwgZykKLQkJdmVyaWZ5R3R4Q2xvc2VkKHQsIGd0eCkKLQl9KQotCi0JdC5SdW4oIlRlc3QgVHJhbnNhY3Rpb24gZmxvd3MiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkvLyBTdGFydCBhIHRyYW5zYWN0aW9uIHRyYXZlcnNhbC4KLQkJcmVtb3RlIDo9IG5ld0Nvbm5lY3Rpb24odCkKLQkJZyA6PSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCi0JCXR4IDo9IGcuVHgoKQotCQlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCi0KLQkJLy8gQ29tbWl0IHNob3VsZCByZXR1cm4gZXJyb3Igd2hlbiB0cmFuc2FjdGlvbiBub3Qgc3RhcnRlZAotCQllcnIgOj0gdHguQ29tbWl0KCkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0KLQkJLy8gUm9sbGJhY2sgc2hvdWxkIHJldHVybiBlcnJvciB3aGVuIHRyYW5zYWN0aW9uIG5vdCBzdGFydGVkCi0JCWVyciA9IHR4LlJvbGxiYWNrKCkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0KLQkJLy8gQ3JlYXRlIHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgaXQgaXMgb3Blbi4KLQkJZ3R4LCBlcnIgOj0gdHguQmVnaW4oKQotCQlhc3NlcnQuTmlsKHQsIGVycikKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBndHgpCi0JCWFzc2VydC5UcnVlKHQsIHR4LklzT3BlbigpKQotCi0JCS8vIENhbid0IG9wZW4gaW5uZXIgdHJhbnNhY3Rpb24uCi0JCWlubmVyVHgsIGVyciA6PSBndHguVHgoKS5CZWdpbigpCi0JCWFzc2VydC5OaWwodCwgaW5uZXJUeCkKLQkJYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCi0KLQkJLy8gQ29tbWl0IHRoaXMgdW51c2VkIHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgaXQgaXMgbm8gbG9uZ2VyIG9wZW4uCi0JCWVyciA9IHR4LkNvbW1pdCgpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCi0KLQkJLy8gQ3JlYXRlIGFub3RoZXIgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeSBpdCBpcyBvcGVuLgotCQlndHgsIGVyciA9IHR4LkJlZ2luKCkKLQkJYXNzZXJ0Lk5pbCh0LCBlcnIpCi0JCWFzc2VydC5Ob3ROaWwodCwgZ3R4KQotCQlhc3NlcnQuVHJ1ZSh0LCB0eC5Jc09wZW4oKSkKLQotCQkvLyBSb2xsYmFjayB0aGlzIHVudXNlZCB0cmFuc2FjdGlvbiBhbmQgdmVyaWZ5IGl0IGlzIG5vIGxvbmdlciBvcGVuLgotCQllcnIgPSB0eC5Sb2xsYmFjaygpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCQlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCi0KLQkJLy8gc2Vzc2lvbnMgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiB0cmFuc2FjdGlvbiBjbG9zZWQKLQkJYXNzZXJ0LkVxdWFsKHQsIDAsIGxlbihyZW1vdGUuc3Bhd25lZFNlc3Npb25zKSkKLQl9KQotCi0JdC5SdW4oIlRlc3QgbXVsdGkgY29tbWl0IFRyYW5zYWN0aW9uIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJLy8gU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCi0JCXJlbW90ZSA6PSBuZXdDb25uZWN0aW9uKHQpCi0JCWcgOj0gVHJhdmVyc2FsXygpLldpdGgocmVtb3RlKQotCQlzdGFydENvdW50IDo9IGdldENvdW50KHQsIGcpCi0KLQkJLy8gQ3JlYXRlIHR3byB0cmFuc2FjdGlvbnMuCi0JCXR4MSA6PSBnLlR4KCkKLQkJdHgyIDo9IGcuVHgoKQotCi0JCS8vIEdlbmVyYXRlIHR3byBHcmFwaFRyYXZlcnNhbFNvdXJjZSdzIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdpdGggYmVnaW4uCi0JCWd0eDEsIF8gOj0gdHgxLkJlZ2luKCkKLQkJZ3R4MiwgXyA6PSB0eDIuQmVnaW4oKQotCQl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MSwgdHgyKQotCi0JCS8vIEFkZCBub2RlIHRvIGd0eDEsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDEsIG5vdCBndHgyLgotCQlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQsIHR4MSwgdHgyKQotCi0JCS8vIEFkZCBub2RlIHRvIGd0eDIsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDIsIG5vdCBndHgxCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4Miwgc3RhcnRDb3VudCwgc3RhcnRDb3VudCwgdHgxLCB0eDIpCi0KLQkJLy8gQWRkIG5vZGUgdG8gZ3R4MSwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4MSwgbm90IGd0eDIuIE5vdGUgcHJldmlvdXMgbm9kZSBhbHNvIGFkZGVkLgotCQlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQrMSwgdHgxLCB0eDIpCi0KLQkJdHgxLkNvbW1pdCgpCi0JCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSkKLQkJdmVyaWZ5VHhTdGF0ZSh0LCB0cnVlLCB0eDIpCi0JCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50KzIsIGdldENvdW50KHQsIGcpKQotCi0JCXR4Mi5Db21taXQoKQotCQl2ZXJpZnlUeFN0YXRlKHQsIGZhbHNlLCB0eDEsIHR4MikKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMywgZ2V0Q291bnQodCwgZykpCi0JfSkKLQotCXQuUnVuKCJUZXN0IG11bHRpIHJvbGxiYWNrIFRyYW5zYWN0aW9uIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJLy8gU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCi0JCXJlbW90ZSA6PSBuZXdDb25uZWN0aW9uKHQpCi0JCWcgOj0gVHJhdmVyc2FsXygpLldpdGgocmVtb3RlKQotCQlzdGFydENvdW50IDo9IGdldENvdW50KHQsIGcpCi0KLQkJLy8gQ3JlYXRlIHR3byB0cmFuc2FjdGlvbnMuCi0JCXR4MSA6PSBnLlR4KCkKLQkJdHgyIDo9IGcuVHgoKQotCi0JCS8vIEdlbmVyYXRlIHR3byBHcmFwaFRyYXZlcnNhbFNvdXJjZSdzIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdpdGggYmVnaW4uCi0JCWd0eDEsIF8gOj0gdHgxLkJlZ2luKCkKLQkJZ3R4MiwgXyA6PSB0eDIuQmVnaW4oKQotCQl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MSwgdHgyKQotCi0JCS8vIEFkZCBub2RlIHRvIGd0eDEsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDEsIG5vdCBndHgyLgotCQlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQsIHR4MSwgdHgyKQotCi0JCS8vIEFkZCBub2RlIHRvIGd0eDIsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDIsIG5vdCBndHgxCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4Miwgc3RhcnRDb3VudCwgc3RhcnRDb3VudCwgdHgxLCB0eDIpCi0KLQkJLy8gQWRkIG5vZGUgdG8gZ3R4MSwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4MSwgbm90IGd0eDIuIE5vdGUgcHJldmlvdXMgbm9kZSBhbHNvIGFkZGVkLgotCQlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQrMSwgdHgxLCB0eDIpCi0KLQkJdHgxLlJvbGxiYWNrKCkKLQkJdmVyaWZ5VHhTdGF0ZSh0LCBmYWxzZSwgdHgxKQotCQl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MikKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQsIGdldENvdW50KHQsIGcpKQotCi0JCXR4Mi5Sb2xsYmFjaygpCi0JCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSwgdHgyKQotCQlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCwgZ2V0Q291bnQodCwgZykpCi0JfSkKLQotCXQuUnVuKCJUZXN0IG11bHRpIGNvbW1pdCBhbmQgcm9sbGJhY2sgVHJhbnNhY3Rpb24iLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkvLyBTdGFydCBhIHRyYW5zYWN0aW9uIHRyYXZlcnNhbC4KLQkJcmVtb3RlIDo9IG5ld0Nvbm5lY3Rpb24odCkKLQkJZyA6PSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCi0JCXN0YXJ0Q291bnQgOj0gZ2V0Q291bnQodCwgZykKLQotCQkvLyBDcmVhdGUgdHdvIHRyYW5zYWN0aW9ucy4KLQkJdHgxIDo9IGcuVHgoKQotCQl0eDIgOj0gZy5UeCgpCi0KLQkJLy8gR2VuZXJhdGUgdHdvIEdyYXBoVHJhdmVyc2FsU291cmNlJ3MgZm9yIGVhY2ggdHJhbnNhY3Rpb24gd2l0aCBiZWdpbi4KLQkJZ3R4MSwgXyA6PSB0eDEuQmVnaW4oKQotCQlndHgyLCBfIDo9IHR4Mi5CZWdpbigpCi0JCXZlcmlmeVR4U3RhdGUodCwgdHJ1ZSwgdHgxLCB0eDIpCi0KLQkJLy8gQWRkIG5vZGUgdG8gZ3R4MSwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4MSwgbm90IGd0eDIuCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MSwgc3RhcnRDb3VudCwgc3RhcnRDb3VudCwgdHgxLCB0eDIpCi0KLQkJLy8gQWRkIG5vZGUgdG8gZ3R4Miwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4Miwgbm90IGd0eDEKLQkJYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgyLCBzdGFydENvdW50LCBzdGFydENvdW50LCB0eDEsIHR4MikKLQotCQkvLyBBZGQgbm9kZSB0byBndHgxLCB3aGljaCBzaG91bGQgYmUgdmlzaWJsZSB0byBndHgxLCBub3QgZ3R4Mi4gTm90ZSBwcmV2aW91cyBub2RlIGFsc28gYWRkZWQuCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MSwgc3RhcnRDb3VudCwgc3RhcnRDb3VudCsxLCB0eDEsIHR4MikKLQotCQl0eDEuQ29tbWl0KCkKLQkJdmVyaWZ5VHhTdGF0ZSh0LCBmYWxzZSwgdHgxKQotCQl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MikKLQkJYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMiwgZ2V0Q291bnQodCwgZykpCi0KLQkJdHgyLlJvbGxiYWNrKCkKLQkJdmVyaWZ5VHhTdGF0ZSh0LCBmYWxzZSwgdHgxLCB0eDIpCi0JCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50KzIsIGdldENvdW50KHQsIGcpKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBUcmFuc2FjdGlvbiBjbG9zZSIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgotCQlyZW1vdGUgOj0gbmV3Q29ubmVjdGlvbih0KQotCQlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKLQkJZHJvcEdyYXBoQ2hlY2tDb3VudCh0LCBnKQotCi0JCS8vIENyZWF0ZSB0d28gdHJhbnNhY3Rpb25zLgotCQl0eDEgOj0gZy5UeCgpCi0JCXR4MiA6PSBnLlR4KCkKLQotCQkvLyBHZW5lcmF0ZSB0d28gR3JhcGhUcmF2ZXJzYWxTb3VyY2UncyBmb3IgZWFjaCB0cmFuc2FjdGlvbiB3aXRoIGJlZ2luLgotCQlndHgxLCBfIDo9IHR4MS5CZWdpbigpCi0JCWd0eDIsIF8gOj0gdHgyLkJlZ2luKCkKLQkJdmVyaWZ5VHhTdGF0ZSh0LCB0cnVlLCB0eDEsIHR4MikKLQotCQkvLyBBZGQgc3R1ZmYgdG8gYm90aCBndHguCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MSwgMCwgMCwgdHgxLCB0eDIpCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMCwgdHgxLCB0eDIpCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMSwgdHgxLCB0eDIpCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMiwgdHgxLCB0eDIpCi0KLQkJLy8gc29tZW9uZSBnZXRzIGxhenkgYW5kIGRvZXNuJ3QgY29tbWl0L3JvbGxiYWNrIGFuZCBqdXN0IGNhbGxzIGNsb3NlKCkgLSB0aGUgZ3JhcGgKLQkJLy8gd2lsbCBkZWNpZGUgaG93IHRvIHRyZWF0IHRoZSB0cmFuc2FjdGlvbiwgYnV0IGZvciBuZW80ai9ncmVtbGluIHNlcnZlciBpbiB0aGlzCi0JCS8vIHRlc3QgY29uZmlndXJhdGlvbiBpdCBzaG91bGQgcm9sbGJhY2sKLQkJdHgxLkNsb3NlKCkKLQkJdHgyLkNsb3NlKCkKLQotCQl2ZXJpZnlHdHhDbG9zZWQodCwgZ3R4MSkKLQkJdmVyaWZ5R3R4Q2xvc2VkKHQsIGd0eDIpCi0KLQkJcmVtb3RlID0gbmV3Q29ubmVjdGlvbih0KQotCQlnID0gVHJhdmVyc2FsXygpLldpdGgocmVtb3RlKQotCQlhc3NlcnQuRXF1YWwodCwgaW50MzIoMCksIGdldENvdW50KHQsIGcpKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBUcmFuc2FjdGlvbiBjbG9zZSB0eCBmcm9tIHBhcmVudCIsIGZ1bmModCAqdGVzdGluZy5UKSB7Ci0JCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgotCQlyZW1vdGUgOj0gbmV3Q29ubmVjdGlvbih0KQotCQlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKLQkJZHJvcEdyYXBoQ2hlY2tDb3VudCh0LCBnKQotCi0JCS8vIENyZWF0ZSB0d28gdHJhbnNhY3Rpb25zLgotCQl0eDEgOj0gZy5UeCgpCi0JCXR4MiA6PSBnLlR4KCkKLQotCQkvLyBHZW5lcmF0ZSB0d28gR3JhcGhUcmF2ZXJzYWxTb3VyY2UncyBmb3IgZWFjaCB0cmFuc2FjdGlvbiB3aXRoIGJlZ2luLgotCQlndHgxLCBfIDo9IHR4MS5CZWdpbigpCi0JCWd0eDIsIF8gOj0gdHgyLkJlZ2luKCkKLQkJdmVyaWZ5VHhTdGF0ZSh0LCB0cnVlLCB0eDEsIHR4MikKLQotCQkvLyBBZGQgc3R1ZmYgdG8gYm90aCBndHguCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MSwgMCwgMCwgdHgxLCB0eDIpCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMCwgdHgxLCB0eDIpCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMSwgdHgxLCB0eDIpCi0JCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMiwgdHgxLCB0eDIpCi0KLQkJLy8gc29tZW9uZSBnZXRzIGxhenkgYW5kIGRvZXNuJ3QgY29tbWl0L3JvbGxiYWNrIGFuZCBqdXN0IGNhbGxzIENsb3NlKCkgYnV0IG9uIHRoZSBwYXJlbnQKLQkJLy8gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBmb3IgYWxsIHRoZSBzZXNzaW9uIHRoYXQgd2VyZSBjcmVhdGVkIHZpYSBUeCgpIC0gdGhlIGdyYXBoCi0JCS8vIHdpbGwgZGVjaWRlIGhvdyB0byB0cmVhdCB0aGUgdHJhbnNhY3Rpb24sIGJ1dCBmb3IgbmVvNGovZ3JlbWxpbiBzZXJ2ZXIgaW4gdGhpcwotCQkvLyB0ZXN0IGNvbmZpZ3VyYXRpb24gaXQgc2hvdWxkIHJvbGxiYWNrLgotCQlyZW1vdGUuQ2xvc2UoKQotCi0JCWFzc2VydC5GYWxzZSh0LCB0eDEuSXNPcGVuKCkpCi0JCWFzc2VydC5GYWxzZSh0LCB0eDIuSXNPcGVuKCkpCi0JCXZlcmlmeUd0eENsb3NlZCh0LCBndHgxKQotCQl2ZXJpZnlHdHhDbG9zZWQodCwgZ3R4MikKLQotCQlyZW1vdGUgPSBuZXdDb25uZWN0aW9uKHQpCi0JCWcgPSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCi0JCWFzc2VydC5FcXVhbCh0LCBpbnQzMigwKSwgZ2V0Q291bnQodCwgZykpCi0JfSkKLQotCXQuUnVuKCJUZXN0IGNvbW1pdCBpZiBubyB0cmFuc2FjdGlvbiBzdGFydGVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJLy8gU3RhcnQgYSB0cmF2ZXJzYWwuCi0JCWcgOj0gbmV3V2l0aE9wdGlvbnNDb25uZWN0aW9uKHQpCi0KLQkJLy8gQ3JlYXRlIHRyYW5zYWN0aW9ucwotCQl0eCA6PSBnLlR4KCkKLQotCQkvLyB0cnkgdG8gY29tbWl0Ci0JCWVyciA6PSB0eC5Db21taXQoKQotCQlhc3NlcnQuRXF1YWwodCwgIkUxMTAzOiBjYW5ub3QgY29tbWl0IGEgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3Qgc3RhcnRlZCIsIGVyci5FcnJvcigpKQotCX0pCi0KLQl0LlJ1bigiVGVzdCByb2xsYmFjayBpZiBubyB0cmFuc2FjdGlvbiBzdGFydGVkIiwgZnVuYyh0ICp0ZXN0aW5nLlQpIHsKLQkJLy8gU3RhcnQgYSB0cmF2ZXJzYWwuCi0JCWcgOj0gbmV3V2l0aE9wdGlvbnNDb25uZWN0aW9uKHQpCi0KLQkJLy8gQ3JlYXRlIHRyYW5zYWN0aW9ucwotCQl0eCA6PSBnLlR4KCkKLQotCQkvLyB0cnkgdG8gcm9sbGJhY2sKLQkJZXJyIDo9IHR4LlJvbGxiYWNrKCkKLQkJYXNzZXJ0LkVxdWFsKHQsICJFMTEwMjogY2Fubm90IHJvbGxiYWNrIGEgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3Qgc3RhcnRlZCIsIGVyci5FcnJvcigpKQotCX0pCi0KLQl0LlJ1bigiVGVzdCBjb21taXQgaWYgbm8gdHJhbnNhY3Rpb24gc3VwcG9ydCBmb3IgR3JhcGgiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewotCQkvLyBTdGFydCBhIHRyYXZlcnNhbC4KLQkJZyA6PSBuZXdXaXRoT3B0aW9uc0Nvbm5lY3Rpb24odCkKLQotCQkvLyBDcmVhdGUgdHJhbnNhY3Rpb25zCi0JCXR4IDo9IGcuVHgoKQotCi0JCV8sIGVyciA6PSB0eC5CZWdpbigpCi0JCWFzc2VydC5OaWwodCwgZXJyKQotCi0JCS8vIHRyeSB0byBjb21taXQKLQkJZXJyID0gdHguQ29tbWl0KCkKLQkJYXNzZXJ0LlRydWUodCwgc3RyaW5ncy5IYXNQcmVmaXgoZXJyLkVycm9yKCksCi0JCQkiRTA1MDI6IGVycm9yIGluIHJlYWQgbG9vcCwgZXJyb3IgbWVzc2FnZSAne2NvZGU6MjQ0IG1lc3NhZ2U6R3JhcGggZG9lcyBub3Qgc3VwcG9ydCB0cmFuc2FjdGlvbnMiKSkKLQl9KQorCS8vIFRPRE8gZW5hYmxlIHdoZW4gdHJhbnNhY3Rpb24gaXMgaW1wbGVtZW50ZWQKKwkvL3QuUnVuKCJUZXN0IFRyYW5zYWN0aW9uIGNvbW1pdCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJLy8JLy8gU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCisJLy8JcmVtb3RlIDo9IG5ld0Nvbm5lY3Rpb24odCkKKwkvLwlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKKwkvLwlzdGFydENvdW50IDo9IGdldENvdW50KHQsIGcpCisJLy8JdHggOj0gZy5UeCgpCisJLy8KKwkvLwkvLyBFeGNlcHQgdHJhbnNhY3Rpb24gdG8gbm90IGJlIG9wZW4gdW50aWwgYmVnaW4gaXMgY2FsbGVkLgorCS8vCWFzc2VydC5GYWxzZSh0LCB0eC5Jc09wZW4oKSkKKwkvLwlndHgsIF8gOj0gdHguQmVnaW4oKQorCS8vCWFzc2VydC5UcnVlKHQsIHR4LklzT3BlbigpKQorCS8vCisJLy8JYWRkVih0LCBndHgsICJseW5kb24iKQorCS8vCWFkZFYodCwgZ3R4LCAidmFsZW50eW4iKQorCS8vCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50LCBnZXRDb3VudCh0LCBnKSkKKwkvLwlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCsyLCBnZXRDb3VudCh0LCBndHgpKQorCS8vCisJLy8JLy8gQ29tbWl0IHRoZSB0cmFuc2FjdGlvbiwgdGhpcyBzaG91bGQgY2xvc2UgaXQuCisJLy8JLy8gT3VyIHZlcnRleCBjb3VudCBvdXRzaWRlIHRoZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgMiArIHRoZSBzdGFydCBjb3VudC4KKwkvLwllcnIgOj0gdHguQ29tbWl0KCkKKwkvLwlhc3NlcnQuTmlsKHQsIGVycikKKwkvLworCS8vCWFzc2VydC5GYWxzZSh0LCB0eC5Jc09wZW4oKSkKKwkvLwlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCsyLCBnZXRDb3VudCh0LCBnKSkKKwkvLworCS8vCWRyb3BHcmFwaENoZWNrQ291bnQodCwgZykKKwkvLwl2ZXJpZnlHdHhDbG9zZWQodCwgZ3R4KQorCS8vfSkKKwkvLworCS8vdC5SdW4oIlRlc3QgVHJhbnNhY3Rpb24gcm9sbGJhY2siLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgorCS8vCXJlbW90ZSA6PSBuZXdDb25uZWN0aW9uKHQpCisJLy8JZyA6PSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCisJLy8Jc3RhcnRDb3VudCA6PSBnZXRDb3VudCh0LCBnKQorCS8vCXR4IDo9IGcuVHgoKQorCS8vCisJLy8JLy8gRXhjZXB0IHRyYW5zYWN0aW9uIHRvIG5vdCBiZSBvcGVuIHVudGlsIGJlZ2luIGlzIGNhbGxlZC4KKwkvLwlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCisJLy8JZ3R4LCBfIDo9IHR4LkJlZ2luKCkKKwkvLwlhc3NlcnQuVHJ1ZSh0LCB0eC5Jc09wZW4oKSkKKwkvLworCS8vCWFkZFYodCwgZ3R4LCAibHluZG9uIikKKwkvLwlhZGRWKHQsIGd0eCwgInZhbGVudHluIikKKwkvLwlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCwgZ2V0Q291bnQodCwgZykpCisJLy8JYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMiwgZ2V0Q291bnQodCwgZ3R4KSkKKwkvLworCS8vCS8vIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiwgdGhpcyBzaG91bGQgY2xvc2UgaXQuCisJLy8JLy8gT3VyIHZlcnRleCBjb3VudCBvdXRzaWRlIHRoZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgdGhlIHN0YXJ0IGNvdW50LgorCS8vCWVyciA6PSB0eC5Sb2xsYmFjaygpCisJLy8JYXNzZXJ0Lk5pbCh0LCBlcnIpCisJLy8KKwkvLwlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCisJLy8JYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQsIGdldENvdW50KHQsIGcpKQorCS8vCisJLy8JZHJvcEdyYXBoQ2hlY2tDb3VudCh0LCBnKQorCS8vCXZlcmlmeUd0eENsb3NlZCh0LCBndHgpCisJLy99KQorCS8vCisJLy90LlJ1bigiVGVzdCBUcmFuc2FjdGlvbiBmbG93cyIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJLy8JLy8gU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCisJLy8JcmVtb3RlIDo9IG5ld0Nvbm5lY3Rpb24odCkKKwkvLwlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKKwkvLwl0eCA6PSBnLlR4KCkKKwkvLwlhc3NlcnQuRmFsc2UodCwgdHguSXNPcGVuKCkpCisJLy8KKwkvLwkvLyBDb21taXQgc2hvdWxkIHJldHVybiBlcnJvciB3aGVuIHRyYW5zYWN0aW9uIG5vdCBzdGFydGVkCisJLy8JZXJyIDo9IHR4LkNvbW1pdCgpCisJLy8JYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJLy8KKwkvLwkvLyBSb2xsYmFjayBzaG91bGQgcmV0dXJuIGVycm9yIHdoZW4gdHJhbnNhY3Rpb24gbm90IHN0YXJ0ZWQKKwkvLwllcnIgPSB0eC5Sb2xsYmFjaygpCisJLy8JYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJLy8KKwkvLwkvLyBDcmVhdGUgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeSBpdCBpcyBvcGVuLgorCS8vCWd0eCwgZXJyIDo9IHR4LkJlZ2luKCkKKwkvLwlhc3NlcnQuTmlsKHQsIGVycikKKwkvLwlhc3NlcnQuTm90TmlsKHQsIGd0eCkKKwkvLwlhc3NlcnQuVHJ1ZSh0LCB0eC5Jc09wZW4oKSkKKwkvLworCS8vCS8vIENhbid0IG9wZW4gaW5uZXIgdHJhbnNhY3Rpb24uCisJLy8JaW5uZXJUeCwgZXJyIDo9IGd0eC5UeCgpLkJlZ2luKCkKKwkvLwlhc3NlcnQuTmlsKHQsIGlubmVyVHgpCisJLy8JYXNzZXJ0Lk5vdE5pbCh0LCBlcnIpCisJLy8KKwkvLwkvLyBDb21taXQgdGhpcyB1bnVzZWQgdHJhbnNhY3Rpb24gYW5kIHZlcmlmeSBpdCBpcyBubyBsb25nZXIgb3Blbi4KKwkvLwllcnIgPSB0eC5Db21taXQoKQorCS8vCWFzc2VydC5OaWwodCwgZXJyKQorCS8vCWFzc2VydC5GYWxzZSh0LCB0eC5Jc09wZW4oKSkKKwkvLworCS8vCS8vIENyZWF0ZSBhbm90aGVyIHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgaXQgaXMgb3Blbi4KKwkvLwlndHgsIGVyciA9IHR4LkJlZ2luKCkKKwkvLwlhc3NlcnQuTmlsKHQsIGVycikKKwkvLwlhc3NlcnQuTm90TmlsKHQsIGd0eCkKKwkvLwlhc3NlcnQuVHJ1ZSh0LCB0eC5Jc09wZW4oKSkKKwkvLworCS8vCS8vIFJvbGxiYWNrIHRoaXMgdW51c2VkIHRyYW5zYWN0aW9uIGFuZCB2ZXJpZnkgaXQgaXMgbm8gbG9uZ2VyIG9wZW4uCisJLy8JZXJyID0gdHguUm9sbGJhY2soKQorCS8vCWFzc2VydC5OaWwodCwgZXJyKQorCS8vCWFzc2VydC5GYWxzZSh0LCB0eC5Jc09wZW4oKSkKKwkvL30pCisJLy8KKwkvL3QuUnVuKCJUZXN0IG11bHRpIGNvbW1pdCBUcmFuc2FjdGlvbiIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJLy8JLy8gU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCisJLy8JcmVtb3RlIDo9IG5ld0Nvbm5lY3Rpb24odCkKKwkvLwlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKKwkvLwlzdGFydENvdW50IDo9IGdldENvdW50KHQsIGcpCisJLy8KKwkvLwkvLyBDcmVhdGUgdHdvIHRyYW5zYWN0aW9ucy4KKwkvLwl0eDEgOj0gZy5UeCgpCisJLy8JdHgyIDo9IGcuVHgoKQorCS8vCisJLy8JLy8gR2VuZXJhdGUgdHdvIEdyYXBoVHJhdmVyc2FsU291cmNlJ3MgZm9yIGVhY2ggdHJhbnNhY3Rpb24gd2l0aCBiZWdpbi4KKwkvLwlndHgxLCBfIDo9IHR4MS5CZWdpbigpCisJLy8JZ3R4MiwgXyA6PSB0eDIuQmVnaW4oKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgdHJ1ZSwgdHgxLCB0eDIpCisJLy8KKwkvLwkvLyBBZGQgbm9kZSB0byBndHgxLCB3aGljaCBzaG91bGQgYmUgdmlzaWJsZSB0byBndHgxLCBub3QgZ3R4Mi4KKwkvLwlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQsIHR4MSwgdHgyKQorCS8vCisJLy8JLy8gQWRkIG5vZGUgdG8gZ3R4Miwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4Miwgbm90IGd0eDEKKwkvLwlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDIsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQsIHR4MSwgdHgyKQorCS8vCisJLy8JLy8gQWRkIG5vZGUgdG8gZ3R4MSwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4MSwgbm90IGd0eDIuIE5vdGUgcHJldmlvdXMgbm9kZSBhbHNvIGFkZGVkLgorCS8vCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MSwgc3RhcnRDb3VudCwgc3RhcnRDb3VudCsxLCB0eDEsIHR4MikKKwkvLworCS8vCXR4MS5Db21taXQoKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSkKKwkvLwl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MikKKwkvLwlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCsyLCBnZXRDb3VudCh0LCBnKSkKKwkvLworCS8vCXR4Mi5Db21taXQoKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSwgdHgyKQorCS8vCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50KzMsIGdldENvdW50KHQsIGcpKQorCS8vfSkKKwkvLworCS8vdC5SdW4oIlRlc3QgbXVsdGkgcm9sbGJhY2sgVHJhbnNhY3Rpb24iLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgorCS8vCXJlbW90ZSA6PSBuZXdDb25uZWN0aW9uKHQpCisJLy8JZyA6PSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCisJLy8Jc3RhcnRDb3VudCA6PSBnZXRDb3VudCh0LCBnKQorCS8vCisJLy8JLy8gQ3JlYXRlIHR3byB0cmFuc2FjdGlvbnMuCisJLy8JdHgxIDo9IGcuVHgoKQorCS8vCXR4MiA6PSBnLlR4KCkKKwkvLworCS8vCS8vIEdlbmVyYXRlIHR3byBHcmFwaFRyYXZlcnNhbFNvdXJjZSdzIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdpdGggYmVnaW4uCisJLy8JZ3R4MSwgXyA6PSB0eDEuQmVnaW4oKQorCS8vCWd0eDIsIF8gOj0gdHgyLkJlZ2luKCkKKwkvLwl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MSwgdHgyKQorCS8vCisJLy8JLy8gQWRkIG5vZGUgdG8gZ3R4MSwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4MSwgbm90IGd0eDIuCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgxLCBzdGFydENvdW50LCBzdGFydENvdW50LCB0eDEsIHR4MikKKwkvLworCS8vCS8vIEFkZCBub2RlIHRvIGd0eDIsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDIsIG5vdCBndHgxCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgyLCBzdGFydENvdW50LCBzdGFydENvdW50LCB0eDEsIHR4MikKKwkvLworCS8vCS8vIEFkZCBub2RlIHRvIGd0eDEsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDEsIG5vdCBndHgyLiBOb3RlIHByZXZpb3VzIG5vZGUgYWxzbyBhZGRlZC4KKwkvLwlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQrMSwgdHgxLCB0eDIpCisJLy8KKwkvLwl0eDEuUm9sbGJhY2soKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSkKKwkvLwl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MikKKwkvLwlhc3NlcnQuRXF1YWwodCwgc3RhcnRDb3VudCwgZ2V0Q291bnQodCwgZykpCisJLy8KKwkvLwl0eDIuUm9sbGJhY2soKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSwgdHgyKQorCS8vCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50LCBnZXRDb3VudCh0LCBnKSkKKwkvL30pCisJLy8KKwkvL3QuUnVuKCJUZXN0IG11bHRpIGNvbW1pdCBhbmQgcm9sbGJhY2sgVHJhbnNhY3Rpb24iLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgorCS8vCXJlbW90ZSA6PSBuZXdDb25uZWN0aW9uKHQpCisJLy8JZyA6PSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCisJLy8Jc3RhcnRDb3VudCA6PSBnZXRDb3VudCh0LCBnKQorCS8vCisJLy8JLy8gQ3JlYXRlIHR3byB0cmFuc2FjdGlvbnMuCisJLy8JdHgxIDo9IGcuVHgoKQorCS8vCXR4MiA6PSBnLlR4KCkKKwkvLworCS8vCS8vIEdlbmVyYXRlIHR3byBHcmFwaFRyYXZlcnNhbFNvdXJjZSdzIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdpdGggYmVnaW4uCisJLy8JZ3R4MSwgXyA6PSB0eDEuQmVnaW4oKQorCS8vCWd0eDIsIF8gOj0gdHgyLkJlZ2luKCkKKwkvLwl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MSwgdHgyKQorCS8vCisJLy8JLy8gQWRkIG5vZGUgdG8gZ3R4MSwgd2hpY2ggc2hvdWxkIGJlIHZpc2libGUgdG8gZ3R4MSwgbm90IGd0eDIuCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgxLCBzdGFydENvdW50LCBzdGFydENvdW50LCB0eDEsIHR4MikKKwkvLworCS8vCS8vIEFkZCBub2RlIHRvIGd0eDIsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDIsIG5vdCBndHgxCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgyLCBzdGFydENvdW50LCBzdGFydENvdW50LCB0eDEsIHR4MikKKwkvLworCS8vCS8vIEFkZCBub2RlIHRvIGd0eDEsIHdoaWNoIHNob3VsZCBiZSB2aXNpYmxlIHRvIGd0eDEsIG5vdCBndHgyLiBOb3RlIHByZXZpb3VzIG5vZGUgYWxzbyBhZGRlZC4KKwkvLwlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDEsIHN0YXJ0Q291bnQsIHN0YXJ0Q291bnQrMSwgdHgxLCB0eDIpCisJLy8KKwkvLwl0eDEuQ29tbWl0KCkKKwkvLwl2ZXJpZnlUeFN0YXRlKHQsIGZhbHNlLCB0eDEpCisJLy8JdmVyaWZ5VHhTdGF0ZSh0LCB0cnVlLCB0eDIpCisJLy8JYXNzZXJ0LkVxdWFsKHQsIHN0YXJ0Q291bnQrMiwgZ2V0Q291bnQodCwgZykpCisJLy8KKwkvLwl0eDIuUm9sbGJhY2soKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgZmFsc2UsIHR4MSwgdHgyKQorCS8vCWFzc2VydC5FcXVhbCh0LCBzdGFydENvdW50KzIsIGdldENvdW50KHQsIGcpKQorCS8vfSkKKwkvLworCS8vdC5SdW4oIlRlc3QgVHJhbnNhY3Rpb24gY2xvc2UiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCS8vIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgorCS8vCXJlbW90ZSA6PSBuZXdDb25uZWN0aW9uKHQpCisJLy8JZyA6PSBUcmF2ZXJzYWxfKCkuV2l0aChyZW1vdGUpCisJLy8JZHJvcEdyYXBoQ2hlY2tDb3VudCh0LCBnKQorCS8vCisJLy8JLy8gQ3JlYXRlIHR3byB0cmFuc2FjdGlvbnMuCisJLy8JdHgxIDo9IGcuVHgoKQorCS8vCXR4MiA6PSBnLlR4KCkKKwkvLworCS8vCS8vIEdlbmVyYXRlIHR3byBHcmFwaFRyYXZlcnNhbFNvdXJjZSdzIGZvciBlYWNoIHRyYW5zYWN0aW9uIHdpdGggYmVnaW4uCisJLy8JZ3R4MSwgXyA6PSB0eDEuQmVnaW4oKQorCS8vCWd0eDIsIF8gOj0gdHgyLkJlZ2luKCkKKwkvLwl2ZXJpZnlUeFN0YXRlKHQsIHRydWUsIHR4MSwgdHgyKQorCS8vCisJLy8JLy8gQWRkIHN0dWZmIHRvIGJvdGggZ3R4LgorCS8vCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MSwgMCwgMCwgdHgxLCB0eDIpCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgyLCAwLCAwLCB0eDEsIHR4MikKKwkvLwlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDIsIDAsIDEsIHR4MSwgdHgyKQorCS8vCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMiwgdHgxLCB0eDIpCisJLy8KKwkvLwkvLyBzb21lb25lIGdldHMgbGF6eSBhbmQgZG9lc24ndCBjb21taXQvcm9sbGJhY2sgYW5kIGp1c3QgY2FsbHMgY2xvc2UoKSAtIHRoZSBncmFwaAorCS8vCS8vIHdpbGwgZGVjaWRlIGhvdyB0byB0cmVhdCB0aGUgdHJhbnNhY3Rpb24KKwkvLwl0eDEuQ2xvc2UoKQorCS8vCXR4Mi5DbG9zZSgpCisJLy8KKwkvLwl2ZXJpZnlHdHhDbG9zZWQodCwgZ3R4MSkKKwkvLwl2ZXJpZnlHdHhDbG9zZWQodCwgZ3R4MikKKwkvLworCS8vCXJlbW90ZSA9IG5ld0Nvbm5lY3Rpb24odCkKKwkvLwlnID0gVHJhdmVyc2FsXygpLldpdGgocmVtb3RlKQorCS8vCWFzc2VydC5FcXVhbCh0LCBpbnQzMigwKSwgZ2V0Q291bnQodCwgZykpCisJLy99KQorCS8vCisJLy90LlJ1bigiVGVzdCBUcmFuc2FjdGlvbiBjbG9zZSB0eCBmcm9tIHBhcmVudCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJLy8JLy8gU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCisJLy8JcmVtb3RlIDo9IG5ld0Nvbm5lY3Rpb24odCkKKwkvLwlnIDo9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKKwkvLwlkcm9wR3JhcGhDaGVja0NvdW50KHQsIGcpCisJLy8KKwkvLwkvLyBDcmVhdGUgdHdvIHRyYW5zYWN0aW9ucy4KKwkvLwl0eDEgOj0gZy5UeCgpCisJLy8JdHgyIDo9IGcuVHgoKQorCS8vCisJLy8JLy8gR2VuZXJhdGUgdHdvIEdyYXBoVHJhdmVyc2FsU291cmNlJ3MgZm9yIGVhY2ggdHJhbnNhY3Rpb24gd2l0aCBiZWdpbi4KKwkvLwlndHgxLCBfIDo9IHR4MS5CZWdpbigpCisJLy8JZ3R4MiwgXyA6PSB0eDIuQmVnaW4oKQorCS8vCXZlcmlmeVR4U3RhdGUodCwgdHJ1ZSwgdHgxLCB0eDIpCisJLy8KKwkvLwkvLyBBZGQgc3R1ZmYgdG8gYm90aCBndHguCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgxLCAwLCAwLCB0eDEsIHR4MikKKwkvLwlhZGROb2RlVmFsaWRhdGVUcmFuc2FjdGlvblN0YXRlKHQsIGcsIGd0eDIsIDAsIDAsIHR4MSwgdHgyKQorCS8vCWFkZE5vZGVWYWxpZGF0ZVRyYW5zYWN0aW9uU3RhdGUodCwgZywgZ3R4MiwgMCwgMSwgdHgxLCB0eDIpCisJLy8JYWRkTm9kZVZhbGlkYXRlVHJhbnNhY3Rpb25TdGF0ZSh0LCBnLCBndHgyLCAwLCAyLCB0eDEsIHR4MikKKwkvLworCS8vCS8vIHNvbWVvbmUgZ2V0cyBsYXp5IGFuZCBkb2Vzbid0IGNvbW1pdC9yb2xsYmFjayBhbmQganVzdCBjYWxscyBDbG9zZSgpIGJ1dCBvbiB0aGUgcGFyZW50CisJLy8JLy8gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBmb3IgYWxsIHRoZSBzZXNzaW9uIHRoYXQgd2VyZSBjcmVhdGVkIHZpYSBUeCgpIC0gdGhlIGdyYXBoCisJLy8JLy8gd2lsbCBkZWNpZGUgaG93IHRvIHRyZWF0IHRoZSB0cmFuc2FjdGlvbgorCS8vCXJlbW90ZS5DbG9zZSgpCisJLy8KKwkvLwlhc3NlcnQuRmFsc2UodCwgdHgxLklzT3BlbigpKQorCS8vCWFzc2VydC5GYWxzZSh0LCB0eDIuSXNPcGVuKCkpCisJLy8JdmVyaWZ5R3R4Q2xvc2VkKHQsIGd0eDEpCisJLy8JdmVyaWZ5R3R4Q2xvc2VkKHQsIGd0eDIpCisJLy8KKwkvLwlyZW1vdGUgPSBuZXdDb25uZWN0aW9uKHQpCisJLy8JZyA9IFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKKwkvLwlhc3NlcnQuRXF1YWwodCwgaW50MzIoMCksIGdldENvdW50KHQsIGcpKQorCS8vfSkKKwkvLworCS8vdC5SdW4oIlRlc3QgY29tbWl0IGlmIG5vIHRyYW5zYWN0aW9uIHN0YXJ0ZWQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCS8vIFN0YXJ0IGEgdHJhdmVyc2FsLgorCS8vCWcgOj0gbmV3V2l0aE9wdGlvbnNDb25uZWN0aW9uKHQpCisJLy8KKwkvLwkvLyBDcmVhdGUgdHJhbnNhY3Rpb25zCisJLy8JdHggOj0gZy5UeCgpCisJLy8KKwkvLwkvLyB0cnkgdG8gY29tbWl0CisJLy8JZXJyIDo9IHR4LkNvbW1pdCgpCisJLy8JYXNzZXJ0LkVxdWFsKHQsICJFMTEwMzogY2Fubm90IGNvbW1pdCBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQiLCBlcnIuRXJyb3IoKSkKKwkvL30pCisJLy8KKwkvL3QuUnVuKCJUZXN0IHJvbGxiYWNrIGlmIG5vIHRyYW5zYWN0aW9uIHN0YXJ0ZWQiLCBmdW5jKHQgKnRlc3RpbmcuVCkgeworCS8vCS8vIFN0YXJ0IGEgdHJhdmVyc2FsLgorCS8vCWcgOj0gbmV3V2l0aE9wdGlvbnNDb25uZWN0aW9uKHQpCisJLy8KKwkvLwkvLyBDcmVhdGUgdHJhbnNhY3Rpb25zCisJLy8JdHggOj0gZy5UeCgpCisJLy8KKwkvLwkvLyB0cnkgdG8gcm9sbGJhY2sKKwkvLwllcnIgOj0gdHguUm9sbGJhY2soKQorCS8vCWFzc2VydC5FcXVhbCh0LCAiRTExMDI6IGNhbm5vdCByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQiLCBlcnIuRXJyb3IoKSkKKwkvL30pCisJLy8KKwkvL3QuUnVuKCJUZXN0IGNvbW1pdCBpZiBubyB0cmFuc2FjdGlvbiBzdXBwb3J0IGZvciBHcmFwaCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJLy8JLy8gU3RhcnQgYSB0cmF2ZXJzYWwuCisJLy8JZyA6PSBuZXdXaXRoT3B0aW9uc0Nvbm5lY3Rpb24odCkKKwkvLworCS8vCS8vIENyZWF0ZSB0cmFuc2FjdGlvbnMKKwkvLwl0eCA6PSBnLlR4KCkKKwkvLworCS8vCV8sIGVyciA6PSB0eC5CZWdpbigpCisJLy8JYXNzZXJ0Lk5pbCh0LCBlcnIpCisJLy8KKwkvLwkvLyB0cnkgdG8gY29tbWl0CisJLy8JZXJyID0gdHguQ29tbWl0KCkKKwkvLwlhc3NlcnQuVHJ1ZSh0LCBzdHJpbmdzLkhhc1ByZWZpeChlcnIuRXJyb3IoKSwKKwkvLwkJIkUwNTAyOiBlcnJvciBpbiByZWFkIGxvb3AsIGVycm9yIG1lc3NhZ2UgJ3tjb2RlOjI0NCBtZXNzYWdlOkdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zIikpCisJLy99KQogCiAJdC5SdW4oIlRlc3QgV2l0aE9wdGlvbnMuVG9rZW5zIFdpdGhPcHRpb25zLk5vbmUiLCBmdW5jKHQgKnRlc3RpbmcuVCkgewogCQlza2lwVGVzdHNJZk5vdEVuYWJsZWQodCwgaW50ZWdyYXRpb25UZXN0U3VpdGVOYW1lLCBnZXRFbnZPckRlZmF1bHRCb29sKCJSVU5fSU5URUdSQVRJT05fV0lUSF9BTElBU19URVNUUyIsIHRydWUpKQpAQCAtNDE5LDcgKzM5Niw3IEBACiAKIAkJLy8gRXhwZWN0IGVhY2ggcmVzdWx0IHRvIGNvbnRhaW4gYSBpZC4gTm8gYWRkaXRpb25hbCBpdGVtcy4KIAkJZm9yIF8sIHJlc3VsdCA6PSByYW5nZSByZXN1bHRzIHsKLQkJCWtleSwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pWyJpZCJdCisJCQlrZXksIG9rIDo9IHJlc3VsdC5HZXRJbnRlcmZhY2UoKS4obWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KVtULklkXQogCQkJYXNzZXJ0LlRydWUodCwgb2spCiAJCQlhc3NlcnQuTm90TmlsKHQsIGtleSkKIApAQCAtNDQwLDcgKzQxNyw3IEBACiAKIAkJLy8gRXhwZWN0IGVhY2ggcmVzdWx0IHRvIGNvbnRhaW4gYSBrZXkuIE5vIGFkZGl0aW9uYWwgaXRlbXMuCiAJCWZvciBfLCByZXN1bHQgOj0gcmFuZ2UgcmVzdWx0cyB7Ci0JCQlrZXksIG9rIDo9IHJlc3VsdC5HZXRJbnRlcmZhY2UoKS4obWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KVsia2V5Il0KKwkJCWtleSwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pW1QuS2V5XQogCQkJYXNzZXJ0LlRydWUodCwgb2spCiAJCQlhc3NlcnQuTm90TmlsKHQsIGtleSkKIApAQCAtNDYxLDcgKzQzOCw3IEBACiAKIAkJLy8gRXhwZWN0IGVhY2ggcmVzdWx0IHRvIGNvbnRhaW4gYSB2YWx1ZS4gTm8gYWRkaXRpb25hbCBpdGVtcy4KIAkJZm9yIF8sIHJlc3VsdCA6PSByYW5nZSByZXN1bHRzIHsKLQkJCWtleSwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pWyJ2YWx1ZSJdCisJCQlrZXksIG9rIDo9IHJlc3VsdC5HZXRJbnRlcmZhY2UoKS4obWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9KVtULlZhbHVlXQogCQkJYXNzZXJ0LlRydWUodCwgb2spCiAJCQlhc3NlcnQuTm90TmlsKHQsIGtleSkKIApAQCAtNDgyLDE1ICs0NTksMTUgQEAKIAogCQkvLyBFeHBlY3QgZWFjaCByZXN1bHQgdG8gY29udGFpbiBhbiBpZCwga2V5LCBhbmQgdmFsdWUuIE5vIGFkZGl0aW9uYWwgaXRlbXMuCiAJCWZvciBfLCByZXN1bHQgOj0gcmFuZ2UgcmVzdWx0cyB7Ci0JCQlpZCwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pWyJpZCJdCisJCQlpZCwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pW1QuSWRdCiAJCQlhc3NlcnQuVHJ1ZSh0LCBvaykKIAkJCWFzc2VydC5Ob3ROaWwodCwgaWQpCiAKLQkJCWtleSwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pWyJrZXkiXQorCQkJa2V5LCBvayA6PSByZXN1bHQuR2V0SW50ZXJmYWNlKCkuKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fSlbVC5LZXldCiAJCQlhc3NlcnQuVHJ1ZSh0LCBvaykKIAkJCWFzc2VydC5Ob3ROaWwodCwga2V5KQogCi0JCQl2YWx1ZSwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pWyJ2YWx1ZSJdCisJCQl2YWx1ZSwgb2sgOj0gcmVzdWx0LkdldEludGVyZmFjZSgpLihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle30pW1QuVmFsdWVdCiAJCQlhc3NlcnQuVHJ1ZSh0LCBvaykKIAkJCWFzc2VydC5Ob3ROaWwodCwgdmFsdWUpCiAKQEAgLTUyNSwxOCArNTAyLDU0IEBACiAJCWFzc2VydC5UcnVlKHQsIHJlc3VsdHNbMF0uR2V0VHlwZSgpLktpbmQoKSA9PSByZWZsZWN0Lk1hcCkKIAogCX0pCisKKwl0LlJ1bigiVGVzdCBzaG91bGQgZXh0cmFjdCBJRCBmcm9tIFZlcnRleCIsIGZ1bmModCAqdGVzdGluZy5UKSB7CisJCWcgOj0gY2xvbmVHcmFwaFRyYXZlcnNhbFNvdXJjZSgmR3JhcGh7fSwgTmV3R3JlbWxpbkxhbmcobmlsKSwgbmlsKQorCisJCS8vIFRlc3QgYmFzaWMgVigpIHN0ZXAgd2l0aCBtaXhlZCBJRCB0eXBlcworCQl2U3RhcnQgOj0gZy5WKDEsICZWZXJ0ZXh7RWxlbWVudDogRWxlbWVudHtJZDogMn19KQorCQlhc3NlcnQuRXF1YWwodCwgImcuVigxLDIpIiwgdlN0YXJ0LkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKKworCQkvLyBUZXN0IFYoKSBzdGVwIGluIHRoZSBtaWRkbGUgb2YgYSB0cmF2ZXJzYWwKKwkJdk1pZCA6PSBnLkluamVjdCgiZm9vIikuVigxLCAmVmVydGV4e0VsZW1lbnQ6IEVsZW1lbnR7SWQ6IDJ9fSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLmluamVjdChcImZvb1wiKS5WKDEsMikiLCB2TWlkLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSkKKworCQkvLyBUZXN0IGVkZ2UgY3JlYXRpb24gd2l0aCBmcm9tL3RvIHZlcnRpY2VzCisJCWZyb21UbyA6PSBnLkFkZEUoIkVkZ2UiKS5Gcm9tKCZWZXJ0ZXh7RWxlbWVudDogRWxlbWVudHtJZDogMX19KS5UbygmVmVydGV4e0VsZW1lbnQ6IEVsZW1lbnR7SWQ6IDJ9fSkKKwkJYXNzZXJ0LkVxdWFsKHQsICJnLmFkZEUoXCJFZGdlXCIpLmZyb20oX18uVigxKSkudG8oX18uVigyKSkiLCBmcm9tVG8uR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpKQorCisJCS8vIFRlc3QgbWVyZ2VFKCkgd2l0aCBWZXJ0ZXggaW4gbWFwCisJCW1lcmdlTWFwIDo9IG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsKKwkJCVQuTGFiZWw6ICAgICAgICJrbm93cyIsCisJCQlEaXJlY3Rpb24uT3V0OiAmVmVydGV4e0VsZW1lbnQ6IEVsZW1lbnR7SWQ6IDF9fSwKKwkJCURpcmVjdGlvbi5JbjogICZWZXJ0ZXh7RWxlbWVudDogRWxlbWVudHtJZDogMn19LAorCQl9CisKKwkJbWVyZ2VFU3RhcnQgOj0gZy5NZXJnZUUobWVyZ2VNYXApCisJCS8vIE5vIG9yZGVyIGd1YXJhbnRlZSBpbiBtYXAgYXJndW1lbnRzIHdoZW4gY3JlYXRpbmcgR3JlbWxpbkxhbmcsIGFzc2VydCBpbmRpdmlkdWFsbHkKKwkJYXNzZXJ0LlRydWUodCwgc3RyaW5ncy5IYXNQcmVmaXgobWVyZ2VFU3RhcnQuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpLCAiZy5tZXJnZUUoIikpCisJCWFzc2VydC5Db250YWlucyh0LCBtZXJnZUVTdGFydC5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCksICJsYWJlbDpcImtub3dzXCIiKQorCQlhc3NlcnQuQ29udGFpbnModCwgbWVyZ2VFU3RhcnQuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpLCAiRGlyZWN0aW9uLk9VVDoxIikKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIG1lcmdlRVN0YXJ0LkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSwgIkRpcmVjdGlvbi5JTjoyIikKKworCQkvLyBUZXN0IG1lcmdlRSgpIGluIHRoZSBtaWRkbGUgb2YgYSB0cmF2ZXJzYWwKKwkJbWVyZ2VFTWlkIDo9IGcuSW5qZWN0KCJmb28iKS5NZXJnZUUobWVyZ2VNYXApCisJCS8vIE5vIG9yZGVyIGd1YXJhbnRlZSBpbiBtYXAgYXJndW1lbnRzIHdoZW4gY3JlYXRpbmcgR3JlbWxpbkxhbmcsIGFzc2VydCBpbmRpdmlkdWFsbHkKKwkJYXNzZXJ0LlRydWUodCwgc3RyaW5ncy5IYXNQcmVmaXgobWVyZ2VFTWlkLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSwgImcuaW5qZWN0KFwiZm9vXCIpLm1lcmdlRSgiKSkKKwkJYXNzZXJ0LkNvbnRhaW5zKHQsIG1lcmdlRU1pZC5HcmVtbGluTGFuZy5HZXRHcmVtbGluKCksICJsYWJlbDpcImtub3dzXCIiKQorCQlhc3NlcnQuQ29udGFpbnModCwgbWVyZ2VFTWlkLkdyZW1saW5MYW5nLkdldEdyZW1saW4oKSwgIkRpcmVjdGlvbi5PVVQ6MSIpCisJCWFzc2VydC5Db250YWlucyh0LCBtZXJnZUVNaWQuR3JlbWxpbkxhbmcuR2V0R3JlbWxpbigpLCAiRGlyZWN0aW9uLklOOjIiKQorCX0pCiB9CiAKIGZ1bmMgbmV3V2l0aE9wdGlvbnNDb25uZWN0aW9uKHQgKnRlc3RpbmcuVCkgKkdyYXBoVHJhdmVyc2FsU291cmNlIHsKIAkvLyBObyBhdXRoZW50aWNhdGlvbiBpbnRlZ3JhdGlvbiB0ZXN0IHdpdGggZ3JhcGhzIGxvYWRlZCBhbmQgYWxpYXMgY29uZmlndXJlZCBzZXJ2ZXIKIAl0ZXN0Tm9BdXRoV2l0aEFsaWFzVXJsIDo9IGdldEVudk9yRGVmYXVsdFN0cmluZygiR1JFTUxJTl9TRVJWRVJfVVJMIiwgbm9BdXRoVXJsKQotCXRlc3ROb0F1dGhXaXRoQWxpYXNBdXRoSW5mbyA6PSAmQXV0aEluZm97fQogCXRlc3ROb0F1dGhXaXRoQWxpYXNUbHNDb25maWcgOj0gJnRscy5Db25maWd7fQogCiAJcmVtb3RlLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbih0ZXN0Tm9BdXRoV2l0aEFsaWFzVXJsLAogCQlmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKIAkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhXaXRoQWxpYXNUbHNDb25maWcKLQkJCXNldHRpbmdzLkF1dGhJbmZvID0gdGVzdE5vQXV0aFdpdGhBbGlhc0F1dGhJbmZvCiAJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSAiZ21vZGVybiIKIAkJfSkKIAlhc3NlcnQuTmlsKHQsIGVycikKQEAgLTU0NCwxNSArNTU3LDEzIEBACiAJcmV0dXJuIFRyYXZlcnNhbF8oKS5XaXRoKHJlbW90ZSkKIH0KIAotZnVuYyBuZXdDb25uZWN0aW9uKHQgKnRlc3RpbmcuVCkgKkRyaXZlclJlbW90ZUNvbm5lY3Rpb24geworZnVuYyBuZXdUZXN0UmVtb3RlQ29ubmVjdGlvbih0ICp0ZXN0aW5nLlQpICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHsKIAl0ZXN0Tm9BdXRoV2l0aEFsaWFzVXJsIDo9IGdldEVudk9yRGVmYXVsdFN0cmluZygiR1JFTUxJTl9TRVJWRVJfVVJMIiwgbm9BdXRoVXJsKQotCXRlc3ROb0F1dGhXaXRoQWxpYXNBdXRoSW5mbyA6PSAmQXV0aEluZm97fQogCXRlc3ROb0F1dGhXaXRoQWxpYXNUbHNDb25maWcgOj0gJnRscy5Db25maWd7fQogCiAJcmVtb3RlLCBlcnIgOj0gTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbih0ZXN0Tm9BdXRoV2l0aEFsaWFzVXJsLAogCQlmdW5jKHNldHRpbmdzICpEcml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKIAkJCXNldHRpbmdzLlRsc0NvbmZpZyA9IHRlc3ROb0F1dGhXaXRoQWxpYXNUbHNDb25maWcKLQkJCXNldHRpbmdzLkF1dGhJbmZvID0gdGVzdE5vQXV0aFdpdGhBbGlhc0F1dGhJbmZvCiAJCQlzZXR0aW5ncy5UcmF2ZXJzYWxTb3VyY2UgPSAiZ3R4IgogCQl9KQogCWFzc2VydC5OaWwodCwgZXJyKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9kcml2ZXIvdXNlcl9hZ2VudC5nbyBiL2dyZW1saW4tZ28vZHJpdmVyL3VzZXJfYWdlbnQuZ28KaW5kZXggMWM3MWVlOC4uN2ZlYzJiMCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9kcml2ZXIvdXNlcl9hZ2VudC5nbworKysgYi9ncmVtbGluLWdvL2RyaXZlci91c2VyX2FnZW50LmdvCkBAIC0yNyw3ICsyNyw3IEBACiApCiAKIC8qKgotICogVXNlciBBZ2VudCBib2R5IHRvIGJlIHNlbnQgaW4gd2ViIHNvY2tldCBoYW5kc2hha2UKKyAqIFVzZXIgQWdlbnQgaGVhZGVyIHRvIGJlIHNlbnQgaW4gdGhlIGh0dHAgcmVxdWVzdAogICogSGFzIHRoZSBmb3JtIG9mOgogICogW0FwcGxpY2F0aW9uIE5hbWVdIFtHTFYgTmFtZV0vW1ZlcnNpb25dIFtMYW5ndWFnZSBSdW50aW1lIFZlcnNpb25dIFtPU10vW1ZlcnNpb25dIFtDUFUgQXJjaGl0ZWN0dXJlXQogICogTm90ZTogR28gZG9lcyBub3QgaGF2ZSBhbnkgYnVpbHRpbiBmdW5jdGlvbmFsaXR5IHRvIGRldGVjdCB0aGUgT1MgdmVyc2lvbiwgdGhlcmVmb3JlIE9TIHZlcnNpb24gd2lsbCBhbHdheXMgYmUKQEAgLTM3LDcgKzM3LDcgQEAKIAogY29uc3QgdXNlckFnZW50SGVhZGVyID0gIlVzZXItQWdlbnQiCiAKLWNvbnN0IGdyZW1saW5WZXJzaW9uID0gIjMuOC4yLVNOQVBTSE9UIiAvLyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgorY29uc3QgZ3JlbWxpblZlcnNpb24gPSAiNC4wLjAtU05BUFNIT1QiIC8vIERPIE5PVCBNT0RJRlkgLSBDb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYnkgTWF2ZW4gUmVwbGFjZXIgUGx1Z2luCiAKIGZ1bmMgaW5pdCgpIHsKIAlhcHBsaWNhdGlvbk5hbWUgOj0gIk5vdEF2YWlsYWJsZSIKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZXhhbXBsZXMvYmFzaWNfZ3JlbWxpbi5nbyBiL2dyZW1saW4tZ28vZXhhbXBsZXMvYmFzaWNfZ3JlbWxpbi5nbwppbmRleCBmMTIxNjgxLi45MmI0ZjBiIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2V4YW1wbGVzL2Jhc2ljX2dyZW1saW4uZ28KKysrIGIvZ3JlbWxpbi1nby9leGFtcGxlcy9iYXNpY19ncmVtbGluLmdvCkBAIC0yMywxMCArMjMsMTAgQEAKIAkiZm10IgogCSJvcyIKIAotCSJnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92My9kcml2ZXIiCisJImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3Y0L2RyaXZlciIKICkKIAotdmFyIHNlcnZlclVSTCA9IGdldEVudigiR1JFTUxJTl9TRVJWRVJfVVJMIiwgIndzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpCit2YXIgc2VydmVyVVJMID0gZ2V0RW52KCJHUkVNTElOX1NFUlZFUl9VUkwiLCAiaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQogdmFyIHZlcnRleExhYmVsID0gZ2V0RW52KCJWRVJURVhfTEFCRUwiLCAicGVyc29uIikKIAogZnVuYyBnZXRFbnYoa2V5LCBkZWZhdWx0VmFsdWUgc3RyaW5nKSBzdHJpbmcgewpAQCAtNDMsNyArNDMsNyBAQAogCQlyZXR1cm4KIAl9CiAJZGVmZXIgZHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCi0JZyA6PSBncmVtbGluZ28uVHJhdmVyc2FsXygpLldpdGhSZW1vdGUoZHJpdmVyUmVtb3RlQ29ubmVjdGlvbikKKwlnIDo9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChkcml2ZXJSZW1vdGVDb25uZWN0aW9uKQogCiAJLy8gQmFzaWMgR3JlbWxpbjogYWRkaW5nIGFuZCByZXRyaWV2aW5nIGRhdGEKIAl2MSwgZXJyIDo9IGcuQWRkVih2ZXJ0ZXhMYWJlbCkuUHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5OZXh0KCkKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZXhhbXBsZXMvY29ubmVjdGlvbnMuZ28gYi9ncmVtbGluLWdvL2V4YW1wbGVzL2Nvbm5lY3Rpb25zLmdvCmluZGV4IDhmMzhlOGIuLjc5MGVkNTIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZXhhbXBsZXMvY29ubmVjdGlvbnMuZ28KKysrIGIvZ3JlbWxpbi1nby9leGFtcGxlcy9jb25uZWN0aW9ucy5nbwpAQCAtMjMsMTAgKzIzLDEwIEBACiAJImZtdCIKIAkib3MiCiAKLQkiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMvZHJpdmVyIgorCSJnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92NC9kcml2ZXIiCiApCiAKLXZhciBzZXJ2ZXJVUkwgPSBnZXRFbnYoIkdSRU1MSU5fU0VSVkVSX1VSTCIsICJ3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4iKQordmFyIHNlcnZlclVSTCA9IGdldEVudigiR1JFTUxJTl9TRVJWRVJfVVJMIiwgImh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKIHZhciB2ZXJ0ZXhMYWJlbCA9IGdldEVudigiVkVSVEVYX0xBQkVMIiwgImNvbm5lY3Rpb24iKQogCiBmdW5jIGdldEVudihrZXksIGRlZmF1bHRWYWx1ZSBzdHJpbmcpIHN0cmluZyB7CkBAIC02OCwxMCArNjgsOCBAQAogCWRyaXZlclJlbW90ZUNvbm5lY3Rpb24sIGVyciA6PSBncmVtbGluZ28uTmV3RHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJVUkwsCiAJCWZ1bmMoc2V0dGluZ3MgKmdyZW1saW5nby5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uU2V0dGluZ3MpIHsKIAkJCXNldHRpbmdzLlRyYXZlcnNhbFNvdXJjZSA9ICJnIgotCQkJc2V0dGluZ3MuTmV3Q29ubmVjdGlvblRocmVzaG9sZCA9IDQKKwkJCXNldHRpbmdzLk1heGltdW1Db25jdXJyZW50Q29ubmVjdGlvbnMgPSA0CiAJCQlzZXR0aW5ncy5FbmFibGVDb21wcmVzc2lvbiA9IGZhbHNlCi0JCQlzZXR0aW5ncy5SZWFkQnVmZmVyU2l6ZSA9IDAKLQkJCXNldHRpbmdzLldyaXRlQnVmZmVyU2l6ZSA9IDAKIAkJfSkKIAogCWlmIGVyciAhPSBuaWwgewpAQCAtODAsNyArNzgsNyBAQAogCX0KIAogCWRlZmVyIGRyaXZlclJlbW90ZUNvbm5lY3Rpb24uQ2xvc2UoKQotCWcgOj0gZ3JlbWxpbmdvLlRyYXZlcnNhbF8oKS5XaXRoUmVtb3RlKGRyaXZlclJlbW90ZUNvbm5lY3Rpb24pCisJZyA6PSBncmVtbGluZ28uVHJhdmVyc2FsXygpLldpdGgoZHJpdmVyUmVtb3RlQ29ubmVjdGlvbikKIAogCWcuQWRkVih2ZXJ0ZXhMYWJlbCkuSXRlcmF0ZSgpCiAJY291bnQsIF8gOj0gZy5WKCkuSGFzTGFiZWwodmVydGV4TGFiZWwpLkNvdW50KCkuTmV4dCgpCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2V4YW1wbGVzL2dvLm1vZCBiL2dyZW1saW4tZ28vZXhhbXBsZXMvZ28ubW9kCmluZGV4IGZhYjkxYjAuLjk5NzkyN2QgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZXhhbXBsZXMvZ28ubW9kCisrKyBiL2dyZW1saW4tZ28vZXhhbXBsZXMvZ28ubW9kCkBAIC0xOSwxMyArMTksMTMgQEAKIAogZ28gMS4yNQogCi1yZXF1aXJlIGdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzIHYzLjcuNAorcmVxdWlyZSBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92NCB2NC4wLjAtYmV0YS4yCiAKLXJlcGxhY2UgZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMgPT4gLi4vCityZXBsYWNlIGdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3Y0ID0+IC4uLwogCiByZXF1aXJlICgKIAlnaXRodWIuY29tL2dvb2dsZS91dWlkIHYxLjYuMCAvLyBpbmRpcmVjdAogCWdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQgdjEuNS4zIC8vIGluZGlyZWN0Ci0JZ2l0aHViLmNvbS9uaWNrc255ZGVyL2dvLWkxOG4vdjIgdjIuNS4wIC8vIGluZGlyZWN0Ci0JZ29sYW5nLm9yZy94L3RleHQgdjAuMjEuMCAvLyBpbmRpcmVjdAorCWdpdGh1Yi5jb20vbmlja3NueWRlci9nby1pMThuL3YyIHYyLjYuMCAvLyBpbmRpcmVjdAorCWdvbGFuZy5vcmcveC90ZXh0IHYwLjMyLjAgLy8gaW5kaXJlY3QKICkKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ28vZXhhbXBsZXMvZ28uc3VtIGIvZ3JlbWxpbi1nby9leGFtcGxlcy9nby5zdW0KaW5kZXggYjNkMWMzNC4uOTVkNTUxZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1nby9leGFtcGxlcy9nby5zdW0KKysrIGIvZ3JlbWxpbi1nby9leGFtcGxlcy9nby5zdW0KQEAgLTgsMTMgKzgsMTYgQEAKIGdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQgdjEuNS4zL2dvLm1vZCBoMTpZUjhsNTgwbnl0ZVF2QUlUZzJoWjlYVmg0YjU1K0VVL2FkQWpmMWZNSGhFPQogZ2l0aHViLmNvbS9uaWNrc255ZGVyL2dvLWkxOG4vdjIgdjIuNS4wIGgxOjN3SDFncGFla2NnR3V3eldkU3U3SndKaEg5VGs4N2sxZXp0MGkxcDIvSXM9CiBnaXRodWIuY29tL25pY2tzbnlkZXIvZ28taTE4bi92MiB2Mi41LjAvZ28ubW9kIGgxOkRyaGdzU0RaeG9BZnZWckJWTFhveFpuL3BONVRYcWFEYnE3anU5NHZpaVE9CitnaXRodWIuY29tL25pY2tzbnlkZXIvZ28taTE4bi92MiB2Mi42LjAvZ28ubW9kIGgxOjg4c1JxcjBDNk9QeUpuMC9LUk5hRXoxdVdvcmp4SUtQN3JVVWN2eWNlY0U9CiBnaXRodWIuY29tL3BtZXphcmQvZ28tZGlmZmxpYiB2MS4wLjAgaDE6NERCd0RFME5HeVFvQkhiTFFZUHdTVVBvQ01XUjVCRXpJay9mMWxaYkFRTT0KIGdpdGh1Yi5jb20vcG1lemFyZC9nby1kaWZmbGliIHYxLjAuMC9nby5tb2QgaDE6aUtINzdrb0ZoWXhUSzFwY1Jua0trcWZUb2dzYmc3Z1pOVlk0c1JEWVovND0KK2dpdGh1Yi5jb20vc3BmMTMvcGZsYWcgdjEuMC4xMC9nby5tb2QgaDE6TWNYZkluSlJyejRDWlhWWk9CTGIwYlRacUVUa2lBaE05SXcweTNBbjJCZz0KIGdpdGh1Yi5jb20vc3RyZXRjaHIvb2JqeCB2MC41LjIgaDE6eHVNZUowU2RwNVpNUlh4L2FXTzZSWnhkcjNiZUlTa0c1L0cvYUlScjNwWT0KIGdpdGh1Yi5jb20vc3RyZXRjaHIvb2JqeCB2MC41LjIvZ28ubW9kIGgxOkZSc1hOMWY1QXNBakNHSktxRWl6dmtwTnRVK0VHTkNMaDNOeFovOEwrTUE9CiBnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkgdjEuOS4wIGgxOkh0cXBJVkRDbFo0bndnNzUrZjZMdnN5L3dIdSszQm9TR0NiQkFjcFRzVGc9CiBnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkgdjEuOS4wL2dvLm1vZCBoMTpyMmljL2xxZXovbEV0ekw3d08vcndhNWRiU0xYVkRQRnlmOEM5MWkzNmFZPQogZ29sYW5nLm9yZy94L3RleHQgdjAuMjEuMCBoMTp6eVFBQWtyd2FuZVEwNjZzc3BSeUphRzlWTmkvWUoxTmZ6Y0dCM2haL3FvPQogZ29sYW5nLm9yZy94L3RleHQgdjAuMjEuMC9nby5tb2QgaDE6NElCYk1hTW1PUENKOFNlY2l2elNINTQrNzNQQ0ZtUFd4TlRMbSt2WmtFUT0KK2dvbGFuZy5vcmcveC90ZXh0IHYwLjMyLjAvZ28ubW9kIGgxOm8vclVXemdodnBENVRYclRJQnVKVTc3TVRhTjBsak1XRTQ3a3hHSlE3alk9CiBnb3BrZy5pbi95YW1sLnYzIHYzLjAuMSBoMTpmeFZtL0d6QXpFV3FMSHV2Y3RJOTFLUzloaE5tbVdPb1d1MFhUWUpTN0NBPQogZ29wa2cuaW4veWFtbC52MyB2My4wLjEvZ28ubW9kIGgxOks0dXlrN3o3QkNFUHF1NkUrQzY0WWZ2MWNRN2t6N3JJWnZpVW1OK0VnRU09CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2V4YW1wbGVzL21vZGVybl90cmF2ZXJzYWxzLmdvIGIvZ3JlbWxpbi1nby9leGFtcGxlcy9tb2Rlcm5fdHJhdmVyc2Fscy5nbwppbmRleCBjMTMyZmNmLi4zNjVkNmZhIDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2V4YW1wbGVzL21vZGVybl90cmF2ZXJzYWxzLmdvCisrKyBiL2dyZW1saW4tZ28vZXhhbXBsZXMvbW9kZXJuX3RyYXZlcnNhbHMuZ28KQEAgLTIzLDEzICsyMywxMyBAQAogCSJmbXQiCiAJIm9zIgogCi0JImdpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluLWdvL3YzL2RyaXZlciIKKwkiZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjQvZHJpdmVyIgogKQogCiB2YXIgX18gPSBncmVtbGluZ28uVF9fCiB2YXIgVCA9IGdyZW1saW5nby5UCiB2YXIgUCA9IGdyZW1saW5nby5QCi12YXIgc2VydmVyVVJMID0gZ2V0RW52KCJHUkVNTElOX1NFUlZFUl9VUkwiLCAid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKK3ZhciBzZXJ2ZXJVUkwgPSBnZXRFbnYoIkdSRU1MSU5fU0VSVkVSX1VSTCIsICJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpCiAKIGZ1bmMgZ2V0RW52KGtleSwgZGVmYXVsdFZhbHVlIHN0cmluZykgc3RyaW5nIHsKIAlpZiB2YWx1ZSA6PSBvcy5HZXRlbnYoa2V5KTsgdmFsdWUgIT0gIiIgewpAQCAtNDgsNyArNDgsNyBAQAogCQlyZXR1cm4KIAl9CiAJZGVmZXIgZHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5DbG9zZSgpCi0JZyA6PSBncmVtbGluZ28uVHJhdmVyc2FsXygpLldpdGhSZW1vdGUoZHJpdmVyUmVtb3RlQ29ubmVjdGlvbikKKwlnIDo9IGdyZW1saW5nby5UcmF2ZXJzYWxfKCkuV2l0aChkcml2ZXJSZW1vdGVDb25uZWN0aW9uKQogCiAJLyoKIAkgIFRoaXMgZXhhbXBsZSByZXF1aXJlcyB0aGUgTW9kZXJuIHRveSBncmFwaCB0byBiZSBwcmVsb2FkZWQgdXBvbiBsYXVuY2hpbmcgdGhlIEdyZW1saW4gc2VydmVyLgpAQCAtNjEsMTAgKzYxLDEwIEBACiAJdjIsIGVyciA6PSBnLlYoMikuTmV4dCgpCiAJdjFWZXJ0ZXgsIGVyciA6PSB2MS5HZXRWZXJ0ZXgoKQogCXYyVmVydGV4LCBlcnIgOj0gdjIuR2V0VmVydGV4KCkKLQllMywgZXJyIDo9IGcuVih2MVZlcnRleCkuQm90aEUoKS5XaGVyZShfXy5PdGhlclYoKS5Jcyh2MlZlcnRleCkpLlRvTGlzdCgpICAgLy8gKDMpCi0JZTQsIGVyciA6PSBnLlYodjFWZXJ0ZXgpLk91dEUoKS5XaGVyZShfXy5JblYoKS5Jcyh2MlZlcnRleCkpLlRvTGlzdCgpICAgICAgIC8vICg0KQotCWU1LCBlcnIgOj0gZy5WKDEpLk91dEUoKS5XaGVyZShfXy5JblYoKS5IYXMoVC5JZCwgUC5XaXRoaW4oMiwgMykpKS5Ub0xpc3QoKSAvLyAoNSkKLQllNiwgZXJyIDo9IGcuVigxKS5PdXQoKS5XaGVyZShfXy5JbigpLkhhc0lkKDYpKS5Ub0xpc3QoKSAgICAgICAgICAgICAgICAgICAgLy8gKDYpCisJZTMsIGVyciA6PSBnLlYodjFWZXJ0ZXgpLkJvdGhFKCkuV2hlcmUoX18uT3RoZXJWKCkuSWQoKS5Jcyh2MlZlcnRleCkpLlRvTGlzdCgpIC8vICgzKQorCWU0LCBlcnIgOj0gZy5WKHYxVmVydGV4KS5PdXRFKCkuV2hlcmUoX18uSW5WKCkuSWQoKS5Jcyh2MlZlcnRleCkpLlRvTGlzdCgpICAgICAvLyAoNCkKKwllNSwgZXJyIDo9IGcuVigxKS5PdXRFKCkuV2hlcmUoX18uSW5WKCkuSGFzKFQuSWQsIFAuV2l0aGluKDIsIDMpKSkuVG9MaXN0KCkgICAgLy8gKDUpCisJZTYsIGVyciA6PSBnLlYoMSkuT3V0KCkuV2hlcmUoX18uSW4oKS5IYXNJZCg2KSkuVG9MaXN0KCkgICAgICAgICAgICAgICAgICAgICAgIC8vICg2KQogCiAJZm10LlByaW50bG4oZTEpCiAJZm10LlByaW50bG4oZTIpCmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL2dvLm1vZCBiL2dyZW1saW4tZ28vZ28ubW9kCmluZGV4IDhmNWU4MGIuLjU4MWY5YzAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vZ28ubW9kCisrKyBiL2dyZW1saW4tZ28vZ28ubW9kCkBAIC0xNSwyOSArMTUsNDEgQEAKIC8vIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKIC8vIHVuZGVyIHRoZSBMaWNlbnNlLgogCi1tb2R1bGUgZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4tZ28vdjMKK21vZHVsZSBnaXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi1nby92NAogCiBnbyAxLjI1CiAKIHJlcXVpcmUgKAotCWdpdGh1Yi5jb20vY3VjdW1iZXIvZ29kb2cgdjAuMTUuMAorCWdpdGh1Yi5jb20vY3VjdW1iZXIvZ29kb2cgdjAuMTUuMQogCWdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQgdjEuNi4wCi0JZ2l0aHViLmNvbS9nb3JpbGxhL3dlYnNvY2tldCB2MS41LjMKLQlnaXRodWIuY29tL25pY2tzbnlkZXIvZ28taTE4bi92MiB2Mi41LjAKLQlnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkgdjEuOS4wCi0JZ29sYW5nLm9yZy94L3RleHQgdjAuMjEuMAotCWdvcGtnLmluL3lhbWwudjMgdjMuMC4xCisJZ2l0aHViLmNvbS9uaWNrc255ZGVyL2dvLWkxOG4vdjIgdjIuNi4wCisJZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5IHYxLjExLjEKKwlnb2xhbmcub3JnL3gvdGV4dCB2MC4zMi4wCiApCiAKIHJlcXVpcmUgKAorCWdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIgdjEuNDEuMSAvLyBpbmRpcmVjdAorCWdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvY29uZmlnIHYxLjMyLjcgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2NyZWRlbnRpYWxzIHYxLjE5LjcgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ZlYXR1cmUvZWMyL2ltZHMgdjEuMTguMTcgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ludGVybmFsL2NvbmZpZ3NvdXJjZXMgdjEuNC4xNyAvLyBpbmRpcmVjdAorCWdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvaW50ZXJuYWwvZW5kcG9pbnRzL3YyIHYyLjcuMTcgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ludGVybmFsL2luaSB2MS44LjQgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2UvaW50ZXJuYWwvYWNjZXB0LWVuY29kaW5nIHYxLjEzLjQgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2UvaW50ZXJuYWwvcHJlc2lnbmVkLXVybCB2MS4xMy4xNyAvLyBpbmRpcmVjdAorCWdpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9zaWduaW4gdjEuMC41IC8vIGluZGlyZWN0CisJZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9zZXJ2aWNlL3NzbyB2MS4zMC45IC8vIGluZGlyZWN0CisJZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9zZXJ2aWNlL3Nzb29pZGMgdjEuMzUuMTMgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2Uvc3RzIHYxLjQxLjYgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL2F3cy9zbWl0aHktZ28gdjEuMjQuMCAvLyBpbmRpcmVjdAogCWdpdGh1Yi5jb20vY3VjdW1iZXIvZ2hlcmtpbi9nby92MjYgdjI2LjIuMCAvLyBpbmRpcmVjdAogCWdpdGh1Yi5jb20vY3VjdW1iZXIvbWVzc2FnZXMvZ28vdjIxIHYyMS4wLjEgLy8gaW5kaXJlY3QKIAlnaXRodWIuY29tL2RhdmVjZ2gvZ28tc3BldyB2MS4xLjEgLy8gaW5kaXJlY3QKLQlnaXRodWIuY29tL2dvZnJzL3V1aWQgdjQuMy4xK2luY29tcGF0aWJsZSAvLyBpbmRpcmVjdAorCWdpdGh1Yi5jb20vZ29mcnMvdXVpZCB2NC40LjAraW5jb21wYXRpYmxlIC8vIGluZGlyZWN0CiAJZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ28taW1tdXRhYmxlLXJhZGl4IHYxLjMuMSAvLyBpbmRpcmVjdAotCWdpdGh1Yi5jb20vaGFzaGljb3JwL2dvLW1lbWRiIHYxLjMuNCAvLyBpbmRpcmVjdAotCWdpdGh1Yi5jb20vaGFzaGljb3JwL2dvbGFuZy1scnUgdjAuNS40IC8vIGluZGlyZWN0CisJZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ28tbWVtZGIgdjEuMy41IC8vIGluZGlyZWN0CisJZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ29sYW5nLWxydSB2MS4wLjIgLy8gaW5kaXJlY3QKIAlnaXRodWIuY29tL3BtZXphcmQvZ28tZGlmZmxpYiB2MS4wLjAgLy8gaW5kaXJlY3QKLQlnaXRodWIuY29tL3NwZjEzL3BmbGFnIHYxLjAuNSAvLyBpbmRpcmVjdAotCWdpdGh1Yi5jb20vc3RyZXRjaHIvb2JqeCB2MC41LjIgLy8gaW5kaXJlY3QKKwlnaXRodWIuY29tL3NwZjEzL3BmbGFnIHYxLjAuMTAgLy8gaW5kaXJlY3QKKwlnb3BrZy5pbi95YW1sLnYzIHYzLjAuMSAvLyBpbmRpcmVjdAogKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9nby5zdW0gYi9ncmVtbGluLWdvL2dvLnN1bQppbmRleCA2NTg2Y2JiLi5jYzdmMWQ2IDEwMDY0NAotLS0gYS9ncmVtbGluLWdvL2dvLnN1bQorKysgYi9ncmVtbGluLWdvL2dvLnN1bQpAQCAtMSwxMCArMSwzOCBAQAotZ2l0aHViLmNvbS9CdXJudFN1c2hpL3RvbWwgdjEuNC4wIGgxOmt1b0l4WlF5MldSUmsxcHR0Zzlhc2YrV1Z2NnRXUXVCTlZtSzgrbnFQcjA9Ci1naXRodWIuY29tL0J1cm50U3VzaGkvdG9tbCB2MS40LjAvZ28ubW9kIGgxOnVrSmZURi82cnRQUFJDbndrdXI0cXdSeGE4dlRSRkJGMHVrMmxMb0x3aG89CitnaXRodWIuY29tL0J1cm50U3VzaGkvdG9tbCB2MS41LjAgaDE6VzVxdVpYL0cvY3NqVW51SThTVVlsc0hzOU0zOEZDN3puTDBsSU8rRHZNZz0KK2dpdGh1Yi5jb20vQnVybnRTdXNoaS90b21sIHYxLjUuMC9nby5tb2QgaDE6dWtKZlRGLzZydFBQUkNud2t1cjRxd1J4YTh2VFJGQkYwdWsybExvTHdobz0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIgdjEuNDEuMSBoMTpBQmx5RUFSQ0RMTjAzNE5oeGxSVVNacjRsNzFtaCtUNUtBZUdoNmNlcmhVPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12MiB2MS40MS4xL2dvLm1vZCBoMTpNYXl5TEI4eStidUQ5aFpxa0NXM2tYMUFLcTA3WTVwWHh0Z0IrclJGaHowPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9jb25maWcgdjEuMzIuNyBoMTp2eFV5V0dVd21rUTJnMTluN0pZLzlZTDhNZkFJbDdiVGVzSVV5a0VDWG1ZPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9jb25maWcgdjEuMzIuNy9nby5tb2QgaDE6Mi9RbTV2S1VVL3I3WSt6VWsvUHR0Mk1EQUVLQWZVdEtjMSszVTFNbzNvWT0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvY3JlZGVudGlhbHMgdjEuMTkuNyBoMTp0SEs0N1ZxcXRKeE95bVJyTnRVWE41U1AvelVUdlpLZUx4NHRINlBHUWM4PQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9jcmVkZW50aWFscyB2MS4xOS43L2dvLm1vZCBoMTpxT1prOHNQRHJ4aGYrNFdmNG9UMnVyWUpyWXQzUmVqSFN6Z0FxdVllcHB3PQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9mZWF0dXJlL2VjMi9pbWRzIHYxLjE4LjE3IGgxOkkwR3lWOHdpWXJQOFhwQTcwZzFIQmNRTzFKbFF4Q01UVzlucGw1VWJESFk9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ZlYXR1cmUvZWMyL2ltZHMgdjEuMTguMTcvZ28ubW9kIGgxOnR5dzdCT2w1YkJlL29xdm9JZUVDRkpqTWR6WG9hL2RmVnozUVE1bGdIR0E9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ludGVybmFsL2NvbmZpZ3NvdXJjZXMgdjEuNC4xNyBoMTp4T0xFTE5LR3AydnNpdGVMc3ZMUHd4QyttWW1PNk9aOFBZZ2l1UEp6RjhVPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9pbnRlcm5hbC9jb25maWdzb3VyY2VzIHYxLjQuMTcvZ28ubW9kIGgxOjVNNUNJM0QxMmROT3RIMy9tazZtaW5hUndJMi8zN2lmQ1VSWklTeEEvSVE9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ludGVybmFsL2VuZHBvaW50cy92MiB2Mi43LjE3IGgxOldXTHFsaDc5aU80OHlMa2oxdjNJU1JOaXYrM0tkUW9aNkpXeWZjc3lRaWs9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ludGVybmFsL2VuZHBvaW50cy92MiB2Mi43LjE3L2dvLm1vZCBoMTpFaEcyMnZIUnJ2RjhvWFNUWVN0WmhKYzFhVWdLdG5KZSthT2lGRVY5MGNNPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9pbnRlcm5hbC9pbmkgdjEuOC40IGgxOldLdWF4ZisrWEtXbEhXdTlFQ2JNbGhhOFdPRUdtME9VRVpxbTRLL0djZms9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL2ludGVybmFsL2luaSB2MS44LjQvZ28ubW9kIGgxOlpXeTdqNnYxdldHbVBSZXUwaVNHdlJpaXNlNFlJNVNrUjNPSEtUWjZXdWM9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2UvaW50ZXJuYWwvYWNjZXB0LWVuY29kaW5nIHYxLjEzLjQgaDE6MHJ5VE5FZEpielVDRVdrVlhFWG9xbFhWNzJKNWtlQzFHdklMTU91RDAwRT0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9pbnRlcm5hbC9hY2NlcHQtZW5jb2RpbmcgdjEuMTMuNC9nby5tb2QgaDE6SFE0cXdOWmgzMkMzQ0JlTzZpSkxRbGd0TXpxZUcxN3ppQUEvM0tESkZvdz0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9pbnRlcm5hbC9wcmVzaWduZWQtdXJsIHYxLjEzLjE3IGgxOlJ1TlNNb296TThvWGxnTEcvbjZXTGFGR29lYTcvQ2RkckNmSWlTQSt4ZFk9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2UvaW50ZXJuYWwvcHJlc2lnbmVkLXVybCB2MS4xMy4xNy9nby5tb2QgaDE6RjJ4eFE5VFp6NWdEV3NjbEN0UFFzY0dwUDBWVU9jOFJxZ0ZNM3ZERU5tVT0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9zaWduaW4gdjEuMC41IGgxOlZyaER2UWliL2kwbHh2cjN6cWxVd0x3SlA0ZnBtcHlEOXdZRzF2ZlN1K1k9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2Uvc2lnbmluIHYxLjAuNS9nby5tb2QgaDE6azAyOStVOFNZMzAvMy9yYXM0Ry9GbnYvYjg4TjRtQWZsaU5uMDhEZW00TT0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9zc28gdjEuMzAuOSBoMTp2NkVpTXZoRVlCb0hBQmZiR0I0YWxPWW1DSXJjZ3lQUGlCRTF3WkFFYnFrPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9zZXJ2aWNlL3NzbyB2MS4zMC45L2dvLm1vZCBoMTp5aWZBc2dCeGdKV24zZ2d4NzBBM3VyWDJBTjQ5WTVzSlREMVVRRmxmcUJ3PQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9zZXJ2aWNlL3Nzb29pZGMgdjEuMzUuMTMgaDE6Z2Q4NE9teXU5SkxyaUpWQ2JHQXBjTHpWUjNYdG1DNFpEUGNBSTZGdHZkcz0KK2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstZ28tdjIvc2VydmljZS9zc29vaWRjIHYxLjM1LjEzL2dvLm1vZCBoMTpzVEdUaGpwaFlFNE9odzh2SmlSU3RBY3UzcmJqdFhSc2ROQjBUdlo1d3dvPQorZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1nby12Mi9zZXJ2aWNlL3N0cyB2MS40MS42IGgxOjVmRmpSL1RvU096QjJPUS9YcVdwWkJtTnZtUC9wSjFqT1dZbEZESlRqUlE9CitnaXRodWIuY29tL2F3cy9hd3Mtc2RrLWdvLXYyL3NlcnZpY2Uvc3RzIHYxLjQxLjYvZ28ubW9kIGgxOnFnRkRaUVNEL0t5czduSm5WcVlsV0tuaDBTU2RNakFpMHVTd09ONHdnWVE9CitnaXRodWIuY29tL2F3cy9zbWl0aHktZ28gdjEuMjQuMCBoMTpMcGlsU1VJdE5QRnIxZVk4NVJZZ1RJZzVlSUVQdHZGYnNrYUZjbW1JVW5rPQorZ2l0aHViLmNvbS9hd3Mvc21pdGh5LWdvIHYxLjI0LjAvZ28ubW9kIGgxOkxFajJMTTNyQlJRSnhQWlRCNEt1elprYVpZblpQbnZnSWhiNHB1MDdteDA9CiBnaXRodWIuY29tL2NwdWd1eTgzL2dvLW1kMm1hbi92MiB2Mi4wLjIvZ28ubW9kIGgxOnRnUXR2RmxYU1FPU09TSVJ2UlBUN1c2N1NDYTQ2dFJIT21OY2FhZHJGOG89CiBnaXRodWIuY29tL2N1Y3VtYmVyL2doZXJraW4vZ28vdjI2IHYyNi4yLjAgaDE6RWdJamVQTFdpUGVzbHdJV21OUTNYSGN5cFBzV0FIb01Dei9ZRUJLUDRHST0KIGdpdGh1Yi5jb20vY3VjdW1iZXIvZ2hlcmtpbi9nby92MjYgdjI2LjIuMC9nby5tb2QgaDE6dDJHQVBuQjhtYUNUNGxrSEw5OUJEQ1ZOekNoMWQ3ZEJoQ0x0MTUwTnIvMD0KLWdpdGh1Yi5jb20vY3VjdW1iZXIvZ29kb2cgdjAuMTUuMCBoMTo1MUFMOGxCWEYzZjBjeUE1Q1Y0VG5KRkNUSHBnaXkrMXgxSGIzVHRaVW1vPQotZ2l0aHViLmNvbS9jdWN1bWJlci9nb2RvZyB2MC4xNS4wL2dvLm1vZCBoMTpGWDNyeklEeWJXQUJVNGt1SVhMWi9xdHFFZTFBYzVSZFhtcXZBQ0pPY2VzPQorZ2l0aHViLmNvbS9jdWN1bWJlci9nb2RvZyB2MC4xNS4xIGgxOnJiLzZvSERkdlZaS1M2NmhyaHBqRlFGSGp0aEZTclFCQ09JMUx3c2hOVEk9CitnaXRodWIuY29tL2N1Y3VtYmVyL2dvZG9nIHYwLjE1LjEvZ28ubW9kIGgxOnFqdStTUURld09sakh1cTlOU002NnMweEVob2d4MHEzMGZsZnhMNFdVazg9CiBnaXRodWIuY29tL2N1Y3VtYmVyL21lc3NhZ2VzL2dvL3YyMSB2MjEuMC4xIGgxOnd6QTBMeHdqbFdRWVpkMzJWVGxBVkRUa1c2aW5PRm1TTStSdU93SFppTUk9CiBnaXRodWIuY29tL2N1Y3VtYmVyL21lc3NhZ2VzL2dvL3YyMSB2MjEuMC4xL2dvLm1vZCBoMTp6aGVILzJIUzlKTFZGdWtkcnNQV29QZG1VdG1ZUUFRUExrN3c1dldzazVzPQogZ2l0aHViLmNvbS9jdWN1bWJlci9tZXNzYWdlcy9nby92MjIgdjIyLjAuMC9nby5tb2QgaDE6YVppcFhUS2MwSm5qQ3NYckpudVpwV2h0YXk5M2s3Um4zRGVlN2l5UEpqcz0KQEAgLTEyLDUwICs0MCw1MSBAQAogZ2l0aHViLmNvbS9kYXZlY2doL2dvLXNwZXcgdjEuMS4xIGgxOnZqOWovdTFicW52Q0VmSk93VWh0bE9BUnFzMytya0hZWTEzallXVFU5N2M9CiBnaXRodWIuY29tL2RhdmVjZ2gvZ28tc3BldyB2MS4xLjEvZ28ubW9kIGgxOko3WThZY1cyTmloc2dtVm8vbXYzbEF3bC9za09ONGlMSGpTc0krYzVIMzg9CiBnaXRodWIuY29tL2dvZnJzL3V1aWQgdjQuMi4wK2luY29tcGF0aWJsZS9nby5tb2QgaDE6YjJhUUp2M1o0RnA2eU51M2NkU2xsQnhUQ0xSeG5wbElnUC9jME4vMDRsTT0KLWdpdGh1Yi5jb20vZ29mcnMvdXVpZCB2NC4zLjEraW5jb21wYXRpYmxlIGgxOjAvS2JBZHB4M1VYQXgxa0VPV0hKZU9rcGJnUkZHSFZnditDRklZN2RCSkk9CiBnaXRodWIuY29tL2dvZnJzL3V1aWQgdjQuMy4xK2luY29tcGF0aWJsZS9nby5tb2QgaDE6YjJhUUp2M1o0RnA2eU51M2NkU2xsQnhUQ0xSeG5wbElnUC9jME4vMDRsTT0KK2dpdGh1Yi5jb20vZ29mcnMvdXVpZCB2NC40LjAraW5jb21wYXRpYmxlIGgxOjNxWFJUWDgvTmJ5dWxBTnFsYzBsY2hTMWdxQVZ4UmdzdVcxWXJUSnVwcUE9CitnaXRodWIuY29tL2dvZnJzL3V1aWQgdjQuNC4wK2luY29tcGF0aWJsZS9nby5tb2QgaDE6YjJhUUp2M1o0RnA2eU51M2NkU2xsQnhUQ0xSeG5wbElnUC9jME4vMDRsTT0KIGdpdGh1Yi5jb20vZ29vZ2xlL3V1aWQgdjEuNi4wIGgxOk5JdmFKRE1Pc2pIQThuMWpBaExTZ3pyQXp5MUhncitoTnJiNTdlKzk0RjA9CiBnaXRodWIuY29tL2dvb2dsZS91dWlkIHYxLjYuMC9nby5tb2QgaDE6VEl5UFplNE1ncXZmZVlEQkZlZE1vR0dwRXcvTHFPZWFPVCtuaHhVK3lIbz0KLWdpdGh1Yi5jb20vZ29yaWxsYS93ZWJzb2NrZXQgdjEuNS4zIGgxOnNhRHRaNlBieC8wdStiZ1lRM3E5NnBaZ0N6ZmhLWEdQcXQ3a1o3MmFOTmc9Ci1naXRodWIuY29tL2dvcmlsbGEvd2Vic29ja2V0IHYxLjUuMy9nby5tb2QgaDE6WVI4bDU4MG55dGVRdkFJVGcyaFo5WFZoNGI1NStFVS9hZEFqZjFmTUhoRT0KIGdpdGh1Yi5jb20vaGFzaGljb3JwL2dvLWltbXV0YWJsZS1yYWRpeCB2MS4zLjAvZ28ubW9kIGgxOjB5OXZhblVJOE5YNkZzWW9PM3plTWpoVi9DNWk5ZzRRM0R3Y1NOWjRQNjA9CiBnaXRodWIuY29tL2hhc2hpY29ycC9nby1pbW11dGFibGUtcmFkaXggdjEuMy4xIGgxOkRLSG1DVW0yaFJCSzUxMEJhaVpsd3ZwRDQwZjhiSkZlWm5wZm0yS0xvd2M9CiBnaXRodWIuY29tL2hhc2hpY29ycC9nby1pbW11dGFibGUtcmFkaXggdjEuMy4xL2dvLm1vZCBoMToweTl2YW5VSThOWDZGc1lvTzN6ZU1qaFYvQzVpOWc0UTNEd2NTTlo0UDYwPQotZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ28tbWVtZGIgdjEuMy40IGgxOlhTTDNOUjY4MlgvY1ZrMkllVjBkNzBONERaOWxqSTg4NXhBRVU4SW9LM2M9CiBnaXRodWIuY29tL2hhc2hpY29ycC9nby1tZW1kYiB2MS4zLjQvZ28ubW9kIGgxOnVCVHIxb1FidHVNZ2QxU1NHb1I4WVYyN2VUM3NCSGJZaU5tNTNiTXBnU2c9CitnaXRodWIuY29tL2hhc2hpY29ycC9nby1tZW1kYiB2MS4zLjUgaDE6YjN0YURNeENCQ0JWZ3lSclMxQVpWSE8xNHViTVlaQisrUXBOaEJnK055bz0KK2dpdGh1Yi5jb20vaGFzaGljb3JwL2dvLW1lbWRiIHYxLjMuNS9nby5tb2QgaDE6OElWS0tCa1ZlK2Z4RmdkRk9ZeHpRUU5qeitzV0N5SENkSUMvKzUrVnkxWT0KIGdpdGh1Yi5jb20vaGFzaGljb3JwL2dvLXV1aWQgdjEuMC4wL2dvLm1vZCBoMTo2U0Jadk9oL1NJRFY3LzJvM0ptbDVTWWsvVHZHcXdGSi9iTjd4NGJ5T3JvPQogZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ28tdXVpZCB2MS4wLjIgaDE6Y2ZlalMrVHBjcDEzeWQ1bllIV0RJNnFWQ255Nnd5WDJNdDVTR3VyMklHRT0KIGdpdGh1Yi5jb20vaGFzaGljb3JwL2dvLXV1aWQgdjEuMC4yL2dvLm1vZCBoMTo2U0Jadk9oL1NJRFY3LzJvM0ptbDVTWWsvVHZHcXdGSi9iTjd4NGJ5T3JvPQogZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ29sYW5nLWxydSB2MC41LjAvZ28ubW9kIGgxOi9tM1dQNjEwS1pIVlExU0djNnJlL1VEaEZ2WUQ3cEo0QW8rc1IvcUxaeTg9Ci1naXRodWIuY29tL2hhc2hpY29ycC9nb2xhbmctbHJ1IHYwLjUuNCBoMTpZRGp1c24yOVFJL0RhczJpTzlNMEJIbklieFBleXVDSHNqTVcrbEpmeVRjPQogZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ29sYW5nLWxydSB2MC41LjQvZ28ubW9kIGgxOmlBRG1Ud3FJTG80bVo4Qk4zRDJRNis5amQ4V001dUdCeHkrRTh5eFNvRDQ9CitnaXRodWIuY29tL2hhc2hpY29ycC9nb2xhbmctbHJ1IHYxLjAuMiBoMTpkVjNnOVovdW5xNURwYmxQcHcrT3FjdjRkVS8xb21uYjRPazhpUFk2cDFjPQorZ2l0aHViLmNvbS9oYXNoaWNvcnAvZ29sYW5nLWxydSB2MS4wLjIvZ28ubW9kIGgxOmlBRG1Ud3FJTG80bVo4Qk4zRDJRNis5amQ4V001dUdCeHkrRTh5eFNvRDQ9CiBnaXRodWIuY29tL2luY29uc2hyZXZlYWJsZS9tb3VzZXRyYXAgdjEuMS4wL2dvLm1vZCBoMTp2cEY3MEZVbUM4YndhM09XbkNzaGQyRnFMZnNFQTlQRmM0dzFwMko2NWJ3PQogZ2l0aHViLmNvbS9rci9wcmV0dHkgdjAuMi4xIGgxOkZtZzMzdFVhcTQvOHltOVRKTjF4N3NMSm5IVndoUDMzQ05rcFlWLzdyd0k9CiBnaXRodWIuY29tL2tyL3ByZXR0eSB2MC4yLjEvZ28ubW9kIGgxOmlwcS9hMm43UEt4M09Ic3o0S0pJSTVldmVYdFBPNHF3RVhHZFZmV3pmbkk9CiBnaXRodWIuY29tL2tyL3B0eSB2MS4xLjEvZ28ubW9kIGgxOnBGUVluNjZXSHJPcFBZTmxqd09NcW8xMFRrWWgxZnkzY1lpbzJsM2JDc1E9CiBnaXRodWIuY29tL2tyL3RleHQgdjAuMS4wIGgxOjQ1c0NSNVJ0bEZITVI0VXdIOXNkUTVUQzh2MHFEUUNIblh0K2thS1NUVkU9CiBnaXRodWIuY29tL2tyL3RleHQgdjAuMS4wL2dvLm1vZCBoMTo0SmJ2K0RKVzNVVC9MaU93SmVZUWUxZWZxdFV4L2lWaGFtLzR2ZmRBck5JPQotZ2l0aHViLmNvbS9uaWNrc255ZGVyL2dvLWkxOG4vdjIgdjIuNS4wIGgxOjN3SDFncGFla2NnR3V3eldkU3U3SndKaEg5VGs4N2sxZXp0MGkxcDIvSXM9Ci1naXRodWIuY29tL25pY2tzbnlkZXIvZ28taTE4bi92MiB2Mi41LjAvZ28ubW9kIGgxOkRyaGdzU0RaeG9BZnZWckJWTFhveFpuL3BONVRYcWFEYnE3anU5NHZpaVE9CitnaXRodWIuY29tL25pY2tzbnlkZXIvZ28taTE4bi92MiB2Mi42LjAgaDE6Qy9tMk5OV05pVEI2U0s0QW84ZGY1RVdtM0pFVFNUSUdOWEJwTUpUeHp4UT0KK2dpdGh1Yi5jb20vbmlja3NueWRlci9nby1pMThuL3YyIHYyLjYuMC9nby5tb2QgaDE6ODhzUnFyMEM2T1B5Sm4wL0tSTmFFejF1V29yanhJS1A3clVVY3Z5Y2VjRT0KIGdpdGh1Yi5jb20vcG1lemFyZC9nby1kaWZmbGliIHYxLjAuMCBoMTo0REJ3REUwTkd5UW9CSGJMUVlQd1NVUG9DTVdSNUJFeklrL2YxbFpiQVFNPQogZ2l0aHViLmNvbS9wbWV6YXJkL2dvLWRpZmZsaWIgdjEuMC4wL2dvLm1vZCBoMTppS0g3N2tvRmhZeFRLMXBjUm5rS2txZlRvZ3NiZzdnWk5WWTRzUkRZWi80PQogZ2l0aHViLmNvbS9ydXNzcm9zcy9ibGFja2ZyaWRheS92MiB2Mi4xLjAvZ28ubW9kIGgxOitSbXhneTlLekpWZVM5LzJnWEh4eWxxWGl5UURZUnhDVno1NWptZU9XVE09CiBnaXRodWIuY29tL3NwZjEzL2NvYnJhIHYxLjcuMC9nby5tb2QgaDE6dUx4WklMUnlTLzUwV2xoT0lLRDdXNlY1YmdlSXQrNHNJQ3hoNnVSTXJiMD0KLWdpdGh1Yi5jb20vc3BmMTMvcGZsYWcgdjEuMC41IGgxOml5K1ZGVU9DUDFhKzh5RnRvL2RyZzJDSjV1MHlSb0I3Zlp3M0RLdi9KWEE9CiBnaXRodWIuY29tL3NwZjEzL3BmbGFnIHYxLjAuNS9nby5tb2QgaDE6TWNYZkluSlJyejRDWlhWWk9CTGIwYlRacUVUa2lBaE05SXcweTNBbjJCZz0KK2dpdGh1Yi5jb20vc3BmMTMvcGZsYWcgdjEuMC43L2dvLm1vZCBoMTpNY1hmSW5KUnJ6NENaWFZaT0JMYjBiVFpxRVRraUFoTTlJdzB5M0FuMkJnPQorZ2l0aHViLmNvbS9zcGYxMy9wZmxhZyB2MS4wLjEwIGgxOjRFQmgyS0FZQndhT05qNmIyWWUxR2lIZndqcXlST29GNFJ3WU8rdlB3Rms9CitnaXRodWIuY29tL3NwZjEzL3BmbGFnIHYxLjAuMTAvZ28ubW9kIGgxOk1jWGZJbkpScno0Q1pYVlpPQkxiMGJUWnFFVGtpQWhNOUl3MHkzQW4yQmc9CiBnaXRodWIuY29tL3N0cmV0Y2hyL29ianggdjAuMS4wL2dvLm1vZCBoMTpIRmtZOTE2SUYrcndkRGZNQWtWN090d3VxQlZ6ckU4R1I2R0Z4K3dFeE1FPQogZ2l0aHViLmNvbS9zdHJldGNoci9vYmp4IHYwLjQuMC9nby5tb2QgaDE6WXZISTBqeTJob01qQitVV3d2NzFWSlE5aXNTY0tUL1RxSnpWU1N0ODlZdz0KIGdpdGh1Yi5jb20vc3RyZXRjaHIvb2JqeCB2MC41LjAvZ28ubW9kIGgxOlloK3RvNDhFc0dFZll1YUhEelhQY0UzeGhUa3g3M0VobUNHVXBFT2dsS289Ci1naXRodWIuY29tL3N0cmV0Y2hyL29ianggdjAuNS4yIGgxOnh1TWVKMFNkcDVaTVJYeC9hV082Ulp4ZHIzYmVJU2tHNS9HL2FJUnIzcFk9Ci1naXRodWIuY29tL3N0cmV0Y2hyL29ianggdjAuNS4yL2dvLm1vZCBoMTpGUnNYTjFmNUFzQWpDR0pLcUVpenZrcE50VStFR05DTGgzTnhaLzhMK01BPQogZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5IHYxLjcuMS9nby5tb2QgaDE6NkZxOG9SY1I1M3JyeTkwMHpNcUpqUlJpeHJ3WDNLWDk2Mi9oL1d3anRlZz0KIGdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeSB2MS44LjAvZ28ubW9kIGgxOnlOakhnNFVvbmlsc3NXWjhpYVNqMU9Dci92SG5la1BSa29PK2tkTVUrTVU9CiBnaXRodWIuY29tL3N0cmV0Y2hyL3Rlc3RpZnkgdjEuOC4xL2dvLm1vZCBoMTp3MkxQQ0lLd1d3U2ZZMnplZHUwK2tlaEpvcUdjdGlWSTI5bzZmenJ5N3U0PQogZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5IHYxLjguMi9nby5tb2QgaDE6dzJMUENJS3dXd1NmWTJ6ZWR1MCtrZWhKb3FHY3RpVkkyOW82ZnpyeTd1ND0KLWdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeSB2MS45LjAgaDE6SHRxcElWRENsWjRud2c3NStmNkx2c3kvd0h1KzNCb1NHQ2JCQWNwVHNUZz0KLWdpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeSB2MS45LjAvZ28ubW9kIGgxOnIyaWMvbHFlei9sRXR6TDd3Ty9yd2E1ZGJTTFhWRFBGeWY4QzkxaTM2YVk9Ci1nb2xhbmcub3JnL3gvdGV4dCB2MC4yMS4wIGgxOnp5UUFBa3J3YW5lUTA2NnNzcFJ5SmFHOVZOaS9ZSjFOZnpjR0IzaFovcW89Ci1nb2xhbmcub3JnL3gvdGV4dCB2MC4yMS4wL2dvLm1vZCBoMTo0SUJiTWFNbU9QQ0o4U2VjaXZ6U0g1NCs3M1BDRm1QV3hOVExtK3Zaa0VRPQorZ2l0aHViLmNvbS9zdHJldGNoci90ZXN0aWZ5IHYxLjExLjEgaDE6N3MyaUdCenA1RXdSNy9hSVpyOGFvNStkcmEzd2lReUtqakZ1dmdWS3U3VT0KK2dpdGh1Yi5jb20vc3RyZXRjaHIvdGVzdGlmeSB2MS4xMS4xL2dvLm1vZCBoMTp3WndmVzNzY0xnUksrMjNnTzY1UVplZktwS1FSbmZ6NnNEOTgxTm00QjZVPQorZ29sYW5nLm9yZy94L3RleHQgdjAuMzIuMCBoMTpaRDAxYmpVdDFGUTlXSjBDbE9MNXZ4Z3hPSS9zVkNOZ1gxWXRLd2NZMG1VPQorZ29sYW5nLm9yZy94L3RleHQgdjAuMzIuMC9nby5tb2QgaDE6by9yVVd6Z2h2cEQ1VFhyVElCdUpVNzdNVGFOMGxqTVdFNDdreEdKUTdqWT0KIGdvcGtnLmluL2NoZWNrLnYxIHYwLjAuMC0yMDE2MTIwODE4MTMyNS0yMGQyNWUyODA0MDUvZ28ubW9kIGgxOkNvNmliVkpBem5BYUlrcXA4aHVUd2xKUUNaMDE2am9mL2NiTjRWVzVZejA9CiBnb3BrZy5pbi9jaGVjay52MSB2MS4wLjAtMjAyMDExMzAxMzQ0NDItMTBjYjk4MjY3YzZjIGgxOkhlaS80QURmZFdxSmsxWk14VU5wcW50TndhV2N1Z3JCakFpSGxxcVJpVms9CiBnb3BrZy5pbi9jaGVjay52MSB2MS4wLjAtMjAyMDExMzAxMzQ0NDItMTBjYjk4MjY3YzZjL2dvLm1vZCBoMTpKSGtQSWJyZnBkNzJTRy9FVmQ2bXVFZkRRamNJTk5vUjBDOGoycjNxWjRRPQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1nby9wb20ueG1sIGIvZ3JlbWxpbi1nby9wb20ueG1sCmluZGV4IDY0MzE5ZDYuLmRiMGEwMjUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ28vcG9tLnhtbAorKysgYi9ncmVtbGluLWdvL3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1nbzwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gR288L25hbWU+CmRpZmYgLS1naXQgYS9ncmVtbGluLWdvL3J1bi5zaCBiL2dyZW1saW4tZ28vcnVuLnNoCmluZGV4IDIzYTM3NjMuLmZkYjM2YWUgMTAwNzU1Ci0tLSBhL2dyZW1saW4tZ28vcnVuLnNoCisrKyBiL2dyZW1saW4tZ28vcnVuLnNoCkBAIC0yMywxNCArMjMsMTQgQEAKICAgICAgICAgICAiXG5cblJ1biB0aGUgR3JlbWxpbi1HbyB0ZXN0IHN1aXRlIGluIERvY2tlci4iIFwKICAgICAgICAgICAiXG5cbk9wdGlvbnM6IiBcCiAgICAgICAgICAgIlxuXHQ8c2VydmVyLXZlcnNpb24+IFx0IE9wdGlvbmFsIHZhbHVlLCBpZiB1bnNwZWNpZmllZCB0aGUgdGVzdCBzdWl0ZSB3aWxsIHJ1biB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24KLSAgICAgICAgICAgXHRcdFx0IG9mIEdyZW1saW4gc2VydmVyIGFuZCBHcmVtbGluIE5lbzRqLCBhcyBzcGVjaWZpZWQgaW4gdGhlIFRpbmtlclBvcCBwb20ueG1sIGZpbGUuIiBcCisgICAgICAgICAgIFx0XHRcdCBvZiBHcmVtbGluIHNlcnZlciBhcyBzcGVjaWZpZWQgaW4gdGhlIFRpbmtlclBvcCBwb20ueG1sIGZpbGUuIiBcCiAgICAgICAgICAgIlxuXHQtaCwgLS1oZWxwIFx0XHQgU2hvdyB0aGlzIG1lc3NhZ2UuIiBcCiAgICAgICAgICAgIlxuXG5FeGFtcGxlczoiIFwKICAgICAgICAgICAiXG5cdFJ1bm5pbmcgdGhlIGRlZmF1bHQ6IC4vcnVuLnNoIiBcCiAgICAgICAgICAgIlxuXHRUaGUgZGVmYXVsdCByZXF1aXJlcyBhIFNOQVBTSE9UIHNlcnZlciBpbWFnZSB0byBiZSBidWlsdCB1c2luZzoKICAgICAgICAgICBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgOmdyZW1saW4tc2VydmVyIC1Ec2tpcFRlc3RzIC1Ec2tpcEludGVncmF0aW9uVGVzdHM9dHJ1ZSAtYW0gJiYgbXZuIGluc3RhbGwgLVBkb2NrZXItaW1hZ2VzIC1wbCA6Z3JlbWxpbi1zZXJ2ZXIiIFwKICAgICAgICAgICAiXG5cdFJ1bm5pbmcgYSBwcmVidWlsdCBsb2NhbCBTTkFQU0hPVCBidWlsZDogLi9ydW4uc2ggMy54LngtU05BUFNIT1QiIFwKLSAgICAgICAgICAiXG5cdFJ1bm5pbmcgYSByZWxlYXNlZCB2ZXJzaW9uOiAuL3J1bi5zaCAzLjUuMyIgXAorICAgICAgICAgICJcblx0UnVubmluZyBhIHJlbGVhc2VkIHZlcnNpb246IC4vcnVuLnNoIDMuOC4wIiBcCiAgICAgICAgICAgIlxuIgogfQogCmRpZmYgLS1naXQgYS9ncmVtbGluLWdyb292eS9wb20ueG1sIGIvZ3JlbWxpbi1ncm9vdnkvcG9tLnhtbAppbmRleCBjZmU4ZDVjLi41YjdhZjQwIDEwMDY0NAotLS0gYS9ncmVtbGluLWdyb292eS9wb20ueG1sCisrKyBiL2dyZW1saW4tZ3Jvb3Z5L3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1ncm9vdnk8L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGluIEdyb292eTwvbmFtZT4KQEAgLTYwLDExICs2MCw2IEBACiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eS1qc29uPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtncm9vdnkudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eS1qc3IyMjM8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9hc3QvUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyLmdyb292eSBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvYXN0L1JlcGVhdEFTVFRyYW5zZm9ybWF0aW9uQ3VzdG9taXplci5ncm9vdnkKaW5kZXggMzdmNGIxNS4uMWFmMGUxYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9hc3QvUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyLmdyb292eQorKysgYi9ncmVtbGluLWdyb292eS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL2FzdC9SZXBlYXRBU1RUcmFuc2Zvcm1hdGlvbkN1c3RvbWl6ZXIuZ3Jvb3Z5CkBAIC0zMSw3ICszMSw3IEBACiAgKiBPdmVycmlkZXMgdGhlIHNpbmdsZSBhcHBsaWNhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGdsb2JhbCBBU1QgVHJhbnNmb3JtYXRpb24gKHdoaWNoIGlzIGhvdyB0aGUgYmFzZQogICoge0Bjb2RlIEFTVFRyYW5zZm9ybWF0aW9uQ3VzdG9taXplcn0gd29ya3MuIFRoYXQgYXBwcm9hY2ggaXMgbm90IHNvIGhlbHBmdWwgaW4gdGhlIFNjcmlwdEVuZ2luZSB3aGVyZSB3ZSB3YW50CiAgKiBlYWNoIHNjcmlwdCB0byBiZSB0cmVhdGVkIGFzIGFuIGluZGVwZW5kZW50IHNvdXJjZSB1bml0LiBUaGlzIGlzIGEgYml0IG9mIGEgaGFjayBidXQgdGhlIHVzZSBjYXNlIGhlcmUgaXMgZmFpcmx5Ci0gKiBuYXJyb3cgKGkuZS4ge0Bjb2RlIFZhckFzQmluZGluZ0FTVFRyYW5zZm9ybWF0aW9ufSkKKyAqIG5hcnJvdwogICovCiBjbGFzcyBSZXBlYXRBU1RUcmFuc2Zvcm1hdGlvbkN1c3RvbWl6ZXIgZXh0ZW5kcyBBU1RUcmFuc2Zvcm1hdGlvbkN1c3RvbWl6ZXIgewogICAgIFJlcGVhdEFTVFRyYW5zZm9ybWF0aW9uQ3VzdG9taXplcihmaW5hbCBBU1RUcmFuc2Zvcm1hdGlvbiB0cmFuc2Zvcm1hdGlvbikgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9hc3QvVmFyQXNCaW5kaW5nQVNUVHJhbnNmb3JtYXRpb24uZ3Jvb3Z5IGIvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9hc3QvVmFyQXNCaW5kaW5nQVNUVHJhbnNmb3JtYXRpb24uZ3Jvb3Z5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmM1NzQwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvYXN0L1ZhckFzQmluZGluZ0FTVFRyYW5zZm9ybWF0aW9uLmdyb292eQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5hc3QKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXIKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQmluZGluZ3MKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuQ29sbGVjdGlvblV0aWwKLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmFzdC5BU1ROb2RlCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuQ2xhc3NOb2RlCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuQ29kZVZpc2l0b3JTdXBwb3J0Ci1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuZXhwci5Bcmd1bWVudExpc3RFeHByZXNzaW9uCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuZXhwci5DbGFzc0V4cHJlc3Npb24KLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmFzdC5leHByLkNvbnN0YW50RXhwcmVzc2lvbgotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuYXN0LmV4cHIuRGVjbGFyYXRpb25FeHByZXNzaW9uCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuZXhwci5FeHByZXNzaW9uCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuZXhwci5NZXRob2RDYWxsRXhwcmVzc2lvbgotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuYXN0LmV4cHIuUHJvcGVydHlFeHByZXNzaW9uCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuZXhwci5TdGF0aWNNZXRob2RDYWxsRXhwcmVzc2lvbgotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuYXN0LmV4cHIuVHVwbGVFeHByZXNzaW9uCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5hc3QuZXhwci5WYXJpYWJsZUV4cHJlc3Npb24KLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmFzdC5zdG10LkV4cHJlc3Npb25TdGF0ZW1lbnQKLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmNvbnRyb2wuQ29tcGlsZVBoYXNlCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5jb250cm9sLlNvdXJjZVVuaXQKLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LnN5bnRheC5Ub2tlbgotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuc3ludGF4LlR5cGVzCi1pbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS50cmFuc2Zvcm0uQVNUVHJhbnNmb3JtYXRpb24KLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LnRyYW5zZm9ybS5Hcm9vdnlBU1RUcmFuc2Zvcm1hdGlvbgotCi0vKioKLSAqIENvbnZlcnRzIHZhcmlhYmxlcyB1c2VkIGluIEdyZW1saW4gdG8ge0BsaW5rIEJpbmRpbmdzfSBkZWNsYXJhdGlvbnMuIEJ5IGRvaW5nIHRoaXMsIHRoZSBnZW5lcmF0ZWQgdHJhdmVyc2FsIGVuZHMgdXAKLSAqIGhhdmluZyB0aG9zZSB7QGxpbmsgQmluZGluZ3N9IGluIHRoZSBHcmVtbGluIHtAbGluayBCeXRlY29kZX0gd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHBhc3NlZCB0aHJvdWdoIGEKLSAqIHtAbGluayBUcmFuc2xhdG9yfSB0byBnZW5lcmF0ZSBhIHNjcmlwdCBmb3JtLCB0aGUgdmFyaWFibGVzIGFyZSBwcmVzZXJ2ZWQuCi0gKiA8cC8+Ci0gKiBUaGlzIEFTVCBUcmFuc2Zvcm1hdGlvbiBpcyBtZWFudCB0byB3b3JrIHdpdGggYSBzaW5nbGUgbGluZXMgb2YgR3JlbWxpbiBhbmQgb25seSBHcmVtbGluLiBJbmNsdXNpb24gb2YgR3Jvb3Z5IGNvZGUKLSAqIG1pZ2h0IHByb2R1Y2Ugb2RkIGJlaGF2aW9yIGFzIGFsbCB2YXJpYWJsZXMgZm91bmQgYXJlIGJhc2ljYWxseSB0cmVhdGVkIGFzIGJpbmRpbmdzIHdoaWNoIGlzIG5vdCBkZXNpcmFibGUgZm9yCi0gKiBzY3JpcHRzIGluIGdlbmVyYWwuCi0gKiA8cC8+Ci0gKiBUaGlzIGNsYXNzIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2Ugb25seSBhdCB0aGlzIHRpbWUgYXMgaXQgaGFzIGluY29tcGxldGUgY292ZXJhZ2Ugb3ZlciBmcm9tIHRoZSBnaGVya2luIHRlc3RzLgotICovCi1AR3Jvb3Z5QVNUVHJhbnNmb3JtYXRpb24ocGhhc2UgPSBDb21waWxlUGhhc2UuU0VNQU5USUNfQU5BTFlTSVMpCi1jbGFzcyBWYXJBc0JpbmRpbmdBU1RUcmFuc2Zvcm1hdGlvbiBpbXBsZW1lbnRzIEFTVFRyYW5zZm9ybWF0aW9uIHsKLQotICAgIHByaXZhdGUgZGVmIGJpbmRpbmdWYXJpYWJsZU5hbWUgPSAnYkluRGlOZycgKyBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpLnJlcGxhY2UoJy0nLCAnJykKLQotICAgIEBPdmVycmlkZQotICAgIHZvaWQgdmlzaXQoQVNUTm9kZVtdIG5vZGVzLCBTb3VyY2VVbml0IHNvdXJjZSkgewotICAgICAgICAvLyBpbmplY3QgYSBiaW5kaW5nIGRlY2xhcmF0aW9uIGhlcmUgdXNpbmcgYSB1bmlxdWUgdmFyaWFibGUgbmFtZSB0aGF0IHNob3VsZCBub3QgaW50ZXJmZXJlIHdpdGggdmFyaWFibGVzCi0gICAgICAgIC8vIGluIHRoZSBHcmVtbGluIGl0c2VsZiAtIGJhc2ljYWxseSBnZW5lcmF0ZXMgdGhlIGZvbGxvd2luZyBsaW5lIHJpZ2h0IGJlZm9yZSB0aGUgR3JlbWxpbiBzdGF0ZW1lbnQ6Ci0gICAgICAgIC8vIGJJbkRpTmc8dXVpZD4gPSBCaW5kaW5ncy5pbnN0YW5jZSgpCi0gICAgICAgIHNvdXJjZS5BU1Quc3RhdGVtZW50QmxvY2suc3RhdGVtZW50cy5hZGQoMCwgbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoCi0gICAgICAgICAgICAgICAgbmV3IERlY2xhcmF0aW9uRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUV4cHJlc3Npb24oYmluZGluZ1ZhcmlhYmxlTmFtZSwgbmV3IENsYXNzTm9kZShCaW5kaW5ncykpLAotICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW4ubmV3U3ltYm9sKFR5cGVzLkVRVUFMLCAwLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdGF0aWNNZXRob2RDYWxsRXhwcmVzc2lvbihuZXcgQ2xhc3NOb2RlKEJpbmRpbmdzKSwgImluc3RhbmNlIiwgbmV3IFR1cGxlRXhwcmVzc2lvbigpKQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgKSkKLQotICAgICAgICAvLyBhbmFseXplIHRoZSBHcmVtbGluIGFuZCBkZXRlY3QgdmFyaWFibGVzIHJlcGxhY2luZyB0aGVtIHdpdGg6Ci0gICAgICAgIC8vIGJJbkRpTmc8dXVpZD4ub2YoPHZhcj4sPHNvbWUtZGVmYXVsdD4pCi0gICAgICAgIHNvdXJjZS5BU1Quc3RhdGVtZW50QmxvY2suc3RhdGVtZW50c1sxXS52aXNpdChuZXcgQ29kZVZpc2l0b3JTdXBwb3J0KCkgewotCi0gICAgICAgICAgICBkZWYgY3VycmVudE1ldGhvZAotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHZvaWQgdmlzaXRNZXRob2RDYWxsRXhwcmVzc2lvbihNZXRob2RDYWxsRXhwcmVzc2lvbiBjYWxsKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudE1ldGhvZCA9IGNhbGwubWV0aG9kQXNTdHJpbmcKLSAgICAgICAgICAgICAgICBjYWxsLmdldEFyZ3VtZW50cygpLnZpc2l0KHRoaXMpCi0gICAgICAgICAgICAgICAgY2FsbC5nZXRPYmplY3RFeHByZXNzaW9uKCkudmlzaXQodGhpcykKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICB2b2lkIHZpc2l0QXJndW1lbnRsaXN0RXhwcmVzc2lvbihBcmd1bWVudExpc3RFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb24uZW1wdHkpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5lYWNoV2l0aEluZGV4eyBFeHByZXNzaW9uIGVudHJ5LCBpbnQgaSAtPgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5IGluc3RhbmNlb2YgVmFyaWFibGVFeHByZXNzaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKSA9PSAiSW5maW5pdHkiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5lZWQgYSBkZWZhdWx0IGJpbmRpbmcgdmFsdWUgLSBhbnkgbm9uc2Vuc2UgdGhhdCBzYXRpc2ZpZXMgdGhlIHN0ZXAgYXJndW1lbnQgc2hvdWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd29yayB0eXBpY2FsbHkuIHRoZSBzdHJpbmcgZGVmYXVsdCB3b3JrcyBmb3IgYSBncmVhdCBtYW55IGNhc2VzLCBidXQgc29tZXRpbWVzIHdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBnZXQgbW9yZSBzcGVjaWZpYy4gYXMgaXQgc2l0cyB0aGlzIGxpc3QgaXMgaW5jb21wbGV0ZSBhbmQgY2VydGFpbiBiaW5kaW5ncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIGNlcnRhaW4gcG9zaXRpb24gbWF5IGdlbmVyYXRlIGVycm9ycyBzdGlsbCwgYnV0IHRoZSBlbnRpcmUgc2V0IG9mIGdoZXJraW4gZmlsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXNzZXMgd2l0aCB3aGF0IGlzIHNwZWNpZmllZCBoZXJlIGN1cnJlbnRseS4gbW9yZSB0ZXN0cyB3aWxsIGNvbWUgYXMgd2UgYnVpbGQgb3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lkZXIgR3JlbWxpbiBjb3ZlcmFnZSBhZnRlciB0aGUgdGVzdCBzdWl0ZSBpcyB1bmlmaWVkLiBhcyB0aGlzIGJvZHkgb2YgY29kZSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lYW50IGZvciB0ZXN0aW5nIG9ubHkgYW5kIGl0IGlzIGRvY3VtZW50ZWQgYXMgc3VjaCBpdCBzZWVtcyBvayB0byBsZWF2ZSB0aGlzIGFzLWlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW50aWwgd2UgYnVpbGQgb3V0IG1vcmUgR2hlcmtpbiB0ZXN0cyB0byBleHBvc2UgYW55IHNob3J0Y29taW5ncy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgYmluZGluZ1ZhbHVlID0gbmV3IENvbnN0YW50RXhwcmVzc2lvbihVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudE1ldGhvZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMubWFwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZmlsdGVyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMuZmxhdE1hcDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLnNpZGVFZmZlY3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jaG9vc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy51bnRpbDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJyYW5jaDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdWYWx1ZSA9IG5ldyBTdGF0aWNNZXRob2RDYWxsRXhwcmVzc2lvbihuZXcgQ2xhc3NOb2RlKF9fKSwgImlkZW50aXR5IiwgbmV3IFR1cGxlRXhwcmVzc2lvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMSkgYmluZGluZ1ZhbHVlID0gbmV3IFByb3BlcnR5RXhwcmVzc2lvbihuZXcgQ2xhc3NFeHByZXNzaW9uKG5ldyBDbGFzc05vZGUoT3JkZXIpKSwgImRlc2MiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLm1lcmdlVjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdWYWx1ZSA9IG5ldyBNZXRob2RDYWxsRXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2xhc3NFeHByZXNzaW9uKG5ldyBDbGFzc05vZGUoQ29sbGVjdGlvblV0aWwpKSwgImFzTWFwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVHVwbGVFeHByZXNzaW9uKG5ldyBDb25zdGFudEV4cHJlc3Npb24oVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5jYWxsOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoVHJhdmVyc2FsLlN5bWJvbHMub3B0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nVmFsdWUgPSBuZXcgTWV0aG9kQ2FsbEV4cHJlc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbGFzc0V4cHJlc3Npb24obmV3IENsYXNzTm9kZShDb2xsZWN0aW9uVXRpbCkpLCAiYXNNYXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVHVwbGVFeHByZXNzaW9uKG5ldyBDb25zdGFudEV4cHJlc3Npb24oVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbnN0YW50RXhwcmVzc2lvbihVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgYmluZGluZ0V4cHJlc3Npb24gPSBjcmVhdGVCaW5kaW5nRnJvbVZhcihlbnRyeS50ZXh0LCBiaW5kaW5nVmFyaWFibGVOYW1lLCBiaW5kaW5nVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ0V4cHJlc3Npb24uc291cmNlUG9zaXRpb24gPSBlbnRyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdFeHByZXNzaW9uLmNvcHlOb2RlTWV0YURhdGEoZW50cnkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi5leHByZXNzaW9uc1tpXSA9IGJpbmRpbmdFeHByZXNzaW9uCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3VwZXIudmlzaXRBcmd1bWVudGxpc3RFeHByZXNzaW9uKGV4cHJlc3Npb24pCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0pCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZGVmIGNyZWF0ZUJpbmRpbmdGcm9tVmFyKFN0cmluZyBuYW1lT2ZWYXIsIFN0cmluZyBiaW5kaW5nVmFyaWFibGVOYW1lLCBFeHByZXNzaW9uIGJpbmRpbmdWYWx1ZSkgewotICAgICAgICByZXR1cm4gbmV3IE1ldGhvZENhbGxFeHByZXNzaW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlRXhwcmVzc2lvbihiaW5kaW5nVmFyaWFibGVOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb25zdGFudEV4cHJlc3Npb24oIm9mIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXJndW1lbnRMaXN0RXhwcmVzc2lvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbnN0YW50RXhwcmVzc2lvbihuYW1lT2ZWYXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nVmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICApCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L3V0aWwvRGVwZW5kZW5jeUdyYWJiZXIuZ3Jvb3Z5IGIvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vZ3Jvb3Z5L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L3V0aWwvRGVwZW5kZW5jeUdyYWJiZXIuZ3Jvb3Z5CmluZGV4IGUyZDI3OGIuLjVlZGVjNjIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy9tYWluL2dyb292eS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS91dGlsL0RlcGVuZGVuY3lHcmFiYmVyLmdyb292eQorKysgYi9ncmVtbGluLWdyb292eS9zcmMvbWFpbi9ncm9vdnkvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvdXRpbC9EZXBlbmRlbmN5R3JhYmJlci5ncm9vdnkKQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICAgICAgdGhyb3cgZQogICAgICAgICB9CiAKLSAgICAgICAgLy8gdGhlIG9yZGVyaW5nIG9mIGphcnMgc2VlbXMgdG8gbWF0dGVyIGluIHNvbWUgY2FzZXMgKGUuZy4gbmVvNGopLiAgdGhlIHBsdWdpbiBzeXN0ZW0gYWxsb3dzIHRoZSBwbHVnaW4KKyAgICAgICAgLy8gdGhlIG9yZGVyaW5nIG9mIGphcnMgc2VlbXMgdG8gbWF0dGVyIGluIHNvbWUgY2FzZXMuICB0aGUgcGx1Z2luIHN5c3RlbSBhbGxvd3MgdGhlIHBsdWdpbgogICAgICAgICAvLyB0byBwbGFjZSBhIEdyZW1saW4tUGx1Z2luLVBhdGhzIGVudHJ5IGluIHRoZSBqYXIgbWFuaWZlc3QgZmlsZSB0byBkZWZpbmUgd2hlcmUgc3BlY2lmaWMgamFyIGZpbGVzIHNob3VsZAogICAgICAgICAvLyBnbyBpbiB0aGUgcGF0aCB3aGljaCBwcm92aWRlcyBlbm91Z2ggZmxleGliaWxpdHkgdG8gY29udHJvbCB3aGVuIGphcnMgc2hvdWxkIGxvYWQuICB1bmZvcnR1bmF0ZWx5LAogICAgICAgICAvLyB0aGlzICJvcmRlcmluZyIgaXNzdWUgZG9lc24ndCBzZWVtIHRvIGJlIGRvY3VtZW50ZWQgYXMgYW4gaXNzdWUgYW55d2hlcmUgYW5kIGl0IGlzIGRpZmZpY3VsdCB0byBzYXkKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvZW5naW5lL0dyZW1saW5FeGVjdXRvci5qYXZhIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9lbmdpbmUvR3JlbWxpbkV4ZWN1dG9yLmphdmEKaW5kZXggYzBhZTMxZC4uNTczODdjZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9lbmdpbmUvR3JlbWxpbkV4ZWN1dG9yLmphdmEKKysrIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9lbmdpbmUvR3JlbWxpbkV4ZWN1dG9yLmphdmEKQEAgLTE5LDE5ICsxOSwxNSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmU7CiAKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuQ2xhc3NVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuZXhjZXB0aW9uLkV4Y2VwdGlvblV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5jb25jdXJyZW50LkJhc2ljVGhyZWFkRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0Q2hlY2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuZXhjZXB0aW9uLkV4Y2VwdGlvblV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkNhY2hlZEdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkNvbmN1cnJlbnRCaW5kaW5nczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluUGx1Z2luOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRDaGVja2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRFbmdpbmU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuQnl0ZWNvZGVIZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEludGVycnVwdGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKQEAgLTQwLDcgKzM2LDYgQEAKIGltcG9ydCBqYXZheC5zY3JpcHQuQ29tcGlsZWRTY3JpcHQ7CiBpbXBvcnQgamF2YXguc2NyaXB0LlNjcmlwdEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5zY3JpcHQuU2ltcGxlQmluZGluZ3M7Ci0KIGltcG9ydCBqYXZhLmlvLkludGVycnVwdGVkSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKQEAgLTE5MiwxMiArMTg3LDEyIEBACiAgICAgICogcmVzdWx0IGFmdGVyIHNjcmlwdCBldmFsdWF0ZXMgYnV0IGJlZm9yZSB0cmFuc2FjdGlvbiBjb21taXQgYW5kIGJlZm9yZSB0aGUgcmV0dXJuZWQge0BsaW5rIENvbXBsZXRhYmxlRnV0dXJlfQogICAgICAqIGlzIGNvbXBsZXRlZC4KICAgICAgKgotICAgICAqIEBwYXJhbSBncmVtbGluIHRoZSBzY3JpcHQgb3IgYnl0ZWNvZGUgdG8gZXZhbHVhdGUKKyAgICAgKiBAcGFyYW0gZ3JlbWxpbiB0aGUgc2NyaXB0IHRvIGV2YWx1YXRlCiAgICAgICogQHBhcmFtIGxhbmd1YWdlIHRoZSBsYW5ndWFnZSB0byBldmFsdWF0ZSBpdCBpbgogICAgICAqIEBwYXJhbSBib3VuZFZhcnMgdGhlIGJpbmRpbmdzIHRvIGV2YWx1YXRlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzY3JpcHQKICAgICAgKiBAcGFyYW0gdHJhbnNmb3JtUmVzdWx0IGEge0BsaW5rIEZ1bmN0aW9ufSB0aGF0IHRyYW5zZm9ybXMgdGhlIHJlc3VsdCAtIGNhbiBiZSB7QGNvZGUgbnVsbH0KICAgICAgKi8KLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8T2JqZWN0PiBldmFsKGZpbmFsIE9iamVjdCBncmVtbGluLCBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UsIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYm91bmRWYXJzLAorICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxPYmplY3Q+IGV2YWwoZmluYWwgU3RyaW5nIGdyZW1saW4sIGZpbmFsIFN0cmluZyBsYW5ndWFnZSwgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBib3VuZFZhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGdW5jdGlvbjxPYmplY3QsIE9iamVjdD4gdHJhbnNmb3JtUmVzdWx0KSB7CiAgICAgICAgIHJldHVybiBldmFsKGdyZW1saW4sIGxhbmd1YWdlLCBuZXcgU2ltcGxlQmluZGluZ3MoYm91bmRWYXJzKSwgdHJhbnNmb3JtUmVzdWx0LCBudWxsKTsKICAgICB9CkBAIC0yMDcsMTMgKzIwMiwxMyBAQAogICAgICAqIHJlc3VsdCBhZnRlciBzY3JpcHQgZXZhbHVhdGVzIGJ1dCBiZWZvcmUgdHJhbnNhY3Rpb24gY29tbWl0IGFuZCBiZWZvcmUgdGhlIHJldHVybmVkIHtAbGluayBDb21wbGV0YWJsZUZ1dHVyZX0KICAgICAgKiBpcyBjb21wbGV0ZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZ3JlbWxpbiB0aGUgc2NyaXB0IG9yIGJ5dGVjb2RlIHRvIGV2YWx1YXRlCisgICAgICogQHBhcmFtIGdyZW1saW4gdGhlIHNjcmlwdCB0byBldmFsdWF0ZQogICAgICAqIEBwYXJhbSBsYW5ndWFnZSB0aGUgbGFuZ3VhZ2UgdG8gZXZhbHVhdGUgaXQgaW4KICAgICAgKiBAcGFyYW0gYm91bmRWYXJzIHRoZSBiaW5kaW5ncyB0byBldmFsdWF0ZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0CiAgICAgICogQHBhcmFtIHRpbWVPdXQgb3B0aW9uYWwgb3ZlcnJpZGUgZm9yIGV2YWx1YXRpb24gdGltZW91dAogICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1SZXN1bHQgYSB7QGxpbmsgRnVuY3Rpb259IHRoYXQgdHJhbnNmb3JtcyB0aGUgcmVzdWx0IC0gY2FuIGJlIHtAY29kZSBudWxsfQogICAgICAqLwotICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxPYmplY3Q+IGV2YWwoZmluYWwgT2JqZWN0IGdyZW1saW4sIGZpbmFsIFN0cmluZyBsYW5ndWFnZSwgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBib3VuZFZhcnMsCisgICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPE9iamVjdD4gZXZhbChmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgU3RyaW5nIGxhbmd1YWdlLCBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGJvdW5kVmFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExvbmcgdGltZU91dCwgZmluYWwgRnVuY3Rpb248T2JqZWN0LCBPYmplY3Q+IHRyYW5zZm9ybVJlc3VsdCkgewogICAgICAgICByZXR1cm4gZXZhbChncmVtbGluLCBsYW5ndWFnZSwgbmV3IFNpbXBsZUJpbmRpbmdzKGJvdW5kVmFycyksIHRpbWVPdXQsIHRyYW5zZm9ybVJlc3VsdCwgbnVsbCk7CiAgICAgfQpAQCAtMjQwLDEzICsyMzUsMTMgQEAKICAgICAgKiBwcm9jZXNzaW5nIGFmdGVyIHRoZSBzY3JpcHQgZXZhbHVhdGVzIGFuZCBhZnRlciB0aGUge0BsaW5rIENvbXBsZXRhYmxlRnV0dXJlfSBpcyBjb21wbGV0ZWQsIGJ1dCBiZWZvcmUgdGhlCiAgICAgICogdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgogICAgICAqCi0gICAgICogQHBhcmFtIGdyZW1saW4gdGhlIHNjcmlwdCBvciBieXRlY29kZSB0byBldmFsdWF0ZQorICAgICAqIEBwYXJhbSBncmVtbGluIHRoZSBzY3JpcHQgdG8gZXZhbHVhdGUKICAgICAgKiBAcGFyYW0gbGFuZ3VhZ2UgdGhlIGxhbmd1YWdlIHRvIGV2YWx1YXRlIGl0IGluCiAgICAgICogQHBhcmFtIGJvdW5kVmFycyB0aGUgYmluZGluZ3MgdG8gZXZhbHVhdGUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNjcmlwdAogICAgICAqIEBwYXJhbSB0cmFuc2Zvcm1SZXN1bHQgYSB7QGxpbmsgRnVuY3Rpb259IHRoYXQgdHJhbnNmb3JtcyB0aGUgcmVzdWx0IC0gY2FuIGJlIHtAY29kZSBudWxsfQogICAgICAqIEBwYXJhbSB3aXRoUmVzdWx0IGEge0BsaW5rIENvbnN1bWVyfSB0aGF0IGFjY2VwdHMgdGhlIHJlc3VsdCAtIGNhbiBiZSB7QGNvZGUgbnVsbH0KICAgICAgKi8KLSAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8T2JqZWN0PiBldmFsKGZpbmFsIE9iamVjdCBncmVtbGluLCBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UsIGZpbmFsIEJpbmRpbmdzIGJvdW5kVmFycywKKyAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8T2JqZWN0PiBldmFsKGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UsIGZpbmFsIEJpbmRpbmdzIGJvdW5kVmFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZ1bmN0aW9uPE9iamVjdCwgT2JqZWN0PiB0cmFuc2Zvcm1SZXN1bHQsIGZpbmFsIENvbnN1bWVyPE9iamVjdD4gd2l0aFJlc3VsdCkgewogICAgICAgICByZXR1cm4gZXZhbChncmVtbGluLCBsYW5ndWFnZSwgYm91bmRWYXJzLCBudWxsLCB0cmFuc2Zvcm1SZXN1bHQsIHdpdGhSZXN1bHQpOwogICAgIH0KQEAgLTI1OCwxNCArMjUzLDE0IEBACiAgICAgICogcHJvY2Vzc2luZyBhZnRlciB0aGUgc2NyaXB0IGV2YWx1YXRlcyBhbmQgYWZ0ZXIgdGhlIHtAbGluayBDb21wbGV0YWJsZUZ1dHVyZX0gaXMgY29tcGxldGVkLCBidXQgYmVmb3JlIHRoZQogICAgICAqIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KICAgICAgKgotICAgICAqIEBwYXJhbSBncmVtbGluIHRoZSBzY3JpcHQgb3IgYnl0ZWNvZGUgdG8gZXZhbHVhdGUKKyAgICAgKiBAcGFyYW0gZ3JlbWxpbiB0aGUgc2NyaXB0IHRvIGV2YWx1YXRlCiAgICAgICogQHBhcmFtIGxhbmd1YWdlIHRoZSBsYW5ndWFnZSB0byBldmFsdWF0ZSBpdCBpbgogICAgICAqIEBwYXJhbSBib3VuZFZhcnMgdGhlIGJpbmRpbmdzIHRvIGV2YWx1YXRlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzY3JpcHQKICAgICAgKiBAcGFyYW0gdGltZU91dCBvcHRpb25hbCBvdmVycmlkZSBmb3IgZXZhbHVhdGlvbiB0aW1lb3V0CiAgICAgICogQHBhcmFtIHRyYW5zZm9ybVJlc3VsdCBhIHtAbGluayBGdW5jdGlvbn0gdGhhdCB0cmFuc2Zvcm1zIHRoZSByZXN1bHQgLSBjYW4gYmUge0Bjb2RlIG51bGx9CiAgICAgICogQHBhcmFtIHdpdGhSZXN1bHQgYSB7QGxpbmsgQ29uc3VtZXJ9IHRoYXQgYWNjZXB0cyB0aGUgcmVzdWx0IC0gY2FuIGJlIHtAY29kZSBudWxsfQogICAgICAqLwotICAgIHB1YmxpYyBDb21wbGV0YWJsZUZ1dHVyZTxPYmplY3Q+IGV2YWwoZmluYWwgT2JqZWN0IGdyZW1saW4sIGZpbmFsIFN0cmluZyBsYW5ndWFnZSwgZmluYWwgQmluZGluZ3MgYm91bmRWYXJzLCBmaW5hbCBMb25nIHRpbWVPdXQsCisgICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPE9iamVjdD4gZXZhbChmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgU3RyaW5nIGxhbmd1YWdlLCBmaW5hbCBCaW5kaW5ncyBib3VuZFZhcnMsIGZpbmFsIExvbmcgdGltZU91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZ1bmN0aW9uPE9iamVjdCwgT2JqZWN0PiB0cmFuc2Zvcm1SZXN1bHQsIGZpbmFsIENvbnN1bWVyPE9iamVjdD4gd2l0aFJlc3VsdCkgewogICAgICAgICBmaW5hbCBMaWZlQ3ljbGUgbGlmZUN5Y2xlID0gTGlmZUN5Y2xlLmJ1aWxkKCkKICAgICAgICAgICAgICAgICAuZXZhbHVhdGlvblRpbWVvdXRPdmVycmlkZSh0aW1lT3V0KQpAQCAtMjc4LDEyICsyNzMsMTIgQEAKICAgICAvKioKICAgICAgKiBFdmFsdWF0ZSBhIHNjcmlwdCBhbmQgYWxsb3cgZm9yIHRoZSBzdWJtaXNzaW9uIG9mIGFsdGVyYXRpb24gdG8gdGhlIGVudGlyZSBldmFsdWF0aW9uIGV4ZWN1dGlvbiBsaWZlY3ljbGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gZ3JlbWxpbiB0aGUgc2NyaXB0IG9yIGJ5dGVjb2RlIHRvIGV2YWx1YXRlCisgICAgICogQHBhcmFtIGdyZW1saW4gdGhlIHNjcmlwdCB0byBldmFsdWF0ZQogICAgICAqIEBwYXJhbSBsYW5ndWFnZSB0aGUgbGFuZ3VhZ2UgdG8gZXZhbHVhdGUgaXQgaW4KICAgICAgKiBAcGFyYW0gYm91bmRWYXJzIHRoZSBiaW5kaW5ncyB0byBldmFsdWF0ZSBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2NyaXB0CiAgICAgICogQHBhcmFtIGxpZmVDeWNsZSBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCBhdCB2YXJpb3VzIHN0YWdlcyBvZiB0aGUgZXZhbHVhdGlvbiBwcm9jZXNzCiAgICAgICovCi0gICAgcHVibGljIENvbXBsZXRhYmxlRnV0dXJlPE9iamVjdD4gZXZhbChmaW5hbCBPYmplY3QgZ3JlbWxpbiwgZmluYWwgU3RyaW5nIGxhbmd1YWdlLCBmaW5hbCBCaW5kaW5ncyBib3VuZFZhcnMsIGZpbmFsIExpZmVDeWNsZSBsaWZlQ3ljbGUpIHsKKyAgICBwdWJsaWMgQ29tcGxldGFibGVGdXR1cmU8T2JqZWN0PiBldmFsKGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UsIGZpbmFsIEJpbmRpbmdzIGJvdW5kVmFycywgZmluYWwgTGlmZUN5Y2xlIGxpZmVDeWNsZSkgewogICAgICAgICBmaW5hbCBTdHJpbmcgbGFuZyA9IE9wdGlvbmFsLm9mTnVsbGFibGUobGFuZ3VhZ2UpLm9yRWxzZSgiZ3JlbWxpbi1ncm9vdnkiKTsKIAogICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKQEAgLTI5Niw5ICsyOTEsNyBAQAogCiAgICAgICAgIC8vIG92ZXJyaWRlIHRoZSB0aW1lb3V0IGlmIHRoZSBsaWZlY3ljbGUgaGFzIGEgdmFsdWUgYXNzaWduZWQuIGlmIHRoZSBzY3JpcHQgY29udGFpbnMgd2l0aCh0aW1lb3V0KQogICAgICAgICAvLyBvcHRpb25zIHRoZW4gYWxsb3cgdGhhdCB2YWx1ZSB0byBvdmVycmlkZSB3aGF0J3MgcHJvdmlkZWQgb24gdGhlIGxpZmVjeWNsZQotICAgICAgICBmaW5hbCBPcHRpb25hbDxMb25nPiB0aW1lb3V0RGVmaW5lZEluU2NyaXB0ID0gZ3JlbWxpbiBpbnN0YW5jZW9mIFN0cmluZwotICAgICAgICAgICAgICAgID8gR3JlbWxpblNjcmlwdENoZWNrZXIucGFyc2UoKFN0cmluZykgZ3JlbWxpbikuZ2V0VGltZW91dCgpCi0gICAgICAgICAgICAgICAgOiBPcHRpb25hbC5lbXB0eSgpOworICAgICAgICBmaW5hbCBPcHRpb25hbDxMb25nPiB0aW1lb3V0RGVmaW5lZEluU2NyaXB0ID0gR3JlbWxpblNjcmlwdENoZWNrZXIucGFyc2UoZ3JlbWxpbikuZ2V0VGltZW91dCgpOwogICAgICAgICBmaW5hbCBsb25nIHNjcmlwdEV2YWxUaW1lT3V0ID0gdGltZW91dERlZmluZWRJblNjcmlwdC5vckVsc2UoCiAgICAgICAgICAgICAgICAgbGlmZUN5Y2xlLmdldEV2YWx1YXRpb25UaW1lb3V0T3ZlcnJpZGUoKS5vckVsc2UoZXZhbHVhdGlvblRpbWVvdXQpKTsKIApAQCAtMzA5LDIxICszMDIsNyBAQAogCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJFdmFsdWF0aW5nIHNjcmlwdCAtIHt9IC0gaW4gdGhyZWFkIFt7fV0iLCBncmVtbGluLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7CiAKLSAgICAgICAgICAgICAgICBPYmplY3QgbzsKLSAgICAgICAgICAgICAgICBpZiAoZ3JlbWxpbiBpbnN0YW5jZW9mIFN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBvID0gZ3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXIuZ2V0RW5naW5lQnlOYW1lKGxhbmcpLmV2YWwoKFN0cmluZykgZ3JlbWxpbiwgYmluZGluZ3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChncmVtbGluIGluc3RhbmNlb2YgQnl0ZWNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSAoQnl0ZWNvZGUpIGdyZW1saW47Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmF2ZXJzYWwgPSBldmFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlLCBiaW5kaW5ncywgQnl0ZWNvZGVIZWxwZXIuZ2V0TGFtYmRhTGFuZ3VhZ2UoYnl0ZWNvZGUpLm9yRWxzZSgiZ3JlbWxpbi1ncm9vdnkiKSwgImciKTsKLQotICAgICAgICAgICAgICAgICAgICBvID0gSXRlcmF0b3JVdGlscy5hc0xpc3QodHJhdmVyc2FsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgZ3JlbWxpbiB0eXBlLiIpOwotICAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBvID1ncmVtbGluU2NyaXB0RW5naW5lTWFuYWdlci5nZXRFbmdpbmVCeU5hbWUobGFuZykuZXZhbChncmVtbGluLCBiaW5kaW5ncyk7CiAKICAgICAgICAgICAgICAgICAvLyBhcHBseSBhIHRyYW5zZm9ybWF0aW9uIGJlZm9yZSBzZW5kaW5nIGJhY2sgdGhlIHJlc3VsdCAtIHVzZWZ1bCB3aGVuIHRyeWluZyB0byBmb3JjZSBzZXJpYWxpemF0aW9uCiAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIHNhbWUgdGhyZWFkIHRoYXQgdGhlIGV2YWwgdG9vayBwbGFjZSBnaXZlbiBUaHJlYWRMb2NhbCBuYXR1cmUgb2YgZ3JhcGhzIGFzIHdlbGwgYXMgc29tZQpAQCAtMzkyLDE5ICszNzEsNiBAQAogICAgICAgICByZXR1cm4gZXZhbHVhdGlvbkZ1dHVyZTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBFdmFsdWF0ZXMgYnl0ZWNvZGUgd2l0aCBiaW5kaW5ncyBmb3IgYSBzcGVjaWZpYyBsYW5ndWFnZSBpbnRvIGEge0BsaW5rIFRyYXZlcnNhbH0uCi0gICAgICovCi0gICAgcHVibGljIFRyYXZlcnNhbC5BZG1pbiBldmFsKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBCaW5kaW5ncyBib3VuZFZhcnMsIGZpbmFsIFN0cmluZyBsYW5ndWFnZSwgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSkgdGhyb3dzIFNjcmlwdEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsYW5nID0gT3B0aW9uYWwub2ZOdWxsYWJsZShsYW5ndWFnZSkub3JFbHNlKCJncmVtbGluLWdyb292eSIpOwotCi0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIGJpbmRpbmdzLnB1dEFsbChnbG9iYWxCaW5kaW5ncyk7Ci0gICAgICAgIGJpbmRpbmdzLnB1dEFsbChib3VuZFZhcnMpOwotCi0gICAgICAgIHJldHVybiBncmVtbGluU2NyaXB0RW5naW5lTWFuYWdlci5nZXRFbmdpbmVCeU5hbWUobGFuZykuZXZhbChieXRlY29kZSwgYmluZGluZ3MsIHRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgfQotCiAgICAgcHVibGljIEdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyIGdldFNjcmlwdEVuZ2luZU1hbmFnZXIoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyOwogICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUuamF2YSBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUuamF2YQppbmRleCA0ZjAyMmY3Li5iODc5MTRjIDEwMDY0NAotLS0gYS9ncmVtbGluLWdyb292eS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9HcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lLmphdmEKKysrIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZS5qYXZhCkBAIC0zNywxMiArMzcsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRFbmdpbmU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0Q3VzdG9taXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5UcmFuc2xhdG9yQ3VzdG9taXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuR3Jvb3Z5VHJhbnNsYXRvcjsKIGltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmFzdC5DbGFzc0hlbHBlcjsKIGltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmFzdC5DbGFzc05vZGU7CiBpbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5jb250cm9sLkNvbXBpbGF0aW9uRmFpbGVkRXhjZXB0aW9uOwpAQCAtNzksNyArNzMsNiBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0xvbmc7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogCiAvKioKQEAgLTE0MCw3ICsxMzMsNiBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTExFQ1RFRF9CT1VORF9WQVJTX01BUF9WQVJOQU1FID0gImdyZW1saW5fc2NyaXB0X2VuZ2luZV9jb2xsZWN0ZWRfYm91bmR2YXJzIjsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gcGF0dGVybkltcG9ydFN0YXRpYyA9IFBhdHRlcm4uY29tcGlsZSgiXFxBaW1wb3J0XFxzc3RhdGljLioiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVGhyZWFkTG9jYWw8TWFwPFN0cmluZywgT2JqZWN0Pj4gQ09NUElMRV9PUFRJT05TID0gbmV3IFRocmVhZExvY2FsPE1hcDxTdHJpbmcsIE9iamVjdD4+KCkgewogICAgICAgICBAT3ZlcnJpZGUKQEAgLTE4Niw3ICsxNzgsNiBAQAogCiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lRmFjdG9yeSBmYWN0b3J5OwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUQVRJQyA9ICJzdGF0aWMiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ1JJUFQgPSAiU2NyaXB0IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9UX0dST09WWSA9ICIuZ3Jvb3Z5IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JPT1ZZX0xBTkdfU0NSSVBUID0gImdyb292eS5sYW5nLlNjcmlwdCI7CkBAIC0xOTgsNyArMTg5LDYgQEAKIAogICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpbnRlcnByZXRlck1vZGVFbmFibGVkOwogICAgIHByaXZhdGUgZmluYWwgbG9uZyBleHBlY3RlZENvbXBpbGF0aW9uVGltZTsKLSAgICBwcml2YXRlIGZpbmFsIE9wdGlvbmFsPFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvci5UeXBlVHJhbnNsYXRvcj4gdHlwZVRyYW5zbGF0b3I7CiAKICAgICAvKioKICAgICAgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHJlcXVpcmUgdHlwZSBjaGVja2luZyBpbmZyYXN0cnVjdHVyZSBpZiB0eXBlIGNoZWNraW5nIGlzIG5vdCBlbmFibGVkLgpAQCAtMjU3LDExICsyNDcsNiBAQAogICAgICAgICBpbnRlcnByZXRlck1vZGVFbmFibGVkID0gZ3Jvb3Z5Q3VzdG9taXplcnMuc3RyZWFtKCkKICAgICAgICAgICAgICAgICAuYW55TWF0Y2gocCAtPiBwLmdldENsYXNzKCkuZXF1YWxzKEludGVycHJldGVyTW9kZUdyb292eUN1c3RvbWl6ZXIuY2xhc3MpKTsKIAotICAgICAgICBmaW5hbCBPcHRpb25hbDxUcmFuc2xhdG9yQ3VzdG9taXplcj4gdHJhbnNsYXRvckN1c3RvbWl6ZXIgPSBsaXN0T2ZDdXN0b21pemVycy5zdHJlYW0oKS4KLSAgICAgICAgICAgICAgICBmaWx0ZXIocCAtPiBwIGluc3RhbmNlb2YgVHJhbnNsYXRvckN1c3RvbWl6ZXIpLgotICAgICAgICAgICAgICAgIG1hcChwIC0+IChUcmFuc2xhdG9yQ3VzdG9taXplcikgcCkuZmluZEZpcnN0KCk7Ci0gICAgICAgIHR5cGVUcmFuc2xhdG9yID0gdHJhbnNsYXRvckN1c3RvbWl6ZXIubWFwKFRyYW5zbGF0b3JDdXN0b21pemVyOjpjcmVhdGVUeXBlVHJhbnNsYXRvcik7Ci0KICAgICAgICAgY3JlYXRlQ2xhc3NMb2FkZXIoKTsKICAgICB9CiAKQEAgLTI3MiwzNSArMjU3LDYgQEAKICAgICAgICAgcmV0dXJuIGxvYWRlZFBsdWdpbnM7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFRyYXZlcnNhbC5BZG1pbiBldmFsKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncywgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZSkgdGhyb3dzIFNjcmlwdEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRoZXNlIHZhbGlkYXRpb25zIG9jY3VyIGJlZm9yZSBtZXJnaW5nIGluIGJ5dGVjb2RlIGJpbmRpbmdzIHdoaWNoIHdpbGwgb3ZlcnJpZGUgZXhpc3Rpbmcgb25lcy4gbmVlZCB0bwotICAgICAgICAvLyBleHRyYWN0IHRoZSBuYW1lZCB0cmF2ZXJzYWxzb3VyY2UgcHJpb3IgdG8gdGhhdCBoYXBwZW5pbmcgc28gdGhhdCBieXRlY29kZSBiaW5kaW5ncyBjYW4gc2hhcmUgdGhlIHNhbWUKLSAgICAgICAgLy8gbmFtZXNwYWNlIGFzIGdsb2JhbCBiaW5kaW5ncyAoZS5nLiB0cmF2ZXJzYWxzb3VyY2VzIGFuZCBncmFwaHMpLgotICAgICAgICBpZiAodHJhdmVyc2FsU291cmNlLmVxdWFscyhISURERU5fRykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgdHJhdmVyc2FsU291cmNlIGNhbm5vdCBoYXZlIHRoZSBuYW1lICIgKyBISURERU5fRyArICIgLSBpdCBpcyByZXNlcnZlZCIpOwotCi0gICAgICAgIGlmIChiaW5kaW5ncy5jb250YWluc0tleShISURERU5fRykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCaW5kaW5ncyBjYW5ub3QgaW5jbHVkZSAiICsgSElEREVOX0cgKyAiIC0gaXQgaXMgcmVzZXJ2ZWQiKTsKLQotICAgICAgICBpZiAoIWJpbmRpbmdzLmNvbnRhaW5zS2V5KHRyYXZlcnNhbFNvdXJjZSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgYmluZGluZ3MgYXZhaWxhYmxlIHRvIHRoZSBTY3JpcHRFbmdpbmUgZG8gbm90IGNvbnRhaW4gYSB0cmF2ZXJzYWxTb3VyY2UgbmFtZWQ6ICIgKyB0cmF2ZXJzYWxTb3VyY2UpOwotCi0gICAgICAgIGZpbmFsIE9iamVjdCBiID0gYmluZGluZ3MuZ2V0KHRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgICAgIGlmICghKGIgaW5zdGFuY2VvZiBUcmF2ZXJzYWxTb3VyY2UpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0cmF2ZXJzYWxTb3VyY2UgKyAiIGlzIG9mIHR5cGUgIiArIGIuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIGFuZCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVHJhdmVyc2FsU291cmNlIik7Ci0KLSAgICAgICAgZmluYWwgQmluZGluZ3MgaW5uZXIgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgaW5uZXIucHV0QWxsKGJpbmRpbmdzKTsKLSAgICAgICAgaW5uZXIucHV0QWxsKGJ5dGVjb2RlLmdldEJpbmRpbmdzKCkpOwotICAgICAgICBpbm5lci5wdXQoSElEREVOX0csIGIpOwotICAgICAgICAvLyBEZWZhdWx0VHlwZVRyYW5zbGF0b3IgaXNuJ3QgdGhyZWFkLXNhZmUgc28gYSBuZXcgb25lIG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCB0byBrZWVwIHRoaXMgU2NyaXB0RW5naW5lIHRocmVhZC1zYWZlLgotICAgICAgICBmaW5hbCBUcmFuc2xhdG9yLlNjcmlwdFRyYW5zbGF0b3IuVHlwZVRyYW5zbGF0b3IgdHJhbnNsYXRvciA9IHR5cGVUcmFuc2xhdG9yLmlzUHJlc2VudCgpID8gdHlwZVRyYW5zbGF0b3IuZ2V0KCkgOiBuZXcgR3Jvb3Z5VHJhbnNsYXRvci5EZWZhdWx0VHlwZVRyYW5zbGF0b3IoZmFsc2UpOwotICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjcmlwdCBzY3JpcHQgPSBHcm9vdnlUcmFuc2xhdG9yLm9mKEhJRERFTl9HLCB0cmFuc2xhdG9yKS50cmFuc2xhdGUoYnl0ZWNvZGUpOwotICAgICAgICBzY3JpcHQuZ2V0UGFyYW1ldGVycygpLmlmUHJlc2VudChpbm5lcjo6cHV0QWxsKTsKLSAgICAgICAgcmV0dXJuIChUcmF2ZXJzYWwuQWRtaW4pIHRoaXMuZXZhbChzY3JpcHQuZ2V0U2NyaXB0KCksIGlubmVyKTsKLSAgICB9Ci0KICAgICAvKioKICAgICAgKiBSZXNldHMgdGhlIGVudGlyZSB7QGNvZGUgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZX0gYnkgY2xlYXJpbmcgc2NyaXB0IGNhY2hlcywgcmVjcmVhdGluZyB0aGUgY2xhc3Nsb2FkZXIsCiAgICAgICogY2xlYXJpbmcgYmluZGluZ3MuCmRpZmYgLS1naXQgYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9HcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lVGVzdC5qYXZhIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZVRlc3QuamF2YQppbmRleCAxMWJjZjgyLi5mYjNmYmI2IDEwMDY0NAotLS0gYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9HcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmVUZXN0LmphdmEKQEAgLTIxLDI0ICsyMSwyMiBAQAogaW1wb3J0IGdyb292eS5sYW5nLkNsb3N1cmU7CiBpbXBvcnQgZ3Jvb3Z5LmxhbmcuTWlzc2luZ01ldGhvZEV4Y2VwdGlvbjsKIGltcG9ydCBncm9vdnkubGFuZy5NaXNzaW5nUHJvcGVydHlFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmV4Y2VwdGlvbi5FeGNlcHRpb25VdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuTWFwQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuY29uY3VycmVudC5CYXNpY1RocmVhZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmV4Y2VwdGlvbi5FeGNlcHRpb25VdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuYXN0LkFtYmlndW91c01ldGhvZEFTVFRyYW5zZm9ybWF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5hc3QuUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5hc3QuVmFyQXNCaW5kaW5nQVNUVHJhbnNmb3JtYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuRGVmYXVsdEltcG9ydEN1c3RvbWl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuSGFzU3RlcDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlN1YmdyYXBoU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuRG90TmV0VHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYW5zbGF0b3IuSmF2YXNjcmlwdFRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLlB5dGhvblRyYW5zbGF0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKIGltcG9ydCBvcmcuamF2YXR1cGxlcy5QYWlyOwpAQCAtNTMsOSArNTEsMTEgQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CkBAIC04MCw4ICs4MCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0W10gRU1QVFlfQVJHUyA9IG5ldyBPYmplY3RbMF07CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lIGFtYmlndW91c051bGxFbmdpbmUgPSBuZXcgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZSgKLSAgICAgICAgICAgIChHcm9vdnlDdXN0b21pemVyKSAoKSAtPiBuZXcgUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyKG5ldyBBbWJpZ3VvdXNNZXRob2RBU1RUcmFuc2Zvcm1hdGlvbigpKSwKLSAgICAgICAgICAgICAgICAoR3Jvb3Z5Q3VzdG9taXplcikgKCkgLT4gbmV3IFJlcGVhdEFTVFRyYW5zZm9ybWF0aW9uQ3VzdG9taXplcihuZXcgVmFyQXNCaW5kaW5nQVNUVHJhbnNmb3JtYXRpb24oKSkpOworICAgICAgICAgICAgKEdyb292eUN1c3RvbWl6ZXIpICgpIC0+IG5ldyBSZXBlYXRBU1RUcmFuc2Zvcm1hdGlvbkN1c3RvbWl6ZXIobmV3IEFtYmlndW91c01ldGhvZEFTVFRyYW5zZm9ybWF0aW9uKCkpKTsKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkTm90Q2FjaGVHbG9iYWxGdW5jdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTQ3NSwxMjIgKzQ3NCw2IEBACiAJfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9kdWNlQmluZGluZ3NGb3JWYXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgZW5naW5lID0gbmV3IEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUoCi0gICAgICAgICAgICAgICAgKEdyb292eUN1c3RvbWl6ZXIpICgpIC0+IG5ldyBSZXBlYXRBU1RUcmFuc2Zvcm1hdGlvbkN1c3RvbWl6ZXIobmV3IEFtYmlndW91c01ldGhvZEFTVFRyYW5zZm9ybWF0aW9uKCkpLAotICAgICAgICAgICAgICAgIChHcm9vdnlDdXN0b21pemVyKSAoKSAtPiBuZXcgUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyKG5ldyBWYXJBc0JpbmRpbmdBU1RUcmFuc2Zvcm1hdGlvbigpKSk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhFbWJlZGRlZChFbXB0eUdyYXBoLmluc3RhbmNlKCkpOwotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBiaW5kaW5ncy5wdXQoImciLCBnKTsKLSAgICAgICAgZW5naW5lLmV2YWwoImcuVihiKS5vdXQoKSIsIGJpbmRpbmdzKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPFZlcnRleCwgVmVydGV4PiB0ID0gKFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsIFZlcnRleD4pCi0gICAgICAgICAgICAgICAgZW5naW5lLmV2YWwoImcuVih2MUlkKS5oYXMoXCJwZXJzb25cIixcImFnZVwiLDI5KS5oYXMoJ3BlcnNvbicsJ2FjdGl2ZScseCkuaW4oXCJrbm93c1wiKS4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1lcmdlRShtMSkubWVyZ2VWKG0yKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsbTMpLm1lcmdlVihfXy5pZGVudGl0eSgpKS4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgImNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24odHdvLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24odGhyZWUsIF9fLnZhbHVlcyhcImFnZVwiKSkuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ubGluZVNlcGFyYXRvcigpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJmaWx0ZXIob3V0RSgpLmNvdW50KCkuaXMoeSkpLiIgICsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1hcChsKS4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVyKCkuYnkoJ25hbWUnLG8pIiwgYmluZGluZ3MpOwotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IHQuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgICAgZW5naW5lLmV2YWwoImcuVihiKS5vdXQoKSIsIGJpbmRpbmdzKTsKLQotICAgICAgICBmaW5hbCBQeXRob25UcmFuc2xhdG9yIHRyYW5zbGF0b3IgPSBQeXRob25UcmFuc2xhdG9yLm9mKCJnIik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluQXNQeXRob24gPSB0cmFuc2xhdG9yLnRyYW5zbGF0ZShieXRlY29kZSkuZ2V0U2NyaXB0KCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGJ5dGVjb2RlQmluZGluZ3MgPSBieXRlY29kZS5nZXRCaW5kaW5ncygpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAsIGJ5dGVjb2RlQmluZGluZ3Muc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJ4IiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJ5IiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJ2MUlkIiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJsIiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJvIiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJtMSIpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoYnl0ZWNvZGVCaW5kaW5ncy5jb250YWluc0tleSgibTIiKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGJ5dGVjb2RlQmluZGluZ3MuY29udGFpbnNLZXkoIm0zIiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChieXRlY29kZUJpbmRpbmdzLmNvbnRhaW5zS2V5KCJ0d28iKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGJ5dGVjb2RlQmluZGluZ3MuY29udGFpbnNLZXkoInRocmVlIiksIGlzKHRydWUpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImcuVih2MUlkKS5oYXMoJ3BlcnNvbicsJ2FnZScsMjkpLmhhcygncGVyc29uJywnYWN0aXZlJyx4KS5pbl8oJ2tub3dzJykubWVyZ2VfZShtMSkubWVyZ2VfdihtMikub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSxtMykubWVyZ2VfdihfXy5pZGVudGl0eSgpKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHR3byxfXy5uYW1lKS5vcHRpb24odGhyZWUsX18uYWdlKS5maWx0ZXJfKF9fLm91dF9lKCkuY291bnQoKS5pc18oeSkpLm1hcChsKS5vcmRlcigpLmJ5KCduYW1lJyxvKSIsIGdyZW1saW5Bc1B5dGhvbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVOYU5JbmYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZSBlbmdpbmUgPSBuZXcgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZSgoR3Jvb3Z5Q3VzdG9taXplcikKLSAgICAgICAgICAgICAgICAoKSAtPiBuZXcgUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyKG5ldyBWYXJBc0JpbmRpbmdBU1RUcmFuc2Zvcm1hdGlvbigpKSk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhFbWJlZGRlZChFbXB0eUdyYXBoLmluc3RhbmNlKCkpOwotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBiaW5kaW5ncy5wdXQoImciLCBnKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwuQWRtaW4gdCA9IChUcmF2ZXJzYWwuQWRtaW4pCi0gICAgICAgICAgICAgICAgZW5naW5lLmV2YWwoImcuaW5qZWN0KC1JbmZpbml0eSxOYU4seHgxKS5pcyhQLmVxKEluZmluaXR5KS5vcihQLmVxKE5hTikpLm9yKFAuZXEoK0luZmluaXR5KSkpIiwgYmluZGluZ3MpOwotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IHQuZ2V0Qnl0ZWNvZGUoKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYnl0ZWNvZGVCaW5kaW5ncyA9IGJ5dGVjb2RlLmdldEJpbmRpbmdzKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBieXRlY29kZUJpbmRpbmdzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoYnl0ZWNvZGVCaW5kaW5ncy5jb250YWluc0tleSgieHgxIiksIGlzKHRydWUpKTsKLQotICAgICAgICBmaW5hbCBKYXZhc2NyaXB0VHJhbnNsYXRvciBqc1RyYW5zbGF0b3IgPSBKYXZhc2NyaXB0VHJhbnNsYXRvci5vZigiZyIpOwotICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzSnMgPSBqc1RyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLmluamVjdChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5hTix4eDEpLmlzKFAuZXEoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5vcihQLmVxKE51bWJlci5OYU4pKS5vcihQLmVxKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpKSIsIGdyZW1saW5Bc0pzKTsKLQotICAgICAgICBmaW5hbCBQeXRob25UcmFuc2xhdG9yIHB5VHJhbnNsYXRvciA9IFB5dGhvblRyYW5zbGF0b3Iub2YoImciKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc1B5ID0gcHlUcmFuc2xhdG9yLnRyYW5zbGF0ZShieXRlY29kZSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5pbmplY3QoZmxvYXQoJy1pbmYnKSxmbG9hdCgnbmFuJykseHgxKS5pc18oUC5lcShmbG9hdCgnaW5mJykpLm9yXyhQLmVxKGZsb2F0KCduYW4nKSkpLm9yXyhQLmVxKGZsb2F0KCdpbmYnKSkpKSIsIGdyZW1saW5Bc1B5KTsKLQotICAgICAgICBmaW5hbCBEb3ROZXRUcmFuc2xhdG9yIGRuVHJhbnNsYXRvciA9IERvdE5ldFRyYW5zbGF0b3Iub2YoImciKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0RuID0gZG5UcmFuc2xhdG9yLnRyYW5zbGF0ZShieXRlY29kZSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5JbmplY3QoRG91YmxlLk5lZ2F0aXZlSW5maW5pdHksRG91YmxlLk5hTix4eDEpLklzKFAuRXEoRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpLk9yKFAuRXEoRG91YmxlLk5hTikpLk9yKFAuRXEoRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpKSkiLCBncmVtbGluQXNEbik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVDYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUgZW5naW5lID0gbmV3IEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUoCi0gICAgICAgICAgICAgICAgKEdyb292eUN1c3RvbWl6ZXIpICgpIC0+IG5ldyBSZXBlYXRBU1RUcmFuc2Zvcm1hdGlvbkN1c3RvbWl6ZXIobmV3IEFtYmlndW91c01ldGhvZEFTVFRyYW5zZm9ybWF0aW9uKCkpLAotICAgICAgICAgICAgICAgIChHcm9vdnlDdXN0b21pemVyKSAoKSAtPiBuZXcgUmVwZWF0QVNUVHJhbnNmb3JtYXRpb25DdXN0b21pemVyKG5ldyBWYXJBc0JpbmRpbmdBU1RUcmFuc2Zvcm1hdGlvbigpKQotICAgICAgICApOwotCi0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgYmluZGluZ3MucHV0KCJnIiwgZyk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluIHQgPSAoVHJhdmVyc2FsLkFkbWluKQotICAgICAgICAgICAgICAgIGVuZ2luZS5ldmFsKCJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEsIF9fLnByb2plY3QoXCJkaXJlY3Rpb25cIikuYnkoX18uY29uc3RhbnQoT1VUKSkpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoc2VsZWN0KFwidlwiKSkuYnkoKSIsIGJpbmRpbmdzKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSB0LmdldEJ5dGVjb2RlKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGJ5dGVjb2RlQmluZGluZ3MgPSBieXRlY29kZS5nZXRCaW5kaW5ncygpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgYnl0ZWNvZGVCaW5kaW5ncy5zaXplKCkpOwotICAgICAgICBhc3NlcnRUaGF0KGJ5dGVjb2RlQmluZGluZ3MuY29udGFpbnNLZXkoInh4MSIpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgSmF2YXNjcmlwdFRyYW5zbGF0b3IganNUcmFuc2xhdG9yID0gSmF2YXNjcmlwdFRyYW5zbGF0b3Iub2YoImciKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW5Bc0pzID0ganNUcmFuc2xhdG9yLnRyYW5zbGF0ZShieXRlY29kZSkuZ2V0U2NyaXB0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIix4eDEsX18ucHJvamVjdChcImRpcmVjdGlvblwiKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoXCJ2ZXJ0ZXhcIixcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwgZ3JlbWxpbkFzSnMpOwotCi0gICAgICAgIGZpbmFsIFB5dGhvblRyYW5zbGF0b3IgcHlUcmFuc2xhdG9yID0gUHl0aG9uVHJhbnNsYXRvci5vZigiZyIpOwotICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzUHkgPSBweVRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5hc18oJ3YnKS5jYWxsKCd0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHknLHh4MSxfXy5wcm9qZWN0KCdkaXJlY3Rpb24nKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoJ3ZlcnRleCcsJ2RlZ3JlZScpLmJ5KF9fLnNlbGVjdCgndicpKS5ieSgpIiwgZ3JlbWxpbkFzUHkpOwotCi0gICAgICAgIGZpbmFsIERvdE5ldFRyYW5zbGF0b3IgZG5UcmFuc2xhdG9yID0gRG90TmV0VHJhbnNsYXRvci5vZigiZyIpOwotICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbkFzRG4gPSBkblRyYW5zbGF0b3IudHJhbnNsYXRlKGJ5dGVjb2RlKS5nZXRTY3JpcHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKS5BcyhcInZcIikuQ2FsbDxvYmplY3Q+KFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIsKElEaWN0aW9uYXJ5PG9iamVjdCxvYmplY3Q+KSB4eDEsKElUcmF2ZXJzYWwpIF9fLlByb2plY3Q8b2JqZWN0PihcImRpcmVjdGlvblwiKS5CeShfXy5Db25zdGFudDxvYmplY3Q+KERpcmVjdGlvbi5PdXQpKSkuUHJvamVjdDxvYmplY3Q+KFwidmVydGV4XCIsXCJkZWdyZWVcIikuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJ2XCIpKS5CeSgpIiwgZ3JlbWxpbkFzRG4pOwotCi0gICAgICAgIC8vIHZlcmlmeSBubyBCaW5kaW5ncyBibGVlZG92ZXIKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluIHQyID0gKFRyYXZlcnNhbC5BZG1pbikKLSAgICAgICAgICAgICAgICBlbmdpbmUuZXZhbCgiZy5pbmplY3QoWzpdKSIsIGJpbmRpbmdzKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUyID0gdDIuZ2V0Qnl0ZWNvZGUoKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYnl0ZWNvZGVCaW5kaW5nczIgPSBieXRlY29kZTIuZ2V0QmluZGluZ3MoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGJ5dGVjb2RlQmluZGluZ3MyLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoYnl0ZWNvZGVCaW5kaW5nczIuY29udGFpbnNLZXkoInh4MSIpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVNZXJnZVZBbWJpZ3VvdXNOdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoRW1wdHlHcmFwaC5pbnN0YW5jZSgpKTsKICAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKQEAgLTY0Myw0ICs1MjYsNjAgQEAKICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlcyA9IGVuZ2luZS5ldmFsKCJ2YWx1ZXMiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKENvbHVtbi52YWx1ZXMsIHZhbHVlcyk7CiAgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0U3RyYXRlZ3k8UyBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5PiBleHRlbmRzIEFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k8Uz4geworICAgICAgICBwcml2YXRlIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKworICAgICAgICBwdWJsaWMgVGVzdFN0cmF0ZWd5KGZpbmFsIE1hcCBjb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICB0aGlzKG5ldyBNYXBDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgVGVzdFN0cmF0ZWd5KGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKKyAgICAgICAgfQorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgYXBwbHkoVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCkgeworICAgICAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDb25maWd1cmF0aW9uIGdldENvbmZpZ3VyYXRpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgVGVzdFN0cmF0ZWd5IGNyZWF0ZShDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVGVzdFN0cmF0ZWd5KGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWNvbnN0cnVjdEN1c3RvbVJlZ2lzdGVyZWRTdHJhdGVneSgpIHRocm93cyBTY3JpcHRFeGNlcHRpb24geworICAgICAgICBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lIHNjcmlwdEVuZ2luZSA9IG5ldyBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lKERlZmF1bHRJbXBvcnRDdXN0b21pemVyLmJ1aWxkKCkuYWRkQ2xhc3NJbXBvcnRzKFRlc3RTdHJhdGVneS5jbGFzcykuY3JlYXRlKCkpOworICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aEVtYmVkZGVkKEVtcHR5R3JhcGguaW5zdGFuY2UoKSk7CisgICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiZyIsIGcpOworCisgICAgICAgIEdyYXBoVHJhdmVyc2FsIHRyYXZlcnNhbCA9IChHcmFwaFRyYXZlcnNhbCkgc2NyaXB0RW5naW5lLmV2YWwoImcud2l0aFN0cmF0ZWdpZXMobmV3IFRlc3RTdHJhdGVneShzdHJpbmdLZXk6XCJzdHJpbmdWYWx1ZVwiLGludEtleToxLGJvb2xlYW5LZXk6dHJ1ZSkpLlYoKSIsIGJpbmRpbmdzKTsKKworICAgICAgICBUZXN0U3RyYXRlZ3kgcmVjb25zdHJ1Y3RlZFN0cmF0ZWd5ID0gdHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTdHJhdGVnaWVzKCkuZ2V0U3RyYXRlZ3koVGVzdFN0cmF0ZWd5LmNsYXNzKS5nZXQoKTsKKworICAgICAgICBhc3NlcnROb3ROdWxsKHJlY29uc3RydWN0ZWRTdHJhdGVneSk7CisKKyAgICAgICAgTWFwQ29uZmlndXJhdGlvbiBleHBlY3RlZENvbmZpZyA9IG5ldyBNYXBDb25maWd1cmF0aW9uKG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7CisgICAgICAgICAgICBwdXQoInN0cmluZ0tleSIsICJzdHJpbmdWYWx1ZSIpOworICAgICAgICAgICAgcHV0KCJpbnRLZXkiLCAxKTsKKyAgICAgICAgICAgIHB1dCgiYm9vbGVhbktleSIsIHRydWUpOworICAgICAgICB9fSk7CisKKyAgICAgICAgU2V0PFN0cmluZz4gZXhwZWN0ZWRLZXlzID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICBTZXQ8U3RyaW5nPiBhY3R1YWxLZXlzID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICBleHBlY3RlZENvbmZpZy5nZXRLZXlzKCkuZm9yRWFjaFJlbWFpbmluZygoa2V5KSAtPiBleHBlY3RlZEtleXMuYWRkKGtleSkpOworICAgICAgICByZWNvbnN0cnVjdGVkU3RyYXRlZ3kuZ2V0Q29uZmlndXJhdGlvbigpLmdldEtleXMoKS5mb3JFYWNoUmVtYWluaW5nKChrZXkpIC0+IGFjdHVhbEtleXMuYWRkKGtleSkpOworCisgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEtleXMsIGFjdHVhbEtleXMpOworCisgICAgICAgIGV4cGVjdGVkS2V5cy5mb3JFYWNoKChrZXkpIC0+IHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZENvbmZpZy5nZXQoT2JqZWN0LmNsYXNzLCBrZXkpLCByZWNvbnN0cnVjdGVkU3RyYXRlZ3kuZ2V0Q29uZmlndXJhdGlvbigpLmdldChPYmplY3QuY2xhc3MsIGtleSkpOworICAgICAgICB9KTsKKyAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3Jvb3Z5VHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIuamF2YSBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyb292eVRyYW5zbGF0b3JDb21wdXRlclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZTU2N2IuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3Jvb3Z5VHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGgucHJvY2Vzcy5jb21wdXRlci5UaW5rZXJHcmFwaENvbXB1dGVyOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5HcmFwaENvbXB1dGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJzaG91bGRTdWNjZWVkV2l0aFByb3BlclRyYXZlcnNlclJlcXVpcmVtZW50cyIsCi0gICAgICAgIHJlYXNvbiA9ICJSZWFzb24gcmVxdWlyZXMgaW52ZXN0aWdhdGlvbiIpCi1AR3JhcGhQcm92aWRlci5EZXNjcmlwdG9yKGNvbXB1dGVyID0gVGlua2VyR3JhcGhDb21wdXRlci5jbGFzcykKLXB1YmxpYyBjbGFzcyBHcm9vdnlUcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlciBleHRlbmRzIEdyb292eVRyYW5zbGF0b3JQcm92aWRlciB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgdHJhdmVyc2FsKGZpbmFsIEdyYXBoIGdyYXBoKSB7Ci0gICAgICAgIHJldHVybiBzdXBlci50cmF2ZXJzYWwoZ3JhcGgpLndpdGhDb21wdXRlcigpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9Hcm9vdnlUcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3Jvb3Z5VHJhbnNsYXRvclByb2Nlc3NDb21wdXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JmZjM3NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9Hcm9vdnlUcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0NvbXB1dGVyU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChQcm9jZXNzQ29tcHV0ZXJTdWl0ZS5jbGFzcykKLUBHcmFwaFByb3ZpZGVyQ2xhc3MocHJvdmlkZXIgPSBHcm9vdnlUcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlci5jbGFzcywgZ3JhcGggPSBUaW5rZXJHcmFwaC5jbGFzcykKLXB1YmxpYyBjbGFzcyBHcm9vdnlUcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdCB7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3Jvb3Z5VHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YSBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyb292eVRyYW5zbGF0b3JQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2FlN2UuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3Jvb3Z5VHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NTdGFuZGFyZFN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoUHJvY2Vzc1N0YW5kYXJkU3VpdGUuY2xhc3MpCi1AR3JhcGhQcm92aWRlckNsYXNzKHByb3ZpZGVyID0gR3Jvb3Z5VHJhbnNsYXRvclByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IFRpbmtlckdyYXBoLmNsYXNzKQotcHVibGljIGNsYXNzIEdyb292eVRyYW5zbGF0b3JQcm9jZXNzU3RhbmRhcmRUZXN0IHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9Hcm9vdnlUcmFuc2xhdG9yUHJvdmlkZXIuamF2YSBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyb292eVRyYW5zbGF0b3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTVkNmU2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyb292eVRyYW5zbGF0b3JQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlRyYW5zbGF0aW9uU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRpbmtlckdyYXBoUHJvdmlkZXI7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIGZvciBwcm9maWxlKCkgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuTGFtYmRhU3RlcFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRGVkdXBUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9uYW1lX29yZGVyX2J5WGExX2IxWF9ieVhiMl9hMlgiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk9yZGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1Zfb3JkZXJfYnlYbmFtZV9hMV9iMVhfYnlYbmFtZV9iMl9hMlhfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNhY2tYbWFwX19tYXBfY2xvbmVYX1Zfb3V0X291dF9zYWNrWG1hcF9hX25hbWVYX3NhY2siLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdWJncmFwaFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX3dpdGhTaWRlRWZmZWN0WHNnWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl93aXRoU2lkZUVmZmVjdFhzZ1hfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3N1YmdyYXBoWHNnWF9vdXRWWF90aW1lc1g1WF9uYW1lX2RlZHVwIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNpZGVFZmZlY3RYc2dYX1ZfaGFzWG5hbWVfZGFuaWVsWG91dF9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9ncmFtVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEludGVycnVwdGlvbkNvbXB1dGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlN0cmF0ZWd5IG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQgYnkgQnl0ZWNvZGUgYmFzZWQgdHJhdmVyc2FscyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5FbGVtZW50SWRTdHJhdGVneVByb2Nlc3NUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiU3RyYXRlZ3kgbm90IHByb3Blcmx5IHN1cHBvcnRlZCBieSBCeXRlY29kZSBiYXNlZCB0cmF2ZXJzYWxzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db3JlVHJhdmVyc2FsVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJzaG91bGROZXZlclByb3BhZ2F0ZUFOb0J1bGtUcmF2ZXJzZXIiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlYWRUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAicmVhZCBhbmQgd3JpdGUgdGVzdHMgZG9uJ3QgdHJhbnNsYXRlIGxvY2FsbHkgd2VsbCBiZWNhdXNlIG9mIGNhbGxpbmcgaXRlcmF0ZSgpIGluc2lkZSByZWFkKCkvd3JpdGUoKSBhZGQgYSBub25lKCkiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gInJlYWQgYW5kIHdyaXRlIHRlc3RzIGRvbid0IHRyYW5zbGF0ZSBsb2NhbGx5IHdlbGwgYmVjYXVzZSBvZiBjYWxsaW5nIGl0ZXJhdGUoKSBpbnNpZGUgcmVhZCgpL3dyaXRlKCkgYWRkIGEgbm9uZSgpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLk9yZGVyYWJpbGl0eVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3Rfb3JkZXJfd2l0aF91bmtub3duX3R5cGUiLAotICAgICAgICByZWFzb24gPSAiR3Jvb3Z5VHJhbnNsYXRvciBvbmx5IHN1cHBvcnRzIGtub3duIEdyZW1saW4gdHlwZXMiKQotcHVibGljIGNsYXNzIEdyb292eVRyYW5zbGF0b3JQcm92aWRlciBleHRlbmRzIFRpbmtlckdyYXBoUHJvdmlkZXIgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgVHJhbnNsYXRpb25TdHJhdGVneShnLCBHcm9vdnlUcmFuc2xhdG9yLm9mKCJnIiksIHRydWUpKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JDb21wdXRlclByb3ZpZGVyLmphdmEgYi9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9QYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkYTUwNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9QYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGgucHJvY2Vzcy5jb21wdXRlci5UaW5rZXJHcmFwaENvbXB1dGVyOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5HcmFwaENvbXB1dGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJzaG91bGRTdWNjZWVkV2l0aFByb3BlclRyYXZlcnNlclJlcXVpcmVtZW50cyIsCi0gICAgICAgIHJlYXNvbiA9ICJSZWFzb24gcmVxdWlyZXMgaW52ZXN0aWdhdGlvbiIpCi1AR3JhcGhQcm92aWRlci5EZXNjcmlwdG9yKGNvbXB1dGVyID0gVGlua2VyR3JhcGhDb21wdXRlci5jbGFzcykKLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIgZXh0ZW5kcyBQYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvclByb3ZpZGVyIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnRyYXZlcnNhbChncmFwaCkud2l0aENvbXB1dGVyKCk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL1BhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JQcm9jZXNzQ29tcHV0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNDQwNTIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JQcm9jZXNzQ29tcHV0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMzsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzQ29tcHV0ZXJTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKFByb2Nlc3NDb21wdXRlclN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IFBhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlci5jbGFzcywgZ3JhcGggPSBUaW5rZXJHcmFwaC5jbGFzcykKLXB1YmxpYyBjbGFzcyBQYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvclByb2Nlc3NDb21wdXRlclRlc3QgewotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL1BhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhIGIvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NGEwODcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMzsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzU3RhbmRhcmRTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKFByb2Nlc3NTdGFuZGFyZFN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IFBhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCi1wdWJsaWMgY2xhc3MgUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JQcm9jZXNzU3RhbmRhcmRUZXN0IHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9QYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvclByb3ZpZGVyLmphdmEgYi9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9QYXJhbWV0ZXJpemVkR3Jvb3Z5VHJhbnNsYXRvclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjYWZlMDYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1ncm9vdnkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvUGFyYW1ldGVyaXplZEdyb292eVRyYW5zbGF0b3JQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmFuc2xhdG9yLkdyb292eVRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlRyYW5zbGF0aW9uU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRpbmtlckdyYXBoUHJvdmlkZXI7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIGZvciBwcm9maWxlKCkgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuTGFtYmRhU3RlcFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRGVkdXBUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9uYW1lX29yZGVyX2J5WGExX2IxWF9ieVhiMl9hMlgiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk9yZGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1Zfb3JkZXJfYnlYbmFtZV9hMV9iMVhfYnlYbmFtZV9iMl9hMlhfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNhY2tYbWFwX19tYXBfY2xvbmVYX1Zfb3V0X291dF9zYWNrWG1hcF9hX25hbWVYX3NhY2siLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdWJncmFwaFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX3dpdGhTaWRlRWZmZWN0WHNnWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl93aXRoU2lkZUVmZmVjdFhzZ1hfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3N1YmdyYXBoWHNnWF9vdXRWWF90aW1lc1g1WF9uYW1lX2RlZHVwIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNpZGVFZmZlY3RYc2dYX1ZfaGFzWG5hbWVfZGFuaWVsWG91dF9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9ncmFtVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEludGVycnVwdGlvbkNvbXB1dGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlN0cmF0ZWd5IG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQgYnkgQnl0ZWNvZGUgYmFzZWQgdHJhdmVyc2FscyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5FbGVtZW50SWRTdHJhdGVneVByb2Nlc3NUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiU3RyYXRlZ3kgbm90IHByb3Blcmx5IHN1cHBvcnRlZCBieSBCeXRlY29kZSBiYXNlZCB0cmF2ZXJzYWxzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db3JlVHJhdmVyc2FsVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJzaG91bGROZXZlclByb3BhZ2F0ZUFOb0J1bGtUcmF2ZXJzZXIiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlYWRUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAicmVhZCBhbmQgd3JpdGUgdGVzdHMgZG9uJ3QgdHJhbnNsYXRlIGxvY2FsbHkgd2VsbCBiZWNhdXNlIG9mIGNhbGxpbmcgaXRlcmF0ZSgpIGluc2lkZSByZWFkKCkvd3JpdGUoKSBhZGQgYSBub25lKCkiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gInJlYWQgYW5kIHdyaXRlIHRlc3RzIGRvbid0IHRyYW5zbGF0ZSBsb2NhbGx5IHdlbGwgYmVjYXVzZSBvZiBjYWxsaW5nIGl0ZXJhdGUoKSBpbnNpZGUgcmVhZCgpL3dyaXRlKCkgYWRkIGEgbm9uZSgpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLk9yZGVyYWJpbGl0eVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3Rfb3JkZXJfd2l0aF91bmtub3duX3R5cGUiLAotICAgICAgICByZWFzb24gPSAiR3Jvb3Z5VHJhbnNsYXRvciBvbmx5IHN1cHBvcnRzIGtub3duIEdyZW1saW4gdHlwZXMiKQotcHVibGljIGNsYXNzIFBhcmFtZXRlcml6ZWRHcm9vdnlUcmFuc2xhdG9yUHJvdmlkZXIgZXh0ZW5kcyBUaW5rZXJHcmFwaFByb3ZpZGVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgdHJhdmVyc2FsKGZpbmFsIEdyYXBoIGdyYXBoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaC50cmF2ZXJzYWwoKTsKLSAgICAgICAgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFRyYW5zbGF0aW9uU3RyYXRlZ3koZywgR3Jvb3Z5VHJhbnNsYXRvci5vZigiZyIsIHRydWUpLCB0cnVlKSk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL1RpbmtlckdyYXBoUHJvdmlkZXIuamF2YSBiL2dyZW1saW4tZ3Jvb3Z5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL1RpbmtlckdyYXBoUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiMGQ1ZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWdyb292eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9UaW5rZXJHcmFwaFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5BYnN0cmFjdEdyYXBoUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uSW9FZGdlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5Jb1ZlcnRleFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEdyYXBoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnN0YXIuU3RhckdyYXBoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJFZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGhWYXJpYWJsZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlclZlcnRleFByb3BlcnR5OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBUaW5rZXJHcmFwaFByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RHcmFwaFByb3ZpZGVyIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxDbGFzcz4gSU1QTEVNRU5UQVRJT04gPSBuZXcgSGFzaFNldDxDbGFzcz4oKSB7ewotICAgICAgICBhZGQoVGlua2VyRWRnZS5jbGFzcyk7Ci0gICAgICAgIGFkZChUaW5rZXJFbGVtZW50LmNsYXNzKTsKLSAgICAgICAgYWRkKFRpbmtlckdyYXBoLmNsYXNzKTsKLSAgICAgICAgYWRkKFRpbmtlckdyYXBoVmFyaWFibGVzLmNsYXNzKTsKLSAgICAgICAgYWRkKFRpbmtlclByb3BlcnR5LmNsYXNzKTsKLSAgICAgICAgYWRkKFRpbmtlclZlcnRleC5jbGFzcyk7Ci0gICAgICAgIGFkZChUaW5rZXJWZXJ0ZXhQcm9wZXJ0eS5jbGFzcyk7Ci0gICAgfX07Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRCYXNlQ29uZmlndXJhdGlvbihmaW5hbCBTdHJpbmcgZ3JhcGhOYW1lLCBmaW5hbCBDbGFzczw/PiB0ZXN0LCBmaW5hbCBTdHJpbmcgdGVzdE1ldGhvZE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEgbG9hZEdyYXBoV2l0aCkgewotICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaC5EZWZhdWx0SWRNYW5hZ2VyIGlkTWFuYWdlciA9IHNlbGVjdElkTWFrZXJGcm9tR3JhcGhEYXRhKGxvYWRHcmFwaFdpdGgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgaWRNYWtlciA9IChpZE1hbmFnZXIuZXF1YWxzKFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIuQU5ZKSA/IHNlbGVjdElkTWFrZXJGcm9tVGVzdCh0ZXN0LCB0ZXN0TWV0aG9kTmFtZSkgOiBpZE1hbmFnZXIpLm5hbWUoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoR3JhcGguR1JBUEgsIFRpbmtlckdyYXBoLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBwdXQoVGlua2VyR3JhcGguR1JFTUxJTl9USU5LRVJHUkFQSF9WRVJURVhfSURfTUFOQUdFUiwgaWRNYWtlcik7Ci0gICAgICAgICAgICBwdXQoVGlua2VyR3JhcGguR1JFTUxJTl9USU5LRVJHUkFQSF9FREdFX0lEX01BTkFHRVIsIGlkTWFrZXIpOwotICAgICAgICAgICAgcHV0KFRpbmtlckdyYXBoLkdSRU1MSU5fVElOS0VSR1JBUEhfVkVSVEVYX1BST1BFUlRZX0lEX01BTkFHRVIsIGlkTWFrZXIpOwotICAgICAgICAgICAgaWYgKHJlcXVpcmVzTGlzdENhcmRpbmFsaXR5QXNEZWZhdWx0KGxvYWRHcmFwaFdpdGgsIHRlc3QsIHRlc3RNZXRob2ROYW1lKSkKLSAgICAgICAgICAgICAgICBwdXQoVGlua2VyR3JhcGguR1JFTUxJTl9USU5LRVJHUkFQSF9ERUZBVUxUX1ZFUlRFWF9QUk9QRVJUWV9DQVJESU5BTElUWSwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkubGlzdC5uYW1lKCkpOwotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUGVyc2lzdGVuY2UodGVzdCwgdGVzdE1ldGhvZE5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcHV0KFRpbmtlckdyYXBoLkdSRU1MSU5fVElOS0VSR1JBUEhfR1JBUEhfRk9STUFULCAiZ3J5byIpOwotICAgICAgICAgICAgICAgIHB1dChUaW5rZXJHcmFwaC5HUkVNTElOX1RJTktFUkdSQVBIX0dSQVBIX0xPQ0FUSU9OLCBUZXN0SGVscGVyLm1ha2VUZXN0RGF0YUZpbGUodGVzdCwgInRlbXAiLCB0ZXN0TWV0aG9kTmFtZSArICIua3J5byIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfX07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xlYXIoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChncmFwaCAhPSBudWxsKQotICAgICAgICAgICAgZ3JhcGguY2xvc2UoKTsKLQotICAgICAgICAvLyBpbiB0aGUgZXZlbiB0aGUgZ3JhcGggaXMgcGVyc2lzdGVkIHdlIG5lZWQgdG8gY2xlYW4gdXAKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyYXBoTG9jYXRpb24gPSBudWxsICE9IGNvbmZpZ3VyYXRpb24gPyBjb25maWd1cmF0aW9uLmdldFN0cmluZyhUaW5rZXJHcmFwaC5HUkVNTElOX1RJTktFUkdSQVBIX0dSQVBIX0xPQ0FUSU9OLCBudWxsKSA6IG51bGw7Ci0gICAgICAgIGlmIChncmFwaExvY2F0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbmFsIEZpbGUgZiA9IG5ldyBGaWxlKGdyYXBoTG9jYXRpb24pOwotICAgICAgICAgICAgZi5kZWxldGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXQ8Q2xhc3M+IGdldEltcGxlbWVudGF0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIElNUExFTUVOVEFUSU9OOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgaWYgYSB0ZXN0IHJlcXVpcmVzIFRpbmtlckdyYXBoIHBlcnNpc3RlbmNlIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCBncmFwaCBsb2NhdGlvbiBhbmQgZm9ybWF0LgotICAgICAqLwotICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiByZXF1aXJlc1BlcnNpc3RlbmNlKGZpbmFsIENsYXNzPD8+IHRlc3QsIGZpbmFsIFN0cmluZyB0ZXN0TWV0aG9kTmFtZSkgewotICAgICAgICByZXR1cm4gdGVzdCA9PSBHcmFwaFRlc3QuY2xhc3MgJiYgdGVzdE1ldGhvZE5hbWUuZXF1YWxzKCJzaG91bGRQZXJzaXN0RGF0YU9uQ2xvc2UiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIGlmIGEgdGVzdCByZXF1aXJlcyBhIGRpZmZlcmVudCBjYXJkaW5hbGl0eSBhcyB0aGUgZGVmYXVsdCBvciBub3QuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIHJlcXVpcmVzTGlzdENhcmRpbmFsaXR5QXNEZWZhdWx0KGZpbmFsIExvYWRHcmFwaFdpdGguR3JhcGhEYXRhIGxvYWRHcmFwaFdpdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PiB0ZXN0LCBmaW5hbCBTdHJpbmcgdGVzdE1ldGhvZE5hbWUpIHsKLSAgICAgICAgcmV0dXJuIGxvYWRHcmFwaFdpdGggPT0gTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuQ1JFVwotICAgICAgICAgICAgICAgIHx8ICh0ZXN0ID09IFN0YXJHcmFwaFRlc3QuY2xhc3MgJiYgdGVzdE1ldGhvZE5hbWUuZXF1YWxzKCJzaG91bGRBdHRhY2hXaXRoQ3JlYXRlTWV0aG9kIikpCi0gICAgICAgICAgICAgICAgfHwgKHRlc3QgPT0gRGV0YWNoZWRHcmFwaFRlc3QuY2xhc3MgJiYgdGVzdE1ldGhvZE5hbWUuZXF1YWxzKCJ0ZXN0QXR0YWNoYWJsZUNyZWF0ZU1ldGhvZCIpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTb21lIHRlc3RzIHJlcXVpcmUgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBUaW5rZXJHcmFwaCB0byBwcm9wZXJseSBjb25maWd1cmUgdGhlIGlkIG1hbmFnZXIuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIgc2VsZWN0SWRNYWtlckZyb21UZXN0KGZpbmFsIENsYXNzPD8+IHRlc3QsIGZpbmFsIFN0cmluZyB0ZXN0TWV0aG9kTmFtZSkgewotICAgICAgICBpZiAodGVzdC5lcXVhbHMoR3JhcGhUZXN0LmNsYXNzKSkgewotICAgICAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gdGVzdHNUaGF0TmVlZExvbmdJZE1hbmFnZXIgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCl7ewotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkSXRlcmF0ZVZlcnRpY2VzV2l0aE51bWVyaWNJZFN1cHBvcnRVc2luZ0RvdWJsZVJlcHJlc2VudGF0aW9uIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlVmVydGljZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nRG91YmxlUmVwcmVzZW50YXRpb25zIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlVmVydGljZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nSW50ZWdlclJlcHJlc2VudGF0aW9uIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlVmVydGljZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nSW50ZWdlclJlcHJlc2VudGF0aW9ucyIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkSXRlcmF0ZVZlcnRpY2VzV2l0aE51bWVyaWNJZFN1cHBvcnRVc2luZ0Zsb2F0UmVwcmVzZW50YXRpb24iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVWZXJ0aWNlc1dpdGhOdW1lcmljSWRTdXBwb3J0VXNpbmdGbG9hdFJlcHJlc2VudGF0aW9ucyIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkSXRlcmF0ZVZlcnRpY2VzV2l0aE51bWVyaWNJZFN1cHBvcnRVc2luZ1N0cmluZ1JlcHJlc2VudGF0aW9uIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlVmVydGljZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nU3RyaW5nUmVwcmVzZW50YXRpb25zIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlRWRnZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nRG91YmxlUmVwcmVzZW50YXRpb24iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVFZGdlc1dpdGhOdW1lcmljSWRTdXBwb3J0VXNpbmdEb3VibGVSZXByZXNlbnRhdGlvbnMiKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVFZGdlc1dpdGhOdW1lcmljSWRTdXBwb3J0VXNpbmdJbnRlZ2VyUmVwcmVzZW50YXRpb24iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVFZGdlc1dpdGhOdW1lcmljSWRTdXBwb3J0VXNpbmdJbnRlZ2VyUmVwcmVzZW50YXRpb25zIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlRWRnZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nRmxvYXRSZXByZXNlbnRhdGlvbiIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkSXRlcmF0ZUVkZ2VzV2l0aE51bWVyaWNJZFN1cHBvcnRVc2luZ0Zsb2F0UmVwcmVzZW50YXRpb25zIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlRWRnZXNXaXRoTnVtZXJpY0lkU3VwcG9ydFVzaW5nU3RyaW5nUmVwcmVzZW50YXRpb24iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVFZGdlc1dpdGhOdW1lcmljSWRTdXBwb3J0VXNpbmdTdHJpbmdSZXByZXNlbnRhdGlvbnMiKTsKLSAgICAgICAgICAgIH19OwotCi0gICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiB0ZXN0c1RoYXROZWVkVXVpZElkTWFuYWdlciA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKXt7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRJdGVyYXRlVmVydGljZXNXaXRoVXVpZElkU3VwcG9ydFVzaW5nU3RyaW5nUmVwcmVzZW50YXRpb24iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVWZXJ0aWNlc1dpdGhVdWlkSWRTdXBwb3J0VXNpbmdTdHJpbmdSZXByZXNlbnRhdGlvbnMiKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZEl0ZXJhdGVFZGdlc1dpdGhVdWlkSWRTdXBwb3J0VXNpbmdTdHJpbmdSZXByZXNlbnRhdGlvbiIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkSXRlcmF0ZUVkZ2VzV2l0aFV1aWRJZFN1cHBvcnRVc2luZ1N0cmluZ1JlcHJlc2VudGF0aW9ucyIpOwotICAgICAgICAgICAgfX07Ci0KLSAgICAgICAgICAgIGlmICh0ZXN0c1RoYXROZWVkTG9uZ0lkTWFuYWdlci5jb250YWlucyh0ZXN0TWV0aG9kTmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIuTE9ORzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRlc3RzVGhhdE5lZWRVdWlkSWRNYW5hZ2VyLmNvbnRhaW5zKHRlc3RNZXRob2ROYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gVGlua2VyR3JhcGguRGVmYXVsdElkTWFuYWdlci5VVUlEOwotICAgICAgICB9ICBlbHNlIGlmICh0ZXN0LmVxdWFscyhJb0VkZ2VUZXN0LmNsYXNzKSkgewotICAgICAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gdGVzdHNUaGF0TmVlZExvbmdJZE1hbmFnZXIgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCl7ewotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlRWRnZVtncmFwaHNvbi12MV0iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZFJlYWRXcml0ZURldGFjaGVkRWRnZUFzUmVmZXJlbmNlW2dyYXBoc29uLXYxXSIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlRGV0YWNoZWRFZGdlW2dyYXBoc29uLXYxXSIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlRWRnZVtncmFwaHNvbi12Ml0iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZFJlYWRXcml0ZURldGFjaGVkRWRnZUFzUmVmZXJlbmNlW2dyYXBoc29uLXYyXSIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlRGV0YWNoZWRFZGdlW2dyYXBoc29uLXYyXSIpOwotICAgICAgICAgICAgfX07Ci0KLSAgICAgICAgICAgIGlmICh0ZXN0c1RoYXROZWVkTG9uZ0lkTWFuYWdlci5jb250YWlucyh0ZXN0TWV0aG9kTmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIuTE9ORzsKLSAgICAgICAgfSBlbHNlIGlmICh0ZXN0LmVxdWFscyhJb1ZlcnRleFRlc3QuY2xhc3MpKSB7Ci0gICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiB0ZXN0c1RoYXROZWVkTG9uZ0lkTWFuYWdlciA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKXt7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVWZXJ0ZXhXaXRoQk9USEVkZ2VzW2dyYXBoc29uLXYxXSIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlVmVydGV4V2l0aElORWRnZXNbZ3JhcGhzb24tdjFdIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVWZXJ0ZXhXaXRoT1VURWRnZXNbZ3JhcGhzb24tdjFdIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVWZXJ0ZXhOb0VkZ2VzW2dyYXBoc29uLXYxXSIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlRGV0YWNoZWRWZXJ0ZXhOb0VkZ2VzW2dyYXBoc29uLXYxXSIpOwotICAgICAgICAgICAgICAgIGFkZCgic2hvdWxkUmVhZFdyaXRlRGV0YWNoZWRWZXJ0ZXhBc1JlZmVyZW5jZU5vRWRnZXNbZ3JhcGhzb24tdjFdIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVWZXJ0ZXhNdWx0aVByb3BzTm9FZGdlc1tncmFwaHNvbi12MV0iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZFJlYWRXcml0ZVZlcnRleFdpdGhCT1RIRWRnZXNbZ3JhcGhzb24tdjJdIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVWZXJ0ZXhXaXRoSU5FZGdlc1tncmFwaHNvbi12Ml0iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZFJlYWRXcml0ZVZlcnRleFdpdGhPVVRFZGdlc1tncmFwaHNvbi12Ml0iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZFJlYWRXcml0ZVZlcnRleE5vRWRnZXNbZ3JhcGhzb24tdjJdIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVEZXRhY2hlZFZlcnRleE5vRWRnZXNbZ3JhcGhzb24tdjJdIik7Ci0gICAgICAgICAgICAgICAgYWRkKCJzaG91bGRSZWFkV3JpdGVEZXRhY2hlZFZlcnRleEFzUmVmZXJlbmNlTm9FZGdlc1tncmFwaHNvbi12Ml0iKTsKLSAgICAgICAgICAgICAgICBhZGQoInNob3VsZFJlYWRXcml0ZVZlcnRleE11bHRpUHJvcHNOb0VkZ2VzW2dyYXBoc29uLXYyXSIpOwotICAgICAgICAgICAgfX07Ci0KLSAgICAgICAgICAgIGlmICh0ZXN0c1RoYXROZWVkTG9uZ0lkTWFuYWdlci5jb250YWlucyh0ZXN0TWV0aG9kTmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIuTE9ORzsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBUaW5rZXJHcmFwaC5EZWZhdWx0SWRNYW5hZ2VyLkFOWTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUZXN0IHRoYXQgbG9hZCB3aXRoIHNwZWNpZmljIGdyYXBoIGRhdGEgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBhIHNwZWNpZmljIGlkIG1hbmFnZXIgYXMgdGhlIGRhdGEgdHlwZSB0bwotICAgICAqIGJlIHVzZWQgaW4gdGhlIHRlc3QgZm9yIHRoYXQgZ3JhcGggaXMga25vd24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIgc2VsZWN0SWRNYWtlckZyb21HcmFwaERhdGEoZmluYWwgTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEgbG9hZEdyYXBoV2l0aCkgewotICAgICAgICBpZiAobnVsbCA9PSBsb2FkR3JhcGhXaXRoKSByZXR1cm4gVGlua2VyR3JhcGguRGVmYXVsdElkTWFuYWdlci5BTlk7Ci0gICAgICAgIGlmIChsb2FkR3JhcGhXaXRoLmVxdWFscyhMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5DTEFTU0lDKSkKLSAgICAgICAgICAgIHJldHVybiBUaW5rZXJHcmFwaC5EZWZhdWx0SWRNYW5hZ2VyLklOVEVHRVI7Ci0gICAgICAgIGVsc2UgaWYgKGxvYWRHcmFwaFdpdGguZXF1YWxzKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikpCi0gICAgICAgICAgICByZXR1cm4gVGlua2VyR3JhcGguRGVmYXVsdElkTWFuYWdlci5JTlRFR0VSOwotICAgICAgICBlbHNlIGlmIChsb2FkR3JhcGhXaXRoLmVxdWFscyhMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5DUkVXKSkKLSAgICAgICAgICAgIHJldHVybiBUaW5rZXJHcmFwaC5EZWZhdWx0SWRNYW5hZ2VyLklOVEVHRVI7Ci0gICAgICAgIGVsc2UgaWYgKGxvYWRHcmFwaFdpdGguZXF1YWxzKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkdSQVRFRlVMKSkKLSAgICAgICAgICAgIHJldHVybiBUaW5rZXJHcmFwaC5EZWZhdWx0SWRNYW5hZ2VyLklOVEVHRVI7Ci0gICAgICAgIGVsc2UgaWYgKGxvYWRHcmFwaFdpdGguZXF1YWxzKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLlNJTkspKQotICAgICAgICAgICAgcmV0dXJuIFRpbmtlckdyYXBoLkRlZmF1bHRJZE1hbmFnZXIuSU5URUdFUjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJOZWVkIHRvIGRlZmluZSBhIG5ldyAlcyBmb3IgJXMiLCBUaW5rZXJHcmFwaC5JZE1hbmFnZXIuY2xhc3MuZ2V0TmFtZSgpLCBsb2FkR3JhcGhXaXRoLm5hbWUoKSkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9idWlsZC9nZW5lcmF0ZS5ncm9vdnkgYi9ncmVtbGluLWphdmFzY3JpcHQvYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDQ0YTU3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9idWlsZC9nZW5lcmF0ZS5ncm9vdnkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UudHJhbnNsYXRvci5HcmVtbGluVHJhbnNsYXRvcgotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UudHJhbnNsYXRvci5UcmFuc2xhdG9yCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS5jb3JwdXMuRmVhdHVyZVJlYWRlcgotCi1pbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRocwotCi0vLyBmaWxlIGlzIG92ZXJ3cml0dGVuIG9uIGVhY2ggZ2VuZXJhdGlvbgotcmFkaXNoR3JlbWxpbkZpbGUgPSBuZXcgRmlsZSgiJHtwcm9qZWN0QmFzZURpcn0vZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZ3JlbWxpbi5qcyIpCi0KLS8vIGFzc3VtZXMgZ2xvYmFsbHkgdW5pcXVlIHNjZW5hcmlvIG5hbWVzIGZvciBrZXlzIHdpdGggbGlzdCBvZiBHcmVtbGluIHRyYXZlcnNhbHMgYXMgdGhleSBhcHBlYXIKLWdyZW1saW5zID0gRmVhdHVyZVJlYWRlci5wYXJzZUdyb3VwZWQoUGF0aHMuZ2V0KCIke3Byb2plY3RCYXNlRGlyfSIsICJncmVtbGluLXRlc3QiLCAic3JjIiwgIm1haW4iLCAicmVzb3VyY2VzIiwgIm9yZyIsICJhcGFjaGUiLCAidGlua2VycG9wIiwgImdyZW1saW4iLCAidGVzdCIsICJmZWF0dXJlcyIpLnRvU3RyaW5nKCkpCi0KLXJhZGlzaEdyZW1saW5GaWxlLndpdGhXcml0ZXIoJ1VURi04JykgeyBXcml0ZXIgd3JpdGVyIC0+Ci0gICAgd3JpdGVyLndyaXRlTGluZSgnLypcbicgKwotICAgICAgICAgICAgJyogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZVxuJyArCi0gICAgICAgICAgICAnKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGVcbicgKwotICAgICAgICAgICAgJyogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbicgKwotICAgICAgICAgICAgJyogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZVxuJyArCi0gICAgICAgICAgICAnKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlXG4nICsKLSAgICAgICAgICAgICcqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbicgKwotICAgICAgICAgICAgJyogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuJyArCi0gICAgICAgICAgICAnKiBcbicgKwotICAgICAgICAgICAgJyogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4nICsKLSAgICAgICAgICAgICcqIFxuJyArCi0gICAgICAgICAgICAnKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4nICsKLSAgICAgICAgICAgICcqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4nICsKLSAgICAgICAgICAgICcqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxuJyArCi0gICAgICAgICAgICAnKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbicgKwotICAgICAgICAgICAgJyogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9uc1xuJyArCi0gICAgICAgICAgICAnKiB1bmRlciB0aGUgTGljZW5zZS5cbicgKwotICAgICAgICAgICAgJyovXG4nKQotCi0gICAgd3JpdGVyLndyaXRlTGluZSgiXG5cbi8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiKQotICAgIHdyaXRlci53cml0ZUxpbmUoIi8vKiBEbyBOT1QgZWRpdCB0aGlzIGZpbGUgZGlyZWN0bHkgLSBnZW5lcmF0ZWQgYnkgYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5IikKLSAgICB3cml0ZXIud3JpdGVMaW5lKCIvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiIpCi0KLSAgICB3cml0ZXIud3JpdGVMaW5lKAotICAgICAgICAgICAgICAgICAgICAnY29uc3QgdXVpZCA9IHJlcXVpcmUoXCd1dWlkXCcpO1xuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBncmFwaFRyYXZlcnNhbE1vZHVsZSA9IHJlcXVpcmUoXCcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWxcJyk7XG4nICsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IHRyYXZlcnNhbE1vZHVsZSA9IHJlcXVpcmUoXCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWxcJyk7XG4nICsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcywgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LCBPcHRpb25zU3RyYXRlZ3ksIFBhcnRpdGlvblN0cmF0ZWd5LCBcbicgKwotICAgICAgICAgICAgICAgICAgICAnICAgICAgICBSZWFkT25seVN0cmF0ZWd5LCBHcmFwaEZpbHRlclN0cmF0ZWd5LCBTZWVkU3RyYXRlZ3ksIFN1YmdyYXBoU3RyYXRlZ3ksIFByb2R1Y3RpdmVCeVN0cmF0ZWd5LCBcbicgKwotICAgICAgICAgICAgICAgICAgICAnICAgICAgICBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5LCBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5LCBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSwgXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSwgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSwgUHJvZmlsZVN0cmF0ZWd5LCBJbmxpbmVGaWx0ZXJTdHJhdGVneSwgXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSwgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LCBFbGVtZW50SWRTdHJhdGVneSwgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSwgXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3ksIENvdW50U3RyYXRlZ3ksIENvbm5lY3RpdmVTdHJhdGVneSwgQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSwgXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3ksIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LCBSZXBlYXRVbnJvbGxTdHJhdGVneSwgXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgUGF0aFJldHJhY3Rpb25TdHJhdGVneSwgUGF0aFByb2Nlc3NvclN0cmF0ZWd5LCBPcmRlckxpbWl0U3RyYXRlZ3ksIE1hdGNoUHJlZGljYXRlU3RyYXRlZ3ksIFxuJyArCi0gICAgICAgICAgICAgICAgICAgICcgICAgICAgIExhenlCYXJyaWVyU3RyYXRlZ3ksIEVhcmx5TGltaXRTdHJhdGVneSwgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3ksIElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5LCBcbicgKwotICAgICAgICAgICAgICAgICAgICAnICAgICAgICBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5IH0gPSByZXF1aXJlKFwnLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5XCcpO1xuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBfXyA9IGdyYXBoVHJhdmVyc2FsTW9kdWxlLnN0YXRpY3M7XG4nICsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IEJhcnJpZXIgPSB0cmF2ZXJzYWxNb2R1bGUuYmFycmllclxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBDYXJkaW5hbGl0eSA9IHRyYXZlcnNhbE1vZHVsZS5jYXJkaW5hbGl0eVxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBDYXJkaW5hbGl0eVZhbHVlID0gZ3JhcGhUcmF2ZXJzYWxNb2R1bGUuQ2FyZGluYWxpdHlWYWx1ZTtcbicgKwotICAgICAgICAgICAgICAgICAgICAnY29uc3QgQ29sdW1uID0gdHJhdmVyc2FsTW9kdWxlLmNvbHVtblxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBEaXJlY3Rpb24gPSB7XG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICBCT1RIOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLmJvdGgsXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICBJTjogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5pbixcbicgKwotICAgICAgICAgICAgICAgICAgICAnICAgIE9VVDogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5vdXQsXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICBmcm9tXzogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5vdXQsXG4nICsKLSAgICAgICAgICAgICAgICAgICAgJyAgICB0bzogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5pblxuJyArCi0gICAgICAgICAgICAgICAgICAgICd9O1xuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBJTyA9IHRyYXZlcnNhbE1vZHVsZS5JTztcbicgKwotICAgICAgICAgICAgICAgICAgICAnY29uc3QgRFQgPSB0cmF2ZXJzYWxNb2R1bGUuZHQ7XG4nICsKLSAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IEdUeXBlID0gdHJhdmVyc2FsTW9kdWxlLmdUeXBlO1xuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBNZXJnZSA9IHRyYXZlcnNhbE1vZHVsZS5tZXJnZTtcbicgKwotICAgICAgICAgICAgICAgICAgICAnY29uc3QgUCA9IHRyYXZlcnNhbE1vZHVsZS5QO1xuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBQaWNrID0gdHJhdmVyc2FsTW9kdWxlLnBpY2tcbicgKwotICAgICAgICAgICAgICAgICAgICAnY29uc3QgUG9wID0gdHJhdmVyc2FsTW9kdWxlLnBvcFxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBPcmRlciA9IHRyYXZlcnNhbE1vZHVsZS5vcmRlclxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBPcGVyYXRvciA9IHRyYXZlcnNhbE1vZHVsZS5vcGVyYXRvclxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBTY29wZSA9IHRyYXZlcnNhbE1vZHVsZS5zY29wZVxuJyArCi0gICAgICAgICAgICAgICAgICAgICdjb25zdCBUID0gdHJhdmVyc2FsTW9kdWxlLnRcbicgKwotICAgICAgICAgICAgICAgICAgICAnY29uc3QgVGV4dFAgPSB0cmF2ZXJzYWxNb2R1bGUuVGV4dFBcbicgKwotICAgICAgICAgICAgICAgICAgICAnY29uc3QgV2l0aE9wdGlvbnMgPSB0cmF2ZXJzYWxNb2R1bGUud2l0aE9wdGlvbnNcbicKLSAgICApCi0KLSAgICAvLyBzb21lIHRyYXZlcnNhbHMgbWF5IHJlcXVpcmUgYSBzdGF0aWMgdHJhbnNsYXRpb24gaWYgdGhlIHRyYW5zbGF0b3IgY2FuJ3QgaGFuZGxlIHRoZW0gZm9yIHNvbWUgcmVhc29uCi0gICAgZGVmIHN0YXRpY1RyYW5zbGF0ZSA9IFs6XQotICAgIC8vIFNBTVBMRTogZ19pbmplY3RYbnVsbF9udWxsWDogIiAgICBnX2luamVjdFhudWxsX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsLG51bGwpIH1dLCAiLAotCi0gICAgd3JpdGVyLndyaXRlTGluZSgnY29uc3QgZ3JlbWxpbnMgPSB7JykKLSAgICBncmVtbGlucy5lYWNoIHsgayx2IC0+Ci0gICAgICAgIGlmIChzdGF0aWNUcmFuc2xhdGUuY29udGFpbnNLZXkoaykpIHsKLSAgICAgICAgICAgIHdyaXRlci53cml0ZUxpbmUoc3RhdGljVHJhbnNsYXRlW2tdKQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd3JpdGVyLndyaXRlKCIgICAgIikKLSAgICAgICAgICAgIHdyaXRlci53cml0ZShrKQotICAgICAgICAgICAgd3JpdGVyLndyaXRlKCI6IFsiKQotICAgICAgICAgICAgZGVmIGNvbGxlY3RlZCA9IHYuY29sbGVjdCB7IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShpdCwgVHJhbnNsYXRvci5KQVZBU0NSSVBUKSB9Ci0gICAgICAgICAgICBkZWYgdW5pcXVlQmluZGluZ3MgPSBjb2xsZWN0ZWQuY29sbGVjdCB7IGl0LmdldFBhcmFtZXRlcnMoKSB9LmZsYXR0ZW4oKS51bmlxdWUoKQotICAgICAgICAgICAgZGVmIGdyZW1saW5JdHR5ID0gY29sbGVjdGVkLml0ZXJhdG9yKCkKLSAgICAgICAgICAgIHdoaWxlIChncmVtbGluSXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBkZWYgdCA9IGdyZW1saW5JdHR5Lm5leHQoKQotICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiZnVuY3Rpb24oe2ciKQotICAgICAgICAgICAgICAgIGlmICghdW5pcXVlQmluZGluZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiLCAiKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUodW5pcXVlQmluZGluZ3Muam9pbigiLCAiKSkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKCJ9KSB7IHJldHVybiAiKQotICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSh0LmdldFRyYW5zbGF0ZWQoKSkKLSAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIiB9IikKLSAgICAgICAgICAgICAgICBpZiAoZ3JlbWxpbkl0dHkuaGFzTmV4dCgpKSB3cml0ZXIud3JpdGUoJywgJykKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlci53cml0ZUxpbmUoJ10sICcpCi0gICAgICAgIH0KLSAgICB9Ci0gICAgd3JpdGVyLndyaXRlTGluZSgnfVxuJykKLQotICAgIHdyaXRlci53cml0ZUxpbmUoJ2V4cG9ydHMuZ3JlbWxpbiA9IGdyZW1saW5zJykKLX0KLQotCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9pbmRleC5odG1sIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvaW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlMmI3Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi1kaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi1zb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi1LSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLXNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLXVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTwhRE9DVFlQRSBodG1sPgotPGh0bWwgbGFuZz0iZW4iPgotICA8aGVhZD4KLSAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KLSAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KLSAgICA8dGl0bGU+R3JlbWxpbiBKYXZhU2NyaXB0PC90aXRsZT4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImluZGV4LmNzcyIgLz4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICA8bWFpbiBpZD0iZ3JhcGgiPjwvbWFpbj4KLSAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgc3JjPSJpbmRleC5qcyI+PC9zY3JpcHQ+Ci0gIDwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL2luZGV4LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvaW5kZXguanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmZmMxNDUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvaW5kZXguanMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBDb2xvciBmcm9tICJjb2xvcmpzLmlvIjsKLWltcG9ydCBjeXRvc2NhcGUgZnJvbSAiY3l0b3NjYXBlIjsKLWltcG9ydCBncmVtbGluIGZyb20gImdyZW1saW4iOwotaW1wb3J0IHsgY3JlYXRlUmFuZG9tQ29sb3JHZW5lcmF0b3IgfSBmcm9tICIuL3V0aWxzIjsKLQotY29uc3QgcmFuZG9tQ29sb3IgPSBjcmVhdGVSYW5kb21Db2xvckdlbmVyYXRvcigpOwotCi1jb25zdCBnID0gZ3JlbWxpbi5wcm9jZXNzLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKAotICBuZXcgZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbigid3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluIikKLSk7Ci0KLWNvbnN0IFt2ZXJ0aWNlcywgZWRnZXNdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwotICBhd2FpdCBnLlYoKS50b0xpc3QoKSwKLSAgYXdhaXQgZy5FKCkudG9MaXN0KCksCi1dKTsKLQotY3l0b3NjYXBlKHsKLSAgY29udGFpbmVyOiBnbG9iYWxUaGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLAotICBlbGVtZW50czogWwotICAgIC4uLnZlcnRpY2VzLm1hcCgodmVydGV4KSA9PiAoewotICAgICAgZGF0YTogewotICAgICAgICBpZDogdmVydGV4LmlkLAotICAgICAgfSwKLSAgICAgIHN0eWxlOiB7Ci0gICAgICAgIGxhYmVsOiBgJHt2ZXJ0ZXgubGFiZWx9XG4ke3ZlcnRleC5pZH1gLAotICAgICAgICAiYmFja2dyb3VuZC1jb2xvciI6IHJhbmRvbUNvbG9yKHZlcnRleC5sYWJlbCksCi0gICAgICAgICJib3JkZXItY29sb3IiOiBuZXcgQ29sb3IocmFuZG9tQ29sb3IodmVydGV4LmxhYmVsKSkuZGFya2VuKCkudG9TdHJpbmcoewotICAgICAgICAgIGZvcm1hdDogImhleCIsCi0gICAgICAgIH0pLAotICAgICAgfSwKLSAgICB9KSksCi0gICAgLi4uZWRnZXMubWFwKChlZGdlKSA9PiAoewotICAgICAgZGF0YTogewotICAgICAgICBpZDogZWRnZS5pZCwKLSAgICAgICAgbGFiZWw6IGVkZ2UubGFiZWwsCi0gICAgICAgIHNvdXJjZTogZWRnZS5pblYuaWQsCi0gICAgICAgIHRhcmdldDogZWRnZS5vdXRWLmlkLAotICAgICAgfSwKLSAgICB9KSksCi0gIF0sCi0gIHN0eWxlOiBbCi0gICAgewotICAgICAgc2VsZWN0b3I6ICJub2RlIiwKLSAgICAgIHN0eWxlOiB7Ci0gICAgICAgIGNvbG9yOiAid2hpdGUiLAotICAgICAgICAidGV4dC12YWxpZ24iOiAiY2VudGVyIiwKLSAgICAgICAgInRleHQtaGFsaWduIjogImNlbnRlciIsCi0gICAgICAgICJib3JkZXItd2lkdGgiOiA0LAotICAgICAgICB3aWR0aDogIjgwcHgiLAotICAgICAgICBoZWlnaHQ6ICI4MHB4IiwKLSAgICAgICAgInRleHQtbWF4LXdpZHRoIjogIjgwcHgiLAotICAgICAgICAidGV4dC13cmFwIjogIndyYXAiLAotICAgICAgfSwKLSAgICB9LAotCi0gICAgewotICAgICAgc2VsZWN0b3I6ICJlZGdlIiwKLSAgICAgIHN0eWxlOiB7Ci0gICAgICAgIGxhYmVsOiAiZGF0YShsYWJlbCkiLAotICAgICAgICBjb2xvcjogIndoaXRlIiwKLSAgICAgICAgInRleHQtb3V0bGluZS1jb2xvciI6ICJibGFjayIsCi0gICAgICAgICJ0ZXh0LW91dGxpbmUtd2lkdGgiOiAiMnB4IiwKLSAgICAgICAgInRleHQtbWFyZ2luLXkiOiAiLTZweCIsCi0gICAgICAgICJ0ZXh0LXJvdGF0aW9uIjogImF1dG9yb3RhdGUiLAotICAgICAgICAidGFyZ2V0LWFycm93LXNoYXBlIjogInRyaWFuZ2xlIiwKLSAgICAgICAgImN1cnZlLXN0eWxlIjogImJlemllciIsCi0gICAgICB9LAotICAgIH0sCi0gIF0sCi0gIGxheW91dDogewotICAgIG5hbWU6ICJjb3NlIiwKLSAgfSwKLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIveWFybi5sb2NrIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIveWFybi5sb2NrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTZjZjQ0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL3lhcm4ubG9jaworKysgL2Rldi9udWxsCkBAIC0xLDE0OTggKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgInlhcm4gaW5zdGFsbCIgaW5zaWRlIHlvdXIgcHJvamVjdC4KLSMgTWFudWFsIGNoYW5nZXMgbWlnaHQgYmUgbG9zdCAtIHByb2NlZWQgd2l0aCBjYXV0aW9uIQotCi1fX21ldGFkYXRhOgotICB2ZXJzaW9uOiA4Ci0gIGNhY2hlS2V5OiAxMGMwCi0KLSJAZXNidWlsZC9haXgtcHBjNjRAbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC9haXgtcHBjNjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWFpeCAmIGNwdT1wcGM2NAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL2FuZHJvaWQtYXJtNjRAbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC9hbmRyb2lkLWFybTY0QG5wbTowLjE5LjEyIgotICBjb25kaXRpb25zOiBvcz1hbmRyb2lkICYgY3B1PWFybTY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvYW5kcm9pZC1hcm1AbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC9hbmRyb2lkLWFybUBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9YW5kcm9pZCAmIGNwdT1hcm0KLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC9hbmRyb2lkLXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2FuZHJvaWQteDY0QG5wbTowLjE5LjEyIgotICBjb25kaXRpb25zOiBvcz1hbmRyb2lkICYgY3B1PXg2NAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL2Rhcndpbi1hcm02NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2Rhcndpbi1hcm02NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9ZGFyd2luICYgY3B1PWFybTY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvZGFyd2luLXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2Rhcndpbi14NjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWRhcndpbiAmIGNwdT14NjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC9mcmVlYnNkLWFybTY0QG5wbTowLjE5LjEyIjoKLSAgdmVyc2lvbjogMC4xOS4xMgotICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvZnJlZWJzZC1hcm02NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9ZnJlZWJzZCAmIGNwdT1hcm02NAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL2ZyZWVic2QteDY0QG5wbTowLjE5LjEyIjoKLSAgdmVyc2lvbjogMC4xOS4xMgotICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvZnJlZWJzZC14NjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWZyZWVic2QgJiBjcHU9eDY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvbGludXgtYXJtNjRAbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC9saW51eC1hcm02NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9YXJtNjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC9saW51eC1hcm1AbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC9saW51eC1hcm1AbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PWFybQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL2xpbnV4LWlhMzJAbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC9saW51eC1pYTMyQG5wbTowLjE5LjEyIgotICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1pYTMyCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvbGludXgtbG9vbmc2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LWxvb25nNjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PWxvb25nNjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC9saW51eC1taXBzNjRlbEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LW1pcHM2NGVsQG5wbTowLjE5LjEyIgotICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1taXBzNjRlbAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL2xpbnV4LXBwYzY0QG5wbTowLjE5LjEyIjoKLSAgdmVyc2lvbjogMC4xOS4xMgotICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvbGludXgtcHBjNjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PXBwYzY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvbGludXgtcmlzY3Y2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LXJpc2N2NjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PXJpc2N2NjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC9saW51eC1zMzkweEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LXMzOTB4QG5wbTowLjE5LjEyIgotICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1zMzkweAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL2xpbnV4LXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LXg2NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9eDY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvbmV0YnNkLXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL25ldGJzZC14NjRAbnBtOjAuMTkuMTIiCi0gIGNvbmRpdGlvbnM6IG9zPW5ldGJzZCAmIGNwdT14NjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC9vcGVuYnNkLXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL29wZW5ic2QteDY0QG5wbTowLjE5LjEyIgotICBjb25kaXRpb25zOiBvcz1vcGVuYnNkICYgY3B1PXg2NAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL3N1bm9zLXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL3N1bm9zLXg2NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9c3Vub3MgJiBjcHU9eDY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGVzYnVpbGQvd2luMzItYXJtNjRAbnBtOjAuMTkuMTIiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJAZXNidWlsZC93aW4zMi1hcm02NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9YXJtNjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAZXNidWlsZC93aW4zMi1pYTMyQG5wbTowLjE5LjEyIjoKLSAgdmVyc2lvbjogMC4xOS4xMgotICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvd2luMzItaWEzMkBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9aWEzMgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBlc2J1aWxkL3dpbjMyLXg2NEBucG06MC4xOS4xMiI6Ci0gIHZlcnNpb246IDAuMTkuMTIKLSAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL3dpbjMyLXg2NEBucG06MC4xOS4xMiIKLSAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9eDY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQGlzYWFjcy9jbGl1aUBucG06XjguMC4yIjoKLSAgdmVyc2lvbjogOC4wLjIKLSAgcmVzb2x1dGlvbjogIkBpc2FhY3MvY2xpdWlAbnBtOjguMC4yIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgc3RyaW5nLXdpZHRoOiAibnBtOl41LjEuMiIKLSAgICBzdHJpbmctd2lkdGgtY2pzOiAibnBtOnN0cmluZy13aWR0aEBeNC4yLjAiCi0gICAgc3RyaXAtYW5zaTogIm5wbTpeNy4wLjEiCi0gICAgc3RyaXAtYW5zaS1janM6ICJucG06c3RyaXAtYW5zaUBeNi4wLjEiCi0gICAgd3JhcC1hbnNpOiAibnBtOl44LjEuMCIKLSAgICB3cmFwLWFuc2ktY2pzOiAibnBtOndyYXAtYW5zaUBeNy4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2IxYmY0MjUzNWQ0OWYxMWRjMTM3ZjE4ZDVlNGU2M2EyOGM1NTY5ZGU0MzhhMjIxYzM2OTQ4MzczMWU5ZGFjOWZiNzk3YWY1NTRlOGJmMDJiNjE5MmQxZTVlYmE2ZTY0MDJjZjkzOTAwYzNkMGFjODYzOTFkMDBkMDQ4NzY3ODllCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQG5wbWNsaS9hZ2VudEBucG06XjIuMC4wIjoKLSAgdmVyc2lvbjogMi4yLjEKLSAgcmVzb2x1dGlvbjogIkBucG1jbGkvYWdlbnRAbnBtOjIuMi4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYWdlbnQtYmFzZTogIm5wbTpeNy4xLjAiCi0gICAgaHR0cC1wcm94eS1hZ2VudDogIm5wbTpeNy4wLjAiCi0gICAgaHR0cHMtcHJveHktYWdlbnQ6ICJucG06XjcuMC4xIgotICAgIGxydS1jYWNoZTogIm5wbTpeMTAuMC4xIgotICAgIHNvY2tzLXByb3h5LWFnZW50OiAibnBtOl44LjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvMzhlZTVjYmU4ZjNjZGUxM2JlOTE2ZTcxN2JmYzU0ZmQxYTc2MDVjMDdhZjA1NjM2OWZmODk0ZTI0NGMyMjFlMGI1NmIwOGNhNTIxMzQ1NzQ3N2Y5YmMxNWJjYTllNzI5ZDUxYTQ3ODg4MjliNWMzY2YyOTZiM2M5OTYxNDdmNzYKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAbnBtY2xpL2ZzQG5wbTpeMy4xLjAiOgotICB2ZXJzaW9uOiAzLjEuMAotICByZXNvbHV0aW9uOiAiQG5wbWNsaS9mc0BucG06My4xLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICBzZW12ZXI6ICJucG06XjcuMy41IgotICBjaGVja3N1bTogMTBjMC8xNjJiNGEwYjg3MDVjZDZmNWMyNDcwYjg1MWQxZGM2Y2QyMjhjODZkMjE3MGUxNzY5ZDczOGMxZmJiNjlhODcxNjA5MDE0MTFjM2MwMzUzMzFlOWU5OWRiNzJmMWYxMDk5YThiNzM0YmYxNjM3Y2MzMmI5YTViZTE2NjBlNGUxZQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkBwa2dqcy9wYXJzZWFyZ3NAbnBtOl4wLjExLjAiOgotICB2ZXJzaW9uOiAwLjExLjAKLSAgcmVzb2x1dGlvbjogIkBwa2dqcy9wYXJzZWFyZ3NAbnBtOjAuMTEuMCIKLSAgY2hlY2tzdW06IDEwYzAvNWJkNzU3NmJiMWIzOGE0N2E3ZmM3YjUxYWM5ZjM4NzQ4ZTc3MmJlZWJjNTYyMDA0NTBjNGE4MTdkNzEyMjMyYjhmMWQzZWY3MDUzMmM4MDg0MDI0M2M2NTdkNDkxY2Y2YTZiZTFlM2EyMTRjZmY5MDc2NDU4MTlmZGMzNGFhZGQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybS1lYWJpQG5wbTo0LjEyLjAiOgotICB2ZXJzaW9uOiA0LjEyLjAKLSAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtLWVhYmlAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9YW5kcm9pZCAmIGNwdT1hcm0KLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybTY0QG5wbTo0LjEyLjAiOgotICB2ZXJzaW9uOiA0LjEyLjAKLSAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtNjRAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9YW5kcm9pZCAmIGNwdT1hcm02NAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkByb2xsdXAvcm9sbHVwLWRhcndpbi1hcm02NEBucG06NC4xMi4wIjoKLSAgdmVyc2lvbjogNC4xMi4wCi0gIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4tYXJtNjRAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9ZGFyd2luICYgY3B1PWFybTY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHJvbGx1cC9yb2xsdXAtZGFyd2luLXg2NEBucG06NC4xMi4wIjoKLSAgdmVyc2lvbjogNC4xMi4wCi0gIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0QG5wbTo0LjEyLjAiCi0gIGNvbmRpdGlvbnM6IG9zPWRhcndpbiAmIGNwdT14NjQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmQG5wbTo0LjEyLjAiOgotICB2ZXJzaW9uOiA0LjEyLjAKLSAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybS1nbnVlYWJpaGZAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9YXJtCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtZ251QG5wbTo0LjEyLjAiOgotICB2ZXJzaW9uOiA0LjEyLjAKLSAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LWdudUBucG06NC4xMi4wIgotICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1hcm02NCAmIGxpYmM9Z2xpYmMKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsQG5wbTo0LjEyLjAiOgotICB2ZXJzaW9uOiA0LjEyLjAKLSAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LW11c2xAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9YXJtNjQgJiBsaWJjPW11c2wKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJAcm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudUBucG06NC4xMi4wIjoKLSAgdmVyc2lvbjogNC4xMi4wCi0gIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudUBucG06NC4xMi4wIgotICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1yaXNjdjY0ICYgbGliYz1nbGliYwotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIkByb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1nbnVAbnBtOjQuMTIuMCI6Ci0gIHZlcnNpb246IDQuMTIuMAotICByZXNvbHV0aW9uOiAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudUBucG06NC4xMi4wIgotICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT14NjQgJiBsaWJjPWdsaWJjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2xAbnBtOjQuMTIuMCI6Ci0gIHZlcnNpb246IDQuMTIuMAotICByZXNvbHV0aW9uOiAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2xAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9eDY0ICYgbGliYz1tdXNsCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2Y0BucG06NC4xMi4wIjoKLSAgdmVyc2lvbjogNC4xMi4wCi0gIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC13aW4zMi1hcm02NC1tc3ZjQG5wbTo0LjEyLjAiCi0gIGNvbmRpdGlvbnM6IG9zPXdpbjMyICYgY3B1PWFybTY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHJvbGx1cC9yb2xsdXAtd2luMzItaWEzMi1tc3ZjQG5wbTo0LjEyLjAiOgotICB2ZXJzaW9uOiA0LjEyLjAKLSAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLXdpbjMyLWlhMzItbXN2Y0BucG06NC4xMi4wIgotICBjb25kaXRpb25zOiBvcz13aW4zMiAmIGNwdT1pYTMyCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmNAbnBtOjQuMTIuMCI6Ci0gIHZlcnNpb246IDQuMTIuMAotICByZXNvbHV0aW9uOiAiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmNAbnBtOjQuMTIuMCIKLSAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9eDY0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iQHR5cGVzL2VzdHJlZUBucG06MS4wLjUiOgotICB2ZXJzaW9uOiAxLjAuNQotICByZXNvbHV0aW9uOiAiQHR5cGVzL2VzdHJlZUBucG06MS4wLjUiCi0gIGNoZWNrc3VtOiAxMGMwL2IzYjBlMzM0Mjg4ZGRiNDA3YzdiMzM1N2NhNjdkYmVlNzVlZTIyZGIyNDJjYTdjNTZmZTI3ZGI0ZTFhMzE5ODljYjhhZjQ4YTg0ZGQ0MDFkZWI3ODdmZTEwY2M2YjJhYjFlZTgyZGM0NzgzYmU4N2VkZWRiZTNkNTNjNzljNzBkCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYWJicmV2QG5wbTpeMi4wLjAiOgotICB2ZXJzaW9uOiAyLjAuMAotICByZXNvbHV0aW9uOiAiYWJicmV2QG5wbToyLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvZjc0MmE1YTEwNzQ3Mzk0NmY0MjZjNjkxYzA4ZGFiYTYxYTFkMTU5NDI2MTZmMzAwYjVkMzJmZDczNWJlODhmZWY1Y2JhMjQyMDE3NTdiNmM0MDdmZDU2NDU1NWZiNDhjNzUxY2ZhMzM1MTliMjYwNWM4YTdhYWRkMjJiYWYzNzIKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJhYm9ydC1jb250cm9sbGVyQG5wbTpeMy4wLjAiOgotICB2ZXJzaW9uOiAzLjAuMAotICByZXNvbHV0aW9uOiAiYWJvcnQtY29udHJvbGxlckBucG06My4wLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICBldmVudC10YXJnZXQtc2hpbTogIm5wbTpeNS4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzkwY2NjNTBmMDEwMjUwMTUyNTA5YTM0NGViMmU3MTk3N2ZiZjhkYjBhYjhmMTA2MTE5N2UzMjc1ZGRmNmM2MWE0MWE2ZWRmZDdiOTQwOWM2NjQ1MTMxMzFkZDk2ZTk2MjA2NTQxNTMyNWVmMjNlZmE1ZGI5MzFiMzgyZDI0Y2E1Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYWdlbnQtYmFzZUBucG06XjcuMC4yLCBhZ2VudC1iYXNlQG5wbTpeNy4xLjAiOgotICB2ZXJzaW9uOiA3LjEuMAotICByZXNvbHV0aW9uOiAiYWdlbnQtYmFzZUBucG06Ny4xLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICBkZWJ1ZzogIm5wbTpeNC4zLjQiCi0gIGNoZWNrc3VtOiAxMGMwL2ZjOTc0YWI1N2ZmZGQ4NDIxYTJiYzMzOTY0NGQzMTJhOWNjYTMyMGMyMGMzMzkzYzlkOGIxZmQ5MTczMWI5YmJhYmRiOTg1ZGY1ZmM4NjBmNWI3OWQ4MWMzZTM1MGRhYTNmY2IzMWM1YzA3YzBiYjM4NWFhZmM4MTdkZjAwNGNlCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYWdncmVnYXRlLWVycm9yQG5wbTpeMy4wLjAiOgotICB2ZXJzaW9uOiAzLjEuMAotICByZXNvbHV0aW9uOiAiYWdncmVnYXRlLWVycm9yQG5wbTozLjEuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGNsZWFuLXN0YWNrOiAibnBtOl4yLjAuMCIKLSAgICBpbmRlbnQtc3RyaW5nOiAibnBtOl40LjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvYTQyZjY3ZmFhNzllM2U2Njg3YTQ5MjMwNTBlN2M5ODA3ZGIzODQ4YTAzNzA3NmY3OTFkMTBlMDkyNjc3ZDY1YzFkMmQ4NjNiNzg0ODU2MDY5OWY0MGZjMDUwMmMxOWY0MDk2M2ZiMWNkMWZiM2QzMzhhNzQyM2RmOGU0NWUwMzkKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJhbnNpLXJlZ2V4QG5wbTpeNS4wLjEiOgotICB2ZXJzaW9uOiA1LjAuMQotICByZXNvbHV0aW9uOiAiYW5zaS1yZWdleEBucG06NS4wLjEiCi0gIGNoZWNrc3VtOiAxMGMwLzlhNjRiYjg2MjdiNDM0YmE5MzI3YjYwYzAyNzc0MmU1ZDE3YWM2OTI3Nzk2MGQwNDE4OTg1OTYyNzFkOTkyZDRkNTJiYTcyNjdhNjNjYTEwMjMyZTI5ZjYxMDdmYzhhODM1ZjZjZThkNzE5Yjg4YzVmODQ5M2Y4MjU0ODEzNzM3Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYW5zaS1yZWdleEBucG06XjYuMC4xIjoKLSAgdmVyc2lvbjogNi4wLjEKLSAgcmVzb2x1dGlvbjogImFuc2ktcmVnZXhAbnBtOjYuMC4xIgotICBjaGVja3N1bTogMTBjMC9jYmUxNmRiZDJjNmIyNzM1ZDFkZjc5NzZhNzA3MGRkMjc3MzI2NDM0ZjAyMTJmNDNhYmY2ZDg3Njc0MDk1ZDI0Nzk2ODIwOWJhYmRhYWQzMWJiMDA4ODJmYTY4ODA3MjU2YmE5YmUzNDBlZWMyZjEwMDRkZTE0Y2E3NWY1MmEwOAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImFuc2ktc3R5bGVzQG5wbTpeNC4wLjAiOgotICB2ZXJzaW9uOiA0LjMuMAotICByZXNvbHV0aW9uOiAiYW5zaS1zdHlsZXNAbnBtOjQuMy4wIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgY29sb3ItY29udmVydDogIm5wbTpeMi4wLjEiCi0gIGNoZWNrc3VtOiAxMGMwLzg5NWEyMzkyOWRhNDE2ZjJiZDNkZTdlOWNiNGVhYmQzNDA5NDkzMjhhYjg1ZGRkNmU0ODRhNjM3ZDhmNjgyMGQ0ODVmNTM5MzM0NDZmNTI5MWMzYjc2MGNiYzQ4OGJlYjhlODg1NzNkZDBmOWM3ZGFmODNkY2NjOGZlODFiMDQxCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYW5zaS1zdHlsZXNAbnBtOl42LjEuMCI6Ci0gIHZlcnNpb246IDYuMi4xCi0gIHJlc29sdXRpb246ICJhbnNpLXN0eWxlc0BucG06Ni4yLjEiCi0gIGNoZWNrc3VtOiAxMGMwLzVkMWVjMzhjMTIzOTg0YmNlZGQ5OTZlYWM2ODBkNTQ4ZjMxODI4YmQ2NzlhNjZkYjJiZGYxMTg0NDYzNGRkZTU1ZmVjM2VmYTljNmJiMWQ4OTA1NmE1ZTc5YzFhYzU0MGM0Yzc4NGQ1OTJlYTFkMjUwMjhhOTIyMjdkMmYyZDVjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYmFsYW5jZWQtbWF0Y2hAbnBtOl4xLjAuMCI6Ci0gIHZlcnNpb246IDEuMC4yCi0gIHJlc29sdXRpb246ICJiYWxhbmNlZC1tYXRjaEBucG06MS4wLjIiCi0gIGNoZWNrc3VtOiAxMGMwLzkzMDhiYWYwYTdlNDgzOGE4MmJiZmQxMWUwMWIxY2IwZjBjZjI4OTNiYzE2NzZjMjdjMmE4YzBlNzBjYmFlMWM1OTEyMGMzMjY4NTE3YThhZTdmYjYzNzZiNDYzOWVmODFjYTIyNTgyNjExZGJlZTRlZDI4ZGY5NDUxMzRhYWVlCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iYmFzZTY0LWpzQG5wbTpeMS4zLjEiOgotICB2ZXJzaW9uOiAxLjUuMQotICByZXNvbHV0aW9uOiAiYmFzZTY0LWpzQG5wbToxLjUuMSIKLSAgY2hlY2tzdW06IDEwYzAvZjIzODIzNTEzYjYzMTczYTAwMTAzMGZhZTRmMmRhYmUyODNiOTlhOWQzMjRhZGUzYWQzZDE0OGUyMTgxMzQ2NzZmMWVlODU2OGM4NzdjZDc5ZWMxYzUzMTU4ZGNmMmQyYmE1MjdhOTdjNjA2NjE4OTI4YmE5OWRkOTMwMTAyYmYKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJicmFjZS1leHBhbnNpb25AbnBtOl4yLjAuMSI6Ci0gIHZlcnNpb246IDIuMC4xCi0gIHJlc29sdXRpb246ICJicmFjZS1leHBhbnNpb25AbnBtOjIuMC4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYmFsYW5jZWQtbWF0Y2g6ICJucG06XjEuMC4wIgotICBjaGVja3N1bTogMTBjMC9iMzU4ZjJmZTA2MGUyZDdhODdhYTAxNTk3OWVjZWEwN2YzYzM3ZDQwMThmOGQ2ZGViNWJkNGMyMjlhZDNhMDM4NGZlNjAyOWJiNzZjZDhiZTYzYzgxZTUxNmVlNTJkMWEwNjczZWRiZTIwMjNkNTNhNTE5MTczMmFlM2MzZTQ5ZgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImJyb3dzZXJAd29ya3NwYWNlOi4iOgotICB2ZXJzaW9uOiAwLjAuMC11c2UubG9jYWwKLSAgcmVzb2x1dGlvbjogImJyb3dzZXJAd29ya3NwYWNlOi4iCi0gIGRlcGVuZGVuY2llczoKLSAgICBjb2xvcmpzLmlvOiAibnBtOl4wLjUuMCIKLSAgICBjeXRvc2NhcGU6ICJucG06XjMuMjguMSIKLSAgICBncmVtbGluOiAiZmlsZTouLi8uLi9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdCIKLSAgICB2aXRlOiAibnBtOl41LjEuNCIKLSAgbGFuZ3VhZ2VOYW1lOiB1bmtub3duCi0gIGxpbmtUeXBlOiBzb2Z0Ci0KLSJidWZmZXJAbnBtOl42LjAuMyI6Ci0gIHZlcnNpb246IDYuMC4zCi0gIHJlc29sdXRpb246ICJidWZmZXJAbnBtOjYuMC4zIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYmFzZTY0LWpzOiAibnBtOl4xLjMuMSIKLSAgICBpZWVlNzU0OiAibnBtOl4xLjIuMSIKLSAgY2hlY2tzdW06IDEwYzAvMmE5MDVmYmJjZGU3M2NjNWQ4YmQxOGQxY2FhMjM3MTVkNWY4M2E1OTM1ODY3YzIzMjlmMGFjMDYxMDQyMDRiYTc5NDdiZTA5OGZlMTMxN2ZiZDg4MzBlMjYwOTBmZjhlNzY0ZjA4Y2QxNGZlZmM5NzdiYjI0OGMzNDg3YmNiZDAKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJjYWNhY2hlQG5wbTpeMTguMC4wIjoKLSAgdmVyc2lvbjogMTguMC4yCi0gIHJlc29sdXRpb246ICJjYWNhY2hlQG5wbToxOC4wLjIiCi0gIGRlcGVuZGVuY2llczoKLSAgICAiQG5wbWNsaS9mcyI6ICJucG06XjMuMS4wIgotICAgIGZzLW1pbmlwYXNzOiAibnBtOl4zLjAuMCIKLSAgICBnbG9iOiAibnBtOl4xMC4yLjIiCi0gICAgbHJ1LWNhY2hlOiAibnBtOl4xMC4wLjEiCi0gICAgbWluaXBhc3M6ICJucG06XjcuMC4zIgotICAgIG1pbmlwYXNzLWNvbGxlY3Q6ICJucG06XjIuMC4xIgotICAgIG1pbmlwYXNzLWZsdXNoOiAibnBtOl4xLjAuNSIKLSAgICBtaW5pcGFzcy1waXBlbGluZTogIm5wbTpeMS4yLjQiCi0gICAgcC1tYXA6ICJucG06XjQuMC4wIgotICAgIHNzcmk6ICJucG06XjEwLjAuMCIKLSAgICB0YXI6ICJucG06XjYuMS4xMSIKLSAgICB1bmlxdWUtZmlsZW5hbWU6ICJucG06XjMuMC4wIgotICBjaGVja3N1bTogMTBjMC83OTkyNjY1MzA1Y2MyNTFhOTg0ZjRmZGJhYjE0NDlkNTBlODhjNjM1YmM0M2JmMjc4NTUzMGM2MWQyMzljNjFiMzQ5ZTU3MzQ0NjFiYWE0NjFjYWFlZTY1ZjA0MGFiMTRlMmQ1OGU2OTRmNDc5YzA4MTBjZmZkMTgxYmE1ZWFiYwotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImNob3duckBucG06XjIuMC4wIjoKLSAgdmVyc2lvbjogMi4wLjAKLSAgcmVzb2x1dGlvbjogImNob3duckBucG06Mi4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzU5NDc1NGUxMzAzNjcyMTcxY2MwNGU1MGY2YzM5OGFlMTYxMjhlYjEzNGE4OGY4MDFiZjUzNTRmZDk2ZjIwNTMyMGYyMzUzNmEwNDVkOWFiZDhiNTEwMjRhMTQ5Njk2ZTUxMjMxNTY1ODkxZDRlZmRhYjg4NDYwMjFlY2Y4OGU2Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iY2xlYW4tc3RhY2tAbnBtOl4yLjAuMCI6Ci0gIHZlcnNpb246IDIuMi4wCi0gIHJlc29sdXRpb246ICJjbGVhbi1zdGFja0BucG06Mi4yLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzFmOTAyNjJkNWY2MjMwYTE3ZTI3ZDBjMTkwYjA5ZDQ3ZWJlN2VmZGQ3NmEwM2I1YTExMjc4NjNmN2IzYzlhZWM0YzNlNmM4YmIzYTdiYmY4MWQ1NTNkNTZhMWZkMzU3MjhmNWE4ZWY0YzYzZjg2N2FjOGQ2OTAxMDk3NDJhOGMxCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iY29sb3ItY29udmVydEBucG06XjIuMC4xIjoKLSAgdmVyc2lvbjogMi4wLjEKLSAgcmVzb2x1dGlvbjogImNvbG9yLWNvbnZlcnRAbnBtOjIuMC4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgY29sb3ItbmFtZTogIm5wbTp+MS4xLjQiCi0gIGNoZWNrc3VtOiAxMGMwLzM3ZTExNTAxNzJmMmUzMTFmZTFiMmRmNjJjNjI5M2EzNDJlZTczODBkYTdiOWNmZGJhNjdlYTUzOTkwOWFmYmQ3NGRhMjcwMzMyMDhkMDFkNmQ1Y2ZjNjVlZTc4NjhhMjJlMThkN2U3NjQ4ZTAwNDQyNTQ0MWMwZjhhMTVhN2Q3Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iY29sb3ItbmFtZUBucG06fjEuMS40IjoKLSAgdmVyc2lvbjogMS4xLjQKLSAgcmVzb2x1dGlvbjogImNvbG9yLW5hbWVAbnBtOjEuMS40IgotICBjaGVja3N1bTogMTBjMC9hMWEzZjkxNDE1Njk2MDkwMmY0NmY3ZjU2YmM2MmVmZmM2Yzk0ZTg0YjJjYWUxNTdhNTI2YjFjMWY3NGI2NzdhNDdlYzYwMmJmNjhhNjFhYmZhMmI0MmQxNWI3YzU2NTFjNmRiZTcyYTQzYWY3MjBiYzU4OGRmZjg4NWIxMGY5NQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImNvbG9yanMuaW9AbnBtOl4wLjUuMCI6Ci0gIHZlcnNpb246IDAuNS4wCi0gIHJlc29sdXRpb246ICJjb2xvcmpzLmlvQG5wbTowLjUuMCIKLSAgY2hlY2tzdW06IDEwYzAvM2ZhNWVkMzJmMmJjNjJlYTEzM2Q4ZGY5YjI2N2EyYmQyZTMzZDNhY2I4Zjg2YmYwNTdiMTI1OTY3ZjRiN2FjNjA3MTc5ZGYxNWZlNDM3MWU0Zjg4Mzc2MGVhOTM5YTkzYTIzNGQ2YjY1NWZhYzYwNTE2NmQ2OGU5OGE1NWEyNGQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJjcm9zcy1zcGF3bkBucG06XjcuMC4wIjoKLSAgdmVyc2lvbjogNy4wLjMKLSAgcmVzb2x1dGlvbjogImNyb3NzLXNwYXduQG5wbTo3LjAuMyIKLSAgZGVwZW5kZW5jaWVzOgotICAgIHBhdGgta2V5OiAibnBtOl4zLjEuMCIKLSAgICBzaGViYW5nLWNvbW1hbmQ6ICJucG06XjIuMC4wIgotICAgIHdoaWNoOiAibnBtOl4yLjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvNTczOGMzMTIzODcwODFjOThkNjljOThlMTA1YjYzMjdiMDY5MTk3Zjg2NGE2MDU5MzI0NWQ2NGM4MDg5YzhhMGE3NDRlMTYzNDkyODEyMTBkNTY4MzViYjkyNzQxMzBkODI1YTc4YjJhZDY4NTNjYTEzY2ZiZWZmYzBjMzE3NTAKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJjeXRvc2NhcGVAbnBtOl4zLjI4LjEiOgotICB2ZXJzaW9uOiAzLjI4LjEKLSAgcmVzb2x1dGlvbjogImN5dG9zY2FwZUBucG06My4yOC4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgaGVhcDogIm5wbTpeMC4yLjYiCi0gICAgbG9kYXNoOiAibnBtOl40LjE3LjIxIgotICBjaGVja3N1bTogMTBjMC9lZWZlNmMzZjAyNTNmZmRjYTQ2Zjk4NTdlMDZlYmE5NDdjYjg2M2RmMDU4M2VhZjViYjExMmJjNjQwNDI1NjA4Yjk4Mzg0N2VlM2E1Yjg2NGY5ODMzYjgwYTliYzQxYThkYzVkNjc1NTU1YjEwN2EzMzIxMDA2ZWRmZmY1MDRlZgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImRlYnVnQG5wbTo0LCBkZWJ1Z0BucG06XjQuMy40IjoKLSAgdmVyc2lvbjogNC4zLjQKLSAgcmVzb2x1dGlvbjogImRlYnVnQG5wbTo0LjMuNCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIG1zOiAibnBtOjIuMS4yIgotICBwZWVyRGVwZW5kZW5jaWVzTWV0YToKLSAgICBzdXBwb3J0cy1jb2xvcjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gIGNoZWNrc3VtOiAxMGMwL2NlZGJlYzQ1Mjk4ZGQ1YzUwMWQwMWI5MmIxMTljZDNmYWViZTU0MzhjMzkxN2ZmMTFhZTFiZmY4NmE2YzcyMjkzMGFjOWM4NjU5NzkyODI0MDEzMTY4YmE2ZGI3YzQ2NjgyMjVkODQ1YzYzM2ZiZGFmYmJmOTAyYTYzODlmNzM2Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZWFzdGFzaWFud2lkdGhAbnBtOl4wLjIuMCI6Ci0gIHZlcnNpb246IDAuMi4wCi0gIHJlc29sdXRpb246ICJlYXN0YXNpYW53aWR0aEBucG06MC4yLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzI2ZjM2NGViY2RiNjM5NWY5NTEyNGZkYTQxMWY2MzEzN2E0YmZiNWQzYTA2NDUzZjdmMjNkZmU1MjUwMjkwNWJkODRlMDQ4ODE3MmUwZjllYzI5NWZkYzQ1ZjA1YzIzZDVkOTFiYWYxNmJkMjZmMGZlOWFjZDc3N2ExODhkYzM5Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZW1vamktcmVnZXhAbnBtOl44LjAuMCI6Ci0gIHZlcnNpb246IDguMC4wCi0gIHJlc29sdXRpb246ICJlbW9qaS1yZWdleEBucG06OC4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2I2MDUzYWQzOTk1MWM0Y2YzMzhmOTA5MmQ3YmZiYTQ0OGNkZmQ0NmZlNmEyYTAzNDcwMGIxNDlhYzlmZmJjMTM3ZTM2MWNiZDNjNDQyMjk3Zjg2YmVkMmU1Zjc1NzZjMWI1NGNjMGE2YmY4ZWY1MTA2Y2M2MmY0OTZhZjM1MDEwCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZW1vamktcmVnZXhAbnBtOl45LjIuMiI6Ci0gIHZlcnNpb246IDkuMi4yCi0gIHJlc29sdXRpb246ICJlbW9qaS1yZWdleEBucG06OS4yLjIiCi0gIGNoZWNrc3VtOiAxMGMwL2FmMDE0ZTc1OWE3MjA2NGNmNjZlNmU2OTRhN2ZjNmIwZWQzZDhkYjY4MDQyN2IwMjFhODk3Mjc2ODk2NzFjZWZlOWQwNDE1MWIyY2FkNTFkYmFmODVkNWJhNzkwZDA2MWNkMTY3ZjFjZjMyZWI3YjI4MWY2MzY4YjNjMTgxNjM5Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZW5jb2RpbmdAbnBtOl4wLjEuMTMiOgotICB2ZXJzaW9uOiAwLjEuMTMKLSAgcmVzb2x1dGlvbjogImVuY29kaW5nQG5wbTowLjEuMTMiCi0gIGRlcGVuZGVuY2llczoKLSAgICBpY29udi1saXRlOiAibnBtOl4wLjYuMiIKLSAgY2hlY2tzdW06IDEwYzAvMzZkOTM4NzEyZmYwMGZlMWY0YmFjODhiNDNiY2ZmYjU5MzBjMWVmYTU3YmJjZGNhOWQ2N2UxZDlkNmM1N2NmYjEyMDBmYjAxZWZlMGYzMTA5YjJjZTk5YjIzMWY5MDc3OTUzMjgxNGE4MTM3MGExYmQzMjc0YTBmNTg1ODUwMzkKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJlbnYtcGF0aHNAbnBtOl4yLjIuMCI6Ci0gIHZlcnNpb246IDIuMi4xCi0gIHJlc29sdXRpb246ICJlbnYtcGF0aHNAbnBtOjIuMi4xIgotICBjaGVja3N1bTogMTBjMC8yODUzMjU2NzdiZjAwZTMwODQ1ZTMzMGVlYzMyODk0ZjUxMDU1MjlkYjk3NDk2ZWUzZjU5ODQ3OGU1MGYwMDhjNTM1MmE0MWEzMGU1ZTcyZWM5ZGU4YTU0MmI1YTU3MGI4NTY5OWNkNjNiZDJiYzY0NmRiY2I5ZjMxMWQ4M2JjNAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImVyci1jb2RlQG5wbTpeMi4wLjIiOgotICB2ZXJzaW9uOiAyLjAuMwotICByZXNvbHV0aW9uOiAiZXJyLWNvZGVAbnBtOjIuMC4zIgotICBjaGVja3N1bTogMTBjMC9iNjQyZjdiNGRkNGEzNzZlOTU0OTQ3NTUwYTMwNjVhOWVjZTY3MzNhYjhlNTFhZDgwZGI3MjdhYWFlMDgxN2MyZTk5YjAyYTk3YTNkNmNlY2M2NDhhOTc4NDgzMDVlNzI4Mjg5Y2YzMTJkMDlhZjM5NTQwM2E5MGM5ZDRkOGE2NgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImVzYnVpbGRAbnBtOl4wLjE5LjMiOgotICB2ZXJzaW9uOiAwLjE5LjEyCi0gIHJlc29sdXRpb246ICJlc2J1aWxkQG5wbTowLjE5LjEyIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgIkBlc2J1aWxkL2FpeC1wcGM2NCI6ICJucG06MC4xOS4xMiIKLSAgICAiQGVzYnVpbGQvYW5kcm9pZC1hcm0iOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2FuZHJvaWQtYXJtNjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2FuZHJvaWQteDY0IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9kYXJ3aW4tYXJtNjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2Rhcndpbi14NjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2ZyZWVic2QtYXJtNjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2ZyZWVic2QteDY0IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9saW51eC1hcm0iOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2xpbnV4LWFybTY0IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9saW51eC1pYTMyIjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9saW51eC1sb29uZzY0IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9saW51eC1taXBzNjRlbCI6ICJucG06MC4xOS4xMiIKLSAgICAiQGVzYnVpbGQvbGludXgtcHBjNjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2xpbnV4LXJpc2N2NjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL2xpbnV4LXMzOTB4IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9saW51eC14NjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL25ldGJzZC14NjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL29wZW5ic2QteDY0IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC9zdW5vcy14NjQiOiAibnBtOjAuMTkuMTIiCi0gICAgIkBlc2J1aWxkL3dpbjMyLWFybTY0IjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC93aW4zMi1pYTMyIjogIm5wbTowLjE5LjEyIgotICAgICJAZXNidWlsZC93aW4zMi14NjQiOiAibnBtOjAuMTkuMTIiCi0gIGRlcGVuZGVuY2llc01ldGE6Ci0gICAgIkBlc2J1aWxkL2FpeC1wcGM2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9hbmRyb2lkLWFybSI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9hbmRyb2lkLWFybTY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2FuZHJvaWQteDY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2Rhcndpbi1hcm02NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9kYXJ3aW4teDY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2ZyZWVic2QtYXJtNjQiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQGVzYnVpbGQvZnJlZWJzZC14NjQiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQGVzYnVpbGQvbGludXgtYXJtIjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2xpbnV4LWFybTY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2xpbnV4LWlhMzIiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQGVzYnVpbGQvbGludXgtbG9vbmc2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9saW51eC1taXBzNjRlbCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9saW51eC1wcGM2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9saW51eC1yaXNjdjY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2xpbnV4LXMzOTB4IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL2xpbnV4LXg2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC9uZXRic2QteDY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL29wZW5ic2QteDY0IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL3N1bm9zLXg2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC93aW4zMi1hcm02NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAZXNidWlsZC93aW4zMi1pYTMyIjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkBlc2J1aWxkL3dpbjMyLXg2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICBiaW46Ci0gICAgZXNidWlsZDogYmluL2VzYnVpbGQKLSAgY2hlY2tzdW06IDEwYzAvMGYyZDIxZmZlMjRlYmVhZDY0ODQzZjg3YzNhZWJlMmU3MDNhNWVkOWZlYjA4NmEwNzI4YjI0OTA3ZmFjMmViOTkyM2U0YTc5ODU3ZDNkZjkwNTljOTE1NzM5YmQ3YTg3MGRkNjY3OTcyZWFlMzI1YzY3ZjQ3OGI1OTJiODU4MmQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJldmVudC10YXJnZXQtc2hpbUBucG06XjUuMC4wIjoKLSAgdmVyc2lvbjogNS4wLjEKLSAgcmVzb2x1dGlvbjogImV2ZW50LXRhcmdldC1zaGltQG5wbTo1LjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvMDI1NWQ5ZjkzNjIxNWZkMjA2MTU2ZmQ0Y2FhOWU4ZDM1ZTYyMDc1ZDcyMGRjN2Q4NDdlODliNDE3ZTVlNjJjZjFjZTZjOWI0ZTBhMTYzM2E5MjU2ZGUwZWZlZmFmOWY4ZDI2OTI0YjFmM2M4NjIwY2ZmYjlkYjc4ZTdkMzA3NmIKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJldmVudGVtaXR0ZXIzQG5wbTpeNS4wLjEiOgotICB2ZXJzaW9uOiA1LjAuMQotICByZXNvbHV0aW9uOiAiZXZlbnRlbWl0dGVyM0BucG06NS4wLjEiCi0gIGNoZWNrc3VtOiAxMGMwLzRiYTVjMDBjNTA2ZTZjNzg2YjRkNjI2MmNmYmNlOTBkZGMxNGMxMGQ0NjY3ZTVjODNhZTk5M2M5ZGU4OGFhODU2MDMzOTk0ZGQyYjM1YjgzZThkYzExNzBlMjI0ZTY2YTMxOWZhODBhZGM0YzMyYWRjZDIzNzliYmM3NWRhODE0Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZXZlbnRzQG5wbTpeMy4zLjAiOgotICB2ZXJzaW9uOiAzLjMuMAotICByZXNvbHV0aW9uOiAiZXZlbnRzQG5wbTozLjMuMCIKLSAgY2hlY2tzdW06IDEwYzAvZDZiNmYyYWRiY2NiY2RhNzRkZGJhYjUyZWQwN2RiNzI3ZWY1MmUzMWE2MWVkMjZkYjlmZWI3ZGM2MmFmN2ZjOGUwNjBkZWZhNjVlNWY4YWY5NDQ5Yjg2YjUyY2MxYTFmNmE3OWYyZWFmY2Y0ZTYyYWRkMmI3YTFmYTRhNDMyZjYKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJleHBvbmVudGlhbC1iYWNrb2ZmQG5wbTpeMy4xLjEiOgotICB2ZXJzaW9uOiAzLjEuMQotICByZXNvbHV0aW9uOiAiZXhwb25lbnRpYWwtYmFja29mZkBucG06My4xLjEiCi0gIGNoZWNrc3VtOiAxMGMwLzE2MDQ1NmQyZDY0N2U2MDE5NjQwYmQwNzExMTYzNGQ4YzM1MzAzOGQ5ZmE0MDE3NmFmYjdjZDQ5YjA1NDhiZGFlODNiNTZkMDVlOTA3YzJjY2UyMzAwYjgxY2FlMzVkODAwZWY5MmZlZmI5ZDAyMDhlMTkwZmEzYjdkNmJiNTc5Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZm9yZWdyb3VuZC1jaGlsZEBucG06XjMuMS4wIjoKLSAgdmVyc2lvbjogMy4xLjEKLSAgcmVzb2x1dGlvbjogImZvcmVncm91bmQtY2hpbGRAbnBtOjMuMS4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgY3Jvc3Mtc3Bhd246ICJucG06XjcuMC4wIgotICAgIHNpZ25hbC1leGl0OiAibnBtOl40LjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvOTcwMGEwMjg1NjI4YWJhZWIzNzAwN2M5YTRkOTJiZDQ5ZjY3MjEwZjA5MDY3NjM4Nzc0MzM4ZTE0NmM4ZTljODI1YzVjODc3ZjA3MmIyZjc1ZjQxZGM2YTJkMGJlODY2NGY3OWZmYzAzZjY1NzY2NDlmNTRhODRmYjliNDdkZTAKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJmcy1taW5pcGFzc0BucG06XjIuMC4wIjoKLSAgdmVyc2lvbjogMi4xLjAKLSAgcmVzb2x1dGlvbjogImZzLW1pbmlwYXNzQG5wbToyLjEuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIG1pbmlwYXNzOiAibnBtOl4zLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvNzAzZDE2NTIyYjgyODJkNzI5OTMzNzUzOWMzZWQ2ZWRkZGQxYWZlODI0MzVlNGY1Yjc2ZTM0YTc5Y2Q3NGU0ODhhOGEwZTI2YTYzNmFmYzI0NDBlMWEyM2IwMzg3OGUyMTIyZTNhMmNmZTM3NWE1Y2Y2M2MzN2Q5MmI4NmEwMDQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJmcy1taW5pcGFzc0BucG06XjMuMC4wIjoKLSAgdmVyc2lvbjogMy4wLjMKLSAgcmVzb2x1dGlvbjogImZzLW1pbmlwYXNzQG5wbTozLjAuMyIKLSAgZGVwZW5kZW5jaWVzOgotICAgIG1pbmlwYXNzOiAibnBtOl43LjAuMyIKLSAgY2hlY2tzdW06IDEwYzAvNjNlODBkYTJmZjliNjIxZTJjYjE1OTZhYmNiOTIwN2YxY2Y4MmI5NjhiMTE2Y2NkN2I5NTllMzMyMzE0NGNjZTdmYjE0MTQ2MjIwMDk3MWMzOGJiZjJlY2NhNTE2OTUwNjlkYjQ1MjY1NzA1YmVkMDlhN2NkOTNhZTViODlmOTQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJmc2V2ZW50c0BucG06fjIuMy4yLCBmc2V2ZW50c0BucG06fjIuMy4zIjoKLSAgdmVyc2lvbjogMi4zLjMKLSAgcmVzb2x1dGlvbjogImZzZXZlbnRzQG5wbToyLjMuMyIKLSAgZGVwZW5kZW5jaWVzOgotICAgIG5vZGUtZ3lwOiAibnBtOmxhdGVzdCIKLSAgY2hlY2tzdW06IDEwYzAvYTFmMGM0NDU5NTEyM2VkNzE3ZmViYmM0NzhhYTk1MmU0N2FkZmMyOGUyMDkyYmU2NmI4YWIxNjM1MTQ3MjU0Y2E2Y2ZlMWRmNzkyYTg5OTdmMjI3MTZkNGNiYWZjNzMzMDk4OTlmZjdiZmFjMmFjM2FkOGNmMmU0ZWNjM2VjNjAKLSAgY29uZGl0aW9uczogb3M9ZGFyd2luCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZnNldmVudHNAcGF0Y2g6ZnNldmVudHNAbnBtJTNBfjIuMy4yI29wdGlvbmFsIWJ1aWx0aW48Y29tcGF0L2ZzZXZlbnRzPiwgZnNldmVudHNAcGF0Y2g6ZnNldmVudHNAbnBtJTNBfjIuMy4zI29wdGlvbmFsIWJ1aWx0aW48Y29tcGF0L2ZzZXZlbnRzPiI6Ci0gIHZlcnNpb246IDIuMy4zCi0gIHJlc29sdXRpb246ICJmc2V2ZW50c0BwYXRjaDpmc2V2ZW50c0BucG0lM0EyLjMuMyNvcHRpb25hbCFidWlsdGluPGNvbXBhdC9mc2V2ZW50cz46OnZlcnNpb249Mi4zLjMmaGFzaD1kZjBiZjEiCi0gIGRlcGVuZGVuY2llczoKLSAgICBub2RlLWd5cDogIm5wbTpsYXRlc3QiCi0gIGNvbmRpdGlvbnM6IG9zPWRhcndpbgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImdsb2JAbnBtOl4xMC4yLjIsIGdsb2JAbnBtOl4xMC4zLjEwIjoKLSAgdmVyc2lvbjogMTAuMy4xMAotICByZXNvbHV0aW9uOiAiZ2xvYkBucG06MTAuMy4xMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGZvcmVncm91bmQtY2hpbGQ6ICJucG06XjMuMS4wIgotICAgIGphY2tzcGVhazogIm5wbTpeMi4zLjUiCi0gICAgbWluaW1hdGNoOiAibnBtOl45LjAuMSIKLSAgICBtaW5pcGFzczogIm5wbTpeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKLSAgICBwYXRoLXNjdXJyeTogIm5wbTpeMS4xMC4xIgotICBiaW46Ci0gICAgZ2xvYjogZGlzdC9lc20vYmluLm1qcwotICBjaGVja3N1bTogMTBjMC8xM2Q4YTFmZWI3ZWFjNzk0NWY4Yzg0ODBlMTFjZDRhNDRiMjRkMjY1MDNkOTlhOGQ4YWM4ZDVhZWZiZjNlOTgwMmEyYjYwODczMThhODI5ZmFkMDRjYjRlODI5ZjI1YzVmNGYxMTEwYzY4OTY2YzQ5ODcyMGRkMjYxYzdlMzQ0ZAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImdyYWNlZnVsLWZzQG5wbTpeNC4yLjYiOgotICB2ZXJzaW9uOiA0LjIuMTEKLSAgcmVzb2x1dGlvbjogImdyYWNlZnVsLWZzQG5wbTo0LjIuMTEiCi0gIGNoZWNrc3VtOiAxMGMwLzM4NmQwMTFhNTUzZTAyYmM1OTRhYzJjYTBiZDZkOWU0YzIyZDdmYThjZmJmYzQ0OGE2ZDE0OGM1OWVhODgxYjA5MmRiOWRiZTM1NDdhZTRiODhlNTVmMWIwMWY3YzRhMmVjYzUzYjMxMGMwNDI3OTNlNjNhYTQ0Y2Y2YzI1N2YyCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iZ3JlbWxpbkBmaWxlOi4uLy4uL3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ojpsb2NhdG9yPWJyb3dzZXIlNDB3b3Jrc3BhY2UlM0EuIjoKLSAgdmVyc2lvbjogMy43LjItYWxwaGExCi0gIHJlc29sdXRpb246ICJncmVtbGluQGZpbGU6Li4vLi4vc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQjLi4vLi4vc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQ6Omhhc2g9NGJkODQ1JmxvY2F0b3I9YnJvd3NlciU0MHdvcmtzcGFjZSUzQS4iCi0gIGRlcGVuZGVuY2llczoKLSAgICBidWZmZXI6ICJucG06XjYuMC4zIgotICAgIGV2ZW50ZW1pdHRlcjM6ICJucG06XjUuMC4xIgotICAgIHJlYWRhYmxlLXN0cmVhbTogIm5wbTpeNC41LjIiCi0gICAgdXVpZDogIm5wbTpeOS4wLjEiCi0gICAgd3M6ICJucG06XjguMTYuMCIKLSAgY2hlY2tzdW06IDEwYzAvMWE4MTcyYjQ0ODUxY2I3MWViMTFmNWFlZTQzODAzNDkxMjc2MjM1MWQ5NDE2ODRmYWU5NDJhMTQyZDlkNzU3ZTNiZTcyYmQxMzZhNWNjNDNkZDgxZGQwMDU5NGExN2MzNjAwOWQ0NmVmMDZlMGJhNDEyMGY3NjQ0YWVmYTY3NWUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJoZWFwQG5wbTpeMC4yLjYiOgotICB2ZXJzaW9uOiAwLjIuNwotICByZXNvbHV0aW9uOiAiaGVhcEBucG06MC4yLjciCi0gIGNoZWNrc3VtOiAxMGMwLzM0MWM1ZDUxYWUxM2RjODM0NmMzNzFhOGE2OWM1N2M5NzJmY2I5YTMyMzMwOTBkM2RkNWJhMjlkNDgzZDZiNWI0ZTc1NDkyNDQzY2JmZWFjZDQ2NjA4YmIzMGU2NjgwZjY0NmZmYjdhNjIwNTkwMDIyMTczNTU4N2QwN2E3OWI2Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iaHR0cC1jYWNoZS1zZW1hbnRpY3NAbnBtOl40LjEuMSI6Ci0gIHZlcnNpb246IDQuMS4xCi0gIHJlc29sdXRpb246ICJodHRwLWNhY2hlLXNlbWFudGljc0BucG06NC4xLjEiCi0gIGNoZWNrc3VtOiAxMGMwL2NlMTMxOWI4YTM4MmViM2NiYjRhMzdjMTlmNmJmZTE0ZTViYjViZTNkMDkwNzllODg1ZThjNTEzYWIyZDNjZDkyMTQ5MDJmOGEzMWM5ZGM0ZTM3MDIyNjMzY2VhYmZjMmQ2OTc0MDVkZWVhZjFiOGYzNTUyYmI0ZWQ5OTZmZGZjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iaHR0cC1wcm94eS1hZ2VudEBucG06XjcuMC4wIjoKLSAgdmVyc2lvbjogNy4wLjIKLSAgcmVzb2x1dGlvbjogImh0dHAtcHJveHktYWdlbnRAbnBtOjcuMC4yIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYWdlbnQtYmFzZTogIm5wbTpeNy4xLjAiCi0gICAgZGVidWc6ICJucG06XjQuMy40IgotICBjaGVja3N1bTogMTBjMC80MjA3YjA2YTQ1ODBmYjg1ZGQ2ZGZmNTIxZjBhYmY2ZGI1MTc0ODllNzA4NjNkY2ExYTAyOTFkYWE3ZjJkM2QyZDYwMTVhNTdiZDcwMmFmMDY4ZWE1Y2Y5ZjFmNmZmNzIzMTRmNWY1YjQyMjhkMjk5YzA5MDQxMzVkMmFlZjkyMQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImh0dHBzLXByb3h5LWFnZW50QG5wbTpeNy4wLjEiOgotICB2ZXJzaW9uOiA3LjAuNAotICByZXNvbHV0aW9uOiAiaHR0cHMtcHJveHktYWdlbnRAbnBtOjcuMC40IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYWdlbnQtYmFzZTogIm5wbTpeNy4wLjIiCi0gICAgZGVidWc6ICJucG06NCIKLSAgY2hlY2tzdW06IDEwYzAvYmM0ZjdjMzhkYTMyYTVmYzYyMjQ1MGI2Y2I0OWEyNGZmNTk2ZjliZDQ4ZGNlZGI1MmQyZGEzZmExYzFhODBlMTAwZmI1MDZiZDU5YjMyNmMwMTJmMjFjODYzYzY5YjI3NWMyM2RlMWEwMWQwYjg0ZGIzOTY4MjJmZGYyNWU1MmIKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJpY29udi1saXRlQG5wbTpeMC42LjIiOgotICB2ZXJzaW9uOiAwLjYuMwotICByZXNvbHV0aW9uOiAiaWNvbnYtbGl0ZUBucG06MC42LjMiCi0gIGRlcGVuZGVuY2llczoKLSAgICBzYWZlci1idWZmZXI6ICJucG06Pj0gMi4xLjIgPCAzLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvOTgxMDJiYzY2YjMzZmNmNWFjMDQ0MDk5ZDEyNTdiYTBiN2FkNWUzY2NkMzIyMWYzNGRkNTA4YWI0MDcwZWRmZjE4MzI3NjIyMTY4NGUxZTA1NTViMTQ1ZmNlMDg1MGM5ZjdkMmI2MGE5ZmNhYzUwZmJiNGVhMGQ2ZTg0NWEzYjEKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJpZWVlNzU0QG5wbTpeMS4yLjEiOgotICB2ZXJzaW9uOiAxLjIuMQotICByZXNvbHV0aW9uOiAiaWVlZTc1NEBucG06MS4yLjEiCi0gIGNoZWNrc3VtOiAxMGMwL2IwNzgyZWY1ZTA5MzViOWYxMjg4M2EyZTJhYTM3YmFhNzVkYTZlNjZjZTY1MTVjMTY4Njk3YjQyMTYwODA3ZDkzMzBkZTlhMzJlYzFlZDczMTQ5YWVhMDJlMGQ4MjJlNTcyYmNhNmYxZTIyYmRjYmQyMTQ5ZTEzYjA1MGIxN2JiCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iaW11cm11cmhhc2hAbnBtOl4wLjEuNCI6Ci0gIHZlcnNpb246IDAuMS40Ci0gIHJlc29sdXRpb246ICJpbXVybXVyaGFzaEBucG06MC4xLjQiCi0gIGNoZWNrc3VtOiAxMGMwLzhiNTEzMTM4NTBkZDMzNjA1YzZjOWQzZmQ5NjM4YjcxNGY0YzRjNDAyNTBjZmY2NTgyMDlmMzBkNDBkYTYwZjc4OTkyZmIyZGY1ZGFiZWU0YWNmNTg5YTZhODJiYmM3OWFkNTQ4NjU1MDc1NGJkOWVjNGUzZmMwZDRhNTdkNmE2Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iaW5kZW50LXN0cmluZ0BucG06XjQuMC4wIjoKLSAgdmVyc2lvbjogNC4wLjAKLSAgcmVzb2x1dGlvbjogImluZGVudC1zdHJpbmdAbnBtOjQuMC4wIgotICBjaGVja3N1bTogMTBjMC8xZTE5MDRkZGIwY2IzZDZjY2U3Y2QwOWUyN2E5MDE4NDkwOGI3YTVkNWMyMWI5MmUyMzJjOTM1NzlkMzE0ZjBiODNjMjQ2ZmZiMDM1NDkzZDA1MDRiMWU5MTQ3YmEyYzliMjFkZjAwMzBmNDg2NzNmYmEwNDk2ZWNkNjk4MTYxZgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImlwLWFkZHJlc3NAbnBtOl45LjAuNSI6Ci0gIHZlcnNpb246IDkuMC41Ci0gIHJlc29sdXRpb246ICJpcC1hZGRyZXNzQG5wbTo5LjAuNSIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGpzYm46ICJucG06MS4xLjAiCi0gICAgc3ByaW50Zi1qczogIm5wbTpeMS4xLjMiCi0gIGNoZWNrc3VtOiAxMGMwLzMzMWNkMDdmYWZjYjNiMjQxMDA2MTNlNGI1M2UxYTJiNGZlYWIxMWU2NzFlNjU1ZDQ2ZGMwOWVlMjMzZGE1MDExMjg0ZDA5Y2E0MGM0ZWNiZGZlMWQwMDA0ZjQ2Mjk1ODY3NWMyMjRhODA0MjU5ZjJmNzhkMjQ2NWE4NzgyNGJjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnRAbnBtOl4zLjAuMCI6Ci0gIHZlcnNpb246IDMuMC4wCi0gIHJlc29sdXRpb246ICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludEBucG06My4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2JiMTFkODI1ZTA0OWYzOGUwNGMwNjM3M2E4ZDcyNzgyZWVlMDIwNWJkYTlkOTA4Y2M1NTBjY2IzYzU5Yjk5ZDc1MGZmOTUzNzk4MmUwMTczM2MxYzk0YTU4ZTM1NDAwNjYxZjU3MDQyMTU4ZmY1ZThmM2U5MGNmOTM2ZGFmMGZjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0iaXMtbGFtYmRhQG5wbTpeMS4wLjEiOgotICB2ZXJzaW9uOiAxLjAuMQotICByZXNvbHV0aW9uOiAiaXMtbGFtYmRhQG5wbToxLjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvODVmZWUwOThhZTYyYmE2ZjFlMjRjZjIyNjc4ODA1NDczYzdhZmQwZmIzOTc4YTNhYTI2MGUzNTRjYjdiY2IzYTU4MDZjZjBhOTg0MDMxODg0NjVlZmVkZWM0MWFiNDM0OGU4ZTRlNzkzMDVkNDA5NjAxMzIzODU1YjM4MzlkNGQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJpc2V4ZUBucG06XjIuMC4wIjoKLSAgdmVyc2lvbjogMi4wLjAKLSAgcmVzb2x1dGlvbjogImlzZXhlQG5wbToyLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvMjI4Y2ZhNTAzZmFkYzJjMzE1OTZhYjA2ZWQ2YWE4MmM5OTc2ZWVjMmJmZDgzMzk3ZTdlYWYwNmQwY2NmNDJjZDFkZmQ2NzQzYmY5YWViMDFhZWJkNDE1NmQwMDk5OTRjNWY3NmVhODk4ZDI4MzJjMWZlMzQyZGE5MjNjYTQ1N2QKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJpc2V4ZUBucG06XjMuMS4xIjoKLSAgdmVyc2lvbjogMy4xLjEKLSAgcmVzb2x1dGlvbjogImlzZXhlQG5wbTozLjEuMSIKLSAgY2hlY2tzdW06IDEwYzAvOWVjMjU3NjU0MDkzNDQzZWIwYTUyOGE5YzhjYmJhOWMwY2E3NjE2Y2NiNDBhYmQ2ZGRlNzIwMjczNGQ5NmJiODZlNGFjMGQ3NjRmMGY4Y2Q5NjU4NTZhYWNiZmYyZjRjZTIzZTczMGRjMTlkZmI0MWUzYjBkODY1Y2E2ZmRjYzcKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJqYWNrc3BlYWtAbnBtOl4yLjMuNSI6Ci0gIHZlcnNpb246IDIuMy42Ci0gIHJlc29sdXRpb246ICJqYWNrc3BlYWtAbnBtOjIuMy42IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgIkBpc2FhY3MvY2xpdWkiOiAibnBtOl44LjAuMiIKLSAgICAiQHBrZ2pzL3BhcnNlYXJncyI6ICJucG06XjAuMTEuMCIKLSAgZGVwZW5kZW5jaWVzTWV0YToKLSAgICAiQHBrZ2pzL3BhcnNlYXJncyI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICBjaGVja3N1bTogMTBjMC9mMDFkOGY5NzJkODk0Y2Q3NjM4YmMzMzhlOWVmNWRkYjg2ZjdiMjA4Y2UxNzdhMzZkNzE4ZWFjOTZlYzg2NjM4YTZlZmExN2QwMjIxYjEwMDczZTY0YjQ1ZWRjMmNlMTUzNDBkYjkzODBiMWY1ZDVjNWQwMDBjYmM1MTdkYzExMQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImpzYm5AbnBtOjEuMS4wIjoKLSAgdmVyc2lvbjogMS4xLjAKLSAgcmVzb2x1dGlvbjogImpzYm5AbnBtOjEuMS4wIgotICBjaGVja3N1bTogMTBjMC80ZjkwN2ZiNzhkN2I3MTJlMTFkZWE4YzE2NWZlMDkyMWY4MWE2NTdkMzQ0M2RkZTc1MzU5ZWQ1MmViMmI1ZDMzY2U2NzczZDk3OTg1YTA4OWYwOWE2NWVkZDgwYjExY2I3NWM3NjdiNTdiYTQ3MzkxZmVlNGM5NjlmNzIxNWM5NgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotImxvZGFzaEBucG06XjQuMTcuMjEiOgotICB2ZXJzaW9uOiA0LjE3LjIxCi0gIHJlc29sdXRpb246ICJsb2Rhc2hAbnBtOjQuMTcuMjEiCi0gIGNoZWNrc3VtOiAxMGMwL2Q4Y2JlYTA3MmJiMDg2NTViYjRjOTg5ZGE0MTg5OTRiMDczYTYwOGRmZmE2MDhiMDlhYzA0YjQzYTc5MWIxMmFlYWU3Y2Q3YWQ5MTlhYTRjOTI1ZjMzYjQ4NDkwYjVjZmU2YzFmNzFkODI3OTU2MDcxZGFlMmU3YmIzYTZiNzRjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ibHJ1LWNhY2hlQG5wbTpeMTAuMC4xLCBscnUtY2FjaGVAbnBtOl45LjEuMSB8fCBeMTAuMC4wIjoKLSAgdmVyc2lvbjogMTAuMi4wCi0gIHJlc29sdXRpb246ICJscnUtY2FjaGVAbnBtOjEwLjIuMCIKLSAgY2hlY2tzdW06IDEwYzAvYzk4NDc2MTJhYTJkYWFlZjEwMmQzMDU0MmE4ZDZkOWIyYzJiYjM2NTgxYzFiZjBkYzNlYmY1ZTVmMzM1MmM3NzJhNzQ5ZTYwNGFmYWUyZTQ2ODczYjkzMGE5ZTk1MjM3NDNmYWFjNGU1YjkzN2M1NzZhYjI5MTk2Nzc0NzEyZWUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJscnUtY2FjaGVAbnBtOl42LjAuMCI6Ci0gIHZlcnNpb246IDYuMC4wCi0gIHJlc29sdXRpb246ICJscnUtY2FjaGVAbnBtOjYuMC4wIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgeWFsbGlzdDogIm5wbTpeNC4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2NiNTNlNTgyNzg1YzQ4MTg3ZDdhMTg4ZDMzNzljMTgxYjVjYTJhOWM3OGQyYmNlM2U3ZGVlMzZmMzI3NjFkMWM0Mjk4M2RhM2ZlMTJiNTVjYjc0ZTE3NzlmYTk0Y2RjMmU1MzY3YzAyOGE5YjM1MzE3MTg0ZWRlMGMwN2EzMGE5Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ibWFrZS1mZXRjaC1oYXBwZW5AbnBtOl4xMy4wLjAiOgotICB2ZXJzaW9uOiAxMy4wLjAKLSAgcmVzb2x1dGlvbjogIm1ha2UtZmV0Y2gtaGFwcGVuQG5wbToxMy4wLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICAiQG5wbWNsaS9hZ2VudCI6ICJucG06XjIuMC4wIgotICAgIGNhY2FjaGU6ICJucG06XjE4LjAuMCIKLSAgICBodHRwLWNhY2hlLXNlbWFudGljczogIm5wbTpeNC4xLjEiCi0gICAgaXMtbGFtYmRhOiAibnBtOl4xLjAuMSIKLSAgICBtaW5pcGFzczogIm5wbTpeNy4wLjIiCi0gICAgbWluaXBhc3MtZmV0Y2g6ICJucG06XjMuMC4wIgotICAgIG1pbmlwYXNzLWZsdXNoOiAibnBtOl4xLjAuNSIKLSAgICBtaW5pcGFzcy1waXBlbGluZTogIm5wbTpeMS4yLjQiCi0gICAgbmVnb3RpYXRvcjogIm5wbTpeMC42LjMiCi0gICAgcHJvbWlzZS1yZXRyeTogIm5wbTpeMi4wLjEiCi0gICAgc3NyaTogIm5wbTpeMTAuMC4wIgotICBjaGVja3N1bTogMTBjMC80M2I5ZjZkY2JjNmZlOGI4NjA0Y2I2Mzk2OTU3YzM2OTg4NTdhMTViYTRkYmMzODI4NGY3ZjBlNjFmMjQ4MzAwNTg1ZWYxZWI4Y2M2MmRmNTRlOWM3MjRhZjk3N2U0NWI1Y2RmZDg4MzIwZWY3ZjUzZTQ1MDcwZWQzNDg4ZGE1NQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm1pbmltYXRjaEBucG06XjkuMC4xIjoKLSAgdmVyc2lvbjogOS4wLjMKLSAgcmVzb2x1dGlvbjogIm1pbmltYXRjaEBucG06OS4wLjMiCi0gIGRlcGVuZGVuY2llczoKLSAgICBicmFjZS1leHBhbnNpb246ICJucG06XjIuMC4xIgotICBjaGVja3N1bTogMTBjMC84NWY0MDdkY2QzOGFjM2UxODBmNDI1ZTg2NTUzOTExZDEwMTQ1NWNhM2FkNTU0NGQ2YTdjZWMxNjI4NjY1N2U0ZjhhOWFhNjY5NTgwMzAyNWM1NWUzMWUzNWE5MWEyMjUyYjVkYzhlN2Q1MjcyMTEyNzhiOGI2NWI0ZGJkNWVhYwotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm1pbmlwYXNzLWNvbGxlY3RAbnBtOl4yLjAuMSI6Ci0gIHZlcnNpb246IDIuMC4xCi0gIHJlc29sdXRpb246ICJtaW5pcGFzcy1jb2xsZWN0QG5wbToyLjAuMSIKLSAgZGVwZW5kZW5jaWVzOgotICAgIG1pbmlwYXNzOiAibnBtOl43LjAuMyIKLSAgY2hlY2tzdW06IDEwYzAvNTE2N2U3M2Y2MmJiNzRjYzUwMTk1OTQ3MDljNzdlNmE3NDIwNTFhNjQ3ZmU5NDk5YWJmMDNjNzFkY2E3NTUxNWI3OTU5ZDY3YTc2NGJkYzRmOGIzNjFjZjg5N2ZiZjI1ZTJkOTg2OWVlMDM5MjAzZWQ0NTI0MGY0OGI5YWEwNmUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJtaW5pcGFzcy1mZXRjaEBucG06XjMuMC4wIjoKLSAgdmVyc2lvbjogMy4wLjQKLSAgcmVzb2x1dGlvbjogIm1pbmlwYXNzLWZldGNoQG5wbTozLjAuNCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGVuY29kaW5nOiAibnBtOl4wLjEuMTMiCi0gICAgbWluaXBhc3M6ICJucG06XjcuMC4zIgotICAgIG1pbmlwYXNzLXNpemVkOiAibnBtOl4xLjAuMyIKLSAgICBtaW5pemxpYjogIm5wbTpeMi4xLjIiCi0gIGRlcGVuZGVuY2llc01ldGE6Ci0gICAgZW5jb2Rpbmc6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICBjaGVja3N1bTogMTBjMC8xYjYzYzFmMzMxM2U4OGVlYWM0Njg5ZjFiNzFjOWYwODY1OThkYjlhMTg5NDAwZTNlZTk2MGMzMmVkODllMDY3MzdmYTIzOTc2YzkzMDVjMmQ1NzQ2NGZiM2ZjZGMxMjc0OWQzMzc4ODA1YzlkNjE3NmY1NTY5YjBkMGVlOGE3NQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm1pbmlwYXNzLWZsdXNoQG5wbTpeMS4wLjUiOgotICB2ZXJzaW9uOiAxLjAuNQotICByZXNvbHV0aW9uOiAibWluaXBhc3MtZmx1c2hAbnBtOjEuMC41IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgbWluaXBhc3M6ICJucG06XjMuMC4wIgotICBjaGVja3N1bTogMTBjMC8yYTUxYjYzZmViNzk5ZDJiYjM0NjY5MjA1ZWVlN2MwZWFmOWRjZTAxODgzMjYxYTViNzc0MTBjOTQwOGFhNDQ3ZTQ3OGVmZDE5MWI0ZGU2ZmMxMTAxZTc5NmZmNTg5MmY4NDQzZWYyMGQ5NTQ0Mzg1ODE5MDkzZGJiMzJkMzZiZAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm1pbmlwYXNzLXBpcGVsaW5lQG5wbTpeMS4yLjQiOgotICB2ZXJzaW9uOiAxLjIuNAotICByZXNvbHV0aW9uOiAibWluaXBhc3MtcGlwZWxpbmVAbnBtOjEuMi40IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgbWluaXBhc3M6ICJucG06XjMuMC4wIgotICBjaGVja3N1bTogMTBjMC9jYmRhNTdjZWEyMGIxNDBiNzk3NTA1ZGMyY2FjNzE1ODFhNzBiMzI0N2I4NDQ4MGMxZmVkNWNhNWJhNDZjMjVlY2MyNWY2OGJmYzllNmRjYjFhNmU5MDE3ZGFiNWM3YWRhNWVhYjczYWQ0ZjBhNDlkODRlMzUwOTNlMGM2NDNmMgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm1pbmlwYXNzLXNpemVkQG5wbTpeMS4wLjMiOgotICB2ZXJzaW9uOiAxLjAuMwotICByZXNvbHV0aW9uOiAibWluaXBhc3Mtc2l6ZWRAbnBtOjEuMC4zIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgbWluaXBhc3M6ICJucG06XjMuMC4wIgotICBjaGVja3N1bTogMTBjMC8yOThmMTI0NzUzZWZkYzc0NWNmZTBmMmJkZmRkODFiYTI1YjlmNGU3NTNjYTRhMjA2NmViMTdjODIxZjI1ZDQ4YWNlYTYwN2RmYzk5NzYzM2VlNWJmN2I2ZGZmZmI0ZWVlNGYyMDUxZWIxNjg2NjNmMGI5OWZhZDJmYTQ4MjljYgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm1pbmlwYXNzQG5wbTpeMy4wLjAiOgotICB2ZXJzaW9uOiAzLjMuNgotICByZXNvbHV0aW9uOiAibWluaXBhc3NAbnBtOjMuMy42IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgeWFsbGlzdDogIm5wbTpeNC4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2ExMTQ3NDY5NDNhZmExZGJiY2E4MjQ5ZTcwNmQxZDM4Yjg1ZWQxMjk4YjUzMGY1ODA4Y2U1MWY4ZTllOTQxOTYyZTJhNWFkMmUwMGVhZTdkZDIxZDhhNGFhZTY1ODZhNjZkNDIxNmQxYTI1OTM4NWU5ZDAzNThmMGMxZWJhMTZjCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ibWluaXBhc3NAbnBtOl41LjAuMCI6Ci0gIHZlcnNpb246IDUuMC4wCi0gIHJlc29sdXRpb246ICJtaW5pcGFzc0BucG06NS4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2E5MWQ4MDQzZjY5MTc5NmE4YWM4OGRmMDM5ZGExOTkzM2VmMGY2MzNlM2Q3ZjBkMzVkY2Q1MzczYWY0OTEzMWNmMjM5OWJmYzM1NWY0MTUxNWRjNDk1ZTM5OTAzNjljMzg1OGNkMzE5ZTVjMjcyMmI0NzUzYzkwYmYzMTUyNDYyCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ibWluaXBhc3NAbnBtOl41LjAuMCB8fCBeNi4wLjIgfHwgXjcuMC4wLCBtaW5pcGFzc0BucG06XjcuMC4yLCBtaW5pcGFzc0BucG06XjcuMC4zIjoKLSAgdmVyc2lvbjogNy4wLjQKLSAgcmVzb2x1dGlvbjogIm1pbmlwYXNzQG5wbTo3LjAuNCIKLSAgY2hlY2tzdW06IDEwYzAvNmM3MzcwYTZkZmQyNTdiZjE4MjIyZGE1ODFiYTg5YTVlYWVkY2ExMGUxNTg3ODEyMzJhOGI1NTQyYTkwNTQ3NTQwYjRiOWI3ZTdmNDkwZTRjZGE0M2FjZmJkMTJlMDg2ZjA0NTM3MjhlY2Y4YzE5ZTBlZjY5MjFiYzU5NThhYzUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJtaW5pemxpYkBucG06XjIuMS4xLCBtaW5pemxpYkBucG06XjIuMS4yIjoKLSAgdmVyc2lvbjogMi4xLjIKLSAgcmVzb2x1dGlvbjogIm1pbml6bGliQG5wbToyLjEuMiIKLSAgZGVwZW5kZW5jaWVzOgotICAgIG1pbmlwYXNzOiAibnBtOl4zLjAuMCIKLSAgICB5YWxsaXN0OiAibnBtOl40LjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvNjRmYWUwMjRlMWE3ZDAzNDZhMTEwMmJiNjcwMDg1YjE3YjdmOTViZjZjZmRmNWIxMjg3NzJlYzhmYWY5ZWEyMTE0NjRlYTRhZGQ0MDZhM2E2Mzg0YTdkODdhMGNkMWE5NjI2MzY5MjEzNDMyMzQ3N2I0ZmI0MzY1OWE2Y2FiNzgKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJta2RpcnBAbnBtOl4xLjAuMyI6Ci0gIHZlcnNpb246IDEuMC40Ci0gIHJlc29sdXRpb246ICJta2RpcnBAbnBtOjEuMC40IgotICBiaW46Ci0gICAgbWtkaXJwOiBiaW4vY21kLmpzCi0gIGNoZWNrc3VtOiAxMGMwLzQ2ZWEwZjNmZmE4YmM2YTViYzBjNzA4MWZmYzM5MDc3NzdmMGVkNjUxNjg4OGQ0MGE1MThjNTExMWY4MzY2ZDk3ZDI2Nzg5MTFhZDFhNjg4MmJmNTkyZmE5ZGU2Yzc4NGZlYTMyZTE2ODdiYjk0ZTFmNDk0NDE3MGFmNDhhNWNmCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ibXNAbnBtOjIuMS4yIjoKLSAgdmVyc2lvbjogMi4xLjIKLSAgcmVzb2x1dGlvbjogIm1zQG5wbToyLjEuMiIKLSAgY2hlY2tzdW06IDEwYzAvYTQzNzcxNGUyZjkwZGJmODgxYjUxOTFkMzVhNmRiNzkyZWZiY2E1YmFkZjExMmY4N2I5ZTFjNzEyYWFjZTRiNGI5Yjc0MmRkNjUzN2YzZWRmOTBmZDZmNjg0ZGU4OTdjZWMyMzBhYmRlNTdlODc4ODM3NjY3MTJkZGRhMjk3Y2MKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJuYW5vaWRAbnBtOl4zLjMuNyI6Ci0gIHZlcnNpb246IDMuMy43Ci0gIHJlc29sdXRpb246ICJuYW5vaWRAbnBtOjMuMy43IgotICBiaW46Ci0gICAgbmFub2lkOiBiaW4vbmFub2lkLmNqcwotICBjaGVja3N1bTogMTBjMC9lM2ZiNjYxYWEwODM0NTRmNDA1MDA0NzNiYjY5ZWVkYjg1ZGMxNjBlNzYzMTUwYjlhMmM1NjdjN2U5ZmY1NjBjZTAyOGE5ZjgzMzEyM2I2MThhNmVhNzQyZTMxMTEzOGI1OTE5MTBlNzk1NjE0YTYyOTAyOWU4NmUxODA2NjBmMwotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm5lZ290aWF0b3JAbnBtOl4wLjYuMyI6Ci0gIHZlcnNpb246IDAuNi4zCi0gIHJlc29sdXRpb246ICJuZWdvdGlhdG9yQG5wbTowLjYuMyIKLSAgY2hlY2tzdW06IDEwYzAvM2VjOWZkNDEzZTdiZjA3MWM5MzdhZTYwZDU3MmJjNjcxNTUyNjIwNjhlZDUyMmNmNGIzYmU1ZWRiZTZkZGY2N2QwOTVlYzAzYTNhMTRlYmY4ZmM4ZTk1ZjhlMWQ2MWJlNDg2OWRiMGRiYjBkZTY5NmY2YjgzNzM1OGJkNDNmYzIKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJub2RlLWd5cEBucG06bGF0ZXN0IjoKLSAgdmVyc2lvbjogMTAuMC4xCi0gIHJlc29sdXRpb246ICJub2RlLWd5cEBucG06MTAuMC4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgZW52LXBhdGhzOiAibnBtOl4yLjIuMCIKLSAgICBleHBvbmVudGlhbC1iYWNrb2ZmOiAibnBtOl4zLjEuMSIKLSAgICBnbG9iOiAibnBtOl4xMC4zLjEwIgotICAgIGdyYWNlZnVsLWZzOiAibnBtOl40LjIuNiIKLSAgICBtYWtlLWZldGNoLWhhcHBlbjogIm5wbTpeMTMuMC4wIgotICAgIG5vcHQ6ICJucG06XjcuMC4wIgotICAgIHByb2MtbG9nOiAibnBtOl4zLjAuMCIKLSAgICBzZW12ZXI6ICJucG06XjcuMy41IgotICAgIHRhcjogIm5wbTpeNi4xLjIiCi0gICAgd2hpY2g6ICJucG06XjQuMC4wIgotICBiaW46Ci0gICAgbm9kZS1neXA6IGJpbi9ub2RlLWd5cC5qcwotICBjaGVja3N1bTogMTBjMC9hYmRkZmZmN2Q4NzMzMTJlNGVkNGE1ZmI3NWNlODkzYTVjNGZiNjllN2ZjYjFkZmE3MWMyOGE2YjkyYTdmMWVmNmI2Mjc5MGRmZmIzOTE4MWI1YTgyNzI4YmE4ZjJmMzJkMjI5Y2Y4Y2JlNjY3NjlmZTAyY2VhN2RiNGE1NTVhYQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIm5vcHRAbnBtOl43LjAuMCI6Ci0gIHZlcnNpb246IDcuMi4wCi0gIHJlc29sdXRpb246ICJub3B0QG5wbTo3LjIuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGFiYnJldjogIm5wbTpeMi4wLjAiCi0gIGJpbjoKLSAgICBub3B0OiBiaW4vbm9wdC5qcwotICBjaGVja3N1bTogMTBjMC85YmQ3MTk4ZGY2ZjE2ZWIyOWZmMTY4OTJjNzdiY2Y3ZjBjYzQxZjlmYjVjMjYyODBhYzBkZWYyY2Y4Y2YzMTlmM2I4MjFiM2FmODNlYmEwZTc0Yzg1ODA3Y2M0MzBhMTZlZmUwZGI1OGZlNmFlMWY0MWU2OTUxOWY1ODViNmFmZgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInAtbWFwQG5wbTpeNC4wLjAiOgotICB2ZXJzaW9uOiA0LjAuMAotICByZXNvbHV0aW9uOiAicC1tYXBAbnBtOjQuMC4wIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYWdncmVnYXRlLWVycm9yOiAibnBtOl4zLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvNTkyYzA1YmQ2MjYyYzQ2NmNlMjY5ZmYxNzJiYjhkZTdjNjk3NWFmY2E5YjUwYzk3NTEzNWI5NzRlOWJkYWFmYmZlODBlNjFhYWFmNWJlNmQxMjAwYmEwOGIzMGVhZDA0Yjg4Y2ZhN2UyNWZmMWUzYjkzYWIyOGM5ZjYyYTJjNzUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJwYXRoLWtleUBucG06XjMuMS4wIjoKLSAgdmVyc2lvbjogMy4xLjEKLSAgcmVzb2x1dGlvbjogInBhdGgta2V5QG5wbTozLjEuMSIKLSAgY2hlY2tzdW06IDEwYzAvNzQ4YzQzZWZkNWE1NjljMDM5ZDdhMDBhMDNiNThlZWNkMWQ3NWYzOTk5ZjVhMjgzMDNkNzVmNTIxMjg4ZGY0ODIzYmMwNTdkODc4NGViNzIzNThiMjg5NWEwNWYyOWEwNzBiYzlmMWYxN2QyODIyNmNjNGU2MjQ5NGNjNThjNGMKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJwYXRoLXNjdXJyeUBucG06XjEuMTAuMSI6Ci0gIHZlcnNpb246IDEuMTAuMQotICByZXNvbHV0aW9uOiAicGF0aC1zY3VycnlAbnBtOjEuMTAuMSIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGxydS1jYWNoZTogIm5wbTpeOS4xLjEgfHwgXjEwLjAuMCIKLSAgICBtaW5pcGFzczogIm5wbTpeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvZTVkYzc4YTczNDhkMjVlZWM2MWFiMTY2MzE3ZTllOWM3YjQ2ODE4YWEyYzJiOTAwNmM1MDdhNmZmNDhjNjcyZDAxMTI5MmQ5NjYyNTI3MjEzZTU1OGY1NjUyY2UwYWZjYzc4ODY2M2EwNjFkOGI1OWFiNDk1NjgxODQwYzBjMWUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJwaWNvY29sb3JzQG5wbTpeMS4wLjAiOgotICB2ZXJzaW9uOiAxLjAuMAotICByZXNvbHV0aW9uOiAicGljb2NvbG9yc0BucG06MS4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzIwYTViMjQ5ZTMzMWMxNDQ3OWQ5NGVjNjgxN2ExODJmZDdhNTY4MGRlYmFlODI3MDU3NDdiMmRiN2VjNTAwMDlhNWY2NjQ4ZDA2MjFjNTYxYjA1NzI3MDNmODRkYmVmMDg1OGFiY2JkNTg1NmQzYzU1MTE0MjZhZmNiMTk2MWY3Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0icG9zdGNzc0BucG06XjguNC4zNSI6Ci0gIHZlcnNpb246IDguNC4zNQotICByZXNvbHV0aW9uOiAicG9zdGNzc0BucG06OC40LjM1IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgbmFub2lkOiAibnBtOl4zLjMuNyIKLSAgICBwaWNvY29sb3JzOiAibnBtOl4xLjAuMCIKLSAgICBzb3VyY2UtbWFwLWpzOiAibnBtOl4xLjAuMiIKLSAgY2hlY2tzdW06IDEwYzAvZThkZDA0ZTQ4MDAxZWI1ODU3YWJjOTQ3NTM2NWJmMDhmNGU1MDhkZGY5YmMwYjg1MjU0NDlhOTVkMTkwZjEwZDAyNWFjZWJjNWI1NmFjMmU5NGIzYzcxNDY3OTBlNGFlNzg5ODliYjk2MzNjYjdlZTIwZDFjYzliN2RjOTA5YjIKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJwcm9jLWxvZ0BucG06XjMuMC4wIjoKLSAgdmVyc2lvbjogMy4wLjAKLSAgcmVzb2x1dGlvbjogInByb2MtbG9nQG5wbTozLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvZjY2NDMwZTRmZjk0N2RiYjk5NjA1OGY2ZmQyMmRlMmM2NjYxMmFlMWE4OWIwOTc3NDRlMTdmYjE4YTRlOGU3YTg2ZGI5OWVkYTUyY2NmMTVlNTNmMDBiNjNmNGVjMGIwOTExNTgxZmYyYWFjMDM1NWI2MjVjOGVhYzUwOWIwZGMKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJwcm9jZXNzQG5wbTpeMC4xMS4xMCI6Ci0gIHZlcnNpb246IDAuMTEuMTAKLSAgcmVzb2x1dGlvbjogInByb2Nlc3NAbnBtOjAuMTEuMTAiCi0gIGNoZWNrc3VtOiAxMGMwLzQwYzNjZTRiN2U2ZDRiOGMzMzU1NDc5ZGY3N2FlZWQ0NmY4MWIyNzk4MThjY2RjNTAwMTI0ZTZhNWFiODgyYzBjYzgxZmY3ZWExNjM4NDg3M2E5NWE3NGM0NTcwYjAxYjEyMGYyODdhYmJkZDRjODc3OTMxNDYwZWNhNjA4NGIzCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0icHJvbWlzZS1yZXRyeUBucG06XjIuMC4xIjoKLSAgdmVyc2lvbjogMi4wLjEKLSAgcmVzb2x1dGlvbjogInByb21pc2UtcmV0cnlAbnBtOjIuMC4xIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgZXJyLWNvZGU6ICJucG06XjIuMC4yIgotICAgIHJldHJ5OiAibnBtOl4wLjEyLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzljNzA0NWExYTI5MjgwOTRiNWI5YjE1MzM2ZGNkMmE3YjFjMDUyZjY3NDU1MGRmNjNjYzNmMzZjZDQ0MDI4ZTUwODA0NDgxNzViNmY2Y2EzMmI2NDJkZTgxMTUwZjVlN2IxYTk4YjcyOGYxNWNiMDY5ZjJkZDYwYWMyNjE2Yjk2Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0icmVhZGFibGUtc3RyZWFtQG5wbTpeNC41LjIiOgotICB2ZXJzaW9uOiA0LjUuMgotICByZXNvbHV0aW9uOiAicmVhZGFibGUtc3RyZWFtQG5wbTo0LjUuMiIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGFib3J0LWNvbnRyb2xsZXI6ICJucG06XjMuMC4wIgotICAgIGJ1ZmZlcjogIm5wbTpeNi4wLjMiCi0gICAgZXZlbnRzOiAibnBtOl4zLjMuMCIKLSAgICBwcm9jZXNzOiAibnBtOl4wLjExLjEwIgotICAgIHN0cmluZ19kZWNvZGVyOiAibnBtOl4xLjMuMCIKLSAgY2hlY2tzdW06IDEwYzAvYTJjODBlMGU1M2FhYmQ5MWQ3ZGYwMzMwOTI5ZTMyZDBhNzMyMTlmOTQ3N2RiYmIxODQ3MmY2ZmRkNmExMWE2OTlmYzVkMTcyYTFiZWZmOThkNTBlYWU0ZjE0OTZjOTUwZmZhODViN2NjMmM0YzE5Njk2M2YyODlhNWYzOTI3NWQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJyZXRyeUBucG06XjAuMTIuMCI6Ci0gIHZlcnNpb246IDAuMTIuMAotICByZXNvbHV0aW9uOiAicmV0cnlAbnBtOjAuMTIuMCIKLSAgY2hlY2tzdW06IDEwYzAvNTk5MzNlODUwMTcyN2JhMTNhZDczZWY0YTA0ZDUyODBiMzcxN2ZkNjUwNDA4NDYwYzk4NzM5MmVmZTlkN2JlMjA0MDc3OGVkOGViZTkzM2M1Y2JkNjNkYTNkY2MzNzkxOWMxNDFlZjhhZjBhNTRhNmU0ZmNhNWEyYWYxNzdiZmUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJyb2xsdXBAbnBtOl40LjIuMCI6Ci0gIHZlcnNpb246IDQuMTIuMAotICByZXNvbHV0aW9uOiAicm9sbHVwQG5wbTo0LjEyLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICAiQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm0tZWFiaSI6ICJucG06NC4xMi4wIgotICAgICJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybTY0IjogIm5wbTo0LjEyLjAiCi0gICAgIkByb2xsdXAvcm9sbHVwLWRhcndpbi1hcm02NCI6ICJucG06NC4xMi4wIgotICAgICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0IjogIm5wbTo0LjEyLjAiCi0gICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybS1nbnVlYWJpaGYiOiAibnBtOjQuMTIuMCIKLSAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtZ251IjogIm5wbTo0LjEyLjAiCi0gICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LW11c2wiOiAibnBtOjQuMTIuMCIKLSAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtcmlzY3Y2NC1nbnUiOiAibnBtOjQuMTIuMCIKLSAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudSI6ICJucG06NC4xMi4wIgotICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC14NjQtbXVzbCI6ICJucG06NC4xMi4wIgotICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi1hcm02NC1tc3ZjIjogIm5wbTo0LjEyLjAiCi0gICAgIkByb2xsdXAvcm9sbHVwLXdpbjMyLWlhMzItbXN2YyI6ICJucG06NC4xMi4wIgotICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi14NjQtbXN2YyI6ICJucG06NC4xMi4wIgotICAgICJAdHlwZXMvZXN0cmVlIjogIm5wbToxLjAuNSIKLSAgICBmc2V2ZW50czogIm5wbTp+Mi4zLjIiCi0gIGRlcGVuZGVuY2llc01ldGE6Ci0gICAgIkByb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtLWVhYmkiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm02NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4tYXJtNjQiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQHJvbGx1cC9yb2xsdXAtZGFyd2luLXg2NCI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmIjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LWdudSI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsIjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXJpc2N2NjQtZ251IjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1nbnUiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2wiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2YyI6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi1pYTMyLW1zdmMiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmMiOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICBmc2V2ZW50czoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gIGJpbjoKLSAgICByb2xsdXA6IGRpc3QvYmluL3JvbGx1cAotICBjaGVja3N1bTogMTBjMC8xNjUwMTY4MjMxYWU4ZTJiZDZmYjRkODJjYzIzMmU1M2I1YzBmZTY3ODk1MTg4ZmE2ODMzNzBjOWJkM2YxZmViYWEyOGU0NWM2YjEwMGNlYTMzM2U1NGY4ZjVmYWU2ZjRkMGVlYTdkODYyNTZlYzJjYzNlMzgyMTJjNTU3OTZkNgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInNhZmUtYnVmZmVyQG5wbTp+NS4yLjAiOgotICB2ZXJzaW9uOiA1LjIuMQotICByZXNvbHV0aW9uOiAic2FmZS1idWZmZXJAbnBtOjUuMi4xIgotICBjaGVja3N1bTogMTBjMC82NTAxOTE0MjM3YzBhODZlOTY3NWQ0ZTUxZDg5Y2EzYzIxZmZkNmEzMTY0MmVmZWJhMjVhZDY1NzIwYmNlNjkyMWM5ZTdlOTc0ZTViZTkxYTc4NmIyNWFhMDU4YjUzMDMyODVkM2MxNWRiYWJmOTgzYTkxOWY1ZjYzMGQzNDlmMwotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInNhZmVyLWJ1ZmZlckBucG06Pj0gMi4xLjIgPCAzLjAuMCI6Ci0gIHZlcnNpb246IDIuMS4yCi0gIHJlc29sdXRpb246ICJzYWZlci1idWZmZXJAbnBtOjIuMS4yIgotICBjaGVja3N1bTogMTBjMC83ZTNjOGIyZTg4YTE4NDFjOTY3MTA5NGJiYWVlYmQ5NDQ0ODExMWRkOTBhODFhMWY2MDZmM2Y2NzcwOGE2ZWM1Nzc2M2IzYjQ3ZjA2ZGEwOWZjNjA1NDE5M2UwZTY3MDllNzczMjU0MTVkYzg0MjJiMDQ0OTdhODA3MGZhMDJkNAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInNlbXZlckBucG06XjcuMy41IjoKLSAgdmVyc2lvbjogNy42LjAKLSAgcmVzb2x1dGlvbjogInNlbXZlckBucG06Ny42LjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICBscnUtY2FjaGU6ICJucG06XjYuMC4wIgotICBiaW46Ci0gICAgc2VtdmVyOiBiaW4vc2VtdmVyLmpzCi0gIGNoZWNrc3VtOiAxMGMwL2ZiZmU3MTcwOTRhY2UwYWE4ZDYzMzJkN2VmNWNlNzI3MjU5ODE1YmQ4ZDg4MTU3MDA4NTNmNGZhZjIzYWFjYmQ3MTkyNTIyZjBkYzVhZjZkZjUyZWY0ZmE4NWEzNTVlYmQyZjVkMzlmNTU0YmQwMjgyMDBkNmNmNDgxYWI5YjUzCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ic2hlYmFuZy1jb21tYW5kQG5wbTpeMi4wLjAiOgotICB2ZXJzaW9uOiAyLjAuMAotICByZXNvbHV0aW9uOiAic2hlYmFuZy1jb21tYW5kQG5wbToyLjAuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIHNoZWJhbmctcmVnZXg6ICJucG06XjMuMC4wIgotICBjaGVja3N1bTogMTBjMC9hNDE2OTJlN2Q4OWE1NTNlZjIxZDMyNGE1Y2NlYjVmNjg2ZDFmM2MwNDA3NTljNTBhYWI2OTY4ODYzNDY4OGM1YzMyN2YyNmYzZWNmNzAwMWViZmQ3OGMwMWYzYzdjMGExMWE3YzhiZmQwYThiYzlmNjI0MGQ0ZjQwYjIyNGU0ZQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInNoZWJhbmctcmVnZXhAbnBtOl4zLjAuMCI6Ci0gIHZlcnNpb246IDMuMC4wCi0gIHJlc29sdXRpb246ICJzaGViYW5nLXJlZ2V4QG5wbTozLjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvMWRiZWQwNzI2ZGQwZTExNTJhOTI2OTZjNzZjN2YwNjA4NGViMzJhOTBmMDUyOGQxMWFjZDc2NDA0M2FhY2Y3Njk5NGIyZmIzMGFhMTI5MWEyMWJkMDE5ZDY2OTkxNjRkMDQ4Mjg2MzA5YTI3ODg1NWVlN2JlYzA2Y2Y2ZmI2OTAKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJzaWduYWwtZXhpdEBucG06XjQuMC4xIjoKLSAgdmVyc2lvbjogNC4xLjAKLSAgcmVzb2x1dGlvbjogInNpZ25hbC1leGl0QG5wbTo0LjEuMCIKLSAgY2hlY2tzdW06IDEwYzAvNDE2MDJkY2U1NDBlNDZkNTk5ZWRiYTlkOTg2MDE5MzM5OGQxMzVmN2ZmNzJjYWI2MjlkYjUxNzE1MTZjZmFlNjI4ZDIxZTdiZmNjZGUxYmJmZGYxMWM0ODcyNmJjMmE2ZDFhOGZiODcwMTEyNTg1MmZiZmRhN2NmMTljNmFhODMKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJzbWFydC1idWZmZXJAbnBtOl40LjIuMCI6Ci0gIHZlcnNpb246IDQuMi4wCi0gIHJlc29sdXRpb246ICJzbWFydC1idWZmZXJAbnBtOjQuMi4wIgotICBjaGVja3N1bTogMTBjMC9hMTY3NzUzMjNlMTQwNGRkNDNmYWJhZmU3NDYwYmUxM2E0NzFlMDIxNjM3YmM3ODg5NDY4ZWI0NWNlNmE2YjIwNzI2MWY0NTRlNGU1MzBhMTk1MDBjYzk2MmM0Y2M1MzQ4NTgzNTIwODQzYjM2M2Y0MTkzY2VlNWMwMGUxZTUzOQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInNvY2tzLXByb3h5LWFnZW50QG5wbTpeOC4wLjEiOgotICB2ZXJzaW9uOiA4LjAuMgotICByZXNvbHV0aW9uOiAic29ja3MtcHJveHktYWdlbnRAbnBtOjguMC4yIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYWdlbnQtYmFzZTogIm5wbTpeNy4wLjIiCi0gICAgZGVidWc6ICJucG06XjQuMy40IgotICAgIHNvY2tzOiAibnBtOl4yLjcuMSIKLSAgY2hlY2tzdW06IDEwYzAvYTg0MjQwMmZjOWI4ODQ4YTMxMzY3ZjI4MTFjYTNjZDE0YzQxMDY1ODhiMzlhMDkwMWNkN2E2OTAyOTk5OGFkZmM2NDU2YjAyMDM2MTdjMThlZDA5MDU0MmFkMGMyNGVlNGU5ZDRjNzVhMGM0Yjc1MDcxZTIxNDIyN2MxNzdlYjcKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJzb2Nrc0BucG06XjIuNy4xIjoKLSAgdmVyc2lvbjogMi44LjEKLSAgcmVzb2x1dGlvbjogInNvY2tzQG5wbToyLjguMSIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGlwLWFkZHJlc3M6ICJucG06XjkuMC41IgotICAgIHNtYXJ0LWJ1ZmZlcjogIm5wbTpeNC4yLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2FjNzdiNTE1YzI2MDQ3M2NjN2M0NDUyZjA5YjIwOTM5ZTIyNTEwY2UzYWU0ODM4NWM1MTZkMWQ1Nzg0Mzc0ZDVjYzc1YmUzY2IxOGZmNjZjYzk4NWE3ZjRmMmVmOGZlZjg0ZTk4NGM1ZWM3MGFhZDU4MzU1ZWQ1OTI0MWY0MGE4Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ic291cmNlLW1hcC1qc0BucG06XjEuMC4yIjoKLSAgdmVyc2lvbjogMS4wLjIKLSAgcmVzb2x1dGlvbjogInNvdXJjZS1tYXAtanNAbnBtOjEuMC4yIgotICBjaGVja3N1bTogMTBjMC8zMmYyZGZkMWU5YjcxNjhmOWE5NzE1ZWIxYjRlMjE5MDU4NTBmM2I1MGNmMDJjZjQ3NmU0N2U0ZWViZThlNmI3NjJiNjNhNjQzNTc4OTZhYTI5YjM3ZTI0OTIyYjQyODJkZjBmNDkyZTBkMmFjZTU3MmI0M2QxNTUyNTk3NmZmOAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInNwcmludGYtanNAbnBtOl4xLjEuMyI6Ci0gIHZlcnNpb246IDEuMS4zCi0gIHJlc29sdXRpb246ICJzcHJpbnRmLWpzQG5wbToxLjEuMyIKLSAgY2hlY2tzdW06IDEwYzAvMDkyNzBkYzRmMzBkNDc5ZTY2NmFlZTgyMGVhY2Q5ZTQ2NDIxNWNkZmY1Mzg0OGI0NDM5NjQyMDJiZjQwNTE0OTA1MzhlNWRkMWI0MmUxYTY1Y2Y3Mjk2OTE2Y2ExNzY0MGFlYmY2M2RhZTk4MTI3NDljNzU0MmVlNWYyODhkZWMKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJzc3JpQG5wbTpeMTAuMC4wIjoKLSAgdmVyc2lvbjogMTAuMC41Ci0gIHJlc29sdXRpb246ICJzc3JpQG5wbToxMC4wLjUiCi0gIGRlcGVuZGVuY2llczoKLSAgICBtaW5pcGFzczogIm5wbTpeNy4wLjMiCi0gIGNoZWNrc3VtOiAxMGMwL2IwOTFmMmFlOTI0NzQxODNjN2FjNWVkM2Y5ODExNDU3ZTFkZjIzZGY3YTdlNzBjOTQ3NmVhYTlhMGM0YTBjOGZjMTkwZmI0NWFjZWZiZjAyM2NhOWVlODY0ZGQ2NzU0MjM3YTY5N2RjNTJhMGZiMTgyYWZlNjVkOGU3NzQ0M2Q4Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ic3RyaW5nLXdpZHRoLWNqc0BucG06c3RyaW5nLXdpZHRoQF40LjIuMCwgc3RyaW5nLXdpZHRoQG5wbTpeNC4xLjAiOgotICB2ZXJzaW9uOiA0LjIuMwotICByZXNvbHV0aW9uOiAic3RyaW5nLXdpZHRoQG5wbTo0LjIuMyIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGVtb2ppLXJlZ2V4OiAibnBtOl44LjAuMCIKLSAgICBpcy1mdWxsd2lkdGgtY29kZS1wb2ludDogIm5wbTpeMy4wLjAiCi0gICAgc3RyaXAtYW5zaTogIm5wbTpeNi4wLjEiCi0gIGNoZWNrc3VtOiAxMGMwLzFlNTI1ZTkyZTVlYWUwYWZkNzQ1NDA4NmVlZDljODE4ZWU4NDM3NGJiODAzMjhmYzQxMjE3YWU3MmZmNWYwNjVlZjFjOWQ3ZjcyZGE0MWRlNDBjNzVmYThiYjNkZWU2M2Q5MjM3M2ZkNDkyYzg0MjYwYTU1MmM2MzYzOTJhNDdiCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0ic3RyaW5nLXdpZHRoQG5wbTpeNS4wLjEsIHN0cmluZy13aWR0aEBucG06XjUuMS4yIjoKLSAgdmVyc2lvbjogNS4xLjIKLSAgcmVzb2x1dGlvbjogInN0cmluZy13aWR0aEBucG06NS4xLjIiCi0gIGRlcGVuZGVuY2llczoKLSAgICBlYXN0YXNpYW53aWR0aDogIm5wbTpeMC4yLjAiCi0gICAgZW1vamktcmVnZXg6ICJucG06XjkuMi4yIgotICAgIHN0cmlwLWFuc2k6ICJucG06XjcuMC4xIgotICBjaGVja3N1bTogMTBjMC9hYjljNDI2NDQ0M2QzNWI4YjkyM2NiZGQ1MTNhMDg5YTYwZGUzMzkyMTZkM2IwZWQzYmUzYmE1N2Q2ODgwZTFhMTkyYjcwYWUxNzIyNWY3NjRkN2FkYmY1OTk0ZTliYjhkZjI1M2E5NDQ3MzZjMTVhMDI0MGVmZjU1M2M2NzhjYQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInN0cmluZ19kZWNvZGVyQG5wbTpeMS4zLjAiOgotICB2ZXJzaW9uOiAxLjMuMAotICByZXNvbHV0aW9uOiAic3RyaW5nX2RlY29kZXJAbnBtOjEuMy4wIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgc2FmZS1idWZmZXI6ICJucG06fjUuMi4wIgotICBjaGVja3N1bTogMTBjMC84MTA2MTRkZGIwMzBlMjcxY2Q1OTE5MzVkY2Q1OTU2YjI0MTBkZDA3OWQ2NGZmOTJhMTg0NGQ2Yjc1ODhiZjk5MmIzZTFiNjliMGY0ZDM0YTNlMDZlMGJkNzMwNDZhYzY0NmI1MjY0YzE5ODdiMjBkMDYwMWY4MWVmMzVkNzMxZAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInN0cmlwLWFuc2ktY2pzQG5wbTpzdHJpcC1hbnNpQF42LjAuMSwgc3RyaXAtYW5zaUBucG06XjYuMC4wLCBzdHJpcC1hbnNpQG5wbTpeNi4wLjEiOgotICB2ZXJzaW9uOiA2LjAuMQotICByZXNvbHV0aW9uOiAic3RyaXAtYW5zaUBucG06Ni4wLjEiCi0gIGRlcGVuZGVuY2llczoKLSAgICBhbnNpLXJlZ2V4OiAibnBtOl41LjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvMWFlNWYyMTJhMTI2ZmU1YjE2NzcwN2Y3MTY5NDI0OTBlMzkzMzA4NWE1ZmY2YzAwOGFiOTdhYjJmMjcyYzgwMjVkM2FhMjE4YjdiZDZhYjI1NzI5Y2EyMGNjODFjZGRiMjUyMTAyZjg3NTFlMTM0ODJhNTE5OWU4NzM2ODA5NTIKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJzdHJpcC1hbnNpQG5wbTpeNy4wLjEiOgotICB2ZXJzaW9uOiA3LjEuMAotICByZXNvbHV0aW9uOiAic3RyaXAtYW5zaUBucG06Ny4xLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICBhbnNpLXJlZ2V4OiAibnBtOl42LjAuMSIKLSAgY2hlY2tzdW06IDEwYzAvYTE5OGMzNzYyZTg4MzI1MDUzMjhjYmY5ZThjODM4MWRlMTRhNGZhNTBhNGY5YjIxNjAxMzgxNThlYTg4YzBmNTU0OWZiNTBjYjEzYzY1MWMzMDg4ZjQ3ZTYzYTEwOGIzNDYyMmVjMThjMDQ5OWI2YzhjM2E1ZGRmNmIzMDVhYzQKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJ0YXJAbnBtOl42LjEuMTEsIHRhckBucG06XjYuMS4yIjoKLSAgdmVyc2lvbjogNi4yLjAKLSAgcmVzb2x1dGlvbjogInRhckBucG06Ni4yLjAiCi0gIGRlcGVuZGVuY2llczoKLSAgICBjaG93bnI6ICJucG06XjIuMC4wIgotICAgIGZzLW1pbmlwYXNzOiAibnBtOl4yLjAuMCIKLSAgICBtaW5pcGFzczogIm5wbTpeNS4wLjAiCi0gICAgbWluaXpsaWI6ICJucG06XjIuMS4xIgotICAgIG1rZGlycDogIm5wbTpeMS4wLjMiCi0gICAgeWFsbGlzdDogIm5wbTpeNC4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwLzAyY2EwNjRhMWE2YjQ1MjFmZWY4OGMwN2QzODlhYzA5MzY3MzAwOTFmOGMwMmQzMGVhNjBkNDcyZTAzNzg3NjhlODcwNzY5YWI5ZTk4NmQ4NzgwN2JmZWU1NjU0MzU5Y2YyOWZmNDM3Mjc0NmNjNjVlMzBjYmRkYzM1MjY2MGQ4Ci0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0idW5pcXVlLWZpbGVuYW1lQG5wbTpeMy4wLjAiOgotICB2ZXJzaW9uOiAzLjAuMAotICByZXNvbHV0aW9uOiAidW5pcXVlLWZpbGVuYW1lQG5wbTozLjAuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIHVuaXF1ZS1zbHVnOiAibnBtOl40LjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvNjM2M2U0MGIyZmE3NThlYjVlYzVlMjFiM2M3ZmI4M2U1ZGE4ZGNmYmQ4NjZjYzBjMTk5ZDU1MzRjNDJmMDNiOWVhOWFiMDY5NzY5Y2MzODhlMWQ3YWI5M2I0ZWVlZjI4ZWY1MDZhYjVmMThkOTEwZWYyOTYxNzcxNTEwMTg4NGYKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJ1bmlxdWUtc2x1Z0BucG06XjQuMC4wIjoKLSAgdmVyc2lvbjogNC4wLjAKLSAgcmVzb2x1dGlvbjogInVuaXF1ZS1zbHVnQG5wbTo0LjAuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGltdXJtdXJoYXNoOiAibnBtOl4wLjEuNCIKLSAgY2hlY2tzdW06IDEwYzAvY2I4MTFkOWQ1NGViNTgyMWI4MWIxODIwNTc1MGJlODRjYjAxNWMyMGE0YTQ0MjgwNzk0ZTkxNWY1YTBhNzAyMjNjZTM5MDY2NzgxYTM1NGU4NzJkZjM1NzJlODE1NWMyMjhmNDNmZjBjY2U5NGM3Y2JmNGRhMmNjN2NiZGQ2MzUKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCi0KLSJ1dWlkQG5wbTpeOS4wLjEiOgotICB2ZXJzaW9uOiA5LjAuMQotICByZXNvbHV0aW9uOiAidXVpZEBucG06OS4wLjEiCi0gIGJpbjoKLSAgICB1dWlkOiBkaXN0L2Jpbi91dWlkCi0gIGNoZWNrc3VtOiAxMGMwLzE2MDdkZDMyYWM3ZmMyMmYyZDhmNzcwNTFlNmE2NDg0NWM5YmNlNWNkM2RkOGFhMDA3MGMwNzRlYzczZTY2NmExZjYzYzdiNGUwZjRiZjJiYzhiOWQ1OWRjODVhMTVlMTc4MDc0NDZkOWQyYjE3Yzg0ODVmYmMyMTQ3YjI3ZjliCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0idml0ZUBucG06XjUuMS40IjoKLSAgdmVyc2lvbjogNS4xLjQKLSAgcmVzb2x1dGlvbjogInZpdGVAbnBtOjUuMS40IgotICBkZXBlbmRlbmNpZXM6Ci0gICAgZXNidWlsZDogIm5wbTpeMC4xOS4zIgotICAgIGZzZXZlbnRzOiAibnBtOn4yLjMuMyIKLSAgICBwb3N0Y3NzOiAibnBtOl44LjQuMzUiCi0gICAgcm9sbHVwOiAibnBtOl40LjIuMCIKLSAgcGVlckRlcGVuZGVuY2llczoKLSAgICAiQHR5cGVzL25vZGUiOiBeMTguMC4wIHx8ID49MjAuMC4wCi0gICAgbGVzczogIioiCi0gICAgbGlnaHRuaW5nY3NzOiBeMS4yMS4wCi0gICAgc2FzczogIioiCi0gICAgc3R5bHVzOiAiKiIKLSAgICBzdWdhcnNzOiAiKiIKLSAgICB0ZXJzZXI6IF41LjQuMAotICBkZXBlbmRlbmNpZXNNZXRhOgotICAgIGZzZXZlbnRzOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgcGVlckRlcGVuZGVuY2llc01ldGE6Ci0gICAgIkB0eXBlcy9ub2RlIjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgbGVzczoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgbGlnaHRuaW5nY3NzOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICBzYXNzOgotICAgICAgb3B0aW9uYWw6IHRydWUKLSAgICBzdHlsdXM6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgIHN1Z2Fyc3M6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICAgIHRlcnNlcjoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gIGJpbjoKLSAgICB2aXRlOiBiaW4vdml0ZS5qcwotICBjaGVja3N1bTogMTBjMC84ZjA0YzhiZWQzM2YyNjZiZGUyN2Y0MzI0MTI0NTZhM2I4OTNiNTFmZTE4NTdmMGI4Y2QyNTkxMDBiMzc2YzEzOTNhNzkyN2RiMWRkNjM0NGE0Mzc2YmFlZDcyZWQxNzllYzViMDQyOGFlZjJhZTg1MDhmMWYyOGY5NWFjYjkwOAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIndoaWNoQG5wbTpeMi4wLjEiOgotICB2ZXJzaW9uOiAyLjAuMgotICByZXNvbHV0aW9uOiAid2hpY2hAbnBtOjIuMC4yIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgaXNleGU6ICJucG06XjIuMC4wIgotICBiaW46Ci0gICAgbm9kZS13aGljaDogLi9iaW4vbm9kZS13aGljaAotICBjaGVja3N1bTogMTBjMC82NjUyMjg3MmE3NjhiNjBjMmE2NWE1N2U4YWQxODRlNTM3MmY1YjZhOWNhNmQ1ZjAzM2Q0YjBkYzk4YWZmNjM5OTU2NTVhNzUwM2I5YzBhMjU5ODkzNmY1MzIxMjBlODFkZDhjYzE1NWUyZTkyZWQ2NjJhMmI5Mzc3Y2M0Mzc0ZgotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIndoaWNoQG5wbTpeNC4wLjAiOgotICB2ZXJzaW9uOiA0LjAuMAotICByZXNvbHV0aW9uOiAid2hpY2hAbnBtOjQuMC4wIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgaXNleGU6ICJucG06XjMuMS4xIgotICBiaW46Ci0gICAgbm9kZS13aGljaDogYmluL3doaWNoLmpzCi0gIGNoZWNrc3VtOiAxMGMwLzQ0OWZhNWM0NGVkMTIwY2NlY2ZlMThjNDMzMjk2YTQ5NzhhNzU4M2JmMjM5MWM1MGFiY2UxM2Y3Njg3OGQyNDc2ZGVmZGUwNGQwZjc5ZGI4MTY1YmRmNDMyODUzYzFmODM4OWQwNDg1Y2E2ZThlYmNlM2JiY2RlZDUxM2Q1ZTZhCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0id3JhcC1hbnNpLWNqc0BucG06d3JhcC1hbnNpQF43LjAuMCI6Ci0gIHZlcnNpb246IDcuMC4wCi0gIHJlc29sdXRpb246ICJ3cmFwLWFuc2lAbnBtOjcuMC4wIgotICBkZXBlbmRlbmNpZXM6Ci0gICAgYW5zaS1zdHlsZXM6ICJucG06XjQuMC4wIgotICAgIHN0cmluZy13aWR0aDogIm5wbTpeNC4xLjAiCi0gICAgc3RyaXAtYW5zaTogIm5wbTpeNi4wLjAiCi0gIGNoZWNrc3VtOiAxMGMwL2QxNWZjMTJjMTFlNGNiYzQwNDRhNTUyMTI5ZWJjNzVlZTNmNTdhYTljMTk1ODM3M2E0ZGIwMjkyZDcyMjgyZjU0MzczYjUzNjEwMzk4N2E0YTc1OTRkYjFlZjZhNGYxMGFjZjkyOTc4Zjc5Yjk4YzQ5MzA2YTRiNThjNzdkNGRhCi0gIGxhbmd1YWdlTmFtZTogbm9kZQotICBsaW5rVHlwZTogaGFyZAotCi0id3JhcC1hbnNpQG5wbTpeOC4xLjAiOgotICB2ZXJzaW9uOiA4LjEuMAotICByZXNvbHV0aW9uOiAid3JhcC1hbnNpQG5wbTo4LjEuMCIKLSAgZGVwZW5kZW5jaWVzOgotICAgIGFuc2ktc3R5bGVzOiAibnBtOl42LjEuMCIKLSAgICBzdHJpbmctd2lkdGg6ICJucG06XjUuMC4xIgotICAgIHN0cmlwLWFuc2k6ICJucG06XjcuMC4xIgotICBjaGVja3N1bTogMTBjMC8xMzhmZjU4YTQxZDJmODc3ZWFlODdlMzI4MmMwNjMwZmMyNzg5MDEyZmMxYWY0ZDZiZDYyNmVlYjlhMmY5YTY1Y2E5MjAwNWU2ZTY5YTc1YzdiODVhNjg0NzlmZTc0NDNjN2RiZTFlYjhmYmFhNjgxYTQ0OTEzNjRiN2M1NWM2MAotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotIndzQG5wbTpeOC4xNi4wIjoKLSAgdmVyc2lvbjogOC4xNi4wCi0gIHJlc29sdXRpb246ICJ3c0BucG06OC4xNi4wIgotICBwZWVyRGVwZW5kZW5jaWVzOgotICAgIGJ1ZmZlcnV0aWw6IF40LjAuMQotICAgIHV0Zi04LXZhbGlkYXRlOiAiPj01LjAuMiIKLSAgcGVlckRlcGVuZGVuY2llc01ldGE6Ci0gICAgYnVmZmVydXRpbDoKLSAgICAgIG9wdGlvbmFsOiB0cnVlCi0gICAgdXRmLTgtdmFsaWRhdGU6Ci0gICAgICBvcHRpb25hbDogdHJ1ZQotICBjaGVja3N1bTogMTBjMC9hNzc4M2JiNDIxYzY0OGIxZTYyMmI0MjM0MDljYjJhNThhYzU4Mzk1MjFkMmY2ODllODRiYzlkYzQxZDU5Mzc5YzY5MmRkNDA1YjE1YTk5N2VhMWQ0YzBjMmU1MzE0YWQ3MDczMzJkMGM1NThmMTUyMzJkMmJjMDdjMGI0NjE4YQotICBsYW5ndWFnZU5hbWU6IG5vZGUKLSAgbGlua1R5cGU6IGhhcmQKLQotInlhbGxpc3RAbnBtOl40LjAuMCI6Ci0gIHZlcnNpb246IDQuMC4wCi0gIHJlc29sdXRpb246ICJ5YWxsaXN0QG5wbTo0LjAuMCIKLSAgY2hlY2tzdW06IDEwYzAvMjI4NmI1ZThkYmZlMjIyMDRhYjY2ZTJlZjVjYzliYmIxZTU1ZGZjODczYmJlMGQ1NjhhYTk0M2ViMjU1ZDEzMTg5MGRmZDViZjI0MzYzNzI3M2QzMTExOWI4NzBmNDljMThmY2RlMmM2ZmZiYjdhN2EwOTJiODcwZGM5MDYyNWEKLSAgbGFuZ3VhZ2VOYW1lOiBub2RlCi0gIGxpbmtUeXBlOiBoYXJkCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9iYXNpYy1ncmVtbGluLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvYmFzaWMtZ3JlbWxpbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThhNWMzMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9iYXNpYy1ncmVtbGluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1jb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpOwotY29uc3QgdHJhdmVyc2FsID0gZ3JlbWxpbi5wcm9jZXNzLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Ci1jb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKLQotY29uc3Qgc2VydmVyVXJsID0gcHJvY2Vzcy5lbnYuR1JFTUxJTl9TRVJWRVJfVVJMIHx8ICd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nOwotY29uc3QgdmVydGV4TGFiZWwgPSBwcm9jZXNzLmVudi5WRVJURVhfTEFCRUwgfHwgJ3BlcnNvbic7Ci0KLWFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7Ci0gICAgY29uc3QgZGMgPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJVcmwpOwotICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGRjKTsKLQotICAgIC8vIEJhc2ljIEdyZW1saW46IGFkZGluZyBhbmQgcmV0cmlldmluZyBkYXRhCi0gICAgY29uc3QgdjEgPSBhd2FpdCBnLmFkZFYodmVydGV4TGFiZWwpLnByb3BlcnR5KCduYW1lJywnbWFya28nKS5uZXh0KCk7Ci0gICAgY29uc3QgdjIgPSBhd2FpdCBnLmFkZFYodmVydGV4TGFiZWwpLnByb3BlcnR5KCduYW1lJywnc3RlcGhlbicpLm5leHQoKTsKLSAgICBjb25zdCB2MyA9IGF3YWl0IGcuYWRkVih2ZXJ0ZXhMYWJlbCkucHJvcGVydHkoJ25hbWUnLCd2YWRhcycpLm5leHQoKTsKLQotICAgIC8vIEJlIHN1cmUgdG8gdXNlIGEgdGVybWluYXRpbmcgc3RlcCBsaWtlIG5leHQoKSBvciBpdGVyYXRlKCkgc28gdGhhdCB0aGUgdHJhdmVyc2FsICJleGVjdXRlcyIKLSAgICAvLyBJdGVyYXRlKCkgZG9lcyBub3QgcmV0dXJuIGFueSBkYXRhIGFuZCBpcyB1c2VkIHRvIGp1c3QgZ2VuZXJhdGUgc2lkZS1lZmZlY3RzIChpLmUuIHdyaXRlIGRhdGEgdG8gdGhlIGRhdGFiYXNlKQotICAgIGF3YWl0IGcuVih2MS52YWx1ZSkuYWRkRSgna25vd3MnKS50byh2Mi52YWx1ZSkucHJvcGVydHkoJ3dlaWdodCcsMC43NSkuaXRlcmF0ZSgpOwotICAgIGF3YWl0IGcuVih2MS52YWx1ZSkuYWRkRSgna25vd3MnKS50byh2My52YWx1ZSkucHJvcGVydHkoJ3dlaWdodCcsMC43NSkuaXRlcmF0ZSgpOwotCi0gICAgLy8gUmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgIm1hcmtvIiB2ZXJ0ZXgKLSAgICBjb25zdCBtYXJrbyA9IGF3YWl0IGcuVigpLmhhcyh2ZXJ0ZXhMYWJlbCwnbmFtZScsJ21hcmtvJykudmFsdWVzKCduYW1lJykudG9MaXN0KCk7Ci0gICAgY29uc29sZS5sb2coIm5hbWU6ICIgKyBtYXJrb1swXSk7Ci0KLSAgICAvLyBGaW5kIHRoZSAibWFya28iIHZlcnRleCBhbmQgdGhlbiB0cmF2ZXJzZSB0byB0aGUgcGVvcGxlIGhlICJrbm93cyIgYW5kIHJldHVybiB0aGVpciBkYXRhCi0gICAgY29uc3QgcGVvcGxlTWFya29Lbm93cyA9IGF3YWl0IGcuVigpLmhhcyh2ZXJ0ZXhMYWJlbCwnbmFtZScsJ21hcmtvJykub3V0KCdrbm93cycpLnZhbHVlcygnbmFtZScpLnRvTGlzdCgpOwotICAgIHBlb3BsZU1hcmtvS25vd3MuZm9yRWFjaCgocGVyc29uKSA9PiB7Ci0gICAgICAgIGNvbnNvbGUubG9nKCJtYXJrbyBrbm93cyAiICsgcGVyc29uKTsKLSAgICB9KTsKLQotICAgIGF3YWl0IGRjLmNsb3NlKCk7Ci19Ci0KLW1haW4oKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9jb25uZWN0aW9ucy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL2Nvbm5lY3Rpb25zLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWM3Yjg3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL2Nvbm5lY3Rpb25zLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1jb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpOwotY29uc3QgdHJhdmVyc2FsID0gZ3JlbWxpbi5wcm9jZXNzLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Ci1jb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKLWNvbnN0IHNlcmlhbGl6ZXIgPSBncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNlcmlhbGl6ZXI7Ci0KLWNvbnN0IHNlcnZlclVybCA9IHByb2Nlc3MuZW52LkdSRU1MSU5fU0VSVkVSX1VSTCB8fCAnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJzsKLWNvbnN0IHZlcnRleExhYmVsID0gcHJvY2Vzcy5lbnYuVkVSVEVYX0xBQkVMIHx8ICdjb25uZWN0aW9uJzsKLQotYXN5bmMgZnVuY3Rpb24gbWFpbigpIHsKLSAgICBhd2FpdCB3aXRoUmVtb3RlKCk7Ci0gICAgYXdhaXQgd2l0aENvbmZpZ3MoKTsKLX0KLQotYXN5bmMgZnVuY3Rpb24gd2l0aFJlbW90ZSgpIHsKLSAgICAvLyBDb25uZWN0aW5nIHRvIHRoZSBzZXJ2ZXIKLSAgICBjb25zdCBkYyA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlclVybCk7Ci0gICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoZGMpOwotCi0gICAgLy8gU2ltcGxlIHF1ZXJ5IHRvIHZlcmlmeSBjb25uZWN0aW9uCi0gICAgY29uc3QgdiA9IGF3YWl0IGcuYWRkVih2ZXJ0ZXhMYWJlbCkuaXRlcmF0ZSgpOwotICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgZy5WKCkuaGFzTGFiZWwodmVydGV4TGFiZWwpLmNvdW50KCkubmV4dCgpOwotICAgIGNvbnNvbGUubG9nKCJWZXJ0ZXggY291bnQ6ICIgKyBjb3VudC52YWx1ZSk7Ci0KLSAgICAvLyBDbGVhbnVwCi0gICAgYXdhaXQgZGMuY2xvc2UoKTsKLX0KLQotYXN5bmMgZnVuY3Rpb24gd2l0aENvbmZpZ3MoKSB7Ci0gICAgLy8gQ29ubmVjdGluZyBhbmQgY3VzdG9taXppbmcgY29uZmlndXJhdGlvbnMKLSAgICBjb25zdCBkYyA9IG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlclVybCwgewotICAgICAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbicsCi0gICAgICAgIHJlYWRlcjogc2VyaWFsaXplciwKLSAgICAgICAgd3JpdGVyOiBzZXJpYWxpemVyLAotICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLAotICAgICAgICB0cmF2ZXJzYWxTb3VyY2U6ICdnJywKLSAgICB9KTsKLSAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShkYyk7Ci0KLSAgICBjb25zdCB2ID0gYXdhaXQgZy5hZGRWKHZlcnRleExhYmVsKS5pdGVyYXRlKCk7Ci0gICAgY29uc3QgY291bnQgPSBhd2FpdCBnLlYoKS5oYXNMYWJlbCh2ZXJ0ZXhMYWJlbCkuY291bnQoKS5uZXh0KCk7Ci0gICAgY29uc29sZS5sb2coIlZlcnRleCBjb3VudDogIiArIGNvdW50LnZhbHVlKTsKLQotICAgIGF3YWl0IGRjLmNsb3NlKCk7Ci19Ci0KLW1haW4oKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9tb2Rlcm4tdHJhdmVyc2Fscy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL21vZGVybi10cmF2ZXJzYWxzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yzc0MDQ4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL21vZGVybi10cmF2ZXJzYWxzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLXNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0iQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLUtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi1jb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpOwotY29uc3QgdHJhdmVyc2FsID0gZ3JlbWxpbi5wcm9jZXNzLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Ci1jb25zdCBfXyA9IGdyZW1saW4ucHJvY2Vzcy5zdGF0aWNzOwotY29uc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IGdyZW1saW4uZHJpdmVyLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247Ci1jb25zdCBwID0gZ3JlbWxpbi5wcm9jZXNzLlA7Ci1jb25zdCB0ID0gZ3JlbWxpbi5wcm9jZXNzLnQ7Ci0KLWNvbnN0IHNlcnZlclVybCA9IHByb2Nlc3MuZW52LkdSRU1MSU5fU0VSVkVSX1VSTCB8fCAnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJzsKLQotYXN5bmMgZnVuY3Rpb24gbWFpbigpIHsKLSAgICAvKgotICAgIFRoaXMgZXhhbXBsZSByZXF1aXJlcyB0aGUgTW9kZXJuIHRveSBncmFwaCB0byBiZSBwcmVsb2FkZWQgdXBvbiBsYXVuY2hpbmcgdGhlIEdyZW1saW4gc2VydmVyLgotICAgIEZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLXNlcnZlci1kb2NrZXItaW1hZ2UgYW5kIHVzZQotICAgIGNvbmYvZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLnlhbWwuCi0gICAgKi8KLSAgICAKLSAgICAvLyBVc2UgZ21vZGVybiBpbiBDSSBlbnZpcm9ubWVudCwgZGVmYXVsdCBjb25uZWN0aW9uIGxvY2FsbHkKLSAgICBjb25zdCBvcHRpb25zID0gcHJvY2Vzcy5lbnYuRE9DS0VSX0VOVklST05NRU5UID8geyB0cmF2ZXJzYWxTb3VyY2U6ICdnbW9kZXJuJyB9IDoge307Ci0gICAgY29uc3QgZGMgPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJVcmwsIG9wdGlvbnMpOwotICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGRjKTsKLQotICAgIGNvbnN0IGUxID0gYXdhaXQgZy5WKDEpLmJvdGhFKCkudG9MaXN0KCk7IC8vICgxKQotICAgIGNvbnN0IGUyID0gYXdhaXQgZy5WKDEpLmJvdGhFKCkud2hlcmUoX18ub3RoZXJWKCkuaGFzSWQoMikpLnRvTGlzdCgpOyAvLyAoMikKLSAgICBjb25zdCB2MSA9IGF3YWl0IGcuVigxKS5uZXh0KCk7Ci0gICAgY29uc3QgdjIgPSBhd2FpdCBnLlYoMikubmV4dCgpOwotICAgIGNvbnN0IGUzID0gYXdhaXQgZy5WKHYxLnZhbHVlKS5ib3RoRSgpLndoZXJlKF9fLm90aGVyVigpLmlzKHYyLnZhbHVlKSkudG9MaXN0KCk7IC8vICgzKQotICAgIGNvbnN0IGU0ID0gYXdhaXQgZy5WKHYxLnZhbHVlKS5vdXRFKCkud2hlcmUoX18uaW5WKCkuaXModjIudmFsdWUpKS50b0xpc3QoKTsgLy8gKDQpCi0gICAgY29uc3QgZTUgPSBhd2FpdCBnLlYoMSkub3V0RSgpLndoZXJlKF9fLmluVigpLmhhcyh0LmlkLCBwLndpdGhpbigyLDMpKSkudG9MaXN0KCk7IC8vICg1KQotICAgIGNvbnN0IGU2ID0gYXdhaXQgZy5WKDEpLm91dCgpLndoZXJlKF9fLmluXygpLmhhc0lkKDYpKS50b0xpc3QoKTsgLy8gKDYpCi0KLSAgICBjb25zb2xlLmxvZygiMTogIiArIGUxLnRvU3RyaW5nKCkpOwotICAgIGNvbnNvbGUubG9nKCIyOiAiICsgZTIudG9TdHJpbmcoKSk7Ci0gICAgY29uc29sZS5sb2coIjM6ICIgKyBlMy50b1N0cmluZygpKTsKLSAgICBjb25zb2xlLmxvZygiNDogIiArIGU0LnRvU3RyaW5nKCkpOwotICAgIGNvbnNvbGUubG9nKCI1OiAiICsgZTUudG9TdHJpbmcoKSk7Ci0gICAgY29uc29sZS5sb2coIjY6ICIgKyBlNi50b1N0cmluZygpKTsKLSAgICAKLSAgICAvKgotICAgIDEuIFRoZXJlIGFyZSB0aHJlZSBlZGdlcyBmcm9tIHRoZSB2ZXJ0ZXggd2l0aCB0aGUgaWRlbnRpZmllciBvZiAiMSIuCi0gICAgMi4gRmlsdGVyIHRob3NlIHRocmVlIGVkZ2VzIHVzaW5nIHRoZSB3aGVyZSgpLXN0ZXAgdXNpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZlcnRleCByZXR1cm5lZCBieSBvdGhlclYoKSB0bwotICAgICAgIGVuc3VyZSBpdCBtYXRjaGVzIG9uIHRoZSB2ZXJ0ZXggb2YgY29uY2Vybiwgd2hpY2ggaXMgdGhlIG9uZSB3aXRoIGFuIGlkZW50aWZpZXIgb2YgIjIiLgotICAgIDMuIE5vdGUgdGhhdCB0aGUgc2FtZSB0cmF2ZXJzYWwgd2lsbCB3b3JrIGlmIHRoZXJlIGFyZSBhY3R1YWwgVmVydGV4IGluc3RhbmNlcyByYXRoZXIgdGhhbiBqdXN0IHZlcnRleAotICAgICAgIGlkZW50aWZpZXJzLgotICAgIDQuIFRoZSB2ZXJ0ZXggd2l0aCBpZGVudGlmaWVyICIxIiBoYXMgYWxsIG91dGdvaW5nIGVkZ2VzLCBzbyBpdCB3b3VsZCBhbHNvIGJlIGFjY2VwdGFibGUgdG8gdXNlIHRoZSBkaXJlY3Rpb25hbAotICAgICAgIHN0ZXBzIG9mIG91dEUoKSBhbmQgaW5WKCkgc2luY2UgdGhlIHNjaGVtYSBhbGxvd3MgaXQuCi0gICAgNS4gVGhlcmUgaXMgYWxzbyBubyBwcm9ibGVtIHdpdGggZmlsdGVyaW5nIHRoZSB0ZXJtaW5hdGluZyBzaWRlIG9mIHRoZSB0cmF2ZXJzYWwgb24gbXVsdGlwbGUgdmVydGljZXMsIGluIHRoaXMKLSAgICAgICBjYXNlLCB2ZXJ0aWNlcyB3aXRoIGlkZW50aWZpZXJzICIyIiBhbmQgIjMiLgotICAgIDYuIFRoZXJl4oCZcyBubyByZWFzb24gd2h5IHRoZSBzYW1lIHBhdHRlcm4gb2YgZXhjbHVzaW9uIHVzZWQgZm9yIGVkZ2VzIHdpdGggd2hlcmUoKSBjYW7igJl0IHdvcmsgZm9yIGEgdmVydGV4Ci0gICAgICAgYmV0d2VlbiB0d28gdmVydGljZXMuCi0gICAgKi8KLQotICAgYXdhaXQgZGMuY2xvc2UoKTsKLX0KLQotbWFpbigpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL3BhY2thZ2UuanNvbiBiL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL3BhY2thZ2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY4ODBkYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9wYWNrYWdlLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi17Ci0gICJuYW1lIjogImV4YW1wbGVzIiwKLSAgInZlcnNpb24iOiAiMS4wLjAiLAotICAiZGVzY3JpcHRpb24iOiAiR0xWIGV4YW1wbGUgZm9yIEphdmFTY3JpcHQgd2l0aCBOb2RlIiwKLSAgIm1haW4iOiAiY29ubmVjdGlvbnMuanMiLAotICAic2NyaXB0cyI6IHsKLSAgICAidGVzdCI6ICJlY2hvIFwiRXJyb3I6IG5vIHRlc3Qgc3BlY2lmaWVkXCIgJiYgZXhpdCAxIgotICB9LAotICAiYXV0aG9yIjogIlJ5YW4gVGFuIiwKLSAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgImdyZW1saW4iOiAiZmlsZTouLi8uLi9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdCIKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3BvbS54bWwgYi9ncmVtbGluLWphdmFzY3JpcHQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI5MjRjMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2MyArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1qYXZhc2NyaXB0PC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogR3JlbWxpbiBKYXZhc2NyaXB0PC9uYW1lPgotICAgIDxwcm9wZXJ0aWVzPgotICAgICAgICA8bWF2ZW4udGVzdC5za2lwPmZhbHNlPC9tYXZlbi50ZXN0LnNraXA+Ci0gICAgICAgIDxza2lwVGVzdHM+JHttYXZlbi50ZXN0LnNraXB9PC9za2lwVGVzdHM+Ci0gICAgPC9wcm9wZXJ0aWVzPgotICAgIDxidWlsZD4KLSAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9L3RhcmdldDwvZGlyZWN0b3J5PgotICAgICAgICA8ZmluYWxOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfS0ke3Byb2plY3QudmVyc2lvbn08L2ZpbmFsTmFtZT4KLSAgICAgICAgPHBsdWdpbk1hbmFnZW1lbnQ+Ci0gICAgICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5mcm9udGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTUuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDwvcGx1Z2lucz4KLSAgICAgICAgPC9wbHVnaW5NYW5hZ2VtZW50PgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPCEtLQotICAgICAgICAgICAgICAgIFVzZSBnbWF2ZW5wbHVzLXBsdWdpbiB0bzoKLSAgICAgICAgICAgICAgICAgICAgLSBHZW5lcmF0ZSBqcyBzb3VyY2VzCi0gICAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLmdtYXZlbnBsdXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z21hdmVucGx1cy1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tc2VydmVyPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLXRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWlvPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1pbzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy5pby52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotCQkJCQk8ZGVwZW5kZW5jeT4KLQkJCQkJCTxncm91cElkPmNoLnFvcy5sb2diYWNrPC9ncm91cElkPgotCQkJCQkJPGFydGlmYWN0SWQ+bG9nYmFjay1jbGFzc2ljPC9hcnRpZmFjdElkPgotCQkJCQkJPHZlcnNpb24+JHtsb2diYWNrLnZlcnNpb259PC92ZXJzaW9uPgotCQkJCQkJPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotCQkJCQk8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5ncm9vdnk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ncm9vdnktYWxsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtncm9vdnkudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS1yYWRpc2gtc3VwcG9ydDwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZXhlY3V0ZTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydGllcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+cHJvamVjdEJhc2VEaXI8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LmJhc2VkaXJ9Ly4uLzwvdmFsdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHRzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PiR7cHJvamVjdC5iYXNlZGlyfS9idWlsZC9nZW5lcmF0ZS5ncm9vdnk8L3NjcmlwdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NjcmlwdHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnVwZGF0ZS12ZXJzaW9uPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5leGVjdXRlPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHRzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG1hdmVuVmVyc2lvbiA9ICIke3Byb2plY3QudmVyc2lvbn0iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgdmVyc2lvbkZvckpzID0gbWF2ZW5WZXJzaW9uLnJlcGxhY2UoIi1TTkFQU0hPVCIsICItYWxwaGExIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBwbGF0Zm9ybUFnbm9zdGljQmFzZURpclBhdGggPSBwcm9qZWN0LmJhc2VkaXIuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZSgiXFwiLCAiLyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZmlsZSA9IG5ldyBGaWxlKHBsYXRmb3JtQWdub3N0aWNCYXNlRGlyUGF0aCArICIvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvcGFja2FnZS5qc29uIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoZmlsZS5nZXRUZXh0KCJVVEYtOCIpLnJlcGxhY2VGaXJzdCgvInZlcnNpb24iOiAiKC4qKSIsLywgIlwidmVyc2lvblwiOiBcIiIgKyB2ZXJzaW9uRm9ySnMgKyAiXCIsIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Y2xlYW48L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+c3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvYnVpbGQ8L2RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgICAgICAgICAgICAgPC9maWxlc2V0cz4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5laXJzbGV0dDwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5mcm9udGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aWQ+aW5zdGFsbCBub2RlIGFuZCBucG08L2lkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnZhbGlkYXRlPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5pbnN0YWxsLW5vZGUtYW5kLW5wbTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBpbnN0YWxsPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+Y2k8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIGxpbnQ8L2lkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnZhbGlkYXRlPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ucG08L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+JHtza2lwVGVzdHN9PC9za2lwPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+cnVuIGxpbnQ8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFpbE9uRXJyb3I+dHJ1ZTwvZmFpbE9uRXJyb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBqc2RvYzwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50cz5ydW4gZG9jPC9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHdvcmtpbmdEaXJlY3Rvcnk+c3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQ8L3dvcmtpbmdEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgIDxub2RlVmVyc2lvbj4ke3J1bnRpbWUubm9kZS52ZXJzaW9ufTwvbm9kZVZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxucG1WZXJzaW9uPiR7cnVudGltZS5ucG0udmVyc2lvbn08L25wbVZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8IS0tCi0gICAgICAgICAgICB0aGVyZSBpcyBubyBwb2ludCB0byBidWlsZGluZy9kZXBsb3lpbmcgdGhlIGp2bSBzdHVmZiAtIHRoZXJlIGlzIG5vIGphdmEgc291cmNlIHJlYWxseSAtIGp1c3QgcG9tcwotICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNvdXJjZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxza2lwU291cmNlPnRydWU8L3NraXBTb3VyY2U+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1pbnN0YWxsLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGxveS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuY29kZS5tYXZlbi1yZXBsYWNlci1wbHVnaW48L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+cmVwbGFjZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxlPnNyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi91dGlscy5qczwvZmlsZT4KLSAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dG9rZW4+Z3JlbWxpblZlcnNpb24gPSAnLionPC90b2tlbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+Z3JlbWxpblZlcnNpb24gPSAnJHtwcm9qZWN0LnZlcnNpb259JzwvdmFsdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3JlcGxhY2VtZW50PgotICAgICAgICAgICAgICAgICAgICA8L3JlcGxhY2VtZW50cz4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0gICAgPHByb2ZpbGVzPgotICAgICAgICA8IS0tIFRlc3QgZ3JlbWxpbi1qYXZhc2NyaXB0IGluIERvY2tlciAtLT4KLSAgICAgICAgPHByb2ZpbGU+Ci0gICAgICAgICAgICA8aWQ+Z2x2LWpzPC9pZD4KLSAgICAgICAgICAgIDxhY3RpdmF0aW9uPgotICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgotICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgotICAgICAgICAgICAgPGJ1aWxkPgotICAgICAgICAgICAgICAgIDxmaW5hbE5hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9LSR7cHJvamVjdC52ZXJzaW9ufTwvZmluYWxOYW1lPgotICAgICAgICAgICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNS4wPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnJ1bi10ZXN0czwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5pbnRlZ3JhdGlvbi10ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZXhlYzwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD4ke3NraXBUZXN0c308L3NraXA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW52aXJvbm1lbnRWYXJpYWJsZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdSRU1MSU5fU0VSVkVSPiR7cHJvamVjdC52ZXJzaW9ufTwvR1JFTUxJTl9TRVJWRVI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFCU19QUk9KRUNUX0hPTUU+JHtwcm9qZWN0LmJhc2VkaXJ9Ly4uLzwvQUJTX1BST0pFQ1RfSE9NRT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNldHRpbmcgdGhpcyBlbnYgdmFyaWFibGUgaXMgbmVlZGVkIHRvIGJlIGNyb3NzLXBsYXRmb3JtIGNvbXBhdGlibGUgLS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhPTUU+JHt1c2VyLmhvbWV9PC9IT01FPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxOT0RFX1ZFUlNJT04+JHtub2RlLnRlc3QudmVyc2lvbn08L05PREVfVkVSU0lPTj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZW52aXJvbm1lbnRWYXJpYWJsZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0YWJsZT5kb2NrZXI8L2V4ZWN1dGFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD5jb21wb3NlPC9hcmd1bWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+dXA8L2FyZ3VtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD4tLWJ1aWxkPC9hcmd1bWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+LS1leGl0LWNvZGUtZnJvbTwvYXJndW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50PmdyZW1saW4tanMtaW50ZWdyYXRpb24tdGVzdHM8L2FyZ3VtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT4uL3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0PC93b3JraW5nRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnNodXRkb3duLWNvbnRhaW5lcjwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5pbnRlZ3JhdGlvbi10ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZXhlYzwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD4ke3NraXBUZXN0c308L3NraXA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRvbid0IG5lZWQgdG8gc2V0IGVudiB2YXJpYWJsZXMgZm9yIGNvbnRhaW5lciB0ZWFyIGRvd24gLS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0YWJsZT5kb2NrZXI8L2V4ZWN1dGFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD5jb21wb3NlPC9hcmd1bWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+ZG93bjwvYXJndW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3b3JraW5nRGlyZWN0b3J5Pi4vc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQ8L3dvcmtpbmdEaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+cmVtb3ZlLWRhbmdsaW5nLWltYWdlczwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5pbnRlZ3JhdGlvbi10ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZXhlYzwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD4ke3NraXBUZXN0c308L3NraXA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0YWJsZT5kb2NrZXI8L2V4ZWN1dGFibGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD5pbWFnZTwvYXJndW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50PnBydW5lPC9hcmd1bWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+LS1maWx0ZXI8L2FyZ3VtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD5sYWJlbD1tYWludGFpbmVyPWRldkB0aW5rZXJwb3AuYXBhY2hlLm9yZzwvYXJndW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50Pi1mPC9hcmd1bWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJndW1lbnRzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KLSAgICAgICAgICAgIDwvYnVpbGQ+Ci0gICAgICAgIDwvcHJvZmlsZT4KLSAgICAgICAgPCEtLQotICAgICAgICBQcm92aWRlcyBhIHdheSB0byBkZXBsb3kgdGhlIGdyZW1saW4tamF2YXNjcmlwdCBHTFYgdG8gbnBtLiBUaGlzIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBtYXZlbiBleGVjdXRpb24KLSAgICAgICAgYmVjYXVzZSBucG0gZG9lcyBub3QgaGF2ZSBhIHN0YWdpbmcgZW52aXJvbm1lbnQgbGlrZSBzb25hdHlwZSBmb3IgcmVsZWFzZXMuIEFzIHNvb24gYXMgdGhlIHJlbGVhc2UgaXMKLSAgICAgICAgcHVibGlzaGVkIGl0IGlzIHB1YmxpYy4gSW4gb3VyIHJlbGVhc2Ugd29ya2Zsb3csIGRlcGxveSBvY2N1cnMgcHJpb3IgdG8gdm90ZSBvbiB0aGUgcmVsZWFzZSBhbmQgd2UgY2FuJ3QKLSAgICAgICAgbWFrZSB0aGlzIHN0dWZmIHB1YmxpYyB1bnRpbCB0aGUgdm90ZSBpcyBvdmVyLgotICAgICAgICAtLT4KLSAgICAgICAgPHByb2ZpbGU+Ci0gICAgICAgICAgICA8aWQ+Z2x2LWphdmFzY3JpcHQtZGVwbG95PC9pZD4KLSAgICAgICAgICAgIDxhY3RpdmF0aW9uPgotICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+ZmFsc2U8L2FjdGl2ZUJ5RGVmYXVsdD4KLSAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgIDxuYW1lPm5wbTwvbmFtZT4KLSAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgotICAgICAgICAgICAgPGJ1aWxkPgotICAgICAgICAgICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5laXJzbGV0dDwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmZyb250ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ucG0gcHVibGlzaDwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5kZXBsb3k8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ucG08L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50cz5wdWJsaXNoPC9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gZ2l2ZW4gaG93IHRoZSA8Y29uZmlndXJhdGlvbj4gaXMgc3BlY2lmaWVkIGluIHRoZSBtYWluIGJ1aWxkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHNob3VsZCBiZSBmaW5lIHRvIGp1c3QgYWx3YXlzIGRlcGxveSBiZWNhdXNlIHRoaXMgPHByb2ZpbGU+IG5lZWRzIHRvIGJlIG1hbnVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVkIGFuZCB0aGF0IHNob3VsZCBiZSBnb29kIGVub3VnaCBnaXZlbiBvdXIgZGVwbG95bWVudCBwcm9jZXNzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPmZhbHNlPC9za2lwPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3b3JraW5nRGlyZWN0b3J5PnNyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0PC93b3JraW5nRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub2RlVmVyc2lvbj4ke3J1bnRpbWUubm9kZS52ZXJzaW9ufTwvbm9kZVZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5wbVZlcnNpb24+JHtydW50aW1lLm5wbS52ZXJzaW9ufTwvbnBtVmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW5zPgotICAgICAgICAgICAgPC9idWlsZD4KLSAgICAgICAgPC9wcm9maWxlPgotICAgIDwvcHJvZmlsZXM+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5naXRpZ25vcmUgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE2N2Y1NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotbm9kZV9tb2R1bGVzLwotLmlkZWEvCi1ucG0tZGVidWcubG9nCi0jIG1hdmVuIHBsdWdpbiBjb20uZ2l0aHViLmVpcnNsZXR0IGZyb250ZW5kLW1hdmVuLXBsdWdpbiBpbnN0YWxscyBub2RlLmpzIHJ1bnRpbWUgaW4gIm5vZGUiIGZvbGRlcgotbm9kZS8KLWRvYy8KLWJ1aWxkLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC8ucHJldHRpZXJyYy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC8ucHJldHRpZXJyYy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJjODdhMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvLnByZXR0aWVycmMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLW1vZHVsZS5leHBvcnRzID0gewotICBzaW5nbGVRdW90ZTogdHJ1ZSwKLSAgcHJpbnRXaWR0aDogMTIwLAotICB0cmFpbGluZ0NvbW1hOiAnYWxsJywKLSAgYnJhY2tldFNwYWNpbmc6IHRydWUsCi0gIGFycm93UGFyZW5zOiAnYWx3YXlzJywKLSAgc2VtaTogdHJ1ZSwKLSAgdGFiV2lkdGg6IDIsCi0gIHVzZVRhYnM6IGZhbHNlLAotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9OT1RJQ0UgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvTk9USUNFCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWIzM2E4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUFwYWNoZSBUaW5rZXJQb3AKLUNvcHlyaWdodCAyMDE1LTIwMjYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0Ci1UaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9SRUFETUUubWQgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvUkVBRE1FLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWVmODVhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9SRUFETUUubWQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotPCEtLQotCi0gTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS0tPgotCi0jIEphdmFTY3JpcHQgR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50Ci0KLVtBcGFjaGUgVGlua2VyUG9w4oSiXVt0a10gaXMgYSBncmFwaCBjb21wdXRpbmcgZnJhbWV3b3JrIGZvciBib3RoIGdyYXBoIGRhdGFiYXNlcyAoT0xUUCkgYW5kIGdyYXBoIGFuYWx5dGljIHN5c3RlbXMKLShPTEFQKS4gW0dyZW1saW5dW2dyZW1saW5dIGlzIHRoZSBncmFwaCB0cmF2ZXJzYWwgbGFuZ3VhZ2Ugb2YgVGlua2VyUG9wLiBJdCBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgZnVuY3Rpb25hbCwKLWRhdGEtZmxvdyBsYW5ndWFnZSB0aGF0IGVuYWJsZXMgdXNlcnMgdG8gc3VjY2luY3RseSBleHByZXNzIGNvbXBsZXggdHJhdmVyc2FscyBvbiAob3IgcXVlcmllcyBvZikgdGhlaXIgYXBwbGljYXRpb24ncwotcHJvcGVydHkgZ3JhcGguCi0KLUdyZW1saW4tSmF2YXNjcmlwdCBpbXBsZW1lbnRzIEdyZW1saW4gd2l0aGluIHRoZSBKYXZhU2NyaXB0IGxhbmd1YWdlIGFuZCBjYW4gYmUgdXNlZCBvbiBOb2RlLmpzIGFuZCBoYXMgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIFdlYiBBUElzIGNvbXBhdGlibGUgcnVudGltZXMuCi0KLWBgYGJhc2gKLW5wbSBpbnN0YWxsIGdyZW1saW4KLWBgYAotCi1HcmVtbGluLUphdmFzY3JpcHQgaXMgZGVzaWduZWQgdG8gY29ubmVjdCB0byBhICJzZXJ2ZXIiIHRoYXQgaXMgaG9zdGluZyBhIFRpbmtlclBvcC1lbmFibGVkIGdyYXBoIHN5c3RlbS4gVGhhdCAic2VydmVyIiAKLWNvdWxkIGJlIFtHcmVtbGluIFNlcnZlcl1bZ3NdIG9yIGEgW3JlbW90ZSBHcmVtbGluIHByb3ZpZGVyXVtyZ3BdIHRoYXQgZXhwb3NlcyBwcm90b2NvbHMgYnkgd2hpY2ggR3JlbWxpbi1KYXZhc2NyaXB0IAotY2FuIGNvbm5lY3QuCi0KLUEgdHlwaWNhbCBjb25uZWN0aW9uIHRvIGEgc2VydmVyIHJ1bm5pbmcgb24gImxvY2FsaG9zdCIgdGhhdCBzdXBwb3J0cyB0aGUgR3JlbWxpbiBTZXJ2ZXIgcHJvdG9jb2wgdXNpbmcgd2Vic29ja2V0cyAKLWxvb2tzIGxpa2UgdGhpczoKLQotYGBgamF2YXNjcmlwdAotY29uc3QgZ3JlbWxpbiA9IHJlcXVpcmUoJ2dyZW1saW4nKTsKLWNvbnN0IHRyYXZlcnNhbCA9IGdyZW1saW4ucHJvY2Vzcy5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotY29uc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IGdyZW1saW4uZHJpdmVyLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247Ci0KLWNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykpOwotYGBgCi0KLU9uY2UgImciIGhhcyBiZWVuIGNyZWF0ZWQgdXNpbmcgYSBjb25uZWN0aW9uLCBpdCBpcyB0aGVuIHBvc3NpYmxlIHRvIHN0YXJ0IHdyaXRpbmcgR3JlbWxpbiB0cmF2ZXJzYWxzIHRvIHF1ZXJ5IHRoZSAKLXJlbW90ZSBncmFwaDoKLQotYGBgamF2YXNjcmlwdAotZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnbmFtZScpLnRvTGlzdCgpCi0gIC50aGVuKG5hbWVzID0+IGNvbnNvbGUubG9nKG5hbWVzKSk7Ci0KLWNvbnN0IG5hbWVzID0gYXdhaXQgZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnbmFtZScpLnRvTGlzdCgpOwotY29uc29sZS5sb2cobmFtZXMpOwotYGBgCi0KLSMgU2FtcGxlIFRyYXZlcnNhbHMKLQotVGhlIEdyZW1saW4gbGFuZ3VhZ2UgYWxsb3dzIHVzZXJzIHRvIHdyaXRlIGhpZ2hseSBleHByZXNzaXZlIGdyYXBoIHRyYXZlcnNhbHMgYW5kIGhhcyBhIGJyb2FkIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgCi1jb3ZlciBhIHdpZGUgYm9keSBvZiBmZWF0dXJlcy4gVGhlIFtSZWZlcmVuY2UgRG9jdW1lbnRhdGlvbl1bc3RlcHNdIGRlc2NyaWJlcyB0aGVzZSBmdW5jdGlvbnMgYW5kIG90aGVyIGFzcGVjdHMgb2YgdGhlIAotVGlua2VyUG9wIGVjb3N5c3RlbSBpbmNsdWRpbmcgc29tZSBzcGVjaWZpY3Mgb24gW0dyZW1saW4gaW4gSmF2YXNjcmlwdF1bZG9jc10gaXRzZWxmLiBNb3N0IG9mIHRoZSBleGFtcGxlcyBmb3VuZCBpbiB0aGUgCi1kb2N1bWVudGF0aW9uIHVzZSBHcm9vdnkgbGFuZ3VhZ2Ugc3ludGF4IGluIHRoZSBbR3JlbWxpbiBDb25zb2xlXVtjb25zb2xlXS4gRm9yIHRoZSBtb3N0IHBhcnQsIHRoZXNlIGV4YW1wbGVzCi1zaG91bGQgZ2VuZXJhbGx5IHRyYW5zbGF0ZSB0byBKYXZhc2NyaXB0IHdpdGggW2xpdHRsZSBtb2RpZmljYXRpb25dW2RpZmZlcmVuY2VzXS4gR2l2ZW4gdGhlIHN0cm9uZyBjb3JyZXNwb25kZW5jZSAKLWJldHdlZW4gY2Fub25pY2FsIEdyZW1saW4gaW4gSmF2YSBhbmQgaXRzIHZhcmlhbnRzIGxpa2UgSmF2YXNjcmlwdCwgdGhlcmUgaXMgYSBsaW1pdGVkIGFtb3VudCBvZiBKYXZhc2NyaXB0LXNwZWNpZmljIAotZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuIFRoaXMgc3Ryb25nIGNvcnJlc3BvbmRlbmNlIGFtb25nIHZhcmlhbnRzIGVuc3VyZXMgdGhhdCB0aGUgZ2VuZXJhbCBHcmVtbGluIHJlZmVyZW5jZSAKLWRvY3VtZW50YXRpb24gaXMgYXBwbGljYWJsZSB0byBhbGwgdmFyaWFudHMgYW5kIHRoYXQgdXNlcnMgbW92aW5nIGJldHdlZW4gZGV2ZWxvcG1lbnQgbGFuZ3VhZ2VzIGNhbiBlYXNpbHkgYWRvcHQgdGhlIAotR3JlbWxpbiB2YXJpYW50IGZvciB0aGF0IGxhbmd1YWdlLgotCi0jIyBDcmVhdGUgVmVydGV4Ci0KLWBgYGphdmFzY3JpcHQKLS8qIGlmIHdlIHdhbnQgdG8gYXNzaWduIG91ciBvd24gSUQgYW5kIHByb3BlcnRpZXMgdG8gdGhpcyB2ZXJ0ZXggKi8KLWNvbnN0IHsgdDogeyBpZCB9IH0gPSBncmVtbGluLnByb2Nlc3M7Ci1jb25zdCB7IGNhcmRpbmFsaXR5OiB7IHNpbmdsZSB9IH0gPSBncmVtbGluLnByb2Nlc3M7Ci0KLS8qKgotICogQ3JlYXRlIGEgbmV3IHZlcnRleCB3aXRoIElkLCBMYWJlbCBhbmQgcHJvcGVydGllcwotICogQHBhcmFtIHtTdHJpbmcsTnVtYmVyfSB2ZXJ0ZXhJZCBWZXJ0ZXggSWQgKGFzc3VtaW5nIHRoZSBncmFwaCBkYXRhYmFzZSBhbGxvd3MgaWQgYXNzaWdubWVudCkKLSAqIEBwYXJhbSB7U3RyaW5nfSB2bGFiZWwgVmVydGV4IExhYmVsCi0gKi8KLWNvbnN0IGNyZWF0ZVZlcnRleCA9IGFzeW5jICh2ZXJ0ZXhJZCwgdmxhYmVsKSA9PiB7Ci0gIGNvbnN0IHZlcnRleCA9IGF3YWl0IGcuYWRkVih2bGFiZWwpCi0gICAgLnByb3BlcnR5KGlkLCB2ZXJ0ZXhJZCkKLSAgICAucHJvcGVydHkoc2luZ2xlLCAnbmFtZScsICdBcGFjaGUnKQotICAgIC5wcm9wZXJ0eSgnbGFzdG5hbWUnLCAnVGlua2VycG9wJykgLy8gZGVmYXVsdCBkYXRhYmFzZSBjYXJkaW5hbGl0eQotICAgIC5uZXh0KCk7Ci0KLSAgcmV0dXJuIHZlcnRleC52YWx1ZTsKLX07Ci1gYGAKLQotIyMgRmluZCBWZXJ0aWNlcwotCi1gYGBqYXZhc2NyaXB0Ci0vKioKLSAqIExpc3QgYWxsIHZlcnRleGVzIGluIGRiCi0gKiBAcGFyYW0ge051bWJlcn0gbGltaXQKLSAqLwotY29uc3QgbGlzdEFsbCA9IGFzeW5jIChsaW1pdCA9IDUwMCkgPT4gewotICByZXR1cm4gZy5WKCkubGltaXQobGltaXQpLmVsZW1lbnRNYXAoKS50b0xpc3QoKTsKLX07Ci0vKioKLSAqIEZpbmQgdW5pcXVlIHZlcnRleCB3aXRoIGlkCi0gKiBAcGFyYW0ge09iamVjdH0gdmVydGV4SWQgVmVydGV4IElkCi0gKi8KLWNvbnN0IGZpbmRWZXJ0ZXggPSBhc3luYyAodmVydGV4SWQpID0+IHsKLSAgY29uc3QgdmVydGV4ID0gYXdhaXQgZy5WKHZlcnRleElkKS5lbGVtZW50TWFwKCkubmV4dCgpOwotICByZXR1cm4gdmVydGV4LnZhbHVlOwotfTsKLS8qKgotICogRmluZCB2ZXJ0aWNlcyBieSBsYWJlbCBhbmQgJ25hbWUnIHByb3BlcnR5Ci0gKiBAcGFyYW0ge1N0cmluZ30gdmxhYmVsIFZlcnRleCBsYWJlbAotICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdmFsdWUgb2YgJ25hbWUnIHByb3BlcnR5Ci0gKi8KLWNvbnN0IGxpc3RCeUxhYmVsQW5kTmFtZSA9IGFzeW5jICh2bGFiZWwsIG5hbWUpID0+IHsKLSAgcmV0dXJuIGcuVigpLmhhcyh2bGFiZWwsICduYW1lJywgbmFtZSkuZWxlbWVudE1hcCgpLnRvTGlzdCgpOwotfTsKLWBgYAotCi0jIyBVcGRhdGUgVmVydGV4Ci1gYGBqYXZhc2NyaXB0Ci1jb25zdCB7IGNhcmRpbmFsaXR5OiB7IHNpbmdsZSB9IH0gPSBncmVtbGluLnByb2Nlc3M7Ci0KLS8qKgotICogVXBkYXRlIFZlcnRleCBQcm9wZXJ0aWVzCi0gKiBAcGFyYW0ge1N0cmluZyxOdW1iZXJ9IHZlcnRleElkIFZlcnRleCBJZAotICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVmVydGV4IE5hbWUgUHJvcGVydHkKLSAqLwotY29uc3QgdXBkYXRlVmVydGV4ID0gYXN5bmMgKHZlcnRleElkLCBsYWJlbCwgbmFtZSkgPT4gewotICBjb25zdCB2ZXJ0ZXggPSBhd2FpdCBnLlYodmVydGV4SWQpLnByb3BlcnR5KHNpbmdsZSwgJ25hbWUnLCBuYW1lKS5uZXh0KCk7Ci0gIHJldHVybiB2ZXJ0ZXgudmFsdWU7Ci19OwotYGBgCi0KLV9fTk9URV9fIHRoYXQgdmVyc2lvbnMgc3VmZml4ZWQgd2l0aCAiLXJjIiBhcmUgY29uc2lkZXJlZCByZWxlYXNlIGNhbmRpZGF0ZXMgKGkuZS4gcHJlLWFscGhhLCBhbHBoYSwgYmV0YSwgZXRjLikgYW5kIHRodXMKLWZvciBlYXJseSB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuIFRoZXNlIHJlbGVhc2VzIGFyZSBub3Qgc3VpdGFibGUgZm9yIHByb2R1Y3Rpb24uCi0KLVt0a106IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcKLVtncmVtbGluXTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9ncmVtbGluLmh0bWwKLVtkb2NzXTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLWphdmFzY3JpcHQKLVtnc106IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1zZXJ2ZXIKLVtyZ3BdOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9yZWZlcmVuY2UvI2Nvbm5lY3RpbmctcmdwCi1bY29uc29sZV06IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3R1dG9yaWFscy90aGUtZ3JlbWxpbi1jb25zb2xlLwotW3N0ZXBzXTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmFwaC10cmF2ZXJzYWwtc3RlcHMKLVtkaWZmZXJlbmNlc106IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1qYXZhc2NyaXB0LWRpZmZlcmVuY2VzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvY2tlci1jb21wb3NlLnltbCBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9kb2NrZXItY29tcG9zZS55bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkM2JkNjguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvY2tlci1jb21wb3NlLnltbAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLSMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgICAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgICAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyAgICB1bmRlciB0aGUgTGljZW5zZS4KLQotc2VydmljZXM6Ci0KLSAgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qczoKLSAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qcwotICAgIGltYWdlOiB0aW5rZXJwb3AvZ3JlbWxpbi1zZXJ2ZXItdGVzdDoke0dSRU1MSU5fU0VSVkVSfQotICAgIGJ1aWxkOgotICAgICAgY29udGV4dDogLi4vLi4vLi4vLi4vLi4vCi0gICAgICBkb2NrZXJmaWxlOiBkb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlci9Eb2NrZXJmaWxlCi0gICAgICBhcmdzOgotICAgICAgICAtIEdSRU1MSU5fU0VSVkVSPSR7R1JFTUxJTl9TRVJWRVJ9Ci0gICAgcG9ydHM6Ci0gICAgICAtICI0NTk0MDo0NTk0MCIKLSAgICAgIC0gIjQ1OTQxOjQ1OTQxIgotICAgICAgLSAiNDU5NDI6NDU5NDIiCi0gICAgICAtICI0NTg4OjQ1ODgiCi0gICAgdm9sdW1lczoKLSAgICAgIC0gJHtIT01FfS8uZ3Jvb3Z5Oi9yb290Ly5ncm9vdnkKLSAgICAgIC0gJHtIT01FfS8ubTI6L3Jvb3QvLm0yCi0gICAgICAtICR7QUJTX1BST0pFQ1RfSE9NRX0vZ3JlbWxpbi10ZXN0L3RhcmdldDovb3B0L2dyZW1saW4tdGVzdAotICAgIGhlYWx0aGNoZWNrOgotICAgICAgdGVzdDogWyAiQ01ELVNIRUxMIiwgImFwayBhZGQgY3VybCAmJiBjdXJsIC1mIGh0dHA6Ly9sb2NhbGhvc3Q6NDU5NDA/Z3JlbWxpbj0xMDAtMSIgXQotICAgICAgaW50ZXJ2YWw6IDMwcwotICAgICAgdGltZW91dDogMTBzCi0gICAgICByZXRyaWVzOiAzMAotICAgICAgc3RhcnRfcGVyaW9kOiAzMHMKLQotICBncmVtbGluLWpzLWludGVncmF0aW9uLXRlc3RzOgotICAgIGNvbnRhaW5lcl9uYW1lOiBncmVtbGluLWpzLWludGVncmF0aW9uLXRlc3RzCi0gICAgaW1hZ2U6IG5vZGU6JHtOT0RFX1ZFUlNJT046LTIwfQotICAgIHZvbHVtZXM6Ci0gICAgICAtIC46L2pzX2FwcAotICAgICAgLSAuLi8uLi8uLi8uLi8uLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlczovZ3JlbWxpbi10ZXN0Ci0gICAgICAtIC4uLy4uLy4uLy4uLy4uL2RvY2tlci9ncmVtbGluLXRlc3Qtc2VydmVyOi9qc19hcHAvZ3JlbWxpbi10ZXN0LXNlcnZlcgotICAgICAgLSAuLi8uLi8uLi8uLi8uLi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mOi9qc19hcHAvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmYvCi0gICAgICAtIC4uLy4uLy4uLy4uOi9ncmVtbGluLWphdmFzY3JpcHQKLSAgICBlbnZpcm9ubWVudDoKLSAgICAgIC0gRE9DS0VSX0VOVklST05NRU5UPXRydWUKLSAgICAgIC0gR1JFTUxJTl9TRVJWRVJfVVJMPXdzOi8vZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qczo0NTk0MC9ncmVtbGluCi0gICAgICAtIFZFUlRFWF9MQUJFTD1qYXZhc2NyaXB0LWV4YW1wbGUKLSAgICB3b3JraW5nX2RpcjogL2pzX2FwcAotICAgIGNvbW1hbmQ6ID4KLSAgICAgIGJhc2ggLWMgIm5wbSBjb25maWcgc2V0IGNhY2hlIC90bXAgLS1nbG9iYWwKLSAgICAgICYmIG5wbSBjaSAmJiBucG0gcnVuIHRlc3QgJiYgbnBtIHJ1biBmZWF0dXJlcy1kb2NrZXIgCi0gICAgICAmJiBlY2hvICdSdW5uaW5nIGV4YW1wbGVzJwotICAgICAgJiYgY2QgL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdCAmJiBucG0gY2kKLSAgICAgICYmIGNkIC9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZSAmJiBucG0gY2kKLSAgICAgICYmIG5vZGUgYmFzaWMtZ3JlbWxpbi5qcwotICAgICAgJiYgbm9kZSBjb25uZWN0aW9ucy5qcwotICAgICAgJiYgbm9kZSBtb2Rlcm4tdHJhdmVyc2Fscy5qcwotICAgICAgJiYgZWNobyAnQWxsIGV4YW1wbGVzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknIgotICAgIGRlcGVuZHNfb246Ci0gICAgICBncmVtbGluLXNlcnZlci10ZXN0LWpzOgotICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQotCi0gIGdyZW1saW4tc29ja2V0LXNlcnZlcjoKLSAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1zb2NrZXQtc2VydmVyLWpzCi0gICAgaW1hZ2U6IHRpbmtlcnBvcC9ncmVtbGluLXNvY2tldC1zZXJ2ZXI6JHtHUkVNTElOX1NFUlZFUn0KLSAgICBwb3J0czoKLSAgICAgIC0gIjQ1OTQzOjQ1OTQzIgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2VzbGludC5jb25maWcubWpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2VzbGludC5jb25maWcubWpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzM0MDNmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9lc2xpbnQuY29uZmlnLm1qcworKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqcyBmcm9tICJAZXNsaW50L2pzIjsKLWltcG9ydCBwcmV0dGllciBmcm9tICJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjsKLWltcG9ydCBwcmV0dGllclBsdWdpbiBmcm9tICJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjsKLWltcG9ydCBnbG9iYWxzIGZyb20gImdsb2JhbHMiOwotCi1leHBvcnQgZGVmYXVsdCBbCi0gIGpzLmNvbmZpZ3MucmVjb21tZW5kZWQsCi0gIHByZXR0aWVyLAotICB7Ci0gICAgcGx1Z2luczogewotICAgICAgcHJldHRpZXI6IHByZXR0aWVyUGx1Z2luLAotICAgIH0sCi0gICAgbGFuZ3VhZ2VPcHRpb25zOiB7Ci0gICAgICBlY21hVmVyc2lvbjogMjAyMiwKLSAgICAgIHNvdXJjZVR5cGU6ICJjb21tb25qcyIsCi0gICAgICBnbG9iYWxzOiB7Ci0gICAgICAgIC4uLmdsb2JhbHMubm9kZSwKLSAgICAgICAgLi4uZ2xvYmFscy5jb21tb25qcywKLSAgICAgICAgLi4uZ2xvYmFscy5tb2NoYSwKLSAgICAgICAgQmlnSW50OiAicmVhZG9ubHkiLAotICAgICAgfSwKLSAgICB9LAotICAgIHJ1bGVzOiB7Ci0gICAgICAicHJldHRpZXIvcHJldHRpZXIiOiBbImVycm9yIiwgeyBlbmRPZkxpbmU6ICJhdXRvIiB9XSwKLSAgICAgICJsaW5lYnJlYWstc3R5bGUiOiAwLAotICAgICAgcXVvdGVzOiBbImVycm9yIiwgInNpbmdsZSJdLAotICAgICAgc2VtaTogWyJlcnJvciIsICJhbHdheXMiXSwKLSAgICAgICJuby1jb25zdGFudC1jb25kaXRpb24iOiBbImVycm9yIiwgeyBjaGVja0xvb3BzOiBmYWxzZSB9XSwKLSAgICAgIHN0cmljdDogWyJlcnJvciIsICJnbG9iYWwiXSwKLSAgICAgICJhcnJheS1jYWxsYmFjay1yZXR1cm4iOiAiZXJyb3IiLAotICAgICAgY3VybHk6ICJlcnJvciIsCi0gICAgICAibm8tdW51c2VkLXZhcnMiOiBbImVycm9yIiwgeyBhcmdzOiAibm9uZSIgfV0sCi0gICAgICAiZ2xvYmFsLXJlcXVpcmUiOiAiZXJyb3IiLAotICAgICAgZXFlcWVxOiBbImVycm9yIiwgImFsbG93LW51bGwiXSwKLSAgICAgICJndWFyZC1mb3ItaW4iOiAiZXJyb3IiLAotICAgICAgIm5vLWFsZXJ0IjogImVycm9yIiwKLSAgICAgICJuby1jYWxsZXIiOiAiZXJyb3IiLAotICAgICAgIm5vLWNhc2UtZGVjbGFyYXRpb25zIjogImVycm9yIiwKLSAgICAgICJuby1lbHNlLXJldHVybiI6ICJlcnJvciIsCi0gICAgICAibm8tZW1wdHktcGF0dGVybiI6ICJlcnJvciIsCi0gICAgICAibm8tZXZhbCI6ICJlcnJvciIsCi0gICAgICAibm8tZXh0ZW5kLW5hdGl2ZSI6ICJlcnJvciIsCi0gICAgICAibm8tZXh0cmEtYmluZCI6ICJlcnJvciIsCi0gICAgICAibm8tZXh0cmEtbGFiZWwiOiAiZXJyb3IiLAotICAgICAgIm5vLWZsb2F0aW5nLWRlY2ltYWwiOiAiZXJyb3IiLAotICAgICAgIm5vLWdsb2JhbC1hc3NpZ24iOiBbImVycm9yIiwgeyBleGNlcHRpb25zOiBbXSB9XSwKLSAgICAgICJuby1pbXBsaWNpdC1jb2VyY2lvbiI6IFsKLSAgICAgICAgIm9mZiIsCi0gICAgICAgIHsKLSAgICAgICAgICBib29sZWFuOiBmYWxzZSwKLSAgICAgICAgICBudW1iZXI6IHRydWUsCi0gICAgICAgICAgc3RyaW5nOiB0cnVlLAotICAgICAgICAgIGFsbG93OiBbXSwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgICAibm8taW1wbGllZC1ldmFsIjogImVycm9yIiwKLSAgICAgICJuby1sYWJlbHMiOiBbImVycm9yIiwgeyBhbGxvd0xvb3A6IGZhbHNlLCBhbGxvd1N3aXRjaDogZmFsc2UgfV0sCi0gICAgICAibm8tbG9uZS1ibG9ja3MiOiAiZXJyb3IiLAotICAgICAgIm5vLWxvb3AtZnVuYyI6ICJlcnJvciIsCi0gICAgICAibm8tbXVsdGktc3BhY2VzIjogImVycm9yIiwKLSAgICAgICJuby1uZXciOiAiZXJyb3IiLAotICAgICAgIm5vLW5ldy1mdW5jIjogImVycm9yIiwKLSAgICAgICJuby1uZXctd3JhcHBlcnMiOiAiZXJyb3IiLAotICAgICAgIm5vLW9jdGFsLWVzY2FwZSI6ICJlcnJvciIsCi0gICAgICAibm8tcHJvdG8iOiAiZXJyb3IiLAotICAgICAgIm5vLXByb3RvdHlwZS1idWlsdGlucyI6IDAsCi0gICAgICAibm8tcmVkZWNsYXJlIjogImVycm9yIiwKLSAgICAgICJuby1yZXN0cmljdGVkLXByb3BlcnRpZXMiOiBbCi0gICAgICAgICJlcnJvciIsCi0gICAgICAgIHsKLSAgICAgICAgICBvYmplY3Q6ICJhcmd1bWVudHMiLAotICAgICAgICAgIHByb3BlcnR5OiAiY2FsbGVlIiwKLSAgICAgICAgICBtZXNzYWdlOiAiYXJndW1lbnRzLmNhbGxlZSBpcyBkZXByZWNhdGVkIiwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgIHByb3BlcnR5OiAiX19kZWZpbmVHZXR0ZXJfXyIsCi0gICAgICAgICAgbWVzc2FnZTogIlBsZWFzZSB1c2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGluc3RlYWQuIiwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgIHByb3BlcnR5OiAiX19kZWZpbmVTZXR0ZXJfXyIsCi0gICAgICAgICAgbWVzc2FnZTogIlBsZWFzZSB1c2UgT2JqZWN0LmRlZmluZVByb3BlcnR5IGluc3RlYWQuIiwKLSAgICAgICAgfSwKLSAgICAgIF0sCi0gICAgICAibm8tc2VsZi1hc3NpZ24iOiAiZXJyb3IiLAotICAgICAgIm5vLXNlbGYtY29tcGFyZSI6ICJlcnJvciIsCi0gICAgICAibm8tc2VxdWVuY2VzIjogImVycm9yIiwKLSAgICAgICJuby10aHJvdy1saXRlcmFsIjogImVycm9yIiwKLSAgICAgICJuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uIjogIm9mZiIsCi0gICAgICAibm8tdW51c2VkLWV4cHJlc3Npb25zIjogWwotICAgICAgICAiZXJyb3IiLAotICAgICAgICB7Ci0gICAgICAgICAgYWxsb3dTaG9ydENpcmN1aXQ6IGZhbHNlLAotICAgICAgICAgIGFsbG93VGVybmFyeTogZmFsc2UsCi0gICAgICAgIH0sCi0gICAgICBdLAotICAgICAgIm5vLXVzZWxlc3MtY2FsbCI6ICJvZmYiLAotICAgICAgIm5vLXVzZWxlc3MtY29uY2F0IjogImVycm9yIiwKLSAgICAgICJuby11c2VsZXNzLWVzY2FwZSI6ICJlcnJvciIsCi0gICAgICAibm8tdXNlbGVzcy1yZXR1cm4iOiAiZXJyb3IiLAotICAgICAgIm5vLXZvaWQiOiAiZXJyb3IiLAotICAgICAgIm5vLXdpdGgiOiAiZXJyb3IiLAotICAgICAgIm5vLWJ1ZmZlci1jb25zdHJ1Y3RvciI6ICJlcnJvciIsCi0gICAgICByYWRpeDogImVycm9yIiwKLSAgICAgICJuby12YXIiOiAiZXJyb3IiLAotICAgICAgInByZWZlci1jb25zdCI6ICJlcnJvciIsCi0gICAgICAiYXJyb3ctYm9keS1zdHlsZSI6IFsiZXJyb3IiLCAiYXMtbmVlZGVkIl0sCi0gICAgICAiYXJyb3ctc3BhY2luZyI6ICJlcnJvciIsCi0gICAgICAibm8tY29uZnVzaW5nLWFycm93IjogWyJlcnJvciIsIHsgYWxsb3dQYXJlbnM6IHRydWUgfV0sCi0gICAgICB5b2RhOiAiZXJyb3IiLAotICAgICAgImNvbnN0cnVjdG9yLXN1cGVyIjogImVycm9yIiwKLSAgICAgICJyZXF1aXJlLWF3YWl0IjogImVycm9yIiwKLSAgICAgICJyZXF1aXJlLWF0b21pYy11cGRhdGVzIjogIm9mZiIsCi0gICAgfSwKLSAgfSwKLSAgewotICAgIGlnbm9yZXM6IFsidGVzdC8qKi8qLmpzIiwgImRvYy8qKi8qLmpzIiwgIm5vZGVfbW9kdWxlcy8qKi8qIiwgIi5wcmV0dGllcnJjLmpzIiwgImVzbGludC5jb25maWcubWpzIl0sCi0gIH0sCi0gIHsKLSAgICBmaWxlczogWyJlc2xpbnQuY29uZmlnLm1qcyJdLAotICAgIGxhbmd1YWdlT3B0aW9uczogewotICAgICAgc291cmNlVHlwZTogIm1vZHVsZSIsCi0gICAgfSwKLSAgfSwKLV07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvaW5kZXguanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvaW5kZXguanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZWFmM2MuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2luZGV4LmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHQgPSByZXF1aXJlKCcuL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgZ3QgPSByZXF1aXJlKCcuL2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbCcpOwotY29uc3Qgc3RyYXRlZ2llc01vZHVsZSA9IHJlcXVpcmUoJy4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5Jyk7Ci1jb25zdCBncmFwaCA9IHJlcXVpcmUoJy4vbGliL3N0cnVjdHVyZS9ncmFwaCcpOwotY29uc3QgZ3MgPSByZXF1aXJlKCcuL2xpYi9zdHJ1Y3R1cmUvaW8vZ3JhcGgtc2VyaWFsaXplcicpOwotY29uc3QgcmMgPSByZXF1aXJlKCcuL2xpYi9kcml2ZXIvcmVtb3RlLWNvbm5lY3Rpb24nKTsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi9saWIvcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgVHJhbnNsYXRvciA9IHJlcXVpcmUoJy4vbGliL3Byb2Nlc3MvdHJhbnNsYXRvcicpOwotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL2xpYi91dGlscycpOwotY29uc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IHJlcXVpcmUoJy4vbGliL2RyaXZlci9kcml2ZXItcmVtb3RlLWNvbm5lY3Rpb24nKTsKLWNvbnN0IFJlc3BvbnNlRXJyb3IgPSByZXF1aXJlKCcuL2xpYi9kcml2ZXIvcmVzcG9uc2UtZXJyb3InKTsKLWNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2RyaXZlci9jbGllbnQnKTsKLWNvbnN0IFJlc3VsdFNldCA9IHJlcXVpcmUoJy4vbGliL2RyaXZlci9yZXN1bHQtc2V0Jyk7Ci1jb25zdCBBdXRoZW50aWNhdG9yID0gcmVxdWlyZSgnLi9saWIvZHJpdmVyL2F1dGgvYXV0aGVudGljYXRvcicpOwotY29uc3QgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IgPSByZXF1aXJlKCcuL2xpYi9kcml2ZXIvYXV0aC9wbGFpbi10ZXh0LXNhc2wtYXV0aGVudGljYXRvcicpOwotY29uc3QgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlID0gcmVxdWlyZSgnLi9saWIvcHJvY2Vzcy9hbm9ueW1vdXMtdHJhdmVyc2FsJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICBkcml2ZXI6IHsKLSAgICBSZW1vdGVDb25uZWN0aW9uOiByYy5SZW1vdGVDb25uZWN0aW9uLAotICAgIFJlbW90ZVN0cmF0ZWd5OiByYy5SZW1vdGVTdHJhdGVneSwKLSAgICBSZW1vdGVUcmF2ZXJzYWw6IHJjLlJlbW90ZVRyYXZlcnNhbCwKLSAgICBSZXNwb25zZUVycm9yLAotICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24sCi0gICAgQ2xpZW50LAotICAgIFJlc3VsdFNldCwKLSAgICBhdXRoOiB7Ci0gICAgICBBdXRoZW50aWNhdG9yLAotICAgICAgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IsCi0gICAgfSwKLSAgfSwKLSAgcHJvY2VzczogewotICAgIEJ5dGVjb2RlLAotICAgIEVudW1WYWx1ZTogdC5FbnVtVmFsdWUsCi0gICAgUDogdC5QLAotICAgIFRleHRQOiB0LlRleHRQLAotICAgIFRyYXZlcnNhbDogdC5UcmF2ZXJzYWwsCi0gICAgVHJhdmVyc2FsU2lkZUVmZmVjdHM6IHQuVHJhdmVyc2FsU2lkZUVmZmVjdHMsCi0gICAgVHJhdmVyc2FsU3RyYXRlZ2llczogc3RyYXRlZ2llc01vZHVsZS5UcmF2ZXJzYWxTdHJhdGVnaWVzLAotICAgIFRyYXZlcnNhbFN0cmF0ZWd5OiBzdHJhdGVnaWVzTW9kdWxlLlRyYXZlcnNhbFN0cmF0ZWd5LAotICAgIFRyYXZlcnNlcjogdC5UcmF2ZXJzZXIsCi0gICAgYmFycmllcjogdC5iYXJyaWVyLAotICAgIGNhcmRpbmFsaXR5OiB0LmNhcmRpbmFsaXR5LAotICAgIGNvbHVtbjogdC5jb2x1bW4sCi0gICAgZGlyZWN0aW9uOiB0LmRpcmVjdGlvbiwKLSAgICBkdDogdC5kdCwKLSAgICBtZXJnZTogdC5tZXJnZSwKLSAgICBvcGVyYXRvcjogdC5vcGVyYXRvciwKLSAgICBvcmRlcjogdC5vcmRlciwKLSAgICBwaWNrOiB0LnBpY2ssCi0gICAgcG9wOiB0LnBvcCwKLSAgICBzY29wZTogdC5zY29wZSwKLSAgICB0OiB0LnQsCi0gICAgR3JhcGhUcmF2ZXJzYWw6IGd0LkdyYXBoVHJhdmVyc2FsLAotICAgIEdyYXBoVHJhdmVyc2FsU291cmNlOiBndC5HcmFwaFRyYXZlcnNhbFNvdXJjZSwKLSAgICBzdGF0aWNzOiBndC5zdGF0aWNzLAotICAgIFRyYW5zbGF0b3IsCi0gICAgdHJhdmVyc2FsOiBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsLAotICAgIEFub255bW91c1RyYXZlcnNhbFNvdXJjZSwKLSAgICB3aXRoT3B0aW9uczogdC53aXRoT3B0aW9ucywKLSAgfSwKLSAgc3RydWN0dXJlOiB7Ci0gICAgaW86IGdzLAotICAgIEVkZ2U6IGdyYXBoLkVkZ2UsCi0gICAgR3JhcGg6IGdyYXBoLkdyYXBoLAotICAgIFBhdGg6IGdyYXBoLlBhdGgsCi0gICAgUHJvcGVydHk6IGdyYXBoLlByb3BlcnR5LAotICAgIFZlcnRleDogZ3JhcGguVmVydGV4LAotICAgIFZlcnRleFByb3BlcnR5OiBncmFwaC5WZXJ0ZXhQcm9wZXJ0eSwKLSAgICB0b0xvbmc6IHV0aWxzLnRvTG9uZywKLSAgfSwKLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL2F1dGhlbnRpY2F0b3IuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL2F1dGhlbnRpY2F0b3IuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmN2MzYTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvYXV0aC9hdXRoZW50aWNhdG9yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotJ3VzZSBzdHJpY3QnOwotCi0vKiogQGFic3RyYWN0ICovCi1jbGFzcyBBdXRoZW50aWNhdG9yIHsKLSAgY29uc3RydWN0b3Iob3B0aW9ucykgewotICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEBhYnN0cmFjdAotICAgKiBFdmFsdWF0ZXMgdGhlIGNoYWxsZW5nZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHJldHVybnMgYXBwcm9wcmlhdGUgcmVzcG9uc2UuCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBjaGFsbGVuZ2UgQ2hhbGxlbmdlIHN0cmluZyBwcmVzZW50ZWQgYnkgdGhlIHNlcnZlci4KLSAgICovCi0gIGV2YWx1YXRlQ2hhbGxlbmdlKGNoYWxsZW5nZSkgewotICAgIHRocm93IG5ldyBFcnJvcignZXZhbHVhdGVDaGFsbGVuZ2Ugc2hvdWxkIGJlIGltcGxlbWVudGVkJyk7Ci0gIH0KLX0KLQotbW9kdWxlLmV4cG9ydHMgPSBBdXRoZW50aWNhdG9yOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvYXV0aC9tZWNoYW5pc21zL3Nhc2wtbWVjaGFuaXNtLWJhc2UuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL21lY2hhbmlzbXMvc2FzbC1tZWNoYW5pc20tYmFzZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUwYzNiOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL21lY2hhbmlzbXMvc2FzbC1tZWNoYW5pc20tYmFzZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0ndXNlIHN0cmljdCc7Ci0KLS8qKiBAYWJzdHJhY3QgKi8KLWNsYXNzIFNhc2xNZWNoYW5pc21CYXNlIHsKLSAgY29uc3RydWN0b3Iob3B0aW9ucykgewotICAgIHRoaXMuc2V0b3B0cyhvcHRpb25zKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBtZWNoYW5pc20KLSAgICovCi0gIGdldCBuYW1lKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgb3B0aW9ucyBmb3IgdGhlIG1lY2hhbmlzbQotICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIHNwZWNpZmljIHRvIHRoZSBtZWNoYW5pc20KLSAgICovCi0gIHNldG9wdHMob3B0aW9ucykgewotICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0KLSAgLyoqCi0gICAqIEBhYnN0cmFjdAotICAgKiBFdmFsdWF0ZXMgdGhlIGNoYWxsZW5nZSBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHJldHVybnMgYXBwcm9wcmlhdGUgcmVzcG9uc2UKLSAgICogQHBhcmFtIHtTdHJpbmd9IGNoYWxsZW5nZSBDaGFsbGVuZ2Ugc3RyaW5nIHByZXNlbnRlZCBieSB0aGUgc2VydmVyCi0gICAqLwotICBldmFsdWF0ZUNoYWxsZW5nZShjaGFsbGVuZ2UpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoJ2V2YWx1YXRlQ2hhbGxlbmdlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCcpOwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gU2FzbE1lY2hhbmlzbUJhc2U7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL21lY2hhbmlzbXMvc2FzbC1tZWNoYW5pc20tcGxhaW4uanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL21lY2hhbmlzbXMvc2FzbC1tZWNoYW5pc20tcGxhaW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxMzk0NWEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvYXV0aC9tZWNoYW5pc21zL3Nhc2wtbWVjaGFuaXNtLXBsYWluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLWNvbnN0IFNhc2xNZWNoYW5pc21CYXNlID0gcmVxdWlyZSgnLi9zYXNsLW1lY2hhbmlzbS1iYXNlJyk7Ci0KLWNsYXNzIFNhc2xNZWNoYW5pc21QbGFpbiBleHRlbmRzIFNhc2xNZWNoYW5pc21CYXNlIHsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgU2FzbE1lY2hhbmlzbVBsYWluLgotICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBtZWNoYW5pc20gb3B0aW9ucy4KLSAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLmF1dGh6aWRdIFRoZSBpZGVudGl0eSBvZiB0aGUgY2xpZW50LgotICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudXNlcm5hbWVdIFRoZSBpZGVudGl0eSBvZiB1c2VyIHdpdGggYWNjZXNzIHRvIHNlcnZlci4KLSAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBhc3N3b3JkXSBUaGUgcGFzc3dvcmQgb2YgdXNlciB3aXRoIGFjY2VzcyB0byBzZXJ2ZXIuCi0gICAqIEBjb25zdHJ1Y3RvcgotICAgKi8KLSAgY29uc3RydWN0b3Iob3B0aW9ucykgewotICAgIHN1cGVyKG9wdGlvbnMpOwotCi0gICAgaWYgKAotICAgICAgdGhpcy5fb3B0aW9ucy51c2VybmFtZSA9PT0gdW5kZWZpbmVkIHx8Ci0gICAgICB0aGlzLl9vcHRpb25zLnVzZXJuYW1lID09PSBudWxsIHx8Ci0gICAgICB0aGlzLl9vcHRpb25zLnVzZXJuYW1lLmxlbmd0aCA9PT0gMCB8fAotICAgICAgdGhpcy5fb3B0aW9ucy5wYXNzd29yZCA9PT0gdW5kZWZpbmVkIHx8Ci0gICAgICB0aGlzLl9vcHRpb25zLnBhc3N3b3JkID09PSBudWxsIHx8Ci0gICAgICB0aGlzLl9vcHRpb25zLnBhc3N3b3JkLmxlbmd0aCA9PT0gMAotICAgICkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGNyZWRlbnRpYWxzIGZvciBTQVNMIFBMQUlOIG1lY2hhbmlzbScpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBtZWNoYW5pc20KLSAgICovCi0gIGdldCBuYW1lKCkgewotICAgIHJldHVybiAnUExBSU4nOwotICB9Ci0KLSAgLyoqCi0gICAqIEV2YWx1YXRlcyB0aGUgY2hhbGxlbmdlIGZyb20gdGhlIHNlcnZlciBhbmQgcmV0dXJucyBhcHByb3ByaWF0ZSByZXNwb25zZS4KLSAgICogQHBhcmFtIHtTdHJpbmd9IGNoYWxsZW5nZSBDaGFsbGVuZ2Ugc3RyaW5nIHByZXNlbnRlZCBieSB0aGUgc2VydmVyLgotICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdmFsaWQgc2FzbCByZXNwb25zZSBvYmplY3QuCi0gICAqLwotICBldmFsdWF0ZUNoYWxsZW5nZShjaGFsbGVuZ2UpIHsKLSAgICBpZiAodGhpcy5faGFzSW5pdGlhbFJlc3BvbnNlKGNoYWxsZW5nZSkpIHsKLSAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoewotICAgICAgICBzYXNsTWVjaGFuaXNtOiB0aGlzLm5hbWUsCi0gICAgICAgIHNhc2w6IHRoaXMuX3Nhc2xBcmd1bWVudCh0aGlzLl9vcHRpb25zLmF1dGh6aWQsIHRoaXMuX29wdGlvbnMudXNlcm5hbWUsIHRoaXMuX29wdGlvbnMucGFzc3dvcmQpLAotICAgICAgfSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7Ci0gICAgICBzYXNsOiB0aGlzLl9zYXNsQXJndW1lbnQodGhpcy5fb3B0aW9ucy5hdXRoemlkLCB0aGlzLl9vcHRpb25zLnVzZXJuYW1lLCB0aGlzLl9vcHRpb25zLnBhc3N3b3JkKSwKLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZXMgYSBiYXNlNjQgZW5jb2RlZCBzYXNsIGFyZ3VtZW50IGJhc2VkIG9uIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLgotICAgKiBAcGFyYW0ge1N0cmluZ30gYXV0aHppZCBJZGVudGl0aXkgb2YgdGhlIGNsaWVudC4KLSAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXJuYW1lIFRoZSBpZGVudGl0eSBvZiB1c2VyIHdpdGggYWNjZXNzIHRvIHNlcnZlci4KLSAgICogQHBhcmFtIHtTdHJpbmd9IHBhc3N3b3JkIFRoZSBwYXNzd29yZCBvZiB1c2VyIHdpdGggYWNjZXNzIHRvIHNlcnZlci4KLSAgICovCi0gIF9zYXNsQXJndW1lbnQoYXV0aHppZCwgdXNlcm5hbWUsIHBhc3N3b3JkKSB7Ci0gICAgaWYgKGF1dGh6aWQgPT09IHVuZGVmaW5lZCB8fCBhdXRoemlkID09PSBudWxsKSB7Ci0gICAgICBhdXRoemlkID0gJyc7Ci0gICAgfQotICAgIGlmICh1c2VybmFtZSA9PT0gdW5kZWZpbmVkIHx8IHVzZXJuYW1lID09PSBudWxsKSB7Ci0gICAgICB1c2VybmFtZSA9ICcnOwotICAgIH0KLSAgICBpZiAocGFzc3dvcmQgPT09IHVuZGVmaW5lZCB8fCBwYXNzd29yZC5sZW5ndGggPT09IG51bGwpIHsKLSAgICAgIHBhc3N3b3JkID0gJyc7Ci0gICAgfQotCi0gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGAke2F1dGh6aWR9XDAke3VzZXJuYW1lfVwwJHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0Jyk7Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIGNoYWxsZW5nZSB0byBzZWUgaWYgd2UgaGF2ZSB0aGUgaW5pdGlhbCBzYXNsIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4KLSAgICogQHBhcmFtIHtTdHJpbmd9IGNoYWxsZW5nZSBUaGUgY2hhbGxlbmdlIHN0cmluZyBmcm9tIHRoZSBzZXJ2ZXIuCi0gICAqIEByZXR1cm4ge0Jvb2xlYW59Ci0gICAqLwotICBfaGFzSW5pdGlhbFJlc3BvbnNlKGNoYWxsZW5nZSkgewotICAgIGlmIChjaGFsbGVuZ2UgPT09IHVuZGVmaW5lZCB8fCBjaGFsbGVuZ2UgPT09IG51bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KLQotbW9kdWxlLmV4cG9ydHMgPSBTYXNsTWVjaGFuaXNtUGxhaW47CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL3BsYWluLXRleHQtc2FzbC1hdXRoZW50aWNhdG9yLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvYXV0aC9wbGFpbi10ZXh0LXNhc2wtYXV0aGVudGljYXRvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY2ODQ1YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL3BsYWluLXRleHQtc2FzbC1hdXRoZW50aWNhdG9yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBBdXRoZW50aWNhdG9yID0gcmVxdWlyZSgnLi9hdXRoZW50aWNhdG9yJyk7Ci1jb25zdCBTYXNsTWVjaGFuaXNtUGxhaW4gPSByZXF1aXJlKCcuL21lY2hhbmlzbXMvc2FzbC1tZWNoYW5pc20tcGxhaW4nKTsKLQotY2xhc3MgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IgZXh0ZW5kcyBBdXRoZW50aWNhdG9yIHsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IuCi0gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBVc2VybmFtZSB0byBsb2cgaW50byB0aGUgc2VydmVyLgotICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgUGFzc3dvcmQgZm9yIHRoZSB1c2VyLgotICAgKiBAcGFyYW0ge3N0cmluZ30gW2F1dGh6aWRdIE9wdGlvbmFsIGlkCi0gICAqIEBjb25zdHJ1Y3RvcgotICAgKi8KLSAgY29uc3RydWN0b3IodXNlcm5hbWUsIHBhc3N3b3JkLCBhdXRoemlkKSB7Ci0gICAgY29uc3Qgb3B0aW9ucyA9IHsKLSAgICAgIG1lY2hhbmlzbTogbmV3IFNhc2xNZWNoYW5pc21QbGFpbih7Ci0gICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSwKLSAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLAotICAgICAgICBhdXRoemlkOiBhdXRoemlkLAotICAgICAgfSksCi0gICAgfTsKLQotICAgIHN1cGVyKG9wdGlvbnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIEV2YWx1YXRlcyB0aGUgY2hhbGxlbmdlIGZyb20gdGhlIHNlcnZlciBhbmQgcmV0dXJucyBhcHByb3ByaWF0ZSByZXNwb25zZS4KLSAgICogQHBhcmFtIHtTdHJpbmd9IGNoYWxsZW5nZSBDaGFsbGVuZ2Ugc3RyaW5nIHByZXNlbnRlZCBieSB0aGUgc2VydmVyLgotICAgKiBAcmV0dXJuIHtPYmplY3R9IEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgdmFsaWQgc2FzbCByZXNwb25zZSBvYmplY3QuCi0gICAqLwotICBldmFsdWF0ZUNoYWxsZW5nZShjaGFsbGVuZ2UpIHsKLSAgICByZXR1cm4gdGhpcy5fb3B0aW9ucy5tZWNoYW5pc20uZXZhbHVhdGVDaGFsbGVuZ2UoY2hhbGxlbmdlKTsKLSAgfQotfQotCi1tb2R1bGUuZXhwb3J0cyA9IFBsYWluVGV4dFNhc2xBdXRoZW50aWNhdG9yOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvYXV0aC9zYXNsLWF1dGhlbnRpY2F0b3IuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL3Nhc2wtYXV0aGVudGljYXRvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkMzJjNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9hdXRoL3Nhc2wtYXV0aGVudGljYXRvci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgQXV0aGVudGljYXRvciA9IHJlcXVpcmUoJy4vYXV0aGVudGljYXRvcicpOwotCi1jbGFzcyBTYXNsQXV0aGVudGljYXRvciBleHRlbmRzIEF1dGhlbnRpY2F0b3IgewotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBTYXNsQXV0aGVudGljYXRvci4KLSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBUaGUgYXV0aGVudGljYXRpb24gb3B0aW9ucy4KLSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLm1lY2hhbmlzbV0gVGhlIG1lY2hhbmlzbSB0byBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGlvbi4KLSAgICogQGNvbnN0cnVjdG9yCi0gICAqLwotICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7Ci0gICAgc3VwZXIob3B0aW9ucyk7Ci0KLSAgICBpZiAob3B0aW9ucy5tZWNoYW5pc20gPT09IG51bGwgfHwgb3B0aW9ucy5tZWNoYW5pc20gPT09IHVuZGVmaW5lZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTYXNsIE1lY2hhbmlzbSBTcGVjaWZpZWQnKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogRXZhbHVhdGVzIHRoZSBjaGFsbGVuZ2UgZnJvbSB0aGUgc2VydmVyIGFuZCByZXR1cm5zIGFwcHJvcHJpYXRlIHJlc3BvbnNlLgotICAgKiBAcGFyYW0ge1N0cmluZ30gY2hhbGxlbmdlIENoYWxsZW5nZSBzdHJpbmcgcHJlc2VudGVkIGJ5IHRoZSBzZXJ2ZXIuCi0gICAqIEByZXR1cm4ge09iamVjdH0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSB2YWxpZCBzYXNsIHJlc3BvbnNlIG9iamVjdC4KLSAgICovCi0gIGV2YWx1YXRlQ2hhbGxlbmdlKGNoYWxsZW5nZSkgewotICAgIHJldHVybiB0aGlzLl9vcHRpb25zLm1lY2hhbmlzbS5ldmFsdWF0ZUNoYWxsZW5nZShjaGFsbGVuZ2UpOwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gU2FzbEF1dGhlbnRpY2F0b3I7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9jbGllbnQuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9jbGllbnQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzFhMWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvY2xpZW50LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAnTGljZW5zZScpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKLWNvbnN0IENvbm5lY3Rpb24gPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24nKTsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi4vcHJvY2Vzcy9ieXRlY29kZScpOwotCi0vKioKLSAqIEEge0BsaW5rIENsaWVudH0gY29udGFpbnMgbWV0aG9kcyB0byBzZW5kIG1lc3NhZ2VzIHRvIGEgR3JlbWxpbiBTZXJ2ZXIuCi0gKi8KLWNsYXNzIENsaWVudCB7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDbGllbnR9LgotICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSByZXNvdXJjZSB1cmkuCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy4KLSAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY2FdIFRydXN0ZWQgY2VydGlmaWNhdGVzLgotICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxCdWZmZXJ9IFtvcHRpb25zLmNlcnRdIFRoZSBjZXJ0aWZpY2F0ZSBrZXkuCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5taW1lVHlwZV0gVGhlIG1pbWUgdHlwZSB0byB1c2UuCi0gICAqIEBwYXJhbSB7U3RyaW5nfEJ1ZmZlcn0gW29wdGlvbnMucGZ4XSBUaGUgcHJpdmF0ZSBrZXksIGNlcnRpZmljYXRlLCBhbmQgQ0EgY2VydHMuCi0gICAqIEBwYXJhbSB7R3JhcGhTT05SZWFkZXJ9IFtvcHRpb25zLnJlYWRlcl0gVGhlIHJlYWRlciB0byB1c2UuCi0gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkXSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdmVyaWZ5IG9yIG5vdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlLgotICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudHJhdmVyc2FsU291cmNlXSBUaGUgdHJhdmVyc2FsIHNvdXJjZS4gRGVmYXVsdHMgdG86ICdnJy4KLSAgICogQHBhcmFtIHtHcmFwaFNPTldyaXRlcn0gW29wdGlvbnMud3JpdGVyXSBUaGUgd3JpdGVyIHRvIHVzZS4KLSAgICogQHBhcmFtIHtBdXRoZW50aWNhdG9yfSBbb3B0aW9ucy5hdXRoZW50aWNhdG9yXSBUaGUgYXV0aGVudGljYXRpb24gaGFuZGxlciB0byB1c2UuCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5oZWFkZXJzXSBBbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHRoZSBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWVzIGZvciB0aGUgaW5pdGlhbCByZXF1ZXN0LgotICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdF0gRGV0ZXJtaW5lcyBpZiBhIHVzZXIgYWdlbnQgd2lsbCBiZSBzZW50IGR1cmluZyBjb25uZWN0aW9uIGhhbmRzaGFrZS4gRGVmYXVsdHMgdG86IHRydWUKLSAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnByb2Nlc3Nvcl0gVGhlIG5hbWUgb2YgdGhlIG9wUHJvY2Vzc29yIHRvIHVzZSwgbGVhdmUgaXQgdW5kZWZpbmVkIG9yIHNldCAnc2Vzc2lvbicgd2hlbiBzZXNzaW9uIG1vZGUuCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5zZXNzaW9uXSBUaGUgc2Vzc2lvbklkIG9mIENsaWVudCBpbiBzZXNzaW9uIG1vZGUuIERlZmF1bHRzIHRvIG51bGwgbWVhbnMgc2Vzc2lvbi1sZXNzIENsaWVudC4KLSAgICogQHBhcmFtIHtodHRwLkFnZW50fSBbb3B0aW9ucy5hZ2VudF0gVGhlIGh0dHAuQWdlbnQgaW1wbGVtZW50YXRpb24gdG8gdXNlLgotICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZUNvbXByZXNzaW9uXSBFbmFibGUgcGVyLW1lc3NhZ2UgZGVmbGF0ZSBjb21wcmVzc2lvbi4gRGVmYXVsdHMgdG86IGZhbHNlLgotICAgKiBAY29uc3RydWN0b3IKLSAgICovCi0gIGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucyA9IHt9KSB7Ci0gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgaWYgKHRoaXMuX29wdGlvbnMucHJvY2Vzc29yID09PSAnc2Vzc2lvbicpIHsKLSAgICAgIC8vIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgJ3Nlc3Npb24nIHByb2Nlc3NvciBzZXR0aW5nCi0gICAgICB0aGlzLl9vcHRpb25zLnNlc3Npb24gPSBvcHRpb25zLnNlc3Npb24gfHwgdXRpbHMuZ2V0VXVpZCgpOwotICAgIH0KLSAgICBpZiAodGhpcy5fb3B0aW9ucy5zZXNzaW9uKSB7Ci0gICAgICAvLyByZS1hc3NpZ24gcHJvY2Vzc29yIHRvICdzZXNzaW9uJyB3aGVuIGluIHNlc3Npb24gbW9kZQotICAgICAgdGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgPSBvcHRpb25zLnByb2Nlc3NvciB8fCAnc2Vzc2lvbic7Ci0gICAgfQotICAgIHRoaXMuX2Nvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbih1cmwsIG9wdGlvbnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIE9wZW5zIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24gdG8gdGhlIEdyZW1saW4gU2VydmVyLCBpZiBpdCdzIG5vdCBhbHJlYWR5IG9wZW5lZC4KLSAgICogQHJldHVybnMge1Byb21pc2V9Ci0gICAqLwotICBvcGVuKCkgewotICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uLm9wZW4oKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBpcyBvcGVuCi0gICAqIEByZXR1cm5zIHtCb29sZWFufQotICAgKi8KLSAgZ2V0IGlzT3BlbigpIHsKLSAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5pc09wZW47Ci0gIH0KLQotICAvKioKLSAgICogQ29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgY3VycmVudCByZXF1ZXN0LgotICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBSZXF1ZXN0T3B0aW9ucwotICAgKiBAcHJvcGVydHkge1N0cmluZ30gcmVxdWVzdElkIC0gVXNlciBzcGVjaWZpZWQgcmVxdWVzdCBpZGVudGlmaWVyIHdoaWNoIG11c3QgYmUgYSBVVUlELgotICAgKiBAcHJvcGVydHkge051bWJlcn0gYmF0Y2hTaXplIC0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFBvd2VyIGNvbXBvbmVudCBpcyBwcmVzZW50LgotICAgKiBAcHJvcGVydHkge1N0cmluZ30gdXNlckFnZW50IC0gVGhlIHNpemUgaW4gd2hpY2ggdGhlIHJlc3VsdCBvZiBhIHJlcXVlc3QgaXMgdG8gYmUgJ2JhdGNoZWQnIGJhY2sgdG8gdGhlIGNsaWVudAotICAgKiBAcHJvcGVydHkge051bWJlcn0gZXZhbHVhdGlvblRpbWVvdXQgLSBUaGUgdGltZW91dCBmb3IgdGhlIGV2YWx1YXRpb24gb2YgdGhlIHJlcXVlc3QuCi0gICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgLSBJbmRpY2F0ZXMgd2hldGhlciBlbGVtZW50IHByb3BlcnRpZXMgc2hvdWxkIGJlIHJldHVybmVkIG9yIG5vdC4KLSAgICovCi0KLSAgLyoqCi0gICAqIFNlbmQgYSByZXF1ZXN0IHRvIHRoZSBHcmVtbGluIFNlcnZlciwgY2FuIHNlbmQgYSBzY3JpcHQgb3IgYnl0ZWNvZGUgc3RlcHMuCi0gICAqIEBwYXJhbSB7Qnl0ZWNvZGV8c3RyaW5nfSBtZXNzYWdlIFRoZSBieXRlY29kZSBvciBzY3JpcHQgdG8gc2VuZAotICAgKiBAcGFyYW0ge09iamVjdH0gW2JpbmRpbmdzXSBUaGUgc2NyaXB0IGJpbmRpbmdzLCBpZiBhbnkuCi0gICAqIEBwYXJhbSB7UmVxdWVzdE9wdGlvbnN9IFtyZXF1ZXN0T3B0aW9uc10gQ29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgY3VycmVudCByZXF1ZXN0LgotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KLSAgICovCi0gIHN1Ym1pdChtZXNzYWdlLCBiaW5kaW5ncywgcmVxdWVzdE9wdGlvbnMpIHsKLSAgICBjb25zdCByZXF1ZXN0SWRPdmVycmlkZSA9IHJlcXVlc3RPcHRpb25zICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3RJZDsKLSAgICBpZiAocmVxdWVzdElkT3ZlcnJpZGUpIHsKLSAgICAgIGRlbGV0ZSByZXF1ZXN0T3B0aW9uc1sncmVxdWVzdElkJ107Ci0gICAgfQotCi0gICAgY29uc3QgYXJncyA9IE9iamVjdC5hc3NpZ24oCi0gICAgICB7Ci0gICAgICAgIGdyZW1saW46IG1lc3NhZ2UsCi0gICAgICAgIGFsaWFzZXM6IHsgZzogdGhpcy5fb3B0aW9ucy50cmF2ZXJzYWxTb3VyY2UgfHwgJ2cnIH0sCi0gICAgICB9LAotICAgICAgcmVxdWVzdE9wdGlvbnMsCi0gICAgKTsKLQotICAgIGlmICh0aGlzLl9vcHRpb25zLnNlc3Npb24gJiYgdGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgPT09ICdzZXNzaW9uJykgewotICAgICAgYXJnc1snc2Vzc2lvbiddID0gdGhpcy5fb3B0aW9ucy5zZXNzaW9uOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgQnl0ZWNvZGUpIHsKLSAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNlc3Npb24gJiYgdGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgPT09ICdzZXNzaW9uJykgewotICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJtaXQoJ3Nlc3Npb24nLCAnYnl0ZWNvZGUnLCBhcmdzLCByZXF1ZXN0SWRPdmVycmlkZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJtaXQoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIGFyZ3MsIHJlcXVlc3RJZE92ZXJyaWRlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykgewotICAgICAgYXJnc1snYmluZGluZ3MnXSA9IGJpbmRpbmdzOwotICAgICAgYXJnc1snbGFuZ3VhZ2UnXSA9ICdncmVtbGluLWdyb292eSc7Ci0gICAgICBhcmdzWydhY2NlcHQnXSA9IHRoaXMuX2Nvbm5lY3Rpb24ubWltZVR5cGU7Ci0gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJtaXQodGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgfHwgJycsICdldmFsJywgYXJncywgcmVxdWVzdElkT3ZlcnJpZGUpOwotICAgIH0KLSAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtZXNzYWdlIG11c3QgYmUgb2YgdHlwZSBCeXRlY29kZSBvciBzdHJpbmcnKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kIGEgcmVxdWVzdCB0byB0aGUgR3JlbWxpbiBTZXJ2ZXIgYW5kIHJlY2VpdmUgYSBzdHJlYW0gZm9yIHRoZSByZXN1bHRzLCBjYW4gc2VuZCBhIHNjcmlwdCBvciBieXRlY29kZSBzdGVwcy4KLSAgICogQHBhcmFtIHtCeXRlY29kZXxzdHJpbmd9IG1lc3NhZ2UgVGhlIGJ5dGVjb2RlIG9yIHNjcmlwdCB0byBzZW5kCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbYmluZGluZ3NdIFRoZSBzY3JpcHQgYmluZGluZ3MsIGlmIGFueS4KLSAgICogQHBhcmFtIHtSZXF1ZXN0T3B0aW9uc30gW3JlcXVlc3RPcHRpb25zXSBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QuCi0gICAqIEByZXR1cm5zIHtSZWFkYWJsZVN0cmVhbX0KLSAgICovCi0gIHN0cmVhbShtZXNzYWdlLCBiaW5kaW5ncywgcmVxdWVzdE9wdGlvbnMpIHsKLSAgICBjb25zdCByZXF1ZXN0SWRPdmVycmlkZSA9IHJlcXVlc3RPcHRpb25zICYmIHJlcXVlc3RPcHRpb25zLnJlcXVlc3RJZDsKLSAgICBpZiAocmVxdWVzdElkT3ZlcnJpZGUpIHsKLSAgICAgIGRlbGV0ZSByZXF1ZXN0T3B0aW9uc1sncmVxdWVzdElkJ107Ci0gICAgfQotCi0gICAgY29uc3QgYXJncyA9IE9iamVjdC5hc3NpZ24oCi0gICAgICB7Ci0gICAgICAgIGdyZW1saW46IG1lc3NhZ2UsCi0gICAgICAgIGFsaWFzZXM6IHsgZzogdGhpcy5fb3B0aW9ucy50cmF2ZXJzYWxTb3VyY2UgfHwgJ2cnIH0sCi0gICAgICB9LAotICAgICAgcmVxdWVzdE9wdGlvbnMsCi0gICAgKTsKLQotICAgIGlmICh0aGlzLl9vcHRpb25zLnNlc3Npb24gJiYgdGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgPT09ICdzZXNzaW9uJykgewotICAgICAgYXJnc1snc2Vzc2lvbiddID0gdGhpcy5fb3B0aW9ucy5zZXNzaW9uOwotICAgIH0KLQotICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgQnl0ZWNvZGUpIHsKLSAgICAgIGlmICh0aGlzLl9vcHRpb25zLnNlc3Npb24gJiYgdGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgPT09ICdzZXNzaW9uJykgewotICAgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdHJlYW0oJ3Nlc3Npb24nLCAnYnl0ZWNvZGUnLCBhcmdzLCByZXF1ZXN0SWRPdmVycmlkZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdHJlYW0oJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIGFyZ3MsIHJlcXVlc3RJZE92ZXJyaWRlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJykgewotICAgICAgYXJnc1snYmluZGluZ3MnXSA9IGJpbmRpbmdzOwotICAgICAgYXJnc1snbGFuZ3VhZ2UnXSA9ICdncmVtbGluLWdyb292eSc7Ci0gICAgICBhcmdzWydhY2NlcHQnXSA9IHRoaXMuX2Nvbm5lY3Rpb24ubWltZVR5cGU7Ci0gICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdHJlYW0odGhpcy5fb3B0aW9ucy5wcm9jZXNzb3IgfHwgJycsICdldmFsJywgYXJncywgcmVxdWVzdElkT3ZlcnJpZGUpOwotICAgIH0KLSAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtZXNzYWdlIG11c3QgYmUgb2YgdHlwZSBCeXRlY29kZSBvciBzdHJpbmcnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbgotICAgKiBzZW5kIHNlc3Npb24gY2xvc2UgcmVxdWVzdCBiZWZvcmUgY29ubmVjdGlvbiBjbG9zZSBpZiBzZXNzaW9uIG1vZGUKLSAgICogQHJldHVybnMge1Byb21pc2V9Ci0gICAqLwotICBjbG9zZSgpIHsKLSAgICBpZiAodGhpcy5fb3B0aW9ucy5zZXNzaW9uICYmIHRoaXMuX29wdGlvbnMucHJvY2Vzc29yID09PSAnc2Vzc2lvbicpIHsKLSAgICAgIGNvbnN0IGFyZ3MgPSB7IHNlc3Npb246IHRoaXMuX29wdGlvbnMuc2Vzc2lvbiB9OwotICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uc3VibWl0KHRoaXMuX29wdGlvbnMucHJvY2Vzc29yLCAnY2xvc2UnLCBhcmdzLCBudWxsKS50aGVuKCgpID0+IHRoaXMuX2Nvbm5lY3Rpb24uY2xvc2UoKSk7Ci0gICAgfQotICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uLmNsb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciB0byB0aGUgY29ubmVjdGlvbgotICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnQgVGhlIGV2ZW50IG5hbWUgdGhhdCB5b3Ugd2FudCB0byBsaXN0ZW4gdG8uCi0gICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBldmVudCBvY2N1cnMuCi0gICAqLwotICBhZGRMaXN0ZW5lcihldmVudCwgaGFuZGxlcikgewotICAgIHRoaXMuX2Nvbm5lY3Rpb24ub24oZXZlbnQsIGhhbmRsZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZXMgYSBwcmV2aW93c2x5IGFkZGVkIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBjb25uZWN0aW9uCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZSB0aGF0IHlvdSB3YW50IHRvIGxpc3RlbiB0by4KLSAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgZXZlbnQgaGFuZGxlciB0byBiZSByZW1vdmVkLgotICAgKi8KLSAgcmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIpIHsKLSAgICB0aGlzLl9jb25uZWN0aW9uLnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTsKLSAgfQotfQotCi1tb2R1bGUuZXhwb3J0cyA9IENsaWVudDsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL2Nvbm5lY3Rpb24uanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9jb25uZWN0aW9uLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzk3M2I5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL2Nvbm5lY3Rpb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjcgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci1jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudGVtaXR0ZXIzJyk7Ci1jb25zdCBTdHJlYW0gPSByZXF1aXJlKCdyZWFkYWJsZS1zdHJlYW0nKTsKLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTsKLWNvbnN0IHsgRGVmZXJyZWRQcm9taXNlIH0gPSB1dGlsczsKLWNvbnN0IHNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuLi9zdHJ1Y3R1cmUvaW8vZ3JhcGgtc2VyaWFsaXplcicpOwotY29uc3QgeyBncmFwaEJpbmFyeVJlYWRlciwgZ3JhcGhCaW5hcnlXcml0ZXIgfSA9IHJlcXVpcmUoJy4uL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IFJlc3VsdFNldCA9IHJlcXVpcmUoJy4vcmVzdWx0LXNldCcpOwotY29uc3QgUmVzcG9uc2VFcnJvciA9IHJlcXVpcmUoJy4vcmVzcG9uc2UtZXJyb3InKTsKLQotY29uc3QgcmVzcG9uc2VTdGF0dXNDb2RlID0gewotICBzdWNjZXNzOiAyMDAsCi0gIG5vQ29udGVudDogMjA0LAotICBwYXJ0aWFsQ29udGVudDogMjA2LAotICBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTogNDA3LAotfTsKLQotY29uc3QgZGVmYXVsdE1pbWVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wJzsKLWNvbnN0IGdyYXBoU09OMk1pbWVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbic7Ci1jb25zdCBncmFwaEJpbmFyeU1pbWVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wJzsKLQotY29uc3QgdXVpZFBhdHRlcm4gPSAnWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JzsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGNvbm5lY3Rpb24gdG8gYSBHcmVtbGluIFNlcnZlci4KLSAqLwotY2xhc3MgQ29ubmVjdGlvbiBleHRlbmRzIEV2ZW50RW1pdHRlciB7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb25uZWN0aW9ufS4KLSAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgcmVzb3VyY2UgdXJpLgotICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuCi0gICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmNhXSBUcnVzdGVkIGNlcnRpZmljYXRlcy4KLSAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8QnVmZmVyfSBbb3B0aW9ucy5jZXJ0XSBUaGUgY2VydGlmaWNhdGUga2V5LgotICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMubWltZVR5cGVdIFRoZSBtaW1lIHR5cGUgdG8gdXNlLgotICAgKiBAcGFyYW0ge1N0cmluZ3xCdWZmZXJ9IFtvcHRpb25zLnBmeF0gVGhlIHByaXZhdGUga2V5LCBjZXJ0aWZpY2F0ZSwgYW5kIENBIGNlcnRzLgotICAgKiBAcGFyYW0ge0dyYXBoU09OUmVhZGVyfSBbb3B0aW9ucy5yZWFkZXJdIFRoZSByZWFkZXIgdG8gdXNlLgotICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZF0gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHZlcmlmeSBvciBub3QgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4KLSAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnRyYXZlcnNhbFNvdXJjZV0gVGhlIHRyYXZlcnNhbCBzb3VyY2UuIERlZmF1bHRzIHRvOiAnZycuCi0gICAqIEBwYXJhbSB7R3JhcGhTT05Xcml0ZXJ9IFtvcHRpb25zLndyaXRlcl0gVGhlIHdyaXRlciB0byB1c2UuCi0gICAqIEBwYXJhbSB7QXV0aGVudGljYXRvcn0gW29wdGlvbnMuYXV0aGVudGljYXRvcl0gVGhlIGF1dGhlbnRpY2F0aW9uIGhhbmRsZXIgdG8gdXNlLgotICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuaGVhZGVyc10gQW4gYXNzb2NpYXRpdmUgYXJyYXkgY29udGFpbmluZyB0aGUgYWRkaXRpb25hbCBoZWFkZXIga2V5L3ZhbHVlcyBmb3IgdGhlIGluaXRpYWwgcmVxdWVzdC4KLSAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5lbmFibGVVc2VyQWdlbnRPbkNvbm5lY3RdIERldGVybWluZXMgaWYgYSB1c2VyIGFnZW50IHdpbGwgYmUgc2VudCBkdXJpbmcgY29ubmVjdGlvbiBoYW5kc2hha2UuIERlZmF1bHRzIHRvOiB0cnVlCi0gICAqIEBwYXJhbSB7aHR0cC5BZ2VudH0gW29wdGlvbnMuYWdlbnRdIFRoZSBodHRwLkFnZW50IGltcGxlbWVudGF0aW9uIHRvIHVzZS4KLSAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5lbmFibGVDb21wcmVzc2lvbl0gRW5hYmxlIHBlci1tZXNzYWdlIGRlZmxhdGUgY29tcHJlc3Npb24uIERlZmF1bHRzIHRvOiBmYWxzZS4KLSAgICogQGNvbnN0cnVjdG9yCi0gICAqLwotICBjb25zdHJ1Y3Rvcih1cmwsIG9wdGlvbnMpIHsKLSAgICBzdXBlcigpOwotCi0gICAgdGhpcy51cmwgPSB1cmw7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBNSU1FIHR5cGUuCi0gICAgICogQHR5cGUge1N0cmluZ30KLSAgICAgKi8KLSAgICB0aGlzLm1pbWVUeXBlID0gb3B0aW9ucy5taW1lVHlwZSB8fCBkZWZhdWx0TWltZVR5cGU7Ci0KLSAgICAvLyBBIG1hcCBjb250YWluaW5nIHRoZSByZXF1ZXN0IGlkIGFuZCB0aGUgaGFuZGxlci4gVGhlIGlkIHNob3VsZCBiZSBpbiBsb3dlciBjYXNlIHRvIHByZXZlbnQgc3RyaW5nIGNvbXBhcmlzb24gaXNzdWVzLgotICAgIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMgPSB7fTsKLSAgICB0aGlzLl9yZWFkZXIgPSBvcHRpb25zLnJlYWRlciB8fCB0aGlzLiNnZXREZWZhdWx0UmVhZGVyKHRoaXMubWltZVR5cGUpOwotICAgIHRoaXMuX3dyaXRlciA9IG9wdGlvbnMud3JpdGVyIHx8IHRoaXMuI2dldERlZmF1bHRXcml0ZXIodGhpcy5taW1lVHlwZSk7Ci0gICAgdGhpcy5fb3BlblByb21pc2UgPSBudWxsOwotICAgIHRoaXMuX29wZW5DYWxsYmFjayA9IG51bGw7Ci0gICAgdGhpcy5fY2xvc2VQcm9taXNlID0gbnVsbDsKLSAgICB0aGlzLl9jbG9zZUNhbGxiYWNrID0gbnVsbDsKLQotICAgIHRoaXMuX2hlYWRlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5taW1lVHlwZS5sZW5ndGgpICsgdGhpcy5taW1lVHlwZTsgLy8gVE9ETzogd2hhdCBpZiBtaW1lVHlwZS5sZW5ndGggPiAyNTUKLSAgICB0aGlzLl9oZWFkZXJfYnVmID0gQnVmZmVyLmZyb20odGhpcy5faGVhZGVyKTsKLSAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOwotICAgIHRoaXMudHJhdmVyc2FsU291cmNlID0gb3B0aW9ucy50cmF2ZXJzYWxTb3VyY2UgfHwgJ2cnOwotICAgIHRoaXMuX2F1dGhlbnRpY2F0b3IgPSBvcHRpb25zLmF1dGhlbnRpY2F0b3I7Ci0gICAgdGhpcy5fZW5hYmxlVXNlckFnZW50T25Db25uZWN0ID0gb3B0aW9ucy5lbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgIT09IGZhbHNlOwotICAgIHRoaXMuX2VuYWJsZUNvbXByZXNzaW9uID0gdGhpcy5vcHRpb25zLmVuYWJsZUNvbXByZXNzaW9uIHx8IGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIE9wZW5zIHRoZSBjb25uZWN0aW9uLCBpZiBpdHMgbm90IGFscmVhZHkgb3BlbmVkLgotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KLSAgICovCi0gIGFzeW5jIG9wZW4oKSB7Ci0gICAgaWYgKHRoaXMuaXNPcGVuKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh0aGlzLl9vcGVuUHJvbWlzZSkgewotICAgICAgcmV0dXJuIHRoaXMuX29wZW5Qcm9taXNlOwotICAgIH0KLQotICAgIHRoaXMuX29wZW5Qcm9taXNlID0gRGVmZXJyZWRQcm9taXNlKCk7Ci0KLSAgICB0aGlzLmVtaXQoJ2xvZycsICd3cyBvcGVuJyk7Ci0gICAgbGV0IGhlYWRlcnMgPSB0aGlzLm9wdGlvbnMuaGVhZGVyczsKLSAgICBpZiAodGhpcy5fZW5hYmxlVXNlckFnZW50T25Db25uZWN0KSB7Ci0gICAgICBpZiAoIWhlYWRlcnMpIHsKLSAgICAgICAgaGVhZGVycyA9IFtdOwotICAgICAgfQotCi0gICAgICBjb25zdCB1c2VyQWdlbnQgPSBhd2FpdCB1dGlscy5nZXRVc2VyQWdlbnQoKTsKLSAgICAgIGlmICh1c2VyQWdlbnQgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBoZWFkZXJzW3V0aWxzLmdldFVzZXJBZ2VudEhlYWRlcigpXSA9IGF3YWl0IHV0aWxzLmdldFVzZXJBZ2VudCgpOwotICAgICAgfQotICAgIH0KLSAgICAvLyBBbGwgdGhlc2Ugb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIHRoZSBgd3NgIHBhY2thZ2UncyBjb25zdHJ1Y3RvciwgYnV0IG5vdCB0aGUgZ2xvYmFsIFdlYlNvY2tldCBjbGFzcwotICAgIGNvbnN0IHdzU3BlY2lmaWNPcHRpb25zID0gbmV3IFNldChbCi0gICAgICAnaGVhZGVycycsCi0gICAgICAnY2EnLAotICAgICAgJ2NlcnQnLAotICAgICAgJ3BmeCcsCi0gICAgICAncmVqZWN0VW5hdXRob3JpemVkJywKLSAgICAgICdhZ2VudCcsCi0gICAgICAncGVyTWVzc2FnZURlZmxhdGUnLAotICAgIF0pOwotICAgIC8vIENoZWNrIGlmIGFueSBgd3NgIHNwZWNpZmljIG9wdGlvbnMgYXJlIHByb3ZpZGVkIGFuZCBhcmUgbm9uLW51bGwgLyBub24tdW5kZWZpbmVkCi0gICAgY29uc3QgaGFzV3NTcGVjaWZpY09wdGlvbnMgPQotICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5vcHRpb25zKS5zb21lKAotICAgICAgICAoW2tleSwgdmFsdWVdKSA9PiB3c1NwZWNpZmljT3B0aW9ucy5oYXMoa2V5KSAmJiAhW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsdWUpLAotICAgICAgKSB8fAotICAgICAgdGhpcy5fZW5hYmxlQ29tcHJlc3Npb24gfHwgLy8gd2UgbmVlZCB0byBjaGVjayB0aGUgcHJlc2VuY2Ugb2YgdGhpcyB2YXJpYWJsZSBhbmQgcGFzcyB0aGlzIGludG8gd3MKLSAgICAgIHRoaXMuX2VuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDsgLy8gZ2xvYmFsIHdlYnNvY2tldCB3aWxsIHNlbmQgIm5vZGUiIGFzIHVzZXIgYWdlbnQgYnkgZGVmYXVsdCB3aGljaCBkb2Vzbid0IGNvbXBseSB3aXRoIEdyZW1saW4KLSAgICAvLyBPbmx5IHVzZSB0aGUgZ2xvYmFsIHdlYnNvY2tldCBpZiB3ZSBkb24ndCBoYXZlIGFueSB1bnN1cHBvcnRlZCBvcHRpb25zCi0gICAgY29uc3QgdXNlR2xvYmFsV2ViU29ja2V0ID0gIWhhc1dzU3BlY2lmaWNPcHRpb25zICYmIGdsb2JhbFRoaXMuV2ViU29ja2V0OwotICAgIGNvbnN0IFdlYlNvY2tldCA9IHVzZUdsb2JhbFdlYlNvY2tldCB8fCAoYXdhaXQgaW1wb3J0KCd3cycpKS5kZWZhdWx0OwotCi0gICAgdGhpcy5fd3MgPSBuZXcgV2ViU29ja2V0KAotICAgICAgdGhpcy51cmwsCi0gICAgICAhdXNlR2xvYmFsV2ViU29ja2V0Ci0gICAgICAgID8gewotICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycywKLSAgICAgICAgICAgIGNhOiB0aGlzLm9wdGlvbnMuY2EsCi0gICAgICAgICAgICBjZXJ0OiB0aGlzLm9wdGlvbnMuY2VydCwKLSAgICAgICAgICAgIHBmeDogdGhpcy5vcHRpb25zLnBmeCwKLSAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogdGhpcy5vcHRpb25zLnJlamVjdFVuYXV0aG9yaXplZCwKLSAgICAgICAgICAgIGFnZW50OiB0aGlzLm9wdGlvbnMuYWdlbnQsCi0gICAgICAgICAgICBwZXJNZXNzYWdlRGVmbGF0ZTogdGhpcy5fZW5hYmxlQ29tcHJlc3Npb24sCi0gICAgICAgICAgfQotICAgICAgICA6IHVuZGVmaW5lZCwKLSAgICApOwotCi0gICAgaWYgKCdiaW5hcnlUeXBlJyBpbiB0aGlzLl93cykgewotICAgICAgdGhpcy5fd3MuYmluYXJ5VHlwZSA9ICdhcnJheWJ1ZmZlcic7Ci0gICAgfQotCi0gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2hhbmRsZU9wZW4pOwotICAgIHRoaXMuX3dzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jaGFuZGxlRXJyb3IpOwotICAgIC8vIE9ubHkgYXR0YWNoIHVuZXhwZWN0ZWQtcmVzcG9uc2UgbGlzdGVuZXIgaWYgV2ViU29ja2V0IHN1cHBvcnRzIC5vbigpIG1ldGhvZAotICAgIC8vIEJyb3dzZXIgV2ViU29ja2V0IGRvZXMgbm90IGhhdmUgdGhpcyBldmVudCBhbmQgLm9uKCkgbWV0aG9kCi0gICAgaWYgKHRoaXMuX3dzICYmICdvbicgaW4gdGhpcy5fd3MpIHsKLSAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbGlzdGVuZXIgbmVlZHMgdG8gdXNlIGAub25gIGFuZCBgLm9mZmAgYmVjYXVzZSB0aGUgYHdzYCBwYWNrYWdlJ3MgYWRkRXZlbnRMaXN0ZW5lciBvbmx5IGFjY2VwdHMgY2VydGFpbiBldmVudCB0eXBlcwotICAgICAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9ibG9iLzguMTYuMC9saWIvZXZlbnQtdGFyZ2V0LmpzI0wyMDItTDI0MQotICAgICAgdGhpcy5fd3Mub24oJ3VuZXhwZWN0ZWQtcmVzcG9uc2UnLCB0aGlzLiNoYW5kbGVVbmV4cGVjdGVkUmVzcG9uc2UpOwotICAgIH0KLSAgICB0aGlzLl93cy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jaGFuZGxlTWVzc2FnZSk7Ci0gICAgdGhpcy5fd3MuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNoYW5kbGVDbG9zZSk7Ci0gICAgcmV0dXJuIGF3YWl0IHRoaXMuX29wZW5Qcm9taXNlOwotICB9Ci0KLSAgLyoqIEBvdmVycmlkZSAqLwotICBzdWJtaXQocHJvY2Vzc29yLCBvcCwgYXJncywgcmVxdWVzdElkKSB7Ci0gICAgLy8gVElOS0VSUE9QLTI4NDc6IFVzZSBsb3dlciBjYXNlIHRvIHByZXZlbnQgc3RyaW5nIGNvbXBhcmlzb24gaXNzdWVzLgotICAgIGNvbnN0IHJpZCA9IChyZXF1ZXN0SWQgfHwgdXRpbHMuZ2V0VXVpZCgpKS50b0xvd2VyQ2FzZSgpOwotICAgIGlmICghcmlkLm1hdGNoKHV1aWRQYXR0ZXJuKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCByZXF1ZXN0SWQgIicgKyByaWQgKyAnIiBpcyBub3QgYSB2YWxpZCBVVUlELicpOwotICAgIH0KLQotICAgIHJldHVybiB0aGlzLm9wZW4oKS50aGVuKAotICAgICAgKCkgPT4KLSAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewotICAgICAgICAgIGlmIChvcCAhPT0gJ2F1dGhlbnRpY2F0aW9uJykgewotICAgICAgICAgICAgdGhpcy5fcmVzcG9uc2VIYW5kbGVyc1tyaWRdID0gewotICAgICAgICAgICAgICBjYWxsYmFjazogKGVyciwgcmVzdWx0KSA9PiAoZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKHJlc3VsdCkpLAotICAgICAgICAgICAgICByZXN1bHQ6IG51bGwsCi0gICAgICAgICAgICB9OwotICAgICAgICAgIH0KLQotICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7Ci0gICAgICAgICAgICByZXF1ZXN0SWQ6IHJpZCwKLSAgICAgICAgICAgIG9wOiBvcCB8fCAnYnl0ZWNvZGUnLAotICAgICAgICAgICAgLy8gaWYgdXNpbmcgb3AgZXZhbCBuZWVkIHRvIGVuc3VyZSBwcm9jZXNzb3Igc3RheXMgdW5zZXQgaWYgY2FsbGVyIGRpZG4ndCBzZXQgaXQuCi0gICAgICAgICAgICBwcm9jZXNzb3I6ICFwcm9jZXNzb3IgJiYgb3AgIT09ICdldmFsJyA/ICd0cmF2ZXJzYWwnIDogcHJvY2Vzc29yLAotICAgICAgICAgICAgYXJnczogYXJncyB8fCB7fSwKLSAgICAgICAgICB9OwotCi0gICAgICAgICAgY29uc3QgcmVxdWVzdF9idWYgPSB0aGlzLl93cml0ZXIud3JpdGVSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB1dGlscy50b0FycmF5QnVmZmVyKEJ1ZmZlci5jb25jYXQoW3RoaXMuX2hlYWRlcl9idWYsIHJlcXVlc3RfYnVmXSkpOwotICAgICAgICAgIHRoaXMuX3dzLnNlbmQobWVzc2FnZSk7Ci0gICAgICAgIH0pLAotICAgICk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIHN0cmVhbShwcm9jZXNzb3IsIG9wLCBhcmdzLCByZXF1ZXN0SWQpIHsKLSAgICAvLyBUSU5LRVJQT1AtMjg0NzogVXNlIGxvd2VyIGNhc2UgdG8gcHJldmVudCBzdHJpbmcgY29tcGFyaXNvbiBpc3N1ZXMuCi0gICAgY29uc3QgcmlkID0gKHJlcXVlc3RJZCB8fCB1dGlscy5nZXRVdWlkKCkpLnRvTG93ZXJDYXNlKCk7Ci0gICAgaWYgKCFyaWQubWF0Y2godXVpZFBhdHRlcm4pKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIHJlcXVlc3RJZCAiJyArIHJpZCArICciIGlzIG5vdCBhIHZhbGlkIFVVSUQuJyk7Ci0gICAgfQotCi0gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSBuZXcgU3RyZWFtLlJlYWRhYmxlKHsKLSAgICAgIG9iamVjdE1vZGU6IHRydWUsCi0gICAgICByZWFkKCkge30sCi0gICAgfSk7Ci0KLSAgICB0aGlzLl9yZXNwb25zZUhhbmRsZXJzW3JpZF0gPSB7Ci0gICAgICBjYWxsYmFjazogKGVycikgPT4gKGVyciA/IHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koZXJyKSA6IHJlYWRhYmxlU3RyZWFtLnB1c2gobnVsbCkpLAotICAgICAgcmVzdWx0OiByZWFkYWJsZVN0cmVhbSwKLSAgICB9OwotCi0gICAgdGhpcy5vcGVuKCkKLSAgICAgIC50aGVuKCgpID0+IHsKLSAgICAgICAgY29uc3QgcmVxdWVzdCA9IHsKLSAgICAgICAgICByZXF1ZXN0SWQ6IHJpZCwKLSAgICAgICAgICBvcDogb3AgfHwgJ2J5dGVjb2RlJywKLSAgICAgICAgICAvLyBpZiB1c2luZyBvcCBldmFsIG5lZWQgdG8gZW5zdXJlIHByb2Nlc3NvciBzdGF5cyB1bnNldCBpZiBjYWxsZXIgZGlkbid0IHNldCBpdC4KLSAgICAgICAgICBwcm9jZXNzb3I6ICFwcm9jZXNzb3IgJiYgb3AgIT09ICdldmFsJyA/ICd0cmF2ZXJzYWwnIDogcHJvY2Vzc29yLAotICAgICAgICAgIGFyZ3M6IGFyZ3MgfHwge30sCi0gICAgICAgIH07Ci0KLSAgICAgICAgY29uc3QgcmVxdWVzdF9idWYgPSB0aGlzLl93cml0ZXIud3JpdGVSZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICBjb25zdCBtZXNzYWdlID0gdXRpbHMudG9BcnJheUJ1ZmZlcihCdWZmZXIuY29uY2F0KFt0aGlzLl9oZWFkZXJfYnVmLCByZXF1ZXN0X2J1Zl0pKTsKLSAgICAgICAgdGhpcy5fd3Muc2VuZChtZXNzYWdlKTsKLSAgICAgIH0pCi0gICAgICAuY2F0Y2goKGVycikgPT4gcmVhZGFibGVTdHJlYW0uZGVzdHJveShlcnIpKTsKLQotICAgIHJldHVybiByZWFkYWJsZVN0cmVhbTsKLSAgfQotCi0gICNnZXREZWZhdWx0UmVhZGVyKG1pbWVUeXBlKSB7Ci0gICAgaWYgKG1pbWVUeXBlID09PSBncmFwaEJpbmFyeU1pbWVUeXBlKSB7Ci0gICAgICByZXR1cm4gZ3JhcGhCaW5hcnlSZWFkZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVUeXBlID09PSBncmFwaFNPTjJNaW1lVHlwZSA/IG5ldyBzZXJpYWxpemVyLkdyYXBoU09OMlJlYWRlcigpIDogbmV3IHNlcmlhbGl6ZXIuR3JhcGhTT05SZWFkZXIoKTsKLSAgfQotCi0gICNnZXREZWZhdWx0V3JpdGVyKG1pbWVUeXBlKSB7Ci0gICAgaWYgKG1pbWVUeXBlID09PSBncmFwaEJpbmFyeU1pbWVUeXBlKSB7Ci0gICAgICByZXR1cm4gZ3JhcGhCaW5hcnlXcml0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pbWVUeXBlID09PSBncmFwaFNPTjJNaW1lVHlwZSA/IG5ldyBzZXJpYWxpemVyLkdyYXBoU09OMldyaXRlcigpIDogbmV3IHNlcmlhbGl6ZXIuR3JhcGhTT05Xcml0ZXIoKTsKLSAgfQotCi0gICNoYW5kbGVPcGVuID0gKCkgPT4gewotICAgIHRoaXMuX29wZW5Qcm9taXNlLnJlc29sdmUoKTsKLSAgICB0aGlzLmlzT3BlbiA9IHRydWU7Ci0gIH07Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSB7Q2xpZW50UmVxdWVzdH0gX3JlcQotICAgKiBAcGFyYW0ge0luY29taW5nTWVzc2FnZX0gcmVzCi0gICAqLwotICAjaGFuZGxlVW5leHBlY3RlZFJlc3BvbnNlID0gYXN5bmMgKF9yZXEsIHJlcykgPT4gewotICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7Ci0gICAgICBjb25zdCBjaHVua3MgPSBbXTsKLSAgICAgIHJlcy5vbignZGF0YScsIChkYXRhKSA9PiB7Ci0gICAgICAgIGNodW5rcy5wdXNoKGRhdGEgaW5zdGFuY2VvZiBCdWZmZXIgPyBkYXRhIDogQnVmZmVyLmZyb20oZGF0YSkpOwotICAgICAgfSk7Ci0gICAgICByZXMub24oJ2VuZCcsICgpID0+IHsKLSAgICAgICAgcmVzb2x2ZShjaHVua3MubGVuZ3RoID8gQnVmZmVyLmNvbmNhdChjaHVua3MpIDogbnVsbCk7Ci0gICAgICB9KTsKLSAgICAgIHJlcy5vbignZXJyb3InLCByZWplY3QpOwotICAgIH0pOwotICAgIGNvbnN0IHN0YXR1c0NvZGVFcnJvck1lc3NhZ2UgPSBgVW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UgY29kZSAke3Jlcy5zdGF0dXNDb2RlfWA7Ci0gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYm9keSA/IGAke3N0YXR1c0NvZGVFcnJvck1lc3NhZ2V9IHdpdGggYm9keTpcbiR7Ym9keS50b1N0cmluZygpfWAgOiBzdGF0dXNDb2RlRXJyb3JNZXNzYWdlOwotICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgdGhpcy4jaGFuZGxlRXJyb3IoewotICAgICAgZXJyb3IsCi0gICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsCi0gICAgICB0eXBlOiAndW5leHBlY3RlZC1yZXNwb25zZScsCi0gICAgICB0YXJnZXQ6IHRoaXMuX3dzLAotICAgIH0pOwotICB9OwotCi0gIC8qKgotICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICAgKi8KLSAgI2hhbmRsZUVycm9yID0gKHsgZXJyb3IgfSkgPT4gewotICAgIHRoaXMuX29wZW5Qcm9taXNlLnJlamVjdChlcnJvcik7Ci0gICAgdGhpcy5lbWl0KCdsb2cnLCBgd3MgZXJyb3IgJHtlcnJvcn1gKTsKLSAgICB0aGlzLiNjbGVhbnVwV2Vic29ja2V0KGVycm9yKTsKLSAgICB0aGlzLmVtaXQoJ3NvY2tldEVycm9yJywgZXJyb3IpOwotICB9OwotCi0gIC8qKgotICAgKiBAcGFyYW0ge0Nsb3NlRXZlbnR9IGV2ZW50Ci0gICAqLwotICAjaGFuZGxlQ2xvc2UgPSAoeyBjb2RlLCBtZXNzYWdlIH0pID0+IHsKLSAgICB0aGlzLmVtaXQoJ2xvZycsIGB3cyBjbG9zZSBjb2RlPSR7Y29kZX0gbWVzc2FnZT0ke21lc3NhZ2V9YCk7Ci0gICAgdGhpcy4jY2xlYW51cFdlYnNvY2tldCgpOwotICAgIGlmICh0aGlzLl9jbG9zZUNhbGxiYWNrKSB7Ci0gICAgICB0aGlzLl9jbG9zZUNhbGxiYWNrKCk7Ci0gICAgfQotICAgIHRoaXMuZW1pdCgnY2xvc2UnLCBjb2RlLCBtZXNzYWdlKTsKLSAgfTsKLQotICAvKioKLSAgICogQHBhcmFtIHtNZXNzYWdlRXZlbnQ8YW55Pn0gZXZlbnQKLSAgICovCi0gICNoYW5kbGVNZXNzYWdlID0gKHsgZGF0YTogX2RhdGEgfSkgPT4gewotICAgIGNvbnN0IGRhdGEgPSBfZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gQnVmZmVyLmZyb20oX2RhdGEpIDogX2RhdGE7Ci0KLSAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuX3JlYWRlci5yZWFkUmVzcG9uc2UoZGF0YSk7Ci0gICAgaWYgKHJlc3BvbnNlLnJlcXVlc3RJZCA9PT0gbnVsbCB8fCByZXNwb25zZS5yZXF1ZXN0SWQgPT09IHVuZGVmaW5lZCkgewotICAgICAgLy8gVGhlcmUgd2FzIGEgc2VyaWFsaXphdGlvbiBpc3N1ZSBvbiB0aGUgc2VydmVyIHRoYXQgcHJldmVudGVkIHRoZSBwYXJzaW5nIG9mIHRoZSByZXF1ZXN0IGlkCi0gICAgICAvLyBXZSBpbnZva2UgYW55IG9mIHRoZSBwZW5kaW5nIGhhbmRsZXJzIHdpdGggYW4gZXJyb3IKLSAgICAgIE9iamVjdC5rZXlzKHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMpLmZvckVhY2goKHJlcXVlc3RJZCkgPT4gewotICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5fcmVzcG9uc2VIYW5kbGVyc1tyZXF1ZXN0SWRdOwotICAgICAgICB0aGlzLiNjbGVhckhhbmRsZXIocmVxdWVzdElkKTsKLSAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnN0YXR1cy5tZXNzYWdlKSB7Ci0gICAgICAgICAgcmV0dXJuIGhhbmRsZXIuY2FsbGJhY2soCi0gICAgICAgICAgICAvLyBUSU5LRVJQT1AtMjI4NToga2VlcCB0aGUgb2xkIHNlcnZlciBlcnJvciBtZXNzYWdlIGluIGNhc2UgZm9sa3MgYXJlIHBhcnNpbmcgdGhhdCAtIGZpeCBpbiBhIGZ1dHVyZSBicmVha2luZyB2ZXJzaW9uCi0gICAgICAgICAgICBuZXcgUmVzcG9uc2VFcnJvcigKLSAgICAgICAgICAgICAgYFNlcnZlciBlcnJvciAobm8gcmVxdWVzdCBpbmZvcm1hdGlvbik6ICR7cmVzcG9uc2Uuc3RhdHVzLm1lc3NhZ2V9ICgke3Jlc3BvbnNlLnN0YXR1cy5jb2RlfSlgLAotICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXMsCi0gICAgICAgICAgICApLAotICAgICAgICAgICk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVElOS0VSUE9QLTIyODU6IGtlZXAgdGhlIG9sZCBzZXJ2ZXIgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIGZvbGtzIGFyZSBwYXJzaW5nIHRoYXQgLSBmaXggaW4gYSBmdXR1cmUgYnJlYWtpbmcgdmVyc2lvbgotICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsYmFjaygKLSAgICAgICAgICBuZXcgUmVzcG9uc2VFcnJvcihgU2VydmVyIGVycm9yIChubyByZXF1ZXN0IGluZm9ybWF0aW9uKTogJHtKU09OLnN0cmluZ2lmeShyZXNwb25zZSl9YCwgcmVzcG9uc2Uuc3RhdHVzKSwKLSAgICAgICAgKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRJTktFUlBPUC0yODQ3OiBVc2UgbG93ZXIgY2FzZSB0byBwcmV2ZW50IHN0cmluZyBjb21wYXJpc29uIGlzc3Vlcy4KLSAgICByZXNwb25zZS5yZXF1ZXN0SWQgPSByZXNwb25zZS5yZXF1ZXN0SWQudG9Mb3dlckNhc2UoKTsKLSAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5fcmVzcG9uc2VIYW5kbGVyc1tyZXNwb25zZS5yZXF1ZXN0SWRdOwotCi0gICAgaWYgKCFoYW5kbGVyKSB7Ci0gICAgICAvLyBUaGUgaGFuZGxlciBmb3IgYSBnaXZlbiByZXF1ZXN0IGlkIHdhcyBub3QgZm91bmQKLSAgICAgIC8vIEl0IHdhcyBwcm9iYWJseSBpbnZva2VkIGVhcmxpZXIgZHVlIHRvIGEgc2VyaWFsaXphdGlvbiBpc3N1ZS4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocmVzcG9uc2Uuc3RhdHVzLmNvZGUgPT09IHJlc3BvbnNlU3RhdHVzQ29kZS5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZSAmJiB0aGlzLl9hdXRoZW50aWNhdG9yKSB7Ci0gICAgICB0aGlzLl9hdXRoZW50aWNhdG9yCi0gICAgICAgIC5ldmFsdWF0ZUNoYWxsZW5nZShyZXNwb25zZS5yZXN1bHQuZGF0YSkKLSAgICAgICAgLnRoZW4oKHJlcykgPT4gdGhpcy5zdWJtaXQodW5kZWZpbmVkLCAnYXV0aGVudGljYXRpb24nLCByZXMsIHJlc3BvbnNlLnJlcXVlc3RJZCkpCi0gICAgICAgIC5jYXRjaChoYW5kbGVyLmNhbGxiYWNrKTsKLQotICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzLmNvZGUgPj0gNDAwKSB7Ci0gICAgICB0aGlzLiNjbGVhckhhbmRsZXIocmVzcG9uc2UucmVxdWVzdElkKTsKLSAgICAgIC8vIGNhbGxiYWNrIGluIGVycm9yCi0gICAgICByZXR1cm4gaGFuZGxlci5jYWxsYmFjaygKLSAgICAgICAgLy8gVElOS0VSUE9QLTIyODU6IGtlZXAgdGhlIG9sZCBzZXJ2ZXIgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIGZvbGtzIGFyZSBwYXJzaW5nIHRoYXQgLSBmaXggaW4gYSBmdXR1cmUgYnJlYWtpbmcgdmVyc2lvbgotICAgICAgICBuZXcgUmVzcG9uc2VFcnJvcihgU2VydmVyIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1cy5tZXNzYWdlfSAoJHtyZXNwb25zZS5zdGF0dXMuY29kZX0pYCwgcmVzcG9uc2Uuc3RhdHVzKSwKLSAgICAgICk7Ci0gICAgfQotCi0gICAgY29uc3QgaXNTdHJlYW1pbmdSZXNwb25zZSA9IGhhbmRsZXIucmVzdWx0IGluc3RhbmNlb2YgU3RyZWFtLlJlYWRhYmxlOwotCi0gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMuY29kZSkgewotICAgICAgY2FzZSByZXNwb25zZVN0YXR1c0NvZGUubm9Db250ZW50OgotICAgICAgICB0aGlzLiNjbGVhckhhbmRsZXIocmVzcG9uc2UucmVxdWVzdElkKTsKLSAgICAgICAgaWYgKGlzU3RyZWFtaW5nUmVzcG9uc2UpIHsKLSAgICAgICAgICBoYW5kbGVyLnJlc3VsdC5wdXNoKG5ldyBSZXN1bHRTZXQodXRpbHMuZW1wdHlBcnJheSwgcmVzcG9uc2Uuc3RhdHVzLmF0dHJpYnV0ZXMpKTsKLSAgICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsYmFjayhudWxsKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsYmFjayhudWxsLCBuZXcgUmVzdWx0U2V0KHV0aWxzLmVtcHR5QXJyYXksIHJlc3BvbnNlLnN0YXR1cy5hdHRyaWJ1dGVzKSk7Ci0gICAgICBjYXNlIHJlc3BvbnNlU3RhdHVzQ29kZS5wYXJ0aWFsQ29udGVudDoKLSAgICAgICAgaWYgKGlzU3RyZWFtaW5nUmVzcG9uc2UpIHsKLSAgICAgICAgICBoYW5kbGVyLnJlc3VsdC5wdXNoKG5ldyBSZXN1bHRTZXQocmVzcG9uc2UucmVzdWx0LmRhdGEsIHJlc3BvbnNlLnN0YXR1cy5hdHRyaWJ1dGVzKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaGFuZGxlci5yZXN1bHQgPSBoYW5kbGVyLnJlc3VsdCB8fCBbXTsKLSAgICAgICAgaGFuZGxlci5yZXN1bHQucHVzaC5hcHBseShoYW5kbGVyLnJlc3VsdCwgcmVzcG9uc2UucmVzdWx0LmRhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChpc1N0cmVhbWluZ1Jlc3BvbnNlKSB7Ci0gICAgICAgICAgaGFuZGxlci5yZXN1bHQucHVzaChuZXcgUmVzdWx0U2V0KHJlc3BvbnNlLnJlc3VsdC5kYXRhLCByZXNwb25zZS5zdGF0dXMuYXR0cmlidXRlcykpOwotICAgICAgICAgIHJldHVybiBoYW5kbGVyLmNhbGxiYWNrKG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoYW5kbGVyLnJlc3VsdCkgewotICAgICAgICAgIGhhbmRsZXIucmVzdWx0LnB1c2guYXBwbHkoaGFuZGxlci5yZXN1bHQsIHJlc3BvbnNlLnJlc3VsdC5kYXRhKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBoYW5kbGVyLnJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdC5kYXRhOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuI2NsZWFySGFuZGxlcihyZXNwb25zZS5yZXF1ZXN0SWQpOwotICAgICAgICByZXR1cm4gaGFuZGxlci5jYWxsYmFjayhudWxsLCBuZXcgUmVzdWx0U2V0KGhhbmRsZXIucmVzdWx0LCByZXNwb25zZS5zdGF0dXMuYXR0cmlidXRlcykpOwotICAgIH0KLSAgfTsKLQotICAvKioKLSAgICogY2xlYW4gd2Vic29ja2V0IGNvbnRleHQKLSAgICovCi0gICNjbGVhbnVwV2Vic29ja2V0KGVycikgewotICAgIC8vIEludm9rZSB3YWl0aW5nIGNhbGxiYWNrcyB0byBjb21wbGV0ZSBQcm9taXNlcyB3aGVuIGNsb3NpbmcgdGhlIHdlYnNvY2tldAotICAgIE9iamVjdC5rZXlzKHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMpLmZvckVhY2goKHJlcXVlc3RJZCkgPT4gewotICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnNbcmVxdWVzdElkXTsKLSAgICAgIGNvbnN0IGlzU3RyZWFtaW5nUmVzcG9uc2UgPSBoYW5kbGVyLnJlc3VsdCBpbnN0YW5jZW9mIFN0cmVhbS5SZWFkYWJsZTsKLSAgICAgIGlmIChpc1N0cmVhbWluZ1Jlc3BvbnNlKSB7Ci0gICAgICAgIGhhbmRsZXIuY2FsbGJhY2sobnVsbCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBjYXVzZSA9IGVyciA/IGVyciA6IG5ldyBFcnJvcignQ29ubmVjdGlvbiBoYXMgYmVlbiBjbG9zZWQuJyk7Ci0gICAgICAgIGhhbmRsZXIuY2FsbGJhY2soY2F1c2UpOwotICAgICAgfQotICAgIH0pOwotICAgIHRoaXMuX3dzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29wZW4nLCB0aGlzLiNoYW5kbGVPcGVuKTsKLSAgICB0aGlzLl93cy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2hhbmRsZUVycm9yKTsKLSAgICAvLyBPbmx5IHJlbW92ZSB1bmV4cGVjdGVkLXJlc3BvbnNlIGxpc3RlbmVyIGZvciBOb2RlLmpzIFdlYlNvY2tldCAod3MgcGFja2FnZSkKLSAgICAvLyBCcm93c2VyIFdlYlNvY2tldCBkb2VzIG5vdCBoYXZlIHRoaXMgZXZlbnQgYW5kIC5vZmYoKSBtZXRob2QKLSAgICBpZiAodGhpcy5fd3MgJiYgJ29mZicgaW4gdGhpcy5fd3MpIHsKLSAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbGlzdGVuZXIgbmVlZHMgdG8gdXNlIGAub25gIGFuZCBgLm9mZmAgYmVjYXVzZSB0aGUgYHdzYCBwYWNrYWdlJ3MgYWRkRXZlbnRMaXN0ZW5lciBvbmx5IGFjY2VwdHMgY2VydGFpbiBldmVudCB0eXBlcwotICAgICAgLy8gUmVmOiBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9ibG9iLzguMTYuMC9saWIvZXZlbnQtdGFyZ2V0LmpzI0wyMDItTDI0MQotICAgICAgdGhpcy5fd3Mub2ZmKCd1bmV4cGVjdGVkLXJlc3BvbnNlJywgdGhpcy4jaGFuZGxlVW5leHBlY3RlZFJlc3BvbnNlKTsKLSAgICB9Ci0gICAgdGhpcy5fd3MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2hhbmRsZU1lc3NhZ2UpOwotICAgIHRoaXMuX3dzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Nsb3NlJywgdGhpcy4jaGFuZGxlQ2xvc2UpOwotICAgIHRoaXMuX29wZW5Qcm9taXNlID0gbnVsbDsKLSAgICB0aGlzLl9jbG9zZVByb21pc2UgPSBudWxsOwotICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2xlYXJzIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb250YWluaW5nIHRoZSBjYWxsYmFjayBhbmQgcmVzdWx0IGJ1ZmZlciBvZiBhIGdpdmVuIHJlcXVlc3QuCi0gICAqIEBwYXJhbSByZXF1ZXN0SWQKLSAgICogQHByaXZhdGUKLSAgICovCi0gICNjbGVhckhhbmRsZXIocmVxdWVzdElkKSB7Ci0gICAgZGVsZXRlIHRoaXMuX3Jlc3BvbnNlSGFuZGxlcnNbcmVxdWVzdElkXTsKLSAgfQotCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIENvbm5lY3Rpb24uCi0gICAqIEByZXR1cm4ge1Byb21pc2V9Ci0gICAqLwotICBjbG9zZSgpIHsKLSAgICBpZiAodGhpcy5pc09wZW4gPT09IGZhbHNlKSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgfQotICAgIGlmICghdGhpcy5fY2xvc2VQcm9taXNlKSB7Ci0gICAgICB0aGlzLl9jbG9zZVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewotICAgICAgICB0aGlzLl9jbG9zZUNhbGxiYWNrID0gcmVzb2x2ZTsKLSAgICAgICAgdGhpcy5fd3MuY2xvc2UoKTsKLSAgICAgIH0pOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5fY2xvc2VQcm9taXNlOwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gQ29ubmVjdGlvbjsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL2RyaXZlci1yZW1vdGUtY29ubmVjdGlvbi5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL2RyaXZlci1yZW1vdGUtY29ubmVjdGlvbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMxZThkYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9kcml2ZXItcmVtb3RlLWNvbm5lY3Rpb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCByY01vZHVsZSA9IHJlcXVpcmUoJy4vcmVtb3RlLWNvbm5lY3Rpb24nKTsKLWNvbnN0IFJlbW90ZUNvbm5lY3Rpb24gPSByY01vZHVsZS5SZW1vdGVDb25uZWN0aW9uOwotY29uc3QgUmVtb3RlVHJhdmVyc2FsID0gcmNNb2R1bGUuUmVtb3RlVHJhdmVyc2FsOwotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpOwotY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKTsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi4vcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgT3B0aW9uc1N0cmF0ZWd5ID0gcmVxdWlyZSgnLi4vcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKS5PcHRpb25zU3RyYXRlZ3k7Ci0KLS8qKgotICogUmVwcmVzZW50cyB0aGUgZGVmYXVsdCB7QGxpbmsgUmVtb3RlQ29ubmVjdGlvbn0gaW1wbGVtZW50YXRpb24uCi0gKi8KLWNsYXNzIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gZXh0ZW5kcyBSZW1vdGVDb25uZWN0aW9uIHsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIERyaXZlclJlbW90ZUNvbm5lY3Rpb259LgotICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSByZXNvdXJjZSB1cmkuCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy4KLSAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMuY2FdIFRydXN0ZWQgY2VydGlmaWNhdGVzLgotICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheXxCdWZmZXJ9IFtvcHRpb25zLmNlcnRdIFRoZSBjZXJ0aWZpY2F0ZSBrZXkuCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5taW1lVHlwZV0gVGhlIG1pbWUgdHlwZSB0byB1c2UuCi0gICAqIEBwYXJhbSB7U3RyaW5nfEJ1ZmZlcn0gW29wdGlvbnMucGZ4XSBUaGUgcHJpdmF0ZSBrZXksIGNlcnRpZmljYXRlLCBhbmQgQ0EgY2VydHMuCi0gICAqIEBwYXJhbSB7R3JhcGhTT05SZWFkZXJ9IFtvcHRpb25zLnJlYWRlcl0gVGhlIHJlYWRlciB0byB1c2UuCi0gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmVqZWN0VW5hdXRob3JpemVkXSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gdmVyaWZ5IG9yIG5vdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlLgotICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMudHJhdmVyc2FsU291cmNlXSBUaGUgdHJhdmVyc2FsIHNvdXJjZS4gRGVmYXVsdHMgdG86ICdnJy4KLSAgICogQHBhcmFtIHtHcmFwaFNPTldyaXRlcn0gW29wdGlvbnMud3JpdGVyXSBUaGUgd3JpdGVyIHRvIHVzZS4KLSAgICogQHBhcmFtIHtBdXRoZW50aWNhdG9yfSBbb3B0aW9ucy5hdXRoZW50aWNhdG9yXSBUaGUgYXV0aGVudGljYXRpb24gaGFuZGxlciB0byB1c2UuCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5oZWFkZXJzXSBBbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIHRoZSBhZGRpdGlvbmFsIGhlYWRlciBrZXkvdmFsdWVzIGZvciB0aGUgaW5pdGlhbCByZXF1ZXN0LgotICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdF0gRGV0ZXJtaW5lcyBpZiBhIHVzZXIgYWdlbnQgd2lsbCBiZSBzZW50IGR1cmluZyBjb25uZWN0aW9uIGhhbmRzaGFrZS4gRGVmYXVsdHMgdG86IHRydWUKLSAgICogQHBhcmFtIHtodHRwLkFnZW50fSBbb3B0aW9ucy5hZ2VudF0gVGhlIGh0dHAuQWdlbnQgaW1wbGVtZW50YXRpb24gdG8gdXNlLgotICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmVuYWJsZUNvbXByZXNzaW9uXSBFbmFibGUgcGVyLW1lc3NhZ2UgZGVmbGF0ZSBjb21wcmVzc2lvbi4gRGVmYXVsdHMgdG86IGZhbHNlLgotICAgKiBAY29uc3RydWN0b3IKLSAgICovCi0gIGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucyA9IHt9KSB7Ci0gICAgc3VwZXIodXJsLCBvcHRpb25zKTsKLSAgICB0aGlzLl9jbGllbnQgPSBuZXcgQ2xpZW50KHVybCwgb3B0aW9ucyk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIG9wZW4oKSB7Ci0gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5vcGVuKCk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIGdldCBpc09wZW4oKSB7Ci0gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5pc09wZW47Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIHN1Ym1pdChieXRlY29kZSkgewotICAgIGNvbnN0IG9wdGlvbnNTdHJhdGVneSA9IGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucy5maW5kKAotICAgICAgKGkpID0+IGlbMF0gPT09ICd3aXRoU3RyYXRlZ2llcycgJiYgaVsxXSBpbnN0YW5jZW9mIE9wdGlvbnNTdHJhdGVneSwKLSAgICApOwotICAgIGNvbnN0IGFsbG93ZWRLZXlzID0gWwotICAgICAgJ2V2YWx1YXRpb25UaW1lb3V0JywKLSAgICAgICdzY3JpcHRFdmFsdWF0aW9uVGltZW91dCcsCi0gICAgICAnYmF0Y2hTaXplJywKLSAgICAgICdyZXF1ZXN0SWQnLAotICAgICAgJ3VzZXJBZ2VudCcsCi0gICAgICAnbWF0ZXJpYWxpemVQcm9wZXJ0aWVzJywKLSAgICBdOwotCi0gICAgbGV0IHJlcXVlc3RPcHRpb25zID0gdW5kZWZpbmVkOwotICAgIGlmIChvcHRpb25zU3RyYXRlZ3kgIT09IHVuZGVmaW5lZCkgewotICAgICAgcmVxdWVzdE9wdGlvbnMgPSB7fTsKLSAgICAgIGNvbnN0IGNvbmYgPSBvcHRpb25zU3RyYXRlZ3lbMV0uY29uZmlndXJhdGlvbjsKLSAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmYpIHsKLSAgICAgICAgaWYgKGNvbmYuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBhbGxvd2VkS2V5cy5pbmRleE9mKGtleSkgPiAtMSkgewotICAgICAgICAgIHJlcXVlc3RPcHRpb25zW2tleV0gPSBjb25mW2tleV07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpcy5fY2xpZW50LnN1Ym1pdChieXRlY29kZSwgbnVsbCwgcmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3VsdCkgPT4gbmV3IFJlbW90ZVRyYXZlcnNhbChyZXN1bHQudG9BcnJheSgpKSk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIGNyZWF0ZVNlc3Npb24oKSB7Ci0gICAgaWYgKHRoaXMuaXNTZXNzaW9uQm91bmQpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcignQ29ubmVjdGlvbiBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc2Vzc2lvbiAtIGNoaWxkIHNlc3Npb25zIGFyZSBub3QgYWxsb3dlZCcpOwotICAgIH0KLQotICAgIC8vIG1ha2Ugc3VyZSBhIGZyZXNoIHNlc3Npb24gaXMgdXNlZCB3aGVuIHN0YXJ0aW5nIGEgbmV3IHRyYW5zYWN0aW9uCi0gICAgY29uc3QgY29waWVkT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucyk7Ci0gICAgY29waWVkT3B0aW9ucy5zZXNzaW9uID0gdXRpbHMuZ2V0VXVpZCgpOwotICAgIHJldHVybiBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbih0aGlzLnVybCwgY29waWVkT3B0aW9ucyk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIGdldCBpc1Nlc3Npb25Cb3VuZCgpIHsKLSAgICByZXR1cm4gdGhpcy5vcHRpb25zLnNlc3Npb247Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIGNvbW1pdCgpIHsKLSAgICByZXR1cm4gdGhpcy5fY2xpZW50LnN1Ym1pdChCeXRlY29kZS5HcmFwaE9wLmNvbW1pdCwgbnVsbCk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIHJvbGxiYWNrKCkgewotICAgIHJldHVybiB0aGlzLl9jbGllbnQuc3VibWl0KEJ5dGVjb2RlLkdyYXBoT3Aucm9sbGJhY2ssIG51bGwpOwotICB9Ci0KLSAgLyoqIEBvdmVycmlkZSAqLwotICBjbG9zZSgpIHsKLSAgICByZXR1cm4gdGhpcy5fY2xpZW50LmNsb3NlKCk7Ci0gIH0KLQotICAvKiogQG92ZXJyaWRlICovCi0gIGFkZExpc3RlbmVyKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gdGhpcy5fY2xpZW50LmFkZExpc3RlbmVyKC4uLmFyZ3MpOwotICB9Ci0KLSAgLyoqIEBvdmVycmlkZSAqLwotICByZW1vdmVMaXN0ZW5lciguLi5hcmdzKSB7Ci0gICAgcmV0dXJuIHRoaXMuX2NsaWVudC5yZW1vdmVMaXN0ZW5lciguLi5hcmdzKTsKLSAgfQotfQotCi1tb2R1bGUuZXhwb3J0cyA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZW1vdGUtY29ubmVjdGlvbi5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTNkNTE5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdCA9IHJlcXVpcmUoJy4uL3Byb2Nlc3MvdHJhdmVyc2FsJyk7Ci1jb25zdCBUcmF2ZXJzYWxTdHJhdGVneSA9IHJlcXVpcmUoJy4uL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5JykuVHJhdmVyc2FsU3RyYXRlZ3k7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhbiBhYnN0cmFjdGlvbiBvZiBhICJjb25uZWN0aW9uIiB0byBhICJzZXJ2ZXIiIHRoYXQgaXMgY2FwYWJsZSBvZiBwcm9jZXNzaW5nIGEgdHJhdmVyc2FsIGFuZAotICogcmV0dXJuaW5nIHJlc3VsdHMuCi0gKi8KLWNsYXNzIFJlbW90ZUNvbm5lY3Rpb24gewotICAvKioKLSAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgcmVzb3VyY2UgdXJpLgotICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuCi0gICAqLwotICBjb25zdHJ1Y3Rvcih1cmwsIG9wdGlvbnMgPSB7fSkgewotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0gIH0KLQotICAvKioKLSAgICogT3BlbnMgdGhlIGNvbm5lY3Rpb24sIGlmIGl0cyBub3QgYWxyZWFkeSBvcGVuZWQuCi0gICAqIEByZXR1cm5zIHtQcm9taXNlfQotICAgKi8KLSAgb3BlbigpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoJ29wZW4oKSBtdXN0IGJlIGltcGxlbWVudGVkJyk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIGNvbm5lY3Rpb24gaXMgb3BlbgotICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0KLSAgICovCi0gIGdldCBpc09wZW4oKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdpc09wZW4oKSBtdXN0IGJlIGltcGxlbWVudGVkJyk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc2Vzc2lvbi4gSWYgc28sIHRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlCi0gICAqIDxjb2RlPiNjcmVhdGVTZXNzaW9uKCk8L2NvZGU+IGNhbm5vdCBiZSBjYWxsZWQgc28gYXMgdG8gcHJvZHVjZSBjaGlsZCBzZXNzaW9ucy4KLSAgICogQHJldHVybnMge2Jvb2xlYW59Ci0gICAqLwotICBnZXQgaXNTZXNzaW9uQm91bmQoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFN1Ym1pdHMgdGhlIDxjb2RlPkJ5dGVjb2RlPC9jb2RlPiBwcm92aWRlZCBhbmQgcmV0dXJucyBhIDxjb2RlPlJlbW90ZVRyYXZlcnNhbDwvY29kZT4uCi0gICAqIEBhYnN0cmFjdAotICAgKiBAcGFyYW0ge0J5dGVjb2RlfSBieXRlY29kZQotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyBhIDxjb2RlPlByb21pc2U8L2NvZGU+IHRoYXQgcmVzb2x2ZXMgdG8gYSA8Y29kZT5SZW1vdGVUcmF2ZXJzYWw8L2NvZGU+LgotICAgKi8KLSAgc3VibWl0KGJ5dGVjb2RlKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdzdWJtaXQoKSBtdXN0IGJlIGltcGxlbWVudGVkJyk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgbmV3IDxjb2RlPlJlbW90ZUNvbm5lY3Rpb248L2NvZGU+IHRoYXQgaXMgYm91bmQgdG8gYSBzZXNzaW9uIHVzaW5nIHRoZSBjb25maWd1cmF0aW9uIGZyb20gdGhpcyBvbmUuCi0gICAqIElmIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgc2Vzc2lvbiBib3VuZCB0aGVuIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4KLSAgICogQHJldHVybnMge1JlbW90ZUNvbm5lY3Rpb259Ci0gICAqLwotICBjcmVhdGVTZXNzaW9uKCkgewotICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlU2Vzc2lvbigpIG11c3QgYmUgaW1wbGVtZW50ZWQnKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdWJtaXRzIGEgPGNvZGU+Qnl0ZWNvZGUuR3JhcGhPcC5jb21taXQ8L2NvZGU+IHRvIHRoZSBzZXJ2ZXIgYW5kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KLSAgICogQHJldHVybnMge1Byb21pc2V9Ci0gICAqLwotICBjb21taXQoKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdjb21taXQoKSBtdXN0IGJlIGltcGxlbWVudGVkJyk7Ci0gIH0KLSAgLyoqCi0gICAqIFN1Ym1pdHMgYSA8Y29kZT5CeXRlY29kZS5HcmFwaE9wLnJvbGxiYWNrPC9jb2RlPiB0byB0aGUgc2VydmVyIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCi0gICAqIEByZXR1cm5zIHtQcm9taXNlfQotICAgKi8KLSAgcm9sbGJhY2soKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdyb2xsYmFjaygpIG11c3QgYmUgaW1wbGVtZW50ZWQnKTsKLSAgfQotCi0gIC8qKgotICAgKiBDbG9zZXMgdGhlIGNvbm5lY3Rpb24gd2hlcmUgb3BlbiB0cmFuc2FjdGlvbnMgd2lsbCBjbG9zZSBhY2NvcmRpbmcgdG8gdGhlIGZlYXR1cmVzIG9mIHRoZSBncmFwaCBwcm92aWRlci4KLSAgICogQHJldHVybnMge1Byb21pc2V9Ci0gICAqLwotICBjbG9zZSgpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nsb3NlKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCcpOwotICB9Ci19Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIHRyYXZlcnNhbCBhcyBhIHJlc3VsdCBvZiBhIHtAbGluayBSZW1vdGVDb25uZWN0aW9ufSBzdWJtaXNzaW9uLgotICovCi1jbGFzcyBSZW1vdGVUcmF2ZXJzYWwgZXh0ZW5kcyB0LlRyYXZlcnNhbCB7Ci0gIGNvbnN0cnVjdG9yKHRyYXZlcnNlcnMsIHNpZGVFZmZlY3RzKSB7Ci0gICAgc3VwZXIobnVsbCwgbnVsbCwgbnVsbCk7Ci0gICAgdGhpcy50cmF2ZXJzZXJzID0gdHJhdmVyc2VyczsKLSAgICB0aGlzLnNpZGVFZmZlY3RzID0gc2lkZUVmZmVjdHM7Ci0gIH0KLX0KLQotY2xhc3MgUmVtb3RlU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFJlbW90ZVN0cmF0ZWd5LgotICAgKiBAcGFyYW0ge1JlbW90ZUNvbm5lY3Rpb259IGNvbm5lY3Rpb24KLSAgICovCi0gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb24pIHsKLSAgICAvLyBnYXZlIHRoaXMgYSBmcWNuIHRoYXQgaGFzIGEgbG9jYWwgImpzOiIgcHJlZml4IHNpbmNlIHRoaXMgc3RyYXRlZ3kgaXNuJ3Qgc2VudCBhcyBieXRlY29kZSB0byB0aGUgc2VydmVyLgotICAgIC8vIHRoaXMgaXMgYSBzb3J0IG9mIGxvY2FsLW9ubHkgc3RyYXRlZ3kgdGhhdCBhY3R1YWxseSBleGVjdXRlcyBjbGllbnQgc2lkZS4gbm90IHN1cmUgaWYgdGhpcyBwcmVmaXggaXMgdGhlCi0gICAgLy8gcmlnaHQgd2F5IHRvIG5hbWUgdGhpcyBvciBub3QsIGJ1dCBpdCBzaG91bGQgaGF2ZSBhIG5hbWUgdG8gaWRlbnRpZnkgaXQuCi0gICAgc3VwZXIoJ2pzOlJlbW90ZVN0cmF0ZWd5Jyk7Ci0gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjsKLSAgfQotCi0gIC8qKiBAb3ZlcnJpZGUgKi8KLSAgYXBwbHkodHJhdmVyc2FsKSB7Ci0gICAgaWYgKHRyYXZlcnNhbC50cmF2ZXJzZXJzKSB7Ci0gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbi5zdWJtaXQodHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpLnRoZW4oZnVuY3Rpb24gKHJlbW90ZVRyYXZlcnNhbCkgewotICAgICAgdHJhdmVyc2FsLnNpZGVFZmZlY3RzID0gcmVtb3RlVHJhdmVyc2FsLnNpZGVFZmZlY3RzOwotICAgICAgdHJhdmVyc2FsLnRyYXZlcnNlcnMgPSByZW1vdGVUcmF2ZXJzYWwudHJhdmVyc2VyczsKLSAgICB9KTsKLSAgfQotfQotCi1tb2R1bGUuZXhwb3J0cyA9IHsgUmVtb3RlQ29ubmVjdGlvbiwgUmVtb3RlU3RyYXRlZ3ksIFJlbW90ZVRyYXZlcnNhbCB9OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvcmVzcG9uc2UtZXJyb3IuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZXNwb25zZS1lcnJvci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwNGY3Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZXNwb25zZS1lcnJvci5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGFuIGVycm9yIG9idGFpbmVkIGZyb20gdGhlIHNlcnZlci4KLSAqLwotY2xhc3MgUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHsKLSAgY29uc3RydWN0b3IobWVzc2FnZSwgcmVzcG9uc2VTdGF0dXMpIHsKLSAgICBzdXBlcihtZXNzYWdlKTsKLSAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFcnJvcic7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgc3RhdHVzIGNvZGUuCi0gICAgICovCi0gICAgdGhpcy5zdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXMuY29kZTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNlcnZlciBzdGF0dXMgbWVzc2FnZS4KLSAgICAgKi8KLSAgICB0aGlzLnN0YXR1c01lc3NhZ2UgPSByZXNwb25zZVN0YXR1cy5tZXNzYWdlOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgc2VydmVyIHN0YXR1cyBhdHRyaWJ1dGVzIGFzIGEgTWFwIChtYXkgY29udGFpbiBwcm92aWRlciBzcGVjaWZpYyBzdGF0dXMgaW5mb3JtYXRpb24pLgotICAgICAqLwotICAgIHRoaXMuc3RhdHVzQXR0cmlidXRlcyA9IHJlc3BvbnNlU3RhdHVzLmF0dHJpYnV0ZXMgfHwge307Ci0gIH0KLX0KLQotbW9kdWxlLmV4cG9ydHMgPSBSZXNwb25zZUVycm9yOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvcmVzdWx0LXNldC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3Jlc3VsdC1zZXQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhN2U0MDEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvcmVzdWx0LXNldC5qcworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpOwotY29uc3QgZW1wdHlNYXAgPSBPYmplY3QuZnJlZXplKG5ldyB1dGlscy5JbW11dGFibGVNYXAoKSk7Ci0KLS8qKgotICogUmVwcmVzZW50cyB0aGUgcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0aGUgZXhlY3V0aW9uIG9mIGEgR3JlbWxpbiB0cmF2ZXJzYWwgb3Igc2NyaXB0LgotICovCi1jbGFzcyBSZXN1bHRTZXQgewotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgUmVzdWx0U2V0fS4KLSAgICogQHBhcmFtIHtBcnJheX0gaXRlbXMKLSAgICogQHBhcmFtIHtNYXB9IFthdHRyaWJ1dGVzXQotICAgKi8KLSAgY29uc3RydWN0b3IoaXRlbXMsIGF0dHJpYnV0ZXMpIHsKLSAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7Ci0gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpdGVtcyBtdXN0IGJlIGFuIEFycmF5IGluc3RhbmNlJyk7Ci0gICAgfQotCi0gICAgdGhpcy5faXRlbXMgPSBpdGVtczsKLQotICAgIC8qKgotICAgICAqIEdldHMgYSBNYXAgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXNwb25zZS4KLSAgICAgKiBAdHlwZSB7TWFwfQotICAgICAqLwotICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwgZW1wdHlNYXA7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBhbW91bnQgb2YgaXRlbXMgaW4gdGhlIHJlc3VsdC4KLSAgICAgKiBAdHlwZSB7TnVtYmVyfQotICAgICAqLwotICAgIHRoaXMubGVuZ3RoID0gaXRlbXMubGVuZ3RoOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlLgotICAgKiBAcmV0dXJucyB7SXRlcmF0b3J9Ci0gICAqLwotICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKLSAgICByZXR1cm4gdGhpcy5faXRlbXNbU3ltYm9sLml0ZXJhdG9yXSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgYW4gYXJyYXkgb2YgcmVzdWx0IGl0ZW1zLgotICAgKiBAcmV0dXJucyB7QXJyYXl9Ci0gICAqLwotICB0b0FycmF5KCkgewotICAgIHJldHVybiB0aGlzLl9pdGVtczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBpdGVtLgotICAgKiBAcmV0dXJucyB7T2JqZWN0fG51bGx9Ci0gICAqLwotICBmaXJzdCgpIHsKLSAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbXNbMF07Ci0gICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZCA/IGl0ZW0gOiBudWxsOwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gUmVzdWx0U2V0OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvYW5vbnltb3VzLXRyYXZlcnNhbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY3NzEwNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvYW5vbnltb3VzLXRyYXZlcnNhbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgZ3JhcGhUcmF2ZXJzYWxNb2R1bGUgPSByZXF1aXJlKCcuL2dyYXBoLXRyYXZlcnNhbCcpOwotY29uc3QgcmVtb3RlID0gcmVxdWlyZSgnLi4vZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uJyk7Ci1jb25zdCBUcmF2ZXJzYWxTdHJhdGVnaWVzID0gcmVxdWlyZSgnLi90cmF2ZXJzYWwtc3RyYXRlZ3knKS5UcmF2ZXJzYWxTdHJhdGVnaWVzOwotY29uc3QgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgPSBncmFwaFRyYXZlcnNhbE1vZHVsZS5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWNvbnN0IEdyYXBoVHJhdmVyc2FsID0gZ3JhcGhUcmF2ZXJzYWxNb2R1bGUuR3JhcGhUcmF2ZXJzYWw7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4vYnl0ZWNvZGUnKTsKLWNvbnN0IEdyYXBoID0gcmVxdWlyZSgnLi4vc3RydWN0dXJlL2dyYXBoJykuR3JhcGg7Ci0KLS8qKgotICogUHJvdmlkZXMgYSB1bmlmaWVkIHdheSB0byBjb25zdHJ1Y3QgYSA8Y29kZT5UcmF2ZXJzYWxTb3VyY2U8L2NvZGU+IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSB0cmF2ZXJzYWwuIEluIHRoaXMKLSAqIHN5bnRheCB0aGUgdXNlciBpcyBjcmVhdGluZyB0aGUgc291cmNlIGFuZCBiaW5kaW5nIGl0IHRvIGEgcmVmZXJlbmNlIHdoaWNoIGlzIGVpdGhlciBhbiBleGlzdGluZyA8Y29kZT5HcmFwaDwvY29kZT4KLSAqIGluc3RhbmNlIG9yIGEgPGNvZGU+UmVtb3RlQ29ubmVjdGlvbjwvY29kZT4uCi0gKi8KLWNsYXNzIEFub255bW91c1RyYXZlcnNhbFNvdXJjZSB7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAY29kZSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2V9LgotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdHJhdmVyc2FsU291cmNlQ2xhc3NdIE9wdGlvbmFsIHtAY29kZSBHcmFwaFRyYXZlcnNhbFNvdXJjZX0gY29uc3RydWN0b3IuCi0gICAqIEBwYXJhbSB7RnVuY3Rpb259IFt0cmF2ZXJzYWxDbGFzc10gT3B0aW9uYWwge0Bjb2RlIEdyYXBoVHJhdmVyc2FsfSBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIGNvbnN0cnVjdG9yKHRyYXZlcnNhbFNvdXJjZUNsYXNzLCB0cmF2ZXJzYWxDbGFzcykgewotICAgIHRoaXMudHJhdmVyc2FsU291cmNlQ2xhc3MgPSB0cmF2ZXJzYWxTb3VyY2VDbGFzczsKLSAgICB0aGlzLnRyYXZlcnNhbENsYXNzID0gdHJhdmVyc2FsQ2xhc3M7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhbiB7QGNvZGUgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlfSB3aGljaCB3aWxsIHRoZW4gYmUgY29uZmlndXJlZCB0byBzcGF3biBhCi0gICAqIHtAbGluayBHcmFwaFRyYXZlcnNhbFNvdXJjZX0uCi0gICAqIEBwYXJhbSB7RnVuY3Rpb259IFt0cmF2ZXJzYWxTb3VyY2VDbGFzc10gT3B0aW9uYWwge0Bjb2RlIEdyYXBoVHJhdmVyc2FsU291cmNlfSBjb25zdHJ1Y3Rvci4KLSAgICogQHBhcmFtIHtGdW5jdGlvbn0gW3RyYXZlcnNhbENsYXNzXSBPcHRpb25hbCB7QGNvZGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2V9IGNvbnN0cnVjdG9yLgotICAgKiBAcmV0dXJucyB7QW5vbnltb3VzVHJhdmVyc2FsU291cmNlfS4KLSAgICovCi0gIHN0YXRpYyB0cmF2ZXJzYWwodHJhdmVyc2FsU291cmNlQ2xhc3MsIHRyYXZlcnNhbENsYXNzKSB7Ci0gICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UodHJhdmVyc2FsU291cmNlQ2xhc3MgfHwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHRyYXZlcnNhbENsYXNzIHx8IEdyYXBoVHJhdmVyc2FsKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIGEge0BsaW5rIEdyYXBoVHJhdmVyc2FsU291cmNlfSBiaW5kaW5nIGEge0BsaW5rIFJlbW90ZUNvbm5lY3Rpb259IHRvIGEgcmVtb3RlIHtAbGluayBHcmFwaH0gaW5zdGFuY2VzIGFzIGl0cwotICAgKiByZWZlcmVuY2Ugc28gdGhhdCB0cmF2ZXJzYWxzIHNwYXduZWQgZnJvbSBpdCB3aWxsIGV4ZWN1dGUgb3ZlciB0aGF0IHJlZmVyZW5jZS4KLSAgICogQHBhcmFtIHtSZW1vdGVDb25uZWN0aW9ufSBjb25uZWN0aW9uCi0gICAqIEByZXR1cm4ge0dyYXBoVHJhdmVyc2FsU291cmNlfQotICAgKi8KLSAgd2l0aF8oY29ubmVjdGlvbikgewotICAgIGNvbnN0IHRyYXZlcnNhbFN0cmF0ZWdpZXMgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcygpOwotICAgIHRyYXZlcnNhbFN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3kobmV3IHJlbW90ZS5SZW1vdGVTdHJhdGVneShjb25uZWN0aW9uKSk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLnRyYXZlcnNhbFNvdXJjZUNsYXNzKAotICAgICAgbmV3IEdyYXBoKCksCi0gICAgICB0cmF2ZXJzYWxTdHJhdGVnaWVzLAotICAgICAgbmV3IEJ5dGVjb2RlKCksCi0gICAgICB0aGlzLnRyYXZlcnNhbFNvdXJjZUNsYXNzLAotICAgICAgdGhpcy50cmF2ZXJzYWxDbGFzcywKLSAgICApOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSB7QGxpbmsgR3JhcGhUcmF2ZXJzYWxTb3VyY2V9IGJpbmRpbmcgYSB7QGxpbmsgUmVtb3RlQ29ubmVjdGlvbn0gdG8gYSByZW1vdGUge0BsaW5rIEdyYXBofSBpbnN0YW5jZXMgYXMgaXRzCi0gICAqIHJlZmVyZW5jZSBzbyB0aGF0IHRyYXZlcnNhbHMgc3Bhd25lZCBmcm9tIGl0IHdpbGwgZXhlY3V0ZSBvdmVyIHRoYXQgcmVmZXJlbmNlLgotICAgKiBAcGFyYW0ge1JlbW90ZUNvbm5lY3Rpb259IHJlbW90ZUNvbm5lY3Rpb24KLSAgICogQHJldHVybiB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9Ci0gICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIHByZWZlciB7QGxpbmsgd2l0aF99LgotICAgKi8KLSAgd2l0aFJlbW90ZShyZW1vdGVDb25uZWN0aW9uKSB7Ci0gICAgcmV0dXJuIHRoaXMud2l0aF8ocmVtb3RlQ29ubmVjdGlvbik7Ci0gIH0KLX0KLQotbW9kdWxlLmV4cG9ydHMgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2U7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvYnl0ZWNvZGUuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvYnl0ZWNvZGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzU1ZjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2J5dGVjb2RlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBUcmF2ZXJzYWwgfSA9IHJlcXVpcmUoJy4vdHJhdmVyc2FsJyk7Ci0KLWNsYXNzIEJ5dGVjb2RlIHsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgQnl0ZWNvZGUKLSAgICogQHBhcmFtIHtCeXRlY29kZX0gW3RvQ2xvbmVdCi0gICAqLwotICBjb25zdHJ1Y3Rvcih0b0Nsb25lKSB7Ci0gICAgaWYgKCF0b0Nsb25lKSB7Ci0gICAgICB0aGlzLnNvdXJjZUluc3RydWN0aW9ucyA9IFtdOwotICAgICAgdGhpcy5zdGVwSW5zdHJ1Y3Rpb25zID0gW107Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuc291cmNlSW5zdHJ1Y3Rpb25zID0gWy4uLnRvQ2xvbmUuc291cmNlSW5zdHJ1Y3Rpb25zXTsKLSAgICAgIHRoaXMuc3RlcEluc3RydWN0aW9ucyA9IFsuLi50b0Nsb25lLnN0ZXBJbnN0cnVjdGlvbnNdOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGEgbmV3IHNvdXJjZSBpbnN0cnVjdGlvbnMKLSAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKLSAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCi0gICAqIEByZXR1cm5zIHtCeXRlY29kZX0KLSAgICovCi0gIGFkZFNvdXJjZShuYW1lLCB2YWx1ZXMpIHsKLSAgICBpZiAobmFtZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05hbWUgaXMgbm90IGRlZmluZWQnKTsKLSAgICB9Ci0gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBuZXcgQXJyYXkodmFsdWVzLmxlbmd0aCArIDEpOwotICAgIGluc3RydWN0aW9uWzBdID0gbmFtZTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkgewotICAgICAgaW5zdHJ1Y3Rpb25baSArIDFdID0gdmFsdWVzW2ldOwotICAgIH0KLSAgICB0aGlzLnNvdXJjZUluc3RydWN0aW9ucy5wdXNoKEJ5dGVjb2RlLl9nZW5lcmF0ZUluc3RydWN0aW9uKG5hbWUsIHZhbHVlcykpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgYSBuZXcgc3RlcCBpbnN0cnVjdGlvbnMKLSAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUKLSAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzCi0gICAqIEByZXR1cm5zIHtCeXRlY29kZX0KLSAgICovCi0gIGFkZFN0ZXAobmFtZSwgdmFsdWVzKSB7Ci0gICAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdOYW1lIGlzIG5vdCBkZWZpbmVkJyk7Ci0gICAgfQotICAgIHRoaXMuc3RlcEluc3RydWN0aW9ucy5wdXNoKEJ5dGVjb2RlLl9nZW5lcmF0ZUluc3RydWN0aW9uKG5hbWUsIHZhbHVlcykpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgc3RhdGljIF9nZW5lcmF0ZUluc3RydWN0aW9uKG5hbWUsIHZhbHVlcykgewotICAgIGNvbnN0IGxlbmd0aCA9ICh2YWx1ZXMgPyB2YWx1ZXMubGVuZ3RoIDogMCkgKyAxOwotICAgIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IEFycmF5KGxlbmd0aCk7Ci0gICAgaW5zdHJ1Y3Rpb25bMF0gPSBuYW1lOwotICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIGNvbnN0IHZhbCA9IHZhbHVlc1tpIC0gMV07Ci0gICAgICBpZiAodmFsIGluc3RhbmNlb2YgVHJhdmVyc2FsICYmIHZhbC5ncmFwaCAhPSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigKLSAgICAgICAgICBgVGhlIGNoaWxkIHRyYXZlcnNhbCBvZiAke3ZhbH0gd2FzIG5vdCBzcGF3bmVkIGFub255bW91c2x5IC0gdXNlIGAgKwotICAgICAgICAgICAgJ3RoZSBfXyBjbGFzcyByYXRoZXIgdGhhbiBhIFRyYXZlcnNhbFNvdXJjZSB0byBjb25zdHJ1Y3QgdGhlIGNoaWxkIHRyYXZlcnNhbCcsCi0gICAgICAgICk7Ci0gICAgICB9Ci0gICAgICBpbnN0cnVjdGlvbltpXSA9IHZhbDsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RydWN0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHNvdXJjZSBhbmQgc3RlcCBpbnN0cnVjdGlvbnMKLSAgICogQHJldHVybnMge1N0cmluZ30KLSAgICovCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShbdGhpcy5zb3VyY2VJbnN0cnVjdGlvbnMsIHRoaXMuc3RlcEluc3RydWN0aW9uc10pOwotICB9Ci0KLSAgLyoqCi0gICAqIEFkZHMgYSBuZXcgc291cmNlIGluc3RydWN0aW9ucwotICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZQotICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMKLSAgICogQHJldHVybnMge0J5dGVjb2RlfQotICAgKi8KLSAgc3RhdGljIF9jcmVhdGVHcmFwaE9wKG5hbWUsIHZhbHVlcykgewotICAgIGNvbnN0IGJjID0gbmV3IEJ5dGVjb2RlKCk7Ci0gICAgYmMuYWRkU291cmNlKG5hbWUsIHZhbHVlcyk7Ci0gICAgcmV0dXJuIGJjOwotICB9Ci0KLSAgLyoqCi0gICAqIEdldHMgdGhlIDxjb2RlPkJ5dGVjb2RlPC9jb2RlPiB0aGF0IGlzIG1lYW50IHRvIGJlIHNlbnQgYXMgImdyYXBoIG9wZXJhdGlvbnMiIHRvIHRoZSBzZXJ2ZXIuCi0gICAqIEByZXR1cm5zIHt7cm9sbGJhY2s6IEJ5dGVjb2RlLCBjb21taXQ6IEJ5dGVjb2RlfX0KLSAgICovCi0gIHN0YXRpYyBnZXQgR3JhcGhPcCgpIHsKLSAgICByZXR1cm4gewotICAgICAgY29tbWl0OiBCeXRlY29kZS5fY3JlYXRlR3JhcGhPcCgndHgnLCBbJ2NvbW1pdCddKSwKLSAgICAgIHJvbGxiYWNrOiBCeXRlY29kZS5fY3JlYXRlR3JhcGhPcCgndHgnLCBbJ3JvbGxiYWNrJ10pLAotICAgIH07Ci0gIH0KLX0KLQotbW9kdWxlLmV4cG9ydHMgPSBCeXRlY29kZTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mjg0MjBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODg1ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBUcmF2ZXJzYWwsIGNhcmRpbmFsaXR5IH0gPSByZXF1aXJlKCcuL3RyYXZlcnNhbCcpOwotY29uc3QgeyBUcmFuc2FjdGlvbiB9ID0gcmVxdWlyZSgnLi90cmFuc2FjdGlvbicpOwotY29uc3QgQnl0ZWNvZGUgPSByZXF1aXJlKCcuL2J5dGVjb2RlJyk7Ci1jb25zdCB7IFRyYXZlcnNhbFN0cmF0ZWdpZXMsIFZlcnRleFByb2dyYW1TdHJhdGVneSwgT3B0aW9uc1N0cmF0ZWd5IH0gPSByZXF1aXJlKCcuL3RyYXZlcnNhbC1zdHJhdGVneScpOwotCi0vKioKLSAqIFJlcHJlc2VudHMgdGhlIHByaW1hcnkgRFNMIG9mIHRoZSBHcmVtbGluIHRyYXZlcnNhbCBtYWNoaW5lLgotICovCi1jbGFzcyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7Ci0gIC8qKgotICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBHcmFwaFRyYXZlcnNhbFNvdXJjZX0uCi0gICAqIEBwYXJhbSB7R3JhcGh9IGdyYXBoCi0gICAqIEBwYXJhbSB7VHJhdmVyc2FsU3RyYXRlZ2llc30gdHJhdmVyc2FsU3RyYXRlZ2llcwotICAgKiBAcGFyYW0ge0J5dGVjb2RlfSBbYnl0ZWNvZGVdCi0gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzXSBPcHRpb25hbCB7QGxpbmsgR3JhcGhUcmF2ZXJzYWxTb3VyY2V9IGNvbnN0cnVjdG9yLgotICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZ3JhcGhUcmF2ZXJzYWxDbGFzc10gT3B0aW9uYWwge0BsaW5rIEdyYXBoVHJhdmVyc2FsfSBjb25zdHJ1Y3Rvci4KLSAgICovCi0gIGNvbnN0cnVjdG9yKGdyYXBoLCB0cmF2ZXJzYWxTdHJhdGVnaWVzLCBieXRlY29kZSwgZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcywgZ3JhcGhUcmF2ZXJzYWxDbGFzcykgewotICAgIHRoaXMuZ3JhcGggPSBncmFwaDsKLSAgICB0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMgPSB0cmF2ZXJzYWxTdHJhdGVnaWVzOwotICAgIHRoaXMuYnl0ZWNvZGUgPSBieXRlY29kZSB8fCBuZXcgQnl0ZWNvZGUoKTsKLSAgICB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MgPSBncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzIHx8IEdyYXBoVHJhdmVyc2FsU291cmNlOwotICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcyA9IGdyYXBoVHJhdmVyc2FsQ2xhc3MgfHwgR3JhcGhUcmF2ZXJzYWw7Ci0gICAgY29uc3Qgc3RyYXQgPSB0cmF2ZXJzYWxTdHJhdGVnaWVzLnN0cmF0ZWdpZXMuZmluZCgodHMpID0+IHRzLmZxY24gPT09ICdqczpSZW1vdGVTdHJhdGVneScpOwotICAgIHRoaXMucmVtb3RlQ29ubmVjdGlvbiA9IHN0cmF0ICE9PSB1bmRlZmluZWQgPyBzdHJhdC5jb25uZWN0aW9uIDogdW5kZWZpbmVkOwotICB9Ci0KLSAgLyoqCi0gICAqIFNwYXduIGEgbmV3IDxjb2RlPlRyYW5zYWN0aW9uPC9jb2RlPiBvYmplY3QgdGhhdCBjYW4gdGhlbiBzdGFydCBhbmQgc3RvcCBhIHRyYW5zYWN0aW9uLgotICAgKiBAcmV0dXJucyB7VHJhbnNhY3Rpb259Ci0gICAqLwotICB0eCgpIHsKLSAgICAvLyB5b3UgY2FuJ3QgZG8gZy50eCgpLmJlZ2luKCkudHgoKSAtIG5vIGNoaWxkIHRyYW5zYWN0aW9ucwotICAgIGlmICh0aGlzLnJlbW90ZUNvbm5lY3Rpb24gJiYgdGhpcy5yZW1vdGVDb25uZWN0aW9uLmlzU2Vzc2lvbkJvdW5kKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgVHJhdmVyc2FsU291cmNlIGlzIGFscmVhZHkgYm91bmQgdG8gYSB0cmFuc2FjdGlvbiAtIGNoaWxkIHRyYW5zYWN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcpOwotICAgIH0KLQotICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24odGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogQHBhcmFtIGdyYXBoQ29tcHV0ZXIKLSAgICogQHBhcmFtIHdvcmtlcnMKLSAgICogQHBhcmFtIHJlc3VsdAotICAgKiBAcGFyYW0gcGVyc2lzdAotICAgKiBAcGFyYW0gdmVydGljZXMKLSAgICogQHBhcmFtIGVkZ2VzCi0gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KLSAgICovCi0gIHdpdGhDb21wdXRlcihncmFwaENvbXB1dGVyLCB3b3JrZXJzLCByZXN1bHQsIHBlcnNpc3QsIHZlcnRpY2VzLCBlZGdlcywgY29uZmlndXJhdGlvbikgewotICAgIGNvbnN0IG0gPSB7fTsKLSAgICBpZiAoZ3JhcGhDb21wdXRlciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBtLmdyYXBoQ29tcHV0ZXIgPSBncmFwaENvbXB1dGVyOwotICAgIH0KLSAgICBpZiAod29ya2VycyAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBtLndvcmtlcnMgPSB3b3JrZXJzOwotICAgIH0KLSAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIG0ucmVzdWx0ID0gcmVzdWx0OwotICAgIH0KLSAgICBpZiAocGVyc2lzdCAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBtLmdyYXBoQ29tcHV0ZXIgPSBwZXJzaXN0OwotICAgIH0KLSAgICBpZiAodmVydGljZXMgIT09IHVuZGVmaW5lZCkgewotICAgICAgbS52ZXJ0aWNlcyA9IHZlcnRpY2VzOwotICAgIH0KLSAgICBpZiAoZWRnZXMgIT09IHVuZGVmaW5lZCkgewotICAgICAgbS5lZGdlcyA9IGVkZ2VzOwotICAgIH0KLSAgICBpZiAoY29uZmlndXJhdGlvbiAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBtLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy53aXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KG0pKTsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCBUcmF2ZXJzYWwgU291cmNlIHdpdGggbWV0aG9kLgotICAgKiBAcGFyYW0ge1N0cmluZ30ga2V5Ci0gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgdmFsdWUgd2l0aCBkZWZhdWx0IHRvIHtAY29kZSB0cnVlfQotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9Ci0gICAqLwotICB3aXRoXyhrZXksIHZhbHVlID0gdW5kZWZpbmVkKSB7Ci0gICAgY29uc3QgdmFsID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB2YWx1ZTsKLSAgICBsZXQgb3B0aW9uc1N0cmF0ZWd5ID0gdGhpcy5ieXRlY29kZS5zb3VyY2VJbnN0cnVjdGlvbnMuZmluZCgKLSAgICAgIChpKSA9PiBpWzBdID09PSAnd2l0aFN0cmF0ZWdpZXMnICYmIGlbMV0gaW5zdGFuY2VvZiBPcHRpb25zU3RyYXRlZ3ksCi0gICAgKTsKLSAgICBpZiAob3B0aW9uc1N0cmF0ZWd5ID09PSB1bmRlZmluZWQpIHsKLSAgICAgIG9wdGlvbnNTdHJhdGVneSA9IG5ldyBPcHRpb25zU3RyYXRlZ3koeyBba2V5XTogdmFsIH0pOwotICAgICAgcmV0dXJuIHRoaXMud2l0aFN0cmF0ZWdpZXMob3B0aW9uc1N0cmF0ZWd5KTsKLSAgICB9Ci0gICAgb3B0aW9uc1N0cmF0ZWd5WzFdLmNvbmZpZ3VyYXRpb25ba2V5XSA9IHZhbDsKLSAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcygKLSAgICAgIHRoaXMuZ3JhcGgsCi0gICAgICBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgdGhpcy5ieXRlY29kZSwKLSAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcywKLSAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcywKLSAgICApOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuCi0gICAqIEByZXR1cm5zIHtzdHJpbmd9Ci0gICAqLwotICB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gJ2dyYXBodHJhdmVyc2Fsc291cmNlWycgKyB0aGlzLmdyYXBoLnRvU3RyaW5nKCkgKyAnXSc7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggVHJhdmVyc2FsIFNvdXJjZSB3aXRoQnVsayBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KLSAgICovCi0gIHdpdGhCdWxrKC4uLmFyZ3MpIHsKLSAgICBjb25zdCBiID0gbmV3IEJ5dGVjb2RlKHRoaXMuYnl0ZWNvZGUpLmFkZFNvdXJjZSgnd2l0aEJ1bGsnLCBhcmdzKTsKLSAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcygKLSAgICAgIHRoaXMuZ3JhcGgsCi0gICAgICBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgYiwKLSAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcywKLSAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcywKLSAgICApOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIFRyYXZlcnNhbCBTb3VyY2Ugd2l0aFBhdGggbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9Ci0gICAqLwotICB3aXRoUGF0aCguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTb3VyY2UoJ3dpdGhQYXRoJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MoCi0gICAgICB0aGlzLmdyYXBoLAotICAgICAgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgIGIsCi0gICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MsCi0gICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3MsCi0gICAgKTsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCBUcmF2ZXJzYWwgU291cmNlIHdpdGhTYWNrIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsU291cmNlfQotICAgKi8KLSAgd2l0aFNhY2soLi4uYXJncykgewotICAgIGNvbnN0IGIgPSBuZXcgQnl0ZWNvZGUodGhpcy5ieXRlY29kZSkuYWRkU291cmNlKCd3aXRoU2FjaycsIGFyZ3MpOwotICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzKAotICAgICAgdGhpcy5ncmFwaCwKLSAgICAgIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICBiLAotICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzLAotICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzLAotICAgICk7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggVHJhdmVyc2FsIFNvdXJjZSB3aXRoU2lkZUVmZmVjdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KLSAgICovCi0gIHdpdGhTaWRlRWZmZWN0KC4uLmFyZ3MpIHsKLSAgICBjb25zdCBiID0gbmV3IEJ5dGVjb2RlKHRoaXMuYnl0ZWNvZGUpLmFkZFNvdXJjZSgnd2l0aFNpZGVFZmZlY3QnLCBhcmdzKTsKLSAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcygKLSAgICAgIHRoaXMuZ3JhcGgsCi0gICAgICBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLAotICAgICAgYiwKLSAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcywKLSAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcywKLSAgICApOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIFRyYXZlcnNhbCBTb3VyY2Ugd2l0aFN0cmF0ZWdpZXMgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9Ci0gICAqLwotICB3aXRoU3RyYXRlZ2llcyguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTb3VyY2UoJ3dpdGhTdHJhdGVnaWVzJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MoCi0gICAgICB0aGlzLmdyYXBoLAotICAgICAgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwKLSAgICAgIGIsCi0gICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MsCi0gICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3MsCi0gICAgKTsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCBUcmF2ZXJzYWwgU291cmNlIHdpdGhvdXRTdHJhdGVnaWVzIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsU291cmNlfQotICAgKi8KLSAgd2l0aG91dFN0cmF0ZWdpZXMoLi4uYXJncykgewotICAgIGNvbnN0IGIgPSBuZXcgQnl0ZWNvZGUodGhpcy5ieXRlY29kZSkuYWRkU291cmNlKCd3aXRob3V0U3RyYXRlZ2llcycsIGFyZ3MpOwotICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzKAotICAgICAgdGhpcy5ncmFwaCwKLSAgICAgIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksCi0gICAgICBiLAotICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzLAotICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzLAotICAgICk7Ci0gIH0KLQotICAvKioKLSAgICogRSBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzdGVwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgRSguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTdGVwKCdFJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogViBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzdGVwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgViguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTdGVwKCdWJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogYWRkRSBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzdGVwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgYWRkRSguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTdGVwKCdhZGRFJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogbWVyZ2VWIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtZXJnZUUoLi4uYXJncykgewotICAgIGNvbnN0IGIgPSBuZXcgQnl0ZWNvZGUodGhpcy5ieXRlY29kZSkuYWRkU3RlcCgnbWVyZ2VFJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogYWRkViBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzdGVwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgYWRkViguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTdGVwKCdhZGRWJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogbWVyZ2VWIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtZXJnZVYoLi4uYXJncykgewotICAgIGNvbnN0IGIgPSBuZXcgQnl0ZWNvZGUodGhpcy5ieXRlY29kZSkuYWRkU3RlcCgnbWVyZ2VWJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogaW5qZWN0IEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBpbmplY3QoLi4uYXJncykgewotICAgIGNvbnN0IGIgPSBuZXcgQnl0ZWNvZGUodGhpcy5ieXRlY29kZSkuYWRkU3RlcCgnaW5qZWN0JywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogaW8gR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc3RlcCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGlvKC4uLmFyZ3MpIHsKLSAgICBjb25zdCBiID0gbmV3IEJ5dGVjb2RlKHRoaXMuYnl0ZWNvZGUpLmFkZFN0ZXAoJ2lvJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogY2FsbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzdGVwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgY2FsbCguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTdGVwKCdjYWxsJywgYXJncyk7Ci0gICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgYik7Ci0gIH0KLQotICAvKioKLSAgICogdW5pb24gR3JhcGhUcmF2ZXJzYWxTb3VyY2UgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB1bmlvbiguLi5hcmdzKSB7Ci0gICAgY29uc3QgYiA9IG5ldyBCeXRlY29kZSh0aGlzLmJ5dGVjb2RlKS5hZGRTdGVwKCd1bmlvbicsIGFyZ3MpOwotICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzKHRoaXMuZ3JhcGgsIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksIGIpOwotICB9Ci19Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGdyYXBoIHRyYXZlcnNhbC4KLSAqLwotY2xhc3MgR3JhcGhUcmF2ZXJzYWwgZXh0ZW5kcyBUcmF2ZXJzYWwgewotICBjb25zdHJ1Y3RvcihncmFwaCwgdHJhdmVyc2FsU3RyYXRlZ2llcywgYnl0ZWNvZGUpIHsKLSAgICBzdXBlcihncmFwaCwgdHJhdmVyc2FsU3RyYXRlZ2llcywgYnl0ZWNvZGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvcHkgYSB0cmF2ZXJzYWwgc28gYXMgdG8gcmVzZXQgYW5kIHJlLXVzZSBpdC4KLSAgICovCi0gIGNsb25lKCkgewotICAgIHJldHVybiBuZXcgR3JhcGhUcmF2ZXJzYWwodGhpcy5ncmFwaCwgdGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzLCB0aGlzLmdldEJ5dGVjb2RlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBWIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgViguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdWJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIEUgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBFKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ0UnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgYWRkRSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGFkZEUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnYWRkRScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBhZGRWIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgYWRkViguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdhZGRWJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGFnZ3JlZ2F0ZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGFnZ3JlZ2F0ZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdhZ2dyZWdhdGUnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgYWxsIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgYWxsKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2FsbCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBhbmQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBhbmQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnYW5kJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGFueSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGFueSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdhbnknLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgYXMgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBhcyguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdhcycsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBhc0Jvb2wgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBhc0Jvb2woLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnYXNCb29sJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGFzRGF0ZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGFzRGF0ZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdhc0RhdGUnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgYXNOdW1iZXIgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBhc051bWJlciguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdhc051bWJlcicsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBhc1N0cmluZyBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGFzU3RyaW5nKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2FzU3RyaW5nJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGJhcnJpZXIgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBiYXJyaWVyKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2JhcnJpZXInLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgYm90aCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGJvdGgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnYm90aCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBib3RoRSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGJvdGhFKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2JvdGhFJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGJvdGhWIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgYm90aFYoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnYm90aFYnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgYnJhbmNoIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgYnJhbmNoKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2JyYW5jaCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBieSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGJ5KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2J5JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGNhbGwgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBjYWxsKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2NhbGwnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGNhcCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGNhcCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdjYXAnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgY2hvb3NlIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgY2hvb3NlKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2Nob29zZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBjb2FsZXNjZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGNvYWxlc2NlKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2NvYWxlc2NlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGNvaW4gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBjb2luKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2NvaW4nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29tYmluZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGNvbWJpbmUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnY29tYmluZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBjb25jYXQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBjb25jYXQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnY29uY2F0JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGNvbmpvaW4gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBjb25qb2luKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2NvbmpvaW4nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29ubmVjdGVkQ29tcG9uZW50IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgY29ubmVjdGVkQ29tcG9uZW50KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2Nvbm5lY3RlZENvbXBvbmVudCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBjb25zdGFudCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGNvbnN0YW50KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2NvbnN0YW50JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGNvdW50IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgY291bnQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnY291bnQnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgY3ljbGljUGF0aCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGN5Y2xpY1BhdGgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnY3ljbGljUGF0aCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBkYXRlQWRkIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgZGF0ZUFkZCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdkYXRlQWRkJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGRhdGVEaWZmIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgZGF0ZURpZmYoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZGF0ZURpZmYnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGVkdXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBkZWR1cCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdkZWR1cCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBkaWZmZXJlbmNlIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgZGlmZmVyZW5jZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdkaWZmZXJlbmNlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGRpc2NhcmQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBkaXNjYXJkKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2Rpc2NhcmQnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGlzanVuY3QgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBkaXNqdW5jdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdkaXNqdW5jdCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBkcm9wIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgZHJvcCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdkcm9wJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGVsZW1lbnQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBlbGVtZW50KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2VsZW1lbnQnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGVsZW1lbnRNYXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBlbGVtZW50TWFwKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2VsZW1lbnRNYXAnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgZW1pdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGVtaXQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZW1pdCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBmYSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGZhaWwoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZmFpbCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBmaWx0ZXIgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBmaWx0ZXIoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZmlsdGVyJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGZsYXRNYXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBmbGF0TWFwKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2ZsYXRNYXAnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgZm9sZCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGZvbGQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZm9sZCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBmb3JtYXQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBmb3JtYXQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZm9ybWF0JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGZyb20gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBmcm9tXyguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdmcm9tJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGdyb3VwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgZ3JvdXAoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZ3JvdXAnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgZ3JvdXBDb3VudCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGdyb3VwQ291bnQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnZ3JvdXBDb3VudCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBoYXMgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBoYXMoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaGFzJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGhhc0lkIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaGFzSWQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaGFzSWQnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgaGFzS2V5IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaGFzS2V5KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2hhc0tleScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBoYXNMYWJlbCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGhhc0xhYmVsKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2hhc0xhYmVsJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGhhc05vdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGhhc05vdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdoYXNOb3QnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgaGFzVmFsdWUgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBoYXNWYWx1ZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdoYXNWYWx1ZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBpZCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGlkKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2lkJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGlkZW50aXR5IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaWRlbnRpdHkoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaWRlbnRpdHknLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW4gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBpbl8oLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaW4nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW5FIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaW5FKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2luRScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBpblYgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBpblYoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaW5WJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGluZGV4IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaW5kZXgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaW5kZXgnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW5qZWN0IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaW5qZWN0KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2luamVjdCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBpbnRlcnNlY3QgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBpbnRlcnNlY3QoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaW50ZXJzZWN0JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGlzIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgaXMoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnaXMnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwga2V5IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAga2V5KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2tleScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBsYWJlbCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGxhYmVsKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2xhYmVsJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGxlbmd0aCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGxlbmd0aCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdsZW5ndGgnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgbGltaXQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBsaW1pdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdsaW1pdCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBsb2NhbCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIGxvY2FsKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ2xvY2FsJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIGxvb3BzIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgbG9vcHMoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnbG9vcHMnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgbFRyaW0gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBsVHJpbSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdsVHJpbScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBtYXAgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtYXAoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnbWFwJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIG1hdGNoIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgbWF0Y2goLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnbWF0Y2gnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWF0aCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIG1hdGgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnbWF0aCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBtYXggbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtYXgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnbWF4JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIG1lYW4gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtZWFuKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ21lYW4nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWVyZ2UgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtZXJnZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdtZXJnZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBtZXJnZUUgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBtZXJnZUUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnbWVyZ2VFJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIG1lcmdlViBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIG1lcmdlViguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdtZXJnZVYnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWluIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgbWluKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ21pbicsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBub25lIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgbm9uZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdub25lJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIG5vdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIG5vdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdub3QnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3B0aW9uIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgb3B0aW9uKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ29wdGlvbicsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBvcHRpb25hbCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIG9wdGlvbmFsKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ29wdGlvbmFsJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIG9yIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgb3IoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnb3InLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3JkZXIgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBvcmRlciguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdvcmRlcicsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBvdGhlclYgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBvdGhlclYoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnb3RoZXJWJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIG91dCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIG91dCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdvdXQnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3V0RSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIG91dEUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnb3V0RScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBvdXRWIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgb3V0ViguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdvdXRWJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHBhZ2VSYW5rIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgcGFnZVJhbmsoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncGFnZVJhbmsnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgcGF0aCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHBhdGgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncGF0aCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBwZWVyUHJlc3N1cmUgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBwZWVyUHJlc3N1cmUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncGVlclByZXNzdXJlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHByb2R1Y3QgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBwcm9kdWN0KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3Byb2R1Y3QnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvZmlsZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHByb2ZpbGUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncHJvZmlsZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBwcm9ncmFtIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgcHJvZ3JhbSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdwcm9ncmFtJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHByb2plY3QgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBwcm9qZWN0KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3Byb2plY3QnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvcGVydGllcyBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHByb3BlcnRpZXMoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncHJvcGVydGllcycsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBwcm9wZXJ0eSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHByb3BlcnR5KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3Byb3BlcnR5JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHByb3BlcnR5TWFwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgcHJvcGVydHlNYXAoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncHJvcGVydHlNYXAnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmFuZ2UgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICByYW5nZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdyYW5nZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCByZWFkIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgcmVhZCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdyZWFkJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHJlcGVhdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHJlcGVhdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdyZXBlYXQnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmVwbGFjZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHJlcGxhY2UoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgncmVwbGFjZScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCByZXZlcnNlIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgcmV2ZXJzZSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdyZXZlcnNlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHJUcmltIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgclRyaW0oLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnclRyaW0nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2FjayBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHNhY2soLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnc2FjaycsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBzYW1wbGUgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBzYW1wbGUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnc2FtcGxlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHNlbGVjdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHNlbGVjdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdzZWxlY3QnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2hvcnRlc3RQYXRoIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgc2hvcnRlc3RQYXRoKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3Nob3J0ZXN0UGF0aCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBzaWRlRWZmZWN0IG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgc2lkZUVmZmVjdCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdzaWRlRWZmZWN0JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHNpbXBsZVBhdGggbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBzaW1wbGVQYXRoKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3NpbXBsZVBhdGgnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2tpcCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHNraXAoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnc2tpcCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCBzcGxpdCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHNwbGl0KC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3NwbGl0JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHN1YmdyYXBoIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgc3ViZ3JhcGgoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnc3ViZ3JhcGgnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgc3ViZ3JhcGggbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICBzdWJzdHJpbmcoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnc3Vic3RyaW5nJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHN1bSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHN1bSguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdzdW0nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgdGFpbCBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHRhaWwoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndGFpbCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCB0aW1lTGltaXQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB0aW1lTGltaXQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndGltZUxpbWl0JywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHRpbWVzIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgdGltZXMoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndGltZXMnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgdG8gbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB0byguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCd0bycsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCB0b0UgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB0b0UoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndG9FJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHRvTG93ZXIgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB0b0xvd2VyKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3RvTG93ZXInLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgdG9VcHBlciBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHRvVXBwZXIoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndG9VcHBlcicsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCB0b1YgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB0b1YoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndG9WJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHRyZWUgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB0cmVlKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3RyZWUnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgdHJpbSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHRyaW0oLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndHJpbScsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCB1bmZvbGQgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB1bmZvbGQoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndW5mb2xkJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHVuaW9uIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgdW5pb24oLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndW5pb24nLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgdW50aWwgbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB1bnRpbCguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCd1bnRpbCcsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCB2YWx1ZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHZhbHVlKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3ZhbHVlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHZhbHVlTWFwIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgdmFsdWVNYXAoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgndmFsdWVNYXAnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotCi0gIC8qKgotICAgKiBHcmFwaCB0cmF2ZXJzYWwgdmFsdWVzIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgdmFsdWVzKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3ZhbHVlcycsIGFyZ3MpOwotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqCi0gICAqIEdyYXBoIHRyYXZlcnNhbCB3aGVyZSBtZXRob2QuCi0gICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KLSAgICovCi0gIHdoZXJlKC4uLmFyZ3MpIHsKLSAgICB0aGlzLmJ5dGVjb2RlLmFkZFN0ZXAoJ3doZXJlJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHdpdGggbWV0aG9kLgotICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncwotICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9Ci0gICAqLwotICB3aXRoXyguLi5hcmdzKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCd3aXRoJywgYXJncyk7Ci0gICAgcmV0dXJuIHRoaXM7Ci0gIH0KLQotICAvKioKLSAgICogR3JhcGggdHJhdmVyc2FsIHdyaXRlIG1ldGhvZC4KLSAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKLSAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQotICAgKi8KLSAgd3JpdGUoLi4uYXJncykgewotICAgIHRoaXMuYnl0ZWNvZGUuYWRkU3RlcCgnd3JpdGUnLCBhcmdzKTsKLSAgICByZXR1cm4gdGhpczsKLSAgfQotfQotCi1jbGFzcyBDYXJkaW5hbGl0eVZhbHVlIGV4dGVuZHMgQnl0ZWNvZGUgewotICAvKioKLSAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgQ2FyZGluYWxpdHlWYWx1ZX0uCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBjYXJkCi0gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZQotICAgKi8KLSAgY29uc3RydWN0b3IoY2FyZCwgdmFsdWUpIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMuYWRkU291cmNlKCdDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsJywgW2NhcmQsIHZhbHVlXSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlIGEgdmFsdWUgd2l0aCBzaW5nbGUgY2FyZGluYWxpdHkuCi0gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlCi0gICAqIEByZXR1cm5zIHtDYXJkaW5hbGl0eVZhbHVlfQotICAgKi8KLSAgc3RhdGljIHNpbmdsZSh2YWx1ZSkgewotICAgIHJldHVybiBuZXcgQ2FyZGluYWxpdHlWYWx1ZShjYXJkaW5hbGl0eS5zaW5nbGUsIHZhbHVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB2YWx1ZSB3aXRoIGxpc3QgY2FyZGluYWxpdHkuCi0gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlCi0gICAqIEByZXR1cm5zIHtDYXJkaW5hbGl0eVZhbHVlfQotICAgKi8KLSAgc3RhdGljIGxpc3QodmFsdWUpIHsKLSAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5VmFsdWUoY2FyZGluYWxpdHkubGlzdCwgdmFsdWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZSBhIHZhbHVlIHdpdGggc2V0IGNhcmRpbmFsaXR5LgotICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZQotICAgKiBAcmV0dXJucyB7Q2FyZGluYWxpdHlWYWx1ZX0KLSAgICovCi0gIHN0YXRpYyBzZXQodmFsdWUpIHsKLSAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5VmFsdWUoY2FyZGluYWxpdHkuc2V0LCB2YWx1ZSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoZm5OYW1lLCBhcmdzKSB7Ci0gIGNvbnN0IGcgPSBuZXcgR3JhcGhUcmF2ZXJzYWwobnVsbCwgbnVsbCwgbmV3IEJ5dGVjb2RlKCkpOwotICByZXR1cm4gZ1tmbk5hbWVdLmFwcGx5KGcsIGFyZ3MpOwotfQotCi0vKioKLSAqIENvbnRhaW5zIHRoZSBzdGF0aWMgbWV0aG9kIGRlZmluaXRpb25zCi0gKiBAdHlwZSB7T2JqZWN0fQotICovCi1jb25zdCBzdGF0aWNzID0gewotICBFOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ0UnLCBhcmdzKSwKLSAgVjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdWJywgYXJncyksCi0gIGFkZEU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYWRkRScsIGFyZ3MpLAotICBhZGRWOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2FkZFYnLCBhcmdzKSwKLSAgYWdncmVnYXRlOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2FnZ3JlZ2F0ZScsIGFyZ3MpLAotICBhbGw6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYWxsJywgYXJncyksCi0gIGFuZDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdhbmQnLCBhcmdzKSwKLSAgYW55OiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2FueScsIGFyZ3MpLAotICBhczogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdhcycsIGFyZ3MpLAotICBhc0Jvb2w6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYXNCb29sJywgYXJncyksCi0gIGFzRGF0ZTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdhc0RhdGUnLCBhcmdzKSwKLSAgYXNOdW1iZXI6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYXNOdW1iZXInLCBhcmdzKSwKLSAgYXNTdHJpbmc6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYXNTdHJpbmcnLCBhcmdzKSwKLSAgYmFycmllcjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdiYXJyaWVyJywgYXJncyksCi0gIGJvdGg6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYm90aCcsIGFyZ3MpLAotICBib3RoRTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdib3RoRScsIGFyZ3MpLAotICBib3RoVjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdib3RoVicsIGFyZ3MpLAotICBicmFuY2g6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYnJhbmNoJywgYXJncyksCi0gIGNhbGw6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY2FsbCcsIGFyZ3MpLAotICBjYXA6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY2FwJywgYXJncyksCi0gIGNob29zZTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjaG9vc2UnLCBhcmdzKSwKLSAgY29hbGVzY2U6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY29hbGVzY2UnLCBhcmdzKSwKLSAgY29pbjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjb2luJywgYXJncyksCi0gIGNvbWJpbmU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY29tYmluZScsIGFyZ3MpLAotICBjb25jYXQ6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY29uY2F0JywgYXJncyksCi0gIGNvbmpvaW46ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY29uam9pbicsIGFyZ3MpLAotICBjb25zdGFudDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjb25zdGFudCcsIGFyZ3MpLAotICBjb3VudDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjb3VudCcsIGFyZ3MpLAotICBjeWNsaWNQYXRoOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2N5Y2xpY1BhdGgnLCBhcmdzKSwKLSAgZGF0ZUFkZDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkYXRlQWRkJywgYXJncyksCi0gIGRhdGVEaWZmOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2RhdGVEaWZmJywgYXJncyksCi0gIGRlZHVwOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2RlZHVwJywgYXJncyksCi0gIGRpZmZlcmVuY2U6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZGlmZmVyZW5jZScsIGFyZ3MpLAotICBkaXNjYXJkOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2Rpc2NhcmQnLCBhcmdzKSwKLSAgZGlzanVuY3Q6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZGlzanVuY3QnLCBhcmdzKSwKLSAgZHJvcDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkcm9wJywgYXJncyksCi0gIGVsZW1lbnQ6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZWxlbWVudCcsIGFyZ3MpLAotICBlbGVtZW50TWFwOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2VsZW1lbnRNYXAnLCBhcmdzKSwKLSAgZW1pdDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdlbWl0JywgYXJncyksCi0gIGZhaWw6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZmFpbCcsIGFyZ3MpLAotICBmaWx0ZXI6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZmlsdGVyJywgYXJncyksCi0gIGZsYXRNYXA6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZmxhdE1hcCcsIGFyZ3MpLAotICBmb2xkOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2ZvbGQnLCBhcmdzKSwKLSAgZm9ybWF0OiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2Zvcm1hdCcsIGFyZ3MpLAotICBncm91cDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdncm91cCcsIGFyZ3MpLAotICBncm91cENvdW50OiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2dyb3VwQ291bnQnLCBhcmdzKSwKLSAgaGFzOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2hhcycsIGFyZ3MpLAotICBoYXNJZDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdoYXNJZCcsIGFyZ3MpLAotICBoYXNLZXk6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaGFzS2V5JywgYXJncyksCi0gIGhhc0xhYmVsOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2hhc0xhYmVsJywgYXJncyksCi0gIGhhc05vdDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdoYXNOb3QnLCBhcmdzKSwKLSAgaGFzVmFsdWU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaGFzVmFsdWUnLCBhcmdzKSwKLSAgaWQ6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaWQnLCBhcmdzKSwKLSAgaWRlbnRpdHk6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaWRlbnRpdHknLCBhcmdzKSwKLSAgaW5fOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2luXycsIGFyZ3MpLAotICBpbkU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaW5FJywgYXJncyksCi0gIGluVjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdpblYnLCBhcmdzKSwKLSAgaW5kZXg6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaW5kZXgnLCBhcmdzKSwKLSAgaW5qZWN0OiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2luamVjdCcsIGFyZ3MpLAotICBpbnRlcnNlY3Q6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaW50ZXJzZWN0JywgYXJncyksCi0gIGlzOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2lzJywgYXJncyksCi0gIGtleTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdrZXknLCBhcmdzKSwKLSAgbGFiZWw6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbGFiZWwnLCBhcmdzKSwKLSAgbGVuZ3RoOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2xlbmd0aCcsIGFyZ3MpLAotICBsaW1pdDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdsaW1pdCcsIGFyZ3MpLAotICBsb2NhbDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdsb2NhbCcsIGFyZ3MpLAotICBsb29wczogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdsb29wcycsIGFyZ3MpLAotICBsVHJpbTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdsVHJpbScsIGFyZ3MpLAotICBtYXA6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWFwJywgYXJncyksCi0gIG1hdGNoOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ21hdGNoJywgYXJncyksCi0gIG1hdGg6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWF0aCcsIGFyZ3MpLAotICBtYXg6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWF4JywgYXJncyksCi0gIG1lYW46ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWVhbicsIGFyZ3MpLAotICBtZXJnZTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdtZXJnZScsIGFyZ3MpLAotICBtZXJnZUU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWVyZ2VFJywgYXJncyksCi0gIG1lcmdlVjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdtZXJnZVYnLCBhcmdzKSwKLSAgbWluOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ21pbicsIGFyZ3MpLAotICBub25lOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ25vbmUnLCBhcmdzKSwKLSAgbm90OiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ25vdCcsIGFyZ3MpLAotICBvcHRpb25hbDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvcHRpb25hbCcsIGFyZ3MpLAotICBvcjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvcicsIGFyZ3MpLAotICBvcmRlcjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvcmRlcicsIGFyZ3MpLAotICBvdGhlclY6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnb3RoZXJWJywgYXJncyksCi0gIG91dDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvdXQnLCBhcmdzKSwKLSAgb3V0RTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvdXRFJywgYXJncyksCi0gIG91dFY6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnb3V0VicsIGFyZ3MpLAotICBwYXRoOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3BhdGgnLCBhcmdzKSwKLSAgcHJvZHVjdDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdwcm9kdWN0JywgYXJncyksCi0gIHByb2plY3Q6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncHJvamVjdCcsIGFyZ3MpLAotICBwcm9wZXJ0aWVzOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3Byb3BlcnRpZXMnLCBhcmdzKSwKLSAgcHJvcGVydHk6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncHJvcGVydHknLCBhcmdzKSwKLSAgcHJvcGVydHlNYXA6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncHJvcGVydHlNYXAnLCBhcmdzKSwKLSAgcmFuZ2U6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncmFuZ2UnLCBhcmdzKSwKLSAgcmVwZWF0OiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3JlcGVhdCcsIGFyZ3MpLAotICByZXBsYWNlOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3JlcGxhY2UnLCBhcmdzKSwKLSAgcmV2ZXJzZTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdyZXZlcnNlJywgYXJncyksCi0gIHJUcmltOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3JUcmltJywgYXJncyksCi0gIHNhY2s6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc2FjaycsIGFyZ3MpLAotICBzYW1wbGU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc2FtcGxlJywgYXJncyksCi0gIHNlbGVjdDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdzZWxlY3QnLCBhcmdzKSwKLSAgc2lkZUVmZmVjdDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdzaWRlRWZmZWN0JywgYXJncyksCi0gIHNpbXBsZVBhdGg6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc2ltcGxlUGF0aCcsIGFyZ3MpLAotICBza2lwOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3NraXAnLCBhcmdzKSwKLSAgc3BsaXQ6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc3BsaXQnLCBhcmdzKSwKLSAgc3ViZ3JhcGg6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc3ViZ3JhcGgnLCBhcmdzKSwKLSAgc3Vic3RyaW5nOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3N1YnN0cmluZycsIGFyZ3MpLAotICBzdW06ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc3VtJywgYXJncyksCi0gIHRhaWw6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndGFpbCcsIGFyZ3MpLAotICB0aW1lTGltaXQ6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndGltZUxpbWl0JywgYXJncyksCi0gIHRpbWVzOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RpbWVzJywgYXJncyksCi0gIHRvOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RvJywgYXJncyksCi0gIHRvRTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd0b0UnLCBhcmdzKSwKLSAgdG9Mb3dlcjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd0b0xvd2VyJywgYXJncyksCi0gIHRvVXBwZXI6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndG9VcHBlcicsIGFyZ3MpLAotICB0b1Y6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndG9WJywgYXJncyksCi0gIHRyZWU6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndHJlZScsIGFyZ3MpLAotICB0cmltOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RyaW0nLCBhcmdzKSwKLSAgdW5mb2xkOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3VuZm9sZCcsIGFyZ3MpLAotICB1bmlvbjogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd1bmlvbicsIGFyZ3MpLAotICB1bnRpbDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd1bnRpbCcsIGFyZ3MpLAotICB2YWx1ZTogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd2YWx1ZScsIGFyZ3MpLAotICB2YWx1ZU1hcDogKC4uLmFyZ3MpID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd2YWx1ZU1hcCcsIGFyZ3MpLAotICB2YWx1ZXM6ICguLi5hcmdzKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndmFsdWVzJywgYXJncyksCi0gIHdoZXJlOiAoLi4uYXJncykgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3doZXJlJywgYXJncyksCi19OwotCi1tb2R1bGUuZXhwb3J0cyA9IHsKLSAgR3JhcGhUcmF2ZXJzYWwsCi0gIEdyYXBoVHJhdmVyc2FsU291cmNlLAotICBDYXJkaW5hbGl0eVZhbHVlLAotICBzdGF0aWNzLAotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmFuc2FjdGlvbi5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmFuc2FjdGlvbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTYwZTM4Zi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhbnNhY3Rpb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgcmVtb3RlID0gcmVxdWlyZSgnLi4vZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uJyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4vYnl0ZWNvZGUnKTsKLWNvbnN0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcyB9ID0gcmVxdWlyZSgnLi90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLQotLyoqCi0gKiBBIGNvbnRyb2xsZXIgZm9yIGEgcmVtb3RlIHRyYW5zYWN0aW9uIHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSA8Y29kZT5nLnR4KCk8L2NvZGU+LiBDYWxsaW5nIDxjb2RlPmJlZ2luKCk8L2NvZGU+Ci0gKiBvbiB0aGlzIG9iamVjdCB3aWxsIHByb2R1Y2UgYSBuZXcgPGNvZGU+R3JhcGhUcmF2ZXJzYWxTb3VyY2U8L2NvZGU+IHRoYXQgaXMgYm91bmQgdG8gYSByZW1vdGUgdHJhbnNhY3Rpb24gb3ZlciB3aGljaAotICogbXVsdGlwbGUgdHJhdmVyc2FscyBtYXkgYmUgZXhlY3V0ZWQgaW4gdGhhdCBjb250ZXh0LiBDYWxsaW5nIDxjb2RlPmNvbW1pdCgpPC9jb2RlPiBvciA8Y29kZT5yb2xsYmFjaygpPC9jb2RlPiB3aWxsCi0gKiB0aGVuIGNsb3NlIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGh1cywgdGhlIHNlc3Npb24uIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIHdpdGggdHJhbnNhY3Rpb24gZW5hYmxlZCBncmFwaHMuCi0gKi8KLWNsYXNzIFRyYW5zYWN0aW9uIHsKLSAgY29uc3RydWN0b3IoZykgewotICAgIHRoaXMuX2cgPSBnOwotICAgIHRoaXMuX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24gPSB1bmRlZmluZWQ7Ci0gIH0KLQotICAvKioKLSAgICogU3Bhd25zIGEgPGNvZGU+R3JhcGhUcmF2ZXJzYWxTb3VyY2U8L2NvZGU+IHRoYXQgaXMgYm91bmQgdG8gYSByZW1vdGUgc2Vzc2lvbiB3aGljaCBlbmFibGVzIGEgdHJhbnNhY3Rpb24uCi0gICAqIEByZXR1cm5zIHsqfQotICAgKi8KLSAgYmVnaW4oKSB7Ci0gICAgaWYgKHRoaXMuX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24pIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gYWxyZWFkeSBzdGFydGVkIG9uIHRoaXMgb2JqZWN0Jyk7Ci0gICAgfQotCi0gICAgdGhpcy5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbiA9IHRoaXMuX2cucmVtb3RlQ29ubmVjdGlvbi5jcmVhdGVTZXNzaW9uKCk7Ci0gICAgY29uc3QgdHJhdmVyc2FsU3RyYXRlZ3kgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcygpOwotICAgIHRyYXZlcnNhbFN0cmF0ZWd5LmFkZFN0cmF0ZWd5KG5ldyByZW1vdGUuUmVtb3RlU3RyYXRlZ3kodGhpcy5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbikpOwotICAgIHJldHVybiBuZXcgdGhpcy5fZy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzKAotICAgICAgdGhpcy5fZy5ncmFwaCwKLSAgICAgIHRyYXZlcnNhbFN0cmF0ZWd5LAotICAgICAgbmV3IEJ5dGVjb2RlKHRoaXMuX2cuYnl0ZWNvZGUpLAotICAgICAgdGhpcy5fZy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzLAotICAgICAgdGhpcy5fZy5ncmFwaFRyYXZlcnNhbENsYXNzLAotICAgICk7Ci0gIH0KLQotICAvKioKLSAgICogQHJldHVybnMge1Byb21pc2V9Ci0gICAqLwotICBjb21taXQoKSB7Ci0gICAgaWYgKCF0aGlzLl9zZXNzaW9uQmFzZWRDb25uZWN0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21taXQgYSB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBzdGFydGVkJyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24uY29tbWl0KCkuZmluYWxseSgoKSA9PiB0aGlzLmNsb3NlKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEByZXR1cm5zIHtQcm9taXNlfQotICAgKi8KLSAgcm9sbGJhY2soKSB7Ci0gICAgaWYgKCF0aGlzLl9zZXNzaW9uQmFzZWRDb25uZWN0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQnKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5yb2xsYmFjaygpLmZpbmFsbHkoKCkgPT4gdGhpcy5jbG9zZSgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdHJhbnNhY3Rpb24gaXMgb3Blbi4KLSAgICogQHJldHVybnMge0Jvb2xlYW59Ci0gICAqLwotICBnZXQgaXNPcGVuKCkgewotICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQmFzZWRDb25uZWN0aW9uLmlzT3BlbjsKLSAgfQotCi0gIC8qKgotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KLSAgICovCi0gIGNsb3NlKCkgewotICAgIGlmICh0aGlzLl9zZXNzaW9uQmFzZWRDb25uZWN0aW9uKSB7Ci0gICAgICB0aGlzLl9zZXNzaW9uQmFzZWRDb25uZWN0aW9uLmNsb3NlKCk7Ci0gICAgfQotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICBUcmFuc2FjdGlvbiwKLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhbnNsYXRvci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmFuc2xhdG9yLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjU4OTA3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmFuc2xhdG9yLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IFRyYXZlcnNhbCA9IHJlcXVpcmUoJy4vdHJhdmVyc2FsJykuVHJhdmVyc2FsOwotY29uc3QgQnl0ZWNvZGUgPSByZXF1aXJlKCcuL2J5dGVjb2RlJyk7Ci0KLS8qKgotICogQ2xhc3MgdG8gdHJhbnNsYXRlIGdsdiBieXRlY29kZSBzdGVwcyBpbnRvIGV4ZWN1dGFibGUgR3JlbWxpbi1Hcm9vdnkgc2NyaXB0Ci0gKi8KLWNsYXNzIFRyYW5zbGF0b3IgewotICBjb25zdHJ1Y3Rvcih0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgICB0aGlzLl90cmF2ZXJzYWxTb3VyY2UgPSB0cmF2ZXJzYWxTb3VyY2U7Ci0gIH0KLQotICBnZXRUcmF2ZXJzYWxTb3VyY2UoKSB7Ci0gICAgcmV0dXJuIHRoaXMuX3RyYXZlcnNhbFNvdXJjZTsKLSAgfQotCi0gIGdldFRhcmdldExhbmd1YWdlKCkgewotICAgIHJldHVybiAnZ3JlbWxpbi1ncm9vdnknOwotICB9Ci0KLSAgb2YodHJhdmVyc2FsU291cmNlKSB7Ci0gICAgdGhpcy5fdHJhdmVyc2FsU291cmNlID0gdHJhdmVyc2FsU291cmNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBzY3JpcHQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KLSAgICogQHBhcmFtIHtPYmplY3R9IGJ5dGVjb2RlT3JUcmF2ZXJzYWwgVGhlIHRyYXZlcnNhbCBvciBieXRlY29kZSBvZiBhIHRyYXZlcnNhbCBjb250YWluaW5nIHN0ZXAgaW5zdHJ1Y3Rpb25zLgotICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNoaWxkIERldGVybWluZXMgaWYgYSB0cmF2ZXJzYWwgb2JqZWN0IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGFub255bW91cyBjaGlsZCBvciBpZiBpdCBpcyBhIHNwYXduIGZyb20gImciCi0gICAqIEByZXR1cm5zIHtzdHJpbmd9IEdyZW1saW4tR3Jvb3Z5IHNjcmlwdAotICAgKi8KLSAgdHJhbnNsYXRlKGJ5dGVjb2RlT3JUcmF2ZXJzYWwsIGNoaWxkID0gZmFsc2UpIHsKLSAgICBsZXQgc2NyaXB0ID0gY2hpbGQgPyAnX18nIDogdGhpcy5fdHJhdmVyc2FsU291cmNlOwotICAgIGNvbnN0IGJjID0gYnl0ZWNvZGVPclRyYXZlcnNhbCBpbnN0YW5jZW9mIEJ5dGVjb2RlID8gYnl0ZWNvZGVPclRyYXZlcnNhbCA6IGJ5dGVjb2RlT3JUcmF2ZXJzYWwuZ2V0Qnl0ZWNvZGUoKTsKLQotICAgIGNvbnN0IGluc3RydWN0aW9ucyA9IGJjLnN0ZXBJbnN0cnVjdGlvbnM7Ci0KLSAgICAvLyBidWlsZCB0aGUgc2NyaXB0IGZyb20gdGhlIGdsdiBpbnN0cnVjdGlvbnMuCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGNvbnN0IHBhcmFtcyA9IGluc3RydWN0aW9uc1tpXS5zbGljZSgxKTsKLSAgICAgIHNjcmlwdCArPSAnLicgKyBpbnN0cnVjdGlvbnNbaV1bMF0gKyAnKCc7Ci0KLSAgICAgIGlmIChwYXJhbXMubGVuZ3RoKSB7Ci0gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcGFyYW1zLmxlbmd0aDsgaysrKSB7Ci0gICAgICAgICAgaWYgKGsgPiAwKSB7Ci0gICAgICAgICAgICBzY3JpcHQgKz0gJywgJzsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBzY3JpcHQgKz0gdGhpcy5jb252ZXJ0KHBhcmFtc1trXSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc2NyaXB0ICs9ICcpJzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2NyaXB0OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnRzIGFuIG9iamVjdCB0byBhIEdyZW1saW4gc2NyaXB0IHJlcHJlc2VudGF0aW9uLgotICAgKiBAcGFyYW0ge09iamVjdH0gYW55T2JqZWN0IFRoZSBvYmplY3QgdG8gY29udmVydCB0byBhIHNjcmlwdCByZXByZXNlbnRhdGlvbgotICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgR3JlbWxpbiBzY3JpcHQgcmVwcmVzZW50YXRpb24KLSAgICovCi0gIGNvbnZlcnQoYW55T2JqZWN0KSB7Ci0gICAgbGV0IHNjcmlwdCA9ICcnOwotICAgIGlmIChPYmplY3QoYW55T2JqZWN0KSA9PT0gYW55T2JqZWN0KSB7Ci0gICAgICBpZiAoYW55T2JqZWN0IGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7Ci0gICAgICAgIHNjcmlwdCArPSB0aGlzLnRyYW5zbGF0ZShhbnlPYmplY3QuZ2V0Qnl0ZWNvZGUoKSwgdHJ1ZSk7Ci0gICAgICB9IGVsc2UgaWYgKGFueU9iamVjdC50b1N0cmluZygpID09PSAnW29iamVjdCBPYmplY3RdJykgewotICAgICAgICBPYmplY3Qua2V5cyhhbnlPYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSwgaW5kZXgpIHsKLSAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7Ci0gICAgICAgICAgICBzY3JpcHQgKz0gJywgJzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc2NyaXB0ICs9IGAoJyR7a2V5fScsIGA7Ci0gICAgICAgICAgaWYgKGFueU9iamVjdFtrZXldIGluc3RhbmNlb2YgU3RyaW5nIHx8IHR5cGVvZiBhbnlPYmplY3Rba2V5XSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgICAgIHNjcmlwdCArPSBgJyR7YCR7YW55T2JqZWN0W2tleV19YC5yZXBsYWNlQWxsKCInIiwgIlxcJyIpfSdgOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHF1b3RlcwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzY3JpcHQgKz0gYW55T2JqZWN0W2tleV07Ci0gICAgICAgICAgfQotICAgICAgICAgIHNjcmlwdCArPSAnKSc7Ci0gICAgICAgIH0pOwotICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFueU9iamVjdCkpIHsKLSAgICAgICAgY29uc3QgcGFydHMgPSBbXTsKLSAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFueU9iamVjdCkgewotICAgICAgICAgIHBhcnRzLnB1c2godGhpcy5jb252ZXJ0KGl0ZW0pKTsKLSAgICAgICAgfQotICAgICAgICBzY3JpcHQgKz0gJ1snICsgcGFydHMuam9pbignLCAnKSArICddJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHNjcmlwdCArPSBhbnlPYmplY3QudG9TdHJpbmcoKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGFueU9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IGFueU9iamVjdCA9PT0gbnVsbCkgewotICAgICAgc2NyaXB0ICs9ICdudWxsJzsKLSAgICB9IGVsc2UgaWYgKHR5cGVvZiBhbnlPYmplY3QgPT09ICdudW1iZXInIHx8IHR5cGVvZiBhbnlPYmplY3QgPT09ICdib29sZWFuJykgewotICAgICAgc2NyaXB0ICs9IGFueU9iamVjdDsKLSAgICB9IGVsc2UgewotICAgICAgc2NyaXB0ICs9IGAnJHtgJHthbnlPYmplY3R9YC5yZXBsYWNlQWxsKCInIiwgIlxcJyIpfSdgOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHF1b3RlcwotICAgIH0KLQotICAgIHJldHVybiBzY3JpcHQ7Ci0gIH0KLX0KLQotbW9kdWxlLmV4cG9ydHMgPSBUcmFuc2xhdG9yOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneS5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3kuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxZTk5MjcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneS5qcworKysgL2Rldi9udWxsCkBAIC0xLDQxNSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IFRyYXZlcnNhbCA9IHJlcXVpcmUoJy4vdHJhdmVyc2FsJykuVHJhdmVyc2FsOwotCi1jbGFzcyBUcmF2ZXJzYWxTdHJhdGVnaWVzIHsKLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgVHJhdmVyc2FsU3RyYXRlZ2llcy4KLSAgICogQHBhcmFtIHtUcmF2ZXJzYWxTdHJhdGVnaWVzfSBbcGFyZW50XSBUaGUgcGFyZW50IHN0cmF0ZWdpZXMgZnJvbSB3aGVyZSB0byBjbG9uZSB0aGUgdmFsdWVzIGZyb20uCi0gICAqIEBjb25zdHJ1Y3RvcgotICAgKi8KLSAgY29uc3RydWN0b3IocGFyZW50KSB7Ci0gICAgaWYgKHBhcmVudCkgewotICAgICAgLy8gQ2xvbmUgdGhlIHN0cmF0ZWdpZXMKLSAgICAgIHRoaXMuc3RyYXRlZ2llcyA9IFsuLi5wYXJlbnQuc3RyYXRlZ2llc107Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuc3RyYXRlZ2llcyA9IFtdOwotICAgIH0KLSAgfQotCi0gIC8qKiBAcGFyYW0ge1RyYXZlcnNhbFN0cmF0ZWd5fSBzdHJhdGVneSAqLwotICBhZGRTdHJhdGVneShzdHJhdGVneSkgewotICAgIHRoaXMuc3RyYXRlZ2llcy5wdXNoKHN0cmF0ZWd5KTsKLSAgfQotCi0gIC8qKiBAcGFyYW0ge1RyYXZlcnNhbFN0cmF0ZWd5fSBzdHJhdGVneSAqLwotICByZW1vdmVTdHJhdGVneShzdHJhdGVneSkgewotICAgIGNvbnN0IGlkeCA9IHRoaXMuc3RyYXRlZ2llcy5maW5kSW5kZXgoKHMpID0+IHMuZnFjbiA9PT0gc3RyYXRlZ3kuZnFjbik7Ci0gICAgaWYgKGlkeCAhPT0gLTEpIHsKLSAgICAgIHJldHVybiB0aGlzLnN0cmF0ZWdpZXMuc3BsaWNlKGlkeCwgMSlbMF07Ci0gICAgfQotCi0gICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgfQotCi0gIC8qKgotICAgKiBAcGFyYW0ge1RyYXZlcnNhbH0gdHJhdmVyc2FsCi0gICAqIEByZXR1cm5zIHtQcm9taXNlfQotICAgKi8KLSAgYXBwbHlTdHJhdGVnaWVzKHRyYXZlcnNhbCkgewotICAgIC8vIEFwcGx5IGFsbCBzdHJhdGVnaWVzIHNlcmlhbGx5Ci0gICAgcmV0dXJuIHRoaXMuc3RyYXRlZ2llcy5yZWR1Y2UoCi0gICAgICAocHJvbWlzZSwgc3RyYXRlZ3kpID0+IHByb21pc2UudGhlbigoKSA9PiBzdHJhdGVneS5hcHBseSh0cmF2ZXJzYWwpKSwKLSAgICAgIFByb21pc2UucmVzb2x2ZSgpLAotICAgICk7Ci0gIH0KLX0KLQotLyoqIEBhYnN0cmFjdCAqLwotY2xhc3MgVHJhdmVyc2FsU3RyYXRlZ3kgewotICAvKioKLSAgICogQHBhcmFtIHtTdHJpbmd9IGZxY24gZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgaW4gSmF2YSBvZiB0aGUgc3RyYXRlZ3kKLSAgICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzdHJhdGVneQotICAgKi8KLSAgY29uc3RydWN0b3IoZnFjbiwgY29uZmlndXJhdGlvbiA9IHt9KSB7Ci0gICAgdGhpcy5mcWNuID0gZnFjbjsKLSAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEBhYnN0cmFjdAotICAgKiBAcGFyYW0ge1RyYXZlcnNhbH0gdHJhdmVyc2FsCi0gICAqIEByZXR1cm5zIHtQcm9taXNlfQotICAgKi8KLSAgYXBwbHkodHJhdmVyc2FsKSB7fQotfQotCi1jbGFzcyBDb25uZWN0aXZlU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uQ29ubmVjdGl2ZVN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgRWxlbWVudElkU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uRWxlbWVudElkU3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7U3RyaW5nfSBoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5IGZ1bGwgcXVhbGlmaWVkIGNsYXNzIG5hbWUgaW4gSmF2YSBvZiBhIHtAY29kZSBIYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5fSBpbXBsZW1lbnRhdGlvbgotICAgKi8KLSAgY29uc3RydWN0b3IoeyBoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5IH0gPSB7fSkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3knKTsKLSAgICBpZiAoaGFsdGVkVHJhdmVyc2VyRmFjdG9yeSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bJ2hhbHRlZFRyYXZlcnNlckZhY3RvcnknXSA9IGhhbHRlZFRyYXZlcnNlckZhY3Rvcnk7Ci0gICAgfQotICB9Ci19Ci0KLWNsYXNzIE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKAotICAgICAgJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLk1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3knLAotICAgICk7Ci0gIH0KLX0KLQotY2xhc3MgT3B0aW9uc1N0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5PcHRpb25zU3RyYXRlZ3knKTsKLSAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBvcHRpb25zOwotICAgIH0KLSAgfQotfQotCi1jbGFzcyBQYXJ0aXRpb25TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KLSAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBhcnRpdGlvbktleV0gbmFtZSBvZiB0aGUgcHJvcGVydHkga2V5IHRvIHBhcnRpdGlvbiBieQotICAgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMud3JpdGVQYXJ0aXRpb25dIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudGx5IHdyaXRlIHBhcnRpdGlvbgotICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IFtvcHRpb25zLnJlYWRQYXJ0aXRpb25zXSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwYXJ0aXRpb25zIHRvIGluY2x1ZGUgZm9yIHJlYWRzCi0gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzXSBkZXRlcm1pbmVzIGlmIG1ldGEtcHJvcGVydGllcyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gcGFydGl0aW9uaW5nIGRlZmF1bHRpbmcgdG8gZmFsc2UKLSAgICovCi0gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlBhcnRpdGlvblN0cmF0ZWd5Jywgb3B0aW9ucyk7Ci0gIH0KLX0KLQotY2xhc3MgUHJvZmlsZVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uUHJvZmlsZVN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgU2VlZFN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICAvKioKLSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQotICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2VlZF0gdGhlIHNlZWQgdG8gcHJvdmlkZSB0byB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIHRoZSB0cmF2ZXJzYWwKLSAgICovCi0gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlNlZWRTdHJhdGVneScsIHsKLSAgICAgIHNlZWQ6IG9wdGlvbnM/LnNlZWQsCi0gICAgfSk7Ci0gIH0KLX0KLQotY2xhc3MgU3ViZ3JhcGhTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgLyoqCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KLSAgICogQHBhcmFtIHtHcmFwaFRyYXZlcnNhbH0gW29wdGlvbnMudmVydGljZXNdIG5hbWUgb2YgdGhlIHByb3BlcnR5IGtleSB0byBwYXJ0aXRpb24gYnkKLSAgICogQHBhcmFtIHtHcmFwaFRyYXZlcnNhbH0gW29wdGlvbnMuZWRnZXNdIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudGx5IHdyaXRlIHBhcnRpdGlvbgotICAgKiBAcGFyYW0ge0dyYXBoVHJhdmVyc2FsfSBbb3B0aW9ucy52ZXJ0ZXhQcm9wZXJ0aWVzXSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwYXJ0aXRpb25zIHRvIGluY2x1ZGUgZm9yIHJlYWRzCi0gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuY2hlY2tBZGphY2VudFZlcnRpY2VzXSBlbmFibGVzIHRoZSBzdHJhdGVneSB0byBhcHBseSB0aGUge0Bjb2RlIHZlcnRpY2VzfSBmaWx0ZXIgdG8gdGhlIGFkamFjZW50IHZlcnRpY2VzIG9mIGFuIGVkZ2UuCi0gICAqLwotICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5Jywgb3B0aW9ucyk7Ci0gICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi52ZXJ0aWNlcyBpbnN0YW5jZW9mIFRyYXZlcnNhbCkgewotICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnZlcnRpY2VzID0gdGhpcy5jb25maWd1cmF0aW9uLnZlcnRpY2VzLmJ5dGVjb2RlOwotICAgIH0KLSAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmVkZ2VzIGluc3RhbmNlb2YgVHJhdmVyc2FsKSB7Ci0gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uZWRnZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZWRnZXMuYnl0ZWNvZGU7Ci0gICAgfQotICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24udmVydGV4UHJvcGVydGllcyBpbnN0YW5jZW9mIFRyYXZlcnNhbCkgewotICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnZlcnRleFByb3BlcnRpZXMgPSB0aGlzLmNvbmZpZ3VyYXRpb24udmVydGV4UHJvcGVydGllcy5ieXRlY29kZTsKLSAgICB9Ci0gIH0KLX0KLQotY2xhc3MgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3knLCBvcHRpb25zKTsKLSAgfQotfQotCi1jbGFzcyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICAvKioKLSAgICogQHBhcmFtIG1hdGNoQWxnb3JpdGhtCi0gICAqLwotICBjb25zdHJ1Y3Rvcih7IG1hdGNoQWxnb3JpdGhtIH0gPSB7fSkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5NYXRjaEFsZ29yaXRobVN0cmF0ZWd5Jyk7Ci0gICAgaWYgKG1hdGNoQWxnb3JpdGhtICE9PSB1bmRlZmluZWQpIHsKLSAgICAgIHRoaXMuY29uZmlndXJhdGlvblsnbWF0Y2hBbGdvcml0aG0nXSA9IG1hdGNoQWxnb3JpdGhtOwotICAgIH0KLSAgfQotfQotCi1jbGFzcyBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIEZpbHRlclJhbmtpbmdTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgY29uc3RydWN0b3IoKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkZpbHRlclJhbmtpbmdTdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgY29uc3RydWN0b3IoKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgSW5saW5lRmlsdGVyU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JbmxpbmVGaWx0ZXJTdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIExhenlCYXJyaWVyU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5MYXp5QmFycmllclN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgY29uc3RydWN0b3IoKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLk1hdGNoUHJlZGljYXRlU3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBPcmRlckxpbWl0U3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5PcmRlckxpbWl0U3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBQYXRoUHJvY2Vzc29yU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5QYXRoUHJvY2Vzc29yU3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBQYXRoUmV0cmFjdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUGF0aFJldHJhY3Rpb25TdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIFByb2R1Y3RpdmVCeVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICAvKioKLSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQotICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZz59IHByb2R1Y3RpdmVLZXlzIHNldCBvZiBrZXlzIHRoYXQgd2lsbCBhbHdheXMgYmUgcHJvZHVjdGl2ZQotICAgKi8KLSAgY29uc3RydWN0b3IoeyBwcm9kdWN0aXZlS2V5cyA9IFtdIH0gPSB7fSkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Qcm9kdWN0aXZlQnlTdHJhdGVneScpOwotICAgIHRoaXMuY29uZmlndXJhdGlvblsncHJvZHVjdGl2ZUtleXMnXSA9IHByb2R1Y3RpdmVLZXlzOwotICB9Ci19Ci0KLWNsYXNzIENvdW50U3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Db3VudFN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgUmVwZWF0VW5yb2xsU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIEdyYXBoRmlsdGVyU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5HcmFwaEZpbHRlclN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgRWFybHlMaW1pdFN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uRWFybHlMaW1pdFN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKLSAgY29uc3RydWN0b3IoKSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLkNvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3knKTsKLSAgfQotfQotCi1jbGFzcyBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneScpOwotICB9Ci19Ci0KLWNsYXNzIFJlYWRPbmx5U3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5Jyk7Ci0gIH0KLX0KLQotY2xhc3MgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7Ci0gIC8qKgotICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ1dhcm5pbmdzIGRldGVybWluZXMgaWYgd2FybmluZ3Mgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlIGxvZ2dlciB3aGVuIHZlcmlmaWNhdGlvbiBmYWlscwotICAgKiBAcGFyYW0ge2Jvb2xlYW59IHRocm93RXhjZXB0aW9uIGRldGVybWluZXMgaWYgZXhjZXB0aW9ucyBzaG91bGQgYmUgdGhyb3duIHdoZW4gdmVyaWZpY2F0aW9ucyBmYWlscwotICAgKi8KLSAgY29uc3RydWN0b3IoeyBsb2dXYXJuaW5ncyA9IGZhbHNlLCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlIH0gPSB7fSkgewotICAgIHN1cGVyKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5FZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneScpOwotICAgIHRoaXMuY29uZmlndXJhdGlvblsnbG9nV2FybmluZ3MnXSA9IGxvZ1dhcm5pbmdzOwotICAgIHRoaXMuY29uZmlndXJhdGlvblsndGhyb3dFeGNlcHRpb24nXSA9IHRocm93RXhjZXB0aW9uOwotICB9Ci19Ci0KLWNsYXNzIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICAvKioKLSAgICogQHBhcmFtIHtib29sZWFufSBsb2dXYXJuaW5ncyBkZXRlcm1pbmVzIGlmIHdhcm5pbmdzIHNob3VsZCBiZSB3cml0dGVuIHRvIHRoZSBsb2dnZXIgd2hlbiB2ZXJpZmljYXRpb24gZmFpbHMKLSAgICogQHBhcmFtIHtib29sZWFufSB0aHJvd0V4Y2VwdGlvbiBkZXRlcm1pbmVzIGlmIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHRocm93biB3aGVuIHZlcmlmaWNhdGlvbnMgZmFpbHMKLSAgICogQHBhcmFtIHtBcnJheTxTdHJpbmc+fSBrZXlzIHRoZSBsaXN0IG9mIHJlc2VydmVkIGtleXMgdG8gdmVyaWZ5Ci0gICAqLwotICBjb25zdHJ1Y3Rvcih7IGxvZ1dhcm5pbmdzID0gZmFsc2UsIHRocm93RXhjZXB0aW9uID0gZmFsc2UsIGtleXMgPSBbJ2lkJywgJ2xhYmVsJ10gfSA9IHt9KSB7Ci0gICAgc3VwZXIoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5Jyk7Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uWydsb2dXYXJuaW5ncyddID0gbG9nV2FybmluZ3M7Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uWyd0aHJvd0V4Y2VwdGlvbiddID0gdGhyb3dFeGNlcHRpb247Ci0gICAgdGhpcy5jb25maWd1cmF0aW9uWydrZXlzJ10gPSBrZXlzOwotICB9Ci19Ci0KLWNsYXNzIFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcigKLSAgICAgICdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5WZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneScsCi0gICAgKTsKLSAgfQotfQotCi1jbGFzcyBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneScpOwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICBUcmF2ZXJzYWxTdHJhdGVnaWVzOiBUcmF2ZXJzYWxTdHJhdGVnaWVzLAotICBUcmF2ZXJzYWxTdHJhdGVneTogVHJhdmVyc2FsU3RyYXRlZ3ksCi0gIC8vIGRlY29yYXRpb24KLSAgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneTogQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSwKLSAgQ29ubmVjdGl2ZVN0cmF0ZWd5OiBDb25uZWN0aXZlU3RyYXRlZ3ksCi0gIEVsZW1lbnRJZFN0cmF0ZWd5OiBFbGVtZW50SWRTdHJhdGVneSwKLSAgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3k6IEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5LAotICBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5OiBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LAotICBPcHRpb25zU3RyYXRlZ3k6IE9wdGlvbnNTdHJhdGVneSwKLSAgUGFydGl0aW9uU3RyYXRlZ3k6IFBhcnRpdGlvblN0cmF0ZWd5LAotICBQcm9maWxlU3RyYXRlZ3k6IFByb2ZpbGVTdHJhdGVneSwKLSAgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5OiBSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3ksCi0gIFNlZWRTdHJhdGVneTogU2VlZFN0cmF0ZWd5LAotICBTdWJncmFwaFN0cmF0ZWd5OiBTdWJncmFwaFN0cmF0ZWd5LAotICBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3k6IFZlcnRleFByb2dyYW1TdHJhdGVneSwKLSAgLy8gZmluYWxpemF0aW9uCi0gIE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3k6IE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3ksCi0gIC8vIG9wdGltaXphdGlvbgotICBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneTogQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3ksCi0gIEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3k6IEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3ksCi0gIEZpbHRlclJhbmtpbmdTdHJhdGVneTogRmlsdGVyUmFua2luZ1N0cmF0ZWd5LAotICBJZGVudGl0eVJlbW92YWxTdHJhdGVneTogSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3ksCi0gIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5OiBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSwKLSAgSW5saW5lRmlsdGVyU3RyYXRlZ3k6IElubGluZUZpbHRlclN0cmF0ZWd5LAotICBMYXp5QmFycmllclN0cmF0ZWd5OiBMYXp5QmFycmllclN0cmF0ZWd5LAotICBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5OiBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5LAotICBPcmRlckxpbWl0U3RyYXRlZ3k6IE9yZGVyTGltaXRTdHJhdGVneSwKLSAgUGF0aFByb2Nlc3NvclN0cmF0ZWd5OiBQYXRoUHJvY2Vzc29yU3RyYXRlZ3ksCi0gIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3k6IFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3ksCi0gIFByb2R1Y3RpdmVCeVN0cmF0ZWd5OiBQcm9kdWN0aXZlQnlTdHJhdGVneSwKLSAgQ291bnRTdHJhdGVneTogQ291bnRTdHJhdGVneSwKLSAgUmVwZWF0VW5yb2xsU3RyYXRlZ3k6IFJlcGVhdFVucm9sbFN0cmF0ZWd5LAotICBHcmFwaEZpbHRlclN0cmF0ZWd5OiBHcmFwaEZpbHRlclN0cmF0ZWd5LAotICBFYXJseUxpbWl0U3RyYXRlZ3k6IEVhcmx5TGltaXRTdHJhdGVneSwKLSAgLy8gdmVyaWZpY2F0aW9uCi0gIENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3k6IENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3ksCi0gIEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5OiBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSwKLSAgTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneTogTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSwKLSAgUmVhZE9ubHlTdHJhdGVneTogUmVhZE9ubHlTdHJhdGVneSwKLSAgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3k6IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LAotICBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5OiBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5LAotICBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneTogVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3ksCi19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL3RyYXZlcnNhbC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYmQ2ZWEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL3RyYXZlcnNhbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU0MSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgaXRlbURvbmUgPSBPYmplY3QuZnJlZXplKHsgdmFsdWU6IG51bGwsIGRvbmU6IHRydWUgfSk7Ci1jb25zdCBhc3luY0l0ZXJhdG9yU3ltYm9sID0gU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgU3ltYm9sKCdAQGFzeW5jSXRlcmF0b3InKTsKLQotY2xhc3MgVHJhdmVyc2FsIHsKLSAgY29uc3RydWN0b3IoZ3JhcGgsIHRyYXZlcnNhbFN0cmF0ZWdpZXMsIGJ5dGVjb2RlKSB7Ci0gICAgdGhpcy5ncmFwaCA9IGdyYXBoOwotICAgIHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyA9IHRyYXZlcnNhbFN0cmF0ZWdpZXM7Ci0gICAgdGhpcy5ieXRlY29kZSA9IGJ5dGVjb2RlOwotICAgIC8qKiBAdHlwZSB7QXJyYXk8VHJhdmVyc2VyPn0gKi8KLSAgICB0aGlzLnRyYXZlcnNlcnMgPSBudWxsOwotICAgIHRoaXMuc2lkZUVmZmVjdHMgPSBudWxsOwotICAgIHRoaXMuX3RyYXZlcnNhbFN0cmF0ZWdpZXNQcm9taXNlID0gbnVsbDsKLSAgICB0aGlzLl90cmF2ZXJzZXJzSXRlcmF0b3JJbmRleCA9IDA7Ci0gIH0KLQotICAvKioKLSAgICogQXN5bmMgaXRlcmFibGUgbWV0aG9kIGltcGxlbWVudGF0aW9uLgotICAgKi8KLSAgW2FzeW5jSXRlcmF0b3JTeW1ib2xdKCkgewotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgLyoqIEByZXR1cm5zIHtCeXRlY29kZX0gKi8KLSAgZ2V0Qnl0ZWNvZGUoKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnl0ZWNvZGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBBcnJheSBjb250YWluaW5nIHRoZSB0cmF2ZXJzZXIgb2JqZWN0cy4KLSAgICogQHJldHVybnMge1Byb21pc2UuPEFycmF5Pn0KLSAgICovCi0gIHRvTGlzdCgpIHsKLSAgICByZXR1cm4gdGhpcy5fYXBwbHlTdHJhdGVnaWVzKCkudGhlbigoKSA9PiB7Ci0gICAgICBjb25zdCByZXN1bHQgPSBbXTsKLSAgICAgIGxldCBpdDsKLSAgICAgIHdoaWxlICgoaXQgPSB0aGlzLl9nZXROZXh0KCkpICYmICFpdC5kb25lKSB7Ci0gICAgICAgIHJlc3VsdC5wdXNoKGl0LnZhbHVlKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogRGV0ZXJtaW5lcyBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaXRlbXMgdG8gaXRlcmF0ZSBmcm9tIHRoZSB0cmF2ZXJzYWwuCi0gICAqIEByZXR1cm5zIHtQcm9taXNlLjxib29sZWFuPn0KLSAgICovCi0gIGhhc05leHQoKSB7Ci0gICAgcmV0dXJuIHRoaXMuX2FwcGx5U3RyYXRlZ2llcygpLnRoZW4oCi0gICAgICAoKSA9PgotICAgICAgICB0aGlzLnRyYXZlcnNlcnMgJiYKLSAgICAgICAgdGhpcy50cmF2ZXJzZXJzLmxlbmd0aCA+IDAgJiYKLSAgICAgICAgdGhpcy5fdHJhdmVyc2Vyc0l0ZXJhdG9ySW5kZXggPCB0aGlzLnRyYXZlcnNlcnMubGVuZ3RoICYmCi0gICAgICAgIHRoaXMudHJhdmVyc2Vyc1t0aGlzLl90cmF2ZXJzZXJzSXRlcmF0b3JJbmRleF0uYnVsayA+IDAsCi0gICAgKTsKLSAgfQotCi0gIC8qKgotICAgKiBJdGVyYXRlcyBhbGwgVHJhdmVyc2VyIGluc3RhbmNlcyBpbiB0aGUgdHJhdmVyc2FsLgotICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KLSAgICovCi0gIGl0ZXJhdGUoKSB7Ci0gICAgdGhpcy5ieXRlY29kZS5hZGRTdGVwKCdkaXNjYXJkJyk7Ci0gICAgcmV0dXJuIHRoaXMuX2FwcGx5U3RyYXRlZ2llcygpLnRoZW4oKCkgPT4gewotICAgICAgbGV0IGl0OwotICAgICAgd2hpbGUgKChpdCA9IHRoaXMuX2dldE5leHQoKSkgJiYgIWl0LmRvbmUpIHsKLSAgICAgICAgLy8KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBBc3luYyBpdGVyYXRvciBtZXRob2QgaW1wbGVtZW50YXRpb24uCi0gICAqIFJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgYW4gaXRlcmF0b3IgaXRlbS4KLSAgICogQHJldHVybnMge1Byb21pc2UuPHt2YWx1ZSwgZG9uZX0+fQotICAgKi8KLSAgbmV4dCgpIHsKLSAgICByZXR1cm4gdGhpcy5fYXBwbHlTdHJhdGVnaWVzKCkudGhlbigoKSA9PiB0aGlzLl9nZXROZXh0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFN5bmNocm9ub3VzIGl0ZXJhdG9yIG9mIHRyYXZlcnNlcnMgaW5jbHVkaW5nCi0gICAqIEBwcml2YXRlCi0gICAqLwotICBfZ2V0TmV4dCgpIHsKLSAgICB3aGlsZSAodGhpcy50cmF2ZXJzZXJzICYmIHRoaXMuX3RyYXZlcnNlcnNJdGVyYXRvckluZGV4IDwgdGhpcy50cmF2ZXJzZXJzLmxlbmd0aCkgewotICAgICAgY29uc3QgdHJhdmVyc2VyID0gdGhpcy50cmF2ZXJzZXJzW3RoaXMuX3RyYXZlcnNlcnNJdGVyYXRvckluZGV4XTsKLSAgICAgIGlmICh0cmF2ZXJzZXIuYnVsayA+IDApIHsKLSAgICAgICAgdHJhdmVyc2VyLmJ1bGstLTsKLSAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRyYXZlcnNlci5vYmplY3QsIGRvbmU6IGZhbHNlIH07Ci0gICAgICB9Ci0gICAgICB0aGlzLl90cmF2ZXJzZXJzSXRlcmF0b3JJbmRleCsrOwotICAgIH0KLSAgICByZXR1cm4gaXRlbURvbmU7Ci0gIH0KLQotICBfYXBwbHlTdHJhdGVnaWVzKCkgewotICAgIGlmICh0aGlzLl90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZSkgewotICAgICAgLy8gQXBwbHkgc3RyYXRlZ2llcyBvbmx5IG9uY2UKLSAgICAgIHJldHVybiB0aGlzLl90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZTsKLSAgICB9Ci0gICAgcmV0dXJuICh0aGlzLl90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZSA9IHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcy5hcHBseVN0cmF0ZWdpZXModGhpcykpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgc3RlcCBpbnN0cnVjdGlvbnMgZHVyaW5nIEpTT04gc2VyaWFsaXphdGlvbgotICAgKiBAcmV0dXJucyB7QXJyYXl9Ci0gICAqLwotICB0b0pTT04oKSB7Ci0gICAgcmV0dXJuIHRoaXMuYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9uczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBCeXRlY29kZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmF2ZXJzYWwKLSAgICogQHJldHVybnMge1N0cmluZ30KLSAgICovCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiB0aGlzLmJ5dGVjb2RlLnRvU3RyaW5nKCk7Ci0gIH0KLX0KLQotY2xhc3MgSU8gewotICBzdGF0aWMgZ2V0IGdyYXBobWwoKSB7Ci0gICAgcmV0dXJuICdncmFwaG1sJzsKLSAgfQotCi0gIHN0YXRpYyBnZXQgZ3JhcGhzb24oKSB7Ci0gICAgcmV0dXJuICdncmFwaHNvbic7Ci0gIH0KLQotICBzdGF0aWMgZ2V0IGdyeW8oKSB7Ci0gICAgcmV0dXJuICdncnlvJzsKLSAgfQotCi0gIHN0YXRpYyBnZXQgcmVhZGVyKCkgewotICAgIHJldHVybiAnfnRpbmtlcnBvcC5pby5yZWFkZXInOwotICB9Ci0KLSAgc3RhdGljIGdldCByZWdpc3RyeSgpIHsKLSAgICByZXR1cm4gJ350aW5rZXJwb3AuaW8ucmVnaXN0cnknOwotICB9Ci0KLSAgc3RhdGljIGdldCB3cml0ZXIoKSB7Ci0gICAgcmV0dXJuICd+dGlua2VycG9wLmlvLndyaXRlcic7Ci0gIH0KLX0KLQotLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCi1jbGFzcyBDb25uZWN0ZWRDb21wb25lbnQgewotICBzdGF0aWMgZ2V0IGNvbXBvbmVudCgpIHsKLSAgICByZXR1cm4gJ2dyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnQnOwotICB9Ci0KLSAgc3RhdGljIGdldCBlZGdlcygpIHsKLSAgICByZXR1cm4gJ350aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LmVkZ2VzJzsKLSAgfQotCi0gIHN0YXRpYyBnZXQgcHJvcGVydHlOYW1lKCkgewotICAgIHJldHVybiAnfnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQucHJvcGVydHlOYW1lJzsKLSAgfQotfQotCi0vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKLWNsYXNzIFNob3J0ZXN0UGF0aCB7Ci0gIHN0YXRpYyBnZXQgZGlzdGFuY2UoKSB7Ci0gICAgcmV0dXJuICd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZSc7Ci0gIH0KLQotICBzdGF0aWMgZ2V0IGVkZ2VzKCkgewotICAgIHJldHVybiAnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXMnOwotICB9Ci0KLSAgc3RhdGljIGdldCBpbmNsdWRlRWRnZXMoKSB7Ci0gICAgcmV0dXJuICd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXMnOwotICB9Ci0KLSAgc3RhdGljIGdldCBtYXhEaXN0YW5jZSgpIHsKLSAgICByZXR1cm4gJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLm1heERpc3RhbmNlJzsKLSAgfQotCi0gIHN0YXRpYyBnZXQgdGFyZ2V0KCkgewotICAgIHJldHVybiAnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0JzsKLSAgfQotfQotCi0vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMKLWNsYXNzIFBhZ2VSYW5rIHsKLSAgc3RhdGljIGdldCBlZGdlcygpIHsKLSAgICByZXR1cm4gJ350aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMnOwotICB9Ci0KLSAgc3RhdGljIGdldCBwcm9wZXJ0eU5hbWUoKSB7Ci0gICAgcmV0dXJuICd+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSc7Ci0gIH0KLQotICBzdGF0aWMgZ2V0IHRpbWVzKCkgewotICAgIHJldHVybiAnfnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcyc7Ci0gIH0KLX0KLQotLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCi1jbGFzcyBQZWVyUHJlc3N1cmUgewotICBzdGF0aWMgZ2V0IGVkZ2VzKCkgewotICAgIHJldHVybiAnfnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXMnOwotICB9Ci0KLSAgc3RhdGljIGdldCBwcm9wZXJ0eU5hbWUoKSB7Ci0gICAgcmV0dXJuICd+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWUnOwotICB9Ci0KLSAgc3RhdGljIGdldCB0aW1lcygpIHsKLSAgICByZXR1cm4gJ350aW5rZXJwb3AucGVlclByZXNzdXJlLnRpbWVzJzsKLSAgfQotfQotCi1jbGFzcyBQIHsKLSAgLyoqCi0gICAqIFJlcHJlc2VudHMgYW4gb3BlcmF0aW9uLgotICAgKiBAY29uc3RydWN0b3IKLSAgICovCi0gIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCB2YWx1ZSwgb3RoZXIpIHsKLSAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7Ci0gICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgIHRoaXMub3RoZXIgPSBvdGhlcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluc3RhbmNlLgotICAgKiBAcmV0dXJucyB7c3RyaW5nfQotICAgKi8KLSAgdG9TdHJpbmcoKSB7Ci0gICAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWUpIHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewotICAgICAgICBjb25zdCBhY2MgPSBbXTsKLSAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7Ci0gICAgICAgICAgYWNjLnB1c2goZm9ybWF0VmFsdWUoaXRlbSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhY2M7Ci0gICAgICB9Ci0gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgewotICAgICAgICByZXR1cm4gYCcke3ZhbHVlfSdgOwotICAgICAgfQotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIGlmICh0aGlzLm90aGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5vdGhlciA9PT0gbnVsbCkgewotICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgKyAnKCcgKyBmb3JtYXRWYWx1ZSh0aGlzLnZhbHVlKSArICcpJzsKLSAgICB9Ci0gICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgKyAnKCcgKyBmb3JtYXRWYWx1ZSh0aGlzLnZhbHVlKSArICcsICcgKyBmb3JtYXRWYWx1ZSh0aGlzLm90aGVyKSArICcpJzsKLSAgfQotCi0gIGFuZChhcmcpIHsKLSAgICByZXR1cm4gbmV3IFAoJ2FuZCcsIHRoaXMsIGFyZyk7Ci0gIH0KLQotICBvcihhcmcpIHsKLSAgICByZXR1cm4gbmV3IFAoJ29yJywgdGhpcywgYXJnKTsKLSAgfQotCi0gIHN0YXRpYyB3aXRoaW4oLi4uYXJncykgewotICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7Ci0gICAgICByZXR1cm4gbmV3IFAoJ3dpdGhpbicsIGFyZ3NbMF0sIG51bGwpOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFAoJ3dpdGhpbicsIGFyZ3MsIG51bGwpOwotICB9Ci0KLSAgc3RhdGljIHdpdGhvdXQoLi4uYXJncykgewotICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7Ci0gICAgICByZXR1cm4gbmV3IFAoJ3dpdGhvdXQnLCBhcmdzWzBdLCBudWxsKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBQKCd3aXRob3V0JywgYXJncywgbnVsbCk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIGJldHdlZW4oLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVQKCdiZXR3ZWVuJywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIGVxKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlUCgnZXEnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgZ3QoLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVQKCdndCcsIGFyZ3MpOwotICB9Ci0KLSAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCi0gIHN0YXRpYyBndGUoLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVQKCdndGUnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgaW5zaWRlKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlUCgnaW5zaWRlJywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIGx0KC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlUCgnbHQnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgbHRlKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlUCgnbHRlJywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIG5lcSguLi5hcmdzKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZVAoJ25lcScsIGFyZ3MpOwotICB9Ci0KLSAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCi0gIHN0YXRpYyBub3QoLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVQKCdub3QnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgb3V0c2lkZSguLi5hcmdzKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZVAoJ291dHNpZGUnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgdHlwZU9mKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlUCgndHlwZU9mJywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIHRlc3QoLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVQKCd0ZXN0JywgYXJncyk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gY3JlYXRlUChvcGVyYXRvciwgYXJncykgewotICBhcmdzLnVuc2hpZnQobnVsbCwgb3BlcmF0b3IpOwotICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShQLCBhcmdzKSkoKTsKLX0KLQotY2xhc3MgVGV4dFAgewotICAvKioKLSAgICogUmVwcmVzZW50cyBhbiBvcGVyYXRpb24uCi0gICAqIEBjb25zdHJ1Y3RvcgotICAgKi8KLSAgY29uc3RydWN0b3Iob3BlcmF0b3IsIHZhbHVlLCBvdGhlcikgewotICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjsKLSAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgdGhpcy5vdGhlciA9IG90aGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5zdGFuY2UuCi0gICAqIEByZXR1cm5zIHtzdHJpbmd9Ci0gICAqLwotICB0b1N0cmluZygpIHsKLSAgICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh2YWx1ZSkgewotICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsKLSAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYDsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAodGhpcy5vdGhlciA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm4gdGhpcy5vcGVyYXRvciArICcoJyArIGZvcm1hdFZhbHVlKHRoaXMudmFsdWUpICsgJyknOwotICAgIH0KLSAgICByZXR1cm4gdGhpcy5vcGVyYXRvciArICcoJyArIGZvcm1hdFZhbHVlKHRoaXMudmFsdWUpICsgJywgJyArIGZvcm1hdFZhbHVlKHRoaXMub3RoZXIpICsgJyknOwotICB9Ci0KLSAgYW5kKGFyZykgewotICAgIHJldHVybiBuZXcgUCgnYW5kJywgdGhpcywgYXJnKTsKLSAgfQotCi0gIG9yKGFyZykgewotICAgIHJldHVybiBuZXcgUCgnb3InLCB0aGlzLCBhcmcpOwotICB9Ci0KLSAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCi0gIHN0YXRpYyBjb250YWluaW5nKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ2NvbnRhaW5pbmcnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgZW5kaW5nV2l0aCguLi5hcmdzKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZVRleHRQKCdlbmRpbmdXaXRoJywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIG5vdENvbnRhaW5pbmcoLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVUZXh0UCgnbm90Q29udGFpbmluZycsIGFyZ3MpOwotICB9Ci0KLSAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCi0gIHN0YXRpYyBub3RFbmRpbmdXaXRoKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ25vdEVuZGluZ1dpdGgnLCBhcmdzKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLwotICBzdGF0aWMgbm90U3RhcnRpbmdXaXRoKC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ25vdFN0YXJ0aW5nV2l0aCcsIGFyZ3MpOwotICB9Ci0KLSAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCi0gIHN0YXRpYyBzdGFydGluZ1dpdGgoLi4uYXJncykgewotICAgIHJldHVybiBjcmVhdGVUZXh0UCgnc3RhcnRpbmdXaXRoJywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIHJlZ2V4KC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ3JlZ2V4JywgYXJncyk7Ci0gIH0KLQotICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KLSAgc3RhdGljIG5vdFJlZ2V4KC4uLmFyZ3MpIHsKLSAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ25vdFJlZ2V4JywgYXJncyk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gY3JlYXRlVGV4dFAob3BlcmF0b3IsIGFyZ3MpIHsKLSAgYXJncy51bnNoaWZ0KG51bGwsIG9wZXJhdG9yKTsKLSAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoVGV4dFAsIGFyZ3MpKSgpOwotfQotCi1jbGFzcyBUcmF2ZXJzZXIgewotICBjb25zdHJ1Y3RvcihvYmplY3QsIGJ1bGspIHsKLSAgICB0aGlzLm9iamVjdCA9IG9iamVjdDsKLSAgICB0aGlzLmJ1bGsgPSBidWxrIHx8IDE7Ci0gIH0KLX0KLQotY2xhc3MgVHJhdmVyc2FsU2lkZUVmZmVjdHMge30KLQotY29uc3Qgd2l0aE9wdGlvbnMgPSB7Ci0gIHRva2VuczogJ350aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zJywKLSAgbm9uZTogMCwKLSAgaWRzOiAxLAotICBsYWJlbHM6IDIsCi0gIGtleXM6IDQsCi0gIHZhbHVlczogOCwKLSAgYWxsOiAxNSwKLSAgaW5kZXhlcjogJ350aW5rZXJwb3AuaW5kZXguaW5kZXhlcicsCi0gIGxpc3Q6IDAsCi0gIG1hcDogMSwKLX07Ci0KLWZ1bmN0aW9uIHRvRW51bSh0eXBlTmFtZSwga2V5cykgewotICBjb25zdCByZXN1bHQgPSB7fTsKLSAga2V5cy5zcGxpdCgnICcpLmZvckVhY2goKGspID0+IHsKLSAgICBsZXQganNLZXkgPSBrOwotICAgIGlmIChqc0tleSA9PT0ganNLZXkudG9VcHBlckNhc2UoKSkgewotICAgICAganNLZXkgPSBqc0tleS50b0xvd2VyQ2FzZSgpOwotICAgIH0KLSAgICByZXN1bHRbanNLZXldID0gbmV3IEVudW1WYWx1ZSh0eXBlTmFtZSwgayk7Ci0gIH0pOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1jb25zdCBkaXJlY3Rpb25BbGlhcyA9IHsKLSAgZnJvbV86ICdvdXQnLAotICB0bzogJ2luJywKLX07Ci0KLS8vIGZvciBkaXJlY3Rpb24gZW51bXMsIG1hcHMgdGhlIHNhbWUgRW51bVZhbHVlIG9iamVjdCB0byB0aGUgZW51bSBhbGlhc2VzIGFmdGVyIGNyZWF0aW5nIHRoZW0KLWZ1bmN0aW9uIHRvRGlyZWN0aW9uRW51bSh0eXBlTmFtZSwga2V5cykgewotICBjb25zdCByZXN1bHQgPSB0b0VudW0odHlwZU5hbWUsIGtleXMpOwotICBPYmplY3Qua2V5cyhkaXJlY3Rpb25BbGlhcykuZm9yRWFjaCgoaykgPT4gewotICAgIHJlc3VsdFtrXSA9IHJlc3VsdFtkaXJlY3Rpb25BbGlhc1trXV07Ci0gIH0pOwotICByZXR1cm4gcmVzdWx0OwotfQotCi1mdW5jdGlvbiB0b0dUeXBlRW51bSh0eXBlTmFtZSwga2V5cykgewotICBjb25zdCByZXN1bHQgPSB7fTsKLSAga2V5cy5zcGxpdCgnICcpLmZvckVhY2goKGspID0+IHsKLSAgICByZXN1bHRba10gPSBuZXcgRW51bVZhbHVlKHR5cGVOYW1lLCBrLnRvVXBwZXJDYXNlKCkpOwotICB9KTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY2xhc3MgRW51bVZhbHVlIHsKLSAgY29uc3RydWN0b3IodHlwZU5hbWUsIGVsZW1lbnROYW1lKSB7Ci0gICAgdGhpcy50eXBlTmFtZSA9IHR5cGVOYW1lOwotICAgIHRoaXMuZWxlbWVudE5hbWUgPSBlbGVtZW50TmFtZTsKLSAgfQotCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiB0aGlzLmVsZW1lbnROYW1lOwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICBFbnVtVmFsdWUsCi0gIFAsCi0gIFRleHRQLAotICB3aXRoT3B0aW9ucywKLSAgSU8sCi0gIFRyYXZlcnNhbCwKLSAgVHJhdmVyc2FsU2lkZUVmZmVjdHMsCi0gIFRyYXZlcnNlciwKLSAgYmFycmllcjogdG9FbnVtKCdCYXJyaWVyJywgJ25vcm1TYWNrJyksCi0gIGNhcmRpbmFsaXR5OiB0b0VudW0oJ0NhcmRpbmFsaXR5JywgJ2xpc3Qgc2V0IHNpbmdsZScpLAotICBjb2x1bW46IHRvRW51bSgnQ29sdW1uJywgJ2tleXMgdmFsdWVzJyksCi0gIGRpcmVjdGlvbjogdG9EaXJlY3Rpb25FbnVtKCdEaXJlY3Rpb24nLCAnQk9USCBJTiBPVVQgZnJvbV8gdG8nKSwKLSAgZHQ6IHRvRW51bSgnRFQnLCAnc2Vjb25kIG1pbnV0ZSBob3VyIGRheScpLAotICBnVHlwZTogdG9HVHlwZUVudW0oCi0gICAgJ0dUeXBlJywKLSAgICAnYmlnRGVjaW1hbCBiaWdJbnQgYmluYXJ5IGJvb2xlYW4gYnl0ZSBjaGFyIGRhdGV0aW1lIGRvdWJsZSBkdXJhdGlvbiBlZGdlIGZsb2F0IGdyYXBoIGludCBsaXN0IGxvbmcgbWFwIG51bGwgbnVtYmVyIHBhdGggcHJvcGVydHkgc2V0IHNob3J0IHN0cmluZyB0cmVlIHV1aWQgdmVydGV4IHZwcm9wZXJ0eScsCi0gICksCi0gIGdyYXBoU09OVmVyc2lvbjogdG9FbnVtKCdHcmFwaFNPTlZlcnNpb24nLCAnVjFfMCBWMl8wIFYzXzAnKSwKLSAgZ3J5b1ZlcnNpb246IHRvRW51bSgnR3J5b1ZlcnNpb24nLCAnVjFfMCBWM18wJyksCi0gIG1lcmdlOiB0b0VudW0oJ01lcmdlJywgJ29uQ3JlYXRlIG9uTWF0Y2ggb3V0ViBpblYnKSwKLSAgb3BlcmF0b3I6IHRvRW51bSgnT3BlcmF0b3InLCAnYWRkQWxsIGFuZCBhc3NpZ24gZGl2IG1heCBtaW4gbWludXMgbXVsdCBvciBzdW0gc3VtTG9uZycpLAotICBvcmRlcjogdG9FbnVtKCdPcmRlcicsICdhc2MgZGVzYyBzaHVmZmxlJyksCi0gIHBpY2s6IHRvRW51bSgnUGljaycsICdhbnkgbm9uZSB1bnByb2R1Y3RpdmUnKSwKLSAgcG9wOiB0b0VudW0oJ1BvcCcsICdhbGwgZmlyc3QgbGFzdCBtaXhlZCcpLAotICBzY29wZTogdG9FbnVtKCdTY29wZScsICdnbG9iYWwgbG9jYWwnKSwKLSAgdDogdG9FbnVtKCdUJywgJ2lkIGtleSBsYWJlbCB2YWx1ZScpLAotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2dyYXBoLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvZ3JhcGguanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZjRkZDEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvZ3JhcGguanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBndCA9IHJlcXVpcmUoJy4uL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCB7IFRyYXZlcnNhbFN0cmF0ZWdpZXMgfSA9IHJlcXVpcmUoJy4uL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5Jyk7Ci0KLS8qKgotICogQW4gImVtcHR5IiBncmFwaCBvYmplY3QgdG8gc2VydmVyIG9ubHkgYXMgYSByZWZlcmVuY2UuCi0gKi8KLWNsYXNzIEdyYXBoIHsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIGdyYXBoIHRyYXZlcnNhbCBzb3VyY2UuCi0gICAqIEBwYXJhbSB7RnVuY3Rpb259IFt0cmF2ZXJzYWxTb3VyY2VDbGFzc10gVGhlIGNvbnN0cnVjdG9yIHRvIHVzZSBmb3IgdGhlIHtAY29kZSBHcmFwaFRyYXZlcnNhbFNvdXJjZX0gaW5zdGFuY2UuCi0gICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KLSAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjMuNSwgcmVwbGFjZWQgYnkgdGhlIHRyYXZlcnNhbCgpIGFub255bW91cyBmdW5jdGlvbi4KLSAgICovCi0gIHRyYXZlcnNhbCh0cmF2ZXJzYWxTb3VyY2VDbGFzcykgewotICAgIGNvbnN0IHRyYXZlcnNhbFNvdXJjZUNvbnN0cnVjdG9yID0gdHJhdmVyc2FsU291cmNlQ2xhc3MgfHwgZ3QuR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci0gICAgcmV0dXJuIG5ldyB0cmF2ZXJzYWxTb3VyY2VDb25zdHJ1Y3Rvcih0aGlzLCBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcygpKTsKLSAgfQotCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiAnZ3JhcGhbXSc7Ci0gIH0KLX0KLQotY2xhc3MgRWxlbWVudCB7Ci0gIC8vIHByb3BlcnRpZXMgYXJlIHN0b3JlZCBhcyBsaXN0IG9mIHByb3BlcnR5IG9iamVjdHMKLSAgY29uc3RydWN0b3IoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzID0gW10pIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gICAgdGhpcy5sYWJlbCA9IGxhYmVsOwotICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgIT0gbnVsbCA/IHByb3BlcnRpZXMgOiBbXTsKLSAgfQotCi0gIC8qKgotICAgKiBDb21wYXJlcyB0aGlzIGluc3RhbmNlIHRvIGFub3RoZXIgYW5kIGRldGVybWluZXMgaWYgdGhleSBjYW4gYmUgY29uc2lkZXJlZCBhcyBlcXVhbC4KLSAgICogQHBhcmFtIHtFbGVtZW50fSBvdGhlcgotICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0KLSAgICovCi0gIGVxdWFscyhvdGhlcikgewotICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgdGhpcy5pZCA9PT0gb3RoZXIuaWQ7Ci0gIH0KLX0KLQotY2xhc3MgVmVydGV4IGV4dGVuZHMgRWxlbWVudCB7Ci0gIGNvbnN0cnVjdG9yKGlkLCBsYWJlbCwgcHJvcGVydGllcyA9IFtdKSB7Ci0gICAgc3VwZXIoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzKTsKLSAgfQotCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBgdlske3RoaXMuaWR9XWA7Ci0gIH0KLX0KLQotY2xhc3MgRWRnZSBleHRlbmRzIEVsZW1lbnQgewotICBjb25zdHJ1Y3RvcihpZCwgb3V0ViwgbGFiZWwsIGluViwgcHJvcGVydGllcyA9IFtdKSB7Ci0gICAgc3VwZXIoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzKTsKLSAgICB0aGlzLm91dFYgPSBvdXRWOwotICAgIHRoaXMuaW5WID0gaW5WOwotICB9Ci0KLSAgdG9TdHJpbmcoKSB7Ci0gICAgY29uc3Qgb3V0VklkID0gdGhpcy5vdXRWID8gdGhpcy5vdXRWLmlkIDogJz8nOwotICAgIGNvbnN0IGluVklkID0gdGhpcy5pblYgPyB0aGlzLmluVi5pZCA6ICc/JzsKLQotICAgIHJldHVybiBgZVske3RoaXMuaWR9XVske291dFZJZH0tJHt0aGlzLmxhYmVsfS0+JHtpblZJZH1dYDsKLSAgfQotfQotCi1jbGFzcyBWZXJ0ZXhQcm9wZXJ0eSBleHRlbmRzIEVsZW1lbnQgewotICBjb25zdHJ1Y3RvcihpZCwgbGFiZWwsIHZhbHVlLCBwcm9wZXJ0aWVzID0gW10pIHsKLSAgICBzdXBlcihpZCwgbGFiZWwsIHByb3BlcnRpZXMpOwotICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB0aGlzLmtleSA9IHRoaXMubGFiZWw7Ci0gIH0KLQotICB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gYHZwWyR7dGhpcy5sYWJlbH0tPiR7c3VtbWFyaXplKHRoaXMudmFsdWUpfV1gOwotICB9Ci19Ci0KLWNsYXNzIFByb3BlcnR5IHsKLSAgY29uc3RydWN0b3Ioa2V5LCB2YWx1ZSkgewotICAgIHRoaXMua2V5ID0ga2V5OwotICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgfQotCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBgcFske3RoaXMua2V5fS0+JHtzdW1tYXJpemUodGhpcy52YWx1ZSl9XWA7Ci0gIH0KLQotICBlcXVhbHMob3RoZXIpIHsKLSAgICByZXR1cm4gb3RoZXIgaW5zdGFuY2VvZiBQcm9wZXJ0eSAmJiB0aGlzLmtleSA9PT0gb3RoZXIua2V5ICYmIHRoaXMudmFsdWUgPT09IG90aGVyLnZhbHVlOwotICB9Ci19Ci0KLWNsYXNzIFBhdGggewotICAvKioKLSAgICogUmVwcmVzZW50cyBhIHdhbGsgdGhyb3VnaCBhIGdyYXBoIGFzIGRlZmluZWQgYnkgYSB0cmF2ZXJzYWwuCi0gICAqIEBwYXJhbSB7QXJyYXl9IGxhYmVscwotICAgKiBAcGFyYW0ge0FycmF5fSBvYmplY3RzCi0gICAqIEBjb25zdHJ1Y3RvcgotICAgKi8KLSAgY29uc3RydWN0b3IobGFiZWxzLCBvYmplY3RzKSB7Ci0gICAgdGhpcy5sYWJlbHMgPSBsYWJlbHM7Ci0gICAgdGhpcy5vYmplY3RzID0gb2JqZWN0czsKLSAgfQotCi0gIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBgcGF0aFskeyh0aGlzLm9iamVjdHMgfHwgW10pLmpvaW4oJywgJyl9XWA7Ci0gIH0KLQotICBlcXVhbHMob3RoZXIpIHsKLSAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFBhdGgpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChvdGhlciA9PT0gdGhpcykgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBhcmVFcXVhbCh0aGlzLm9iamVjdHMsIG90aGVyLm9iamVjdHMpICYmIGFyZUVxdWFsKHRoaXMubGFiZWxzLCBvdGhlci5sYWJlbHMpOwotICB9Ci19Ci0KLWZ1bmN0aW9uIGFyZUVxdWFsKG9iajEsIG9iajIpIHsKLSAgaWYgKG9iajEgPT09IG9iajIpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICBpZiAodHlwZW9mIG9iajEuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgcmV0dXJuIG9iajEuZXF1YWxzKG9iajIpOwotICB9Ci0gIGlmIChBcnJheS5pc0FycmF5KG9iajEpICYmIEFycmF5LmlzQXJyYXkob2JqMikpIHsKLSAgICBpZiAob2JqMS5sZW5ndGggIT09IG9iajIubGVuZ3RoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqMS5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKCFhcmVFcXVhbChvYmoxW2ldLCBvYmoyW2ldKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gc3VtbWFyaXplKHZhbHVlKSB7Ci0gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS50b1N0cmluZygpOwotICByZXR1cm4gc3RyVmFsdWUubGVuZ3RoID4gMjAgPyBzdHJWYWx1ZS5zdWJzdHIoMCwgMjApIDogc3RyVmFsdWU7Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICBFZGdlLAotICBHcmFwaCwKLSAgUGF0aCwKLSAgUHJvcGVydHksCi0gIFZlcnRleCwKLSAgVmVydGV4UHJvcGVydHksCi19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDM5N2IyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcworKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEdyYXBoQmluYXJ5IDEuMCBzdXBwb3J0IGltcGxlbWVudGF0aW9uLgotICoKLSAqIFRoZSBvZmZpY2lhbGx5IGV4cGVjdGVkIGVudHJ5cG9pbnQgaXMgR3JhcGhCaW5hcnlSZWFkZXIvR3JhcGhCaW5hcnlXcml0ZXIgcGFpciBvZiBjbGFzc2VzLAotICogZXhhbWluZSBsaWIvZHJpdmVyLyoqIGZvciB1c2UgY2FzZXMuCi0gKgotICogU2VlIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgZm9yIHRoZSBtZWNoYW5pc20gb2Ygc2VyaWFsaXplciBzZWxlY3Rpb24gZm9yIGEgZ2l2ZW4gSmF2YVNjcmlwdCB2YWx1ZSwKLSAqIGFsc28gY29uc2lkZXIgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB1bml0IHRlc3RzIGZvciByZWFsIGV4YW1wbGVzLgotICogU2VlIE51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneSB0byB1bmRlcnN0YW5kIGhvdyBpdCBkZWFscyB3aXRoIEphdmFTY3JpcHQgbnVtYmVycycgc2VyaWFsaXphdGlvbi4KLSAqCi0gKiBDb25zaWRlciBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpL2Rlc2VyaWFsaXplKCkgdW5pdCB0ZXN0cyB0byBzZWUgd2hhdCBpcyBub3QgaW1wbGVtZW50ZWQsCi0gKiB3aGF0IGlzIGlnbm9yZWQsIHdoYXQgaXMgbm90IGV4cGVjdGVkIHRvIGJlIChkZSlzZXJpYWxpemVkLCBldGMuCi0gKgotICogVE9ETzogaXQgaGFzIHRoZSBmb2xsb3dpbmcgb3BlbiB0b3BpY3M6Ci0gKiAtIFtdIFNob3VsZCB3ZSBkbyBhbnl0aGluZyBmb3IgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAtc3RyaW5nZCBtaW1lIHR5cGUgc3VwcG9ydD8KLSAqIENvcmUgRGF0YSBUeXBlcyBzdXBwb3J0OgotICogLSBbXSAweDIyOiBCaWdEZWNpbWFsCi0gKiAtIFtdIDB4MmI6IFRyZWUKLSAqIC0gW10gMHgyYzogTWV0cmljcwotICogLSBbXSAweDJkOiBUcmF2ZXJzYWxNZXRyaWNzCi0gKiAtIFtdIDB4MDA6IEN1c3RvbQotICogRXh0ZW5kZWQgVHlwZXMgc3VwcG9ydDoKLSAqIC0gW10gMHg4MDogQ2hhcgotICogLSBbXSAweDgxOiBEdXJhdGlvbgotICogLSBbXSAweDgyOiBJbmV0QWRkcmVzcwotICogLSBbXSAweDgzOiBJbnN0YW50Ci0gKiAtIFtdIDB4ODQ6IExvY2FsRGF0ZQotICogLSBbXSAweDg1OiBMb2NhbERhdGVUaW1lCi0gKiAtIFtdIDB4ODY6IExvY2FsVGltZQotICogLSBbXSAweDg3OiBNb250aERheQotICogLSBbXSAweDg4OiBPZmZzZXREYXRlVGltZQotICogLSBbXSAweDg5OiBPZmZzZXRUaW1lCi0gKiAtIFtdIDB4OGE6IFBlcmlvZAotICogLSBbXSAweDhiOiBZZWFyCi0gKiAtIFtdIDB4OGM6IFllYXJNb250aAotICogLSBbXSAweDhkOiBab25lZERhdGVUaW1lCi0gKiAtIFtdIDB4OGU6IFpvbmVPZmZzZXQKLSAqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLS8qZXNsaW50LWRpc2FibGUqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBpb2MgPSB7fTsKLQotaW9jLkRhdGFUeXBlID0gcmVxdWlyZSgnLi9pbnRlcm5hbHMvRGF0YVR5cGUnKTsKLWlvYy51dGlscyA9IHJlcXVpcmUoJy4vaW50ZXJuYWxzL3V0aWxzJyk7Ci0KLWlvYy5zZXJpYWxpemVycyA9IHt9OwotCi1pb2MuaW50U2VyaWFsaXplciAgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9JbnRTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2MubG9uZ1NlcmlhbGl6ZXIgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9Mb25nU2VyaWFsaXplcicpKShpb2MpOwotaW9jLmxvbmdTZXJpYWxpemVyTmcgICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvTG9uZ1NlcmlhbGl6ZXJOZycpKShpb2MpOwotaW9jLnN0cmluZ1NlcmlhbGl6ZXIgICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvU3RyaW5nU2VyaWFsaXplcicpKShpb2MsIGlvYy5EYXRhVHlwZS5TVFJJTkcpOwotaW9jLm9mZnNldERhdGVUaW1lU2VyaWFsaXplciAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyJykpKGlvYywgaW9jLkRhdGFUeXBlLk9GRlNFVERBVEVUSU1FKTsKLWlvYy5kYXRlU2VyaWFsaXplciAgICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL0RhdGVTZXJpYWxpemVyJykpKGlvYywgaW9jLkRhdGFUeXBlLkRBVEUpOwotaW9jLnRpbWVzdGFtcFNlcmlhbGl6ZXIgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvRGF0ZVNlcmlhbGl6ZXInKSkoaW9jLCBpb2MuRGF0YVR5cGUuVElNRVNUQU1QKTsKLWlvYy5jbGFzc1NlcmlhbGl6ZXIgICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL0NsYXNzU2VyaWFsaXplcicpKShpb2MpOwotaW9jLmRvdWJsZVNlcmlhbGl6ZXIgICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvRG91YmxlU2VyaWFsaXplcicpKShpb2MpOwotaW9jLmZsb2F0U2VyaWFsaXplciAgICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvRmxvYXRTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2MubGlzdFNlcmlhbGl6ZXIgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9BcnJheVNlcmlhbGl6ZXInKSkoaW9jLCBpb2MuRGF0YVR5cGUuTElTVCk7Ci1pb2MubWFwU2VyaWFsaXplciAgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9NYXBTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2Muc2V0U2VyaWFsaXplciAgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9TZXRTZXJpYWxpemVyJykpKGlvYywgaW9jLkRhdGFUeXBlLlNFVCk7Ci1pb2MudXVpZFNlcmlhbGl6ZXIgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9VdWlkU2VyaWFsaXplcicpKShpb2MpOwotaW9jLmVkZ2VTZXJpYWxpemVyICAgICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvRWRnZVNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy5wYXRoU2VyaWFsaXplciAgICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL1BhdGhTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2MucHJvcGVydHlTZXJpYWxpemVyICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9Qcm9wZXJ0eVNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy52ZXJ0ZXhTZXJpYWxpemVyICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL1ZlcnRleFNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy52ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL1ZlcnRleFByb3BlcnR5U2VyaWFsaXplcicpKShpb2MpOwotaW9jLmJ5dGVjb2RlU2VyaWFsaXplciAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvQnl0ZWNvZGVTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2MucFNlcmlhbGl6ZXIgICAgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9QU2VyaWFsaXplcicpKShpb2MpOwotaW9jLnRyYXZlcnNlclNlcmlhbGl6ZXIgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvVHJhdmVyc2VyU2VyaWFsaXplcicpKShpb2MpOwotaW9jLmVudW1TZXJpYWxpemVyICAgICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvRW51bVNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy5sYW1iZGFTZXJpYWxpemVyICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL0xhbWJkYVNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy5iaWdJbnRlZ2VyU2VyaWFsaXplciAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL0JpZ0ludGVnZXJTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2MuYnl0ZVNlcmlhbGl6ZXIgICAgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9CeXRlU2VyaWFsaXplcicpKShpb2MpOwotaW9jLmJ5dGVCdWZmZXJTZXJpYWxpemVyICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvQnl0ZUJ1ZmZlclNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy5zaG9ydFNlcmlhbGl6ZXIgICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL1Nob3J0U2VyaWFsaXplcicpKShpb2MpOwotaW9jLmJvb2xlYW5TZXJpYWxpemVyICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvQm9vbGVhblNlcmlhbGl6ZXInKSkoaW9jKTsKLWlvYy50ZXh0UFNlcmlhbGl6ZXIgICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL1RleHRQU2VyaWFsaXplcicpKShpb2MpOwotaW9jLnRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplciA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyJykpKGlvYyk7Ci1pb2MuYnVsa1NldFNlcmlhbGl6ZXIgICAgICAgICAgID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9CdWxrU2V0U2VyaWFsaXplcicpKShpb2MpOwotaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplcicpKShpb2MpOwotCi1pb2MubnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5ID0gbmV3IChyZXF1aXJlKCcuL2ludGVybmFscy9OdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3knKSkoaW9jKTsKLWlvYy5hbnlTZXJpYWxpemVyICAgICAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL0FueVNlcmlhbGl6ZXInKSkoaW9jKTsKLQotaW9jLmdyYXBoQmluYXJ5UmVhZGVyICAgICAgICAgICA9IG5ldyAocmVxdWlyZSgnLi9pbnRlcm5hbHMvR3JhcGhCaW5hcnlSZWFkZXIuanMnKSkoaW9jKTsKLWlvYy5ncmFwaEJpbmFyeVdyaXRlciAgICAgICAgICAgPSBuZXcgKHJlcXVpcmUoJy4vaW50ZXJuYWxzL0dyYXBoQmluYXJ5V3JpdGVyJykpKGlvYyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gaW9jOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9BbnlTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9BbnlTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDUyNjhjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQW55U2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgQW55U2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotCi0gICAgLy8gc3BlY2lmaWNhbGx5IG9yZGVyZWQsIHRoZSBmaXJzdCBjYW5CZVVzZWRGb3I9dHJ1ZSB3aW5zCi0gICAgdGhpcy5zZXJpYWxpemVycyA9IFsKLSAgICAgIGlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLAotCi0gICAgICBpb2MubnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5LAotCi0gICAgICBpb2MuYm9vbGVhblNlcmlhbGl6ZXIsCi0gICAgICBpb2Mub2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyLAotICAgICAgaW9jLmRhdGVTZXJpYWxpemVyLAotICAgICAgaW9jLmJ5dGVjb2RlU2VyaWFsaXplciwKLSAgICAgIGlvYy5wU2VyaWFsaXplciwKLSAgICAgIGlvYy50cmF2ZXJzZXJTZXJpYWxpemVyLAotICAgICAgaW9jLmVudW1TZXJpYWxpemVyLAotICAgICAgaW9jLnNldFNlcmlhbGl6ZXIsCi0gICAgICBpb2MubGlzdFNlcmlhbGl6ZXIsCi0gICAgICBpb2MudXVpZFNlcmlhbGl6ZXIsCi0gICAgICBpb2MuZWRnZVNlcmlhbGl6ZXIsCi0gICAgICBpb2MucGF0aFNlcmlhbGl6ZXIsCi0gICAgICBpb2MucHJvcGVydHlTZXJpYWxpemVyLAotICAgICAgaW9jLnZlcnRleFNlcmlhbGl6ZXIsCi0gICAgICBpb2MudmVydGV4UHJvcGVydHlTZXJpYWxpemVyLAotICAgICAgaW9jLmNsYXNzU2VyaWFsaXplciwKLSAgICAgIGlvYy5zdHJpbmdTZXJpYWxpemVyLAotICAgICAgaW9jLnRleHRQU2VyaWFsaXplciwKLSAgICAgIGlvYy50cmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIsCi0KLSAgICAgIGlvYy5ieXRlQnVmZmVyU2VyaWFsaXplciwgLy8gQnVmZmVyIGluc3RhbmNlCi0gICAgICBpb2MubGFtYmRhU2VyaWFsaXplciwgLy8gYW55IGZ1bmN0aW9uCi0gICAgICBpb2MubWFwU2VyaWFsaXplciwgLy8gTWFwIG9yIGFueSBPYmplY3QKLSAgICBdOwotICB9Ci0KLSAgZ2V0U2VyaWFsaXplckNhbkJlVXNlZEZvcihpdGVtKSB7Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlcmlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAodGhpcy5zZXJpYWxpemVyc1tpXS5jYW5CZVVzZWRGb3IoaXRlbSkpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc2VyaWFsaXplcnNbaV07Ci0gICAgICB9Ci0gICAgfQotCi0gICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAgYE5vIHNlcmlhbGl6ZXIgZm91bmQgdG8gc3VwcG9ydCBpdGVtIHdoZXJlIHR5cGVvZihpdGVtKT0nJHt0eXBlb2YgaXRlbX0nIGFuZCBTdHJpbmcoaXRlbSk9JyR7U3RyaW5nKGl0ZW0pfScuYCwKLSAgICApOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIHJldHVybiB0aGlzLmdldFNlcmlhbGl6ZXJDYW5CZVVzZWRGb3IoaXRlbSkuc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0KTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlcikgewotICAgIC8vIG9idmlvdXNseSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgYWx3YXlzIGlzIHRydWUKLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGJ1ZmZlci5yZWFkVUludDgoKTsKLSAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSB0aGlzLmlvYy5zZXJpYWxpemVyc1t0eXBlX2NvZGVdOwotICAgICAgaWYgKCFzZXJpYWxpemVyKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB7dHlwZV9jb2RlfScpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShidWZmZXIpOwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9BcnJheVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0FycmF5U2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhYWJkNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0FycmF5U2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEzNyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgQXJyYXlTZXJpYWxpemVyIHsKLSAgY29uc3RydWN0b3IoaW9jLCBJRCkgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuSUQgPSBJRDsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tJRF0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7IC8vIHtsZW5ndGh9ID0gMAotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICAvLyB7bGVuZ3RofQotICAgIGxldCBsZW5ndGggPSBpdGVtLmxlbmd0aDsKLSAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgbGVuZ3RoID0gMDsgLy8gVE9ETzogdGVzdCBpdAotICAgIH0KLSAgICBpZiAobGVuZ3RoID4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVgpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigKLSAgICAgICAgYEFycmF5IGxlbmd0aD0ke2xlbmd0aH0gaXMgZ3JlYXRlciB0aGFuIHN1cHBvcnRlZCBtYXhfbGVuZ3RoPSR7dGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVh9LmAsCi0gICAgICApOwotICAgIH0KLSAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUobGVuZ3RoLCBmYWxzZSkpOwotCi0gICAgLy8ge2l0ZW1fMH0uLi57aXRlbV9ufQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5hbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtW2ldKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLklEKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGxldCBsZW5ndGgsIGxlbmd0aF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBsZW5ndGgsIGxlbjogbGVuZ3RoX2xlbiB9ID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBsZW5ndGhfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tsZW5ndGh9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigne2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8nKTsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsZW5ndGhfbGVuKTsKLQotICAgICAgY29uc3QgdiA9IFtdOwotICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBsZXQgdmFsdWUsIHZhbHVlX2xlbjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZV9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgICAgbGVuICs9IHZhbHVlX2xlbjsKLSAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge2l0ZW1fJHtpfX06IGAgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7Ci0gICAgICAgIHYucHVzaCh2YWx1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0JpZ0ludGVnZXJTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CaWdJbnRlZ2VyU2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhlNmU4Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0JpZ0ludGVnZXJTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLQotLy8gVE9ETzogaXQgaGFzIHJvb20gZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cwotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCaWdJbnRlZ2VyU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5CSUdJTlRFR0VSXSA9IHRoaXM7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICAvLyBpdCdzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkIGRpcmVjdGx5LCBzZWUgTnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5Ci0gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCc7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5CSUdJTlRFR0VSLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDBdKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkJJR0lOVEVHRVIsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgbGV0IHY7Ci0KLSAgICAvLyBwb3NpdGl2ZSBudW1iZXIKLSAgICBpZiAoaXRlbSA+PSAwKSB7Ci0gICAgICBsZXQgaGV4X3N0ciA9IGl0ZW0udG9TdHJpbmcoMTYpOwotICAgICAgaWYgKGhleF9zdHIubGVuZ3RoICUgMiAhPT0gMCkgewotICAgICAgICBoZXhfc3RyID0gJzAnICsgaGV4X3N0cjsgLy8gQnVmZmVyLmZyb20oKSBleHBlY3RzIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgcGVyIGJ5dGUKLSAgICAgIH0KLSAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoaGV4X3N0clswXSwgMTYpID4gNykgewotICAgICAgICBoZXhfc3RyID0gJzAwJyArIGhleF9zdHI7IC8vIHRvIGtlZXAgc2lnbiBiaXQgdW5zZXQgZm9yIHBvc2l0aXZlIG51bWJlcgotICAgICAgfQotICAgICAgdiA9IEJ1ZmZlci5mcm9tKGhleF9zdHIsICdoZXgnKTsKLSAgICB9Ci0KLSAgICAvLyBuZWdhdGl2ZSBudW1iZXIKLSAgICBlbHNlIHsKLSAgICAgIGxldCBoZXhfc3RyID0gKC1pdGVtKS50b1N0cmluZygxNik7Ci0KLSAgICAgIGNvbnN0IGJ5dGVzID0gKGhleF9zdHIubGVuZ3RoICsgKGhleF9zdHIubGVuZ3RoICUgMikpIC8gMjsgLy8gbnVtYmVyJ3Mgc2l6ZSBpbiBieXRlcwotICAgICAgbGV0IE4gPSBCaWdJbnQoYnl0ZXMpICogQmlnSW50KDgpOyAvLyBudW1iZXIncyBzaXplIGluIGJpdHMKLSAgICAgIGNvbnN0IElOVE5fTUlOID0gLShCaWdJbnQoMikgKiogKE4gLSBCaWdJbnQoMSkpKTsgLy8gbWluaW11bSBuZWdhdGl2ZSBudW1iZXIgd2UgY2FuIGtlZXAgd2l0aGluIE4gYml0cwotICAgICAgaWYgKGl0ZW0gPCBJTlROX01JTikgewotICAgICAgICBOICs9IEJpZ0ludCg4KTsgLy8gdG8gcHJvdmlkZSByb29tIGZvciBzbWFsbGVyIG5lZ2F0aXZlIG51bWJlcgotICAgICAgfQotCi0gICAgICBjb25zdCB0d29zX2NvbXBsZW1lbnQgPSBCaWdJbnQoMikgKiogTiArIGl0ZW07Ci0gICAgICBoZXhfc3RyID0gdHdvc19jb21wbGVtZW50LnRvU3RyaW5nKDE2KTsKLSAgICAgIGlmIChoZXhfc3RyLmxlbmd0aCAlIDIgIT09IDApIHsKLSAgICAgICAgaGV4X3N0ciA9ICcwJyArIGhleF9zdHI7IC8vIEJ1ZmZlci5mcm9tKCkgZXhwZWN0cyBleGFjdGx5IHR3byBoZXggZGlnaXRzIHBlciBieXRlCi0gICAgICB9Ci0KLSAgICAgIHYgPSBCdWZmZXIuZnJvbShoZXhfc3RyLCAnaGV4Jyk7Ci0gICAgfQotCi0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYubGVuZ3RoLCBmYWxzZSkpOwotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuQklHSU5URUdFUikgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICAvLyB7bGVuZ3RofQotICAgICAgbGV0IGxlbmd0aCwgbGVuZ3RoX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGxlbmd0aCwgbGVuOiBsZW5ndGhfbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IGxlbmd0aF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xlbmd0aH06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgaWYgKGxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB7bGVuZ3RofT0ke2xlbmd0aH0gaXMgbGVzcyB0aGFuIG9uZWApOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxlbmd0aF9sZW4pOwotCi0gICAgICBsZW4gKz0gbGVuZ3RoOwotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDAsIGxlbmd0aCk7Ci0gICAgICBsZXQgdiA9IEJpZ0ludChgMHgke2N1cnNvci50b1N0cmluZygnaGV4Jyl9YCk7Ci0gICAgICBjb25zdCBpc19zaWduX2JpdF9zZXQgPSAoY3Vyc29yWzBdICYgMHg4MCkgPT09IDB4ODA7Ci0gICAgICBpZiAoaXNfc2lnbl9iaXRfc2V0KSB7Ci0gICAgICAgIHYgPSBCaWdJbnQuYXNJbnROKGxlbmd0aCAqIDgsIHYpOyAvLyBub3cgd2UgZ2V0IGV4cGVjdGVkIG5lZ2F0aXZlIG51bWJlcgotICAgICAgfQotCi0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Cb29sZWFuU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQm9vbGVhblNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZGY5ZmMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Cb29sZWFuU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgQm9vbGVhblNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuQk9PTEVBTl0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQk9PTEVBTiwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5CT09MRUFOLCAweDAwXSkpOwotICAgIH0KLQotICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbaXRlbSA/IDB4MDEgOiAweDAwXSkpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5CT09MRUFOKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgnKTsKLSAgICAgIH0KLSAgICAgIGxlbiArPSAxOwotCi0gICAgICBsZXQgdiA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgIGlmICh2ICE9PSAweDAwICYmIHYgIT09IDB4MDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIGJvb2xlYW4gYnl0ZT0ke3Z9YCk7Ci0gICAgICB9Ci0gICAgICB2ID0gdiA9PT0gMHgwMTsKLQotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQnVsa1NldFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0J1bGtTZXRTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MThjYWEyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQnVsa1NldFNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJ1bGtTZXRTZXJpYWxpemVyIHsKLSAgY29uc3RydWN0b3IoaW9jKSB7Ci0gICAgdGhpcy5pb2MgPSBpb2M7Ci0gICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLkJVTEtTRVRdID0gdGhpczsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkJVTEtTRVQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgLy8ge2xlbmd0aH0KLSAgICAgIGxldCBsZW5ndGgsIGxlbmd0aF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBsZW5ndGgsIGxlbjogbGVuZ3RoX2xlbiB9ID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBsZW5ndGhfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tsZW5ndGh9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigne2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8nKTsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsZW5ndGhfbGVuKTsKLQotICAgICAgLy8gT2ZmaWNpYWwgR3JhcGhCaW5hcnkgMS4wIHNwZWM6Ci0gICAgICAvLyBJZiB0aGUgaW1wbGVtZW50aW5nIGxhbmd1YWdlIGRvZXMgbm90IGhhdmUgYSBCdWxrU2V0IG9iamVjdCB0byBkZXNlcmlhbGl6ZSBpbnRvLAotICAgICAgLy8gdGhpcyBmb3JtYXQgY2FuIGJlIGNvZXJjZWQgdG8gYSBMaXN0IGFuZCBzdGlsbCBiZSBjb25zaWRlcmVkIGNvbXBsaWFudCB3aXRoIEdyZW1saW4uCi0gICAgICAvLyBTaW1wbHkgImV4cGFuZCB0aGUgYnVsayIgYnkgYWRkaW5nIHRoZSBpdGVtIHRvIHRoZSBMaXN0IHRoZSBudW1iZXIgb2YgdGltZXMgc3BlY2lmaWVkIGJ5IHRoZSBidWxrLgotCi0gICAgICAvLyB7aXRlbV8wfS4uLntpdGVtX259Ci0gICAgICBsZXQgdiA9IG5ldyBBcnJheSgpOwotICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBsZXQgdmFsdWUsIHZhbHVlX2xlbjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZV9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgICAgbGVuICs9IHZhbHVlX2xlbjsKLSAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge2l0ZW1fJHtpfX0gdmFsdWU6IGAgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7Ci0KLSAgICAgICAgbGV0IGJ1bGssIGJ1bGtfbGVuOwotICAgICAgICB0cnkgewotICAgICAgICAgICh7IHY6IGJ1bGssIGxlbjogYnVsa19sZW4gfSA9IHRoaXMuaW9jLmxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgICBsZW4gKz0gYnVsa19sZW47Ci0gICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICAgIGVyci5tZXNzYWdlID0gYHtpdGVtXyR7aX19IGJ1bGs6IGAgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJ1bGsgPCAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB7aXRlbV8ke2l9fTogYnVsayBpcyBsZXNzIHRoYW4gemVyb2ApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChidWxrID4gNDI5NDk2NzI5NSkgewotICAgICAgICAgIC8vIGFycmF5TGVuZ3RoIG9mIEFycmF5KCkgY29uc3RydWN0b3IgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDJeMzIgLSAxCi0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB7aXRlbV8ke2l9fTogYnVsayBpcyBncmVhdGVyIHRoYW4gMl4zMi0xYCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGJ1bGtfbGVuKTsKLQotICAgICAgICBidWxrID0gTnVtYmVyKGJ1bGspOyAvLyBjb2Vyc2lvbiB0byBOdW1iZXIgaXMgcmVxdWlyZWQgZm9yIEJpZ0ludCBpZiBMb25nU2VyaWFsaXplck5nIGlzIHVzZWQKLSAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBBcnJheShidWxrKS5maWxsKHZhbHVlKTsKLSAgICAgICAgdiA9IHYuY29uY2F0KGl0ZW0pOwotICAgICAgfQotCi0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CeXRlQnVmZmVyU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MGVkZWYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CeXRlQnVmZmVyU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgQnl0ZUJ1ZmZlclNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuQllURUJVRkZFUl0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQnVmZmVyOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQllURUJVRkZFUiwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7IC8vIHtsZW5ndGh9ID0gMAotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQllURUJVRkZFUiwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICAvLyB7bGVuZ3RofQotICAgIGxldCBsZW5ndGggPSBpdGVtLmxlbmd0aDsKLSAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgbGVuZ3RoID0gMDsgLy8gVE9ETzogdGVzdCBpdAotICAgIH0KLSAgICBpZiAobGVuZ3RoID4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVgpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcigKLSAgICAgICAgYEJ1ZmZlciBsZW5ndGg9JHtsZW5ndGh9IGlzIGdyZWF0ZXIgdGhhbiBzdXBwb3J0ZWQgbWF4X2xlbmd0aD0ke3RoaXMuaW9jLmludFNlcmlhbGl6ZXIuSU5UMzJfTUFYfS5gLAotICAgICAgKTsKLSAgICB9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKGxlbmd0aCwgZmFsc2UpKTsKLQotICAgIC8vIHt2YWx1ZX0gc2VxdWVuY2Ugb2YgYnl0ZXMKLSAgICBidWZzLnB1c2goaXRlbSk7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkJZVEVCVUZGRVIpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgbGV0IGxlbmd0aCwgbGVuZ3RoX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGxlbmd0aCwgbGVuOiBsZW5ndGhfbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IGxlbmd0aF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xlbmd0aH06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVybycpOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxlbmd0aF9sZW4pOwotCi0gICAgICBpZiAobGVuZ3RoICE9PSBjdXJzb3IubGVuZ3RoKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcihge3ZhbHVlfTogdW5leHBlY3RlZCBhY3R1YWwge3ZhbHVlfSBsZW5ndGg9JHtjdXJzb3IubGVuZ3RofSB3aGVuIHtsZW5ndGh9PSR7bGVuZ3RofWApOwotICAgICAgfQotICAgICAgY29uc3QgdiA9IGN1cnNvci5zbGljZSgwLCBsZW5ndGgpOwotICAgICAgbGVuICs9IGxlbmd0aDsKLQotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQnl0ZVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0J5dGVTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDVlNjIyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQnl0ZVNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgQnl0ZVNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuQllURV0gPSB0aGlzOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQllURSwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5CWVRFLCAweDAwXSkpOwotICAgIH0KLSAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDEpOwotICAgIHYud3JpdGVVSW50OChpdGVtKTsgLy8gaWYgaXRlbSBpcyBub3Qgd2l0aGluIHVpbnQ4IGxpbWl0cyB3cml0ZVVJbnQ4IHdpbGwgZXJyb3IKLSAgICBidWZzLnB1c2godik7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkJZVEUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOwotICAgICAgfQotICAgICAgbGVuICs9IDE7Ci0KLSAgICAgIGNvbnN0IHYgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CeXRlY29kZVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0J5dGVjb2RlU2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ1OGY1NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0J5dGVjb2RlU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3Byb2Nlc3MvYnl0ZWNvZGUnKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJ5dGVjb2RlU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5CWVRFQ09ERV0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQnl0ZWNvZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiB0LlRyYXZlcnNhbDsKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkJZVEVDT0RFLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICBjb25zdCBzdGVwc19sZW5ndGggPSBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vIDAKLSAgICAgIGNvbnN0IHNvdXJjZXNfbGVuZ3RoID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyAwCi0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWy4uLnN0ZXBzX2xlbmd0aCwgLi4uc291cmNlc19sZW5ndGhdKTsKLSAgICB9Ci0KLSAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIHQuVHJhdmVyc2FsKSB7Ci0gICAgICBpdGVtID0gaXRlbS5nZXRCeXRlY29kZSgpOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQllURUNPREUsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgLy8ge3N0ZXBzX2xlbmd0aH17c3RlcF8wfS4uLntzdGVwX259Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0uc3RlcEluc3RydWN0aW9ucy5sZW5ndGgsIGZhbHNlKSk7IC8vIFRPRE86IHdoYXQgaWYgc3RlcHNfbGVuZ3RoID4gSU5UMzJfTUFYCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLnN0ZXBJbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIC8vIHtzdGVwX2l9IGlzIGNvbXBvc2VkIG9mIHtuYW1lfXt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufQotICAgICAgY29uc3Qgc3RlcCA9IGl0ZW0uc3RlcEluc3RydWN0aW9uc1tpXTsKLSAgICAgIGNvbnN0IG5hbWUgPSBzdGVwWzBdOwotICAgICAgY29uc3QgdmFsdWVzX2xlbmd0aCA9IHN0ZXAubGVuZ3RoIC0gMTsKLSAgICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShuYW1lLCBmYWxzZSkpOwotICAgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlc19sZW5ndGgsIGZhbHNlKSk7Ci0gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlc19sZW5ndGg7IGorKykgewotICAgICAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoc3RlcFsxICsgal0sIHRydWUpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB7c291cmNlc19sZW5ndGh9e3NvdXJjZV8wfS4uLntzb3VyY2Vfbn0KLSAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5zb3VyY2VJbnN0cnVjdGlvbnMubGVuZ3RoLCBmYWxzZSkpOyAvLyBUT0RPOiB3aGF0IGlmIHNvdXJjZXNfbGVuZ3RoID4gSU5UMzJfTUFYCi0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLnNvdXJjZUluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgLy8ge3NvdXJjZV9pfSBpcyBjb21wb3NlZCBvZiB7bmFtZX17dmFsdWVzX2xlbmd0aH17dmFsdWVfMH0uLi57dmFsdWVfbn0KLSAgICAgIGNvbnN0IHNvdXJjZSA9IGl0ZW0uc291cmNlSW5zdHJ1Y3Rpb25zW2ldOwotICAgICAgY29uc3QgbmFtZSA9IHNvdXJjZVswXTsKLSAgICAgIGNvbnN0IHZhbHVlc19sZW5ndGggPSBzb3VyY2UubGVuZ3RoIC0gMTsKLSAgICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShuYW1lLCBmYWxzZSkpOwotICAgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlc19sZW5ndGgsIGZhbHNlKSk7Ci0gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlc19sZW5ndGg7IGorKykgewotICAgICAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoc291cmNlWzEgKyBqXSwgdHJ1ZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuQllURUNPREUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgY29uc3QgdiA9IG5ldyBCeXRlY29kZSgpOwotCi0gICAgICAvLyBzdGVwcwotCi0gICAgICBsZXQgc3RlcHNfbGVuZ3RoLCBzdGVwc19sZW5ndGhfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogc3RlcHNfbGVuZ3RoLCBsZW46IHN0ZXBzX2xlbmd0aF9sZW4gfSA9IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOwotICAgICAgICBsZW4gKz0gc3RlcHNfbGVuZ3RoX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7c3RlcHNfbGVuZ3RofTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBpZiAoc3RlcHNfbGVuZ3RoIDwgMCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3tzdGVwc19sZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvJyk7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2Uoc3RlcHNfbGVuZ3RoX2xlbik7Ci0KLSAgICAgIC8vIHtzdGVwX2l9IGlzIGNvbXBvc2VkIG9mIHtuYW1lfXt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufQotICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwc19sZW5ndGg7IGkrKykgewotICAgICAgICAvLyB7bmFtZX0gaXMgYSBTdHJpbmcKLSAgICAgICAgbGV0IG5hbWUsIG5hbWVfbGVuOwotICAgICAgICB0cnkgewotICAgICAgICAgICh7IHY6IG5hbWUsIGxlbjogbmFtZV9sZW4gfSA9IHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOwotICAgICAgICAgIGxlbiArPSBuYW1lX2xlbjsKLSAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge3N0ZXBfJHtpfX0ge25hbWV9OiBgICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgICAgdGhyb3cgZXJyOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShuYW1lX2xlbik7Ci0KLSAgICAgICAgLy8ge3ZhbHVlc19sZW5ndGh9IGlzIGFuIEludCBkZXNjcmliaW5nIHRoZSBhbW91bnQgdmFsdWVzCi0gICAgICAgIGxldCB2YWx1ZXNfbGVuZ3RoLCB2YWx1ZXNfbGVuZ3RoX2xlbjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAoeyB2OiB2YWx1ZXNfbGVuZ3RoLCBsZW46IHZhbHVlc19sZW5ndGhfbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgICBsZW4gKz0gdmFsdWVzX2xlbmd0aF9sZW47Ci0gICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICAgIGVyci5tZXNzYWdlID0gYHtzdGVwXyR7aX19IHt2YWx1ZXNfbGVuZ3RofTogYCArIGVyci5tZXNzYWdlOwotICAgICAgICAgIHRocm93IGVycjsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVzX2xlbmd0aCA8IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHtzdGVwXyR7aX19IHt2YWx1ZXNfbGVuZ3RofSBpcyBsZXNzIHRoYW4gemVyb2ApOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSh2YWx1ZXNfbGVuZ3RoX2xlbik7Ci0KLSAgICAgICAgLy8ge3ZhbHVlX2l9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9IGRlc2NyaWJpbmcgdGhlIHN0ZXAgYXJndW1lbnQKLSAgICAgICAgY29uc3QgdmFsdWVzID0gW107Ci0gICAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOwotICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlc19sZW5ndGg7IGorKykgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZV9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOwotICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpOwotICAgICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge3N0ZXBfJHtpfX0ge3ZhbHVlXyR7an19OiBgICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgICAgfQotICAgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSh2YWx1ZV9sZW4pOwotICAgICAgICB9Ci0KLSAgICAgICAgdi5hZGRTdGVwKG5hbWUsIHZhbHVlcyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHNvdXJjZXMKLQotICAgICAgbGV0IHNvdXJjZXNfbGVuZ3RoLCBzb3VyY2VzX2xlbmd0aF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBzb3VyY2VzX2xlbmd0aCwgbGVuOiBzb3VyY2VzX2xlbmd0aF9sZW4gfSA9IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOwotICAgICAgICBsZW4gKz0gc291cmNlc19sZW5ndGhfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tzb3VyY2VzX2xlbmd0aH06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgaWYgKHNvdXJjZXNfbGVuZ3RoIDwgMCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3tzb3VyY2VzX2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8nKTsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShzb3VyY2VzX2xlbmd0aF9sZW4pOwotCi0gICAgICAvLyB7c291cmNlX2l9IGlzIGNvbXBvc2VkIG9mIHtuYW1lfXt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufQotICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VzX2xlbmd0aDsgaSsrKSB7Ci0gICAgICAgIC8vIHtuYW1lfSBpcyBhIFN0cmluZwotICAgICAgICBsZXQgbmFtZSwgbmFtZV9sZW47Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgKHsgdjogbmFtZSwgbGVuOiBuYW1lX2xlbiB9ID0gdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgICAgbGVuICs9IG5hbWVfbGVuOwotICAgICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgICBlcnIubWVzc2FnZSA9IGB7c291cmNlXyR7aX19IHtuYW1lfTogYCArIGVyci5tZXNzYWdlOwotICAgICAgICAgIHRocm93IGVycjsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobmFtZV9sZW4pOwotCi0gICAgICAgIC8vIHt2YWx1ZXNfbGVuZ3RofSBpcyBhbiBJbnQgZGVzY3JpYmluZyB0aGUgYW1vdW50IHZhbHVlcwotICAgICAgICBsZXQgdmFsdWVzX2xlbmd0aCwgdmFsdWVzX2xlbmd0aF9sZW47Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgKHsgdjogdmFsdWVzX2xlbmd0aCwgbGVuOiB2YWx1ZXNfbGVuZ3RoX2xlbiB9ID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgICAgbGVuICs9IHZhbHVlc19sZW5ndGhfbGVuOwotICAgICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgICBlcnIubWVzc2FnZSA9IGB7c291cmNlXyR7aX19IHt2YWx1ZXNfbGVuZ3RofTogYCArIGVyci5tZXNzYWdlOwotICAgICAgICAgIHRocm93IGVycjsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVzX2xlbmd0aCA8IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHtzb3VyY2VfJHtpfX0ge3ZhbHVlc19sZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvYCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlc19sZW5ndGhfbGVuKTsKLQotICAgICAgICAvLyB7dmFsdWVfaX0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0KLSAgICAgICAgY29uc3QgdmFsdWVzID0gW107Ci0gICAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOwotICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlc19sZW5ndGg7IGorKykgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZV9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOwotICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpOwotICAgICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge3NvdXJjZV8ke2l9fSB7dmFsdWVfJHtqfX06IGAgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgICAgIHRocm93IGVycjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7Ci0gICAgICAgIH0KLQotICAgICAgICB2LmFkZFNvdXJjZShuYW1lLCB2YWx1ZXMpOwotICAgICAgfQotCi0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9DbGFzc1NlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0NsYXNzU2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjMTVjNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0NsYXNzU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBUcmF2ZXJzYWxTdHJhdGVneSB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLQotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBDbGFzc1NlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuQ0xBU1NdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiAoCi0gICAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYKLSAgICAgICEhdmFsdWUucHJvdG90eXBlICYmCi0gICAgICAhIXZhbHVlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lICYmCi0gICAgICBuZXcgdmFsdWUoKSBpbnN0YW5jZW9mIFRyYXZlcnNhbFN0cmF0ZWd5Ci0gICAgKTsKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkNMQVNTLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoMCwgZmFsc2UpOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQ0xBU1MsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgY29uc3QgZnFjbiA9IG5ldyBpdGVtKCkuZnFjbjsKLSAgICBjb25zdCB2ID0gQnVmZmVyLmZyb20oZnFjbiwgJ3V0ZjgnKTsKLSAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoZnFjbi5sZW5ndGgsIGZhbHNlKSk7Ci0gICAgYnVmcy5wdXNoKHYpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0RhdGFUeXBlLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9EYXRhVHlwZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE5NzEzZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0RhdGFUeXBlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIEdyYXBoQmluYXJ5IGRhdGEgdHlwZS4KLSAqCi0gKiBTZWUgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkRhdGFUeXBlIEphdmEgY2xhc3MuCi0gKi8KLWNvbnN0IERhdGFUeXBlID0gewotICBJTlQ6IDB4MDEsCi0gIExPTkc6IDB4MDIsCi0gIFNUUklORzogMHgwMywKLSAgREFURTogMHgwNCwKLSAgVElNRVNUQU1QOiAweDA1LAotICBDTEFTUzogMHgwNiwKLSAgRE9VQkxFOiAweDA3LAotICBGTE9BVDogMHgwOCwKLSAgTElTVDogMHgwOSwKLSAgTUFQOiAweDBhLAotICBTRVQ6IDB4MGIsCi0gIFVVSUQ6IDB4MGMsCi0gIEVER0U6IDB4MGQsCi0gIFBBVEg6IDB4MGUsCi0gIFBST1BFUlRZOiAweDBmLAotICBHUkFQSDogMHgxMCwKLSAgVkVSVEVYOiAweDExLAotICBWRVJURVhQUk9QRVJUWTogMHgxMiwKLSAgQkFSUklFUjogMHgxMywKLSAgQklORElORzogMHgxNCwKLSAgQllURUNPREU6IDB4MTUsCi0gIENBUkRJTkFMSVRZOiAweDE2LAotICBDT0xVTU46IDB4MTcsCi0gIERJUkVDVElPTjogMHgxOCwKLSAgT1BFUkFUT1I6IDB4MTksCi0gIE9SREVSOiAweDFhLAotICBQSUNLOiAweDFiLAotICBQT1A6IDB4MWMsCi0gIExBTUJEQTogMHgxZCwKLSAgUDogMHgxZSwKLSAgU0NPUEU6IDB4MWYsCi0gIFQ6IDB4MjAsCi0gIFRSQVZFUlNFUjogMHgyMSwKLSAgQklHREVDSU1BTDogMHgyMiwKLSAgQklHSU5URUdFUjogMHgyMywKLSAgQllURTogMHgyNCwKLSAgQllURUJVRkZFUjogMHgyNSwKLSAgU0hPUlQ6IDB4MjYsCi0gIEJPT0xFQU46IDB4MjcsCi0gIFRFWFRQOiAweDI4LAotICBUUkFWRVJTQUxTVFJBVEVHWTogMHgyOSwKLSAgQlVMS1NFVDogMHgyYSwKLSAgVFJFRTogMHgyYiwKLSAgTUVUUklDUzogMHgyYywKLSAgVFJBVkVSU0FMTUVUUklDUzogMHgyZCwKLSAgTUVSR0U6IDB4MmUsCi0gIERUOiAweDJmLAotICBHVFlQRTogMHgzMCwKLQotICBDSEFSOiAweDgwLAotICBEVVJBVElPTjogMHg4MSwKLSAgSU5FVEFERFJFU1M6IDB4ODIsCi0gIElOU1RBTlQ6IDB4ODMsCi0gIExPQ0FMREFURTogMHg4NCwKLSAgTE9DQUxEQVRFVElNRTogMHg4NSwKLSAgTE9DQUxUSU1FOiAweDg2LAotICBNT05USERBWTogMHg4NywKLSAgT0ZGU0VUREFURVRJTUU6IDB4ODgsCi0gIE9GRlNFVFRJTUU6IDB4ODksCi0gIFBFUklPRDogMHg4YSwKLSAgWUVBUjogMHg4YiwKLSAgWUVBUk1PTlRIOiAweDhjLAotICBaT05FREFURVRJTUU6IDB4OGQsCi0gIFpPTkVPRkZTRVQ6IDB4OGUsCi0KLSAgQ1VTVE9NOiAwLAotICBVTlNQRUNJRklFRF9OVUxMOiAweGZlLAotfTsKLQotbW9kdWxlLmV4cG9ydHMgPSBEYXRhVHlwZTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRGF0ZVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0RhdGVTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2YzZGM4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRGF0ZVNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERhdGVTZXJpYWxpemVyIHsKLSAgY29uc3RydWN0b3IoaW9jLCBJRCkgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuSUQgPSBJRDsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tJRF0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZTsKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDFdKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDgpOwotICAgIHYud3JpdGVCaWdJbnQ2NEJFKEJpZ0ludChpdGVtLmdldFRpbWUoKSkpOwotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5JRCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDgpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7Ci0gICAgICB9Ci0gICAgICBsZW4gKz0gODsKLQotICAgICAgY29uc3QgbXMgPSBjdXJzb3IucmVhZEJpZ0ludDY0QkUoKTsKLSAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZShOdW1iZXIobXMpKTsKLQotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRG91YmxlU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRG91YmxlU2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQwYzY1Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0RvdWJsZVNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERvdWJsZVNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuRE9VQkxFXSA9IHRoaXM7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5ET1VCTEUsIDB4MDFdKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuRE9VQkxFLCAweDAwXSkpOwotICAgIH0KLSAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDgpOwotICAgIHYud3JpdGVEb3VibGVCRShpdGVtKTsKLSAgICBidWZzLnB1c2godik7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkRPVUJMRSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDgpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7Ci0gICAgICB9Ci0gICAgICBsZW4gKz0gODsKLQotICAgICAgY29uc3QgdiA9IGN1cnNvci5yZWFkRG91YmxlQkUoKTsKLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0VkZ2VTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9FZGdlU2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1NWYxZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0VkZ2VTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLWNvbnN0IGcgPSByZXF1aXJlKCcuLi8uLi8uLi9ncmFwaCcpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEVkZ2VTZXJpYWxpemVyIHsKLSAgY29uc3RydWN0b3IoaW9jKSB7Ci0gICAgdGhpcy5pb2MgPSBpb2M7Ci0gICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLkVER0VdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGcuRWRnZTsKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkVER0UsIDB4MDFdKTsKLSAgICAgIH0KLSAgICAgIGNvbnN0IGlkID0gWzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBTdHJpbmcgJycKLSAgICAgIGNvbnN0IGxhYmVsID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyAnJwotICAgICAgY29uc3QgaW5WSWQgPSBbMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vIFN0cmluZyAnJwotICAgICAgY29uc3QgaW5WTGFiZWwgPSBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vICcnCi0gICAgICBjb25zdCBvdXRWSWQgPSBbMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vIFN0cmluZyAnJwotICAgICAgY29uc3Qgb3V0VkxhYmVsID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyAnJwotICAgICAgY29uc3QgcGFyZW50ID0gWzB4ZmUsIDB4MDFdOyAvLyBudWxsCi0gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gWzB4ZmUsIDB4MDFdOyAvLyBudWxsCi0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWy4uLmlkLCAuLi5sYWJlbCwgLi4uaW5WSWQsIC4uLmluVkxhYmVsLCAuLi5vdXRWSWQsIC4uLm91dFZMYWJlbCwgLi4ucGFyZW50LCAuLi5wcm9wZXJ0aWVzXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5FREdFLCAweDAwXSkpOwotICAgIH0KLQotICAgIC8vIHtpZH0KLSAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5pZCkpOwotCi0gICAgLy8ge2xhYmVsfQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLmxhYmVsLCBmYWxzZSkpOwotCi0gICAgLy8ge2luVklkfQotICAgIGNvbnN0IGluVklkID0gaXRlbS5pblYgJiYgaXRlbS5pblYuaWQ7Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGluVklkKSk7Ci0KLSAgICAvLyB7aW5WTGFiZWx9Ci0gICAgY29uc3QgaW5WTGFiZWwgPSBpdGVtLmluViAmJiBpdGVtLmluVi5sYWJlbDsKLSAgICBidWZzLnB1c2godGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5zZXJpYWxpemUoaW5WTGFiZWwsIGZhbHNlKSk7Ci0KLSAgICAvLyB7b3V0VklkfQotICAgIGNvbnN0IG91dFZJZCA9IGl0ZW0ub3V0ViAmJiBpdGVtLm91dFYuaWQ7Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG91dFZJZCkpOwotCi0gICAgLy8ge291dFZMYWJlbH0KLSAgICBjb25zdCBvdXRWTGFiZWwgPSBpdGVtLm91dFYgJiYgaXRlbS5vdXRWLmxhYmVsOwotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShvdXRWTGFiZWwsIGZhbHNlKSk7Ci0KLSAgICAvLyB7cGFyZW50fQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSk7Ci0KLSAgICAvLyB7cHJvcGVydGllc30KLSAgICBidWZzLnB1c2godGhpcy5pb2MudW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci5zZXJpYWxpemUobnVsbCkpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5FREdFKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGxldCBpZCwgaWRfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogaWQsIGxlbjogaWRfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOwotICAgICAgICBsZW4gKz0gaWRfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tpZH06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGlkX2xlbik7Ci0KLSAgICAgIGxldCBsYWJlbCwgbGFiZWxfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogbGFiZWwsIGxlbjogbGFiZWxfbGVuIH0gPSB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IGxhYmVsX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGFiZWx9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsYWJlbF9sZW4pOwotCi0gICAgICBsZXQgaW5WSWQsIGluVklkX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGluVklkLCBsZW46IGluVklkX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IGluVklkX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7aW5WSWR9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShpblZJZF9sZW4pOwotCi0gICAgICBsZXQgaW5WTGFiZWwsIGluVkxhYmVsX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGluVkxhYmVsLCBsZW46IGluVkxhYmVsX2xlbiB9ID0gdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBpblZMYWJlbF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2luVkxhYmVsfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoaW5WTGFiZWxfbGVuKTsKLQotICAgICAgbGV0IG91dFZJZCwgb3V0VklkX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IG91dFZJZCwgbGVuOiBvdXRWSWRfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOwotICAgICAgICBsZW4gKz0gb3V0VklkX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7b3V0VklkfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2Uob3V0VklkX2xlbik7Ci0KLSAgICAgIGxldCBvdXRWTGFiZWwsIG91dFZMYWJlbF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBvdXRWTGFiZWwsIGxlbjogb3V0VkxhYmVsX2xlbiB9ID0gdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBvdXRWTGFiZWxfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tvdXRWTGFiZWx9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShvdXRWTGFiZWxfbGVuKTsKLQotICAgICAgbGV0IHBhcmVudF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyBsZW46IHBhcmVudF9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgIGxlbiArPSBwYXJlbnRfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3twYXJlbnR9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwYXJlbnRfbGVuKTsKLQotICAgICAgbGV0IHByb3BlcnRpZXMsIHByb3BlcnRpZXNfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogcHJvcGVydGllcywgbGVuOiBwcm9wZXJ0aWVzX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IHByb3BlcnRpZXNfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3twcm9wZXJ0aWVzfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UocHJvcGVydGllc19sZW4pOwotCi0gICAgICBjb25zdCB2ID0gbmV3IGcuRWRnZSgKLSAgICAgICAgaWQsCi0gICAgICAgIG5ldyBnLlZlcnRleChvdXRWSWQsIG91dFZMYWJlbCwgbnVsbCksCi0gICAgICAgIGxhYmVsLAotICAgICAgICBuZXcgZy5WZXJ0ZXgoaW5WSWQsIGluVkxhYmVsLCBudWxsKSwKLSAgICAgICAgcHJvcGVydGllcywKLSAgICAgICk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9FbnVtU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRW51bVNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiMzY4NDEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9FbnVtU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBFbnVtU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotCi0gICAgY29uc3QgdG9fb3JpZ19lbnVtID0gKG9iaikgPT4gewotICAgICAgLy8gcHJvY2Vzcy90cmF2ZXJzYWwuanM6dG9FbnVtKCkgY2hhbmdlcyBvcmlnaW5hbCBlbGVtZW50IG5hbWUgKGUuZy4gT1VUID0+IG91dCkgZm9yIGVuZCB1c2VycycgY29udmVuaWVuY2UKLSAgICAgIC8vIGJ1dCB3ZSBuZWVkIG9yaWdpbmFsIG1hcHBpbmcgYXMgaXMgdy9vIGFkZGl0aW9uYWwgdGltZSBzcGVudCBvbiBjYXNlLWluc2Vuc2l0aXRpdmUgY29tcGFyaXNvbgotICAgICAgY29uc3QgciA9IHt9OwotICAgICAgT2JqZWN0LnZhbHVlcyhvYmopLmZvckVhY2goKGUpID0+IChyW2UuZWxlbWVudE5hbWVdID0gZSkpOwotICAgICAgcmV0dXJuIHI7Ci0gICAgfTsKLSAgICBjb25zdCBEVCA9IGlvYy5EYXRhVHlwZTsKLSAgICB0aGlzLnR5cGVzID0gWwotICAgICAgeyBuYW1lOiAnQmFycmllcicsIGNvZGU6IERULkJBUlJJRVIsIGVudW06IHRvX29yaWdfZW51bSh0LmJhcnJpZXIpIH0sCi0gICAgICB7IG5hbWU6ICdDYXJkaW5hbGl0eScsIGNvZGU6IERULkNBUkRJTkFMSVRZLCBlbnVtOiB0b19vcmlnX2VudW0odC5jYXJkaW5hbGl0eSkgfSwKLSAgICAgIHsgbmFtZTogJ0NvbHVtbicsIGNvZGU6IERULkNPTFVNTiwgZW51bTogdG9fb3JpZ19lbnVtKHQuY29sdW1uKSB9LAotICAgICAgeyBuYW1lOiAnRGlyZWN0aW9uJywgY29kZTogRFQuRElSRUNUSU9OLCBlbnVtOiB0b19vcmlnX2VudW0odC5kaXJlY3Rpb24pIH0sCi0gICAgICB7IG5hbWU6ICdEVCcsIGNvZGU6IERULkRULCBlbnVtOiB0b19vcmlnX2VudW0odC5kdCkgfSwKLSAgICAgIHsgbmFtZTogJ0dUeXBlJywgY29kZTogRFQuR1RZUEUsIGVudW06IHRvX29yaWdfZW51bSh0LmdUeXBlKSB9LAotICAgICAgeyBuYW1lOiAnTWVyZ2UnLCBjb2RlOiBEVC5NRVJHRSwgZW51bTogdG9fb3JpZ19lbnVtKHQubWVyZ2UpIH0sCi0gICAgICB7IG5hbWU6ICdPcGVyYXRvcicsIGNvZGU6IERULk9QRVJBVE9SLCBlbnVtOiB0b19vcmlnX2VudW0odC5vcGVyYXRvcikgfSwKLSAgICAgIHsgbmFtZTogJ09yZGVyJywgY29kZTogRFQuT1JERVIsIGVudW06IHRvX29yaWdfZW51bSh0Lm9yZGVyKSB9LAotICAgICAgeyBuYW1lOiAnUGljaycsIGNvZGU6IERULlBJQ0ssIGVudW06IHRvX29yaWdfZW51bSh0LnBpY2spIH0sCi0gICAgICB7IG5hbWU6ICdQb3AnLCBjb2RlOiBEVC5QT1AsIGVudW06IHRvX29yaWdfZW51bSh0LnBvcCkgfSwKLSAgICAgIHsgbmFtZTogJ1Njb3BlJywgY29kZTogRFQuU0NPUEUsIGVudW06IHRvX29yaWdfZW51bSh0LnNjb3BlKSB9LAotICAgICAgeyBuYW1lOiAnVCcsIGNvZGU6IERULlQsIGVudW06IHRvX29yaWdfZW51bSh0LnQpIH0sCi0gICAgXTsKLSAgICB0aGlzLmJ5bmFtZSA9IHt9OwotICAgIHRoaXMuYnljb2RlID0ge307Ci0gICAgZm9yIChjb25zdCB0eXBlIG9mIHRoaXMudHlwZXMpIHsKLSAgICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW3R5cGUuY29kZV0gPSB0aGlzOwotICAgICAgdGhpcy5ieW5hbWVbdHlwZS5uYW1lXSA9IHR5cGU7Ci0gICAgICB0aGlzLmJ5Y29kZVt0eXBlLmNvZGVdID0gdHlwZTsKLSAgICB9Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIHQuRW51bVZhbHVlKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIXRoaXMuYnluYW1lW3ZhbHVlLnR5cGVOYW1lXSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbnVtU2VyaWFsaXplci5zZXJpYWxpemU6IHR5cGVOYW1lPSR7dmFsdWUudHlwZU5hbWV9IGlzIG5vdCBzdXBwb3J0ZWQuYCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgY29uc3QgdHlwZSA9IHRoaXMuYnluYW1lW2l0ZW0udHlwZU5hbWVdOwotICAgIGlmIChpdGVtLmVsZW1lbnROYW1lID09PSB1bmRlZmluZWQgfHwgaXRlbS5lbGVtZW50TmFtZSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdHlwZS5jb2RlLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlNUUklORywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdHlwZS5jb2RlLCAweDAwXSkpOwotICAgIH0KLQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLmVsZW1lbnROYW1lLCB0cnVlKSk7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgbGV0IHR5cGUgPSB1bmRlZmluZWQ7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgdHlwZSA9IHRoaXMuYnljb2RlW3R5cGVfY29kZV07Ci0gICAgICAgIGlmICghdHlwZSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB7dHlwZV9jb2RlfT0ke3R5cGVfY29kZX1gKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgbGV0IGVsZW1lbnROYW1lLCBlbGVtZW50TmFtZV9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBlbGVtZW50TmFtZSwgbGVuOiBlbGVtZW50TmFtZV9sZW4gfSA9IHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCB0cnVlKSk7Ci0gICAgICAgIGxlbiArPSBlbGVtZW50TmFtZV9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAnZWxlbWVudE5hbWU6ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGVsZW1lbnROYW1lX2xlbik7Ci0KLSAgICAgIGxldCB2OwotICAgICAgaWYgKCF0eXBlKSB7Ci0gICAgICAgIHYgPSBuZXcgdC5FbnVtVmFsdWUodW5kZWZpbmVkLCBlbGVtZW50TmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB2ID0gdHlwZS5lbnVtW2VsZW1lbnROYW1lXTsgLy8gdXNlcnMgYXJlIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBtYXBzIGxpa2UgTWFwLmdldChULmlkKSwgaS5lLiBpdCBtdXN0IGJlIGV4YWN0bHkgdGhlIHNhbWUgb2JqZWN0Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0Zsb2F0U2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRmxvYXRTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGZlYmNiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRmxvYXRTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLQotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGbG9hdFNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuRkxPQVRdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIC8vIGl0J3Mgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkZMT0FULCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkZMT0FULCAweDAwXSkpOwotICAgIH0KLSAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDQpOwotICAgIHYud3JpdGVGbG9hdEJFKGl0ZW0pOwotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuRkxPQVQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCA0KSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOwotICAgICAgfQotICAgICAgbGVuICs9IDQ7Ci0KLSAgICAgIGNvbnN0IHYgPSBjdXJzb3IucmVhZEZsb2F0QkUoKTsKLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0dyYXBoQmluYXJ5UmVhZGVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9HcmFwaEJpbmFyeVJlYWRlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFkOWYyYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0dyYXBoQmluYXJ5UmVhZGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi0vKioKLSAqIEdyYXBoQmluYXJ5IHJlYWRlci4KLSAqLwotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBHcmFwaEJpbmFyeVJlYWRlciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICB9Ci0KLSAgcmVhZFJlc3BvbnNlKGJ1ZmZlcikgewotICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcignQnVmZmVyIGlzIG1pc3NpbmcuJyk7Ci0gICAgfQotICAgIGlmICghKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFuIGluc3RhbmNlIG9mIEJ1ZmZlci4nKTsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1ZmZlciBpcyBlbXB0eS4nKTsKLSAgICB9Ci0KLSAgICBjb25zdCByZXNwb25zZSA9IHsgc3RhdHVzOiB7fSwgcmVzdWx0OiB7fSB9OwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0gICAgbGV0IGxlbjsKLQotICAgIC8vIHt2ZXJzaW9ufSBpcyBhIEJ5dGUgcmVwcmVzZW50aW5nIHRoZSBwcm90b2NvbCB2ZXJzaW9uCi0gICAgY29uc3QgdmVyc2lvbiA9IGN1cnNvclswXTsKLSAgICBpZiAodmVyc2lvbiAhPT0gMHg4MSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCB2ZXJzaW9uICcke3ZlcnNpb259Jy5gKTsKLSAgICB9Ci0gICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOyAvLyBza2lwIHZlcnNpb24KLQotICAgIC8vIHtyZXF1ZXN0X2lkfSBpcyBhIG51bGxhYmxlIFVVSUQKLSAgICAoeyB2OiByZXNwb25zZS5yZXF1ZXN0SWQsIGxlbiB9ID0gdGhpcy5pb2MudXVpZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSwgdHJ1ZSkpOwotICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsZW4pOwotCi0gICAgLy8ge3N0YXR1c19jb2RlfSBpcyBhbiBJbnQKLSAgICAoeyB2OiByZXNwb25zZS5zdGF0dXMuY29kZSwgbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuKTsKLQotICAgIC8vIHtzdGF0dXNfbWVzc2FnZX0gaXMgYSBudWxsYWJsZSBTdHJpbmcKLSAgICAoeyB2OiByZXNwb25zZS5zdGF0dXMubWVzc2FnZSwgbGVuIH0gPSB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UsIHRydWUpKTsKLSAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuKTsKLQotICAgIC8vIHtzdGF0dXNfYXR0cmlidXRlc30gaXMgYSBNYXAKLSAgICAoeyB2OiByZXNwb25zZS5zdGF0dXMuYXR0cmlidXRlcywgbGVuIH0gPSB0aGlzLmlvYy5tYXBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuKTsKLQotICAgIC8vIHtyZXN1bHRfbWV0YX0gaXMgYSBNYXAKLSAgICAoeyB2OiByZXNwb25zZS5yZXN1bHQubWV0YSwgbGVuIH0gPSB0aGlzLmlvYy5tYXBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuKTsKLQotICAgIC8vIHtyZXN1bHRfZGF0YX0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0KLSAgICAoeyB2OiByZXNwb25zZS5yZXN1bHQuZGF0YSB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLQotICAgIHJldHVybiByZXNwb25zZTsKLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvR3JhcGhCaW5hcnlXcml0ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0dyYXBoQmluYXJ5V3JpdGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQwYmEwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvR3JhcGhCaW5hcnlXcml0ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLS8qKgotICogR3JhcGhCaW5hcnkgd3JpdGVyLgotICovCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEdyYXBoQmluYXJ5V3JpdGVyIHsKLSAgY29uc3RydWN0b3IoaW9jKSB7Ci0gICAgdGhpcy5pb2MgPSBpb2M7Ci0gIH0KLQotICB3cml0ZVJlcXVlc3QoeyByZXF1ZXN0SWQsIG9wLCBwcm9jZXNzb3IsIGFyZ3MgfSkgewotICAgIGNvbnN0IGJ1ZnMgPSBbCi0gICAgICAvLyB7dmVyc2lvbn0gMSBieXRlCi0gICAgICBCdWZmZXIuZnJvbShbMHg4MV0pLAotICAgICAgLy8ge3JlcXVlc3RfaWR9IFVVSUQKLSAgICAgIHRoaXMuaW9jLnV1aWRTZXJpYWxpemVyLnNlcmlhbGl6ZShyZXF1ZXN0SWQsIGZhbHNlKSwKLSAgICAgIC8vIHtvcH0gU3RyaW5nCi0gICAgICB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShvcCwgZmFsc2UpLAotICAgICAgLy8ge3Byb2Nlc3Nvcn0gU3RyaW5nCi0gICAgICB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShwcm9jZXNzb3IsIGZhbHNlKSwKLSAgICAgIC8vIHthcmdzfSBNYXAKLSAgICAgIHRoaXMuaW9jLm1hcFNlcmlhbGl6ZXIuc2VyaWFsaXplKGFyZ3MsIGZhbHNlKSwKLSAgICBdOwotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotCi0gICAgLyovLyBEZXRhaWxlZCBleGFtcGxlIGZvciBhIHF1aWNrIHJlZmVyZW5jZToKLSAgICAgIC8vIHt2ZXJzaW9ufQotICAgICAgMHg4MSwKLSAgICAgIC8vIHtyZXF1ZXN0X2lkfSBVVUlECi0gICAgICAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGLAotICAgICAgLy8ge29wfSBTdHJpbmcKLSAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDgsICAuLi5CdWZmZXIuZnJvbSgnYnl0ZWNvZGUnKSwKLSAgICAgIC8vIHtwcm9jZXNzb3J9IFN0cmluZwotICAgICAgMHgwMCwweDAwLDB4MDAsMHgwOSwgIC4uLkJ1ZmZlci5mcm9tKCd0cmF2ZXJzYWwnKSwKLSAgICAgIC8vIHthcmdzfSBNYXAKLSAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgIC8vIDEuCi0gICAgICAgIC8vIGFyZ3MuYWxpYXNlcyBrZXkgU3RyaW5nCi0gICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDcsICAuLi5CdWZmZXIuZnJvbSgnYWxpYXNlcycpLAotICAgICAgICAvLyBhcmdzLmFsaWFzZXMgdmFsdWUgTWFwCi0gICAgICAgIDB4MEEsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgICAgLy8gYWxpYXNlcy5nIGtleSBTdHJpbmcKLSAgICAgICAgICAweDAzLDB4MDAsICAweDAwLDB4MDAsMHgwMCwweDAxLCAgLi4uQnVmZmVyLmZyb20oJ2cnKSwKLSAgICAgICAgICAvLyBhbGlhc2VzLmcgdmFsdWUgU3RyaW5nCi0gICAgICAgICAgMHgwMywweDAwLCAgMHgwMCwweDAwLDB4MDAsMHgwMSwgIC4uLkJ1ZmZlci5mcm9tKCdnJyksCi0gICAgICAgIC8vIDIuCi0gICAgICAgIC8vIGFyZ3MuZ3JlbWxpbiBrZXkgU3RyaW5nCi0gICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDcsICAuLi5CdWZmZXIuZnJvbSgnZ3JlbWxpbicpLAotICAgICAgICAvLyBhcmdzLmdyZW1saW4gdmFsdWUgQnl0ZWNvZGUKLSAgICAgICAgMHgxNSwweDAwLAotICAgICAgICAgIC8vIHtzdGVwc19sZW5ndGh9Ci0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAgIC8vIHN0ZXAgMSAtIHtuYW1lfSBTdHJpbmcKLSAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsICAuLi5CdWZmZXIuZnJvbSgnVicpLAotICAgICAgICAgICAgLy8gc3RlcCAxIC0ge3ZhbHVlc19sZW5ndGh9IEludAotICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAgICAgICAvLyB7c291cmNlc19sZW5ndGh9Ci0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAqLwotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9JbnRTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9JbnRTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQzMmY0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvSW50U2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgSW50U2VyaWFsaXplciB7Ci0gIGdldCBJTlQzMl9NSU4oKSB7Ci0gICAgcmV0dXJuIC0yMTQ3NDgzNjQ4OwotICB9Ci0gIGdldCBJTlQzMl9NQVgoKSB7Ci0gICAgcmV0dXJuIDIxNDc0ODM2NDc7Ci0gIH0KLQotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuSU5UXSA9IHRoaXM7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodmFsdWUgPCB0aGlzLklOVDMyX01JTiB8fCB2YWx1ZSA+IHRoaXMuSU5UMzJfTUFYKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuSU5ULCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLklOVCwgMHgwMF0pKTsKLSAgICB9Ci0gICAgY29uc3QgdiA9IEJ1ZmZlci5hbGxvYyg0KTsKLSAgICB2LndyaXRlSW50MzJCRShpdGVtKTsgLy8gaWYgaXRlbSBpcyBub3Qgd2l0aGluIGludDMyIGxpbWl0cyB3cml0ZUludDMyQkUgd2lsbCBlcnJvcgotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuSU5UKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgNCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgnKTsKLSAgICAgIH0KLSAgICAgIGxlbiArPSA0OwotCi0gICAgICBjb25zdCB2ID0gY3Vyc29yLnJlYWRJbnQzMkJFKCk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9MYW1iZGFTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9MYW1iZGFTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTJiN2VmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTGFtYmRhU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLWNvbnN0IHsgdmFsdWVLZXksIExhbWJkYVNlcmlhbGl6ZXI6IEdyYXBoc29uTGFtYmRhU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vdHlwZS1zZXJpYWxpemVycycpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIExhbWJkYVNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICAvLyB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuTEFNQkRBXSA9IHRoaXM7IC8vIGl0J3Mgbm90IGV4cGVjdGVkIHRvIGJlIGRlc2VyaWFsaXplZAotICAgIHRoaXMuZ3JhcGhzb25MYW1iZGFTZXJpYWxpemVyID0gbmV3IEdyYXBoc29uTGFtYmRhU2VyaWFsaXplcigpOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHRoaXMuZ3JhcGhzb25MYW1iZGFTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2YWx1ZSk7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5MQU1CREEsIDB4MDFdKTsKLSAgICAgIH0KLSAgICAgIGNvbnN0IGxhbmd1YWdlID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyAnJwotICAgICAgY29uc3Qgc2NyaXB0ID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyAnJwotICAgICAgY29uc3QgYXJndW1lbnRzX2xlbmd0aCA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gMAotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsuLi5sYW5ndWFnZSwgLi4uc2NyaXB0LCAuLi5hcmd1bWVudHNfbGVuZ3RoXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5MQU1CREEsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgY29uc3QgZ3JhcGhzb24gPSB0aGlzLmdyYXBoc29uTGFtYmRhU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSk7Ci0gICAgY29uc3QgbGFuZ3VhZ2UgPSBncmFwaHNvblt2YWx1ZUtleV0ubGFuZ3VhZ2U7Ci0gICAgY29uc3Qgc2NyaXB0ID0gZ3JhcGhzb25bdmFsdWVLZXldLnNjcmlwdDsKLSAgICBjb25zdCBhcmd1bWVudHNfID0gZ3JhcGhzb25bdmFsdWVLZXldWydhcmd1bWVudHMnXTsKLQotICAgIC8vIHtsYW5ndWFnZX0KLSAgICBidWZzLnB1c2godGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5zZXJpYWxpemUobGFuZ3VhZ2UsIGZhbHNlKSk7Ci0KLSAgICAvLyB7c2NyaXB0fQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShzY3JpcHQsIGZhbHNlKSk7Ci0KLSAgICAvLyB7YXJndW1lbnRzX2xlbmd0aH0KLSAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoYXJndW1lbnRzXywgZmFsc2UpKTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Mb25nU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTG9uZ1NlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZjQ1ZmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Mb25nU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgTG9uZ1NlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuTE9OR10gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKCkgewotICAgIC8vIGl0J3Mgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQsIHNlZSBOdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3kKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkxPTkcsIDB4MDFdKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuTE9ORywgMHgwMF0pKTsKLSAgICB9Ci0gICAgY29uc3QgdiA9IEJ1ZmZlci5hbGxvYyg4KTsKLSAgICB2LndyaXRlQmlnSW50NjRCRShCaWdJbnQoaXRlbSkpOwotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuTE9ORykgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDgpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7Ci0gICAgICB9Ci0gICAgICBsZW4gKz0gODsKLQotICAgICAgbGV0IHYgPSBjdXJzb3IucmVhZEJpZ0ludDY0QkUoKTsKLSAgICAgIGlmICh2IDwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgfHwgdiA+IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7Ci0gICAgICAgIC8vIFRPRE86IEl0IHRyaWVzIHRvIGtlZXAgdGhlIHNhbWUgY29udHJhY3QgYXMgR3JhcGhTT04gTG9uZ1NlcmlhbGl6ZXIgcHJvdmlkZXMuCi0gICAgICAgIC8vIElzIGl0IHN0aWxsIGFwcHJvcHJpYXRlIHRvIGRvIHNvPyBTaG91bGQgd2UgY29uc2lkZXIgTG9uZ1NlcmlhbGl6ZXJOZz8KLSAgICAgICAgdiA9IHBhcnNlRmxvYXQodi50b1N0cmluZygpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHYgPSBOdW1iZXIodik7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0xvbmdTZXJpYWxpemVyTmcuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0xvbmdTZXJpYWxpemVyTmcuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyM2ZlNWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Mb25nU2VyaWFsaXplck5nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLQotLy8gVE9ETzogaXQncyBiYXNlZCBvbiBCaWdJbnQgbmF0aXZlIEphdmFTY3JpcHQgdHlwZSB0byBjb21wbGV0ZWx5IHN1cHBvcnQKLS8vIDY0IGJpdHMgaW50ZWdlcnMsIGJ1dCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgR3JhcGhTT04KLS8vIGltcGxlbWVudGF0aW9uIHdlIGRvIG5vdCB1c2UgdGhpcyBmb3Igbm93LiBDb25zaWRlciBpdHMgcmVtb3ZhbC4KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgTG9uZ1NlcmlhbGl6ZXJOZyB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIC8vIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5MT05HXSA9IHRoaXM7IC8vIGRpc2FibGVkLCBzZWUgQW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZSgpCi0gIH0KLQotICBjYW5CZVVzZWRGb3IoKSB7Ci0gICAgLy8gaXQncyBub3QgZXhwZWN0ZWQgdG8gYmUgdXNlZAotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuTE9ORywgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5MT05HLCAweDAwXSkpOwotICAgIH0KLSAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDgpOwotICAgIHYud3JpdGVCaWdJbnQ2NEJFKEJpZ0ludChpdGVtKSk7Ci0gICAgYnVmcy5wdXNoKHYpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5MT05HKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgOCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgnKTsKLSAgICAgIH0KLSAgICAgIGxlbiArPSA4OwotCi0gICAgICBjb25zdCB2ID0gY3Vyc29yLnJlYWRCaWdJbnQ2NEJFKCk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9NYXBTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9NYXBTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmU5NTJjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTWFwU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgTWFwU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5NQVBdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuTUFQLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoMCwgZmFsc2UpOwotICAgIH0KLQotICAgIGNvbnN0IGlzTWFwID0gaXRlbSBpbnN0YW5jZW9mIE1hcDsKLQotICAgIGNvbnN0IGtleXMgPSBpc01hcCA/IEFycmF5LmZyb20oaXRlbS5rZXlzKCkpIDogT2JqZWN0LmtleXMoaXRlbSk7Ci0gICAgbGV0IG1hcF9sZW5ndGggPSBrZXlzLmxlbmd0aDsKLSAgICBpZiAobWFwX2xlbmd0aCA8IDApIHsKLSAgICAgIG1hcF9sZW5ndGggPSAwOwotICAgIH0gZWxzZSBpZiAobWFwX2xlbmd0aCA+IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuSU5UMzJfTUFYKSB7Ci0gICAgICBtYXBfbGVuZ3RoID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVg7IC8vIFRPRE86IGlzIGl0IGV4cGVjdGVkIHRvIGJlIHNpbGVuY2VkPyBvciBpdCdzIGJldHRlciB0byBlcnJvciBpbnN0ZWFkPwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuTUFQLCAweDAwXSkpOwotICAgIH0KLSAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUobWFwX2xlbmd0aCwgZmFsc2UpKTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcF9sZW5ndGg7IGkrKykgewotICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTsKLSAgICAgIGNvbnN0IHZhbHVlID0gaXNNYXAgPyBpdGVtLmdldChrZXkpIDogaXRlbVtrZXldOwotICAgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSksIHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKSk7Ci0gICAgfQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuTUFQKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGxldCBsZW5ndGgsIGxlbmd0aF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBsZW5ndGgsIGxlbjogbGVuZ3RoX2xlbiB9ID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBsZW5ndGhfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tsZW5ndGh9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGlmIChsZW5ndGggPCAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigne2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8nKTsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsZW5ndGhfbGVuKTsKLQotICAgICAgY29uc3QgdiA9IG5ldyBNYXAoKTsKLSAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbGV0IGtleSwga2V5X2xlbjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAoeyB2OiBrZXksIGxlbjoga2V5X2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgICBsZW4gKz0ga2V5X2xlbjsKLSAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge2l0ZW1fJHtpfX0ga2V5OiBgICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgICAgdGhyb3cgZXJyOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShrZXlfbGVuKTsKLQotICAgICAgICBsZXQgdmFsdWUsIHZhbHVlX2xlbjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZV9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgICAgbGVuICs9IHZhbHVlX2xlbjsKLSAgICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgICAgZXJyLm1lc3NhZ2UgPSBge2l0ZW1fJHtpfX0gdmFsdWU6IGAgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7Ci0KLSAgICAgICAgdi5zZXQoa2V5LCB2YWx1ZSk7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL051bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneS5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZlOWQyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotLy8gQmFzZWQgb24gR3JhcGhTT04gTnVtYmVyU2VyaWFsaXplci5zZXJpYWxpemUoKS4KLS8vIEl0J3MgdGVzdGVkIGJ5IEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMuCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIE51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneSB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCB2YWx1ZSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50JykgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHsKLSAgICAgIGlmICgKLSAgICAgICAgTnVtYmVyLmlzTmFOKGl0ZW0pIHx8Ci0gICAgICAgIGl0ZW0gPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fAotICAgICAgICBpdGVtID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgfHwKLSAgICAgICAgIU51bWJlci5pc0ludGVnZXIoaXRlbSkKLSAgICAgICkgewotICAgICAgICByZXR1cm4gdGhpcy5pb2MuZG91YmxlU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOwotICAgICAgfQotCi0gICAgICBpZiAoaXRlbSA+PSAtMjE0NzQ4MzY0OCAmJiBpdGVtIDw9IDIxNDc0ODM2NDcpIHsKLSAgICAgICAgLy8gSU5UMzJfTUlOL01BWAotICAgICAgICByZXR1cm4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOwotICAgICAgfQotICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvc3Mtb2YtcHJlY2lzaW9uCi0gICAgICBpZiAoaXRlbSA+PSAtOTIyMzM3MjAzNjg1NDc3NTgwOCAmJiBpdGVtIDwgOTIyMzM3MjAzNjg1NDc3NTgwNykgewotICAgICAgICAvLyBJTlQ2NF9NSU4vTUFYCi0gICAgICAgIHJldHVybiB0aGlzLmlvYy5sb25nU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuaW9jLmRvdWJsZVNlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0KTsKLSAgICB9Ci0KLSAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdiaWdpbnQnKSB7Ci0gICAgICByZXR1cm4gdGhpcy5pb2MuYmlnSW50ZWdlclNlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL09mZnNldERhdGVUaW1lU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDA0NWZmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIE9mZnNldERhdGVUaW1lU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYywgSUQpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLklEID0gSUQ7Ci0gICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbSURdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLklELCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgLy8gTk9URToganMgRGF0ZSB3aWxsIGFsd2F5cyBkaXNwbGF5IHRpbWUgaW4gVVRDLCBidXQgcmVndWxhciBkYXRlL2hvdXIgZ2V0dGVycyB3aWxsIHJldHVybiBpbiBsb2NhbCBzeXN0ZW0gdGltZS4KLSAgICAvLyBUbyBhdm9pZCBpbmNvbnNpc3RlbmN5IHdlIHdpbGwgYWx3YXlzIHNlcmlhbGl6ZSB0aGUgVVRDIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEYXRlIG9iamVjdCB3aXRoIG9mZnNldCBvZiAwLgotCi0gICAgLy8ge3llYXJ9Ci0gICAgbGV0IHYgPSBCdWZmZXIuYWxsb2MoNCk7Ci0gICAgdi53cml0ZUludDMyQkUoaXRlbS5nZXRVVENGdWxsWWVhcigpKTsKLSAgICBidWZzLnB1c2godik7Ci0KLSAgICAvLyB7bW9udGh9Ci0gICAgdiA9IEJ1ZmZlci5hbGxvYygxKTsKLSAgICB2LndyaXRlVUludDgoaXRlbS5nZXRVVENNb250aCgpICsgMSk7IC8vIEphdmEgQ29yZSBEYXRlVGltZSBzZXJpYWxpemVyIHVzZXMgMSAtIDEyIGZvciBtb250aHMsIEpTIHVzZXMgaW5kaWNlcwotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIC8vIHtkYXl9IC0gaW4gVVRDCi0gICAgdiA9IEJ1ZmZlci5hbGxvYygxKTsKLSAgICB2LndyaXRlVUludDgoaXRlbS5nZXRVVENEYXRlKCkpOwotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIC8vIHtuYW5vc2Vjb25kc30KLSAgICBjb25zdCBoID0gaXRlbS5nZXRVVENIb3VycygpOyAvLyBpbiBVVEMKLSAgICBjb25zdCBtID0gaXRlbS5nZXRVVENNaW51dGVzKCk7Ci0gICAgY29uc3QgcyA9IGl0ZW0uZ2V0VVRDU2Vjb25kcygpOwotICAgIGNvbnN0IG1zID0gaXRlbS5nZXRVVENNaWxsaXNlY29uZHMoKTsKLSAgICBjb25zdCBucyA9IGggKiA2MCAqIDYwICogMWU5ICsgbSAqIDYwICogMWU5ICsgcyAqIDFlOSArIG1zICogMWU2OwotICAgIHYgPSBCdWZmZXIuYWxsb2MoOCk7Ci0gICAgdi53cml0ZUJpZ0ludDY0QkUoQmlnSW50KG5zKSk7Ci0gICAgYnVmcy5wdXNoKHYpOwotCi0gICAgLy8ge3pvbmUgb2Zmc2V0fSAtIFVUQyBpcyBhbHdheXMgdXNlZCBmb3Igc2VyaWFsaXphdGlvbiwgYXMgc3VjaCBvZmZzZXQgd2lsbCBiZSAwCi0gICAgdiA9IEJ1ZmZlci5hbGxvYyg0KTsKLSAgICB2LndyaXRlSW50MzJCRSgwKTsKLSAgICBidWZzLnB1c2godik7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuSUQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0KLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCA4KSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOwotICAgICAgfQotICAgICAgbGVuICs9IDE4OwotCi0gICAgICBjb25zdCB5ZWFyID0gY3Vyc29yLnJlYWRJbnQzMkJFKCk7Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoNCk7Ci0gICAgICBjb25zdCBtb250aCA9IGN1cnNvci5yZWFkVUludDgoKSAtIDE7Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICBjb25zdCBkYXRlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgY29uc3QgbnMgPSBjdXJzb3IucmVhZEJpZ0ludDY0QkUoKTsKLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSg4KTsKLSAgICAgIGNvbnN0IG9mZnNldCA9IGN1cnNvci5yZWFkSW50MzJCRSgpOwotICAgICAgY3Vyc29yLnNsaWNlKDQpOwotCi0gICAgICAvLyBjYWxjdWxhdGUgaG91ciwgbWludXRlLCBzZWNvbmQsIGFuZCBtcyBmcm9tIG5zIGFzIEpTIERhdGUgZG9lc24ndCBoYXZlIG5zIHByZWNpc2lvbgotICAgICAgY29uc3QgdG90YWxNUyA9IG5zIC8gQmlnSW50KDFlNik7Ci0gICAgICBjb25zdCBtcyA9IE51bWJlcih0b3RhbE1TKSAlIDFlMzsKLSAgICAgIGNvbnN0IHRvdGFsUyA9IE1hdGgudHJ1bmMoTnVtYmVyKHRvdGFsTVMpIC8gMWUzKSAtIG9mZnNldDsgLy8ganMgRGF0ZSBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gc2V0IG9mZnNldCBwcm9wZXJseSwgYWNjb3VudCBvZmZzZXQgaGVyZSB0byB1c2UgVVRDCi0gICAgICBjb25zdCBzID0gdG90YWxTICUgNjA7Ci0gICAgICBjb25zdCB0b3RhbE0gPSBNYXRoLnRydW5jKHRvdGFsUyAvIDYwKTsKLSAgICAgIGNvbnN0IG0gPSB0b3RhbE0gJSA2MDsKLSAgICAgIGNvbnN0IGggPSBNYXRoLnRydW5jKHRvdGFsTSAvIDYwKTsKLQotICAgICAgLy8gdXNlIFVUQyB0aW1lIGNhbGN1bGF0ZWQgd2l0aCBvZmZzZXQgYWJvdmUKLSAgICAgIGNvbnN0IHYgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF0ZSwgaCwgbSwgcywgbXMpKTsKLQotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvUFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1BTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDZmMDM0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvUFNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3Byb2Nlc3MvdHJhdmVyc2FsJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgUFNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuUF0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgdC5QOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuUCwgMHgwMV0pOwotICAgICAgfQotICAgICAgY29uc3QgbmFtZSA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gJycKLSAgICAgIGNvbnN0IHZhbHVlc19sZW5ndGggPSBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vIDAKLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbLi4ubmFtZSwgLi4udmFsdWVzX2xlbmd0aF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuUCwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICAvLyB7bmFtZX0KLSAgICBidWZzLnB1c2godGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5vcGVyYXRvciwgZmFsc2UpKTsKLQotICAgIC8vIHt2YWx1ZXNfbGVuZ3RofXt2YWx1ZV8wfS4uLnt2YWx1ZV9ufQotICAgIC8vCi0gICAgLy8gVGhpcyBpcyBhIHRyaWNreSBwYXJ0IGR1ZSB0byB0aGUgbmF0dXJlIG9mIHQuUC4KLSAgICAvLyBHcmFwaEJpbmFyeSBzdGF0ZXMgdGhhdCB7bmFtZX0gaXMgZm9sbG93ZWQgYnkgbGlzdCBvbmx5LAotICAgIC8vIGJ1dCB0LlAgbWF5IGJlIGNvbnN0cnVjdGVkIHN1Y2ggd2F5IHRoYXQgaXRzIGl0ZW0udmFsdWUgY2FuIGJlCi0gICAgLy8gYSB1c3VhbCBzdHJpbmcgb3Igc29tZXRoaW5nLCB0aGF0J3Mgd2h5IHdlIHNob3VsZCBjYXJlIGhlcmUKLSAgICAvLyB0byBnZXQgaXQgd3JhcHBlZCBpbnRvIGEgbGlzdC4KLSAgICAvLwotICAgIC8vIEl0IHRyaWVzIHRvIHJlc2VtYmxlIHRoZSBzYW1lIGlmLWVsc2Ugc3RydWN0dXJlIGFzCi0gICAgLy8gR3JhcGhTT04uUFNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgZG9lcy4KLSAgICBsZXQgbGlzdDsKLSAgICBpZiAoaXRlbS5vdGhlciA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0ub3RoZXIgPT09IG51bGwpIHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0udmFsdWUpKSB7Ci0gICAgICAgIGxpc3QgPSBpdGVtLnZhbHVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGlzdCA9IFtpdGVtLnZhbHVlXTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgbGlzdCA9IFtpdGVtLnZhbHVlLCBpdGVtLm90aGVyXTsKLSAgICB9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShsaXN0LCBmYWxzZSkpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5QKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGxldCBuYW1lLCBuYW1lX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IG5hbWUsIGxlbjogbmFtZV9sZW4gfSA9IHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOwotICAgICAgICBsZW4gKz0gbmFtZV9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne25hbWV9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShuYW1lX2xlbik7Ci0KLSAgICAgIGxldCB2YWx1ZXMsIHZhbHVlc19sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiB2YWx1ZXMsIGxlbjogdmFsdWVzX2xlbiB9ID0gdGhpcy5pb2MubGlzdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOwotICAgICAgICBsZW4gKz0gdmFsdWVzX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7dmFsdWVzfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UodmFsdWVzX2xlbik7Ci0KLSAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwgMSkgewotICAgICAgICByZXR1cm4geyB2OiBuZXcgdC5QKCcnKSwgbGVuIH07Ci0gICAgICB9Ci0KLSAgICAgIGxldCB2OwotICAgICAgY29uc3QgUF9zdGF0aWMgPSB0LlBbbmFtZV07Ci0gICAgICBpZiAodHlwZW9mIFBfc3RhdGljID09PSAnZnVuY3Rpb24nKSB7Ci0gICAgICAgIHYgPSBQX3N0YXRpYyguLi52YWx1ZXMpOyAvLyBpdCdzIGJldHRlciB0byBmb2xsb3cgZXhpc3RpbmcgbG9naWMgd2hpY2ggbWF5IGRlcGVuZCBvbiBhbiBvcGVyYXRvciBuYW1lCi0gICAgICB9IGVsc2UgewotICAgICAgICB2ID0gbmV3IHQuUChuYW1lLCAuLi52YWx1ZXMpOwotICAgICAgfQotCi0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9QYXRoU2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvUGF0aFNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiM2FlZmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9QYXRoU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci1jb25zdCBnID0gcmVxdWlyZSgnLi4vLi4vLi4vZ3JhcGgnKTsKLQotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQYXRoU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5QQVRIXSA9IHRoaXM7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBnLlBhdGg7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5QQVRILCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbCi0gICAgICAgIHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShbXSksIC8vIHtsYWJlbHN9PVtdCi0gICAgICAgIHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShbXSksIC8vIHtvYmplY3RzfT1bXQotICAgICAgXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5QQVRILCAweDAwXSkpOwotICAgIH0KLQotICAgIC8vIHtsYWJlbHN9IGlzIGEgTGlzdCBpbiB3aGljaCBlYWNoIGl0ZW0gaXMgYSBTZXQgb2YgU3RyaW5nCi0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLmxhYmVscykpOwotCi0gICAgLy8ge29iamVjdHN9IGlzIGEgTGlzdCBvZiBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWVzCi0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLm9iamVjdHMpKTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuUEFUSCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBsZXQgbGFiZWxzLCBsYWJlbHNfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogbGFiZWxzLCBsZW46IGxhYmVsc19sZW4gfSA9IHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOwotICAgICAgICBsZW4gKz0gbGFiZWxzX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGFiZWxzfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICAvLyBUT0RPOiBzaG91bGQgd2UgY2hlY2sgY29udGVudCBvZiBsYWJlbHMgdG8gbWFrZSBzdXJlIGl0J3MgTGlzdDwgU2V0PFN0cmluZz4gPiA/Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGFiZWxzX2xlbik7Ci0KLSAgICAgIGxldCBvYmplY3RzLCBvYmplY3RzX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IG9iamVjdHMsIGxlbjogb2JqZWN0c19sZW4gfSA9IHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOwotICAgICAgICBsZW4gKz0gb2JqZWN0c19sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne29iamVjdHN9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShvYmplY3RzX2xlbik7Ci0KLSAgICAgIGNvbnN0IHYgPSBuZXcgZy5QYXRoKGxhYmVscywgb2JqZWN0cyk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Qcm9wZXJ0eVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Byb3BlcnR5U2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTczOGQ4NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Byb3BlcnR5U2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci1jb25zdCBnID0gcmVxdWlyZSgnLi4vLi4vLi4vZ3JhcGgnKTsKLQotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQcm9wZXJ0eVNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuUFJPUEVSVFldID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGcuUHJvcGVydHk7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5QUk9QRVJUWSwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoWwotICAgICAgICB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZSgnJywgZmFsc2UpLCAvLyB7a2V5fT0nJwotICAgICAgICB0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSwgLy8ge3ZhbHVlfT1udWxsCi0gICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7cGFyZW50fT1udWxsCi0gICAgICBdKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlBST1BFUlRZLCAweDAwXSkpOwotICAgIH0KLQotICAgIC8vIHtrZXl9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0ua2V5LCBmYWxzZSkpOwotCi0gICAgLy8ge3ZhbHVlfQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5hbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLnZhbHVlKSk7Ci0KLSAgICAvLyB7cGFyZW50fQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSk7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlBST1BFUlRZKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIHtrZXl9IGlzIGEgU3RyaW5nIHZhbHVlCi0gICAgICBsZXQga2V5LCBrZXlfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjoga2V5LCBsZW46IGtleV9sZW4gfSA9IHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOwotICAgICAgICBsZW4gKz0ga2V5X2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7a2V5fTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2Uoa2V5X2xlbik7Ci0KLSAgICAgIC8vIHt2YWx1ZX0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0KLSAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogdmFsdWUsIGxlbjogdmFsdWVfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOwotICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3t2YWx1ZX06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7Ci0KLSAgICAgIC8vIHtwYXJlbnR9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9IHdoaWNoIGlzIGVpdGhlciBhbiBFZGdlIG9yIFZlcnRleFByb3BlcnR5LgotICAgICAgLy8gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZHMgInJlZmVyZW5jZXMiIG9ubHkgdGhpcyB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBudWxsLgotICAgICAgbGV0IHBhcmVudF9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyBsZW46IHBhcmVudF9sZW4gfSA9IHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgIGxlbiArPSBwYXJlbnRfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3twYXJlbnR9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSB2ZXJpZnkgdGhhdCBwYXJlbnQgaXMgbnVsbD8KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwYXJlbnRfbGVuKTsKLQotICAgICAgY29uc3QgdiA9IG5ldyBnLlByb3BlcnR5KGtleSwgdmFsdWUpOwotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvU2V0U2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvU2V0U2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FlNTE4YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1NldFNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTZXRTZXJpYWxpemVyIHsKLSAgY29uc3RydWN0b3IoaW9jLCBJRCkgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuSUQgPSBJRDsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tJRF0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2V0OwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7IC8vIHtsZW5ndGh9ID0gMAotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICAvLyB7bGVuZ3RofQotICAgIGxldCBsZW5ndGggPSBpdGVtLnNpemU7Ci0gICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgIGxlbmd0aCA9IDA7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPiB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLklOVDMyX01BWCkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZXQgbGVuZ3RoPSR7bGVuZ3RofSBpcyBncmVhdGVyIHRoYW4gc3VwcG9ydGVkIG1heF9sZW5ndGg9JHt0aGlzLmlvYy5pbnRTZXJpYWxpemVyLklOVDMyX01BWH0uYCk7Ci0gICAgfQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5pbnRTZXJpYWxpemVyLnNlcmlhbGl6ZShsZW5ndGgsIGZhbHNlKSk7Ci0KLSAgICAvLyB7aXRlbV8wfS4uLntpdGVtX259Ci0gICAgZm9yIChjb25zdCBpIG9mIGl0ZW0pIHsKLSAgICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5hbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlQ29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlQ29kZSAhPT0gdGhpcy5JRCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVGbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlRmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZUZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBsZXQgbGVuZ3RoLCBsZW5ndGhMZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBsZW5ndGgsIGxlbjogbGVuZ3RoTGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IGxlbmd0aExlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGVuZ3RofTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3tsZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvJyk7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuZ3RoTGVuKTsKLQotICAgICAgY29uc3QgdiA9IG5ldyBTZXQoKTsKLSAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbGV0IHZhbHVlLCB2YWx1ZUxlbjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZUxlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgICBsZW4gKz0gdmFsdWVMZW47Ci0gICAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICAgIGVyci5tZXNzYWdlID0gYHtpdGVtXyR7aX19OiBgICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgICAgdGhyb3cgZXJyOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSh2YWx1ZUxlbik7Ci0gICAgICAgIHYuYWRkKHZhbHVlKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvU2hvcnRTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TaG9ydFNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZGRhMmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TaG9ydFNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFNob3J0U2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5TSE9SVF0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgLy8gaXQncyBub3QgZXhwZWN0ZWQgdG8gYmUgdXNlZCBkdXJpbmcgc2VyaWFsaXphdGlvbgotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuU0hPUlQsIDB4MDFdKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuU0hPUlQsIDB4MDBdKSk7Ci0gICAgfQotICAgIGNvbnN0IHYgPSBCdWZmZXIuYWxsb2MoMik7Ci0gICAgdi53cml0ZUludDE2QkUoaXRlbSk7IC8vIFRPRE86IHdoYXQgaWYgaXRlbSBpcyBub3Qgd2l0aGluIGludDE2IGxpbWl0cywgZm9yIG5vdyB3cml0ZUludDE2QkUgd291bGQgZXJyb3IKLSAgICBidWZzLnB1c2godik7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlNIT1JUKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotCi0gICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgICAgfQotICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKLSAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKLSAgICAgICAgfQotICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMikgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgnKTsKLSAgICAgIH0KLSAgICAgIGxlbiArPSAyOwotCi0gICAgICBjb25zdCB2ID0gY3Vyc29yLnJlYWRJbnQxNkJFKCk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TdHJpbmdTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TdHJpbmdTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2VhMDZkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvU3RyaW5nU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgU3RyaW5nU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYywgSUQpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLklEID0gSUQ7Ci0gICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbSURdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnOwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKDAsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDBdKSk7Ci0gICAgfQotICAgIGNvbnN0IHYgPSBCdWZmZXIuZnJvbShTdHJpbmcoaXRlbSksICd1dGY4Jyk7Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYubGVuZ3RoLCBmYWxzZSkpOyAvLyBUT0RPOiB3aGF0IGlmIGxlbiA+IElOVDMyX01BWCwgZm9yIG5vdyBpdCdzIGJhY2tlZCBieSBsb2dpYyBvZiBJbnRTZXJpYWxpemVyLnNlcmlhbGl6ZSBpdHNlbGYKLSAgICBidWZzLnB1c2godik7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlLCBudWxsYWJsZSA9IGZhbHNlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuSUQpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgICAgfQotICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQgfHwgbnVsbGFibGUpIHsKLSAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOwotICAgICAgICB9Ci0gICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgewotICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLQotICAgICAgbGV0IGxlbmd0aCwgbGVuZ3RoX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGxlbmd0aCwgbGVuOiBsZW5ndGhfbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IGxlbmd0aF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xlbmd0aH06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVybycpOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxlbmd0aF9sZW4pOwotCi0gICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IGxlbmd0aCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3RleHRfdmFsdWV9IGxlbmd0aCcpOwotICAgICAgfQotICAgICAgbGVuICs9IGxlbmd0aDsKLQotICAgICAgY29uc3QgdiA9IGN1cnNvci50b1N0cmluZygndXRmOCcsIDAsIGxlbmd0aCk7Ci0gICAgICByZXR1cm4geyB2LCBsZW4gfTsKLSAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7Ci0gICAgfQotICB9Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9UZXh0UFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1RleHRQU2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4YzFhYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1RleHRQU2VyaWFsaXplci5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBUZXh0UFNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuVEVYVFBdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIHQuVGV4dFA7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5URVhUUCwgMHgwMV0pOwotICAgICAgfQotICAgICAgY29uc3QgbmFtZSA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gJycKLSAgICAgIGNvbnN0IHZhbHVlc19sZW5ndGggPSBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vIDAKLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbLi4ubmFtZSwgLi4udmFsdWVzX2xlbmd0aF0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuVEVYVFAsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgLy8ge25hbWV9IGlzIGEgU3RyaW5nCi0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0ub3BlcmF0b3IsIGZhbHNlKSk7Ci0KLSAgICAvLyB7dmFsdWVzX2xlbmd0aH17dmFsdWVfMH0uLi57dmFsdWVfbn0KLSAgICAvLyBJdCB0cmllcyB0byByZXNlbWJsZSB0aGUgc2FtZSBpZi1lbHNlIHN0cnVjdHVyZSBhcwotICAgIC8vIEdyYXBoU09OLlRleHRQU2VyaWFsaXplci5zZXJpYWxpemUoKSBkb2VzLgotICAgIGxldCBsaXN0OwotICAgIGlmIChpdGVtLm90aGVyID09PSB1bmRlZmluZWQgfHwgaXRlbS5vdGhlciA9PT0gbnVsbCkgewotICAgICAgLy8gZm9sbG93cyB0aGUgc2FtZSBpZGVhIGFzIGZvciB0LlAKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW0udmFsdWUpKSB7Ci0gICAgICAgIGxpc3QgPSBpdGVtLnZhbHVlOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGlzdCA9IFtpdGVtLnZhbHVlXTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgbGlzdCA9IFtpdGVtLnZhbHVlLCBpdGVtLm90aGVyXTsKLSAgICB9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShsaXN0LCBmYWxzZSkpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5URVhUUCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBsZXQgbmFtZSwgbmFtZV9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBuYW1lLCBsZW46IG5hbWVfbGVuIH0gPSB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IG5hbWVfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3tuYW1lfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobmFtZV9sZW4pOwotCi0gICAgICBsZXQgdmFsdWVzLCB2YWx1ZXNfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogdmFsdWVzLCBsZW46IHZhbHVlc19sZW4gfSA9IHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKLSAgICAgICAgbGVuICs9IHZhbHVlc19sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne3ZhbHVlc306ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlc19sZW4pOwotCi0gICAgICBpZiAodmFsdWVzLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgcmV0dXJuIHsgdjogbmV3IHQuVGV4dFAoJycpLCBsZW4gfTsKLSAgICAgIH0KLQotICAgICAgbGV0IHY7Ci0gICAgICBjb25zdCBUZXh0UF9zdGF0aWMgPSB0LlRleHRQW25hbWVdOwotICAgICAgaWYgKHR5cGVvZiBUZXh0UF9zdGF0aWMgPT09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgdiA9IFRleHRQX3N0YXRpYyguLi52YWx1ZXMpOyAvLyBpdCdzIGJldHRlciB0byBmb2xsb3cgZXhpc3RpbmcgbG9naWMgd2hpY2ggbWF5IGRlcGVuZCBvbiBhbiBvcGVyYXRvciBuYW1lCi0gICAgICB9IGVsc2UgewotICAgICAgICB2ID0gbmV3IHQuVGV4dFAobmFtZSwgLi4udmFsdWVzKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYTc5YzUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB7IEJ1ZmZlciB9ID0gcmVxdWlyZSgnYnVmZmVyJyk7Ci0KLWNvbnN0IHsgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyOiBHcmFwaHNvblRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vdHlwZS1zZXJpYWxpemVycycpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuZ3JhcGhzb25UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhzb25UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIoKTsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB0aGlzLmdyYXBoc29uVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2YWx1ZSk7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5UUkFWRVJTQUxTVFJBVEVHWSwgMHgwMV0pOwotICAgICAgfQotICAgICAgY29uc3Qgc3RyYXRlZ3lfY2xhc3MgPSBbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF07IC8vICcnCi0gICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyB7fQotICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsuLi5zdHJhdGVneV9jbGFzcywgLi4uY29uZmlndXJhdGlvbl0pOwotICAgIH0KLQotICAgIGNvbnN0IGJ1ZnMgPSBbXTsKLSAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuVFJBVkVSU0FMU1RSQVRFR1ksIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgY29uc3QgY29uZiA9IHt9OwotICAgIGZvciAoY29uc3QgayBpbiBpdGVtLmNvbmZpZ3VyYXRpb24pIHsKLSAgICAgIGlmIChpdGVtLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoaykpIHsKLSAgICAgICAgY29uZltrXSA9IGl0ZW0uY29uZmlndXJhdGlvbltrXTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB7c3RyYXRlZ3lfY2xhc3N9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmNsYXNzU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5jb25zdHJ1Y3RvciwgZmFsc2UpKTsKLQotICAgIC8vIHtjb25maWd1cmF0aW9ufQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5tYXBTZXJpYWxpemVyLnNlcmlhbGl6ZShjb25mLCBmYWxzZSkpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1RyYXZlcnNlclNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1RyYXZlcnNlclNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMTU1NTMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9UcmF2ZXJzZXJTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFRyYXZlcnNlclNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuVFJBVkVSU0VSXSA9IHRoaXM7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiB0LlRyYXZlcnNlcjsKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlRSQVZFUlNFUiwgMHgwMV0pOwotICAgICAgfQotICAgICAgY29uc3QgYnVsayA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXTsgLy8gMQotICAgICAgY29uc3QgdmFsdWUgPSBbMHhmZSwgMHgwMV07IC8vIG51bGwKLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbLi4uYnVsaywgLi4udmFsdWVdKTsKLSAgICB9Ci0KLSAgICBjb25zdCBidWZzID0gW107Ci0gICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlRSQVZFUlNFUiwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICAvLyB7YnVsa30KLSAgICBidWZzLnB1c2godGhpcy5pb2MubG9uZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0uYnVsaywgZmFsc2UpKTsKLSAgICAvLyB7dmFsdWV9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0ub2JqZWN0KSk7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlRSQVZFUlNFUikgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBsZXQgYnVsaywgYnVsa19sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiBidWxrLCBsZW46IGJ1bGtfbGVuIH0gPSB0aGlzLmlvYy5sb25nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBidWxrX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7YnVsa306ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgaWYgKGJ1bGsgPCAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigne2J1bGt9IGlzIGxlc3MgdGhhbiB6ZXJvJyk7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoYnVsa19sZW4pOwotCi0gICAgICBsZXQgdmFsdWUsIHZhbHVlX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IHZhbHVlLCBsZW46IHZhbHVlX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IHZhbHVlX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7dmFsdWV9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSh2YWx1ZV9sZW4pOwotCi0gICAgICBjb25zdCB2ID0gbmV3IHQuVHJhdmVyc2VyKHZhbHVlLCBidWxrKTsKLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Vuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Vuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYTFmYzcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9VbnNwZWNpZmllZE51bGxTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3Rvcihpb2MpIHsKLSAgICB0aGlzLmlvYyA9IGlvYzsKLSAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuVU5TUEVDSUZJRURfTlVMTF0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSkgewotICAgIC8vIGZ1bGx5UXVhbGlmaWVkRm9ybWF0IGFsd2F5cyBpcyB0cnVlCi0gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5VTlNQRUNJRklFRF9OVUxMLCAweDAxXSk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIpIHsKLSAgICAvLyBmdWxseVF1YWxpZmllZEZvcm1hdCBhbHdheXMgaXMgdHJ1ZQotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgIGxlbisrOwotICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuVU5TUEVDSUZJRURfTlVMTCkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICBsZW4rKzsKLSAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVXVpZFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1V1aWRTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjA1MGRlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVXVpZFNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFV1aWRTZXJpYWxpemVyIHsKLSAgY29uc3RydWN0b3IoaW9jKSB7Ci0gICAgdGhpcy5pb2MgPSBpb2M7Ci0gICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLlVVSURdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIC8vIFRPRE86IGFueSBpZGVhIHRvIHN1cHBvcnQgVVVJRCBhdXRvbWF0aWMgc2VyaWFsaXphdGlvbiB2aWEgQW55U2VyaWFsaXplciBpbiBmdXR1cmU/Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7Ci0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5VVUlELCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmZyb20oWwotICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgICAgXSk7Ci0gICAgfQotCi0gICAgY29uc3QgdXVpZF9zdHIgPSBTdHJpbmcoaXRlbSkKLSAgICAgIC5yZXBsYWNlKC9edXJuOnV1aWQ6LywgJycpCi0gICAgICAucmVwbGFjZSgvW3t9LV0vZywgJycpOwotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5VVUlELCAweDAwXSkpOwotICAgIH0KLQotICAgIGNvbnN0IHYgPSBCdWZmZXIuYWxsb2MoMTYsIDApOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTYgJiYgaSAqIDIgPCB1dWlkX3N0ci5sZW5ndGg7IGkrKykgewotICAgICAgdltpXSA9IHBhcnNlSW50KHV1aWRfc3RyLnNsaWNlKGkgKiAyLCBpICogMiArIDIpLCAxNik7Ci0gICAgfQotICAgIGJ1ZnMucHVzaCh2KTsKLQotICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUsIG51bGxhYmxlID0gZmFsc2UpIHsKLSAgICBsZXQgbGVuID0gMDsKLSAgICBsZXQgY3Vyc29yID0gYnVmZmVyOwotCi0gICAgdHJ5IHsKLSAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKLSAgICAgIH0KLSAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOwotICAgICAgfQotCi0gICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKLSAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOwotICAgICAgICBsZW4rKzsKLSAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuVVVJRCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLSAgICAgIH0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCB8fCBudWxsYWJsZSkgewotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDE2KSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOwotICAgICAgfQotICAgICAgbGVuICs9IDE2OwotCi0gICAgICAvLyBFeGFtcGxlOiAyMDc1Mjc4RC1GNjI0LTRCMkItOTYwRC0yNUQzNzRENTdDMDQKLSAgICAgIGNvbnN0IHYgPQotICAgICAgICBjdXJzb3Iuc2xpY2UoMCwgNCkudG9TdHJpbmcoJ2hleCcpICsKLSAgICAgICAgJy0nICsKLSAgICAgICAgY3Vyc29yLnNsaWNlKDQsIDYpLnRvU3RyaW5nKCdoZXgnKSArCi0gICAgICAgICctJyArCi0gICAgICAgIGN1cnNvci5zbGljZSg2LCA4KS50b1N0cmluZygnaGV4JykgKwotICAgICAgICAnLScgKwotICAgICAgICBjdXJzb3Iuc2xpY2UoOCwgMTApLnRvU3RyaW5nKCdoZXgnKSArCi0gICAgICAgICctJyArCi0gICAgICAgIGN1cnNvci5zbGljZSgxMCwgMTYpLnRvU3RyaW5nKCdoZXgnKTsKLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTdjMGFiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgQnVmZmVyIH0gPSByZXF1aXJlKCdidWZmZXInKTsKLWNvbnN0IGcgPSByZXF1aXJlKCcuLi8uLi8uLi9ncmFwaCcpOwotCi1tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFZlcnRleFByb3BlcnR5U2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5WRVJURVhQUk9QRVJUWV0gPSB0aGlzOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgZy5WZXJ0ZXhQcm9wZXJ0eTsKLSAgfQotCi0gIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKLSAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlZFUlRFWFBST1BFUlRZLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbCi0gICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7aWR9PW51bGwKLSAgICAgICAgdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5zZXJpYWxpemUoJycsIGZhbHNlKSwgLy8ge2xhYmVsfT0nJwotICAgICAgICB0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSwgLy8ge3ZhbHVlfT1udWxsCi0gICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7cGFyZW50fT1udWxsCi0gICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7cHJvcGVydGllc309bnVsbAotICAgICAgXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5WRVJURVhQUk9QRVJUWSwgMHgwMF0pKTsKLSAgICB9Ci0KLSAgICAvLyB7aWR9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0uaWQpKTsKLQotICAgIC8vIHtsYWJlbH0KLSAgICBidWZzLnB1c2godGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5sYWJlbCwgZmFsc2UpKTsKLQotICAgIC8vIHt2YWx1ZX0KLSAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS52YWx1ZSkpOwotCi0gICAgLy8ge3BhcmVudH0KLSAgICBidWZzLnB1c2godGhpcy5pb2MudW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci5zZXJpYWxpemUobnVsbCkpOwotCi0gICAgLy8ge3Byb3BlcnRpZXN9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0ucHJvcGVydGllcykpOwotCi0gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGxldCBsZW4gPSAwOwotICAgIGxldCBjdXJzb3IgPSBidWZmZXI7Ci0KLSAgICB0cnkgewotICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOwotICAgICAgfQotICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7Ci0gICAgICAgIGxlbisrOwotICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5WRVJURVhQUk9QRVJUWSkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICAvLyB7aWR9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9Ci0gICAgICBsZXQgaWQsIGlkX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGlkLCBsZW46IGlkX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IGlkX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7aWR9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShpZF9sZW4pOwotCi0gICAgICAvLyB7bGFiZWx9IGlzIGEgU3RyaW5nIHZhbHVlCi0gICAgICBsZXQgbGFiZWwsIGxhYmVsX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGxhYmVsLCBsZW46IGxhYmVsX2xlbiB9ID0gdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBsYWJlbF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xhYmVsfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGFiZWxfbGVuKTsKLQotICAgICAgLy8ge3ZhbHVlfSBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfQotICAgICAgbGV0IHZhbHVlLCB2YWx1ZV9sZW47Ci0gICAgICB0cnkgewotICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZV9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7Ci0gICAgICAgIGxlbiArPSB2YWx1ZV9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne3ZhbHVlfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UodmFsdWVfbGVuKTsKLQotICAgICAgLy8ge3BhcmVudH0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0gd2hpY2ggY29udGFpbnMgdGhlIHBhcmVudCBWZXJ0ZXguCi0gICAgICAvLyBOb3RlIHRoYXQgYXMgVGlua2VyUG9wIGN1cnJlbnRseSBzZW5kICJyZWZlcmVuY2VzIiBvbmx5LCB0aGlzIHZhbHVlIHdpbGwgYWx3YXlzIGJlIG51bGwuCi0gICAgICBsZXQgcGFyZW50X2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IGxlbjogcGFyZW50X2xlbiB9ID0gdGhpcy5pb2MudW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IHBhcmVudF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne3BhcmVudH06ICcgKyBlcnIubWVzc2FnZTsKLSAgICAgICAgdGhyb3cgZXJyOwotICAgICAgfQotICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIHZlcmlmeSB0aGF0IHBhcmVudCBpcyBudWxsPwotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHBhcmVudF9sZW4pOwotCi0gICAgICAvLyB7cHJvcGVydGllc30gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0gd2hpY2ggY29udGFpbnMgcHJvcGVydGllcy4gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZCAicmVmZXJlbmNlcyIgb25seSwgdGhpcyB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBudWxsLgotICAgICAgbGV0IHByb3BlcnRpZXMsIHByb3BlcnRpZXNfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogcHJvcGVydGllcywgbGVuOiBwcm9wZXJ0aWVzX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IHByb3BlcnRpZXNfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3twcm9wZXJ0aWVzfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICAvLyBUT0RPOiBzaG91bGQgd2UgdmVyaWZ5IHRoYXQgcHJvcGVydGllcyBpcyBudWxsPwotICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHByb3BlcnRpZXNfbGVuKTsKLQotICAgICAgLy8gbnVsbCBwcm9wZXJ0aWVzIGFyZSBkZXNlcmlhbGl6ZWQgaW50byBlbXB0eSBsaXN0cwotICAgICAgY29uc3QgdnBfcHJvcHMgPSBwcm9wZXJ0aWVzID8gcHJvcGVydGllcyA6IFtdOwotCi0gICAgICBjb25zdCB2ID0gbmV3IGcuVmVydGV4UHJvcGVydHkoaWQsIGxhYmVsLCB2YWx1ZSwgdnBfcHJvcHMpOwotICAgICAgcmV0dXJuIHsgdiwgbGVuIH07Ci0gICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOwotICAgIH0KLSAgfQotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVmVydGV4U2VyaWFsaXplci5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVmVydGV4U2VyaWFsaXplci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlYzRlNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1ZlcnRleFNlcmlhbGl6ZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotY29uc3QgZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2dyYXBoJyk7Ci0KLW1vZHVsZS5leHBvcnRzID0gY2xhc3MgVmVydGV4U2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKGlvYykgewotICAgIHRoaXMuaW9jID0gaW9jOwotICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5WRVJURVhdID0gdGhpczsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIGcuVmVydGV4OwotICB9Ci0KLSAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgewotICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgewotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuVkVSVEVYLCAweDAxXSk7Ci0gICAgICB9Ci0gICAgICBjb25zdCBpZCA9IFsweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gU3RyaW5nICcnCi0gICAgICBjb25zdCBsYWJlbCA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gJycKLSAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbMHhmZSwgMHgwMV07IC8vIG51bGwKLSAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbLi4uaWQsIC4uLmxhYmVsLCAuLi5wcm9wZXJ0aWVzXSk7Ci0gICAgfQotCi0gICAgY29uc3QgYnVmcyA9IFtdOwotICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgewotICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5WRVJURVgsIDB4MDBdKSk7Ci0gICAgfQotCi0gICAgLy8ge2lkfQotICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5hbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLmlkKSk7Ci0KLSAgICAvLyB7bGFiZWx9Ci0gICAgYnVmcy5wdXNoKHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0ubGFiZWwsIGZhbHNlKSk7Ci0KLSAgICAvLyB7cHJvcGVydGllc30KLSAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5wcm9wZXJ0aWVzKSk7Ci0KLSAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7Ci0gICAgbGV0IGxlbiA9IDA7Ci0gICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKLQotICAgIHRyeSB7Ci0gICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgewotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7Ci0gICAgICB9Ci0gICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7Ci0gICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlZFUlRFWCkgewotICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKLQotICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKLSAgICAgICAgbGVuKys7Ci0gICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7Ci0gICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKLSAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOwotICAgICAgfQotCi0gICAgICBsZXQgaWQsIGlkX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGlkLCBsZW46IGlkX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IGlkX2xlbjsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBlcnIubWVzc2FnZSA9ICd7aWR9OiAnICsgZXJyLm1lc3NhZ2U7Ci0gICAgICAgIHRocm93IGVycjsKLSAgICAgIH0KLSAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShpZF9sZW4pOwotCi0gICAgICBsZXQgbGFiZWwsIGxhYmVsX2xlbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgICh7IHY6IGxhYmVsLCBsZW46IGxhYmVsX2xlbiB9ID0gdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7Ci0gICAgICAgIGxlbiArPSBsYWJlbF9sZW47Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xhYmVsfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGFiZWxfbGVuKTsKLQotICAgICAgbGV0IHByb3BlcnRpZXMsIHByb3BlcnRpZXNfbGVuOwotICAgICAgdHJ5IHsKLSAgICAgICAgKHsgdjogcHJvcGVydGllcywgbGVuOiBwcm9wZXJ0aWVzX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKLSAgICAgICAgbGVuICs9IHByb3BlcnRpZXNfbGVuOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGVyci5tZXNzYWdlID0gJ3twcm9wZXJ0aWVzfTogJyArIGVyci5tZXNzYWdlOwotICAgICAgICB0aHJvdyBlcnI7Ci0gICAgICB9Ci0gICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UocHJvcGVydGllc19sZW4pOwotCi0gICAgICAvLyBudWxsIHByb3BlcnRpZXMgYXJlIGRlc2VyaWFsaXplZCBpbnRvIGVtcHR5IGxpc3RzCi0gICAgICBjb25zdCB2ZXJ0ZXhfcHJvcHMgPSBwcm9wZXJ0aWVzID8gcHJvcGVydGllcyA6IFtdOwotCi0gICAgICBjb25zdCB2ID0gbmV3IGcuVmVydGV4KGlkLCBsYWJlbCwgdmVydGV4X3Byb3BzKTsKLSAgICAgIHJldHVybiB7IHYsIGxlbiB9OwotICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKLSAgICB9Ci0gIH0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL3V0aWxzLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy91dGlscy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFiOGZkYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL3V0aWxzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi0vKgotICogRGVzZXJpYWxpemF0aW9uIGVycm9yIGdlbmVyYWwgY29uc3RydWN0b3IuCi0gKi8KLWNvbnN0IGRlc19lcnJvciA9ICh7IHNlcmlhbGl6ZXIsIGFyZ3MsIGN1cnNvciwgZXJyIH0pID0+IHsKLSAgaWYgKGN1cnNvciA9PT0gdW5kZWZpbmVkKSB7Ci0gICAgY3Vyc29yID0gYXJnc1swXTsgLy8gYnVmZmVyCi0gIH0KLSAgbGV0IGN1cnNvcl90YWlsID0gJyc7Ci0gIGlmIChjdXJzb3IgaW5zdGFuY2VvZiBCdWZmZXIpIHsKLSAgICBpZiAoY3Vyc29yLmxlbmd0aCA+IDMyKSB7Ci0gICAgICBjdXJzb3JfdGFpbCA9ICcuLi4nOwotICAgIH0KLSAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMCwgMzIpLnRvU3RyaW5nKCdoZXgnKTsKLSAgfQotCi0gIGNvbnN0IGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gYXJnc1sxXTsKLSAgY29uc3QgbnVsbGFibGUgPSBhcmdzWzJdOwotCi0gIGxldCBtID0gYCR7c2VyaWFsaXplci5jb25zdHJ1Y3Rvci5uYW1lfS5kZXNlcmlhbGl6ZShjdXJzb3I9JHtjdXJzb3J9JHtjdXJzb3JfdGFpbH1gOwotICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQgIT09IHVuZGVmaW5lZCkgewotICAgIG0gKz0gYCwgZnVsbHlRdWFsaWZpZWRGb3JtYXQ9JHtmdWxseVF1YWxpZmllZEZvcm1hdH1gOwotICB9Ci0gIGlmIChudWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgbSArPSBgLCBudWxsYWJsZT0ke251bGxhYmxlfWA7Ci0gIH0KLSAgbSArPSBgKTogJHtlcnIubWVzc2FnZS5yZXBsYWNlKC9cLiQvLCAnJyl9LmA7Ci0KLSAgZXJyLm1lc3NhZ2UgPSBtOwotCi0gIHJldHVybiBlcnI7Ci19OwotCi1tb2R1bGUuZXhwb3J0cyA9IHsKLSAgZGVzX2Vycm9yLAotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2dyYXBoLXNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9ncmFwaC1zZXJpYWxpemVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODhjZDU1NC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9ncmFwaC1zZXJpYWxpemVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMzAzICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotY29uc3QgdHlwZVNlcmlhbGl6ZXJzID0gcmVxdWlyZSgnLi90eXBlLXNlcmlhbGl6ZXJzJyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4uLy4uL3Byb2Nlc3MvYnl0ZWNvZGUnKTsKLQotLyoqCi0gKiBHcmFwaFNPTjIgd3JpdGVyLgotICovCi1jbGFzcyBHcmFwaFNPTjJXcml0ZXIgewotICAvKioKLSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQotICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc2VyaWFsaXplcnNdIEFuIG9iamVjdCB1c2VkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggR3JhcGhTT04gMiB0eXBlIG5hbWUgYXMga2V5cyBhbmQKLSAgICogc2VyaWFsaXplciBpbnN0YW5jZXMgYXMgdmFsdWVzLCBpZTogeyAnZzpJbnQ2NCc6IGxvbmdTZXJpYWxpemVyIH0uCi0gICAqIEBjb25zdHJ1Y3RvcgotICAgKi8KLSAgY29uc3RydWN0b3Iob3B0aW9ucykgewotICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwotICAgIC8vIENyZWF0ZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBzZXJpYWxpemVycwotICAgIHRoaXMuX3NlcmlhbGl6ZXJzID0gdGhpcy5nZXREZWZhdWx0U2VyaWFsaXplcnMoKS5tYXAoKHNlcmlhbGl6ZXJDb25zdHJ1Y3RvcikgPT4gewotICAgICAgY29uc3QgcyA9IG5ldyBzZXJpYWxpemVyQ29uc3RydWN0b3IoKTsKLSAgICAgIHMud3JpdGVyID0gdGhpczsKLSAgICAgIHJldHVybiBzOwotICAgIH0pOwotCi0gICAgY29uc3QgY3VzdG9tU2VyaWFsaXplcnMgPSB0aGlzLl9vcHRpb25zLnNlcmlhbGl6ZXJzIHx8IHt9OwotCi0gICAgT2JqZWN0LmtleXMoY3VzdG9tU2VyaWFsaXplcnMpLmZvckVhY2goKGtleSkgPT4gewotICAgICAgY29uc3QgcyA9IGN1c3RvbVNlcmlhbGl6ZXJzW2tleV07Ci0gICAgICBpZiAoIXMuc2VyaWFsaXplKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHMud3JpdGVyID0gdGhpczsKLSAgICAgIC8vIEluc2VydCBjdXN0b20gc2VyaWFsaXplcnMgZmlyc3QKLSAgICAgIHRoaXMuX3NlcmlhbGl6ZXJzLnVuc2hpZnQocyk7Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgZGVmYXVsdCBzZXJpYWxpemVycyB0byBiZSB1c2VkLgotICAgKiBAcmV0dXJucyB7QXJyYXl9Ci0gICAqLwotICBnZXREZWZhdWx0U2VyaWFsaXplcnMoKSB7Ci0gICAgcmV0dXJuIGdyYXBoU09OMlNlcmlhbGl6ZXJzOwotICB9Ci0KLSAgYWRhcHRPYmplY3QodmFsdWUpIHsKLSAgICBsZXQgczsKLQotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fc2VyaWFsaXplcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGNvbnN0IGN1cnJlbnRTZXJpYWxpemVyID0gdGhpcy5fc2VyaWFsaXplcnNbaV07Ci0gICAgICBpZiAoY3VycmVudFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yICYmIGN1cnJlbnRTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2YWx1ZSkpIHsKLSAgICAgICAgcyA9IGN1cnJlbnRTZXJpYWxpemVyOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocykgewotICAgICAgcmV0dXJuIHMuc2VyaWFsaXplKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKLSAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIGFycmF5cyB3aGVuIHRoZXJlIGlzIG5vIHNlcmlhbGl6ZXIKLSAgICAgIC8vIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBHcmFwaFNPTgotICAgICAgcmV0dXJuIHZhbHVlLm1hcCgoaXRlbSkgPT4gdGhpcy5hZGFwdE9iamVjdChpdGVtKSk7Ci0gICAgfQotCi0gICAgLy8gRGVmYXVsdCAoc3RyaW5ncyAvIG9iamVjdHMgLyAuLi4pCi0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIEdyYXBoU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm92aWRlZCBvYmplY3QgaW5zdGFuY2UuCi0gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmoKLSAgICogQHJldHVybnMge1N0cmluZ30KLSAgICovCi0gIHdyaXRlKG9iaikgewotICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmFkYXB0T2JqZWN0KG9iaikpOwotICB9Ci0KLSAgd3JpdGVSZXF1ZXN0KHsgcmVxdWVzdElkLCBvcCwgcHJvY2Vzc29yLCBhcmdzIH0pIHsKLSAgICBjb25zdCByZXEgPSB7Ci0gICAgICByZXF1ZXN0SWQ6IHsgJ0B0eXBlJzogJ2c6VVVJRCcsICdAdmFsdWUnOiByZXF1ZXN0SWQgfSwKLSAgICAgIG9wLAotICAgICAgcHJvY2Vzc29yLAotICAgICAgYXJnczogdGhpcy5fYWRhcHRBcmdzKGFyZ3MsIHRydWUpLAotICAgIH07Ci0KLSAgICBpZiAocmVxLmFyZ3NbJ2dyZW1saW4nXSBpbnN0YW5jZW9mIEJ5dGVjb2RlKSB7Ci0gICAgICByZXEuYXJnc1snZ3JlbWxpbiddID0gdGhpcy5hZGFwdE9iamVjdChyZXEuYXJnc1snZ3JlbWxpbiddKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocmVxKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGFrZXMgdGhlIGdpdmVuIGFyZ3MgbWFwIGFuZCBlbnN1cmVzIGFsbCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIGFkYXB0T2JqZWN0Ci0gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzIE1hcCBvZiBhcmd1bWVudHMgdG8gcHJvY2Vzcy4KLSAgICogQHBhcmFtIHtCb29sZWFufSBwcm90b2NvbExldmVsIERldGVybWluZXMgd2hldGhlciBpdCdzIGEgcHJvdG9jb2wgbGV2ZWwgYmluZGluZy4KLSAgICogQHJldHVybnMge09iamVjdH0KLSAgICogQHByaXZhdGUKLSAgICovCi0gIF9hZGFwdEFyZ3MoYXJncywgcHJvdG9jb2xMZXZlbCkgewotICAgIGlmIChhcmdzIGluc3RhbmNlb2YgT2JqZWN0KSB7Ci0gICAgICBjb25zdCBuZXdPYmogPSB7fTsKLSAgICAgIE9iamVjdC5rZXlzKGFyZ3MpLmZvckVhY2goKGtleSkgPT4gewotICAgICAgICAvLyBiaW5kaW5ncyBrZXkgKGF0IHRoZSBwcm90b2NvbC1sZXZlbCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiB3aXRob3V0IHRoaXMsIGl0IHdyYXBzIHRoZSBnZW5lcmF0ZWQgTWFwCi0gICAgICAgIC8vIGluIGFub3RoZXIgbWFwIGZvciB0eXBlcyBsaWtlIEVudW1WYWx1ZS4gQ291bGQgYmUgYSBuaWNlciB3YXkgdG8gZG8gdGhpcyBidXQgZm9yIG5vdyBpdCdzIHNvbHZpbmcgdGhlCi0gICAgICAgIC8vIHByb2JsZW0gd2l0aCBzY3JpcHQgc3VibWlzc2lvbiBvZiBub24gSlNPTiBuYXRpdmUgdHlwZXMKLSAgICAgICAgaWYgKHByb3RvY29sTGV2ZWwgJiYga2V5ID09PSAnYmluZGluZ3MnKSB7Ci0gICAgICAgICAgbmV3T2JqW2tleV0gPSB0aGlzLl9hZGFwdEFyZ3MoYXJnc1trZXldLCBmYWxzZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbmV3T2JqW2tleV0gPSB0aGlzLmFkYXB0T2JqZWN0KGFyZ3Nba2V5XSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0gICAgICByZXR1cm4gbmV3T2JqOwotICAgIH0KLQotICAgIHJldHVybiBhcmdzOwotICB9Ci19Ci0KLS8qKgotICogR3JhcGhTT04zIHdyaXRlci4KLSAqLwotY2xhc3MgR3JhcGhTT04zV3JpdGVyIGV4dGVuZHMgR3JhcGhTT04yV3JpdGVyIHsKLSAgZ2V0RGVmYXVsdFNlcmlhbGl6ZXJzKCkgewotICAgIHJldHVybiBncmFwaFNPTjNTZXJpYWxpemVyczsKLSAgfQotfQotCi0vKioKLSAqIEdyYXBoU09OMiByZWFkZXIuCi0gKi8KLWNsYXNzIEdyYXBoU09OMlJlYWRlciB7Ci0gIC8qKgotICAgKiBHcmFwaFNPTiBSZWFkZXIKLSAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQotICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMuc2VyaWFsaXplcnNdIEFuIG9iamVjdCB1c2VkIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggR3JhcGhTT04gMiB0eXBlIG5hbWUgYXMga2V5cyBhbmQKLSAgICogZGVzZXJpYWxpemVyIGluc3RhbmNlcyBhcyB2YWx1ZXMsIGllOiB7ICdnOkludDY0JzogbG9uZ1NlcmlhbGl6ZXIgfS4KLSAgICogQGNvbnN0cnVjdG9yCi0gICAqLwotICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7Ci0gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnMgfHwge307Ci0gICAgdGhpcy5fZGVzZXJpYWxpemVycyA9IHt9OwotCi0gICAgY29uc3QgZGVmYXVsdERlc2VyaWFsaXplcnMgPSB0aGlzLmdldERlZmF1bHREZXNlcmlhbGl6ZXJzKCk7Ci0gICAgT2JqZWN0LmtleXMoZGVmYXVsdERlc2VyaWFsaXplcnMpLmZvckVhY2goKHR5cGVOYW1lKSA9PiB7Ci0gICAgICBjb25zdCBzZXJpYWxpemVyQ29uc3RydWN0b3IgPSBkZWZhdWx0RGVzZXJpYWxpemVyc1t0eXBlTmFtZV07Ci0gICAgICBjb25zdCBzID0gbmV3IHNlcmlhbGl6ZXJDb25zdHJ1Y3RvcigpOwotICAgICAgcy5yZWFkZXIgPSB0aGlzOwotICAgICAgdGhpcy5fZGVzZXJpYWxpemVyc1t0eXBlTmFtZV0gPSBzOwotICAgIH0pOwotCi0gICAgaWYgKHRoaXMuX29wdGlvbnMuc2VyaWFsaXplcnMpIHsKLSAgICAgIGNvbnN0IGN1c3RvbVNlcmlhbGl6ZXJzID0gdGhpcy5fb3B0aW9ucy5zZXJpYWxpemVycyB8fCB7fTsKLSAgICAgIE9iamVjdC5rZXlzKGN1c3RvbVNlcmlhbGl6ZXJzKS5mb3JFYWNoKChrZXkpID0+IHsKLSAgICAgICAgY29uc3QgcyA9IGN1c3RvbVNlcmlhbGl6ZXJzW2tleV07Ci0gICAgICAgIGlmICghcy5kZXNlcmlhbGl6ZSkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzLnJlYWRlciA9IHRoaXM7Ci0gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplcnNba2V5XSA9IHM7Ci0gICAgICB9KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgZGVmYXVsdCBkZXNlcmlhbGl6ZXJzIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5LgotICAgKiBAcmV0dXJucyB7T2JqZWN0fQotICAgKi8KLSAgZ2V0RGVmYXVsdERlc2VyaWFsaXplcnMoKSB7Ci0gICAgcmV0dXJuIGdyYXBoU09OMkRlc2VyaWFsaXplcnM7Ci0gIH0KLQotICByZWFkKG9iaikgewotICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkgewotICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICB9Ci0gICAgaWYgKG9iaiA9PT0gbnVsbCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHsKLSAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiB0aGlzLnJlYWQoaXRlbSkpOwotICAgIH0KLSAgICBjb25zdCB0eXBlID0gb2JqW3R5cGVTZXJpYWxpemVycy50eXBlS2V5XTsKLSAgICBpZiAodHlwZSkgewotICAgICAgY29uc3QgZCA9IHRoaXMuX2Rlc2VyaWFsaXplcnNbdHlwZV07Ci0gICAgICBpZiAoZCkgewotICAgICAgICAvLyBVc2UgdHlwZSBzZXJpYWxpemVyCi0gICAgICAgIHJldHVybiBkLmRlc2VyaWFsaXplKG9iaik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gb2JqW3R5cGVTZXJpYWxpemVycy52YWx1ZUtleV07Ci0gICAgfQotICAgIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHsKLSAgICAgIHJldHVybiB0aGlzLl9kZXNlcmlhbGl6ZU9iamVjdChvYmopOwotICAgIH0KLSAgICAvLyBEZWZhdWx0IChmb3IgYm9vbGVhbiwgbnVtYmVyIGFuZCBvdGhlciBzY2FsYXJzKQotICAgIHJldHVybiBvYmo7Ci0gIH0KLQotICByZWFkUmVzcG9uc2UoYnVmZmVyKSB7Ci0gICAgcmV0dXJuIHRoaXMucmVhZChKU09OLnBhcnNlKGJ1ZmZlci50b1N0cmluZygpKSk7Ci0gIH0KLQotICBfZGVzZXJpYWxpemVPYmplY3Qob2JqKSB7Ci0gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7Ci0gICAgY29uc3QgcmVzdWx0ID0ge307Ci0gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICByZXN1bHRba2V5c1tpXV0gPSB0aGlzLnJlYWQob2JqW2tleXNbaV1dKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotfQotCi0vKioKLSAqIEdyYXBoU09OMyByZWFkZXIuCi0gKi8KLWNsYXNzIEdyYXBoU09OM1JlYWRlciBleHRlbmRzIEdyYXBoU09OMlJlYWRlciB7Ci0gIGdldERlZmF1bHREZXNlcmlhbGl6ZXJzKCkgewotICAgIHJldHVybiBncmFwaFNPTjNEZXNlcmlhbGl6ZXJzOwotICB9Ci19Ci0KLWNvbnN0IGdyYXBoU09OMkRlc2VyaWFsaXplcnMgPSB7Ci0gICdnOlRyYXZlcnNlcic6IHR5cGVTZXJpYWxpemVycy5UcmF2ZXJzZXJTZXJpYWxpemVyLAotICAnZzpUcmF2ZXJzYWxTdHJhdGVneSc6IHR5cGVTZXJpYWxpemVycy5UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIsCi0gICdnOkludDMyJzogdHlwZVNlcmlhbGl6ZXJzLk51bWJlclNlcmlhbGl6ZXIsCi0gICdnOkludDY0JzogdHlwZVNlcmlhbGl6ZXJzLk51bWJlclNlcmlhbGl6ZXIsCi0gICdnOkZsb2F0JzogdHlwZVNlcmlhbGl6ZXJzLk51bWJlclNlcmlhbGl6ZXIsCi0gICdnOkRvdWJsZSc6IHR5cGVTZXJpYWxpemVycy5OdW1iZXJTZXJpYWxpemVyLAotICAnZzpEYXRlJzogdHlwZVNlcmlhbGl6ZXJzLkRhdGVTZXJpYWxpemVyLAotICAnZ3g6T2Zmc2V0RGF0ZVRpbWUnOiB0eXBlU2VyaWFsaXplcnMuT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyLAotICAnZzpEaXJlY3Rpb24nOiB0eXBlU2VyaWFsaXplcnMuRGlyZWN0aW9uU2VyaWFsaXplciwKLSAgJ2c6VmVydGV4JzogdHlwZVNlcmlhbGl6ZXJzLlZlcnRleFNlcmlhbGl6ZXIsCi0gICdnOkVkZ2UnOiB0eXBlU2VyaWFsaXplcnMuRWRnZVNlcmlhbGl6ZXIsCi0gICdnOlZlcnRleFByb3BlcnR5JzogdHlwZVNlcmlhbGl6ZXJzLlZlcnRleFByb3BlcnR5U2VyaWFsaXplciwKLSAgJ2c6UHJvcGVydHknOiB0eXBlU2VyaWFsaXplcnMuUHJvcGVydHlTZXJpYWxpemVyLAotICAnZzpQYXRoJzogdHlwZVNlcmlhbGl6ZXJzLlBhdGgzU2VyaWFsaXplciwKLSAgJ2c6VGV4dFAnOiB0eXBlU2VyaWFsaXplcnMuVGV4dFBTZXJpYWxpemVyLAotICAnZzpUJzogdHlwZVNlcmlhbGl6ZXJzLlRTZXJpYWxpemVyLAotICAnZzpCdWxrU2V0JzogdHlwZVNlcmlhbGl6ZXJzLkJ1bGtTZXRTZXJpYWxpemVyLAotfTsKLQotY29uc3QgZ3JhcGhTT04zRGVzZXJpYWxpemVycyA9IE9iamVjdC5hc3NpZ24oe30sIGdyYXBoU09OMkRlc2VyaWFsaXplcnMsIHsKLSAgJ2c6TGlzdCc6IHR5cGVTZXJpYWxpemVycy5MaXN0U2VyaWFsaXplciwKLSAgJ2c6U2V0JzogdHlwZVNlcmlhbGl6ZXJzLlNldFNlcmlhbGl6ZXIsCi0gICdnOk1hcCc6IHR5cGVTZXJpYWxpemVycy5NYXBTZXJpYWxpemVyLAotfSk7Ci0KLWNvbnN0IGdyYXBoU09OMlNlcmlhbGl6ZXJzID0gWwotICB0eXBlU2VyaWFsaXplcnMuTnVtYmVyU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLk9mZnNldERhdGVUaW1lU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLkJ5dGVjb2RlU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLlRyYXZlcnNlclNlcmlhbGl6ZXIsCi0gIHR5cGVTZXJpYWxpemVycy5UcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIsCi0gIHR5cGVTZXJpYWxpemVycy5QU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLlRleHRQU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLkNsYXNzU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLkxhbWJkYVNlcmlhbGl6ZXIsCi0gIHR5cGVTZXJpYWxpemVycy5FbnVtU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLlZlcnRleFNlcmlhbGl6ZXIsCi0gIHR5cGVTZXJpYWxpemVycy5FZGdlU2VyaWFsaXplciwKLSAgdHlwZVNlcmlhbGl6ZXJzLkxvbmdTZXJpYWxpemVyLAotXTsKLQotY29uc3QgZ3JhcGhTT04zU2VyaWFsaXplcnMgPSBncmFwaFNPTjJTZXJpYWxpemVycy5jb25jYXQoWwotICB0eXBlU2VyaWFsaXplcnMuTGlzdFNlcmlhbGl6ZXIsCi0gIHR5cGVTZXJpYWxpemVycy5TZXRTZXJpYWxpemVyLAotICB0eXBlU2VyaWFsaXplcnMuTWFwU2VyaWFsaXplciwKLV0pOwotCi1tb2R1bGUuZXhwb3J0cyA9IHsKLSAgR3JhcGhTT04zV3JpdGVyLAotICBHcmFwaFNPTjNSZWFkZXIsCi0gIEdyYXBoU09OMldyaXRlciwKLSAgR3JhcGhTT04yUmVhZGVyLAotICBHcmFwaFNPTldyaXRlcjogR3JhcGhTT04zV3JpdGVyLAotICBHcmFwaFNPTlJlYWRlcjogR3JhcGhTT04zUmVhZGVyLAotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL3R5cGUtc2VyaWFsaXplcnMuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby90eXBlLXNlcmlhbGl6ZXJzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjVhMzkyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL3R5cGUtc2VyaWFsaXplcnMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjYgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IHRzID0gcmVxdWlyZSgnLi4vLi4vcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi4vLi4vcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgZyA9IHJlcXVpcmUoJy4uL2dyYXBoJyk7Ci1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzJyk7Ci0KLWNvbnN0IHZhbHVlS2V5ID0gJ0B2YWx1ZSc7Ci1jb25zdCB0eXBlS2V5ID0gJ0B0eXBlJzsKLQotLyoqCi0gKiBAYWJzdHJhY3QKLSAqLwotY2xhc3MgVHlwZVNlcmlhbGl6ZXIgewotICBzZXJpYWxpemUoKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCdzZXJpYWxpemUoKSBtZXRob2Qgbm90IGltcGxlbWVudGVkIGZvciAnICsgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKCkgewotICAgIHRocm93IG5ldyBFcnJvcignZGVzZXJpYWxpemUoKSBtZXRob2Qgbm90IGltcGxlbWVudGVkIGZvciAnICsgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcigpIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbkJlVXNlZEZvcigpIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLmNvbnN0cnVjdG9yLm5hbWUpOwotICB9Ci19Ci0KLWNsYXNzIE51bWJlclNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIHNlcmlhbGl6ZShpdGVtKSB7Ci0gICAgaWYgKGlzTmFOKGl0ZW0pKSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICBbdHlwZUtleV06ICdnOkRvdWJsZScsCi0gICAgICAgIFt2YWx1ZUtleV06ICdOYU4nLAotICAgICAgfTsKLSAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkgewotICAgICAgcmV0dXJuIHsKLSAgICAgICAgW3R5cGVLZXldOiAnZzpEb3VibGUnLAotICAgICAgICBbdmFsdWVLZXldOiAnSW5maW5pdHknLAotICAgICAgfTsKLSAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgewotICAgICAgcmV0dXJuIHsKLSAgICAgICAgW3R5cGVLZXldOiAnZzpEb3VibGUnLAotICAgICAgICBbdmFsdWVLZXldOiAnLUluZmluaXR5JywKLSAgICAgIH07Ci0gICAgfQotICAgIHJldHVybiBpdGVtOwotICB9Ci0KLSAgZGVzZXJpYWxpemUob2JqKSB7Ci0gICAgY29uc3QgdmFsID0gb2JqW3ZhbHVlS2V5XTsKLSAgICBpZiAodmFsID09PSAnTmFOJykgewotICAgICAgcmV0dXJuIE5hTjsKLSAgICB9IGVsc2UgaWYgKHZhbCA9PT0gJ0luZmluaXR5JykgewotICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKLSAgICB9IGVsc2UgaWYgKHZhbCA9PT0gJy1JbmZpbml0eScpIHsKLSAgICAgIHJldHVybiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Ci0gICAgfQotICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbCk7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJzsKLSAgfQotfQotCi1jbGFzcyBEYXRlU2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgLy8gb25seSBkZXNlcmlhbGl6ZSBnOkRhdGUgb2JqZWN0cwotICBkZXNlcmlhbGl6ZShvYmopIHsKLSAgICByZXR1cm4gbmV3IERhdGUob2JqW3ZhbHVlS2V5XSk7Ci0gIH0KLX0KLQotY2xhc3MgT2Zmc2V0RGF0ZVRpbWVTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICAvLyBEYXRlIG9iamVjdHMgYXJlIHNlcmlhbGl6ZWQgYXMgT2Zmc2V0RGF0ZVRpbWUgYnkgZGVmYXVsdAotICBzZXJpYWxpemUoaXRlbSkgewotICAgIHJldHVybiB7Ci0gICAgICBbdHlwZUtleV06ICdneDpPZmZzZXREYXRlVGltZScsCi0gICAgICBbdmFsdWVLZXldOiBpdGVtLnRvSVNPU3RyaW5nKCksCi0gICAgfTsKLSAgfQotCi0gIGRlc2VyaWFsaXplKG9iaikgewotICAgIHJldHVybiBuZXcgRGF0ZShvYmpbdmFsdWVLZXldKTsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7Ci0gIH0KLX0KLQotY2xhc3MgQ2xhc3NTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICBzZXJpYWxpemUoaXRlbSkgewotICAgIHJldHVybiB7Ci0gICAgICBbdHlwZUtleV06ICdnOkNsYXNzJywKLSAgICAgIFt2YWx1ZUtleV06IG5ldyBpdGVtKCkuZnFjbiwKLSAgICB9OwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuICgKLSAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJgotICAgICAgISF2YWx1ZS5wcm90b3R5cGUgJiYKLSAgICAgICEhdmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgJiYKLSAgICAgIG5ldyB2YWx1ZSgpIGluc3RhbmNlb2YgdHMuVHJhdmVyc2FsU3RyYXRlZ3kKLSAgICApOwotICB9Ci19Ci0KLWNsYXNzIExvbmdTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICBzZXJpYWxpemUoaXRlbSkgewotICAgIHJldHVybiB7Ci0gICAgICBbdHlwZUtleV06ICdnOkludDY0JywKLSAgICAgIFt2YWx1ZUtleV06IGl0ZW0udmFsdWUsCi0gICAgfTsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIHV0aWxzLkxvbmc7Ci0gIH0KLX0KLQotY2xhc3MgQnl0ZWNvZGVTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICBzZXJpYWxpemUoaXRlbSkgewotICAgIGxldCBieXRlY29kZSA9IGl0ZW07Ci0gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiB0LlRyYXZlcnNhbCkgewotICAgICAgYnl0ZWNvZGUgPSBpdGVtLmdldEJ5dGVjb2RlKCk7Ci0gICAgfQotICAgIGNvbnN0IHJlc3VsdCA9IHt9OwotICAgIHJlc3VsdFt0eXBlS2V5XSA9ICdnOkJ5dGVjb2RlJzsKLSAgICBjb25zdCByZXN1bHRWYWx1ZSA9IChyZXN1bHRbdmFsdWVLZXldID0ge30pOwotICAgIGNvbnN0IHNvdXJjZXMgPSB0aGlzLl9zZXJpYWxpemVJbnN0cnVjdGlvbnMoYnl0ZWNvZGUuc291cmNlSW5zdHJ1Y3Rpb25zKTsKLSAgICBpZiAoc291cmNlcykgewotICAgICAgcmVzdWx0VmFsdWVbJ3NvdXJjZSddID0gc291cmNlczsKLSAgICB9Ci0gICAgY29uc3Qgc3RlcHMgPSB0aGlzLl9zZXJpYWxpemVJbnN0cnVjdGlvbnMoYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9ucyk7Ci0gICAgaWYgKHN0ZXBzKSB7Ci0gICAgICByZXN1bHRWYWx1ZVsnc3RlcCddID0gc3RlcHM7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBfc2VyaWFsaXplSW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykgewotICAgIGlmIChpbnN0cnVjdGlvbnMubGVuZ3RoID09PSAwKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGluc3RydWN0aW9ucy5sZW5ndGgpOwotICAgIHJlc3VsdFswXSA9IGluc3RydWN0aW9uc1swXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgcmVzdWx0W2ldID0gaW5zdHJ1Y3Rpb25zW2ldLm1hcCgoaXRlbSkgPT4gdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoaXRlbSkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQnl0ZWNvZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiB0LlRyYXZlcnNhbDsKLSAgfQotfQotCi1jbGFzcyBQU2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgLyoqIEBwYXJhbSB7UH0gaXRlbSAqLwotICBzZXJpYWxpemUoaXRlbSkgewotICAgIGNvbnN0IHJlc3VsdCA9IHt9OwotICAgIHJlc3VsdFt0eXBlS2V5XSA9ICdnOlAnOwotICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gKHJlc3VsdFt2YWx1ZUtleV0gPSB7Ci0gICAgICBwcmVkaWNhdGU6IGl0ZW0ub3BlcmF0b3IsCi0gICAgfSk7Ci0gICAgaWYgKGl0ZW0ub3RoZXIgPT09IHVuZGVmaW5lZCB8fCBpdGVtLm90aGVyID09PSBudWxsKSB7Ci0gICAgICByZXN1bHRWYWx1ZVsndmFsdWUnXSA9IHRoaXMud3JpdGVyLmFkYXB0T2JqZWN0KGl0ZW0udmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXN1bHRWYWx1ZVsndmFsdWUnXSA9IFt0aGlzLndyaXRlci5hZGFwdE9iamVjdChpdGVtLnZhbHVlKSwgdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoaXRlbS5vdGhlcildOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgdC5QOwotICB9Ci19Ci0KLWNsYXNzIFRleHRQU2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgLyoqIEBwYXJhbSB7VGV4dFB9IGl0ZW0gKi8KLSAgc2VyaWFsaXplKGl0ZW0pIHsKLSAgICBjb25zdCByZXN1bHQgPSB7fTsKLSAgICByZXN1bHRbdHlwZUtleV0gPSAnZzpUZXh0UCc7Ci0gICAgY29uc3QgcmVzdWx0VmFsdWUgPSAocmVzdWx0W3ZhbHVlS2V5XSA9IHsKLSAgICAgIHByZWRpY2F0ZTogaXRlbS5vcGVyYXRvciwKLSAgICB9KTsKLSAgICBpZiAoaXRlbS5vdGhlciA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0ub3RoZXIgPT09IG51bGwpIHsKLSAgICAgIHJlc3VsdFZhbHVlWyd2YWx1ZSddID0gdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoaXRlbS52YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdFZhbHVlWyd2YWx1ZSddID0gW3RoaXMud3JpdGVyLmFkYXB0T2JqZWN0KGl0ZW0udmFsdWUpLCB0aGlzLndyaXRlci5hZGFwdE9iamVjdChpdGVtLm90aGVyKV07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiB0LlRleHRQOwotICB9Ci19Ci0KLWNsYXNzIExhbWJkYVNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIC8qKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVtICovCi0gIHNlcmlhbGl6ZShpdGVtKSB7Ci0gICAgY29uc3QgbGFtYmRhRGVmID0gaXRlbSgpOwotCi0gICAgLy8gY2hlY2sgaWYgdGhlIGxhbmd1YWdlIGlzIHNwZWNpZmllZCBvdGhlcndpc2UgYXNzdW1lIGdyZW1saW4tZ3Jvb3Z5LgotICAgIGNvbnN0IHJldHVybklzU3RyaW5nID0gdHlwZW9mIGxhbWJkYURlZiA9PT0gJ3N0cmluZyc7Ci0gICAgY29uc3Qgc2NyaXB0ID0gcmV0dXJuSXNTdHJpbmcgPyBsYW1iZGFEZWYgOiBsYW1iZGFEZWZbMF07Ci0gICAgY29uc3QgbGFuZyA9IHJldHVybklzU3RyaW5nID8gJ2dyZW1saW4tZ3Jvb3Z5JyA6IGxhbWJkYURlZlsxXTsKLQotICAgIC8vIGRldGVjdCBhcmd1bWVudCBjb3VudAotICAgIGNvbnN0IGFyZ0NvdW50ID0KLSAgICAgIGxhbmcgPT09ICdncmVtbGluLWdyb292eScgJiYgc2NyaXB0LmluY2x1ZGVzKCctPicpCi0gICAgICAgID8gc2NyaXB0LnN1YnN0cmluZygwLCBzY3JpcHQuaW5kZXhPZignLT4nKSkuaW5jbHVkZXMoJywnKQotICAgICAgICAgID8gMgotICAgICAgICAgIDogMQotICAgICAgICA6IC0xOwotCi0gICAgcmV0dXJuIHsKLSAgICAgIFt0eXBlS2V5XTogJ2c6TGFtYmRhJywKLSAgICAgIFt2YWx1ZUtleV06IHsKLSAgICAgICAgYXJndW1lbnRzOiBhcmdDb3VudCwKLSAgICAgICAgbGFuZ3VhZ2U6IGxhbmcsCi0gICAgICAgIHNjcmlwdDogc2NyaXB0LAotICAgICAgfSwKLSAgICB9OwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzsKLSAgfQotfQotCi1jbGFzcyBFbnVtU2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgLyoqIEBwYXJhbSB7RW51bVZhbHVlfSBpdGVtICovCi0gIHNlcmlhbGl6ZShpdGVtKSB7Ci0gICAgcmV0dXJuIHsKLSAgICAgIFt0eXBlS2V5XTogJ2c6JyArIGl0ZW0udHlwZU5hbWUsCi0gICAgICBbdmFsdWVLZXldOiBpdGVtLmVsZW1lbnROYW1lLAotICAgIH07Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUudHlwZU5hbWUgJiYgdmFsdWUgaW5zdGFuY2VvZiB0LkVudW1WYWx1ZTsKLSAgfQotfQotCi1jbGFzcyBUcmF2ZXJzZXJTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICAvKiogQHBhcmFtIHtUcmF2ZXJzZXJ9IGl0ZW0gKi8KLSAgc2VyaWFsaXplKGl0ZW0pIHsKLSAgICByZXR1cm4gewotICAgICAgW3R5cGVLZXldOiAnZzpUcmF2ZXJzZXInLAotICAgICAgW3ZhbHVlS2V5XTogewotICAgICAgICB2YWx1ZTogdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoaXRlbS5vYmplY3QpLAotICAgICAgICBidWxrOiB0aGlzLndyaXRlci5hZGFwdE9iamVjdChpdGVtLmJ1bGspLAotICAgICAgfSwKLSAgICB9OwotICB9Ci0KLSAgZGVzZXJpYWxpemUob2JqKSB7Ci0gICAgY29uc3QgdmFsdWUgPSBvYmpbdmFsdWVLZXldOwotICAgIHJldHVybiBuZXcgdC5UcmF2ZXJzZXIodGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsndmFsdWUnXSksIHRoaXMucmVhZGVyLnJlYWQodmFsdWVbJ2J1bGsnXSkpOwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgdC5UcmF2ZXJzZXI7Ci0gIH0KLX0KLQotY2xhc3MgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICAvKiogQHBhcmFtIHtUcmF2ZXJzYWxTdHJhdGVneX0gaXRlbSAqLwotICBzZXJpYWxpemUoaXRlbSkgewotICAgIGNvbnN0IGNvbmYgPSB7fTsKLSAgICBmb3IgKGNvbnN0IGsgaW4gaXRlbS5jb25maWd1cmF0aW9uKSB7Ci0gICAgICBpZiAoaXRlbS5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGspKSB7Ci0gICAgICAgIGNvbmZba10gPSB0aGlzLndyaXRlci5hZGFwdE9iamVjdChpdGVtLmNvbmZpZ3VyYXRpb25ba10pOwotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7Ci0gICAgICBbdHlwZUtleV06ICdnOicgKyBpdGVtLmNvbnN0cnVjdG9yLm5hbWUsCi0gICAgICBbdmFsdWVLZXldOiB7IFsnZnFjbiddOiBpdGVtLmZxY24sIFsnY29uZiddOiBjb25mIH0sCi0gICAgfTsKLSAgfQotCi0gIGNhbkJlVXNlZEZvcih2YWx1ZSkgewotICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIHRzLlRyYXZlcnNhbFN0cmF0ZWd5OwotICB9Ci19Ci0KLS8qKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIGRlc2VyaWFsaXplIHByb3BlcnRpZXMgaW50byBhcnJheXMgb2YgVmVydGV4UHJvcGVydHkgb3IgUHJvcGVydHkgYWNjb3JkaW5nIHRvIGdyYXBoU09OVjMuCi0gKi8KLWZ1bmN0aW9uIGRlc2VyaWFsaXplUHJvcGVydGllcyh2YWx1ZSwgcmVhZGVyKSB7Ci0gIGxldCBwcm9wZXJ0aWVzID0gW107Ci0gIGlmICgncHJvcGVydGllcycgaW4gdmFsdWUpIHsKLSAgICBjb25zdCBwcm9wcyA9IHJlYWRlci5yZWFkKHZhbHVlWydwcm9wZXJ0aWVzJ10pOwotICAgIGlmIChwcm9wcyAhPT0gbnVsbCAmJiBwcm9wcyAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMocHJvcHMpLmZsYXRNYXAoKFtrZXksIHZhbHVlc10pID0+IHsKLSAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWVzKSAmJiB2YWx1ZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXNbMF0gaW5zdGFuY2VvZiBnLlZlcnRleFByb3BlcnR5KSB7Ci0gICAgICAgICAgcmV0dXJuIHZhbHVlczsgLy8gRmxhdHRlbiBWZXJ0ZXhQcm9wZXJ0eSBhcnJheXMKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWVzIGluc3RhbmNlb2YgZy5Qcm9wZXJ0eSA/IHZhbHVlcyA6IG5ldyBnLlByb3BlcnR5KGtleSwgdmFsdWVzKTsgLy8gY3JlYXRlIFByb3BlcnR5IG9iamVjdCB3aGVuIG5lZWRlZAotICAgICAgfSk7Ci0gICAgfQotICB9Ci0gIHJldHVybiBwcm9wZXJ0aWVzOwotfQotCi1jbGFzcyBWZXJ0ZXhTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICBkZXNlcmlhbGl6ZShvYmopIHsKLSAgICBjb25zdCB2YWx1ZSA9IG9ialt2YWx1ZUtleV07Ci0gICAgcmV0dXJuIG5ldyBnLlZlcnRleCh0aGlzLnJlYWRlci5yZWFkKHZhbHVlWydpZCddKSwgdmFsdWVbJ2xhYmVsJ10sIGRlc2VyaWFsaXplUHJvcGVydGllcyh2YWx1ZSwgdGhpcy5yZWFkZXIpKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0ge1ZlcnRleH0gaXRlbSAqLwotICBzZXJpYWxpemUoaXRlbSkgewotICAgIHJldHVybiB7Ci0gICAgICBbdHlwZUtleV06ICdnOlZlcnRleCcsCi0gICAgICBbdmFsdWVLZXldOiB7Ci0gICAgICAgIGlkOiB0aGlzLndyaXRlci5hZGFwdE9iamVjdChpdGVtLmlkKSwKLSAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsCi0gICAgICB9LAotICAgIH07Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBnLlZlcnRleDsKLSAgfQotfQotCi1jbGFzcyBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIGRlc2VyaWFsaXplKG9iaikgewotICAgIGNvbnN0IHZhbHVlID0gb2JqW3ZhbHVlS2V5XTsKLSAgICByZXR1cm4gbmV3IGcuVmVydGV4UHJvcGVydHkoCi0gICAgICB0aGlzLnJlYWRlci5yZWFkKHZhbHVlWydpZCddKSwKLSAgICAgIHZhbHVlWydsYWJlbCddLAotICAgICAgdGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsndmFsdWUnXSksCi0gICAgICBkZXNlcmlhbGl6ZVByb3BlcnRpZXModmFsdWUsIHRoaXMucmVhZGVyKSwKLSAgICApOwotICB9Ci19Ci0KLWNsYXNzIFByb3BlcnR5U2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgZGVzZXJpYWxpemUob2JqKSB7Ci0gICAgY29uc3QgdmFsdWUgPSBvYmpbdmFsdWVLZXldOwotICAgIHJldHVybiBuZXcgZy5Qcm9wZXJ0eSh2YWx1ZVsna2V5J10sIHRoaXMucmVhZGVyLnJlYWQodmFsdWVbJ3ZhbHVlJ10pKTsKLSAgfQotfQotCi1jbGFzcyBFZGdlU2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgZGVzZXJpYWxpemUob2JqKSB7Ci0gICAgY29uc3QgdmFsdWUgPSBvYmpbdmFsdWVLZXldOwotICAgIHJldHVybiBuZXcgZy5FZGdlKAotICAgICAgdGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsnaWQnXSksCi0gICAgICBuZXcgZy5WZXJ0ZXgodGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsnb3V0ViddKSwgdGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsnb3V0VkxhYmVsJ10pKSwKLSAgICAgIHZhbHVlWydsYWJlbCddLAotICAgICAgbmV3IGcuVmVydGV4KHRoaXMucmVhZGVyLnJlYWQodmFsdWVbJ2luViddKSwgdGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsnaW5WTGFiZWwnXSkpLAotICAgICAgZGVzZXJpYWxpemVQcm9wZXJ0aWVzKHZhbHVlLCB0aGlzLnJlYWRlciksCi0gICAgKTsKLSAgfQotCi0gIC8qKiBAcGFyYW0ge0VkZ2V9IGl0ZW0gKi8KLSAgc2VyaWFsaXplKGl0ZW0pIHsKLSAgICByZXR1cm4gewotICAgICAgW3R5cGVLZXldOiAnZzpFZGdlJywKLSAgICAgIFt2YWx1ZUtleV06IHsKLSAgICAgICAgaWQ6IHRoaXMud3JpdGVyLmFkYXB0T2JqZWN0KGl0ZW0uaWQpLAotICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCwKLSAgICAgICAgb3V0VjogdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoaXRlbS5vdXRWLmlkKSwKLSAgICAgICAgb3V0VkxhYmVsOiBpdGVtLm91dFYubGFiZWwsCi0gICAgICAgIGluVjogdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoaXRlbS5pblYuaWQpLAotICAgICAgICBpblZMYWJlbDogaXRlbS5pblYubGFiZWwsCi0gICAgICB9LAotICAgIH07Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBnLkVkZ2U7Ci0gIH0KLX0KLQotY2xhc3MgUGF0aFNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIGRlc2VyaWFsaXplKG9iaikgewotICAgIGNvbnN0IHZhbHVlID0gb2JqW3ZhbHVlS2V5XTsKLSAgICBjb25zdCBvYmplY3RzID0gdmFsdWVbJ29iamVjdHMnXS5tYXAoKG8pID0+IHRoaXMucmVhZGVyLnJlYWQobykpOwotICAgIHJldHVybiBuZXcgZy5QYXRoKHRoaXMucmVhZGVyLnJlYWQodmFsdWVbJ2xhYmVscyddKSwgb2JqZWN0cyk7Ci0gIH0KLX0KLQotY2xhc3MgUGF0aDNTZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICBkZXNlcmlhbGl6ZShvYmopIHsKLSAgICBjb25zdCB2YWx1ZSA9IG9ialt2YWx1ZUtleV07Ci0gICAgcmV0dXJuIG5ldyBnLlBhdGgodGhpcy5yZWFkZXIucmVhZCh2YWx1ZVsnbGFiZWxzJ10pLCB0aGlzLnJlYWRlci5yZWFkKHZhbHVlWydvYmplY3RzJ10pKTsKLSAgfQotfQotCi1jbGFzcyBUU2VyaWFsaXplciBleHRlbmRzIFR5cGVTZXJpYWxpemVyIHsKLSAgZGVzZXJpYWxpemUob2JqKSB7Ci0gICAgcmV0dXJuIHQudFtvYmpbdmFsdWVLZXldXTsKLSAgfQotfQotCi1jbGFzcyBEaXJlY3Rpb25TZXJpYWxpemVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXIgewotICBkZXNlcmlhbGl6ZShvYmopIHsKLSAgICByZXR1cm4gdC5kaXJlY3Rpb25bb2JqW3ZhbHVlS2V5XS50b0xvd2VyQ2FzZSgpXTsKLSAgfQotfQotCi1jbGFzcyBBcnJheVNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKHR5cGVLZXkpIHsKLSAgICBzdXBlcigpOwotICAgIHRoaXMudHlwZUtleSA9IHR5cGVLZXk7Ci0gIH0KLQotICBkZXNlcmlhbGl6ZShvYmopIHsKLSAgICBjb25zdCB2YWx1ZSA9IG9ialt2YWx1ZUtleV07Ci0gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBBcnJheSwgb2J0YWluZWQ6ICcgKyB2YWx1ZSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZS5tYXAoKHgpID0+IHRoaXMucmVhZGVyLnJlYWQoeCkpOwotICB9Ci0KLSAgLyoqIEBwYXJhbSB7QXJyYXl9IGl0ZW0gKi8KLSAgc2VyaWFsaXplKGl0ZW0pIHsKLSAgICByZXR1cm4gewotICAgICAgW3R5cGVLZXldOiB0aGlzLnR5cGVLZXksCi0gICAgICBbdmFsdWVLZXldOiBpdGVtLm1hcCgoeCkgPT4gdGhpcy53cml0ZXIuYWRhcHRPYmplY3QoeCkpLAotICAgIH07Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7Ci0gIH0KLX0KLQotY2xhc3MgQnVsa1NldFNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIGRlc2VyaWFsaXplKG9iaikgewotICAgIGNvbnN0IHZhbHVlID0gb2JqW3ZhbHVlS2V5XTsKLSAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBvYnRhaW5lZDogJyArIHZhbHVlKTsKLSAgICB9Ci0KLSAgICAvLyBjb2VyY2UgdGhlIEJ1bGtTZXQgdG8gTGlzdC4gaWYgdGhlIGJ1bGsgZXhjZWVkcyB0aGUgaW50IHNwYWNlIHRoZW4gd2UgY2FuJ3QgY29lcmNlIHRvIExpc3QgYW55d2F5LAotICAgIC8vIHNvIHRoaXMgcXVlcnkgd2lsbCBiZSB0cm91YmxlLiB3ZSdkIG5lZWQgYSBsZWdpdCBCdWxrU2V0IGltcGxlbWVudGF0aW9uIGhlcmUgaW4ganMuIHRoaXMgY3VycmVudAotICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIGhlcmUgdG8gcmVwbGljYXRlIHRoZSBwcmV2aW91cyBmdW5jdGlvbmFsaXR5IHRoYXQgZXhpc3RlZCBvbiB0aGUgc2VydmVyIHNpZGUgaW4KLSAgICAvLyBwcmV2aW91cyB2ZXJzaW9ucy4KLSAgICBsZXQgcmVzdWx0ID0gW107Ci0gICAgZm9yIChsZXQgaXggPSAwLCBpeSA9IHZhbHVlLmxlbmd0aDsgaXggPCBpeTsgaXggKz0gMikgewotICAgICAgY29uc3QgcGFpciA9IHZhbHVlLnNsaWNlKGl4LCBpeCArIDIpOwotICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChBcnJheSh0aGlzLnJlYWRlci5yZWFkKHBhaXJbMV0pKS5maWxsKHRoaXMucmVhZGVyLnJlYWQocGFpclswXSkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci19Ci0KLWNsYXNzIE1hcFNlcmlhbGl6ZXIgZXh0ZW5kcyBUeXBlU2VyaWFsaXplciB7Ci0gIGRlc2VyaWFsaXplKG9iaikgewotICAgIGNvbnN0IHZhbHVlID0gb2JqW3ZhbHVlS2V5XTsKLSAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7Ci0gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBvYnRhaW5lZDogJyArIHZhbHVlKTsKLSAgICB9Ci0gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpOwotICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpICs9IDIpIHsKLSAgICAgIHJlc3VsdC5zZXQodGhpcy5yZWFkZXIucmVhZCh2YWx1ZVtpXSksIHRoaXMucmVhZGVyLnJlYWQodmFsdWVbaSArIDFdKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKiogQHBhcmFtIHtNYXB9IG1hcCAqLwotICBzZXJpYWxpemUobWFwKSB7Ci0gICAgY29uc3QgYXJyID0gW107Ci0gICAgbWFwLmZvckVhY2goKHYsIGspID0+IHsKLSAgICAgIGFyci5wdXNoKHRoaXMud3JpdGVyLmFkYXB0T2JqZWN0KGspKTsKLSAgICAgIGFyci5wdXNoKHRoaXMud3JpdGVyLmFkYXB0T2JqZWN0KHYpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gewotICAgICAgW3R5cGVLZXldOiAnZzpNYXAnLAotICAgICAgW3ZhbHVlS2V5XTogYXJyLAotICAgIH07Ci0gIH0KLQotICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKLSAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBNYXA7Ci0gIH0KLX0KLQotY2xhc3MgTGlzdFNlcmlhbGl6ZXIgZXh0ZW5kcyBBcnJheVNlcmlhbGl6ZXIgewotICBjb25zdHJ1Y3RvcigpIHsKLSAgICBzdXBlcignZzpMaXN0Jyk7Ci0gIH0KLX0KLQotY2xhc3MgU2V0U2VyaWFsaXplciBleHRlbmRzIEFycmF5U2VyaWFsaXplciB7Ci0gIGNvbnN0cnVjdG9yKCkgewotICAgIHN1cGVyKCdnOlNldCcpOwotICB9Ci0KLSAgZGVzZXJpYWxpemUob2JqKSB7Ci0gICAgcmV0dXJuIG5ldyBTZXQoc3VwZXIuZGVzZXJpYWxpemUob2JqKSk7Ci0gIH0KLQotICBzZXJpYWxpemUoaXRlbSkgewotICAgIHJldHVybiB7Ci0gICAgICBbdHlwZUtleV06IHRoaXMudHlwZUtleSwKLSAgICAgIFt2YWx1ZUtleV06IFsuLi5pdGVtXS5tYXAoKHgpID0+IHRoaXMud3JpdGVyLmFkYXB0T2JqZWN0KHgpKSwKLSAgICB9OwotICB9Ci0KLSAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7Ci0gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgU2V0OwotICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICBCdWxrU2V0U2VyaWFsaXplciwKLSAgQnl0ZWNvZGVTZXJpYWxpemVyLAotICBDbGFzc1NlcmlhbGl6ZXIsCi0gIERhdGVTZXJpYWxpemVyLAotICBPZmZzZXREYXRlVGltZVNlcmlhbGl6ZXIsCi0gIERpcmVjdGlvblNlcmlhbGl6ZXIsCi0gIEVkZ2VTZXJpYWxpemVyLAotICBFbnVtU2VyaWFsaXplciwKLSAgTGFtYmRhU2VyaWFsaXplciwKLSAgTGlzdFNlcmlhbGl6ZXIsCi0gIExvbmdTZXJpYWxpemVyLAotICBNYXBTZXJpYWxpemVyLAotICBOdW1iZXJTZXJpYWxpemVyLAotICBQYXRoM1NlcmlhbGl6ZXIsCi0gIFBhdGhTZXJpYWxpemVyLAotICBQcm9wZXJ0eVNlcmlhbGl6ZXIsCi0gIFBTZXJpYWxpemVyLAotICBUZXh0UFNlcmlhbGl6ZXIsCi0gIFNldFNlcmlhbGl6ZXIsCi0gIFRTZXJpYWxpemVyLAotICBUcmF2ZXJzZXJTZXJpYWxpemVyLAotICBUcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIsCi0gIHR5cGVLZXksCi0gIHZhbHVlS2V5LAotICBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIsCi0gIFZlcnRleFNlcmlhbGl6ZXIsCi19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi91dGlscy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9saWIvdXRpbHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhYTU2MDkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi91dGlscy5qcworKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEEgbW9kdWxlIGNvbnRhaW5pbmcgYW55IHV0aWxpdHkgZnVuY3Rpb25zLgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXVpZCA9IHJlcXVpcmUoJ3V1aWQnKTsKLQotY29uc3QgZ3JlbWxpblZlcnNpb24gPSAnMy44LjItU05BUFNIT1QnOyAvLyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgotCi1leHBvcnRzLnRvTG9uZyA9IGZ1bmN0aW9uIHRvTG9uZyh2YWx1ZSkgewotICByZXR1cm4gbmV3IExvbmcodmFsdWUpOwotfTsKLQotY29uc3QgTG9uZyA9IChleHBvcnRzLkxvbmcgPSBmdW5jdGlvbiBMb25nKHZhbHVlKSB7Ci0gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHsKLSAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlcicpOwotICB9Ci0gIHRoaXMudmFsdWUgPSB2YWx1ZS50b1N0cmluZygpOwotfSk7Ci0KLWV4cG9ydHMuZ2V0VXVpZCA9IGZ1bmN0aW9uIGdldFV1aWQoKSB7Ci0gIC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBgZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRGAgb25jZSBzdXBwb3J0ZWQgTm9kZSB2ZXJzaW9uIGlzIGJ1bXAgdG8gPj0xOQotICByZXR1cm4gdXVpZC52NCgpOwotfTsKLQotZXhwb3J0cy5lbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZShbXSk7Ci0KLWNsYXNzIEltbXV0YWJsZU1hcCBleHRlbmRzIE1hcCB7Ci0gIGNvbnN0cnVjdG9yKGl0ZXJhYmxlKSB7Ci0gICAgc3VwZXIoaXRlcmFibGUpOwotICB9Ci0KLSAgc2V0KCkgewotICAgIHJldHVybiB0aGlzOwotICB9Ci0KLSAgWydkZWxldGUnXSgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBjbGVhcigpIHt9Ci19Ci0KLWV4cG9ydHMuSW1tdXRhYmxlTWFwID0gSW1tdXRhYmxlTWFwOwotCi1hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU5vZGVVc2VyQWdlbnQoKSB7Ci0gIGNvbnN0IG9zID0gYXdhaXQgaW1wb3J0KCdub2RlOm9zJyk7Ci0KLSAgY29uc3QgYXBwbGljYXRpb25OYW1lID0gKHByb2Nlc3M/LmVudi5ucG1fcGFja2FnZV9uYW1lID8/ICdOb3RBdmFpbGFibGUnKS5yZXBsYWNlKCdfJywgJyAnKTsKLSAgbGV0IHJ1bnRpbWVWZXJzaW9uOwotICBsZXQgb3NOYW1lOwotICBsZXQgb3NWZXJzaW9uOwotICBsZXQgY3B1QXJjaDsKLSAgcnVudGltZVZlcnNpb24gPSBvc05hbWUgPSBvc1ZlcnNpb24gPSBjcHVBcmNoID0gJ05vdEF2YWlsYWJsZSc7Ci0gIGlmIChwcm9jZXNzICE9IG51bGwpIHsKLSAgICBpZiAocHJvY2Vzcy52ZXJzaW9uKSB7Ci0gICAgICBydW50aW1lVmVyc2lvbiA9IHByb2Nlc3MudmVyc2lvbi5yZXBsYWNlKCcgJywgJ18nKTsKLSAgICB9Ci0gICAgaWYgKHByb2Nlc3MuYXJjaCkgewotICAgICAgY3B1QXJjaCA9IHByb2Nlc3MuYXJjaC5yZXBsYWNlKCcgJywgJ18nKTsKLSAgICB9Ci0gIH0KLQotICBpZiAob3MgIT0gbnVsbCkgewotICAgIG9zTmFtZSA9IG9zLnBsYXRmb3JtKCkucmVwbGFjZSgnICcsICdfJyk7Ci0gICAgb3NWZXJzaW9uID0gb3MucmVsZWFzZSgpLnJlcGxhY2UoJyAnLCAnXycpOwotICB9Ci0KLSAgY29uc3QgdXNlckFnZW50ID0gYCR7YXBwbGljYXRpb25OYW1lfSBHcmVtbGluLUphdmFzY3JpcHQuJHtncmVtbGluVmVyc2lvbn0gJHtydW50aW1lVmVyc2lvbn0gJHtvc05hbWV9LiR7b3NWZXJzaW9ufSAke2NwdUFyY2h9YDsKLQotICByZXR1cm4gdXNlckFnZW50OwotfQotCi1leHBvcnRzLmdldFVzZXJBZ2VudEhlYWRlciA9IGZ1bmN0aW9uIGdldFVzZXJBZ2VudEhlYWRlcigpIHsKLSAgcmV0dXJuICdVc2VyLUFnZW50JzsKLX07Ci0KLWV4cG9ydHMuZ2V0VXNlckFnZW50ID0gYXN5bmMgKCkgPT4gewotICBpZiAoJ25hdmlnYXRvcicgaW4gZ2xvYmFsVGhpcykgewotICAgIHJldHVybiBnbG9iYWxUaGlzLm5hdmlnYXRvci51c2VyQWdlbnQ7Ci0gIH0KLQotICBpZiAocHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGUgIT09IHVuZGVmaW5lZCkgewotICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZU5vZGVVc2VyQWdlbnQoKTsKLSAgfQotCi0gIHJldHVybiB1bmRlZmluZWQ7Ci19OwotCi0vKioKLSAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIKLSAqIEByZXR1cm5zIHtBcnJheUJ1ZmZlcn0KLSAqLwotY29uc3QgdG9BcnJheUJ1ZmZlciA9IChidWZmZXIpID0+IGJ1ZmZlci5idWZmZXIuc2xpY2UoYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlT2Zmc2V0ICsgYnVmZmVyLmJ5dGVMZW5ndGgpOwotCi1leHBvcnRzLnRvQXJyYXlCdWZmZXIgPSB0b0FycmF5QnVmZmVyOwotCi1jb25zdCBEZWZlcnJlZFByb21pc2UgPSAoKSA9PiB7Ci0gIGxldCByZXNvbHZlID0gKHZhbHVlKSA9PiB7fTsKLSAgbGV0IHJlamVjdCA9IChyZWFzb24pID0+IHt9OwotCi0gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUsIF9yZWplY3QpID0+IHsKLSAgICByZXNvbHZlID0gX3Jlc29sdmU7Ci0gICAgcmVqZWN0ID0gX3JlamVjdDsKLSAgfSk7Ci0KLSAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvbWlzZSwgeyByZXNvbHZlLCByZWplY3QgfSk7Ci19OwotCi1tb2R1bGUuZXhwb3J0cy5EZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvcGFja2FnZS1sb2NrLmpzb24gYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvcGFja2FnZS1sb2NrLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZmY0NzYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3BhY2thZ2UtbG9jay5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzUzNSArMCwwIEBACi17Ci0gICJuYW1lIjogImdyZW1saW4iLAotICAidmVyc2lvbiI6ICIzLjguMi1hbHBoYTEiLAotICAibG9ja2ZpbGVWZXJzaW9uIjogMywKLSAgInJlcXVpcmVzIjogdHJ1ZSwKLSAgInBhY2thZ2VzIjogewotICAgICIiOiB7Ci0gICAgICAibmFtZSI6ICJncmVtbGluIiwKLSAgICAgICJ2ZXJzaW9uIjogIjMuOC4yLWFscGhhMSIsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJidWZmZXIiOiAiXjYuMC4zIiwKLSAgICAgICAgImV2ZW50ZW1pdHRlcjMiOiAiXjUuMC4xIiwKLSAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICJeNC41LjIiLAotICAgICAgICAidXVpZCI6ICJeOS4wLjEiLAotICAgICAgICAid3MiOiAiXjguMTYuMCIKLSAgICAgIH0sCi0gICAgICAiZGV2RGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL2N1Y3VtYmVyIjogIn4xMi43LjAiLAotICAgICAgICAiQGVzbGludC9qcyI6ICJeOS4xNi4wIiwKLSAgICAgICAgImNoYWkiOiAifjQuNS4wIiwKLSAgICAgICAgImNoYWktc3RyaW5nIjogIn4xLjUuMCIsCi0gICAgICAgICJjb2xvcnMiOiAiMS40LjAiLAotICAgICAgICAiY3Jvc3MtZW52IjogIl4xMC4xLjAiLAotICAgICAgICAiZXNsaW50IjogIl45LjM2LjAiLAotICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMTAuMC4xIiwKLSAgICAgICAgImVzbGludC1wbHVnaW4tcHJldHRpZXIiOiAiXjUuMC4wIiwKLSAgICAgICAgImdsb2JhbHMiOiAiXjE1LjE0LjAiLAotICAgICAgICAianMteWFtbCI6ICJeMy4xNC4yIiwKLSAgICAgICAgImpzZG9jIjogIl40LjAuNSIsCi0gICAgICAgICJtb2NoYSI6ICJeMTEuNy41IiwKLSAgICAgICAgInByZXR0aWVyIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0yMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2NvZGUtZnJhbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9jb2RlLWZyYW1lLy0vY29kZS1mcmFtZS03LjI5LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlOaENlWWpxOSszdXhnZHRwMjBMU2lKWEp2TjBGZUN0TkdwSnh1TUZaMUt2M2NXVU5iNkRPaEp3VXZjVkN6S0dSNjZjdzRuandNNmhySkxxZ093YmN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IiwKLSAgICAgICAgImpzLXRva2VucyI6ICJeNC4wLjAiLAotICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItc3RyaW5nLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyLy0vaGVscGVyLXN0cmluZy1wYXJzZXItNy4yNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xTWxTeEticFJsQXJpZERFeGs5Mm5Tb2J5RGRwUGlqVXEyRFc2b0RuVXFkMGlPR3htUWp5cWhNSWloSTkrenY0TFB5WmRSamUyY2F2V1BiQ2JXbTNlQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI4LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIvLS9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXItNy4yOC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xU3M0aWZ3ektKU1YzOXVjTmpzdmM2V1ZIczZiN1MwM3NPaDJPY0hGOVVIZlZQcVdXQUxVc05VVnpoU0JpSXRqUlpvTEh4N25JYXJWanFLVnVzVVoxUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wYXJzZXIvLS9wYXJzZXItNy4yOS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JeURnRlY1R2VEVVZYNFlkRi8zQ1BVTHRWR1NYWE1MaDF4VklnZENneEFwa3RxblFWMHI3LzhOcXRoZys4WUxHYUF0ZHlJbG8ycUlkWnJiQ3Y0Kzd3dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJwYXJzZXIiOiAiYmluL2JhYmVsLXBhcnNlci5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvdHlwZXMvLS90eXBlcy03LjI5LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUx3ZFpIcFNjTTRRejhYdzJpS1N6UytjZmdsWnpKR3ZvZlFJQ3k3Vzd2NGNhcnU0RWFBbXlVdU82QkdyYnlRMm1ZVjExVzBVOGo1bUJoZDE0ZGQzQjBBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogIl43LjI3LjEiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY29sb3JzL2NvbG9ycy8tL2NvbG9ycy0xLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb29XQ3JsWlAxMWk4R0ltU2pUSFlITGt2RkRQNDhuUzQrMjA0bkdiMVJpWC9XWFlIbUpBMklJSTkvZTJEV1ZhYkNFU2RXN2hCQUV6SFJxVW45T1VWdlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEuOTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9jaS1lbnZpcm9ubWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL2NpLWVudmlyb25tZW50Ly0vY2ktZW52aXJvbm1lbnQtMTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jcyszTnpmTmtHYmNtSFBkZGpFdjRUS0ZpQnBaUlE2V0pFRXVmQjltdytFeFMyMlYvNFIvenBEU0VHK2ZzSi9pU05DZDZBMnNBVGRZOFBGT3lZM1luQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9jdWN1bWJlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEyLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL2N1Y3VtYmVyLy0vY3VjdW1iZXItMTIuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03QS85Q0pwSkR4djFTUTdoQVpVMHpQbjJ5Unh4NlhNUitMTzRUOTRFbm0zY1lOV3NFRWorUkdYMzhOTFg0SU5UK0g2dzVyYVgzQ3NiL3FzNHZVQnNPQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjdWN1bWJlci9jaS1lbnZpcm9ubWVudCI6ICIxMy4wLjAiLAotICAgICAgICAiQGN1Y3VtYmVyL2N1Y3VtYmVyLWV4cHJlc3Npb25zIjogIjE5LjAuMCIsCi0gICAgICAgICJAY3VjdW1iZXIvZ2hlcmtpbiI6ICIzOC4wLjAiLAotICAgICAgICAiQGN1Y3VtYmVyL2doZXJraW4tc3RyZWFtcyI6ICI2LjAuMCIsCi0gICAgICAgICJAY3VjdW1iZXIvZ2hlcmtpbi11dGlscyI6ICIxMS4wLjAiLAotICAgICAgICAiQGN1Y3VtYmVyL2h0bWwtZm9ybWF0dGVyIjogIjIzLjAuMCIsCi0gICAgICAgICJAY3VjdW1iZXIvanVuaXQteG1sLWZvcm1hdHRlciI6ICIwLjkuMCIsCi0gICAgICAgICJAY3VjdW1iZXIvbWVzc2FnZS1zdHJlYW1zIjogIjQuMC4xIiwKLSAgICAgICAgIkBjdWN1bWJlci9tZXNzYWdlcyI6ICIzMi4wLjEiLAotICAgICAgICAiQGN1Y3VtYmVyL3ByZXR0eS1mb3JtYXR0ZXIiOiAiMS4wLjEiLAotICAgICAgICAiQGN1Y3VtYmVyL3RhZy1leHByZXNzaW9ucyI6ICI5LjEuMCIsCi0gICAgICAgICJhc3NlcnRpb24tZXJyb3ItZm9ybWF0dGVyIjogIl4zLjAuMCIsCi0gICAgICAgICJjYXBpdGFsLWNhc2UiOiAiXjEuMC40IiwKLSAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCi0gICAgICAgICJjbGktdGFibGUzIjogIjAuNi41IiwKLSAgICAgICAgImNvbW1hbmRlciI6ICJeMTQuMC4wIiwKLSAgICAgICAgImRlYnVnIjogIl40LjMuNCIsCi0gICAgICAgICJlcnJvci1zdGFjay1wYXJzZXIiOiAiXjIuMS40IiwKLSAgICAgICAgImZpZ3VyZXMiOiAiXjMuMi4wIiwKLSAgICAgICAgImdsb2IiOiAiXjEzLjAuMCIsCi0gICAgICAgICJoYXMtYW5zaSI6ICJeNC4wLjEiLAotICAgICAgICAiaW5kZW50LXN0cmluZyI6ICJeNC4wLjAiLAotICAgICAgICAiaXMtaW5zdGFsbGVkLWdsb2JhbGx5IjogIl4wLjQuMCIsCi0gICAgICAgICJpcy1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgImtudXRoLXNodWZmbGUtc2VlZGVkIjogIl4xLjAuNiIsCi0gICAgICAgICJsb2Rhc2gubWVyZ2UiOiAiXjQuNi4yIiwKLSAgICAgICAgImxvZGFzaC5tZXJnZXdpdGgiOiAiXjQuNi4yIiwKLSAgICAgICAgImx1eG9uIjogIjMuNy4yIiwKLSAgICAgICAgIm1pbWUiOiAiXjMuMC4wIiwKLSAgICAgICAgIm1rZGlycCI6ICJeMy4wLjAiLAotICAgICAgICAibXoiOiAiXjIuNy4wIiwKLSAgICAgICAgInByb2dyZXNzIjogIl4yLjAuMyIsCi0gICAgICAgICJyZWFkLXBhY2thZ2UtdXAiOiAiXjEyLjAuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiNy43LjQiLAotICAgICAgICAic3RyaW5nLWFyZ3YiOiAiMC4zLjEiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMS4xIiwKLSAgICAgICAgInR5cGUtZmVzdCI6ICJeNC40MS4wIiwKLSAgICAgICAgInV0aWwtYXJpdHkiOiAiXjEuMS4wIiwKLSAgICAgICAgInlhbWwiOiAiXjIuMi4yIiwKLSAgICAgICAgInl1cCI6ICIxLjcuMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiY3VjdW1iZXItanMiOiAiYmluL2N1Y3VtYmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIyMCB8fCAyMiB8fCA+PTI0IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2N1Y3VtYmVyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3VjdW1iZXIvY3VjdW1iZXItZXhwcmVzc2lvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxOS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci9jdWN1bWJlci1leHByZXNzaW9ucy8tL2N1Y3VtYmVyLWV4cHJlc3Npb25zLTE5LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEZLb09RaDJVZjZGNi9MbisxT3h1SzhMa1RnNlB5QXFla2hmMkl4OHpxVjJNNTRzSCttN1hOSk5MaE9GT0FXL3Q5bnh6UmJ3MkNjdlhiQ0xqY3ZIWmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZWdleHAtbWF0Y2gtaW5kaWNlcyI6ICIxLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2doZXJraW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzOC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci9naGVya2luLy0vZ2hlcmtpbi0zOC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWR1RVhLK0tEZlFVenUzdnNTelhqa3hRMnRpckY1UFJzYzFYcnRzNlRIS0hKTzZtanc0UmpNOFJWK3ZsaXVEYXNtaGhybWRMY09jTTdkOW51ck5USkt3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIj49MzEuMC4wIDwzMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2doZXJraW4tc3RyZWFtcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvZ2hlcmtpbi1zdHJlYW1zLy0vZ2hlcmtpbi1zdHJlYW1zLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ITFNITW1kREgwdkNyN3ZzVkVVUmNEQTRXd25STGRqa2hxcjZhNEhRM2k0UkZLMXdpREdQakJHVmRHSkx5dVh1UmRKcEpiRmM2UXhIdlQ4cFU0dDZqdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbW1hbmRlciI6ICIxNC4wLjAiLAotICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIjAuNS4yMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiZ2hlcmtpbi1qYXZhc2NyaXB0IjogImJpbi9naGVya2luIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL2doZXJraW4iOiAiPj0yMi4wLjAiLAotICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2Utc3RyZWFtcyI6ICI+PTQuMC4wIiwKLSAgICAgICAgIkBjdWN1bWJlci9tZXNzYWdlcyI6ICI+PTE3LjEuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2doZXJraW4tc3RyZWFtcy9ub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMTQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXItMTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0ydU05cllqUHZ5cTM5TndMUnFhaUx0V0h5REMxRnZyeUpEYTJBVFRWaW1zNVlBUzRQdXBzRVFzRHZQMTRGcWhGcjBQNDlDWUR1Z2k1OXhheEpsVFhSQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9naGVya2luLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMTEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvZ2hlcmtpbi11dGlscy8tL2doZXJraW4tdXRpbHMtMTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MSitzNCtUZXBIVGdkS1dEUjR6YlB5VDdyUWptWUljdWtUd05id053Z3FyNmk4R2pjbXpmNk5tdGJZREExOW0xWkZnNmtXYkZzbUhuajM3WnVYK2taQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjdWN1bWJlci9naGVya2luIjogIl4zOC4wLjAiLAotICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIl4zMi4wLjAiLAotICAgICAgICAiQHRlcHBlaXMvbXVsdGltYXBzIjogIjMuMC4wIiwKLSAgICAgICAgImNvbW1hbmRlciI6ICIxNC4wLjIiLAotICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIl4wLjUuMjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImdoZXJraW4tdXRpbHMiOiAiYmluL2doZXJraW4tdXRpbHMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9naGVya2luLXV0aWxzL25vZGVfbW9kdWxlcy9jb21tYW5kZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0xNC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVR5d29XTk5SYmhvRDBCWHMxUDNaRVNjVzhXNWlLcm5iaXRoSWwwWUgrdUNtQmQwUXBQT0E4eWM4MkRTM0JJRTVNYTZGbkJWVXNKN3dWVUR6NGR2T1dRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0yMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2h0bWwtZm9ybWF0dGVyIjogewotICAgICAgInZlcnNpb24iOiAiMjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvaHRtbC1mb3JtYXR0ZXIvLS9odG1sLWZvcm1hdHRlci0yMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVd3Y1J6ZE04SXh5NGU1M2orRnJtM2ZLTTVyTnVJeVdVZnk0SGFqRU4rWGsvWWNqQTZ5VzBBQ0dURkRSZUIrK1ZEWnovaVV0d1lkVGxQUlkzNk5icUpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBjdWN1bWJlci9tZXNzYWdlcyI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3VjdW1iZXIvanVuaXQteG1sLWZvcm1hdHRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvanVuaXQteG1sLWZvcm1hdHRlci8tL2p1bml0LXhtbC1mb3JtYXR0ZXItMC45LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdGK0E3cEJhWHBLTUQxaTdLNTlOazU1MTl6ajRleHR4WTQrNG5TZ3Y1WExzR1hIRGYxZ0puYjg0QmtMVXpldk50cDJvMlF6TUcwdldMd1NtOFY1Ymx3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL3F1ZXJ5IjogIl4xNC4wLjEiLAotICAgICAgICAiQHRlcHBlaXMvbXVsdGltYXBzIjogIl4zLjAuMCIsCi0gICAgICAgICJsdXhvbiI6ICJeMy41LjAiLAotICAgICAgICAieG1sYnVpbGRlciI6ICJeMTUuMS4xIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9tZXNzYWdlLXN0cmVhbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL21lc3NhZ2Utc3RyZWFtcy8tL21lc3NhZ2Utc3RyZWFtcy00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3hhcDl1UDVqRDh0SFVaVmpUV2d6eGVtaS8wdU9zYkdqZDRMQk9TeGNKb09DUmJFU0Z3ZW1VemlsSnV6TlRCOHBjVFFVaDhENW91ZFV5eGZrSk9LbUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIj49MTcuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3VjdW1iZXIvbWVzc2FnZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci9tZXNzYWdlcy8tL21lc3NhZ2VzLTMyLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMU9Tb1crR1F2RlVOQWw2dGRQMkNUQmV4VFhNTkpGMDA5NGdvVlVjdnVndFFlWHRKMEs4c0NQMHhicTdHR29pZXpzL2VKQUFPRDAzK3pBUFQ2NG9ySFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjbGFzcy10cmFuc2Zvcm1lciI6ICIwLjUuMSIsCi0gICAgICAgICJyZWZsZWN0LW1ldGFkYXRhIjogIjAuMi4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY3VjdW1iZXIvcHJldHR5LWZvcm1hdHRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvcHJldHR5LWZvcm1hdHRlci8tL3ByZXR0eS1mb3JtYXR0ZXItMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUExbFU0VlZQMGFVV2RPVG1wZHp2WE95RVl1UHRCREkweFl3WUpubW9NRHBsenhNZGhjSGs4Nmx5eXZZRG9Nb1B6enE2T2tPRTNpc3Vvc3ZVVTRYN0lRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKLSAgICAgICAgImNsaS10YWJsZTMiOiAiXjAuNi4wIiwKLSAgICAgICAgImZpZ3VyZXMiOiAiXjMuMi4wIiwKLSAgICAgICAgInRzLWRlZGVudCI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAY3VjdW1iZXIvY3VjdW1iZXIiOiAiPj03LjAuMCIsCi0gICAgICAgICJAY3VjdW1iZXIvbWVzc2FnZXMiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL3F1ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMTQuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvcXVlcnkvLS9xdWVyeS0xNC43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZpcVo0Z01FZ1lqbWJ1V3Byb0YvWWVDZEQ1eStnRDJCcWdCSUdicGloT3N4NlVsTnN5em9EU2ZPK1RueTBxNjVEeGZLK3BIbzJVa1B5RWw3ZE83d21RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHRlcHBlaXMvbXVsdGltYXBzIjogIjMuMC4wIiwKLSAgICAgICAgImxvZGFzaC5zb3J0YnkiOiAiXjQuNy4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci90YWctZXhwcmVzc2lvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL3RhZy1leHByZXNzaW9ucy8tL3RhZy1leHByZXNzaW9ucy05LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnZIamNSRlorSjFUcUlhOWVGTk8xd0dIcXd4NFY5WktWM2hZZ2t1Sy9WYWhIeDczdWlQNHJLVjNKVnJ2V1NNcndyRnZKRzZDOGFFd25DV1N2YnlGZFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXBpYy13ZWIvaW52YXJpYW50IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlcGljLXdlYi9pbnZhcmlhbnQvLS9pbnZhcmlhbnQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxyVFBxZ3ZmRlF0Ui9lWS9xa0l6cDk4T0dkTkp1MG01amkzcS9uSkk4djNTWGtSS0VuV2lPeE1tYnZjU29BSXp2L2NHaXV2Unk1N2s0c3VLUVNBZHdBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNC45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscy8tL2VzbGludC11dGlscy00LjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGhyWW1OaVlwcFI3em5GRWRxZ2ZXSFhSNk5Da1pFSzdod1dESFpVaml0LzIvVTByNlh2a0RsMFNZbm9NNTFIcTdGaENHZExEVDZ6eENDT1kxaGV4c1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQtdmlzaXRvci1rZXlzIjogIl4zLjQuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNsaW50IjogIl42LjAuMCB8fCBeNy4wLjAgfHwgPj04LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXV0aWxzL25vZGVfbW9kdWxlcy9lc2xpbnQtdmlzaXRvci1rZXlzIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC12aXNpdG9yLWtleXMvLS9lc2xpbnQtdmlzaXRvci1rZXlzLTMuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13cGMrTFhlaXlpaXN4UGxFa1V6VTZzdnlTMWZySU8zTWd4ajFmZHk3UG04WWd6Z3VheDJOM0ZhL0QvYWcxV3FiT3ByZEkrdVk2d01VbDgvYTJHK2lhZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMTIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcC8tL3JlZ2V4cHAtNC4xMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FcmlTVGx0NU9DOS83U1hrUlNDQWhmU3h4b1NVZ0JtMzNPSCtJa3diZHBnb3FzU3NVZzd5M3VoK0lJQ0kvUWc0QkJXcjNVMmkzOVJwbXljYnhNcTRldz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4wLjAgfHwgXjE0LjAuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9jb25maWctYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIxLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvY29uZmlnLWFycmF5Ly0vY29uZmlnLWFycmF5LTAuMjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbkpsMktHVGxyZjlHakxpbWdJcnUrVi9temdTSzBBQkNEUVJ2eHc1QmpVUkw3V2ZINXVvV21pemJIN1FCNk1tbk1CZDhjSUM5dWNlV25lekwxVlpXV3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZXNsaW50L29iamVjdC1zY2hlbWEiOiAiXjIuMS43IiwKLSAgICAgICAgImRlYnVnIjogIl40LjMuMSIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L2NvbmZpZy1oZWxwZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvY29uZmlnLWhlbHBlcnMvLS9jb25maWctaGVscGVycy0wLjQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0JyeE44OGdPSWYzUjdqYTVLOXNsd05heVZjWmdLNlNPVU9SbTJ1QnpUZUlFZmVWYUloT3BDdFRveDNQNlI3bzJqTEZ3TEZUTG5DN2tVL1JHY1lFZ3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZXNsaW50L2NvcmUiOiAiXjAuMTcuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2NvcmUvLS9jb3JlLTAuMTcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteUwvc0xycG10RGFGRWlVajFvc1JQNFRJMk1EejFBZGRKTCtqWjdLU3F2QnVsaU40eHFZWTU0SWZkTjhxRDhUb2E2ZzFpbG9waDFmeFFOa2pPeHJycFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvanNvbi1zY2hlbWEiOiAiXjcuMC4xNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9lc2xpbnRyYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2VzbGludHJjLy0vZXNsaW50cmMtMy4zLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRJbEp4MFgwcWZ0VnNONUUrL3ZHdWpUUklGdHd1TGJOc1ZVZTdUTzZ6WVBEUjFPNm5Gd3Z3aElLRUtTcmw2ZFpjaG1ZQklUYXp4S29VWU9qZHRqbFJnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWp2IjogIl42LjE0LjAiLAotICAgICAgICAiZGVidWciOiAiXjQuMy4yIiwKLSAgICAgICAgImVzcHJlZSI6ICJeMTAuMC4xIiwKLSAgICAgICAgImdsb2JhbHMiOiAiXjE0LjAuMCIsCi0gICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKLSAgICAgICAgImltcG9ydC1mcmVzaCI6ICJeMy4yLjEiLAotICAgICAgICAianMteWFtbCI6ICJeNC4xLjEiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuNSIsCi0gICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIl4zLjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2FyZ3BhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgrOVdxZWJiRnpwWDlPUitXYTZPMjlhc0lvZ2VSTXpjR3RBSU5kcE1ISHlBZzEwZjA1YVNGVkJiY0VxR2YvUFh3MUVqQVorcTIvYkVCZzNEdnVySzNRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9lc2xpbnRyYy9ub2RlX21vZHVsZXMvZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFscy8tL2dsb2JhbHMtMTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vYWhHdnVNR1FsUHcvaXZJWUJqVlNyV0FmV0xCZWt1NXRwUEUyZk9QTGkrV0hmZklXYnVoMnRDamh5UWhUQlBNZjVFOWpERUg0Rk9tVFlnWXdiS3d0UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9lc2xpbnRyYy9ub2RlX21vZHVsZXMvanMteWFtbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC00LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVFLVDR6UXhYbDhsTHdCdEhNV3dhVGNHZkZPWnZpT0pldDNPeS94bUdrMmdaSDY3N0NKTTlFdnRmZFNrZ1djQVRaaGovNTVKWjBybXkzbXlDVDVsc0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcmdwYXJzZSI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImpzLXlhbWwiOiAiYmluL2pzLXlhbWwuanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjM5LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvanMvLS9qcy05LjM5LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5FN0RFSWNodnRpRlR3Qnc0TGZidTU5UEcra0NvZmhqc0thQ1d6eFRwdDRsZlJqUk1xRzZ1TUJ6S1h1RWN5WGhPSG9VcDlyaUFtNy9hV1lHaFhaOWN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2VzbGludC5vcmcvZG9uYXRlIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L29iamVjdC1zY2hlbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9vYmplY3Qtc2NoZW1hLy0vb2JqZWN0LXNjaGVtYS0yLjEuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVnRBT2F5bVdWZlpjbVpicDZFMm15bXBESUh2eWpYcy8xMkxxV1lqVnc2cWpyZkYrVksrZnlHMzNrQ2h6M25uSytTVTUvTmVIT3FyVEVIUzhzWE8zT0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L3BsdWdpbi1raXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9wbHVnaW4ta2l0Ly0vcGx1Z2luLWtpdC0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDMvcXRyRFVva3I3TEpxb0YyYzMrUkludS90NHpmcnBZZG9TRGZZeWhnNTJyd0xWNlRuT3ZkRzRmWG03SWtTQjN3RXJrY21KUzlpRWhqVnRPU0VqakE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZXNsaW50L2NvcmUiOiAiXjAuMTcuMCIsCi0gICAgICAgICJsZXZuIjogIl4wLjQuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGh1bWFuZnMvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTkuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFuZnMvY29yZS8tL2NvcmUtMC4xOS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01RHlRNCsxSkVVemVqZUsxSkdJQ2NpZGV5ZlViR2l4Z1M5ak5nZXg1bnFrVytjWTdXWmh4QmlnbWllTjVRbnc5Wm9zU05WQzlLUUt5YitHVWFHeUtVQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTguMTguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGh1bWFuZnMvbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTYuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFuZnMvbm9kZS8tL25vZGUtMC4xNi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0velV4K3lPc0lyRzRZNDNFaDJwZURlS0N4bFJ0L2dFVDZhSGZhS3B1cTI2N3FYZFlERlZpVkhmTWFMeXlnWk9ubDBrR1d4Rklnc0J5OFFGdVRMVVhFUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBodW1hbmZzL2NvcmUiOiAiXjAuMTkuMSIsCi0gICAgICAgICJAaHVtYW53aG9jb2Rlcy9yZXRyeSI6ICJeMC40LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTguMTguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlci8tL21vZHVsZS1pbXBvcnRlci0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnh2ZVY0Vjh2NVliNG5jRlRUM3JQU2daQk9wQ2tqZksweTRvVlZWSndJdURWQlJNRFhyUHlYUkw5ODhpNWFwOW05Ym55RUVqV2ZtNVdrQm10ZmZMZkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyLjIyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9uemFrYXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BodW1hbndob2NvZGVzL3JldHJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL3JldHJ5Ly0vcmV0cnktMC40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJWMFRnbzlLNGhmUENlaythTUFuODFScHBGS3YyeVNEUWVNb1NadXZUQVN5d05UblZKQ0FyQ1pFMkZXcXB2SWF0S3U3Vk1STFdsUjFFYXp2VmhEeWhRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOC4xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnpha2FzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXNhYWNzL2NsaXVpIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bpc2FhY3MvY2xpdWkvLS9jbGl1aS04LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzhqY2phYlhhbGVPRzlEUTArQVJYV1pCVGZuUDRXTkFxenVpSks3bGw0NEFteEdLdi9KMk00VFBqeGpZM3puQkNmdkJYRnp1Y20xdHdkeUZ5YkZxRUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjUuMS4yIiwKLSAgICAgICAgInN0cmluZy13aWR0aC1janMiOiAibnBtOnN0cmluZy13aWR0aEBeNC4yLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4wLjEiLAotICAgICAgICAic3RyaXAtYW5zaS1janMiOiAibnBtOnN0cmlwLWFuc2lAXjYuMC4xIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeOC4xLjAiLAotICAgICAgICAid3JhcC1hbnNpLWNqcyI6ICJucG06d3JhcC1hbnNpQF43LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzYWFjcy9jbGl1aS9ub2RlX21vZHVsZXMvYW5zaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC02LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnEzU21TcHlGSGFXalBrOElmOXljNnN2TThjNTZkQjVCQXRXNFFidzVqSFR3d1hYY1RMb1JNa3BESnA2VkwwWHpsV2FDSFRYcmtGVVJNWW1EMHNMcWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXJlZ2V4P3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzYWFjcy9jbGl1aS9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy02LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNERqNk0yOEpCK29BSDhrRmtUTFVvK2EyandPRmt1cWIzeXVjVTBDQU5jUlJVYnhTMGNQMG5aWUNHamNjM0JOWHdSSXNVVm1ER2d6YXdtZTd6dkpIdmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bpc2FhY3MvY2xpdWkvbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiOS4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vtb2ppLXJlZ2V4Ly0vZW1vamktcmVnZXgtOS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwxOERhSnNYU1VrMis0MnB2OG1MczVqSlQyaHFGa0ZFNGoyMXdPbWdiVXFzWjJoTDcyTnNVVTc4NWc5UlhnbzNzMFpOZ1ZsNDJUaUhwM1p0T3YvVnlnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzYWFjcy9jbGl1aS9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSG5MT0NSM3ZqY1k4YmVvTkx0Y2paNS9ueG4yYWZtTUU2bGhyRHJlYm9rcU1hcCtYYmVXOG45VFhwUERPcWRHSzVxY0kzb1QwR0tUVzZ3QzdFTWlWcUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlYXN0YXNpYW53aWR0aCI6ICJeMC4yLjAiLAotICAgICAgICAiZW1vamktcmVnZXgiOiAiXjkuMi4yIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjcuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bpc2FhY3MvY2xpdWkvbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlEUE1OanA0V3lmWUJrSG5qSVJMZmNhMWk2S015R0N0c1Znb0tlL3oxKzZ2dWtnYUVOZGdHQlp0K1ptS1BjNGdhdnZFWjVPZ0hmSGRyYXpoZ055Rzd3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNi4yLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N0cmlwLWFuc2k/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXNhYWNzL2NsaXVpL25vZGVfbW9kdWxlcy93cmFwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcC1hbnNpLy0vd3JhcC1hbnNpLTguMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zaTdRV0k2elVNcTU2YkVTRnZhZ3Rtek1kR090b3hmUitTZXoxMU1vYmZjN3RtK1ZrVWNrazliVzJVZWZmVEdWVWJPa3N4bVN3MEFBMmdzOGc3MU5DUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl42LjEuMCIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjUuMC4xIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjcuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay93cmFwLWFuc2k/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AanNkb2Mvc2FsdHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMTAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bqc2RvYy9zYWx0eS8tL3NhbHR5LTAuMi4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVkZIU3NRQVFwOHkxTkp2QUpCcExzOUkyc2hIRTZoejlUd3Vrb2NET2J1VWdHVkFxNjJ5WkdiVGdKZzA0WjNGajBYU01XZTBzSnFHZzVkaEtHVFY5MkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2Rhc2giOiAiXjQuMTcuMjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49djEyLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBrZ2pzL3BhcnNlYXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBrZ2pzL3BhcnNlYXJncy8tL3BhcnNlYXJncy0wLjExLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSsxVmtqZEQwUUJMUG9kR3JKVWVxYXJIOFZBSXZRT0RJYndoOVhwUDVTeWlzZjdZb1Fnc0pLUE5Gb3FxTFFsdStWUS90VlNzaE1SNmxvUE1uOFUrZFBnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bwa2dyL2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBrZ3IvY29yZS8tL2NvcmUtMC4yLjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFOcVh5ZlZTMndtOWh3ZVNZRDJPN0YwRzA2dXVyajlrWjk2VFJRRTVZOWhVNyt0Z2Rad0lrYkFLYzVPY3kxSHhFWTJrdURRYTZjUTFXUnMvTzVMRktBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIwLjAgfHwgXjE0LjE4LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGtnciIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHRlcHBlaXMvbXVsdGltYXBzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0ZXBwZWlzL211bHRpbWFwcy8tL211bHRpbWFwcy0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSUQ3Zm9zYmM1MFRiVDBNSzBFRzEyTytnQVAzVzNBYS9QejREYVR0UXRFdmxjOU9kYXFpMGRlK3h1WjdMaTJHdEs0SHpFWDdJdVJXUy9KbVpMa3NSM1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvZXN0cmVlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc3RyZWUvLS9lc3RyZWUtMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRXSHpIYTJXcUVYSS9PMUU5T2pyb2NNVEtKbDJtU3JFb2xoMUlvbXJ2NlUrSnVOd2FIWHNYeDliTHU1Z0c3QlVXRklOMHNrSVFKUS9MMXJJZXg0WDZ3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2pzb24tc2NoZW1hIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjE1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvanNvbi1zY2hlbWEvLS9qc29uLXNjaGVtYS03LjAuMTUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTUrZlA4UDhNRk5DK0F5WkNEeHJCMnBrWkZQR3pxUVdVenBTZXV1Vkx2bThWTWNvck5ZYXZCcW9GY3hLOGJRejRRc2JuNG9VRUVlbTR3RExmY3lzR0hBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2xpbmtpZnktaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2xpbmtpZnktaXQvLS9saW5raWZ5LWl0LTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zVkRBNTh6QXc0ZVdBZmZLT2FRSDUvNWozWGVheXVrekRrK2V3U3NudjNwNHlKRVpIQ0N6TURpWk04ZTBPVXJSdm1wR1o4NWpmNHlESGtIc2dCTnI5UT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9tYXJrZG93bi1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE0LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL21hcmtkb3duLWl0Ly0vbWFya2Rvd24taXQtMTQuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wcm9tbzRlRnd1aVcrVGZHeGhpKzB4M2N6cVRZSmtHOHFCMTdaVUppVkYxMFhtN05MVlJTTFVzZlJUVS82aDFlMjRWdlJuWEN4K2hHN2xpNThsa3pvZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9saW5raWZ5LWl0IjogIl41IiwKLSAgICAgICAgIkB0eXBlcy9tZHVybCI6ICJeMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL21kdXJsIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9tZHVybC8tL21kdXJsLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SR2RnalFVWmJhNXA2UUVGQVZ4Mk9HYjhyUURML2NQUkc3R2llZFJ6TWNKMXRZblVBTkJuY2piU0IxTlJHd2J2amNQZWlrUkFCejJuc2h5UGsxYmhXZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ub3JtYWxpemUtcGFja2FnZS1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ub3JtYWxpemUtcGFja2FnZS1kYXRhLy0vbm9ybWFsaXplLXBhY2thZ2UtZGF0YS0yLjQuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMzdpK09hV1RoOXFlSzRMU0hQc3lSQzdOYWhuR290TnVadmpMU2djUHpibHBIQjNyckNKeEFPZ0k1Z0NkS203Y29vbnNhWDFPZjBJTGlUY25aamJmeEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hYm9ydC1jb250cm9sbGVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fib3J0LWNvbnRyb2xsZXIvLS9hYm9ydC1jb250cm9sbGVyLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oOGxROHRhY1pZblIzdk5RVGdpYmordE9ESEk1LytsMDZBdTJQY3Jpdi9HbWV0MGVhajRUd1dINDFzTzl3bkhEaVFzRWoxOXEwZHJ6ZFdkZUFIdHdlZz09IiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJldmVudC10YXJnZXQtc2hpbSI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni41IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMTYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4vLS9hY29ybi04LjE2LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVWSnlFOU10dE9zQlFJREt3MXNrYjluQXdRdVI1d3VHRDMrODJLNkpnSmxtL1krS0k5Mm9Oc01OR1pDWWREc1Z0UkhTYWswcGNWNURubzUrNGpoOXN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAiYWNvcm4iOiAiYmluL2Fjb3JuIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybi1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4tanN4Ly0vYWNvcm4tanN4LTUuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ycTlzK0pOaGYwSUNoanREWHhsbEo3ZzQxb1prNVNsWHRwMExId3lBNWNlanduN3ZLbUtwNHBQcmk2WUVlUHYyUFU2NXNBc2VnYlh0SWlubURGRFhnUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY29ybiI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWp2IjogewotICAgICAgInZlcnNpb24iOiAiNi4xNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYvLS9hanYtNi4xNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JV3Jvc20veXJuNDNlaUtxa2ZrSGlzN1Fpb0RsZWFYUUhkRFZQS2cwRlN3d2QvRHV2eVg3OVRabkZPbllwQjdkY3NGQU1tdEZ6dFp1WFBEdlNlUGtGdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMC4wIiwKLSAgICAgICAgImpzb24tc2NoZW1hLXRyYXZlcnNlIjogIl4wLjQuMSIsCi0gICAgICAgICJ1cmktanMiOiAiXjQuMi4yIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9lcG9iZXJlemtpbiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYW5zaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC00LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSUxsdjRrLzNmNnZmUTRPb1AyQUd2aXJPa3RsUTk4WkVMMWs5RmFRanhhM0wxYWJCZ2J1VERBZFBPcHZiR25jQzBCVFZRcmwrT004eFpHSzZ0V1h0N2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hbnktcHJvbWlzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnktcHJvbWlzZS8tL2FueS1wcm9taXNlLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03VXZtS2FsV1J0MXdnakwxUnJHeG9TSlcvMFFaRkllZ3BlR3ZaRzlranA4dnJSdTU1WFRIYnducXEyR3BYbTl1TGJjdWh4bTNJcVg5T0I0TVpSMWIyQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FyZ3BhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmdwYXJzZS8tL2FyZ3BhcnNlLTEuMC4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzVSb3k2dE5HNFNML0ZPa0NBTjZSemppYWtaUzI1UkxZRnJjTXR0SnFiZGQ4QldybkErZkd6NTdpTjVQYjA2cHZCR3ZsNWdRMEI0OGRKbHNsWHZvVGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzcHJpbnRmLWpzIjogIn4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXNzZXJ0aW9uLWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fzc2VydGlvbi1lcnJvci8tL2Fzc2VydGlvbi1lcnJvci0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItamdzYU5kdXorbmR2R3lGdDN1U3VXcXZ5NGxDbklKaW92dG91UU41SlpIT0tDUzJRdWhFZGJjUUhGaFZrc3oyTjJVOWhYSm84b2RHN0VUeVdsRWV1RHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hc3NlcnRpb24tZXJyb3ItZm9ybWF0dGVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fzc2VydGlvbi1lcnJvci1mb3JtYXR0ZXIvLS9hc3NlcnRpb24tZXJyb3ItZm9ybWF0dGVyLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02WXlBVkxyRXplMGtRN0NtSmZVZ3JMSGIrWTdYZ2htTDJJZTdpalZhMlk5eW5QM0xWK1ZEaXdGazYyRG4wcXRxYm1ZMEJUMHNzNnAxeHhwaUYyUFliUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRpZmYiOiAiXjQuMC4xIiwKLSAgICAgICAgInBhZC1yaWdodCI6ICJeMC4yLjIiLAotICAgICAgICAicmVwZWF0LXN0cmluZyI6ICJeMS42LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFzZTY0LWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jhc2U2NC1qcy8tL2Jhc2U2NC1qcy0xLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUtwYVlsSG44dDRTVmJPSEN5K2I1K0tLZ3ZSNHZyc0Q4dmJ2cmJpUUpwczdmS0RUa2prRHJ5NmppMHJVSmpDMGt6Yk5lUEx3enhxOGl5cG80MXFlV0E9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgotICAgICAgICB9Ci0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JsdWViaXJkIjogewotICAgICAgInZlcnNpb24iOiAiMy43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JsdWViaXJkLy0vYmx1ZWJpcmQtMy43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhwTmo2R0RRemRmVytyMldubjd4aVNBZDdUTTNqemt4R1hCR1R0V0t1U1h2MXhVVithenhBbThqZFdaTjA2UVRRaysyTjJYQjlqUkRrdmJtUW1jUnRnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMS4xLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05VDlValczcjBVVzVjMVE3R1R3bGxwdFh3aHZZbUV6Rmh6TWZaOUg3RlFXdCt1WmVQalpQakJQL1cxWkV5WjF0d0dXb201LzU2VEY0bFBjcWpuREhjZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIsCi0gICAgICAgICJjb25jYXQtbWFwIjogIjAuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9icm93c2VyLXN0ZG91dCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2VyLXN0ZG91dC8tL2Jyb3dzZXItc3Rkb3V0LTEuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xaEFWSTErQXYyWDdxZWxPZkFJWXdYT05vb2Q2WGxaRS9mWGFCU21XL1Q1U3pMQW1DZ3ppK2VpV0U3ZlV2YkhhZU5CUUgxM1VmdGpwWHhzZkxrTXBndz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2J1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9idWZmZXIvLS9idWZmZXItNi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZUaUNwTnh0d2laWkhFWmJjYlRJY1pqRVJWSUNuOXlxL3BERmtUbDk1L0F4ekQxbmFCY3RON1lPNjhyaU0vZ0xTRFk3c2RyTWJ5OGhvZkFEWXV1cU9BPT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJiYXNlNjQtanMiOiAiXjEuMy4xIiwKLSAgICAgICAgImllZWU3NTQiOiAiXjEuMi4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9idWZmZXItZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9idWZmZXItZnJvbS8tL2J1ZmZlci1mcm9tLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FK1hRQ1J3U2JhYWlDaHR2Nms2RHdnYytieCtCczZ2dUtKSEhsNWtveC9CYUtiaGlYenFRT3dLNGNPMjJ5RWxHcDJPQ21qd1ZoVDNIbXhneVBHbkpmUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhbGxzaXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYWxsc2l0ZXMvLS9jYWxsc2l0ZXMtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVA4QmpBc1h2WlMrVklEVUkxMWhIQ1FFdjc0WVQ2N1lVaTVKSkZOV0lxTDIzNXNCbWpYNCtxeDlNdXZsczVpdnlORU5jdHg0NnhRTFEzYVR1RTdzc2FRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYW1lbGNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLy0vY2FtZWxjYXNlLTYuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HbXk2RmhZbENZN3VPRWxaVVNieG8yVUNESDhvd0VrOTk2Z2ticnBzZ0d0ckpMTTNKN2pHeGw5SWM3UXd3ajRpdk9FNUFXWldSTWVjRGRGN2hxR2pGQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2FwaXRhbC1jYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhcGl0YWwtY2FzZS8tL2NhcGl0YWwtY2FzZS0xLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZHMzN1c4Q3l0SGd3bmhHR1RpODhwY1B5UjE1cW9Oa09wWXdtTU1mbldxcVdnRVNhcExxdkR4Nmh1RmpRNXZxV1NuMlowNjE3M1hOQTdMdE1PZVVoMUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJuby1jYXNlIjogIl4zLjAuNCIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi4wLjMiLAotICAgICAgICAidXBwZXItY2FzZS1maXJzdCI6ICJeMi4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhdGhhcnNpcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYXRoYXJzaXMvLS9jYXRoYXJzaXMtMC45LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXByTVRRVnBjbnMvdHpGZ0ZWa1ZwNmFrNlJ5a1p5V2IzZ3U4Y2tVcGQ2WWtUbGFjT2QzRFhHSmpJcEQ0UTZ6SmlyaXp2YWlBalNTSGxPc0ErNnNOaDJBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjE3LjE1IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2hhaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFpLy0vY2hhaS00LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUklUR0JmaWpMa0JkZFp2bm44amRxb1R5cHh2cWJPTFlRa0dHeFh6ZUZqVkh2dWRhUHcwSE5GRDl4OTI4L2VVd1lXZDJkUEN1Z1Zxc3BHQUxUWlpRS3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhc3NlcnRpb24tZXJyb3IiOiAiXjEuMS4wIiwKLSAgICAgICAgImNoZWNrLWVycm9yIjogIl4xLjAuMyIsCi0gICAgICAgICJkZWVwLWVxbCI6ICJeNC4xLjMiLAotICAgICAgICAiZ2V0LWZ1bmMtbmFtZSI6ICJeMi4wLjIiLAotICAgICAgICAibG91cGUiOiAiXjIuMy42IiwKLSAgICAgICAgInBhdGh2YWwiOiAiXjEuMS4xIiwKLSAgICAgICAgInR5cGUtZGV0ZWN0IjogIl40LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jaGFpLXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFpLXN0cmluZy8tL2NoYWktc3RyaW5nLTEuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zeWREQzNTM3BOQVFNWXdKcnM2ZFFYMG9CUTZLZklQdU9aNzhuN3JvY1cwZUpKbHNIUGgydDNrd1c3eGZ3WUEvMUJmNi9hckd0U1VvMTZyeFIySkZsdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFpIjogIl40LjEuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2hhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay00LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0tuYmhGeVJJWHBVdWV6OGlCTW15RWE0bmJqNElPUXl1aGMvd3k5a1k3L1dWUGN3SU85VkE2NjhQdThSa083KzBHNzZTTFJPZXl3OUNwUTA2MWk0bUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4xLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsaz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NoYWxrL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16YkI5ckNKQVQxcmJqaVZEYjJocUtGSE5ZTHhndGs4TlVSeFozSVp3RDNGNk50eGJYWlFDbm5TaTFMa3grSURvaGRQbEZwMjIyd1ZBTEloZVpKUVNFZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLWNvbnZlcnQiOiAiXjIuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2hhbGsvbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFwQ0F2Umw5c3R1T0h2ZUtzbjdIbmNKUnZ2NTAxcUlhY0t6UWxPLytMd3hjOSswcTJ3THl2NERmdnQ4MC9EUG4ycHFPQnNKZERpb2dYR1I5K092d1J3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NoZWNrLWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoZWNrLWVycm9yLy0vY2hlY2stZXJyb3ItMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlLRW9EWWFSbWQxbXhNOTBhMk9FZldoanNqUHBZUHVRK2xNWXNveEIxMjYrdDhmdzd5U0VPNDhubURnNUNPVGp4REk2NS9ZMk9XcGVFSGszWk9lOHpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2V0LWZ1bmMtbmFtZSI6ICJeMi4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nob2tpZGFyIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nob2tpZGFyLy0vY2hva2lkYXItNC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFnenU4a2ZCdm8rY0E0OTYyam5QMUtrUzZEb3A1TlM2ZzdSNUxGWUpyNGI4VWI5NFBQUVhVa3NDdzlQdlhvZVhQUlJkZFJOQzVDMUpRVVIyU01HdG5BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmVhZGRpcnAiOiAiXjQuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxNC4xNi4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vcGF1bG1pbGxyLmNvbS9mdW5kaW5nLyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2xhc3MtdHJhbnNmb3JtZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xhc3MtdHJhbnNmb3JtZXIvLS9jbGFzcy10cmFuc2Zvcm1lci0wLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU1FhMVdzNmhVYmZDOTh2S0d4WkgzS0ZZMFkxbG01Wm0wU1k4WFg5emJLN0ZKQ3lWRWFjM0FUVzBSSXB3elcrb09mbUhFNVBNUHVmREc5aENmb0VPTXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGktdGFibGUzIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaS10YWJsZTMvLS9jbGktdGFibGUzLTAuNi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rVy81ZWZUUjd5NUhSRDdnQUN3OXlRanFNVnZFTUxCSG1ib00va1BXYW0rSCtIbXlyZ2poNlluY1ZLSzEyMllaa1hyTHVkelR1QXVrVXc5Rm5NZjdJUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIjEwLiogfHwgPj0gMTIuKiIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAY29sb3JzL2NvbG9ycyI6ICIxLjUuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2xpdWkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xpdWkvLS9jbGl1aS04LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlNlTm55dXM3NUM0Ly9OUTlnUXQxL2NzVFh5by84U2IrYWZMQWt6QXB0RnVNc29kOUhGb2tHTnVkWnBpL29RVjczaG5WSytzUis1UFZSTWQrRHI3WVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJSRUNQc2o3aXUveGI1b0tZY3NGSFNwcEZObnNqLzUyT1ZUUktiNHpQNW9uWHdWRjN6Vm1tVG9OY09mR0MrQ1JEcGZLL1U1ODRmTWczOFpIQ2FFbEtRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItbmFtZSI6ICJ+MS4xLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ny4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRPeSszQXVXM2Eyd05iWkhJdU1acFRjZ2pHdUxVL3VCTC91YmNaRjlPWGJEbzhmZjRPOHlWcDVCZjBlZlM4dUVvWW81cTRGeDdkWTlPZ1FHWGdBc1FBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3JzIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9ycy8tL2NvbG9ycy0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYStVcVRoNGtnWmcvU2xHdmZiekRIcGdSdTdBQVFPbW1xUkhKbnhoUlpJQ0tGVVQ5MWJyVmhOTnQ1OENNV1U5UHNCYnYzUERDWlVIYlZ4dURpSDJtdEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMS45MCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMTQuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXItMTQuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IK3kwSm8vVDFSWjlxUFA0RWgxcGtjUWNMUmdscmFKYVNMb3lPdEh4dTZBYXBraldWQ3kyU2l0MVFRNHgzRG5nOHFEbFNzWkVldDdnNVBxMDZNdlRndz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbmNhdC1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29uY2F0LW1hcC8tL2NvbmNhdC1tYXAtMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9TcnY0ZHN3eVFOQmZvaEdwejlvNlliM0d6M1NyVURxQkg1clR1aEdSN2FodGxiWUtuVnh3MmJDRk1SbGphQTdFWEhhWFo4d3NIZG9kRnZia2hLbXFnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3Jvc3MtZW52IjogewotICAgICAgInZlcnNpb24iOiAiMTAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1lbnYvLS9jcm9zcy1lbnYtMTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Hc1lvc2duQUNaVEFEY21FeUpjdGtKSW9xQWhIanR0dzdSc0ZyVm9KTlhic1dXcWFxNlltKzdrWmpxNm1TNDVPMGppajZ2dGlSZXBwS1FFdHFXeTZEdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBlcGljLXdlYi9pbnZhcmlhbnQiOiAiXjEuMC4wIiwKLSAgICAgICAgImNyb3NzLXNwYXduIjogIl43LjAuNiIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiY3Jvc3MtZW52IjogImRpc3QvYmluL2Nyb3NzLWVudi5qcyIsCi0gICAgICAgICJjcm9zcy1lbnYtc2hlbGwiOiAiZGlzdC9iaW4vY3Jvc3MtZW52LXNoZWxsLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jcm9zcy1zcGF3biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1zcGF3bi8tL2Nyb3NzLXNwYXduLTcuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11VjJRT1dQMm5XenN5MmFNcDhhUmliaGk5ZGx6RjVIZ2g1U0hhQjlPaVRHRXlEVGlKSnl4MHV5NTFRWGR5V2J0QUhOdWE0WEp6VUtjYTNPektVZDN2QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBhdGgta2V5IjogIl4zLjEuMCIsCi0gICAgICAgICJzaGViYW5nLWNvbW1hbmQiOiAiXjIuMC4wIiwKLSAgICAgICAgIndoaWNoIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVidWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy00LjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkd3d1dud1F2a1ZmYXZLVnQyMkZHTHcreFlTZHpBUndtMHJ1NkRoVFZBM3VtVTVoWmMyOFYza080c3RnWXJ5clRsTHB1dmdJOUdpaWpsdEFqTmJjcUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICJeMi4xLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWNhbWVsaXplIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY2FtZWxpemUvLS9kZWNhbWVsaXplLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05aUUxUGdTaWs5SGVJSXcySk85NElpZG5FM2VCb1FyRkozdzdzRnV6U1g0RHBtWjN2NXNacFVpVjVTd2NmNm1RRUYrWTBydThOZW8rcCtueWgySitoUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVlcC1lcWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVlcC1lcWwvLS9kZWVwLWVxbC00LjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU1V3ZEdmcWRLT3d4Q1BlVllqd1N5UnBKN1orZmhwd0lBdG1DVWRaSVdaL1lQNVI5V0FzeXVTZ3BMVkRpOWJqV29OMkxYSE5zcy9kazN1clh0ZFF4R2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlLWRldGVjdCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVlcC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwLWlzLy0vZGVlcC1pcy0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0lQemtzbVRnNC9NcmlpYVlHTytva1hEVDd6dG4vdzNFcHR2LytnU0lkTWRLc0pvMHU0Q2ZZTkZKUHkrNFNLTXVDcUd3Mnd4bkErVVJNZzN0OGEvYlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kaWZmIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYvLS9kaWZmLTQuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YMDdudHRKUWt3a2ZLZnZUUEcvS1NuRTJPTWRjVUNhbzYrZVhGM3dtbklRUm4yYVBBSEgzVnhEYkRPZGVna2Q2SmJQc1hxU2hwdkVPSGZBVCtuQ053UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4zLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Vhc3Rhc2lhbndpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vhc3Rhc2lhbndpZHRoLy0vZWFzdGFzaWFud2lkdGgtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUk4OFRZWldjOVhpWUhSUTQvM2M1cmpqZmdramhMeVcybHVHSWhlR0VSYk5RNk9ZN3lUeWJhblNwRFhaYTh5N1ZVUDlZbURjWWErZXlxNGNhN2lMcVdBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW1vamktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC04LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVNqWXpjV05PQTBld0FIcHowTXhwWUZ2d2c2eWp5MU5HM3h0ZW9xejY0NFZDby9SUGducjEvR0d0K2ljM2lKVHpROEV1M1RkTTE0U2F3blZVbUdFNkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lbnRpdGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbnRpdGllcy8tL2VudGl0aWVzLTQuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WMGhqSDRkR1BoOUFvNXAwTW9SWTZCVnF0d0NqaHo2dkk1TFQ4QUo1NUgrNGc5LzR2Ykh4MUk1NGZTMFh1Y2xMaERIQXJQUUNpTWpEeGphTDhmUHhodz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZmI1NS9lbnRpdGllcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Vycm9yLXN0YWNrLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcnJvci1zdGFjay1wYXJzZXIvLS9lcnJvci1zdGFjay1wYXJzZXItMi4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNrNVY2d1ZhelBocTVNaHBPK0FVeEpuNXg3WFNYR2wxUjkzVm43aSt6UzE1S0RWeFFpamVqTkNyejgzNDAvMmJnTEJqUjlHdEVHOFpWS09ORGpjcUdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3RhY2tmcmFtZSI6ICJeMS4zLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzY2FsYWRlIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FsYWRlLy0vZXNjYWxhZGUtMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdVajJxbHhhUXRPNGc2UHE1YzI5R1RjV0dEeWQ4aXRMOHpUbGlwZ0VDejNKZXNBaWlPS290ZDhKVTZvdEIzUEFDZ0c2eGtKVXlWaGJvTVMrYmplL2pBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UdHBjTkozWEF6eDNHcThzV1J6SmFWYWpSczB1VnhBMllBa2RiMWptMllrUHo0RzZlZ1VGQXlBM241dnRFSVplZlBrNVdhNFVYYkt1UzVmS2tKV2RnQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50IjogewotICAgICAgInZlcnNpb24iOiAiOS4zOS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQvLS9lc2xpbnQtOS4zOS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Yb01qZEJPd2UvZXNWZ0V2TG1Oc0QzSVJIa203ZmJLSVVHdnJsZWxvSlhVWmdESGlnMklQV05uaXYrR3dqeUpYenVOcVZqbHI1KzR5VlVaanljSndmUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6ICJeNC44LjAiLAotICAgICAgICAiQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcCI6ICJeNC4xMi4xIiwKLSAgICAgICAgIkBlc2xpbnQvY29uZmlnLWFycmF5IjogIl4wLjIxLjIiLAotICAgICAgICAiQGVzbGludC9jb25maWctaGVscGVycyI6ICJeMC40LjIiLAotICAgICAgICAiQGVzbGludC9jb3JlIjogIl4wLjE3LjAiLAotICAgICAgICAiQGVzbGludC9lc2xpbnRyYyI6ICJeMy4zLjUiLAotICAgICAgICAiQGVzbGludC9qcyI6ICI5LjM5LjQiLAotICAgICAgICAiQGVzbGludC9wbHVnaW4ta2l0IjogIl4wLjQuMSIsCi0gICAgICAgICJAaHVtYW5mcy9ub2RlIjogIl4wLjE2LjYiLAotICAgICAgICAiQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogIl4xLjAuMSIsCi0gICAgICAgICJAaHVtYW53aG9jb2Rlcy9yZXRyeSI6ICJeMC40LjIiLAotICAgICAgICAiQHR5cGVzL2VzdHJlZSI6ICJeMS4wLjYiLAotICAgICAgICAiYWp2IjogIl42LjE0LjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImNyb3NzLXNwYXduIjogIl43LjAuNiIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjIiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjQuMC4wIiwKLSAgICAgICAgImVzbGludC1zY29wZSI6ICJeOC40LjAiLAotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeNC4yLjEiLAotICAgICAgICAiZXNwcmVlIjogIl4xMC40LjAiLAotICAgICAgICAiZXNxdWVyeSI6ICJeMS41LjAiLAotICAgICAgICAiZXN1dGlscyI6ICJeMi4wLjIiLAotICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIsCi0gICAgICAgICJmaWxlLWVudHJ5LWNhY2hlIjogIl44LjAuMCIsCi0gICAgICAgICJmaW5kLXVwIjogIl41LjAuMCIsCi0gICAgICAgICJnbG9iLXBhcmVudCI6ICJeNi4wLjIiLAotICAgICAgICAiaWdub3JlIjogIl41LjIuMCIsCi0gICAgICAgICJpbXVybXVyaGFzaCI6ICJeMC4xLjQiLAotICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjAiLAotICAgICAgICAianNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSI6ICJeMS4wLjEiLAotICAgICAgICAibG9kYXNoLm1lcmdlIjogIl40LjYuMiIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS41IiwKLSAgICAgICAgIm5hdHVyYWwtY29tcGFyZSI6ICJeMS40LjAiLAotICAgICAgICAib3B0aW9uYXRvciI6ICJeMC45LjMiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImVzbGludCI6ICJiaW4vZXNsaW50LmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZXNsaW50Lm9yZy9kb25hdGUiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqaXRpIjogIioiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiaml0aSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LWNvbmZpZy1wcmV0dGllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjEuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LWNvbmZpZy1wcmV0dGllci8tL2VzbGludC1jb25maWctcHJldHRpZXItMTAuMS44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04MkdaVWpSUzBwL2pnYW5mNnExckVPMjVWU29ISDBoS1BDVHJnaWxsUGpkSS8zYmdCaEFFMVF6SHJIVGl6anBSdnk2cEdBdktqREp0azJwRjlORHE4dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImVzbGludC1jb25maWctcHJldHRpZXIiOiAiYmluL2NsaS5qcyIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQtY29uZmlnLXByZXR0aWVyIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNsaW50IjogIj49Ny4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1wbHVnaW4tcHJldHRpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXBsdWdpbi1wcmV0dGllci8tL2VzbGludC1wbHVnaW4tcHJldHRpZXItNS41LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhzY1hrYnFVWjJzUGl0aEF1TG01TVhMK1dwaCtVN3dIbmdQQnY5T01Xd2xQOGlhZmx5eHBqVFlaa21kZ0I0L3ZQSWhlbVJsQkVvTHJIN1VDMW43YVV3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHJldHRpZXItbGludGVyLWhlbHBlcnMiOiAiXjEuMC4xIiwKLSAgICAgICAgInN5bmNraXQiOiAiXjAuMTEuMTIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xNC4xOC4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludC1wbHVnaW4tcHJldHRpZXIiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvZXNsaW50IjogIj49OC4wLjAiLAotICAgICAgICAiZXNsaW50IjogIj49OC4wLjAiLAotICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICI+PSA3LjAuMCA8MTAuMC4wIHx8ID49MTAuMS4wIiwKLSAgICAgICAgInByZXR0aWVyIjogIj49My4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiQHR5cGVzL2VzbGludCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtc2NvcGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXNjb3BlLy0vZXNsaW50LXNjb3BlLTguNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zTlhPZktDbjc0cnQ4UklDS012SlM3WEtWL1hrOWtBN0R5SnI4bUppazNTN0N3Z3kzcWxra215UzJ1UUIzamlKZzZWTmRaZC9wREJKdTBudkcyTmxUZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzcmVjdXJzZSI6ICJeNC4zLjAiLAotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNS4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtdmlzaXRvci1rZXlzIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC12aXNpdG9yLWtleXMvLS9lc2xpbnQtdmlzaXRvci1rZXlzLTQuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VaGRrNXNmcWNlZS85SC9yQ09KaWtZejY3bzBhMlR3MmhHUlBPRzJZMVIyZGc3YnJSZTF1RzB5YU5RREh1K1RPL3VRUEYvNWVDYXB2WVNtSFVqdDdKUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3ByZWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJlZS8tL2VzcHJlZS0xMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWo2UEFRMnVVcjc5UFpoQmpQNUM1ZmhsOGUzOUZtUm5PanNENWxHbldyRlU4aTJHNzc2dEJLNytuUDhLdVFVVFR5QVpVd2ZRcVhBZ3JWSDVNYkg5Q1lRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWNvcm4iOiAiXjguMTUuMCIsCi0gICAgICAgICJhY29ybi1qc3giOiAiXjUuMy4yIiwKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjQuMi4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNwcmltYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUd1RkZ3N1VwZGErZzRwK1FIdm5XMFJ5VFgvU1ZlSkJETS9nQ3RNQVJPMGNMdVQySGNFS25UUHZoalY2YUdlcXJDQi9zYk5vcDBLc3ptMGpzYVdVNEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJlc3BhcnNlIjogImJpbi9lc3BhcnNlLmpzIiwKLSAgICAgICAgImVzdmFsaWRhdGUiOiAiYmluL2VzdmFsaWRhdGUuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNxdWVyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3F1ZXJ5Ly0vZXNxdWVyeS0xLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXA2RzBXUXdjVS9MSHN2THdPTjFmQVFYOVpwMEEyWTZZL2NKQmw5ci9KYlc5MFp5ZzQvemJHNnp6S2EyT1RBTEVMYXJZSG1LdTBHaHBNNUVPKzdUMGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3JlY3Vyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNyZWN1cnNlLy0vZXNyZWN1cnNlLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LbWZLTDNiNkcrUlh2UDhOMXZyM1RxMWtML29DRmduMk5ZWEV0cVA4L0wzcEthcFVBNEc4Y0ZWYW9GM1NVMzIzQ0Q0WHlwUi9mZmlvSG1rdGk2L1RhZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS01LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTU1kQVJ1VkVRemlOVGVKRDhEZ01xbWh3UjExQlJRL2NCUCtwTHRZZFNUbmYzTUlPOGZGZWlJTkViWDM2WmRObGZVLzdBOWYzZ1V3NDlCM29Rc3Z3QkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXN1dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3V0aWxzLy0vZXN1dGlscy0yLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1ZzY3FYazRPQ3A2OFNaMGRrZ0VLVmk2LzhpajMwMEtCV1RKcTMyUC9kWWVXVFN3SzQxV3lUeGFsTjFlUm1BNVo5VVUvTFg5RDdGV1NtVjlTQVl4Nmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnQtdGFyZ2V0LXNoaW0vLS9ldmVudC10YXJnZXQtc2hpbS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaS8yWGJuU3ovdXhSQ1U2K05kVkpnS1dEVE00MjcrTXFZYmtRekQzMjFEdUNRSlVxT3VKS0lBMElNMitXMnh0WUhkS09tWjRkUjZmRXhzZDRTWEwrV1E9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50ZW1pdHRlcjMvLS9ldmVudGVtaXR0ZXIzLTUuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tbHNUUnlHYVBCalBlZGs2QnZ3K2FxYnNYRHRvQXlBem01TU83SmdVK3lWUnlNUTVPOGJENEtjY2k3QlM4NWY5M3ZlZWdlQ1BrTDhSNEdMQ2xuakxGdz09IgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ldmVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnRzLy0vZXZlbnRzLTMuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tUXcrMmZrUWJBTHpRN1YwTVkwSXFkblhOT2VUdFA0cjBsTjl6N0FBYXdDWGdxZWE3YkRpaTIwQVlySUJyRmQvSHgwTTJPY3o2UzExMUNhRmtVY2IwUT09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC54IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1kZWVwLWVxdWFsLy0vZmFzdC1kZWVwLWVxdWFsLTMuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mM3FROW9ReTlqMkFoQmUvSDlWQzkxd0xtS0JDQ1UvZ0RPbktOQVlHNWhzd083QkxLajA5SGM1SFlOejljR0krK3hscERDSWdEYWl0VnMwM0FUUjg0UT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LWRpZmYvLS9mYXN0LWRpZmYtMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZ4UFA0TnFiVWpqNk1hQU9hZldlVW4yY1hXTGNDdGxqa2xVdFpmMEluZDRYUStRUHRtQTBiMTh6WnkwaklReCtFeFJWQ1IvWlFwQm1pazVsWHNoTnN3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvLS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGhkL3dGK0xrOThIWm9UQ3RsVnJhSHRmaDVYWWlqSWphbFhjazdzYVV0dWFuU0R5TE14bkhoU1hFREpxSHhEN21zUjhEMHVDbXFsa3dqQ1Y4eHZ3SHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mYXN0LWxldmVuc2h0ZWluIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtbGV2ZW5zaHRlaW4vLS9mYXN0LWxldmVuc2h0ZWluLTIuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EQ1h1NklmaHFja3M3VFpLWTNIeHAzeTZxcGhZNVNKWm1yV01EcktjRVJTT1hXUWRNaFU5SWcvUFlyenl3L3VsOWpPSXloME40TTB0YkM1aG9kZzhkdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpZ3VyZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlndXJlcy8tL2ZpZ3VyZXMtMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlhZHVRRlJLTFhZT0dnRW42QVphdTkwajNnZ1NPeWlxWFUwRjlKWmZlWFloTmErSms0WCtzNDVBMnpnNWpuczg3R0FGYTM0QkJtMmtYdzRYcE5jYmRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmlndXJlcy9ub2RlX21vZHVsZXMvZXNjYXBlLXN0cmluZy1yZWdleHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmJSb3JCNUZVUVd2bGExNlU4Ui9xZ2FGSXlhMnFHendEck5tQ1p1WUtyYmRTVU1HNkkxWkNHUVJlZmtSVmh1T2tJR1ZuZTdCUTM1RFNmbzFxdkpxRmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9maWxlLWVudHJ5LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGUtZW50cnktY2FjaGUvLS9maWxlLWVudHJ5LWNhY2hlLTguMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YWFRVd0N2aXNhNW9hY05HUlA5U2ZOdFlCTkFNaStSUHdCRm1ibFpFRjdON3N3SFlRUzYvWmZrN1NSd3g0RDVqM0NIMjExWU5SY28xREVNTlZmWkNuUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZsYXQtY2FjaGUiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmluZC11cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzgvUFhUMXdsTExEZ1R6RHM3c2pxOWh6ejB2WEQrem4rN3d5cEVlNGZYUXhDbWRtcWZHc0VQUXhtaUNTUUkzYWpGVjkxYlZTc3ZOdHJKUmlXNm5Hbmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb2NhdGUtcGF0aCI6ICJeNi4wLjAiLAotICAgICAgICAicGF0aC1leGlzdHMiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmQtdXAtc2ltcGxlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAtc2ltcGxlLy0vZmluZC11cC1zaW1wbGUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFmZDRPN3pwcUhlUnlnNFBmRFFzWG1sRGUyUGZkSHRKdDZBa3Q4ak9XYUFwTE9aazVKWHM2Vk1SMjlsejAzcFJlOW1weWtyUkNZSVl4YUpZY2ZwbmNRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mbGF0IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZsYXQvLS9mbGF0LTUuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iNnN1RUQrNS8zclRwVUJkRzFndXBJbDhNUEZDQU1BMFFYd21sakxodkNVS2NVdmRFNGdXa3k5enB1R0NjWEhPc3o0Sjl3UEdOV3E2T0twbUl6ejNoUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImZsYXQiOiAiY2xpLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mbGF0LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZsYXQtY2FjaGUvLS9mbGF0LWNhY2hlLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mN2NjRlBLM1NYRkhweDE1VUlHeVJKL0ZKUWN0dUtaMHpWdU4zZnJCbzRIbkszY2F5OVZFVzBSNnlQWUZIQzBBZ3FodWtQektqcTIydDVEbUF5cUd5dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZsYXR0ZWQiOiAiXjMuMi45IiwKLSAgICAgICAgImtleXYiOiAiXjQuNS40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mbGF0dGVkIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZsYXR0ZWQvLS9mbGF0dGVkLTMuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JeGZWYlJGVmxWOFYveVJhR3prMFVWSWNzS0tITVNmWXc2NlQvdTRuVHdsV3RlUWVQc3hlLy9ManVkUjFBTVg0dFpXM1dGQ2gzWnFhL3NqbHFwYlVSUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcmVncm91bmQtY2hpbGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9yZWdyb3VuZC1jaGlsZC8tL2ZvcmVncm91bmQtY2hpbGQtMy4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdJWGpLcXRGdVdFZ3pGUkpBOVdDUWVTSkxaRGpnSlVPTUNNenh0dkZxLzM3S29qTTFCRkd1ZnFzQ3kwcjRxU1FtWUxzWllNZXlScXpJV09NdXAwM3N3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC42IiwKLSAgICAgICAgInNpZ25hbC1leGl0IjogIl40LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtY2FsbGVyLWZpbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LWNhbGxlci1maWxlLy0vZ2V0LWNhbGxlci1maWxlLTIuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EeUZQM0JNLzNZSFRRT0NVTC93ME9aSFIwbHBLZUdyeG90Y0hXY3FORWRubHRxRndYVmZoRUJROTRlSW8zNEFmUXBvMHJHa2k0Y3lJaWZ0WTA2aDJGZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIjYuKiB8fCA4LiogfHwgPj0gMTAuKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LWZ1bmMtbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtZnVuYy1uYW1lLy0vZ2V0LWZ1bmMtbmFtZS0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOHZYT3Z1RTE2N0N0SWMzT3lJdGNvN04vZHBSdEJiWU9zUHNYQ3o3WC9QTW5sR2pZalNHdVpKZ00xWTdtbWV3N0JLZjlCcXZMWDJ0bk9WeTFCQlVzeFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nbG9iIjogewotICAgICAgInZlcnNpb24iOiAiMTMuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi0xMy4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdqbHlyb2xtbTh1RHBtL29nR3lYWlhiMVorQ2EyQjhOYkp3cUJWZzBheEs5R2JCZW9TN3lHVjZ2alhuWWRHbTZYNTNpZWhFdXh4YnlpS3A4UW1ONFZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWluaW1hdGNoIjogIl4xMC4yLjIiLAotICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4zIiwKLSAgICAgICAgInBhdGgtc2N1cnJ5IjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiMTggfHwgMjAgfHwgPj0yMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nbG9iLXBhcmVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YeHdJOEVPaFZRZ1dwNmlETCszYjByODZmNGQ2QVg2elNVNTVIZkI0eWRDRXVYTFhjNUZjWWVPdStubkdmdFM0VEVqdS8xMXJ0NEtKUFRNZ2JmbXY0QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEzLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtNC4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJMcmdFY1JUd1gybzZnR3hHT0NOeU12R1NwMzVZb2Z1WXp3OWgxSU1UUm1LcXR0QVpaVlU2N2JkYjlQcjJ2VUhBOCtqM2kydEpmak82QzYrNG15R1RBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiMTggfHwgMjAgfHwgPj0yMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi01LjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaCtERW5wVnZ4bWZWZWZhNGpGYkNmNUhkSDVZTURYUnNtS2ZscGYxcElMWldSRmxUYkpweGVVNTVuSmw0U210NUhRYUd6ZzFvNlJIRlBKYU9xbm1CRGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJiYWxhbmNlZC1tYXRjaCI6ICJeNC4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIjE4IHx8IDIwIHx8ID49MjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2Ivbm9kZV9tb2R1bGVzL21pbmltYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjIuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTEwLjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb1JqVHcvOTdhVEJOMFJIYllDZHRGMU1RZnZ1c1NJQlFNMElaRWd6bDY0MjYrOGpTQzBuRjFhL0dtblZMcGZCOXl5cjZnNkZUcVdxaVpWYnhydGFDSWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjUuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIxOCB8fCAyMCB8fCA+PTIyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2JhbC1kaXJzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbC1kaXJzLy0vZ2xvYmFsLWRpcnMtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5CY0dHRmJCQTlzMVZ6RDQxUVhERyszKyt0OU1uNXQxRnBMZGhFU1k2b0tZNGdZVEZwWDR3TzNzcUdVYTBTcmp0YmZqM3N6WDBSbmVtbXJWUlVkVUxBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaW5pIjogIjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNS4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xNS4xNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03QUN5VDN3bXlwM0k2MVM0Zkc2ODJMMFZBMlJHRDlvdGtxR0pJd05VTUYxU1dVb21iSUlrK2FmMXVudURZZ01tMDgyYUhZd0QrbXpKdnY5SXU4ZHNnZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYWNlZnVsLWZzLy0vZ3JhY2VmdWwtZnMtNC4yLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SYko1L2ptRmNOTkNjRFY1bzllVG5CTEovSHN6V1YwUDczYmMrRmY0blMvckpqK1lhUzZJR3lpT0wwVm9CWVgrbDFXcmwzazYzaC9LckgrbmhKMFh2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcy1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1hbnNpLy0vaGFzLWFuc2ktNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFyNFJ0VG0zMHh2RWRxVVhiU0JWV0R1K1ByVG9rSk93ZS9GVStWZGZKUGsrTVhBUG9lT3pLcFJ5ckRUblpJSndBa1E0b0JMVFU1M251MEhya0YvWjJBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXlrSlQvUTFLalRXY3RwcGdJQWdmU08wdEtWdVpVamhnTXIxN2txVHVtTWw2QWZ2M0VJU2xlVTdxWlV6b1hERlRBSFREQzROT29HL1p4VTNFdmxNUFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hlIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hlLy0vaGUtMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYvMURuVUdQb3BPUlppMG5pK0N2ckNnSFE1RnlFQUhSTFNBcHVZV01tcmJTd29OMk1uLzdrK0dsMzhnSm5SN3l5RFprNldMWHdpR29kMUpPV05ES0d3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAiaGUiOiAiYmluL2hlIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ob3N0ZWQtZ2l0LWluZm8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaG9zdGVkLWdpdC1pbmZvLy0vaG9zdGVkLWdpdC1pbmZvLTkuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NNDIyaDdvL0JSM3JtQ1E4VUhpN2N5eU1xS2x0ZFA5VW8rSjJmWEsrUlNBWSt3VGNLT0lSeWhUdUt2NHFuK0RKZjNnK1BMODkwQXpJZDVLWnBYK0NCZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeMTEuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMjAuMTcuMCB8fCA+PTIyLjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaWVlZTc1NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pZWVlNzU0Ly0vaWVlZTc1NC0xLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZGN5cWhEdlgxQzQ2bFhaY1ZxQ3BLK0Z0TVJRVmRJTU42L0RmNWpzMnpvdVVzcUc3STZzRnhpdElDKzdLWUsyOUtkWE9MSGR1OXpMNHNGbm9WUW5xYUE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgotICAgICAgICB9Ci0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lnbm9yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pZ25vcmUvLS9pZ25vcmUtNS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhzQlROVXFRVER3a1d0Y2RZSTJpMDZZL25VQkVzTkVESktqV2RpZ0x2ZWd5OGtEdUpBUzh1Umxwa2tjUXB5RVhMMFovcGpEeTVIQm1NalJDSjJncStnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW1wb3J0LWZyZXNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltcG9ydC1mcmVzaC8tL2ltcG9ydC1mcmVzaC0zLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFIzS2ZyVFpUWUxQQjZqVWpmeDZNRjlXY1dySEw5c3U1VE9iSzRaa1lnQmRXS1BPRm9Tb1FJZEV1VHVSODJwbXR4SDJzcFdHOWg2ZXR3ZnIxcExCcVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwYXJlbnQtbW9kdWxlIjogIl4xLjAuMCIsCi0gICAgICAgICJyZXNvbHZlLWZyb20iOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW11cm11cmhhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW11cm11cmhhc2gvLS9pbXVybXVyaGFzaC0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm1YTVo2d3V2RG1MaUhFbWw5eWt6cU82bHdGYm9mMEdHNElrY0dhRU5kQ1JERG1NVm5ueTdzNUhzSWdIQ2JhcTB3Mk15UGhEcWtoVFVnUzJMVTJQSEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4xOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW5kZW50LXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmRlbnQtc3RyaW5nLy0vaW5kZW50LXN0cmluZy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWRERFp1NEEyT3lJSzdMci8yekcrdzVqbWJ1azFEVkJuRXdSRVF2QnpzcEJKa0NFYlJhOEd4VTFsZ2hZY2FHSkNuUldpYmpEWGxxNzc5WDEveTV4d2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2luZGV4LXRvLXBvc2l0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luZGV4LXRvLXBvc2l0aW9uLy0vaW5kZXgtdG8tcG9zaXRpb24tMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlnNyt6dFJrcXNsTUFTMmlGYVUrT2E0S1RTaWRyNjNPc0ZHbE9ySm9XOTgxa0lZTzNDR0NTM3dBOTVQMW1VaS9JVlNKa24wRDQ3OUtUSnBWcHZGTnV3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbmkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5pLy0vaW5pLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03UG5GNG9OM0N2WkYyM0FEaEE1d1JhWUVRcEo4cXlnU2tidFRYV0JlWFdYbUVWUlhLKzFJVGNpSFd3SGhzanYxVG1XME1nYWNJdjZoRWk1cFg1TlFkQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWV4dGdsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0Z2xvYi8tL2lzLWV4dGdsb2ItMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNiS2JBTmtONjAzVmk0akVadjQ5TGVWSk1uNHlHd3Nielp3b3JFb3lFaXV0c04zbkpZZGJPMzZ6ZmhHSjZRRURwT1pJRmtEdG5xNUpSeG12bDNqc29RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Ly0vaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXp5bW01K3Urc0NzU1d5RDlxTmFlalYzREZ2aENLY2xLZGl6WWFKVXVIQTgzUkxqYjduU3VHbmRkQ0hHdjBoaytLWTdCTUFsc1dlSzRVZWc2RVY2WFFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1nbG9iIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWdsb2IvLS9pcy1nbG9iLTQuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14ZWxTYXlISDM2WmdFN1pXaGxpN3BXMzRoTmJObDhPanY1S1Zta0pENGhCZEQzdGg4VGZrOXZZYXNMTSttWFdPWmhGa2daZnhoTFNucndScjRlbFNTZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWV4dGdsb2IiOiAiXjIuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtaW5zdGFsbGVkLWdsb2JhbGx5IjogewotICAgICAgInZlcnNpb24iOiAiMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWluc3RhbGxlZC1nbG9iYWxseS8tL2lzLWluc3RhbGxlZC1nbG9iYWxseS0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaXdHcU8zSjIxYWFTa0M3alduSFAvZGlmYXp3UzdTRmVJcXh2NndFdExVOFk1S2x6RlRqeXFjU0lUMGQ4czQrZERoS3l0c2s5UEpaMkJrUzVlWndRUlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJnbG9iYWwtZGlycyI6ICJeMy4wLjAiLAotICAgICAgICAiaXMtcGF0aC1pbnNpZGUiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXBhdGgtaW5zaWRlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBhdGgtaW5zaWRlLy0vaXMtcGF0aC1pbnNpZGUtMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZkNGdBQmIreWNHQW1Lb3U4ZU1mdEN1cFNpcjVsUnhxZjRhRC92ZDBjRDJxYzRITDA3T2pDZXVITXI4Um80Q29NYWVDS0RCMC9FQ0JPVldqVHdVdlBRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmoiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtcGxhaW4tb2JqLy0vaXMtcGxhaW4tb2JqLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZV25meVJ3eEwvK1NzcldZZk9wVXR6NWIzWUQrbnlma0h2amJjYW56azh6Z3lPNEFTRDY3dVZNUnQ4azViTTRsTE1EblhmcmlSaE9wZW13K05mVDFlQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXN0cmVhbS8tL2lzLXN0cmVhbS0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaEZvaUppVGw2M25uK2tzdEhHQnRld1dTS25RTHB5YjE1NUtIaGVBMWwzOXV2dE85bldJb3AxcDN1ZHFQY1VkL3hiRjFWTE1PNG43T0k2cDdSYm5nRGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtdW5pY29kZS1zdXBwb3J0ZWQvLS9pcy11bmljb2RlLXN1cHBvcnRlZC0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta254RzJxNFVDM3U4c3RSR3lBVkpDT2R4Rm12NURaaVJjZGxJYUFRWEFiU2ZKeWErT2hvcE5vdExRcnN0QmhxdXF1NFpwdUtiRGMvOFM2bWdYZ1BGUHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzZXhlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzZXhlLy0vaXNleGUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJIeE1McDlsbktIR0hSbmc5UUZoUkNNYllBY1ZwbjY5c21TR2NxM2YzNnhqZ1ZWV1RoajRxcUxiVExscTdTc2o4QitmSVExRXVDRUdJMmxLc3lRZUl3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamFja3NwZWFrIjogewotICAgICAgInZlcnNpb24iOiAiMy40LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2phY2tzcGVhay8tL2phY2tzcGVhay0zLjQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT0dsWlFwejJ5ZmFoQS9SZDFZOENkOVNJRXNxdlhrTFZvU3cvY2d3aG5oRk1EYnNRRmVaWW9KSjdiSVpCUzlCY2FtVVc5NmFzcS9ucFBXdWdNK1JRQnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAaXNhYWNzL2NsaXVpIjogIl44LjAuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBwa2dqcy9wYXJzZWFyZ3MiOiAiXjAuMTEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanMtdG9rZW5zIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzLXRva2Vucy8tL2pzLXRva2Vucy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmRKVWZsY0UzY1V6S2lNcVFnc0N1MDZGUHU5VWRJSk8wYmVZYlBoSE40azZhcGdKdGlmY29DdFQ5YmN4T3BZQnRwRDJrQ002U2J6ZzRDYXVzVy9QS1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qcy15YW1sIjogewotICAgICAgInZlcnNpb24iOiAiMy4xNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC0zLjE0LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBNU21rcXhyMTA2WGExNTZjMk0yNjVaK0ZUclBsK294ZC9yZ09ReTJ0aWpRZUs1VHhRNDNwc08xWkN3aFZPU2RubitSemt6bFJ6L2VZNEJnSkJZVnBnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJncGFyc2UiOiAiXjEuMC43IiwKLSAgICAgICAgImVzcHJpbWEiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qczJ4bWxwYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMyeG1scGFyc2VyLy0vanMyeG1scGFyc2VyLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02bjREOGdMbExmMW41bU5MUVBSZlZpWXp1OVJBVGJselBFdG0xU3RoTVgxUGphbzByOVlJOW53N1pJZlJ4UU1FUlM4N21jc3dyZytyL09ZclBSWDZqQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInhtbGNyZWF0ZSI6ICJeMi4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzZG9jIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZG9jLy0vanNkb2MtNC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVA0QzZNV1A5eUlsTWlLOG53b1p2eE44NHZiNk1zblhjSHV5N1h6Vk92UW9DaXpXWDVKRkNCc1dJSVdLWEJsdHBvUlpYZGRVT1ZRbUNUT1p0OXlEajlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yMC4xNSIsCi0gICAgICAgICJAanNkb2Mvc2FsdHkiOiAiXjAuMi4xIiwKLSAgICAgICAgIkB0eXBlcy9tYXJrZG93bi1pdCI6ICJeMTQuMS4xIiwKLSAgICAgICAgImJsdWViaXJkIjogIl4zLjcuMiIsCi0gICAgICAgICJjYXRoYXJzaXMiOiAiXjAuOS4wIiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4yLjAuMCIsCi0gICAgICAgICJqczJ4bWxwYXJzZXIiOiAiXjQuMC4yIiwKLSAgICAgICAgImtsYXciOiAiXjMuMC4wIiwKLSAgICAgICAgIm1hcmtkb3duLWl0IjogIl4xNC4xLjAiLAotICAgICAgICAibWFya2Rvd24taXQtYW5jaG9yIjogIl44LjYuNyIsCi0gICAgICAgICJtYXJrZWQiOiAiXjQuMC4xMCIsCi0gICAgICAgICJta2RpcnAiOiAiXjEuMC40IiwKLSAgICAgICAgInJlcXVpenpsZSI6ICJeMC4yLjMiLAotICAgICAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICJeMy4xLjAiLAotICAgICAgICAidW5kZXJzY29yZSI6ICJ+MS4xMy4yIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqc2RvYyI6ICJqc2RvYy5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzZG9jL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcHpjTENYb2xVV2NOdTVIdFZNSFlkWEpqQXJqc0Y5QzBhTm5xdVpZWTR1Vy9WdTBtaXk1WW9XdmJWMzQ1SGF1VnZjQVVucFJ1aE1NY3FUY0dPWTIrdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNkb2Mvbm9kZV9tb2R1bGVzL21rZGlycCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ta2RpcnAvLS9ta2RpcnAtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZWcVZaUXlmM1dMeDJTaGQwcUo5eHV2cWdBeUtQTEFpcUlURXRxVzBvSVVqem8zUGVQRGQ2Zlc5aUZ6MzBlZjdZc3Avb2lXcWJoc3plR1dXMlQ2R3p3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAibWtkaXJwIjogImJpbi9jbWQuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzb24tYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tYnVmZmVyLy0vanNvbi1idWZmZXItMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRiVjVCZlIybXFmUVRKbStWNXRQUGRmK1pwdWhpSXZUdUFCNWc4a2NyWE9acFRUL1F3d1ZSV0J5d1gxb3pyNmxFdVBkYkh4d2FKbG05RzZtSTJzZlNRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGJiQ0g1ZENZVTVUOExjRWhodWg3SEo4OEhYdVczcXNJM1kwek9aRktmWkVIY3BXaUhVL0p4ems2MjlCcnNhYi9tTWlIUXRpOXdNUCs4NDVSUGUzVmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb24tc3RhYmxlLXN0cmluZ2lmeS13aXRob3V0LWpzb25pZnkvLS9qc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CZGJveStsN3RBM09HVzZGanlGSFdrUDVMdUJ5ajFUazMzTGp5cTBheHl6ZGs5Ly9KU2kydTNmUDFRU21kMUtOd3E2Vk9LWUdsQXU4N0Npc1ZpcjZQdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2tleXYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjUuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2V5di8tL2tleXYtNC41LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW94VkhrSFIvRUpmMkNOWG5XeFJMVzZtZzdKeUNDVWNHMER0RUdtTDJjdFVvMVBOVGluMVBVaWwrci8rNHI1TXBWZ0MvZm4xa2pzeDdtalN1aktxSXB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAianNvbi1idWZmZXIiOiAiMy4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2tsYXciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2xhdy8tL2tsYXctMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBGbzVvaXIrTzlqblh1NUVlZlliVksrbUhNQmVFVkV5MmNtY3RSMU8xTkVDY0NrUFJyZUpLclM2UXQvajNLQzJDMTQ4RGZvOWkzcENtQ01zZHFHcjBnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMS45IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9rbnV0aC1zaHVmZmxlLXNlZWRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9rbnV0aC1zaHVmZmxlLXNlZWRlZC8tL2tudXRoLXNodWZmbGUtc2VlZGVkLTEuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05cEZIMFNwbHJmeUt5b2pDTHhaZk1jdmtoZjVoSDBkK1V3UjluVFZKL0REUUpHdXpjWGpUd0I3VFA3c0RmZWhTdWRsR0dhT0xibG1FV3F2MDRFUlZXZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNlZWQtcmFuZG9tIjogIn4yLjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGV2biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZuLy0vbGV2bi0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2JUMnVINEU1TEdFN2gvbjNldmNTL3NRbEpYQ3BJcDZ5bThPV0o1ZVY2KzY3RHNxbC9MYWFUN3FKQkF0MnJ6Zm9hLzVRQkdCaHhEaXgxZE10MmtRS1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwcmVsdWRlLWxzIjogIl4xLjIuMSIsCi0gICAgICAgICJ0eXBlLWNoZWNrIjogIn4wLjQuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xpbmtpZnktaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGlua2lmeS1pdC8tL2xpbmtpZnktaXQtNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVhSENielFSQURjZFArQVRxbkR1aGhKL01SSXFEa1pYNXB5akZIUlJ5c1M4dlo1QWJxR0VvRkliNnBZSFBaK0wvT0MyTGMreFQ4dUhWVlI1Q0FLL3dRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidWMubWljcm8iOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pUFpLNmVZamJ4UnUzdUI0L1daM0VzRUlNSkZNcUFvb3BsM1IrenVxMFVqY0FtL01PNktDd2VEZ1BmUDNlbFR6dG9LUDNLdG5WSHhUbjJOSEJTRFZVdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbG9jYXRlIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE3LjIzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtNC4xNy4yMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGdWVE1wUXRJb3BDaTc5U0plRGlQMFRmV2k1Q05FYy9ML2FSZFRoM3lJdm1aWFRuaGVXcEtqU1pobnZNbDhpWGJDMXRGZzlnZEhIRE1Mb1Y3Q25HK3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2gubWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lcmdlLy0vbG9kYXNoLm1lcmdlLTQuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wS3BqcVhSVnZyWXlDc1gxc3dSL1hUSzB2YTZWUWtRTTZNTm83UHFXNzdCeWpBaG9BUkE4RWZyUDFONCtLbEtqOFlTMFpVQ3RSVC9ZVXVoeVlEdWpJUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5tZXJnZXdpdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lcmdld2l0aC8tL2xvZGFzaC5tZXJnZXdpdGgtNC42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdLM2c1UlBaV1RSU2VMU3BnUDhYaHJhK3BuakJDNTZxOUZaWWUxZDVSTjNUSjM1ZGJrR3kzWXFCU01ieUNybGJpK0NNOVozSms1eVRMN1JDc3Fib3lRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9kYXNoLnNvcnRieSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2guc29ydGJ5Ly0vbG9kYXNoLnNvcnRieS00LjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSERXWEc4aXNNbnRBeVJGNXZaN3hLdUV2T2hUNEFobFJ0LzNjelRTanZHVXhqWUNCVlJRWTQ4VmlESHlmWXo5VklvQmtXNFRNR1FOYXB4K2wzUlV3ZEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2ctc3ltYm9scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2ctc3ltYm9scy8tL2xvZy1zeW1ib2xzLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04WFB2cEFBOHV5aGZ0ZXU4cEl2UXhwSlo3U1lZZHBVaXZacEd5NnNGc0J1S1JZLzdyUUdhdmVkZUI4YUsrWmt5cTZ1cE1GVkwvOUFXNnZPWXpmUnlMZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjEuMCIsCi0gICAgICAgICJpcy11bmljb2RlLXN1cHBvcnRlZCI6ICJeMC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG91cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG91cGUvLS9sb3VwZS0yLjMuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItelNNSU5HVllrZHBZU09CbUxpMEQxVW83SlU5blZkUUtySHhDOGVZbFYrOVlLSzlXZVBxQWxMN2xTbG9yRy9VMkZ3MXcwaFRCbWFhL2pyUTNVYlBIdEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJnZXQtZnVuYy1uYW1lIjogIl4yLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG93ZXItY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb3dlci1jYXNlLy0vbG93ZXItY2FzZS0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2ZtM2wzTkFGOVdmTjZXM0pPbWY1ZHJ3cFZxWDc4SnRvR0ozQTZXMGE2Wm5sZE00MXcyZlY1RDQ5MHBzS0ZUcE1kczhUSnNlL2VITEZGc05ISGpIZ2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0c2xpYiI6ICJeMi4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjIuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTExLjIuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRVNMMkNya1MvMndUUGZ1ZW5kN1poa3pvMnUwZGFHSi9BMlZ1Y0pPZ1EvQzQ4Uy96QjhNTWVNSFNHS1lwWGhJamJQeGZ1ZXpJVGthQkgxd3F2MDBERFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIyMCB8fCA+PTIyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sdXhvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sdXhvbi8tL2x1eG9uLTMuNy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12dEVoWGgvZ05qSTlZZzF1NGpYLzBZVlBNdnh6SHVHZ0NtNnRDNWtaeWIwOHlqR1dHbnFBakdKdmNYYnFRUjJQM015TUVGblJicGNkRlM2UEJjTHFldz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21hcmtkb3duLWl0IjogewotICAgICAgInZlcnNpb24iOiAiMTQuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYXJrZG93bi1pdC8tL21hcmtkb3duLWl0LTE0LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnVVMnFuVHRpOVlLZ0s1TitJZU11YnAxNFpVS1VVdzd5ZUpia2p0b3N2SGlQMEFaNWM4SUFnRU1rNzlEMGVDOEYyM3I0QWMvcThjQUlGZG0yRnR5b0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcmdwYXJzZSI6ICJeMi4wLjEiLAotICAgICAgICAiZW50aXRpZXMiOiAiXjQuNC4wIiwKLSAgICAgICAgImxpbmtpZnktaXQiOiAiXjUuMC4wIiwKLSAgICAgICAgIm1kdXJsIjogIl4yLjAuMCIsCi0gICAgICAgICJwdW55Y29kZS5qcyI6ICJeMi4zLjEiLAotICAgICAgICAidWMubWljcm8iOiAiXjIuMS4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJtYXJrZG93bi1pdCI6ICJiaW4vbWFya2Rvd24taXQubWpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYXJrZG93bi1pdC1hbmNob3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjYuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFya2Rvd24taXQtYW5jaG9yLy0vbWFya2Rvd24taXQtYW5jaG9yLTguNi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GbENIRndObnV0TGdWVGZsT1lIUFcycFBjbDJBQUNxVnpFeGxrR1FOc2k0Q0pncU9ITjdZVGdEZDRMdWhnTjFCRk8zVFMwdkxBcnVWMVRkNmR3V1BKQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbWFya2Rvd24taXQiOiAiKiIsCi0gICAgICAgICJtYXJrZG93bi1pdCI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYXJrZG93bi1pdC9ub2RlX21vZHVsZXMvYXJncGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJncGFyc2UvLS9hcmdwYXJzZS0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOCs5V3FlYmJGenBYOU9SK1dhNk8yOWFzSW9nZVJNemNHdEFJTmRwTUhIeUFnMTBmMDVhU0ZWQmJjRXFHZi9QWHcxRWpBWitxMi9iRUJnM0R2dXJLM1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYXJrZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFya2VkLy0vbWFya2VkLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QUnNhaUc4NGJLK0FNdnh6aUUvbENGc3M4anVYak5hV3pWYk41dFhBbTRYamVhUzlOQUhob3ArUGpReHoyQTloOFE0TS94R216UDh2cU53eTZKZUswQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgIm1hcmtlZCI6ICJiaW4vbWFya2VkLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWR1cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWR1cmwvLS9tZHVybC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGYrOSsycitUZHA1d1hEWEM0UGNJQmpURHRxNFVLakNQTVFoS0l1enBKTlcwYjk2a1ZxU3dXMGJUN0ZoUlNmbUFpRllnUCtTQ1J2ZHJEb3pmaDBVNXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW1lIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWUvLS9taW1lLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qU0NVNy9WQjFsb0lXQlplMTRhRVlIVS8rMVVNRUhvYU83cXhDT1ZKT3c5R2dINzJWQVdwcHhOY2pVK3g5YTJrM0dTSUJYTkt4WFFGcVJ2dlo3dnIzQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgIm1pbWUiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWluaW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0zLjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmdqV1Vzbm5UNm4rTlVrNmVacTc3emVGZHBXMkxXRHpQNnpGR3JDYkhYaVlOdWw1RHpxazJISFE1dUZIMkROVzVYYnA4K2pWemFlTnQ5NHNzRUVsNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjEuMS43IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW5pcGFzcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pcGFzcy8tL21pbmlwYXNzLTcuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10RUJIcURuSW9NLzFyWE1FMXpna2E5ZzZRMmxjb0NreEhMdWM3T0RKNUJ4YlA1ZDRjMlo1Y0dndFhBa3U1OTIwMEN4N2RpdUhUT1lmU0JEOG42bW04QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYgfHwgMTQgPj0xNC4xNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWtkaXJwIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21rZGlycC8tL21rZGlycC0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK05zeVVVQVpEbW82WVZIekwvc3R4U3UzdDlZUzFpbGpsaXkzQlNEclhKL2RrbjFLWWRtdFpPREdHakxjYzlYTGdWVnBINEtzaEhCOFhtWmdNaGFCWGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJta2RpcnAiOiAiZGlzdC9janMvc3JjL2Jpbi5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tb2NoYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjcuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbW9jaGEvLS9tb2NoYS0xMS43LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1UVDZSZ29wRVlBQnpYV0Z4K0djSitaUTMya3A0Zk1mMHh2cFpJSWZTcTlaOGxDLysrTXRjQ25ROXQ1RlAydmVZRVA5NUZJWVN2VytVOWZWNHhybGlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3Nlci1zdGRvdXQiOiAiXjEuMy4xIiwKLSAgICAgICAgImNob2tpZGFyIjogIl40LjAuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjUiLAotICAgICAgICAiZGlmZiI6ICJeNy4wLjAiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjQuMC4wIiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKLSAgICAgICAgImdsb2IiOiAiXjEwLjQuNSIsCi0gICAgICAgICJoZSI6ICJeMS4yLjAiLAotICAgICAgICAiaXMtcGF0aC1pbnNpZGUiOiAiXjMuMC4zIiwKLSAgICAgICAgImpzLXlhbWwiOiAiXjQuMS4wIiwKLSAgICAgICAgImxvZy1zeW1ib2xzIjogIl40LjEuMCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjkuMC41IiwKLSAgICAgICAgIm1zIjogIl4yLjEuMyIsCi0gICAgICAgICJwaWNvY29sb3JzIjogIl4xLjEuMSIsCi0gICAgICAgICJzZXJpYWxpemUtamF2YXNjcmlwdCI6ICJeNi4wLjIiLAotICAgICAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICJeMy4xLjEiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMS4xIiwKLSAgICAgICAgIndvcmtlcnBvb2wiOiAiXjkuMi4wIiwKLSAgICAgICAgInlhcmdzIjogIl4xNy43LjIiLAotICAgICAgICAieWFyZ3MtcGFyc2VyIjogIl4yMS4xLjEiLAotICAgICAgICAieWFyZ3MtdW5wYXJzZXIiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJfbW9jaGEiOiAiYmluL19tb2NoYSIsCi0gICAgICAgICJtb2NoYSI6ICJiaW4vbW9jaGEuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21vY2hhL25vZGVfbW9kdWxlcy9hcmdwYXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmdwYXJzZS8tL2FyZ3BhcnNlLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04KzlXcWViYkZ6cFg5T1IrV2E2TzI5YXNJb2dlUk16Y0d0QUlOZHBNSEh5QWcxMGYwNWFTRlZCYmNFcUdmL1BYdzFFakFaK3EyL2JFQmczRHZ1ckszUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21vY2hhL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KdDB2SHlNK2ptVUJxb2pCN0UxTklZYWR0MHZJMFF4anhkMlRFclc5NHdEeitFMkxBbTV2S01YWHdnNlpaQlRIUHVVbERnUUhLWHZqR0JkZmNGMVpEUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbW9jaGEvbm9kZV9tb2R1bGVzL2RpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi8tL2RpZmYtNy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBKV0hVYjFSRmV2S0N3YUZBOVJsRzV0Q2QrRk81aVJoOUE4SEV0a21CSDJMaTAzaUpyaUI2bTZKSU40ckd6M0szSkxhd0k3L3ZlQTF4elJLUDZJU0J3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjMuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbW9jaGEvbm9kZV9tb2R1bGVzL2dsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2IvLS9nbG9iLTEwLjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGZYTjhEZmhKN05IM09lN2NGbXUzTkN1MXdLYmtSZUo4VG9yelNBRmJTS3JsTmFRU0tmSXpxWXFWWTh6bGJzMk5MQmJXcFJpVTUyR1gyUGJhQlZOa2c9PSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJPbGQgdmVyc2lvbnMgb2YgZ2xvYiBhcmUgbm90IHN1cHBvcnRlZCwgYW5kIGNvbnRhaW4gd2lkZWx5IHB1YmxpY2l6ZWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBoYXZlIGJlZW4gZml4ZWQgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi4gUGxlYXNlIHVwZGF0ZS4gU3VwcG9ydCBmb3Igb2xkIHZlcnNpb25zIG1heSBiZSBwdXJjaGFzZWQgKGF0IGV4b3JiaXRhbnQgcmF0ZXMpIGJ5IGNvbnRhY3RpbmcgaUBpenMubWUiLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZm9yZWdyb3VuZC1jaGlsZCI6ICJeMy4xLjAiLAotICAgICAgICAiamFja3NwZWFrIjogIl4zLjEuMiIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjkuMC40IiwKLSAgICAgICAgIm1pbmlwYXNzIjogIl43LjEuMiIsCi0gICAgICAgICJwYWNrYWdlLWpzb24tZnJvbS1kaXN0IjogIl4xLjAuMCIsCi0gICAgICAgICJwYXRoLXNjdXJyeSI6ICJeMS4xMS4xIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJnbG9iIjogImRpc3QvZXNtL2Jpbi5tanMiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbW9jaGEvbm9kZV9tb2R1bGVzL2pzLXlhbWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMteWFtbC8tL2pzLXlhbWwtNC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFRS1Q0elF4WGw4bEx3QnRITVd3YVRjR2ZGT1p2aU9KZXQzT3kveG1HazJnWkg2NzdDSk05RXZ0ZmRTa2dXY0FUWmhqLzU1Slowcm15M215Q1Q1bHNBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJncGFyc2UiOiAiXjIuMC4xIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tb2NoYS9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMTAuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtMTAuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KTkF6WmNYckN0NDJWR0x1WXowemZBekRmQXZKV1c2QWZZbERCUXlEVjVEQ2xJMm01c0FtSytPSU83czU5WGZzUnNXSHAwMmpBSnJSYWRQUkdUdDZTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21vY2hhL25vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTkuMC45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQndCTjlBTDRkcW1FVGxwUzJ6YXN4K3ZUZVdjbFd6a2JsZlprN0tUQTVqM2plT09Oei90UkNuWm9tVXl2Tmc4M3dMNVp2OVNzNkhNSlhBZ0w4UjJZZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICJeMi4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYgfHwgMTQgPj0xNC4xNyIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tb2NoYS9ub2RlX21vZHVsZXMvcGF0aC1zY3VycnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtc2N1cnJ5Ly0vcGF0aC1zY3VycnktMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YYTROdzE3RlM5QXBRRko5dW1MaUpTNG9yR2ptN1p6d1Vyd2FtY0dRdUhTekR5dGg5Ym9LRGF5Y1lkRGNaRHVxWUFUWHc0SEZYZ2FxV1RjdFcvdjFIQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeMTAuMi4wIiwKLSAgICAgICAgIm1pbmlwYXNzIjogIl41LjAuMCB8fCBeNi4wLjIgfHwgXjcuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNkZsenViVExaRzNKMmEvTlZDQWxlRWhqenE1b3hnSHlhQ1U5eVlYdmNMc3ZvVmFISnEvczV4WEk2L1hYUDZ0ejdSOXhBT3RIblNPL3RYdEYzV1JUbEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9teiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tei8tL216LTIuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ODFHTk83bm5ZTUVockdoOUxleW1vRTQrWXIwV241TWNISVpNSzVjZlFDbCtORFgwOHNDWmdVYzkvNk1Ibmk5SVd1RkxtMVozSFRDWHUyejlmTjYyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFueS1wcm9taXNlIjogIl4xLjAuMCIsCi0gICAgICAgICJvYmplY3QtYXNzaWduIjogIl40LjAuMSIsCi0gICAgICAgICJ0aGVuaWZ5LWFsbCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25hdHVyYWwtY29tcGFyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYXR1cmFsLWNvbXBhcmUvLS9uYXR1cmFsLWNvbXBhcmUtMS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9XTkQ4ZWkzVnROQzloN1Y2MHFmZjNTVm9iSHI5OTZDVHdneHViZ3lRWUVwZzI5MGg5SjBidXlFQ05OSmV4a0ZtNXNPYWpoNUcxMTZSWUExYzhaTVN3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm8tY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uby1jYXNlLy0vbm8tY2FzZS0zLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZmdBTjNqR0FoK1JveFVHWkhUU09MSklxVWMyd21vQndHUjR0YnBOQUttbW92Rm9XcTBPZFJrYjBWa2xkUmVPMmEyaUJUL09FdWxHOVhTVWMxMHIzemc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJsb3dlci1jYXNlIjogIl4yLjAuMiIsCi0gICAgICAgICJ0c2xpYiI6ICJeMi4wLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9ybWFsaXplLXBhY2thZ2UtZGF0YS8tL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEtOC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJXaytQSTQzM2VFU1E3b3VuWXhJcDY3Q1l1VnNTMXVZU29uWDNrQTZwcy8zTFdmalZRYS9wdEVnNlkzVDZ1QU1xMW1XcFg5UFErcXgrUWFIcHNjN2dRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaG9zdGVkLWdpdC1pbmZvIjogIl45LjAuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy41IiwKLSAgICAgICAgInZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UiOiAiXjMuMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMjAuMTcuMCB8fCA+PTIyLjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtYXNzaWduLy0vb2JqZWN0LWFzc2lnbi00LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItckpnVFFua1VuSDFzRnc4eVQ2VlNVM3pEM3NXbXU2c1poSXNlWThWWCtHUnUzUDZGN0Z1K0pORG9YZmtsRWxiTEpTbmMzRlVRSFZlNGNVNWhqK0JjVWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb3B0aW9uYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vcHRpb25hdG9yLy0vb3B0aW9uYXRvci0wLjkuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNklwUTdtS1V4UmNaTkxJT2JSMGh6N2x4c2FwU1NJWU5aSndYUEdlRjBtVFZxR0tGSVhqMURRY01vVDIyUzNST2NMeVkvcnowUFdhV1o5YXlXbWFkOWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWVwLWlzIjogIl4wLjEuMyIsCi0gICAgICAgICJmYXN0LWxldmVuc2h0ZWluIjogIl4yLjAuNiIsCi0gICAgICAgICJsZXZuIjogIl4wLjQuMSIsCi0gICAgICAgICJwcmVsdWRlLWxzIjogIl4xLjIuMSIsCi0gICAgICAgICJ0eXBlLWNoZWNrIjogIl4wLjQuMCIsCi0gICAgICAgICJ3b3JkLXdyYXAiOiAiXjEuMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcC1saW1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFlPYW5NM3dHd05Hc1pOMmNWVFlQQXJ3NDU0eG5YajVxbVdGMWJFb0FjNCtjVS9vbDdHVmg3b2RldmpwMUZOSGR1SGMzS1pNY0ZkdXhVNVhjNnVKUlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ5b2N0by1xdWV1ZSI6ICJeMC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcC1sb2NhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGFOanRSV1VCWSsrekI1bkUvTndjYW9NeWxTUGsrUytaSE5CMVR6ZGJNSk1ueTZkeW5wQUd0N1gvdGwvUVlxM1RJZUU2bnhIcHBibzJMR3ltckc1UHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYWNrYWdlLWpzb24tZnJvbS1kaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhY2thZ2UtanNvbi1mcm9tLWRpc3QvLS9wYWNrYWdlLWpzb24tZnJvbS1kaXN0LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VRVpJUzMvYnk0T0M4dkwzUDJkVFhSRVRwZWJMSTJOaUk1dklyamFELzVVdHJrRlgvdE5id2pUU1JBR0MvKzdDQW8ycEljQmFSZ1dtY0JCSGNzYUNJdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhZC1yaWdodCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYWQtcmlnaHQvLS9wYWQtcmlnaHQtMC4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRjeThNOTVpb0lHb2xDb01tbTJjTW50R1IxbFBMRWJPTXpPS3U4YnpqdUpQNkpwekVNUWNESG1oN2hITFlHZ29iK25LZTFZSEZNYUc0VjU5SFFhODlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmVwZWF0LXN0cmluZyI6ICJeMS41LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXJlbnQtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhcmVudC1tb2R1bGUvLS9wYXJlbnQtbW9kdWxlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HUTJFV1JwUVY4L28rQXc4WXF0ZlpaUGZOUldaWWtiaWRFOWs1cnBsL2hDM3Z0SEhCZkdtMklmaTZxV1YrY29ER2tyVUtaQXhFM0xvdDVrY3NSbGgrZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGxzaXRlcyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGFyc2UtanNvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi04LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWJpR3l2c3BJK2ZBb1JRYklQUmRkQ2NTVFY5L0xzSmJmMGUvUzg1Vkxvd1ZHelJtb2tmbmVnMmt3VlcvS1U1ck9YclBTYkYxcUFLUE1nTlRxcVJPUVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yNi4yIiwKLSAgICAgICAgImluZGV4LXRvLXBvc2l0aW9uIjogIl4xLjEuMCIsCi0gICAgICAgICJ0eXBlLWZlc3QiOiAiXjQuMzkuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLWV4aXN0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4aXN0cy8tL3BhdGgtZXhpc3RzLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hazlReTVRN2pZYjJXd2NleTVGcHZnMktvQWMvWkloTFNMT1NCbVJteWdQc0d3a1ZWdDBmWmEwcXJ0TXorbTZ0SlRBSGZaUThGbm1CNE1HNExXeTcvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGF0aC1rZXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1rZXkvLS9wYXRoLWtleS0zLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb2ptZU4wcWQreTBqc3pFdG9ZNDhyMFBlcTVkd01Fa0lsQ091NlE1ZjQxbGZrc3dYdUt0WXJoZ29UcExueUljSG0yNFVocXgrNVRxbTJJblN3TGhFNlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtc2N1cnJ5Ly0vcGF0aC1zY3VycnktMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNPL2lWVnNKQVBzT25wd1dJZUQrZDZ6LzdQbXFBcHlRZVBVdENuZGphdGovOUk1THlsSHZ0NXFsdUZhQlQzSTVoM3IxZWpmUjA1NmMrRkN2K05uTlhnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogIl4xMS4wLjAiLAotICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIxOCB8fCAyMCB8fCA+PTIyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGh2YWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aHZhbC8tL3BhdGh2YWwtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURwNnpHcXBUZEVUZFI2M2xlaEpZUGVJT3FwaU5CTnRjN0JwV1NMck9qZTdVYUlzRTVhWTkyci9BdW5RQTdyc1h2ZXQzbHJKM0puWlgyOVVQVEtYeUtRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGljb2NvbG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvY29sb3JzLy0vcGljb2NvbG9ycy0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGNlSDJzbmh0YjVNOWxpcURzbUV3NTZsZTM3Nm1UWmtFWC9qRWIvUnhORnllZ051bDdlTnNsQ1hQOUZEai9MY3UwWDhLRXlNY2VQMm50cGFIckRFVkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcmVsdWRlLWxzIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZWx1ZGUtbHMvLS9wcmVsdWRlLWxzLTEuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12a2NEUHJSWm8xUVpMYm41UkxHUHBnL1dtSVE2NXFvV1doY0dLZi9iNWVwbGtrYXJYMG05ejhwcENhdDRtbE9xVXNXcHlOdVlnTzNWUnlyWUhTelg1Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcmV0dGllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dGllci8tL3ByZXR0aWVyLTMuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VT25HNkxmdHpiZGFIWmNLb1BGdE9jQ0t6dHJRNTdXa0hEZVJEOXQvUFRRdG1UME5IU2VXV2VwajZwUzB6L043KzA4QkhGRFFWVXJmbWZNUmNad2JNZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInByZXR0aWVyIjogImJpbi9wcmV0dGllci5janMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ByZXR0aWVyL3ByZXR0aWVyP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJldHRpZXItbGludGVyLWhlbHBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHRpZXItbGludGVyLWhlbHBlcnMvLS9wcmV0dGllci1saW50ZXItaGVscGVycy0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU3hUb1I3UDhZMmxXbXYva1R6VkxDMXQvR0RJMldHak13TmhMTEU5cXRIOFExM0MrYUVtdVJsekRzdDRVcDRzMFdjOHNGMk0rSjU3aUIzY01McWZ0Zmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmYXN0LWRpZmYiOiAiXjEuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcm9jZXNzIjogewotICAgICAgInZlcnNpb24iOiAiMC4xMS4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvY2Vzcy8tL3Byb2Nlc3MtMC4xMS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2RHZWYvZHJXRm95ZEQxSnNNenVGZjgxMDBuWmwrR1QreWFjYzJiRWNlZDVmOVJqazR6K1d0RlVUQnU5UGhPaTlqL2pmbUJQdTBtTUVZNHdJZEFGOEE9PSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Byb2dyZXNzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb2dyZXNzLy0vcHJvZ3Jlc3MtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdQaUh0TGxsNUxkbktJTXcxMDBJKzh4SlhSNWdXMlF3V1lrVDZpSnZhMGJYaXRaS2EvWE1yU2JkbWczcjJYbmFpZHo5UXVtZDBWUGFNclpsRjlWOXNBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJvcGVydHktZXhwciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9wZXJ0eS1leHByLy0vcHJvcGVydHktZXhwci0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU1Z0bXhoUkUvQ0drbjNlWlkxVDZwQzhObG42RnIvbHUxbUtTZ1J1ZDBlQzczd2hqR2ZvQW9nYm43OExrRDhhRkwwenozYkFGZXJLU25PbDdObEVyQkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wdW55Y29kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdW55Y29kZS8tL3B1bnljb2RlLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12WXQ3VUQxVTlXZzYxMzhzaEx0TE92ZEF1KzhEc0MvaWxGdEVWSGNIK3d5ZGNTcE5FMjBBZlNPZHVmNk1rUkZhaEw1Rlk3WDFvVTduS1ZaRnRmcThGZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHVueWNvZGUuanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVueWNvZGUuanMvLS9wdW55Y29kZS5qcy0yLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdXhGSUhVMFlsSFloRFF0VjRSOUo2YTUyU0x4MjhCQ2pUKzRpZWg3SUdiZ3dWSldPK2ttNDMxYzR5UmxSRVVBc0FtdC91TWpRVXlRSE5FUGYwTTM5Q0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JhbmRvbWJ5dGVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JhbmRvbWJ5dGVzLy0vcmFuZG9tYnl0ZXMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZZbDNpT1grNENLVVd1eEdpOVVraGllNmZzcVhxUzlGRTJaYWljNHRORkQyTjJRUWFYT01GYnVLSzRRbURIQzBKTzZCMVpwNDFKMExwVDBvUjY4YW1RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2FmZS1idWZmZXIiOiAiXjUuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFkLXBhY2thZ2UtdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtcGFja2FnZS11cC8tL3JlYWQtcGFja2FnZS11cC0xMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVE1aE1WQll1ci9lUU5XRGRiRjQvV3FxcjlCanZ0cncya2pHeHhCYktMYng4YlZDTDhnY0FyalR5OHpEVXVMR1FpY2Z0cE11VTByaVFOY0FzYnRPVnN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmluZC11cC1zaW1wbGUiOiAiXjEuMC4xIiwKLSAgICAgICAgInJlYWQtcGtnIjogIl4xMC4wLjAiLAotICAgICAgICAidHlwZS1mZXN0IjogIl41LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0yMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFkLXBhY2thZ2UtdXAvbm9kZV9tb2R1bGVzL3R5cGUtZmVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtNS40LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpuVHJ6R3UrelBWM2FYSVVobnlXSmo0ei93aWdNc2RZYWpHTElZYWtxeU9XMW5QbGx6WEVKZWUwUVFiSGorQ1RJUXRYR2xBanVLMFVZKzJ4VHlqVkF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidGFnZ2VkLXRhZyI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhZC1wa2ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtcGtnLy0vcmVhZC1wa2ctMTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JOGcybEFyUWlQNzhsbDUxVWVNWm9qZXd0WWdJUkNLQ1dxWkVnT084Yy91ZWZUSStYRFh2Q1NYdTMrWU5VYVROdlp6b2JyTDUrU3FIakJyQnlSUlRkZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub3JtYWxpemUtcGFja2FnZS1kYXRhIjogIl4yLjQuNCIsCi0gICAgICAgICJub3JtYWxpemUtcGFja2FnZS1kYXRhIjogIl44LjAuMCIsCi0gICAgICAgICJwYXJzZS1qc29uIjogIl44LjMuMCIsCi0gICAgICAgICJ0eXBlLWZlc3QiOiAiXjUuNC40IiwKLSAgICAgICAgInVuaWNvcm4tbWFnaWMiOiAiXjAuNC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGtnL25vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjQuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTUuNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KblRyekd1K3pQVjNhWElVaG55V0pqNHovd2lnTXNkWWFqR0xJWWFrcXlPVzFuUGxselhFSmVlMFFRYkhqK0NUSVF0WEdsQWp1SzBVWSsyeFR5alZBdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRhZ2dlZC10YWciOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tNC43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9JR0dtY3BUTHdQZ2E4Qm42L1o3NVNWYUgxejVkVXV0MmliU3lBTVZobVVnZ1dwbURuMmRhcEIwbjdmOG53YVNpUnRlcEFzZkp5ZlhJTzVEQ1ZBT0RnPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFib3J0LWNvbnRyb2xsZXIiOiAiXjMuMC4wIiwKLSAgICAgICAgImJ1ZmZlciI6ICJeNi4wLjMiLAotICAgICAgICAiZXZlbnRzIjogIl4zLjMuMCIsCi0gICAgICAgICJwcm9jZXNzIjogIl4wLjExLjEwIiwKLSAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIl4xLjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWRkaXJwIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRkaXJwLy0vcmVhZGRpcnAtNC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdEaHdrTGZ5d1dMMnM2dkVqeWhyaStlWG1mSDZqMUw3SkUyN1docUxlWXpvaC9BM0RCYVlHRWoySC9IRlpDbi9rTWZpbTczRlh4RUpUdzA2V3R4UXdnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTQuMTguMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiaW5kaXZpZHVhbCIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9wYXVsbWlsbHIuY29tL2Z1bmRpbmcvIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWZsZWN0LW1ldGFkYXRhIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZmxlY3QtbWV0YWRhdGEvLS9yZWZsZWN0LW1ldGFkYXRhLTAuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11ckJ3Z2ZydlZQL2VBeVh4NGhsdUppdkJLenVFYlNRczlyS1dDckNrYlN4TnY4bXhQY1VaS2V1b0YzVXk0bUpsM0x3cHJwNnl5NS8zOVZXaWdaNEs2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlZ2V4cC1tYXRjaC1pbmRpY2VzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2V4cC1tYXRjaC1pbmRpY2VzLy0vcmVnZXhwLW1hdGNoLWluZGljZXMtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR3WnVBa3Q4TkY1bUt3R0dFUjFFR2gyUFJxeXZoUmhoTHZpSCtSOHk4ZEl1YVFST2xVZlhqdDRzOVpUWHN0SXNTa3B0ZjA2QlN2d2NFbW1maGVKSldRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmVnZXhwLXRyZWUiOiAiXjAuMS4xMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVnZXhwLXRyZWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZ2V4cC10cmVlLy0vcmVnZXhwLXRyZWUtMC4xLjI3LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pRVR4cGpLNllvUldKRzVvNmhYTHd2allBb1crRkVabjlvczBQRC9iNkFQNnhRd3NhL1k3bENWZ0lpeEJiVVBNZmh1K2kyTHRkZUFxVlRnR2xRYXJmQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInJlZ2V4cC10cmVlIjogImJpbi9yZWdleHAtdHJlZSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBlYXQtc3RyaW5nLy0vcmVwZWF0LXN0cmluZy0xLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUFYwZHpDWUROZlJpMWpDRGJKenBXN2pOTkRSdUNPRy9qSTVjdFFjR0t0L2NsWkQrWWNQUzN5SWxXdVRKTW1FU0M4YWV2Q0ZtV0p5NXdqQUZnTnFONnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcXVpcmUtZGlyZWN0b3J5IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZGlyZWN0b3J5Ly0vcmVxdWlyZS1kaXJlY3RvcnktMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZHeEVJNyt3c0c5eHJ2ZGpzcmxtTDIyT01UVGlIUndBTXJvaUVlTWdxOGd6b0xDL1BRcjdSc1JEU1RMVWcvYlpBWnRGK1RWSWtIYzYvNFJJS3J1aStRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcXVpenpsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXp6bGUvLS9yZXF1aXp6bGUtMC4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpSckZrMUQ0T1E0U3FvdlhPZ2RhditLOEVBaFNCL0xKWnFDejh0YlgwS09iY2RlTTE1U3M1OW96V01CV21tSU5NYWdDd21xbjRaTnJ5VUdwQnNsNkp3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjE3LjIxIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXNvbHZlLWZyb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS1mcm9tLy0vcmVzb2x2ZS1mcm9tLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wYi9NWW1Yc3RBa3lzUkZ4OHBpTkkxdEdGTlFJRkEzdmtFM0dxNEV1QTFkRjZnSHAvK3ZnWnFzQ0dKYXB2eThOM1ErNG83Rnd2cXVQSmNuWjdSWXk0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FmZS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcnAzU28wN0tjZG1tS2JHdmdhTnhRU0pyN2JHVlNWazVTOUVxMUYrcHBiUm83MCtZZWFEeGt3NURkOE5QTitHRDZiam5ZbTJWdVB1Q1htcHVZdm1DWFE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgotICAgICAgICB9Ci0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlZWQtcmFuZG9tLy0vc2VlZC1yYW5kb20tMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM0RVFWNkFBSFFHaG9jMHRuLzk2YTlGc2k2djJ4ZHFlL2RNVXdsakdSYUZPelIzRWdSbUVDdkQwTzh2aThYKy91UTUwTEdIZmtOdS9FdWU1VFBLWmtRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjcuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkZLQzJJRXRRblZocFQ3OGgxWXA4d3p3cmY4Q00rTXpLTUhHSlpmQnR6aFpOeWNSRm5Yc0hrNkU1VHhJa2tNc2dOUzdtZFgzQUdCN3gyUU0yZGk0bEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlci5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2VyaWFsaXplLWphdmFzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VyaWFsaXplLWphdmFzY3JpcHQvLS9zZXJpYWxpemUtamF2YXNjcmlwdC02LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2FhMXhQQnlUVHEyZ2RlRlpZTExvK1JGRTM1Tkhaa0FicVplV05kM0JwenBwZVZpc0FxcERqY3A4ZHlmNnVJdkVxSlJkNDZqZW1teUE0aUZJZVZrOGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyYW5kb21ieXRlcyI6ICJeMi4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NoZWJhbmctY29tbWFuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGViYW5nLWNvbW1hbmQvLS9zaGViYW5nLWNvbW1hbmQtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtIeHIyelpwWXRkbXJOMXFEanJyWC9aMXJSMWtHOER4K2drcEsxRzRlWG12WHN3bWNFMWhUV0JXWVV6bHJhWXcxL3lacDZZdURZNzdZdHZiTjBkbURBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2hlYmFuZy1yZWdleCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2hlYmFuZy1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGViYW5nLXJlZ2V4Ly0vc2hlYmFuZy1yZWdleC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNysrZEZodGN4MzM1M3VCYXE4RERSNE51eEJldEJ6QzdaUU9obVRRSW5IRWQ2YlNyWGRpRXl6Q3ZHMDdaNDRVWWRMU2hXVXlYdDVNL3loejhla2NiMUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0IjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ6eVoxZTg4dzlPMWlOSmJLbk9sdllUcldQRGw0Nk8xYkcwRDNYSW52Kzl0a1ByeHJOOGpVVVRpRmxEa2ttS1dnbjFNNkNmSUExM1N1R3FPYTlLb3J3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC42LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VamdhcHVtV2xiTWhrQmd6VDdZa2M1WVhVVDQ2RjBpS3U4U0dYcTBiY3dQNWR6L2gwUGxqNmVuSnFqejFaYnEybDVXYXFZbnJWYndXT1dNeUYzRjQ3Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwLXN1cHBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuMjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjUuMjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVCSFUzTDNjenNJeVlYS1g4OGZkckdvdnhkU0NvVEdEUlo2U1lYdFNSeExaVXpIZzVQLzY2SHQ2dW9VbEh1OUVab2QraW5YaEtvM3FRZ3dYVVQveTF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnVmZmVyLWZyb20iOiAiXjEuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcGR4LWNvcnJlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BkeC1jb3JyZWN0Ly0vc3BkeC1jb3JyZWN0LTMuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rTjlkSmJ2bnlTSFVMSWx1REh5MzJXSFJVdTNPZzdCOXNiWTd0c0ZMY3RRa0lxbk1oM2hFcllnZE1qVFl1cW1jWFgrbEs1VDFsblV0M0c3ek5zd21aQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNwZHgtZXhwcmVzc2lvbi1wYXJzZSI6ICJeMy4wLjAiLAotICAgICAgICAic3BkeC1saWNlbnNlLWlkcyI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NwZHgtZXhjZXB0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR4LWV4Y2VwdGlvbnMvLS9zcGR4LWV4Y2VwdGlvbnMtMi41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBpVTQycit4TzRVYlVTMWJ1bzNMUEpramxPNzQzMFhuNVNWQWhkcHp6c1BIc2piWVZmbG5uRmRBVGdhYm5MdWRlK0NxdTI1cDZOK2cybHcvUEZzYTR3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3BkeC1leHByZXNzaW9uLXBhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHgtZXhwcmVzc2lvbi1wYXJzZS8tL3NwZHgtZXhwcmVzc2lvbi1wYXJzZS0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2JxSHVuc1FXbkpORTZLaFZTTXNNZUg1SC9MOUVweW1ienFUUTN1THdOQ0xaMVE0ODFvV2FvZnFIN25PNlYwN3hsWHdZNlBoUWRRMkllZFd4L1pLNFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzcGR4LWV4Y2VwdGlvbnMiOiAiXjIuMS4wIiwKLSAgICAgICAgInNwZHgtbGljZW5zZS1pZHMiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcGR4LWxpY2Vuc2UtaWRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR4LWxpY2Vuc2UtaWRzLy0vc3BkeC1saWNlbnNlLWlkcy0zLjAuMjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNXTGNDQ0g3Vkx1MTNUZ09IK3I4cDFPL1pud2hxdi9kYmI2bHFXeTY3RytwVDFrSG1lRC8rVjM2QVZiL3ZxOFFNSVF3VlNoSjZTc2w1RlBoMGZ1U2R3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3ByaW50Zi1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcHJpbnRmLWpzLy0vc3ByaW50Zi1qcy0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDljUGdrdkxsVjN0M0l6TDBEMFlMdkdBOUFoazRQY3ZWd1ViTjBkU0dyMWFQME5ydDRBRW5UVWJ1R3ZxdUVDMG1BNjRHcXQxZnppcmxSczVpYlh4OGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFja2ZyYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YWNrZnJhbWUvLS9zdGFja2ZyYW1lLTEuMy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vZVZ0dDdlV1FTK05hNkYvL1M0a0oySzJWYlJsUzlENDNtQWxNeVZwVldvdnk5bytqZmdIOE85YWd6QU56YWlMamNsQTBvWXpVWEVNNFB1cmhTVUNodz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZ19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhrUlg4VTFXakpGZDhMc0RKMnlRL3dXV3hhb3BFc0FCVTFYZmtNOEErajArODVKQUdwcHQxNmNyMVdoZzZLSWJiNG9rVTZNcWw2Qk9qK3V1cC93S2VBPT0iLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLWFyZ3YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLWFyZ3YvLS9zdHJpbmctYXJndi0wLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTF1UUd6N0l5Vnk5WXdocWpaSVp1MWM4Sk84ZE5JZTIweEJtU1M2cXU5a3YrK2szSkd6Q1ZtcHJiTk41S24rQmd6RDVFN1lZd2cxQ2NqdUpNUk5zdmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNi4xOSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0t5UVJRcGpKMHNJcDYyRXJTWmRHc2pNSldzYXA1b1JOaWhIaHU2RzdKVk8vOWpJQjZVeWV2TCt0WHVPcXJuZzhqL2N4S1RXeVdVd3ZTVHJpaVp6L2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC1janMiOiB7Ci0gICAgICAibmFtZSI6ICJzdHJpbmctd2lkdGgiLAotICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0t5UVJRcGpKMHNJcDYyRXJTWmRHc2pNSldzYXA1b1JOaWhIaHU2RzdKVk8vOWpJQjZVeWV2TCt0WHVPcXJuZzhqL2N4S1RXeVdVd3ZTVHJpaVp6L2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkzOFZQU0hjcWtGckNwRm5ROXZ1U1htcXV1djVvWE9LcEdlVDZhR3JyM28zR2M5QWxWYTZKQmZVU09DbmJ4R0daRisvMG9vSTdLclB1VVN6dFVkVTVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaXAtYW5zaS1janMiOiB7Ci0gICAgICAibmFtZSI6ICJzdHJpcC1hbnNpIiwKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWTM4VlBTSGNxa0ZyQ3BGblE5dnVTWG1xdXV2NW9YT0twR2VUNmFHcnIzbzNHYzlBbFZhNkpCZlVTT0NuYnhHR1pGKy8wb29JN0tyUHVVU3p0VWRVNUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1hbnNpLWNqcy9ub2RlX21vZHVsZXMvYW5zaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXVKUVhsVFNVR0wyTEg5U1VYbzhWd3NZNHNvYW5oZ282TE5TbTg0RTFMQmNFOHMzTzB3cGRpUnp5Ujl6L1paSk1sTVd2MzdxT09iOXBkSmxNVUVLRlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1qc29uLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWpzb24tY29tbWVudHMvLS9zdHJpcC1qc29uLWNvbW1lbnRzLTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZlBjK1I0aWh3cVA2Ti9hSXYyZjFnTUg4bE9WdFdRSG9xQzR5SzZvU0RWVm9jdW1Bc2ZDcWprWG5xaVlNaG1Nd1MvbUVITHA3VmVobHQzcWw2bEVpZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTguMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NcFVFTjJPb2R0VXp4dktRbDcyY1VGN1JRNUVpSHNHdlNzVkcwaWE5YzVSYldHTDJDSTRDN0VwUFM4VVRCSXBsbmx6WmlOdVY1NncrRnVOeHkzdHkyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zeW5ja2l0IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMS4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3luY2tpdC8tL3N5bmNraXQtMC4xMS4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmg3UWpUOC9TdUtVSWZPYlNYTkhOU0s2V0hvNkoxdEhDcUpzdWFGRFA3Z1AwZmt6U2ZUeEk4eTg1SnJwcFowaDhsMG1hSWdjMnRmdVpRNi90M0d0blE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAcGtnci9jb3JlIjogIl4wLjIuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE4LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vc3luY2tpdCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGFnZ2VkLXRhZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90YWdnZWQtdGFnLy0vdGFnZ2VkLXRhZy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteUVGWXJWaG9kK2hkTnl4N2c1Qm5ra2IwRzZzaThISnVyT29PRWdDOEIvTzB1WExIbGFleS82NUtSdjZjdVdCTmhCZ0hLQVJPVnBjN1F5WXFFNWdGbmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RoZW5pZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhlbmlmeS8tL3RoZW5pZnktMy4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJWWlNJVjVJRzEwSGszZW5vdHJodnowVDllbTZjeUhCTGtIL1lBWnVLcWQ4aFJrS2hTZkNHSWNQMktVWTBFUHhuZHpBTkJtTmxseldQd2FrK2JoZVN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW55LXByb21pc2UiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90aGVuaWZ5LWFsbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aGVuaWZ5LWFsbC8tL3RoZW5pZnktYWxsLTEuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1STnhRSC9xSTgvdDN0aFhKRHdjc3RVTzR6ZXFvNjQrVXkvK3NOVlJCeDRYbjJPWCtPWjlvUCtpSm5ORnFwbEZyYTJaVVZlS0NTYTJvVldpM1Q0dVZtQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRoZW5pZnkiOiAiPj0gMy4xLjAgPCA0IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGlueS1jYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnktY2FzZS8tL3RpbnktY2FzZS0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWV0L2VlTWhrTzZUWDhtblV0ZVM5emdQYlVNUWE0STZLa3A1T1JpQkQ1NDc2L20rUElSaXVtUDV0bWg1aW9KcEg3azUxS2VoYXd5MlVEZnNueHhZOFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90b3Bvc29ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b3Bvc29ydC8tL3RvcG9zb3J0LTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wYTVFT2tBVXA4RDRtb01pMlc4WkY4amNnYTdCZ1pkOTFPL3lhYkpDRlk4YXorWFN6ZUd5VEtzMEFvbzg5N2lWMU5qNmd1RnE4b3JXRFM5Nno5MW9HZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzLWRlZGVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cy1kZWRlbnQvLS90cy1kZWRlbnQtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXE1Vzd0Vk03MWUyeGpIWlRsZ2ZURG9QRi9TbXFLRzVoZGRxOVN6UjQ5Q0gyaGF5cVJLSnRRNG10UmxTeEthSmxSLys5ckVNK21uQkhmN0kyL0JRY3BRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpYi8tL3RzbGliLTIuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vSkZ1OTRIUWIrS1ZkdVNVUUw3d25wbXFuZm1Mc09BL25BaDZiNkVIMHdDRW9LMC9tUGVYVTZjM3dLRFY4M01rT3VIUFJIdFNYS0tVOTlJQmF6Uy8ydz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGUtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1jaGVjay8tL3R5cGUtY2hlY2stMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhsZVVvYzl1d0dYcWpXd1hhVVRaQW16TWNGWjU4NThRQTJ2dngxVXI1eEljaXhYSVArOExuRkRnUnBsVTMwdXM2dGVxZGxza0ZmdSthZTRLNzlPb2V3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHJlbHVkZS1scyI6ICJeMS4yLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90eXBlLWRldGVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWRldGVjdC8tL3R5cGUtZGV0ZWN0LTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BY3lsb2c4L2x1UThMN2lsK2dlb1N4aEVrYXp2a3NsZzdQU05LT1g1OW1iQjljT3ZlUDVhcTloNzRZN1lVOHlEcEp3ZXR6UVFyZkl3dGY0V3A0TEtjdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZS1mZXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC40MS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtNC40MS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UZVRTUTZINVlIdnBxVndCUmNuTERDQm5ET0hXWXU3SXZHYkhUNk44QU95bWNyOVBKR2pjMUdUdGlXWlRZZzBOQ2dZd3ZuWVdFa1ZDaFFBcjliamZ3QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdWMubWljcm8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdWMubWljcm8vLS91Yy5taWNyby0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVJESm1waG1kdlVrNkdsdzd5OURRMmJGa0tCSHdRSExpMmxzYUg2UFBtei9LYTlzRk9Cc0JsdW96aERsdFdtbnY5dS9jRjZSdDg3em5SVFBWK3lwL0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bmRlcnNjb3JlIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMy44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmRlcnNjb3JlLy0vdW5kZXJzY29yZS0xLjEzLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURYdEQzWnRFUXpjN004bTRjWG90eUhSK0ZBUzE4QzY0YXNCWVk1dnFaZXhmWXJ5Tk5uRGMwMlc0aEtnM3JkUXVxT1lhczFqa3NlWDArblpYalRYbnZRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5pY29ybi1tYWdpYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmljb3JuLW1hZ2ljLy0vdW5pY29ybi1tYWdpYy0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0g1OTBWOVZOZ1lIOWczbEg5d1dqVHJVb0tzakxGNnNHTGpoUjRzSDFMV3BMbUNPSDBaZjdQdWtoREE4QmlTN0tIZTRvUE5rY1RIcVlrajdTT0dVT3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VwcGVyLWNhc2UtZmlyc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBwZXItY2FzZS1maXJzdC8tL3VwcGVyLWNhc2UtZmlyc3QtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTUxNHBwWUhCYUt3ZkpSSy9wTkM2Yy9PeGZHYTBvYlNuQWwxMDZ1OTdFZDBJNjI1TmluOTZLQWp0dFpGNlpMM2UxWEx0cGh4bnFyT2k5aVdnbSt1K2JnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91cmktanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXJpLWpzLy0vdXJpLWpzLTQuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03cktVeXkzM1ExeWM5OHBRMURBbUx0d1gxMDlGN1RJZldsVzFZZG84V2wxaWkxU2VIaWVlaDBISGZQZUwyZk1YSzZ6MHM4ZWNLczlmckN1TEp2bmRCZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInB1bnljb2RlIjogIl4yLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdXRpbC1hcml0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlsLWFyaXR5Ly0vdXRpbC1hcml0eS0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta2t5SXNYS3dlbWZTeThaRW9hSXowNkFwQXBuV3NrNWhRTzB2TGpaUzZVa0JpR2lXKytKc3liOHZTQm9jMFdLbGZmR29HczV5WXkvajVwcDh6Y2tyRkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91dWlkIjogewotICAgICAgInZlcnNpb24iOiAiOS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V1aWQvLS91dWlkLTkuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iKzFlSk9sc1I5SzhISnBvdzlPazNmaVdPV1NJY0l6WG9kdnYwclFqVm9PVk5wV01weGYxd1pOcHQ0eTloMTBvZENOcnFuWXAxT0J6Umt0Y2tCZTNzQT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Jyb29mYSIsCi0gICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3RhdmFuIgotICAgICAgXSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ1dWlkIjogImRpc3QvYmluL3V1aWQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdmFsaWRhdGUtbnBtLXBhY2thZ2UtbGljZW5zZS8tL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURwS20yVWkveE43L0hRS0N0cFp4b1JXQmhaOVowa3F0eWdHOFhDZ05ROFpsRG54dVFtV2hqNTY2ajhmTjRDdTMvSm1iaHNEbzdmY0FKcTRzOWgyN0V3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3BkeC1jb3JyZWN0IjogIl4zLjAuMCIsCi0gICAgICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGljaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGljaC8tL3doaWNoLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTEkzVGwxVFczUHZsNzBsM3lxM1k2NGkrYXdwd1hxc0dCWVdra3FNdG5iWGdyTUQreWo3cmhXMGt1RUR4ekphWVhHakVXNW9nYXBLTk1FS05NamliQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzZXhlIjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAibm9kZS13aGljaCI6ICJiaW4vbm9kZS13aGljaCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29yZC13cmFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmQtd3JhcC8tL3dvcmQtd3JhcC0xLjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQk4yMkI1ZWFNTUk5VU10anJHZDVnNWVDWVBwQ1BEVXkwRkpYYllzYVQ1ell4akZPY2tTNTNTUURFM3BXa1ZvV3BIWFZiM0JyWWNFTjRUd2E1NUI1Y0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29ya2VycG9vbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMy40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93b3JrZXJwb29sLy0vd29ya2VycG9vbC05LjMuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVG1QUlFZWVNBbm5EaUVCMFAvWXRpcDdiRkd2cW5TVTZJMkJjdVN3N0h4K0pTZy9Ec1VpNWViWWZjOEdZYVNkcHV2T2NFczZkWHhQdXJPWXBlOVFGd2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcC1hbnNpLy0vd3JhcC1hbnNpLTcuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZVkdJajJrYW1MU1R4dzZOc1pqb0J4ZlN3c24weWNkZXNtYzRwK1EyMWM1elB1WjFwbCtOZnhWZHhQdGRIdm1OVk9RNlhTWUc0QVV0eXQvRmk3RDE2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl40LjAuMCIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMS4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay93cmFwLWFuc2k/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2ktY2pzIjogewotICAgICAgIm5hbWUiOiAid3JhcC1hbnNpIiwKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cmFwLWFuc2kvLS93cmFwLWFuc2ktNy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlWR0lqMmthbUxTVHh3Nk5zWmpvQnhmU3dzbjB5Y2Rlc21jNHArUTIxYzV6UHVaMXBsK05meFZkeFB0ZEh2bU5WT1E2WFNZRzRBVXR5dC9GaTdEMTZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMC4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4xLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS1janMvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpiQjlyQ0pBVDFyYmppVkRiMmhxS0ZITllMeGd0azhOVVJ4WjNJWndEM0Y2TnR4YlhaUUNublNpMUxreCtJRG9oZFBsRnAyMjJ3VkFMSWhlWkpRU0VnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpiQjlyQ0pBVDFyYmppVkRiMmhxS0ZITllMeGd0azhOVVJ4WjNJWndEM0Y2TnR4YlhaUUNublNpMUxreCtJRG9oZFBsRnAyMjJ3VkFMSWhlWkpRU0VnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMTkuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3MvLS93cy04LjE5LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJsQVQybWpPRUlpMFp6cnVKZkloYjNucHM3NFBSV1RDejFJamdsV0VFcFFsNVhTL1VOYW1hNnUyL3JqRmtERG91cXI0TDY3cnkrMWFHSUFMVmlXakRnPT0iLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnVmZmVydXRpbCI6ICJeNC4wLjEiLAotICAgICAgICAidXRmLTgtdmFsaWRhdGUiOiAiPj01LjAuMiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJidWZmZXJ1dGlsIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInV0Zi04LXZhbGlkYXRlIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy94bWxidWlsZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMTUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWxidWlsZGVyLy0veG1sYnVpbGRlci0xNS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlNcUdCcXRYeWVOMWUzVEdZdmdOZ0RWWjNqODRXNGN3a09YUXN3Z2hvbDZBUGdaV2FmZjlsbmJ2TjdNSFlKT2lYc3ZHUFh0alRZSkVpQzlKMnd2OUVnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3htbGNyZWF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWxjcmVhdGUvLS94bWxjcmVhdGUtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5xdU9lYkc0c25nUG1HUElDVFM1RW54cWhLYkNtejVPeDVoc3N6STJUNlU1cWRySml6QmMrMGlsWVNFalRTelUweVpjbXZwcHp0WGUvNUFsNWZVd2RnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveTE4biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95MThuLy0veTE4bi01LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHBmRnplZ2VEV0pISklBbVRMUlAyRHdIamRGNXM3am85dHV6dGRReEFoSU5DZHZTKzNuR0lOcVBkMDBBcGhxSlIvMExoQU5VUzYvKzdTQ2I5OFlPZkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YW1sIjogewotICAgICAgInZlcnNpb24iOiAiMi44LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbWwvLS95YW1sLTIuOC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tcGx5bktxYzFDMmhUVll4ZDBQVTJ4UUFjMjJUSTF2U2hBWUdrc0NDZnhibi9kRnduSFROaTFidllzQlRraGRVTnRHSWY1eE5PZzkzOHJyU1NZdlM5QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInlhbWwiOiAiYmluLm1qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTQuNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZWVtZWxpIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjcuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MvLS95YXJncy0xNy43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdkU3p6UlErK0NLbk5JL2tyS25ZUlY3SktLUFVYTUVoNjFzb2FIS2c5bXJXRWh6RldoRm54UHhHbCs2OWNEMU91NjNDMTNOVVBDbm1JY3J2cUN1TTZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2xpdWkiOiAiXjguMC4xIiwKLSAgICAgICAgImVzY2FsYWRlIjogIl4zLjEuMSIsCi0gICAgICAgICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwKLSAgICAgICAgInJlcXVpcmUtZGlyZWN0b3J5IjogIl4yLjEuMSIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4zIiwKLSAgICAgICAgInkxOG4iOiAiXjUuMC41IiwKLSAgICAgICAgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRWcHNKVzdEZGplY0FpRnBiSUIxZTNxeElRc0U2Tm9QYzUvZVRkcmJiSUM0aDBMVnNXaG5vYTNnK20ySGNsQkl1akh6c3haNFZKVkErR1V1YzIvTEJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveWFyZ3MtdW5wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MtdW5wYXJzZXIvLS95YXJncy11bnBhcnNlci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3BSVElBOVFjMWNhWjBiWjZSWVJHYkhKdGhKV3Vha2YrV21ISzByVmVMa05yckdoZm9hYkJOZHVlNmtkSU5JNnI0aWY3b2NxOWFEL243eHdLT2R6T0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMC4wIiwKLSAgICAgICAgImRlY2FtZWxpemUiOiAiXjQuMC4wIiwKLSAgICAgICAgImZsYXQiOiAiXjUuMC4yIiwKLSAgICAgICAgImlzLXBsYWluLW9iaiI6ICJeMi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3lvY3RvLXF1ZXVlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lvY3RvLXF1ZXVlLy0veW9jdG8tcXVldWUtMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJWa3N2c25OQ2RKL29oR2M2eGdQd3lOOGVoZUN4c2lMTThteHVFL3QvbU9WcUpld1B1TzFtaUxwVEhRaVJnVEtDTGV4TDRNZUFGVmFndHM3SG1OWjJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95dXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveXVwLy0veXVwLTEuNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HS0hGWDJuWHVsMi80RHRmeGhvenY3MDFqTFFIZGY2SjM0WURoMmNFa3Bxb284bGU1TWc2L0xyZHNlVkxyRmFybUZ5Z1pUbGZJaEh4L1FLZmIvUVdYdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInByb3BlcnR5LWV4cHIiOiAiXjIuMC41IiwKLSAgICAgICAgInRpbnktY2FzZSI6ICJeMS4wLjMiLAotICAgICAgICAidG9wb3NvcnQiOiAiXjIuMC4yIiwKLSAgICAgICAgInR5cGUtZmVzdCI6ICJeMi4xOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95dXAvbm9kZV9tb2R1bGVzL3R5cGUtZmVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMTkuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTIuMTkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkFIODIycEFkQmdjTk1BZlduQ0JVM0NGWmNmWi9pMWVaandGVS9kc0xLdW15dXVQM25pdWVnMlVBdWtYWUYwRTJBQW9jODJaU1NmOUowV1FCaW56SEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyLjIwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvcGFja2FnZS5qc29uIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3BhY2thZ2UuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlMjNkMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvcGFja2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotewotICAibmFtZSI6ICJncmVtbGluIiwKLSAgInZlcnNpb24iOiAiMy44LjItYWxwaGExIiwKLSAgImRlc2NyaXB0aW9uIjogIkphdmFTY3JpcHQgR3JlbWxpbiBMYW5ndWFnZSBWYXJpYW50IiwKLSAgImF1dGhvciI6IHsKLSAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIHRlYW0iCi0gIH0sCi0gICJrZXl3b3JkcyI6IFsKLSAgICAiZ3JhcGgiLAotICAgICJncmVtbGluIiwKLSAgICAidGlua2VycG9wIiwKLSAgICAiYXBhY2hlLXRpbmtlcnBvcCIsCi0gICAgImNvbm5lY3Rpb24iLAotICAgICJnbHYiLAotICAgICJkcml2ZXIiLAotICAgICJkYXRhYmFzZSIsCi0gICAgImdyYXBoZGIiCi0gIF0sCi0gICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAiZGVwZW5kZW5jaWVzIjogewotICAgICJidWZmZXIiOiAiXjYuMC4zIiwKLSAgICAiZXZlbnRlbWl0dGVyMyI6ICJeNS4wLjEiLAotICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiXjQuNS4yIiwKLSAgICAidXVpZCI6ICJeOS4wLjEiLAotICAgICJ3cyI6ICJeOC4xNi4wIgotICB9LAotICAiZGV2RGVwZW5kZW5jaWVzIjogewotICAgICJjaGFpIjogIn40LjUuMCIsCi0gICAgImNoYWktc3RyaW5nIjogIn4xLjUuMCIsCi0gICAgImNvbG9ycyI6ICIxLjQuMCIsCi0gICAgImNyb3NzLWVudiI6ICJeMTAuMS4wIiwKLSAgICAiQGN1Y3VtYmVyL2N1Y3VtYmVyIjogIn4xMi43LjAiLAotICAgICJAZXNsaW50L2pzIjogIl45LjE2LjAiLAotICAgICJlc2xpbnQiOiAiXjkuMzYuMCIsCi0gICAgImVzbGludC1jb25maWctcHJldHRpZXIiOiAiXjEwLjAuMSIsCi0gICAgImVzbGludC1wbHVnaW4tcHJldHRpZXIiOiAiXjUuMC4wIiwKLSAgICAiZ2xvYmFscyI6ICJeMTUuMTQuMCIsCi0gICAgImpzZG9jIjogIl40LjAuNSIsCi0gICAgImpzLXlhbWwiOiAiXjMuMTQuMiIsCi0gICAgIm1vY2hhIjogIl4xMS43LjUiLAotICAgICJwcmV0dGllciI6ICJeMy4wLjAiCi0gIH0sCi0gICJyZXBvc2l0b3J5IjogewotICAgICJ0eXBlIjogImdpdCIsCi0gICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC5naXQiCi0gIH0sCi0gICJob21lcGFnZSI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCi0gICJidWdzIjogewotICAgICJ1cmwiOiAiaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AiCi0gIH0sCi0gICJzY3JpcHRzIjogewotICAgICJ0ZXN0IjogIm5wbSBydW4gdW5pdC10ZXN0ICYmIG5wbSBydW4gaW50ZWdyYXRpb24tdGVzdCIsCi0gICAgInVuaXQtdGVzdCI6ICJtb2NoYSB0ZXN0L3VuaXQvKiIsCi0gICAgImludGVncmF0aW9uLXRlc3QiOiAibnBtIHJ1biBpbnRlZ3JhdGlvbi10ZXN0LWdyYXBoc29uMzAgJiYgbnBtIHJ1biBpbnRlZ3JhdGlvbi10ZXN0LWdyYXBoYmluYXJ5IiwKLSAgICAiaW50ZWdyYXRpb24tdGVzdC1ncmFwaHNvbjMwIjogImNyb3NzLWVudiBDTElFTlRfTUlNRVRZUEU9J2FwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbicgLi9ub2RlX21vZHVsZXMvbW9jaGEvYmluL21vY2hhLmpzIHRlc3QvaW50ZWdyYXRpb24gLXQgNTAwMCIsCi0gICAgImludGVncmF0aW9uLXRlc3QtZ3JhcGhiaW5hcnkiOiAiY3Jvc3MtZW52IENMSUVOVF9NSU1FVFlQRT0nYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAnIC4vbm9kZV9tb2R1bGVzL21vY2hhL2Jpbi9tb2NoYS5qcyB0ZXN0L2ludGVncmF0aW9uIC10IDUwMDAiLAotICAgICJUT0RPIjogIiMgdGVzdCBvdGhlciBtaW1lIHR5cGVzIGxpa2UgZ3JhcGhiaW5hcnkgc3RyaW5nZCIsCi0gICAgImZlYXR1cmVzIjogIm5wbSBydW4gZmVhdHVyZXMtZ3JhcGhzb24zMCAmJiBucG0gcnVuIGZlYXR1cmVzLWdyYXBoYmluYXJ5IiwKLSAgICAiZmVhdHVyZXMtZ3JhcGhzb24zMCI6ICJjcm9zcy1lbnYgQ0xJRU5UX01JTUVUWVBFPSdhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24nIGN1Y3VtYmVyLWpzIC0tdGFncyBcIm5vdCBARGF0YVVVSUQgYW5kIG5vdCBARGF0YUxvbmdcIiAtLXJlcXVpcmUgdGVzdC9jdWN1bWJlciAuLi8uLi8uLi8uLi8uLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy8iLAotICAgICJmZWF0dXJlcy1ncmFwaGJpbmFyeSI6ICJjcm9zcy1lbnYgQ0xJRU5UX01JTUVUWVBFPSdhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjEuMCcgY3VjdW1iZXItanMgLS10YWdzIFwibm90IEBEYXRhQmlnRGVjaW1hbCBhbmQgbm90IEBEYXRhQmlnSW50IGFuZCBub3QgQERhdGFVVUlEIGFuZCBub3QgQERhdGFMb25nXCIgLS1yZXF1aXJlIHRlc3QvY3VjdW1iZXIgLi4vLi4vLi4vLi4vLi4vZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvIiwKLSAgICAiZmVhdHVyZXMtZG9ja2VyIjogIm5wbSBydW4gZmVhdHVyZXMtZ3JhcGhzb24zMC1kb2NrZXIgJiYgbnBtIHJ1biBmZWF0dXJlcy1ncmFwaGJpbmFyeS1kb2NrZXIiLAotICAgICJmZWF0dXJlcy1ncmFwaHNvbjMwLWRvY2tlciI6ICJjcm9zcy1lbnYgQ0xJRU5UX01JTUVUWVBFPSdhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24nIGN1Y3VtYmVyLWpzIC0tdGFncyBcIm5vdCBARGF0YVVVSUQgYW5kIG5vdCBARGF0YUxvbmdcIiAtLXJlcXVpcmUgdGVzdC9jdWN1bWJlciAuLi9ncmVtbGluLXRlc3QvIiwKLSAgICAiZmVhdHVyZXMtZ3JhcGhiaW5hcnktZG9ja2VyIjogImNyb3NzLWVudiBDTElFTlRfTUlNRVRZUEU9J2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wJyBjdWN1bWJlci1qcyAtLXRhZ3MgXCJub3QgQERhdGFCaWdEZWNpbWFsIGFuZCBub3QgQERhdGFCaWdJbnQgYW5kIG5vdCBARGF0YVVVSUQgYW5kIG5vdCBARGF0YUxvbmdcIiAtLXJlcXVpcmUgdGVzdC9jdWN1bWJlciAuLi9ncmVtbGluLXRlc3QvIiwKLSAgICAibGludCI6ICJlc2xpbnQgLiIsCi0gICAgImRvYyI6ICJqc2RvYyAtciAtZCBkb2MgLVIgUkVBRE1FLm1kIGxpYi8iCi0gIH0sCi0gICJlbmdpbmVzIjogewotICAgICJub2RlIjogIj49MjAiCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2VsZW1lbnQtY29tcGFyaXNvbi5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2VsZW1lbnQtY29tcGFyaXNvbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDgxYTk2Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9jdWN1bWJlci9lbGVtZW50LWNvbXBhcmlzb24uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKgotICogUG9ydGlvbnMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiB0aGUgQ2hhaSBBc3NlcnRpb24gTGlicmFyeQotICogYXQgaHR0cHM6Ly93d3cuY2hhaWpzLmNvbS8sIHdoaWNoIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KLSAqIFRoZSBmdW5jdGlvbnMgZGVlcE1lbWJlcnNCeUlkLCBmbGFnLCBhbmQgaXNTdWJzZXRPZiBhcmUgYWRhcHRlZCBmcm9tCi0gKiBDaGFpJ3Mgc291cmNlIGNvZGUuCi0gKiBTZWUgbGljZW5zZXMvY2hhaSBmb3IgZnVsbCBsaWNlbnNlLgotICovCi0KLWNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJyk7Ci1jb25zdCBkZWVwRXF1YWwgPSByZXF1aXJlKCdkZWVwLWVxbCcpOwotY29uc3QgeyBFZGdlLCBWZXJ0ZXgsIFZlcnRleFByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci0KLWZ1bmN0aW9uIGlzRWxlbWVudChvYmopIHsKLSAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRWRnZSB8fCBvYmogaW5zdGFuY2VvZiBWZXJ0ZXggfHwgb2JqIGluc3RhbmNlb2YgVmVydGV4UHJvcGVydHk7Ci19Ci0KLWNvbnN0IG9wdCA9IHtjb21wYXJhdG9yOiBjb21wYXJlRWxlbWVudHN9OwotCi1mdW5jdGlvbiBpc1N1YnNldE9mKHN1YnNldCwgc3VwZXJzZXQsIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpIHsKLSAgICBpZiAoIWNvbnRhaW5zKSB7Ci0gICAgICAgIGlmIChzdWJzZXQubGVuZ3RoICE9PSBzdXBlcnNldC5sZW5ndGgpIHJldHVybiBmYWxzZTsKLSAgICAgICAgc3VwZXJzZXQgPSBzdXBlcnNldC5zbGljZSgpOwotICAgIH0KLQotICAgIHJldHVybiBzdWJzZXQuZXZlcnkoZnVuY3Rpb24oZWxlbSwgaWR4KSB7Ci0gICAgICAgIGlmIChvcmRlcmVkKSByZXR1cm4gY21wID8gY21wKGVsZW0sIHN1cGVyc2V0W2lkeF0sIG9wdCkgOiBlbGVtID09PSBzdXBlcnNldFtpZHhdOwotCi0gICAgICAgIGlmICghY21wKSB7Ci0gICAgICAgICAgICB2YXIgbWF0Y2hJZHggPSBzdXBlcnNldC5pbmRleE9mKGVsZW0pOwotICAgICAgICAgICAgaWYgKG1hdGNoSWR4ID09PSAtMSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2ggZnJvbSBzdXBlcnNldCBzbyBub3QgY291bnRlZCB0d2ljZSBpZiBkdXBsaWNhdGUgaW4gc3Vic2V0LgotICAgICAgICAgICAgaWYgKCFjb250YWlucykgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHN1cGVyc2V0LnNvbWUoZnVuY3Rpb24oZWxlbTIsIG1hdGNoSWR4KSB7Ci0gICAgICAgICAgICBpZiAoIWNtcChlbGVtLCBlbGVtMiwgb3B0KSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBSZW1vdmUgbWF0Y2ggZnJvbSBzdXBlcnNldCBzbyBub3QgY291bnRlZCB0d2ljZSBpZiBkdXBsaWNhdGUgaW4gc3Vic2V0LgotICAgICAgICAgICAgaWYgKCFjb250YWlucykgc3VwZXJzZXQuc3BsaWNlKG1hdGNoSWR4LCAxKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gZmxhZyhvYmosIGtleSwgdmFsdWUpIHsKLSAgICB2YXIgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpKTsKLSAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykgewotICAgICAgICBmbGFnc1trZXldID0gdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGZsYWdzW2tleV07Ci0gICAgfQotfTsKLQotZnVuY3Rpb24gZGVlcE1lbWJlcnNCeUlkIChzdWJzZXQsIG1zZykgewotICAgIGlmIChtc2cpIGZsYWcodGhpcywgJ21lc3NhZ2UnLCBtc2cpOwotICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKQotICAgICAgICAsIGZsYWdNc2cgPSBmbGFnKHRoaXMsICdtZXNzYWdlJykKLSAgICAgICAgLCBzc2ZpID0gZmxhZyh0aGlzLCAnc3NmaScpOwotCi0gICAgbmV3IGNoYWkuQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7Ci0gICAgbmV3IGNoYWkuQXNzZXJ0aW9uKHN1YnNldCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7Ci0KLSAgICB2YXIgY29udGFpbnMgPSBmbGFnKHRoaXMsICdjb250YWlucycpOwotICAgIHZhciBvcmRlcmVkID0gZmxhZyh0aGlzLCAnb3JkZXJlZCcpOwotCi0gICAgdmFyIHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7Ci0KLSAgICBpZiAoY29udGFpbnMpIHsKLSAgICAgICAgc3ViamVjdCA9IG9yZGVyZWQgPyAnYW4gb3JkZXJlZCBzdXBlcnNldCcgOiAnYSBzdXBlcnNldCc7Ci0gICAgICAgIGZhaWxNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSAnICsgc3ViamVjdCArICcgb2YgI3tleHB9JzsKLSAgICAgICAgZmFpbE5lZ2F0ZU1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSAnICsgc3ViamVjdCArICcgb2YgI3tleHB9JzsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWJqZWN0ID0gb3JkZXJlZCA/ICdvcmRlcmVkIG1lbWJlcnMnIDogJ21lbWJlcnMnOwotICAgICAgICBmYWlsTXNnID0gJ2V4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSAnICsgc3ViamVjdCArICcgYXMgI3tleHB9JzsKLSAgICAgICAgZmFpbE5lZ2F0ZU1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lICcgKyBzdWJqZWN0ICsgJyBhcyAje2V4cH0nOwotICAgIH0KLQotICAgIHZhciBjbXAgPSBmbGFnKHRoaXMsICdkZWVwJykgPyBkZWVwRXF1YWwgOiB1bmRlZmluZWQ7Ci0KLSAgICB0aGlzLmFzc2VydCgKLSAgICAgICAgaXNTdWJzZXRPZihzdWJzZXQsIG9iaiwgY21wLCBjb250YWlucywgb3JkZXJlZCkKLSAgICAgICAgLCBmYWlsTXNnCi0gICAgICAgICwgZmFpbE5lZ2F0ZU1zZwotICAgICAgICAsIHN1YnNldAotICAgICAgICAsIG9iagotICAgICAgICAsIHRydWUKLSAgICApOwotfQotCi1mdW5jdGlvbiBjb21wYXJlRWxlbWVudHMoYSwgYikgewotICAgIGlmICghaXNFbGVtZW50KGEpIHx8ICFpc0VsZW1lbnQoYikpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIGEuY29uc3RydWN0b3IgPT09IGIuY29uc3RydWN0b3IgJiYgYS5pZCA9PT0gYi5pZDsKLSAgICB9Ci19Ci0KLW1vZHVsZS5leHBvcnRzID0gewotICAgIGRlZXBNZW1iZXJzQnlJZCwKLSAgICBjb21wYXJlRWxlbWVudHMsCi0gICAgb3B0Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZmVhdHVyZS1zdGVwcy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2ZlYXR1cmUtc3RlcHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ODFhYmQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZmVhdHVyZS1zdGVwcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDUyOCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3Qge0dpdmVuLCBUaGVuLCBXaGVuLCBzZXREZWZhdWx0VGltZW91dH0gPSByZXF1aXJlKCdAY3VjdW1iZXIvY3VjdW1iZXInKTsKLS8vIFNldHRpbmcgQ3VjdW1iZXIgdGltZW91dCB0byAxMHMgZm9yIEZsb2F0aW5nIEVycm9ycyBvbiBXaW5kb3dzIG9uIEdpdEh1YiBBY3Rpb25zCi1zZXREZWZhdWx0VGltZW91dCgxMCAqIDEwMDApOwotY29uc3QgY2hhaSA9IHJlcXVpcmUoJ2NoYWknKQotY2hhaS51c2UocmVxdWlyZSgnY2hhaS1zdHJpbmcnKSk7Ci1jb25zdCB1dWlkID0gcmVxdWlyZSgndXVpZCcpOwotY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7Ci1jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpOwotY29uc3QgZ3JlbWxpbiA9IHJlcXVpcmUoJy4vZ3JlbWxpbicpLmdyZW1saW47Ci1jb25zdCBncmFwaE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLWNvbnN0IGdyYXBoVHJhdmVyc2FsTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCB0cmF2ZXJzYWxNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi4vLi4vbGliL3V0aWxzJyk7Ci1jb25zdCB0cmF2ZXJzYWwgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy9hbm9ueW1vdXMtdHJhdmVyc2FsJykudHJhdmVyc2FsOwotY29uc3QgUGF0aCA9IGdyYXBoTW9kdWxlLlBhdGg7Ci1jb25zdCBfXyA9IGdyYXBoVHJhdmVyc2FsTW9kdWxlLnN0YXRpY3M7Ci1jb25zdCB0ID0gdHJhdmVyc2FsTW9kdWxlLnQ7Ci1jb25zdCBQID0gdHJhdmVyc2FsTW9kdWxlLlA7Ci1jb25zdCBkaXJlY3Rpb24gPSB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uOwotY29uc3QgbWVyZ2UgPSB0cmF2ZXJzYWxNb2R1bGUubWVyZ2U7Ci1jb25zdCBkZWVwTWVtYmVyc0J5SWQgPSByZXF1aXJlKCcuL2VsZW1lbnQtY29tcGFyaXNvbicpLmRlZXBNZW1iZXJzQnlJZDsKLWNvbnN0IHBhcnNlcnMgPSBbCi0gIFsgJ3N0clxcWyguKilcXF0nLCAoc3RyaW5nVmFsdWUpID0+IHN0cmluZ1ZhbHVlIF0sIC8vcmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIGFzIGlzCi0gIFsgJ3ZwXFxbKC4rKVxcXScsIHRvVmVydGV4UHJvcGVydHkgXSwKLSAgWyAnZHRcXFsoLispXFxdJywgdG9EYXRlVGltZSBdLAotICBbICd1dWlkXFxbKC4rKVxcXScsIHRvVXVpZCBdLAotICBbICdkXFxbKC4qKVxcXVxcLltic2lsZmRtbl0nLCB0b051bWVyaWMgXSwKLSAgWyAndlxcWyguKylcXF0nLCB0b1ZlcnRleCBdLAotICBbICd2XFxbKC4rKVxcXVxcLmlkJywgdG9WZXJ0ZXhJZCBdLAotICBbICd2XFxbKC4rKVxcXVxcLnNpZCcsIHRvVmVydGV4SWRTdHJpbmcgXSwKLSAgWyAnZVxcWyguKylcXF0nLCB0b0VkZ2UgXSwKLSAgWyAnZVxcWyguKylcXF1cXC5pZCcsIHRvRWRnZUlkIF0sCi0gIFsgJ2VcXFsoLispXFxdXFwuc2lkJywgdG9FZGdlSWRTdHJpbmcgXSwKLSAgWyAndnBcXFsoLispXFxdJywgdG9WZXJ0ZXhQcm9wZXJ0eSBdLAotICBbICdwXFxbKC4rKVxcXScsIHRvUGF0aCBdLAotICBbICdsXFxbKC4qKVxcXScsIHRvQXJyYXkgXSwKLSAgWyAnc1xcWyguKilcXF0nLCB0b1NldCBdLAotICBbICdtXFxbKC4rKVxcXScsIHRvTWFwIF0sCi0gIFsgJ3RcXFsoLispXFxdJywgdG9UIF0sCi0gIFsgJ0RcXFsoLispXFxdJywgdG9EaXJlY3Rpb24gXSwKLSAgWyAnTVxcWyguKylcXF0nLCB0b01lcmdlIF0KLV0ubWFwKHggPT4gWyBuZXcgUmVnRXhwKCdeJyArIHhbMF0gKyAnJCcpLCB4WzFdIF0pOwotCi1jaGFpLnVzZShmdW5jdGlvbiAoY2hhaSwgY2hhaVV0aWxzKSB7Ci0gIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCgnbWVtYmVycycsIGZ1bmN0aW9uIChfc3VwZXIpIHsKLSAgICByZXR1cm4gZGVlcE1lbWJlcnNCeUlkOwotICB9KTsKLX0pOwotCi1jb25zdCBpZ25vcmVSZWFzb24gPSB7Ci0gIGNsYXNzTm90U3VwcG9ydGVkOiAiSmF2YXNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjbGFzcyB0eXBlIGluIEdyYXBoQmluYXJ5IiwKLSAgbnVsbEtleXNJbk1hcE5vdFN1cHBvcnRlZFdlbGw6ICJKYXZhc2NyaXB0IGRvZXMgbm90IG5pY2VseSBzdXBwb3J0ICdudWxsJyBhcyBhIGtleSBpbiBNYXAgaW5zdGFuY2VzIiwKLSAgZmxvYXRpbmdQb2ludElzc3VlczogIkphdmFzY3JpcHQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBub3Qgd29ya2luZyBpbiB0aGlzIGNhc2UiLAotICBzdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQ6ICJKYXZhc2NyaXB0IGRvZXMgbm90IHlldCBzdXBwb3J0IHN1YmdyYXBoKCkiLAotICB0cmVlU3RlcE5vdFN1cHBvcnRlZDogIkphdmFzY3JpcHQgZG9lcyBub3QgeWV0IHN1cHBvcnQgdHJlZSgpIiwKLSAgdXVpZFNlcmlhbGl6YXRpb25Jc3N1ZXM6ICJKYXZhc2NyaXB0IGRvZXMgbm90IHNlcmlhbGl6ZSB0byBhIFVVSUQgb2JqZWN0LCB3aGljaCBjb21wbGljYXRlcyB0ZXN0IGFzc2VydGlvbnMiLAotICBuZWVkc0Z1cnRoZXJJbnZlc3RpZ2F0aW9uOiAnJywKLX07Ci0KLS8vIEFuIGFzc29jaWF0aXZlIGFycmF5IGZvciBpZ25vcmVkIGZlYXR1cmUgdGVzdHMgY29udGFpbmluZyB0aGUgc2NlbmFyaW8gbmFtZSBhcyBrZXkKLWNvbnN0IGlnbm9yZWRTY2VuYXJpb3MgPSB7Ci0gIC8vIGphdmFzY3JpcHQgZG9lc24ndCBoYXZlIHN1YmdyYXBoKCkgc3RlcCB5ZXQKLSAgJ2dfVlgxWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5zdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpLAotICAnZ19WX3JlcGVhdFhib3RoRVhjcmVhdGVkWF9zdWJncmFwaFhzZ1hfb3V0VlhfdGltZXNYNVhfbmFtZV9kZWR1cF9jYXBYc2dYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5zdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpLAotICAnZ19WX291dEVYbm9leGlzdFhfc3ViZ3JhcGhYc2dYY2FwWHNnWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24uc3ViZ3JhcGhTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfRV9oYXNYd2VpZ2h0XzBfNVhfc3ViZ3JhcGhYYVhfc2VsZWN0WGFYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5zdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpLAotICAvLyBqYXZhc2NyaXB0IGRvZXNuJ3QgaGF2ZSB0cmVlKCkgc3RlcCB5ZXQKLSAgJ2dfVlgxWF9vdXRfb3V0X3RyZWVfYnlYbmFtZVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVlgxWF9vdXRfb3V0X3RyZWUnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVl9vdXRfdHJlZV9ieVhhZ2VYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi50cmVlU3RlcE5vdFN1cHBvcnRlZCksCi0gICdnX1ZYMVhfb3V0X291dF90cmVlWGFYX2J5WG5hbWVYX2JvdGhfYm90aF9jYXBYYVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYm90aF9ib3RoX2NhcFhhWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24udHJlZVN0ZXBOb3RTdXBwb3J0ZWQpLAotICAnZ19WWDFYX291dF9vdXRfdHJlZV9ieVhsYWJlbFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbGFiZWxYX2JvdGhfYm90aF9jYXBYYVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVlgxWF9vdXRfb3V0X291dF90cmVlJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi50cmVlU3RlcE5vdFN1cHBvcnRlZCksCi0gICdnX1ZYMVhfb3V0RV9pblZfYm90aEVfb3RoZXJWX3RyZWUnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVlgxWF9vdXRFX2luVl9ib3RoRV9vdGhlclZfdHJlZV9ieVhuYW1lWF9ieVhsYWJlbFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKLSAgJ2dfVl9vdXRfdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi50cmVlU3RlcE5vdFN1cHBvcnRlZCksCi0gICdnX1Zfb3V0X29yZGVyX2J5WG5hbWVYX2xvY2FsWHRyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwgCi0gICAvLyBmbG9hdGluZyBwb2ludCBpc3N1ZXMKLSAgJ2dfd2l0aFNhY2tYQmlnSW50ZWdlcl9URU5fcG93WDEwMDBYX2Fzc2lnblhfVl9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5mbG9hdGluZ1BvaW50SXNzdWVzKSwKLSAgJ2dfd2l0aFNhY2tYMlhfVl9zYWNrWGRpdlhfYnlYY29uc3RhbnRYNF8wWFhfc2Fjayc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24uZmxvYXRpbmdQb2ludElzc3VlcyksCi0gIC8vIHV1aWQgaXNzdWVzCi0gICdnX2luamVjdF9vcmRlcl9ieVhkZXNjWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24udXVpZFNlcmlhbGl6YXRpb25Jc3N1ZXMpLAotICAnZ19pbmplY3Rfb3JkZXInOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnV1aWRTZXJpYWxpemF0aW9uSXNzdWVzKSwKLX07Ci0KLUdpdmVuKC9edGhlICguKykgZ3JhcGgkLywgZnVuY3Rpb24gKGdyYXBoTmFtZSkgewotICAvLyBpZiB0aGUgc2NlbmFyaW8gaXMgaWdub3JlZCB0aGVuIHNraXAgdGhlIHRlc3QKLSAgaWYgKGlnbm9yZWRTY2VuYXJpb3NbdGhpcy5zY2VuYXJpb10pIHsKLSAgICByZXR1cm4gJ3NraXBwZWQnOwotICB9Ci0gIHRoaXMuZ3JhcGhOYW1lID0gZ3JhcGhOYW1lOwotICBjb25zdCBkYXRhID0gdGhpcy5nZXREYXRhKCk7Ci0gIHRoaXMuZyA9IHRyYXZlcnNhbCgpLndpdGhfKGRhdGEuY29ubmVjdGlvbik7Ci0KLSAgaWYgKHRoaXMuaXNHcmFwaENvbXB1dGVyKSB7Ci0gICAgdGhpcy5nID0gdGhpcy5nLndpdGhDb21wdXRlcigpOwotICB9Ci0KLSAgaWYgKGdyYXBoTmFtZSA9PT0gJ2VtcHR5JykgewotICAgIHJldHVybiB0aGlzLmNsZWFuRW1wdHlHcmFwaCgpOwotICB9Ci19KTsKLQotR2l2ZW4oJ3RoZSBncmFwaCBpbml0aWFsaXplciBvZicsIGZ1bmN0aW9uICh0cmF2ZXJzYWxUZXh0KSB7Ci0gIGNvbnN0IHAgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhcmFtZXRlcnMpOwotICBwLmcgPSB0aGlzLmc7Ci0gIGNvbnN0IHRyYXZlcnNhbCA9IGdyZW1saW5bdGhpcy5zY2VuYXJpb10uc2hpZnQoKShwKTsKLSAgcmV0dXJuIHRyYXZlcnNhbC50b0xpc3QoKTsKLX0pOwotCi1HaXZlbignYW4gdW5zdXBwb3J0ZWQgdGVzdCcsICgpID0+IHt9KTsKLQotR2l2ZW4oJ3RoZSB0cmF2ZXJzYWwgb2YnLCBmdW5jdGlvbiAodHJhdmVyc2FsVGV4dCkgewotICBjb25zdCBwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbWV0ZXJzKTsKLSAgcC5nID0gdGhpcy5nOwotICB0aGlzLnRyYXZlcnNhbCA9IGdyZW1saW5bdGhpcy5zY2VuYXJpb10uc2hpZnQoKShwKTsKLSAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5zaWRlRWZmZWN0cykgewotICAgIHRoaXMudHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkuYWRkU291cmNlKCd3aXRoU2lkZUVmZmVjdCcsIFtrZXksIHRoaXMuc2lkZUVmZmVjdHNba2V5XV0pOwotICB9Ci19KTsKLQotR2l2ZW4oL151c2luZyB0aGUgcGFyYW1ldGVyICguKykgZGVmaW5lZCBhcyAiKC4rKSIkLywgZnVuY3Rpb24gKHBhcmFtTmFtZSwgc3RyaW5nVmFsdWUpIHsKLSAgLy8gUmVtb3ZlIGVzY2FwZWQgY2hhcnMKLSAgc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZS5yZXBsYWNlKC9cXCIvZywgJyInKTsKLSAgbGV0IHAgPSBQcm9taXNlLnJlc29sdmUoKTsKLSAgaWYgKHRoaXMuZ3JhcGhOYW1lID09PSAnZW1wdHknKSB7Ci0gICAgcCA9IHRoaXMubG9hZEVtcHR5R3JhcGhEYXRhKCk7Ci0gIH0KLSAgcmV0dXJuIHAudGhlbigoKSA9PiB7Ci0gICAgdGhpcy5wYXJhbWV0ZXJzW3BhcmFtTmFtZV0gPSBwYXJzZVZhbHVlLmNhbGwodGhpcywgc3RyaW5nVmFsdWUpOwotICB9KS5jYXRjaChlcnIgPT4gewotICAgIGlmIChlcnIgaW5zdGFuY2VvZiBJZ25vcmVFcnJvcikgewotICAgICAgcmV0dXJuICdza2lwcGVkJzsKLSAgICB9Ci0gICAgdGhyb3cgZXJyOwotICB9KTsKLX0pOwotCi1HaXZlbigvXnVzaW5nIHRoZSBzaWRlIGVmZmVjdCAoLispIGRlZmluZWQgYXMgIiguKykiJC8sIGZ1bmN0aW9uIChzaWRlRWZmZWN0S2V5LCBzdHJpbmdWYWx1ZSkgewotICAvLyBSZW1vdmUgZXNjYXBlZCBjaGFycwotICBzdHJpbmdWYWx1ZSA9IHN0cmluZ1ZhbHVlLnJlcGxhY2UoL1xcIi9nLCAnIicpOwotICBsZXQgcCA9IFByb21pc2UucmVzb2x2ZSgpOwotICBpZiAodGhpcy5ncmFwaE5hbWUgPT09ICdlbXB0eScpIHsKLSAgICBwID0gdGhpcy5sb2FkRW1wdHlHcmFwaERhdGEoKTsKLSAgfQotICByZXR1cm4gcC50aGVuKCgpID0+IHsKLSAgICB0aGlzLnNpZGVFZmZlY3RzW3NpZGVFZmZlY3RLZXldID0gcGFyc2VWYWx1ZS5jYWxsKHRoaXMsIHN0cmluZ1ZhbHVlKTsKLSAgfSkuY2F0Y2goZXJyID0+IHsKLSAgICBpZiAoZXJyIGluc3RhbmNlb2YgSWdub3JlRXJyb3IpIHsKLSAgICAgIHJldHVybiAnc2tpcHBlZCc7Ci0gICAgfQotICAgIHRocm93IGVycjsKLSAgfSk7Ci19KTsKLQotdmFyIHJlbW92ZVByb3BlcnRpZXMgPSBmdW5jdGlvbihwKSB7Ci0gIGlmIChwID09PSB1bmRlZmluZWQpIHsgICAKLSAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuVmVydGV4IHx8IHAgaW5zdGFuY2VvZiBncmFwaE1vZHVsZS5FZGdlKSB7Ci0gICAgcC5wcm9wZXJ0aWVzID0gdW5kZWZpbmVkOwotICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBBcnJheSkgewotICAgIHAuZm9yRWFjaChyZW1vdmVQcm9wZXJ0aWVzKQotICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBNYXApIHsKLSAgICByZW1vdmVQcm9wZXJ0aWVzKEFycmF5LmZyb20ocC5rZXlzKCkpKQotICAgIHJlbW92ZVByb3BlcnRpZXMoQXJyYXkuZnJvbShwLnZhbHVlcygpKSkKLSAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuUGF0aCkgewotICAgIHJlbW92ZVByb3BlcnRpZXMocC5vYmplY3RzKQotICB9Ci0KLSAgcmV0dXJuIHAKLX0KLQotV2hlbignaXRlcmF0ZWQgdG8gbGlzdCcsIGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuIHRoaXMudHJhdmVyc2FsLnRvTGlzdCgpLnRoZW4obGlzdCA9PiB0aGlzLnJlc3VsdCA9IHJlbW92ZVByb3BlcnRpZXMobGlzdCkpLmNhdGNoKGVyciA9PiB0aGlzLnJlc3VsdCA9IGVycik7Ci19KTsKLQotV2hlbignaXRlcmF0ZWQgbmV4dCcsIGZ1bmN0aW9uICgpIHsKLSAgcmV0dXJuIHRoaXMudHJhdmVyc2FsLm5leHQoKS50aGVuKGl0ID0+IHsKLSAgICAvLyBmb3IgUGF0aCBjb21wYXJlIHVzaW5nIHRoZSBvYmplY3RzIGFycmF5Ci0gICAgdGhpcy5yZXN1bHQgPSByZW1vdmVQcm9wZXJ0aWVzKGl0LnZhbHVlIGluc3RhbmNlb2YgUGF0aCA/IGl0LnZhbHVlLm9iamVjdHMgOiBpdC52YWx1ZSApCi0gIH0pLmNhdGNoKGVyciA9PiB0aGlzLnJlc3VsdCA9IGVycik7Ci19KTsKLQotVGhlbigndGhlIHRyYXZlcnNhbCB3aWxsIHJhaXNlIGFuIGVycm9yJywgZnVuY3Rpb24oKSB7Ci0gIGV4cGVjdCh0aGlzLnJlc3VsdCkudG8uYmUuYS5pbnN0YW5jZW9mKEVycm9yKTsKLX0pOwotCi1UaGVuKC9edGhlIHRyYXZlcnNhbCB3aWxsIHJhaXNlIGFuIGVycm9yIHdpdGggbWVzc2FnZSAoXHcrKSB0ZXh0IG9mICIoLispIiQvLCBmdW5jdGlvbihjb21wYXJpc29uLCBleHBlY3RlZE1lc3NhZ2UpIHsKLSAgZXhwZWN0KHRoaXMucmVzdWx0KS50by5iZS5hLmluc3RhbmNlb2YoRXJyb3IpOwotICBpZiAoY29tcGFyaXNvbiA9PT0gImNvbnRhaW5pbmciKSB7Ci0gICAgZXhwZWN0KHRoaXMucmVzdWx0Lm1lc3NhZ2UpLnRvLmNvbnRhaW4oZXhwZWN0ZWRNZXNzYWdlKQotICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPT09ICJzdGFydGluZyIpIHsKLSAgICBleHBlY3QodGhpcy5yZXN1bHQubWVzc2FnZSkudG8uc3RhcnRXaXRoKGV4cGVjdGVkTWVzc2FnZSkKLSAgfSBlbHNlIGlmIChjb21wYXJpc29uID09PSAiZW5kaW5nIikgewotICAgIGV4cGVjdCh0aGlzLnJlc3VsdC5tZXNzYWdlKS50by5lbmRXaXRoKGV4cGVjdGVkTWVzc2FnZSkKLSAgfSBlbHNlIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29tcGFyaXNvbiBcJycgKyBjb21wYXJpc29uICsgJ1wnLSBtdXN0IGJlOiBjb250YWluaW5nLCBlbmRpbmcgb3Igc3RhcnRpbmcnKTsKLSAgfQotfSk7Ci0KLVRoZW4oL150aGUgcmVzdWx0IHNob3VsZCBiZSAoXHcrKSQvLCBmdW5jdGlvbiBhc3NlcnRSZXN1bHQoY2hhcmFjdGVyaXplZEFzLCByZXN1bHRUYWJsZSkgewotICBpZiAodGhpcy5yZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikgewotICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVuY291bnRlcmVkOicsIHRoaXMucmVzdWx0Lm1lc3NhZ2UsIHRoaXMucmVzdWx0LnN0YWNrKTsKLSAgfQotICBleHBlY3QodGhpcy5yZXN1bHQpLnRvLm5vdC5iZS5hLmluc3RhbmNlb2YoRXJyb3IpOwotCi0gIGlmIChjaGFyYWN0ZXJpemVkQXMgPT09ICdlbXB0eScpIHsKLSAgICBleHBlY3QodGhpcy5yZXN1bHQpLnRvLmJlLmVtcHR5OwotICAgIGlmICh0eXBlb2YgcmVzdWx0VGFibGUgPT09ICdmdW5jdGlvbicpewotICAgICAgcmV0dXJuIHJlc3VsdFRhYmxlKCk7Ci0gICAgfQotICAgIHJldHVybjsKLSAgfQotICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHJlc3VsdFRhYmxlLnJvd3MoKS5tYXAocm93ID0+IHBhcnNlUm93LmNhbGwodGhpcywgcm93KSk7Ci0gIHN3aXRjaCAoY2hhcmFjdGVyaXplZEFzKSB7Ci0gICAgY2FzZSAnb3JkZXJlZCc6Ci0gICAgICBleHBlY3QodG9Db21wYXJlKHRoaXMucmVzdWx0KSkudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhleHBlY3RlZFJlc3VsdCk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICd1bm9yZGVyZWQnOgotICAgICAgZXhwZWN0KHRvQ29tcGFyZSh0aGlzLnJlc3VsdCkpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKGV4cGVjdGVkUmVzdWx0KTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgJ29mJzoKLSAgICAgIC8vIHJlc3VsdCBpcyBhIHN1YnNldCBvZiB0aGUgZXhwZWN0ZWQKLSAgICAgIGV4cGVjdChleHBlY3RlZFJlc3VsdCkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnModG9Db21wYXJlKHRoaXMucmVzdWx0KSk7Ci0gICAgICBicmVhazsKLSAgfQotfSk7Ci0KLVRoZW4oJ3RoZSByZXN1bHQgc2hvdWxkIGJlIGEgc3ViZ3JhcGggd2l0aCB0aGUgZm9sbG93aW5nJywgXyA9PiB7Ci0gIC8vIHN1YmdyYXBoIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGluIGphdmFzY3JpcHQKLX0pOwotCi1UaGVuKCd0aGUgcmVzdWx0IHNob3VsZCBiZSBhIHRyZWUgd2l0aCBhIHN0cnVjdHVyZSBvZicsIF8gPT4gewotICAvLyB0cmVlIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IGluIGphdmFzY3JpcHQKLX0pOwotCi1UaGVuKC9edGhlIGdyYXBoIHNob3VsZCByZXR1cm4gKFxkKykgZm9yIGNvdW50IG9mICIoLispIiQvLCBmdW5jdGlvbiAoc3RyaW5nQ291bnQsIHRyYXZlcnNhbFRleHQpIHsKLSAgZXhwZWN0KHRoaXMucmVzdWx0KS50by5ub3QuYmUuYS5pbnN0YW5jZW9mKEVycm9yKTsKLQotICBjb25zdCBwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbWV0ZXJzKTsKLSAgcC5nID0gdGhpcy5nOwotICBjb25zdCB0cmF2ZXJzYWwgPSBncmVtbGluW3RoaXMuc2NlbmFyaW9dLnNoaWZ0KCkocCk7Ci0gIHJldHVybiB0cmF2ZXJzYWwudG9MaXN0KCkudGhlbihsaXN0ID0+IHsKLSAgICBleHBlY3QobGlzdCkudG8uaGF2ZS5sZW5ndGhPZihwYXJzZUludChzdHJpbmdDb3VudCwgMTApKTsKLSAgfSk7Ci19KTsKLQotVGhlbigvXnRoZSByZXN1bHQgc2hvdWxkIGhhdmUgYSBjb3VudCBvZiAoXGQrKSQvLCBmdW5jdGlvbiAoc3RyaW5nQ291bnQpIHsKLSAgZXhwZWN0KHRoaXMucmVzdWx0KS50by5ub3QuYmUuYS5pbnN0YW5jZW9mKEVycm9yKTsKLQotICBjb25zdCBleHBlY3RlZCA9IHBhcnNlSW50KHN0cmluZ0NvdW50LCAxMCk7Ci0gIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlc3VsdCkpIHsKLSAgICBsZXQgY291bnQgPSAwOwotICAgIGlmICh0aGlzLnJlc3VsdCBpbnN0YW5jZW9mIE1hcCkgewotICAgICAgY291bnQgPSB0aGlzLnJlc3VsdC5zaXplOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlb2YgdGhpcy5yZXN1bHQgPT09ICdvYmplY3QnKSB7Ci0gICAgICBjb3VudCA9IE9iamVjdC5rZXlzKHRoaXMucmVzdWx0KS5sZW5ndGg7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXN1bHQgbm90IHN1cHBvcnRlZDogJyArIHV0aWwuaW5zcGVjdCh0aGlzLnJlc3VsdCkpOwotICAgIH0KLSAgICBleHBlY3QoY291bnQpLnRvLmJlLmVxdWFsKGV4cGVjdGVkKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgZXhwZWN0KHRoaXMucmVzdWx0KS50by5oYXZlLmxlbmd0aE9mKGV4cGVjdGVkKTsKLX0pOwotCi1UaGVuKCdub3RoaW5nIHNob3VsZCBoYXBwZW4gYmVjYXVzZScsIF8gPT4ge30pOwotCi1mdW5jdGlvbiBnZXRTYW5kYm94KGcsIHBhcmFtZXRlcnMpIHsKLSAgY29uc3Qgc2FuZGJveCA9IHsKLSAgICBnOiBnLAotICAgIF9fOiBfXywKLSAgICBCYXJyaWVyOiB0cmF2ZXJzYWxNb2R1bGUuYmFycmllciwKLSAgICBDYXJkaW5hbGl0eTogdHJhdmVyc2FsTW9kdWxlLmNhcmRpbmFsaXR5LAotICAgIENvbHVtbjogdHJhdmVyc2FsTW9kdWxlLmNvbHVtbiwKLSAgICBEaXJlY3Rpb246IHsKLSAgICAgIEJPVEg6IHRyYXZlcnNhbE1vZHVsZS5kaXJlY3Rpb24uYm90aCwKLSAgICAgIElOOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLmluLAotICAgICAgT1VUOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLm91dCwKLSAgICAgIGZyb21fOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLmluLAotICAgICAgdG86IHRyYXZlcnNhbE1vZHVsZS5kaXJlY3Rpb24ub3V0LAotICAgIH0sCi0gICAgT3JkZXI6IHRyYXZlcnNhbE1vZHVsZS5vcmRlciwKLSAgICBQOiB0cmF2ZXJzYWxNb2R1bGUuUCwKLSAgICBUZXh0UDogdHJhdmVyc2FsTW9kdWxlLlRleHRQLAotICAgIElPOiB0cmF2ZXJzYWxNb2R1bGUuSU8sCi0gICAgUGljazogdHJhdmVyc2FsTW9kdWxlLnBpY2ssCi0gICAgUG9wOiB0cmF2ZXJzYWxNb2R1bGUucG9wLAotICAgIFNjb3BlOiB0cmF2ZXJzYWxNb2R1bGUuc2NvcGUsCi0gICAgT3BlcmF0b3I6IHRyYXZlcnNhbE1vZHVsZS5vcGVyYXRvciwKLSAgICBUOiB0cmF2ZXJzYWxNb2R1bGUudCwKLSAgICB0b0xvbmc6IHV0aWxzLnRvTG9uZywKLSAgICBXaXRoT3B0aW9uczogdHJhdmVyc2FsTW9kdWxlLndpdGhPcHRpb25zCi0gIH07Ci0gIC8vIFBhc3MgdGhlIHBhcmFtZXRlciB0byB0aGUgc2FuZGJveAotICBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5mb3JFYWNoKHBhcmFtTmFtZSA9PiBzYW5kYm94W3BhcmFtTmFtZV0gPSBwYXJhbWV0ZXJzW3BhcmFtTmFtZV0pOwotICByZXR1cm4gc2FuZGJveDsKLX0KLQotZnVuY3Rpb24gcGFyc2VSb3cocm93KSB7Ci0gIHJldHVybiBwYXJzZVZhbHVlLmNhbGwodGhpcywgcm93WzBdKTsKLX0KLQotZnVuY3Rpb24gcGFyc2VWYWx1ZShzdHJpbmdWYWx1ZSkgewotCi0gIGlmKHN0cmluZ1ZhbHVlID09PSAibnVsbCIpCi0gICAgcmV0dXJuIG51bGw7Ci0gIGlmKHN0cmluZ1ZhbHVlID09PSAidHJ1ZSIpCi0gICAgcmV0dXJuIHRydWU7Ci0gIGlmKHN0cmluZ1ZhbHVlID09PSAiZmFsc2UiKQotICAgIHJldHVybiBmYWxzZTsKLSAgaWYoc3RyaW5nVmFsdWUgPT09ICJkW05hTl0iKQotICAgIHJldHVybiBOdW1iZXIuTmFOOwotICBpZihzdHJpbmdWYWx1ZSA9PT0gImRbSW5maW5pdHldIikKLSAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwotICBpZihzdHJpbmdWYWx1ZSA9PT0gImRbLUluZmluaXR5XSIpCi0gICAgcmV0dXJuIE51bWJlci5ORUdBVElWRV9JTkZJTklUWTsKLQotICBsZXQgZXh0cmFjdGVkVmFsdWUgPSBudWxsOwotICBsZXQgcGFyc2VyID0gbnVsbDsKLSAgZm9yIChsZXQgaXRlbSBvZiBwYXJzZXJzKSB7Ci0gICAgbGV0IHJlID0gaXRlbVswXTsKLSAgICBsZXQgbWF0Y2ggPSByZS5leGVjKHN0cmluZ1ZhbHVlKTsKLSAgICBpZiAobWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkgewotICAgICAgcGFyc2VyID0gaXRlbVsxXTsKLSAgICAgIGV4dHJhY3RlZFZhbHVlID0gbWF0Y2hbMV07Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICByZXR1cm4gcGFyc2VyICE9PSBudWxsID8gcGFyc2VyLmNhbGwodGhpcywgZXh0cmFjdGVkVmFsdWUpIDogc3RyaW5nVmFsdWU7Ci19Ci0KLWZ1bmN0aW9uIHRvTnVtZXJpYyhzdHJpbmdWYWx1ZSkgewotICB0cnkgewotICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cmluZ1ZhbHVlKTsKLSAgfSBjYXRjaCAoRXJyb3IpIHsKLSAgICByZXR1cm4gQmlnSW50KHN0cmluZ1ZhbHVlKTsKLSAgfQotfQotCi1mdW5jdGlvbiB0b1ZlcnRleChuYW1lKSB7Ci0gIC8vIHNvbWUgdmVydGljZXMgYXJlIGNhY2hlZCwgbGlrZSB0aG9zZSBmcm9tIHRveSBncmFwaHMgYnV0IHNvbWUgYXJlIGp1c3QgcmVmZXJlbmNlcy4gaWYgdGhleSBhcmUKLSAgLy8gbm90IGNhY2hlZCB0aGVuIHRoZXkgYXJlIG1lYW50IHRvIGJlIHJlZmVyZW5jZXMuCi0gIGNvbnN0IHZlcnRpY2VzID0gdGhpcy5nZXREYXRhKCkudmVydGljZXM7Ci0gIGlmICh2ZXJ0aWNlcy5oYXMobmFtZSkpCi0gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YSgpLnZlcnRpY2VzLmdldChuYW1lKTsKLSAgZWxzZQotICAgIHJldHVybiBuZXcgZ3JhcGhNb2R1bGUuVmVydGV4KG5hbWUsICJ2ZXJ0ZXgiKQotfQotCi1mdW5jdGlvbiB0b1ZlcnRleElkKG5hbWUpIHsKLSAgcmV0dXJuIHRvVmVydGV4LmNhbGwodGhpcywgbmFtZSkuaWQ7Ci19Ci0KLWZ1bmN0aW9uIHRvVmVydGV4SWRTdHJpbmcobmFtZSkgewotICByZXR1cm4gdG9WZXJ0ZXguY2FsbCh0aGlzLCBuYW1lKS5pZC50b1N0cmluZygpOwotfQotCi1mdW5jdGlvbiB0b0VkZ2UobmFtZSkgewotICBjb25zdCBlID0gdGhpcy5nZXREYXRhKCkuZWRnZXNbbmFtZV07Ci0gIGlmICghZSkgewotICAgIHRocm93IG5ldyBFcnJvcih1dGlsLmZvcm1hdCgnRWRnZSB3aXRoIGtleSAiJXMiIG5vdCBmb3VuZCcsIG5hbWUpKTsKLSAgfQotICByZXR1cm4gZTsKLX0KLQotZnVuY3Rpb24gdG9FZGdlSWQobmFtZSkgewotICByZXR1cm4gdG9FZGdlLmNhbGwodGhpcywgbmFtZSkuaWQ7Ci19Ci0KLWZ1bmN0aW9uIHRvRWRnZUlkU3RyaW5nKG5hbWUpIHsKLSAgcmV0dXJuIHRvRWRnZS5jYWxsKHRoaXMsIG5hbWUpLmlkLnRvU3RyaW5nKCk7Ci19Ci0KLWZ1bmN0aW9uIHRvVmVydGV4UHJvcGVydHkobmFtZSkgewotICBjb25zdCB2cCA9IHRoaXMuZ2V0RGF0YSgpLnZlcnRleFByb3BlcnRpZXNbbmFtZV07Ci0gIGlmICghdnApIHsKLSAgICB0aHJvdyBuZXcgRXJyb3IodXRpbC5mb3JtYXQoJ1ZlcnRleFByb3BlcnR5IHdpdGgga2V5ICIlcyIgbm90IGZvdW5kJywgbmFtZSkpOwotICB9Ci0gIHJldHVybiB2cDsKLX0KLQotZnVuY3Rpb24gdG9QYXRoKHZhbHVlKSB7Ci0gIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJywnKTsKLSAgcmV0dXJuIG5ldyBQYXRoKG5ldyBBcnJheSgwKSwgcGFydHMubWFwKHggPT4gcGFyc2VWYWx1ZS5jYWxsKHRoaXMsIHgpKSk7Ci19Ci0KLWZ1bmN0aW9uIHRvVCh2YWx1ZSkgewotICByZXR1cm4gdFt2YWx1ZV07Ci19Ci0KLWZ1bmN0aW9uIHRvRGlyZWN0aW9uKHZhbHVlKSB7Ci0gIC8vIHN3YXAgRGlyZWN0aW9uLmZyb20gYWxpYXMKLSAgaWYgKHZhbHVlID09PSAnZnJvbScpCi0gICAgcmV0dXJuIGRpcmVjdGlvblsiZnJvbV8iXTsKLSAgZWxzZQotICAgIHJldHVybiBkaXJlY3Rpb25bdmFsdWUudG9Mb3dlckNhc2UoKV07Ci19Ci0KLWZ1bmN0aW9uIHRvRGF0ZVRpbWUodmFsdWUpIHsKLSAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gdG9VdWlkKHZhbHVlKSB7Ci0gIHJldHVybiB1dWlkLnBhcnNlKHZhbHVlKTsKLX0KLQotZnVuY3Rpb24gdG9NZXJnZSh2YWx1ZSkgewotICByZXR1cm4gbWVyZ2VbdmFsdWVdOwotfQotCi1mdW5jdGlvbiBzcGxpdEJ5RWxlbWVudChzKSB7Ci0gIGxldCBkZXB0aCA9IDA7Ci0gIGxldCBjdXJyZW50ID0gJyc7Ci0gIGNvbnN0IHJlc3VsdHMgPSBbXTsKLSAgZm9yIChjb25zdCBjIG9mIHMpIHsKLSAgICBpZiAoYyA9PT0gJ1snKSB7Ci0gICAgICBkZXB0aCsrOwotICAgICAgY3VycmVudCArPSBjOwotICAgIH0gZWxzZSBpZiAoYyA9PT0gJ10nKSB7Ci0gICAgICBkZXB0aC0tOwotICAgICAgY3VycmVudCArPSBjOwotICAgIH0gZWxzZSBpZiAoYyA9PT0gJywnICYmIGRlcHRoID09PSAwKSB7Ci0gICAgICByZXN1bHRzLnB1c2goY3VycmVudC50cmltKCkpOwotICAgICAgY3VycmVudCA9ICcnOwotICAgIH0gZWxzZSB7Ci0gICAgICBjdXJyZW50ICs9IGM7Ci0gICAgfQotICB9Ci0gIGlmIChjdXJyZW50Lmxlbmd0aCA+IDApIHJlc3VsdHMucHVzaChjdXJyZW50LnRyaW0oKSk7Ci0gIHJldHVybiByZXN1bHRzOwotfQotCi1mdW5jdGlvbiB0b0FycmF5KHN0cmluZ0xpc3QpIHsKLSAgaWYgKHN0cmluZ0xpc3QgPT09ICcnKSB7Ci0gICAgcmV0dXJuIG5ldyBBcnJheSgwKTsKLSAgfQotICByZXR1cm4gc3BsaXRCeUVsZW1lbnQoc3RyaW5nTGlzdCkubWFwKHggPT4gcGFyc2VWYWx1ZS5jYWxsKHRoaXMsIHgpKTsKLX0KLQotZnVuY3Rpb24gdG9TZXQoc3RyaW5nTGlzdCkgewotICBpZiAoc3RyaW5nTGlzdCA9PT0gJycpIHsKLSAgICByZXR1cm4gbmV3IFNldCgpOwotICB9Ci0KLSAgY29uc3QgcyA9IG5ldyBTZXQoKTsKLSAgc3BsaXRCeUVsZW1lbnQoc3RyaW5nTGlzdCkuZm9yRWFjaCh4ID0+IHMuYWRkKHBhcnNlVmFsdWUuY2FsbCh0aGlzLCB4KSkpOwotICByZXR1cm4gczsKLX0KLQotZnVuY3Rpb24gdG9NYXAoc3RyaW5nTWFwKSB7Ci0gIHJldHVybiBwYXJzZU1hcFZhbHVlLmNhbGwodGhpcywgSlNPTi5wYXJzZShzdHJpbmdNYXApKTsKLX0KLQotZnVuY3Rpb24gcGFyc2VNYXBWYWx1ZSh2YWx1ZSkgewotICBpZiAodmFsdWUgPT09IG51bGwpCi0gICAgcmV0dXJuIG51bGw7Ci0KLSAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsKLSAgICByZXR1cm4gcGFyc2VWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlKTsKLSAgfQotICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHsKLSAgICByZXR1cm4gdmFsdWUubWFwKHggPT4gcGFyc2VNYXBWYWx1ZS5jYWxsKHRoaXMsIHgpKTsKLSAgfQotICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgewotICAgIHJldHVybiB2YWx1ZTsKLSAgfQotICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7Ci0gIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGtleSA9PiB7Ci0gICAgbWFwLnNldChwYXJzZU1hcFZhbHVlLmNhbGwodGhpcywga2V5KSwgcGFyc2VNYXBWYWx1ZS5jYWxsKHRoaXMsIHZhbHVlW2tleV0pKTsKLSAgfSk7Ci0gIHJldHVybiBtYXA7Ci19Ci0KLS8qKgotICogQWRhcHRzIHRoZSBvYmplY3QgdG8gYmUgY29tcGFyZWQsIHJlbW92aW5nIGxhYmVscyBwcm9wZXJ0eSBvZiB0aGUgUGF0aC4KLSAqLwotZnVuY3Rpb24gdG9Db21wYXJlKG9iaikgewotICBpZiAoIW9iaikgewotICAgIHJldHVybiBvYmo7Ci0gIH0KLSAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7Ci0gICAgcmV0dXJuIG9iajsKLSAgfQotICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7Ci0gICAgcmV0dXJuIG9iai5tYXAodG9Db21wYXJlKTsKLSAgfQotICBpZiAob2JqIGluc3RhbmNlb2YgUGF0aCkgewotICAgIC8vIGxhYmVscyBhcmUgaWdub3JlZAotICAgIG9iai5sYWJlbHMgPSBuZXcgQXJyYXkoMCk7Ci0gIH0KLSAgcmV0dXJuIG9iajsKLX0KLQotZnVuY3Rpb24gSWdub3JlRXJyb3IocmVhc29uKSB7Ci0gIEVycm9yLmNhbGwodGhpcywgcmVhc29uKTsKLSAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSWdub3JlRXJyb3IpOwotfQotCi11dGlsLmluaGVyaXRzKElnbm9yZUVycm9yLCBFcnJvcik7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9jdWN1bWJlci9ncmVtbGluLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZ3JlbWxpbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZiNzQ5Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9jdWN1bWJlci9ncmVtbGluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjEyMSArMCwwIEBACi0vKgotKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0qIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0qIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qIAotKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSogCi0qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0qIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0qIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLQotCi0KLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8vKiBEbyBOT1QgZWRpdCB0aGlzIGZpbGUgZGlyZWN0bHkgLSBnZW5lcmF0ZWQgYnkgYnVpbGQvZ2VuZXJhdGUuZ3Jvb3Z5Ci0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLQotY29uc3QgdXVpZCA9IHJlcXVpcmUoJ3V1aWQnKTsKLWNvbnN0IGdyYXBoVHJhdmVyc2FsTW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCB0cmF2ZXJzYWxNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcywgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LCBPcHRpb25zU3RyYXRlZ3ksIFBhcnRpdGlvblN0cmF0ZWd5LCAKLSAgICAgICAgUmVhZE9ubHlTdHJhdGVneSwgR3JhcGhGaWx0ZXJTdHJhdGVneSwgU2VlZFN0cmF0ZWd5LCBTdWJncmFwaFN0cmF0ZWd5LCBQcm9kdWN0aXZlQnlTdHJhdGVneSwgCi0gICAgICAgIExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3ksIFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3ksIFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LCAKLSAgICAgICAgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSwgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSwgUHJvZmlsZVN0cmF0ZWd5LCBJbmxpbmVGaWx0ZXJTdHJhdGVneSwgCi0gICAgICAgIENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3ksIFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSwgRWxlbWVudElkU3RyYXRlZ3ksIE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3ksIAotICAgICAgICBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSwgQ291bnRTdHJhdGVneSwgQ29ubmVjdGl2ZVN0cmF0ZWd5LCBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5LCAKLSAgICAgICAgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3ksIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LCBSZXBlYXRVbnJvbGxTdHJhdGVneSwgCi0gICAgICAgIFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3ksIFBhdGhQcm9jZXNzb3JTdHJhdGVneSwgT3JkZXJMaW1pdFN0cmF0ZWd5LCBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5LCAKLSAgICAgICAgTGF6eUJhcnJpZXJTdHJhdGVneSwgRWFybHlMaW1pdFN0cmF0ZWd5LCBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSwgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3ksIAotICAgICAgICBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5IH0gPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLWNvbnN0IF9fID0gZ3JhcGhUcmF2ZXJzYWxNb2R1bGUuc3RhdGljczsKLWNvbnN0IEJhcnJpZXIgPSB0cmF2ZXJzYWxNb2R1bGUuYmFycmllcgotY29uc3QgQ2FyZGluYWxpdHkgPSB0cmF2ZXJzYWxNb2R1bGUuY2FyZGluYWxpdHkKLWNvbnN0IENhcmRpbmFsaXR5VmFsdWUgPSBncmFwaFRyYXZlcnNhbE1vZHVsZS5DYXJkaW5hbGl0eVZhbHVlOwotY29uc3QgQ29sdW1uID0gdHJhdmVyc2FsTW9kdWxlLmNvbHVtbgotY29uc3QgRGlyZWN0aW9uID0gewotICAgIEJPVEg6IHRyYXZlcnNhbE1vZHVsZS5kaXJlY3Rpb24uYm90aCwKLSAgICBJTjogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5pbiwKLSAgICBPVVQ6IHRyYXZlcnNhbE1vZHVsZS5kaXJlY3Rpb24ub3V0LAotICAgIGZyb21fOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLm91dCwKLSAgICB0bzogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5pbgotfTsKLWNvbnN0IElPID0gdHJhdmVyc2FsTW9kdWxlLklPOwotY29uc3QgRFQgPSB0cmF2ZXJzYWxNb2R1bGUuZHQ7Ci1jb25zdCBHVHlwZSA9IHRyYXZlcnNhbE1vZHVsZS5nVHlwZTsKLWNvbnN0IE1lcmdlID0gdHJhdmVyc2FsTW9kdWxlLm1lcmdlOwotY29uc3QgUCA9IHRyYXZlcnNhbE1vZHVsZS5QOwotY29uc3QgUGljayA9IHRyYXZlcnNhbE1vZHVsZS5waWNrCi1jb25zdCBQb3AgPSB0cmF2ZXJzYWxNb2R1bGUucG9wCi1jb25zdCBPcmRlciA9IHRyYXZlcnNhbE1vZHVsZS5vcmRlcgotY29uc3QgT3BlcmF0b3IgPSB0cmF2ZXJzYWxNb2R1bGUub3BlcmF0b3IKLWNvbnN0IFNjb3BlID0gdHJhdmVyc2FsTW9kdWxlLnNjb3BlCi1jb25zdCBUID0gdHJhdmVyc2FsTW9kdWxlLnQKLWNvbnN0IFRleHRQID0gdHJhdmVyc2FsTW9kdWxlLlRleHRQCi1jb25zdCBXaXRoT3B0aW9ucyA9IHRyYXZlcnNhbE1vZHVsZS53aXRoT3B0aW9ucwotCi1jb25zdCBncmVtbGlucyA9IHsKLSAgICBnX1ZfYnJhbmNoWGxhYmVsX2lzWHBlcnNvblhfY291bnRYX29wdGlvblgxX19hZ2VYX29wdGlvblgwX19sYW5nWF9vcHRpb25YMF9fbmFtZVg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5icmFuY2goX18ubGFiZWwoKS5pcygicGVyc29uIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKCJsYW5nIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WX2JyYW5jaFhsYWJlbF9pc1hwZXJzb25YX2NvdW50WF9vcHRpb25YMV9fYWdlWF9vcHRpb25YMF9fbGFuZ1hfb3B0aW9uWDBfX25hbWVYX29wdGlvblhhbnlfX2xhYmVsWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmJyYW5jaChfXy5sYWJlbCgpLmlzKCJwZXJzb24iKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoImxhbmciKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLmFueSwgX18ubGFiZWwoKSkgfV0sIAotICAgIGdfVl9icmFuY2hYYWdlWF9vcHRpb25YbHRYMzBYX195b3VuZ1hfb3B0aW9uWGd0WDMwWF9fb2xkWF9vcHRpb25Ybm9uZV9fb25fdGhlX2VkZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYnJhbmNoKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmx0KDMwKSwgX18uY29uc3RhbnQoInlvdW5nIikpLm9wdGlvbihQLmd0KDMwKSwgX18uY29uc3RhbnQoIm9sZCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgib24gdGhlIGVkZ2UiKSkgfV0sIAotICAgIGdfVl9icmFuY2hYaWRlbnRpdHlYX29wdGlvblhoYXNMYWJlbFhzb2Z0d2FyZVhfX2luWGNyZWF0ZWRYX25hbWVfb3JkZXJfZm9sZFhfb3B0aW9uWGhhc1huYW1lX3ZhZGFzWF9fYWdlWF9vcHRpb25YbmVxWDEyM1hfX2JvdGhFX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNMYWJlbCgic29mdHdhcmUiKSwgX18uaW5fKCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkpLm9wdGlvbihfXy5oYXMoIm5hbWUiLCAidmFkYXMiKSwgX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAubmVxKDEyMyksIF9fLmJvdGhFKCkuY291bnQoKSkgfV0sIAotICAgIGdfVl9jaG9vc2VYb3V0X2NvdW50WF9vcHRpb25YMkxfbmFtZVhfb3B0aW9uWDNMX2FnZVg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcygiYWdlIikpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWG91dF9jb3VudFhfb3B0aW9uWDJMX25hbWVYX29wdGlvblgzTF9hZ2VYX29wdGlvblhub25lX2Rpc2NhcmRYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLm91dCgpLmNvdW50KCkpLm9wdGlvbih4eDEsIF9fLnZhbHVlcygibmFtZSIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfYW5kX291dFhjcmVhdGVkWF9fb3V0WGtub3dzWF9pZGVudGl0eVhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKCJwZXJzb24iKS5hbmQoKS5vdXQoImNyZWF0ZWQiKSwgX18ub3V0KCJrbm93cyIpLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2FuZF9vdXRYY3JlYXRlZFhfb3V0WGtub3dzWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoInBlcnNvbiIpLmFuZCgpLm91dCgiY3JlYXRlZCIpLCBfXy5vdXQoImtub3dzIikpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGxhYmVsWF9vcHRpb25YYmxhaF9fb3V0WGtub3dzWFhfb3B0aW9uWGJsZWVwX19vdXRYY3JlYXRlZFhYX29wdGlvblhub25lX19pZGVudGl0eVhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbigiYmxhaCIsIF9fLm91dCgia25vd3MiKSkub3B0aW9uKCJibGVlcCIsIF9fLm91dCgiY3JlYXRlZCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2Nob29zZVhUbGFiZWxYX29wdGlvblhwZXJzb25fX291dFhrbm93c1hfbmFtZVhfb3B0aW9uWGJsZWVwX2NvbnN0YW50WGJsZWVwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oInBlcnNvbiIsIF9fLm91dCgia25vd3MiKS52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKCJibGVlcCIsIF9fLmNvbnN0YW50KCJibGVlcCIpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhUbGFiZWxYX29wdGlvblhibGFoX19vdXRYa25vd3NYWF9vcHRpb25YYmxlZXBfX291dFhjcmVhdGVkWFhfb3B0aW9uWG5vbmVfX2lkZW50aXR5WF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKCJibGFoIiwgX18ub3V0KCJrbm93cyIpKS5vcHRpb24oImJsZWVwIiwgX18ub3V0KCJjcmVhdGVkIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWFRsYWJlbFhfb3B0aW9uWGJsYWhfX291dFhrbm93c1hYX29wdGlvblhibGVlcF9fb3V0WGNyZWF0ZWRYWF9vcHRpb25Ybm9uZV9kaXNjYXJkWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKCJibGFoIiwgX18ub3V0KCJrbm93cyIpKS5vcHRpb24oImJsZWVwIiwgX18ub3V0KCJjcmVhdGVkIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9jaG9vc2VYb3V0WGtub3dzWF9jb3VudF9pc1hndFgwWFhfX291dFhrbm93c1hYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5vdXQoImtub3dzIikuY291bnQoKS5pcyhQLmd0KDApKSwgX18ub3V0KCJrbm93cyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcDFYX2Nob29zZVhvdXRFWGtub3dzWF9fb3V0WGtub3dzWFhfYXNYcDJYX3NlbGVjdFhwMV9wMlhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5hcygicDEiKS5jaG9vc2UoX18ub3V0RSgia25vd3MiKSwgX18ub3V0KCJrbm93cyIpKS5hcygicDIiKS5zZWxlY3QoInAxIiwgInAyIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGFnZVhfX29wdGlvblgyN0xfX2NvbnN0YW50WHlvdW5nWFhfb3B0aW9uWG5vbmVfX2NvbnN0YW50WG9sZFhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oeHgxLCBfXy5jb25zdGFudCgieW91bmciKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoIm9sZCIpKS5ncm91cENvdW50KCkgfV0sIAotICAgIGdfaW5qZWN0WDFYX2Nob29zZVhpc1gxWF9fY29uc3RhbnRYMTBYZm9sZF9fZm9sZFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwKS5mb2xkKCksIF9fLmZvbGQoKSkgfV0sIAotICAgIGdfaW5qZWN0WDJYX2Nob29zZVhpc1gxWF9fY29uc3RhbnRYMTBYZm9sZF9fZm9sZFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5pbmplY3QoMikuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwKS5mb2xkKCksIF9fLmZvbGQoKSkgfV0sIAotICAgIGdfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfY29uc3RhbnRYeFhYX29wdGlvblhiZXR3ZWVuWDIwXzMwWF9jb25zdGFudFh5WFhfb3B0aW9uWG5vbmVfY29uc3RhbnRYelhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18uY29uc3RhbnQoIngiKSkub3B0aW9uKFAuYmV0d2VlbigyMCwgMzApLCBfXy5jb25zdGFudCgieSIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgieiIpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9vclhndFgzNFhYX2NvbnN0YW50WHhYWF9vcHRpb25YZ3RYMzRYX2NvbnN0YW50WHlYWF9vcHRpb25Ybm9uZV9jb25zdGFudFh6WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLm9yKFAuZ3QoMzQpKSwgX18uY29uc3RhbnQoIngiKSkub3B0aW9uKFAuZ3QoMzQpLCBfXy5jb25zdGFudCgieSIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgieiIpKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVYX29wdGlvblhub25lX25hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2xvY2FsWGNob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lX2ZvbGRYX29wdGlvblhub25lX25hbWVfZm9sZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikuZm9sZCgpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX21hcFhjaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZV9mb2xkWF9vcHRpb25Ybm9uZV9uYW1lX2ZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm1hcChfXy5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpLmZvbGQoKSkpIH1dLCAKLSAgICBnX3VuaW9uWFZfVlhoYXNMYWJlbFhwZXJzb25YX2JhcnJpZXJfbG9jYWxYY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVfZm9sZFhfb3B0aW9uWG5vbmVfbmFtZV9mb2xkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18uVigpLCBfXy5WKCkpLmhhc0xhYmVsKCJwZXJzb24iKS5iYXJyaWVyKCkubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikuZm9sZCgpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpKSB9XSwgCi0gICAgZ191bmlvblhWX1ZYaGFzTGFiZWxYcGVyc29uWF9iYXJyaWVyX21hcFhjaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZV9mb2xkWF9vcHRpb25Ybm9uZV9uYW1lX2ZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzTGFiZWwoInBlcnNvbiIpLmJhcnJpZXIoKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikuZm9sZCgpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lWF9vcHRpb25Ybm9uZV9uYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lWF9vcHRpb25Ybm9uZV9uYW1lWF9vcHRpb25YdW5wcm9kdWN0aXZlX2xhYmVsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmxhYmVsKCkpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVYX29wdGlvblhub25lX25hbWVYX29wdGlvblhub25lX2lkZW50aXR5WF9vcHRpb25Ybm9uZV9mYWlsWF9vcHRpb25YdW5wcm9kdWN0aXZlX2lkZW50aXR5WF9vcHRpb25YdW5wcm9kdWN0aXZlX2xhYmVsWF9vcHRpb25Ybm9uZV9mYWlsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS5vcHRpb24oUGljay5ub25lLCBfXy5mYWlsKCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18ubGFiZWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5pZGVudGl0eSgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmZhaWwoKSkgfV0sIAotICAgIGdfVl9jaG9vc2VYYWdlX25hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSwgX18udmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVYX29wdGlvblhub25lX2Rpc2NhcmRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKSB9XSwgCi0gICAgZ19WX2Nob29zZVhuYW1lWF9vcHRpb25YbmVxWHlYX2FnZVhfb3B0aW9uWG5vbmVfY29uc3RhbnRYeFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQLm5lcSgieSIpLCBfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgieCIpKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWG91dFhjcmVhdGVkWF9jb3VudF9pc1hlcVgwWFhfX2NvbnN0YW50WGRpZG50X2NyZWF0ZVhfX2NvbnN0YW50WGNyZWF0ZWRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLmlzKFAuZXEoMCkpLCBfXy5jb25zdGFudCgiZGlkbnRfY3JlYXRlIiksIF9fLmNvbnN0YW50KCJjcmVhdGVkIikpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYdmFsdWVzWGFnZVhfaXNYZ3RYMzBYWF9fdmFsdWVzWGFnZVhfX2NvbnN0YW50WDMwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmd0KDMwKSksIF9fLnZhbHVlcygiYWdlIiksIF9fLmNvbnN0YW50KDMwKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVh2YWx1ZXNYYWdlWF9pc1hndFgyOVhYX2FuZF92YWx1ZXNYYWdlWF9pc1hsdFgzNVhYX192YWx1ZXNYbmFtZVhfX2NvbnN0YW50WG90aGVyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmd0KDI5KSkuYW5kKCkudmFsdWVzKCJhZ2UiKS5pcyhQLmx0KDM1KSksIF9fLnZhbHVlcygibmFtZSIpLCBfXy5jb25zdGFudCgib3RoZXIiKSkgfV0sIAotICAgIGdfVl9jaG9vc2VYaGFzWG5hbWVfdmFkYXNYX192YWx1ZXNYbmFtZVhfX3ZhbHVlc1hhZ2VYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLmhhcygibmFtZSIsICJ2YWRhcyIpLCBfXy52YWx1ZXMoIm5hbWUiKSwgX18udmFsdWVzKCJhZ2UiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhvdXRYY3JlYXRlZFhfY291bnRYX29wdGlvblgwX19jb25zdGFudFhub25lWFhfb3B0aW9uWDFfX2NvbnN0YW50WG9uZVhYX29wdGlvblgyX19jb25zdGFudFhtYW55WFg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDAsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18ub3V0KCJjcmVhdGVkIikuY291bnQoKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoIm5vbmUiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoIm9uZSIpKS5vcHRpb24oeHgyLCBfXy5jb25zdGFudCgibWFueSIpKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGxvY2FsWG91dFhrbm93c1hfY291bnRYX19vcHRpb25YMF9fY29uc3RhbnRYbm9GcmllbmRzWFhfX29wdGlvblhub25lX19jb25zdGFudFhoYXNGcmllbmRzWFhYOiBbZnVuY3Rpb24oe2csIHh4MH0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18ubG9jYWwoX18ub3V0KCJrbm93cyIpLmNvdW50KCkpKS5vcHRpb24oeHgwLCBfXy5jb25zdGFudCgibm9GcmllbmRzIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJoYXNGcmllbmRzIikpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWG91dEVfY291bnRYX29wdGlvblgwX19jb25zdGFudFhub25lWFhfb3B0aW9uWG5vbmVfX2NvbnN0YW50WHNvbWVYWDogW2Z1bmN0aW9uKHtnLCB4eDB9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KCJub25lIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJzb21lIikpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGxhYmVsWF9vcHRpb25YcGVyc29uX19jaG9vc2VYYWdlWF9vcHRpb25YUF9sdF8zMF9fY29uc3RhbnRYeW91bmdYWF9vcHRpb25YUF9ndGVfMzBfX2NvbnN0YW50WG9sZFhYWF9vcHRpb25Yc29mdHdhcmVfX2NvbnN0YW50WHByb2dyYW1YWF9vcHRpb25Ybm9uZV9fY29uc3RhbnRYdW5rbm93blhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ubGFiZWwoKSkub3B0aW9uKCJwZXJzb24iLCBfXy5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAubHQoMzApLCBfXy5jb25zdGFudCgieW91bmciKSkub3B0aW9uKFAuZ3RlKDMwKSwgX18uY29uc3RhbnQoIm9sZCIpKSkub3B0aW9uKCJzb2Z0d2FyZSIsIF9fLmNvbnN0YW50KCJwcm9ncmFtIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJ1bmtub3duIikpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGhhc1huYW1lX3ZhZGFzWF9fdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLmhhcygibmFtZSIsICJ2YWRhcyIpLCBfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FnZV9jaG9vc2VYUF9lcVgyOVhfY29uc3RhbnRYbWF0Y2hlZFhfY29uc3RhbnRYb3RoZXJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygiYWdlIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudCgibWF0Y2hlZCIpLCBfXy5jb25zdGFudCgib3RoZXIiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FnZV9jaG9vc2VYUF9lcVgyOVhfY29uc3RhbnRYbWF0Y2hlZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoImFnZSIpLmNob29zZShQLmVxKDI5KSwgX18uY29uc3RhbnQoIm1hdGNoZWQiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhfdmFsdWVzWG5hbWVYX29wdGlvbjFYX2lzWG1hcmtvWF92YWx1ZXNYYWdlWFhfb3B0aW9uMlhub25lX3ZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihfXy5pcygibWFya28iKSwgX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYX3ZhbHVlc1huYW1lWF9vcHRpb24xWF9QZXFYbWFya29YX3ZhbHVlc1hhZ2VYWF9vcHRpb24yWG5vbmVfdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFAuZXEoIm1hcmtvIiksIF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WX2xvY2FsWHByb3BlcnRpZXNYbG9jYXRpb25YX29yZGVyX2J5WHZhbHVlWF9saW1pdFgyWFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLnByb3BlcnRpZXMoImxvY2F0aW9uIikub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlKDAsIDIpKS52YWx1ZSgpIH1dLCAKLSAgICBnX1ZfaGFzWGxhYmVsX3BlcnNvblhfYXNYYVhfbG9jYWxYb3V0WGNyZWF0ZWRYX2FzWGJYWF9zZWxlY3RYYV9iWF9ieVhuYW1lWF9ieVhpZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcyhULmxhYmVsLCAicGVyc29uIikuYXMoImEiKS5sb2NhbChfXy5vdXQoImNyZWF0ZWQiKS5hcygiYiIpKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikuYnkoVC5pZCkgfV0sIAotICAgIGdfVl9sb2NhbFhvdXRFX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18ub3V0RSgpLmNvdW50KCkpIH1dLCAKLSAgICBnX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfbGltaXRYMVhYX2luVl9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkubG9jYWwoX18ub3V0RSgia25vd3MiKS5saW1pdCgxKSkuaW5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9sb2NhbFhib3RoRVhjcmVhdGVkWF9saW1pdFgxWFhfb3RoZXJWX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmJvdGhFKCJjcmVhdGVkIikubGltaXQoMSkpLm90aGVyVigpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYNFhfbG9jYWxYYm90aEVYMV9jcmVhdGVkWF9saW1pdFgxWFg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgiY3JlYXRlZCIpLmxpbWl0KDEpKSB9XSwgCi0gICAgZ19WWDRYX2xvY2FsWGJvdGhFWGtub3dzX2NyZWF0ZWRYX2xpbWl0WDFYWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCJrbm93cyIsICJjcmVhdGVkIikubGltaXQoMSkpIH1dLCAKLSAgICBnX1ZYNFhfbG9jYWxYYm90aEVfbGltaXRYMVhYX290aGVyVl9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkub3RoZXJWKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgyWFhfb3RoZXJWX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDIpKS5vdGhlclYoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2xvY2FsWGluRVhrbm93c1hfbGltaXRYMlhYX291dFZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uaW5FKCJrbm93cyIpLmxpbWl0KDIpKS5vdXRWKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9sb2NhbFhtYXRjaFhwcm9qZWN0X19jcmVhdGVkX3BlcnNvbl9fcGVyc29uX25hbWVfbmFtZVhfc2VsZWN0WG5hbWVfcHJvamVjdFhfYnlfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm1hdGNoKF9fLmFzKCJwcm9qZWN0IikuaW5fKCJjcmVhdGVkIikuYXMoInBlcnNvbiIpLCBfXy5hcygicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoIm5hbWUiKSkpLnNlbGVjdCgibmFtZSIsICJwcm9qZWN0IikuYnkoKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1ZfaW5fYmFycmllcl9sb2NhbFhjb3VudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmluXygpLmJhcnJpZXIoKS5sb2NhbChfXy5jb3VudCgpKSB9XSwgCi0gICAgZ19WX2xvY2FsWG91dF9pbl9zaW1wbGVQYXRoWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5vdXQoKS5pbl8oKS5zaW1wbGVQYXRoKCkpLnBhdGgoKSB9XSwgCi0gICAgZ193aXRoU2Fja1gwTFhfVl9pbl9iYXJyaWVyX2xvY2FsWHNhY2tYc3VtWF9ieVhhZ2VYWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDApLlYoKS5pbl8oKS5iYXJyaWVyKCkubG9jYWwoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KCJhZ2UiKSkuc2FjaygpIH1dLCAKLSAgICBnX1ZfbG9jYWxYb3V0X2xvY2FsWGNvdW50WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm91dCgpLmxvY2FsKF9fLmNvdW50KCkpKSB9XSwgCi0gICAgZ19WX3VuaW9uWG91dEVfY291bnRfbG9jYWxYaW5FX2NvdW50WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbkUoKS5jb3VudCgpKSkgfV0sIAotICAgIGdfVlgyWF9vcHRpb25hbFhvdXRYa25vd3NYWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLm9wdGlvbmFsKF9fLm91dCgia25vd3MiKSkgfV0sIAotICAgIGdfVlgyWF9vcHRpb25hbFhpblhrbm93c1hYOiBbZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikub3B0aW9uYWwoX18uaW5fKCJrbm93cyIpKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfb3B0aW9uYWxYb3V0WGtub3dzWF9vcHRpb25hbFhvdXRYY3JlYXRlZFhYWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikub3B0aW9uYWwoX18ub3V0KCJrbm93cyIpLm9wdGlvbmFsKF9fLm91dCgiY3JlYXRlZCIpKSkucGF0aCgpIH1dLCAKLSAgICBnX1Zfb3B0aW9uYWxYb3V0X29wdGlvbmFsWG91dFhYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9wdGlvbmFsKF9fLm91dCgpLm9wdGlvbmFsKF9fLm91dCgpKSkucGF0aCgpIH1dLCAKLSAgICBnX1ZYMVhfb3B0aW9uYWxYYWRkVlhkb2dYWF9sYWJlbDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3B0aW9uYWwoX18uYWRkVigiZG9nIikpLmxhYmVsKCkgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX2VtaXRfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkucGF0aCgpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcmVwZWF0WGluWF90aW1lc1gyWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnJlcGVhdChfXy5pbl8oKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9yZXBlYXRYb3V0RV9pblZYX3RpbWVzWDJYX3BhdGhfYnlfbmFtZV9ieV9sYWJlbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dEUoKS5pblYoKSkudGltZXMoMikucGF0aCgpLmJ5KCJuYW1lIikuYnkoVC5sYWJlbCkgfV0sIAotICAgIGdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX2VtaXQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZW1pdCgpIH1dLCAKLSAgICBnX1ZYMVhfdGltZXNYMlhfcmVwZWF0WG91dFhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9lbWl0X3RpbWVzWDJYX3JlcGVhdFhvdXRYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoKS50aW1lcygyKS5yZXBlYXQoX18ub3V0KCkpLnBhdGgoKSB9XSwgCi0gICAgZ19WX2VtaXRfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpIH1dLCAKLSAgICBnX1ZYMVhfZW1pdFhoYXNYbGFiZWxfcGVyc29uWFhfcmVwZWF0WG91dFhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmVtaXQoX18uaGFzKFQubGFiZWwsICJwZXJzb24iKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhncm91cENvdW50WG1YX2J5WG5hbWVYX291dFhfdGltZXNYMlhfY2FwWG1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uZ3JvdXBDb3VudCgibSIpLmJ5KCJuYW1lIikub3V0KCkpLnRpbWVzKDIpLmNhcCgibSIpIH1dLCAKLSAgICBnX1ZYMVhfcmVwZWF0WGdyb3VwQ291bnRYbVhfYnlYbG9vcHNYX291dFhfdGltZXNYM1hfY2FwWG1YOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLmdyb3VwQ291bnQoIm0iKS5ieShfXy5sb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKCJtIikgfV0sIAotICAgIGdfVl9yZXBlYXRYYm90aFhfdGltZXNYMTBYX2FzWGFYX291dF9hc1hiWF9zZWxlY3RYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMTApLmFzKCJhIikub3V0KCkuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLmNvdW50KCkgfV0sIAotICAgIGdfVlgxWF9yZXBlYXRYb3V0WF91bnRpbFhvdXRFX2NvdW50X2lzWDBYWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5vdXRFKCkuY291bnQoKS5pcygwKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfcmVwZWF0WG91dEVfaW5WX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3JpcHBsZVhYX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5yZXBlYXQoX18ub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKCJuYW1lIiwgInJpcHBsZSIpKS5wYXRoKCkuYnkoIm5hbWUiKS5ieShULmxhYmVsKSB9XSwgCi0gICAgZ19WX2hhc1hsb29wX25hbWVfbG9vcFhfcmVwZWF0WGluWF90aW1lc1g1WF9wYXRoX2J5X25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibG9vcHMiLCAibmFtZSIsICJsb29wIikucmVwZWF0KF9fLmluXygpKS50aW1lcyg1KS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhvdXRfcmVwZWF0WG91dF9vcmRlcl9ieVhuYW1lX2Rlc2NYWF90aW1lc1gxWFhfdGltZXNYMVhfbGltaXRYMVhfcGF0aF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuZGVzYykpLnRpbWVzKDEpKS50aW1lcygxKS5saW1pdCgxKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhvdXRYa25vd3NYWF91bnRpbFhyZXBlYXRYb3V0WGNyZWF0ZWRYWF9lbWl0WGhhc1huYW1lX2xvcFhYWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCJrbm93cyIpKS51bnRpbChfXy5yZXBlYXQoX18ub3V0KCJjcmVhdGVkIikpLmVtaXQoX18uaGFzKCJuYW1lIiwgImxvcCIpKSkucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVl9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ucmVwZWF0KF9fLm91dCgiY3JlYXRlZCIpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicmlwcGxlIikpKS5lbWl0KCkudmFsdWVzKCJsYW5nIikgfV0sIAotICAgIGdfVl91bnRpbFhjb25zdGFudFh0cnVlWFhfcmVwZWF0WHJlcGVhdFhvdXRfY3JlYXRlZFhYX3VudGlsWGhhc1huYW1lX3JpcHBsZVhYWGVtaXRfbGFuZzogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW50aWwoX18uY29uc3RhbnQodHJ1ZSkpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KCJjcmVhdGVkIikpLnVudGlsKF9fLmhhcygibmFtZSIsICJyaXBwbGUiKSkpLmVtaXQoKS52YWx1ZXMoImxhbmciKSB9XSwgCi0gICAgZ19WX2VtaXRfcmVwZWF0WGFfb3V0WGtub3dzX2ZpbHRlclhsb29wc19pc1gwWFhfbGFuZzogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpLnJlcGVhdCgiYSIsIF9fLm91dCgia25vd3MiKS5maWx0ZXIoX18ubG9vcHMoImEiKS5pcygwKSkpLnZhbHVlcygibGFuZyIpIH1dLCAKLSAgICBnX1ZYM1hfcmVwZWF0WGJvdGhYX2NyZWF0ZWRYWF91bnRpbFhsb29wc19pc180MFhYZW1pdF9yZXBlYXRYaW5fa25vd3NYWF9lbWl0X2xvb3BzWGlzWDFYZGVkdXBfdmFsdWVzOiBbZnVuY3Rpb24oe2csIHZpZDN9KSB7IHJldHVybiBnLlYodmlkMykucmVwZWF0KF9fLmJvdGgoImNyZWF0ZWQiKSkudW50aWwoX18ubG9vcHMoKS5pcyg0MCkpLmVtaXQoX18ucmVwZWF0KF9fLmluXygia25vd3MiKSkuZW1pdChfXy5sb29wcygpLmlzKDEpKSkuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX3JlcGVhdFhyZXBlYXRYdW5pb25Yb3V0X3VzZXNfb3V0X3RyYXZlcnNlc1hYX3doZXJlWGxvb3BzX2lzWDBYX3RpbWVzWDFYX3RpbWVYMlhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnJlcGVhdChfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KCJ1c2VzIiksIF9fLm91dCgidHJhdmVyc2VzIikpLndoZXJlKF9fLmxvb3BzKCkuaXMoMCkpKS50aW1lcygxKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9yZXBlYXRYYV9vdXRYa25vd3NfcmVwZWF0WGJfb3V0WGNyZWF0ZWRYX2ZpbHRlclhsb29wc19pc1gwWFhfZW1pdF9sYW5nOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoImEiLCBfXy5vdXQoImtub3dzIikucmVwZWF0KCJiIiwgX18ub3V0KCJjcmVhdGVkIikuZmlsdGVyKF9fLmxvb3BzKCJhIikuaXMoMCkpKS5lbWl0KCkpLmVtaXQoKS52YWx1ZXMoImxhbmciKSB9XSwgCi0gICAgZ19WWDZYX3JlcGVhdFhhX2JvdGhYY3JlYXRlZFhfc2ltcGxlUGF0aFhfZW1pdFhyZXBlYXRYYl9ib3RoWGtub3dzWFhfdW50aWxYbG9vcHNYYlhfYXNYYl93aGVyZVhsb29wc1hhWF9hc1hiWF9oYXNYbmFtZV92YWRhc1hYX2RlZHVwX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5yZXBlYXQoImEiLCBfXy5ib3RoKCJjcmVhdGVkIikuc2ltcGxlUGF0aCgpKS5lbWl0KF9fLnJlcGVhdCgiYiIsIF9fLmJvdGgoImtub3dzIikpLnVudGlsKF9fLmxvb3BzKCJiIikuYXMoImIiKS53aGVyZShfXy5sb29wcygiYSIpLmFzKCJiIikpKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2VtaXQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoKSB9XSwgCi0gICAgZ19WX3VudGlsWGlkZW50aXR5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW50aWwoX18uaWRlbnRpdHkoKSkgfV0sIAotICAgIGdfVl90aW1lc1g1WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudGltZXMoNSkgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3JlcGVhdFhvdXRYY3JlYXRlZFhYX3RpbWVzWDFYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5yZXBlYXQoX18ub3V0KCJjcmVhdGVkIikpLnRpbWVzKDEpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9yZXBlYXRYb3V0WGNyZWF0ZWRYWF90aW1lc1gwWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucmVwZWF0KF9fLm91dCgiY3JlYXRlZCIpKS50aW1lcygwKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfdGltZXNYMVhfcmVwZWF0WG91dFhjcmVhdGVkWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnRpbWVzKDEpLnJlcGVhdChfXy5vdXQoImNyZWF0ZWQiKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3RpbWVzWDBYX3JlcGVhdFhvdXRYY3JlYXRlZFhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS50aW1lcygwKS5yZXBlYXQoX18ub3V0KCJjcmVhdGVkIikpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WGJvdGhfaGFzWG5vdF9wcm9kdWN0aXZlWFhfdGltZXNYM1hfY29uc3RhbnRYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKCJub3QiLCAicHJvZHVjdGl2ZSIpKS50aW1lcygzKS5jb25zdGFudCgxKSB9XSwgCi0gICAgZ19WX2hhc1hub3RfcHJvZHVjdGl2ZVhfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX2NvbnN0YW50WDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5vdCIsICJwcm9kdWN0aXZlIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuY29uc3RhbnQoMSkgfV0sIAotICAgIGdfVlgxXzJfM1hfcmVwZWF0WGJvdGhfYmFycmllclhfZW1pdF90aW1lc1gyWF9wYXRoOiBbZnVuY3Rpb24oe2csIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSwgdmlkMiwgdmlkMykucmVwZWF0KF9fLmJvdGgoKS5iYXJyaWVyKCkpLmVtaXQoKS50aW1lcygyKS5wYXRoKCkgfV0sIAotICAgIGdfVl9vcmRlcl9ieVhuYW1lX2Rlc2NYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhfb3JkZXJfYnlYbmFtZV9kZXNjWFhfdGltZXNYMlhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibmFtZSIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpLm9yZGVyKCkuYnkoIm5hbWUiLCBPcmRlci5kZXNjKSkudGltZXMoMikucGF0aCgpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WGJvdGhfcmVwZWF0WG9yZGVyX2J5WG5hbWVYWF90aW1lc1gxWFhfdGltZXNYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ib3RoKCkucmVwZWF0KF9fLm9yZGVyKCkuYnkoIm5hbWUiKSkudGltZXMoMSkpLnRpbWVzKDEpIH1dLCAKLSAgICBnX1Zfb3JkZXJfYnlYbmFtZV9kZXNjWF9yZXBlYXRYbG9jYWxYb3V0X29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoIm5hbWUiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpKSkudGltZXMoMSkgfV0sIAotICAgIGdfVl9vcmRlcl9ieVhuYW1lWF9yZXBlYXRYbG9jYWxYYm90aF9zaW1wbGVQYXRoX29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMlhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibmFtZSIpLnJlcGVhdChfXy5sb2NhbChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkpLnRpbWVzKDIpLnBhdGgoKSB9XSwgCi0gICAgZ19WX3JlcGVhdFh1bmlvblhvdXRYa25vd3NYX29yZGVyX2J5WG5hbWVYX2luWGNyZWF0ZWRYX29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy51bmlvbihfXy5vdXQoImtub3dzIikub3JkZXIoKS5ieSgibmFtZSIpLCBfXy5pbl8oImNyZWF0ZWQiKS5vcmRlcigpLmJ5KCJuYW1lIikpKS50aW1lcygxKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhhZGRWX3Byb3BlcnR5WGdlbmVyYXRlZF90cnVlWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJub3RHZW5lcmF0ZWQiLCAidHJ1ZSIpLmFkZFYoKS5wcm9wZXJ0eSgibm90R2VuZXJhdGVkIiwgInRydWUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5hZGRWKCkucHJvcGVydHkoImdlbmVyYXRlZCIsICJ0cnVlIikpLnRpbWVzKDIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJub3RHZW5lcmF0ZWQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiZ2VuZXJhdGVkIikgfV0sIAotICAgIGdfVl9yZXBlYXRYZGVkdXBfYm90aFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5kZWR1cCgpLmJvdGgoKSkudGltZXMoMikgfV0sIAotICAgIGdfVl9yZXBlYXRYYWdncmVnYXRlWHhYWF90aW1lc1gyWF9zZWxlY3RYeFhfbGltaXRYMVhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKCJ4IikpLnRpbWVzKDIpLnNlbGVjdCgieCIpLmxpbWl0KDEpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWHN0clhfcmVwZWF0WHNwbGl0WGFiY1hfY29uam9pblhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJzdHIiLCAiYWJhYmNjemFiYWJjYyIpLmFkZFYoKS5wcm9wZXJ0eSgic3RyIiwgImFiY3lhYmMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygic3RyIikucmVwZWF0KF9fLnNwbGl0KCJhYmMiKS5jb25qb2luKCIiKSkudGltZXMoMikgfV0sIAotICAgIGdfd2l0aFNhY2tYMFhfVl9yZXBlYXRYc2Fja1hzdW1YX2J5WGFnZVhfd2hlcmVYc2Fja19pc1hsdFg1OVhYWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMCkuVigpLnJlcGVhdChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoImFnZSIpLndoZXJlKF9fLnNhY2soKS5pcyhQLmx0KDU5KSkpKS50aW1lcygyKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhpbmplY3RYeVhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uaW5qZWN0KCJ5IikpLnRpbWVzKDIpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WHVuaW9uWGNvbnN0YW50WHlYX2xpbWl0WDFYX2lkZW50aXR5WFhfdGltZXNYM1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy51bmlvbihfXy5jb25zdGFudCgieSIpLmxpbWl0KDEpLCBfXy5pZGVudGl0eSgpKSkudGltZXMoMikgfV0sIAotICAgIGdfVlgzWF9yZXBlYXRYb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfdGFpbFgyWFhfdGltZXNYMVhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDN9KSB7IHJldHVybiBnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoInBlcmZvcm1hbmNlcyIpLnRhaWwoMikpLnRpbWVzKDEpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYM1hfcmVwZWF0WG91dF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3RhaWxYMlhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQzfSkgeyByZXR1cm4gZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiKS50YWlsKDIpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDJYX3JlcGVhdFhvdXRfbG9jYWxYb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF90YWlsWDFYWFhfdGltZXNYMVhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoInBlcmZvcm1hbmNlcyIpLnRhaWwoMSkpKS50aW1lcygxKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDI1MFhfcmVwZWF0WG91dF9sb2NhbFhvcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3RhaWxYMVhYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMjUwfSkgeyByZXR1cm4gZy5WKHZpZDI1MCkucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoInBlcmZvcm1hbmNlcyIpLnRhaWwoMSkpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDNYX3JlcGVhdFhvdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF90YWlsWDNYX2xpbWl0WDFYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikudGFpbCgzKS5saW1pdCgxKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlgzWF9yZXBlYXRYb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc19kZXNjWF9saW1pdFg1WF90YWlsWDFYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIiwgT3JkZXIuZGVzYykubGltaXQoNSkudGFpbCgxKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlgzWF9yZXBlYXRYb3V0RV9vcmRlcl9ieVh3ZWlnaHRYX3RhaWxYMlhfaW5WWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoIndlaWdodCIpLnRhaWwoMikuaW5WKCkpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYM1hfcmVwZWF0WG91dEVfb3JkZXJfYnlYd2VpZ2h0X2Rlc2NYX2xpbWl0WDJYX2luVlhfdGltZXNYMlhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDN9KSB7IHJldHVybiBnLlYodmlkMykucmVwZWF0KF9fLm91dEUoKS5vcmRlcigpLmJ5KCJ3ZWlnaHQiLCBPcmRlci5kZXNjKS5saW1pdCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9lbWl0X3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZVhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfbG9jYWxYZW1pdF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZfZW1pdF9yZXBlYXRYbG9jYWxYb3V0X29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfbG9jYWxYZW1pdF9yZXBlYXRYbG9jYWxYb3V0X29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uZW1pdCgpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAotICAgIGdfVl9lbWl0WGhhc0xhYmVsWHBlcnNvblhYX3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZVhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdChfXy5oYXNMYWJlbCgicGVyc29uIikpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfdW50aWxYbG9vcHNfaXNYMlhYX3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZVhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW50aWwoX18ubG9vcHMoKS5pcygyKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9lbWl0X3JlcGVhdFhkZWR1cFhfdGltZXNYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMSkgfV0sIAotICAgIGdfVl9lbWl0X3JlcGVhdFhkZWR1cFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMikgfV0sIAotICAgIGdfdW5pb25YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbigpIH1dLCAKLSAgICBnX3VuaW9uWFZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5WKCkudmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX3VuaW9uWFZYdjFYX1ZYNFhYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkNCwgdmlkMX0pIHsgcmV0dXJuIGcudW5pb24oX18uVih2aWQxKSwgX18uVih2aWQ0KSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfdW5pb25YVl9oYXNMYWJlbFhzb2Z0d2FyZVhfVl9oYXNMYWJlbFhwZXJzb25YWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKSwgX18uVigpLmhhc0xhYmVsKCJwZXJzb24iKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfdW5pb25YVl9vdXRfb3V0X1ZfaGFzTGFiZWxYc29mdHdhcmVYWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLlYoKS5vdXQoKS5vdXQoKSwgX18uVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpKS5wYXRoKCkgfV0sIAotICAgIGdfdW5pb25YVl9vdXRfb3V0X1ZfaGFzTGFiZWxYc29mdHdhcmVYWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLlYoKS5vdXQoKS5vdXQoKSwgX18uVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ191bmlvblh1bmlvblhWX291dF9vdXRYX1ZfaGFzTGFiZWxYc29mdHdhcmVYWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLnVuaW9uKF9fLlYoKS5vdXQoKS5vdXQoKSksIF9fLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKSkucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfdW5pb25YaW5qZWN0WDFYX2luamVjdFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5pbmplY3QoMSksIF9fLmluamVjdCgyKSkgfV0sIAotICAgIGdfVl91bmlvblhjb25zdGFudFgxWF9jb25zdGFudFgyWF9jb25zdGFudFgzWFg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS51bmlvbihfXy5jb25zdGFudCgxKSwgX18uY29uc3RhbnQoMiksIF9fLmNvbnN0YW50KDMpKSB9XSwgCi0gICAgZ19WX3VuaW9uWG91dF9faW5YX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5pbl8oKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF91bmlvblhyZXBlYXRYb3V0WF90aW1lc1gyWF9fb3V0WF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSwgX18ub3V0KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGxhYmVsX2lzX3BlcnNvbl9fdW5pb25YX19vdXRfbGFuZ19fb3V0X25hbWVYX19pbl9sYWJlbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKCJwZXJzb24iKSwgX18udW5pb24oX18ub3V0KCkudmFsdWVzKCJsYW5nIiksIF9fLm91dCgpLnZhbHVlcygibmFtZSIpKSwgX18uaW5fKCkubGFiZWwoKSkgfV0sIAotICAgIGdfVl9jaG9vc2VYbGFiZWxfaXNfcGVyc29uX191bmlvblhfX291dF9sYW5nX19vdXRfbmFtZVhfX2luX2xhYmVsWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ubGFiZWwoKS5pcygicGVyc29uIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcygibGFuZyIpLCBfXy5vdXQoKS52YWx1ZXMoIm5hbWUiKSksIF9fLmluXygpLmxhYmVsKCkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3VuaW9uWHJlcGVhdFh1bmlvblhvdXRYY3JlYXRlZFhfX2luWGNyZWF0ZWRYWF90aW1lc1gyWF9fcmVwZWF0WHVuaW9uWGluWGNyZWF0ZWRYX19vdXRYY3JlYXRlZFhYX3RpbWVzWDJYWF9sYWJlbF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bmlvbihfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KCJjcmVhdGVkIiksIF9fLmluXygiY3JlYXRlZCIpKSkudGltZXMoMiksIF9fLnJlcGVhdChfXy51bmlvbihfXy5pbl8oImNyZWF0ZWQiKSwgX18ub3V0KCJjcmVhdGVkIikpKS50aW1lcygyKSkubGFiZWwoKS5ncm91cENvdW50KCkgfV0sIAotICAgIGdfVlgxXzJYX3VuaW9uWG91dEVfY291bnRfX2luRV9jb3VudF9fb3V0RV93ZWlnaHRfc3VtWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEsIHZpZDIpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkgfV0sIAotICAgIGdfVlgxXzJYX2xvY2FsWHVuaW9uWG91dEVfY291bnRfX2luRV9jb3VudF9fb3V0RV93ZWlnaHRfc3VtWFg6IFtmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxLCB2aWQyKS5sb2NhbChfXy51bmlvbihfXy5vdXRFKCkuY291bnQoKSwgX18uaW5FKCkuY291bnQoKSwgX18ub3V0RSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpKSB9XSwgCi0gICAgZ19WWDFfMlhfbG9jYWxYdW5pb25YY291bnRYWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEsIHZpZDIpLmxvY2FsKF9fLnVuaW9uKF9fLmNvdW50KCkpKSB9XSwgCi0gICAgZ191bmlvblhhZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYm9iWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9jaHJpc1hfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLCBfXy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKSwgX18uYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiY2hyaXMiKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlhfaGFzTGFiZWxYcGVyc29uWF91bmlvblhfd2hlcmVYX291dF9jb3VudF9pc1hndFgyWFhYX3ZhbHVlc1hhZ2VYX25vdFhfd2hlcmVYX2JvdGhFX2NvdW50X2lzWGd0MlhYWF92YWx1c1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS51bmlvbihfXy53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0KDIpKSkudmFsdWVzKCJhZ2UiKSwgX18ubm90KF9fLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3QoMikpKSkudmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEyMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWF0aFhhZGRYMF81WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5tYXRoKCJfICsgMC41IikgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX2lzWGd0WDBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdEZWNpbWFsKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkuaXMoUC5ndCgwKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDMpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5zdW0oKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5taW4oKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWF4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDcpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTQpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMjEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdEZWNpbWFsKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkubWF4KCkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDEwWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5wcm9qZWN0KCJvcmlnaW5hbCIsICJtdWx0aXBsaWVkIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgiXyAqIDEwIikpIH1dLCAKLSAgICBnX2luamVjdFg5OVhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg5OSkuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA0NTYpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfbWF0aFhtdWxYMTAwMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTAwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKS5tYXRoKCJfICogMTAwMCIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfaXNYZXFYNDJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDQyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKS5pcyhQLmVxKDQyKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTApLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMjApLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMzApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLnN1bSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfbWluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDUpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTUpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLm1pbigpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfbWF4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEwMCkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyMDApLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMzAwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKS5tYXgoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYYWRkWDk5OVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDUwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKS5wcm9qZWN0KCJvcmlnaW5hbCIsICJhZGRlZCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoIl8gKyA5OTkiKSkgfV0sIAotICAgIGdfaW5qZWN0WDc3N1hfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNzc3KS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9tYXRoWGFkZFgyMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkubWF0aCgiXyArIDIwIikgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX2lzWGx0WDEwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA3KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLmlzKFAubHQoMTApKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMikuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAzKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLnN1bSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhtYXRoWG11bFgyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgOCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpLmlzKFAudHlwZU9mKEdUeXBlLmJ5dGUpKS5wcm9qZWN0KCJvcmlnaW5hbCIsICJkb3VibGVkIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgiXyAqIDIiKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX2Nob29zZVhpc1hlcVgxMlhYX2NvbnN0YW50WHR3ZWx2ZVhfY29uc3RhbnRYb3RoZXJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLmNob29zZShfXy5pcyhQLmVxKDEyKSksIF9fLmNvbnN0YW50KCJ0d2VsdmUiKSwgX18uY29uc3RhbnQoIm90aGVyIikpIH1dLCAKLSAgICBnX2luamVjdFgxNVhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxNSkuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJldmVudCIpLnByb3BlcnR5KCJkYXRldGltZSIsIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZGF0ZXRpbWUiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhkYXRlQWRkWERUX2RheVgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZXZlbnQiKS5wcm9wZXJ0eSgiZGF0ZXRpbWUiLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRhdGV0aW1lIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5wcm9qZWN0KCJvcmlnaW5hbCIsICJuZXh0RGF5IikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uZGF0ZUFkZChEVC5kYXksIDEpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfZGF0ZURpZmZYZGF0ZXRpbWVYMjAyM18wOF8xMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImV2ZW50IikucHJvcGVydHkoImRhdGV0aW1lIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkYXRldGltZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkuZGF0ZURpZmYobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDA6MzBaJykpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF93aGVyZVhpc1hndFhkYXRldGltZVgyMDIwXzAxXzAxWFhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJldmVudCIpLnByb3BlcnR5KCJkYXRldGltZSIsIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZGF0ZXRpbWUiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpLndoZXJlKF9fLmlzKFAuZ3QobmV3IERhdGUoJzIwMjAtMDEtMDFUMDA6MDBaJykpKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2Nob29zZVhpc1hlcVhkYXRldGltZVgyMDIzXzA4XzA4WFhYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImV2ZW50IikucHJvcGVydHkoImRhdGV0aW1lIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkYXRldGltZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkuY2hvb3NlKF9fLmlzKFAuZXEobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpKSwgX18uY29uc3RhbnQoIm1hdGNoIiksIF9fLmNvbnN0YW50KCJub01hdGNoIikpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9sb2NhbFhhZ2dyZWdhdGVYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImV2ZW50IikucHJvcGVydHkoImRhdGV0aW1lIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkYXRldGltZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX2luamVjdFhkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfYWdncmVnYXRlWGFYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkuYWdncmVnYXRlKCJhIikuY2FwKCJhIikgfV0sIAotICAgIGdfaW5qZWN0WGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5ncm91cENvdW50KCkgfV0sIAotICAgIGdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAxLjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKSB9XSwgCi0gICAgZ19FX3ZhbHVlc1h3ZWlnaHRYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkudmFsdWVzKCJ3ZWlnaHQiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tYXRoWGNlaWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMi43KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZG91YmxlIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkubWF0aCgiY2VpbCBfIikgfV0sIAotICAgIGdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfaXNYZ3RYMV8wWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAwLjgpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMS4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZG91YmxlIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkuaXMoUC5ndCgxLjApKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMS41KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDIuNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAzLjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5zdW0oKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9taW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMC4xKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDAuNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAwLjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5taW4oKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMi4xKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDMuNykuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAxLjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5tYXgoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tZWFuWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDIuMSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCA0LjEpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgNi4xKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZG91YmxlIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkubWVhbigpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX29yZGVyX2J5WGFzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAzLjIpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMS44KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDIuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRvdWJsZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSB9XSwgCi0gICAgZ19pbmplY3RYNV81ZFhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUuNSkuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkuZ3JvdXBDb3VudCgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImZsb2F0IiwgMi41KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZmxvYXQiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfbWF0aFhtdWxYMlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCAzLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmbG9hdCIpLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLm1hdGgoIl8gKiAyIikgfV0sIAotICAgIGdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX2lzWGVxWDFfNVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCAxLjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmbG9hdCIpLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLmlzKFAuZXEoMS41KSkgfV0sIAotICAgIGdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDEuNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDIuNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDMuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZsb2F0IikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkuc3VtKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDEwWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCA0LjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmbG9hdCIpLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLnByb2plY3QoIm9yaWdpbmFsIiwgIm11bHRpcGxpZWQiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKCJfICogMTAiKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX3doZXJlWGlzWGd0WDFfMFhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImZsb2F0IiwgMC41KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImZsb2F0IiwgMS41KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZmxvYXQiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS53aGVyZShfXy5pcyhQLmd0KDEuMCkpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfY2hvb3NlWGlzWGVxWDNfMFhYX2NvbnN0YW50WHRocmVlWF9jb25zdGFudFhvdGhlclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCAzLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmbG9hdCIpLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLmNob29zZShfXy5pcyhQLmVxKDMuMCkpLCBfXy5jb25zdGFudCgidGhyZWUiKSwgX18uY29uc3RhbnQoIm90aGVyIikpIH1dLCAKLSAgICBnX2luamVjdFgyXzBmWF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgyLjApLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkgfV0sIAotICAgIGdfVl9oYXNYYWdlX3R5cGVPZlhHVHlwZV9JTlRYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC50eXBlT2YoR1R5cGUuaW50KSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl93aGVyZVh2YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkud2hlcmUoX18udmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfbWF0aFhpbmNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiLCAiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkubWF0aCgiXyArIDEiKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLnN1bSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX21pblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkubWluKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfbWF4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5tYXgoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9tZWFuWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5tZWFuKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfb3JkZXJfYnlYZGVzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkub3JkZXIoKS5ieShPcmRlci5kZXNjKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkuY291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsaXN0IiwgWyJhIiwgImIiLCAiYyJdKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibGlzdCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKSB9XSwgCi0gICAgZ19WX2hhc1hsaXN0X3R5cGVPZlhHVHlwZV9MSVNUWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikucHJvcGVydHkoImxpc3QiLCBbMSwgMiwgM10pIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJsaXN0IiwgUC50eXBlT2YoR1R5cGUubGlzdCkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibGlzdCIsIFsieCIsICJ5IiwgInoiXSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxpc3QiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkudW5mb2xkKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsaXN0IiwgWzEsIDIsIDMsIDQsIDVdKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibGlzdCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF91bmZvbGRfcmFuZ2VYMV8zWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxpc3QiLCBbImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIsICJmb3VydGgiXSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxpc3QiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkudW5mb2xkKCkucmFuZ2UoMSwgMykgfV0sIAotICAgIGdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhjb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsaXN0IiwgWyJhcHBsZSIsICJiYW5hbmEiXSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxpc3QiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkucHJvamVjdCgib3JpZ2luYWwiLCAic2l6ZSIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF93aGVyZVhjb3VudFhsb2NhbFhfaXNYZ3RYMlhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxpc3QiLCBbMV0pLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibGlzdCIsIFsxLCAyLCAzXSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxpc3QiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZ3QoMikpKSB9XSwgCi0gICAgZ19pbmplY3RYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbInRlc3QiXSkuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hsb25nWF9pc1h0eXBlT2ZYR1R5cGVfTE9OR1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibG9uZyIsIDEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJsb25nIikuaXMoUC50eXBlT2YoR1R5cGUubG9uZykpIH1dLCAKLSAgICBnX1ZfaGFzWGxvbmdfdHlwZU9mWEdUeXBlX0xPTkdYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJuYW1lIiwgInRlc3QiKS5wcm9wZXJ0eSgibG9uZyIsIDEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJsb25nIiwgUC50eXBlT2YoR1R5cGUubG9uZykpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfbWF0aFhtdWxYMlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibG9uZyIsIDUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJsb25nIikuaXMoUC50eXBlT2YoR1R5cGUubG9uZykpLm1hdGgoIl8gKiAyIikgfV0sIAotICAgIGdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9pc1hndFg1WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsb25nIiwgMTApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJsb25nIikuaXMoUC50eXBlT2YoR1R5cGUubG9uZykpLmlzKFAuZ3QoNSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxvbmciLCAxKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImxvbmciLCAyKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImxvbmciLCAzKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibG9uZyIpLmlzKFAudHlwZU9mKEdUeXBlLmxvbmcpKS5zdW0oKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hsb25nWF9pc1h0eXBlT2ZYR1R5cGVfTE9OR1hYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibG9uZyIsIDEwMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxvbmciKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZU1hcF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZU1hcCgpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpLmNvdW50KCkgfV0sIAotICAgIGdfVl9ncm91cENvdW50X2J5WGxhYmVsWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX01BUFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibWFwIiwgbmV3IE1hcChbWyJrZXkxIiwgIjEiXSwgWyJrZXkyIiwgIjIiXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibWFwIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkgfV0sIAotICAgIGdfVl9oYXNYbWFwX3R5cGVPZlhHVHlwZV9NQVBYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJuYW1lIiwgInRlc3QiKS5wcm9wZXJ0eSgibWFwIiwgbmV3IE1hcChbWyJhIiwgMV0sIFsiYiIsIDJdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJtYXAiLCBQLnR5cGVPZihHVHlwZS5tYXApKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImEiLCAxXSwgWyJiIiwgMl0sIFsiYyIsIDNdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJtYXAiKS5pcyhQLnR5cGVPZihHVHlwZS5tYXApKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFhfc2VsZWN0WHZhbHVlc1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImNpdHkiLCAiTllDIl0sIFsiY291bnRyeSIsICJVU0EiXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibWFwIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX3doZXJlWF9jb3VudFhsb2NhbFhfaXNYZ3RYMVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm1hcCIsIG5ldyBNYXAoW1sic2luZ2xlIiwgInZhbHVlIl1dKSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImtleTEiLCAiMSJdLCBbImtleTIiLCAiMiJdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJtYXAiKS5pcyhQLnR5cGVPZihHVHlwZS5tYXApKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5ndCgxKSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibWFwIiwgbmV3IE1hcChbWyJhIiwgMV1dKSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImIiLCAyXSwgWyJjIiwgM11dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm1hcCIpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpLmZvbGQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlWG5hbWVYX2FnZ3JlZ2F0ZVh4WF9jYXBYeFhfaXNYdHlwZU9mWEdUeXBlX1NFVFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmFnZ3JlZ2F0ZSgieCIpLmNhcCgieCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBfc2VsZWN0WGtleXNYX2RlZHVwX2lzWHR5cGVPZlhHVHlwZV9TRVRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpLmRlZHVwKCkuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkgfV0sIAotICAgIGdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsiYSIsICJiIiwgImMiXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJzZXQiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKSB9XSwgCi0gICAgZ19WX2hhc1hzZXRfdHlwZU9mWEdUeXBlX1NFVFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsxLCAyLCAzXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJzZXQiLCBQLnR5cGVPZihHVHlwZS5zZXQpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsieCIsICJ5IiwgInoiXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJzZXQiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsxLCAyLCAzLCA0LCA1XSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJzZXQiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFhfd2hlcmVYY291bnRYbG9jYWxYX2lzWGVxWDNYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsxLCAyXSkpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgic2V0IiwgbmV3IFNldChbMSwgMiwgM10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygic2V0IikuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZXEoMykpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF91bmZvbGRfbGltaXRYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIiwgImZvdXJ0aCJdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInNldCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpLnVuZm9sZCgpLmxpbWl0KDIpIH1dLCAKLSAgICBnX2luamVjdFhzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgU2V0KFsidGVzdCJdKSkuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkuZ3JvdXBDb3VudCgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTAwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWF0aFhtdWxYMTBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDUwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkubWF0aCgiXyAqIDEwIikgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfaXNYYmV0d2VlblgyMF8zMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5zaG9ydCkuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKS5pcyhQLmJldHdlZW4oMjAsIDMwKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEwKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDIwKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDMwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkubWluKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWF4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDE1KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDI1KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDM1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkubWF4KCkgfV0sIAotICAgIGdfaW5qZWN0WDQyWF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfc3RvcmVYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg0MikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5zaG9ydCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJ1dWlkIiwgdXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJ1dWlkIikuaXMoUC50eXBlT2YoR1R5cGUudXVpZCkpIH1dLCAKLSAgICBnX1ZfaGFzWHV1aWRfdHlwZU9mWEdUeXBlX1VVSURYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJuYW1lIiwgInRlc3QiKS5wcm9wZXJ0eSgidXVpZCIsIHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygidXVpZCIsIFAudHlwZU9mKEdUeXBlLnV1aWQpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGNvbnN0YW50WHV1aWRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInV1aWQiLCB1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInV1aWQiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkucHJvamVjdCgib3JpZ2luYWwiLCAidHlwZSIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmNvbnN0YW50KCJ1dWlkIikpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfd2hlcmVYaXNYZXFYdXVpZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgidXVpZCIsIHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygidXVpZCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS53aGVyZShfXy5pcyhQLmVxKHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfY2hvb3NlWGlzWGVxWHV1aWRYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgidXVpZCIsIHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygidXVpZCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5jaG9vc2UoX18uaXMoUC5lcSh1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkpLCBfXy5jb25zdGFudCgibWF0Y2giKSwgX18uY29uc3RhbnQoIm5vTWF0Y2giKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInV1aWQiLCB1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInV1aWQiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfYWdncmVnYXRlWGFYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInV1aWQiLCB1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInV1aWQiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkuYWdncmVnYXRlKCJhIikuY2FwKCJhIikgfV0sIAotICAgIGdfaW5qZWN0WHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QodXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5ncm91cENvdW50KCkgfV0sIAotICAgIGdfaW5qZWN0WFVVSURYNDdhZjEwYl81OGNjXzQzNzJfYTU2N18wZjAyYjJmM2Q0NzlYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QodXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpIH1dLCAKLSAgICBnX2luamVjdFhVVUlEWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCh1dWlkLnY0KCkpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWHhYX2J5WG5hbWVYX2J5WGFnZVhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKS5jYXAoIngiKSB9XSwgCi0gICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVh4WF9ieVhuYW1lWFhfYnlYYWdlWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJuYW1lIikuYnkoImFnZSIpKS5jYXAoIngiKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2FsbFhndFgzMlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmFsbChQLmd0KDMyKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF93aGVyZVhpc1hQX2d0WDMzWFhYX2ZvbGRfYWxsWGd0WDMzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkuYWxsKFAuZ3QoMzMpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfYWxsWGd0WDEwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMTApKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfYWxsWGd0WDMwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMzApKSB9XSwgCi0gICAgZ19pbmplY3RYYWJjX2JjZFhfYWxsWGVxWGJjZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImFiYyIsICJiY2QiXSkuYWxsKFAuZXEoImJjZCIpKSB9XSwgCi0gICAgZ19pbmplY3RYYmNkX2JjZFhfYWxsWGVxWGJjZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImJjZCIsICJiY2QiXSkuYWxsKFAuZXEoImJjZCIpKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbF9hYmNYX2FsbFhUZXh0UF9zdGFydGluZ1dpdGhYYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgImFiYyJdKS5hbGwoVGV4dFAuc3RhcnRpbmdXaXRoKCJhIikpIH1dLCAKLSAgICBnX2luamVjdFg1XzhfMTBfMTBfN1hfYWxsWGd0ZVg3WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFs1LCA4LCAxMF0sIFsxMCwgN10pLmFsbChQLmd0ZSg3KSkgfV0sIAotICAgIGdfaW5qZWN0WG51bGxYX2FsbFhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmFsbChQLmVxKG51bGwpKSB9XSwgCi0gICAgZ19pbmplY3RYN1hfYWxsWGVxWDdYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNykuYWxsKFAuZXEoNykpIH1dLCAKLSAgICBnX2luamVjdFhudWxsX251bGxYX2FsbFhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFtudWxsLCBudWxsXSkuYWxsKFAuZXEobnVsbCkpIH1dLCAKLSAgICBnX2luamVjdFgzX3RocmVlWF9hbGxYZXFYM1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMywgInRocmVlIl0pLmFsbChQLmVxKDMpKSB9XSwgCi0gICAgZ19WX2FuZFhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndGVfMlhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYW5kKF9fLmhhcygiYWdlIiwgUC5ndCgyNykpLCBfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0ZSgyKSkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfYW5kWG91dEVfX2hhc1hsYWJlbF9wZXJzb25YX2FuZF9oYXNYYWdlX2d0ZV8zMlhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFuZChfXy5vdXRFKCksIF9fLmhhcyhULmxhYmVsLCAicGVyc29uIikuYW5kKCkuaGFzKCJhZ2UiLCBQLmd0ZSgzMikpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dFhrbm93c1hfYW5kX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hhWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgia25vd3MiKS5hbmQoKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS5hcygiYSIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfYXNYYVhfYW5kWHNlbGVjdFhhWF9zZWxlY3RYYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmFuZChfXy5zZWxlY3QoImEiKSwgX18uc2VsZWN0KCJhIikpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfbWFya29YX2FuZF9oYXNYbmFtZV9tYXJrb1hfYW5kX2hhc1huYW1lX21hcmtvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuYW5kKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuYW5kKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9hbnlYZ3RYMzJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5hbnkoUC5ndCgzMikpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbnlYZXFYMjlYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5lcSgyOSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbnlYZ3RYMTBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndCgxMCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbnlYZ3RYNDJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndCg0MikpIH1dLCAKLSAgICBnX2luamVjdFhhYmNfY2RlWF9hbnlYZXFYYmNkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYWJjIiwgImNkZSJdKS5hbnkoUC5lcSgiYmNkIikpIH1dLCAKLSAgICBnX2luamVjdFhhYmNfYmNkWF9hbnlYZXFYYmNkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYWJjIiwgImJjZCJdKS5hbnkoUC5lcSgiYmNkIikpIH1dLCAKLSAgICBnX2luamVjdFhudWxsX2FiY1hfYW55WFRleHRQX3N0YXJ0aW5nV2l0aFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFtudWxsLCAiYWJjIl0pLmFueShUZXh0UC5zdGFydGluZ1dpdGgoImEiKSkgfV0sIAotICAgIGdfaW5qZWN0WDVfOF8xMF8xMF83WF9hbnlYZXFYN1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5hbnkoUC5lcSg3KSkgfV0sIAotICAgIGdfaW5qZWN0WG51bGxYX2FueVhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmFueShQLmVxKG51bGwpKSB9XSwgCi0gICAgZ19pbmplY3RYN1hfYW55WGVxWDdYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNykuYW55KFAuZXEoNykpIH1dLCAKLSAgICBnX2luamVjdFhudWxsX251bGxYX2FueVhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFtudWxsLCBudWxsXSkuYW55KFAuZXEobnVsbCkpIH1dLCAKLSAgICBnX2luamVjdFgzX3RocmVlWF9hbnlYZXFYM1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMywgInRocmVlIl0pLmFueShQLmVxKDMpKSB9XSwgCi0gICAgZ19WX2NvaW5YMV8wWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29pbigxLjApIH1dLCAKLSAgICBnX1ZfY29pblgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29pbigxKSB9XSwgCi0gICAgZ19WX2NvaW5YMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNvaW4oMC4wKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYbmFtZVhfY29pblg1MFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneSh7c2VlZDogOTk5OTk5fSkpLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikuY29pbigwLjUpIH1dLCAKLSAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2N5Y2xpY1BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS5jeWNsaWNQYXRoKCkgfV0sIAotICAgIGdfVlgxWF9ib3RoX2JvdGhfY3ljbGljUGF0aF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aCgpLmJvdGgoKS5jeWNsaWNQYXRoKCkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2N5Y2xpY1BhdGhfcGF0aDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLmN5Y2xpY1BhdGgoKS5wYXRoKCkgfV0sIAotICAgIGdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfaW5YY3JlYXRlZFhfYXNYY1hfY3ljbGljUGF0aF9mcm9tWGFYX3RvWGJYX3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuYXMoImMiKS5jeWNsaWNQYXRoKCkuZnJvbV8oImEiKS50bygiYiIpLnBhdGgoKSB9XSwgCi0gICAgZ19pbmplY3RYMFhfVl9ib3RoX2NvYWxlc2NlWGhhc1huYW1lX21hcmtvWF9ib3RoX2NvbnN0YW50WDBYWF9jeWNsaWNQYXRoX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDApLlYoKS5ib3RoKCkuY29hbGVzY2UoX18uaGFzKCJuYW1lIiwgIm1hcmtvIikuYm90aCgpLCBfXy5jb25zdGFudCgwKSkuY3ljbGljUGF0aCgpLnBhdGgoKSB9XSwgCi0gICAgZ19WX291dF9pbl92YWx1ZXNYbmFtZVhfZm9sZF9kZWR1cFhsb2NhbFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5pbl8oKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1Zfb3V0X2luX3ZhbHVlc1huYW1lWF9mb2xkX2RlZHVwWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkubWFwKF9fLmluXygpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkpIH1dLCAKLSAgICBnX1Zfb3V0X2FzWHhYX2luX2FzWHlYX3NlbGVjdFh4X3lYX2J5WG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxfeF95WF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLmFzKCJ4IikuaW5fKCkuYXMoInkiKS5zZWxlY3QoIngiLCAieSIpLmJ5KCJuYW1lIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsLCAieCIsICJ5IikudW5mb2xkKCkgfV0sIAotICAgIGdfVl9ib3RoX2RlZHVwX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfYm90aF9oYXNYbGFiZWxfc29mdHdhcmVYX2RlZHVwX2J5WGxhbmdYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgInNvZnR3YXJlIikuZGVkdXAoKS5ieSgibGFuZyIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfYm90aF9ib3RoX25hbWVfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikuZGVkdXAoKSB9XSwgCi0gICAgZ19WX2JvdGhfYm90aF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpIH1dLCAKLSAgICBnX1ZfYm90aF9ib3RoX2RlZHVwX2J5WGxhYmVsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KFQubGFiZWwpIH1dLCAKLSAgICBnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9kZWR1cF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcygid2VpZ2h0IikuZGVkdXAoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKSB9XSwgCi0gICAgZ19WX2FzWGFYX2JvdGhfYXNYYlhfZGVkdXBYYV9iWF9ieVhsYWJlbFhfc2VsZWN0WGFfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuYm90aCgpLmFzKCJiIikuZGVkdXAoImEiLCAiYiIpLmJ5KFQubGFiZWwpLnNlbGVjdCgiYSIsICJiIikgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfaW5fYXNYY1hfZGVkdXBYYV9iWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImNhcm9sIikuYXMoImMiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5hZGRFKCJsaWtlcyIpLmZyb21fKCJhIikudG8oImIiKS5hZGRFKCJsaWtlcyIpLmZyb21fKCJhIikudG8oImMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5pbl8oKS5hcygiYyIpLmRlZHVwKCJhIiwgImIiKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX291dEVfYXNYZVhfaW5WX2FzWHZYX3NlbGVjdFhlWF9vcmRlcl9ieVh3ZWlnaHRfYXNjWF9zZWxlY3RYdlhfdmFsdWVzWG5hbWVYX2RlZHVwOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkuYXMoImUiKS5pblYoKS5hcygidiIpLnNlbGVjdCgiZSIpLm9yZGVyKCkuYnkoIndlaWdodCIsIE9yZGVyLmFzYykuc2VsZWN0KCJ2IikudmFsdWVzKCJuYW1lIikuZGVkdXAoKSB9XSwgCi0gICAgZ19WX2JvdGhfYm90aF9kZWR1cF9ieVhvdXRFX2NvdW50WF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkuYnkoX18ub3V0RSgpLmNvdW50KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGVkdXAoKSB9XSwgCi0gICAgZ19WX2FzWGFYX3JlcGVhdFhib3RoWF90aW1lc1gzWF9lbWl0X25hbWVfYXNYYlhfZ3JvdXBfYnlYc2VsZWN0WGFYWF9ieVhzZWxlY3RYYlhfZGVkdXBfb3JkZXJfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RlZHVwOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLmVtaXQoKS52YWx1ZXMoIm5hbWUiKS5hcygiYiIpLmdyb3VwKCkuYnkoX18uc2VsZWN0KCJhIikpLmJ5KF9fLnNlbGVjdCgiYiIpLmRlZHVwKCkub3JkZXIoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WGRlZHVwWF90aW1lc1gyWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpLmNvdW50KCkgfV0sIAotICAgIGdfVl9ib3RoX2dyb3VwX2J5X2J5WG91dF9kZWR1cF9mb2xkWF91bmZvbGRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX291dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkuZGVkdXAoKS5mb2xkKCkpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkgfV0sIAotICAgIGdfVl9ib3RoX3Byb3BlcnRpZXNfZGVkdXBfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfYm90aF9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNfZGVkdXBfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKSB9XSwgCi0gICAgZ19WX29yZGVyX2J5WG5hbWVfZGVzY1hfYmFycmllcl9kZWR1cF9hZ2VfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibmFtZSIsIE9yZGVyLmRlc2MpLmJhcnJpZXIoKS5kZWR1cCgpLmJ5KCJhZ2UiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9vcmRlcl9ieVhuYW1lX2Rlc2NYX2JhcnJpZXJfZGVkdXBfYWdlX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfYm90aF9kZWR1cF9hZ2VfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmRlZHVwKCkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfYXNYYVhfYm90aF9hc1hiWF9ib3RoX2FzWGNYX2RlZHVwWGFfYlhfYWdlX3NlbGVjdFhhX2JfY1hfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikuYm90aCgpLmFzKCJiIikuYm90aCgpLmFzKCJjIikuZGVkdXAoImEiLCAiYiIpLmJ5KCJhZ2UiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX2RlZHVwWGxvY2FsWF91bmZvbGQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLmRlZHVwKFNjb3BlLmxvY2FsKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX3Byb3BlcnRpZXNfZGVkdXBfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCJuYW1lIikuZGVkdXAoKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfcHJvcGVydGllc19kZWR1cF9ieVh2YWx1ZVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCJuYW1lIikuZGVkdXAoKS5ieShULnZhbHVlKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfYm90aF9oYXNYbGFiZWxfc29mdHdhcmVYX2RlZHVwX2J5WGxhbmdYX2J5WG5hbWVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgInNvZnR3YXJlIikuZGVkdXAoKS5ieSgibGFuZyIpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9jb3VudF9kaXNjYXJkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jb3VudCgpLmRpc2NhcmQoKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfZGlzY2FyZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmRpc2NhcmQoKSB9XSwgCi0gICAgZ19WWDFYX291dFhjcmVhdGVkWF9kaXNjYXJkOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJjcmVhdGVkIikuZGlzY2FyZCgpIH1dLCAKLSAgICBnX1ZfZGlzY2FyZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZGlzY2FyZCgpIH1dLCAKLSAgICBnX1ZfZGlzY2FyZF9kaXNjYXJkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5kaXNjYXJkKCkuZGlzY2FyZCgpIH1dLCAKLSAgICBnX1ZfZGlzY2FyZF9mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5kaXNjYXJkKCkuZm9sZCgpIH1dLCAKLSAgICBnX1ZfZGlzY2FyZF9mb2xkX2Rpc2NhcmQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmRpc2NhcmQoKS5mb2xkKCkuZGlzY2FyZCgpIH1dLCAKLSAgICBnX1ZfZGlzY2FyZF9mb2xkX2NvbnN0YW50WDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmNvbnN0YW50KDEpIH1dLCAKLSAgICBnX1ZfcHJvamVjdFh4WF9ieVhjb2FsZXNjZVhhZ2VfaXNYZ3RYMjlYWF9kaXNjYXJkWFhfc2VsZWN0WHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9qZWN0KCJ4IikuYnkoX18uY29hbGVzY2UoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmd0KDI5KSksIF9fLmRpc2NhcmQoKSkpLnNlbGVjdCgieCIpIH1dLCAKLSAgICBnX1ZfZHJvcDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkuYXMoImEiKS5hZGRWKCkuYXMoImIiKS5hZGRFKCJrbm93cyIpLnRvKCJhIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5kcm9wKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX1Zfb3V0RV9kcm9wOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoKS5hcygiYSIpLmFkZFYoKS5hcygiYiIpLmFkZEUoImtub3dzIikudG8oImEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dEUoKS5kcm9wKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX1ZfcHJvcGVydGllc19kcm9wOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hZGRWKCkucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5kcm9wKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKSB9XSwgCi0gICAgZ19FX3Byb3BlcnRpZXNYd2VpZ2h0WF9kcm9wOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoIndlaWdodCIpLmRyb3AoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKSB9XSwgCi0gICAgZ19WX3Byb3BlcnRpZXNfcHJvcGVydGllc1hzdGFydFRpbWVYX2Ryb3A6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJsb2NhdGlvbiIsICJueSIsICJzdGFydFRpbWUiLCAyMDE0LCAiZW5kVGltZSIsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJsb2NhdGlvbiIsICJ2YSIsICJzdGFydFRpbWUiLCAyMDE2KS5hZGRWKCkucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAibG9jYXRpb24iLCAidmEiLCAic3RhcnRUaW1lIiwgMjAxNCwgImVuZFRpbWUiLCAyMDE2KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAibG9jYXRpb24iLCAibnkiLCAic3RhcnRUaW1lIiwgMjAxNikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygic3RhcnRUaW1lIikuZHJvcCgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCJzdGFydFRpbWUiKSB9XSwgCi0gICAgZ19WX2ZpbHRlclhpc1gwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZpbHRlcihfXy5pcygwKSkgfV0sIAotICAgIGdfVl9maWx0ZXJYY29uc3RhbnRYMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIH1dLCAKLSAgICBnX1ZfZmlsdGVyWGhhc1hsYW5nX2phdmFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZmlsdGVyKF9fLmhhcygibGFuZyIsICJqYXZhIikpIH1dLCAKLSAgICBnX1ZYMVhfZmlsdGVyWGhhc1hhZ2VfZ3RYMzBYWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5maWx0ZXIoX18uaGFzKCJhZ2UiLCBQLmd0KDMwKSkpIH1dLCAKLSAgICBnX1ZYMlhfZmlsdGVyWGhhc1hhZ2VfZ3RYMzBYWFg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5maWx0ZXIoX18uaGFzKCJhZ2UiLCBQLmd0KDMwKSkpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X2ZpbHRlclhoYXNYYWdlX2d0WDMwWFhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuZmlsdGVyKF9fLmhhcygiYWdlIiwgUC5ndCgzMCkpKSB9XSwgCi0gICAgZ19WX2ZpbHRlclhoYXNYbmFtZV9zdGFydGluZ1dpdGhYbV9vcl9wWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZpbHRlcihfXy5oYXMoIm5hbWUiLCBUZXh0UC5zdGFydGluZ1dpdGgoIm0iKS5vcihUZXh0UC5zdGFydGluZ1dpdGgoInAiKSkpKSB9XSwgCi0gICAgZ19FX2ZpbHRlclhpc1gwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmZpbHRlcihfXy5pcygwKSkgfV0sIAotICAgIGdfRV9maWx0ZXJYY29uc3RhbnRYMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIH1dLCAKLSAgICBnX1ZYMVhfaGFzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaGFzKCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9oYXNYY2lyY3VtZmVyZW5jZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5oYXMoImNpcmN1bWZlcmVuY2UiKSB9XSwgCi0gICAgZ19WWDFYX2hhc1huYW1lX21hcmtvWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmhhcygibmFtZSIsICJtYXJrbyIpIH1dLCAKLSAgICBnX1ZYMVhfaGFzWG5hbWVfbWFya292YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5oYXMoIm5hbWUiLCB4eDEpIH1dLCAKLSAgICBnX1ZYMlhfaGFzWG5hbWVfbWFya29YOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaGFzKCJuYW1lIiwgIm1hcmtvIikgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfYmxhaFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJibGFoIikgfV0sIAotICAgIGdfVl9oYXNYYWdlX2d0XzMwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLmd0KDMwKSkgfV0sIAotICAgIGdfVlgxWF9oYXNYYWdlX2d0XzMwWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmhhcygiYWdlIiwgUC5ndCgzMCkpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbnZhcl9hZ2VfZ3RfMzBYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcyh4eDEsICJhZ2UiLCBQLmd0KDMwKSkgfV0sIAotICAgIGdfVlg0WF9oYXNYYWdlX2d0XzMwWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmhhcygiYWdlIiwgUC5ndCgzMCkpIH1dLCAKLSAgICBnX1ZYdjFYX2hhc1hhZ2VfZ3RfMzBYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaGFzKCJhZ2UiLCBQLmd0KDMwKSkgfV0sIAotICAgIGdfVlh2NFhfaGFzWGFnZV9ndF8zMFg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5oYXMoImFnZSIsIFAuZ3QoMzApKSB9XSwgCi0gICAgZ19WWDFYX291dF9oYXNYaWRfMlg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5oYXMoImFnZSIsIFAuZ3QoMzApKSB9XSwgCi0gICAgZ19WX2hhc1hibGFoWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJibGFoIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2FnZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnZhbHVlcygiYWdlIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya292YXJYX2FnZTogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgeHgxKS52YWx1ZXMoImFnZSIpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbnZhcl9uYW1lX21hcmtvWF9hZ2U6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKHh4MSwgIm5hbWUiLCAibWFya28iKS52YWx1ZXMoImFnZSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RV9oYXNYd2VpZ2h0X2luc2lkZV8wXzA2WF9pblY6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkuaGFzKCJ3ZWlnaHQiLCBQLmluc2lkZSgwLjAsIDAuNikpLmluVigpIH1dLCAKLSAgICBnX0VYMTFYX291dFZfb3V0RV9oYXNYaWRfMTBYOiBbZnVuY3Rpb24oe2csIGVpZDExLCBlaWQxMH0pIHsgcmV0dXJuIGcuRShlaWQxMSkub3V0VigpLm91dEUoKS5oYXMoVC5pZCwgZWlkMTApIH1dLCAKLSAgICBnX0VYMTFYX291dFZfb3V0RV9oYXNYaWRfMTBBc1N0cmluZ1g6IFtmdW5jdGlvbih7ZywgZWlkMTEsIGVpZDEwfSkgeyByZXR1cm4gZy5FKGVpZDExKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlaWQxMCkgfV0sIAotICAgIGdfVl9oYXNYbG9jYXRpb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImxvY2F0aW9uIikgfV0sIAotICAgIGdfVl9oYXNYYWdlX3dpdGhpblgyN1hfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRoaW4oMjcpKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZV93aXRoaW5YMjdfbnVsbFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRoaW4oMjcsIG51bGwpKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZV93aXRoaW5YMjdfMjlYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIFAud2l0aGluKDI3LCAyOSkpLmNvdW50KCkgfV0sIAotICAgIGdfVl9oYXNYYWdlX3dpdGhvdXRYMjdYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIFAud2l0aG91dCgyNykpLmNvdW50KCkgfV0sIAotICAgIGdfVl9oYXNYYWdlX3dpdGhvdXRYMjdfMjlYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIFAud2l0aG91dCgyNywgMjkpKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9hZ2Vfd2l0aGluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAiYWdlIiwgUC53aXRoaW4oKSkgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX2FnZV93aXRob3V0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAiYWdlIiwgUC53aXRob3V0KCkpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfY29udGFpbmluZ1hhcmtYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAuY29udGFpbmluZygiYXJrIikpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfc3RhcnRpbmdXaXRoWG1hclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5zdGFydGluZ1dpdGgoIm1hciIpKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX2VuZGluZ1dpdGhYYXNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAuZW5kaW5nV2l0aCgiYXMiKSkgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfY29udGFpbmluZ1hvWF9hbmRYbHRYbVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoIm8iKS5hbmQoUC5sdCgibSIpKSkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9ndFhtWF9hbmRYY29udGFpbmluZ1hvWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBQLmd0KCJtIikuYW5kKFRleHRQLmNvbnRhaW5pbmcoIm8iKSkpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfbm90X2NvbnRhaW5pbmdYYXJrWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLm5vdENvbnRhaW5pbmcoImFyayIpKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX25vdF9zdGFydGluZ1dpdGhYbWFyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aCgibWFyIikpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfbm90X2VuZGluZ1dpdGhYYXNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAubm90RW5kaW5nV2l0aCgiYXMiKSkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9yZWdleFhyTWFyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLnJlZ2V4KCJebWFyIikpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfbm90UmVnZXhYck1hclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5ub3RSZWdleCgiXm1hciIpKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiQXBhY2hlIFRpbmtlclBvcMKpIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5yZWdleCgiVGlua2VyIikpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfcmVnZXhYVGlua2VyVW5pY29kZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiQXBhY2hlIFRpbmtlclBvcMKpIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5yZWdleCgiVGlua2VyLipcdTAwQTkiKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNYcF9uZXFYdlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInAiLCBQLm5lcSgidiIpKSB9XSwgCi0gICAgZ19WX2hhc1hhZ2VfZ3RYMThYX2FuZFhsdFgzMFhYb3JYZ3R4MzVYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC5ndCgxOCkuYW5kKFAubHQoMzApKS5vcihQLmd0KDM1KSkpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZV9ndFgxOFhfYW5kWGx0WDMwWFhvclhsdHgzNVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLmFuZChQLmx0KDM1KSkpIH1dLCAKLSAgICBnX1ZfaGFzWGtfd2l0aGluWGNYWF92YWx1ZXNYa1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJrIiwgIui9ieazqCIpLmFkZFYoKS5wcm9wZXJ0eSgiayIsICLinKYiKS5hZGRWKCkucHJvcGVydHkoImsiLCAi4pmgIikuYWRkVigpLnByb3BlcnR5KCJrIiwgIkEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiayIsIFAud2l0aGluKCLovYnms6giLCAi4pymIiwgIuKZoCIpKS52YWx1ZXMoImsiKSB9XSwgCi0gICAgZ19WX2hhc1hudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKG51bGwpIH1dLCAKLSAgICBnX1ZfaGFzWG51bGxfdGVzdG51bGxrZXlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMobnVsbCwgInRlc3QtbnVsbC1rZXkiKSB9XSwgCi0gICAgZ19FX2hhc1hudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzKG51bGwpIH1dLCAKLSAgICBnX1ZfaGFzWGxhYmVsX3BlcnNvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcyhULmxhYmVsLCAicGVyc29uIikgfV0sIAotICAgIGdfVl9oYXNYbGFiZWxfZXFYcGVyc29uWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcyhULmxhYmVsLCBQLmVxKCJwZXJzb24iKSkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgbnVsbCkgfV0sIAotICAgIGdfVl9oYXNJZFhlbXB0eVhfY291bnQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQoeHgxKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfaGFzSWRYd2l0aGluWGVtcHR5WFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0lkKFAud2l0aGluKFtdKSkuY291bnQoKSB9XSwgCi0gICAgZ19WX2hhc0lkWHdpdGhvdXRYZW1wdHlYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQoUC53aXRob3V0KFtdKSkuY291bnQoKSB9XSwgCi0gICAgZ19WX25vdFhoYXNJZFh3aXRoaW5YZW1wdHlYWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm5vdChfXy5oYXNJZChQLndpdGhpbihbXSkpKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfaGFzSWRYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0lkKG51bGwpIH1dLCAKLSAgICBnX1ZfaGFzSWRYZXFYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNJZChQLmVxKG51bGwpKSB9XSwgCi0gICAgZ19WX2hhc0lkWDJfbnVsbFg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVigpLmhhc0lkKHZpZDIsIG51bGwpIH1dLCAKLSAgICBnX1ZfaGFzSWRYbWFya292YXJfdmFkYXN2YXJYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSB9XSwgCi0gICAgZ19WX2hhc0lkWDJBc1N0cmluZ19udWxsWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkgfV0sIAotICAgIGdfVl9oYXNJZFgxQXNTdHJpbmdfMkFzU3RyaW5nX251bGxYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyLCBudWxsKSB9XSwgCi0gICAgZ19WX2hhc0lkWG51bGxfMlg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVigpLmhhc0lkKG51bGwsIHZpZDIpIH1dLCAKLSAgICBnX1ZfaGFzSWRYMVhfaGFzSWRYMlg6IFtmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpLmhhc0lkKHZpZDEpLmhhc0lkKHZpZDIpIH1dLCAKLSAgICBnX1ZfaW5faGFzSWRYbmVxWDFYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5pbl8oKS5oYXNJZChQLm5lcSh4eDEpKSB9XSwgCi0gICAgZ19WWDFYX291dF9oYXNJZFgyWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X2hhc1hpZF8yXzNYOiBbZnVuY3Rpb24oe2csIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykgfV0sIAotICAgIGdfVlgxWF9vdXRfaGFzWGlkXzJBc1N0cmluZ18zQXNTdHJpbmdYOiBbZnVuY3Rpb24oe2csIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykgfV0sIAotICAgIGdfVlgxQXNTdHJpbmdYX291dF9oYXNYaWRfMkFzU3RyaW5nWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X2hhc1hpZF8yXzNYX2luTGlzdDogW2Z1bmN0aW9uKHtnLCB4eDEsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuaGFzSWQoeHgxKSB9XSwgCi0gICAgZ19WX2hhc1hpZF8xXzJYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSB9XSwgCi0gICAgZ19WX2hhc1hpZF8xXzJYX2luTGlzdDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh4eDEpIH1dLCAKLSAgICBnX1ZfYm90aF9kZWR1cF9wcm9wZXJ0aWVzX2hhc0tleVhhZ2VYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KCJhZ2UiKS52YWx1ZSgpIH1dLCAKLSAgICBnX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVhhZ2VYX2hhc1ZhbHVlWGd0WDMwWFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoImFnZSIpLmhhc1ZhbHVlKFAuZ3QoMzApKS52YWx1ZSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgiYWdlIikuaGFzVmFsdWUoUC5ndCgzMCkpLnZhbHVlKCkgfV0sIAotICAgIGdfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVh3ZWlnaHRYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgid2VpZ2h0IikudmFsdWUoKSB9XSwgCi0gICAgZ19WX2JvdGhFX3Byb3BlcnRpZXNfZGVkdXBfaGFzS2V5WHdlaWdodFhfaGFzVmFsdWVYbHRYMGQzWFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KCJ3ZWlnaHQiKS5oYXNWYWx1ZShQLmx0KDAuMykpLnZhbHVlKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgid2VpZ2h0IikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIH1dLCAKLSAgICBnX1ZfcHJvcGVydGllc19oYXNLZXlYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIG51bGwpIH1dLCAKLSAgICBnX1ZfcHJvcGVydGllc19oYXNLZXlYbnVsbF9hZ2VYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsICJhZ2UiKS52YWx1ZSgpIH1dLCAKLSAgICBnX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCkgfV0sIAotICAgIGdfRV9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIG51bGwpIH1dLCAKLSAgICBnX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbF93ZWlnaHRYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsICJ3ZWlnaHQiKS52YWx1ZSgpIH1dLCAKLSAgICBnX0VYN1hfaGFzTGFiZWxYa25vd3NYOiBbZnVuY3Rpb24oe2csIGVpZDd9KSB7IHJldHVybiBnLkUoZWlkNykuaGFzTGFiZWwoImtub3dzIikgfV0sIAotICAgIGdfRV9oYXNMYWJlbFhrbm93c1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpIH1dLCAKLSAgICBnX0VfaGFzTGFiZWxYdXNlc190cmF2ZXJzZXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgidXNlcyIsICJ0cmF2ZXJzZXMiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvbl9zb2Z0d2FyZV9ibGFoWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIsICJzb2Z0d2FyZSIsICJibGFoIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25fc29mdHdhcmV2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iLCB4eDEpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9oYXNMYWJlbFhzb2Z0d2FyZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5oYXNMYWJlbCgic29mdHdhcmUiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvbnZhclhfaGFzTGFiZWxYc29mdHdhcmVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKHh4MSkuaGFzTGFiZWwoInNvZnR3YXJlIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb252YXJfc29mdHdhcmV2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoeHgxLCB4eDIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9oYXNYYWdlX25vdFhsdGVYMTBYX2FuZFhub3RYYmV0d2VlblgxMV8yMFhYWFhfYW5kWGx0WDI5WF9vclhlcVgzNVhYWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmhhcygiYWdlIiwgUC5ub3QoUC5sdGUoMTApLmFuZChQLm5vdChQLmJldHdlZW4oMTEsIDIwKSkpKS5hbmQoUC5sdCgyOSkub3IoUC5lcSgzNSkpKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwobnVsbCkgfV0sIAotICAgIGdfVl9oYXNYbGFiZWxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcyhULmxhYmVsLCBudWxsKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWG51bGxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKG51bGwsIG51bGwpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYbnVsbF9wZXJzb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbChudWxsLCAicGVyc29uIikgfV0sIAotICAgIGdfRV9oYXNMYWJlbFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwobnVsbCkgfV0sIAotICAgIGdfRV9oYXNYbGFiZWxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcyhULmxhYmVsLCBudWxsKSB9XSwgCi0gICAgZ19WX3Byb3BlcnRpZXNfaGFzTGFiZWxYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNMYWJlbChudWxsKSB9XSwgCi0gICAgZ19WX2hhc05vdFhhZ2VYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc05vdCgiYWdlIikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBudWxsKSB9XSwgCi0gICAgZ19WX3Byb3BlcnRpZXNfaGFzVmFsdWVYbnVsbF9qb3NoWF92YWx1ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLmhhc1ZhbHVlKG51bGwsICJqb3NoIikudmFsdWUoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWDMyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcygzMikgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1gzMnZhclg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyh4eDEpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYbHRlXzMwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLmx0ZSgzMCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYbHRlXzMwdmFyWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAubHRlKHh4MSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYZ3RlXzI5WF9pc1hsdF8zNFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC5ndGUoMjkpKS5pcyhQLmx0KDM0KSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1hndGVfMjl2YWFyWF9pc1hsdF8zNHZhclg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAuZ3RlKHh4MSkpLmlzKFAubHQoeHgyKSkgfV0sIAotICAgIGdfVl93aGVyZVhpblhjcmVhdGVkWF9jb3VudF9pc1gxWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5pbl8oImNyZWF0ZWQiKS5jb3VudCgpLmlzKDEpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3doZXJlWGluWGNyZWF0ZWRYX2NvdW50X2lzWGd0ZV8yWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5pbl8oImNyZWF0ZWQiKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9ub25lWGd0WDMyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikubm9uZShQLmd0KDMyKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF93aGVyZVhpc1hQX2d0WDMzWFhYX2ZvbGRfbm9uZVhsdGVYMzNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS53aGVyZShfXy5pcyhQLmd0KDMzKSkpLmZvbGQoKS5ub25lKFAubHRlKDMzKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX25vbmVYbHRYMTBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAubHQoMTApKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfbm9uZVhndFgzMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5ndCgzMCkpIH1dLCAKLSAgICBnX2luamVjdFhhYmNfYmNkWF9ub25lWGVxWGJjZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImFiYyIsICJiY2QiXSkubm9uZShQLmVxKCJiY2QiKSkgfV0sIAotICAgIGdfaW5qZWN0WGJjZF9iY2RYX25vbmVYZXFYYWJjWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYmNkIiwgImJjZCJdKS5ub25lKFAuZXEoImFiYyIpKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbF9iY2RYX25vbmVYUF9lcVhhYmNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsICJiY2QiXSkubm9uZShQLmVxKCJhYmMiKSkgfV0sIAotICAgIGdfaW5qZWN0WDVfOF8xMF8xMF83WF9ub25lWGx0WDdYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkubm9uZShQLmx0KDcpKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbFhfbm9uZVhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLm5vbmUoUC5lcShudWxsKSkgfV0sIAotICAgIGdfaW5qZWN0WDdYX25vbmVYZXFYN1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg3KS5ub25lKFAuZXEoNykpIH1dLCAKLSAgICBnX2luamVjdFhudWxsXzFfZW1wdHlYX25vbmVYZXFYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgMV0sIFtdKS5ub25lKFAuZXEobnVsbCkpIH1dLCAKLSAgICBnX2luamVjdFhudWxsX251bGxYX25vbmVYbm90WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsIG51bGxdKS5ub25lKFAubmVxKG51bGwpKSB9XSwgCi0gICAgZ19pbmplY3RYM190aHJlZVhfbm9uZVhlcVgzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkubm9uZShQLmVxKDMpKSB9XSwgCi0gICAgZ19WX25vdFhoYXNYYWdlX2d0XzI3WFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubm90KF9fLmhhcygiYWdlIiwgUC5ndCgyNykpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX25vdFhub3RYaGFzWGFnZV9ndF8yN1hYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ub3QoX18ubm90KF9fLmhhcygiYWdlIiwgUC5ndCgyNykpKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9ub3RYaGFzWG5hbWVfZ3RfMjdYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ub3QoX18uaGFzKCJuYW1lIiwgUC5ndCgyNykpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX29yWGhhc1hhZ2VfZ3RfMjdYX19vdXRFX2NvdW50X2d0ZV8yWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcihfXy5oYXMoImFnZSIsIFAuZ3QoMjcpKSwgX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX29yWG91dEVYa25vd3NYX19oYXNYbGFiZWxfc29mdHdhcmVYX29yX2hhc1hhZ2VfZ3RlXzM1WFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3IoX18ub3V0RSgia25vd3MiKSwgX18uaGFzKFQubGFiZWwsICJzb2Z0d2FyZSIpLm9yKCkuaGFzKCJhZ2UiLCBQLmd0ZSgzNSkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX29yWHNlbGVjdFhhWF9zZWxlY3RYYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm9yKF9fLnNlbGVjdCgiYSIpLCBfXy5zZWxlY3QoImEiKSkgfV0sIAotICAgIGdfVlgxWF9vdXRfbGltaXRYMlg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5saW1pdCgyKSB9XSwgCi0gICAgZ19WWDFYX291dF9saW1pdFgydmFyWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkubGltaXQoeHgxKSB9XSwgCi0gICAgZ19WX2xvY2FsWG91dEVfbGltaXRYMVhfaW5WWF9saW1pdFgzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18ub3V0RSgpLmxpbWl0KDEpKS5pblYoKS5saW1pdCgzKSB9XSwgCi0gICAgZ19WWDFYX291dFhrbm93c1hfb3V0RVhjcmVhdGVkWF9yYW5nZVgwXzFYX2luVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgia25vd3MiKS5vdXRFKCJjcmVhdGVkIikucmFuZ2UoMCwgMSkuaW5WKCkgfV0sIAotICAgIGdfVlgxWF9vdXRYa25vd3NYX291dFhjcmVhdGVkWF9yYW5nZVgwXzFYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJrbm93cyIpLm91dCgiY3JlYXRlZCIpLnJhbmdlKDAsIDEpIH1dLCAKLSAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3JhbmdlWDFfM1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS5yYW5nZSgxLCAzKSB9XSwgCi0gICAgZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9yYW5nZVgxdmFyXzN2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLnJhbmdlKHh4MSwgeHgyKSB9XSwgCi0gICAgZ19WWDFYX291dFhjcmVhdGVkWF9pbkVYY3JlYXRlZFhfcmFuZ2VYMV8zWF9vdXRWOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJjcmVhdGVkIikuaW5FKCJjcmVhdGVkIikucmFuZ2UoMSwgMykub3V0VigpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3JhbmdlWDVfMTFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5yYW5nZSg1LCAxMSkgfV0sIAotICAgIGdfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmluXygpLmFzKCJiIikuaW5fKCkuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS5saW1pdChTY29wZS5sb2NhbCwgMikgfV0sIAotICAgIGdfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJ2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuaW5fKCkuYXMoImIiKS5pbl8oKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIH1dLCAKLSAgICBnX1ZfYXNYYVhfaW5fYXNYYlhfaW5fYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9saW1pdFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5pbl8oKS5hcygiYiIpLmluXygpLmFzKCJjIikuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikubGltaXQoU2NvcGUubG9jYWwsIDEpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfM1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAzKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9yYW5nZVhsb2NhbF8xdmFyXzN2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikucmFuZ2UoU2NvcGUubG9jYWwsIHh4MSwgeHgyKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9yYW5nZVhsb2NhbF8xXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikub3V0KCkuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVhfc2tpcFgxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKS5za2lwKDEpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3NraXBYMXZhclhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKS5za2lwKHh4MSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9mb2xkWF9yYW5nZVhsb2NhbF82XzdYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkucmFuZ2UoU2NvcGUubG9jYWwsIDYsIDcpIH1dLCAKLSAgICBnX1Zfb3V0RV92YWx1ZXNYd2VpZ2h0WF9mb2xkX29yZGVyWGxvY2FsWF9za2lwWGxvY2FsXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIDIpIH1dLCAKLSAgICBnX1Zfb3V0RV92YWx1ZXNYd2VpZ2h0WF9mb2xkX29yZGVyWGxvY2FsWF9za2lwWGxvY2FsXzJ2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgeHgxKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlWF92YWx1ZXNYbmFtZVhfc2tpcFgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm9yZGVyKCkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpLnNraXAoMSkgfV0sIAotICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9yYW5nZVhsb2NhbF8yMF8zMFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAyMCwgMzApIH1dLCAKLSAgICBnX1ZfbWFwWGluX2hhc0lkWDFYWF9saW1pdFgyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVigpLm1hcChfXy5pbl8oKS5oYXNJZCh2aWQxKSkubGltaXQoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9yYW5nZVgyXzFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yYW5nZSgyLCAxKSB9XSwgCi0gICAgZ19WX3JhbmdlWDNfMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJhbmdlKDMsIDIpIH1dLCAKLSAgICBnX2luamVjdFhsaXN0WDFfMl8zWFhfcmFuZ2VYbG9jYWxfMV8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikgfV0sIAotICAgIGdfaW5qZWN0WGxpc3RYMV8yXzNYWF9saW1pdFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkgfV0sIAotICAgIGdfaW5qZWN0WGxpc3RYMV8yXzNYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAotICAgIGdfaW5qZWN0WDFfMl8zXzRfNVhfbGltaXRYbG9jYWxfMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSwgWzMsIDQsIDVdKS5saW1pdChTY29wZS5sb2NhbCwgMSkgfV0sIAotICAgIGdfaW5qZWN0WDFfMl8zXzRfNV82WF9yYW5nZVhsb2NhbF8xXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIH1dLCAKLSAgICBnX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luWF91bnRpbFhsb29wc1hpc1gyWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlg1WF9saW1pdFgxWF9pbl9saW1pdFgxWF9pbl92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5saW1pdCgxKS5pbl8oKS5saW1pdCgxKS5pbl8oKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDVYX3JlcGVhdFhsaW1pdFgxWF9pblhfdGltZXNYMVhfcmVwZWF0WGxpbWl0WDFYX2luWF90aW1lc1gxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnRpbWVzKDEpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudGltZXMoMSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlg1WF9yZXBlYXRYbGltaXRYMVhfaW5fYWdncmVnYXRlWHhYWF90aW1lc1gyWF9jYXBYeFg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkuYWdncmVnYXRlKCJ4IikpLnRpbWVzKDIpLmNhcCgieCIpIH1dLCAKLSAgICBnX1ZYNVhfcmVwZWF0WHJhbmdlWDBfMVhfaW5YX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbl8oKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlg1WF9yZXBlYXRYcmFuZ2VYMF8xWF9pblhfdW50aWxYbG9vcHNYaXNYMlhYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW5fKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYNVhfcmFuZ2VYMF8xWF9pbl9yYW5nZVgwXzFYX2luX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJhbmdlKDAsIDEpLmluXygpLnJhbmdlKDAsIDEpLmluXygpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYNVhfcmVwZWF0WHJhbmdlWDBfMVhfaW5fcmVwZWF0WHJhbmdlWDBfMVhfaW5YX3RpbWVzWDFYWF90aW1lc1gxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW5fKCkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluXygpKS50aW1lcygxKSkudGltZXMoMSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlg1WF9yZXBlYXRYcmFuZ2VYMF8xWF9pbl9hZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX2NhcFh4WDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbl8oKS5hZ2dyZWdhdGUoIngiKSkudGltZXMoMikuY2FwKCJ4IikgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYRWFybHlMaW1pdFN0cmF0ZWd5WF9WWDVYX3JlcGVhdFhsaW1pdFgxWF9pbl9saW1pdFgxWF9saW1pdFgxWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKS5saW1pdCgxKS5saW1pdCgxKSkudGltZXMoMikgfV0sIAotICAgIGdfVl9yZXBlYXRYb3V0X3doZXJlWGhhc1huYW1lWF9vcmRlcl9ieVhuYW1lWF9saW1pdFgxWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkud2hlcmUoX18uaGFzKCJuYW1lIikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKSkudGltZXMoMikgfV0sIAotICAgIGdfVl9vdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWF9vdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkud2hlcmUoX18uaGFzKCJuYW1lIikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKS5vdXQoKS53aGVyZShfXy5oYXMoIm5hbWUiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMSkpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVYSkFNWFhfcmVwZWF0WG91dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJKQU0iKS5yZXBlYXQoX18ub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpKS50aW1lcygyKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lWEpBTVhYX291dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWF9vdXRYZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJKQU0iKS5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMikub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVYRFJVTVNYWF9yZXBlYXRYaW5YZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfcmFuZ2VYMV80WFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEUlVNUyIpLnJlcGVhdChfXy5pbl8oImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikucmFuZ2UoMSwgNCkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVYRFJVTVNYWF9pblhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9yYW5nZVgxXzRYX2luWGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX3JhbmdlWDFfNFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEUlVNUyIpLmluXygiZm9sbG93ZWRCeSIpLm9yZGVyKCkuYnkoIm5hbWUiKS5yYW5nZSgxLCA0KS5pbl8oImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikucmFuZ2UoMSwgNCkgfV0sIAotICAgIGdfVl9jaG9vc2VYdmFsdWVzWGFnZVhfaXNYbHRlWDMwWFhfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX291dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy52YWx1ZXMoImFnZSIpLmlzKFAubHRlKDMwKSksIF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS5saW1pdCgxKSwgX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpKSB9XSwgCi0gICAgZ19WX2Nob29zZVh2YWx1ZXNYYWdlWF9pc1hsdGVYMzBYWF9sb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYX2xvY2FsWG91dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmx0ZSgzMCkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMSkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMikpKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lWEhFWV9CT19ESURETEVZWFhfdW5pb25Yb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDJYX291dFhzdW5nQnlYX29yZGVyX2J5WG5hbWVYX2J5WG5hbWVYX2xpbWl0WDFYWF91bmlvblhvdXRYZm9sbG93ZWRCeVhfb3JkZXJfbGltaXRYMlhfb3V0WHN1bmdCeVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiSEVZIEJPIERJRERMRVkiKS51bmlvbihfXy5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMiksIF9fLm91dCgic3VuZ0J5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKS51bmlvbihfXy5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMiksIF9fLm91dCgic3VuZ0J5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lWEhFWV9CT19ESURETEVZWFhfcmVwZWF0WHVuaW9uWG91dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWF9vdXRYc3VuZ0J5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgxWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiSEVZIEJPIERJRERMRVkiKS5yZXBlYXQoX18udW5pb24oX18ub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpLCBfXy5vdXQoInN1bmdCeSIpLm9yZGVyKCkuYnkoIm5hbWUiKS5saW1pdCgxKSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX1Zfc2FtcGxlWDFYX2J5WGFnZVhfYnlYVF9pZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhbXBsZSgxKS5ieSgiYWdlIikuYnkoVC5pZCkgfV0sIAotICAgIGdfRV9zYW1wbGVYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnNhbXBsZSgxKSB9XSwgCi0gICAgZ19FX3NhbXBsZVgyWF9ieVh3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5zYW1wbGUoMikuYnkoIndlaWdodCIpIH1dLCAKLSAgICBnX1ZfbG9jYWxYb3V0RV9zYW1wbGVYMVhfYnlYd2VpZ2h0WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm91dEUoKS5zYW1wbGUoMSkuYnkoIndlaWdodCIpKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9vcmRlcl9zYW1wbGVYMlhfZm9sZFh1bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneSh7c2VlZDogOTk5OTk5fSkpLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5vcmRlcigpLnNhbXBsZSgyKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X29yZGVyX2ZvbGRfc2FtcGxlWGxvY2FsXzVYWHVuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHtzZWVkOiA5OTk5OTl9KSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm9yZGVyKCkuZm9sZCgpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9vcmRlcl9ieVhsYWJlbF9kZXNjWF9zYW1wbGVYMVhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHtzZWVkOiA5OTk5OTl9KSkuVigpLm9yZGVyKCkuYnkoVC5sYWJlbCwgT3JkZXIuZGVzYykuc2FtcGxlKDEpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX3NhbXBsZVhsb2NhbF81WDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuc2FtcGxlKFNjb3BlLmxvY2FsLCA1KSB9XSwgCi0gICAgZ19WX3JlcGVhdFhzYW1wbGVYMlhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uc2FtcGxlKDIpKS50aW1lcygyKSB9XSwgCi0gICAgZ19WX3NhbXBsZVgyWF9zYW1wbGVYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhbXBsZSgyKS5zYW1wbGUoMikgfV0sIAotICAgIGdfVjNfcmVwZWF0WG91dF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3NhbXBsZVgyWF9hZ2dyZWdhdGVYeFhYX3VudGlsWGxvb3BzX2lzWDJYWF9jYXBYeFhfdW5mb2xkOiBbZnVuY3Rpb24oe2csIHZpZDN9KSB7IHJldHVybiBnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoInBlcmZvcm1hbmNlcyIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoIngiKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkuY2FwKCJ4IikudW5mb2xkKCkgfV0sIAotICAgIGdfVjNfb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfc2FtcGxlWDJYX2FnZ3JlZ2F0ZVh4WF9vdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF9zYW1wbGVYMlhfYWdncmVnYXRlWHhYX2NhcFh4WF91bmZvbGQ6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5vdXQoKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiKS5zYW1wbGUoMikuYWdncmVnYXRlKCJ4Iikub3V0KCkub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgieCIpLmNhcCgieCIpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3NpbXBsZVBhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS5zaW1wbGVQYXRoKCkgfV0sIAotICAgIGdfVl9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF90aW1lc1gzWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykucGF0aCgpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zaW1wbGVQYXRoX2J5WGxhYmVsWF9mcm9tWGJYX3RvWGNYX3BhdGhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLnNpbXBsZVBhdGgoKS5ieShULmxhYmVsKS5mcm9tXygiYiIpLnRvKCJjIikucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfaW5qZWN0WDBYX1ZfYm90aF9jb2FsZXNjZVhoYXNYbmFtZV9tYXJrb1hfYm90aF9jb25zdGFudFgwWFhfc2ltcGxlUGF0aF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcygibmFtZSIsICJtYXJrbyIpLmJvdGgoKSwgX18uY29uc3RhbnQoMCkpLnNpbXBsZVBhdGgoKS5wYXRoKCkgfV0sIAotICAgIGdfVl9ib3RoX2FzWGFYX2JvdGhfYXNYYlhfc2ltcGxlUGF0aF9wYXRoX2J5WGFnZVhfX2Zyb21YYVhfdG9YYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5hcygiYSIpLmJvdGgoKS5hcygiYiIpLnNpbXBsZVBhdGgoKS5wYXRoKCkuYnkoImFnZSIpLmZyb21fKCJhIikudG8oImIiKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsWGdsb2JhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKDIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYMnZhclg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKHh4MSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFg3WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKDcpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3RhaWxYN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLnRhaWwoNykgfV0sIAotICAgIGdfVl9yZXBlYXRYaW5fb3V0WF90aW1lc1gzWF90YWlsWDdYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uaW5fKCkub3V0KCkpLnRpbWVzKDMpLnRhaWwoNykuY291bnQoKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WGFYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbF8xWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLnNlbGVjdCgiYSIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhhWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoX18udW5mb2xkKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikub3V0KCkuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJ2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLnRhaWwoU2NvcGUubG9jYWwsIHh4MSkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfdGFpbFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikudGFpbChTY29wZS5sb2NhbCwgMSkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxfMVhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJhIikub3V0KCkuYXMoImEiKS5zZWxlY3QoUG9wLm1peGVkLCAiYSIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYbGltaXRYbG9jYWxfMFhYX3RhaWxYbG9jYWxfMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLnNlbGVjdChQb3AubWl4ZWQsICJhIikuYnkoX18ubGltaXQoU2NvcGUubG9jYWwsIDApKS50YWlsKFNjb3BlLmxvY2FsLCAxKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwsIDIpIH1dLCAKLSAgICBnX1ZYMVhfdmFsdWVzWGFnZVhfdGFpbFhsb2NhbF81WDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikudGFpbChTY29wZS5sb2NhbCwgNTApIH1dLCAKLSAgICBnX2luamVjdFhsaXN0WDFfMl8zWFhfdGFpbFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKSB9XSwgCi0gICAgZ19WWDFYX3ZhbHVlTWFwWG5hbWVYX3RhaWxYbG9jYWxfMVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZU1hcCgibmFtZSIpLnRhaWwoU2NvcGUubG9jYWwsIDEpIH1dLCAKLSAgICBnX2luamVjdFgxXzJfM1hfdGFpbFhsb2NhbF8xWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyLCAzXSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAotICAgIGdfaW5qZWN0WDFfMl8zXzRfNV82WF90YWlsWGxvY2FsXzFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkudGFpbChTY29wZS5sb2NhbCwgMSkgfV0sIAotICAgIGdfaW5qZWN0WDFfMl8zXzRfNVhfdGFpbFhsb2NhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDMsIDQsIDVdKS50YWlsKFNjb3BlLmxvY2FsLCAyKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9pc1h0eXBlT2ZYR1R5cGVfU1RSSU5HWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2lzWHR5cGVPZlhqYXZhX2xhbmdfU3RyaW5nWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmlzKFAudHlwZU9mKCJTdHJpbmciKSkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV90eXBlT2ZYR1R5cGVfU1RSSU5HWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX29yWGhhc1huYW1lX3R5cGVPZlhHVHlwZV9TVFJJTkdYWF9faGFzWGFnZV90eXBlT2ZYR1R5cGVfSU5UWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3IoX18uaGFzKCJuYW1lIiwgUC50eXBlT2YoR1R5cGUuc3RyaW5nKSksIF9fLmhhcygiYWdlIiwgUC50eXBlT2YoR1R5cGUuaW50KSkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfYW5kWGhhc1huYW1lX3R5cGVPZlhHVHlwZV9TVFJJTkdYWF9faGFzWGFnZV90eXBlT2ZYR1R5cGVfSU5UWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYW5kKF9fLmhhcygibmFtZSIsIFAudHlwZU9mKEdUeXBlLnN0cmluZykpLCBfXy5oYXMoImFnZSIsIFAudHlwZU9mKEdUeXBlLmludCkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX25vdFhoYXNYYWdlX3R5cGVPZlhHVHlwZV9TVFJJTkdYWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ub3QoX18uaGFzKCJhZ2UiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1hub3RYdHlwZU9mWEdUeXBlX1NUUklOR1hYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLm5vdChQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWHN0cmluZ1N0cmluZ1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5pcyhQLnR5cGVPZigiU3RyaW5nIikpIH1dLCAKLSAgICBnX1Zfb3JYdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX192YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3IoX18udmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKSwgX18udmFsdWVzKCJuYW1lIikuaXMoUC50eXBlT2YoR1R5cGUuc3RyaW5nKSkpLmNvdW50KCkgfV0sIAotICAgIGdfVl93aGVyZVh2YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnZhbHVlcygibmFtZSIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3doZXJlWHZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9TVFJJTkdYWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuc3RyaW5nKSkpLmNvdW50KCkgfV0sIAotICAgIGdfVl93aGVyZVhub3RYdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5ub3QoX18udmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX05VTExYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5udWxsKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfQk9PTEVBTlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmJvb2xlYW4pKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9DSEFSWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuY2hhcikpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JJTkFSWVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmJpbmFyeSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0RVUkFUSU9OWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuZHVyYXRpb24pKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhub25fcmVnaXN0ZXJlZF9OYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoIm5vbi1yZWdpc3RlcmVkLU5hbWUiKSkgfV0sIAotICAgIGdfaW5qZWN0WHRydWVYX2lzWHR5cGVPZlhHVHlwZV9CT09MRUFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QodHJ1ZSkuaXMoUC50eXBlT2YoR1R5cGUuYm9vbGVhbikpIH1dLCAKLSAgICBnX1ZfcGF0aF9pc1h0eXBlT2ZYR1R5cGVfUEFUSFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLnBhdGgpKSB9XSwgCi0gICAgZ19WX291dF9wYXRoX2lzWHR5cGVPZlhHVHlwZV9QQVRIWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5wYXRoKSkuY291bnQoKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX21hcmtvWF9vdXRfb3V0X3BhdGhfaXNYdHlwZU9mWEdUeXBlX1BBVEhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLnBhdGgpKSB9XSwgCi0gICAgZ19WX291dF90cmVlX2lzWHR5cGVPZlhHVHlwZV9UUkVFWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgpLnRyZWUoKS5pcyhQLnR5cGVPZihHVHlwZS50cmVlKSkuY291bnQoKSB9XSwgCi0gICAgZ19WX3doZXJlWHRyZWVfaXNYdHlwZU9mWEdUeXBlX1RSRUVYWFhfdmFsdWVzX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnRyZWUoKS5pcyhQLnR5cGVPZihHVHlwZS50cmVlKSkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWF9pc1h0eXBlT2ZYR1R5cGVfR1JBUEhYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgia25vd3MiKS5zdWJncmFwaCgic2ciKS5jYXAoInNnIikuaXMoUC50eXBlT2YoR1R5cGUuZ3JhcGgpKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWF9pc1hfbm90WHR5cGVPZlhHVHlwZV9HUkFQSFhYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgia25vd3MiKS5zdWJncmFwaCgic2ciKS5jYXAoInNnIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuZ3JhcGgpKSkuY291bnQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9QQVRIWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUucGF0aCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1RSRUVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS50cmVlKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfR1JBUEhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5ncmFwaCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1ZQUk9QRVJUWVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLnZwcm9wZXJ0eSkpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfZXFYYlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW5fKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoImEiLCBQLmVxKCJiIikpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfbmVxWGJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS5hcygiYSIpLm91dCgpLmluXygpLmhhcygiYWdlIikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLndoZXJlKCJhIiwgUC5uZXEoImIiKSkgfV0sIAotICAgIGdfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYl9oYXNYbmFtZV9tYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW5fKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoX18uYXMoImIiKS5oYXMoIm5hbWUiLCAibWFya28iKSkgfV0sIAotICAgIGdfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYV9vdXRYa25vd3NYX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW5fKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfd2hlcmVYYXNYYVhfbmFtZV9pc1hqb3NoWFhfaW5YY3JlYXRlZFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS53aGVyZShfXy5hcygiYSIpLnZhbHVlcygibmFtZSIpLmlzKCJqb3NoIikpLmluXygiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfam9zaF9wZXRlclhfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfbmFtZV93aGVyZVh3aXRoaW5YYVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgWyJqb3NoIiwgInBldGVyIl0pLlYodmlkMSkub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikud2hlcmUoUC53aXRoaW4oImEiKSkgfV0sIAotICAgIGdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYV9uZXFYYlhYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLmFzKCJiIikud2hlcmUoImEiLCBQLm5lcSgiYiIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hiWF93aGVyZVhhc1hiWF9vdXRYY3JlYXRlZFhfaGFzWG5hbWVfcmlwcGxlWFhfdmFsdWVzWGFnZV9uYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikuYXMoImIiKS53aGVyZShfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSkudmFsdWVzKCJhZ2UiLCAibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWGVxWGFYWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS53aGVyZShQLmVxKCJhIikpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWG5lcVhhWFhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikud2hlcmUoUC5uZXEoImEiKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9vdXRfYWdncmVnYXRlWHhYX291dF93aGVyZVhub3RYd2l0aGluWGFYWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5hZ2dyZWdhdGUoIngiKS5vdXQoKS53aGVyZShQLm5vdChQLndpdGhpbigieCIpKSkgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV9nX1ZYMlhYX1ZYMVhfb3V0X3doZXJlWG5lcVhhWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS53aGVyZShfXy5pZCgpLndoZXJlKFAubmVxKCJhIikpKSB9XSwgCi0gICAgZ19WWDFYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF93aGVyZVh3aXRob3V0WGVYWF9hZ2dyZWdhdGVYZVhfb3RoZXJWWF9lbWl0X3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5yZXBlYXQoX18uYm90aEUoImNyZWF0ZWQiKS53aGVyZShQLndpdGhvdXQoImUiKSkuYWdncmVnYXRlKCJlIikub3RoZXJWKCkpLmVtaXQoKS5wYXRoKCkgfV0sIAotICAgIGdfVl93aGVyZVhub3RYb3V0WGNyZWF0ZWRYWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkud2hlcmUoX18ubm90KF9fLm91dCgiY3JlYXRlZCIpKSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYYW5kWGFzWGFYX291dFhrbm93c1hfYXNYYlhfX29yWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYX19hc1hiWF9pblhrbm93c1hfY291bnRfaXNYbm90WGVxWDBYWFhYWF9zZWxlY3RYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLndoZXJlKF9fLmFuZChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5vcihfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSwgX18uYXMoImIiKS5pbl8oImtub3dzIikuY291bnQoKS5pcyhQLm5vdChQLmVxKDApKSkpKSkuc2VsZWN0KCJhIiwgImIiKSB9XSwgCi0gICAgZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkud2hlcmUoX18ub3V0KCJjcmVhdGVkIikuYW5kKCkub3V0KCJrbm93cyIpLm9yKCkuaW5fKCJrbm93cyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF93aGVyZVhhbmRYYXNYYlhfaW5fX25vdFhhc1hhWF9vdXRYY3JlYXRlZFhfaGFzWG5hbWVfcmlwcGxlWFhYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIikud2hlcmUoX18uYW5kKF9fLmFzKCJiIikuaW5fKCksIF9fLm5vdChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSkpKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX2luWGNyZWF0ZWRYX2FzWGNYX2JvdGhYa25vd3NYX2JvdGhYa25vd3NYX2FzWGRYX3doZXJlWGNfX25vdFhlcVhhWF9vclhlcVhkWFhYWF9zZWxlY3RYYV9iX2NfZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpLmJvdGgoImtub3dzIikuYm90aCgia25vd3MiKS5hcygiZCIpLndoZXJlKCJjIiwgUC5ub3QoUC5lcSgiYSIpLm9yKFAuZXEoImQiKSkpKS5zZWxlY3QoImEiLCAiYiIsICJjIiwgImQiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hiWF93aGVyZVhpbl9jb3VudF9pc1hlcVgzWFhfb3Jfd2hlcmVYb3V0WGNyZWF0ZWRYX2FuZF9oYXNYbGFiZWxfcGVyc29uWFhYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikud2hlcmUoX18uYXMoImIiKS5pbl8oKS5jb3VudCgpLmlzKFAuZXEoMykpLm9yKCkud2hlcmUoX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5hbmQoKS5hcygiYiIpLmhhcyhULmxhYmVsLCAicGVyc29uIikpKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFfZ3RYYlhYX2J5WGFnZVhfc2VsZWN0WGFfYlhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikuYXMoImIiKS53aGVyZSgiYSIsIFAuZ3QoImIiKSkuYnkoImFnZSIpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX3doZXJlWGFfZ3RYYlhfb3JYZXFYYlhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYd2VpZ2h0WF9zZWxlY3RYYV9jWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXRFKCJjcmVhdGVkIikuYXMoImIiKS5pblYoKS5hcygiYyIpLndoZXJlKCJhIiwgUC5ndCgiYiIpLm9yKFAuZXEoImIiKSkpLmJ5KCJhZ2UiKS5ieSgid2VpZ2h0IikuYnkoIndlaWdodCIpLnNlbGVjdCgiYSIsICJjIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX2luWGNyZWF0ZWRYX2FzWGRYX3doZXJlWGFfbHRYYlhfb3JYZ3RYY1hYX2FuZFhuZXFYZFhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYaW5YY3JlYXRlZFhfdmFsdWVzWGFnZVhfbWluWF9zZWxlY3RYYV9jX2RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dEUoImNyZWF0ZWQiKS5hcygiYiIpLmluVigpLmFzKCJjIikuaW5fKCJjcmVhdGVkIikuYXMoImQiKS53aGVyZSgiYSIsIFAubHQoImIiKS5vcihQLmd0KCJjIikpLmFuZChQLm5lcSgiZCIpKSkuYnkoImFnZSIpLmJ5KCJ3ZWlnaHQiKS5ieShfXy5pbl8oImNyZWF0ZWQiKS52YWx1ZXMoImFnZSIpLm1pbigpKS5zZWxlY3QoImEiLCAiYyIsICJkIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX2FzWGFYX291dF9oYXNYYWdlWF93aGVyZVhndFhhWFhfYnlYYWdlWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoKS5oYXMoImFnZSIpLndoZXJlKFAuZ3QoImEiKSkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYM1hfYXNYYVhfaW5fb3V0X2FzWGJYX3doZXJlWGFfZXFYYlhYX2J5WGFnZVhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQzfSkgeyByZXR1cm4gZy5WKHZpZDMpLmFzKCJhIikuaW5fKCkub3V0KCkuYXMoImIiKS53aGVyZSgiYSIsIFAuZXEoImIiKSkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WWDNYX2FzWGFYX2luX291dF9hc1hiWF93aGVyZVhhX2VxWGJYWF9ieVhhZ2VYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYodmlkMykuYXMoImEiKS5pbl8oKS5vdXQoKS5hcygiYiIpLndoZXJlKCJhIiwgUC5lcSgiYiIpKS5ieSgiYWdlIikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9hc1huWF93aGVyZVhvclhoYXNMYWJlbFhzb2Z0d2FyZVhfaGFzTGFiZWxYcGVyc29uWFhYX3NlbGVjdFhuWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoIm4iKS53aGVyZShfXy5vcihfXy5oYXNMYWJlbCgic29mdHdhcmUiKSwgX18uaGFzTGFiZWwoInBlcnNvbiIpKSkuc2VsZWN0KCJuIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWG5YX3doZXJlWG9yWHNlbGVjdFhuWF9oYXNMYWJlbFhzb2Z0d2FyZVhfc2VsZWN0WG5YX2hhc0xhYmVsWHBlcnNvblhYWF9zZWxlY3RYblhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJuIikud2hlcmUoX18ub3IoX18uc2VsZWN0KCJuIikuaGFzTGFiZWwoInNvZnR3YXJlIiksIF9fLnNlbGVjdCgibiIpLmhhc0xhYmVsKCJwZXJzb24iKSkpLnNlbGVjdCgibiIpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHhYX3doZXJlWGluRVhrbm93c1hfY291bnRfaXNYZ3RlWDFYWFhfc2VsZWN0WHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoIngiKS53aGVyZShfXy5pbkUoImtub3dzIikuY291bnQoKS5pcyhQLmd0ZSgxKSkpLnNlbGVjdCgieCIpIH1dLCAKLSAgICBnZXRfZ19WX3doZXJlWGFnZV9pc1hndF8zMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMzApKSkgfV0sIAotICAgIGdfVl93aGVyZVhsYWJlbF9pc1hzb2Z0d2FyZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKCJzb2Z0d2FyZSIpKSB9XSwgCi0gICAgZ19WX3doZXJlWGxhYmVsX2lzWHBlcnNvblhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKCJwZXJzb24iKSkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KCkpLlYoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5WF9WX291dF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLm91dCgpLmNvdW50KCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1Zfd2hlcmVYb3V0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLndoZXJlKF9fLm91dCgpKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5WF9WX29yZGVyX2J5WHZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3koKSkuVigpLm9yZGVyKCkuYnkoX18udmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYQ29ubmVjdGl2ZVN0cmF0ZWd5U3RyYXRlZ3lYX1ZfaGFzWG5hbWVfbWFya29YX29yX3doZXJlWGluWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBDb25uZWN0aXZlU3RyYXRlZ3koKSkuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKCkud2hlcmUoX18uaW5fKCJrbm93cyIpLmhhcygibmFtZSIsICJtYXJrbyIpKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hDb25uZWN0aXZlU3RyYXRlZ3lYX1ZfaGFzWG5hbWVfbWFya29YX29yX3doZXJlWGluWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKCkud2hlcmUoX18uaW5fKCJrbm93cyIpLmhhcygibmFtZSIsICJtYXJrbyIpKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hDb3VudFN0cmF0ZWd5WF9WX3doZXJlWG91dEVfY291bnRfaXNYMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBDb3VudFN0cmF0ZWd5KCkpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYQ291bnRTdHJhdGVneVhfVl93aGVyZVhvdXRFX2NvdW50X2lzWDBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhDb3VudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWEVhcmx5TGltaXRTdHJhdGVneVhfVl9vdXRfb3JkZXJfYnlYbmFtZVhfdmFsdWVNYXBfbGltaXRYM1hfc2VsZWN0WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBFYXJseUxpbWl0U3RyYXRlZ3koKSkuVigpLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdCgibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWEVhcmx5TGltaXRTdHJhdGVneVhfVl9vdXRfb3JkZXJfYnlYbmFtZVhfdmFsdWVNYXBfbGltaXRYM1hfc2VsZWN0WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdCgibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX3RydWVfbG9nV2FybmluZ19mYWxzZVhYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KHt0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwgbG9nV2FybmluZzogZmFsc2V9KSkuVigpLm91dCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX2ZhbHNlX2xvZ1dhcm5pbmdfZmFsc2VYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh7dGhyb3dFeGNlcHRpb246IGZhbHNlLCBsb2dXYXJuaW5nOiBmYWxzZX0pKS5WKCkub3V0KCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKS5vdXQoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hFbGVtZW50SWRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgRWxlbWVudElkU3RyYXRlZ3koKSkuVigpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWEVsZW1lbnRJZFN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKEVsZW1lbnRJZFN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYRmlsdGVyUmFua2luZ1N0cmF0ZWd5WF9WX291dF9vcmRlcl9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgRmlsdGVyUmFua2luZ1N0cmF0ZWd5KCkpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYRmlsdGVyUmFua2luZ1N0cmF0ZWd5WF9WX291dF9vcmRlcl9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYR3JhcGhGaWx0ZXJTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgR3JhcGhGaWx0ZXJTdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYR3JhcGhGaWx0ZXJTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lYRGV0YWNoZWRGYWN0b3J5WFhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koe2hhbHRlZFRyYXZlcnNlckZhY3Rvcnk6ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeSJ9KSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5WFJlZmVyZW5jZUZhY3RvcnlYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSh7aGFsdGVkVHJhdmVyc2VyRmFjdG9yeTogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3RvcnkifSkpLlYoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5WF9WX2lkZW50aXR5X291dDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3koKSkuVigpLmlkZW50aXR5KCkub3V0KCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lYX1ZfaWRlbnRpdHlfb3V0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KS5WKCkuaWRlbnRpdHkoKS5vdXQoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSkuVigpLm91dEUoKS5pblYoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dEUoKS5pblYoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hJbmxpbmVGaWx0ZXJTdHJhdGVneVhfVl9maWx0ZXJYaGFzWG5hbWVfbWFya29YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSW5saW5lRmlsdGVyU3RyYXRlZ3koKSkuVigpLmZpbHRlcihfXy5oYXMoIm5hbWUiLCAibWFya28iKSkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYSW5saW5lRmlsdGVyU3RyYXRlZ3lYX1ZfZmlsdGVyWGhhc1huYW1lX21hcmtvWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3kpLlYoKS5maWx0ZXIoX18uaGFzKCJuYW1lIiwgIm1hcmtvIikpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkuVigpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWExhenlCYXJyaWVyU3RyYXRlZ3lYX1Zfb3V0X2JvdGhFX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBMYXp5QmFycmllclN0cmF0ZWd5KCkpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9vdXRfYm90aEVfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hNYXRjaEFsZ29yaXRobVN0cmF0ZWd5WG1hdGNoQWxnb3JpdGhtX0NvdW50TWF0Y2hBbGdvcml0aG1YWF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KHttYXRjaEFsZ29yaXRobTogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwJENvdW50TWF0Y2hBbGdvcml0aG0ifSkpLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJjIikpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lYbWF0Y2hBbGdvcml0aG1fR3JlZWR5TWF0Y2hBbGdvcml0aG1YWF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KHttYXRjaEFsZ29yaXRobTogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwJEdyZWVkeU1hdGNoQWxnb3JpdGhtIn0pKS5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hNYXRjaEFsZ29yaXRobVN0cmF0ZWd5WF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJjIikpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWE1hdGNoUHJlZGljYXRlU3RyYXRlZ3lYX1ZfbWF0Y2hYYV9jcmVhdGVkX2xvcF9iX19iXzBjcmVhdGVkXzI5X2NYX3doZXJlWGNfcmVwZWF0WG91dFhfdGltZXNYMlhYX3NlbGVjdFhhX2JfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IE1hdGNoUHJlZGljYXRlU3RyYXRlZ3koKSkuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgImxvcCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKSkud2hlcmUoX18uYXMoImMiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoImEiLCAiYiIsICJjIikgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYTWF0Y2hQcmVkaWNhdGVTdHJhdGVneVhfVl9tYXRjaFhhX2NyZWF0ZWRfbG9wX2JfX2JfMGNyZWF0ZWRfMjlfY1hfd2hlcmVYY19yZXBlYXRYb3V0WF90aW1lc1gyWFhfc2VsZWN0WGFfYl9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5oYXMoIm5hbWUiLCAibG9wIikuYXMoImIiKSwgX18uYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5oYXMoImFnZSIsIDI5KS5hcygiYyIpKS53aGVyZShfXy5hcygiYyIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdCgiYSIsICJiIiwgImMiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpLlYoKSB9XSwgCi0gICAgZ19WX2Nvd29ya2VyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuZmlsdGVyKF9fLm91dEUoImNyZWF0ZWQiKSkuYWdncmVnYXRlKCJwIikuYXMoInAxIikudmFsdWVzKCJuYW1lIikuYXMoInAxbiIpLnNlbGVjdCgicCIpLnVuZm9sZCgpLndoZXJlKFAubmVxKCJwMSIpKS5hcygicDIiKS52YWx1ZXMoIm5hbWUiKS5hcygicDJuIikuc2VsZWN0KCJwMiIpLm91dCgiY3JlYXRlZCIpLmNob29zZShfXy5pbl8oImNyZWF0ZWQiKS53aGVyZShQLmVxKCJwMSIpKSwgX18udmFsdWVzKCJuYW1lIiksIF9fLmNvbnN0YW50KFtdKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoInAxbiIpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdCgicDJuIikpLmJ5KF9fLnVuZm9sZCgpLmZvbGQoKS5wcm9qZWN0KCJudW1Db0NyZWF0ZWQiLCAiY29DcmVhdGVkIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkgfV0sIAotICAgIGdfVl9jb3dvcmtlcl93aXRoX21pZFY6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5maWx0ZXIoX18ub3V0RSgiY3JlYXRlZCIpKS5hcygicDEiKS5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLndoZXJlKFAubmVxKCJwMSIpKS5maWx0ZXIoX18ub3V0RSgiY3JlYXRlZCIpKS5hcygicDIiKS5tYXAoX18ub3V0KCJjcmVhdGVkIikud2hlcmUoX18uaW5fKCJjcmVhdGVkIikuYXMoInAxIikpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoInAxIikuYnkoIm5hbWUiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoInAyIikuYnkoIm5hbWUiKSkuYnkoX18ucHJvamVjdCgibnVtQ29DcmVhdGVkIiwgImNvQ3JlYXRlZCIpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkuYnkoKSkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWE9wdGlvbnNTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KCkpLlYoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hPcHRpb25zU3RyYXRlZ3lYbXlWYXJfbXlWYWx1ZVhYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneSh7bXlWYXI6ICJteVZhbHVlIn0pKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWE9yZGVyTGltaXRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgT3JkZXJMaW1pdFN0cmF0ZWd5KCkpLlYoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hPcmRlckxpbWl0U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIiwgImIiXX0pKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJjIl19KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9ib3RoRV93ZWlnaHQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkuVigpLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfYm90aEVfd2VpZ2h0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYiJdfSkpLlYoKS5ib3RoRSgpLnZhbHVlcygid2VpZ2h0IikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1ZfYm90aEVfZGVkdXBfd2VpZ2h0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSIsICJiIl19KSkuVigpLmJvdGhFKCkuZGVkdXAoKS52YWx1ZXMoIndlaWdodCIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9jWFhfVl9ib3RoRV93ZWlnaHQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJjIl19KSkuVigpLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX1ZfYm90aF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2JYWF9WX2JvdGhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIndlaWdodCIsIDIuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImIiXX0pKS5WKCkuYm90aCgpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX2JvdGhfZGVkdXBfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIndlaWdodCIsIDIuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImEiLCAiYiJdfSkpLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfY1hYX1ZfYm90aF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYyJdfSkpLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX291dF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLlYoKS5vdXQoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfaW5fbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIndlaWdodCIsIDIuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImIiXX0pKS5WKCkuaW5fKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1Zfb3V0X25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIiwgImIiXX0pKS5WKCkub3V0KCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX291dF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYyJdfSkpLlYoKS5vdXQoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2FsaWNlWF9hZGRYc2VsZlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkRSgic2VsZiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiX3BhcnRpdGlvbiIsICJhIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcygiX3BhcnRpdGlvbiIsICJhIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFh6ZXJvWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkWHNlbGZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImEiXX0pKS5pbmplY3QoMCkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hZGRFKCJzZWxmIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VWOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLm1lcmdlVih4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhfbWVyZ2VWOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLmluamVjdCgwKS5tZXJnZVYoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiX3BhcnRpdGlvbiIsICJhIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VFOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImEiXX0pKS5tZXJnZUUoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJrbm93cyIsICJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhtZXJnZUU6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLmluamVjdCgwKS5tZXJnZUUoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJrbm93cyIsICJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfYWxpY2VYX29wdGlvblhvbk1hdGNoX25hbWVfYm9iWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJib2IiKS5oYXMoIl9wYXJ0aXRpb24iLCAiYSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VWX29wdGlvblhvbkNyZWF0ZVg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiYWxpY2UiKS5oYXMoImFnZSIsIDM1KS5oYXMoIl9wYXJ0aXRpb24iLCAiYSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfaW5qZWN0WDBYX19tZXJnZVZfb3B0aW9uWG9uQ3JlYXRlWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiYWxpY2UiKS5oYXMoImFnZSIsIDM1KS5oYXMoIl9wYXJ0aXRpb24iLCAiYSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFBhdGhQcm9jZXNzb3JTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGF0aFByb2Nlc3NvclN0cmF0ZWd5KCkpLlYoKS5hcygiYSIpLnNlbGVjdCgiYSIpLmJ5KF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hQYXRoUHJvY2Vzc29yU3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGF0aFJldHJhY3Rpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGF0aFJldHJhY3Rpb25TdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUGF0aFJldHJhY3Rpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfVl9zaG9ydGVzdHBhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJ2IikuYm90aCgpLmFzKCJ2IikucHJvamVjdCgic3JjIiwgInRndCIsICJwIikuYnkoX18uc2VsZWN0KFBvcC5maXJzdCwgInYiKSkuYnkoX18uc2VsZWN0KFBvcC5sYXN0LCAidiIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgInYiKSkuYXMoInRyaXBsZSIpLmdyb3VwKCJ4IikuYnkoX18uc2VsZWN0KCJzcmMiLCAidGd0IikpLmJ5KF9fLnNlbGVjdCgicCIpLmZvbGQoKSkuc2VsZWN0KCJ0Z3QiKS5iYXJyaWVyKCkucmVwZWF0KF9fLmJvdGgoKS5hcygidiIpLnByb2plY3QoInNyYyIsICJ0Z3QiLCAicCIpLmJ5KF9fLnNlbGVjdChQb3AuZmlyc3QsICJ2IikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgInYiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsICJ2IikpLmFzKCJ0IikuZmlsdGVyKF9fLnNlbGVjdChQb3AuYWxsLCAicCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcygibCIpLnNlbGVjdChQb3AubGFzdCwgInQiKS5zZWxlY3QoUG9wLmFsbCwgInAiKS5kZWR1cChTY29wZS5sb2NhbCkuY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAuZXEoImwiKSkpLndoZXJlKCJzcmMiLCBQLm5lcSgidGd0IikpLnNlbGVjdChQb3AubGFzdCwgInQiKS5ub3QoX18uc2VsZWN0KFBvcC5hbGwsICJwIikuYXMoInAiKS5jb3VudChTY29wZS5sb2NhbCkuYXMoImwiKS5zZWxlY3QoUG9wLmFsbCwgIngiKS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKCJ0IikpLmJ5KF9fLnNlbGVjdCgic3JjIiwgInRndCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdCgibCIpKSwgX18ud2hlcmUoUC5lcSgicCIpKSkpKS5iYXJyaWVyKCkuZ3JvdXAoIngiKS5ieShfXy5zZWxlY3QoInNyYyIsICJ0Z3QiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsICJwIikuZm9sZCgpKS5zZWxlY3QoInRndCIpLmJhcnJpZXIoKSkuY2FwKCJ4Iikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnVuZm9sZCgpLm1hcChfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfcGxheWxpc3RfcGF0aHM6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneSh7c2VlZDogOTk5OTl9KSkuVigpLmhhcygibmFtZSIsICJCb2JfRHlsYW4iKS5pbl8oInN1bmdCeSIpLmFzKCJhIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb21fKCJhIikpLnVudGlsKF9fLm91dCgid3JpdHRlbkJ5IikuaGFzKCJuYW1lIiwgIkpvaG5ueV9DYXNoIikpLmxpbWl0KDEpLmFzKCJiIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoImMiKS5zaW1wbGVQYXRoKCkuZnJvbV8oImIiKS50bygiYyIpKS51bnRpbChfXy5vdXQoInN1bmdCeSIpLmhhcygibmFtZSIsICJHcmF0ZWZ1bF9EZWFkIikpLmxpbWl0KDEpLnBhdGgoKS5mcm9tXygiYSIpLnVuZm9sZCgpLnByb2plY3QoInNvbmciLCAiYXJ0aXN0cyIpLmJ5KCJuYW1lIikuYnkoX18uY29hbGVzY2UoX18ub3V0KCJzdW5nQnkiLCAid3JpdHRlbkJ5IikuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSwgX18uY29uc3RhbnQoIlVua25vd24iKSkuZm9sZCgpKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9ncm91cF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuZ3JvdXAoKS5ieSgiYWdlIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9ncm91cF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieSgiYWdlIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9maWxlU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2ZpbGVTdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUHJvZmlsZVN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1Zfb3V0WGtub3dzWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5vdXQoImtub3dzIikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfYWRkVlhwZXJzb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLmFkZFYoInBlcnNvbiIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9mcm9tWFZYMVhYX3RvWFZYMlhYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLmFkZEUoImxpbmsiKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDIpKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9WX2FkZFZYcGVyc29uWF9mcm9tWFZYMVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5hZGRFKCJsaW5rIikuZnJvbV8oX18uVih2aWQxKSkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9wcm9wZXJ0eVhuYW1lX2pvc2hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfRV9wcm9wZXJ0eVh3ZWlnaHRfMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuRSgpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwKSB9XSwgCi0gICAgZ19WX2NsYXNzaWNfcmVjb21tZW5kYXRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEQVJLIFNUQVIiKS5hcygiYSIpLm91dCgiZm9sbG93ZWRCeSIpLmFnZ3JlZ2F0ZSgic3Rhc2giKS5pbl8oImZvbGxvd2VkQnkiKS53aGVyZShQLm5lcSgiYSIpLmFuZChQLm5vdChQLndpdGhpbigic3Rhc2giKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdCgieCIsICJ5IiwgInoiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygibmFtZSIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygicGVyZm9ybWFuY2VzIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoInoiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KCJ5IiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKCJtIikpLnNlbGVjdCgieCIpIH1dLCAKLSAgICBnX1ZfY2xhc3NpY19yZWNvbW1lbmRhdGlvbl9yYW5rZWQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEQVJLIFNUQVIiKS5hcygiYSIpLm91dCgiZm9sbG93ZWRCeSIpLmFnZ3JlZ2F0ZSgic3Rhc2giKS5pbl8oImZvbGxvd2VkQnkiKS53aGVyZShQLm5lcSgiYSIpLmFuZChQLm5vdChQLndpdGhpbigic3Rhc2giKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdCgieCIsICJ5IiwgInoiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygibmFtZSIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygicGVyZm9ybWFuY2VzIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoInoiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KCJ5IiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKCJtIikpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KCkpLlYoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhvdXRYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYb3V0X2hhc1huYW1lX25vdFN0YXJ0aW5nV2l0aFh6WFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLm91dCgpLmhhcygibmFtZSIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aCgieiIpKSkudGltZXMoMikgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dF9oYXNYbmFtZV9ub3RTdGFydGluZ1dpdGhYelhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoIm5hbWUiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoInoiKSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhpbl9oYXNYYWdlX2d0WDIwWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpLmhhcygiYWdlIiwgUC5ndCgyMCkpKS50aW1lcygyKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5faGFzWGFnZV9ndFgyMFhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbl8oKS5oYXMoImFnZSIsIFAuZ3QoMjApKSkudGltZXMoMikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKCJhZ2UiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2hhc1hhZ2VfbHRYMzBYWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcygiYWdlIiwgUC5sdCgzMCkpKS50aW1lcygyKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aEVfb3RoZXJWX2hhc1hhZ2VfbHRYMzBYWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uYm90aEUoKS5vdGhlclYoKS5oYXMoImFnZSIsIFAubHQoMzApKSkudGltZXMoMikgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhFX290aGVyVl9oYXNYYWdlX2x0WDMwWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhFKCkub3RoZXJWKCkuaGFzKCJhZ2UiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2xpbWl0WDFYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2xpbWl0WDFYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVYX3JlcGVhdFhib3RoX29yZGVyX2J5WG5hbWVYX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfbGltaXRYMTBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkub3JkZXIoKS5ieSgibmFtZSIpLnJlcGVhdChfXy5ib3RoKCkub3JkZXIoKS5ieSgibmFtZSIpLmFnZ3JlZ2F0ZSgieCIpKS50aW1lcygyKS5saW1pdCgxMCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYbmFtZVhfcmVwZWF0WGJvdGhfb3JkZXJfYnlYbmFtZVhfYWdncmVnYXRlWHhYWF90aW1lc1gyWF9saW1pdFgxMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikucmVwZWF0KF9fLmJvdGgoKS5vcmRlcigpLmJ5KCJuYW1lIikuYWdncmVnYXRlKCJ4IikpLnRpbWVzKDIpLmxpbWl0KDEwKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aF9zYW1wbGVYMVhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5zYW1wbGUoMSkpLnRpbWVzKDIpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX3NhbXBsZVgxWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYdGhyb3dFeGNlcHRpb25fdHJ1ZVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhpZF8xMjNYX3Byb3BlcnR5WG5hbWVfbWFya29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh7dGhyb3dFeGNlcHRpb246IHRydWV9KSkuYWRkVigicGVyc29uIikucHJvcGVydHkoImlkIiwgMTIzKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX3RydWVYWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYYWdlXzI5WF9wcm9wZXJ0eVhuYW1lX21hcmtvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3koe3Rocm93RXhjZXB0aW9uOiB0cnVlLCBrZXlzOiBuZXcgU2V0KFsiYWdlIl0pfSkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJhZ2UiLCAyOSkucHJvcGVydHkoIm5hbWUiLCAibWFya28iKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGlkXzEyM1hfcHJvcGVydHlYbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJpZCIsIDEyMykucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS52YWx1ZXMoKSB9XSwgCi0gICAgZ193aXRob3V0U3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKX0pKS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKX0pKS5FKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX291dEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkub3V0RSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9pbkU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkuaW5FKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSl9KSkuVih2aWQ0KS5vdXQoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQVhYX1ZYNFhfaW46IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkuaW5fKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX2JvdGg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkuYm90aCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9ib3RoRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSl9KSkuVih2aWQ0KS5ib3RoRSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9FWDExWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLkUoZWlkMTEpLmJvdGhWKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9FWDEyWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMn0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLkUoZWlkMTIpLmJvdGhWKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJrbm93cyIpLCBfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKS5vdXRWKCkuaGFzKCJuYW1lIiwgIm1hcmtvIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJrbm93cyIpLCBfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKS5vdXRWKCkuaGFzKCJuYW1lIiwgIm1hcmtvIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDFYX291dEU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImtub3dzIiksIF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkMSkub3V0RSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfVlgxWF9vdXQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImtub3dzIiksIF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkMSkub3V0KCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDFYX291dFhjcmVhdGVkWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQxKS5vdXQoImtub3dzIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dFhjcmVhdGVkWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXQoImNyZWF0ZWQiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfb3V0RTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXRFKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXQoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfYm90aEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImtub3dzIiksIF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuYm90aEUoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfYm90aDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5ib3RoKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dFZfb3V0RTogW2Z1bmN0aW9uKHtnLCBlaWQ4fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRShlaWQ4KS5vdXRWKCkub3V0RSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5Ya25vd3NYX2hhc1huYW1lX21hcmtvWFhYX1ZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmluXygia25vd3MiKS5oYXMoIm5hbWUiLCAibWFya28iKX0pKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19pbl9oYXNYbmFtZV9tYXJrb1hYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5pbl8oKS5oYXMoIm5hbWUiLCAibWFya28iKX0pKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19pblhrbm93c1hfd2hlcmVYb3V0WGNyZWF0ZWRYX2hhc1huYW1lX2xvcFhYWFhfVl9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaW5fKCJrbm93cyIpLndoZXJlKF9fLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSl9KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5faGFzWG5hbWVfbWFya29YX291dFhjcmVhdGVkWF9oYXNYbmFtZV9sb3BYWFhYX1ZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmluXygpLndoZXJlKF9fLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSl9KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfb3JYYm90aF9oYXNYbmFtZV9tYXJrb1hfaGFzWG5hbWVfbWFya29YWFhYX1ZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLm9yKF9fLmJvdGgoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJuYW1lIiwgIm1hcmtvIikpfSkpLlYoKS53aGVyZShfXy5ib3RoRSgpLmNvdW50KCkuaXMoUC5uZXEoMCkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9vdXRFOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXRFKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX2luRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuaW5FKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkub3V0KCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX2luOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5pbl8oKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1ZYNFhfYm90aDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuYm90aCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9ib3RoRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuYm90aEUoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1ZYNFhfbG9jYWxYYm90aEVfbGltaXRYMVhYOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX0VYMTFYX2JvdGhWOiBbZnVuY3Rpb24oe2csIGVpZDExfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLkUoZWlkMTEpLmJvdGhWKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9FWDEyWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMn0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKGVpZDEyKS5ib3RoVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfRVg5WF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQ5fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLkUoZWlkOSkuYm90aFYoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHZlcnRpY2VzX2hhc1huYW1lX3dpdGhpblhyaXBwbGVfam9zaF9tYXJrb1hYWF9WX2FzWGFYX291dF9pbl9hc1hiWF9kZWR1cFhhX2JYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigicmlwcGxlIiwgImpvc2giLCAibWFya28iKSl9KSkuVigpLmFzKCJhIikub3V0KCkuaW5fKCkuYXMoImIiKS5kZWR1cCgiYSIsICJiIikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0ZXhQcm9wZXJ0aWVzX2hhc1hzdGFydFRpbWVfZ3RYMjAwNVhYWFhfVl9wcm9wZXJ0aWVzWGxvY2F0aW9uWF92YWx1ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKX0pKS5WKCkucHJvcGVydGllcygibG9jYXRpb24iKS52YWx1ZSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfdmFsdWVzWGxvY2F0aW9uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKX0pKS5WKCkudmFsdWVzKCJsb2NhdGlvbiIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfYXNYYVhfcHJvcGVydGllc1hsb2NhdGlvblhfYXNYYlhfc2VsZWN0WGFYX291dEVfcHJvcGVydGllc19zZWxlY3RYYlhfdmFsdWVfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRleFByb3BlcnRpZXM6IF9fLmhhcygic3RhcnRUaW1lIiwgUC5ndCgyMDA1KSl9KSkuVigpLmFzKCJhIikucHJvcGVydGllcygibG9jYXRpb24iKS5hcygiYiIpLnNlbGVjdCgiYSIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KCJiIikudmFsdWUoKS5kZWR1cCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfYXNYYVhfdmFsdWVzWGxvY2F0aW9uWF9hc1hiWF9zZWxlY3RYYVhfb3V0RV9wcm9wZXJ0aWVzX3NlbGVjdFhiWF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKX0pKS5WKCkuYXMoImEiKS52YWx1ZXMoImxvY2F0aW9uIikuYXMoImIiKS5zZWxlY3QoImEiKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdCgiYiIpLmRlZHVwKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19oYXNYbmFtZV9uZXFYc3RlcGhlblhYX3ZlcnRleFByb3BlcnRpZXNfaGFzWHN0YXJ0VGltZV9ndFgyMDA1WFhYWF9WX3Byb3BlcnRpZXNYbG9jYXRpb25YX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoInN0YXJ0VGltZSIsIFAuZ3QoMjAwNSkpLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC5uZXEoInN0ZXBoZW4iKSl9KSkuVigpLnByb3BlcnRpZXMoImxvY2F0aW9uIikudmFsdWUoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHZlcnRpY2VzX2hhc1huYW1lX25lcVhzdGVwaGVuWFhfdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfdmFsdWVzWGxvY2F0aW9uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAubmVxKCJzdGVwaGVuIikpfSkpLlYoKS52YWx1ZXMoImxvY2F0aW9uIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhlZGdlc19oYXNMYWJlbFh1c2VzWF9oYXNYc2tpbGxfNVhYWF9WX291dEVfdmFsdWVNYXBfc2VsZWN0WHZhbHVlc1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18uaGFzTGFiZWwoInVzZXMiKS5oYXMoInNraWxsIiwgNSl9KSkuVigpLm91dEUoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYY2hlY2tBZGphY2VudFZlcnRpY2VzX3N1YmdyYXBoRFhYX0U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogdHJ1ZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLkUoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1ZYNFhfb3V0RTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkub3V0RSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9pbkU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLmluRSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9vdXQ6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLm91dCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9pbjogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuaW5fKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9WWDRYX2JvdGg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLmJvdGgoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1ZYNFhfYm90aEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLmJvdGhFKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9WWDRYX2xvY2FsWGJvdGhFX2xpbWl0WDFYWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9FWDExWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKGVpZDExKS5ib3RoVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfRVgxMlhfYm90aFY6IFtmdW5jdGlvbih7ZywgZWlkMTJ9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRShlaWQxMikuYm90aFYoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX0VYOVhfYm90aFY6IFtmdW5jdGlvbih7ZywgZWlkOX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKGVpZDkpLmJvdGhWKCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhjaGVja0FkamFjZW50VmVydGljZXNfc3ViZ3JhcGhEWFhfRVg5WF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQ5fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRShlaWQ5KS5ib3RoVigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdXNlTWFwU3RlcHNJbkZpbHRlclhfRTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLmxhYmVsKCkuaXMoUC5lcSgiY3JlYXRlZCIpKSwgdmVydGljZXM6IF9fLnZhbHVlcygibmFtZSIpLmlzKFAud2l0aGluKCJsb3AiLCAiam9zaCIpKSwgY2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlfSkpLkUoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneVhfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSgpKS53aXRob3V0U3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneV9WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCksIG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpIH1dLCAKLSAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KS53aXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkgfV0sIAotICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIH1dLCAKLSAgICBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hZGRFKCJjcmVhdGVkQnkiKS50bygiYSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaW5FKCkgfV0sIAotICAgIGdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYX3Byb3BlcnR5WHdlaWdodF8yWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hZGRFKCJjcmVhdGVkQnkiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5pbkUoKS5oYXMoIndlaWdodCIsIDIuMCkgfV0sIAotICAgIGdfVl9vdXRFX3Byb3BlcnR5WHdlaWdodF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkucHJvcGVydHkoIndlaWdodCIsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygid2VpZ2h0IikgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYeFhfYXNYYVhfc2VsZWN0WHhYX3VuZm9sZF9hZGRFWGV4aXN0c1dpdGhYX3RvWGFYX3Byb3BlcnR5WHRpbWVfbm93WDogW2Z1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5hcygiYSIpLnNlbGVjdCgieCIpLnVuZm9sZCgpLmFkZEUoImV4aXN0c1dpdGgiKS50bygiYSIpLnByb3BlcnR5KCJ0aW1lIiwgIm5vdyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMikuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMikuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMykuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMykuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ1KS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ1KS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9hc1hiWF9hZGRFWGNvZGV2ZWxvcGVyWF9mcm9tWGFYX3RvWGJYX3Byb3BlcnR5WHllYXJfMjAwOVg6IFtmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS53aGVyZShQLm5lcSgiYSIpKS5hcygiYiIpLmFkZEUoImNvZGV2ZWxvcGVyIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJ5ZWFyIiwgMjAwOSkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDQsIHZpZDZ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmluRSgiY29kZXZlbG9wZXIiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJjb2RldmVsb3BlciIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmJvdGhFKCJjb2RldmVsb3BlciIpLmhhcygieWVhciIsIDIwMDkpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDIpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDQsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5pbkUoImNvZGV2ZWxvcGVyIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDQsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkub3V0RSgiY29kZXZlbG9wZXIiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSgiY29kZXZlbG9wZXIiKS5oYXMoInllYXIiLCAyMDA5KSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmluRSgiY29kZXZlbG9wZXIiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJjb2RldmVsb3BlciIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmJvdGhFKCJjb2RldmVsb3BlciIpLmhhcygieWVhciIsIDIwMDkpIH1dLCAKLSAgICBnX1ZfYXNYYVhfaW5YY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX2Zyb21YYVhfcHJvcGVydHlYeWVhcl8yMDA5WF9wcm9wZXJ0eVhhY2xfcHVibGljWDogW2Z1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmluXygiY3JlYXRlZCIpLmFkZEUoImNyZWF0ZWRCeSIpLmZyb21fKCJhIikucHJvcGVydHkoInllYXIiLCAyMDA5KS5wcm9wZXJ0eSgiYWNsIiwgInB1YmxpYyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5pbkUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmJvdGhFKCJjcmVhdGVkQnkiKS5oYXMoInllYXIiLCAyMDA5KS5oYXMoImFjbCIsICJwdWJsaWMiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDMpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMykuaW5FKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5vdXRFKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5ib3RoRSgiY3JlYXRlZEJ5IikuaGFzKCJ5ZWFyIiwgMjAwOSkuaGFzKCJhY2wiLCAicHVibGljIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5pbkUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDQpLm91dEUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDQpLmJvdGhFKCJjcmVhdGVkQnkiKS5oYXMoInllYXIiLCAyMDA5KS5oYXMoImFjbCIsICJwdWJsaWMiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ1KS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDUpLmluRSgiY3JlYXRlZEJ5IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkub3V0RSgiY3JlYXRlZEJ5IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuYm90aEUoImNyZWF0ZWRCeSIpLmhhcygieWVhciIsIDIwMDkpLmhhcygiYWNsIiwgInB1YmxpYyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikuaW5FKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5ib3RoRSgiY3JlYXRlZEJ5IikuaGFzKCJ5ZWFyIiwgMjAwOSkuaGFzKCJhY2wiLCAicHVibGljIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYl9iWF9WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzVYOiBbZnVuY3Rpb24oe2csIHZpZDEsIHZpZDZ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5hZGRFKCJrbm93cyIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDZ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmluRSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmJvdGhFKCJrbm93cyIpLmhhcygid2VpZ2h0IiwgMC41KSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmluRSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmJvdGhFKCJrbm93cyIpLmhhcygid2VpZ2h0IiwgMC41KSB9XSwgCi0gICAgZ19hZGRWX2FzWGZpcnN0WF9yZXBlYXRYYWRkRVhuZXh0WF90b1hhZGRWWF9pblZYX3RpbWVzWDVYX2FkZEVYbmV4dFhfdG9Yc2VsZWN0WGZpcnN0WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLmFzKCJmaXJzdCIpLnJlcGVhdChfXy5hZGRFKCJuZXh0IikudG8oX18uYWRkVigpKS5pblYoKSkudGltZXMoNSkuYWRkRSgibmV4dCIpLnRvKF9fLnNlbGVjdCgiZmlyc3QiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoIm5leHQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxpbWl0KDEpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5saW1pdCgxKS5pbkUoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxpbWl0KDEpLm91dEUoKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX21hcmtvWF9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hZGRFWHNlbGVjdFhiWF9sYWJlbFhfdG9YYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5vdXRFKCJjcmVhdGVkIikuYXMoImIiKS5pblYoKS5hZGRFKF9fLnNlbGVjdCgiYiIpLmxhYmVsKCkpLnRvKCJhIikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmluRSgiY3JlYXRlZCIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmluXygiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJjcmVhdGVkIikgfV0sIAotICAgIGdfYWRkRVhWX291dEVfbGFiZWxfZ3JvdXBDb3VudF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzX2Rlc2NYX3NlbGVjdFhrZXlzWF91bmZvbGRfbGltaXRYMVhYX2Zyb21YVl9oYXNYbmFtZV92YWRhc1hYX3RvWFZfaGFzWG5hbWVfbG9wWFg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5hZGRFKF9fLlYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkubGltaXQoMSkpLmZyb21fKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkudG8oX18uVigpLmhhcygibmFtZSIsICJsb3AiKSkgfSwgZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLmluRSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5vdXRFKCJjcmVhdGVkIikgfSwgZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgImxvcCIpIH1dLCAKLSAgICBnX2FkZEVYa25vd3NYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDYpKS5wcm9wZXJ0eSgid2VpZ2h0IiwgeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDYsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJrbm93cyIpLmhhcygibmFtZSIsICJwZXRlciIpIH1dLCAKLSAgICBnX2FkZEVYa25vd3N2YXJYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLmFkZEUoeHgxKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDYpKS5wcm9wZXJ0eSgid2VpZ2h0IiwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJrbm93cyIpLmhhcygibmFtZSIsICJwZXRlciIpIH1dLCAKLSAgICBnX1ZYYVhfYWRkRVhrbm93c1hfdG9YYlhfcHJvcGVydHlYd2VpZ2h0XzBfMVg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hZGRFKCJrbm93cyIpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KCJ3ZWlnaHQiLCB4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDYsIHZpZDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInBldGVyIikgfV0sIAotICAgIGdfYWRkRVhrbm93c1hwcm9wZXJ0eVh3ZWlnaHRfbnVsbFhmcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgbnVsbCkuZnJvbV8oX18uVigpLmhhcygibmFtZSIsICJtYXJrbyIpKS50byhfXy5WKCkuaGFzKCJuYW1lIiwgInZhZGFzIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJrbm93cyIsICJ3ZWlnaHQiLCBudWxsKSB9XSwgCi0gICAgZ19hZGRFWGtub3dzdmFyWHByb3BlcnR5WHdlaWdodF9udWxsWGZyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkRSh4eDEpLnByb3BlcnR5KCJ3ZWlnaHQiLCBudWxsKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikpLnRvKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhcygia25vd3MiLCAid2VpZ2h0IiwgbnVsbCkgfV0sIAotICAgIGdfdW5pb25YYWRkRVhrbm93c3Zhclhwcm9wZXJ0eVh3ZWlnaHRfbnVsbFhmcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy51bmlvbihfXy5hZGRFKHh4MSkucHJvcGVydHkoIndlaWdodCIsIDEpLmZyb21fKF9fLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKSkudG8oX18uVigpLmhhcygibmFtZSIsICJ2YWRhcyIpKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhcygia25vd3MiLCAid2VpZ2h0IiwgMSkgfV0sIAotICAgIGdfYWRkRVhlZGdlWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfd2l0aFhrZXlfdmFsdWVYX3ZhbHVlc1h3ZWlnaHRfa2V5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRFKCJlZGdlIikuZnJvbV8oX18uVigpLmhhcygibmFtZSIsICJtYXJrbyIpKS50byhfXy5WKCkuaGFzKCJuYW1lIiwgInZhZGFzIikpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLndpdGhfKCJrZXkiLCAidmFsdWUiKS52YWx1ZXMoIndlaWdodCIsICJrZXkiKSB9XSwgCi0gICAgZ19hZGRFWGtub3dzWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfYWRkRVhrbm93c1hfZnJvbVhWX2hhc1huYW1lX21hcmtvWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikpLnRvKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikpIH1dLCAKLSAgICBnX1ZYMVhfYWRkVlhhbmltYWxYX3Byb3BlcnR5WGFnZV9zZWxlY3RYYVhfYnlYYWdlWFhfcHJvcGVydHlYbmFtZV9wdXBweVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikuYWRkVigiYW5pbWFsIikucHJvcGVydHkoImFnZSIsIF9fLnNlbGVjdCgiYSIpLmJ5KCJhZ2UiKSkucHJvcGVydHkoIm5hbWUiLCAicHVwcHkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVigpLmhhcygiYW5pbWFsIiwgImFnZSIsIDI5KSB9XSwgCi0gICAgZ19WX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhhZ2VfMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWRkVigiYW5pbWFsIikucHJvcGVydHkoImFnZSIsIDApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhbmltYWwiLCAiYWdlIiwgMCkgfV0sIAotICAgIGdfVl9hZGRWWGFuaW1hbHZhclhfcHJvcGVydHlYYWdlXzB2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYWRkVih4eDEpLnByb3BlcnR5KCJhZ2UiLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygiYW5pbWFsIiwgImFnZSIsIDApIH1dLCAKLSAgICBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX3N0ZXBoZW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAotICAgIGdfYWRkVlhwZXJzb252YXJYX3Byb3BlcnR5WG5hbWVfc3RlcGhlbnZhclg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoeHgxKS5wcm9wZXJ0eSgibmFtZSIsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3Byb3BlcnR5WG5hbWVfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAibmFtZSIsICJzdGVwaGVuIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAibmFtZSIsICJzdGVwaGVubSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW5tIikgfV0sIAotICAgIGdldF9nX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVubSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVubSIpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXMoInNpbmNlIiwgMjAxMCkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydHlYZnJpZW5kV2VpZ2h0X291dEVYa25vd3NYX3dlaWdodF9zdW1fX2FjbF9wcml2YXRlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IiwgX18ub3V0RSgia25vd3MiKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpLCAiYWNsIiwgInByaXZhdGUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImZyaWVuZFdlaWdodCIsIDEuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiZnJpZW5kV2VpZ2h0IikuaGFzKCJhY2wiLCAicHJpdmF0ZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoImZyaWVuZFdlaWdodCIpLmNvdW50KCkgfV0sIAotICAgIGdfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfbWF0ZW9YX3Byb3BlcnR5WG5hbWVfZ2F0ZW9YX3Byb3BlcnR5WG5hbWVfY2F0ZW9YX3Byb3BlcnR5WGFnZV81WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJuYW1lIiwgIm1hdGVvIikucHJvcGVydHkoIm5hbWUiLCAiZ2F0ZW8iKS5wcm9wZXJ0eSgibmFtZSIsICJjYXRlbyIpLnByb3BlcnR5KCJhZ2UiLCA1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAibWF0ZW8iKS5oYXMoIm5hbWUiLCAiZ2F0ZW8iKS5oYXMoIm5hbWUiLCAiY2F0ZW8iKS5oYXMoImFnZSIsIDUpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfbWFya29YX2FkZFZfcHJvcGVydHlYbmFtZV9zZWxlY3RYYVhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsICJtYXJrbyIpLmFkZFYoKS5wcm9wZXJ0eSgibmFtZSIsIF9fLnNlbGVjdCgiYSIpKS52YWx1ZXMoIm5hbWUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpIH1dLCAKLSAgICBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJzdGVwaGVuIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAic3RlcGhlbm0iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJzdGVwaGVubSIpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXMoInNpbmNlIiwgMjAxMCkgfV0sIAotICAgIGdfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV92YWx1ZXNYbmFtZVhYX3Byb3BlcnR5WG5hbWVfYW5fYW5pbWFsWF9wcm9wZXJ0eVh2YWx1ZXNYbmFtZVhfbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJuYW1lIiwgX18udmFsdWVzKCJuYW1lIikpLnByb3BlcnR5KCJuYW1lIiwgImFuIGFuaW1hbCIpLnByb3BlcnR5KF9fLnZhbHVlcygibmFtZSIpLCBfXy5sYWJlbCgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJtYXJrbyIsICJwZXJzb24iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAidmFkYXMiKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJ2YWRhcyIsICJwZXJzb24iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAibG9wIikuaGFzKCJuYW1lIiwgImFuIGFuaW1hbCIpLmhhcygibG9wIiwgInNvZnR3YXJlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgiYW5pbWFsIikuaGFzKCJuYW1lIiwgImpvc2giKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJqb3NoIiwgInBlcnNvbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoImFuaW1hbCIpLmhhcygibmFtZSIsICJyaXBwbGUiKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJyaXBwbGUiLCAic29mdHdhcmUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJwZXRlciIsICJwZXJzb24iKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhX3Rlc3RYX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3Byb3BlcnR5WHRlbXBfc2VsZWN0WGFYWF92YWx1ZU1hcFhuYW1lX3RlbXBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAidGVzdCIpLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5wcm9wZXJ0eSgidGVtcCIsIF9fLnNlbGVjdCgiYSIpKS52YWx1ZU1hcCgibmFtZSIsICJ0ZW1wIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV9uYW1lWF9hZGRWX3Byb3BlcnR5WHNlbGVjdFhhWF9tYXJrb1hfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgIm5hbWUiKS5hZGRWKCkucHJvcGVydHkoX18uc2VsZWN0KCJhIiksICJtYXJrbyIpLnZhbHVlcygibmFtZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikgfV0sIAotICAgIGdfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2FzWGJYX2FkZFZYc2VsZWN0WGFYX2xhYmVsWF9wcm9wZXJ0eVh0ZXN0X3NlbGVjdFhiWF9sYWJlbFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5hZGRWKF9fLnNlbGVjdCgiYSIpLmxhYmVsKCkpLnByb3BlcnR5KCJ0ZXN0IiwgX18uc2VsZWN0KCJiIikubGFiZWwoKSkudmFsdWVNYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAidGVzdCIsICJzb2Z0d2FyZSIpIH1dLCAKLSAgICBnX2FkZFZYVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydGllc1huYW1lWF9rZXlYX2xhYmVsOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVihfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygibmFtZSIpLmtleSgpKS5sYWJlbCgpIH1dLCAKLSAgICBnX2FkZFZfcHJvcGVydHlYbGFiZWxfcGVyc29uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoVC5sYWJlbCwgInBlcnNvbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpIH1dLCAKLSAgICBnX2FkZFZfcHJvcGVydHlYbGFiZWxfcGVyc29udmFyWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoKS5wcm9wZXJ0eShULmxhYmVsLCB4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikgfV0sIAotICAgIGdfYWRkVl9wcm9wZXJ0eVhpZF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNJZCgiMSIpIH1dLCAKLSAgICBnX2FkZFZfcHJvcGVydHlYaWR2YXJfMXZhclg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQoIjEiKSB9XSwgCi0gICAgZ19hZGRWX3Byb3BlcnR5WG1hcFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KG5ldyBNYXAoW1sibmFtZSIsICJmb28iXSwgWyJhZ2UiLCA0Ml1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiZm9vIikgfV0sIAotICAgIGdfYWRkVl9wcm9wZXJ0eVhzaW5nbGVfbWFwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBuZXcgTWFwKFtbIm5hbWUiLCAiZm9vIl0sIFsiYWdlIiwgNDJdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImZvbyIpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfZm9vWF9wcm9wZXJ0eVhuYW1lX3NldFhiYXJYX2FnZV80M1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAiZm9vIikucHJvcGVydHkoImFnZSIsIDQyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJmb28iKS5wcm9wZXJ0eShuZXcgTWFwKFtbIm5hbWUiLCBDYXJkaW5hbGl0eVZhbHVlLnNldCgiYmFyIildLCBbImFnZSIsIDQzXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJmb28iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJiYXIiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgNDMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCA0MikgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9mb29YX3Byb3BlcnR5WHNldF9uYW1lX2Jhcl9hZ2Vfc2luZ2xlWDQzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAiZm9vIikucHJvcGVydHkoImFnZSIsIDQyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJmb28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG5ldyBNYXAoW1sibmFtZSIsICJiYXIiXSwgWyJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSg0MyldXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImZvbyIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImJhciIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCA0MykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIDQyKSB9XSwgCi0gICAgZ19hZGRWX3Byb3BlcnR5WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygpIH1dLCAKLSAgICBnX2FkZFZfcHJvcGVydHlYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoKSB9XSwgCi0gICAgZ19hZGRWX3Byb3BlcnR5WHNldF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJmb28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoImZvbyIpLnZhbHVlcygpIH1dLCAKLSAgICBnX2FkZFZfcHJvcGVydHlYc2V0X2VtcHR5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJmb28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoKSB9XSwgCi0gICAgZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9qb3NoWF9wcm9wZXJ0eVhhZ2VfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgImFnZSIsIG51bGwpIH1dLCAKLSAgICBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX21hcmtvWF9wcm9wZXJ0eVhmcmllbmRXZWlnaHRfbnVsbF9hY2xfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IiwgbnVsbCwgImFjbCIsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiZnJpZW5kV2VpZ2h0IiwgbnVsbCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiZnJpZW5kV2VpZ2h0IikuaGFzKCJhY2wiLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0aWVzKCJmcmllbmRXZWlnaHQiKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX2FsaWNlWF9wcm9wZXJ0eVhzaW5nbGVfYWdlX3VuaW9uWGFnZV9jb25zdGFudFgxWFhfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgImFnZSIsIDUwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0eSgiYWdlIiwgX18udW5pb24oX18udmFsdWVzKCJhZ2UiKSwgX18uY29uc3RhbnQoMSkpLnN1bSgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgImFnZSIsIDUwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgImFnZSIsIDUxKSB9XSwgCi0gICAgZ19WX2xpbWl0WDNYX2FkZFZYc29mdHdhcmVYX2FnZ3JlZ2F0ZVhhMVhfYnlYbGFiZWxYX2FnZ3JlZ2F0ZVhhMlhfYnlYbGFiZWxYX2NhcFhhMV9hMlhfc2VsZWN0WGFfYlhfYnlYdW5mb2xkWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5saW1pdCgzKS5hZGRWKCJzb2Z0d2FyZSIpLmFnZ3JlZ2F0ZSgiYTEiKS5ieShULmxhYmVsKS5hZ2dyZWdhdGUoImEyIikuYnkoVC5sYWJlbCkuY2FwKCJhMSIsICJhMiIpLnNlbGVjdCgiYTEiLCAiYTIiKS5ieShfXy51bmZvbGQoKS5mb2xkKCkpIH1dLCAKLSAgICBnX2FkZFZfcHJvcGVydHlYbmFtZV9tYXJrb1hfd2l0aFhrZXlfdmFsdWVYX3ZhbHVlc1huYW1lX2tleVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikud2l0aF8oImtleSIsICJ2YWx1ZSIpLnZhbHVlcygibmFtZSIsICJrZXkiKSB9XSwgCi0gICAgZ19hZGRWX3Byb3BlcnR5WG5hbWVfbWFya29fc2luY2VfMjAxMFhfd2l0aFhrZXlfdmFsdWVYX3Byb3BlcnRpZXNYbmFtZVhfdmFsdWVzWHNpbmNlX2tleVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIiwgInNpbmNlIiwgMjAxMCkud2l0aF8oImtleSIsICJ2YWx1ZSIpLnByb3BlcnRpZXMoIm5hbWUiKS52YWx1ZXMoInNpbmNlIiwgImtleSIpIH1dLCAKLSAgICBnX2luamVjdFgxWF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFzQm9vbCgpIH1dLCAKLSAgICBnX2luamVjdFgzXzE0WF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDMuMTQpLmFzQm9vbCgpIH1dLCAKLSAgICBnX2luamVjdFhuZWdfMVhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgtMSkuYXNCb29sKCkgfV0sIAotICAgIGdfaW5qZWN0WDBYX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkuYXNCb29sKCkgfV0sIAotICAgIGdfaW5qZWN0WG5lZ18wWF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KC0wLjApLmFzQm9vbCgpIH1dLCAKLSAgICBnX2luamVjdFhOYU5YX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuYXNCb29sKCkgfV0sIAotICAgIGdfaW5qZWN0WGJvb2xfdHJ1ZVhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCh0cnVlKS5hc0Jvb2woKSB9XSwgCi0gICAgZ19pbmplY3RYZmFsc2VYX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoZmFsc2UpLmFzQm9vbCgpIH1dLCAKLSAgICBnX2luamVjdFh0cnVlWF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ0cnVlIikuYXNCb29sKCkgfV0sIAotICAgIGdfaW5qZWN0WG1peGVkX3RydWVYX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoInRSVWUiKS5hc0Jvb2woKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbFhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5hc0Jvb2woKSB9XSwgCi0gICAgZ19pbmplY3RYaGVsbG9YX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImhlbGxvIikuYXNCb29sKCkgfV0sIAotICAgIGdfaW5qZWN0WDFfMlhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0pLmFzQm9vbCgpIH1dLCAKLSAgICBnX1ZYWF9sb2NhbFhfb3V0RV9jb3VudFhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkuYXNCb29sKCkgfV0sIAotICAgIGdfVl9zYWNrWGFzc2lnblhfYnlYX2hhc0xhYmVsWHBlcnNvblhfY291bnRfYXNCb29sWF9zYWNrWGFuZFhfYnlYX291dEVfY291bnRfYXNCb29sWF9zYWNrX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShfXy5oYXNMYWJlbCgicGVyc29uIikuY291bnQoKS5hc0Jvb2woKSkuc2FjayhPcGVyYXRvci5hbmQpLmJ5KF9fLm91dEUoKS5jb3VudCgpLmFzQm9vbCgpKS5zYWNrKCkucGF0aCgpIH1dLCAKLSAgICBnX2luamVjdFhzdHJYX2FzRGF0ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjIwMjMtMDgtMDJUMDA6MDA6MDBaIikuYXNEYXRlKCkgfV0sIAotICAgIGdfaW5qZWN0WHN0cl9vZmZzZXRYX2FzRGF0ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjIwMjMtMDgtMDJUMDA6MDA6MDAtMDc6MDAiKS5hc0RhdGUoKSB9XSwgCi0gICAgZ19pbmplY3RYMTY5NDAxNzcwNzAwMFhfYXNEYXRlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxNjk0MDE3NzA3MDAwKS5hc0RhdGUoKSB9XSwgCi0gICAgZ19pbmplY3RYMTY5NDAxNzcwODAwMExYX2FzRGF0ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMTY5NDAxNzcwODAwMCkuYXNEYXRlKCkgfV0sIAotICAgIGdfaW5qZWN0WDE2OTQwMTc3MDkwMDBkWF9hc0RhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDE2OTQwMTc3MDkwMDAuMSkuYXNEYXRlKCkgfV0sIAotICAgIGdfaW5qZWN0WDFfMlhfYXNEYXRlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0pLmFzRGF0ZSgpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9hc0RhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmFzRGF0ZSgpIH1dLCAKLSAgICBnX2luamVjdFhpbnZhbGlkc3RyWF9hc0RhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJUaGlzIFN0cmluZyBpcyBub3QgYW4gSVNPIDg2MDEgRGF0ZSIpLmFzRGF0ZSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGJpcnRoZGF5WF9hc0RhdGVfYXNOdW1iZXJfYXNEYXRlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjIwMjAtMDgtMDIiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb2huIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjE5ODgtMTItMTAiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJjaGFybGllIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjIwMDItMDItMDEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJzdXp5IikucHJvcGVydHkoImJpcnRoZGF5IiwgIjE5NjUtMTAtMzEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYmlydGhkYXkiKS5hc0RhdGUoKS5hc051bWJlcigpLmFzRGF0ZSgpIH1dLCAKLSAgICBnX2luamVjdFg1YlhfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUpLmFzTnVtYmVyKCkgfV0sIAotICAgIGdfaW5qZWN0WDVzWF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNSkuYXNOdW1iZXIoKSB9XSwgCi0gICAgZ19pbmplY3RYNWlYX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg1KS5hc051bWJlcigpIH1dLCAKLSAgICBnX2luamVjdFg1bFhfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUpLmFzTnVtYmVyKCkgfV0sIAotICAgIGdfaW5qZWN0WDVuWF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNSkuYXNOdW1iZXIoKSB9XSwgCi0gICAgZ19pbmplY3RYNV8wWF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNS4wKS5hc051bWJlcigpIH1dLCAKLSAgICBnX2luamVjdFg1Xzc1ZlhfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUuNzUpLmFzTnVtYmVyKCkgfV0sIAotICAgIGdfaW5qZWN0WDVYX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiNSIpLmFzTnVtYmVyKCkgfV0sIAotICAgIGdfaW5qZWN0WHRlc3RYX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgidGVzdCIpLmFzTnVtYmVyKCkgfV0sIAotICAgIGdfaW5qZWN0WF8xXzJfM180WF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDMsIDRdKS5hc051bWJlcigpIH1dLCAKLSAgICBnX2luamVjdFgxXzJfM180WF91bmZvbGRfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyLCAzLCA0XSkudW5mb2xkKCkuYXNOdW1iZXIoKSB9XSwgCi0gICAgZ19pbmplY3RYXzFfXzJfXzNfXzRfWF9hc051bWJlclhYX2ZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjEiLCAyLCAiMyIsIDQpLmFzTnVtYmVyKCkuZm9sZCgpIH1dLCAKLSAgICBnX2luamVjdFg1XzQzWF9hc051bWJlclhHVHlwZV9JTlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg1LjQzKS5hc051bWJlcihHVHlwZS5pbnQpIH1dLCAKLSAgICBnX2luamVjdFg1XzY3WF9hc051bWJlclhHVHlwZV9JTlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg1LjY3KS5hc051bWJlcihHVHlwZS5pbnQpIH1dLCAKLSAgICBnX2luamVjdFg1WF9hc051bWJlclhHVHlwZV9MT05HWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNSkuYXNOdW1iZXIoR1R5cGUubG9uZykgfV0sIAotICAgIGdfaW5qZWN0WDEyWF9hc051bWJlclhHVHlwZV9CWVRFWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMTIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKLSAgICBnX2luamVjdFgzMjc2OFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgzMjc2OCkuYXNOdW1iZXIoR1R5cGUuc2hvcnQpIH1dLCAKLSAgICBnX2luamVjdFgzMDBYX2FzTnVtYmVyWEdUeXBlX0JZVEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKLSAgICBnX2luamVjdFgzMjc2OFhfYXNOdW1iZXJYR1R5cGVfVmVydGV4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLnZlcnRleCkgfV0sIAotICAgIGdfaW5qZWN0WDVYX2FzTnVtYmVyWEdUeXBlX0JZVEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiNSIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKLSAgICBnX2luamVjdFgxXzAwMFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjEsMDAwIikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KSB9XSwgCi0gICAgZ19pbmplY3RYMV8yXzNfNF8weDVYX2FzTnVtYmVyX3N1bV9hc051bWJlclhHVHlwZV9CWVRFWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wLCAyLCAzLCAiNCIsICIweDUiKS5hc051bWJlcigpLnN1bSgpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9hc051bWJlclhHVHlwZV9JTlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5hc051bWJlcihHVHlwZS5pbnQpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9tYXRoWGFfcGx1c19iWF9ieVhhZ2VYX2FzTnVtYmVyWEdUeXBlX0lOVFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikubWF0aCgiYSArIGIiKS5ieSgiYWdlIikuYXNOdW1iZXIoR1R5cGUuaW50KSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFh4XzEwMFhfVl9hZ2VfbWF0aFhfX3BsdXNfeFhfYXNOdW1iZXJYR1R5cGVfTE9OR1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoIngiLCAxMDApLlYoKS52YWx1ZXMoImFnZSIpLm1hdGgoIl8gKyB4IikuYXNOdW1iZXIoR1R5cGUubG9uZykgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9hc1N0cmluZ19hc051bWJlclhHVHlwZV9ET1VCTEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmFzU3RyaW5nKCkuYXNOdW1iZXIoR1R5cGUuZG91YmxlKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNOdW1iZXJfYXNEYXRlX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikucHJvcGVydHkoImJpcnRoZGF5IiwgMTU5NjMyNjQwMDAwMCkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9obiIpLnByb3BlcnR5KCJiaXJ0aGRheSIsIDU5NzcxNTIwMDAwMCkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiY2hhcmxpZSIpLnByb3BlcnR5KCJiaXJ0aGRheSIsIDEwMTI1MjE2MDAwMDApLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5wcm9wZXJ0eSgiYmlydGhkYXkiLCAtMTMxNTg3MjAwMDAwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYmlydGhkYXkiKS5hc051bWJlcigpLmFzRGF0ZSgpLmFzTnVtYmVyKCkgfV0sIAotICAgIGdfaW5qZWN0WDFfMlhfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIpLmFzU3RyaW5nKCkgfV0sIAotICAgIGdfaW5qZWN0WDFfMlhfYXNTdHJpbmdYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyKS5hc1N0cmluZyhTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfaW5qZWN0WGxpc3RfMV8yWF9hc1N0cmluZ1hsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX2luamVjdFgxX251bGxYX2FzU3RyaW5nOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsLCAxKS5hc1N0cmluZygpIH1dLCAKLSAgICBnX2luamVjdFgxX251bGxYX2FzU3RyaW5nWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIG51bGxdKS5hc1N0cmluZyhTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl92YWx1ZU1hcFhuYW1lWF9hc1N0cmluZzogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiKS5hc1N0cmluZygpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBYbmFtZVhfb3JkZXJfZm9sZF9hc1N0cmluZ1hsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzU3RyaW5nKCkgfV0sIAotICAgIGdfVl9mb2xkX2FzU3RyaW5nWGxvY2FsWF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkub3JkZXIoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX0VfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmFzU3RyaW5nKCkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuYXNTdHJpbmcoKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVzWGFnZVhfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoImFnZSIpLmFzU3RyaW5nKCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1hhZ2VYX29yZGVyX2ZvbGRfYXNTdHJpbmdYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1hhZ2VYX2FzU3RyaW5nX2NvbmNhdFhfeWVhcnNfb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygiYWdlIikuYXNTdHJpbmcoKS5jb25jYXQoIiB5ZWFycyBvbGQiKSB9XSwgCi0gICAgZ19jYWxsOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoKSB9XSwgCi0gICAgZ19jYWxsWGxpc3RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoIi0tbGlzdCIpIH1dLCAKLSAgICBnX2NhbGxYbGlzdFhfd2l0aFhzdHJpbmdfc3RyaW5nWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5jYWxsKCItLWxpc3QiKS53aXRoXygic2VydmljZSIsICJ0aW5rZXIuc2VhcmNoIikgfV0sIAotICAgIGdfY2FsbFhsaXN0WF93aXRoWHN0cmluZ190cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoIi0tbGlzdCIpLndpdGhfKCJzZXJ2aWNlIiwgX18uY29uc3RhbnQoInRpbmtlci5zZWFyY2giKSkgfV0sIAotICAgIGdfY2FsbFhsaXN0X21hcFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5jYWxsKCItLWxpc3QiLCB4eDEpIH1dLCAKLSAgICBnX2NhbGxYbGlzdF90cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoIi0tbGlzdCIsIF9fLnByb2plY3QoInNlcnZpY2UiKS5ieShfXy5jb25zdGFudCgidGlua2VyLnNlYXJjaCIpKSkgfV0sIAotICAgIGdfY2FsbFhsaXN0X21hcF90cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuY2FsbCgiLS1saXN0IiwgeHgxLCBfXy5wcm9qZWN0KCJzZXJ2aWNlIikuYnkoX18uY29uc3RhbnQoInRpbmtlci5zZWFyY2giKSkpIH1dLCAKLSAgICBnX2NhbGxYc2VhcmNoX21hcFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5jYWxsKCJ0aW5rZXIuc2VhcmNoIiwgeHgxKS5lbGVtZW50KCkgfV0sIAotICAgIGdfY2FsbFhzZWFyY2hfdHJhdmVyc2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5jYWxsKCJ0aW5rZXIuc2VhcmNoIiwgX18ucHJvamVjdCgic2VhcmNoIikuYnkoX18uY29uc3RhbnQoInZhZGEiKSkpLmVsZW1lbnQoKSB9XSwgCi0gICAgZ19jYWxsWHNlYXJjaFhfd2l0aFhzdHJpbmdfc3RyaW5nWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5jYWxsKCJ0aW5rZXIuc2VhcmNoIikud2l0aF8oInNlYXJjaCIsICJ2YWRhIikuZWxlbWVudCgpIH1dLCAKLSAgICBnX2NhbGxYc2VhcmNoWF93aXRoWHN0cmluZ190cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoInRpbmtlci5zZWFyY2giKS53aXRoXygic2VhcmNoIiwgX18uY29uc3RhbnQoInZhZGEiKSkuZWxlbWVudCgpIH1dLCAKLSAgICBnX2NhbGxYc2VhcmNoX21hcFhfd2l0aFhzdHJpbmdfVmVydGV4WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmNhbGwoInRpbmtlci5zZWFyY2giLCB4eDEpLndpdGhfKCJ0eXBlIiwgIlZlcnRleCIpLmVsZW1lbnQoKSB9XSwgCi0gICAgZ19jYWxsWHNlYXJjaF9tYXBYX3dpdGhYc3RyaW5nX0VkZ2VYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuY2FsbCgidGlua2VyLnNlYXJjaCIsIHh4MSkud2l0aF8oInR5cGUiLCAiRWRnZSIpLmVsZW1lbnQoKSB9XSwgCi0gICAgZ19jYWxsWHNlYXJjaF9tYXBYX3dpdGhYc3RyaW5nX1ZlcnRleFByb3BlcnR5WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmNhbGwoInRpbmtlci5zZWFyY2giLCB4eDEpLndpdGhfKCJ0eXBlIiwgIlZlcnRleFByb3BlcnR5IikuZWxlbWVudCgpIH1dLCAKLSAgICBnX1ZfY2FsbFhkY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJ2IikuY2FsbCgidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5IikucHJvamVjdCgidmVydGV4IiwgImRlZ3JlZSIpLmJ5KF9fLnNlbGVjdCgidiIpKS5ieSgpIH1dLCAKLSAgICBnX1Zfd2hlcmVYY2FsbFhkY1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5jYWxsKCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHkiKS5pcygzKSkgfV0sIAotICAgIGdfVl9jYWxsWGRjWF93aXRoWGRpcmVjdGlvbl9PVVRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLmNhbGwoInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eSIpLndpdGhfKCJkaXJlY3Rpb24iLCBEaXJlY3Rpb24uT1VUKS5wcm9qZWN0KCJ2ZXJ0ZXgiLCAiZGVncmVlIikuYnkoX18uc2VsZWN0KCJ2IikpLmJ5KCkgfV0sIAotICAgIGdfVl9jYWxsWGRjX21hcFhfd2l0aFhkaXJlY3Rpb25fT1VUWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLmNhbGwoInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eSIsIHh4MSkud2l0aF8oImRpcmVjdGlvbiIsIERpcmVjdGlvbi5PVVQpLnByb2plY3QoInZlcnRleCIsICJkZWdyZWUiKS5ieShfXy5zZWxlY3QoInYiKSkuYnkoKSB9XSwgCi0gICAgZ19WX2NhbGxYZGNfdHJhdmVyc2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5jYWxsKCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHkiLCBfXy5wcm9qZWN0KCJkaXJlY3Rpb24iKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoInZlcnRleCIsICJkZWdyZWUiKS5ieShfXy5zZWxlY3QoInYiKSkuYnkoKSB9XSwgCi0gICAgZ19WX2NhbGxYZGNfbWFwX3RyYXZlcnNhbFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5jYWxsKCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHkiLCB4eDEsIF9fLnByb2plY3QoImRpcmVjdGlvbiIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdCgidmVydGV4IiwgImRlZ3JlZSIpLmJ5KF9fLnNlbGVjdCgidiIpKS5ieSgpIH1dLCAKLSAgICBnX1ZfY29hbGVzY2VYb3V0WGZvb1hfb3V0WGJhclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jb2FsZXNjZShfXy5vdXQoImZvbyIpLCBfXy5vdXQoImJhciIpKSB9XSwgCi0gICAgZ19WWDFYX2NvYWxlc2NlWG91dFhrbm93c1hfb3V0WGNyZWF0ZWRYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoImtub3dzIiksIF9fLm91dCgiY3JlYXRlZCIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX2NvYWxlc2NlWG91dFhjcmVhdGVkWF9vdXRYa25vd3NYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoImNyZWF0ZWQiKSwgX18ub3V0KCJrbm93cyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2NvYWxlc2NlWG91dFhsaWtlc1hfb3V0WGtub3dzWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29hbGVzY2UoX18ub3V0KCJsaWtlcyIpLCBfXy5vdXQoImtub3dzIiksIF9fLm91dCgiY3JlYXRlZCIpKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2NvYWxlc2NlWG91dEVYa25vd3NYX291dEVYY3JlYXRlZFhYX290aGVyVl9wYXRoX2J5WG5hbWVYX2J5WGxhYmVsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29hbGVzY2UoX18ub3V0RSgia25vd3MiKSwgX18ub3V0RSgiY3JlYXRlZCIpKS5vdGhlclYoKS5wYXRoKCkuYnkoIm5hbWUiKS5ieShULmxhYmVsKSB9XSwgCi0gICAgZ19WX291dFhjcmVhdGVkWF9vcmRlcl9ieVhuYW1lWF9jb2FsZXNjZVhuYW1lX2NvbnN0YW50WHhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikub3JkZXIoKS5ieSgibmFtZSIpLmNvYWxlc2NlKF9fLnZhbHVlcygibmFtZSIpLCBfXy5jb25zdGFudCgieCIpKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbFhfY29tYmluZVhpbmplY3RYMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5jb21iaW5lKF9fLmluamVjdCgxKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfY29tYmluZVhWX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5jb21iaW5lKF9fLlYoKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfZm9sZF9jb21iaW5lWGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQobnVsbCkpIH1dLCAKLSAgICBnX1ZfZm9sZF9jb21iaW5lWFZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkuY29tYmluZShfXy5WKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfY29tYmluZVgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmNvbWJpbmUoMikgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9jb21iaW5lWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuY29tYmluZShudWxsKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9jb21iaW5lWFZfdmFsdWVzWG5hbWVYX2ZvbGRYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfY29tYmluZVhWX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKSkudW5mb2xkKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2NvbWJpbmVYVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSB9XSwgCi0gICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9jb21iaW5lWE1BUktPWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkuY29tYmluZShbIk1BUktPIl0pIH1dLCAKLSAgICBnX2luamVjdFh4eDFYX2NvbWJpbmVYVl92YWx1ZXNYbmFtZVhfZm9sZFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbIm1hcmtvIl0pLmNvbWJpbmUoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkudW5mb2xkKCkgfV0sIAotICAgIGdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2NvbWJpbmVYc2VhdHRsZV92YW5jb3V2ZXJYX29yZGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmNvbWJpbmUoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfY29tYmluZVhlbXB0eV9saXN0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuY29tYmluZShbXSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9mb2xkX2NvbWJpbmVYY29uc3RhbnRYMjdYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkgfV0sIAotICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfY29tYmluZVhkYXZlX2tlbHZpblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmNvbWJpbmUoWyJkYXZlIiwgImtlbHZpbiJdKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX2NvbWJpbmVYYV9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkuY29tYmluZShbImEiLCAiYyJdKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX2NvbWJpbmVYYV9udWxsX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5jb21iaW5lKFsiYSIsIG51bGwsICJjIl0pIH1dLCAKLSAgICBnX2luamVjdFgzX3RocmVlWF9jb21iaW5lWGZpdmVfdGhyZWVfN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuY29tYmluZShbImZpdmUiLCAidGhyZWUiLCA3XSkgfV0sIAotICAgIGdfaW5qZWN0WGFfYlhfY29uY2F0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiYSIsICJiIikuY29uY2F0KCkgfV0sIAotICAgIGdfaW5qZWN0WGFfYlhfY29uY2F0X1hjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiLCAiYiIpLmNvbmNhdCgiYyIpIH1dLCAKLSAgICBnX2luamVjdFhhX2JYX2NvbmNhdF9YY19kWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiLCAiYiIpLmNvbmNhdCgiYyIsICJkIikgfV0sIAotICAgIGdfaW5qZWN0WGFfYlhfY29uY2F0X1hpbmplY3RfY19kWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiLCAiYiIpLmNvbmNhdChfXy5pbmplY3QoImMiKSkgfV0sIAotICAgIGdfaW5qZWN0WGFYX2NvbmNhdF9YaW5qZWN0X0xpc3RfYl9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiKS5jb25jYXQoX18uaW5qZWN0KFsiYiIsICJjIl0pKSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFhhX2JYY1hfY29uY2F0X1hkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSwgImMiKS5jb25jYXQoImQiKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbFhfY29uY2F0X1hpbmplY3RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5jb25jYXQoKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbF9hWF9jb25jYXRfWG51bGxfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsICJhIikuY29uY2F0KG51bGwsICJiIikgfV0sIAotICAgIGdfaW5qZWN0WGhlbGxvX2hpWF9jb25jYXRYVl92YWx1ZXNfb3JkZXJfYnlYbmFtZVhfdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImhlbGxvIiwgImhpIikuY29uY2F0KF9fLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxfdmFsdWVfY29uY2F0X1hfWF9jb25jYXRfWHBlcnNvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoIiAiKS5jb25jYXQoInBlcnNvbiIpIH1dLCAKLSAgICBnX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVzWG5hbWVYX2FzWGFYX2NvbnN0YW50WE1yWF9jb25jYXRYc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoImEiKS5jb25zdGFudCgiTXIuIikuY29uY2F0KF9fLnNlbGVjdCgiYSIpKSB9XSwgCi0gICAgZ19oYXNMYWJlbFhzb2Z0d2FyZVhfYXNYYVhfdmFsdWVzWG5hbWVYX2NvbmNhdFh1bnNlc1hfY29uY2F0WHNlbGVjdFhhWHZhbHVlc1hsYW5nWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoIiB1c2VzICIpLmNvbmNhdChfXy5zZWxlY3QoImEiKS52YWx1ZXMoImxhbmciKSkgfV0sIAotICAgIGdfVlgxWF9vdXRFX2FzWGFYX1ZYMVhfdmFsdWVzWG5hbWVzWF9jb25jYXRYc2VsZWN0WGFYX2xhYmVsWF9jb25jYXRYc2VsZWN0WGFYX2luVl92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmFzKCJhIikuVih2aWQxKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoX18uc2VsZWN0KCJhIikubGFiZWwoKSkuY29uY2F0KF9fLnNlbGVjdCgiYSIpLmluVigpLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WWDFYX291dEVfYXNYYVhfVlgxWF92YWx1ZXNYbmFtZXNYX2NvbmNhdFhzZWxlY3RYYVhfbGFiZWxfc2VsZWN0WGFYX2luVl92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmFzKCJhIikuVih2aWQxKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoX18uc2VsZWN0KCJhIikubGFiZWwoKSwgX18uc2VsZWN0KCJhIikuaW5WKCkudmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX2FkZFZYY29uc3RhbnRYcHJlZml4X1hfY29uY2F0WFZYMVhfbGFiZWxYX2xhYmVsOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVihfXy5jb25zdGFudCgicHJlZml4XyIpLmNvbmNhdChfXy5WKHZpZDEpLmxhYmVsKCkpKS5sYWJlbCgpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9jb25qb2luWDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5jb25qb2luKCIxIikgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfY29uam9pblgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuY29uam9pbigiMSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2NvbmpvaW5YX1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkuY29uam9pbigiOyIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfY29uam9pblhfWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuY29uam9pbigiXyIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfZm9sZF9jb25qb2luWF9YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oIjsiKSB9XSwgCi0gICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9jb25qb2luWE1BUktPWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkuY29uam9pbigiTUFSS08iKSB9XSwgCi0gICAgZ19pbmplY3RYbWFya29YX2NvbmpvaW5YX1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsibWFya28iXSkuY29uam9pbigiLSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFhfY29uam9pblgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5jb25qb2luKCIxIikgfV0sIAotICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfY29uam9pblhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoIm5hbWUiKS5jb25qb2luKCIiKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX2NvbmpvaW5YeHl6WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkuY29uam9pbigieHl6IikgfV0sIAotICAgIGdfaW5qZWN0WDNfdGhyZWVYX2NvbmpvaW5YX1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuY29uam9pbigiOyIpIH1dLCAKLSAgICBnX2luamVjdFhudWxsX2FfbnVsbF9iWF9jb25qb2luWHBsdXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgImEiLCBudWxsLCAiYiJdKS5jb25qb2luKCIrIikgfV0sIAotICAgIGdfaW5qZWN0WG51bGxfbnVsbFhfY29uam9pblhwbHVzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsIG51bGxdKS5jb25qb2luKCIrIikgfV0sIAotICAgIGdfVl9jb25uZWN0ZWRDb21wb25lbnRfaGFzWGNvbXBvbmVudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcygiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudCIpIH1dLCAKLSAgICBnX1ZfZGVkdXBfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5kZWR1cCgpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcygiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudCIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2Nvbm5lY3RlZENvbXBvbmVudF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNvbXBvbmVudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmNvbm5lY3RlZENvbXBvbmVudCgpLnByb2plY3QoIm5hbWUiLCAiY29tcG9uZW50IikuYnkoIm5hbWUiKS5ieSgiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudCIpIH1dLCAKLSAgICBnX1ZfY29ubmVjdGVkQ29tcG9uZW50X3dpdGhYRURHRVNfYm90aEVYa25vd3NYWF93aXRoWFBST1BFUlRZX05BTUVfY2x1c3RlclhfcHJvamVjdF9ieVhuYW1lWF9ieVhjbHVzdGVyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNvbm5lY3RlZENvbXBvbmVudCgpLndpdGhfKCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5lZGdlcyIsIF9fLmJvdGhFKCJrbm93cyIpKS53aXRoXygifnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQucHJvcGVydHlOYW1lIiwgImNsdXN0ZXIiKS5wcm9qZWN0KCJuYW1lIiwgImNsdXN0ZXIiKS5ieSgibmFtZSIpLmJ5KCJjbHVzdGVyIikgfV0sIAotICAgIGdfVl9jb25zdGFudFgxMjNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jb25zdGFudCgxMjMpIH1dLCAKLSAgICBnX1ZfY29uc3RhbnRYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNvbnN0YW50KG51bGwpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfdmFsdWVzWG5hbWVYX2NvbnN0YW50WGluaHVtYW5YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKCJwZXJzb24iKSwgX18udmFsdWVzKCJuYW1lIiksIF9fLmNvbnN0YW50KCJpbmh1bWFuIikpIH1dLCAKLSAgICBnX1ZfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNvdW50KCkgfV0sIAotICAgIGdfVl9vdXRfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLmNvdW50KCkgfV0sIAotICAgIGdfVl9ib3RoX2JvdGhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5ib3RoKCkuY291bnQoKSB9XSwgCi0gICAgZ19WX2ZvbGRfY291bnRYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfaGFzWG5vWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJubyIpLmNvdW50KCkgfV0sIAotICAgIGdfVl93aGVyZVhpblhra25vd3NYX291dFhjcmVhdGVkWF9jb3VudF9pc18wWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkud2hlcmUoX18uaW5fKCJrbm93cyIpLm91dCgiY3JlYXRlZCIpLmNvdW50KCkuaXMoMCkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYOFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoOCkuY291bnQoKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDVYX2FzWGFYX291dFh3cml0dGVuQnlYX2FzWGJYX3NlbGVjdFhhX2JYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDUpLmFzKCJhIikub3V0KCJ3cml0dGVuQnkiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuY291bnQoKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDNYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDMpLmNvdW50KCkgfV0sIAotICAgIGdfVl9vcmRlcl9ieVhsYW5nWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibGFuZyIpLmNvdW50KCkgfV0sIAotICAgIGdfRV9zYW1wbGVYMVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnNhbXBsZSgxKS5jb3VudCgpIH1dLCAKLSAgICBnX1Zfc2FtcGxlWDFYX2J5WGFnZVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhbXBsZSgxKS5ieSgiYWdlIikuY291bnQoKSB9XSwgCi0gICAgZ19WX29yZGVyX2J5WG5vWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibm8iKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfZ3JvdXBfYnlYbGFiZWxYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmNvdW50KCkgfV0sIAotICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfY291bnRYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmNvdW50KFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYZGF0ZXRpbWVYc3RyWFhfZGF0ZUFkZFhEVF9ob3VyXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJykpLmRhdGVBZGQoRFQuaG91ciwgMikgfV0sIAotICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0clhYX2RhdGVBZGRYaG91cl8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIDIpIH1dLCAKLSAgICBnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWGhvdXJfMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSkuZGF0ZUFkZChEVC5ob3VyLCAtMSkgfV0sIAotICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0clhYX2RhdGVBZGRYbWludXRlXzEwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlQWRkKERULm1pbnV0ZSwgMTApIH1dLCAKLSAgICBnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWHNlY29uZF8yMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSkuZGF0ZUFkZChEVC5zZWNvbmQsIDIwKSB9XSwgCi0gICAgZ19pbmplY3RYZGF0ZXRpbWVYc3RyWFhfZGF0ZUFkZFhkYXlfMTFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOS0wNlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDktMDZUMDA6MDBaJykpLmRhdGVBZGQoRFQuZGF5LCAxMSkgfV0sIAotICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0cjFYWF9kYXRlRGlmZlhkYXRldGltZVhzdHIyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSkuZGF0ZURpZmYobmV3IERhdGUoJzIwMjMtMDgtMDlUMDA6MDBaJykpIH1dLCAKLSAgICBnX2luamVjdFhkYXRldGltZVhzdHIxWFhfZGF0ZURpZmZYY29uc3RhbnRYZGF0ZXRpbWVYc3RyMlhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKS5kYXRlRGlmZihfXy5jb25zdGFudChuZXcgRGF0ZSgnMjAyMy0wOC0wMVQwMDowMFonKSkpIH1dLCAKLSAgICBnX2luamVjdFhkYXRldGltZVhzdHIxWFhfZGF0ZURpZmZYaW5qZWN0WGRhdGV0aW1lWHN0cjJYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkuZGF0ZURpZmYoX18uaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTEwLTExVDAwOjAwWicpKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYmlydGhkYXlYX2FzRGF0ZV9kYXRlRGlmZlhkYXRldGltZVgxOTcwMDEwMVQwMDAwWlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjE1OTYzMjY0MDAwMDAiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb2huIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjU5NzcxNTIwMDAwMCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImNoYXJsaWUiKS5wcm9wZXJ0eSgiYmlydGhkYXkiLCAiMTAxMjUyMTYwMDAwMCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5wcm9wZXJ0eSgiYmlydGhkYXkiLCAiLTEzMTU4NzIwMDAwMCIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJiaXJ0aGRheSIpLmFzTnVtYmVyKCkuYXNEYXRlKCkuZGF0ZURpZmYobmV3IERhdGUoJzE5NzAtMDEtMDFUMDA6MDBaJykpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfYWxpY2VYX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2RhdGVEaWZmWGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLnByb3BlcnR5KCJiaXJ0aGRheSIsIDE1OTYzMjY0MDAwMDApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImFsaWNlIikudmFsdWVzKCJiaXJ0aGRheSIpLmFzRGF0ZSgpLmRhdGVEaWZmKF9fLmNvbnN0YW50KG51bGwpKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbFhfZGlmZmVyZW5jZVhpbmplY3RYMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5kaWZmZXJlbmNlKF9fLmluamVjdCgxKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZGlmZmVyZW5jZVhWX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5kaWZmZXJlbmNlKF9fLlYoKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfZm9sZF9kaWZmZXJlbmNlWGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQobnVsbCkpIH1dLCAKLSAgICBnX1ZfZm9sZF9kaWZmZXJlbmNlWFZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfZGlmZmVyZW5jZVgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmRpZmZlcmVuY2UoMikgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaWZmZXJlbmNlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGlmZmVyZW5jZShudWxsKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9kaWZmZXJlbmNlWFZfdmFsdWVzWG5hbWVYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5vbmV4aXN0YW50IikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaWZmZXJlbmNlWFZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfZm9sZF9kaWZmZXJlbmNlWFZfdmFsdWVzWGFnZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygiYWdlIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9kaWZmZXJlbmNlWE1BUktPWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkuZGlmZmVyZW5jZShbIk1BUktPIl0pIH1dLCAKLSAgICBnX2luamVjdFhtYXJrb1hfZGlmZmVyZW5jZVhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJtYXJrbyJdKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9kaWZmZXJlbmNlWHNlYXR0bGVfdmFuY291dmVyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpZmZlcmVuY2UoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKSB9XSwgCi0gICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaWZmZXJlbmNlWHJpcHBsZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmRpZmZlcmVuY2UoWyJyaXBwbGUiXSkgfV0sIAotICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfZGlmZmVyZW5jZVhlbXB0eV9saXN0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuZGlmZmVyZW5jZShbXSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9mb2xkX2RpZmZlcmVuY2VYY29uc3RhbnRYMjdYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2RpZmZlcmVuY2VYZGF2ZV9rZWx2aW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoIm5hbWUiKS5kaWZmZXJlbmNlKFsiZGF2ZSIsICJrZWx2aW4iXSkgfV0sIAotICAgIGdfaW5qZWN0WGFfbnVsbF9iWF9kaWZmZXJlbmNlWGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLmRpZmZlcmVuY2UoWyJhIiwgImMiXSkgfV0sIAotICAgIGdfaW5qZWN0WGFfbnVsbF9iWF9kaWZmZXJlbmNlWGFfbnVsbF9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkuZGlmZmVyZW5jZShbImEiLCBudWxsLCAiYyJdKSB9XSwgCi0gICAgZ19pbmplY3RYM190aHJlZVhfZGlmZmVyZW5jZVhmaXZlX3RocmVlXzdYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMywgInRocmVlIl0pLmRpZmZlcmVuY2UoWyJmaXZlIiwgInRocmVlIiwgN10pIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9kaXNqdW5jdFhpbmplY3RYMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5kaXNqdW5jdChfXy5pbmplY3QoMSkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2Rpc2p1bmN0WFZfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmRpc2p1bmN0KF9fLlYoKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfZm9sZF9kaXNqdW5jdFhjb25zdGFudFhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5kaXNqdW5jdChfXy5jb25zdGFudChudWxsKSkgfV0sIAotICAgIGdfVl9mb2xkX2Rpc2p1bmN0WFZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uVigpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2Rpc2p1bmN0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGlzanVuY3QoMikgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaXNqdW5jdFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmRpc2p1bmN0KG51bGwpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2Rpc2p1bmN0WFZfdmFsdWVzWG5hbWVYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5vbmV4aXN0YW50IikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfZGlzanVuY3RYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfZm9sZF9kaXNqdW5jdFhWX3ZhbHVlc1hhZ2VYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX2Rpc2p1bmN0WE1BUktPWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkuZGlzanVuY3QoWyJNQVJLTyJdKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGlzanVuY3RYc2VhdHRsZV92YW5jb3V2ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlzanVuY3QoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKSB9XSwgCi0gICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaXNqdW5jdFhtYXJrb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmRpc2p1bmN0KFsibWFya28iXSkgfV0sIAotICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfZGlzanVuY3RYc3RlcGhlbl9tYXJrb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmRpc2p1bmN0KFsic3RlcGhlbiIsICJtYXJrbyJdKSB9XSwgCi0gICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaXNqdW5jdFhkYXZlX2tlbHZpblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmRpc2p1bmN0KFsiZGF2ZSIsICJrZWx2aW4iXSkgfV0sIAotICAgIGdfaW5qZWN0WGFfbnVsbF9iWF9kaXNqdW5jdFhhX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5kaXNqdW5jdChbImEiLCAiYyJdKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX2Rpc2p1bmN0WGFfbnVsbF9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkuZGlzanVuY3QoWyJhIiwgbnVsbCwgImMiXSkgfV0sIAotICAgIGdfaW5qZWN0WDNfdGhyZWVYX2Rpc2p1bmN0WGZpdmVfdGhyZWVfN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuZGlzanVuY3QoWyJmaXZlIiwgInRocmVlIiwgN10pIH1dLCAKLSAgICBnX0U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX0VYMTFYOiBbZnVuY3Rpb24oe2csIGVpZDExfSkgeyByZXR1cm4gZy5FKGVpZDExKSB9XSwgCi0gICAgZ19FWDExQXNTdHJpbmdYOiBbZnVuY3Rpb24oe2csIGVpZDExfSkgeyByZXR1cm4gZy5FKGVpZDExKSB9XSwgCi0gICAgZ19FWGUxMVg6IFtmdW5jdGlvbih7ZywgZTExfSkgeyByZXR1cm4gZy5FKGUxMSkgfV0sIAotICAgIGdfRVhlN19lMTFYOiBbZnVuY3Rpb24oe2csIGU3LCBlMTF9KSB7IHJldHVybiBnLkUoZTcsIGUxMSkgfV0sIAotICAgIGdfRVhsaXN0WGU3X2UxMVhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSh4eDEpIH1dLCAKLSAgICBnX0VYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRShudWxsKSB9XSwgCi0gICAgZ19FWGxpc3RYbnVsbFhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSh4eDEpIH1dLCAKLSAgICBnX0VYMTFfbnVsbFg6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLkUoZWlkMTEsIG51bGwpIH1dLCAKLSAgICBnX1ZfRVgxMVg6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLlYoKS5FKGVpZDExKSB9XSwgCi0gICAgZ19FWDExWF9FOiBbZnVuY3Rpb24oe2csIGVpZDExfSkgeyByZXR1cm4gZy5FKGVpZDExKS5FKCkgfV0sIAotICAgIGdfVl9FWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5FKG51bGwpIH1dLCAKLSAgICBnX1ZfRVhsaXN0WG51bGxYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5FKHh4MSkgfV0sIAotICAgIGdfaW5qZWN0WDFYX0VYMTFfbnVsbFg6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLmluamVjdCgxKS5FKGVpZDExLCBudWxsKSB9XSwgCi0gICAgZ19pbmplY3RYMVhfY29hbGVzY2VYRVhfaGFzTGFiZWxYdGVzdHNYX2FkZEVYdGVzdHNYX2Zyb21fVl9oYXNYbmFtZVhfWGpvc2hYWF90b1hWX2hhc1huYW1lWF9YdmFkYXNYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5jb2FsZXNjZShfXy5FKCkuaGFzTGFiZWwoInRlc3RzIiksIF9fLmFkZEUoInRlc3RzIikuZnJvbV8oX18uVigpLmhhcygibmFtZSIsICJqb3NoIikpLnRvKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoInRlc3RzIikgfV0sIAotICAgIGdfVlgxWF9vdXRFX2luVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5pblYoKSB9XSwgCi0gICAgZ19WWDJYX2luRV9vdXRWOiBbZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikuaW5FKCkub3V0VigpIH1dLCAKLSAgICBnX1Zfb3V0RV9oYXNYd2VpZ2h0XzFYX291dFY6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dEUoKS5oYXMoIndlaWdodCIsIDEuMCkub3V0VigpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RV9vdGhlclY6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkub3RoZXJWKCkgfV0sIAotICAgIGdfVlg0WF9ib3RoRV9vdGhlclY6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSgpLm90aGVyVigpIH1dLCAKLSAgICBnX1ZYNFhfYm90aEVfaGFzWHdlaWdodF9sdF8xWF9vdGhlclY6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSgpLmhhcygid2VpZ2h0IiwgUC5sdCgxLjApKS5vdGhlclYoKSB9XSwgCi0gICAgZ2V0X2dfVlgxWF9vdXRFX290aGVyVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5vdGhlclYoKSB9XSwgCi0gICAgZ19WWDFYX291dEVYa25vd3NYX2luVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikuaW5WKCkgfV0sIAotICAgIGdfVlgxWF9vdXRFWGtub3dzX2NyZWF0ZWRYX2luVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIiwgImNyZWF0ZWQiKS5pblYoKSB9XSwgCi0gICAgZ19WWDFYX291dEVYa25vd3NYX2JvdGhWOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKS5ib3RoVigpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RVhrbm93c1hfYm90aFZfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikuYm90aFYoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX3Byb3BlcnRpZXNfZWxlbWVudDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX2VsZW1lbnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzWGFnZVhfZWxlbWVudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygiYWdlIikuZWxlbWVudCgpIH1dLCAKLSAgICBnX0VYX3Byb3BlcnRpZXNfZWxlbWVudDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuRShlaWQxMSkucHJvcGVydGllcygpLmVsZW1lbnQoKS5saW1pdCgxKSB9XSwgCi0gICAgZ19FX3Byb3BlcnRpZXNfZWxlbWVudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSB9XSwgCi0gICAgZ19WWHY3X3Byb3BlcnRpZXNfcHJvcGVydGllc19lbGVtZW50X2VsZW1lbnQ6IFtmdW5jdGlvbih7ZywgdmlkN30pIHsgcmV0dXJuIGcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkubGltaXQoMSkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNfZWxlbWVudF9lbGVtZW50OiBbZnVuY3Rpb24oe2csIHZpZDd9KSB7IHJldHVybiBnLlYodmlkNykucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkuZWxlbWVudCgpIH1dLCAKLSAgICBnX1ZfZWxlbWVudE1hcDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZWxlbWVudE1hcCgpIH1dLCAKLSAgICBnX1ZfZWxlbWVudE1hcFhuYW1lX2FnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVsZW1lbnRNYXAoIm5hbWUiLCAiYWdlIikgfV0sIAotICAgIGdfRVgxMVhfZWxlbWVudE1hcDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuRShlaWQxMSkuZWxlbWVudE1hcCgpIH1dLCAKLSAgICBnX1ZfZWxlbWVudE1hcFhuYW1lX2FnZV9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZWxlbWVudE1hcCgibmFtZSIsICJhZ2UiLCBudWxsKSB9XSwgCi0gICAgZ19WX2FzWGFYX2ZsYXRNYXBYc2VsZWN0WGFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5mbGF0TWFwKF9fLnNlbGVjdCgiYSIpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mbGF0TWFwWHNwbGl0WGFYX3VuZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZsYXRNYXAoX18uc3BsaXQoImEiKS51bmZvbGQoKSkgfV0sIAotICAgIGdfVl9mbGF0TWFwWG91dF9vdXRYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZsYXRNYXAoX18ub3V0KCkub3V0KCkpLnBhdGgoKSB9XSwgCi0gICAgZ19WX2ZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKSB9XSwgCi0gICAgZ19WX2ZvbGRfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkudW5mb2xkKCkgfV0sIAotICAgIGdfVl9hZ2VfZm9sZFgwX3BsdXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoMCwgT3BlcmF0b3Iuc3VtKSB9XSwgCi0gICAgZ19pbmplY3RYYTFfYjJYX2ZvbGRYbV9hZGRBbGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgTWFwKFtbImEiLCAxXV0pLCBuZXcgTWFwKFtbImIiLCAyXV0pKS5mb2xkKG5ldyBNYXAoW10pLCBPcGVyYXRvci5hZGRBbGwpIH1dLCAKLSAgICBnX2luamVjdFhhMV9iMl9iNFhfZm9sZFhtX2FkZEFsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1siYSIsIDFdXSksIG5ldyBNYXAoW1siYiIsIDJdXSksIG5ldyBNYXAoW1siYiIsIDRdXSkpLmZvbGQobmV3IE1hcChbXSksIE9wZXJhdG9yLmFkZEFsbCkgfV0sIAotICAgIGdfaW5qZWN0WGxpc3QxX2xpc3QyWF9mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0sIFszLCA0XSkuZm9sZCgpIH1dLCAKLSAgICBnX2luamVjdFhsaXN0MV9saXN0Ml9saXN0M1hfZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSkuZm9sZCgpIH1dLCAKLSAgICBnX1ZYMVhfZm9ybWF0WHN0clg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmZvcm1hdCgiSGVsbG8gd29ybGQiKSB9XSwgCi0gICAgZ19WX2Zvcm1hdFhzdHJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb3JtYXQoIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZCIpIH1dLCAKLSAgICBnX2luamVjdFgxWF9hc1hhZ2VYX1ZfZm9ybWF0WHN0clg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFzKCJhZ2UiKS5WKCkuZm9ybWF0KCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGQiKSB9XSwgCi0gICAgZ19WX2Zvcm1hdFhzdHJYX2J5WHZhbHVlc1huYW1lWFhfYnlYdmFsdWVzWGFnZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb3JtYXQoIiV7X30gaXMgJXtffSB5ZWFycyBvbGQiKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkuYnkoX18udmFsdWVzKCJhZ2UiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Zvcm1hdFhzdHJYX2J5WGNvbnN0YW50WGhlbGxvWFhfYnlYdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZvcm1hdCgiJXtffSAle199ICV7X30iKS5ieShfXy5jb25zdGFudCgiaGVsbG8iKSkuYnkoX18udmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZYMVhfZm9ybWF0WHN0clhfYnlYY29uc3RhbnRYaGVsbG9YWF9ieVh2YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuZm9ybWF0KCIle199IikuYnkoX18uY29uc3RhbnQoImhlbGxvIikpLmJ5KF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WX2Zvcm1hdFhzdHJYX2J5WGJvdGhFX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9ybWF0KCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zIikuYnkoX18uYm90aEUoKS5jb3VudCgpKSB9XSwgCi0gICAgZ19WX3Byb2plY3RYbmFtZV9jb3VudFhfYnlYdmFsdWVzWG5hbWVYWF9ieVhib3RoRV9jb3VudFhfZm9ybWF0WHN0clg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb2plY3QoIm5hbWUiLCAiY291bnQiKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5mb3JtYXQoIiV7bmFtZX0gaGFzICV7Y291bnR9IGNvbm5lY3Rpb25zIikgfV0sIAotICAgIGdfVl9lbGVtZW50TWFwX2Zvcm1hdFhzdHJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbGVtZW50TWFwKCkuZm9ybWF0KCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGQiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYYVhfdmFsdWVzWG5hbWVYX2FzWHAxWF9zZWxlY3RYYVhfaW5Ya25vd3NYX2Zvcm1hdFhzdHJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5hcygicDEiKS5zZWxlY3QoImEiKS5pbl8oImtub3dzIikuZm9ybWF0KCIle3AxfSBrbm93cyAle25hbWV9IikgfV0sIAotICAgIGdfVl9hc1hzWF9sYWJlbF9hc1hzdWJqZWN0WF9zZWxlY3RYc1hfb3V0RV9hc1hwWF9sYWJlbF9hc1hwcmVkaWNhdGVYX3NlbGVjdFhwWF9pblZfbGFiZWxfYXNYb2JqZWN0WF9mb3JtYXRYc3RyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoInMiKS5sYWJlbCgpLmFzKCJzdWJqZWN0Iikuc2VsZWN0KCJzIikub3V0RSgpLmFzKCJwIikubGFiZWwoKS5hcygicHJlZGljYXRlIikuc2VsZWN0KCJwIikuaW5WKCkubGFiZWwoKS5hcygib2JqZWN0IikuZm9ybWF0KCIle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH0iKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9pbmRleF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmluZGV4KCkudW5mb2xkKCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfb3JkZXJfYnlYbmFtZVhfaW5kZXhfd2l0aFhtYXBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5vcmRlcigpLmJ5KCJuYW1lIikuaW5kZXgoKS53aXRoXyhXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfdW5mb2xkX29yZGVyX2J5WHRhaWxYbG9jYWxfMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkudW5mb2xkKCkub3JkZXIoKS5ieShfXy50YWlsKFNjb3BlLmxvY2FsLCAxKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfd2l0aFhtYXBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLndpdGhfKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkgfV0sIAotICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9pbmRleF91bmZvbGRfdW5mb2xkOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS5pbmRleCgpLnVuZm9sZCgpLnVuZm9sZCgpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9pbnRlcnNlY3RYaW5qZWN0WDFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaW50ZXJzZWN0KF9fLmluamVjdCgxKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfaW50ZXJzZWN0WFZfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmludGVyc2VjdChfXy5WKCkuZm9sZCgpKSB9XSwgCi0gICAgZ19WX2ZvbGRfaW50ZXJzZWN0WGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudChudWxsKSkgfV0sIAotICAgIGdfVl9mb2xkX2ludGVyc2VjdFhWWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5WKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfaW50ZXJzZWN0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuaW50ZXJzZWN0KDIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfaW50ZXJzZWN0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuaW50ZXJzZWN0KG51bGwpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2ludGVyc2VjdFhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9pbnRlcnNlY3RYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoIm5vbmV4aXN0YW50IikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfaW50ZXJzZWN0WFZfdmFsdWVzWGFnZVhfZm9sZFhfb3JkZXJfbG9jYWw6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9pbnRlcnNlY3RYTUFSS09YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCJuYW1lIikudG9VcHBlcigpKS5pbnRlcnNlY3QoWyJNQVJLTyJdKSB9XSwgCi0gICAgZ19pbmplY3RYbWFya29YX2ludGVyc2VjdFhfX19WX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJtYXJrbyJdKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAotICAgIGdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2ludGVyc2VjdFhzZWF0dGxlX3ZhbmNvdXZlclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJsb2NhdGlvbiIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfaW50ZXJzZWN0WF9fX2NvbnN0YW50WDI3WF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2ludGVyc2VjdFhkYXZlX2tlbHZpblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmludGVyc2VjdChbImRhdmUiLCAia2VsdmluIl0pIH1dLCAKLSAgICBnX2luamVjdFhhX251bGxfYlhfaW50ZXJzZWN0WGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLmludGVyc2VjdChbImEiLCAiYyJdKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX2ludGVyc2VjdFhhX251bGxfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLmludGVyc2VjdChbImEiLCBudWxsLCAiYyJdKSB9XSwgCi0gICAgZ19pbmplY3RYM190aHJlZVhfaW50ZXJzZWN0WGZpdmVfdGhyZWVfN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuaW50ZXJzZWN0KFsiZml2ZSIsICJ0aHJlZSIsIDddKSB9XSwgCi0gICAgZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfbFRyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCIgIGZlYXR1cmUiLCAiIG9uZSB0ZXN0IiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCIpLmxUcmltKCkgfV0sIAotICAgIGdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX2xUcmltWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyIgIGZlYXR1cmUgICIsICIgb25lIHRlc3QgIiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCJdKS5sVHJpbShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfaW5qZWN0WF9fZmVhdHVyZV9fWF9sVHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIiAgZmVhdHVyZSAgIikubFRyaW0oKSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFhhX2JYWF9sVHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkubFRyaW0oKSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFgxXzJYWF9sVHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSkubFRyaW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2xUcmltOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5sVHJpbSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfbFRyaW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS5sVHJpbShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF9sZW5ndGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmZWF0dXJlIiwgInRlc3QiLCBudWxsKS5sZW5ndGgoKSB9XSwgCi0gICAgZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX2xlbmd0aFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmZWF0dXJlIiwgInRlc3QiLCBudWxsKS5sZW5ndGgoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX2luamVjdFhMaXN0WGFfYlhYX2xlbmd0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkubGVuZ3RoKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfbGVuZ3RoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5sZW5ndGgoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX2xlbmd0aFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLmxlbmd0aChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfb3JfbG9vcHNfaXNYM1hYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygibmFtZSIsICJwZXRlciIpLm9yKCkubG9vcHMoKS5pcygzKSkuaGFzKCJuYW1lIiwgInBldGVyIikucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfb3JfbG9vcHNfaXNYMlhYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygibmFtZSIsICJwZXRlciIpLm9yKCkubG9vcHMoKS5pcygyKSkuaGFzKCJuYW1lIiwgInBldGVyIikucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfYW5kX2xvb3BzX2lzWDNYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicGV0ZXIiKS5hbmQoKS5sb29wcygpLmlzKDMpKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2VtaXRYaGFzWG5hbWVfbWFya29YX29yX2xvb3BzX2lzWDJYWF9yZXBlYXRYb3V0WF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoX18uaGFzKCJuYW1lIiwgIm1hcmtvIikub3IoKS5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfbWFwWHZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5tYXAoX18udmFsdWVzKCJuYW1lIikpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RV9sYWJlbF9tYXBYbGVuZ3RoWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5sYWJlbCgpLm1hcChfXy5sZW5ndGgoKSkgfV0sIAotICAgIGdfVlgxWF9vdXRfbWFwWHZhbHVlc1huYW1lWFhfbWFwWGxlbmd0aFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5tYXAoX18udmFsdWVzKCJuYW1lIikpLm1hcChfXy5sZW5ndGgoKSkgfV0sIAotICAgIGdfd2l0aFBhdGhfVl9hc1hhWF9vdXRfbWFwWHNlbGVjdFhhWF92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhQYXRoKCkuVigpLmFzKCJhIikub3V0KCkubWFwKF9fLnNlbGVjdCgiYSIpLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ193aXRoUGF0aF9WX2FzWGFYX291dF9vdXRfYXNYYlhfbWFwWHNlbGVjdFhhWF92YWx1ZXNYbmFtZVhfY29uY2F0WHNlbGVjdFhiWF92YWx1ZXNYbmFtZVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoUGF0aCgpLlYoKS5hcygiYSIpLm91dCgpLm91dCgpLmFzKCJiIikubWFwKF9fLnNlbGVjdCgiYSIpLnZhbHVlcygibmFtZSIpLmNvbmNhdChfXy5zZWxlY3QoImIiKS52YWx1ZXMoIm5hbWUiKSkpIH1dLCAKLSAgICBnX1ZfbWFwWHNlbGVjdFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikubWFwKF9fLnNlbGVjdCgiYSIpKSB9XSwgCi0gICAgZ19WX21hcFhjb25zdGFudFhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hcChfXy5jb25zdGFudChudWxsKSkgfV0sIAotICAgIGdfVl92YWx1ZU1hcF9tYXRjaFhhX3NlbGVjdFhuYW1lWF9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5tYXRjaChfXy5hcygiYSIpLnNlbGVjdCgibmFtZSIpLmFzKCJiIikpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9vdXRfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCkuYXMoImIiKSkgfV0sIAotICAgIGdfVl9tYXRjaFhhX291dF9iWF9zZWxlY3RYYl9pZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCkuYXMoImIiKSkuc2VsZWN0KCJiIikuYnkoVC5pZCkgfV0sIAotICAgIGdfVl9tYXRjaFhhX2tub3dzX2JfX2JfY3JlYXRlZF9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpKSB9XSwgCi0gICAgZ19WX21hdGNoWGJfY3JlYXRlZF9jX19hX2tub3dzX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmFzKCJjIiksIF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9jcmVhdGVkX2JfX2JfMGNyZWF0ZWRfY1hfd2hlcmVYYV9uZXFfY1hfc2VsZWN0WGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKSwgX18uYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpKS53aGVyZSgiYSIsIFAubmVxKCJjIikpLnNlbGVjdCgiYSIsICJjIikgfV0sIAotICAgIGdfVl9tYXRjaFhkXzBrbm93c19hX19kX2hhc1huYW1lX3ZhZGFzWF9fYV9rbm93c19iX19iX2NyZWF0ZWRfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJkIikuaW5fKCJrbm93cyIpLmFzKCJhIiksIF9fLmFzKCJkIikuaGFzKCJuYW1lIiwgInZhZGFzIiksIF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIF9fLmFzKCJiIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSkgfV0sIAotICAgIGdfVl9tYXRjaFhhX2NyZWF0ZWRfbG9wX2JfX2JfMGNyZWF0ZWRfMjlfY19fY193aGVyZVhyZXBlYXRYb3V0WF90aW1lc1gyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKS5hcygiYiIpLCBfXy5hcygiYiIpLmluXygiY3JlYXRlZCIpLmhhcygiYWdlIiwgMjkpLmFzKCJjIiksIF9fLmFzKCJjIikud2hlcmUoX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX21hdGNoWGFfb3V0X2NvdW50X2NfX2JfaW5fY291bnRfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5tYXRjaChfXy5hcygiYSIpLm91dCgpLmNvdW50KCkuYXMoImMiKSwgX18uYXMoImIiKS5pbl8oKS5jb3VudCgpLmFzKCJjIikpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9fYV9vdXRfYl9fbm90WGFfY3JlYXRlZF9iWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCkuYXMoImIiKSwgX18ubm90KF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKSkpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9jcmVhdGVkX2xvcF9iX19iXzBjcmVhdGVkXzI5X2NYX3doZXJlWGNfcmVwZWF0WG91dFhfdGltZXNYMlhYX3NlbGVjdFhhX2JfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgImxvcCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKSkud2hlcmUoX18uYXMoImMiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoImEiLCAiYiIsICJjIikgfV0sIAotICAgIGdfVl9vdXRfb3V0X21hdGNoWGFfMGNyZWF0ZWRfYl9fYl8wa25vd3NfY1hfc2VsZWN0WGNYX291dFhjcmVhdGVkWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5tYXRjaChfXy5hcygiYSIpLmluXygiY3JlYXRlZCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJrbm93cyIpLmFzKCJjIikpLnNlbGVjdCgiYyIpLm91dCgiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19iX2NyZWF0ZWRfY19fYV9jcmVhdGVkX2NYX2RlZHVwWGFfYl9jWF9zZWxlY3RYYVhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIF9fLmFzKCJiIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSwgX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpKS5kZWR1cCgiYSIsICJiIiwgImMiKS5zZWxlY3QoImEiKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9jcmVhdGVkX2JfX2FfcmVwZWF0WG91dFhfdGltZXNYMlhYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIiksIF9fLmFzKCJhIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5hcygiYiIpKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKLSAgICBnX1Zfbm90WG1hdGNoWGFfYWdlX2JfX2FfbmFtZV9jWF93aGVyZVhiX2VxWGNYWF9zZWxlY3RYYVhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm5vdChfXy5tYXRjaChfXy5hcygiYSIpLnZhbHVlcygiYWdlIikuYXMoImIiKSwgX18uYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5hcygiYyIpKS53aGVyZSgiYiIsIFAuZXEoImMiKSkuc2VsZWN0KCJhIikpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19hbmRYYV9jcmVhdGVkX2NfX2JfY3JlYXRlZF9jX19hbmRYYl9jcmVhdGVkX2NvdW50X2RfX2Ffa25vd3NfY291bnRfZFhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYW5kKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSwgX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpLCBfXy5hbmQoX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLmFzKCJkIiksIF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmNvdW50KCkuYXMoImQiKSkpKSB9XSwgCi0gICAgZ19WX21hdGNoWGFfd2hlcmVYYV9uZXFYY1hYX19hX2NyZWF0ZWRfYl9fb3JYYV9rbm93c192YWRhc19fYV8wa25vd3NfYW5kX2FfaGFzWGxhYmVsX3BlcnNvblhYX19iXzBjcmVhdGVkX2NfX2JfMGNyZWF0ZWRfY291bnRfaXNYZ3RYMVhYWF9zZWxlY3RYYV9iX2NYX2J5WGlkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18ud2hlcmUoImEiLCBQLm5lcSgiYyIpKSwgX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLCBfXy5vcihfXy5hcygiYSIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSwgX18uYXMoImEiKS5pbl8oImtub3dzIikuYW5kKCkuYXMoImEiKS5oYXMoVC5sYWJlbCwgInBlcnNvbiIpKSwgX18uYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpLCBfXy5hcygiYiIpLmluXygiY3JlYXRlZCIpLmNvdW50KCkuaXMoUC5ndCgxKSkpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieShULmlkKSB9XSwgCi0gICAgZ19WX21hdGNoWGFfX2FfYm90aF9iX19iX2JvdGhfY1hfZGVkdXBYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5ib3RoKCkuYXMoImIiKSwgX18uYXMoImIiKS5ib3RoKCkuYXMoImMiKSkuZGVkdXAoImEiLCAiYiIpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19iX2NyZWF0ZWRfbG9wX19iX21hdGNoWGJfY3JlYXRlZF9kX19kXzBjcmVhdGVkX2NYX3NlbGVjdFhjWF9jWF9zZWxlY3RYYV9iX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSwgX18uYXMoImIiKS5tYXRjaChfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmFzKCJkIiksIF9fLmFzKCJkIikuaW5fKCJjcmVhdGVkIikuYXMoImMiKSkuc2VsZWN0KCJjIikuYXMoImMiKSkuc2VsZWN0KCJhIiwgImIiLCAiYyIpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19hX2NyZWF0ZWRfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSkgfV0sIAotICAgIGdfVl9tYXRjaFh3aGVyZVhhbmRYYV9jcmVhdGVkX2JfX2JfMGNyZWF0ZWRfY291bnRfaXNYZXFYM1hYWFhfX2FfYm90aF9iX193aGVyZVhiX2luWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLndoZXJlKF9fLmFuZChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuY291bnQoKS5pcyhQLmVxKDMpKSkpLCBfXy5hcygiYSIpLmJvdGgoKS5hcygiYiIpLCBfXy53aGVyZShfXy5hcygiYiIpLmluXygpKSkgfV0sIAotICAgIGdfVl9tYXRjaFhhX291dEVYY3JlYXRlZFhfb3JkZXJfYnlYd2VpZ2h0X2Rlc2NYX2xpbWl0WDFYX2luVl9iX19iX2hhc1hsYW5nX2phdmFYWF9zZWxlY3RYYV9iWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXRFKCJjcmVhdGVkIikub3JkZXIoKS5ieSgid2VpZ2h0IiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoImIiKSwgX18uYXMoImIiKS5oYXMoImxhbmciLCAiamF2YSIpKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVl9tYXRjaFhhX2JvdGhfYl9fYl9ib3RoX2NYX2RlZHVwWGFfYlhfYnlYbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLmJvdGgoKS5hcygiYiIpLCBfXy5hcygiYiIpLmJvdGgoKS5hcygiYyIpKS5kZWR1cCgiYSIsICJiIikuYnkoVC5sYWJlbCkgfV0sIAotICAgIGdfVl9tYXRjaFhhX2NyZWF0ZWRfYl9fYl8wY3JlYXRlZF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLCBfXy5hcygiYiIpLmluXygiY3JlYXRlZCIpLmFzKCJhIikpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX21hdGNoWGFfb3V0X2NvdW50X2NfX29yWGFfa25vd3NfYl9fYl9pbl9jb3VudF9jX19hbmRfX2NfaXNYZ3RYMlhYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5tYXRjaChfXy5hcygiYSIpLm91dCgpLmNvdW50KCkuYXMoImMiKSwgX18ub3IoX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYXMoImIiKS5pbl8oKS5jb3VudCgpLmFzKCJjIikuYW5kKCkuYXMoImMiKS5pcyhQLmd0KDIpKSkpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9rbm93c19jb3VudF9iWF9zZWxlY3RYYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmNvdW50KCkuYXMoImIiKSkuc2VsZWN0KCJiIikgfV0sIAotICAgIGdfVl9tYXRjaFhhXzBzdW5nQnlfYl9fYV8wd3JpdHRlbkJ5X2NfX2Jfd3JpdHRlbkJ5X2RfX2Nfc3VuZ0J5X2RfX2RfaGFzWG5hbWVfR2FyY2lhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaW5fKCJzdW5nQnkiKS5hcygiYiIpLCBfXy5hcygiYSIpLmluXygid3JpdHRlbkJ5IikuYXMoImMiKSwgX18uYXMoImIiKS5vdXQoIndyaXR0ZW5CeSIpLmFzKCJkIiksIF9fLmFzKCJjIikub3V0KCJzdW5nQnkiKS5hcygiZCIpLCBfXy5hcygiZCIpLmhhcygibmFtZSIsICJHYXJjaWEiKSkgfV0sIAotICAgIGdfVl9tYXRjaFhhX2hhc1hzb25nX25hbWVfc3Vuc2hpbmVYX19hX21hcFgwZm9sbG93ZWRCeV93ZWlnaHRfbWVhblhfYl9fYV8wZm9sbG93ZWRCeV9jX19jX2ZpbHRlclh3ZWlnaHRfd2hlcmVYZ3RlWGJYWFhfb3V0Vl9kWF9zZWxlY3RYZFhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaGFzKCJzb25nIiwgIm5hbWUiLCAiSEVSRSBDT01FUyBTVU5TSElORSIpLCBfXy5hcygiYSIpLm1hcChfXy5pbkUoImZvbGxvd2VkQnkiKS52YWx1ZXMoIndlaWdodCIpLm1lYW4oKSkuYXMoImIiKSwgX18uYXMoImEiKS5pbkUoImZvbGxvd2VkQnkiKS5hcygiYyIpLCBfXy5hcygiYyIpLmZpbHRlcihfXy52YWx1ZXMoIndlaWdodCIpLndoZXJlKFAuZ3RlKCJiIikpKS5vdXRWKCkuYXMoImQiKSkuc2VsZWN0KCJkIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX21hdGNoWGFfMHN1bmdCeV9iX19hXzBzdW5nQnlfY19fYl93cml0dGVuQnlfZF9fY193cml0dGVuQnlfZV9fZF9oYXNYbmFtZV9HZW9yZ2VfSGFyaXNvblhfX2VfaGFzWG5hbWVfQm9iX01hcmxleVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLmluXygic3VuZ0J5IikuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oInN1bmdCeSIpLmFzKCJjIiksIF9fLmFzKCJiIikub3V0KCJ3cml0dGVuQnkiKS5hcygiZCIpLCBfXy5hcygiYyIpLm91dCgid3JpdHRlbkJ5IikuYXMoImUiKSwgX18uYXMoImQiKS5oYXMoIm5hbWUiLCAiR2VvcmdlX0hhcnJpc29uIiksIF9fLmFzKCJlIikuaGFzKCJuYW1lIiwgIkJvYl9NYXJsZXkiKSkgfV0sIAotICAgIGdfVl9tYXRjaFhhX2hhc1huYW1lX0dhcmNpYVhfX2FfMHdyaXR0ZW5CeV9iX19hXzBzdW5nQnlfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaGFzKCJuYW1lIiwgIkdhcmNpYSIpLCBfXy5hcygiYSIpLmluXygid3JpdHRlbkJ5IikuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oInN1bmdCeSIpLmFzKCJiIikpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29uZ3NYX21hdGNoWGFfbmFtZV9iX19hX3BlcmZvcm1hbmNlc19jWF9zZWxlY3RYYl9jWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvbmciKS5tYXRjaChfXy5hcygiYSIpLnZhbHVlcygibmFtZSIpLmFzKCJiIiksIF9fLmFzKCJhIikudmFsdWVzKCJwZXJmb3JtYW5jZXMiKS5hcygiYyIpKS5zZWxlY3QoImIiLCAiYyIpLmNvdW50KCkgfV0sIAotICAgIGdfVl9tYXRjaFhhX2ZvbGxvd2VkQnlfY291bnRfaXNYZ3RYMTBYWF9iX19hXzBmb2xsb3dlZEJ5X2NvdW50X2lzWGd0WDEwWFhfYlhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJmb2xsb3dlZEJ5IikuY291bnQoKS5pcyhQLmd0KDEwKSkuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oImZvbGxvd2VkQnkiKS5jb3VudCgpLmlzKFAuZ3QoMTApKS5hcygiYiIpKS5jb3VudCgpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV8wc3VuZ0J5X2JfX2FfMHdyaXR0ZW5CeV9jX19iX3dyaXR0ZW5CeV9kWF93aGVyZVhjX3N1bmdCeV9kWF93aGVyZVhkX2hhc1huYW1lX0dhcmNpYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLmluXygic3VuZ0J5IikuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oIndyaXR0ZW5CeSIpLmFzKCJjIiksIF9fLmFzKCJiIikub3V0KCJ3cml0dGVuQnkiKS5hcygiZCIpKS53aGVyZShfXy5hcygiYyIpLm91dCgic3VuZ0J5IikuYXMoImQiKSkud2hlcmUoX18uYXMoImQiKS5oYXMoIm5hbWUiLCAiR2FyY2lhIikpIH1dLCAKLSAgICBnX1ZfbWF0Y2hYYV9oYXNYbmFtZV9HYXJjaWFYX19hXzB3cml0dGVuQnlfYl9fYl9mb2xsb3dlZEJ5X2NfX2Nfd3JpdHRlbkJ5X2RfX3doZXJlWGRfbmVxWGFYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaGFzKCJuYW1lIiwgIkdhcmNpYSIpLCBfXy5hcygiYSIpLmluXygid3JpdHRlbkJ5IikuYXMoImIiKSwgX18uYXMoImIiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYyIpLCBfXy5hcygiYyIpLm91dCgid3JpdHRlbkJ5IikuYXMoImQiKSwgX18ud2hlcmUoImQiLCBQLm5lcSgiYSIpKSkgfV0sIAotICAgIGdfVl9tYXRjaFhhX291dFhrbm93c1hfbmFtZV9iWF9pZGVudGl0eTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikudmFsdWVzKCJuYW1lIikuYXMoImIiKSkuaWRlbnRpdHkoKSB9XSwgCi0gICAgZ19WX291dEVfbWF0aFgwX21pbnVzX2l0WF9ieVh3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkubWF0aCgiMC1fIikuYnkoIndlaWdodCIpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZVhfdmFsdWVNYXBfbWF0aFhpdF9wbHVzX2l0WGJ5WHNlbGVjdFhhZ2VYX3VuZm9sZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnZhbHVlTWFwKCkubWF0aCgiXytfIikuYnkoX18uc2VsZWN0KCJhZ2UiKS51bmZvbGQoKSkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX21hdGhYYV9wbHVzX2JYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikubWF0aCgiYSArIGIiKS5ieSgiYWdlIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYeF8xMDBYX1ZfYWdlX21hdGhYX19wbHVzX3hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJ4IiwgMTAwKS5WKCkudmFsdWVzKCJhZ2UiKS5tYXRoKCJfICsgeCIpIH1dLCAKLSAgICBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX21hdGhYYl9wbHVzX2FYX2J5WGluWGNyZWF0ZWRYX2NvdW50WF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIikubWF0aCgiYiArIGEiKS5ieShfXy5pbl8oImNyZWF0ZWQiKS5jb3VudCgpKS5ieSgiYWdlIikgfV0sIAotICAgIGdfd2l0aFNhY2tYMVhfaW5qZWN0WDFYX3JlcGVhdFhzYWNrWHN1bVhfYnlYY29uc3RhbnRYMVhYWF90aW1lc1g1WF9lbWl0X21hdGhYc2luX19YX2J5WHNhY2tYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KF9fLmNvbnN0YW50KDEpKSkudGltZXMoNSkuZW1pdCgpLm1hdGgoInNpbiBfIikuYnkoX18uc2FjaygpKSB9XSwgCi0gICAgZ19WX3Byb2plY3RYYV9iX2NYX2J5WGJvdGhFX3dlaWdodF9zdW1YX2J5WGJvdGhFX2NvdW50WF9ieVhuYW1lWF9vcmRlcl9ieVhtYXRoWGFfZGl2X2JYX2Rlc2NYX3NlbGVjdFhjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvamVjdCgiYSIsICJiIiwgImMiKS5ieShfXy5ib3RoRSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYnkoIm5hbWUiKS5vcmRlcigpLmJ5KF9fLm1hdGgoImEgLyBiIiksIE9yZGVyLmRlc2MpLnNlbGVjdCgiYyIpIH1dLCAKLSAgICBnX1ZfbWF0aFhpdF9wbHVzX2l0WGJ5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGgoIl8rXyIpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwX21hdGhYaXRfcGx1c19pdFhieVhzZWxlY3RYYWdlWF91bmZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5tYXRoKCJfK18iKS5ieShfXy5zZWxlY3QoImFnZSIpLnVuZm9sZCgpKSB9XSwgCi0gICAgZ19WWDFYX291dEVfYXNYZXhwZWN0ZWRXZWlnaHRYX21hdGhYZXhwZWN0ZWRXZWlnaHRQbHVzT25lWGJ5WHdlaWdodFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkuYXMoImV4cGVjdGVkV2VpZ2h0IikubWF0aCgiZXhwZWN0ZWRXZWlnaHQgKyAxIikuYnkoIndlaWdodCIpIH1dLCAKLSAgICBnX1ZfYWdlX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5tYXgoKSB9XSwgCi0gICAgZ19WX2Zvb19tYXg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikubWF4KCkgfV0sIAotICAgIGdfVl9uYW1lX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikubWF4KCkgfV0sIAotICAgIGdfVl9hZ2VfZm9sZF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21heFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLm1heChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWF4OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21heFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLm1heChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWF4OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKLSAgICBnX1ZfZm9vX2ZvbGRfbWF4WGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX25hbWVfZm9sZF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWF4OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoImFnZSIpLm1heCgpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18uYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm1heCgpKSB9XSwgCi0gICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX21heFhsb2NhbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLm1heChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoImFnZSIpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKSkuZm9sZCgpKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfYWdlX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikubWVhbigpIH1dLCAKLSAgICBnX1ZfZm9vX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikubWVhbigpIH1dLCAKLSAgICBnX1ZfYWdlX2ZvbGRfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfZm9vX2ZvbGRfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tZWFuWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuZ3JvdXAoKS5ieSgibmFtZSIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5tZWFuKCkpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWVhbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1lYW4oKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikudW5mb2xkKCkubWVhbigpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWVhbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1lYW4oKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikudW5mb2xkKCkubWVhbigpIH1dLCAKLSAgICBnX2luamVjdFhudWxsXzEwXzIwX251bGxYX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsIDEwLCAyMCwgbnVsbCkubWVhbigpIH1dLCAKLSAgICBnX2luamVjdFhsaXN0WG51bGxfMTBfMjBfbnVsbFhYX21lYW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgMTAsIDIwLCBudWxsXSkubWVhbihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikubWVhbihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKCJhZ2UiKSwgX18ub3V0RSgpLnZhbHVlcygid2VpZ2h0IikpLmZvbGQoKSkubWVhbihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfaW5qZWN0WG51bGxYX21lcmdlWGluamVjdFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLm1lcmdlKF9fLmluamVjdCgxKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfbWVyZ2VYVl9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikubWVyZ2UoX18uVigpLmZvbGQoKSkgfV0sIAotICAgIGdfVl9mb2xkX21lcmdlWGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KG51bGwpKSB9XSwgCi0gICAgZ19WX2ZvbGRfbWVyZ2VYVlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkpIH1dLCAKLSAgICBnX1ZfZWxlbWVudE1hcF9tZXJnZVhjb25zdGFudFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVsZW1lbnRNYXAoKS5tZXJnZShfXy5jb25zdGFudCgiYSIpKSB9XSwgCi0gICAgZ19WX2ZvbGRfbWVyZ2VYVl9hc1hhWF9wcm9qZWN0WGFYX2J5WG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm1lcmdlKF9fLlYoKS5hcygiYSIpLnByb2plY3QoImEiKS5ieSgibmFtZSIpKSB9XSwgCi0gICAgZ19WX2ZvbGRfbWVyZ2VYa192WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm1lcmdlKG5ldyBNYXAoW1siayIsICJ2Il1dKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9tZXJnZVgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLm1lcmdlKDIpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfbWVyZ2VYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5tZXJnZShudWxsKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9tZXJnZVhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX21lcmdlWFZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoIm5vbmV4aXN0YW50IikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfbWVyZ2VYVl92YWx1ZXNYYWdlWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcygiYWdlIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9tZXJnZVhNQVJLT1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoIm5hbWUiKS50b1VwcGVyKCkpLm1lcmdlKFsiTUFSS08iXSkgfV0sIAotICAgIGdfaW5qZWN0WG1hcmtvWF9tZXJnZVhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJtYXJrbyJdKS5tZXJnZShfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfbWVyZ2VYc2VhdHRsZV92YW5jb3V2ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkubWVyZ2UoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKSB9XSwgCi0gICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9tZXJnZVhlbXB0eV9saXN0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikubWVyZ2UoW10pIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfZm9sZF9tZXJnZVhjb25zdGFudFgyN1hfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX21lcmdlWGRhdmVfa2VsdmluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikubWVyZ2UoWyJkYXZlIiwgImtlbHZpbiJdKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX21lcmdlWGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLm1lcmdlKFsiYSIsICJjIl0pIH1dLCAKLSAgICBnX2luamVjdFhhX251bGxfYlhfbWVyZ2VYYV9udWxsX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5tZXJnZShbImEiLCBudWxsLCAiYyJdKSB9XSwgCi0gICAgZ19pbmplY3RYM190aHJlZVhfbWVyZ2VYZml2ZV90aHJlZV83WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzMsICJ0aHJlZSJdKS5tZXJnZShbImZpdmUiLCAidGhyZWUiLCA3XSkgfV0sIAotICAgIGdfVl9hc1huYW1lWF9wcm9qZWN0WG5hbWVYX2J5WG5hbWVYX21lcmdlWG90aGVyX2JsdWVwcmludFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJuYW1lIikucHJvamVjdCgibmFtZSIpLmJ5KCJuYW1lIikubWVyZ2UobmV3IE1hcChbWyJvdGhlciIsICJibHVlcHJpbnQiXV0pKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX21hcmtvWF9lbGVtZW50TWFwX21lcmdlWFZfaGFzWG5hbWVfbG9wWF9lbGVtZW50TWFwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuZWxlbWVudE1hcCgpLm1lcmdlKF9fLlYoKS5oYXMoIm5hbWUiLCAibG9wIikuZWxlbWVudE1hcCgpKSB9XSwgCi0gICAgZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9lbXB0eVg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkRSgic2VsZiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRFKCJzZWxmIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfVl9tZXJnZUVYZW1wdHlYX29wdGlvblhvbkNyZWF0ZV9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoInYiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KCJ2IikpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF9vcHRpb25Yb25DcmVhdGVfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUobmV3IE1hcChbW1QubGFiZWwsICJzZWxmIl0sIFtEaXJlY3Rpb24uT1VULCBNZXJnZS5vdXRWXSwgW0RpcmVjdGlvbi5JTiwgTWVyZ2UuaW5WXV0pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoInYiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KCJ2IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19tZXJnZUVYZW1wdHlYX2V4aXN0czogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkRSgic2VsZiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZUUobmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19tZXJnZUVYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VFKG5ldyBNYXAoW10pKSB9XSwgCi0gICAgZ19WX21lcmdlRVhlbXB0eVhfdHdvX2V4aXN0OiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJ2IikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgidiIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX1ZfbWVyZ2VFX2lubGluZVhlbXB0eVhfdHdvX2V4aXN0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLm1lcmdlRShuZXcgTWFwKFtbVC5sYWJlbCwgInNlbGYiXSwgW0RpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFZdLCBbRGlyZWN0aW9uLklOLCBNZXJnZS5pblZdXSkpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoInYiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KCJ2IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19tZXJnZUVYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZUUobnVsbCkgfV0sIAotICAgIGdfbWVyZ2VFWG51bGx2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpIH1dLCAKLSAgICBnX1ZfbGltaXRYMVhfbWVyZ2VFWG51bGx2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5saW1pdCgxKS5tZXJnZUUoeHgxKSB9XSwgCi0gICAgZ19WX21lcmdlRVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZUUobnVsbCkgfV0sIAotICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUVYc2VsZWN0WGFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlRShfXy5zZWxlY3QoImEiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvMV9pbl92YWRhczFYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzX3dlaWdodF8wNVhfZXhpc3RzOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm91dEUoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAwLjUpLmluVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc193ZWlnaHRfMDVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkgfV0sIAotICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfV0sIAotICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHM6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIk4iKSB9XSwgCi0gICAgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvX1hfbWVyZ2VFWGxhYmVsX2tub3dzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIk4iKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX2luamVjdFgxWF9zZWxlY3RYbVhfbWVyZ2VFOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLnNlbGVjdCgibSIpLm1lcmdlRSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLmluVigpLmhhcygibmFtZSIsICJ2YWRhcyIpIH1dLCAKLSAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJOIikub3V0VigpLmhhcygibmFtZSIsICJ2YWRhcyIpIH1dLCAKLSAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWRfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSB9XSwgCi0gICAgZ19tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX2Vycm9yOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLm91dFYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFWG91dF92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZF9keW5hbWljX292ZXJyaWRlX3NrZXRjaGlseV9hbGxvd2VkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgic2lkZUVmZmVjdDEiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDN9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLm91dFYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9zZWxmX291dF92YWRhczFfaW5fdmFkYXMxWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm1lcmdlRSh4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJzZWxmIikuYm90aFYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhjX2NyZWF0ZWRfWVhfd2l0aFNpZGVFZmZlY3RYbV9tYXRjaGVkWF9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhYX2V4aXN0czogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJOIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya28xX2luX3ZhZGFzMVhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH1dLCAKLSAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX2FsaWFzZWRfZGlyZWN0aW9uOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhtMV9sYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfbTJfbGFiZWxfc2VsZl9vdXRfdmFkYXNfaW5fdmFkYXNYX3VuaW9uWHNlbGVjdFhtMVhfc2VsZWN0WG0yWFhfbWVyZ2VFOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18uc2VsZWN0KCJtMSIpLCBfXy5zZWxlY3QoIm0yIikpLm1lcmdlRSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLm91dCgic2VsZiIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhjX2NyZWF0ZWRfWVhfd2l0aFNpZGVFZmZlY3RYbV9tYXRjaGVkWF9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zaWRlRWZmZWN0WHByb3BlcnRpZXNYd2VpZ2h0WF9kcm9wWF9zZWxlY3RYbVhYX2V4aXN0czogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcygid2VpZ2h0IikuZHJvcCgpKS5zZWxlY3QoIm0iKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoIndlaWdodCIpIH1dLCAKLSAgICBnX21lcmdlRV93aXRoX291dFZpblZfb3B0aW9uc19tYXA6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgyKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19tYXA6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRShuZXcgTWFwKFtbRGlyZWN0aW9uLk9VVCwgTWVyZ2Uub3V0Vl0sIFtEaXJlY3Rpb24uSU4sIE1lcmdlLmluVl0sIFtULmxhYmVsLCAia25vd3MiXV0pKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgxKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19tZXJnZUVfd2l0aF9vdXRWaW5WX29wdGlvbnNfc2VsZWN0OiBbZnVuY3Rpb24oe2csIHh4MSwgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoIngiKS5WKHZpZDIpLmFzKCJ5IikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdCgieCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoInkiKSkgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19zZWxlY3Q6IFtmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJ4IikuVih2aWQyKS5hcygieSIpLm1lcmdlRShuZXcgTWFwKFtbRGlyZWN0aW9uLk9VVCwgTWVyZ2Uub3V0Vl0sIFtEaXJlY3Rpb24uSU4sIE1lcmdlLmluVl0sIFtULmxhYmVsLCAia25vd3MiXV0pKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJ4IikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgieSIpKSB9LCBmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygibmFtZSIsICJ2YWRhcyIpIH1dLCAKLSAgICBnX21lcmdlRV93aXRoX2VpZF9zcGVjaWZpZWRfYW5kX2luaGVyaXRhbmNlXzE6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoIjIwMSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19tZXJnZUVfd2l0aF9laWRfc3BlY2lmaWVkX2FuZF9pbmhlcml0YW5jZV8yOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5FKCIyMDEiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfbWVyZ2VFX291dFZfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0X3dpdGhTaWRlRWZmZWN0X21lcmdlRV9vdXRWX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgic2lkZUVmZmVjdDEiKSkgfV0sIAotICAgIGdfbWVyZ2VFX2luVl9vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFX2luVl9keW5hbWljX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoInNpZGVFZmZlY3QxIikpIH1dLCAKLSAgICBnX21lcmdlRV9sYWJlbF9vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfV0sIAotICAgIGdfbWVyZ2VFX2xhYmVsX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgic2lkZUVmZmVjdDEiKSkgfV0sIAotICAgIGdfbWVyZ2VFX2lkX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVfaWRfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KCJzaWRlRWZmZWN0MSIpKSB9XSwgCi0gICAgZ19tZXJnZVZfbWVyZ2VFX2NvbWJpbmF0aW9uX25ld192ZXJ0aWNlczogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5hcygib3V0ViIpLm1lcmdlVih4eDIpLmFzKCJpblYiKS5tZXJnZUUoeHgzKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJvdXRWIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgiaW5WIikpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ19tZXJnZVZfbWVyZ2VFX2NvbWJpbmF0aW9uX2V4aXN0aW5nX3ZlcnRpY2VzOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkuYXMoIm91dFYiKS5tZXJnZVYoeHgyKS5hcygiaW5WIikubWVyZ2VFKHh4Mykub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdCgib3V0ViIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoImluViIpKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfVl9hc1h2WF9tZXJnZUVYeHgxWF9vcHRpb25YTWVyZ2Vfb25NYXRjaF94eDJYX29wdGlvblhNZXJnZV9vdXRWX3NlbGVjdFh2WFhfb3B0aW9uWE1lcmdlX2luVl9zZWxlY3RYdlhYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJ2IikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgidiIpKSB9XSwgCi0gICAgZ19WX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydHlYd2VpZ2h0XzBYWF9jb25zdGFudFhlbXB0eVhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KCJ3ZWlnaHQiLCAwKSkuY29uc3RhbnQobmV3IE1hcChbXSkpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoIndlaWdodCIsIDApIH1dLCAKLSAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydHlYd2VpZ2h0XzBYWF9jb25zdGFudFhlbXB0eVhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoIndlaWdodCIsIDApKS5jb25zdGFudChuZXcgTWFwKFtdKSkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAwKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJ3ZWlnaHQiKSB9XSwgCi0gICAgZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19tYXRjaDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLnNlbGVjdCgibWFwIiksIF9fLnNlbGVjdCgibWFwIiksIF9fLmNvbnN0YW50KG5ldyBNYXAoW1siY3JlYXRlZCIsICJOIl1dKSkpLmZvbGQoKS5hcygibSIpLm1lcmdlRShfXy5zZWxlY3QoIm0iKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KCJtIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KCJtIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcygiY3JlYXRlZCIsICJOIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0RSgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLmluVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCi0gICAgZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19jcmVhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5zZWxlY3QoIm1hcCIpLCBfXy5zZWxlY3QoIm1hcCIpLCBfXy5jb25zdGFudChuZXcgTWFwKFtbImNyZWF0ZWQiLCAiTiJdXSkpKS5mb2xkKCkuYXMoIm0iKS5tZXJnZUUoX18uc2VsZWN0KCJtIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgibSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5oYXNOb3QoImNyZWF0ZWQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5vdXRFKCJrbm93cyIpLmhhc05vdCgiY3JlYXRlZCIpLmluVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKS5vdXRFKCJzZWxmIikuaGFzTm90KCJ3ZWlnaHQiKS5pblYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikgfV0sIAotICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfd2VpZ2h0X251bGxYX2FsbG93ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoIndlaWdodCIsIG51bGwpIH1dLCAKLSAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3dlaWdodF9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygid2VpZ2h0IikgfV0sIAotICAgIGdfbWVyZ2VWWGVtcHR5WF9vcHRpb25Yb25NYXRjaF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMjkpIH1dLCAKLSAgICBnX1ZfbWVyZ2VWWGVtcHR5WF9vcHRpb25Yb25NYXRjaF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDI5KSB9XSwgCi0gICAgZ19tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkgfV0sIAotICAgIGdfVl9tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1lcmdlVih4eDEpIH1dLCAKLSAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbnVsbFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAotICAgIGdfVl9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX251bGxYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSB9XSwgCi0gICAgZ19tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2VtcHR5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihudWxsKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX1ZfbWVyZ2VWWG51bGxYX29wdGlvblhvbkNyZWF0ZV9lbXB0eVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfbWVyZ2VWWGVtcHR5WF9ub19leGlzdGluZzogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfaW5qZWN0WDBYX21lcmdlVlhlbXB0eVhfbm9fZXhpc3Rpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVihuZXcgTWFwKFtdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19tZXJnZVZYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDI5KSB9XSwgCi0gICAgZ19WX21lcmdlVlhlbXB0eVhfdHdvX2V4aXN0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYobmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikuaGFzKCJhZ2UiLCAyNykgfV0sIAotICAgIGdfbWVyZ2VWWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfbWVyZ2VWWG51bGx2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19WX21lcmdlVlhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYobnVsbCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpIH1dLCAKLSAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9XSwgCi0gICAgZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9vcHRpb246IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5oYXMoImFnZSIsIDE5KSB9XSwgCi0gICAgZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV8xOVhfb3B0aW9uOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAxOSkgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF93aXRoU2lkZUVmZmVjdFhtX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYoX18uc2VsZWN0KCJjIikpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikuaGFzKCJhZ2UiLCAxOSkgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfb3B0aW9uOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMTkpIH1dLCAKLSAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfcHJvcGVydHlYbmFtZV92YWRhc19hY2xfcHVibGljWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIsICJhY2wiLCAicHVibGljIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXNWYWx1ZSgidmFkYXMiKS5oYXMoImFjbCIsICJwdWJsaWMiKSB9XSwgCi0gICAgZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdCgwKS5tZXJnZVYoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAotICAgIGdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikgfV0sIAotICAgIGdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbjogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5oYXMoImFnZSIsIDE5KSB9XSwgCi0gICAgZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbjogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDE5KSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX3dpdGhTaWRlRWZmZWN0WG1fbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX2luamVjdFgwWF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLmhhcygiYWdlIiwgMTkpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9pbmplY3RYMFhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMTkpIH1dLCAKLSAgICBnX2luamVjdFgwWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3Byb3BlcnR5WG5hbWVfdmFkYXNfYWNsX3B1YmxpY1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiwgImFjbCIsICJwdWJsaWMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygibmFtZSIpLmhhc1ZhbHVlKCJ2YWRhcyIpLmhhcygiYWNsIiwgInB1YmxpYyIpIH1dLCAKLSAgICBnX2luamVjdFhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9tZXJnZVZYaWRlbnRpdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJtYXJrbyJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJzdGVwaGVuIl1dKSkubWVyZ2VWKF9fLmlkZW50aXR5KCkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19pbmplY3RYbGFiZWxfcGVyc29uX25hbWVfbWFya29fbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfbWVyZ2VWOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJtYXJrbyJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJzdGVwaGVuIl1dKSkubWVyZ2VWKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhsaXN0X25hbWVfc3RldmVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgIm5hbWUiLCAic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJuYW1lIiwgInN0ZXZlIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCJuYW1lIikuaGFzVmFsdWUoInN0ZXZlIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXNWYWx1ZSgic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCJuYW1lIikgfV0sIAotICAgIGdfbWVyZ2VYbGFiZWxfcGVyc29uX25hbWVfdmFkYXNYX29wdGlvblhvbk1hdGNoX2FnZV8zNVg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIDM1KSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19WX21hcFhtZXJnZVhsYWJlbF9wZXJzb25fbmFtZV9qb3NoWFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1hcChfXy5tZXJnZVYoeHgxKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiam9zaCIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF93aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKCJhZ2UiKS5kcm9wKCkpLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDE5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoImFnZSIpLmRyb3AoKSkuc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMTkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoImFnZSIpIH1dLCAKLSAgICBnX21lcmdlVl9vbkNyZWF0ZV9pbmhlcml0YW5jZV9leGlzdGluZzogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWlrZSIpLnByb3BlcnR5KFQuaWQsICIxIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCIxIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIikgfV0sIAotICAgIGdfbWVyZ2VWX29uQ3JlYXRlX2luaGVyaXRhbmNlX25ld18xOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCIxIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIikgfV0sIAotICAgIGdfbWVyZ2VWX29uQ3JlYXRlX2luaGVyaXRhbmNlX25ld18yOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCIxIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIikgfV0sIAotICAgIGdfbWVyZ2VWX2xhYmVsX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdF9tZXJnZVZfbGFiZWxfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoInNpZGVFZmZlY3QxIikpIH1dLCAKLSAgICBnX21lcmdlVl9pZF9vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfV0sIAotICAgIGdfbWVyZ2VWX2hpZGRlbl9pZF9rZXlfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpIH1dLCAKLSAgICBnX21lcmdlVl9oaWRkZW5fbGFiZWxfa2V5X3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKSB9XSwgCi0gICAgZ19tZXJnZVZfaGlkZGVuX2xhYmVsX3ZhbHVlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKSB9XSwgCi0gICAgZ19tZXJnZVZfaGlkZGVuX2lkX2tleV9vbkNyZWF0ZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkgfV0sIAotICAgIGdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25DcmVhdGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIH1dLCAKLSAgICBnX21lcmdlVl9oaWRkZW5fbGFiZWxfdmFsdWVfb25DcmVhdGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIH1dLCAKLSAgICBnX21lcmdlVl9oaWRkZW5faWRfa2V5X29uTWF0Y2hfbWF0Y2hlZF9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigidmVydGV4IikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSB9XSwgCi0gICAgZ19tZXJnZVZfaGlkZGVuX2xhYmVsX2tleV9tYXRjaGVkX29uTWF0Y2hfbWF0Y2hlZF9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigidmVydGV4IikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX2xpc3RYMzNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgIm1hcmtvIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1siYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5saXN0KDMzKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAzMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX3NldFgzM1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtbIm5hbWUiLCAibWFya28iXV0pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbWyJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLnNldCgzMyldXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMzMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiYWdlIikgfV0sIAotICAgIGdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV9zZXRYMzFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgIm1hcmtvIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1siYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5zZXQoMzEpXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDMxKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoImFnZSIpIH1dLCAKLSAgICBnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2luZ2xlWDMzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2luZ2xlKDMzKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAzMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzMzX3NpbmdsZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbImFnZSIsIDMzXV0pLCBDYXJkaW5hbGl0eS5zaW5nbGUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMzMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiYWdlIikgfV0sIAotICAgIGdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX25hbWVfYWxsZW5fYWdlX3NldFgzMVhfc2luZ2xlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgIm1hcmtvIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1sibmFtZSIsICJhbGxlbiJdLCBbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2V0KDMxKV1dKSwgQ2FyZGluYWxpdHkuc2luZ2xlKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5oYXMoImFnZSIsIDMxKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5oYXMoImFnZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLnByb3BlcnRpZXMoImFnZSIpIH1dLCAKLSAgICBnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9uYW1lX2FsbGVuX2FnZV9zaW5nbGVYMzFYX3NpbmdsZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbIm5hbWUiLCAiYWxsZW4iXSwgWyJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSgzMSldXSksIENhcmRpbmFsaXR5LnNpbmdsZSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuaGFzKCJhZ2UiLCAzMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuaGFzKCJhZ2UiLCAzMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV9zaW5nbGVYODFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgImFsaWNlIl0sIFtULmxhYmVsLCAicGVyc29uIl1dKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBuZXcgTWFwKFtbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2luZ2xlKDgxKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiLCA4MSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV9zZXRYODFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgImFsaWNlIl0sIFtULmxhYmVsLCAicGVyc29uIl1dKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBuZXcgTWFwKFtbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2V0KDgxKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiLCA4MSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV84MV9zZXRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtbIm5hbWUiLCAiYWxpY2UiXSwgW1QubGFiZWwsICJwZXJzb24iXV0pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBNYXAoW1siYWdlIiwgODFdXSksIENhcmRpbmFsaXR5LnNldCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiLCA4MSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCi0gICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV84MV9sYWJlbF9wZXJzb25fc2V0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgImFsaWNlIl1dKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBuZXcgTWFwKFtbImFnZSIsIDgxXSwgW1QubGFiZWwsICJwZXJzb24iXV0pLCBDYXJkaW5hbGl0eS5zZXQpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiYWdlIiwgODEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiYWdlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikucHJvcGVydGllcygiYWdlIikgfV0sIAotICAgIGdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25NYXRjaF9tYXRjaGVkX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIH1dLCAKLSAgICBnX2luamVjdFhsaXN0MV9saXN0Ml9saXN0M1hfZm9sZF9hc1htWF9tZXJnZVZYc2VsZWN0WG1YX2xpbWl0WGxvY2FsXzFYX3VuZm9sZFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YX3RhaWxYbG9jYWxYX3VuZm9sZFhfdG9fbWF0Y2g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXSwgWyJuYW1lIiwgIm1hcmtvIl1dKSwgbmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXSwgWyJuYW1lIiwgIm1hcmtvIl1dKSwgbmV3IE1hcChbWyJjcmVhdGVkIiwgIk4iXV0pKS5mb2xkKCkuYXMoIm0iKS5tZXJnZVYoX18uc2VsZWN0KCJtIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgibSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAotICAgIGdfaW5qZWN0WGxpc3QxX2xpc3QyX2xpc3QzWF9mb2xkX2FzWG1YX21lcmdlVlhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19jcmVhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXSwgWyJuYW1lIiwgInN0ZXBoZW4iXV0pLCBuZXcgTWFwKFtbVC5sYWJlbCwgInBlcnNvbiJdLCBbIm5hbWUiLCAic3RlcGhlbiJdXSksIG5ldyBNYXAoW1siY3JlYXRlZCIsICJOIl1dKSkuZm9sZCgpLmFzKCJtIikubWVyZ2VWKF9fLnNlbGVjdCgibSIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoIm0iKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoIm0iKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5oYXNOb3QoImNyZWF0ZWQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH1dLCAKLSAgICBnX1ZfYWdlX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5taW4oKSB9XSwgCi0gICAgZ19WX2Zvb19taW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikubWluKCkgfV0sIAotICAgIGdfVl9uYW1lX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikubWluKCkgfV0sIAotICAgIGdfVl9hZ2VfZm9sZF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21pblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLm1pbihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21pblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLm1pbihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKLSAgICBnX1ZfZm9vX2ZvbGRfbWluWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX25hbWVfZm9sZF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoImFnZSIpLm1pbigpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9taW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18uYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm1pbigpKSB9XSwgCi0gICAgZ19WX2Zvb19pbmplY3RYOTk5OTk5OTk5OVhfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLmluamVjdCg5OTk5OTk5OTk5KS5taW4oKSB9XSwgCi0gICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX21pblhsb2NhbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLm1pbihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoImFnZSIpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKSkuZm9sZCgpKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfbmFtZV9vcmRlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKSB9XSwgCi0gICAgZ19WX29yZGVyX2J5WG5hbWVfYXNjWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuYXNjKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX29yZGVyX2J5WG5hbWVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX291dEVfb3JkZXJfYnlYd2VpZ2h0X2Rlc2NYX3dlaWdodDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoIndlaWdodCIsIE9yZGVyLmRlc2MpLnZhbHVlcygid2VpZ2h0IikgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfb3JkZXJfYnlYc2h1ZmZsZVhfc2VsZWN0WGFfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNlbGVjdCgiYSIsICJiIikgfV0sIAotICAgIGdfVl9ib3RoX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlX2Rlc2NYX2xpbWl0WDVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5oYXNMYWJlbCgicGVyc29uIikub3JkZXIoKS5ieSgiYWdlIiwgT3JkZXIuZGVzYykubGltaXQoNSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX29yZGVyX2J5WGtleV9kZXNjWF9rZXk6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQua2V5LCBPcmRlci5kZXNjKS5rZXkoKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfZ3JvdXBfYnlYbmFtZVhfYnlYb3V0RV93ZWlnaHRfc3VtWF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieShfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMpIH1dLCAKLSAgICBnX1ZfbWFwWGJvdGhFX3dlaWdodF9mb2xkWF9vcmRlcl9ieVhzdW1YbG9jYWxYX2Rlc2NYX2J5WGNvdW50WGxvY2FsWF9kZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWFwKF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKS5vcmRlcigpLmJ5KF9fLnN1bShTY29wZS5sb2NhbCksIE9yZGVyLmRlc2MpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykgfV0sIAotICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfYnlYbmFtZV9vcmRlcl9ieVhkZXNjWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfdW5mb2xkX29yZGVyX2J5WHZhbHVlc19kZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieShfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkudW5mb2xkKCkub3JkZXIoKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKSB9XSwgCi0gICAgZ19WX2FzWHZYX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfc3VtWGxvY2FsWF9hc1hzWF9zZWxlY3RYdl9zWF9vcmRlcl9ieVhzZWxlY3RYc1hfZGVzY1hfYnlYc2VsZWN0WHZYX25hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLm1hcChfXy5ib3RoRSgpLnZhbHVlcygid2VpZ2h0IikuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpLmFzKCJzIikuc2VsZWN0KCJ2IiwgInMiKS5vcmRlcigpLmJ5KF9fLnNlbGVjdCgicyIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoInYiKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiLCBPcmRlci5kZXNjKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX29yZGVyX2J5WG91dEVfY291bnRfZGVzY1hfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoX18ub3V0RSgpLmNvdW50KCksIE9yZGVyLmRlc2MpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ19WX29yZGVyX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZfZm9sZF9vcmRlclhsb2NhbFhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieSgiYWdlIikgfV0sIAotICAgIGdfVl9mb2xkX29yZGVyWGxvY2FsWF9ieVhhZ2VfZGVzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoImFnZSIsIE9yZGVyLmRlc2MpIH1dLCAKLSAgICBnX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcihfXy5oYXNMYWJlbCgicGVyc29uIiksIF9fLmhhcygic29mdHdhcmUiLCAibmFtZSIsICJsb3AiKSkub3JkZXIoKS5ieSgiYWdlIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkub3IoX18uaGFzTGFiZWwoInBlcnNvbiIpLCBfXy5oYXMoInNvZnR3YXJlIiwgIm5hbWUiLCAibG9wIikpLm9yZGVyKCkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZfaGFzWHNvbmdfbmFtZV9PSEJPWVhfb3V0WGZvbGxvd2VkQnlYX291dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX2J5WHNvbmdUeXBlX2Rlc2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInNvbmciLCAibmFtZSIsICJPSCBCT1kiKS5vdXQoImZvbGxvd2VkQnkiKS5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiKS5ieSgic29uZ1R5cGUiLCBPcmRlci5kZXNjKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29uZ1hfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2J5WG5hbWVYX3JhbmdlWDExMF8xMjBYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb25nIikub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIiwgT3JkZXIuZGVzYykuYnkoIm5hbWUiKS5yYW5nZSgxMTAsIDEyMCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9lbGVtZW50TWFwX29yZGVyWGxvY2FsWF9ieVhrZXlzX2Rlc2NYdW5mb2xkOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuZGVzYykudW5mb2xkKCkgfV0sIAotICAgIGdfVlgxWF9lbGVtZW50TWFwX29yZGVyWGxvY2FsWF9ieVhrZXlzX2FzY1h1bmZvbGQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5hc2MpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZYMVhfdmFsdWVzWGFnZVhfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9wYWdlUmFua19oYXNYcGFnZVJhbmtYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wYWdlUmFuaygpLmhhcygiZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmsiKSB9XSwgCi0gICAgZ19WX291dFhjcmVhdGVkWF9wYWdlUmFua193aXRoWGVkZ2VzX2JvdGhFWF93aXRoWHByb3BlcnR5TmFtZV9wcm9qZWN0UmFua1hfd2l0aFh0aW1lc18wWF92YWx1ZU1hcFhuYW1lX3Byb2plY3RSYW5rWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikucGFnZVJhbmsoKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlcyIsIF9fLmJvdGhFKCkpLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSIsICJwcm9qZWN0UmFuayIpLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzIiwgMCkudmFsdWVNYXAoIm5hbWUiLCAicHJvamVjdFJhbmsiKSB9XSwgCi0gICAgZ19WX3BhZ2VSYW5rX29yZGVyX2J5WHBhZ2VSYW5rX2Rlc2NYX2J5WG5hbWVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieSgiZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmsiLCBPcmRlci5kZXNjKS5ieSgibmFtZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZfcGFnZVJhbmtfb3JkZXJfYnlYcGFnZVJhbmtfZGVzY1hfbmFtZV9saW1pdFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucGFnZVJhbmsoKS5vcmRlcigpLmJ5KCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFuayIsIE9yZGVyLmRlc2MpLnZhbHVlcygibmFtZSIpLmxpbWl0KDIpIH1dLCAKLSAgICBnX1ZfcGFnZVJhbmtfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfd2l0aFhwcm9wZXJ0eU5hbWVfZnJpZW5kUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYZnJpZW5kUmFua1hfbWF0aFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMiLCBfXy5vdXRFKCJrbm93cyIpKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUiLCAiZnJpZW5kUmFuayIpLnByb2plY3QoIm5hbWUiLCAiZnJpZW5kUmFuayIpLmJ5KCJuYW1lIikuYnkoX18udmFsdWVzKCJmcmllbmRSYW5rIikubWF0aCgiY2VpbChfICogMTAwKSIpKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfcGFnZVJhbmtfd2l0aFhwcm9wZXJ0eU5hbWVfa3BhZ2VSYW5rWF9wcm9qZWN0X2J5WG5hbWVYX2J5WHZhbHVlc1hwYWdlUmFua1hfbWF0aFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5wYWdlUmFuaygpLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSIsICJwYWdlUmFuayIpLnByb2plY3QoIm5hbWUiLCAicGFnZVJhbmsiKS5ieSgibmFtZSIpLmJ5KF9fLnZhbHVlcygicGFnZVJhbmsiKS5tYXRoKCJjZWlsKF8gKiAxMDApIikpIH1dLCAKLSAgICBnX1ZfcGFnZVJhbmtfd2l0aFhwcm9wZXJ0eU5hbWVfcGFnZVJhbmtYX2FzWGFYX291dFhrbm93c1hfcGFnZVJhbmtfYXNYYlhfc2VsZWN0WGFfYlhfYnlfYnlYbWF0aFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lIiwgInBhZ2VSYW5rIikuYXMoImEiKS5vdXQoImtub3dzIikudmFsdWVzKCJwYWdlUmFuayIpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5ieSgpLmJ5KF9fLm1hdGgoImNlaWwoXyAqIDEwMCkiKSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfaGFzWG5hbWVfcmlwcGxlWF9wYWdlUmFua1gxWF93aXRoWGVkZ2VzX2luRVhjcmVhdGVkWF93aXRoWHRpbWVzXzFYX3dpdGhYcHJvcGVydHlOYW1lX3ByaW9yc1hfaW5YY3JlYXRlZFhfdW5pb25YYm90aF9faWRlbnRpdHlYX3ZhbHVlTWFwWG5hbWVfcHJpb3JzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuaGFzKCJuYW1lIiwgInJpcHBsZSIpLnBhZ2VSYW5rKDEuMCkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMiLCBfXy5pbkUoImNyZWF0ZWQiKSkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXMiLCAxKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUiLCAicHJpb3JzIikuaW5fKCJjcmVhdGVkIikudW5pb24oX18uYm90aCgpLCBfXy5pZGVudGl0eSgpKS52YWx1ZU1hcCgibmFtZSIsICJwcmlvcnMiKSB9XSwgCi0gICAgZ19WX291dFhjcmVhdGVkWF9ncm91cFhtWF9ieVhsYWJlbFhfcGFnZVJhbmtYMVhfd2l0aFhwcm9wZXJ0eU5hbWVfcGFnZVJhbmtYX3dpdGhYZWRnZXNfaW5FWF93aXRoWHRpbWVzXzFYX2luWGNyZWF0ZWRYX2dyb3VwWG1YX2J5WHBhZ2VSYW5rWF9jYXBYbVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwKCJtIikuYnkoVC5sYWJlbCkucGFnZVJhbmsoMS4wKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUiLCAicGFnZVJhbmsiKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlcyIsIF9fLmluRSgpKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcyIsIDEpLmluXygiY3JlYXRlZCIpLmdyb3VwKCJtIikuYnkoInBhZ2VSYW5rIikuY2FwKCJtIikgfV0sIAotICAgIGdfVlgxWF9uYW1lX3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoIm5hbWUiKS5wYXRoKCkgfV0sIAotICAgIGdfVlgxWF9vdXRfcGF0aF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KCJhZ2UiKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aF9ieVhpdFhfYnlYbmFtZVhfYnlYbGFuZ1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpLmJ5KCkuYnkoIm5hbWUiKS5ieSgibGFuZyIpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9oYXNYYWdlXzI5WF9hc1hjWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJiIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKS5wYXRoKCkgfV0sIAotICAgIGdfVlgxWF9vdXRFWGNyZWF0ZWRYX2luVl9pbkVfb3V0Vl9wYXRoOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgiY3JlYXRlZCIpLmluVigpLmluRSgpLm91dFYoKS5wYXRoKCkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3BhdGhfZnJvbVhiWF90b1hjWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikucGF0aCgpLmZyb21fKCJiIikudG8oImMiKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLnBhdGgoKS5ieSgiYWdlIikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoImFnZSIpIH1dLCAKLSAgICBnX2luamVjdFgxX251bGxfbnVsbFhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpIH1dLCAKLSAgICBnX2luamVjdFgxX251bGxfbnVsbFhfcGF0aF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpLmRlZHVwKCkgfV0sIAotICAgIGdfVl9wZWVyUHJlc3N1cmVfaGFzWGNsdXN0ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wZWVyUHJlc3N1cmUoKS5oYXMoImdyZW1saW4ucGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbS5jbHVzdGVyIikgfV0sIAotICAgIGdfVl9wZWVyUHJlc3N1cmVfd2l0aFhwcm9wZXJ0eU5hbWVfY2x1c3Rlclhfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfcGFnZVJhbmtYMVhfYnlYcmFua1hfd2l0aFhlZGdlc19vdXRFWGtub3dzWF93aXRoWHRpbWVzXzJYX2dyb3VwX2J5WGNsdXN0ZXJYX2J5WHJhbmtfc3VtWF9saW1pdFgxMDBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoXygifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lIiwgImNsdXN0ZXIiKS53aXRoXygifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXMiLCBfXy5vdXRFKCJrbm93cyIpKS5wYWdlUmFuaygxLjApLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSIsICJyYW5rIikud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMiLCBfXy5vdXRFKCJrbm93cyIpKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcyIsIDEpLmdyb3VwKCkuYnkoImNsdXN0ZXIiKS5ieShfXy52YWx1ZXMoInJhbmsiKS5zdW0oKSkubGltaXQoMTAwKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX3JpcHBsZVhfaW5YY3JlYXRlZFhfcGVlclByZXNzdXJlX3dpdGhYZWRnZXNfb3V0RVhfd2l0aHlYcHJvcGVydHlOYW1lX2NsdXN0ZXJYX3JlcGVhdFh1bmlvblhpZGVudGl0eV9fYm90aFhfdGltZXNYMlhfZGVkdXBfdmFsdWVNYXBYbmFtZV9jbHVzdGVyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgInJpcHBsZSIpLmluXygiY3JlYXRlZCIpLnBlZXJQcmVzc3VyZSgpLndpdGhfKCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlcyIsIF9fLm91dEUoKSkud2l0aF8oIn50aW5rZXJwb3AucGVlclByZXNzdXJlLnByb3BlcnR5TmFtZSIsICJjbHVzdGVyIikucmVwZWF0KF9fLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmJvdGgoKSkpLnRpbWVzKDIpLmRlZHVwKCkudmFsdWVNYXAoIm5hbWUiLCAiY2x1c3RlciIpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9wcm9kdWN0WGluamVjdFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLnByb2R1Y3QoX18uaW5qZWN0KDEpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9wcm9kdWN0WFZfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLnByb2R1Y3QoX18uVigpLmZvbGQoKSkgfV0sIAotICAgIGdfVl9mb2xkX3Byb2R1Y3RYY29uc3RhbnRYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudChudWxsKSkgfV0sIAotICAgIGdfVl9mb2xkX3Byb2R1Y3RYVlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9wcm9kdWN0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkucHJvZHVjdCgyKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5wcm9kdWN0KG51bGwpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYbmFtZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKSkgfV0sIAotICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9saW1pdFgzWF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhhc2NYX2xpbWl0WDJYX2ZvbGRYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmxpbWl0KDMpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5saW1pdCgyKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX3Byb2R1Y3RYTUFSS09YX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkucHJvZHVjdChbIk1BUktPIl0pLnVuZm9sZCgpIH1dLCAKLSAgICBnX2luamVjdFhtYXJrb1hfcHJvZHVjdFhWX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsibWFya28iXSkucHJvZHVjdChfXy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9wcm9kdWN0WGR1bGxlc19zZWF0dGxlX3ZhbmNvdXZlclhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkucHJvZHVjdChbImR1bGxlcyIsICJzZWF0dGxlIiwgInZhbmNvdXZlciJdKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGFzY1hfZm9sZF9wcm9kdWN0WGNvbnN0YW50WDI3WF9mb2xkWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKS5wcm9kdWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX3Byb2R1Y3RYZGF2ZV9rZWx2aW5YX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikucHJvZHVjdChbImRhdmUiLCAia2VsdmluIl0pLnVuZm9sZCgpIH1dLCAKLSAgICBnX2luamVjdFhhX251bGxfYlhfcHJvZHVjdFhhX2NYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkucHJvZHVjdChbImEiLCAiYyJdKS51bmZvbGQoKSB9XSwgCi0gICAgZ19pbmplY3RYYV9udWxsX2JYX3Byb2R1Y3RYYV9udWxsX2NYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkucHJvZHVjdChbImEiLCBudWxsLCAiYyJdKS51bmZvbGQoKSB9XSwgCi0gICAgZ19pbmplY3RYM190aHJlZVhfcHJvZHVjdFhmaXZlX3RocmVlXzdYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzMsICJ0aHJlZSJdKS5wcm9kdWN0KFsiZml2ZSIsICJ0aHJlZSIsIDddKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvamVjdFhhX2JYX2J5WG91dEVfY291bnRYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5wcm9qZWN0KCJhIiwgImIiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1Zfb3V0WGNyZWF0ZWRYX3Byb2plY3RYYV9iWF9ieVhuYW1lWF9ieVhpblhjcmVhdGVkWF9jb3VudFhfb3JkZXJfYnlYc2VsZWN0WGJYX19kZXNjWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLnByb2plY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikuYnkoX18uaW5fKCJjcmVhdGVkIikuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoImIiKSwgT3JkZXIuZGVzYykuc2VsZWN0KCJhIikgfV0sIAotICAgIGdfVl92YWx1ZU1hcF9wcm9qZWN0WHhYX2J5WHNlbGVjdFhuYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkucHJvamVjdCgieCIpLmJ5KF9fLnNlbGVjdCgibmFtZSIpKSB9XSwgCi0gICAgZ19WX3Byb2plY3RYYV9iWF9ieVhpbkVfY291bnRYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb2plY3QoImEiLCAiYiIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9wcm9qZWN0WGFfYlhfYnlYaW5FX2NvdW50WF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkucHJvamVjdCgiYSIsICJiIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZVhfcHJvcGVydGllc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS5wcm9wZXJ0aWVzKCJuYW1lIikudmFsdWUoKSB9XSwgCi0gICAgZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYbmFtZV9hZ2VYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnByb3BlcnRpZXMoIm5hbWUiLCAiYWdlIikudmFsdWUoKSB9XSwgCi0gICAgZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYYWdlX25hbWVYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnByb3BlcnRpZXMoImFnZSIsICJuYW1lIikudmFsdWUoKSB9XSwgCi0gICAgZ19WX3Byb3BlcnRpZXNYbmFtZV9hZ2VfbnVsbFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiLCAiYWdlIiwgbnVsbCkudmFsdWUoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lX2FnZV9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIiwgImFnZSIsIG51bGwpIH1dLCAKLSAgICBnX2luamVjdFhfX2ZlYXR1cmVfX190ZXN0X19udWxsWF9yVHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZlYXR1cmUgICIsICJvbmUgdGVzdCAiLCBudWxsLCAiIiwgIiAiLCAi44CAYWJjIiwgImFiY+OAgCIsICLjgIBhYmPjgIAiLCAi44CA44CAIikuclRyaW0oKSB9XSwgCi0gICAgZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfclRyaW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbIiAgZmVhdHVyZSAgIiwgIiBvbmUgdGVzdCAiLCBudWxsLCAiIiwgIiAiLCAi44CAYWJjIiwgImFiY+OAgCIsICLjgIBhYmPjgIAiLCAi44CA44CAIl0pLnJUcmltKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYX19mZWF0dXJlX19YX3JUcmltOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiICBmZWF0dXJlICAiKS5yVHJpbSgpIH1dLCAKLSAgICBnX2luamVjdFhMaXN0WGFfYlhYX3JUcmltOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCAiYiJdKS5yVHJpbSgpIH1dLCAKLSAgICBnX2luamVjdFhMaXN0WDFfMlhYX3JUcmltWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDJdKS5yVHJpbShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfclRyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLnJUcmltKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9yVHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLnJUcmltKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RfbnVsbFhfcmVwbGFjZVhoX2pYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgidGhhdCIsICJ0aGlzIiwgInRlc3QiLCBudWxsKS5yZXBsYWNlKCJoIiwgImoiKSB9XSwgCi0gICAgZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RfbnVsbFhfZm9sZF9yZXBsYWNlWGxvY2FsX2hfalg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ0aGF0IiwgInRoaXMiLCAidGVzdCIsIG51bGwpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCAiaCIsICJqIikgfV0sIAotICAgIGdfaW5qZWN0WExpc3RYYV9iWGNYX3JlcGxhY2VYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkucmVwbGFjZSgiYSIsICJiIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfcmVwbGFjZVhudWxsX2lYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5yZXBsYWNlKG51bGwsICJnIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfcmVwbGFjZVhhX2lYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5yZXBsYWNlKCJwIiwgImciKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9vcmRlcl9mb2xkX3JlcGxhY2VYbG9hY2xfYV9pWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgInAiLCAiZyIpIH1dLCAKLSAgICBnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfcmV2ZXJzZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZlYXR1cmUiLCAidGVzdCBvbmUiLCBudWxsKS5yZXZlcnNlKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfcmV2ZXJzZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikucmV2ZXJzZSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfcmV2ZXJzZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5yZXZlcnNlKCkgfV0sIAotICAgIGdfVl9vdXRfcGF0aF9ieVhuYW1lWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5wYXRoKCkuYnkoIm5hbWUiKS5yZXZlcnNlKCkgfV0sIAotICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfcmV2ZXJzZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikucmV2ZXJzZSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWGFnZVhfZm9sZF9vcmRlclhsb2NhbFhfYnlYZGVzY1hfcmV2ZXJzZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KE9yZGVyLmRlc2MpLnJldmVyc2UoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX29yZGVyWGxvY2FsWF9ieV9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCkucmV2ZXJzZSgpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5yZXZlcnNlKCkgfV0sIAotICAgIGdfaW5qZWN0WGJYX3JldmVyc2U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJiIikucmV2ZXJzZSgpIH1dLCAKLSAgICBnX2luamVjdFgzX3RocmVlWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMywgInRocmVlIl0pLnJldmVyc2UoKSB9XSwgCi0gICAgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFfYlg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikgfV0sIAotICAgIGdfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikuc2VsZWN0KCJhIikgfV0sIAotICAgIGdfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikuc2VsZWN0KCJhIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2FzWGFYX291dF9hZ2dyZWdhdGVYeFhfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYWdncmVnYXRlKCJ4IikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVl9hc1hhWF9uYW1lX29yZGVyX2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5X1hpdFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKS5ieSgpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfZ3JlbWxpblhfaW5FWHVzZXNYX29yZGVyX2J5WHNraWxsX2FzY1hfYXNYYVhfb3V0Vl9hc1hiWF9zZWxlY3RYYV9iWF9ieVhza2lsbFhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJncmVtbGluIikuaW5FKCJ1c2VzIikub3JkZXIoKS5ieSgic2tpbGwiLCBPcmRlci5hc2MpLmFzKCJhIikub3V0VigpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5ieSgic2tpbGwiKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1Zfd2hlcmVYX3ZhbHVlWG5hbWVYX2lzWG1hcmtvWFhfYXNYYVhfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy52YWx1ZXMoIm5hbWUiKS5pcygibWFya28iKSkuYXMoImEiKS5zZWxlY3QoImEiKSB9XSwgCi0gICAgZ19WX2xhYmVsX2dyb3VwQ291bnRfYXNYeFhfc2VsZWN0WHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sYWJlbCgpLmdyb3VwQ291bnQoKS5hcygieCIpLnNlbGVjdCgieCIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9tYXBYYm90aEVfbGFiZWxfZ3JvdXBDb3VudFhfYXNYclhfc2VsZWN0WHBfclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5hcygicCIpLm1hcChfXy5ib3RoRSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpKS5hcygiciIpLnNlbGVjdCgicCIsICJyIikgfV0sIAotICAgIGdfVl9jaG9vc2VYb3V0RV9jb3VudF9pc1gwWF9fYXNYYVhfX2FzWGJYWF9jaG9vc2VYc2VsZWN0WGFYX19zZWxlY3RYYVhfX3NlbGVjdFhiWFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpLmlzKHh4MSksIF9fLmFzKCJhIiksIF9fLmFzKCJiIikpLmNob29zZShfXy5zZWxlY3QoImEiKSwgX18uc2VsZWN0KCJhIiksIF9fLnNlbGVjdCgiYiIpKSB9XSwgCi0gICAgZ19WWDFYX2dyb3VwWGFYX2J5WGNvbnN0YW50WGFYWF9ieVhuYW1lWF9zZWxlY3RYYVhfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuZ3JvdXAoImEiKS5ieShfXy5jb25zdGFudCgiYSIpKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkuYmFycmllcigpLnNlbGVjdCgiYSIpLnNlbGVjdCgiYSIpIH1dLCAKLSAgICBnX1ZYMVhfYXNYaGVyZVhfb3V0X3NlbGVjdFhoZXJlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJoZXJlIikub3V0KCkuc2VsZWN0KCJoZXJlIikgfV0sIAotICAgIGdfVlg0WF9vdXRfYXNYaGVyZVhfaGFzWGxhbmdfamF2YVhfc2VsZWN0WGhlcmVYOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkuYXMoImhlcmUiKS5vdXQoKS5zZWxlY3QoImhlcmUiKSB9XSwgCi0gICAgZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLm91dCgpLmFzKCJoZXJlIikuaGFzKCJsYW5nIiwgImphdmEiKS5zZWxlY3QoImhlcmUiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WWDFYX291dEVfYXNYaGVyZVhfaW5WX2hhc1huYW1lX3ZhZGFzWF9zZWxlY3RYaGVyZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkuYXMoImhlcmUiKS5pblYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKS5zZWxlY3QoImhlcmUiKSB9XSwgCi0gICAgZ19WWDFYX291dEVYa25vd3NYX2hhc1h3ZWlnaHRfMVhfYXNYaGVyZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAxLjApLmFzKCJoZXJlIikuaW5WKCkuaGFzKCJuYW1lIiwgImpvc2giKS5zZWxlY3QoImhlcmUiKSB9XSwgCi0gICAgZ19WWDFYX291dEVYa25vd3NYX2FzWGhlcmVYX2hhc1h3ZWlnaHRfMVhfYXNYZmFrZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikuYXMoImhlcmUiKS5oYXMoIndlaWdodCIsIDEuMCkuYXMoImZha2UiKS5pblYoKS5oYXMoIm5hbWUiLCAiam9zaCIpLnNlbGVjdCgiaGVyZSIpIH1dLCAKLSAgICBnX1ZfYXNYaGVyZVhvdXRfbmFtZV9zZWxlY3RYaGVyZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJoZXJlIikub3V0KCkudmFsdWVzKCJuYW1lIikuc2VsZWN0KCJoZXJlIikgfV0sIAotICAgIGdfVl9vdXRYY3JlYXRlZFhfdW5pb25YYXNYcHJvamVjdFhfaW5YY3JlYXRlZFhfaGFzWG5hbWVfbWFya29YX3NlbGVjdFhwcm9qZWN0WF9fYXNYcHJvamVjdFhfaW5YY3JlYXRlZFhfaW5Ya25vd3NYX2hhc1huYW1lX21hcmtvWF9zZWxlY3RYcHJvamVjdFhYX2dyb3VwQ291bnRfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLnVuaW9uKF9fLmFzKCJwcm9qZWN0IikuaW5fKCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuc2VsZWN0KCJwcm9qZWN0IiksIF9fLmFzKCJwcm9qZWN0IikuaW5fKCJjcmVhdGVkIikuaW5fKCJrbm93cyIpLmhhcygibmFtZSIsICJtYXJrbyIpLnNlbGVjdCgicHJvamVjdCIpKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWFhfc2VsZWN0WGFYX2J5WHRhaWxYbG9jYWxYX25hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bnRpbChfXy5vdXQoKS5vdXQoKSkucmVwZWF0KF9fLmluXygpLmFzKCJhIikpLnNlbGVjdCgiYSIpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwpLnZhbHVlcygibmFtZSIpKSB9XSwgCi0gICAgZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WGtleXNYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfYXNYbmFtZVhfYXNYbGFuZ3VhZ2VYX2FzWGNyZWF0b3JzWF9zZWxlY3RYbmFtZV9sYW5ndWFnZV9jcmVhdG9yc1hfYnlYbmFtZVhfYnlYbGFuZ1hfYnlYaW5YY3JlYXRlZFhfbmFtZV9mb2xkX29yZGVyWGxvY2FsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmFzKCJuYW1lIikuYXMoImxhbmd1YWdlIikuYXMoImNyZWF0b3JzIikuc2VsZWN0KCJuYW1lIiwgImxhbmd1YWdlIiwgImNyZWF0b3JzIikuYnkoIm5hbWUiKS5ieSgibGFuZyIpLmJ5KF9fLmluXygiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkpIH1dLCAKLSAgICBnX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF91bmZvbGRfc2VsZWN0WGtleXNYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkgfV0sIAotICAgIGdfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkgfV0sIAotICAgIGdfVl91bnRpbFhvdXRfb3V0WF9yZXBlYXRYaW5fYXNYYVhfaW5fYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bnRpbChfXy5vdXQoKS5vdXQoKSkucmVwZWF0KF9fLmluXygpLmFzKCJhIikuaW5fKCkuYXMoImIiKSkuc2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkgfV0sIAotICAgIGdfVl9hc1hhWF93aGVyZVhvdXRYa25vd3NYWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikud2hlcmUoX18ub3V0KCJrbm93cyIpKS5zZWxlY3QoImEiKSB9XSwgCi0gICAgZ19WWDFYX2FzWGFYX3JlcGVhdFhvdXRfYXNYYVhYX3RpbWVzWDJYX3NlbGVjdFhmaXJzdF9hWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikucmVwZWF0KF9fLm91dCgpLmFzKCJhIikpLnRpbWVzKDIpLnNlbGVjdChQb3AuZmlyc3QsICJhIikgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX2xvY2FsWHNlbGVjdFhhX2JYX2J5WG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKS5sb2NhbChfXy5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikpIH1dLCAKLSAgICBnX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGxhc3RfYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hcygiYSIpLnJlcGVhdChfXy5vdXQoKS5hcygiYSIpKS50aW1lcygyKS5zZWxlY3QoUG9wLmxhc3QsICJhIikgfV0sIAotICAgIGdfVlgxWF9vdXRFWGtub3dzWF9hc1hoZXJlWF9oYXNYd2VpZ2h0XzFYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpLmFzKCJoZXJlIikuaGFzKCJ3ZWlnaHQiLCAxLjApLmluVigpLmhhcygibmFtZSIsICJqb3NoIikuc2VsZWN0KCJoZXJlIikgfV0sIAotICAgIGdfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfYXNYYlhfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieV9ieVhuYW1lWF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJiIikuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkgfV0sIAotICAgIGdfVl9hc1hhWF9ncm91cFhtWF9ieV9ieVhib3RoRV9jb3VudFhfYmFycmllcl9zZWxlY3RYbVhfc2VsZWN0WHNlbGVjdFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuZ3JvdXAoIm0iKS5ieSgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdCgibSIpLnNlbGVjdChfXy5zZWxlY3QoImEiKSkgfV0sIAotICAgIGdfVl9hc1hhWF9ncm91cFhtWF9ieV9ieVhib3RoRV9jb3VudFhfYmFycmllcl9zZWxlY3RYbVhfc2VsZWN0WHNlbGVjdFhhWFhfYnlYbWF0aFhfcGx1c19YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5ncm91cCgibSIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KCJtIikuc2VsZWN0KF9fLnNlbGVjdCgiYSIpKS5ieShfXy5tYXRoKCJfK18iKSkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGFYX3NlbGVjdFhhbGxfY29uc3RhbnRYYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYSIpLnNlbGVjdChQb3AuYWxsLCBfXy5jb25zdGFudCgiYSIpKSB9XSwgCi0gICAgZ19WX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KCJhIikgfV0sIAotICAgIGdfVl9zZWxlY3RYYVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNlbGVjdCgiYSIpLmNvdW50KCkgfV0sIAotICAgIGdfVl9zZWxlY3RYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KCJhIiwgImIiKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoImEiKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdCgiYSIsICJiIikgfV0sIAotICAgIGdfVl9zZWxlY3RYZmlyc3RfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNlbGVjdChQb3AuZmlyc3QsICJhIikgfV0sIAotICAgIGdfVl9zZWxlY3RYZmlyc3RfYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgImEiLCAiYiIpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBfc2VsZWN0WGZpcnN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuZmlyc3QsICJhIikgfV0sIAotICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYZmlyc3RfYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmZpcnN0LCAiYSIsICJiIikgfV0sIAotICAgIGdfVl9zZWxlY3RYbGFzdF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCAiYSIpIH1dLCAKLSAgICBnX1Zfc2VsZWN0WGxhc3RfYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCAiYSIsICJiIikgfV0sIAotICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYbGFzdF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmxhc3QsICJhIikgfV0sIAotICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYbGFzdF9hX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgImEiLCAiYiIpIH1dLCAKLSAgICBnX1Zfc2VsZWN0WGFsbF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5hbGwsICJhIikgfV0sIAotICAgIGdfVl9zZWxlY3RYYWxsX2FfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNlbGVjdChQb3AuYWxsLCAiYSIsICJiIikgfV0sIAotICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYYWxsX2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCAiYSIpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBfc2VsZWN0WGFsbF9hX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCAiYSIsICJiIikgfV0sIAotICAgIGdfVl9hc1hhX2JYX291dF9hc1hjWF9wYXRoX3NlbGVjdFhrZXlzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiLCAiYiIpLm91dCgpLmFzKCJjIikucGF0aCgpLnNlbGVjdChDb2x1bW4ua2V5cykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIsICJiIikub3V0KCkuYXMoImMiKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSB9XSwgCi0gICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfYmFycmllcl9hc1hhWF9vdXRYa25vd3Nfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuYmFycmllcigpLmFzKCJhIikub3V0KCJrbm93cyIpLnNlbGVjdCgiYSIpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9lbGVtZW50TWFwWG5hbWVYX2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVhfc2VsZWN0WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuZWxlbWVudE1hcCgibmFtZSIpLmFzKCJhIikudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KCJhIikuc2VsZWN0KCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2NvdW50X2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5jb3VudCgpLmFzKCJhIikudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KCJhIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3BhdGhfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wYXRoKCkuYXMoImEiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoImEiKS51bmZvbGQoKSB9XSwgCi0gICAgZ19FWDExWF9wcm9wZXJ0aWVzWHdlaWdodFhfYXNYYVhfc2VsZWN0WGFYX2J5WGtleVg6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLkUoZWlkMTEpLnByb3BlcnRpZXMoIndlaWdodCIpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoVC5rZXkpIH1dLCAKLSAgICBnX0VYMTFYX3Byb3BlcnRpZXNYd2VpZ2h0WF9hc1hhWF9zZWxlY3RYYVhfYnlYdmFsdWVYOiBbZnVuY3Rpb24oe2csIGVpZDExfSkgeyByZXR1cm4gZy5FKGVpZDExKS5wcm9wZXJ0aWVzKCJ3ZWlnaHQiKS5hcygiYSIpLnNlbGVjdCgiYSIpLmJ5KFQudmFsdWUpIH1dLCAKLSAgICBnX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZfYXNYYV9uWF9zZWxlY3RYYV9uWF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIsICJuIikuc2VsZWN0KCJhIiwgIm4iKS5ieSgiYWdlIikuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoImFnZSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGtfbnVsbFhfaW5qZWN0WHhYX3NlbGVjdFhrWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiayIsIG51bGwpLmluamVjdCgieCIpLnNlbGVjdCgiayIpIH1dLCAKLSAgICBnX1Zfb3V0X2luX3NlbGVjdFhhbGxfYV9hX2FYX2J5WHVuZm9sZF9uYW1lX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoIkEiKS5wcm9wZXJ0eSgibmFtZSIsICJhMSIpLmFzKCJhMSIpLmFkZFYoIkIiKS5wcm9wZXJ0eSgibmFtZSIsICJiMSIpLmFzKCJiMSIpLmFkZEUoImFiIikuZnJvbV8oImExIikudG8oImIxIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuaW5fKCkuYXMoImEiKS5zZWxlY3QoUG9wLmFsbCwgImEiLCAiYSIsICJhIikuYnkoX18udW5mb2xkKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX2FzWGxhYmVsWF9sb2NhbFhhZ2dyZWdhdGVYeFhfc2VsZWN0WHhYX3NlbGVjdFhsYWJlbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJsYWJlbCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgieCIpKS5iYXJyaWVyKCkuc2VsZWN0KCJ4Iikuc2VsZWN0KCJsYWJlbCIpIH1dLCAKLSAgICBnX1ZfbmFtZV9hc1hhWF9zZWxlY3RYZmlyc3RfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuc2VsZWN0KFBvcC5maXJzdCwgImEiKSB9XSwgCi0gICAgZ19WX25hbWVfYXNYYVhfc2VsZWN0WGxhc3RfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuc2VsZWN0KFBvcC5sYXN0LCAiYSIpIH1dLCAKLSAgICBnX1ZfbmFtZV9hc1hhWF9zZWxlY3RYbWl4ZWRfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKSB9XSwgCi0gICAgZ19WX25hbWVfYXNYYVhfc2VsZWN0WGFsbF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuYXMoImEiKS5zZWxlY3QoUG9wLmFsbCwgImEiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfbGVuZ3RoX2FzWGFYX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuY29uY2F0KCJYIikuYXMoImEiKS5sZW5ndGgoKS5hcygiYSIpLnNlbGVjdCgiYSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2FzWGFYX2NvbmNhdFhYWF9hc1hhWF9sZW5ndGhfYXNYYVhfc2VsZWN0WGZpcnN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoImEiKS5jb25jYXQoIlgiKS5hcygiYSIpLmxlbmd0aCgpLmFzKCJhIikuc2VsZWN0KFBvcC5maXJzdCwgImEiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfbGVuZ3RoX2FzWGFYX3NlbGVjdFhsYXN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoImEiKS5jb25jYXQoIlgiKS5hcygiYSIpLmxlbmd0aCgpLmFzKCJhIikuc2VsZWN0KFBvcC5sYXN0LCAiYSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2FzWGFYX2NvbmNhdFhYWF9hc1hhWF9jb25jYXRYWVpYX2FzWGFYX3NlbGVjdFhtaXhlZF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuY29uY2F0KCJYIikuYXMoImEiKS5jb25jYXQoIllaIikuYXMoImEiKS5zZWxlY3QoUG9wLm1peGVkLCAiYSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2FzWGFYX2NvbmNhdFhYWF9hc1hhWF9jb25jYXRYWVpYX2FzWGFYX3NlbGVjdFhhbGxfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5hcygiYSIpLmNvbmNhdCgiWCIpLmFzKCJhIikuY29uY2F0KCJZWiIpLmFzKCJhIikuc2VsZWN0KFBvcC5hbGwsICJhIikgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJhIikub3V0KCkuYXMoImEiKS5zZWxlY3QoUG9wLm1peGVkLCAiYSIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAotICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhhbGxfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KFBvcC5hbGwsICJhIikuYnkoX18udW5mb2xkKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCi0gICAgZ19WX3Nob3J0ZXN0UGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkgfV0sIAotICAgIGdfVl9ib3RoX2RlZHVwX3Nob3J0ZXN0UGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmRlZHVwKCkuc2hvcnRlc3RQYXRoKCkgfV0sIAotICAgIGdfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmluY2x1ZGVFZGdlcyIpIH1dLCAKLSAgICBnX1Zfc2hvcnRlc3RQYXRoX2RpcmVjdGlvblhJTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcyIsIERpcmVjdGlvbi5JTikgfV0sIAotICAgIGdfVl9zaG9ydGVzdFBhdGhfZWRnZXNYb3V0RVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcyIsIF9fLm91dEUoKSkgfV0sIAotICAgIGdfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZF9lZGdlc1hvdXRFWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmluY2x1ZGVFZGdlcyIpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcyIsIF9fLm91dEUoKSkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5zaG9ydGVzdFBhdGgoKSB9XSwgCi0gICAgZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfbWFya29YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldCIsIF9fLmhhcygibmFtZSIsICJtYXJrbyIpKSB9XSwgCi0gICAgZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYdmFsdWVzWG5hbWVYX2lzWG1hcmtvWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQiLCBfXy52YWx1ZXMoIm5hbWUiKS5pcygibWFya28iKSkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNMYWJlbFhzb2Z0d2FyZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0IiwgX18uaGFzTGFiZWwoInNvZnR3YXJlIikpIH1dLCAKLSAgICBnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfam9zaFhYX2Rpc3RhbmNlWHdlaWdodFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQiLCBfXy5oYXMoIm5hbWUiLCAiam9zaCIpKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UiLCAid2VpZ2h0IikgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9kYW5pZWxYX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfc3RlcGhlblhYX2VkZ2VzWGJvdGhFWHVzZXNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImRhbmllbCIpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQiLCBfXy5oYXMoIm5hbWUiLCAic3RlcGhlbiIpKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXMiLCBfXy5ib3RoRSgidXNlcyIpKSB9XSwgCi0gICAgZ19WX2hhc1hzb25nX25hbWVfTUlHSFRfQVNfV0VMTFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYc29uZ19uYW1lX01BWUJFX1lPVV9LTk9XX0hPV19JX0ZFRUxYWF9lZGdlc1hvdXRFWGZvbGxvd2VkQnlYWF9kaXN0YW5jZVh3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInNvbmciLCAibmFtZSIsICJNSUdIVCBBUyBXRUxMIikuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldCIsIF9fLmhhcygic29uZyIsICJuYW1lIiwgIk1BWUJFIFlPVSBLTk9XIEhPVyBJIEZFRUwiKSkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzIiwgX18ub3V0RSgiZm9sbG93ZWRCeSIpKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UiLCAid2VpZ2h0IikgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoX21heERpc3RhbmNlWDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgubWF4RGlzdGFuY2UiLCAxKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX3ZhZGFzWF9zaG9ydGVzdFBhdGhfZGlzdGFuY2VYd2VpZ2h0WF9tYXhEaXN0YW5jZVgxXzNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UiLCAid2VpZ2h0Iikud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLm1heERpc3RhbmNlIiwgMS4zKSB9XSwgCi0gICAgZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RYX3NwaWx0WGhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgidGhhdCIsICJ0aGlzIiwgInRlc3QiLCBudWxsKS5zcGxpdCgiaCIpIH1dLCAKLSAgICBnX2luamVjdFhoZWxsb193b3JsZFhfc3BpbHRYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJoZWxsbyB3b3JsZCIpLnNwbGl0KG51bGwpIH1dLCAKLSAgICBnX2luamVjdFh0aGF0X3RoaXNfdGVzdF9udWxsWF9zcGxpdFhlbXB0eVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ0aGF0IiwgInRoaXMiLCAidGVzdCIsIG51bGwpLnNwbGl0KCIiKSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFhhX2JYY1hfc3BsaXRYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkuc3BsaXQoImEiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfc3BsaXRYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5zcGxpdChudWxsKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9zcGxpdFhsb2NhbF9hWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS5zcGxpdChTY29wZS5sb2NhbCwgImEiKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9zcGxpdFhsb2NhbF9lbXB0eVhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsICIiKS51bmZvbGQoKSB9XSwgCi0gICAgZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RYX3N1YnN0cmluZ1gxXzhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgidGVzdCIsICJoZWxsbyB3b3JsZCIsIG51bGwpLnN1YnN0cmluZygxLCA4KSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFhhX2JYY1hfc3Vic3RyaW5nWDFfMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYWEiLCAiYmIiXSkuc3Vic3RyaW5nKDEsIDIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnN1YnN0cmluZygyKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYMV80WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIikuc3Vic3RyaW5nKDEsIDQpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZVhuYW1lWF9vcmRlcl9mb2xkX3N1YnN0cmluZ1hsb2NhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAyKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9vcmRlcl9mb2xkX3N1YnN0cmluZ1hsb2NhbF8xXzRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS5zdWJzdHJpbmcoU2NvcGUubG9jYWwsIDEsIDQpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3ZhbHVlWG5hbWVYX3N1YnN0cmluZ1gxXzBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoMSwgMCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlWG5hbWVYX3N1YnN0cmluZ1huZWczWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLnN1YnN0cmluZygtMykgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWDFfbmVnMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnN1YnN0cmluZygxLCAtMSkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWG5lZzRfMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnN1YnN0cmluZygtNCwgMikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWG5lZzNfbmVnMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnN1YnN0cmluZygtMywgLTEpIH1dLCAKLSAgICBnX1ZfaW5qZWN0WDEyN2JfMWJYX3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxMjcsIDEpLnN1bSgpIH1dLCAKLSAgICBnX1ZfaW5qZWN0WF8xMjhiX18xYlhfc3VtWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KC0xMjgsIC0xKS5zdW0oKSB9XSwgCi0gICAgZ19WX2luamVjdFgzMjc2N3NfMXNYX3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgzMjc2NywgMSkuc3VtKCkgfV0sIAotICAgIGdfVl9pbmplY3RYXzMyNzY4c19fMXNYX3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgtMzI3NjgsIC0xKS5zdW0oKSB9XSwgCi0gICAgZ19WX2luamVjdFgyMTQ3NDgzNjQ3aV8xaVhfc3VtWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDIxNDc0ODM2NDcsIDEpLnN1bSgpIH1dLCAKLSAgICBnX1ZfaW5qZWN0WF8yMTQ3NDgzNjQ4aV9fMWlYX3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgtMjE0NzQ4MzY0OCwgLTEpLnN1bSgpIH1dLCAKLSAgICBnX1ZfYWdlX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5zdW0oKSB9XSwgCi0gICAgZ19WX2Zvb19zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikuc3VtKCkgfV0sIAotICAgIGdfVl9hZ2VfZm9sZF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfZm9vX2ZvbGRfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9ncm91cF9ieVhuYW1lWF9ieVhib3RoRV93ZWlnaHRfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuZ3JvdXAoKS5ieSgibmFtZSIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnN1bShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLnN1bSgpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLnN1bSgpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnN1bShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS51bmZvbGQoKS5zdW0oKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS51bmZvbGQoKS5zdW0oKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbF8xMF81X251bGxYX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCwgMTAsIDUsIG51bGwpLnN1bSgpIH1dLCAKLSAgICBnX2luamVjdFhsaXN0WG51bGxfMTBfNV9udWxsWFhfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsIDEwLCA1LCBudWxsXSkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLnN1bShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoImFnZSIpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKSkuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfYWdlX2luamVjdFgxMDAwblhfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmluamVjdCgxMDAwKS5zdW0oKSB9XSwgCi0gICAgZ19pbmplY3RYMWJfMmJfM2JYX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgMiwgMykuc3VtKCkgfV0sIAotICAgIGdfaW5qZWN0WDFiXzJiXzNzWF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIsIDMpLnN1bSgpIH1dLCAKLSAgICBnX2luamVjdFgxYl8yNmJfM2lYX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgMiwgMykuc3VtKCkgfV0sIAotICAgIGdfaW5qZWN0WDFmXzI2Zl8zZlhfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyLCAzKS5zdW0oKSB9XSwgCi0gICAgZ19WX2FnZV9pbmplY3RYMTAwMG5YX2ZvbGRfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pbmplY3QoMTAwMCkuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfaW5qZWN0WDFiXzJiXzNiWF9mb2xkX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIsIDMpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX2luamVjdFgxYl8yYl8zc1hfZm9sZF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYMWJfMjZiXzNpWF9mb2xkX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIsIDMpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX2luamVjdFgxZl8yNmZfM2ZYX2ZvbGRfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgMiwgMykuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF90b0xvd2VyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiRkVBVFVSRSIsICJ0RVN0IiwgbnVsbCkudG9Mb3dlcigpIH1dLCAKLSAgICBnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfdG9Mb3dlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiRkVBVFVSRSIsICJ0RVN0IiwgbnVsbF0pLnRvTG93ZXIoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX2luamVjdFhMaXN0WGFfYlhYX3RvTG93ZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsICJiIl0pLnRvTG93ZXIoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF90b0xvd2VyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIk1BUktPIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJWQURBUyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJMT1AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIkpPU0giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJSSVBQTEUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIlBFVEVSIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLnRvTG93ZXIoKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF90b0xvd2VyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJNQVJLTyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiVkFEQVMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiTE9QIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJKT1NIIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiUklQUExFIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJQRVRFUiIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS50b0xvd2VyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX3RvTG93ZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIk1BUktPIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJWQURBUyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJMT1AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIkpPU0giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJSSVBQTEUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIlBFVEVSIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLnRvTG93ZXIoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfdG9VcHBlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZlYXR1cmUiLCAidEVTdCIsIG51bGwpLnRvVXBwZXIoKSB9XSwgCi0gICAgZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX3RvVXBwZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImZlYXR1cmUiLCAidEVTdCIsIG51bGxdKS50b1VwcGVyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFhhX2JYWF90b1VwcGVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCAiYiJdKS50b1VwcGVyKCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfdG9VcHBlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikudG9VcHBlcigpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX3RvVXBwZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS50b1VwcGVyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX3RvVXBwZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS50b1VwcGVyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfdHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIiAgZmVhdHVyZSAgIiwgIiBvbmUgdGVzdCAiLCBudWxsLCAiIiwgIiAiLCAi44CAYWJjIiwgImFiY+OAgCIsICLjgIBhYmPjgIAiLCAi44CA44CAIikudHJpbSgpIH1dLCAKLSAgICBnX2luamVjdFhfX2ZlYXR1cmVfX190ZXN0X19udWxsWF90cmltWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyIgIGZlYXR1cmUgICIsICIgb25lIHRlc3QgIiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCJdKS50cmltKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19pbmplY3RYTGlzdFhhX2JYWF90cmltOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCAiYiJdKS50cmltKCkgfV0sIAotICAgIGdfaW5qZWN0WExpc3RYMV8yWFhfdHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSkudHJpbShTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl92YWx1ZXNYbmFtZVhfdHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICIgbWFya28gIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICIgIHZhZGFzICAiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICBsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2ggICIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgIHJpcHBsZSAgICIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikudHJpbSgpIH1dLCAKLSAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfdHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLnRyaW0oU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfbG9jYWxYb3V0RV9mb2xkWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm91dEUoKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBfdW5mb2xkX21hcFhzZWxlY3RYa2V5c1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnVuZm9sZCgpLm1hcChfXy5zZWxlY3QoQ29sdW1uLmtleXMpKSB9XSwgCi0gICAgZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc0lkWDZYWF9wYXRoX2J5WG5hbWVYX3VuZm9sZDogW2Z1bmN0aW9uKHtnLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXNJZCh2aWQ2KSkucGF0aCgpLmJ5KCJuYW1lIikudW5mb2xkKCkgfV0sIAotICAgIGdfVl92YWx1ZU1hcDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwWHRydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCh0cnVlKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibmFtZSIsICJhZ2UiKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwWHRydWVfbmFtZV9hZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCh0cnVlLCAibmFtZSIsICJhZ2UiKSB9XSwgCi0gICAgZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWF93aXRoWHRva2Vuc1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIpLndpdGhfKFdpdGhPcHRpb25zLnRva2VucykgfV0sIAotICAgIGdfVl92YWx1ZU1hcFhuYW1lX2FnZVhfd2l0aFh0b2tlbnNfbGFiZWxzWF9ieVh1bmZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibmFtZSIsICJhZ2UiKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmxhYmVscykuYnkoX18udW5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zX2lkc1hfYnlYdW5mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiLCAiYWdlIikud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5pZHMpLmJ5KF9fLnVuZm9sZCgpKSB9XSwgCi0gICAgZ19WWDFYX291dFhjcmVhdGVkWF92YWx1ZU1hcDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgiY3JlYXRlZCIpLnZhbHVlTWFwKCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2ZpbHRlclhvdXRFWGNyZWF0ZWRYWF92YWx1ZU1hcFh0cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZpbHRlcihfXy5vdXRFKCJjcmVhdGVkIikpLnZhbHVlTWFwKHRydWUpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9maWx0ZXJYb3V0RVhjcmVhdGVkWFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuZmlsdGVyKF9fLm91dEUoImNyZWF0ZWQiKSkudmFsdWVNYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMpIH1dLCAKLSAgICBnX1ZYMVhfdmFsdWVNYXBYbmFtZV9sb2NhdGlvblhfYnlYdW5mb2xkWF9ieTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlTWFwKCJuYW1lIiwgImxvY2F0aW9uIikuYnkoX18udW5mb2xkKCkpLmJ5KCkgfV0sIAotICAgIGdfVl92YWx1ZU1hcFhuYW1lX2FnZV9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiLCAiYWdlIiwgbnVsbCkgfV0sIAotICAgIGdfVl92YWx1ZU1hcFhuYW1lX2FnZVhfYnlYaXNYeFhYYnlYdW5mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiLCAiYWdlIikuYnkoX18uaXMoIngiKSkuYnkoX18udW5mb2xkKCkpIH1dLCAKLSAgICBnX1ZYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVihudWxsKSB9XSwgCi0gICAgZ19WWGxpc3RYbnVsbFhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVih4eDEpIH1dLCAKLSAgICBnX1ZYMV9udWxsWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEsIG51bGwpIH1dLCAKLSAgICBnX1ZYbGlzdFgxXzJfM1hYX25hbWU6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKHh4MSkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlhsaXN0WHYxX3YyX3YzWFhfbmFtZTogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoeHgxKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCi0gICAgZ19WWHYxWF9vdXQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKSB9XSwgCi0gICAgZ19WWDFYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpIH1dLCAKLSAgICBnX1ZYMlhfaW46IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5pbl8oKSB9XSwgCi0gICAgZ19WWDRYX2JvdGg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoKCkgfV0sIAotICAgIGdfVlgxWF9vdXRFOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpIH1dLCAKLSAgICBnX1ZYMlhfb3V0RTogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLmluRSgpIH1dLCAKLSAgICBnX1ZYNFhfYm90aEVYY3JlYXRlZFg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSgiY3JlYXRlZCIpIH1dLCAKLSAgICBnX1ZYNFhfYm90aEVYY3JlYXRlZHZhclg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmJvdGhFKHh4MSkgfV0sIAotICAgIGdfVlg0WF9ib3RoRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmJvdGhFKCkgfV0sIAotICAgIGdfVl9vdXRfb3V0RV9pblZfaW5FX2luVl9ib3RoX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dEUoKS5pblYoKS5pbkUoKS5pblYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVlgyWF9pbkU6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5ib3RoRSgpIH1dLCAKLSAgICBnX1ZYMVhfb3V0WGtub3dzWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgia25vd3MiKSB9XSwgCi0gICAgZ19WWDFBc1N0cmluZ1hfb3V0WGtub3dzWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgia25vd3MiKSB9XSwgCi0gICAgZ19WWDFYX291dFhrbm93c19jcmVhdGVkWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgia25vd3MiLCAiY3JlYXRlZCIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0WGtub3dzdmFyX2NyZWF0ZWR2YXJYOiBbZnVuY3Rpb24oe2csIHh4MywgeHgyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCh4eDIsIHh4MykgfV0sIAotICAgIGdfVl9vdXRfb3V0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKSB9XSwgCi0gICAgZ19WWDFYX291dF9vdXRfb3V0OiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkub3V0KCkub3V0KCkgfV0sIAotICAgIGdfVlgxWF9vdXRfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1ZYMVhfdG9fWE9VVF9rbm93c1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS50byhEaXJlY3Rpb24uT1VULCAia25vd3MiKSB9XSwgCi0gICAgZ19WWDFfMl8zXzRYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkNCwgdmlkMywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQ0LCB2aWQzLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJzb2Z0d2FyZSIsICJuYW1lIiwgImxvcCIpLmRyb3AoKSB9LCBmdW5jdGlvbih7ZywgdmlkNCwgdmlkMywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0KSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWGxvb3BzWF9ib3RoRVhzZWxmWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoImxvb3BzIikuYm90aEUoInNlbGYiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWGxvb3BzWF9ib3RoWHNlbGZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgibG9vcHMiKS5ib3RoKCJzZWxmIikgfV0sIAotICAgIGdfaW5qZWN0WDFYX1ZYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLlYobnVsbCkgfV0sIAotICAgIGdfaW5qZWN0WDFYX1ZYMV9udWxsWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuVih2aWQxLCBudWxsKSB9XSwgCi0gICAgZ19WWDFYX1ZfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKLSAgICBnX1Zfb3V0WGtub3dzWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgia25vd3MiKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9HYXJjaWFYX2luWHN1bmdCeVhfYXNYc29uZ1hfVl9oYXNYbmFtZV9XaWxsaWVfRGl4b25YX2luWHdyaXR0ZW5CeVhfd2hlcmVYZXFYc29uZ1hYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYXJ0aXN0IiwgIm5hbWUiLCAiR2FyY2lhIikuaW5fKCJzdW5nQnkiKS5hcygic29uZyIpLlYoKS5oYXMoImFydGlzdCIsICJuYW1lIiwgIldpbGxpZV9EaXhvbiIpLmluXygid3JpdHRlbkJ5Iikud2hlcmUoUC5lcSgic29uZyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfVlhzb2Z0d2FyZVhfYWRkSW5FWHVzZXNfcFg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5hcygicCIpLlYoeHgxKS5hZGRFKCJ1c2VzIikuZnJvbV8oInAiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoInVzZXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoInVzZXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDIpLm91dEUoInVzZXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDMpLmluRSgidXNlcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkub3V0RSgidXNlcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuaW5FKCJ1c2VzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJ1c2VzIikgfV0sIAotICAgIEluamVjdFhudWxsWF9lcVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5lcShudWxsKSkgfV0sIAotICAgIEluamVjdFhudWxsWF9uZXFYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmlzKFAubmVxKG51bGwpKSB9XSwgCi0gICAgSW5qZWN0WG51bGxYX2x0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5pcyhQLmx0KG51bGwpKSB9XSwgCi0gICAgSW5qZWN0WG51bGxYX2x0ZVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5sdGUobnVsbCkpIH1dLCAKLSAgICBJbmplY3RYbnVsbFhfZ3RYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3QobnVsbCkpIH1dLCAKLSAgICBJbmplY3RYbnVsbFhfZ3RlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5pcyhQLmd0ZShudWxsKSkgfV0sIAotICAgIEluamVjdFhOYU5YX2VxWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZXEoTnVtYmVyLk5hTikpIH1dLCAKLSAgICBJbmplY3RYTmFOWF9uZXFYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5uZXEoTnVtYmVyLk5hTikpIH1dLCAKLSAgICBJbmplY3RYTmFOWF9sdFhOYU5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmx0KE51bWJlci5OYU4pKSB9XSwgCi0gICAgSW5qZWN0WE5hTlhfbHRlWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubHRlKE51bWJlci5OYU4pKSB9XSwgCi0gICAgSW5qZWN0WE5hTlhfZ3RYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndChOdW1iZXIuTmFOKSkgfV0sIAotICAgIEluamVjdFhOYU5YX2d0ZVhOYU5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmd0ZShOdW1iZXIuTmFOKSkgfV0sIAotICAgIEluamVjdFgxZFhfZXFYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmVxKE51bWJlci5OYU4pKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9uZXFYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLm5lcShOdW1iZXIuTmFOKSkgfV0sIAotICAgIEluamVjdFgxZFhfbHRYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmx0KE51bWJlci5OYU4pKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9sdGVYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmx0ZShOdW1iZXIuTmFOKSkgfV0sIAotICAgIEluamVjdFgxZFhfZ3RYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmd0KE51bWJlci5OYU4pKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9ndGVYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmd0ZShOdW1iZXIuTmFOKSkgfV0sIAotICAgIEluamVjdFhOYU5YX2VxWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmVxKG51bGwpKSB9XSwgCi0gICAgSW5qZWN0WE5hTlhfbmVxWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLm5lcShudWxsKSkgfV0sIAotICAgIEluamVjdFhOYU5YX2x0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmx0KG51bGwpKSB9XSwgCi0gICAgSW5qZWN0WE5hTlhfbHRlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmx0ZShudWxsKSkgfV0sIAotICAgIEluamVjdFhOYU5YX2d0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmd0KG51bGwpKSB9XSwgCi0gICAgSW5qZWN0WE5hTlhfZ3RlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmd0ZShudWxsKSkgfV0sIAotICAgIEluamVjdFhmb29YX2VxWDFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZvbyIpLmlzKFAuZXEoMS4wKSkgfV0sIAotICAgIEluamVjdFhmb29YX25lcVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmb28iKS5pcyhQLm5lcSgxLjApKSB9XSwgCi0gICAgSW5qZWN0WGZvb1hfbHRYMWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiZm9vIikuaXMoUC5sdCgxLjApKSB9XSwgCi0gICAgSW5qZWN0WGZvb1hfbHRlWDFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZvbyIpLmlzKFAubHRlKDEuMCkpIH1dLCAKLSAgICBJbmplY3RYZm9vWF9ndFgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmb28iKS5pcyhQLmd0KDEuMCkpIH1dLCAKLSAgICBJbmplY3RYZm9vWF9ndGVYMWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiZm9vIikuaXMoUC5ndGUoMS4wKSkgfV0sIAotICAgIEluamVjdFgxZFhfZXFYZm9vWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmVxKCJmb28iKSkgfV0sIAotICAgIEluamVjdFgxZFhfbmVxWGZvb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5uZXEoImZvbyIpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9sdFhmb29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLjApLmlzKFAubHQoImZvbyIpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9sdGVYZm9vWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmx0ZSgiZm9vIikpIH1dLCAKLSAgICBJbmplY3RYMWRYX2d0WGZvb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5ndCgiZm9vIikpIH1dLCAKLSAgICBJbmplY3RYMWRYX2d0ZVhmb29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLjApLmlzKFAuZ3RlKCJmb28iKSkgfV0sIAotICAgIEluamVjdFgxZFhfYW5kWHRydWVfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWHRydWVfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAuZXEoMSkuYW5kKFAuZ3QoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9hbmRYdHJ1ZV9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWHRydWVfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmVxKDEpLmFuZChQLmx0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfYW5kWHRydWVfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1h0cnVlX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5lcSgxKS5hbmQoUC5sdChOdW1iZXIuTmFOKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2FuZFhmYWxzZV90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWGZhbHNlX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5hbmQoUC5ndCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2FuZFhmYWxzZV9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1hmYWxzZV9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubmVxKDEpLmFuZChQLmx0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfYW5kWGZhbHNlX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWGZhbHNlX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkuYW5kKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9hbmRYZXJyb3JfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWGVycm9yX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmx0KE51bWJlci5OYU4pLmFuZChQLmd0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfYW5kWGVycm9yX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5pcyhQLmd0KDIpKSkgfV0sIAotICAgIEluamVjdFgxZFhfaXNYZXJyb3JfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmx0KE51bWJlci5OYU4pLmFuZChQLmd0KDIpKSkgfV0sIAotICAgIEluamVjdFgxZFhfYW5kWGVycm9yX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5pcyhQLmd0KE51bWJlci5OYU4pKSkgfV0sIAotICAgIEluamVjdFgxZFhfaXNYZXJyb3JfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmx0KE51bWJlci5OYU4pLmFuZChQLmd0KE51bWJlci5OYU4pKSkgfV0sIAotICAgIEluamVjdFgxZFhfb3JYdHJ1ZV90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1h0cnVlX29yX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmVxKDEpLm9yKFAuZ3QoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9vclh0cnVlX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1h0cnVlX29yX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5lcSgxKS5vcihQLmx0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfb3JYdHJ1ZV9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkgfV0sIAotICAgIEluamVjdFgxZFhfaXNYdHJ1ZV9vcl9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAuZXEoMSkub3IoUC5sdChOdW1iZXIuTmFOKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX29yWGZhbHNlX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5vcihfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1hmYWxzZV9vcl90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkub3IoUC5ndCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX29yWGZhbHNlX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfaXNYZmFsc2Vfb3JfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5vcihQLmx0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfb3JYZmFsc2VfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5vcihfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1hmYWxzZV9vcl9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubmVxKDEpLm9yKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9vclhlcnJvcl90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLmlzKFAuZ3QoMCkpKSB9XSwgCi0gICAgSW5qZWN0WDFkWF9pc1hlcnJvcl9vcl90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5vcihQLmd0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfb3JYZXJyb3JfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5vcihfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndCgyKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWGVycm9yX29yX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5vcihQLmd0KDIpKSkgfV0sIAotICAgIEluamVjdFgxZFhfb3JYZXJyb3JfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5vcihfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndChOdW1iZXIuTmFOKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX2lzWGVycm9yX29yX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5vcihQLmd0KE51bWJlci5OYU4pKSkgfV0sIAotICAgIEluamVjdFgxZFhfbm90WHRydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5ub3QoX18uaXMoUC5ndCgwKSkpIH1dLCAKLSAgICBJbmplY3RYMWRYX25vdFhmYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm5vdChfXy5pcyhQLmx0KDApKSkgfV0sIAotICAgIEluamVjdFgxZFhfbm90WE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm5vdChfXy5pcyhQLmd0KE51bWJlci5OYU4pKSkgfV0sIAotICAgIEluamVjdFgxZFhfbm90WGlzWGVxWE5hTlhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkubm90KF9fLmlzKFAuZXEoTnVtYmVyLk5hTikpKSB9XSwgCi0gICAgSW5qZWN0WEluZlhfZXFYSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmVxKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIH1dLCAKLSAgICBJbmplY3RYSW5mWF9uZXFYSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLm5lcShOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB9XSwgCi0gICAgSW5qZWN0WE5lZ0luZlhfZXFYTmVnSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmVxKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpIH1dLCAKLSAgICBJbmplY3RYTmVnSW5mWF9uZXFYTmVnSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLm5lcShOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB9XSwgCi0gICAgSW5qZWN0WEluZlhfZ3RYTmVnSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmd0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpIH1dLCAKLSAgICBJbmplY3RYSW5mWF9sdFhOZWdJbmZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAubHQoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSkgfV0sIAotICAgIEluamVjdFhOZWdJbmZYX2x0WEluZlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkuaXMoUC5sdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB9XSwgCi0gICAgSW5qZWN0WE5lZ0luZlhfZ3RYSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmd0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIH1dLCAKLSAgICBQcmltaXRpdmVzX051bWJlcl9lcVhieXRlWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKLSAgICBQcmltaXRpdmVzX051bWJlcl9lcVhzaG9ydFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDEsIDEsIDEsIDEsIDEsIDEwMDAsIDEsIDFdKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSB9XSwgCi0gICAgUHJpbWl0aXZlc19OdW1iZXJfZXFYaW50WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKLSAgICBQcmltaXRpdmVzX051bWJlcl9lcVhsb25nWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKLSAgICBQcmltaXRpdmVzX051bWJlcl9lcVhiaWdpbnRYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkgfV0sIAotICAgIFByaW1pdGl2ZXNfTnVtYmVyX2VxWGZsb2F0WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKLSAgICBQcmltaXRpdmVzX051bWJlcl9lcVhkb3VibGVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkgfV0sIAotICAgIFByaW1pdGl2ZXNfTnVtYmVyX2VxWGJpZ2RlY2ltYWxYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkgfV0sIAotICAgIGdfVl92YWx1ZXNfb3JkZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygpLm9yZGVyKCkgfV0sIAotICAgIGdfVl9wcm9wZXJ0aWVzX29yZGVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSB9XSwgCi0gICAgZ19WX3Byb3BlcnRpZXNfb3JkZXJfaWQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmlkKCkgfV0sIAotICAgIGdfRV9wcm9wZXJ0aWVzX29yZGVyX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLnByb3BlcnR5KCJhIiwgMTApLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkucHJvcGVydHkoImEiLCAxMSkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5wcm9wZXJ0eSgiYSIsIDEyKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJhIiwgMTMpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkucHJvcGVydHkoImEiLCAxNCkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKS5wcm9wZXJ0eSgiYSIsIDE1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkgfV0sIAotICAgIGdfRV9wcm9wZXJ0aWVzX29yZGVyX2J5WGRlc2NYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLnByb3BlcnR5KCJhIiwgMTApLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkucHJvcGVydHkoImEiLCAxMSkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5wcm9wZXJ0eSgiYSIsIDEyKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJhIiwgMTMpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkucHJvcGVydHkoImEiLCAxNCkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKS5wcm9wZXJ0eSgiYSIsIDE1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnZhbHVlKCkgfV0sIAotICAgIGdfaW5qZWN0X29yZGVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgienp6IiwgImZvbyIsIHV1aWQucGFyc2UoIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCBbImEiLCAiYiIsICJjIiwgImQiXSwgMSwgbmV3IERhdGUoJzIwMjMtMDgtMDFUMDA6MDBaJyksIFsiYSIsICJiIiwgImMiXSwgbmV3IE1hcChbWyJhIiwgImEiXSwgWyJiIiwgImIiXV0pLCBudWxsLCAyLjAsIG5ldyBEYXRlKCcyMDIzLTAxLTAxVDAwOjAwWicpLCBuZXcgU2V0KFsieCIsICJ5IiwgInoiXSksIG5ldyBNYXAoW1siYSIsICJhIl0sIFsiYiIsIGZhbHNlXSwgWyJjIiwgImMiXV0pLCAiYmFyIiwgdXVpZC5wYXJzZSgiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxIiksIHRydWUsIGZhbHNlLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIE51bWJlci5OYU4sIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkub3JkZXIoKSB9XSwgCi0gICAgZ19pbmplY3Rfb3JkZXJfYnlYZGVzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ6enoiLCAiZm9vIiwgdXVpZC5wYXJzZSgiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxIiksIFsiYSIsICJiIiwgImMiLCAiZCJdLCAxLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMVQwMDowMFonKSwgWyJhIiwgImIiLCAiYyJdLCBuZXcgTWFwKFtbImEiLCAiYSJdLCBbImIiLCAiYiJdXSksIG51bGwsIDIuMCwgbmV3IERhdGUoJzIwMjMtMDEtMDFUMDA6MDBaJyksIG5ldyBTZXQoWyJ4IiwgInkiLCAieiJdKSwgbmV3IE1hcChbWyJhIiwgImEiXSwgWyJiIiwgZmFsc2VdLCBbImMiLCAiYyJdXSksICJiYXIiLCB1dWlkLnBhcnNlKCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEiKSwgdHJ1ZSwgZmFsc2UsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgTnVtYmVyLk5hTiwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9vcmRlcl9ieVhhc2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykgfV0sIAotICAgIGdfVl9vdXRfb3V0X29yZGVyX2J5WGRlc2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KCJoZWFkIikgfV0sIAotICAgIGdfVl9vdXRfb3V0X2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdCgiaGVhZCIpIH1dLCAKLSAgICBnX1Zfb3V0X291dEVfb3JkZXJfYnlYYXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSB9XSwgCi0gICAgZ19WX291dF9vdXRFX29yZGVyX2J5WGRlc2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXRFKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSB9XSwgCi0gICAgZ19WX291dF9vdXRFX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYYXNjWF9zZWxlY3RYaGVhZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dEUoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KCJoZWFkIikgfV0sIAotICAgIGdfVl9vdXRfb3V0RV9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0RSgpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KCJoZWFkIikgfV0sIAotICAgIGdfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWF92YWx1ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucHJvcGVydGllcygpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoImhlYWQiKS52YWx1ZSgpIH1dLCAKLSAgICBnX1Zfb3V0X291dF9wcm9wZXJ0aWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoImhlYWQiKS52YWx1ZSgpIH1dLCAKLSAgICBnX1Zfb3V0X291dF92YWx1ZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdCgiaGVhZCIpIH1dLCAKLSAgICBnX1Zfb3V0X291dF92YWx1ZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KCJoZWFkIikgfV0sIAotICAgIGdfVl92YWx1ZVhuYW1lWF9hZ2dyZWdhdGVYeFhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5hZ2dyZWdhdGUoIngiKS5jYXAoIngiKSB9XSwgCi0gICAgZ19WX2FnZ3JlZ2F0ZVh4WF9ieVhuYW1lWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJuYW1lIikuY2FwKCJ4IikgfV0sIAotICAgIGdfVl9vdXRfYWdncmVnYXRlWGFYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLmFnZ3JlZ2F0ZSgiYSIpLnBhdGgoKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYWdncmVnYXRlWHhYX2J5WGFnZVhfY2FwWHhYX2FzWHlYX3NlbGVjdFh5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJhZ2UiKS5jYXAoIngiKS5hcygieSIpLnNlbGVjdCgieSIpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWHhYX2J5WGFnZVhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5ieSgiYWdlIikuY2FwKCJ4IikgfV0sIAotICAgIGdfVl9sb2NhbFhhZ2dyZWdhdGVYeFhfYnlYYWdlWFhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoIngiKS5ieSgiYWdlIikpLmNhcCgieCIpIH1dLCAKLSAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2xvY2FsWGFnZ3JlZ2F0ZVh4WF9ieVhhZ2VYWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoIngiKS5ieSgiYWdlIikpLmNhcCgieCIpIH1dLCAKLSAgICBnX1ZfbG9jYWxYX2FnZ3JlZ2F0ZVhhX2J5WG5hbWVYWF9vdXRfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgibmFtZSIpKS5vdXQoKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WWDFYX2xvY2FsWGFnZ3JlZ2F0ZVhhWF9ieVhuYW1lWFhfb3V0X2xvY2FsWGFnZ3JlZ2F0ZVhhWF9ieVhuYW1lWFhfbmFtZV9jYXBYYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgibmFtZSIpKS5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgibmFtZSIpKS52YWx1ZXMoIm5hbWUiKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhX3NldFhfVl9ib3RoX25hbWVfbG9jYWxYYWdncmVnYXRlWF9hWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfc2V0X2lubGluZVhfVl9ib3RoX25hbWVfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCBuZXcgU2V0KFsiYWxpY2UiXSkpLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfbG9jYWxYYWdncmVnYXRlWGFYX2J5WG91dEVYY3JlYXRlZFhfY291bnRYWF9vdXRfb3V0X2xvY2FsWGFnZ3JlZ2F0ZVhhWF9ieVhpbkVYY3JlYXRlZFhfd2VpZ2h0X3N1bVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoX18ub3V0RSgiY3JlYXRlZCIpLmNvdW50KCkpKS5vdXQoKS5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieShfXy5pbkUoImNyZWF0ZWQiKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYeFhfYnlYdmFsdWVzWGFnZVhfaXNYZ3RYMjlYWFhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5ieShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMjkpKSkuY2FwKCJ4IikgfV0sIAotICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWHhYX2J5WHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhYX2NhcFh4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KF9fLnZhbHVlcygiYWdlIikuaXMoUC5ndCgyOSkpKS5jYXAoIngiKSB9XSwgCi0gICAgZ19WX2FnZ3JlZ2F0ZVh4WF9ieVhvdXRfb3JkZXJfYnlYbmFtZVhYX2NhcFh4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJ4IikuYnkoX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpKS5jYXAoIngiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYeFhfYnlYb3V0X29yZGVyX2J5WG5hbWVYWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoIngiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikpLmNhcCgieCIpIH1dLCAKLSAgICBnX1ZfYWdncmVnYXRlWGFYX2hhc1hwZXJzb25fYWdlX2d0ZVgzMFhYWF9jYXBYYVhfdW5mb2xkX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuaGFzKCJwZXJzb24iLCAiYWdlIiwgUC5ndGUoMzApKS5jYXAoImEiKS51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzFfc3VtWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEsIE9wZXJhdG9yLnN1bSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzFfc3VtWF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMSwgT3BlcmF0b3Iuc3VtKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzEyM19taW51c1hfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMTIzX21pbnVzWF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMTIzLCBPcGVyYXRvci5taW51cykuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8yX211bHRYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzJfbXVsdFhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDIsIE9wZXJhdG9yLm11bHQpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfODc2OTYwX2RpdlhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzg3Njk2MF9kaXZYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xX21pblhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xX21pblhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEsIE9wZXJhdG9yLm1pbikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xMDBfbWluWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEwMCwgT3BlcmF0b3IubWluKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMTAwX21pblhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEwMCwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzFfbWF4WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzFfbWF4WF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMSwgT3BlcmF0b3IubWF4KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhXzEwMF9tYXhYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMTAwLCBPcGVyYXRvci5tYXgpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xMDBfbWF4WF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxMDAsIE9wZXJhdG9yLm1heCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV90cnVlX2FuZFhfVl9jb25zdGFudFhmYWxzZVhfYWdncmVnYXRlWGFYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5hZ2dyZWdhdGUoImEiKS5jYXAoImEiKSB9XSwgCi0gICAgZ193aXRoU2lkZUVmZmVjdFhhX3RydWVfYW5kWF9WX2NvbnN0YW50WGZhbHNlWF9sb2NhbFhhZ2dyZWdhdGVYX2FYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCB0cnVlLCBPcGVyYXRvci5hbmQpLlYoKS5jb25zdGFudChmYWxzZSkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfdHJ1ZV9vclhfVl9jb25zdGFudFhmYWxzZVhfYWdncmVnYXRlWGFYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmFnZ3JlZ2F0ZSgiYSIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfdHJ1ZV9vclhfVl9jb25zdGFudFhmYWxzZVhfbG9jYWxYYWdncmVnYXRlWF9hWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgdHJ1ZSwgT3BlcmF0b3Iub3IpLlYoKS5jb25zdGFudChmYWxzZSkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV8yXzNfYWRkQWxsWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIFsxLCAyLCAzXSwgT3BlcmF0b3IuYWRkQWxsKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV8yXzNfYWRkQWxsWF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgWzEsIDIsIDNdLCBPcGVyYXRvci5hZGRBbGwpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV8yXzNfYXNzaWduWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIFsxLCAyLCAzXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV8yXzNfYXNzaWduWF9WX29yZGVyX2J5WGFnZVhfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFzc2lnbikuVigpLm9yZGVyKCkuYnkoImFnZSIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9sb2NhbFhhZ2dyZWdhdGVYYV9uYW1lWFhfb3V0X2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoIm5hbWUiKSkub3V0KCkuY2FwKCJhIikgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYYV9zZXRYX1ZfYm90aF9uYW1lX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRFX2luVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWF91bmZvbGRfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXRFKCkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpLnVuZm9sZCgpLmRlZHVwKCkgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0WGNyZWF0ZWRYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLm91dCgiY3JlYXRlZCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfcmVwZWF0WG91dF9sb2NhbFhhZ2dyZWdhdGVYYVhYWF90aW1lc1gyWF9jYXBYYVhfdW5mb2xkX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpKS50aW1lcygyKS5jYXAoImEiKS51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5ncm91cENvdW50KCkgfV0sIAotICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRYa25vd3NYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0WGNyZWF0ZWRYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkub3V0KCJrbm93cyIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXQoImNyZWF0ZWQiKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfbG9jYWxYYWdncmVnYXRlWGFYWF9pblhjcmVhdGVkWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dFhrbm93c1hfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5pbl8oImNyZWF0ZWQiKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkub3V0KCJrbm93cyIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9oYXNYd2VpZ2h0X2xndFgwXzVYWF9pblZfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVhfdW5mb2xkX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXRFKCkuaGFzKCJ3ZWlnaHQiLCBQLmd0KDAuNSkpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKS51bmZvbGQoKS5wYXRoKCkgfV0sIAotICAgIGdfVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX2JvdGhFX3NhbXBsZVgxWF9vdGhlclZfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVhfdW5mb2xkX2dyb3VwQ291bnRfYnlYbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuYm90aEUoKS5zYW1wbGUoMSkub3RoZXJWKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRFX2luVl9zaW1wbGVQYXRoX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYX3VuZm9sZF9oYXNMYWJlbFhzb2Z0d2FyZVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikudW5mb2xkKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuY291bnQoKSB9XSwgCi0gICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfdW5pb25Yb3V0X2luWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWF91bmZvbGRfZGVkdXBfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkudW5pb24oX18ub3V0KCksIF9fLmluXygpKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikudW5mb2xkKCkuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2hhc1huYW1lX2pvc2hYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9oYXNYd2VpZ2h0X2x0WDFfMFhYX2luVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dEVfaW5WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiam9zaCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXRFKCkuaGFzKCJ3ZWlnaHQiLCBQLmx0KDEuMCkpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXRFKCkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dEVfb3JkZXJfYnlYd2VpZ2h0WF9saW1pdFgxWF9pblZfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkub3V0RSgpLm9yZGVyKCkuYnkoIndlaWdodCIpLmxpbWl0KDEpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhhZ2dyZWdhdGVYYVhYX3RpbWVzWDJYX2NhcFhhWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoImEiKSkudGltZXMoMikuY2FwKCJhIikudW5mb2xkKCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfY2FwWGFYX3VuZm9sZF9ib3RoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5jYXAoImEiKS51bmZvbGQoKS5ib3RoKCkgfV0sIAotICAgIGdfVl9hZ2dyZWdhdGVYYVhfY2FwWGFYX3VuZm9sZF9iYXJyaWVyX2JvdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmNhcCgiYSIpLnVuZm9sZCgpLmJhcnJpZXIoKS5ib3RoKCkgfV0sIAotICAgIGdfVl9mYWlsOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mYWlsKCkgfV0sIAotICAgIGdfVl9mYWlsWG1zZ1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZhaWwoIm1zZyIpIH1dLCAKLSAgICBnX1ZfdW5pb25Yb3V0X2ZhaWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bmlvbihfXy5vdXQoKSwgX18uZmFpbCgpKSB9XSwgCi0gICAgZ19WX2dyb3VwX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVl9ncm91cF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9ncm91cF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuZ3JvdXAoKS5ieSgiYWdlIikgfV0sIAotICAgIGdfVl9ncm91cF9ieVhuYW1lWF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBfYnlYbmFtZVhfYnk6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieSgpIH1dLCAKLSAgICBnX1ZfaGFzWGxhbmdYX2dyb3VwX2J5WGxhbmdYX2J5WGNvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJsYW5nIikuZ3JvdXAoKS5ieSgibGFuZyIpLmJ5KF9fLmNvdW50KCkpIH1dLCAKLSAgICBnX1ZfZ3JvdXBfYnlYb3V0RV9jb3VudFhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS5ncm91cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS5ieSgibmFtZSIpIH1dLCAKLSAgICBnX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwX2J5WHNvbmdUeXBlWF9ieVhjb3VudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ib3RoKCJmb2xsb3dlZEJ5IikpLnRpbWVzKDIpLmdyb3VwKCkuYnkoInNvbmdUeXBlIikuYnkoX18uY291bnQoKSkgfV0sIAotICAgIGdfVl9ncm91cF9ieVh2YWx1ZXNYbmFtZVhfc3Vic3RyaW5nWDFYWF9ieVhjb25zdGFudFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKCJuYW1lIikuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKSkgfV0sIAotICAgIGdfVl9vdXRfZ3JvdXBfYnlYbGFiZWxYX3NlbGVjdFhwZXJzb25YX3VuZm9sZF9vdXRYY3JlYXRlZFhfbmFtZV9saW1pdFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkuZ3JvdXAoKS5ieShULmxhYmVsKS5zZWxlY3QoInBlcnNvbiIpLnVuZm9sZCgpLm91dCgiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpLmxpbWl0KDIpIH1dLCAKLSAgICBnX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb25nIikuZ3JvdXAoKS5ieSgibmFtZSIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpIH1dLCAKLSAgICBnX1Zfb3V0WGZvbGxvd2VkQnlYX2dyb3VwX2J5WHNvbmdUeXBlWF9ieVhib3RoRV9ncm91cF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImZvbGxvd2VkQnkiKS5ncm91cCgpLmJ5KCJzb25nVHlwZSIpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoIndlaWdodCIpLnN1bSgpKSkgfV0sIAotICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfZ3JvdXBYYVhfYnlYbGFiZWxYX2J5WHdlaWdodF9zdW1YX3dlaWdodF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoImEiKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoIndlaWdodCIpLnN1bSgpKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfb3V0WGNyZWF0ZWRYX2dyb3VwX2J5WG5hbWVYX2J5WHNlbGVjdFhwWF92YWx1ZXNYYWdlWF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoInAiKS5vdXQoImNyZWF0ZWQiKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18uc2VsZWN0KCJwIikudmFsdWVzKCJhZ2UiKS5zdW0oKSkgfV0sIAotICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KF9fLmxhYmVsKCkpLmJ5KF9fLmxhYmVsKCkuY291bnQoKSkgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X29yZGVyX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgUC53aXRoaW4oInZhZGFzIiwgInBldGVyIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKSkgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgUC53aXRoaW4oInZhZGFzIiwgInBldGVyIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5mb2xkKCkpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwX2J5X2J5WG91dF9vcmRlclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCBQLndpdGhpbigidmFkYXMiLCAicGV0ZXIiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkpIH1dLCAKLSAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwX2J5X2J5WG91dF9vcmRlcl9jb3VudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCBQLndpdGhpbigidmFkYXMiLCAicGV0ZXIiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X29yZGVyX2ZvbGRfY291bnRYbG9jYWxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFAud2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKSB9XSwgCi0gICAgZ19WX2dyb3VwX2J5X2J5WG91dF9sYWJlbF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9ncm91cF9ieV9ieVhvdXRfbGFiZWxfZGVkdXBfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9ncm91cF9ieV9ieVhvdXRfbGFiZWxfbGltaXRYMFhfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX2dyb3VwX2J5X2J5WG91dF9sYWJlbF9saW1pdFgxMFhfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMTApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX2dyb3VwX2J5X2J5WG91dF9sYWJlbF90YWlsWDEwWF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS50YWlsKDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9ncm91cFhhWF9ieVhuYW1lWF9ieV9zZWxlY3RYYVhfY291bnRYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KCJuYW1lIikuYnkoKS5zZWxlY3QoImEiKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9sb2NhbFhncm91cFhhWF9ieVhuYW1lWF9ieV9zZWxlY3RYYVhfY291bnRYbG9jYWxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uZ3JvdXAoImEiKS5ieSgibmFtZSIpLmJ5KCkuc2VsZWN0KCJhIikuY291bnQoU2NvcGUubG9jYWwpKSB9XSwgCi0gICAgZ19WX2dyb3VwX2J5WHZhbHVlc1huYW1lWFhfYnlYYm90aF9jb3VudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKCJuYW1lIikpLmJ5KF9fLmJvdGgoKS5jb3VudCgpKSB9XSwgCi0gICAgZ19WX291dFhjcmVhdGVkWF9ncm91cENvdW50X2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKSB9XSwgCi0gICAgZ19WX2dyb3VwQ291bnRfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KCJhZ2UiKSB9XSwgCi0gICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9ncm91cENvdW50X2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5ncm91cENvdW50KCkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikuZ3JvdXBDb3VudCgpIH1dLCAKLSAgICBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYYVhfYnlYbmFtZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS5ncm91cENvdW50KCJhIikuYnkoIm5hbWUiKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX291dFhjcmVhdGVkWF9uYW1lX2dyb3VwQ291bnRYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS52YWx1ZXMoIm5hbWUiKS5ncm91cENvdW50KCJhIikuY2FwKCJhIikgfV0sIAotICAgIGdfVl9yZXBlYXRYb3V0X2dyb3VwQ291bnRYYVhfYnlYbmFtZVhYX3RpbWVzWDJYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpLmdyb3VwQ291bnQoImEiKS5ieSgibmFtZSIpKS50aW1lcygyKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX2JvdGhfZ3JvdXBDb3VudFhhWF9ieVhsYWJlbFhfYXNYYlhfYmFycmllcl93aGVyZVhzZWxlY3RYYVhfc2VsZWN0WHNvZnR3YXJlWF9pc1hndFgyWFhYX3NlbGVjdFhiWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkuZ3JvdXBDb3VudCgiYSIpLmJ5KFQubGFiZWwpLmFzKCJiIikuYmFycmllcigpLndoZXJlKF9fLnNlbGVjdCgiYSIpLnNlbGVjdCgic29mdHdhcmUiKS5pcyhQLmd0KDIpKSkuc2VsZWN0KCJiIikudmFsdWVzKCJuYW1lIikgfV0sIAotICAgIGdfVl91bmlvblhvdXRYa25vd3NYX19vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhYX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW5pb24oX18ub3V0KCJrbm93cyIpLCBfXy5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKSkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5zdW0oKSB9XSwgCi0gICAgZ19WX2hhc1hub1hfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJubyIpLmdyb3VwQ291bnQoKSB9XSwgCi0gICAgZ19WX2hhc1hub1hfZ3JvdXBDb3VudFhhWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibm8iKS5ncm91cENvdW50KCJhIikuY2FwKCJhIikgfV0sIAotICAgIGdfVl91bmlvblhyZXBlYXRYb3V0WF90aW1lc1gyWF9ncm91cENvdW50WG1YX2J5WGxhbmdYWF9fcmVwZWF0WGluWF90aW1lc1gyWF9ncm91cENvdW50WG1YX2J5WG5hbWVYWF9jYXBYbVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZ3JvdXBDb3VudCgibSIpLmJ5KCJsYW5nIiksIF9fLnJlcGVhdChfXy5pbl8oKSkudGltZXMoMikuZ3JvdXBDb3VudCgibSIpLmJ5KCJuYW1lIikpLmNhcCgibSIpIH1dLCAKLSAgICBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYeFhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS5ncm91cENvdW50KCJ4IikuY2FwKCJ4IikgfV0sIAotICAgIGdfVl9ncm91cENvdW50X2J5WGJvdGhFX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkgfV0sIAotICAgIGdfVl9ib3RoX2xvY2FsWGdyb3VwQ291bnRYYVhYX291dF9jYXBYYVhfc2VsZWN0WGtleXNYX3VuZm9sZF9ib3RoX2xvY2FsWGdyb3VwQ291bnRYYVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmxvY2FsKF9fLmdyb3VwQ291bnQoImEiKSkub3V0KCkuY2FwKCJhIikuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudCgiYSIpKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfYm90aFhrbm93c1hfZ3JvdXBDb3VudF9ieVh2YWx1ZXNYbmFtZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5ib3RoKCJrbm93cyIpLmdyb3VwQ291bnQoKS5ieShfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKLSAgICBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRfYnlYbmFtZVhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikuZ3JvdXBDb3VudCgpLmJ5KCJuYW1lIikuYnkoImFnZSIpIH1dLCAKLSAgICBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYeFhfYnlYbmFtZVhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikuZ3JvdXBDb3VudCgieCIpLmJ5KCJuYW1lIikuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBDb3VudFhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cENvdW50KCJhIikuc2VsZWN0KCJhIikuY291bnQoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfbG9jYWxYZ3JvdXBDb3VudFhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uZ3JvdXBDb3VudCgiYSIpLnNlbGVjdCgiYSIpLmNvdW50KFNjb3BlLmxvY2FsKSkgfV0sIAotICAgIGdfVlgxWF9vdXRfbmFtZV9pbmplY3RYZGFuaWVsWF9hc1hhWF9tYXBYbGVuZ3RoWF9wYXRoOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkudmFsdWVzKCJuYW1lIikuaW5qZWN0KCJkYW5pZWwiKS5hcygiYSIpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIH1dLCAKLSAgICBnX2luamVjdFhudWxsXzFfM19udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCwgMSwgMywgbnVsbCkgfV0sIAotICAgIGdfaW5qZWN0WDEwXzIwX251bGxfMjBfMTBfMTBYX2dyb3VwQ291bnRYeFhfZGVkdXBfYXNYeVhfcHJvamVjdFhhX2JYX2J5X2J5WHNlbGVjdFh4WF9zZWxlY3RYc2VsZWN0WHlYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEwLCAyMCwgbnVsbCwgMjAsIDEwLCAxMCkuZ3JvdXBDb3VudCgieCIpLmRlZHVwKCkuYXMoInkiKS5wcm9qZWN0KCJhIiwgImIiKS5ieSgpLmJ5KF9fLnNlbGVjdCgieCIpLnNlbGVjdChfXy5zZWxlY3QoInkiKSkpIH1dLCAKLSAgICBnX2luamVjdFhuYW1lX21hcmtvX2FnZV9udWxsWF9zZWxlY3RYbmFtZV9hZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgTWFwKFtbIm5hbWUiLCAibWFya28iXSwgWyJhZ2UiLCBudWxsXV0pKS5zZWxlY3QoIm5hbWUiLCAiYWdlIikgfV0sIAotICAgIGdfaW5qZWN0WG51bGxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsIG51bGwpIH1dLCAKLSAgICBnX2luamVjdFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkgfV0sIAotICAgIGdfaW5qZWN0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgpIH1dLCAKLSAgICBnX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0WG51bGxfbnVsbFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKHh4MSkudmFsdWVzKCJhZ2UiKS5pbmplY3QobnVsbCwgbnVsbCkgfV0sIAotICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9pbmplY3RYbnVsbFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKHh4MSkudmFsdWVzKCJhZ2UiKS5pbmplY3QobnVsbCkgfV0sIAotICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9pbmplY3Q6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKHh4MSkudmFsdWVzKCJhZ2UiKS5pbmplY3QoKSB9XSwgCi0gICAgZ19pbmplY3RYbnVsbF8xXzNfbnVsbFhfYXNYYVhfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsLCAxLCAzLCBudWxsKS5hcygiYSIpLnNlbGVjdCgiYSIpIH1dLCAKLSAgICBnX2luamVjdFgxXzNYX2luamVjdFgxMDBfMzAwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgMykuaW5qZWN0KDEwMCwgMzAwKSB9XSwgCi0gICAgZ19pbmplY3RYMV8zXzEwMF8zMDBYX2xpc3Q6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAzLCAxMDAsIDMwMF0pIH1dLCAKLSAgICBnX2luamVjdFgxXzNfMTAwXzMwMFhfc2V0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgU2V0KFsxLCAzLCAxMDAsIDMwMF0pKSB9XSwgCi0gICAgZ19pbmplY3RYMV8xWF9zZXQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBTZXQoWzEsIDFdKSkgfV0sIAotICAgIGdfaW9fcmVhZFhrcnlvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbygiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmtyeW8iKS5yZWFkKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3J5b1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvIikud2l0aF8oSU8ucmVhZGVyLCBJTy5ncnlvKS5yZWFkKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX2lvX3JlYWRYZ3JhcGhzb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmlvKCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4uanNvbiIpLnJlYWQoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAotICAgIGdfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaHNvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uIikud2l0aF8oSU8ucmVhZGVyLCBJTy5ncmFwaHNvbikucmVhZCgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9XSwgCi0gICAgZ19pb19yZWFkWGdyYXBobWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmlvKCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sIikucmVhZCgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9XSwgCi0gICAgZ19pb19yZWFkX3dpdGhYcmVhZGVyX2dyYXBobWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmlvKCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sIikud2l0aF8oSU8ucmVhZGVyLCBJTy5ncmFwaG1sKS5yZWFkKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDEyN2JYX2luamVjdFgxYlhfc2Fja1hzdW1YX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMTI3KS5pbmplY3QoMSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSB9XSwgCi0gICAgZ193aXRoU2Fja1gzMjc2N3NYX2luamVjdFgxc1hfc2Fja1hzdW1YX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMzI3NjcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDIxNDc0ODM2NDdpWF9pbmplY3RYMWlYX3NhY2tYc3VtWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDIxNDc0ODM2NDcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDFfNzk3NjkzMTM0ODYyMzE1N0VfMzA4ZFhfaW5qZWN0WDFfNzk3NjkzMTM0ODYyMzE1N0VfMzA4ZFhfc2Fja1hzdW1YX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSB9XSwgCi0gICAgZ193aXRoU2Fja1hfMTI4YlhfaW5qZWN0WDFiWF9zYWNrWG1pbnVzWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKC0xMjgpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYXzMyNzY4c1hfaW5qZWN0WDFzWF9zYWNrWG1pbnVzWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKC0zMjc2OCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSB9XSwgCi0gICAgZ193aXRoU2Fja1hfMjE0NzQ4MzY0OGlYX2luamVjdFgxaVhfc2Fja1htaW51c1hfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygtMjE0NzQ4MzY0OCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSB9XSwgCi0gICAgZ193aXRoU2Fja1hfMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9zYWNrWG1pbnVzWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMTI3YlhfaW5qZWN0WDJiWF9zYWNrWG11bHRYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMTI3KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMzI3NjdzWF9pbmplY3RYMnNYX3NhY2tYbXVsdFhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygzMjc2NykuaW5qZWN0KDIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDIxNDc0ODM2NDdpWF9pbmplY3RYMmlYX3NhY2tYbXVsdFhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygyMTQ3NDgzNjQ3KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMmRYX3NhY2tYbXVsdFhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuaW5qZWN0KDIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDEyN2JYX2luamVjdFgwXzVmWF9zYWNrWGRpdlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygxMjcpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMzI3NjdzWF9pbmplY3RYMF81Zlhfc2Fja1hkaXZYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMzI3NjcpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMjE0NzQ4MzY0N2lYX2luamVjdFgwXzVmWF9zYWNrWGRpdlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygyMTQ3NDgzNjQ3KS5pbmplY3QoMC41KS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDFfNzk3NjkzMTM0ODYyMzE1N0VfMzA4ZFhfaW5qZWN0WDBfNWRYX3NhY2tYZGl2WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5pbmplY3QoMC41KS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWF8xMjhiWF9pbmplY3RYXzFiWF9zYWNrWGRpdlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygtMTI4KS5pbmplY3QoLTEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYXzMyNzY4c1hfaW5qZWN0WF8xc1hfc2Fja1hkaXZYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soLTMyNzY4KS5pbmplY3QoLTEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYXzIxNDc0ODM2NDhpWF9pbmplY3RYXzFpWF9zYWNrWGRpdlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygtMjE0NzQ4MzY0OCkuaW5qZWN0KC0xKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWGhlbGxvWF9WX291dEVfc2Fja1hhc3NpZ25YX2J5WGxhYmVsWF9pblZfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygiaGVsbG8iKS5WKCkub3V0RSgpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShULmxhYmVsKS5pblYoKS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMFhfVl9vdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVl9zYWNrX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygwLjApLlYoKS5vdXRFKCkuc2FjayhPcGVyYXRvci5zdW0pLmJ5KCJ3ZWlnaHQiKS5pblYoKS5zYWNrKCkuc3VtKCkgfV0sIAotICAgIGdfd2l0aFNhY2tYMFhfVl9yZXBlYXRYb3V0RV9zYWNrWHN1bVhfYnlYd2VpZ2h0WF9pblZYX3RpbWVzWDJYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMC4wKS5WKCkucmVwZWF0KF9fLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoIndlaWdodCIpLmluVigpKS50aW1lcygyKS5zYWNrKCkgfV0sIAotICAgIGdfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dEVYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYX2luVlhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjazogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy53aXRoQnVsayhmYWxzZSkud2l0aFNhY2soMS4wLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0RSgia25vd3MiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spLmluVigpKS5pbl8oImtub3dzIikuYmFycmllcigpLnNhY2soKSB9XSwgCi0gICAgZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1Zfb3V0X2JhcnJpZXJfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoQnVsayhmYWxzZSkud2l0aFNhY2soMSwgT3BlcmF0b3Iuc3VtKS5WKCkub3V0KCkuYmFycmllcigpLnNhY2soKSB9XSwgCi0gICAgZ193aXRoU2Fja1gxX3N1bVhfVlgxWF9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLndpdGhTYWNrKDEuMCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dCgia25vd3MiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbl8oImtub3dzIikuYmFycmllcigpLnNhY2soKSB9XSwgCi0gICAgZ19WX3NhY2tYYXNzaWduWF9ieVhhZ2VYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieSgiYWdlIikuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWEJpZ0ludGVnZXJfVEVOX3Bvd1gxMDAwWF9hc3NpZ25YX1ZfbG9jYWxYb3V0WGtub3dzWF9iYXJyaWVyWG5vcm1TYWNrWFhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCwgT3BlcmF0b3IuYXNzaWduKS5WKCkubG9jYWwoX18ub3V0KCJrbm93cyIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluXygia25vd3MiKS5iYXJyaWVyKCkuc2FjaygpIH1dLCAKLSAgICBnX3dpdGhTYWNrWDJYX1Zfc2Fja1hkaXZYX2J5WGNvbnN0YW50WDRfMFhYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMikuVigpLnNhY2soT3BlcmF0b3IuZGl2KS5ieShfXy5jb25zdGFudCg0LjApKS5zYWNrKCkgfV0sIAotICAgIGdfVl9zYWNrWGFzc2lnblhfYnlYYWdlWF9ieVhuYW1lWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoImFnZSIpLmJ5KCJuYW1lIikuc2FjaygpIH1dLCAKLSAgICBnX1Zfc2lkZUVmZmVjdFhpZGVudGl0eVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKSkgfV0sIAotICAgIGdfVl9zaWRlRWZmZWN0WGlkZW50aXR5X3ZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAotICAgIGdfVl9zaWRlRWZmZWN0WHByb3BlcnR5WHNpbmdsZV9hZ2VfMjJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgImFnZSIsIDIxKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAiYWdlIiwgMjIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgMjEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCAyMikgfV0sIAotICAgIGdfVl9ncm91cF9ieVh2YWx1ZXNYbmFtZVhfc2lkZUVmZmVjdFhjb25zdGFudFh6eXhYWF9zdWJzdHJpbmdYMVhYX2J5WGNvbnN0YW50WDFYX3NpZGVFZmZlY3RYY29uc3RhbnRYeHl6WFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoInp5eCIpKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoInh5eiIpKSkgfV0sIAotICAgIGdfd2l0aFNpZGVFZmZlY3RYeF9zZXRYX1ZfYm90aF9ib3RoX3NpZGVFZmZlY3RYbG9jYWxYYWdncmVnYXRlWHhYX2J5WG5hbWVYWF9jYXBYeFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJ4IiwgbmV3IFNldChbXSkpLlYoKS5ib3RoKCkuYm90aCgpLnNpZGVFZmZlY3QoX18ubG9jYWwoX18uYWdncmVnYXRlKCJ4IikuYnkoIm5hbWUiKSkpLmNhcCgieCIpLnVuZm9sZCgpIH1dLCAKLSAgICBnX1ZfaGFzWGFnZVhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9vdXRfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmdyb3VwQ291bnQoImEiKS5ieSgibmFtZSIpLm91dCgpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBYYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KCJuYW1lIikuY2FwKCJhIikgfV0sIAotICAgIGdfVl9oYXNYbGFuZ1hfZ3JvdXBYYVhfYnlYbGFuZ1hfYnlYbmFtZVhfb3V0X2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJsYW5nIikuZ3JvdXAoImEiKS5ieSgibGFuZyIpLmJ5KCJuYW1lIikub3V0KCkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9yZXBlYXRYb3V0X2dyb3VwWGFYX2J5WG5hbWVYX2J5WGNvdW50WF90aW1lc1gyWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKS5ncm91cCgiYSIpLmJ5KCJuYW1lIikuYnkoX18uY291bnQoKSkpLnRpbWVzKDIpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBYYVhfYnlYbGFiZWxYX2J5WG91dEVfd2VpZ2h0X3N1bVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KFQubGFiZWwpLmJ5KF9fLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX3JlcGVhdFhib3RoWGZvbGxvd2VkQnlYWF90aW1lc1gyWF9ncm91cFhhWF9ieVhzb25nVHlwZVhfYnlYY291bnRYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGgoImZvbGxvd2VkQnkiKSkudGltZXMoMikuZ3JvdXAoImEiKS5ieSgic29uZ1R5cGUiKS5ieShfXy5jb3VudCgpKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX2dyb3VwWGFYX2J5WHZhbHVlc1huYW1lWF9zdWJzdHJpbmdYMVhYX2J5WGNvbnN0YW50WDFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoX18udmFsdWVzKCJuYW1lIikuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9oYXNMYWJlbFhzb25nWF9ncm91cFhhWF9ieVhuYW1lWF9ieVhwcm9wZXJ0aWVzX2dyb3VwQ291bnRfYnlYbGFiZWxYWF9vdXRfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29uZyIpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKS5vdXQoKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfb3V0WGNyZWF0ZWRYX2dyb3VwWGFYX2J5WG5hbWVYX2J5WHNlbGVjdFhwWF92YWx1ZXNYYWdlWF9zdW1YX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFzKCJwIikub3V0KCJjcmVhdGVkIikuZ3JvdXAoImEiKS5ieSgibmFtZSIpLmJ5KF9fLnNlbGVjdCgicCIpLnZhbHVlcygiYWdlIikuc3VtKCkpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZfZ3JvdXBYbVhfYnlYbmFtZVhfYnlYaW5Ya25vd3NYX25hbWVYX2NhcFhtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoIm0iKS5ieSgibmFtZSIpLmJ5KF9fLmluXygia25vd3MiKS52YWx1ZXMoIm5hbWUiKSkuY2FwKCJtIikgfV0sIAotICAgIGdfVl9ncm91cFhtWF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYX2NhcFhtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoIm0iKS5ieShfXy5sYWJlbCgpKS5ieShfXy5sYWJlbCgpLmNvdW50KCkpLmNhcCgibSIpIH1dLCAKLSAgICBnX1ZfY2hvb3NlWGxhYmVsX3BlcnNvbl9fYWdlX2dyb3VwQ291bnRYYVhfX25hbWVfZ3JvdXBDb3VudFhiWFhfY2FwWGFfYlhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18uaGFzKFQubGFiZWwsICJwZXJzb24iKSwgX18udmFsdWVzKCJhZ2UiKS5ncm91cENvdW50KCJhIiksIF9fLnZhbHVlcygibmFtZSIpLmdyb3VwQ291bnQoImIiKSkuY2FwKCJhIiwgImIiKS51bmZvbGQoKSB9XSwgCi0gICAgZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cFhhWF9ieV9ieVhvdXRfb3JkZXJYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFAud2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBYYVhfYnlfYnlYb3V0X29yZGVyX2NvdW50WF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCBQLndpdGhpbigidmFkYXMiLCAicGV0ZXIiKSkuZ3JvdXAoImEiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBYYVhfYnlfYnlYb3V0X29yZGVyX2ZvbGRfY291bnRYbG9jYWxYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCBQLndpdGhpbigidmFkYXMiLCAicGV0ZXIiKSkuZ3JvdXAoImEiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpLmNvdW50KFNjb3BlLmxvY2FsKSkuY2FwKCJhIikgfV0sIAotICAgIGdfVl9ncm91cFhhWF9ieV9ieVhvdXRfbGFiZWxfZm9sZFhfY2FwWGFYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmZvbGQoKSkuY2FwKCJhIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCi0gICAgZ19WX2dyb3VwWGFYX2J5X2J5WG91dF9sYWJlbF9kZWR1cF9mb2xkWF9jYXBYYVhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoImEiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLmNhcCgiYSIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVl9ncm91cFhhWF9ieV9ieVhvdXRfbGFiZWxfbGltaXRYMFhfZm9sZFhfY2FwWGFYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoImEiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMCkuZm9sZCgpKS5jYXAoImEiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkgfV0sIAotICAgIGdfVl9ncm91cFhhWF9ieV9ieVhvdXRfbGFiZWxfbGltaXRYMTBYX2ZvbGRYX2NhcFhhWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgxMCkuZm9sZCgpKS5jYXAoImEiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1ZfZ3JvdXBYYVhfYnlfYnlYb3V0X2xhYmVsX3RhaWxYMTBYX2ZvbGRYX2NhcFhhWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS50YWlsKDEwKS5mb2xkKCkpLmNhcCgiYSIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAotICAgIGdfVlgxWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKS5zdWJncmFwaCgic2ciKS52YWx1ZXMoIm5hbWUiKS5jYXAoInNnIikgfV0sIAotICAgIGdfVl9yZXBlYXRYYm90aEVYY3JlYXRlZFhfc3ViZ3JhcGhYc2dYX291dFZYX3RpbWVzWDVYX25hbWVfZGVkdXBfY2FwWHNnWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGhFKCJjcmVhdGVkIikuc3ViZ3JhcGgoInNnIikub3V0VigpKS50aW1lcyg1KS52YWx1ZXMoIm5hbWUiKS5kZWR1cCgpLmNhcCgic2ciKSB9XSwgCi0gICAgZ19WX291dEVYbm9leGlzdFhfc3ViZ3JhcGhYc2dYY2FwWHNnWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgibm9leGlzdCIpLnN1YmdyYXBoKCJzZyIpLmNhcCgic2ciKSB9XSwgCi0gICAgZ19FX2hhc1h3ZWlnaHRfMF81WF9zdWJncmFwaFhhWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcygid2VpZ2h0IiwgMC40KS5zdWJncmFwaCgiYSIpLnNlbGVjdCgiYSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X291dF90cmVlX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpLmJ5KCJuYW1lIikgfV0sIAotICAgIGdfVlgxWF9vdXRfb3V0X3RyZWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkgfV0sIAotICAgIGdfVl9vdXRfdHJlZV9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS50cmVlKCkuYnkoImFnZSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X291dF90cmVlWGFYX2J5WG5hbWVYX2JvdGhfYm90aF9jYXBYYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCJhIikuYnkoIm5hbWUiKS5ib3RoKCkuYm90aCgpLmNhcCgiYSIpIH1dLCAKLSAgICBnX1ZYMVhfb3V0X291dF90cmVlWGFYX2JvdGhfYm90aF9jYXBYYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCJhIikuYm90aCgpLmJvdGgoKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WWDFYX291dF9vdXRfdHJlZV9ieVhsYWJlbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoVC5sYWJlbCkgfV0sIAotICAgIGdfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbGFiZWxYX2JvdGhfYm90aF9jYXBYYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCJhIikuYnkoVC5sYWJlbCkuYm90aCgpLmJvdGgoKS5jYXAoImEiKSB9XSwgCi0gICAgZ19WWDFYX291dF9vdXRfb3V0X3RyZWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLm91dCgpLnRyZWUoKSB9XSwgCi0gICAgZ19WWDFYX291dEVfaW5WX2JvdGhFX290aGVyVl90cmVlOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpIH1dLCAKLSAgICBnX1ZYMVhfb3V0RV9pblZfYm90aEVfb3RoZXJWX3RyZWVfYnlYbmFtZVhfYnlYbGFiZWxYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpLmJ5KCJuYW1lIikuYnkoVC5sYWJlbCkgfV0sIAotICAgIGdfVl9vdXRfdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS50cmVlKCJhIikuc2VsZWN0KCJhIikuY291bnQoU2NvcGUubG9jYWwpIH1dLCAKLSAgICBnX1Zfb3V0X29yZGVyX2J5WG5hbWVYX2xvY2FsWHRyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLmxvY2FsKF9fLnRyZWUoImEiKS5zZWxlY3QoImEiKS5jb3VudChTY29wZS5sb2NhbCkpIH1dLCAKLX0KLQotZXhwb3J0cy5ncmVtbGluID0gZ3JlbWxpbnMKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL3dvcmxkLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvd29ybGQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNWM1YTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvd29ybGQuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHtzZXRXb3JsZENvbnN0cnVjdG9yLCBCZWZvcmUsIEJlZm9yZUFsbCwgQWZ0ZXJBbGx9ID0gcmVxdWlyZSgnQGN1Y3VtYmVyL2N1Y3VtYmVyJyk7Ci1jb25zdCBoZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXInKTsKLWNvbnN0IHRyYXZlcnNhbCA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwnKS50cmF2ZXJzYWw7Ci1jb25zdCBncmFwaFRyYXZlcnNhbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbCcpOwotY29uc3QgX18gPSBncmFwaFRyYXZlcnNhbE1vZHVsZS5zdGF0aWNzOwotCi1jb25zdCBjYWNoZSA9IHt9OwotCi1mdW5jdGlvbiBUaW5rZXJQb3BXb3JsZCgpewotICB0aGlzLnNjZW5hcmlvID0gbnVsbDsKLSAgdGhpcy5nID0gbnVsbDsKLSAgdGhpcy50cmF2ZXJzYWwgPSBudWxsOwotICB0aGlzLnJlc3VsdCA9IG51bGw7Ci0gIHRoaXMuY2FjaGUgPSBudWxsOwotICB0aGlzLmdyYXBoTmFtZSA9IG51bGw7Ci0gIHRoaXMucGFyYW1ldGVycyA9IHt9OwotICB0aGlzLnNpZGVFZmZlY3RzID0ge307Ci0gIHRoaXMuaXNHcmFwaENvbXB1dGVyID0gZmFsc2U7Ci19Ci0KLVRpbmtlclBvcFdvcmxkLnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkgewotICBpZiAoIXRoaXMuZ3JhcGhOYW1lKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBuYW1lIGlzIG5vdCBzZXQiKTsKLSAgfQotICByZXR1cm4gdGhpcy5jYWNoZVt0aGlzLmdyYXBoTmFtZV07Ci19OwotCi1UaW5rZXJQb3BXb3JsZC5wcm90b3R5cGUuY2xlYW5FbXB0eUdyYXBoID0gZnVuY3Rpb24gKCkgewotICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jYWNoZVsnZW1wdHknXS5jb25uZWN0aW9uOwotICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25uZWN0aW9uKTsKLSAgcmV0dXJuIGcuVigpLmRyb3AoKS50b0xpc3QoKTsKLX07Ci0KLVRpbmtlclBvcFdvcmxkLnByb3RvdHlwZS5sb2FkRW1wdHlHcmFwaERhdGEgPSBmdW5jdGlvbiAoKSB7Ci0gIGNvbnN0IGNhY2hlRGF0YSA9IHRoaXMuY2FjaGVbJ2VtcHR5J107Ci0gIGNvbnN0IGMgPSBjYWNoZURhdGEuY29ubmVjdGlvbjsKLSAgcmV0dXJuIFByb21pc2UuYWxsKFsgZ2V0VmVydGljZXMoYyksIGdldEVkZ2VzKGMpLCBnZXRWZXJ0ZXhQcm9wZXJ0aWVzKGMpIF0pLnRoZW4odmFsdWVzID0+IHsKLSAgICBjYWNoZURhdGEudmVydGljZXMgPSB2YWx1ZXNbMF07Ci0gICAgY2FjaGVEYXRhLmVkZ2VzID0gdmFsdWVzWzFdOwotICAgIGNhY2hlRGF0YS52ZXJ0ZXhQcm9wZXJ0aWVzID0gdmFsdWVzWzJdCi0gIH0pOwotfTsKLQotc2V0V29ybGRDb25zdHJ1Y3RvcihUaW5rZXJQb3BXb3JsZCk7Ci0KLUJlZm9yZUFsbChmdW5jdGlvbiAoKSB7Ci0gIC8vIGxvYWQgYWxsIHRyYXZlcnNhbHMKLSAgY29uc3QgcHJvbWlzZXMgPSBbJ21vZGVybicsICdjbGFzc2ljJywgJ2NyZXcnLCAnZ3JhdGVmdWwnLCAnc2luaycsICdlbXB0eSddLm1hcChncmFwaE5hbWUgPT4gewotICAgIGxldCBjb25uZWN0aW9uID0gbnVsbDsKLSAgICBpZiAoZ3JhcGhOYW1lID09PSAnZW1wdHknKSB7Ci0gICAgICBjb25uZWN0aW9uID0gaGVscGVyLmdldENvbm5lY3Rpb24oJ2dncmFwaCcpOwotICAgICAgcmV0dXJuIGNvbm5lY3Rpb24ub3BlbigpLnRoZW4oKCkgPT4gY2FjaGVbJ2VtcHR5J10gPSB7IGNvbm5lY3Rpb246IGNvbm5lY3Rpb24gfSk7Ci0gICAgfQotICAgIGNvbm5lY3Rpb24gPSBoZWxwZXIuZ2V0Q29ubmVjdGlvbignZycgKyBncmFwaE5hbWUpOwotICAgIHJldHVybiBjb25uZWN0aW9uLm9wZW4oKQotICAgICAgLnRoZW4oKCkgPT4gUHJvbWlzZS5hbGwoW2dldFZlcnRpY2VzKGNvbm5lY3Rpb24pLCBnZXRFZGdlcyhjb25uZWN0aW9uKSwgZ2V0VmVydGV4UHJvcGVydGllcyhjb25uZWN0aW9uKV0pKQotICAgICAgLnRoZW4odmFsdWVzID0+IHsKLSAgICAgICAgY2FjaGVbZ3JhcGhOYW1lXSA9IHsKLSAgICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLAotICAgICAgICAgIHZlcnRpY2VzOiB2YWx1ZXNbMF0sCi0gICAgICAgICAgZWRnZXM6IHZhbHVlc1sxXSwKLSAgICAgICAgICB2ZXJ0ZXhQcm9wZXJ0aWVzOiB2YWx1ZXNbMl0KLSAgICAgICAgfTsKLSAgICAgIH0pOwotICB9KTsKLSAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTsKLX0pOwotCi1BZnRlckFsbChmdW5jdGlvbiAoKSB7Ci0gIHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhjYWNoZSkubWFwKGdyYXBoTmFtZSA9PiBjYWNoZVtncmFwaE5hbWVdLmNvbm5lY3Rpb24uY2xvc2UoKSkpOwotfSk7Ci0KLUJlZm9yZShmdW5jdGlvbiAoaW5mbykgewotICB0aGlzLnNjZW5hcmlvID0gaW5mby5waWNrbGUubmFtZTsKLSAgdGhpcy5jYWNoZSA9IGNhY2hlOwotfSk7Ci0KLUJlZm9yZSh7dGFnczogIkBHcmFwaENvbXB1dGVyT25seSJ9LCBmdW5jdGlvbigpIHsKLSAgdGhpcy5pc0dyYXBoQ29tcHV0ZXIgPSB0cnVlOwotfSkKLQotQmVmb3JlKHt0YWdzOiAiQEFsbG93TnVsbFByb3BlcnR5VmFsdWVzIn0sIGZ1bmN0aW9uKCkgewotICByZXR1cm4gJ3NraXBwZWQnCi19KQotCi1mdW5jdGlvbiBnZXRWZXJ0aWNlcyhjb25uZWN0aW9uKSB7Ci0gIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOwotICByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KF9fLnRhaWwoKSkubmV4dCgpLnRoZW4oaXQgPT4gewotICAgIC8vIHByb3BlcnRpZXMgZXhjbHVkZWQgZnJvbSB2ZXJpZmljYXRpb24KLSAgICBpZiAoaXQudmFsdWUgaW5zdGFuY2VvZiBNYXApIHsKLSAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXQudmFsdWUudmFsdWVzKCkpIHsKLSAgICAgICAgdmFsdWUucHJvcGVydGllcyA9IHVuZGVmaW5lZAotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaXQudmFsdWUKLSAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGdldEVkZ2VzKGNvbm5lY3Rpb24pIHsKLSAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29ubmVjdGlvbik7Ci0gIHJldHVybiBnLkUoKS5ncm91cCgpCi0gICAgLmJ5KF9fLnByb2plY3QoIm8iLCAibCIsICJpIikuYnkoX18ub3V0VigpLnZhbHVlcygibmFtZSIpKS5ieShfXy5sYWJlbCgpKS5ieShfXy5pblYoKS52YWx1ZXMoIm5hbWUiKSkpCi0gICAgLmJ5KF9fLnRhaWwoKSkKLSAgICAubmV4dCgpCi0gICAgLnRoZW4oaXQgPT4gewotICAgICAgY29uc3QgZWRnZXMgPSB7fTsKLSAgICAgIGl0LnZhbHVlLmZvckVhY2goKHYsIGspID0+IHsKLSAgICAgICAgLy8gcHJvcGVydGllcyBleGNsdWRlZCBmcm9tIHZlcmlmaWNhdGlvbgotICAgICAgICB2LnByb3BlcnRpZXMgPSB1bmRlZmluZWQKLSAgICAgICAgZWRnZXNbZ2V0RWRnZUtleShrKV0gPSB2OwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gZWRnZXM7Ci0gICAgfSk7Ci19Ci0KLWZ1bmN0aW9uIGdldFZlcnRleFByb3BlcnRpZXMoY29ubmVjdGlvbikgewotICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25uZWN0aW9uKTsKLSAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKQotICAgICAgLmdyb3VwKCkKLSAgICAgIC5ieShfXy5wcm9qZWN0KCJuIiwgImsiLCAidiIpLmJ5KF9fLmVsZW1lbnQoKS52YWx1ZXMoIm5hbWUiKSkuYnkoX18ua2V5KCkpLmJ5KF9fLnZhbHVlKCkpKQotICAgICAgLmJ5KF9fLnRhaWwoKSkKLSAgICAgIC5uZXh0KCkKLSAgICAgIC50aGVuKGl0ID0+IHsKLSAgICAgICAgY29uc3QgdnBzID0ge307Ci0gICAgICAgIGl0LnZhbHVlLmZvckVhY2goKHYsIGspID0+IHsKLSAgICAgICAgICB2cHNbZ2V0VmVydGV4UHJvcGVydHlLZXkoayldID0gdjsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB2cHM7Ci0gICAgICB9KTsKLX0KLQotZnVuY3Rpb24gZ2V0RWRnZUtleShrZXkpIHsKLSAgLy8ga2V5IGlzIGEgbWFwCi0gIHJldHVybiBrZXkuZ2V0KCdvJykgKyAiLSIgKyBrZXkuZ2V0KCdsJykgKyAiLT4iICsga2V5LmdldCgnaScpOwotfQotCi1mdW5jdGlvbiBnZXRWZXJ0ZXhQcm9wZXJ0eUtleShrZXkpIHsKLSAgLy8ga2V5IGlzIGEgbWFwCi0gIGNvbnN0IGsgPSBrZXkuZ2V0KCdrJyk7Ci0KLSAgLy8gaGFyZGNvZGluZyB0aGUgdHlwZXMgYXMgd2UgZG9uJ3QgaGF2ZSBhIGdvb2QgZHluYW1pYyB3YXkgdG8gZ2V0IHRoZW0uIHB5dGhvbiBkb2VzIHRoaXMgd2l0aCBhIGxhbWJkYSwgYnV0Ci0gIC8vIHRyeWluZyBpdCB0aGlzIHdheSBpbiBqYXZhc2NyaXB0IHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gaXMgYmV0dGVyIGluIGFuIGF0dGVtcHQgdG8gYXZvaWQgbGFtYmRhcy4gcmlnaHQgbm93Ci0gIC8vIHdlJ2QgcmVhbGx5IGp1c3QgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSBjbGFzc2ljIGdyYXBoIHdoaWNoIGRlZmluZXMgIndlaWdodCIgYXMgImZsb2F0IiBhbmQgaGVyZSB3ZSBoYXJkIGNvZGUKLSAgLy8gZm9yIHRoZSBtb2Rlcm4gZ3JhcGggd2hpY2ggdXNlcyAiZG91YmxlIi4gd2UgcmVhbGx5IGRvbid0IHRlc3QgY2xhc3NpYyB3aXRoIGdoZXJraW4gc28gZm9yIG5vdyBpdCBpcyBwcm9iYWJseQotICAvLyBmaW5lCi0gIGxldCB2YWwgPSBrZXkuZ2V0KCd2Jyk7Ci0gIGlmIChrID09PSAnd2VpZ2h0JykgewotICAgIHZhbCA9ICdkWycgKyB2YWwgKyAnXS5kJyA7Ci0gIH0gZWxzZSBpZiAoayA9PT0gJ2FnZScgfHwgayA9PT0gJ3NpbmNlJyB8fCBrID09PSAnc2tpbGwnKSB7Ci0gICAgdmFsID0gJ2RbJyArIHZhbCArICddLmknOwotICB9Ci0gIHJldHVybiBrZXkuZ2V0KCduJykgKyAiLSIgKyBrICsgIi0+IiArIHZhbDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9oZWxwZXIuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9oZWxwZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNjA2N2YuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaGVscGVyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4uL2xpYi91dGlscycpOwotY29uc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IHJlcXVpcmUoJy4uL2xpYi9kcml2ZXIvZHJpdmVyLXJlbW90ZS1jb25uZWN0aW9uJyk7Ci1jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9saWIvZHJpdmVyL2NsaWVudCcpOwotY29uc3QgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IgPSByZXF1aXJlKCcuLi9saWIvZHJpdmVyL2F1dGgvcGxhaW4tdGV4dC1zYXNsLWF1dGhlbnRpY2F0b3InKTsKLQotY29uc3QgeWFtbCA9IHJlcXVpcmUoJ2pzLXlhbWwnKTsKLWNvbnN0IGZzICAgPSByZXF1aXJlKCdmcycpOwotCi1sZXQgc2VydmVyVXJsOwotbGV0IHNlcnZlckF1dGhVcmw7Ci1sZXQgc29ja2V0U2VydmVyVXJsOwotbGV0IHNvY2tlclNlcnZlckNvbmZpZ1BhdGg7Ci1pZiAocHJvY2Vzcy5lbnYuRE9DS0VSX0VOVklST05NRU5UID09PSAndHJ1ZScpIHsKLSAgc2VydmVyVXJsID0gJ3dzOi8vZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qczo0NTk0MC9ncmVtbGluJzsKLSAgc2VydmVyQXV0aFVybCA9ICd3c3M6Ly9ncmVtbGluLXNlcnZlci10ZXN0LWpzOjQ1OTQxL2dyZW1saW4nOwotICBzb2NrZXRTZXJ2ZXJVcmwgPSAnd3M6Ly9ncmVtbGluLXNvY2tldC1zZXJ2ZXItanM6JzsKLSAgc29ja2VyU2VydmVyQ29uZmlnUGF0aCA9ICcvanNfYXBwL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mL3Rlc3Qtd3MtZ3JlbWxpbi55YW1sJzsKLX0gZWxzZSB7Ci0gIHNlcnZlclVybCA9ICd3czovL2xvY2FsaG9zdDo0NTk0MC9ncmVtbGluJzsKLSAgc2VydmVyQXV0aFVybCA9ICd3c3M6Ly9sb2NhbGhvc3Q6NDU5NDEvZ3JlbWxpbic7Ci0gIHNvY2tldFNlcnZlclVybCA9ICd3czovL2xvY2FsaG9zdDonOwotICBzb2NrZXJTZXJ2ZXJDb25maWdQYXRoID0gJy4uLy4uLy4uLy4uLy4uL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmYvdGVzdC13cy1ncmVtbGluLnlhbWwnOwotfQotCi0vKiogQHJldHVybnMge0RyaXZlclJlbW90ZUNvbm5lY3Rpb259ICovCi1leHBvcnRzLmdldENvbm5lY3Rpb24gPSBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKHRyYXZlcnNhbFNvdXJjZSkgewotICByZXR1cm4gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oc2VydmVyVXJsLCB7IHRyYXZlcnNhbFNvdXJjZSwgbWltZVR5cGU6IHByb2Nlc3MuZW52LkNMSUVOVF9NSU1FVFlQRSB9KTsKLX07Ci0KLWV4cG9ydHMuZ2V0U2VjdXJlQ29ubmVjdGlvbldpdGhQbGFpblRleHRTYXNsQXV0aGVudGljYXRvciA9ICh0cmF2ZXJzYWxTb3VyY2UsIHVzZXJuYW1lLCBwYXNzd29yZCkgPT4gewotICBjb25zdCBhdXRoZW50aWNhdG9yID0gbmV3IFBsYWluVGV4dFNhc2xBdXRoZW50aWNhdG9yKHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0gIHJldHVybiBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJBdXRoVXJsLCB7Ci0gICAgdHJhdmVyc2FsU291cmNlLAotICAgIGF1dGhlbnRpY2F0b3IsCi0gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSwKLSAgICBtaW1lVHlwZTogcHJvY2Vzcy5lbnYuQ0xJRU5UX01JTUVUWVBFLAotICB9KTsKLX07Ci0KLWV4cG9ydHMuZ2V0RHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9ICh1cmwsIG9wdGlvbnMpID0+IHsKLSAgcmV0dXJuIG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHVybCwgeyAuLi5vcHRpb25zLCBtaW1lVHlwZTogcHJvY2Vzcy5lbnYuQ0xJRU5UX01JTUVUWVBFIH0pOwotfQotCi1leHBvcnRzLmdldERyaXZlclJlbW90ZUNvbm5lY3Rpb25HcmFwaFNPTiA9ICh0cmF2ZXJzYWxTb3VyY2UpID0+IHsKLSAgcmV0dXJuIG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlclVybCwgeyB0cmF2ZXJzYWxTb3VyY2UsIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uJyB9KTsKLX07Ci0KLWV4cG9ydHMuZ2V0Q2xpZW50ID0gZnVuY3Rpb24gZ2V0Q2xpZW50KHRyYXZlcnNhbFNvdXJjZSkgewotICByZXR1cm4gbmV3IENsaWVudChzZXJ2ZXJVcmwsIHsgdHJhdmVyc2FsU291cmNlLCBtaW1lVHlwZTogcHJvY2Vzcy5lbnYuQ0xJRU5UX01JTUVUWVBFIH0pOwotfTsKLQotZXhwb3J0cy5nZXRTZXNzaW9uQ2xpZW50ID0gZnVuY3Rpb24gZ2V0U2Vzc2lvbkNsaWVudCh0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgY29uc3Qgc2Vzc2lvbklkID0gdXRpbHMuZ2V0VXVpZCgpOwotICByZXR1cm4gbmV3IENsaWVudChzZXJ2ZXJVcmwsIHsKLSAgICAndHJhdmVyc2FsU291cmNlJzogdHJhdmVyc2FsU291cmNlLAotICAgICdzZXNzaW9uJzogc2Vzc2lvbklkLnRvU3RyaW5nKCksCi0gICAgbWltZVR5cGU6IHByb2Nlc3MuZW52LkNMSUVOVF9NSU1FVFlQRSwKLSAgfSk7Ci19OwotCi1mdW5jdGlvbiBnZXRNaW1lVHlwZUZyb21Tb2NrZXRTZXJ2ZXJTZXR0aW5ncyhzb2NrZXRTZXJ2ZXJTZXR0aW5ncykgewotICBsZXQgbWltZVR5cGU7Ci0gIHN3aXRjaChzb2NrZXRTZXJ2ZXJTZXR0aW5ncy5TRVJJQUxJWkVSKSB7Ci0gICAgY2FzZSAiR3JhcGhTT05WMiI6Ci0gICAgICBtaW1lVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12Mi4wK2pzb24nOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAiR3JhcGhTT05WMyI6Ci0gICAgICBtaW1lVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24nOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAiR3JhcGhCaW5hcnlWMSI6Ci0gICAgZGVmYXVsdDoKLSAgICAgIG1pbWVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wJzsKLSAgICAgIGJyZWFrOwotICB9Ci0gIHJldHVybiBtaW1lVHlwZTsKLX0KLQotZXhwb3J0cy5nZXRHcmVtbGluU29ja2V0U2VydmVyQ2xpZW50ID0gZnVuY3Rpb24gZ2V0R3JlbWxpblNvY2tldFNlcnZlckNsaWVudCh0cmF2ZXJzYWxTb3VyY2UpIHsKLSAgY29uc3Qgc2V0dGluZ3MgPSBleHBvcnRzLmdldEdyZW1saW5Tb2NrZXRTZXJ2ZXJTZXR0aW5ncygpOwotICBjb25zdCB1cmwgPSBzb2NrZXRTZXJ2ZXJVcmwgKyBzZXR0aW5ncy5QT1JUICsgJy9ncmVtbGluJzsKLSAgbGV0IG1pbWVUeXBlID0gZ2V0TWltZVR5cGVGcm9tU29ja2V0U2VydmVyU2V0dGluZ3Moc2V0dGluZ3MpCi0gIHJldHVybiBuZXcgQ2xpZW50KHVybCwgeyB0cmF2ZXJzYWxTb3VyY2UsIG1pbWVUeXBlIH0pOwotfTsKLQotZXhwb3J0cy5nZXRHcmVtbGluU29ja2V0U2VydmVyQ2xpZW50V2l0aE9wdGlvbnMgPSBmdW5jdGlvbiBnZXRHcmVtbGluU29ja2V0U2VydmVyQ2xpZW50KHRyYXZlcnNhbFNvdXJjZSwgb3B0aW9ucykgewotICBjb25zdCBzZXR0aW5ncyA9IGV4cG9ydHMuZ2V0R3JlbWxpblNvY2tldFNlcnZlclNldHRpbmdzKCk7Ci0gIGNvbnN0IHVybCA9IHNvY2tldFNlcnZlclVybCArIHNldHRpbmdzLlBPUlQgKyAnL2dyZW1saW4nOwotICBjb25zdCBtaW1lVHlwZSA9IGdldE1pbWVUeXBlRnJvbVNvY2tldFNlcnZlclNldHRpbmdzKHNldHRpbmdzKQotICByZXR1cm4gbmV3IENsaWVudCh1cmwsIHsgdHJhdmVyc2FsU291cmNlLCBtaW1lVHlwZSwgLi4ub3B0aW9uc30pOwotfTsKLQotZXhwb3J0cy5nZXRHcmVtbGluU29ja2V0U2VydmVyQ2xpZW50Tm9Vc2VyQWdlbnQgPSBmdW5jdGlvbiBnZXRHcmVtbGluU29ja2V0U2VydmVyQ2xpZW50KHRyYXZlcnNhbFNvdXJjZSkgewotICBjb25zdCBzZXR0aW5ncyA9IGV4cG9ydHMuZ2V0R3JlbWxpblNvY2tldFNlcnZlclNldHRpbmdzKCk7Ci0gIGNvbnN0IHVybCA9IHNvY2tldFNlcnZlclVybCArIHNldHRpbmdzLlBPUlQgKyAnL2dyZW1saW4nOwotICBsZXQgbWltZVR5cGUgPSBnZXRNaW1lVHlwZUZyb21Tb2NrZXRTZXJ2ZXJTZXR0aW5ncyhzZXR0aW5ncykKLSAgcmV0dXJuIG5ldyBDbGllbnQodXJsLCB7IHRyYXZlcnNhbFNvdXJjZSwgbWltZVR5cGUsIGVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDpmYWxzZSB9KTsKLX07Ci0KLWV4cG9ydHMuZ2V0R3JlbWxpblNvY2tldFNlcnZlclNldHRpbmdzID0gZnVuY3Rpb24gZ2V0R3JlbWxpblNvY2tldFNlcnZlclNldHRpbmdzKCkgewotICBjb25zdCBzZXR0aW5ncyA9IHlhbWwubG9hZChmcy5yZWFkRmlsZVN5bmMoc29ja2VyU2VydmVyQ29uZmlnUGF0aCwgJ3V0ZjgnKSk7Ci0gIHJldHVybiBzZXR0aW5nczsKLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9pbnRlZ3JhdGlvbi9jbGllbnQtYmVoYXZpb3ItdGVzdHMuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9pbnRlZ3JhdGlvbi9jbGllbnQtYmVoYXZpb3ItdGVzdHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4MmI3YzEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vY2xpZW50LWJlaGF2aW9yLXRlc3RzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IGhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlcicpOwotY29uc3Qge2dldFVzZXJBZ2VudH0gPSByZXF1aXJlKCIuLi8uLi9saWIvdXRpbHMiKTsKLQotbGV0IGNsaWVudDsKLWxldCBzZXR0aW5nczsKLQotZGVzY3JpYmUoJ0NsaWVudCcsIGZ1bmN0aW9uICgpIHsKLSAgICBiZWZvcmUoZnVuY3Rpb24gKCkgewotICAgICAgICBjbGllbnQgPSBoZWxwZXIuZ2V0R3JlbWxpblNvY2tldFNlcnZlckNsaWVudCgnZ21vZGVybicpOwotICAgICAgICBzZXR0aW5ncyA9IGhlbHBlci5nZXRHcmVtbGluU29ja2V0U2VydmVyU2V0dGluZ3MoKTsKLSAgICAgICAgcmV0dXJuIGNsaWVudC5vcGVuKCk7Ci0gICAgfSk7Ci0gICAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgICAgICByZXR1cm4gY2xpZW50LmNsb3NlKCk7Ci0gICAgfSk7Ci0gICAgZGVzY3JpYmUoJyNzdWJtaXQoKScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgaXQoJ3Nob3VsZCByZWNvbm5lY3QgYWZ0ZXIgc2VydmVyIGNsb3NlcyBjb25uZWN0aW9uJywgYXN5bmMgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgbGV0IGNvbm5lY3Rpb25DbG9zZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGF3YWl0IGNsaWVudC5zdWJtaXQoJzEnLCBudWxsLCB7cmVxdWVzdElkOiBzZXR0aW5ncy5DTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSUR9KQotICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcil7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydC5lcXVhbChlcnJvci50b1N0cmluZygpLCAnRXJyb3I6IENvbm5lY3Rpb24gaGFzIGJlZW4gY2xvc2VkLicpOwotICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgYXNzZXJ0LmVxdWFsKGNvbm5lY3Rpb25DbG9zZWQsIHRydWUpOwotCi0gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnN1Ym1pdCgnMScsIG51bGwsIHtyZXF1ZXN0SWQ6IHNldHRpbmdzLlNJTkdMRV9WRVJURVhfUkVRVUVTVF9JRH0pCi0gICAgICAgICAgICBhc3NlcnQub2socmVzdWx0KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGl0KCdzaG91bGQgaW5jbHVkZSB1c2VyIGFnZW50IGluIGhhbmRzaGFrZSByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zdWJtaXQoJzEnLCBudWxsLCB7cmVxdWVzdElkOiBzZXR0aW5ncy5VU0VSX0FHRU5UX1JFUVVFU1RfSUR9KTsKLQotICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5maXJzdCgpLCBhd2FpdCBnZXRVc2VyQWdlbnQoKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBpdCgnc2hvdWxkIG5vdCBpbmNsdWRlIHVzZXIgYWdlbnQgaW4gaGFuZHNoYWtlIHJlcXVlc3QgaWYgZGlzYWJsZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBsZXQgbm9Vc2VyQWdlbnRDbGllbnQgPSBoZWxwZXIuZ2V0R3JlbWxpblNvY2tldFNlcnZlckNsaWVudE5vVXNlckFnZW50KCdnbW9kZXJuJyk7Ci0gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgbm9Vc2VyQWdlbnRDbGllbnQuc3VibWl0KCcxJywgbnVsbCwKLSAgICAgICAgICAgICAgICB7cmVxdWVzdElkOiBzZXR0aW5ncy5VU0VSX0FHRU5UX1JFUVVFU1RfSUR9KTsKLQotICAgICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5maXJzdCgpID09PSAiIiB8fCByZXN1bHQuZmlyc3QoKSA9PT0gIm5vZGUiKTsgLy8gVGhlIGRlZmF1bHQgbm9kZSB3ZWJzb2NrZXQgbGlicmFyeSBtYXkgdXNlIGEgZGVmYXVsdCB1c2VyLWFnZW50IG9mICJub2RlIiBpZiBub25lIGlzIHNwZWNpZmllZAotCi0gICAgICAgICAgICBhd2FpdCBub1VzZXJBZ2VudENsaWVudC5jbG9zZSgpOwotICAgICAgICB9KTsKLSAgICAgICAgaXQoJ3Nob3VsZCBub3QgcmVxdWVzdCBwZXJtZXNzYWdlIGRlZmxhdGUgY29tcHJlc3Npb24gYnkgZGVmYXVsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zdWJtaXQoJzEnLCBudWxsLCB7cmVxdWVzdElkOiBzZXR0aW5ncy5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlN9KTsKLSAgICAgICAgICAgIGNvbnN0IHJldHVybmVkRXh0ZW5zaW9ucyA9IHJlc3VsdC5maXJzdCgpCi0gICAgICAgICAgICBhc3NlcnQub2socmV0dXJuZWRFeHRlbnNpb25zID09IHVuZGVmaW5lZCB8fCAhcmV0dXJuZWRFeHRlbnNpb25zLmluY2x1ZGVzKCJwZXJtZXNzYWdlLWRlZmxhdGUiKSkKLSAgICAgICAgfSk7Ci0gICAgICAgIGl0KCdzaG91bGQgbm90IHJlcXVlc3QgcGVybWVzc2FnZSBkZWZsYXRlIGNvbXByZXNzaW9uIHdoZW4gZGlzYWJsZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBjb25zdCBub0NvbXByZXNzaW9uQ2xpZW50ID0gaGVscGVyLmdldEdyZW1saW5Tb2NrZXRTZXJ2ZXJDbGllbnRXaXRoT3B0aW9ucygnZ21vZGVybicsCi0gICAgICAgICAgICAgICAge2VuYWJsZUNvbXByZXNzaW9uOiBmYWxzZX0pOwotICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbm9Db21wcmVzc2lvbkNsaWVudC5zdWJtaXQoJzEnLCBudWxsLAotICAgICAgICAgICAgICAgIHtyZXF1ZXN0SWQ6IHNldHRpbmdzLlNFQ19XRUJTT0NLRVRfRVhURU5TSU9OU30pOwotCi0gICAgICAgICAgICBjb25zdCByZXR1cm5lZEV4dGVuc2lvbnMgPSByZXN1bHQuZmlyc3QoKQotICAgICAgICAgICAgYXNzZXJ0Lm9rKHJldHVybmVkRXh0ZW5zaW9ucyA9PSB1bmRlZmluZWQgfHwgIXJldHVybmVkRXh0ZW5zaW9ucy5pbmNsdWRlcygicGVybWVzc2FnZS1kZWZsYXRlIikpCi0KLSAgICAgICAgICAgIGF3YWl0IG5vQ29tcHJlc3Npb25DbGllbnQuY2xvc2UoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGl0KCdzaG91bGQgcmVxdWVzdCBwZXJtZXNzYWdlIGRlZmxhdGUgY29tcHJlc3Npb24gd2hlbiBlbmFibGVkJywgYXN5bmMgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgY29uc3QgY29tcHJlc3Npb25DbGllbnQgPSBoZWxwZXIuZ2V0R3JlbWxpblNvY2tldFNlcnZlckNsaWVudFdpdGhPcHRpb25zKCdnbW9kZXJuJywKLSAgICAgICAgICAgICAgICB7ZW5hYmxlQ29tcHJlc3Npb246IHRydWV9KTsKLSAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbXByZXNzaW9uQ2xpZW50LnN1Ym1pdCgnMScsIG51bGwsCi0gICAgICAgICAgICAgICAge3JlcXVlc3RJZDogc2V0dGluZ3MuU0VDX1dFQlNPQ0tFVF9FWFRFTlNJT05TfSk7Ci0KLSAgICAgICAgICAgIGNvbnN0IHJldHVybmVkRXh0ZW5zaW9ucyA9IHJlc3VsdC5maXJzdCgpCi0gICAgICAgICAgICBhc3NlcnQub2socmV0dXJuZWRFeHRlbnNpb25zLmluY2x1ZGVzKCJwZXJtZXNzYWdlLWRlZmxhdGUiKSkKLQotICAgICAgICAgICAgYXdhaXQgY29tcHJlc3Npb25DbGllbnQuY2xvc2UoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGl0KCdzaG91bGQgc2VuZCBwZXIgcmVxdWVzdCBzZXR0aW5ncyB0byBzZXJ2ZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBjb25zdCByZXN1bHRTZXQgPSBhd2FpdCBjbGllbnQuc3VibWl0KCcxJywgbnVsbCwgewotICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogc2V0dGluZ3MuUEVSX1JFUVVFU1RfU0VUVElOR1NfUkVRVUVTVF9JRCwKLSAgICAgICAgICAgICAgICBldmFsdWF0aW9uVGltZW91dDogMTIzNCwKLSAgICAgICAgICAgICAgICBiYXRjaFNpemU6IDEyLAotICAgICAgICAgICAgICAgIHVzZXJBZ2VudDogJ2hlbGxvV29ybGQnLAotICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplUHJvcGVydGllczogJ3Rva2VucycKLSAgICAgICAgICAgIH0pCi0gICAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IGByZXF1ZXN0SWQ9JHtzZXR0aW5ncy5QRVJfUkVRVUVTVF9TRVRUSU5HU19SRVFVRVNUX0lEfSBldmFsdWF0aW9uVGltZW91dD0xMjM0LCBiYXRjaFNpemU9MTIsIHVzZXJBZ2VudD1oZWxsb1dvcmxkLCBtYXRlcmlhbGl6ZVByb3BlcnRpZXM9dG9rZW5zYDsKLSAgICAgICAgICAgIGFzc2VydC5lcXVhbChleHBlY3RlZFJlc3VsdCwgcmVzdWx0U2V0LmZpcnN0KCkpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vY2xpZW50LXRlc3RzLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vY2xpZW50LXRlc3RzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTMxYmVjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL2NsaWVudC10ZXN0cy5qcworKysgL2Rldi9udWxsCkBAIC0xLDM0MSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2J5dGVjb2RlJyk7Ci1jb25zdCBncmFwaE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLWNvbnN0IGhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlcicpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1sZXQgY2xpZW50LCBjbGllbnRDcmV3OwotCi1kZXNjcmliZSgnQ2xpZW50JywgZnVuY3Rpb24gKCkgewotICBiZWZvcmUoZnVuY3Rpb24gKCkgewotICAgIGNsaWVudCA9IGhlbHBlci5nZXRDbGllbnQoJ2dtb2Rlcm4nKTsKLSAgICBjbGllbnRDcmV3ID0gaGVscGVyLmdldENsaWVudCgnZ2NyZXcnKQotICAgIHJldHVybiBjbGllbnQub3BlbigpOwotICB9KTsKLSAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgIGNsaWVudENyZXcuY2xvc2UoKTsKLSAgICByZXR1cm4gY2xpZW50LmNsb3NlKCk7Ci0gIH0pOwotICBkZXNjcmliZSgnI3N1Ym1pdCgpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgc2VuZCBieXRlY29kZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KG5ldyBCeXRlY29kZSgpLmFkZFN0ZXAoJ1YnLCBbXSkuYWRkU3RlcCgndGFpbCcsIFtdKSkKLSAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgewotICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTsKLSAgICAgICAgICBhc3NlcnQub2socmVzdWx0LmZpcnN0KCkub2JqZWN0IGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuVmVydGV4KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBzZW5kIGFuZCBwYXJzZSBhIHNjcmlwdCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCdnLlYoKS50YWlsKCknKQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpOwotICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQuZmlyc3QoKSBpbnN0YW5jZW9mIGdyYXBoTW9kdWxlLlZlcnRleCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgc2VuZCBhbmQgcGFyc2UgYSBzY3JpcHQgd2l0aCBiaW5kaW5ncycsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCd4ICsgeCcsIHsgeDogMyB9KQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5maXJzdCgpLCA2KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBzZW5kIGFuZCBwYXJzZSBhIHNjcmlwdCB3aXRoIG5vbi1uYXRpdmUgamF2YXNjcmlwdCBiaW5kaW5ncycsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCdjYXJkLmNsYXNzLnNpbXBsZU5hbWUgKyAiOiIgKyBjYXJkJywgeyBjYXJkOiB0LmNhcmRpbmFsaXR5LnNldCB9ICkKLSAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgewotICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmlyc3QoKSwgJ0NhcmRpbmFsaXR5OnNldCcpOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgcmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMnLCAoKSA9PiB7Ci0gICAgICByZXR1cm4gY2xpZW50LnN1Ym1pdChuZXcgQnl0ZWNvZGUoKS5hZGRTdGVwKCdWJywgW10pLmFkZFN0ZXAoJ3RhaWwnLCBbXSkpCi0gICAgICAgIC50aGVuKHJzID0+IHsKLSAgICAgICAgICBhc3NlcnQub2socnMuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE1hcCk7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJzLmF0dHJpYnV0ZXMuZ2V0KCdob3N0JykpOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGFuZGxlIFZlcnRleCBwcm9wZXJ0aWVzIGZvciBieXRlY29kZSByZXF1ZXN0JywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFsxXSkpCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKLSAgICAgICAgICBhc3NlcnQub2socmVzdWx0KTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgY29uc3QgdmVydGV4ID0gcmVzdWx0LmZpcnN0KCkub2JqZWN0OwotICAgICAgICAgIGFzc2VydC5vayh2ZXJ0ZXggaW5zdGFuY2VvZiBncmFwaE1vZHVsZS5WZXJ0ZXgpOwotICAgICAgICAgIGNvbnN0IGFnZSA9IHZlcnRleC5wcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmtleSA9PT0gJ2FnZScpOwotICAgICAgICAgIGNvbnN0IG5hbWUgPSB2ZXJ0ZXgucHJvcGVydGllcy5maW5kKHAgPT4gcC5rZXkgPT09ICduYW1lJyk7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGFnZSk7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKG5hbWUpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2UudmFsdWUsIDI5KTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmFtZS52YWx1ZSwgJ21hcmtvJyk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBza2lwIFZlcnRleCBwcm9wZXJ0aWVzIGZvciBieXRlY29kZSByZXF1ZXN0IHdpdGggdG9rZW5zJywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFsxXSksIG51bGwsIHsnbWF0ZXJpYWxpemVQcm9wZXJ0aWVzJzogJ3Rva2Vucyd9KQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpOwotICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHJlc3VsdC5maXJzdCgpLm9iamVjdDsKLSAgICAgICAgICBhc3NlcnQub2sodmVydGV4IGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuVmVydGV4KTsKLSAgICAgICAgICBhc3NlcnQub2sodmVydGV4LnByb3BlcnRpZXMubGVuZ3RoID09PSAwKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIGhhbmRsZSBWZXJ0ZXggcHJvcGVydGllcyBmb3IgZ3JlbWxpbiByZXF1ZXN0JywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQoJ2cuVigxKScpCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKLSAgICAgICAgICBhc3NlcnQub2socmVzdWx0KTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgY29uc3QgdmVydGV4ID0gcmVzdWx0LmZpcnN0KCk7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHZlcnRleCBpbnN0YW5jZW9mIGdyYXBoTW9kdWxlLlZlcnRleCk7Ci0gICAgICAgICAgY29uc3QgYWdlID0gdmVydGV4LnByb3BlcnRpZXMuZmluZChwID0+IHAua2V5ID09PSAnYWdlJyk7Ci0gICAgICAgICAgY29uc3QgbmFtZSA9IHZlcnRleC5wcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmtleSA9PT0gJ25hbWUnKTsKLSAgICAgICAgICBhc3NlcnQub2soYWdlKTsKLSAgICAgICAgICBhc3NlcnQub2sobmFtZSk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFnZS52YWx1ZSwgMjkpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChuYW1lLnZhbHVlLCAnbWFya28nKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIGhhbmRsZSBFZGdlIHByb3BlcnRpZXMgZm9yIGdyZW1saW4gcmVxdWVzdCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCdnLkUoKS5oYXMoIndlaWdodCIsIDAuNSkubGltaXQoMSknKQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpOwotICAgICAgICAgIGNvbnN0IGVkZ2UgPSByZXN1bHQuZmlyc3QoKTsKLSAgICAgICAgICBhc3NlcnQub2soZWRnZSBpbnN0YW5jZW9mIGdyYXBoTW9kdWxlLkVkZ2UpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlZGdlLmxhYmVsLCAna25vd3MnKTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZWRnZS5wcm9wZXJ0aWVzWzBdLnZhbHVlLCAwLjUpOwotICAgICAgICAgIGFzc2VydC5vayhlZGdlLmluVik7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGVkZ2Uub3V0Vik7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBoYW5kbGUgVmVydGV4UHJvcGVydHkgbWV0YWRhdGEgZm9yIGdyZW1saW4gcmVxdWVzdCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnRDcmV3LnN1Ym1pdCgnZy5WKDcpLnByb3BlcnRpZXMoImxvY2F0aW9uIikubGltaXQoMSknKQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpOwotICAgICAgICAgIGNvbnN0IHByb3AgPSByZXN1bHQuZmlyc3QoKTsKLSAgICAgICAgICBhc3NlcnQub2socHJvcCBpbnN0YW5jZW9mIGdyYXBoTW9kdWxlLlZlcnRleFByb3BlcnR5KTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHJvcC5rZXksICdsb2NhdGlvbicpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwcm9wLnZhbHVlLCAnY2VudHJldmlsbGUnKTsKLQotICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHByb3AucHJvcGVydGllcy5maW5kKHAgPT4gcC5rZXkgPT09ICdzdGFydFRpbWUnKTsKLSAgICAgICAgICBjb25zdCBlbmRUaW1lID0gcHJvcC5wcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmtleSA9PT0gJ2VuZFRpbWUnKTsKLSAgICAgICAgICBhc3NlcnQub2soc3RhcnRUaW1lKTsKLSAgICAgICAgICBhc3NlcnQub2soZW5kVGltZSk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXJ0VGltZS52YWx1ZSwgMTk5MCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuZFRpbWUudmFsdWUsIDIwMDApOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgc2tpcCBWZXJ0ZXggcHJvcGVydGllcyBmb3IgZ3JlbWxpbiByZXF1ZXN0IHdpdGggdG9rZW5zJywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQoJ2cud2l0aCgibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgInRva2VucyIpLlYoMSknKQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpOwotICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHJlc3VsdC5maXJzdCgpOwotICAgICAgICAgIGFzc2VydC5vayh2ZXJ0ZXggaW5zdGFuY2VvZiBncmFwaE1vZHVsZS5WZXJ0ZXgpOwotICAgICAgICAgIGFzc2VydC5vayh2ZXJ0ZXgucHJvcGVydGllcy5sZW5ndGggPT09IDApOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGFuZGxlIFZlcnRleFByb3BlcnRpZXMgcHJvcGVydGllcyBmb3IgZ3JlbWxpbiByZXF1ZXN0JywgYXN5bmMgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgY3Jld0NsaWVudCA9IGhlbHBlci5nZXRDbGllbnQoJ2djcmV3Jyk7Ci0gICAgICBhd2FpdCBjcmV3Q2xpZW50Lm9wZW4oKTsKLQotICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3Jld0NsaWVudC5zdWJtaXQoJ2cuVig3KScpOwotCi0gICAgICBhc3NlcnQub2socmVzdWx0KTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTsKLSAgICAgIGNvbnN0IHZlcnRleCA9IHJlc3VsdC5maXJzdCgpOwotICAgICAgCi0gICAgICBhc3NlcnRWZXJ0ZXhQcm9wZXJ0aWVzKHZlcnRleCk7Ci0KLSAgICAgIGF3YWl0IGNyZXdDbGllbnQuY2xvc2UoKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGFuZGxlIFZlcnRleFByb3BlcnRpZXMgcHJvcGVydGllcyBmb3IgYnl0ZWNvZGUgcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGNyZXdDbGllbnQgPSBoZWxwZXIuZ2V0Q2xpZW50KCdnY3JldycpOwotICAgICAgYXdhaXQgY3Jld0NsaWVudC5vcGVuKCk7Ci0KLSAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNyZXdDbGllbnQuc3VibWl0KG5ldyBCeXRlY29kZSgpLmFkZFN0ZXAoJ1YnLCBbN10pKTsKLQotICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7Ci0gICAgICBjb25zdCB2ZXJ0ZXggPSByZXN1bHQuZmlyc3QoKS5vYmplY3Q7Ci0gICAgICAKLSAgICAgIGFzc2VydFZlcnRleFByb3BlcnRpZXModmVydGV4KTsKLQotICAgICAgYXdhaXQgY3Jld0NsaWVudC5jbG9zZSgpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBiZSBhYmxlIHRvIHN0cmVhbSByZXN1bHRzIGZyb20gdGhlIGdyZW1saW4gc2VydmVyJywgKGRvbmUpID0+IHsKLSAgICAgIGNvbnN0IG91dHB1dCA9IFtdOwotICAgICAgbGV0IGNhbGxzID0gMDsKLSAgICAgIGNvbnN0IHJlYWRhYmxlID0gY2xpZW50LnN0cmVhbSgnZy5WKCkubGltaXQoMyknLCB7fSwgeyBiYXRjaFNpemU6IDIgfSk7Ci0KLSAgICAgIHJlYWRhYmxlLm9uKCdkYXRhJywgKGRhdGEpID0+IHsKLSAgICAgICAgY2FsbHMgKz0gMTsKLSAgICAgICAgZGF0YS50b0FycmF5KCkuZm9yRWFjaCh2ID0+IG91dHB1dC5wdXNoKHYpKQotICAgICAgfSkKLQotICAgICAgcmVhZGFibGUub24oJ2VuZCcsICgpID0+IHsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNhbGxzLCAyKTsgLy8gbGltaXQgb2YgMyB3aXRoIGJhdGNoU2l6ZSBvZiAyIHNob3VsZCBiZSB0d28gZnVuY3Rpb24gY2FsbHMKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG91dHB1dC5sZW5ndGgsIDMpOwotICAgICAgICBhc3NlcnQub2sob3V0cHV0WzBdIGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuVmVydGV4KTsKLSAgICAgICAgZG9uZSgpOwotICAgICAgfSkKLSAgICB9KTsKLQotICAgIGl0KCJzaG91bGQgYmUgYWJsZSB0byBpdGVyYXRlIHN0cmVhbSByZXN1bHRzIGFzeW5jIiwgYXN5bmMgKCkgPT4gewotICAgICAgY29uc3Qgb3V0cHV0ID0gW107Ci0gICAgICBsZXQgY2FsbHMgPSAwOwotICAgICAgY29uc3QgcmVhZGFibGUgPSBjbGllbnQuc3RyZWFtKCJnLlYoKS5saW1pdCgzKSIsIHt9LCB7IGJhdGNoU2l6ZTogMiB9KTsKLQotICAgICAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2YgcmVhZGFibGUpIHsKLSAgICAgICAgY2FsbHMgKz0gMTsKLSAgICAgICAgcmVzdWx0LnRvQXJyYXkoKS5mb3JFYWNoKCh2KSA9PiBvdXRwdXQucHVzaCh2KSk7Ci0gICAgICB9Ci0KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjYWxscywgMik7IC8vIGxpbWl0IG9mIDMgd2l0aCBiYXRjaFNpemUgb2YgMiBzaG91bGQgYmUgdHdvIGZ1bmN0aW9uIGNhbGxzCi0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3V0cHV0Lmxlbmd0aCwgMyk7Ci0gICAgICBhc3NlcnQub2sob3V0cHV0WzBdIGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuVmVydGV4KTsKLSAgICB9KTsKLQotICAgIGl0KCJzaG91bGQgZ2V0IGVycm9yIGZvciBtYWxmb3JtZWQgcmVxdWVzdElkIGZvciBzY3JpcHQgc3RyZWFtIiwgYXN5bmMgKCkgPT4gewotICAgICAgdHJ5IHsKLSAgICAgICAgY29uc3QgcmVhZGFibGUgPSBjbGllbnQuc3RyZWFtKCdnLlYoKScsIHt9LCB7cmVxdWVzdElkOiAnbWFsZm9ybWVkJ30pOwotICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlc3VsdCBvZiByZWFkYWJsZSkgewotICAgICAgICAgIGFzc2VydC5mYWlsKCJtYWxmb3JtZWQgcmVxdWVzdElkIHNob3VsZCB0aHJvdyIpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGFzc2VydC5vayhlKTsKLSAgICAgICAgYXNzZXJ0Lm9rKGUubWVzc2FnZSk7Ci0gICAgICAgIGFzc2VydC5vayhlLm1lc3NhZ2UuaW5jbHVkZXMoImlzIG5vdCBhIHZhbGlkIFVVSUQuIikpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgaXQoInNob3VsZCBnZXQgZXJyb3IgZm9yIG1hbGZvcm1lZCByZXF1ZXN0SWQgZm9yIHNjcmlwdCBzdWJtaXQiLCBhc3luYyAoKSA9PiB7Ci0gICAgICB0cnkgewotICAgICAgICBhd2FpdCBjbGllbnQuc3VibWl0KCdnLlYoKScsIHt9LCB7cmVxdWVzdElkOiAnbWFsZm9ybWVkJ30pOwotICAgICAgICBhc3NlcnQuZmFpbCgibWFsZm9ybWVkIHJlcXVlc3RJZCBzaG91bGQgdGhyb3ciKTsKLSAgICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKGUpOwotICAgICAgICBhc3NlcnQub2soZS5tZXNzYWdlKTsKLSAgICAgICAgYXNzZXJ0Lm9rKGUubWVzc2FnZS5pbmNsdWRlcygiaXMgbm90IGEgdmFsaWQgVVVJRC4iKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBpdCgic2hvdWxkIGdldCBlcnJvciBmb3IgbWFsZm9ybWVkIHJlcXVlc3RJZCBmb3IgYnl0ZWNvZGUgc3RyZWFtIiwgYXN5bmMgKCkgPT4gewotICAgICAgdHJ5IHsKLSAgICAgICAgY29uc3QgcmVhZGFibGUgPSBjbGllbnQuc3RyZWFtKG5ldyBCeXRlY29kZSgpLmFkZFN0ZXAoJ1YnLCBbXSksIHt9LCB7cmVxdWVzdElkOiAnbWFsZm9ybWVkJ30pOwotICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlc3VsdCBvZiByZWFkYWJsZSkgewotICAgICAgICAgIGFzc2VydC5mYWlsKCJtYWxmb3JtZWQgcmVxdWVzdElkIHNob3VsZCB0aHJvdyIpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGFzc2VydC5vayhlKTsKLSAgICAgICAgYXNzZXJ0Lm9rKGUubWVzc2FnZSk7Ci0gICAgICAgIGFzc2VydC5vayhlLm1lc3NhZ2UuaW5jbHVkZXMoImlzIG5vdCBhIHZhbGlkIFVVSUQuIikpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgaXQoInNob3VsZCBnZXQgZXJyb3IgZm9yIG1hbGZvcm1lZCByZXF1ZXN0SWQgZm9yIGJ5dGVjb2RlIHN1Ym1pdCIsIGFzeW5jICgpID0+IHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGF3YWl0IGNsaWVudC5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFtdKSwge30sIHtyZXF1ZXN0SWQ6ICdtYWxmb3JtZWQnfSk7Ci0gICAgICAgIGFzc2VydC5mYWlsKCJtYWxmb3JtZWQgcmVxdWVzdElkIHNob3VsZCB0aHJvdyIpOwotICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICBhc3NlcnQub2soZSk7Ci0gICAgICAgIGFzc2VydC5vayhlLm1lc3NhZ2UpOwotICAgICAgICBhc3NlcnQub2soZS5tZXNzYWdlLmluY2x1ZGVzKCJpcyBub3QgYSB2YWxpZCBVVUlELiIpKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGl0KCJzaG91bGQgcmVqZWN0IHBlbmRpbmcgdHJhdmVyc2FsIHByb21pc2VzIGlmIGNvbm5lY3Rpb24gY2xvc2VzIiwgYXN5bmMgKCkgPT4gewotICAgICAgY29uc3QgY2xvc2luZ0NsaWVudCA9IGhlbHBlci5nZXRDbGllbnQoJ2dtb2Rlcm4nKTsKLSAgICAgIGF3YWl0IGNsb3NpbmdDbGllbnQub3BlbigpOwotICAgICAgY29uc3QgdGltZW91dCA9IDEwMDAwOwotICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLSAgICAgIGxldCBpc1JlamVjdGVkID0gZmFsc2U7Ci0gICAgICAKLSAgICAgIGNvbnN0IHBlbmRpbmcgPSBhc3luYyBmdW5jdGlvbiBzdWJtaXRUcmF2ZXJzYWxzKCkgewotICAgICAgICB3aGlsZSAoRGF0ZS5ub3coKSA8IHN0YXJ0VGltZSArIHRpbWVvdXQpIHsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgYXdhaXQgY2xvc2luZ0NsaWVudC5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFtdKS5hZGRTdGVwKCd0YWlsJywgW10pKTsKLSAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBjb25zdCBwZW5kaW5nUHJvbWlzZSA9IHBlbmRpbmcoKTsKLQotICAgICAgYXdhaXQgY2xvc2luZ0NsaWVudC5jbG9zZSgpOwotICAgICAgYXdhaXQgcGVuZGluZ1Byb21pc2U7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNSZWplY3RlZCwgdHJ1ZSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgic2hvdWxkIGVuZCBzdHJlYW1zIG9uIHRyYXZlcnNhbHMgaWYgY29ubmVjdGlvbiBjbG9zZXMiLCBhc3luYyAoKSA9PiB7Ci0gICAgICBjb25zdCBjbG9zaW5nQ2xpZW50ID0gaGVscGVyLmdldENsaWVudCgnZ21vZGVybicpOwotICAgICAgYXdhaXQgY2xvc2luZ0NsaWVudC5vcGVuKCk7Ci0gICAgICBsZXQgaXNSZWplY3RlZCA9IGZhbHNlOwotCi0gICAgICBjb25zdCByZWFkYWJsZSA9IGNsaWVudC5zdHJlYW0oJ2cuVigpLmxpbWl0KDMpJywge30sIHsgYmF0Y2hTaXplOiAyIH0pOwotCi0gICAgICByZWFkYWJsZS5vbignZW5kJywgKCkgPT4gewotICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKLSAgICAgIH0pOwotCi0gICAgICBhd2FpdCBjbG9zaW5nQ2xpZW50LmNsb3NlKCk7Ci0gICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlc3VsdCBvZiByZWFkYWJsZSkgewotICAgICAgICAvLyBDb25zdW1lIHRoZSBzdHJlYW0KLSAgICAgIH0KLQotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzUmVqZWN0ZWQsIHRydWUpOwotICAgIH0pOwotICB9KTsKLX0pOwotCi1mdW5jdGlvbiBhc3NlcnRWZXJ0ZXhQcm9wZXJ0aWVzKHZlcnRleCkgewotICBhc3NlcnQub2sodmVydGV4IGluc3RhbmNlb2YgZ3JhcGhNb2R1bGUuVmVydGV4KTsKLSAgbGV0IGxvY2F0aW9uczsKLSAgaWYgKHZlcnRleC5wcm9wZXJ0aWVzIGluc3RhbmNlb2YgQXJyYXkpIHsKLSAgICBsb2NhdGlvbnMgPSB2ZXJ0ZXgucHJvcGVydGllcy5maWx0ZXIocCA9PiBwLmtleSA9PSAnbG9jYXRpb24nKTsKLSAgfSBlbHNlIHsKLSAgICBsb2NhdGlvbnMgPSB2ZXJ0ZXgucHJvcGVydGllcy5sb2NhdGlvbgotICB9Ci0gIGFzc2VydC5zdHJpY3RFcXVhbChsb2NhdGlvbnMubGVuZ3RoLCAzKTsKLQotICBjb25zdCB2ZXJ0ZXhQcm9wZXJ0eSA9IGxvY2F0aW9uc1swXTsKLSAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcnRleFByb3BlcnR5LnZhbHVlLCAnY2VudHJldmlsbGUnKTsKLSAgY29uc3Qgc3RhcnQgPSB2ZXJ0ZXhQcm9wZXJ0eS5wcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmtleSA9PT0gJ3N0YXJ0VGltZScpOwotICBjb25zdCBlbmQgPSB2ZXJ0ZXhQcm9wZXJ0eS5wcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmtleSA9PT0gJ2VuZFRpbWUnKTsKLSAgYXNzZXJ0Lm9rKHN0YXJ0KTsKLSAgYXNzZXJ0Lm9rKGVuZCk7Ci0gIGFzc2VydC5zdHJpY3RFcXVhbChzdGFydC52YWx1ZSwgMTk5MCk7Ci0gIGFzc2VydC5zdHJpY3RFcXVhbChlbmQudmFsdWUsIDIwMDApOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL3JlbW90ZS1jb25uZWN0aW9uLXRlc3RzLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vcmVtb3RlLWNvbm5lY3Rpb24tdGVzdHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNzMxMjkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vcmVtb3RlLWNvbm5lY3Rpb24tdGVzdHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2J5dGVjb2RlJyk7Ci1jb25zdCBncmFwaE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLWNvbnN0IGhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlcicpOwotCi1sZXQgY29ubmVjdGlvbjsKLQotZGVzY3JpYmUoJ0RyaXZlclJlbW90ZUNvbm5lY3Rpb24nLCBmdW5jdGlvbiAoKSB7Ci0gIGJlZm9yZShmdW5jdGlvbiAoKSB7Ci0gICAgY29ubmVjdGlvbiA9IGhlbHBlci5nZXRDb25uZWN0aW9uKCdnbW9kZXJuJyk7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb24ub3BlbigpOwotICB9KTsKLSAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBjb25uZWN0aW9uLmNsb3NlKCk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjc3VibWl0KCknLCBmdW5jdGlvbiAoKSB7Ci0gICAgaXQoJ3Nob3VsZCBzZW5kIHRoZSByZXF1ZXN0IGFuZCBwYXJzZSB0aGUgcmVzcG9uc2UnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gY29ubmVjdGlvbi5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFtdKS5hZGRTdGVwKCd0YWlsJywgW10pKQotICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKLSAgICAgICAgICBhc3NlcnQub2socmVzcG9uc2UpOwotICAgICAgICAgIGFzc2VydC5vayhyZXNwb25zZS50cmF2ZXJzZXJzKTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzcG9uc2UudHJhdmVyc2Vycy5sZW5ndGgsIDEpOwotICAgICAgICAgIGFzc2VydC5vayhyZXNwb25zZS50cmF2ZXJzZXJzWzBdLm9iamVjdCBpbnN0YW5jZW9mIGdyYXBoTW9kdWxlLlZlcnRleCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgc2VuZCB0aGUgcmVxdWVzdCB3aXRoIHN5bnRheCBlcnJvciBhbmQgcGFyc2UgdGhlIHJlc3BvbnNlIGVycm9yJywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNvbm5lY3Rpb24uc3VibWl0KG5ldyBCeXRlY29kZSgpLmFkZFN0ZXAoJ1NZTlRBWF9FUlJPUicpKQotICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikgewotICAgICAgICAgIGFzc2VydC5vayhlcnIpOwotICAgICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmRleE9mKCc1OTknKSA+IDApOwotICAgICAgICAgIGFzc2VydC5vayhlcnIuc3RhdHVzQ29kZSA9PT0gNTk5KTsKLSAgICAgICAgICBhc3NlcnQub2soZXJyLnN0YXR1c01lc3NhZ2UgPT09ICdDb3VsZCBub3QgbG9jYXRlIG1ldGhvZDogR3JhcGhUcmF2ZXJzYWxTb3VyY2UuU1lOVEFYX0VSUk9SKCknKTsKLSAgICAgICAgICBhc3NlcnQub2soZXJyLnN0YXR1c0F0dHJpYnV0ZXMpOwotICAgICAgICAgIGFzc2VydC5vayhlcnIuc3RhdHVzQXR0cmlidXRlcy5oYXMoJ2V4Y2VwdGlvbnMnKSk7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGVyci5zdGF0dXNBdHRyaWJ1dGVzLmhhcygnc3RhY2tUcmFjZScpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vc2FzbC1hdXRoZW50aWNhdGlvbi10ZXN0cy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL3Nhc2wtYXV0aGVudGljYXRpb24tdGVzdHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDZkM2EuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vc2FzbC1hdXRoZW50aWNhdGlvbi10ZXN0cy5qcworKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBBc3NlcnRpb25FcnJvciA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyB0cmF2ZXJzYWwgfSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwnKTsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvYnl0ZWNvZGUnKTsKLWNvbnN0IGhlbHBlciA9IHJlcXVpcmUoJy4uL2hlbHBlcicpOwotY29uc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IHJlcXVpcmUoJy4uLy4uL2xpYi9kcml2ZXIvZHJpdmVyLXJlbW90ZS1jb25uZWN0aW9uJyk7Ci1jb25zdCBQbGFpblRleHRTYXNsQXV0aGVudGljYXRvciA9IHJlcXVpcmUoJy4uLy4uL2xpYi9kcml2ZXIvYXV0aC9wbGFpbi10ZXh0LXNhc2wtYXV0aGVudGljYXRvcicpOwotCi1sZXQgY29ubmVjdGlvbjsKLWxldCBiYWRTZXJ2ZXJBdXRoVXJsOwotaWYgKHByb2Nlc3MuZW52LkRPQ0tFUl9FTlZJUk9OTUVOVCA9PT0gJ3RydWUnKSB7Ci0gIGJhZFNlcnZlckF1dGhVcmwgPSAnd3M6Ly9ncmVtbGluLXNlcnZlci10ZXN0LWpzOjQ1OTQxL2dyZW1saW4nOwotfSBlbHNlIHsKLSAgYmFkU2VydmVyQXV0aFVybCA9ICd3czovL2xvY2FsaG9zdDo0NTk0MS9ncmVtbGluJzsKLX0KLQotZGVzY3JpYmUoJ0RyaXZlclJlbW90ZUNvbm5lY3Rpb24nLCBmdW5jdGlvbiAoKSB7Ci0gIGNvbnRleHQoJ3dpdGggUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3InLCBmdW5jdGlvbiAoKSB7Ci0gICAgdGhpcy50aW1lb3V0KDIwMDAwKTsKLQotICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gY29ubmVjdGlvbi5jbG9zZSgpOwotICAgIH0pOwotCi0gICAgZGVzY3JpYmUoJyNzdWJtaXQoKScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGl0KCdzaG91bGQgc2VuZCB0aGUgcmVxdWVzdCB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzIGFuZCBwYXJzZSB0aGUgcmVzcG9uc2UnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGNvbm5lY3Rpb24gPSBoZWxwZXIuZ2V0U2VjdXJlQ29ubmVjdGlvbldpdGhQbGFpblRleHRTYXNsQXV0aGVudGljYXRvcihudWxsLCAnc3RlcGhlbicsICdwYXNzd29yZCcpOwotCi0gICAgICAgIHJldHVybiBjb25uZWN0aW9uLnN1Ym1pdChuZXcgQnl0ZWNvZGUoKS5hZGRTdGVwKCdWJywgW10pLmFkZFN0ZXAoJ3RhaWwnLCBbXSkpCi0gICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICBhc3NlcnQub2socmVzcG9uc2UpOwotICAgICAgICAgICAgYXNzZXJ0Lm9rKHJlc3BvbnNlLnRyYXZlcnNlcnMpOwotICAgICAgICAgIH0pOwotICAgICAgfSk7Ci0KLSAgICAgIGl0KCdzaG91bGQgYmUgYWJsZSB0byBzZW5kIG11bHRpcGxlIHJlcXVlc3RzIGNvbmN1cnJlbnRseSB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzIGFuZCBwYXJzZSB0aGUgcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGNvbm5lY3Rpb24gPSBoZWxwZXIuZ2V0U2VjdXJlQ29ubmVjdGlvbldpdGhQbGFpblRleHRTYXNsQXV0aGVudGljYXRvcihudWxsLCAnc3RlcGhlbicsICdwYXNzd29yZCcpOwotCi0gICAgICAgIGNvbnN0IHN1Ym1pc3Npb25zID0gYXdhaXQgUHJvbWlzZS5hbGwoCi0gICAgICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogMTAgfSkubWFwKCgpID0+IGNvbm5lY3Rpb24uc3VibWl0KG5ldyBCeXRlY29kZSgpLmFkZFN0ZXAoJ1YnLCBbXSkuYWRkU3RlcCgndGFpbCcsIFtdKSkpLAotICAgICAgICApOwotCi0gICAgICAgIHN1Ym1pc3Npb25zLmZvckVhY2goKHJlc3BvbnNlKSA9PiB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKHJlc3BvbnNlKTsKLSAgICAgICAgICBhc3NlcnQub2socmVzcG9uc2UudHJhdmVyc2Vycyk7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0KLSAgICAgIGl0KCdzaG91bGQgc2VuZCB0aGUgcmVxdWVzdCB3aXRoIGludmFsaWQgY3JlZGVudGlhbHMgYW5kIHBhcnNlIHRoZSByZXNwb25zZSBlcnJvcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgY29ubmVjdGlvbiA9IGhlbHBlci5nZXRTZWN1cmVDb25uZWN0aW9uV2l0aFBsYWluVGV4dFNhc2xBdXRoZW50aWNhdG9yKG51bGwsICdCb2InLCAncGFzc3dvcmQnKTsKLQotICAgICAgICByZXR1cm4gY29ubmVjdGlvbi5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFtdKS5hZGRTdGVwKCd0YWlsJywgW10pKQotICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgYXNzZXJ0LmZhaWwoImludmFsaWQgY3JlZGVudGlhbHMgc2hvdWxkIHRocm93Iik7Ci0gICAgICAgICAgfSkKLSAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikgewotICAgICAgICAgICAgYXNzZXJ0Lm9rKGVycik7Ci0gICAgICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5kZXhPZignNDAxJykgPiAwKTsKLSAgICAgICAgICB9KTsKLSAgICAgIH0pOwotCi0gICAgICBpdCgnc2hvdWxkIHJldHVybiBlcnJvciB3aGVuIHVzaW5nIHdzOi8vIGZvciBhIFRMUyBjb25maWd1cmVkIHNlcnZlcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgY29uc3QgYXV0aGVudGljYXRvciA9IG5ldyBQbGFpblRleHRTYXNsQXV0aGVudGljYXRvcignc3RlcGhlbicsICdwYXNzd29yZCcpOwotICAgICAgICBjb25uZWN0aW9uID0gIGhlbHBlci5nZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uKGJhZFNlcnZlckF1dGhVcmwsIHsKLSAgICAgICAgICBhdXRoZW50aWNhdG9yOiBhdXRoZW50aWNhdG9yLAotICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24uc3VibWl0KG5ldyBCeXRlY29kZSgpLmFkZFN0ZXAoJ1YnLCBbXSkuYWRkU3RlcCgndGFpbCcsIFtdKSkKLSAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICBhc3NlcnQuZmFpbCgic2VydmVyIGlzIHJ1bm5pbmcgVExTIGFuZCB0cnlpbmcgdG8gY29ubmVjdCB3aXRoIHdzOi8vIHNvIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiBlcnJvciB0aHJvd24iKTsKLSAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikgewotICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHRocm93IGVycjsKLSAgICAgICAgICAgICAgYXNzZXJ0Lm9rKGVycik7Ci0gICAgICAgICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZSA9PT0gJ3NvY2tldCBoYW5nIHVwJyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgIH0pOwotCi0gICAgICBpdCgnc2hvdWxkIHJldHVybiBlcnJvciB3aGVuIHVzaW5nIHdzOi8vIGZvciBhIFRMUyBjb25maWd1cmVkIHNlcnZlcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgY29uc3QgYXV0aGVudGljYXRvciA9IG5ldyBQbGFpblRleHRTYXNsQXV0aGVudGljYXRvcignc3RlcGhlbicsICdwYXNzd29yZCcpOwotICAgICAgICBjb25uZWN0aW9uID0gIGhlbHBlci5nZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uKGJhZFNlcnZlckF1dGhVcmwsIHsKLSAgICAgICAgICBhdXRoZW50aWNhdG9yOiBhdXRoZW50aWNhdG9yLAotICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOwotICAgICAgICByZXR1cm4gZy5WKCkudG9MaXN0KCkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgICBhc3NlcnQuZmFpbCgic2VydmVyIGlzIHJ1bm5pbmcgVExTIGFuZCB0cnlpbmcgdG8gY29ubmVjdCB3aXRoIHdzOi8vIHNvIHRoaXMgc2hvdWxkIHJlc3VsdCBpbiBlcnJvciB0aHJvd24iKTsKLSAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7Ci0gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgdGhyb3cgZXJyOwotICAgICAgICAgICAgICBhc3NlcnQub2soZXJyKTsKLSAgICAgICAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlID09PSAnc29ja2V0IGhhbmcgdXAnKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9pbnRlZ3JhdGlvbi9zZXNzaW9uLWNsaWVudC10ZXN0cy5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL3Nlc3Npb24tY2xpZW50LXRlc3RzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTIwNWJiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL3Nlc3Npb24tY2xpZW50LXRlc3RzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgOiBMaXUgSmlhbnBpbmcKLSAqLwotCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgQnl0ZWNvZGUgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgZ3JhcGhNb2R1bGUgPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci1jb25zdCBoZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXInKTsKLQotbGV0IGNsaWVudDsKLQotZGVzY3JpYmUoJ0NsaWVudCcsIGZ1bmN0aW9uICgpIHsKLSAgYmVmb3JlKGZ1bmN0aW9uICgpIHsKLSAgICBjbGllbnQgPSBoZWxwZXIuZ2V0U2Vzc2lvbkNsaWVudCgnZycpOwotICAgIHJldHVybiBjbGllbnQub3BlbigpOwotICB9KTsKLSAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBjbGllbnQuY2xvc2UoKTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJyNzdWJtaXQoKScsIGZ1bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIHNlbmQgYnl0ZWNvZGUgYW5kIHJlc3BvbnNlIGVycm9yJywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQobmV3IEJ5dGVjb2RlKCkuYWRkU3RlcCgnVicsIFtdKS5hZGRTdGVwKCd0YWlsJywgW10pKQotICAgICAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikgewotICAgICAgICAgIGFzc2VydC5vayhlcnIpOwotICAgICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmRleE9mKCdzZXNzaW9uJykgPiAwKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHVzZSBnbG9iYWwgY2FjaGUgaW4gc2Vzc2lvbicsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCJ4ID0gWzAsIDEsIDIsIDMsIDQsIDVdIikKLSAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgewotICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCA2KTsKLSAgICAgICAgICAvL2NvbnNvbGUubG9nKCJ4IDogJXMiLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKLSAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgY2xpZW50LnN1Ym1pdCgieFsyXSArIDQiKQotICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7Ci0gICAgICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOwotICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmlyc3QoKSwgNik7Ci0gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coInhbMl0gKyA0OiAlcyIsIEpTT04uc3RyaW5naWZ5KHJlc3VsdCkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCB1c2UgYmluZGluZ3MgYW5kIGdvbGJhbCBjYWNoZSB2YXJpYWJsZSBpbiBzZXNzaW9uJywgZnVuY3Rpb24gKCkgewotICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQoJ3hbM10gKyB5JywgeyB5OiAzIH0pCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKLSAgICAgICAgICBhc3NlcnQub2socmVzdWx0KTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5maXJzdCgpLCA2KTsKLSAgICAgICAgICAvL2NvbnNvbGUubG9nKCJ4WzNdICsgeTogJXMiLCBKU09OLnN0cmluZ2lmeShyZXN1bHQpKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL3NvY2tldC1jb25uZWN0aW9uLXRlc3RzLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vc29ja2V0LWNvbm5lY3Rpb24tdGVzdHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2YWRhODYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vc29ja2V0LWNvbm5lY3Rpb24tdGVzdHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgS3lsZSBCb3llcgotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTsKLWNvbnN0IHVybCA9IHJlcXVpcmUoJ3VybCcpOwotY29uc3QgaGVscGVyID0gcmVxdWlyZSgnLi4vaGVscGVyJyk7Ci0KLWNvbnN0IHRlc3RTZXJ2ZXJQb3J0ID0gNDU5NDQ7Ci1jb25zdCB0ZXN0U2VydmVyNDAxUmVzcG9uc2VCb2R5ID0gJ0ludmFsaWQgY3JlZGVudGlhbHMgcHJvdmlkZWQnOwotCi1kZXNjcmliZSgnQ29ubmVjdGlvbicsIGZ1bmN0aW9uICgpIHsKLSAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoZnVuY3Rpb24gKHJlcSwgcmVzKSB7Ci0gICAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKHJlcS51cmwsIHRydWUpOwotICAgIGNvbnN0IHBhdGhuYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lOwotICAgIGlmIChwYXRobmFtZSA9PT0gJy80MDEnKSB7Ci0gICAgICByZXMuc3RhdHVzQ29kZSA9IDQwMTsKLSAgICAgIHJldHVybiByZXMuZW5kKHRlc3RTZXJ2ZXI0MDFSZXNwb25zZUJvZHkpOwotICAgIH0KLSAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDsKLSAgICByZXMuZW5kKCk7Ci0gIH0pOwotICBiZWZvcmUoZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2VydmVyLmxpc3Rlbih0ZXN0U2VydmVyUG9ydCwgcmVzb2x2ZSkpOwotICB9KTsKLSAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBzZXJ2ZXIuY2xvc2UoKTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJyNvcGVuKCknLCBmdW5jdGlvbiAoKSB7Ci0gICAgaXQoJ3Nob3VsZCB1c2UgdGhlIHdzIFdlYlNvY2tldCB3aGVuIHdzIHNwZWNpZmljIG9wdGlvbnMgYXJlIHByb3ZpZGVkJywgZnVuY3Rpb24gKCkgewotICAgICAgbGV0IGdsb2JhbFdlYnNvY2tldENhbGxzID0gMDsKLSAgICAgIGdsb2JhbFRoaXMuV2ViU29ja2V0ID0gZnVuY3Rpb24gKCkgewotICAgICAgICBnbG9iYWxXZWJzb2NrZXRDYWxscysrOwotICAgICAgfTsKLSAgICAgIGNvbnN0IHdzU3BlY2lmaWNPcHRpb25zID0gWwotICAgICAgICAnaGVhZGVycycsCi0gICAgICAgICdjYScsCi0gICAgICAgICdjZXJ0JywKLSAgICAgICAgJ3BmeCcsCi0gICAgICAgICdyZWplY3RVbmF1dGhvcml6ZWQnLAotICAgICAgICAnYWdlbnQnLAotICAgICAgICAncGVyTWVzc2FnZURlZmxhdGUnLAotICAgICAgXTsKLSAgICAgIGNvbnN0IGFsbE9wdGlvblRlc3RzID0gd3NTcGVjaWZpY09wdGlvbnMubWFwKCh3c09wdGlvbikgPT4gewotICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gaGVscGVyLmdldERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYHdzOi8vbG9jYWxob3N0OiR7dGVzdFNlcnZlclBvcnR9LzQwMWAsIHsKLSAgICAgICAgICBbd3NPcHRpb25dOiAndGhpcyBvcHRpb24gaXMgc2V0JywKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBjb25uZWN0aW9uLm9wZW4oKTsKLSAgICAgIH0pOwotICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChhbGxPcHRpb25UZXN0cykudGhlbihmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGFzc2VydC5lcXVhbChnbG9iYWxXZWJzb2NrZXRDYWxscywgMCwgJ2dsb2JhbCBXZWJTb2NrZXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBubyB3cyBzcGVjaWZpYyBvcHRpb25zIGFyZSBwcm92aWRlZCcpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCB1c2UgdGhlIGdsb2JhbCBXZWJTb2NrZXQgd2hlbiBvcHRpb25zIGFyZSBub3QgcHJvdmlkZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBsZXQgZ2xvYmFsV2Vic29ja2V0Q2FsbHMgPSAwOwotICAgICAgZ2xvYmFsVGhpcy5XZWJTb2NrZXQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGdsb2JhbFdlYnNvY2tldENhbGxzKys7Ci0gICAgICB9OwotICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGhlbHBlci5nZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uKGB3czovL2xvY2FsaG9zdDoke3Rlc3RTZXJ2ZXJQb3J0fS80MDFgLAotICAgICAgICAgIHtlbmFibGVDb21wcmVzc2lvbjogZmFsc2UsIGVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogZmFsc2V9KTsgLy8gR2xvYmFsIFdlYlNvY2tldCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGN1c3RvbWl6ZWQgY29tcHJlc3Npb24gYW5kIHVzZXIgYWdlbnQgaGVhZGVycwotICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KLSAgICAgICAgLm9wZW4oKQotICAgICAgICAuY2F0Y2goKCkgPT4ge30pCi0gICAgICAgIC5maW5hbGx5KGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBhc3NlcnQuZXF1YWwoZ2xvYmFsV2Vic29ja2V0Q2FsbHMsIDEsICdnbG9iYWwgV2ViU29ja2V0IHNob3VsZCBiZSB1c2VkIHdoZW4gbm8gd3Mgc3BlY2lmaWMgb3B0aW9ucyBhcmUgcHJvdmlkZWQnKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5leHBlY3RlZCByZXNwb25zZSBlcnJvcnMgd2l0aCBib2R5JywgZnVuY3Rpb24gKCkgewotICAgICAgZ2xvYmFsVGhpcy5XZWJTb2NrZXQgPSBodHRwLldlYlNvY2tldDsKLSAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBoZWxwZXIuZ2V0RHJpdmVyUmVtb3RlQ29ubmVjdGlvbihgd3M6Ly9sb2NhbGhvc3Q6JHt0ZXN0U2VydmVyUG9ydH0vNDAxYCk7Ci0gICAgICByZXR1cm4gY29ubmVjdGlvbgotICAgICAgICAub3BlbigpCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBhc3NlcnQuZmFpbCgnaW52YWxpZCBzdGF0dXMgY29kZXMgc2hvdWxkIHRocm93Jyk7Ci0gICAgICAgIH0pCi0gICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGVycik7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluZGV4T2YoNDAxKSA+IDApOwotICAgICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmRleE9mKHRlc3RTZXJ2ZXI0MDFSZXNwb25zZUJvZHkpID4gMCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgaGFuZGxlIHVuZXhwZWN0ZWQgcmVzcG9uc2UgZXJyb3JzIHdpdGggbm8gYm9keScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGdsb2JhbFRoaXMuV2ViU29ja2V0ID0gdW5kZWZpbmVkOwotICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGhlbHBlci5nZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uKGB3czovL2xvY2FsaG9zdDoke3Rlc3RTZXJ2ZXJQb3J0fS80MDRgKTsKLSAgICAgIHJldHVybiBjb25uZWN0aW9uCi0gICAgICAgIC5vcGVuKCkKLSAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkgewotICAgICAgICAgIGFzc2VydC5mYWlsKCdpbnZhbGlkIHN0YXR1cyBjb2RlcyBzaG91bGQgdGhyb3cnKTsKLSAgICAgICAgfSkKLSAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKLSAgICAgICAgICBhc3NlcnQub2soZXJyKTsKLSAgICAgICAgICBhc3NlcnQub2soZXJyLm1lc3NhZ2UuaW5kZXhPZig0MDQpID4gMCk7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluZGV4T2YoJ2JvZHknKSA8IDApOwotICAgICAgICB9KTsKLSAgICB9KTsKLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL3RyYXZlcnNhbC10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vdHJhdmVyc2FsLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNzdiMWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vdHJhdmVyc2FsLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IE1vY2hhID0gcmVxdWlyZSgnbW9jaGEnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBBc3NlcnRpb25FcnJvciB9ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gcmVxdWlyZSgnLi4vLi4vbGliL2RyaXZlci9kcml2ZXItcmVtb3RlLWNvbm5lY3Rpb24nKTsKLWNvbnN0IHsgVmVydGV4LCBFZGdlLCBWZXJ0ZXhQcm9wZXJ0eX0gPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci1jb25zdCB7IHRyYXZlcnNhbCB9ID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvYW5vbnltb3VzLXRyYXZlcnNhbCcpOwotY29uc3QgeyBQLCBuIH0gPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IHsgR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIEdyYXBoVHJhdmVyc2FsLCBzdGF0aWNzIH0gPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwnKTsKLWNvbnN0IHsgU3ViZ3JhcGhTdHJhdGVneSwgUmVhZE9ubHlTdHJhdGVneSwgU2VlZFN0cmF0ZWd5LCBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5LAotICAgICAgICBPcHRpb25zU3RyYXRlZ3ksIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LCBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSB9ID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5Jyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2J5dGVjb2RlJyk7Ci1jb25zdCBoZWxwZXIgPSByZXF1aXJlKCcuLi9oZWxwZXInKTsKLWNvbnN0IHtnZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uR3JhcGhTT059ID0gcmVxdWlyZSgiLi4vaGVscGVyIik7Ci1jb25zdCBfXyA9IHN0YXRpY3M7Ci0KLWxldCBjb25uZWN0aW9uOwotbGV0IHR4Q29ubmVjdGlvbjsKLQotY2xhc3MgU29jaWFsVHJhdmVyc2FsIGV4dGVuZHMgR3JhcGhUcmF2ZXJzYWwgewotICBjb25zdHJ1Y3RvcihncmFwaCwgdHJhdmVyc2FsU3RyYXRlZ2llcywgYnl0ZWNvZGUpIHsKLSAgICBzdXBlcihncmFwaCwgdHJhdmVyc2FsU3RyYXRlZ2llcywgYnl0ZWNvZGUpOwotICB9Ci0KLSAgYWdlZChhZ2UpIHsKLSAgICByZXR1cm4gdGhpcy5oYXMoJ3BlcnNvbicsICdhZ2UnLCBhZ2UpOwotICB9Ci19Ci0KLWNsYXNzIFNvY2lhbFRyYXZlcnNhbFNvdXJjZSBleHRlbmRzIEdyYXBoVHJhdmVyc2FsU291cmNlIHsKLSAgY29uc3RydWN0b3IoZ3JhcGgsIHRyYXZlcnNhbFN0cmF0ZWdpZXMsIGJ5dGVjb2RlKSB7Ci0gICAgc3VwZXIoZ3JhcGgsIHRyYXZlcnNhbFN0cmF0ZWdpZXMsIGJ5dGVjb2RlLCBTb2NpYWxUcmF2ZXJzYWxTb3VyY2UsIFNvY2lhbFRyYXZlcnNhbCk7Ci0gIH0KLQotICBwZXJzb24obmFtZSkgewotICAgIHJldHVybiB0aGlzLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgbmFtZSk7Ci0gIH0KLX0KLQotZnVuY3Rpb24gYW5vbnltb3VzKCkgewotICByZXR1cm4gbmV3IFNvY2lhbFRyYXZlcnNhbChudWxsLCBudWxsLCBuZXcgQnl0ZWNvZGUoKSk7Ci19Ci0KLWZ1bmN0aW9uIGFnZWQoYWdlKSB7Ci0gIHJldHVybiBhbm9ueW1vdXMoKS5hZ2VkKGFnZSk7Ci19Ci0KLWRlc2NyaWJlKCdUcmF2ZXJzYWwnLCBmdW5jdGlvbiAoKSB7Ci0gIGJlZm9yZShmdW5jdGlvbiAoKSB7Ci0gICAgY29ubmVjdGlvbiA9IGhlbHBlci5nZXRDb25uZWN0aW9uKCdnbW9kZXJuJyk7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb24ub3BlbigpOwotICB9KTsKLSAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgIHJldHVybiBjb25uZWN0aW9uLmNsb3NlKCk7Ci0gIH0pOwotICBkZXNjcmliZSgiI2NvbnN0cnVjdCIsIGZ1bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIG5vdCBoYW5nIGlmIHNlcnZlciBub3QgcHJlc2VudCcsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGhlbHBlci5nZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uKCd3czovL2xvY2FsaG9zdDo5OTk4L2dyZW1saW4nLCB7dHJhdmVyc2FsU291cmNlOiAnZyd9KSk7Ci0gICAgICByZXR1cm4gZy5WKCkudG9MaXN0KCkudGhlbihmdW5jdGlvbigpIHsKLSAgICAgICAgYXNzZXJ0LmZhaWwoInRoZXJlIGlzIG5vIHNlcnZlciBzbyBhbiBlcnJvciBzaG91bGQgaGF2ZSBvY2N1cnJlZCIpOwotICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7Ci0gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgdGhyb3cgZXJyOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLmNvZGUsICJFQ09OTlJFRlVTRUQiKTsKLSAgICAgIH0pOwotICAgIH0pOwotICB9KTsKLSAgZGVzY3JpYmUoJyN0b0xpc3QoKScsIGZ1bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIHN1Ym1pdCB0aGUgdHJhdmVyc2FsIGFuZCByZXR1cm4gYSBsaXN0JywgZnVuY3Rpb24gKCkgewotICAgICAgdmFyIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKTsKLSAgICAgIHJldHVybiBnLlYoKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7Ci0gICAgICAgIGFzc2VydC5vayhsaXN0KTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3QubGVuZ3RoLCA2KTsKLSAgICAgICAgbGlzdC5mb3JFYWNoKHYgPT4gYXNzZXJ0Lm9rKHYgaW5zdGFuY2VvZiBWZXJ0ZXgpKTsKLSAgICAgIH0pOwotICAgIH0pOwotICB9KTsKLSAgZGVzY3JpYmUoJyNjbG9uZSgpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgcmVzZXQgYSB0cmF2ZXJzYWwgd2hlbiBjbG9uZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOwotICAgICAgdmFyIHQgPSBnLlYoKS5jb3VudCgpOwotICAgICAgcmV0dXJuIHQubmV4dCgpLnRoZW4oZnVuY3Rpb24gKGl0ZW0xKSB7Ci0gICAgICAgIGFzc2VydC5vayhpdGVtMSk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtMS52YWx1ZSwgNik7Ci0gICAgICAgIHQuY2xvbmUoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTIpIHsKLSAgICAgICAgICBhc3NlcnQub2soaXRlbTIpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtMi52YWx1ZSwgNik7Ci0gICAgICAgIH0pOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotICBkZXNjcmliZSgnI25leHQoKScsIGZ1bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIHN1Ym1pdCB0aGUgdHJhdmVyc2FsIGFuZCByZXR1cm4gYW4gaXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOwotICAgICAgdmFyIHQgPSBnLlYoKS5jb3VudCgpOwotICAgICAgcmV0dXJuIHQuaGFzTmV4dCgpCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChtb3JlKSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKG1vcmUpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChtb3JlLCB0cnVlKTsKLSAgICAgICAgICByZXR1cm4gdC5uZXh0KCk7Ci0gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCBmYWxzZSk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBpdGVtLnZhbHVlLCAnbnVtYmVyJyk7Ci0gICAgICAgICAgcmV0dXJuIHQubmV4dCgpOwotICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0pOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLmRvbmUsIHRydWUpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLnZhbHVlLCBudWxsKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotICBkZXNjcmliZSgnI21hdGVyaWFsaXplUHJvcGVydGllcygpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgc2tpcCB2ZXJ0ZXggcHJvcGVydGllcyB3aGVuIHRva2VucyBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29ubmVjdGlvbik7Ci0gICAgICByZXR1cm4gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgInRva2VucyIpLlYoKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7Ci0gICAgICAgIGFzc2VydC5vayhsaXN0KTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3QubGVuZ3RoLCA2KTsKLSAgICAgICAgbGlzdC5mb3JFYWNoKHYgPT4gYXNzZXJ0Lm9rKHYgaW5zdGFuY2VvZiBWZXJ0ZXgpKTsKLSAgICAgICAgbGlzdC5mb3JFYWNoKHYgPT4gYXNzZXJ0LnN0cmljdEVxdWFsKHYucHJvcGVydGllcy5sZW5ndGgsIDApKTsKLSAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgc2tpcCBlZGdlIHByb3BlcnRpZXMgd2hlbiB0b2tlbnMgaXMgc2V0JywgZnVuY3Rpb24gKCkgewotICAgICAgdmFyIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOwotICAgICAgcmV0dXJuIGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJ0b2tlbnMiKS5FKCkudG9MaXN0KCkudGhlbihmdW5jdGlvbiAobGlzdCkgewotICAgICAgICBhc3NlcnQub2sobGlzdCk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0Lmxlbmd0aCwgNik7Ci0gICAgICAgIGxpc3QuZm9yRWFjaChlID0+IGFzc2VydC5vayhlIGluc3RhbmNlb2YgRWRnZSkpOwotICAgICAgICAvLyBkdWUgdG8gdGhlIHdheSBlZGdlIGlzIGNvbnN0cnVjdGVkLCBlZGdlIHByb3BlcnRpZXMgd2lsbCBiZSB7fSByZWdhcmRsZXNzIGlmIGl0J3MgbnVsbCBvciBbXQotICAgICAgICBsaXN0LmZvckVhY2goZSA9PiBhc3NlcnQuc3RyaWN0RXF1YWwoT2JqZWN0LmtleXMoZS5wcm9wZXJ0aWVzKS5sZW5ndGgsIDApKTsKLSAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgc2tpcCB2ZXJ0ZXggcHJvcGVydHkgcHJvcGVydGllcyB3aGVuIHRva2VucyBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICB2YXIgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29ubmVjdGlvbik7Ci0gICAgICByZXR1cm4gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgInRva2VucyIpLlYoKS5wcm9wZXJ0aWVzKCkudG9MaXN0KCkudGhlbihmdW5jdGlvbiAobGlzdCkgewotICAgICAgICBhc3NlcnQub2sobGlzdCk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0Lmxlbmd0aCwgMTIpOwotICAgICAgICBsaXN0LmZvckVhY2godnAgPT4gYXNzZXJ0Lm9rKHZwIGluc3RhbmNlb2YgVmVydGV4UHJvcGVydHkpKTsKLSAgICAgICAgbGlzdC5mb3JFYWNoKHZwID0+IGFzc2VydC5zdHJpY3RFcXVhbCh2cC5wcm9wZXJ0aWVzLmxlbmd0aCwgMCkpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBza2lwIHBhdGggZWxlbWVudCBwcm9wZXJ0aWVzIHdoZW4gdG9rZW5zIGlzIHNldCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIHZhciBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25uZWN0aW9uKTsKLSAgICAgIHJldHVybiBnLndpdGhfKCJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiLCAidG9rZW5zIikuVigpLmhhcygnbmFtZScsJ21hcmtvJykub3V0RSgpLmluVigpLmhhc0xhYmVsKCdzb2Z0d2FyZScpLnBhdGgoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICBjb25zdCBwID0gaXRlbS52YWx1ZTsKLSAgICAgICAgYXNzZXJ0Lm9rKHApOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocC5vYmplY3RzLmxlbmd0aCwgMyk7Ci0gICAgICAgIGNvbnN0IGEgPSBwLm9iamVjdHNbMF07Ci0gICAgICAgIGNvbnN0IGIgPSBwLm9iamVjdHNbMV07Ci0gICAgICAgIGNvbnN0IGMgPSBwLm9iamVjdHNbMl07Ci0gICAgICAgIGFzc2VydC5vayhhIGluc3RhbmNlb2YgVmVydGV4KTsKLSAgICAgICAgYXNzZXJ0Lm9rKGIgaW5zdGFuY2VvZiBFZGdlKTsKLSAgICAgICAgYXNzZXJ0Lm9rKGMgaW5zdGFuY2VvZiBWZXJ0ZXgpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5wcm9wZXJ0aWVzLmxlbmd0aCwgMCk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChPYmplY3Qua2V5cyhiLnByb3BlcnRpZXMpLmxlbmd0aCwgMCk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjLnByb3BlcnRpZXMubGVuZ3RoLCAwKTsKLSAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgbWF0ZXJpYWxpemUgcGF0aCBlbGVtZW50IHByb3BlcnRpZXMgd2hlbiBhbGwgaXMgc2V0JywgZnVuY3Rpb24gKCkgewotICAgICAgdmFyIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOwotICAgICAgcmV0dXJuIGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJhbGwiKS5WKCkuaGFzKCduYW1lJywnbWFya28nKS5vdXRFKCkuaW5WKCkuaGFzTGFiZWwoJ3NvZnR3YXJlJykucGF0aCgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgIGNvbnN0IHAgPSBpdGVtLnZhbHVlOwotICAgICAgICBhc3NlcnQub2socCk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwLm9iamVjdHMubGVuZ3RoLCAzKTsKLSAgICAgICAgY29uc3QgYSA9IHAub2JqZWN0c1swXTsKLSAgICAgICAgY29uc3QgYiA9IHAub2JqZWN0c1sxXTsKLSAgICAgICAgY29uc3QgYyA9IHAub2JqZWN0c1syXTsKLSAgICAgICAgYXNzZXJ0Lm9rKGEgaW5zdGFuY2VvZiBWZXJ0ZXgpOwotICAgICAgICBhc3NlcnQub2soYiBpbnN0YW5jZW9mIEVkZ2UpOwotICAgICAgICBhc3NlcnQub2soYyBpbnN0YW5jZW9mIFZlcnRleCk7Ci0gICAgICAgIGFzc2VydC5vayhhLnByb3BlcnRpZXMpOwotICAgICAgICAvLyB0aGVzZSBhc3NlcnRpb25zIGFyZSBpZi90aGVuIGJlY2F1c2Ugb2YgaG93IG1peGVkIHVwIGphdmFzY3JpcHQgaXMgcmlnaHQgbm93IG9uIHNlcmlhbGl6YXRpb24KLSAgICAgICAgLy8gc3RhbmRhcmRzIGFzIGRpc2N1c3NlZCBvbiBUSU5LRVJQT1AtMzE4NiAtIGNhbiBmaXggdGhhdCBvbiBhIGJyZWFraW5nIGNoYW5nZS4uLnVudGlsIHRoZW4gd2UKLSAgICAgICAgLy8ganVzdCByZXRhaW4gZXhpc3Rpbmcgd2VpcmRuZXNzLgotICAgICAgICBsZXQgYU5hbWVQcm9wcywgYUFnZVByb3BzOwotICAgICAgICBpZiAoYS5wcm9wZXJ0aWVzIGluc3RhbmNlb2YgQXJyYXkpIHsKLSAgICAgICAgICBhTmFtZVByb3BzID0gYS5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAua2V5ID09PSAnbmFtZScpOwotICAgICAgICAgIGFBZ2VQcm9wcyA9IGEucHJvcGVydGllcy5maWx0ZXIocCA9PiBwLmtleSA9PT0gJ2FnZScpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGFOYW1lUHJvcHMgPSBhLnByb3BlcnRpZXNbJ25hbWUnXTsKLSAgICAgICAgICBhQWdlUHJvcHMgPSBhLnByb3BlcnRpZXNbJ2FnZSddOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydC5vayhhTmFtZVByb3BzKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFOYW1lUHJvcHMubGVuZ3RoLCAxKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFOYW1lUHJvcHNbMF0udmFsdWUsICdtYXJrbycpOwotICAgICAgICBhc3NlcnQub2soYUFnZVByb3BzKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFBZ2VQcm9wcy5sZW5ndGgsIDEpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYUFnZVByb3BzWzBdLnZhbHVlLCAyOSk7Ci0gICAgICAgIGFzc2VydC5vayhiLnByb3BlcnRpZXMpOwotICAgICAgICBjb25zdCBiV2VpZ2h0ID0gYi5wcm9wZXJ0aWVzWzBdLnZhbHVlCi0gICAgICAgIGFzc2VydC5vayhiV2VpZ2h0ICE9PSB1bmRlZmluZWQpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYldlaWdodCwgMC40KTsKLSAgICAgICAgYXNzZXJ0Lm9rKGMucHJvcGVydGllcyk7Ci0gICAgICAgIGxldCBjTmFtZVByb3BzLCBjTGFuZ1Byb3BzOwotICAgICAgICBpZiAoYy5wcm9wZXJ0aWVzIGluc3RhbmNlb2YgQXJyYXkpIHsKLSAgICAgICAgICBjTmFtZVByb3BzID0gYy5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAua2V5ID09PSAnbmFtZScpOwotICAgICAgICAgIGNMYW5nUHJvcHMgPSBjLnByb3BlcnRpZXMuZmlsdGVyKHAgPT4gcC5rZXkgPT09ICdsYW5nJyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgY05hbWVQcm9wcyA9IGMucHJvcGVydGllc1snbmFtZSddOwotICAgICAgICAgIGNMYW5nUHJvcHMgPSBjLnByb3BlcnRpZXNbJ2xhbmcnXTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQub2soY05hbWVQcm9wcyk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjTmFtZVByb3BzLmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjTmFtZVByb3BzWzBdLnZhbHVlLCAnbG9wJyk7Ci0gICAgICAgIGFzc2VydC5vayhjTGFuZ1Byb3BzKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNMYW5nUHJvcHMubGVuZ3RoLCAxKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNMYW5nUHJvcHNbMF0udmFsdWUsICdqYXZhJyk7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgfSk7Ci0gIGRlc2NyaWJlKCdsYW1iZGFzJywgZnVuY3Rpb24oKSB7Ci0gICAgaXQoJ3Nob3VsZCBoYW5kbGUgMS1hcmcgbGFtYmRhcycsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOwotICAgICAgcmV0dXJuIGcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykudmFsdWVzKCduYW1lJykubWFwKCgpID0+ICJpdC5nZXQoKVsxXSIpLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24gKHMpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKHMpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc1swXSwgJ2EnKTsKLSAgICAgIH0pCi0gICAgfSk7Ci0gIH0pOwotICBkZXNjcmliZSgnZHNsJywgZnVuY3Rpb24oKSB7Ci0gICAgaXQoJ3Nob3VsZCBleHBvc2UgRFNMIG1ldGhvZHMnLCBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoU29jaWFsVHJhdmVyc2FsU291cmNlKS53aXRoXyhjb25uZWN0aW9uKTsKLSAgICAgIHJldHVybiBnLnBlcnNvbignbWFya28nKS5hZ2VkKDI5KS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7Ci0gICAgICAgICAgYXNzZXJ0Lm9rKGxpc3QpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0Lmxlbmd0aCwgMSk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3RbMF0sICdtYXJrbycpOwotICAgICAgICB9KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgZXhwb3NlIGFub255bW91cyBEU0wgbWV0aG9kcycsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbChTb2NpYWxUcmF2ZXJzYWxTb3VyY2UpLndpdGhfKGNvbm5lY3Rpb24pOwotICAgICAgcmV0dXJuIGcucGVyc29uKCdtYXJrbycpLmZpbHRlcihhZ2VkKDI5KSkudmFsdWVzKCduYW1lJykudG9MaXN0KCkudGhlbihmdW5jdGlvbiAobGlzdCkgewotICAgICAgICBhc3NlcnQub2sobGlzdCk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0Lmxlbmd0aCwgMSk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0WzBdLCAnbWFya28nKTsKLSAgICAgIH0pOwotICAgIH0pOwotICB9KTsKLSAgZGVzY3JpYmUoIm1vcmUgY29tcGxleCB0cmF2ZXJzYWxzIiwgZnVuY3Rpb24oKSB7Ci0gICAgaXQoJ3Nob3VsZCByZXR1cm4gcGF0aHMgb2YgdmFsdWUgbWFwcycsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOwotICAgICAgcmV0dXJuIGcuVigxKS5vdXQoKS5vcmRlcigpLmluXygpLm9yZGVyKCkubGltaXQoMSkucGF0aCgpLmJ5KF9fLnZhbHVlTWFwKCduYW1lJykpLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKGxpc3QpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdC5sZW5ndGgsIDEpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdFswXS5vYmplY3RzWzBdLmdldCgnbmFtZScpWzBdLCAibWFya28iKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3RbMF0ub2JqZWN0c1sxXS5nZXQoJ25hbWUnKVswXSwgInZhZGFzIik7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0WzBdLm9iamVjdHNbMl0uZ2V0KCduYW1lJylbMF0sICJtYXJrbyIpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotICBkZXNjcmliZSgic2hvdWxkIGFsbG93IFRyYXZlcnNhbFN0cmF0ZWd5IGRlZmluaXRpb24iLCBmdW5jdGlvbigpIHsKLSAgICBpdCgnc2hvdWxkIGFsbG93IFN1YmdyYXBoU3RyYXRlZ3knLCBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKS53aXRoU3RyYXRlZ2llcygKLSAgICAgICAgICBuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6X18uaGFzTGFiZWwoInBlcnNvbiIpLCBlZGdlczpfXy5oYXNMYWJlbCgiY3JlYXRlZCIpfSkpOwotICAgICAgZy5WKCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCA0KTsKLSAgICAgIH0sIChlcnIpID0+IGFzc2VydC5mYWlsKCJ0YW5rZWQ6ICIgKyBlcnIpKTsKLSAgICAgIGcuRSgpLmNvdW50KCkubmV4dCgpLnRoZW4oZnVuY3Rpb24gKGl0ZW0xKSB7Ci0gICAgICAgIGFzc2VydC5vayhpdGVtMSk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtMS52YWx1ZSwgMCk7Ci0gICAgICB9LCAoZXJyKSA9PiBhc3NlcnQuZmFpbCgidGFua2VkOiAiICsgZXJyKSk7Ci0gICAgICBnLlYoKS5sYWJlbCgpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCAxKTsKLSAgICAgIH0sIChlcnIpID0+IGFzc2VydC5mYWlsKCJ0YW5rZWQ6ICIgKyBlcnIpKTsKLSAgICAgIGcuVigpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCAicGVyc29uIik7Ci0gICAgICB9LCAoZXJyKSA9PiBhc3NlcnQuZmFpbCgidGFua2VkOiAiICsgZXJyKSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBhbGxvdyBSZWFkT25seVN0cmF0ZWd5JywgZnVuY3Rpb24oKSB7Ci0gICAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSk7Ci0gICAgICByZXR1cm4gZy5hZGRWKCkuaXRlcmF0ZSgpLnRoZW4oKCkgPT4gYXNzZXJ0LmZhaWwoInNob3VsZCBoYXZlIHRhbmtlZCIpLCAoZXJyKSA9PiBhc3NlcnQub2soZXJyKSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBhbGxvdyBPcHRpb25zU3RyYXRlZ3knLCBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKS53aXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KCkpOwotICAgICAgcmV0dXJuIGcuVigpLmNvdW50KCkubmV4dCgpLnRoZW4oZnVuY3Rpb24gKGl0ZW0xKSB7Ci0gICAgICAgIGFzc2VydC5vayhpdGVtMSk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtMS52YWx1ZSwgNik7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgICBpdCgnc2hvdWxkIGFsbG93IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5JywgZnVuY3Rpb24oKSB7Ci0gICAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMobmV3IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KHtsb2dXYXJuaW5nczogZmFsc2UsIHRocm93RXhjZXB0aW9uOiB0cnVlfSkpOwotICAgICAgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJpZCIsICJwbGVhc2UtZG9uJ3QtdXNlLWlkIikuaXRlcmF0ZSgpLnRoZW4oKCkgPT4gYXNzZXJ0LmZhaWwoInNob3VsZCBoYXZlIHRhbmtlZCIpLCAoZXJyKSA9PiBhc3NlcnQub2soZXJyKSk7Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCBhbGxvdyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneScsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pLndpdGhTdHJhdGVnaWVzKG5ldyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh7bG9nV2FybmluZ3M6IGZhbHNlLCB0aHJvd0V4Y2VwdGlvbjogdHJ1ZX0pKTsKLSAgICAgIGcuVigpLm91dEUoImNyZWF0ZWQiLCAia25vd3MiKS5jb3VudCgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtMSkgewotICAgICAgICBhc3NlcnQub2soaXRlbTEpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbTEudmFsdWUsIDYpOwotICAgICAgfSk7Ci0gICAgICByZXR1cm4gZy5WKCkub3V0KCkuaXRlcmF0ZSgpLnRoZW4oKCkgPT4gYXNzZXJ0LmZhaWwoInNob3VsZCBoYXZlIHRhbmtlZCIpLCAoZXJyKSA9PiBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLnN0YXR1c0NvZGUsIDUwMCkpOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgYWxsb3cgd2l0aF8oZXZhbHVhdGlvblRpbWVvdXQsMTApJywgZnVuY3Rpb24oKSB7Ci0gICAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aF8oJ3gnKS53aXRoXygnZXZhbHVhdGlvblRpbWVvdXQnLCAxMCk7Ci0gICAgICByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkuaXRlcmF0ZSgpLnRoZW4oKCkgPT4gYXNzZXJ0LmZhaWwoInNob3VsZCBoYXZlIHRhbmtlZCIpLCAoZXJyKSA9PiBhc3NlcnQuc3RyaWN0RXF1YWwoZXJyLnN0YXR1c0NvZGUsIDU5OCkpOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgYWxsb3cgU2VlZFN0cmF0ZWd5JywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDk5OTk5OX0pKTsKLSAgICAgIHJldHVybiBnLlYoKS5jb2luKDAuNCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCAxKTsKLSAgICAgIH0sIChlcnIpID0+IGFzc2VydC5mYWlsKCJ0YW5rZWQ6ICIgKyBlcnIpKTsKLSAgICB9KTsKLSAgICBpdCgnc2hvdWxkIGFsbG93IHdpdGhvdXQgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3knLCBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGMgPSBoZWxwZXIuZ2V0RHJpdmVyUmVtb3RlQ29ubmVjdGlvbkdyYXBoU09OKCAnZ21vZGVybicpOwotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGMpLndpdGhvdXRTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KTsKLSAgICAgIHJldHVybiBnLlYoKS5jb3VudCgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtMSkgewotICAgICAgICBhc3NlcnQub2soaXRlbTEpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbTEudmFsdWUsIDYpOwotICAgICAgICBjLmNsb3NlKCk7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgICBpdCgnc2hvdWxkIGFsbG93IHdpdGggRmlsdGVyUmFua2luZ1N0cmF0ZWd5JywgZnVuY3Rpb24oKSB7Ci0gICAgICBjb25zdCBjID0gaGVscGVyLmdldERyaXZlclJlbW90ZUNvbm5lY3Rpb25HcmFwaFNPTiggJ2dtb2Rlcm4nKTsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhjKS53aXRoU3RyYXRlZ2llcyhuZXcgRmlsdGVyUmFua2luZ1N0cmF0ZWd5KCkpOwotICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKS5jb3VudCgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtMSkgewotICAgICAgICBhc3NlcnQub2soaXRlbTEpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbTEudmFsdWUsIDQpOwotICAgICAgICBjLmNsb3NlKCk7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgfSk7Ci0gIGRlc2NyaWJlKCJzaG91bGQgaGFuZGxlIHR4IGVycm9ycyBpZiBncmFwaCBub3Qgc3VwcG9ydCB0eCIsIGZ1bmN0aW9uKCkgewotICAgIGl0KCdzaG91bGQgdGhyb3cgZXhjZXB0aW9uIG9uIGNvbW1pdCBpZiBncmFwaCBub3Qgc3VwcG9ydCB0eCcsIGFzeW5jIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29ubmVjdGlvbik7Ci0gICAgICBjb25zdCB0eCA9IGcudHgoKTsKLSAgICAgIGNvbnN0IGd0eCA9IHR4LmJlZ2luKCk7Ci0gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnLlYoKS5jb3VudCgpLm5leHQoKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCg2LCByZXN1bHQudmFsdWUpOwotICAgICAgdHJ5IHsKLSAgICAgICAgYXdhaXQgdHguY29tbWl0KCk7Ci0gICAgICAgIGFzc2VydC5mYWlsKCJzaG91bGQgdGhyb3cgZXJyb3IiKTsKLSAgICAgIH0gY2F0Y2ggKGVycikgewotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoIlNlcnZlciBlcnJvcjogR3JhcGggZG9lcyBub3Qgc3VwcG9ydCB0cmFuc2FjdGlvbnMgKDUwMCkiLCBlcnIubWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgaXQoJ3Nob3VsZCB0aHJvdyBleGNlcHRpb24gb24gcm9sbGJhY2sgaWYgZ3JhcGggbm90IHN1cHBvcnQgdHgnLCBhc3luYyBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOwotICAgICAgY29uc3QgdHggPSBnLnR4KCk7Ci0gICAgICB0eC5iZWdpbigpOwotICAgICAgdHJ5IHsKLSAgICAgICAgYXdhaXQgdHgucm9sbGJhY2soKTsKLSAgICAgICAgYXNzZXJ0LmZhaWwoInNob3VsZCB0aHJvdyBlcnJvciIpOwotICAgICAgfSBjYXRjaCAoZXJyKSB7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgiU2VydmVyIGVycm9yOiBHcmFwaCBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zYWN0aW9ucyAoNTAwKSIsIGVyci5tZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfSk7Ci0gIGRlc2NyaWJlKCdzdXBwb3J0IHJlbW90ZSB0cmFuc2FjdGlvbnMgLSBjb21taXQnLCBmdW5jdGlvbigpIHsKLSAgICBiZWZvcmUoZnVuY3Rpb24gKCkgewotICAgICAgdHhDb25uZWN0aW9uID0gaGVscGVyLmdldENvbm5lY3Rpb24oJ2d0eCcpOwotICAgICAgcmV0dXJuIHR4Q29ubmVjdGlvbi5vcGVuKCk7Ci0gICAgfSk7Ci0gICAgYWZ0ZXIoZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHR4Q29ubmVjdGlvbik7Ci0gICAgICByZXR1cm4gZy5WKCkuZHJvcCgpLml0ZXJhdGUoKS50aGVuKCgpID0+IHsKLSAgICAgICAgcmV0dXJuIHR4Q29ubmVjdGlvbi5jbG9zZSgpCi0gICAgICB9KTsKLSAgICB9KTsKLSAgICBpdCgnc2hvdWxkIGNvbW1pdCBhIHNpbXBsZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyh0eENvbm5lY3Rpb24pOwotICAgICAgY29uc3QgdHggPSBnLnR4KCk7Ci0gICAgICBjb25zdCBndHggPSB0eC5iZWdpbigpOwotICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwotICAgICAgICBndHguYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9yZ2UiKS5pdGVyYXRlKCksCi0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuaXRlcmF0ZSgpCi0gICAgICBdKTsKLQotICAgICAgbGV0IHIgPSBhd2FpdCBndHguVigpLmNvdW50KCkubmV4dCgpOwotICAgICAgLy8gYXNzZXJ0IHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24uLi4uCi0gICAgICBhc3NlcnQub2socik7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoci52YWx1ZSwgMik7Ci0KLSAgICAgIC8vIG5vdyBjb21taXQgY2hhbmdlcyB0byB0ZXN0IG91dHNpZGUgb2YgdGhlIHRyYW5zYWN0aW9uCi0gICAgICBhd2FpdCB0eC5jb21taXQoKTsKLQotICAgICAgciA9IGF3YWl0IGcuVigpLmNvdW50KCkubmV4dCgpOwotICAgICAgYXNzZXJ0Lm9rKHIpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHIudmFsdWUsIDIpOwotICAgICAgLy8gY29ubmVjdGlvbiBjbG9zaW5nIGFzeW5jLCBzbyBuZWVkIHRvIHdhaXQKLSAgICAgIHdoaWxlICh0eC5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5pc09wZW4pIHsKLSAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7Ci0gICAgICB9Ci0gICAgICBhc3NlcnQub2soIXR4Ll9zZXNzaW9uQmFzZWRDb25uZWN0aW9uLmlzT3Blbik7Ci0gICAgfSk7Ci0gIH0pOwotICBkZXNjcmliZSgnc3VwcG9ydCByZW1vdGUgdHJhbnNhY3Rpb25zIC0gcm9sbGJhY2snLCBmdW5jdGlvbigpIHsKLSAgICBiZWZvcmUoZnVuY3Rpb24gKCkgewotCi0gICAgICB0eENvbm5lY3Rpb24gPSBoZWxwZXIuZ2V0Q29ubmVjdGlvbignZ3R4Jyk7Ci0gICAgICByZXR1cm4gdHhDb25uZWN0aW9uLm9wZW4oKTsKLSAgICB9KTsKLSAgICBhZnRlcihmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8odHhDb25uZWN0aW9uKTsKLSAgICAgIHJldHVybiBnLlYoKS5kcm9wKCkuaXRlcmF0ZSgpLnRoZW4oKCkgPT4gewotICAgICAgICByZXR1cm4gdHhDb25uZWN0aW9uLmNsb3NlKCkKLSAgICAgIH0pOwotICAgIH0pOwotICAgIGl0KCdzaG91bGQgcm9sbGJhY2sgYSBzaW1wbGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyh0eENvbm5lY3Rpb24pOwotICAgICAgY29uc3QgdHggPSBnLnR4KCk7Ci0gICAgICBjb25zdCBndHggPSB0eC5iZWdpbigpOwotICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwotICAgICAgICBndHguYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9yZ2UiKS5pdGVyYXRlKCksCi0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuaXRlcmF0ZSgpCi0gICAgICBdKTsKLQotICAgICAgbGV0IHIgPSBhd2FpdCBndHguVigpLmNvdW50KCkubmV4dCgpOwotICAgICAgLy8gYXNzZXJ0IHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24uLi4uCi0gICAgICBhc3NlcnQub2socik7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoci52YWx1ZSwgMik7Ci0KLSAgICAgIC8vIG5vdyByb2xsYmFjayBjaGFuZ2VzIHRvIHRlc3Qgb3V0c2lkZSBvZiB0aGUgdHJhbnNhY3Rpb24KLSAgICAgIGF3YWl0IHR4LnJvbGxiYWNrKCk7Ci0KLSAgICAgIHIgPSBhd2FpdCBnLlYoKS5jb3VudCgpLm5leHQoKTsKLSAgICAgIGFzc2VydC5vayhyKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyLnZhbHVlLCAwKTsKLSAgICAgIC8vIGNvbm5lY3Rpb24gY2xvc2luZyBhc3luYywgc28gbmVlZCB0byB3YWl0Ci0gICAgICB3aGlsZSAodHguX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24uaXNPcGVuKSB7Ci0gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpOwotICAgICAgfQotICAgICAgYXNzZXJ0Lm9rKCF0eC5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5pc09wZW4pOwotICAgIH0pOwotICB9KTsKLX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvYnl0ZWNvZGUtdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvYnl0ZWNvZGUtdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM2NjRkNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2J5dGVjb2RlLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBTZXJoaXkgU2FsbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgZ3JhcGggPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci1jb25zdCBncmFwaFRyYXZlcnNhbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbCcpOwotY29uc3QgX18gPSBncmFwaFRyYXZlcnNhbE1vZHVsZS5zdGF0aWNzOwotY29uc3QgeyBSZWFkT25seVN0cmF0ZWd5IH0gPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLQotZGVzY3JpYmUoJ0J5dGVjb2RlJywgKCkgPT4gewotCi0gICAgZGVzY3JpYmUoJyN0b1N0cmluZygpJywgKCkgPT4gewotICAgICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJ5dGVjb2RlJywgKCkgPT4gewotICAgICAgICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgICAgICAgY29uc3QgYnl0ZWNvZGUgPSBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuaGFzKCJuYW1lIiwgInBldGVyIik7Ci0gICAgICAgICAgICBhc3NlcnQub2soYnl0ZWNvZGUpOwotICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnRvU3RyaW5nKCksICdbW10sW1siViJdLFsiaGFzTGFiZWwiLCJwZXJzb24iXSxbImhhcyIsIm5hbWUiLCJwZXRlciJdXV0nKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2YWxpZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWNvZGUgd2l0aCByZWZlcmVuY2UgdG8gaW5uZXIgc3RlcHMnLCAoKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBnID0gbmV3IGdyYXBoLkdyYXBoKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgICAgICBjb25zdCBieXRlY29kZSA9IGcuVigpLmhhc0xhYmVsKCJhaXJwb3J0Iikud2hlcmUoX18ub3V0RSgicm91dGUiKS5oYXNJZCg3NzUzKSk7Ci0gICAgICAgICAgICBhc3NlcnQub2soYnl0ZWNvZGUpOwotICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnRvU3RyaW5nKCksICdbW10sW1siViJdLFsiaGFzTGFiZWwiLCJhaXJwb3J0Il0sWyJ3aGVyZSIsW1sib3V0RSIsInJvdXRlIl0sWyJoYXNJZCIsNzc1M11dXV1dJyk7Ci0gICAgICAgIH0pOwotICAgICAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGJ5dGVjb2RlIHdpdGggbXVsdGlwbGUgcGFyYW1ldGVycycsICgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGcgPSBuZXcgZ3JhcGguR3JhcGgoKS50cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIGNvbnN0IGJ5dGVjb2RlID0gZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpOwotICAgICAgICAgICAgYXNzZXJ0Lm9rKGJ5dGVjb2RlKTsKLSAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS50b1N0cmluZygpLCAnW1tdLFtbIlYiXSxbImhhcyIsInBlcnNvbiIsIm5hbWUiLCJtYXJrbyJdXV0nKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2YWxpZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWNvZGUgd2l0aCBzdHJhdGVnaWVzJywgKCkgPT4gewotICAgICAgICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgICAgICAgY29uc3QgYnl0ZWNvZGUgPSBnLndpdGhfKCdlbmFibGVkJykud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpOwotICAgICAgICAgICAgYXNzZXJ0Lm9rKGJ5dGVjb2RlKTsKLSAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS50b1N0cmluZygpLCAnW1tbIndpdGhTdHJhdGVnaWVzIix7ImZxY24iOiJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5IiwiY29uZmlndXJhdGlvbiI6eyJlbmFibGVkIjp0cnVlfX1dLFsid2l0aFN0cmF0ZWdpZXMiLHsiZnFjbiI6Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlYWRPbmx5U3RyYXRlZ3kiLCJjb25maWd1cmF0aW9uIjp7fX1dXSxbWyJWIl1dXScpOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvY2xpZW50LXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2NsaWVudC10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2JlYzc4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvY2xpZW50LXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi8uLi9saWIvZHJpdmVyL2NsaWVudCcpOwotCi1kZXNjcmliZSgnQ2xpZW50JywgZnVuY3Rpb24gKCkgewotICBjb25zdCBjdXN0b21PcFByb2Nlc3NvciA9ICdjdXN0b21PcFByb2Nlc3Nvcic7Ci0gIGNvbnN0IHF1ZXJ5ID0gJ2N1c3RvbVF1ZXJ5JzsKLQotICBpdCgnc2hvdWxkIHVzZSBkZWZhdWx0IG9wUHJvY2Vzc29yJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IGNvbm5lY3Rpb25Nb2NrID0gewotICAgICAgc3VibWl0OiBmdW5jdGlvbiAocHJvY2Vzc29yLCBvcCwgYXJncywgcmVxdWVzdElkKSB7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhcmdzLmdyZW1saW4sIHF1ZXJ5KTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHByb2Nlc3NvciwgJycpOwotCi0gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgY29uc3QgY3VzdG9tQ2xpZW50ID0gbmV3IENsaWVudCgnd3M6Ly9sb2NhbGhvc3Q6OTMyMScsIHt0cmF2ZXJzYWxTb3VyY2U6ICdnJywgY29ubmVjdE9uU3RhcnR1cDogZmFsc2V9KTsKLSAgICBjdXN0b21DbGllbnQuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uTW9jazsKLSAgICBjdXN0b21DbGllbnQuc3VibWl0KHF1ZXJ5KQotICB9KTsKLQotICBpdCgnc2hvdWxkIGFsbG93IHRvIGNvbmZpZ3VyZSBvcFByb2Nlc3NvcicsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCBjb25uZWN0aW9uTW9jayA9IHsKLSAgICAgIHN1Ym1pdDogZnVuY3Rpb24gKHByb2Nlc3Nvciwgb3AsIGFyZ3MsIHJlcXVlc3RJZCkgewotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXJncy5ncmVtbGluLCBxdWVyeSk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwcm9jZXNzb3IsIGN1c3RvbU9wUHJvY2Vzc29yKTsKLQotICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGNvbnN0IGN1c3RvbUNsaWVudCA9IG5ldyBDbGllbnQoJ3dzOi8vbG9jYWxob3N0OjkzMjEnLCB7dHJhdmVyc2FsU291cmNlOiAnZycsIHByb2Nlc3NvcjogY3VzdG9tT3BQcm9jZXNzb3IsIGNvbm5lY3RPblN0YXJ0dXA6IGZhbHNlfSk7Ci0gICAgY3VzdG9tQ2xpZW50Ll9jb25uZWN0aW9uID0gY29ubmVjdGlvbk1vY2s7Ci0gICAgY3VzdG9tQ2xpZW50LnN1Ym1pdChxdWVyeSkKLSAgfSk7Ci0KLSAgaXQoJ3Nob3VsZCBhbGxvdyB0byBzdWJtaXQgZXh0cmEgYXJndW1lbnRzJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IGNvbm5lY3Rpb25Nb2NrID0gewotICAgICAgc3VibWl0OiBmdW5jdGlvbiAocHJvY2Vzc29yLCBvcCwgYXJncywgcmVxdWVzdElkKSB7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhcmdzLmdyZW1saW4sIHF1ZXJ5KTsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFyZ3MuZXZhbHVhdGlvblRpbWVvdXQsIDEyMyk7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhcmdzLm1hdGVyaWFsaXplUHJvcGVydGllcywgJ3Rva2VucycpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHJvY2Vzc29yLCBjdXN0b21PcFByb2Nlc3Nvcik7Ci0KLSAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotICAgICAgfQotICAgIH07Ci0KLSAgICBjb25zdCBjdXN0b21DbGllbnQgPSBuZXcgQ2xpZW50KCd3czovL2xvY2FsaG9zdDo5MzIxJywge3RyYXZlcnNhbFNvdXJjZTogJ2cnLCBwcm9jZXNzb3I6IGN1c3RvbU9wUHJvY2Vzc29yLCBjb25uZWN0T25TdGFydHVwOiBmYWxzZX0pOwotICAgIGN1c3RvbUNsaWVudC5fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25Nb2NrOwotICAgIGN1c3RvbUNsaWVudC5zdWJtaXQocXVlcnksIG51bGwsIHsnZXZhbHVhdGlvblRpbWVvdXQnOiAxMjMsICdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnOiAndG9rZW5zJ30pCi0gIH0pOwotCi0gIGl0KCdzaG91bGQgdXNlIGRlZmF1bHQgbWltZVR5cGUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3QgY3VzdG9tQ2xpZW50ID0gbmV3IENsaWVudCgnd3M6Ly9sb2NhbGhvc3Q6OTMyMScsIHt0cmF2ZXJzYWxTb3VyY2U6ICdnJywgY29ubmVjdE9uU3RhcnR1cDogZmFsc2V9KTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VzdG9tQ2xpZW50Ll9jb25uZWN0aW9uLm1pbWVUeXBlLCAnYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAnKQotICB9KTsKLQotICBpdCgnc2hvdWxkIHVzZSBnaXZlbiBtaW1lVHlwZScsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCBjdXN0b21DbGllbnQgPSBuZXcgQ2xpZW50KCd3czovL2xvY2FsaG9zdDo5MzIxJywge3RyYXZlcnNhbFNvdXJjZTogJ2cnLCBjb25uZWN0T25TdGFydHVwOiBmYWxzZSwgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12Mi4wK2pzb24nfSk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1c3RvbUNsaWVudC5fY29ubmVjdGlvbi5taW1lVHlwZSwgJ2FwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbicpCi0gIH0pOwotCi0gIGl0KCdzaG91bGQgZGlzYWJsZSBjb21wcmVzc2lvbiBieSBkZWZhdWx0JywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoJ3dzOi8vbG9jYWxob3N0OjkzMjEnKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2xpZW50Ll9jb25uZWN0aW9uLl9lbmFibGVDb21wcmVzc2lvbiwgZmFsc2UpOwotICB9KTsKLQotICBpdCgnc2hvdWxkIHBhc3N0aHJvdWdoIGNvbXByZXNzaW9uIHNldHRpbmcnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3QgdW5jb21wcmVzc2VkQ2xpZW50ID0gbmV3IENsaWVudCgnd3M6Ly9sb2NhbGhvc3Q6OTMyMScsIHtlbmFibGVDb21wcmVzc2lvbjogZmFsc2V9KTsKLSAgICBjb25zdCBjb21wcmVzc2VkQ2xpZW50ID0gbmV3IENsaWVudCgnd3M6Ly9sb2NhbGhvc3Q6OTMyMScsIHtlbmFibGVDb21wcmVzc2lvbjogdHJ1ZX0pOwotCi0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHVuY29tcHJlc3NlZENsaWVudC5fY29ubmVjdGlvbi5fZW5hYmxlQ29tcHJlc3Npb24sIGZhbHNlKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29tcHJlc3NlZENsaWVudC5fY29ubmVjdGlvbi5fZW5hYmxlQ29tcHJlc3Npb24sIHRydWUpOwotICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9lbGVtZW50LWNvbXBhcmlzb24tdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZWxlbWVudC1jb21wYXJpc29uLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlM2M2MTIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9lbGVtZW50LWNvbXBhcmlzb24tdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWNvbnN0IGNoYWkgPSByZXF1aXJlKCdjaGFpJykKLWNvbnN0IHsgZXhwZWN0IH0gPSByZXF1aXJlKCdjaGFpJyk7Ci1jb25zdCB7IFZlcnRleFByb3BlcnR5LCBQcm9wZXJ0eSwgVmVydGV4LCBFZGdlLCBQYXRoIH0gPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci1jb25zdCB7IGRlZXBNZW1iZXJzQnlJZCwgY29tcGFyZUVsZW1lbnRzLCBvcHQgfSA9IHJlcXVpcmUoJy4uL2N1Y3VtYmVyL2VsZW1lbnQtY29tcGFyaXNvbicpOwotY29uc3QgZGVlcEVxdWFsID0gcmVxdWlyZSgnZGVlcC1lcWwnKTsKLQotY2hhaS51c2UoZnVuY3Rpb24gKGNoYWksIGNoYWlVdGlscykgewotICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVNZXRob2QoJ21lbWJlcnMnLCBmdW5jdGlvbiAoX3N1cGVyKSB7Ci0gICAgcmV0dXJuIGRlZXBNZW1iZXJzQnlJZDsKLSAgfSk7Ci19KTsKLQotZGVzY3JpYmUoJ3ByaW1pdGl2ZXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgaXQoJ3Nob3VsZCBwYXNzJywgZnVuY3Rpb24gKCkgewotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKDEsIDEsIG9wdCkpLnRvLmJlLnRydWU7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwoZmFsc2UsIGZhbHNlLCBvcHQpKS50by5iZS50cnVlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKG51bGwsIG51bGwsIG9wdCkpLnRvLmJlLnRydWU7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIGZhaWwnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwoMSwgMiwgb3B0KSkudG8uYmUuZmFsc2U7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwodHJ1ZSwgZmFsc2UsIG9wdCkpLnRvLmJlLmZhbHNlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKDAsICIwIiwgb3B0KSkudG8uYmUuZmFsc2U7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwoMCwgZmFsc2UsIG9wdCkpLnRvLmJlLmZhbHNlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKDAsIG51bGwsIG9wdCkpLnRvLmJlLmZhbHNlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKGZhbHNlLCBudWxsLCBvcHQpKS50by5iZS5mYWxzZTsKLSAgICB9KTsKLX0pOwotCi1kZXNjcmliZSgnZWxlbWVudHMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3QgdjEgPSBuZXcgVmVydGV4KDEsICJkb2ciLCB1bmRlZmluZWQpOwotICAgIGNvbnN0IHYyID0gbmV3IFZlcnRleCgxLCAiY2F0IiwgdW5kZWZpbmVkKTsKLSAgICBjb25zdCB2MyA9IG5ldyBWZXJ0ZXgoMiwgImNhdCIsIHVuZGVmaW5lZCk7Ci0KLSAgICBjb25zdCBlMSA9IG5ldyBFZGdlKDIsIHYxLCAiY2hhc2VzIiwgdjMsIHVuZGVmaW5lZCk7Ci0gICAgY29uc3QgZTIgPSBuZXcgRWRnZSgzLCB2MSwgImNoYXNlcyIsIHYzLCB1bmRlZmluZWQpOwotICAgIGNvbnN0IGUzID0gbmV3IEVkZ2UoMywgdjIsICJjaGFzZXMiLCB2MywgdW5kZWZpbmVkKTsKLQotICAgIGNvbnN0IHZwMSA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSgzLCAic2l6ZSIsICJzbWFsbCIsIHVuZGVmaW5lZCk7Ci0gICAgY29uc3QgdnAyID0gbmV3IFZlcnRleFByb3BlcnR5KDMsICJzaXplIiwgImxhcmdlIiwgdW5kZWZpbmVkKTsKLSAgICBjb25zdCB2cDMgPSBuZXcgVmVydGV4UHJvcGVydHkoNCwgInNpemUiLCAibGFyZ2UiLCB1bmRlZmluZWQpOwotCi0gICAgaXQoJ3Nob3VsZCBwYXNzIHdpdGggc2FtZSBpZCwgZGlmZmVyZW50IHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCh2MSwgdjIsIG9wdCkpLnRvLmJlLnRydWU7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwoZTIsIGUzLCBvcHQpKS50by5iZS50cnVlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHZwMSwgdnAyLCBvcHQpKS50by5iZS50cnVlOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggZGlmZmVyZW50IGlkLCBzYW1lIHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCh2MiwgdjMsIG9wdCkpLnRvLmJlLmZhbHNlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKGUxLCBlMiwgb3B0KSkudG8uYmUuZmFsc2U7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwodnAyLCB2cDMsIG9wdCkpLnRvLmJlLmZhbHNlOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggc2FtZSBpZCwgZGlmZmVyZW50IHR5cGUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwodjMsIGUxLCBvcHQpKS50by5iZS5mYWxzZTsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChlMywgdnAxLCBvcHQpKS50by5iZS5mYWxzZTsKLSAgICB9KTsKLQotICAgIGRlc2NyaWJlKCdlbGVtZW50IGFycmF5cycsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgY29uc3QgZWExID0gW3YxLCBlMiwgdjNdOwotICAgICAgICBjb25zdCBlYTIgPSBbdjEsIGUyLCB2M107Ci0gICAgICAgIGNvbnN0IGVhMyA9IFtlMiwgdjEsIHYzXTsKLSAgICAgICAgY29uc3QgZWE0ID0gW2UyLCBlMiwgdjNdOwotICAgICAgICBjb25zdCBlYTUgPSBbdjEsIGUyLCB2MywgdnAxXTsKLQotICAgICAgICBpdCgndW5vcmRlcmVkJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoZWEyKTsKLSAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKGVhMyk7Ci0gICAgICAgICAgICBleHBlY3QoZWExKS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoZWE0KTsKLSAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhlYTUpOwotICAgICAgICAgICAgZXhwZWN0KGVhNSkudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKGVhMSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdvcmRlcmVkJywgZnVuY3Rpb24gKCkgewotICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhlYTIpOwotICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoZWEzKTsKLSAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGVhNCk7Ci0gICAgICAgICAgICBleHBlY3QoZWExKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhlYTUpOwotICAgICAgICAgICAgZXhwZWN0KGVhNSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoZWExKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ2luY2x1ZGUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBleHBlY3QoZWExKS50by5pbmNsdWRlLmRlZXAubWVtYmVycyhlYTIpOwotICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWEzKTsKLSAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKGVhNCk7Ci0gICAgICAgICAgICBleHBlY3QoZWExKS50by5ub3QuaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWE1KTsKLQotICAgICAgICAgICAgZXhwZWN0KGVhMikudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWExKTsKLSAgICAgICAgICAgIGV4cGVjdChlYTMpLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKGVhMSk7Ci0gICAgICAgICAgICBleHBlY3QoZWE0KS50by5ub3QuaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWExKTsKLSAgICAgICAgICAgIGV4cGVjdChlYTUpLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKGVhMSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfSk7Ci0KLWRlc2NyaWJlKCdwcm9wZXJ0eScsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCBwMSA9IG5ldyBQcm9wZXJ0eSgiYSIsICIxIik7Ci0gICAgY29uc3QgcDIgPSBuZXcgUHJvcGVydHkoImEiLCAiMSIpOwotICAgIGNvbnN0IHAzID0gbmV3IFByb3BlcnR5KCJhIiwgMSk7Ci0gICAgY29uc3QgcDQgPSBuZXcgUHJvcGVydHkoMSwgMSk7Ci0gICAgY29uc3QgcDUgPSBuZXcgUHJvcGVydHkoMSwgImEiKTsKLQotICAgIGl0KCdzaG91bGQgcGFzcyBvbmx5IHByb3BlcnRpZXMgdGhhdCBtYXRjaCBleGFjdGx5JywgZnVuY3Rpb24gKCkgewotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHAxLCBwMiwgb3B0KSkudG8uYmUudHJ1ZTsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChwMSwgcDMsIG9wdCkpLnRvLmJlLmZhbHNlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHAxLCBwNCwgb3B0KSkudG8uYmUuZmFsc2U7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwocDMsIHA1LCBvcHQpKS50by5iZS5mYWxzZTsKLSAgICB9KTsKLX0pOwotCi1kZXNjcmliZSgnYXJyYXlzJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IGExID0gWzEsIDIsIDNdOwotICAgIGNvbnN0IGEyID0gWzEsIDIsIDNdOwotICAgIGNvbnN0IGEzID0gWzIsIDEsIDNdOwotICAgIGNvbnN0IGE0ID0gWzIsIDIsIDNdOwotICAgIGNvbnN0IGE1ID0gWzEsIDIsIDMsIDRdOwotCi0gICAgaXQoJ3Vub3JkZXJlZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KGExKS50by5oYXZlLmRlZXAubWVtYmVycyhhMik7Ci0gICAgICAgIGV4cGVjdChhMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoYTMpOwotICAgICAgICBleHBlY3QoYTEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhhNCk7Ci0gICAgICAgIGV4cGVjdChhMSkudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKGE1KTsKLSAgICAgICAgZXhwZWN0KGE1KS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoYTEpOwotICAgIH0pOwotCi0gICAgaXQoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChhMSkudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhMik7Ci0gICAgICAgIGV4cGVjdChhMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTMpOwotICAgICAgICBleHBlY3QoYTEpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGE0KTsKLSAgICAgICAgZXhwZWN0KGExKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhNSk7Ci0gICAgICAgIGV4cGVjdChhNSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTEpOwotICAgIH0pOwotCi0gICAgY29uc3QgYTYgPSBbMSwgMiwgYTFdOwotICAgIGNvbnN0IGE3ID0gWzEsIGEzLCAyXTsKLSAgICBjb25zdCBhOCA9IFsxLCAyLCBhNV07Ci0KLSAgICBjb25zdCBhOSA9IFsxLCBhMSwgYTFdOwotICAgIGNvbnN0IGExMCA9IFsxLCBhMSwgYTNdOwotCi0gICAgY29uc3QgYTExID0gW2E5XQotICAgIGNvbnN0IGExMiA9IFthMTBdCi0KLSAgICBpdCgndW5vcmRlcmVkIG5lc3RlZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KGE2KS50by5oYXZlLm5vdC5kZWVwLm1lbWJlcnMoYTcpOyAvLyBuZXN0ZWQgYXJyYXlzIG9yZGVyZWQgZGlmZmVyZW50bHkgZG9uJ3QgcGFzcyBhcyB0aGUgc2FtZSBpdGVtCi0gICAgICAgIGV4cGVjdChhNikudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKGE4KTsKLSAgICAgICAgZXhwZWN0KGE5KS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoYTEwKTsKLSAgICAgICAgZXhwZWN0KGExMSkudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKGExMik7Ci0gICAgfSk7Ci0KLSAgICBpdCgnb3JkZXJlZCBuZXN0ZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChhNikudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhNik7Ci0gICAgICAgIGV4cGVjdChhNikudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTcpOwotICAgICAgICBleHBlY3QoYTYpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGE4KTsKLSAgICAgICAgZXhwZWN0KGE5KS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhMTApOwotICAgICAgICBleHBlY3QoYTEwKS50by5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGExMCk7Ci0gICAgICAgIGV4cGVjdChhMTEpLnRvLmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTExKTsKLSAgICAgICAgZXhwZWN0KGExMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTEyKTsKLSAgICB9KTsKLX0pOwotCi1kZXNjcmliZSgnbWFwJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IG0xID0gW25ldyBNYXAoWwotICAgICAgICBbJ3JpcHBsZScsIFtuZXcgVmVydGV4KDUsICdzb2Z0d2FyZScsIHVuZGVmaW5lZCldXSwKLSAgICAgICAgWydwZXRlcicsIFtuZXcgVmVydGV4KDYsICdwZXJzb24nLCB1bmRlZmluZWQpXV0sCi0gICAgICAgIFsndmFkYXMnLCBbbmV3IFZlcnRleCgyLCAncGVyc29uJywgdW5kZWZpbmVkKV1dCi0gICAgXSldOwotICAgIGNvbnN0IG0yID0gW25ldyBNYXAoWwotICAgICAgICBbJ3JpcHBsZScsIFtuZXcgVmVydGV4KDUsICdzb2Z0d2FyZScsIHVuZGVmaW5lZCldXSwKLSAgICAgICAgWydwZXRlcicsIFtuZXcgVmVydGV4KDYsICdwZXJzb24nLCB1bmRlZmluZWQpXV0KLSAgICBdKV07Ci0gICAgY29uc3QgbTMgPSBbbmV3IE1hcChbCi0gICAgICAgIFsncmlwcGxlJywgW25ldyBWZXJ0ZXgoNSwgJ3NvZnR3YXJlJywgdW5kZWZpbmVkKV1dLAotICAgICAgICBbJ3ZhZGFzJywgW25ldyBWZXJ0ZXgoMiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldXSwKLSAgICAgICAgWydwZXRlcicsIFtuZXcgVmVydGV4KDYsICdwZXJzb24nLCB1bmRlZmluZWQpXV0KLSAgICBdKV07Ci0gICAgY29uc3QgbTQgPSBbbmV3IE1hcChbCi0gICAgICAgIFsncmlwcGxlJywgW25ldyBWZXJ0ZXgoNSwgJ3NvZnR3YXJlJywgdW5kZWZpbmVkKV1dLAotICAgICAgICBbJ3ZhZGFzJywgW25ldyBWZXJ0ZXgoNiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldXSwKLSAgICAgICAgWydwZXRlcicsIFtuZXcgVmVydGV4KDIsICdwZXJzb24nLCB1bmRlZmluZWQpXV0KLSAgICBdKV07Ci0KLSAgICBpdCgndW5vcmRlcmVkJywgZnVuY3Rpb24gKCkgewotICAgICAgICBleHBlY3QobTEpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKG0xKTsKLSAgICAgICAgZXhwZWN0KG0xKS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMobTIpOwotICAgICAgICBleHBlY3QobTEpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKG0zKTsKLSAgICAgICAgZXhwZWN0KG0xKS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMobTQpOwotICAgIH0pOwotCi0gICAgaXQoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChtMSkudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhtMSk7Ci0gICAgICAgIGV4cGVjdChtMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMobTIpOwotICAgICAgICBleHBlY3QobTEpLnRvLmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMobTMpOyAvLyBtYXAgZW50cmllcyBjYW4gYmUgdW5vcmRlcmVkCi0gICAgICAgIGV4cGVjdChtMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMobTQpOwotICAgIH0pOwotfSk7Ci0KLWRlc2NyaWJlKCdvYmplY3RzJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IG9iajEgPSBbewotICAgICAgICBrMTogInYxIiwKLSAgICAgICAgazI6ICJ2MiIsCi0gICAgICAgIGszOiB7IGs0OiAidjQiLCBrNTogInY1IiB9Ci0gICAgfV07Ci0gICAgY29uc3Qgb2JqMiA9IFt7Ci0gICAgICAgIGsxOiAidjEiLAotICAgICAgICBrMjogInYyIiwKLSAgICAgICAgazM6IHsgazQ6ICJ2NCIsIGs1OiAidjUiIH0KLSAgICB9XTsKLSAgICBjb25zdCBvYmozID0gW3sKLSAgICAgICAgazI6ICJ2MiIsCi0gICAgICAgIGsxOiAidjEiLAotICAgICAgICBrMzogeyBrNTogInY1IiwgazQ6ICJ2NCIgfQotICAgIH1dOwotICAgIGNvbnN0IG9iajQgPSBbewotICAgICAgICBrMTogInYxIiwKLSAgICAgICAgazI6ICJ2MiIsCi0gICAgICAgIGszOiB7IGs0OiAidjQiIH0KLSAgICB9XTsKLSAgICBjb25zdCBvYmo1ID0gW3sKLSAgICAgICAgazE6ICJ2MSIsCi0gICAgICAgIGsyOiAidjIiLAotICAgICAgICBrMzogeyBrNDogInY1IiwgazU6ICJ2NCIgfQotICAgIH1dOwotCi0gICAgaXQoJ3Nob3VsZCBwYXNzJywgZnVuY3Rpb24gKCkgewotICAgICAgICBleHBlY3Qob2JqMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMob2JqMik7IC8vIGlkZW50aWNhbAotICAgICAgICBleHBlY3Qob2JqMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMob2JqMyk7IC8vIG9yZGVyIHN3YXBwZWQKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgZmFpbCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KG9iajEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhvYmo0KTsgLy8gbWlzc2luZyBuZXN0ZWQga3ZwCi0gICAgICAgIGV4cGVjdChvYmoxKS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMob2JqNSk7IC8vIHZhbHVlcyBzd2FwcGVkCi0gICAgfSk7Ci0KLSAgICBjb25zdCBvYmo2ID0gW3sKLSAgICAgICAgazE6ICJ2MSIsCi0gICAgICAgIGsyOiAidjIiLAotICAgICAgICBrMzogWyAxLCAyLCAzIF0KLSAgICB9XTsKLSAgICBjb25zdCBvYmo3ID0gW3sKLSAgICAgICAgazM6IFsgMSwgMiwgMyBdLAotICAgICAgICBrMTogInYxIiwKLSAgICAgICAgazI6ICJ2MiIKLSAgICB9XTsKLSAgICBjb25zdCBvYmo4ID0gW3sKLSAgICAgICAgazE6ICJ2MSIsCi0gICAgICAgIGsyOiAidjIiLAotICAgICAgICBrMzogWyAyLCAxLCAzIF0KLSAgICB9XTsKLQotICAgIGl0KCd1bm9yZGVyZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChvYmo2KS50by5oYXZlLmRlZXAubWVtYmVycyhvYmo3KTsKLSAgICAgICAgZXhwZWN0KG9iajYpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhvYmo4KTsKLSAgICB9KTsKLQotICAgIGl0KCdvcmRlcmVkJywgZnVuY3Rpb24gKCkgewotICAgICAgICBleHBlY3Qob2JqNikudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhvYmo3KTsgLy8ga3ZwIGNhbiBiZSB1bm9yZGVyZWQKLSAgICAgICAgZXhwZWN0KG9iajYpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKG9iajgpOyAvLyBhcnJheSBtdXN0IGJlIG9yZGVyZWQKLSAgICB9KTsKLQotICAgIGNvbnN0IHBhdGgxID0gbmV3IFBhdGgoWyJwYXRoIl0sIFtuZXcgVmVydGV4KDEsICdwZXJzb24nLCB1bmRlZmluZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVydGV4KDIsICdwZXJzb24nLCB1bmRlZmluZWQpXSk7Ci0gICAgY29uc3QgcGF0aDIgPSBuZXcgUGF0aChbInBhdGgiXSwgW25ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicsIHVuZGVmaW5lZCldKTsKLSAgICBjb25zdCBwYXRoMyA9IG5ldyBQYXRoKFsicGF0aCJdLCBbbmV3IFZlcnRleCgyLCAncGVyc29uJywgdW5kZWZpbmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFZlcnRleCgxLCAncGVyc29uJywgdW5kZWZpbmVkKV0pOwotCi0gICAgaXQoJ3Vub3JkZXJlZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChwYXRoMSwgcGF0aDEpKS50by5iZS50cnVlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHBhdGgxLCBwYXRoMikpLnRvLmJlLmZhbHNlOwotICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHBhdGgxLCBwYXRoMykpLnRvLmJlLmZhbHNlOwotICAgIH0pOwotCi0gICAgaXQoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgIGV4cGVjdChkZWVwRXF1YWwocGF0aDEsIHBhdGgxKSkudG8uYmUudHJ1ZTsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChwYXRoMSwgcGF0aDIpKS50by5iZS5mYWxzZTsKLSAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChwYXRoMSwgcGF0aDMpKS50by5iZS5mYWxzZTsKLSAgICB9KTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2V4cG9ydHMtdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZXhwb3J0cy10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTdkZGVlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZXhwb3J0cy10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgZ2x2TW9kdWxlID0gcmVxdWlyZSgnLi4vLi4vJyk7Ci0KLWRlc2NyaWJlKCdBUEknLCBmdW5jdGlvbiAoKSB7Ci0gIGl0KCdzaG91bGQgZXhwb3J0IGZpZWxkcyB1bmRlciBwcm9jZXNzJywgZnVuY3Rpb24gKCkgewotICAgIGFzc2VydC5vayhnbHZNb2R1bGUpOwotICAgIGFzc2VydC5vayhnbHZNb2R1bGUucHJvY2Vzcyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5CeXRlY29kZSwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5FbnVtVmFsdWUsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuUCwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5UcmF2ZXJzYWwsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuVHJhdmVyc2FsU2lkZUVmZmVjdHMsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuVHJhdmVyc2FsU3RyYXRlZ2llcywgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5UcmF2ZXJzYWxTdHJhdGVneSwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5UcmF2ZXJzZXIsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuR3JhcGhUcmF2ZXJzYWwsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuR3JhcGhUcmF2ZXJzYWxTb3VyY2UsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuYmFycmllciwgJ29iamVjdCcpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuY2FyZGluYWxpdHksICdvYmplY3QnKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLmNvbHVtbiwgJ29iamVjdCcpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuZGlyZWN0aW9uLCAnb2JqZWN0Jyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5kaXJlY3Rpb24uYm90aCwgJ29iamVjdCcpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChnbHZNb2R1bGUucHJvY2Vzcy5kaXJlY3Rpb24uYm90aC5lbGVtZW50TmFtZSwgJ0JPVEgnKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLm9wZXJhdG9yLCAnb2JqZWN0Jyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5vcmRlciwgJ29iamVjdCcpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MucG9wLCAnb2JqZWN0Jyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5zY29wZSwgJ29iamVjdCcpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MudCwgJ29iamVjdCcpOwotICAgIGFzc2VydC5vayhnbHZNb2R1bGUucHJvY2Vzcy5zdGF0aWNzKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5wcm9jZXNzLCAnQW5vbnltb3VzVHJhdmVyc2FsU291cmNlJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy50cmF2ZXJzYWwsICdmdW5jdGlvbicpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCBleHBvc2UgZmllbGRzIHVuZGVyIHN0cnVjdHVyZScsIGZ1bmN0aW9uICgpIHsKLSAgICBhc3NlcnQub2soZ2x2TW9kdWxlLnN0cnVjdHVyZSk7Ci0gICAgYXNzZXJ0Lm9rKGdsdk1vZHVsZS5zdHJ1Y3R1cmUuaW8pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnN0cnVjdHVyZS5pby5HcmFwaFNPTlJlYWRlciwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLmlvLkdyYXBoU09OV3JpdGVyLCAnZnVuY3Rpb24nKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5zdHJ1Y3R1cmUuaW8sICdHcmFwaFNPTjJSZWFkZXInKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5zdHJ1Y3R1cmUuaW8sICdHcmFwaFNPTjJXcml0ZXInKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5zdHJ1Y3R1cmUuaW8sICdHcmFwaFNPTjNSZWFkZXInKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5zdHJ1Y3R1cmUuaW8sICdHcmFwaFNPTjNXcml0ZXInKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZ2x2TW9kdWxlLnN0cnVjdHVyZS5pby5HcmFwaFNPTlJlYWRlciwgZ2x2TW9kdWxlLnN0cnVjdHVyZS5pby5HcmFwaFNPTjNSZWFkZXIpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChnbHZNb2R1bGUuc3RydWN0dXJlLmlvLkdyYXBoU09OV3JpdGVyLCBnbHZNb2R1bGUuc3RydWN0dXJlLmlvLkdyYXBoU09OM1dyaXRlcik7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLkVkZ2UsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnN0cnVjdHVyZS5HcmFwaCwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLlBhdGgsICdmdW5jdGlvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnN0cnVjdHVyZS5Qcm9wZXJ0eSwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLlZlcnRleCwgJ2Z1bmN0aW9uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLlZlcnRleFByb3BlcnR5LCAnZnVuY3Rpb24nKTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgZXhwb3NlIGZpZWxkcyB1bmRlciBkcml2ZXInLCBmdW5jdGlvbiAoKSB7Ci0gICAgYXNzZXJ0Lm9rKGdsdk1vZHVsZS5kcml2ZXIpOwotICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLmRyaXZlciwgJ1JlbW90ZUNvbm5lY3Rpb24nKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5kcml2ZXIsICdSZW1vdGVTdHJhdGVneScpOwotICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLmRyaXZlciwgJ1JlbW90ZVRyYXZlcnNhbCcpOwotICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLmRyaXZlciwgJ0RyaXZlclJlbW90ZUNvbm5lY3Rpb24nKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5kcml2ZXIsICdDbGllbnQnKTsKLSAgICB2YWxpZGF0ZUNvbnN0cnVjdG9yKGdsdk1vZHVsZS5kcml2ZXIsICdSZXN1bHRTZXQnKTsKLSAgfSk7Ci19KTsKLQotZnVuY3Rpb24gdmFsaWRhdGVDb25zdHJ1Y3RvcihwYXJlbnQsIG5hbWUpIHsKLSAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBwYXJlbnRbbmFtZV0sICdmdW5jdGlvbicpOwotICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyZW50W25hbWVdLm5hbWUsIG5hbWUpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQW55U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9BbnlTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4OGNhOWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9BbnlTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2MjYgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBEYXRhVHlwZSwgYW55U2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLQotY29uc3QgeyBWZXJ0ZXgsIFZlcnRleFByb3BlcnR5LCBFZGdlLCBQYXRoLCBQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaCcpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgdHMgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvYnl0ZWNvZGUnKTsKLWNvbnN0IHsgR3JhcGhUcmF2ZXJzYWwgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbCcpOwotY29uc3QgZyA9ICgpID0+IG5ldyBHcmFwaFRyYXZlcnNhbCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgbmV3IEJ5dGVjb2RlKCkpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuQW55U2VyaWFsaXplcicsICgpID0+IHsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+IHsKLSAgICBbCi0gICAgICAvKgotICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGNvbXBsZXggcGFydCBvZiBHcmFwaEJpbmFyeSwKLSAgICAgICAgd2UgYXJlIGV4cGVjdGVkIHRvIGd1ZXNzIHJpZ2h0IHNlcmlhbGl6ZXIsIGkuZS4gcmlnaHQgdHlwZS4KLQotICAgICAgICBMZXQncyBmb2xsb3cgZXhpc3Rpbmcgc3RydWN0dXJlL2lvL2dyYXBoLXNlcmlhbGl6ZXIuR3JhcGhTT04zV3JpdGVyLmFkYXB0T2JqZWN0KCkgbG9naWMKLSAgICAgICAgb2Ygc2VyaWFsaXplci90eXBlIHNlbGVjdGlvbiBhbmQgYWRkIHRoZSByZXN0IG9mIHRoZSB0eXBlcy4KLQotICAgICAgICBUaGlzIHRlc3Qgc3VpdGUgaXMgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNldCBvZiBleGFtcGxlcyBvZiB0eXBlIGluZmVyZW5jZS4KLSAgICAgICovCi0KLSAgICAgIC8vIE51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneQotICAgICAgLy8gRG91YmxlCi0gICAgICB7IHY6MC4xLCAgICAgICAgICAgICAgIGI6W0RhdGFUeXBlLkRPVUJMRSwweDAwLCAweDNGLDB4QjksMHg5OSwweDk5LDB4OTksMHg5OSwweDk5LDB4OUFdIH0sCi0gICAgICB7IHY6MC4zNzUsICAgICAgICAgICAgIGI6W0RhdGFUeXBlLkRPVUJMRSwweDAwLCAweDNGLDB4RDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgICB7IHY6MC4wMDM5MDYyNSwgICAgICAgIGI6W0RhdGFUeXBlLkRPVUJMRSwweDAwLCAweDNGLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgICB7IHY6SW5maW5pdHksICAgICAgICAgIGI6W0RhdGFUeXBlLkRPVUJMRSwweDAwLCAweDdGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgICB7IHY6LUluZmluaXR5LCAgICAgICAgIGI6W0RhdGFUeXBlLkRPVUJMRSwweDAwLCAweEZGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgICB7IHY6TmFOLCAgICAgICAgICAgICAgIGI6W0RhdGFUeXBlLkRPVUJMRSwweDAwLCAweDdGLDB4RjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgICAvLyBJbnQKLSAgICAgIHsgdjowLCAgICAgICAgICAgICAgICAgYjpbRGF0YVR5cGUuSU5ULDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgICB7IHY6MSwgICAgICAgICAgICAgICAgIGI6W0RhdGFUeXBlLklOVCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxXSB9LAotICAgICAgeyB2OjIxNDc0ODM2NDcsICAgICAgICBiOltEYXRhVHlwZS5JTlQsMHgwMCwgMHg3RiwweEZGLDB4RkYsMHhGRl0gfSwgLy8gSU5UMzJfTUFYCi0gICAgICB7IHY6LTIxNDc0ODM2NDgsICAgICAgIGI6W0RhdGFUeXBlLklOVCwweDAwLCAweDgwLDB4MDAsMHgwMCwweDAwXSB9LCAvLyBJTlQzMl9NSU4KLSAgICAgIHsgdjotMSwgICAgICAgICAgICAgICAgYjpbRGF0YVR5cGUuSU5ULDB4MDAsIDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgICAvLyBMb25nCi0gICAgICB7IHY6MjE0NzQ4MzY0OCwgICAgICAgIGI6W0RhdGFUeXBlLkxPTkcsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwXSB9LCAvLyBJTlQzMl9NQVgrMQotICAgICAgeyB2Oi0yMTQ3NDgzNjQ5LCAgICAgICBiOltEYXRhVHlwZS5MT05HLDB4MDAsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRl0gfSwgLy8gSU5UMzJfTUlOLTEKLSAgICAgIHsgdjo5MDA3MTk5MjU0NzQwOTkxLCAgYjpbRGF0YVR5cGUuTE9ORywweDAwLCAweDAwLDB4MUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sIC8vIE51bWJlci5NQVhfU0FGRV9OVU1CRVIKLSAgICAgIHsgdjotOTAwNzE5OTI1NDc0MDk5MSwgYjpbRGF0YVR5cGUuTE9ORywweDAwLCAweEZGLDB4RTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDFdIH0sIC8vIE51bWJlci5NSU5fU0FGRV9OVU1CRVIKLSAgICAgIC8vIEJpZ0ludGVnZXIKLSAgICAgIHsgdjoxMjhuLCAgICAgICAgICAgICAgYjpbRGF0YVR5cGUuQklHSU5URUdFUiwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLCAweDAwLDB4ODBdIH0sCi0gICAgICB7IHY6LTFuLCAgICAgICAgICAgICAgIGI6W0RhdGFUeXBlLkJJR0lOVEVHRVIsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHhGRl0gfSwKLSAgICAgIC8vIEJpZ0RlY2ltYWwKLSAgICAgIC8vIFRPRE8KLSAgICAgIC8vIFllcywgRmxvYXQgYW5kIFNob3J0IGFyZSBub3QgdXNlZAotCi0gICAgICAvLyBPZmZlc3REYXRlVGltZVNlcmlhbGl6ZXIKLSAgICAgIHsgdjpuZXcgRGF0ZSgxNjUxNDM2NjAzMDAwKSwKLSAgICAgICAgICBiOltEYXRhVHlwZS5PRkZTRVREQVRFVElNRSwweDAwLCAweDAwLDB4MDAsMHgwNywweGU2LDB4MDUsMHgwMSwweDAwLDB4MDAsMHg0MiwweGMyLDB4NzcsMHhiZCwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICAgIHsgdjpuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMToyMzo0NS0wNzozMCcpLAotICAgICAgICAgIGI6W0RhdGFUeXBlLk9GRlNFVERBVEVUSU1FLDB4MDAsIDB4MDAsMHgwMCwweDA3LDB4ZTcsMHgwOCwweDAyLDB4MDAsMHgwMCwweDFkLDB4MjAsMHg2NiwweGJmLDB4YmEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgICAvLyBCeXRlY29kZVNlcmlhbGl6ZXIKLSAgICAgIC8vIFRyYXZlcnNhbCB0eXBlCi0gICAgICB7IHY6IGcoKS5WKCksCi0gICAgICAgIGI6IFsKLSAgICAgICAgICBEYXRhVHlwZS5CWVRFQ09ERSwweDAwLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIHtzdGVwc19sZW5ndGh9Ci0gICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAxLCAweDU2LCAvLyBWCi0gICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyAodm9pZCkKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7c291cmNlc19sZW5ndGh9Ci0gICAgICAgIF0KLSAgICAgIH0sCi0gICAgICAvLyBCeXRlY29kZSB0eXBlCi0gICAgICB7IHY6IGcoKS5WKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgYjogWwotICAgICAgICAgIERhdGFUeXBlLkJZVEVDT0RFLDB4MDAsCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgLy8ge3N0ZXBzX2xlbmd0aH0KLSAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NTYsIC8vIFYKLSAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vICh2b2lkKQotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIHtzb3VyY2VzX2xlbmd0aH0KLSAgICAgICAgXQotICAgICAgfSwKLQotICAgICAgLy8gVHJhdmVyc2VyU2VyaWFsaXplcgotICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoIkExIiwgMTYpLAotICAgICAgICBiOiBbCi0gICAgICAgICAgRGF0YVR5cGUuVFJBVkVSU0VSLDB4MDAsCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLAotICAgICAgICAgIERhdGFUeXBlLlNUUklORywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLCAweDQxLDB4MzEsCi0gICAgICAgIF0KLSAgICAgIH0sCi0KLSAgICAgIC8vIFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplcgotICAgICAgeyB2OiBuZXcgdHMuT3B0aW9uc1N0cmF0ZWd5KHsgJ0InOiAxLCAnQSc6IDIgfSksCi0gICAgICAgIGI6IFsKLSAgICAgICAgICBEYXRhVHlwZS5UUkFWRVJTQUxTVFJBVEVHWSwweDAwLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4NTIsIC4uLmZyb20oJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5PcHRpb25zU3RyYXRlZ3knKSwKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAgIC8vICdCJzoxCi0gICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQyLAotICAgICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAvLyAnQSc6MgotICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwKLSAgICAgICAgICAweDAxLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgIF0KLSAgICAgIH0sCi0KLSAgICAgIC8vIFBTZXJpYWxpemVyCi0gICAgICB7IHY6IHQuUC5lcSgnbWFya28nKSwKLSAgICAgICAgYjogWwotICAgICAgICAgIERhdGFUeXBlLlAsMHgwMCwKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAyLCAuLi5mcm9tKCdlcScpLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdtYXJrbycpLAotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBUZXh0UFNlcmlhbGl6ZXIKLSAgICAgIHsgdjogdC5UZXh0UC5jb250YWluaW5nKCdWYWx1RScpLAotICAgICAgICBiOiBbCi0gICAgICAgICAgRGF0YVR5cGUuVEVYVFAsMHgwMCwKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDBBLCAuLi5mcm9tKCdjb250YWluaW5nJyksCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ1ZhbHVFJyksCi0gICAgICAgIF0KLSAgICAgIH0sCi0KLSAgICAgIC8vIExhbWJkYVNlcmlhbGl6ZXIKLSAgICAgIHsgdjpmdW5jdGlvbigpIHsgcmV0dXJuICdTY3JpcHRfMSc7IH0sCi0gICAgICAgIGI6WwotICAgICAgICAgIERhdGFUeXBlLkxBTUJEQSwweDAwLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MEUsIC4uLmZyb20oJ2dyZW1saW4tZ3Jvb3Z5JyksCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwOCwgLi4uZnJvbSgnU2NyaXB0XzEnKSwKLSAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLAotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBFbnVtU2VyaWFsaXplciAoYWN0dWFsbHkgcmVwcmVzZW50cyBkaWZmZXJlbnQgZW51bSBsaWtlIHR5cGVzKQotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ0JhcnJpZXInLCAnbm9ybVNhY2snKSwKLSAgICAgICAgYjogWyBEYXRhVHlwZS5CQVJSSUVSLDB4MDAsIERhdGFUeXBlLlNUUklORywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA4LCAuLi5mcm9tKCdub3JtU2FjaycpIF0KLSAgICAgIH0sCi0gICAgICB7IHY6IG5ldyB0LkVudW1WYWx1ZSgnQ2FyZGluYWxpdHknLCAnc2luZ2xlJyksCi0gICAgICAgIGI6IFsgRGF0YVR5cGUuQ0FSRElOQUxJVFksMHgwMCwgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDYsIC4uLmZyb20oJ3NpbmdsZScpIF0KLSAgICAgIH0sCi0gICAgICB7IHY6IG5ldyB0LkVudW1WYWx1ZSgnQ29sdW1uJywgJ2tleXMnKSwKLSAgICAgICAgYjogWyBEYXRhVHlwZS5DT0xVTU4sMHgwMCwgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDQsIC4uLmZyb20oJ2tleXMnKSBdCi0gICAgICB9LAotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ0RpcmVjdGlvbicsICdPVVQnKSwKLSAgICAgICAgYjogWyBEYXRhVHlwZS5ESVJFQ1RJT04sMHgwMCwgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDMsIC4uLmZyb20oJ09VVCcpIF0KLSAgICAgIH0sCi0gICAgICB7IHY6IG5ldyB0LkVudW1WYWx1ZSgnRFQnLCAnbWludXRlJyksCi0gICAgICAgIGI6IFsgRGF0YVR5cGUuRFQsMHgwMCwgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDYsIC4uLmZyb20oJ21pbnV0ZScpIF0KLSAgICAgIH0sCi0gICAgICB7IHY6IG5ldyB0LkVudW1WYWx1ZSgnR1R5cGUnLCAnQllURScpLAotICAgICAgICBiOiBbIERhdGFUeXBlLkdUWVBFLDB4MDAsIERhdGFUeXBlLlNUUklORywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA0LCAuLi5mcm9tKCdCWVRFJykgXQotICAgICAgfSwKLSAgICAgIHsgdjogbmV3IHQuRW51bVZhbHVlKCdNZXJnZScsICdvbk1hdGNoJyksCi0gICAgICAgIGI6IFsgRGF0YVR5cGUuTUVSR0UsMHgwMCwgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDcsIC4uLmZyb20oJ29uTWF0Y2gnKSBdCi0gICAgICB9LAotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ09wZXJhdG9yJywgJ2FkZEFsbCcpLAotICAgICAgICBiOiBbIERhdGFUeXBlLk9QRVJBVE9SLDB4MDAsIERhdGFUeXBlLlNUUklORywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA2LCAuLi5mcm9tKCdhZGRBbGwnKSBdCi0gICAgICB9LAotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ09yZGVyJywgJ2Rlc2MnKSwKLSAgICAgICAgYjogWyBEYXRhVHlwZS5PUkRFUiwweDAwLCBEYXRhVHlwZS5TVFJJTkcsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNCwgLi4uZnJvbSgnZGVzYycpIF0KLSAgICAgIH0sCi0gICAgICB7IHY6IG5ldyB0LkVudW1WYWx1ZSgnUGljaycsICdhbnknKSwKLSAgICAgICAgYjogWyBEYXRhVHlwZS5QSUNLLDB4MDAsIERhdGFUeXBlLlNUUklORywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAzLCAuLi5mcm9tKCdhbnknKSBdCi0gICAgICB9LAotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ1BvcCcsICdmaXJzdCcpLAotICAgICAgICBiOiBbIERhdGFUeXBlLlBPUCwweDAwLCBEYXRhVHlwZS5TVFJJTkcsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNSwgLi4uZnJvbSgnZmlyc3QnKSBdCi0gICAgICB9LAotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ1Njb3BlJywgJ2xvY2FsJyksCi0gICAgICAgIGI6IFsgRGF0YVR5cGUuU0NPUEUsMHgwMCwgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ2xvY2FsJykgXQotICAgICAgfSwKLSAgICAgIHsgdjogbmV3IHQuRW51bVZhbHVlKCdUJywgJ2lkJyksCi0gICAgICAgIGI6IFsgRGF0YVR5cGUuVCwweDAwLCBEYXRhVHlwZS5TVFJJTkcsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwgLi4uZnJvbSgnaWQnKSBdCi0gICAgICB9LAotCi0gICAgICAvLyBWZXJ0ZXhTZXJpYWxpemVyCi0gICAgICB7IHY6IG5ldyBWZXJ0ZXgoJ0EnLCAnUGVyc29uJywgW10pLAotICAgICAgICBiOiBbCi0gICAgICAgICAgRGF0YVR5cGUuVkVSVEVYLDB4MDAsCi0gICAgICAgICAgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDEsIC8vIHtpZH0KLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA2LCAuLi5mcm9tKCdQZXJzb24nKSwgLy8ge2xhYmVsfQotICAgICAgICAgIDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7cHJvcGVydGllc30KLSAgICAgICAgXQotICAgICAgfSwKLQotICAgICAgLy8gRWRnZVNlcmlhbGl6ZXIKLSAgICAgIHsgdjpuZXcgRWRnZSgnQScsIG5ldyBWZXJ0ZXgoJ0InLCdQZXJzb24nLG51bGwpLCAnaGFzJywgbmV3IFZlcnRleCgnQycsJ1BldCcsbnVsbCksIG51bGwpLAotICAgICAgICBiOlsKLSAgICAgICAgICBEYXRhVHlwZS5FREdFLDB4MDAsCi0gICAgICAgICAgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDEsIC8vIGlkCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnaGFzJyksIC8vIGxhYmVsCi0gICAgICAgICAgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDMsIC8vIGluVklkCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnUGV0JyksIC8vIGluVkxhYmVsCi0gICAgICAgICAgRGF0YVR5cGUuU1RSSU5HLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDIsIC8vIG91dFZJZAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDYsIC4uLmZyb20oJ1BlcnNvbicpLCAvLyBvdXRWTGFiZWwKLSAgICAgICAgICAweEZFLDB4MDEsIC8vIHBhcmVudAotICAgICAgICAgIDB4RkUsMHgwMSwgLy8gcHJvcGVydGllcwotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBQYXRoU2VyaWFsaXplcgotICAgICAgeyB2Om5ldyBQYXRoKFsgWydBJywnQiddLCBbJ0MnLCdEJ10gXSwgWyAxLC0xIF0pLAotICAgICAgICBiOlsKLSAgICAgICAgICBEYXRhVHlwZS5QQVRILDB4MDAsCi0gICAgICAgICAgLy8ge2xhYmVsc30KLSAgICAgICAgICBEYXRhVHlwZS5MSVNULDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgICAgICAvLyBbJ0EnLCdCJ10KLSAgICAgICAgICAgIDB4MDksMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MiwKLSAgICAgICAgICAgIC8vIFsnQycsJ0QnXQotICAgICAgICAgICAgMHgwOSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQzLAotICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQ0LAotICAgICAgICAgIC8vIHtvYmplY3RzfQotICAgICAgICAgIERhdGFUeXBlLkxJU1QsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAgIDB4MDEsMHgwMCwgMHhGRiwweEZGLDB4RkYsMHhGRiwKLSAgICAgICAgXQotICAgICAgfSwKLQotICAgICAgLy8gUHJvcGVydHlTZXJpYWxpemVyCi0gICAgICB7Ci0gICAgICAgIHY6bmV3IFByb3BlcnR5KCdLZXknLCBbICd2YWx1ZScgXSksCi0gICAgICAgIGI6WwotICAgICAgICAgIERhdGFUeXBlLlBST1BFUlRZLDB4MDAsCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnS2V5JyksCi0gICAgICAgICAgMHgwOSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAvLyBsaXN0Ci0gICAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ3ZhbHVlJyksCi0gICAgICAgICAgMHhGRSwweDAxLCAvLyBwYXJlbnQKLSAgICAgICAgXQotICAgICAgfSwKLQotICAgICAgLy8gR3JhcGhTZXJpYWxpemVyCi0gICAgICAvLyBUT0RPOiBpdCdzIGlnbm9yZWQgZm9yIG5vdwotCi0gICAgICAvLyBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIKLSAgICAgIHsgdjpuZXcgVmVydGV4UHJvcGVydHkoJzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBhMGIwYzBkMGUwZicsICdMYWJlbCcsIDQyKSwKLSAgICAgICAgYjpbCi0gICAgICAgICAgMHgxMiwweDAwLAotICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgyNCwgLi4uZnJvbSgnMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMGEwYjBjMGQwZTBmJyksCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwNSwgLi4uZnJvbSgnTGFiZWwnKSwKLSAgICAgICAgICAweDAxLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MkEsCi0gICAgICAgICAgMHhGRSwweDAxLAotICAgICAgICAgIDB4MDksMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAgICAgXQotICAgICAgfSwKLQotICAgICAgLy8gQmluZGluZ1NlcmlhbGl6ZXIKLSAgICAgIC8vIFRPRE86IGl0J3MgaWdub3JlZCBmb3Igbm93Ci0KLSAgICAgIC8vIExvbmdTZXJpYWxpemVyCi0gICAgICAvLyBUT0RPICsKLQotICAgICAgLy8gTGlzdFNlcmlhbGl6ZXIKLSAgICAgIHsgdjpbXSwgIGI6W0RhdGFUeXBlLkxJU1QsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICAgIHsgdjpbMV0sIGI6W0RhdGFUeXBlLkxJU1QsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxXSB9LAotCi0gICAgICAvLyBTZXRTZXJpYWxpemVyCi0gICAgICAvLyBUT0RPOiBJdCdzIG5vdCBleHBlY3RlZCB0byBiZSBzZXJpYWxpemVkIGFzIEdyYXBoU09OIGRvZXMuIElzIGl0IHN0aWxsIG9rYXk/Ci0KLSAgICAgIC8vIE1hcFNlcmlhbGl6ZXIKLSAgICAgIHsgdjogbmV3IE1hcChbIFsnQScsM10gXSksCi0gICAgICAgIGI6IFsKLSAgICAgICAgICBEYXRhVHlwZS5NQVAsMHgwMCwKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAxLCAvLyB7bGVuZ3RofQotICAgICAgICAgIDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDEsIC8vIEEKLSAgICAgICAgICAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMyAvLyAzCi0gICAgICAgIF0KLSAgICAgIH0sCi0KLSAgICAgIC8vIEJ1bGtTZXRTZXJpYWxpemVyCi0gICAgICAvLyBUT0RPOiBpdCdzIGlnbm9yZWQgYW5kIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkIGZyb20gc2VyaWFsaXphdGlvbiBwb2ludCBvZiB2aWV3Ci0KLSAgICAgIC8vIERlZmF1bHQgKHN0cmluZ3MgLyBvYmplY3RzIC8gLi4uKQotICAgICAgLy8gVE9ETzogYWxpZ24gd2l0aCBKYXZhLnBhcnNlKEdyYXBoU09OKSBsb2dpYwotCi0gICAgICAvLyBCeXRlU2VyaWFsaXplcgotICAgICAgLy8gVE9ETzogaXQncyBpZ25vcmVkIGFuZCBub3QgZXhwZWN0ZWQgdG8gYmUgdXNlZCBmcm9tIHNlcmlhbGl6YXRpb24gcG9pbnQgb2YgdmlldwotCi0gICAgICAvLyBCeXRlQnVmZmVyU2VyaWFsaXplcgotICAgICAgeyB2OmZyb20oWzB4MDAsMHgwMSwweEZGXSksIGI6W0RhdGFUeXBlLkJZVEVCVUZGRVIsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgMHgwMCwweDAxLDB4RkZdfSwKLQotICAgICAgLy8gQm9vbGVhblNlcmlhbGl6ZXIKLSAgICAgIHsgdjp0cnVlLCAgYjpbRGF0YVR5cGUuQk9PTEVBTiwweDAwLCAweDAxXSB9LAotICAgICAgeyB2OmZhbHNlLCBiOltEYXRhVHlwZS5CT09MRUFOLDB4MDAsIDB4MDBdIH0sCi0KLSAgICAgIC8vIFN0cmluZ1NlcmlhbGl6ZXIKLSAgICAgIHsgdjonQTEnLCBiOltEYXRhVHlwZS5TVFJJTkcsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwgMHg0MSwweDMxXSB9LAotICAgICAgeyB2OicnLCAgIGI6W0RhdGFUeXBlLlNUUklORywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgICAvLyBPYmplY3QKLSAgICAgIHsgdjogeyAnQic6IDIgfSwKLSAgICAgICAgYjogWwotICAgICAgICAgIERhdGFUeXBlLk1BUCwweDAwLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIHtsZW5ndGh9Ci0gICAgICAgICAgMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0MiwgLy8gQgotICAgICAgICAgIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyIC8vIDIKLSAgICAgICAgXQotICAgICAgfSwKLQotICAgICAgLy8gVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplcgotICAgICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHhGRSwweDAxXSB9LAotICAgICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHhGRSwweDAxXSB9LAotCi0gICAgXS5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGIpOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGIuc2xpY2UoMikpOwotICAgIH0pKTsKLQotICAgIGl0KGBzaG91bGQgZXJyb3IgaWYgdmFsdWUgaXMgdW5zdXBwb3J0ZWRgLCAoKSA9PiBhc3NlcnQudGhyb3dzKAotICAgICAgKCkgPT4gYW55U2VyaWFsaXplci5zZXJpYWxpemUoIFN5bWJvbCgnc3ltMScpICksCi0gICAgICB7IG1lc3NhZ2U6ICJObyBzZXJpYWxpemVyIGZvdW5kIHRvIHN1cHBvcnQgaXRlbSB3aGVyZSB0eXBlb2YoaXRlbSk9J3N5bWJvbCcgYW5kIFN0cmluZyhpdGVtKT0nU3ltYm9sKHN5bTEpJy4iIH0KLSAgICApKTsKLQotICB9KTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBbCi0gICAgICB7IGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGI6dW5kZWZpbmVkIH0sCi0gICAgICB7IGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGI6dW5kZWZpbmVkIH0sCi0gICAgICB7IGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGI6bnVsbCB9LAotICAgICAgeyBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgICBiOm51bGwgfSwKLSAgICAgIHsgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgICAgICAgICAgYjpbXSB9LAotICAgICAgeyBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICAgICAgICAgICBiOltdIH0sCi0KLSAgICAgIHsgZXJyOi91bmtub3duIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgICAgYjpbMHg0MF0gfSwgLy8gdGVzdHMgYW4gdW5hc3NpZ25lZCB0eXBlIGNvZGUKLSAgICAgIHsgZXJyOi91bmtub3duIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgICAgYjpbMHg4Rl0gfSwKLSAgICAgIHsgZXJyOi91bmtub3duIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgICAgYjpbMHhGRl0gfSwKLQotICAgICAgLy8gdGhpcyBpcyBsaWtlIGEgcmVnaXN0ZXIgb2Ygc3VwcG9ydGVkIHR5cGUgZGVzZXJpYWxpemVyczoKLQotICAgICAgLy8gSU5UCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDEsMHgwMV0gfSwKLSAgICAgIHsgdjoxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxXSB9LAotCi0gICAgICAvLyBMT05HCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDIsMHgwMV0gfSwKLSAgICAgIHsgdjoxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMiwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDFdIH0sCi0KLSAgICAgIC8vIFNUUklORwotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAzLDB4MDFdIH0sCi0gICAgICB7IHY6J0FiMCcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgMHg0MSwweDYyLDB4MzBdIH0sCi0KLSAgICAgIC8vIERBVEUKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwNCwweDAxXSB9LAotICAgICAgeyB2Om5ldyBEYXRlKCcxOTY5LTEyLTMxVDIzOjU5OjU5Ljk5OVonKSwgICBiOlsweDA0LDB4MDAsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLQotICAgICAgLy8gT0ZGU0VUREFURVRJTUUKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHg4OCwweDAxXSB9LAotICAgICAgeyB2Om5ldyBEYXRlKCcyMDIzLTA4LTAyVDAxOjMwOjAwLTEwOjAwJyksCi0gICAgICAgICAgYjpbMHg4OCwweDAwLAotICAgICAgICAgICAgICAweDAwLDB4MDAsMHgwNywweGU3LAotICAgICAgICAgICAgICAweDA4LDB4MDIsCi0gICAgICAgICAgICAgIDB4MDAsMHgwMCwweDA0LDB4ZTksMHg0OSwweDE0LDB4ZjAsMHgwMCwKLSAgICAgICAgICAgICAgMHhGRiwweEZGLDB4NzMsMHg2MF0gfSwKLQotICAgICAgLy8gVElNRVNUQU1QCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDUsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgRGF0ZSgnMTk2OS0xMi0zMVQyMzo1OTo1OS45OTlaJyksICAgYjpbMHgwNSwweDAwLCAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0KLSAgICAgIC8vIERPVUJMRQotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDA3LDB4MDFdIH0sCi0gICAgICB7IHY6MC4wMDM5MDYyNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDcsMHgwMCwgMHgzRiwweDcwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgICAvLyBGTE9BVAotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDA4LDB4MDFdIH0sCi0gICAgICB7IHY6MC4zNzUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDgsMHgwMCwgMHgzRSwweEMwLDB4MDAsMHgwMF0gfSwKLQotICAgICAgLy8gTElTVAotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDA5LDB4MDFdIH0sCi0gICAgICB7IHY6W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDksMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLQotICAgICAgLy8gTUFQCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MEEsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgTWFwKCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwQSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgICAvLyBTRVQKLSAgICAgIC8vIFRPRE86IElzIGl0IHN0aWxsIG9rYXkgdG8gZm9sbG93IEdyYXBoU09OIHdoZXJlIFNldCBhbmQgTGlzdCBhcmUgdXN1YWwgSlMgQXJyYXlTPwotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDBCLDB4MDFdIH0sCi0gICAgICB7IHY6bmV3IFNldCgpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDBCLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0KLSAgICAgIC8vIFVVSUQKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwQywweDAxXSB9LAotICAgICAgeyB2OicwMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wYTBiMGMwZDBlMGYnLCBiOlsweDBDLDB4MDAsIDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEZdIH0sCi0KLSAgICAgIC8vIEVER0UKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwRCwweDAxXSB9LAotICAgICAgeyB2Om5ldyBFZGdlKDEsIG5ldyBWZXJ0ZXgoMiwnUGVyc29uJyxudWxsKSwgJ2hhcycsIG5ldyBWZXJ0ZXgoMywnUGV0JyxudWxsKSwgbnVsbCksCi0gICAgICAgIGI6WwotICAgICAgICAgIDB4MEQsMHgwMCwKLSAgICAgICAgICAweDAxLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIGlkCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnaGFzJyksIC8vIGxhYmVsCi0gICAgICAgICAgMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAzLCAvLyBpblZJZAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDMsIC4uLmZyb20oJ1BldCcpLCAvLyBpblZMYWJlbAotICAgICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8gb3V0VklkCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwNiwgLi4uZnJvbSgnUGVyc29uJyksIC8vIG91dFZMYWJlbAotICAgICAgICAgIDB4RkUsMHgwMSwgLy8gcGFyZW50Ci0gICAgICAgICAgMHhGRSwweDAxLCAvLyBwcm9wZXJ0aWVzCi0gICAgICAgIF0KLSAgICAgIH0sCi0KLSAgICAgIC8vIFBBVEgKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwRSwweDAxXSB9LAotICAgICAgeyB2Om5ldyBQYXRoKFsgWydCJywnQSddLCBbJ0QnXSBdLCBbIC0xIF0pLAotICAgICAgICBiOlsKLSAgICAgICAgICAweDBFLDB4MDAsCi0gICAgICAgICAgLy8ge2xhYmVsc30KLSAgICAgICAgICAweDA5LDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgICAgICAvLyBbJ0InLCdBJ10KLSAgICAgICAgICAgIDB4MDksMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MiwKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwKLSAgICAgICAgICAgIC8vIFsnRCddCi0gICAgICAgICAgICAweDA5LDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDQsCi0gICAgICAgICAgLy8ge29iamVjdHN9Ci0gICAgICAgICAgMHgwOSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLAotICAgICAgICAgICAgMHgwMSwweDAwLCAweEZGLDB4RkYsMHhGRiwweEZGLAotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBQUk9QRVJUWQotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDBGLDB4MDFdIH0sCi0gICAgICB7Ci0gICAgICAgIHY6bmV3IFByb3BlcnR5KCdLZXknLCBbICd2YWx1ZScgXSksCi0gICAgICAgIGI6WwotICAgICAgICAgIDB4MEYsMHgwMCwKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAzLCAuLi5mcm9tKCdLZXknKSwKLSAgICAgICAgICAweDA5LDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIGxpc3QKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNSwgLi4uZnJvbSgndmFsdWUnKSwKLSAgICAgICAgICAweEZFLDB4MDEsIC8vIHBhcmVudAotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBHUkFQSAotICAgICAgLy8gVE9ETzogaXQncyBpZ25vcmVkIGZvciBub3cKLQotICAgICAgLy8gVkVSVEVYCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MTEsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgVmVydGV4KCcwMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wYTBiMGMwZDBlMGYnLCAnQScsIFtdKSwKLSAgICAgICAgYjpbMHgxMSwweDAwLCAweDBDLDB4MDAsMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiwgMHgwMCwweDAwLDB4MDAsMHgwMSwweDQxLCAweEZFLDB4MDFdCi0gICAgICB9LAotCi0gICAgICAvLyBWRVJURVhQUk9QRVJUWQotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDEyLDB4MDFdIH0sCi0gICAgICB7IHY6bmV3IFZlcnRleFByb3BlcnR5KCcwMDAxMDIwMy0wNDA1LTA2MDctMDgwOS0wYTBiMGMwZDBlMGYnLCAnTGFiZWwnLCA0MiwgW10pLAotICAgICAgICBiOlsKLSAgICAgICAgICAweDEyLDB4MDAsCi0gICAgICAgICAgMHgwQywweDAwLCAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ0xhYmVsJyksCi0gICAgICAgICAgMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDJBLAotICAgICAgICAgIDB4RkUsMHgwMSwKLSAgICAgICAgICAweEZFLDB4MDEsCi0gICAgICAgIF0KLSAgICAgIH0sCi0KLSAgICAgIC8vIEJBUlJJRVIKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgxMywweDAxXSB9LAotICAgICAgeyB2Om5ldyB0LkVudW1WYWx1ZSgnQmFycmllcicsJ25vcm1TYWNrJyksICBiOlsweDEzLDB4MDAsIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwOCwgLi4uZnJvbSgnbm9ybVNhY2snKV0gfSwKLQotICAgICAgLy8gQklORElORwotICAgICAgLy8gVE9ETzogaXQncyBpZ25vcmVkIGZvciBub3cKLQotICAgICAgLy8gQllURUNPREUKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgxNSwweDAxXSB9LAotICAgICAgeyB2Om5ldyBCeXRlY29kZSgpLCAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDE1LDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0KLSAgICAgIC8vIENBUkRJTkFMSVRZCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MTYsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgdC5FbnVtVmFsdWUoJ0NhcmRpbmFsaXR5JywgJ3NldCcpLCAgYjpbMHgxNiwweDAwLCAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDMsIC4uLmZyb20oJ3NldCcpXSB9LAotCi0gICAgICAvLyBDT0xVTU4KLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgxNywweDAxXSB9LAotICAgICAgeyB2Om5ldyB0LkVudW1WYWx1ZSgnQ29sdW1uJywna2V5cycpLCAgICAgICBiOlsweDE3LDB4MDAsIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNCwgLi4uZnJvbSgna2V5cycpXSB9LAotCi0gICAgICAvLyBESVJFQ1RJT04KLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgxOCwweDAxXSB9LAotICAgICAgeyB2Om5ldyB0LkVudW1WYWx1ZSgnRGlyZWN0aW9uJywnT1VUJyksICAgICBiOlsweDE4LDB4MDAsIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnT1VUJyldIH0sCi0KLSAgICAgIC8vIERUCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MmYsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgdC5FbnVtVmFsdWUoJ0RUJywnbWludXRlJyksICAgICAgICAgYjpbMHgyZiwweDAwLCAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDYsIC4uLmZyb20oJ21pbnV0ZScpXSB9LAotCi0gICAgICAvLyBHVHlwZQotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDMwLDB4MDFdIH0sCi0gICAgICB7IHY6bmV3IHQuRW51bVZhbHVlKCdHVHlwZScsJ0JZVEUnKSwgICAgICAgIGI6WzB4MzAsMHgwMCwgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA0LCAuLi5mcm9tKCdCWVRFJyldIH0sCi0KLSAgICAgIC8vIE1FUkdFCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MmUsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgdC5FbnVtVmFsdWUoJ01lcmdlJywnb25DcmVhdGUnKSwgICAgYjpbMHgyZSwweDAwLCAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDgsIC4uLmZyb20oJ29uQ3JlYXRlJyldIH0sCi0KLSAgICAgIC8vIE9QRVJBVE9SCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MTksMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgdC5FbnVtVmFsdWUoJ09wZXJhdG9yJywnYWRkQWxsJyksICAgYjpbMHgxOSwweDAwLCAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDYsIC4uLmZyb20oJ2FkZEFsbCcpXSB9LAotCi0gICAgICAvLyBPUkRFUgotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDFBLDB4MDFdIH0sCi0gICAgICB7IHY6bmV3IHQuRW51bVZhbHVlKCdPcmRlcicsJ2Rlc2MnKSwgICAgICAgIGI6WzB4MUEsMHgwMCwgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA0LCAuLi5mcm9tKCdkZXNjJyldIH0sCi0KLSAgICAgIC8vIFBJQ0sKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgxQiwweDAxXSB9LAotICAgICAgeyB2Om5ldyB0LkVudW1WYWx1ZSgnUGljaycsJ2FueScpLCAgICAgICAgICBiOlsweDFCLDB4MDAsIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnYW55JyldIH0sCi0KLSAgICAgIC8vIFBPUAotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDFDLDB4MDFdIH0sCi0gICAgICB7IHY6bmV3IHQuRW51bVZhbHVlKCdQb3AnLCdmaXJzdCcpLCAgICAgICAgIGI6WzB4MUMsMHgwMCwgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdmaXJzdCcpXSB9LAotCi0gICAgICAvLyBMQU1CREEKLSAgICAgIC8vIFRPRE86IGl0J3Mgbm90IGV4cGVjdGVkIHRvIGJlIGRlc2VyaWFsaXplZCwgaXMgaXQgY29ycmVjdCBhc3N1bXB0aW9uPwotCi0gICAgICAvLyBQCi0gICAgICB7IHY6dC5QLmVxKDcpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MUUsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwgLi4uZnJvbSgnZXEnKSwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDddIH0sCi0KLSAgICAgIC8vIFNDT1BFCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MUYsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgdC5FbnVtVmFsdWUoJ1Njb3BlJywnbG9jYWwnKSwgICAgICAgYjpbMHgxRiwweDAwLCAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ2xvY2FsJyldIH0sCi0KLSAgICAgIC8vIFQKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgyMCwweDAxXSB9LAotICAgICAgeyB2Om5ldyB0LkVudW1WYWx1ZSgnVCcsJ2lkJyksICAgICAgICAgICAgICBiOlsweDIwLDB4MDAsIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwgLi4uZnJvbSgnaWQnKV0gfSwKLQotICAgICAgLy8gVFJBVkVSU0VSCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MjEsMHgwMV0gfSwKLSAgICAgIHsgdjpuZXcgdC5UcmF2ZXJzZXIoJ0EnLCAyKSwgICAgICAgICAgICAgICAgYjpbMHgyMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsIDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NDFdIH0sCi0KLSAgICAgIC8vIEJJR0lOVEVHRVIKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgyMywweDAxXSB9LAotICAgICAgeyB2OjFuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDIzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MDFdIH0sCi0KLSAgICAgIC8vIEJZVEUKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgyNCwweDAxXSB9LAotICAgICAgeyB2OjI1NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDI0LDB4MDAsIDB4RkZdIH0sCi0KLSAgICAgIC8vIEJZVEVCVUZGRVIKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgyNSwweDAxXSB9LAotICAgICAgeyB2OmZyb20oWzB4RkYsMHgwMCwweDAxXSksICAgICAgICAgICAgICAgICBiOlsweDI1LDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDMsIDB4RkYsMHgwMCwweDAxXSB9LAotCi0gICAgICAvLyBTSE9SVAotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDI2LDB4MDFdIH0sCi0gICAgICB7IHY6MzI3NjcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MjYsMHgwMCwgMHg3RiwweEZGXSB9LAotCi0gICAgICAvLyBCT09MRUFOCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MjcsMHgwMV0gfSwKLSAgICAgIHsgdjp0cnVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgyNywweDAwLCAweDAxXSB9LAotCi0gICAgICAvLyBURVhUUAotICAgICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDI4LDB4MDFdIH0sCi0gICAgICB7IHY6dC5UZXh0UC5jb250YWluaW5nKCdWYWx1RScpLAotICAgICAgICBiOlsKLSAgICAgICAgICAweDI4LDB4MDAsCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwQSwgLi4uZnJvbSgnY29udGFpbmluZycpLAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdWYWx1RScpLAotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBUUkFWRVJTQUxTVFJBVEVHWQotICAgICAgLy8gSXQncyBub3QgZXhwZWN0ZWQgdG8gYmUgZGVzZXJpYWxpemVkCi0KLSAgICAgIC8vIEJVTEtTRVQKLSAgICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgyQSwweDAxXSB9LAotICAgICAgeyB2OlsgJ0MnLCAnQycsICdDJyBdLAotICAgICAgICBiOlsKLSAgICAgICAgICAweDJBLDB4MDAsCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgLy8ge2xlbmd0aH0KLSAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDMsIC8vICdDJwotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywgLy8gYnVsawotICAgICAgICBdCi0gICAgICB9LAotCi0gICAgICAvLyBVTlNQRUNJRklFRF9OVUxMCi0gICAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4RkUsMHgwMV0gfSwKLQotICAgICAgLy8gVE9ETzogInJlZ2lzdGVyIiBvdGhlciB0eXBlcwotICAgIF0KLSAgICAuZm9yRWFjaCgoeyB2LCBiLCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShiKSwge3YsbGVufSApOwotICAgIH0pKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQXJyYXlTZXJpYWxpemVyVGVzdFRlbXBsYXRlLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9BcnJheVNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODFhZTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9BcnJheVNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgaW9jID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IGludFNlcmlhbGl6ZXIgPSBpb2MuaW50U2VyaWFsaXplcjsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotbW9kdWxlLmV4cG9ydHMgPSAoeyBJRCwgbmFtZSB9KSA9PiB7Ci0KLWRlc2NyaWJlKGBHcmFwaEJpbmFyeS4ke25hbWV9U2VyaWFsaXplcmAsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbSURdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBzZXJpYWxpemVyID0gaW9jLnNlcmlhbGl6ZXJzW0lEXTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbSUQsMHgwMV0sICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OltdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6W0lELDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpbXSB9LAotCi0gICAgeyB2OltdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OlsyMTQ3NDgzNjQ3XSwgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MDEsMHgwMCwweDdGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgdjpbLTEsJ0EnXSwgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAyLCAweDAxLDB4MDAsMHhGRiwweEZGLDB4RkYsMHhGRiwgMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg0MV0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6W0lELTFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6W0lEKzFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4ODldIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MTldIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4OTBdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgZnE6MSwgYjpbSURdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6W0lELDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6W0lELDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6W0lELDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6W0lELDB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3tsZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvLywgICAgYjpbMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tsZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvLywgICAgYjpbMHg4MCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+IHsKLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggc2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSk7Ci0KLSAgICBpdC5za2lwKCdzaG91bGQgbm90IGVycm9yIGlmIGFycmF5IGxlbmd0aCBpcyBJTlQzMl9NQVgnKTsgLy8gVE9ETzogcmVzb3VyY2UgaGVhdnkKLQotICAgIGl0KCdzaG91bGQgZXJyb3IgaWYgYXJyYXkgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBJTlQzMl9NQVgnLCAoKSA9PiBhc3NlcnQudGhyb3dzKAotICAgICAgKCkgPT4gc2VyaWFsaXplci5zZXJpYWxpemUobmV3IEFycmF5KGludFNlcmlhbGl6ZXIuSU5UMzJfTUFYKzEpKSwKLSAgICAgIHsgbWVzc2FnZTogbmV3IFJlZ0V4cChgQXJyYXkgbGVuZ3RoPSR7aW50U2VyaWFsaXplci5JTlQzMl9NQVgrMX0gaXMgZ3JlYXRlciB0aGFuIHN1cHBvcnRlZCBtYXhfbGVuZ3RoPSR7aW50U2VyaWFsaXplci5JTlQzMl9NQVh9YCkgfQotICAgICkpOwotICB9KTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAge3YsbGVuOmxlbisyfSApOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogdW5kZWZpbmVkLCAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoKSwgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IHRydWUgfSwKLSAgICAgIHsgdjogWzBdLCAgICAgICAgICAgICAgIGU6IHRydWUgfSwKLSAgICAgIHsgdjogW3VuZGVmaW5lZF0sICAgICAgIGU6IHRydWUgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggc2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci0KLX0pOwotCi19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9CaWdJbnRlZ2VyU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9CaWdJbnRlZ2VyU2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGY5YWE1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQmlnSW50ZWdlclNlcmlhbGl6ZXItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCB7IGJpZ0ludGVnZXJTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuQmlnSW50ZWdlclNlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MjNdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MjMsMHgwMV0sICAgICAgICAgICAgICAgICBhdjpudWxsIH0sCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAweDAwXSwgYXY6MG4gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MjMsMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MDBdLCBhdjowbiB9LAotCi0gICAgeyB2OjBuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBdIH0sCi0gICAgeyB2OjFuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFdIH0sCi0gICAgeyB2OjEyN24sICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0ZdIH0sCi0gICAgeyB2OjEyOG4sICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4ODBdIH0sCi0gICAgeyB2OjE2MG4sICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4QTBdIH0sCi0gICAgeyB2OjMyNzY3biwgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGLDB4RkZdIH0sCi0gICAgeyB2OjMyNzY4biwgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwweDgwLDB4MDBdIH0sCi0gICAgeyB2OjgzODg2MDduLCAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjgzODg2MDhuLCAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHg4MCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjIxNDc0ODM2NDduLCAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N0YsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjIxNDc0ODM2NDhuLCAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwLDB4ODAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjU0OTc1NTgxMzg4N24sICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDdGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjU0OTc1NTgxMzg4OG4sICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjE0MDczNzQ4ODM1NTMyN24sICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjE0MDczNzQ4ODM1NTMyOG4sICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA3LCAgICAgICAgICAgICAgICAgICAgIDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjM2MDI4Nzk3MDE4OTYzOTY3biwgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA3LCAgICAgICAgICAgICAgICAgICAgIDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjM2MDI4Nzk3MDE4OTYzOTY4biwgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA4LCAgICAgICAgICAgICAgICAweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjkyMjMzNzIwMzY4NTQ3NzU4MDduLCAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA4LCAgICAgICAgICAgICAgICAweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjkyMjMzNzIwMzY4NTQ3NzU4MDhuLCAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA5LCAgICAgICAgICAgMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjIzNjExODMyNDE0MzQ4MjI2MDY4NDduLCAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDA5LCAgICAgICAgICAgMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2OjIzNjExODMyNDE0MzQ4MjI2MDY4NDhuLCAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDBBLCAgICAgIDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjYwNDQ2MjkwOTgwNzMxNDU4NzM1MzA4N24sICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDBBLCAgICAgIDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0KLSAgICB7IHY6LTFuLCAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRl0gfSwKLSAgICB7IHY6LTEyOG4sICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MF0gfSwKLSAgICB7IHY6LTEyOW4sICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHg3Rl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTMyNzY4biwgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsMHgwMF0gfSwKLSAgICB7IHY6LTMyNzY5biwgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4N0YsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTgzODg2MDhuLCAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTgzODg2MDluLCAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweDdGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTIxNDc0ODM2NDhuLCAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTIxNDc0ODM2NDluLCAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTU0OTc1NTgxMzg4OG4sICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTU0OTc1NTgxMzg4OW4sICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDYsICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDYsICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTE0MDczNzQ4ODM1NTMyOG4sICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDYsICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTE0MDczNzQ4ODM1NTMyOW4sICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDcsICAgICAgICAgICAgICAgICAgICAgMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDcsICAgICAgICAgICAgICAgICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTM2MDI4Nzk3MDE4OTYzOTY4biwgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDcsICAgICAgICAgICAgICAgICAgICAgMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTM2MDI4Nzk3MDE4OTYzOTY5biwgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDgsICAgICAgICAgICAgICAgIDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDgsICAgICAgICAgICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTkyMjMzNzIwMzY4NTQ3NzU4MDhuLCAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDgsICAgICAgICAgICAgICAgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTkyMjMzNzIwMzY4NTQ3NzU4MDluLCAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDksICAgICAgICAgICAweEZGLDB4N0YsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDksICAgICAgICAgICAweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTIzNjExODMyNDE0MzQ4MjI2MDY4NDhuLCAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDksICAgICAgICAgICAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTIzNjExODMyNDE0MzQ4MjI2MDY4NDluLCAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MEEsICAgICAgMHhGRiwweDdGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTFuLCBkZXM6MSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MEEsICAgICAgMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTYwNDQ2MjkwOTgwNzMxNDU4NzM1MzA4OG4sICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MEEsICAgICAgMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LTYwNDQ2MjkwOTgwNzMxNDU4NzM1MzA4OW4sICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MEIsIDB4RkYsMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDAxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDNdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgzMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDIyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MjRdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCAgIGZxOjEsIGI6WzB4MjNdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyMywweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MjMsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDIzLDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyMywweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97bGVuZ3RofT0uKiBpcyBsZXNzIHRoYW4gb25lLywgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tsZW5ndGh9PS4qIGlzIGxlc3MgdGhhbiBvbmUvLCAgICBiOlsweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH09LiogaXMgbGVzcyB0aGFuIG9uZS8sICAgIGI6WzB4RkYsMHhGRiwweEZGLDB4RkVdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97bGVuZ3RofT0uKiBpcyBsZXNzIHRoYW4gb25lLywgICAgYjpbMHg4MCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBiaWdJbnRlZ2VyU2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBiaWdJbnRlZ2VyU2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBiaWdJbnRlZ2VyU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlnSW50ZWdlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaWdJbnRlZ2VyU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlnSW50ZWdlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBiaWdJbnRlZ2VyU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJpZ0ludGVnZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAge3YsbGVuOmxlbisyfSApOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggYmlnSW50ZWdlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbdW5kZWZpbmVkXSwgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMG4sICAgICAgICAgICAgICAgIGU6IHRydWUgIH0sCi0gICAgICB7IHY6IEJpZ0ludCgxKSwgICAgICAgICBlOiB0cnVlICB9LAotICAgICAgeyB2OiAwLCAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMSwgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IC0xLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAyMTQ3NDgzNjQ3LCAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMjE0NzQ4MzY0OCwgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IC0yMTQ3NDgzNjQ4LCAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAtMjE0NzQ4MzY0OSwgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMC4xLCAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IEluZmluaXR5LCAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAtSW5maW5pdHksICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogTmFOLCAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoIGJpZ0ludGVnZXJTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSkKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0Jvb2xlYW5TZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0Jvb2xlYW5TZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzY2EyMjQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9Cb29sZWFuU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgYm9vbGVhblNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5Cb29sZWFuU2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgyN10pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MjcsMHgwMV0sIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwXSwgICAgICBhdjpmYWxzZSB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MjcsMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwXSwgICAgICBhdjpmYWxzZSB9LAotICAgIHsgdjpmYWxzZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDBdIH0sCi0gICAgeyB2OnRydWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMV0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDAxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MjZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgyOF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDcyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgICBmcToxLCBiOlsweDI3XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MjcsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDI3LDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyNywweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MjcsMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sIGZxOjEsIGI6WzB4MjcsMHgwMF0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCBib29sZWFuIGJ5dGUvLCAgICAgICAgIGI6WzB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIGJvb2xlYW4gYnl0ZS8sICAgICAgICAgYjpbMHgwM10gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQgYm9vbGVhbiBieXRlLywgICAgICAgICBiOlsweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCBib29sZWFuIGJ5dGUvLCAgICAgICAgIGI6WzB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIGJvb2xlYW4gYnl0ZS8sICAgICAgICAgYjpbMHhGRl0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBib29sZWFuU2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBib29sZWFuU2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBib29sZWFuU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYm9vbGVhblNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBib29sZWFuU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYm9vbGVhblNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBib29sZWFuU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJvb2xlYW5TZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAge3YsbGVuOmxlbisyfSApOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggYm9vbGVhblNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFt0cnVlXSwgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAwbiwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMCwgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IDEsICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAtMSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogdHJ1ZSwgICAgICAgICAgICAgIGU6IHRydWUgIH0sCi0gICAgICB7IHY6IGZhbHNlLCAgICAgICAgICAgICBlOiB0cnVlICB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCBib29sZWFuU2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQnVsa1NldFNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQnVsa1NldFNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5Y2MwYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0J1bGtTZXRTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBidWxrU2V0U2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LkJ1bGtTZXRTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDJBXSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHgyQSwgMHgwMV0sICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6W10gfSwKLSAgICB7IHY6bnVsbCwgICAgICBmcToxLCBiOlsweDJBLCAweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpbXSB9LAotCi0gICAgeyB2OltdLAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAgIF0KLSAgICB9LAotCi0gICAgeyB2OlsgJ0EnIF0sCi0gICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLAotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDEsIC8vICdBJwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIGJ1bGsKLSAgICAgIF0KLSAgICB9LAotCi0gICAgeyB2OlsgJ0EnLCAnQScgXSwKLSAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwgLy8gJ0EnCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8gYnVsawotICAgICAgXQotICAgIH0sCi0KLSAgICB7IHY6WyBdLAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQxLCAvLyAnQScKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvLyBidWxrCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgdjpbICdBJywgJ0EnIF0sCi0gICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDEsIC8vICdBJwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIGJ1bGsKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQxLCAvLyAnQScKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLCAvLyBidWxrCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgdjpbIDE1LCAnQicgXSwKLSAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwRiwgLy8gMTUKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLCAvLyBidWxrCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MiwgLy8gJ0InCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwgLy8gYnVsawotICAgICAgXQotICAgIH0sCi0KLSAgICB7IHY6WyAtMSwgLTEsIC0xLCAnQicsIFtdLCBbXSBdLAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMywKLSAgICAgICAgMHgwMSwweDAwLCAweEZGLDB4RkYsMHhGRiwweEZGLCAvLyAtMQotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsIC8vIGJ1bGsKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQyLCAvLyAnQicKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLCAvLyBidWxrCi0gICAgICAgIDB4MDksMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8gW10KLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLCAvLyBidWxrCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgZnE6MSwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgICAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgIGZxOjAsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICBmcToxLCBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MDldIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICBmcToxLCBiOlsweEEyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgZnE6MSwgYjpbMHgyOV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MkJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICBmcToxLCBiOlsweDIwXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICAgICAgICAgICBmcToxLCBiOlsweDJBXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgZnE6MSwgYjpbMHgyQSwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgZnE6MSwgYjpbMHgyQSwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgZnE6MSwgYjpbMHgyQSwweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgZnE6MSwgYjpbMHgyQSwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVyby8sICAgICAgICAgICAgICBiOlsweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICAgICAgICAgYjpbMHg4MCwweDAwLDB4MDAsMHgwMF0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove2l0ZW1fMH06IGJ1bGsgaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tpdGVtXzB9OiBidWxrIGlzIGxlc3MgdGhhbiB6ZXJvLywgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97aXRlbV8wfTogYnVsayBpcyBncmVhdGVyIHRoYW4gMlxeMzItMS8sICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1bGtTZXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnVsa1NldFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1bGtTZXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggYnVsa1NldFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBidWxrU2V0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJ1bGtTZXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQnl0ZUJ1ZmZlclNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQnl0ZUJ1ZmZlclNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdhYWExYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0J5dGVCdWZmZXJTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBieXRlQnVmZmVyU2VyaWFsaXplciwgaW50U2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLWNvbnN0IGJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlcicpOwotCi1kZXNjcmliZShgR3JhcGhCaW5hcnkuQnl0ZUJ1ZmZlclNlcmlhbGl6ZXJgLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MjVdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgyNSwweDAxXSwgICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OltdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MjUsMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OltdIH0sCi0KLSAgICB7IHY6W10sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6WzB4MDFdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMV0gfSwKLSAgICB7IHY6WzB4RkYsMHgwMF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMiwgMHhGRiwweDAwXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgyNS0xXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDI1KzFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4NTJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgZnE6MSwgYjpbMHgyNV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgyNSwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDI1LDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MjUsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgyNSwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVyby8sICAgICAgIGI6WzB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVyby8sICAgICAgIGI6WzB4ODAsMHgwMCwweDAwLDB4MDBdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQgYWN0dWFsIHt2YWx1ZX0gbGVuZ3RoLywgYjpbMHgwMCwweDAwLDB4MDAsMHgwMiwgMHgwMV0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+IHsKLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotICAgICAgaWYgKHYpCi0gICAgICAgIHYgPSBmcm9tKHYpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVCdWZmZXJTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVCdWZmZXJTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVCdWZmZXJTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSk7Ci0KLSAgICBpdC5za2lwKCdzaG91bGQgbm90IGVycm9yIGlmIGJ1ZmZlciBsZW5ndGggaXMgSU5UMzJfTUFYJyk7Ci0KLSAgICAvLyBCdWZmZXIuc2l6ZSBsaW1pdCBkZXBlbmRzIG9uIE5vZGUgdmVyc2lvbiBhbmQgcnVudGltZSwgc2VlIGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC9hcGkvYnVmZmVyLmh0bWwjYnVmZmVyY29uc3RhbnRzbWF4X2xlbmd0aAotICAgIGlmIChidWZmZXIuY29uc3RhbnRzLk1BWF9MRU5HVEggPCBpbnRTZXJpYWxpemVyLklOVDMyX01BWCsxKQotICAgICAgaXQuc2tpcChgc2hvdWxkIGVycm9yIGlmIGJ1ZmZlciBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIElOVDMyX01BWCAtIGNhbm5vdCBiZSB0ZXN0ZWQgZHVlIHRvIGJ1ZmZlci5jb25zdGFudHMuTUFYX0xFTkdUSD0ke2J1ZmZlci5jb25zdGFudHMuTUFYX0xFTkdUSH0gPCBJTlQzMl9NQVgrMT0ke2ludFNlcmlhbGl6ZXIuSU5UMzJfTUFYKzF9YCk7Ci0gICAgZWxzZQotICAgICAgaXQoJ3Nob3VsZCBlcnJvciBpZiBidWZmZXIgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBJTlQzMl9NQVgnLCAoKSA9PiBhc3NlcnQudGhyb3dzKAotICAgICAgICAoKSA9PiBieXRlQnVmZmVyU2VyaWFsaXplci5zZXJpYWxpemUoQnVmZmVyLmFsbG9jKGludFNlcmlhbGl6ZXIuSU5UMzJfTUFYKzEpKSwKLSAgICAgICAgeyBtZXNzYWdlOiBuZXcgUmVnRXhwKGBCdWZmZXIgbGVuZ3RoPSR7aW50U2VyaWFsaXplci5JTlQzMl9NQVgrMX0gaXMgZ3JlYXRlciB0aGFuIHN1cHBvcnRlZCBtYXhfbGVuZ3RoPSR7aW50U2VyaWFsaXplci5JTlQzMl9NQVh9YCkgfQotICAgICAgKSk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ5dGVCdWZmZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ5dGVCdWZmZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgaWYgKHYpCi0gICAgICAgIHYgPSBmcm9tKHYpOwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggYnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBieXRlQnVmZmVyU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJ5dGVCdWZmZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlRyYXZlcnNlcigpLCBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbXSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogWzBdLCAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtuZXcgQnVmZmVyKFtdKV0sICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgQnVmZmVyKFtdKSwgICAgZTogdHJ1ZSAgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggYnl0ZUJ1ZmZlclNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQnl0ZVNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvQnl0ZVNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYzZThlZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0J5dGVTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBieXRlU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LkJ5dGVTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDI0XSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgyNCwweDAxXSwgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDBdLCAgICAgIGF2OjAgfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCBiOlsweDI0LDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMF0sICAgICAgYXY6MCB9LAotICAgIHsgdjowLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDBdIH0sCi0gICAgeyB2OjEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMV0gfSwKLSAgICB7IHY6MTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDEwXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgyM10gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDI1XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4NDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCAgIGZxOjEsIGI6WzB4MjRdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyNCwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MjQsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDI0LDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyNCwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgZnE6MSwgYjpbMHgyNCwweDAwXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBieXRlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ5dGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBieXRlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJ5dGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggYnl0ZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBieXRlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0J5dGVjb2RlU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9CeXRlY29kZVNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQzNWEwMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0J5dGVjb2RlU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgYnl0ZWNvZGVTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotCi1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsJyk7Ci1jb25zdCBCeXRlY29kZSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL2J5dGVjb2RlJyk7Ci1jb25zdCB7IEdyYXBoVHJhdmVyc2FsIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwnKTsKLWNvbnN0IHsgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneScpOwotCi1jb25zdCBnID0gKHN0cmF0ZWd5KSA9PiB7Ci0gIGNvbnN0IGJjID0gbmV3IEJ5dGVjb2RlKCk7Ci0gIGlmIChzdHJhdGVneSkKLSAgICBiYy5hZGRTb3VyY2UoJ3dpdGhTdHJhdGVnaWVzJywgWyBzdHJhdGVneSBdKTsKLSAgcmV0dXJuIG5ldyBHcmFwaFRyYXZlcnNhbCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgYmMpOwotfQotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuQnl0ZWNvZGVTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDE1XSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHgxNSwweDAxXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6ZygpIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgxNSwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpnKCkgfSwKLQotICAgIHsgdjogZygpLAotICAgICAgYjogWwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7c3RlcHNfbGVuZ3RofQotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7c291cmNlc19sZW5ndGh9Ci0gICAgXX0sCi0KLSAgICB7IHY6IGcoKS5WKCksCi0gICAgICBiOiBbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsIC8vIHtzdGVwc19sZW5ndGh9Ci0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg1NiwgLy8gVgotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vICh2b2lkKQotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7c291cmNlc19sZW5ndGh9Ci0gICAgXX0sCi0KLSAgICB7IHY6IGcoKS5WKCkuaGFzTGFiZWwoJ1BlcnNvbicpLmhhcygnYWdlJywgNDIpLAotICAgICAgYjogWwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAzLCAvLyB7c3RlcHNfbGVuZ3RofQotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NTYsIC8vIFYKLSAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIChbMF0pCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwOCwgMHg2OCwweDYxLDB4NzMsMHg0QywweDYxLDB4NjIsMHg2NSwweDZDLCAvLyBoYXNMYWJlbAotICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgLy8gKFsxXSkKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNiwgMHg1MCwweDY1LDB4NzIsMHg3MywweDZGLDB4NkUsIC8vICdQZXJzb24nCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgMHg2OCwweDYxLDB4NzMsIC8vIGhhcwotICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8gKFsyXSkKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgMHg2MSwweDY3LDB4NjUsIC8vICdhZ2UnCi0gICAgICAgICAgICAweDAxLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MkEsIC8vIDQyCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIHtzb3VyY2VzX2xlbmd0aH0KLSAgICBdfSwKLQotICAgIHsgc2VyOjEsIHY6IGcobmV3IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KHtsb2dXYXJuaW5nczogZmFsc2UsIHRocm93RXhjZXB0aW9uOiB0cnVlfSkpLlYoKS5oYXNMYWJlbCgnUGVyc29uJykuaGFzKCdhZ2UnLCA0MiksCi0gICAgICBiOiBbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDMsIC8vIHtzdGVwc19sZW5ndGh9Ci0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg1NiwgLy8gVgotICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8gKFswXSkKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA4LCAweDY4LDB4NjEsMHg3MywweDRDLDB4NjEsMHg2MiwweDY1LDB4NkMsIC8vIGhhc0xhYmVsCi0gICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAxLCAvLyAoWzFdKQotICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA2LCAweDUwLDB4NjUsMHg3MiwweDczLDB4NkYsMHg2RSwgLy8gJ1BlcnNvbicKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAzLCAweDY4LDB4NjEsMHg3MywgLy8gaGFzCi0gICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAyLCAvLyAoWzJdKQotICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAzLCAweDYxLDB4NjcsMHg2NSwgLy8gJ2FnZScKLSAgICAgICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgyQSwgLy8gNDIKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgLy8ge3NvdXJjZXNfbGVuZ3RofQotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MEUsIC4uLmZyb20oJ3dpdGhTdHJhdGVnaWVzJyksCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAgIDB4MjksMHgwMCwgMHgwMCwweDAwLDB4MDAsMHg2NSwgLi4uZnJvbSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3knKSwKLSAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDMsIC8vIGNvbmZpZ3VyYXRpb24gbWFwIHNpemUKLSAgICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDBCLCAuLi5mcm9tKCdsb2dXYXJuaW5ncycpLAotICAgICAgICAgICAgICAweDI3LDB4MDAsIDB4MDAsIC8vIGZhbHNlCi0gICAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwRSwgLi4uZnJvbSgndGhyb3dFeGNlcHRpb24nKSwKLSAgICAgICAgICAgICAgMHgyNywweDAwLCAweDAxLCAvLyB0cnVlCi0gICAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNCwgLi4uZnJvbSgna2V5cycpLAotICAgICAgICAgICAgICAweDA5LDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLCAuLi5mcm9tKCdpZCcpLAotICAgICAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNSwgLi4uZnJvbSgnbGFiZWwnKSwKLSAgICBdfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgICAgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICAgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweDE0XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4MTZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHg1MV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweDg1XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4NUZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MTVdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgICAgICAgICAgZnE6MSwgYjpbMHgxNSwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MTUsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgICAgICAgICBmcToxLCBiOlsweDE1LDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgICAgICAgICAgZnE6MSwgYjpbMHgxNSwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97c3RlcHNfbGVuZ3RofSBpcyBsZXNzIHRoYW4gemVyby8sICAgICAgICAgYjpbMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tzdGVwc19sZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvLywgICAgICAgICBiOlsweDgwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97c291cmNlc19sZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvLywgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwgMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tzb3VyY2VzX2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwLCAweDgwLDB4MDAsMHgwMCwweDAwXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVjb2RlU2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICB2ID0gdi5nZXRCeXRlY29kZSgpOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggYnl0ZWNvZGVTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGJ5dGVjb2RlU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7c2VyfSkgPT4gIXNlcikKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnl0ZWNvZGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnl0ZWNvZGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBieXRlY29kZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBpZiAodikKLSAgICAgICAgdiA9IHYuZ2V0Qnl0ZWNvZGUoKTsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJ5dGVjb2RlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJ5dGVjb2RlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGJ5dGVjb2RlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogdW5kZWZpbmVkLCAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoKSwgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbdW5kZWZpbmVkXSwgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW25ldyBCeXRlY29kZSgpXSwgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyBCeXRlY29kZSgpLCAgICBlOiB0cnVlICB9LAotICAgICAgeyB2OiBbbmV3IHQuVHJhdmVyc2FsXSwgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2FsLCAgIGU6IHRydWUgIH0sCi0gICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoIGJ5dGVjb2RlU2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci0KLX0pOwotCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0NsYXNzU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9DbGFzc1NlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFhYjI0ZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0NsYXNzU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCB7IGNsYXNzU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IHRzID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5Jyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5DbGFzc1NlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgwNl0pOwotICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgICBjb25zdCBjYXNlcyA9IFsKLSAgICAgICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHgwNiwweDAxXSwgfSwKLSAgICAgICAgeyB2OnVuZGVmaW5lZCwgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICAgICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgwNiwweDAxXSB9LAotICAgICAgICB7IHY6bnVsbCwgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgICAgIHsgdjp0cy5FbGVtZW50SWRTdHJhdGVneSwKLSAgICAgICAgICAgIGI6WwotICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4NTQsIC4uLmZyb20oJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5FbGVtZW50SWRTdHJhdGVneScpLAotICAgICAgICAgICAgXQotICAgICAgICB9LAotCi0gICAgICAgIHsgdjp0cy5PcHRpb25zU3RyYXRlZ3ksCi0gICAgICAgICAgICBiOlsKLSAgICAgICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDUyLCAuLi5mcm9tKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5JyksCi0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0gICAgXTsKLQotICAgIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICAgICAgY2FzZXMKLSAgICAgICAgICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgICAgICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgICAgICAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgICAgICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGNsYXNzU2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBjbGFzc1NlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGNsYXNzU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgICAgICAgICB9KSkKLSAgICApOwotCi0gICAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgICAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICAgICAgWwotICAgICAgICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgICAgICAgIHsgdjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICAgICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoKSwgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgICAgICAgIHsgdjogbmV3IHQuUCgpLCAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICAgICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgICAgICAgeyB2OiBbMF0sICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgICAgICAgIHsgdjogW2Z1bmN0aW9uKCl7fV0sICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICAgICAgICB7IHY6IGZ1bmN0aW9uKCl7fSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgICAgICAgeyB2OiB0cy5UcmF2ZXJzYWxTdHJhdGVneSwgICAgICAgZTogdHJ1ZSAgfSwKLSAgICAgICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+Ci0gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2xhc3NTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgICAgICkpCi0gICAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0RhdGVTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0RhdGVTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MTliMjUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9EYXRlU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1yZXF1aXJlKCcuL0RhdGVTZXJpYWxpemVyVGVzdFRlbXBsYXRlJykoeyBJRDogMHgwNCwgbmFtZTogJ0RhdGUnIH0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9EYXRlU2VyaWFsaXplclRlc3RUZW1wbGF0ZS5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvRGF0ZVNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMGJlYTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9EYXRlU2VyaWFsaXplclRlc3RUZW1wbGF0ZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBpb2MgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1tb2R1bGUuZXhwb3J0cyA9ICh7IElELCBuYW1lIH0pID0+IHsKLQotZGVzY3JpYmUoYEdyYXBoQmluYXJ5LiR7bmFtZX1TZXJpYWxpemVyYCwgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFtJRF0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IHNlcmlhbGl6ZXIgPSBpb2Muc2VyaWFsaXplcnNbSURdOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsIGZxOjEsIGI6W0lELDB4MDFdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpuZXcgRGF0ZSgwKSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjEsIGI6W0lELDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6bmV3IERhdGUoMCkgfSwKLQotICAgIHsgdjpuZXcgRGF0ZSgnMTk3MC0wMS0wMVQwMDowMDowMC4wMDBaJyksIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6bmV3IERhdGUoJzE5NjktMTItMzFUMjM6NTk6NTkuOTk5WicpLCBiOlsweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbSUQtMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOltJRCsxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4NDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHg1MF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDE0XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4RjRdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgxNV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweEY1XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgICBmcToxLCBiOltJRF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOltJRCwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6W0lELDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbSUQsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOltJRCwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgZnE6MSwgYjpbSUQsMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICBiOlsweDExXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sICAgICAgIGI6WzB4MTEsMHgyMiwweDMzLDB4NDQsIDB4MDUsMHgwNiwweDA3XSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggc2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAge3YsbGVuOmxlbisyfSApOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogdW5kZWZpbmVkLCAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoKSwgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuUCgpLCAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbMF0sICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW25ldyB0LlAoKV0sICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtuZXcgRGF0ZSgpXSwgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgRGF0ZSgpLCAgICAgICAgZTogdHJ1ZSAgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggc2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci0KLX0pOwotCi19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9Eb3VibGVTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0RvdWJsZVNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI3NDEwNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0RvdWJsZVNlcmlhbGl6ZXItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCB7IGRvdWJsZVNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5Eb3VibGVTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDA3XSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgwNywweDAxXSwgICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjowIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgwNywweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OjAgfSwKLQotICAgIHsgdjoxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4M0YsMHhGMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6MC4xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDNGLDB4QjksMHg5OSwweDk5LDB4OTksMHg5OSwweDk5LDB4OUFdIH0sCi0gICAgeyB2OjAuMzc1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgzRiwweEQ4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjowLjAwMzkwNjI1LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4M0YsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6SW5maW5pdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDdGLDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2Oi1JbmZpbml0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHhGRiwweEYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjpOYU4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4N0YsMHhGOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDA2XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDhdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHg3MF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDc3XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgICBmcToxLCBiOlsweDA3XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDcsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDA3LDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgwNywweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDcsMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sIGZxOjEsIGI6WzB4MDcsMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICBiOlsweDExXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sICAgICAgIGI6WzB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzddIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggZG91YmxlU2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBkb3VibGVTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGRvdWJsZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGRvdWJsZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBkb3VibGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBkb3VibGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggZG91YmxlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGRvdWJsZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBkb3VibGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbMF0sICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW3VuZGVmaW5lZF0sICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IDBuLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBCaWdJbnQoMSksICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMCwgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IDEsICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAtMSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMjE0NzQ4MzY0NywgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IDIxNDc0ODM2NDgsICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAtMjE0NzQ4MzY0OCwgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogLTIxNDc0ODM2NDksICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IDAuMSwgICAgICAgICAgICAgICBlOiB0cnVlICB9LAotICAgICAgeyB2OiBJbmZpbml0eSwgICAgICAgICAgZTogdHJ1ZSAgfSwKLSAgICAgIHsgdjogLUluZmluaXR5LCAgICAgICAgIGU6IHRydWUgIH0sCi0gICAgICB7IHY6IE5hTiwgICAgICAgICAgICAgICBlOiB0cnVlICB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCBkb3VibGVTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSkKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0VkZ2VTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0VkZ2VTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMjliZWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9FZGdlU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgZWRnZVNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsJyk7Ci1jb25zdCBnID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaCcpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuRWRnZVNlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MERdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCBmcToxLCBiOlsweDBELDB4MDFdLCBhdjpudWxsIH0sCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MCwKLSAgICAgIGI6WwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIHtpZH09JycKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8ge2xhYmVsfT0nJwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIHtpblZJZH09JycKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8ge2luVkxhYmVsfT0nJwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIHtvdXRWSWR9PScnCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsIC8vIHtvdXRWTGFiZWx9PScnCi0gICAgICAgIDB4RkUsMHgwMSwgLy8gcGFyZW50Ci0gICAgICAgIDB4RkUsMHgwMSwgLy8gcHJvcGVydGllcwotICAgICAgXSwKLSAgICAgIGF2Om5ldyBnLkVkZ2UoJycsIG5ldyBnLlZlcnRleCgnJywnJyxudWxsKSwgJycsIG5ldyBnLlZlcnRleCgnJywnJyxudWxsKSwgbnVsbCksCi0gICAgfSwKLSAgICB7IHY6bnVsbCwgZnE6MSwgYjpbMHgwRCwweDAxXSB9LAotICAgIHsgdjpudWxsLCBmcTowLAotICAgICAgYjpbCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8ge2lkfT0nJwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7bGFiZWx9PScnCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8ge2luVklkfT0nJwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLCAvLyB7aW5WTGFiZWx9PScnCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8ge291dFZJZH09JycKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwgLy8ge291dFZMYWJlbH09JycKLSAgICAgICAgMHhGRSwweDAxLCAvLyBwYXJlbnQKLSAgICAgICAgMHhGRSwweDAxLCAvLyBwcm9wZXJ0aWVzCi0gICAgICBdLAotICAgICAgYXY6bmV3IGcuRWRnZSgnJywgbmV3IGcuVmVydGV4KCcnLCcnLG51bGwpLCAnJywgbmV3IGcuVmVydGV4KCcnLCcnLG51bGwpLCBudWxsKSwKLSAgICB9LAotCi0gICAgeyB2Om5ldyBnLkVkZ2UoJ0EnLCBuZXcgZy5WZXJ0ZXgoJ0InLCdQZXJzb24nLG51bGwpLCAnaGFzJywgbmV3IGcuVmVydGV4KCdDJywnUGV0JyxudWxsKSwgbnVsbCksCi0gICAgICBiOlsKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQxLCAvLyBpZAotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAzLCAuLi5mcm9tKCdoYXMnKSwgLy8gbGFiZWwKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQzLCAvLyBpblZJZAotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAzLCAuLi5mcm9tKCdQZXQnKSwgLy8gaW5WTGFiZWwKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQyLCAvLyBvdXRWSWQKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwNiwgLi4uZnJvbSgnUGVyc29uJyksIC8vIG91dFZMYWJlbAotICAgICAgICAweEZFLDB4MDEsIC8vIHBhcmVudAotICAgICAgICAweEZFLDB4MDEsIC8vIHByb3BlcnRpZXMKLSAgICAgIF0KLSAgICB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwQ10gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwRV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHhEMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCBmcToxLCBiOlsweDBEXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDBELDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MEQsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgwRCwweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDBELDB4RkZdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggZWRnZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggZWRnZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggZWRnZVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGVkZ2VTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZWRnZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGVkZ2VTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggZWRnZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBlZGdlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGVkZ2VTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlRyYXZlcnNlcigpLCBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5QKCksICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbbmV3IGcuVmVydGV4KCldLCAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IGcuVmVydGV4KCksICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtuZXcgZy5FZGdlKCldLCAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgZy5FZGdlKCksICAgICAgZTogdHJ1ZSAgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggZWRnZVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvRW51bVNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvRW51bVNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdmOTAzMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0VudW1TZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBlbnVtU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LkVudW1TZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVzID0gWwotICAgIHsgbmFtZTogJ0JhcnJpZXInLCAgICAgY29kZTogZnJvbShbMHgxM10pLCBlbnVtOiB0LmJhcnJpZXIgfSwKLSAgICB7IG5hbWU6ICdDYXJkaW5hbGl0eScsIGNvZGU6IGZyb20oWzB4MTZdKSwgZW51bTogdC5jYXJkaW5hbGl0eSB9LAotICAgIHsgbmFtZTogJ0NvbHVtbicsICAgICAgY29kZTogZnJvbShbMHgxN10pLCBlbnVtOiB0LmNvbHVtbiB9LAotICAgIHsgbmFtZTogJ0RpcmVjdGlvbicsICAgY29kZTogZnJvbShbMHgxOF0pLCBlbnVtOiB0LmRpcmVjdGlvbiB9LAotICAgIHsgbmFtZTogJ0dUeXBlJywgICAgICAgY29kZTogZnJvbShbMHgzMF0pLCBlbnVtOiB0LmdUeXBlIH0sCi0gICAgeyBuYW1lOiAnT3BlcmF0b3InLCAgICBjb2RlOiBmcm9tKFsweDE5XSksIGVudW06IHQub3BlcmF0b3IgfSwKLSAgICB7IG5hbWU6ICdPcmRlcicsICAgICAgIGNvZGU6IGZyb20oWzB4MUFdKSwgZW51bTogdC5vcmRlciB9LAotICAgIHsgbmFtZTogJ1BpY2snLCAgICAgICAgY29kZTogZnJvbShbMHgxQl0pLCBlbnVtOiB0LnBpY2sgfSwKLSAgICB7IG5hbWU6ICdQb3AnLCAgICAgICAgIGNvZGU6IGZyb20oWzB4MUNdKSwgZW51bTogdC5wb3AgfSwKLSAgICB7IG5hbWU6ICdTY29wZScsICAgICAgIGNvZGU6IGZyb20oWzB4MUZdKSwgZW51bTogdC5zY29wZSB9LAotICAgIHsgbmFtZTogJ1QnLCAgICAgICAgICAgY29kZTogZnJvbShbMHgyMF0pLCBlbnVtOiB0LnQgfSwKLSAgXTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCBmcToxLCBiOlsweDAxXSwgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsIGZxOjAsIGI6WzB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OicnIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICBmcTowLCBiOlsweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjonJyB9LAotCi0gICAgLy8gcmVhbCBjYXNlcyBvZiBzZXJpYWxpemF0aW9uIGNvdmVyZWQgYnkgQW55U2VyaWFsaXplciNzZXJpYWxpemUgdGVzdHMKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBCOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBCOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBCOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MCwgQjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGZxOjEsIEI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MCwgQjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4MTJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4MTRdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4MURdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4MjFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIEI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9lbGVtZW50TmFtZTogLipTdHJpbmdTZXJpYWxpemVyLiogdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sIEI6WzB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDBdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIHR5cGVzLmZvckVhY2goKHR5cGUpID0+IGRlc2NyaWJlKGAke3R5cGUubmFtZX1gLCAoKSA9PgotICAgICAgY2FzZXMKLSAgICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgICBiID0gZnJvbShiKTsKLSAgICAgICAgdiA9IG5ldyB0LkVudW1WYWx1ZSh0eXBlLm5hbWUsIHYpOwotCi0gICAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgIGlmIChmcSkKLSAgICAgICAgICAgIGIgPSBjb25jYXQoWyB0eXBlLmNvZGUsIGIgXSk7Ci0gICAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggZW51bVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBlbnVtU2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGUuY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGVudW1TZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICAgIH0pKQotICAgICkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+IHsKLSAgICB0eXBlcy5mb3JFYWNoKCh0eXBlKSA9PiBkZXNjcmliZShgJHt0eXBlLm5hbWV9YCwgKCkgPT4KLSAgICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIEIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgICBpZiAoQikKLSAgICAgICAgICBiID0gQjsKLSAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpIHsKLSAgICAgICAgICBiID0gZnJvbShiKTsKLSAgICAgICAgICBpZiAoZnEgJiYgQiA9PT0gdW5kZWZpbmVkKQotICAgICAgICAgICAgYiA9IGNvbmNhdChbIHR5cGUuY29kZSwgYiBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZW51bVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZW51bVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlLmNvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZW51bVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgdiA9IGF2OwotICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwpCi0gICAgICAgICAgdiA9IG5ldyB0LkVudW1WYWx1ZSh0eXBlLm5hbWUsIHYpOwotICAgICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICBpZiAodiAmJiAhZnEpCi0gICAgICAgICAgICB2LnR5cGVOYW1lID0gdW5kZWZpbmVkOwotICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGVudW1TZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBlbnVtU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGUuY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgICAgdi50eXBlTmFtZSA9IHVuZGVmaW5lZDsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggZW51bVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgICB9KSkKLSAgICApKTsKLQotICAgIHR5cGVzLmZvckVhY2godHlwZSA9PgotICAgICAgT2JqZWN0LnZhbHVlcyh0eXBlLmVudW0pLmZvckVhY2goZSA9PiBpdChgc2hvdWxkIHJldHVybiBleGlzdGluZyB0LkVudW1WYWx1ZSgke2UudHlwZU5hbWV9LCAke2UuZWxlbWVudE5hbWV9KSBpbnN0YW5jZWAsICgpID0+IHsKLSAgICAgICAgY29uc3QgYiA9IGVudW1TZXJpYWxpemVyLnNlcmlhbGl6ZShlKTsKLSAgICAgICAgY29uc3QgciA9IGVudW1TZXJpYWxpemVyLmRlc2VyaWFsaXplKGIpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoci52LCBlKTsKLSAgICAgIH0pKQotICAgICk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4gewotICAgIGl0KCdzaG91bGQgZXJyb3IgaWYgdHlwZSBuYW1lIGlzIG5vdCBzdXBwb3J0ZWQnLCAoKSA9PiBhc3NlcnQudGhyb3dzKAotICAgICAgKCkgPT4gZW51bVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKG5ldyB0LkVudW1WYWx1ZSgnVW5rbm93blR5cGUnLCAnYXNjJykpLAotICAgICAgeyBtZXNzYWdlOiAvdHlwZU5hbWU9VW5rbm93blR5cGUgaXMgbm90IHN1cHBvcnRlZC8gfQotICAgICkpOwotCi0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5FbnVtVmFsdWUoJ0JhcnJpZXInKSwgIGU6IHRydWUgIH0sCi0gICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoIGVudW1TZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSk7Ci0gIH0pOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvRmxvYXRTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0Zsb2F0U2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTgwYWM0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvRmxvYXRTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBmbG9hdFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5GbG9hdFNlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MDhdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCBiOlsweDA4LDB4MDFdLCAgICAgICAgICAgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjowIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgwOCwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjowIH0sCi0KLSAgICB7IHY6MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDNGLDB4ODAsMHgwMCwweDAwXSB9LAotICAgIHsgdjowLjM3NSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4M0UsMHhDMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OkluZmluaXR5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHg3RiwweDgwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6LUluZmluaXR5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweEZGLDB4ODAsMHgwMCwweDAwXSB9LAotICAgIHsgdjpOYU4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4N0YsMHhDMCwweDAwLDB4MDBdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwN10gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDA5XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4ODBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHg4OF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICAgZnE6MSwgYjpbMHgwOF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDA4LDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgwOCwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDgsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDA4LDB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCBmcToxLCBiOlsweDA4LDB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgICAgICAgYjpbMHgxMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICBiOlsweDExLDB4MjIsMHgzM10gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBmbG9hdFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggZmxvYXRTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGZsb2F0U2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmxvYXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZmxvYXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmbG9hdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBmbG9hdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBmbG9hdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBmbG9hdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVJlYWRlci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVJlYWRlci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTQxOWNlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvR3JhcGhCaW5hcnlSZWFkZXItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBncmFwaEJpbmFyeVJlYWRlciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLQotY29uc3QgeyBUcmF2ZXJzZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgQnl0ZWNvZGUgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgeyBHcmFwaFRyYXZlcnNhbCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCBnID0gKCkgPT4gbmV3IEdyYXBoVHJhdmVyc2FsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuZXcgQnl0ZWNvZGUoKSk7Ci0KLWNvbnN0IHsgZnJvbSB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuUmVhZGVyJywgKCkgPT4gewotCi0gIGRlc2NyaWJlKCcjcmVhZFJlc3BvbnNlJywgKCkgPT4gewotCi0gICAgWyB1bmRlZmluZWQsIG51bGwgXS5mb3JFYWNoKGJ1ZmZlciA9PgotICAgICAgaXQoYHNob3VsZCBlcnJvciBpZiBidWZmZXIgaXMgJyR7YnVmZmVyfSdgLCAoKSA9PiBhc3NlcnQudGhyb3dzKAotICAgICAgICAoKSA9PiBncmFwaEJpbmFyeVJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKSwKLSAgICAgICAgeyBtZXNzYWdlOiAvQnVmZmVyIGlzIG1pc3NpbmcvIH0sCi0gICAgICApKQotICAgICk7Ci0KLSAgICBbICcnLCAtMSwgMCwgNDIsIDMuMTQsIE5hTiwgSW5maW5pdHksIC1JbmZpbml0eSwgU3ltYm9sKCcnKSBdLmZvckVhY2goKGJ1ZmZlciwgaSkgPT4KLSAgICAgIGl0KGBzaG91bGQgZXJyb3IgaWYgaXQgaXMgbm90IGEgQnVmZmVyLCBjYXNlICMke2l9YCwgKCkgPT4gYXNzZXJ0LnRocm93cygKLSAgICAgICAgKCkgPT4gZ3JhcGhCaW5hcnlSZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlciksCi0gICAgICAgIHsgbWVzc2FnZTogL05vdCBhbiBpbnN0YW5jZSBvZiBCdWZmZXIvIH0sCi0gICAgICApKQotICAgICk7Ci0KLSAgICBpdCgnc2hvdWxkIGVycm9yIGlmIGJ1ZmZlciBpcyBlbXB0eScsICgpID0+IGFzc2VydC50aHJvd3MoCi0gICAgICAoKSA9PiBncmFwaEJpbmFyeVJlYWRlci5yZWFkUmVzcG9uc2UoZnJvbShbXSkpLAotICAgICAgeyBtZXNzYWdlOiAvQnVmZmVyIGlzIGVtcHR5LyB9LAotICAgICkpOwotCi0gICAgWwotICAgICAgWyAweDAwIF0sCi0gICAgICBbIDB4MDAsIDB4ODEgXSwKLSAgICAgIFsgMHgwMSBdLAotICAgICAgWyAweDgwLCAweDgxIF0sCi0gICAgICBbIDB4ODIsIDB4ODEgXSwKLSAgICAgIFsgMHhGRiwgMHgwMCwgMHg4MSBdLAotICAgICAgWyAweDAwLCAweDgxIF0sCi0gICAgICBbIDB4MDAsIDB4MDAsIDB4ODEgXSwKLSAgICAgIFsgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSBdLAotICAgIF0uZm9yRWFjaCgoYiwgaSkgPT4gaXQoYHNob3VsZCBlcnJvciBpZiB2ZXJzaW9uIGlzIGluY29ycmVjdCwgY2FzZSAjJHtpfWAsICgpID0+IGFzc2VydC50aHJvd3MoCi0gICAgICAoKSA9PiBncmFwaEJpbmFyeVJlYWRlci5yZWFkUmVzcG9uc2UoZnJvbShiKSksCi0gICAgICB7IG1lc3NhZ2U6IC9VbnN1cHBvcnRlZCB2ZXJzaW9uLyB9LAotICAgICkpKTsKLQotICAgIFsKLSAgICAgIHsgYjpbCi0gICAgICAgICAgLy8ge3ZlcnNpb259Ci0gICAgICAgICAgMHg4MSwKLSAgICAgICAgICAvLyB7cmVxdWVzdF9pZH0gbnVsbGFibGUgVVVJRAotICAgICAgICAgIDB4MDAsIDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGLDB4MTAsCi0gICAgICAgICAgLy8ge3N0YXR1c19jb2RlfSBpcyBhbiBJbnQKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweEM4LAotICAgICAgICAgIC8vIHtzdGF0dXNfbWVzc2FnZX0gaXMgYSBudWxsYWJsZSBTdHJpbmcKLSAgICAgICAgICAweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLCAgLi4uZnJvbSgnT0snKSwKLSAgICAgICAgICAvLyB7c3RhdHVzX2F0dHJpYnV0ZXN9IGlzIGEgTWFwCi0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAgIC8vIGtleSBTdHJpbmcKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MEMsICAuLi5mcm9tKCdsaWZlLW1lYW5pbmcnKSwKLSAgICAgICAgICAgIC8vIHZhbHVlIEludAotICAgICAgICAgICAgMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDJBLAotICAgICAgICAgIC8vIHtyZXN1bHRfbWV0YX0gaXMgYSBNYXAKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAgICAgLy8gMSBrZXkgU3RyaW5nCi0gICAgICAgICAgICAweDAzLDB4MDAsICAweDAwLDB4MDAsMHgwMCwweDAyLCAgLi4uZnJvbSgnbTEnKSwKLSAgICAgICAgICAgIC8vIDEgdmFsdWUgSW50Ci0gICAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAgICAgICAgICAvLyAyIGtleSBTdHJpbmcKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDIsICAuLi5mcm9tKCdtMicpLAotICAgICAgICAgICAgLy8gMiB2YWx1ZSBJbnQKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgnYV9CJyksCi0gICAgICAgICAgLy8ge3Jlc3VsdF9kYXRhfSBpcyBhIGZ1bGx5IHF1YWxpZmllZCB0eXBlZCB2YWx1ZSBjb21wb3NlZCBvZiB7dHlwZV9jb2RlfXt0eXBlX2luZm99e3ZhbHVlX2ZsYWd9e3ZhbHVlfQotICAgICAgICAgICAgLy8gbGlzdAotICAgICAgICAgICAgMHgwOSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLAotICAgICAgICAgICAgICAvLyBUcmF2ZXJzZXIKLSAgICAgICAgICAgICAgMHgyMSwweDAwLAotICAgICAgICAgICAgICAgIC8vIHtidWxrfQotICAgICAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywKLSAgICAgICAgICAgICAgICAvLyB7dmFsdWV9Ci0gICAgICAgICAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdtYXJrbycpLAotICAgICAgICBdLAotICAgICAgICB2OnsKLSAgICAgICAgICByZXF1ZXN0SWQ6ICcwMTAyMDMwNC0wNTA2LTA3MDgtMDkwYS0wYjBjMGQwZTBmMTAnLAotICAgICAgICAgIHN0YXR1czogewotICAgICAgICAgICAgY29kZTogMjAwLAotICAgICAgICAgICAgbWVzc2FnZTogJ09LJywKLSAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG5ldyBNYXAoWyBbJ2xpZmUtbWVhbmluZycsNDJdIF0pLAotICAgICAgICAgIH0sCi0gICAgICAgICAgcmVzdWx0OiB7Ci0gICAgICAgICAgICBtZXRhOiBuZXcgTWFwKFsgWydtMScsJyddLCBbJ20yJywnYV9CJ10gXSksCi0gICAgICAgICAgICBkYXRhOiBbIG5ldyBUcmF2ZXJzZXIoJ21hcmtvJywgM24pIF0sCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LAotICAgIF0uZm9yRWFjaCgoe2Isdn0sIGkpID0+IGl0KGBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgY2FzZSAjJHtpfWAsICgpID0+IGFzc2VydC5kZWVwRXF1YWwoCi0gICAgICBncmFwaEJpbmFyeVJlYWRlci5yZWFkUmVzcG9uc2UoIGZyb20oYikgKSwKLSAgICAgIHYsCi0gICAgKSkpOwotCi0gIH0pOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvR3JhcGhCaW5hcnlXcml0ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvR3JhcGhCaW5hcnlXcml0ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk3ZjAxOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0dyYXBoQmluYXJ5V3JpdGVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBncmFwaEJpbmFyeVdyaXRlciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLQotY29uc3QgQnl0ZWNvZGUgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgeyBHcmFwaFRyYXZlcnNhbCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCBnID0gKCkgPT4gbmV3IEdyYXBoVHJhdmVyc2FsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuZXcgQnl0ZWNvZGUoKSk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5Xcml0ZXInLCAoKSA9PiB7Ci0KLSAgZGVzY3JpYmUoJyN3cml0ZVJlcXVlc3QnLCAoKSA9PgotICAgIFsKLSAgICAgIHsKLSAgICAgICAgcjogewotICAgICAgICAgIHJlcXVlc3RJZDogJzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBBMGIwYzBEMGUwRicsCi0gICAgICAgICAgb3A6ICdieXRlY29kZScsCi0gICAgICAgICAgcHJvY2Vzc29yOiAndHJhdmVyc2FsJywKLSAgICAgICAgICBhcmdzOiB7IGFsaWFzZXM6IHtnOidnJ30sIGdyZW1saW46IGcoKS5WKCkuZ2V0Qnl0ZWNvZGUoKSB9LAotICAgICAgICB9LAotICAgICAgICBlOiBbCi0gICAgICAgICAgLy8ge3ZlcnNpb259Ci0gICAgICAgICAgMHg4MSwKLSAgICAgICAgICAvLyB7cmVxdWVzdF9pZH0gVVVJRAotICAgICAgICAgIDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYsCi0gICAgICAgICAgLy8ge29wfSBTdHJpbmcKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA4LCAgLi4uZnJvbSgnYnl0ZWNvZGUnKSwKLSAgICAgICAgICAvLyB7cHJvY2Vzc29yfSBTdHJpbmcKLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA5LCAgLi4uZnJvbSgndHJhdmVyc2FsJyksCi0gICAgICAgICAgLy8ge2FyZ3N9IE1hcAotICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDIsCi0gICAgICAgICAgICAvLyAxLgotICAgICAgICAgICAgLy8gYXJncy5hbGlhc2VzIGtleSBTdHJpbmcKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDcsICAuLi5mcm9tKCdhbGlhc2VzJyksCi0gICAgICAgICAgICAvLyBhcmdzLmFsaWFzZXMgdmFsdWUgTWFwCi0gICAgICAgICAgICAweDBBLDB4MDAsICAweDAwLDB4MDAsMHgwMCwweDAxLAotICAgICAgICAgICAgICAvLyBhbGlhc2VzLmcga2V5IFN0cmluZwotICAgICAgICAgICAgICAweDAzLDB4MDAsICAweDAwLDB4MDAsMHgwMCwweDAxLCAgLi4uZnJvbSgnZycpLAotICAgICAgICAgICAgICAvLyBhbGlhc2VzLmcgdmFsdWUgU3RyaW5nCi0gICAgICAgICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDEsICAuLi5mcm9tKCdnJyksCi0gICAgICAgICAgICAvLyAyLgotICAgICAgICAgICAgLy8gYXJncy5ncmVtbGluIGtleSBTdHJpbmcKLSAgICAgICAgICAgIDB4MDMsMHgwMCwgIDB4MDAsMHgwMCwweDAwLDB4MDcsICAuLi5mcm9tKCdncmVtbGluJyksCi0gICAgICAgICAgICAvLyBhcmdzLmdyZW1saW4gdmFsdWUgQnl0ZWNvZGUKLSAgICAgICAgICAgIDB4MTUsMHgwMCwKLSAgICAgICAgICAgICAgLy8ge3N0ZXBzX2xlbmd0aH0KLSAgICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAgICAgICAvLyBzdGVwIDEgLSB7bmFtZX0gU3RyaW5nCi0gICAgICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwgIC4uLmZyb20oJ1YnKSwKLSAgICAgICAgICAgICAgICAvLyBzdGVwIDEgLSB7dmFsdWVzX2xlbmd0aH0gSW50Ci0gICAgICAgICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMCwKLSAgICAgICAgICAgICAgLy8ge3NvdXJjZXNfbGVuZ3RofQotICAgICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLAotICAgICAgICBdLAotICAgICAgfSwKLSAgICBdLmZvckVhY2goKHsgciwgZSB9LCBpKSA9PiBpdChgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHJlcXVlc3Qgb2YgY2FzZSAjJHtpfWAsICgpID0+IGFzc2VydC5kZWVwRXF1YWwoCi0gICAgICBncmFwaEJpbmFyeVdyaXRlci53cml0ZVJlcXVlc3QociksCi0gICAgICBmcm9tKGUpLAotICAgICkpKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvSW50U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9JbnRTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MjZjMGIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9JbnRTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBpbnRTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuSW50U2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgwMV0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MDEsMHgwMV0sICAgICAgICAgICBhdjpudWxsIH0sCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OjAgfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCBiOlsweDAxLDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OjAgfSwKLSAgICB7IHY6MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjoxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDFdIH0sCi0gICAgeyB2OjI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDEsMHgwMF0gfSwKLSAgICB7IHY6NjU1MzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDEsMHgwMCwweDAwXSB9LAotICAgIHsgdjoxNjc3NzIxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDEsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjIxNDc0ODM2NDcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHg3RiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgdjotMjE0NzQ4MzY0OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4ODAsMHgwMCwweDAwLDB4MDBdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDFEXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4ODFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDAxLDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgwMSwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDEsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDAxLDB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCBmcToxLCBiOlsweDAxLDB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgICAgICAgYjpbMHgxMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICBiOlsweDExLDB4MjIsMHgzM10gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBpbnRTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGludFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggaW50U2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBpbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbdW5kZWZpbmVkXSwgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogMG4sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IEJpZ0ludCgxKSwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAwLCAgICAgICAgICAgICAgICAgZTogdHJ1ZSAgfSwKLSAgICAgIHsgdjogMSwgICAgICAgICAgICAgICAgIGU6IHRydWUgIH0sCi0gICAgICB7IHY6IC0xLCAgICAgICAgICAgICAgICBlOiB0cnVlICB9LAotICAgICAgeyB2OiAyMTQ3NDgzNjQ3LCAgICAgICAgZTogdHJ1ZSAgfSwKLSAgICAgIHsgdjogMjE0NzQ4MzY0OCwgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IC0yMTQ3NDgzNjQ4LCAgICAgICBlOiB0cnVlIH0sCi0gICAgICB7IHY6IC0yMTQ3NDgzNjQ5LCAgICAgICBlOiBmYWxzZSB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCBpbnRTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSkKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0xhbWJkYVNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvTGFtYmRhU2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjBjYzNmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvTGFtYmRhU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBsYW1iZGFTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LkxhbWJkYVNlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MURdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCBmcToxLCBiOlsweDFELDB4MDFdLCB9LAotICAgIHsgdjp1bmRlZmluZWQsIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgxRCwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0KLSAgICB7IHY6ZnVuY3Rpb24oKSB7IHJldHVybiAnU2NyaXB0XzEnOyB9LAotICAgICAgYjpbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MEUsIC4uLmZyb20oJ2dyZW1saW4tZ3Jvb3Z5JyksCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDgsIC4uLmZyb20oJ1NjcmlwdF8xJyksCi0gICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgdjpmdW5jdGlvbigpIHsgcmV0dXJuIFsgJ1NjcmlwdF8yJywgJ1NjYWxhJyBdOyB9LAotICAgICAgYjpbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ1NjYWxhJyksCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDgsIC4uLmZyb20oJ1NjcmlwdF8yJyksCi0gICAgICAgIDB4RkYsMHhGRiwweEZGLDB4RkYsCi0gICAgICBdCi0gICAgfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBsYW1iZGFTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGxhbWJkYVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbGFtYmRhU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlAoKSwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbXSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogWzBdLCAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtmdW5jdGlvbigpe31dLCAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBmdW5jdGlvbigpe30sICAgICAgZTogdHJ1ZSAgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggbGFtYmRhU2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci0KLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9MaXN0U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9MaXN0U2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGRlYzg1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvTGlzdFNlcmlhbGl6ZXItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotcmVxdWlyZSgnLi9BcnJheVNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUnKSh7IElEOiAweDA5LCBuYW1lOiAnTGlzdCcgfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0xvbmdTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0xvbmdTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYmIzY2QuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9Mb25nU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgbG9uZ1NlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5Mb25nU2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgwMl0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MDIsMHgwMV0sICAgICAgICAgICBhdjpudWxsIH0sCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6MCB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6WzB4MDIsMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjowIH0sCi0gICAgeyB2OjAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjoxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMV0gfSwKLSAgICB7IHY6MjU2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDBdIH0sCi0gICAgeyB2OjY1NTM2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwXSB9LAotICAgIHsgdjoxNjc3NzIxNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6NDI5NDk2NzI5NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjEwOTk1MTE2Mjc3NzYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjoyODE0NzQ5NzY3MTA2NTYsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6OTAwNzE5OTI1NDc0MDk5MSwgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MUYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyB2Oi0xLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgdjotOTAwNzE5OTI1NDc0MDk5MSwgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4RkYsMHhFMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMV0gfSwKLQotICAgIC8vIENhc2VzIGZvciA2NGJpdCBpbnRlZ2VyIHZzLiBKYXZhU2NyaXB0IE51bWJlci5NSU4vTUFYX1NBRkVfSU5URUdFUgotICAgIC8vICdlJyBzdGFuZHMgZm9yIHdoYXQgYWN0dWFsbHkgd2Ugd291bGQgZXhwZWN0IGlmIHdlIGhhZCBlbm91Z2ggcHJlc2ljaW9uCi0gICAgeyBkZXM6MSwgZTonOTAwNzE5OTI1NDc0MDk5MicsIC8vIE1BWF9TQUZFX0lOVEVHRVIgKyAxCi0gICAgICAgICAgICAgdjogOTAwNzE5OTI1NDc0MDk5MiwgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgZGVzOjEsIGU6JzkwMDcxOTkyNTQ3NDEwMDEnLCAvLyBNQVhfU0FGRV9JTlRFR0VSICsgMTAKLSAgICAgICAgICAgICB2OiA5MDA3MTk5MjU0NzQxMDAwLCAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDldIH0sCi0gICAgeyBkZXM6MSwgZTonOTAwNzE5OTI1NDc0MTA5MScsIC8vIE1BWF9TQUZFX0lOVEVHRVIgKyAxMDAKLSAgICAgICAgICAgICB2OiA5MDA3MTk5MjU0NzQxMDkyLCAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjNdIH0sCi0gICAgeyBkZXM6MSwgZTonOTAwNzE5OTI1NDc0MTk5MScsIC8vIE1BWF9TQUZFX0lOVEVHRVIgKyAxMDAwCi0gICAgICAgICAgICAgdjogOTAwNzE5OTI1NDc0MTk5MiwgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweEU3XSB9LAotICAgIHsgZGVzOjEsIGU6Jy05MDA3MTk5MjU0NzQxOTkxJywvLyBNSU5fU0FGRV9JTlRFR0VSIC0gMTAwMAotICAgICAgICAgICAgIHY6IC05MDA3MTk5MjU0NzQxOTkyLCAgICAgICAgICAgICAgICAgIGI6WzB4RkYsMHhERiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkMsMHgxOV0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDAxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDNdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgyMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDgyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgICBmcToxLCBiOlsweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDIsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDAyLDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgwMiwweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDIsMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sIGZxOjEsIGI6WzB4MDIsMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICBiOlsweDExXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sICAgICAgIGI6WzB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2LDB4NzddIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbG9uZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbG9uZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbG9uZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbG9uZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggbG9uZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBsb25nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICBpdC5za2lwKCcnKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvTG9uZ1NlcmlhbGl6ZXJOZy10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9Mb25nU2VyaWFsaXplck5nLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNGY1YTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9Mb25nU2VyaWFsaXplck5nLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBsb25nU2VyaWFsaXplck5nOiBsb25nU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LkxvbmdTZXJpYWxpemVyTmcnLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MDJdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCBiOlsweDAyLDB4MDFdLCAgICAgICAgICAgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OjBuIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgwMiwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OjBuIH0sCi0gICAgeyB2OjBuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjoxbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMV0gfSwKLSAgICB7IHY6MjU2biwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDBdIH0sCi0gICAgeyB2OjY1NTM2biwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwXSB9LAotICAgIHsgdjoxNjc3NzIxNm4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6NDI5NDk2NzI5Nm4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjEwOTk1MTE2Mjc3NzZuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjoyODE0NzQ5NzY3MTA2NTZuLCAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6NzIwNTc1OTQwMzc5Mjc5MzZuLCAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0gICAgeyB2OjkyMjMzNzIwMzY4NTQ3NzU4MDduLCAgICAgICAgICAgICAgICAgICAgICAgYjpbMHg3RiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgdjotMW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRl0gfSwKLSAgICB7IHY6LTkyMjMzNzIwMzY4NTQ3NzU4MDhuLCAgICAgICAgICAgICAgICAgICAgICBiOlsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDBdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDAzXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MjBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHg4Ml0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICAgZnE6MSwgYjpbMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDAyLDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgwMiwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MDIsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDAyLDB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCBmcToxLCBiOlsweDAyLDB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgICAgICAgYjpbMHgxMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICBiOlsweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3XSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGxvbmdTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGxvbmdTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIGxvbmdTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBsb25nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBsb25nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIGxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggbG9uZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBsb25nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgaXQuc2tpcCgnJykKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L01hcFNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvTWFwU2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2IyYTg5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvTWFwU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgbWFwU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotY29uc3QgQnl0ZWNvZGUgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy9ieXRlY29kZScpOwotY29uc3QgeyBHcmFwaFRyYXZlcnNhbCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCBnID0gKCkgPT4gbmV3IEdyYXBoVHJhdmVyc2FsKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBuZXcgQnl0ZWNvZGUoKSk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5NYXBTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDBBXSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHgwQSwgMHgwMV0sICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6e30gfSwKLSAgICB7IHY6bnVsbCwgICAgICBmcToxLCBiOlsweDBBLCAweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjp7fSB9LAotCi0gICAgeyB2Ont9LAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLQotICAgIHsgdjp7ICdhJzogJ2EnIH0sCi0gICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAvKidhJyovMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg2MSwgLyonYScqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NjFdIH0sCi0KLSAgICB7IHY6eyAnYSc6ICdBJyB9LAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMSwgLyonYScqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NjEsIC8qJ0EnKi8weDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDQxXSB9LAotCi0gICAgeyB2OnsgJ2EnOiAxIH0sCi0gICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAvKidhJyovMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg2MSwgLyoxKi8weDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMV0gfSwKLQotICAgIHsgdjp7ICd5eic6ICdBMScgfSwKLSAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsIC8qJ3l6JyovMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg3OSwweDdBLCAvKidBMScqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NDEsMHgzMV0gfSwKLQotICAgIHsgdjp7ICdvbmUnOiAxLCAndHdvJzogMiB9LAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgLyonb25lJyovMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHg2RiwweDZFLDB4NjUsIC8qMSovMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgIC8qJ3R3bycqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4NzQsMHg3NywweDZGLCAvKjIqLzB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgXQotICAgIH0sCi0KLSAgICB7IHY6eyAnb25lJzogMSwgJ3R3byc6IDIsICdpbnQzMic6IG5ldyBNYXAoWyBbJ21pbicsLTIxNDc0ODM2NDhdLCBbJ21heCcsMjE0NzQ4MzY0N10gXSkgfSwKLSAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDMsCi0gICAgICAgIC8qJ29uZScqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4NkYsMHg2RSwweDY1LCAvKjEqLzB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLAotICAgICAgICAvKid0d28nKi8weDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDc0LDB4NzcsMHg2RiwgLyoyKi8weDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgLyonaW50MzInKi8gMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAweDY5LDB4NkUsMHg3NCwweDMzLDB4MzIsCi0gICAgICAgIC8qaW50MzIgbWFwKi8KLSAgICAgICAgMHgwQSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAgIC8qJ21pbicqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4NkQsMHg2OSwweDZFLCAvKi0yMTQ3NDgzNjQ4Ki8weDAxLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwKLSAgICAgICAgICAvKidtYXgnKi8weDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDZELDB4NjEsMHg3OCwgLyogMjE0NzQ4MzY0NyovMHgwMSwweDAwLDB4N0YsMHhGRiwweEZGLDB4RkYsCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgdjp7IGFsaWFzZXM6IG5ldyBNYXAoWyBbJ2cnLCdnJ10gXSksIGdyZW1saW46IGcoKS5WKCkuZ2V0Qnl0ZWNvZGUoKSB9LAotICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgLyonYWxpYXNlcycqLwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDcsIC4uLmZyb20oJ2FsaWFzZXMnKSwKLSAgICAgICAgLyphbGlhc2VzIG1hcCovCi0gICAgICAgIDB4MEEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAvKidnJyovMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg2NywgLyonZycqLzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4NjcsCi0KLSAgICAgICAgLyonZ3JlbWxpbicqLwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDcsIC4uLmZyb20oJ2dyZW1saW4nKSwKLSAgICAgICAgLypncmVtbGluIGJ5dGVjb2RlKi8KLSAgICAgICAgMHgxNSwweDAwLAotICAgICAgICAgIC8vIHtzdGVwc19sZW5ndGh9Ci0gICAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAgIC8vIHN0ZXAgMSAtIHtuYW1lfSBTdHJpbmcKLSAgICAgICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsICAuLi5mcm9tKCdWJyksCi0gICAgICAgICAgICAvLyBzdGVwIDEgLSB7dmFsdWVzX2xlbmd0aH0gSW50Ci0gICAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLAotICAgICAgICAgIC8vIHtzb3VyY2VzX2xlbmd0aH0KLSAgICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLAotICAgICAgXQotICAgIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgICAgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgICAgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweDA5XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4MEJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHg4QV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweDFBXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4QTBdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgICAgICAgICAgICBmcToxLCBiOlsweDBBXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MEEsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgICAgICAgICBmcToxLCBiOlsweDBBLDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgICAgICAgICAgZnE6MSwgYjpbMHgwQSwweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MEEsMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICAgICAgICAgIGI6WzB4RkYsMHhGRiwweEZGLDB4RkZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVyby8sICAgICAgICAgICAgICAgYjpbMHg4MCwweDAwLDB4MDAsMHgwMF0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove2l0ZW1fMH0ga2V5Oi4qYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97aXRlbV8wfSBrZXk6Lip7dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tpdGVtXzB9IHZhbHVlOi4qYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tpdGVtXzB9IHZhbHVlOi4qe3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCBiOlsweDAwLDB4MDAsMHgwMCwweDAxLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwRiwgMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3tpdGVtXzF9IGtleTouKmJ1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAyLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgXSB9LAotICAgIHsgZGVzOjEsIGVycjove2l0ZW1fMX0ga2V5Oi4qe3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwQSBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97aXRlbV8xfSB2YWx1ZTouKmJ1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMiwgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi97aXRlbV8xfSB2YWx1ZTouKnt2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgYjpbMHgwMCwweDAwLDB4MDAsMHgwMiwgMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhGRiwgMHgwMSBdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PiB7Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBsZXQgbWFwOwotICAgICAgaWYgKHYpCi0gICAgICAgIG1hcCA9IG5ldyBNYXAoIE9iamVjdC5lbnRyaWVzKHYpICk7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBtYXBTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgaWYgKG1hcCkKLSAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBtYXBTZXJpYWxpemVyLnNlcmlhbGl6ZShtYXAsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbWFwU2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBtYXBTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICAgIGlmIChtYXApIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbWFwU2VyaWFsaXplci5zZXJpYWxpemUobWFwLCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggbWFwU2VyaWFsaXplci5zZXJpYWxpemUobWFwLCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICAgIH0KLSAgICB9KSk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG1hcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBtYXBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBtYXBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgaWYgKHYpCi0gICAgICAgIHYgPSBuZXcgTWFwKCBPYmplY3QuZW50cmllcyh2KSApOwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggbWFwU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIG1hcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBtYXBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgIGU6IHRydWUgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksIGU6IHRydWUgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFt7fV0sICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbbmV3IE1hcCgpXSwgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IE1hcCgpLCAgICAgICAgIGU6IHRydWUgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggbWFwU2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci0KLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9QU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9QU2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGJhNTE0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvUFNlcmlhbGl6ZXItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCB7IHBTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuUFNlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MUVdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCBmcToxLCBiOlsweDFFLCAweDAxXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpuZXcgdC5QKCcnKSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjEsIGI6WzB4MUUsIDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2Om5ldyB0LlAoJycpIH0sCi0KLSAgICAvLyBUT0RPOiBhbmQKLQotICAgIC8vIFRPRE86IG9yCi0KLSAgICAvLyB3aXRoaW4oLi4uW10pCi0gICAgeyB2OiB0LlAud2l0aGluKCdBJywgJ2InLCAnMycpLAotICAgICAgYjogWwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA2LCAuLi5mcm9tKCd3aXRoaW4nKSwKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLy8ge3ZhbHVlc19sZW5ndGh9Ci0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwgLy8gJ0EnCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg2MiwgLy8gJ2InCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgzMywgLy8gJzMnCi0gICAgICBdCi0gICAgfSwKLSAgICAvLyB3aXRoaW4oWy4uLl0pCi0gICAgeyB2OiB0LlAud2l0aGluKFsgJ0InLCAnYScsICcwJyBdKSwKLSAgICAgIGI6IFsKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwNiwgLi4uZnJvbSgnd2l0aGluJyksCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDMsIC8vIHt2YWx1ZXNfbGVuZ3RofQotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDIsIC8vICdCJwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NjEsIC8vICdhJwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MzAsIC8vICcwJwotICAgICAgXQotICAgIH0sCi0KLSAgICAvLyB3aXRob3V0KC4uLltdKQotICAgIHsgdjogdC5QLndpdGhvdXQoJ0EnLCAnYicsICczJyksCi0gICAgICBiOiBbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDcsIC4uLmZyb20oJ3dpdGhvdXQnKSwKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLy8ge3ZhbHVlc19sZW5ndGh9Ci0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwgLy8gJ0EnCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg2MiwgLy8gJ2InCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgzMywgLy8gJzMnCi0gICAgICBdCi0gICAgfSwKLSAgICAvLyB3aXRob3V0KFsuLi5dKQotICAgIHsgdjogdC5QLndpdGhvdXQoWyAnQicsICdhJywgJzAnIF0pLAotICAgICAgYjogWwotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA3LCAuLi5mcm9tKCd3aXRob3V0JyksCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDMsIC8vIHt2YWx1ZXNfbGVuZ3RofQotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDIsIC8vICdCJwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NjEsIC8vICdhJwotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MzAsIC8vICcwJwotICAgICAgXQotICAgIH0sCi0KLSAgICAuLi4oWydiZXR3ZWVuJywnZXEnLCdndCcsJ2d0ZScsJ2luc2lkZScsJ2x0JywnbHRlJywnbmVxJywnbm90Jywnb3V0c2lkZSddLm1hcChvcGVyYXRvciA9PiAoewotICAgICAgdjogdC5QW29wZXJhdG9yXSgnVmFsdUUnLCAnT3RoZVInKSwKLSAgICAgIGI6IFsKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsb3BlcmF0b3IubGVuZ3RoLCAuLi5mcm9tKG9wZXJhdG9yKSwKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8ge3ZhbHVlc19sZW5ndGh9Ci0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNSwgLi4uZnJvbSgnVmFsdUUnKSwKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdPdGhlUicpLAotICAgICAgXQotICAgIH0pKSksCi0KLSAgICAvLyB0ZXN0Ci0gICAgeyB2OiB0LlAudGVzdCgxLCAyLCAzKSwKLSAgICAgIGI6IFsKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwNCwgLi4uZnJvbSgndGVzdCcpLAotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAyLCAvLyB7dmFsdWVzX2xlbmd0aH0KLSAgICAgICAgMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAvLyAxCi0gICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8gMgotICAgICAgXSwKLSAgICB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgICAgICAgICAgZnE6MSwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgICAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICAgICAgICAgIGZxOjAsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICAgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHgxRF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweDFGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgICAgICAgICAgIGZxOjEsIGI6WzB4RTFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgICAgICAgICAgZnE6MSwgYjpbMHgwRV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgICAgICAgICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICAgICAgICAgICAgZnE6MSwgYjpbMHgxRV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgICAgICAgICBmcToxLCBiOlsweDFFLDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgICAgICAgICAgZnE6MSwgYjpbMHgxRSwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgICAgICAgICAgIGZxOjEsIGI6WzB4MUUsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgICAgICAgICBmcToxLCBiOlsweDFFLDB4RkZdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggcFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggcFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggcFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBwU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlRyYXZlcnNlcigpLCBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5QKCksICAgICAgICAgZTogdHJ1ZSAgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbbmV3IHQuUCgpXSwgICAgICAgZTogZmFsc2UgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggcFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvUGF0aFNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvUGF0aFNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhN2MwMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1BhdGhTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyBwYXRoU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IGcgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5QYXRoU2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgwRV0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsIGZxOjEsIGI6WzB4MEUsMHgwMV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdjpudWxsIH0sCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MCwgYjpbMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6bmV3IGcuUGF0aChbXSxbXSkgfSwKLSAgICB7IHY6bnVsbCwgICAgICBmcToxLCBiOlsweDBFLDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MCwgYjpbMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6bmV3IGcuUGF0aChbXSxbXSkgfSwKLQotICAgIHsgdjpuZXcgZy5QYXRoKFsgWydBJywnQiddLCBbJ0MnLCdEJ10gXSwgWyAxLC0xIF0pLAotICAgICAgYjpbCi0gICAgICAgIC8vIHtsYWJlbHN9Ci0gICAgICAgIDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLCAvLyBMaXN0LntsZW5ndGh9Ci0gICAgICAgICAgLy8gWydBJywnQiddCi0gICAgICAgICAgMHgwOSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MSwKLSAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDIsCi0gICAgICAgICAgLy8gWydDJywnRCddCi0gICAgICAgICAgMHgwOSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MywKLSAgICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDQsCi0gICAgICAgIC8vIHtvYmplY3RzfQotICAgICAgICAweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8gTGlzdC57bGVuZ3RofQotICAgICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwKLSAgICAgICAgICAweDAxLDB4MDAsIDB4RkYsMHhGRiwweEZGLDB4RkYsCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MERdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4RTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MUVdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgZnE6MSwgYjpbMHgwRV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgwRSwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDBFLDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MEUsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgwRSwweEZGXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHBhdGhTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHBhdGhTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHBhdGhTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBwYXRoU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHBhdGhTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBwYXRoU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHBhdGhTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggcGF0aFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBwYXRoU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogdW5kZWZpbmVkLCAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoKSwgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuUCgpLCAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbMF0sICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW25ldyBnLlBhdGgoKV0sICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyBnLlBhdGgoKSwgICAgICBlOiB0cnVlICB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCBwYXRoU2VyaWFsaXplci5jYW5CZVVzZWRGb3IodiksIGUgKQotICAgICkpCi0gICk7Ci0KLSAgLy8gQWRkaXRpb25hbCBjb21wbGV4IHBhdGggdGVzdHMgd2l0aCBWZXJ0ZXggYW5kIEVkZ2Ugb2JqZWN0cwotICBkZXNjcmliZSgnY29tcGxleCBWLUUtViBwYXRoIHJvdW5kLXRyaXAnLCAoKSA9PiB7Ci0gICAgZnVuY3Rpb24gYnVpbGRWZXJ0ZXgoaWQsIGxhYmVsLCBwcm9wc09iaikgewotICAgICAgaWYgKCFwcm9wc09iaikgcmV0dXJuIG5ldyBnLlZlcnRleChpZCwgbGFiZWwsIHVuZGVmaW5lZCk7Ci0gICAgICAvLyBidWlsZCBhcnJheSBvZiBWZXJ0ZXhQcm9wZXJ0eSBlbnRyaWVzIGFzIGV4cGVjdGVkIGJ5IFZlcnRleAotICAgICAgY29uc3QgdnBzID0gT2JqZWN0LmtleXMocHJvcHNPYmopLm1hcCgoaywgaWR4KSA9PiBuZXcgZy5WZXJ0ZXhQcm9wZXJ0eShpZHggKyAxLCBrLCBwcm9wc09ialtrXSwgdW5kZWZpbmVkKSk7Ci0gICAgICByZXR1cm4gbmV3IGcuVmVydGV4KGlkLCBsYWJlbCwgdnBzKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBidWlsZEVkZ2UoaWQsIG91dFYsIGxhYmVsLCBpblYsIHByb3BzT2JqKSB7Ci0gICAgICAvLyBFZGdlIGV4cGVjdHMgcHJvcGVydGllcyBhcyBhIG1hcCBvZiBrZXkgLT4gZy5Qcm9wZXJ0eSAodGhlIGNvbnN0cnVjdG9yIGV4dHJhY3RzIC52YWx1ZSkKLSAgICAgIGxldCBwcm9wcyA9IHVuZGVmaW5lZDsKLSAgICAgIGlmIChwcm9wc09iaikgewotICAgICAgICBwcm9wcyA9IHt9OwotICAgICAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMocHJvcHNPYmopKSBwcm9wc1trXSA9IG5ldyBnLlByb3BlcnR5KGssIHByb3BzT2JqW2tdKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgZy5FZGdlKGlkLCBvdXRWLCBsYWJlbCwgaW5WLCBwcm9wcyk7Ci0gICAgfQotCi0gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUvZGVzZXJpYWxpemUgUGF0aCB3aXRoIFYtRS1WIHRoYXQgaW5jbHVkZXMgcHJvcGVydGllcycsICgpID0+IHsKLSAgICAgIGNvbnN0IHZPdXQgPSBidWlsZFZlcnRleCgxLCAncGVyc29uJywgeyBuYW1lOiAnbWFya28nLCBhZ2U6IDI5IH0pOwotICAgICAgY29uc3QgdkluID0gYnVpbGRWZXJ0ZXgoMywgJ3NvZnR3YXJlJywgeyBuYW1lOiAnbG9wJywgbGFuZzogJ2phdmEnIH0pOwotICAgICAgY29uc3QgZSA9IGJ1aWxkRWRnZSg5LCB2T3V0LCAnY3JlYXRlZCcsIHZJbiwgeyB3ZWlnaHQ6IDAuNCB9KTsKLQotICAgICAgY29uc3QgcCA9IG5ldyBnLlBhdGgoW1sgJ2EnIF0sIFsgJ2InIF0sIFsgJ2MnIF1dLCBbIHZPdXQsIGUsIHZJbiBdKTsKLQotICAgICAgLy8gcm91bmQtdHJpcCB3aXRoIG5vbi1mdWxseS1xdWFsaWZpZWQgZm9ybWF0Ci0gICAgICBjb25zdCBidWYgPSBwYXRoU2VyaWFsaXplci5zZXJpYWxpemUocCwgZmFsc2UpOwotICAgICAgY29uc3QgeyB2OiBkZXNlciwgbGVuIH0gPSBwYXRoU2VyaWFsaXplci5kZXNlcmlhbGl6ZShidWYsIGZhbHNlKTsKLQotICAgICAgLy8gc2FuaXR5IG9uIGJ1ZmZlciBjb25zdW1lZAotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxlbiwgYnVmLmxlbmd0aCk7Ci0KLSAgICAgIC8vIGFzc2VydCBsYWJlbHMKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlci5sYWJlbHMubGVuZ3RoLCAzKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlci5sYWJlbHNbMF0ubGVuZ3RoLCAxKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlci5sYWJlbHNbMV0ubGVuZ3RoLCAxKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlci5sYWJlbHNbMl0ubGVuZ3RoLCAxKTsKLQotICAgICAgLy8gYXNzZXJ0IG9iamVjdHMgYW5kIHRoZWlyIHR5cGVzCi0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVzZXIub2JqZWN0cy5sZW5ndGgsIDMpOwotICAgICAgY29uc3QgYSA9IGRlc2VyLm9iamVjdHNbMF07Ci0gICAgICBjb25zdCBiID0gZGVzZXIub2JqZWN0c1sxXTsKLSAgICAgIGNvbnN0IGMgPSBkZXNlci5vYmplY3RzWzJdOwotICAgICAgYXNzZXJ0Lm9rKGEgaW5zdGFuY2VvZiBnLlZlcnRleCk7Ci0gICAgICBhc3NlcnQub2soYiBpbnN0YW5jZW9mIGcuRWRnZSk7Ci0gICAgICBhc3NlcnQub2soYyBpbnN0YW5jZW9mIGcuVmVydGV4KTsKLQotICAgICAgLy8gVmVydGV4IHByb3BlcnRpZXMgc2hvdWxkIGJlIHByZXNlbnQgKFZlcnRleFNlcmlhbGl6ZXIgcHJlc2VydmVzIHRoZW0pCi0gICAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShhLnByb3BlcnRpZXMpKTsKLSAgICAgIGFzc2VydC5vayhhLnByb3BlcnRpZXMubGVuZ3RoID4gMCk7Ci0gICAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShjLnByb3BlcnRpZXMpKTsKLSAgICAgIGFzc2VydC5vayhjLnByb3BlcnRpZXMubGVuZ3RoID4gMCk7Ci0KLSAgICAgIC8vIEVkZ2UgcHJvcGVydGllcyBhcmUgbm90IHNlcmlhbGl6ZWQgaW4gR3JhcGhCaW5hcnkgKEVkZ2VTZXJpYWxpemVyIHdyaXRlcyBudWxsKSwgZXhwZWN0IGVtcHR5IG9iamVjdAotICAgICAgYXNzZXJ0Lm9rKGIucHJvcGVydGllcyk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoT2JqZWN0LmtleXMoYi5wcm9wZXJ0aWVzKS5sZW5ndGgsIDApOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBzZXJpYWxpemUvZGVzZXJpYWxpemUgUGF0aCB3aXRoIFYtRS1WIHdpdGhvdXQgcHJvcGVydGllcycsICgpID0+IHsKLSAgICAgIGNvbnN0IHZPdXQgPSBidWlsZFZlcnRleCgxLCAncGVyc29uJywgdW5kZWZpbmVkKTsKLSAgICAgIGNvbnN0IHZJbiA9IGJ1aWxkVmVydGV4KDMsICdzb2Z0d2FyZScsIHVuZGVmaW5lZCk7Ci0gICAgICBjb25zdCBlID0gYnVpbGRFZGdlKDksIHZPdXQsICdjcmVhdGVkJywgdkluLCB1bmRlZmluZWQpOwotCi0gICAgICBjb25zdCBwID0gbmV3IGcuUGF0aChbWyAnYScgXSwgWyAnYicgXSwgWyAnYycgXV0sIFsgdk91dCwgZSwgdkluIF0pOwotCi0gICAgICAvLyByb3VuZC10cmlwIHdpdGggZnVsbHktcXVhbGlmaWVkIGZvcm1hdAotICAgICAgY29uc3QgZnFCdWYgPSBwYXRoU2VyaWFsaXplci5zZXJpYWxpemUocCwgdHJ1ZSk7Ci0gICAgICBjb25zdCB7IHY6IGRlc2VyLCBsZW4gfSA9IHBhdGhTZXJpYWxpemVyLmRlc2VyaWFsaXplKGZxQnVmLCB0cnVlKTsKLQotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxlbiwgZnFCdWYubGVuZ3RoKTsKLQotICAgICAgLy8gdHlwZXMKLSAgICAgIGNvbnN0IGEgPSBkZXNlci5vYmplY3RzWzBdOwotICAgICAgY29uc3QgYiA9IGRlc2VyLm9iamVjdHNbMV07Ci0gICAgICBjb25zdCBjID0gZGVzZXIub2JqZWN0c1syXTsKLSAgICAgIGFzc2VydC5vayhhIGluc3RhbmNlb2YgZy5WZXJ0ZXgpOwotICAgICAgYXNzZXJ0Lm9rKGIgaW5zdGFuY2VvZiBnLkVkZ2UpOwotICAgICAgYXNzZXJ0Lm9rKGMgaW5zdGFuY2VvZiBnLlZlcnRleCk7Ci0KLSAgICAgIC8vIFZlcnRleCBwcm9wZXJ0aWVzIGRlZmF1bHQgdG8gW10gd2hlbiBudWxsL3VuZGVmaW5lZAotICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkoYS5wcm9wZXJ0aWVzKSk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5wcm9wZXJ0aWVzLmxlbmd0aCwgMCk7Ci0gICAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShjLnByb3BlcnRpZXMpKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjLnByb3BlcnRpZXMubGVuZ3RoLCAwKTsKLQotICAgICAgLy8gRWRnZSBwcm9wZXJ0aWVzIGRlZmF1bHQgdG8ge30gd2hlbiBudWxsL3VuZGVmaW5lZAotICAgICAgYXNzZXJ0Lm9rKGIucHJvcGVydGllcyk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoT2JqZWN0LmtleXMoYi5wcm9wZXJ0aWVzKS5sZW5ndGgsIDApOwotICAgIH0pOwotICB9KTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1Byb3BlcnR5U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9Qcm9wZXJ0eVNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4MTZhNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1Byb3BlcnR5U2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgcHJvcGVydHlTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LlByb3BlcnR5U2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgwRl0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsIGZxOjEsIGI6WzB4MEYsMHgwMV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4RkUsMHgwMSwgMHhGRSwweDAxXSwgYXY6bmV3IGcuUHJvcGVydHkoJycsbnVsbCkgfSwKLSAgICB7IHY6bnVsbCwgICAgICBmcToxLCBiOlsweDBGLDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MCwgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwgMHhGRSwweDAxLCAweEZFLDB4MDFdLCBhdjpuZXcgZy5Qcm9wZXJ0eSgnJyxudWxsKSB9LAotCi0gICAgeyB2Om5ldyBnLlByb3BlcnR5KCdrZXknLCA0MiksCi0gICAgICBiOlsKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMywgLi4uZnJvbSgna2V5JyksCi0gICAgICAgIDB4MDEsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgyQSwKLSAgICAgICAgMHhGRSwweDAxLAotICAgICAgXQotICAgIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MSwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjAsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDAxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDBFXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweEYwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDFGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sIGZxOjEsIGI6WzB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MEYsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgwRiwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDBGLDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MEYsMHhGRl0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBwcm9wZXJ0eVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggcHJvcGVydHlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHByb3BlcnR5U2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHJvcGVydHlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHJvcGVydHlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBwcm9wZXJ0eVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBwcm9wZXJ0eVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBwcm9wZXJ0eVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBwcm9wZXJ0eVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5QKCksICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogWzBdLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbbmV3IGcuUHJvcGVydHkoKV0sIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyBnLlByb3BlcnR5KCksICAgZTogdHJ1ZSAgfSwKLSAgICBdLmZvckVhY2goKHsgdiwgZSB9LCBpKSA9PiBpdCh1dGlscy5jYnVmX3RpdGxlKHtpLHZ9KSwgKCkgPT4KLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCggcHJvcGVydHlTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSkKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1NldFNlcmlhbGl6ZXItdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvU2V0U2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjQxM2YzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvU2V0U2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1yZXF1aXJlKCcuL1NldFNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUnKSh7IElEOiAweDBCLCBuYW1lOiAnU2V0JyB9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvU2V0U2VyaWFsaXplclRlc3RUZW1wbGF0ZS5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvU2V0U2VyaWFsaXplclRlc3RUZW1wbGF0ZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkzZWQzMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1NldFNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgaW9jID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvR3JhcGhCaW5hcnknKTsKLWNvbnN0IGludFNlcmlhbGl6ZXIgPSBpb2MuaW50U2VyaWFsaXplcjsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotbW9kdWxlLmV4cG9ydHMgPSAoeyBJRCwgbmFtZSB9KSA9PiB7Ci0KLWRlc2NyaWJlKGBHcmFwaEJpbmFyeS5TZXRTZXJpYWxpemVyYCwgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFtJRF0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IHNlcmlhbGl6ZXIgPSBpb2Muc2VyaWFsaXplcnNbSURdOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCBiOltJRCwweDAxXSwgICAgICAgICAgICAgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6bmV3IFNldCgpIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjEsIGI6W0lELDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpuZXcgU2V0KCkgfSwKLQotICAgIHsgdjpuZXcgU2V0KCksICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjpuZXcgU2V0KFsyMTQ3NDgzNjQ3XSksICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDEsIDB4MDEsMHgwMCwweDdGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgdjpuZXcgU2V0KFstMSwnQSddKSwgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsIDB4MDEsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLCAweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDQxXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbSUQtMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbSUQrMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHg4OV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgxOV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHg5MF0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCBmcToxLCBiOltJRF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbSUQsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbSUQsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbSUQsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbSUQsMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICBiOlsweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICBiOlsweDgwLDB4MDAsMHgwMCwweDAwXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4gewotICAgIGNhc2VzCi0gICAgICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgICAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgICAgICB9KSk7Ci0KLSAgICBpdC5za2lwKCdzaG91bGQgbm90IGVycm9yIGlmIHNldCBsZW5ndGggaXMgSU5UMzJfTUFYJyk7Ci0KLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHt9LCAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbXSwgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW3VuZGVmaW5lZF0sICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgU2V0KCksICAgICAgICAgICAgIGU6IHRydWUgfSwKLSAgICAgIHsgdjogbmV3IFNldChbMF0pLCAgICAgICAgICBlOiB0cnVlIH0sCi0gICAgICB7IHY6IG5ldyBTZXQoW3VuZGVmaW5lZF0pLCAgZTogdHJ1ZSB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCBzZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSkKLSAgKTsKLQotfSk7Ci0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1Nob3J0U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9TaG9ydFNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYyMTUzNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1Nob3J0U2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgc2hvcnRTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuU2hvcnRTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDI2XSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgyNiwweDAxXSwgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMF0sIGF2OjAgfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCBiOlsweDI2LDB4MDFdIH0sCi0gICAgeyB2Om51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgYjpbMHgwMCwweDAwXSwgYXY6MCB9LAotICAgIHsgdjowLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMF0gfSwKLSAgICB7IHY6MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDFdIH0sCi0gICAgeyB2OjI1NiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMSwweDAwXSB9LAotICAgIHsgdjozMjc2NywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6WzB4N0YsMHhGRl0gfSwKLSAgICB7IHY6LTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweEZGLDB4RkZdIH0sCi0gICAgeyB2Oi0zMjc2OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHg4MCwweDAwXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHg2Ml0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCBiOlsweDI1XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsIGI6WzB4MjddIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCAgIGZxOjEsIGI6WzB4MjZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyNiwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsIGI6WzB4MjYsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcToxLCBiOlsweDI2LDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sICAgZnE6MSwgYjpbMHgyNiwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgZnE6MSwgYjpbMHgyNiwweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sICAgICAgIGI6WzB4MTFdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggc2hvcnRTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHNob3J0U2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBzaG9ydFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHNob3J0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHNob3J0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2hvcnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2hvcnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2hvcnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAge3YsbGVuOmxlbisyfSApOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2hvcnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvU3RyaW5nU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9TdHJpbmdTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYzI1ODkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9TdHJpbmdTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLXJlcXVpcmUoJy4vU3RyaW5nU2VyaWFsaXplclRlc3RUZW1wbGF0ZScpKHsgSUQ6IDB4MDMsIG5hbWU6ICdTdHJpbmcnIH0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9TdHJpbmdTZXJpYWxpemVyVGVzdFRlbXBsYXRlLmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9TdHJpbmdTZXJpYWxpemVyVGVzdFRlbXBsYXRlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmU5NWJlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvU3RyaW5nU2VyaWFsaXplclRlc3RUZW1wbGF0ZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpOwotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBpb2MgPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1tb2R1bGUuZXhwb3J0cyA9ICh7IElELCBuYW1lIH0pID0+IHsKLQotZGVzY3JpYmUoYEdyYXBoQmluYXJ5LiR7bmFtZX1TZXJpYWxpemVyYCwgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFtJRF0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IHNlcmlhbGl6ZXIgPSBpb2Muc2VyaWFsaXplcnNbSURdOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcToxLCAgICAgICBiOltJRCwweDAxXSwgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6JycgfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgICAgICAgYjpbSUQsMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MCwgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OicnIH0sCi0KLSAgICB7IHY6JycsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6J1N1bicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMywgMHg1MywweDc1LDB4NkVdIH0sCi0gICAgeyB2OifOrs67zrnOv8+CJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwQSwgMHhDRSwweEFFLCAweENFLDB4QkIsIDB4Q0UsMHhCOSwgMHhDRSwweEJGLCAweENGLDB4ODJdIH0sCi0KLSAgICAvLyBUT0RPOiBTaG91bGQgd2UgY29tcGxhaW4gb24gd3JvbmcgVVRGLTggZGVzZXJpYWxpemF0aW9uPwotICAgIC8vIEl0IGNvdWxkIGJlIGFkZGl0aW9uYWwgbGF0ZW5jeSBpZiB3ZSBleHBsaWNpdGx5IGNoZWNrIGVudGlyZSBzdHJpbmcgZm9yIGNvcnJlY3QgZW5jb2RpbmcgKGlmIHdlIGF2b2lkIGN1c3RvbSBwYXJzZXIgaW1wbCkuCi0gICAgLy8gQW5kLCBwcm9iYWJseSwgaXQncyBiZXR0ZXIgdG8gcHJvdmlkZSBzb21ldGhpbmcgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvciBhbmQgZmFpbGluZyBlbnRpcmUgcmVzcG9uc2UuCi0gICAgLy8gRm9yIG5vdyBpbnZhbGlkIGJ5dGUgc2VxdWVuY2VzIGFyZSBzdHViYmVkIHdpdGggMHhGRkZEIGFjY29yZGluZyB0byBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmQKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICBmcToxLCAgICAgICBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICBmcTowLCAgICAgICBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgICBmcToxLCAgICAgICBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICAgZnE6MCwgICAgICAgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgIGZxOjEsICAgICAgIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICAgZnE6MCwgICAgICAgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgICBmcTowLCBuYToxLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgZnE6MSwgICAgICAgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgZnE6MSwgICAgICAgYjpbSUQtMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgZnE6MSwgICAgICAgYjpbSUQrMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgZnE6MSwgICAgICAgYjpbMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgZnE6MSwgICAgICAgYjpbMHgxMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICAgZnE6MSwgICAgICAgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCAgICBmcToxLCAgICAgICBiOltJRF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MSwgICAgICAgYjpbSUQsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MCwgbmE6MSwgYjpbMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MSwgICAgICAgYjpbSUQsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MCwgbmE6MSwgYjpbMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MSwgICAgICAgYjpbSUQsMHg4MF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MCwgbmE6MSwgYjpbMHg4MF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MSwgICAgICAgYjpbSUQsMHhGRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICAgZnE6MCwgbmE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICAgICAgICBiOlsweEZGLDB4RkYsMHhGRiwweEZGXSB9LAotICAgIHsgZGVzOjEsIGVycjove2xlbmd0aH0gaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICAgICAgICBiOlsweDgwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0ZXh0X3ZhbHVlfSBsZW5ndGgvLCAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0ZXh0X3ZhbHVlfSBsZW5ndGgvLCAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDIsIDB4NDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0ZXh0X3ZhbHVlfSBsZW5ndGgvLCAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDMsIDB4NDEsMHg0Ml0gfSwKLQotICAgIHsgZGVzOjEsIHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBuYToxLCBiOlsweDAxXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggc2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCBzZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBuYSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSwgbmEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgICAgICAgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgdmFsdWVfZmxhZywgYl0pLCBmYWxzZSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UsIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSwgbmEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUsICBmYWxzZSksIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSwgIHRydWUpLCAge3YsbGVuOmxlbisyfSApOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggc2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgdmFsdWVfZmxhZywgYl0pLCBmYWxzZSwgdHJ1ZSksICB7dixsZW46bGVuKzF9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCBzZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgWwotICAgICAgeyB2OiAnc29tZSBzdHJpbmcnLCAgICBlOiB0cnVlIH0sCi0gICAgICB7IHY6ICcnLCAgICAgICAgICAgICAgIGU6IHRydWUgfSwKLSAgICAgIHsgdjogJ1onLCAgICAgICAgICAgICAgZTogdHJ1ZSB9LAotICAgICAgeyB2OiAn0KPQutGA0LDRl9C90LAnLCAgICAgICAgZTogdHJ1ZSB9LAotICAgICAgeyB2OiB0cnVlLCAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBmYWxzZSwgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBOdW1iZXIuTUFYX1ZBTFVFLCBlOiBmYWxzZSB9LAotICAgICAgeyB2OiA0MiwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAwLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBOdW1iZXIuTUlOX1ZBTFVFLCBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBOYU4sICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiArSW5maW5pdHksICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiAtSW5maW5pdHksICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgLy97IHY6IFN5bWJvbCgnJyksIGU6IGZhbHNlIH0sCi0gICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+IGFzc2VydC5zdHJpY3RFcXVhbCgKLSAgICAgIHNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLAotICAgICAgZSwKLSAgICApKSkKLSAgKTsKLQotfSk7Ci0KLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1RleHRQU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9UZXh0UFNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgyMGY3Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1RleHRQU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgdGV4dFBTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuVGV4dFBTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDI4XSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHgyOCwweDAxXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwXSwgYXY6bmV3IHQuVGV4dFAoJycpIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgyOCwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjpuZXcgdC5UZXh0UCgnJykgfSwKLQotICAgIC8vIFRPRE86IGFuZAotICAgIC8vIFRPRE86IG9yCi0KLSAgICAuLi4oWydjb250YWluaW5nJywnZW5kaW5nV2l0aCcsJ25vdENvbnRhaW5pbmcnLCdub3RFbmRpbmdXaXRoJywnbm90U3RhcnRpbmdXaXRoJywnc3RhcnRpbmdXaXRoJ10ubWFwKG9wZXJhdG9yID0+ICh7Ci0gICAgICB2OiB0LlRleHRQW29wZXJhdG9yXSgnVmFsdUUnLCAnT3RoZVInKSwKLSAgICAgIGI6IFsKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsb3BlcmF0b3IubGVuZ3RoLCAuLi5mcm9tKG9wZXJhdG9yKSwKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMiwgLy8ge3ZhbHVlc19sZW5ndGh9Ci0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwNSwgLi4uZnJvbSgnVmFsdUUnKSwKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdPdGhlUicpLAotICAgICAgXQotICAgIH0pKSksCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MSwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MCwgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjAsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBmcToxLCBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDAxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDI3XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDI5XSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweDgyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sIGZxOjEsIGI6WzB4MjhdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MjgsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgyOCwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDI4LDB4MEZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MjgsMHhGRl0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCB0ZXh0UFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdGV4dFBTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHRleHRQU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGV4dFBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGV4dFBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0ZXh0UFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCB0ZXh0UFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7dixsZW59ICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCB0ZXh0UFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCB0ZXh0UFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbMF0sICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW25ldyB0LlRleHRQKCldLCAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlRleHRQKCksICAgICBlOiB0cnVlICB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCB0ZXh0UFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvVGltZXN0YW1wU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9UaW1lc3RhbXBTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYWIwZTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9UaW1lc3RhbXBTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLXJlcXVpcmUoJy4vRGF0ZVNlcmlhbGl6ZXJUZXN0VGVtcGxhdGUnKSh7IElEOiAweDA1LCBuYW1lOiAnVGltZXN0YW1wJyB9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1RyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplci10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWQ0YmVkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyB0cmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsJyk7Ci1jb25zdCB0cyA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneScpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyJywgKCkgPT4gewotCi0gIGNvbnN0IHR5cGVfY29kZSA9ICBmcm9tKFsweDI5XSk7Ci0gIGNvbnN0IHZhbHVlX2ZsYWcgPSBmcm9tKFsweDAwXSk7Ci0KLSAgY29uc3QgY2FzZXMgPSBbCi0gICAgeyB2OnVuZGVmaW5lZCwgZnE6MSwgYjpbMHgyOSwweDAxXSwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjEsIGI6WzB4MjksMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwXSB9LAotCi0gICAgeyB2Om5ldyB0cy5FbGVtZW50SWRTdHJhdGVneSgpLAotICAgICAgYjpbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4NTQsIC4uLmZyb20oJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5FbGVtZW50SWRTdHJhdGVneScpLAotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDAwLAotICAgICAgXQotICAgIH0sCi0KLSAgICB7IHY6bmV3IHRzLk9wdGlvbnNTdHJhdGVneSh7ICdBJzogMSwgJ0InOiAyIH0pLAotICAgICAgYjpbCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4NTIsIC4uLmZyb20oJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5PcHRpb25zU3RyYXRlZ3knKSwKLSAgICAgICAgMHgwMCwweDAwLDB4MDAsMHgwMiwKLSAgICAgICAgLy8gJ0EnOjEKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAxLCAweDQxLAotICAgICAgICAweDAxLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDEsCi0gICAgICAgIC8vICdCJzoyCi0gICAgICAgIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwgMHg0MiwKLSAgICAgICAgMHgwMSwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLAotICAgICAgXQotICAgIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplci5zZXJpYWxpemUodiwgdHJ1ZSksICBjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pICk7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCB0cmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlRyYXZlcnNlcigpLCAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5QKCksICAgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbZnVuY3Rpb24oKXt9XSwgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogZnVuY3Rpb24oKXt9LCAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0cy5UcmF2ZXJzYWxTdHJhdGVneSgpLCBlOiB0cnVlICB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCB0cmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvVHJhdmVyc2VyU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9UcmF2ZXJzZXJTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNTllM2YuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9UcmF2ZXJzZXJTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyB0cmF2ZXJzZXJTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuVHJhdmVyc2VyU2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgyMV0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgyMSwgMHgwMV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdjpudWxsIH0sCi0gICAgeyB2OnVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAgICAgICAgICBmcTowLCBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4RkUsMHgwMV0sIGF2Om5ldyB0LlRyYXZlcnNlcihudWxsLCAxKSB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgYjpbMHgyMSwgMHgwMV0gfSwKLSAgICB7IHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwgMHhGRSwweDAxXSwgYXY6bmV3IHQuVHJhdmVyc2VyKG51bGwsIDEpIH0sCi0KLSAgICB7IHY6bmV3IHQuVHJhdmVyc2VyKC0xLCAwKSwgICAgICAgICAgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwgMHgwMSwweDAwLDB4RkYsMHhGRiwweEZGLDB4RkZdLCBhdjpuZXcgdC5UcmF2ZXJzZXIoLTEsIDEpIH0sIC8vIGNoZWNrIFRyYXZlcnNlci5jb25zdHJ1Y3RvcigpIHdoZW4gYnVsaz0wIGJlY29tZXMgYnVsaz0xCi0gICAgeyB2Om5ldyB0LlRyYXZlcnNlcignYWJDJywgMiksICAgICAgICAgICAgICAgICBiOlsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsIDB4MDMsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMywgMHg2MSwweDYyLDB4NDNdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgZnE6MSwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgIGZxOjAsIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgIGZxOjEsIGI6WzB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICBmcToxLCBiOlsweDIwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgZnE6MSwgYjpbMHgyMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgIGZxOjEsIGI6WzB4MTJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICBmcToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sICBmcToxLCBiOlsweDIxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgZnE6MSwgYjpbMHgyMSwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgZnE6MSwgYjpbMHgyMSwweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgZnE6MSwgYjpbMHgyMSwweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgZnE6MSwgYjpbMHgyMSwweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97YnVsa30gaXMgbGVzcyB0aGFuIHplcm8vLCAgICAgICBiOlsweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZdIH0sIC8vIFRPRE86IGlzIGl0IGNvcnJlY3QgZXhwZWN0YXRpb24gdGhhdCBidWxrIG11c3QgYmUgPj0gMD8KLSAgICB7IGRlczoxLCBlcnI6L3tidWxrfSBpcyBsZXNzIHRoYW4gemVyby8sICAgICAgIGI6WzB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgXTsKLQotICBkZXNjcmliZSgnI3NlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMKLSAgICAuZmlsdGVyKCh7ZGVzfSkgPT4gIWRlcykKLSAgICAuZm9yRWFjaCgoeyB2LCBmcSwgYiB9LCBpKSA9PiBpdCh1dGlscy5zZXJfdGl0bGUoe2ksdn0pLCAoKSA9PiB7Ci0gICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcEVxdWFsKCB0cmF2ZXJzZXJTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmcSksIGIgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHRyYXZlcnNlclNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdHJhdmVyc2VyU2VyaWFsaXplci5zZXJpYWxpemUodiwgZmFsc2UpLCBjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNkZXNlcmlhbGl6ZScsICgpID0+Ci0gICAgY2FzZXMuZm9yRWFjaCgoeyB2LCBmcSwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKQotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdHJhdmVyc2VyU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRyYXZlcnNlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHRyYXZlcnNlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChhdiAhPT0gdW5kZWZpbmVkKQotICAgICAgICB2ID0gYXY7Ci0gICAgICBjb25zdCBsZW4gPSBiLmxlbmd0aDsKLQotICAgICAgLy8gd2hlbiBmcSBpcyB1bmRlciBjb250cm9sCi0gICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCB0cmF2ZXJzZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxKSwge3YsbGVufSApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggdHJhdmVyc2VyU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHRyYXZlcnNlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UpLCB7dixsZW46bGVuKzB9ICk7Ci0gICAgfSkpCi0gICk7Ci0KLSAgZGVzY3JpYmUoJyNjYW5CZVVzZWRGb3InLCAoKSA9PgotICAgIC8vIG1vc3Qgb2YgdGhlIGNhc2VzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCB2aWEgQW55U2VyaWFsaXplci5zZXJpYWxpemUoKSB0ZXN0cwotICAgIFsKLSAgICAgIHsgdjogbnVsbCwgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksIGU6IHRydWUgIH0sCi0gICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoIHRyYXZlcnNlclNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9VbnNwZWNpZmllZE51bGxTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNmY0OTQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9VbnNwZWNpZmllZE51bGxTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyB1bnNwZWNpZmllZE51bGxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotCi1jb25zdCB7IGZyb20sIGNvbmNhdCB9ID0gQnVmZmVyOwotCi1kZXNjcmliZSgnR3JhcGhCaW5hcnkuVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgICAgICAgYjpbMHhGRSwweDAxXSwgYXY6bnVsbCB9LAotICAgIHsgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOlsweEZFLDB4MDFdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGI6W10gfSwKLQotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBiOlsweEVGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBiOlsweDBFXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBiOlsweDgxXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBiOlsweEZEXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi97dmFsdWVfZmxhZ30gaXMgbWlzc2luZy8sIGI6WzB4RkVdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGI6WzB4RkUsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgYjpbMHhGRSwweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBiOlsweEZFLDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGI6WzB4RkUsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgYjpbMHhGRSwweEZGXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCB1bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZSh2KSwgYiApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgYiwgYXYsIGVyciB9LCBpKSA9PiBpdCh1dGlscy5kZXNfdGl0bGUoe2ksYn0pLCAoKSA9PiB7Ci0gICAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkKLSAgICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdyb25nIGJpbmFyeQotICAgICAgaWYgKGVyciAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiksIHt2LGxlbn0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgZTogdHJ1ZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogdHJ1ZSB9LAotICAgICAgeyB2OiB7fSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IHQuVHJhdmVyc2VyKCksIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtdLCAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbe31dLCAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW25ldyBNYXAoKV0sICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyBNYXAoKSwgICAgICAgICBlOiBmYWxzZSB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCB1bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLmNhbkJlVXNlZEZvcih2KSwgZSApCi0gICAgKSkKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1V1aWRTZXJpYWxpemVyLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1V1aWRTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNjliMmIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9VdWlkU2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgdXVpZFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5Jyk7Ci0KLWNvbnN0IHsgZnJvbSwgY29uY2F0IH0gPSBCdWZmZXI7Ci0KLWRlc2NyaWJlKCdHcmFwaEJpbmFyeS5VdWlkU2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgwQ10pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgICAgICAgIHY6dW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgICAgIGZxOjEsICAgICAgIGI6WzB4MEMsMHgwMV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdjpudWxsIH0sCi0gICAgeyAgICAgICAgdjp1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgICAgZnE6MCwgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMF0sIGF2OicwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnIH0sCi0gICAgeyAgICAgICAgdjpudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgZnE6MSwgICAgICAgYjpbMHgwQywweDAxXSB9LAotICAgIHsgICAgICAgIHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjonMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyB9LAotCi0gICAgeyB2OicwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLCAgICAgICAgICAgYjpbMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMF0gfSwKLSAgICB7IHY6JzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBBMEIwQzBEMEUwRicsICAgICAgICAgICBiOlsweDAwLDB4MDEsMHgwMiwweDAzLCAweDA0LDB4MDUsMHgwNiwweDA3LCAweDA4LDB4MDksMHgwQSwweDBCLCAweDBDLDB4MEQsMHgwRSwweDBGXSB9LAotICAgIHsgdjonQWFCYkNjRGQtRWVGZi0xMTIyLTMzNDQtNTU2Njc3ODg5OTAwJywgICAgICAgICAgIGI6WzB4QUEsMHhCQiwweENDLDB4REQsIDB4RUUsMHhGRiwweDExLDB4MjIsIDB4MzMsMHg0NCwweDU1LDB4NjYsIDB4NzcsMHg4OCwweDk5LDB4MDBdIH0sCi0KLSAgICAvLyBzdHJpbmcgcHJlc2VudGF0aW9uIGZvcm1hdHMKLSAgICB7IHY6JzAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGJywgICAgICAgICAgICAgICBiOlsweDAwLDB4MDEsMHgwMiwweDAzLCAweDA0LDB4MDUsMHgwNiwweDA3LCAweDA4LDB4MDksMHgwQSwweDBCLCAweDBDLDB4MEQsMHgwRSwweDBGXSwgYXY6JzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBBMEIwQzBEMEUwRicgfSwKLSAgICB7IHY6JzAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBBMEIwQzBEMEUwRicsICAgICAgICAgICBiOlsweDAwLDB4MDEsMHgwMiwweDAzLCAweDA0LDB4MDUsMHgwNiwweDA3LCAweDA4LDB4MDksMHgwQSwweDBCLCAweDBDLDB4MEQsMHgwRSwweDBGXSB9LAotICAgIHsgdjonezAwMDEwMjAzLTA0MDUtMDYwNy0wODA5LTBBMEIwQzBEMEUwRn0nLCAgICAgICAgIGI6WzB4MDAsMHgwMSwweDAyLDB4MDMsIDB4MDQsMHgwNSwweDA2LDB4MDcsIDB4MDgsMHgwOSwweDBBLDB4MEIsIDB4MEMsMHgwRCwweDBFLDB4MEZdLCBhdjonMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMEEwQjBDMEQwRTBGJyB9LAotICAgIHsgdjondXJuOnV1aWQ6MDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMEEwQjBDMEQwRTBGJywgIGI6WzB4MDAsMHgwMSwweDAyLDB4MDMsIDB4MDQsMHgwNSwweDA2LDB4MDcsIDB4MDgsMHgwOSwweDBBLDB4MEIsIDB4MEMsMHgwRCwweDBFLDB4MEZdLCBhdjonMDAwMTAyMDMtMDQwNS0wNjA3LTA4MDktMEEwQjBDMEQwRTBGJyB9LAotCi0gICAgLy8gd3Jvbmcgc3RyaW5nIHByZXNlbnRhdGlvbgotICAgIHsgdjonQWFCYkNjRGQtRWVGZi0xMTIyLTMzNDQtNTU2Njc3ODg5OTAwRkZGRicsICAgICAgIGI6WzB4QUEsMHhCQiwweENDLDB4REQsIDB4RUUsMHhGRiwweDExLDB4MjIsIDB4MzMsMHg0NCwweDU1LDB4NjYsIDB4NzcsMHg4OCwweDk5LDB4MDBdLCBhdjonQWFCYkNjRGQtRWVGZi0xMTIyLTMzNDQtNTU2Njc3ODg5OTAwJyB9LAotICAgIHsgdjonR0hJSktMTU4tT1BRUi1TVFVWLVdYWVotIUAjJCVeJiooKV8rJywgICAgICAgICAgIGI6WzB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDBdLCBhdjonMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJyB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgICAgZnE6MSwgICAgICAgYjp1bmRlZmluZWQgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgICBmcTowLCAgICAgICBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjEsICAgICAgIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICAgIGZxOjAsICAgICAgIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICAgIGZxOjEsICAgICAgIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgICBmcTowLCAgICAgICBiOltdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgICAgZnE6MCwgbmE6MSwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgICAgICAgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCAgICAgICBiOlsweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsICAgICAgIGI6WzB4MERdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgICAgZnE6MSwgICAgICAgYjpbMHgwQl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgICBmcToxLCAgICAgICBiOlsweDhDXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dHlwZV9jb2RlfS8sICAgIGZxOjEsICAgICAgIGI6WzB4RkNdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgICBmcToxLCAgICAgICBiOlsweDBDXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsICAgICAgIGI6WzB4MEMsMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcTowLCBuYToxLCBiOlsweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsICAgICAgIGI6WzB4MEMsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcTowLCBuYToxLCBiOlsweDAyXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsICAgICAgIGI6WzB4MEMsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcTowLCBuYToxLCBiOlsweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCAgIGZxOjEsICAgICAgIGI6WzB4MEMsMHhGRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgICBmcTowLCBuYToxLCBiOlsweEZGXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgZnE6MSwgICAgICAgYjpbMHgwQywweDAwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aC8sIGZxOjAsIG5hOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoLywgICAgICAgICAgICAgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgvLCAgICAgICAgICAgICBiOlsweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRV0gfSwKLQotICAgIHsgZGVzOjEsIHY6bnVsbCwgICAgICAgICAgICAgICAgICAgICAgICAgIGZxOjAsIG5hOjEsIGI6WzB4MDFdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdXVpZFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZxKSwgYiApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIGdlbmVyaWMgY2FzZQotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdXVpZFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdXVpZFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIG5hLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dWlkU2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSwgbmEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dWlkU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgICAgICAgICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICB2YWx1ZV9mbGFnLCBiXSksIGZhbHNlLCB0cnVlKSwgIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdXVpZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSwgZmFsc2UsIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykKLSAgICAgICAgdiA9IHYudG9Mb3dlckNhc2UoKTsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGIsIGZxLCBuYSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUsICBmYWxzZSksIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUsICB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICB2YWx1ZV9mbGFnLCBiXSksIGZhbHNlLCB0cnVlKSwgIHt2LGxlbjpsZW4rMX0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgaXQuc2tpcCgnJykKLSAgKTsKLQotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUwMjFkOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci10ZXN0LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7Ci1jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKTsKLWNvbnN0IHsgdmVydGV4UHJvcGVydHlTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LlZlcnRleFByb3BlcnR5U2VyaWFsaXplcicsICgpID0+IHsKLQotICBjb25zdCB0eXBlX2NvZGUgPSAgZnJvbShbMHgxMl0pOwotICBjb25zdCB2YWx1ZV9mbGFnID0gZnJvbShbMHgwMF0pOwotCi0gIGNvbnN0IGNhc2VzID0gWwotICAgIHsgdjp1bmRlZmluZWQsIGZxOjEsIGI6WzB4MTIsMHgwMV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Om51bGwgfSwKLSAgICB7IHY6dW5kZWZpbmVkLCBmcTowLCBiOlsweEZFLDB4MDEsIDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4RkUsMHgwMSwgMHhGRSwweDAxLCAweEZFLDB4MDFdLCBhdjpuZXcgZy5WZXJ0ZXhQcm9wZXJ0eShudWxsLCcnLG51bGwsW10pIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgxMiwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4RkUsMHgwMSwgMHgwMCwweDAwLDB4MDAsMHgwMCwgMHhGRSwweDAxLCAweEZFLDB4MDEsIDB4RkUsMHgwMV0sIGF2Om5ldyBnLlZlcnRleFByb3BlcnR5KG51bGwsJycsbnVsbCxbXSkgfSwKLQotICAgIHsgdjpuZXcgZy5WZXJ0ZXhQcm9wZXJ0eSgnSWQnLCAnTGFiZWwnLCAnVmFsdWUnLCBbXSksCi0gICAgICBiOlsKLSAgICAgICAgMHgwMywweDAwLCAweDAwLDB4MDAsMHgwMCwweDAyLCAuLi5mcm9tKCdJZCcpLAotICAgICAgICAweDAwLDB4MDAsMHgwMCwweDA1LCAuLi5mcm9tKCdMYWJlbCcpLAotICAgICAgICAweDAzLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDUsIC4uLmZyb20oJ1ZhbHVlJyksCi0gICAgICAgIDB4RkUsMHgwMSwKLSAgICAgICAgMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0gICAgICBdCi0gICAgfSwKLQotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOnVuZGVmaW5lZCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcToxLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBtaXNzaW5nLywgICAgICAgZnE6MCwgYjpudWxsIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgZW1wdHkvLCAgICAgICAgIGZxOjEsIGI6W10gfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MCwgYjpbXSB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MDBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MDFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MTFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MTNdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MjFdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4MUZdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt0eXBlX2NvZGV9LywgIGZxOjEsIGI6WzB4RkZdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nLywgZnE6MSwgYjpbMHgxMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgxMiwweDEwXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDEyLDB4MDJdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MTIsMHgwRl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgxMiwweEZGXSB9LAotICBdOwotCi0gIGRlc2NyaWJlKCcjc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcwotICAgIC5maWx0ZXIoKHtkZXN9KSA9PiAhZGVzKQotICAgIC5mb3JFYWNoKCh7IHYsIGZxLCBiIH0sIGkpID0+IGl0KHV0aWxzLnNlcl90aXRsZSh7aSx2fSksICgpID0+IHsKLSAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHZlcnRleFByb3BlcnR5U2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCB2ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIHRydWUpLCAgY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSApOwotICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdmVydGV4UHJvcGVydHlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCBmYWxzZSksIGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSkgKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2Rlc2VyaWFsaXplJywgKCkgPT4KLSAgICBjYXNlcy5mb3JFYWNoKCh7IHYsIGZxLCBiLCBhdiwgZXJyIH0sIGkpID0+IGl0KHV0aWxzLmRlc190aXRsZSh7aSxifSksICgpID0+IHsKLSAgICAgIGlmIChBcnJheS5pc0FycmF5KGIpKQotICAgICAgICBiID0gZnJvbShiKTsKLQotICAgICAgLy8gd3JvbmcgYmluYXJ5Ci0gICAgICBpZiAoZXJyICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpCi0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB2ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB2ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHZlcnRleFByb3BlcnR5U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHsgbWVzc2FnZTogZXJyIH0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGF2ICE9PSB1bmRlZmluZWQpCi0gICAgICAgIHYgPSBhdjsKLSAgICAgIGNvbnN0IGxlbiA9IGIubGVuZ3RoOwotCi0gICAgICAvLyB3aGVuIGZxIGlzIHVuZGVyIGNvbnRyb2wKLSAgICAgIGlmIChmcSAhPT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHZlcnRleFByb3BlcnR5U2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHZlcnRleFByb3BlcnR5U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoW3R5cGVfY29kZSwgdmFsdWVfZmxhZywgYl0pLCB0cnVlKSwgIHt2LGxlbjpsZW4rMn0gKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHZlcnRleFByb3BlcnR5U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjb25jYXQoWyAgICAgICAgICAgICAgICAgICAgICAgYl0pLCBmYWxzZSksIHt2LGxlbjpsZW4rMH0gKTsKLSAgICB9KSkKLSAgKTsKLQotICBkZXNjcmliZSgnI2NhbkJlVXNlZEZvcicsICgpID0+Ci0gICAgLy8gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIHZpYSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIHRlc3RzCi0gICAgWwotICAgICAgeyB2OiBudWxsLCAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5UcmF2ZXJzZXIoKSwgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlAoKSwgICAgICAgICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbMF0sICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFtuZXcgZy5WZXJ0ZXhQcm9wZXJ0eSgpXSwgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IGcuVmVydGV4UHJvcGVydHkoKSwgICBlOiB0cnVlICB9LAotICAgIF0uZm9yRWFjaCgoeyB2LCBlIH0sIGkpID0+IGl0KHV0aWxzLmNidWZfdGl0bGUoe2ksdn0pLCAoKSA9PgotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCB2ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvVmVydGV4U2VyaWFsaXplci10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9WZXJ0ZXhTZXJpYWxpemVyLXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwOTk4N2EuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9WZXJ0ZXhTZXJpYWxpemVyLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KLSAqLwotJ3VzZSBzdHJpY3QnOwotCi1jb25zdCB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTsKLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgeyB2ZXJ0ZXhTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeScpOwotY29uc3QgdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbCcpOwotY29uc3QgZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLQotY29uc3QgeyBmcm9tLCBjb25jYXQgfSA9IEJ1ZmZlcjsKLQotZGVzY3JpYmUoJ0dyYXBoQmluYXJ5LlZlcnRleFNlcmlhbGl6ZXInLCAoKSA9PiB7Ci0KLSAgY29uc3QgdHlwZV9jb2RlID0gIGZyb20oWzB4MTFdKTsKLSAgY29uc3QgdmFsdWVfZmxhZyA9IGZyb20oWzB4MDBdKTsKLQotICBjb25zdCBjYXNlcyA9IFsKLSAgICB7IHY6dW5kZWZpbmVkLCBmcToxLCBiOlsweDExLDB4MDFdLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXY6bnVsbCB9LAotICAgIHsgdjp1bmRlZmluZWQsIGZxOjAsIGI6WzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLCAweEZFLDB4MDFdLCBhdjpuZXcgZy5WZXJ0ZXgoJycsJycsW10pIH0sCi0gICAgeyB2Om51bGwsICAgICAgZnE6MSwgYjpbMHgxMSwweDAxXSB9LAotICAgIHsgdjpudWxsLCAgICAgIGZxOjAsIGI6WzB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLCAweEZFLDB4MDFdLCBhdjpuZXcgZy5WZXJ0ZXgoJycsJycsW10pIH0sCi0KLSAgICB7IHY6bmV3IGcuVmVydGV4KDQyLCAnQScsIC0xKSwKLSAgICAgIGI6WwotICAgICAgICAweDAxLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MkEsIC8vIGlkCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDEsIDB4NDEsIC8vIGxhYmVsCi0gICAgICAgIDB4MDEsMHgwMCwgMHhGRiwweEZGLDB4RkYsMHhGRiAvLyBwcm9wZXJ0aWVzCi0gICAgICBdCi0gICAgfSwKLQotICAgIC8vIHJlYWwgY2FzZSB3aXRoIGlkIG9mIFVVSUQgdHlwZSwgYnV0IEpTIGRvZXMgbm90IGhhdmUgVVVJRCB0eXBlLCBpdCdzIHByZXNlbnRlZCBhcyBhIHN0cmluZyBpbnN0ZWFkCi0gICAgeyBkZXM6MSwKLSAgICAgIHY6bmV3IGcuVmVydGV4KCcyOGYzOGUzZC03NzM5LTRjOTktODI4NC1lYjQzZGIyYTgwZjEnLCAnUGVyc29uJywgW10pLAotICAgICAgYjpbCi0gICAgICAgIDB4MEMsMHgwMCwgMHgyOCwweEYzLDB4OEUsMHgzRCwgMHg3NywweDM5LCAweDRDLDB4OTksIDB4ODIsMHg4NCwgMHhFQiwweDQzLDB4REIsMHgyQSwweDgwLDB4RjEsIC8vIGlkCi0gICAgICAgIDB4MDAsMHgwMCwweDAwLDB4MDYsIC4uLmZyb20oJ1BlcnNvbicpLCAvLyBsYWJlbAotICAgICAgICAweEZFLDB4MDEsIC8vIHByb3BlcnRpZXMKLSAgICAgIF0KLSAgICB9LAotCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjAsIGI6dW5kZWZpbmVkIH0sCi0gICAgeyBkZXM6MSwgZXJyOi9idWZmZXIgaXMgbWlzc2luZy8sICAgICAgIGZxOjEsIGI6bnVsbCB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIG1pc3NpbmcvLCAgICAgICBmcTowLCBiOm51bGwgfSwKLSAgICB7IGRlczoxLCBlcnI6L2J1ZmZlciBpcyBlbXB0eS8sICAgICAgICAgZnE6MSwgYjpbXSB9LAotICAgIHsgZGVzOjEsIGVycjovYnVmZmVyIGlzIGVtcHR5LywgICAgICAgICBmcTowLCBiOltdIH0sCi0KLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgwMV0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgxMF0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHgxMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3R5cGVfY29kZX0vLCAgZnE6MSwgYjpbMHhGRl0gfSwKLQotICAgIHsgZGVzOjEsIGVycjove3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcvLCBmcToxLCBiOlsweDExXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDExLDB4MTBdIH0sCi0gICAgeyBkZXM6MSwgZXJyOi91bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfS8sIGZxOjEsIGI6WzB4MTEsMHgwMl0gfSwKLSAgICB7IGRlczoxLCBlcnI6L3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9LywgZnE6MSwgYjpbMHgxMSwweDBGXSB9LAotICAgIHsgZGVzOjEsIGVycjovdW5leHBlY3RlZCB7dmFsdWVfZmxhZ30vLCBmcToxLCBiOlsweDExLDB4RkZdIH0sCi0gIF07Ci0KLSAgZGVzY3JpYmUoJyNzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzCi0gICAgLmZpbHRlcigoe2Rlc30pID0+ICFkZXMpCi0gICAgLmZvckVhY2goKHsgdiwgZnEsIGIgfSwgaSkgPT4gaXQodXRpbHMuc2VyX3RpdGxlKHtpLHZ9KSwgKCkgPT4gewotICAgICAgYiA9IGZyb20oYik7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbCggdmVydGV4U2VyaWFsaXplci5zZXJpYWxpemUodiwgZnEpLCBiICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgLy8gZ2VuZXJpYyBjYXNlCi0gICAgICBhc3NlcnQuZGVlcEVxdWFsKCB2ZXJ0ZXhTZXJpYWxpemVyLnNlcmlhbGl6ZSh2LCB0cnVlKSwgIGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSkgKTsKLSAgICAgIGFzc2VydC5kZWVwRXF1YWwoIHZlcnRleFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYsIGZhbHNlKSwgY29uY2F0KFsgICAgICAgICAgICAgICAgICAgICAgIGJdKSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjZGVzZXJpYWxpemUnLCAoKSA9PgotICAgIGNhc2VzLmZvckVhY2goKHsgdiwgZnEsIGIsIGF2LCBlcnIgfSwgaSkgPT4gaXQodXRpbHMuZGVzX3RpdGxlKHtpLGJ9KSwgKCkgPT4gewotICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYikpCi0gICAgICAgIGIgPSBmcm9tKGIpOwotCi0gICAgICAvLyB3cm9uZyBiaW5hcnkKLSAgICAgIGlmIChlcnIgIT09IHVuZGVmaW5lZCkgewotICAgICAgICBpZiAoZnEgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHZlcnRleFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYiwgZnEpLCB7IG1lc3NhZ2U6IGVyciB9KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB2ZXJ0ZXhTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbdHlwZV9jb2RlLCB2YWx1ZV9mbGFnLCBiXSksIHRydWUpLCAgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB2ZXJ0ZXhTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwgeyBtZXNzYWdlOiBlcnIgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoYXYgIT09IHVuZGVmaW5lZCkKLSAgICAgICAgdiA9IGF2OwotICAgICAgY29uc3QgbGVuID0gYi5sZW5ndGg7Ci0KLSAgICAgIC8vIHdoZW4gZnEgaXMgdW5kZXIgY29udHJvbAotICAgICAgaWYgKGZxICE9PSB1bmRlZmluZWQpIHsKLSAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCggdmVydGV4U2VyaWFsaXplci5kZXNlcmlhbGl6ZShiLCBmcSksIHt2LGxlbn0gKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBnZW5lcmljIGNhc2UKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoIHZlcnRleFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY29uY2F0KFt0eXBlX2NvZGUsIHZhbHVlX2ZsYWcsIGJdKSwgdHJ1ZSksICB7dixsZW46bGVuKzJ9ICk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKCB2ZXJ0ZXhTZXJpYWxpemVyLmRlc2VyaWFsaXplKGNvbmNhdChbICAgICAgICAgICAgICAgICAgICAgICBiXSksIGZhbHNlKSwge3YsbGVuOmxlbiswfSApOwotICAgIH0pKQotICApOwotCi0gIGRlc2NyaWJlKCcjY2FuQmVVc2VkRm9yJywgKCkgPT4KLSAgICAvLyBtb3N0IG9mIHRoZSBjYXNlcyBhcmUgaW1wbGljaXRseSB0ZXN0ZWQgdmlhIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMKLSAgICBbCi0gICAgICB7IHY6IG51bGwsICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiB1bmRlZmluZWQsICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjoge30sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IG5ldyB0LlRyYXZlcnNlcigpLCBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBuZXcgdC5QKCksICAgICAgICAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogW10sICAgICAgICAgICAgICAgIGU6IGZhbHNlIH0sCi0gICAgICB7IHY6IFswXSwgICAgICAgICAgICAgICBlOiBmYWxzZSB9LAotICAgICAgeyB2OiBbbmV3IGcuVmVydGV4KCldLCAgZTogZmFsc2UgfSwKLSAgICAgIHsgdjogbmV3IGcuVmVydGV4KCksICAgIGU6IHRydWUgIH0sCi0gICAgXS5mb3JFYWNoKCh7IHYsIGUgfSwgaSkgPT4gaXQodXRpbHMuY2J1Zl90aXRsZSh7aSx2fSksICgpID0+Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoIHZlcnRleFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHYpLCBlICkKLSAgICApKQotICApOwotCi19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvdXRpbHMuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L3V0aWxzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjdjZWQ5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvdXRpbHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbwotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7Ci0KLWNvbnN0IHNlcl90aXRsZSA9ICh7IGksIHYgfSkgPT4KLSAgYHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBjYXNlICMke2l9OiAke3V0aWwuaW5zcGVjdCh2LCB7IGRlcHRoOiAxLCBicmVha0xlbmd0aDogSW5maW5pdHkgfSl9YDsKLQotY29uc3QgZGVzX3RpdGxlID0gKHsgaSwgYiB9KSA9PgotICBgc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIGNhc2UgIyR7aX06ICR7YiA/IEJ1ZmZlci5mcm9tKGIpLnRvU3RyaW5nKCdoZXgnKSA6IGJ9YDsKLQotY29uc3QgY2J1Zl90aXRsZSA9ICh7IGksIHYgfSkgPT4KLSAgYHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBjYXNlICMke2l9OiAke3V0aWwuaW5zcGVjdCh2LCB7IGRlcHRoOiAxLCBicmVha0xlbmd0aDogSW5maW5pdHkgfSl9YDsKLQotbW9kdWxlLmV4cG9ydHMgPSB7Ci0gIHNlcl90aXRsZSwKLSAgZGVzX3RpdGxlLAotICBjYnVmX3RpdGxlLAotfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhzb24tdGVzdC5qcyBiL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhzb24tdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc2OTMwNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoc29uLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgZ3JhcGggPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci1jb25zdCB0ID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLmpzJyk7Ci1jb25zdCBncyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vZ3JhcGgtc2VyaWFsaXplci5qcycpOwotY29uc3QgdXRpbHMgPSByZXF1aXJlKCcuLi8uLi9saWIvdXRpbHMnKTsKLWNvbnN0IHsgQ29ubmVjdGl2ZVN0cmF0ZWd5LCBTZWVkU3RyYXRlZ3kgfSA9IHJlcXVpcmUoIi4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneSIpOwotY29uc3QgR3JhcGhTT05SZWFkZXIgPSBncy5HcmFwaFNPTlJlYWRlcjsKLWNvbnN0IEdyYXBoU09OV3JpdGVyID0gZ3MuR3JhcGhTT05Xcml0ZXI7Ci1jb25zdCBQID0gdC5QOwotCi1kZXNjcmliZSgnR3JhcGhTT05SZWFkZXInLCBmdW5jdGlvbiAoKSB7Ci0gIGl0KCdzaG91bGQgcGFyc2UgR3JhcGhTT04gbnVsbCcsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCByZWFkZXIgPSBuZXcgR3JhcGhTT05SZWFkZXIoKTsKLSAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZChudWxsKTsKLSAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCBudWxsKTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgcGFyc2UgR3JhcGhTT04gaW50MzIsIGZsb2F0IGFuZCBkb3VibGUgdG8gTnVtYmVyIGZyb20gR3JhcGhTT04nLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3QgcmVhZGVyID0gbmV3IEdyYXBoU09OUmVhZGVyKCk7Ci0gICAgWwotICAgICAgWyAnZzpJbnQzMicsIDMxIF0sCi0gICAgICBbICdnOkZsb2F0JywgMzEuM10sCi0gICAgICBbICdnOkRvdWJsZScsIDMxLjJdCi0gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZCh7Ci0gICAgICAgICJAdHlwZSI6IGl0ZW1bMF0sCi0gICAgICAgICJAdmFsdWUiOiBpdGVtWzFdCi0gICAgICB9KTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LCAnbnVtYmVyJyk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBpdGVtWzFdKTsKLSAgICB9KTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgcGFyc2UgR3JhcGhTT04gTmFOIGZyb20gR3JhcGhTT04nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCByZWFkZXIgPSBuZXcgR3JhcGhTT05SZWFkZXIoKTsKLSAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVhZCh7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIjogImc6RG91YmxlIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIjogIk5hTiIKLSAgICAgICAgICAgICAgfSk7Ci0gICAgICBhc3NlcnQub2soaXNOYU4ocmVzdWx0KSk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHBhcnNlIEdyYXBoU09OIC1JbmZpbml0eSBmcm9tIEdyYXBoU09OJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEdyYXBoU09OUmVhZGVyKCk7Ci0gICAgICB2YXIgcmVzdWx0ID0gcmVhZGVyLnJlYWQoewotICAgICAgICAgICAgICAgICJAdHlwZSI6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSI6ICItSW5maW5pdHkiCi0gICAgICAgICAgICAgIH0pOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgcGFyc2UgR3JhcGhTT04gSW5maW5pdHkgZnJvbSBHcmFwaFNPTicsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBHcmFwaFNPTlJlYWRlcigpOwotICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkKHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiOiAiSW5maW5pdHkiCi0gICAgICAgICAgICAgIH0pOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgcGFyc2UgQnVsa1NldCcsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3Qgb2JqID0geyJAdHlwZSI6ICJnOkJ1bGtTZXQiLCAiQHZhbHVlIjogWyJtYXJrbyIsIHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAxfSwgImpvc2giLCB7IkB0eXBlIjogImc6SW50NjQiLCAiQHZhbHVlIjogM31dfTsKLSAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBHcmFwaFNPTlJlYWRlcigpOwotICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZGVyLnJlYWQob2JqKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCA0KTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LCBbIm1hcmtvIiwgImpvc2giLCAiam9zaCIsICJqb3NoIl0pOwotICB9KTsKLSAgaXQoJ3Nob3VsZCBwYXJzZSBEYXRlJywgZnVuY3Rpb24oKSB7Ci0gICAgY29uc3Qgb2JqID0geyAiQHR5cGUiIDogImc6RGF0ZSIsICJAdmFsdWUiIDogMTQ4MTc1MDA3NjI5NSB9OwotICAgIGNvbnN0IHJlYWRlciA9IG5ldyBHcmFwaFNPTlJlYWRlcigpOwotICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkKG9iaik7Ci0gICAgYXNzZXJ0Lm9rKHJlc3VsdCBpbnN0YW5jZW9mIERhdGUpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCBwYXJzZSB2ZXJ0aWNlcyBmcm9tIEdyYXBoU09OJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IG9iaiA9IHsKLSAgICAgICJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjoicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiOnsibmFtZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSI6Im1hcmtvIiwibGFiZWwiOiJuYW1lIn19XSwiYWdlIjpbewotICAgICAgICAgICAgIkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjF9LAotICAgICAgICAgICAgICAidmFsdWUiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoyOX0sImxhYmVsIjoiYWdlIn19XX19fQotICAgIGNvbnN0IHJlYWRlciA9IG5ldyBHcmFwaFNPTlJlYWRlcihvYmopOwotICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkKG9iaik7Ci0gICAgYXNzZXJ0Lm9rKHJlc3VsdCBpbnN0YW5jZW9mIGdyYXBoLlZlcnRleCk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sYWJlbCwgJ3BlcnNvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcmVzdWx0LmlkLCAnbnVtYmVyJyk7Ci0gICAgYXNzZXJ0Lm9rKHJlc3VsdC5wcm9wZXJ0aWVzKTsKLSAgICBhc3NlcnQub2socmVzdWx0LnByb3BlcnRpZXNbMF0pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucHJvcGVydGllc1swXS5rZXksICduYW1lJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5wcm9wZXJ0aWVzWzBdLnZhbHVlLCAnbWFya28nKTsKLSAgICBhc3NlcnQub2socmVzdWx0LnByb3BlcnRpZXNbMV0pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucHJvcGVydGllc1sxXS5rZXksICdhZ2UnKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnByb3BlcnRpZXNbMV0udmFsdWUsIDI5KTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgcGFyc2UgcGF0aHMgZnJvbSBHcmFwaFNPTicsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCBvYmogPSB7IkB0eXBlIjoiZzpQYXRoIiwiQHZhbHVlIjp7ImxhYmVscyI6W1siYSJdLFsiYiIsImMiXSxbXV0sIm9iamVjdHMiOlsKLSAgICAgIHsKLSAgICAgICAgIkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOiJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyI6eyJuYW1lIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjowfSwKLSAgICAgICAgICAidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9fV0sImFnZSI6W3sKLSAgICAgICAgICAgICAgIkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjF9LAotICAgICAgICAgICAgICAidmFsdWUiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoyOX0sImxhYmVsIjoiYWdlIn19XX19fSwKLSAgICAgIHsKLSAgICAgICAgIkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjozfSwibGFiZWwiOiJzb2Z0d2FyZSIsCi0gICAgICAgICJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjR9LAotICAgICAgICAgICJ2YWx1ZSI6ImxvcCIsImxhYmVsIjoibmFtZSJ9fV0sCi0gICAgICAgICAgImxhbmciOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjV9LAotICAgICAgICAgICAgInZhbHVlIjoiamF2YSIsImxhYmVsIjoibGFuZyJ9fV19fX0sCi0gICAgICAibG9wIl19fTsKLSAgICBjb25zdCByZWFkZXIgPSBuZXcgR3JhcGhTT05SZWFkZXIob2JqKTsKLSAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZChvYmopOwotICAgIGFzc2VydC5vayhyZXN1bHQpOwotICAgIGFzc2VydC5vayhyZXN1bHQub2JqZWN0cyk7Ci0gICAgYXNzZXJ0Lm9rKHJlc3VsdC5sYWJlbHMpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQub2JqZWN0c1syXSwgJ2xvcCcpOwotICAgIGNvbnN0IGEgPSByZXN1bHQub2JqZWN0c1swXTsKLSAgICBjb25zdCBiYyA9IHJlc3VsdC5vYmplY3RzWzFdOwotICAgIGFzc2VydC5vayhhIGluc3RhbmNlb2YgZ3JhcGguVmVydGV4KTsKLSAgICBhc3NlcnQub2soYmMgaW5zdGFuY2VvZiBncmFwaC5WZXJ0ZXgpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChhLmxhYmVsLCAncGVyc29uJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJjLmxhYmVsLCAnc29mdHdhcmUnKTsKLSAgICBhc3NlcnQub2soYS5wcm9wZXJ0aWVzKTsKLSAgICBhc3NlcnQub2soYS5wcm9wZXJ0aWVzWzBdKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5wcm9wZXJ0aWVzWzBdLmtleSwgJ25hbWUnKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5wcm9wZXJ0aWVzWzBdLnZhbHVlLCAnbWFya28nKTsKLSAgICBhc3NlcnQub2soYS5wcm9wZXJ0aWVzWzFdKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5wcm9wZXJ0aWVzWzFdLmtleSwgJ2FnZScpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChhLnByb3BlcnRpZXNbMV0udmFsdWUsIDI5KTsKLSAgICBhc3NlcnQub2soYmMucHJvcGVydGllcyk7Ci0gICAgYXNzZXJ0Lm9rKGJjLnByb3BlcnRpZXNbMF0pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYy5wcm9wZXJ0aWVzWzBdLmtleSwgJ25hbWUnKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmMucHJvcGVydGllc1swXS52YWx1ZSwgJ2xvcCcpOwotICAgIGFzc2VydC5vayhiYy5wcm9wZXJ0aWVzWzFdKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmMucHJvcGVydGllc1sxXS5rZXksICdsYW5nJyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJjLnByb3BlcnRpZXNbMV0udmFsdWUsICdqYXZhJyk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHBhcnNlIHBhdGhzIGZyb20gR3JhcGhTT04zIHdpdGhvdXQgcHJvcGVydGllcycsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCBvYmogPSB7Ci0gICAgICAiQHR5cGUiIDogImc6UGF0aCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImxhYmVscyIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6U2V0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlNldCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgXQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpTZXQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbIF0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfSwKLSAgICAgICAgIm9iamVjdHMiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKLSAgICAgICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogInBlcnNvbiIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0sICJsb3AiIF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0gICAgY29uc3QgcmVhZGVyID0gbmV3IEdyYXBoU09OUmVhZGVyKG9iaik7Ci0gICAgY29uc3QgcmVzdWx0ID0gcmVhZGVyLnJlYWQob2JqKTsKLSAgICBhc3NlcnQub2socmVzdWx0KTsKLSAgICBhc3NlcnQub2socmVzdWx0Lm9iamVjdHMpOwotICAgIGFzc2VydC5vayhyZXN1bHQubGFiZWxzKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lm9iamVjdHNbMl0sICdsb3AnKTsKLSAgICBjb25zdCBhID0gcmVzdWx0Lm9iamVjdHNbMF07Ci0gICAgY29uc3QgYmMgPSByZXN1bHQub2JqZWN0c1sxXTsKLSAgICBhc3NlcnQub2soYSBpbnN0YW5jZW9mIGdyYXBoLlZlcnRleCk7Ci0gICAgYXNzZXJ0Lm9rKGJjIGluc3RhbmNlb2YgZ3JhcGguVmVydGV4KTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5sYWJlbCwgJ3BlcnNvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYy5sYWJlbCwgJ3NvZnR3YXJlJyk7Ci0gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChhLnByb3BlcnRpZXMsIFtdKTsKLSAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGJjLnByb3BlcnRpZXMsIFtdKTsKLSAgfSk7Ci0KLSAgaXQoJ3Nob3VsZCBkZXNlcmlhbGl6ZSB2ZXJ0aWNlcyB3aXRob3V0IHByb3BlcnRpZXMgdG8gZW1wdHkgYXJyYXknLCBmdW5jdGlvbigpIHsKLSAgICBjb25zdCBvYmogPSB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mn0sImxhYmVsIjoicGVyc29uIn19OwotICAgIGNvbnN0IHJlYWRlciA9IG5ldyBHcmFwaFNPTlJlYWRlcigpOwotICAgIGNvbnN0IHZlcnRleCA9IHJlYWRlci5yZWFkKG9iaik7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcnRleC5jb25zdHJ1Y3Rvci5uYW1lLCAnVmVydGV4Jyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcnRleC5sYWJlbCwgJ3BlcnNvbicpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2ZXJ0ZXguaWQsIDIpOwotICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodmVydGV4LnByb3BlcnRpZXMsIFtdKTsKLSAgfSk7Ci0KLSAgaXQoJ3Nob3VsZCBkZXNlcmlhbGl6ZSBlZGdlcyB3aXRob3V0IHByb3BlcnRpZXMgdG8gZW1wdHkgYXJyYXknLCBmdW5jdGlvbigpIHsKLSAgICBjb25zdCBvYmogPSB7IkB0eXBlIjoiZzpFZGdlIiwgIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjE4fSwibGFiZWwiOiJrbm93cyIsImluViI6ImEiLCJvdXRWIjoiYiIsImluVkxhYmVsIjoieExhYiJ9fTsKLSAgICBjb25zdCByZWFkZXIgPSBuZXcgR3JhcGhTT05SZWFkZXIoKTsKLSAgICBjb25zdCBlZGdlID0gcmVhZGVyLnJlYWQob2JqKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZWRnZS5jb25zdHJ1Y3Rvci5uYW1lLCAnRWRnZScpOwotICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZWRnZS5wcm9wZXJ0aWVzLCBbXSk7Ci0gIH0pOwotCi0gIGl0KCdzaG91bGQgZGVzZXJpYWxpemUgdmVydGV4IHByb3BlcnRpZXMgd2l0aG91dCBtZXRhLXByb3BlcnRpZXMgdG8gZW1wdHkgYXJyYXknLCBmdW5jdGlvbigpIHsKLSAgICBjb25zdCBvYmogPSB7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsICJAdmFsdWUiOnsiaWQiOiJhbklkIiwibGFiZWwiOiJhS2V5IiwidmFsdWUiOnRydWUsInZlcnRleCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjl9fX07Ci0gICAgY29uc3QgcmVhZGVyID0gbmV3IEdyYXBoU09OUmVhZGVyKCk7Ci0gICAgY29uc3QgdnAgPSByZWFkZXIucmVhZChvYmopOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh2cC5jb25zdHJ1Y3Rvci5uYW1lLCAnVmVydGV4UHJvcGVydHknKTsKLSAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZwLnByb3BlcnRpZXMsIFtdKTsKLSAgfSk7Ci19KTsKLWRlc2NyaWJlKCdHcmFwaFNPTldyaXRlcicsIGZ1bmN0aW9uICgpIHsKLSAgaXQoJ3Nob3VsZCB3cml0ZSBudW1iZXJzJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IHdyaXRlciA9IG5ldyBHcmFwaFNPTldyaXRlcigpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoMiksICcyJyk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHdyaXRlIE5hTicsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCB3cml0ZXIgPSBuZXcgR3JhcGhTT05Xcml0ZXIoKTsKLSAgICBjb25zdCBleHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHsgIkB0eXBlIiA6ICJnOkRvdWJsZSIsICJAdmFsdWUiIDogIk5hTiIgfSk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdyaXRlci53cml0ZShOYU4pLCBleHBlY3RlZCk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHdyaXRlIEluZmluaXR5JywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IHdyaXRlciA9IG5ldyBHcmFwaFNPTldyaXRlcigpOwotICAgIGNvbnN0IGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoeyAiQHR5cGUiIDogImc6RG91YmxlIiwgIkB2YWx1ZSIgOiAiSW5maW5pdHkiIH0pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSwgZXhwZWN0ZWQpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCB3cml0ZSAtSW5maW5pdHknLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh7ICJAdHlwZSIgOiAiZzpEb3VibGUiLCAiQHZhbHVlIiA6ICItSW5maW5pdHkiIH0pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSwgZXhwZWN0ZWQpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCB3cml0ZSBEYXRlIChhcyBPZmZzZXREYXRlVGltZScsIGZ1bmN0aW9uKCkgewotICAgIGNvbnN0IHdyaXRlciA9IG5ldyBHcmFwaFNPTldyaXRlcigpOwotICAgIGNvbnN0IGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoeyAiQHR5cGUiIDogImd4Ok9mZnNldERhdGVUaW1lIiwgIkB2YWx1ZSIgOiAiMjAxNi0xMi0xNFQyMToxNDozNi4yOTVaIiB9KTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwod3JpdGVyLndyaXRlKG5ldyBEYXRlKDE0ODE3NTAwNzYyOTUpKSwgZXhwZWN0ZWQpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCB3cml0ZSBib29sZWFuIHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCB3cml0ZXIgPSBuZXcgR3JhcGhTT05Xcml0ZXIoKTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwod3JpdGVyLndyaXRlKHRydWUpLCAndHJ1ZScpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoZmFsc2UpLCAnZmFsc2UnKTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgd3JpdGUgbGlzdCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh7IkB0eXBlIjogImc6TGlzdCIsICJAdmFsdWUiOiBbIm1hcmtvIl19KTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwod3JpdGVyLndyaXRlKFsibWFya28iXSksIGV4cGVjdGVkKTsKLSAgfSk7Ci0gIGl0KCdzaG91bGQgd3JpdGUgZW51bSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdyaXRlci53cml0ZSh0LmNhcmRpbmFsaXR5LnNldCksICd7IkB0eXBlIjoiZzpDYXJkaW5hbGl0eSIsIkB2YWx1ZSI6InNldCJ9Jyk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHdyaXRlIFAnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh7IkB0eXBlIjoiZzpQIiwiQHZhbHVlIjp7InByZWRpY2F0ZSI6ImFuZCIsInZhbHVlIjpbCi0gICAgICB7IkB0eXBlIjoiZzpQIiwiQHZhbHVlIjp7InByZWRpY2F0ZSI6Im9yIiwidmFsdWUiOlt7IkB0eXBlIjoiZzpQIiwiQHZhbHVlIjp7InByZWRpY2F0ZSI6Imx0IiwidmFsdWUiOiJiIn19LAotICAgICAgICB7IkB0eXBlIjoiZzpQIiwiQHZhbHVlIjp7InByZWRpY2F0ZSI6Imd0IiwidmFsdWUiOiJjIn19XX19LAotICAgICAgeyJAdHlwZSI6Imc6UCIsIkB2YWx1ZSI6eyJwcmVkaWNhdGUiOiJuZXEiLCJ2YWx1ZSI6ImQifX1dfX0pOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoUC5sdCgiYiIpLm9yKFAuZ3QoImMiKSkuYW5kKFAubmVxKCJkIikpKSwgZXhwZWN0ZWQpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCB3cml0ZSBQLndpdGhpbiBzaW5nbGUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh7IkB0eXBlIjogImc6UCIsICJAdmFsdWUiOiB7InByZWRpY2F0ZSI6ICJ3aXRoaW4iLCAidmFsdWUiOiB7IkB0eXBlIjogImc6TGlzdCIsICJAdmFsdWUiOiBbICJtYXJrbyIgXX19fSk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdyaXRlci53cml0ZShQLndpdGhpbihbIm1hcmtvIl0pKSwgZXhwZWN0ZWQpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoUC53aXRoaW4oIm1hcmtvIikpLCBleHBlY3RlZCk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHdyaXRlIFAud2l0aGluIG11bHRpcGxlJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IHdyaXRlciA9IG5ldyBHcmFwaFNPTldyaXRlcigpOwotICAgIGNvbnN0IGV4cGVjdGVkID0gSlNPTi5zdHJpbmdpZnkoeyJAdHlwZSI6ICJnOlAiLCAiQHZhbHVlIjogeyJwcmVkaWNhdGUiOiAid2l0aGluIiwgInZhbHVlIjogeyJAdHlwZSI6ICJnOkxpc3QiLCAiQHZhbHVlIjogWyAibWFya28iLCAiam9zaCJdfX19KTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwod3JpdGVyLndyaXRlKFAud2l0aGluKFsibWFya28iLCJqb3NoIl0pKSwgZXhwZWN0ZWQpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoUC53aXRoaW4oIm1hcmtvIiwiam9zaCIpKSwgZXhwZWN0ZWQpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCB3cml0ZSAxLWFyZyBsYW1iZGEgdmFsdWVzJywgZnVuY3Rpb24gKCkgewotICAgIGNvbnN0IHdyaXRlciA9IG5ldyBHcmFwaFNPTldyaXRlcigpOwotICAgIGFzc2VydC5zdHJpY3RFcXVhbCh3cml0ZXIud3JpdGUoKCkgPT4gJ2l0LmdldCgpJyksCi0gICAgICAgICd7IkB0eXBlIjoiZzpMYW1iZGEiLCJAdmFsdWUiOnsiYXJndW1lbnRzIjotMSwibGFuZ3VhZ2UiOiJncmVtbGluLWdyb292eSIsInNjcmlwdCI6Iml0LmdldCgpIn19Jyk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdyaXRlci53cml0ZSgoKSA9PiAneCAtPiB4LmdldCgpJyksCi0gICAgICAgICd7IkB0eXBlIjoiZzpMYW1iZGEiLCJAdmFsdWUiOnsiYXJndW1lbnRzIjoxLCJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5Iiwic2NyaXB0IjoieCAtPiB4LmdldCgpIn19Jyk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHdyaXRlIDItYXJnIGxhbWJkYSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdyaXRlci53cml0ZSgoKSA9PiAnKHgseSkgLT4geC5nZXQoKSArIHknKSwKLSAgICAgICAgJ3siQHR5cGUiOiJnOkxhbWJkYSIsIkB2YWx1ZSI6eyJhcmd1bWVudHMiOjIsImxhbmd1YWdlIjoiZ3JlbWxpbi1ncm9vdnkiLCJzY3JpcHQiOiIoeCx5KSAtPiB4LmdldCgpICsgeSJ9fScpOwotICB9KTsKLSAgaXQoJ3Nob3VsZCB3cml0ZSBDbGFzcyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoU09OV3JpdGVyKCk7Ci0gICAgY29uc3QgZXhwZWN0ZWQgPSBKU09OLnN0cmluZ2lmeSh7IkB0eXBlIjogImc6Q2xhc3MiLCAiQHZhbHVlIjogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5Db25uZWN0aXZlU3RyYXRlZ3kifSk7Ci0gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHdyaXRlci53cml0ZShDb25uZWN0aXZlU3RyYXRlZ3kpLCBleHBlY3RlZCk7Ci0gIH0pOwotICBpdCgnc2hvdWxkIHdyaXRlIFRyYXZlcnNhbFN0cmF0ZWd5IHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICBjb25zdCB3cml0ZXIgPSBuZXcgR3JhcGhTT05Xcml0ZXIoKTsKLSAgICBjb25zdCBleHBlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHsiQHR5cGUiOiAiZzpTZWVkU3RyYXRlZ3kiLCAiQHZhbHVlIjogeyJmcWNuIjogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TZWVkU3RyYXRlZ3kiLCAiY29uZiI6IHsic2VlZCI6MTAwfX19KTsKLSAgICBhc3NlcnQuc3RyaWN0RXF1YWwod3JpdGVyLndyaXRlKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDEwMH0pKSwgZXhwZWN0ZWQpOwotICB9KTsKLX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvcmVzdWx0LXNldC10ZXN0LmpzIGIvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9yZXN1bHQtc2V0LXRlc3QuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmOTYwMTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9yZXN1bHQtc2V0LXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCi0gKi8KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBSZXN1bHRTZXQgPSByZXF1aXJlKCcuLi8uLi9saWIvZHJpdmVyL3Jlc3VsdC1zZXQnKTsKLQotZGVzY3JpYmUoJ1Jlc3VsdFNldCcsIGZ1bmN0aW9uICgpIHsKLSAgZGVzY3JpYmUoJyN0b0FycmF5KCknLCAoKSA9PiB7Ci0gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gYXJyYXkgb2YgaXRlbXMnLCAoKSA9PiB7Ci0gICAgICBjb25zdCBpdGVtcyA9IFsnYScsICdiJ107Ci0gICAgICBjb25zdCByZXN1bHQgPSBuZXcgUmVzdWx0U2V0KGl0ZW1zKTsKLSAgICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KHJlc3VsdC50b0FycmF5KCkpKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LnRvQXJyYXkoKSwgaXRlbXMpOwotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgnI2xlbmd0aCcsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVtcycsICgpID0+IHsKLSAgICAgIGNvbnN0IGl0ZW1zID0gWydhJywgJ2InLCAxLCAwXTsKLSAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXN1bHRTZXQoaXRlbXMpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIGl0ZW1zLmxlbmd0aCk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjZmlyc3QoKScsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZmlyc3QgaXRlbSB3aGVuIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSB0aGFuIG9uZSBpdGVtJywgKCkgPT4gewotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBSZXN1bHRTZXQoWydhJywgJ2InXSkuZmlyc3QoKSwgJ2EnKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChuZXcgUmVzdWx0U2V0KFsneiddKS5maXJzdCgpLCAneicpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIHRoZXJlIGFyZSBubyBpdGVtcycsICgpID0+IHsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChuZXcgUmVzdWx0U2V0KFtdKS5maXJzdCgpLCBudWxsKTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJyNbU3ltYm9sLml0ZXJhdG9yXSgpJywgKCkgPT4gewotICAgIGl0KCdzaG91bGQgc3VwcG9ydCBiZSBpdGVyYWJsZScsICgpID0+IHsKLSAgICAgIGNvbnN0IGl0ZW1zID0gWzEsIDIsIDNdOwotICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFJlc3VsdFNldChpdGVtcyk7Ci0gICAgICBjb25zdCBvYnRhaW5lZCA9IFtdOwotICAgICAgZm9yIChsZXQgaXRlbSBvZiByZXN1bHQpIHsKLSAgICAgICAgb2J0YWluZWQucHVzaChpdGVtKTsKLSAgICAgIH0KLQotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChvYnRhaW5lZCwgaXRlbXMpOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChBcnJheS5mcm9tKHJlc3VsdCksIGl0ZW1zKTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJyNbdXRpbC5pbnNwZWN0LmN1c3RvbV0oKScsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgQXJyYXkgcmVwcmVzZW50YXRpb24nLCAoKSA9PiB7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG5ldyBSZXN1bHRTZXQoWzEsIDIsIDNdKS5faXRlbXMsIFsxLCAyLCAzXSk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjYXR0cmlidXRlcycsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gYW4gZW1wdHkgTWFwIHdoZW4gbm90IGRlZmluZWQnLCAoKSA9PiB7Ci0gICAgICBjb25zdCBycyA9IG5ldyBSZXN1bHRTZXQoW10pOwotICAgICAgYXNzZXJ0Lm9rKHJzLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBNYXApOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJzLmF0dHJpYnV0ZXMuc2l6ZSwgMCk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgYXR0cmlidXRlcyB3aGVuIGRlZmluZWQnLCAoKSA9PiB7Ci0gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gbmV3IE1hcChbCi0gICAgICAgIFsnYScsIDFdLAotICAgICAgICBbJ2InLCAxXSwKLSAgICAgIF0pOwotICAgICAgY29uc3QgcnMgPSBuZXcgUmVzdWx0U2V0KFtdLCBhdHRyaWJ1dGVzKTsKLSAgICAgIGFzc2VydC5vayhycy5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTWFwKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChycy5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKTsKLSAgICB9KTsKLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvc3RydWN0dXJlLXR5cGVzLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3N0cnVjdHVyZS10eXBlcy10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTk3MjUxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvc3RydWN0dXJlLXR5cGVzLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IHsgYXNzZXJ0IH0gPSByZXF1aXJlKCdjaGFpJyk7Ci1jb25zdCB7IFZlcnRleFByb3BlcnR5LCBQcm9wZXJ0eSwgVmVydGV4LCBFZGdlLCBQYXRoIH0gPSByZXF1aXJlKCcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoJyk7Ci0KLWRlc2NyaWJlKCdFZGdlJywgKCkgPT4gewotICBkZXNjcmliZSgnI3RvU3RyaW5nKCknLCAoKSA9PiB7Ci0gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGVtcHR5IG91dFYgYW5kIGluVicsICgpID0+IHsKLSAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgRWRnZSgnMTIzJywgbnVsbCwgJ2xhYmVsMScsIHVuZGVmaW5lZCwgbnVsbCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZWxlbWVudC50b1N0cmluZygpLCBgZVsxMjNdWz8tbGFiZWwxLT4/XWApOwotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgncHJvcGVydGllcycsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gZW1wdHkgYXJyYXkgd2hlbiBub3QgcHJvdmlkZWQnLCAoKSA9PiB7Ci0gICAgICBjb25zdCBlZGdlID0gbmV3IEVkZ2UoJzEyMycsIG5ldyBWZXJ0ZXgoMSksICdrbm93cycsIG5ldyBWZXJ0ZXgoMikpOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChlZGdlLnByb3BlcnRpZXMsIFtdKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byBlbXB0eSBhcnJheSB3aGVuIHVuZGVmaW5lZCcsICgpID0+IHsKLSAgICAgIGNvbnN0IGVkZ2UgPSBuZXcgRWRnZSgnMTIzJywgbmV3IFZlcnRleCgxKSwgJ2tub3dzJywgbmV3IFZlcnRleCgyKSwgdW5kZWZpbmVkKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZWRnZS5wcm9wZXJ0aWVzLCBbXSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7Ci0KLWRlc2NyaWJlKCdWZXJ0ZXgnLCAoKSA9PiB7Ci0gIGRlc2NyaWJlKCcjdG9TdHJpbmcoKScsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGJhc2VkIG9uIHRoZSBpZCcsICgpID0+IHsKLSAgICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgVmVydGV4KC0yMDAsICdsYWJlbDEnLCBudWxsKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbGVtZW50LnRvU3RyaW5nKCksIGB2Wy0yMDBdYCk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCdwcm9wZXJ0aWVzJywgKCkgPT4gewotICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byBlbXB0eSBhcnJheSB3aGVuIG5vdCBwcm92aWRlZCcsICgpID0+IHsKLSAgICAgIGNvbnN0IHZlcnRleCA9IG5ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicpOwotICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh2ZXJ0ZXgucHJvcGVydGllcywgW10pOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGVtcHR5IGFycmF5IHdoZW4gdW5kZWZpbmVkJywgKCkgPT4gewotICAgICAgY29uc3QgdmVydGV4ID0gbmV3IFZlcnRleCgxLCAncGVyc29uJywgdW5kZWZpbmVkKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodmVydGV4LnByb3BlcnRpZXMsIFtdKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byBlbXB0eSBhcnJheSB3aGVuIG51bGwnLCAoKSA9PiB7Ci0gICAgICBjb25zdCB2ZXJ0ZXggPSBuZXcgVmVydGV4KDEsICdwZXJzb24nLCBudWxsKTsKLSAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodmVydGV4LnByb3BlcnRpZXMsIFtdKTsKLSAgICB9KTsKLSAgfSk7Ci19KTsKLQotZGVzY3JpYmUoJ1ZlcnRleFByb3BlcnR5JywgKCkgPT4gewotICBkZXNjcmliZSgnI3RvU3RyaW5nKCknLCAoKSA9PiB7Ci0gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbmQgc3VtbWFyaXplJywgKCkgPT4gewotICAgICAgWwotICAgICAgICBbIG5ldyBWZXJ0ZXhQcm9wZXJ0eSgxLCAnbGFiZWwxJywgJ3ZhbHVlMScpLCAndnBbbGFiZWwxLT52YWx1ZTFdJyBdLAotICAgICAgICBbIG5ldyBWZXJ0ZXhQcm9wZXJ0eSgxLCAnbGFiZWwyJywgbnVsbCksICd2cFtsYWJlbDItPm51bGxdJyBdLAotICAgICAgICBbIG5ldyBWZXJ0ZXhQcm9wZXJ0eSgxLCAnbGFiZWwzJywgdW5kZWZpbmVkKSwgJ3ZwW2xhYmVsMy0+dW5kZWZpbmVkXScgXSwKLSAgICAgICAgWyBuZXcgVmVydGV4UHJvcGVydHkoMSwgJ2xhYmVsNCcsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpLCAndnBbbGFiZWw0LT5hYmNkZWZnaGlqa2xtbm9wcXJzdF0nIF0KLSAgICAgIF0uZm9yRWFjaChpdGVtID0+IHsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW1bMF0udG9TdHJpbmcoKSwgaXRlbVsxXSk7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJ3Byb3BlcnRpZXMnLCAoKSA9PiB7Ci0gICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGVtcHR5IGFycmF5IHdoZW4gbm90IHByb3ZpZGVkJywgKCkgPT4gewotICAgICAgY29uc3QgdnAgPSBuZXcgVmVydGV4UHJvcGVydHkoMjQsICduYW1lJywgJ21hcmtvJyk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZwLnByb3BlcnRpZXMsIFtdKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byBlbXB0eSBhcnJheSB3aGVuIHVuZGVmaW5lZCcsICgpID0+IHsKLSAgICAgIGNvbnN0IHZwID0gbmV3IFZlcnRleFByb3BlcnR5KDI0LCAnbmFtZScsICdtYXJrbycsIHVuZGVmaW5lZCk7Ci0gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZwLnByb3BlcnRpZXMsIFtdKTsKLSAgICB9KTsKLSAgfSk7Ci19KTsKLQotZGVzY3JpYmUoJ1Byb3BlcnR5JywgKCkgPT4gewotICBkZXNjcmliZSgnI3RvU3RyaW5nKCknLCAoKSA9PiB7Ci0gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbmQgc3VtbWFyaXplJywgKCkgPT4gewotICAgICAgWwotICAgICAgICBbIG5ldyBQcm9wZXJ0eSgna2V5MScsICd2YWx1ZTEnKSwgJ3Bba2V5MS0+dmFsdWUxXScgXSwKLSAgICAgICAgWyBuZXcgUHJvcGVydHkoJ2tleTInLCBudWxsKSwgJ3Bba2V5Mi0+bnVsbF0nIF0sCi0gICAgICAgIFsgbmV3IFByb3BlcnR5KCdrZXkzJywgdW5kZWZpbmVkKSwgJ3Bba2V5My0+dW5kZWZpbmVkXScgXSwKLSAgICAgICAgWyBuZXcgUHJvcGVydHkoJ2tleTQnLCAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonKSwgJ3Bba2V5NC0+YWJjZGVmZ2hpamtsbW5vcHFyc3RdJyBdCi0gICAgICBdLmZvckVhY2goaXRlbSA9PiB7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtWzBdLnRvU3RyaW5nKCksIGl0ZW1bMV0pOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7Ci0KLWRlc2NyaWJlKCdQYXRoJywgKCkgPT4gewotICBkZXNjcmliZSgnI3RvU3RyaW5nKCknLCAoKSA9PiB7Ci0gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbmQgc3VtbWFyaXplJywgKCkgPT4gewotICAgICAgWwotICAgICAgICBbIG5ldyBQYXRoKFsnYScsICdiJ10sIFsxLCAyXSksICdwYXRoWzEsIDJdJyBdLAotICAgICAgICBbIG5ldyBQYXRoKFsnYScsICdiJ10sIG51bGwpLCAncGF0aFtdJyBdCi0gICAgICBdLmZvckVhY2goaXRlbSA9PiB7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtWzBdLnRvU3RyaW5nKCksIGl0ZW1bMV0pOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC90cmFuc2xhdG9yLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYW5zbGF0b3ItdGVzdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc2ZWMyMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYW5zbGF0b3ItdGVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE0NSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCBncmFwaCA9IHJlcXVpcmUoJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGgnKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IFRyYW5zbGF0b3IgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmFuc2xhdG9yJyk7Ci1jb25zdCBncmFwaFRyYXZlcnNhbE1vZHVsZSA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbCcpOwotY29uc3QgX18gPSBncmFwaFRyYXZlcnNhbE1vZHVsZS5zdGF0aWNzOwotCi1kZXNjcmliZSgnVHJhbnNsYXRvcicsIGZ1bmN0aW9uICgpIHsKLQotICBkZXNjcmliZSgnI3RyYW5zbGF0ZSgpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2YWxpZCBzY3JpcHQgcmVwcmVzZW50YXRpb24gZnJvbSBieXRlY29kZSBnbHYgc3RlcHMnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCBnID0gbmV3IGdyYXBoLkdyYXBoKCkudHJhdmVyc2FsKCk7Ci0gICAgICBjb25zdCBzY3JpcHQgPSBuZXcgVHJhbnNsYXRvcignZycpLnRyYW5zbGF0ZShnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuVigpLm91dChcJ2NyZWF0ZWRcJyknKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2YWxpZCBzY3JpcHQgcmVwcmVzZW50YXRpb24gZnJvbSBieXRlY29kZSBnbHYgc3RlcHMgdHJhbnNsYXRpbmcgbnVtYmVyIGFuZCB0ZXh0IGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSBuZXcgZ3JhcGguR3JhcGgoKS50cmF2ZXJzYWwoKTsKLSAgICAgIGNvbnN0IHNjcmlwdCA9IG5ldyBUcmFuc2xhdG9yKCdnJykudHJhbnNsYXRlKGcuVigxKS5vdXQoJ2NyZWF0ZWQnKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuVigxKS5vdXQoXCdjcmVhdGVkXCcpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIGNvbnRhaW5pbmcgcGFyYW1ldGVyIGJpbmRpbmdzJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5hZGRWKHsnbmFtZSc6ICdMaWxhYyd9KS5nZXRCeXRlY29kZSgpKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuYWRkVigoXCduYW1lXCcsIFwnTGlsYWNcJykpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIGNvbnRhaW5pbmcgZW51bScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSBuZXcgZ3JhcGguR3JhcGgoKS50cmF2ZXJzYWwoKTsKLSAgICAgIGNvbnN0IHNjcmlwdCA9IG5ldyBUcmFuc2xhdG9yKCdnJykudHJhbnNsYXRlKGcuVigpLm9yZGVyKCkuYnkoJ2FnZScsIHQub3JkZXIuc2h1ZmZsZSkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICBhc3NlcnQub2soc2NyaXB0KTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHQsICdnLlYoKS5vcmRlcigpLmJ5KFwnYWdlXCcsIHNodWZmbGUpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIGNvbnRhaW5pbmcgYSBwcmVkaWNhdGUnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCBnID0gbmV3IGdyYXBoLkdyYXBoKCkudHJhdmVyc2FsKCk7Ci0gICAgICBjb25zdCBzY3JpcHQgPSBuZXcgVHJhbnNsYXRvcignZycpLnRyYW5zbGF0ZShnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuaGFzKCdhZ2UnLCB0LlAuZ3QoMzApKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuVigpLmhhc0xhYmVsKFwncGVyc29uXCcpLmhhcyhcJ2FnZVwnLCBndCgzMCkpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIGNvbnRhaW5pbmcgYSBzdHJpbmcgcHJlZGljYXRlJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLmhhcygnbmFtZScsIHQuVGV4dFAuY29udGFpbmluZygiZm9vIikpLmdldEJ5dGVjb2RlKCkpOwotICAgICAgYXNzZXJ0Lm9rKHNjcmlwdCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0LCAnZy5WKCkuaGFzTGFiZWwoXCdwZXJzb25cJykuaGFzKFwnbmFtZVwnLCBjb250YWluaW5nKFwnZm9vXCcpKScpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZhbGlkIHNjcmlwdCByZXByZXNlbnRhdGlvbiBmcm9tIGJ5dGVjb2RlIGdsdiBzdGVwcyB3aXRoIGNoaWxkJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5WKCkuZmlsdGVyKF9fLm91dEUoJ2NyZWF0ZWQnKSkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICBhc3NlcnQub2soc2NyaXB0KTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHQsICdnLlYoKS5maWx0ZXIoX18ub3V0RShcJ2NyZWF0ZWRcJykpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIHdpdGggZW1iZWRkZWQgY2hpbGQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCBnID0gbmV3IGdyYXBoLkdyYXBoKCkudHJhdmVyc2FsKCk7Ci0gICAgICBjb25zdCBzY3JpcHQgPSBuZXcgVHJhbnNsYXRvcignZycpLnRyYW5zbGF0ZShnLlYoKS5maWx0ZXIoX18ub3V0RSgnY3JlYXRlZCcpLmZpbHRlcihfXy5oYXMoJ3dlaWdodCcpKSkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICBhc3NlcnQub2soc2NyaXB0KTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHQsICdnLlYoKS5maWx0ZXIoX18ub3V0RShcJ2NyZWF0ZWRcJykuZmlsdGVyKF9fLmhhcyhcJ3dlaWdodFwnKSkpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYnl0ZWNvZGUgZ2x2IHN0ZXBzIHdpdGggZW1iZWRkZWQgY2hpbGRyZW4nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCBnID0gbmV3IGdyYXBoLkdyYXBoKCkudHJhdmVyc2FsKCk7Ci0gICAgICBjb25zdCBzY3JpcHQgPSBuZXcgVHJhbnNsYXRvcignZycpLnRyYW5zbGF0ZShnLlYoKS5vcihfXy5oYXMoJ25hbWUnLCAnYScpLCBfXy5oYXMoJ25hbWUnLCAnYicpKS5nZXRCeXRlY29kZSgpKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuVigpLm9yKF9fLmhhcyhcJ25hbWVcJywgXCdhXCcpLCBfXy5oYXMoXCduYW1lXCcsIFwnYlwnKSknKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgcHJvZHVjZSB2YWxpZCBzY3JpcHQgcmVwcmVzZW50YXRpb24gZnJvbSBieXRlY29kZSBnbHYgZm9yIGJvb2xlYW4gdmFsdWVzJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5WKCkuaGFzKCdtYWxlJywgdHJ1ZSkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgICBhc3NlcnQub2soc2NyaXB0KTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzY3JpcHQsICdnLlYoKS5oYXMoXCdtYWxlXCcsIHRydWUpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb2R1Y2UgdmFsaWQgc2NyaXB0IHJlcHJlc2VudGF0aW9uIGZyb20gYSB0cmF2ZXJzYWwgb2JqZWN0JywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5WKCkuaGFzKCdtYWxlJywgdHJ1ZSkpOwotICAgICAgYXNzZXJ0Lm9rKHNjcmlwdCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0LCAnZy5WKCkuaGFzKFwnbWFsZVwnLCB0cnVlKScpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIHZhbGlkIHNjcmlwdCByZXByZXNlbnRhdGlvbiBvZiBhcnJheSBhcyBzdGVwIGFyZycsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSBuZXcgZ3JhcGguR3JhcGgoKS50cmF2ZXJzYWwoKTsKLSAgICAgIGNvbnN0IHNjcmlwdCA9IG5ldyBUcmFuc2xhdG9yKCdnJykudHJhbnNsYXRlKGcuVihbMSwgMiwgM10pKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuVihbMSwgMiwgM10pJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHRyYW5zbGF0ZSBudWxsJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ2VtcHR5JywgbnVsbCkpOwotICAgICAgYXNzZXJ0Lm9rKHNjcmlwdCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0LCAnZy5hZGRWKFwndGVzdFwnKS5wcm9wZXJ0eShcJ2VtcHR5XCcsIG51bGwpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHRyYW5zbGF0ZSB1bmRlZmluZWQgdG8gbnVsbCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSBuZXcgZ3JhcGguR3JhcGgoKS50cmF2ZXJzYWwoKTsKLSAgICAgIGNvbnN0IHNjcmlwdCA9IG5ldyBUcmFuc2xhdG9yKCdnJykudHJhbnNsYXRlKGcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdlbXB0eScsIHVuZGVmaW5lZCkpOwotICAgICAgYXNzZXJ0Lm9rKHNjcmlwdCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0LCAnZy5hZGRWKFwndGVzdFwnKS5wcm9wZXJ0eShcJ2VtcHR5XCcsIG51bGwpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb3Blcmx5IGVzY2FwZSBxdW90ZXMgaW4gc3RyaW5nIGxpdGVyYWxzJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ3F1b3RlcycsICJzb21lIFwicXVvdGVzJyBpbiB0aGUgbWlkZGxlLiIpKTsKLSAgICAgIGFzc2VydC5vayhzY3JpcHQpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNjcmlwdCwgJ2cuYWRkVihcJ3Rlc3RcJykucHJvcGVydHkoXCdxdW90ZXNcJywgXCdzb21lICJxdW90ZXNcXFwnIGluIHRoZSBtaWRkbGUuXCcpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHByb3Blcmx5IGVzY2FwZSBxdW90ZXMgaW4gT2JqZWN0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSBuZXcgZ3JhcGguR3JhcGgoKS50cmF2ZXJzYWwoKTsKLSAgICAgIGNvbnN0IG8gPSB7a2V5OiAic29tZSBcInF1b3RlcycgaW4gdGhlIG1pZGRsZS4ifQotICAgICAgY29uc3Qgc2NyaXB0ID0gbmV3IFRyYW5zbGF0b3IoJ2cnKS50cmFuc2xhdGUoZy5pbmplY3QobykpOwotICAgICAgYXNzZXJ0Lm9rKHNjcmlwdCk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2NyaXB0LCAnZy5pbmplY3QoKFwna2V5XCcsIFwnc29tZSAicXVvdGVzXFxcJyBpbiB0aGUgbWlkZGxlLlwnKSknKTsKLSAgICB9KTsKLSAgfSk7Ci19KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhdmVyc2FsLXN0cmF0ZWd5LXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYXZlcnNhbC1zdHJhdGVneS10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTkxODI1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhdmVyc2FsLXN0cmF0ZWd5LXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSd1c2Ugc3RyaWN0JzsKLQotY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7Ci1jb25zdCB7IFRyYXZlcnNhbFN0cmF0ZWdpZXMsIE9wdGlvbnNTdHJhdGVneSwgQ29ubmVjdGl2ZVN0cmF0ZWd5IH0gPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKTsKLQotZGVzY3JpYmUoJ1RyYXZlcnNhbFN0cmF0ZWdpZXMnLCBmdW5jdGlvbiAoKSB7Ci0KLSAgZGVzY3JpYmUoJyNyZW1vdmVTdHJhdGVneSgpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgcmVtb3ZlIHN0cmF0ZWd5JywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgdHMgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcygpCi0gICAgICB0cy5hZGRTdHJhdGVneShuZXcgQ29ubmVjdGl2ZVN0cmF0ZWd5KCkpOwotICAgICAgdHMuYWRkU3RyYXRlZ3kobmV3IE9wdGlvbnNTdHJhdGVneSh7eDogMTIzfSkpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRzLnN0cmF0ZWdpZXMubGVuZ3RoLCAyKTsKLQotICAgICAgY29uc3QgYyA9IG5ldyBPcHRpb25zU3RyYXRlZ3koe3g6IDEyM30pOwotICAgICAgY29uc3Qgb3MgPSB0cy5yZW1vdmVTdHJhdGVneShjKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvcy5mcWNuLCBjLmZxY24pOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRzLnN0cmF0ZWdpZXMubGVuZ3RoLCAxKTsKLQotICAgICAgdHMucmVtb3ZlU3RyYXRlZ3kobmV3IENvbm5lY3RpdmVTdHJhdGVneSgpKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0cy5zdHJhdGVnaWVzLmxlbmd0aCwgMCk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIG5vdCBmaW5kIGFueXRoaW5nIHRvIHJlbW92ZScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IHRzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKQotICAgICAgdHMuYWRkU3RyYXRlZ3kobmV3IE9wdGlvbnNTdHJhdGVneSh7eDogMTIzfSkpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRzLnN0cmF0ZWdpZXMubGVuZ3RoLCAxKTsKLSAgICAgIHRzLnJlbW92ZVN0cmF0ZWd5KG5ldyBDb25uZWN0aXZlU3RyYXRlZ3koKSk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHMuc3RyYXRlZ2llcy5sZW5ndGgsIDEpOwotICAgIH0pOwotICB9KTsKLX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhdmVyc2FsLXRlc3QuanMgYi9ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYXZlcnNhbC10ZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNWY0ZGIzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhdmVyc2FsLXRlc3QuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQotICovCi0ndXNlIHN0cmljdCc7Ci0KLWNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOwotY29uc3QgZXhwZWN0ID0gcmVxdWlyZSgnY2hhaScpLmV4cGVjdDsKLWNvbnN0IGdyYXBoID0gcmVxdWlyZSgnLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaCcpOwotY29uc3QgYW5vbiA9IHJlcXVpcmUoJy4uLy4uL2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwnKTsKLWNvbnN0IHQgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwnKTsKLWNvbnN0IGd0ID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsJyk7Ci1jb25zdCBWID0gZ3Quc3RhdGljcy5WOwotY29uc3QgUCA9IHQuUDsKLWNvbnN0IEJ5dGVjb2RlID0gcmVxdWlyZSgnLi4vLi4vbGliL3Byb2Nlc3MvYnl0ZWNvZGUnKTsKLWNvbnN0IFRyYXZlcnNhbFN0cmF0ZWdpZXMgPSByZXF1aXJlKCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3knKS5UcmF2ZXJzYWxTdHJhdGVnaWVzOwotY29uc3QgUmVtb3RlQ29ubmVjdGlvbiA9IHJlcXVpcmUoJy4uLy4uL2xpYi9kcml2ZXIvcmVtb3RlLWNvbm5lY3Rpb24nKS5SZW1vdGVDb25uZWN0aW9uOwotCi1kZXNjcmliZSgnVHJhdmVyc2FsJywgZnVuY3Rpb24gKCkgewotCi0gIGRlc2NyaWJlKCcjZ2V0Qnl0ZUNvZGUoKScsIGZ1bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIGFkZCBzdGVwcyBmb3Igd2l0aCBhIHN0cmluZyBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhuZXcgZ3JhcGguR3JhcGgoKSk7Ci0gICAgICBjb25zdCBieXRlY29kZSA9IGcuVigpLm91dCgnY3JlYXRlZCcpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICBhc3NlcnQub2soYnl0ZWNvZGUpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucy5sZW5ndGgsIDApOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnMubGVuZ3RoLCAyKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzBdWzBdLCAnVicpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMV1bMF0sICdvdXQnKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzFdWzFdLCAnY3JlYXRlZCcpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBhZGQgc3RlcHMgd2l0aCBhbiBlbnVtIHZhbHVlJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8obmV3IGdyYXBoLkdyYXBoKCkpOwotICAgICAgY29uc3QgYnl0ZWNvZGUgPSBnLlYoKS5vcmRlcigpLmJ5KCdhZ2UnLCB0Lm9yZGVyLmRlc2MpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICBhc3NlcnQub2soYnl0ZWNvZGUpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucy5sZW5ndGgsIDApOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnMubGVuZ3RoLCAzKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzBdWzBdLCAnVicpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMV1bMF0sICdvcmRlcicpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMl1bMF0sICdieScpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMl1bMV0sICdhZ2UnKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9uc1syXVsyXSwgJ29iamVjdCcpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMl1bMl0udHlwZU5hbWUsICdPcmRlcicpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMl1bMl0uZWxlbWVudE5hbWUsICdkZXNjJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIGFkZCBzdGVwcyB3aXRoIERpcmVjdGlvbiBhbGlhc2VzIGZyb21fIGFuZCB0byBwcm9wZXJseSBtYXBwZWQgdG8gT1VUIGFuZCBJTicsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKG5ldyBncmFwaC5HcmFwaCgpKTsKLSAgICAgIGNvbnN0IGJ5dGVjb2RlID0gZy5WKCkudG8odC5kaXJlY3Rpb24uZnJvbV8sICdrbm93cycpLnRvKHQuZGlyZWN0aW9uLmluLCAnY3JlYXRlZCcpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICBhc3NlcnQub2soYnl0ZWNvZGUpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucy5sZW5ndGgsIDApOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnMubGVuZ3RoLCAzKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzBdWzBdLCAnVicpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMV1bMF0sICd0bycpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzFdWzFdLCAnb2JqZWN0Jyk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9uc1sxXVsxXS50eXBlTmFtZSwgJ0RpcmVjdGlvbicpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMV1bMV0uZWxlbWVudE5hbWUsICdPVVQnKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzFdWzJdLCAna25vd3MnKTsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChieXRlY29kZS5zdGVwSW5zdHJ1Y3Rpb25zWzJdWzFdLnR5cGVOYW1lLCAnRGlyZWN0aW9uJyk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9uc1syXVsxXS5lbGVtZW50TmFtZSwgJ0lOJyk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9uc1syXVsyXSwgJ2NyZWF0ZWQnKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgY29uZmlndXJlIE9wdGlvblN0cmF0ZWd5IGZvciB3aXRoXygpJywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3QgZyA9IG5ldyBncmFwaC5HcmFwaCgpLnRyYXZlcnNhbCgpOwotICAgICAgY29uc3QgYnl0ZWNvZGUgPSBnLndpdGhfKCd4JywndGVzdCcpLndpdGhfKCd5JykuVigpLmdldEJ5dGVjb2RlKCk7Ci0gICAgICBhc3NlcnQub2soYnl0ZWNvZGUpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9ucy5sZW5ndGgsIDEpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnNvdXJjZUluc3RydWN0aW9uc1swXVswXSwgJ3dpdGhTdHJhdGVnaWVzJyk7Ci0gICAgICBjb25zdCBjb25mID0gYnl0ZWNvZGUuc291cmNlSW5zdHJ1Y3Rpb25zWzBdWzFdLmNvbmZpZ3VyYXRpb247Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29uZi54LCAndGVzdCcpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbmYueSwgdHJ1ZSk7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYnl0ZWNvZGUuc3RlcEluc3RydWN0aW9ucy5sZW5ndGgsIDEpOwotICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJ5dGVjb2RlLnN0ZXBJbnN0cnVjdGlvbnNbMF1bMF0sICdWJyk7Ci0gICAgfSk7Ci0gIH0pOwotCi0gIGRlc2NyaWJlKCcjbmV4dCgpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdzaG91bGQgYXBwbHkgdGhlIHN0cmF0ZWdpZXMgYW5kIHJldHVybiBhIFByb21pc2Ugd2l0aCB0aGUgaXRlcmF0b3IgaXRlbScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IHN0cmF0ZWd5TW9jayA9IHsKLSAgICAgICAgYXBwbHk6IGZ1bmN0aW9uICh0cmF2ZXJzYWwpIHsKLSAgICAgICAgICB0cmF2ZXJzYWwudHJhdmVyc2VycyA9IFsgbmV3IHQuVHJhdmVyc2VyKDEsIDEpLCBuZXcgdC5UcmF2ZXJzZXIoMiwgMSkgXTsKLSAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKLSAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKLSAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyB0LlRyYXZlcnNhbChudWxsLCBzdHJhdGVnaWVzLCBudWxsKTsKLSAgICAgIHJldHVybiB0cmF2ZXJzYWwubmV4dCgpCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0udmFsdWUsIDEpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLmRvbmUsIGZhbHNlKTsKLSAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgfSkKLSAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS52YWx1ZSwgMik7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0uZG9uZSwgZmFsc2UpOwotICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9KQotICAgICAgICAudGhlbihmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLnZhbHVlLCBudWxsKTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCB0cnVlKTsKLSAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHN1cHBvcnQgYnVsaycsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IHN0cmF0ZWd5TW9jayA9IHsKLSAgICAgICAgYXBwbHk6IGZ1bmN0aW9uICh0cmF2ZXJzYWwpIHsKLSAgICAgICAgICB0cmF2ZXJzYWwudHJhdmVyc2VycyA9IFsgbmV3IHQuVHJhdmVyc2VyKDEsIDIpLCBuZXcgdC5UcmF2ZXJzZXIoMiwgMSkgXTsKLSAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKLSAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKLSAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyB0LlRyYXZlcnNhbChudWxsLCBzdHJhdGVnaWVzLCBudWxsKTsKLSAgICAgIHJldHVybiB0cmF2ZXJzYWwubmV4dCgpCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0udmFsdWUsIDEpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLmRvbmUsIGZhbHNlKTsKLSAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgfSkKLSAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS52YWx1ZSwgMSk7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0uZG9uZSwgZmFsc2UpOwotICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9KQotICAgICAgICAudGhlbihmdW5jdGlvbiAoaXRlbSkgewotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLnZhbHVlLCAyKTsKLSAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCBmYWxzZSk7Ci0gICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIH0pCi0gICAgICAgIC50aGVuKGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0udmFsdWUsIG51bGwpOwotICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLmRvbmUsIHRydWUpOwotICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9KTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgaWYgKFN5bWJvbC5hc3luY0l0ZXJhdG9yKSB7Ci0gICAgZGVzY3JpYmUoJ0BAYXN5bmNJdGVyYXRvcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGl0KCdzaG91bGQgZXhwb3NlIHRoZSBhc3luYyBpdGVyYXRvcicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgY29uc3QgdHJhdmVyc2FsID0gbmV3IHQuVHJhdmVyc2FsKG51bGwsIG51bGwsIG51bGwpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIHRyYXZlcnNhbFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sICdmdW5jdGlvbicpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0KLQotICBkZXNjcmliZSgnI3RvTGlzdCgpJywgZnVuY3Rpb24gKCkgewotCi0gICAgaXQoJ3Nob3VsZCBhcHBseSB0aGUgc3RyYXRlZ2llcyBhbmQgcmV0dXJuIGEgUHJvbWlzZSB3aXRoIGFuIGFycmF5JywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3Qgc3RyYXRlZ3lNb2NrID0gewotICAgICAgICBhcHBseTogZnVuY3Rpb24gKHRyYXZlcnNhbCkgewotICAgICAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZXJzID0gWyBuZXcgdC5UcmF2ZXJzZXIoJ2EnLCAxKSwgbmV3IHQuVHJhdmVyc2VyKCdiJywgMSkgXTsKLSAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0gICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKLSAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKLSAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyB0LlRyYXZlcnNhbChudWxsLCBzdHJhdGVnaWVzLCBudWxsKTsKLSAgICAgIHJldHVybiB0cmF2ZXJzYWwudG9MaXN0KCkudGhlbihmdW5jdGlvbiAobGlzdCkgewotICAgICAgICBhc3NlcnQub2sobGlzdCk7Ci0gICAgICAgIGFzc2VydC5kZWVwRXF1YWwobGlzdCwgWyAnYScsICdiJyBdKTsKLSAgICAgIH0pOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgd2hlbiB0cmF2ZXJzZXJzIGlzIGVtcHR5JywgZnVuY3Rpb24gKCkgewotICAgICAgY29uc3Qgc3RyYXRlZ3lNb2NrID0gewotICAgICAgICBhcHBseTogZnVuY3Rpb24gKHRyYXZlcnNhbCkgewotICAgICAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZXJzID0gW107Ci0gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgY29uc3Qgc3RyYXRlZ2llcyA9IG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7Ci0gICAgICBzdHJhdGVnaWVzLmFkZFN0cmF0ZWd5KHN0cmF0ZWd5TW9jayk7Ci0gICAgICBjb25zdCB0cmF2ZXJzYWwgPSBuZXcgdC5UcmF2ZXJzYWwobnVsbCwgc3RyYXRlZ2llcywgbnVsbCk7Ci0gICAgICByZXR1cm4gdHJhdmVyc2FsLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKLSAgICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkobGlzdCkpOwotICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdC5sZW5ndGgsIDApOwotICAgICAgfSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHN1cHBvcnQgYnVsaycsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGNvbnN0IHN0cmF0ZWd5TW9jayA9IHsKLSAgICAgICAgYXBwbHk6IGZ1bmN0aW9uICh0cmF2ZXJzYWwpIHsKLSAgICAgICAgICB0cmF2ZXJzYWwudHJhdmVyc2VycyA9IFsgbmV3IHQuVHJhdmVyc2VyKDEsIDEpLCBuZXcgdC5UcmF2ZXJzZXIoMiwgMyksIG5ldyB0LlRyYXZlcnNlcigzLCAyKSwKLSAgICAgICAgICAgIG5ldyB0LlRyYXZlcnNlcig0LCAxKSBdOwotICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgfQotICAgICAgfTsKLSAgICAgIGNvbnN0IHN0cmF0ZWdpZXMgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcygpOwotICAgICAgc3RyYXRlZ2llcy5hZGRTdHJhdGVneShzdHJhdGVneU1vY2spOwotICAgICAgY29uc3QgdHJhdmVyc2FsID0gbmV3IHQuVHJhdmVyc2FsKG51bGwsIHN0cmF0ZWdpZXMsIG51bGwpOwotICAgICAgcmV0dXJuIHRyYXZlcnNhbC50b0xpc3QoKQotICAgICAgICAudGhlbihsaXN0ID0+IHsKLSAgICAgICAgICBleHBlY3QobGlzdCkudG8uaGF2ZS5tZW1iZXJzKFsxLCAyLCAyLCAyLCAzLCAzLCA0XSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgnI2l0ZXJhdGUoKScsIGZ1bmN0aW9uICgpIHsKLSAgICBpdCgnc2hvdWxkIGFwcGx5IHRoZSBzdHJhdGVnaWVzIGFuZCByZXR1cm4gYSBQcm9taXNlJywgZnVuY3Rpb24gKCkgewotICAgICAgbGV0IGFwcGxpZWQgPSBmYWxzZTsKLSAgICAgIGNvbnN0IHN0cmF0ZWd5TW9jayA9IHsKLSAgICAgICAgYXBwbHk6IGZ1bmN0aW9uICh0cmF2ZXJzYWwpIHsKLSAgICAgICAgICBhcHBsaWVkID0gdHJ1ZTsKLSAgICAgICAgICB0cmF2ZXJzYWwudHJhdmVyc2VycyA9IFsgbmV3IHQuVHJhdmVyc2VyKCdhJywgMSksIG5ldyB0LlRyYXZlcnNlcignYicsIDEpIF07Ci0gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwotICAgICAgICB9Ci0gICAgICB9OwotICAgICAgY29uc3Qgc3RyYXRlZ2llcyA9IG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7Ci0gICAgICBzdHJhdGVnaWVzLmFkZFN0cmF0ZWd5KHN0cmF0ZWd5TW9jayk7Ci0gICAgICBjb25zdCB0cmF2ZXJzYWwgPSBuZXcgdC5UcmF2ZXJzYWwobnVsbCwgc3RyYXRlZ2llcywgbmV3IEJ5dGVjb2RlKCkpOwotICAgICAgcmV0dXJuIHRyYXZlcnNhbC5pdGVyYXRlKCkudGhlbigoKSA9PiB7Ci0gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhcHBsaWVkLCB0cnVlKTsKLSAgICAgIH0pOwotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgnUCN0b1N0cmluZygpJywgZnVuY3Rpb24gKCkgewotICAgIGl0KCdjb252ZXJ0IHRvIHN0cmluZyByZXByZXNlbnRhdGlvbiB3aXRoIFAnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoUC5ndCgxOCkudG9TdHJpbmcoKSwgJ2d0KDE4KScpOwotICAgIH0pOwotCi0gICAgaXQoJ2NvbnZlcnQgdG8gc3RyaW5nIHJlcHJlc2VudGF0aW9uIHdpdGggUC53aXRoaW4nLCBmdW5jdGlvbiAoKSB7Ci0gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoUC53aXRoaW4oJ2EnLCAnYicpLnRvU3RyaW5nKCksICd3aXRoaW4oXCdhXCcsXCdiXCcpJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnY29udmVydCB0byBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aCBQLndpdGhpbiBhcnJheScsIGZ1bmN0aW9uICgpIHsKLSAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChQLndpdGhpbihbJ2EnLCAnYiddKS50b1N0cmluZygpLCAnd2l0aGluKFwnYVwnLFwnYlwnKScpOwotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgiYnVpbGQiLCBmdW5jdGlvbigpIHsKLSAgICBpdCgnc2hvdWxkIG9ubHkgYWxsb3cgYW5vbnltb3VzIGNoaWxkIHRyYXZlcnNhbHMnLCBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKG5ldyBncmFwaC5HcmFwaCgpKTsKLSAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coZnVuY3Rpb24oKSB7Ci0gICAgICAgIGcuVigwKS5hZGRFKCJzZWxmIikudG8oVigxKSkKLSAgICAgIH0pOwotCi0gICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uKCkgewotICAgICAgICBnLlYoMCkuYWRkRSgic2VsZiIpLnRvKGcuVigxKSkKLSAgICAgIH0pOwotICAgIH0pCi0gIH0pOwotCi0gIGRlc2NyaWJlKCdjaGlsZCB0cmFuc2FjdGlvbnMnLCBmdW5jdGlvbigpIHsKLSAgICBpdCgnc2hvdWxkIG5vdCBzdXBwb3J0IGNoaWxkIHRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8obmV3IE1vY2tSZW1vdGVDb25uZWN0aW9uKCkpOwotICAgICAgY29uc3QgdHggPSBnLnR4KCk7Ci0gICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uKCkgewotICAgICAgICB0eC5iZWdpbigpLnR4KCk7Ci0gICAgICB9KTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJ25vdCBvcGVuZWQgdHJhbnNhY3Rpb25zJywgZnVuY3Rpb24oKSB7Ci0gICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgY29tbWl0IGZvciBub3Qgb3BlbmVkIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uKCkgewotICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aFJlbW90ZShuZXcgTW9ja1JlbW90ZUNvbm5lY3Rpb24oKSk7Ci0gICAgICBjb25zdCB0eCA9IGcudHgoKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGF3YWl0IHR4LmNvbW1pdCgpOwotICAgICAgICBhc3NlcnQuZmFpbCgic2hvdWxkIHRocm93IGVycm9yIik7Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCdDYW5ub3QgY29tbWl0IGEgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3Qgc3RhcnRlZCcsIGVyci5tZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpdCgnc2hvdWxkIG5vdCBhbGxvdyByb2xsYmFjayBmb3Igbm90IG9wZW5lZCB0cmFuc2FjdGlvbnMnLCBhc3luYyBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUobmV3IE1vY2tSZW1vdGVDb25uZWN0aW9uKCkpOwotICAgICAgY29uc3QgdHggPSBnLnR4KCk7Ci0gICAgICB0cnkgewotICAgICAgICBhd2FpdCB0eC5yb2xsYmFjaygpOwotICAgICAgICBhc3NlcnQuZmFpbCgic2hvdWxkIHRocm93IGVycm9yIik7Ci0gICAgICB9IGNhdGNoIChlcnIpIHsKLSAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCdDYW5ub3Qgcm9sbGJhY2sgYSB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBzdGFydGVkJywgZXJyLm1lc3NhZ2UpOwotICAgICAgfQotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgndHgjYmVnaW4oKScsIGZ1bmN0aW9uKCkgewotICAgIGl0KCJzaG91bGQgbm90IGFsbG93IGEgdHJhbnNhY3Rpb24gdG8gYmVnaW4gbW9yZSB0aGFuIG9uY2UiLCBmdW5jdGlvbigpIHsKLSAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKG5ldyBNb2NrUmVtb3RlQ29ubmVjdGlvbigpKTsKLSAgICAgIGNvbnN0IHR4ID0gZy50eCgpOwotICAgICAgdHguYmVnaW4oKTsKLSAgICAgIGFzc2VydC50aHJvd3MoZnVuY3Rpb24gKCkgewotICAgICAgICB0eC5iZWdpbigpOwotICAgICAgfSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7Ci0KLWNsYXNzIE1vY2tSZW1vdGVDb25uZWN0aW9uIGV4dGVuZHMgUmVtb3RlQ29ubmVjdGlvbiB7Ci0gIGNvbnN0cnVjdG9yKGJvdW5kID0gZmFsc2UpIHsKLSAgICBzdXBlcignd3M6Ly9sb2NhbGhvc3Q6OTk5OC9ncmVtbGluJyk7Ci0gICAgdGhpcy5fYm91bmQgPSBib3VuZDsKLSAgfQotCi0gIGdldCBpc1Nlc3Npb25Cb3VuZCgpIHsKLSAgICByZXR1cm4gdGhpcy5fYm91bmQ7Ci0gIH0KLQotICBzdWJtaXQoYnl0ZWNvZGUpIHsKLSAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7Ci0gIH0KLQotICBjcmVhdGVTZXNzaW9uKCkgewotICAgIHJldHVybiBuZXcgTW9ja1JlbW90ZUNvbm5lY3Rpb24odHJ1ZSk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC8uZ2l0aWdub3JlIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTBmZmYwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDkgQEAKK25vZGVfbW9kdWxlcy8KKy5pZGVhLworbnBtLWRlYnVnLmxvZworIyBtYXZlbiBwbHVnaW4gY29tLmdpdGh1Yi5laXJzbGV0dCBmcm9udGVuZC1tYXZlbi1wbHVnaW4gaW5zdGFsbHMgbm9kZS5qcyBydW50aW1lIGluICJub2RlIiBmb2xkZXIKK25vZGUvCitkb2MvCitidWlsZC8KK2xpYi9sYW5ndWFnZS9ncmFtbWFyLworKiovLmR1ZWwtY2FjaGUvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvLm1vY2hhcmMuanNvbiBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5tb2NoYXJjLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1ZTUwYgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5tb2NoYXJjLmpzb24KQEAgLTAsMCArMSw1IEBACit7CisgICJleHRlbnNpb24iOiBbImpzIiwgInRzIl0sCisgICJyZXF1aXJlIjogInRzLW5vZGUvcmVnaXN0ZXIiLAorICAibG9hZGVyIjogInRzLW5vZGUvZXNtIgorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5ucG1pZ25vcmUgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC8ubnBtaWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvLm5wbWlnbm9yZQpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvLm5wbWlnbm9yZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5udm1yYyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5udm1yYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5udm1yYwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvLm52bXJjCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC8ucHJldHRpZXJyYy5janMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC8ucHJldHRpZXJyYy5janMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAwODE2OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5wcmV0dGllcnJjLmNqcwpAQCAtMCwwICsxLDMxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyd1c2Ugc3RyaWN0JzsKKworbW9kdWxlLmV4cG9ydHMgPSB7CisgIHNpbmdsZVF1b3RlOiB0cnVlLAorICBwcmludFdpZHRoOiAxMjAsCisgIHRyYWlsaW5nQ29tbWE6ICdhbGwnLAorICBicmFja2V0U3BhY2luZzogdHJ1ZSwKKyAgYXJyb3dQYXJlbnM6ICdhbHdheXMnLAorICBzZW1pOiB0cnVlLAorICB0YWJXaWR0aDogMiwKKyAgdXNlVGFiczogZmFsc2UsCit9OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L0xJQ0VOU0UgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvTElDRU5TRQpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvTElDRU5TRQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9OT1RJQ0UgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9OT1RJQ0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvTk9USUNFCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9OT1RJQ0UKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L1JFQURNRS5tZCBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjY2ZDJkCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTYzIEBACis8IS0tCisKKyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLT4KKworIyBKYXZhU2NyaXB0IEdyZW1saW4gTGFuZ3VhZ2UgVmFyaWFudAorCitbQXBhY2hlIFRpbmtlclBvcOKEol1bdGtdIGlzIGEgZ3JhcGggY29tcHV0aW5nIGZyYW1ld29yayBmb3IgYm90aCBncmFwaCBkYXRhYmFzZXMgKE9MVFApIGFuZCBncmFwaCBhbmFseXRpYyBzeXN0ZW1zCisoT0xBUCkuIFtHcmVtbGluXVtncmVtbGluXSBpcyB0aGUgZ3JhcGggdHJhdmVyc2FsIGxhbmd1YWdlIG9mIFRpbmtlclBvcC4gSXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGZ1bmN0aW9uYWwsCitkYXRhLWZsb3cgbGFuZ3VhZ2UgdGhhdCBlbmFibGVzIHVzZXJzIHRvIHN1Y2NpbmN0bHkgZXhwcmVzcyBjb21wbGV4IHRyYXZlcnNhbHMgb24gKG9yIHF1ZXJpZXMgb2YpIHRoZWlyIGFwcGxpY2F0aW9uJ3MKK3Byb3BlcnR5IGdyYXBoLgorCitHcmVtbGluLUphdmFzY3JpcHQgaW1wbGVtZW50cyBHcmVtbGluIHdpdGhpbiB0aGUgSmF2YVNjcmlwdCBsYW5ndWFnZSBhbmQgY2FuIGJlIHVzZWQgb24gTm9kZS5qcyBhbmQgaGFzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBXZWIgQVBJcyBjb21wYXRpYmxlIHJ1bnRpbWVzLgorCitgYGBiYXNoCitucG0gaW5zdGFsbCBncmVtbGluCitgYGAKKworR3JlbWxpbi1KYXZhc2NyaXB0IGlzIGRlc2lnbmVkIHRvIGNvbm5lY3QgdG8gYSAic2VydmVyIiB0aGF0IGlzIGhvc3RpbmcgYSBUaW5rZXJQb3AtZW5hYmxlZCBncmFwaCBzeXN0ZW0uIFRoYXQgInNlcnZlciIgCitjb3VsZCBiZSBbR3JlbWxpbiBTZXJ2ZXJdW2dzXSBvciBhIFtyZW1vdGUgR3JlbWxpbiBwcm92aWRlcl1bcmdwXSB0aGF0IGV4cG9zZXMgcHJvdG9jb2xzIGJ5IHdoaWNoIEdyZW1saW4tSmF2YXNjcmlwdCAKK2NhbiBjb25uZWN0LgorCitBIHR5cGljYWwgY29ubmVjdGlvbiB0byBhIHNlcnZlciBydW5uaW5nIG9uICJsb2NhbGhvc3QiIHRoYXQgc3VwcG9ydHMgdGhlIEdyZW1saW4gU2VydmVyIHByb3RvY29sIGxvb2tzIGxpa2UgdGhpczoKKworYGBgamF2YXNjcmlwdAorY29uc3QgZ3JlbWxpbiA9IHJlcXVpcmUoJ2dyZW1saW4nKTsKK2NvbnN0IHRyYXZlcnNhbCA9IGdyZW1saW4ucHJvY2Vzcy5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOworY29uc3QgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiA9IGdyZW1saW4uZHJpdmVyLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CisKK2NvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbignaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKSk7CitgYGAKKworU29tZSBncmFwaCBwcm92aWRlcnMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCByZXF1ZXN0IGN1c3RvbWl6YXRpb24gdG8gY29ubmVjdC4gVGhlIGRyaXZlciBzdXBwb3J0cyByZXF1ZXN0IGludGVyY2VwdG9ycworZm9yIHRoZXNlIGNhc2VzLiBGb3IgZXhhbXBsZSwgdG8gY29ubmVjdCB3aXRoIGJhc2ljIGF1dGhlbnRpY2F0aW9uOgorCitgYGBqYXZhc2NyaXB0Citjb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpOworY29uc3QgdHJhdmVyc2FsID0gZ3JlbWxpbi5wcm9jZXNzLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Citjb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKKworY29uc3QgZyA9IHRyYXZlcnNhbCgpLndpdGhfKG5ldyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKCdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsIHsKKyAgaW50ZXJjZXB0b3JzOiBncmVtbGluLmRyaXZlci5hdXRoLmJhc2ljKCd1c2VybmFtZScsICdwYXNzd29yZCcpCit9KSk7CitgYGAKKworUmVmZXIgdG8geW91ciBncmFwaCBwcm92aWRlcidzIGRvY3VtZW50YXRpb24gZm9yIHNwZWNpZmljIGNvbm5lY3Rpb24gcmVxdWlyZW1lbnRzLgorCitPbmNlICJnIiBoYXMgYmVlbiBjcmVhdGVkIHVzaW5nIGEgY29ubmVjdGlvbiwgaXQgaXMgdGhlbiBwb3NzaWJsZSB0byBzdGFydCB3cml0aW5nIEdyZW1saW4gdHJhdmVyc2FscyB0byBxdWVyeSB0aGUgCityZW1vdGUgZ3JhcGg6CisKK2BgYGphdmFzY3JpcHQKK2cuVigpLmhhc0xhYmVsKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKQorICAudGhlbihuYW1lcyA9PiBjb25zb2xlLmxvZyhuYW1lcykpOworCitjb25zdCBuYW1lcyA9IGF3YWl0IGcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKTsKK2NvbnNvbGUubG9nKG5hbWVzKTsKK2BgYAorCisjIFNhbXBsZSBUcmF2ZXJzYWxzCisKK1RoZSBHcmVtbGluIGxhbmd1YWdlIGFsbG93cyB1c2VycyB0byB3cml0ZSBoaWdobHkgZXhwcmVzc2l2ZSBncmFwaCB0cmF2ZXJzYWxzIGFuZCBoYXMgYSBicm9hZCBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IAorY292ZXIgYSB3aWRlIGJvZHkgb2YgZmVhdHVyZXMuIFRoZSBbUmVmZXJlbmNlIERvY3VtZW50YXRpb25dW3N0ZXBzXSBkZXNjcmliZXMgdGhlc2UgZnVuY3Rpb25zIGFuZCBvdGhlciBhc3BlY3RzIG9mIHRoZSAKK1RpbmtlclBvcCBlY29zeXN0ZW0gaW5jbHVkaW5nIHNvbWUgc3BlY2lmaWNzIG9uIFtHcmVtbGluIGluIEphdmFzY3JpcHRdW2RvY3NdIGl0c2VsZi4gTW9zdCBvZiB0aGUgZXhhbXBsZXMgZm91bmQgaW4gdGhlIAorZG9jdW1lbnRhdGlvbiB1c2UgR3Jvb3Z5IGxhbmd1YWdlIHN5bnRheCBpbiB0aGUgW0dyZW1saW4gQ29uc29sZV1bY29uc29sZV0uIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGVzZSBleGFtcGxlcworc2hvdWxkIGdlbmVyYWxseSB0cmFuc2xhdGUgdG8gSmF2YXNjcmlwdCB3aXRoIFtsaXR0bGUgbW9kaWZpY2F0aW9uXVtkaWZmZXJlbmNlc10uIEdpdmVuIHRoZSBzdHJvbmcgY29ycmVzcG9uZGVuY2UgCitiZXR3ZWVuIGNhbm9uaWNhbCBHcmVtbGluIGluIEphdmEgYW5kIGl0cyB2YXJpYW50cyBsaWtlIEphdmFzY3JpcHQsIHRoZXJlIGlzIGEgbGltaXRlZCBhbW91bnQgb2YgSmF2YXNjcmlwdC1zcGVjaWZpYyAKK2RvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLiBUaGlzIHN0cm9uZyBjb3JyZXNwb25kZW5jZSBhbW9uZyB2YXJpYW50cyBlbnN1cmVzIHRoYXQgdGhlIGdlbmVyYWwgR3JlbWxpbiByZWZlcmVuY2UgCitkb2N1bWVudGF0aW9uIGlzIGFwcGxpY2FibGUgdG8gYWxsIHZhcmlhbnRzIGFuZCB0aGF0IHVzZXJzIG1vdmluZyBiZXR3ZWVuIGRldmVsb3BtZW50IGxhbmd1YWdlcyBjYW4gZWFzaWx5IGFkb3B0IHRoZSAKK0dyZW1saW4gdmFyaWFudCBmb3IgdGhhdCBsYW5ndWFnZS4KKworIyMgQ3JlYXRlIFZlcnRleAorCitgYGBqYXZhc2NyaXB0CisvKiBpZiB3ZSB3YW50IHRvIGFzc2lnbiBvdXIgb3duIElEIGFuZCBwcm9wZXJ0aWVzIHRvIHRoaXMgdmVydGV4ICovCitjb25zdCB7IHQ6IHsgaWQgfSB9ID0gZ3JlbWxpbi5wcm9jZXNzOworY29uc3QgeyBjYXJkaW5hbGl0eTogeyBzaW5nbGUgfSB9ID0gZ3JlbWxpbi5wcm9jZXNzOworCisvKioKKyAqIENyZWF0ZSBhIG5ldyB2ZXJ0ZXggd2l0aCBJZCwgTGFiZWwgYW5kIHByb3BlcnRpZXMKKyAqIEBwYXJhbSB7U3RyaW5nLE51bWJlcn0gdmVydGV4SWQgVmVydGV4IElkIChhc3N1bWluZyB0aGUgZ3JhcGggZGF0YWJhc2UgYWxsb3dzIGlkIGFzc2lnbm1lbnQpCisgKiBAcGFyYW0ge1N0cmluZ30gdmxhYmVsIFZlcnRleCBMYWJlbAorICovCitjb25zdCBjcmVhdGVWZXJ0ZXggPSBhc3luYyAodmVydGV4SWQsIHZsYWJlbCkgPT4geworICBjb25zdCB2ZXJ0ZXggPSBhd2FpdCBnLmFkZFYodmxhYmVsKQorICAgIC5wcm9wZXJ0eShpZCwgdmVydGV4SWQpCisgICAgLnByb3BlcnR5KHNpbmdsZSwgJ25hbWUnLCAnQXBhY2hlJykKKyAgICAucHJvcGVydHkoJ2xhc3RuYW1lJywgJ1RpbmtlcnBvcCcpIC8vIGRlZmF1bHQgZGF0YWJhc2UgY2FyZGluYWxpdHkKKyAgICAubmV4dCgpOworCisgIHJldHVybiB2ZXJ0ZXgudmFsdWU7Cit9OworYGBgCisKKyMjIEZpbmQgVmVydGljZXMKKworYGBgamF2YXNjcmlwdAorLyoqCisgKiBMaXN0IGFsbCB2ZXJ0ZXhlcyBpbiBkYgorICogQHBhcmFtIHtOdW1iZXJ9IGxpbWl0CisgKi8KK2NvbnN0IGxpc3RBbGwgPSBhc3luYyAobGltaXQgPSA1MDApID0+IHsKKyAgcmV0dXJuIGcuVigpLmxpbWl0KGxpbWl0KS5lbGVtZW50TWFwKCkudG9MaXN0KCk7Cit9OworLyoqCisgKiBGaW5kIHVuaXF1ZSB2ZXJ0ZXggd2l0aCBpZAorICogQHBhcmFtIHtPYmplY3R9IHZlcnRleElkIFZlcnRleCBJZAorICovCitjb25zdCBmaW5kVmVydGV4ID0gYXN5bmMgKHZlcnRleElkKSA9PiB7CisgIGNvbnN0IHZlcnRleCA9IGF3YWl0IGcuVih2ZXJ0ZXhJZCkuZWxlbWVudE1hcCgpLm5leHQoKTsKKyAgcmV0dXJuIHZlcnRleC52YWx1ZTsKK307CisvKioKKyAqIEZpbmQgdmVydGljZXMgYnkgbGFiZWwgYW5kICduYW1lJyBwcm9wZXJ0eQorICogQHBhcmFtIHtTdHJpbmd9IHZsYWJlbCBWZXJ0ZXggbGFiZWwKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHZhbHVlIG9mICduYW1lJyBwcm9wZXJ0eQorICovCitjb25zdCBsaXN0QnlMYWJlbEFuZE5hbWUgPSBhc3luYyAodmxhYmVsLCBuYW1lKSA9PiB7CisgIHJldHVybiBnLlYoKS5oYXModmxhYmVsLCAnbmFtZScsIG5hbWUpLmVsZW1lbnRNYXAoKS50b0xpc3QoKTsKK307CitgYGAKKworIyMgVXBkYXRlIFZlcnRleAorYGBgamF2YXNjcmlwdAorY29uc3QgeyBjYXJkaW5hbGl0eTogeyBzaW5nbGUgfSB9ID0gZ3JlbWxpbi5wcm9jZXNzOworCisvKioKKyAqIFVwZGF0ZSBWZXJ0ZXggUHJvcGVydGllcworICogQHBhcmFtIHtTdHJpbmcsTnVtYmVyfSB2ZXJ0ZXhJZCBWZXJ0ZXggSWQKKyAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIFZlcnRleCBOYW1lIFByb3BlcnR5CisgKi8KK2NvbnN0IHVwZGF0ZVZlcnRleCA9IGFzeW5jICh2ZXJ0ZXhJZCwgbGFiZWwsIG5hbWUpID0+IHsKKyAgY29uc3QgdmVydGV4ID0gYXdhaXQgZy5WKHZlcnRleElkKS5wcm9wZXJ0eShzaW5nbGUsICduYW1lJywgbmFtZSkubmV4dCgpOworICByZXR1cm4gdmVydGV4LnZhbHVlOworfTsKK2BgYAorCitfX05PVEVfXyB0aGF0IHZlcnNpb25zIHN1ZmZpeGVkIHdpdGggIi1yYyIgYXJlIGNvbnNpZGVyZWQgcmVsZWFzZSBjYW5kaWRhdGVzIChpLmUuIHByZS1hbHBoYSwgYWxwaGEsIGJldGEsIGV0Yy4pIGFuZCB0aHVzCitmb3IgZWFybHkgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBUaGVzZSByZWxlYXNlcyBhcmUgbm90IHN1aXRhYmxlIGZvciBwcm9kdWN0aW9uLgorCitbdGtdOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnCitbZ3JlbWxpbl06IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZ3JlbWxpbi5odG1sCitbZG9jc106IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1qYXZhc2NyaXB0CitbZ3NdOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9yZWZlcmVuY2UvI2dyZW1saW4tc2VydmVyCitbcmdwXTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNjb25uZWN0aW5nLXJncAorW2NvbnNvbGVdOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC90dXRvcmlhbHMvdGhlLWdyZW1saW4tY29uc29sZS8KK1tzdGVwc106IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JhcGgtdHJhdmVyc2FsLXN0ZXBzCitbZGlmZmVyZW5jZXNdOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9yZWZlcmVuY2UvI2dyZW1saW4tamF2YXNjcmlwdC1kaWZmZXJlbmNlcwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvY2tlci1jb21wb3NlLnltbCBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvY2tlci1jb21wb3NlLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQ2NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZG9ja2VyLWNvbXBvc2UueW1sCkBAIC0wLDAgKzEsNzUgQEAKKyMgICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgICAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgICAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgICAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgICB1bmRlciB0aGUgTGljZW5zZS4KKworc2VydmljZXM6CisKKyAgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qczoKKyAgICBjb250YWluZXJfbmFtZTogZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qcworICAgIGltYWdlOiB0aW5rZXJwb3AvZ3JlbWxpbi1zZXJ2ZXItdGVzdDoke0dSRU1MSU5fU0VSVkVSfQorICAgIGJ1aWxkOgorICAgICAgY29udGV4dDogLi4vLi4vCisgICAgICBkb2NrZXJmaWxlOiBkb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlci9Eb2NrZXJmaWxlCisgICAgICBhcmdzOgorICAgICAgICAtIEdSRU1MSU5fU0VSVkVSPSR7R1JFTUxJTl9TRVJWRVJ9CisgICAgcG9ydHM6CisgICAgICAtICI0NTk0MDo0NTk0MCIKKyAgICAgIC0gIjQ1OTQxOjQ1OTQxIgorICAgICAgLSAiNDU5NDI6NDU5NDIiCisgICAgICAtICI0NTg4OjQ1ODgiCisgICAgdm9sdW1lczoKKyAgICAgIC0gJHtIT01FfS8uZ3Jvb3Z5Oi9yb290Ly5ncm9vdnkKKyAgICAgIC0gJHtIT01FfS8ubTI6L3Jvb3QvLm0yCisgICAgICAtICR7QUJTX1BST0pFQ1RfSE9NRX0vZ3JlbWxpbi10ZXN0L3RhcmdldDovb3B0L2dyZW1saW4tdGVzdAorICAgIGhlYWx0aGNoZWNrOgorICAgICAgdGVzdDogWyAiQ01ELVNIRUxMIiwgImN1cmwgLXNmIC1YIFBPU1QgLUggJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicgLWQgJ3tcImdyZW1saW5cIjpcImcuaW5qZWN0KDEpXCJ9JyBodHRwOi8vbG9jYWxob3N0OjQ1OTQwIiBdCisgICAgICBpbnRlcnZhbDogMzBzCisgICAgICB0aW1lb3V0OiAxMHMKKyAgICAgIHJldHJpZXM6IDMwCisgICAgICBzdGFydF9wZXJpb2Q6IDMwcworCisgIGdyZW1saW4tanMtaW50ZWdyYXRpb24tdGVzdHM6CisgICAgY29udGFpbmVyX25hbWU6IGdyZW1saW4tanMtaW50ZWdyYXRpb24tdGVzdHMKKyAgICBpbWFnZTogbm9kZToke05PREVfVkVSU0lPTjotMjJ9CisgICAgdXNlcjogIiR7SE9TVF9VSUQ6LTEwMDB9OiR7SE9TVF9HSUQ6LTEwMDB9IgorICAgIHZvbHVtZXM6CisgICAgICAtIC4uLy4uL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzOi9ncmVtbGluLXRlc3QKKyAgICAgIC0gLi4vLi4vZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeTovd29ya3NwYWNlL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2dyZW1saW4tdGVzdC9ncmFwaGJpbmFyeQorICAgICAgLSAuLi8uLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvcjovd29ya3NwYWNlL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yCisgICAgICAtIC4uLy4uL2RvY2tlci9ncmVtbGluLXRlc3Qtc2VydmVyOi93b3Jrc3BhY2UvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZ3JlbWxpbi10ZXN0LXNlcnZlcgorICAgICAgLSAuLi8uLi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mOi93b3Jrc3BhY2UvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmYvCisgICAgICAtIC4uLy4uL2dyZW1saW4tbGFuZ3VhZ2Uvc3JjL21haW4vYW50bHI0Oi9ncmVtbGluLWxhbmd1YWdlL3NyYy9tYWluL2FudGxyNAorICAgICAgLSAuLi8uLjovd29ya3NwYWNlCisgICAgZW52aXJvbm1lbnQ6CisgICAgICAtIERPQ0tFUl9FTlZJUk9OTUVOVD10cnVlCisgICAgICAtIEdSRU1MSU5fU0VSVkVSX1VSTD1odHRwOi8vZ3JlbWxpbi1zZXJ2ZXItdGVzdC1qczo0NTk0MC9ncmVtbGluCisgICAgICAtIFZFUlRFWF9MQUJFTD1qYXZhc2NyaXB0LWV4YW1wbGUKKyAgICAgIC0gSU9fVEVTVF9ESVJFQ1RPUlk9L3dvcmtzcGFjZS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9ncmVtbGluLXRlc3QvZ3JhcGhiaW5hcnkvCisgICAgICAtIE5QTV9DT05GSUdfQ0FDSEU9L3RtcC9ucG0tY2FjaGUKKyAgICB3b3JraW5nX2RpcjogL3dvcmtzcGFjZS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdAorICAgIGNvbW1hbmQ6ID4KKyAgICAgIGJhc2ggLWMgIm5wbSBjaSAmJiBucG0gcnVuIHRlc3QgJiYgbnBtIHJ1biBmZWF0dXJlcy1kb2NrZXIKKyAgICAgICYmIGVjaG8gJ1J1bm5pbmcgZXhhbXBsZXMnCisgICAgICAmJiBjZCAvd29ya3NwYWNlL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUKKyAgICAgICYmIG5vZGUgYmFzaWMtZ3JlbWxpbi5qcworICAgICAgJiYgbm9kZSBjb25uZWN0aW9ucy5qcworICAgICAgJiYgbm9kZSBtb2Rlcm4tdHJhdmVyc2Fscy5qcworICAgICAgJiYgZWNobyAnQWxsIGV4YW1wbGVzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknIgorICAgIGRlcGVuZHNfb246CisgICAgICBncmVtbGluLXNlcnZlci10ZXN0LWpzOgorICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQorCisKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2VzbGludC5jb25maWcubWpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXNsaW50LmNvbmZpZy5tanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczYjIyZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2VzbGludC5jb25maWcubWpzCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCBqcyBmcm9tICJAZXNsaW50L2pzIjsKK2ltcG9ydCBwcmV0dGllciBmcm9tICJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjsKK2ltcG9ydCBwcmV0dGllclBsdWdpbiBmcm9tICJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjsKK2ltcG9ydCBnbG9iYWxzIGZyb20gImdsb2JhbHMiOworCitleHBvcnQgZGVmYXVsdCBbCisgIGpzLmNvbmZpZ3MucmVjb21tZW5kZWQsCisgIHByZXR0aWVyLAorICB7CisgICAgcGx1Z2luczogeworICAgICAgcHJldHRpZXI6IHByZXR0aWVyUGx1Z2luLAorICAgIH0sCisgICAgbGFuZ3VhZ2VPcHRpb25zOiB7CisgICAgICBlY21hVmVyc2lvbjogMjAyMiwKKyAgICAgIHNvdXJjZVR5cGU6ICJtb2R1bGUiLAorICAgICAgZ2xvYmFsczogeworICAgICAgICAuLi5nbG9iYWxzLm5vZGUsCisgICAgICAgIC4uLmdsb2JhbHMuY29tbW9uanMsCisgICAgICAgIC4uLmdsb2JhbHMubW9jaGEsCisgICAgICAgIEJpZ0ludDogInJlYWRvbmx5IiwKKyAgICAgIH0sCisgICAgfSwKKyAgICBydWxlczogeworICAgICAgInByZXR0aWVyL3ByZXR0aWVyIjogWyJlcnJvciIsIHsgZW5kT2ZMaW5lOiAiYXV0byIgfV0sCisgICAgICAibGluZWJyZWFrLXN0eWxlIjogMCwKKyAgICAgIHF1b3RlczogWyJlcnJvciIsICJzaW5nbGUiXSwKKyAgICAgIHNlbWk6IFsiZXJyb3IiLCAiYWx3YXlzIl0sCisgICAgICAibm8tY29uc3RhbnQtY29uZGl0aW9uIjogWyJlcnJvciIsIHsgY2hlY2tMb29wczogZmFsc2UgfV0sCisgICAgICBzdHJpY3Q6IFsiZXJyb3IiLCAiZ2xvYmFsIl0sCisgICAgICAiYXJyYXktY2FsbGJhY2stcmV0dXJuIjogImVycm9yIiwKKyAgICAgIGN1cmx5OiAiZXJyb3IiLAorICAgICAgIm5vLXVudXNlZC12YXJzIjogWyJlcnJvciIsIHsgYXJnczogIm5vbmUiIH1dLAorICAgICAgImdsb2JhbC1yZXF1aXJlIjogImVycm9yIiwKKyAgICAgIGVxZXFlcTogWyJlcnJvciIsICJhbGxvdy1udWxsIl0sCisgICAgICAiZ3VhcmQtZm9yLWluIjogImVycm9yIiwKKyAgICAgICJuby1hbGVydCI6ICJlcnJvciIsCisgICAgICAibm8tY2FsbGVyIjogImVycm9yIiwKKyAgICAgICJuby1jYXNlLWRlY2xhcmF0aW9ucyI6ICJlcnJvciIsCisgICAgICAibm8tZWxzZS1yZXR1cm4iOiAiZXJyb3IiLAorICAgICAgIm5vLWVtcHR5LXBhdHRlcm4iOiAiZXJyb3IiLAorICAgICAgIm5vLWV2YWwiOiAiZXJyb3IiLAorICAgICAgIm5vLWV4dGVuZC1uYXRpdmUiOiAiZXJyb3IiLAorICAgICAgIm5vLWV4dHJhLWJpbmQiOiAiZXJyb3IiLAorICAgICAgIm5vLWV4dHJhLWxhYmVsIjogImVycm9yIiwKKyAgICAgICJuby1mbG9hdGluZy1kZWNpbWFsIjogImVycm9yIiwKKyAgICAgICJuby1nbG9iYWwtYXNzaWduIjogWyJlcnJvciIsIHsgZXhjZXB0aW9uczogW10gfV0sCisgICAgICAibm8taW1wbGljaXQtY29lcmNpb24iOiBbCisgICAgICAgICJvZmYiLAorICAgICAgICB7CisgICAgICAgICAgYm9vbGVhbjogZmFsc2UsCisgICAgICAgICAgbnVtYmVyOiB0cnVlLAorICAgICAgICAgIHN0cmluZzogdHJ1ZSwKKyAgICAgICAgICBhbGxvdzogW10sCisgICAgICAgIH0sCisgICAgICBdLAorICAgICAgIm5vLWltcGxpZWQtZXZhbCI6ICJlcnJvciIsCisgICAgICAibm8tbGFiZWxzIjogWyJlcnJvciIsIHsgYWxsb3dMb29wOiBmYWxzZSwgYWxsb3dTd2l0Y2g6IGZhbHNlIH1dLAorICAgICAgIm5vLWxvbmUtYmxvY2tzIjogImVycm9yIiwKKyAgICAgICJuby1sb29wLWZ1bmMiOiAiZXJyb3IiLAorICAgICAgIm5vLW11bHRpLXNwYWNlcyI6ICJlcnJvciIsCisgICAgICAibm8tbmV3IjogImVycm9yIiwKKyAgICAgICJuby1uZXctZnVuYyI6ICJlcnJvciIsCisgICAgICAibm8tbmV3LXdyYXBwZXJzIjogImVycm9yIiwKKyAgICAgICJuby1vY3RhbC1lc2NhcGUiOiAiZXJyb3IiLAorICAgICAgIm5vLXByb3RvIjogImVycm9yIiwKKyAgICAgICJuby1wcm90b3R5cGUtYnVpbHRpbnMiOiAwLAorICAgICAgIm5vLXJlZGVjbGFyZSI6ICJlcnJvciIsCisgICAgICAibm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzIjogWworICAgICAgICAiZXJyb3IiLAorICAgICAgICB7CisgICAgICAgICAgb2JqZWN0OiAiYXJndW1lbnRzIiwKKyAgICAgICAgICBwcm9wZXJ0eTogImNhbGxlZSIsCisgICAgICAgICAgbWVzc2FnZTogImFyZ3VtZW50cy5jYWxsZWUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICBwcm9wZXJ0eTogIl9fZGVmaW5lR2V0dGVyX18iLAorICAgICAgICAgIG1lc3NhZ2U6ICJQbGVhc2UgdXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpbnN0ZWFkLiIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICBwcm9wZXJ0eTogIl9fZGVmaW5lU2V0dGVyX18iLAorICAgICAgICAgIG1lc3NhZ2U6ICJQbGVhc2UgdXNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBpbnN0ZWFkLiIsCisgICAgICAgIH0sCisgICAgICBdLAorICAgICAgIm5vLXNlbGYtYXNzaWduIjogImVycm9yIiwKKyAgICAgICJuby1zZWxmLWNvbXBhcmUiOiAiZXJyb3IiLAorICAgICAgIm5vLXNlcXVlbmNlcyI6ICJlcnJvciIsCisgICAgICAibm8tdGhyb3ctbGl0ZXJhbCI6ICJlcnJvciIsCisgICAgICAibm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvbiI6ICJvZmYiLAorICAgICAgIm5vLXVudXNlZC1leHByZXNzaW9ucyI6IFsKKyAgICAgICAgImVycm9yIiwKKyAgICAgICAgeworICAgICAgICAgIGFsbG93U2hvcnRDaXJjdWl0OiBmYWxzZSwKKyAgICAgICAgICBhbGxvd1Rlcm5hcnk6IGZhbHNlLAorICAgICAgICB9LAorICAgICAgXSwKKyAgICAgICJuby11c2VsZXNzLWNhbGwiOiAib2ZmIiwKKyAgICAgICJuby11c2VsZXNzLWNvbmNhdCI6ICJlcnJvciIsCisgICAgICAibm8tdXNlbGVzcy1lc2NhcGUiOiAiZXJyb3IiLAorICAgICAgIm5vLXVzZWxlc3MtcmV0dXJuIjogImVycm9yIiwKKyAgICAgICJuby12b2lkIjogImVycm9yIiwKKyAgICAgICJuby13aXRoIjogImVycm9yIiwKKyAgICAgICJuby1idWZmZXItY29uc3RydWN0b3IiOiAiZXJyb3IiLAorICAgICAgcmFkaXg6ICJlcnJvciIsCisgICAgICAibm8tdmFyIjogImVycm9yIiwKKyAgICAgICJwcmVmZXItY29uc3QiOiAiZXJyb3IiLAorICAgICAgImFycm93LWJvZHktc3R5bGUiOiBbImVycm9yIiwgImFzLW5lZWRlZCJdLAorICAgICAgImFycm93LXNwYWNpbmciOiAiZXJyb3IiLAorICAgICAgIm5vLWNvbmZ1c2luZy1hcnJvdyI6IFsiZXJyb3IiLCB7IGFsbG93UGFyZW5zOiB0cnVlIH1dLAorICAgICAgeW9kYTogImVycm9yIiwKKyAgICAgICJjb25zdHJ1Y3Rvci1zdXBlciI6ICJlcnJvciIsCisgICAgICAicmVxdWlyZS1hd2FpdCI6ICJlcnJvciIsCisgICAgICAicmVxdWlyZS1hdG9taWMtdXBkYXRlcyI6ICJvZmYiLAorICAgIH0sCisgIH0sCisgIHsKKyAgICBpZ25vcmVzOiBbCisgICAgICAiYnVpbGQvKiovKiIsCisgICAgICAiZXhhbXBsZXMvKiovKiIsCisgICAgICAidGVzdC8qKi8qLmpzIiwKKyAgICAgICJkb2MvKiovKi5qcyIsCisgICAgICAibm9kZV9tb2R1bGVzLyoqLyoiLAorICAgICAgImVzbGludC5jb25maWcubWpzIiwKKyAgICBdLAorICB9LAorICB7CisgICAgZmlsZXM6IFsiKiovKi5janMiXSwKKyAgICBsYW5ndWFnZU9wdGlvbnM6IHsKKyAgICAgIHNvdXJjZVR5cGU6ICJjb21tb25qcyIsCisgICAgfSwKKyAgICBydWxlczogeworICAgICAgc3RyaWN0OiBbImVycm9yIiwgInNhZmUiXSwKKyAgICB9LAorICB9LAorICB7CisgICAgZmlsZXM6IFsiZXNsaW50LmNvbmZpZy5tanMiXSwKKyAgICBsYW5ndWFnZU9wdGlvbnM6IHsKKyAgICAgIHNvdXJjZVR5cGU6ICJtb2R1bGUiLAorICAgIH0sCisgIH0sCitdOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvLmdpdGlnbm9yZSBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvLmdpdGlnbm9yZQpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci8ueWFybnJjLnltbCBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvLnlhcm5yYy55bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyLy55YXJucmMueW1sCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyLy55YXJucmMueW1sCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9pbmRleC5jc3MgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL2luZGV4LmNzcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvaW5kZXguY3NzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL2luZGV4LmNzcwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9pbmRleC5odG1sIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOGY3ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwzMiBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzwhRE9DVFlQRSBodG1sPgorPGh0bWwgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8dGl0bGU+R3JlbWxpbiBKYXZhU2NyaXB0PC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImluZGV4LmNzcyIgLz4KKyAgPC9oZWFkPgorICA8Ym9keT4KKyAgICA8bWFpbiBpZD0iZ3JhcGgiPjwvbWFpbj4KKyAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgc3JjPSJpbmRleC50cyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvaW5kZXgudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL2luZGV4LnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNGU5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL2luZGV4LnRzCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IENvbG9yIGZyb20gImNvbG9yanMuaW8iOworaW1wb3J0IGN5dG9zY2FwZSBmcm9tICJjeXRvc2NhcGUiOworaW1wb3J0ICogYXMgZ3JlbWxpbiBmcm9tICJncmVtbGluIjsKK2ltcG9ydCB0eXBlIHsgRWRnZSwgVmVydGV4IH0gZnJvbSAiZ3JlbWxpbi9idWlsZC9lc20vc3RydWN0dXJlL2dyYXBoIjsKK2ltcG9ydCB7IGNyZWF0ZVJhbmRvbUNvbG9yR2VuZXJhdG9yIH0gZnJvbSAiLi91dGlscyI7CisKK2NvbnN0IHJhbmRvbUNvbG9yID0gY3JlYXRlUmFuZG9tQ29sb3JHZW5lcmF0b3IoKTsKKworY29uc3QgZyA9IGdyZW1saW4ucHJvY2Vzcy5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsKCkud2l0aF8oCisgIG5ldyBncmVtbGluLmRyaXZlci5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uKCJodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbiIpCispOworCitjb25zdCBbdmVydGljZXMsIGVkZ2VzXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKKyAgYXdhaXQgZy5WKCkudG9MaXN0PFZlcnRleD4oKSwKKyAgYXdhaXQgZy5FKCkudG9MaXN0PEVkZ2U+KCksCitdKTsKKworY3l0b3NjYXBlKHsKKyAgY29udGFpbmVyOiBnbG9iYWxUaGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLAorICBlbGVtZW50czogWworICAgIC4uLnZlcnRpY2VzLm1hcCgodmVydGV4KSA9PiAoeworICAgICAgZGF0YTogeworICAgICAgICBpZDogdmVydGV4LmlkLAorICAgICAgfSwKKyAgICAgIHN0eWxlOiB7CisgICAgICAgIGxhYmVsOiBgJHt2ZXJ0ZXgubGFiZWx9XG4ke3ZlcnRleC5pZH1gLAorICAgICAgICAiYmFja2dyb3VuZC1jb2xvciI6IHJhbmRvbUNvbG9yKHZlcnRleC5sYWJlbCksCisgICAgICAgICJib3JkZXItY29sb3IiOiBuZXcgQ29sb3IocmFuZG9tQ29sb3IodmVydGV4LmxhYmVsKSkuZGFya2VuKCkudG9TdHJpbmcoCisgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcgorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZvcm1hdDogImhleCIsCisgICAgICAgICAgfQorICAgICAgICApLAorICAgICAgfSwKKyAgICB9KSksCisgICAgLi4uZWRnZXMubWFwKChlZGdlKSA9PiAoeworICAgICAgZGF0YTogeworICAgICAgICBpZDogZWRnZS5pZCwKKyAgICAgICAgbGFiZWw6IGVkZ2UubGFiZWwsCisgICAgICAgIHNvdXJjZTogZWRnZS5pblYuaWQsCisgICAgICAgIHRhcmdldDogZWRnZS5vdXRWLmlkLAorICAgICAgfSwKKyAgICB9KSksCisgIF0sCisgIHN0eWxlOiBbCisgICAgeworICAgICAgc2VsZWN0b3I6ICJub2RlIiwKKyAgICAgIHN0eWxlOiB7CisgICAgICAgIGNvbG9yOiAid2hpdGUiLAorICAgICAgICAidGV4dC12YWxpZ24iOiAiY2VudGVyIiwKKyAgICAgICAgInRleHQtaGFsaWduIjogImNlbnRlciIsCisgICAgICAgICJib3JkZXItd2lkdGgiOiA0LAorICAgICAgICB3aWR0aDogIjgwcHgiLAorICAgICAgICBoZWlnaHQ6ICI4MHB4IiwKKyAgICAgICAgInRleHQtbWF4LXdpZHRoIjogIjgwcHgiLAorICAgICAgICAidGV4dC13cmFwIjogIndyYXAiLAorICAgICAgfSwKKyAgICB9LAorCisgICAgeworICAgICAgc2VsZWN0b3I6ICJlZGdlIiwKKyAgICAgIHN0eWxlOiB7CisgICAgICAgIGxhYmVsOiAiZGF0YShsYWJlbCkiLAorICAgICAgICBjb2xvcjogIndoaXRlIiwKKyAgICAgICAgInRleHQtb3V0bGluZS1jb2xvciI6ICJibGFjayIsCisgICAgICAgICJ0ZXh0LW91dGxpbmUtd2lkdGgiOiAiMnB4IiwKKyAgICAgICAgInRleHQtbWFyZ2luLXkiOiAiLTZweCIsCisgICAgICAgICJ0ZXh0LXJvdGF0aW9uIjogImF1dG9yb3RhdGUiLAorICAgICAgICAidGFyZ2V0LWFycm93LXNoYXBlIjogInRyaWFuZ2xlIiwKKyAgICAgICAgImN1cnZlLXN0eWxlIjogImJlemllciIsCisgICAgICB9LAorICAgIH0sCisgIF0sCisgIGxheW91dDogeworICAgIG5hbWU6ICJjb3NlIiwKKyAgfSwKK30pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvcGFja2FnZS5qc29uIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9wYWNrYWdlLmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL3BhY2thZ2UuanNvbgpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci9wYWNrYWdlLmpzb24KZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9icm93c2VyL3V0aWxzLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci91dGlscy50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvdXRpbHMuanMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIvdXRpbHMudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIveWFybi5sb2NrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvYnJvd3Nlci95YXJuLmxvY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlNDQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL2Jyb3dzZXIveWFybi5sb2NrCkBAIC0wLDAgKzEsMTQ5OCBAQAorIyBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgInlhcm4gaW5zdGFsbCIgaW5zaWRlIHlvdXIgcHJvamVjdC4KKyMgTWFudWFsIGNoYW5nZXMgbWlnaHQgYmUgbG9zdCAtIHByb2NlZWQgd2l0aCBjYXV0aW9uIQorCitfX21ldGFkYXRhOgorICB2ZXJzaW9uOiA4CisgIGNhY2hlS2V5OiAxMGMwCisKKyJAZXNidWlsZC9haXgtcHBjNjRAbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC9haXgtcHBjNjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWFpeCAmIGNwdT1wcGM2NAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL2FuZHJvaWQtYXJtNjRAbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC9hbmRyb2lkLWFybTY0QG5wbTowLjE5LjEyIgorICBjb25kaXRpb25zOiBvcz1hbmRyb2lkICYgY3B1PWFybTY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvYW5kcm9pZC1hcm1AbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC9hbmRyb2lkLWFybUBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9YW5kcm9pZCAmIGNwdT1hcm0KKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC9hbmRyb2lkLXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2FuZHJvaWQteDY0QG5wbTowLjE5LjEyIgorICBjb25kaXRpb25zOiBvcz1hbmRyb2lkICYgY3B1PXg2NAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL2Rhcndpbi1hcm02NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2Rhcndpbi1hcm02NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9ZGFyd2luICYgY3B1PWFybTY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvZGFyd2luLXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2Rhcndpbi14NjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWRhcndpbiAmIGNwdT14NjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC9mcmVlYnNkLWFybTY0QG5wbTowLjE5LjEyIjoKKyAgdmVyc2lvbjogMC4xOS4xMgorICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvZnJlZWJzZC1hcm02NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9ZnJlZWJzZCAmIGNwdT1hcm02NAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL2ZyZWVic2QteDY0QG5wbTowLjE5LjEyIjoKKyAgdmVyc2lvbjogMC4xOS4xMgorICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvZnJlZWJzZC14NjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWZyZWVic2QgJiBjcHU9eDY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvbGludXgtYXJtNjRAbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC9saW51eC1hcm02NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9YXJtNjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC9saW51eC1hcm1AbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC9saW51eC1hcm1AbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PWFybQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL2xpbnV4LWlhMzJAbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC9saW51eC1pYTMyQG5wbTowLjE5LjEyIgorICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1pYTMyCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvbGludXgtbG9vbmc2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LWxvb25nNjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PWxvb25nNjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC9saW51eC1taXBzNjRlbEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LW1pcHM2NGVsQG5wbTowLjE5LjEyIgorICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1taXBzNjRlbAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL2xpbnV4LXBwYzY0QG5wbTowLjE5LjEyIjoKKyAgdmVyc2lvbjogMC4xOS4xMgorICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvbGludXgtcHBjNjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PXBwYzY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvbGludXgtcmlzY3Y2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LXJpc2N2NjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPWxpbnV4ICYgY3B1PXJpc2N2NjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC9saW51eC1zMzkweEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LXMzOTB4QG5wbTowLjE5LjEyIgorICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1zMzkweAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL2xpbnV4LXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL2xpbnV4LXg2NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9eDY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvbmV0YnNkLXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL25ldGJzZC14NjRAbnBtOjAuMTkuMTIiCisgIGNvbmRpdGlvbnM6IG9zPW5ldGJzZCAmIGNwdT14NjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC9vcGVuYnNkLXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL29wZW5ic2QteDY0QG5wbTowLjE5LjEyIgorICBjb25kaXRpb25zOiBvcz1vcGVuYnNkICYgY3B1PXg2NAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL3N1bm9zLXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL3N1bm9zLXg2NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9c3Vub3MgJiBjcHU9eDY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGVzYnVpbGQvd2luMzItYXJtNjRAbnBtOjAuMTkuMTIiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJAZXNidWlsZC93aW4zMi1hcm02NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9YXJtNjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAZXNidWlsZC93aW4zMi1pYTMyQG5wbTowLjE5LjEyIjoKKyAgdmVyc2lvbjogMC4xOS4xMgorICByZXNvbHV0aW9uOiAiQGVzYnVpbGQvd2luMzItaWEzMkBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9aWEzMgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBlc2J1aWxkL3dpbjMyLXg2NEBucG06MC4xOS4xMiI6CisgIHZlcnNpb246IDAuMTkuMTIKKyAgcmVzb2x1dGlvbjogIkBlc2J1aWxkL3dpbjMyLXg2NEBucG06MC4xOS4xMiIKKyAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9eDY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQGlzYWFjcy9jbGl1aUBucG06XjguMC4yIjoKKyAgdmVyc2lvbjogOC4wLjIKKyAgcmVzb2x1dGlvbjogIkBpc2FhY3MvY2xpdWlAbnBtOjguMC4yIgorICBkZXBlbmRlbmNpZXM6CisgICAgc3RyaW5nLXdpZHRoOiAibnBtOl41LjEuMiIKKyAgICBzdHJpbmctd2lkdGgtY2pzOiAibnBtOnN0cmluZy13aWR0aEBeNC4yLjAiCisgICAgc3RyaXAtYW5zaTogIm5wbTpeNy4wLjEiCisgICAgc3RyaXAtYW5zaS1janM6ICJucG06c3RyaXAtYW5zaUBeNi4wLjEiCisgICAgd3JhcC1hbnNpOiAibnBtOl44LjEuMCIKKyAgICB3cmFwLWFuc2ktY2pzOiAibnBtOndyYXAtYW5zaUBeNy4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2IxYmY0MjUzNWQ0OWYxMWRjMTM3ZjE4ZDVlNGU2M2EyOGM1NTY5ZGU0MzhhMjIxYzM2OTQ4MzczMWU5ZGFjOWZiNzk3YWY1NTRlOGJmMDJiNjE5MmQxZTVlYmE2ZTY0MDJjZjkzOTAwYzNkMGFjODYzOTFkMDBkMDQ4NzY3ODllCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQG5wbWNsaS9hZ2VudEBucG06XjIuMC4wIjoKKyAgdmVyc2lvbjogMi4yLjEKKyAgcmVzb2x1dGlvbjogIkBucG1jbGkvYWdlbnRAbnBtOjIuMi4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWdlbnQtYmFzZTogIm5wbTpeNy4xLjAiCisgICAgaHR0cC1wcm94eS1hZ2VudDogIm5wbTpeNy4wLjAiCisgICAgaHR0cHMtcHJveHktYWdlbnQ6ICJucG06XjcuMC4xIgorICAgIGxydS1jYWNoZTogIm5wbTpeMTAuMC4xIgorICAgIHNvY2tzLXByb3h5LWFnZW50OiAibnBtOl44LjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvMzhlZTVjYmU4ZjNjZGUxM2JlOTE2ZTcxN2JmYzU0ZmQxYTc2MDVjMDdhZjA1NjM2OWZmODk0ZTI0NGMyMjFlMGI1NmIwOGNhNTIxMzQ1NzQ3N2Y5YmMxNWJjYTllNzI5ZDUxYTQ3ODg4MjliNWMzY2YyOTZiM2M5OTYxNDdmNzYKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAbnBtY2xpL2ZzQG5wbTpeMy4xLjAiOgorICB2ZXJzaW9uOiAzLjEuMAorICByZXNvbHV0aW9uOiAiQG5wbWNsaS9mc0BucG06My4xLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBzZW12ZXI6ICJucG06XjcuMy41IgorICBjaGVja3N1bTogMTBjMC8xNjJiNGEwYjg3MDVjZDZmNWMyNDcwYjg1MWQxZGM2Y2QyMjhjODZkMjE3MGUxNzY5ZDczOGMxZmJiNjlhODcxNjA5MDE0MTFjM2MwMzUzMzFlOWU5OWRiNzJmMWYxMDk5YThiNzM0YmYxNjM3Y2MzMmI5YTViZTE2NjBlNGUxZQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkBwa2dqcy9wYXJzZWFyZ3NAbnBtOl4wLjExLjAiOgorICB2ZXJzaW9uOiAwLjExLjAKKyAgcmVzb2x1dGlvbjogIkBwa2dqcy9wYXJzZWFyZ3NAbnBtOjAuMTEuMCIKKyAgY2hlY2tzdW06IDEwYzAvNWJkNzU3NmJiMWIzOGE0N2E3ZmM3YjUxYWM5ZjM4NzQ4ZTc3MmJlZWJjNTYyMDA0NTBjNGE4MTdkNzEyMjMyYjhmMWQzZWY3MDUzMmM4MDg0MDI0M2M2NTdkNDkxY2Y2YTZiZTFlM2EyMTRjZmY5MDc2NDU4MTlmZGMzNGFhZGQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybS1lYWJpQG5wbTo0LjEyLjAiOgorICB2ZXJzaW9uOiA0LjEyLjAKKyAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtLWVhYmlAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9YW5kcm9pZCAmIGNwdT1hcm0KKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybTY0QG5wbTo0LjEyLjAiOgorICB2ZXJzaW9uOiA0LjEyLjAKKyAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtNjRAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9YW5kcm9pZCAmIGNwdT1hcm02NAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkByb2xsdXAvcm9sbHVwLWRhcndpbi1hcm02NEBucG06NC4xMi4wIjoKKyAgdmVyc2lvbjogNC4xMi4wCisgIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4tYXJtNjRAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9ZGFyd2luICYgY3B1PWFybTY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHJvbGx1cC9yb2xsdXAtZGFyd2luLXg2NEBucG06NC4xMi4wIjoKKyAgdmVyc2lvbjogNC4xMi4wCisgIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0QG5wbTo0LjEyLjAiCisgIGNvbmRpdGlvbnM6IG9zPWRhcndpbiAmIGNwdT14NjQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmQG5wbTo0LjEyLjAiOgorICB2ZXJzaW9uOiA0LjEyLjAKKyAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybS1nbnVlYWJpaGZAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9YXJtCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtZ251QG5wbTo0LjEyLjAiOgorICB2ZXJzaW9uOiA0LjEyLjAKKyAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LWdudUBucG06NC4xMi4wIgorICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1hcm02NCAmIGxpYmM9Z2xpYmMKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsQG5wbTo0LjEyLjAiOgorICB2ZXJzaW9uOiA0LjEyLjAKKyAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LW11c2xAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9YXJtNjQgJiBsaWJjPW11c2wKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJAcm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudUBucG06NC4xMi4wIjoKKyAgdmVyc2lvbjogNC4xMi4wCisgIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC1saW51eC1yaXNjdjY0LWdudUBucG06NC4xMi4wIgorICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT1yaXNjdjY0ICYgbGliYz1nbGliYworICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIkByb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1nbnVAbnBtOjQuMTIuMCI6CisgIHZlcnNpb246IDQuMTIuMAorICByZXNvbHV0aW9uOiAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudUBucG06NC4xMi4wIgorICBjb25kaXRpb25zOiBvcz1saW51eCAmIGNwdT14NjQgJiBsaWJjPWdsaWJjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2xAbnBtOjQuMTIuMCI6CisgIHZlcnNpb246IDQuMTIuMAorICByZXNvbHV0aW9uOiAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2xAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9bGludXggJiBjcHU9eDY0ICYgbGliYz1tdXNsCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2Y0BucG06NC4xMi4wIjoKKyAgdmVyc2lvbjogNC4xMi4wCisgIHJlc29sdXRpb246ICJAcm9sbHVwL3JvbGx1cC13aW4zMi1hcm02NC1tc3ZjQG5wbTo0LjEyLjAiCisgIGNvbmRpdGlvbnM6IG9zPXdpbjMyICYgY3B1PWFybTY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHJvbGx1cC9yb2xsdXAtd2luMzItaWEzMi1tc3ZjQG5wbTo0LjEyLjAiOgorICB2ZXJzaW9uOiA0LjEyLjAKKyAgcmVzb2x1dGlvbjogIkByb2xsdXAvcm9sbHVwLXdpbjMyLWlhMzItbXN2Y0BucG06NC4xMi4wIgorICBjb25kaXRpb25zOiBvcz13aW4zMiAmIGNwdT1pYTMyCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmNAbnBtOjQuMTIuMCI6CisgIHZlcnNpb246IDQuMTIuMAorICByZXNvbHV0aW9uOiAiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmNAbnBtOjQuMTIuMCIKKyAgY29uZGl0aW9uczogb3M9d2luMzIgJiBjcHU9eDY0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiQHR5cGVzL2VzdHJlZUBucG06MS4wLjUiOgorICB2ZXJzaW9uOiAxLjAuNQorICByZXNvbHV0aW9uOiAiQHR5cGVzL2VzdHJlZUBucG06MS4wLjUiCisgIGNoZWNrc3VtOiAxMGMwL2IzYjBlMzM0Mjg4ZGRiNDA3YzdiMzM1N2NhNjdkYmVlNzVlZTIyZGIyNDJjYTdjNTZmZTI3ZGI0ZTFhMzE5ODljYjhhZjQ4YTg0ZGQ0MDFkZWI3ODdmZTEwY2M2YjJhYjFlZTgyZGM0NzgzYmU4N2VkZWRiZTNkNTNjNzljNzBkCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYWJicmV2QG5wbTpeMi4wLjAiOgorICB2ZXJzaW9uOiAyLjAuMAorICByZXNvbHV0aW9uOiAiYWJicmV2QG5wbToyLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvZjc0MmE1YTEwNzQ3Mzk0NmY0MjZjNjkxYzA4ZGFiYTYxYTFkMTU5NDI2MTZmMzAwYjVkMzJmZDczNWJlODhmZWY1Y2JhMjQyMDE3NTdiNmM0MDdmZDU2NDU1NWZiNDhjNzUxY2ZhMzM1MTliMjYwNWM4YTdhYWRkMjJiYWYzNzIKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJhYm9ydC1jb250cm9sbGVyQG5wbTpeMy4wLjAiOgorICB2ZXJzaW9uOiAzLjAuMAorICByZXNvbHV0aW9uOiAiYWJvcnQtY29udHJvbGxlckBucG06My4wLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBldmVudC10YXJnZXQtc2hpbTogIm5wbTpeNS4wLjAiCisgIGNoZWNrc3VtOiAxMGMwLzkwY2NjNTBmMDEwMjUwMTUyNTA5YTM0NGViMmU3MTk3N2ZiZjhkYjBhYjhmMTA2MTE5N2UzMjc1ZGRmNmM2MWE0MWE2ZWRmZDdiOTQwOWM2NjQ1MTMxMzFkZDk2ZTk2MjA2NTQxNTMyNWVmMjNlZmE1ZGI5MzFiMzgyZDI0Y2E1CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYWdlbnQtYmFzZUBucG06XjcuMC4yLCBhZ2VudC1iYXNlQG5wbTpeNy4xLjAiOgorICB2ZXJzaW9uOiA3LjEuMAorICByZXNvbHV0aW9uOiAiYWdlbnQtYmFzZUBucG06Ny4xLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBkZWJ1ZzogIm5wbTpeNC4zLjQiCisgIGNoZWNrc3VtOiAxMGMwL2ZjOTc0YWI1N2ZmZGQ4NDIxYTJiYzMzOTY0NGQzMTJhOWNjYTMyMGMyMGMzMzkzYzlkOGIxZmQ5MTczMWI5YmJhYmRiOTg1ZGY1ZmM4NjBmNWI3OWQ4MWMzZTM1MGRhYTNmY2IzMWM1YzA3YzBiYjM4NWFhZmM4MTdkZjAwNGNlCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYWdncmVnYXRlLWVycm9yQG5wbTpeMy4wLjAiOgorICB2ZXJzaW9uOiAzLjEuMAorICByZXNvbHV0aW9uOiAiYWdncmVnYXRlLWVycm9yQG5wbTozLjEuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGNsZWFuLXN0YWNrOiAibnBtOl4yLjAuMCIKKyAgICBpbmRlbnQtc3RyaW5nOiAibnBtOl40LjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvYTQyZjY3ZmFhNzllM2U2Njg3YTQ5MjMwNTBlN2M5ODA3ZGIzODQ4YTAzNzA3NmY3OTFkMTBlMDkyNjc3ZDY1YzFkMmQ4NjNiNzg0ODU2MDY5OWY0MGZjMDUwMmMxOWY0MDk2M2ZiMWNkMWZiM2QzMzhhNzQyM2RmOGU0NWUwMzkKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJhbnNpLXJlZ2V4QG5wbTpeNS4wLjEiOgorICB2ZXJzaW9uOiA1LjAuMQorICByZXNvbHV0aW9uOiAiYW5zaS1yZWdleEBucG06NS4wLjEiCisgIGNoZWNrc3VtOiAxMGMwLzlhNjRiYjg2MjdiNDM0YmE5MzI3YjYwYzAyNzc0MmU1ZDE3YWM2OTI3Nzk2MGQwNDE4OTg1OTYyNzFkOTkyZDRkNTJiYTcyNjdhNjNjYTEwMjMyZTI5ZjYxMDdmYzhhODM1ZjZjZThkNzE5Yjg4YzVmODQ5M2Y4MjU0ODEzNzM3CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYW5zaS1yZWdleEBucG06XjYuMC4xIjoKKyAgdmVyc2lvbjogNi4wLjEKKyAgcmVzb2x1dGlvbjogImFuc2ktcmVnZXhAbnBtOjYuMC4xIgorICBjaGVja3N1bTogMTBjMC9jYmUxNmRiZDJjNmIyNzM1ZDFkZjc5NzZhNzA3MGRkMjc3MzI2NDM0ZjAyMTJmNDNhYmY2ZDg3Njc0MDk1ZDI0Nzk2ODIwOWJhYmRhYWQzMWJiMDA4ODJmYTY4ODA3MjU2YmE5YmUzNDBlZWMyZjEwMDRkZTE0Y2E3NWY1MmEwOAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImFuc2ktc3R5bGVzQG5wbTpeNC4wLjAiOgorICB2ZXJzaW9uOiA0LjMuMAorICByZXNvbHV0aW9uOiAiYW5zaS1zdHlsZXNAbnBtOjQuMy4wIgorICBkZXBlbmRlbmNpZXM6CisgICAgY29sb3ItY29udmVydDogIm5wbTpeMi4wLjEiCisgIGNoZWNrc3VtOiAxMGMwLzg5NWEyMzkyOWRhNDE2ZjJiZDNkZTdlOWNiNGVhYmQzNDA5NDkzMjhhYjg1ZGRkNmU0ODRhNjM3ZDhmNjgyMGQ0ODVmNTM5MzM0NDZmNTI5MWMzYjc2MGNiYzQ4OGJlYjhlODg1NzNkZDBmOWM3ZGFmODNkY2NjOGZlODFiMDQxCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYW5zaS1zdHlsZXNAbnBtOl42LjEuMCI6CisgIHZlcnNpb246IDYuMi4xCisgIHJlc29sdXRpb246ICJhbnNpLXN0eWxlc0BucG06Ni4yLjEiCisgIGNoZWNrc3VtOiAxMGMwLzVkMWVjMzhjMTIzOTg0YmNlZGQ5OTZlYWM2ODBkNTQ4ZjMxODI4YmQ2NzlhNjZkYjJiZGYxMTg0NDYzNGRkZTU1ZmVjM2VmYTljNmJiMWQ4OTA1NmE1ZTc5YzFhYzU0MGM0Yzc4NGQ1OTJlYTFkMjUwMjhhOTIyMjdkMmYyZDVjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYmFsYW5jZWQtbWF0Y2hAbnBtOl4xLjAuMCI6CisgIHZlcnNpb246IDEuMC4yCisgIHJlc29sdXRpb246ICJiYWxhbmNlZC1tYXRjaEBucG06MS4wLjIiCisgIGNoZWNrc3VtOiAxMGMwLzkzMDhiYWYwYTdlNDgzOGE4MmJiZmQxMWUwMWIxY2IwZjBjZjI4OTNiYzE2NzZjMjdjMmE4YzBlNzBjYmFlMWM1OTEyMGMzMjY4NTE3YThhZTdmYjYzNzZiNDYzOWVmODFjYTIyNTgyNjExZGJlZTRlZDI4ZGY5NDUxMzRhYWVlCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiYmFzZTY0LWpzQG5wbTpeMS4zLjEiOgorICB2ZXJzaW9uOiAxLjUuMQorICByZXNvbHV0aW9uOiAiYmFzZTY0LWpzQG5wbToxLjUuMSIKKyAgY2hlY2tzdW06IDEwYzAvZjIzODIzNTEzYjYzMTczYTAwMTAzMGZhZTRmMmRhYmUyODNiOTlhOWQzMjRhZGUzYWQzZDE0OGUyMTgxMzQ2NzZmMWVlODU2OGM4NzdjZDc5ZWMxYzUzMTU4ZGNmMmQyYmE1MjdhOTdjNjA2NjE4OTI4YmE5OWRkOTMwMTAyYmYKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJicmFjZS1leHBhbnNpb25AbnBtOl4yLjAuMSI6CisgIHZlcnNpb246IDIuMC4xCisgIHJlc29sdXRpb246ICJicmFjZS1leHBhbnNpb25AbnBtOjIuMC4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFsYW5jZWQtbWF0Y2g6ICJucG06XjEuMC4wIgorICBjaGVja3N1bTogMTBjMC9iMzU4ZjJmZTA2MGUyZDdhODdhYTAxNTk3OWVjZWEwN2YzYzM3ZDQwMThmOGQ2ZGViNWJkNGMyMjlhZDNhMDM4NGZlNjAyOWJiNzZjZDhiZTYzYzgxZTUxNmVlNTJkMWEwNjczZWRiZTIwMjNkNTNhNTE5MTczMmFlM2MzZTQ5ZgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImJyb3dzZXJAd29ya3NwYWNlOi4iOgorICB2ZXJzaW9uOiAwLjAuMC11c2UubG9jYWwKKyAgcmVzb2x1dGlvbjogImJyb3dzZXJAd29ya3NwYWNlOi4iCisgIGRlcGVuZGVuY2llczoKKyAgICBjb2xvcmpzLmlvOiAibnBtOl4wLjUuMCIKKyAgICBjeXRvc2NhcGU6ICJucG06XjMuMjguMSIKKyAgICBncmVtbGluOiAiZmlsZTouLi8uLi9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdCIKKyAgICB2aXRlOiAibnBtOl41LjEuNCIKKyAgbGFuZ3VhZ2VOYW1lOiB1bmtub3duCisgIGxpbmtUeXBlOiBzb2Z0CisKKyJidWZmZXJAbnBtOl42LjAuMyI6CisgIHZlcnNpb246IDYuMC4zCisgIHJlc29sdXRpb246ICJidWZmZXJAbnBtOjYuMC4zIgorICBkZXBlbmRlbmNpZXM6CisgICAgYmFzZTY0LWpzOiAibnBtOl4xLjMuMSIKKyAgICBpZWVlNzU0OiAibnBtOl4xLjIuMSIKKyAgY2hlY2tzdW06IDEwYzAvMmE5MDVmYmJjZGU3M2NjNWQ4YmQxOGQxY2FhMjM3MTVkNWY4M2E1OTM1ODY3YzIzMjlmMGFjMDYxMDQyMDRiYTc5NDdiZTA5OGZlMTMxN2ZiZDg4MzBlMjYwOTBmZjhlNzY0ZjA4Y2QxNGZlZmM5NzdiYjI0OGMzNDg3YmNiZDAKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJjYWNhY2hlQG5wbTpeMTguMC4wIjoKKyAgdmVyc2lvbjogMTguMC4yCisgIHJlc29sdXRpb246ICJjYWNhY2hlQG5wbToxOC4wLjIiCisgIGRlcGVuZGVuY2llczoKKyAgICAiQG5wbWNsaS9mcyI6ICJucG06XjMuMS4wIgorICAgIGZzLW1pbmlwYXNzOiAibnBtOl4zLjAuMCIKKyAgICBnbG9iOiAibnBtOl4xMC4yLjIiCisgICAgbHJ1LWNhY2hlOiAibnBtOl4xMC4wLjEiCisgICAgbWluaXBhc3M6ICJucG06XjcuMC4zIgorICAgIG1pbmlwYXNzLWNvbGxlY3Q6ICJucG06XjIuMC4xIgorICAgIG1pbmlwYXNzLWZsdXNoOiAibnBtOl4xLjAuNSIKKyAgICBtaW5pcGFzcy1waXBlbGluZTogIm5wbTpeMS4yLjQiCisgICAgcC1tYXA6ICJucG06XjQuMC4wIgorICAgIHNzcmk6ICJucG06XjEwLjAuMCIKKyAgICB0YXI6ICJucG06XjYuMS4xMSIKKyAgICB1bmlxdWUtZmlsZW5hbWU6ICJucG06XjMuMC4wIgorICBjaGVja3N1bTogMTBjMC83OTkyNjY1MzA1Y2MyNTFhOTg0ZjRmZGJhYjE0NDlkNTBlODhjNjM1YmM0M2JmMjc4NTUzMGM2MWQyMzljNjFiMzQ5ZTU3MzQ0NjFiYWE0NjFjYWFlZTY1ZjA0MGFiMTRlMmQ1OGU2OTRmNDc5YzA4MTBjZmZkMTgxYmE1ZWFiYworICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImNob3duckBucG06XjIuMC4wIjoKKyAgdmVyc2lvbjogMi4wLjAKKyAgcmVzb2x1dGlvbjogImNob3duckBucG06Mi4wLjAiCisgIGNoZWNrc3VtOiAxMGMwLzU5NDc1NGUxMzAzNjcyMTcxY2MwNGU1MGY2YzM5OGFlMTYxMjhlYjEzNGE4OGY4MDFiZjUzNTRmZDk2ZjIwNTMyMGYyMzUzNmEwNDVkOWFiZDhiNTEwMjRhMTQ5Njk2ZTUxMjMxNTY1ODkxZDRlZmRhYjg4NDYwMjFlY2Y4OGU2CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiY2xlYW4tc3RhY2tAbnBtOl4yLjAuMCI6CisgIHZlcnNpb246IDIuMi4wCisgIHJlc29sdXRpb246ICJjbGVhbi1zdGFja0BucG06Mi4yLjAiCisgIGNoZWNrc3VtOiAxMGMwLzFmOTAyNjJkNWY2MjMwYTE3ZTI3ZDBjMTkwYjA5ZDQ3ZWJlN2VmZGQ3NmEwM2I1YTExMjc4NjNmN2IzYzlhZWM0YzNlNmM4YmIzYTdiYmY4MWQ1NTNkNTZhMWZkMzU3MjhmNWE4ZWY0YzYzZjg2N2FjOGQ2OTAxMDk3NDJhOGMxCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiY29sb3ItY29udmVydEBucG06XjIuMC4xIjoKKyAgdmVyc2lvbjogMi4wLjEKKyAgcmVzb2x1dGlvbjogImNvbG9yLWNvbnZlcnRAbnBtOjIuMC4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgY29sb3ItbmFtZTogIm5wbTp+MS4xLjQiCisgIGNoZWNrc3VtOiAxMGMwLzM3ZTExNTAxNzJmMmUzMTFmZTFiMmRmNjJjNjI5M2EzNDJlZTczODBkYTdiOWNmZGJhNjdlYTUzOTkwOWFmYmQ3NGRhMjcwMzMyMDhkMDFkNmQ1Y2ZjNjVlZTc4NjhhMjJlMThkN2U3NjQ4ZTAwNDQyNTQ0MWMwZjhhMTVhN2Q3CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiY29sb3ItbmFtZUBucG06fjEuMS40IjoKKyAgdmVyc2lvbjogMS4xLjQKKyAgcmVzb2x1dGlvbjogImNvbG9yLW5hbWVAbnBtOjEuMS40IgorICBjaGVja3N1bTogMTBjMC9hMWEzZjkxNDE1Njk2MDkwMmY0NmY3ZjU2YmM2MmVmZmM2Yzk0ZTg0YjJjYWUxNTdhNTI2YjFjMWY3NGI2NzdhNDdlYzYwMmJmNjhhNjFhYmZhMmI0MmQxNWI3YzU2NTFjNmRiZTcyYTQzYWY3MjBiYzU4OGRmZjg4NWIxMGY5NQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImNvbG9yanMuaW9AbnBtOl4wLjUuMCI6CisgIHZlcnNpb246IDAuNS4wCisgIHJlc29sdXRpb246ICJjb2xvcmpzLmlvQG5wbTowLjUuMCIKKyAgY2hlY2tzdW06IDEwYzAvM2ZhNWVkMzJmMmJjNjJlYTEzM2Q4ZGY5YjI2N2EyYmQyZTMzZDNhY2I4Zjg2YmYwNTdiMTI1OTY3ZjRiN2FjNjA3MTc5ZGYxNWZlNDM3MWU0Zjg4Mzc2MGVhOTM5YTkzYTIzNGQ2YjY1NWZhYzYwNTE2NmQ2OGU5OGE1NWEyNGQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJjcm9zcy1zcGF3bkBucG06XjcuMC4wIjoKKyAgdmVyc2lvbjogNy4wLjMKKyAgcmVzb2x1dGlvbjogImNyb3NzLXNwYXduQG5wbTo3LjAuMyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHBhdGgta2V5OiAibnBtOl4zLjEuMCIKKyAgICBzaGViYW5nLWNvbW1hbmQ6ICJucG06XjIuMC4wIgorICAgIHdoaWNoOiAibnBtOl4yLjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvNTczOGMzMTIzODcwODFjOThkNjljOThlMTA1YjYzMjdiMDY5MTk3Zjg2NGE2MDU5MzI0NWQ2NGM4MDg5YzhhMGE3NDRlMTYzNDkyODEyMTBkNTY4MzViYjkyNzQxMzBkODI1YTc4YjJhZDY4NTNjYTEzY2ZiZWZmYzBjMzE3NTAKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJjeXRvc2NhcGVAbnBtOl4zLjI4LjEiOgorICB2ZXJzaW9uOiAzLjI4LjEKKyAgcmVzb2x1dGlvbjogImN5dG9zY2FwZUBucG06My4yOC4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgaGVhcDogIm5wbTpeMC4yLjYiCisgICAgbG9kYXNoOiAibnBtOl40LjE3LjIxIgorICBjaGVja3N1bTogMTBjMC9lZWZlNmMzZjAyNTNmZmRjYTQ2Zjk4NTdlMDZlYmE5NDdjYjg2M2RmMDU4M2VhZjViYjExMmJjNjQwNDI1NjA4Yjk4Mzg0N2VlM2E1Yjg2NGY5ODMzYjgwYTliYzQxYThkYzVkNjc1NTU1YjEwN2EzMzIxMDA2ZWRmZmY1MDRlZgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImRlYnVnQG5wbTo0LCBkZWJ1Z0BucG06XjQuMy40IjoKKyAgdmVyc2lvbjogNC4zLjQKKyAgcmVzb2x1dGlvbjogImRlYnVnQG5wbTo0LjMuNCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1zOiAibnBtOjIuMS4yIgorICBwZWVyRGVwZW5kZW5jaWVzTWV0YToKKyAgICBzdXBwb3J0cy1jb2xvcjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgIGNoZWNrc3VtOiAxMGMwL2NlZGJlYzQ1Mjk4ZGQ1YzUwMWQwMWI5MmIxMTljZDNmYWViZTU0MzhjMzkxN2ZmMTFhZTFiZmY4NmE2YzcyMjkzMGFjOWM4NjU5NzkyODI0MDEzMTY4YmE2ZGI3YzQ2NjgyMjVkODQ1YzYzM2ZiZGFmYmJmOTAyYTYzODlmNzM2CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZWFzdGFzaWFud2lkdGhAbnBtOl4wLjIuMCI6CisgIHZlcnNpb246IDAuMi4wCisgIHJlc29sdXRpb246ICJlYXN0YXNpYW53aWR0aEBucG06MC4yLjAiCisgIGNoZWNrc3VtOiAxMGMwLzI2ZjM2NGViY2RiNjM5NWY5NTEyNGZkYTQxMWY2MzEzN2E0YmZiNWQzYTA2NDUzZjdmMjNkZmU1MjUwMjkwNWJkODRlMDQ4ODE3MmUwZjllYzI5NWZkYzQ1ZjA1YzIzZDVkOTFiYWYxNmJkMjZmMGZlOWFjZDc3N2ExODhkYzM5CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZW1vamktcmVnZXhAbnBtOl44LjAuMCI6CisgIHZlcnNpb246IDguMC4wCisgIHJlc29sdXRpb246ICJlbW9qaS1yZWdleEBucG06OC4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2I2MDUzYWQzOTk1MWM0Y2YzMzhmOTA5MmQ3YmZiYTQ0OGNkZmQ0NmZlNmEyYTAzNDcwMGIxNDlhYzlmZmJjMTM3ZTM2MWNiZDNjNDQyMjk3Zjg2YmVkMmU1Zjc1NzZjMWI1NGNjMGE2YmY4ZWY1MTA2Y2M2MmY0OTZhZjM1MDEwCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZW1vamktcmVnZXhAbnBtOl45LjIuMiI6CisgIHZlcnNpb246IDkuMi4yCisgIHJlc29sdXRpb246ICJlbW9qaS1yZWdleEBucG06OS4yLjIiCisgIGNoZWNrc3VtOiAxMGMwL2FmMDE0ZTc1OWE3MjA2NGNmNjZlNmU2OTRhN2ZjNmIwZWQzZDhkYjY4MDQyN2IwMjFhODk3Mjc2ODk2NzFjZWZlOWQwNDE1MWIyY2FkNTFkYmFmODVkNWJhNzkwZDA2MWNkMTY3ZjFjZjMyZWI3YjI4MWY2MzY4YjNjMTgxNjM5CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZW5jb2RpbmdAbnBtOl4wLjEuMTMiOgorICB2ZXJzaW9uOiAwLjEuMTMKKyAgcmVzb2x1dGlvbjogImVuY29kaW5nQG5wbTowLjEuMTMiCisgIGRlcGVuZGVuY2llczoKKyAgICBpY29udi1saXRlOiAibnBtOl4wLjYuMiIKKyAgY2hlY2tzdW06IDEwYzAvMzZkOTM4NzEyZmYwMGZlMWY0YmFjODhiNDNiY2ZmYjU5MzBjMWVmYTU3YmJjZGNhOWQ2N2UxZDlkNmM1N2NmYjEyMDBmYjAxZWZlMGYzMTA5YjJjZTk5YjIzMWY5MDc3OTUzMjgxNGE4MTM3MGExYmQzMjc0YTBmNTg1ODUwMzkKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJlbnYtcGF0aHNAbnBtOl4yLjIuMCI6CisgIHZlcnNpb246IDIuMi4xCisgIHJlc29sdXRpb246ICJlbnYtcGF0aHNAbnBtOjIuMi4xIgorICBjaGVja3N1bTogMTBjMC8yODUzMjU2NzdiZjAwZTMwODQ1ZTMzMGVlYzMyODk0ZjUxMDU1MjlkYjk3NDk2ZWUzZjU5ODQ3OGU1MGYwMDhjNTM1MmE0MWEzMGU1ZTcyZWM5ZGU4YTU0MmI1YTU3MGI4NTY5OWNkNjNiZDJiYzY0NmRiY2I5ZjMxMWQ4M2JjNAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImVyci1jb2RlQG5wbTpeMi4wLjIiOgorICB2ZXJzaW9uOiAyLjAuMworICByZXNvbHV0aW9uOiAiZXJyLWNvZGVAbnBtOjIuMC4zIgorICBjaGVja3N1bTogMTBjMC9iNjQyZjdiNGRkNGEzNzZlOTU0OTQ3NTUwYTMwNjVhOWVjZTY3MzNhYjhlNTFhZDgwZGI3MjdhYWFlMDgxN2MyZTk5YjAyYTk3YTNkNmNlY2M2NDhhOTc4NDgzMDVlNzI4Mjg5Y2YzMTJkMDlhZjM5NTQwM2E5MGM5ZDRkOGE2NgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImVzYnVpbGRAbnBtOl4wLjE5LjMiOgorICB2ZXJzaW9uOiAwLjE5LjEyCisgIHJlc29sdXRpb246ICJlc2J1aWxkQG5wbTowLjE5LjEyIgorICBkZXBlbmRlbmNpZXM6CisgICAgIkBlc2J1aWxkL2FpeC1wcGM2NCI6ICJucG06MC4xOS4xMiIKKyAgICAiQGVzYnVpbGQvYW5kcm9pZC1hcm0iOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2FuZHJvaWQtYXJtNjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2FuZHJvaWQteDY0IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9kYXJ3aW4tYXJtNjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2Rhcndpbi14NjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2ZyZWVic2QtYXJtNjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2ZyZWVic2QteDY0IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9saW51eC1hcm0iOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2xpbnV4LWFybTY0IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9saW51eC1pYTMyIjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9saW51eC1sb29uZzY0IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9saW51eC1taXBzNjRlbCI6ICJucG06MC4xOS4xMiIKKyAgICAiQGVzYnVpbGQvbGludXgtcHBjNjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2xpbnV4LXJpc2N2NjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL2xpbnV4LXMzOTB4IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9saW51eC14NjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL25ldGJzZC14NjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL29wZW5ic2QteDY0IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC9zdW5vcy14NjQiOiAibnBtOjAuMTkuMTIiCisgICAgIkBlc2J1aWxkL3dpbjMyLWFybTY0IjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC93aW4zMi1pYTMyIjogIm5wbTowLjE5LjEyIgorICAgICJAZXNidWlsZC93aW4zMi14NjQiOiAibnBtOjAuMTkuMTIiCisgIGRlcGVuZGVuY2llc01ldGE6CisgICAgIkBlc2J1aWxkL2FpeC1wcGM2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9hbmRyb2lkLWFybSI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9hbmRyb2lkLWFybTY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2FuZHJvaWQteDY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2Rhcndpbi1hcm02NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9kYXJ3aW4teDY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2ZyZWVic2QtYXJtNjQiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQGVzYnVpbGQvZnJlZWJzZC14NjQiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQGVzYnVpbGQvbGludXgtYXJtIjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2xpbnV4LWFybTY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2xpbnV4LWlhMzIiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQGVzYnVpbGQvbGludXgtbG9vbmc2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9saW51eC1taXBzNjRlbCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9saW51eC1wcGM2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9saW51eC1yaXNjdjY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2xpbnV4LXMzOTB4IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL2xpbnV4LXg2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC9uZXRic2QteDY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL29wZW5ic2QteDY0IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL3N1bm9zLXg2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC93aW4zMi1hcm02NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAZXNidWlsZC93aW4zMi1pYTMyIjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkBlc2J1aWxkL3dpbjMyLXg2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICBiaW46CisgICAgZXNidWlsZDogYmluL2VzYnVpbGQKKyAgY2hlY2tzdW06IDEwYzAvMGYyZDIxZmZlMjRlYmVhZDY0ODQzZjg3YzNhZWJlMmU3MDNhNWVkOWZlYjA4NmEwNzI4YjI0OTA3ZmFjMmViOTkyM2U0YTc5ODU3ZDNkZjkwNTljOTE1NzM5YmQ3YTg3MGRkNjY3OTcyZWFlMzI1YzY3ZjQ3OGI1OTJiODU4MmQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJldmVudC10YXJnZXQtc2hpbUBucG06XjUuMC4wIjoKKyAgdmVyc2lvbjogNS4wLjEKKyAgcmVzb2x1dGlvbjogImV2ZW50LXRhcmdldC1zaGltQG5wbTo1LjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvMDI1NWQ5ZjkzNjIxNWZkMjA2MTU2ZmQ0Y2FhOWU4ZDM1ZTYyMDc1ZDcyMGRjN2Q4NDdlODliNDE3ZTVlNjJjZjFjZTZjOWI0ZTBhMTYzM2E5MjU2ZGUwZWZlZmFmOWY4ZDI2OTI0YjFmM2M4NjIwY2ZmYjlkYjc4ZTdkMzA3NmIKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJldmVudGVtaXR0ZXIzQG5wbTpeNS4wLjEiOgorICB2ZXJzaW9uOiA1LjAuMQorICByZXNvbHV0aW9uOiAiZXZlbnRlbWl0dGVyM0BucG06NS4wLjEiCisgIGNoZWNrc3VtOiAxMGMwLzRiYTVjMDBjNTA2ZTZjNzg2YjRkNjI2MmNmYmNlOTBkZGMxNGMxMGQ0NjY3ZTVjODNhZTk5M2M5ZGU4OGFhODU2MDMzOTk0ZGQyYjM1YjgzZThkYzExNzBlMjI0ZTY2YTMxOWZhODBhZGM0YzMyYWRjZDIzNzliYmM3NWRhODE0CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZXZlbnRzQG5wbTpeMy4zLjAiOgorICB2ZXJzaW9uOiAzLjMuMAorICByZXNvbHV0aW9uOiAiZXZlbnRzQG5wbTozLjMuMCIKKyAgY2hlY2tzdW06IDEwYzAvZDZiNmYyYWRiY2NiY2RhNzRkZGJhYjUyZWQwN2RiNzI3ZWY1MmUzMWE2MWVkMjZkYjlmZWI3ZGM2MmFmN2ZjOGUwNjBkZWZhNjVlNWY4YWY5NDQ5Yjg2YjUyY2MxYTFmNmE3OWYyZWFmY2Y0ZTYyYWRkMmI3YTFmYTRhNDMyZjYKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJleHBvbmVudGlhbC1iYWNrb2ZmQG5wbTpeMy4xLjEiOgorICB2ZXJzaW9uOiAzLjEuMQorICByZXNvbHV0aW9uOiAiZXhwb25lbnRpYWwtYmFja29mZkBucG06My4xLjEiCisgIGNoZWNrc3VtOiAxMGMwLzE2MDQ1NmQyZDY0N2U2MDE5NjQwYmQwNzExMTYzNGQ4YzM1MzAzOGQ5ZmE0MDE3NmFmYjdjZDQ5YjA1NDhiZGFlODNiNTZkMDVlOTA3YzJjY2UyMzAwYjgxY2FlMzVkODAwZWY5MmZlZmI5ZDAyMDhlMTkwZmEzYjdkNmJiNTc5CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZm9yZWdyb3VuZC1jaGlsZEBucG06XjMuMS4wIjoKKyAgdmVyc2lvbjogMy4xLjEKKyAgcmVzb2x1dGlvbjogImZvcmVncm91bmQtY2hpbGRAbnBtOjMuMS4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgY3Jvc3Mtc3Bhd246ICJucG06XjcuMC4wIgorICAgIHNpZ25hbC1leGl0OiAibnBtOl40LjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvOTcwMGEwMjg1NjI4YWJhZWIzNzAwN2M5YTRkOTJiZDQ5ZjY3MjEwZjA5MDY3NjM4Nzc0MzM4ZTE0NmM4ZTljODI1YzVjODc3ZjA3MmIyZjc1ZjQxZGM2YTJkMGJlODY2NGY3OWZmYzAzZjY1NzY2NDlmNTRhODRmYjliNDdkZTAKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJmcy1taW5pcGFzc0BucG06XjIuMC4wIjoKKyAgdmVyc2lvbjogMi4xLjAKKyAgcmVzb2x1dGlvbjogImZzLW1pbmlwYXNzQG5wbToyLjEuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1pbmlwYXNzOiAibnBtOl4zLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvNzAzZDE2NTIyYjgyODJkNzI5OTMzNzUzOWMzZWQ2ZWRkZGQxYWZlODI0MzVlNGY1Yjc2ZTM0YTc5Y2Q3NGU0ODhhOGEwZTI2YTYzNmFmYzI0NDBlMWEyM2IwMzg3OGUyMTIyZTNhMmNmZTM3NWE1Y2Y2M2MzN2Q5MmI4NmEwMDQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJmcy1taW5pcGFzc0BucG06XjMuMC4wIjoKKyAgdmVyc2lvbjogMy4wLjMKKyAgcmVzb2x1dGlvbjogImZzLW1pbmlwYXNzQG5wbTozLjAuMyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1pbmlwYXNzOiAibnBtOl43LjAuMyIKKyAgY2hlY2tzdW06IDEwYzAvNjNlODBkYTJmZjliNjIxZTJjYjE1OTZhYmNiOTIwN2YxY2Y4MmI5NjhiMTE2Y2NkN2I5NTllMzMyMzE0NGNjZTdmYjE0MTQ2MjIwMDk3MWMzOGJiZjJlY2NhNTE2OTUwNjlkYjQ1MjY1NzA1YmVkMDlhN2NkOTNhZTViODlmOTQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJmc2V2ZW50c0BucG06fjIuMy4yLCBmc2V2ZW50c0BucG06fjIuMy4zIjoKKyAgdmVyc2lvbjogMi4zLjMKKyAgcmVzb2x1dGlvbjogImZzZXZlbnRzQG5wbToyLjMuMyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG5vZGUtZ3lwOiAibnBtOmxhdGVzdCIKKyAgY2hlY2tzdW06IDEwYzAvYTFmMGM0NDU5NTEyM2VkNzE3ZmViYmM0NzhhYTk1MmU0N2FkZmMyOGUyMDkyYmU2NmI4YWIxNjM1MTQ3MjU0Y2E2Y2ZlMWRmNzkyYTg5OTdmMjI3MTZkNGNiYWZjNzMzMDk4OTlmZjdiZmFjMmFjM2FkOGNmMmU0ZWNjM2VjNjAKKyAgY29uZGl0aW9uczogb3M9ZGFyd2luCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZnNldmVudHNAcGF0Y2g6ZnNldmVudHNAbnBtJTNBfjIuMy4yI29wdGlvbmFsIWJ1aWx0aW48Y29tcGF0L2ZzZXZlbnRzPiwgZnNldmVudHNAcGF0Y2g6ZnNldmVudHNAbnBtJTNBfjIuMy4zI29wdGlvbmFsIWJ1aWx0aW48Y29tcGF0L2ZzZXZlbnRzPiI6CisgIHZlcnNpb246IDIuMy4zCisgIHJlc29sdXRpb246ICJmc2V2ZW50c0BwYXRjaDpmc2V2ZW50c0BucG0lM0EyLjMuMyNvcHRpb25hbCFidWlsdGluPGNvbXBhdC9mc2V2ZW50cz46OnZlcnNpb249Mi4zLjMmaGFzaD1kZjBiZjEiCisgIGRlcGVuZGVuY2llczoKKyAgICBub2RlLWd5cDogIm5wbTpsYXRlc3QiCisgIGNvbmRpdGlvbnM6IG9zPWRhcndpbgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImdsb2JAbnBtOl4xMC4yLjIsIGdsb2JAbnBtOl4xMC4zLjEwIjoKKyAgdmVyc2lvbjogMTAuMy4xMAorICByZXNvbHV0aW9uOiAiZ2xvYkBucG06MTAuMy4xMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGZvcmVncm91bmQtY2hpbGQ6ICJucG06XjMuMS4wIgorICAgIGphY2tzcGVhazogIm5wbTpeMi4zLjUiCisgICAgbWluaW1hdGNoOiAibnBtOl45LjAuMSIKKyAgICBtaW5pcGFzczogIm5wbTpeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKKyAgICBwYXRoLXNjdXJyeTogIm5wbTpeMS4xMC4xIgorICBiaW46CisgICAgZ2xvYjogZGlzdC9lc20vYmluLm1qcworICBjaGVja3N1bTogMTBjMC8xM2Q4YTFmZWI3ZWFjNzk0NWY4Yzg0ODBlMTFjZDRhNDRiMjRkMjY1MDNkOTlhOGQ4YWM4ZDVhZWZiZjNlOTgwMmEyYjYwODczMThhODI5ZmFkMDRjYjRlODI5ZjI1YzVmNGYxMTEwYzY4OTY2YzQ5ODcyMGRkMjYxYzdlMzQ0ZAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImdyYWNlZnVsLWZzQG5wbTpeNC4yLjYiOgorICB2ZXJzaW9uOiA0LjIuMTEKKyAgcmVzb2x1dGlvbjogImdyYWNlZnVsLWZzQG5wbTo0LjIuMTEiCisgIGNoZWNrc3VtOiAxMGMwLzM4NmQwMTFhNTUzZTAyYmM1OTRhYzJjYTBiZDZkOWU0YzIyZDdmYThjZmJmYzQ0OGE2ZDE0OGM1OWVhODgxYjA5MmRiOWRiZTM1NDdhZTRiODhlNTVmMWIwMWY3YzRhMmVjYzUzYjMxMGMwNDI3OTNlNjNhYTQ0Y2Y2YzI1N2YyCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiZ3JlbWxpbkBmaWxlOi4uLy4uL3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ojpsb2NhdG9yPWJyb3dzZXIlNDB3b3Jrc3BhY2UlM0EuIjoKKyAgdmVyc2lvbjogNC4wLjAtYWxwaGExCisgIHJlc29sdXRpb246ICJncmVtbGluQGZpbGU6Li4vLi4vc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQjLi4vLi4vc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQ6Omhhc2g9NzM1OGY5JmxvY2F0b3I9YnJvd3NlciU0MHdvcmtzcGFjZSUzQS4iCisgIGRlcGVuZGVuY2llczoKKyAgICBidWZmZXI6ICJucG06XjYuMC4zIgorICAgIGV2ZW50ZW1pdHRlcjM6ICJucG06XjUuMC4xIgorICAgIHJlYWRhYmxlLXN0cmVhbTogIm5wbTpeNC41LjIiCisgICAgdXVpZDogIm5wbTpeOS4wLjEiCisgICAgd3M6ICJucG06XjguMTYuMCIKKyAgY2hlY2tzdW06IDEwYzAvZGRiYmI3MzY1ZDY3ZjYyYTJiNmE1ZDFkY2IxNGZlZjk5OGVhMDYyODFjOGExMTllZWRlN2I5ZjhiN2IyNzZlMTE0ZTEzOTQ1NjAxNjc0NjM4MjgxOWI2MTJlYjZlMjZlZGY0ZDYzMmEyZjM2ZjdiMzk5YmQzZWFhMGVkOTdjMTkKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJoZWFwQG5wbTpeMC4yLjYiOgorICB2ZXJzaW9uOiAwLjIuNworICByZXNvbHV0aW9uOiAiaGVhcEBucG06MC4yLjciCisgIGNoZWNrc3VtOiAxMGMwLzM0MWM1ZDUxYWUxM2RjODM0NmMzNzFhOGE2OWM1N2M5NzJmY2I5YTMyMzMwOTBkM2RkNWJhMjlkNDgzZDZiNWI0ZTc1NDkyNDQzY2JmZWFjZDQ2NjA4YmIzMGU2NjgwZjY0NmZmYjdhNjIwNTkwMDIyMTczNTU4N2QwN2E3OWI2CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiaHR0cC1jYWNoZS1zZW1hbnRpY3NAbnBtOl40LjEuMSI6CisgIHZlcnNpb246IDQuMS4xCisgIHJlc29sdXRpb246ICJodHRwLWNhY2hlLXNlbWFudGljc0BucG06NC4xLjEiCisgIGNoZWNrc3VtOiAxMGMwL2NlMTMxOWI4YTM4MmViM2NiYjRhMzdjMTlmNmJmZTE0ZTViYjViZTNkMDkwNzllODg1ZThjNTEzYWIyZDNjZDkyMTQ5MDJmOGEzMWM5ZGM0ZTM3MDIyNjMzY2VhYmZjMmQ2OTc0MDVkZWVhZjFiOGYzNTUyYmI0ZWQ5OTZmZGZjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiaHR0cC1wcm94eS1hZ2VudEBucG06XjcuMC4wIjoKKyAgdmVyc2lvbjogNy4wLjIKKyAgcmVzb2x1dGlvbjogImh0dHAtcHJveHktYWdlbnRAbnBtOjcuMC4yIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWdlbnQtYmFzZTogIm5wbTpeNy4xLjAiCisgICAgZGVidWc6ICJucG06XjQuMy40IgorICBjaGVja3N1bTogMTBjMC80MjA3YjA2YTQ1ODBmYjg1ZGQ2ZGZmNTIxZjBhYmY2ZGI1MTc0ODllNzA4NjNkY2ExYTAyOTFkYWE3ZjJkM2QyZDYwMTVhNTdiZDcwMmFmMDY4ZWE1Y2Y5ZjFmNmZmNzIzMTRmNWY1YjQyMjhkMjk5YzA5MDQxMzVkMmFlZjkyMQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImh0dHBzLXByb3h5LWFnZW50QG5wbTpeNy4wLjEiOgorICB2ZXJzaW9uOiA3LjAuNAorICByZXNvbHV0aW9uOiAiaHR0cHMtcHJveHktYWdlbnRAbnBtOjcuMC40IgorICBkZXBlbmRlbmNpZXM6CisgICAgYWdlbnQtYmFzZTogIm5wbTpeNy4wLjIiCisgICAgZGVidWc6ICJucG06NCIKKyAgY2hlY2tzdW06IDEwYzAvYmM0ZjdjMzhkYTMyYTVmYzYyMjQ1MGI2Y2I0OWEyNGZmNTk2ZjliZDQ4ZGNlZGI1MmQyZGEzZmExYzFhODBlMTAwZmI1MDZiZDU5YjMyNmMwMTJmMjFjODYzYzY5YjI3NWMyM2RlMWEwMWQwYjg0ZGIzOTY4MjJmZGYyNWU1MmIKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJpY29udi1saXRlQG5wbTpeMC42LjIiOgorICB2ZXJzaW9uOiAwLjYuMworICByZXNvbHV0aW9uOiAiaWNvbnYtbGl0ZUBucG06MC42LjMiCisgIGRlcGVuZGVuY2llczoKKyAgICBzYWZlci1idWZmZXI6ICJucG06Pj0gMi4xLjIgPCAzLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvOTgxMDJiYzY2YjMzZmNmNWFjMDQ0MDk5ZDEyNTdiYTBiN2FkNWUzY2NkMzIyMWYzNGRkNTA4YWI0MDcwZWRmZjE4MzI3NjIyMTY4NGUxZTA1NTViMTQ1ZmNlMDg1MGM5ZjdkMmI2MGE5ZmNhYzUwZmJiNGVhMGQ2ZTg0NWEzYjEKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJpZWVlNzU0QG5wbTpeMS4yLjEiOgorICB2ZXJzaW9uOiAxLjIuMQorICByZXNvbHV0aW9uOiAiaWVlZTc1NEBucG06MS4yLjEiCisgIGNoZWNrc3VtOiAxMGMwL2IwNzgyZWY1ZTA5MzViOWYxMjg4M2EyZTJhYTM3YmFhNzVkYTZlNjZjZTY1MTVjMTY4Njk3YjQyMTYwODA3ZDkzMzBkZTlhMzJlYzFlZDczMTQ5YWVhMDJlMGQ4MjJlNTcyYmNhNmYxZTIyYmRjYmQyMTQ5ZTEzYjA1MGIxN2JiCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiaW11cm11cmhhc2hAbnBtOl4wLjEuNCI6CisgIHZlcnNpb246IDAuMS40CisgIHJlc29sdXRpb246ICJpbXVybXVyaGFzaEBucG06MC4xLjQiCisgIGNoZWNrc3VtOiAxMGMwLzhiNTEzMTM4NTBkZDMzNjA1YzZjOWQzZmQ5NjM4YjcxNGY0YzRjNDAyNTBjZmY2NTgyMDlmMzBkNDBkYTYwZjc4OTkyZmIyZGY1ZGFiZWU0YWNmNTg5YTZhODJiYmM3OWFkNTQ4NjU1MDc1NGJkOWVjNGUzZmMwZDRhNTdkNmE2CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiaW5kZW50LXN0cmluZ0BucG06XjQuMC4wIjoKKyAgdmVyc2lvbjogNC4wLjAKKyAgcmVzb2x1dGlvbjogImluZGVudC1zdHJpbmdAbnBtOjQuMC4wIgorICBjaGVja3N1bTogMTBjMC8xZTE5MDRkZGIwY2IzZDZjY2U3Y2QwOWUyN2E5MDE4NDkwOGI3YTVkNWMyMWI5MmUyMzJjOTM1NzlkMzE0ZjBiODNjMjQ2ZmZiMDM1NDkzZDA1MDRiMWU5MTQ3YmEyYzliMjFkZjAwMzBmNDg2NzNmYmEwNDk2ZWNkNjk4MTYxZgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImlwLWFkZHJlc3NAbnBtOl45LjAuNSI6CisgIHZlcnNpb246IDkuMC41CisgIHJlc29sdXRpb246ICJpcC1hZGRyZXNzQG5wbTo5LjAuNSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGpzYm46ICJucG06MS4xLjAiCisgICAgc3ByaW50Zi1qczogIm5wbTpeMS4xLjMiCisgIGNoZWNrc3VtOiAxMGMwLzMzMWNkMDdmYWZjYjNiMjQxMDA2MTNlNGI1M2UxYTJiNGZlYWIxMWU2NzFlNjU1ZDQ2ZGMwOWVlMjMzZGE1MDExMjg0ZDA5Y2E0MGM0ZWNiZGZlMWQwMDA0ZjQ2Mjk1ODY3NWMyMjRhODA0MjU5ZjJmNzhkMjQ2NWE4NzgyNGJjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnRAbnBtOl4zLjAuMCI6CisgIHZlcnNpb246IDMuMC4wCisgIHJlc29sdXRpb246ICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludEBucG06My4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2JiMTFkODI1ZTA0OWYzOGUwNGMwNjM3M2E4ZDcyNzgyZWVlMDIwNWJkYTlkOTA4Y2M1NTBjY2IzYzU5Yjk5ZDc1MGZmOTUzNzk4MmUwMTczM2MxYzk0YTU4ZTM1NDAwNjYxZjU3MDQyMTU4ZmY1ZThmM2U5MGNmOTM2ZGFmMGZjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisiaXMtbGFtYmRhQG5wbTpeMS4wLjEiOgorICB2ZXJzaW9uOiAxLjAuMQorICByZXNvbHV0aW9uOiAiaXMtbGFtYmRhQG5wbToxLjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvODVmZWUwOThhZTYyYmE2ZjFlMjRjZjIyNjc4ODA1NDczYzdhZmQwZmIzOTc4YTNhYTI2MGUzNTRjYjdiY2IzYTU4MDZjZjBhOTg0MDMxODg0NjVlZmVkZWM0MWFiNDM0OGU4ZTRlNzkzMDVkNDA5NjAxMzIzODU1YjM4MzlkNGQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJpc2V4ZUBucG06XjIuMC4wIjoKKyAgdmVyc2lvbjogMi4wLjAKKyAgcmVzb2x1dGlvbjogImlzZXhlQG5wbToyLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvMjI4Y2ZhNTAzZmFkYzJjMzE1OTZhYjA2ZWQ2YWE4MmM5OTc2ZWVjMmJmZDgzMzk3ZTdlYWYwNmQwY2NmNDJjZDFkZmQ2NzQzYmY5YWViMDFhZWJkNDE1NmQwMDk5OTRjNWY3NmVhODk4ZDI4MzJjMWZlMzQyZGE5MjNjYTQ1N2QKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJpc2V4ZUBucG06XjMuMS4xIjoKKyAgdmVyc2lvbjogMy4xLjEKKyAgcmVzb2x1dGlvbjogImlzZXhlQG5wbTozLjEuMSIKKyAgY2hlY2tzdW06IDEwYzAvOWVjMjU3NjU0MDkzNDQzZWIwYTUyOGE5YzhjYmJhOWMwY2E3NjE2Y2NiNDBhYmQ2ZGRlNzIwMjczNGQ5NmJiODZlNGFjMGQ3NjRmMGY4Y2Q5NjU4NTZhYWNiZmYyZjRjZTIzZTczMGRjMTlkZmI0MWUzYjBkODY1Y2E2ZmRjYzcKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJqYWNrc3BlYWtAbnBtOl4yLjMuNSI6CisgIHZlcnNpb246IDIuMy42CisgIHJlc29sdXRpb246ICJqYWNrc3BlYWtAbnBtOjIuMy42IgorICBkZXBlbmRlbmNpZXM6CisgICAgIkBpc2FhY3MvY2xpdWkiOiAibnBtOl44LjAuMiIKKyAgICAiQHBrZ2pzL3BhcnNlYXJncyI6ICJucG06XjAuMTEuMCIKKyAgZGVwZW5kZW5jaWVzTWV0YToKKyAgICAiQHBrZ2pzL3BhcnNlYXJncyI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICBjaGVja3N1bTogMTBjMC9mMDFkOGY5NzJkODk0Y2Q3NjM4YmMzMzhlOWVmNWRkYjg2ZjdiMjA4Y2UxNzdhMzZkNzE4ZWFjOTZlYzg2NjM4YTZlZmExN2QwMjIxYjEwMDczZTY0YjQ1ZWRjMmNlMTUzNDBkYjkzODBiMWY1ZDVjNWQwMDBjYmM1MTdkYzExMQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImpzYm5AbnBtOjEuMS4wIjoKKyAgdmVyc2lvbjogMS4xLjAKKyAgcmVzb2x1dGlvbjogImpzYm5AbnBtOjEuMS4wIgorICBjaGVja3N1bTogMTBjMC80ZjkwN2ZiNzhkN2I3MTJlMTFkZWE4YzE2NWZlMDkyMWY4MWE2NTdkMzQ0M2RkZTc1MzU5ZWQ1MmViMmI1ZDMzY2U2NzczZDk3OTg1YTA4OWYwOWE2NWVkZDgwYjExY2I3NWM3NjdiNTdiYTQ3MzkxZmVlNGM5NjlmNzIxNWM5NgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworImxvZGFzaEBucG06XjQuMTcuMjEiOgorICB2ZXJzaW9uOiA0LjE3LjIxCisgIHJlc29sdXRpb246ICJsb2Rhc2hAbnBtOjQuMTcuMjEiCisgIGNoZWNrc3VtOiAxMGMwL2Q4Y2JlYTA3MmJiMDg2NTViYjRjOTg5ZGE0MTg5OTRiMDczYTYwOGRmZmE2MDhiMDlhYzA0YjQzYTc5MWIxMmFlYWU3Y2Q3YWQ5MTlhYTRjOTI1ZjMzYjQ4NDkwYjVjZmU2YzFmNzFkODI3OTU2MDcxZGFlMmU3YmIzYTZiNzRjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisibHJ1LWNhY2hlQG5wbTpeMTAuMC4xLCBscnUtY2FjaGVAbnBtOl45LjEuMSB8fCBeMTAuMC4wIjoKKyAgdmVyc2lvbjogMTAuMi4wCisgIHJlc29sdXRpb246ICJscnUtY2FjaGVAbnBtOjEwLjIuMCIKKyAgY2hlY2tzdW06IDEwYzAvYzk4NDc2MTJhYTJkYWFlZjEwMmQzMDU0MmE4ZDZkOWIyYzJiYjM2NTgxYzFiZjBkYzNlYmY1ZTVmMzM1MmM3NzJhNzQ5ZTYwNGFmYWUyZTQ2ODczYjkzMGE5ZTk1MjM3NDNmYWFjNGU1YjkzN2M1NzZhYjI5MTk2Nzc0NzEyZWUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJscnUtY2FjaGVAbnBtOl42LjAuMCI6CisgIHZlcnNpb246IDYuMC4wCisgIHJlc29sdXRpb246ICJscnUtY2FjaGVAbnBtOjYuMC4wIgorICBkZXBlbmRlbmNpZXM6CisgICAgeWFsbGlzdDogIm5wbTpeNC4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2NiNTNlNTgyNzg1YzQ4MTg3ZDdhMTg4ZDMzNzljMTgxYjVjYTJhOWM3OGQyYmNlM2U3ZGVlMzZmMzI3NjFkMWM0Mjk4M2RhM2ZlMTJiNTVjYjc0ZTE3NzlmYTk0Y2RjMmU1MzY3YzAyOGE5YjM1MzE3MTg0ZWRlMGMwN2EzMGE5CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisibWFrZS1mZXRjaC1oYXBwZW5AbnBtOl4xMy4wLjAiOgorICB2ZXJzaW9uOiAxMy4wLjAKKyAgcmVzb2x1dGlvbjogIm1ha2UtZmV0Y2gtaGFwcGVuQG5wbToxMy4wLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICAiQG5wbWNsaS9hZ2VudCI6ICJucG06XjIuMC4wIgorICAgIGNhY2FjaGU6ICJucG06XjE4LjAuMCIKKyAgICBodHRwLWNhY2hlLXNlbWFudGljczogIm5wbTpeNC4xLjEiCisgICAgaXMtbGFtYmRhOiAibnBtOl4xLjAuMSIKKyAgICBtaW5pcGFzczogIm5wbTpeNy4wLjIiCisgICAgbWluaXBhc3MtZmV0Y2g6ICJucG06XjMuMC4wIgorICAgIG1pbmlwYXNzLWZsdXNoOiAibnBtOl4xLjAuNSIKKyAgICBtaW5pcGFzcy1waXBlbGluZTogIm5wbTpeMS4yLjQiCisgICAgbmVnb3RpYXRvcjogIm5wbTpeMC42LjMiCisgICAgcHJvbWlzZS1yZXRyeTogIm5wbTpeMi4wLjEiCisgICAgc3NyaTogIm5wbTpeMTAuMC4wIgorICBjaGVja3N1bTogMTBjMC80M2I5ZjZkY2JjNmZlOGI4NjA0Y2I2Mzk2OTU3YzM2OTg4NTdhMTViYTRkYmMzODI4NGY3ZjBlNjFmMjQ4MzAwNTg1ZWYxZWI4Y2M2MmRmNTRlOWM3MjRhZjk3N2U0NWI1Y2RmZDg4MzIwZWY3ZjUzZTQ1MDcwZWQzNDg4ZGE1NQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm1pbmltYXRjaEBucG06XjkuMC4xIjoKKyAgdmVyc2lvbjogOS4wLjMKKyAgcmVzb2x1dGlvbjogIm1pbmltYXRjaEBucG06OS4wLjMiCisgIGRlcGVuZGVuY2llczoKKyAgICBicmFjZS1leHBhbnNpb246ICJucG06XjIuMC4xIgorICBjaGVja3N1bTogMTBjMC84NWY0MDdkY2QzOGFjM2UxODBmNDI1ZTg2NTUzOTExZDEwMTQ1NWNhM2FkNTU0NGQ2YTdjZWMxNjI4NjY1N2U0ZjhhOWFhNjY5NTgwMzAyNWM1NWUzMWUzNWE5MWEyMjUyYjVkYzhlN2Q1MjcyMTEyNzhiOGI2NWI0ZGJkNWVhYworICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm1pbmlwYXNzLWNvbGxlY3RAbnBtOl4yLjAuMSI6CisgIHZlcnNpb246IDIuMC4xCisgIHJlc29sdXRpb246ICJtaW5pcGFzcy1jb2xsZWN0QG5wbToyLjAuMSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1pbmlwYXNzOiAibnBtOl43LjAuMyIKKyAgY2hlY2tzdW06IDEwYzAvNTE2N2U3M2Y2MmJiNzRjYzUwMTk1OTQ3MDljNzdlNmE3NDIwNTFhNjQ3ZmU5NDk5YWJmMDNjNzFkY2E3NTUxNWI3OTU5ZDY3YTc2NGJkYzRmOGIzNjFjZjg5N2ZiZjI1ZTJkOTg2OWVlMDM5MjAzZWQ0NTI0MGY0OGI5YWEwNmUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJtaW5pcGFzcy1mZXRjaEBucG06XjMuMC4wIjoKKyAgdmVyc2lvbjogMy4wLjQKKyAgcmVzb2x1dGlvbjogIm1pbmlwYXNzLWZldGNoQG5wbTozLjAuNCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGVuY29kaW5nOiAibnBtOl4wLjEuMTMiCisgICAgbWluaXBhc3M6ICJucG06XjcuMC4zIgorICAgIG1pbmlwYXNzLXNpemVkOiAibnBtOl4xLjAuMyIKKyAgICBtaW5pemxpYjogIm5wbTpeMi4xLjIiCisgIGRlcGVuZGVuY2llc01ldGE6CisgICAgZW5jb2Rpbmc6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICBjaGVja3N1bTogMTBjMC8xYjYzYzFmMzMxM2U4OGVlYWM0Njg5ZjFiNzFjOWYwODY1OThkYjlhMTg5NDAwZTNlZTk2MGMzMmVkODllMDY3MzdmYTIzOTc2YzkzMDVjMmQ1NzQ2NGZiM2ZjZGMxMjc0OWQzMzc4ODA1YzlkNjE3NmY1NTY5YjBkMGVlOGE3NQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm1pbmlwYXNzLWZsdXNoQG5wbTpeMS4wLjUiOgorICB2ZXJzaW9uOiAxLjAuNQorICByZXNvbHV0aW9uOiAibWluaXBhc3MtZmx1c2hAbnBtOjEuMC41IgorICBkZXBlbmRlbmNpZXM6CisgICAgbWluaXBhc3M6ICJucG06XjMuMC4wIgorICBjaGVja3N1bTogMTBjMC8yYTUxYjYzZmViNzk5ZDJiYjM0NjY5MjA1ZWVlN2MwZWFmOWRjZTAxODgzMjYxYTViNzc0MTBjOTQwOGFhNDQ3ZTQ3OGVmZDE5MWI0ZGU2ZmMxMTAxZTc5NmZmNTg5MmY4NDQzZWYyMGQ5NTQ0Mzg1ODE5MDkzZGJiMzJkMzZiZAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm1pbmlwYXNzLXBpcGVsaW5lQG5wbTpeMS4yLjQiOgorICB2ZXJzaW9uOiAxLjIuNAorICByZXNvbHV0aW9uOiAibWluaXBhc3MtcGlwZWxpbmVAbnBtOjEuMi40IgorICBkZXBlbmRlbmNpZXM6CisgICAgbWluaXBhc3M6ICJucG06XjMuMC4wIgorICBjaGVja3N1bTogMTBjMC9jYmRhNTdjZWEyMGIxNDBiNzk3NTA1ZGMyY2FjNzE1ODFhNzBiMzI0N2I4NDQ4MGMxZmVkNWNhNWJhNDZjMjVlY2MyNWY2OGJmYzllNmRjYjFhNmU5MDE3ZGFiNWM3YWRhNWVhYjczYWQ0ZjBhNDlkODRlMzUwOTNlMGM2NDNmMgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm1pbmlwYXNzLXNpemVkQG5wbTpeMS4wLjMiOgorICB2ZXJzaW9uOiAxLjAuMworICByZXNvbHV0aW9uOiAibWluaXBhc3Mtc2l6ZWRAbnBtOjEuMC4zIgorICBkZXBlbmRlbmNpZXM6CisgICAgbWluaXBhc3M6ICJucG06XjMuMC4wIgorICBjaGVja3N1bTogMTBjMC8yOThmMTI0NzUzZWZkYzc0NWNmZTBmMmJkZmRkODFiYTI1YjlmNGU3NTNjYTRhMjA2NmViMTdjODIxZjI1ZDQ4YWNlYTYwN2RmYzk5NzYzM2VlNWJmN2I2ZGZmZmI0ZWVlNGYyMDUxZWIxNjg2NjNmMGI5OWZhZDJmYTQ4MjljYgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm1pbmlwYXNzQG5wbTpeMy4wLjAiOgorICB2ZXJzaW9uOiAzLjMuNgorICByZXNvbHV0aW9uOiAibWluaXBhc3NAbnBtOjMuMy42IgorICBkZXBlbmRlbmNpZXM6CisgICAgeWFsbGlzdDogIm5wbTpeNC4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2ExMTQ3NDY5NDNhZmExZGJiY2E4MjQ5ZTcwNmQxZDM4Yjg1ZWQxMjk4YjUzMGY1ODA4Y2U1MWY4ZTllOTQxOTYyZTJhNWFkMmUwMGVhZTdkZDIxZDhhNGFhZTY1ODZhNjZkNDIxNmQxYTI1OTM4NWU5ZDAzNThmMGMxZWJhMTZjCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisibWluaXBhc3NAbnBtOl41LjAuMCI6CisgIHZlcnNpb246IDUuMC4wCisgIHJlc29sdXRpb246ICJtaW5pcGFzc0BucG06NS4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2E5MWQ4MDQzZjY5MTc5NmE4YWM4OGRmMDM5ZGExOTkzM2VmMGY2MzNlM2Q3ZjBkMzVkY2Q1MzczYWY0OTEzMWNmMjM5OWJmYzM1NWY0MTUxNWRjNDk1ZTM5OTAzNjljMzg1OGNkMzE5ZTVjMjcyMmI0NzUzYzkwYmYzMTUyNDYyCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisibWluaXBhc3NAbnBtOl41LjAuMCB8fCBeNi4wLjIgfHwgXjcuMC4wLCBtaW5pcGFzc0BucG06XjcuMC4yLCBtaW5pcGFzc0BucG06XjcuMC4zIjoKKyAgdmVyc2lvbjogNy4wLjQKKyAgcmVzb2x1dGlvbjogIm1pbmlwYXNzQG5wbTo3LjAuNCIKKyAgY2hlY2tzdW06IDEwYzAvNmM3MzcwYTZkZmQyNTdiZjE4MjIyZGE1ODFiYTg5YTVlYWVkY2ExMGUxNTg3ODEyMzJhOGI1NTQyYTkwNTQ3NTQwYjRiOWI3ZTdmNDkwZTRjZGE0M2FjZmJkMTJlMDg2ZjA0NTM3MjhlY2Y4YzE5ZTBlZjY5MjFiYzU5NThhYzUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJtaW5pemxpYkBucG06XjIuMS4xLCBtaW5pemxpYkBucG06XjIuMS4yIjoKKyAgdmVyc2lvbjogMi4xLjIKKyAgcmVzb2x1dGlvbjogIm1pbml6bGliQG5wbToyLjEuMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIG1pbmlwYXNzOiAibnBtOl4zLjAuMCIKKyAgICB5YWxsaXN0OiAibnBtOl40LjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvNjRmYWUwMjRlMWE3ZDAzNDZhMTEwMmJiNjcwMDg1YjE3YjdmOTViZjZjZmRmNWIxMjg3NzJlYzhmYWY5ZWEyMTE0NjRlYTRhZGQ0MDZhM2E2Mzg0YTdkODdhMGNkMWE5NjI2MzY5MjEzNDMyMzQ3N2I0ZmI0MzY1OWE2Y2FiNzgKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJta2RpcnBAbnBtOl4xLjAuMyI6CisgIHZlcnNpb246IDEuMC40CisgIHJlc29sdXRpb246ICJta2RpcnBAbnBtOjEuMC40IgorICBiaW46CisgICAgbWtkaXJwOiBiaW4vY21kLmpzCisgIGNoZWNrc3VtOiAxMGMwLzQ2ZWEwZjNmZmE4YmM2YTViYzBjNzA4MWZmYzM5MDc3NzdmMGVkNjUxNjg4OGQ0MGE1MThjNTExMWY4MzY2ZDk3ZDI2Nzg5MTFhZDFhNjg4MmJmNTkyZmE5ZGU2Yzc4NGZlYTMyZTE2ODdiYjk0ZTFmNDk0NDE3MGFmNDhhNWNmCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisibXNAbnBtOjIuMS4yIjoKKyAgdmVyc2lvbjogMi4xLjIKKyAgcmVzb2x1dGlvbjogIm1zQG5wbToyLjEuMiIKKyAgY2hlY2tzdW06IDEwYzAvYTQzNzcxNGUyZjkwZGJmODgxYjUxOTFkMzVhNmRiNzkyZWZiY2E1YmFkZjExMmY4N2I5ZTFjNzEyYWFjZTRiNGI5Yjc0MmRkNjUzN2YzZWRmOTBmZDZmNjg0ZGU4OTdjZWMyMzBhYmRlNTdlODc4ODM3NjY3MTJkZGRhMjk3Y2MKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJuYW5vaWRAbnBtOl4zLjMuNyI6CisgIHZlcnNpb246IDMuMy43CisgIHJlc29sdXRpb246ICJuYW5vaWRAbnBtOjMuMy43IgorICBiaW46CisgICAgbmFub2lkOiBiaW4vbmFub2lkLmNqcworICBjaGVja3N1bTogMTBjMC9lM2ZiNjYxYWEwODM0NTRmNDA1MDA0NzNiYjY5ZWVkYjg1ZGMxNjBlNzYzMTUwYjlhMmM1NjdjN2U5ZmY1NjBjZTAyOGE5ZjgzMzEyM2I2MThhNmVhNzQyZTMxMTEzOGI1OTE5MTBlNzk1NjE0YTYyOTAyOWU4NmUxODA2NjBmMworICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm5lZ290aWF0b3JAbnBtOl4wLjYuMyI6CisgIHZlcnNpb246IDAuNi4zCisgIHJlc29sdXRpb246ICJuZWdvdGlhdG9yQG5wbTowLjYuMyIKKyAgY2hlY2tzdW06IDEwYzAvM2VjOWZkNDEzZTdiZjA3MWM5MzdhZTYwZDU3MmJjNjcxNTUyNjIwNjhlZDUyMmNmNGIzYmU1ZWRiZTZkZGY2N2QwOTVlYzAzYTNhMTRlYmY4ZmM4ZTk1ZjhlMWQ2MWJlNDg2OWRiMGRiYjBkZTY5NmY2YjgzNzM1OGJkNDNmYzIKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJub2RlLWd5cEBucG06bGF0ZXN0IjoKKyAgdmVyc2lvbjogMTAuMC4xCisgIHJlc29sdXRpb246ICJub2RlLWd5cEBucG06MTAuMC4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgZW52LXBhdGhzOiAibnBtOl4yLjIuMCIKKyAgICBleHBvbmVudGlhbC1iYWNrb2ZmOiAibnBtOl4zLjEuMSIKKyAgICBnbG9iOiAibnBtOl4xMC4zLjEwIgorICAgIGdyYWNlZnVsLWZzOiAibnBtOl40LjIuNiIKKyAgICBtYWtlLWZldGNoLWhhcHBlbjogIm5wbTpeMTMuMC4wIgorICAgIG5vcHQ6ICJucG06XjcuMC4wIgorICAgIHByb2MtbG9nOiAibnBtOl4zLjAuMCIKKyAgICBzZW12ZXI6ICJucG06XjcuMy41IgorICAgIHRhcjogIm5wbTpeNi4xLjIiCisgICAgd2hpY2g6ICJucG06XjQuMC4wIgorICBiaW46CisgICAgbm9kZS1neXA6IGJpbi9ub2RlLWd5cC5qcworICBjaGVja3N1bTogMTBjMC9hYmRkZmZmN2Q4NzMzMTJlNGVkNGE1ZmI3NWNlODkzYTVjNGZiNjllN2ZjYjFkZmE3MWMyOGE2YjkyYTdmMWVmNmI2Mjc5MGRmZmIzOTE4MWI1YTgyNzI4YmE4ZjJmMzJkMjI5Y2Y4Y2JlNjY3NjlmZTAyY2VhN2RiNGE1NTVhYQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIm5vcHRAbnBtOl43LjAuMCI6CisgIHZlcnNpb246IDcuMi4wCisgIHJlc29sdXRpb246ICJub3B0QG5wbTo3LjIuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFiYnJldjogIm5wbTpeMi4wLjAiCisgIGJpbjoKKyAgICBub3B0OiBiaW4vbm9wdC5qcworICBjaGVja3N1bTogMTBjMC85YmQ3MTk4ZGY2ZjE2ZWIyOWZmMTY4OTJjNzdiY2Y3ZjBjYzQxZjlmYjVjMjYyODBhYzBkZWYyY2Y4Y2YzMTlmM2I4MjFiM2FmODNlYmEwZTc0Yzg1ODA3Y2M0MzBhMTZlZmUwZGI1OGZlNmFlMWY0MWU2OTUxOWY1ODViNmFmZgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInAtbWFwQG5wbTpeNC4wLjAiOgorICB2ZXJzaW9uOiA0LjAuMAorICByZXNvbHV0aW9uOiAicC1tYXBAbnBtOjQuMC4wIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWdncmVnYXRlLWVycm9yOiAibnBtOl4zLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvNTkyYzA1YmQ2MjYyYzQ2NmNlMjY5ZmYxNzJiYjhkZTdjNjk3NWFmY2E5YjUwYzk3NTEzNWI5NzRlOWJkYWFmYmZlODBlNjFhYWFmNWJlNmQxMjAwYmEwOGIzMGVhZDA0Yjg4Y2ZhN2UyNWZmMWUzYjkzYWIyOGM5ZjYyYTJjNzUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJwYXRoLWtleUBucG06XjMuMS4wIjoKKyAgdmVyc2lvbjogMy4xLjEKKyAgcmVzb2x1dGlvbjogInBhdGgta2V5QG5wbTozLjEuMSIKKyAgY2hlY2tzdW06IDEwYzAvNzQ4YzQzZWZkNWE1NjljMDM5ZDdhMDBhMDNiNThlZWNkMWQ3NWYzOTk5ZjVhMjgzMDNkNzVmNTIxMjg4ZGY0ODIzYmMwNTdkODc4NGViNzIzNThiMjg5NWEwNWYyOWEwNzBiYzlmMWYxN2QyODIyNmNjNGU2MjQ5NGNjNThjNGMKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJwYXRoLXNjdXJyeUBucG06XjEuMTAuMSI6CisgIHZlcnNpb246IDEuMTAuMQorICByZXNvbHV0aW9uOiAicGF0aC1zY3VycnlAbnBtOjEuMTAuMSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGxydS1jYWNoZTogIm5wbTpeOS4xLjEgfHwgXjEwLjAuMCIKKyAgICBtaW5pcGFzczogIm5wbTpeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvZTVkYzc4YTczNDhkMjVlZWM2MWFiMTY2MzE3ZTllOWM3YjQ2ODE4YWEyYzJiOTAwNmM1MDdhNmZmNDhjNjcyZDAxMTI5MmQ5NjYyNTI3MjEzZTU1OGY1NjUyY2UwYWZjYzc4ODY2M2EwNjFkOGI1OWFiNDk1NjgxODQwYzBjMWUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJwaWNvY29sb3JzQG5wbTpeMS4wLjAiOgorICB2ZXJzaW9uOiAxLjAuMAorICByZXNvbHV0aW9uOiAicGljb2NvbG9yc0BucG06MS4wLjAiCisgIGNoZWNrc3VtOiAxMGMwLzIwYTViMjQ5ZTMzMWMxNDQ3OWQ5NGVjNjgxN2ExODJmZDdhNTY4MGRlYmFlODI3MDU3NDdiMmRiN2VjNTAwMDlhNWY2NjQ4ZDA2MjFjNTYxYjA1NzI3MDNmODRkYmVmMDg1OGFiY2JkNTg1NmQzYzU1MTE0MjZhZmNiMTk2MWY3CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisicG9zdGNzc0BucG06XjguNC4zNSI6CisgIHZlcnNpb246IDguNC4zNQorICByZXNvbHV0aW9uOiAicG9zdGNzc0BucG06OC40LjM1IgorICBkZXBlbmRlbmNpZXM6CisgICAgbmFub2lkOiAibnBtOl4zLjMuNyIKKyAgICBwaWNvY29sb3JzOiAibnBtOl4xLjAuMCIKKyAgICBzb3VyY2UtbWFwLWpzOiAibnBtOl4xLjAuMiIKKyAgY2hlY2tzdW06IDEwYzAvZThkZDA0ZTQ4MDAxZWI1ODU3YWJjOTQ3NTM2NWJmMDhmNGU1MDhkZGY5YmMwYjg1MjU0NDlhOTVkMTkwZjEwZDAyNWFjZWJjNWI1NmFjMmU5NGIzYzcxNDY3OTBlNGFlNzg5ODliYjk2MzNjYjdlZTIwZDFjYzliN2RjOTA5YjIKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJwcm9jLWxvZ0BucG06XjMuMC4wIjoKKyAgdmVyc2lvbjogMy4wLjAKKyAgcmVzb2x1dGlvbjogInByb2MtbG9nQG5wbTozLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvZjY2NDMwZTRmZjk0N2RiYjk5NjA1OGY2ZmQyMmRlMmM2NjYxMmFlMWE4OWIwOTc3NDRlMTdmYjE4YTRlOGU3YTg2ZGI5OWVkYTUyY2NmMTVlNTNmMDBiNjNmNGVjMGIwOTExNTgxZmYyYWFjMDM1NWI2MjVjOGVhYzUwOWIwZGMKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJwcm9jZXNzQG5wbTpeMC4xMS4xMCI6CisgIHZlcnNpb246IDAuMTEuMTAKKyAgcmVzb2x1dGlvbjogInByb2Nlc3NAbnBtOjAuMTEuMTAiCisgIGNoZWNrc3VtOiAxMGMwLzQwYzNjZTRiN2U2ZDRiOGMzMzU1NDc5ZGY3N2FlZWQ0NmY4MWIyNzk4MThjY2RjNTAwMTI0ZTZhNWFiODgyYzBjYzgxZmY3ZWExNjM4NDg3M2E5NWE3NGM0NTcwYjAxYjEyMGYyODdhYmJkZDRjODc3OTMxNDYwZWNhNjA4NGIzCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisicHJvbWlzZS1yZXRyeUBucG06XjIuMC4xIjoKKyAgdmVyc2lvbjogMi4wLjEKKyAgcmVzb2x1dGlvbjogInByb21pc2UtcmV0cnlAbnBtOjIuMC4xIgorICBkZXBlbmRlbmNpZXM6CisgICAgZXJyLWNvZGU6ICJucG06XjIuMC4yIgorICAgIHJldHJ5OiAibnBtOl4wLjEyLjAiCisgIGNoZWNrc3VtOiAxMGMwLzljNzA0NWExYTI5MjgwOTRiNWI5YjE1MzM2ZGNkMmE3YjFjMDUyZjY3NDU1MGRmNjNjYzNmMzZjZDQ0MDI4ZTUwODA0NDgxNzViNmY2Y2EzMmI2NDJkZTgxMTUwZjVlN2IxYTk4YjcyOGYxNWNiMDY5ZjJkZDYwYWMyNjE2Yjk2CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisicmVhZGFibGUtc3RyZWFtQG5wbTpeNC41LjIiOgorICB2ZXJzaW9uOiA0LjUuMgorICByZXNvbHV0aW9uOiAicmVhZGFibGUtc3RyZWFtQG5wbTo0LjUuMiIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFib3J0LWNvbnRyb2xsZXI6ICJucG06XjMuMC4wIgorICAgIGJ1ZmZlcjogIm5wbTpeNi4wLjMiCisgICAgZXZlbnRzOiAibnBtOl4zLjMuMCIKKyAgICBwcm9jZXNzOiAibnBtOl4wLjExLjEwIgorICAgIHN0cmluZ19kZWNvZGVyOiAibnBtOl4xLjMuMCIKKyAgY2hlY2tzdW06IDEwYzAvYTJjODBlMGU1M2FhYmQ5MWQ3ZGYwMzMwOTI5ZTMyZDBhNzMyMTlmOTQ3N2RiYmIxODQ3MmY2ZmRkNmExMWE2OTlmYzVkMTcyYTFiZWZmOThkNTBlYWU0ZjE0OTZjOTUwZmZhODViN2NjMmM0YzE5Njk2M2YyODlhNWYzOTI3NWQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJyZXRyeUBucG06XjAuMTIuMCI6CisgIHZlcnNpb246IDAuMTIuMAorICByZXNvbHV0aW9uOiAicmV0cnlAbnBtOjAuMTIuMCIKKyAgY2hlY2tzdW06IDEwYzAvNTk5MzNlODUwMTcyN2JhMTNhZDczZWY0YTA0ZDUyODBiMzcxN2ZkNjUwNDA4NDYwYzk4NzM5MmVmZTlkN2JlMjA0MDc3OGVkOGViZTkzM2M1Y2JkNjNkYTNkY2MzNzkxOWMxNDFlZjhhZjBhNTRhNmU0ZmNhNWEyYWYxNzdiZmUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJyb2xsdXBAbnBtOl40LjIuMCI6CisgIHZlcnNpb246IDQuMTIuMAorICByZXNvbHV0aW9uOiAicm9sbHVwQG5wbTo0LjEyLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICAiQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm0tZWFiaSI6ICJucG06NC4xMi4wIgorICAgICJAcm9sbHVwL3JvbGx1cC1hbmRyb2lkLWFybTY0IjogIm5wbTo0LjEyLjAiCisgICAgIkByb2xsdXAvcm9sbHVwLWRhcndpbi1hcm02NCI6ICJucG06NC4xMi4wIgorICAgICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4teDY0IjogIm5wbTo0LjEyLjAiCisgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybS1nbnVlYWJpaGYiOiAibnBtOjQuMTIuMCIKKyAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtYXJtNjQtZ251IjogIm5wbTo0LjEyLjAiCisgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LW11c2wiOiAibnBtOjQuMTIuMCIKKyAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgtcmlzY3Y2NC1nbnUiOiAibnBtOjQuMTIuMCIKKyAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LWdudSI6ICJucG06NC4xMi4wIgorICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC14NjQtbXVzbCI6ICJucG06NC4xMi4wIgorICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi1hcm02NC1tc3ZjIjogIm5wbTo0LjEyLjAiCisgICAgIkByb2xsdXAvcm9sbHVwLXdpbjMyLWlhMzItbXN2YyI6ICJucG06NC4xMi4wIgorICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi14NjQtbXN2YyI6ICJucG06NC4xMi4wIgorICAgICJAdHlwZXMvZXN0cmVlIjogIm5wbToxLjAuNSIKKyAgICBmc2V2ZW50czogIm5wbTp+Mi4zLjIiCisgIGRlcGVuZGVuY2llc01ldGE6CisgICAgIkByb2xsdXAvcm9sbHVwLWFuZHJvaWQtYXJtLWVhYmkiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQHJvbGx1cC9yb2xsdXAtYW5kcm9pZC1hcm02NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAcm9sbHVwL3JvbGx1cC1kYXJ3aW4tYXJtNjQiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQHJvbGx1cC9yb2xsdXAtZGFyd2luLXg2NCI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm0tZ251ZWFiaWhmIjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LWFybTY0LWdudSI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAcm9sbHVwL3JvbGx1cC1saW51eC1hcm02NC1tdXNsIjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXJpc2N2NjQtZ251IjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgIkByb2xsdXAvcm9sbHVwLWxpbnV4LXg2NC1nbnUiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQHJvbGx1cC9yb2xsdXAtbGludXgteDY0LW11c2wiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzItYXJtNjQtbXN2YyI6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgICJAcm9sbHVwL3JvbGx1cC13aW4zMi1pYTMyLW1zdmMiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICAiQHJvbGx1cC9yb2xsdXAtd2luMzIteDY0LW1zdmMiOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICBmc2V2ZW50czoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgIGJpbjoKKyAgICByb2xsdXA6IGRpc3QvYmluL3JvbGx1cAorICBjaGVja3N1bTogMTBjMC8xNjUwMTY4MjMxYWU4ZTJiZDZmYjRkODJjYzIzMmU1M2I1YzBmZTY3ODk1MTg4ZmE2ODMzNzBjOWJkM2YxZmViYWEyOGU0NWM2YjEwMGNlYTMzM2U1NGY4ZjVmYWU2ZjRkMGVlYTdkODYyNTZlYzJjYzNlMzgyMTJjNTU3OTZkNgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInNhZmUtYnVmZmVyQG5wbTp+NS4yLjAiOgorICB2ZXJzaW9uOiA1LjIuMQorICByZXNvbHV0aW9uOiAic2FmZS1idWZmZXJAbnBtOjUuMi4xIgorICBjaGVja3N1bTogMTBjMC82NTAxOTE0MjM3YzBhODZlOTY3NWQ0ZTUxZDg5Y2EzYzIxZmZkNmEzMTY0MmVmZWJhMjVhZDY1NzIwYmNlNjkyMWM5ZTdlOTc0ZTViZTkxYTc4NmIyNWFhMDU4YjUzMDMyODVkM2MxNWRiYWJmOTgzYTkxOWY1ZjYzMGQzNDlmMworICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInNhZmVyLWJ1ZmZlckBucG06Pj0gMi4xLjIgPCAzLjAuMCI6CisgIHZlcnNpb246IDIuMS4yCisgIHJlc29sdXRpb246ICJzYWZlci1idWZmZXJAbnBtOjIuMS4yIgorICBjaGVja3N1bTogMTBjMC83ZTNjOGIyZTg4YTE4NDFjOTY3MTA5NGJiYWVlYmQ5NDQ0ODExMWRkOTBhODFhMWY2MDZmM2Y2NzcwOGE2ZWM1Nzc2M2IzYjQ3ZjA2ZGEwOWZjNjA1NDE5M2UwZTY3MDllNzczMjU0MTVkYzg0MjJiMDQ0OTdhODA3MGZhMDJkNAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInNlbXZlckBucG06XjcuMy41IjoKKyAgdmVyc2lvbjogNy42LjAKKyAgcmVzb2x1dGlvbjogInNlbXZlckBucG06Ny42LjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBscnUtY2FjaGU6ICJucG06XjYuMC4wIgorICBiaW46CisgICAgc2VtdmVyOiBiaW4vc2VtdmVyLmpzCisgIGNoZWNrc3VtOiAxMGMwL2ZiZmU3MTcwOTRhY2UwYWE4ZDYzMzJkN2VmNWNlNzI3MjU5ODE1YmQ4ZDg4MTU3MDA4NTNmNGZhZjIzYWFjYmQ3MTkyNTIyZjBkYzVhZjZkZjUyZWY0ZmE4NWEzNTVlYmQyZjVkMzlmNTU0YmQwMjgyMDBkNmNmNDgxYWI5YjUzCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisic2hlYmFuZy1jb21tYW5kQG5wbTpeMi4wLjAiOgorICB2ZXJzaW9uOiAyLjAuMAorICByZXNvbHV0aW9uOiAic2hlYmFuZy1jb21tYW5kQG5wbToyLjAuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHNoZWJhbmctcmVnZXg6ICJucG06XjMuMC4wIgorICBjaGVja3N1bTogMTBjMC9hNDE2OTJlN2Q4OWE1NTNlZjIxZDMyNGE1Y2NlYjVmNjg2ZDFmM2MwNDA3NTljNTBhYWI2OTY4ODYzNDY4OGM1YzMyN2YyNmYzZWNmNzAwMWViZmQ3OGMwMWYzYzdjMGExMWE3YzhiZmQwYThiYzlmNjI0MGQ0ZjQwYjIyNGU0ZQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInNoZWJhbmctcmVnZXhAbnBtOl4zLjAuMCI6CisgIHZlcnNpb246IDMuMC4wCisgIHJlc29sdXRpb246ICJzaGViYW5nLXJlZ2V4QG5wbTozLjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvMWRiZWQwNzI2ZGQwZTExNTJhOTI2OTZjNzZjN2YwNjA4NGViMzJhOTBmMDUyOGQxMWFjZDc2NDA0M2FhY2Y3Njk5NGIyZmIzMGFhMTI5MWEyMWJkMDE5ZDY2OTkxNjRkMDQ4Mjg2MzA5YTI3ODg1NWVlN2JlYzA2Y2Y2ZmI2OTAKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJzaWduYWwtZXhpdEBucG06XjQuMC4xIjoKKyAgdmVyc2lvbjogNC4xLjAKKyAgcmVzb2x1dGlvbjogInNpZ25hbC1leGl0QG5wbTo0LjEuMCIKKyAgY2hlY2tzdW06IDEwYzAvNDE2MDJkY2U1NDBlNDZkNTk5ZWRiYTlkOTg2MDE5MzM5OGQxMzVmN2ZmNzJjYWI2MjlkYjUxNzE1MTZjZmFlNjI4ZDIxZTdiZmNjZGUxYmJmZGYxMWM0ODcyNmJjMmE2ZDFhOGZiODcwMTEyNTg1MmZiZmRhN2NmMTljNmFhODMKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJzbWFydC1idWZmZXJAbnBtOl40LjIuMCI6CisgIHZlcnNpb246IDQuMi4wCisgIHJlc29sdXRpb246ICJzbWFydC1idWZmZXJAbnBtOjQuMi4wIgorICBjaGVja3N1bTogMTBjMC9hMTY3NzUzMjNlMTQwNGRkNDNmYWJhZmU3NDYwYmUxM2E0NzFlMDIxNjM3YmM3ODg5NDY4ZWI0NWNlNmE2YjIwNzI2MWY0NTRlNGU1MzBhMTk1MDBjYzk2MmM0Y2M1MzQ4NTgzNTIwODQzYjM2M2Y0MTkzY2VlNWMwMGUxZTUzOQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInNvY2tzLXByb3h5LWFnZW50QG5wbTpeOC4wLjEiOgorICB2ZXJzaW9uOiA4LjAuMgorICByZXNvbHV0aW9uOiAic29ja3MtcHJveHktYWdlbnRAbnBtOjguMC4yIgorICBkZXBlbmRlbmNpZXM6CisgICAgYWdlbnQtYmFzZTogIm5wbTpeNy4wLjIiCisgICAgZGVidWc6ICJucG06XjQuMy40IgorICAgIHNvY2tzOiAibnBtOl4yLjcuMSIKKyAgY2hlY2tzdW06IDEwYzAvYTg0MjQwMmZjOWI4ODQ4YTMxMzY3ZjI4MTFjYTNjZDE0YzQxMDY1ODhiMzlhMDkwMWNkN2E2OTAyOTk5OGFkZmM2NDU2YjAyMDM2MTdjMThlZDA5MDU0MmFkMGMyNGVlNGU5ZDRjNzVhMGM0Yjc1MDcxZTIxNDIyN2MxNzdlYjcKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJzb2Nrc0BucG06XjIuNy4xIjoKKyAgdmVyc2lvbjogMi44LjEKKyAgcmVzb2x1dGlvbjogInNvY2tzQG5wbToyLjguMSIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGlwLWFkZHJlc3M6ICJucG06XjkuMC41IgorICAgIHNtYXJ0LWJ1ZmZlcjogIm5wbTpeNC4yLjAiCisgIGNoZWNrc3VtOiAxMGMwL2FjNzdiNTE1YzI2MDQ3M2NjN2M0NDUyZjA5YjIwOTM5ZTIyNTEwY2UzYWU0ODM4NWM1MTZkMWQ1Nzg0Mzc0ZDVjYzc1YmUzY2IxOGZmNjZjYzk4NWE3ZjRmMmVmOGZlZjg0ZTk4NGM1ZWM3MGFhZDU4MzU1ZWQ1OTI0MWY0MGE4CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisic291cmNlLW1hcC1qc0BucG06XjEuMC4yIjoKKyAgdmVyc2lvbjogMS4wLjIKKyAgcmVzb2x1dGlvbjogInNvdXJjZS1tYXAtanNAbnBtOjEuMC4yIgorICBjaGVja3N1bTogMTBjMC8zMmYyZGZkMWU5YjcxNjhmOWE5NzE1ZWIxYjRlMjE5MDU4NTBmM2I1MGNmMDJjZjQ3NmU0N2U0ZWViZThlNmI3NjJiNjNhNjQzNTc4OTZhYTI5YjM3ZTI0OTIyYjQyODJkZjBmNDkyZTBkMmFjZTU3MmI0M2QxNTUyNTk3NmZmOAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInNwcmludGYtanNAbnBtOl4xLjEuMyI6CisgIHZlcnNpb246IDEuMS4zCisgIHJlc29sdXRpb246ICJzcHJpbnRmLWpzQG5wbToxLjEuMyIKKyAgY2hlY2tzdW06IDEwYzAvMDkyNzBkYzRmMzBkNDc5ZTY2NmFlZTgyMGVhY2Q5ZTQ2NDIxNWNkZmY1Mzg0OGI0NDM5NjQyMDJiZjQwNTE0OTA1MzhlNWRkMWI0MmUxYTY1Y2Y3Mjk2OTE2Y2ExNzY0MGFlYmY2M2RhZTk4MTI3NDljNzU0MmVlNWYyODhkZWMKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJzc3JpQG5wbTpeMTAuMC4wIjoKKyAgdmVyc2lvbjogMTAuMC41CisgIHJlc29sdXRpb246ICJzc3JpQG5wbToxMC4wLjUiCisgIGRlcGVuZGVuY2llczoKKyAgICBtaW5pcGFzczogIm5wbTpeNy4wLjMiCisgIGNoZWNrc3VtOiAxMGMwL2IwOTFmMmFlOTI0NzQxODNjN2FjNWVkM2Y5ODExNDU3ZTFkZjIzZGY3YTdlNzBjOTQ3NmVhYTlhMGM0YTBjOGZjMTkwZmI0NWFjZWZiZjAyM2NhOWVlODY0ZGQ2NzU0MjM3YTY5N2RjNTJhMGZiMTgyYWZlNjVkOGU3NzQ0M2Q4CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisic3RyaW5nLXdpZHRoLWNqc0BucG06c3RyaW5nLXdpZHRoQF40LjIuMCwgc3RyaW5nLXdpZHRoQG5wbTpeNC4xLjAiOgorICB2ZXJzaW9uOiA0LjIuMworICByZXNvbHV0aW9uOiAic3RyaW5nLXdpZHRoQG5wbTo0LjIuMyIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGVtb2ppLXJlZ2V4OiAibnBtOl44LjAuMCIKKyAgICBpcy1mdWxsd2lkdGgtY29kZS1wb2ludDogIm5wbTpeMy4wLjAiCisgICAgc3RyaXAtYW5zaTogIm5wbTpeNi4wLjEiCisgIGNoZWNrc3VtOiAxMGMwLzFlNTI1ZTkyZTVlYWUwYWZkNzQ1NDA4NmVlZDljODE4ZWU4NDM3NGJiODAzMjhmYzQxMjE3YWU3MmZmNWYwNjVlZjFjOWQ3ZjcyZGE0MWRlNDBjNzVmYThiYjNkZWU2M2Q5MjM3M2ZkNDkyYzg0MjYwYTU1MmM2MzYzOTJhNDdiCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisic3RyaW5nLXdpZHRoQG5wbTpeNS4wLjEsIHN0cmluZy13aWR0aEBucG06XjUuMS4yIjoKKyAgdmVyc2lvbjogNS4xLjIKKyAgcmVzb2x1dGlvbjogInN0cmluZy13aWR0aEBucG06NS4xLjIiCisgIGRlcGVuZGVuY2llczoKKyAgICBlYXN0YXNpYW53aWR0aDogIm5wbTpeMC4yLjAiCisgICAgZW1vamktcmVnZXg6ICJucG06XjkuMi4yIgorICAgIHN0cmlwLWFuc2k6ICJucG06XjcuMC4xIgorICBjaGVja3N1bTogMTBjMC9hYjljNDI2NDQ0M2QzNWI4YjkyM2NiZGQ1MTNhMDg5YTYwZGUzMzkyMTZkM2IwZWQzYmUzYmE1N2Q2ODgwZTFhMTkyYjcwYWUxNzIyNWY3NjRkN2FkYmY1OTk0ZTliYjhkZjI1M2E5NDQ3MzZjMTVhMDI0MGVmZjU1M2M2NzhjYQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInN0cmluZ19kZWNvZGVyQG5wbTpeMS4zLjAiOgorICB2ZXJzaW9uOiAxLjMuMAorICByZXNvbHV0aW9uOiAic3RyaW5nX2RlY29kZXJAbnBtOjEuMy4wIgorICBkZXBlbmRlbmNpZXM6CisgICAgc2FmZS1idWZmZXI6ICJucG06fjUuMi4wIgorICBjaGVja3N1bTogMTBjMC84MTA2MTRkZGIwMzBlMjcxY2Q1OTE5MzVkY2Q1OTU2YjI0MTBkZDA3OWQ2NGZmOTJhMTg0NGQ2Yjc1ODhiZjk5MmIzZTFiNjliMGY0ZDM0YTNlMDZlMGJkNzMwNDZhYzY0NmI1MjY0YzE5ODdiMjBkMDYwMWY4MWVmMzVkNzMxZAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInN0cmlwLWFuc2ktY2pzQG5wbTpzdHJpcC1hbnNpQF42LjAuMSwgc3RyaXAtYW5zaUBucG06XjYuMC4wLCBzdHJpcC1hbnNpQG5wbTpeNi4wLjEiOgorICB2ZXJzaW9uOiA2LjAuMQorICByZXNvbHV0aW9uOiAic3RyaXAtYW5zaUBucG06Ni4wLjEiCisgIGRlcGVuZGVuY2llczoKKyAgICBhbnNpLXJlZ2V4OiAibnBtOl41LjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvMWFlNWYyMTJhMTI2ZmU1YjE2NzcwN2Y3MTY5NDI0OTBlMzkzMzA4NWE1ZmY2YzAwOGFiOTdhYjJmMjcyYzgwMjVkM2FhMjE4YjdiZDZhYjI1NzI5Y2EyMGNjODFjZGRiMjUyMTAyZjg3NTFlMTM0ODJhNTE5OWU4NzM2ODA5NTIKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJzdHJpcC1hbnNpQG5wbTpeNy4wLjEiOgorICB2ZXJzaW9uOiA3LjEuMAorICByZXNvbHV0aW9uOiAic3RyaXAtYW5zaUBucG06Ny4xLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBhbnNpLXJlZ2V4OiAibnBtOl42LjAuMSIKKyAgY2hlY2tzdW06IDEwYzAvYTE5OGMzNzYyZTg4MzI1MDUzMjhjYmY5ZThjODM4MWRlMTRhNGZhNTBhNGY5YjIxNjAxMzgxNThlYTg4YzBmNTU0OWZiNTBjYjEzYzY1MWMzMDg4ZjQ3ZTYzYTEwOGIzNDYyMmVjMThjMDQ5OWI2YzhjM2E1ZGRmNmIzMDVhYzQKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJ0YXJAbnBtOl42LjEuMTEsIHRhckBucG06XjYuMS4yIjoKKyAgdmVyc2lvbjogNi4yLjAKKyAgcmVzb2x1dGlvbjogInRhckBucG06Ni4yLjAiCisgIGRlcGVuZGVuY2llczoKKyAgICBjaG93bnI6ICJucG06XjIuMC4wIgorICAgIGZzLW1pbmlwYXNzOiAibnBtOl4yLjAuMCIKKyAgICBtaW5pcGFzczogIm5wbTpeNS4wLjAiCisgICAgbWluaXpsaWI6ICJucG06XjIuMS4xIgorICAgIG1rZGlycDogIm5wbTpeMS4wLjMiCisgICAgeWFsbGlzdDogIm5wbTpeNC4wLjAiCisgIGNoZWNrc3VtOiAxMGMwLzAyY2EwNjRhMWE2YjQ1MjFmZWY4OGMwN2QzODlhYzA5MzY3MzAwOTFmOGMwMmQzMGVhNjBkNDcyZTAzNzg3NjhlODcwNzY5YWI5ZTk4NmQ4NzgwN2JmZWU1NjU0MzU5Y2YyOWZmNDM3Mjc0NmNjNjVlMzBjYmRkYzM1MjY2MGQ4CisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisidW5pcXVlLWZpbGVuYW1lQG5wbTpeMy4wLjAiOgorICB2ZXJzaW9uOiAzLjAuMAorICByZXNvbHV0aW9uOiAidW5pcXVlLWZpbGVuYW1lQG5wbTozLjAuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIHVuaXF1ZS1zbHVnOiAibnBtOl40LjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvNjM2M2U0MGIyZmE3NThlYjVlYzVlMjFiM2M3ZmI4M2U1ZGE4ZGNmYmQ4NjZjYzBjMTk5ZDU1MzRjNDJmMDNiOWVhOWFiMDY5NzY5Y2MzODhlMWQ3YWI5M2I0ZWVlZjI4ZWY1MDZhYjVmMThkOTEwZWYyOTYxNzcxNTEwMTg4NGYKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJ1bmlxdWUtc2x1Z0BucG06XjQuMC4wIjoKKyAgdmVyc2lvbjogNC4wLjAKKyAgcmVzb2x1dGlvbjogInVuaXF1ZS1zbHVnQG5wbTo0LjAuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGltdXJtdXJoYXNoOiAibnBtOl4wLjEuNCIKKyAgY2hlY2tzdW06IDEwYzAvY2I4MTFkOWQ1NGViNTgyMWI4MWIxODIwNTc1MGJlODRjYjAxNWMyMGE0YTQ0MjgwNzk0ZTkxNWY1YTBhNzAyMjNjZTM5MDY2NzgxYTM1NGU4NzJkZjM1NzJlODE1NWMyMjhmNDNmZjBjY2U5NGM3Y2JmNGRhMmNjN2NiZGQ2MzUKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCisKKyJ1dWlkQG5wbTpeOS4wLjEiOgorICB2ZXJzaW9uOiA5LjAuMQorICByZXNvbHV0aW9uOiAidXVpZEBucG06OS4wLjEiCisgIGJpbjoKKyAgICB1dWlkOiBkaXN0L2Jpbi91dWlkCisgIGNoZWNrc3VtOiAxMGMwLzE2MDdkZDMyYWM3ZmMyMmYyZDhmNzcwNTFlNmE2NDg0NWM5YmNlNWNkM2RkOGFhMDA3MGMwNzRlYzczZTY2NmExZjYzYzdiNGUwZjRiZjJiYzhiOWQ1OWRjODVhMTVlMTc4MDc0NDZkOWQyYjE3Yzg0ODVmYmMyMTQ3YjI3ZjliCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisidml0ZUBucG06XjUuMS40IjoKKyAgdmVyc2lvbjogNS4xLjQKKyAgcmVzb2x1dGlvbjogInZpdGVAbnBtOjUuMS40IgorICBkZXBlbmRlbmNpZXM6CisgICAgZXNidWlsZDogIm5wbTpeMC4xOS4zIgorICAgIGZzZXZlbnRzOiAibnBtOn4yLjMuMyIKKyAgICBwb3N0Y3NzOiAibnBtOl44LjQuMzUiCisgICAgcm9sbHVwOiAibnBtOl40LjIuMCIKKyAgcGVlckRlcGVuZGVuY2llczoKKyAgICAiQHR5cGVzL25vZGUiOiBeMTguMC4wIHx8ID49MjAuMC4wCisgICAgbGVzczogIioiCisgICAgbGlnaHRuaW5nY3NzOiBeMS4yMS4wCisgICAgc2FzczogIioiCisgICAgc3R5bHVzOiAiKiIKKyAgICBzdWdhcnNzOiAiKiIKKyAgICB0ZXJzZXI6IF41LjQuMAorICBkZXBlbmRlbmNpZXNNZXRhOgorICAgIGZzZXZlbnRzOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgcGVlckRlcGVuZGVuY2llc01ldGE6CisgICAgIkB0eXBlcy9ub2RlIjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgbGVzczoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgbGlnaHRuaW5nY3NzOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICBzYXNzOgorICAgICAgb3B0aW9uYWw6IHRydWUKKyAgICBzdHlsdXM6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgIHN1Z2Fyc3M6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICAgIHRlcnNlcjoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgIGJpbjoKKyAgICB2aXRlOiBiaW4vdml0ZS5qcworICBjaGVja3N1bTogMTBjMC84ZjA0YzhiZWQzM2YyNjZiZGUyN2Y0MzI0MTI0NTZhM2I4OTNiNTFmZTE4NTdmMGI4Y2QyNTkxMDBiMzc2YzEzOTNhNzkyN2RiMWRkNjM0NGE0Mzc2YmFlZDcyZWQxNzllYzViMDQyOGFlZjJhZTg1MDhmMWYyOGY5NWFjYjkwOAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIndoaWNoQG5wbTpeMi4wLjEiOgorICB2ZXJzaW9uOiAyLjAuMgorICByZXNvbHV0aW9uOiAid2hpY2hAbnBtOjIuMC4yIgorICBkZXBlbmRlbmNpZXM6CisgICAgaXNleGU6ICJucG06XjIuMC4wIgorICBiaW46CisgICAgbm9kZS13aGljaDogLi9iaW4vbm9kZS13aGljaAorICBjaGVja3N1bTogMTBjMC82NjUyMjg3MmE3NjhiNjBjMmE2NWE1N2U4YWQxODRlNTM3MmY1YjZhOWNhNmQ1ZjAzM2Q0YjBkYzk4YWZmNjM5OTU2NTVhNzUwM2I5YzBhMjU5ODkzNmY1MzIxMjBlODFkZDhjYzE1NWUyZTkyZWQ2NjJhMmI5Mzc3Y2M0Mzc0ZgorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIndoaWNoQG5wbTpeNC4wLjAiOgorICB2ZXJzaW9uOiA0LjAuMAorICByZXNvbHV0aW9uOiAid2hpY2hAbnBtOjQuMC4wIgorICBkZXBlbmRlbmNpZXM6CisgICAgaXNleGU6ICJucG06XjMuMS4xIgorICBiaW46CisgICAgbm9kZS13aGljaDogYmluL3doaWNoLmpzCisgIGNoZWNrc3VtOiAxMGMwLzQ0OWZhNWM0NGVkMTIwY2NlY2ZlMThjNDMzMjk2YTQ5NzhhNzU4M2JmMjM5MWM1MGFiY2UxM2Y3Njg3OGQyNDc2ZGVmZGUwNGQwZjc5ZGI4MTY1YmRmNDMyODUzYzFmODM4OWQwNDg1Y2E2ZThlYmNlM2JiY2RlZDUxM2Q1ZTZhCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisid3JhcC1hbnNpLWNqc0BucG06d3JhcC1hbnNpQF43LjAuMCI6CisgIHZlcnNpb246IDcuMC4wCisgIHJlc29sdXRpb246ICJ3cmFwLWFuc2lAbnBtOjcuMC4wIgorICBkZXBlbmRlbmNpZXM6CisgICAgYW5zaS1zdHlsZXM6ICJucG06XjQuMC4wIgorICAgIHN0cmluZy13aWR0aDogIm5wbTpeNC4xLjAiCisgICAgc3RyaXAtYW5zaTogIm5wbTpeNi4wLjAiCisgIGNoZWNrc3VtOiAxMGMwL2QxNWZjMTJjMTFlNGNiYzQwNDRhNTUyMTI5ZWJjNzVlZTNmNTdhYTljMTk1ODM3M2E0ZGIwMjkyZDcyMjgyZjU0MzczYjUzNjEwMzk4N2E0YTc1OTRkYjFlZjZhNGYxMGFjZjkyOTc4Zjc5Yjk4YzQ5MzA2YTRiNThjNzdkNGRhCisgIGxhbmd1YWdlTmFtZTogbm9kZQorICBsaW5rVHlwZTogaGFyZAorCisid3JhcC1hbnNpQG5wbTpeOC4xLjAiOgorICB2ZXJzaW9uOiA4LjEuMAorICByZXNvbHV0aW9uOiAid3JhcC1hbnNpQG5wbTo4LjEuMCIKKyAgZGVwZW5kZW5jaWVzOgorICAgIGFuc2ktc3R5bGVzOiAibnBtOl42LjEuMCIKKyAgICBzdHJpbmctd2lkdGg6ICJucG06XjUuMC4xIgorICAgIHN0cmlwLWFuc2k6ICJucG06XjcuMC4xIgorICBjaGVja3N1bTogMTBjMC8xMzhmZjU4YTQxZDJmODc3ZWFlODdlMzI4MmMwNjMwZmMyNzg5MDEyZmMxYWY0ZDZiZDYyNmVlYjlhMmY5YTY1Y2E5MjAwNWU2ZTY5YTc1YzdiODVhNjg0NzlmZTc0NDNjN2RiZTFlYjhmYmFhNjgxYTQ0OTEzNjRiN2M1NWM2MAorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworIndzQG5wbTpeOC4xNi4wIjoKKyAgdmVyc2lvbjogOC4xNi4wCisgIHJlc29sdXRpb246ICJ3c0BucG06OC4xNi4wIgorICBwZWVyRGVwZW5kZW5jaWVzOgorICAgIGJ1ZmZlcnV0aWw6IF40LjAuMQorICAgIHV0Zi04LXZhbGlkYXRlOiAiPj01LjAuMiIKKyAgcGVlckRlcGVuZGVuY2llc01ldGE6CisgICAgYnVmZmVydXRpbDoKKyAgICAgIG9wdGlvbmFsOiB0cnVlCisgICAgdXRmLTgtdmFsaWRhdGU6CisgICAgICBvcHRpb25hbDogdHJ1ZQorICBjaGVja3N1bTogMTBjMC9hNzc4M2JiNDIxYzY0OGIxZTYyMmI0MjM0MDljYjJhNThhYzU4Mzk1MjFkMmY2ODllODRiYzlkYzQxZDU5Mzc5YzY5MmRkNDA1YjE1YTk5N2VhMWQ0YzBjMmU1MzE0YWQ3MDczMzJkMGM1NThmMTUyMzJkMmJjMDdjMGI0NjE4YQorICBsYW5ndWFnZU5hbWU6IG5vZGUKKyAgbGlua1R5cGU6IGhhcmQKKworInlhbGxpc3RAbnBtOl40LjAuMCI6CisgIHZlcnNpb246IDQuMC4wCisgIHJlc29sdXRpb246ICJ5YWxsaXN0QG5wbTo0LjAuMCIKKyAgY2hlY2tzdW06IDEwYzAvMjI4NmI1ZThkYmZlMjIyMDRhYjY2ZTJlZjVjYzliYmIxZTU1ZGZjODczYmJlMGQ1NjhhYTk0M2ViMjU1ZDEzMTg5MGRmZDViZjI0MzYzNzI3M2QzMTExOWI4NzBmNDljMThmY2RlMmM2ZmZiYjdhN2EwOTJiODcwZGM5MDYyNWEKKyAgbGFuZ3VhZ2VOYW1lOiBub2RlCisgIGxpbmtUeXBlOiBoYXJkCmRpZmYgLS1naXQgYS9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS8uZ2l0aWdub3JlIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS8uZ2l0aWdub3JlCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvYmFzaWMtZ3JlbWxpbi5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvYmFzaWMtZ3JlbWxpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDkzOTE4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9iYXNpYy1ncmVtbGluLmpzCkBAIC0wLDAgKzEsNTUgQEAKKy8qCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorKi8KKworY29uc3QgZ3JlbWxpbiA9IHJlcXVpcmUoJ2dyZW1saW4nKTsKK2NvbnN0IHRyYXZlcnNhbCA9IGdyZW1saW4ucHJvY2Vzcy5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOworY29uc3QgX18gPSBncmVtbGluLnByb2Nlc3Muc3RhdGljczsKK2NvbnN0IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gPSBncmVtbGluLmRyaXZlci5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uOworCitjb25zdCBzZXJ2ZXJVcmwgPSBwcm9jZXNzLmVudi5HUkVNTElOX1NFUlZFUl9VUkwgfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJzsKK2NvbnN0IHZlcnRleExhYmVsID0gcHJvY2Vzcy5lbnYuVkVSVEVYX0xBQkVMIHx8ICdwZXJzb24nOworCithc3luYyBmdW5jdGlvbiBtYWluKCkgeworICAgIGNvbnN0IGRjID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oc2VydmVyVXJsKTsKKyAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8oZGMpOworCisgICAgLy8gQmFzaWMgR3JlbWxpbjogYWRkaW5nIGFuZCByZXRyaWV2aW5nIGRhdGEKKyAgICBjb25zdCB2MSA9IGF3YWl0IGcuYWRkVih2ZXJ0ZXhMYWJlbCkucHJvcGVydHkoJ25hbWUnLCdtYXJrbycpLm5leHQoKTsKKyAgICBjb25zdCB2MiA9IGF3YWl0IGcuYWRkVih2ZXJ0ZXhMYWJlbCkucHJvcGVydHkoJ25hbWUnLCdzdGVwaGVuJykubmV4dCgpOworICAgIGNvbnN0IHYzID0gYXdhaXQgZy5hZGRWKHZlcnRleExhYmVsKS5wcm9wZXJ0eSgnbmFtZScsJ3ZhZGFzJykubmV4dCgpOworCisgICAgLy8gQmUgc3VyZSB0byB1c2UgYSB0ZXJtaW5hdGluZyBzdGVwIGxpa2UgbmV4dCgpIG9yIGl0ZXJhdGUoKSBzbyB0aGF0IHRoZSB0cmF2ZXJzYWwgImV4ZWN1dGVzIgorICAgIC8vIEl0ZXJhdGUoKSBkb2VzIG5vdCByZXR1cm4gYW55IGRhdGEgYW5kIGlzIHVzZWQgdG8ganVzdCBnZW5lcmF0ZSBzaWRlLWVmZmVjdHMgKGkuZS4gd3JpdGUgZGF0YSB0byB0aGUgZGF0YWJhc2UpCisgICAgYXdhaXQgZy5WKHYxLnZhbHVlKS5hZGRFKCdrbm93cycpLnRvKF9fLmNvbnN0YW50KHYyLnZhbHVlKSkucHJvcGVydHkoJ3dlaWdodCcsMC43NSkuaXRlcmF0ZSgpOworICAgIGF3YWl0IGcuVih2MS52YWx1ZSkuYWRkRSgna25vd3MnKS50byhfXy5jb25zdGFudCh2My52YWx1ZSkpLnByb3BlcnR5KCd3ZWlnaHQnLDAuNzUpLml0ZXJhdGUoKTsKKworICAgIC8vIFJldHJpZXZlIHRoZSBkYXRhIGZyb20gdGhlICJtYXJrbyIgdmVydGV4CisgICAgY29uc3QgbWFya28gPSBhd2FpdCBnLlYoKS5oYXModmVydGV4TGFiZWwsJ25hbWUnLCdtYXJrbycpLnZhbHVlcygnbmFtZScpLnRvTGlzdCgpOworICAgIGNvbnNvbGUubG9nKCJuYW1lOiAiICsgbWFya29bMF0pOworCisgICAgLy8gRmluZCB0aGUgIm1hcmtvIiB2ZXJ0ZXggYW5kIHRoZW4gdHJhdmVyc2UgdG8gdGhlIHBlb3BsZSBoZSAia25vd3MiIGFuZCByZXR1cm4gdGhlaXIgZGF0YQorICAgIGNvbnN0IHBlb3BsZU1hcmtvS25vd3MgPSBhd2FpdCBnLlYoKS5oYXModmVydGV4TGFiZWwsJ25hbWUnLCdtYXJrbycpLm91dCgna25vd3MnKS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKTsKKyAgICBwZW9wbGVNYXJrb0tub3dzLmZvckVhY2goKHBlcnNvbikgPT4geworICAgICAgICBjb25zb2xlLmxvZygibWFya28ga25vd3MgIiArIHBlcnNvbik7CisgICAgfSk7CisKKyAgICBhd2FpdCBkYy5jbG9zZSgpOworfQorCittYWluKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9jb25uZWN0aW9ucy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvY29ubmVjdGlvbnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlNTUyNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvY29ubmVjdGlvbnMuanMKQEAgLTAsMCArMSw2MSBAQAorLyoKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitjb25zdCBncmVtbGluID0gcmVxdWlyZSgnZ3JlbWxpbicpOworY29uc3QgdHJhdmVyc2FsID0gZ3JlbWxpbi5wcm9jZXNzLkFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWw7Citjb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKKworY29uc3Qgc2VydmVyVXJsID0gcHJvY2Vzcy5lbnYuR1JFTUxJTl9TRVJWRVJfVVJMIHx8ICdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbic7Citjb25zdCB2ZXJ0ZXhMYWJlbCA9IHByb2Nlc3MuZW52LlZFUlRFWF9MQUJFTCB8fCAnY29ubmVjdGlvbic7CisKK2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CisgICAgYXdhaXQgd2l0aFJlbW90ZSgpOworICAgIGF3YWl0IHdpdGhDb25maWdzKCk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIHdpdGhSZW1vdGUoKSB7CisgICAgLy8gQ29ubmVjdGluZyB0byB0aGUgc2VydmVyCisgICAgY29uc3QgZGMgPSBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJVcmwpOworICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhkYyk7CisKKyAgICAvLyBTaW1wbGUgcXVlcnkgdG8gdmVyaWZ5IGNvbm5lY3Rpb24KKyAgICBjb25zdCB2ID0gYXdhaXQgZy5hZGRWKHZlcnRleExhYmVsKS5pdGVyYXRlKCk7CisgICAgY29uc3QgY291bnQgPSBhd2FpdCBnLlYoKS5oYXNMYWJlbCh2ZXJ0ZXhMYWJlbCkuY291bnQoKS5uZXh0KCk7CisgICAgY29uc29sZS5sb2coIlZlcnRleCBjb3VudDogIiArIGNvdW50LnZhbHVlKTsKKworICAgIC8vIENsZWFudXAKKyAgICBhd2FpdCBkYy5jbG9zZSgpOworfQorCithc3luYyBmdW5jdGlvbiB3aXRoQ29uZmlncygpIHsKKyAgICAvLyBDb25uZWN0aW5nIGFuZCBjdXN0b21pemluZyBjb25maWd1cmF0aW9ucworICAgIGNvbnN0IGRjID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oc2VydmVyVXJsLCB7CisgICAgICAgIHRyYXZlcnNhbFNvdXJjZTogJ2cnLAorICAgICAgICBoZWFkZXJzOiB7ICdYLUFwaS1LZXknOiAneW91ci1hcGkta2V5JyB9LAorICAgIH0pOworICAgIGNvbnN0IGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhkYyk7CisKKyAgICBjb25zdCB2ID0gYXdhaXQgZy5hZGRWKHZlcnRleExhYmVsKS5pdGVyYXRlKCk7CisgICAgY29uc3QgY291bnQgPSBhd2FpdCBnLlYoKS5oYXNMYWJlbCh2ZXJ0ZXhMYWJlbCkuY291bnQoKS5uZXh0KCk7CisgICAgY29uc29sZS5sb2coIlZlcnRleCBjb3VudDogIiArIGNvdW50LnZhbHVlKTsKKworICAgIGF3YWl0IGRjLmNsb3NlKCk7Cit9CisKK21haW4oKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL21vZGVybi10cmF2ZXJzYWxzLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9tb2Rlcm4tdHJhdmVyc2Fscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjhjNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9tb2Rlcm4tdHJhdmVyc2Fscy5qcwpAQCAtMCwwICsxLDc0IEBACisvKgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCitodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK2NvbnN0IGdyZW1saW4gPSByZXF1aXJlKCdncmVtbGluJyk7Citjb25zdCB0cmF2ZXJzYWwgPSBncmVtbGluLnByb2Nlc3MuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKK2NvbnN0IF9fID0gZ3JlbWxpbi5wcm9jZXNzLnN0YXRpY3M7Citjb25zdCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uID0gZ3JlbWxpbi5kcml2ZXIuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKK2NvbnN0IHAgPSBncmVtbGluLnByb2Nlc3MuUDsKK2NvbnN0IHQgPSBncmVtbGluLnByb2Nlc3MudDsKKworY29uc3Qgc2VydmVyVXJsID0gcHJvY2Vzcy5lbnYuR1JFTUxJTl9TRVJWRVJfVVJMIHx8ICdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbic7CisKK2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CisgICAgLyoKKyAgICBUaGlzIGV4YW1wbGUgcmVxdWlyZXMgdGhlIE1vZGVybiB0b3kgZ3JhcGggdG8gYmUgcHJlbG9hZGVkIHVwb24gbGF1bmNoaW5nIHRoZSBHcmVtbGluIHNlcnZlci4KKyAgICBGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1zZXJ2ZXItZG9ja2VyLWltYWdlIGFuZCB1c2UKKyAgICBjb25mL2dyZW1saW4tc2VydmVyLW1vZGVybi55YW1sLgorICAgICovCisgICAgCisgICAgLy8gVXNlIGdtb2Rlcm4gaW4gQ0kgZW52aXJvbm1lbnQsIGRlZmF1bHQgY29ubmVjdGlvbiBsb2NhbGx5CisgICAgY29uc3Qgb3B0aW9ucyA9IHByb2Nlc3MuZW52LkRPQ0tFUl9FTlZJUk9OTUVOVCA/IHsgdHJhdmVyc2FsU291cmNlOiAnZ21vZGVybicgfSA6IHt9OworICAgIGNvbnN0IGRjID0gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oc2VydmVyVXJsLCBvcHRpb25zKTsKKyAgICBjb25zdCBnID0gdHJhdmVyc2FsKCkud2l0aF8oZGMpOworCisgICAgY29uc3QgZTEgPSBhd2FpdCBnLlYoMSkuYm90aEUoKS50b0xpc3QoKTsgLy8gKDEpCisgICAgY29uc3QgZTIgPSBhd2FpdCBnLlYoMSkuYm90aEUoKS53aGVyZShfXy5vdGhlclYoKS5oYXNJZCgyKSkudG9MaXN0KCk7IC8vICgyKQorICAgIGNvbnN0IHYxID0gYXdhaXQgZy5WKDEpLm5leHQoKTsKKyAgICBjb25zdCB2MiA9IGF3YWl0IGcuVigyKS5uZXh0KCk7CisgICAgY29uc3QgZTMgPSBhd2FpdCBnLlYodjEudmFsdWUpLmJvdGhFKCkud2hlcmUoX18ub3RoZXJWKCkuaWQoKS5pcyh2Mi52YWx1ZSkpLnRvTGlzdCgpOyAvLyAoMykKKyAgICBjb25zdCBlNCA9IGF3YWl0IGcuVih2MS52YWx1ZSkub3V0RSgpLndoZXJlKF9fLmluVigpLmlkKCkuaXModjIudmFsdWUpKS50b0xpc3QoKTsgLy8gKDQpCisgICAgY29uc3QgZTUgPSBhd2FpdCBnLlYoMSkub3V0RSgpLndoZXJlKF9fLmluVigpLmhhcyh0LmlkLCBwLndpdGhpbigyLDMpKSkudG9MaXN0KCk7IC8vICg1KQorICAgIGNvbnN0IGU2ID0gYXdhaXQgZy5WKDEpLm91dCgpLndoZXJlKF9fLmluXygpLmhhc0lkKDYpKS50b0xpc3QoKTsgLy8gKDYpCisKKyAgICBjb25zb2xlLmxvZygiMTogIiArIGUxLnRvU3RyaW5nKCkpOworICAgIGNvbnNvbGUubG9nKCIyOiAiICsgZTIudG9TdHJpbmcoKSk7CisgICAgY29uc29sZS5sb2coIjM6ICIgKyBlMy50b1N0cmluZygpKTsKKyAgICBjb25zb2xlLmxvZygiNDogIiArIGU0LnRvU3RyaW5nKCkpOworICAgIGNvbnNvbGUubG9nKCI1OiAiICsgZTUudG9TdHJpbmcoKSk7CisgICAgY29uc29sZS5sb2coIjY6ICIgKyBlNi50b1N0cmluZygpKTsKKyAgICAKKyAgICAvKgorICAgIDEuIFRoZXJlIGFyZSB0aHJlZSBlZGdlcyBmcm9tIHRoZSB2ZXJ0ZXggd2l0aCB0aGUgaWRlbnRpZmllciBvZiAiMSIuCisgICAgMi4gRmlsdGVyIHRob3NlIHRocmVlIGVkZ2VzIHVzaW5nIHRoZSB3aGVyZSgpLXN0ZXAgdXNpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHZlcnRleCByZXR1cm5lZCBieSBvdGhlclYoKSB0bworICAgICAgIGVuc3VyZSBpdCBtYXRjaGVzIG9uIHRoZSB2ZXJ0ZXggb2YgY29uY2Vybiwgd2hpY2ggaXMgdGhlIG9uZSB3aXRoIGFuIGlkZW50aWZpZXIgb2YgIjIiLgorICAgIDMuIE5vdGUgdGhhdCB0aGUgc2FtZSB0cmF2ZXJzYWwgd2lsbCB3b3JrIGlmIHRoZXJlIGFyZSBhY3R1YWwgVmVydGV4IGluc3RhbmNlcyByYXRoZXIgdGhhbiBqdXN0IHZlcnRleAorICAgICAgIGlkZW50aWZpZXJzLgorICAgIDQuIFRoZSB2ZXJ0ZXggd2l0aCBpZGVudGlmaWVyICIxIiBoYXMgYWxsIG91dGdvaW5nIGVkZ2VzLCBzbyBpdCB3b3VsZCBhbHNvIGJlIGFjY2VwdGFibGUgdG8gdXNlIHRoZSBkaXJlY3Rpb25hbAorICAgICAgIHN0ZXBzIG9mIG91dEUoKSBhbmQgaW5WKCkgc2luY2UgdGhlIHNjaGVtYSBhbGxvd3MgaXQuCisgICAgNS4gVGhlcmUgaXMgYWxzbyBubyBwcm9ibGVtIHdpdGggZmlsdGVyaW5nIHRoZSB0ZXJtaW5hdGluZyBzaWRlIG9mIHRoZSB0cmF2ZXJzYWwgb24gbXVsdGlwbGUgdmVydGljZXMsIGluIHRoaXMKKyAgICAgICBjYXNlLCB2ZXJ0aWNlcyB3aXRoIGlkZW50aWZpZXJzICIyIiBhbmQgIjMiLgorICAgIDYuIFRoZXJl4oCZcyBubyByZWFzb24gd2h5IHRoZSBzYW1lIHBhdHRlcm4gb2YgZXhjbHVzaW9uIHVzZWQgZm9yIGVkZ2VzIHdpdGggd2hlcmUoKSBjYW7igJl0IHdvcmsgZm9yIGEgdmVydGV4CisgICAgICAgYmV0d2VlbiB0d28gdmVydGljZXMuCisgICAgKi8KKworICAgYXdhaXQgZGMuY2xvc2UoKTsKK30KKworbWFpbigpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL3BhY2thZ2UtbG9jay5qc29uIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9wYWNrYWdlLWxvY2suanNvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvcGFja2FnZS1sb2NrLmpzb24KcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvcGFja2FnZS1sb2NrLmpzb24KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvcGFja2FnZS5qc29uIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZXhhbXBsZXMvbm9kZS9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyYTA1OQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMTQgQEAKK3sKKyAgIm5hbWUiOiAiZXhhbXBsZXMiLAorICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICJkZXNjcmlwdGlvbiI6ICJHTFYgZXhhbXBsZSBmb3IgSmF2YVNjcmlwdCB3aXRoIE5vZGUiLAorICAibWFpbiI6ICJjb25uZWN0aW9ucy5qcyIsCisgICJzY3JpcHRzIjogeworICAgICJ0ZXN0IjogImVjaG8gXCJFcnJvcjogbm8gdGVzdCBzcGVjaWZpZWRcIiAmJiBleGl0IDEiCisgIH0sCisgICJhdXRob3IiOiAiUnlhbiBUYW4iLAorICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAiZ3JlbWxpbiI6ICJmaWxlOi4uLy4uIgorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL2F1dGgudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL2F1dGgudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNTU3MwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvYXV0aC50cwpAQCAtMCwwICsxLDgxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworaW1wb3J0IHR5cGUgeyBIdHRwUmVxdWVzdCwgUmVxdWVzdEludGVyY2VwdG9yIH0gZnJvbSAnLi9jb25uZWN0aW9uLmpzJzsKKworZXhwb3J0IGZ1bmN0aW9uIGJhc2ljKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBSZXF1ZXN0SW50ZXJjZXB0b3IgeworICByZXR1cm4gKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0KSA9PiB7CisgICAgcmVxdWVzdC5oZWFkZXJzWydhdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKKyAgfTsKK30KKworZXhwb3J0IGludGVyZmFjZSBBd3NDcmVkZW50aWFscyB7CisgIGFjY2Vzc0tleUlkOiBzdHJpbmc7CisgIHNlY3JldEFjY2Vzc0tleTogc3RyaW5nOworICBzZXNzaW9uVG9rZW4/OiBzdHJpbmc7Cit9CisKK2V4cG9ydCB0eXBlIEF3c0NyZWRlbnRpYWxzUHJvdmlkZXIgPSAoKSA9PiBBd3NDcmVkZW50aWFscyB8IFByb21pc2U8QXdzQ3JlZGVudGlhbHM+OworCitleHBvcnQgZnVuY3Rpb24gc2lndjQocmVnaW9uOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZywgY3JlZGVudGlhbHNQcm92aWRlcj86IEF3c0NyZWRlbnRpYWxzUHJvdmlkZXIpOiBSZXF1ZXN0SW50ZXJjZXB0b3IgeworICBsZXQgc2lnbmVyOiBhbnk7CisgIGxldCByZXNvbHZlZFByb3ZpZGVyOiBBd3NDcmVkZW50aWFsc1Byb3ZpZGVyOworCisgIHJldHVybiBhc3luYyAocmVxdWVzdDogSHR0cFJlcXVlc3QpID0+IHsKKyAgICAvLyBMYXp5LWluaXRpYWxpemUgc2lnbmVyIGFuZCBjcmVkZW50aWFscyBwcm92aWRlciBvbiBmaXJzdCB1c2UKKyAgICBpZiAoIXNpZ25lcikgeworICAgICAgY29uc3QgeyBTaWduYXR1cmVWNCB9ID0gYXdhaXQgaW1wb3J0KCdAc21pdGh5L3NpZ25hdHVyZS12NCcpOworICAgICAgY29uc3QgeyBIYXNoIH0gPSBhd2FpdCBpbXBvcnQoJ0BzbWl0aHkvaGFzaC1ub2RlJyk7CisKKyAgICAgIGlmIChjcmVkZW50aWFsc1Byb3ZpZGVyKSB7CisgICAgICAgIHJlc29sdmVkUHJvdmlkZXIgPSBjcmVkZW50aWFsc1Byb3ZpZGVyOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgeyBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4gfSA9IGF3YWl0IGltcG9ydCgnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnKTsKKyAgICAgICAgY29uc3QgY2hhaW4gPSBmcm9tTm9kZVByb3ZpZGVyQ2hhaW4oeyBjbGllbnRDb25maWc6IHsgcmVnaW9uIH0gfSk7CisgICAgICAgIHJlc29sdmVkUHJvdmlkZXIgPSAoKSA9PiBjaGFpbigpOworICAgICAgfQorCisgICAgICBzaWduZXIgPSBuZXcgU2lnbmF0dXJlVjQoeworICAgICAgICBzZXJ2aWNlLAorICAgICAgICByZWdpb24sCisgICAgICAgIHNoYTI1NjogSGFzaC5iaW5kKG51bGwsICdzaGEyNTYnKSwKKyAgICAgICAgY3JlZGVudGlhbHM6ICgpID0+IFByb21pc2UucmVzb2x2ZShyZXNvbHZlZFByb3ZpZGVyKCkpLAorICAgICAgfSk7CisgICAgfQorCisgICAgY29uc3QgdXJsID0gbmV3IFVSTChyZXF1ZXN0LnVybCk7CisgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgc2lnbmVyLnNpZ24oeworICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCwKKyAgICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsCisgICAgICBob3N0bmFtZTogdXJsLmhvc3RuYW1lLAorICAgICAgcG9ydDogdXJsLnBvcnQgPyBOdW1iZXIodXJsLnBvcnQpIDogdW5kZWZpbmVkLAorICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCwKKyAgICAgIGhlYWRlcnM6IHsKKyAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLAorICAgICAgICBob3N0OiB1cmwuaG9zdCwKKyAgICAgIH0sCisgICAgICBib2R5OiByZXF1ZXN0LmJvZHksCisgICAgfSk7CisKKyAgICByZXF1ZXN0LmhlYWRlcnMgPSBzaWduZWQuaGVhZGVyczsKKyAgICByZXR1cm4gcmVxdWVzdDsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvY2xpZW50LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9jbGllbnQudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZmZjMgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvY2xpZW50LnRzCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgJ0xpY2Vuc2UnKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgQ29ubmVjdGlvbiwgeyBDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29ubmVjdGlvbi5qcyc7CitpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CitpbXBvcnQge1JlcXVlc3RNZXNzYWdlfSBmcm9tICIuL3JlcXVlc3QtbWVzc2FnZS5qcyI7CisKK2V4cG9ydCB0eXBlIFJlcXVlc3RPcHRpb25zID0geworICBiaW5kaW5ncz86IGFueTsKKyAgbGFuZ3VhZ2U/OiBzdHJpbmc7CisgIGFjY2VwdD86IHN0cmluZzsKKyAgZXZhbHVhdGlvblRpbWVvdXQ/OiBudW1iZXI7CisgIGJhdGNoU2l6ZT86IG51bWJlcjsKKyAgdXNlckFnZW50Pzogc3RyaW5nOworICBtYXRlcmlhbGl6ZVByb3BlcnRpZXM/OiBzdHJpbmc7CisgIGJ1bGtSZXN1bHRzPzogYm9vbGVhbjsKKyAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgYW55PjsKK307CisKK2V4cG9ydCB0eXBlIENsaWVudE9wdGlvbnMgPSBDb25uZWN0aW9uT3B0aW9ucyAmIFJlcXVlc3RPcHRpb25zICYgeyBwcm9jZXNzb3I/OiBzdHJpbmcgfTsKKworLyoqCisgKiBBIHtAbGluayBDbGllbnR9IGNvbnRhaW5zIG1ldGhvZHMgdG8gc2VuZCBtZXNzYWdlcyB0byBhIEdyZW1saW4gU2VydmVyLgorICovCitleHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnQgeworICBwcml2YXRlIHJlYWRvbmx5IF9jb25uZWN0aW9uOiBDb25uZWN0aW9uOworCisgIC8qKgorICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDbGllbnR9LgorICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSByZXNvdXJjZSB1cmkuCisgICAqIEBwYXJhbSB7Q2xpZW50T3B0aW9uc30gW29wdGlvbnNdIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuCisgICAqLworICBjb25zdHJ1Y3RvcigKKyAgICB1cmw6IHN0cmluZywKKyAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IENsaWVudE9wdGlvbnMgPSB7fSwKKyAgKSB7CisgICAgdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKHVybCwgb3B0aW9ucyk7CisgIH0KKworICAvKioKKyAgICogT3BlbnMgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiB0byB0aGUgR3JlbWxpbiBTZXJ2ZXIsIGlmIGl0J3Mgbm90IGFscmVhZHkgb3BlbmVkLgorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KKyAgICovCisgIG9wZW4oKTogUHJvbWlzZTx2b2lkPiB7CisgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24ub3BlbigpOworICB9CisKKyAgLyoqCisgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGlzIG9wZW4KKyAgICogQHJldHVybnMge0Jvb2xlYW59CisgICAqLworICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4geworICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uLmlzT3BlbjsKKyAgfQorCisgIC8qKgorICAgKiBDb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IHJlcXVlc3QuCisgICAqIEB0eXBlZGVmIHtPYmplY3R9IFJlcXVlc3RPcHRpb25zCisgICAqIEBwcm9wZXJ0eSB7YW55fSBiaW5kaW5ncyAtIFRoZSBwYXJhbWV0ZXIgYmluZGluZ3MgdG8gYXBwbHkgdG8gdGhlIHNjcmlwdC4KKyAgICogQHByb3BlcnR5IHtTdHJpbmd9IGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIG9mIHRoZSBzY3JpcHQgdG8gZXhlY3V0ZS4gRGVmYXVsdHMgdG8gJ2dyZW1saW4tbGFuZycuCisgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBhY2NlcHQgLSBUaGUgTUlNRSB0eXBlIGV4cGVjdGVkIGluIHRoZSByZXNwb25zZS4KKyAgICogQHByb3BlcnR5IHtCb29sZWFufSBidWxrUmVzdWx0cyAtIEluZGljYXRlcyB3aGV0aGVyIHJlc3VsdHMgc2hvdWxkIGJlIHJldHVybmVkIGluIGJ1bGsgZm9ybWF0LgorICAgKiBAcHJvcGVydHkge09iamVjdH0gcGFyYW1zIC0gQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgd2l0aCB0aGUgcmVxdWVzdC4KKyAgICogQHByb3BlcnR5IHtOdW1iZXJ9IGJhdGNoU2l6ZSAtIFRoZSBzaXplIGluIHdoaWNoIHRoZSByZXN1bHQgb2YgYSByZXF1ZXN0IGlzIHRvIGJlICdiYXRjaGVkJyBiYWNrIHRvIHRoZSBjbGllbnQuCisgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB1c2VyQWdlbnQgLSBUaGUgdXNlciBhZ2VudCBzdHJpbmcgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgorICAgKiBAcHJvcGVydHkge051bWJlcn0gZXZhbHVhdGlvblRpbWVvdXQgLSBUaGUgdGltZW91dCBmb3IgdGhlIGV2YWx1YXRpb24gb2YgdGhlIHJlcXVlc3QuCisgICAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgLSBJbmRpY2F0ZXMgd2hldGhlciBlbGVtZW50IHByb3BlcnRpZXMgc2hvdWxkIGJlIHJldHVybmVkIG9yIG5vdC4KKyAgICovCisKKyAgLyoqCisgICAqIFNlbmQgYSByZXF1ZXN0IHRvIHRoZSBHcmVtbGluIFNlcnZlci4KKyAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIHNjcmlwdCB0byBzZW5kCisgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IFtiaW5kaW5nc10gVGhlIHNjcmlwdCBiaW5kaW5ncywgaWYgYW55LgorICAgKiBAcGFyYW0ge1JlcXVlc3RPcHRpb25zfSBbcmVxdWVzdE9wdGlvbnNdIENvbmZpZ3VyYXRpb24gc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgcmVxdWVzdC4KKyAgICogQHJldHVybnMge1Byb21pc2V9CisgICAqLyAvL1RPRE86OiB0aWdodGVuIHJldHVybiB0eXBlIHRvIFByb21pc2U8UmVzdWx0U2V0PgorICBzdWJtaXQobWVzc2FnZTogc3RyaW5nLCBiaW5kaW5nczogYW55IHwgbnVsbCwgcmVxdWVzdE9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8YW55PiB7CisgICAgICBjb25zdCByZXF1ZXN0QnVpbGRlciA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKG1lc3NhZ2UpCisgICAgICAgICAgLmFkZEcodGhpcy5vcHRpb25zLnRyYXZlcnNhbFNvdXJjZSB8fCAnZycpCisKKyAgICAgIGlmIChyZXF1ZXN0T3B0aW9ucz8ubGFuZ3VhZ2UpIHsKKyAgICAgICAgICByZXF1ZXN0QnVpbGRlci5hZGRMYW5ndWFnZShyZXF1ZXN0T3B0aW9ucy5sYW5ndWFnZSk7CisgICAgICB9CisgICAgICBpZiAocmVxdWVzdE9wdGlvbnM/LmJpbmRpbmdzKSB7CisgICAgICAgICAgcmVxdWVzdEJ1aWxkZXIuYWRkQmluZGluZ3MocmVxdWVzdE9wdGlvbnMuYmluZGluZ3MpOworICAgICAgfQorICAgICAgaWYgKGJpbmRpbmdzKSB7CisgICAgICAgICAgcmVxdWVzdEJ1aWxkZXIuYWRkQmluZGluZ3MoYmluZGluZ3MpOworICAgICAgfQorICAgICAgaWYgKHJlcXVlc3RPcHRpb25zPy5tYXRlcmlhbGl6ZVByb3BlcnRpZXMpIHsKKyAgICAgICAgcmVxdWVzdEJ1aWxkZXIuYWRkTWF0ZXJpYWxpemVQcm9wZXJ0aWVzKHJlcXVlc3RPcHRpb25zLm1hdGVyaWFsaXplUHJvcGVydGllcyk7CisgICAgICB9CisgICAgICBpZiAocmVxdWVzdE9wdGlvbnM/LmV2YWx1YXRpb25UaW1lb3V0KSB7CisgICAgICAgICAgcmVxdWVzdEJ1aWxkZXIuYWRkVGltZW91dE1pbGxpcyhyZXF1ZXN0T3B0aW9ucy5ldmFsdWF0aW9uVGltZW91dCk7CisgICAgICB9CisgICAgICBpZiAocmVxdWVzdE9wdGlvbnM/LmJ1bGtSZXN1bHRzKSB7CisgICAgICAgICAgcmVxdWVzdEJ1aWxkZXIuYWRkQnVsa1Jlc3VsdHMocmVxdWVzdE9wdGlvbnMuYnVsa1Jlc3VsdHMpOworICAgICAgfQorCisgICAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbi5zdWJtaXQocmVxdWVzdEJ1aWxkZXIuY3JlYXRlKCkpOworICB9CisKKyAgLyoqCisgICAqIFNlbmQgYSByZXF1ZXN0IHRvIHRoZSBHcmVtbGluIFNlcnZlciBhbmQgcmVjZWl2ZSBhIHN0cmVhbSBmb3IgdGhlIHJlc3VsdHMuCisgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBzY3JpcHQgdG8gc2VuZAorICAgKiBAcGFyYW0ge09iamVjdH0gW2JpbmRpbmdzXSBUaGUgc2NyaXB0IGJpbmRpbmdzLCBpZiBhbnkuCisgICAqIEBwYXJhbSB7UmVxdWVzdE9wdGlvbnN9IFtyZXF1ZXN0T3B0aW9uc10gQ29uZmlndXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgY3VycmVudCByZXF1ZXN0LgorICAgKiBAcmV0dXJucyB7UmVhZGFibGVTdHJlYW19CisgICAqLworICAvL1RPRE86OiBVcGRhdGUgc3RyZWFtKCkgdG8gbWlycm9yIHN1Ym1pdCgpCisgIHN0cmVhbShtZXNzYWdlOiBzdHJpbmcsIGJpbmRpbmdzOiBhbnksIHJlcXVlc3RPcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBSZWFkYWJsZSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN0cmVhbSBub3QgeWV0IGltcGxlbWVudGVkIik7CisgIH0KKworICAvKioKKyAgICogQ2xvc2VzIHRoZSB1bmRlcmx5aW5nIGNvbm5lY3Rpb24KKyAgICogc2VuZCBzZXNzaW9uIGNsb3NlIHJlcXVlc3QgYmVmb3JlIGNvbm5lY3Rpb24gY2xvc2UgaWYgc2Vzc2lvbiBtb2RlCisgICAqIEByZXR1cm5zIHtQcm9taXNlfQorICAgKi8KKyAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7CisgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb24uY2xvc2UoKTsKKyAgfQorCisgIC8qKgorICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBjb25uZWN0aW9uCisgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZSB0aGF0IHlvdSB3YW50IHRvIGxpc3RlbiB0by4KKyAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IG9jY3Vycy4KKyAgICovCisgIGFkZExpc3RlbmVyKGV2ZW50OiBzdHJpbmcsIGhhbmRsZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdW5rbm93bikgeworICAgIHRoaXMuX2Nvbm5lY3Rpb24ub24oZXZlbnQsIGhhbmRsZXIpOworICB9CisKKyAgLyoqCisgICAqIFJlbW92ZXMgYSBwcmV2aW93c2x5IGFkZGVkIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBjb25uZWN0aW9uCisgICAqIEBwYXJhbSB7U3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZSB0aGF0IHlvdSB3YW50IHRvIGxpc3RlbiB0by4KKyAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgZXZlbnQgaGFuZGxlciB0byBiZSByZW1vdmVkLgorICAgKi8KKyAgcmVtb3ZlTGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB1bmtub3duKSB7CisgICAgdGhpcy5fY29ubmVjdGlvbi5yZW1vdmVMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvY29ubmVjdGlvbi50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvY29ubmVjdGlvbi50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWU3ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9jb25uZWN0aW9uLnRzCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CitpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudGVtaXR0ZXIzJzsKK2ltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tICdub2RlOmh0dHAnOworaW1wb3J0IGlvYyBmcm9tICcuLi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5LmpzJzsKK2ltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJzsKK2ltcG9ydCBSZXN1bHRTZXQgZnJvbSAnLi9yZXN1bHQtc2V0LmpzJzsKK2ltcG9ydCB7UmVxdWVzdE1lc3NhZ2V9IGZyb20gIi4vcmVxdWVzdC1tZXNzYWdlLmpzIjsKK2ltcG9ydCB7UmVhZGFibGV9IGZyb20gInN0cmVhbSI7CitpbXBvcnQgUmVzcG9uc2VFcnJvciBmcm9tICcuL3Jlc3BvbnNlLWVycm9yLmpzJzsKK2ltcG9ydCB7IFRyYXZlcnNlciB9IGZyb20gJy4uL3Byb2Nlc3MvdHJhdmVyc2FsLmpzJzsKKworY29uc3QgeyBEZWZlcnJlZFByb21pc2UgfSA9IHV0aWxzOworY29uc3QgeyBncmFwaEJpbmFyeVJlYWRlciwgZ3JhcGhCaW5hcnlXcml0ZXIgfSA9IGlvYzsKKworY29uc3QgcmVzcG9uc2VTdGF0dXNDb2RlID0geworICBzdWNjZXNzOiAyMDAsCisgIG5vQ29udGVudDogMjA0LAorICBwYXJ0aWFsQ29udGVudDogMjA2LAorICBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTogNDA3LAorfTsKKworZXhwb3J0IHR5cGUgSHR0cFJlcXVlc3QgPSB7CisgIHVybDogc3RyaW5nOworICBtZXRob2Q6IHN0cmluZzsKKyAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsKKyAgYm9keTogYW55OworfTsKKworZXhwb3J0IHR5cGUgUmVxdWVzdEludGVyY2VwdG9yID0gKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0KSA9PiBIdHRwUmVxdWVzdCB8IFByb21pc2U8SHR0cFJlcXVlc3Q+OworCitleHBvcnQgdHlwZSBDb25uZWN0aW9uT3B0aW9ucyA9IHsKKyAgY2E/OiBzdHJpbmdbXTsKKyAgY2VydD86IHN0cmluZyB8IHN0cmluZ1tdIHwgQnVmZmVyOworICBwZng/OiBzdHJpbmcgfCBCdWZmZXI7CisgIHJlYWRlcj86IGFueTsKKyAgcmVqZWN0VW5hdXRob3JpemVkPzogYm9vbGVhbjsKKyAgdHJhdmVyc2FsU291cmNlPzogc3RyaW5nOworICB3cml0ZXI/OiBhbnkgfCBudWxsOworICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+OworICBlbmFibGVVc2VyQWdlbnRPbkNvbm5lY3Q/OiBib29sZWFuOworICBhZ2VudD86IEFnZW50OworICBpbnRlcmNlcHRvcnM/OiBSZXF1ZXN0SW50ZXJjZXB0b3IgfCBSZXF1ZXN0SW50ZXJjZXB0b3JbXTsKK307CisKKy8qKgorICogUmVwcmVzZW50cyBhIHNpbmdsZSBjb25uZWN0aW9uIHRvIGEgR3JlbWxpbiBTZXJ2ZXIuCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNzIENvbm5lY3Rpb24gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgeworICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkZXI6IGFueTsKKyAgcHJpdmF0ZSByZWFkb25seSBfd3JpdGVyOiBhbnkgfCBudWxsOworCisgIGlzT3BlbiA9IHRydWU7CisgIHRyYXZlcnNhbFNvdXJjZTogc3RyaW5nOworCisgIHByaXZhdGUgcmVhZG9ubHkgX2VuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdDogYm9vbGVhbjsKKyAgcHJpdmF0ZSByZWFkb25seSBfaW50ZXJjZXB0b3JzOiBSZXF1ZXN0SW50ZXJjZXB0b3JbXTsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgQ29ubmVjdGlvbn0uCisgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHJlc291cmNlIHVyaS4KKyAgICogQHBhcmFtIHtDb25uZWN0aW9uT3B0aW9uc30gW29wdGlvbnNdIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuCisgICAqLworICBjb25zdHJ1Y3RvcigKKyAgICByZWFkb25seSB1cmw6IHN0cmluZywKKyAgICByZWFkb25seSBvcHRpb25zOiBDb25uZWN0aW9uT3B0aW9ucyA9IHt9LAorICApIHsKKyAgICBzdXBlcigpOworCisgICAgdGhpcy5fcmVhZGVyID0gb3B0aW9ucy5yZWFkZXIgfHwgZ3JhcGhCaW5hcnlSZWFkZXI7CisgICAgdGhpcy5fd3JpdGVyID0gJ3dyaXRlcicgaW4gb3B0aW9ucyA/IG9wdGlvbnMud3JpdGVyIDogZ3JhcGhCaW5hcnlXcml0ZXI7CisgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2UgPSBvcHRpb25zLnRyYXZlcnNhbFNvdXJjZSB8fCAnZyc7CisgICAgdGhpcy5fZW5hYmxlVXNlckFnZW50T25Db25uZWN0ID0gb3B0aW9ucy5lbmFibGVVc2VyQWdlbnRPbkNvbm5lY3QgIT09IGZhbHNlOworCisgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM7CisgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvcnMgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIHRoaXMuX2ludGVyY2VwdG9ycyA9IFtpbnRlcmNlcHRvcnNdOworICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcnMpKSB7CisgICAgICB0aGlzLl9pbnRlcmNlcHRvcnMgPSBpbnRlcmNlcHRvcnM7CisgICAgfSBlbHNlIGlmIChpbnRlcmNlcHRvcnMgPT09IHVuZGVmaW5lZCB8fCBpbnRlcmNlcHRvcnMgPT09IG51bGwpIHsKKyAgICAgIHRoaXMuX2ludGVyY2VwdG9ycyA9IFtdOworICAgIH0gZWxzZSB7CisgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnRlcmNlcHRvcnMgbXVzdCBiZSBhIGZ1bmN0aW9uLCBhcnJheSwgb3IgdW5kZWZpbmVkJyk7CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIE9wZW5zIHRoZSBjb25uZWN0aW9uLCBpZiBpdHMgbm90IGFscmVhZHkgb3BlbmVkLgorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KKyAgICovCisgIGFzeW5jIG9wZW4oKSB7CisgICAgLy8gTm8tb3AgZm9yIEhUVFAgY29ubmVjdGlvbnMKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KKworICAvKiogQG92ZXJyaWRlICovCisgIHN1Ym1pdChyZXF1ZXN0OiBSZXF1ZXN0TWVzc2FnZSkgeworICAgIC8vIFRoZSB1c2VyIG1heSBub3Qgd2FudCB0aGUgYm9keSB0byBiZSBzZXJpYWxpemVkIGlmIHRoZXkgYXJlIHVzaW5nIGFuIGludGVyY2VwdG9yLgorICAgIGNvbnN0IGJvZHkgPSB0aGlzLl93cml0ZXIgPyB0aGlzLl93cml0ZXIud3JpdGVSZXF1ZXN0KHJlcXVlc3QpIDogcmVxdWVzdDsKKyAgICAKKyAgICByZXR1cm4gdGhpcy4jbWFrZUh0dHBSZXF1ZXN0KGJvZHkpCisgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4geworICAgICAgICAgIHJldHVybiB0aGlzLiNoYW5kbGVSZXNwb25zZShyZXNwb25zZSk7CisgICAgICAgIH0pOworICB9CisKKyAgLyoqIEBvdmVycmlkZSAqLworICBzdHJlYW0ocmVxdWVzdDogUmVxdWVzdE1lc3NhZ2UpOiBSZWFkYWJsZSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdzdHJlYW0oKSBpcyBub3QgeWV0IGltcGxlbWVudGVkJyk7CisgIH0KKworICAjZ2V0UmVhZGVyRm9yQ29udGVudFR5cGUoY29udGVudFR5cGU6IHN0cmluZyB8IG51bGwpIHsKKyAgICBpZiAoIWNvbnRlbnRUeXBlKSB7CisgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyOworICAgIH0KKworICAgIGlmIChjb250ZW50VHlwZSA9PT0gdGhpcy5fcmVhZGVyLm1pbWVUeXBlKSB7CisgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyOworICAgIH0KKworICAgIHJldHVybiBudWxsOworICB9CisKKyAgYXN5bmMgI21ha2VIdHRwUmVxdWVzdChib2R5OiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlPiB7CisgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsKKyAgICAgICdBY2NlcHQnOiB0aGlzLl9yZWFkZXIubWltZVR5cGUKKyAgICB9OworCisgICAgaWYgKHRoaXMuX3dyaXRlcikgeworICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB0aGlzLl93cml0ZXIubWltZVR5cGU7CisgICAgfQorCisgICAgaWYgKHRoaXMuX2VuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCkgeworICAgICAgY29uc3QgdXNlckFnZW50ID0gYXdhaXQgdXRpbHMuZ2V0VXNlckFnZW50KCk7CisgICAgICBpZiAodXNlckFnZW50ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgaGVhZGVyc1t1dGlscy5nZXRVc2VyQWdlbnRIZWFkZXIoKV0gPSB1c2VyQWdlbnQ7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRoaXMub3B0aW9ucy5oZWFkZXJzKSB7CisgICAgICBPYmplY3QuZW50cmllcyh0aGlzLm9wdGlvbnMuaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7CisgICAgICAgIGhlYWRlcnNba2V5XSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlOworICAgICAgfSk7CisgICAgfQorICAgIGxldCBodHRwUmVxdWVzdDogSHR0cFJlcXVlc3QgPSB7CisgICAgICB1cmw6IHRoaXMudXJsLAorICAgICAgbWV0aG9kOiAnUE9TVCcsCisgICAgICBoZWFkZXJzLAorICAgICAgYm9keSwKKyAgICB9OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pbnRlcmNlcHRvcnMubGVuZ3RoOyBpKyspIHsKKyAgICAgIHRyeSB7CisgICAgICAgIGh0dHBSZXF1ZXN0ID0gYXdhaXQgdGhpcy5faW50ZXJjZXB0b3JzW2ldKGh0dHBSZXF1ZXN0KTsKKyAgICAgIH0gY2F0Y2ggKGU6IGFueSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgaW50ZXJjZXB0b3IgYXQgaW5kZXggJHtpfSBmYWlsZWQ6ICR7ZS5tZXNzYWdlfWAsIHsgY2F1c2U6IGUgfSk7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZldGNoKGh0dHBSZXF1ZXN0LnVybCwgeworICAgICAgbWV0aG9kOiBodHRwUmVxdWVzdC5tZXRob2QsCisgICAgICBoZWFkZXJzOiBodHRwUmVxdWVzdC5oZWFkZXJzLAorICAgICAgYm9keTogaHR0cFJlcXVlc3QuYm9keSwKKyAgICB9KTsKKyAgfQorCisgIGFzeW5jICNoYW5kbGVSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpIHsKKyAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKTsKKyAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTsKKyAgICBjb25zdCByZWFkZXIgPSB0aGlzLiNnZXRSZWFkZXJGb3JDb250ZW50VHlwZShjb250ZW50VHlwZSk7CisKKyAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CisgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBgU2VydmVyIHJldHVybmVkIEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDsKKworICAgICAgdHJ5IHsKKyAgICAgICAgaWYgKHJlYWRlcikgeworICAgICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gbmV3IE1hcCgpOworICAgICAgICAgIGlmIChkZXNlcmlhbGl6ZWQuc3RhdHVzLmV4Y2VwdGlvbikgeworICAgICAgICAgICAgYXR0cmlidXRlcy5zZXQoJ2V4Y2VwdGlvbnMnLCBkZXNlcmlhbGl6ZWQuc3RhdHVzLmV4Y2VwdGlvbik7CisgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldCgnc3RhY2tUcmFjZScsIGRlc2VyaWFsaXplZC5zdGF0dXMuZXhjZXB0aW9uKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhyb3cgbmV3IFJlc3BvbnNlRXJyb3IoZXJyb3JNZXNzYWdlLCB7CisgICAgICAgICAgICBjb2RlOiBkZXNlcmlhbGl6ZWQuc3RhdHVzLmNvZGUsCisgICAgICAgICAgICBtZXNzYWdlOiBkZXNlcmlhbGl6ZWQuc3RhdHVzLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCwKKyAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsCisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9qc29uJykgeworICAgICAgICAgIGNvbnN0IGVycm9yQm9keSA9IEpTT04ucGFyc2UoYnVmZmVyLnRvU3RyaW5nKCkpOworICAgICAgICAgIHRocm93IG5ldyBSZXNwb25zZUVycm9yKGVycm9yTWVzc2FnZSwgeworICAgICAgICAgICAgY29kZTogcmVzcG9uc2Uuc3RhdHVzLAorICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JCb2R5Lm1lc3NhZ2UgfHwgZXJyb3JCb2R5LmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c1RleHQsCisgICAgICAgICAgICBhdHRyaWJ1dGVzOiBuZXcgTWFwKCksCisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUmVzcG9uc2VFcnJvcikgeworICAgICAgICAgIHRocm93IGVycjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgCisgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihlcnJvck1lc3NhZ2UsIHsKKyAgICAgICAgY29kZTogcmVzcG9uc2Uuc3RhdHVzLAorICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0LAorICAgICAgICBhdHRyaWJ1dGVzOiBuZXcgTWFwKCksCisgICAgICB9KTsKKyAgICB9CisKKyAgICBpZiAoIXJlYWRlcikgeworICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNwb25zZSBDb250ZW50LVR5cGUgJyR7Y29udGVudFR5cGV9JyBkb2VzIG5vdCBtYXRjaCB0aGUgY29uZmlndXJlZCByZWFkZXIgKGV4cGVjdGVkICcke3RoaXMuX3JlYWRlci5taW1lVHlwZX0nKWApOworICAgIH0KKworICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAKKyAgICBpZiAoZGVzZXJpYWxpemVkLnN0YXR1cy5jb2RlICYmIGRlc2VyaWFsaXplZC5zdGF0dXMuY29kZSAhPT0gMjAwICYmIGRlc2VyaWFsaXplZC5zdGF0dXMuY29kZSAhPT0gMjA0ICYmIGRlc2VyaWFsaXplZC5zdGF0dXMuY29kZSAhPT0gMjA2KSB7CisgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gbmV3IE1hcCgpOworICAgICAgaWYgKGRlc2VyaWFsaXplZC5zdGF0dXMuZXhjZXB0aW9uKSB7CisgICAgICAgIGF0dHJpYnV0ZXMuc2V0KCdleGNlcHRpb25zJywgZGVzZXJpYWxpemVkLnN0YXR1cy5leGNlcHRpb24pOworICAgICAgICBhdHRyaWJ1dGVzLnNldCgnc3RhY2tUcmFjZScsIGRlc2VyaWFsaXplZC5zdGF0dXMuZXhjZXB0aW9uKTsKKyAgICAgIH0KKyAgICAgIHRocm93IG5ldyBSZXNwb25zZUVycm9yKAorICAgICAgICBgU2VydmVyIGVycm9yOiAke2Rlc2VyaWFsaXplZC5zdGF0dXMubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcid9ICgke2Rlc2VyaWFsaXplZC5zdGF0dXMuY29kZX0pYCwKKyAgICAgICAgeworICAgICAgICAgIGNvZGU6IGRlc2VyaWFsaXplZC5zdGF0dXMuY29kZSwKKyAgICAgICAgICBtZXNzYWdlOiBkZXNlcmlhbGl6ZWQuc3RhdHVzLm1lc3NhZ2UgfHwgJycsCisgICAgICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlcywKKyAgICAgICAgfQorICAgICAgKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3IFJlc3VsdFNldCgKKyAgICAgIGRlc2VyaWFsaXplZC5yZXN1bHQuYnVsa2VkCisgICAgICAgID8gZGVzZXJpYWxpemVkLnJlc3VsdC5kYXRhLm1hcCgoaXRlbTogeyB2OiBhbnk7IGJ1bGs6IG51bWJlciB9KSA9PiBuZXcgVHJhdmVyc2VyKGl0ZW0udiwgaXRlbS5idWxrKSkKKyAgICAgICAgOiBkZXNlcmlhbGl6ZWQucmVzdWx0LmRhdGEsCisgICAgICBuZXcgTWFwKCksCisgICAgKTsKKyAgfQorCisgIC8qKgorICAgKiBDbG9zZXMgdGhlIENvbm5lY3Rpb24uCisgICAqIEByZXR1cm4ge1Byb21pc2V9CisgICAqLworICBjbG9zZSgpIHsKKyAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvZHJpdmVyLXJlbW90ZS1jb25uZWN0aW9uLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9kcml2ZXItcmVtb3RlLWNvbm5lY3Rpb24udHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY2MjRiNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvZHJpdmVyLXJlbW90ZS1jb25uZWN0aW9uLnRzCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCAqIGFzIHJjTW9kdWxlIGZyb20gJy4vcmVtb3RlLWNvbm5lY3Rpb24uanMnOworY29uc3QgUmVtb3RlQ29ubmVjdGlvbiA9IHJjTW9kdWxlLlJlbW90ZUNvbm5lY3Rpb247Citjb25zdCBSZW1vdGVUcmF2ZXJzYWwgPSByY01vZHVsZS5SZW1vdGVUcmF2ZXJzYWw7CitpbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7CitpbXBvcnQgQ2xpZW50LCB7IFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9jbGllbnQuanMnOworaW1wb3J0IEdyZW1saW5MYW5nIGZyb20gJy4uL3Byb2Nlc3MvZ3JlbWxpbi1sYW5nLmpzJzsKK2ltcG9ydCB7IENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi9jb25uZWN0aW9uLmpzJzsKKworLyoqCisgKiBSZXByZXNlbnRzIHRoZSBkZWZhdWx0IGBSZW1vdGVDb25uZWN0aW9uYCBpbXBsZW1lbnRhdGlvbi4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBleHRlbmRzIFJlbW90ZUNvbm5lY3Rpb24geworICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IENsaWVudDsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbn0uCisgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIHJlc291cmNlIHVyaS4KKyAgICogQHBhcmFtIHtDb25uZWN0aW9uT3B0aW9uc30gW29wdGlvbnNdIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuCisgICAqLworICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgb3B0aW9uczogQ29ubmVjdGlvbk9wdGlvbnMgPSB7fSkgeworICAgIHN1cGVyKHVybCwgb3B0aW9ucyk7CisgICAgdGhpcy5fY2xpZW50ID0gbmV3IENsaWVudCh1cmwsIG9wdGlvbnMpOworICB9CisKKyAgLyoqIEBvdmVycmlkZSAqLworICBvcGVuKCkgeworICAgIHJldHVybiB0aGlzLl9jbGllbnQub3BlbigpOworICB9CisKKyAgLyoqIEBvdmVycmlkZSAqLworICBnZXQgaXNPcGVuKCkgeworICAgIHJldHVybiB0aGlzLl9jbGllbnQuaXNPcGVuOworICB9CisKKyAgLyoqIEBvdmVycmlkZSAqLworICBzdWJtaXQoZ3JlbWxpbkxhbmc6IEdyZW1saW5MYW5nKSB7CisgICAgZ3JlbWxpbkxhbmcuYWRkRyh0aGlzLm9wdGlvbnMudHJhdmVyc2FsU291cmNlIHx8ICdnJyk7CisKKyAgICBsZXQgcmVxdWVzdE9wdGlvbnM6IFJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkOworICAgIGNvbnN0IHN0cmF0ZWdpZXMgPSBncmVtbGluTGFuZy5nZXRPcHRpb25zU3RyYXRlZ2llcygpOworICAgIGlmIChzdHJhdGVnaWVzLmxlbmd0aCA+IDApIHsKKyAgICAgIHJlcXVlc3RPcHRpb25zID0ge307CisgICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IFsKKyAgICAgICAgJ2V2YWx1YXRpb25UaW1lb3V0JywKKyAgICAgICAgJ3NjcmlwdEV2YWx1YXRpb25UaW1lb3V0JywKKyAgICAgICAgJ2JhdGNoU2l6ZScsCisgICAgICAgICdyZXF1ZXN0SWQnLAorICAgICAgICAndXNlckFnZW50JywKKyAgICAgICAgJ21hdGVyaWFsaXplUHJvcGVydGllcycsCisgICAgICAgICdidWxrUmVzdWx0cycsCisgICAgICBdOworICAgICAgZm9yIChjb25zdCBzdHJhdGVneSBvZiBzdHJhdGVnaWVzKSB7CisgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICBpZiAoYWxsb3dlZEtleXMuaW5kZXhPZihrZXkpID4gLTEpIHsKKyAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zW2tleSBhcyBrZXlvZiBSZXF1ZXN0T3B0aW9uc10gPSBzdHJhdGVneS5jb25maWd1cmF0aW9uW2tleV07CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKCFyZXF1ZXN0T3B0aW9ucykgeworICAgICAgcmVxdWVzdE9wdGlvbnMgPSB7fTsKKyAgICB9CisgICAgaWYgKCEoJ2J1bGtSZXN1bHRzJyBpbiByZXF1ZXN0T3B0aW9ucykpIHsKKyAgICAgIHJlcXVlc3RPcHRpb25zLmJ1bGtSZXN1bHRzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBwYXJhbXMgPSBncmVtbGluTGFuZy5nZXRQYXJhbWV0ZXJzKCk7CisgICAgaWYgKHBhcmFtcy5zaXplID4gMCkgeworICAgICAgcmVxdWVzdE9wdGlvbnMucGFyYW1zID0gT2JqZWN0LmZyb21FbnRyaWVzKHBhcmFtcyk7CisgICAgfQorCisgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5zdWJtaXQoZ3JlbWxpbkxhbmcuZ2V0R3JlbWxpbigpLCBudWxsLCByZXF1ZXN0T3B0aW9ucykKKyAgICAgIC50aGVuKChyZXN1bHQpID0+IG5ldyBSZW1vdGVUcmF2ZXJzYWwocmVzdWx0LnRvQXJyYXkoKSkpOworICB9CisKKyAgb3ZlcnJpZGUgY29tbWl0KCkgeworICAgIHJldHVybiB0aGlzLl9jbGllbnQuc3VibWl0KCdnLnR4KCkuY29tbWl0KCknLCBudWxsKTsKKyAgfQorCisgIG92ZXJyaWRlIHJvbGxiYWNrKCkgeworICAgIHJldHVybiB0aGlzLl9jbGllbnQuc3VibWl0KCdnLnR4KCkucm9sbGJhY2soKScsIG51bGwpOworICB9CisKKyAgb3ZlcnJpZGUgY2xvc2UoKSB7CisgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5jbG9zZSgpOworICB9CisKKyAgLyoqIEBvdmVycmlkZSAqLworICBhZGRMaXN0ZW5lcihldmVudDogc3RyaW5nLCBoYW5kbGVyOiAoLi4uYXJnczogYW55W10pID0+IHVua25vd24pIHsKKyAgICByZXR1cm4gdGhpcy5fY2xpZW50LmFkZExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTsKKyAgfQorCisgIC8qKiBAb3ZlcnJpZGUgKi8KKyAgcmVtb3ZlTGlzdGVuZXIoZXZlbnQ6IHN0cmluZywgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB1bmtub3duKSB7CisgICAgcmV0dXJuIHRoaXMuX2NsaWVudC5yZW1vdmVMaXN0ZW5lcihldmVudCwgaGFuZGxlcik7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvcmVtb3RlLWNvbm5lY3Rpb24udHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTliZDAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uLnRzCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCBHcmVtbGluTGFuZyBmcm9tICcuLi9wcm9jZXNzL2dyZW1saW4tbGFuZy5qcyc7CitpbXBvcnQgeyBUcmF2ZXJzYWxTdHJhdGVneSB9IGZyb20gJy4uL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5LmpzJzsKK2ltcG9ydCB7IFRyYXZlcnNhbCwgVHJhdmVyc2VyIH0gZnJvbSAnLi4vcHJvY2Vzcy90cmF2ZXJzYWwuanMnOworaW1wb3J0IHR5cGUgeyBDb25uZWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vY29ubmVjdGlvbi5qcyc7CisKK2V4cG9ydCB0eXBlIFJlbW90ZUNvbm5lY3Rpb25PcHRpb25zID0gQ29ubmVjdGlvbk9wdGlvbnMgJiB7IHNlc3Npb24/OiBzdHJpbmcgfTsKKworLyoqCisgKiBSZXByZXNlbnRzIGFuIGFic3RyYWN0aW9uIG9mIGEgImNvbm5lY3Rpb24iIHRvIGEgInNlcnZlciIgdGhhdCBpcyBjYXBhYmxlIG9mIHByb2Nlc3NpbmcgYSB0cmF2ZXJzYWwgYW5kCisgKiByZXR1cm5pbmcgcmVzdWx0cy4KKyAqLworZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlbW90ZUNvbm5lY3Rpb24geworICAvKioKKyAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgcmVzb3VyY2UgdXJpLgorICAgKiBAcGFyYW0ge1JlbW90ZUNvbm5lY3Rpb25PcHRpb25zfSBbb3B0aW9uc10gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy4KKyAgICovCisgIGNvbnN0cnVjdG9yKAorICAgIHB1YmxpYyB1cmw6IHN0cmluZywKKyAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9uczogUmVtb3RlQ29ubmVjdGlvbk9wdGlvbnMgPSB7fSwKKyAgKSB7fQorCisgIC8qKgorICAgKiBPcGVucyB0aGUgY29ubmVjdGlvbiwgaWYgaXRzIG5vdCBhbHJlYWR5IG9wZW5lZC4KKyAgICogQHJldHVybnMge1Byb21pc2V9CisgICAqLworICBhYnN0cmFjdCBvcGVuKCk6IFByb21pc2U8dm9pZD47CisKKyAgLyoqCisgICAqIFJldHVybnMgdHJ1ZSBpZiBjb25uZWN0aW9uIGlzIG9wZW4KKyAgICogQHJldHVybnMge0Jvb2xlYW59CisgICAqLworICBhYnN0cmFjdCBnZXQgaXNPcGVuKCk6IGJvb2xlYW47CisKKyAgLyoqCisgICAqIFN1Ym1pdHMgdGhlIDxjb2RlPkdyZW1saW5MYW5nPC9jb2RlPiBwcm92aWRlZCBhbmQgcmV0dXJucyBhIDxjb2RlPlJlbW90ZVRyYXZlcnNhbDwvY29kZT4uCisgICAqIEBwYXJhbSB7R3JlbWxpbkxhbmd9IGdyZW1saW5MYW5nCisgICAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIGEgPGNvZGU+UHJvbWlzZTwvY29kZT4gdGhhdCByZXNvbHZlcyB0byBhIDxjb2RlPlJlbW90ZVRyYXZlcnNhbDwvY29kZT4uCisgICAqLworICBhYnN0cmFjdCBzdWJtaXQoZ3JlbWxpbkxhbmc6IEdyZW1saW5MYW5nKTogUHJvbWlzZTxSZW1vdGVUcmF2ZXJzYWw+OworCisgIC8qKgorICAgKiBTdWJtaXRzIGEgY29tbWl0IG9wZXJhdGlvbiB0byB0aGUgc2VydmVyIGFuZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCisgICAqIEByZXR1cm5zIHtQcm9taXNlfQorICAgKi8KKyAgYWJzdHJhY3QgY29tbWl0KCk6IFByb21pc2U8dm9pZD47CisKKyAgLyoqCisgICAqIFN1Ym1pdHMgYSByb2xsYmFjayBvcGVyYXRpb24gdG8gdGhlIHNlcnZlciBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KKyAgICovCisgIGFic3RyYWN0IHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD47CisKKyAgLyoqCisgICAqIENsb3NlcyB0aGUgY29ubmVjdGlvbiB3aGVyZSBvcGVuIHRyYW5zYWN0aW9ucyB3aWxsIGNsb3NlIGFjY29yZGluZyB0byB0aGUgZmVhdHVyZXMgb2YgdGhlIGdyYXBoIHByb3ZpZGVyLgorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KKyAgICovCisgIGFic3RyYWN0IGNsb3NlKCk6IFByb21pc2U8dm9pZD47Cit9CisKKy8qKgorICogUmVwcmVzZW50cyBhIHRyYXZlcnNhbCBhcyBhIHJlc3VsdCBvZiBhIHtAbGluayBSZW1vdGVDb25uZWN0aW9ufSBzdWJtaXNzaW9uLgorICovCitleHBvcnQgY2xhc3MgUmVtb3RlVHJhdmVyc2FsIGV4dGVuZHMgVHJhdmVyc2FsIHsKKyAgY29uc3RydWN0b3IoCisgICAgcHVibGljIHJlc3VsdHM6IFRyYXZlcnNlcjxhbnk+W10sCisgICAgcHVibGljIHNpZGVFZmZlY3RzPzogYW55W10sCisgICkgeworICAgIHN1cGVyKG51bGwsIG51bGwpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBSZW1vdGVTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgLyoqCisgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgUmVtb3RlU3RyYXRlZ3kuCisgICAqIEBwYXJhbSB7UmVtb3RlQ29ubmVjdGlvbn0gY29ubmVjdGlvbgorICAgKi8KKyAgY29uc3RydWN0b3IocHVibGljIGNvbm5lY3Rpb246IFJlbW90ZUNvbm5lY3Rpb24pIHsKKyAgICBzdXBlcigpOworICB9CisKKyAgLyoqIEBvdmVycmlkZSAqLworICBhcHBseSh0cmF2ZXJzYWw6IFRyYXZlcnNhbCkgeworICAgIGlmICh0cmF2ZXJzYWwucmVzdWx0cykgeworICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgIH0KKworICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24uc3VibWl0KHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpKS50aGVuKGZ1bmN0aW9uIChyZW1vdGVUcmF2ZXJzYWw6IFJlbW90ZVRyYXZlcnNhbCkgeworICAgICAgdHJhdmVyc2FsLnNpZGVFZmZlY3RzID0gcmVtb3RlVHJhdmVyc2FsLnNpZGVFZmZlY3RzOworICAgICAgdHJhdmVyc2FsLnJlc3VsdHMgPSByZW1vdGVUcmF2ZXJzYWwucmVzdWx0czsKKyAgICB9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZXF1ZXN0LW1lc3NhZ2UudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3JlcXVlc3QtbWVzc2FnZS50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzYwNDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZXF1ZXN0LW1lc3NhZ2UudHMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBUb2tlbiBjb25zdGFudHMKK2NvbnN0IFRva2VucyA9IHsKKyAgQVJHU19MQU5HVUFHRTogJ2xhbmd1YWdlJywKKyAgQVJHU19CSU5ESU5HUzogJ2JpbmRpbmdzJywKKyAgQVJHU19HOiAnZycsCisgIEFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUzogJ21hdGVyaWFsaXplUHJvcGVydGllcycsCisgIFRJTUVPVVRfTVM6ICd0aW1lb3V0TXMnLAorICBCVUxLX1JFU1VMVFM6ICdidWxrUmVzdWx0cycsCisgIE1BVEVSSUFMSVpFX1BST1BFUlRJRVNfVE9LRU5TOiAndG9rZW5zJywKKyAgTUFURVJJQUxJWkVfUFJPUEVSVElFU19BTEw6ICdhbGwnCit9OworCisvKioKKyAqIFRoZSBtb2RlbCBmb3IgYSByZXF1ZXN0IG1lc3NhZ2UgaW4gdGhlIEhUVFAgYm9keSB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciBiZWdpbm5pbmcgaW4gNC4wLjAuCisgKi8KK2V4cG9ydCBjbGFzcyBSZXF1ZXN0TWVzc2FnZSB7CisgIHByaXZhdGUgZ3JlbWxpbjogc3RyaW5nOworICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7CisgIHByaXZhdGUgdGltZW91dE1zPzogbnVtYmVyOworICBwcml2YXRlIGJpbmRpbmdzPzogb2JqZWN0OworICBwcml2YXRlIGc/OiBzdHJpbmc7CisgIHByaXZhdGUgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzPzogc3RyaW5nOworICBwcml2YXRlIGJ1bGtSZXN1bHRzPzogYm9vbGVhbjsKKyAgcHJpdmF0ZSBjdXN0b21GaWVsZHM6IE1hcDxzdHJpbmcsIGFueT47CisKKyAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigKKyAgICBncmVtbGluOiBzdHJpbmcsCisgICAgbGFuZ3VhZ2U6IHN0cmluZywKKyAgICB0aW1lb3V0TXM6IG51bWJlciB8IHVuZGVmaW5lZCwKKyAgICBiaW5kaW5nczogb2JqZWN0IHwgdW5kZWZpbmVkLAorICAgIGc6IHN0cmluZyB8IHVuZGVmaW5lZCwKKyAgICBtYXRlcmlhbGl6ZVByb3BlcnRpZXM6IHN0cmluZyB8IHVuZGVmaW5lZCwKKyAgICBidWxrUmVzdWx0czogYm9vbGVhbiB8IHVuZGVmaW5lZCwKKyAgICBjdXN0b21GaWVsZHM6IE1hcDxzdHJpbmcsIGFueT4KKyAgKSB7CisgICAgaWYgKCFncmVtbGluKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVlc3RNZXNzYWdlIHJlcXVpcmVzIGdyZW1saW4gYXJndW1lbnQnKTsKKyAgICB9CisKKyAgICB0aGlzLmdyZW1saW4gPSBncmVtbGluOworICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTsKKyAgICB0aGlzLnRpbWVvdXRNcyA9IHRpbWVvdXRNczsKKyAgICB0aGlzLmJpbmRpbmdzID0gYmluZGluZ3M7CisgICAgdGhpcy5nID0gZzsKKyAgICB0aGlzLm1hdGVyaWFsaXplUHJvcGVydGllcyA9IG1hdGVyaWFsaXplUHJvcGVydGllczsKKyAgICB0aGlzLmJ1bGtSZXN1bHRzID0gYnVsa1Jlc3VsdHM7CisgICAgdGhpcy5jdXN0b21GaWVsZHMgPSBjdXN0b21GaWVsZHM7CisgIH0KKworICBnZXRHcmVtbGluKCk6IHN0cmluZyB7CisgICAgcmV0dXJuIHRoaXMuZ3JlbWxpbjsKKyAgfQorCisgIGdldExhbmd1YWdlKCk6IHN0cmluZyB7CisgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2U7CisgIH0KKworICBnZXRUaW1lb3V0TXMoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHsKKyAgICByZXR1cm4gdGhpcy50aW1lb3V0TXM7CisgIH0KKworICBnZXRCaW5kaW5ncygpOiBvYmplY3QgfCB1bmRlZmluZWQgeworICAgIHJldHVybiB0aGlzLmJpbmRpbmdzOworICB9CisKKyAgZ2V0RygpOiBzdHJpbmcgfCB1bmRlZmluZWQgeworICAgIHJldHVybiB0aGlzLmc7CisgIH0KKworICBnZXRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHsKKyAgICByZXR1cm4gdGhpcy5tYXRlcmlhbGl6ZVByb3BlcnRpZXM7CisgIH0KKworICBnZXRCdWxrUmVzdWx0cygpOiBib29sZWFuIHwgdW5kZWZpbmVkIHsKKyAgICByZXR1cm4gdGhpcy5idWxrUmVzdWx0czsKKyAgfQorCisgIGdldEZpZWxkcygpOiBSZWFkb25seU1hcDxzdHJpbmcsIGFueT4geworICAgIHJldHVybiB0aGlzLmN1c3RvbUZpZWxkczsKKyAgfQorCisgIHN0YXRpYyBidWlsZChncmVtbGluOiBzdHJpbmcpOiBCdWlsZGVyIHsKKyAgICByZXR1cm4gbmV3IEJ1aWxkZXIoZ3JlbWxpbik7CisgIH0KK30KKworLyoqCisgKiBCdWlsZGVyIGNsYXNzIGZvciBSZXF1ZXN0TWVzc2FnZS4KKyAqLworZXhwb3J0IGNsYXNzIEJ1aWxkZXIgeworICBwcml2YXRlIHJlYWRvbmx5IGdyZW1saW46IHN0cmluZzsKKyAgcHJpdmF0ZSByZWFkb25seSBiaW5kaW5ncyA9IHt9OworICBwdWJsaWMgbGFuZ3VhZ2U6IHN0cmluZzsKKyAgcHVibGljIHRpbWVvdXRNcz86IG51bWJlcjsKKyAgcHVibGljIGc/OiBzdHJpbmc7CisgIHB1YmxpYyBtYXRlcmlhbGl6ZVByb3BlcnRpZXM/OiBzdHJpbmc7CisgIHB1YmxpYyBidWxrUmVzdWx0cz86IGJvb2xlYW47CisgIHB1YmxpYyBhZGRpdGlvbmFsRmllbGRzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTsKKworICBjb25zdHJ1Y3RvcihncmVtbGluOiBzdHJpbmcpIHsKKyAgICB0aGlzLmdyZW1saW4gPSBncmVtbGluOworICAgIHRoaXMubGFuZ3VhZ2UgPSAiZ3JlbWxpbi1sYW5nIjsKKyAgfQorCisgIGFkZExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiBCdWlsZGVyIHsKKyAgICBpZiAoIWxhbmd1YWdlKSB0aHJvdyBuZXcgRXJyb3IoJ2xhbmd1YWdlIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsLicpOworICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEJpbmRpbmcoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBCdWlsZGVyIHsKKyAgICBPYmplY3QuYXNzaWduKHRoaXMuYmluZGluZ3MsIHtba2V5XTogdmFsdWV9KQorICAgIHJldHVybiB0aGlzOworICB9CisKKyAgYWRkQmluZGluZ3Mob3RoZXJCaW5kaW5nczogb2JqZWN0KTogQnVpbGRlciB7CisgICAgaWYgKCFvdGhlckJpbmRpbmdzKSB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRpbmdzIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsLicpOworICAgIE9iamVjdC5hc3NpZ24odGhpcy5iaW5kaW5ncywgb3RoZXJCaW5kaW5ncykKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEcoZzogc3RyaW5nKTogQnVpbGRlciB7CisgICAgaWYgKCFnKSB0aHJvdyBuZXcgRXJyb3IoJ2cgYXJndW1lbnQgY2Fubm90IGJlIG51bGwuJyk7CisgICAgdGhpcy5nID0gZzsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZE1hdGVyaWFsaXplUHJvcGVydGllcyhtYXRlcmlhbGl6ZVByb3BzOiBzdHJpbmcpOiBCdWlsZGVyIHsKKyAgICBpZiAoIW1hdGVyaWFsaXplUHJvcHMpIHRocm93IG5ldyBFcnJvcignbWF0ZXJpYWxpemVQcm9wcyBhcmd1bWVudCBjYW5ub3QgYmUgbnVsbC4nKTsKKyAgICBpZiAobWF0ZXJpYWxpemVQcm9wcyAhPT0gVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfVE9LRU5TICYmIAorICAgICAgICBtYXRlcmlhbGl6ZVByb3BzICE9PSBUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19BTEwpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzIGFyZ3VtZW50IG11c3QgYmUgZWl0aGVyICIke1Rva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOU30iIG9yICIke1Rva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX0FMTH0iLmApOworICAgIH0KKworICAgIHRoaXMubWF0ZXJpYWxpemVQcm9wZXJ0aWVzID0gbWF0ZXJpYWxpemVQcm9wczsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZFRpbWVvdXRNaWxsaXModGltZW91dDogbnVtYmVyKTogQnVpbGRlciB7CisgICAgaWYgKHRpbWVvdXQgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ3RpbWVvdXQgYXJndW1lbnQgY2Fubm90IGJlIG5lZ2F0aXZlLicpOworICAgIHRoaXMudGltZW91dE1zID0gdGltZW91dDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEJ1bGtSZXN1bHRzKGJ1bGtpbmc6IGJvb2xlYW4pOiBCdWlsZGVyIHsKKyAgICB0aGlzLmJ1bGtSZXN1bHRzID0gYnVsa2luZzsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIGFkZEZpZWxkKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogQnVpbGRlciB7CisgICAgdGhpcy5hZGRpdGlvbmFsRmllbGRzLnNldChrZXksIHZhbHVlKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGUgdGhlIHJlcXVlc3QgbWVzc2FnZSBnaXZlbiB0aGUgc2V0dGluZ3MgcHJvdmlkZWQgdG8gdGhlIEJ1aWxkZXIuCisgICAqLworICBjcmVhdGUoKTogUmVxdWVzdE1lc3NhZ2UgeworICAgIC8vIEB0cy1pZ25vcmUgLSBhY2Nlc3NpbmcgcHJpdmF0ZSBjb25zdHJ1Y3RvciBmcm9tIEJ1aWxkZXIKKyAgICByZXR1cm4gbmV3IFJlcXVlc3RNZXNzYWdlKAorICAgICAgdGhpcy5ncmVtbGluLAorICAgICAgdGhpcy5sYW5ndWFnZSB8fCAnZ3JlbWxpbi1sYW5nJywKKyAgICAgIHRoaXMudGltZW91dE1zLAorICAgICAgT2JqZWN0LmtleXModGhpcy5iaW5kaW5ncykubGVuZ3RoID4gMCA/IHRoaXMuYmluZGluZ3MgOiB1bmRlZmluZWQsCisgICAgICB0aGlzLmcsCisgICAgICB0aGlzLm1hdGVyaWFsaXplUHJvcGVydGllcywKKyAgICAgIHRoaXMuYnVsa1Jlc3VsdHMsCisgICAgICB0aGlzLmFkZGl0aW9uYWxGaWVsZHMKKyAgICApOworICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3Jlc3BvbnNlLWVycm9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZXNwb25zZS1lcnJvci50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc1ZmFhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2RyaXZlci9yZXNwb25zZS1lcnJvci50cwpAQCAtMCwwICsxLDU1IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKworLyoqCisgKiBSZXByZXNlbnRzIGFuIGVycm9yIG9idGFpbmVkIGZyb20gdGhlIHNlcnZlci4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzcG9uc2VFcnJvciBleHRlbmRzIEVycm9yIHsKKyAgc3RhdHVzQ29kZTogbnVtYmVyOworICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7CisgIHN0YXR1c0F0dHJpYnV0ZXM6IE1hcDxzdHJpbmcsIHN0cmluZz47CisKKyAgY29uc3RydWN0b3IoCisgICAgbWVzc2FnZTogc3RyaW5nLAorICAgIHJlc3BvbnNlU3RhdHVzOiB7CisgICAgICBjb2RlOiBSZXNwb25zZUVycm9yWydzdGF0dXNDb2RlJ107CisgICAgICBtZXNzYWdlOiBSZXNwb25zZUVycm9yWydzdGF0dXNNZXNzYWdlJ107CisgICAgICBhdHRyaWJ1dGVzOiBSZXNwb25zZUVycm9yWydzdGF0dXNBdHRyaWJ1dGVzJ107CisgICAgfSwKKyAgKSB7CisgICAgc3VwZXIobWVzc2FnZSk7CisgICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlRXJyb3InOworCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgc2VydmVyIHN0YXR1cyBjb2RlLgorICAgICAqLworICAgIHRoaXMuc3RhdHVzQ29kZSA9IHJlc3BvbnNlU3RhdHVzLmNvZGU7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBzZXJ2ZXIgc3RhdHVzIG1lc3NhZ2UuCisgICAgICovCisgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gcmVzcG9uc2VTdGF0dXMubWVzc2FnZTsKKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIHNlcnZlciBzdGF0dXMgYXR0cmlidXRlcyBhcyBhIE1hcCAobWF5IGNvbnRhaW4gcHJvdmlkZXIgc3BlY2lmaWMgc3RhdHVzIGluZm9ybWF0aW9uKS4KKyAgICAgKi8KKyAgICB0aGlzLnN0YXR1c0F0dHJpYnV0ZXMgPSByZXNwb25zZVN0YXR1cy5hdHRyaWJ1dGVzIHx8IHt9OworICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3Jlc3VsdC1zZXQudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvZHJpdmVyL3Jlc3VsdC1zZXQudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkzMDFlMwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9kcml2ZXIvcmVzdWx0LXNldC50cwpAQCAtMCwwICsxLDg2IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJzsKK2NvbnN0IGVtcHR5TWFwID0gT2JqZWN0LmZyZWV6ZShuZXcgdXRpbHMuSW1tdXRhYmxlTWFwKCkpOworCisvKioKKyAqIFJlcHJlc2VudHMgdGhlIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdGhlIGV4ZWN1dGlvbiBvZiBhIEdyZW1saW4gdHJhdmVyc2FsIG9yIHNjcmlwdC4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVzdWx0U2V0IHsKKyAgcHJpdmF0ZSByZWFkb25seSBhdHRyaWJ1dGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+OworICByZWFkb25seSBsZW5ndGg6IG51bWJlcjsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgUmVzdWx0U2V0fS4KKyAgICogQHBhcmFtIHtBcnJheX0gaXRlbXMKKyAgICogQHBhcmFtIHtNYXB9IFthdHRyaWJ1dGVzXQorICAgKi8KKyAgY29uc3RydWN0b3IoCisgICAgcHJpdmF0ZSByZWFkb25seSBpdGVtczogYW55W10sCisgICAgYXR0cmlidXRlczogTWFwPHN0cmluZywgYW55PiwKKyAgKSB7CisgICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXRlbXMgbXVzdCBiZSBhbiBBcnJheSBpbnN0YW5jZScpOworICAgIH0KKworICAgIHRoaXMuaXRlbXMgPSBpdGVtczsKKworICAgIC8qKgorICAgICAqIEdldHMgYSBNYXAgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXNwb25zZS4KKyAgICAgKiBAdHlwZSB7TWFwfQorICAgICAqLworICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwgZW1wdHlNYXA7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBhbW91bnQgb2YgaXRlbXMgaW4gdGhlIHJlc3VsdC4KKyAgICAgKiBAdHlwZSB7TnVtYmVyfQorICAgICAqLworICAgIHRoaXMubGVuZ3RoID0gaXRlbXMubGVuZ3RoOworICB9CisKKyAgLyoqCisgICAqIEdldHMgdGhlIGl0ZXJhdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlLgorICAgKiBAcmV0dXJucyB7SXRlcmF0b3J9CisgICAqLworICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKKyAgICByZXR1cm4gdGhpcy5pdGVtc1tTeW1ib2wuaXRlcmF0b3JdKCk7CisgIH0KKworICAvKioKKyAgICogR2V0cyBhbiBhcnJheSBvZiByZXN1bHQgaXRlbXMuCisgICAqIEByZXR1cm5zIHtBcnJheX0KKyAgICovCisgIHRvQXJyYXkoKTogQXJyYXk8YW55PiB7CisgICAgcmV0dXJuIHRoaXMuaXRlbXM7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgZmlyc3QgaXRlbS4KKyAgICogQHJldHVybnMge09iamVjdHxudWxsfQorICAgKi8KKyAgZmlyc3QoKTogYW55IHwgbnVsbCB7CisgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNbMF07CisgICAgcmV0dXJuIGl0ZW0gIT09IHVuZGVmaW5lZCA/IGl0ZW0gOiBudWxsOworICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvaW5kZXgudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvaW5kZXgudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0MDE4NgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9pbmRleC50cwpAQCAtMCwwICsxLDkyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCAqIGFzIHQgZnJvbSAnLi9wcm9jZXNzL3RyYXZlcnNhbC5qcyc7CitpbXBvcnQgKiBhcyBndCBmcm9tICcuL3Byb2Nlc3MvZ3JhcGgtdHJhdmVyc2FsLmpzJzsKK2ltcG9ydCAqIGFzIHN0cmF0ZWdpZXNNb2R1bGUgZnJvbSAnLi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneS5qcyc7CitpbXBvcnQgKiBhcyBncmFwaCBmcm9tICcuL3N0cnVjdHVyZS9ncmFwaC5qcyc7CitpbXBvcnQgKiBhcyByYyBmcm9tICcuL2RyaXZlci9yZW1vdGUtY29ubmVjdGlvbi5qcyc7CitpbXBvcnQgR3JlbWxpbkxhbmcgZnJvbSAnLi9wcm9jZXNzL2dyZW1saW4tbGFuZy5qcyc7CitpbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzLmpzJzsKK2ltcG9ydCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGZyb20gJy4vZHJpdmVyL2RyaXZlci1yZW1vdGUtY29ubmVjdGlvbi5qcyc7CitpbXBvcnQgUmVzcG9uc2VFcnJvciBmcm9tICcuL2RyaXZlci9yZXNwb25zZS1lcnJvci5qcyc7CitpbXBvcnQgQ2xpZW50IGZyb20gJy4vZHJpdmVyL2NsaWVudC5qcyc7CitpbXBvcnQgUmVzdWx0U2V0IGZyb20gJy4vZHJpdmVyL3Jlc3VsdC1zZXQuanMnOworaW1wb3J0IHsgYmFzaWMsIHNpZ3Y0IH0gZnJvbSAnLi9kcml2ZXIvYXV0aC5qcyc7CitpbXBvcnQgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlIGZyb20gJy4vcHJvY2Vzcy9hbm9ueW1vdXMtdHJhdmVyc2FsLmpzJzsKKworZXhwb3J0IGNvbnN0IGRyaXZlciA9IHsKKyAgUmVtb3RlQ29ubmVjdGlvbjogcmMuUmVtb3RlQ29ubmVjdGlvbiwKKyAgUmVtb3RlU3RyYXRlZ3k6IHJjLlJlbW90ZVN0cmF0ZWd5LAorICBSZW1vdGVUcmF2ZXJzYWw6IHJjLlJlbW90ZVRyYXZlcnNhbCwKKyAgUmVzcG9uc2VFcnJvciwKKyAgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiwKKyAgQ2xpZW50LAorICBSZXN1bHRTZXQsCisgIGF1dGg6IHsKKyAgICBiYXNpYywKKyAgICBzaWd2NCwKKyAgfSwKK307CisKK2V4cG9ydCBjb25zdCBwcm9jZXNzID0geworICBFbnVtVmFsdWU6IHQuRW51bVZhbHVlLAorICBQOiB0LlAsCisgIFRleHRQOiB0LlRleHRQLAorICBUcmF2ZXJzYWw6IHQuVHJhdmVyc2FsLAorICBUcmF2ZXJzYWxTaWRlRWZmZWN0czogdC5UcmF2ZXJzYWxTaWRlRWZmZWN0cywKKyAgVHJhdmVyc2FsU3RyYXRlZ2llczogc3RyYXRlZ2llc01vZHVsZS5UcmF2ZXJzYWxTdHJhdGVnaWVzLAorICBUcmF2ZXJzYWxTdHJhdGVneTogc3RyYXRlZ2llc01vZHVsZS5UcmF2ZXJzYWxTdHJhdGVneSwKKyAgVHJhdmVyc2VyOiB0LlRyYXZlcnNlciwKKyAgYmFycmllcjogdC5iYXJyaWVyLAorICBjYXJkaW5hbGl0eTogdC5jYXJkaW5hbGl0eSwKKyAgY29sdW1uOiB0LmNvbHVtbiwKKyAgZGlyZWN0aW9uOiB0LmRpcmVjdGlvbiwKKyAgZHQ6IHQuZHQsCisgIG1lcmdlOiB0Lm1lcmdlLAorICBvcGVyYXRvcjogdC5vcGVyYXRvciwKKyAgb3JkZXI6IHQub3JkZXIsCisgIHBpY2s6IHQucGljaywKKyAgcG9wOiB0LnBvcCwKKyAgc2NvcGU6IHQuc2NvcGUsCisgIHQ6IHQudCwKKyAgR3JhcGhUcmF2ZXJzYWw6IGd0LkdyYXBoVHJhdmVyc2FsLAorICBHcmFwaFRyYXZlcnNhbFNvdXJjZTogZ3QuR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCisgIHN0YXRpY3M6IGd0LnN0YXRpY3MsCisgIEdyZW1saW5MYW5nLAorICB0cmF2ZXJzYWw6IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWwsCisgIEFub255bW91c1RyYXZlcnNhbFNvdXJjZSwKKyAgd2l0aE9wdGlvbnM6IHQud2l0aE9wdGlvbnMsCit9OworCitleHBvcnQgY29uc3Qgc3RydWN0dXJlID0geworICBFZGdlOiBncmFwaC5FZGdlLAorICBHcmFwaDogZ3JhcGguR3JhcGgsCisgIFBhdGg6IGdyYXBoLlBhdGgsCisgIFByb3BlcnR5OiBncmFwaC5Qcm9wZXJ0eSwKKyAgVmVydGV4OiBncmFwaC5WZXJ0ZXgsCisgIFZlcnRleFByb3BlcnR5OiBncmFwaC5WZXJ0ZXhQcm9wZXJ0eSwKKyAgdG9Mb25nOiB1dGlscy50b0xvbmcsCit9OworCitleHBvcnQgZGVmYXVsdCB7IGRyaXZlciwgcHJvY2Vzcywgc3RydWN0dXJlIH07CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvaW5kZXgudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvaW5kZXgudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2YjhkZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS9pbmRleC50cwpAQCAtMCwwICsxLDMxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworZXhwb3J0IHsgR3JlbWxpblRyYW5zbGF0b3IgfSBmcm9tICcuL3RyYW5zbGF0b3IvR3JlbWxpblRyYW5zbGF0b3IuanMnOworZXhwb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tICcuL3RyYW5zbGF0b3IvVHJhbnNsYXRpb24uanMnOworZXhwb3J0IHsgVHJhbnNsYXRvckV4Y2VwdGlvbiB9IGZyb20gJy4vdHJhbnNsYXRvci9UcmFuc2xhdG9yRXhjZXB0aW9uLmpzJzsKK2V4cG9ydCB7IFRyYW5zbGF0b3IgfSBmcm9tICcuL3RyYW5zbGF0b3IvVHJhbnNsYXRvci5qcyc7CitleHBvcnQgeyBkZWZhdWx0IGFzIFRyYW5zbGF0ZVZpc2l0b3IgfSBmcm9tICcuL3RyYW5zbGF0b3IvVHJhbnNsYXRlVmlzaXRvci5qcyc7CitleHBvcnQgeyBkZWZhdWx0IGFzIEphdmFzY3JpcHRUcmFuc2xhdGVWaXNpdG9yIH0gZnJvbSAnLi90cmFuc2xhdG9yL0phdmFzY3JpcHRUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2V4cG9ydCB7IGRlZmF1bHQgYXMgUHl0aG9uVHJhbnNsYXRlVmlzaXRvciB9IGZyb20gJy4vdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2V4cG9ydCB7IGRlZmF1bHQgYXMgR29UcmFuc2xhdGVWaXNpdG9yIH0gZnJvbSAnLi90cmFuc2xhdG9yL0dvVHJhbnNsYXRlVmlzaXRvci5qcyc7CitleHBvcnQgeyBkZWZhdWx0IGFzIERvdE5ldFRyYW5zbGF0ZVZpc2l0b3IgfSBmcm9tICcuL3RyYW5zbGF0b3IvRG90TmV0VHJhbnNsYXRlVmlzaXRvci5qcyc7CitleHBvcnQgeyBkZWZhdWx0IGFzIEphdmFUcmFuc2xhdGVWaXNpdG9yIH0gZnJvbSAnLi90cmFuc2xhdG9yL0phdmFUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2V4cG9ydCB7IGRlZmF1bHQgYXMgR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvciB9IGZyb20gJy4vdHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2V4cG9ydCB7IGRlZmF1bHQgYXMgQW5vbnltaXplZFRyYW5zbGF0ZVZpc2l0b3IgfSBmcm9tICcuL3RyYW5zbGF0b3IvQW5vbnltaXplZFRyYW5zbGF0ZVZpc2l0b3IuanMnOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3BhY2thZ2UuanNvbiBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmZDk4MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSBAQAoreyAidHlwZSI6ICJtb2R1bGUiIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0Fub255bWl6ZWRUcmFuc2xhdGVWaXNpdG9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvQW5vbnltaXplZFRyYW5zbGF0ZVZpc2l0b3IudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0Fub255bWl6ZWRUcmFuc2xhdGVWaXNpdG9yLnRzCkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gQ29udGV4dCBwYXJhbWV0ZXJzIGFyZSB0eXBlZCBhcyBgYW55YCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgZ3JhbW1hciBmaWxlcworLy8gcmVxdWlyZSBhY2NlcHRpbmcgYXJiaXRyYXJ5IGNvbnRleHQgdHlwZXMgYXQgcnVudGltZS4KKworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKKworLyoqCisgKiBBbm9ueW1pemVzIGEgR3JlbWxpbiB0cmF2ZXJzYWwgYnkgcmVwbGFjaW5nIGxpdGVyYWwgdmFsdWVzIHdpdGggdHlwZS1iYXNlZAorICogcGxhY2Vob2xkZXJzIChlLmcuIGBzdHJpbmcwYCwgYG51bWJlcjFgKS4gIElkZW50aWNhbCB2YWx1ZXMgd2l0aGluIHRoZSBzYW1lCisgKiB0cmF2ZXJzYWwgcmV1c2UgdGhlIHNhbWUgcGxhY2Vob2xkZXIuICBNaXJyb3JzIHRoZSBKYXZhIEFub255bWl6ZWRUcmFuc2xhdG9yVmlzaXRvci4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW5vbnltaXplZFRyYW5zbGF0ZVZpc2l0b3IgZXh0ZW5kcyBUcmFuc2xhdGVWaXNpdG9yIHsKKworICAgIC8qKiBvdXRlciBrZXk6IEphdmEgc2ltcGxlIGNsYXNzIG5hbWUgKGUuZy4gIlN0cmluZyIpOyBpbm5lciBrZXk6IG9yaWdpbmFsIHRleHQg4oaSIHBsYWNlaG9sZGVyICovCisgICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4gPSBuZXcgTWFwKCk7CisKKyAgICBjb25zdHJ1Y3RvcihncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWU6IHN0cmluZyA9ICdnJykgeworICAgICAgICBzdXBlcihncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcGxhY2VzIHRoZSB0ZXh0IG9mIGBjdHhgIHdpdGggYSB0eXBlLXRhZ2dlZCBwbGFjZWhvbGRlci4KKyAgICAgKiBUaGUgZmlyc3QgdW5pcXVlIHZhbHVlIG9mIGVhY2ggdHlwZSBnZXRzIGluZGV4IDAsIHRoZSBzZWNvbmQgaW5kZXggMSwgZXRjLgorICAgICAqIFJlcGVhdGVkIG9jY3VycmVuY2VzIG9mIHRoZSBzYW1lIHRleHQgcmV1c2UgdGhlIHNhbWUgcGxhY2Vob2xkZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY3R4ICBBTlRMUiBwYXJzZS10cmVlIGNvbnRleHQgd2hvc2UgZ2V0VGV4dCgpIGlzIHVzZWQgYXMgdGhlIGNhY2hlIGtleQorICAgICAqIEBwYXJhbSB0eXBlIEphdmEgc2ltcGxlIGNsYXNzIG5hbWUgKGUuZy4gIlN0cmluZyIsICJJbnRlZ2VyIiwgIk51bWJlciIpCisgICAgICovCisgICAgcHJvdGVjdGVkIGFub255bWl6ZShjdHg6IGFueSwgdHlwZTogc3RyaW5nKTogdm9pZCB7CisgICAgICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCk7CisKKyAgICAgICAgbGV0IGlubmVyID0gdGhpcy5jYWNoZS5nZXQodHlwZSk7CisgICAgICAgIGlmIChpbm5lciA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBpbm5lciA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7CisgICAgICAgICAgICB0aGlzLmNhY2hlLnNldCh0eXBlLCBpbm5lcik7CisgICAgICAgIH0KKworICAgICAgICBsZXQgcGxhY2Vob2xkZXIgPSBpbm5lci5nZXQodGV4dCk7CisgICAgICAgIGlmIChwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICBwbGFjZWhvbGRlciA9IHR5cGUudG9Mb3dlckNhc2UoKSArIGlubmVyLnNpemU7CisgICAgICAgICAgICBpbm5lci5zZXQodGV4dCwgcGxhY2Vob2xkZXIpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zYi5wdXNoKHBsYWNlaG9sZGVyKTsKKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgQ29sbGVjdGlvbiAvIG1hcCBsaXRlcmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKworICAgIHZpc2l0R2VuZXJpY1NldExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hbm9ueW1pemUoY3R4LCAnU2V0Jyk7CisgICAgfQorCisgICAgdmlzaXRHZW5lcmljQ29sbGVjdGlvbkxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hbm9ueW1pemUoY3R4LCAnTGlzdCcpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY01hcExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hbm9ueW1pemUoY3R4LCAnTWFwJyk7CisgICAgfQorCisgICAgdmlzaXRHZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFub255bWl6ZShjdHgsICdNYXAnKTsKKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgU3RyaW5nIGxpdGVyYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgdmlzaXRTdHJpbmdMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYW5vbnltaXplKGN0eCwgJ1N0cmluZycpOworICAgIH0KKworICAgIHZpc2l0U3RyaW5nTnVsbGFibGVMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYW5vbnltaXplKGN0eCwgJ1N0cmluZycpOworICAgIH0KKworICAgIC8vIOKUgOKUgOKUgCBOdW1lcmljIGxpdGVyYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgdmlzaXRJbnRlZ2VyTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKS5zbGljZSgtMSk7CisgICAgICAgIHN3aXRjaCAobGFzdENoYXIpIHsKKyAgICAgICAgICAgIGNhc2UgJ2InOiB0aGlzLmFub255bWl6ZShjdHgsICdCeXRlJyk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncyc6IHRoaXMuYW5vbnltaXplKGN0eCwgJ1Nob3J0Jyk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdpJzogdGhpcy5hbm9ueW1pemUoY3R4LCAnSW50ZWdlcicpOyAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2wnOiB0aGlzLmFub255bWl6ZShjdHgsICdMb25nJyk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbic6IHRoaXMuYW5vbnltaXplKGN0eCwgJ0JpZ0ludGVnZXInKTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAgdGhpcy5hbm9ueW1pemUoY3R4LCAnTnVtYmVyJyk7ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0RmxvYXRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIC8vIERvIE5PVCBkZWxlZ2F0ZSB0byBpbmZMaXRlcmFsL25hbkxpdGVyYWwg4oCUIGFub255bWl6ZSB0aGUgRmxvYXRMaXRlcmFsQ29udGV4dCBkaXJlY3RseQorICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKS5zbGljZSgtMSk7CisgICAgICAgIHN3aXRjaCAobGFzdENoYXIpIHsKKyAgICAgICAgICAgIGNhc2UgJ2YnOiB0aGlzLmFub255bWl6ZShjdHgsICdGbG9hdCcpOyAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZCc6IHRoaXMuYW5vbnltaXplKGN0eCwgJ0RvdWJsZScpOyAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdtJzogdGhpcy5hbm9ueW1pemUoY3R4LCAnQmlnRGVjaW1hbCcpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6ICB0aGlzLmFub255bWl6ZShjdHgsICdOdW1iZXInKTsgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g4pSA4pSA4pSAIE90aGVyIGxpdGVyYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgdmlzaXRCb29sZWFuTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFub255bWl6ZShjdHgsICdCb29sZWFuJyk7CisgICAgfQorCisgICAgdmlzaXREYXRlTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFub255bWl6ZShjdHgsICdPZmZzZXREYXRlVGltZScpOworICAgIH0KKworICAgIHZpc2l0TnVsbExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hbm9ueW1pemUoY3R4LCAnT2JqZWN0Jyk7CisgICAgfQorCisgICAgdmlzaXROYW5MaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYW5vbnltaXplKGN0eCwgJ051bWJlcicpOworICAgIH0KKworICAgIHZpc2l0SW5mTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFub255bWl6ZShjdHgsICdOdW1iZXInKTsKKyAgICB9CisKKyAgICB2aXNpdFV1aWRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYW5vbnltaXplKGN0eCwgJ1N0cmluZycpOworICAgIH0KKworICAgIC8vIOKUgOKUgOKUgCBLZXlzIOKAlCBvdXRwdXQgdW5xdW90ZWQgKG9ubHkgdmFsdWVzIGFyZSBhbm9ueW1pemVkKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKworICAgIHZpc2l0TmFrZWRLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRUZXh0KCkpOworICAgIH0KKworICAgIHZpc2l0S2V5d29yZChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBrZXl3b3JkOiBzdHJpbmcgPSBjdHguZ2V0VGV4dCgpOworICAgICAgICBjb25zdCBwYXJlbnROYW1lID0gY3R4LnBhcmVudD8uY29uc3RydWN0b3I/Lm5hbWUgPz8gJyc7CisgICAgICAgIGlmIChwYXJlbnROYW1lID09PSAnTWFwS2V5Q29udGV4dCcgfHwgcGFyZW50TmFtZSA9PT0gJ0NvbmZpZ3VyYXRpb25Db250ZXh0JykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGtleXdvcmQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGtleXdvcmQpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcgJyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9Eb3ROZXRUcmFuc2xhdGVWaXNpdG9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvRG90TmV0VHJhbnNsYXRlVmlzaXRvci50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWUzMDMxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvRG90TmV0VHJhbnNsYXRlVmlzaXRvci50cwpAQCAtMCwwICsxLDg5MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vIENvbnRleHQgcGFyYW1ldGVycyBhcmUgdHlwZWQgYXMgYGFueWAgYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIGdyYW1tYXIgZmlsZXMKKy8vIHJlcXVpcmUgYWNjZXB0aW5nIGFyYml0cmFyeSBjb250ZXh0IHR5cGVzIGF0IHJ1bnRpbWUuCisKK2ltcG9ydCBUcmFuc2xhdGVWaXNpdG9yIGZyb20gJy4vVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgeyBUcmFuc2xhdG9yRXhjZXB0aW9uIH0gZnJvbSAnLi9UcmFuc2xhdG9yRXhjZXB0aW9uLmpzJzsKKworLy8gU3RlcHMgd2hvc2UgcmV0dXJuIHR5cGUgbmVlZHMgPG9iamVjdCwgb2JqZWN0PgorY29uc3QgRE9VQkxFX0dFTkVSSUNfU1RFUFMgPSBuZXcgU2V0KFsnZ3JvdXAnLCAndmFsdWVNYXAnXSk7CisKKy8qKgorICogQ29udmVydHMgYSBHcmVtbGluIHRyYXZlcnNhbCBzdHJpbmcgaW50byBhIEMjIHNvdXJjZSBjb2RlIHJlcHJlc2VudGF0aW9uLgorICogTWlycm9ycyB0aGUgSmF2YSBEb3ROZXRUcmFuc2xhdGVWaXNpdG9yLgorICovCitleHBvcnQgZGVmYXVsdCBjbGFzcyBEb3ROZXRUcmFuc2xhdGVWaXNpdG9yIGV4dGVuZHMgVHJhbnNsYXRlVmlzaXRvciB7CisKKyAgICBjb25zdHJ1Y3RvcihncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWU6IHN0cmluZyA9ICdnJykgeworICAgICAgICBzdXBlcihncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWUpOworICAgIH0KKworICAgIHByb3RlY3RlZCBvdmVycmlkZSBwcm9jZXNzR3JlbWxpblN5bWJvbChzdGVwOiBzdHJpbmcpOiBzdHJpbmcgeworICAgICAgICByZXR1cm4gU3ltYm9sSGVscGVyLnRvQ1NoYXJwKHN0ZXApOworICAgIH0KKworICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDYXJkaW5hbGl0eUZ1bmN0aW9uQ2xhc3MoKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuICdDYXJkaW5hbGl0eVZhbHVlJzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiAuTkVUIGVudW0gdmFsdWVzIGFyZSBjYXBpdGFsaXplZCBidXQgZG8gTk9UIGdvIHRocm91Z2ggcHJvY2Vzc0dyZW1saW5TeW1ib2wsCisgICAgICogc2luY2UgdGhlIFN5bWJvbEhlbHBlciBtYXBwaW5ncyAoYmlnZGVjaW1hbOKGkkJpZ0RlY2ltYWwgZXRjLikgZG9uJ3QgYXBwbHkgdG8gZW51bXMuCisgICAgICovCisgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFwcGVuZEV4cGxpY2l0TmFtaW5nKHR4dDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHZvaWQgeworICAgICAgICBpZiAoIXR4dC5zdGFydHNXaXRoKHByZWZpeCArICcuJykpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChwcmVmaXgpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcuJyk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZSh0eHQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdHh0LnNwbGl0KCcuJyk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2gocGFydHNbMF0pOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcuJyk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShwYXJ0c1sxXSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxHVHlwZShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBjdHguZ2V0VGV4dCgpLnNwbGl0KCcuJyk7CisgICAgICAgIHRoaXMuc2IucHVzaCh0aGlzLnByb2Nlc3NHcmVtbGluU3ltYm9sKHBhcnRzWzBdKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLicpOworICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbChwYXJ0c1sxXS50b0xvd2VyQ2FzZSgpKSk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxEaXJlY3Rpb24oY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICB0aGlzLnNiLnB1c2goJ0RpcmVjdGlvbi4nKTsKKyAgICAgICAgaWYgKGRpcmVjdGlvbi5pbmNsdWRlcygnb3V0JykpIHRoaXMuc2IucHVzaCgnT3V0Jyk7CisgICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbi5pbmNsdWRlcygnaW4nKSkgdGhpcy5zYi5wdXNoKCdJbicpOworICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24uaW5jbHVkZXMoJ2Zyb20nKSkgdGhpcy5zYi5wdXNoKCdGcm9tJyk7CisgICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbi5pbmNsdWRlcygndG8nKSkgdGhpcy5zYi5wdXNoKCdUbycpOworICAgICAgICBlbHNlIHRoaXMuc2IucHVzaCgnQm90aCcpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsRGlyZWN0aW9uU2hvcnQoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy52aXNpdFRyYXZlcnNhbERpcmVjdGlvbihjdHgpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsRGlyZWN0aW9uTG9uZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnZpc2l0VHJhdmVyc2FsRGlyZWN0aW9uKGN0eCk7CisgICAgfQorCisgICAgdmlzaXROYW5MaXRlcmFsKF9jdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJ0RvdWJsZS5OYU4nKTsKKyAgICB9CisKKyAgICB2aXNpdEluZkxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5TaWduZWRJbmZMaXRlcmFsKCkgIT0gbnVsbCAmJiBjdHguU2lnbmVkSW5mTGl0ZXJhbCgpLmdldFRleHQoKSA9PT0gJy1JbmZpbml0eScpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnRG91YmxlLk5lZ2F0aXZlSW5maW5pdHknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnRG91YmxlLlBvc2l0aXZlSW5maW5pdHknKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0SW50ZWdlckxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgaW50ZWdlckxpdGVyYWw6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgY29uc3QgbGFzdENoYXIgPSBpbnRlZ2VyTGl0ZXJhbFtpbnRlZ2VyTGl0ZXJhbC5sZW5ndGggLSAxXTsKKworICAgICAgICBpZiAoIS9bYS16XS8udGVzdChsYXN0Q2hhcikpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChpbnRlZ2VyTGl0ZXJhbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBudW0gPSBpbnRlZ2VyTGl0ZXJhbC5zbGljZSgwLCAtMSk7CisgICAgICAgIHN3aXRjaCAobGFzdENoYXIpIHsKKyAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKHNieXRlKSAnKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKHNob3J0KSAnKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGludGVnZXJMaXRlcmFsKTsgLy8ga2VlcCB0aGUgJ2wnIHN1ZmZpeCBmb3IgQyMKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnQmlnSW50ZWdlci5QYXJzZSgiJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCciKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goaW50ZWdlckxpdGVyYWwpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRGbG9hdExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5pbmZMaXRlcmFsKCkgIT0gbnVsbCkgeyB0aGlzLnZpc2l0KGN0eC5pbmZMaXRlcmFsKCkpOyByZXR1cm47IH0KKyAgICAgICAgaWYgKGN0eC5uYW5MaXRlcmFsKCkgIT0gbnVsbCkgeyB0aGlzLnZpc2l0KGN0eC5uYW5MaXRlcmFsKCkpOyByZXR1cm47IH0KKworICAgICAgICBjb25zdCBmbG9hdExpdGVyYWw6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgY29uc3QgbGFzdENoYXIgPSBmbG9hdExpdGVyYWxbZmxvYXRMaXRlcmFsLmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmICghL1thLXpdLy50ZXN0KGxhc3RDaGFyKSkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGZsb2F0TGl0ZXJhbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBudW0gPSBmbG9hdExpdGVyYWwuc2xpY2UoMCwgLTEpOworICAgICAgICBzd2l0Y2ggKGxhc3RDaGFyKSB7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChmbG9hdExpdGVyYWwpOyAvLyBrZWVwIHRoZSBmL2Qgc3VmZml4IGZvciBDIworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoZGVjaW1hbCkgJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChmbG9hdExpdGVyYWwpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXREYXRlTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBkdFN0cmluZzogc3RyaW5nID0gY3R4LmdldENoaWxkKDIpLmdldFRleHQoKTsKKyAgICAgICAgY29uc3QgaW5uZXIgPSBUcmFuc2xhdGVWaXNpdG9yLnJlbW92ZUZpcnN0QW5kTGFzdENoYXJhY3RlcnMoZHRTdHJpbmcpOworICAgICAgICB0aGlzLnNiLnB1c2goJ0RhdGVUaW1lT2Zmc2V0LlBhcnNlKCInKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGZvcm1hdERhdGV0aW1lSmF2YVN0eWxlKGlubmVyKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnIiknKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNSYW5nZUxpdGVyYWwoX2N0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRocm93IG5ldyBUcmFuc2xhdG9yRXhjZXB0aW9uKCcuTkVUIGRvZXMgbm90IHN1cHBvcnQgcmFuZ2UgbGl0ZXJhbHMnKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNTZXRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnbmV3IEhhc2hTZXQ8b2JqZWN0PiB7ICcpOworICAgICAgICBjb25zdCBsaXRlcmFsczogYW55W10gPSBjdHguZ2VuZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXRlcmFscy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy52aXNpdChsaXRlcmFsc1tpXSk7CisgICAgICAgICAgICBpZiAoaSA8IGxpdGVyYWxzLmxlbmd0aCAtIDEpIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJyB9Jyk7CisgICAgfQorCisgICAgdmlzaXRHZW5lcmljQ29sbGVjdGlvbkxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgTGlzdDxvYmplY3Q+IHsgJyk7CisgICAgICAgIGNvbnN0IGxpdGVyYWxzOiBhbnlbXSA9IGN0eC5nZW5lcmljTGl0ZXJhbCgpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpdGVyYWxzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGxpdGVyYWxzW2ldKTsKKyAgICAgICAgICAgIGlmIChpIDwgbGl0ZXJhbHMubGVuZ3RoIC0gMSkgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnIH0nKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNNYXBMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHsnKTsKKyAgICAgICAgY29uc3QgZW50cmllczogYW55W10gPSBjdHgubWFwRW50cnkoKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGVudHJpZXNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBlbnRyaWVzLmxlbmd0aCAtIDEpIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ30nKTsKKyAgICB9CisKKyAgICB2aXNpdE1hcEVudHJ5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgneyAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHgubWFwS2V5KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyB9Jyk7CisgICAgfQorCisgICAgdmlzaXRNYXBLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qga2V5SW5kZXggPSAoY3R4LkxQQVJFTigpICE9IG51bGwgJiYgY3R4LlJQQVJFTigpICE9IG51bGwpID8gMSA6IDA7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKGtleUluZGV4KSk7CisgICAgfQorCisgICAgdmlzaXRVdWlkTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LnN0cmluZ0xpdGVyYWwoKSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ0d1aWQuTmV3R3VpZCgpJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zYi5wdXNoKCdHdWlkLlBhcnNlKCcpOworICAgICAgICB0aGlzLnNiLnB1c2goY3R4LnN0cmluZ0xpdGVyYWwoKS5nZXRUZXh0KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdENsYXNzVHlwZShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJ3R5cGVvZignKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRUZXh0KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFN0cmF0ZWd5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguZ2V0Q2hpbGRDb3VudCgpID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ25ldyAnKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCk7CisgICAgICAgIGNvbnN0IHN0cmF0ZWd5TmFtZSA9IGZpcnN0VGV4dCA9PT0gJ25ldycgPyBjdHguZ2V0Q2hpbGQoMSkuZ2V0VGV4dCgpIDogZmlyc3RUZXh0OworICAgICAgICB0aGlzLnNiLnB1c2goJ25ldyAnKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKHN0cmF0ZWd5TmFtZSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworCisgICAgICAgIGNvbnN0IGNvbmZpZ3M6IGFueVtdID0gY3R4LmNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgY29uc3QgaXNPcHRpb25zU3RyYXRlZ3kgPSBjdHguY2hpbGRyZW4/LnNvbWUoKGM6IGFueSkgPT4gYy5nZXRUZXh0KCkgPT09ICdPcHRpb25zU3RyYXRlZ3knKTsKKworICAgICAgICBpZiAoY29uZmlncy5sZW5ndGggPiAwICYmIGlzT3B0aW9uc1N0cmF0ZWd5KSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ25ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PiB7Jyk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGNmZyBvZiBjb25maWdzKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCd7IicpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChjZmcuZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyIsJyk7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdChjZmcuZ2V0Q2hpbGQoMikpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnfSwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnfScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChsZXQgaXggPSAwOyBpeCA8IGNvbmZpZ3MubGVuZ3RoOyBpeCsrKSB7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdChjb25maWdzW2l4XSk7CisgICAgICAgICAgICAgICAgaWYgKGl4IDwgY29uZmlncy5sZW5ndGggLSAxKSB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdENvbmZpZ3VyYXRpb24oY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpOworICAgICAgICB0aGlzLnNiLnB1c2goa2V5KTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCc6ICcpOworCisgICAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gdGhpcy5zYi5sZW5ndGg7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDIpKTsKKworICAgICAgICBpZiAoa2V5ID09PSAncmVhZFBhcnRpdGlvbnMnKSB7CisgICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuc2Iuc3BsaWNlKHN0YXJ0SWR4KTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChhZGRlZC5qb2luKCcnKS5yZXBsYWNlKCdMaXN0PG9iamVjdD4nLCAnSGFzaFNldDxzdHJpbmc+JykpOworICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2tleXMnKSB7CisgICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuc2Iuc3BsaWNlKHN0YXJ0SWR4KTsKKyAgICAgICAgICAgIGNvbnN0IGpvaW5lZCA9IGFkZGVkLmpvaW4oJycpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGpvaW5lZC5pbmNsdWRlcygnSGFzaFNldDxvYmplY3Q+JykgPyBqb2luZWQucmVwbGFjZSgnSGFzaFNldDxvYmplY3Q+JywgJ0hhc2hTZXQ8c3RyaW5nPicpIDogam9pbmVkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0U3RyaW5nTnVsbGFibGVBcmd1bWVudFZhcmFyZ3MoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgbiA9IGN0eC5nZXRDaGlsZENvdW50KCk7CisgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCBuOyBpeCsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN0eC5nZXRDaGlsZChpeCk7CisgICAgICAgICAgICBpZiAoY2hpbGQuY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTdHJpbmdOdWxsYWJsZUFyZ3VtZW50Q29udGV4dCcpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdOdWxsYWJsZUFyZyhjaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnZpc2l0KGNoaWxkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIOKUgOKUgOKUgCBoYW5kbGVHZW5lcmljcyBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgcHJpdmF0ZSBoYW5kbGVHZW5lcmljcyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBzdGVwOiBzdHJpbmcgPSBjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpOworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShzdGVwKSk7CisgICAgICAgIHRoaXMuc2IucHVzaChET1VCTEVfR0VORVJJQ19TVEVQUy5oYXMoc3RlcCkgPyAnPG9iamVjdCwgb2JqZWN0PicgOiAnPG9iamVjdD4nKTsKKyAgICAgICAgZm9yIChsZXQgaXggPSAxOyBpeCA8IGN0eC5nZXRDaGlsZENvdW50KCk7IGl4KyspIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKGl4KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGhhbmRsZUxvbmdBcmd1bWVudHMoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qgc3RlcDogc3RyaW5nID0gY3R4LmdldENoaWxkKDApLmdldFRleHQoKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoc3RlcCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJzxvYmplY3Q+Jyk7CisgICAgICAgIGZvciAobGV0IGl4ID0gMTsgaXggPCBjdHguZ2V0Q2hpbGRDb3VudCgpOyBpeCsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN0eC5nZXRDaGlsZChpeCk7CisgICAgICAgICAgICBpZiAoY2hpbGQuY29uc3RydWN0b3I/Lm5hbWUgPT09ICdJbnRlZ2VyQXJndW1lbnRDb250ZXh0JykgeworICAgICAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvTG9uZ19JbnRBcmcoY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy52aXNpdChjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgQ2FzdCBoZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgcHJpdmF0ZSB0cnlBcHBlbmRDYXN0VG9Mb25nX0ludEFyZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4Py52YXJpYWJsZSgpICE9IG51bGwpIHRoaXMuc2IucHVzaCgnKGxvbmcpICcpOworICAgIH0KKworICAgIHByaXZhdGUgdHJ5QXBwZW5kQ2FzdFRvU3RyaW5nX1N0cmluZ0FyZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4Py52YXJpYWJsZSgpICE9IG51bGwgfHwgY3R4Py5zdHJpbmdMaXRlcmFsKCkgIT0gbnVsbCkgdGhpcy5zYi5wdXNoKCcoc3RyaW5nKSAnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdOdWxsYWJsZUxpdChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4Py5LX05VTEwgIT0gbnVsbCAmJiBjdHguS19OVUxMKCkgIT0gbnVsbCkgdGhpcy5zYi5wdXNoKCcoc3RyaW5nKSAnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdOdWxsYWJsZUFyZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4Py52YXJpYWJsZSgpICE9IG51bGwgfHwKKyAgICAgICAgICAgIChjdHg/LnN0cmluZ051bGxhYmxlTGl0ZXJhbCgpICE9IG51bGwgJiYgY3R4LnN0cmluZ051bGxhYmxlTGl0ZXJhbCgpPy5LX05VTEwgIT0gbnVsbCAmJiBjdHguc3RyaW5nTnVsbGFibGVMaXRlcmFsKCkuS19OVUxMKCkgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKHN0cmluZykgJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHRyeUFwcGVuZENhc3RUb09iamVjdF9HZW5lcmljQXJnKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHg/LnZhcmlhYmxlKCkgIT0gbnVsbCB8fAorICAgICAgICAgICAgKGN0eD8uZ2VuZXJpY0xpdGVyYWwoKSAhPSBudWxsICYmIGN0eC5nZW5lcmljTGl0ZXJhbCgpPy5udWxsTGl0ZXJhbCAhPSBudWxsICYmIGN0eC5nZW5lcmljTGl0ZXJhbCgpLm51bGxMaXRlcmFsKCkgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKG9iamVjdCkgJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHRyeUFwcGVuZENhc3RUb09iamVjdF9HZW5lcmljTGl0KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHg/Lm51bGxMaXRlcmFsICE9IG51bGwgJiYgY3R4Lm51bGxMaXRlcmFsKCkgIT0gbnVsbCkgdGhpcy5zYi5wdXNoKCcob2JqZWN0KSAnKTsKKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgaXNDYWxsZWRBc0ZpcnN0U3RlcEluQW5vbnltb3VzVHJhdmVyc2FsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgcHJpdmF0ZSBpc0NhbGxlZEFzRmlyc3RTdGVwSW5Bbm9ueW1vdXNUcmF2ZXJzYWwoY3R4OiBhbnkpOiBib29sZWFuIHsKKyAgICAgICAgLy8gY3R4ID0gdHJhdmVyc2FsTWV0aG9kX2ZvbGRfRW1wdHlDb250ZXh0CisgICAgICAgIC8vIHBhcmVudCA9IHRyYXZlcnNhbE1ldGhvZENvbnRleHQg4oaSIGNoYWluZWRUcmF2ZXJzYWxDb250ZXh0IOKGkiBuZXN0ZWRUcmF2ZXJzYWxDb250ZXh0CisgICAgICAgIGNvbnN0IHBhcmVudCA9IGN0eC5wYXJlbnQ7CisgICAgICAgIGlmICghcGFyZW50KSByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IHBhcmVudFBhcmVudCA9IHBhcmVudC5wYXJlbnQ7IC8vIENoYWluZWRUcmF2ZXJzYWxDb250ZXh0CisgICAgICAgIGlmICghcGFyZW50UGFyZW50KSByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IHBhcmVudFBhcmVudFBhcmVudCA9IHBhcmVudFBhcmVudC5wYXJlbnQ7IC8vIHNob3VsZCBiZSBOZXN0ZWRUcmF2ZXJzYWxDb250ZXh0CisgICAgICAgIGlmIChwYXJlbnRQYXJlbnRQYXJlbnQ/LmNvbnN0cnVjdG9yPy5uYW1lICE9PSAnTmVzdGVkVHJhdmVyc2FsQ29udGV4dCcpIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgY3R4IGlzIHRoZSBmaXJzdCBzdGVwOiBwYXJlbnRQYXJlbnQuY2hpbGQoMCkuY2hpbGQoMCkgPT09IGN0eAorICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gcGFyZW50UGFyZW50LmdldENoaWxkKDApOworICAgICAgICBjb25zdCBmaXJzdEdyYW5kY2hpbGQgPSBmaXJzdENoaWxkPy5nZXRDaGlsZCgwKTsKKyAgICAgICAgcmV0dXJuIGZpcnN0R3JhbmRjaGlsZCA9PT0gY3R4OworICAgIH0KKworICAgIC8vIOKUgOKUgOKUgCBTb3VyY2Ugc3Bhd24gbWV0aG9kIG92ZXJyaWRlcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKworICAgIHZpc2l0VHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RfaW5qZWN0KGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RfaW8oY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF91bmlvbihjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX2NhbGxfZW1wdHkoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX2FkZFYoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpOworICAgICAgICBmb3IgKGxldCBpeCA9IDE7IGl4IDwgY3R4LmdldENoaWxkQ291bnQoKTsgaXgrKykgeworICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdHguZ2V0Q2hpbGQoaXgpOworICAgICAgICAgICAgaWYgKGNoaWxkLmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU3RyaW5nQXJndW1lbnRDb250ZXh0JykgdGhpcy50cnlBcHBlbmRDYXN0VG9TdHJpbmdfU3RyaW5nQXJnKGNoaWxkKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY2hpbGQpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF9hZGRFKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgZm9yIChsZXQgaXggPSAxOyBpeCA8IGN0eC5nZXRDaGlsZENvdW50KCk7IGl4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY3R4LmdldENoaWxkKGl4KTsKKyAgICAgICAgICAgIGlmIChjaGlsZC5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1N0cmluZ0FyZ3VtZW50Q29udGV4dCcpIHRoaXMudHJ5QXBwZW5kQ2FzdFRvU3RyaW5nX1N0cmluZ0FyZyhjaGlsZCk7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGNoaWxkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RfY2FsbF9zdHJpbmcoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpOworICAgICAgICB0aGlzLnNiLnB1c2goJzxvYmplY3Q+Jyk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKChzdHJpbmcpICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5zdHJpbmdMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX2NhbGxfc3RyaW5nX21hcChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnPG9iamVjdD4oJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ0xpdGVyYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2VuZXJpY01hcEFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX2NhbGxfc3RyaW5nX3RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnPG9iamVjdD4oJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ0xpdGVyYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLCAoSVRyYXZlcnNhbCkgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm5lc3RlZFRyYXZlcnNhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF9jYWxsX3N0cmluZ19tYXBfdHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCc8b2JqZWN0PignKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTWFwQXJndW1lbnQoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLCAoSVRyYXZlcnNhbCkgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm5lc3RlZFRyYXZlcnNhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF9tZXJnZVZfTWFwKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX21lcmdlVl9UcmF2ZXJzYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2V0Q2hpbGQoMCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJygoSVRyYXZlcnNhbCkgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm5lc3RlZFRyYXZlcnNhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF9tZXJnZUVfTWFwKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX21lcmdlRV9UcmF2ZXJzYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2V0Q2hpbGQoMCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJygoSVRyYXZlcnNhbCkgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm5lc3RlZFRyYXZlcnNhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgLy8g4pSA4pSA4pSAIFRyYXZlcnNhbCBtZXRob2Qgb3ZlcnJpZGVzIOKAlCBoYW5kbGVHZW5lcmljcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2FzU3RyaW5nX1Njb3BlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2JyYW5jaChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9jYXAoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfY2hvb3NlX0Z1bmN0aW9uKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2Nob29zZV9QcmVkaWNhdGVfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2Nob29zZV9QcmVkaWNhdGVfVHJhdmVyc2FsX1RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9jaG9vc2VfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2Nob29zZV9UcmF2ZXJzYWxfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2Nob29zZV9UcmF2ZXJzYWxfVHJhdmVyc2FsX1RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9jb2FsZXNjZShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9jb25zdGFudChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9lbGVtZW50TWFwKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2ZsYXRNYXAoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9mb2xkX0VtcHR5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmICh0aGlzLmlzQ2FsbGVkQXNGaXJzdFN0ZXBJbkFub255bW91c1RyYXZlcnNhbChjdHgpKSB7CisgICAgICAgICAgICB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4oY3R4KTsgLy8gYmFzZToganVzdCBvdXRwdXQgRm9sZCgpCisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9mb2xkX09iamVjdF9CaUZ1bmN0aW9uKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2dyb3VwX0VtcHR5KGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2dyb3VwQ291bnRfRW1wdHkoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaW5kZXgoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbGVuZ3RoX1Njb3BlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2xvY2FsKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2xUcmltX1Njb3BlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX21hcChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9tYXRjaChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9tYXhfRW1wdHkoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWF4X1Njb3BlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX21lYW5fRW1wdHkoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWVhbl9TY29wZShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9taW5fRW1wdHkoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWluX1Njb3BlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX29wdGlvbmFsKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3Byb2ZpbGVfRW1wdHkoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfcHJvamVjdChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9wcm9wZXJ0aWVzKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3Byb3BlcnR5TWFwKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3JlcGxhY2VfU2NvcGVfU3RyaW5nX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9yVHJpbV9TY29wZShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9zYWNrX0VtcHR5KGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3NlbGVjdF9Db2x1bW4oY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2Rfc2VsZWN0X1BvcF9TdHJpbmcoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2Rfc2VsZWN0X1BvcF9TdHJpbmdfU3RyaW5nX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9zZWxlY3RfUG9wX1RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9zZWxlY3RfU3RyaW5nKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3NlbGVjdF9TdHJpbmdfU3RyaW5nX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9zZWxlY3RfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3NwbGl0X1Njb3BlX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9zdWJzdHJpbmdfU2NvcGVfaW50KGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3N1YnN0cmluZ19TY29wZV9pbnRfaW50KGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3N1bV9FbXB0eShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9zdW1fU2NvcGUoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfdGFpbF9FbXB0eShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF90YWlsX1Njb3BlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3RvTG93ZXJfU2NvcGUoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfdG9VcHBlcl9TY29wZShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF90cmVlX0VtcHR5KGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3RyaW1fU2NvcGUoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfdW5mb2xkKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3VuaW9uKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3ZhbHVlKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlR2VuZXJpY3MoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3ZhbHVlTWFwX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF92YWx1ZU1hcF9ib29sZWFuX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUdlbmVyaWNzKGN0eCk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF92YWx1ZXMoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy5oYW5kbGVHZW5lcmljcyhjdHgpOyB9CisKKyAgICAvLyDilIDilIDilIAgVHJhdmVyc2FsIG1ldGhvZCBvdmVycmlkZXMg4oCUIGhhbmRsZUxvbmdBcmd1bWVudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9saW1pdF9sb25nKGN0eDogYW55KTogdm9pZCB7IHRoaXMuaGFuZGxlTG9uZ0FyZ3VtZW50cyhjdHgpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbGltaXRfU2NvcGVfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3JhbmdlX2xvbmdfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3JhbmdlX1Njb3BlX2xvbmdfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3NraXBfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3NraXBfU2NvcGVfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3RhaWxfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX3RhaWxfU2NvcGVfbG9uZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLmhhbmRsZUxvbmdBcmd1bWVudHMoY3R4KTsgfQorCisgICAgLy8g4pSA4pSA4pSAIGFkZFYgLyBhZGRFIChzdHJpbmcgY2FzdCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9hZGRWX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIGZvciAobGV0IGl4ID0gMTsgaXggPCBjdHguZ2V0Q2hpbGRDb3VudCgpOyBpeCsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN0eC5nZXRDaGlsZChpeCk7CisgICAgICAgICAgICBpZiAoY2hpbGQuY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTdHJpbmdBcmd1bWVudENvbnRleHQnKSB0aGlzLnRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdBcmcoY2hpbGQpOworICAgICAgICAgICAgdGhpcy52aXNpdChjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9hZGRFX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIGZvciAobGV0IGl4ID0gMTsgaXggPCBjdHguZ2V0Q2hpbGRDb3VudCgpOyBpeCsrKSB7CisgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGN0eC5nZXRDaGlsZChpeCk7CisgICAgICAgICAgICBpZiAoY2hpbGQuY29uc3RydWN0b3I/Lm5hbWUgPT09ICdTdHJpbmdBcmd1bWVudENvbnRleHQnKSB0aGlzLnRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdBcmcoY2hpbGQpOworICAgICAgICAgICAgdGhpcy52aXNpdChjaGlsZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgY2FsbCB2YXJpYW50cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2NhbGxfc3RyaW5nKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCc8b2JqZWN0Pigoc3RyaW5nKSAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfY2FsbF9zdHJpbmdfbWFwKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCc8b2JqZWN0PignKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTWFwQXJndW1lbnQoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2NhbGxfc3RyaW5nX3RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnPG9iamVjdD4oJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ0xpdGVyYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLCAoSVRyYXZlcnNhbCkgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm5lc3RlZFRyYXZlcnNhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfY2FsbF9zdHJpbmdfbWFwX3RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnPG9iamVjdD4oJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ0xpdGVyYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2VuZXJpY01hcEFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgKElUcmF2ZXJzYWwpICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5uZXN0ZWRUcmF2ZXJzYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIC8vIOKUgOKUgOKUgCBoYXMgZmFtaWx5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzX1N0cmluZ19PYmplY3QoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpOworICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgdGhpcy50cnlBcHBlbmRDYXN0VG9TdHJpbmdfU3RyaW5nTnVsbGFibGVMaXQoY3R4LnN0cmluZ051bGxhYmxlTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTnVsbGFibGVMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvT2JqZWN0X0dlbmVyaWNBcmcoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2VuZXJpY0FyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9oYXNfU3RyaW5nX1AoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpOworICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgdGhpcy50cnlBcHBlbmRDYXN0VG9TdHJpbmdfU3RyaW5nTnVsbGFibGVMaXQoY3R4LnN0cmluZ051bGxhYmxlTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTnVsbGFibGVMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnRyYXZlcnNhbFByZWRpY2F0ZSgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzX1N0cmluZ19TdHJpbmdfT2JqZWN0KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvU3RyaW5nX1N0cmluZ051bGxhYmxlQXJnKGN0eC5zdHJpbmdOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5zdHJpbmdOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvU3RyaW5nX1N0cmluZ051bGxhYmxlTGl0KGN0eC5zdHJpbmdOdWxsYWJsZUxpdGVyYWwoKSk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ051bGxhYmxlTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICB0aGlzLnRyeUFwcGVuZENhc3RUb09iamVjdF9HZW5lcmljQXJnKGN0eC5nZW5lcmljQXJndW1lbnQoKSk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzX1N0cmluZ19TdHJpbmdfUChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICB0aGlzLnRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdOdWxsYWJsZUFyZyhjdHguc3RyaW5nTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICB0aGlzLnRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdOdWxsYWJsZUxpdChjdHguc3RyaW5nTnVsbGFibGVMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5zdHJpbmdOdWxsYWJsZUxpdGVyYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHgudHJhdmVyc2FsUHJlZGljYXRlKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9oYXNfVF9PYmplY3QoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpOworICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHgudHJhdmVyc2FsVCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICB0aGlzLnRyeUFwcGVuZENhc3RUb09iamVjdF9HZW5lcmljQXJnKGN0eC5nZW5lcmljQXJndW1lbnQoKSk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzX1RfUChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC50cmF2ZXJzYWxUKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnRyYXZlcnNhbFByZWRpY2F0ZSgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzS2V5X1AoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSkpOworICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHgudHJhdmVyc2FsUHJlZGljYXRlKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9oYXNLZXlfU3RyaW5nX1N0cmluZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICAvLyBzaW5nbGUgYXJnOiBhZGQgKHN0cmluZykgY2FzdDsgbXVsdGlwbGUgYXJnczogbm8gY2FzdAorICAgICAgICBpZiAoY3R4LnN0cmluZ051bGxhYmxlTGl0ZXJhbFZhcmFyZ3MoKSA9PSBudWxsIHx8IGN0eC5zdHJpbmdOdWxsYWJsZUxpdGVyYWxWYXJhcmdzKCkuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvU3RyaW5nX1N0cmluZ051bGxhYmxlTGl0KGN0eC5zdHJpbmdOdWxsYWJsZUxpdGVyYWwoKSk7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGN0eC5zdHJpbmdOdWxsYWJsZUxpdGVyYWwoKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihjdHgpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzVmFsdWVfT2JqZWN0X09iamVjdChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICAvLyBzaW5nbGUgYXJnOiBhZGQgKG9iamVjdCkgY2FzdDsgbXVsdGlwbGUgYXJnczogbm8gY2FzdAorICAgICAgICBpZiAoY3R4LmdlbmVyaWNBcmd1bWVudFZhcmFyZ3MoKSA9PSBudWxsIHx8IGN0eC5nZW5lcmljQXJndW1lbnRWYXJhcmdzKCkuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvT2JqZWN0X0dlbmVyaWNBcmcoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKGN0eCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9oYXNWYWx1ZV9QKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnRyYXZlcnNhbFByZWRpY2F0ZSgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfaGFzTGFiZWxfUChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC50cmF2ZXJzYWxQcmVkaWNhdGUoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2hhc0xhYmVsX1N0cmluZ19TdHJpbmcoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qgc3RlcCA9IGNhcGl0YWxpemUoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSk7CisgICAgICAgIGlmIChjdHguc3RyaW5nTnVsbGFibGVBcmd1bWVudFZhcmFyZ3MoKSA9PSBudWxsIHx8IGN0eC5zdHJpbmdOdWxsYWJsZUFyZ3VtZW50VmFyYXJncygpLmdldENoaWxkQ291bnQoKSA9PT0gMCkgeworICAgICAgICAgICAgLy8gc2luZ2xlIGFyZzogYWRkIChzdHJpbmcpIGNhc3QgaWYgdmFyaWFibGUgb3IgbnVsbAorICAgICAgICAgICAgdGhpcy5zYi5wdXNoKHN0ZXApOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgICAgICB0aGlzLnRyeUFwcGVuZENhc3RUb1N0cmluZ19TdHJpbmdOdWxsYWJsZUFyZyhjdHguc3RyaW5nTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ051bGxhYmxlQXJndW1lbnQoKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIG11bHRpcGxlIGFyZ3MKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChzdGVwKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRDYXN0VG9TdHJpbmdfU3RyaW5nTnVsbGFibGVBcmcoY3R4LnN0cmluZ051bGxhYmxlQXJndW1lbnQoKSk7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGN0eC5zdHJpbmdOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICAgICAgaWYgKGN0eC5zdHJpbmdOdWxsYWJsZUFyZ3VtZW50VmFyYXJncygpLmdldENoaWxkQ291bnQoKSA+IDApIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LnN0cmluZ051bGxhYmxlQXJndW1lbnRWYXJhcmdzKCkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgbWVyZ2VWIC8gbWVyZ2VFIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWVyZ2VWX01hcChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZXRDaGlsZCgwKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWVyZ2VWX1RyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZXRDaGlsZCgwKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKChJVHJhdmVyc2FsKSAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHgubmVzdGVkVHJhdmVyc2FsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9tZXJnZUVfTWFwKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9tZXJnZUVfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoKElUcmF2ZXJzYWwpICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5uZXN0ZWRUcmF2ZXJzYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIC8vIOKUgOKUgOKUgCBvcHRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9vcHRpb25fTWVyZ2VfTWFwKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnRyYXZlcnNhbE1lcmdlKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9vcHRpb25fTWVyZ2VfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LnRyYXZlcnNhbE1lcmdlKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgKElUcmF2ZXJzYWwpICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5uZXN0ZWRUcmF2ZXJzYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX29wdGlvbl9PYmplY3RfVHJhdmVyc2FsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIC8vIE9ubHkgYWRkIChJVHJhdmVyc2FsKSBjYXN0IHdoZW4gdGhlIG9iamVjdCBpcyBhIHRyYXZlcnNhbE1lcmdlCisgICAgICAgIGNvbnN0IGFyZ0lzVHJhdmVyc2FsTWVyZ2UgPSBjdHguZ2VuZXJpY0FyZ3VtZW50KCk/LmdlbmVyaWNMaXRlcmFsKCk/LnRyYXZlcnNhbE1lcmdlICE9IG51bGwgJiYKKyAgICAgICAgICAgIGN0eC5nZW5lcmljQXJndW1lbnQoKS5nZW5lcmljTGl0ZXJhbCgpLnRyYXZlcnNhbE1lcmdlKCkgIT0gbnVsbDsKKyAgICAgICAgaWYgKGFyZ0lzVHJhdmVyc2FsTWVyZ2UpIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICAgICAgdGhpcy52aXNpdChjdHguZ2VuZXJpY0FyZ3VtZW50KCkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsIChJVHJhdmVyc2FsKSAnKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4Lm5lc3RlZFRyYXZlcnNhbCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKGN0eCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgcHJvcGVydHkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9wcm9wZXJ0eV9DYXJkaW5hbGl0eV9PYmplY3RfT2JqZWN0X09iamVjdChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LmdlbmVyaWNBcmd1bWVudFZhcmFyZ3MoKSA9PSBudWxsIHx8IGN0eC5nZW5lcmljQXJndW1lbnRWYXJhcmdzKCkuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY2FwaXRhbGl6ZShjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJygnKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LnRyYXZlcnNhbENhcmRpbmFsaXR5KCkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgdGhpcy50cnlBcHBlbmRDYXN0VG9PYmplY3RfR2VuZXJpY0xpdChjdHguZ2VuZXJpY0xpdGVyYWwoKSk7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTGl0ZXJhbCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvT2JqZWN0X0dlbmVyaWNBcmcoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNBcmd1bWVudCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKGN0eCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyDilIDilIDilIAgY29uam9pbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX2NvbmpvaW5fU3RyaW5nKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjYXBpdGFsaXplKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgIHRoaXMudHJ5QXBwZW5kQ2FzdFRvU3RyaW5nX1N0cmluZ0xpdChjdHguc3RyaW5nTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguc3RyaW5nTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB0cnlBcHBlbmRDYXN0VG9TdHJpbmdfU3RyaW5nTGl0KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHggIT0gbnVsbCkgdGhpcy5zYi5wdXNoKCcoc3RyaW5nKSAnKTsKKyAgICB9Cit9CisKKy8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAorCitmdW5jdGlvbiBjYXBpdGFsaXplKHM6IHN0cmluZyk6IHN0cmluZyB7CisgICAgaWYgKCFzKSByZXR1cm4gczsKKyAgICByZXR1cm4gcy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSk7Cit9CisKKy8qKgorICogRm9ybWF0cyBhIGRhdGV0aW1lIHN0cmluZyB0aGUgc2FtZSB3YXkgSmF2YSdzIE9mZnNldERhdGVUaW1lLnRvU3RyaW5nKCkgZG9lczoKKyAqIC0gVHJ1bmNhdGVzIHNlY29uZHMgaWYgYm90aCBzZWNvbmRzIGFuZCBtaWxsaXNlY29uZHMgYXJlIDAKKyAqIC0gVXNlcyAnWicgZm9yIFVUQyBvZmZzZXQKKyAqLworZnVuY3Rpb24gZm9ybWF0RGF0ZXRpbWVKYXZhU3R5bGUoczogc3RyaW5nKTogc3RyaW5nIHsKKyAgICBjb25zdCBkID0gbmV3IERhdGUocyk7CisgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgeworICAgICAgICB0aHJvdyBuZXcgVHJhbnNsYXRvckV4Y2VwdGlvbihgSW52YWxpZCBkYXRldGltZTogJHtzfWApOworICAgIH0KKyAgICBjb25zdCB5ZWFyID0gZC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwgJzAnKTsKKyAgICBjb25zdCBtb250aCA9IChkLmdldFVUQ01vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CisgICAgY29uc3QgZGF5ID0gZC5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgIGNvbnN0IGhvdXJzID0gZC5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsKKyAgICBjb25zdCBtaW51dGVzID0gZC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgIGNvbnN0IHNlY29uZHMgPSBkLmdldFVUQ1NlY29uZHMoKTsKKyAgICBjb25zdCBtaWxsaXMgPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpOworCisgICAgbGV0IHJlc3VsdCA9IGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fVQke2hvdXJzfToke21pbnV0ZXN9YDsKKyAgICBpZiAoc2Vjb25kcyAhPT0gMCB8fCBtaWxsaXMgIT09IDApIHsKKyAgICAgICAgcmVzdWx0ICs9ICc6JyArIHNlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgICAgICBpZiAobWlsbGlzICE9PSAwKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gJy4nICsgbWlsbGlzLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKS5yZXBsYWNlKC8wKyQvLCAnJyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ICs9ICdaJzsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjbGFzcyBTeW1ib2xIZWxwZXIgeworICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFRPX0NTX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsKKyAgICAgICAgJ2dyYXBobWwnOiAnR3JhcGhNTCcsCisgICAgICAgICdncmFwaHNvbic6ICdHcmFwaFNPTicsCisgICAgICAgICdiaWdkZWNpbWFsJzogJ0JpZ0RlY2ltYWwnLAorICAgICAgICAnYmlnaW50JzogJ0JpZ0ludCcsCisgICAgICAgICdkYXRldGltZSc6ICdEYXRlVGltZScsCisgICAgICAgICd1dWlkJzogJ1VVSUQnLAorICAgICAgICAndnByb3BlcnR5JzogJ1ZQcm9wZXJ0eScsCisgICAgfTsKKworICAgIHN0YXRpYyB0b0NTaGFycChzeW1ib2w6IHN0cmluZyk6IHN0cmluZyB7CisgICAgICAgIHJldHVybiBTeW1ib2xIZWxwZXIuVE9fQ1NfTUFQW3N5bWJvbF0gPz8gY2FwaXRhbGl6ZShzeW1ib2wpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dvVHJhbnNsYXRlVmlzaXRvci50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dvVHJhbnNsYXRlVmlzaXRvci50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzgwNmJjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvR29UcmFuc2xhdGVWaXNpdG9yLnRzCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gQ29udGV4dCBwYXJhbWV0ZXJzIGFyZSB0eXBlZCBhcyBgYW55YCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgZ3JhbW1hciBmaWxlcworLy8gcmVxdWlyZSBhY2NlcHRpbmcgYXJiaXRyYXJ5IGNvbnRleHQgdHlwZXMgYXQgcnVudGltZS4KKworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JFeGNlcHRpb24gfSBmcm9tICcuL1RyYW5zbGF0b3JFeGNlcHRpb24uanMnOworCitjb25zdCBHT19QQUNLQUdFX05BTUUgPSAnZ3JlbWxpbmdvLic7CisKK2NvbnN0IFNUUkFURUdZX1dJVEhfTUFQX09QVFMgPSBuZXcgU2V0KFsKKyAgICAnT3B0aW9uc1N0cmF0ZWd5JywKKyAgICAnUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5JywgJ0NvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3knLCAnUHJvZmlsZVN0cmF0ZWd5JywKKyAgICAnQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneScsICdTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5JywgJ1ZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5JywKKyAgICAnTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneScsCitdKTsKKworY29uc3QgU1RSQVRFR1lfV0lUSF9TVFJJTkdfU0xJQ0UgPSBuZXcgU2V0KFsKKyAgICAnUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3knLCAnUHJvZHVjdGl2ZUJ5U3RyYXRlZ3knLAorXSk7CisKKy8qKgorICogQ29udmVydHMgYSBHcmVtbGluIHRyYXZlcnNhbCBzdHJpbmcgaW50byBhIEdvIHNvdXJjZSBjb2RlIHJlcHJlc2VudGF0aW9uLgorICogQXNzdW1lcyB1c2Ugb2YgdGhlIGdyZW1saW5nbywgbWF0aCwgdGltZSwgYW5kIHV1aWQgcGFja2FnZXMuCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEdvVHJhbnNsYXRlVmlzaXRvciBleHRlbmRzIFRyYW5zbGF0ZVZpc2l0b3IgeworCisgICAgY29uc3RydWN0b3IoZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lOiBzdHJpbmcgPSAnZycpIHsKKyAgICAgICAgc3VwZXIoZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHJvY2Vzc0dyZW1saW5TeW1ib2woc3RlcDogc3RyaW5nKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIFN5bWJvbEhlbHBlci50b0dvKHN0ZXApOworICAgIH0KKworICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDYXJkaW5hbGl0eUZ1bmN0aW9uQ2xhc3MoKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuICdDYXJkaW5hbGl0eVZhbHVlJzsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXBwZW5kRXhwbGljaXROYW1pbmcodHh0OiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChHT19QQUNLQUdFX05BTUUpOworICAgICAgICBzdXBlci5hcHBlbmRFeHBsaWNpdE5hbWluZyh0eHQsIHByZWZpeCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGFwcGVuZEFub255bW91c1NwYXduKCk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goR09fUEFDS0FHRV9OQU1FICsgJ1RfXy4nKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdmlzaXRQKGN0eDogYW55LCBwQ2xhc3M6IHN0cmluZywgbWV0aG9kTmFtZTogc3RyaW5nKTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChHT19QQUNLQUdFX05BTUUpOworICAgICAgICBzdXBlci52aXNpdFAoY3R4LCBwQ2xhc3MsIG1ldGhvZE5hbWUpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsR1R5cGUoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gY3R4LmdldFRleHQoKS5zcGxpdCgnLicpOworICAgICAgICB0aGlzLnNiLnB1c2goR09fUEFDS0FHRV9OQU1FKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKHRoaXMucHJvY2Vzc0dyZW1saW5TeW1ib2wocGFydHNbMF0pKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcuJyk7CisgICAgICAgIHRoaXMuc2IucHVzaCh0aGlzLnByb2Nlc3NHcmVtbGluU3ltYm9sKHBhcnRzWzFdLnRvTG93ZXJDYXNlKCkpKTsKKyAgICB9CisKKyAgICB2aXNpdE5hbkxpdGVyYWwoX2N0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnbWF0aC5OYU4oKScpOworICAgIH0KKworICAgIHZpc2l0SW5mTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LlNpZ25lZEluZkxpdGVyYWwoKSAhPSBudWxsICYmIGN0eC5TaWduZWRJbmZMaXRlcmFsKCkuZ2V0VGV4dCgpID09PSAnLUluZmluaXR5JykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdtYXRoLkluZigtMSknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnbWF0aC5JbmYoMSknKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0TnVsbExpdGVyYWwoX2N0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnbmlsJyk7CisgICAgfQorCisgICAgdmlzaXRTdHJpbmdOdWxsYWJsZUxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5nZXRUZXh0KCkgPT09ICdudWxsJykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCduaWwnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IHRleHQgPSBUcmFuc2xhdGVWaXNpdG9yLnJlbW92ZUZpcnN0QW5kTGFzdENoYXJhY3RlcnMoY3R4LmdldFRleHQoKSk7CisgICAgICAgICAgICB0aGlzLmhhbmRsZVN0cmluZ0xpdGVyYWxUZXh0KHRleHQpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRJbnRlZ2VyTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBpbnRlZ2VyTGl0ZXJhbDogc3RyaW5nID0gY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGludGVnZXJMaXRlcmFsW2ludGVnZXJMaXRlcmFsLmxlbmd0aCAtIDFdOworICAgICAgICBjb25zdCBudW0gPSBpbnRlZ2VyTGl0ZXJhbC5zbGljZSgwLCAtMSk7CisKKyAgICAgICAgaWYgKCEvW2Etel0vLnRlc3QobGFzdENoYXIpKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goaW50ZWdlckxpdGVyYWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChsYXN0Q2hhcikgeworICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdpbnQ4KCcpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdpbnQxNignKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnaW50MzIoJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ2ludDY0KCcpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKEdPX1BBQ0tBR0VfTkFNRSArICdQYXJzZUJpZ0ludCgiJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCciKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goaW50ZWdlckxpdGVyYWwpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRGbG9hdExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5pbmZMaXRlcmFsKCkgIT0gbnVsbCkgeyB0aGlzLnZpc2l0KGN0eC5pbmZMaXRlcmFsKCkpOyByZXR1cm47IH0KKyAgICAgICAgaWYgKGN0eC5uYW5MaXRlcmFsKCkgIT0gbnVsbCkgeyB0aGlzLnZpc2l0KGN0eC5uYW5MaXRlcmFsKCkpOyByZXR1cm47IH0KKworICAgICAgICBjb25zdCBmbG9hdExpdGVyYWw6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgY29uc3QgbGFzdENoYXIgPSBmbG9hdExpdGVyYWxbZmxvYXRMaXRlcmFsLmxlbmd0aCAtIDFdOworICAgICAgICBjb25zdCBudW0gPSBmbG9hdExpdGVyYWwuc2xpY2UoMCwgLTEpOworCisgICAgICAgIGlmICghL1thLXpdLy50ZXN0KGxhc3RDaGFyKSkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGZsb2F0TGl0ZXJhbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGxhc3RDaGFyKSB7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ2Zsb2F0MzIoJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChHT19QQUNLQUdFX05BTUUgKyAnUGFyc2VCaWdEZWNpbWFsKCInKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyIpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChmbG9hdExpdGVyYWwpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXREYXRlTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBkdFN0cmluZzogc3RyaW5nID0gY3R4LmdldENoaWxkKDIpLmdldFRleHQoKTsKKyAgICAgICAgY29uc3QgaW5uZXIgPSBUcmFuc2xhdGVWaXNpdG9yLnJlbW92ZUZpcnN0QW5kTGFzdENoYXJhY3RlcnMoZHRTdHJpbmcpOworICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoaW5uZXIpOworICAgICAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHJhbnNsYXRvckV4Y2VwdGlvbihgSW52YWxpZCBkYXRldGltZTogJHtpbm5lcn1gKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHllYXIgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7CisgICAgICAgIGNvbnN0IG1vbnRoID0gZC5nZXRVVENNb250aCgpICsgMTsKKyAgICAgICAgY29uc3QgZGF5ID0gZC5nZXRVVENEYXRlKCk7CisgICAgICAgIGNvbnN0IGhvdXJzID0gZC5nZXRVVENIb3VycygpOworICAgICAgICBjb25zdCBtaW51dGVzID0gZC5nZXRVVENNaW51dGVzKCk7CisgICAgICAgIGNvbnN0IHNlY29uZHMgPSBkLmdldFVUQ1NlY29uZHMoKTsKKyAgICAgICAgY29uc3QgbmFub3MgPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpICogMV8wMDBfMDAwOworICAgICAgICBjb25zdCB0b3RhbFNlY29uZHMgPSAwOyAvLyBhc3N1bWUgVVRDIHdoZW4gbm8gb2Zmc2V0IHNwZWNpZmllZAorICAgICAgICBjb25zdCB6b25lSW5mbyA9ICdVVEMrMDA6MDAnOworCisgICAgICAgIHRoaXMuc2IucHVzaChgdGltZS5EYXRlKCR7eWVhcn0sICR7bW9udGh9LCAke2RheX0sICR7aG91cnN9LCAke21pbnV0ZXN9LCAke3NlY29uZHN9LCAke25hbm9zfSwgdGltZS5GaXhlZFpvbmUoIiR7em9uZUluZm99IiwgJHt0b3RhbFNlY29uZHN9KSlgKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNSYW5nZUxpdGVyYWwoX2N0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRocm93IG5ldyBUcmFuc2xhdG9yRXhjZXB0aW9uKCdHbyBkb2VzIG5vdCBzdXBwb3J0IHJhbmdlIGxpdGVyYWxzJyk7CisgICAgfQorCisgICAgdmlzaXRHZW5lcmljU2V0TGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goR09fUEFDS0FHRV9OQU1FICsgJ05ld1NpbXBsZVNldCgnKTsKKyAgICAgICAgY29uc3QgbGl0ZXJhbHM6IGFueVtdID0gY3R4LmdlbmVyaWNMaXRlcmFsKCk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGl0ZXJhbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQobGl0ZXJhbHNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBsaXRlcmFscy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0NvbGxlY3Rpb25MaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnW11pbnRlcmZhY2V7fXsnKTsKKyAgICAgICAgY29uc3QgbGl0ZXJhbHM6IGFueVtdID0gY3R4LmdlbmVyaWNMaXRlcmFsKCk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGl0ZXJhbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQobGl0ZXJhbHNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBsaXRlcmFscy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnfScpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY01hcExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317Jyk7CisgICAgICAgIGNvbnN0IGVudHJpZXM6IGFueVtdID0gY3R4Lm1hcEVudHJ5KCk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy52aXNpdChlbnRyaWVzW2ldKTsKKyAgICAgICAgICAgIGlmIChpIDwgZW50cmllcy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnIH0nKTsKKyAgICB9CisKKyAgICB2aXNpdE1hcEVudHJ5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm1hcEtleSgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCc6ICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTGl0ZXJhbCgpKTsKKyAgICB9CisKKyAgICB2aXNpdE1hcEtleShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBrZXlJbmRleCA9IChjdHguTFBBUkVOKCkgIT0gbnVsbCAmJiBjdHguUlBBUkVOKCkgIT0gbnVsbCkgPyAxIDogMDsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2V0Q2hpbGQoa2V5SW5kZXgpKTsKKyAgICB9CisKKyAgICB2aXNpdFV1aWRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguc3RyaW5nTGl0ZXJhbCgpID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgndXVpZC5OZXcoKScpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgndXVpZC5NdXN0UGFyc2UoJyk7CisgICAgICAgIHRoaXMudmlzaXRTdHJpbmdMaXRlcmFsKGN0eC5zdHJpbmdMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFN0cmF0ZWd5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguZ2V0Q2hpbGRDb3VudCgpID09PSAxKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goR09fUEFDS0FHRV9OQU1FKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCk7CisgICAgICAgIGNvbnN0IHN0cmF0ZWd5TmFtZSA9IGZpcnN0VGV4dCA9PT0gJ25ldycgPyBjdHguZ2V0Q2hpbGQoMSkuZ2V0VGV4dCgpIDogZmlyc3RUZXh0OworCisgICAgICAgIHRoaXMuc2IucHVzaChHT19QQUNLQUdFX05BTUUpOworICAgICAgICB0aGlzLnNiLnB1c2goc3RyYXRlZ3lOYW1lKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisKKyAgICAgICAgaWYgKCFTVFJBVEVHWV9XSVRIX01BUF9PUFRTLmhhcyhzdHJhdGVneU5hbWUpKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goR09fUEFDS0FHRV9OQU1FKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChzdHJhdGVneU5hbWUpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdDb25maWd7Jyk7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBjb25maWdzOiBhbnlbXSA9IGN0eC5jb25maWd1cmF0aW9uKCk7CisgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCBjb25maWdzLmxlbmd0aDsgaXgrKykgeworICAgICAgICAgICAgdGhpcy52aXNpdChjb25maWdzW2l4XSk7CisgICAgICAgICAgICBpZiAoaXggPCBjb25maWdzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyYXRlZ3lOYW1lICE9PSAnT3B0aW9uc1N0cmF0ZWd5JykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCd9Jyk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRDb25maWd1cmF0aW9uKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IHBhcmVudDogc3RyaW5nID0gY3R4LnBhcmVudC5nZXRUZXh0KCk7CisgICAgICAgIGNvbnN0IHBhcmVuSWR4ID0gcGFyZW50LmluZGV4T2YoJygnKTsKKyAgICAgICAgY29uc3QgcmF3TmFtZSA9IHBhcmVuSWR4ID4gLTEgPyBwYXJlbnQuc3Vic3RyaW5nKDAsIHBhcmVuSWR4KSA6IHBhcmVudDsKKyAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IHJhd05hbWUuc3RhcnRzV2l0aCgnbmV3JykgPyByYXdOYW1lLnN1YnN0cmluZygzKSA6IHJhd05hbWU7CisKKyAgICAgICAgaWYgKFNUUkFURUdZX1dJVEhfTUFQX09QVFMuaGFzKHBhcmVudE5hbWUpKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ21hcFtzdHJpbmddaW50ZXJmYWNle317IicpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCciOiAnKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDIpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnfScpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qga2V5OiBzdHJpbmcgPSBjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpOworICAgICAgICB0aGlzLnNiLnB1c2goU3ltYm9sSGVscGVyLnRvR28oa2V5KSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnOiAnKTsKKworICAgICAgICBjb25zdCBzdGFydElkeCA9IHRoaXMuc2IubGVuZ3RoOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljQXJndW1lbnQoKSk7CisKKyAgICAgICAgaWYgKFNUUkFURUdZX1dJVEhfU1RSSU5HX1NMSUNFLmhhcyhwYXJlbnROYW1lKSkgeworICAgICAgICAgICAgLy8gUmVwbGFjZSBbXWludGVyZmFjZXt9IHdpdGggW11zdHJpbmcgaWYgcHJlc2VudAorICAgICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5zYi5pbmRleE9mKCdbXWludGVyZmFjZXt9Jywgc3RhcnRJZHgpOworICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYltpZHhdID0gJ1tdc3RyaW5nJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXkgPT09ICdyZWFkUGFydGl0aW9ucycpIHsKKyAgICAgICAgICAgIC8vIFJlcGxhY2UgW11pbnRlcmZhY2V7fXtpdGVtc30gd2l0aCBncmVtbGluZ28uTmV3U2ltcGxlU2V0KGl0ZW1zKQorICAgICAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLnNiLnNwbGljZShzdGFydElkeCk7CisgICAgICAgICAgICBjb25zdCBqb2luZWQgPSBhZGRlZC5qb2luKCcnKTsKKyAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gam9pbmVkLnJlcGxhY2UoL15cW1xdaW50ZXJmYWNlXHtcfVx7KFtcc1xTXSopXH0kLywgR09fUEFDS0FHRV9OQU1FICsgJ05ld1NpbXBsZVNldCgkMSknKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCh0cmFuc2Zvcm1lZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2Rfd2l0aG91dFN0cmF0ZWdpZXMoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdXaXRob3V0U3RyYXRlZ2llcygnKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKEdPX1BBQ0tBR0VfTkFNRSk7CisgICAgICAgIHRoaXMuc2IucHVzaChjdHguY2xhc3NUeXBlKCkuZ2V0VGV4dCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcoKScpOworCisgICAgICAgIGlmIChjdHguY2xhc3NUeXBlTGlzdCgpICE9IG51bGwgJiYgY3R4LmNsYXNzVHlwZUxpc3QoKS5jbGFzc1R5cGVFeHByKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1R5cGVDdHggb2YgY3R4LmNsYXNzVHlwZUxpc3QoKS5jbGFzc1R5cGVFeHByKCkuY2xhc3NUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKEdPX1BBQ0tBR0VfTkFNRSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGNsYXNzVHlwZUN0eC5nZXRUZXh0KCkpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCknKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KK30KKworY2xhc3MgU3ltYm9sSGVscGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT19HT19NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7CisgICAgICAgICdPVVQnOiAnT3V0JywKKyAgICAgICAgJ0lOJzogJ0luJywKKyAgICAgICAgJ0JPVEgnOiAnQm90aCcsCisgICAgICAgICdiaWdkZWNpbWFsJzogJ0JpZ0RlY2ltYWwnLAorICAgICAgICAnYmlnaW50JzogJ0JpZ0ludCcsCisgICAgICAgICdkYXRldGltZSc6ICdEYXRlVGltZScsCisgICAgICAgICd1dWlkJzogJ1VVSUQnLAorICAgICAgICAndnByb3BlcnR5JzogJ1ZQcm9wZXJ0eScsCisgICAgICAgICdXaXRoT3B0aW9ucyc6IEdPX1BBQ0tBR0VfTkFNRSArICdXaXRoT3B0aW9ucycsCisgICAgICAgICdJTyc6IEdPX1BBQ0tBR0VfTkFNRSArICdJTycsCisgICAgICAgICdfXyc6IEdPX1BBQ0tBR0VfTkFNRSArICdUX18nLAorICAgIH07CisKKyAgICBzdGF0aWMgdG9HbyhzeW1ib2w6IHN0cmluZyk6IHN0cmluZyB7CisgICAgICAgIGlmIChzeW1ib2wgaW4gU3ltYm9sSGVscGVyLlRPX0dPX01BUCkgeworICAgICAgICAgICAgcmV0dXJuIFN5bWJvbEhlbHBlci5UT19HT19NQVBbc3ltYm9sXTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYXBpdGFsaXplIGZpcnN0IGxldHRlciAobWlycm9ycyBKYXZhIFN0cmluZ1V0aWxzLmNhcGl0YWxpemUpCisgICAgICAgIGlmICghc3ltYm9sKSByZXR1cm4gc3ltYm9sOworICAgICAgICByZXR1cm4gc3ltYm9sLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3ltYm9sLnNsaWNlKDEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyZW1saW5UcmFuc2xhdG9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvR3JlbWxpblRyYW5zbGF0b3IudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNkZGRhNQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyZW1saW5UcmFuc2xhdG9yLnRzCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgQVROU2ltdWxhdG9yLCBCYXNlRXJyb3JMaXN0ZW5lciwgQ2hhclN0cmVhbSwgQ29tbW9uVG9rZW5TdHJlYW0sIFByZWRpY3Rpb25Nb2RlLCBSZWNvZ25pemVyLCBSZWNvZ25pdGlvbkV4Y2VwdGlvbiB9IGZyb20gJ2FudGxyNG5nJzsKK2ltcG9ydCB7IEdyZW1saW5MZXhlciB9IGZyb20gJy4uL2dyYW1tYXIvR3JlbWxpbkxleGVyLmpzJzsKK2ltcG9ydCB7IEdyZW1saW5QYXJzZXIgfSBmcm9tICcuLi9ncmFtbWFyL0dyZW1saW5QYXJzZXIuanMnOworaW1wb3J0IHsgVHJhbnNsYXRpb24gfSBmcm9tICcuL1RyYW5zbGF0aW9uLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JFeGNlcHRpb24gfSBmcm9tICcuL1RyYW5zbGF0b3JFeGNlcHRpb24uanMnOworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCBKYXZhc2NyaXB0VHJhbnNsYXRlVmlzaXRvciBmcm9tICcuL0phdmFzY3JpcHRUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3IsIFRyYW5zbGF0b3JLZXkgfSBmcm9tICcuL1RyYW5zbGF0b3IuanMnOworCisvKioKKyAqIEVycm9yIGxpc3RlbmVyIHRoYXQgdGhyb3dzIFRyYW5zbGF0b3JFeGNlcHRpb24gb24gc3ludGF4IGVycm9ycy4KKyAqLworY2xhc3MgVGhyb3dpbmdFcnJvckxpc3RlbmVyIGV4dGVuZHMgQmFzZUVycm9yTGlzdGVuZXIgeworICAgIG92ZXJyaWRlIHN5bnRheEVycm9yKAorICAgICAgICBfcmVjb2duaXplcjogUmVjb2duaXplcjxBVE5TaW11bGF0b3I+LAorICAgICAgICBfb2ZmZW5kaW5nU3ltYm9sOiB1bmtub3duLAorICAgICAgICBsaW5lOiBudW1iZXIsCisgICAgICAgIGNvbHVtbjogbnVtYmVyLAorICAgICAgICBtc2c6IHN0cmluZywKKyAgICAgICAgX2U6IFJlY29nbml0aW9uRXhjZXB0aW9uIHwgbnVsbCwKKyAgICApOiB2b2lkIHsKKyAgICAgICAgdGhyb3cgbmV3IFRyYW5zbGF0b3JFeGNlcHRpb24oYEZhaWxlZCB0byBpbnRlcnByZXQgR3JlbWxpbiBxdWVyeSBhdCBsaW5lICR7bGluZX06JHtjb2x1bW59IC0gJHttc2d9YCk7CisgICAgfQorfQorCitjb25zdCBlcnJvckxpc3RlbmVyID0gbmV3IFRocm93aW5nRXJyb3JMaXN0ZW5lcigpOworCisvKioKKyAqIFRyYW5zbGF0ZXMgYSBHcmVtbGluIHN0cmluZyBpbnRvIGEgc291cmNlIGNvZGUgcmVwcmVzZW50YXRpb24gdXNpbmcgQU5UTFIuCisgKiBNaXJyb3JzIHRoZSBKYXZhIEdyZW1saW5UcmFuc2xhdG9yIHdpdGggU0xMIOKGkiBMTCBmYWxsYmFjayBwYXJzaW5nLgorICovCitleHBvcnQgY2xhc3MgR3JlbWxpblRyYW5zbGF0b3IgeworCisgICAgLyoqCisgICAgICogVHJhbnNsYXRlcyBhIEdyZW1saW4gcXVlcnkgc3RyaW5nLiBEZWZhdWx0cyB0byBKYXZhU2NyaXB0IG91dHB1dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgR3JlbWxpbiB0cmF2ZXJzYWwgc3RyaW5nIHRvIHRyYW5zbGF0ZS4KKyAgICAgKiBAcGFyYW0gZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lIE5hbWUgb2YgdGhlIHRyYXZlcnNhbCBzb3VyY2UgdmFyaWFibGUgKGRlZmF1bHQ6ICdnJykuCisgICAgICogQHBhcmFtIHRyYW5zbGF0b3JPclZpc2l0b3IgQSBUcmFuc2xhdG9yS2V5IChlLmcuICdKQVZBU0NSSVBUJyksIGEgY3VzdG9tCisgICAgICogICBUcmFuc2xhdGVWaXNpdG9yIGluc3RhbmNlLCBvciBvbWl0IGZvciB0aGUgZGVmYXVsdCBKYXZhU2NyaXB0IHRyYW5zbGF0b3IuCisgICAgICovCisgICAgc3RhdGljIHRyYW5zbGF0ZSgKKyAgICAgICAgcXVlcnk6IHN0cmluZywKKyAgICAgICAgZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lPzogc3RyaW5nLAorICAgICAgICB0cmFuc2xhdG9yT3JWaXNpdG9yPzogVHJhbnNsYXRvcktleSB8IFRyYW5zbGF0ZVZpc2l0b3IsCisgICAgKTogVHJhbnNsYXRpb24geworICAgICAgICBjb25zdCBzb3VyY2VOYW1lID0gZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lID8/ICdnJzsKKworICAgICAgICBsZXQgdmlzaXRvcjogVHJhbnNsYXRlVmlzaXRvcjsKKyAgICAgICAgaWYgKHRyYW5zbGF0b3JPclZpc2l0b3IgPT0gbnVsbCkgeworICAgICAgICAgICAgdmlzaXRvciA9IG5ldyBKYXZhc2NyaXB0VHJhbnNsYXRlVmlzaXRvcihzb3VyY2VOYW1lKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdHJhbnNsYXRvck9yVmlzaXRvciA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgICAgIHZpc2l0b3IgPSBUcmFuc2xhdG9yW3RyYW5zbGF0b3JPclZpc2l0b3JdKHNvdXJjZU5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmlzaXRvciA9IHRyYW5zbGF0b3JPclZpc2l0b3I7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBjaGFycyA9IENoYXJTdHJlYW0uZnJvbVN0cmluZyhxdWVyeSk7CisgICAgICAgIGNvbnN0IGxleGVyID0gbmV3IEdyZW1saW5MZXhlcihjaGFycyk7CisgICAgICAgIGxleGVyLnJlbW92ZUVycm9yTGlzdGVuZXJzKCk7CisgICAgICAgIGxleGVyLmFkZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7CisKKyAgICAgICAgY29uc3QgdG9rZW5zID0gbmV3IENvbW1vblRva2VuU3RyZWFtKGxleGVyKTsKKyAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IEdyZW1saW5QYXJzZXIodG9rZW5zKTsKKyAgICAgICAgLy8gU0xMIG1vZGUgaXMgZmFzdGVyOyBmYWxsIGJhY2sgdG8gTEwgb24gcGFyc2UgZmFpbHVyZSAobWlycm9ycyBKYXZhIGltcGwpCisgICAgICAgIHBhcnNlci5pbnRlcnByZXRlci5wcmVkaWN0aW9uTW9kZSA9IFByZWRpY3Rpb25Nb2RlLlNMTDsKKyAgICAgICAgcGFyc2VyLnJlbW92ZUVycm9yTGlzdGVuZXJzKCk7CisgICAgICAgIHBhcnNlci5hZGRFcnJvckxpc3RlbmVyKGVycm9yTGlzdGVuZXIpOworCisgICAgICAgIGxldCBxdWVyeUNvbnRleHQ6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlci5xdWVyeUxpc3Q+OworICAgICAgICB0cnkgeworICAgICAgICAgICAgcXVlcnlDb250ZXh0ID0gcGFyc2VyLnF1ZXJ5TGlzdCgpOworICAgICAgICB9IGNhdGNoIChfZXgpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdG9rZW5zLnNlZWsoMCk7CisgICAgICAgICAgICAgICAgbGV4ZXIucmVzZXQoKTsKKyAgICAgICAgICAgICAgICBwYXJzZXIucmVzZXQoKTsKKyAgICAgICAgICAgICAgICBwYXJzZXIuaW50ZXJwcmV0ZXIucHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZS5MTDsKKyAgICAgICAgICAgICAgICBxdWVyeUNvbnRleHQgPSBwYXJzZXIucXVlcnlMaXN0KCk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRyYW5zbGF0b3JFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gaW50ZXJwcmV0IEdyZW1saW4gcXVlcnk6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpfWAKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmlzaXRvci52aXNpdChxdWVyeUNvbnRleHQpOworCisgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRpb24ocXVlcnksIHZpc2l0b3IuZ2V0VHJhbnNsYXRlZCgpLCB2aXNpdG9yLmdldFBhcmFtZXRlcnMoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvci50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0ZVZpc2l0b3IudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1ODM3NwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyb292eVRyYW5zbGF0ZVZpc2l0b3IudHMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBDb250ZXh0IHBhcmFtZXRlcnMgYXJlIHR5cGVkIGFzIGBhbnlgIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCBncmFtbWFyIGZpbGVzCisvLyByZXF1aXJlIGFjY2VwdGluZyBhcmJpdHJhcnkgY29udGV4dCB0eXBlcyBhdCBydW50aW1lLgorCitpbXBvcnQgVHJhbnNsYXRlVmlzaXRvciBmcm9tICcuL1RyYW5zbGF0ZVZpc2l0b3IuanMnOworCisvKioKKyAqIENvbnZlcnRzIGEgR3JlbWxpbiB0cmF2ZXJzYWwgc3RyaW5nIGludG8gYSBHcm9vdnkgc291cmNlIGNvZGUgcmVwcmVzZW50YXRpb24uCisgKiBNaXJyb3JzIHRoZSBKYXZhIEdyb292eVRyYW5zbGF0ZVZpc2l0b3IuCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb292eVRyYW5zbGF0ZVZpc2l0b3IgZXh0ZW5kcyBUcmFuc2xhdGVWaXNpdG9yIHsKKworICAgIGNvbnN0cnVjdG9yKGdyYXBoVHJhdmVyc2FsU291cmNlTmFtZTogc3RyaW5nID0gJ2cnKSB7CisgICAgICAgIHN1cGVyKGdyYXBoVHJhdmVyc2FsU291cmNlTmFtZSk7CisgICAgfQorCisgICAgdmlzaXRJbnRlZ2VyTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBpbnRlZ2VyTGl0ZXJhbDogc3RyaW5nID0gY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGludGVnZXJMaXRlcmFsW2ludGVnZXJMaXRlcmFsLmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmICghL1thLXpdLy50ZXN0KGxhc3RDaGFyKSkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IG51bSA9IGludGVnZXJMaXRlcmFsLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgc3dpdGNoIChsYXN0Q2hhcikgeworICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoYnl0ZSknKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKHNob3J0KScpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgLy8gR3Jvb3Z5IEJpZ0ludGVnZXIgdXNlcyB0aGUgJ2cnIHN1ZmZpeAorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnZycpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBpIGFuZCBsIHN1ZmZpeGVzIGFuZCBhbnl0aGluZyBlbHNlIGtlcHQgYXMtaXMKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goaW50ZWdlckxpdGVyYWwpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRGbG9hdExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5pbmZMaXRlcmFsKCkgIT0gbnVsbCkgeyB0aGlzLnZpc2l0KGN0eC5pbmZMaXRlcmFsKCkpOyByZXR1cm47IH0KKyAgICAgICAgaWYgKGN0eC5uYW5MaXRlcmFsKCkgIT0gbnVsbCkgeyB0aGlzLnZpc2l0KGN0eC5uYW5MaXRlcmFsKCkpOyByZXR1cm47IH0KKworICAgICAgICBjb25zdCBmbG9hdExpdGVyYWw6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgY29uc3QgbGFzdENoYXIgPSBmbG9hdExpdGVyYWxbZmxvYXRMaXRlcmFsLmxlbmd0aCAtIDFdOworCisgICAgICAgIGlmICghL1thLXpdLy50ZXN0KGxhc3RDaGFyKSkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGZsb2F0TGl0ZXJhbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBudW0gPSBmbG9hdExpdGVyYWwuc2xpY2UoMCwgLTEpOworICAgICAgICBzd2l0Y2ggKGxhc3RDaGFyKSB7CisgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIC8vIGtlZXAgZi9kIHN1ZmZpeCBhcy1pcworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChmbG9hdExpdGVyYWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgLy8gR3Jvb3Z5IEJpZ0RlY2ltYWw6IGlmIG5vIGRlY2ltYWwgcG9pbnQgdXNlIG5ldyBCaWdEZWNpbWFsKE5MKSwgZWxzZSBqdXN0IHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICBpZiAoIWZsb2F0TGl0ZXJhbC5pbmNsdWRlcygnLicpKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnbmV3IEJpZ0RlY2ltYWwoJyk7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ0wpJyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goZmxvYXRMaXRlcmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0SW5mTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LlNpZ25lZEluZkxpdGVyYWwoKSAhPSBudWxsICYmIGN0eC5TaWduZWRJbmZMaXRlcmFsKCkuZ2V0VGV4dCgpID09PSAnLUluZmluaXR5JykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnRG91YmxlLlBPU0lUSVZFX0lORklOSVRZJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdFV1aWRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguc3RyaW5nTGl0ZXJhbCgpID09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnVVVJRC5yYW5kb21VVUlEKCknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ1VVSUQuZnJvbVN0cmluZygnKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5zdHJpbmdMaXRlcmFsKCkuZ2V0VGV4dCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXROdWxsTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LnBhcmVudD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdHZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudENvbnRleHQnKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ251bGwgYXMgTWFwJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNTZXRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnWycpOworICAgICAgICBjb25zdCBsaXRlcmFsczogYW55W10gPSBjdHguZ2VuZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXRlcmFscy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy52aXNpdChsaXRlcmFsc1tpXSk7CisgICAgICAgICAgICBpZiAoaSA8IGxpdGVyYWxzLmxlbmd0aCAtIDEpIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ10gYXMgU2V0Jyk7CisgICAgfQorCisgICAgdmlzaXRTdHJpbmdMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIC8vIFByZXNlcnZlIG9yaWdpbmFsIHF1b3RlIHN0eWxlIGFuZCBlc2NhcGUgR3Jvb3Z5IEdTdHJpbmcgaW50ZXJwb2xhdGlvbgorICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKS5yZXBsYWNlKC9cJC9nLCAoKSA9PiAnXFwkJykpOworICAgIH0KKworICAgIHZpc2l0U3RyaW5nTnVsbGFibGVMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguZ2V0VGV4dCgpID09PSAnbnVsbCcpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnbnVsbCcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgcXVvdGUgc3R5bGUgYW5kIGVzY2FwZSBHcm9vdnkgR1N0cmluZyBpbnRlcnBvbGF0aW9uCisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKS5yZXBsYWNlKC9cJC9nLCAoKSA9PiAnXFwkJykpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRNYXBLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5MUEFSRU4oKSAhPSBudWxsICYmIGN0eC5SUEFSRU4oKSAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBHcm9vdnkgbWFwIHN5bnRheDogZXhwcmVzc2lvbiBrZXlzIG11c3QgYmUgcGFyZW50aGVzaXplZCDigJQgcHJlc2VydmUgdGhlIHBhcmVucworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZXRDaGlsZCgxKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0TmFrZWRLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgLy8gR3Jvb3Z5IG1hcC9jb25maWcgc3ludGF4IHVzZXMgdW5xdW90ZWQgaWRlbnRpZmllciBrZXlzCisgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICB9CisKKyAgICB2aXNpdEtleXdvcmQoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qga2V5d29yZDogc3RyaW5nID0gY3R4LmdldFRleHQoKTsKKyAgICAgICAgY29uc3QgcGFyZW50TmFtZSA9IGN0eC5wYXJlbnQ/LmNvbnN0cnVjdG9yPy5uYW1lID8/ICcnOworICAgICAgICBpZiAocGFyZW50TmFtZSA9PT0gJ01hcEtleUNvbnRleHQnIHx8IHBhcmVudE5hbWUgPT09ICdDb25maWd1cmF0aW9uQ29udGV4dCcpIHsKKyAgICAgICAgICAgIC8vIEdyb292eSB1c2VzIHVucXVvdGVkIGtleXMKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChrZXl3b3JkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChrZXl3b3JkKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnICcpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTdHJhdGVneShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LmdldENoaWxkQ291bnQoKSA9PT0gMSkgeworICAgICAgICAgICAgLy8gTm8tYXJnIHN0cmF0ZWd5OiBvdXRwdXQgbmFtZSBhcy1pcyAobm8gLmluc3RhbmNlKCkpCisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBFbnN1cmUgJ25ldycga2V5d29yZCBpcyBwcmVzZW50CisgICAgICAgICAgICBpZiAoY3R4LmdldENoaWxkKDApLmdldFRleHQoKSAhPT0gJ25ldycpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ25ldyAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihjdHgpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTb3VyY2VTcGF3bk1ldGhvZF9pbmplY3QoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5oYW5kbGVJbmplY3QoY3R4KTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9pbmplY3QoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5oYW5kbGVJbmplY3QoY3R4KTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9oYXNMYWJlbF9TdHJpbmdfU3RyaW5nKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguZ2V0Q2hpbGRDb3VudCgpID4gNCAmJiBjdHguZ2V0Q2hpbGQoMikuZ2V0VGV4dCgpID09PSAnbnVsbCcpIHsKKyAgICAgICAgICAgIGNvbnN0IHZhckFyZ3MgPSBjdHguZ2V0Q2hpbGQoNCk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldENoaWxkKDApLmdldFRleHQoKSk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJygoU3RyaW5nKSBudWxsLCAnKTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFyQXJncy5nZXRDaGlsZENvdW50KCk7IGkgKz0gMikgeworICAgICAgICAgICAgICAgIGlmICh2YXJBcmdzLmdldENoaWxkKGkpLmdldFRleHQoKSA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKFN0cmluZykgbnVsbCcpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaXQodmFyQXJncy5nZXRDaGlsZChpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpIDwgdmFyQXJncy5nZXRDaGlsZENvdW50KCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4oY3R4KTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE1ldGhvZF9vcHRpb25fTWVyZ2VfTWFwKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnb3B0aW9uKCcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC50cmF2ZXJzYWxNZXJnZSgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICB0aGlzLnRyeUNhc3RNYXBOdWxsYWJsZUFyZ3VtZW50KGN0eC5nZW5lcmljTWFwTnVsbGFibGVBcmd1bWVudCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxNZXRob2RfbWVyZ2VWX01hcChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJ21lcmdlVignKTsKKyAgICAgICAgdGhpcy50cnlDYXN0TWFwTnVsbGFibGVBcmd1bWVudChjdHguZ2VuZXJpY01hcE51bGxhYmxlQXJndW1lbnQoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsU291cmNlU3Bhd25NZXRob2RfbWVyZ2VWX01hcChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJ21lcmdlVignKTsKKyAgICAgICAgdGhpcy50cnlDYXN0TWFwTnVsbGFibGVBcmd1bWVudChjdHguZ2VuZXJpY01hcE51bGxhYmxlQXJndW1lbnQoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsTWV0aG9kX21lcmdlRV9NYXAoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdtZXJnZUUoJyk7CisgICAgICAgIHRoaXMudHJ5Q2FzdE1hcE51bGxhYmxlQXJndW1lbnQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX21lcmdlRV9NYXAoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdtZXJnZUUoJyk7CisgICAgICAgIHRoaXMudHJ5Q2FzdE1hcE51bGxhYmxlQXJndW1lbnQoY3R4LmdlbmVyaWNNYXBOdWxsYWJsZUFyZ3VtZW50KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHRyeUNhc3RNYXBOdWxsYWJsZUFyZ3VtZW50KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IG51bGxhYmxlTGl0ID0gY3R4Py5nZW5lcmljTWFwTnVsbGFibGVMaXRlcmFsPy4oKTsKKyAgICAgICAgaWYgKG51bGxhYmxlTGl0ICE9IG51bGwgJiYgbnVsbGFibGVMaXQ/Lm51bGxMaXRlcmFsPy4oKSAhPSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyhNYXApIG51bGwnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGluamVjdCB3aXRoIHNlY29uZCBgbnVsbGAgYXJndW1lbnQgbGlrZSBnLmluamVjdCgxLCBudWxsKS4KKyAgICAgKiBpbmplY3QoKSBpcyBhbWJpZ3VvdXMgaW4gR3Jvb3Z5IHdpdGggamRrIGV4dGVuc2lvbiBpbmplY3QoT2JqZWN0LCBDbG9zdXJlKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGhhbmRsZUluamVjdChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LmdldENoaWxkQ291bnQoKSA+IDMpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoaWxkMiA9IGN0eC5nZXRDaGlsZCgyKTsKKyAgICAgICAgICAgIGlmIChjaGlsZDI/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnR2VuZXJpY0xpdGVyYWxWYXJhcmdzQ29udGV4dCcpIHsKKyAgICAgICAgICAgICAgICBjb25zdCB2YXJBcmdzID0gY2hpbGQyOworICAgICAgICAgICAgICAgIGlmICh2YXJBcmdzLmdldENoaWxkQ291bnQoKSA9PT0gMSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZDAgPSB2YXJBcmdzLmdldENoaWxkKDApOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQwPy5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0dlbmVyaWNMaXRlcmFsRXhwckNvbnRleHQnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmplY3RBcmdzID0gY2hpbGQwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdEFyZ3MuZ2V0Q2hpbGRDb3VudCgpID4gMiAmJiBpbmplY3RBcmdzLmdldENoaWxkKDIpLmdldFRleHQoKSA9PT0gJ251bGwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5qZWN0QXJncy5nZXRDaGlsZENvdW50KCk7IGkgKz0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoT2JqZWN0KSBudWxsJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2l0KGluamVjdEFyZ3MuZ2V0Q2hpbGQoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaW5qZWN0QXJncy5nZXRDaGlsZENvdW50KCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihjdHgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0phdmFUcmFuc2xhdGVWaXNpdG9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YVRyYW5zbGF0ZVZpc2l0b3IudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdjZjY3MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0phdmFUcmFuc2xhdGVWaXNpdG9yLnRzCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gQ29udGV4dCBwYXJhbWV0ZXJzIGFyZSB0eXBlZCBhcyBgYW55YCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgZ3JhbW1hciBmaWxlcworLy8gcmVxdWlyZSBhY2NlcHRpbmcgYXJiaXRyYXJ5IGNvbnRleHQgdHlwZXMgYXQgcnVudGltZS4KKworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JFeGNlcHRpb24gfSBmcm9tICcuL1RyYW5zbGF0b3JFeGNlcHRpb24uanMnOworCisvKioKKyAqIENvbnZlcnRzIGEgR3JlbWxpbiB0cmF2ZXJzYWwgc3RyaW5nIGludG8gYSBKYXZhIHNvdXJjZSBjb2RlIHJlcHJlc2VudGF0aW9uLgorICogTWlycm9ycyB0aGUgSmF2YSBKYXZhVHJhbnNsYXRlVmlzaXRvci4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVRyYW5zbGF0ZVZpc2l0b3IgZXh0ZW5kcyBUcmFuc2xhdGVWaXNpdG9yIHsKKworICAgIGNvbnN0cnVjdG9yKGdyYXBoVHJhdmVyc2FsU291cmNlTmFtZTogc3RyaW5nID0gJ2cnKSB7CisgICAgICAgIHN1cGVyKGdyYXBoVHJhdmVyc2FsU291cmNlTmFtZSk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTdHJhdGVneShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LmdldENoaWxkQ291bnQoKSA9PT0gMSkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRUZXh0KCkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcuaW5zdGFuY2UoKScpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy52aXNpdChjdHguY2xhc3NUeXBlKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJy5idWlsZCgpJyk7CisKKyAgICAgICAgY29uc3QgY29uZmlnczogYW55W10gPSBjdHguY29uZmlndXJhdGlvbigpOworICAgICAgICAvLyBtaXJyb3JzIEphdmE6IGN0eC5nZXRDaGlsZCgxKSBpcyAiT3B0aW9uc1N0cmF0ZWd5IiBvbmx5IHdoZW4gZm9ybSBpcyBgbmV3IE9wdGlvbnNTdHJhdGVneSguLi4pYAorICAgICAgICBjb25zdCBpc05ld09wdGlvbnNTdHJhdGVneTogYm9vbGVhbiA9IGNvbmZpZ3MubGVuZ3RoID4gMCAmJgorICAgICAgICAgICAgY3R4LmdldENoaWxkKDEpPy5nZXRUZXh0KCkgPT09ICdPcHRpb25zU3RyYXRlZ3knOworCisgICAgICAgIGlmIChpc05ld09wdGlvbnNTdHJhdGVneSkgeworICAgICAgICAgICAgZm9yIChjb25zdCBjZmcgb2YgY29uZmlncykgeworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnLndpdGgoIicpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChjZmcuZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyIsICcpOworICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoY2ZnLmdldENoaWxkKDIpKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgY2ZnIG9mIGNvbmZpZ3MpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJy4nKTsKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2l0KGNmZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnNiLnB1c2goJy5jcmVhdGUoKScpOworICAgIH0KKworICAgIHZpc2l0Q29uZmlndXJhdGlvbihjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldENoaWxkKDApLmdldFRleHQoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZXRDaGlsZCgyKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0Q2xhc3NUeXBlKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBjdHgucGFyZW50Py5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyAnJzsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRUZXh0KCkpOworICAgICAgICBpZiAocGFyZW50TmFtZSA9PT0gJ1RyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2Rfd2l0aG91dFN0cmF0ZWdpZXNDb250ZXh0JyB8fAorICAgICAgICAgICAgcGFyZW50TmFtZSA9PT0gJ0NsYXNzVHlwZUV4cHJDb250ZXh0JykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcuY2xhc3MnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0R2VuZXJpY01hcExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAnKTsKKyAgICAgICAgY29uc3QgZW50cmllczogYW55W10gPSBjdHgubWFwRW50cnkoKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGVudHJpZXNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBlbnRyaWVzLmxlbmd0aCAtIDEpIHRoaXMuc2IucHVzaCgnICcpOworICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnIH19Jyk7CisgICAgfQorCisgICAgdmlzaXRNYXBFbnRyeShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJ3B1dCgnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHgubWFwS2V5KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyk7Jyk7CisgICAgfQorCisgICAgdmlzaXRNYXBLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qga2V5SW5kZXggPSAoY3R4LkxQQVJFTigpICE9IG51bGwgJiYgY3R4LlJQQVJFTigpICE9IG51bGwpID8gMSA6IDA7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKGtleUluZGV4KSk7CisgICAgfQorCisgICAgdmlzaXREYXRlTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBkdFN0cmluZzogc3RyaW5nID0gY3R4LmdldENoaWxkKDIpLmdldFRleHQoKTsKKyAgICAgICAgY29uc3QgaW5uZXIgPSBUcmFuc2xhdGVWaXNpdG9yLnJlbW92ZUZpcnN0QW5kTGFzdENoYXJhY3RlcnMoZHRTdHJpbmcpOworICAgICAgICB0aGlzLnNiLnB1c2goJ09mZnNldERhdGVUaW1lLnBhcnNlKCInKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGZvcm1hdERhdGV0aW1lSmF2YVN0eWxlKGlubmVyKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnIiknKTsKKyAgICB9CisKKyAgICB2aXNpdE5hbkxpdGVyYWwoX2N0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnRG91YmxlLk5hTicpOworICAgIH0KKworICAgIHZpc2l0SW5mTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LlNpZ25lZEluZkxpdGVyYWwoKSAhPSBudWxsICYmIGN0eC5TaWduZWRJbmZMaXRlcmFsKCkuZ2V0VGV4dCgpID09PSAnLUluZmluaXR5JykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnRG91YmxlLlBPU0lUSVZFX0lORklOSVRZJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdEludGVnZXJMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IGludGVnZXJMaXRlcmFsOiBzdHJpbmcgPSBjdHguZ2V0VGV4dCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIGNvbnN0IGxhc3RDaGFyID0gaW50ZWdlckxpdGVyYWxbaW50ZWdlckxpdGVyYWwubGVuZ3RoIC0gMV07CisKKyAgICAgICAgaWYgKCEvW2Etel0vLnRlc3QobGFzdENoYXIpKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goaW50ZWdlckxpdGVyYWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgbnVtID0gaW50ZWdlckxpdGVyYWwuc2xpY2UoMCwgLTEpOworICAgICAgICBzd2l0Y2ggKGxhc3RDaGFyKSB7CisgICAgICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ25ldyBCeXRlKCcpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgU2hvcnQoJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChpbnRlZ2VyTGl0ZXJhbCk7IC8vIGtlZXAgdGhlICdsJyBzdWZmaXgKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnbmV3IEJpZ0ludGVnZXIoIicpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnIiknKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0RmxvYXRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguaW5mTGl0ZXJhbCgpICE9IG51bGwpIHsgdGhpcy52aXNpdChjdHguaW5mTGl0ZXJhbCgpKTsgcmV0dXJuOyB9CisgICAgICAgIGlmIChjdHgubmFuTGl0ZXJhbCgpICE9IG51bGwpIHsgdGhpcy52aXNpdChjdHgubmFuTGl0ZXJhbCgpKTsgcmV0dXJuOyB9CisKKyAgICAgICAgY29uc3QgZmxvYXRMaXRlcmFsOiBzdHJpbmcgPSBjdHguZ2V0VGV4dCgpLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIGNvbnN0IGxhc3RDaGFyID0gZmxvYXRMaXRlcmFsW2Zsb2F0TGl0ZXJhbC5sZW5ndGggLSAxXTsKKworICAgICAgICBpZiAoIS9bYS16XS8udGVzdChsYXN0Q2hhcikpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChmbG9hdExpdGVyYWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgbnVtID0gZmxvYXRMaXRlcmFsLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgc3dpdGNoIChsYXN0Q2hhcikgeworICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goZmxvYXRMaXRlcmFsKTsgLy8ga2VlcCBmL2Qgc3VmZml4CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ25ldyBCaWdEZWNpbWFsKCInKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyIpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChmbG9hdExpdGVyYWwpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRVdWlkTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LnN0cmluZ0xpdGVyYWwoKSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ1VVSUQucmFuZG9tVVVJRCgpJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zYi5wdXNoKCdVVUlELmZyb21TdHJpbmcoJyk7CisgICAgICAgIHRoaXMuc2IucHVzaChjdHguc3RyaW5nTGl0ZXJhbCgpLmdldFRleHQoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY1JhbmdlTGl0ZXJhbChfY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhyb3cgbmV3IFRyYW5zbGF0b3JFeGNlcHRpb24oJ0phdmEgZG9lcyBub3Qgc3VwcG9ydCByYW5nZSBsaXRlcmFscycpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY1NldExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgSGFzaFNldDxPYmplY3Q+KCkge3sgJyk7CisgICAgICAgIGNvbnN0IGxpdGVyYWxzOiBhbnlbXSA9IGN0eC5nZW5lcmljTGl0ZXJhbCgpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpdGVyYWxzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ2FkZCgnKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQobGl0ZXJhbHNbaV0pOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpOycpOworICAgICAgICAgICAgaWYgKGkgPCBsaXRlcmFscy5sZW5ndGggLSAxKSB0aGlzLnNiLnB1c2goJyAnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJyB9fScpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0NvbGxlY3Rpb25MaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgJyk7CisgICAgICAgIGNvbnN0IGxpdGVyYWxzOiBhbnlbXSA9IGN0eC5nZW5lcmljTGl0ZXJhbCgpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpdGVyYWxzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ2FkZCgnKTsKKyAgICAgICAgICAgIHRoaXMudmlzaXQobGl0ZXJhbHNbaV0pOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpOycpOworICAgICAgICAgICAgaWYgKGkgPCBsaXRlcmFscy5sZW5ndGggLSAxKSB0aGlzLnNiLnB1c2goJyAnKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJyB9fScpOworICAgIH0KK30KKworLy8g4pSA4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACisKKy8qKgorICogRm9ybWF0cyBhIGRhdGV0aW1lIHN0cmluZyB0aGUgc2FtZSB3YXkgSmF2YSdzIE9mZnNldERhdGVUaW1lLnRvU3RyaW5nKCkgZG9lczoKKyAqIC0gVHJ1bmNhdGVzIHNlY29uZHMgaWYgYm90aCBzZWNvbmRzIGFuZCBtaWxsaXNlY29uZHMgYXJlIDAKKyAqIC0gVXNlcyAnWicgZm9yIFVUQyBvZmZzZXQKKyAqLworZnVuY3Rpb24gZm9ybWF0RGF0ZXRpbWVKYXZhU3R5bGUoczogc3RyaW5nKTogc3RyaW5nIHsKKyAgICBjb25zdCBkID0gbmV3IERhdGUocyk7CisgICAgaWYgKGlzTmFOKGQuZ2V0VGltZSgpKSkgeworICAgICAgICB0aHJvdyBuZXcgVHJhbnNsYXRvckV4Y2VwdGlvbihgSW52YWxpZCBkYXRldGltZTogJHtzfWApOworICAgIH0KKyAgICBjb25zdCB5ZWFyID0gZC5nZXRVVENGdWxsWWVhcigpLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwgJzAnKTsKKyAgICBjb25zdCBtb250aCA9IChkLmdldFVUQ01vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CisgICAgY29uc3QgZGF5ID0gZC5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgIGNvbnN0IGhvdXJzID0gZC5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsKKyAgICBjb25zdCBtaW51dGVzID0gZC5nZXRVVENNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgIGNvbnN0IHNlY29uZHMgPSBkLmdldFVUQ1NlY29uZHMoKTsKKyAgICBjb25zdCBtaWxsaXMgPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpOworCisgICAgbGV0IHJlc3VsdCA9IGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fVQke2hvdXJzfToke21pbnV0ZXN9YDsKKyAgICBpZiAoc2Vjb25kcyAhPT0gMCB8fCBtaWxsaXMgIT09IDApIHsKKyAgICAgICAgcmVzdWx0ICs9ICc6JyArIHNlY29uZHMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgICAgICBpZiAobWlsbGlzICE9PSAwKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gJy4nICsgbWlsbGlzLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgJzAnKS5yZXBsYWNlKC8wKyQvLCAnJyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ICs9ICdaJzsKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YXNjcmlwdFRyYW5zbGF0ZVZpc2l0b3IudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9KYXZhc2NyaXB0VHJhbnNsYXRlVmlzaXRvci50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDFmYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YXNjcmlwdFRyYW5zbGF0ZVZpc2l0b3IudHMKQEAgLTAsMCArMSwyMzIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyBDb250ZXh0IHBhcmFtZXRlcnMgYXJlIHR5cGVkIGFzIGBhbnlgIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCBncmFtbWFyIGZpbGVzCisvLyB1c2UgQHRzLW5vY2hlY2sgKHRoZSBzdGFuZGFyZCBhbnRscjQgbnBtIHBhY2thZ2UgZG9lc24ndCBmdWxseSByZS1leHBvcnQKKy8vIGl0cyBUeXBlU2NyaXB0IHR5cGVzIGZyb20gdGhlIG1haW4gbW9kdWxlIGVudHJ5IHBvaW50KS4KKworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JFeGNlcHRpb24gfSBmcm9tICcuL1RyYW5zbGF0b3JFeGNlcHRpb24uanMnOworCisvKioKKyAqIENvbnZlcnRzIGEgR3JlbWxpbiB0cmF2ZXJzYWwgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IHNvdXJjZSBjb2RlIHJlcHJlc2VudGF0aW9uLgorICogQXNzdW1lcyB1c2Ugb2YgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvdXVpZCBsaWJyYXJ5IGZvciBVVUlEIGhhbmRsaW5nLgorICovCitleHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhc2NyaXB0VHJhbnNsYXRlVmlzaXRvciBleHRlbmRzIFRyYW5zbGF0ZVZpc2l0b3IgeworCisgICAgY29uc3RydWN0b3IoZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lOiBzdHJpbmcgPSAnZycpIHsKKyAgICAgICAgc3VwZXIoZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHJvY2Vzc0dyZW1saW5TeW1ib2woc3RlcDogc3RyaW5nKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIFN5bWJvbEhlbHBlci50b0phdmFzY3JpcHQoc3RlcCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldENhcmRpbmFsaXR5RnVuY3Rpb25DbGFzcygpOiBzdHJpbmcgeworICAgICAgICByZXR1cm4gJ0NhcmRpbmFsaXR5VmFsdWUnOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsU3RyYXRlZ3koY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgJyk7CisKKyAgICAgICAgaWYgKGN0eC5nZXRDaGlsZENvdW50KCkgPT09IDEpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCk7CisgICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBmaXJzdFRleHQgPT09ICduZXcnID8gY3R4LmdldENoaWxkKDEpLmdldFRleHQoKSA6IGZpcnN0VGV4dDsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChjbGFzc05hbWUpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoeycpOworCisgICAgICAgICAgICBjb25zdCBjb25maWdzOiBhbnlbXSA9IGN0eC5jb25maWd1cmF0aW9uKCk7CisgICAgICAgICAgICBmb3IgKGxldCBpeCA9IDA7IGl4IDwgY29uZmlncy5sZW5ndGg7IGl4KyspIHsKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2l0KGNvbmZpZ3NbaXhdKTsKKyAgICAgICAgICAgICAgICBpZiAoaXggPCBjb25maWdzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCd9KScpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRDb25maWd1cmF0aW9uKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IGtleVRleHQ6IHN0cmluZyA9IGN0eC5rZXl3b3JkKCkgIT0gbnVsbCA/IGN0eC5rZXl3b3JkKCkuZ2V0VGV4dCgpIDogY3R4Lm5ha2VkS2V5KCkuZ2V0VGV4dCgpOworICAgICAgICB0aGlzLnNiLnB1c2goU3ltYm9sSGVscGVyLnRvSmF2YXNjcmlwdChrZXlUZXh0KSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnOiAnKTsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2VuZXJpY0FyZ3VtZW50KCkpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsR1R5cGUoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gY3R4LmdldFRleHQoKS5zcGxpdCgnLicpOworICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbChwYXJ0c1swXSkpOworICAgICAgICB0aGlzLnNiLnB1c2goJy4nKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKHRoaXMucHJvY2Vzc0dyZW1saW5TeW1ib2wocGFydHNbMV0udG9Mb3dlckNhc2UoKSkpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY01hcExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgTWFwKFsnKTsKKyAgICAgICAgY29uc3QgZW50cmllczogYW55W10gPSBjdHgubWFwRW50cnkoKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGVudHJpZXNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBlbnRyaWVzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zYi5wdXNoKCddKScpOworICAgIH0KKworICAgIHZpc2l0TWFwRW50cnkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdbJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4Lm1hcEtleSgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTGl0ZXJhbCgpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCddJyk7CisgICAgfQorCisgICAgdmlzaXRNYXBLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qga2V5SW5kZXggPSAoY3R4LkxQQVJFTigpICE9IG51bGwgJiYgY3R4LlJQQVJFTigpICE9IG51bGwpID8gMSA6IDA7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKGtleUluZGV4KSk7CisgICAgfQorCisgICAgdmlzaXREYXRlTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICAvLyBjaGlsZCBhdCBpbmRleCAyIGlzIHRoZSBzdHJpbmcgYXJndW1lbnQgdG8gZGF0ZXRpbWUoKSDigJQgY29tZXMgZW5jbG9zZWQgaW4gcXVvdGVzCisgICAgICAgIGNvbnN0IGR0U3RyaW5nOiBzdHJpbmcgPSBjdHguZ2V0Q2hpbGQoMikuZ2V0VGV4dCgpOworICAgICAgICBjb25zdCBpbm5lciA9IFRyYW5zbGF0ZVZpc2l0b3IucmVtb3ZlRmlyc3RBbmRMYXN0Q2hhcmFjdGVycyhkdFN0cmluZyk7CisgICAgICAgIHRoaXMuc2IucHVzaCgibmV3IERhdGUoJyIpOworICAgICAgICB0aGlzLnNiLnB1c2goZm9ybWF0RGF0ZXRpbWVKYXZhU3R5bGUoaW5uZXIpKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCInKSIpOworICAgIH0KKworICAgIHZpc2l0TmFuTGl0ZXJhbChfY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdOdW1iZXIuTmFOJyk7CisgICAgfQorCisgICAgdmlzaXRJbmZMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguU2lnbmVkSW5mTGl0ZXJhbCgpICE9IG51bGwgJiYgY3R4LlNpZ25lZEluZkxpdGVyYWwoKS5nZXRUZXh0KCkgPT09ICctSW5maW5pdHknKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ051bWJlci5ORUdBVElWRV9JTkZJTklUWScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFknKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0SW50ZWdlckxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgaW50ZWdlckxpdGVyYWw6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgY29uc3QgbGFzdENoYXIgPSBpbnRlZ2VyTGl0ZXJhbFtpbnRlZ2VyTGl0ZXJhbC5sZW5ndGggLSAxXTsKKyAgICAgICAgaWYgKC9bYS16XS8udGVzdChsYXN0Q2hhcikpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChpbnRlZ2VyTGl0ZXJhbC5zbGljZSgwLCAtMSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0RmxvYXRMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguaW5mTGl0ZXJhbCgpICE9IG51bGwpIHsgdGhpcy52aXNpdChjdHguaW5mTGl0ZXJhbCgpKTsgcmV0dXJuOyB9CisgICAgICAgIGlmIChjdHgubmFuTGl0ZXJhbCgpICE9IG51bGwpIHsgdGhpcy52aXNpdChjdHgubmFuTGl0ZXJhbCgpKTsgcmV0dXJuOyB9CisgICAgICAgIGNvbnN0IGZsb2F0TGl0ZXJhbDogc3RyaW5nID0gY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGZsb2F0TGl0ZXJhbFtmbG9hdExpdGVyYWwubGVuZ3RoIC0gMV07CisgICAgICAgIGlmICgvW2Etel0vLnRlc3QobGFzdENoYXIpKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goZmxvYXRMaXRlcmFsLnNsaWNlKDAsIC0xKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2goZmxvYXRMaXRlcmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0R2VuZXJpY1JhbmdlTGl0ZXJhbChfY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhyb3cgbmV3IFRyYW5zbGF0b3JFeGNlcHRpb24oJ0phdmFzY3JpcHQgZG9lcyBub3Qgc3VwcG9ydCByYW5nZSBsaXRlcmFscycpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY1NldExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcgU2V0KFsnKTsKKyAgICAgICAgY29uc3QgbGl0ZXJhbHM6IGFueVtdID0gY3R4LmdlbmVyaWNMaXRlcmFsKCk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGl0ZXJhbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQobGl0ZXJhbHNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBsaXRlcmFscy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnXSknKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNDb2xsZWN0aW9uTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJ1snKTsKKyAgICAgICAgY29uc3QgbGl0ZXJhbHM6IGFueVtdID0gY3R4LmdlbmVyaWNMaXRlcmFsKCk7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGl0ZXJhbHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHRoaXMudmlzaXQobGl0ZXJhbHNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBsaXRlcmFscy5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2IucHVzaCgnXScpOworICAgIH0KKworICAgIHZpc2l0VXVpZExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5zdHJpbmdMaXRlcmFsKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCd1dWlkLnY0KCknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ3V1aWQucGFyc2UoJyk7CisgICAgICAgIHRoaXMudmlzaXRTdHJpbmdMaXRlcmFsKGN0eC5zdHJpbmdMaXRlcmFsKCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICB9Cit9CisKKy8qKgorICogRm9ybWF0cyBhIGRhdGV0aW1lIHN0cmluZyB0aGUgc2FtZSB3YXkgSmF2YSdzIE9mZnNldERhdGVUaW1lLnRvU3RyaW5nKCkgZG9lczoKKyAqIC0gVHJ1bmNhdGVzIHNlY29uZHMgaWYgYm90aCBzZWNvbmRzIGFuZCBtaWxsaXNlY29uZHMgYXJlIDAKKyAqIC0gVXNlcyAnWicgZm9yIFVUQyBvZmZzZXQKKyAqIC0gQXNzdW1lcyBVVEMgd2hlbiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkCisgKi8KK2Z1bmN0aW9uIGZvcm1hdERhdGV0aW1lSmF2YVN0eWxlKHM6IHN0cmluZyk6IHN0cmluZyB7CisgICAgY29uc3QgZCA9IG5ldyBEYXRlKHMpOworICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHsKKyAgICAgICAgdGhyb3cgbmV3IFRyYW5zbGF0b3JFeGNlcHRpb24oYEludmFsaWQgZGF0ZXRpbWU6ICR7c31gKTsKKyAgICB9CisgICAgY29uc3QgeWVhciA9IGQuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLnBhZFN0YXJ0KDQsICcwJyk7CisgICAgY29uc3QgbW9udGggPSAoZC5nZXRVVENNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgIGNvbnN0IGRheSA9IGQuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsKKyAgICBjb25zdCBob3VycyA9IGQuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CisgICAgY29uc3QgbWludXRlcyA9IGQuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsKKyAgICBjb25zdCBzZWNvbmRzID0gZC5nZXRVVENTZWNvbmRzKCk7CisgICAgY29uc3QgbWlsbGlzID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTsKKworICAgIGxldCByZXN1bHQgPSBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3Vyc306JHttaW51dGVzfWA7CisgICAgaWYgKHNlY29uZHMgIT09IDAgfHwgbWlsbGlzICE9PSAwKSB7CisgICAgICAgIHJlc3VsdCArPSAnOicgKyBzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsKKyAgICAgICAgaWYgKG1pbGxpcyAhPT0gMCkgeworICAgICAgICAgICAgcmVzdWx0ICs9ICcuJyArIG1pbGxpcy50b1N0cmluZygpLnBhZFN0YXJ0KDMsICcwJykucmVwbGFjZSgvMCskLywgJycpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdCArPSAnWic7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2xhc3MgU3ltYm9sSGVscGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT19KU19NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7CisgICAgICAgICdmcm9tJzogJ2Zyb21fJywKKyAgICAgICAgJ2luJzogJ2luXycsCisgICAgICAgICd3aXRoJzogJ3dpdGhfJywKKyAgICAgICAgJ2JpZ2RlY2ltYWwnOiAnYmlnRGVjaW1hbCcsCisgICAgICAgICdiaWdpbnQnOiAnYmlnSW50JywKKyAgICB9OworCisgICAgc3RhdGljIHRvSmF2YXNjcmlwdChzeW1ib2w6IHN0cmluZyk6IHN0cmluZyB7CisgICAgICAgIHJldHVybiBTeW1ib2xIZWxwZXIuVE9fSlNfTUFQW3N5bWJvbF0gPz8gc3ltYm9sOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1B5dGhvblRyYW5zbGF0ZVZpc2l0b3IudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdGVWaXNpdG9yLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGViNTQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9QeXRob25UcmFuc2xhdGVWaXNpdG9yLnRzCkBAIC0wLDAgKzEsMzIxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gQ29udGV4dCBwYXJhbWV0ZXJzIGFyZSB0eXBlZCBhcyBgYW55YCBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgZ3JhbW1hciBmaWxlcworLy8gcmVxdWlyZSBhY2NlcHRpbmcgYXJiaXRyYXJ5IGNvbnRleHQgdHlwZXMgYXQgcnVudGltZS4KKworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JFeGNlcHRpb24gfSBmcm9tICcuL1RyYW5zbGF0b3JFeGNlcHRpb24uanMnOworCisvKioKKyAqIENvbnZlcnRzIGEgR3JlbWxpbiB0cmF2ZXJzYWwgc3RyaW5nIGludG8gYSBQeXRob24gc291cmNlIGNvZGUgcmVwcmVzZW50YXRpb24uCisgKiBBc3N1bWVzIHVzZSBvZiB0aGUgYHV1aWRgIGFuZCBgZGF0ZXRpbWVgIHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlcy4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHl0aG9uVHJhbnNsYXRlVmlzaXRvciBleHRlbmRzIFRyYW5zbGF0ZVZpc2l0b3IgeworCisgICAgY29uc3RydWN0b3IoZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lOiBzdHJpbmcgPSAnZycpIHsKKyAgICAgICAgc3VwZXIoZ3JhcGhUcmF2ZXJzYWxTb3VyY2VOYW1lKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcHJvY2Vzc0dyZW1saW5TeW1ib2woc3RlcDogc3RyaW5nKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIFN5bWJvbEhlbHBlci50b1B5dGhvbihzdGVwKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0Q2FyZGluYWxpdHlGdW5jdGlvbkNsYXNzKCk6IHN0cmluZyB7CisgICAgICAgIHJldHVybiAnQ2FyZGluYWxpdHlWYWx1ZSc7CisgICAgfQorCisgICAgcHJvdGVjdGVkIG92ZXJyaWRlIGhhbmRsZVN0cmluZ0xpdGVyYWxUZXh0KHRleHQ6IHN0cmluZyk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goIiciKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKHRleHQpOworICAgICAgICB0aGlzLnNiLnB1c2goIiciKTsKKyAgICB9CisKKyAgICB2aXNpdEJvb2xlYW5MaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCk7CisgICAgICAgIHRoaXMuc2IucHVzaCh0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKSk7CisgICAgfQorCisgICAgdmlzaXROdWxsTGl0ZXJhbChfY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdOb25lJyk7CisgICAgfQorCisgICAgdmlzaXRTdHJpbmdOdWxsYWJsZUxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5nZXRUZXh0KCkgPT09ICdudWxsJykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdOb25lJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCB0ZXh0ID0gVHJhbnNsYXRlVmlzaXRvci5yZW1vdmVGaXJzdEFuZExhc3RDaGFyYWN0ZXJzKGN0eC5nZXRUZXh0KCkpOworICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHJpbmdMaXRlcmFsVGV4dCh0ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0TmFuTGl0ZXJhbChfY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCJmbG9hdCgnbmFuJykiKTsKKyAgICB9CisKKyAgICB2aXNpdEluZkxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5TaWduZWRJbmZMaXRlcmFsKCkgIT0gbnVsbCAmJiBjdHguU2lnbmVkSW5mTGl0ZXJhbCgpLmdldFRleHQoKSA9PT0gJy1JbmZpbml0eScpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgiZmxvYXQoJy1pbmYnKSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCJmbG9hdCgnaW5mJykiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0SW50ZWdlckxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgaW50ZWdlckxpdGVyYWw6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCkudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgY29uc3QgbGFzdENoYXIgPSBpbnRlZ2VyTGl0ZXJhbFtpbnRlZ2VyTGl0ZXJhbC5sZW5ndGggLSAxXTsKKworICAgICAgICBpZiAoIS9bYS16XS8udGVzdChsYXN0Q2hhcikpIHsKKyAgICAgICAgICAgIC8vIE5vIHR5cGUgc3VmZml4IOKAlCBjaGVjayBpZiB0aGUgdmFsdWUgZXhjZWVkcyAzMi1iaXQgc2lnbmVkIGludGVnZXIgcmFuZ2UKKyAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gQmlnSW50KGludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA+IEJpZ0ludCgyMTQ3NDgzNjQ3KSB8fCB2YWx1ZSA8IEJpZ0ludCgtMjE0NzQ4MzY0OCkpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ2xvbmcoJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGludGVnZXJMaXRlcmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IG51bSA9IGludGVnZXJMaXRlcmFsLnNsaWNlKDAsIC0xKTsKKyAgICAgICAgc3dpdGNoIChsYXN0Q2hhcikgeworICAgICAgICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICBjYXNlICdzJzoKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChudW0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdiaWdpbnQoJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdsJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJ2xvbmcoJyk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKG51bSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcpJyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaChpbnRlZ2VyTGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdEZsb2F0TGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LmluZkxpdGVyYWwoKSAhPSBudWxsKSB7IHRoaXMudmlzaXQoY3R4LmluZkxpdGVyYWwoKSk7IHJldHVybjsgfQorICAgICAgICBpZiAoY3R4Lm5hbkxpdGVyYWwoKSAhPSBudWxsKSB7IHRoaXMudmlzaXQoY3R4Lm5hbkxpdGVyYWwoKSk7IHJldHVybjsgfQorCisgICAgICAgIGNvbnN0IGZsb2F0TGl0ZXJhbDogc3RyaW5nID0gY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpOworICAgICAgICBjb25zdCBsYXN0Q2hhciA9IGZsb2F0TGl0ZXJhbFtmbG9hdExpdGVyYWwubGVuZ3RoIC0gMV07CisgICAgICAgIGNvbnN0IG51bSA9IGZsb2F0TGl0ZXJhbC5zbGljZSgwLCAtMSk7CisKKyAgICAgICAgc3dpdGNoIChsYXN0Q2hhcikgeworICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ20nOgorICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnYmlnZGVjaW1hbCgnKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2gobnVtKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGZsb2F0TGl0ZXJhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdERhdGVMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IGR0U3RyaW5nOiBzdHJpbmcgPSBjdHguZ2V0Q2hpbGQoMikuZ2V0VGV4dCgpOworICAgICAgICBjb25zdCBpbm5lciA9IFRyYW5zbGF0ZVZpc2l0b3IucmVtb3ZlRmlyc3RBbmRMYXN0Q2hhcmFjdGVycyhkdFN0cmluZyk7CisgICAgICAgIHRoaXMuc2IucHVzaCgiZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnIik7CisgICAgICAgIHRoaXMuc2IucHVzaChmb3JtYXREYXRldGltZVB5dGhvblN0eWxlKGlubmVyKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgiJykiKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNSYW5nZUxpdGVyYWwoX2N0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRocm93IG5ldyBUcmFuc2xhdG9yRXhjZXB0aW9uKCdQeXRob24gZG9lcyBub3Qgc3VwcG9ydCByYW5nZSBsaXRlcmFscycpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY1NldExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgbGl0ZXJhbHM6IGFueVtdID0gY3R4LmdlbmVyaWNMaXRlcmFsKCk7CisgICAgICAgIGlmIChsaXRlcmFscy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnc2V0KCknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ3snKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXRlcmFscy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgdGhpcy52aXNpdChsaXRlcmFsc1tpXSk7CisgICAgICAgICAgICBpZiAoaSA8IGxpdGVyYWxzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zYi5wdXNoKCd9Jyk7CisgICAgfQorCisgICAgdmlzaXRHZW5lcmljQ29sbGVjdGlvbkxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdbJyk7CisgICAgICAgIGNvbnN0IGxpdGVyYWxzOiBhbnlbXSA9IGN0eC5nZW5lcmljTGl0ZXJhbCgpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpdGVyYWxzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGxpdGVyYWxzW2ldKTsKKyAgICAgICAgICAgIGlmIChpIDwgbGl0ZXJhbHMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnLCAnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ10nKTsKKyAgICB9CisKKyAgICB2aXNpdEdlbmVyaWNNYXBMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgneyAnKTsKKyAgICAgICAgY29uc3QgZW50cmllczogYW55W10gPSBjdHgubWFwRW50cnkoKTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGVudHJpZXNbaV0pOworICAgICAgICAgICAgaWYgKGkgPCBlbnRyaWVzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zYi5wdXNoKCcgfScpOworICAgIH0KKworICAgIHZpc2l0TWFwRW50cnkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy52aXNpdChjdHgubWFwS2V5KCkpOworICAgICAgICB0aGlzLnNiLnB1c2goJzogJyk7CisgICAgICAgIHRoaXMudmlzaXQoY3R4LmdlbmVyaWNMaXRlcmFsKCkpOworICAgIH0KKworICAgIHZpc2l0TWFwS2V5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IGtleUluZGV4ID0gKGN0eC5MUEFSRU4oKSAhPSBudWxsICYmIGN0eC5SUEFSRU4oKSAhPSBudWxsKSA/IDEgOiAwOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZXRDaGlsZChrZXlJbmRleCkpOworICAgIH0KKworICAgIHZpc2l0VXVpZExpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5zdHJpbmdMaXRlcmFsKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCd1dWlkLnV1aWQ0KCknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNiLnB1c2goJ3V1aWQuVVVJRCgnKTsKKyAgICAgICAgdGhpcy52aXNpdFN0cmluZ0xpdGVyYWwoY3R4LnN0cmluZ0xpdGVyYWwoKSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsU3RyYXRlZ3koY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5nZXRDaGlsZENvdW50KCkgPT09IDEpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKCknKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCk7CisgICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBmaXJzdFRleHQgPT09ICduZXcnID8gY3R4LmdldENoaWxkKDEpLmdldFRleHQoKSA6IGZpcnN0VGV4dDsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaChjbGFzc05hbWUpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisKKyAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3M6IGFueVtdID0gY3R4LmNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCBjb25maWdzLmxlbmd0aDsgaXgrKykgeworICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoY29uZmlnc1tpeF0pOworICAgICAgICAgICAgICAgIGlmIChpeCA8IGNvbmZpZ3MubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJywgJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLnNiLnB1c2goJyknKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0Q29uZmlndXJhdGlvbihjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBrZXlUZXh0OiBzdHJpbmcgPSBjdHgua2V5d29yZCgpICE9IG51bGwgPyBjdHgua2V5d29yZCgpLmdldFRleHQoKSA6IGN0eC5uYWtlZEtleSgpLmdldFRleHQoKTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKFN5bWJvbEhlbHBlci50b1B5dGhvbihrZXlUZXh0KSk7CisgICAgICAgIHRoaXMuc2IucHVzaCgnPScpOworICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljQXJndW1lbnQoKSk7CisgICAgfQorfQorCisvKioKKyAqIEZvcm1hdHMgYSBkYXRldGltZSBzdHJpbmcgZm9yIFB5dGhvbidzIGRhdGV0aW1lLmZyb21pc29mb3JtYXQoKToKKyAqIC0gVHJ1bmNhdGVzIHNlY29uZHMgaWYgYm90aCBzZWNvbmRzIGFuZCBtaWxsaXNlY29uZHMgYXJlIDAKKyAqIC0gVXNlcyAnKzAwOjAwJyBmb3IgVVRDIChQeXRob24gPCAzLjExIGRvZXMgbm90IHN1cHBvcnQgJ1onKQorICogLSBBc3N1bWVzIFVUQyB3aGVuIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQKKyAqLworZnVuY3Rpb24gZm9ybWF0RGF0ZXRpbWVQeXRob25TdHlsZShzOiBzdHJpbmcpOiBzdHJpbmcgeworICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShzKTsKKyAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSB7CisgICAgICAgIHRocm93IG5ldyBUcmFuc2xhdG9yRXhjZXB0aW9uKGBJbnZhbGlkIGRhdGV0aW1lOiAke3N9YCk7CisgICAgfQorICAgIGNvbnN0IHllYXIgPSBkLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKS5wYWRTdGFydCg0LCAnMCcpOworICAgIGNvbnN0IG1vbnRoID0gKGQuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTsKKyAgICBjb25zdCBkYXkgPSBkLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CisgICAgY29uc3QgaG91cnMgPSBkLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpOworICAgIGNvbnN0IG1pbnV0ZXMgPSBkLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CisgICAgY29uc3Qgc2Vjb25kcyA9IGQuZ2V0VVRDU2Vjb25kcygpOworICAgIGNvbnN0IG1pbGxpcyA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7CisKKyAgICBsZXQgcmVzdWx0ID0gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9VCR7aG91cnN9OiR7bWludXRlc31gOworICAgIGlmIChzZWNvbmRzICE9PSAwIHx8IG1pbGxpcyAhPT0gMCkgeworICAgICAgICByZXN1bHQgKz0gJzonICsgc2Vjb25kcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7CisgICAgICAgIGlmIChtaWxsaXMgIT09IDApIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAnLicgKyBtaWxsaXMudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLnJlcGxhY2UoLzArJC8sICcnKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQgKz0gJyswMDowMCc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworY2xhc3MgU3ltYm9sSGVscGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT19QWVRIT05fTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geworICAgICAgICAnZ2xvYmFsJzogJ2dsb2JhbF8nLAorICAgICAgICAnYWxsJzogJ2FsbF8nLAorICAgICAgICAnYW5kJzogJ2FuZF8nLAorICAgICAgICAnYW55JzogJ2FueV8nLAorICAgICAgICAnYXMnOiAnYXNfJywKKyAgICAgICAgJ2ZpbHRlcic6ICdmaWx0ZXJfJywKKyAgICAgICAgJ2Zvcm1hdCc6ICdmb3JtYXRfJywKKyAgICAgICAgJ2Zyb20nOiAnZnJvbV8nLAorICAgICAgICAnaWQnOiAnaWRfJywKKyAgICAgICAgJ2luJzogJ2luXycsCisgICAgICAgICdpcyc6ICdpc18nLAorICAgICAgICAnbGlzdCc6ICdsaXN0XycsCisgICAgICAgICdtYXgnOiAnbWF4XycsCisgICAgICAgICdtaW4nOiAnbWluXycsCisgICAgICAgICdvcic6ICdvcl8nLAorICAgICAgICAnbm90JzogJ25vdF8nLAorICAgICAgICAncmFuZ2UnOiAncmFuZ2VfJywKKyAgICAgICAgJ3NldCc6ICdzZXRfJywKKyAgICAgICAgJ3N1bSc6ICdzdW1fJywKKyAgICAgICAgJ3dpdGgnOiAnd2l0aF8nLAorICAgIH07CisKKyAgICBzdGF0aWMgdG9QeXRob24oc3ltYm9sOiBzdHJpbmcpOiBzdHJpbmcgeworICAgICAgICByZXR1cm4gU3ltYm9sSGVscGVyLlRPX1BZVEhPTl9NQVBbc3ltYm9sXSA/PyBjb252ZXJ0Q2FtZWxDYXNlVG9TbmFrZUNhc2Uoc3ltYm9sKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGNvbnZlcnRDYW1lbENhc2VUb1NuYWtlQ2FzZShjYW1lbENhc2U6IHN0cmluZyk6IHN0cmluZyB7CisgICAgaWYgKCFjYW1lbENhc2UpIHJldHVybiBjYW1lbENhc2U7CisgICAgLy8gc2tpcCBpZiB0aGlzIGlzIGEgY2xhc3MvZW51bSBpbmRpY2F0ZWQgYnkgdGhlIGZpcnN0IGxldHRlciBiZWluZyB1cHBlciBjYXNlCisgICAgaWYgKGNhbWVsQ2FzZS5jaGFyQXQoMCkgPT09IGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSAmJiAvW0EtWl0vLnRlc3QoY2FtZWxDYXNlLmNoYXJBdCgwKSkpIHsKKyAgICAgICAgcmV0dXJuIGNhbWVsQ2FzZTsKKyAgICB9CisgICAgbGV0IHJlc3VsdCA9ICcnOworICAgIGZvciAoY29uc3QgYyBvZiBjYW1lbENhc2UpIHsKKyAgICAgICAgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gJ18nICsgYy50b0xvd2VyQ2FzZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ICs9IGM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1RyYW5zbGF0ZVZpc2l0b3IudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdGVWaXNpdG9yLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjJiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdGVWaXNpdG9yLnRzCkBAIC0wLDAgKzEsNDQwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgRXJyb3JOb2RlLCBUZXJtaW5hbE5vZGUgfSBmcm9tICdhbnRscjRuZyc7CitpbXBvcnQgeyBHcmVtbGluTGV4ZXIgfSBmcm9tICcuLi9ncmFtbWFyL0dyZW1saW5MZXhlci5qcyc7CisKKy8qKgorICogQmFzZSB2aXNpdG9yIGZvciB0cmFuc2xhdGluZyBHcmVtbGluIHF1ZXJpZXMuIE1pcnJvcnMgdGhlIEphdmEgVHJhbnNsYXRlVmlzaXRvci4KKyAqIE1ha2VzIG5vIGNoYW5nZXMgdG8gaW5wdXQgZXhjZXB0OgorICogLSBOb3JtYWxpemVzIHdoaXRlc3BhY2UKKyAqIC0gTm9ybWFsaXplcyBudW1lcmljIHN1ZmZpeGVzIHRvIGxvd2VyIGNhc2UKKyAqIC0gTWFrZXMgYW5vbnltb3VzIHRyYXZlcnNhbHMgZXhwbGljaXQgd2l0aCBkb3VibGUgdW5kZXJzY29yZQorICogLSBNYWtlcyBlbnVtcyBleHBsaWNpdCB3aXRoIHRoZWlyIHByb3BlciBuYW1lCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNzIFRyYW5zbGF0ZVZpc2l0b3IgeworCisgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdyYXBoVHJhdmVyc2FsU291cmNlTmFtZTogc3RyaW5nOworICAgIHByb3RlY3RlZCByZWFkb25seSBzYjogc3RyaW5nW10gPSBbXTsKKyAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldGVyczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7CisKKyAgICBjb25zdHJ1Y3RvcihncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWU6IHN0cmluZyA9ICdnJykgeworICAgICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlTmFtZSA9IGdyYXBoVHJhdmVyc2FsU291cmNlTmFtZTsKKyAgICB9CisKKyAgICBnZXRUcmFuc2xhdGVkKCk6IHN0cmluZyB7CisgICAgICAgIHJldHVybiB0aGlzLnNiLmpvaW4oJycpOworICAgIH0KKworICAgIGdldFBhcmFtZXRlcnMoKTogUmVhZG9ubHlTZXQ8c3RyaW5nPiB7CisgICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnM7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHByb2Nlc3NHcmVtbGluU3ltYm9sKHN0ZXA6IHN0cmluZyk6IHN0cmluZyB7CisgICAgICAgIHJldHVybiBzdGVwOworICAgIH0KKworICAgIHByb3RlY3RlZCBhcHBlbmRBcmd1bWVudFNlcGFyYXRvcigpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCcsICcpOworICAgIH0KKworICAgIHByb3RlY3RlZCBhcHBlbmRTdGVwU2VwYXJhdG9yKCk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goJy4nKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgYXBwZW5kU3RlcE9wZW4oKTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKCcpOworICAgIH0KKworICAgIHByb3RlY3RlZCBhcHBlbmRTdGVwQ2xvc2UoKTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgIH0KKworICAgIHByb3RlY3RlZCBhcHBlbmRBbm9ueW1vdXNTcGF3bigpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCdfXy4nKTsKKyAgICB9CisKKyAgICB2aXNpdCh0cmVlOiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKHRyZWUgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgIC8vIGFudGxyLW5nIGRvZXMgbm90IGdlbmVyYXRlIGFjY2VwdCgpIG92ZXJyaWRlcyBwZXIgY29udGV4dCBjbGFzcyDigJQKKyAgICAgICAgLy8gUGFyc2VyUnVsZUNvbnRleHQuYWNjZXB0KCkgYWx3YXlzIGNhbGxzIHZpc2l0Q2hpbGRyZW4sIG5ldmVyIGRpc3BhdGNoaW5nIHRvCisgICAgICAgIC8vIHRoZSBzcGVjaWZpYyB2aXNpdFh4eCBtZXRob2QuIFdlIHBlcmZvcm0gdGhlIGRpc3BhdGNoIG91cnNlbHZlcyBoZXJlIGJ5CisgICAgICAgIC8vIG1hcHBpbmcgdGhlIGNvbnRleHQgY2xhc3MgbmFtZSAoZS5nLiBTdHJpbmdMaXRlcmFsQ29udGV4dCkgdG8gdGhlCisgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdmlzaXRvciBtZXRob2QgKGUuZy4gdmlzaXRTdHJpbmdMaXRlcmFsKS4KKyAgICAgICAgY29uc3QgY2xhc3NOYW1lOiBzdHJpbmcgPSB0cmVlPy5jb25zdHJ1Y3Rvcj8ubmFtZSA/PyAnJzsKKyAgICAgICAgaWYgKGNsYXNzTmFtZS5lbmRzV2l0aCgnQ29udGV4dCcpKSB7CisgICAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gJ3Zpc2l0JyArIGNsYXNzTmFtZS5zbGljZSgwLCAtJ0NvbnRleHQnLmxlbmd0aCk7CisgICAgICAgICAgICBjb25zdCBtZXRob2QgPSAodGhpcyBhcyBhbnkpW21ldGhvZE5hbWVdOworICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgICAgICAgICBtZXRob2QuY2FsbCh0aGlzLCB0cmVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBObyBzcGVjaWZpYyB2aXNpdG9yIG1ldGhvZCBmb3VuZCDigJQgZmFsbCB0aHJvdWdoIHRvIGFjY2VwdCgpIHdoaWNoIGNhbGxzCisgICAgICAgIC8vIHZpc2l0Q2hpbGRyZW4gZm9yIHJ1bGUgY29udGV4dHMsIHZpc2l0VGVybWluYWwgZm9yIHRlcm1pbmFscy4KKyAgICAgICAgKHRyZWUgYXMgYW55KS5hY2NlcHQodGhpcyk7CisgICAgfQorCisgICAgdmlzaXRDaGlsZHJlbihub2RlOiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3QgbiA9IG5vZGUuZ2V0Q2hpbGRDb3VudCgpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgdGhpcy52aXNpdChub2RlLmdldENoaWxkKGkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3RlY3RlZCBnZXRDYXJkaW5hbGl0eUZ1bmN0aW9uQ2xhc3MoKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuICdDYXJkaW5hbGl0eSc7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHN0YXRpYyByZW1vdmVGaXJzdEFuZExhc3RDaGFyYWN0ZXJzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7CisgICAgICAgIHJldHVybiB0ZXh0ICE9IG51bGwgJiYgdGV4dC5sZW5ndGggPiAwID8gdGV4dC5zdWJzdHJpbmcoMSwgdGV4dC5sZW5ndGggLSAxKSA6ICcnOworICAgIH0KKworICAgIHByb3RlY3RlZCBoYW5kbGVTdHJpbmdMaXRlcmFsVGV4dCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCciJyk7CisgICAgICAgIHRoaXMuc2IucHVzaCh0ZXh0KTsKKyAgICAgICAgdGhpcy5zYi5wdXNoKCciJyk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIGFwcGVuZEV4cGxpY2l0TmFtaW5nKHR4dDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHZvaWQgeworICAgICAgICBpZiAoIXR4dC5zdGFydHNXaXRoKHByZWZpeCArICcuJykpIHsKKyAgICAgICAgICAgIHRoaXMuc2IucHVzaCh0aGlzLnByb2Nlc3NHcmVtbGluU3ltYm9sKHByZWZpeCkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcuJyk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbCh0eHQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdHh0LnNwbGl0KCcuJyk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbChwYXJ0c1swXSkpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcuJyk7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbChwYXJ0c1sxXSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUZXJtaW5hbChub2RlOiBUZXJtaW5hbE5vZGUpOiB2b2lkIHsKKyAgICAgICAgLy8gc2tpcCBFT0Ygbm9kZQorICAgICAgICBpZiAobm9kZSA9PSBudWxsIHx8IG5vZGUuZ2V0U3ltYm9sKCkudHlwZSA9PT0gLTEpIHJldHVybjsKKworICAgICAgICAvLyBUUkFWRVJTQUxfUk9PVCBpcyB0aGUgdHJhdmVyc2FsIHNvdXJjZSB0b2tlbiAoZS5nLiAnZycpIOKAlCBhbHdheXMgb3V0cHV0IGFzLWlzLAorICAgICAgICAvLyBuZXZlciBzdWJqZWN0IHRvIHByb2Nlc3NHcmVtbGluU3ltYm9sICh3aGljaCBtYXkgY2FwaXRhbGl6ZSBpdCBpbiBzb21lIGRpYWxlY3RzKS4KKyAgICAgICAgaWYgKG5vZGUuZ2V0U3ltYm9sKCkudHlwZSA9PT0gR3JlbWxpbkxleGVyLlRSQVZFUlNBTF9ST09UKSB7CisgICAgICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgdGVybWluYWwgPSBub2RlLmdldFN5bWJvbCgpLnRleHQgPz8gJyc7CisgICAgICAgIHN3aXRjaCAodGVybWluYWwpIHsKKyAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kU3RlcE9wZW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJyknOgorICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kU3RlcENsb3NlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZEFyZ3VtZW50U2VwYXJhdG9yKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFN0ZXBTZXBhcmF0b3IoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ25ldyc6CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCduZXcnKTsKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlLnBhcmVudD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdNYXBLZXlDb250ZXh0JykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcgJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbCh0ZXJtaW5hbCkpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRFcnJvck5vZGUoX25vZGU6IEVycm9yTm9kZSk6IHZvaWQgeworICAgICAgICAvLyBuby1vcAorICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsU291cmNlKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaCh0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlTmFtZSk7CisgICAgICAgIC8vIGNoaWxkIGNvdW50cyBtb3JlIHRoYW4gMSBtZWFucyB0aGVyZSBpcyBhIHN0ZXAgc2VwYXJhdG9yIGFuZCBhIHRyYXZlcnNhbCBzb3VyY2UgbWV0aG9kCisgICAgICAgIGlmIChjdHguZ2V0Q2hpbGRDb3VudCgpID4gMSkgeworICAgICAgICAgICAgaWYgKGN0eC5nZXRDaGlsZCgwKS5nZXRDaGlsZENvdW50KCkgPiAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRTdGVwU2VwYXJhdG9yKCk7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdFRyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2QoY3R4LmdldENoaWxkKDApLmdldENoaWxkKDIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuYXBwZW5kU3RlcFNlcGFyYXRvcigpOworICAgICAgICAgICAgdGhpcy52aXNpdFRyYXZlcnNhbFNvdXJjZVNlbGZNZXRob2QoY3R4LmdldENoaWxkKDIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsU291cmNlU2VsZk1ldGhvZChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnZpc2l0Q2hpbGRyZW4oY3R4KTsKKyAgICB9CisKKyAgICB2aXNpdE5lc3RlZFRyYXZlcnNhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LkFOT05fVFJBVkVSU0FMX1JPT1QoKSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLmFwcGVuZEFub255bW91c1NwYXduKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKGN0eCk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxTY29wZShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdTY29wZScpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsVChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdUJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxUU2hvcnQoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hcHBlbmRFeHBsaWNpdE5hbWluZyhjdHguZ2V0VGV4dCgpLCAnVCcpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsVExvbmcoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hcHBlbmRFeHBsaWNpdE5hbWluZyhjdHguZ2V0VGV4dCgpLCAnVCcpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsTWVyZ2UoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hcHBlbmRFeHBsaWNpdE5hbWluZyhjdHguZ2V0VGV4dCgpLCAnTWVyZ2UnKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbE9yZGVyKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYXBwZW5kRXhwbGljaXROYW1pbmcoY3R4LmdldFRleHQoKSwgJ09yZGVyJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxCYXJyaWVyKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYXBwZW5kRXhwbGljaXROYW1pbmcoY3R4LmdldFRleHQoKSwgJ0JhcnJpZXInKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbERpcmVjdGlvbihjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdEaXJlY3Rpb24nKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbERpcmVjdGlvblNob3J0KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuYXBwZW5kRXhwbGljaXROYW1pbmcoY3R4LmdldFRleHQoKSwgJ0RpcmVjdGlvbicpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsRGlyZWN0aW9uTG9uZyhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdEaXJlY3Rpb24nKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbENhcmRpbmFsaXR5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguTFBBUkVOKCkgIT0gbnVsbCAmJiBjdHguUlBBUkVOKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgY29uc3QgaWR4ID0gY3R4LktfQ0FSRElOQUxJVFkoKSAhPSBudWxsID8gMiA6IDA7CisgICAgICAgICAgICBjb25zdCB0eHQgPSBjdHguZ2V0Q2hpbGQoaWR4KS5nZXRUZXh0KCk7CisgICAgICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKHR4dCwgdGhpcy5nZXRDYXJkaW5hbGl0eUZ1bmN0aW9uQ2xhc3MoKSk7CisgICAgICAgICAgICB0aGlzLmFwcGVuZFN0ZXBPcGVuKCk7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZW5lcmljTGl0ZXJhbCgpKTsKKyAgICAgICAgICAgIHRoaXMuYXBwZW5kU3RlcENsb3NlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdDYXJkaW5hbGl0eScpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxDb2x1bW4oY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hcHBlbmRFeHBsaWNpdE5hbWluZyhjdHguZ2V0VGV4dCgpLCAnQ29sdW1uJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxQb3AoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hcHBlbmRFeHBsaWNpdE5hbWluZyhjdHguZ2V0VGV4dCgpLCAnUG9wJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxPcGVyYXRvcihjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdPcGVyYXRvcicpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsUGljayhjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdQaWNrJyk7CisgICAgfQorCisgICAgdmlzaXRUcmF2ZXJzYWxEVChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLmFwcGVuZEV4cGxpY2l0TmFtaW5nKGN0eC5nZXRUZXh0KCksICdEVCcpOworICAgIH0KKworICAgIHZpc2l0VHJhdmVyc2FsR1R5cGUoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5hcHBlbmRFeHBsaWNpdE5hbWluZyhjdHguZ2V0VGV4dCgpLCAnR1R5cGUnKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBzd2l0Y2ggKGN0eC5nZXRDaGlsZENvdW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICB0aGlzLnZpc2l0KGN0eC5nZXRDaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgLy8gaGFuZGxlIG5lZ2F0ZSBvZiBQCisgICAgICAgICAgICAgICAgdGhpcy52aXNpdChjdHguZ2V0Q2hpbGQoMCkpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnLicpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCh0aGlzLnByb2Nlc3NHcmVtbGluU3ltYm9sKCduZWdhdGUnKSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhbmQvb3IgcHJlZGljYXRlcworICAgICAgICAgICAgICAgIHRoaXMudmlzaXQoY3R4LmdldENoaWxkKDApKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2goJy4nKTsKKyAgICAgICAgICAgICAgICB0aGlzLnNiLnB1c2godGhpcy5wcm9jZXNzR3JlbWxpblN5bWJvbChjdHguZ2V0Q2hpbGQoMikuZ2V0VGV4dCgpKSk7CisgICAgICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcoJyk7CisgICAgICAgICAgICAgICAgdGhpcy52aXNpdChjdHguZ2V0Q2hpbGQoNCkpOworICAgICAgICAgICAgICAgIHRoaXMuc2IucHVzaCgnKScpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZpc2l0UChjdHg6IGFueSwgcENsYXNzOiBzdHJpbmcsIG1ldGhvZE5hbWU6IHN0cmluZyk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2gocENsYXNzKTsKKyAgICAgICAgdGhpcy5hcHBlbmRTdGVwU2VwYXJhdG9yKCk7CisgICAgICAgIHRoaXMuc2IucHVzaCh0aGlzLnByb2Nlc3NHcmVtbGluU3ltYm9sKG1ldGhvZE5hbWUpKTsKKyAgICAgICAgdGhpcy5hcHBlbmRTdGVwT3BlbigpOworCisgICAgICAgIGNvbnN0IGNoaWxkcmVuOiBhbnlbXSA9IFtdOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN0eC5nZXRDaGlsZENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgY29uc3QgY2hpbGQgPSBjdHguZ2V0Q2hpbGQoaSk7CisgICAgICAgICAgICBjb25zdCBuYW1lID0gY2hpbGQuY29uc3RydWN0b3I/Lm5hbWUgPz8gJyc7CisgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ0dlbmVyaWNBcmd1bWVudENvbnRleHQnIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PT0gJ0dlbmVyaWNBcmd1bWVudFZhcmFyZ3NDb250ZXh0JyB8fAorICAgICAgICAgICAgICAgIG5hbWUgPT09ICdTdHJpbmdBcmd1bWVudENvbnRleHQnIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PT0gJ1N0cmluZ0xpdGVyYWxDb250ZXh0JyB8fAorICAgICAgICAgICAgICAgIG5hbWUgPT09ICdUcmF2ZXJzYWxHVHlwZUNvbnRleHQnIHx8CisgICAgICAgICAgICAgICAgbmFtZSA9PT0gJ1RyYXZlcnNhbFByZWRpY2F0ZUNvbnRleHQnKSB7CisgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBpeCA9IDA7IGl4IDwgY2hpbGRyZW4ubGVuZ3RoOyBpeCsrKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0KGNoaWxkcmVuW2l4XSk7CisgICAgICAgICAgICBpZiAoaXggPCBjaGlsZHJlbi5sZW5ndGggLSAxKSB7CisgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRBcmd1bWVudFNlcGFyYXRvcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5hcHBlbmRTdGVwQ2xvc2UoKTsKKyAgICB9CisKKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9lcShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLnZpc2l0UChjdHgsICdQJywgJ2VxJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9uZXEoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnUCcsICduZXEnKTsgfQorICAgIHZpc2l0VHJhdmVyc2FsUHJlZGljYXRlX2x0KGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1AnLCAnbHQnKTsgfQorICAgIHZpc2l0VHJhdmVyc2FsUHJlZGljYXRlX2x0ZShjdHg6IGFueSk6IHZvaWQgeyB0aGlzLnZpc2l0UChjdHgsICdQJywgJ2x0ZScpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxQcmVkaWNhdGVfZ3QoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnUCcsICdndCcpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxQcmVkaWNhdGVfZ3RlKGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1AnLCAnZ3RlJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9pbnNpZGUoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnUCcsICdpbnNpZGUnKTsgfQorICAgIHZpc2l0VHJhdmVyc2FsUHJlZGljYXRlX291dHNpZGUoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnUCcsICdvdXRzaWRlJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9iZXR3ZWVuKGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1AnLCAnYmV0d2VlbicpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxQcmVkaWNhdGVfd2l0aGluKGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1AnLCAnd2l0aGluJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV93aXRob3V0KGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1AnLCAnd2l0aG91dCcpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxQcmVkaWNhdGVfdHlwZU9mKGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1AnLCAndHlwZU9mJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9ub3QoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnUCcsICdub3QnKTsgfQorICAgIHZpc2l0VHJhdmVyc2FsUHJlZGljYXRlX2NvbnRhaW5pbmcoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnVGV4dFAnLCAnY29udGFpbmluZycpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxQcmVkaWNhdGVfbm90Q29udGFpbmluZyhjdHg6IGFueSk6IHZvaWQgeyB0aGlzLnZpc2l0UChjdHgsICdUZXh0UCcsICdub3RDb250YWluaW5nJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9zdGFydGluZ1dpdGgoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnVGV4dFAnLCAnc3RhcnRpbmdXaXRoJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9ub3RTdGFydGluZ1dpdGgoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnVGV4dFAnLCAnbm90U3RhcnRpbmdXaXRoJyk7IH0KKyAgICB2aXNpdFRyYXZlcnNhbFByZWRpY2F0ZV9lbmRpbmdXaXRoKGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1RleHRQJywgJ2VuZGluZ1dpdGgnKTsgfQorICAgIHZpc2l0VHJhdmVyc2FsUHJlZGljYXRlX25vdEVuZGluZ1dpdGgoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnVGV4dFAnLCAnbm90RW5kaW5nV2l0aCcpOyB9CisgICAgdmlzaXRUcmF2ZXJzYWxQcmVkaWNhdGVfcmVnZXgoY3R4OiBhbnkpOiB2b2lkIHsgdGhpcy52aXNpdFAoY3R4LCAnVGV4dFAnLCAncmVnZXgnKTsgfQorICAgIHZpc2l0VHJhdmVyc2FsUHJlZGljYXRlX25vdFJlZ2V4KGN0eDogYW55KTogdm9pZCB7IHRoaXMudmlzaXRQKGN0eCwgJ1RleHRQJywgJ25vdFJlZ2V4Jyk7IH0KKworICAgIHZpc2l0Qm9vbGVhbkFyZ3VtZW50KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguYm9vbGVhbkxpdGVyYWwoKSAhPSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0Qm9vbGVhbkxpdGVyYWwoY3R4LmJvb2xlYW5MaXRlcmFsKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy52aXNpdFZhcmlhYmxlKGN0eC52YXJpYWJsZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0FyZ3VtZW50KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGlmIChjdHguZ2VuZXJpY0xpdGVyYWwoKSAhPSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0R2VuZXJpY0xpdGVyYWwoY3R4LmdlbmVyaWNMaXRlcmFsKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy52aXNpdFZhcmlhYmxlKGN0eC52YXJpYWJsZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0xpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy52aXNpdENoaWxkcmVuKGN0eCk7CisgICAgfQorCisgICAgdmlzaXRJbnRlZ2VyTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpKTsKKyAgICB9CisKKyAgICB2aXNpdEZsb2F0TGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBpZiAoY3R4LmluZkxpdGVyYWwoKSAhPSBudWxsKSB7IHRoaXMudmlzaXQoY3R4LmluZkxpdGVyYWwoKSk7IHJldHVybjsgfQorICAgICAgICBpZiAoY3R4Lm5hbkxpdGVyYWwoKSAhPSBudWxsKSB7IHRoaXMudmlzaXQoY3R4Lm5hbkxpdGVyYWwoKSk7IHJldHVybjsgfQorICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKS50b0xvd2VyQ2FzZSgpKTsKKyAgICB9CisKKyAgICB2aXNpdEJvb2xlYW5MaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICB9CisKKyAgICB2aXNpdE51bGxMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMuc2IucHVzaChjdHguZ2V0VGV4dCgpKTsKKyAgICB9CisKKyAgICB2aXNpdE5hbkxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5zYi5wdXNoKGN0eC5nZXRUZXh0KCkpOworICAgIH0KKworICAgIHZpc2l0SW5mTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKSk7CisgICAgfQorCisgICAgdmlzaXRVdWlkTGl0ZXJhbChjdHg6IGFueSk6IHZvaWQgeworICAgICAgICB0aGlzLnNiLnB1c2goY3R4LmdldFRleHQoKSk7CisgICAgfQorCisgICAgdmlzaXRTdHJpbmdMaXRlcmFsKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IHRleHQgPSBUcmFuc2xhdGVWaXNpdG9yLnJlbW92ZUZpcnN0QW5kTGFzdENoYXJhY3RlcnMoY3R4LmdldFRleHQoKSk7CisgICAgICAgIHRoaXMuaGFuZGxlU3RyaW5nTGl0ZXJhbFRleHQodGV4dCk7CisgICAgfQorCisgICAgdmlzaXRTdHJpbmdOdWxsYWJsZUxpdGVyYWwoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgaWYgKGN0eC5nZXRUZXh0KCkgPT09ICdudWxsJykgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCdudWxsJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCB0ZXh0ID0gVHJhbnNsYXRlVmlzaXRvci5yZW1vdmVGaXJzdEFuZExhc3RDaGFyYWN0ZXJzKGN0eC5nZXRUZXh0KCkpOworICAgICAgICAgICAgdGhpcy5oYW5kbGVTdHJpbmdMaXRlcmFsVGV4dCh0ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZpc2l0TmFrZWRLZXkoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgdGhpcy5oYW5kbGVTdHJpbmdMaXRlcmFsVGV4dChjdHguZ2V0VGV4dCgpKTsKKyAgICB9CisKKyAgICB2aXNpdFZhcmlhYmxlKGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIGNvbnN0IHZhck5hbWU6IHN0cmluZyA9IGN0eC5nZXRUZXh0KCk7CisgICAgICAgIHRoaXMuc2IucHVzaCh2YXJOYW1lKTsKKyAgICAgICAgdGhpcy5wYXJhbWV0ZXJzLmFkZCh2YXJOYW1lKTsKKyAgICB9CisKKyAgICB2aXNpdEtleXdvcmQoY3R4OiBhbnkpOiB2b2lkIHsKKyAgICAgICAgY29uc3Qga2V5d29yZDogc3RyaW5nID0gY3R4LmdldFRleHQoKTsKKyAgICAgICAgaWYgKGN0eC5wYXJlbnQ/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnTWFwS2V5Q29udGV4dCcgfHwKKyAgICAgICAgICAgIGN0eC5wYXJlbnQ/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnQ29uZmlndXJhdGlvbkNvbnRleHQnKSB7CisgICAgICAgICAgICB0aGlzLmhhbmRsZVN0cmluZ0xpdGVyYWxUZXh0KGtleXdvcmQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKGtleXdvcmQpOworICAgICAgICAgICAgdGhpcy5zYi5wdXNoKCcgJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXNpdE1hcEtleShjdHg6IGFueSk6IHZvaWQgeworICAgICAgICBjb25zdCBrZXlJbmRleCA9IChjdHguTFBBUkVOKCkgIT0gbnVsbCAmJiBjdHguUlBBUkVOKCkgIT0gbnVsbCkgPyAxIDogMDsKKyAgICAgICAgdGhpcy52aXNpdChjdHguZ2V0Q2hpbGQoa2V5SW5kZXgpKTsKKyAgICB9CisKKyAgICB2aXNpdE1hcEVudHJ5KGN0eDogYW55KTogdm9pZCB7CisgICAgICAgIHRoaXMudmlzaXRDaGlsZHJlbihjdHgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1RyYW5zbGF0aW9uLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvVHJhbnNsYXRpb24udHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczNDY5YQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1RyYW5zbGF0aW9uLnRzCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEhvbGRzIHRoZSByZXN1bHQgb2YgYSBHcmVtbGluIHRyYW5zbGF0aW9uLgorICovCitleHBvcnQgY2xhc3MgVHJhbnNsYXRpb24geworICAgIGNvbnN0cnVjdG9yKAorICAgICAgICByZWFkb25seSBvcmlnaW5hbDogc3RyaW5nLAorICAgICAgICByZWFkb25seSB0cmFuc2xhdGVkOiBzdHJpbmcsCisgICAgICAgIHJlYWRvbmx5IHBhcmFtZXRlcnM6IFJlYWRvbmx5U2V0PHN0cmluZz4sCisgICAgKSB7fQorCisgICAgZ2V0T3JpZ2luYWwoKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWw7CisgICAgfQorCisgICAgZ2V0VHJhbnNsYXRlZCgpOiBzdHJpbmcgeworICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVkOworICAgIH0KKworICAgIGdldFBhcmFtZXRlcnMoKTogUmVhZG9ubHlTZXQ8c3RyaW5nPiB7CisgICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnM7CisgICAgfQorCisgICAgdG9TdHJpbmcoKTogc3RyaW5nIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlZDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdG9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvVHJhbnNsYXRvci50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2M2NjIwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvVHJhbnNsYXRvci50cwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCBKYXZhc2NyaXB0VHJhbnNsYXRlVmlzaXRvciBmcm9tICcuL0phdmFzY3JpcHRUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCBQeXRob25UcmFuc2xhdGVWaXNpdG9yIGZyb20gJy4vUHl0aG9uVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgR29UcmFuc2xhdGVWaXNpdG9yIGZyb20gJy4vR29UcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCBEb3ROZXRUcmFuc2xhdGVWaXNpdG9yIGZyb20gJy4vRG90TmV0VHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgSmF2YVRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi9KYXZhVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvciBmcm9tICcuL0dyb292eVRyYW5zbGF0ZVZpc2l0b3IuanMnOworaW1wb3J0IEFub255bWl6ZWRUcmFuc2xhdGVWaXNpdG9yIGZyb20gJy4vQW5vbnltaXplZFRyYW5zbGF0ZVZpc2l0b3IuanMnOworCitleHBvcnQgdHlwZSBUcmFuc2xhdG9yRmFjdG9yeSA9IChzb3VyY2VOYW1lOiBzdHJpbmcpID0+IFRyYW5zbGF0ZVZpc2l0b3I7CisKKy8qKgorICogRXh0ZW5zaWJsZSByZWdpc3RyeSBvZiB0cmFuc2xhdG9yIGZhY3Rvcmllcy4gTmV3IGxhbmd1YWdlcyBhcmUgYWRkZWQgaGVyZQorICogd2l0aG91dCBtb2RpZnlpbmcgYW55IG90aGVyIGZpbGUuCisgKi8KK2V4cG9ydCBjb25zdCBUcmFuc2xhdG9yID0geworICAgIENBTk9OSUNBTDogKHNvdXJjZU5hbWU6IHN0cmluZykgPT4gbmV3IFRyYW5zbGF0ZVZpc2l0b3Ioc291cmNlTmFtZSksCisgICAgSkFWQVNDUklQVDogKHNvdXJjZU5hbWU6IHN0cmluZykgPT4gbmV3IEphdmFzY3JpcHRUcmFuc2xhdGVWaXNpdG9yKHNvdXJjZU5hbWUpLAorICAgIFBZVEhPTjogKHNvdXJjZU5hbWU6IHN0cmluZykgPT4gbmV3IFB5dGhvblRyYW5zbGF0ZVZpc2l0b3Ioc291cmNlTmFtZSksCisgICAgR086IChzb3VyY2VOYW1lOiBzdHJpbmcpID0+IG5ldyBHb1RyYW5zbGF0ZVZpc2l0b3Ioc291cmNlTmFtZSksCisgICAgRE9UTkVUOiAoc291cmNlTmFtZTogc3RyaW5nKSA9PiBuZXcgRG90TmV0VHJhbnNsYXRlVmlzaXRvcihzb3VyY2VOYW1lKSwKKyAgICBKQVZBOiAoc291cmNlTmFtZTogc3RyaW5nKSA9PiBuZXcgSmF2YVRyYW5zbGF0ZVZpc2l0b3Ioc291cmNlTmFtZSksCisgICAgR1JPT1ZZOiAoc291cmNlTmFtZTogc3RyaW5nKSA9PiBuZXcgR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvcihzb3VyY2VOYW1lKSwKKyAgICBBTk9OWU1JWkVEOiAoc291cmNlTmFtZTogc3RyaW5nKSA9PiBuZXcgQW5vbnltaXplZFRyYW5zbGF0ZVZpc2l0b3Ioc291cmNlTmFtZSksCit9IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBUcmFuc2xhdG9yRmFjdG9yeT47CisKK2V4cG9ydCB0eXBlIFRyYW5zbGF0b3JLZXkgPSBrZXlvZiB0eXBlb2YgVHJhbnNsYXRvcjsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1RyYW5zbGF0b3JFeGNlcHRpb24udHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdG9yRXhjZXB0aW9uLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZGE2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdG9yRXhjZXB0aW9uLnRzCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFRocm93biB3aGVuIGEgR3JlbWxpbiBzdHJpbmcgY2Fubm90IGJlIHRyYW5zbGF0ZWQgdG8gdGhlIHRhcmdldCBsYW5ndWFnZS4KKyAqLworZXhwb3J0IGNsYXNzIFRyYW5zbGF0b3JFeGNlcHRpb24gZXh0ZW5kcyBFcnJvciB7CisgICAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UpOworICAgICAgICB0aGlzLm5hbWUgPSAnVHJhbnNsYXRvckV4Y2VwdGlvbic7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvYW5vbnltb3VzLXRyYXZlcnNhbC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzMjczNQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwudHMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgUmVtb3RlQ29ubmVjdGlvbiwgUmVtb3RlU3RyYXRlZ3kgfSBmcm9tICcuLi9kcml2ZXIvcmVtb3RlLWNvbm5lY3Rpb24uanMnOworaW1wb3J0IHsgR3JhcGggfSBmcm9tICcuLi9zdHJ1Y3R1cmUvZ3JhcGguanMnOworaW1wb3J0IHsgR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIEdyYXBoVHJhdmVyc2FsIH0gZnJvbSAnLi9ncmFwaC10cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcyB9IGZyb20gJy4vdHJhdmVyc2FsLXN0cmF0ZWd5LmpzJzsKK2ltcG9ydCBHcmVtbGluTGFuZyBmcm9tICcuL2dyZW1saW4tbGFuZy5qcyc7CisKKy8qKgorICogUHJvdmlkZXMgYSB1bmlmaWVkIHdheSB0byBjb25zdHJ1Y3QgYSA8Y29kZT5UcmF2ZXJzYWxTb3VyY2U8L2NvZGU+IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSB0cmF2ZXJzYWwuIEluIHRoaXMKKyAqIHN5bnRheCB0aGUgdXNlciBpcyBjcmVhdGluZyB0aGUgc291cmNlIGFuZCBiaW5kaW5nIGl0IHRvIGEgcmVmZXJlbmNlIHdoaWNoIGlzIGVpdGhlciBhbiBleGlzdGluZyA8Y29kZT5HcmFwaDwvY29kZT4KKyAqIGluc3RhbmNlIG9yIGEgPGNvZGU+UmVtb3RlQ29ubmVjdGlvbjwvY29kZT4uCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEFub255bW91c1RyYXZlcnNhbFNvdXJjZSB7CisgIC8qKgorICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIGBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2VgLgorICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdHJhdmVyc2FsU291cmNlQ2xhc3NdIE9wdGlvbmFsIGBHcmFwaFRyYXZlcnNhbFNvdXJjZWAgY29uc3RydWN0b3IuCisgICAqIEBwYXJhbSB7RnVuY3Rpb259IFt0cmF2ZXJzYWxDbGFzc10gT3B0aW9uYWwgYEdyYXBoVHJhdmVyc2FsYCBjb25zdHJ1Y3Rvci4KKyAgICovCisgIGNvbnN0cnVjdG9yKAorICAgIHJlYWRvbmx5IHRyYXZlcnNhbFNvdXJjZUNsYXNzPzogdHlwZW9mIEdyYXBoVHJhdmVyc2FsU291cmNlLAorICAgIHJlYWRvbmx5IHRyYXZlcnNhbENsYXNzPzogdHlwZW9mIEdyYXBoVHJhdmVyc2FsLAorICApIHt9CisKKyAgLyoqCisgICAqIENvbnN0cnVjdHMgYW4gYEFub255bW91c1RyYXZlcnNhbFNvdXJjZWAgd2hpY2ggd2lsbCB0aGVuIGJlIGNvbmZpZ3VyZWQgdG8gc3Bhd24gYQorICAgKiB7QGxpbmsgR3JhcGhUcmF2ZXJzYWxTb3VyY2V9LgorICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdHJhdmVyc2FsU291cmNlQ2xhc3NdIE9wdGlvbmFsIGBHcmFwaFRyYXZlcnNhbFNvdXJjZWAgY29uc3RydWN0b3IuCisgICAqIEBwYXJhbSB7RnVuY3Rpb259IFt0cmF2ZXJzYWxDbGFzc10gT3B0aW9uYWwgYEdyYXBoVHJhdmVyc2FsU291cmNlYCBjb25zdHJ1Y3Rvci4KKyAgICogQHJldHVybnMge0Fub255bW91c1RyYXZlcnNhbFNvdXJjZX0uCisgICAqLworICBzdGF0aWMgdHJhdmVyc2FsKHRyYXZlcnNhbFNvdXJjZUNsYXNzPzogdHlwZW9mIEdyYXBoVHJhdmVyc2FsU291cmNlLCB0cmF2ZXJzYWxDbGFzcz86IHR5cGVvZiBHcmFwaFRyYXZlcnNhbCkgeworICAgIHJldHVybiBuZXcgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlKHRyYXZlcnNhbFNvdXJjZUNsYXNzIHx8IEdyYXBoVHJhdmVyc2FsU291cmNlLCB0cmF2ZXJzYWxDbGFzcyB8fCBHcmFwaFRyYXZlcnNhbCk7CisgIH0KKworICAvKioKKyAgICogQ3JlYXRlcyBhIHtAbGluayBHcmFwaFRyYXZlcnNhbFNvdXJjZX0gYmluZGluZyBhIHtAbGluayBSZW1vdGVDb25uZWN0aW9ufSB0byBhIHJlbW90ZSB7QGxpbmsgR3JhcGh9IGluc3RhbmNlcyBhcyBpdHMKKyAgICogcmVmZXJlbmNlIHNvIHRoYXQgdHJhdmVyc2FscyBzcGF3bmVkIGZyb20gaXQgd2lsbCBleGVjdXRlIG92ZXIgdGhhdCByZWZlcmVuY2UuCisgICAqIEBwYXJhbSB7UmVtb3RlQ29ubmVjdGlvbn0gY29ubmVjdGlvbgorICAgKiBAcmV0dXJuIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KKyAgICovCisgIHdpdGhfKGNvbm5lY3Rpb246IFJlbW90ZUNvbm5lY3Rpb24pIHsKKyAgICBjb25zdCB0cmF2ZXJzYWxTdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKKyAgICB0cmF2ZXJzYWxTdHJhdGVnaWVzLmFkZFN0cmF0ZWd5KG5ldyBSZW1vdGVTdHJhdGVneShjb25uZWN0aW9uKSk7CisgICAgcmV0dXJuIG5ldyB0aGlzLnRyYXZlcnNhbFNvdXJjZUNsYXNzISgKKyAgICAgIG5ldyBHcmFwaCgpLAorICAgICAgdHJhdmVyc2FsU3RyYXRlZ2llcywKKyAgICAgIG5ldyBHcmVtbGluTGFuZygpLAorICAgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2VDbGFzcywKKyAgICAgIHRoaXMudHJhdmVyc2FsQ2xhc3MsCisgICAgKTsKKyAgfQorCisgIC8qKgorICAgKiBDcmVhdGVzIGEge0BsaW5rIEdyYXBoVHJhdmVyc2FsU291cmNlfSBiaW5kaW5nIGEge0BsaW5rIFJlbW90ZUNvbm5lY3Rpb259IHRvIGEgcmVtb3RlIHtAbGluayBHcmFwaH0gaW5zdGFuY2VzIGFzIGl0cworICAgKiByZWZlcmVuY2Ugc28gdGhhdCB0cmF2ZXJzYWxzIHNwYXduZWQgZnJvbSBpdCB3aWxsIGV4ZWN1dGUgb3ZlciB0aGF0IHJlZmVyZW5jZS4KKyAgICogQHBhcmFtIHtSZW1vdGVDb25uZWN0aW9ufSByZW1vdGVDb25uZWN0aW9uCisgICAqIEByZXR1cm4ge0dyYXBoVHJhdmVyc2FsU291cmNlfQorICAgKiBAZGVwcmVjYXRlZCBBcyBvZiByZWxlYXNlIDMuOC4wLCBwcmVmZXIge0BsaW5rIHdpdGhffS4KKyAgICovCisgIHdpdGhSZW1vdGUocmVtb3RlQ29ubmVjdGlvbjogUmVtb3RlQ29ubmVjdGlvbikgeworICAgIHJldHVybiB0aGlzLndpdGhfKHJlbW90ZUNvbm5lY3Rpb24pOworICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzNjJhMQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbC50cwpAQCAtMCwwICsxLDE5MDcgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCisgKi8KKworaW1wb3J0IHsgRW51bVZhbHVlLCBUcmF2ZXJzYWwsIGNhcmRpbmFsaXR5LCBkaXJlY3Rpb24gfSBmcm9tICcuL3RyYXZlcnNhbC5qcyc7CitpbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24uanMnOworaW1wb3J0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcywgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LCBPcHRpb25zU3RyYXRlZ3kgfSBmcm9tICcuL3RyYXZlcnNhbC1zdHJhdGVneS5qcyc7CitpbXBvcnQge0dyYXBoLCBWZXJ0ZXh9IGZyb20gJy4uL3N0cnVjdHVyZS9ncmFwaC5qcyc7CitpbXBvcnQgeyBSZW1vdGVDb25uZWN0aW9uLCBSZW1vdGVTdHJhdGVneSB9IGZyb20gJy4uL2RyaXZlci9yZW1vdGUtY29ubmVjdGlvbi5qcyc7CitpbXBvcnQgR3JlbWxpbkxhbmcgZnJvbSAnLi9ncmVtbGluLWxhbmcuanMnOworCisvKioKKyAqIFJlcHJlc2VudHMgdGhlIHByaW1hcnkgRFNMIG9mIHRoZSBHcmVtbGluIHRyYXZlcnNhbCBtYWNoaW5lLgorICovCitleHBvcnQgY2xhc3MgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgeworICByZW1vdGVDb25uZWN0aW9uPzogUmVtb3RlQ29ubmVjdGlvbjsKKworICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgR3JhcGhUcmF2ZXJzYWxTb3VyY2V9LgorICAgKiBAcGFyYW0ge0dyYXBofSBncmFwaAorICAgKiBAcGFyYW0ge1RyYXZlcnNhbFN0cmF0ZWdpZXN9IHRyYXZlcnNhbFN0cmF0ZWdpZXMKKyAgICogQHBhcmFtIHtHcmVtbGluTGFuZ30gW2dyZW1saW5MYW5nXSBPcHRpb25hbCBHcmVtbGluTGFuZyBpbnN0YW5jZS4KKyAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2dyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3NdIE9wdGlvbmFsIHtAbGluayBHcmFwaFRyYXZlcnNhbFNvdXJjZX0gY29uc3RydWN0b3IuCisgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtncmFwaFRyYXZlcnNhbENsYXNzXSBPcHRpb25hbCB7QGxpbmsgR3JhcGhUcmF2ZXJzYWx9IGNvbnN0cnVjdG9yLgorICAgKi8KKyAgY29uc3RydWN0b3IoCisgICAgcHVibGljIGdyYXBoOiBHcmFwaCwKKyAgICBwdWJsaWMgdHJhdmVyc2FsU3RyYXRlZ2llczogVHJhdmVyc2FsU3RyYXRlZ2llcywKKyAgICBwdWJsaWMgZ3JlbWxpbkxhbmc6IEdyZW1saW5MYW5nID0gbmV3IEdyZW1saW5MYW5nKCksCisgICAgcHVibGljIGdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3M6IHR5cGVvZiBHcmFwaFRyYXZlcnNhbFNvdXJjZSA9IEdyYXBoVHJhdmVyc2FsU291cmNlLAorICAgIHB1YmxpYyBncmFwaFRyYXZlcnNhbENsYXNzOiB0eXBlb2YgR3JhcGhUcmF2ZXJzYWwgPSBHcmFwaFRyYXZlcnNhbCwKKyAgKSB7CisgICAgY29uc3Qgc3RyYXQgPSB0cmF2ZXJzYWxTdHJhdGVnaWVzLnN0cmF0ZWdpZXMuZmluZCgodHMpID0+IHRzLnN0cmF0ZWd5TmFtZSA9PT0gJ1JlbW90ZVN0cmF0ZWd5Jyk7CisgICAgdGhpcy5yZW1vdGVDb25uZWN0aW9uID0gc3RyYXQgIT09IHVuZGVmaW5lZCA/IHN0cmF0LmNvbm5lY3Rpb24gOiB1bmRlZmluZWQ7CisgIH0KKworICAvKioKKyAgICogU3Bhd24gYSBuZXcgPGNvZGU+VHJhbnNhY3Rpb248L2NvZGU+IG9iamVjdCB0aGF0IGNhbiB0aGVuIHN0YXJ0IGFuZCBzdG9wIGEgdHJhbnNhY3Rpb24uCisgICAqIEByZXR1cm5zIHtUcmFuc2FjdGlvbn0KKyAgICovCisgIHR4KCk6IFRyYW5zYWN0aW9uIHsKKyAgICAvLyB5b3UgY2FuJ3QgZG8gZy50eCgpLmJlZ2luKCkudHgoKSAtIG5vIGNoaWxkIHRyYW5zYWN0aW9ucworICAgIGlmICh0aGlzLnJlbW90ZUNvbm5lY3Rpb24pIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBUcmF2ZXJzYWxTb3VyY2UgaXMgYWxyZWFkeSBib3VuZCB0byBhIHRyYW5zYWN0aW9uIC0gY2hpbGQgdHJhbnNhY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkJyk7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih0aGlzKTsKKyAgfQorCisgIC8qKgorICAgKiBAcGFyYW0gZ3JhcGhDb21wdXRlcgorICAgKiBAcGFyYW0gd29ya2VycworICAgKiBAcGFyYW0gcmVzdWx0CisgICAqIEBwYXJhbSBwZXJzaXN0CisgICAqIEBwYXJhbSB2ZXJ0aWNlcworICAgKiBAcGFyYW0gZWRnZXMKKyAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24KKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsU291cmNlfQorICAgKi8KKyAgd2l0aENvbXB1dGVyKAorICAgIGdyYXBoQ29tcHV0ZXI6IGFueSwKKyAgICB3b3JrZXJzOiBhbnksCisgICAgcmVzdWx0OiBhbnksCisgICAgcGVyc2lzdDogYW55LAorICAgIHZlcnRpY2VzOiBhbnlbXSwKKyAgICBlZGdlczogYW55W10sCisgICAgY29uZmlndXJhdGlvbjogYW55LAorICApOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CisgICAgY29uc3QgbTogYW55ID0ge307CisgICAgaWYgKGdyYXBoQ29tcHV0ZXIgIT09IHVuZGVmaW5lZCkgeworICAgICAgbS5ncmFwaENvbXB1dGVyID0gZ3JhcGhDb21wdXRlcjsKKyAgICB9CisgICAgaWYgKHdvcmtlcnMgIT09IHVuZGVmaW5lZCkgeworICAgICAgbS53b3JrZXJzID0gd29ya2VyczsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICBtLnJlc3VsdCA9IHJlc3VsdDsKKyAgICB9CisgICAgaWYgKHBlcnNpc3QgIT09IHVuZGVmaW5lZCkgeworICAgICAgbS5ncmFwaENvbXB1dGVyID0gcGVyc2lzdDsKKyAgICB9CisgICAgaWYgKHZlcnRpY2VzICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIG0udmVydGljZXMgPSB2ZXJ0aWNlczsKKyAgICB9CisgICAgaWYgKGVkZ2VzICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIG0uZWRnZXMgPSBlZGdlczsKKyAgICB9CisgICAgaWYgKGNvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkgeworICAgICAgbS5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1TdHJhdGVneShtKSk7CisgIH0KKworICAvKioKKyAgICogR3JhcGggVHJhdmVyc2FsIFNvdXJjZSB3aXRoIG1ldGhvZC4KKyAgICogQHBhcmFtIHtTdHJpbmd9IGtleQorICAgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgaWYgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlIHdpdGggZGVmYXVsdCB0byBgdHJ1ZWAKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsU291cmNlfQorICAgKi8KKyAgd2l0aF8oa2V5OiBzdHJpbmcsIHZhbHVlOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CisgICAgY29uc3QgdmFsID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB2YWx1ZTsKKyAgICBjb25zdCBnbFN0cmF0ZWdpZXMgPSB0aGlzLmdyZW1saW5MYW5nLmdldE9wdGlvbnNTdHJhdGVnaWVzKCk7CisgICAgaWYgKGdsU3RyYXRlZ2llcy5sZW5ndGggPT09IDApIHsKKyAgICAgIHJldHVybiB0aGlzLndpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3koeyBba2V5XTogdmFsIH0pKTsKKyAgICB9CisgICAgZ2xTdHJhdGVnaWVzW2dsU3RyYXRlZ2llcy5sZW5ndGggLSAxXS5jb25maWd1cmF0aW9uW2tleV0gPSB2YWw7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZyk7CisgICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MoCisgICAgICB0aGlzLmdyYXBoLAorICAgICAgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwKKyAgICAgIGdsLAorICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzLAorICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzLAorICAgICk7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBHcmFwaFRyYXZlcnNhbFNvdXJjZS4KKyAgICogQHJldHVybnMge3N0cmluZ30KKyAgICovCisgIHRvU3RyaW5nKCk6IHN0cmluZyB7CisgICAgcmV0dXJuICdncmFwaHRyYXZlcnNhbHNvdXJjZVsnICsgdGhpcy5ncmFwaC50b1N0cmluZygpICsgJ10nOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIFRyYXZlcnNhbCBTb3VyY2Ugd2l0aEJ1bGsgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9CisgICAqLworICB3aXRoQnVsayguLi5hcmdzOiBhbnlbXSk6IEdyYXBoVHJhdmVyc2FsU291cmNlIHsKKyAgICBjb25zdCBnbCA9IG5ldyBHcmVtbGluTGFuZyh0aGlzLmdyZW1saW5MYW5nKS5hZGRTb3VyY2UoJ3dpdGhCdWxrJywgYXJncyk7CisgICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MoCisgICAgICB0aGlzLmdyYXBoLAorICAgICAgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwKKyAgICAgIGdsLAorICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzLAorICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzLAorICAgICk7CisgIH0KKworICAvKioKKyAgICogR3JhcGggVHJhdmVyc2FsIFNvdXJjZSB3aXRoUGF0aCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KKyAgICovCisgIHdpdGhQYXRoKC4uLmFyZ3M6IGFueVtdKTogR3JhcGhUcmF2ZXJzYWxTb3VyY2UgeworICAgIGNvbnN0IGdsID0gbmV3IEdyZW1saW5MYW5nKHRoaXMuZ3JlbWxpbkxhbmcpLmFkZFNvdXJjZSgnd2l0aFBhdGgnLCBhcmdzKTsKKyAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcygKKyAgICAgIHRoaXMuZ3JhcGgsCisgICAgICBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLAorICAgICAgZ2wsCisgICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MsCisgICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3MsCisgICAgKTsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCBUcmF2ZXJzYWwgU291cmNlIHdpdGhTYWNrIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsU291cmNlfQorICAgKi8KKyAgd2l0aFNhY2soLi4uYXJnczogYW55W10pOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU291cmNlKCd3aXRoU2FjaycsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzKAorICAgICAgdGhpcy5ncmFwaCwKKyAgICAgIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksCisgICAgICBnbCwKKyAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcywKKyAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcywKKyAgICApOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIFRyYXZlcnNhbCBTb3VyY2Ugd2l0aFNpZGVFZmZlY3QgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9CisgICAqLworICB3aXRoU2lkZUVmZmVjdCguLi5hcmdzOiBhbnlbXSk6IEdyYXBoVHJhdmVyc2FsU291cmNlIHsKKyAgICBjb25zdCBnbCA9IG5ldyBHcmVtbGluTGFuZyh0aGlzLmdyZW1saW5MYW5nKS5hZGRTb3VyY2UoJ3dpdGhTaWRlRWZmZWN0JywgYXJncyk7CisgICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MoCisgICAgICB0aGlzLmdyYXBoLAorICAgICAgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwKKyAgICAgIGdsLAorICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzLAorICAgICAgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzLAorICAgICk7CisgIH0KKworICAvKioKKyAgICogR3JhcGggVHJhdmVyc2FsIFNvdXJjZSB3aXRoU3RyYXRlZ2llcyBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbFNvdXJjZX0KKyAgICovCisgIHdpdGhTdHJhdGVnaWVzKC4uLmFyZ3M6IGFueVtdKTogR3JhcGhUcmF2ZXJzYWxTb3VyY2UgeworICAgIGNvbnN0IGdsID0gbmV3IEdyZW1saW5MYW5nKHRoaXMuZ3JlbWxpbkxhbmcpLmFkZFNvdXJjZSgnd2l0aFN0cmF0ZWdpZXMnLCBhcmdzKTsKKyAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcygKKyAgICAgIHRoaXMuZ3JhcGgsCisgICAgICBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLAorICAgICAgZ2wsCisgICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsU291cmNlQ2xhc3MsCisgICAgICB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3MsCisgICAgKTsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCBUcmF2ZXJzYWwgU291cmNlIHdpdGhvdXRTdHJhdGVnaWVzIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsU291cmNlfQorICAgKi8KKyAgd2l0aG91dFN0cmF0ZWdpZXMoLi4uYXJnczogYW55W10pOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU291cmNlKCd3aXRob3V0U3RyYXRlZ2llcycsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbFNvdXJjZUNsYXNzKAorICAgICAgdGhpcy5ncmFwaCwKKyAgICAgIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksCisgICAgICBnbCwKKyAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxTb3VyY2VDbGFzcywKKyAgICAgIHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcywKKyAgICApOworICB9CisKKyAgLyoqCisgICAqIEUgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc3RlcCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIEUoLi4uYXJnczogYW55W10pOiBHcmFwaFRyYXZlcnNhbCB7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU3RlcCgnRScsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzKHRoaXMuZ3JhcGgsIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksIGdsKTsKKyAgfQorCisgIC8qKgorICAgKiBWIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBWKC4uLmFyZ3M6IGFueVtdKTogR3JhcGhUcmF2ZXJzYWwgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKGFyZ3NbaV0gaW5zdGFuY2VvZiBWZXJ0ZXgpIHsKKyAgICAgICAgYXJnc1tpXSA9IGFyZ3NbaV0uaWQKKyAgICAgIH0KKyAgICB9CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU3RlcCgnVicsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzKHRoaXMuZ3JhcGgsIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksIGdsKTsKKyAgfQorCisgIC8qKgorICAgKiBhZGRFIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhZGRFKC4uLmFyZ3M6IGFueVtdKTogR3JhcGhUcmF2ZXJzYWwgeworICAgIGNvbnN0IGdsID0gbmV3IEdyZW1saW5MYW5nKHRoaXMuZ3JlbWxpbkxhbmcpLmFkZFN0ZXAoJ2FkZEUnLCBhcmdzKTsKKyAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcyh0aGlzLmdyYXBoLCBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLCBnbCk7CisgIH0KKworICAvKioKKyAgICogbWVyZ2VWIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBtZXJnZUUoLi4uYXJnczogYW55W10pOiBHcmFwaFRyYXZlcnNhbCB7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU3RlcCgnbWVyZ2VFJywgYXJncyk7CisgICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgZ2wpOworICB9CisKKyAgLyoqCisgICAqIGFkZFYgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc3RlcCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGFkZFYoLi4uYXJnczogYW55W10pOiBHcmFwaFRyYXZlcnNhbCB7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU3RlcCgnYWRkVicsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzKHRoaXMuZ3JhcGgsIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksIGdsKTsKKyAgfQorCisgIC8qKgorICAgKiBtZXJnZVYgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc3RlcCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIG1lcmdlViguLi5hcmdzOiBhbnlbXSk6IEdyYXBoVHJhdmVyc2FsIHsKKyAgICBjb25zdCBnbCA9IG5ldyBHcmVtbGluTGFuZyh0aGlzLmdyZW1saW5MYW5nKS5hZGRTdGVwKCdtZXJnZVYnLCBhcmdzKTsKKyAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcyh0aGlzLmdyYXBoLCBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLCBnbCk7CisgIH0KKworICAvKioKKyAgICogaW5qZWN0IEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBpbmplY3QoLi4uYXJnczogYW55W10pOiBHcmFwaFRyYXZlcnNhbCB7CisgICAgY29uc3QgZ2wgPSBuZXcgR3JlbWxpbkxhbmcodGhpcy5ncmVtbGluTGFuZykuYWRkU3RlcCgnaW5qZWN0JywgYXJncyk7CisgICAgcmV0dXJuIG5ldyB0aGlzLmdyYXBoVHJhdmVyc2FsQ2xhc3ModGhpcy5ncmFwaCwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXModGhpcy50cmF2ZXJzYWxTdHJhdGVnaWVzKSwgZ2wpOworICB9CisKKyAgLyoqCisgICAqIGlvIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBpbyguLi5hcmdzOiBhbnlbXSk6IEdyYXBoVHJhdmVyc2FsIHsKKyAgICBjb25zdCBnbCA9IG5ldyBHcmVtbGluTGFuZyh0aGlzLmdyZW1saW5MYW5nKS5hZGRTdGVwKCdpbycsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzKHRoaXMuZ3JhcGgsIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksIGdsKTsKKyAgfQorCisgIC8qKgorICAgKiBjYWxsIEdyYXBoVHJhdmVyc2FsU291cmNlIHN0ZXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBjYWxsKC4uLmFyZ3M6IGFueVtdKTogR3JhcGhUcmF2ZXJzYWwgeworICAgIGNvbnN0IGdsID0gbmV3IEdyZW1saW5MYW5nKHRoaXMuZ3JlbWxpbkxhbmcpLmFkZFN0ZXAoJ2NhbGwnLCBhcmdzKTsKKyAgICByZXR1cm4gbmV3IHRoaXMuZ3JhcGhUcmF2ZXJzYWxDbGFzcyh0aGlzLmdyYXBoLCBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcyh0aGlzLnRyYXZlcnNhbFN0cmF0ZWdpZXMpLCBnbCk7CisgIH0KKworICAvKioKKyAgICogdW5pb24gR3JhcGhUcmF2ZXJzYWxTb3VyY2UgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB1bmlvbiguLi5hcmdzOiBhbnlbXSk6IEdyYXBoVHJhdmVyc2FsIHsKKyAgICBjb25zdCBnbCA9IG5ldyBHcmVtbGluTGFuZyh0aGlzLmdyZW1saW5MYW5nKS5hZGRTdGVwKCd1bmlvbicsIGFyZ3MpOworICAgIHJldHVybiBuZXcgdGhpcy5ncmFwaFRyYXZlcnNhbENsYXNzKHRoaXMuZ3JhcGgsIG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcyksIGdsKTsKKyAgfQorfQorCisvKioKKyAqIFJlcHJlc2VudHMgYSBncmFwaCB0cmF2ZXJzYWwuCisgKi8KK2V4cG9ydCBjbGFzcyBHcmFwaFRyYXZlcnNhbCBleHRlbmRzIFRyYXZlcnNhbCB7CisgIGNvbnN0cnVjdG9yKGdyYXBoOiBHcmFwaCB8IG51bGwsIHRyYXZlcnNhbFN0cmF0ZWdpZXM6IFRyYXZlcnNhbFN0cmF0ZWdpZXMgfCBudWxsLCBncmVtbGluTGFuZz86IEdyZW1saW5MYW5nKSB7CisgICAgc3VwZXIoZ3JhcGgsIHRyYXZlcnNhbFN0cmF0ZWdpZXMsIGdyZW1saW5MYW5nKTsKKyAgfQorCisgIC8qKgorICAgKiBDb3B5IGEgdHJhdmVyc2FsIHNvIGFzIHRvIHJlc2V0IGFuZCByZS11c2UgaXQuCisgICAqLworICBjbG9uZSgpIHsKKyAgICByZXR1cm4gbmV3IEdyYXBoVHJhdmVyc2FsKHRoaXMuZ3JhcGgsIHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcywgbmV3IEdyZW1saW5MYW5nKHRoaXMuZ3JlbWxpbkxhbmcpKTsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgViBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIFYoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmIChhcmdzW2ldIGluc3RhbmNlb2YgVmVydGV4KSB7CisgICAgICAgIGFyZ3NbaV0gPSBhcmdzW2ldLmlkCisgICAgICB9CisgICAgfQorICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnVicsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBFIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgRSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnRScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhZGRFIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgYWRkRSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnYWRkRScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhZGRWIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgYWRkViguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnYWRkVicsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhZ2dyZWdhdGUgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhZ2dyZWdhdGUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2FnZ3JlZ2F0ZScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhbGwgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhbGwoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2FsbCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhbmQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhbmQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2FuZCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhbnkgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhbnkoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2FueScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhcyBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGFzKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdhcycsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhc0Jvb2wgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhc0Jvb2woLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2FzQm9vbCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhc0RhdGUgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBhc0RhdGUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2FzRGF0ZScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhc051bWJlciBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGFzTnVtYmVyKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdhc051bWJlcicsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBhc1N0cmluZyBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGFzU3RyaW5nKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdhc1N0cmluZycsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBiYXJyaWVyIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgYmFycmllciguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnYmFycmllcicsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBib3RoIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgYm90aCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnYm90aCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBib3RoRSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGJvdGhFKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdib3RoRScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBib3RoViBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGJvdGhWKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdib3RoVicsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBicmFuY2ggbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBicmFuY2goLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2JyYW5jaCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBieSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGJ5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdieScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBjYWxsIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgY2FsbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnY2FsbCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY2FwIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgY2FwKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdjYXAnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY2hvb3NlIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgY2hvb3NlKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdjaG9vc2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29hbGVzY2UgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBjb2FsZXNjZSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnY29hbGVzY2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29pbiBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGNvaW4oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2NvaW4nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29tYmluZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGNvbWJpbmUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2NvbWJpbmUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29uY2F0IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgY29uY2F0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdjb25jYXQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29uam9pbiBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGNvbmpvaW4oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2NvbmpvaW4nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29ubmVjdGVkQ29tcG9uZW50IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgY29ubmVjdGVkQ29tcG9uZW50KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdjb25uZWN0ZWRDb21wb25lbnQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY29uc3RhbnQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBjb25zdGFudCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnY29uc3RhbnQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY291bnQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBjb3VudCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnY291bnQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgY3ljbGljUGF0aCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGN5Y2xpY1BhdGgoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2N5Y2xpY1BhdGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGF0ZUFkZCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGRhdGVBZGQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2RhdGVBZGQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGF0ZURpZmYgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBkYXRlRGlmZiguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZGF0ZURpZmYnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGVkdXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBkZWR1cCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZGVkdXAnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGlmZmVyZW5jZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGRpZmZlcmVuY2UoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2RpZmZlcmVuY2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGlzY2FyZCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGRpc2NhcmQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2Rpc2NhcmQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZGlzanVuY3QgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBkaXNqdW5jdCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZGlzanVuY3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZHJvcCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGRyb3AoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2Ryb3AnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgZWxlbWVudCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGVsZW1lbnQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2VsZW1lbnQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIGVsZW1lbnRNYXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBlbGVtZW50TWFwKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdlbGVtZW50TWFwJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIGVtaXQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBlbWl0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdlbWl0JywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIGZhIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgZmFpbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZmFpbCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBmaWx0ZXIgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBmaWx0ZXIoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2ZpbHRlcicsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBmbGF0TWFwIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgZmxhdE1hcCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZmxhdE1hcCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBmb2xkIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgZm9sZCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZm9sZCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBmb3JtYXQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBmb3JtYXQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2Zvcm1hdCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBmcm9tIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgZnJvbV8oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmIChhcmdzW2ldIGluc3RhbmNlb2YgVmVydGV4KSB7CisgICAgICAgIGFyZ3NbaV0gPSBhcmdzW2ldLmlkCisgICAgICB9CisgICAgfQorICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZnJvbScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBncm91cCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGdyb3VwKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdncm91cCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBncm91cENvdW50IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgZ3JvdXBDb3VudCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZ3JvdXBDb3VudCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBoYXMgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBoYXMoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2hhcycsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBoYXNJZCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGhhc0lkKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdoYXNJZCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBoYXNLZXkgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBoYXNLZXkoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2hhc0tleScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBoYXNMYWJlbCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGhhc0xhYmVsKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdoYXNMYWJlbCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBoYXNOb3QgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBoYXNOb3QoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ2hhc05vdCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBoYXNWYWx1ZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGhhc1ZhbHVlKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdoYXNWYWx1ZScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBpZCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGlkKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdpZCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBpZGVudGl0eSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGlkZW50aXR5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdpZGVudGl0eScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBpbiBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIGluXyguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnaW4nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW5FIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgaW5FKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdpbkUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW5WIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgaW5WKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdpblYnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW5kZXggbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBpbmRleCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnaW5kZXgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW5qZWN0IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgaW5qZWN0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdpbmplY3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgaW50ZXJzZWN0IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgaW50ZXJzZWN0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdpbnRlcnNlY3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgaXMgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBpcyguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnaXMnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwga2V5IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAga2V5KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdrZXknLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbGFiZWwgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBsYWJlbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbGFiZWwnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbGVuZ3RoIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbGVuZ3RoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdsZW5ndGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbGltaXQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBsaW1pdCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbGltaXQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbG9jYWwgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBsb2NhbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbG9jYWwnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbG9vcHMgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBsb29wcyguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbG9vcHMnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbFRyaW0gbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBsVHJpbSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbFRyaW0nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWFwIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbWFwKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdtYXAnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWF0Y2ggbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBtYXRjaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbWF0Y2gnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWF0aCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIG1hdGgoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ21hdGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWF4IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbWF4KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdtYXgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWVhbiBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIG1lYW4oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ21lYW4nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWVyZ2UgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBtZXJnZSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnbWVyZ2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWVyZ2VFIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbWVyZ2VFKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdtZXJnZUUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWVyZ2VWIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbWVyZ2VWKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdtZXJnZVYnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbWluIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbWluKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdtaW4nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbm9uZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIG5vbmUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ25vbmUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgbm90IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgbm90KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdub3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3B0aW9uIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgb3B0aW9uKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdvcHRpb24nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3B0aW9uYWwgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBvcHRpb25hbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnb3B0aW9uYWwnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3IgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBvciguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnb3InLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3JkZXIgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBvcmRlciguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnb3JkZXInLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3RoZXJWIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgb3RoZXJWKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdvdGhlclYnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3V0IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgb3V0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdvdXQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3V0RSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIG91dEUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ291dEUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgb3V0ViBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIG91dFYoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ291dFYnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcGFnZVJhbmsgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBwYWdlUmFuayguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgncGFnZVJhbmsnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcGF0aCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHBhdGgoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3BhdGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcGVlclByZXNzdXJlIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgcGVlclByZXNzdXJlKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdwZWVyUHJlc3N1cmUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvZHVjdCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHByb2R1Y3QoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3Byb2R1Y3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvZmlsZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHByb2ZpbGUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3Byb2ZpbGUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvZ3JhbSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHByb2dyYW0oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3Byb2dyYW0nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvamVjdCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHByb2plY3QoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3Byb2plY3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvcGVydGllcyBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHByb3BlcnRpZXMoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3Byb3BlcnRpZXMnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvcGVydHkgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBwcm9wZXJ0eSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgncHJvcGVydHknLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcHJvcGVydHlNYXAgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBwcm9wZXJ0eU1hcCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgncHJvcGVydHlNYXAnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmFuZ2UgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICByYW5nZSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgncmFuZ2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmVhZCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHJlYWQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3JlYWQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmVwZWF0IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgcmVwZWF0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdyZXBlYXQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmVwbGFjZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHJlcGxhY2UoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3JlcGxhY2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgcmV2ZXJzZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHJldmVyc2UoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3JldmVyc2UnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgclRyaW0gbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICByVHJpbSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnclRyaW0nLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2FjayBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHNhY2soLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3NhY2snLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2FtcGxlIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgc2FtcGxlKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdzYW1wbGUnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2VsZWN0IG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgc2VsZWN0KC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdzZWxlY3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2hvcnRlc3RQYXRoIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgc2hvcnRlc3RQYXRoKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCdzaG9ydGVzdFBhdGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2lkZUVmZmVjdCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHNpZGVFZmZlY3QoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3NpZGVFZmZlY3QnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2ltcGxlUGF0aCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHNpbXBsZVBhdGgoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3NpbXBsZVBhdGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc2tpcCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHNraXAoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3NraXAnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc3BsaXQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBzcGxpdCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnc3BsaXQnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc3ViZ3JhcGggbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBzdWJncmFwaCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnc3ViZ3JhcGgnLCBhcmdzKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCisgIC8qKgorICAgKiBHcmFwaCB0cmF2ZXJzYWwgc3ViZ3JhcGggbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBzdWJzdHJpbmcoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3N1YnN0cmluZycsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCBzdW0gbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICBzdW0oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3N1bScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCB0YWlsIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgdGFpbCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgndGFpbCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCB0aW1lTGltaXQgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB0aW1lTGltaXQoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3RpbWVMaW1pdCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCB0aW1lcyBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHRpbWVzKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCd0aW1lcycsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCB0byBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHRvKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7CisgICAgICBpZiAoYXJnc1tpXSBpbnN0YW5jZW9mIFZlcnRleCkgeworICAgICAgICBhcmdzW2ldID0gYXJnc1tpXS5pZAorICAgICAgfQorICAgIH0KKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3RvJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHRvRSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHRvRSguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgndG9FJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHRvTG93ZXIgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB0b0xvd2VyKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCd0b0xvd2VyJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHRvVXBwZXIgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB0b1VwcGVyKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCd0b1VwcGVyJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHRvViBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHRvViguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgndG9WJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHRyZWUgbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB0cmVlKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCd0cmVlJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHRyaW0gbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB0cmltKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCd0cmltJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHVuZm9sZCBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHVuZm9sZCguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgndW5mb2xkJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHVuaW9uIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgdW5pb24oLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3VuaW9uJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHVudGlsIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgdW50aWwoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3VudGlsJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHZhbHVlIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgdmFsdWUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3ZhbHVlJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHZhbHVlTWFwIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgdmFsdWVNYXAoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3ZhbHVlTWFwJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHZhbHVlcyBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHZhbHVlcyguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgndmFsdWVzJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHdoZXJlIG1ldGhvZC4KKyAgICogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MKKyAgICogQHJldHVybnMge0dyYXBoVHJhdmVyc2FsfQorICAgKi8KKyAgd2hlcmUoLi4uYXJnczogYW55W10pOiB0aGlzIHsKKyAgICB0aGlzLmdyZW1saW5MYW5nLmFkZFN0ZXAoJ3doZXJlJywgYXJncyk7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKioKKyAgICogR3JhcGggdHJhdmVyc2FsIHdpdGggbWV0aG9kLgorICAgKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncworICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWx9CisgICAqLworICB3aXRoXyguLi5hcmdzOiBhbnlbXSk6IHRoaXMgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnd2l0aCcsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9CisKKyAgLyoqCisgICAqIEdyYXBoIHRyYXZlcnNhbCB3cml0ZSBtZXRob2QuCisgICAqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzCisgICAqIEByZXR1cm5zIHtHcmFwaFRyYXZlcnNhbH0KKyAgICovCisgIHdyaXRlKC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7CisgICAgdGhpcy5ncmVtbGluTGFuZy5hZGRTdGVwKCd3cml0ZScsIGFyZ3MpOworICAgIHJldHVybiB0aGlzOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBDYXJkaW5hbGl0eVZhbHVlIGV4dGVuZHMgR3JlbWxpbkxhbmcgeworICAvKioKKyAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgQ2FyZGluYWxpdHlWYWx1ZX0uCisgICAqIEBwYXJhbSB7U3RyaW5nfSBjYXJkCisgICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZQorICAgKi8KKyAgY29uc3RydWN0b3IoY2FyZDogc3RyaW5nIHwgRW51bVZhbHVlLCB2YWx1ZTogYW55KSB7CisgICAgc3VwZXIoKTsKKyAgICB0aGlzLmFkZFNvdXJjZSgnQ2FyZGluYWxpdHlWYWx1ZVRyYXZlcnNhbCcsIFtjYXJkLCB2YWx1ZV0pOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIHZhbHVlIHdpdGggc2luZ2xlIGNhcmRpbmFsaXR5LgorICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZQorICAgKiBAcmV0dXJucyB7Q2FyZGluYWxpdHlWYWx1ZX0KKyAgICovCisgIHN0YXRpYyBzaW5nbGUodmFsdWU6IGFueVtdKTogQ2FyZGluYWxpdHlWYWx1ZSB7CisgICAgcmV0dXJuIG5ldyBDYXJkaW5hbGl0eVZhbHVlKGNhcmRpbmFsaXR5LnNpbmdsZSwgdmFsdWUpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIHZhbHVlIHdpdGggbGlzdCBjYXJkaW5hbGl0eS4KKyAgICogQHBhcmFtIHtBcnJheX0gdmFsdWUKKyAgICogQHJldHVybnMge0NhcmRpbmFsaXR5VmFsdWV9CisgICAqLworICBzdGF0aWMgbGlzdCh2YWx1ZTogYW55W10pOiBDYXJkaW5hbGl0eVZhbHVlIHsKKyAgICByZXR1cm4gbmV3IENhcmRpbmFsaXR5VmFsdWUoY2FyZGluYWxpdHkubGlzdCwgdmFsdWUpOworICB9CisKKyAgLyoqCisgICAqIENyZWF0ZSBhIHZhbHVlIHdpdGggc2V0IGNhcmRpbmFsaXR5LgorICAgKiBAcGFyYW0ge0FycmF5fSB2YWx1ZQorICAgKiBAcmV0dXJucyB7Q2FyZGluYWxpdHlWYWx1ZX0KKyAgICovCisgIHN0YXRpYyBzZXQodmFsdWU6IGFueVtdKTogQ2FyZGluYWxpdHlWYWx1ZSB7CisgICAgcmV0dXJuIG5ldyBDYXJkaW5hbGl0eVZhbHVlKGNhcmRpbmFsaXR5LnNldCwgdmFsdWUpOworICB9Cit9CisKK2Z1bmN0aW9uIGNhbGxPbkVtcHR5VHJhdmVyc2FsKGZuTmFtZTogc3RyaW5nLCBhcmdzOiBhbnlbXSkgeworICBjb25zdCBnID0gbmV3IEdyYXBoVHJhdmVyc2FsKG51bGwsIG51bGwpOworICByZXR1cm4gZ1tmbk5hbWUgYXMga2V5b2YgdHlwZW9mIGddLmFwcGx5KGcsIGFyZ3MpOworfQorCisvKioKKyAqIENvbnRhaW5zIHRoZSBzdGF0aWMgbWV0aG9kIGRlZmluaXRpb25zCisgKi8KK2V4cG9ydCBjb25zdCBzdGF0aWNzID0geworICBFOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdFJywgYXJncyksCisgIFY6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ1YnLCBhcmdzKSwKKyAgYWRkRTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYWRkRScsIGFyZ3MpLAorICBhZGRWOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdhZGRWJywgYXJncyksCisgIGFnZ3JlZ2F0ZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYWdncmVnYXRlJywgYXJncyksCisgIGFsbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYWxsJywgYXJncyksCisgIGFuZDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYW5kJywgYXJncyksCisgIGFueTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYW55JywgYXJncyksCisgIGFzOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdhcycsIGFyZ3MpLAorICBhc0RhdGU6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2FzRGF0ZScsIGFyZ3MpLAorICBhc0Jvb2w6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2FzQm9vbCcsIGFyZ3MpLAorICBhc051bWJlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYXNOdW1iZXInLCBhcmdzKSwKKyAgYXNTdHJpbmc6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2FzU3RyaW5nJywgYXJncyksCisgIGJhcnJpZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2JhcnJpZXInLCBhcmdzKSwKKyAgYm90aDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYm90aCcsIGFyZ3MpLAorICBib3RoRTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYm90aEUnLCBhcmdzKSwKKyAgYm90aFY6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2JvdGhWJywgYXJncyksCisgIGJyYW5jaDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnYnJhbmNoJywgYXJncyksCisgIGNhbGw6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2NhbGwnLCBhcmdzKSwKKyAgY2FwOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjYXAnLCBhcmdzKSwKKyAgY2hvb3NlOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjaG9vc2UnLCBhcmdzKSwKKyAgY29hbGVzY2U6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2NvYWxlc2NlJywgYXJncyksCisgIGNvaW46ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2NvaW4nLCBhcmdzKSwKKyAgY29tYmluZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY29tYmluZScsIGFyZ3MpLAorICBjb25jYXQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2NvbmNhdCcsIGFyZ3MpLAorICBjb25qb2luOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjb25qb2luJywgYXJncyksCisgIGNvbnN0YW50OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdjb25zdGFudCcsIGFyZ3MpLAorICBjb3VudDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY291bnQnLCBhcmdzKSwKKyAgY3ljbGljUGF0aDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnY3ljbGljUGF0aCcsIGFyZ3MpLAorICBkYXRlQWRkOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkYXRlQWRkJywgYXJncyksCisgIGRhdGVEaWZmOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkYXRlRGlmZicsIGFyZ3MpLAorICBkZWR1cDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZGVkdXAnLCBhcmdzKSwKKyAgZGlmZmVyZW5jZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZGlmZmVyZW5jZScsIGFyZ3MpLAorICBkaXNjYXJkOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkaXNjYXJkJywgYXJncyksCisgIGRpc2p1bmN0OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkaXNqdW5jdCcsIGFyZ3MpLAorICBkcm9wOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdkcm9wJywgYXJncyksCisgIGVsZW1lbnQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2VsZW1lbnQnLCBhcmdzKSwKKyAgZWxlbWVudE1hcDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZWxlbWVudE1hcCcsIGFyZ3MpLAorICBlbWl0OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdlbWl0JywgYXJncyksCisgIGZhaWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2ZhaWwnLCBhcmdzKSwKKyAgZmlsdGVyOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdmaWx0ZXInLCBhcmdzKSwKKyAgZmxhdE1hcDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZmxhdE1hcCcsIGFyZ3MpLAorICBmb2xkOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdmb2xkJywgYXJncyksCisgIGZvcm1hdDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnZm9ybWF0JywgYXJncyksCisgIGdyb3VwOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdncm91cCcsIGFyZ3MpLAorICBncm91cENvdW50OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdncm91cENvdW50JywgYXJncyksCisgIGhhczogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaGFzJywgYXJncyksCisgIGhhc0lkOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdoYXNJZCcsIGFyZ3MpLAorICBoYXNLZXk6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2hhc0tleScsIGFyZ3MpLAorICBoYXNMYWJlbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaGFzTGFiZWwnLCBhcmdzKSwKKyAgaGFzTm90OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdoYXNOb3QnLCBhcmdzKSwKKyAgaGFzVmFsdWU6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2hhc1ZhbHVlJywgYXJncyksCisgIGlkOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdpZCcsIGFyZ3MpLAorICBpZGVudGl0eTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaWRlbnRpdHknLCBhcmdzKSwKKyAgaW5fOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdpbl8nLCBhcmdzKSwKKyAgaW5FOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdpbkUnLCBhcmdzKSwKKyAgaW5WOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdpblYnLCBhcmdzKSwKKyAgaW5kZXg6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2luZGV4JywgYXJncyksCisgIGluamVjdDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaW5qZWN0JywgYXJncyksCisgIGludGVyc2VjdDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnaW50ZXJzZWN0JywgYXJncyksCisgIGlzOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdpcycsIGFyZ3MpLAorICBrZXk6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2tleScsIGFyZ3MpLAorICBsYWJlbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbGFiZWwnLCBhcmdzKSwKKyAgbGVuZ3RoOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdsZW5ndGgnLCBhcmdzKSwKKyAgbGltaXQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2xpbWl0JywgYXJncyksCisgIGxvY2FsOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdsb2NhbCcsIGFyZ3MpLAorICBsb29wczogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbG9vcHMnLCBhcmdzKSwKKyAgbFRyaW06ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ2xUcmltJywgYXJncyksCisgIG1hcDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWFwJywgYXJncyksCisgIG1hdGNoOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdtYXRjaCcsIGFyZ3MpLAorICBtYXRoOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdtYXRoJywgYXJncyksCisgIG1heDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWF4JywgYXJncyksCisgIG1lYW46ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ21lYW4nLCBhcmdzKSwKKyAgbWVyZ2U6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ21lcmdlJywgYXJncyksCisgIG1lcmdlRTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWVyZ2VFJywgYXJncyksCisgIG1lcmdlVjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWVyZ2VWJywgYXJncyksCisgIG1pbjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnbWluJywgYXJncyksCisgIG5vbmU6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ25vbmUnLCBhcmdzKSwKKyAgbm90OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdub3QnLCBhcmdzKSwKKyAgb3B0aW9uYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ29wdGlvbmFsJywgYXJncyksCisgIG9yOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvcicsIGFyZ3MpLAorICBvcmRlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnb3JkZXInLCBhcmdzKSwKKyAgb3RoZXJWOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvdGhlclYnLCBhcmdzKSwKKyAgb3V0OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvdXQnLCBhcmdzKSwKKyAgb3V0RTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnb3V0RScsIGFyZ3MpLAorICBvdXRWOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdvdXRWJywgYXJncyksCisgIHBhdGg6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3BhdGgnLCBhcmdzKSwKKyAgcHJvZHVjdDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncHJvZHVjdCcsIGFyZ3MpLAorICBwcm9qZWN0OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdwcm9qZWN0JywgYXJncyksCisgIHByb3BlcnRpZXM6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3Byb3BlcnRpZXMnLCBhcmdzKSwKKyAgcHJvcGVydHk6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3Byb3BlcnR5JywgYXJncyksCisgIHByb3BlcnR5TWFwOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdwcm9wZXJ0eU1hcCcsIGFyZ3MpLAorICByYW5nZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncmFuZ2UnLCBhcmdzKSwKKyAgcmVwZWF0OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdyZXBlYXQnLCBhcmdzKSwKKyAgcmVwbGFjZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgncmVwbGFjZScsIGFyZ3MpLAorICByZXZlcnNlOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdyZXZlcnNlJywgYXJncyksCisgIHJUcmltOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdyVHJpbScsIGFyZ3MpLAorICBzYWNrOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdzYWNrJywgYXJncyksCisgIHNhbXBsZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc2FtcGxlJywgYXJncyksCisgIHNlbGVjdDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc2VsZWN0JywgYXJncyksCisgIHNpZGVFZmZlY3Q6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3NpZGVFZmZlY3QnLCBhcmdzKSwKKyAgc2ltcGxlUGF0aDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc2ltcGxlUGF0aCcsIGFyZ3MpLAorICBza2lwOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdza2lwJywgYXJncyksCisgIHNwbGl0OiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdzcGxpdCcsIGFyZ3MpLAorICBzdWJncmFwaDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgnc3ViZ3JhcGgnLCBhcmdzKSwKKyAgc3Vic3RyaW5nOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdzdWJzdHJpbmcnLCBhcmdzKSwKKyAgc3VtOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCdzdW0nLCBhcmdzKSwKKyAgdGFpbDogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndGFpbCcsIGFyZ3MpLAorICB0aW1lTGltaXQ6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RpbWVMaW1pdCcsIGFyZ3MpLAorICB0aW1lczogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndGltZXMnLCBhcmdzKSwKKyAgdG86ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RvJywgYXJncyksCisgIHRvRTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndG9FJywgYXJncyksCisgIHRvTG93ZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RvTG93ZXInLCBhcmdzKSwKKyAgdG9VcHBlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndG9VcHBlcicsIGFyZ3MpLAorICB0b1Y6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RvVicsIGFyZ3MpLAorICB0cmVlOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd0cmVlJywgYXJncyksCisgIHRyaW06ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3RyaW0nLCBhcmdzKSwKKyAgdW5mb2xkOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd1bmZvbGQnLCBhcmdzKSwKKyAgdW5pb246ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3VuaW9uJywgYXJncyksCisgIHVudGlsOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd1bnRpbCcsIGFyZ3MpLAorICB2YWx1ZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndmFsdWUnLCBhcmdzKSwKKyAgdmFsdWVNYXA6ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbE9uRW1wdHlUcmF2ZXJzYWwoJ3ZhbHVlTWFwJywgYXJncyksCisgIHZhbHVlczogKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsT25FbXB0eVRyYXZlcnNhbCgndmFsdWVzJywgYXJncyksCisgIHdoZXJlOiAoLi4uYXJnczogYW55W10pID0+IGNhbGxPbkVtcHR5VHJhdmVyc2FsKCd3aGVyZScsIGFyZ3MpLAorfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2dyZW1saW4tbGFuZy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL2dyZW1saW4tbGFuZy50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVkOGM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvZ3JlbWxpbi1sYW5nLnRzCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgeyBQLCBUZXh0UCwgRW51bVZhbHVlIH0gZnJvbSAnLi90cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgT3B0aW9uc1N0cmF0ZWd5LCBUcmF2ZXJzYWxTdHJhdGVneSB9IGZyb20gJy4vdHJhdmVyc2FsLXN0cmF0ZWd5LmpzJzsKK2ltcG9ydCB7IExvbmcgfSBmcm9tICcuLi91dGlscy5qcyc7CitpbXBvcnQgeyBWZXJ0ZXggfSBmcm9tICcuLi9zdHJ1Y3R1cmUvZ3JhcGguanMnOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBHcmVtbGluTGFuZyB7CisgIHByaXZhdGUgZ3JlbWxpbjogc3RyaW5nID0gJyc7CisgIHByaXZhdGUgb3B0aW9uc1N0cmF0ZWdpZXM6IE9wdGlvbnNTdHJhdGVneVtdID0gW107CisgIHByaXZhdGUgcGFyYW1ldGVyczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTsKKyAgCisgIGNvbnN0cnVjdG9yKHRvQ2xvbmU/OiBHcmVtbGluTGFuZykgeworICAgIGlmICh0b0Nsb25lKSB7CisgICAgICB0aGlzLmdyZW1saW4gPSB0b0Nsb25lLmdyZW1saW47CisgICAgICB0aGlzLm9wdGlvbnNTdHJhdGVnaWVzID0gWy4uLnRvQ2xvbmUub3B0aW9uc1N0cmF0ZWdpZXNdOworICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gbmV3IE1hcCh0b0Nsb25lLnBhcmFtZXRlcnMpOworICAgIH0KKyAgfQorICAKKyAgZ2V0T3B0aW9uc1N0cmF0ZWdpZXMoKTogT3B0aW9uc1N0cmF0ZWd5W10geworICAgIHJldHVybiB0aGlzLm9wdGlvbnNTdHJhdGVnaWVzOworICB9CisKKyAgYWRkRyhnOiBzdHJpbmcpOiB2b2lkIHsKKyAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KCdnJywgZyk7CisgIH0KKworICBnZXRQYXJhbWV0ZXJzKCk6IE1hcDxzdHJpbmcsIGFueT4geworICAgIHJldHVybiB0aGlzLnBhcmFtZXRlcnM7CisgIH0KKyAgCisgIHByaXZhdGUgX3ByZWRpY2F0ZUFzU3RyaW5nKHA6IFAgfCBUZXh0UCk6IHN0cmluZyB7CisgICAgaWYgKHAub3BlcmF0b3IgPT09ICdhbmQnIHx8IHAub3BlcmF0b3IgPT09ICdvcicpIHsKKyAgICAgIHJldHVybiBgJHt0aGlzLl9wcmVkaWNhdGVBc1N0cmluZyhwLnZhbHVlKX0uJHtwLm9wZXJhdG9yfSgke3RoaXMuX3ByZWRpY2F0ZUFzU3RyaW5nKHAub3RoZXIpfSlgOworICAgIH0KKyAgICAKKyAgICBsZXQgcmVzdWx0ID0gcC5vcGVyYXRvciArICcoJzsKKyAgICBpZiAoQXJyYXkuaXNBcnJheShwLnZhbHVlKSkgeworICAgICAgcmVzdWx0ICs9ICdbJyArIHAudmFsdWUubWFwKHYgPT4gdGhpcy5fYXJnQXNTdHJpbmcodikpLmpvaW4oJywnKSArICddJzsKKyAgICB9IGVsc2UgeworICAgICAgcmVzdWx0ICs9IHRoaXMuX2FyZ0FzU3RyaW5nKHAudmFsdWUpOworICAgICAgaWYgKHAub3RoZXIgIT09IHVuZGVmaW5lZCAmJiBwLm90aGVyICE9PSBudWxsKSB7CisgICAgICAgIHJlc3VsdCArPSAnLCcgKyB0aGlzLl9hcmdBc1N0cmluZyhwLm90aGVyKTsKKyAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ICs9ICcpJzsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgcHJpdmF0ZSBfYXJnQXNTdHJpbmcoYXJnOiBhbnkpOiBzdHJpbmcgeworICAgIGlmIChhcmcgPT09IG51bGwgfHwgYXJnID09PSB1bmRlZmluZWQpIHJldHVybiAnbnVsbCc7CisgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdib29sZWFuJykgcmV0dXJuIGFyZyA/ICd0cnVlJyA6ICdmYWxzZSc7CisgICAgaWYgKGFyZyBpbnN0YW5jZW9mIExvbmcpIHsKKyAgICAgIHJldHVybiBTdHJpbmcoYXJnLnZhbHVlKSArICdMJzsKKyAgICB9CisgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdiaWdpbnQnKSB7CisgICAgICByZXR1cm4gU3RyaW5nKGFyZykgKyAnTic7CisgICAgfQorICAgIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykgeworICAgICAgaWYgKE51bWJlci5pc05hTihhcmcpKSByZXR1cm4gJ05hTic7CisgICAgICBpZiAoYXJnID09PSBJbmZpbml0eSkgcmV0dXJuICcrSW5maW5pdHknOworICAgICAgaWYgKGFyZyA9PT0gLUluZmluaXR5KSByZXR1cm4gJy1JbmZpbml0eSc7CisgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYXJnKSkgcmV0dXJuIFN0cmluZyhhcmcpICsgJ0QnOworICAgICAgaWYgKGFyZyA+PSAtMjE0NzQ4MzY0OCAmJiBhcmcgPD0gMjE0NzQ4MzY0NykgcmV0dXJuIFN0cmluZyhhcmcpOworICAgICAgLy8gT3V0c2lkZSBzYWZlIGludGVnZXIgcmFuZ2UsIHZhbHVlcyBoYXZlIGxvc3QgcHJlY2lzaW9uIGFuZCBtYXkgZXhjZWVkIEphdmEgTG9uZyDigJQgZW1pdCBhcyBEb3VibGUuCisgICAgICBpZiAoYXJnID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgYXJnIDwgLU51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSByZXR1cm4gU3RyaW5nKGFyZykgKyAnRCc7CisgICAgICByZXR1cm4gU3RyaW5nKGFyZykgKyAnTCc7CisgICAgfQorICAgIGlmIChhcmcgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICBjb25zdCBpc28gPSBhcmcudG9JU09TdHJpbmcoKTsKKyAgICAgIHJldHVybiBgZGF0ZXRpbWUoIiR7aXNvfSIpYDsKKyAgICB9CisgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7CisgICAgICAvLyBKU09OLnN0cmluZ2lmeSBoYW5kbGVzIGFsbCBzcGVjaWFsIGNoYXJhY3RlciBlc2NhcGluZyBpbiBvbmUgY2FsbC4KKyAgICAgIC8vIFN0cmlwIHRoZSBvdXRlciBkb3VibGUgcXVvdGVzIGFuZCByZS13cmFwIGluIHNpbmdsZSBxdW90ZXMgZm9yIEdyZW1saW4uCisgICAgICBjb25zdCBlc2NhcGVkID0gSlNPTi5zdHJpbmdpZnkoYXJnKS5zbGljZSgxLCAtMSkucmVwbGFjZSgvJy9nLCAiXFwnIik7CisgICAgICByZXR1cm4gYCcke2VzY2FwZWR9J2A7CisgICAgfQorICAgIGlmIChhcmcgaW5zdGFuY2VvZiBQIHx8IGFyZyBpbnN0YW5jZW9mIFRleHRQKSB7CisgICAgICByZXR1cm4gdGhpcy5fcHJlZGljYXRlQXNTdHJpbmcoYXJnKTsKKyAgICB9CisgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEVudW1WYWx1ZSkgeworICAgICAgcmV0dXJuIGFyZy50b1N0cmluZygpOworICAgIH0KKyAgICBpZiAoYXJnIGluc3RhbmNlb2YgVHJhdmVyc2FsU3RyYXRlZ3kgJiYgIShhcmcgaW5zdGFuY2VvZiBPcHRpb25zU3RyYXRlZ3kpKSB7CisgICAgICBjb25zdCBzaW1wbGVOYW1lID0gYXJnLnN0cmF0ZWd5TmFtZTsKKyAgICAgIGNvbnN0IGNvbmZpZ0VudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmcuY29uZmlndXJhdGlvbik7CisgICAgICBpZiAoY29uZmlnRW50cmllcy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgcmV0dXJuIHNpbXBsZU5hbWU7CisgICAgICB9CisgICAgICBjb25zdCBjb25maWdTdHIgPSBjb25maWdFbnRyaWVzLm1hcCgoW2ssIHZdKSA9PiBgJHtrfToke3RoaXMuX2FyZ0FzU3RyaW5nKHYpfWApLmpvaW4oJywnKTsKKyAgICAgIHJldHVybiBgbmV3ICR7c2ltcGxlTmFtZX0oJHtjb25maWdTdHJ9KWA7CisgICAgfQorICAgIGlmICh0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nICYmIGFyZy5wcm90b3R5cGUgaW5zdGFuY2VvZiBUcmF2ZXJzYWxTdHJhdGVneSkgeworICAgICAgcmV0dXJuIGFyZy5uYW1lOworICAgIH0KKyAgICBpZiAoYXJnIGluc3RhbmNlb2YgVmVydGV4KSB7CisgICAgICByZXR1cm4gdGhpcy5fYXJnQXNTdHJpbmcoYXJnLmlkKTsKKyAgICB9CisgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEdyZW1saW5MYW5nKSB7CisgICAgICByZXR1cm4gYXJnLmdldEdyZW1saW4oJ19fJyk7CisgICAgfQorICAgIGlmICh0eXBlb2YgYXJnLmdldEdyZW1saW5MYW5nID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAvLyBUaGlzIGlzIGEgVHJhdmVyc2FsIC0gcmVuZGVyIGFzIGFub255bW91cyB0cmF2ZXJzYWwKKyAgICAgIGlmIChhcmcuZ3JhcGggIT0gbnVsbCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoaWxkIHRyYXZlcnNhbCBtdXN0IGJlIGFub255bW91cyAtIHVzZSBfXyBub3QgZycpOworICAgICAgfQorICAgICAgcmV0dXJuIGFyZy5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oJ19fJyk7CisgICAgfQorICAgIGlmIChhcmcgaW5zdGFuY2VvZiBTZXQpIHsKKyAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLmFyZ107CisgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3t9JzsKKyAgICAgIHJldHVybiAneycgKyBpdGVtcy5tYXAoYSA9PiB0aGlzLl9hcmdBc1N0cmluZyhhKSkuam9pbignLCcpICsgJ30nOworICAgIH0KKyAgICBpZiAoYXJnIGluc3RhbmNlb2YgTWFwKSB7CisgICAgICBpZiAoYXJnLnNpemUgPT09IDApIHJldHVybiAnWzpdJzsKKyAgICAgIGNvbnN0IGVudHJpZXM6IHN0cmluZ1tdID0gW107CisgICAgICBhcmcuZm9yRWFjaCgodiwgaykgPT4geworICAgICAgICBjb25zdCBrcyA9IHRoaXMuX2FyZ0FzU3RyaW5nKGspOworICAgICAgICBjb25zdCB2cyA9IHRoaXMuX2FyZ0FzU3RyaW5nKHYpOworICAgICAgICBlbnRyaWVzLnB1c2godHlwZW9mIGsgPT09ICdzdHJpbmcnID8gYCR7a3N9OiR7dnN9YCA6IGAoJHtrc30pOiR7dnN9YCk7CisgICAgICB9KTsKKyAgICAgIHJldHVybiAnWycgKyBlbnRyaWVzLmpvaW4oJywnKSArICddJzsKKyAgICB9CisgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkgeworICAgICAgcmV0dXJuICdbJyArIGFyZy5tYXAoYSA9PiB0aGlzLl9hcmdBc1N0cmluZyhhKSkuam9pbignLCcpICsgJ10nOworICAgIH0KKyAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHsKKyAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcmcpOworICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJ1s6XSc7CisgICAgICByZXR1cm4gJ1snICsgZW50cmllcy5tYXAoKFtrLCB2XSkgPT4gYCR7dGhpcy5fYXJnQXNTdHJpbmcoayl9OiR7dGhpcy5fYXJnQXNTdHJpbmcodil9YCkuam9pbignLCcpICsgJ10nOworICAgIH0KKyAgICByZXR1cm4gU3RyaW5nKGFyZyk7CisgIH0KKyAgCisgIGFkZFN0ZXAobmFtZTogc3RyaW5nLCBhcmdzPzogYW55W10pOiBHcmVtbGluTGFuZyB7CisgICAgY29uc3QgYXJnc1N0ciA9IGFyZ3M/Lmxlbmd0aCA/IGFyZ3MubWFwKGEgPT4gdGhpcy5fYXJnQXNTdHJpbmcoYSkpLmpvaW4oJywnKSA6ICcnOworICAgIHRoaXMuZ3JlbWxpbiArPSBgLiR7bmFtZX0oJHthcmdzU3RyfSlgOworICAgIHJldHVybiB0aGlzOworICB9CisgIAorICBhZGRTb3VyY2UobmFtZTogc3RyaW5nLCBhcmdzPzogYW55W10pOiBHcmVtbGluTGFuZyB7CisgICAgaWYgKG5hbWUgPT09ICdDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsJyAmJiBhcmdzKSB7CisgICAgICBjb25zdCBjYXJkID0gYXJnc1swXSBhcyBFbnVtVmFsdWU7CisgICAgICB0aGlzLmdyZW1saW4gKz0gYENhcmRpbmFsaXR5LiR7Y2FyZC5lbGVtZW50TmFtZX0oJHt0aGlzLl9hcmdBc1N0cmluZyhhcmdzWzFdKX0pYDsKKyAgICAgIHJldHVybiB0aGlzOworICAgIH0KKyAgICBpZiAobmFtZSA9PT0gJ3dpdGhTdHJhdGVnaWVzJyAmJiBhcmdzKSB7CisgICAgICBjb25zdCBub25PcHRpb25zU3RyYXRlZ2llczogYW55W10gPSBbXTsKKyAgICAgIGZvciAoY29uc3Qgc3RyYXRlZ3kgb2YgYXJncykgeworICAgICAgICBpZiAoc3RyYXRlZ3kgaW5zdGFuY2VvZiBPcHRpb25zU3RyYXRlZ3kpIHsKKyAgICAgICAgICB0aGlzLm9wdGlvbnNTdHJhdGVnaWVzLnB1c2goc3RyYXRlZ3kpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG5vbk9wdGlvbnNTdHJhdGVnaWVzLnB1c2goc3RyYXRlZ3kpOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAobm9uT3B0aW9uc1N0cmF0ZWdpZXMubGVuZ3RoID4gMCkgeworICAgICAgICBjb25zdCBhcmdzU3RyID0gbm9uT3B0aW9uc1N0cmF0ZWdpZXMubWFwKGEgPT4gdGhpcy5fYXJnQXNTdHJpbmcoYSkpLmpvaW4oJywnKTsKKyAgICAgICAgdGhpcy5ncmVtbGluICs9IGAud2l0aFN0cmF0ZWdpZXMoJHthcmdzU3RyfSlgOworICAgICAgfQorICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIGNvbnN0IGFyZ3NTdHIgPSBhcmdzPy5sZW5ndGggPyBhcmdzLm1hcChhID0+IHRoaXMuX2FyZ0FzU3RyaW5nKGEpKS5qb2luKCcsJykgOiAnJzsKKyAgICB0aGlzLmdyZW1saW4gKz0gYC4ke25hbWV9KCR7YXJnc1N0cn0pYDsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorICAKKyAgZ2V0R3JlbWxpbihwcmVmaXg6IHN0cmluZyA9ICdnJyk6IHN0cmluZyB7CisgICAgaWYgKHRoaXMuZ3JlbWxpbi5sZW5ndGggPiAwICYmIHRoaXMuZ3JlbWxpblswXSAhPT0gJy4nKSB7CisgICAgICByZXR1cm4gdGhpcy5ncmVtbGluOworICAgIH0KKyAgICByZXR1cm4gcHJlZml4ICsgdGhpcy5ncmVtbGluOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhbnNhY3Rpb24udHMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmFuc2FjdGlvbi50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWFmZWVmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhbnNhY3Rpb24udHMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgUmVtb3RlQ29ubmVjdGlvbiwgUmVtb3RlU3RyYXRlZ3kgfSBmcm9tICcuLi9kcml2ZXIvcmVtb3RlLWNvbm5lY3Rpb24uanMnOworaW1wb3J0IEdyZW1saW5MYW5nIGZyb20gJy4vZ3JlbWxpbi1sYW5nLmpzJzsKK2ltcG9ydCB7IEdyYXBoVHJhdmVyc2FsU291cmNlIH0gZnJvbSAnLi9ncmFwaC10cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcyB9IGZyb20gJy4vdHJhdmVyc2FsLXN0cmF0ZWd5LmpzJzsKKworLyoqCisgKiBBIGNvbnRyb2xsZXIgZm9yIGEgcmVtb3RlIHRyYW5zYWN0aW9uIHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSA8Y29kZT5nLnR4KCk8L2NvZGU+LiBDYWxsaW5nIDxjb2RlPmJlZ2luKCk8L2NvZGU+CisgKiBvbiB0aGlzIG9iamVjdCB3aWxsIHByb2R1Y2UgYSBuZXcgPGNvZGU+R3JhcGhUcmF2ZXJzYWxTb3VyY2U8L2NvZGU+IHRoYXQgaXMgYm91bmQgdG8gYSByZW1vdGUgdHJhbnNhY3Rpb24gb3ZlciB3aGljaAorICogbXVsdGlwbGUgdHJhdmVyc2FscyBtYXkgYmUgZXhlY3V0ZWQgaW4gdGhhdCBjb250ZXh0LiBDYWxsaW5nIDxjb2RlPmNvbW1pdCgpPC9jb2RlPiBvciA8Y29kZT5yb2xsYmFjaygpPC9jb2RlPiB3aWxsCisgKiB0aGVuIGNsb3NlIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGh1cywgdGhlIHNlc3Npb24uIFRoaXMgZmVhdHVyZSBvbmx5IHdvcmtzIHdpdGggdHJhbnNhY3Rpb24gZW5hYmxlZCBncmFwaHMuCisgKi8KK2V4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiB7CisgIHByaXZhdGUgX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24/OiBSZW1vdGVDb25uZWN0aW9uID0gdW5kZWZpbmVkOworCisgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UpIHt9CisKKyAgLyoqCisgICAqIFNwYXducyBhIDxjb2RlPkdyYXBoVHJhdmVyc2FsU291cmNlPC9jb2RlPiB0aGF0IGlzIGJvdW5kIHRvIGEgcmVtb3RlIHNlc3Npb24gd2hpY2ggZW5hYmxlcyBhIHRyYW5zYWN0aW9uLgorICAgKiBAcmV0dXJucyB7R3JhcGhUcmF2ZXJzYWxTb3VyY2V9CisgICAqLworICBiZWdpbigpOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSB7CisgICAgdGhyb3cgbmV3IEVycm9yICgiVHJhbnNhY3Rpb25zIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIikKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KKyAgICovCisgIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHsKKyAgICB0aHJvdyBuZXcgRXJyb3IgKCJUcmFuc2FjdGlvbnMgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKQorICB9CisKKyAgLyoqCisgICAqIEByZXR1cm5zIHtQcm9taXNlfQorICAgKi8KKyAgcm9sbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7CisgICAgdGhyb3cgbmV3IEVycm9yICgiVHJhbnNhY3Rpb25zIGFyZSBub3QgeWV0IGltcGxlbWVudGVkIikKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRydWUgaWYgdHJhbnNhY3Rpb24gaXMgb3Blbi4KKyAgICogQHJldHVybnMge0Jvb2xlYW59CisgICAqLworICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4geworICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQmFzZWRDb25uZWN0aW9uPy5pc09wZW4gPz8gZmFsc2U7CisgIH0KKworICAvKioKKyAgICogQHJldHVybnMge1Byb21pc2V9CisgICAqLworICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHsKKyAgICBpZiAodGhpcy5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbikgeworICAgICAgdGhpcy5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5jbG9zZSgpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5LnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNzNjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3kudHMKQEAgLTAsMCArMSwzNjggQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCisgKi8KKworaW1wb3J0IHR5cGUgeyBSZW1vdGVDb25uZWN0aW9uIH0gZnJvbSAnLi4vZHJpdmVyL3JlbW90ZS1jb25uZWN0aW9uLmpzJzsKK2ltcG9ydCB7IFRyYXZlcnNhbCB9IGZyb20gJy4vdHJhdmVyc2FsLmpzJzsKKworZXhwb3J0IGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWdpZXMgeworICByZWFkb25seSBzdHJhdGVnaWVzOiBUcmF2ZXJzYWxTdHJhdGVneVtdOworCisgIC8qKgorICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRyYXZlcnNhbFN0cmF0ZWdpZXMuCisgICAqIEBwYXJhbSB7VHJhdmVyc2FsU3RyYXRlZ2llc30gW3BhcmVudF0gVGhlIHBhcmVudCBzdHJhdGVnaWVzIGZyb20gd2hlcmUgdG8gY2xvbmUgdGhlIHZhbHVlcyBmcm9tLgorICAgKi8KKyAgY29uc3RydWN0b3IocGFyZW50PzogVHJhdmVyc2FsU3RyYXRlZ2llcykgeworICAgIGlmIChwYXJlbnQpIHsKKyAgICAgIC8vIENsb25lIHRoZSBzdHJhdGVnaWVzCisgICAgICB0aGlzLnN0cmF0ZWdpZXMgPSBbLi4ucGFyZW50LnN0cmF0ZWdpZXNdOworICAgIH0gZWxzZSB7CisgICAgICB0aGlzLnN0cmF0ZWdpZXMgPSBbXTsKKyAgICB9CisgIH0KKworICAvKiogQHBhcmFtIHtUcmF2ZXJzYWxTdHJhdGVneX0gc3RyYXRlZ3kgKi8KKyAgYWRkU3RyYXRlZ3koc3RyYXRlZ3k6IFRyYXZlcnNhbFN0cmF0ZWd5KSB7CisgICAgdGhpcy5zdHJhdGVnaWVzLnB1c2goc3RyYXRlZ3kpOworICB9CisKKyAgLyoqIEBwYXJhbSB7VHJhdmVyc2FsU3RyYXRlZ3l9IHN0cmF0ZWd5ICovCisgIHJlbW92ZVN0cmF0ZWd5KHN0cmF0ZWd5OiBUcmF2ZXJzYWxTdHJhdGVneSkgeworICAgIGNvbnN0IGlkeCA9IHRoaXMuc3RyYXRlZ2llcy5maW5kSW5kZXgoKHMpID0+IHMuc3RyYXRlZ3lOYW1lID09PSBzdHJhdGVneS5zdHJhdGVneU5hbWUpOworICAgIGlmIChpZHggIT09IC0xKSB7CisgICAgICByZXR1cm4gdGhpcy5zdHJhdGVnaWVzLnNwbGljZShpZHgsIDEpWzBdOworICAgIH0KKworICAgIHJldHVybiB1bmRlZmluZWQ7CisgIH0KKworICAvKioKKyAgICogQHBhcmFtIHtUcmF2ZXJzYWx9IHRyYXZlcnNhbAorICAgKiBAcmV0dXJucyB7UHJvbWlzZX0KKyAgICovCisgIGFwcGx5U3RyYXRlZ2llcyh0cmF2ZXJzYWw6IFRyYXZlcnNhbCkgeworICAgIC8vIEFwcGx5IGFsbCBzdHJhdGVnaWVzIHNlcmlhbGx5CisgICAgcmV0dXJuIHRoaXMuc3RyYXRlZ2llcy5yZWR1Y2UoCisgICAgICAocHJvbWlzZSwgc3RyYXRlZ3kpID0+IHByb21pc2UudGhlbigoKSA9PiBzdHJhdGVneS5hcHBseSh0cmF2ZXJzYWwpKSwKKyAgICAgIFByb21pc2UucmVzb2x2ZSgpLAorICAgICk7CisgIH0KK30KKworZXhwb3J0IHR5cGUgVHJhdmVyc2FsU3RyYXRlZ3lDb25maWd1cmF0aW9uID0gYW55OworCitleHBvcnQgYWJzdHJhY3QgY2xhc3MgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25uZWN0aW9uPzogUmVtb3RlQ29ubmVjdGlvbjsKKyAgcHVibGljIHN0cmF0ZWd5TmFtZTogc3RyaW5nOworCisgIC8qKgorICAgKiBAcGFyYW0ge1RyYXZlcnNhbFN0cmF0ZWd5Q29uZmlndXJhdGlvbn0gY29uZmlndXJhdGlvbiBmb3IgdGhlIHN0cmF0ZWd5CisgICAqLworICBjb25zdHJ1Y3RvcigKKyAgICBwdWJsaWMgY29uZmlndXJhdGlvbjogVHJhdmVyc2FsU3RyYXRlZ3lDb25maWd1cmF0aW9uID0ge30sCisgICkgeworICAgIHRoaXMuc3RyYXRlZ3lOYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lOworICB9CisKKyAgLyoqCisgICAqIEBhYnN0cmFjdAorICAgKiBAcGFyYW0ge1RyYXZlcnNhbH0gdHJhdmVyc2FsCisgICAqIEByZXR1cm5zIHtQcm9taXNlfQorICAgKi8KKyAgYXN5bmMgYXBwbHkodHJhdmVyc2FsOiBUcmF2ZXJzYWwpOiBQcm9taXNlPHZvaWQ+IHt9Cit9CisKK2V4cG9ydCBjbGFzcyBDb25uZWN0aXZlU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIEVsZW1lbnRJZFN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgLyoqCisgICAqIEBwYXJhbSB7U3RyaW5nfSBoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5IGZ1bGwgcXVhbGlmaWVkIGNsYXNzIG5hbWUgaW4gSmF2YSBvZiBhIGBIYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5YCBpbXBsZW1lbnRhdGlvbgorICAgKi8KKyAgY29uc3RydWN0b3Ioe2hhbHRlZFRyYXZlcnNlckZhY3RvcnkgPSAiIn0pIHsKKyAgICBzdXBlcih7aGFsdGVkVHJhdmVyc2VyRmFjdG9yeTogaGFsdGVkVHJhdmVyc2VyRmFjdG9yeX0pOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBPcHRpb25zU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRyYXZlcnNhbFN0cmF0ZWd5Q29uZmlndXJhdGlvbikgeworICAgIHN1cGVyKG9wdGlvbnMpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBQYXJ0aXRpb25TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgLyoqCisgICAqIEBwYXJhbSBvcHRpb25zCisgICAqIEBwYXJhbSBvcHRpb25zLnBhcnRpdGlvbktleSAtIG5hbWUgb2YgdGhlIHByb3BlcnR5IGtleSB0byBwYXJ0aXRpb24gYnkKKyAgICogQHBhcmFtIG9wdGlvbnMud3JpdGVQYXJ0aXRpb24gLSB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnRseSB3cml0ZSBwYXJ0aXRpb24KKyAgICogQHBhcmFtIG9wdGlvbnMucmVhZFBhcnRpdGlvbnMgLSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSBwYXJ0aXRpb25zIHRvIGluY2x1ZGUgZm9yIHJlYWRzCisgICAqIEBwYXJhbSBvcHRpb25zLmluY2x1ZGVNZXRhUHJvcGVydGllcyAtIGRldGVybWluZXMgaWYgbWV0YS1wcm9wZXJ0aWVzIHNob3VsZCBiZSBpbmNsdWRlZCBpbiBwYXJ0aXRpb25pbmcgZGVmYXVsdGluZyB0byBmYWxzZQorICAgKi8KKyAgY29uc3RydWN0b3Ioe3BhcnRpdGlvbktleSwgd3JpdGVQYXJ0aXRpb24sIHJlYWRQYXJ0aXRpb25zLCBpbmNsdWRlTWV0YVByb3BlcnRpZXN9OiB7cGFydGl0aW9uS2V5Pzogc3RyaW5nLCB3cml0ZVBhcnRpdGlvbj86IHN0cmluZywgcmVhZFBhcnRpdGlvbnM/OiBzdHJpbmdbXSwgaW5jbHVkZU1ldGFQcm9wZXJ0aWVzPzogYm9vbGVhbn0gPSB7fSkgeworICAgIGNvbnN0IGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9OworICAgIGlmIChwYXJ0aXRpb25LZXkgIT09IHVuZGVmaW5lZCkgY29uZmlnLnBhcnRpdGlvbktleSA9IHBhcnRpdGlvbktleTsKKyAgICBpZiAod3JpdGVQYXJ0aXRpb24gIT09IHVuZGVmaW5lZCkgY29uZmlnLndyaXRlUGFydGl0aW9uID0gd3JpdGVQYXJ0aXRpb247CisgICAgaWYgKHJlYWRQYXJ0aXRpb25zICE9PSB1bmRlZmluZWQpIGNvbmZpZy5yZWFkUGFydGl0aW9ucyA9IHJlYWRQYXJ0aXRpb25zOworICAgIGlmIChpbmNsdWRlTWV0YVByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkgY29uZmlnLmluY2x1ZGVNZXRhUHJvcGVydGllcyA9IGluY2x1ZGVNZXRhUHJvcGVydGllczsKKyAgICBzdXBlcihjb25maWcpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBQcm9maWxlU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFN1YmdyYXBoU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIC8qKgorICAgKiBAcGFyYW0gb3B0aW9ucworICAgKiBAcGFyYW0gb3B0aW9ucy52ZXJ0aWNlcyAtIHRyYXZlcnNhbCB0byBmaWx0ZXIgdmVydGljZXMKKyAgICogQHBhcmFtIG9wdGlvbnMuZWRnZXMgLSB0cmF2ZXJzYWwgdG8gZmlsdGVyIGVkZ2VzCisgICAqIEBwYXJhbSBvcHRpb25zLnZlcnRleFByb3BlcnRpZXMgLSB0cmF2ZXJzYWwgdG8gZmlsdGVyIHZlcnRleCBwcm9wZXJ0aWVzCisgICAqIEBwYXJhbSBvcHRpb25zLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyAtIGVuYWJsZXMgdGhlIHN0cmF0ZWd5IHRvIGFwcGx5IHRoZSBgdmVydGljZXNgIGZpbHRlciB0byB0aGUgYWRqYWNlbnQgdmVydGljZXMgb2YgYW4gZWRnZS4KKyAgICovCisgIGNvbnN0cnVjdG9yKHt2ZXJ0aWNlcywgZWRnZXMsIHZlcnRleFByb3BlcnRpZXMsIGNoZWNrQWRqYWNlbnRWZXJ0aWNlc306IHt2ZXJ0aWNlcz86IGFueSwgZWRnZXM/OiBhbnksIHZlcnRleFByb3BlcnRpZXM/OiBhbnksIGNoZWNrQWRqYWNlbnRWZXJ0aWNlcz86IGJvb2xlYW59ID0ge30pIHsKKyAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTsKKyAgICBpZiAodmVydGljZXMgIT09IHVuZGVmaW5lZCkgY29uZmlnLnZlcnRpY2VzID0gdmVydGljZXMgaW5zdGFuY2VvZiBUcmF2ZXJzYWwgPyB2ZXJ0aWNlcy5ncmVtbGluTGFuZyA6IHZlcnRpY2VzOworICAgIGlmIChlZGdlcyAhPT0gdW5kZWZpbmVkKSBjb25maWcuZWRnZXMgPSBlZGdlcyBpbnN0YW5jZW9mIFRyYXZlcnNhbCA/IGVkZ2VzLmdyZW1saW5MYW5nIDogZWRnZXM7CisgICAgaWYgKHZlcnRleFByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkgY29uZmlnLnZlcnRleFByb3BlcnRpZXMgPSB2ZXJ0ZXhQcm9wZXJ0aWVzIGluc3RhbmNlb2YgVHJhdmVyc2FsID8gdmVydGV4UHJvcGVydGllcy5ncmVtbGluTGFuZyA6IHZlcnRleFByb3BlcnRpZXM7CisgICAgaWYgKGNoZWNrQWRqYWNlbnRWZXJ0aWNlcyAhPT0gdW5kZWZpbmVkKSBjb25maWcuY2hlY2tBZGphY2VudFZlcnRpY2VzID0gY2hlY2tBZGphY2VudFZlcnRpY2VzOworICAgIHN1cGVyKGNvbmZpZyk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFByb2R1Y3RpdmVCeVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICAvKioKKyAgICogQHBhcmFtIG9wdGlvbnMKKyAgICogQHBhcmFtIG9wdGlvbnMucHJvZHVjdGl2ZUtleXMgLSBzZXQgb2Yga2V5cyB0aGF0IHdpbGwgYWx3YXlzIGJlIHByb2R1Y3RpdmUKKyAgICovCisgIGNvbnN0cnVjdG9yKHtwcm9kdWN0aXZlS2V5cyA9IFtdfSA9IHt9KSB7CisgICAgc3VwZXIoe3Byb2R1Y3RpdmVLZXlzfSk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcihvcHRpb25zOiBUcmF2ZXJzYWxTdHJhdGVneUNvbmZpZ3VyYXRpb24pIHsKKyAgICBzdXBlcihvcHRpb25zKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgLyoqCisgICAqIEBwYXJhbSBtYXRjaEFsZ29yaXRobQorICAgKi8KKyAgY29uc3RydWN0b3Ioe21hdGNoQWxnb3JpdGhtID0gIiJ9KSB7CisgICAgc3VwZXIoe21hdGNoQWxnb3JpdGhtOiBtYXRjaEFsZ29yaXRobX0pOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgRmlsdGVyUmFua2luZ1N0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBJZGVudGl0eVJlbW92YWxTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIElubGluZUZpbHRlclN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBMYXp5QmFycmllclN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigpOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBPcmRlckxpbWl0U3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFBhdGhQcm9jZXNzb3JTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgUGF0aFJldHJhY3Rpb25TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgQ291bnRTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgUmVwZWF0VW5yb2xsU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIEdyYXBoRmlsdGVyU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIEVhcmx5TGltaXRTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgUmVhZE9ubHlTdHJhdGVneSBleHRlbmRzIFRyYXZlcnNhbFN0cmF0ZWd5IHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgc3VwZXIoKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIC8qKgorICAgKiBAcGFyYW0gb3B0aW9ucworICAgKiBAcGFyYW0gb3B0aW9ucy5sb2dXYXJuaW5ncyAtIGRldGVybWluZXMgaWYgd2FybmluZ3Mgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gdGhlIGxvZ2dlciB3aGVuIHZlcmlmaWNhdGlvbiBmYWlscworICAgKiBAcGFyYW0gb3B0aW9ucy50aHJvd0V4Y2VwdGlvbiAtIGRldGVybWluZXMgaWYgZXhjZXB0aW9ucyBzaG91bGQgYmUgdGhyb3duIHdoZW4gdmVyaWZpY2F0aW9ucyBmYWlscworICAgKi8KKyAgY29uc3RydWN0b3Ioe2xvZ1dhcm5pbmdzID0gZmFsc2UsIHRocm93RXhjZXB0aW9uID0gZmFsc2V9ID0ge30pIHsKKyAgICBzdXBlcih7CisgICAgICBsb2dXYXJuaW5nczogbG9nV2FybmluZ3MsCisgICAgICB0aHJvd0V4Y2VwdGlvbjogdGhyb3dFeGNlcHRpb24sCisgICAgfSk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5IGV4dGVuZHMgVHJhdmVyc2FsU3RyYXRlZ3kgeworICAvKioKKyAgICogQHBhcmFtIG9wdGlvbnMKKyAgICogQHBhcmFtIG9wdGlvbnMubG9nV2FybmluZ3MgLSBkZXRlcm1pbmVzIGlmIHdhcm5pbmdzIHNob3VsZCBiZSB3cml0dGVuIHRvIHRoZSBsb2dnZXIgd2hlbiB2ZXJpZmljYXRpb24gZmFpbHMKKyAgICogQHBhcmFtIG9wdGlvbnMudGhyb3dFeGNlcHRpb24gLSBkZXRlcm1pbmVzIGlmIGV4Y2VwdGlvbnMgc2hvdWxkIGJlIHRocm93biB3aGVuIHZlcmlmaWNhdGlvbnMgZmFpbHMKKyAgICogQHBhcmFtIG9wdGlvbnMua2V5cyAtIHRoZSBsaXN0IG9mIHJlc2VydmVkIGtleXMgdG8gdmVyaWZ5CisgICAqLworICBjb25zdHJ1Y3Rvcih7IGxvZ1dhcm5pbmdzID0gZmFsc2UsIHRocm93RXhjZXB0aW9uID0gZmFsc2UsIGtleXMgPSBbJ2lkJywgJ2xhYmVsJ10gfSA9IHt9KSB7CisgICAgc3VwZXIoeworICAgICAgbG9nV2FybmluZ3M6IGxvZ1dhcm5pbmdzLAorICAgICAgdGhyb3dFeGNlcHRpb246IHRocm93RXhjZXB0aW9uLAorICAgICAga2V5czoga2V5cywKKyAgICB9KTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHN1cGVyKCk7CisgIH0KK30KKworZXhwb3J0IHR5cGUgU2VlZFN0cmF0ZWd5T3B0aW9ucyA9IHsgc2VlZDogbnVtYmVyIH07CisKK2V4cG9ydCBjbGFzcyBTZWVkU3RyYXRlZ3kgZXh0ZW5kcyBUcmF2ZXJzYWxTdHJhdGVneSB7CisgIC8qKgorICAgKiBAcGFyYW0ge1NlZWRTdHJhdGVneU9wdGlvbnN9IFtvcHRpb25zXQorICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuc2VlZF0gdGhlIHNlZWQgdG8gcHJvdmlkZSB0byB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIHRoZSB0cmF2ZXJzYWwKKyAgICovCisgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNlZWRTdHJhdGVneU9wdGlvbnMpIHsKKyAgICBzdXBlcih7CisgICAgICBzZWVkOiBvcHRpb25zLnNlZWQsCisgICAgfSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL3RyYXZlcnNhbC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9wcm9jZXNzL3RyYXZlcnNhbC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjRiNjE1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3Byb2Nlc3MvdHJhdmVyc2FsLnRzCkBAIC0wLDAgKzEsNTQ0IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCB7IEdyYXBoIH0gZnJvbSAnLi4vc3RydWN0dXJlL2dyYXBoLmpzJzsKK2ltcG9ydCB7IFRyYXZlcnNhbFN0cmF0ZWdpZXMgfSBmcm9tICcuL3RyYXZlcnNhbC1zdHJhdGVneS5qcyc7CitpbXBvcnQgR3JlbWxpbkxhbmcgZnJvbSAnLi9ncmVtbGluLWxhbmcuanMnOworCitjb25zdCBpdGVtRG9uZSA9IE9iamVjdC5mcmVlemUoeyB2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZSB9KTsKK2NvbnN0IGFzeW5jSXRlcmF0b3JTeW1ib2wgPSBTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBTeW1ib2woJ0BAYXN5bmNJdGVyYXRvcicpOworCitleHBvcnQgY2xhc3MgVHJhdmVyc2FsIHsKKyAgcmVzdWx0czogYW55W10gfCBudWxsID0gbnVsbDsKKyAgc2lkZUVmZmVjdHM/OiBhbnkgPSBudWxsOworICBwcml2YXRlIF90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsOworICBwcml2YXRlIF9yZXN1bHRzSXRlcmF0b3JJbmRleCA9IDA7CisKKyAgY29uc3RydWN0b3IoCisgICAgcHVibGljIGdyYXBoOiBHcmFwaCB8IG51bGwsCisgICAgcHVibGljIHRyYXZlcnNhbFN0cmF0ZWdpZXM6IFRyYXZlcnNhbFN0cmF0ZWdpZXMgfCBudWxsLAorICAgIHB1YmxpYyBncmVtbGluTGFuZzogR3JlbWxpbkxhbmcgPSBuZXcgR3JlbWxpbkxhbmcoKSwKKyAgKSB7fQorCisgIC8qKgorICAgKiBBc3luYyBpdGVyYWJsZSBtZXRob2QgaW1wbGVtZW50YXRpb24uCisgICAqLworICBbYXN5bmNJdGVyYXRvclN5bWJvbF0oKSB7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICAvKiogQHJldHVybnMge0dyZW1saW5MYW5nfSAqLworICBnZXRHcmVtbGluTGFuZygpOiBHcmVtbGluTGFuZyB7CisgICAgcmV0dXJuIHRoaXMuZ3JlbWxpbkxhbmc7CisgIH0KKworICAvKioKKyAgICogUmV0dXJucyBhbiBBcnJheSBjb250YWluaW5nIHRoZSB0cmF2ZXJzZXIgb2JqZWN0cy4KKyAgICogQHJldHVybnMge1Byb21pc2UuPEFycmF5Pn0KKyAgICovCisgIHRvTGlzdDxUPigpOiBQcm9taXNlPFRbXT4geworICAgIHJldHVybiB0aGlzLl9hcHBseVN0cmF0ZWdpZXMoKS50aGVuKCgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107CisgICAgICBsZXQgaXQ7CisgICAgICB3aGlsZSAoKGl0ID0gdGhpcy5fZ2V0TmV4dCgpKSAmJiAhaXQuZG9uZSkgeworICAgICAgICByZXN1bHQucHVzaChpdC52YWx1ZSBhcyBUKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSk7CisgIH0KKworICAvKioKKyAgICogRGV0ZXJtaW5lcyBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaXRlbXMgdG8gaXRlcmF0ZSBmcm9tIHRoZSB0cmF2ZXJzYWwuCisgICAqIEByZXR1cm5zIHtQcm9taXNlLjxib29sZWFuPn0KKyAgICovCisgIGhhc05leHQoKSB7CisgICAgcmV0dXJuIHRoaXMuX2FwcGx5U3RyYXRlZ2llcygpLnRoZW4oCisgICAgICAoKSA9PiB7CisgICAgICAgIGlmICghdGhpcy5yZXN1bHRzIHx8IHRoaXMucmVzdWx0cy5sZW5ndGggPD0gMCB8fCB0aGlzLl9yZXN1bHRzSXRlcmF0b3JJbmRleCA+PSB0aGlzLnJlc3VsdHMubGVuZ3RoKSB7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnJlc3VsdHNbdGhpcy5fcmVzdWx0c0l0ZXJhdG9ySW5kZXhdIGluc3RhbmNlb2YgVHJhdmVyc2VyKSB7CisgICAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0c1t0aGlzLl9yZXN1bHRzSXRlcmF0b3JJbmRleF0uYnVsayA+IDAgfHwgdGhpcy5fcmVzdWx0c0l0ZXJhdG9ySW5kZXggKyAxIDwgdGhpcy5yZXN1bHRzLmxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgICk7CisgIH0KKworICAvKioKKyAgICogSXRlcmF0ZXMgYWxsIFRyYXZlcnNlciBpbnN0YW5jZXMgaW4gdGhlIHRyYXZlcnNhbC4KKyAgICogQHJldHVybnMge1Byb21pc2V9CisgICAqLworICBpdGVyYXRlKCkgeworICAgIHRoaXMuZ3JlbWxpbkxhbmcuYWRkU3RlcCgnZGlzY2FyZCcpOworICAgIHJldHVybiB0aGlzLl9hcHBseVN0cmF0ZWdpZXMoKS50aGVuKCgpID0+IHsKKyAgICAgIGxldCBpdDsKKyAgICAgIHdoaWxlICgoaXQgPSB0aGlzLl9nZXROZXh0KCkpICYmICFpdC5kb25lKSB7CisgICAgICAgIC8vCisgICAgICB9CisgICAgfSk7CisgIH0KKworICAvKioKKyAgICogQXN5bmMgaXRlcmF0b3IgbWV0aG9kIGltcGxlbWVudGF0aW9uLgorICAgKiBSZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIGFuIGl0ZXJhdG9yIGl0ZW0uCisgICAqIEByZXR1cm5zIHtQcm9taXNlLjx7dmFsdWUsIGRvbmV9Pn0KKyAgICovCisgIG5leHQ8VD4oKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxULCBudWxsPj4geworICAgIHJldHVybiB0aGlzLl9hcHBseVN0cmF0ZWdpZXMoKS50aGVuKCgpID0+IHRoaXMuX2dldE5leHQ8VD4oKSk7CisgIH0KKworICAvKioKKyAgICogU3luY2hyb25vdXMgaXRlcmF0b3Igb2YgdHJhdmVyc2VycyBpbmNsdWRpbmcKKyAgICogQHByaXZhdGUKKyAgICovCisgIF9nZXROZXh0PFQ+KCk6IEl0ZXJhdG9yUmVzdWx0PFQsIG51bGw+IHsKKyAgICB3aGlsZSAodGhpcy5yZXN1bHRzICYmIHRoaXMuX3Jlc3VsdHNJdGVyYXRvckluZGV4IDwgdGhpcy5yZXN1bHRzLmxlbmd0aCkgeworICAgICAgY29uc3QgbmV4dCA9IHRoaXMucmVzdWx0c1t0aGlzLl9yZXN1bHRzSXRlcmF0b3JJbmRleF07CisKKyAgICAgIGlmIChuZXh0IGluc3RhbmNlb2YgVHJhdmVyc2VyKSB7CisgICAgICAgIGlmIChuZXh0LmJ1bGsgPiAwKSB7CisgICAgICAgICAgbmV4dC5idWxrLS07CisgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5leHQub2JqZWN0LCBkb25lOiBmYWxzZSB9OworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHRoaXMuX3Jlc3VsdHNJdGVyYXRvckluZGV4Kys7CisKKyAgICAgIGlmICghKG5leHQgaW5zdGFuY2VvZiBUcmF2ZXJzZXIpKSB7CisgICAgICAgIHJldHVybiB7IHZhbHVlOiBuZXh0LCBkb25lOiBmYWxzZSB9OworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaXRlbURvbmU7CisgIH0KKworICBfYXBwbHlTdHJhdGVnaWVzKCkgeworICAgIGlmICh0aGlzLl90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZSkgeworICAgICAgLy8gQXBwbHkgc3RyYXRlZ2llcyBvbmx5IG9uY2UKKyAgICAgIHJldHVybiB0aGlzLl90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZTsKKyAgICB9CisgICAgcmV0dXJuICh0aGlzLl90cmF2ZXJzYWxTdHJhdGVnaWVzUHJvbWlzZSA9IHRoaXMudHJhdmVyc2FsU3RyYXRlZ2llcz8uYXBwbHlTdHJhdGVnaWVzKHRoaXMpID8/IFByb21pc2UucmVzb2x2ZSgpKTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHN0ZXAgaW5zdHJ1Y3Rpb25zIGR1cmluZyBKU09OIHNlcmlhbGl6YXRpb24KKyAgICogQHJldHVybnMge0FycmF5fQorICAgKi8KKyAgdG9KU09OKCkgeworICAgIHJldHVybiB0aGlzLmdyZW1saW5MYW5nLmdldEdyZW1saW4oKTsKKyAgfQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBHcmVtbGluTGFuZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhdmVyc2FsCisgICAqIEByZXR1cm5zIHtTdHJpbmd9CisgICAqLworICB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gdGhpcy5ncmVtbGluTGFuZy5nZXRHcmVtbGluKCk7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIElPIHsKKyAgc3RhdGljIGdldCBncmFwaG1sKCkgeworICAgIHJldHVybiAnZ3JhcGhtbCc7CisgIH0KKworICBzdGF0aWMgZ2V0IGdyYXBoc29uKCkgeworICAgIHJldHVybiAnZ3JhcGhzb24nOworICB9CisKKyAgc3RhdGljIGdldCBncnlvKCkgeworICAgIHJldHVybiAnZ3J5byc7CisgIH0KKworICBzdGF0aWMgZ2V0IHJlYWRlcigpIHsKKyAgICByZXR1cm4gJ350aW5rZXJwb3AuaW8ucmVhZGVyJzsKKyAgfQorCisgIHN0YXRpYyBnZXQgcmVnaXN0cnkoKSB7CisgICAgcmV0dXJuICd+dGlua2VycG9wLmlvLnJlZ2lzdHJ5JzsKKyAgfQorCisgIHN0YXRpYyBnZXQgd3JpdGVyKCkgeworICAgIHJldHVybiAnfnRpbmtlcnBvcC5pby53cml0ZXInOworICB9Cit9CisKKy8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycworY2xhc3MgQ29ubmVjdGVkQ29tcG9uZW50IHsKKyAgc3RhdGljIGdldCBjb21wb25lbnQoKSB7CisgICAgcmV0dXJuICdncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50JzsKKyAgfQorCisgIHN0YXRpYyBnZXQgZWRnZXMoKSB7CisgICAgcmV0dXJuICd+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5lZGdlcyc7CisgIH0KKworICBzdGF0aWMgZ2V0IHByb3BlcnR5TmFtZSgpIHsKKyAgICByZXR1cm4gJ350aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LnByb3BlcnR5TmFtZSc7CisgIH0KK30KKworLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCitjbGFzcyBTaG9ydGVzdFBhdGggeworICBzdGF0aWMgZ2V0IGRpc3RhbmNlKCkgeworICAgIHJldHVybiAnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UnOworICB9CisKKyAgc3RhdGljIGdldCBlZGdlcygpIHsKKyAgICByZXR1cm4gJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzJzsKKyAgfQorCisgIHN0YXRpYyBnZXQgaW5jbHVkZUVkZ2VzKCkgeworICAgIHJldHVybiAnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzJzsKKyAgfQorCisgIHN0YXRpYyBnZXQgbWF4RGlzdGFuY2UoKSB7CisgICAgcmV0dXJuICd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZSc7CisgIH0KKworICBzdGF0aWMgZ2V0IHRhcmdldCgpIHsKKyAgICByZXR1cm4gJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldCc7CisgIH0KK30KKworLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCitjbGFzcyBQYWdlUmFuayB7CisgIHN0YXRpYyBnZXQgZWRnZXMoKSB7CisgICAgcmV0dXJuICd+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzJzsKKyAgfQorCisgIHN0YXRpYyBnZXQgcHJvcGVydHlOYW1lKCkgeworICAgIHJldHVybiAnfnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUnOworICB9CisKKyAgc3RhdGljIGdldCB0aW1lcygpIHsKKyAgICByZXR1cm4gJ350aW5rZXJwb3AucGFnZVJhbmsudGltZXMnOworICB9Cit9CisKKy8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycworY2xhc3MgUGVlclByZXNzdXJlIHsKKyAgc3RhdGljIGdldCBlZGdlcygpIHsKKyAgICByZXR1cm4gJ350aW5rZXJwb3AucGVlclByZXNzdXJlLmVkZ2VzJzsKKyAgfQorCisgIHN0YXRpYyBnZXQgcHJvcGVydHlOYW1lKCkgeworICAgIHJldHVybiAnfnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lJzsKKyAgfQorCisgIHN0YXRpYyBnZXQgdGltZXMoKSB7CisgICAgcmV0dXJuICd+dGlua2VycG9wLnBlZXJQcmVzc3VyZS50aW1lcyc7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFA8VDEgPSBhbnksIFQyID0gYW55PiB7CisgIC8qKgorICAgKiBSZXByZXNlbnRzIGFuIG9wZXJhdGlvbi4KKyAgICovCisgIGNvbnN0cnVjdG9yKAorICAgIHB1YmxpYyBvcGVyYXRvcjogc3RyaW5nLAorICAgIHB1YmxpYyB2YWx1ZTogVDEsCisgICAgcHVibGljIG90aGVyOiBUMiwKKyAgKSB7fQorCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluc3RhbmNlLgorICAgKiBAcmV0dXJucyB7c3RyaW5nfQorICAgKi8KKyAgdG9TdHJpbmcoKSB7CisgICAgZnVuY3Rpb24gZm9ybWF0VmFsdWUodmFsdWU6IFQxIHwgVDIpOiBzdHJpbmcgeworICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7CisgICAgICAgIGNvbnN0IGFjYyA9IFtdOworICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHsKKyAgICAgICAgICBhY2MucHVzaChmb3JtYXRWYWx1ZShpdGVtKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICdbJyArIGFjYy5qb2luKCcsICcpICsgJ10nOworICAgICAgfQorICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAgcmV0dXJuIGAnJHt2YWx1ZX0nYDsKKyAgICAgIH0KKyAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOworICAgIH0KKworICAgIGlmICh0aGlzLm90aGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5vdGhlciA9PT0gbnVsbCkgeworICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgKyAnKCcgKyBmb3JtYXRWYWx1ZSh0aGlzLnZhbHVlKSArICcpJzsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgKyAnKCcgKyBmb3JtYXRWYWx1ZSh0aGlzLnZhbHVlKSArICcsICcgKyBmb3JtYXRWYWx1ZSh0aGlzLm90aGVyKSArICcpJzsKKyAgfQorCisgIGFuZChhcmc/OiBhbnkpIHsKKyAgICByZXR1cm4gbmV3IFAoJ2FuZCcsIHRoaXMsIGFyZyk7CisgIH0KKworICBvcihhcmc/OiBhbnkpIHsKKyAgICByZXR1cm4gbmV3IFAoJ29yJywgdGhpcywgYXJnKTsKKyAgfQorCisgIHN0YXRpYyB3aXRoaW4oLi4uYXJnczogYW55W10pIHsKKyAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgQXJyYXkuaXNBcnJheShhcmdzWzBdKSkgeworICAgICAgcmV0dXJuIG5ldyBQKCd3aXRoaW4nLCBhcmdzWzBdLCBudWxsKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBQKCd3aXRoaW4nLCBhcmdzLCBudWxsKTsKKyAgfQorCisgIHN0YXRpYyB3aXRob3V0KC4uLmFyZ3M6IGFueVtdKSB7CisgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHsKKyAgICAgIHJldHVybiBuZXcgUCgnd2l0aG91dCcsIGFyZ3NbMF0sIG51bGwpOworICAgIH0KKyAgICByZXR1cm4gbmV3IFAoJ3dpdGhvdXQnLCBhcmdzLCBudWxsKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgYmV0d2VlbiguLi5hcmdzOiBhbnlbXSkgeworICAgIHJldHVybiBjcmVhdGVQKCdiZXR3ZWVuJywgYXJncyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIGVxKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ2VxJywgYXJncyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIGd0KC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ2d0JywgYXJncyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIGd0ZSguLi5hcmdzOiBhbnlbXSkgeworICAgIHJldHVybiBjcmVhdGVQKCdndGUnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgaW5zaWRlKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ2luc2lkZScsIGFyZ3MpOworICB9CisKKyAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCisgIHN0YXRpYyBsdCguLi5hcmdzOiBhbnlbXSkgeworICAgIHJldHVybiBjcmVhdGVQKCdsdCcsIGFyZ3MpOworICB9CisKKyAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCisgIHN0YXRpYyBsdGUoLi4uYXJnczogYW55W10pIHsKKyAgICByZXR1cm4gY3JlYXRlUCgnbHRlJywgYXJncyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIG5lcSguLi5hcmdzOiBhbnlbXSkgeworICAgIHJldHVybiBjcmVhdGVQKCduZXEnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgbm90KC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ25vdCcsIGFyZ3MpOworICB9CisKKyAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCisgIHN0YXRpYyBvdXRzaWRlKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ291dHNpZGUnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgdHlwZU9mKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ3R5cGVPZicsIGFyZ3MpOworICB9CisKKyAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCisgIHN0YXRpYyB0ZXN0KC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVAoJ3Rlc3QnLCBhcmdzKTsKKyAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVQKG9wZXJhdG9yOiBzdHJpbmcsIGFyZ3M6IGFueSkgeworICBhcmdzLnVuc2hpZnQobnVsbCwgb3BlcmF0b3IpOworICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShQLCBhcmdzKSkoKTsKK30KKworZXhwb3J0IGNsYXNzIFRleHRQPFQxID0gYW55LCBUMiA9IGFueT4geworICAvKioKKyAgICogUmVwcmVzZW50cyBhbiBvcGVyYXRpb24uCisgICAqLworICBjb25zdHJ1Y3RvcigKKyAgICBwdWJsaWMgb3BlcmF0b3I6IHN0cmluZywKKyAgICBwdWJsaWMgdmFsdWU6IFQxLAorICAgIHB1YmxpYyBvdGhlcjogVDIsCisgICkge30KKworICAvKioKKyAgICogUmV0dXJucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnN0YW5jZS4KKyAgICogQHJldHVybnMge3N0cmluZ30KKyAgICovCisgIHRvU3RyaW5nKCkgeworICAgIGZ1bmN0aW9uIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnkpIHsKKyAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7CisgICAgICAgIHJldHVybiBgJyR7dmFsdWV9J2A7CisgICAgICB9CisgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKHRoaXMub3RoZXIgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgKyAnKCcgKyBmb3JtYXRWYWx1ZSh0aGlzLnZhbHVlKSArICcpJzsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMub3BlcmF0b3IgKyAnKCcgKyBmb3JtYXRWYWx1ZSh0aGlzLnZhbHVlKSArICcsICcgKyBmb3JtYXRWYWx1ZSh0aGlzLm90aGVyKSArICcpJzsKKyAgfQorCisgIGFuZChhcmc6IGFueSkgeworICAgIHJldHVybiBuZXcgUCgnYW5kJywgdGhpcywgYXJnKTsKKyAgfQorCisgIG9yKGFyZzogYW55KSB7CisgICAgcmV0dXJuIG5ldyBQKCdvcicsIHRoaXMsIGFyZyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIGNvbnRhaW5pbmcoLi4uYXJnczogYW55W10pIHsKKyAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ2NvbnRhaW5pbmcnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgZW5kaW5nV2l0aCguLi5hcmdzOiBhbnlbXSkgeworICAgIHJldHVybiBjcmVhdGVUZXh0UCgnZW5kaW5nV2l0aCcsIGFyZ3MpOworICB9CisKKyAgLyoqIEBwYXJhbSB7Li4uT2JqZWN0fSBhcmdzICovCisgIHN0YXRpYyBub3RDb250YWluaW5nKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVRleHRQKCdub3RDb250YWluaW5nJywgYXJncyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIG5vdEVuZGluZ1dpdGgoLi4uYXJnczogYW55W10pIHsKKyAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ25vdEVuZGluZ1dpdGgnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgbm90U3RhcnRpbmdXaXRoKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVRleHRQKCdub3RTdGFydGluZ1dpdGgnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgc3RhcnRpbmdXaXRoKC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVRleHRQKCdzdGFydGluZ1dpdGgnLCBhcmdzKTsKKyAgfQorCisgIC8qKiBAcGFyYW0gey4uLk9iamVjdH0gYXJncyAqLworICBzdGF0aWMgcmVnZXgoLi4uYXJnczogYW55W10pIHsKKyAgICByZXR1cm4gY3JlYXRlVGV4dFAoJ3JlZ2V4JywgYXJncyk7CisgIH0KKworICAvKiogQHBhcmFtIHsuLi5PYmplY3R9IGFyZ3MgKi8KKyAgc3RhdGljIG5vdFJlZ2V4KC4uLmFyZ3M6IGFueVtdKSB7CisgICAgcmV0dXJuIGNyZWF0ZVRleHRQKCdub3RSZWdleCcsIGFyZ3MpOworICB9Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRleHRQKG9wZXJhdG9yOiBzdHJpbmcsIGFyZ3M6IGFueSkgeworICBhcmdzLnVuc2hpZnQobnVsbCwgb3BlcmF0b3IpOworICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseShUZXh0UCwgYXJncykpKCk7Cit9CisKK2V4cG9ydCBjbGFzcyBUcmF2ZXJzZXI8VCA9IGFueT4geworICBjb25zdHJ1Y3RvcigKKyAgICBwdWJsaWMgb2JqZWN0OiBULAorICAgIHB1YmxpYyBidWxrOiBudW1iZXIsCisgICkgeworICAgIHRoaXMuYnVsayA9IGJ1bGsgfHwgMTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgVHJhdmVyc2FsU2lkZUVmZmVjdHMge30KKworZXhwb3J0IGNvbnN0IHdpdGhPcHRpb25zID0geworICB0b2tlbnM6ICd+dGlua2VycG9wLnZhbHVlTWFwLnRva2VucycsCisgIG5vbmU6IDAsCisgIGlkczogMSwKKyAgbGFiZWxzOiAyLAorICBrZXlzOiA0LAorICB2YWx1ZXM6IDgsCisgIGFsbDogMTUsCisgIGluZGV4ZXI6ICd+dGlua2VycG9wLmluZGV4LmluZGV4ZXInLAorICBsaXN0OiAwLAorICBtYXA6IDEsCit9OworCitmdW5jdGlvbiB0b0VudW0odHlwZU5hbWU6IHN0cmluZywga2V5czogc3RyaW5nKSB7CisgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgRW51bVZhbHVlPiA9IHt9OworICBrZXlzLnNwbGl0KCcgJykuZm9yRWFjaCgoaykgPT4geworICAgIGxldCBqc0tleSA9IGs7CisgICAgaWYgKGpzS2V5ID09PSBqc0tleS50b1VwcGVyQ2FzZSgpKSB7CisgICAgICBqc0tleSA9IGpzS2V5LnRvTG93ZXJDYXNlKCk7CisgICAgfQorICAgIHJlc3VsdFtqc0tleV0gPSBuZXcgRW51bVZhbHVlKHR5cGVOYW1lLCBrKTsKKyAgfSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2NvbnN0IGRpcmVjdGlvbkFsaWFzID0geworICBmcm9tXzogJ291dCcsCisgIHRvOiAnaW4nLAorfSBhcyBjb25zdDsKKworLy8gZm9yIGRpcmVjdGlvbiBlbnVtcywgbWFwcyB0aGUgc2FtZSBFbnVtVmFsdWUgb2JqZWN0IHRvIHRoZSBlbnVtIGFsaWFzZXMgYWZ0ZXIgY3JlYXRpbmcgdGhlbQorZnVuY3Rpb24gdG9EaXJlY3Rpb25FbnVtKHR5cGVOYW1lOiBzdHJpbmcsIGtleXM6IHN0cmluZykgeworICBjb25zdCByZXN1bHQgPSB0b0VudW0odHlwZU5hbWUsIGtleXMpOworICBPYmplY3Qua2V5cyhkaXJlY3Rpb25BbGlhcykuZm9yRWFjaCgoaykgPT4geworICAgIHJlc3VsdFtrXSA9IHJlc3VsdFtkaXJlY3Rpb25BbGlhc1trIGFzIGtleW9mIHR5cGVvZiBkaXJlY3Rpb25BbGlhc11dOworICB9KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gdG9HVHlwZUVudW0odHlwZU5hbWU6IHN0cmluZywga2V5czogc3RyaW5nKSB7CisgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9OworICBrZXlzLnNwbGl0KCcgJykuZm9yRWFjaCgoaykgPT4geworICAgIHJlc3VsdFtrXSA9IG5ldyBFbnVtVmFsdWUodHlwZU5hbWUsIGsudG9VcHBlckNhc2UoKSk7CisgIH0pOworICByZXR1cm4gcmVzdWx0OworfQorCitleHBvcnQgY2xhc3MgRW51bVZhbHVlIHsKKyAgY29uc3RydWN0b3IoCisgICAgcHVibGljIHR5cGVOYW1lOiBzdHJpbmcsCisgICAgcHVibGljIGVsZW1lbnROYW1lOiBzdHJpbmcsCisgICkge30KKworICB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gdGhpcy50eXBlTmFtZSArICcuJyArIHRoaXMuZWxlbWVudE5hbWU7CisgIH0KK30KKworZXhwb3J0IGNvbnN0IGJhcnJpZXIgPSB0b0VudW0oJ0JhcnJpZXInLCAnbm9ybVNhY2snKTsKK2V4cG9ydCBjb25zdCBjYXJkaW5hbGl0eSA9IHRvRW51bSgnQ2FyZGluYWxpdHknLCAnbGlzdCBzZXQgc2luZ2xlJyk7CitleHBvcnQgY29uc3QgY29sdW1uID0gdG9FbnVtKCdDb2x1bW4nLCAna2V5cyB2YWx1ZXMnKTsKK2V4cG9ydCBjb25zdCBkaXJlY3Rpb24gPSB0b0RpcmVjdGlvbkVudW0oJ0RpcmVjdGlvbicsICdCT1RIIElOIE9VVCBmcm9tXyB0bycpOworZXhwb3J0IGNvbnN0IGR0ID0gdG9FbnVtKCdEVCcsICdzZWNvbmQgbWludXRlIGhvdXIgZGF5Jyk7CitleHBvcnQgY29uc3QgZ1R5cGUgPSB0b0dUeXBlRW51bSgnR1R5cGUnLCAnYmlnRGVjaW1hbCBiaWdJbnQgYmluYXJ5IGJvb2xlYW4gYnl0ZSBjaGFyIGRhdGV0aW1lIGRvdWJsZSBkdXJhdGlvbiBlZGdlIGZsb2F0IGdyYXBoIGludCBsaXN0IGxvbmcgbWFwIG51bGwgbnVtYmVyIHBhdGggcHJvcGVydHkgc2V0IHNob3J0IHN0cmluZyB0cmVlIHV1aWQgdmVydGV4IHZwcm9wZXJ0eScpOworZXhwb3J0IGNvbnN0IGdyYXBoU09OVmVyc2lvbiA9IHRvRW51bSgnR3JhcGhTT05WZXJzaW9uJywgJ1YxXzAgVjJfMCBWM18wJyk7CitleHBvcnQgY29uc3QgZ3J5b1ZlcnNpb24gPSB0b0VudW0oJ0dyeW9WZXJzaW9uJywgJ1YxXzAgVjNfMCcpOworZXhwb3J0IGNvbnN0IG1lcmdlID0gdG9FbnVtKCdNZXJnZScsICdvbkNyZWF0ZSBvbk1hdGNoIG91dFYgaW5WJyk7CitleHBvcnQgY29uc3Qgb3BlcmF0b3IgPSB0b0VudW0oJ09wZXJhdG9yJywgJ2FkZEFsbCBhbmQgYXNzaWduIGRpdiBtYXggbWluIG1pbnVzIG11bHQgb3Igc3VtIHN1bUxvbmcnKTsKK2V4cG9ydCBjb25zdCBvcmRlciA9IHRvRW51bSgnT3JkZXInLCAnYXNjIGRlc2Mgc2h1ZmZsZScpOworZXhwb3J0IGNvbnN0IHBpY2sgPSB0b0VudW0oJ1BpY2snLCAnYW55IG5vbmUgdW5wcm9kdWN0aXZlJyk7CitleHBvcnQgY29uc3QgcG9wID0gdG9FbnVtKCdQb3AnLCAnYWxsIGZpcnN0IGxhc3QgbWl4ZWQnKTsKK2V4cG9ydCBjb25zdCBzY29wZSA9IHRvRW51bSgnU2NvcGUnLCAnZ2xvYmFsIGxvY2FsJyk7CitleHBvcnQgY29uc3QgdCA9IHRvRW51bSgnVCcsICdpZCBrZXkgbGFiZWwgdmFsdWUnKTsKK2V4cG9ydCBjb25zdCBuID0gdG9FbnVtKCdOJywgJ2J5dGVfIHNob3J0XyBpbnRfIGxvbmdfIGZsb2F0XyBkb3VibGVfIGJpZ0ludCBiaWdEZWNpbWFsJyk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2dyYXBoLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9ncmFwaC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGI4NjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9ncmFwaC50cwpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKKyAqLworCisvKioKKyAqIEFuICJlbXB0eSIgZ3JhcGggb2JqZWN0IHRvIHNlcnZlciBvbmx5IGFzIGEgcmVmZXJlbmNlLgorICovCitleHBvcnQgY2xhc3MgR3JhcGggeworICB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gJ2dyYXBoW10nOworICB9Cit9CisKK2NsYXNzIEVsZW1lbnQ8VExhYmVsIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUSWQgPSBhbnk+IHsKKyAgLy8gcHJvcGVydGllcyBhcmUgc3RvcmVkIGFzIGxpc3Qgb2YgcHJvcGVydHkgb2JqZWN0cworICBjb25zdHJ1Y3RvcigKKyAgICByZWFkb25seSBpZDogVElkLAorICAgIHJlYWRvbmx5IGxhYmVsOiBUTGFiZWwsCisgICAgcmVhZG9ubHkgcHJvcGVydGllczogUHJvcGVydHlbXSA9IFtdCisgICkgeworICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgPz8gW107CisgIH0KKworICAvKioKKyAgICogQ29tcGFyZXMgdGhpcyBpbnN0YW5jZSB0byBhbm90aGVyIGFuZCBkZXRlcm1pbmVzIGlmIHRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgYXMgZXF1YWwuCisgICAqLworICBlcXVhbHMob3RoZXI6IGFueSk6IGJvb2xlYW4geworICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgdGhpcy5pZCA9PT0gb3RoZXIuaWQ7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIFZlcnRleDwKKyAgVExhYmVsIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLAorICBUUHJvcGVydGllcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LAorICBUSWQgPSBudW1iZXIsCisgIFRWZXJ0ZXhQcm9wZXJ0aWVzID0geworICAgIFtQIGluIGtleW9mIFRQcm9wZXJ0aWVzXTogUCBleHRlbmRzIHN0cmluZyA/IFZlcnRleFByb3BlcnRpZXM8UCwgVFByb3BlcnRpZXNbUF0+IDogbmV2ZXI7CisgIH0sCis+IGV4dGVuZHMgRWxlbWVudDxUTGFiZWwsIFRJZD4geworICBjb25zdHJ1Y3RvcigKKyAgICBpZDogVElkLAorICAgIGxhYmVsOiBUTGFiZWwsCisgICAgcHJvcGVydGllczogUHJvcGVydHlbXSB8IG51bGwgPSBbXSwKKyAgKSB7CisgICAgc3VwZXIoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzID8/IFtdKTsKKyAgfQorCisgIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBgdlske3RoaXMuaWR9XWA7CisgIH0KK30KKworZXhwb3J0IGNsYXNzIEVkZ2U8CisgIFRPdXRWZXJ0ZXggZXh0ZW5kcyBWZXJ0ZXggPSBWZXJ0ZXgsCisgIFRMYWJlbCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywKKyAgVEluVmVydGV4IGV4dGVuZHMgVmVydGV4ID0gVmVydGV4LAorICBUUHJvcGVydGllcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LAorICBUSWQgPSBudW1iZXIsCis+IGV4dGVuZHMgRWxlbWVudDxUTGFiZWwsIFRJZD4geworICBjb25zdHJ1Y3RvcigKKyAgICBpZDogVElkLAorICAgIHJlYWRvbmx5IG91dFY6IFRPdXRWZXJ0ZXgsCisgICAgcmVhZG9ubHkgbGFiZWw6IFRMYWJlbCwKKyAgICByZWFkb25seSBpblY6IFRJblZlcnRleCwKKyAgICBwcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdIHwgbnVsbCA9IFtdLAorICApIHsKKyAgICBzdXBlcihpZCwgbGFiZWwsIHByb3BlcnRpZXMgPz8gW10pOworICB9CisKKyAgdG9TdHJpbmcoKSB7CisgICAgY29uc3Qgb3V0VklkID0gdGhpcy5vdXRWID8gdGhpcy5vdXRWLmlkIDogJz8nOworICAgIGNvbnN0IGluVklkID0gdGhpcy5pblYgPyB0aGlzLmluVi5pZCA6ICc/JzsKKworICAgIHJldHVybiBgZVske3RoaXMuaWR9XVske291dFZJZH0tJHt0aGlzLmxhYmVsfS0+JHtpblZJZH1dYDsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgVmVydGV4UHJvcGVydHk8CisgIFRMYWJlbCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywKKyAgVFZhbHVlID0gYW55LAorICBUUHJvcGVydGllcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHwgdW5kZWZpbmVkID0gUmVjb3JkPHN0cmluZywgYW55PiwKKyAgVElkID0gYW55LAorPiBleHRlbmRzIEVsZW1lbnQ8VExhYmVsLCBUSWQ+IHsKKyAgcmVhZG9ubHkga2V5OiBzdHJpbmc7CisKKyAgY29uc3RydWN0b3IoCisgICAgaWQ6IFRJZCwKKyAgICBsYWJlbDogVExhYmVsLAorICAgIHJlYWRvbmx5IHZhbHVlOiBUVmFsdWUsCisgICAgcHJvcGVydGllczogUHJvcGVydHlbXSB8IG51bGwgPSBbXSwKKyAgKSB7CisgICAgc3VwZXIoaWQsIGxhYmVsLCBwcm9wZXJ0aWVzID8/IFtdKTsKKyAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAgdGhpcy5rZXkgPSB0aGlzLmxhYmVsOworICB9CisKKyAgdG9TdHJpbmcoKSB7CisgICAgcmV0dXJuIGB2cFske3RoaXMubGFiZWx9LT4ke3N1bW1hcml6ZSh0aGlzLnZhbHVlKX1dYDsKKyAgfQorfQorCitleHBvcnQgdHlwZSBWZXJ0ZXhQcm9wZXJ0aWVzPAorICBUTGFiZWwgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsCisgIFRWYWx1ZSA9IGFueSwKKyAgVFByb3BlcnRpZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwKKyAgVElkID0gYW55LAorPiA9IFtWZXJ0ZXhQcm9wZXJ0eTxUTGFiZWwsIFRWYWx1ZSwgVFByb3BlcnRpZXMsIFRJZD4sIC4uLkFycmF5PFZlcnRleFByb3BlcnR5PFRMYWJlbCwgVFZhbHVlLCBUUHJvcGVydGllcywgVElkPj5dOworCitleHBvcnQgY2xhc3MgUHJvcGVydHk8VCA9IGFueT4geworICBjb25zdHJ1Y3RvcigKKyAgICByZWFkb25seSBrZXk6IHN0cmluZywKKyAgICByZWFkb25seSB2YWx1ZTogVCwKKyAgKSB7fQorCisgIHRvU3RyaW5nKCkgeworICAgIHJldHVybiBgcFske3RoaXMua2V5fS0+JHtzdW1tYXJpemUodGhpcy52YWx1ZSl9XWA7CisgIH0KKworICBlcXVhbHMob3RoZXI6IGFueSkgeworICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIFByb3BlcnR5ICYmIHRoaXMua2V5ID09PSBvdGhlci5rZXkgJiYgdGhpcy52YWx1ZSA9PT0gb3RoZXIudmFsdWU7CisgIH0KK30KKworLyoqCisgKiBSZXByZXNlbnRzIGEgd2FsayB0aHJvdWdoIGEgZ3JhcGggYXMgZGVmaW5lZCBieSBhIHRyYXZlcnNhbC4KKyAqLworZXhwb3J0IGNsYXNzIFBhdGggeworICBjb25zdHJ1Y3RvcigKKyAgICByZWFkb25seSBsYWJlbHM6IHN0cmluZ1tdW10sCisgICAgcmVhZG9ubHkgb2JqZWN0czogYW55W10sCisgICkge30KKworICB0b1N0cmluZygpIHsKKyAgICByZXR1cm4gYHBhdGhbJHsodGhpcy5vYmplY3RzIHx8IFtdKS5qb2luKCcsICcpfV1gOworICB9CisKKyAgZXF1YWxzKG90aGVyOiBhbnkpIHsKKyAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFBhdGgpKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChvdGhlciA9PT0gdGhpcykgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBhcmVFcXVhbCh0aGlzLm9iamVjdHMsIG90aGVyLm9iamVjdHMpICYmIGFyZUVxdWFsKHRoaXMubGFiZWxzLCBvdGhlci5sYWJlbHMpOworICB9Cit9CisKK2Z1bmN0aW9uIGFyZUVxdWFsKG9iajE6IGFueSwgb2JqMjogYW55KSB7CisgIGlmIChvYmoxID09PSBvYmoyKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKHR5cGVvZiBvYmoxLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykgeworICAgIHJldHVybiBvYmoxLmVxdWFscyhvYmoyKTsKKyAgfQorICBpZiAoQXJyYXkuaXNBcnJheShvYmoxKSAmJiBBcnJheS5pc0FycmF5KG9iajIpKSB7CisgICAgaWYgKG9iajEubGVuZ3RoICE9PSBvYmoyLmxlbmd0aCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iajEubGVuZ3RoOyBpKyspIHsKKyAgICAgIGlmICghYXJlRXF1YWwob2JqMVtpXSwgb2JqMltpXSkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIHN1bW1hcml6ZSh2YWx1ZTogYW55KSB7CisgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgcmV0dXJuIHZhbHVlOworICB9CisKKyAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS50b1N0cmluZygpOworICByZXR1cm4gc3RyVmFsdWUubGVuZ3RoID4gMjAgPyBzdHJWYWx1ZS5zdWJzdHIoMCwgMjApIDogc3RyVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTMwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBHcmFwaEJpbmFyeSA0LjAgc3VwcG9ydCBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBUaGUgb2ZmaWNpYWxseSBleHBlY3RlZCBlbnRyeXBvaW50IGlzIEdyYXBoQmluYXJ5UmVhZGVyL0dyYXBoQmluYXJ5V3JpdGVyIHBhaXIgb2YgY2xhc3NlcywKKyAqIGV4YW1pbmUgbGliL2RyaXZlci8qKiBmb3IgdXNlIGNhc2VzLgorICoKKyAqIFNlZSBBbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgpIGZvciB0aGUgbWVjaGFuaXNtIG9mIHNlcmlhbGl6ZXIgc2VsZWN0aW9uIGZvciBhIGdpdmVuIEphdmFTY3JpcHQgdmFsdWUsCisgKiBhbHNvIGNvbnNpZGVyIEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdW5pdCB0ZXN0cyBmb3IgcmVhbCBleGFtcGxlcy4KKyAqIFNlZSBOdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3kgdG8gdW5kZXJzdGFuZCBob3cgaXQgZGVhbHMgd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMnIHNlcmlhbGl6YXRpb24uCisgKgorICogVE9ETzogaXQgaGFzIHRoZSBmb2xsb3dpbmcgb3BlbiB0b3BpY3M6CisgKiBDb3JlIERhdGEgVHlwZXMgc3VwcG9ydDoKKyAqIC0gW10gMHgyMjogQmlnRGVjaW1hbAorICogLSBbXSAweDJiOiBUcmVlCisgKiBFeHRlbmRlZCBUeXBlcyBzdXBwb3J0OgorICogLSBbXSAweDgwOiBDaGFyCisgKiAtIFtdIDB4ODE6IER1cmF0aW9uCisgKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisvKmVzbGludC1kaXNhYmxlKi8KKworaW1wb3J0IERhdGFUeXBlIGZyb20gJy4vaW50ZXJuYWxzL0RhdGFUeXBlLmpzJzsKK2ltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vaW50ZXJuYWxzL3V0aWxzLmpzJzsKK2ltcG9ydCBJbnRTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0ludFNlcmlhbGl6ZXIuanMnOworaW1wb3J0IExvbmdTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0xvbmdTZXJpYWxpemVyLmpzJzsKK2ltcG9ydCBTdHJpbmdTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL1N0cmluZ1NlcmlhbGl6ZXIuanMnOworaW1wb3J0IERhdGVUaW1lU2VyaWFsaXplciBmcm9tICcuL2ludGVybmFscy9EYXRlVGltZVNlcmlhbGl6ZXIuanMnOworaW1wb3J0IERvdWJsZVNlcmlhbGl6ZXIgZnJvbSAnLi9pbnRlcm5hbHMvRG91YmxlU2VyaWFsaXplci5qcyc7CitpbXBvcnQgRmxvYXRTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0Zsb2F0U2VyaWFsaXplci5qcyc7CitpbXBvcnQgQXJyYXlTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0FycmF5U2VyaWFsaXplci5qcyc7CitpbXBvcnQgTWFwU2VyaWFsaXplciBmcm9tICcuL2ludGVybmFscy9NYXBTZXJpYWxpemVyLmpzJzsKK2ltcG9ydCBTZXRTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL1NldFNlcmlhbGl6ZXIuanMnOworaW1wb3J0IFV1aWRTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL1V1aWRTZXJpYWxpemVyLmpzJzsKK2ltcG9ydCBFZGdlU2VyaWFsaXplciBmcm9tICcuL2ludGVybmFscy9FZGdlU2VyaWFsaXplci5qcyc7CitpbXBvcnQgUGF0aFNlcmlhbGl6ZXIgZnJvbSAnLi9pbnRlcm5hbHMvUGF0aFNlcmlhbGl6ZXIuanMnOworaW1wb3J0IFByb3BlcnR5U2VyaWFsaXplciBmcm9tICcuL2ludGVybmFscy9Qcm9wZXJ0eVNlcmlhbGl6ZXIuanMnOworaW1wb3J0IFZlcnRleFNlcmlhbGl6ZXIgZnJvbSAnLi9pbnRlcm5hbHMvVmVydGV4U2VyaWFsaXplci5qcyc7CitpbXBvcnQgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci5qcyc7CitpbXBvcnQgQmlnSW50ZWdlclNlcmlhbGl6ZXIgZnJvbSAnLi9pbnRlcm5hbHMvQmlnSW50ZWdlclNlcmlhbGl6ZXIuanMnOworaW1wb3J0IEJ5dGVTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0J5dGVTZXJpYWxpemVyLmpzJzsKK2ltcG9ydCBCaW5hcnlTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0JpbmFyeVNlcmlhbGl6ZXIuanMnOworaW1wb3J0IFNob3J0U2VyaWFsaXplciBmcm9tICcuL2ludGVybmFscy9TaG9ydFNlcmlhbGl6ZXIuanMnOworaW1wb3J0IEJvb2xlYW5TZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0Jvb2xlYW5TZXJpYWxpemVyLmpzJzsKK2ltcG9ydCBNYXJrZXJTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL01hcmtlclNlcmlhbGl6ZXIuanMnOworaW1wb3J0IFVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIgZnJvbSAnLi9pbnRlcm5hbHMvVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci5qcyc7CitpbXBvcnQgRW51bVNlcmlhbGl6ZXIgZnJvbSAnLi9pbnRlcm5hbHMvRW51bVNlcmlhbGl6ZXIuanMnOworaW1wb3J0IFN0dWJTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL1N0dWJTZXJpYWxpemVyLmpzJzsKK2ltcG9ydCBOdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3kgZnJvbSAnLi9pbnRlcm5hbHMvTnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5LmpzJzsKK2ltcG9ydCBBbnlTZXJpYWxpemVyIGZyb20gJy4vaW50ZXJuYWxzL0FueVNlcmlhbGl6ZXIuanMnOworaW1wb3J0IEdyYXBoQmluYXJ5UmVhZGVyIGZyb20gJy4vaW50ZXJuYWxzL0dyYXBoQmluYXJ5UmVhZGVyLmpzJzsKK2ltcG9ydCBHcmFwaEJpbmFyeVdyaXRlciBmcm9tICcuL2ludGVybmFscy9HcmFwaEJpbmFyeVdyaXRlci5qcyc7CisKK2NvbnN0IGlvYyA9IHt9OworCitpb2MuRGF0YVR5cGUgPSBEYXRhVHlwZTsKK2lvYy51dGlscyA9IHV0aWxzOworCitpb2Muc2VyaWFsaXplcnMgPSB7fTsKKworaW9jLmludFNlcmlhbGl6ZXIgPSBuZXcgSW50U2VyaWFsaXplcihpb2MpOworaW9jLmxvbmdTZXJpYWxpemVyID0gbmV3IExvbmdTZXJpYWxpemVyKGlvYyk7Citpb2Muc3RyaW5nU2VyaWFsaXplciA9IG5ldyBTdHJpbmdTZXJpYWxpemVyKGlvYywgaW9jLkRhdGFUeXBlLlNUUklORyk7Citpb2MuZGF0ZVRpbWVTZXJpYWxpemVyID0gbmV3IERhdGVUaW1lU2VyaWFsaXplcihpb2MpOworaW9jLmRvdWJsZVNlcmlhbGl6ZXIgPSBuZXcgRG91YmxlU2VyaWFsaXplcihpb2MpOworaW9jLmZsb2F0U2VyaWFsaXplciA9IG5ldyBGbG9hdFNlcmlhbGl6ZXIoaW9jKTsKK2lvYy5saXN0U2VyaWFsaXplciA9IG5ldyBBcnJheVNlcmlhbGl6ZXIoaW9jLCBpb2MuRGF0YVR5cGUuTElTVCk7Citpb2MubWFwU2VyaWFsaXplciA9IG5ldyBNYXBTZXJpYWxpemVyKGlvYyk7Citpb2Muc2V0U2VyaWFsaXplciA9IG5ldyBTZXRTZXJpYWxpemVyKGlvYywgaW9jLkRhdGFUeXBlLlNFVCk7Citpb2MudXVpZFNlcmlhbGl6ZXIgPSBuZXcgVXVpZFNlcmlhbGl6ZXIoaW9jKTsKK2lvYy5lZGdlU2VyaWFsaXplciA9IG5ldyBFZGdlU2VyaWFsaXplcihpb2MpOworaW9jLnBhdGhTZXJpYWxpemVyID0gbmV3IFBhdGhTZXJpYWxpemVyKGlvYyk7Citpb2MucHJvcGVydHlTZXJpYWxpemVyID0gbmV3IFByb3BlcnR5U2VyaWFsaXplcihpb2MpOworaW9jLnZlcnRleFNlcmlhbGl6ZXIgPSBuZXcgVmVydGV4U2VyaWFsaXplcihpb2MpOworaW9jLnZlcnRleFByb3BlcnR5U2VyaWFsaXplciA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIoaW9jKTsKK2lvYy5iaWdJbnRlZ2VyU2VyaWFsaXplciA9IG5ldyBCaWdJbnRlZ2VyU2VyaWFsaXplcihpb2MpOworaW9jLmJ5dGVTZXJpYWxpemVyID0gbmV3IEJ5dGVTZXJpYWxpemVyKGlvYyk7Citpb2MuYmluYXJ5U2VyaWFsaXplciA9IG5ldyBCaW5hcnlTZXJpYWxpemVyKGlvYyk7Citpb2Muc2hvcnRTZXJpYWxpemVyID0gbmV3IFNob3J0U2VyaWFsaXplcihpb2MpOworaW9jLmJvb2xlYW5TZXJpYWxpemVyID0gbmV3IEJvb2xlYW5TZXJpYWxpemVyKGlvYyk7Citpb2MubWFya2VyU2VyaWFsaXplciA9IG5ldyBNYXJrZXJTZXJpYWxpemVyKGlvYyk7Citpb2MudW5zcGVjaWZpZWROdWxsU2VyaWFsaXplciA9IG5ldyBVbnNwZWNpZmllZE51bGxTZXJpYWxpemVyKGlvYyk7Citpb2MuZW51bVNlcmlhbGl6ZXIgPSBuZXcgRW51bVNlcmlhbGl6ZXIoaW9jKTsKKworLy8gUmVnaXN0ZXIgc3R1YiBzZXJpYWxpemVycyBmb3IgdW5pbXBsZW1lbnRlZCB2NCB0eXBlcworbmV3IFN0dWJTZXJpYWxpemVyKGlvYywgaW9jLkRhdGFUeXBlLlRSRUUsICdUcmVlJyk7CituZXcgU3R1YlNlcmlhbGl6ZXIoaW9jLCBpb2MuRGF0YVR5cGUuR1JBUEgsICdHcmFwaCcpOworbmV3IFN0dWJTZXJpYWxpemVyKGlvYywgaW9jLkRhdGFUeXBlLkNPTVBPU0lURVBEVCwgJ0NvbXBvc2l0ZVBEVCcpOworbmV3IFN0dWJTZXJpYWxpemVyKGlvYywgaW9jLkRhdGFUeXBlLlBSSU1JVElWRVBEVCwgJ1ByaW1pdGl2ZVBEVCcpOworCitpb2MubnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5ID0gbmV3IE51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneShpb2MpOworaW9jLmFueVNlcmlhbGl6ZXIgPSBuZXcgQW55U2VyaWFsaXplcihpb2MpOworCitpb2MuZ3JhcGhCaW5hcnlSZWFkZXIgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIoaW9jKTsKK2lvYy5ncmFwaEJpbmFyeVdyaXRlciA9IG5ldyBHcmFwaEJpbmFyeVdyaXRlcihpb2MpOworCitleHBvcnQgeyBkZWZhdWx0IGFzIERhdGFUeXBlIH0gZnJvbSAnLi9pbnRlcm5hbHMvRGF0YVR5cGUuanMnOworCitleHBvcnQgY29uc3QgeworICBzZXJpYWxpemVycywKKyAgaW50U2VyaWFsaXplciwKKyAgbG9uZ1NlcmlhbGl6ZXIsCisgIHN0cmluZ1NlcmlhbGl6ZXIsCisgIGRhdGVUaW1lU2VyaWFsaXplciwKKyAgZG91YmxlU2VyaWFsaXplciwKKyAgZmxvYXRTZXJpYWxpemVyLAorICBsaXN0U2VyaWFsaXplciwKKyAgbWFwU2VyaWFsaXplciwKKyAgc2V0U2VyaWFsaXplciwKKyAgdXVpZFNlcmlhbGl6ZXIsCisgIGVkZ2VTZXJpYWxpemVyLAorICBwYXRoU2VyaWFsaXplciwKKyAgcHJvcGVydHlTZXJpYWxpemVyLAorICB2ZXJ0ZXhTZXJpYWxpemVyLAorICB2ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIsCisgIGJpZ0ludGVnZXJTZXJpYWxpemVyLAorICBieXRlU2VyaWFsaXplciwKKyAgYmluYXJ5U2VyaWFsaXplciwKKyAgc2hvcnRTZXJpYWxpemVyLAorICBib29sZWFuU2VyaWFsaXplciwKKyAgbWFya2VyU2VyaWFsaXplciwKKyAgdW5zcGVjaWZpZWROdWxsU2VyaWFsaXplciwKKyAgZW51bVNlcmlhbGl6ZXIsCisgIG51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneSwKKyAgYW55U2VyaWFsaXplciwKKyAgZ3JhcGhCaW5hcnlSZWFkZXIsCisgIGdyYXBoQmluYXJ5V3JpdGVyLAorfSA9IGlvYzsKKworZXhwb3J0IGRlZmF1bHQgaW9jOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0FueVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQW55U2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDQ2YTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0FueVNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW55U2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworCisgICAgLy8gc3BlY2lmaWNhbGx5IG9yZGVyZWQsIHRoZSBmaXJzdCBjYW5CZVVzZWRGb3I9dHJ1ZSB3aW5zCisgICAgdGhpcy5zZXJpYWxpemVycyA9IFsKKyAgICAgIGlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLAorICAgICAgaW9jLm51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneSwKKyAgICAgIGlvYy5ib29sZWFuU2VyaWFsaXplciwKKyAgICAgIGlvYy5kYXRlVGltZVNlcmlhbGl6ZXIsCisgICAgICBpb2Muc2V0U2VyaWFsaXplciwKKyAgICAgIGlvYy5saXN0U2VyaWFsaXplciwKKyAgICAgIGlvYy51dWlkU2VyaWFsaXplciwKKyAgICAgIGlvYy5lZGdlU2VyaWFsaXplciwKKyAgICAgIGlvYy5wYXRoU2VyaWFsaXplciwKKyAgICAgIGlvYy5wcm9wZXJ0eVNlcmlhbGl6ZXIsCisgICAgICBpb2MudmVydGV4U2VyaWFsaXplciwKKyAgICAgIGlvYy52ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIsCisgICAgICBpb2MuZW51bVNlcmlhbGl6ZXIsCisgICAgICBpb2Muc3RyaW5nU2VyaWFsaXplciwKKyAgICAgIGlvYy5iaW5hcnlTZXJpYWxpemVyLAorICAgICAgaW9jLm1hcFNlcmlhbGl6ZXIsCisgICAgXTsKKyAgfQorCisgIGdldFNlcmlhbGl6ZXJDYW5CZVVzZWRGb3IoaXRlbSkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXJpYWxpemVycy5sZW5ndGg7IGkrKykgeworICAgICAgaWYgKHRoaXMuc2VyaWFsaXplcnNbaV0uY2FuQmVVc2VkRm9yKGl0ZW0pKSB7CisgICAgICAgIHJldHVybiB0aGlzLnNlcmlhbGl6ZXJzW2ldOworICAgICAgfQorICAgIH0KKworICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgIGBObyBzZXJpYWxpemVyIGZvdW5kIHRvIHN1cHBvcnQgaXRlbSB3aGVyZSB0eXBlb2YoaXRlbSk9JyR7dHlwZW9mIGl0ZW19JyBhbmQgU3RyaW5nKGl0ZW0pPScke1N0cmluZyhpdGVtKX0nLmAsCisgICAgKTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICByZXR1cm4gdGhpcy5nZXRTZXJpYWxpemVyQ2FuQmVVc2VkRm9yKGl0ZW0pLnNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCk7CisgIH0KKworICBkZXNlcmlhbGl6ZShidWZmZXIpIHsKKyAgICAvLyBvYnZpb3VzbHksIGZ1bGx5UXVhbGlmaWVkRm9ybWF0IGFsd2F5cyBpcyB0cnVlCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBjb25zdCB0eXBlX2NvZGUgPSBidWZmZXIucmVhZFVJbnQ4KCk7CisgICAgICBjb25zdCBzZXJpYWxpemVyID0gdGhpcy5pb2Muc2VyaWFsaXplcnNbdHlwZV9jb2RlXTsKKyAgICAgIGlmICghc2VyaWFsaXplcikgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24ge3R5cGVfY29kZX0nKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0FycmF5U2VyaWFsaXplci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9BcnJheVNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFhYWUxZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9BcnJheVNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEFycmF5U2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYywgSUQpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLklEID0gSUQ7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbSURdID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOyAvLyB7bGVuZ3RofSA9IDAKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDBdKSk7CisgICAgfQorCisgICAgLy8ge2xlbmd0aH0KKyAgICBsZXQgbGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgIGxlbmd0aCA9IDA7IC8vIFRPRE86IHRlc3QgaXQKKyAgICB9CisgICAgaWYgKGxlbmd0aCA+IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuSU5UMzJfTUFYKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoCisgICAgICAgIGBBcnJheSBsZW5ndGg9JHtsZW5ndGh9IGlzIGdyZWF0ZXIgdGhhbiBzdXBwb3J0ZWQgbWF4X2xlbmd0aD0ke3RoaXMuaW9jLmludFNlcmlhbGl6ZXIuSU5UMzJfTUFYfS5gLAorICAgICAgKTsKKyAgICB9CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKGxlbmd0aCwgZmFsc2UpKTsKKworICAgIC8vIHtpdGVtXzB9Li4ue2l0ZW1fbn0KKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbVtpXSkpOworICAgIH0KKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworICAgIGxldCBpc0J1bGtlZCA9IGZhbHNlOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5JRCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKworICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7CisgICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDAgJiYgdmFsdWVfZmxhZyAhPT0gMikgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBpc0J1bGtlZCA9IHZhbHVlX2ZsYWcgPT09IDI7CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgbGV0IGxlbmd0aCwgbGVuZ3RoX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IGxlbmd0aCwgbGVuOiBsZW5ndGhfbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKKyAgICAgICAgbGVuICs9IGxlbmd0aF9sZW47CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xlbmd0aH06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVybycpOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxlbmd0aF9sZW4pOworCisgICAgICBjb25zdCB2ID0gW107CisgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOworICAgICAgICB0cnkgeworICAgICAgICAgICh7IHY6IHZhbHVlLCBsZW46IHZhbHVlX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICBlcnIubWVzc2FnZSA9IGB7aXRlbV8ke2l9fTogYCArIGVyci5tZXNzYWdlOworICAgICAgICAgIHRocm93IGVycjsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UodmFsdWVfbGVuKTsKKworICAgICAgICBpZiAoaXNCdWxrZWQpIHsKKyAgICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihge2l0ZW1fJHtpfX06IGJ1bGsgY291bnQgaXMgbWlzc2luZ2ApOworICAgICAgICAgIH0KKyAgICAgICAgICBjb25zdCBidWxrQ291bnQgPSBjdXJzb3IucmVhZEJpZ0ludDY0QkUoKTsKKyAgICAgICAgICBsZW4gKz0gODsKKyAgICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoOCk7CisKKyAgICAgICAgICBmb3IgKGxldCBqID0gMG47IGogPCBidWxrQ291bnQ7IGorKykgeworICAgICAgICAgICAgdi5wdXNoKHZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdi5wdXNoKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4geyB2LCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQmlnSW50ZWdlclNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQmlnSW50ZWdlclNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2ZjAyYQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CaWdJbnRlZ2VyU2VyaWFsaXplci5qcwpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworLy8gVE9ETzogaXQgaGFzIHJvb20gZm9yIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cworZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmlnSW50ZWdlclNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuQklHSU5URUdFUl0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgLy8gaXQncyBub3QgZXhwZWN0ZWQgdG8gYmUgdXNlZCBkaXJlY3RseSwgc2VlIE51bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneQorICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnOworICB9CisKKyAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgeworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQklHSU5URUdFUiwgMHgwMV0pOworICAgICAgfQorICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwXSk7CisgICAgfQorCisgICAgY29uc3QgYnVmcyA9IFtdOworICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5CSUdJTlRFR0VSLCAweDAwXSkpOworICAgIH0KKworICAgIGxldCB2OworCisgICAgLy8gcG9zaXRpdmUgbnVtYmVyCisgICAgaWYgKGl0ZW0gPj0gMCkgeworICAgICAgbGV0IGhleF9zdHIgPSBpdGVtLnRvU3RyaW5nKDE2KTsKKyAgICAgIGlmIChoZXhfc3RyLmxlbmd0aCAlIDIgIT09IDApIHsKKyAgICAgICAgaGV4X3N0ciA9ICcwJyArIGhleF9zdHI7IC8vIEJ1ZmZlci5mcm9tKCkgZXhwZWN0cyBleGFjdGx5IHR3byBoZXggZGlnaXRzIHBlciBieXRlCisgICAgICB9CisgICAgICBpZiAoTnVtYmVyLnBhcnNlSW50KGhleF9zdHJbMF0sIDE2KSA+IDcpIHsKKyAgICAgICAgaGV4X3N0ciA9ICcwMCcgKyBoZXhfc3RyOyAvLyB0byBrZWVwIHNpZ24gYml0IHVuc2V0IGZvciBwb3NpdGl2ZSBudW1iZXIKKyAgICAgIH0KKyAgICAgIHYgPSBCdWZmZXIuZnJvbShoZXhfc3RyLCAnaGV4Jyk7CisgICAgfQorCisgICAgLy8gbmVnYXRpdmUgbnVtYmVyCisgICAgZWxzZSB7CisgICAgICBsZXQgaGV4X3N0ciA9ICgtaXRlbSkudG9TdHJpbmcoMTYpOworCisgICAgICBjb25zdCBieXRlcyA9IChoZXhfc3RyLmxlbmd0aCArIChoZXhfc3RyLmxlbmd0aCAlIDIpKSAvIDI7IC8vIG51bWJlcidzIHNpemUgaW4gYnl0ZXMKKyAgICAgIGxldCBOID0gQmlnSW50KGJ5dGVzKSAqIEJpZ0ludCg4KTsgLy8gbnVtYmVyJ3Mgc2l6ZSBpbiBiaXRzCisgICAgICBjb25zdCBJTlROX01JTiA9IC0oQmlnSW50KDIpICoqIChOIC0gQmlnSW50KDEpKSk7IC8vIG1pbmltdW0gbmVnYXRpdmUgbnVtYmVyIHdlIGNhbiBrZWVwIHdpdGhpbiBOIGJpdHMKKyAgICAgIGlmIChpdGVtIDwgSU5UTl9NSU4pIHsKKyAgICAgICAgTiArPSBCaWdJbnQoOCk7IC8vIHRvIHByb3ZpZGUgcm9vbSBmb3Igc21hbGxlciBuZWdhdGl2ZSBudW1iZXIKKyAgICAgIH0KKworICAgICAgY29uc3QgdHdvc19jb21wbGVtZW50ID0gQmlnSW50KDIpICoqIE4gKyBpdGVtOworICAgICAgaGV4X3N0ciA9IHR3b3NfY29tcGxlbWVudC50b1N0cmluZygxNik7CisgICAgICBpZiAoaGV4X3N0ci5sZW5ndGggJSAyICE9PSAwKSB7CisgICAgICAgIGhleF9zdHIgPSAnMCcgKyBoZXhfc3RyOyAvLyBCdWZmZXIuZnJvbSgpIGV4cGVjdHMgZXhhY3RseSB0d28gaGV4IGRpZ2l0cyBwZXIgYnl0ZQorICAgICAgfQorCisgICAgICB2ID0gQnVmZmVyLmZyb20oaGV4X3N0ciwgJ2hleCcpOworICAgIH0KKworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5pbnRTZXJpYWxpemVyLnNlcmlhbGl6ZSh2Lmxlbmd0aCwgZmFsc2UpKTsKKyAgICBidWZzLnB1c2godik7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkJJR0lOVEVHRVIpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgLy8ge2xlbmd0aH0KKyAgICAgIGxldCBsZW5ndGgsIGxlbmd0aF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBsZW5ndGgsIGxlbjogbGVuZ3RoX2xlbiB9ID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7CisgICAgICAgIGxlbiArPSBsZW5ndGhfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tsZW5ndGh9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIGlmIChsZW5ndGggPCAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihge2xlbmd0aH09JHtsZW5ndGh9IGlzIGxlc3MgdGhhbiBvbmVgKTsKKyAgICAgIH0KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsZW5ndGhfbGVuKTsKKworICAgICAgbGVuICs9IGxlbmd0aDsKKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgwLCBsZW5ndGgpOworICAgICAgbGV0IHYgPSBCaWdJbnQoYDB4JHtjdXJzb3IudG9TdHJpbmcoJ2hleCcpfWApOworICAgICAgY29uc3QgaXNfc2lnbl9iaXRfc2V0ID0gKGN1cnNvclswXSAmIDB4ODApID09PSAweDgwOworICAgICAgaWYgKGlzX3NpZ25fYml0X3NldCkgeworICAgICAgICB2ID0gQmlnSW50LmFzSW50TihsZW5ndGggKiA4LCB2KTsgLy8gbm93IHdlIGdldCBleHBlY3RlZCBuZWdhdGl2ZSBudW1iZXIKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHsgdiwgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0JpbmFyeVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQmluYXJ5U2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDUxZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0JpbmFyeVNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEJpbmFyeVNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuQklOQVJZXSA9IHRoaXM7CisgIH0KKworICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBCdWZmZXI7CisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5CSU5BUlksIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOyAvLyB7bGVuZ3RofSA9IDAKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkJJTkFSWSwgMHgwMF0pKTsKKyAgICB9CisKKyAgICAvLyB7bGVuZ3RofQorICAgIGxldCBsZW5ndGggPSBpdGVtLmxlbmd0aDsKKyAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgbGVuZ3RoID0gMDsgLy8gVE9ETzogdGVzdCBpdAorICAgIH0KKyAgICBpZiAobGVuZ3RoID4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVgpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICAgYEJ1ZmZlciBsZW5ndGg9JHtsZW5ndGh9IGlzIGdyZWF0ZXIgdGhhbiBzdXBwb3J0ZWQgbWF4X2xlbmd0aD0ke3RoaXMuaW9jLmludFNlcmlhbGl6ZXIuSU5UMzJfTUFYfS5gLAorICAgICAgKTsKKyAgICB9CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuc2VyaWFsaXplKGxlbmd0aCwgZmFsc2UpKTsKKworICAgIC8vIHt2YWx1ZX0gc2VxdWVuY2Ugb2YgYnl0ZXMKKyAgICBidWZzLnB1c2goaXRlbSk7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkJJTkFSWSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKworICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7CisgICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorCisgICAgICBsZXQgbGVuZ3RoLCBsZW5ndGhfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogbGVuZ3RoLCBsZW46IGxlbmd0aF9sZW4gfSA9IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgICAgICBsZW4gKz0gbGVuZ3RoX2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGVuZ3RofTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3tsZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvJyk7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuZ3RoX2xlbik7CisKKyAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgbGVuZ3RoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihge3ZhbHVlfTogdW5leHBlY3RlZCBhY3R1YWwge3ZhbHVlfSBsZW5ndGg9JHtjdXJzb3IubGVuZ3RofSB3aGVuIHtsZW5ndGh9PSR7bGVuZ3RofWApOworICAgICAgfQorICAgICAgY29uc3QgdiA9IGN1cnNvci5zbGljZSgwLCBsZW5ndGgpOworICAgICAgbGVuICs9IGxlbmd0aDsKKworICAgICAgcmV0dXJuIHsgdiwgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0Jvb2xlYW5TZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0Jvb2xlYW5TZXJpYWxpemVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzM4ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvQm9vbGVhblNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2xlYW5TZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLkJPT0xFQU5dID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJzsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkJPT0xFQU4sIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMF0pOworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQk9PTEVBTiwgMHgwMF0pKTsKKyAgICB9CisKKyAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW2l0ZW0gPyAweDAxIDogMHgwMF0pKTsKKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuQk9PTEVBTikgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKworICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7CisgICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorCisgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7CisgICAgICB9CisgICAgICBsZW4gKz0gMTsKKworICAgICAgbGV0IHYgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICBpZiAodiAhPT0gMHgwMCAmJiB2ICE9PSAweDAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBib29sZWFuIGJ5dGU9JHt2fWApOworICAgICAgfQorICAgICAgdiA9IHYgPT09IDB4MDE7CisKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CeXRlU2VyaWFsaXplci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9CeXRlU2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVkMTBkCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0J5dGVTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEJ5dGVTZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLkJZVEVdID0gdGhpczsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkJZVEUsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMF0pOworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuQllURSwgMHgwMF0pKTsKKyAgICB9CisgICAgY29uc3QgdiA9IEJ1ZmZlci5hbGxvYygxKTsKKyAgICB2LndyaXRlSW50OChpdGVtKTsgLy8gaWYgaXRlbSBpcyBub3Qgd2l0aGluIGludDggbGltaXRzIHdyaXRlSW50OCB3aWxsIGVycm9yCisgICAgYnVmcy5wdXNoKHYpOworCisgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7CisgIH0KKworICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGxldCBsZW4gPSAwOworICAgIGxldCBjdXJzb3IgPSBidWZmZXI7CisKKyAgICB0cnkgeworICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOworICAgICAgfQorICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5CWVRFKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlfSBsZW5ndGgnKTsKKyAgICAgIH0KKyAgICAgIGxlbiArPSAxOworCisgICAgICBjb25zdCB2ID0gY3Vyc29yLnJlYWRJbnQ4KCk7CisgICAgICByZXR1cm4geyB2LCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRGF0YVR5cGUuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRGF0YVR5cGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1ZjcxNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9EYXRhVHlwZS5qcwpAQCAtMCwwICsxLDY3IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCisvKioKKyAqIFJlcHJlc2VudHMgYSBHcmFwaEJpbmFyeSBkYXRhIHR5cGUuCisgKgorICogU2VlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5EYXRhVHlwZSBKYXZhIGNsYXNzLgorICovCitjb25zdCBEYXRhVHlwZSA9IHsKKyAgSU5UOiAweDAxLAorICBMT05HOiAweDAyLAorICBTVFJJTkc6IDB4MDMsCisgIERBVEVUSU1FOiAweDA0LAorICBET1VCTEU6IDB4MDcsCisgIEZMT0FUOiAweDA4LAorICBMSVNUOiAweDA5LAorICBNQVA6IDB4MGEsCisgIFNFVDogMHgwYiwKKyAgVVVJRDogMHgwYywKKyAgRURHRTogMHgwZCwKKyAgUEFUSDogMHgwZSwKKyAgUFJPUEVSVFk6IDB4MGYsCisgIEdSQVBIOiAweDEwLAorICBWRVJURVg6IDB4MTEsCisgIFZFUlRFWFBST1BFUlRZOiAweDEyLAorICBESVJFQ1RJT046IDB4MTgsCisgIFQ6IDB4MjAsCisgIEJJR0RFQ0lNQUw6IDB4MjIsCisgIEJJR0lOVEVHRVI6IDB4MjMsCisgIEJZVEU6IDB4MjQsCisgIEJJTkFSWTogMHgyNSwKKyAgU0hPUlQ6IDB4MjYsCisgIEJPT0xFQU46IDB4MjcsCisgIFRSRUU6IDB4MmIsCisgIE1FUkdFOiAweDJlLAorCisgIENIQVI6IDB4ODAsCisgIERVUkFUSU9OOiAweDgxLAorCisgIENPTVBPU0lURVBEVDogMHhmMCwKKyAgUFJJTUlUSVZFUERUOiAweGYxLAorCisgIE1BUktFUjogMHhmZCwKKyAgVU5TUEVDSUZJRURfTlVMTDogMHhmZSwKK307CisKK2V4cG9ydCBkZWZhdWx0IERhdGFUeXBlOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0RhdGVUaW1lU2VyaWFsaXplci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9EYXRlVGltZVNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiM2RkZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9EYXRlVGltZVNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGVUaW1lU2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuSUQgPSBpb2MuRGF0YVR5cGUuREFURVRJTUU7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbdGhpcy5JRF0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRGF0ZTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMTgpOworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMF0pKTsKKyAgICB9CisKKyAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDE4KTsKKyAgICBsZXQgb2Zmc2V0ID0gMDsKKworICAgIC8vIFllYXIgKEludDMyQkUpCisgICAgdi53cml0ZUludDMyQkUoaXRlbS5nZXRVVENGdWxsWWVhcigpLCBvZmZzZXQpOworICAgIG9mZnNldCArPSA0OworCisgICAgLy8gTW9udGggKFVJbnQ4LCAxLWJhc2VkKQorICAgIHYud3JpdGVVSW50OChpdGVtLmdldFVUQ01vbnRoKCkgKyAxLCBvZmZzZXQpOworICAgIG9mZnNldCArPSAxOworCisgICAgLy8gRGF5IChVSW50OCwgMS1iYXNlZCkKKyAgICB2LndyaXRlVUludDgoaXRlbS5nZXRVVENEYXRlKCksIG9mZnNldCk7CisgICAgb2Zmc2V0ICs9IDE7CisKKyAgICAvLyBOYW5vc2Vjb25kcyBzaW5jZSBtaWRuaWdodCAoQmlnSW50NjRCRSkKKyAgICBjb25zdCBob3VycyA9IGl0ZW0uZ2V0VVRDSG91cnMoKTsKKyAgICBjb25zdCBtaW51dGVzID0gaXRlbS5nZXRVVENNaW51dGVzKCk7CisgICAgY29uc3Qgc2Vjb25kcyA9IGl0ZW0uZ2V0VVRDU2Vjb25kcygpOworICAgIGNvbnN0IG1pbGxpcyA9IGl0ZW0uZ2V0VVRDTWlsbGlzZWNvbmRzKCk7CisgICAgY29uc3QgbmFub3MgPSBCaWdJbnQoaG91cnMgKiAzNjAwICsgbWludXRlcyAqIDYwICsgc2Vjb25kcykgKiAxXzAwMF8wMDBfMDAwbiArIEJpZ0ludChtaWxsaXMpICogMV8wMDBfMDAwbjsKKyAgICB2LndyaXRlQmlnSW50NjRCRShuYW5vcywgb2Zmc2V0KTsKKyAgICBvZmZzZXQgKz0gODsKKworICAgIC8vIFVUQyBvZmZzZXQgaW4gc2Vjb25kcyAoSW50MzJCRSkgLSBhbHdheXMgMCBmb3IgSlMgRGF0ZQorICAgIHYud3JpdGVJbnQzMkJFKDAsIG9mZnNldCk7CisKKyAgICBidWZzLnB1c2godik7CisgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7CisgIH0KKworICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGxldCBsZW4gPSAwOworICAgIGxldCBjdXJzb3IgPSBidWZmZXI7CisKKyAgICB0cnkgeworICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOworICAgICAgfQorICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLklEKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMTgpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7CisgICAgICB9CisgICAgICBsZW4gKz0gMTg7CisKKyAgICAgIGxldCBvZmZzZXQgPSAwOworCisgICAgICAvLyBSZWFkIHllYXIgKEludDMyQkUpCisgICAgICBjb25zdCB5ZWFyID0gY3Vyc29yLnJlYWRJbnQzMkJFKG9mZnNldCk7CisgICAgICBvZmZzZXQgKz0gNDsKKworICAgICAgLy8gUmVhZCBtb250aCAoVUludDgsIDEtYmFzZWQpCisgICAgICBjb25zdCBtb250aCA9IGN1cnNvci5yZWFkVUludDgob2Zmc2V0KTsKKyAgICAgIG9mZnNldCArPSAxOworCisgICAgICAvLyBSZWFkIGRheSAoVUludDgsIDEtYmFzZWQpCisgICAgICBjb25zdCBkYXkgPSBjdXJzb3IucmVhZFVJbnQ4KG9mZnNldCk7CisgICAgICBvZmZzZXQgKz0gMTsKKworICAgICAgLy8gUmVhZCBuYW5vc2Vjb25kcyBzaW5jZSBtaWRuaWdodCAoQmlnSW50NjRCRSkKKyAgICAgIGNvbnN0IG5hbm9zID0gY3Vyc29yLnJlYWRCaWdJbnQ2NEJFKG9mZnNldCk7CisgICAgICBvZmZzZXQgKz0gODsKKworICAgICAgLy8gUmVhZCBVVEMgb2Zmc2V0IGluIHNlY29uZHMgKEludDMyQkUpIC0gSlMgRGF0ZSBjYW5ub3QgcmVwcmVzZW50IG5vbi16ZXJvIG9mZnNldHMKKyAgICAgIGNvbnN0IHV0Y09mZnNldCA9IGN1cnNvci5yZWFkSW50MzJCRShvZmZzZXQpOworICAgICAgb2Zmc2V0ICs9IDQ7CisKKyAgICAgIC8vIENvbnZlcnQgbmFub3MgdG8gdGltZSBjb21wb25lbnRzCisgICAgICBjb25zdCBob3VycyA9IE51bWJlcihuYW5vcyAvIDNfNjAwXzAwMF8wMDBfMDAwbik7CisgICAgICBjb25zdCByZW1haW5pbmdOYW5vcyA9IG5hbm9zICUgM182MDBfMDAwXzAwMF8wMDBuOworICAgICAgY29uc3QgbWludXRlcyA9IE51bWJlcihyZW1haW5pbmdOYW5vcyAvIDYwXzAwMF8wMDBfMDAwbik7CisgICAgICBjb25zdCByZW1haW5pbmdOYW5vczIgPSByZW1haW5pbmdOYW5vcyAlIDYwXzAwMF8wMDBfMDAwbjsKKyAgICAgIGNvbnN0IHNlY29uZHMgPSBOdW1iZXIocmVtYWluaW5nTmFub3MyIC8gMV8wMDBfMDAwXzAwMG4pOworICAgICAgY29uc3QgbWlsbGlzID0gTnVtYmVyKChyZW1haW5pbmdOYW5vczIgJSAxXzAwMF8wMDBfMDAwbikgLyAxXzAwMF8wMDBuKTsKKworICAgICAgY29uc3QgdiA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoIC0gMSwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgbWlsbGlzKSk7CisgICAgICAvLyBEYXRlLlVUQyB0cmVhdHMgeWVhcnMgMC05OSBhcyAxOTAwLTE5OTksIGNvcnJlY3QgaXQKKyAgICAgIGlmICh5ZWFyID49IDAgJiYgeWVhciA8PSA5OSkgeworICAgICAgICB2LnNldFVUQ0Z1bGxZZWFyKHllYXIpOworICAgICAgfQorICAgICAgLy8gQWRqdXN0IGZvciBub24temVybyBVVEMgb2Zmc2V0IChKUyBEYXRlIGlzIGFsd2F5cyBVVEMgaW50ZXJuYWxseSkKKyAgICAgIGlmICh1dGNPZmZzZXQgIT09IDApIHsKKyAgICAgICAgdi5zZXRUaW1lKHYuZ2V0VGltZSgpIC0gdXRjT2Zmc2V0ICogMTAwMCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Eb3VibGVTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0RvdWJsZVNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3MDE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Eb3VibGVTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBEb3VibGVTZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLkRPVUJMRV0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIU51bWJlci5pc0ludGVnZXIodmFsdWUpOworICB9CisKKyAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgeworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuRE9VQkxFLCAweDAxXSk7CisgICAgICB9CisgICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTsKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkRPVUJMRSwgMHgwMF0pKTsKKyAgICB9CisgICAgY29uc3QgdiA9IEJ1ZmZlci5hbGxvYyg4KTsKKyAgICB2LndyaXRlRG91YmxlQkUoaXRlbSk7CisgICAgYnVmcy5wdXNoKHYpOworCisgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7CisgIH0KKworICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGxldCBsZW4gPSAwOworICAgIGxldCBjdXJzb3IgPSBidWZmZXI7CisKKyAgICB0cnkgeworICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOworICAgICAgfQorICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5ET1VCTEUpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCA4KSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOworICAgICAgfQorICAgICAgbGVuICs9IDg7CisKKyAgICAgIGNvbnN0IHYgPSBjdXJzb3IucmVhZERvdWJsZUJFKCk7CisgICAgICByZXR1cm4geyB2LCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRWRnZVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRWRnZVNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5YzhiNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9FZGdlU2VyaWFsaXplci5qcwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKK2ltcG9ydCB7IEVkZ2UsIFZlcnRleCB9IGZyb20gJy4uLy4uLy4uL2dyYXBoLmpzJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRnZVNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuRURHRV0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgRWRnZTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkVER0UsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIGNvbnN0IGlkID0gWzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBTdHJpbmcgJycKKyAgICAgIGNvbnN0IGxhYmVsID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBlbXB0eSBsaXN0CisgICAgICBjb25zdCBpblZJZCA9IFsweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gU3RyaW5nICcnCisgICAgICBjb25zdCBpblZMYWJlbCA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gZW1wdHkgbGlzdAorICAgICAgY29uc3Qgb3V0VklkID0gWzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBTdHJpbmcgJycKKyAgICAgIGNvbnN0IG91dFZMYWJlbCA9IFsweDAwLCAweDAwLCAweDAwLCAweDAwXTsgLy8gZW1wdHkgbGlzdAorICAgICAgY29uc3QgcGFyZW50ID0gWzB4ZmUsIDB4MDFdOyAvLyBudWxsCisgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gWzB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBlbXB0eSBsaXN0CisgICAgICByZXR1cm4gQnVmZmVyLmZyb20oWy4uLmlkLCAuLi5sYWJlbCwgLi4uaW5WSWQsIC4uLmluVkxhYmVsLCAuLi5vdXRWSWQsIC4uLm91dFZMYWJlbCwgLi4ucGFyZW50LCAuLi5wcm9wZXJ0aWVzXSk7CisgICAgfQorCisgICAgY29uc3QgYnVmcyA9IFtdOworICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5FREdFLCAweDAwXSkpOworICAgIH0KKworICAgIC8vIHtpZH0KKyAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5pZCkpOworCisgICAgLy8ge2xhYmVsfQorICAgIGNvbnN0IGxhYmVscyA9IEFycmF5LmlzQXJyYXkoaXRlbS5sYWJlbCkgPyBpdGVtLmxhYmVsIDogaXRlbS5sYWJlbCA/IFtpdGVtLmxhYmVsXSA6IFtdOworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUobGFiZWxzLCBmYWxzZSkpOworCisgICAgLy8ge2luVklkfQorICAgIGNvbnN0IGluVklkID0gaXRlbS5pblYgJiYgaXRlbS5pblYuaWQ7CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGluVklkKSk7CisKKyAgICAvLyB7aW5WTGFiZWx9CisgICAgY29uc3QgaW5WTGFiZWwgPSBpdGVtLmluViAmJiBpdGVtLmluVi5sYWJlbDsKKyAgICBjb25zdCBpblZMYWJlbHMgPSBBcnJheS5pc0FycmF5KGluVkxhYmVsKSA/IGluVkxhYmVsIDogaW5WTGFiZWwgPyBbaW5WTGFiZWxdIDogW107CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShpblZMYWJlbHMsIGZhbHNlKSk7CisKKyAgICAvLyB7b3V0VklkfQorICAgIGNvbnN0IG91dFZJZCA9IGl0ZW0ub3V0ViAmJiBpdGVtLm91dFYuaWQ7CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG91dFZJZCkpOworCisgICAgLy8ge291dFZMYWJlbH0KKyAgICBjb25zdCBvdXRWTGFiZWwgPSBpdGVtLm91dFYgJiYgaXRlbS5vdXRWLmxhYmVsOworICAgIGNvbnN0IG91dFZMYWJlbHMgPSBBcnJheS5pc0FycmF5KG91dFZMYWJlbCkgPyBvdXRWTGFiZWwgOiBvdXRWTGFiZWwgPyBbb3V0VkxhYmVsXSA6IFtdOworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUob3V0VkxhYmVscywgZmFsc2UpKTsKKworICAgIC8vIHtwYXJlbnR9CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpKTsKKworICAgIC8vIHtwcm9wZXJ0aWVzfQorICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUoW10sIHRydWUpKTsKKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuRURHRSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKworICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7CisgICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorCisgICAgICBsZXQgaWQsIGlkX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IGlkLCBsZW46IGlkX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgbGVuICs9IGlkX2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7aWR9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShpZF9sZW4pOworCisgICAgICBsZXQgbGFiZWwsIGxhYmVsX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IGxhYmVsLCBsZW46IGxhYmVsX2xlbiB9ID0gdGhpcy5pb2MubGlzdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgICAgICBsYWJlbCA9IEFycmF5LmlzQXJyYXkobGFiZWwpICYmIGxhYmVsLmxlbmd0aCA+IDAgPyBsYWJlbFswXSA6IGxhYmVsOworICAgICAgICBsZW4gKz0gbGFiZWxfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tsYWJlbH06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxhYmVsX2xlbik7CisKKyAgICAgIGxldCBpblZJZCwgaW5WSWRfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogaW5WSWQsIGxlbjogaW5WSWRfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICBsZW4gKz0gaW5WSWRfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tpblZJZH06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGluVklkX2xlbik7CisKKyAgICAgIGxldCBpblZMYWJlbCwgaW5WTGFiZWxfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogaW5WTGFiZWwsIGxlbjogaW5WTGFiZWxfbGVuIH0gPSB0aGlzLmlvYy5saXN0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7CisgICAgICAgIGluVkxhYmVsID0gQXJyYXkuaXNBcnJheShpblZMYWJlbCkgJiYgaW5WTGFiZWwubGVuZ3RoID4gMCA/IGluVkxhYmVsWzBdIDogaW5WTGFiZWw7CisgICAgICAgIGxlbiArPSBpblZMYWJlbF9sZW47CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2luVkxhYmVsfTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoaW5WTGFiZWxfbGVuKTsKKworICAgICAgbGV0IG91dFZJZCwgb3V0VklkX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IG91dFZJZCwgbGVuOiBvdXRWSWRfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICBsZW4gKz0gb3V0VklkX2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7b3V0VklkfTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2Uob3V0VklkX2xlbik7CisKKyAgICAgIGxldCBvdXRWTGFiZWwsIG91dFZMYWJlbF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBvdXRWTGFiZWwsIGxlbjogb3V0VkxhYmVsX2xlbiB9ID0gdGhpcy5pb2MubGlzdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgICAgICBvdXRWTGFiZWwgPSBBcnJheS5pc0FycmF5KG91dFZMYWJlbCkgJiYgb3V0VkxhYmVsLmxlbmd0aCA+IDAgPyBvdXRWTGFiZWxbMF0gOiBvdXRWTGFiZWw7CisgICAgICAgIGxlbiArPSBvdXRWTGFiZWxfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tvdXRWTGFiZWx9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShvdXRWTGFiZWxfbGVuKTsKKworICAgICAgbGV0IHBhcmVudF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyBsZW46IHBhcmVudF9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7CisgICAgICAgIGxlbiArPSBwYXJlbnRfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3twYXJlbnR9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwYXJlbnRfbGVuKTsKKworICAgICAgbGV0IHByb3BlcnRpZXMsIHByb3BlcnRpZXNfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogcHJvcGVydGllcywgbGVuOiBwcm9wZXJ0aWVzX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgbGVuICs9IHByb3BlcnRpZXNfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3twcm9wZXJ0aWVzfTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UocHJvcGVydGllc19sZW4pOworCisgICAgICAvLyBudWxsIHByb3BlcnRpZXMgYXJlIGRlc2VyaWFsaXplZCBpbnRvIGVtcHR5IGxpc3RzCisgICAgICBjb25zdCBlZGdlX3Byb3BzID0gcHJvcGVydGllcyA/IHByb3BlcnRpZXMgOiBbXTsKKworICAgICAgY29uc3QgdiA9IG5ldyBFZGdlKGlkLCBuZXcgVmVydGV4KG91dFZJZCwgb3V0VkxhYmVsLCBudWxsKSwgbGFiZWwsIG5ldyBWZXJ0ZXgoaW5WSWQsIGluVkxhYmVsLCBudWxsKSwgZWRnZV9wcm9wcyk7CisgICAgICByZXR1cm4geyB2LCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRW51bVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRW51bVNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhjMjdkZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9FbnVtU2VyaWFsaXplci5qcwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKK2ltcG9ydCB7IGRpcmVjdGlvbiwgdCBhcyBfdCwgbWVyZ2UgYXMgX21lcmdlLCBFbnVtVmFsdWUgfSBmcm9tICcuLi8uLi8uLi8uLi9wcm9jZXNzL3RyYXZlcnNhbC5qcyc7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEVudW1TZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisKKyAgICAvLyBwcm9jZXNzL3RyYXZlcnNhbC5qczp0b0VudW0oKSBsb3dlcmNhc2VzIGVsZW1lbnQgbmFtZXMgKGUuZy4gT1VUID0+IG91dCkgZm9yIGVuZCB1c2VycycgY29udmVuaWVuY2UKKyAgICAvLyBidXQgd2UgbmVlZCBvcmlnaW5hbCBtYXBwaW5nIGFzIGlzIGZvciB3aXJlIGZvcm1hdCBsb29rdXAKKyAgICBjb25zdCB0b19vcmlnX2VudW0gPSAob2JqKSA9PiB7CisgICAgICBjb25zdCByID0ge307CisgICAgICBPYmplY3QudmFsdWVzKG9iaikuZm9yRWFjaCgoZSkgPT4gKHJbZS5lbGVtZW50TmFtZV0gPSBlKSk7CisgICAgICByZXR1cm4gcjsKKyAgICB9OworCisgICAgdGhpcy50eXBlcyA9IHsKKyAgICAgIERpcmVjdGlvbjogeyBjb2RlOiBpb2MuRGF0YVR5cGUuRElSRUNUSU9OLCBlbnVtOiB0b19vcmlnX2VudW0oZGlyZWN0aW9uKSB9LAorICAgICAgTWVyZ2U6IHsgY29kZTogaW9jLkRhdGFUeXBlLk1FUkdFLCBlbnVtOiB0b19vcmlnX2VudW0oX21lcmdlKSB9LAorICAgICAgVDogeyBjb2RlOiBpb2MuRGF0YVR5cGUuVCwgZW51bTogdG9fb3JpZ19lbnVtKF90KSB9LAorICAgIH07CisKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuRElSRUNUSU9OXSA9IHRoaXM7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLk1FUkdFXSA9IHRoaXM7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLlRdID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIHJldHVybiAoCisgICAgICB2YWx1ZSBpbnN0YW5jZW9mIEVudW1WYWx1ZSAmJgorICAgICAgKHZhbHVlLnR5cGVOYW1lID09PSAnRGlyZWN0aW9uJyB8fCB2YWx1ZS50eXBlTmFtZSA9PT0gJ01lcmdlJyB8fCB2YWx1ZS50eXBlTmFtZSA9PT0gJ1QnKQorICAgICk7CisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZXNbaXRlbS50eXBlTmFtZV07CisgICAgaWYgKGl0ZW0uZWxlbWVudE5hbWUgPT09IHVuZGVmaW5lZCB8fCBpdGVtLmVsZW1lbnROYW1lID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0eXBlLmNvZGUsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsLCBmYWxzZSk7CisgICAgfQorCisgICAgY29uc3QgYnVmcyA9IFtdOworICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0eXBlLmNvZGUsIDB4MDBdKSk7CisgICAgfQorICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLmVsZW1lbnROYW1lLCB0cnVlKSk7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgbGV0IHR5cGVOYW1lOworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgPT09IHRoaXMuaW9jLkRhdGFUeXBlLkRJUkVDVElPTikgeworICAgICAgICAgIHR5cGVOYW1lID0gJ0RpcmVjdGlvbic7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZV9jb2RlID09PSB0aGlzLmlvYy5EYXRhVHlwZS5NRVJHRSkgeworICAgICAgICAgIHR5cGVOYW1lID0gJ01lcmdlJzsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlX2NvZGUgPT09IHRoaXMuaW9jLkRhdGFUeXBlLlQpIHsKKyAgICAgICAgICB0eXBlTmFtZSA9ICdUJzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQge3R5cGVfY29kZX09JHt0eXBlX2NvZGV9YCk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIGxldCBlbGVtZW50TmFtZSwgZWxlbWVudE5hbWVfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogZWxlbWVudE5hbWUsIGxlbjogZWxlbWVudE5hbWVfbGVuIH0gPSB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgdHJ1ZSkpOworICAgICAgICBsZW4gKz0gZWxlbWVudE5hbWVfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ2VsZW1lbnROYW1lOiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKworICAgICAgbGV0IHY7CisgICAgICBpZiAodHlwZU5hbWUpIHsKKyAgICAgICAgdiA9IHRoaXMudHlwZXNbdHlwZU5hbWVdLmVudW1bZWxlbWVudE5hbWVdOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdiA9IG5ldyBFbnVtVmFsdWUodW5kZWZpbmVkLCBlbGVtZW50TmFtZSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9GbG9hdFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRmxvYXRTZXJpYWxpemVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYmEwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvRmxvYXRTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBGbG9hdFNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuRkxPQVRdID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIC8vIGl0J3Mgbm90IGV4cGVjdGVkIHRvIGJlIHVzZWQKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkZMT0FULCAweDAxXSk7CisgICAgICB9CisgICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTsKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkZMT0FULCAweDAwXSkpOworICAgIH0KKyAgICBjb25zdCB2ID0gQnVmZmVyLmFsbG9jKDQpOworICAgIHYud3JpdGVGbG9hdEJFKGl0ZW0pOworICAgIGJ1ZnMucHVzaCh2KTsKKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuRkxPQVQpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCA0KSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOworICAgICAgfQorICAgICAgbGVuICs9IDQ7CisKKyAgICAgIGNvbnN0IHYgPSBjdXJzb3IucmVhZEZsb2F0QkUoKTsKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9HcmFwaEJpbmFyeVJlYWRlci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9HcmFwaEJpbmFyeVJlYWRlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWFhMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0dyYXBoQmluYXJ5UmVhZGVyLmpzCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworCisvKioKKyAqIEdyYXBoQmluYXJ5IHJlYWRlci4KKyAqLworZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JhcGhCaW5hcnlSZWFkZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgfQorCisgIGdldCBtaW1lVHlwZSgpIHsKKyAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wJzsKKyAgfQorCisgIHJlYWRSZXNwb25zZShidWZmZXIpIHsKKyAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1ZmZlciBpcyBtaXNzaW5nLicpOworICAgIH0KKyAgICBpZiAoIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbiBpbnN0YW5jZSBvZiBCdWZmZXIuJyk7CisgICAgfQorICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgdGhyb3cgbmV3IEVycm9yKCdCdWZmZXIgaXMgZW1wdHkuJyk7CisgICAgfQorCisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKyAgICBsZXQgbGVuOworCisgICAgLy8ge3ZlcnNpb259IGlzIGEgQnl0ZSByZXByZXNlbnRpbmcgdGhlIHByb3RvY29sIHZlcnNpb24KKyAgICBjb25zdCB2ZXJzaW9uID0gY3Vyc29yWzBdOworICAgIGlmICh2ZXJzaW9uICE9PSAweDg0KSB7CisgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHZlcnNpb24gJyR7dmVyc2lvbn0nLmApOworICAgIH0KKyAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7IC8vIHNraXAgdmVyc2lvbgorCisgICAgLy8ge2J1bGtlZH0gaXMgYSBCeXRlOiAweDAwID0gbm90IGJ1bGtlZCwgMHgwMSA9IGJ1bGtlZAorICAgIGNvbnN0IGJ1bGtlZCA9IGN1cnNvclswXSA9PT0gMHgwMTsKKyAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAvLyB7cmVzdWx0X2RhdGF9IHN0cmVhbSAtIHJlYWQgdmFsdWVzIHVudGlsIG1hcmtlcgorICAgIGNvbnN0IGRhdGEgPSBbXTsKKyAgICB3aGlsZSAoY3Vyc29yWzBdICE9PSAweGZkKSB7CisgICAgICBjb25zdCB7IHYsIGxlbjogdmFsdWVMZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKTsKKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSh2YWx1ZUxlbik7CisKKyAgICAgIGlmIChidWxrZWQpIHsKKyAgICAgICAgY29uc3QgeyB2OiBidWxrLCBsZW46IGJ1bGtMZW4gfSA9IHRoaXMuaW9jLmxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgdHJ1ZSk7CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShidWxrTGVuKTsKKyAgICAgICAgZGF0YS5wdXNoKHsgdiwgYnVsazogTnVtYmVyKGJ1bGspIH0pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YS5wdXNoKHYpOworICAgICAgfQorICAgIH0KKworICAgIC8vIFNraXAgbWFya2VyIFsweEZELCAweDAwLCAweDAwXQorICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgzKTsKKworICAgIC8vIHtzdGF0dXNfY29kZX0gaXMgYW4gSW50IGJhcmUKKyAgICBjb25zdCB7IHY6IGNvZGUsIGxlbjogY29kZUxlbiB9ID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKTsKKyAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoY29kZUxlbik7CisKKyAgICAvLyB7c3RhdHVzX21lc3NhZ2V9IGlzIG51bGxhYmxlCisgICAgbGV0IG1lc3NhZ2UgPSBudWxsOworICAgIGlmIChjdXJzb3JbMF0gPT09IDB4MDApIHsKKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgICh7IHY6IG1lc3NhZ2UsIGxlbiB9ID0gdGhpcy5pb2Muc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IsIGZhbHNlKSk7CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOyAvLyBza2lwIDB4MDEgbnVsbCBmbGFnCisgICAgfQorCisgICAgLy8ge2V4Y2VwdGlvbn0gaXMgbnVsbGFibGUKKyAgICBsZXQgZXhjZXB0aW9uID0gbnVsbDsKKyAgICBpZiAoY3Vyc29yWzBdID09PSAweDAwKSB7CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICAoeyB2OiBleGNlcHRpb24gfSA9IHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgIH0KKworICAgIHJldHVybiB7CisgICAgICBzdGF0dXM6IHsgY29kZSwgbWVzc2FnZSwgZXhjZXB0aW9uIH0sCisgICAgICByZXN1bHQ6IHsgZGF0YSwgYnVsa2VkIH0sCisgICAgfTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0dyYXBoQmluYXJ5V3JpdGVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0dyYXBoQmluYXJ5V3JpdGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWNhZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvR3JhcGhCaW5hcnlXcml0ZXIuanMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworLyoqCisgKiBHcmFwaEJpbmFyeSB3cml0ZXIuCisgKi8KK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEdyYXBoQmluYXJ5V3JpdGVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgIH0KKworICBnZXQgbWltZVR5cGUoKSB7CisgICAgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCc7CisgIH0KKworICB3cml0ZVJlcXVlc3QocmVxdWVzdE1lc3NhZ2UpIHsKKyAgICBjb25zdCBmaWVsZHMgPSBuZXcgTWFwKCk7CisKKyAgICAvLyBFeHRyYWN0IGZpZWxkcyBmcm9tIFJlcXVlc3RNZXNzYWdlIGlmIGl0IGhhcyBnZXR0ZXIgbWV0aG9kcworICAgIGlmICh0eXBlb2YgcmVxdWVzdE1lc3NhZ2UuZ2V0TGFuZ3VhZ2UgPT09ICdmdW5jdGlvbicpIHsKKyAgICAgIGNvbnN0IGxhbmd1YWdlID0gcmVxdWVzdE1lc3NhZ2UuZ2V0TGFuZ3VhZ2UoKTsKKyAgICAgIGlmIChsYW5ndWFnZSkgeworICAgICAgICBmaWVsZHMuc2V0KCdsYW5ndWFnZScsIGxhbmd1YWdlKTsKKyAgICAgIH0KKyAgICAgIGNvbnN0IGcgPSByZXF1ZXN0TWVzc2FnZS5nZXRHKCk7CisgICAgICBpZiAoZykgeworICAgICAgICBmaWVsZHMuc2V0KCdnJywgZyk7CisgICAgICB9CisgICAgICBjb25zdCBiaW5kaW5ncyA9IHJlcXVlc3RNZXNzYWdlLmdldEJpbmRpbmdzKCk7CisgICAgICBpZiAoYmluZGluZ3MgJiYgT2JqZWN0LmtleXMoYmluZGluZ3MpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgZmllbGRzLnNldCgnYmluZGluZ3MnLCBiaW5kaW5ncyk7CisgICAgICB9CisgICAgICBjb25zdCB0aW1lb3V0TXMgPSByZXF1ZXN0TWVzc2FnZS5nZXRUaW1lb3V0TXMoKTsKKyAgICAgIGlmICh0aW1lb3V0TXMgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBmaWVsZHMuc2V0KCd0aW1lb3V0TXMnLCB0aW1lb3V0TXMpOworICAgICAgfQorICAgICAgY29uc3QgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzID0gcmVxdWVzdE1lc3NhZ2UuZ2V0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzKCk7CisgICAgICBpZiAobWF0ZXJpYWxpemVQcm9wZXJ0aWVzKSB7CisgICAgICAgIGZpZWxkcy5zZXQoJ21hdGVyaWFsaXplUHJvcGVydGllcycsIG1hdGVyaWFsaXplUHJvcGVydGllcyk7CisgICAgICB9CisgICAgICBjb25zdCBidWxrUmVzdWx0cyA9IHJlcXVlc3RNZXNzYWdlLmdldEJ1bGtSZXN1bHRzKCk7CisgICAgICBpZiAoYnVsa1Jlc3VsdHMgIT09IHVuZGVmaW5lZCkgeworICAgICAgICBmaWVsZHMuc2V0KCdidWxrUmVzdWx0cycsIGJ1bGtSZXN1bHRzKTsKKyAgICAgIH0KKworICAgICAgLy8gQWRkIGFueSBjdXN0b20gZmllbGRzCisgICAgICBjb25zdCBjdXN0b21GaWVsZHMgPSByZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZHMoKTsKKyAgICAgIGlmIChjdXN0b21GaWVsZHMpIHsKKyAgICAgICAgY3VzdG9tRmllbGRzLmZvckVhY2goKHYsIGspID0+IGZpZWxkcy5zZXQoaywgdikpOworICAgICAgfQorCisgICAgICBjb25zdCBncmVtbGluID0gcmVxdWVzdE1lc3NhZ2UuZ2V0R3JlbWxpbigpOworICAgICAgY29uc3QgYnVmcyA9IFsKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4ODRdKSwKKyAgICAgICAgdGhpcy5pb2MubWFwU2VyaWFsaXplci5zZXJpYWxpemUoZmllbGRzLCBmYWxzZSksCisgICAgICAgIHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGdyZW1saW4sIGZhbHNlKSwKKyAgICAgIF07CisgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmNvbmNhdChidWZzKSk7CisgICAgfQorCisgICAgLy8gTGVnYWN5IHBhdGg6IHBsYWluIG9iamVjdCB3aXRoIHsgZ3JlbWxpbiwgZmllbGRzIH0KKyAgICBjb25zdCBidWZzID0gWworICAgICAgQnVmZmVyLmZyb20oWzB4ODRdKSwKKyAgICAgIHRoaXMuaW9jLm1hcFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJlcXVlc3RNZXNzYWdlLmZpZWxkcyB8fCBuZXcgTWFwKCksIGZhbHNlKSwKKyAgICAgIHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKHJlcXVlc3RNZXNzYWdlLmdyZW1saW4sIGZhbHNlKSwKKyAgICBdOworICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuY29uY2F0KGJ1ZnMpKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0ludFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvSW50U2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWEwYWVkCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0ludFNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIEludFNlcmlhbGl6ZXIgeworICBnZXQgSU5UMzJfTUlOKCkgeworICAgIHJldHVybiAtMjE0NzQ4MzY0ODsKKyAgfQorICBnZXQgSU5UMzJfTUFYKCkgeworICAgIHJldHVybiAyMTQ3NDgzNjQ3OworICB9CisKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLklOVF0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbHVlIDwgdGhpcy5JTlQzMl9NSU4gfHwgdmFsdWUgPiB0aGlzLklOVDMyX01BWCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLklOVCwgMHgwMV0pOworICAgICAgfQorICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7CisgICAgfQorCisgICAgY29uc3QgYnVmcyA9IFtdOworICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5JTlQsIDB4MDBdKSk7CisgICAgfQorICAgIGNvbnN0IHYgPSBCdWZmZXIuYWxsb2MoNCk7CisgICAgdi53cml0ZUludDMyQkUoaXRlbSk7IC8vIGlmIGl0ZW0gaXMgbm90IHdpdGhpbiBpbnQzMiBsaW1pdHMgd3JpdGVJbnQzMkJFIHdpbGwgZXJyb3IKKyAgICBidWZzLnB1c2godik7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLklOVCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKworICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7CisgICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorCisgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDQpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7CisgICAgICB9CisgICAgICBsZW4gKz0gNDsKKworICAgICAgY29uc3QgdiA9IGN1cnNvci5yZWFkSW50MzJCRSgpOworICAgICAgcmV0dXJuIHsgdiwgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0xvbmdTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL0xvbmdTZXJpYWxpemVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NzZlNDgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTG9uZ1NlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIExvbmdTZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLkxPTkddID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcigpIHsKKyAgICAvLyBpdCdzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkLCBzZWUgTnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5CisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5MT05HLCAweDAxXSk7CisgICAgICB9CisgICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTsKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLkxPTkcsIDB4MDBdKSk7CisgICAgfQorICAgIGNvbnN0IHYgPSBCdWZmZXIuYWxsb2MoOCk7CisgICAgdi53cml0ZUJpZ0ludDY0QkUoQmlnSW50KGl0ZW0pKTsKKyAgICBidWZzLnB1c2godik7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLkxPTkcpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCA4KSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOworICAgICAgfQorICAgICAgbGVuICs9IDg7CisKKyAgICAgIGxldCB2ID0gY3Vyc29yLnJlYWRCaWdJbnQ2NEJFKCk7CisgICAgICBpZiAodiA+PSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiAmJiB2IDw9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSB7CisgICAgICAgIHYgPSBOdW1iZXIodik7CisgICAgICB9CisgICAgICAvLyBWYWx1ZXMgb3V0c2lkZSBzYWZlIGludGVnZXIgcmFuZ2Ugc3RheSBhcyBCaWdJbnQgdG8gcHJlc2VydmUgcHJlY2lzaW9uLgorCisgICAgICByZXR1cm4geyB2LCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTWFwU2VyaWFsaXplci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9NYXBTZXJpYWxpemVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDBiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTWFwU2VyaWFsaXplci5qcwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFwU2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5NQVBdID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnOworICB9CisKKyAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgeworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuTUFQLCAweDAxXSk7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoMCwgZmFsc2UpOworICAgIH0KKworICAgIGNvbnN0IGlzTWFwID0gaXRlbSBpbnN0YW5jZW9mIE1hcDsKKworICAgIGNvbnN0IGtleXMgPSBpc01hcCA/IEFycmF5LmZyb20oaXRlbS5rZXlzKCkpIDogT2JqZWN0LmtleXMoaXRlbSk7CisgICAgbGV0IG1hcF9sZW5ndGggPSBrZXlzLmxlbmd0aDsKKyAgICBpZiAobWFwX2xlbmd0aCA8IDApIHsKKyAgICAgIG1hcF9sZW5ndGggPSAwOworICAgIH0gZWxzZSBpZiAobWFwX2xlbmd0aCA+IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuSU5UMzJfTUFYKSB7CisgICAgICBtYXBfbGVuZ3RoID0gdGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVg7IC8vIFRPRE86IGlzIGl0IGV4cGVjdGVkIHRvIGJlIHNpbGVuY2VkPyBvciBpdCdzIGJldHRlciB0byBlcnJvciBpbnN0ZWFkPworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuTUFQLCAweDAwXSkpOworICAgIH0KKyAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUobWFwX2xlbmd0aCwgZmFsc2UpKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcF9sZW5ndGg7IGkrKykgeworICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTsKKyAgICAgIGNvbnN0IHZhbHVlID0gaXNNYXAgPyBpdGVtLmdldChrZXkpIDogaXRlbVtrZXldOworICAgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSksIHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKSk7CisgICAgfQorICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuTUFQKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDB4MDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMHgwMCAmJiB2YWx1ZV9mbGFnICE9PSAweDAyKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgbGV0IGxlbmd0aCwgbGVuZ3RoX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IGxlbmd0aCwgbGVuOiBsZW5ndGhfbGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKKyAgICAgICAgbGVuICs9IGxlbmd0aF9sZW47CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xlbmd0aH06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7bGVuZ3RofSBpcyBsZXNzIHRoYW4gemVybycpOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxlbmd0aF9sZW4pOworCisgICAgICBjb25zdCB2ID0gbmV3IE1hcCgpOworICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBsZXQga2V5LCBrZXlfbGVuOworICAgICAgICB0cnkgeworICAgICAgICAgICh7IHY6IGtleSwgbGVuOiBrZXlfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICAgIGxlbiArPSBrZXlfbGVuOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICBlcnIubWVzc2FnZSA9IGB7aXRlbV8ke2l9fSBrZXk6IGAgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgICB0aHJvdyBlcnI7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGtleV9sZW4pOworCisgICAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOworICAgICAgICB0cnkgeworICAgICAgICAgICh7IHY6IHZhbHVlLCBsZW46IHZhbHVlX2xlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOworICAgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgICBlcnIubWVzc2FnZSA9IGB7aXRlbV8ke2l9fSB2YWx1ZTogYCArIGVyci5tZXNzYWdlOworICAgICAgICAgIHRocm93IGVycjsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UodmFsdWVfbGVuKTsKKworICAgICAgICB2LnNldChrZXksIHZhbHVlKTsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIHsgdiwgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL01hcmtlclNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvTWFya2VyU2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjBhNzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL01hcmtlclNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFya2VyU2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5NQVJLRVJdID0gdGhpczsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IChmdWxseVF1YWxpZmllZEZvcm1hdCA/IDMgOiAxKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyB0b28gc2hvcnQgZm9yIG1hcmtlcicpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuTUFSS0VSKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIGNvbnN0IHZhbHVlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgbGVuKys7CisgICAgICBpZiAodmFsdWUgIT09IDApIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIG1hcmtlciB2YWx1ZScpOworICAgICAgfQorCisgICAgICByZXR1cm4geyB2OiAnbWFya2VyJywgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL051bWJlclNlcmlhbGl6YXRpb25TdHJhdGVneS5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9OdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NzkzNQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9OdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3kuanMKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworLy8gQmFzZWQgb24gR3JhcGhTT04gTnVtYmVyU2VyaWFsaXplci5zZXJpYWxpemUoKS4KKy8vIEl0J3MgdGVzdGVkIGJ5IEFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCkgdGVzdHMuCitleHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJTZXJpYWxpemF0aW9uU3RyYXRlZ3kgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgdmFsdWUgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkgeworICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7CisgICAgICBpZiAoCisgICAgICAgIE51bWJlci5pc05hTihpdGVtKSB8fAorICAgICAgICBpdGVtID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwKKyAgICAgICAgaXRlbSA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZIHx8CisgICAgICAgICFOdW1iZXIuaXNJbnRlZ2VyKGl0ZW0pIHx8CisgICAgICAgIE9iamVjdC5pcyhpdGVtLCAtMCkKKyAgICAgICkgeworICAgICAgICByZXR1cm4gdGhpcy5pb2MuZG91YmxlU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOworICAgICAgfQorCisgICAgICBpZiAoaXRlbSA+PSAtMjE0NzQ4MzY0OCAmJiBpdGVtIDw9IDIxNDc0ODM2NDcpIHsKKyAgICAgICAgLy8gSU5UMzJfTUlOL01BWAorICAgICAgICByZXR1cm4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOworICAgICAgfQorICAgICAgaWYgKGl0ZW0gPj0gTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIgJiYgaXRlbSA8PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgeworICAgICAgICByZXR1cm4gdGhpcy5pb2MubG9uZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0KTsKKyAgICAgIH0KKyAgICAgIC8vIEludGVnZXJzIG91dHNpZGUgc2FmZSByYW5nZSBhcmUgaHVnZSBkb3VibGVzIHRoYXQgb25seSBhcHBlYXIgaW50ZWdyYWwgZHVlIHRvIElFRUUgNzU0IHByZWNpc2lvbiBsb3NzCisgICAgICByZXR1cm4gdGhpcy5pb2MuZG91YmxlU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOworICAgIH0KKworICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ2JpZ2ludCcpIHsKKyAgICAgIHJldHVybiB0aGlzLmlvYy5iaWdJbnRlZ2VyU2VyaWFsaXplci5zZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1BhdGhTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1BhdGhTZXJpYWxpemVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNTMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvUGF0aFNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CitpbXBvcnQgeyBQYXRoIH0gZnJvbSAnLi4vLi4vLi4vZ3JhcGguanMnOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRoU2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5QQVRIXSA9IHRoaXM7CisgIH0KKworICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQYXRoOworICB9CisKKyAgc2VyaWFsaXplKGl0ZW0sIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGlmIChpdGVtID09PSB1bmRlZmluZWQgfHwgaXRlbSA9PT0gbnVsbCkgeworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuUEFUSCwgMHgwMV0pOworICAgICAgfQorICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoWworICAgICAgICB0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUoW10pLCAvLyB7bGFiZWxzfT1bXQorICAgICAgICB0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUoW10pLCAvLyB7b2JqZWN0c309W10KKyAgICAgIF0pOworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuUEFUSCwgMHgwMF0pKTsKKyAgICB9CisKKyAgICAvLyB7bGFiZWxzfSBpcyBhIExpc3QgaW4gd2hpY2ggZWFjaCBpdGVtIGlzIGEgU2V0IG9mIFN0cmluZworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5sYWJlbHMpKTsKKworICAgIC8vIHtvYmplY3RzfSBpcyBhIExpc3Qgb2YgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlcworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5vYmplY3RzKSk7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlBBVEgpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgbGV0IGxhYmVscywgbGFiZWxzX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IGxhYmVscywgbGVuOiBsYWJlbHNfbGVuIH0gPSB0aGlzLmlvYy5saXN0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgbGVuICs9IGxhYmVsc19sZW47CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2xhYmVsc306ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIGNoZWNrIGNvbnRlbnQgb2YgbGFiZWxzIHRvIG1ha2Ugc3VyZSBpdCdzIExpc3Q8IFNldDxTdHJpbmc+ID4gPworICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxhYmVsc19sZW4pOworCisgICAgICBsZXQgb2JqZWN0cywgb2JqZWN0c19sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBvYmplY3RzLCBsZW46IG9iamVjdHNfbGVuIH0gPSB0aGlzLmlvYy5saXN0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgbGVuICs9IG9iamVjdHNfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tvYmplY3RzfTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2Uob2JqZWN0c19sZW4pOworCisgICAgICBjb25zdCB2ID0gbmV3IFBhdGgobGFiZWxzLCBvYmplY3RzKTsKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9Qcm9wZXJ0eVNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvUHJvcGVydHlTZXJpYWxpemVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNjM5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvUHJvcGVydHlTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworaW1wb3J0IHsgUHJvcGVydHkgfSBmcm9tICcuLi8uLi8uLi9ncmFwaC5qcyc7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIFByb3BlcnR5U2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5QUk9QRVJUWV0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUHJvcGVydHk7CisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5QUk9QRVJUWSwgMHgwMV0pOworICAgICAgfQorICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoWworICAgICAgICB0aGlzLmlvYy5zdHJpbmdTZXJpYWxpemVyLnNlcmlhbGl6ZSgnJywgZmFsc2UpLCAvLyB7a2V5fT0nJworICAgICAgICB0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSwgLy8ge3ZhbHVlfT1udWxsCisgICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7cGFyZW50fT1udWxsCisgICAgICBdKTsKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlBST1BFUlRZLCAweDAwXSkpOworICAgIH0KKworICAgIC8vIHtrZXl9CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuc2VyaWFsaXplKGl0ZW0ua2V5LCBmYWxzZSkpOworCisgICAgLy8ge3ZhbHVlfQorICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5hbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLnZhbHVlKSk7CisKKyAgICAvLyB7cGFyZW50fQorICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSk7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlBST1BFUlRZKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIC8vIHtrZXl9IGlzIGEgU3RyaW5nIHZhbHVlCisgICAgICBsZXQga2V5LCBrZXlfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjoga2V5LCBsZW46IGtleV9sZW4gfSA9IHRoaXMuaW9jLnN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgICAgICBsZW4gKz0ga2V5X2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7a2V5fTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2Uoa2V5X2xlbik7CisKKyAgICAgIC8vIHt2YWx1ZX0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0KKyAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogdmFsdWUsIGxlbjogdmFsdWVfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3t2YWx1ZX06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7CisKKyAgICAgIC8vIHtwYXJlbnR9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9IHdoaWNoIGlzIGVpdGhlciBhbiBFZGdlIG9yIFZlcnRleFByb3BlcnR5LgorICAgICAgLy8gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZHMgInJlZmVyZW5jZXMiIG9ubHkgdGhpcyB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBudWxsLgorICAgICAgbGV0IHBhcmVudF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyBsZW46IHBhcmVudF9sZW4gfSA9IHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7CisgICAgICAgIGxlbiArPSBwYXJlbnRfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3twYXJlbnR9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSB2ZXJpZnkgdGhhdCBwYXJlbnQgaXMgbnVsbD8KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwYXJlbnRfbGVuKTsKKworICAgICAgY29uc3QgdiA9IG5ldyBQcm9wZXJ0eShrZXksIHZhbHVlKTsKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TZXRTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1NldFNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3ZjVmMgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TZXRTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0U2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYywgSUQpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLklEID0gSUQ7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbSURdID0gdGhpczsKKyAgfQorCisgIGNhbkJlVXNlZEZvcih2YWx1ZSkgeworICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNldDsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pOyAvLyB7bGVuZ3RofSA9IDAKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuSUQsIDB4MDBdKSk7CisgICAgfQorCisgICAgLy8ge2xlbmd0aH0KKyAgICBsZXQgbGVuZ3RoID0gaXRlbS5zaXplOworICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICBsZW5ndGggPSAwOworICAgIH0KKyAgICBpZiAobGVuZ3RoID4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVgpIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcihgU2V0IGxlbmd0aD0ke2xlbmd0aH0gaXMgZ3JlYXRlciB0aGFuIHN1cHBvcnRlZCBtYXhfbGVuZ3RoPSR7dGhpcy5pb2MuaW50U2VyaWFsaXplci5JTlQzMl9NQVh9LmApOworICAgIH0KKyAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUobGVuZ3RoLCBmYWxzZSkpOworCisgICAgLy8ge2l0ZW1fMH0uLi57aXRlbV9ufQorICAgIGZvciAoY29uc3QgaSBvZiBpdGVtKSB7CisgICAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaSkpOworICAgIH0KKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworICAgIGxldCBpc0J1bGtlZCA9IGZhbHNlOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZUNvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodHlwZUNvZGUgIT09IHRoaXMuSUQpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlRmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZUZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVGbGFnICE9PSAwICYmIHZhbHVlRmxhZyAhPT0gMikgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBpc0J1bGtlZCA9IHZhbHVlRmxhZyA9PT0gMjsKKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorCisgICAgICBsZXQgbGVuZ3RoLCBsZW5ndGhMZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBsZW5ndGgsIGxlbjogbGVuZ3RoTGVuIH0gPSB0aGlzLmlvYy5pbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKKyAgICAgICAgbGVuICs9IGxlbmd0aExlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGVuZ3RofTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3tsZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvJyk7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuZ3RoTGVuKTsKKworICAgICAgY29uc3QgdiA9IG5ldyBTZXQoKTsKKyAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgbGV0IHZhbHVlLCB2YWx1ZUxlbjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAoeyB2OiB2YWx1ZSwgbGVuOiB2YWx1ZUxlbiB9ID0gdGhpcy5pb2MuYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShjdXJzb3IpKTsKKyAgICAgICAgICBsZW4gKz0gdmFsdWVMZW47CisgICAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICAgIGVyci5tZXNzYWdlID0gYHtpdGVtXyR7aX19OiBgICsgZXJyLm1lc3NhZ2U7CisgICAgICAgICAgdGhyb3cgZXJyOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSh2YWx1ZUxlbik7CisKKyAgICAgICAgaWYgKGlzQnVsa2VkKSB7CisgICAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCA4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHtpdGVtXyR7aX19OiBidWxrIGNvdW50IGlzIG1pc3NpbmdgKTsKKyAgICAgICAgICB9CisgICAgICAgICAgY3Vyc29yLnJlYWRCaWdJbnQ2NEJFKCk7CisgICAgICAgICAgbGVuICs9IDg7CisgICAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDgpOworCisgICAgICAgICAgLy8gU2V0LmFkZCBpcyBpZGVtcG90ZW50OyBidWxrIGNvdW50IG9ubHkgYWZmZWN0cyBjYXJkaW5hbGl0eSwgbm90IFNldCBtZW1iZXJzaGlwCisgICAgICAgICAgdi5hZGQodmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHYuYWRkKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4geyB2LCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvU2hvcnRTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Nob3J0U2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTczNzhmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Nob3J0U2VyaWFsaXplci5qcwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hvcnRTZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLlNIT1JUXSA9IHRoaXM7CisgIH0KKworICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKKyAgICAvLyBpdCdzIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkIGR1cmluZyBzZXJpYWxpemF0aW9uCisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5TSE9SVCwgMHgwMV0pOworICAgICAgfQorICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwXSk7CisgICAgfQorCisgICAgY29uc3QgYnVmcyA9IFtdOworICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgYnVmcy5wdXNoKEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5TSE9SVCwgMHgwMF0pKTsKKyAgICB9CisgICAgY29uc3QgdiA9IEJ1ZmZlci5hbGxvYygyKTsKKyAgICB2LndyaXRlSW50MTZCRShpdGVtKTsgLy8gVE9ETzogd2hhdCBpZiBpdGVtIGlzIG5vdCB3aXRoaW4gaW50MTYgbGltaXRzLCBmb3Igbm93IHdyaXRlSW50MTZCRSB3b3VsZCBlcnJvcgorICAgIGJ1ZnMucHVzaCh2KTsKKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5pb2MuRGF0YVR5cGUuU0hPUlQpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAyKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWV9IGxlbmd0aCcpOworICAgICAgfQorICAgICAgbGVuICs9IDI7CisKKyAgICAgIGNvbnN0IHYgPSBjdXJzb3IucmVhZEludDE2QkUoKTsKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TdHJpbmdTZXJpYWxpemVyLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1N0cmluZ1NlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzNDljMgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TdHJpbmdTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSWdvciBPc3RhcGVua28KKyAqLworCitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworCitleHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdTZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jLCBJRCkgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuSUQgPSBJRDsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tJRF0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7CisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLklELCAweDAxXSk7CisgICAgICB9CisgICAgICByZXR1cm4gdGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUoMCwgZmFsc2UpOworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5JRCwgMHgwMF0pKTsKKyAgICB9CisgICAgY29uc3QgdiA9IEJ1ZmZlci5mcm9tKFN0cmluZyhpdGVtKSwgJ3V0ZjgnKTsKKyAgICBidWZzLnB1c2godGhpcy5pb2MuaW50U2VyaWFsaXplci5zZXJpYWxpemUodi5sZW5ndGgsIGZhbHNlKSk7IC8vIFRPRE86IHdoYXQgaWYgbGVuID4gSU5UMzJfTUFYLCBmb3Igbm93IGl0J3MgYmFja2VkIGJ5IGxvZ2ljIG9mIEludFNlcmlhbGl6ZXIuc2VyaWFsaXplIGl0c2VsZgorICAgIGJ1ZnMucHVzaCh2KTsKKworICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZnMpOworICB9CisKKyAgZGVzZXJpYWxpemUoYnVmZmVyLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUsIG51bGxhYmxlID0gZmFsc2UpIHsKKyAgICBsZXQgbGVuID0gMDsKKyAgICBsZXQgY3Vyc29yID0gYnVmZmVyOworCisgICAgdHJ5IHsKKyAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCB8fCBidWZmZXIgPT09IG51bGwgfHwgIShidWZmZXIgaW5zdGFuY2VvZiBCdWZmZXIpKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIG1pc3NpbmcnKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZmZXIubGVuZ3RoIDwgMSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBlbXB0eScpOworICAgICAgfQorCisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHR5cGVfY29kZSAhPT0gdGhpcy5JRCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCB8fCBudWxsYWJsZSkgeworICAgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3t2YWx1ZV9mbGFnfSBpcyBtaXNzaW5nJyk7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh2YWx1ZV9mbGFnID09PSAxKSB7CisgICAgICAgICAgcmV0dXJuIHsgdjogbnVsbCwgbGVuIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDApIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3ZhbHVlX2ZsYWd9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorCisgICAgICBsZXQgbGVuZ3RoLCBsZW5ndGhfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogbGVuZ3RoLCBsZW46IGxlbmd0aF9sZW4gfSA9IHRoaXMuaW9jLmludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgICAgICBsZW4gKz0gbGVuZ3RoX2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGVuZ3RofTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBpZiAobGVuZ3RoIDwgMCkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3tsZW5ndGh9IGlzIGxlc3MgdGhhbiB6ZXJvJyk7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UobGVuZ3RoX2xlbik7CisKKyAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgbGVuZ3RoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dGV4dF92YWx1ZX0gbGVuZ3RoJyk7CisgICAgICB9CisgICAgICBsZW4gKz0gbGVuZ3RoOworCisgICAgICBjb25zdCB2ID0gY3Vyc29yLnRvU3RyaW5nKCd1dGY4JywgMCwgbGVuZ3RoKTsKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TdHViU2VyaWFsaXplci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9TdHViU2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2RkZGZiCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1N0dWJTZXJpYWxpemVyLmpzCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3R1YlNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MsIHR5cGVDb2RlLCB0eXBlTmFtZSkgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMudHlwZUNvZGUgPSB0eXBlQ29kZTsKKyAgICB0aGlzLnR5cGVOYW1lID0gdHlwZU5hbWU7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbdHlwZUNvZGVdID0gdGhpczsKKyAgfQorICBkZXNlcmlhbGl6ZSgpIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50eXBlTmFtZX0gZGVzZXJpYWxpemF0aW9uIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRgKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Vuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmQxNjAxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1Vuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5zcGVjaWZpZWROdWxsU2VyaWFsaXplciB7CisgIGNvbnN0cnVjdG9yKGlvYykgeworICAgIHRoaXMuaW9jID0gaW9jOworICAgIHRoaXMuaW9jLnNlcmlhbGl6ZXJzW2lvYy5EYXRhVHlwZS5VTlNQRUNJRklFRF9OVUxMXSA9IHRoaXM7CisgIH0KKworICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtKSB7CisgICAgLy8gZnVsbHlRdWFsaWZpZWRGb3JtYXQgYWx3YXlzIGlzIHRydWUKKyAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlVOU1BFQ0lGSUVEX05VTEwsIDB4MDFdKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlcikgeworICAgIC8vIGZ1bGx5UXVhbGlmaWVkRm9ybWF0IGFsd2F5cyBpcyB0cnVlCisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgY29uc3QgdHlwZV9jb2RlID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgbGVuKys7CisgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5VTlNQRUNJRklFRF9OVUxMKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dHlwZV9jb2RlfScpOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICBpZiAoY3Vyc29yLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgfQorICAgICAgY29uc3QgdmFsdWVfZmxhZyA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgIGxlbisrOworICAgICAgaWYgKHZhbHVlX2ZsYWcgIT09IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgIHRocm93IHRoaXMuaW9jLnV0aWxzLmRlc19lcnJvcih7IHNlcmlhbGl6ZXI6IHRoaXMsIGFyZ3M6IGFyZ3VtZW50cywgY3Vyc29yLCBlcnIgfSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVXVpZFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVXVpZFNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjMzQ2YwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9VdWlkU2VyaWFsaXplci5qcwpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIElnb3IgT3N0YXBlbmtvCisgKi8KKworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXVpZFNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuVVVJRF0gPSB0aGlzOworICB9CisKKyAgY2FuQmVVc2VkRm9yKHZhbHVlKSB7CisgICAgLy8gVE9ETzogYW55IGlkZWEgdG8gc3VwcG9ydCBVVUlEIGF1dG9tYXRpYyBzZXJpYWxpemF0aW9uIHZpYSBBbnlTZXJpYWxpemVyIGluIGZ1dHVyZT8KKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlVVSUQsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICBdKTsKKyAgICB9CisKKyAgICBjb25zdCB1dWlkX3N0ciA9IFN0cmluZyhpdGVtKQorICAgICAgLnJlcGxhY2UoL151cm46dXVpZDovLCAnJykKKyAgICAgIC5yZXBsYWNlKC9be30tXS9nLCAnJyk7CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlVVSUQsIDB4MDBdKSk7CisgICAgfQorCisgICAgY29uc3QgdiA9IEJ1ZmZlci5hbGxvYygxNiwgMCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNiAmJiBpICogMiA8IHV1aWRfc3RyLmxlbmd0aDsgaSsrKSB7CisgICAgICB2W2ldID0gcGFyc2VJbnQodXVpZF9zdHIuc2xpY2UoaSAqIDIsIGkgKiAyICsgMiksIDE2KTsKKyAgICB9CisgICAgYnVmcy5wdXNoKHYpOworCisgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7CisgIH0KKworICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSwgbnVsbGFibGUgPSBmYWxzZSkgeworICAgIGxldCBsZW4gPSAwOworICAgIGxldCBjdXJzb3IgPSBidWZmZXI7CisKKyAgICB0cnkgeworICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOworICAgICAgfQorICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5VVUlEKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworICAgICAgfQorICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0IHx8IG51bGxhYmxlKSB7CisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMTYpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZX0gbGVuZ3RoJyk7CisgICAgICB9CisgICAgICBsZW4gKz0gMTY7CisKKyAgICAgIC8vIEV4YW1wbGU6IDIwNzUyNzhELUY2MjQtNEIyQi05NjBELTI1RDM3NEQ1N0MwNAorICAgICAgY29uc3QgdiA9CisgICAgICAgIGN1cnNvci5zbGljZSgwLCA0KS50b1N0cmluZygnaGV4JykgKworICAgICAgICAnLScgKworICAgICAgICBjdXJzb3Iuc2xpY2UoNCwgNikudG9TdHJpbmcoJ2hleCcpICsKKyAgICAgICAgJy0nICsKKyAgICAgICAgY3Vyc29yLnNsaWNlKDYsIDgpLnRvU3RyaW5nKCdoZXgnKSArCisgICAgICAgICctJyArCisgICAgICAgIGN1cnNvci5zbGljZSg4LCAxMCkudG9TdHJpbmcoJ2hleCcpICsKKyAgICAgICAgJy0nICsKKyAgICAgICAgY3Vyc29yLnNsaWNlKDEwLCAxNikudG9TdHJpbmcoJ2hleCcpOworICAgICAgcmV0dXJuIHsgdiwgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1ZlcnRleFByb3BlcnR5U2VyaWFsaXplci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU4NmQ1YgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy9WZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CitpbXBvcnQgeyBWZXJ0ZXhQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL2dyYXBoLmpzJzsKKworZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyIHsKKyAgY29uc3RydWN0b3IoaW9jKSB7CisgICAgdGhpcy5pb2MgPSBpb2M7CisgICAgdGhpcy5pb2Muc2VyaWFsaXplcnNbaW9jLkRhdGFUeXBlLlZFUlRFWFBST1BFUlRZXSA9IHRoaXM7CisgIH0KKworICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBWZXJ0ZXhQcm9wZXJ0eTsKKyAgfQorCisgIHNlcmlhbGl6ZShpdGVtLCBmdWxseVF1YWxpZmllZEZvcm1hdCA9IHRydWUpIHsKKyAgICBpZiAoaXRlbSA9PT0gdW5kZWZpbmVkIHx8IGl0ZW0gPT09IG51bGwpIHsKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlZFUlRFWFBST1BFUlRZLCAweDAxXSk7CisgICAgICB9CisgICAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7aWR9PW51bGwKKyAgICAgICAgdGhpcy5pb2MubGlzdFNlcmlhbGl6ZXIuc2VyaWFsaXplKFtdLCBmYWxzZSksIC8vIHtsYWJlbH09ZW1wdHkgbGlzdAorICAgICAgICB0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSwgLy8ge3ZhbHVlfT1udWxsCisgICAgICAgIHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpLCAvLyB7cGFyZW50fT1udWxsCisgICAgICAgIHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShbXSwgdHJ1ZSksIC8vIHtwcm9wZXJ0aWVzfT1lbXB0eSBsaXN0CisgICAgICBdKTsKKyAgICB9CisKKyAgICBjb25zdCBidWZzID0gW107CisgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICBidWZzLnB1c2goQnVmZmVyLmZyb20oW3RoaXMuaW9jLkRhdGFUeXBlLlZFUlRFWFBST1BFUlRZLCAweDAwXSkpOworICAgIH0KKworICAgIC8vIHtpZH0KKyAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5pZCkpOworCisgICAgLy8ge2xhYmVsfQorICAgIGNvbnN0IGxhYmVscyA9IEFycmF5LmlzQXJyYXkoaXRlbS5sYWJlbCkgPyBpdGVtLmxhYmVsIDogaXRlbS5sYWJlbCA/IFtpdGVtLmxhYmVsXSA6IFtdOworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUobGFiZWxzLCBmYWxzZSkpOworCisgICAgLy8ge3ZhbHVlfQorICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5hbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShpdGVtLnZhbHVlKSk7CisKKyAgICAvLyB7cGFyZW50fQorICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy51bnNwZWNpZmllZE51bGxTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKSk7CisKKyAgICAvLyB7cHJvcGVydGllc30KKyAgICBidWZzLnB1c2godGhpcy5pb2MubGlzdFNlcmlhbGl6ZXIuc2VyaWFsaXplKFtdLCB0cnVlKSk7CisKKyAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChidWZzKTsKKyAgfQorCisgIGRlc2VyaWFsaXplKGJ1ZmZlciwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgbGV0IGxlbiA9IDA7CisgICAgbGV0IGN1cnNvciA9IGJ1ZmZlcjsKKworICAgIHRyeSB7CisgICAgICBpZiAoYnVmZmVyID09PSB1bmRlZmluZWQgfHwgYnVmZmVyID09PSBudWxsIHx8ICEoYnVmZmVyIGluc3RhbmNlb2YgQnVmZmVyKSkgeworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBpcyBtaXNzaW5nJyk7CisgICAgICB9CisgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA8IDEpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgZW1wdHknKTsKKyAgICAgIH0KKworICAgICAgaWYgKGZ1bGx5UXVhbGlmaWVkRm9ybWF0KSB7CisgICAgICAgIGNvbnN0IHR5cGVfY29kZSA9IGN1cnNvci5yZWFkVUludDgoKTsKKyAgICAgICAgbGVuKys7CisgICAgICAgIGlmICh0eXBlX2NvZGUgIT09IHRoaXMuaW9jLkRhdGFUeXBlLlZFUlRFWFBST1BFUlRZKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt0eXBlX2NvZGV9Jyk7CisgICAgICAgIH0KKyAgICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKDEpOworCisgICAgICAgIGlmIChjdXJzb3IubGVuZ3RoIDwgMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigne3ZhbHVlX2ZsYWd9IGlzIG1pc3NpbmcnKTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCB2YWx1ZV9mbGFnID0gY3Vyc29yLnJlYWRVSW50OCgpOworICAgICAgICBsZW4rKzsKKyAgICAgICAgaWYgKHZhbHVlX2ZsYWcgPT09IDEpIHsKKyAgICAgICAgICByZXR1cm4geyB2OiBudWxsLCBsZW4gfTsKKyAgICAgICAgfQorICAgICAgICBpZiAodmFsdWVfZmxhZyAhPT0gMCkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5leHBlY3RlZCB7dmFsdWVfZmxhZ30nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisgICAgICB9CisKKyAgICAgIC8vIHtpZH0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0KKyAgICAgIGxldCBpZCwgaWRfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogaWQsIGxlbjogaWRfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICBsZW4gKz0gaWRfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tpZH06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGlkX2xlbik7CisKKyAgICAgIC8vIHtsYWJlbH0gaXMgYSBMaXN0IHZhbHVlCisgICAgICBsZXQgbGFiZWwsIGxhYmVsX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IGxhYmVsLCBsZW46IGxhYmVsX2xlbiB9ID0gdGhpcy5pb2MubGlzdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yLCBmYWxzZSkpOworICAgICAgICBsYWJlbCA9IEFycmF5LmlzQXJyYXkobGFiZWwpICYmIGxhYmVsLmxlbmd0aCA+IDAgPyBsYWJlbFswXSA6IGxhYmVsOworICAgICAgICBsZW4gKz0gbGFiZWxfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3tsYWJlbH06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKGxhYmVsX2xlbik7CisKKyAgICAgIC8vIHt2YWx1ZX0gaXMgYSBmdWxseSBxdWFsaWZpZWQgdHlwZWQgdmFsdWUgY29tcG9zZWQgb2Yge3R5cGVfY29kZX17dHlwZV9pbmZvfXt2YWx1ZV9mbGFnfXt2YWx1ZX0KKyAgICAgIGxldCB2YWx1ZSwgdmFsdWVfbGVuOworICAgICAgdHJ5IHsKKyAgICAgICAgKHsgdjogdmFsdWUsIGxlbjogdmFsdWVfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICBsZW4gKz0gdmFsdWVfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3t2YWx1ZX06ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgY3Vyc29yID0gY3Vyc29yLnNsaWNlKHZhbHVlX2xlbik7CisKKyAgICAgIC8vIHtwYXJlbnR9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9IHdoaWNoIGNvbnRhaW5zIHRoZSBwYXJlbnQgVmVydGV4LgorICAgICAgLy8gTm90ZSB0aGF0IGFzIFRpbmtlclBvcCBjdXJyZW50bHkgc2VuZCAicmVmZXJlbmNlcyIgb25seSwgdGhpcyB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBudWxsLgorICAgICAgbGV0IHBhcmVudF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyBsZW46IHBhcmVudF9sZW4gfSA9IHRoaXMuaW9jLnVuc3BlY2lmaWVkTnVsbFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7CisgICAgICAgIGxlbiArPSBwYXJlbnRfbGVuOworICAgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICAgIGVyci5tZXNzYWdlID0gJ3twYXJlbnR9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIC8vIFRPRE86IHNob3VsZCB3ZSB2ZXJpZnkgdGhhdCBwYXJlbnQgaXMgbnVsbD8KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwYXJlbnRfbGVuKTsKKworICAgICAgLy8ge3Byb3BlcnRpZXN9IGlzIGEgZnVsbHkgcXVhbGlmaWVkIHR5cGVkIHZhbHVlIGNvbXBvc2VkIG9mIHt0eXBlX2NvZGV9e3R5cGVfaW5mb317dmFsdWVfZmxhZ317dmFsdWV9IHdoaWNoIGNvbnRhaW5zIHByb3BlcnRpZXMuIE5vdGUgdGhhdCBhcyBUaW5rZXJQb3AgY3VycmVudGx5IHNlbmQgInJlZmVyZW5jZXMiIG9ubHksIHRoaXMgdmFsdWUgd2lsbCBhbHdheXMgYmUgbnVsbC4KKyAgICAgIGxldCBwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzX2xlbjsKKyAgICAgIHRyeSB7CisgICAgICAgICh7IHY6IHByb3BlcnRpZXMsIGxlbjogcHJvcGVydGllc19sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7CisgICAgICAgIGxlbiArPSBwcm9wZXJ0aWVzX2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7cHJvcGVydGllc306ICcgKyBlcnIubWVzc2FnZTsKKyAgICAgICAgdGhyb3cgZXJyOworICAgICAgfQorICAgICAgLy8gVE9ETzogc2hvdWxkIHdlIHZlcmlmeSB0aGF0IHByb3BlcnRpZXMgaXMgbnVsbD8KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwcm9wZXJ0aWVzX2xlbik7CisKKyAgICAgIC8vIG51bGwgcHJvcGVydGllcyBhcmUgZGVzZXJpYWxpemVkIGludG8gZW1wdHkgbGlzdHMKKyAgICAgIGNvbnN0IHZwX3Byb3BzID0gcHJvcGVydGllcyA/IHByb3BlcnRpZXMgOiBbXTsKKyAgICAgIGNvbnN0IHYgPSBuZXcgVmVydGV4UHJvcGVydHkoaWQsIGxhYmVsLCB2YWx1ZSwgdnBfcHJvcHMpOworICAgICAgcmV0dXJuIHsgdiwgbGVuIH07CisgICAgfSBjYXRjaCAoZXJyKSB7CisgICAgICB0aHJvdyB0aGlzLmlvYy51dGlscy5kZXNfZXJyb3IoeyBzZXJpYWxpemVyOiB0aGlzLCBhcmdzOiBhcmd1bWVudHMsIGN1cnNvciwgZXJyIH0pOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1ZlcnRleFNlcmlhbGl6ZXIuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvVmVydGV4U2VyaWFsaXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2QxOGFlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL1ZlcnRleFNlcmlhbGl6ZXIuanMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CitpbXBvcnQgeyBWZXJ0ZXggfSBmcm9tICcuLi8uLi8uLi9ncmFwaC5qcyc7CisKK2V4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRleFNlcmlhbGl6ZXIgeworICBjb25zdHJ1Y3Rvcihpb2MpIHsKKyAgICB0aGlzLmlvYyA9IGlvYzsKKyAgICB0aGlzLmlvYy5zZXJpYWxpemVyc1tpb2MuRGF0YVR5cGUuVkVSVEVYXSA9IHRoaXM7CisgIH0KKworICBjYW5CZVVzZWRGb3IodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBWZXJ0ZXg7CisgIH0KKworICBzZXJpYWxpemUoaXRlbSwgZnVsbHlRdWFsaWZpZWRGb3JtYXQgPSB0cnVlKSB7CisgICAgaWYgKGl0ZW0gPT09IHVuZGVmaW5lZCB8fCBpdGVtID09PSBudWxsKSB7CisgICAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFt0aGlzLmlvYy5EYXRhVHlwZS5WRVJURVgsIDB4MDFdKTsKKyAgICAgIH0KKyAgICAgIGNvbnN0IGlkID0gWzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBTdHJpbmcgJycKKyAgICAgIGNvbnN0IGxhYmVsID0gWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBlbXB0eSBsaXN0CisgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gWzB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdOyAvLyBlbXB0eSBsaXN0CisgICAgICByZXR1cm4gQnVmZmVyLmZyb20oWy4uLmlkLCAuLi5sYWJlbCwgLi4ucHJvcGVydGllc10pOworICAgIH0KKworICAgIGNvbnN0IGJ1ZnMgPSBbXTsKKyAgICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQpIHsKKyAgICAgIGJ1ZnMucHVzaChCdWZmZXIuZnJvbShbdGhpcy5pb2MuRGF0YVR5cGUuVkVSVEVYLCAweDAwXSkpOworICAgIH0KKworICAgIC8vIHtpZH0KKyAgICBidWZzLnB1c2godGhpcy5pb2MuYW55U2VyaWFsaXplci5zZXJpYWxpemUoaXRlbS5pZCkpOworCisgICAgLy8ge2xhYmVsfQorICAgIGNvbnN0IGxhYmVscyA9IEFycmF5LmlzQXJyYXkoaXRlbS5sYWJlbCkgPyBpdGVtLmxhYmVsIDogaXRlbS5sYWJlbCA/IFtpdGVtLmxhYmVsXSA6IFtdOworICAgIGJ1ZnMucHVzaCh0aGlzLmlvYy5saXN0U2VyaWFsaXplci5zZXJpYWxpemUobGFiZWxzLCBmYWxzZSkpOworCisgICAgLy8ge3Byb3BlcnRpZXN9CisgICAgYnVmcy5wdXNoKHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLnNlcmlhbGl6ZShbXSwgdHJ1ZSkpOworCisgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmcyk7CisgIH0KKworICBkZXNlcmlhbGl6ZShidWZmZXIsIGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gdHJ1ZSkgeworICAgIGxldCBsZW4gPSAwOworICAgIGxldCBjdXJzb3IgPSBidWZmZXI7CisKKyAgICB0cnkgeworICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkIHx8IGJ1ZmZlciA9PT0gbnVsbCB8fCAhKGJ1ZmZlciBpbnN0YW5jZW9mIEJ1ZmZlcikpIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidWZmZXIgaXMgbWlzc2luZycpOworICAgICAgfQorICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPCAxKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYnVmZmVyIGlzIGVtcHR5Jyk7CisgICAgICB9CisKKyAgICAgIGlmIChmdWxseVF1YWxpZmllZEZvcm1hdCkgeworICAgICAgICBjb25zdCB0eXBlX2NvZGUgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodHlwZV9jb2RlICE9PSB0aGlzLmlvYy5EYXRhVHlwZS5WRVJURVgpIHsKKyAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuZXhwZWN0ZWQge3R5cGVfY29kZX0nKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMSk7CisKKyAgICAgICAgaWYgKGN1cnNvci5sZW5ndGggPCAxKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd7dmFsdWVfZmxhZ30gaXMgbWlzc2luZycpOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHZhbHVlX2ZsYWcgPSBjdXJzb3IucmVhZFVJbnQ4KCk7CisgICAgICAgIGxlbisrOworICAgICAgICBpZiAodmFsdWVfZmxhZyA9PT0gMSkgeworICAgICAgICAgIHJldHVybiB7IHY6IG51bGwsIGxlbiB9OworICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZV9mbGFnICE9PSAwKSB7CisgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIHt2YWx1ZV9mbGFnfScpOworICAgICAgICB9CisgICAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZSgxKTsKKyAgICAgIH0KKworICAgICAgbGV0IGlkLCBpZF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBpZCwgbGVuOiBpZF9sZW4gfSA9IHRoaXMuaW9jLmFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoY3Vyc29yKSk7CisgICAgICAgIGxlbiArPSBpZF9sZW47CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgZXJyLm1lc3NhZ2UgPSAne2lkfTogJyArIGVyci5tZXNzYWdlOworICAgICAgICB0aHJvdyBlcnI7CisgICAgICB9CisgICAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoaWRfbGVuKTsKKworICAgICAgbGV0IGxhYmVsLCBsYWJlbF9sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBsYWJlbCwgbGVuOiBsYWJlbF9sZW4gfSA9IHRoaXMuaW9jLmxpc3RTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvciwgZmFsc2UpKTsKKyAgICAgICAgbGFiZWwgPSBBcnJheS5pc0FycmF5KGxhYmVsKSAmJiBsYWJlbC5sZW5ndGggPiAwID8gbGFiZWxbMF0gOiBsYWJlbDsKKyAgICAgICAgbGVuICs9IGxhYmVsX2xlbjsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBlcnIubWVzc2FnZSA9ICd7bGFiZWx9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShsYWJlbF9sZW4pOworCisgICAgICBsZXQgcHJvcGVydGllcywgcHJvcGVydGllc19sZW47CisgICAgICB0cnkgeworICAgICAgICAoeyB2OiBwcm9wZXJ0aWVzLCBsZW46IHByb3BlcnRpZXNfbGVuIH0gPSB0aGlzLmlvYy5hbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGN1cnNvcikpOworICAgICAgICBsZW4gKz0gcHJvcGVydGllc19sZW47CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgZXJyLm1lc3NhZ2UgPSAne3Byb3BlcnRpZXN9OiAnICsgZXJyLm1lc3NhZ2U7CisgICAgICAgIHRocm93IGVycjsKKyAgICAgIH0KKyAgICAgIGN1cnNvciA9IGN1cnNvci5zbGljZShwcm9wZXJ0aWVzX2xlbik7CisKKyAgICAgIC8vIG51bGwgcHJvcGVydGllcyBhcmUgZGVzZXJpYWxpemVkIGludG8gZW1wdHkgbGlzdHMKKyAgICAgIGNvbnN0IHZlcnRleF9wcm9wcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDogW107CisKKyAgICAgIGNvbnN0IHYgPSBuZXcgVmVydGV4KGlkLCBsYWJlbCwgdmVydGV4X3Byb3BzKTsKKyAgICAgIHJldHVybiB7IHYsIGxlbiB9OworICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgdGhyb3cgdGhpcy5pb2MudXRpbHMuZGVzX2Vycm9yKHsgc2VyaWFsaXplcjogdGhpcywgYXJnczogYXJndW1lbnRzLCBjdXJzb3IsIGVyciB9KTsKKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy91dGlscy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L2ludGVybmFscy91dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzYTFmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3N0cnVjdHVyZS9pby9iaW5hcnkvaW50ZXJuYWxzL3V0aWxzLmpzCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBJZ29yIE9zdGFwZW5rbworICovCisKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CisKKy8qCisgKiBEZXNlcmlhbGl6YXRpb24gZXJyb3IgZ2VuZXJhbCBjb25zdHJ1Y3Rvci4KKyAqLworZXhwb3J0IGNvbnN0IGRlc19lcnJvciA9ICh7IHNlcmlhbGl6ZXIsIGFyZ3MsIGN1cnNvciwgZXJyIH0pID0+IHsKKyAgaWYgKGN1cnNvciA9PT0gdW5kZWZpbmVkKSB7CisgICAgY3Vyc29yID0gYXJnc1swXTsgLy8gYnVmZmVyCisgIH0KKyAgbGV0IGN1cnNvcl90YWlsID0gJyc7CisgIGlmIChjdXJzb3IgaW5zdGFuY2VvZiBCdWZmZXIpIHsKKyAgICBpZiAoY3Vyc29yLmxlbmd0aCA+IDMyKSB7CisgICAgICBjdXJzb3JfdGFpbCA9ICcuLi4nOworICAgIH0KKyAgICBjdXJzb3IgPSBjdXJzb3Iuc2xpY2UoMCwgMzIpLnRvU3RyaW5nKCdoZXgnKTsKKyAgfQorCisgIGNvbnN0IGZ1bGx5UXVhbGlmaWVkRm9ybWF0ID0gYXJnc1sxXTsKKyAgY29uc3QgbnVsbGFibGUgPSBhcmdzWzJdOworCisgIGxldCBtID0gYCR7c2VyaWFsaXplci5jb25zdHJ1Y3Rvci5uYW1lfS5kZXNlcmlhbGl6ZShjdXJzb3I9JHtjdXJzb3J9JHtjdXJzb3JfdGFpbH1gOworICBpZiAoZnVsbHlRdWFsaWZpZWRGb3JtYXQgIT09IHVuZGVmaW5lZCkgeworICAgIG0gKz0gYCwgZnVsbHlRdWFsaWZpZWRGb3JtYXQ9JHtmdWxseVF1YWxpZmllZEZvcm1hdH1gOworICB9CisgIGlmIChudWxsYWJsZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgbSArPSBgLCBudWxsYWJsZT0ke251bGxhYmxlfWA7CisgIH0KKyAgbSArPSBgKTogJHtlcnIubWVzc2FnZS5yZXBsYWNlKC9cLiQvLCAnJyl9LmA7CisKKyAgZXJyLm1lc3NhZ2UgPSBtOworCisgIHJldHVybiBlcnI7Cit9OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3V0aWxzLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvbGliL3V0aWxzLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YmE1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9saWIvdXRpbHMudHMKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQSBtb2R1bGUgY29udGFpbmluZyBhbnkgdXRpbGl0eSBmdW5jdGlvbnMuCisgKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKKyAqLworCitjb25zdCBncmVtbGluVmVyc2lvbiA9ICc0LjAuMC1TTkFQU0hPVCc7IC8vIERPIE5PVCBNT0RJRlkgLSBDb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYnkgTWF2ZW4gUmVwbGFjZXIgUGx1Z2luCisKK2V4cG9ydCBmdW5jdGlvbiB0b0xvbmcodmFsdWU6IG51bWJlciB8IHN0cmluZykgeworICByZXR1cm4gbmV3IExvbmcodmFsdWUpOworfQorCitleHBvcnQgY2xhc3MgTG9uZyB7CisgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKSB7CisgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykgeworICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXInKTsKKyAgICB9CisgIH0KK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldFV1aWQoKSB7CisgIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEKCk7Cit9CisKK2V4cG9ydCBjb25zdCBlbXB0eUFycmF5ID0gT2JqZWN0LmZyZWV6ZShbXSkgYXMgYW55IGFzIGFueVtdOworCitleHBvcnQgY2xhc3MgSW1tdXRhYmxlTWFwPEssIFY+IGV4dGVuZHMgTWFwPEssIFY+IGltcGxlbWVudHMgUmVhZG9ubHlNYXA8SywgVj4geworICBjb25zdHJ1Y3RvcihpdGVyYWJsZT86IEl0ZXJhYmxlPFtLLCBWXT4pIHsKKyAgICBzdXBlcihpdGVyYWJsZSk7CisgIH0KKworICBzZXQoKSB7CisgICAgcmV0dXJuIHRoaXM7CisgIH0KKworICBbJ2RlbGV0ZSddKCkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGNsZWFyKCkge30KK30KKworYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVOb2RlVXNlckFnZW50KCkgeworICBjb25zdCBvcyA9IGF3YWl0IGltcG9ydCgnbm9kZTpvcycpOworCisgIGNvbnN0IGFwcGxpY2F0aW9uTmFtZSA9IChwcm9jZXNzPy5lbnYubnBtX3BhY2thZ2VfbmFtZSA/PyAnTm90QXZhaWxhYmxlJykucmVwbGFjZSgnXycsICcgJyk7CisgIGxldCBydW50aW1lVmVyc2lvbjsKKyAgbGV0IG9zTmFtZTsKKyAgbGV0IG9zVmVyc2lvbjsKKyAgbGV0IGNwdUFyY2g7CisgIHJ1bnRpbWVWZXJzaW9uID0gb3NOYW1lID0gb3NWZXJzaW9uID0gY3B1QXJjaCA9ICdOb3RBdmFpbGFibGUnOworICBpZiAocHJvY2VzcyAhPSBudWxsKSB7CisgICAgaWYgKHByb2Nlc3MudmVyc2lvbikgeworICAgICAgcnVudGltZVZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb24ucmVwbGFjZSgnICcsICdfJyk7CisgICAgfQorICAgIGlmIChwcm9jZXNzLmFyY2gpIHsKKyAgICAgIGNwdUFyY2ggPSBwcm9jZXNzLmFyY2gucmVwbGFjZSgnICcsICdfJyk7CisgICAgfQorICB9CisKKyAgaWYgKG9zICE9IG51bGwpIHsKKyAgICBvc05hbWUgPSBvcy5wbGF0Zm9ybSgpLnJlcGxhY2UoJyAnLCAnXycpOworICAgIG9zVmVyc2lvbiA9IG9zLnJlbGVhc2UoKS5yZXBsYWNlKCcgJywgJ18nKTsKKyAgfQorCisgIGNvbnN0IHVzZXJBZ2VudCA9IGAke2FwcGxpY2F0aW9uTmFtZX0gR3JlbWxpbi1KYXZhc2NyaXB0LiR7Z3JlbWxpblZlcnNpb259ICR7cnVudGltZVZlcnNpb259ICR7b3NOYW1lfS4ke29zVmVyc2lvbn0gJHtjcHVBcmNofWA7CisKKyAgcmV0dXJuIHVzZXJBZ2VudDsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudEhlYWRlcigpIHsKKyAgcmV0dXJuICdVc2VyLUFnZW50JzsKK30KKworZXhwb3J0IGNvbnN0IGdldFVzZXJBZ2VudCA9IGFzeW5jICgpID0+IHsKKyAgaWYgKCduYXZpZ2F0b3InIGluIGdsb2JhbFRoaXMpIHsKKyAgICByZXR1cm4gZ2xvYmFsVGhpcy5uYXZpZ2F0b3IudXNlckFnZW50OworICB9CisKKyAgaWYgKHByb2Nlc3M/LnZlcnNpb25zPy5ub2RlICE9PSB1bmRlZmluZWQpIHsKKyAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVOb2RlVXNlckFnZW50KCk7CisgIH0KKworICByZXR1cm4gdW5kZWZpbmVkOworfTsKKworZXhwb3J0IGNvbnN0IHRvQXJyYXlCdWZmZXIgPSAoYnVmZmVyOiBCdWZmZXIpID0+CisgIGJ1ZmZlci5idWZmZXIuc2xpY2UoYnVmZmVyLmJ5dGVPZmZzZXQsIGJ1ZmZlci5ieXRlT2Zmc2V0ICsgYnVmZmVyLmJ5dGVMZW5ndGgpOworCitleHBvcnQgY29uc3QgRGVmZXJyZWRQcm9taXNlID0gPFQ+KCkgPT4geworICBsZXQgcmVzb2x2ZSA9ICh2YWx1ZTogVCkgPT4ge307CisgIGxldCByZWplY3QgPSAocmVhc29uOiB1bmtub3duKSA9PiB7fTsKKworICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8VD4oKF9yZXNvbHZlLCBfcmVqZWN0KSA9PiB7CisgICAgcmVzb2x2ZSA9IF9yZXNvbHZlOworICAgIHJlamVjdCA9IF9yZWplY3Q7CisgIH0pOworCisgIHJldHVybiBPYmplY3QuYXNzaWduKHByb21pc2UsIHsgcmVzb2x2ZSwgcmVqZWN0IH0pOworfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3BhY2thZ2UuanNvbiBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDdhN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsMTA2IEBACit7CisgICJuYW1lIjogImdyZW1saW4iLAorICAidmVyc2lvbiI6ICI0LjAuMC1hbHBoYTEiLAorICAiZGVzY3JpcHRpb24iOiAiSmF2YVNjcmlwdCBHcmVtbGluIExhbmd1YWdlIFZhcmlhbnQiLAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIkFwYWNoZSBUaW5rZXJQb3AgdGVhbSIKKyAgfSwKKyAgImtleXdvcmRzIjogWworICAgICJncmFwaCIsCisgICAgImdyZW1saW4iLAorICAgICJ0aW5rZXJwb3AiLAorICAgICJhcGFjaGUtdGlua2VycG9wIiwKKyAgICAiY29ubmVjdGlvbiIsCisgICAgImdsdiIsCisgICAgImRyaXZlciIsCisgICAgImRhdGFiYXNlIiwKKyAgICAiZ3JhcGhkYiIKKyAgXSwKKyAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICJ0eXBlIjogIm1vZHVsZSIsCisgICJtYWluIjogIi4vYnVpbGQvY2pzL2luZGV4LmNqcyIsCisgICJ0eXBlcyI6ICIuL2J1aWxkL2VzbS9pbmRleC5kLnRzIiwKKyAgImV4cG9ydHMiOiB7CisgICAgIi4iOiB7CisgICAgICAiaW1wb3J0IjogIi4vYnVpbGQvZXNtL2luZGV4LmpzIiwKKyAgICAgICJyZXF1aXJlIjogIi4vYnVpbGQvY2pzL2luZGV4LmNqcyIsCisgICAgICAidHlwZXMiOiAiLi9idWlsZC9lc20vaW5kZXguZC50cyIKKyAgICB9LAorICAgICIuL2xhbmd1YWdlIjogeworICAgICAgImltcG9ydCI6ICIuL2J1aWxkL2VzbS9sYW5ndWFnZS9pbmRleC5qcyIsCisgICAgICAidHlwZXMiOiAiLi9idWlsZC9lc20vbGFuZ3VhZ2UvaW5kZXguZC50cyIKKyAgICB9CisgIH0sCisgICJ0eXBlc1ZlcnNpb25zIjogeworICAgICIqIjogeworICAgICAgImxhbmd1YWdlIjogWworICAgICAgICAiLi9idWlsZC9lc20vbGFuZ3VhZ2UvaW5kZXguZC50cyIKKyAgICAgIF0KKyAgICB9CisgIH0sCisgICJmaWxlcyI6IFsKKyAgICAiYnVpbGQiCisgIF0sCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImFudGxyNG5nIjogIjMuMC4xNiIsCisgICAgImJ1ZmZlciI6ICJeNi4wLjMiLAorICAgICJldmVudGVtaXR0ZXIzIjogIl41LjAuMSIsCisgICAgInJlYWRhYmxlLXN0cmVhbSI6ICJeNC41LjIiCisgIH0sCisgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKKyAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMiOiAiXjMuOTY3LjAiLAorICAgICJAc21pdGh5L2hhc2gtbm9kZSI6ICJeNC4yLjEyIiwKKyAgICAiQHNtaXRoeS9zaWduYXR1cmUtdjQiOiAiXjUuMy4xMiIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiQGN1Y3VtYmVyL2N1Y3VtYmVyIjogIn4xMi43LjAiLAorICAgICJAZXNsaW50L2pzIjogIl45LjE2LjAiLAorICAgICJAa25pZ2h0ZWQvZHVlbCI6ICJeNC4wLjIiLAorICAgICJAdHNjb25maWcvbm9kZTE4IjogIl4xOC4yLjIiLAorICAgICJAdHlwZXMvcmVhZGFibGUtc3RyZWFtIjogIl40LjAuMTAiLAorICAgICJhbnRsci1uZyI6ICJeMS4wLjEwIiwKKyAgICAiY2hhaSI6ICJeNi4yLjIiLAorICAgICJjaGFpLXN0cmluZyI6ICJeMi4wLjAiLAorICAgICJjb2xvcnMiOiAiMS40LjAiLAorICAgICJjcm9zcy1lbnYiOiAiXjEwLjEuMCIsCisgICAgImRlZXAtZXFsIjogIl41LjAuMiIsCisgICAgImVzbGludCI6ICJeOS4zNi4wIiwKKyAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMTAuMC4xIiwKKyAgICAiZXNsaW50LXBsdWdpbi1wcmV0dGllciI6ICJeNS4wLjAiLAorICAgICJnbG9iYWxzIjogIl4xNy41LjAiLAorICAgICJtb2NoYSI6ICJeMTEuNy41IiwKKyAgICAicHJldHRpZXIiOiAiXjMuMC4wIiwKKyAgICAidHMtbm9kZSI6ICJeMTAuOS4yIiwKKyAgICAidHlwZWRvYyI6ICJeMC4yOC4xOCIsCisgICAgInR5cGVzY3JpcHQiOiAiXjUuNC4yIgorICB9LAorICAicmVwb3NpdG9yeSI6IHsKKyAgICAidHlwZSI6ICJnaXQiLAorICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AuZ2l0IgorICB9LAorICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAorICAiYnVncyI6IHsKKyAgICAidXJsIjogImh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QIgorICB9LAorICAic2NyaXB0cyI6IHsKKyAgICAiZ2VuZXJhdGUiOiAibWtkaXIgLXAgbGliL2xhbmd1YWdlL2dyYW1tYXIgJiYgYW50bHItbmcgLURsYW5ndWFnZT1UeXBlU2NyaXB0IC12aXNpdG9yIC0tZ2VuZXJhdGUtbGlzdGVuZXIgLS1leGFjdC1vdXRwdXQtZGlyIC1vIGxpYi9sYW5ndWFnZS9ncmFtbWFyIC4uLy4uL2dyZW1saW4tbGFuZ3VhZ2Uvc3JjL21haW4vYW50bHI0L0dyZW1saW4uZzQiLAorICAgICJwcmVidWlsZCI6ICJub2RlIHNjcmlwdHMvcGF0Y2gtYW50bHI0bmcuanMgJiYgbnBtIHJ1biBnZW5lcmF0ZSIsCisgICAgIl9wcmVidWlsZF9ub3RlIjogInBhdGNoLWFudGxyNG5nLmpzIGlzIGEgYnVpbGQtdGltZSBzdG9wLWdhcCBmb3IgYW50bHI0bmcgbWlzc2luZyAuZC5jdHMgQ0pTIHR5cGUgZGVjbGFyYXRpb25zIChhbnRscjRuZyBpc3N1ZXMgIzIzLyMyNikuIGFudGxyNG5nIGlzIHBpbm5lZCB0byBhbiBleGFjdCB2ZXJzaW9uIGluIGRlcGVuZGVuY2llcy4gQmVmb3JlIHVwZ3JhZGluZyBhbnRscjRuZywgdmVyaWZ5IHRoZSBwYXRjaCBzdGlsbCBhcHBsaWVzIG9yIHRoYXQgdXBzdHJlYW0gaGFzIGZpeGVkIHRoZSBpc3N1ZS4iLAorICAgICJidWlsZCI6ICJybSAtcmYgYnVpbGQgJiYgZHVlbCAtLWRpcnMiLAorICAgICJwcmVwYXJlIjogIm5wbSBydW4gZ2VuZXJhdGUgJiYgbnBtIHJ1biBidWlsZCIsCisgICAgInRlc3QiOiAibnBtIHJ1biB1bml0LXRlc3QgJiYgbnBtIHJ1biBpbnRlZ3JhdGlvbi10ZXN0IiwKKyAgICAidW5pdC10ZXN0IjogImNyb3NzLWVudiBUU19OT0RFX1BST0pFQ1Q9J3RzY29uZmlnLnRlc3QuanNvbicgbW9jaGEgJ3Rlc3QvdW5pdC8qKi8qLntqcyx0c30nIiwKKyAgICAiaW50ZWdyYXRpb24tdGVzdCI6ICJucG0gcnVuIGludGVncmF0aW9uLXRlc3QtZ3JhcGhiaW5hcnkiLAorICAgICJpbnRlZ3JhdGlvbi10ZXN0LWdyYXBoYmluYXJ5IjogImNyb3NzLWVudiBUU19OT0RFX1BST0pFQ1Q9J3RzY29uZmlnLnRlc3QuanNvbicgQ0xJRU5UX01JTUVUWVBFPSdhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCcgbW9jaGEgdGVzdC9pbnRlZ3JhdGlvbiAtdCA1MDAwIiwKKyAgICAiVE9ETyI6ICIjIHRlc3Qgb3RoZXIgbWltZSB0eXBlcyBsaWtlIGdyYXBoYmluYXJ5IHN0cmluZ2QiLAorICAgICJmZWF0dXJlcyI6ICJucG0gcnVuIGZlYXR1cmVzLWdyYXBoYmluYXJ5IiwKKyAgICAiZmVhdHVyZXMtZ3JhcGhiaW5hcnkiOiAiY3Jvc3MtZW52IE5PREVfT1BUSU9OUz0nLS1sb2FkZXIgdHMtbm9kZS9lc20nIFRTX05PREVfUFJPSkVDVD0ndHNjb25maWcudGVzdC5qc29uJyBDTElFTlRfTUlNRVRZUEU9J2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wJyBjdWN1bWJlci1qcyAtLXRhZ3MgXCJub3QgQERhdGFCaWdEZWNpbWFsIGFuZCBub3QgQERhdGFCaWdJbnQgYW5kIG5vdCBARGF0YVVVSUQgYW5kIG5vdCBARGF0YUxvbmcgYW5kIG5vdCBAU3RlcFdyaXRlXCIgLS1pbXBvcnQgdGVzdC9jdWN1bWJlciAuLi8uLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy8iLAorICAgICJmZWF0dXJlcy1kb2NrZXIiOiAibnBtIHJ1biBmZWF0dXJlcy1ncmFwaGJpbmFyeS1kb2NrZXIiLAorICAgICJmZWF0dXJlcy1ncmFwaGJpbmFyeS1kb2NrZXIiOiAiY3Jvc3MtZW52IE5PREVfT1BUSU9OUz0nLS1sb2FkZXIgdHMtbm9kZS9lc20nIFRTX05PREVfUFJPSkVDVD0ndHNjb25maWcudGVzdC5qc29uJyBDTElFTlRfTUlNRVRZUEU9J2FwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wJyBjdWN1bWJlci1qcyAtLXRhZ3MgXCJub3QgQERhdGFCaWdEZWNpbWFsIGFuZCBub3QgQERhdGFCaWdJbnQgYW5kIG5vdCBARGF0YVVVSUQgYW5kIG5vdCBARGF0YUxvbmcgYW5kIG5vdCBAU3RlcFdyaXRlXCIgLS1pbXBvcnQgdGVzdC9jdWN1bWJlciAuLi9ncmVtbGluLXRlc3QvIiwKKyAgICAibGludCI6ICJlc2xpbnQgLS1leHQgLmpzIC4iLAorICAgICJkb2MiOiAidHlwZWRvYyAtLW91dCBkb2MgLS1yZWFkbWUgUkVBRE1FLm1kIC0tZW50cnlQb2ludFN0cmF0ZWd5IGV4cGFuZCAtLWVudHJ5UG9pbnRzICdsaWIvKiovKi50cycgLS10c2NvbmZpZyB0c2NvbmZpZy5qc29uIC0tZXhjbHVkZSAnbGliL2xhbmd1YWdlL2dyYW1tYXIvKionIgorICB9LAorICAiZW5naW5lcyI6IHsKKyAgICAibm9kZSI6ICI+PTIyIgorICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9wb20ueG1sIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWYxNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvcG9tLnhtbApAQCAtMCwwICsxLDM4MiBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWpzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1qYXZhc2NyaXB0PC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogR3JlbWxpbiBKYXZhc2NyaXB0PC9uYW1lPgorICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICA8bWF2ZW4udGVzdC5za2lwPmZhbHNlPC9tYXZlbi50ZXN0LnNraXA+CisgICAgICAgIDxza2lwVGVzdHM+JHttYXZlbi50ZXN0LnNraXB9PC9za2lwVGVzdHM+CisgICAgICAgIDwhLS0gSG9zdCBVSUQvR0lEIHBhc3NlZCB0byBEb2NrZXIgc28gY29udGFpbmVyIHdyaXRlcyBmaWxlcyBhcyB0aGUgY3VycmVudCB1c2VyLgorICAgICAgICAgICAgIE92ZXJyaWRlIHdpdGggLURob3N0LnVpZD0kKGlkIC11KSAtRGhvc3QuZ2lkPSQoaWQgLWcpIGlmIHlvdXIgVUlEICE9IDEwMDAuIC0tPgorICAgICAgICA8aG9zdC51aWQ+MTAwMDwvaG9zdC51aWQ+CisgICAgICAgIDxob3N0LmdpZD4xMDAwPC9ob3N0LmdpZD4KKyAgICA8L3Byb3BlcnRpZXM+CisgICAgPGJ1aWxkPgorICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0PC9kaXJlY3Rvcnk+CisgICAgICAgIDxmaW5hbE5hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9LSR7cHJvamVjdC52ZXJzaW9ufTwvZmluYWxOYW1lPgorICAgICAgICA8cGx1Z2luTWFuYWdlbWVudD4KKyAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuZWlyc2xldHQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmZyb250ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xNS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPC9wbHVnaW5zPgorICAgICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8IS0tCisgICAgICAgICAgICAgICAgVXNlIGdtYXZlbnBsdXMtcGx1Z2luIHRvOgorICAgICAgICAgICAgICAgICAgICAtIEdlbmVyYXRlIGpzIHNvdXJjZXMKKyAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuZ21hdmVucGx1czwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nbWF2ZW5wbHVzLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1zZXJ2ZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtaW88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWlvPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLmlvLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisJCQkJCTxkZXBlbmRlbmN5PgorCQkJCQkJPGdyb3VwSWQ+Y2gucW9zLmxvZ2JhY2s8L2dyb3VwSWQ+CisJCQkJCQk8YXJ0aWZhY3RJZD5sb2diYWNrLWNsYXNzaWM8L2FydGlmYWN0SWQ+CisJCQkJCQk8dmVyc2lvbj4ke2xvZ2JhY2sudmVyc2lvbn08L3ZlcnNpb24+CisJCQkJCQk8c2NvcGU+cnVudGltZTwvc2NvcGU+CisJCQkJCTwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eS1hbGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLXJhZGlzaC1zdXBwb3J0PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5leGVjdXRlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5wcm9qZWN0QmFzZURpcjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYmFzZWRpcn0vLi4vLi4vPC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+JHtwcm9qZWN0LmJhc2VkaXJ9L3NjcmlwdHMvZ3Jvb3Z5L2dlbmVyYXRlLmdyb292eTwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+dXBkYXRlLXZlcnNpb248L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmV4ZWN1dGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgbWF2ZW5WZXJzaW9uID0gIiR7cHJvamVjdC52ZXJzaW9ufSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiB2ZXJzaW9uRm9ySnMgPSBtYXZlblZlcnNpb24ucmVwbGFjZSgiLVNOQVBTSE9UIiwgIi1hbHBoYTEiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHBsYXRmb3JtQWdub3N0aWNCYXNlRGlyUGF0aCA9IHByb2plY3QuYmFzZWRpci5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCJcXCIsICIvIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBmaWxlID0gbmV3IEZpbGUocGxhdGZvcm1BZ25vc3RpY0Jhc2VEaXJQYXRoICsgIi9wYWNrYWdlLmpzb24iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlLmdldFRleHQoIlVURi04IikucmVwbGFjZUZpcnN0KC8idmVyc2lvbiI6ICIoLiopIiwvLCAiXCJ2ZXJzaW9uXCI6IFwiIiArIHZlcnNpb25Gb3JKcyArICJcIiwiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHRzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jbGVhbjwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXRzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5idWlsZDwvZGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgICAgICAgICAgICA8L2ZpbGVzZXRzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmZyb250ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5pbnN0YWxsIG5vZGUgYW5kIG5wbSBhdCB3b3Jrc3BhY2Ugcm9vdDwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmFsaWRhdGU8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmluc3RhbGwtbm9kZS1hbmQtbnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3b3JraW5nRGlyZWN0b3J5PiR7cHJvamVjdC5iYXNlZGlyfS8uLjwvd29ya2luZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIHdvcmtzcGFjZSBpbnN0YWxsPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+Y2k8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT4ke3Byb2plY3QuYmFzZWRpcn0vLi48L3dvcmtpbmdEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmluc3RhbGwgbm9kZSBhbmQgbnBtPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+aW5zdGFsbC1ub2RlLWFuZC1ucG08L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ucG0gbGludDwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmFsaWRhdGU8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD4ke3NraXBUZXN0c308L3NraXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50cz5ydW4gbGludDwvYXJndW1lbnRzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYWlsT25FcnJvcj50cnVlPC9mYWlsT25FcnJvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIGpzZG9jPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ucG08L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPnJ1biBkb2M8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT4uPC93b3JraW5nRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICA8bm9kZVZlcnNpb24+JHtydW50aW1lLm5vZGUudmVyc2lvbn08L25vZGVWZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8bnBtVmVyc2lvbj4ke3J1bnRpbWUubnBtLnZlcnNpb259PC9ucG1WZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgdGhlcmUgaXMgbm8gcG9pbnQgdG8gYnVpbGRpbmcvZGVwbG95aW5nIHRoZSBqdm0gc3R1ZmYgLSB0aGVyZSBpcyBubyBqYXZhIHNvdXJjZSByZWFsbHkgLSBqdXN0IHBvbXMKKyAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c2tpcFNvdXJjZT50cnVlPC9za2lwU291cmNlPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4taW5zdGFsbC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBsb3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUubWF2ZW4tcmVwbGFjZXItcGx1Z2luPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnJlcGxhY2VyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZT5saWIvdXRpbHMudHM8L2ZpbGU+CisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlbWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZW1lbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRva2VuPmdyZW1saW5WZXJzaW9uID0gJy4qJzwvdG9rZW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPmdyZW1saW5WZXJzaW9uID0gJyR7cHJvamVjdC52ZXJzaW9ufSc8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBsYWNlbWVudD4KKyAgICAgICAgICAgICAgICAgICAgPC9yZXBsYWNlbWVudHM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorICAgIDxwcm9maWxlcz4KKyAgICAgICAgPCEtLSBUZXN0IGdyZW1saW4tamF2YXNjcmlwdCBpbiBEb2NrZXIgLS0+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmdsdi1qczwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxidWlsZD4KKyAgICAgICAgICAgICAgICA8ZmluYWxOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfS0ke3Byb2plY3QudmVyc2lvbn08L2ZpbmFsTmFtZT4KKyAgICAgICAgICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmV4ZWMtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjUuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ydW4tdGVzdHM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+aW50ZWdyYXRpb24tdGVzdDwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmV4ZWM8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+JHtza2lwVGVzdHN9PC9za2lwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudmlyb25tZW50VmFyaWFibGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxHUkVNTElOX1NFUlZFUj4ke3Byb2plY3QudmVyc2lvbn08L0dSRU1MSU5fU0VSVkVSPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBQlNfUFJPSkVDVF9IT01FPiR7cHJvamVjdC5iYXNlZGlyfS8uLi8uLi88L0FCU19QUk9KRUNUX0hPTUU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBzZXR0aW5nIHRoaXMgZW52IHZhcmlhYmxlIGlzIG5lZWRlZCB0byBiZSBjcm9zcy1wbGF0Zm9ybSBjb21wYXRpYmxlIC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxIT01FPiR7dXNlci5ob21lfTwvSE9NRT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Tk9ERV9WRVJTSU9OPiR7bm9kZS50ZXN0LnZlcnNpb259PC9OT0RFX1ZFUlNJT04+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBwYXNzIGhvc3QgVUlEL0dJRCBzbyBEb2NrZXIgd3JpdGVzIGZpbGVzIGFzIHRoZSBjdXJyZW50IHVzZXIgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEhPU1RfVUlEPiR7aG9zdC51aWR9PC9IT1NUX1VJRD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SE9TVF9HSUQ+JHtob3N0LmdpZH08L0hPU1RfR0lEPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbnZpcm9ubWVudFZhcmlhYmxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRhYmxlPmRvY2tlcjwvZXhlY3V0YWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50PmNvbXBvc2U8L2FyZ3VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD51cDwvYXJndW1lbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50Pi0tYnVpbGQ8L2FyZ3VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD4tLWV4aXQtY29kZS1mcm9tPC9hcmd1bWVudD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+Z3JlbWxpbi1qcy1pbnRlZ3JhdGlvbi10ZXN0czwvYXJndW1lbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3b3JraW5nRGlyZWN0b3J5Pi48L3dvcmtpbmdEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+c2h1dGRvd24tY29udGFpbmVyPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmludGVncmF0aW9uLXRlc3Q8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5leGVjPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPiR7c2tpcFRlc3RzfTwvc2tpcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZG9uJ3QgbmVlZCB0byBzZXQgZW52IHZhcmlhYmxlcyBmb3IgY29udGFpbmVyIHRlYXIgZG93biAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRhYmxlPmRvY2tlcjwvZXhlY3V0YWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50PmNvbXBvc2U8L2FyZ3VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD5kb3duPC9hcmd1bWVudD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJndW1lbnRzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdvcmtpbmdEaXJlY3Rvcnk+Ljwvd29ya2luZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5yZW1vdmUtZGFuZ2xpbmctaW1hZ2VzPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmludGVncmF0aW9uLXRlc3Q8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5leGVjPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPiR7c2tpcFRlc3RzfTwvc2tpcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRhYmxlPmRvY2tlcjwvZXhlY3V0YWJsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50PmltYWdlPC9hcmd1bWVudD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+cHJ1bmU8L2FyZ3VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudD4tLWZpbHRlcjwvYXJndW1lbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50PmxhYmVsPW1haW50YWluZXI9ZGV2QHRpbmtlcnBvcC5hcGFjaGUub3JnPC9hcmd1bWVudD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnQ+LWY8L2FyZ3VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPC9wbHVnaW5zPgorICAgICAgICAgICAgPC9idWlsZD4KKyAgICAgICAgPC9wcm9maWxlPgorICAgICAgICA8IS0tCisgICAgICAgIFByb3ZpZGVzIGEgd2F5IHRvIGRlcGxveSB0aGUgZ3JlbWxpbi1qYXZhc2NyaXB0IEdMViB0byBucG0uIFRoaXMgY2Fubm90IGJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG1hdmVuIGV4ZWN1dGlvbgorICAgICAgICBiZWNhdXNlIG5wbSBkb2VzIG5vdCBoYXZlIGEgc3RhZ2luZyBlbnZpcm9ubWVudCBsaWtlIHNvbmF0eXBlIGZvciByZWxlYXNlcy4gQXMgc29vbiBhcyB0aGUgcmVsZWFzZSBpcworICAgICAgICBwdWJsaXNoZWQgaXQgaXMgcHVibGljLiBJbiBvdXIgcmVsZWFzZSB3b3JrZmxvdywgZGVwbG95IG9jY3VycyBwcmlvciB0byB2b3RlIG9uIHRoZSByZWxlYXNlIGFuZCB3ZSBjYW4ndAorICAgICAgICBtYWtlIHRoaXMgc3R1ZmYgcHVibGljIHVudGlsIHRoZSB2b3RlIGlzIG92ZXIuCisgICAgICAgIC0tPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5nbHYtamF2YXNjcmlwdC1kZXBsb3k8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD5mYWxzZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPG5hbWU+bnBtPC9uYW1lPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICA8L2FjdGl2YXRpb24+CisgICAgICAgICAgICA8YnVpbGQ+CisgICAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBwdWJsaXNoPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmRlcGxveTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPnB1Ymxpc2g8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBnaXZlbiBob3cgdGhlIDxjb25maWd1cmF0aW9uPiBpcyBzcGVjaWZpZWQgaW4gdGhlIG1haW4gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIGZpbmUgdG8ganVzdCBhbHdheXMgZGVwbG95IGJlY2F1c2UgdGhpcyA8cHJvZmlsZT4gbmVlZHMgdG8gYmUgbWFudWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQgYW5kIHRoYXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGdpdmVuIG91ciBkZXBsb3ltZW50IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdvcmtpbmdEaXJlY3Rvcnk+Ljwvd29ya2luZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9kZVZlcnNpb24+JHtydW50aW1lLm5vZGUudmVyc2lvbn08L25vZGVWZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxucG1WZXJzaW9uPiR7cnVudGltZS5ucG0udmVyc2lvbn08L25wbVZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICAgIDwvYnVpbGQ+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3NjcmlwdHMvZ3Jvb3Z5L2dlbmVyYXRlLmdyb292eSBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3NjcmlwdHMvZ3Jvb3Z5L2dlbmVyYXRlLmdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODk3MDZhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvc2NyaXB0cy9ncm9vdnkvZ2VuZXJhdGUuZ3Jvb3Z5CkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yLkdyZW1saW5UcmFuc2xhdG9yCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yLlRyYW5zbGF0b3IKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmNvcnB1cy5GZWF0dXJlUmVhZGVyCisKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzCisKKy8vIGZpbGUgaXMgb3ZlcndyaXR0ZW4gb24gZWFjaCBnZW5lcmF0aW9uCityYWRpc2hHcmVtbGluRmlsZSA9IG5ldyBGaWxlKCIke3Byb2plY3RCYXNlRGlyfS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2dyZW1saW4uanMiKQorCisvLyBhc3N1bWVzIGdsb2JhbGx5IHVuaXF1ZSBzY2VuYXJpbyBuYW1lcyBmb3Iga2V5cyB3aXRoIGxpc3Qgb2YgR3JlbWxpbiB0cmF2ZXJzYWxzIGFzIHRoZXkgYXBwZWFyCitncmVtbGlucyA9IEZlYXR1cmVSZWFkZXIucGFyc2VHcm91cGVkKFBhdGhzLmdldCgiJHtwcm9qZWN0QmFzZURpcn0iLCAiZ3JlbWxpbi10ZXN0IiwgInNyYyIsICJtYWluIiwgInJlc291cmNlcyIsICJvcmciLCAiYXBhY2hlIiwgInRpbmtlcnBvcCIsICJncmVtbGluIiwgInRlc3QiLCAiZmVhdHVyZXMiKS50b1N0cmluZygpKQorCityYWRpc2hHcmVtbGluRmlsZS53aXRoV3JpdGVyKCdVVEYtOCcpIHsgV3JpdGVyIHdyaXRlciAtPgorICAgIHdyaXRlci53cml0ZUxpbmUoJy8qXG4nICsKKyAgICAgICAgICAgICcqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmVcbicgKworICAgICAgICAgICAgJyogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlXG4nICsKKyAgICAgICAgICAgICcqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uXG4nICsKKyAgICAgICAgICAgICcqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGVcbicgKworICAgICAgICAgICAgJyogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZVxuJyArCisgICAgICAgICAgICAnKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4nICsKKyAgICAgICAgICAgICcqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbicgKworICAgICAgICAgICAgJypcbicgKworICAgICAgICAgICAgJyogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbicgKworICAgICAgICAgICAgJypcbicgKworICAgICAgICAgICAgJyogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuJyArCisgICAgICAgICAgICAnKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuJyArCisgICAgICAgICAgICAnKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcbicgKworICAgICAgICAgICAgJyogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4nICsKKyAgICAgICAgICAgICcqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnNcbicgKworICAgICAgICAgICAgJyogdW5kZXIgdGhlIExpY2Vuc2UuXG4nICsKKyAgICAgICAgICAgICcqL1xuJykKKworICAgIHdyaXRlci53cml0ZUxpbmUoIlxuXG4vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIikKKyAgICB3cml0ZXIud3JpdGVMaW5lKCIvLyogRG8gTk9UIGVkaXQgdGhpcyBmaWxlIGRpcmVjdGx5IC0gZ2VuZXJhdGVkIGJ5IGJ1aWxkL2dlbmVyYXRlLmdyb292eSIpCisgICAgd3JpdGVyLndyaXRlTGluZSgiLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKQorCisgICAgd3JpdGVyLndyaXRlTGluZSgKKyAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCAqIGFzIGdyYXBoVHJhdmVyc2FsTW9kdWxlIGZyb20gXCcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanNcJztcbicgKworICAgICAgICAgICAgICAgICAgICAnaW1wb3J0ICogYXMgdHJhdmVyc2FsTW9kdWxlIGZyb20gXCcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanNcJztcbicgKworICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcywgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LCBPcHRpb25zU3RyYXRlZ3ksIFBhcnRpdGlvblN0cmF0ZWd5LCBcbicgKworICAgICAgICAgICAgICAgICAgICAnICAgICAgICBSZWFkT25seVN0cmF0ZWd5LCBHcmFwaEZpbHRlclN0cmF0ZWd5LCBTZWVkU3RyYXRlZ3ksIFN1YmdyYXBoU3RyYXRlZ3ksIFByb2R1Y3RpdmVCeVN0cmF0ZWd5LCBcbicgKworICAgICAgICAgICAgICAgICAgICAnICAgICAgICBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5LCBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5LCBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSwgXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSwgTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSwgUHJvZmlsZVN0cmF0ZWd5LCBJbmxpbmVGaWx0ZXJTdHJhdGVneSwgXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSwgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LCBFbGVtZW50SWRTdHJhdGVneSwgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSwgXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3ksIENvdW50U3RyYXRlZ3ksIENvbm5lY3RpdmVTdHJhdGVneSwgQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSwgXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3ksIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LCBSZXBlYXRVbnJvbGxTdHJhdGVneSwgXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICAgICAgUGF0aFJldHJhY3Rpb25TdHJhdGVneSwgUGF0aFByb2Nlc3NvclN0cmF0ZWd5LCBPcmRlckxpbWl0U3RyYXRlZ3ksIE1hdGNoUHJlZGljYXRlU3RyYXRlZ3ksIFxuJyArCisgICAgICAgICAgICAgICAgICAgICcgICAgICAgIExhenlCYXJyaWVyU3RyYXRlZ3ksIEVhcmx5TGltaXRTdHJhdGVneSwgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3ksIElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5LCBcbicgKworICAgICAgICAgICAgICAgICAgICAnICAgICAgICBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5IH0gZnJvbSBcJy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneS5qc1wnO1xuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBfXyA9IGdyYXBoVHJhdmVyc2FsTW9kdWxlLnN0YXRpY3M7XG4nICsKKyAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IEJhcnJpZXIgPSB0cmF2ZXJzYWxNb2R1bGUuYmFycmllclxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBDYXJkaW5hbGl0eSA9IHRyYXZlcnNhbE1vZHVsZS5jYXJkaW5hbGl0eVxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBDYXJkaW5hbGl0eVZhbHVlID0gZ3JhcGhUcmF2ZXJzYWxNb2R1bGUuQ2FyZGluYWxpdHlWYWx1ZTtcbicgKworICAgICAgICAgICAgICAgICAgICAnY29uc3QgQ29sdW1uID0gdHJhdmVyc2FsTW9kdWxlLmNvbHVtblxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBEaXJlY3Rpb24gPSB7XG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICBCT1RIOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLmJvdGgsXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICBJTjogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5pbixcbicgKworICAgICAgICAgICAgICAgICAgICAnICAgIE9VVDogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5vdXQsXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICBmcm9tXzogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5vdXQsXG4nICsKKyAgICAgICAgICAgICAgICAgICAgJyAgICB0bzogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5pblxuJyArCisgICAgICAgICAgICAgICAgICAgICd9O1xuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBJTyA9IHRyYXZlcnNhbE1vZHVsZS5JTztcbicgKworICAgICAgICAgICAgICAgICAgICAnY29uc3QgRFQgPSB0cmF2ZXJzYWxNb2R1bGUuZHQ7XG4nICsKKyAgICAgICAgICAgICAgICAgICAgJ2NvbnN0IEdUeXBlID0gdHJhdmVyc2FsTW9kdWxlLmdUeXBlO1xuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBNZXJnZSA9IHRyYXZlcnNhbE1vZHVsZS5tZXJnZTtcbicgKworICAgICAgICAgICAgICAgICAgICAnY29uc3QgUCA9IHRyYXZlcnNhbE1vZHVsZS5QO1xuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBQaWNrID0gdHJhdmVyc2FsTW9kdWxlLnBpY2tcbicgKworICAgICAgICAgICAgICAgICAgICAnY29uc3QgUG9wID0gdHJhdmVyc2FsTW9kdWxlLnBvcFxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBPcmRlciA9IHRyYXZlcnNhbE1vZHVsZS5vcmRlclxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBPcGVyYXRvciA9IHRyYXZlcnNhbE1vZHVsZS5vcGVyYXRvclxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBTY29wZSA9IHRyYXZlcnNhbE1vZHVsZS5zY29wZVxuJyArCisgICAgICAgICAgICAgICAgICAgICdjb25zdCBUID0gdHJhdmVyc2FsTW9kdWxlLnRcbicgKworICAgICAgICAgICAgICAgICAgICAnY29uc3QgVGV4dFAgPSB0cmF2ZXJzYWxNb2R1bGUuVGV4dFBcbicgKworICAgICAgICAgICAgICAgICAgICAnY29uc3QgV2l0aE9wdGlvbnMgPSB0cmF2ZXJzYWxNb2R1bGUud2l0aE9wdGlvbnNcbicKKyAgICApCisKKyAgICAvLyBzb21lIHRyYXZlcnNhbHMgbWF5IHJlcXVpcmUgYSBzdGF0aWMgdHJhbnNsYXRpb24gaWYgdGhlIHRyYW5zbGF0b3IgY2FuJ3QgaGFuZGxlIHRoZW0gZm9yIHNvbWUgcmVhc29uCisgICAgZGVmIHN0YXRpY1RyYW5zbGF0ZSA9IFs6XQorICAgIC8vIFNBTVBMRTogZ19pbmplY3RYbnVsbF9udWxsWDogIiAgICBnX2luamVjdFhudWxsX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsLG51bGwpIH1dLCAiLAorCisgICAgd3JpdGVyLndyaXRlTGluZSgnY29uc3QgZ3JlbWxpbnMgPSB7JykKKyAgICBncmVtbGlucy5lYWNoIHsgayx2IC0+CisgICAgICAgIGlmIChzdGF0aWNUcmFuc2xhdGUuY29udGFpbnNLZXkoaykpIHsKKyAgICAgICAgICAgIHdyaXRlci53cml0ZUxpbmUoc3RhdGljVHJhbnNsYXRlW2tdKQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd3JpdGVyLndyaXRlKCIgICAgIikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShrKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlKCI6IFsiKQorICAgICAgICAgICAgZGVmIGNvbGxlY3RlZCA9IHYuY29sbGVjdCB7IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShpdCwgVHJhbnNsYXRvci5KQVZBU0NSSVBUKSB9CisgICAgICAgICAgICBkZWYgdW5pcXVlQmluZGluZ3MgPSBjb2xsZWN0ZWQuY29sbGVjdCB7IGl0LmdldFBhcmFtZXRlcnMoKSB9LmZsYXR0ZW4oKS51bmlxdWUoKQorICAgICAgICAgICAgZGVmIGdyZW1saW5JdHR5ID0gY29sbGVjdGVkLml0ZXJhdG9yKCkKKyAgICAgICAgICAgIHdoaWxlIChncmVtbGluSXR0eS5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBkZWYgdCA9IGdyZW1saW5JdHR5Lm5leHQoKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiZnVuY3Rpb24oe2ciKQorICAgICAgICAgICAgICAgIGlmICghdW5pcXVlQmluZGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSgiLCAiKQorICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUodW5pcXVlQmluZGluZ3Muam9pbigiLCAiKSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKCJ9KSB7IHJldHVybiAiKQorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSh0LmdldFRyYW5zbGF0ZWQoKSkKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoIiB9IikKKyAgICAgICAgICAgICAgICBpZiAoZ3JlbWxpbkl0dHkuaGFzTmV4dCgpKSB3cml0ZXIud3JpdGUoJywgJykKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci53cml0ZUxpbmUoJ10sICcpCisgICAgICAgIH0KKyAgICB9CisgICAgd3JpdGVyLndyaXRlTGluZSgnfVxuJykKKworICAgIHdyaXRlci53cml0ZUxpbmUoJ2V4cG9ydCBjb25zdCBncmVtbGluID0gZ3JlbWxpbnMnKQorfQorCisKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3NjcmlwdHMvcGF0Y2gtYW50bHI0bmcuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9zY3JpcHRzL3BhdGNoLWFudGxyNG5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MzBlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9zY3JpcHRzL3BhdGNoLWFudGxyNG5nLmpzCkBAIC0wLDAgKzEsODkgQEAKKyMhL3Vzci9iaW4vZW52IG5vZGUKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogUGF0Y2hlcyBhbnRscjRuZyB0byBhZGQgQ0pTIFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZmlsZXMuCisgKgorICogYW50bHI0bmcgc2hpcHMgYSBDSlMgYnVuZGxlIChkaXN0L2luZGV4LmNqcykgYnV0IGxhY2tzIHRoZSBhY2NvbXBhbnlpbmcKKyAqIGRpc3QvaW5kZXguZC5jdHMgdHlwZSBkZWNsYXJhdGlvbnMgdGhhdCBUeXBlU2NyaXB0J3MgTm9kZU5leHQgbW9kdWxlCisgKiByZXNvbHV0aW9uIHJlcXVpcmVzIHdoZW4gY29tcGlsaW5nIENKUyBvdXRwdXQuIFRoaXMgc2NyaXB0IGNyZWF0ZXMgdGhlCisgKiBtaXNzaW5nIC5kLmN0cyBmaWxlIGFuZCB1cGRhdGVzIHRoZSBwYWNrYWdlIGV4cG9ydHMgbWFwIHNvIFR5cGVTY3JpcHQKKyAqIGNvcnJlY3RseSByZXNvbHZlcyB0eXBlcyBpbiBib3RoIEVTTSBhbmQgQ0pTIGNvbnRleHRzLgorICoKKyAqIFRoaXMgaXMgYSBzdG9wLWdhcCB1bnRpbCBhbnRscjRuZyBzaGlwcyAuZC5jdHMgZmlsZXMgbmF0aXZlbHkuCisgKiBSZWxldmFudCBpc3N1ZXMvZGlzY3Vzc2lvbnM6CisgKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtlLWxpc2Noa2UvYW50bHI0bmcvaXNzdWVzLzIzIChDSlMvRVNNIGR1YWwgbW9kdWxlIHN1cHBvcnQpCisgKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtlLWxpc2Noa2UvYW50bHI0bmcvaXNzdWVzLzI2IChUeXBlU2NyaXB0IHJlc29sdXRpb24gaXNzdWVzKQorICogLSBodHRwczovL2dpdGh1Yi5jb20vbWlrZS1saXNjaGtlL2FudGxyNG5nL2Rpc2N1c3Npb25zLzIxIChEaXNjdXNzaW9uIG9uIHBhY2thZ2Ugc3RydWN0dXJlKQorICovCisKK2ltcG9ydCB7IGNvcHlGaWxlU3luYywgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7CitpbXBvcnQgeyByZXNvbHZlLCBkaXJuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJzsKK2ltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7CisKKy8vIFVzZSBjcmVhdGVSZXF1aXJlIHNvIE5vZGUgcmVzb2x2ZXMgYW50bHI0bmcgdGhyb3VnaCB0aGUgbm9ybWFsIG1vZHVsZQorLy8gcmVzb2x1dGlvbiBhbGdvcml0aG0sIHdoaWNoIGhhbmRsZXMgbnBtIHdvcmtzcGFjZSBob2lzdGluZyBjb3JyZWN0bHkuCitjb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpOworCitsZXQgcGtnRGlyOwordHJ5IHsKKyAgLy8gUmVzb2x2ZSBhbnRscjRuZydzIG1haW4gZW50cnksIHRoZW4gd2FsayB1cCB0byB0aGUgcGFja2FnZSByb290LgorICBwa2dEaXIgPSByZXNvbHZlKGRpcm5hbWUocmVxdWlyZS5yZXNvbHZlKCdhbnRscjRuZycpKSwgJy4uJyk7Cit9IGNhdGNoIHsKKyAgY29uc29sZS53YXJuKCdcbltwYXRjaC1hbnRscjRuZ10gV0FSTklORzogYW50bHI0bmcgbm90IGZvdW5kLiBUeXBlU2NyaXB0IENKUyB0eXBlIHJlc29sdXRpb24gbWF5IGJlIGJyb2tlbi5cbicpOworICBwcm9jZXNzLmV4aXQoMCk7IC8vIG5vbi1mYXRhbDogbGV0IHRoZSBidWlsZCBzdXJmYWNlIGl0cyBvd24gZXJyb3JzCit9CisKK2NvbnN0IGRpc3REaXIgPSByZXNvbHZlKHBrZ0RpciwgJ2Rpc3QnKTsKK2NvbnN0IGR0cyA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmQudHMnKTsKK2NvbnN0IGNqcyA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmNqcycpOworY29uc3QgbWpzID0gcmVzb2x2ZShkaXN0RGlyLCAnaW5kZXgubWpzJyk7Citjb25zdCBwa2dQYXRoID0gcmVzb2x2ZShwa2dEaXIsICdwYWNrYWdlLmpzb24nKTsKKworLy8gVmVyaWZ5IGV4cGVjdGVkIGZpbGVzIGV4aXN0IGJlZm9yZSBwYXRjaGluZyDigJQgbG91ZCBmYWlsdXJlIGlmIGFudGxyNG5nIHJlc3RydWN0dXJlZCBpdHMgZGlzdC8KK2NvbnN0IHJlcXVpcmVkID0gW2R0cywgY2pzLCBtanMsIHBrZ1BhdGhdOworY29uc3QgbWlzc2luZyA9IHJlcXVpcmVkLmZpbHRlcigoZikgPT4gIWV4aXN0c1N5bmMoZikpOworaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkgeworICBjb25zb2xlLmVycm9yKAorICAgICdcbltwYXRjaC1hbnRscjRuZ10gRVJST1I6IGFudGxyNG5nIGRpc3QgbGF5b3V0IGhhcyBjaGFuZ2VkIOKAlCBwYXRjaCBjYW5ub3QgYmUgYXBwbGllZC5cbicgKworICAgICAgJ01pc3NpbmcgZmlsZXM6XG4nICsKKyAgICAgIG1pc3NpbmcubWFwKChmKSA9PiAnICAnICsgZikuam9pbignXG4nKSArCisgICAgICAnXG4nICsKKyAgICAgICdDaGVjayB3aGV0aGVyIGFudGxyNG5nIGhhcyBmaXhlZCBDSlMgLmQuY3RzIHN1cHBvcnQgKGlzc3VlcyAjMjMvIzI2KSBhbmQgdXBkYXRlIG9yIHJlbW92ZSB0aGlzIHNjcmlwdC5cbicsCisgICk7CisgIHByb2Nlc3MuZXhpdCgxKTsKK30KKworLy8gQ29weSBpbmRleC5kLnRzIOKGkiBpbmRleC5kLmN0cworY29uc3QgZGN0cyA9IHJlc29sdmUoZGlzdERpciwgJ2luZGV4LmQuY3RzJyk7Citjb3B5RmlsZVN5bmMoZHRzLCBkY3RzKTsKKworLy8gVXBkYXRlIGV4cG9ydHMgbWFwIHRvIGluY2x1ZGUgInR5cGVzIiBpbiB0aGUgInJlcXVpcmUiIGNvbmRpdGlvbi4KKy8vIE5PVEU6IHRoaXMgb3ZlcndyaXRlcyBvbmx5IHRoZSBrZXlzIHdlIGtub3cgYWJvdXQgZnJvbSBhbnRscjRuZyAzLjAuMTYuCisvLyBJZiBhbnRscjRuZyBhZGRzIG5ldyBleHBvcnQgY29uZGl0aW9ucyBpbiBhIGZ1dHVyZSB2ZXJzaW9uLCByZXZpZXcgdGhpcyBzY3JpcHQuCitjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpKTsKK3BrZy5leHBvcnRzID0geworICB0eXBlczogJy4vZGlzdC9pbmRleC5kLnRzJywKKyAgcmVxdWlyZTogeyB0eXBlczogJy4vZGlzdC9pbmRleC5kLmN0cycsIGRlZmF1bHQ6ICcuL2Rpc3QvaW5kZXguY2pzJyB9LAorICBpbXBvcnQ6IHsgdHlwZXM6ICcuL2Rpc3QvaW5kZXguZC50cycsIGRlZmF1bHQ6ICcuL2Rpc3QvaW5kZXgubWpzJyB9LAorfTsKK3dyaXRlRmlsZVN5bmMocGtnUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSArICdcbicpOworCitjb25zb2xlLmxvZygnW3BhdGNoLWFudGxyNG5nXSBwYXRjaGVkOiBhZGRlZCBkaXN0L2luZGV4LmQuY3RzIGFuZCB1cGRhdGVkIGV4cG9ydHMgbWFwJyk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2VsZW1lbnQtY29tcGFyaXNvbi5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZWxlbWVudC1jb21wYXJpc29uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhODc1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2VsZW1lbnQtY29tcGFyaXNvbi5qcwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiB0aGUgQ2hhaSBBc3NlcnRpb24gTGlicmFyeQorICogYXQgaHR0cHM6Ly93d3cuY2hhaWpzLmNvbS8sIHdoaWNoIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KKyAqIFRoZSBmdW5jdGlvbnMgZGVlcE1lbWJlcnNCeUlkLCBmbGFnLCBhbmQgaXNTdWJzZXRPZiBhcmUgYWRhcHRlZCBmcm9tCisgKiBDaGFpJ3Mgc291cmNlIGNvZGUuCisgKiBTZWUgbGljZW5zZXMvY2hhaSBmb3IgZnVsbCBsaWNlbnNlLgorICovCisKK2ltcG9ydCB7IEFzc2VydGlvbiB9IGZyb20gJ2NoYWknOworaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxbCc7CitpbXBvcnQgeyBFZGdlLCBWZXJ0ZXgsIFZlcnRleFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaC5qcyc7CisKK2Z1bmN0aW9uIGlzRWxlbWVudChvYmopIHsKKyAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRWRnZSB8fCBvYmogaW5zdGFuY2VvZiBWZXJ0ZXggfHwgb2JqIGluc3RhbmNlb2YgVmVydGV4UHJvcGVydHk7Cit9CisKK2V4cG9ydCBjb25zdCBvcHQgPSB7Y29tcGFyYXRvcjogY29tcGFyZUVsZW1lbnRzfTsKKworZnVuY3Rpb24gaXNTdWJzZXRPZihzdWJzZXQsIHN1cGVyc2V0LCBjbXAsIGNvbnRhaW5zLCBvcmRlcmVkKSB7CisgICAgaWYgKCFjb250YWlucykgeworICAgICAgICBpZiAoc3Vic2V0Lmxlbmd0aCAhPT0gc3VwZXJzZXQubGVuZ3RoKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHN1cGVyc2V0ID0gc3VwZXJzZXQuc2xpY2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vic2V0LmV2ZXJ5KGZ1bmN0aW9uKGVsZW0sIGlkeCkgeworICAgICAgICBpZiAob3JkZXJlZCkgcmV0dXJuIGNtcCA/IGNtcChlbGVtLCBzdXBlcnNldFtpZHhdLCBvcHQpIDogZWxlbSA9PT0gc3VwZXJzZXRbaWR4XTsKKworICAgICAgICBpZiAoIWNtcCkgeworICAgICAgICAgICAgdmFyIG1hdGNoSWR4ID0gc3VwZXJzZXQuaW5kZXhPZihlbGVtKTsKKyAgICAgICAgICAgIGlmIChtYXRjaElkeCA9PT0gLTEpIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIG1hdGNoIGZyb20gc3VwZXJzZXQgc28gbm90IGNvdW50ZWQgdHdpY2UgaWYgZHVwbGljYXRlIGluIHN1YnNldC4KKyAgICAgICAgICAgIGlmICghY29udGFpbnMpIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzdXBlcnNldC5zb21lKGZ1bmN0aW9uKGVsZW0yLCBtYXRjaElkeCkgeworICAgICAgICAgICAgaWYgKCFjbXAoZWxlbSwgZWxlbTIsIG9wdCkpIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIG1hdGNoIGZyb20gc3VwZXJzZXQgc28gbm90IGNvdW50ZWQgdHdpY2UgaWYgZHVwbGljYXRlIGluIHN1YnNldC4KKyAgICAgICAgICAgIGlmICghY29udGFpbnMpIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGZsYWcob2JqLCBrZXksIHZhbHVlKSB7CisgICAgdmFyIGZsYWdzID0gb2JqLl9fZmxhZ3MgfHwgKG9iai5fX2ZsYWdzID0gT2JqZWN0LmNyZWF0ZShudWxsKSk7CisgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHsKKyAgICAgICAgZmxhZ3Nba2V5XSA9IHZhbHVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBmbGFnc1trZXldOworICAgIH0KK307CisKK2V4cG9ydCBmdW5jdGlvbiBkZWVwTWVtYmVyc0J5SWQgKHN1YnNldCwgbXNnKSB7CisgICAgaWYgKG1zZykgZmxhZyh0aGlzLCAnbWVzc2FnZScsIG1zZyk7CisgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpCisgICAgICAgICwgZmxhZ01zZyA9IGZsYWcodGhpcywgJ21lc3NhZ2UnKQorICAgICAgICAsIHNzZmkgPSBmbGFnKHRoaXMsICdzc2ZpJyk7CisKKyAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oJ2FycmF5Jyk7CisgICAgbmV3IEFzc2VydGlvbihzdWJzZXQsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLmFuKCdhcnJheScpOworCisgICAgdmFyIGNvbnRhaW5zID0gZmxhZyh0aGlzLCAnY29udGFpbnMnKTsKKyAgICB2YXIgb3JkZXJlZCA9IGZsYWcodGhpcywgJ29yZGVyZWQnKTsKKworICAgIHZhciBzdWJqZWN0LCBmYWlsTXNnLCBmYWlsTmVnYXRlTXNnOworCisgICAgaWYgKGNvbnRhaW5zKSB7CisgICAgICAgIHN1YmplY3QgPSBvcmRlcmVkID8gJ2FuIG9yZGVyZWQgc3VwZXJzZXQnIDogJ2Egc3VwZXJzZXQnOworICAgICAgICBmYWlsTXNnID0gJ2V4cGVjdGVkICN7dGhpc30gdG8gYmUgJyArIHN1YmplY3QgKyAnIG9mICN7ZXhwfSc7CisgICAgICAgIGZhaWxOZWdhdGVNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgJyArIHN1YmplY3QgKyAnIG9mICN7ZXhwfSc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ViamVjdCA9IG9yZGVyZWQgPyAnb3JkZXJlZCBtZW1iZXJzJyA6ICdtZW1iZXJzJzsKKyAgICAgICAgZmFpbE1zZyA9ICdleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgdGhlIHNhbWUgJyArIHN1YmplY3QgKyAnIGFzICN7ZXhwfSc7CisgICAgICAgIGZhaWxOZWdhdGVNc2cgPSAnZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgaGF2ZSB0aGUgc2FtZSAnICsgc3ViamVjdCArICcgYXMgI3tleHB9JzsKKyAgICB9CisKKyAgICB2YXIgY21wID0gZmxhZyh0aGlzLCAnZGVlcCcpID8gZGVlcEVxdWFsIDogdW5kZWZpbmVkOworCisgICAgdGhpcy5hc3NlcnQoCisgICAgICAgIGlzU3Vic2V0T2Yoc3Vic2V0LCBvYmosIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpCisgICAgICAgICwgZmFpbE1zZworICAgICAgICAsIGZhaWxOZWdhdGVNc2cKKyAgICAgICAgLCBzdWJzZXQKKyAgICAgICAgLCBvYmoKKyAgICAgICAgLCB0cnVlCisgICAgKTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVFbGVtZW50cyhhLCBiKSB7CisgICAgaWYgKCFpc0VsZW1lbnQoYSkgfHwgIWlzRWxlbWVudChiKSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYS5jb25zdHJ1Y3RvciA9PT0gYi5jb25zdHJ1Y3RvciAmJiBhLmlkID09PSBiLmlkOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZmVhdHVyZS1zdGVwcy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZmVhdHVyZS1zdGVwcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGFjMmQxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9jdWN1bWJlci9mZWF0dXJlLXN0ZXBzLmpzCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCisgKi8KKworaW1wb3J0IGNoYWlTdHJpbmcgZnJvbSAnY2hhaS1zdHJpbmcnOworaW1wb3J0IHsgR2l2ZW4sIFRoZW4sIFdoZW4sIHNldERlZmF1bHRUaW1lb3V0IH0gZnJvbSAnQGN1Y3VtYmVyL2N1Y3VtYmVyJzsKKy8vIFNldHRpbmcgQ3VjdW1iZXIgdGltZW91dCB0byAxMHMgZm9yIEZsb2F0aW5nIEVycm9ycyBvbiBXaW5kb3dzIG9uIEdpdEh1YiBBY3Rpb25zCitzZXREZWZhdWx0VGltZW91dCgxMCAqIDEwMDApOworaW1wb3J0IHsgdXNlLCBleHBlY3QgfSBmcm9tICdjaGFpJzsKK3VzZShjaGFpU3RyaW5nKTsKK2ltcG9ydCB7IGluc3BlY3QsIGZvcm1hdCwgaW5oZXJpdHMgfSBmcm9tICd1dGlsJzsKK2ltcG9ydCB7IGdyZW1saW4gfSBmcm9tICcuL2dyZW1saW4uanMnOworaW1wb3J0IHsgUGF0aCwgVmVydGV4LCBFZGdlLCBQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGguanMnOworaW1wb3J0IHsgc3RhdGljcyB9IGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL2dyYXBoLXRyYXZlcnNhbC5qcyc7CitpbXBvcnQgeyB0LCBQLCBkaXJlY3Rpb24sIG1lcmdlLCBiYXJyaWVyLCBjYXJkaW5hbGl0eSwgY29sdW1uLCBvcmRlciwgVGV4dFAsIElPLCBwaWNrLCBwb3AsIHNjb3BlLCBvcGVyYXRvciwgd2l0aE9wdGlvbnMgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgdG9Mb25nIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzLmpzJzsKK2ltcG9ydCBhbm9uIGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwuanMnOworY29uc3QgX18gPSBzdGF0aWNzOworaW1wb3J0IHsgZGVlcE1lbWJlcnNCeUlkIH0gZnJvbSAnLi9lbGVtZW50LWNvbXBhcmlzb24uanMnOworaW1wb3J0IEdyZW1saW5MYW5nIGZyb20gIi4uLy4uL2xpYi9wcm9jZXNzL2dyZW1saW4tbGFuZy5qcyI7Citjb25zdCBwYXJzZXJzID0gWworICBbICdzdHJcXFsoLiopXFxdJywgKHN0cmluZ1ZhbHVlKSA9PiBzdHJpbmdWYWx1ZSBdLCAvL3JldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBhcyBpcworICBbICd2cFxcWyguKylcXF0nLCB0b1ZlcnRleFByb3BlcnR5IF0sCisgIFsgJ3Byb3BcXFsoLispXFxdJywgdG9Qcm9wZXJ0eSBdLAorICBbICdkdFxcWyguKylcXF0nLCB0b0RhdGVUaW1lIF0sCisgIFsgJ3V1aWRcXFsoLispXFxdJywgdG9VdWlkIF0sCisgIFsgJ2RcXFsoLiopXFxdXFwuW2JzaWxmZG1uXScsIHRvTnVtZXJpYyBdLAorICBbICd2XFxbKC4rKVxcXScsIHRvVmVydGV4IF0sCisgIFsgJ3ZcXFsoLispXFxdXFwuaWQnLCB0b1ZlcnRleElkIF0sCisgIFsgJ3ZcXFsoLispXFxdXFwuc2lkJywgdG9WZXJ0ZXhJZFN0cmluZyBdLAorICBbICdlXFxbKC4rKVxcXScsIHRvRWRnZSBdLAorICBbICdlXFxbKC4rKVxcXVxcLmlkJywgdG9FZGdlSWQgXSwKKyAgWyAnZVxcWyguKylcXF1cXC5zaWQnLCB0b0VkZ2VJZFN0cmluZyBdLAorICBbICd2cFxcWyguKylcXF0nLCB0b1ZlcnRleFByb3BlcnR5IF0sCisgIFsgJ3BcXFsoLispXFxdJywgdG9QYXRoIF0sCisgIFsgJ2xcXFsoLiopXFxdJywgdG9BcnJheSBdLAorICBbICdzXFxbKC4qKVxcXScsIHRvU2V0IF0sCisgIFsgJ21cXFsoLispXFxdJywgdG9NYXAgXSwKKyAgWyAndFxcWyguKylcXF0nLCB0b1QgXSwKKyAgWyAnRFxcWyguKylcXF0nLCB0b0RpcmVjdGlvbiBdLAorICBbICdNXFxbKC4rKVxcXScsIHRvTWVyZ2UgXQorXS5tYXAoeCA9PiBbIG5ldyBSZWdFeHAoJ14nICsgeFswXSArICckJyksIHhbMV0gXSk7CisKK3VzZShmdW5jdGlvbiAoY2hhaSwgY2hhaVV0aWxzKSB7CisgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCgnbWVtYmVycycsIGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICByZXR1cm4gZGVlcE1lbWJlcnNCeUlkOworICB9KTsKK30pOworCitjb25zdCBpZ25vcmVSZWFzb24gPSB7CisgIGNsYXNzTm90U3VwcG9ydGVkOiAiSmF2YXNjcmlwdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjbGFzcyB0eXBlIGluIEdyYXBoQmluYXJ5IiwKKyAgbnVsbEtleXNJbk1hcE5vdFN1cHBvcnRlZFdlbGw6ICJKYXZhc2NyaXB0IGRvZXMgbm90IG5pY2VseSBzdXBwb3J0ICdudWxsJyBhcyBhIGtleSBpbiBNYXAgaW5zdGFuY2VzIiwKKyAgZmxvYXRpbmdQb2ludElzc3VlczogIkphdmFzY3JpcHQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyBub3Qgd29ya2luZyBpbiB0aGlzIGNhc2UiLAorICB1dWlkU2VyaWFsaXphdGlvbklzc3VlczogIkphdmFzY3JpcHQgZG9lcyBub3Qgc2VyaWFsaXplIHRvIGEgVVVJRCBvYmplY3QsIHdoaWNoIGNvbXBsaWNhdGVzIHRlc3QgYXNzZXJ0aW9ucyIsCisgIHN1YmdyYXBoU3RlcE5vdFN1cHBvcnRlZDogIkphdmFzY3JpcHQgZG9lcyBub3QgeWV0IHN1cHBvcnQgc3ViZ3JhcGgoKSIsCisgIHRyZWVTdGVwTm90U3VwcG9ydGVkOiAiSmF2YXNjcmlwdCBkb2VzIG5vdCB5ZXQgc3VwcG9ydCB0cmVlKCkiLAorICBuZWVkc0Z1cnRoZXJJbnZlc3RpZ2F0aW9uOiAnJywKK307CisKKy8vIEFuIGFzc29jaWF0aXZlIGFycmF5IGZvciBpZ25vcmVkIGZlYXR1cmUgdGVzdHMgY29udGFpbmluZyB0aGUgc2NlbmFyaW8gbmFtZSBhcyBrZXkKK2NvbnN0IGlnbm9yZWRTY2VuYXJpb3MgPSB7CisgIC8vIGphdmFzY3JpcHQgZG9lc24ndCBoYXZlIHN1YmdyYXBoKCkgc3RlcCB5ZXQKKyAgJ2dfVlgxWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5zdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpLAorICAnZ19WX3JlcGVhdFhib3RoRVhjcmVhdGVkWF9zdWJncmFwaFhzZ1hfb3V0VlhfdGltZXNYNVhfbmFtZV9kZWR1cF9jYXBYc2dYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5zdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpLAorICAnZ19WX291dEVYbm9leGlzdFhfc3ViZ3JhcGhYc2dYY2FwWHNnWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24uc3ViZ3JhcGhTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfRV9oYXNYd2VpZ2h0XzBfNVhfc3ViZ3JhcGhYYVhfc2VsZWN0WGFYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5zdWJncmFwaFN0ZXBOb3RTdXBwb3J0ZWQpLAorICAvLyBqYXZhc2NyaXB0IGRvZXNuJ3QgaGF2ZSB0cmVlKCkgc3RlcCB5ZXQKKyAgJ2dfVlgxWF9vdXRfb3V0X3RyZWVfYnlYbmFtZVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVlgxWF9vdXRfb3V0X3RyZWUnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVl9vdXRfdHJlZV9ieVhhZ2VYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi50cmVlU3RlcE5vdFN1cHBvcnRlZCksCisgICdnX1ZYMVhfb3V0X291dF90cmVlWGFYX2J5WG5hbWVYX2JvdGhfYm90aF9jYXBYYVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYm90aF9ib3RoX2NhcFhhWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24udHJlZVN0ZXBOb3RTdXBwb3J0ZWQpLAorICAnZ19WWDFYX291dF9vdXRfdHJlZV9ieVhsYWJlbFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbGFiZWxYX2JvdGhfYm90aF9jYXBYYVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVlgxWF9vdXRfb3V0X291dF90cmVlJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi50cmVlU3RlcE5vdFN1cHBvcnRlZCksCisgICdnX1ZYMVhfb3V0RV9pblZfYm90aEVfb3RoZXJWX3RyZWUnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVlgxWF9vdXRFX2luVl9ib3RoRV9vdGhlclZfdHJlZV9ieVhuYW1lWF9ieVhsYWJlbFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwKKyAgJ2dfVl9vdXRfdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi50cmVlU3RlcE5vdFN1cHBvcnRlZCksCisgICdnX1Zfb3V0X29yZGVyX2J5WG5hbWVYX2xvY2FsWHRyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnRyZWVTdGVwTm90U3VwcG9ydGVkKSwgCisgICAvLyBmbG9hdGluZyBwb2ludCBpc3N1ZXMKKyAgJ2dfd2l0aFNhY2tYQmlnSW50ZWdlcl9URU5fcG93WDEwMDBYX2Fzc2lnblhfVl9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrJzogbmV3IElnbm9yZUVycm9yKGlnbm9yZVJlYXNvbi5mbG9hdGluZ1BvaW50SXNzdWVzKSwKKyAgJ2dfd2l0aFNhY2tYMlhfVl9zYWNrWGRpdlhfYnlYY29uc3RhbnRYNF8wWFhfc2Fjayc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24uZmxvYXRpbmdQb2ludElzc3VlcyksCisgIC8vIHV1aWQgaXNzdWVzCisgICdnX2luamVjdF9vcmRlcl9ieVhkZXNjWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24udXVpZFNlcmlhbGl6YXRpb25Jc3N1ZXMpLAorICAnZ19pbmplY3Rfb3JkZXInOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLnV1aWRTZXJpYWxpemF0aW9uSXNzdWVzKSwKKyAgLy8gR3JlbWxpbkxhbmcgY29udmVydHMgbnVtYmVyIHRvICJpbnRlZ2VyIiB3aGljaCBpcyB1bnBhcnNlYWJsZSB3aXRoIGZsb2F0TGl0ZXJhbCBpbiBncmFtbWFyCisgICdnX1ZfY29pblgxWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24uZmxvYXRpbmdQb2ludElzc3VlcyksCisgICdnX1ZfY29pblgwWCc6IG5ldyBJZ25vcmVFcnJvcihpZ25vcmVSZWFzb24uZmxvYXRpbmdQb2ludElzc3VlcyksCisgICdnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2hhc1huYW1lX3JpcHBsZVhfcGFnZVJhbmtYMVhfd2l0aFhlZGdlc19pbkVYY3JlYXRlZFhfd2l0aFh0aW1lc18xWF93aXRoWHByb3BlcnR5TmFtZV9wcmlvcnNYX2luWGNyZWF0ZWRYX3VuaW9uWGJvdGhfX2lkZW50aXR5WF92YWx1ZU1hcFhuYW1lX3ByaW9yc1gnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLmZsb2F0aW5nUG9pbnRJc3N1ZXMpLAorICAnZ19WX291dFhjcmVhdGVkWF9ncm91cFhtWF9ieVhsYWJlbFhfcGFnZVJhbmtYMVhfd2l0aFhwcm9wZXJ0eU5hbWVfcGFnZVJhbmtYX3dpdGhYZWRnZXNfaW5FWF93aXRoWHRpbWVzXzFYX2luWGNyZWF0ZWRYX2dyb3VwWG1YX2J5WHBhZ2VSYW5rWF9jYXBYbVgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLmZsb2F0aW5nUG9pbnRJc3N1ZXMpLAorICAnZ19WX3BlZXJQcmVzc3VyZV93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF93aXRoWGVkZ2VzX291dEVYa25vd3NYWF9wYWdlUmFua1gxWF9ieVhyYW5rWF93aXRoWGVkZ2VzX291dEVYa25vd3NYX3dpdGhYdGltZXNfMlhfZ3JvdXBfYnlYY2x1c3RlclhfYnlYcmFua19zdW1YX2xpbWl0WDEwMFgnOiBuZXcgSWdub3JlRXJyb3IoaWdub3JlUmVhc29uLmZsb2F0aW5nUG9pbnRJc3N1ZXMpLAorfTsKKworR2l2ZW4oL150aGUgKC4rKSBncmFwaCQvLCBmdW5jdGlvbiAoZ3JhcGhOYW1lKSB7CisgIC8vIGlmIHRoZSBzY2VuYXJpbyBpcyBpZ25vcmVkIHRoZW4gc2tpcCB0aGUgdGVzdAorICBpZiAoaWdub3JlZFNjZW5hcmlvc1t0aGlzLnNjZW5hcmlvXSkgeworICAgIHJldHVybiAnc2tpcHBlZCc7CisgIH0KKyAgdGhpcy5ncmFwaE5hbWUgPSBncmFwaE5hbWU7CisgIGNvbnN0IGRhdGEgPSB0aGlzLmdldERhdGEoKTsKKyAgdGhpcy5nID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhkYXRhLmNvbm5lY3Rpb24pOworCisgIGlmICh0aGlzLmlzR3JhcGhDb21wdXRlcikgeworICAgIHRoaXMuZyA9IHRoaXMuZy53aXRoQ29tcHV0ZXIoKTsKKyAgfQorCisgIGlmIChncmFwaE5hbWUgPT09ICdlbXB0eScpIHsKKyAgICByZXR1cm4gdGhpcy5jbGVhbkVtcHR5R3JhcGgoKTsKKyAgfQorfSk7CisKK0dpdmVuKCd0aGUgZ3JhcGggaW5pdGlhbGl6ZXIgb2YnLCBmdW5jdGlvbiAodHJhdmVyc2FsVGV4dCkgeworICBjb25zdCBwID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wYXJhbWV0ZXJzKTsKKyAgcC5nID0gdGhpcy5nOworICBjb25zdCB0cmF2ZXJzYWwgPSBncmVtbGluW3RoaXMuc2NlbmFyaW9dLnNoaWZ0KCkocCk7CisgIHJldHVybiB0cmF2ZXJzYWwudG9MaXN0KCk7Cit9KTsKKworR2l2ZW4oJ2FuIHVuc3VwcG9ydGVkIHRlc3QnLCAoKSA9PiB7fSk7CisKK0dpdmVuKCd0aGUgdHJhdmVyc2FsIG9mJywgZnVuY3Rpb24gKHRyYXZlcnNhbFRleHQpIHsKKyAgY29uc3QgcCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1ldGVycyk7CisgIHAuZyA9IHRoaXMuZzsKKyAgdGhpcy50cmF2ZXJzYWwgPSBncmVtbGluW3RoaXMuc2NlbmFyaW9dLnNoaWZ0KCkocCk7CisgIGNvbnN0IHNpZGVFZmZlY3RMYW5nID0gbmV3IEdyZW1saW5MYW5nKCk7CisgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuc2lkZUVmZmVjdHMpIHsKKyAgICBzaWRlRWZmZWN0TGFuZy5hZGRTb3VyY2UoJ3dpdGhTaWRlRWZmZWN0JywgW2tleSwgdGhpcy5zaWRlRWZmZWN0c1trZXldXSk7CisgIH0KKyAgLy8gcHJlcGVuZCB0aGUgc2lkZSBlZmZlY3RzIHRvIHRoZSBxdWVyeQorICB0aGlzLnRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdyZW1saW4gPSBzaWRlRWZmZWN0TGFuZy5ncmVtbGluICsgdGhpcy50cmF2ZXJzYWwuZ2V0R3JlbWxpbkxhbmcoKS5ncmVtbGluOworfSk7CisKK0dpdmVuKC9edXNpbmcgdGhlIHBhcmFtZXRlciAoLispIGRlZmluZWQgYXMgIiguKykiJC8sIGZ1bmN0aW9uIChwYXJhbU5hbWUsIHN0cmluZ1ZhbHVlKSB7CisgIC8vIFJlbW92ZSBlc2NhcGVkIGNoYXJzCisgIHN0cmluZ1ZhbHVlID0gc3RyaW5nVmFsdWUucmVwbGFjZSgvXFwiL2csICciJyk7CisgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7CisgIGlmICh0aGlzLmdyYXBoTmFtZSA9PT0gJ2VtcHR5JykgeworICAgIHAgPSB0aGlzLmxvYWRFbXB0eUdyYXBoRGF0YSgpOworICB9CisgIHJldHVybiBwLnRoZW4oKCkgPT4geworICAgIHRoaXMucGFyYW1ldGVyc1twYXJhbU5hbWVdID0gcGFyc2VWYWx1ZS5jYWxsKHRoaXMsIHN0cmluZ1ZhbHVlKTsKKyAgfSkuY2F0Y2goZXJyID0+IHsKKyAgICBpZiAoZXJyIGluc3RhbmNlb2YgSWdub3JlRXJyb3IpIHsKKyAgICAgIHJldHVybiAnc2tpcHBlZCc7CisgICAgfQorICAgIHRocm93IGVycjsKKyAgfSk7Cit9KTsKKworR2l2ZW4oL151c2luZyB0aGUgc2lkZSBlZmZlY3QgKC4rKSBkZWZpbmVkIGFzICIoLispIiQvLCBmdW5jdGlvbiAoc2lkZUVmZmVjdEtleSwgc3RyaW5nVmFsdWUpIHsKKyAgLy8gUmVtb3ZlIGVzY2FwZWQgY2hhcnMKKyAgc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZS5yZXBsYWNlKC9cXCIvZywgJyInKTsKKyAgbGV0IHAgPSBQcm9taXNlLnJlc29sdmUoKTsKKyAgaWYgKHRoaXMuZ3JhcGhOYW1lID09PSAnZW1wdHknKSB7CisgICAgcCA9IHRoaXMubG9hZEVtcHR5R3JhcGhEYXRhKCk7CisgIH0KKyAgcmV0dXJuIHAudGhlbigoKSA9PiB7CisgICAgdGhpcy5zaWRlRWZmZWN0c1tzaWRlRWZmZWN0S2V5XSA9IHBhcnNlVmFsdWUuY2FsbCh0aGlzLCBzdHJpbmdWYWx1ZSk7CisgIH0pLmNhdGNoKGVyciA9PiB7CisgICAgaWYgKGVyciBpbnN0YW5jZW9mIElnbm9yZUVycm9yKSB7CisgICAgICByZXR1cm4gJ3NraXBwZWQnOworICAgIH0KKyAgICB0aHJvdyBlcnI7CisgIH0pOworfSk7CisKK3ZhciByZW1vdmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocCkgeworICBpZiAocCA9PT0gdW5kZWZpbmVkKSB7ICAgCisgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIFZlcnRleCB8fCBwIGluc3RhbmNlb2YgRWRnZSkgeworICAgIHAucHJvcGVydGllcyA9IHVuZGVmaW5lZDsKKyAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgQXJyYXkpIHsKKyAgICBwLmZvckVhY2gocmVtb3ZlUHJvcGVydGllcykKKyAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgTWFwKSB7CisgICAgcmVtb3ZlUHJvcGVydGllcyhBcnJheS5mcm9tKHAua2V5cygpKSkKKyAgICByZW1vdmVQcm9wZXJ0aWVzKEFycmF5LmZyb20ocC52YWx1ZXMoKSkpCisgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIFBhdGgpIHsKKyAgICByZW1vdmVQcm9wZXJ0aWVzKHAub2JqZWN0cykKKyAgfQorCisgIHJldHVybiBwCit9CisKK1doZW4oJ2l0ZXJhdGVkIHRvIGxpc3QnLCBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLnRyYXZlcnNhbC50b0xpc3QoKS50aGVuKGxpc3QgPT4gdGhpcy5yZXN1bHQgPSByZW1vdmVQcm9wZXJ0aWVzKGxpc3QpKS5jYXRjaChlcnIgPT4gdGhpcy5yZXN1bHQgPSBlcnIpOworfSk7CisKK1doZW4oJ2l0ZXJhdGVkIG5leHQnLCBmdW5jdGlvbiAoKSB7CisgIHJldHVybiB0aGlzLnRyYXZlcnNhbC5uZXh0KCkudGhlbihpdCA9PiB7CisgICAgLy8gZm9yIFBhdGggY29tcGFyZSB1c2luZyB0aGUgb2JqZWN0cyBhcnJheQorICAgIHRoaXMucmVzdWx0ID0gcmVtb3ZlUHJvcGVydGllcyhpdC52YWx1ZSBpbnN0YW5jZW9mIFBhdGggPyBpdC52YWx1ZS5vYmplY3RzIDogaXQudmFsdWUgKQorICB9KS5jYXRjaChlcnIgPT4gdGhpcy5yZXN1bHQgPSBlcnIpOworfSk7CisKK1RoZW4oJ3RoZSB0cmF2ZXJzYWwgd2lsbCByYWlzZSBhbiBlcnJvcicsIGZ1bmN0aW9uKCkgeworICBleHBlY3QodGhpcy5yZXN1bHQpLnRvLmJlLmEuaW5zdGFuY2VvZihFcnJvcik7Cit9KTsKKworVGhlbigvXnRoZSB0cmF2ZXJzYWwgd2lsbCByYWlzZSBhbiBlcnJvciB3aXRoIG1lc3NhZ2UgKFx3KykgdGV4dCBvZiAiKC4rKSIkLywgZnVuY3Rpb24oY29tcGFyaXNvbiwgZXhwZWN0ZWRNZXNzYWdlKSB7CisgIGV4cGVjdCh0aGlzLnJlc3VsdCkudG8uYmUuYS5pbnN0YW5jZW9mKEVycm9yKTsKKyAgaWYgKGNvbXBhcmlzb24gPT09ICJjb250YWluaW5nIikgeworICAgIGV4cGVjdCh0aGlzLnJlc3VsdC5tZXNzYWdlLnRvVXBwZXJDYXNlKCkpLnRvLmNvbnRhaW4oZXhwZWN0ZWRNZXNzYWdlLnRvVXBwZXJDYXNlKCkpCisgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA9PT0gInN0YXJ0aW5nIikgeworICAgIGV4cGVjdCh0aGlzLnJlc3VsdC5tZXNzYWdlLnRvVXBwZXJDYXNlKCkpLnRvLnN0YXJ0V2l0aChleHBlY3RlZE1lc3NhZ2UudG9VcHBlckNhc2UoKSkKKyAgfSBlbHNlIGlmIChjb21wYXJpc29uID09PSAiZW5kaW5nIikgeworICAgIGV4cGVjdCh0aGlzLnJlc3VsdC5tZXNzYWdlLnRvVXBwZXJDYXNlKCkpLnRvLmVuZFdpdGgoZXhwZWN0ZWRNZXNzYWdlLnRvVXBwZXJDYXNlKCkpCisgIH0gZWxzZSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbXBhcmlzb24gXCcnICsgY29tcGFyaXNvbiArICdcJy0gbXVzdCBiZTogY29udGFpbmluZywgZW5kaW5nIG9yIHN0YXJ0aW5nJyk7CisgIH0KK30pOworCitUaGVuKC9edGhlIHJlc3VsdCBzaG91bGQgYmUgKFx3KykkLywgZnVuY3Rpb24gYXNzZXJ0UmVzdWx0KGNoYXJhY3Rlcml6ZWRBcywgcmVzdWx0VGFibGUpIHsKKyAgaWYgKHRoaXMucmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHsKKyAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlbmNvdW50ZXJlZDonLCB0aGlzLnJlc3VsdC5tZXNzYWdlLCB0aGlzLnJlc3VsdC5zdGFjayk7CisgIH0KKyAgZXhwZWN0KHRoaXMucmVzdWx0KS50by5ub3QuYmUuYS5pbnN0YW5jZW9mKEVycm9yKTsKKworICBpZiAoY2hhcmFjdGVyaXplZEFzID09PSAnZW1wdHknKSB7CisgICAgZXhwZWN0KHRoaXMucmVzdWx0KS50by5iZS5lbXB0eTsKKyAgICBpZiAodHlwZW9mIHJlc3VsdFRhYmxlID09PSAnZnVuY3Rpb24nKXsKKyAgICAgIHJldHVybiByZXN1bHRUYWJsZSgpOworICAgIH0KKyAgICByZXR1cm47CisgIH0KKyAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSByZXN1bHRUYWJsZS5yb3dzKCkubWFwKHJvdyA9PiBwYXJzZVJvdy5jYWxsKHRoaXMsIHJvdykpOworICBzd2l0Y2ggKGNoYXJhY3Rlcml6ZWRBcykgeworICAgIGNhc2UgJ29yZGVyZWQnOgorICAgICAgZXhwZWN0KHRvQ29tcGFyZSh0aGlzLnJlc3VsdCkpLnRvLmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoZXhwZWN0ZWRSZXN1bHQpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAndW5vcmRlcmVkJzoKKyAgICAgIGV4cGVjdCh0b0NvbXBhcmUodGhpcy5yZXN1bHQpKS50by5oYXZlLmRlZXAubWVtYmVycyhleHBlY3RlZFJlc3VsdCk7CisgICAgICBicmVhazsKKyAgICBjYXNlICdvZic6CisgICAgICAvLyByZXN1bHQgaXMgYSBzdWJzZXQgb2YgdGhlIGV4cGVjdGVkCisgICAgICBleHBlY3QoZXhwZWN0ZWRSZXN1bHQpLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKHRvQ29tcGFyZSh0aGlzLnJlc3VsdCkpOworICAgICAgYnJlYWs7CisgIH0KK30pOworCitUaGVuKCd0aGUgcmVzdWx0IHNob3VsZCBiZSBhIHN1YmdyYXBoIHdpdGggdGhlIGZvbGxvd2luZycsIF8gPT4geworICAvLyBzdWJncmFwaCBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiBqYXZhc2NyaXB0Cit9KTsKKworVGhlbigndGhlIHJlc3VsdCBzaG91bGQgYmUgYSB0cmVlIHdpdGggYSBzdHJ1Y3R1cmUgb2YnLCBfID0+IHsKKyAgLy8gdHJlZSBpcyBub3Qgc3VwcG9ydGVkIHlldCBpbiBqYXZhc2NyaXB0Cit9KTsKKworVGhlbigvXnRoZSBncmFwaCBzaG91bGQgcmV0dXJuIChcZCspIGZvciBjb3VudCBvZiAiKC4rKSIkLywgZnVuY3Rpb24gKHN0cmluZ0NvdW50LCB0cmF2ZXJzYWxUZXh0KSB7CisgIGV4cGVjdCh0aGlzLnJlc3VsdCkudG8ubm90LmJlLmEuaW5zdGFuY2VvZihFcnJvcik7CisKKyAgY29uc3QgcCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucGFyYW1ldGVycyk7CisgIHAuZyA9IHRoaXMuZzsKKyAgY29uc3QgdHJhdmVyc2FsID0gZ3JlbWxpblt0aGlzLnNjZW5hcmlvXS5zaGlmdCgpKHApOworICByZXR1cm4gdHJhdmVyc2FsLnRvTGlzdCgpLnRoZW4obGlzdCA9PiB7CisgICAgZXhwZWN0KGxpc3QpLnRvLmhhdmUubGVuZ3RoT2YocGFyc2VJbnQoc3RyaW5nQ291bnQsIDEwKSk7CisgIH0pOworfSk7CisKK1RoZW4oL150aGUgcmVzdWx0IHNob3VsZCBoYXZlIGEgY291bnQgb2YgKFxkKykkLywgZnVuY3Rpb24gKHN0cmluZ0NvdW50KSB7CisgIGV4cGVjdCh0aGlzLnJlc3VsdCkudG8ubm90LmJlLmEuaW5zdGFuY2VvZihFcnJvcik7CisKKyAgY29uc3QgZXhwZWN0ZWQgPSBwYXJzZUludChzdHJpbmdDb3VudCwgMTApOworICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHQpKSB7CisgICAgbGV0IGNvdW50ID0gMDsKKyAgICBpZiAodGhpcy5yZXN1bHQgaW5zdGFuY2VvZiBNYXApIHsKKyAgICAgIGNvdW50ID0gdGhpcy5yZXN1bHQuc2l6ZTsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZW9mIHRoaXMucmVzdWx0ID09PSAnb2JqZWN0JykgeworICAgICAgY291bnQgPSBPYmplY3Qua2V5cyh0aGlzLnJlc3VsdCkubGVuZ3RoOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHRocm93IG5ldyBFcnJvcigncmVzdWx0IG5vdCBzdXBwb3J0ZWQ6ICcgKyBpbnNwZWN0KHRoaXMucmVzdWx0KSk7CisgICAgfQorICAgIGV4cGVjdChjb3VudCkudG8uYmUuZXF1YWwoZXhwZWN0ZWQpOworICAgIHJldHVybjsKKyAgfQorICBleHBlY3QodGhpcy5yZXN1bHQpLnRvLmhhdmUubGVuZ3RoT2YoZXhwZWN0ZWQpOworfSk7CisKK1RoZW4oJ25vdGhpbmcgc2hvdWxkIGhhcHBlbiBiZWNhdXNlJywgXyA9PiB7fSk7CisKK2Z1bmN0aW9uIGdldFNhbmRib3goZywgcGFyYW1ldGVycykgeworICBjb25zdCBzYW5kYm94ID0geworICAgIGc6IGcsCisgICAgX186IF9fLAorICAgIEJhcnJpZXI6IGJhcnJpZXIsCisgICAgQ2FyZGluYWxpdHk6IGNhcmRpbmFsaXR5LAorICAgIENvbHVtbjogY29sdW1uLAorICAgIERpcmVjdGlvbjogeworICAgICAgQk9USDogZGlyZWN0aW9uLmJvdGgsCisgICAgICBJTjogZGlyZWN0aW9uLmluLAorICAgICAgT1VUOiBkaXJlY3Rpb24ub3V0LAorICAgICAgZnJvbV86IGRpcmVjdGlvbi5pbiwKKyAgICAgIHRvOiBkaXJlY3Rpb24ub3V0LAorICAgIH0sCisgICAgT3JkZXI6IG9yZGVyLAorICAgIFA6IFAsCisgICAgVGV4dFA6IFRleHRQLAorICAgIElPOiBJTywKKyAgICBQaWNrOiBwaWNrLAorICAgIFBvcDogcG9wLAorICAgIFNjb3BlOiBzY29wZSwKKyAgICBPcGVyYXRvcjogb3BlcmF0b3IsCisgICAgVDogdCwKKyAgICB0b0xvbmc6IHRvTG9uZywKKyAgICBXaXRoT3B0aW9uczogd2l0aE9wdGlvbnMKKyAgfTsKKyAgLy8gUGFzcyB0aGUgcGFyYW1ldGVyIHRvIHRoZSBzYW5kYm94CisgIE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLmZvckVhY2gocGFyYW1OYW1lID0+IHNhbmRib3hbcGFyYW1OYW1lXSA9IHBhcmFtZXRlcnNbcGFyYW1OYW1lXSk7CisgIHJldHVybiBzYW5kYm94OworfQorCitmdW5jdGlvbiBwYXJzZVJvdyhyb3cpIHsKKyAgcmV0dXJuIHBhcnNlVmFsdWUuY2FsbCh0aGlzLCByb3dbMF0pOworfQorCitmdW5jdGlvbiBwYXJzZVZhbHVlKHN0cmluZ1ZhbHVlKSB7CisKKyAgaWYoc3RyaW5nVmFsdWUgPT09ICJudWxsIikKKyAgICByZXR1cm4gbnVsbDsKKyAgaWYoc3RyaW5nVmFsdWUgPT09ICJ0cnVlIikKKyAgICByZXR1cm4gdHJ1ZTsKKyAgaWYoc3RyaW5nVmFsdWUgPT09ICJmYWxzZSIpCisgICAgcmV0dXJuIGZhbHNlOworICBpZihzdHJpbmdWYWx1ZSA9PT0gImRbTmFOXSIpCisgICAgcmV0dXJuIE51bWJlci5OYU47CisgIGlmKHN0cmluZ1ZhbHVlID09PSAiZFtJbmZpbml0eV0iKQorICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CisgIGlmKHN0cmluZ1ZhbHVlID09PSAiZFstSW5maW5pdHldIikKKyAgICByZXR1cm4gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOworCisgIGxldCBleHRyYWN0ZWRWYWx1ZSA9IG51bGw7CisgIGxldCBwYXJzZXIgPSBudWxsOworICBmb3IgKGxldCBpdGVtIG9mIHBhcnNlcnMpIHsKKyAgICBsZXQgcmUgPSBpdGVtWzBdOworICAgIGxldCBtYXRjaCA9IHJlLmV4ZWMoc3RyaW5nVmFsdWUpOworICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7CisgICAgICBwYXJzZXIgPSBpdGVtWzFdOworICAgICAgZXh0cmFjdGVkVmFsdWUgPSBtYXRjaFsxXTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIHJldHVybiBwYXJzZXIgIT09IG51bGwgPyBwYXJzZXIuY2FsbCh0aGlzLCBleHRyYWN0ZWRWYWx1ZSkgOiBzdHJpbmdWYWx1ZTsKK30KKworZnVuY3Rpb24gdG9OdW1lcmljKHN0cmluZ1ZhbHVlKSB7CisgIHRyeSB7CisgICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyaW5nVmFsdWUpOworICB9IGNhdGNoIChFcnJvcikgeworICAgIHJldHVybiBCaWdJbnQoc3RyaW5nVmFsdWUpOworICB9Cit9CisKK2Z1bmN0aW9uIHRvVmVydGV4KG5hbWUpIHsKKyAgLy8gc29tZSB2ZXJ0aWNlcyBhcmUgY2FjaGVkLCBsaWtlIHRob3NlIGZyb20gdG95IGdyYXBocyBidXQgc29tZSBhcmUganVzdCByZWZlcmVuY2VzLiBpZiB0aGV5IGFyZQorICAvLyBub3QgY2FjaGVkIHRoZW4gdGhleSBhcmUgbWVhbnQgdG8gYmUgcmVmZXJlbmNlcy4KKyAgY29uc3QgdmVydGljZXMgPSB0aGlzLmdldERhdGEoKS52ZXJ0aWNlczsKKyAgaWYgKHZlcnRpY2VzLmhhcyhuYW1lKSkKKyAgICByZXR1cm4gdGhpcy5nZXREYXRhKCkudmVydGljZXMuZ2V0KG5hbWUpOworICBlbHNlCisgICAgcmV0dXJuIG5ldyBWZXJ0ZXgobmFtZSwgInZlcnRleCIpCit9CisKK2Z1bmN0aW9uIHRvVmVydGV4SWQobmFtZSkgeworICByZXR1cm4gdG9WZXJ0ZXguY2FsbCh0aGlzLCBuYW1lKS5pZDsKK30KKworZnVuY3Rpb24gdG9WZXJ0ZXhJZFN0cmluZyhuYW1lKSB7CisgIHJldHVybiB0b1ZlcnRleC5jYWxsKHRoaXMsIG5hbWUpLmlkLnRvU3RyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHRvRWRnZShuYW1lKSB7CisgIGNvbnN0IGUgPSB0aGlzLmdldERhdGEoKS5lZGdlc1tuYW1lXTsKKyAgaWYgKCFlKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdCgnRWRnZSB3aXRoIGtleSAiJXMiIG5vdCBmb3VuZCcsIG5hbWUpKTsKKyAgfQorICByZXR1cm4gZTsKK30KKworZnVuY3Rpb24gdG9FZGdlSWQobmFtZSkgeworICByZXR1cm4gdG9FZGdlLmNhbGwodGhpcywgbmFtZSkuaWQ7Cit9CisKK2Z1bmN0aW9uIHRvRWRnZUlkU3RyaW5nKG5hbWUpIHsKKyAgcmV0dXJuIHRvRWRnZS5jYWxsKHRoaXMsIG5hbWUpLmlkLnRvU3RyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIHRvVmVydGV4UHJvcGVydHkobmFtZSkgeworICBjb25zdCB2cCA9IHRoaXMuZ2V0RGF0YSgpLnZlcnRleFByb3BlcnRpZXNbbmFtZV07CisgIGlmICghdnApIHsKKyAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0KCdWZXJ0ZXhQcm9wZXJ0eSB3aXRoIGtleSAiJXMiIG5vdCBmb3VuZCcsIG5hbWUpKTsKKyAgfQorICByZXR1cm4gdnA7Cit9CisKK2Z1bmN0aW9uIHRvUHJvcGVydHkodmFsdWUpIHsKKyAgY29uc3QgY29tbWFJZHggPSB2YWx1ZS5pbmRleE9mKCcsJyk7CisgIGNvbnN0IGtleSA9IHZhbHVlLnN1YnN0cmluZygwLCBjb21tYUlkeCk7CisgIGNvbnN0IHZhbCA9IHBhcnNlVmFsdWUuY2FsbCh0aGlzLCB2YWx1ZS5zdWJzdHJpbmcoY29tbWFJZHggKyAxKSk7CisgIHJldHVybiBuZXcgUHJvcGVydHkoa2V5LCB2YWwpOworfQorCitmdW5jdGlvbiB0b1BhdGgodmFsdWUpIHsKKyAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnLCcpOworICByZXR1cm4gbmV3IFBhdGgobmV3IEFycmF5KDApLCBwYXJ0cy5tYXAoeCA9PiBwYXJzZVZhbHVlLmNhbGwodGhpcywgeCkpKTsKK30KKworZnVuY3Rpb24gdG9UKHZhbHVlKSB7CisgIHJldHVybiB0W3ZhbHVlXTsKK30KKworZnVuY3Rpb24gdG9EaXJlY3Rpb24odmFsdWUpIHsKKyAgLy8gc3dhcCBEaXJlY3Rpb24uZnJvbSBhbGlhcworICBpZiAodmFsdWUgPT09ICdmcm9tJykKKyAgICByZXR1cm4gZGlyZWN0aW9uWyJmcm9tXyJdOworICBlbHNlCisgICAgcmV0dXJuIGRpcmVjdGlvblt2YWx1ZS50b0xvd2VyQ2FzZSgpXTsKK30KKworZnVuY3Rpb24gdG9EYXRlVGltZSh2YWx1ZSkgeworICByZXR1cm4gbmV3IERhdGUodmFsdWUpOworfQorCitmdW5jdGlvbiB0b1V1aWQodmFsdWUpIHsKKyAgcmV0dXJuIHZhbHVlOworfQorCitmdW5jdGlvbiB0b01lcmdlKHZhbHVlKSB7CisgIHJldHVybiBtZXJnZVt2YWx1ZV07Cit9CisKK2Z1bmN0aW9uIHNwbGl0QnlFbGVtZW50KHMpIHsKKyAgbGV0IGRlcHRoID0gMDsKKyAgbGV0IGN1cnJlbnQgPSAnJzsKKyAgY29uc3QgcmVzdWx0cyA9IFtdOworICBmb3IgKGNvbnN0IGMgb2YgcykgeworICAgIGlmIChjID09PSAnWycpIHsKKyAgICAgIGRlcHRoKys7CisgICAgICBjdXJyZW50ICs9IGM7CisgICAgfSBlbHNlIGlmIChjID09PSAnXScpIHsKKyAgICAgIGRlcHRoLS07CisgICAgICBjdXJyZW50ICs9IGM7CisgICAgfSBlbHNlIGlmIChjID09PSAnLCcgJiYgZGVwdGggPT09IDApIHsKKyAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50LnRyaW0oKSk7CisgICAgICBjdXJyZW50ID0gJyc7CisgICAgfSBlbHNlIHsKKyAgICAgIGN1cnJlbnQgKz0gYzsKKyAgICB9CisgIH0KKyAgaWYgKGN1cnJlbnQubGVuZ3RoID4gMCkgcmVzdWx0cy5wdXNoKGN1cnJlbnQudHJpbSgpKTsKKyAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK2Z1bmN0aW9uIHRvQXJyYXkoc3RyaW5nTGlzdCkgeworICBpZiAoc3RyaW5nTGlzdCA9PT0gJycpIHsKKyAgICByZXR1cm4gbmV3IEFycmF5KDApOworICB9CisgIHJldHVybiBzcGxpdEJ5RWxlbWVudChzdHJpbmdMaXN0KS5tYXAoeCA9PiBwYXJzZVZhbHVlLmNhbGwodGhpcywgeCkpOworfQorCitmdW5jdGlvbiB0b1NldChzdHJpbmdMaXN0KSB7CisgIGlmIChzdHJpbmdMaXN0ID09PSAnJykgeworICAgIHJldHVybiBuZXcgU2V0KCk7CisgIH0KKworICBjb25zdCBzID0gbmV3IFNldCgpOworICBzcGxpdEJ5RWxlbWVudChzdHJpbmdMaXN0KS5mb3JFYWNoKHggPT4gcy5hZGQocGFyc2VWYWx1ZS5jYWxsKHRoaXMsIHgpKSk7CisgIHJldHVybiBzOworfQorCitmdW5jdGlvbiB0b01hcChzdHJpbmdNYXApIHsKKyAgcmV0dXJuIHBhcnNlTWFwVmFsdWUuY2FsbCh0aGlzLCBKU09OLnBhcnNlKHN0cmluZ01hcCkpOworfQorCitmdW5jdGlvbiBwYXJzZU1hcFZhbHVlKHZhbHVlKSB7CisgIGlmICh2YWx1ZSA9PT0gbnVsbCkKKyAgICByZXR1cm4gbnVsbDsKKworICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeworICAgIHJldHVybiBwYXJzZVZhbHVlLmNhbGwodGhpcywgdmFsdWUpOworICB9CisgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgeworICAgIHJldHVybiB2YWx1ZS5tYXAoeCA9PiBwYXJzZU1hcFZhbHVlLmNhbGwodGhpcywgeCkpOworICB9CisgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7CisgICAgcmV0dXJuIHZhbHVlOworICB9CisgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTsKKyAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goa2V5ID0+IHsKKyAgICBtYXAuc2V0KHBhcnNlTWFwVmFsdWUuY2FsbCh0aGlzLCBrZXkpLCBwYXJzZU1hcFZhbHVlLmNhbGwodGhpcywgdmFsdWVba2V5XSkpOworICB9KTsKKyAgcmV0dXJuIG1hcDsKK30KKworLyoqCisgKiBBZGFwdHMgdGhlIG9iamVjdCB0byBiZSBjb21wYXJlZCwgcmVtb3ZpbmcgbGFiZWxzIHByb3BlcnR5IG9mIHRoZSBQYXRoLgorICovCitmdW5jdGlvbiB0b0NvbXBhcmUob2JqKSB7CisgIGlmICghb2JqKSB7CisgICAgcmV0dXJuIG9iajsKKyAgfQorICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHsKKyAgICByZXR1cm4gb2JqOworICB9CisgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHsKKyAgICByZXR1cm4gb2JqLm1hcCh0b0NvbXBhcmUpOworICB9CisgIGlmIChvYmogaW5zdGFuY2VvZiBQYXRoKSB7CisgICAgLy8gbGFiZWxzIGFyZSBpZ25vcmVkCisgICAgb2JqLmxhYmVscyA9IG5ldyBBcnJheSgwKTsKKyAgfQorICByZXR1cm4gb2JqOworfQorCitmdW5jdGlvbiBJZ25vcmVFcnJvcihyZWFzb24pIHsKKyAgRXJyb3IuY2FsbCh0aGlzLCByZWFzb24pOworICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJZ25vcmVFcnJvcik7Cit9CisKK2luaGVyaXRzKElnbm9yZUVycm9yLCBFcnJvcik7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2dyZW1saW4uanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2N1Y3VtYmVyL2dyZW1saW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlMzY5NwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvZ3JlbWxpbi5qcwpAQCAtMCwwICsxLDIxNjkgQEAKKy8qCisqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoKKyogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoKKyogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyogdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCisKKworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8qIERvIE5PVCBlZGl0IHRoaXMgZmlsZSBkaXJlY3RseSAtIGdlbmVyYXRlZCBieSBidWlsZC9nZW5lcmF0ZS5ncm9vdnkKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCitpbXBvcnQgKiBhcyBncmFwaFRyYXZlcnNhbE1vZHVsZSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMnOworaW1wb3J0ICogYXMgdHJhdmVyc2FsTW9kdWxlIGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC5qcyc7CitpbXBvcnQgeyBUcmF2ZXJzYWxTdHJhdGVnaWVzLCBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3ksIE9wdGlvbnNTdHJhdGVneSwgUGFydGl0aW9uU3RyYXRlZ3ksIAorICAgICAgICBSZWFkT25seVN0cmF0ZWd5LCBHcmFwaEZpbHRlclN0cmF0ZWd5LCBTZWVkU3RyYXRlZ3ksIFN1YmdyYXBoU3RyYXRlZ3ksIFByb2R1Y3RpdmVCeVN0cmF0ZWd5LCAKKyAgICAgICAgTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSwgU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSwgVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3ksIAorICAgICAgICBDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5LCBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LCBQcm9maWxlU3RyYXRlZ3ksIElubGluZUZpbHRlclN0cmF0ZWd5LCAKKyAgICAgICAgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSwgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5LCBFbGVtZW50SWRTdHJhdGVneSwgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSwgCisgICAgICAgIEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LCBDb3VudFN0cmF0ZWd5LCBDb25uZWN0aXZlU3RyYXRlZ3ksIEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3ksIAorICAgICAgICBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSwgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3ksIFJlcGVhdFVucm9sbFN0cmF0ZWd5LCAKKyAgICAgICAgUGF0aFJldHJhY3Rpb25TdHJhdGVneSwgUGF0aFByb2Nlc3NvclN0cmF0ZWd5LCBPcmRlckxpbWl0U3RyYXRlZ3ksIE1hdGNoUHJlZGljYXRlU3RyYXRlZ3ksIAorICAgICAgICBMYXp5QmFycmllclN0cmF0ZWd5LCBFYXJseUxpbWl0U3RyYXRlZ3ksIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5LCBJZGVudGl0eVJlbW92YWxTdHJhdGVneSwgCisgICAgICAgIEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5LCBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3kuanMnOworY29uc3QgX18gPSBncmFwaFRyYXZlcnNhbE1vZHVsZS5zdGF0aWNzOworY29uc3QgQmFycmllciA9IHRyYXZlcnNhbE1vZHVsZS5iYXJyaWVyCitjb25zdCBDYXJkaW5hbGl0eSA9IHRyYXZlcnNhbE1vZHVsZS5jYXJkaW5hbGl0eQorY29uc3QgQ2FyZGluYWxpdHlWYWx1ZSA9IGdyYXBoVHJhdmVyc2FsTW9kdWxlLkNhcmRpbmFsaXR5VmFsdWU7Citjb25zdCBDb2x1bW4gPSB0cmF2ZXJzYWxNb2R1bGUuY29sdW1uCitjb25zdCBEaXJlY3Rpb24gPSB7CisgICAgQk9USDogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5ib3RoLAorICAgIElOOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLmluLAorICAgIE9VVDogdHJhdmVyc2FsTW9kdWxlLmRpcmVjdGlvbi5vdXQsCisgICAgZnJvbV86IHRyYXZlcnNhbE1vZHVsZS5kaXJlY3Rpb24ub3V0LAorICAgIHRvOiB0cmF2ZXJzYWxNb2R1bGUuZGlyZWN0aW9uLmluCit9OworY29uc3QgSU8gPSB0cmF2ZXJzYWxNb2R1bGUuSU87Citjb25zdCBEVCA9IHRyYXZlcnNhbE1vZHVsZS5kdDsKK2NvbnN0IEdUeXBlID0gdHJhdmVyc2FsTW9kdWxlLmdUeXBlOworY29uc3QgTWVyZ2UgPSB0cmF2ZXJzYWxNb2R1bGUubWVyZ2U7Citjb25zdCBQID0gdHJhdmVyc2FsTW9kdWxlLlA7Citjb25zdCBQaWNrID0gdHJhdmVyc2FsTW9kdWxlLnBpY2sKK2NvbnN0IFBvcCA9IHRyYXZlcnNhbE1vZHVsZS5wb3AKK2NvbnN0IE9yZGVyID0gdHJhdmVyc2FsTW9kdWxlLm9yZGVyCitjb25zdCBPcGVyYXRvciA9IHRyYXZlcnNhbE1vZHVsZS5vcGVyYXRvcgorY29uc3QgU2NvcGUgPSB0cmF2ZXJzYWxNb2R1bGUuc2NvcGUKK2NvbnN0IFQgPSB0cmF2ZXJzYWxNb2R1bGUudAorY29uc3QgVGV4dFAgPSB0cmF2ZXJzYWxNb2R1bGUuVGV4dFAKK2NvbnN0IFdpdGhPcHRpb25zID0gdHJhdmVyc2FsTW9kdWxlLndpdGhPcHRpb25zCisKK2NvbnN0IGdyZW1saW5zID0geworICAgIGdfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmJyYW5jaChfXy5sYWJlbCgpLmlzKCJwZXJzb24iKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoImxhbmciKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZfYnJhbmNoWGxhYmVsX2lzWHBlcnNvblhfY291bnRYX29wdGlvblgxX19hZ2VYX29wdGlvblgwX19sYW5nWF9vcHRpb25YMF9fbmFtZVhfb3B0aW9uWGFueV9fbGFiZWxYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoInBlcnNvbiIpLmNvdW50KCkpLm9wdGlvbih4eDEsIF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcygibGFuZyIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFBpY2suYW55LCBfXy5sYWJlbCgpKSB9XSwgCisgICAgZ19WX2JyYW5jaFhhZ2VYX29wdGlvblhsdFgzMFhfX3lvdW5nWF9vcHRpb25YZ3RYMzBYX19vbGRYX29wdGlvblhub25lX19vbl90aGVfZWRnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5icmFuY2goX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAubHQoMzApLCBfXy5jb25zdGFudCgieW91bmciKSkub3B0aW9uKFAuZ3QoMzApLCBfXy5jb25zdGFudCgib2xkIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJvbiB0aGUgZWRnZSIpKSB9XSwgCisgICAgZ19WX2JyYW5jaFhpZGVudGl0eVhfb3B0aW9uWGhhc0xhYmVsWHNvZnR3YXJlWF9faW5YY3JlYXRlZFhfbmFtZV9vcmRlcl9mb2xkWF9vcHRpb25YaGFzWG5hbWVfdmFkYXNYX19hZ2VYX29wdGlvblhuZXFYMTIzWF9fYm90aEVfY291bnRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5icmFuY2goX18uaWRlbnRpdHkoKSkub3B0aW9uKF9fLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLCBfXy5pbl8oImNyZWF0ZWQiKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKSkub3B0aW9uKF9fLmhhcygibmFtZSIsICJ2YWRhcyIpLCBfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUC5uZXEoMTIzKSwgX18uYm90aEUoKS5jb3VudCgpKSB9XSwgCisgICAgZ19WX2Nob29zZVhvdXRfY291bnRYX29wdGlvblgyTF9uYW1lWF9vcHRpb25YM0xfYWdlWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKCJhZ2UiKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYb3V0X2NvdW50WF9vcHRpb25YMkxfbmFtZVhfb3B0aW9uWDNMX2FnZVhfb3B0aW9uWG5vbmVfZGlzY2FyZFg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF9hbmRfb3V0WGNyZWF0ZWRYX19vdXRYa25vd3NYX2lkZW50aXR5WF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoInBlcnNvbiIpLmFuZCgpLm91dCgiY3JlYXRlZCIpLCBfXy5vdXQoImtub3dzIiksIF9fLmlkZW50aXR5KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfYW5kX291dFhjcmVhdGVkWF9vdXRYa25vd3NYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5oYXNMYWJlbCgicGVyc29uIikuYW5kKCkub3V0KCJjcmVhdGVkIiksIF9fLm91dCgia25vd3MiKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9jaG9vc2VYbGFiZWxYX29wdGlvblhibGFoX19vdXRYa25vd3NYWF9vcHRpb25YYmxlZXBfX291dFhjcmVhdGVkWFhfb3B0aW9uWG5vbmVfX2lkZW50aXR5WF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ubGFiZWwoKSkub3B0aW9uKCJibGFoIiwgX18ub3V0KCJrbm93cyIpKS5vcHRpb24oImJsZWVwIiwgX18ub3V0KCJjcmVhdGVkIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWFRsYWJlbFhfb3B0aW9uWHBlcnNvbl9fb3V0WGtub3dzWF9uYW1lWF9vcHRpb25YYmxlZXBfY29uc3RhbnRYYmxlZXBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbigicGVyc29uIiwgX18ub3V0KCJrbm93cyIpLnZhbHVlcygibmFtZSIpKS5vcHRpb24oImJsZWVwIiwgX18uY29uc3RhbnQoImJsZWVwIikpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWFRsYWJlbFhfb3B0aW9uWGJsYWhfX291dFhrbm93c1hYX29wdGlvblhibGVlcF9fb3V0WGNyZWF0ZWRYWF9vcHRpb25Ybm9uZV9faWRlbnRpdHlYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oImJsYWgiLCBfXy5vdXQoImtub3dzIikpLm9wdGlvbigiYmxlZXAiLCBfXy5vdXQoImNyZWF0ZWQiKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9jaG9vc2VYVGxhYmVsWF9vcHRpb25YYmxhaF9fb3V0WGtub3dzWFhfb3B0aW9uWGJsZWVwX19vdXRYY3JlYXRlZFhYX29wdGlvblhub25lX2Rpc2NhcmRYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oImJsYWgiLCBfXy5vdXQoImtub3dzIikpLm9wdGlvbigiYmxlZXAiLCBfXy5vdXQoImNyZWF0ZWQiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2Nob29zZVhvdXRYa25vd3NYX2NvdW50X2lzWGd0WDBYWF9fb3V0WGtub3dzWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLm91dCgia25vd3MiKS5jb3VudCgpLmlzKFAuZ3QoMCkpLCBfXy5vdXQoImtub3dzIikpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwMVhfY2hvb3NlWG91dEVYa25vd3NYX19vdXRYa25vd3NYWF9hc1hwMlhfc2VsZWN0WHAxX3AyWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFzKCJwMSIpLmNob29zZShfXy5vdXRFKCJrbm93cyIpLCBfXy5vdXQoImtub3dzIikpLmFzKCJwMiIpLnNlbGVjdCgicDEiLCAicDIiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYYWdlWF9fb3B0aW9uWDI3TF9fY29uc3RhbnRYeW91bmdYWF9vcHRpb25Ybm9uZV9fY29uc3RhbnRYb2xkWFhfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuY2hvb3NlKF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbih4eDEsIF9fLmNvbnN0YW50KCJ5b3VuZyIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgib2xkIikpLmdyb3VwQ291bnQoKSB9XSwgCisgICAgZ19pbmplY3RYMVhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdCgxKS5jaG9vc2UoX18uaXMoeHgxKSwgX18uY29uc3RhbnQoMTApLmZvbGQoKSwgX18uZm9sZCgpKSB9XSwgCisgICAgZ19pbmplY3RYMlhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdCgyKS5jaG9vc2UoX18uaXMoeHgxKSwgX18uY29uc3RhbnQoMTApLmZvbGQoKSwgX18uZm9sZCgpKSB9XSwgCisgICAgZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9jb25zdGFudFh4WFhfb3B0aW9uWGJldHdlZW5YMjBfMzBYX2NvbnN0YW50WHlYWF9vcHRpb25Ybm9uZV9jb25zdGFudFh6WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy5jb25zdGFudCgieCIpKS5vcHRpb24oUC5iZXR3ZWVuKDIwLCAzMCksIF9fLmNvbnN0YW50KCJ5IikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJ6IikpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX29yWGd0WDM0WFhfY29uc3RhbnRYeFhYX29wdGlvblhndFgzNFhfY29uc3RhbnRYeVhYX29wdGlvblhub25lX2NvbnN0YW50WHpYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCkub3IoUC5ndCgzNCkpLCBfXy5jb25zdGFudCgieCIpKS5vcHRpb24oUC5ndCgzNCksIF9fLmNvbnN0YW50KCJ5IikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJ6IikpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZVhfb3B0aW9uWG5vbmVfbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfbG9jYWxYY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVfZm9sZFhfb3B0aW9uWG5vbmVfbmFtZV9mb2xkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5sb2NhbChfXy5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpLmZvbGQoKSkpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfbWFwWGNob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lX2ZvbGRYX29wdGlvblhub25lX25hbWVfZm9sZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikubWFwKF9fLmNob29zZShfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygibmFtZSIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikuZm9sZCgpKSkgfV0sIAorICAgIGdfdW5pb25YVl9WWGhhc0xhYmVsWHBlcnNvblhfYmFycmllcl9sb2NhbFhjaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZV9mb2xkWF9vcHRpb25Ybm9uZV9uYW1lX2ZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzTGFiZWwoInBlcnNvbiIpLmJhcnJpZXIoKS5sb2NhbChfXy5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpLmZvbGQoKSkpIH1dLCAKKyAgICBnX3VuaW9uWFZfVlhoYXNMYWJlbFhwZXJzb25YX2JhcnJpZXJfbWFwWGNob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lX2ZvbGRYX29wdGlvblhub25lX25hbWVfZm9sZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNMYWJlbCgicGVyc29uIikuYmFycmllcigpLm1hcChfXy5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygibmFtZSIpLmZvbGQoKSkpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVYX29wdGlvblhub25lX25hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVYX29wdGlvblhub25lX25hbWVYX29wdGlvblh1bnByb2R1Y3RpdmVfbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18ubGFiZWwoKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZVhfb3B0aW9uWG5vbmVfbmFtZVhfb3B0aW9uWG5vbmVfaWRlbnRpdHlYX29wdGlvblhub25lX2ZhaWxYX29wdGlvblh1bnByb2R1Y3RpdmVfaWRlbnRpdHlYX29wdGlvblh1bnByb2R1Y3RpdmVfbGFiZWxYX29wdGlvblhub25lX2ZhaWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmZhaWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uZmFpbCgpKSB9XSwgCisgICAgZ19WX2Nob29zZVhhZ2VfbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy52YWx1ZXMoImFnZSIpLCBfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZVhfb3B0aW9uWG5vbmVfZGlzY2FyZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygibmFtZSIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIH1dLCAKKyAgICBnX1ZfY2hvb3NlWG5hbWVYX29wdGlvblhuZXFYeVhfYWdlWF9vcHRpb25Ybm9uZV9jb25zdGFudFh4WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKFAubmVxKCJ5IiksIF9fLnZhbHVlcygiYWdlIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCJ4IikpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYb3V0WGNyZWF0ZWRYX2NvdW50X2lzWGVxWDBYWF9fY29uc3RhbnRYZGlkbnRfY3JlYXRlWF9fY29uc3RhbnRYY3JlYXRlZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuY2hvb3NlKF9fLm91dCgiY3JlYXRlZCIpLmNvdW50KCkuaXMoUC5lcSgwKSksIF9fLmNvbnN0YW50KCJkaWRudF9jcmVhdGUiKSwgX18uY29uc3RhbnQoImNyZWF0ZWQiKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVh2YWx1ZXNYYWdlWF9pc1hndFgzMFhYX192YWx1ZXNYYWdlWF9fY29uc3RhbnRYMzBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMzApKSwgX18udmFsdWVzKCJhZ2UiKSwgX18uY29uc3RhbnQoMzApKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhfYW5kX3ZhbHVlc1hhZ2VYX2lzWGx0WDM1WFhfX3ZhbHVlc1huYW1lWF9fY29uc3RhbnRYb3RoZXJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMjkpKS5hbmQoKS52YWx1ZXMoImFnZSIpLmlzKFAubHQoMzUpKSwgX18udmFsdWVzKCJuYW1lIiksIF9fLmNvbnN0YW50KCJvdGhlciIpKSB9XSwgCisgICAgZ19WX2Nob29zZVhoYXNYbmFtZV92YWRhc1hfX3ZhbHVlc1huYW1lWF9fdmFsdWVzWGFnZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18uaGFzKCJuYW1lIiwgInZhZGFzIiksIF9fLnZhbHVlcygibmFtZSIpLCBfXy52YWx1ZXMoImFnZSIpKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWG91dFhjcmVhdGVkWF9jb3VudFhfb3B0aW9uWDBfX2NvbnN0YW50WG5vbmVYWF9vcHRpb25YMV9fY29uc3RhbnRYb25lWFhfb3B0aW9uWDJfX2NvbnN0YW50WG1hbnlYWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MCwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy5vdXQoImNyZWF0ZWQiKS5jb3VudCgpKS5vcHRpb24oeHgwLCBfXy5jb25zdGFudCgibm9uZSIpKS5vcHRpb24oeHgxLCBfXy5jb25zdGFudCgib25lIikpLm9wdGlvbih4eDIsIF9fLmNvbnN0YW50KCJtYW55IikpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYbG9jYWxYb3V0WGtub3dzWF9jb3VudFhfX29wdGlvblgwX19jb25zdGFudFhub0ZyaWVuZHNYWF9fb3B0aW9uWG5vbmVfX2NvbnN0YW50WGhhc0ZyaWVuZHNYWFg6IFtmdW5jdGlvbih7ZywgeHgwfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy5sb2NhbChfXy5vdXQoImtub3dzIikuY291bnQoKSkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KCJub0ZyaWVuZHMiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoImhhc0ZyaWVuZHMiKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYb3V0RV9jb3VudFhfb3B0aW9uWDBfX2NvbnN0YW50WG5vbmVYWF9vcHRpb25Ybm9uZV9fY29uc3RhbnRYc29tZVhYOiBbZnVuY3Rpb24oe2csIHh4MH0pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5vdXRFKCkuY291bnQoKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoIm5vbmUiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoInNvbWUiKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYbGFiZWxYX29wdGlvblhwZXJzb25fX2Nob29zZVhhZ2VYX29wdGlvblhQX2x0XzMwX19jb25zdGFudFh5b3VuZ1hYX29wdGlvblhQX2d0ZV8zMF9fY29uc3RhbnRYb2xkWFhYX29wdGlvblhzb2Z0d2FyZV9fY29uc3RhbnRYcHJvZ3JhbVhYX29wdGlvblhub25lX19jb25zdGFudFh1bmtub3duWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5sYWJlbCgpKS5vcHRpb24oInBlcnNvbiIsIF9fLmNob29zZShfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUC5sdCgzMCksIF9fLmNvbnN0YW50KCJ5b3VuZyIpKS5vcHRpb24oUC5ndGUoMzApLCBfXy5jb25zdGFudCgib2xkIikpKS5vcHRpb24oInNvZnR3YXJlIiwgX18uY29uc3RhbnQoInByb2dyYW0iKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoInVua25vd24iKSkgfV0sIAorICAgIGdfVl9jaG9vc2VYaGFzWG5hbWVfdmFkYXNYX192YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18uaGFzKCJuYW1lIiwgInZhZGFzIiksIF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYWdlX2Nob29zZVhQX2VxWDI5WF9jb25zdGFudFhtYXRjaGVkWF9jb25zdGFudFhvdGhlclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJhZ2UiKS5jaG9vc2UoUC5lcSgyOSksIF9fLmNvbnN0YW50KCJtYXRjaGVkIiksIF9fLmNvbnN0YW50KCJvdGhlciIpKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYWdlX2Nob29zZVhQX2VxWDI5WF9jb25zdGFudFhtYXRjaGVkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygiYWdlIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudCgibWF0Y2hlZCIpKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWF92YWx1ZXNYbmFtZVhfb3B0aW9uMVhfaXNYbWFya29YX3ZhbHVlc1hhZ2VYWF9vcHRpb24yWG5vbmVfdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZShfXy52YWx1ZXMoIm5hbWUiKSkub3B0aW9uKF9fLmlzKCJtYXJrbyIpLCBfXy52YWx1ZXMoImFnZSIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhfdmFsdWVzWG5hbWVYX29wdGlvbjFYX1BlcVhtYXJrb1hfdmFsdWVzWGFnZVhYX29wdGlvbjJYbm9uZV92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuY2hvb3NlKF9fLnZhbHVlcygibmFtZSIpKS5vcHRpb24oUC5lcSgibWFya28iKSwgX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZfbG9jYWxYcHJvcGVydGllc1hsb2NhdGlvblhfb3JkZXJfYnlYdmFsdWVYX2xpbWl0WDJYWF92YWx1ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18ucHJvcGVydGllcygibG9jYXRpb24iKS5vcmRlcigpLmJ5KFQudmFsdWUsIE9yZGVyLmFzYykucmFuZ2UoMCwgMikpLnZhbHVlKCkgfV0sIAorICAgIGdfVl9oYXNYbGFiZWxfcGVyc29uWF9hc1hhWF9sb2NhbFhvdXRYY3JlYXRlZFhfYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5WGlkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKFQubGFiZWwsICJwZXJzb24iKS5hcygiYSIpLmxvY2FsKF9fLm91dCgiY3JlYXRlZCIpLmFzKCJiIikpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKS5ieShULmlkKSB9XSwgCisgICAgZ19WX2xvY2FsWG91dEVfY291bnRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkgfV0sIAorICAgIGdfVlgxWF9sb2NhbFhvdXRFWGtub3dzWF9saW1pdFgxWFhfaW5WX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5sb2NhbChfXy5vdXRFKCJrbm93cyIpLmxpbWl0KDEpKS5pblYoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2xvY2FsWGJvdGhFWGNyZWF0ZWRYX2xpbWl0WDFYWF9vdGhlclZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYm90aEUoImNyZWF0ZWQiKS5saW1pdCgxKSkub3RoZXJWKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlg0WF9sb2NhbFhib3RoRVgxX2NyZWF0ZWRYX2xpbWl0WDFYWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCJjcmVhdGVkIikubGltaXQoMSkpIH1dLCAKKyAgICBnX1ZYNFhfbG9jYWxYYm90aEVYa25vd3NfY3JlYXRlZFhfbGltaXRYMVhYOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkubG9jYWwoX18uYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkgfV0sIAorICAgIGdfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFhfb3RoZXJWX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDRYX2xvY2FsWGJvdGhFX2xpbWl0WDJYWF9vdGhlclZfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMikpLm90aGVyVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfbG9jYWxYaW5FWGtub3dzWF9saW1pdFgyWFhfb3V0Vl9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5pbkUoImtub3dzIikubGltaXQoMikpLm91dFYoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2xvY2FsWG1hdGNoWHByb2plY3RfX2NyZWF0ZWRfcGVyc29uX19wZXJzb25fbmFtZV9uYW1lWF9zZWxlY3RYbmFtZV9wcm9qZWN0WF9ieV9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXMoInByb2plY3QiKS5pbl8oImNyZWF0ZWQiKS5hcygicGVyc29uIiksIF9fLmFzKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5hcygibmFtZSIpKSkuc2VsZWN0KCJuYW1lIiwgInByb2plY3QiKS5ieSgpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl9pbl9iYXJyaWVyX2xvY2FsWGNvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaW5fKCkuYmFycmllcigpLmxvY2FsKF9fLmNvdW50KCkpIH1dLCAKKyAgICBnX1ZfbG9jYWxYb3V0X2luX3NpbXBsZVBhdGhYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm91dCgpLmluXygpLnNpbXBsZVBhdGgoKSkucGF0aCgpIH1dLCAKKyAgICBnX3dpdGhTYWNrWDBMWF9WX2luX2JhcnJpZXJfbG9jYWxYc2Fja1hzdW1YX2J5WGFnZVhYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMCkuVigpLmluXygpLmJhcnJpZXIoKS5sb2NhbChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoImFnZSIpKS5zYWNrKCkgfV0sIAorICAgIGdfVl9sb2NhbFhvdXRfbG9jYWxYY291bnRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18ub3V0KCkubG9jYWwoX18uY291bnQoKSkpIH1dLCAKKyAgICBnX1ZfdW5pb25Yb3V0RV9jb3VudF9sb2NhbFhpbkVfY291bnRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW5pb24oX18ub3V0RSgpLmNvdW50KCksIF9fLmxvY2FsKF9fLmluRSgpLmNvdW50KCkpKSB9XSwgCisgICAgZ19WWDJYX29wdGlvbmFsWG91dFhrbm93c1hYOiBbZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikub3B0aW9uYWwoX18ub3V0KCJrbm93cyIpKSB9XSwgCisgICAgZ19WWDJYX29wdGlvbmFsWGluWGtub3dzWFg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5vcHRpb25hbChfXy5pbl8oImtub3dzIikpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9vcHRpb25hbFhvdXRYa25vd3NYX29wdGlvbmFsWG91dFhjcmVhdGVkWFhYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcHRpb25hbChfXy5vdXQoImtub3dzIikub3B0aW9uYWwoX18ub3V0KCJjcmVhdGVkIikpKS5wYXRoKCkgfV0sIAorICAgIGdfVl9vcHRpb25hbFhvdXRfb3B0aW9uYWxYb3V0WFhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3B0aW9uYWwoX18ub3V0KCkub3B0aW9uYWwoX18ub3V0KCkpKS5wYXRoKCkgfV0sIAorICAgIGdfVlgxWF9vcHRpb25hbFhhZGRWWGRvZ1hYX2xhYmVsOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vcHRpb25hbChfXy5hZGRWKCJkb2ciKSkubGFiZWwoKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfZW1pdF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmVtaXQoKS5wYXRoKCkgfV0sIAorICAgIGdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9yZXBlYXRYaW5YX3RpbWVzWDJYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucmVwZWF0KF9fLmluXygpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3JlcGVhdFhvdXRFX2luVlhfdGltZXNYMlhfcGF0aF9ieV9uYW1lX2J5X2xhYmVsOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0RSgpLmluVigpKS50aW1lcygyKS5wYXRoKCkuYnkoIm5hbWUiKS5ieShULmxhYmVsKSB9XSwgCisgICAgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfZW1pdDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkgfV0sIAorICAgIGdfVlgxWF90aW1lc1gyWF9yZXBlYXRYb3V0WF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2VtaXRfdGltZXNYMlhfcmVwZWF0WG91dFhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkucGF0aCgpIH1dLCAKKyAgICBnX1ZfZW1pdF9yZXBlYXRYb3V0WF90aW1lc1gyWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbWl0KCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5wYXRoKCkgfV0sIAorICAgIGdfVlgxWF9lbWl0WGhhc1hsYWJlbF9wZXJzb25YWF9yZXBlYXRYb3V0WF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuZW1pdChfXy5oYXMoVC5sYWJlbCwgInBlcnNvbiIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGdyb3VwQ291bnRYbVhfYnlYbmFtZVhfb3V0WF90aW1lc1gyWF9jYXBYbVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KCJtIikuYnkoIm5hbWUiKS5vdXQoKSkudGltZXMoMikuY2FwKCJtIikgfV0sIAorICAgIGdfVlgxWF9yZXBlYXRYZ3JvdXBDb3VudFhtWF9ieVhsb29wc1hfb3V0WF90aW1lc1gzWF9jYXBYbVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5yZXBlYXQoX18uZ3JvdXBDb3VudCgibSIpLmJ5KF9fLmxvb3BzKCkpLm91dCgpKS50aW1lcygzKS5jYXAoIm0iKSB9XSwgCisgICAgZ19WX3JlcGVhdFhib3RoWF90aW1lc1gxMFhfYXNYYVhfb3V0X2FzWGJYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygxMCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuY291bnQoKSB9XSwgCisgICAgZ19WWDFYX3JlcGVhdFhvdXRYX3VudGlsWG91dEVfY291bnRfaXNYMFhYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWF9yZXBlYXRYb3V0RV9pblZfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhfcGF0aF9ieVhuYW1lWF9ieVhsYWJlbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnJlcGVhdChfXy5vdXRFKCkuaW5WKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicmlwcGxlIikpLnBhdGgoKS5ieSgibmFtZSIpLmJ5KFQubGFiZWwpIH1dLCAKKyAgICBnX1ZfaGFzWGxvb3BfbmFtZV9sb29wWF9yZXBlYXRYaW5YX3RpbWVzWDVYX3BhdGhfYnlfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJsb29wcyIsICJuYW1lIiwgImxvb3AiKS5yZXBlYXQoX18uaW5fKCkpLnRpbWVzKDUpLnBhdGgoKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVfZGVzY1hYX3RpbWVzWDFYWF90aW1lc1gxWF9saW1pdFgxWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiLCBPcmRlci5kZXNjKSkudGltZXMoMSkpLnRpbWVzKDEpLmxpbWl0KDEpLnBhdGgoKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dFhrbm93c1hYX3VudGlsWHJlcGVhdFhvdXRYY3JlYXRlZFhYX2VtaXRYaGFzWG5hbWVfbG9wWFhYX3BhdGhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoImtub3dzIikpLnVudGlsKF9fLnJlcGVhdChfXy5vdXQoImNyZWF0ZWQiKSkuZW1pdChfXy5oYXMoIm5hbWUiLCAibG9wIikpKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX3JlcGVhdFhyZXBlYXRYb3V0X2NyZWF0ZWRYWF91bnRpbFhoYXNYbmFtZV9yaXBwbGVYWFhlbWl0X2xhbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KCJjcmVhdGVkIikpLnVudGlsKF9fLmhhcygibmFtZSIsICJyaXBwbGUiKSkpLmVtaXQoKS52YWx1ZXMoImxhbmciKSB9XSwgCisgICAgZ19WX3VudGlsWGNvbnN0YW50WHRydWVYWF9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bnRpbChfXy5jb25zdGFudCh0cnVlKSkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoImNyZWF0ZWQiKSkudW50aWwoX18uaGFzKCJuYW1lIiwgInJpcHBsZSIpKSkuZW1pdCgpLnZhbHVlcygibGFuZyIpIH1dLCAKKyAgICBnX1ZfZW1pdF9yZXBlYXRYYV9vdXRYa25vd3NfZmlsdGVyWGxvb3BzX2lzWDBYWF9sYW5nOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbWl0KCkucmVwZWF0KCJhIiwgX18ub3V0KCJrbm93cyIpLmZpbHRlcihfXy5sb29wcygiYSIpLmlzKDApKSkudmFsdWVzKCJsYW5nIikgfV0sIAorICAgIGdfVlgzWF9yZXBlYXRYYm90aFhfY3JlYXRlZFhYX3VudGlsWGxvb3BzX2lzXzQwWFhlbWl0X3JlcGVhdFhpbl9rbm93c1hYX2VtaXRfbG9vcHNYaXNYMVhkZWR1cF92YWx1ZXM6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5yZXBlYXQoX18uYm90aCgiY3JlYXRlZCIpKS51bnRpbChfXy5sb29wcygpLmlzKDQwKSkuZW1pdChfXy5yZXBlYXQoX18uaW5fKCJrbm93cyIpKS5lbWl0KF9fLmxvb3BzKCkuaXMoMSkpKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfcmVwZWF0WHJlcGVhdFh1bmlvblhvdXRfdXNlc19vdXRfdHJhdmVyc2VzWFhfd2hlcmVYbG9vcHNfaXNYMFhfdGltZXNYMVhfdGltZVgyWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoInVzZXMiKSwgX18ub3V0KCJ0cmF2ZXJzZXMiKSkud2hlcmUoX18ubG9vcHMoKS5pcygwKSkpLnRpbWVzKDEpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3JlcGVhdFhhX291dFhrbm93c19yZXBlYXRYYl9vdXRYY3JlYXRlZFhfZmlsdGVyWGxvb3BzX2lzWDBYWF9lbWl0X2xhbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdCgiYSIsIF9fLm91dCgia25vd3MiKS5yZXBlYXQoImIiLCBfXy5vdXQoImNyZWF0ZWQiKS5maWx0ZXIoX18ubG9vcHMoImEiKS5pcygwKSkpLmVtaXQoKSkuZW1pdCgpLnZhbHVlcygibGFuZyIpIH1dLCAKKyAgICBnX1ZYNlhfcmVwZWF0WGFfYm90aFhjcmVhdGVkWF9zaW1wbGVQYXRoWF9lbWl0WHJlcGVhdFhiX2JvdGhYa25vd3NYWF91bnRpbFhsb29wc1hiWF9hc1hiX3doZXJlWGxvb3BzWGFYX2FzWGJYX2hhc1huYW1lX3ZhZGFzWFhfZGVkdXBfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLnJlcGVhdCgiYSIsIF9fLmJvdGgoImNyZWF0ZWQiKS5zaW1wbGVQYXRoKCkpLmVtaXQoX18ucmVwZWF0KCJiIiwgX18uYm90aCgia25vd3MiKSkudW50aWwoX18ubG9vcHMoImIiKS5hcygiYiIpLndoZXJlKF9fLmxvb3BzKCJhIikuYXMoImIiKSkpLmhhcygibmFtZSIsICJ2YWRhcyIpKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfZW1pdDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpIH1dLCAKKyAgICBnX1ZfdW50aWxYaWRlbnRpdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bnRpbChfXy5pZGVudGl0eSgpKSB9XSwgCisgICAgZ19WX3RpbWVzWDVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS50aW1lcyg1KSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfcmVwZWF0WG91dFhjcmVhdGVkWFhfdGltZXNYMVhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnJlcGVhdChfXy5vdXQoImNyZWF0ZWQiKSkudGltZXMoMSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3JlcGVhdFhvdXRYY3JlYXRlZFhYX3RpbWVzWDBYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5yZXBlYXQoX18ub3V0KCJjcmVhdGVkIikpLnRpbWVzKDApLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF90aW1lc1gxWF9yZXBlYXRYb3V0WGNyZWF0ZWRYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikudGltZXMoMSkucmVwZWF0KF9fLm91dCgiY3JlYXRlZCIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfdGltZXNYMFhfcmVwZWF0WG91dFhjcmVhdGVkWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnRpbWVzKDApLnJlcGVhdChfXy5vdXQoImNyZWF0ZWQiKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9yZXBlYXRYYm90aF9oYXNYbm90X3Byb2R1Y3RpdmVYWF90aW1lc1gzWF9jb25zdGFudFgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoIm5vdCIsICJwcm9kdWN0aXZlIikpLnRpbWVzKDMpLmNvbnN0YW50KDEpIH1dLCAKKyAgICBnX1ZfaGFzWG5vdF9wcm9kdWN0aXZlWF9yZXBlYXRYYm90aFhfdGltZXNYM1hfY29uc3RhbnRYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibm90IiwgInByb2R1Y3RpdmUiKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5jb25zdGFudCgxKSB9XSwgCisgICAgZ19WWDFfMl8zWF9yZXBlYXRYYm90aF9iYXJyaWVyWF9lbWl0X3RpbWVzWDJYX3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxLCB2aWQyLCB2aWQzKS5yZXBlYXQoX18uYm90aCgpLmJhcnJpZXIoKSkuZW1pdCgpLnRpbWVzKDIpLnBhdGgoKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WG5hbWVfZGVzY1hfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aF9vcmRlcl9ieVhuYW1lX2Rlc2NYWF90aW1lc1gyWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuZGVzYykucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkub3JkZXIoKS5ieSgibmFtZSIsIE9yZGVyLmRlc2MpKS50aW1lcygyKS5wYXRoKCkgfV0sIAorICAgIGdfVl9yZXBlYXRYYm90aF9yZXBlYXRYb3JkZXJfYnlYbmFtZVhYX3RpbWVzWDFYWF90aW1lc1gxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5yZXBlYXQoX18ub3JkZXIoKS5ieSgibmFtZSIpKS50aW1lcygxKSkudGltZXMoMSkgfV0sIAorICAgIGdfVl9vcmRlcl9ieVhuYW1lX2Rlc2NYX3JlcGVhdFhsb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhYWF90aW1lc1gxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibmFtZSIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikpKS50aW1lcygxKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WG5hbWVYX3JlcGVhdFhsb2NhbFhib3RoX3NpbXBsZVBhdGhfb3JkZXJfYnlYbmFtZVhYWF90aW1lc1gyWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikucmVwZWF0KF9fLmxvY2FsKF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkub3JkZXIoKS5ieSgibmFtZSIpKSkudGltZXMoMikucGF0aCgpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WHVuaW9uWG91dFhrbm93c1hfb3JkZXJfYnlYbmFtZVhfaW5YY3JlYXRlZFhfb3JkZXJfYnlYbmFtZVhYWF90aW1lc1gxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLm91dCgia25vd3MiKS5vcmRlcigpLmJ5KCJuYW1lIiksIF9fLmluXygiY3JlYXRlZCIpLm9yZGVyKCkuYnkoIm5hbWUiKSkpLnRpbWVzKDEpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGFkZFZfcHJvcGVydHlYZ2VuZXJhdGVkX3RydWVYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoIm5vdEdlbmVyYXRlZCIsICJ0cnVlIikuYWRkVigpLnByb3BlcnR5KCJub3RHZW5lcmF0ZWQiLCAidHJ1ZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmFkZFYoKS5wcm9wZXJ0eSgiZ2VuZXJhdGVkIiwgInRydWUiKSkudGltZXMoMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5vdEdlbmVyYXRlZCIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJnZW5lcmF0ZWQiKSB9XSwgCisgICAgZ19WX3JlcGVhdFhkZWR1cF9ib3RoWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkuYm90aCgpKS50aW1lcygyKSB9XSwgCisgICAgZ19WX3JlcGVhdFhhZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX3NlbGVjdFh4WF9saW1pdFgxWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoIngiKSkudGltZXMoMikuc2VsZWN0KCJ4IikubGltaXQoMSkudW5mb2xkKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYc3RyWF9yZXBlYXRYc3BsaXRYYWJjWF9jb25qb2luWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoInN0ciIsICJhYmFiY2N6YWJhYmNjIikuYWRkVigpLnByb3BlcnR5KCJzdHIiLCAiYWJjeWFiYyIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJzdHIiKS5yZXBlYXQoX18uc3BsaXQoImFiYyIpLmNvbmpvaW4oIiIpKS50aW1lcygyKSB9XSwgCisgICAgZ193aXRoU2Fja1gwWF9WX3JlcGVhdFhzYWNrWHN1bVhfYnlYYWdlWF93aGVyZVhzYWNrX2lzWGx0WDU5WFhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygwKS5WKCkucmVwZWF0KF9fLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgiYWdlIikud2hlcmUoX18uc2FjaygpLmlzKFAubHQoNTkpKSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGluamVjdFh5WFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5pbmplY3QoInkiKSkudGltZXMoMikgfV0sIAorICAgIGdfVl9yZXBlYXRYdW5pb25YY29uc3RhbnRYeVhfbGltaXRYMVhfaWRlbnRpdHlYWF90aW1lc1gzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLmNvbnN0YW50KCJ5IikubGltaXQoMSksIF9fLmlkZW50aXR5KCkpKS50aW1lcygyKSB9XSwgCisgICAgZ19WWDNYX3JlcGVhdFhvdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF90YWlsWDJYWF90aW1lc1gxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikudGFpbCgyKSkudGltZXMoMSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlgzWF9yZXBlYXRYb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfdGFpbFgyWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDN9KSB7IHJldHVybiBnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoInBlcmZvcm1hbmNlcyIpLnRhaWwoMikpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMlhfcmVwZWF0WG91dF9sb2NhbFhvcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3RhaWxYMVhYWF90aW1lc1gxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikudGFpbCgxKSkpLnRpbWVzKDEpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMjUwWF9yZXBlYXRYb3V0X2xvY2FsWG9yZGVyX2J5WHBlcmZvcm1hbmNlc1hfdGFpbFgxWFhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQyNTB9KSB7IHJldHVybiBnLlYodmlkMjUwKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikudGFpbCgxKSkpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYM1hfcmVwZWF0WG91dF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3RhaWxYM1hfbGltaXRYMVhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQzfSkgeyByZXR1cm4gZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiKS50YWlsKDMpLmxpbWl0KDEpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDNYX3JlcGVhdFhvdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2xpbWl0WDVYX3RhaWxYMVhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQzfSkgeyByZXR1cm4gZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiLCBPcmRlci5kZXNjKS5saW1pdCg1KS50YWlsKDEpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDNYX3JlcGVhdFhvdXRFX29yZGVyX2J5WHdlaWdodFhfdGFpbFgyWF9pblZYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQzfSkgeyByZXR1cm4gZy5WKHZpZDMpLnJlcGVhdChfXy5vdXRFKCkub3JkZXIoKS5ieSgid2VpZ2h0IikudGFpbCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlgzWF9yZXBlYXRYb3V0RV9vcmRlcl9ieVh3ZWlnaHRfZGVzY1hfbGltaXRYMlhfaW5WWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoIndlaWdodCIsIE9yZGVyLmRlc2MpLmxpbWl0KDIpLmluVigpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2VtaXRfcmVwZWF0WG91dF9vcmRlcl9ieVhuYW1lWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbWl0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9sb2NhbFhlbWl0X3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZVhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfVl9lbWl0X3JlcGVhdFhsb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9sb2NhbFhlbWl0X3JlcGVhdFhsb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ19WX2VtaXRYaGFzTGFiZWxYcGVyc29uWFhfcmVwZWF0WG91dF9vcmRlcl9ieVhuYW1lWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbWl0KF9fLmhhc0xhYmVsKCJwZXJzb24iKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl91bnRpbFhsb29wc19pc1gyWFhfcmVwZWF0WG91dF9vcmRlcl9ieVhuYW1lWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2VtaXRfcmVwZWF0WGRlZHVwWF90aW1lc1gxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygxKSB9XSwgCisgICAgZ19WX2VtaXRfcmVwZWF0WGRlZHVwWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygyKSB9XSwgCisgICAgZ191bmlvblhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKCkgfV0sIAorICAgIGdfdW5pb25YVl9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLlYoKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfdW5pb25YVlh2MVhfVlg0WFhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQ0LCB2aWQxfSkgeyByZXR1cm4gZy51bmlvbihfXy5WKHZpZDEpLCBfXy5WKHZpZDQpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ191bmlvblhWX2hhc0xhYmVsWHNvZnR3YXJlWF9WX2hhc0xhYmVsWHBlcnNvblhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18uVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLCBfXy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ191bmlvblhWX291dF9vdXRfVl9oYXNMYWJlbFhzb2Z0d2FyZVhYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikpLnBhdGgoKSB9XSwgCisgICAgZ191bmlvblhWX291dF9vdXRfVl9oYXNMYWJlbFhzb2Z0d2FyZVhYX3BhdGhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikpLnBhdGgoKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX3VuaW9uWHVuaW9uWFZfb3V0X291dFhfVl9oYXNMYWJlbFhzb2Z0d2FyZVhYX3BhdGhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCisgICAgZ191bmlvblhpbmplY3RYMVhfaW5qZWN0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLmluamVjdCgxKSwgX18uaW5qZWN0KDIpKSB9XSwgCisgICAgZ19WX3VuaW9uWGNvbnN0YW50WDFYX2NvbnN0YW50WDJYX2NvbnN0YW50WDNYWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLnVuaW9uKF9fLmNvbnN0YW50KDEpLCBfXy5jb25zdGFudCgyKSwgX18uY29uc3RhbnQoMykpIH1dLCAKKyAgICBnX1ZfdW5pb25Yb3V0X19pblhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW5pb24oX18ub3V0KCksIF9fLmluXygpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX3VuaW9uWHJlcGVhdFhvdXRYX3RpbWVzWDJYX19vdXRYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLCBfXy5vdXQoKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9jaG9vc2VYbGFiZWxfaXNfcGVyc29uX191bmlvblhfX291dF9sYW5nX19vdXRfbmFtZVhfX2luX2xhYmVsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoInBlcnNvbiIpLCBfXy51bmlvbihfXy5vdXQoKS52YWx1ZXMoImxhbmciKSwgX18ub3V0KCkudmFsdWVzKCJuYW1lIikpLCBfXy5pbl8oKS5sYWJlbCgpKSB9XSwgCisgICAgZ19WX2Nob29zZVhsYWJlbF9pc19wZXJzb25fX3VuaW9uWF9fb3V0X2xhbmdfX291dF9uYW1lWF9faW5fbGFiZWxYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKCJwZXJzb24iKSwgX18udW5pb24oX18ub3V0KCkudmFsdWVzKCJsYW5nIiksIF9fLm91dCgpLnZhbHVlcygibmFtZSIpKSwgX18uaW5fKCkubGFiZWwoKSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdW5pb25YcmVwZWF0WHVuaW9uWG91dFhjcmVhdGVkWF9faW5YY3JlYXRlZFhYX3RpbWVzWDJYX19yZXBlYXRYdW5pb25YaW5YY3JlYXRlZFhfX291dFhjcmVhdGVkWFhfdGltZXNYMlhYX2xhYmVsX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoImNyZWF0ZWQiKSwgX18uaW5fKCJjcmVhdGVkIikpKS50aW1lcygyKSwgX18ucmVwZWF0KF9fLnVuaW9uKF9fLmluXygiY3JlYXRlZCIpLCBfXy5vdXQoImNyZWF0ZWQiKSkpLnRpbWVzKDIpKS5sYWJlbCgpLmdyb3VwQ291bnQoKSB9XSwgCisgICAgZ19WWDFfMlhfdW5pb25Yb3V0RV9jb3VudF9faW5FX2NvdW50X19vdXRFX3dlaWdodF9zdW1YOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSwgdmlkMikudW5pb24oX18ub3V0RSgpLmNvdW50KCksIF9fLmluRSgpLmNvdW50KCksIF9fLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpKSB9XSwgCisgICAgZ19WWDFfMlhfbG9jYWxYdW5pb25Yb3V0RV9jb3VudF9faW5FX2NvdW50X19vdXRFX3dlaWdodF9zdW1YWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEsIHZpZDIpLmxvY2FsKF9fLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkpIH1dLCAKKyAgICBnX1ZYMV8yWF9sb2NhbFh1bmlvblhjb3VudFhYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18uY291bnQoKSkpIH1dLCAKKyAgICBnX3VuaW9uWGFkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2FsaWNlWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9ib2JYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2NocmlzWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIiksIF9fLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLCBfXy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJjaHJpcyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWF9oYXNMYWJlbFhwZXJzb25YX3VuaW9uWF93aGVyZVhfb3V0X2NvdW50X2lzWGd0WDJYWFhfdmFsdWVzWGFnZVhfbm90WF93aGVyZVhfYm90aEVfY291bnRfaXNYZ3QyWFhYX3ZhbHVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnVuaW9uKF9fLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3QoMikpKS52YWx1ZXMoImFnZSIpLCBfXy5ub3QoX18ud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndCgyKSkpKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTIzKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9tYXRoWGFkZFgwXzVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLm1hdGgoIl8gKyAwLjUiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfaXNYZ3RYMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5pcyhQLmd0KDApKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDIpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMykuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA0KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLnN1bSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9taW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA1KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDEwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLm1pbigpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNykuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxNCkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5tYXgoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYbWF0aFhtdWxYMTBYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA2KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLnByb2plY3QoIm9yaWdpbmFsIiwgIm11bHRpcGxpZWQiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKCJfICogMTAiKSkgfV0sIAorICAgIGdfaW5qZWN0WDk5WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDk5KS5hc051bWJlcihHVHlwZS5iaWdEZWNpbWFsKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDQ1NikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9tYXRoWG11bFgxMDAwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxMDApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLm1hdGgoIl8gKiAxMDAwIikgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9pc1hlcVg0MlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNDIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLmlzKFAuZXEoNDIpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxMCkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyMCkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAzMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkuc3VtKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9taW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxNSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkubWluKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTAwKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDIwMCkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAzMDApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLm1heCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYbWF0aFhhZGRYOTk5WFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNTApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLnByb2plY3QoIm9yaWdpbmFsIiwgImFkZGVkIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgiXyArIDk5OSIpKSB9XSwgCisgICAgZ19pbmplY3RYNzc3WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg3NzcpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX21hdGhYYWRkWDIwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpLmlzKFAudHlwZU9mKEdUeXBlLmJ5dGUpKS5tYXRoKCJfICsgMjAiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfaXNYbHRYMTBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDcpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkuaXMoUC5sdCgxMCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImludCIsIDMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkuc3VtKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDJYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCA4KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiaW50IikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLnByb2plY3QoIm9yaWdpbmFsIiwgImRvdWJsZWQiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKCJfICogMiIpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfY2hvb3NlWGlzWGVxWDEyWFhfY29uc3RhbnRYdHdlbHZlWF9jb25zdGFudFhvdGhlclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkuY2hvb3NlKF9fLmlzKFAuZXEoMTIpKSwgX18uY29uc3RhbnQoInR3ZWx2ZSIpLCBfXy5jb25zdGFudCgib3RoZXIiKSkgfV0sIAorICAgIGdfaW5qZWN0WDE1WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDE1KS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImV2ZW50IikucHJvcGVydHkoImRhdGV0aW1lIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkYXRldGltZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGRhdGVBZGRYRFRfZGF5WDFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJldmVudCIpLnByb3BlcnR5KCJkYXRldGltZSIsIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZGF0ZXRpbWUiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpLnByb2plY3QoIm9yaWdpbmFsIiwgIm5leHREYXkiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5kYXRlQWRkKERULmRheSwgMSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9kYXRlRGlmZlhkYXRldGltZVgyMDIzXzA4XzEwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZXZlbnQiKS5wcm9wZXJ0eSgiZGF0ZXRpbWUiLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRhdGV0aW1lIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5kYXRlRGlmZihuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMDozMFonKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX3doZXJlWGlzWGd0WGRhdGV0aW1lWDIwMjBfMDFfMDFYWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImV2ZW50IikucHJvcGVydHkoImRhdGV0aW1lIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMTI6MzQ6NTZaJykpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkYXRldGltZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkud2hlcmUoX18uaXMoUC5ndChuZXcgRGF0ZSgnMjAyMC0wMS0wMVQwMDowMFonKSkpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfY2hvb3NlWGlzWGVxWGRhdGV0aW1lWDIwMjNfMDhfMDhYWFhYX2NvbnN0YW50WG1hdGNoWF9jb25zdGFudFhub01hdGNoWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZXZlbnQiKS5wcm9wZXJ0eSgiZGF0ZXRpbWUiLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRhdGV0aW1lIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5jaG9vc2UoX18uaXMoUC5lcShuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkpLCBfXy5jb25zdGFudCgibWF0Y2giKSwgX18uY29uc3RhbnQoIm5vTWF0Y2giKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2xvY2FsWGFnZ3JlZ2F0ZVhhWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZXZlbnQiKS5wcm9wZXJ0eSgiZGF0ZXRpbWUiLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRhdGV0aW1lIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfaW5qZWN0WGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9hZ2dyZWdhdGVYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5hZ2dyZWdhdGUoImEiKS5jYXAoImEiKSB9XSwgCisgICAgZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTA4VDEyOjM0OjU2WicpKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpLmdyb3VwQ291bnQoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDEuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRvdWJsZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpIH1dLCAKKyAgICBnX0VfdmFsdWVzWHdlaWdodFhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS52YWx1ZXMoIndlaWdodCIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21hdGhYY2VpbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAyLjcpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5tYXRoKCJjZWlsIF8iKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9pc1hndFgxXzBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDAuOCkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAxLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5pcyhQLmd0KDEuMCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAxLjUpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMi41KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDMuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRvdWJsZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpLnN1bSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21pblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAwLjEpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMC41KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDAuOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRvdWJsZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpLm1pbigpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21heFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAyLjEpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMy43KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDEuOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImRvdWJsZSIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpLm1heCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21lYW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMi4xKS5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDQuMSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCA2LjEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJkb3VibGUiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5tZWFuKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfb3JkZXJfYnlYYXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImRvdWJsZSIsIDMuMikuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJkb3VibGUiLCAxLjgpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZG91YmxlIiwgMi41KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZG91YmxlIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkub3JkZXIoKS5ieShPcmRlci5hc2MpIH1dLCAKKyAgICBnX2luamVjdFg1XzVkWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNS41KS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5ncm91cENvdW50KCkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCAyLjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmbG9hdCIpLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9tYXRoWG11bFgyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDMuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZsb2F0IikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkubWF0aCgiXyAqIDIiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfaXNYZXFYMV81WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDEuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZsb2F0IikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkuaXMoUC5lcSgxLjUpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImZsb2F0IiwgMS41KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImZsb2F0IiwgMi41KS5hZGRWKCJkYXRhIikucHJvcGVydHkoImZsb2F0IiwgMy4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZmxvYXQiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS5zdW0oKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYbWF0aFhtdWxYMTBYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDQuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZsb2F0IikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkucHJvamVjdCgib3JpZ2luYWwiLCAibXVsdGlwbGllZCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoIl8gKiAxMCIpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hmbG9hdFhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfd2hlcmVYaXNYZ3RYMV8wWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCAwLjUpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiZmxvYXQiLCAxLjUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmbG9hdCIpLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLndoZXJlKF9fLmlzKFAuZ3QoMS4wKSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9jaG9vc2VYaXNYZXFYM18wWFhfY29uc3RhbnRYdGhyZWVYX2NvbnN0YW50WG90aGVyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJmbG9hdCIsIDMuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZsb2F0IikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkuY2hvb3NlKF9fLmlzKFAuZXEoMy4wKSksIF9fLmNvbnN0YW50KCJ0aHJlZSIpLCBfXy5jb25zdGFudCgib3RoZXIiKSkgfV0sIAorICAgIGdfaW5qZWN0WDJfMGZYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDIuMCkuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKSB9XSwgCisgICAgZ19WX2hhc1hhZ2VfdHlwZU9mWEdUeXBlX0lOVFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLnR5cGVPZihHVHlwZS5pbnQpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3doZXJlWHZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9tYXRoWGluY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIsICJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5tYXRoKCJfICsgMSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkuc3VtKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfbWluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5taW4oKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLm1heCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX21lYW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLm1lYW4oKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9vcmRlcl9ieVhkZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxpc3QiLCBbImEiLCAiYiIsICJjIl0pIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJsaXN0IikuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpIH1dLCAKKyAgICBnX1ZfaGFzWGxpc3RfdHlwZU9mWEdUeXBlX0xJU1RYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJuYW1lIiwgInRlc3QiKS5wcm9wZXJ0eSgibGlzdCIsIFsxLCAyLCAzXSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImxpc3QiLCBQLnR5cGVPZihHVHlwZS5saXN0KSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsaXN0IiwgWyJ4IiwgInkiLCAieiJdKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibGlzdCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX2NvdW50WGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxpc3QiLCBbMSwgMiwgMywgNCwgNV0pIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJsaXN0IikuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpLmNvdW50KFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3VuZm9sZF9yYW5nZVgxXzNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibGlzdCIsIFsiZmlyc3QiLCAic2Vjb25kIiwgInRoaXJkIiwgImZvdXJ0aCJdKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibGlzdCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS51bmZvbGQoKS5yYW5nZSgxLCAzKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGNvdW50WGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxpc3QiLCBbImFwcGxlIiwgImJhbmFuYSJdKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibGlzdCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS5wcm9qZWN0KCJvcmlnaW5hbCIsICJzaXplIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3doZXJlWGNvdW50WGxvY2FsWF9pc1hndFgyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibGlzdCIsIFsxXSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsaXN0IiwgWzEsIDIsIDNdKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibGlzdCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5ndCgyKSkpIH1dLCAKKyAgICBnX2luamVjdFhsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsidGVzdCJdKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsb25nIiwgMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxvbmciKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkgfV0sIAorICAgIGdfVl9oYXNYbG9uZ190eXBlT2ZYR1R5cGVfTE9OR1hYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLnByb3BlcnR5KCJsb25nIiwgMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImxvbmciLCBQLnR5cGVPZihHVHlwZS5sb25nKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9tYXRoWG11bFgyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsb25nIiwgNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxvbmciKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkubWF0aCgiXyAqIDIiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hsb25nWF9pc1h0eXBlT2ZYR1R5cGVfTE9OR1hYX2lzWGd0WDVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoImxvbmciLCAxMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImxvbmciKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkuaXMoUC5ndCg1KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9zdW1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibG9uZyIsIDEpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibG9uZyIsIDIpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibG9uZyIsIDMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJsb25nIikuaXMoUC50eXBlT2YoR1R5cGUubG9uZykpLnN1bSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJsb25nIiwgMTAwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibG9uZyIpLmlzKFAudHlwZU9mKEdUeXBlLmxvbmcpKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlTWFwX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlTWFwKCkuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkuY291bnQoKSB9XSwgCisgICAgZ19WX2dyb3VwQ291bnRfYnlYbGFiZWxYX2lzWHR5cGVPZlhHVHlwZV9NQVBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImtleTEiLCAiMSJdLCBbImtleTIiLCAiMiJdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJtYXAiKS5pcyhQLnR5cGVPZihHVHlwZS5tYXApKSB9XSwgCisgICAgZ19WX2hhc1htYXBfdHlwZU9mWEdUeXBlX01BUFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImEiLCAxXSwgWyJiIiwgMl1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm1hcCIsIFAudHlwZU9mKEdUeXBlLm1hcCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYX2NvdW50WGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm1hcCIsIG5ldyBNYXAoW1siYSIsIDFdLCBbImIiLCAyXSwgWyJjIiwgM11dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm1hcCIpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpLmNvdW50KFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9zZWxlY3RYdmFsdWVzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm1hcCIsIG5ldyBNYXAoW1siY2l0eSIsICJOWUMiXSwgWyJjb3VudHJ5IiwgIlVTQSJdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJtYXAiKS5pcyhQLnR5cGVPZihHVHlwZS5tYXApKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykgfV0sIAorICAgIGdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFhfd2hlcmVYX2NvdW50WGxvY2FsWF9pc1hndFgxWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibWFwIiwgbmV3IE1hcChbWyJzaW5nbGUiLCAidmFsdWUiXV0pKS5hZGRWKCJkYXRhIikucHJvcGVydHkoIm1hcCIsIG5ldyBNYXAoW1sia2V5MSIsICIxIl0sIFsia2V5MiIsICIyIl1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm1hcCIpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpLndoZXJlKF9fLmNvdW50KFNjb3BlLmxvY2FsKS5pcyhQLmd0KDEpKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJtYXAiLCBuZXcgTWFwKFtbImEiLCAxXV0pKS5hZGRWKCJkYXRhIikucHJvcGVydHkoIm1hcCIsIG5ldyBNYXAoW1siYiIsIDJdLCBbImMiLCAzXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibWFwIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkuZm9sZCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVYbmFtZVhfYWdncmVnYXRlWHhYX2NhcFh4WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuYWdncmVnYXRlKCJ4IikuY2FwKCJ4IikuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkgfV0sIAorICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYa2V5c1hfZGVkdXBfaXNYdHlwZU9mWEdUeXBlX1NFVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cykuZGVkdXAoKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInNldCIsIG5ldyBTZXQoWyJhIiwgImIiLCAiYyJdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInNldCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpIH1dLCAKKyAgICBnX1ZfaGFzWHNldF90eXBlT2ZYR1R5cGVfU0VUWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgibmFtZSIsICJ0ZXN0IikucHJvcGVydHkoInNldCIsIG5ldyBTZXQoWzEsIDIsIDNdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInNldCIsIFAudHlwZU9mKEdUeXBlLnNldCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInNldCIsIG5ldyBTZXQoWyJ4IiwgInkiLCAieiJdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInNldCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX2NvdW50WGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInNldCIsIG5ldyBTZXQoWzEsIDIsIDMsIDQsIDVdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInNldCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpLmNvdW50KFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF93aGVyZVhjb3VudFhsb2NhbFhfaXNYZXFYM1hYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInNldCIsIG5ldyBTZXQoWzEsIDJdKSkuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJzZXQiLCBuZXcgU2V0KFsxLCAyLCAzXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJzZXQiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5lcSgzKSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX3VuZm9sZF9saW1pdFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInNldCIsIG5ldyBTZXQoWyJmaXJzdCIsICJzZWNvbmQiLCAidGhpcmQiLCAiZm91cnRoIl0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygic2V0IikuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkudW5mb2xkKCkubGltaXQoMikgfV0sIAorICAgIGdfaW5qZWN0WHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX2dyb3VwQ291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBTZXQoWyJ0ZXN0Il0pKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKS5ncm91cENvdW50KCkgfV0sIAorICAgIGdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAxMDApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5zaG9ydCkuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9tYXRoWG11bFgxMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgNTApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5zaG9ydCkuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKS5tYXRoKCJfICogMTAiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9pc1hiZXR3ZWVuWDIwXzMwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJpbnQiLCAyNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImludCIpLmFzTnVtYmVyKEdUeXBlLnNob3J0KS5pcyhQLnR5cGVPZihHVHlwZS5zaG9ydCkpLmlzKFAuYmV0d2VlbigyMCwgMzApKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9taW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTApLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMjApLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMzApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5zaG9ydCkuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKS5taW4oKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMTUpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMjUpLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgiaW50IiwgMzUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJpbnQiKS5hc051bWJlcihHVHlwZS5zaG9ydCkuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKS5tYXgoKSB9XSwgCisgICAgZ19pbmplY3RYNDJYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9zdG9yZVhhWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDQyKS5hc051bWJlcihHVHlwZS5zaG9ydCkuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoInV1aWQiLCB1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoInV1aWQiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkgfV0sIAorICAgIGdfVl9oYXNYdXVpZF90eXBlT2ZYR1R5cGVfVVVJRFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJkYXRhIikucHJvcGVydHkoIm5hbWUiLCAidGVzdCIpLnByb3BlcnR5KCJ1dWlkIiwgdXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJ1dWlkIiwgUC50eXBlT2YoR1R5cGUudXVpZCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYY29uc3RhbnRYdXVpZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgidXVpZCIsIHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygidXVpZCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5wcm9qZWN0KCJvcmlnaW5hbCIsICJ0eXBlIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uY29uc3RhbnQoInV1aWQiKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF93aGVyZVhpc1hlcVh1dWlkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJ1dWlkIiwgdXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJ1dWlkIikuaXMoUC50eXBlT2YoR1R5cGUudXVpZCkpLndoZXJlKF9fLmlzKFAuZXEodXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9jaG9vc2VYaXNYZXFYdXVpZFhYX2NvbnN0YW50WG1hdGNoWF9jb25zdGFudFhub01hdGNoWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiZGF0YSIpLnByb3BlcnR5KCJ1dWlkIiwgdXVpZC5wYXJzZSgiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJ1dWlkIikuaXMoUC50eXBlT2YoR1R5cGUudXVpZCkpLmNob29zZShfXy5pcyhQLmVxKHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSksIF9fLmNvbnN0YW50KCJtYXRjaCIpLCBfXy5jb25zdGFudCgibm9NYXRjaCIpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgidXVpZCIsIHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygidXVpZCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9hZ2dyZWdhdGVYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImRhdGEiKS5wcm9wZXJ0eSgidXVpZCIsIHV1aWQucGFyc2UoImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygidXVpZCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5hZ2dyZWdhdGUoImEiKS5jYXAoImEiKSB9XSwgCisgICAgZ19pbmplY3RYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCh1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkuaXMoUC50eXBlT2YoR1R5cGUudXVpZCkpLmdyb3VwQ291bnQoKSB9XSwgCisgICAgZ19pbmplY3RYVVVJRFg0N2FmMTBiXzU4Y2NfNDM3Ml9hNTY3XzBmMDJiMmYzZDQ3OVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCh1dWlkLnBhcnNlKCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzkiKSkgfV0sIAorICAgIGdfaW5qZWN0WFVVSURYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KHV1aWQudjQoKSkgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYeFhfYnlYbmFtZVhfYnlYYWdlWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJuYW1lIikuYnkoImFnZSIpLmNhcCgieCIpIH1dLCAKKyAgICBnX1ZfbG9jYWxYYWdncmVnYXRlWHhYX2J5WG5hbWVYWF9ieVhhZ2VYX2NhcFh4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJ4IikuYnkoIm5hbWUiKS5ieSgiYWdlIikpLmNhcCgieCIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfYWxsWGd0WDMyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuYWxsKFAuZ3QoMzIpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX3doZXJlWGlzWFBfZ3RYMzNYWFhfZm9sZF9hbGxYZ3RYMzNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS53aGVyZShfXy5pcyhQLmd0KDMzKSkpLmZvbGQoKS5hbGwoUC5ndCgzMykpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbGxYZ3RYMTBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGwoUC5ndCgxMCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbGxYZ3RYMzBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGwoUC5ndCgzMCkpIH1dLCAKKyAgICBnX2luamVjdFhhYmNfYmNkWF9hbGxYZXFYYmNkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYWJjIiwgImJjZCJdKS5hbGwoUC5lcSgiYmNkIikpIH1dLCAKKyAgICBnX2luamVjdFhiY2RfYmNkWF9hbGxYZXFYYmNkWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYmNkIiwgImJjZCJdKS5hbGwoUC5lcSgiYmNkIikpIH1dLCAKKyAgICBnX2luamVjdFhudWxsX2FiY1hfYWxsWFRleHRQX3N0YXJ0aW5nV2l0aFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFtudWxsLCAiYWJjIl0pLmFsbChUZXh0UC5zdGFydGluZ1dpdGgoImEiKSkgfV0sIAorICAgIGdfaW5qZWN0WDVfOF8xMF8xMF83WF9hbGxYZ3RlWDdYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkuYWxsKFAuZ3RlKDcpKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbFhfYWxsWGVxWG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuYWxsKFAuZXEobnVsbCkpIH1dLCAKKyAgICBnX2luamVjdFg3WF9hbGxYZXFYN1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg3KS5hbGwoUC5lcSg3KSkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxfbnVsbFhfYWxsWGVxWG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsIG51bGxdKS5hbGwoUC5lcShudWxsKSkgfV0sIAorICAgIGdfaW5qZWN0WDNfdGhyZWVYX2FsbFhlcVgzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuYWxsKFAuZXEoMykpIH1dLCAKKyAgICBnX1ZfYW5kWGhhc1hhZ2VfZ3RfMjdYX19vdXRFX2NvdW50X2d0ZV8yWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hbmQoX18uaGFzKCJhZ2UiLCBQLmd0KDI3KSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9hbmRYb3V0RV9faGFzWGxhYmVsX3BlcnNvblhfYW5kX2hhc1hhZ2VfZ3RlXzMyWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYW5kKF9fLm91dEUoKSwgX18uaGFzKFQubGFiZWwsICJwZXJzb24iKS5hbmQoKS5oYXMoImFnZSIsIFAuZ3RlKDMyKSkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0WGtub3dzWF9hbmRfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGFYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFuZCgpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLmFzKCJhIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9hc1hhWF9hbmRYc2VsZWN0WGFYX3NlbGVjdFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuYW5kKF9fLnNlbGVjdCgiYSIpLCBfXy5zZWxlY3QoImEiKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfYW5kX2hhc1huYW1lX21hcmtvWF9hbmRfaGFzWG5hbWVfbWFya29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5hbmQoKS5oYXMoIm5hbWUiLCAibWFya28iKS5hbmQoKS5oYXMoIm5hbWUiLCAibWFya28iKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2FueVhndFgzMlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmFueShQLmd0KDMyKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2FueVhlcVgyOVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmVxKDI5KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2FueVhndFgxMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmd0KDEwKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2FueVhndFg0MlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmd0KDQyKSkgfV0sIAorICAgIGdfaW5qZWN0WGFiY19jZGVYX2FueVhlcVhiY2RYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhYmMiLCAiY2RlIl0pLmFueShQLmVxKCJiY2QiKSkgfV0sIAorICAgIGdfaW5qZWN0WGFiY19iY2RYX2FueVhlcVhiY2RYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhYmMiLCAiYmNkIl0pLmFueShQLmVxKCJiY2QiKSkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxfYWJjWF9hbnlYVGV4dFBfc3RhcnRpbmdXaXRoWGFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsICJhYmMiXSkuYW55KFRleHRQLnN0YXJ0aW5nV2l0aCgiYSIpKSB9XSwgCisgICAgZ19pbmplY3RYNV84XzEwXzEwXzdYX2FueVhlcVg3WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFs1LCA4LCAxMF0sIFsxMCwgN10pLmFueShQLmVxKDcpKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbFhfYW55WGVxWG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuYW55KFAuZXEobnVsbCkpIH1dLCAKKyAgICBnX2luamVjdFg3WF9hbnlYZXFYN1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg3KS5hbnkoUC5lcSg3KSkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxfbnVsbFhfYW55WGVxWG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsIG51bGxdKS5hbnkoUC5lcShudWxsKSkgfV0sIAorICAgIGdfaW5qZWN0WDNfdGhyZWVYX2FueVhlcVgzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuYW55KFAuZXEoMykpIH1dLCAKKyAgICBnX1ZfY29pblgxXzBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jb2luKDEuMCkgfV0sIAorICAgIGdfVl9jb2luWDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jb2luKDEpIH1dLCAKKyAgICBnX1ZfY29pblgwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29pbigwLjApIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9vcmRlcl9ieVhuYW1lWF9jb2luWDUwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHtzZWVkOiA5OTk5OTl9KSkuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS5jb2luKDAuNSkgfV0sIAorICAgIGdfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLmN5Y2xpY1BhdGgoKSB9XSwgCisgICAgZ19WWDFYX2JvdGhfYm90aF9jeWNsaWNQYXRoX2J5WGFnZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoKCkuYm90aCgpLmN5Y2xpY1BhdGgoKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aF9wYXRoOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikuY3ljbGljUGF0aCgpLnBhdGgoKSB9XSwgCisgICAgZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9jeWNsaWNQYXRoX2Zyb21YYVhfdG9YYlhfcGF0aDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpLmN5Y2xpY1BhdGgoKS5mcm9tXygiYSIpLnRvKCJiIikucGF0aCgpIH1dLCAKKyAgICBnX2luamVjdFgwWF9WX2JvdGhfY29hbGVzY2VYaGFzWG5hbWVfbWFya29YX2JvdGhfY29uc3RhbnRYMFhYX2N5Y2xpY1BhdGhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkuVigpLmJvdGgoKS5jb2FsZXNjZShfXy5oYXMoIm5hbWUiLCAibWFya28iKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5jeWNsaWNQYXRoKCkucGF0aCgpIH1dLCAKKyAgICBnX1Zfb3V0X2luX3ZhbHVlc1huYW1lWF9mb2xkX2RlZHVwWGxvY2FsWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLmluXygpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkgfV0sIAorICAgIGdfVl9vdXRfaW5fdmFsdWVzWG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5tYXAoX18uaW5fKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsKSkgfV0sIAorICAgIGdfVl9vdXRfYXNYeFhfaW5fYXNYeVhfc2VsZWN0WHhfeVhfYnlYbmFtZVhfZm9sZF9kZWR1cFhsb2NhbF94X3lYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkuYXMoIngiKS5pbl8oKS5hcygieSIpLnNlbGVjdCgieCIsICJ5IikuYnkoIm5hbWUiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwsICJ4IiwgInkiKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2JvdGhfZGVkdXBfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmRlZHVwKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9ib3RoX2hhc1hsYWJlbF9zb2Z0d2FyZVhfZGVkdXBfYnlYbGFuZ1hfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmhhcyhULmxhYmVsLCAic29mdHdhcmUiKS5kZWR1cCgpLmJ5KCJsYW5nIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9ib3RoX2JvdGhfbmFtZV9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmJvdGgoKS52YWx1ZXMoIm5hbWUiKS5kZWR1cCgpIH1dLCAKKyAgICBnX1ZfYm90aF9ib3RoX2RlZHVwOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkgfV0sIAorICAgIGdfVl9ib3RoX2JvdGhfZGVkdXBfYnlYbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkuYnkoVC5sYWJlbCkgfV0sIAorICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X2RlZHVwX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5kZWR1cCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpIH1dLCAKKyAgICBnX1ZfYXNYYVhfYm90aF9hc1hiWF9kZWR1cFhhX2JYX2J5WGxhYmVsWF9zZWxlY3RYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5ib3RoKCkuYXMoImIiKS5kZWR1cCgiYSIsICJiIikuYnkoVC5sYWJlbCkuc2VsZWN0KCJhIiwgImIiKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hiWF9pbl9hc1hjWF9kZWR1cFhhX2JYX3BhdGhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiY2Fyb2wiKS5hcygiYyIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLmFkZEUoImxpa2VzIikuZnJvbV8oImEiKS50bygiYiIpLmFkZEUoImxpa2VzIikuZnJvbV8oImEiKS50bygiYyIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLmluXygpLmFzKCJjIikuZGVkdXAoImEiLCAiYiIpLnBhdGgoKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1Zfb3V0RV9hc1hlWF9pblZfYXNYdlhfc2VsZWN0WGVYX29yZGVyX2J5WHdlaWdodF9hc2NYX3NlbGVjdFh2WF92YWx1ZXNYbmFtZVhfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dEUoKS5hcygiZSIpLmluVigpLmFzKCJ2Iikuc2VsZWN0KCJlIikub3JkZXIoKS5ieSgid2VpZ2h0IiwgT3JkZXIuYXNjKS5zZWxlY3QoInYiKS52YWx1ZXMoIm5hbWUiKS5kZWR1cCgpIH1dLCAKKyAgICBnX1ZfYm90aF9ib3RoX2RlZHVwX2J5WG91dEVfY291bnRYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIH1dLCAKKyAgICBnX1ZfYXNYYVhfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX2VtaXRfbmFtZV9hc1hiWF9ncm91cF9ieVhzZWxlY3RYYVhYX2J5WHNlbGVjdFhiWF9kZWR1cF9vcmRlcl9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuZW1pdCgpLnZhbHVlcygibmFtZSIpLmFzKCJiIikuZ3JvdXAoKS5ieShfXy5zZWxlY3QoImEiKSkuYnkoX18uc2VsZWN0KCJiIikuZGVkdXAoKS5vcmRlcigpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRlZHVwKCkgfV0sIAorICAgIGdfVl9yZXBlYXRYZGVkdXBYX3RpbWVzWDJYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMikuY291bnQoKSB9XSwgCisgICAgZ19WX2JvdGhfZ3JvdXBfYnlfYnlYb3V0X2RlZHVwX2ZvbGRYX3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5kZWR1cCgpLmZvbGQoKSkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS5saW1pdCgxKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2JvdGhFX3Byb3BlcnRpZXNfZGVkdXBfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKSB9XSwgCisgICAgZ19WX2JvdGhfcHJvcGVydGllc19kZWR1cF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkgfV0sIAorICAgIGdfVl9ib3RoX3Byb3BlcnRpZXNfcHJvcGVydGllc19kZWR1cF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIH1dLCAKKyAgICBnX1Zfb3JkZXJfYnlYbmFtZV9kZXNjWF9iYXJyaWVyX2RlZHVwX2FnZV9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVfZGVzY1hfYmFycmllcl9kZWR1cF9hZ2VfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLm9yZGVyKCkuYnkoIm5hbWUiLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieSgiYWdlIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9ib3RoX2RlZHVwX2FnZV9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieSgiYWdlIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlgxWF9hc1hhWF9ib3RoX2FzWGJYX2JvdGhfYXNYY1hfZGVkdXBYYV9iWF9hZ2Vfc2VsZWN0WGFfYl9jWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5ib3RoKCkuYXMoImIiKS5ib3RoKCkuYXMoImMiKS5kZWR1cCgiYSIsICJiIikuYnkoImFnZSIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfdmFsdWVzWGFnZVhfZGVkdXBYbG9jYWxYX3VuZm9sZDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfcHJvcGVydGllc19kZWR1cF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKS5kZWR1cCgpLmNvdW50KCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX2RlZHVwX2J5WHZhbHVlWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKS5kZWR1cCgpLmJ5KFQudmFsdWUpLmNvdW50KCkgfV0sIAorICAgIGdfVl9ib3RoX2hhc1hsYWJlbF9zb2Z0d2FyZVhfZGVkdXBfYnlYbGFuZ1hfYnlYbmFtZVhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmhhcyhULmxhYmVsLCAic29mdHdhcmUiKS5kZWR1cCgpLmJ5KCJsYW5nIikuYnkoIm5hbWUiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2NvdW50X2Rpc2NhcmQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNvdW50KCkuZGlzY2FyZCgpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9kaXNjYXJkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuZGlzY2FyZCgpIH1dLCAKKyAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2Rpc2NhcmQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS5kaXNjYXJkKCkgfV0sIAorICAgIGdfVl9kaXNjYXJkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5kaXNjYXJkKCkgfV0sIAorICAgIGdfVl9kaXNjYXJkX2Rpc2NhcmQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmRpc2NhcmQoKS5kaXNjYXJkKCkgfV0sIAorICAgIGdfVl9kaXNjYXJkX2ZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmRpc2NhcmQoKS5mb2xkKCkgfV0sIAorICAgIGdfVl9kaXNjYXJkX2ZvbGRfZGlzY2FyZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZGlzY2FyZCgpLmZvbGQoKS5kaXNjYXJkKCkgfV0sIAorICAgIGdfVl9kaXNjYXJkX2ZvbGRfY29uc3RhbnRYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmRpc2NhcmQoKS5mb2xkKCkuY29uc3RhbnQoMSkgfV0sIAorICAgIGdfVl9wcm9qZWN0WHhYX2J5WGNvYWxlc2NlWGFnZV9pc1hndFgyOVhYX2Rpc2NhcmRYWF9zZWxlY3RYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb2plY3QoIngiKS5ieShfXy5jb2FsZXNjZShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMjkpKSwgX18uZGlzY2FyZCgpKSkuc2VsZWN0KCJ4IikgfV0sIAorICAgIGdfVl9kcm9wOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoKS5hcygiYSIpLmFkZFYoKS5hcygiYiIpLmFkZEUoImtub3dzIikudG8oImEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmRyb3AoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfVl9vdXRFX2Ryb3A6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLmFzKCJhIikuYWRkVigpLmFzKCJiIikuYWRkRSgia25vd3MiKS50bygiYSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLmRyb3AoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX2Ryb3A6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFkZFYoKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLmRyb3AoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygpIH1dLCAKKyAgICBnX0VfcHJvcGVydGllc1h3ZWlnaHRYX2Ryb3A6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygid2VpZ2h0IikuZHJvcCgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygpIH1dLCAKKyAgICBnX1ZfcHJvcGVydGllc19wcm9wZXJ0aWVzWHN0YXJ0VGltZVhfZHJvcDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoIm5hbWUiLCAiYm9iIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImxvY2F0aW9uIiwgIm55IiwgInN0YXJ0VGltZSIsIDIwMTQsICJlbmRUaW1lIiwgMjAxNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImxvY2F0aW9uIiwgInZhIiwgInN0YXJ0VGltZSIsIDIwMTYpLmFkZFYoKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJsb2NhdGlvbiIsICJ2YSIsICJzdGFydFRpbWUiLCAyMDE0LCAiZW5kVGltZSIsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJsb2NhdGlvbiIsICJueSIsICJzdGFydFRpbWUiLCAyMDE2KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCJzdGFydFRpbWUiKS5kcm9wKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoInN0YXJ0VGltZSIpIH1dLCAKKyAgICBnX1ZfZmlsdGVyWGlzWDBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZmlsdGVyKF9fLmlzKDApKSB9XSwgCisgICAgZ19WX2ZpbHRlclhjb25zdGFudFgwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZpbHRlcihfXy5jb25zdGFudCgwKSkgfV0sIAorICAgIGdfVl9maWx0ZXJYaGFzWGxhbmdfamF2YVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5maWx0ZXIoX18uaGFzKCJsYW5nIiwgImphdmEiKSkgfV0sIAorICAgIGdfVlgxWF9maWx0ZXJYaGFzWGFnZV9ndFgzMFhYWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmZpbHRlcihfXy5oYXMoImFnZSIsIFAuZ3QoMzApKSkgfV0sIAorICAgIGdfVlgyWF9maWx0ZXJYaGFzWGFnZV9ndFgzMFhYWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLmZpbHRlcihfXy5oYXMoImFnZSIsIFAuZ3QoMzApKSkgfV0sIAorICAgIGdfVlgxWF9vdXRfZmlsdGVyWGhhc1hhZ2VfZ3RYMzBYWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5maWx0ZXIoX18uaGFzKCJhZ2UiLCBQLmd0KDMwKSkpIH1dLCAKKyAgICBnX1ZfZmlsdGVyWGhhc1huYW1lX3N0YXJ0aW5nV2l0aFhtX29yX3BYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZmlsdGVyKF9fLmhhcygibmFtZSIsIFRleHRQLnN0YXJ0aW5nV2l0aCgibSIpLm9yKFRleHRQLnN0YXJ0aW5nV2l0aCgicCIpKSkpIH1dLCAKKyAgICBnX0VfZmlsdGVyWGlzWDBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuZmlsdGVyKF9fLmlzKDApKSB9XSwgCisgICAgZ19FX2ZpbHRlclhjb25zdGFudFgwWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmZpbHRlcihfXy5jb25zdGFudCgwKSkgfV0sIAorICAgIGdfVlgxWF9oYXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5oYXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX2hhc1hjaXJjdW1mZXJlbmNlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmhhcygiY2lyY3VtZmVyZW5jZSIpIH1dLCAKKyAgICBnX1ZYMVhfaGFzWG5hbWVfbWFya29YOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaGFzKCJuYW1lIiwgIm1hcmtvIikgfV0sIAorICAgIGdfVlgxWF9oYXNYbmFtZV9tYXJrb3Zhclg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmhhcygibmFtZSIsIHh4MSkgfV0sIAorICAgIGdfVlgyWF9oYXNYbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5oYXMoIm5hbWUiLCAibWFya28iKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9ibGFoWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImJsYWgiKSB9XSwgCisgICAgZ19WX2hhc1hhZ2VfZ3RfMzBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIFAuZ3QoMzApKSB9XSwgCisgICAgZ19WWDFYX2hhc1hhZ2VfZ3RfMzBYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaGFzKCJhZ2UiLCBQLmd0KDMwKSkgfV0sIAorICAgIGdfVl9oYXNYcGVyc29udmFyX2FnZV9ndF8zMFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKHh4MSwgImFnZSIsIFAuZ3QoMzApKSB9XSwgCisgICAgZ19WWDRYX2hhc1hhZ2VfZ3RfMzBYOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkuaGFzKCJhZ2UiLCBQLmd0KDMwKSkgfV0sIAorICAgIGdfVlh2MVhfaGFzWGFnZV9ndF8zMFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5oYXMoImFnZSIsIFAuZ3QoMzApKSB9XSwgCisgICAgZ19WWHY0WF9oYXNYYWdlX2d0XzMwWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmhhcygiYWdlIiwgUC5ndCgzMCkpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X2hhc1hpZF8yWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLmhhcygiYWdlIiwgUC5ndCgzMCkpIH1dLCAKKyAgICBnX1ZfaGFzWGJsYWhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImJsYWgiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfYWdlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikudmFsdWVzKCJhZ2UiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb3ZhclhfYWdlOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCB4eDEpLnZhbHVlcygiYWdlIikgfV0sIAorICAgIGdfVl9oYXNYcGVyc29udmFyX25hbWVfbWFya29YX2FnZTogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoeHgxLCAibmFtZSIsICJtYXJrbyIpLnZhbHVlcygiYWdlIikgfV0sIAorICAgIGdfVlgxWF9vdXRFX2hhc1h3ZWlnaHRfaW5zaWRlXzBfMDZYX2luVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5oYXMoIndlaWdodCIsIFAuaW5zaWRlKDAuMCwgMC42KSkuaW5WKCkgfV0sIAorICAgIGdfRVgxMVhfb3V0Vl9vdXRFX2hhc1hpZF8xMFg6IFtmdW5jdGlvbih7ZywgZWlkMTEsIGVpZDEwfSkgeyByZXR1cm4gZy5FKGVpZDExKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlaWQxMCkgfV0sIAorICAgIGdfRVgxMVhfb3V0Vl9vdXRFX2hhc1hpZF8xMEFzU3RyaW5nWDogW2Z1bmN0aW9uKHtnLCBlaWQxMSwgZWlkMTB9KSB7IHJldHVybiBnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSB9XSwgCisgICAgZ19WX2hhc1hsb2NhdGlvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibG9jYXRpb24iKSB9XSwgCisgICAgZ19WX2hhc1hhZ2Vfd2l0aGluWDI3WF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLndpdGhpbigyNykpLmNvdW50KCkgfV0sIAorICAgIGdfVl9oYXNYYWdlX3dpdGhpblgyN19udWxsWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLndpdGhpbigyNywgbnVsbCkpLmNvdW50KCkgfV0sIAorICAgIGdfVl9oYXNYYWdlX3dpdGhpblgyN18yOVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRoaW4oMjcsIDI5KSkuY291bnQoKSB9XSwgCisgICAgZ19WX2hhc1hhZ2Vfd2l0aG91dFgyN1hfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRob3V0KDI3KSkuY291bnQoKSB9XSwgCisgICAgZ19WX2hhc1hhZ2Vfd2l0aG91dFgyN18yOVhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRob3V0KDI3LCAyOSkpLmNvdW50KCkgfV0sIAorICAgIGdfVl9oYXNYcGVyc29uX2FnZV93aXRoaW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJhZ2UiLCBQLndpdGhpbigpKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fYWdlX3dpdGhvdXRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJhZ2UiLCBQLndpdGhvdXQoKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9jb250YWluaW5nWGFya1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5jb250YWluaW5nKCJhcmsiKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9zdGFydGluZ1dpdGhYbWFyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLnN0YXJ0aW5nV2l0aCgibWFyIikpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfZW5kaW5nV2l0aFhhc1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5lbmRpbmdXaXRoKCJhcyIpKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9jb250YWluaW5nWG9YX2FuZFhsdFhtWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgVGV4dFAuY29udGFpbmluZygibyIpLmFuZChQLmx0KCJtIikpKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX2d0WG1YX2FuZFhjb250YWluaW5nWG9YWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFAuZ3QoIm0iKS5hbmQoVGV4dFAuY29udGFpbmluZygibyIpKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9ub3RfY29udGFpbmluZ1hhcmtYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAubm90Q29udGFpbmluZygiYXJrIikpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfbm90X3N0YXJ0aW5nV2l0aFhtYXJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAubm90U3RhcnRpbmdXaXRoKCJtYXIiKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9ub3RfZW5kaW5nV2l0aFhhc1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5ub3RFbmRpbmdXaXRoKCJhcyIpKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX3JlZ2V4WHJNYXJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAucmVnZXgoIl5tYXIiKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9ub3RSZWdleFhyTWFyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLm5vdFJlZ2V4KCJebWFyIikpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfcmVnZXhYVGlua2VyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJBcGFjaGUgVGlua2VyUG9wwqkiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLnJlZ2V4KCJUaW5rZXIiKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJVbmljb2RlWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJBcGFjaGUgVGlua2VyUG9wwqkiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLnJlZ2V4KCJUaW5rZXIuKlx1MDBBOSIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2hhc1hwX25lcVh2WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicCIsIFAubmVxKCJ2IikpIH1dLCAKKyAgICBnX1ZfaGFzWGFnZV9ndFgxOFhfYW5kWGx0WDMwWFhvclhndHgzNVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLm9yKFAuZ3QoMzUpKSkgfV0sIAorICAgIGdfVl9oYXNYYWdlX2d0WDE4WF9hbmRYbHRYMzBYWG9yWGx0eDM1WFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIFAuZ3QoMTgpLmFuZChQLmx0KDMwKSkuYW5kKFAubHQoMzUpKSkgfV0sIAorICAgIGdfVl9oYXNYa193aXRoaW5YY1hYX3ZhbHVlc1hrWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoImsiLCAi6L2J5rOoIikuYWRkVigpLnByb3BlcnR5KCJrIiwgIuKcpiIpLmFkZFYoKS5wcm9wZXJ0eSgiayIsICLimaAiKS5hZGRWKCkucHJvcGVydHkoImsiLCAiQSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJrIiwgUC53aXRoaW4oIui9ieazqCIsICLinKYiLCAi4pmgIikpLnZhbHVlcygiayIpIH1dLCAKKyAgICBnX1ZfaGFzWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMobnVsbCkgfV0sIAorICAgIGdfVl9oYXNYbnVsbF90ZXN0bnVsbGtleVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcyhudWxsLCAidGVzdC1udWxsLWtleSIpIH1dLCAKKyAgICBnX0VfaGFzWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5oYXMobnVsbCkgfV0sIAorICAgIGdfVl9oYXNYbGFiZWxfcGVyc29uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKFQubGFiZWwsICJwZXJzb24iKSB9XSwgCisgICAgZ19WX2hhc1hsYWJlbF9lcVhwZXJzb25YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKFQubGFiZWwsIFAuZXEoInBlcnNvbiIpKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBudWxsKSB9XSwgCisgICAgZ19WX2hhc0lkWGVtcHR5WF9jb3VudDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh4eDEpLmNvdW50KCkgfV0sIAorICAgIGdfVl9oYXNJZFh3aXRoaW5YZW1wdHlYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQoUC53aXRoaW4oW10pKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfaGFzSWRYd2l0aG91dFhlbXB0eVhYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNJZChQLndpdGhvdXQoW10pKS5jb3VudCgpIH1dLCAKKyAgICBnX1Zfbm90WGhhc0lkWHdpdGhpblhlbXB0eVhYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubm90KF9fLmhhc0lkKFAud2l0aGluKFtdKSkpLmNvdW50KCkgfV0sIAorICAgIGdfVl9oYXNJZFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQobnVsbCkgfV0sIAorICAgIGdfVl9oYXNJZFhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0lkKFAuZXEobnVsbCkpIH1dLCAKKyAgICBnX1ZfaGFzSWRYMl9udWxsWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkgfV0sIAorICAgIGdfVl9oYXNJZFhtYXJrb3Zhcl92YWRhc3Zhclg6IFtmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIH1dLCAKKyAgICBnX1ZfaGFzSWRYbWFya292YXJfdmFkYXN2YXJfcGV0ZXJ2YXJYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSB9XSwgCisgICAgZ19WX2hhc0lkWDJBc1N0cmluZ19udWxsWDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkgfV0sIAorICAgIGdfVl9oYXNJZFgxQXNTdHJpbmdfMkFzU3RyaW5nX251bGxYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyLCBudWxsKSB9XSwgCisgICAgZ19WX2hhc0lkWG51bGxfMlg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVigpLmhhc0lkKG51bGwsIHZpZDIpIH1dLCAKKyAgICBnX1ZfaGFzSWRYMVhfaGFzSWRYMlg6IFtmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpLmhhc0lkKHZpZDEpLmhhc0lkKHZpZDIpIH1dLCAKKyAgICBnX1ZfaW5faGFzSWRYbmVxWDFYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5pbl8oKS5oYXNJZChQLm5lcSh4eDEpKSB9XSwgCisgICAgZ19WWDFYX291dF9oYXNJZFgyWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X2hhc1hpZF8yXzNYOiBbZnVuY3Rpb24oe2csIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykgfV0sIAorICAgIGdfVlgxWF9vdXRfaGFzWGlkXzJBc1N0cmluZ18zQXNTdHJpbmdYOiBbZnVuY3Rpb24oe2csIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykgfV0sIAorICAgIGdfVlgxQXNTdHJpbmdYX291dF9oYXNYaWRfMkFzU3RyaW5nWDogW2Z1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X2hhc1hpZF8yXzNYX2luTGlzdDogW2Z1bmN0aW9uKHtnLCB4eDEsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkuaGFzSWQoeHgxKSB9XSwgCisgICAgZ19WX2hhc1hpZF8xXzJYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSB9XSwgCisgICAgZ19WX2hhc1hpZF8xXzJYX2luTGlzdDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXNJZCh4eDEpIH1dLCAKKyAgICBnX1ZfYm90aF9kZWR1cF9wcm9wZXJ0aWVzX2hhc0tleVhhZ2VYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KCJhZ2UiKS52YWx1ZSgpIH1dLCAKKyAgICBnX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVhhZ2VYX2hhc1ZhbHVlWGd0WDMwWFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoImFnZSIpLmhhc1ZhbHVlKFAuZ3QoMzApKS52YWx1ZSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgiYWdlIikuaGFzVmFsdWUoUC5ndCgzMCkpLnZhbHVlKCkgfV0sIAorICAgIGdfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVh3ZWlnaHRYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgid2VpZ2h0IikudmFsdWUoKSB9XSwgCisgICAgZ19WX2JvdGhFX3Byb3BlcnRpZXNfZGVkdXBfaGFzS2V5WHdlaWdodFhfaGFzVmFsdWVYbHRYMGQzWFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KCJ3ZWlnaHQiKS5oYXNWYWx1ZShQLmx0KDAuMykpLnZhbHVlKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgid2VpZ2h0IikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIH1dLCAKKyAgICBnX1ZfcHJvcGVydGllc19oYXNLZXlYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIG51bGwpIH1dLCAKKyAgICBnX1ZfcHJvcGVydGllc19oYXNLZXlYbnVsbF9hZ2VYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsICJhZ2UiKS52YWx1ZSgpIH1dLCAKKyAgICBnX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCkgfV0sIAorICAgIGdfRV9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIG51bGwpIH1dLCAKKyAgICBnX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbF93ZWlnaHRYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsICJ3ZWlnaHQiKS52YWx1ZSgpIH1dLCAKKyAgICBnX0VYN1hfaGFzTGFiZWxYa25vd3NYOiBbZnVuY3Rpb24oe2csIGVpZDd9KSB7IHJldHVybiBnLkUoZWlkNykuaGFzTGFiZWwoImtub3dzIikgfV0sIAorICAgIGdfRV9oYXNMYWJlbFhrbm93c1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpIH1dLCAKKyAgICBnX0VfaGFzTGFiZWxYdXNlc190cmF2ZXJzZXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgidXNlcyIsICJ0cmF2ZXJzZXMiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvbl9zb2Z0d2FyZV9ibGFoWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIsICJzb2Z0d2FyZSIsICJibGFoIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25fc29mdHdhcmV2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iLCB4eDEpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9oYXNMYWJlbFhzb2Z0d2FyZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5oYXNMYWJlbCgic29mdHdhcmUiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvbnZhclhfaGFzTGFiZWxYc29mdHdhcmVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKHh4MSkuaGFzTGFiZWwoInNvZnR3YXJlIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb252YXJfc29mdHdhcmV2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoeHgxLCB4eDIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9oYXNYYWdlX25vdFhsdGVYMTBYX2FuZFhub3RYYmV0d2VlblgxMV8yMFhYWFhfYW5kWGx0WDI5WF9vclhlcVgzNVhYWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmhhcygiYWdlIiwgUC5ub3QoUC5sdGUoMTApLmFuZChQLm5vdChQLmJldHdlZW4oMTEsIDIwKSkpKS5hbmQoUC5sdCgyOSkub3IoUC5lcSgzNSkpKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwobnVsbCkgfV0sIAorICAgIGdfVl9oYXNYbGFiZWxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcyhULmxhYmVsLCBudWxsKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWG51bGxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKG51bGwsIG51bGwpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYbnVsbF9wZXJzb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbChudWxsLCAicGVyc29uIikgfV0sIAorICAgIGdfRV9oYXNMYWJlbFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwobnVsbCkgfV0sIAorICAgIGdfRV9oYXNYbGFiZWxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcyhULmxhYmVsLCBudWxsKSB9XSwgCisgICAgZ19WX3Byb3BlcnRpZXNfaGFzTGFiZWxYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNMYWJlbChudWxsKSB9XSwgCisgICAgZ19WX2hhc05vdFhhZ2VYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc05vdCgiYWdlIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBudWxsKSB9XSwgCisgICAgZ19WX3Byb3BlcnRpZXNfaGFzVmFsdWVYbnVsbF9qb3NoWF92YWx1ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLmhhc1ZhbHVlKG51bGwsICJqb3NoIikudmFsdWUoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWDMyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcygzMikgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1gzMnZhclg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyh4eDEpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYbHRlXzMwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLmx0ZSgzMCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYbHRlXzMwdmFyWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAubHRlKHh4MSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYZ3RlXzI5WF9pc1hsdF8zNFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC5ndGUoMjkpKS5pcyhQLmx0KDM0KSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1hndGVfMjl2YWFyWF9pc1hsdF8zNHZhclg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAuZ3RlKHh4MSkpLmlzKFAubHQoeHgyKSkgfV0sIAorICAgIGdfVl93aGVyZVhpblhjcmVhdGVkWF9jb3VudF9pc1gxWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5pbl8oImNyZWF0ZWQiKS5jb3VudCgpLmlzKDEpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3doZXJlWGluWGNyZWF0ZWRYX2NvdW50X2lzWGd0ZV8yWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5pbl8oImNyZWF0ZWQiKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9ub25lWGd0WDMyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikubm9uZShQLmd0KDMyKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF93aGVyZVhpc1hQX2d0WDMzWFhYX2ZvbGRfbm9uZVhsdGVYMzNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS53aGVyZShfXy5pcyhQLmd0KDMzKSkpLmZvbGQoKS5ub25lKFAubHRlKDMzKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX25vbmVYbHRYMTBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAubHQoMTApKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfbm9uZVhndFgzMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5ndCgzMCkpIH1dLCAKKyAgICBnX2luamVjdFhhYmNfYmNkWF9ub25lWGVxWGJjZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImFiYyIsICJiY2QiXSkubm9uZShQLmVxKCJiY2QiKSkgfV0sIAorICAgIGdfaW5qZWN0WGJjZF9iY2RYX25vbmVYZXFYYWJjWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYmNkIiwgImJjZCJdKS5ub25lKFAuZXEoImFiYyIpKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbF9iY2RYX25vbmVYUF9lcVhhYmNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsICJiY2QiXSkubm9uZShQLmVxKCJhYmMiKSkgfV0sIAorICAgIGdfaW5qZWN0WDVfOF8xMF8xMF83WF9ub25lWGx0WDdYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkubm9uZShQLmx0KDcpKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbFhfbm9uZVhlcVhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLm5vbmUoUC5lcShudWxsKSkgfV0sIAorICAgIGdfaW5qZWN0WDdYX25vbmVYZXFYN1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg3KS5ub25lKFAuZXEoNykpIH1dLCAKKyAgICBnX2luamVjdFhudWxsXzFfZW1wdHlYX25vbmVYZXFYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgMV0sIFtdKS5ub25lKFAuZXEobnVsbCkpIH1dLCAKKyAgICBnX2luamVjdFhudWxsX251bGxYX25vbmVYbm90WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoW251bGwsIG51bGxdKS5ub25lKFAubmVxKG51bGwpKSB9XSwgCisgICAgZ19pbmplY3RYM190aHJlZVhfbm9uZVhlcVgzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkubm9uZShQLmVxKDMpKSB9XSwgCisgICAgZ19WX25vdFhoYXNYYWdlX2d0XzI3WFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubm90KF9fLmhhcygiYWdlIiwgUC5ndCgyNykpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX25vdFhub3RYaGFzWGFnZV9ndF8yN1hYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ub3QoX18ubm90KF9fLmhhcygiYWdlIiwgUC5ndCgyNykpKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9ub3RYaGFzWG5hbWVfZ3RfMjdYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ub3QoX18uaGFzKCJuYW1lIiwgUC5ndCgyNykpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX29yWGhhc1hhZ2VfZ3RfMjdYX19vdXRFX2NvdW50X2d0ZV8yWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcihfXy5oYXMoImFnZSIsIFAuZ3QoMjcpKSwgX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX29yWG91dEVYa25vd3NYX19oYXNYbGFiZWxfc29mdHdhcmVYX29yX2hhc1hhZ2VfZ3RlXzM1WFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3IoX18ub3V0RSgia25vd3MiKSwgX18uaGFzKFQubGFiZWwsICJzb2Z0d2FyZSIpLm9yKCkuaGFzKCJhZ2UiLCBQLmd0ZSgzNSkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2FzWGFYX29yWHNlbGVjdFhhWF9zZWxlY3RYYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm9yKF9fLnNlbGVjdCgiYSIpLCBfXy5zZWxlY3QoImEiKSkgfV0sIAorICAgIGdfVlgxWF9vdXRfbGltaXRYMlg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5saW1pdCgyKSB9XSwgCisgICAgZ19WWDFYX291dF9saW1pdFgydmFyWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkubGltaXQoeHgxKSB9XSwgCisgICAgZ19WX2xvY2FsWG91dEVfbGltaXRYMVhfaW5WWF9saW1pdFgzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18ub3V0RSgpLmxpbWl0KDEpKS5pblYoKS5saW1pdCgzKSB9XSwgCisgICAgZ19WWDFYX291dFhrbm93c1hfb3V0RVhjcmVhdGVkWF9yYW5nZVgwXzFYX2luVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgia25vd3MiKS5vdXRFKCJjcmVhdGVkIikucmFuZ2UoMCwgMSkuaW5WKCkgfV0sIAorICAgIGdfVlgxWF9vdXRYa25vd3NYX291dFhjcmVhdGVkWF9yYW5nZVgwXzFYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJrbm93cyIpLm91dCgiY3JlYXRlZCIpLnJhbmdlKDAsIDEpIH1dLCAKKyAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3JhbmdlWDFfM1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS5yYW5nZSgxLCAzKSB9XSwgCisgICAgZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9yYW5nZVgxdmFyXzN2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLnJhbmdlKHh4MSwgeHgyKSB9XSwgCisgICAgZ19WWDFYX291dFhjcmVhdGVkWF9pbkVYY3JlYXRlZFhfcmFuZ2VYMV8zWF9vdXRWOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJjcmVhdGVkIikuaW5FKCJjcmVhdGVkIikucmFuZ2UoMSwgMykub3V0VigpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3JhbmdlWDVfMTFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5yYW5nZSg1LCAxMSkgfV0sIAorICAgIGdfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmluXygpLmFzKCJiIikuaW5fKCkuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS5saW1pdChTY29wZS5sb2NhbCwgMikgfV0sIAorICAgIGdfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJ2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuaW5fKCkuYXMoImIiKS5pbl8oKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIH1dLCAKKyAgICBnX1ZfYXNYYVhfaW5fYXNYYlhfaW5fYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9saW1pdFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5pbl8oKS5hcygiYiIpLmluXygpLmFzKCJjIikuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikubGltaXQoU2NvcGUubG9jYWwsIDEpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfM1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAzKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9yYW5nZVhsb2NhbF8xdmFyXzN2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikucmFuZ2UoU2NvcGUubG9jYWwsIHh4MSwgeHgyKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9yYW5nZVhsb2NhbF8xXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikub3V0KCkuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVhfc2tpcFgxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKS5za2lwKDEpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3NraXBYMXZhclhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKS5za2lwKHh4MSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9mb2xkWF9yYW5nZVhsb2NhbF82XzdYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkucmFuZ2UoU2NvcGUubG9jYWwsIDYsIDcpIH1dLCAKKyAgICBnX1Zfb3V0RV92YWx1ZXNYd2VpZ2h0WF9mb2xkX29yZGVyWGxvY2FsWF9za2lwWGxvY2FsXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIDIpIH1dLCAKKyAgICBnX1Zfb3V0RV92YWx1ZXNYd2VpZ2h0WF9mb2xkX29yZGVyWGxvY2FsWF9za2lwWGxvY2FsXzJ2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgeHgxKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlWF92YWx1ZXNYbmFtZVhfc2tpcFgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm9yZGVyKCkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpLnNraXAoMSkgfV0sIAorICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9yYW5nZVhsb2NhbF8yMF8zMFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAyMCwgMzApIH1dLCAKKyAgICBnX1ZfbWFwWGluX2hhc0lkWDFYWF9saW1pdFgyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVigpLm1hcChfXy5pbl8oKS5oYXNJZCh2aWQxKSkubGltaXQoMikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9yYW5nZVgyXzFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yYW5nZSgyLCAxKSB9XSwgCisgICAgZ19WX3JhbmdlWDNfMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJhbmdlKDMsIDIpIH1dLCAKKyAgICBnX2luamVjdFhsaXN0WDFfMl8zWFhfcmFuZ2VYbG9jYWxfMV8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikgfV0sIAorICAgIGdfaW5qZWN0WGxpc3RYMV8yXzNYWF9saW1pdFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkgfV0sIAorICAgIGdfaW5qZWN0WGxpc3RYMV8yXzNYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAorICAgIGdfaW5qZWN0WDFfMl8zXzRfNVhfbGltaXRYbG9jYWxfMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSwgWzMsIDQsIDVdKS5saW1pdChTY29wZS5sb2NhbCwgMSkgfV0sIAorICAgIGdfaW5qZWN0WDFfMl8zXzRfNV82WF9yYW5nZVhsb2NhbF8xXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIH1dLCAKKyAgICBnX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luWF90aW1lc1gyWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnRpbWVzKDIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luWF91bnRpbFhsb29wc1hpc1gyWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlg1WF9saW1pdFgxWF9pbl9saW1pdFgxWF9pbl92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5saW1pdCgxKS5pbl8oKS5saW1pdCgxKS5pbl8oKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDVYX3JlcGVhdFhsaW1pdFgxWF9pblhfdGltZXNYMVhfcmVwZWF0WGxpbWl0WDFYX2luWF90aW1lc1gxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnRpbWVzKDEpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudGltZXMoMSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlg1WF9yZXBlYXRYbGltaXRYMVhfaW5fYWdncmVnYXRlWHhYWF90aW1lc1gyWF9jYXBYeFg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkuYWdncmVnYXRlKCJ4IikpLnRpbWVzKDIpLmNhcCgieCIpIH1dLCAKKyAgICBnX1ZYNVhfcmVwZWF0WHJhbmdlWDBfMVhfaW5YX3RpbWVzWDJYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbl8oKSkudGltZXMoMikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlg1WF9yZXBlYXRYcmFuZ2VYMF8xWF9pblhfdW50aWxYbG9vcHNYaXNYMlhYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW5fKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYNVhfcmFuZ2VYMF8xWF9pbl9yYW5nZVgwXzFYX2luX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJhbmdlKDAsIDEpLmluXygpLnJhbmdlKDAsIDEpLmluXygpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYNVhfcmVwZWF0WHJhbmdlWDBfMVhfaW5fcmVwZWF0WHJhbmdlWDBfMVhfaW5YX3RpbWVzWDFYWF90aW1lc1gxWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW5fKCkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluXygpKS50aW1lcygxKSkudGltZXMoMSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlg1WF9yZXBlYXRYcmFuZ2VYMF8xWF9pbl9hZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX2NhcFh4WDogW2Z1bmN0aW9uKHtnLCB2aWQ1fSkgeyByZXR1cm4gZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbl8oKS5hZ2dyZWdhdGUoIngiKSkudGltZXMoMikuY2FwKCJ4IikgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYRWFybHlMaW1pdFN0cmF0ZWd5WF9WWDVYX3JlcGVhdFhsaW1pdFgxWF9pbl9saW1pdFgxWF9saW1pdFgxWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7ZywgdmlkNX0pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKS5saW1pdCgxKS5saW1pdCgxKSkudGltZXMoMikgfV0sIAorICAgIGdfVl9yZXBlYXRYb3V0X3doZXJlWGhhc1huYW1lWF9vcmRlcl9ieVhuYW1lWF9saW1pdFgxWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkud2hlcmUoX18uaGFzKCJuYW1lIikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKSkudGltZXMoMikgfV0sIAorICAgIGdfVl9vdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWF9vdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkud2hlcmUoX18uaGFzKCJuYW1lIikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKS5vdXQoKS53aGVyZShfXy5oYXMoIm5hbWUiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMSkpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVYSkFNWFhfcmVwZWF0WG91dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJKQU0iKS5yZXBlYXQoX18ub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpKS50aW1lcygyKSB9XSwgCisgICAgZ19WX2hhc1huYW1lWEpBTVhYX291dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWF9vdXRYZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJKQU0iKS5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMikub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVYRFJVTVNYWF9yZXBlYXRYaW5YZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfcmFuZ2VYMV80WFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEUlVNUyIpLnJlcGVhdChfXy5pbl8oImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikucmFuZ2UoMSwgNCkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVYRFJVTVNYWF9pblhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9yYW5nZVgxXzRYX2luWGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX3JhbmdlWDFfNFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEUlVNUyIpLmluXygiZm9sbG93ZWRCeSIpLm9yZGVyKCkuYnkoIm5hbWUiKS5yYW5nZSgxLCA0KS5pbl8oImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikucmFuZ2UoMSwgNCkgfV0sIAorICAgIGdfVl9jaG9vc2VYdmFsdWVzWGFnZVhfaXNYbHRlWDMwWFhfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX291dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy52YWx1ZXMoImFnZSIpLmlzKFAubHRlKDMwKSksIF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS5saW1pdCgxKSwgX18ub3V0KCkub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpKSB9XSwgCisgICAgZ19WX2Nob29zZVh2YWx1ZXNYYWdlWF9pc1hsdGVYMzBYWF9sb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYX2xvY2FsWG91dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmx0ZSgzMCkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMSkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMikpKSB9XSwgCisgICAgZ19WX2hhc1huYW1lWEhFWV9CT19ESURETEVZWFhfdW5pb25Yb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDJYX291dFhzdW5nQnlYX29yZGVyX2J5WG5hbWVYX2J5WG5hbWVYX2xpbWl0WDFYWF91bmlvblhvdXRYZm9sbG93ZWRCeVhfb3JkZXJfbGltaXRYMlhfb3V0WHN1bmdCeVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiSEVZIEJPIERJRERMRVkiKS51bmlvbihfXy5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMiksIF9fLm91dCgic3VuZ0J5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKS51bmlvbihfXy5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJuYW1lIikubGltaXQoMiksIF9fLm91dCgic3VuZ0J5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDEpKSB9XSwgCisgICAgZ19WX2hhc1huYW1lWEhFWV9CT19ESURETEVZWFhfcmVwZWF0WHVuaW9uWG91dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWF9vdXRYc3VuZ0J5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgxWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiSEVZIEJPIERJRERMRVkiKS5yZXBlYXQoX18udW5pb24oX18ub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgibmFtZSIpLmxpbWl0KDIpLCBfXy5vdXQoInN1bmdCeSIpLm9yZGVyKCkuYnkoIm5hbWUiKS5saW1pdCgxKSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX1Zfc2FtcGxlWDFYX2J5WGFnZVhfYnlYVF9pZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhbXBsZSgxKS5ieSgiYWdlIikuYnkoVC5pZCkgfV0sIAorICAgIGdfRV9zYW1wbGVYMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnNhbXBsZSgxKSB9XSwgCisgICAgZ19FX3NhbXBsZVgyWF9ieVh3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5zYW1wbGUoMikuYnkoIndlaWdodCIpIH1dLCAKKyAgICBnX1ZfbG9jYWxYb3V0RV9zYW1wbGVYMVhfYnlYd2VpZ2h0WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm91dEUoKS5zYW1wbGUoMSkuYnkoIndlaWdodCIpKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9vcmRlcl9zYW1wbGVYMlhfZm9sZFh1bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneSh7c2VlZDogOTk5OTk5fSkpLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5vcmRlcigpLnNhbXBsZSgyKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X29yZGVyX2ZvbGRfc2FtcGxlWGxvY2FsXzVYWHVuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHtzZWVkOiA5OTk5OTl9KSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm9yZGVyKCkuZm9sZCgpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9vcmRlcl9ieVhsYWJlbF9kZXNjWF9zYW1wbGVYMVhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHtzZWVkOiA5OTk5OTl9KSkuVigpLm9yZGVyKCkuYnkoVC5sYWJlbCwgT3JkZXIuZGVzYykuc2FtcGxlKDEpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX3NhbXBsZVhsb2NhbF81WDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuc2FtcGxlKFNjb3BlLmxvY2FsLCA1KSB9XSwgCisgICAgZ19WX3JlcGVhdFhzYW1wbGVYMlhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uc2FtcGxlKDIpKS50aW1lcygyKSB9XSwgCisgICAgZ19WX3NhbXBsZVgyWF9zYW1wbGVYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhbXBsZSgyKS5zYW1wbGUoMikgfV0sIAorICAgIGdfVjNfcmVwZWF0WG91dF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3NhbXBsZVgyWF9hZ2dyZWdhdGVYeFhYX3VudGlsWGxvb3BzX2lzWDJYWF9jYXBYeFhfdW5mb2xkOiBbZnVuY3Rpb24oe2csIHZpZDN9KSB7IHJldHVybiBnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoInBlcmZvcm1hbmNlcyIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoIngiKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkuY2FwKCJ4IikudW5mb2xkKCkgfV0sIAorICAgIGdfVjNfb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfc2FtcGxlWDJYX2FnZ3JlZ2F0ZVh4WF9vdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF9zYW1wbGVYMlhfYWdncmVnYXRlWHhYX2NhcFh4WF91bmZvbGQ6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcuVih2aWQzKS5vdXQoKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiKS5zYW1wbGUoMikuYWdncmVnYXRlKCJ4Iikub3V0KCkub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgieCIpLmNhcCgieCIpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3NpbXBsZVBhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS5zaW1wbGVQYXRoKCkgfV0sIAorICAgIGdfVl9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF90aW1lc1gzWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykucGF0aCgpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zaW1wbGVQYXRoX2J5WGxhYmVsWF9mcm9tWGJYX3RvWGNYX3BhdGhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLnNpbXBsZVBhdGgoKS5ieShULmxhYmVsKS5mcm9tXygiYiIpLnRvKCJjIikucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfaW5qZWN0WDBYX1ZfYm90aF9jb2FsZXNjZVhoYXNYbmFtZV9tYXJrb1hfYm90aF9jb25zdGFudFgwWFhfc2ltcGxlUGF0aF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcygibmFtZSIsICJtYXJrbyIpLmJvdGgoKSwgX18uY29uc3RhbnQoMCkpLnNpbXBsZVBhdGgoKS5wYXRoKCkgfV0sIAorICAgIGdfVl9ib3RoX2FzWGFYX2JvdGhfYXNYYlhfc2ltcGxlUGF0aF9wYXRoX2J5WGFnZVhfX2Zyb21YYVhfdG9YYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5hcygiYSIpLmJvdGgoKS5hcygiYiIpLnNpbXBsZVBhdGgoKS5wYXRoKCkuYnkoImFnZSIpLmZyb21fKCJhIikudG8oImIiKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsWGdsb2JhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKDIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYMnZhclg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKHh4MSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFg3WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKDcpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3RhaWxYN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLnRhaWwoNykgfV0sIAorICAgIGdfVl9yZXBlYXRYaW5fb3V0WF90aW1lc1gzWF90YWlsWDdYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uaW5fKCkub3V0KCkpLnRpbWVzKDMpLnRhaWwoNykuY291bnQoKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WGFYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbF8xWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLnNlbGVjdCgiYSIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhhWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoX18udW5mb2xkKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikub3V0KCkuYXMoImMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJ2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLnRhaWwoU2NvcGUubG9jYWwsIHh4MSkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfdGFpbFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikudGFpbChTY29wZS5sb2NhbCwgMSkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxfMVhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJhIikub3V0KCkuYXMoImEiKS5zZWxlY3QoUG9wLm1peGVkLCAiYSIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYbGltaXRYbG9jYWxfMFhYX3RhaWxYbG9jYWxfMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLnNlbGVjdChQb3AubWl4ZWQsICJhIikuYnkoX18ubGltaXQoU2NvcGUubG9jYWwsIDApKS50YWlsKFNjb3BlLmxvY2FsLCAxKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwsIDIpIH1dLCAKKyAgICBnX1ZYMVhfdmFsdWVzWGFnZVhfdGFpbFhsb2NhbF81WDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikudGFpbChTY29wZS5sb2NhbCwgNTApIH1dLCAKKyAgICBnX2luamVjdFhsaXN0WDFfMl8zWFhfdGFpbFhsb2NhbF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlTWFwWG5hbWVYX3RhaWxYbG9jYWxfMVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZU1hcCgibmFtZSIpLnRhaWwoU2NvcGUubG9jYWwsIDEpIH1dLCAKKyAgICBnX2luamVjdFgxXzJfM1hfdGFpbFhsb2NhbF8xWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyLCAzXSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkgfV0sIAorICAgIGdfaW5qZWN0WDFfMl8zXzRfNV82WF90YWlsWGxvY2FsXzFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkudGFpbChTY29wZS5sb2NhbCwgMSkgfV0sIAorICAgIGdfaW5qZWN0WDFfMl8zXzRfNVhfdGFpbFhsb2NhbF8yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDMsIDQsIDVdKS50YWlsKFNjb3BlLmxvY2FsLCAyKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9pc1h0eXBlT2ZYR1R5cGVfU1RSSU5HWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2lzWHR5cGVPZlhqYXZhX2xhbmdfU3RyaW5nWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmlzKFAudHlwZU9mKCJTdHJpbmciKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV90eXBlT2ZYR1R5cGVfU1RSSU5HWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX29yWGhhc1huYW1lX3R5cGVPZlhHVHlwZV9TVFJJTkdYWF9faGFzWGFnZV90eXBlT2ZYR1R5cGVfSU5UWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3IoX18uaGFzKCJuYW1lIiwgUC50eXBlT2YoR1R5cGUuc3RyaW5nKSksIF9fLmhhcygiYWdlIiwgUC50eXBlT2YoR1R5cGUuaW50KSkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfYW5kWGhhc1huYW1lX3R5cGVPZlhHVHlwZV9TVFJJTkdYWF9faGFzWGFnZV90eXBlT2ZYR1R5cGVfSU5UWFhYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYW5kKF9fLmhhcygibmFtZSIsIFAudHlwZU9mKEdUeXBlLnN0cmluZykpLCBfXy5oYXMoImFnZSIsIFAudHlwZU9mKEdUeXBlLmludCkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX25vdFhoYXNYYWdlX3R5cGVPZlhHVHlwZV9TVFJJTkdYWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ub3QoX18uaGFzKCJhZ2UiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1hub3RYdHlwZU9mWEdUeXBlX1NUUklOR1hYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLm5vdChQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWHN0cmluZ1N0cmluZ1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5pcyhQLnR5cGVPZigiU3RyaW5nIikpIH1dLCAKKyAgICBnX1Zfb3JYdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX192YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3IoX18udmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKSwgX18udmFsdWVzKCJuYW1lIikuaXMoUC50eXBlT2YoR1R5cGUuc3RyaW5nKSkpLmNvdW50KCkgfV0sIAorICAgIGdfVl93aGVyZVh2YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnZhbHVlcygibmFtZSIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3doZXJlWHZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9TVFJJTkdYWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuc3RyaW5nKSkpLmNvdW50KCkgfV0sIAorICAgIGdfVl93aGVyZVhub3RYdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWFhfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5ub3QoX18udmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX05VTExYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5udWxsKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfQk9PTEVBTlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmJvb2xlYW4pKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9DSEFSWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuY2hhcikpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JJTkFSWVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLmJpbmFyeSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0RVUkFUSU9OWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUuZHVyYXRpb24pKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhub25fcmVnaXN0ZXJlZF9OYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoIm5vbi1yZWdpc3RlcmVkLU5hbWUiKSkgfV0sIAorICAgIGdfaW5qZWN0WHRydWVYX2lzWHR5cGVPZlhHVHlwZV9CT09MRUFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QodHJ1ZSkuaXMoUC50eXBlT2YoR1R5cGUuYm9vbGVhbikpIH1dLCAKKyAgICBnX1ZfcGF0aF9pc1h0eXBlT2ZYR1R5cGVfUEFUSFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLnBhdGgpKSB9XSwgCisgICAgZ19WX291dF9wYXRoX2lzWHR5cGVPZlhHVHlwZV9QQVRIWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5wYXRoKSkuY291bnQoKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWF9vdXRfb3V0X3BhdGhfaXNYdHlwZU9mWEdUeXBlX1BBVEhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLnBhdGgpKSB9XSwgCisgICAgZ19WX291dF90cmVlX2lzWHR5cGVPZlhHVHlwZV9UUkVFWFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgpLnRyZWUoKS5pcyhQLnR5cGVPZihHVHlwZS50cmVlKSkuY291bnQoKSB9XSwgCisgICAgZ19WX3doZXJlWHRyZWVfaXNYdHlwZU9mWEdUeXBlX1RSRUVYWFhfdmFsdWVzX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnRyZWUoKS5pcyhQLnR5cGVPZihHVHlwZS50cmVlKSkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWF9pc1h0eXBlT2ZYR1R5cGVfR1JBUEhYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgia25vd3MiKS5zdWJncmFwaCgic2ciKS5jYXAoInNnIikuaXMoUC50eXBlT2YoR1R5cGUuZ3JhcGgpKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWF9pc1hfbm90WHR5cGVPZlhHVHlwZV9HUkFQSFhYWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgia25vd3MiKS5zdWJncmFwaCgic2ciKS5jYXAoInNnIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuZ3JhcGgpKSkuY291bnQoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9QQVRIWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaXMoUC50eXBlT2YoR1R5cGUucGF0aCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1RSRUVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS50cmVlKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfR1JBUEhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pcyhQLnR5cGVPZihHVHlwZS5ncmFwaCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1ZQUk9QRVJUWVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmlzKFAudHlwZU9mKEdUeXBlLnZwcm9wZXJ0eSkpIH1dLCAKKyAgICBnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfZXFYYlhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW5fKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoImEiLCBQLmVxKCJiIikpIH1dLCAKKyAgICBnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfbmVxWGJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS5hcygiYSIpLm91dCgpLmluXygpLmhhcygiYWdlIikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLndoZXJlKCJhIiwgUC5uZXEoImIiKSkgfV0sIAorICAgIGdfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYl9oYXNYbmFtZV9tYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW5fKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoX18uYXMoImIiKS5oYXMoIm5hbWUiLCAibWFya28iKSkgfV0sIAorICAgIGdfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYV9vdXRYa25vd3NYX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW5fKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfd2hlcmVYYXNYYVhfbmFtZV9pc1hqb3NoWFhfaW5YY3JlYXRlZFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS53aGVyZShfXy5hcygiYSIpLnZhbHVlcygibmFtZSIpLmlzKCJqb3NoIikpLmluXygiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfam9zaF9wZXRlclhfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfbmFtZV93aGVyZVh3aXRoaW5YYVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgWyJqb3NoIiwgInBldGVyIl0pLlYodmlkMSkub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikud2hlcmUoUC53aXRoaW4oImEiKSkgfV0sIAorICAgIGdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYV9uZXFYYlhYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpLmFzKCJiIikud2hlcmUoImEiLCBQLm5lcSgiYiIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hiWF93aGVyZVhhc1hiWF9vdXRYY3JlYXRlZFhfaGFzWG5hbWVfcmlwcGxlWFhfdmFsdWVzWGFnZV9uYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikuYXMoImIiKS53aGVyZShfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSkudmFsdWVzKCJhZ2UiLCAibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWGVxWGFYWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS53aGVyZShQLmVxKCJhIikpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWG5lcVhhWFhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikud2hlcmUoUC5uZXEoImEiKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlgxWF9vdXRfYWdncmVnYXRlWHhYX291dF93aGVyZVhub3RYd2l0aGluWGFYWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5hZ2dyZWdhdGUoIngiKS5vdXQoKS53aGVyZShQLm5vdChQLndpdGhpbigieCIpKSkgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV9nX1ZYMlhYX1ZYMVhfb3V0X3doZXJlWG5lcVhhWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS53aGVyZShfXy5pZCgpLndoZXJlKFAubmVxKCJhIikpKSB9XSwgCisgICAgZ19WWDFYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF93aGVyZVh3aXRob3V0WGVYWF9hZ2dyZWdhdGVYZVhfb3RoZXJWWF9lbWl0X3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5yZXBlYXQoX18uYm90aEUoImNyZWF0ZWQiKS53aGVyZShQLndpdGhvdXQoImUiKSkuYWdncmVnYXRlKCJlIikub3RoZXJWKCkpLmVtaXQoKS5wYXRoKCkgfV0sIAorICAgIGdfVl93aGVyZVhub3RYb3V0WGNyZWF0ZWRYWFhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkud2hlcmUoX18ubm90KF9fLm91dCgiY3JlYXRlZCIpKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYYW5kWGFzWGFYX291dFhrbm93c1hfYXNYYlhfX29yWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYX19hc1hiWF9pblhrbm93c1hfY291bnRfaXNYbm90WGVxWDBYWFhYWF9zZWxlY3RYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLndoZXJlKF9fLmFuZChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5vcihfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSwgX18uYXMoImIiKS5pbl8oImtub3dzIikuY291bnQoKS5pcyhQLm5vdChQLmVxKDApKSkpKSkuc2VsZWN0KCJhIiwgImIiKSB9XSwgCisgICAgZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkud2hlcmUoX18ub3V0KCJjcmVhdGVkIikuYW5kKCkub3V0KCJrbm93cyIpLm9yKCkuaW5fKCJrbm93cyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF93aGVyZVhhbmRYYXNYYlhfaW5fX25vdFhhc1hhWF9vdXRYY3JlYXRlZFhfaGFzWG5hbWVfcmlwcGxlWFhYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIikud2hlcmUoX18uYW5kKF9fLmFzKCJiIikuaW5fKCksIF9fLm5vdChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSkpKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX2luWGNyZWF0ZWRYX2FzWGNYX2JvdGhYa25vd3NYX2JvdGhYa25vd3NYX2FzWGRYX3doZXJlWGNfX25vdFhlcVhhWF9vclhlcVhkWFhYWF9zZWxlY3RYYV9iX2NfZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpLmJvdGgoImtub3dzIikuYm90aCgia25vd3MiKS5hcygiZCIpLndoZXJlKCJjIiwgUC5ub3QoUC5lcSgiYSIpLm9yKFAuZXEoImQiKSkpKS5zZWxlY3QoImEiLCAiYiIsICJjIiwgImQiKSB9XSwgCisgICAgZ19WX2FzWGFYX291dF9hc1hiWF93aGVyZVhpbl9jb3VudF9pc1hlcVgzWFhfb3Jfd2hlcmVYb3V0WGNyZWF0ZWRYX2FuZF9oYXNYbGFiZWxfcGVyc29uWFhYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikud2hlcmUoX18uYXMoImIiKS5pbl8oKS5jb3VudCgpLmlzKFAuZXEoMykpLm9yKCkud2hlcmUoX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5hbmQoKS5hcygiYiIpLmhhcyhULmxhYmVsLCAicGVyc29uIikpKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFfZ3RYYlhYX2J5WGFnZVhfc2VsZWN0WGFfYlhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW5fKCJjcmVhdGVkIikuYXMoImIiKS53aGVyZSgiYSIsIFAuZ3QoImIiKSkuYnkoImFnZSIpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX3doZXJlWGFfZ3RYYlhfb3JYZXFYYlhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYd2VpZ2h0WF9zZWxlY3RYYV9jWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXRFKCJjcmVhdGVkIikuYXMoImIiKS5pblYoKS5hcygiYyIpLndoZXJlKCJhIiwgUC5ndCgiYiIpLm9yKFAuZXEoImIiKSkpLmJ5KCJhZ2UiKS5ieSgid2VpZ2h0IikuYnkoIndlaWdodCIpLnNlbGVjdCgiYSIsICJjIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX2luWGNyZWF0ZWRYX2FzWGRYX3doZXJlWGFfbHRYYlhfb3JYZ3RYY1hYX2FuZFhuZXFYZFhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYaW5YY3JlYXRlZFhfdmFsdWVzWGFnZVhfbWluWF9zZWxlY3RYYV9jX2RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dEUoImNyZWF0ZWQiKS5hcygiYiIpLmluVigpLmFzKCJjIikuaW5fKCJjcmVhdGVkIikuYXMoImQiKS53aGVyZSgiYSIsIFAubHQoImIiKS5vcihQLmd0KCJjIikpLmFuZChQLm5lcSgiZCIpKSkuYnkoImFnZSIpLmJ5KCJ3ZWlnaHQiKS5ieShfXy5pbl8oImNyZWF0ZWQiKS52YWx1ZXMoImFnZSIpLm1pbigpKS5zZWxlY3QoImEiLCAiYyIsICJkIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX2FzWGFYX291dF9oYXNYYWdlWF93aGVyZVhndFhhWFhfYnlYYWdlWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoKS5oYXMoImFnZSIpLndoZXJlKFAuZ3QoImEiKSkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYM1hfYXNYYVhfaW5fb3V0X2FzWGJYX3doZXJlWGFfZXFYYlhYX2J5WGFnZVhfbmFtZTogW2Z1bmN0aW9uKHtnLCB2aWQzfSkgeyByZXR1cm4gZy5WKHZpZDMpLmFzKCJhIikuaW5fKCkub3V0KCkuYXMoImIiKS53aGVyZSgiYSIsIFAuZXEoImIiKSkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WWDNYX2FzWGFYX2luX291dF9hc1hiWF93aGVyZVhhX2VxWGJYWF9ieVhhZ2VYX25hbWU6IFtmdW5jdGlvbih7ZywgdmlkM30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYodmlkMykuYXMoImEiKS5pbl8oKS5vdXQoKS5hcygiYiIpLndoZXJlKCJhIiwgUC5lcSgiYiIpKS5ieSgiYWdlIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9hc1huWF93aGVyZVhvclhoYXNMYWJlbFhzb2Z0d2FyZVhfaGFzTGFiZWxYcGVyc29uWFhYX3NlbGVjdFhuWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoIm4iKS53aGVyZShfXy5vcihfXy5oYXNMYWJlbCgic29mdHdhcmUiKSwgX18uaGFzTGFiZWwoInBlcnNvbiIpKSkuc2VsZWN0KCJuIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2FzWG5YX3doZXJlWG9yWHNlbGVjdFhuWF9oYXNMYWJlbFhzb2Z0d2FyZVhfc2VsZWN0WG5YX2hhc0xhYmVsWHBlcnNvblhYWF9zZWxlY3RYblhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJuIikud2hlcmUoX18ub3IoX18uc2VsZWN0KCJuIikuaGFzTGFiZWwoInNvZnR3YXJlIiksIF9fLnNlbGVjdCgibiIpLmhhc0xhYmVsKCJwZXJzb24iKSkpLnNlbGVjdCgibiIpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHhYX3doZXJlWGluRVhrbm93c1hfY291bnRfaXNYZ3RlWDFYWFhfc2VsZWN0WHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoIngiKS53aGVyZShfXy5pbkUoImtub3dzIikuY291bnQoKS5pcyhQLmd0ZSgxKSkpLnNlbGVjdCgieCIpIH1dLCAKKyAgICBnZXRfZ19WX3doZXJlWGFnZV9pc1hndF8zMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMzApKSkgfV0sIAorICAgIGdfVl93aGVyZVhsYWJlbF9pc1hzb2Z0d2FyZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKCJzb2Z0d2FyZSIpKSB9XSwgCisgICAgZ19WX3doZXJlWGxhYmVsX2lzWHBlcnNvblhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKCJwZXJzb24iKSkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KCkpLlYoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5WF9WX291dF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLm91dCgpLmNvdW50KCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1Zfd2hlcmVYb3V0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLndoZXJlKF9fLm91dCgpKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5WF9WX29yZGVyX2J5WHZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3koKSkuVigpLm9yZGVyKCkuYnkoX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYQ29ubmVjdGl2ZVN0cmF0ZWd5U3RyYXRlZ3lYX1ZfaGFzWG5hbWVfbWFya29YX29yX3doZXJlWGluWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBDb25uZWN0aXZlU3RyYXRlZ3koKSkuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKCkud2hlcmUoX18uaW5fKCJrbm93cyIpLmhhcygibmFtZSIsICJtYXJrbyIpKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hDb25uZWN0aXZlU3RyYXRlZ3lYX1ZfaGFzWG5hbWVfbWFya29YX29yX3doZXJlWGluWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKCkud2hlcmUoX18uaW5fKCJrbm93cyIpLmhhcygibmFtZSIsICJtYXJrbyIpKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hDb3VudFN0cmF0ZWd5WF9WX3doZXJlWG91dEVfY291bnRfaXNYMFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBDb3VudFN0cmF0ZWd5KCkpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYQ291bnRTdHJhdGVneVhfVl93aGVyZVhvdXRFX2NvdW50X2lzWDBYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhDb3VudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWEVhcmx5TGltaXRTdHJhdGVneVhfVl9vdXRfb3JkZXJfYnlYbmFtZVhfdmFsdWVNYXBfbGltaXRYM1hfc2VsZWN0WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBFYXJseUxpbWl0U3RyYXRlZ3koKSkuVigpLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdCgibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWEVhcmx5TGltaXRTdHJhdGVneVhfVl9vdXRfb3JkZXJfYnlYbmFtZVhfdmFsdWVNYXBfbGltaXRYM1hfc2VsZWN0WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdCgibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX3RydWVfbG9nV2FybmluZ19mYWxzZVhYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KHt0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwgbG9nV2FybmluZzogZmFsc2V9KSkuVigpLm91dCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX2ZhbHNlX2xvZ1dhcm5pbmdfZmFsc2VYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh7dGhyb3dFeGNlcHRpb246IGZhbHNlLCBsb2dXYXJuaW5nOiBmYWxzZX0pKS5WKCkub3V0KCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKS5vdXQoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hFbGVtZW50SWRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgRWxlbWVudElkU3RyYXRlZ3koKSkuVigpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWEVsZW1lbnRJZFN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKEVsZW1lbnRJZFN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYRmlsdGVyUmFua2luZ1N0cmF0ZWd5WF9WX291dF9vcmRlcl9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgRmlsdGVyUmFua2luZ1N0cmF0ZWd5KCkpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYRmlsdGVyUmFua2luZ1N0cmF0ZWd5WF9WX291dF9vcmRlcl9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYR3JhcGhGaWx0ZXJTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgR3JhcGhGaWx0ZXJTdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYR3JhcGhGaWx0ZXJTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lYRGV0YWNoZWRGYWN0b3J5WFhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koe2hhbHRlZFRyYXZlcnNlckZhY3Rvcnk6ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeSJ9KSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5WFJlZmVyZW5jZUZhY3RvcnlYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSh7aGFsdGVkVHJhdmVyc2VyRmFjdG9yeTogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3RvcnkifSkpLlYoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5WF9WX2lkZW50aXR5X291dDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3koKSkuVigpLmlkZW50aXR5KCkub3V0KCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lYX1ZfaWRlbnRpdHlfb3V0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KS5WKCkuaWRlbnRpdHkoKS5vdXQoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSkuVigpLm91dEUoKS5pblYoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dEUoKS5pblYoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hJbmxpbmVGaWx0ZXJTdHJhdGVneVhfVl9maWx0ZXJYaGFzWG5hbWVfbWFya29YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgSW5saW5lRmlsdGVyU3RyYXRlZ3koKSkuVigpLmZpbHRlcihfXy5oYXMoIm5hbWUiLCAibWFya28iKSkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYSW5saW5lRmlsdGVyU3RyYXRlZ3lYX1ZfZmlsdGVyWGhhc1huYW1lX21hcmtvWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3kpLlYoKS5maWx0ZXIoX18uaGFzKCJuYW1lIiwgIm1hcmtvIikpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkuVigpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWExhenlCYXJyaWVyU3RyYXRlZ3lYX1Zfb3V0X2JvdGhFX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBMYXp5QmFycmllclN0cmF0ZWd5KCkpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9vdXRfYm90aEVfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hNYXRjaEFsZ29yaXRobVN0cmF0ZWd5WG1hdGNoQWxnb3JpdGhtX0NvdW50TWF0Y2hBbGdvcml0aG1YWF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KHttYXRjaEFsZ29yaXRobTogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwJENvdW50TWF0Y2hBbGdvcml0aG0ifSkpLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJjIikpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lYbWF0Y2hBbGdvcml0aG1fR3JlZWR5TWF0Y2hBbGdvcml0aG1YWF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KHttYXRjaEFsZ29yaXRobTogIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwJEdyZWVkeU1hdGNoQWxnb3JpdGhtIn0pKS5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hNYXRjaEFsZ29yaXRobVN0cmF0ZWd5WF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJjIikpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWE1hdGNoUHJlZGljYXRlU3RyYXRlZ3lYX1ZfbWF0Y2hYYV9jcmVhdGVkX2xvcF9iX19iXzBjcmVhdGVkXzI5X2NYX3doZXJlWGNfcmVwZWF0WG91dFhfdGltZXNYMlhYX3NlbGVjdFhhX2JfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IE1hdGNoUHJlZGljYXRlU3RyYXRlZ3koKSkuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgImxvcCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKSkud2hlcmUoX18uYXMoImMiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoImEiLCAiYiIsICJjIikgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYTWF0Y2hQcmVkaWNhdGVTdHJhdGVneVhfVl9tYXRjaFhhX2NyZWF0ZWRfbG9wX2JfX2JfMGNyZWF0ZWRfMjlfY1hfd2hlcmVYY19yZXBlYXRYb3V0WF90aW1lc1gyWFhfc2VsZWN0WGFfYl9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5oYXMoIm5hbWUiLCAibG9wIikuYXMoImIiKSwgX18uYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5oYXMoImFnZSIsIDI5KS5hcygiYyIpKS53aGVyZShfXy5hcygiYyIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdCgiYSIsICJiIiwgImMiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpLlYoKSB9XSwgCisgICAgZ19WX2Nvd29ya2VyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuZmlsdGVyKF9fLm91dEUoImNyZWF0ZWQiKSkuYWdncmVnYXRlKCJwIikuYXMoInAxIikudmFsdWVzKCJuYW1lIikuYXMoInAxbiIpLnNlbGVjdCgicCIpLnVuZm9sZCgpLndoZXJlKFAubmVxKCJwMSIpKS5hcygicDIiKS52YWx1ZXMoIm5hbWUiKS5hcygicDJuIikuc2VsZWN0KCJwMiIpLm91dCgiY3JlYXRlZCIpLmNob29zZShfXy5pbl8oImNyZWF0ZWQiKS53aGVyZShQLmVxKCJwMSIpKSwgX18udmFsdWVzKCJuYW1lIiksIF9fLmNvbnN0YW50KFtdKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoInAxbiIpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdCgicDJuIikpLmJ5KF9fLnVuZm9sZCgpLmZvbGQoKS5wcm9qZWN0KCJudW1Db0NyZWF0ZWQiLCAiY29DcmVhdGVkIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkgfV0sIAorICAgIGdfVl9jb3dvcmtlcl93aXRoX21pZFY6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5maWx0ZXIoX18ub3V0RSgiY3JlYXRlZCIpKS5hcygicDEiKS5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLndoZXJlKFAubmVxKCJwMSIpKS5maWx0ZXIoX18ub3V0RSgiY3JlYXRlZCIpKS5hcygicDIiKS5tYXAoX18ub3V0KCJjcmVhdGVkIikud2hlcmUoX18uaW5fKCJjcmVhdGVkIikuYXMoInAxIikpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoInAxIikuYnkoIm5hbWUiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoInAyIikuYnkoIm5hbWUiKSkuYnkoX18ucHJvamVjdCgibnVtQ29DcmVhdGVkIiwgImNvQ3JlYXRlZCIpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkuYnkoKSkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWE9wdGlvbnNTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KCkpLlYoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hPcHRpb25zU3RyYXRlZ3lYbXlWYXJfbXlWYWx1ZVhYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneSh7bXlWYXI6ICJteVZhbHVlIn0pKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWE9yZGVyTGltaXRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgT3JkZXJMaW1pdFN0cmF0ZWd5KCkpLlYoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hPcmRlckxpbWl0U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIiwgImIiXX0pKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJjIl19KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9ib3RoRV93ZWlnaHQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkuVigpLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfYm90aEVfd2VpZ2h0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYiJdfSkpLlYoKS5ib3RoRSgpLnZhbHVlcygid2VpZ2h0IikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1ZfYm90aEVfZGVkdXBfd2VpZ2h0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSIsICJiIl19KSkuVigpLmJvdGhFKCkuZGVkdXAoKS52YWx1ZXMoIndlaWdodCIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9jWFhfVl9ib3RoRV93ZWlnaHQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJjIl19KSkuVigpLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX1ZfYm90aF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2JYWF9WX2JvdGhfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIndlaWdodCIsIDIuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImIiXX0pKS5WKCkuYm90aCgpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX2JvdGhfZGVkdXBfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIndlaWdodCIsIDIuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImEiLCAiYiJdfSkpLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfY1hYX1ZfYm90aF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYyJdfSkpLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX291dF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLlYoKS5vdXQoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfaW5fbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIndlaWdodCIsIDIuMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImIiXX0pKS5WKCkuaW5fKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1Zfb3V0X25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJiIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIiwgImIiXX0pKS5WKCkub3V0KCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX291dF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImEiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMi4wKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYyJdfSkpLlYoKS5vdXQoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2FsaWNlWF9hZGRYc2VsZlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkRSgic2VsZiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiX3BhcnRpdGlvbiIsICJhIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcygiX3BhcnRpdGlvbiIsICJhIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFh6ZXJvWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkWHNlbGZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImEiXX0pKS5pbmplY3QoMCkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hZGRFKCJzZWxmIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VWOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLm1lcmdlVih4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhfbWVyZ2VWOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLmluamVjdCgwKS5tZXJnZVYoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiX3BhcnRpdGlvbiIsICJhIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VFOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiAiX3BhcnRpdGlvbiIsIHdyaXRlUGFydGl0aW9uOiAiYSIsIHJlYWRQYXJ0aXRpb25zOiBbImEiXX0pKS5tZXJnZUUoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJrbm93cyIsICJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhtZXJnZUU6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiX3BhcnRpdGlvbiIsICJhIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLmluamVjdCgwKS5tZXJnZUUoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJrbm93cyIsICJfcGFydGl0aW9uIiwgImEiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfYWxpY2VYX29wdGlvblhvbk1hdGNoX25hbWVfYm9iWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYSIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJib2IiKS5oYXMoIl9wYXJ0aXRpb24iLCAiYSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VWX29wdGlvblhvbkNyZWF0ZVg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJfcGFydGl0aW9uIiwgImIiKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICJfcGFydGl0aW9uIiwgd3JpdGVQYXJ0aXRpb246ICJhIiwgcmVhZFBhcnRpdGlvbnM6IFsiYSJdfSkpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiYWxpY2UiKS5oYXMoImFnZSIsIDM1KS5oYXMoIl9wYXJ0aXRpb24iLCAiYSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfaW5qZWN0WDBYX19tZXJnZVZfb3B0aW9uWG9uQ3JlYXRlWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIl9wYXJ0aXRpb24iLCAiYiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogIl9wYXJ0aXRpb24iLCB3cml0ZVBhcnRpdGlvbjogImEiLCByZWFkUGFydGl0aW9uczogWyJhIl19KSkuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiYWxpY2UiKS5oYXMoImFnZSIsIDM1KS5oYXMoIl9wYXJ0aXRpb24iLCAiYSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFBhdGhQcm9jZXNzb3JTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGF0aFByb2Nlc3NvclN0cmF0ZWd5KCkpLlYoKS5hcygiYSIpLnNlbGVjdCgiYSIpLmJ5KF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hQYXRoUHJvY2Vzc29yU3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUGF0aFJldHJhY3Rpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUGF0aFJldHJhY3Rpb25TdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUGF0aFJldHJhY3Rpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfVl9zaG9ydGVzdHBhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJ2IikuYm90aCgpLmFzKCJ2IikucHJvamVjdCgic3JjIiwgInRndCIsICJwIikuYnkoX18uc2VsZWN0KFBvcC5maXJzdCwgInYiKSkuYnkoX18uc2VsZWN0KFBvcC5sYXN0LCAidiIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgInYiKSkuYXMoInRyaXBsZSIpLmdyb3VwKCJ4IikuYnkoX18uc2VsZWN0KCJzcmMiLCAidGd0IikpLmJ5KF9fLnNlbGVjdCgicCIpLmZvbGQoKSkuc2VsZWN0KCJ0Z3QiKS5iYXJyaWVyKCkucmVwZWF0KF9fLmJvdGgoKS5hcygidiIpLnByb2plY3QoInNyYyIsICJ0Z3QiLCAicCIpLmJ5KF9fLnNlbGVjdChQb3AuZmlyc3QsICJ2IikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgInYiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsICJ2IikpLmFzKCJ0IikuZmlsdGVyKF9fLnNlbGVjdChQb3AuYWxsLCAicCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcygibCIpLnNlbGVjdChQb3AubGFzdCwgInQiKS5zZWxlY3QoUG9wLmFsbCwgInAiKS5kZWR1cChTY29wZS5sb2NhbCkuY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAuZXEoImwiKSkpLndoZXJlKCJzcmMiLCBQLm5lcSgidGd0IikpLnNlbGVjdChQb3AubGFzdCwgInQiKS5ub3QoX18uc2VsZWN0KFBvcC5hbGwsICJwIikuYXMoInAiKS5jb3VudChTY29wZS5sb2NhbCkuYXMoImwiKS5zZWxlY3QoUG9wLmFsbCwgIngiKS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKCJ0IikpLmJ5KF9fLnNlbGVjdCgic3JjIiwgInRndCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdCgibCIpKSwgX18ud2hlcmUoUC5lcSgicCIpKSkpKS5iYXJyaWVyKCkuZ3JvdXAoIngiKS5ieShfXy5zZWxlY3QoInNyYyIsICJ0Z3QiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsICJwIikuZm9sZCgpKS5zZWxlY3QoInRndCIpLmJhcnJpZXIoKSkuY2FwKCJ4Iikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnVuZm9sZCgpLm1hcChfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKKyAgICBnX1ZfcGxheWxpc3RfcGF0aHM6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneSh7c2VlZDogOTk5OTl9KSkuVigpLmhhcygibmFtZSIsICJCb2JfRHlsYW4iKS5pbl8oInN1bmdCeSIpLmFzKCJhIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb21fKCJhIikpLnVudGlsKF9fLm91dCgid3JpdHRlbkJ5IikuaGFzKCJuYW1lIiwgIkpvaG5ueV9DYXNoIikpLmxpbWl0KDEpLmFzKCJiIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoImMiKS5zaW1wbGVQYXRoKCkuZnJvbV8oImIiKS50bygiYyIpKS51bnRpbChfXy5vdXQoInN1bmdCeSIpLmhhcygibmFtZSIsICJHcmF0ZWZ1bF9EZWFkIikpLmxpbWl0KDEpLnBhdGgoKS5mcm9tXygiYSIpLnVuZm9sZCgpLnByb2plY3QoInNvbmciLCAiYXJ0aXN0cyIpLmJ5KCJuYW1lIikuYnkoX18uY29hbGVzY2UoX18ub3V0KCJzdW5nQnkiLCAid3JpdHRlbkJ5IikuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKSwgX18uY29uc3RhbnQoIlVua25vd24iKSkuZm9sZCgpKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9ncm91cF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuZ3JvdXAoKS5ieSgiYWdlIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9ncm91cF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieSgiYWdlIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9maWxlU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2ZpbGVTdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUHJvZmlsZVN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1Zfb3V0WGtub3dzWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5vdXQoImtub3dzIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfYWRkVlhwZXJzb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLmFkZFYoInBlcnNvbiIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9mcm9tWFZYMVhYX3RvWFZYMlhYOiBbZnVuY3Rpb24oe2csIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLmFkZEUoImxpbmsiKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDIpKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9WX2FkZFZYcGVyc29uWF9mcm9tWFZYMVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5hZGRFKCJsaW5rIikuZnJvbV8oX18uVih2aWQxKSkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9wcm9wZXJ0eVhuYW1lX2pvc2hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfRV9wcm9wZXJ0eVh3ZWlnaHRfMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuRSgpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwKSB9XSwgCisgICAgZ19WX2NsYXNzaWNfcmVjb21tZW5kYXRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEQVJLIFNUQVIiKS5hcygiYSIpLm91dCgiZm9sbG93ZWRCeSIpLmFnZ3JlZ2F0ZSgic3Rhc2giKS5pbl8oImZvbGxvd2VkQnkiKS53aGVyZShQLm5lcSgiYSIpLmFuZChQLm5vdChQLndpdGhpbigic3Rhc2giKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdCgieCIsICJ5IiwgInoiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygibmFtZSIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygicGVyZm9ybWFuY2VzIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoInoiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KCJ5IiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKCJtIikpLnNlbGVjdCgieCIpIH1dLCAKKyAgICBnX1ZfY2xhc3NpY19yZWNvbW1lbmRhdGlvbl9yYW5rZWQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJEQVJLIFNUQVIiKS5hcygiYSIpLm91dCgiZm9sbG93ZWRCeSIpLmFnZ3JlZ2F0ZSgic3Rhc2giKS5pbl8oImZvbGxvd2VkQnkiKS53aGVyZShQLm5lcSgiYSIpLmFuZChQLm5vdChQLndpdGhpbigic3Rhc2giKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdCgieCIsICJ5IiwgInoiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygibmFtZSIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygicGVyZm9ybWFuY2VzIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoInoiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KCJ5IiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKCJtIikpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KCkpLlYoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhvdXRYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYb3V0X2hhc1huYW1lX25vdFN0YXJ0aW5nV2l0aFh6WFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLm91dCgpLmhhcygibmFtZSIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aCgieiIpKSkudGltZXMoMikgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dF9oYXNYbmFtZV9ub3RTdGFydGluZ1dpdGhYelhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoIm5hbWUiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoInoiKSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhpbl9oYXNYYWdlX2d0WDIwWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpLmhhcygiYWdlIiwgUC5ndCgyMCkpKS50aW1lcygyKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5faGFzWGFnZV9ndFgyMFhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbl8oKS5oYXMoImFnZSIsIFAuZ3QoMjApKSkudGltZXMoMikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKCJhZ2UiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2hhc1hhZ2VfbHRYMzBYWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcygiYWdlIiwgUC5sdCgzMCkpKS50aW1lcygyKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aEVfb3RoZXJWX2hhc1hhZ2VfbHRYMzBYWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uYm90aEUoKS5vdGhlclYoKS5oYXMoImFnZSIsIFAubHQoMzApKSkudGltZXMoMikgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhFX290aGVyVl9oYXNYYWdlX2x0WDMwWFhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhFKCkub3RoZXJWKCkuaGFzKCJhZ2UiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2xpbWl0WDFYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2xpbWl0WDFYWF90aW1lc1gyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVYX3JlcGVhdFhib3RoX29yZGVyX2J5WG5hbWVYX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfbGltaXRYMTBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkub3JkZXIoKS5ieSgibmFtZSIpLnJlcGVhdChfXy5ib3RoKCkub3JkZXIoKS5ieSgibmFtZSIpLmFnZ3JlZ2F0ZSgieCIpKS50aW1lcygyKS5saW1pdCgxMCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYbmFtZVhfcmVwZWF0WGJvdGhfb3JkZXJfYnlYbmFtZVhfYWdncmVnYXRlWHhYWF90aW1lc1gyWF9saW1pdFgxMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikucmVwZWF0KF9fLmJvdGgoKS5vcmRlcigpLmJ5KCJuYW1lIikuYWdncmVnYXRlKCJ4IikpLnRpbWVzKDIpLmxpbWl0KDEwKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aF9zYW1wbGVYMVhYX3RpbWVzWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5zYW1wbGUoMSkpLnRpbWVzKDIpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX3NhbXBsZVgxWFhfdGltZXNYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYdGhyb3dFeGNlcHRpb25fdHJ1ZVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhpZF8xMjNYX3Byb3BlcnR5WG5hbWVfbWFya29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh7dGhyb3dFeGNlcHRpb246IHRydWV9KSkuYWRkVigicGVyc29uIikucHJvcGVydHkoImlkIiwgMTIzKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX3RydWVYWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYYWdlXzI5WF9wcm9wZXJ0eVhuYW1lX21hcmtvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3koe3Rocm93RXhjZXB0aW9uOiB0cnVlLCBrZXlzOiBuZXcgU2V0KFsiYWdlIl0pfSkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJhZ2UiLCAyOSkucHJvcGVydHkoIm5hbWUiLCAibWFya28iKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGlkXzEyM1hfcHJvcGVydHlYbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJpZCIsIDEyMykucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS52YWx1ZXMoKSB9XSwgCisgICAgZ193aXRob3V0U3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKX0pKS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKX0pKS5FKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX291dEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkub3V0RSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9pbkU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkuaW5FKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSl9KSkuVih2aWQ0KS5vdXQoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQVhYX1ZYNFhfaW46IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkuaW5fKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX2JvdGg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkuYm90aCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9ib3RoRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSl9KSkuVih2aWQ0KS5ib3RoRSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9FWDExWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLkUoZWlkMTEpLmJvdGhWKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9FWDEyWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMn0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpfSkpLkUoZWlkMTIpLmJvdGhWKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJrbm93cyIpLCBfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKS5vdXRWKCkuaGFzKCJuYW1lIiwgIm1hcmtvIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJrbm93cyIpLCBfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKS5vdXRWKCkuaGFzKCJuYW1lIiwgIm1hcmtvIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDFYX291dEU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImtub3dzIiksIF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkMSkub3V0RSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfVlgxWF9vdXQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImtub3dzIiksIF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkMSkub3V0KCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDFYX291dFhjcmVhdGVkWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQxKS5vdXQoImtub3dzIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dFhjcmVhdGVkWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXQoImNyZWF0ZWQiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfb3V0RTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXRFKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXQoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfYm90aEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImtub3dzIiksIF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuYm90aEUoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfYm90aDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5ib3RoKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dFZfb3V0RTogW2Z1bmN0aW9uKHtnLCBlaWQ4fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgia25vd3MiKSwgX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRShlaWQ4KS5vdXRWKCkub3V0RSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5Ya25vd3NYX2hhc1huYW1lX21hcmtvWFhYX1ZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmluXygia25vd3MiKS5oYXMoIm5hbWUiLCAibWFya28iKX0pKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19pbl9oYXNYbmFtZV9tYXJrb1hYWF9WX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5pbl8oKS5oYXMoIm5hbWUiLCAibWFya28iKX0pKS5WKCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19pblhrbm93c1hfd2hlcmVYb3V0WGNyZWF0ZWRYX2hhc1huYW1lX2xvcFhYWFhfVl9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaW5fKCJrbm93cyIpLndoZXJlKF9fLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSl9KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5faGFzWG5hbWVfbWFya29YX291dFhjcmVhdGVkWF9oYXNYbmFtZV9sb3BYWFhYX1ZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmluXygpLndoZXJlKF9fLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSl9KSkuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfb3JYYm90aF9oYXNYbmFtZV9tYXJrb1hfaGFzWG5hbWVfbWFya29YWFhYX1ZfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLm9yKF9fLmJvdGgoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgX18uaGFzKCJuYW1lIiwgIm1hcmtvIikpfSkpLlYoKS53aGVyZShfXy5ib3RoRSgpLmNvdW50KCkuaXMoUC5uZXEoMCkpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9vdXRFOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5vdXRFKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX2luRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuaW5FKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX291dDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkub3V0KCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX2luOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5pbl8oKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1ZYNFhfYm90aDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuYm90aCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9ib3RoRTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuYm90aEUoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1ZYNFhfbG9jYWxYYm90aEVfbGltaXRYMVhYOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX0VYMTFYX2JvdGhWOiBbZnVuY3Rpb24oe2csIGVpZDExfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLkUoZWlkMTEpLmJvdGhWKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9FWDEyWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMn0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKGVpZDEyKS5ib3RoVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfRVg5WF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQ5fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLkUoZWlkOSkuYm90aFYoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHZlcnRpY2VzX2hhc1huYW1lX3dpdGhpblhyaXBwbGVfam9zaF9tYXJrb1hYWF9WX2FzWGFYX291dF9pbl9hc1hiWF9kZWR1cFhhX2JYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigicmlwcGxlIiwgImpvc2giLCAibWFya28iKSl9KSkuVigpLmFzKCJhIikub3V0KCkuaW5fKCkuYXMoImIiKS5kZWR1cCgiYSIsICJiIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0ZXhQcm9wZXJ0aWVzX2hhc1hzdGFydFRpbWVfZ3RYMjAwNVhYWFhfVl9wcm9wZXJ0aWVzWGxvY2F0aW9uWF92YWx1ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKX0pKS5WKCkucHJvcGVydGllcygibG9jYXRpb24iKS52YWx1ZSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfdmFsdWVzWGxvY2F0aW9uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKX0pKS5WKCkudmFsdWVzKCJsb2NhdGlvbiIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfYXNYYVhfcHJvcGVydGllc1hsb2NhdGlvblhfYXNYYlhfc2VsZWN0WGFYX291dEVfcHJvcGVydGllc19zZWxlY3RYYlhfdmFsdWVfZGVkdXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRleFByb3BlcnRpZXM6IF9fLmhhcygic3RhcnRUaW1lIiwgUC5ndCgyMDA1KSl9KSkuVigpLmFzKCJhIikucHJvcGVydGllcygibG9jYXRpb24iKS5hcygiYiIpLnNlbGVjdCgiYSIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KCJiIikudmFsdWUoKS5kZWR1cCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfYXNYYVhfdmFsdWVzWGxvY2F0aW9uWF9hc1hiWF9zZWxlY3RYYVhfb3V0RV9wcm9wZXJ0aWVzX3NlbGVjdFhiWF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKX0pKS5WKCkuYXMoImEiKS52YWx1ZXMoImxvY2F0aW9uIikuYXMoImIiKS5zZWxlY3QoImEiKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdCgiYiIpLmRlZHVwKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19oYXNYbmFtZV9uZXFYc3RlcGhlblhYX3ZlcnRleFByb3BlcnRpZXNfaGFzWHN0YXJ0VGltZV9ndFgyMDA1WFhYWF9WX3Byb3BlcnRpZXNYbG9jYXRpb25YX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoInN0YXJ0VGltZSIsIFAuZ3QoMjAwNSkpLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC5uZXEoInN0ZXBoZW4iKSl9KSkuVigpLnByb3BlcnRpZXMoImxvY2F0aW9uIikudmFsdWUoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHZlcnRpY2VzX2hhc1huYW1lX25lcVhzdGVwaGVuWFhfdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfdmFsdWVzWGxvY2F0aW9uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAubmVxKCJzdGVwaGVuIikpfSkpLlYoKS52YWx1ZXMoImxvY2F0aW9uIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhlZGdlc19oYXNMYWJlbFh1c2VzWF9oYXNYc2tpbGxfNVhYWF9WX291dEVfdmFsdWVNYXBfc2VsZWN0WHZhbHVlc1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18uaGFzTGFiZWwoInVzZXMiKS5oYXMoInNraWxsIiwgNSl9KSkuVigpLm91dEUoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9FOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYY2hlY2tBZGphY2VudFZlcnRpY2VzX3N1YmdyYXBoRFhYX0U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogdHJ1ZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLkUoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1ZYNFhfb3V0RTogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkub3V0RSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9pbkU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLmluRSgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9vdXQ6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLm91dCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9pbjogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkuaW5fKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9WWDRYX2JvdGg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLmJvdGgoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1ZYNFhfYm90aEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5WKHZpZDQpLmJvdGhFKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9WWDRYX2xvY2FsWGJvdGhFX2xpbWl0WDFYWDogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoIndlaWdodCIsIDAuNCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgX18uaGFzKCJ3ZWlnaHQiLCAxLjApLmhhc0xhYmVsKCJjcmVhdGVkIikpfSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9FWDExWF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKGVpZDExKS5ib3RoVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfRVgxMlhfYm90aFY6IFtmdW5jdGlvbih7ZywgZWlkMTJ9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRShlaWQxMikuYm90aFYoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX0VYOVhfYm90aFY6IFtmdW5jdGlvbih7ZywgZWlkOX0pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoIm5hbWUiLCBQLndpdGhpbigiam9zaCIsICJsb3AiLCAicmlwcGxlIikpLCBlZGdlczogX18ub3IoX18uaGFzKCJ3ZWlnaHQiLCAwLjQpLmhhc0xhYmVsKCJjcmVhdGVkIiksIF9fLmhhcygid2VpZ2h0IiwgMS4wKS5oYXNMYWJlbCgiY3JlYXRlZCIpKX0pKS5FKGVpZDkpLmJvdGhWKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhjaGVja0FkamFjZW50VmVydGljZXNfc3ViZ3JhcGhEWFhfRVg5WF9ib3RoVjogW2Z1bmN0aW9uKHtnLCBlaWQ5fSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlLCB2ZXJ0aWNlczogX18uaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcygid2VpZ2h0IiwgMC40KS5oYXNMYWJlbCgiY3JlYXRlZCIpLCBfXy5oYXMoIndlaWdodCIsIDEuMCkuaGFzTGFiZWwoImNyZWF0ZWQiKSl9KSkuRShlaWQ5KS5ib3RoVigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdXNlTWFwU3RlcHNJbkZpbHRlclhfRTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLmxhYmVsKCkuaXMoUC5lcSgiY3JlYXRlZCIpKSwgdmVydGljZXM6IF9fLnZhbHVlcygibmFtZSIpLmlzKFAud2l0aGluKCJsb3AiLCAiam9zaCIpKSwgY2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlfSkpLkUoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneVhfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSgpKS53aXRob3V0U3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneV9WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCksIG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KS53aXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1Y6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkgfV0sIAorICAgIGdfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIH1dLCAKKyAgICBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hZGRFKCJjcmVhdGVkQnkiKS50bygiYSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuaW5FKCkgfV0sIAorICAgIGdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYX3Byb3BlcnR5WHdlaWdodF8yWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hZGRFKCJjcmVhdGVkQnkiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAyLjApIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5pbkUoKS5oYXMoIndlaWdodCIsIDIuMCkgfV0sIAorICAgIGdfVl9vdXRFX3Byb3BlcnR5WHdlaWdodF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkucHJvcGVydHkoIndlaWdodCIsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygid2VpZ2h0IikgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYeFhfYXNYYVhfc2VsZWN0WHhYX3VuZm9sZF9hZGRFWGV4aXN0c1dpdGhYX3RvWGFYX3Byb3BlcnR5WHRpbWVfbm93WDogW2Z1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5hcygiYSIpLnNlbGVjdCgieCIpLnVuZm9sZCgpLmFkZEUoImV4aXN0c1dpdGgiKS50bygiYSIpLnByb3BlcnR5KCJ0aW1lIiwgIm5vdyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMikuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMikuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMykuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMykuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ1KS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ1KS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5pbkUoImV4aXN0c1dpdGgiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJleGlzdHNXaXRoIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikuYm90aEUoImV4aXN0c1dpdGgiKS5oYXMoInRpbWUiLCAibm93IikgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9hc1hiWF9hZGRFWGNvZGV2ZWxvcGVyWF9mcm9tWGFYX3RvWGJYX3Byb3BlcnR5WHllYXJfMjAwOVg6IFtmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbl8oImNyZWF0ZWQiKS53aGVyZShQLm5lcSgiYSIpKS5hcygiYiIpLmFkZEUoImNvZGV2ZWxvcGVyIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJ5ZWFyIiwgMjAwOSkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDQsIHZpZDZ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmluRSgiY29kZXZlbG9wZXIiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJjb2RldmVsb3BlciIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmJvdGhFKCJjb2RldmVsb3BlciIpLmhhcygieWVhciIsIDIwMDkpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDIpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDQsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5pbkUoImNvZGV2ZWxvcGVyIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDQsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkub3V0RSgiY29kZXZlbG9wZXIiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSgiY29kZXZlbG9wZXIiKS5oYXMoInllYXIiLCAyMDA5KSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmluRSgiY29kZXZlbG9wZXIiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkNCwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJjb2RldmVsb3BlciIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQ0LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmJvdGhFKCJjb2RldmVsb3BlciIpLmhhcygieWVhciIsIDIwMDkpIH1dLCAKKyAgICBnX1ZfYXNYYVhfaW5YY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX2Zyb21YYVhfcHJvcGVydHlYeWVhcl8yMDA5WF9wcm9wZXJ0eVhhY2xfcHVibGljWDogW2Z1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmluXygiY3JlYXRlZCIpLmFkZEUoImNyZWF0ZWRCeSIpLmZyb21fKCJhIikucHJvcGVydHkoInllYXIiLCAyMDA5KS5wcm9wZXJ0eSgiYWNsIiwgInB1YmxpYyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMSkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5pbkUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmJvdGhFKCJjcmVhdGVkQnkiKS5oYXMoInllYXIiLCAyMDA5KS5oYXMoImFjbCIsICJwdWJsaWMiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDMpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkMykuaW5FKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5vdXRFKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5ib3RoRSgiY3JlYXRlZEJ5IikuaGFzKCJ5ZWFyIiwgMjAwOSkuaGFzKCJhY2wiLCAicHVibGljIikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ0KS5pbkUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDQpLm91dEUoImNyZWF0ZWRCeSIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDQpLmJvdGhFKCJjcmVhdGVkQnkiKS5oYXMoInllYXIiLCAyMDA5KS5oYXMoImFjbCIsICJwdWJsaWMiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ1KS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDUpLmluRSgiY3JlYXRlZEJ5IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkub3V0RSgiY3JlYXRlZEJ5IikgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNSkuYm90aEUoImNyZWF0ZWRCeSIpLmhhcygieWVhciIsIDIwMDkpLmhhcygiYWNsIiwgInB1YmxpYyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikuaW5FKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJjcmVhdGVkQnkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5ib3RoRSgiY3JlYXRlZEJ5IikuaGFzKCJ5ZWFyIiwgMjAwOSkuaGFzKCJhY2wiLCAicHVibGljIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYl9iWF9WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzVYOiBbZnVuY3Rpb24oe2csIHZpZDEsIHZpZDZ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5hZGRFKCJrbm93cyIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkgfSwgZnVuY3Rpb24oe2csIHZpZDEsIHZpZDZ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmluRSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDEpLmJvdGhFKCJrbm93cyIpLmhhcygid2VpZ2h0IiwgMC41KSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmluRSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgdmlkMSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQ2KS5vdXRFKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxLCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDYpLmJvdGhFKCJrbm93cyIpLmhhcygid2VpZ2h0IiwgMC41KSB9XSwgCisgICAgZ19hZGRWX2FzWGZpcnN0WF9yZXBlYXRYYWRkRVhuZXh0WF90b1hhZGRWWF9pblZYX3RpbWVzWDVYX2FkZEVYbmV4dFhfdG9Yc2VsZWN0WGZpcnN0WFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLmFzKCJmaXJzdCIpLnJlcGVhdChfXy5hZGRFKCJuZXh0IikudG8oX18uYWRkVigpKS5pblYoKSkudGltZXMoNSkuYWRkRSgibmV4dCIpLnRvKF9fLnNlbGVjdCgiZmlyc3QiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoIm5leHQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxpbWl0KDEpLmJvdGhFKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5saW1pdCgxKS5pbkUoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxpbWl0KDEpLm91dEUoKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWF9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hZGRFWHNlbGVjdFhiWF9sYWJlbFhfdG9YYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5vdXRFKCJjcmVhdGVkIikuYXMoImIiKS5pblYoKS5hZGRFKF9fLnNlbGVjdCgiYiIpLmxhYmVsKCkpLnRvKCJhIikgfSwgZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmluRSgiY3JlYXRlZCIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmluXygiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJjcmVhdGVkIikgfV0sIAorICAgIGdfYWRkRVhWX291dEVfbGFiZWxfZ3JvdXBDb3VudF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzX2Rlc2NYX3NlbGVjdFhrZXlzWF91bmZvbGRfbGltaXRYMVhYX2Zyb21YVl9oYXNYbmFtZV92YWRhc1hYX3RvWFZfaGFzWG5hbWVfbG9wWFg6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5hZGRFKF9fLlYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkubGltaXQoMSkpLmZyb21fKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkudG8oX18uVigpLmhhcygibmFtZSIsICJsb3AiKSkgfSwgZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5ib3RoRSgpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLmluRSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5vdXRFKCJjcmVhdGVkIikgfSwgZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgImxvcCIpIH1dLCAKKyAgICBnX2FkZEVYa25vd3NYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDYpKS5wcm9wZXJ0eSgid2VpZ2h0IiwgeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDYsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJrbm93cyIpLmhhcygibmFtZSIsICJwZXRlciIpIH1dLCAKKyAgICBnX2FkZEVYa25vd3N2YXJYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLmFkZEUoeHgxKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDYpKS5wcm9wZXJ0eSgid2VpZ2h0IiwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB4eDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCJrbm93cyIpLmhhcygibmFtZSIsICJwZXRlciIpIH1dLCAKKyAgICBnX1ZYYVhfYWRkRVhrbm93c1hfdG9YYlhfcHJvcGVydHlYd2VpZ2h0XzBfMVg6IFtmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hZGRFKCJrbm93cyIpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KCJ3ZWlnaHQiLCB4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDYsIHZpZDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQ2LCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInBldGVyIikgfV0sIAorICAgIGdfYWRkRVhrbm93c1hwcm9wZXJ0eVh3ZWlnaHRfbnVsbFhmcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgbnVsbCkuZnJvbV8oX18uVigpLmhhcygibmFtZSIsICJtYXJrbyIpKS50byhfXy5WKCkuaGFzKCJuYW1lIiwgInZhZGFzIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJrbm93cyIsICJ3ZWlnaHQiLCBudWxsKSB9XSwgCisgICAgZ19hZGRFWGtub3dzdmFyWHByb3BlcnR5WHdlaWdodF9udWxsWGZyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkRSh4eDEpLnByb3BlcnR5KCJ3ZWlnaHQiLCBudWxsKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikpLnRvKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhcygia25vd3MiLCAid2VpZ2h0IiwgbnVsbCkgfV0sIAorICAgIGdfdW5pb25YYWRkRVhrbm93c3Zhclhwcm9wZXJ0eVh3ZWlnaHRfbnVsbFhmcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy51bmlvbihfXy5hZGRFKHh4MSkucHJvcGVydHkoIndlaWdodCIsIDEpLmZyb21fKF9fLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKSkudG8oX18uVigpLmhhcygibmFtZSIsICJ2YWRhcyIpKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhcygia25vd3MiLCAid2VpZ2h0IiwgMSkgfV0sIAorICAgIGdfYWRkRVhlZGdlWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfd2l0aFhrZXlfdmFsdWVYX3ZhbHVlc1h3ZWlnaHRfa2V5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRFKCJlZGdlIikuZnJvbV8oX18uVigpLmhhcygibmFtZSIsICJtYXJrbyIpKS50byhfXy5WKCkuaGFzKCJuYW1lIiwgInZhZGFzIikpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLndpdGhfKCJrZXkiLCAidmFsdWUiKS52YWx1ZXMoIndlaWdodCIsICJrZXkiKSB9XSwgCisgICAgZ19hZGRFWGtub3dzWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfYWRkRVhrbm93c1hfZnJvbVhWX2hhc1huYW1lX21hcmtvWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikpLnRvKF9fLlYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSkucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikpIH1dLCAKKyAgICBnX1ZYMVhfYWRkVlhhbmltYWxYX3Byb3BlcnR5WGFnZV9zZWxlY3RYYVhfYnlYYWdlWFhfcHJvcGVydHlYbmFtZV9wdXBweVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikuYWRkVigiYW5pbWFsIikucHJvcGVydHkoImFnZSIsIF9fLnNlbGVjdCgiYSIpLmJ5KCJhZ2UiKSkucHJvcGVydHkoIm5hbWUiLCAicHVwcHkiKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVigpLmhhcygiYW5pbWFsIiwgImFnZSIsIDI5KSB9XSwgCisgICAgZ19WX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhhZ2VfMFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWRkVigiYW5pbWFsIikucHJvcGVydHkoImFnZSIsIDApIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhbmltYWwiLCAiYWdlIiwgMCkgfV0sIAorICAgIGdfVl9hZGRWWGFuaW1hbHZhclhfcHJvcGVydHlYYWdlXzB2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYWRkVih4eDEpLnByb3BlcnR5KCJhZ2UiLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygiYW5pbWFsIiwgImFnZSIsIDApIH1dLCAKKyAgICBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX3N0ZXBoZW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAorICAgIGdfYWRkVlhwZXJzb252YXJYX3Byb3BlcnR5WG5hbWVfc3RlcGhlbnZhclg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoeHgxKS5wcm9wZXJ0eSgibmFtZSIsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3Byb3BlcnR5WG5hbWVfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKSB9XSwgCisgICAgZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAibmFtZSIsICJzdGVwaGVuIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAibmFtZSIsICJzdGVwaGVubSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW5tIikgfV0sIAorICAgIGdldF9nX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVubSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVubSIpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXMoInNpbmNlIiwgMjAxMCkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydHlYZnJpZW5kV2VpZ2h0X291dEVYa25vd3NYX3dlaWdodF9zdW1fX2FjbF9wcml2YXRlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IiwgX18ub3V0RSgia25vd3MiKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpLCAiYWNsIiwgInByaXZhdGUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImZyaWVuZFdlaWdodCIsIDEuNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiZnJpZW5kV2VpZ2h0IikuaGFzKCJhY2wiLCAicHJpdmF0ZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoImZyaWVuZFdlaWdodCIpLmNvdW50KCkgfV0sIAorICAgIGdfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfbWF0ZW9YX3Byb3BlcnR5WG5hbWVfZ2F0ZW9YX3Byb3BlcnR5WG5hbWVfY2F0ZW9YX3Byb3BlcnR5WGFnZV81WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJuYW1lIiwgIm1hdGVvIikucHJvcGVydHkoIm5hbWUiLCAiZ2F0ZW8iKS5wcm9wZXJ0eSgibmFtZSIsICJjYXRlbyIpLnByb3BlcnR5KCJhZ2UiLCA1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAibWF0ZW8iKS5oYXMoIm5hbWUiLCAiZ2F0ZW8iKS5oYXMoIm5hbWUiLCAiY2F0ZW8iKS5oYXMoImFnZSIsIDUpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfbWFya29YX2FkZFZfcHJvcGVydHlYbmFtZV9zZWxlY3RYYVhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsICJtYXJrbyIpLmFkZFYoKS5wcm9wZXJ0eSgibmFtZSIsIF9fLnNlbGVjdCgiYSIpKS52YWx1ZXMoIm5hbWUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpIH1dLCAKKyAgICBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJzdGVwaGVuIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAic3RlcGhlbm0iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJzdGVwaGVubSIpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXMoInNpbmNlIiwgMjAxMCkgfV0sIAorICAgIGdfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV92YWx1ZXNYbmFtZVhYX3Byb3BlcnR5WG5hbWVfYW5fYW5pbWFsWF9wcm9wZXJ0eVh2YWx1ZXNYbmFtZVhfbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJuYW1lIiwgX18udmFsdWVzKCJuYW1lIikpLnByb3BlcnR5KCJuYW1lIiwgImFuIGFuaW1hbCIpLnByb3BlcnR5KF9fLnZhbHVlcygibmFtZSIpLCBfXy5sYWJlbCgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJtYXJrbyIsICJwZXJzb24iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAidmFkYXMiKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJ2YWRhcyIsICJwZXJzb24iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAibG9wIikuaGFzKCJuYW1lIiwgImFuIGFuaW1hbCIpLmhhcygibG9wIiwgInNvZnR3YXJlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgiYW5pbWFsIikuaGFzKCJuYW1lIiwgImpvc2giKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJqb3NoIiwgInBlcnNvbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoImFuaW1hbCIpLmhhcygibmFtZSIsICJyaXBwbGUiKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJyaXBwbGUiLCAic29mdHdhcmUiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJhbmltYWwiKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5oYXMoIm5hbWUiLCAiYW4gYW5pbWFsIikuaGFzKCJwZXRlciIsICJwZXJzb24iKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhX3Rlc3RYX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3Byb3BlcnR5WHRlbXBfc2VsZWN0WGFYWF92YWx1ZU1hcFhuYW1lX3RlbXBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAidGVzdCIpLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5wcm9wZXJ0eSgidGVtcCIsIF9fLnNlbGVjdCgiYSIpKS52YWx1ZU1hcCgibmFtZSIsICJ0ZW1wIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV9uYW1lWF9hZGRWX3Byb3BlcnR5WHNlbGVjdFhhWF9tYXJrb1hfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgIm5hbWUiKS5hZGRWKCkucHJvcGVydHkoX18uc2VsZWN0KCJhIiksICJtYXJrbyIpLnZhbHVlcygibmFtZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikgfV0sIAorICAgIGdfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2FzWGJYX2FkZFZYc2VsZWN0WGFYX2xhYmVsWF9wcm9wZXJ0eVh0ZXN0X3NlbGVjdFhiWF9sYWJlbFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5hZGRWKF9fLnNlbGVjdCgiYSIpLmxhYmVsKCkpLnByb3BlcnR5KCJ0ZXN0IiwgX18uc2VsZWN0KCJiIikubGFiZWwoKSkudmFsdWVNYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAidGVzdCIsICJzb2Z0d2FyZSIpIH1dLCAKKyAgICBnX2FkZFZYVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydGllc1huYW1lWF9rZXlYX2xhYmVsOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVihfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygibmFtZSIpLmtleSgpKS5sYWJlbCgpIH1dLCAKKyAgICBnX2FkZFZfcHJvcGVydHlYbGFiZWxfcGVyc29uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoVC5sYWJlbCwgInBlcnNvbiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpIH1dLCAKKyAgICBnX2FkZFZfcHJvcGVydHlYbGFiZWxfcGVyc29udmFyWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoKS5wcm9wZXJ0eShULmxhYmVsLCB4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikgfV0sIAorICAgIGdfYWRkVl9wcm9wZXJ0eVhpZF8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNJZCgiMSIpIH1dLCAKKyAgICBnX2FkZFZfcHJvcGVydHlYaWR2YXJfMXZhclg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzSWQoIjEiKSB9XSwgCisgICAgZ19hZGRWX3Byb3BlcnR5WG1hcFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KG5ldyBNYXAoW1sibmFtZSIsICJmb28iXSwgWyJhZ2UiLCA0Ml1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiZm9vIikgfV0sIAorICAgIGdfYWRkVl9wcm9wZXJ0eVhzaW5nbGVfbWFwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBuZXcgTWFwKFtbIm5hbWUiLCAiZm9vIl0sIFsiYWdlIiwgNDJdXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImZvbyIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfZm9vWF9wcm9wZXJ0eVhuYW1lX3NldFhiYXJYX2FnZV80M1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAiZm9vIikucHJvcGVydHkoImFnZSIsIDQyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJmb28iKS5wcm9wZXJ0eShuZXcgTWFwKFtbIm5hbWUiLCBDYXJkaW5hbGl0eVZhbHVlLnNldCgiYmFyIildLCBbImFnZSIsIDQzXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJmb28iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJiYXIiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgNDMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCA0MikgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9mb29YX3Byb3BlcnR5WHNldF9uYW1lX2Jhcl9hZ2Vfc2luZ2xlWDQzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAiZm9vIikucHJvcGVydHkoImFnZSIsIDQyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJmb28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG5ldyBNYXAoW1sibmFtZSIsICJiYXIiXSwgWyJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSg0MyldXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImZvbyIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImJhciIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCA0MykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIDQyKSB9XSwgCisgICAgZ19hZGRWX3Byb3BlcnR5WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygpIH1dLCAKKyAgICBnX2FkZFZfcHJvcGVydHlYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoKSB9XSwgCisgICAgZ19hZGRWX3Byb3BlcnR5WHNldF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJmb28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoImZvbyIpLnZhbHVlcygpIH1dLCAKKyAgICBnX2FkZFZfcHJvcGVydHlYc2V0X2VtcHR5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJmb28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoKSB9XSwgCisgICAgZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9qb3NoWF9wcm9wZXJ0eVhhZ2VfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgImFnZSIsIG51bGwpIH1dLCAKKyAgICBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX21hcmtvWF9wcm9wZXJ0eVhmcmllbmRXZWlnaHRfbnVsbF9hY2xfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IiwgbnVsbCwgImFjbCIsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiZnJpZW5kV2VpZ2h0IiwgbnVsbCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiZnJpZW5kV2VpZ2h0IikuaGFzKCJhY2wiLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0aWVzKCJmcmllbmRXZWlnaHQiKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX2FsaWNlWF9wcm9wZXJ0eVhzaW5nbGVfYWdlX3VuaW9uWGFnZV9jb25zdGFudFgxWFhfc3VtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgImFnZSIsIDUwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0eSgiYWdlIiwgX18udW5pb24oX18udmFsdWVzKCJhZ2UiKSwgX18uY29uc3RhbnQoMSkpLnN1bSgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgImFnZSIsIDUwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgImFnZSIsIDUxKSB9XSwgCisgICAgZ19WX2xpbWl0WDNYX2FkZFZYc29mdHdhcmVYX2FnZ3JlZ2F0ZVhhMVhfYnlYbGFiZWxYX2FnZ3JlZ2F0ZVhhMlhfYnlYbGFiZWxYX2NhcFhhMV9hMlhfc2VsZWN0WGFfYlhfYnlYdW5mb2xkWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5saW1pdCgzKS5hZGRWKCJzb2Z0d2FyZSIpLmFnZ3JlZ2F0ZSgiYTEiKS5ieShULmxhYmVsKS5hZ2dyZWdhdGUoImEyIikuYnkoVC5sYWJlbCkuY2FwKCJhMSIsICJhMiIpLnNlbGVjdCgiYTEiLCAiYTIiKS5ieShfXy51bmZvbGQoKS5mb2xkKCkpIH1dLCAKKyAgICBnX2FkZFZfcHJvcGVydHlYbmFtZV9tYXJrb1hfd2l0aFhrZXlfdmFsdWVYX3ZhbHVlc1huYW1lX2tleVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikud2l0aF8oImtleSIsICJ2YWx1ZSIpLnZhbHVlcygibmFtZSIsICJrZXkiKSB9XSwgCisgICAgZ19hZGRWX3Byb3BlcnR5WG5hbWVfbWFya29fc2luY2VfMjAxMFhfd2l0aFhrZXlfdmFsdWVYX3Byb3BlcnRpZXNYbmFtZVhfdmFsdWVzWHNpbmNlX2tleVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIiwgInNpbmNlIiwgMjAxMCkud2l0aF8oImtleSIsICJ2YWx1ZSIpLnByb3BlcnRpZXMoIm5hbWUiKS52YWx1ZXMoInNpbmNlIiwgImtleSIpIH1dLCAKKyAgICBnX2luamVjdFgxWF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFzQm9vbCgpIH1dLCAKKyAgICBnX2luamVjdFgzXzE0WF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDMuMTQpLmFzQm9vbCgpIH1dLCAKKyAgICBnX2luamVjdFhuZWdfMVhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgtMSkuYXNCb29sKCkgfV0sIAorICAgIGdfaW5qZWN0WDBYX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkuYXNCb29sKCkgfV0sIAorICAgIGdfaW5qZWN0WG5lZ18wWF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KC0wLjApLmFzQm9vbCgpIH1dLCAKKyAgICBnX2luamVjdFhOYU5YX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuYXNCb29sKCkgfV0sIAorICAgIGdfaW5qZWN0WGJvb2xfdHJ1ZVhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCh0cnVlKS5hc0Jvb2woKSB9XSwgCisgICAgZ19pbmplY3RYZmFsc2VYX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoZmFsc2UpLmFzQm9vbCgpIH1dLCAKKyAgICBnX2luamVjdFh0cnVlWF9hc0Jvb2w6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ0cnVlIikuYXNCb29sKCkgfV0sIAorICAgIGdfaW5qZWN0WG1peGVkX3RydWVYX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoInRSVWUiKS5hc0Jvb2woKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbFhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5hc0Jvb2woKSB9XSwgCisgICAgZ19pbmplY3RYaGVsbG9YX2FzQm9vbDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImhlbGxvIikuYXNCb29sKCkgfV0sIAorICAgIGdfaW5qZWN0WDFfMlhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0pLmFzQm9vbCgpIH1dLCAKKyAgICBnX1ZYWF9sb2NhbFhfb3V0RV9jb3VudFhfYXNCb29sOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkuYXNCb29sKCkgfV0sIAorICAgIGdfVl9zYWNrWGFzc2lnblhfYnlYX2hhc0xhYmVsWHBlcnNvblhfY291bnRfYXNCb29sWF9zYWNrWGFuZFhfYnlYX291dEVfY291bnRfYXNCb29sWF9zYWNrX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShfXy5oYXNMYWJlbCgicGVyc29uIikuY291bnQoKS5hc0Jvb2woKSkuc2FjayhPcGVyYXRvci5hbmQpLmJ5KF9fLm91dEUoKS5jb3VudCgpLmFzQm9vbCgpKS5zYWNrKCkucGF0aCgpIH1dLCAKKyAgICBnX2luamVjdFhzdHJYX2FzRGF0ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjIwMjMtMDgtMDJUMDA6MDA6MDBaIikuYXNEYXRlKCkgfV0sIAorICAgIGdfaW5qZWN0WHN0cl9vZmZzZXRYX2FzRGF0ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjIwMjMtMDgtMDJUMDA6MDA6MDAtMDc6MDAiKS5hc0RhdGUoKSB9XSwgCisgICAgZ19pbmplY3RYMTY5NDAxNzcwNzAwMFhfYXNEYXRlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxNjk0MDE3NzA3MDAwKS5hc0RhdGUoKSB9XSwgCisgICAgZ19pbmplY3RYMTY5NDAxNzcwODAwMExYX2FzRGF0ZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMTY5NDAxNzcwODAwMCkuYXNEYXRlKCkgfV0sIAorICAgIGdfaW5qZWN0WDE2OTQwMTc3MDkwMDBkWF9hc0RhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDE2OTQwMTc3MDkwMDAuMSkuYXNEYXRlKCkgfV0sIAorICAgIGdfaW5qZWN0WDFfMlhfYXNEYXRlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0pLmFzRGF0ZSgpIH1dLCAKKyAgICBnX2luamVjdFhudWxsWF9hc0RhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmFzRGF0ZSgpIH1dLCAKKyAgICBnX2luamVjdFhpbnZhbGlkc3RyWF9hc0RhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJUaGlzIFN0cmluZyBpcyBub3QgYW4gSVNPIDg2MDEgRGF0ZSIpLmFzRGF0ZSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGJpcnRoZGF5WF9hc0RhdGVfYXNOdW1iZXJfYXNEYXRlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjIwMjAtMDgtMDIiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb2huIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjE5ODgtMTItMTAiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJjaGFybGllIikucHJvcGVydHkoImJpcnRoZGF5IiwgIjIwMDItMDItMDEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJzdXp5IikucHJvcGVydHkoImJpcnRoZGF5IiwgIjE5NjUtMTAtMzEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYmlydGhkYXkiKS5hc0RhdGUoKS5hc051bWJlcigpLmFzRGF0ZSgpIH1dLCAKKyAgICBnX2luamVjdFg1YlhfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUpLmFzTnVtYmVyKCkgfV0sIAorICAgIGdfaW5qZWN0WDVzWF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNSkuYXNOdW1iZXIoKSB9XSwgCisgICAgZ19pbmplY3RYNWlYX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg1KS5hc051bWJlcigpIH1dLCAKKyAgICBnX2luamVjdFg1bFhfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUpLmFzTnVtYmVyKCkgfV0sIAorICAgIGdfaW5qZWN0WDVuWF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNSkuYXNOdW1iZXIoKSB9XSwgCisgICAgZ19pbmplY3RYNV8wWF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNS4wKS5hc051bWJlcigpIH1dLCAKKyAgICBnX2luamVjdFg1Xzc1ZlhfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDUuNzUpLmFzTnVtYmVyKCkgfV0sIAorICAgIGdfaW5qZWN0WDVYX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiNSIpLmFzTnVtYmVyKCkgfV0sIAorICAgIGdfaW5qZWN0WHRlc3RYX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgidGVzdCIpLmFzTnVtYmVyKCkgfV0sIAorICAgIGdfaW5qZWN0WF8xXzJfM180WF9hc051bWJlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDIsIDMsIDRdKS5hc051bWJlcigpIH1dLCAKKyAgICBnX2luamVjdFgxXzJfM180WF91bmZvbGRfYXNOdW1iZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyLCAzLCA0XSkudW5mb2xkKCkuYXNOdW1iZXIoKSB9XSwgCisgICAgZ19pbmplY3RYXzFfXzJfXzNfXzRfWF9hc051bWJlclhYX2ZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjEiLCAyLCAiMyIsIDQpLmFzTnVtYmVyKCkuZm9sZCgpIH1dLCAKKyAgICBnX2luamVjdFg1XzQzWF9hc051bWJlclhHVHlwZV9JTlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg1LjQzKS5hc051bWJlcihHVHlwZS5pbnQpIH1dLCAKKyAgICBnX2luamVjdFg1XzY3WF9hc051bWJlclhHVHlwZV9JTlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCg1LjY3KS5hc051bWJlcihHVHlwZS5pbnQpIH1dLCAKKyAgICBnX2luamVjdFg1WF9hc051bWJlclhHVHlwZV9MT05HWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoNSkuYXNOdW1iZXIoR1R5cGUubG9uZykgfV0sIAorICAgIGdfaW5qZWN0WDEyWF9hc051bWJlclhHVHlwZV9CWVRFWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMTIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKKyAgICBnX2luamVjdFgzMjc2OFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgzMjc2OCkuYXNOdW1iZXIoR1R5cGUuc2hvcnQpIH1dLCAKKyAgICBnX2luamVjdFgzMDBYX2FzTnVtYmVyWEdUeXBlX0JZVEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKKyAgICBnX2luamVjdFgzMjc2OFhfYXNOdW1iZXJYR1R5cGVfVmVydGV4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLnZlcnRleCkgfV0sIAorICAgIGdfaW5qZWN0WDVYX2FzTnVtYmVyWEdUeXBlX0JZVEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiNSIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKKyAgICBnX2luamVjdFgxXzAwMFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIjEsMDAwIikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KSB9XSwgCisgICAgZ19pbmplY3RYMV8yXzNfNF8weDVYX2FzTnVtYmVyX3N1bV9hc051bWJlclhHVHlwZV9CWVRFWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wLCAyLCAzLCAiNCIsICIweDUiKS5hc051bWJlcigpLnN1bSgpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIH1dLCAKKyAgICBnX2luamVjdFhudWxsWF9hc051bWJlclhHVHlwZV9JTlRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5hc051bWJlcihHVHlwZS5pbnQpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9tYXRoWGFfcGx1c19iWF9ieVhhZ2VYX2FzTnVtYmVyWEdUeXBlX0lOVFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikubWF0aCgiYSArIGIiKS5ieSgiYWdlIikuYXNOdW1iZXIoR1R5cGUuaW50KSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFh4XzEwMFhfVl9hZ2VfbWF0aFhfX3BsdXNfeFhfYXNOdW1iZXJYR1R5cGVfTE9OR1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoIngiLCAxMDApLlYoKS52YWx1ZXMoImFnZSIpLm1hdGgoIl8gKyB4IikuYXNOdW1iZXIoR1R5cGUubG9uZykgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9hc1N0cmluZ19hc051bWJlclhHVHlwZV9ET1VCTEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmFzU3RyaW5nKCkuYXNOdW1iZXIoR1R5cGUuZG91YmxlKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNOdW1iZXJfYXNEYXRlX2FzTnVtYmVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikucHJvcGVydHkoImJpcnRoZGF5IiwgMTU5NjMyNjQwMDAwMCkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9obiIpLnByb3BlcnR5KCJiaXJ0aGRheSIsIDU5NzcxNTIwMDAwMCkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiY2hhcmxpZSIpLnByb3BlcnR5KCJiaXJ0aGRheSIsIDEwMTI1MjE2MDAwMDApLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInN1enkiKS5wcm9wZXJ0eSgiYmlydGhkYXkiLCAtMTMxNTg3MjAwMDAwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYmlydGhkYXkiKS5hc051bWJlcigpLmFzRGF0ZSgpLmFzTnVtYmVyKCkgfV0sIAorICAgIGdfaW5qZWN0WDFfMlhfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIpLmFzU3RyaW5nKCkgfV0sIAorICAgIGdfaW5qZWN0WDFfMlhfYXNTdHJpbmdYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyKS5hc1N0cmluZyhTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WGxpc3RfMV8yWF9hc1N0cmluZ1hsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFgxX251bGxYX2FzU3RyaW5nOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsLCAxKS5hc1N0cmluZygpIH1dLCAKKyAgICBnX2luamVjdFgxX251bGxYX2FzU3RyaW5nWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIG51bGxdKS5hc1N0cmluZyhTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl92YWx1ZU1hcFhuYW1lWF9hc1N0cmluZzogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiKS5hc1N0cmluZygpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBYbmFtZVhfb3JkZXJfZm9sZF9hc1N0cmluZ1hsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzU3RyaW5nKCkgfV0sIAorICAgIGdfVl9mb2xkX2FzU3RyaW5nWGxvY2FsWF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkub3JkZXIoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX0VfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmFzU3RyaW5nKCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuYXNTdHJpbmcoKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVzWGFnZVhfYXNTdHJpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoImFnZSIpLmFzU3RyaW5nKCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1hhZ2VYX29yZGVyX2ZvbGRfYXNTdHJpbmdYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1hhZ2VYX2FzU3RyaW5nX2NvbmNhdFhfeWVhcnNfb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygiYWdlIikuYXNTdHJpbmcoKS5jb25jYXQoIiB5ZWFycyBvbGQiKSB9XSwgCisgICAgZ19jYWxsOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoKSB9XSwgCisgICAgZ19jYWxsWGxpc3RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoIi0tbGlzdCIpIH1dLCAKKyAgICBnX2NhbGxYbGlzdFhfd2l0aFhzdHJpbmdfc3RyaW5nWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5jYWxsKCItLWxpc3QiKS53aXRoXygic2VydmljZSIsICJ0aW5rZXIuc2VhcmNoIikgfV0sIAorICAgIGdfY2FsbFhsaXN0WF93aXRoWHN0cmluZ190cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoIi0tbGlzdCIpLndpdGhfKCJzZXJ2aWNlIiwgX18uY29uc3RhbnQoInRpbmtlci5zZWFyY2giKSkgfV0sIAorICAgIGdfY2FsbFhsaXN0X21hcFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5jYWxsKCItLWxpc3QiLCB4eDEpIH1dLCAKKyAgICBnX2NhbGxYbGlzdF90cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoIi0tbGlzdCIsIF9fLnByb2plY3QoInNlcnZpY2UiKS5ieShfXy5jb25zdGFudCgidGlua2VyLnNlYXJjaCIpKSkgfV0sIAorICAgIGdfY2FsbFhsaXN0X21hcF90cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuY2FsbCgiLS1saXN0IiwgeHgxLCBfXy5wcm9qZWN0KCJzZXJ2aWNlIikuYnkoX18uY29uc3RhbnQoInRpbmtlci5zZWFyY2giKSkpIH1dLCAKKyAgICBnX2NhbGxYc2VhcmNoX21hcFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5jYWxsKCJ0aW5rZXIuc2VhcmNoIiwgeHgxKS5lbGVtZW50KCkgfV0sIAorICAgIGdfY2FsbFhzZWFyY2hfdHJhdmVyc2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5jYWxsKCJ0aW5rZXIuc2VhcmNoIiwgX18ucHJvamVjdCgic2VhcmNoIikuYnkoX18uY29uc3RhbnQoInZhZGEiKSkpLmVsZW1lbnQoKSB9XSwgCisgICAgZ19jYWxsWHNlYXJjaFhfd2l0aFhzdHJpbmdfc3RyaW5nWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5jYWxsKCJ0aW5rZXIuc2VhcmNoIikud2l0aF8oInNlYXJjaCIsICJ2YWRhIikuZWxlbWVudCgpIH1dLCAKKyAgICBnX2NhbGxYc2VhcmNoWF93aXRoWHN0cmluZ190cmF2ZXJzYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmNhbGwoInRpbmtlci5zZWFyY2giKS53aXRoXygic2VhcmNoIiwgX18uY29uc3RhbnQoInZhZGEiKSkuZWxlbWVudCgpIH1dLCAKKyAgICBnX2NhbGxYc2VhcmNoX21hcFhfd2l0aFhzdHJpbmdfVmVydGV4WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmNhbGwoInRpbmtlci5zZWFyY2giLCB4eDEpLndpdGhfKCJ0eXBlIiwgIlZlcnRleCIpLmVsZW1lbnQoKSB9XSwgCisgICAgZ19jYWxsWHNlYXJjaF9tYXBYX3dpdGhYc3RyaW5nX0VkZ2VYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuY2FsbCgidGlua2VyLnNlYXJjaCIsIHh4MSkud2l0aF8oInR5cGUiLCAiRWRnZSIpLmVsZW1lbnQoKSB9XSwgCisgICAgZ19jYWxsWHNlYXJjaF9tYXBYX3dpdGhYc3RyaW5nX1ZlcnRleFByb3BlcnR5WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmNhbGwoInRpbmtlci5zZWFyY2giLCB4eDEpLndpdGhfKCJ0eXBlIiwgIlZlcnRleFByb3BlcnR5IikuZWxlbWVudCgpIH1dLCAKKyAgICBnX1ZfY2FsbFhkY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJ2IikuY2FsbCgidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5IikucHJvamVjdCgidmVydGV4IiwgImRlZ3JlZSIpLmJ5KF9fLnNlbGVjdCgidiIpKS5ieSgpIH1dLCAKKyAgICBnX1Zfd2hlcmVYY2FsbFhkY1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5jYWxsKCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHkiKS5pcygzKSkgfV0sIAorICAgIGdfVl9jYWxsWGRjWF93aXRoWGRpcmVjdGlvbl9PVVRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLmNhbGwoInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eSIpLndpdGhfKCJkaXJlY3Rpb24iLCBEaXJlY3Rpb24uT1VUKS5wcm9qZWN0KCJ2ZXJ0ZXgiLCAiZGVncmVlIikuYnkoX18uc2VsZWN0KCJ2IikpLmJ5KCkgfV0sIAorICAgIGdfVl9jYWxsWGRjX21hcFhfd2l0aFhkaXJlY3Rpb25fT1VUWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLmNhbGwoInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eSIsIHh4MSkud2l0aF8oImRpcmVjdGlvbiIsIERpcmVjdGlvbi5PVVQpLnByb2plY3QoInZlcnRleCIsICJkZWdyZWUiKS5ieShfXy5zZWxlY3QoInYiKSkuYnkoKSB9XSwgCisgICAgZ19WX2NhbGxYZGNfdHJhdmVyc2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5jYWxsKCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHkiLCBfXy5wcm9qZWN0KCJkaXJlY3Rpb24iKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoInZlcnRleCIsICJkZWdyZWUiKS5ieShfXy5zZWxlY3QoInYiKSkuYnkoKSB9XSwgCisgICAgZ19WX2NhbGxYZGNfbWFwX3RyYXZlcnNhbFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5jYWxsKCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHkiLCB4eDEsIF9fLnByb2plY3QoImRpcmVjdGlvbiIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdCgidmVydGV4IiwgImRlZ3JlZSIpLmJ5KF9fLnNlbGVjdCgidiIpKS5ieSgpIH1dLCAKKyAgICBnX1ZfY29hbGVzY2VYb3V0WGZvb1hfb3V0WGJhclhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jb2FsZXNjZShfXy5vdXQoImZvbyIpLCBfXy5vdXQoImJhciIpKSB9XSwgCisgICAgZ19WWDFYX2NvYWxlc2NlWG91dFhrbm93c1hfb3V0WGNyZWF0ZWRYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoImtub3dzIiksIF9fLm91dCgiY3JlYXRlZCIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX2NvYWxlc2NlWG91dFhjcmVhdGVkWF9vdXRYa25vd3NYWF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoImNyZWF0ZWQiKSwgX18ub3V0KCJrbm93cyIpKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX2NvYWxlc2NlWG91dFhsaWtlc1hfb3V0WGtub3dzWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29hbGVzY2UoX18ub3V0KCJsaWtlcyIpLCBfXy5vdXQoImtub3dzIiksIF9fLm91dCgiY3JlYXRlZCIpKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2NvYWxlc2NlWG91dEVYa25vd3NYX291dEVYY3JlYXRlZFhYX290aGVyVl9wYXRoX2J5WG5hbWVYX2J5WGxhYmVsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29hbGVzY2UoX18ub3V0RSgia25vd3MiKSwgX18ub3V0RSgiY3JlYXRlZCIpKS5vdGhlclYoKS5wYXRoKCkuYnkoIm5hbWUiKS5ieShULmxhYmVsKSB9XSwgCisgICAgZ19WX291dFhjcmVhdGVkWF9vcmRlcl9ieVhuYW1lWF9jb2FsZXNjZVhuYW1lX2NvbnN0YW50WHhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikub3JkZXIoKS5ieSgibmFtZSIpLmNvYWxlc2NlKF9fLnZhbHVlcygibmFtZSIpLCBfXy5jb25zdGFudCgieCIpKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbFhfY29tYmluZVhpbmplY3RYMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5jb21iaW5lKF9fLmluamVjdCgxKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfY29tYmluZVhWX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5jb21iaW5lKF9fLlYoKS5mb2xkKCkpIH1dLCAKKyAgICBnX1ZfZm9sZF9jb21iaW5lWGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQobnVsbCkpIH1dLCAKKyAgICBnX1ZfZm9sZF9jb21iaW5lWFZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkuY29tYmluZShfXy5WKCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfY29tYmluZVgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLmNvbWJpbmUoMikgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9jb21iaW5lWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuY29tYmluZShudWxsKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9jb21iaW5lWFZfdmFsdWVzWG5hbWVYX2ZvbGRYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfY29tYmluZVhWX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKSkudW5mb2xkKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2NvbWJpbmVYVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSB9XSwgCisgICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9jb21iaW5lWE1BUktPWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkuY29tYmluZShbIk1BUktPIl0pIH1dLCAKKyAgICBnX2luamVjdFh4eDFYX2NvbWJpbmVYVl92YWx1ZXNYbmFtZVhfZm9sZFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbIm1hcmtvIl0pLmNvbWJpbmUoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkudW5mb2xkKCkgfV0sIAorICAgIGdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2NvbWJpbmVYc2VhdHRsZV92YW5jb3V2ZXJYX29yZGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmNvbWJpbmUoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfY29tYmluZVhlbXB0eV9saXN0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuY29tYmluZShbXSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9mb2xkX2NvbWJpbmVYY29uc3RhbnRYMjdYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfY29tYmluZVhkYXZlX2tlbHZpblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmNvbWJpbmUoWyJkYXZlIiwgImtlbHZpbiJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX2NvbWJpbmVYYV9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkuY29tYmluZShbImEiLCAiYyJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX2NvbWJpbmVYYV9udWxsX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5jb21iaW5lKFsiYSIsIG51bGwsICJjIl0pIH1dLCAKKyAgICBnX2luamVjdFgzX3RocmVlWF9jb21iaW5lWGZpdmVfdGhyZWVfN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuY29tYmluZShbImZpdmUiLCAidGhyZWUiLCA3XSkgfV0sIAorICAgIGdfaW5qZWN0WGFfYlhfY29uY2F0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiYSIsICJiIikuY29uY2F0KCkgfV0sIAorICAgIGdfaW5qZWN0WGFfYlhfY29uY2F0X1hjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiLCAiYiIpLmNvbmNhdCgiYyIpIH1dLCAKKyAgICBnX2luamVjdFhhX2JYX2NvbmNhdF9YY19kWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiLCAiYiIpLmNvbmNhdCgiYyIsICJkIikgfV0sIAorICAgIGdfaW5qZWN0WGFfYlhfY29uY2F0X1hpbmplY3RfY19kWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiLCAiYiIpLmNvbmNhdChfXy5pbmplY3QoImMiKSkgfV0sIAorICAgIGdfaW5qZWN0WGFYX2NvbmNhdF9YaW5qZWN0X0xpc3RfYl9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImEiKS5jb25jYXQoX18uaW5qZWN0KFsiYiIsICJjIl0pKSB9XSwgCisgICAgZ19pbmplY3RYTGlzdFhhX2JYY1hfY29uY2F0X1hkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSwgImMiKS5jb25jYXQoImQiKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbFhfY29uY2F0X1hpbmplY3RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5jb25jYXQoKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbF9hWF9jb25jYXRfWG51bGxfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsICJhIikuY29uY2F0KG51bGwsICJiIikgfV0sIAorICAgIGdfaW5qZWN0WGhlbGxvX2hpWF9jb25jYXRYVl92YWx1ZXNfb3JkZXJfYnlYbmFtZVhfdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImhlbGxvIiwgImhpIikuY29uY2F0KF9fLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxfdmFsdWVfY29uY2F0X1hfWF9jb25jYXRfWHBlcnNvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoIiAiKS5jb25jYXQoInBlcnNvbiIpIH1dLCAKKyAgICBnX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVzWG5hbWVYX2FzWGFYX2NvbnN0YW50WE1yWF9jb25jYXRYc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoImEiKS5jb25zdGFudCgiTXIuIikuY29uY2F0KF9fLnNlbGVjdCgiYSIpKSB9XSwgCisgICAgZ19oYXNMYWJlbFhzb2Z0d2FyZVhfYXNYYVhfdmFsdWVzWG5hbWVYX2NvbmNhdFh1bnNlc1hfY29uY2F0WHNlbGVjdFhhWHZhbHVlc1hsYW5nWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoIiB1c2VzICIpLmNvbmNhdChfXy5zZWxlY3QoImEiKS52YWx1ZXMoImxhbmciKSkgfV0sIAorICAgIGdfVlgxWF9vdXRFX2FzWGFYX1ZYMVhfdmFsdWVzWG5hbWVzWF9jb25jYXRYc2VsZWN0WGFYX2xhYmVsWF9jb25jYXRYc2VsZWN0WGFYX2luVl92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmFzKCJhIikuVih2aWQxKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoX18uc2VsZWN0KCJhIikubGFiZWwoKSkuY29uY2F0KF9fLnNlbGVjdCgiYSIpLmluVigpLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ19WWDFYX291dEVfYXNYYVhfVlgxWF92YWx1ZXNYbmFtZXNYX2NvbmNhdFhzZWxlY3RYYVhfbGFiZWxfc2VsZWN0WGFYX2luVl92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmFzKCJhIikuVih2aWQxKS52YWx1ZXMoIm5hbWUiKS5jb25jYXQoX18uc2VsZWN0KCJhIikubGFiZWwoKSwgX18uc2VsZWN0KCJhIikuaW5WKCkudmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX2FkZFZYY29uc3RhbnRYcHJlZml4X1hfY29uY2F0WFZYMVhfbGFiZWxYX2xhYmVsOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVihfXy5jb25zdGFudCgicHJlZml4XyIpLmNvbmNhdChfXy5WKHZpZDEpLmxhYmVsKCkpKS5sYWJlbCgpIH1dLCAKKyAgICBnX2luamVjdFhudWxsWF9jb25qb2luWDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5jb25qb2luKCIxIikgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfY29uam9pblgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuY29uam9pbigiMSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2NvbmpvaW5YX1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkuY29uam9pbigiOyIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfY29uam9pblhfWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuY29uam9pbigiXyIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfZm9sZF9jb25qb2luWHNlbWljb2xvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikub3JkZXIoKS5mb2xkKCkuY29uam9pbigiOyIpIH1dLCAKKyAgICBnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX2NvbmpvaW5YTUFSS09YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCJuYW1lIikudG9VcHBlcigpKS5jb25qb2luKCJNQVJLTyIpIH1dLCAKKyAgICBnX2luamVjdFhtYXJrb1hfY29uam9pblhfWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJtYXJrbyJdKS5jb25qb2luKCItIikgfV0sIAorICAgIGdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWF9jb25qb2luWDFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmNvbmpvaW4oIjEiKSB9XSwgCisgICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9jb25qb2luWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmNvbmpvaW4oIiIpIH1dLCAKKyAgICBnX2luamVjdFhhX251bGxfYlhfY29uam9pblh4eXpYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5jb25qb2luKCJ4eXoiKSB9XSwgCisgICAgZ19pbmplY3RYM190aHJlZVhfY29uam9pblhfWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzMsICJ0aHJlZSJdKS5jb25qb2luKCI7IikgfV0sIAorICAgIGdfaW5qZWN0WG51bGxfYV9udWxsX2JYX2NvbmpvaW5YcGx1c1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFtudWxsLCAiYSIsIG51bGwsICJiIl0pLmNvbmpvaW4oIisiKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbF9udWxsWF9jb25qb2luWHBsdXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgbnVsbF0pLmNvbmpvaW4oIisiKSB9XSwgCisgICAgZ19WX2Nvbm5lY3RlZENvbXBvbmVudF9oYXNYY29tcG9uZW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50IikgfV0sIAorICAgIGdfVl9kZWR1cF9jb25uZWN0ZWRDb21wb25lbnRfaGFzWGNvbXBvbmVudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmRlZHVwKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50IikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfY29ubmVjdGVkQ29tcG9uZW50X3Byb2plY3RfYnlYbmFtZVhfYnlYY29tcG9uZW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuY29ubmVjdGVkQ29tcG9uZW50KCkucHJvamVjdCgibmFtZSIsICJjb21wb25lbnQiKS5ieSgibmFtZSIpLmJ5KCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50IikgfV0sIAorICAgIGdfVl9jb25uZWN0ZWRDb21wb25lbnRfd2l0aFhFREdFU19ib3RoRVhrbm93c1hYX3dpdGhYUFJPUEVSVFlfTkFNRV9jbHVzdGVyWF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNsdXN0ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuY29ubmVjdGVkQ29tcG9uZW50KCkud2l0aF8oIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LmVkZ2VzIiwgX18uYm90aEUoImtub3dzIikpLndpdGhfKCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5wcm9wZXJ0eU5hbWUiLCAiY2x1c3RlciIpLnByb2plY3QoIm5hbWUiLCAiY2x1c3RlciIpLmJ5KCJuYW1lIikuYnkoImNsdXN0ZXIiKSB9XSwgCisgICAgZ19WX2NvbnN0YW50WDEyM1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNvbnN0YW50KDEyMykgfV0sIAorICAgIGdfVl9jb25zdGFudFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY29uc3RhbnQobnVsbCkgfV0sIAorICAgIGdfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF92YWx1ZXNYbmFtZVhfY29uc3RhbnRYaW5odW1hblhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoInBlcnNvbiIpLCBfXy52YWx1ZXMoIm5hbWUiKSwgX18uY29uc3RhbnQoImluaHVtYW4iKSkgfV0sIAorICAgIGdfVl9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuY291bnQoKSB9XSwgCisgICAgZ19WX291dF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkuY291bnQoKSB9XSwgCisgICAgZ19WX2JvdGhfYm90aF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmJvdGgoKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfZm9sZF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9oYXNYbm9YX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5vIikuY291bnQoKSB9XSwgCisgICAgZ19WX3doZXJlWGluWGtrbm93c1hfb3V0WGNyZWF0ZWRYX2NvdW50X2lzXzBYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS53aGVyZShfXy5pbl8oImtub3dzIikub3V0KCJjcmVhdGVkIikuY291bnQoKS5pcygwKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9yZXBlYXRYb3V0WF90aW1lc1g4WF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyg4KS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYNVhfYXNYYVhfb3V0WHdyaXR0ZW5CeVhfYXNYYlhfc2VsZWN0WGFfYlhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoNSkuYXMoImEiKS5vdXQoIndyaXR0ZW5CeSIpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYM1hfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMykuY291bnQoKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WGxhbmdYX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJsYW5nIikuY291bnQoKSB9XSwgCisgICAgZ19FX3NhbXBsZVgxWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuc2FtcGxlKDEpLmNvdW50KCkgfV0sIAorICAgIGdfVl9zYW1wbGVYMVhfYnlYYWdlWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2FtcGxlKDEpLmJ5KCJhZ2UiKS5jb3VudCgpIH1dLCAKKyAgICBnX1Zfb3JkZXJfYnlYbm9YX2NvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJubyIpLmNvdW50KCkgfV0sIAorICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuY291bnQoKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WGxhYmVsWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuY291bnQoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWERUX2hvdXJfMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSkuZGF0ZUFkZChEVC5ob3VyLCAyKSB9XSwgCisgICAgZ19pbmplY3RYZGF0ZXRpbWVYc3RyWFhfZGF0ZUFkZFhob3VyXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJykpLmRhdGVBZGQoRFQuaG91ciwgMikgfV0sIAorICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0clhYX2RhdGVBZGRYaG91cl8xWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIC0xKSB9XSwgCisgICAgZ19pbmplY3RYZGF0ZXRpbWVYc3RyWFhfZGF0ZUFkZFhtaW51dGVfMTBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJykpLmRhdGVBZGQoRFQubWludXRlLCAxMCkgfV0sIAorICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0clhYX2RhdGVBZGRYc2Vjb25kXzIwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlQWRkKERULnNlY29uZCwgMjApIH1dLCAKKyAgICBnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWGRheV8xMVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA5LTA2VDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOS0wNlQwMDowMFonKSkuZGF0ZUFkZChEVC5kYXksIDExKSB9XSwgCisgICAgZ19pbmplY3RYZGF0ZXRpbWVYc3RyMVhYX2RhdGVEaWZmWGRhdGV0aW1lWHN0cjJYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlRGlmZihuZXcgRGF0ZSgnMjAyMy0wOC0wOVQwMDowMFonKSkgfV0sIAorICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0cjFYWF9kYXRlRGlmZlhjb25zdGFudFhkYXRldGltZVhzdHIyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpLmRhdGVEaWZmKF9fLmNvbnN0YW50KG5ldyBEYXRlKCcyMDIzLTA4LTAxVDAwOjAwWicpKSkgfV0sIAorICAgIGdfaW5qZWN0WGRhdGV0aW1lWHN0cjFYWF9kYXRlRGlmZlhpbmplY3RYZGF0ZXRpbWVYc3RyMlhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKS5kYXRlRGlmZihfXy5pbmplY3QobmV3IERhdGUoJzIwMjMtMTAtMTFUMDA6MDBaJykpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hiaXJ0aGRheVhfYXNEYXRlX2RhdGVEaWZmWGRhdGV0aW1lWDE5NzAwMTAxVDAwMDBaWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0eSgiYmlydGhkYXkiLCAiMTU5NjMyNjQwMDAwMCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvaG4iKS5wcm9wZXJ0eSgiYmlydGhkYXkiLCAiNTk3NzE1MjAwMDAwIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiY2hhcmxpZSIpLnByb3BlcnR5KCJiaXJ0aGRheSIsICIxMDEyNTIxNjAwMDAwIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAic3V6eSIpLnByb3BlcnR5KCJiaXJ0aGRheSIsICItMTMxNTg3MjAwMDAwIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImJpcnRoZGF5IikuYXNOdW1iZXIoKS5hc0RhdGUoKS5kYXRlRGlmZihuZXcgRGF0ZSgnMTk3MC0wMS0wMVQwMDowMFonKSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9hbGljZVhfdmFsdWVzWGJpcnRoZGF5WF9hc0RhdGVfZGF0ZURpZmZYY29uc3RhbnRYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikucHJvcGVydHkoImJpcnRoZGF5IiwgMTU5NjMyNjQwMDAwMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAiYWxpY2UiKS52YWx1ZXMoImJpcnRoZGF5IikuYXNEYXRlKCkuZGF0ZURpZmYoX18uY29uc3RhbnQobnVsbCkpIH1dLCAKKyAgICBnX2luamVjdFhudWxsWF9kaWZmZXJlbmNlWGluamVjdFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmRpZmZlcmVuY2UoX18uaW5qZWN0KDEpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9kaWZmZXJlbmNlWFZfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmRpZmZlcmVuY2UoX18uVigpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9mb2xkX2RpZmZlcmVuY2VYY29uc3RhbnRYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudChudWxsKSkgfV0sIAorICAgIGdfVl9mb2xkX2RpZmZlcmVuY2VYVlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaWZmZXJlbmNlWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGlmZmVyZW5jZSgyKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2RpZmZlcmVuY2VYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5kaWZmZXJlbmNlKG51bGwpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2RpZmZlcmVuY2VYVl92YWx1ZXNYbmFtZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2RpZmZlcmVuY2VYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9mb2xkX2RpZmZlcmVuY2VYVl92YWx1ZXNYYWdlWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkpIH1dLCAKKyAgICBnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX2RpZmZlcmVuY2VYTUFSS09YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCJuYW1lIikudG9VcHBlcigpKS5kaWZmZXJlbmNlKFsiTUFSS08iXSkgfV0sIAorICAgIGdfaW5qZWN0WG1hcmtvWF9kaWZmZXJlbmNlWFZfdmFsdWVzWG5hbWVYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbIm1hcmtvIl0pLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RpZmZlcmVuY2VYc2VhdHRsZV92YW5jb3V2ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlmZmVyZW5jZShbInNlYXR0bGUiLCAidmFuY291dmVyIl0pIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2RpZmZlcmVuY2VYcmlwcGxlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuZGlmZmVyZW5jZShbInJpcHBsZSJdKSB9XSwgCisgICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaWZmZXJlbmNlWGVtcHR5X2xpc3RYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoIm5hbWUiKS5kaWZmZXJlbmNlKFtdKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfZGlmZmVyZW5jZVhjb25zdGFudFgyN1hfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfZGlmZmVyZW5jZVhkYXZlX2tlbHZpblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmRpZmZlcmVuY2UoWyJkYXZlIiwgImtlbHZpbiJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX2RpZmZlcmVuY2VYYV9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkuZGlmZmVyZW5jZShbImEiLCAiYyJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX2RpZmZlcmVuY2VYYV9udWxsX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5kaWZmZXJlbmNlKFsiYSIsIG51bGwsICJjIl0pIH1dLCAKKyAgICBnX2luamVjdFgzX3RocmVlWF9kaWZmZXJlbmNlWGZpdmVfdGhyZWVfN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuZGlmZmVyZW5jZShbImZpdmUiLCAidGhyZWUiLCA3XSkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxYX2Rpc2p1bmN0WGluamVjdFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmRpc2p1bmN0KF9fLmluamVjdCgxKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZGlzanVuY3RYVl9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZGlzanVuY3QoX18uVigpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9mb2xkX2Rpc2p1bmN0WGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLmNvbnN0YW50KG51bGwpKSB9XSwgCisgICAgZ19WX2ZvbGRfZGlzanVuY3RYVlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfZGlzanVuY3RYMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5kaXNqdW5jdCgyKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2Rpc2p1bmN0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGlzanVuY3QobnVsbCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRfZGlzanVuY3RYVl92YWx1ZXNYbmFtZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaXNqdW5jdFhWX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9mb2xkX2Rpc2p1bmN0WFZfdmFsdWVzWGFnZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9vdXRfcGF0aF9ieVh2YWx1ZXNYbmFtZVhfdG9VcHBlclhfZGlzanVuY3RYTUFSS09YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCJuYW1lIikudG9VcHBlcigpKS5kaXNqdW5jdChbIk1BUktPIl0pIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9kaXNqdW5jdFhzZWF0dGxlX3ZhbmNvdXZlclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJsb2NhdGlvbiIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kaXNqdW5jdChbInNlYXR0bGUiLCAidmFuY291dmVyIl0pIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2Rpc2p1bmN0WG1hcmtvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuZGlzanVuY3QoWyJtYXJrbyJdKSB9XSwgCisgICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaXNqdW5jdFhzdGVwaGVuX21hcmtvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuZGlzanVuY3QoWyJzdGVwaGVuIiwgIm1hcmtvIl0pIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2Rpc2p1bmN0WGRhdmVfa2VsdmluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikuZGlzanVuY3QoWyJkYXZlIiwgImtlbHZpbiJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX2Rpc2p1bmN0WGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLmRpc2p1bmN0KFsiYSIsICJjIl0pIH1dLCAKKyAgICBnX2luamVjdFhhX251bGxfYlhfZGlzanVuY3RYYV9udWxsX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5kaXNqdW5jdChbImEiLCBudWxsLCAiYyJdKSB9XSwgCisgICAgZ19pbmplY3RYM190aHJlZVhfZGlzanVuY3RYZml2ZV90aHJlZV83WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzMsICJ0aHJlZSJdKS5kaXNqdW5jdChbImZpdmUiLCAidGhyZWUiLCA3XSkgfV0sIAorICAgIGdfRTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfRVgxMVg6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLkUoZWlkMTEpIH1dLCAKKyAgICBnX0VYMTFBc1N0cmluZ1g6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLkUoZWlkMTEpIH1dLCAKKyAgICBnX0VYZWlkN19laWQxMVg6IFtmdW5jdGlvbih7ZywgZWlkMTEsIGVpZDd9KSB7IHJldHVybiBnLkUoZWlkNywgZWlkMTEpIH1dLCAKKyAgICBnX0VYbGlzdFhlaWQ3X2VpZDExWFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKHh4MSkgfV0sIAorICAgIGdfRVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKG51bGwpIH1dLCAKKyAgICBnX0VYbGlzdFhudWxsWFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKHh4MSkgfV0sIAorICAgIGdfRVgxMV9udWxsWDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuRShlaWQxMSwgbnVsbCkgfV0sIAorICAgIGdfVl9FWDExWDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuVigpLkUoZWlkMTEpIH1dLCAKKyAgICBnX0VYMTFYX0U6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLkUoZWlkMTEpLkUoKSB9XSwgCisgICAgZ19WX0VYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLkUobnVsbCkgfV0sIAorICAgIGdfVl9FWGxpc3RYbnVsbFhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLkUoeHgxKSB9XSwgCisgICAgZ19pbmplY3RYMVhfRVgxMV9udWxsWDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLkUoZWlkMTEsIG51bGwpIH1dLCAKKyAgICBnX2luamVjdFgxWF9jb2FsZXNjZVhFWF9oYXNMYWJlbFh0ZXN0c1hfYWRkRVh0ZXN0c1hfZnJvbV9WX2hhc1huYW1lWF9Yam9zaFhYX3RvWFZfaGFzWG5hbWVYX1h2YWRhc1hYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmNvYWxlc2NlKF9fLkUoKS5oYXNMYWJlbCgidGVzdHMiKSwgX18uYWRkRSgidGVzdHMiKS5mcm9tXyhfXy5WKCkuaGFzKCJuYW1lIiwgImpvc2giKSkudG8oX18uVigpLmhhcygibmFtZSIsICJ2YWRhcyIpKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgidGVzdHMiKSB9XSwgCisgICAgZ19WWDFYX291dEVfaW5WOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLmluVigpIH1dLCAKKyAgICBnX1ZYMlhfaW5FX291dFY6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5pbkUoKS5vdXRWKCkgfV0sIAorICAgIGdfVl9vdXRFX2hhc1h3ZWlnaHRfMVhfb3V0VjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLmhhcygid2VpZ2h0IiwgMS4wKS5vdXRWKCkgfV0sIAorICAgIGdfVlgxWF9vdXRFX290aGVyVjogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5vdGhlclYoKSB9XSwgCisgICAgZ19WWDRYX2JvdGhFX290aGVyVjogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmJvdGhFKCkub3RoZXJWKCkgfV0sIAorICAgIGdfVlg0WF9ib3RoRV9oYXNYd2VpZ2h0X2x0XzFYX290aGVyVjogW2Z1bmN0aW9uKHtnLCB2aWQ0fSkgeyByZXR1cm4gZy5WKHZpZDQpLmJvdGhFKCkuaGFzKCJ3ZWlnaHQiLCBQLmx0KDEuMCkpLm90aGVyVigpIH1dLCAKKyAgICBnZXRfZ19WWDFYX291dEVfb3RoZXJWOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RVhrbm93c1hfaW5WOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKS5pblYoKSB9XSwgCisgICAgZ19WWDFYX291dEVYa25vd3NfY3JlYXRlZFhfaW5WOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiLCAiY3JlYXRlZCIpLmluVigpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RVhrbm93c1hfYm90aFY6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpLmJvdGhWKCkgfV0sIAorICAgIGdfVlgxWF9vdXRFWGtub3dzWF9ib3RoVl9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKS5ib3RoVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfdG9FWG91dF9rbm93c3ZhclhfdmFsdWVzWHdlaWdodFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkudG9FKERpcmVjdGlvbi5PVVQsIHh4MSkudmFsdWVzKCJ3ZWlnaHQiKSB9XSwgCisgICAgZ19WWDFYX3Byb3BlcnRpZXNfZWxlbWVudDogW2Z1bmN0aW9uKHtnLCB2aWQyfSkgeyByZXR1cm4gZy5WKHZpZDIpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX2VsZW1lbnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzWGFnZVhfZWxlbWVudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygiYWdlIikuZWxlbWVudCgpIH1dLCAKKyAgICBnX0VYX3Byb3BlcnRpZXNfZWxlbWVudDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuRShlaWQxMSkucHJvcGVydGllcygpLmVsZW1lbnQoKS5saW1pdCgxKSB9XSwgCisgICAgZ19FX3Byb3BlcnRpZXNfZWxlbWVudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSB9XSwgCisgICAgZ19WWHY3X3Byb3BlcnRpZXNfcHJvcGVydGllc19lbGVtZW50X2VsZW1lbnQ6IFtmdW5jdGlvbih7ZywgdmlkN30pIHsgcmV0dXJuIGcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkubGltaXQoMSkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNfZWxlbWVudF9lbGVtZW50OiBbZnVuY3Rpb24oe2csIHZpZDd9KSB7IHJldHVybiBnLlYodmlkNykucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkuZWxlbWVudCgpIH1dLCAKKyAgICBnX1ZfZWxlbWVudE1hcDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZWxlbWVudE1hcCgpIH1dLCAKKyAgICBnX1ZfZWxlbWVudE1hcFhuYW1lX2FnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVsZW1lbnRNYXAoIm5hbWUiLCAiYWdlIikgfV0sIAorICAgIGdfRVgxMVhfZWxlbWVudE1hcDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuRShlaWQxMSkuZWxlbWVudE1hcCgpIH1dLCAKKyAgICBnX1ZfZWxlbWVudE1hcFhuYW1lX2FnZV9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZWxlbWVudE1hcCgibmFtZSIsICJhZ2UiLCBudWxsKSB9XSwgCisgICAgZ19WX2FzWGFYX2ZsYXRNYXBYc2VsZWN0WGFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5mbGF0TWFwKF9fLnNlbGVjdCgiYSIpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mbGF0TWFwWHNwbGl0WGFYX3VuZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZsYXRNYXAoX18uc3BsaXQoImEiKS51bmZvbGQoKSkgfV0sIAorICAgIGdfVl9mbGF0TWFwWG91dF9vdXRYX3BhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZsYXRNYXAoX18ub3V0KCkub3V0KCkpLnBhdGgoKSB9XSwgCisgICAgZ19WX2ZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKSB9XSwgCisgICAgZ19WX2ZvbGRfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkudW5mb2xkKCkgfV0sIAorICAgIGdfVl9hZ2VfZm9sZFgwX3BsdXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoMCwgT3BlcmF0b3Iuc3VtKSB9XSwgCisgICAgZ19pbmplY3RYYTFfYjJYX2ZvbGRYbV9hZGRBbGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChuZXcgTWFwKFtbImEiLCAxXV0pLCBuZXcgTWFwKFtbImIiLCAyXV0pKS5mb2xkKG5ldyBNYXAoW10pLCBPcGVyYXRvci5hZGRBbGwpIH1dLCAKKyAgICBnX2luamVjdFhhMV9iMl9iNFhfZm9sZFhtX2FkZEFsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1siYSIsIDFdXSksIG5ldyBNYXAoW1siYiIsIDJdXSksIG5ldyBNYXAoW1siYiIsIDRdXSkpLmZvbGQobmV3IE1hcChbXSksIE9wZXJhdG9yLmFkZEFsbCkgfV0sIAorICAgIGdfaW5qZWN0WGxpc3QxX2xpc3QyWF9mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0sIFszLCA0XSkuZm9sZCgpIH1dLCAKKyAgICBnX2luamVjdFhsaXN0MV9saXN0Ml9saXN0M1hfZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSkuZm9sZCgpIH1dLCAKKyAgICBnX1ZYMVhfZm9ybWF0WHN0clg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmZvcm1hdCgiSGVsbG8gd29ybGQiKSB9XSwgCisgICAgZ19WX2Zvcm1hdFhzdHJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb3JtYXQoIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZCIpIH1dLCAKKyAgICBnX2luamVjdFgxWF9hc1hhZ2VYX1ZfZm9ybWF0WHN0clg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFzKCJhZ2UiKS5WKCkuZm9ybWF0KCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGQiKSB9XSwgCisgICAgZ19WX2Zvcm1hdFhzdHJYX2J5WHZhbHVlc1huYW1lWFhfYnlYdmFsdWVzWGFnZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb3JtYXQoIiV7X30gaXMgJXtffSB5ZWFycyBvbGQiKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkuYnkoX18udmFsdWVzKCJhZ2UiKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Zvcm1hdFhzdHJYX2J5WGNvbnN0YW50WGhlbGxvWFhfYnlYdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZvcm1hdCgiJXtffSAle199ICV7X30iKS5ieShfXy5jb25zdGFudCgiaGVsbG8iKSkuYnkoX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZYMVhfZm9ybWF0WHN0clhfYnlYY29uc3RhbnRYaGVsbG9YWF9ieVh2YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuZm9ybWF0KCIle199IikuYnkoX18uY29uc3RhbnQoImhlbGxvIikpLmJ5KF9fLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ19WX2Zvcm1hdFhzdHJYX2J5WGJvdGhFX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9ybWF0KCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zIikuYnkoX18uYm90aEUoKS5jb3VudCgpKSB9XSwgCisgICAgZ19WX3Byb2plY3RYbmFtZV9jb3VudFhfYnlYdmFsdWVzWG5hbWVYWF9ieVhib3RoRV9jb3VudFhfZm9ybWF0WHN0clg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb2plY3QoIm5hbWUiLCAiY291bnQiKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5mb3JtYXQoIiV7bmFtZX0gaGFzICV7Y291bnR9IGNvbm5lY3Rpb25zIikgfV0sIAorICAgIGdfVl9lbGVtZW50TWFwX2Zvcm1hdFhzdHJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5lbGVtZW50TWFwKCkuZm9ybWF0KCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGQiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYYVhfdmFsdWVzWG5hbWVYX2FzWHAxWF9zZWxlY3RYYVhfaW5Ya25vd3NYX2Zvcm1hdFhzdHJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5hcygicDEiKS5zZWxlY3QoImEiKS5pbl8oImtub3dzIikuZm9ybWF0KCIle3AxfSBrbm93cyAle25hbWV9IikgfV0sIAorICAgIGdfVl9hc1hzWF9sYWJlbF9hc1hzdWJqZWN0WF9zZWxlY3RYc1hfb3V0RV9hc1hwWF9sYWJlbF9hc1hwcmVkaWNhdGVYX3NlbGVjdFhwWF9pblZfbGFiZWxfYXNYb2JqZWN0WF9mb3JtYXRYc3RyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoInMiKS5sYWJlbCgpLmFzKCJzdWJqZWN0Iikuc2VsZWN0KCJzIikub3V0RSgpLmFzKCJwIikubGFiZWwoKS5hcygicHJlZGljYXRlIikuc2VsZWN0KCJwIikuaW5WKCkubGFiZWwoKS5hcygib2JqZWN0IikuZm9ybWF0KCIle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH0iKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9pbmRleF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmluZGV4KCkudW5mb2xkKCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfb3JkZXJfYnlYbmFtZVhfaW5kZXhfd2l0aFhtYXBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5vcmRlcigpLmJ5KCJuYW1lIikuaW5kZXgoKS53aXRoXyhXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfdW5mb2xkX29yZGVyX2J5WHRhaWxYbG9jYWxfMVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkudW5mb2xkKCkub3JkZXIoKS5ieShfXy50YWlsKFNjb3BlLmxvY2FsLCAxKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfd2l0aFhtYXBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLndpdGhfKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkgfV0sIAorICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9pbmRleF91bmZvbGRfdW5mb2xkOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS5pbmRleCgpLnVuZm9sZCgpLnVuZm9sZCgpIH1dLCAKKyAgICBnX2luamVjdFhudWxsWF9pbnRlcnNlY3RYaW5qZWN0WDFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaW50ZXJzZWN0KF9fLmluamVjdCgxKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfaW50ZXJzZWN0WFZfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmludGVyc2VjdChfXy5WKCkuZm9sZCgpKSB9XSwgCisgICAgZ19WX2ZvbGRfaW50ZXJzZWN0WGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudChudWxsKSkgfV0sIAorICAgIGdfVl9mb2xkX2ludGVyc2VjdFhWWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5WKCkpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfaW50ZXJzZWN0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuaW50ZXJzZWN0KDIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfaW50ZXJzZWN0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuaW50ZXJzZWN0KG51bGwpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2ludGVyc2VjdFhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9pbnRlcnNlY3RYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoIm5vbmV4aXN0YW50IikuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfaW50ZXJzZWN0WFZfdmFsdWVzWGFnZVhfZm9sZFhfb3JkZXJfbG9jYWw6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9pbnRlcnNlY3RYTUFSS09YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCJuYW1lIikudG9VcHBlcigpKS5pbnRlcnNlY3QoWyJNQVJLTyJdKSB9XSwgCisgICAgZ19pbmplY3RYbWFya29YX2ludGVyc2VjdFhfX19WX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJtYXJrbyJdKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2ludGVyc2VjdFhzZWF0dGxlX3ZhbmNvdXZlclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJsb2NhdGlvbiIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfaW50ZXJzZWN0WF9fX2NvbnN0YW50WDI3WF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2ludGVyc2VjdFhkYXZlX2tlbHZpblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmludGVyc2VjdChbImRhdmUiLCAia2VsdmluIl0pIH1dLCAKKyAgICBnX2luamVjdFhhX251bGxfYlhfaW50ZXJzZWN0WGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLmludGVyc2VjdChbImEiLCAiYyJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX2ludGVyc2VjdFhhX251bGxfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLmludGVyc2VjdChbImEiLCBudWxsLCAiYyJdKSB9XSwgCisgICAgZ19pbmplY3RYM190aHJlZVhfaW50ZXJzZWN0WGZpdmVfdGhyZWVfN1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkuaW50ZXJzZWN0KFsiZml2ZSIsICJ0aHJlZSIsIDddKSB9XSwgCisgICAgZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfbFRyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCIgIGZlYXR1cmUiLCAiIG9uZSB0ZXN0IiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCIpLmxUcmltKCkgfV0sIAorICAgIGdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX2xUcmltWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyIgIGZlYXR1cmUgICIsICIgb25lIHRlc3QgIiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCJdKS5sVHJpbShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WF9fZmVhdHVyZV9fWF9sVHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIiAgZmVhdHVyZSAgIikubFRyaW0oKSB9XSwgCisgICAgZ19pbmplY3RYTGlzdFhhX2JYWF9sVHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkubFRyaW0oKSB9XSwgCisgICAgZ19pbmplY3RYTGlzdFgxXzJYWF9sVHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAyXSkubFRyaW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2xUcmltOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5sVHJpbSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfbFRyaW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS5sVHJpbShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF9sZW5ndGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmZWF0dXJlIiwgInRlc3QiLCBudWxsKS5sZW5ndGgoKSB9XSwgCisgICAgZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX2xlbmd0aFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmZWF0dXJlIiwgInRlc3QiLCBudWxsKS5sZW5ndGgoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFhMaXN0WGFfYlhYX2xlbmd0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkubGVuZ3RoKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfbGVuZ3RoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5sZW5ndGgoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX2xlbmd0aFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLmxlbmd0aChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfb3JfbG9vcHNfaXNYM1hYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygibmFtZSIsICJwZXRlciIpLm9yKCkubG9vcHMoKS5pcygzKSkuaGFzKCJuYW1lIiwgInBldGVyIikucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfb3JfbG9vcHNfaXNYMlhYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygibmFtZSIsICJwZXRlciIpLm9yKCkubG9vcHMoKS5pcygyKSkuaGFzKCJuYW1lIiwgInBldGVyIikucGF0aCgpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfYW5kX2xvb3BzX2lzWDNYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicGV0ZXIiKS5hbmQoKS5sb29wcygpLmlzKDMpKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5wYXRoKCkuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2VtaXRYaGFzWG5hbWVfbWFya29YX29yX2xvb3BzX2lzWDJYWF9yZXBlYXRYb3V0WF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVtaXQoX18uaGFzKCJuYW1lIiwgIm1hcmtvIikub3IoKS5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfbWFwWHZhbHVlc1huYW1lWFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5tYXAoX18udmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RV9sYWJlbF9tYXBYbGVuZ3RoWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5sYWJlbCgpLm1hcChfXy5sZW5ndGgoKSkgfV0sIAorICAgIGdfVlgxWF9vdXRfbWFwWHZhbHVlc1huYW1lWFhfbWFwWGxlbmd0aFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5tYXAoX18udmFsdWVzKCJuYW1lIikpLm1hcChfXy5sZW5ndGgoKSkgfV0sIAorICAgIGdfd2l0aFBhdGhfVl9hc1hhWF9vdXRfbWFwWHNlbGVjdFhhWF92YWx1ZXNYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhQYXRoKCkuVigpLmFzKCJhIikub3V0KCkubWFwKF9fLnNlbGVjdCgiYSIpLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ193aXRoUGF0aF9WX2FzWGFYX291dF9vdXRfYXNYYlhfbWFwWHNlbGVjdFhhWF92YWx1ZXNYbmFtZVhfY29uY2F0WHNlbGVjdFhiWF92YWx1ZXNYbmFtZVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoUGF0aCgpLlYoKS5hcygiYSIpLm91dCgpLm91dCgpLmFzKCJiIikubWFwKF9fLnNlbGVjdCgiYSIpLnZhbHVlcygibmFtZSIpLmNvbmNhdChfXy5zZWxlY3QoImIiKS52YWx1ZXMoIm5hbWUiKSkpIH1dLCAKKyAgICBnX1ZfbWFwWHNlbGVjdFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikubWFwKF9fLnNlbGVjdCgiYSIpKSB9XSwgCisgICAgZ19WX21hcFhjb25zdGFudFhudWxsWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hcChfXy5jb25zdGFudChudWxsKSkgfV0sIAorICAgIGdfVl92YWx1ZU1hcF9tYXRjaFhhX3NlbGVjdFhuYW1lWF9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5tYXRjaChfXy5hcygiYSIpLnNlbGVjdCgibmFtZSIpLmFzKCJiIikpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9vdXRfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCkuYXMoImIiKSkgfV0sIAorICAgIGdfVl9tYXRjaFhhX291dF9iWF9zZWxlY3RYYl9pZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCkuYXMoImIiKSkuc2VsZWN0KCJiIikuYnkoVC5pZCkgfV0sIAorICAgIGdfVl9tYXRjaFhhX2tub3dzX2JfX2JfY3JlYXRlZF9jWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpKSB9XSwgCisgICAgZ19WX21hdGNoWGJfY3JlYXRlZF9jX19hX2tub3dzX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmFzKCJjIiksIF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9jcmVhdGVkX2JfX2JfMGNyZWF0ZWRfY1hfd2hlcmVYYV9uZXFfY1hfc2VsZWN0WGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKSwgX18uYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpKS53aGVyZSgiYSIsIFAubmVxKCJjIikpLnNlbGVjdCgiYSIsICJjIikgfV0sIAorICAgIGdfVl9tYXRjaFhkXzBrbm93c19hX19kX2hhc1huYW1lX3ZhZGFzWF9fYV9rbm93c19iX19iX2NyZWF0ZWRfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJkIikuaW5fKCJrbm93cyIpLmFzKCJhIiksIF9fLmFzKCJkIikuaGFzKCJuYW1lIiwgInZhZGFzIiksIF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIF9fLmFzKCJiIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSkgfV0sIAorICAgIGdfVl9tYXRjaFhhX2NyZWF0ZWRfbG9wX2JfX2JfMGNyZWF0ZWRfMjlfY19fY193aGVyZVhyZXBlYXRYb3V0WF90aW1lc1gyWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKS5hcygiYiIpLCBfXy5hcygiYiIpLmluXygiY3JlYXRlZCIpLmhhcygiYWdlIiwgMjkpLmFzKCJjIiksIF9fLmFzKCJjIikud2hlcmUoX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX21hdGNoWGFfb3V0X2NvdW50X2NfX2JfaW5fY291bnRfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5tYXRjaChfXy5hcygiYSIpLm91dCgpLmNvdW50KCkuYXMoImMiKSwgX18uYXMoImIiKS5pbl8oKS5jb3VudCgpLmFzKCJjIikpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9fYV9vdXRfYl9fbm90WGFfY3JlYXRlZF9iWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCkuYXMoImIiKSwgX18ubm90KF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKSkpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9jcmVhdGVkX2xvcF9iX19iXzBjcmVhdGVkXzI5X2NYX3doZXJlWGNfcmVwZWF0WG91dFhfdGltZXNYMlhYX3NlbGVjdFhhX2JfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgImxvcCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKSkud2hlcmUoX18uYXMoImMiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoImEiLCAiYiIsICJjIikgfV0sIAorICAgIGdfVl9vdXRfb3V0X21hdGNoWGFfMGNyZWF0ZWRfYl9fYl8wa25vd3NfY1hfc2VsZWN0WGNYX291dFhjcmVhdGVkWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5tYXRjaChfXy5hcygiYSIpLmluXygiY3JlYXRlZCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJrbm93cyIpLmFzKCJjIikpLnNlbGVjdCgiYyIpLm91dCgiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19iX2NyZWF0ZWRfY19fYV9jcmVhdGVkX2NYX2RlZHVwWGFfYl9jWF9zZWxlY3RYYVhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIF9fLmFzKCJiIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSwgX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpKS5kZWR1cCgiYSIsICJiIiwgImMiKS5zZWxlY3QoImEiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9jcmVhdGVkX2JfX2FfcmVwZWF0WG91dFhfdGltZXNYMlhYX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIiksIF9fLmFzKCJhIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5hcygiYiIpKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKKyAgICBnX1Zfbm90WG1hdGNoWGFfYWdlX2JfX2FfbmFtZV9jWF93aGVyZVhiX2VxWGNYWF9zZWxlY3RYYVhYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm5vdChfXy5tYXRjaChfXy5hcygiYSIpLnZhbHVlcygiYWdlIikuYXMoImIiKSwgX18uYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5hcygiYyIpKS53aGVyZSgiYiIsIFAuZXEoImMiKSkuc2VsZWN0KCJhIikpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19hbmRYYV9jcmVhdGVkX2NfX2JfY3JlYXRlZF9jX19hbmRYYl9jcmVhdGVkX2NvdW50X2RfX2Ffa25vd3NfY291bnRfZFhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYW5kKF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSwgX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5hcygiYyIpLCBfXy5hbmQoX18uYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLmFzKCJkIiksIF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmNvdW50KCkuYXMoImQiKSkpKSB9XSwgCisgICAgZ19WX21hdGNoWGFfd2hlcmVYYV9uZXFYY1hYX19hX2NyZWF0ZWRfYl9fb3JYYV9rbm93c192YWRhc19fYV8wa25vd3NfYW5kX2FfaGFzWGxhYmVsX3BlcnNvblhYX19iXzBjcmVhdGVkX2NfX2JfMGNyZWF0ZWRfY291bnRfaXNYZ3RYMVhYWF9zZWxlY3RYYV9iX2NYX2J5WGlkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18ud2hlcmUoImEiLCBQLm5lcSgiYyIpKSwgX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLCBfXy5vcihfXy5hcygiYSIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSwgX18uYXMoImEiKS5pbl8oImtub3dzIikuYW5kKCkuYXMoImEiKS5oYXMoVC5sYWJlbCwgInBlcnNvbiIpKSwgX18uYXMoImIiKS5pbl8oImNyZWF0ZWQiKS5hcygiYyIpLCBfXy5hcygiYiIpLmluXygiY3JlYXRlZCIpLmNvdW50KCkuaXMoUC5ndCgxKSkpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieShULmlkKSB9XSwgCisgICAgZ19WX21hdGNoWGFfX2FfYm90aF9iX19iX2JvdGhfY1hfZGVkdXBYYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5ib3RoKCkuYXMoImIiKSwgX18uYXMoImIiKS5ib3RoKCkuYXMoImMiKSkuZGVkdXAoImEiLCAiYiIpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19iX2NyZWF0ZWRfbG9wX19iX21hdGNoWGJfY3JlYXRlZF9kX19kXzBjcmVhdGVkX2NYX3NlbGVjdFhjWF9jWF9zZWxlY3RYYV9iX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLCBfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSwgX18uYXMoImIiKS5tYXRjaChfXy5hcygiYiIpLm91dCgiY3JlYXRlZCIpLmFzKCJkIiksIF9fLmFzKCJkIikuaW5fKCJjcmVhdGVkIikuYXMoImMiKSkuc2VsZWN0KCJjIikuYXMoImMiKSkuc2VsZWN0KCJhIiwgImIiLCAiYyIpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9rbm93c19iX19hX2NyZWF0ZWRfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIF9fLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImMiKSkgfV0sIAorICAgIGdfVl9tYXRjaFh3aGVyZVhhbmRYYV9jcmVhdGVkX2JfX2JfMGNyZWF0ZWRfY291bnRfaXNYZXFYM1hYWFhfX2FfYm90aF9iX193aGVyZVhiX2luWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLndoZXJlKF9fLmFuZChfXy5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIiksIF9fLmFzKCJiIikuaW5fKCJjcmVhdGVkIikuY291bnQoKS5pcyhQLmVxKDMpKSkpLCBfXy5hcygiYSIpLmJvdGgoKS5hcygiYiIpLCBfXy53aGVyZShfXy5hcygiYiIpLmluXygpKSkgfV0sIAorICAgIGdfVl9tYXRjaFhhX291dEVYY3JlYXRlZFhfb3JkZXJfYnlYd2VpZ2h0X2Rlc2NYX2xpbWl0WDFYX2luVl9iX19iX2hhc1hsYW5nX2phdmFYWF9zZWxlY3RYYV9iWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXRFKCJjcmVhdGVkIikub3JkZXIoKS5ieSgid2VpZ2h0IiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoImIiKSwgX18uYXMoImIiKS5oYXMoImxhbmciLCAiamF2YSIpKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl9tYXRjaFhhX2JvdGhfYl9fYl9ib3RoX2NYX2RlZHVwWGFfYlhfYnlYbGFiZWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLmJvdGgoKS5hcygiYiIpLCBfXy5hcygiYiIpLmJvdGgoKS5hcygiYyIpKS5kZWR1cCgiYSIsICJiIikuYnkoVC5sYWJlbCkgfV0sIAorICAgIGdfVl9tYXRjaFhhX2NyZWF0ZWRfYl9fYl8wY3JlYXRlZF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLCBfXy5hcygiYiIpLmluXygiY3JlYXRlZCIpLmFzKCJhIikpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX21hdGNoWGFfb3V0X2NvdW50X2NfX29yWGFfa25vd3NfYl9fYl9pbl9jb3VudF9jX19hbmRfX2NfaXNYZ3RYMlhYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5tYXRjaChfXy5hcygiYSIpLm91dCgpLmNvdW50KCkuYXMoImMiKSwgX18ub3IoX18uYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSwgX18uYXMoImIiKS5pbl8oKS5jb3VudCgpLmFzKCJjIikuYW5kKCkuYXMoImMiKS5pcyhQLmd0KDIpKSkpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9rbm93c19jb3VudF9iWF9zZWxlY3RYYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJrbm93cyIpLmNvdW50KCkuYXMoImIiKSkuc2VsZWN0KCJiIikgfV0sIAorICAgIGdfVl9tYXRjaFhhXzBzdW5nQnlfYl9fYV8wd3JpdHRlbkJ5X2NfX2Jfd3JpdHRlbkJ5X2RfX2Nfc3VuZ0J5X2RfX2RfaGFzWG5hbWVfR2FyY2lhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaW5fKCJzdW5nQnkiKS5hcygiYiIpLCBfXy5hcygiYSIpLmluXygid3JpdHRlbkJ5IikuYXMoImMiKSwgX18uYXMoImIiKS5vdXQoIndyaXR0ZW5CeSIpLmFzKCJkIiksIF9fLmFzKCJjIikub3V0KCJzdW5nQnkiKS5hcygiZCIpLCBfXy5hcygiZCIpLmhhcygibmFtZSIsICJHYXJjaWEiKSkgfV0sIAorICAgIGdfVl9tYXRjaFhhX2hhc1hzb25nX25hbWVfc3Vuc2hpbmVYX19hX21hcFgwZm9sbG93ZWRCeV93ZWlnaHRfbWVhblhfYl9fYV8wZm9sbG93ZWRCeV9jX19jX2ZpbHRlclh3ZWlnaHRfd2hlcmVYZ3RlWGJYWFhfb3V0Vl9kWF9zZWxlY3RYZFhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaGFzKCJzb25nIiwgIm5hbWUiLCAiSEVSRSBDT01FUyBTVU5TSElORSIpLCBfXy5hcygiYSIpLm1hcChfXy5pbkUoImZvbGxvd2VkQnkiKS52YWx1ZXMoIndlaWdodCIpLm1lYW4oKSkuYXMoImIiKSwgX18uYXMoImEiKS5pbkUoImZvbGxvd2VkQnkiKS5hcygiYyIpLCBfXy5hcygiYyIpLmZpbHRlcihfXy52YWx1ZXMoIndlaWdodCIpLndoZXJlKFAuZ3RlKCJiIikpKS5vdXRWKCkuYXMoImQiKSkuc2VsZWN0KCJkIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX21hdGNoWGFfMHN1bmdCeV9iX19hXzBzdW5nQnlfY19fYl93cml0dGVuQnlfZF9fY193cml0dGVuQnlfZV9fZF9oYXNYbmFtZV9HZW9yZ2VfSGFyaXNvblhfX2VfaGFzWG5hbWVfQm9iX01hcmxleVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLmluXygic3VuZ0J5IikuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oInN1bmdCeSIpLmFzKCJjIiksIF9fLmFzKCJiIikub3V0KCJ3cml0dGVuQnkiKS5hcygiZCIpLCBfXy5hcygiYyIpLm91dCgid3JpdHRlbkJ5IikuYXMoImUiKSwgX18uYXMoImQiKS5oYXMoIm5hbWUiLCAiR2VvcmdlX0hhcnJpc29uIiksIF9fLmFzKCJlIikuaGFzKCJuYW1lIiwgIkJvYl9NYXJsZXkiKSkgfV0sIAorICAgIGdfVl9tYXRjaFhhX2hhc1huYW1lX0dhcmNpYVhfX2FfMHdyaXR0ZW5CeV9iX19hXzBzdW5nQnlfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaGFzKCJuYW1lIiwgIkdhcmNpYSIpLCBfXy5hcygiYSIpLmluXygid3JpdHRlbkJ5IikuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oInN1bmdCeSIpLmFzKCJiIikpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29uZ3NYX21hdGNoWGFfbmFtZV9iX19hX3BlcmZvcm1hbmNlc19jWF9zZWxlY3RYYl9jWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvbmciKS5tYXRjaChfXy5hcygiYSIpLnZhbHVlcygibmFtZSIpLmFzKCJiIiksIF9fLmFzKCJhIikudmFsdWVzKCJwZXJmb3JtYW5jZXMiKS5hcygiYyIpKS5zZWxlY3QoImIiLCAiYyIpLmNvdW50KCkgfV0sIAorICAgIGdfVl9tYXRjaFhhX2ZvbGxvd2VkQnlfY291bnRfaXNYZ3RYMTBYWF9iX19hXzBmb2xsb3dlZEJ5X2NvdW50X2lzWGd0WDEwWFhfYlhfY291bnQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikub3V0KCJmb2xsb3dlZEJ5IikuY291bnQoKS5pcyhQLmd0KDEwKSkuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oImZvbGxvd2VkQnkiKS5jb3VudCgpLmlzKFAuZ3QoMTApKS5hcygiYiIpKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV8wc3VuZ0J5X2JfX2FfMHdyaXR0ZW5CeV9jX19iX3dyaXR0ZW5CeV9kWF93aGVyZVhjX3N1bmdCeV9kWF93aGVyZVhkX2hhc1huYW1lX0dhcmNpYVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tYXRjaChfXy5hcygiYSIpLmluXygic3VuZ0J5IikuYXMoImIiKSwgX18uYXMoImEiKS5pbl8oIndyaXR0ZW5CeSIpLmFzKCJjIiksIF9fLmFzKCJiIikub3V0KCJ3cml0dGVuQnkiKS5hcygiZCIpKS53aGVyZShfXy5hcygiYyIpLm91dCgic3VuZ0J5IikuYXMoImQiKSkud2hlcmUoX18uYXMoImQiKS5oYXMoIm5hbWUiLCAiR2FyY2lhIikpIH1dLCAKKyAgICBnX1ZfbWF0Y2hYYV9oYXNYbmFtZV9HYXJjaWFYX19hXzB3cml0dGVuQnlfYl9fYl9mb2xsb3dlZEJ5X2NfX2Nfd3JpdHRlbkJ5X2RfX3doZXJlWGRfbmVxWGFYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGNoKF9fLmFzKCJhIikuaGFzKCJuYW1lIiwgIkdhcmNpYSIpLCBfXy5hcygiYSIpLmluXygid3JpdHRlbkJ5IikuYXMoImIiKSwgX18uYXMoImIiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYyIpLCBfXy5hcygiYyIpLm91dCgid3JpdHRlbkJ5IikuYXMoImQiKSwgX18ud2hlcmUoImQiLCBQLm5lcSgiYSIpKSkgfV0sIAorICAgIGdfVl9tYXRjaFhhX291dFhrbm93c1hfbmFtZV9iWF9pZGVudGl0eTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWF0Y2goX18uYXMoImEiKS5vdXQoImtub3dzIikudmFsdWVzKCJuYW1lIikuYXMoImIiKSkuaWRlbnRpdHkoKSB9XSwgCisgICAgZ19WX291dEVfbWF0aFgwX21pbnVzX2l0WF9ieVh3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkubWF0aCgiMC1fIikuYnkoIndlaWdodCIpIH1dLCAKKyAgICBnX1ZfaGFzWGFnZVhfdmFsdWVNYXBfbWF0aFhpdF9wbHVzX2l0WGJ5WHNlbGVjdFhhZ2VYX3VuZm9sZFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnZhbHVlTWFwKCkubWF0aCgiXytfIikuYnkoX18uc2VsZWN0KCJhZ2UiKS51bmZvbGQoKSkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX21hdGhYYV9wbHVzX2JYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikubWF0aCgiYSArIGIiKS5ieSgiYWdlIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYeF8xMDBYX1ZfYWdlX21hdGhYX19wbHVzX3hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJ4IiwgMTAwKS5WKCkudmFsdWVzKCJhZ2UiKS5tYXRoKCJfICsgeCIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX21hdGhYYl9wbHVzX2FYX2J5WGluWGNyZWF0ZWRYX2NvdW50WF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIikubWF0aCgiYiArIGEiKS5ieShfXy5pbl8oImNyZWF0ZWQiKS5jb3VudCgpKS5ieSgiYWdlIikgfV0sIAorICAgIGdfd2l0aFNhY2tYMVhfaW5qZWN0WDFYX3JlcGVhdFhzYWNrWHN1bVhfYnlYY29uc3RhbnRYMVhYWF90aW1lc1g1WF9lbWl0X21hdGhYc2luX19YX2J5WHNhY2tYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KF9fLmNvbnN0YW50KDEpKSkudGltZXMoNSkuZW1pdCgpLm1hdGgoInNpbiBfIikuYnkoX18uc2FjaygpKSB9XSwgCisgICAgZ19WX3Byb2plY3RYYV9iX2NYX2J5WGJvdGhFX3dlaWdodF9zdW1YX2J5WGJvdGhFX2NvdW50WF9ieVhuYW1lWF9vcmRlcl9ieVhtYXRoWGFfZGl2X2JYX2Rlc2NYX3NlbGVjdFhjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucHJvamVjdCgiYSIsICJiIiwgImMiKS5ieShfXy5ib3RoRSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYnkoIm5hbWUiKS5vcmRlcigpLmJ5KF9fLm1hdGgoImEgLyBiIiksIE9yZGVyLmRlc2MpLnNlbGVjdCgiYyIpIH1dLCAKKyAgICBnX1ZfbWF0aFhpdF9wbHVzX2l0WGJ5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm1hdGgoIl8rXyIpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwX21hdGhYaXRfcGx1c19pdFhieVhzZWxlY3RYYWdlWF91bmZvbGRYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5tYXRoKCJfK18iKS5ieShfXy5zZWxlY3QoImFnZSIpLnVuZm9sZCgpKSB9XSwgCisgICAgZ19WWDFYX291dEVfYXNYZXhwZWN0ZWRXZWlnaHRYX21hdGhYZXhwZWN0ZWRXZWlnaHRQbHVzT25lWGJ5WHdlaWdodFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkuYXMoImV4cGVjdGVkV2VpZ2h0IikubWF0aCgiZXhwZWN0ZWRXZWlnaHQgKyAxIikuYnkoIndlaWdodCIpIH1dLCAKKyAgICBnX1ZfYWdlX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5tYXgoKSB9XSwgCisgICAgZ19WX2Zvb19tYXg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikubWF4KCkgfV0sIAorICAgIGdfVl9uYW1lX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikubWF4KCkgfV0sIAorICAgIGdfVl9hZ2VfZm9sZF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21heFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLm1heChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWF4OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21heFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLm1heChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21heDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWF4OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1heCgpIH1dLCAKKyAgICBnX1ZfZm9vX2ZvbGRfbWF4WGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX25hbWVfZm9sZF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWF4OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoImFnZSIpLm1heCgpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tYXhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18uYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm1heCgpKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX21heFhsb2NhbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLm1heChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9tYXhYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoImFnZSIpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKSkuZm9sZCgpKS5tYXgoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfYWdlX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikubWVhbigpIH1dLCAKKyAgICBnX1ZfZm9vX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikubWVhbigpIH1dLCAKKyAgICBnX1ZfYWdlX2ZvbGRfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfZm9vX2ZvbGRfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tZWFuWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuZ3JvdXAoKS5ieSgibmFtZSIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5tZWFuKCkpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWVhbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1lYW4oKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikudW5mb2xkKCkubWVhbigpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfbWVhblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5tZWFuKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWVhbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1lYW4oKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikudW5mb2xkKCkubWVhbigpIH1dLCAKKyAgICBnX2luamVjdFhudWxsXzEwXzIwX251bGxYX21lYW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsIDEwLCAyMCwgbnVsbCkubWVhbigpIH1dLCAKKyAgICBnX2luamVjdFhsaXN0WG51bGxfMTBfMjBfbnVsbFhYX21lYW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbbnVsbCwgMTAsIDIwLCBudWxsXSkubWVhbihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikubWVhbihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9tZWFuWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKCJhZ2UiKSwgX18ub3V0RSgpLnZhbHVlcygid2VpZ2h0IikpLmZvbGQoKSkubWVhbihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxYX21lcmdlWGluamVjdFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLm1lcmdlKF9fLmluamVjdCgxKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfbWVyZ2VYVl9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikubWVyZ2UoX18uVigpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9mb2xkX21lcmdlWGNvbnN0YW50WG51bGxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KG51bGwpKSB9XSwgCisgICAgZ19WX2ZvbGRfbWVyZ2VYVlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkpIH1dLCAKKyAgICBnX1ZfZWxlbWVudE1hcF9tZXJnZVhjb25zdGFudFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmVsZW1lbnRNYXAoKS5tZXJnZShfXy5jb25zdGFudCgiYSIpKSB9XSwgCisgICAgZ19WX2ZvbGRfbWVyZ2VYVl9hc1hhWF9wcm9qZWN0WGFYX2J5WG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm1lcmdlKF9fLlYoKS5hcygiYSIpLnByb2plY3QoImEiKS5ieSgibmFtZSIpKSB9XSwgCisgICAgZ19WX2ZvbGRfbWVyZ2VYa192WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm1lcmdlKG5ldyBNYXAoW1siayIsICJ2Il1dKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9tZXJnZVgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLm1lcmdlKDIpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfbWVyZ2VYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5tZXJnZShudWxsKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9tZXJnZVhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX21lcmdlWFZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoIm5vbmV4aXN0YW50IikuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfbWVyZ2VYVl92YWx1ZXNYYWdlWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcygiYWdlIikuZm9sZCgpKSB9XSwgCisgICAgZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9tZXJnZVhNQVJLT1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoIm5hbWUiKS50b1VwcGVyKCkpLm1lcmdlKFsiTUFSS08iXSkgfV0sIAorICAgIGdfaW5qZWN0WG1hcmtvWF9tZXJnZVhWX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJtYXJrbyJdKS5tZXJnZShfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfbWVyZ2VYc2VhdHRsZV92YW5jb3V2ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkubWVyZ2UoWyJzZWF0dGxlIiwgInZhbmNvdXZlciJdKSB9XSwgCisgICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9tZXJnZVhlbXB0eV9saXN0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikubWVyZ2UoW10pIH1dLCAKKyAgICBnX1ZfdmFsdWVzWGFnZVhfZm9sZF9tZXJnZVhjb25zdGFudFgyN1hfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX21lcmdlWGRhdmVfa2VsdmluWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikubWVyZ2UoWyJkYXZlIiwgImtlbHZpbiJdKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX21lcmdlWGFfY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsIG51bGwsICJiIl0pLm1lcmdlKFsiYSIsICJjIl0pIH1dLCAKKyAgICBnX2luamVjdFhhX251bGxfYlhfbWVyZ2VYYV9udWxsX2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCBudWxsLCAiYiJdKS5tZXJnZShbImEiLCBudWxsLCAiYyJdKSB9XSwgCisgICAgZ19pbmplY3RYM190aHJlZVhfbWVyZ2VYZml2ZV90aHJlZV83WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzMsICJ0aHJlZSJdKS5tZXJnZShbImZpdmUiLCAidGhyZWUiLCA3XSkgfV0sIAorICAgIGdfVl9hc1huYW1lWF9wcm9qZWN0WG5hbWVYX2J5WG5hbWVYX21lcmdlWG90aGVyX2JsdWVwcmludFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJuYW1lIikucHJvamVjdCgibmFtZSIpLmJ5KCJuYW1lIikubWVyZ2UobmV3IE1hcChbWyJvdGhlciIsICJibHVlcHJpbnQiXV0pKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWF9lbGVtZW50TWFwX21lcmdlWFZfaGFzWG5hbWVfbG9wWF9lbGVtZW50TWFwWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuZWxlbWVudE1hcCgpLm1lcmdlKF9fLlYoKS5oYXMoIm5hbWUiLCAibG9wIikuZWxlbWVudE1hcCgpKSB9XSwgCisgICAgZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9lbXB0eVg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkRSgic2VsZiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkucHJvcGVydGllcygpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19WX21lcmdlRVhsYWJlbF9zZWxmWF9vcHRpb25Yb25NYXRjaF9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRFKCJzZWxmIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfVl9tZXJnZUVYZW1wdHlYX29wdGlvblhvbkNyZWF0ZV9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoInYiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KCJ2IikpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF9vcHRpb25Yb25DcmVhdGVfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUobmV3IE1hcChbW1QubGFiZWwsICJzZWxmIl0sIFtEaXJlY3Rpb24uT1VULCBNZXJnZS5vdXRWXSwgW0RpcmVjdGlvbi5JTiwgTWVyZ2UuaW5WXV0pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoInYiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KCJ2IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19tZXJnZUVYZW1wdHlYX2V4aXN0czogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkRSgic2VsZiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZUUobmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19tZXJnZUVYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VFKG5ldyBNYXAoW10pKSB9XSwgCisgICAgZ19WX21lcmdlRVhlbXB0eVhfdHdvX2V4aXN0OiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJ2IikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgidiIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX1ZfbWVyZ2VFX2lubGluZVhlbXB0eVhfdHdvX2V4aXN0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLm1lcmdlRShuZXcgTWFwKFtbVC5sYWJlbCwgInNlbGYiXSwgW0RpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFZdLCBbRGlyZWN0aW9uLklOLCBNZXJnZS5pblZdXSkpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoInYiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KCJ2IikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19tZXJnZUVYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZUUobnVsbCkgfV0sIAorICAgIGdfbWVyZ2VFWG51bGx2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpIH1dLCAKKyAgICBnX1ZfbGltaXRYMVhfbWVyZ2VFWG51bGx2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5saW1pdCgxKS5tZXJnZUUoeHgxKSB9XSwgCisgICAgZ19WX21lcmdlRVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZUUobnVsbCkgfV0sIAorICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUVYc2VsZWN0WGFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlRShfXy5zZWxlY3QoImEiKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvMV9pbl92YWRhczFYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzX3dlaWdodF8wNVhfZXhpc3RzOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm91dEUoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAwLjUpLmluVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc193ZWlnaHRfMDVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkgfV0sIAorICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfV0sIAorICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHM6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIk4iKSB9XSwgCisgICAgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH1dLCAKKyAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvX1hfbWVyZ2VFWGxhYmVsX2tub3dzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIk4iKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX2luamVjdFgxWF9zZWxlY3RYbVhfbWVyZ2VFOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLnNlbGVjdCgibSIpLm1lcmdlRSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLmluVigpLmhhcygibmFtZSIsICJ2YWRhcyIpIH1dLCAKKyAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJOIikub3V0VigpLmhhcygibmFtZSIsICJ2YWRhcyIpIH1dLCAKKyAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWRfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSB9XSwgCisgICAgZ19tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX2Vycm9yOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpLmFkZEUoImtub3dzIikuZnJvbV8oImIiKS50bygiYSIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLm91dFYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikuYWRkRSgia25vd3MiKS5mcm9tXygiYiIpLnRvKCJhIikucHJvcGVydHkoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFWG91dF92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZF9keW5hbWljX292ZXJyaWRlX3NrZXRjaGlseV9hbGxvd2VkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJjcmVhdGVkIiwgIlkiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJiIikudG8oImEiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgic2lkZUVmZmVjdDEiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIlkiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDN9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLm91dFYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9zZWxmX291dF92YWRhczFfaW5fdmFkYXMxWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLm1lcmdlRSh4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJzZWxmIikuYm90aFYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhjX2NyZWF0ZWRfWVhfd2l0aFNpZGVFZmZlY3RYbV9tYXRjaGVkWF9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhYX2V4aXN0czogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJZIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygiY3JlYXRlZCIsICJOIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya28xX2luX3ZhZGFzMVhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH1dLCAKKyAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX2FsaWFzZWRfZGlyZWN0aW9uOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhtMV9sYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfbTJfbGFiZWxfc2VsZl9vdXRfdmFkYXNfaW5fdmFkYXNYX3VuaW9uWHNlbGVjdFhtMVhfc2VsZWN0WG0yWFhfbWVyZ2VFOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcudW5pb24oX18uc2VsZWN0KCJtMSIpLCBfXy5zZWxlY3QoIm0yIikpLm1lcmdlRSgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJ2YWRhcyIpLm91dCgic2VsZiIpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhjX2NyZWF0ZWRfWVhfd2l0aFNpZGVFZmZlY3RYbV9tYXRjaGVkWF9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zaWRlRWZmZWN0WHByb3BlcnRpZXNYd2VpZ2h0WF9kcm9wWF9zZWxlY3RYbVhYX2V4aXN0czogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcygid2VpZ2h0IikuZHJvcCgpKS5zZWxlY3QoIm0iKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiWSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoIndlaWdodCIpIH1dLCAKKyAgICBnX21lcmdlRV93aXRoX291dFZpblZfb3B0aW9uc19tYXA6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgyKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDMpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19tYXA6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRShuZXcgTWFwKFtbRGlyZWN0aW9uLk9VVCwgTWVyZ2Uub3V0Vl0sIFtEaXJlY3Rpb24uSU4sIE1lcmdlLmluVl0sIFtULmxhYmVsLCAia25vd3MiXV0pKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgxKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19tZXJnZUVfd2l0aF9vdXRWaW5WX29wdGlvbnNfc2VsZWN0OiBbZnVuY3Rpb24oe2csIHh4MSwgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoIngiKS5WKHZpZDIpLmFzKCJ5IikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdCgieCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoInkiKSkgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19zZWxlY3Q6IFtmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJ4IikuVih2aWQyKS5hcygieSIpLm1lcmdlRShuZXcgTWFwKFtbRGlyZWN0aW9uLk9VVCwgTWVyZ2Uub3V0Vl0sIFtEaXJlY3Rpb24uSU4sIE1lcmdlLmluVl0sIFtULmxhYmVsLCAia25vd3MiXV0pKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJ4IikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgieSIpKSB9LCBmdW5jdGlvbih7ZywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB2aWQyLCB2aWQxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCJrbm93cyIpLmhhcygibmFtZSIsICJ2YWRhcyIpIH1dLCAKKyAgICBnX21lcmdlRV93aXRoX2VpZF9zcGVjaWZpZWRfYW5kX2luaGVyaXRhbmNlXzE6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoIjIwMSIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19tZXJnZUVfd2l0aF9laWRfc3BlY2lmaWVkX2FuZF9pbmhlcml0YW5jZV8yOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5FKCIyMDEiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfbWVyZ2VFX291dFZfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0X3dpdGhTaWRlRWZmZWN0X21lcmdlRV9vdXRWX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgic2lkZUVmZmVjdDEiKSkgfV0sIAorICAgIGdfbWVyZ2VFX2luVl9vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFX2luVl9keW5hbWljX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoInNpZGVFZmZlY3QxIikpIH1dLCAKKyAgICBnX21lcmdlRV9sYWJlbF9vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfV0sIAorICAgIGdfbWVyZ2VFX2xhYmVsX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgic2lkZUVmZmVjdDEiKSkgfV0sIAorICAgIGdfbWVyZ2VFX2lkX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVfaWRfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KCJzaWRlRWZmZWN0MSIpKSB9XSwgCisgICAgZ19tZXJnZVZfbWVyZ2VFX2NvbWJpbmF0aW9uX25ld192ZXJ0aWNlczogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5hcygib3V0ViIpLm1lcmdlVih4eDIpLmFzKCJpblYiKS5tZXJnZUUoeHgzKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJvdXRWIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgiaW5WIikpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgia25vd3MiKS5oYXMoIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ19tZXJnZVZfbWVyZ2VFX2NvbWJpbmF0aW9uX2V4aXN0aW5nX3ZlcnRpY2VzOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkuYXMoIm91dFYiKS5tZXJnZVYoeHgyKS5hcygiaW5WIikubWVyZ2VFKHh4Mykub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdCgib3V0ViIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoImluViIpKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDMsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4MywgeHgyfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgzLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfVl9hc1h2WF9tZXJnZUVYeHgxWF9vcHRpb25YTWVyZ2Vfb25NYXRjaF94eDJYX29wdGlvblhNZXJnZV9vdXRWX3NlbGVjdFh2WFhfb3B0aW9uWE1lcmdlX2luVl9zZWxlY3RYdlhYOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KCJ2IikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdCgidiIpKSB9XSwgCisgICAgZ19WX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydHlYd2VpZ2h0XzBYWF9jb25zdGFudFhlbXB0eVhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KCJ3ZWlnaHQiLCAwKSkuY29uc3RhbnQobmV3IE1hcChbXSkpKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuRSgpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoIndlaWdodCIsIDApIH1dLCAKKyAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydHlYd2VpZ2h0XzBYWF9jb25zdGFudFhlbXB0eVhYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxKS5mcm9tXygiYSIpLnRvKCJiIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoIndlaWdodCIsIDApKS5jb25zdGFudChuZXcgTWFwKFtdKSkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJ3ZWlnaHQiLCAwKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJ3ZWlnaHQiKSB9XSwgCisgICAgZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19tYXRjaDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAibG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAicmlwcGxlIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLnVuaW9uKF9fLnNlbGVjdCgibWFwIiksIF9fLnNlbGVjdCgibWFwIiksIF9fLmNvbnN0YW50KG5ldyBNYXAoW1siY3JlYXRlZCIsICJOIl1dKSkpLmZvbGQoKS5hcygibSIpLm1lcmdlRShfXy5zZWxlY3QoIm0iKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KCJtIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KCJtIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLmhhcygiY3JlYXRlZCIsICJOIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikub3V0RSgia25vd3MiKS5oYXMoImNyZWF0ZWQiLCAiTiIpLmluVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9XSwgCisgICAgZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19jcmVhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy51bmlvbihfXy5zZWxlY3QoIm1hcCIpLCBfXy5zZWxlY3QoIm1hcCIpLCBfXy5jb25zdGFudChuZXcgTWFwKFtbImNyZWF0ZWQiLCAiTiJdXSkpKS5mb2xkKCkuYXMoIm0iKS5tZXJnZUUoX18uc2VsZWN0KCJtIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgibSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5oYXNOb3QoImNyZWF0ZWQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5vdXRFKCJrbm93cyIpLmhhc05vdCgiY3JlYXRlZCIpLmluVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAidmFkYXMiKS5vdXRFKCJzZWxmIikuaGFzTm90KCJ3ZWlnaHQiKS5pblYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikgfV0sIAorICAgIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfd2VpZ2h0X251bGxYX2FsbG93ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLkUoKS5oYXNMYWJlbCgia25vd3MiKS5oYXMoIndlaWdodCIsIG51bGwpIH1dLCAKKyAgICBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3dlaWdodF9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJrbm93cyIpLmhhcygid2VpZ2h0IikgfV0sIAorICAgIGdfbWVyZ2VWWGVtcHR5WF9vcHRpb25Yb25NYXRjaF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMjkpIH1dLCAKKyAgICBnX1ZfbWVyZ2VWWGVtcHR5WF9vcHRpb25Yb25NYXRjaF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDI5KSB9XSwgCisgICAgZ19tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkgfV0sIAorICAgIGdfVl9tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1lcmdlVih4eDEpIH1dLCAKKyAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbnVsbFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAorICAgIGdfVl9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX251bGxYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSB9XSwgCisgICAgZ19tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2VtcHR5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihudWxsKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX1ZfbWVyZ2VWWG51bGxYX29wdGlvblhvbkNyZWF0ZV9lbXB0eVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfbWVyZ2VWWGVtcHR5WF9ub19leGlzdGluZzogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfaW5qZWN0WDBYX21lcmdlVlhlbXB0eVhfbm9fZXhpc3Rpbmc6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVihuZXcgTWFwKFtdKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19tZXJnZVZYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDI5KSB9XSwgCisgICAgZ19WX21lcmdlVlhlbXB0eVhfdHdvX2V4aXN0OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYobmV3IE1hcChbXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInZhZGFzIikuaGFzKCJhZ2UiLCAyNykgfV0sIAorICAgIGdfbWVyZ2VWWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG51bGwpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfbWVyZ2VWWG51bGx2YXJYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19WX21lcmdlVlhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5tZXJnZVYobnVsbCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpIH1dLCAKKyAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9XSwgCisgICAgZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9vcHRpb246IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5oYXMoImFnZSIsIDE5KSB9XSwgCisgICAgZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV8xOVhfb3B0aW9uOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAxOSkgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF93aXRoU2lkZUVmZmVjdFhtX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYoX18uc2VsZWN0KCJjIikpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikuaGFzKCJhZ2UiLCAxOSkgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfb3B0aW9uOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMTkpIH1dLCAKKyAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfcHJvcGVydHlYbmFtZV92YWRhc19hY2xfcHVibGljWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIsICJhY2wiLCAicHVibGljIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXNWYWx1ZSgidmFkYXMiKS5oYXMoImFjbCIsICJwdWJsaWMiKSB9XSwgCisgICAgZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdCgwKS5tZXJnZVYoeHgxKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfV0sIAorICAgIGdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikgfV0sIAorICAgIGdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbjogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5oYXMoImFnZSIsIDE5KSB9XSwgCisgICAgZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbjogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDE5KSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX3dpdGhTaWRlRWZmZWN0WG1fbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX2luamVjdFgwWF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpLmhhcygiYWdlIiwgMTkpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9pbmplY3RYMFhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMTkpIH1dLCAKKyAgICBnX2luamVjdFgwWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3Byb3BlcnR5WG5hbWVfdmFkYXNfYWNsX3B1YmxpY1g6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KDApLm1lcmdlVih4eDEpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIiwgImFjbCIsICJwdWJsaWMiKSB9LCBmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKCkucHJvcGVydGllcygibmFtZSIpLmhhc1ZhbHVlKCJ2YWRhcyIpLmhhcygiYWNsIiwgInB1YmxpYyIpIH1dLCAKKyAgICBnX2luamVjdFhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9tZXJnZVZYaWRlbnRpdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJtYXJrbyJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJzdGVwaGVuIl1dKSkubWVyZ2VWKF9fLmlkZW50aXR5KCkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19pbmplY3RYbGFiZWxfcGVyc29uX25hbWVfbWFya29fbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfbWVyZ2VWOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJtYXJrbyJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCAicGVyc29uIl0sIFsibmFtZSIsICJzdGVwaGVuIl1dKSkubWVyZ2VWKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhsaXN0X25hbWVfc3RldmVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgIm5hbWUiLCAic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJuYW1lIiwgInN0ZXZlIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCJuYW1lIikuaGFzVmFsdWUoInN0ZXZlIikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiKS5oYXNWYWx1ZSgic3RlcGhlbiIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCJuYW1lIikgfV0sIAorICAgIGdfbWVyZ2VYbGFiZWxfcGVyc29uX25hbWVfdmFkYXNYX29wdGlvblhvbk1hdGNoX2FnZV8zNVg6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI5KS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIDM1KSB9LCBmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ19WX21hcFhtZXJnZVhsYWJlbF9wZXJzb25fbmFtZV9qb3NoWFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KCJhZ2UiLCAyNykgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLm1hcChfXy5tZXJnZVYoeHgxKSkgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiam9zaCIpIH0sIGZ1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF93aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKF9fLnNlbGVjdCgiYyIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKCJhZ2UiKS5kcm9wKCkpLnNlbGVjdCgibSIpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDE5KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb246IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoImFnZSIpLmRyb3AoKSkuc2VsZWN0KCJtIikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMTkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoImFnZSIpIH1dLCAKKyAgICBnX21lcmdlVl9vbkNyZWF0ZV9pbmhlcml0YW5jZV9leGlzdGluZzogW2Z1bmN0aW9uKHtnLCB4eDEsIHh4Mn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWlrZSIpLnByb3BlcnR5KFQuaWQsICIxIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCIxIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIikgfV0sIAorICAgIGdfbWVyZ2VWX29uQ3JlYXRlX2luaGVyaXRhbmNlX25ld18xOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCIxIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIikgfV0sIAorICAgIGdfbWVyZ2VWX29uQ3JlYXRlX2luaGVyaXRhbmNlX25ld18yOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5WKCIxIikuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtaWtlIikgfV0sIAorICAgIGdfbWVyZ2VWX2xhYmVsX292ZXJyaWRlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxLCB4eDJ9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdF9tZXJnZVZfbGFiZWxfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoInNpZGVFZmZlY3QxIikpIH1dLCAKKyAgICBnX21lcmdlVl9pZF9vdmVycmlkZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MSwgeHgyfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikgfV0sIAorICAgIGdfbWVyZ2VWX2hpZGRlbl9pZF9rZXlfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVih4eDEpIH1dLCAKKyAgICBnX21lcmdlVl9oaWRkZW5fbGFiZWxfa2V5X3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKSB9XSwgCisgICAgZ19tZXJnZVZfaGlkZGVuX2xhYmVsX3ZhbHVlX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYoeHgxKSB9XSwgCisgICAgZ19tZXJnZVZfaGlkZGVuX2lkX2tleV9vbkNyZWF0ZV9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkgfV0sIAorICAgIGdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25DcmVhdGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIH1dLCAKKyAgICBnX21lcmdlVl9oaWRkZW5fbGFiZWxfdmFsdWVfb25DcmVhdGVfcHJvaGliaXRlZDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIH1dLCAKKyAgICBnX21lcmdlVl9oaWRkZW5faWRfa2V5X29uTWF0Y2hfbWF0Y2hlZF9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigidmVydGV4IikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSB9XSwgCisgICAgZ19tZXJnZVZfaGlkZGVuX2xhYmVsX2tleV9tYXRjaGVkX29uTWF0Y2hfbWF0Y2hlZF9wcm9oaWJpdGVkOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuYWRkVigidmVydGV4IikgfSwgZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX2xpc3RYMzNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgIm1hcmtvIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1siYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5saXN0KDMzKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAzMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlX3NldFgzM1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtbIm5hbWUiLCAibWFya28iXV0pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbWyJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLnNldCgzMyldXSkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMzMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiYWdlIikgfV0sIAorICAgIGdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV9zZXRYMzFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgIm1hcmtvIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1siYWdlIiwgQ2FyZGluYWxpdHlWYWx1ZS5zZXQoMzEpXV0pKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIsIDMxKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImFnZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoImFnZSIpIH1dLCAKKyAgICBnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2luZ2xlWDMzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2luZ2xlKDMzKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCAzMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzMzX3NpbmdsZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbImFnZSIsIDMzXV0pLCBDYXJkaW5hbGl0eS5zaW5nbGUpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIiwgMzMpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmhhcygiYWdlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikucHJvcGVydGllcygiYWdlIikgfV0sIAorICAgIGdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX25hbWVfYWxsZW5fYWdlX3NldFgzMVhfc2luZ2xlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMzIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgIm1hcmtvIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1sibmFtZSIsICJhbGxlbiJdLCBbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2V0KDMxKV1dKSwgQ2FyZGluYWxpdHkuc2luZ2xlKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5oYXMoImFnZSIsIDMxKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5oYXMoImFnZSIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGxlbiIpLnByb3BlcnRpZXMoImFnZSIpIH1dLCAKKyAgICBnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9uYW1lX2FsbGVuX2FnZV9zaW5nbGVYMzFYX3NpbmdsZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCAiYWdlIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsICJhZ2UiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgImFnZSIsIDMyKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcubWVyZ2VWKG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbIm5hbWUiLCAiYWxsZW4iXSwgWyJhZ2UiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSgzMSldXSksIENhcmRpbmFsaXR5LnNpbmdsZSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuaGFzKCJhZ2UiLCAzMykgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuaGFzKCJhZ2UiLCAzMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsbGVuIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxsZW4iKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV9zaW5nbGVYODFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgImFsaWNlIl0sIFtULmxhYmVsLCAicGVyc29uIl1dKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBuZXcgTWFwKFtbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2luZ2xlKDgxKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiLCA4MSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV9zZXRYODFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgImFsaWNlIl0sIFtULmxhYmVsLCAicGVyc29uIl1dKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBuZXcgTWFwKFtbImFnZSIsIENhcmRpbmFsaXR5VmFsdWUuc2V0KDgxKV1dKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiLCA4MSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV84MV9zZXRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLm1lcmdlVihuZXcgTWFwKFtbIm5hbWUiLCAiYWxpY2UiXSwgW1QubGFiZWwsICJwZXJzb24iXV0pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBNYXAoW1siYWdlIiwgODFdXSksIENhcmRpbmFsaXR5LnNldCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiLCA4MSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikuaGFzKCJhZ2UiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAiYWxpY2UiKS5wcm9wZXJ0aWVzKCJhZ2UiKSB9XSwgCisgICAgZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV84MV9sYWJlbF9wZXJzb25fc2V0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbWyJuYW1lIiwgImFsaWNlIl1dKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBuZXcgTWFwKFtbImFnZSIsIDgxXSwgW1QubGFiZWwsICJwZXJzb24iXV0pLCBDYXJkaW5hbGl0eS5zZXQpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiYWdlIiwgODEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJhbGljZSIpLmhhcygiYWdlIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgImFsaWNlIikucHJvcGVydGllcygiYWdlIikgfV0sIAorICAgIGdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25NYXRjaF9tYXRjaGVkX3Byb2hpYml0ZWQ6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIH1dLCAKKyAgICBnX2luamVjdFhsaXN0MV9saXN0Ml9saXN0M1hfZm9sZF9hc1htWF9tZXJnZVZYc2VsZWN0WG1YX2xpbWl0WGxvY2FsXzFYX3VuZm9sZFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YX3RhaWxYbG9jYWxYX3VuZm9sZFhfdG9fbWF0Y2g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXSwgWyJuYW1lIiwgIm1hcmtvIl1dKSwgbmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXSwgWyJuYW1lIiwgIm1hcmtvIl1dKSwgbmV3IE1hcChbWyJjcmVhdGVkIiwgIk4iXV0pKS5mb2xkKCkuYXMoIm0iKS5tZXJnZVYoX18uc2VsZWN0KCJtIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgibSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5oYXMoImNyZWF0ZWQiLCAiTiIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfaW5qZWN0WGxpc3QxX2xpc3QyX2xpc3QzWF9mb2xkX2FzWG1YX21lcmdlVlhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19jcmVhdGU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXSwgWyJuYW1lIiwgInN0ZXBoZW4iXV0pLCBuZXcgTWFwKFtbVC5sYWJlbCwgInBlcnNvbiJdLCBbIm5hbWUiLCAic3RlcGhlbiJdXSksIG5ldyBNYXAoW1siY3JlYXRlZCIsICJOIl1dKSkuZm9sZCgpLmFzKCJtIikubWVyZ2VWKF9fLnNlbGVjdCgibSIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoIm0iKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoIm0iKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKS5oYXNOb3QoImNyZWF0ZWQiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH1dLCAKKyAgICBnX1ZfYWdlX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5taW4oKSB9XSwgCisgICAgZ19WX2Zvb19taW46IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikubWluKCkgfV0sIAorICAgIGdfVl9uYW1lX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikubWluKCkgfV0sIAorICAgIGdfVl9hZ2VfZm9sZF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21pblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLm1pbihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21pblhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLm1pbihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21pbjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpIH1dLCAKKyAgICBnX1ZfZm9vX2ZvbGRfbWluWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX25hbWVfZm9sZF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoImFnZSIpLm1pbigpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9taW5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18uYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm1pbigpKSB9XSwgCisgICAgZ19WX2Zvb19pbmplY3RYOTk5OTk5OTk5OVhfbWluOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLmluamVjdCg5OTk5OTk5OTk5KS5taW4oKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX21pblhsb2NhbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLm1pbihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9taW5YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoImFnZSIpLCBfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKSkuZm9sZCgpKS5taW4oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfbmFtZV9vcmRlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WG5hbWVfYXNjWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuYXNjKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WG5hbWVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX291dEVfb3JkZXJfYnlYd2VpZ2h0X2Rlc2NYX3dlaWdodDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoIndlaWdodCIsIE9yZGVyLmRlc2MpLnZhbHVlcygid2VpZ2h0IikgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfb3JkZXJfYnlYc2h1ZmZsZVhfc2VsZWN0WGFfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNlbGVjdCgiYSIsICJiIikgfV0sIAorICAgIGdfVl9ib3RoX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlX2Rlc2NYX2xpbWl0WDVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5oYXNMYWJlbCgicGVyc29uIikub3JkZXIoKS5ieSgiYWdlIiwgT3JkZXIuZGVzYykubGltaXQoNSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX29yZGVyX2J5WGtleV9kZXNjWF9rZXk6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQua2V5LCBPcmRlci5kZXNjKS5rZXkoKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfZ3JvdXBfYnlYbmFtZVhfYnlYb3V0RV93ZWlnaHRfc3VtWF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieShfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMpIH1dLCAKKyAgICBnX1ZfbWFwWGJvdGhFX3dlaWdodF9mb2xkWF9vcmRlcl9ieVhzdW1YbG9jYWxYX2Rlc2NYX2J5WGNvdW50WGxvY2FsWF9kZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubWFwKF9fLmJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKS5vcmRlcigpLmJ5KF9fLnN1bShTY29wZS5sb2NhbCksIE9yZGVyLmRlc2MpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykgfV0sIAorICAgIGdfVl9ncm91cF9ieVhsYWJlbFhfYnlYbmFtZV9vcmRlcl9ieVhkZXNjWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfdW5mb2xkX29yZGVyX2J5WHZhbHVlc19kZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieShfXy5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkudW5mb2xkKCkub3JkZXIoKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKSB9XSwgCisgICAgZ19WX2FzWHZYX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfc3VtWGxvY2FsWF9hc1hzWF9zZWxlY3RYdl9zWF9vcmRlcl9ieVhzZWxlY3RYc1hfZGVzY1hfYnlYc2VsZWN0WHZYX25hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygidiIpLm1hcChfXy5ib3RoRSgpLnZhbHVlcygid2VpZ2h0IikuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpLmFzKCJzIikuc2VsZWN0KCJ2IiwgInMiKS5vcmRlcigpLmJ5KF9fLnNlbGVjdCgicyIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoInYiKS52YWx1ZXMoIm5hbWUiKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbmFtZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYm90aCgpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiLCBPcmRlci5kZXNjKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WG91dEVfY291bnRfZGVzY1hfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoX18ub3V0RSgpLmNvdW50KCksIE9yZGVyLmRlc2MpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ19WX29yZGVyX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoImFnZSIpIH1dLCAKKyAgICBnX1ZfZm9sZF9vcmRlclhsb2NhbFhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVl9mb2xkX29yZGVyWGxvY2FsWF9ieVhhZ2VfZGVzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoImFnZSIsIE9yZGVyLmRlc2MpIH1dLCAKKyAgICBnX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vcihfXy5oYXNMYWJlbCgicGVyc29uIiksIF9fLmhhcygic29mdHdhcmUiLCAibmFtZSIsICJsb3AiKSkub3JkZXIoKS5ieSgiYWdlIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkub3IoX18uaGFzTGFiZWwoInBlcnNvbiIpLCBfXy5oYXMoInNvZnR3YXJlIiwgIm5hbWUiLCAibG9wIikpLm9yZGVyKCkuYnkoImFnZSIpIH1dLCAKKyAgICBnX1ZfaGFzWHNvbmdfbmFtZV9PSEJPWVhfb3V0WGZvbGxvd2VkQnlYX291dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX2J5WHNvbmdUeXBlX2Rlc2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInNvbmciLCAibmFtZSIsICJPSCBCT1kiKS5vdXQoImZvbGxvd2VkQnkiKS5vdXQoImZvbGxvd2VkQnkiKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiKS5ieSgic29uZ1R5cGUiLCBPcmRlci5kZXNjKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29uZ1hfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2J5WG5hbWVYX3JhbmdlWDExMF8xMjBYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb25nIikub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIiwgT3JkZXIuZGVzYykuYnkoIm5hbWUiKS5yYW5nZSgxMTAsIDEyMCkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVlgxWF9lbGVtZW50TWFwX29yZGVyWGxvY2FsWF9ieVhrZXlzX2Rlc2NYdW5mb2xkOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuZGVzYykudW5mb2xkKCkgfV0sIAorICAgIGdfVlgxWF9lbGVtZW50TWFwX29yZGVyWGxvY2FsWF9ieVhrZXlzX2FzY1h1bmZvbGQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5hc2MpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZYMVhfdmFsdWVzWGFnZVhfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9wYWdlUmFua19oYXNYcGFnZVJhbmtYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wYWdlUmFuaygpLmhhcygiZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmsiKSB9XSwgCisgICAgZ19WX291dFhjcmVhdGVkWF9wYWdlUmFua193aXRoWGVkZ2VzX2JvdGhFWF93aXRoWHByb3BlcnR5TmFtZV9wcm9qZWN0UmFua1hfd2l0aFh0aW1lc18wWF92YWx1ZU1hcFhuYW1lX3Byb2plY3RSYW5rWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikucGFnZVJhbmsoKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlcyIsIF9fLmJvdGhFKCkpLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSIsICJwcm9qZWN0UmFuayIpLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzIiwgMCkudmFsdWVNYXAoIm5hbWUiLCAicHJvamVjdFJhbmsiKSB9XSwgCisgICAgZ19WX3BhZ2VSYW5rX29yZGVyX2J5WHBhZ2VSYW5rX2Rlc2NYX2J5WG5hbWVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieSgiZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmsiLCBPcmRlci5kZXNjKS5ieSgibmFtZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfcGFnZVJhbmtfb3JkZXJfYnlYcGFnZVJhbmtfZGVzY1hfbmFtZV9saW1pdFgyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucGFnZVJhbmsoKS5vcmRlcigpLmJ5KCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFuayIsIE9yZGVyLmRlc2MpLnZhbHVlcygibmFtZSIpLmxpbWl0KDIpIH1dLCAKKyAgICBnX1ZfcGFnZVJhbmtfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfd2l0aFhwcm9wZXJ0eU5hbWVfZnJpZW5kUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYZnJpZW5kUmFua1hfbWF0aFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMiLCBfXy5vdXRFKCJrbm93cyIpKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUiLCAiZnJpZW5kUmFuayIpLnByb2plY3QoIm5hbWUiLCAiZnJpZW5kUmFuayIpLmJ5KCJuYW1lIikuYnkoX18udmFsdWVzKCJmcmllbmRSYW5rIikubWF0aCgiY2VpbChfICogMTAwKSIpKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfcGFnZVJhbmtfd2l0aFhwcm9wZXJ0eU5hbWVfa3BhZ2VSYW5rWF9wcm9qZWN0X2J5WG5hbWVYX2J5WHZhbHVlc1hwYWdlUmFua1hfbWF0aFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5wYWdlUmFuaygpLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSIsICJwYWdlUmFuayIpLnByb2plY3QoIm5hbWUiLCAicGFnZVJhbmsiKS5ieSgibmFtZSIpLmJ5KF9fLnZhbHVlcygicGFnZVJhbmsiKS5tYXRoKCJjZWlsKF8gKiAxMDApIikpIH1dLCAKKyAgICBnX1ZfcGFnZVJhbmtfd2l0aFhwcm9wZXJ0eU5hbWVfcGFnZVJhbmtYX2FzWGFYX291dFhrbm93c1hfcGFnZVJhbmtfYXNYYlhfc2VsZWN0WGFfYlhfYnlfYnlYbWF0aFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lIiwgInBhZ2VSYW5rIikuYXMoImEiKS5vdXQoImtub3dzIikudmFsdWVzKCJwYWdlUmFuayIpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5ieSgpLmJ5KF9fLm1hdGgoImNlaWwoXyAqIDEwMCkiKSkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfaGFzWG5hbWVfcmlwcGxlWF9wYWdlUmFua1gxWF93aXRoWGVkZ2VzX2luRVhjcmVhdGVkWF93aXRoWHRpbWVzXzFYX3dpdGhYcHJvcGVydHlOYW1lX3ByaW9yc1hfaW5YY3JlYXRlZFhfdW5pb25YYm90aF9faWRlbnRpdHlYX3ZhbHVlTWFwWG5hbWVfcHJpb3JzWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuaGFzKCJuYW1lIiwgInJpcHBsZSIpLnBhZ2VSYW5rKDEuMCkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMiLCBfXy5pbkUoImNyZWF0ZWQiKSkud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXMiLCAxKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUiLCAicHJpb3JzIikuaW5fKCJjcmVhdGVkIikudW5pb24oX18uYm90aCgpLCBfXy5pZGVudGl0eSgpKS52YWx1ZU1hcCgibmFtZSIsICJwcmlvcnMiKSB9XSwgCisgICAgZ19WX291dFhjcmVhdGVkWF9ncm91cFhtWF9ieVhsYWJlbFhfcGFnZVJhbmtYMVhfd2l0aFhwcm9wZXJ0eU5hbWVfcGFnZVJhbmtYX3dpdGhYZWRnZXNfaW5FWF93aXRoWHRpbWVzXzFYX2luWGNyZWF0ZWRYX2dyb3VwWG1YX2J5WHBhZ2VSYW5rWF9jYXBYbVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwKCJtIikuYnkoVC5sYWJlbCkucGFnZVJhbmsoMS4wKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUiLCAicGFnZVJhbmsiKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlcyIsIF9fLmluRSgpKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcyIsIDEpLmluXygiY3JlYXRlZCIpLmdyb3VwKCJtIikuYnkoInBhZ2VSYW5rIikuY2FwKCJtIikgfV0sIAorICAgIGdfVlgxWF9uYW1lX3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoIm5hbWUiKS5wYXRoKCkgfV0sIAorICAgIGdfVlgxWF9vdXRfcGF0aF9ieVhhZ2VYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KCJhZ2UiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aF9ieVhpdFhfYnlYbmFtZVhfYnlYbGFuZ1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpLmJ5KCkuYnkoIm5hbWUiKS5ieSgibGFuZyIpIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9oYXNYYWdlXzI5WF9hc1hjWF9wYXRoOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJiIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKS5wYXRoKCkgfV0sIAorICAgIGdfVlgxWF9vdXRFWGNyZWF0ZWRYX2luVl9pbkVfb3V0Vl9wYXRoOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgiY3JlYXRlZCIpLmluVigpLmluRSgpLm91dFYoKS5wYXRoKCkgfV0sIAorICAgIGdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3BhdGhfZnJvbVhiWF90b1hjWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikucGF0aCgpLmZyb21fKCJiIikudG8oImMiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLnBhdGgoKS5ieSgiYWdlIikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoImFnZSIpIH1dLCAKKyAgICBnX2luamVjdFgxX251bGxfbnVsbFhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpIH1dLCAKKyAgICBnX2luamVjdFgxX251bGxfbnVsbFhfcGF0aF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpLmRlZHVwKCkgfV0sIAorICAgIGdfVl9wZWVyUHJlc3N1cmVfaGFzWGNsdXN0ZXJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wZWVyUHJlc3N1cmUoKS5oYXMoImdyZW1saW4ucGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbS5jbHVzdGVyIikgfV0sIAorICAgIGdfVl9wZWVyUHJlc3N1cmVfd2l0aFhwcm9wZXJ0eU5hbWVfY2x1c3Rlclhfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfcGFnZVJhbmtYMVhfYnlYcmFua1hfd2l0aFhlZGdlc19vdXRFWGtub3dzWF93aXRoWHRpbWVzXzJYX2dyb3VwX2J5WGNsdXN0ZXJYX2J5WHJhbmtfc3VtWF9saW1pdFgxMDBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoXygifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lIiwgImNsdXN0ZXIiKS53aXRoXygifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXMiLCBfXy5vdXRFKCJrbm93cyIpKS5wYWdlUmFuaygxLjApLndpdGhfKCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZSIsICJyYW5rIikud2l0aF8oIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMiLCBfXy5vdXRFKCJrbm93cyIpKS53aXRoXygifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcyIsIDEpLmdyb3VwKCkuYnkoImNsdXN0ZXIiKS5ieShfXy52YWx1ZXMoInJhbmsiKS5zdW0oKSkubGltaXQoMTAwKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX3JpcHBsZVhfaW5YY3JlYXRlZFhfcGVlclByZXNzdXJlX3dpdGhYZWRnZXNfb3V0RVhfd2l0aHlYcHJvcGVydHlOYW1lX2NsdXN0ZXJYX3JlcGVhdFh1bmlvblhpZGVudGl0eV9fYm90aFhfdGltZXNYMlhfZGVkdXBfdmFsdWVNYXBYbmFtZV9jbHVzdGVyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgInJpcHBsZSIpLmluXygiY3JlYXRlZCIpLnBlZXJQcmVzc3VyZSgpLndpdGhfKCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlcyIsIF9fLm91dEUoKSkud2l0aF8oIn50aW5rZXJwb3AucGVlclByZXNzdXJlLnByb3BlcnR5TmFtZSIsICJjbHVzdGVyIikucmVwZWF0KF9fLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmJvdGgoKSkpLnRpbWVzKDIpLmRlZHVwKCkudmFsdWVNYXAoIm5hbWUiLCAiY2x1c3RlciIpIH1dLCAKKyAgICBnX2luamVjdFhudWxsWF9wcm9kdWN0WGluamVjdFgxWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLnByb2R1Y3QoX18uaW5qZWN0KDEpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9wcm9kdWN0WFZfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLnByb2R1Y3QoX18uVigpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9mb2xkX3Byb2R1Y3RYY29uc3RhbnRYbnVsbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudChudWxsKSkgfV0sIAorICAgIGdfVl9mb2xkX3Byb2R1Y3RYVlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfZm9sZF9wcm9kdWN0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkucHJvZHVjdCgyKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5wcm9kdWN0KG51bGwpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYbmFtZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibm9uZXhpc3RhbnQiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKCJub25leGlzdGFudCIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9saW1pdFgzWF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhhc2NYX2xpbWl0WDJYX2ZvbGRYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmxpbWl0KDMpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoImFnZSIpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5saW1pdCgyKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX3Byb2R1Y3RYTUFSS09YX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSkucHJvZHVjdChbIk1BUktPIl0pLnVuZm9sZCgpIH1dLCAKKyAgICBnX2luamVjdFhtYXJrb1hfcHJvZHVjdFhWX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsibWFya28iXSkucHJvZHVjdChfXy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9wcm9kdWN0WGR1bGxlc19zZWF0dGxlX3ZhbmNvdXZlclhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibG9jYXRpb24iKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkucHJvZHVjdChbImR1bGxlcyIsICJzZWF0dGxlIiwgInZhbmNvdXZlciJdKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGFzY1hfZm9sZF9wcm9kdWN0WGNvbnN0YW50WDI3WF9mb2xkWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKS5wcm9kdWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX3Byb2R1Y3RYZGF2ZV9rZWx2aW5YX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCJuYW1lIikucHJvZHVjdChbImRhdmUiLCAia2VsdmluIl0pLnVuZm9sZCgpIH1dLCAKKyAgICBnX2luamVjdFhhX251bGxfYlhfcHJvZHVjdFhhX2NYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkucHJvZHVjdChbImEiLCAiYyJdKS51bmZvbGQoKSB9XSwgCisgICAgZ19pbmplY3RYYV9udWxsX2JYX3Byb2R1Y3RYYV9udWxsX2NYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgbnVsbCwgImIiXSkucHJvZHVjdChbImEiLCBudWxsLCAiYyJdKS51bmZvbGQoKSB9XSwgCisgICAgZ19pbmplY3RYM190aHJlZVhfcHJvZHVjdFhmaXZlX3RocmVlXzdYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzMsICJ0aHJlZSJdKS5wcm9kdWN0KFsiZml2ZSIsICJ0aHJlZSIsIDddKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvamVjdFhhX2JYX2J5WG91dEVfY291bnRYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5wcm9qZWN0KCJhIiwgImIiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoImFnZSIpIH1dLCAKKyAgICBnX1Zfb3V0WGNyZWF0ZWRYX3Byb2plY3RYYV9iWF9ieVhuYW1lWF9ieVhpblhjcmVhdGVkWF9jb3VudFhfb3JkZXJfYnlYc2VsZWN0WGJYX19kZXNjWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLnByb2plY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikuYnkoX18uaW5fKCJjcmVhdGVkIikuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoImIiKSwgT3JkZXIuZGVzYykuc2VsZWN0KCJhIikgfV0sIAorICAgIGdfVl92YWx1ZU1hcF9wcm9qZWN0WHhYX2J5WHNlbGVjdFhuYW1lWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkucHJvamVjdCgieCIpLmJ5KF9fLnNlbGVjdCgibmFtZSIpKSB9XSwgCisgICAgZ19WX3Byb2plY3RYYV9iWF9ieVhpbkVfY291bnRYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb2plY3QoImEiLCAiYiIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9wcm9qZWN0WGFfYlhfYnlYaW5FX2NvdW50WF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkucHJvamVjdCgiYSIsICJiIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoImFnZSIpIH1dLCAKKyAgICBnX1ZfaGFzWGFnZVhfcHJvcGVydGllc1huYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS5wcm9wZXJ0aWVzKCJuYW1lIikudmFsdWUoKSB9XSwgCisgICAgZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYbmFtZV9hZ2VYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnByb3BlcnRpZXMoIm5hbWUiLCAiYWdlIikudmFsdWUoKSB9XSwgCisgICAgZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYYWdlX25hbWVYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnByb3BlcnRpZXMoImFnZSIsICJuYW1lIikudmFsdWUoKSB9XSwgCisgICAgZ19WX3Byb3BlcnRpZXNYbmFtZV9hZ2VfbnVsbFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoIm5hbWUiLCAiYWdlIiwgbnVsbCkudmFsdWUoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lX2FnZV9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIiwgImFnZSIsIG51bGwpIH1dLCAKKyAgICBnX0VfcHJvcGVydGllc1h3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCJ3ZWlnaHQiKSB9XSwgCisgICAgZ19FX3Byb3BlcnRpZXM6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImJvYiIpLmFzKCJiIikuYWRkRSgia25vd3MiKS5mcm9tXygiYSIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkucHJvcGVydHkoInNpbmNlIiwgMjAyMCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkgfV0sIAorICAgIGdfRV9wcm9wZXJ0aWVzWHNpbmNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYm9iIikuYXMoImIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJhIikudG8oImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5wcm9wZXJ0eSgic2luY2UiLCAyMDIwKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoInNpbmNlIikgfV0sIAorICAgIGdfRV9wcm9wZXJ0aWVzX211bHRpX2VkZ2VzOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJib2IiKS5hcygiYiIpLmFkZEUoImtub3dzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLnByb3BlcnR5KCJzaW5jZSIsIDIwMjApLmFkZEUoImxpa2VzIikuZnJvbV8oImEiKS50bygiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJ0YWciLCAiZnJpZW5kIikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkgfV0sIAorICAgIGdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3JUcmltOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiZmVhdHVyZSAgIiwgIm9uZSB0ZXN0ICIsIG51bGwsICIiLCAiICIsICLjgIBhYmMiLCAiYWJj44CAIiwgIuOAgGFiY+OAgCIsICLjgIDjgIAiKS5yVHJpbSgpIH1dLCAKKyAgICBnX2luamVjdFhfX2ZlYXR1cmVfX190ZXN0X19udWxsWF9yVHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiICBmZWF0dXJlICAiLCAiIG9uZSB0ZXN0ICIsIG51bGwsICIiLCAiICIsICLjgIBhYmMiLCAiYWJj44CAIiwgIuOAgGFiY+OAgCIsICLjgIDjgIAiXSkuclRyaW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFhfX2ZlYXR1cmVfX1hfclRyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCIgIGZlYXR1cmUgICIpLnJUcmltKCkgfV0sIAorICAgIGdfaW5qZWN0WExpc3RYYV9iWFhfclRyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsICJiIl0pLnJUcmltKCkgfV0sIAorICAgIGdfaW5qZWN0WExpc3RYMV8yWFhfclRyaW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0pLnJUcmltKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9yVHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICIgbWFya28gIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICIgIHZhZGFzICAiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICBsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2ggICIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgIHJpcHBsZSAgICIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuclRyaW0oKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX3JUcmltWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICIgbWFya28gIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICIgIHZhZGFzICAiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICBsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2ggICIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgIHJpcHBsZSAgICIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuclRyaW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFh0aGF0X3RoaXNfdGVzdF9udWxsWF9yZXBsYWNlWGhfalg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ0aGF0IiwgInRoaXMiLCAidGVzdCIsIG51bGwpLnJlcGxhY2UoImgiLCAiaiIpIH1dLCAKKyAgICBnX2luamVjdFh0aGF0X3RoaXNfdGVzdF9udWxsWF9mb2xkX3JlcGxhY2VYbG9jYWxfaF9qWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoInRoYXQiLCAidGhpcyIsICJ0ZXN0IiwgbnVsbCkuZm9sZCgpLnJlcGxhY2UoU2NvcGUubG9jYWwsICJoIiwgImoiKSB9XSwgCisgICAgZ19pbmplY3RYTGlzdFhhX2JYY1hfcmVwbGFjZVhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCAiYiJdKS5yZXBsYWNlKCJhIiwgImIiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9yZXBsYWNlWG51bGxfaVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnJlcGxhY2UobnVsbCwgImciKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9yZXBsYWNlWGFfaVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnJlcGxhY2UoInAiLCAiZyIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3ZhbHVlWG5hbWVYX29yZGVyX2ZvbGRfcmVwbGFjZVhsb2FjbF9hX2lYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCAicCIsICJnIikgfV0sIAorICAgIGdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiZmVhdHVyZSIsICJ0ZXN0IG9uZSIsIG51bGwpLnJldmVyc2UoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5yZXZlcnNlKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLnJldmVyc2UoKSB9XSwgCisgICAgZ19WX291dF9wYXRoX2J5WG5hbWVYX3JldmVyc2U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLnJldmVyc2UoKSB9XSwgCisgICAgZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoIm5hbWUiKS5yZXZlcnNlKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYYWdlWF9mb2xkX29yZGVyWGxvY2FsWF9ieVhkZXNjWF9yZXZlcnNlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuZGVzYykucmV2ZXJzZSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfb3JkZXJYbG9jYWxYX2J5X3JldmVyc2U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoKS5yZXZlcnNlKCkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxYX3JldmVyc2U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLnJldmVyc2UoKSB9XSwgCisgICAgZ19pbmplY3RYYlhfcmV2ZXJzZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImIiKS5yZXZlcnNlKCkgfV0sIAorICAgIGdfaW5qZWN0WDNfdGhyZWVYX3JldmVyc2U6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFszLCAidGhyZWUiXSkucmV2ZXJzZSgpIH1dLCAKKyAgICBnX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYV9iWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKSB9XSwgCisgICAgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKS5zZWxlY3QoImEiKSB9XSwgCisgICAgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKS5zZWxlY3QoImEiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FnZ3JlZ2F0ZVh4WF9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hZ2dyZWdhdGUoIngiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2FzWGFYX25hbWVfb3JkZXJfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVhfYnlfWGl0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpLmJ5KCkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV9ncmVtbGluWF9pbkVYdXNlc1hfb3JkZXJfYnlYc2tpbGxfYXNjWF9hc1hhWF9vdXRWX2FzWGJYX3NlbGVjdFhhX2JYX2J5WHNraWxsWF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgImdyZW1saW4iKS5pbkUoInVzZXMiKS5vcmRlcigpLmJ5KCJza2lsbCIsIE9yZGVyLmFzYykuYXMoImEiKS5vdXRWKCkuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJza2lsbCIpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl93aGVyZVhfdmFsdWVYbmFtZVhfaXNYbWFya29YWF9hc1hhWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLndoZXJlKF9fLnZhbHVlcygibmFtZSIpLmlzKCJtYXJrbyIpKS5hcygiYSIpLnNlbGVjdCgiYSIpIH1dLCAKKyAgICBnX1ZfbGFiZWxfZ3JvdXBDb3VudF9hc1h4WF9zZWxlY3RYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxhYmVsKCkuZ3JvdXBDb3VudCgpLmFzKCJ4Iikuc2VsZWN0KCJ4IikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX21hcFhib3RoRV9sYWJlbF9ncm91cENvdW50WF9hc1hyWF9zZWxlY3RYcF9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFzKCJwIikubWFwKF9fLmJvdGhFKCkubGFiZWwoKS5ncm91cENvdW50KCkpLmFzKCJyIikuc2VsZWN0KCJwIiwgInIiKSB9XSwgCisgICAgZ19WX2Nob29zZVhvdXRFX2NvdW50X2lzWDBYX19hc1hhWF9fYXNYYlhYX2Nob29zZVhzZWxlY3RYYVhfX3NlbGVjdFhhWF9fc2VsZWN0WGJYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkuaXMoeHgxKSwgX18uYXMoImEiKSwgX18uYXMoImIiKSkuY2hvb3NlKF9fLnNlbGVjdCgiYSIpLCBfXy5zZWxlY3QoImEiKSwgX18uc2VsZWN0KCJiIikpIH1dLCAKKyAgICBnX1ZYMVhfZ3JvdXBYYVhfYnlYY29uc3RhbnRYYVhYX2J5WG5hbWVYX3NlbGVjdFhhWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5ncm91cCgiYSIpLmJ5KF9fLmNvbnN0YW50KCJhIikpLmJ5KF9fLnZhbHVlcygibmFtZSIpKS5iYXJyaWVyKCkuc2VsZWN0KCJhIikuc2VsZWN0KCJhIikgfV0sIAorICAgIGdfVlgxWF9hc1hoZXJlWF9vdXRfc2VsZWN0WGhlcmVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImhlcmUiKS5vdXQoKS5zZWxlY3QoImhlcmUiKSB9XSwgCisgICAgZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVg6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5hcygiaGVyZSIpLm91dCgpLnNlbGVjdCgiaGVyZSIpIH1dLCAKKyAgICBnX1ZYNFhfb3V0X2FzWGhlcmVYX2hhc1hsYW5nX2phdmFYX3NlbGVjdFhoZXJlWF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkub3V0KCkuYXMoImhlcmUiKS5oYXMoImxhbmciLCAiamF2YSIpLnNlbGVjdCgiaGVyZSIpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RV9hc1hoZXJlWF9pblZfaGFzWG5hbWVfdmFkYXNYX3NlbGVjdFhoZXJlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKS5hcygiaGVyZSIpLmluVigpLmhhcygibmFtZSIsICJ2YWRhcyIpLnNlbGVjdCgiaGVyZSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RVhrbm93c1hfaGFzWHdlaWdodF8xWF9hc1hoZXJlWF9pblZfaGFzWG5hbWVfam9zaFhfc2VsZWN0WGhlcmVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKS5oYXMoIndlaWdodCIsIDEuMCkuYXMoImhlcmUiKS5pblYoKS5oYXMoIm5hbWUiLCAiam9zaCIpLnNlbGVjdCgiaGVyZSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RVhrbm93c1hfYXNYaGVyZVhfaGFzWHdlaWdodF8xWF9hc1hmYWtlWF9pblZfaGFzWG5hbWVfam9zaFhfc2VsZWN0WGhlcmVYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0RSgia25vd3MiKS5hcygiaGVyZSIpLmhhcygid2VpZ2h0IiwgMS4wKS5hcygiZmFrZSIpLmluVigpLmhhcygibmFtZSIsICJqb3NoIikuc2VsZWN0KCJoZXJlIikgfV0sIAorICAgIGdfVl9hc1hoZXJlWG91dF9uYW1lX3NlbGVjdFhoZXJlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImhlcmUiKS5vdXQoKS52YWx1ZXMoIm5hbWUiKS5zZWxlY3QoImhlcmUiKSB9XSwgCisgICAgZ19WX291dFhjcmVhdGVkWF91bmlvblhhc1hwcm9qZWN0WF9pblhjcmVhdGVkWF9oYXNYbmFtZV9tYXJrb1hfc2VsZWN0WHByb2plY3RYX19hc1hwcm9qZWN0WF9pblhjcmVhdGVkWF9pblhrbm93c1hfaGFzWG5hbWVfbWFya29YX3NlbGVjdFhwcm9qZWN0WFhfZ3JvdXBDb3VudF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikudW5pb24oX18uYXMoInByb2plY3QiKS5pbl8oImNyZWF0ZWQiKS5oYXMoIm5hbWUiLCAibWFya28iKS5zZWxlY3QoInByb2plY3QiKSwgX18uYXMoInByb2plY3QiKS5pbl8oImNyZWF0ZWQiKS5pbl8oImtub3dzIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuc2VsZWN0KCJwcm9qZWN0IikpLmdyb3VwQ291bnQoKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfdW50aWxYb3V0X291dFhfcmVwZWF0WGluX2FzWGFYWF9zZWxlY3RYYVhfYnlYdGFpbFhsb2NhbFhfbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW5fKCkuYXMoImEiKSkuc2VsZWN0KCJhIikuYnkoX18udGFpbChTY29wZS5sb2NhbCkudmFsdWVzKCJuYW1lIikpIH1dLCAKKyAgICBnX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF9zZWxlY3RYa2V5c1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9hc1huYW1lWF9hc1hsYW5ndWFnZVhfYXNYY3JlYXRvcnNYX3NlbGVjdFhuYW1lX2xhbmd1YWdlX2NyZWF0b3JzWF9ieVhuYW1lWF9ieVhsYW5nWF9ieVhpblhjcmVhdGVkWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuYXMoIm5hbWUiKS5hcygibGFuZ3VhZ2UiKS5hcygiY3JlYXRvcnMiKS5zZWxlY3QoIm5hbWUiLCAibGFuZ3VhZ2UiLCAiY3JlYXRvcnMiKS5ieSgibmFtZSIpLmJ5KCJsYW5nIikuYnkoX18uaW5fKCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSkgfV0sIAorICAgIGdfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3VuZm9sZF9zZWxlY3RYa2V5c1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5ncm91cENvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfdW5mb2xkX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWF9pbl9hc1hiWFhfc2VsZWN0WGFfYlhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW5fKCkuYXMoImEiKS5pbl8oKS5hcygiYiIpKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2FzWGFYX3doZXJlWG91dFhrbm93c1hYX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS53aGVyZShfXy5vdXQoImtub3dzIikpLnNlbGVjdCgiYSIpIH1dLCAKKyAgICBnX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGZpcnN0X2FYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkuYXMoImEiKS5yZXBlYXQoX18ub3V0KCkuYXMoImEiKSkudGltZXMoMikuc2VsZWN0KFBvcC5maXJzdCwgImEiKSB9XSwgCisgICAgZ19WX2FzWGFYX291dFhrbm93c1hfYXNYYlhfbG9jYWxYc2VsZWN0WGFfYlhfYnlYbmFtZVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLmxvY2FsKF9fLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSkgfV0sIAorICAgIGdfVlgxWF9hc1hhWF9yZXBlYXRYb3V0X2FzWGFYWF90aW1lc1gyWF9zZWxlY3RYbGFzdF9hWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmFzKCJhIikucmVwZWF0KF9fLm91dCgpLmFzKCJhIikpLnRpbWVzKDIpLnNlbGVjdChQb3AubGFzdCwgImEiKSB9XSwgCisgICAgZ19WWDFYX291dEVYa25vd3NYX2FzWGhlcmVYX2hhc1h3ZWlnaHRfMVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoImtub3dzIikuYXMoImhlcmUiKS5oYXMoIndlaWdodCIsIDEuMCkuaW5WKCkuaGFzKCJuYW1lIiwgImpvc2giKS5zZWxlY3QoImhlcmUiKSB9XSwgCisgICAgZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5X2J5WG5hbWVYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImIiKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgpLmJ5KCJuYW1lIikuYnkoImFnZSIpIH1dLCAKKyAgICBnX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2FzWGFYX2dyb3VwWG1YX2J5X2J5WGJvdGhFX2NvdW50WF9iYXJyaWVyX3NlbGVjdFhtWF9zZWxlY3RYc2VsZWN0WGFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5ncm91cCgibSIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KCJtIikuc2VsZWN0KF9fLnNlbGVjdCgiYSIpKSB9XSwgCisgICAgZ19WX2FzWGFYX2dyb3VwWG1YX2J5X2J5WGJvdGhFX2NvdW50WF9iYXJyaWVyX3NlbGVjdFhtWF9zZWxlY3RYc2VsZWN0WGFYWF9ieVhtYXRoWF9wbHVzX1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIpLmdyb3VwKCJtIikuYnkoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJhcnJpZXIoKS5zZWxlY3QoIm0iKS5zZWxlY3QoX18uc2VsZWN0KCJhIikpLmJ5KF9fLm1hdGgoIl8rXyIpKSB9XSwgCisgICAgZ19WX2FzWGFYX291dFhrbm93c1hfYXNYYVhfc2VsZWN0WGFsbF9jb25zdGFudFhhWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJhIikuc2VsZWN0KFBvcC5hbGwsIF9fLmNvbnN0YW50KCJhIikpIH1dLCAKKyAgICBnX1Zfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zZWxlY3QoImEiKSB9XSwgCisgICAgZ19WX3NlbGVjdFhhWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KCJhIikuY291bnQoKSB9XSwgCisgICAgZ19WX3NlbGVjdFhhX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zZWxlY3QoImEiLCAiYiIpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBfc2VsZWN0WGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdCgiYSIpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBfc2VsZWN0WGFfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KCJhIiwgImIiKSB9XSwgCisgICAgZ19WX3NlbGVjdFhmaXJzdF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgImEiKSB9XSwgCisgICAgZ19WX3NlbGVjdFhmaXJzdF9hX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCAiYSIsICJiIikgfV0sIAorICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYZmlyc3RfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgImEiKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuZmlyc3QsICJhIiwgImIiKSB9XSwgCisgICAgZ19WX3NlbGVjdFhsYXN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zZWxlY3QoUG9wLmxhc3QsICJhIikgfV0sIAorICAgIGdfVl9zZWxlY3RYbGFzdF9hX2JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zZWxlY3QoUG9wLmxhc3QsICJhIiwgImIiKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwX3NlbGVjdFhsYXN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgImEiKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwX3NlbGVjdFhsYXN0X2FfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCAiYSIsICJiIikgfV0sIAorICAgIGdfVl9zZWxlY3RYYWxsX2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zZWxlY3QoUG9wLmFsbCwgImEiKSB9XSwgCisgICAgZ19WX3NlbGVjdFhhbGxfYV9iWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5hbGwsICJhIiwgImIiKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwX3NlbGVjdFhhbGxfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsICJhIikgfV0sIAorICAgIGdfVl92YWx1ZU1hcF9zZWxlY3RYYWxsX2FfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsICJhIiwgImIiKSB9XSwgCisgICAgZ19WX2FzWGFfYlhfb3V0X2FzWGNYX3BhdGhfc2VsZWN0WGtleXNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hcygiYSIsICJiIikub3V0KCkuYXMoImMiKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIiwgImIiKS5vdXQoKS5hcygiYyIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIH1dLCAKKyAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9iYXJyaWVyX2FzWGFYX291dFhrbm93c19zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5iYXJyaWVyKCkuYXMoImEiKS5vdXQoImtub3dzIikuc2VsZWN0KCJhIikgfV0sIAorICAgIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2VsZW1lbnRNYXBYbmFtZVhfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWF9zZWxlY3RYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5lbGVtZW50TWFwKCJuYW1lIikuYXMoImEiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoImEiKS5zZWxlY3QoIm5hbWUiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfY291bnRfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmNvdW50KCkuYXMoImEiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoImEiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfcGF0aF9hc1hhWF91bmlvblhpZGVudGl0eV9pZGVudGl0eVhfc2VsZWN0WGFYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnBhdGgoKS5hcygiYSIpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdCgiYSIpLnVuZm9sZCgpIH1dLCAKKyAgICBnX0VYMTFYX3Byb3BlcnRpZXNYd2VpZ2h0WF9hc1hhWF9zZWxlY3RYYVhfYnlYa2V5WDogW2Z1bmN0aW9uKHtnLCBlaWQxMX0pIHsgcmV0dXJuIGcuRShlaWQxMSkucHJvcGVydGllcygid2VpZ2h0IikuYXMoImEiKS5zZWxlY3QoImEiKS5ieShULmtleSkgfV0sIAorICAgIGdfRVgxMVhfcHJvcGVydGllc1h3ZWlnaHRYX2FzWGFYX3NlbGVjdFhhWF9ieVh2YWx1ZVg6IFtmdW5jdGlvbih7ZywgZWlkMTF9KSB7IHJldHVybiBnLkUoZWlkMTEpLnByb3BlcnRpZXMoIndlaWdodCIpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoVC52YWx1ZSkgfV0sIAorICAgIGdfVl9hc1hhWF9zZWxlY3RYYVhfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVl9hc1hhX25YX3NlbGVjdFhhX25YX2J5WGFnZVhfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIiwgIm4iKS5zZWxlY3QoImEiLCAibiIpLmJ5KCJhZ2UiKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FzWGFYX3NlbGVjdFhhWF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5ieSgiYWdlIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYa19udWxsWF9pbmplY3RYeFhfc2VsZWN0WGtYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJrIiwgbnVsbCkuaW5qZWN0KCJ4Iikuc2VsZWN0KCJrIikgfV0sIAorICAgIGdfVl9vdXRfaW5fc2VsZWN0WGFsbF9hX2FfYVhfYnlYdW5mb2xkX25hbWVfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigiQSIpLnByb3BlcnR5KCJuYW1lIiwgImExIikuYXMoImExIikuYWRkVigiQiIpLnByb3BlcnR5KCJuYW1lIiwgImIxIikuYXMoImIxIikuYWRkRSgiYWIiKS5mcm9tXygiYTEiKS50bygiYjEiKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5pbl8oKS5hcygiYSIpLnNlbGVjdChQb3AuYWxsLCAiYSIsICJhIiwgImEiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKKyAgICBnX3dpdGhvdXRTdHJhdGVnaWVzWExhenlCYXJyaWVyU3RyYXRlZ3lYX1ZfYXNYbGFiZWxYX2xvY2FsWGFnZ3JlZ2F0ZV94WF9zZWxlY3RYeFhfc2VsZWN0WGxhYmVsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRob3V0U3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkuYXMoImxhYmVsIikubG9jYWwoX18uYWdncmVnYXRlKCJ4IikpLnNlbGVjdCgieCIpLnNlbGVjdCgibGFiZWwiKSB9XSwgCisgICAgZ19WX25hbWVfYXNYYVhfc2VsZWN0WGZpcnN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5hcygiYSIpLnNlbGVjdChQb3AuZmlyc3QsICJhIikgfV0sIAorICAgIGdfVl9uYW1lX2FzWGFYX3NlbGVjdFhsYXN0X2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5hcygiYSIpLnNlbGVjdChQb3AubGFzdCwgImEiKSB9XSwgCisgICAgZ19WX25hbWVfYXNYYVhfc2VsZWN0WG1peGVkX2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5hcygiYSIpLnNlbGVjdChQb3AubWl4ZWQsICJhIikgfV0sIAorICAgIGdfVl9uYW1lX2FzWGFYX3NlbGVjdFhhbGxfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuc2VsZWN0KFBvcC5hbGwsICJhIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfYXNYYVhfY29uY2F0WFhYX2FzWGFYX2xlbmd0aF9hc1hhWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5hcygiYSIpLmNvbmNhdCgiWCIpLmFzKCJhIikubGVuZ3RoKCkuYXMoImEiKS5zZWxlY3QoImEiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfbGVuZ3RoX2FzWGFYX3NlbGVjdFhmaXJzdF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuY29uY2F0KCJYIikuYXMoImEiKS5sZW5ndGgoKS5hcygiYSIpLnNlbGVjdChQb3AuZmlyc3QsICJhIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfYXNYYVhfY29uY2F0WFhYX2FzWGFYX2xlbmd0aF9hc1hhWF9zZWxlY3RYbGFzdF9hWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLmFzKCJhIikuY29uY2F0KCJYIikuYXMoImEiKS5sZW5ndGgoKS5hcygiYSIpLnNlbGVjdChQb3AubGFzdCwgImEiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfY29uY2F0WFlaWF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5hcygiYSIpLmNvbmNhdCgiWCIpLmFzKCJhIikuY29uY2F0KCJZWiIpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfY29uY2F0WFlaWF9hc1hhWF9zZWxlY3RYYWxsX2FYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoImEiKS5jb25jYXQoIlgiKS5hcygiYSIpLmNvbmNhdCgiWVoiKS5hcygiYSIpLnNlbGVjdChQb3AuYWxsLCAiYSIpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuc2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpIH1dLCAKKyAgICBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYYWxsX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLnNlbGVjdChQb3AuYWxsLCAiYSIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9zaG9ydGVzdFBhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpIH1dLCAKKyAgICBnX1ZfYm90aF9kZWR1cF9zaG9ydGVzdFBhdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5kZWR1cCgpLnNob3J0ZXN0UGF0aCgpIH1dLCAKKyAgICBnX1Zfc2hvcnRlc3RQYXRoX2VkZ2VzSW5jbHVkZWQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXMiKSB9XSwgCisgICAgZ19WX3Nob3J0ZXN0UGF0aF9kaXJlY3Rpb25YSU5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXMiLCBEaXJlY3Rpb24uSU4pIH1dLCAKKyAgICBnX1Zfc2hvcnRlc3RQYXRoX2VkZ2VzWG91dEVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXMiLCBfXy5vdXRFKCkpIH1dLCAKKyAgICBnX1Zfc2hvcnRlc3RQYXRoX2VkZ2VzSW5jbHVkZWRfZWRnZXNYb3V0RVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXMiKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXMiLCBfXy5vdXRFKCkpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuc2hvcnRlc3RQYXRoKCkgfV0sIAorICAgIGdfVl9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX21hcmtvWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQiLCBfXy5oYXMoIm5hbWUiLCAibWFya28iKSkgfV0sIAorICAgIGdfVl9zaG9ydGVzdFBhdGhfdGFyZ2V0WHZhbHVlc1huYW1lWF9pc1htYXJrb1hYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0IiwgX18udmFsdWVzKCJuYW1lIikuaXMoIm1hcmtvIikpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzTGFiZWxYc29mdHdhcmVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldCIsIF9fLmhhc0xhYmVsKCJzb2Z0d2FyZSIpKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX2pvc2hYWF9kaXN0YW5jZVh3ZWlnaHRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0IiwgX18uaGFzKCJuYW1lIiwgImpvc2giKSkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlIiwgIndlaWdodCIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfZGFuaWVsWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX3N0ZXBoZW5YWF9lZGdlc1hib3RoRVh1c2VzWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJkYW5pZWwiKS5zaG9ydGVzdFBhdGgoKS53aXRoXygifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0IiwgX18uaGFzKCJuYW1lIiwgInN0ZXBoZW4iKSkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzIiwgX18uYm90aEUoInVzZXMiKSkgfV0sIAorICAgIGdfVl9oYXNYc29uZ19uYW1lX01JR0hUX0FTX1dFTExYX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWHNvbmdfbmFtZV9NQVlCRV9ZT1VfS05PV19IT1dfSV9GRUVMWFhfZWRnZXNYb3V0RVhmb2xsb3dlZEJ5WFhfZGlzdGFuY2VYd2VpZ2h0WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJzb25nIiwgIm5hbWUiLCAiTUlHSFQgQVMgV0VMTCIpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQiLCBfXy5oYXMoInNvbmciLCAibmFtZSIsICJNQVlCRSBZT1UgS05PVyBIT1cgSSBGRUVMIikpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcyIsIF9fLm91dEUoImZvbGxvd2VkQnkiKSkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlIiwgIndlaWdodCIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF9tYXhEaXN0YW5jZVgxWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLm1heERpc3RhbmNlIiwgMSkgfV0sIAorICAgIGdfVl9oYXNYbmFtZV92YWRhc1hfc2hvcnRlc3RQYXRoX2Rpc3RhbmNlWHdlaWdodFhfbWF4RGlzdGFuY2VYMV8zWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgInZhZGFzIikuc2hvcnRlc3RQYXRoKCkud2l0aF8oIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlIiwgIndlaWdodCIpLndpdGhfKCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZSIsIDEuMykgfV0sIAorICAgIGdfaW5qZWN0WHRoYXRfdGhpc190ZXN0WF9zcGlsdFhoWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoInRoYXQiLCAidGhpcyIsICJ0ZXN0IiwgbnVsbCkuc3BsaXQoImgiKSB9XSwgCisgICAgZ19pbmplY3RYaGVsbG9fd29ybGRYX3NwaWx0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiaGVsbG8gd29ybGQiKS5zcGxpdChudWxsKSB9XSwgCisgICAgZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RfbnVsbFhfc3BsaXRYZW1wdHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgidGhhdCIsICJ0aGlzIiwgInRlc3QiLCBudWxsKS5zcGxpdCgiIikgfV0sIAorICAgIGdfaW5qZWN0WExpc3RYYV9iWGNYX3NwbGl0WGFfYlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiYSIsICJiIl0pLnNwbGl0KCJhIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlWG5hbWVYX3NwbGl0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikuc3BsaXQobnVsbCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlWG5hbWVYX29yZGVyX2ZvbGRfc3BsaXRYbG9jYWxfYVhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsICJhIikudW5mb2xkKCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlWG5hbWVYX29yZGVyX2ZvbGRfc3BsaXRYbG9jYWxfZW1wdHlYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLnNwbGl0KFNjb3BlLmxvY2FsLCAiIikudW5mb2xkKCkgfV0sIAorICAgIGdfaW5qZWN0WHRoYXRfdGhpc190ZXN0WF9zdWJzdHJpbmdYMV84WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoInRlc3QiLCAiaGVsbG8gd29ybGQiLCBudWxsKS5zdWJzdHJpbmcoMSwgOCkgfV0sIAorICAgIGdfaW5qZWN0WExpc3RYYV9iWGNYX3N1YnN0cmluZ1gxXzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImFhIiwgImJiIl0pLnN1YnN0cmluZygxLCAyKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoMikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWDFfNFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLnN1YnN0cmluZygxLCA0KSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9zdWJzdHJpbmdYbG9jYWxfMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuZm9sZCgpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgMikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9zdWJzdHJpbmdYbG9jYWxfMV80WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAxLCA0KSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYMV8wWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIikuc3Vic3RyaW5nKDEsIDApIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYbmVnM1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoLTMpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3ZhbHVlWG5hbWVYX3N1YnN0cmluZ1gxX25lZzFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoMSwgLTEpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3ZhbHVlWG5hbWVYX3N1YnN0cmluZ1huZWc0XzJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoLTQsIDIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3ZhbHVlWG5hbWVYX3N1YnN0cmluZ1huZWczX25lZzFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoLTMsIC0xKSB9XSwgCisgICAgZ19WX2luamVjdFgxMjdiXzFiWF9zdW1YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMTI3LCAxKS5zdW0oKSB9XSwgCisgICAgZ19WX2luamVjdFhfMTI4Yl9fMWJYX3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgtMTI4LCAtMSkuc3VtKCkgfV0sIAorICAgIGdfVl9pbmplY3RYMzI3NjdzXzFzWF9zdW1YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMzI3NjcsIDEpLnN1bSgpIH1dLCAKKyAgICBnX1ZfaW5qZWN0WF8zMjc2OHNfXzFzWF9zdW1YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoLTMyNzY4LCAtMSkuc3VtKCkgfV0sIAorICAgIGdfVl9pbmplY3RYMjE0NzQ4MzY0N2lfMWlYX3N1bVhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgyMTQ3NDgzNjQ3LCAxKS5zdW0oKSB9XSwgCisgICAgZ19WX2luamVjdFhfMjE0NzQ4MzY0OGlfXzFpWF9zdW1YWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoLTIxNDc0ODM2NDgsIC0xKS5zdW0oKSB9XSwgCisgICAgZ19WX2FnZV9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuc3VtKCkgfV0sIAorICAgIGdfVl9mb29fc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLnN1bSgpIH1dLCAKKyAgICBnX1ZfYWdlX2ZvbGRfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2Zvb19mb2xkX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieShfXy5ib3RoRSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnN1bShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS51bmZvbGQoKS5zdW0oKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS51bmZvbGQoKS5zdW0oKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikudW5mb2xkKCkuc3VtKCkgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikudW5mb2xkKCkuc3VtKCkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxfMTBfNV9udWxsWF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsIDEwLCA1LCBudWxsKS5zdW0oKSB9XSwgCisgICAgZ19pbmplY3RYbGlzdFhudWxsXzEwXzVfbnVsbFhYX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFtudWxsLCAxMCwgNSwgbnVsbF0pLnN1bShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfbG9jYWxYdW5pb25YdmFsdWVzWGFnZVhfb3V0RV92YWx1ZXNYd2VpZ2h0WFhfZm9sZFhfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKCJhZ2UiKSwgX18ub3V0RSgpLnZhbHVlcygid2VpZ2h0IikpLmZvbGQoKSkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2FnZV9pbmplY3RYMTAwMG5YX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5pbmplY3QoMTAwMCkuc3VtKCkgfV0sIAorICAgIGdfaW5qZWN0WDFiXzJiXzNiWF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIsIDMpLnN1bSgpIH1dLCAKKyAgICBnX2luamVjdFgxYl8yYl8zc1hfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyLCAzKS5zdW0oKSB9XSwgCisgICAgZ19pbmplY3RYMWJfMjZiXzNpWF9zdW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIsIDMpLnN1bSgpIH1dLCAKKyAgICBnX2luamVjdFgxZl8yNmZfM2ZYX3N1bTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgMiwgMykuc3VtKCkgfV0sIAorICAgIGdfVl9hZ2VfaW5qZWN0WDEwMDBuWF9mb2xkX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuaW5qZWN0KDEwMDApLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFgxYl8yYl8zYlhfZm9sZF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19pbmplY3RYMWJfMmJfM3NYX2ZvbGRfc3VtWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSwgMiwgMykuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WDFiXzI2Yl8zaVhfZm9sZF9zdW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19pbmplY3RYMWZfMjZmXzNmWF9mb2xkX3N1bVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEsIDIsIDMpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfdG9Mb3dlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoIkZFQVRVUkUiLCAidEVTdCIsIG51bGwpLnRvTG93ZXIoKSB9XSwgCisgICAgZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX3RvTG93ZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbIkZFQVRVUkUiLCAidEVTdCIsIG51bGxdKS50b0xvd2VyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19pbmplY3RYTGlzdFhhX2JYWF90b0xvd2VyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbImEiLCAiYiJdKS50b0xvd2VyKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfdG9Mb3dlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJNQVJLTyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiVkFEQVMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiTE9QIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJKT1NIIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiUklQUExFIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJQRVRFUiIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS50b0xvd2VyKCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfdG9Mb3dlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiTUFSS08iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIlZBREFTIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIkxPUCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiSk9TSCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIlJJUFBMRSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiUEVURVIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikudG9Mb3dlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF90b0xvd2VyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJNQVJLTyIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiVkFEQVMiKS5wcm9wZXJ0eSgiYWdlIiwgMjcpLmFzKCJ2YWRhcyIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiTE9QIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJKT1NIIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiUklQUExFIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJQRVRFUiIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS50b0xvd2VyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX3RvVXBwZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmZWF0dXJlIiwgInRFU3QiLCBudWxsKS50b1VwcGVyKCkgfV0sIAorICAgIGdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF90b1VwcGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJmZWF0dXJlIiwgInRFU3QiLCBudWxsXSkudG9VcHBlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WExpc3RYYV9iWFhfdG9VcHBlcjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkudG9VcHBlcigpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX3RvVXBwZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLnRvVXBwZXIoKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF90b1VwcGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikudG9VcHBlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF90b1VwcGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkudG9VcHBlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3RyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCIgIGZlYXR1cmUgICIsICIgb25lIHRlc3QgIiwgbnVsbCwgIiIsICIgIiwgIuOAgGFiYyIsICJhYmPjgIAiLCAi44CAYWJj44CAIiwgIuOAgOOAgCIpLnRyaW0oKSB9XSwgCisgICAgZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfdHJpbVhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KFsiICBmZWF0dXJlICAiLCAiIG9uZSB0ZXN0ICIsIG51bGwsICIiLCAiICIsICLjgIBhYmMiLCAiYWJj44CAIiwgIuOAgGFiY+OAgCIsICLjgIDjgIAiXSkudHJpbShTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfaW5qZWN0WExpc3RYYV9iWFhfdHJpbTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWyJhIiwgImIiXSkudHJpbSgpIH1dLCAKKyAgICBnX2luamVjdFhMaXN0WDFfMlhYX3RyaW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChbMSwgMl0pLnRyaW0oU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfdmFsdWVzWG5hbWVYX3RyaW06IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiIG1hcmtvICIpLnByb3BlcnR5KCJhZ2UiLCAyOSkuYXMoIm1hcmtvIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiICB2YWRhcyAgIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgIiAgbG9wIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJsb3AiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoICAiKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgICByaXBwbGUgICAiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLnRyaW0oKSB9XSwgCisgICAgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX3RyaW1YbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiBtYXJrbyAiKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIiAgdmFkYXMgICIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICIgIGxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCAgIikucHJvcGVydHkoImFnZSIsIDMyKS5hcygiam9zaCIpLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiICAgcmlwcGxlICAgIikucHJvcGVydHkoImxhbmciLCAiamF2YSIpLmFzKCJyaXBwbGUiKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJwZXRlciIpLnByb3BlcnR5KCJhZ2UiLCAzNSkuYXMoInBldGVyIikuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygidmFkYXMiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJqb3NoIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJtYXJrbyIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygicmlwcGxlIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygicGV0ZXIiKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuMikgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmZvbGQoKS50cmltKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2xvY2FsWG91dEVfZm9sZFhfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5vdXRFKCkuZm9sZCgpKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwX3VuZm9sZF9tYXBYc2VsZWN0WGtleXNYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS51bmZvbGQoKS5tYXAoX18uc2VsZWN0KENvbHVtbi5rZXlzKSkgfV0sIAorICAgIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNJZFg2WFhfcGF0aF9ieVhuYW1lWF91bmZvbGQ6IFtmdW5jdGlvbih7ZywgdmlkNiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzSWQodmlkNikpLnBhdGgoKS5ieSgibmFtZSIpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXA6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkgfV0sIAorICAgIGdfVl92YWx1ZU1hcFh0cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAodHJ1ZSkgfV0sIAorICAgIGdfVl92YWx1ZU1hcF93aXRoWHRva2Vuc1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiLCAiYWdlIikgfV0sIAorICAgIGdfVl92YWx1ZU1hcFh0cnVlX25hbWVfYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAodHJ1ZSwgIm5hbWUiLCAiYWdlIikgfV0sIAorICAgIGdfVl92YWx1ZU1hcFhuYW1lX2FnZVhfd2l0aFh0b2tlbnNYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS52YWx1ZU1hcCgibmFtZSIsICJhZ2UiKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zX2xhYmVsc1hfYnlYdW5mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudmFsdWVNYXAoIm5hbWUiLCAiYWdlIikud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5sYWJlbHMpLmJ5KF9fLnVuZm9sZCgpKSB9XSwgCisgICAgZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWF93aXRoWHRva2Vuc19pZHNYX2J5WHVuZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIpLndpdGhfKFdpdGhPcHRpb25zLnRva2VucywgV2l0aE9wdGlvbnMuaWRzKS5ieShfXy51bmZvbGQoKSkgfV0sIAorICAgIGdfVlgxWF9vdXRYY3JlYXRlZFhfdmFsdWVNYXA6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImNyZWF0ZWQiKS52YWx1ZU1hcCgpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9maWx0ZXJYb3V0RVhjcmVhdGVkWFhfdmFsdWVNYXBYdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5maWx0ZXIoX18ub3V0RSgiY3JlYXRlZCIpKS52YWx1ZU1hcCh0cnVlKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfZmlsdGVyWG91dEVYY3JlYXRlZFhYX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZpbHRlcihfXy5vdXRFKCJjcmVhdGVkIikpLnZhbHVlTWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlTWFwWG5hbWVfbG9jYXRpb25YX2J5WHVuZm9sZFhfYnk6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS52YWx1ZU1hcCgibmFtZSIsICJsb2NhdGlvbiIpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VfbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIsIG51bGwpIH1dLCAKKyAgICBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX2J5WGlzWHhYWGJ5WHVuZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIpLmJ5KF9fLmlzKCJ4IikpLmJ5KF9fLnVuZm9sZCgpKSB9XSwgCisgICAgZ19WWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYobnVsbCkgfV0sIAorICAgIGdfVlhsaXN0WG51bGxYWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoeHgxKSB9XSwgCisgICAgZ19WWDFfbnVsbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxLCBudWxsKSB9XSwgCisgICAgZ19WWGxpc3RYMV8yXzNYWF9uYW1lOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuVih4eDEpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYbGlzdFh2MV92Ml92M1hYX25hbWU6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5WKHh4MSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVjogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfV0sIAorICAgIGdfVlh2MVhfb3V0OiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkub3V0KCkgfV0sIAorICAgIGdfVlgxWF9vdXQ6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKSB9XSwgCisgICAgZ19WWDJYX2luOiBbZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikuaW5fKCkgfV0sIAorICAgIGdfVlg0WF9ib3RoOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aCgpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dEUoKSB9XSwgCisgICAgZ19WWDJYX291dEU6IFtmdW5jdGlvbih7ZywgdmlkMn0pIHsgcmV0dXJuIGcuVih2aWQyKS5pbkUoKSB9XSwgCisgICAgZ19WWDRYX2JvdGhFWGNyZWF0ZWRYOiBbZnVuY3Rpb24oe2csIHZpZDR9KSB7IHJldHVybiBnLlYodmlkNCkuYm90aEUoImNyZWF0ZWQiKSB9XSwgCisgICAgZ19WWDRYX2JvdGhFWGNyZWF0ZWR2YXJYOiBbZnVuY3Rpb24oe2csIHh4MSwgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSh4eDEpIH1dLCAKKyAgICBnX1ZYNFhfYm90aEU6IFtmdW5jdGlvbih7ZywgdmlkNH0pIHsgcmV0dXJuIGcuVih2aWQ0KS5ib3RoRSgpIH1dLCAKKyAgICBnX1Zfb3V0X291dEVfaW5WX2luRV9pblZfYm90aF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXRFKCkuaW5WKCkuaW5FKCkuaW5WKCkuYm90aCgpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZYMlhfaW5FOiBbZnVuY3Rpb24oe2csIHZpZDJ9KSB7IHJldHVybiBnLlYodmlkMikuYm90aEUoKSB9XSwgCisgICAgZ19WWDFYX291dFhrbm93c1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImtub3dzIikgfV0sIAorICAgIGdfVlgxQXNTdHJpbmdYX291dFhrbm93c1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImtub3dzIikgfV0sIAorICAgIGdfVlgxWF9vdXRYa25vd3NfY3JlYXRlZFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoImtub3dzIiwgImNyZWF0ZWQiKSB9XSwgCisgICAgZ19WWDFYX291dFhrbm93c3Zhcl9jcmVhdGVkdmFyWDogW2Z1bmN0aW9uKHtnLCB4eDMsIHh4MiwgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoeHgyLCB4eDMpIH1dLCAKKyAgICBnX1Zfb3V0X291dDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkgfV0sIAorICAgIGdfVlgxWF9vdXRfb3V0X291dDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLm91dCgpLm91dCgpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X25hbWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX3RvX1hPVVRfa25vd3NYOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSkudG8oRGlyZWN0aW9uLk9VVCwgImtub3dzIikgfV0sIAorICAgIGdfVlgxXzJfM180WF9uYW1lOiBbZnVuY3Rpb24oe2csIHZpZDQsIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikucHJvcGVydHkoImFnZSIsIDI5KS5hcygibWFya28iKS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLnByb3BlcnR5KCJhZ2UiLCAyNykuYXMoInZhZGFzIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJsb3AiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoImxvcCIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvc2giKS5wcm9wZXJ0eSgiYWdlIiwgMzIpLmFzKCJqb3NoIikuYWRkVigic29mdHdhcmUiKS5wcm9wZXJ0eSgibmFtZSIsICJyaXBwbGUiKS5wcm9wZXJ0eSgibGFuZyIsICJqYXZhIikuYXMoInJpcHBsZSIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInBldGVyIikucHJvcGVydHkoImFnZSIsIDM1KS5hcygicGV0ZXIiKS5hZGRFKCJrbm93cyIpLmZyb21fKCJtYXJrbyIpLnRvKCJ2YWRhcyIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oImpvc2giKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oIm1hcmtvIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJyaXBwbGUiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oImpvc2giKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJwZXRlciIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKSB9LCBmdW5jdGlvbih7ZywgdmlkNCwgdmlkMywgdmlkMiwgdmlkMX0pIHsgcmV0dXJuIGcuVigpLmhhcygic29mdHdhcmUiLCAibmFtZSIsICJsb3AiKS5kcm9wKCkgfSwgZnVuY3Rpb24oe2csIHZpZDQsIHZpZDMsIHZpZDIsIHZpZDF9KSB7IHJldHVybiBnLlYodmlkMSwgdmlkMiwgdmlkMywgdmlkNCkgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhsb29wc1hfYm90aEVYc2VsZlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJsb29wcyIpLmJvdGhFKCJzZWxmIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhsb29wc1hfYm90aFhzZWxmWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoImxvb3BzIikuYm90aCgic2VsZiIpIH1dLCAKKyAgICBnX2luamVjdFgxWF9WWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5WKG51bGwpIH1dLCAKKyAgICBnX2luamVjdFgxWF9WWDFfbnVsbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLlYodmlkMSwgbnVsbCkgfV0sIAorICAgIGdfVlgxWF9WX3ZhbHVlc1huYW1lWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLlYoKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX291dFhrbm93c1hfVl9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImtub3dzIikuVigpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfR2FyY2lhWF9pblhzdW5nQnlYX2FzWHNvbmdYX1ZfaGFzWG5hbWVfV2lsbGllX0RpeG9uWF9pblh3cml0dGVuQnlYX3doZXJlWGVxWHNvbmdYWF9uYW1lOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFydGlzdCIsICJuYW1lIiwgIkdhcmNpYSIpLmluXygic3VuZ0J5IikuYXMoInNvbmciKS5WKCkuaGFzKCJhcnRpc3QiLCAibmFtZSIsICJXaWxsaWVfRGl4b24iKS5pbl8oIndyaXR0ZW5CeSIpLndoZXJlKFAuZXEoInNvbmciKSkudmFsdWVzKCJuYW1lIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX1ZYc29mdHdhcmVYX2FkZEluRVh1c2VzX3BYOiBbZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5wcm9wZXJ0eSgiYWdlIiwgMjkpLmFzKCJtYXJrbyIpLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikucHJvcGVydHkoImFnZSIsIDI3KS5hcygidmFkYXMiKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgImxvcCIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygibG9wIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLnByb3BlcnR5KCJhZ2UiLCAzMikuYXMoImpvc2giKS5hZGRWKCJzb2Z0d2FyZSIpLnByb3BlcnR5KCJuYW1lIiwgInJpcHBsZSIpLnByb3BlcnR5KCJsYW5nIiwgImphdmEiKS5hcygicmlwcGxlIikuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAicGV0ZXIiKS5wcm9wZXJ0eSgiYWdlIiwgMzUpLmFzKCJwZXRlciIpLmFkZEUoImtub3dzIikuZnJvbV8oIm1hcmtvIikudG8oInZhZGFzIikucHJvcGVydHkoIndlaWdodCIsIDAuNSkuYWRkRSgia25vd3MiKS5mcm9tXygibWFya28iKS50bygiam9zaCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygibWFya28iKS50bygibG9wIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkuYWRkRSgiY3JlYXRlZCIpLmZyb21fKCJqb3NoIikudG8oInJpcHBsZSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLmFkZEUoImNyZWF0ZWQiKS5mcm9tXygiam9zaCIpLnRvKCJsb3AiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5hZGRFKCJjcmVhdGVkIikuZnJvbV8oInBldGVyIikudG8oImxvcCIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoInAiKS5WKHh4MSkuYWRkRSgidXNlcyIpLmZyb21fKCJwIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKCJ1c2VzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJ1c2VzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQyKS5vdXRFKCJ1c2VzIikgfSwgZnVuY3Rpb24oe2csIHh4MSwgdmlkMSwgdmlkMiwgdmlkMywgdmlkNCwgdmlkNSwgdmlkNn0pIHsgcmV0dXJuIGcuVih2aWQzKS5pbkUoInVzZXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDQpLm91dEUoInVzZXMiKSB9LCBmdW5jdGlvbih7ZywgeHgxLCB2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0LCB2aWQ1LCB2aWQ2fSkgeyByZXR1cm4gZy5WKHZpZDUpLmluRSgidXNlcyIpIH0sIGZ1bmN0aW9uKHtnLCB4eDEsIHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQsIHZpZDUsIHZpZDZ9KSB7IHJldHVybiBnLlYodmlkNikub3V0RSgidXNlcyIpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfZXFYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmlzKFAuZXEobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfbmVxWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5pcyhQLm5lcShudWxsKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9sdFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5sdChudWxsKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9sdGVYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmlzKFAubHRlKG51bGwpKSB9XSwgCisgICAgSW5qZWN0WG51bGxYX2d0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5pcyhQLmd0KG51bGwpKSB9XSwgCisgICAgSW5qZWN0WG51bGxYX2d0ZVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5ndGUobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9lcVhOYU5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmVxKE51bWJlci5OYU4pKSB9XSwgCisgICAgSW5qZWN0WE5hTlhfbmVxWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubmVxKE51bWJlci5OYU4pKSB9XSwgCisgICAgSW5qZWN0WE5hTlhfbHRYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5sdChOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFhOYU5YX2x0ZVhOYU5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmx0ZShOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFhOYU5YX2d0WE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZ3QoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9ndGVYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndGUoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYMWRYX2VxWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5lcShOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFgxZFhfbmVxWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5uZXEoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYMWRYX2x0WE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5sdChOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFgxZFhfbHRlWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5sdGUoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYMWRYX2d0WE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5ndChOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFgxZFhfZ3RlWE5hTlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5ndGUoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9lcVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZXEoMS4wKSkgfV0sIAorICAgIEluamVjdFhOYU5YX25lcVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubmVxKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9sdFgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubHQoMS4wKSkgfV0sIAorICAgIEluamVjdFhOYU5YX2x0ZVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubHRlKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9ndFgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZ3QoMS4wKSkgfV0sIAorICAgIEluamVjdFhOYU5YX2d0ZVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZ3RlKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2VxWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLjApLmlzKFAuZXEobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYMWRYX25lcVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLm5lcShudWxsKSkgfV0sIAorICAgIEluamVjdFgxZFhfbHRYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5sdChudWxsKSkgfV0sIAorICAgIEluamVjdFgxZFhfbHRlWG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLjApLmlzKFAubHRlKG51bGwpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9ndFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmd0KG51bGwpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9ndGVYbnVsbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5ndGUobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfZXFYMWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5pcyhQLmVxKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfbmVxWDFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoMS4wKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9sdFgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmlzKFAubHQoMS4wKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9sdGVYMWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKS5pcyhQLmx0ZSgxLjApKSB9XSwgCisgICAgSW5qZWN0WG51bGxYX2d0WDFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5ndCgxLjApKSB9XSwgCisgICAgSW5qZWN0WG51bGxYX2d0ZVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfZXFYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5lcShOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9uZXFYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfbHRYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5sdChOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9sdGVYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5sdGUoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYbnVsbFhfZ3RYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5ndChOdW1iZXIuTmFOKSkgfV0sIAorICAgIEluamVjdFhudWxsWF9ndGVYTmFOWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoTnVtYmVyLk5hTikpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9lcVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5lcShudWxsKSkgfV0sIAorICAgIEluamVjdFhOYU5YX25lcVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5uZXEobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9sdFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5sdChudWxsKSkgfV0sIAorICAgIEluamVjdFhOYU5YX2x0ZVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5sdGUobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYTmFOWF9ndFhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndChudWxsKSkgfV0sIAorICAgIEluamVjdFhOYU5YX2d0ZVhudWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndGUobnVsbCkpIH1dLCAKKyAgICBJbmplY3RYZm9vWF9lcVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmb28iKS5pcyhQLmVxKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYZm9vWF9uZXFYMWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiZm9vIikuaXMoUC5uZXEoMS4wKSkgfV0sIAorICAgIEluamVjdFhmb29YX2x0WDFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZvbyIpLmlzKFAubHQoMS4wKSkgfV0sIAorICAgIEluamVjdFhmb29YX2x0ZVgxZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJmb28iKS5pcyhQLmx0ZSgxLjApKSB9XSwgCisgICAgSW5qZWN0WGZvb1hfZ3RYMWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgiZm9vIikuaXMoUC5ndCgxLjApKSB9XSwgCisgICAgSW5qZWN0WGZvb1hfZ3RlWDFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoImZvbyIpLmlzKFAuZ3RlKDEuMCkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2VxWGZvb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5lcSgiZm9vIikpIH1dLCAKKyAgICBJbmplY3RYMWRYX25lcVhmb29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLjApLmlzKFAubmVxKCJmb28iKSkgfV0sIAorICAgIEluamVjdFgxZFhfbHRYZm9vWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmx0KCJmb28iKSkgfV0sIAorICAgIEluamVjdFgxZFhfbHRlWGZvb1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEuMCkuaXMoUC5sdGUoImZvbyIpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9ndFhmb29YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLjApLmlzKFAuZ3QoImZvbyIpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9ndGVYZm9vWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMS4wKS5pcyhQLmd0ZSgiZm9vIikpIH1dLCAKKyAgICBJbmplY3RYMWRYX2FuZFh0cnVlX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1h0cnVlX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmVxKDEpLmFuZChQLmd0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfYW5kWHRydWVfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1h0cnVlX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5lcSgxKS5hbmQoUC5sdCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2FuZFh0cnVlX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYdHJ1ZV9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAuZXEoMSkuYW5kKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9hbmRYZmFsc2VfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1hmYWxzZV90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkuYW5kKFAuZ3QoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9hbmRYZmFsc2VfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5hbmQoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYZmFsc2VfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5hbmQoUC5sdCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2FuZFhmYWxzZV9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1hmYWxzZV9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubmVxKDEpLmFuZChQLmx0KE51bWJlci5OYU4pKSkgfV0sIAorICAgIEluamVjdFgxZFhfYW5kWGVycm9yX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5hbmQoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLmlzKFAuZ3QoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1hlcnJvcl90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5hbmQoUC5ndCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2FuZFhlcnJvcl9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndCgyKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2lzWGVycm9yX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5hbmQoUC5ndCgyKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2FuZFhlcnJvcl9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndChOdW1iZXIuTmFOKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2lzWGVycm9yX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5hbmQoUC5ndChOdW1iZXIuTmFOKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX29yWHRydWVfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYdHJ1ZV9vcl90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5lcSgxKS5vcihQLmd0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfb3JYdHJ1ZV9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYdHJ1ZV9vcl9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAuZXEoMSkub3IoUC5sdCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX29yWHRydWVfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5vcihfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2lzWHRydWVfb3JfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLmVxKDEpLm9yKFAubHQoTnVtYmVyLk5hTikpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9vclhmYWxzZV90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYZmFsc2Vfb3JfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubmVxKDEpLm9yKFAuZ3QoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9vclhmYWxzZV9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm9yKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX2lzWGZhbHNlX29yX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkub3IoUC5sdCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX29yWGZhbHNlX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYZmFsc2Vfb3JfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5vcihQLmx0KE51bWJlci5OYU4pKSkgfV0sIAorICAgIEluamVjdFgxZFhfb3JYZXJyb3JfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm9yKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5pcyhQLmd0KDApKSkgfV0sIAorICAgIEluamVjdFgxZFhfaXNYZXJyb3Jfb3JfdHJ1ZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubHQoTnVtYmVyLk5hTikub3IoUC5ndCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX29yWGVycm9yX2ZhbHNlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLmlzKFAuZ3QoMikpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1hlcnJvcl9vcl9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubHQoTnVtYmVyLk5hTikub3IoUC5ndCgyKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX29yWGVycm9yX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkub3IoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLmlzKFAuZ3QoTnVtYmVyLk5hTikpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9pc1hlcnJvcl9vcl9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmlzKFAubHQoTnVtYmVyLk5hTikub3IoUC5ndChOdW1iZXIuTmFOKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX25vdFh0cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkubm90KF9fLmlzKFAuZ3QoMCkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF9ub3RYZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5ub3QoX18uaXMoUC5sdCgwKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX25vdFhOYU5YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5ub3QoX18uaXMoUC5ndChOdW1iZXIuTmFOKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX25vdFhpc1hlcVhOYU5YWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLm5vdChfXy5pcyhQLmVxKE51bWJlci5OYU4pKSkgfV0sIAorICAgIEluamVjdFgxZFhfbm90WG5vdFhpc1hlcVhOYU5YWFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5ub3QoX18ubm90KF9fLmlzKFAuZXEoTnVtYmVyLk5hTikpKSkgfV0sIAorICAgIEluamVjdFgxZFhfd2hlcmVYbm90WGlzWGx0WE5hTlhYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLndoZXJlKF9fLmluamVjdCgxKS5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF94b3JYdHJ1ZV90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSksIF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF94b3JYdHJ1ZV9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkgfV0sIAorICAgIEluamVjdFgxZFhfeG9yWHRydWVfZXJyb3JYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX3hvclhmYWxzZV90cnVlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSksIF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSkpKSB9XSwgCisgICAgSW5qZWN0WDFkWF94b3JYZmFsc2VfZmFsc2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX3hvclhmYWxzZV9lcnJvclg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkpLCBfXy5hbmQoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkgfV0sIAorICAgIEluamVjdFgxZFhfeG9yWGVycm9yX3RydWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSkpIH1dLCAKKyAgICBJbmplY3RYMWRYX3hvclhlcnJvcl9mYWxzZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkpKSkgfV0sIAorICAgIEluamVjdFgxZFhfeG9yWGVycm9yX2Vycm9yWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18ubm90KF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSksIF9fLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18ubm90KF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSkpKSB9XSwgCisgICAgSW5qZWN0WEluZlhfZXFYSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmVxKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIH1dLCAKKyAgICBJbmplY3RYSW5mWF9uZXFYSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLm5lcShOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB9XSwgCisgICAgSW5qZWN0WE5lZ0luZlhfZXFYTmVnSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmVxKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpIH1dLCAKKyAgICBJbmplY3RYTmVnSW5mWF9uZXFYTmVnSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLm5lcShOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSB9XSwgCisgICAgSW5qZWN0WEluZlhfZ3RYTmVnSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmd0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpIH1dLCAKKyAgICBJbmplY3RYSW5mWF9sdFhOZWdJbmZYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAubHQoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSkgfV0sIAorICAgIEluamVjdFhOZWdJbmZYX2x0WEluZlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkuaXMoUC5sdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSB9XSwgCisgICAgSW5qZWN0WE5lZ0luZlhfZ3RYSW5mWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmd0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIH1dLCAKKyAgICBQcmltaXRpdmVzX051bWJlcl9lcVhieXRlWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKKyAgICBQcmltaXRpdmVzX051bWJlcl9lcVhzaG9ydFg6IFtmdW5jdGlvbih7ZywgeHgxfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDEsIDEsIDEsIDEsIDEsIDEwMDAsIDEsIDFdKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSB9XSwgCisgICAgUHJpbWl0aXZlc19OdW1iZXJfZXFYaW50WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKKyAgICBQcmltaXRpdmVzX051bWJlcl9lcVhsb25nWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKKyAgICBQcmltaXRpdmVzX051bWJlcl9lcVhiaWdpbnRYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkgfV0sIAorICAgIFByaW1pdGl2ZXNfTnVtYmVyX2VxWGZsb2F0WDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIH1dLCAKKyAgICBQcmltaXRpdmVzX051bWJlcl9lcVhkb3VibGVYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkgfV0sIAorICAgIFByaW1pdGl2ZXNfTnVtYmVyX2VxWGJpZ2RlY2ltYWxYOiBbZnVuY3Rpb24oe2csIHh4MX0pIHsgcmV0dXJuIGcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkgfV0sIAorICAgIGdfVl92YWx1ZXNfb3JkZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygpLm9yZGVyKCkgfV0sIAorICAgIGdfVl9wcm9wZXJ0aWVzX29yZGVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSB9XSwgCisgICAgZ19WX3Byb3BlcnRpZXNfb3JkZXJfaWQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmlkKCkgfV0sIAorICAgIGdfRV9wcm9wZXJ0aWVzX29yZGVyX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLnByb3BlcnR5KCJhIiwgMTApLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkucHJvcGVydHkoImEiLCAxMSkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5wcm9wZXJ0eSgiYSIsIDEyKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJhIiwgMTMpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkucHJvcGVydHkoImEiLCAxNCkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKS5wcm9wZXJ0eSgiYSIsIDE1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkgfV0sIAorICAgIGdfRV9wcm9wZXJ0aWVzX29yZGVyX2J5WGRlc2NYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLnByb3BlcnR5KCJhIiwgMTApLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkucHJvcGVydHkoImEiLCAxMSkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5wcm9wZXJ0eSgiYSIsIDEyKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJhIiwgMTMpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkucHJvcGVydHkoImEiLCAxNCkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKS5wcm9wZXJ0eSgiYSIsIDE1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnZhbHVlKCkgfV0sIAorICAgIGdfRV9wcm9wZXJ0aWVzX29yZGVyOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUpLnByb3BlcnR5KCJhIiwgMTApLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMCkucHJvcGVydHkoImEiLCAxMSkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40KS5wcm9wZXJ0eSgiYSIsIDEyKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJhIiwgMTMpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkucHJvcGVydHkoImEiLCAxNCkuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yKS5wcm9wZXJ0eSgiYSIsIDE1KSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpIH1dLCAKKyAgICBnX0VfcHJvcGVydGllc19vcmRlcl9ieVhkZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJhbGljZSIpLmFzKCJhIikuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41KS5wcm9wZXJ0eSgiYSIsIDEwKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjApLnByb3BlcnR5KCJhIiwgMTEpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNCkucHJvcGVydHkoImEiLCAxMikuYWRkRSgic2VsZiIpLmZyb21fKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wKS5wcm9wZXJ0eSgiYSIsIDEzKS5hZGRFKCJzZWxmIikuZnJvbV8oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjQpLnByb3BlcnR5KCJhIiwgMTQpLmFkZEUoInNlbGYiKS5mcm9tXygiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuMikucHJvcGVydHkoImEiLCAxNSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSB9XSwgCisgICAgZ19pbmplY3Rfb3JkZXI6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCJ6enoiLCAiZm9vIiwgdXVpZC5wYXJzZSgiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxIiksIFsiYSIsICJiIiwgImMiLCAiZCJdLCAxLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMVQwMDowMFonKSwgWyJhIiwgImIiLCAiYyJdLCBuZXcgTWFwKFtbImEiLCAiYSJdLCBbImIiLCAiYiJdXSksIG51bGwsIDIuMCwgbmV3IERhdGUoJzIwMjMtMDEtMDFUMDA6MDBaJyksIG5ldyBTZXQoWyJ4IiwgInkiLCAieiJdKSwgbmV3IE1hcChbWyJhIiwgImEiXSwgWyJiIiwgZmFsc2VdLCBbImMiLCAiYyJdXSksICJiYXIiLCB1dWlkLnBhcnNlKCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEiKSwgdHJ1ZSwgZmFsc2UsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgTnVtYmVyLk5hTiwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5vcmRlcigpIH1dLCAKKyAgICBnX2luamVjdF9vcmRlcl9ieVhkZXNjWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoInp6eiIsICJmb28iLCB1dWlkLnBhcnNlKCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEiKSwgWyJhIiwgImIiLCAiYyIsICJkIl0sIDEsIG5ldyBEYXRlKCcyMDIzLTA4LTAxVDAwOjAwWicpLCBbImEiLCAiYiIsICJjIl0sIG5ldyBNYXAoW1siYSIsICJhIl0sIFsiYiIsICJiIl1dKSwgbnVsbCwgMi4wLCBuZXcgRGF0ZSgnMjAyMy0wMS0wMVQwMDowMFonKSwgbmV3IFNldChbIngiLCAieSIsICJ6Il0pLCBuZXcgTWFwKFtbImEiLCAiYSJdLCBbImIiLCBmYWxzZV0sIFsiYyIsICJjIl1dKSwgImJhciIsIHV1aWQucGFyc2UoIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMSIpLCB0cnVlLCBmYWxzZSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBOdW1iZXIuTmFOLCBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykgfV0sIAorICAgIGdfVl9vdXRfb3V0X29yZGVyX2J5WGFzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSB9XSwgCisgICAgZ19WX291dF9vdXRfb3JkZXJfYnlYZGVzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykgfV0sIAorICAgIGdfVl9vdXRfb3V0X2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYYXNjWF9zZWxlY3RYaGVhZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoImhlYWQiKSB9XSwgCisgICAgZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KCJoZWFkIikgfV0sIAorICAgIGdfVl9vdXRfb3V0RV9vcmRlcl9ieVhhc2NYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXRFKCkub3JkZXIoKS5ieShPcmRlci5hc2MpIH1dLCAKKyAgICBnX1Zfb3V0X291dEVfb3JkZXJfYnlYZGVzY1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dEUoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIH1dLCAKKyAgICBnX1Zfb3V0X291dEVfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0RSgpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoImhlYWQiKSB9XSwgCisgICAgZ19WX291dF9vdXRFX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXRFKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoImhlYWQiKSB9XSwgCisgICAgZ19WX291dF9vdXRfcHJvcGVydGllc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYX3ZhbHVlOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdCgiaGVhZCIpLnZhbHVlKCkgfV0sIAorICAgIGdfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFhfdmFsdWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnByb3BlcnRpZXMoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdCgiaGVhZCIpLnZhbHVlKCkgfV0sIAorICAgIGdfVl9vdXRfb3V0X3ZhbHVlc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS52YWx1ZXMoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KCJoZWFkIikgfV0sIAorICAgIGdfVl9vdXRfb3V0X3ZhbHVlc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoImhlYWQiKSB9XSwgCisgICAgZ19WX3ZhbHVlWG5hbWVYX2FnZ3JlZ2F0ZVh4WF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLmFnZ3JlZ2F0ZSgieCIpLmNhcCgieCIpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWHhYX2J5WG5hbWVYX2NhcFh4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJ4IikuYnkoIm5hbWUiKS5jYXAoIngiKSB9XSwgCisgICAgZ19WX291dF9hZ2dyZWdhdGVYYVhfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkuYWdncmVnYXRlKCJhIikucGF0aCgpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hZ2dyZWdhdGVYeFhfYnlYYWdlWF9jYXBYeFhfYXNYeVhfc2VsZWN0WHlYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYWdncmVnYXRlKCJ4IikuYnkoImFnZSIpLmNhcCgieCIpLmFzKCJ5Iikuc2VsZWN0KCJ5IikgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYeFhfYnlYYWdlWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJhZ2UiKS5jYXAoIngiKSB9XSwgCisgICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVh4WF9ieVhhZ2VYWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJhZ2UiKSkuY2FwKCJ4IikgfV0sIAorICAgIGdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfbG9jYWxYYWdncmVnYXRlWHhYX2J5WGFnZVhYX2NhcFh4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJhZ2UiKSkuY2FwKCJ4IikgfV0sIAorICAgIGdfVl9sb2NhbFhfYWdncmVnYXRlWGFfYnlYbmFtZVhYX291dF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJuYW1lIikpLm91dCgpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZYMVhfbG9jYWxYYWdncmVnYXRlWGFYX2J5WG5hbWVYWF9vdXRfbG9jYWxYYWdncmVnYXRlWGFYX2J5WG5hbWVYWF9uYW1lX2NhcFhhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJuYW1lIikpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJuYW1lIikpLnZhbHVlcygibmFtZSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfc2V0WF9WX2JvdGhfbmFtZV9sb2NhbFhhZ2dyZWdhdGVYX2FYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS52YWx1ZXMoIm5hbWUiKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV9zZXRfaW5saW5lWF9WX2JvdGhfbmFtZV9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIG5ldyBTZXQoWyJhbGljZSJdKSkuVigpLmJvdGgoKS52YWx1ZXMoIm5hbWUiKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfVl9sb2NhbFhhZ2dyZWdhdGVYYVhfYnlYb3V0RVhjcmVhdGVkWF9jb3VudFhYX291dF9vdXRfbG9jYWxYYWdncmVnYXRlWGFYX2J5WGluRVhjcmVhdGVkWF93ZWlnaHRfc3VtWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieShfXy5vdXRFKCJjcmVhdGVkIikuY291bnQoKSkpLm91dCgpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KF9fLmluRSgiY3JlYXRlZCIpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVh4WF9ieVh2YWx1ZXNYYWdlWF9pc1hndFgyOVhYWF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KF9fLnZhbHVlcygiYWdlIikuaXMoUC5ndCgyOSkpKS5jYXAoIngiKSB9XSwgCisgICAgZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYeFhfYnlYdmFsdWVzWGFnZVhfaXNYZ3RYMjlYWFhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCJ4IikuYnkoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmd0KDI5KSkpLmNhcCgieCIpIH1dLCAKKyAgICBnX1ZfYWdncmVnYXRlWHhYX2J5WG91dF9vcmRlcl9ieVhuYW1lWFhfY2FwWHhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIikpLmNhcCgieCIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVh4WF9ieVhvdXRfb3JkZXJfYnlYbmFtZVhYX2NhcFh4WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkuY2FwKCJ4IikgfV0sIAorICAgIGdfVl9hZ2dyZWdhdGVYYVhfaGFzWHBlcnNvbl9hZ2VfZ3RlWDMwWFhYX2NhcFhhWF91bmZvbGRfdmFsdWVzWG5hbWVYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5oYXMoInBlcnNvbiIsICJhZ2UiLCBQLmd0ZSgzMCkpLmNhcCgiYSIpLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV9zdW1YX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMSwgT3BlcmF0b3Iuc3VtKS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV9zdW1YX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMTIzX21pbnVzWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEyMywgT3BlcmF0b3IubWludXMpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xMjNfbWludXNYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhXzJfbXVsdFhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAyLCBPcGVyYXRvci5tdWx0KS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMl9tdWx0WF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV84NzY5NjBfZGl2WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfODc2OTYwX2RpdlhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhXzFfbWluWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEsIE9wZXJhdG9yLm1pbikuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhXzFfbWluWF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMSwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhXzEwMF9taW5YX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMTAwLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xMDBfbWluWF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMTAwLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV9tYXhYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgMSwgT3BlcmF0b3IubWF4KS5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMV9tYXhYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfMTAwX21heFhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAxMDAsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhXzEwMF9tYXhYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIDEwMCwgT3BlcmF0b3IubWF4KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhX3RydWVfYW5kWF9WX2NvbnN0YW50WGZhbHNlWF9hZ2dyZWdhdGVYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgdHJ1ZSwgT3BlcmF0b3IuYW5kKS5WKCkuY29uc3RhbnQoZmFsc2UpLmFnZ3JlZ2F0ZSgiYSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfdHJ1ZV9hbmRYX1ZfY29uc3RhbnRYZmFsc2VYX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV90cnVlX29yWF9WX2NvbnN0YW50WGZhbHNlWF9hZ2dyZWdhdGVYYVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgdHJ1ZSwgT3BlcmF0b3Iub3IpLlYoKS5jb25zdGFudChmYWxzZSkuYWdncmVnYXRlKCJhIikuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV90cnVlX29yWF9WX2NvbnN0YW50WGZhbHNlWF9sb2NhbFhhZ2dyZWdhdGVYX2FYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCB0cnVlLCBPcGVyYXRvci5vcikuVigpLmNvbnN0YW50KGZhbHNlKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xXzJfM19hZGRBbGxYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgWzEsIDIsIDNdLCBPcGVyYXRvci5hZGRBbGwpLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xXzJfM19hZGRBbGxYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFkZEFsbCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xXzJfM19hc3NpZ25YX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgWzEsIDIsIDNdLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAorICAgIGdfd2l0aFNpZGVFZmZlY3RYYV8xXzJfM19hc3NpZ25YX1Zfb3JkZXJfYnlYYWdlWF9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIFsxLCAyLCAzXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkub3JkZXIoKS5ieSgiYWdlIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikuYnkoImFnZSIpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhX25hbWVYWF9vdXRfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKS5ieSgibmFtZSIpKS5vdXQoKS5jYXAoImEiKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFhhX3NldFhfVl9ib3RoX25hbWVfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS52YWx1ZXMoIm5hbWUiKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dEVfaW5WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYX3VuZm9sZF9kZWR1cDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLm91dEUoKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikudW5mb2xkKCkuZGVkdXAoKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHBlcnNvblhfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRYY3JlYXRlZFhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkub3V0KCJjcmVhdGVkIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfbG9jYWxYYWdncmVnYXRlWGFYWF9yZXBlYXRYb3V0X2xvY2FsWGFnZ3JlZ2F0ZVhhWFhYX3RpbWVzWDJYX2NhcFhhWF91bmZvbGRfZ3JvdXBDb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLnJlcGVhdChfXy5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkpLnRpbWVzKDIpLmNhcCgiYSIpLnVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmdyb3VwQ291bnQoKSB9XSwgCisgICAgZ19WX2hhc1huYW1lX21hcmtvWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dFhrbm93c1hfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRYY3JlYXRlZFhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXQoImtub3dzIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLm91dCgiY3JlYXRlZCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2luWGNyZWF0ZWRYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0WGtub3dzWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmluXygiY3JlYXRlZCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXQoImtub3dzIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRFX2hhc1h3ZWlnaHRfbGd0WDBfNVhYX2luVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWF91bmZvbGRfcGF0aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLm91dEUoKS5oYXMoIndlaWdodCIsIFAuZ3QoMC41KSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpLnVuZm9sZCgpLnBhdGgoKSB9XSwgCisgICAgZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfYm90aEVfc2FtcGxlWDFYX290aGVyVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWF91bmZvbGRfZ3JvdXBDb3VudF9ieVhsYWJlbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5ib3RoRSgpLnNhbXBsZSgxKS5vdGhlclYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikudW5mb2xkKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dEVfaW5WX3NpbXBsZVBhdGhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVhfdW5mb2xkX2hhc0xhYmVsWHNvZnR3YXJlWF9jb3VudDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXRFKCkuaW5WKCkuc2ltcGxlUGF0aCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKS51bmZvbGQoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5jb3VudCgpIH1dLCAKKyAgICBnX1ZfbG9jYWxYYWdncmVnYXRlWGFYWF91bmlvblhvdXRfaW5YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYX3VuZm9sZF9kZWR1cF92YWx1ZXNYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS51bmlvbihfXy5vdXQoKSwgX18uaW5fKCkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5jYXAoImEiKS51bmZvbGQoKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpIH1dLCAKKyAgICBnX1ZfaGFzWG5hbWVfam9zaFhfbG9jYWxYYWdncmVnYXRlWGFYWF9vdXRFX2hhc1h3ZWlnaHRfbHRYMV8wWFhfaW5WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9pblZfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJqb3NoIikubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLm91dEUoKS5oYXMoIndlaWdodCIsIFAubHQoMS4wKSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLm91dEUoKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoImEiKSkuY2FwKCJhIikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhwZXJzb25YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9vcmRlcl9ieVh3ZWlnaHRYX2xpbWl0WDFYX2luVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgiYSIpKS5vdXRFKCkub3JkZXIoKS5ieSgid2VpZ2h0IikubGltaXQoMSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKCJhIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGFnZ3JlZ2F0ZVhhWFhfdGltZXNYMlhfY2FwWGFYX3VuZm9sZDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmFnZ3JlZ2F0ZSgiYSIpKS50aW1lcygyKS5jYXAoImEiKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVhhWF9jYXBYYVhfdW5mb2xkX2JvdGg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmNhcCgiYSIpLnVuZm9sZCgpLmJvdGgoKSB9XSwgCisgICAgZ19WX2FnZ3JlZ2F0ZVhhWF9jYXBYYVhfdW5mb2xkX2JhcnJpZXJfYm90aDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuY2FwKCJhIikudW5mb2xkKCkuYmFycmllcigpLmJvdGgoKSB9XSwgCisgICAgZ19WX2ZhaWw6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmZhaWwoKSB9XSwgCisgICAgZ19WX2ZhaWxYbXNnWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZmFpbCgibXNnIikgfV0sIAorICAgIGdfVl91bmlvblhvdXRfZmFpbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5mYWlsKCkpIH1dLCAKKyAgICBnX1ZfZ3JvdXBfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoImFnZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2dyb3VwX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5ncm91cCgpLmJ5KCJhZ2UiKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WG5hbWVYX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVl9ncm91cF9ieVhuYW1lWF9ieTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieSgibmFtZSIpLmJ5KCkgfV0sIAorICAgIGdfVl9oYXNYbGFuZ1hfZ3JvdXBfYnlYbGFuZ1hfYnlYY291bnRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImxhbmciKS5ncm91cCgpLmJ5KCJsYW5nIikuYnkoX18uY291bnQoKSkgfV0sIAorICAgIGdfVl9ncm91cF9ieVhvdXRFX2NvdW50WF9ieVhuYW1lWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3JkZXIoKS5ieSgibmFtZSIpLmdyb3VwKCkuYnkoX18ub3V0RSgpLmNvdW50KCkpLmJ5KCJuYW1lIikgfV0sIAorICAgIGdfVl9yZXBlYXRYYm90aFhmb2xsb3dlZEJ5WFhfdGltZXNYMlhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGNvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLmJvdGgoImZvbGxvd2VkQnkiKSkudGltZXMoMikuZ3JvdXAoKS5ieSgic29uZ1R5cGUiKS5ieShfXy5jb3VudCgpKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WHZhbHVlc1huYW1lWF9zdWJzdHJpbmdYMVhYX2J5WGNvbnN0YW50WDFYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKSB9XSwgCisgICAgZ19WX291dF9ncm91cF9ieVhsYWJlbFhfc2VsZWN0WHBlcnNvblhfdW5mb2xkX291dFhjcmVhdGVkWF9uYW1lX2xpbWl0WDJYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoKS5ncm91cCgpLmJ5KFQubGFiZWwpLnNlbGVjdCgicGVyc29uIikudW5mb2xkKCkub3V0KCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikubGltaXQoMikgfV0sIAorICAgIGdfVl9oYXNMYWJlbFhzb25nWF9ncm91cF9ieVhuYW1lWF9ieVhwcm9wZXJ0aWVzX2dyb3VwQ291bnRfYnlYbGFiZWxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvbmciKS5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18ucHJvcGVydGllcygpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSkgfV0sIAorICAgIGdfVl9vdXRYZm9sbG93ZWRCeVhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGJvdGhFX2dyb3VwX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiZm9sbG93ZWRCeSIpLmdyb3VwKCkuYnkoInNvbmdUeXBlIikuYnkoX18uYm90aEUoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV9ncm91cFhhWF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhfd2VpZ2h0X3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS5ncm91cCgiYSIpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpIH1dLCAKKyAgICBnX3dpdGhTaWRlRWZmZWN0WGFfX21hcmtvXzY2Nl9ub29uZV9ibGFoWF9WX2dyb3VwWGFYX2J5WG5hbWVYX2J5WG91dEVfbGFiZWxfZm9sZFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgbmV3IE1hcChbWyJtYXJrbyIsIFsiNjY2Il1dLCBbIm5vb25lIiwgWyJibGFoIl1dXSkpLlYoKS5ncm91cCgiYSIpLmJ5KCJuYW1lIikuYnkoX18ub3V0RSgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoImEiKS51bmZvbGQoKS5ncm91cCgpLmJ5KENvbHVtbi5rZXlzKS5ieShfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykub3JkZXIoU2NvcGUubG9jYWwpLmJ5KE9yZGVyLmFzYykpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9vdXRYY3JlYXRlZFhfZ3JvdXBfYnlYbmFtZVhfYnlYc2VsZWN0WHBYX3ZhbHVlc1hhZ2VYX3N1bVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5hcygicCIpLm91dCgiY3JlYXRlZCIpLmdyb3VwKCkuYnkoIm5hbWUiKS5ieShfXy5zZWxlY3QoInAiKS52YWx1ZXMoImFnZSIpLnN1bSgpKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cF9ieV9ieVhvdXRfb3JkZXJfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCBQLndpdGhpbigidmFkYXMiLCAicGV0ZXIiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cF9ieV9ieVhvdXRfZm9sZFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCBQLndpdGhpbigidmFkYXMiLCAicGV0ZXIiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X29yZGVyWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFAud2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkgfV0sIAorICAgIGdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X29yZGVyX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFAud2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5jb3VudCgpKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cF9ieV9ieVhvdXRfb3JkZXJfZm9sZF9jb3VudFhsb2NhbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgUC53aXRoaW4oInZhZGFzIiwgInBldGVyIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkpIH1dLCAKKyAgICBnX1ZfZ3JvdXBfYnlfYnlYb3V0X2xhYmVsX2ZvbGRYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5X2J5WG91dF9sYWJlbF9kZWR1cF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5X2J5WG91dF9sYWJlbF9saW1pdFgwWF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfZ3JvdXBfYnlfYnlYb3V0X2xhYmVsX2xpbWl0WDEwWF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgxMCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfZ3JvdXBfYnlfYnlYb3V0X2xhYmVsX3RhaWxYMTBYX2ZvbGRYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2dyb3VwWGFYX2J5WG5hbWVYX2J5X3NlbGVjdFhhWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5ieSgpLnNlbGVjdCgiYSIpLmNvdW50KFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2xvY2FsWGdyb3VwWGFYX2J5WG5hbWVYX2J5X3NlbGVjdFhhWF9jb3VudFhsb2NhbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5ncm91cCgiYSIpLmJ5KCJuYW1lIikuYnkoKS5zZWxlY3QoImEiKS5jb3VudChTY29wZS5sb2NhbCkpIH1dLCAKKyAgICBnX1ZfZ3JvdXBfYnlYdmFsdWVzWG5hbWVYWF9ieVhib3RoX2NvdW50WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkuYnkoX18uYm90aCgpLmNvdW50KCkpIH1dLCAKKyAgICBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRfYnlYbmFtZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwQ291bnQoKS5ieSgibmFtZSIpIH1dLCAKKyAgICBnX1ZfZ3JvdXBDb3VudF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cENvdW50KCkuYnkoImFnZSIpIH1dLCAKKyAgICBnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2dyb3VwQ291bnRfYnlYYWdlWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmdyb3VwQ291bnQoKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVl9vdXRYY3JlYXRlZFhfbmFtZV9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS52YWx1ZXMoIm5hbWUiKS5ncm91cENvdW50KCkgfV0sIAorICAgIGdfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwQ291bnQoImEiKS5ieSgibmFtZSIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudFhhWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpLmdyb3VwQ291bnQoImEiKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX3JlcGVhdFhvdXRfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWFhfdGltZXNYMlhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudCgiYSIpLmJ5KCJuYW1lIikpLnRpbWVzKDIpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfYm90aF9ncm91cENvdW50WGFYX2J5WGxhYmVsWF9hc1hiWF9iYXJyaWVyX3doZXJlWHNlbGVjdFhhWF9zZWxlY3RYc29mdHdhcmVYX2lzWGd0WDJYWFhfc2VsZWN0WGJYX25hbWU6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmJvdGgoKS5ncm91cENvdW50KCJhIikuYnkoVC5sYWJlbCkuYXMoImIiKS5iYXJyaWVyKCkud2hlcmUoX18uc2VsZWN0KCJhIikuc2VsZWN0KCJzb2Z0d2FyZSIpLmlzKFAuZ3QoMikpKS5zZWxlY3QoImIiKS52YWx1ZXMoIm5hbWUiKSB9XSwgCisgICAgZ19WX3VuaW9uWG91dFhrbm93c1hfX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS51bmlvbihfXy5vdXQoImtub3dzIiksIF9fLm91dCgiY3JlYXRlZCIpLmluXygiY3JlYXRlZCIpKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnN1bSgpIH1dLCAKKyAgICBnX1ZfaGFzWG5vWF9ncm91cENvdW50OiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoIm5vIikuZ3JvdXBDb3VudCgpIH1dLCAKKyAgICBnX1ZfaGFzWG5vWF9ncm91cENvdW50WGFYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJubyIpLmdyb3VwQ291bnQoImEiKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX3VuaW9uWHJlcGVhdFhvdXRYX3RpbWVzWDJYX2dyb3VwQ291bnRYbVhfYnlYbGFuZ1hYX19yZXBlYXRYaW5YX3RpbWVzWDJYX2dyb3VwQ291bnRYbVhfYnlYbmFtZVhYX2NhcFhtWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5ncm91cENvdW50KCJtIikuYnkoImxhbmciKSwgX18ucmVwZWF0KF9fLmluXygpKS50aW1lcygyKS5ncm91cENvdW50KCJtIikuYnkoIm5hbWUiKSkuY2FwKCJtIikgfV0sIAorICAgIGdfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFh4WF9jYXBYeFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwQ291bnQoIngiKS5jYXAoIngiKSB9XSwgCisgICAgZ19WX2dyb3VwQ291bnRfYnlYYm90aEVfY291bnRYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cENvdW50KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKSB9XSwgCisgICAgZ19WX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfb3V0X2NhcFhhWF9zZWxlY3RYa2V5c1hfdW5mb2xkX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudCgiYSIpKS5vdXQoKS5jYXAoImEiKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KCJhIikpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9ib3RoWGtub3dzWF9ncm91cENvdW50X2J5WHZhbHVlc1huYW1lWF9mb2xkWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLmJvdGgoImtub3dzIikuZ3JvdXBDb3VudCgpLmJ5KF9fLnZhbHVlcygibmFtZSIpLmZvbGQoKSkgfV0sIAorICAgIGdfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudF9ieVhuYW1lWF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFh4WF9ieVhuYW1lWF9ieVhhZ2VYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS5ncm91cENvdW50KCJ4IikuYnkoIm5hbWUiKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVl9ncm91cENvdW50WGFYX3NlbGVjdFhhWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwQ291bnQoImEiKS5zZWxlY3QoImEiKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9sb2NhbFhncm91cENvdW50WGFYX3NlbGVjdFhhWF9jb3VudFhsb2NhbFhYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5sb2NhbChfXy5ncm91cENvdW50KCJhIikuc2VsZWN0KCJhIikuY291bnQoU2NvcGUubG9jYWwpKSB9XSwgCisgICAgZ19WWDFYX291dF9uYW1lX2luamVjdFhkYW5pZWxYX2FzWGFYX21hcFhsZW5ndGhYX3BhdGg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS52YWx1ZXMoIm5hbWUiKS5pbmplY3QoImRhbmllbCIpLmFzKCJhIikubWFwKF9fLmxlbmd0aCgpKS5wYXRoKCkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxfMV8zX251bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsLCAxLCAzLCBudWxsKSB9XSwgCisgICAgZ19pbmplY3RYMTBfMjBfbnVsbF8yMF8xMF8xMFhfZ3JvdXBDb3VudFh4WF9kZWR1cF9hc1h5WF9wcm9qZWN0WGFfYlhfYnlfYnlYc2VsZWN0WHhYX3NlbGVjdFhzZWxlY3RYeVhYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoMTAsIDIwLCBudWxsLCAyMCwgMTAsIDEwKS5ncm91cENvdW50KCJ4IikuZGVkdXAoKS5hcygieSIpLnByb2plY3QoImEiLCAiYiIpLmJ5KCkuYnkoX18uc2VsZWN0KCJ4Iikuc2VsZWN0KF9fLnNlbGVjdCgieSIpKSkgfV0sIAorICAgIGdfaW5qZWN0WG5hbWVfbWFya29fYWdlX251bGxYX3NlbGVjdFhuYW1lX2FnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBNYXAoW1sibmFtZSIsICJtYXJrbyJdLCBbImFnZSIsIG51bGxdXSkpLnNlbGVjdCgibmFtZSIsICJhZ2UiKSB9XSwgCisgICAgZ19pbmplY3RYbnVsbF9udWxsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobnVsbCwgbnVsbCkgfV0sIAorICAgIGdfaW5qZWN0WG51bGxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdChudWxsKSB9XSwgCisgICAgZ19pbmplY3Q6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KCkgfV0sIAorICAgIGdfVlgxWF92YWx1ZXNYYWdlWF9pbmplY3RYbnVsbF9udWxsWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoeHgxKS52YWx1ZXMoImFnZSIpLmluamVjdChudWxsLCBudWxsKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdFhudWxsWDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoeHgxKS52YWx1ZXMoImFnZSIpLmluamVjdChudWxsKSB9XSwgCisgICAgZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdDogW2Z1bmN0aW9uKHtnLCB4eDF9KSB7IHJldHVybiBnLlYoeHgxKS52YWx1ZXMoImFnZSIpLmluamVjdCgpIH1dLCAKKyAgICBnX2luamVjdFhudWxsXzFfM19udWxsWF9hc1hhWF9zZWxlY3RYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpLmFzKCJhIikuc2VsZWN0KCJhIikgfV0sIAorICAgIGdfaW5qZWN0WDFfM1hfaW5qZWN0WDEwMF8zMDBYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmluamVjdCgxLCAzKS5pbmplY3QoMTAwLCAzMDApIH1dLCAKKyAgICBnX2luamVjdFgxXzNfMTAwXzMwMFhfbGlzdDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QoWzEsIDMsIDEwMCwgMzAwXSkgfV0sIAorICAgIGdfaW5qZWN0WDFfM18xMDBfMzAwWF9zZXQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW5qZWN0KG5ldyBTZXQoWzEsIDMsIDEwMCwgMzAwXSkpIH1dLCAKKyAgICBnX2luamVjdFgxXzFYX3NldDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbmplY3QobmV3IFNldChbMSwgMV0pKSB9XSwgCisgICAgZ19pb19yZWFkWGtyeW9YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmlvKCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5byIpLnJlYWQoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfaW9fcmVhZF93aXRoWHJlYWRlcl9ncnlvWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbygiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmtyeW8iKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyeW8pLnJlYWQoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfaW9fcmVhZFhncmFwaHNvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uIikucmVhZCgpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLkUoKSB9XSwgCisgICAgZ19pb19yZWFkX3dpdGhYcmVhZGVyX2dyYXBoc29uWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5pbygiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmpzb24iKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKKyAgICBnX2lvX3JlYWRYZ3JhcGhtbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oImRhdGEvdGlua2VycG9wLW1vZGVybi54bWwiKS5yZWFkKCkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuRSgpIH1dLCAKKyAgICBnX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3JhcGhtbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oImRhdGEvdGlua2VycG9wLW1vZGVybi54bWwiKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyYXBobWwpLnJlYWQoKSB9LCBmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMTI3YlhfaW5qZWN0WDFiWF9zYWNrWHN1bVhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygxMjcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIH1dLCAKKyAgICBnX3dpdGhTYWNrWDMyNzY3c1hfaW5qZWN0WDFzWF9zYWNrWHN1bVhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygzMjc2NykuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMjE0NzQ4MzY0N2lYX2luamVjdFgxaVhfc2Fja1hzdW1YX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMjE0NzQ4MzY0NykuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9zYWNrWHN1bVhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIH1dLCAKKyAgICBnX3dpdGhTYWNrWF8xMjhiWF9pbmplY3RYMWJYX3NhY2tYbWludXNYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soLTEyOCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1hfMzI3NjhzWF9pbmplY3RYMXNYX3NhY2tYbWludXNYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soLTMyNzY4KS5pbmplY3QoMSkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIH1dLCAKKyAgICBnX3dpdGhTYWNrWF8yMTQ3NDgzNjQ4aVhfaW5qZWN0WDFpWF9zYWNrWG1pbnVzWF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKC0yMTQ3NDgzNjQ4KS5pbmplY3QoMSkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIH1dLCAKKyAgICBnX3dpdGhTYWNrWF8xXzc5NzY5MzEzNDg2MjMxNTdFXzMwOGRYX2luamVjdFgxXzc5NzY5MzEzNDg2MjMxNTdFXzMwOGRYX3NhY2tYbWludXNYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soLTEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5pbmplY3QoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1gxMjdiWF9pbmplY3RYMmJYX3NhY2tYbXVsdFhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygxMjcpLmluamVjdCgyKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1gzMjc2N3NYX2luamVjdFgyc1hfc2Fja1htdWx0WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDMyNzY3KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMjE0NzQ4MzY0N2lYX2luamVjdFgyaVhfc2Fja1htdWx0WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDIxNDc0ODM2NDcpLmluamVjdCgyKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1gxXzc5NzY5MzEzNDg2MjMxNTdFXzMwOGRYX2luamVjdFgyZFhfc2Fja1htdWx0WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMTI3YlhfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDEyNykuaW5qZWN0KDAuNSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1gzMjc2N3NYX2luamVjdFgwXzVmWF9zYWNrWGRpdlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygzMjc2NykuaW5qZWN0KDAuNSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1gyMTQ3NDgzNjQ3aVhfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDIxNDc0ODM2NDcpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMF81ZFhfc2Fja1hkaXZYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYXzEyOGJYX2luamVjdFhfMWJYX3NhY2tYZGl2WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKC0xMjgpLmluamVjdCgtMSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1hfMzI3NjhzWF9pbmplY3RYXzFzWF9zYWNrWGRpdlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygtMzI3NjgpLmluamVjdCgtMSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1hfMjE0NzQ4MzY0OGlYX2luamVjdFhfMWlYX3NhY2tYZGl2WF9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKC0yMTQ3NDgzNjQ4KS5pbmplY3QoLTEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYaGVsbG9YX1Zfb3V0RV9zYWNrWGFzc2lnblhfYnlYbGFiZWxYX2luVl9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKCJoZWxsbyIpLlYoKS5vdXRFKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KFQubGFiZWwpLmluVigpLnNhY2soKSB9XSwgCisgICAgZ193aXRoU2Fja1gwWF9WX291dEVfc2Fja1hzdW1YX2J5WHdlaWdodFhfaW5WX3NhY2tfc3VtOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDAuMCkuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoIndlaWdodCIpLmluVigpLnNhY2soKS5zdW0oKSB9XSwgCisgICAgZ193aXRoU2Fja1gwWF9WX3JlcGVhdFhvdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVlhfdGltZXNYMlhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygwLjApLlYoKS5yZXBlYXQoX18ub3V0RSgpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgid2VpZ2h0IikuaW5WKCkpLnRpbWVzKDIpLnNhY2soKSB9XSwgCisgICAgZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfYmFycmllclhub3JtU2Fja1hfaW5WWF9pblhrbm93c1hfYmFycmllcl9zYWNrOiBbZnVuY3Rpb24oe2csIHZpZDF9KSB7IHJldHVybiBnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLjAsIE9wZXJhdG9yLnN1bSkuVih2aWQxKS5sb2NhbChfXy5vdXRFKCJrbm93cyIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykuaW5WKCkpLmluXygia25vd3MiKS5iYXJyaWVyKCkuc2FjaygpIH1dLCAKKyAgICBnX3dpdGhCdWxrWGZhbHNlWF93aXRoU2Fja1gxX3N1bVhfVl9vdXRfYmFycmllcl9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLCBPcGVyYXRvci5zdW0pLlYoKS5vdXQoKS5iYXJyaWVyKCkuc2FjaygpIH1dLCAKKyAgICBnX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dFhrbm93c1hfYmFycmllclhub3JtU2Fja1hYX2luWGtub3dzWF9iYXJyaWVyX3NhY2s6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcud2l0aFNhY2soMS4wLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0KCJrbm93cyIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluXygia25vd3MiKS5iYXJyaWVyKCkuc2FjaygpIH1dLCAKKyAgICBnX1Zfc2Fja1hhc3NpZ25YX2J5WGFnZVhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KCJhZ2UiKS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYQmlnSW50ZWdlcl9URU5fcG93WDEwMDBYX2Fzc2lnblhfVl9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLndpdGhTYWNrKDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5sb2NhbChfXy5vdXQoImtub3dzIikuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW5fKCJrbm93cyIpLmJhcnJpZXIoKS5zYWNrKCkgfV0sIAorICAgIGdfd2l0aFNhY2tYMlhfVl9zYWNrWGRpdlhfYnlYY29uc3RhbnRYNF8wWFhfc2FjazogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy53aXRoU2FjaygyKS5WKCkuc2FjayhPcGVyYXRvci5kaXYpLmJ5KF9fLmNvbnN0YW50KDQuMCkpLnNhY2soKSB9XSwgCisgICAgZ19WX3NhY2tYYXNzaWduWF9ieVhhZ2VYX2J5WG5hbWVYX3NhY2s6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieSgiYWdlIikuYnkoIm5hbWUiKS5zYWNrKCkgfV0sIAorICAgIGdfVl9zaWRlRWZmZWN0WGlkZW50aXR5WDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2lkZUVmZmVjdChfXy5pZGVudGl0eSgpKSB9XSwgCisgICAgZ19WX3NpZGVFZmZlY3RYaWRlbnRpdHlfdmFsdWVzWG5hbWVYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2lkZUVmZmVjdChfXy5pZGVudGl0eSgpLnZhbHVlcygibmFtZSIpKSB9XSwgCisgICAgZ19WX3NpZGVFZmZlY3RYcHJvcGVydHlYc2luZ2xlX2FnZV8yMlg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAiYWdlIiwgMjEpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuc2lkZUVmZmVjdChfXy5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICJhZ2UiLCAyMikpIH0sIGZ1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCAyMSkgfSwgZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImFnZSIsIDIyKSB9XSwgCisgICAgZ19WX2dyb3VwX2J5WHZhbHVlc1huYW1lWF9zaWRlRWZmZWN0WGNvbnN0YW50WHp5eFhYX3N1YnN0cmluZ1gxWFhfYnlYY29uc3RhbnRYMVhfc2lkZUVmZmVjdFhjb25zdGFudFh4eXpYWFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKCJuYW1lIikuc2lkZUVmZmVjdChfXy5jb25zdGFudCgienl4IikpLnN1YnN0cmluZygwLCAxKSkuYnkoX18uY29uc3RhbnQoMSkuc2lkZUVmZmVjdChfXy5jb25zdGFudCgieHl6IikpKSB9XSwgCisgICAgZ193aXRoU2lkZUVmZmVjdFh4X3NldFhfVl9ib3RoX2JvdGhfc2lkZUVmZmVjdFhsb2NhbFhhZ2dyZWdhdGVYeFhfYnlYbmFtZVhYX2NhcFh4WF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoIngiLCBuZXcgU2V0KFtdKSkuVigpLmJvdGgoKS5ib3RoKCkuc2lkZUVmZmVjdChfXy5sb2NhbChfXy5hZ2dyZWdhdGUoIngiKS5ieSgibmFtZSIpKSkuY2FwKCJ4IikudW5mb2xkKCkgfV0sIAorICAgIGdfVl9oYXNYYWdlWF9ncm91cENvdW50WGFYX2J5WG5hbWVYX291dF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhcygiYWdlIikuZ3JvdXBDb3VudCgiYSIpLmJ5KCJuYW1lIikub3V0KCkuY2FwKCJhIikgfV0sIAorICAgIGdfVl9ncm91cFhhWF9ieVhhZ2VYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoImEiKS5ieSgiYWdlIikuY2FwKCJhIikgfV0sIAorICAgIGdfVl9ncm91cFhhWF9ieVhuYW1lWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2hhc1hsYW5nWF9ncm91cFhhWF9ieVhsYW5nWF9ieVhuYW1lWF9vdXRfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoImxhbmciKS5ncm91cCgiYSIpLmJ5KCJsYW5nIikuYnkoIm5hbWUiKS5vdXQoKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX3JlcGVhdFhvdXRfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYY291bnRYX3RpbWVzWDJYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkucmVwZWF0KF9fLm91dCgpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5ieShfXy5jb3VudCgpKSkudGltZXMoMikuY2FwKCJhIikgfV0sIAorICAgIGdfVl9ncm91cFhhWF9ieVhsYWJlbFhfYnlYb3V0RV93ZWlnaHRfc3VtWF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoVC5sYWJlbCkuYnkoX18ub3V0RSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwWGFYX2J5WHNvbmdUeXBlWF9ieVhjb3VudFhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aCgiZm9sbG93ZWRCeSIpKS50aW1lcygyKS5ncm91cCgiYSIpLmJ5KCJzb25nVHlwZSIpLmJ5KF9fLmNvdW50KCkpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfZ3JvdXBYYVhfYnlYdmFsdWVzWG5hbWVYX3N1YnN0cmluZ1gxWFhfYnlYY29uc3RhbnRYMVhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoImEiKS5ieShfXy52YWx1ZXMoIm5hbWUiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2hhc0xhYmVsWHNvbmdYX2dyb3VwWGFYX2J5WG5hbWVYX2J5WHByb3BlcnRpZXNfZ3JvdXBDb3VudF9ieVhsYWJlbFhYX291dF9jYXBYYVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb25nIikuZ3JvdXAoImEiKS5ieSgibmFtZSIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpLm91dCgpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9vdXRYY3JlYXRlZFhfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYc2VsZWN0WHBYX3ZhbHVlc1hhZ2VYX3N1bVhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuYXMoInAiKS5vdXQoImNyZWF0ZWQiKS5ncm91cCgiYSIpLmJ5KCJuYW1lIikuYnkoX18uc2VsZWN0KCJwIikudmFsdWVzKCJhZ2UiKS5zdW0oKSkuY2FwKCJhIikgfV0sIAorICAgIGdfVl9ncm91cFhtWF9ieVhuYW1lWF9ieVhpblhrbm93c1hfbmFtZVhfY2FwWG1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgibSIpLmJ5KCJuYW1lIikuYnkoX18uaW5fKCJrbm93cyIpLnZhbHVlcygibmFtZSIpKS5jYXAoIm0iKSB9XSwgCisgICAgZ19WX2dyb3VwWG1YX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFhfY2FwWG1YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgibSIpLmJ5KF9fLmxhYmVsKCkpLmJ5KF9fLmxhYmVsKCkuY291bnQoKSkuY2FwKCJtIikgfV0sIAorICAgIGdfVl9jaG9vc2VYbGFiZWxfcGVyc29uX19hZ2VfZ3JvdXBDb3VudFhhWF9fbmFtZV9ncm91cENvdW50WGJYWF9jYXBYYV9iWF91bmZvbGQ6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmNob29zZShfXy5oYXMoVC5sYWJlbCwgInBlcnNvbiIpLCBfXy52YWx1ZXMoImFnZSIpLmdyb3VwQ291bnQoImEiKSwgX18udmFsdWVzKCJuYW1lIikuZ3JvdXBDb3VudCgiYiIpKS5jYXAoImEiLCAiYiIpLnVuZm9sZCgpIH1dLCAKKyAgICBnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwWGFYX2J5X2J5WG91dF9vcmRlclhfY2FwWGFYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsICJuYW1lIiwgUC53aXRoaW4oInZhZGFzIiwgInBldGVyIikpLmdyb3VwKCJhIikuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cFhhWF9ieV9ieVhvdXRfb3JkZXJfY291bnRYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFAud2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5jb3VudCgpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cFhhWF9ieV9ieVhvdXRfb3JkZXJfZm9sZF9jb3VudFhsb2NhbFhYX2NhcFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsIFAud2l0aGluKCJ2YWRhcyIsICJwZXRlciIpKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKS5jYXAoImEiKSB9XSwgCisgICAgZ19WX2dyb3VwWGFYX2J5X2J5WG91dF9sYWJlbF9mb2xkWF9jYXBYYVhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkuZ3JvdXAoImEiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoImEiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIH1dLCAKKyAgICBnX1ZfZ3JvdXBYYVhfYnlfYnlYb3V0X2xhYmVsX2RlZHVwX2ZvbGRYX2NhcFhhWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuY2FwKCJhIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WX2dyb3VwWGFYX2J5X2J5WG91dF9sYWJlbF9saW1pdFgwWF9mb2xkWF9jYXBYYVhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5ncm91cCgiYSIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLmNhcCgiYSIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSB9XSwgCisgICAgZ19WX2dyb3VwWGFYX2J5X2J5WG91dF9sYWJlbF9saW1pdFgxMFhfZm9sZFhfY2FwWGFYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLmNhcCgiYSIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9ncm91cFhhWF9ieV9ieVhvdXRfbGFiZWxfdGFpbFgxMFhfZm9sZFhfY2FwWGFYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLmdyb3VwKCJhIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuY2FwKCJhIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSB9XSwgCisgICAgZ19WWDFYX291dEVYa25vd3NYX3N1YmdyYXBoWHNnWF9uYW1lX2NhcFhzZ1g6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCJrbm93cyIpLnN1YmdyYXBoKCJzZyIpLnZhbHVlcygibmFtZSIpLmNhcCgic2ciKSB9XSwgCisgICAgZ19WX3JlcGVhdFhib3RoRVhjcmVhdGVkWF9zdWJncmFwaFhzZ1hfb3V0VlhfdGltZXNYNVhfbmFtZV9kZWR1cF9jYXBYc2dYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5yZXBlYXQoX18uYm90aEUoImNyZWF0ZWQiKS5zdWJncmFwaCgic2ciKS5vdXRWKCkpLnRpbWVzKDUpLnZhbHVlcygibmFtZSIpLmRlZHVwKCkuY2FwKCJzZyIpIH1dLCAKKyAgICBnX1Zfb3V0RVhub2V4aXN0WF9zdWJncmFwaFhzZ1hjYXBYc2dYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLlYoKS5vdXRFKCJub2V4aXN0Iikuc3ViZ3JhcGgoInNnIikuY2FwKCJzZyIpIH1dLCAKKyAgICBnX0VfaGFzWHdlaWdodF8wXzVYX3N1YmdyYXBoWGFYX3NlbGVjdFhhWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5FKCkuaGFzKCJ3ZWlnaHQiLCAwLjQpLnN1YmdyYXBoKCJhIikuc2VsZWN0KCJhIikgfV0sIAorICAgIGdfVlgxWF9vdXRfb3V0X3RyZWVfYnlYbmFtZVg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoIm5hbWUiKSB9XSwgCisgICAgZ19WWDFYX291dF9vdXRfdHJlZTogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKSB9XSwgCisgICAgZ19WX291dF90cmVlX2J5WGFnZVg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnRyZWUoKS5ieSgiYWdlIikgfV0sIAorICAgIGdfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbmFtZVhfYm90aF9ib3RoX2NhcFhhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoImEiKS5ieSgibmFtZSIpLmJvdGgoKS5ib3RoKCkuY2FwKCJhIikgfV0sIAorICAgIGdfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYm90aF9ib3RoX2NhcFhhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoImEiKS5ib3RoKCkuYm90aCgpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X291dF90cmVlX2J5WGxhYmVsWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShULmxhYmVsKSB9XSwgCisgICAgZ19WWDFYX291dF9vdXRfdHJlZVhhWF9ieVhsYWJlbFhfYm90aF9ib3RoX2NhcFhhWDogW2Z1bmN0aW9uKHtnLCB2aWQxfSkgeyByZXR1cm4gZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoImEiKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcCgiYSIpIH1dLCAKKyAgICBnX1ZYMVhfb3V0X291dF9vdXRfdHJlZTogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkub3V0KCkudHJlZSgpIH1dLCAKKyAgICBnX1ZYMVhfb3V0RV9pblZfYm90aEVfb3RoZXJWX3RyZWU6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkuaW5WKCkuYm90aEUoKS5vdGhlclYoKS50cmVlKCkgfV0sIAorICAgIGdfVlgxWF9vdXRFX2luVl9ib3RoRV9vdGhlclZfdHJlZV9ieVhuYW1lWF9ieVhsYWJlbFg6IFtmdW5jdGlvbih7ZywgdmlkMX0pIHsgcmV0dXJuIGcuVih2aWQxKS5vdXRFKCkuaW5WKCkuYm90aEUoKS5vdGhlclYoKS50cmVlKCkuYnkoIm5hbWUiKS5ieShULmxhYmVsKSB9XSwgCisgICAgZ19WX291dF90cmVlWGFYX3NlbGVjdFhhWF9jb3VudFhsb2NhbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuVigpLm91dCgpLnRyZWUoImEiKS5zZWxlY3QoImEiKS5jb3VudChTY29wZS5sb2NhbCkgfV0sIAorICAgIGdfVl9vdXRfb3JkZXJfYnlYbmFtZVhfbG9jYWxYdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYWDogW2Z1bmN0aW9uKHtnfSkgeyByZXR1cm4gZy5WKCkub3V0KCkubG9jYWwoX18udHJlZSgiYSIpLnNlbGVjdCgiYSIpLmNvdW50KFNjb3BlLmxvY2FsKSkgfV0sIAorICAgIGdfaW9fd3JpdGVYa3J5b1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIpLndyaXRlKCkgfV0sIAorICAgIGdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3J5b1g6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIpLndpdGhfKElPLndyaXRlciwgSU8uZ3J5bykud3JpdGUoKSB9XSwgCisgICAgZ19pb193cml0ZVhncmFwaHNvblg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvbiIpLndyaXRlKCkgfV0sIAorICAgIGdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhzb25YOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmlvKCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb24iKS53aXRoXyhJTy53cml0ZXIsIElPLmdyYXBoc29uKS53cml0ZSgpIH1dLCAKKyAgICBnX2lvX3dyaXRlWGdyYXBobWxYOiBbZnVuY3Rpb24oe2d9KSB7IHJldHVybiBnLmlvKCJ0aW5rZXJwb3AtbW9kZXJuLnhtbCIpLndyaXRlKCkgfV0sIAorICAgIGdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhtbFg6IFtmdW5jdGlvbih7Z30pIHsgcmV0dXJuIGcuaW8oInRpbmtlcnBvcC1tb2Rlcm4ueG1sIikud2l0aF8oSU8ud3JpdGVyLCBJTy5ncmFwaG1sKS53cml0ZSgpIH1dLCAKK30KKworZXhwb3J0IGNvbnN0IGdyZW1saW4gPSBncmVtbGlucwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9jdWN1bWJlci93b3JsZC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvd29ybGQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2NmM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvY3VjdW1iZXIvd29ybGQuanMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKKyAqLworCitpbXBvcnQgeyBzZXRXb3JsZENvbnN0cnVjdG9yLCBCZWZvcmUsIEJlZm9yZUFsbCwgQWZ0ZXJBbGwgfSBmcm9tICdAY3VjdW1iZXIvY3VjdW1iZXInOworaW1wb3J0IHsgZ2V0Q29ubmVjdGlvbiB9IGZyb20gJy4uL2hlbHBlci5qcyc7CitpbXBvcnQgYW5vbiBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9hbm9ueW1vdXMtdHJhdmVyc2FsLmpzJzsKK2ltcG9ydCB7IHN0YXRpY3MgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMnOworY29uc3QgX18gPSBzdGF0aWNzOworCitjb25zdCBjYWNoZSA9IHt9OworCitmdW5jdGlvbiBUaW5rZXJQb3BXb3JsZCgpeworICB0aGlzLnNjZW5hcmlvID0gbnVsbDsKKyAgdGhpcy5nID0gbnVsbDsKKyAgdGhpcy50cmF2ZXJzYWwgPSBudWxsOworICB0aGlzLnJlc3VsdCA9IG51bGw7CisgIHRoaXMuY2FjaGUgPSBudWxsOworICB0aGlzLmdyYXBoTmFtZSA9IG51bGw7CisgIHRoaXMucGFyYW1ldGVycyA9IHt9OworICB0aGlzLnNpZGVFZmZlY3RzID0ge307CisgIHRoaXMuaXNHcmFwaENvbXB1dGVyID0gZmFsc2U7Cit9CisKK1RpbmtlclBvcFdvcmxkLnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKCkgeworICBpZiAoIXRoaXMuZ3JhcGhOYW1lKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBuYW1lIGlzIG5vdCBzZXQiKTsKKyAgfQorICByZXR1cm4gdGhpcy5jYWNoZVt0aGlzLmdyYXBoTmFtZV07Cit9OworCitUaW5rZXJQb3BXb3JsZC5wcm90b3R5cGUuY2xlYW5FbXB0eUdyYXBoID0gZnVuY3Rpb24gKCkgeworICBjb25zdCBjb25uZWN0aW9uID0gdGhpcy5jYWNoZVsnZW1wdHknXS5jb25uZWN0aW9uOworICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOworICByZXR1cm4gZy5WKCkuZHJvcCgpLnRvTGlzdCgpOworfTsKKworVGlua2VyUG9wV29ybGQucHJvdG90eXBlLmxvYWRFbXB0eUdyYXBoRGF0YSA9IGZ1bmN0aW9uICgpIHsKKyAgY29uc3QgY2FjaGVEYXRhID0gdGhpcy5jYWNoZVsnZW1wdHknXTsKKyAgY29uc3QgYyA9IGNhY2hlRGF0YS5jb25uZWN0aW9uOworICByZXR1cm4gUHJvbWlzZS5hbGwoWyBnZXRWZXJ0aWNlcyhjKSwgZ2V0RWRnZXMoYyksIGdldFZlcnRleFByb3BlcnRpZXMoYykgXSkudGhlbih2YWx1ZXMgPT4geworICAgIGNhY2hlRGF0YS52ZXJ0aWNlcyA9IHZhbHVlc1swXTsKKyAgICBjYWNoZURhdGEuZWRnZXMgPSB2YWx1ZXNbMV07CisgICAgY2FjaGVEYXRhLnZlcnRleFByb3BlcnRpZXMgPSB2YWx1ZXNbMl0KKyAgfSk7Cit9OworCitzZXRXb3JsZENvbnN0cnVjdG9yKFRpbmtlclBvcFdvcmxkKTsKKworQmVmb3JlQWxsKGZ1bmN0aW9uICgpIHsKKyAgLy8gbG9hZCBhbGwgdHJhdmVyc2FscworICBjb25zdCBwcm9taXNlcyA9IFsnbW9kZXJuJywgJ2NsYXNzaWMnLCAnY3JldycsICdncmF0ZWZ1bCcsICdzaW5rJywgJ2VtcHR5J10ubWFwKGdyYXBoTmFtZSA9PiB7CisgICAgbGV0IGNvbm5lY3Rpb24gPSBudWxsOworICAgIGlmIChncmFwaE5hbWUgPT09ICdlbXB0eScpIHsKKyAgICAgIGNvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKCdnZ3JhcGgnKTsKKyAgICAgIHJldHVybiBjb25uZWN0aW9uLm9wZW4oKS50aGVuKCgpID0+IGNhY2hlWydlbXB0eSddID0geyBjb25uZWN0aW9uOiBjb25uZWN0aW9uIH0pOworICAgIH0KKyAgICBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbignZycgKyBncmFwaE5hbWUpOworICAgIHJldHVybiBjb25uZWN0aW9uLm9wZW4oKQorICAgICAgLnRoZW4oKCkgPT4gUHJvbWlzZS5hbGwoW2dldFZlcnRpY2VzKGNvbm5lY3Rpb24pLCBnZXRFZGdlcyhjb25uZWN0aW9uKSwgZ2V0VmVydGV4UHJvcGVydGllcyhjb25uZWN0aW9uKV0pKQorICAgICAgLnRoZW4odmFsdWVzID0+IHsKKyAgICAgICAgY2FjaGVbZ3JhcGhOYW1lXSA9IHsKKyAgICAgICAgICBjb25uZWN0aW9uOiBjb25uZWN0aW9uLAorICAgICAgICAgIHZlcnRpY2VzOiB2YWx1ZXNbMF0sCisgICAgICAgICAgZWRnZXM6IHZhbHVlc1sxXSwKKyAgICAgICAgICB2ZXJ0ZXhQcm9wZXJ0aWVzOiB2YWx1ZXNbMl0KKyAgICAgICAgfTsKKyAgICAgIH0pOworICB9KTsKKyAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTsKK30pOworCitBZnRlckFsbChmdW5jdGlvbiAoKSB7CisgIHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhjYWNoZSkubWFwKGdyYXBoTmFtZSA9PiBjYWNoZVtncmFwaE5hbWVdLmNvbm5lY3Rpb24uY2xvc2UoKSkpOworfSk7CisKK0JlZm9yZShmdW5jdGlvbiAoaW5mbykgeworICB0aGlzLnNjZW5hcmlvID0gaW5mby5waWNrbGUubmFtZTsKKyAgdGhpcy5jYWNoZSA9IGNhY2hlOworfSk7CisKK0JlZm9yZSh7dGFnczogIkBHcmFwaENvbXB1dGVyT25seSJ9LCBmdW5jdGlvbigpIHsKKyAgdGhpcy5pc0dyYXBoQ29tcHV0ZXIgPSB0cnVlOworfSkKKworQmVmb3JlKHt0YWdzOiAiQEFsbG93TnVsbFByb3BlcnR5VmFsdWVzIn0sIGZ1bmN0aW9uKCkgeworICByZXR1cm4gJ3NraXBwZWQnCit9KQorCitCZWZvcmUoe3RhZ3M6ICJAU3RlcFdyaXRlIn0sIGZ1bmN0aW9uKCkgeworICByZXR1cm4gJ3NraXBwZWQnCit9KQorCitmdW5jdGlvbiBnZXRWZXJ0aWNlcyhjb25uZWN0aW9uKSB7CisgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29ubmVjdGlvbik7CisgIHJldHVybiBnLlYoKS5ncm91cCgpLmJ5KCduYW1lJykuYnkoX18udGFpbCgpKS5uZXh0KCkudGhlbihpdCA9PiB7CisgICAgLy8gcHJvcGVydGllcyBleGNsdWRlZCBmcm9tIHZlcmlmaWNhdGlvbgorICAgIGlmIChpdC52YWx1ZSBpbnN0YW5jZW9mIE1hcCkgeworICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdC52YWx1ZS52YWx1ZXMoKSkgeworICAgICAgICB2YWx1ZS5wcm9wZXJ0aWVzID0gdW5kZWZpbmVkCisgICAgICB9CisgICAgfQorICAgIHJldHVybiBpdC52YWx1ZQorICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RWRnZXMoY29ubmVjdGlvbikgeworICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOworICByZXR1cm4gZy5FKCkuZ3JvdXAoKQorICAgIC5ieShfXy5wcm9qZWN0KCJvIiwgImwiLCAiaSIpLmJ5KF9fLm91dFYoKS52YWx1ZXMoIm5hbWUiKSkuYnkoX18ubGFiZWwoKSkuYnkoX18uaW5WKCkudmFsdWVzKCJuYW1lIikpKQorICAgIC5ieShfXy50YWlsKCkpCisgICAgLm5leHQoKQorICAgIC50aGVuKGl0ID0+IHsKKyAgICAgIGNvbnN0IGVkZ2VzID0ge307CisgICAgICBpdC52YWx1ZS5mb3JFYWNoKCh2LCBrKSA9PiB7CisgICAgICAgIC8vIHByb3BlcnRpZXMgZXhjbHVkZWQgZnJvbSB2ZXJpZmljYXRpb24KKyAgICAgICAgdi5wcm9wZXJ0aWVzID0gdW5kZWZpbmVkCisgICAgICAgIGVkZ2VzW2dldEVkZ2VLZXkoayldID0gdjsKKyAgICAgIH0pOworICAgICAgcmV0dXJuIGVkZ2VzOworICAgIH0pOworfQorCitmdW5jdGlvbiBnZXRWZXJ0ZXhQcm9wZXJ0aWVzKGNvbm5lY3Rpb24pIHsKKyAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25uZWN0aW9uKTsKKyAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKQorICAgICAgLmdyb3VwKCkKKyAgICAgIC5ieShfXy5wcm9qZWN0KCJuIiwgImsiLCAidiIpLmJ5KF9fLmVsZW1lbnQoKS52YWx1ZXMoIm5hbWUiKSkuYnkoX18ua2V5KCkpLmJ5KF9fLnZhbHVlKCkpKQorICAgICAgLmJ5KF9fLnRhaWwoKSkKKyAgICAgIC5uZXh0KCkKKyAgICAgIC50aGVuKGl0ID0+IHsKKyAgICAgICAgY29uc3QgdnBzID0ge307CisgICAgICAgIGl0LnZhbHVlLmZvckVhY2goKHYsIGspID0+IHsKKyAgICAgICAgICB2cHNbZ2V0VmVydGV4UHJvcGVydHlLZXkoayldID0gdjsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB2cHM7CisgICAgICB9KTsKK30KKworZnVuY3Rpb24gZ2V0RWRnZUtleShrZXkpIHsKKyAgLy8ga2V5IGlzIGEgbWFwCisgIHJldHVybiBrZXkuZ2V0KCdvJykgKyAiLSIgKyBrZXkuZ2V0KCdsJykgKyAiLT4iICsga2V5LmdldCgnaScpOworfQorCitmdW5jdGlvbiBnZXRWZXJ0ZXhQcm9wZXJ0eUtleShrZXkpIHsKKyAgLy8ga2V5IGlzIGEgbWFwCisgIGNvbnN0IGsgPSBrZXkuZ2V0KCdrJyk7CisKKyAgLy8gaGFyZGNvZGluZyB0aGUgdHlwZXMgYXMgd2UgZG9uJ3QgaGF2ZSBhIGdvb2QgZHluYW1pYyB3YXkgdG8gZ2V0IHRoZW0uIHB5dGhvbiBkb2VzIHRoaXMgd2l0aCBhIGxhbWJkYSwgYnV0CisgIC8vIHRyeWluZyBpdCB0aGlzIHdheSBpbiBqYXZhc2NyaXB0IHRvIHNlZSBpZiB0aGlzIHBhdHRlcm4gaXMgYmV0dGVyIGluIGFuIGF0dGVtcHQgdG8gYXZvaWQgbGFtYmRhcy4gcmlnaHQgbm93CisgIC8vIHdlJ2QgcmVhbGx5IGp1c3QgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSBjbGFzc2ljIGdyYXBoIHdoaWNoIGRlZmluZXMgIndlaWdodCIgYXMgImZsb2F0IiBhbmQgaGVyZSB3ZSBoYXJkIGNvZGUKKyAgLy8gZm9yIHRoZSBtb2Rlcm4gZ3JhcGggd2hpY2ggdXNlcyAiZG91YmxlIi4gd2UgcmVhbGx5IGRvbid0IHRlc3QgY2xhc3NpYyB3aXRoIGdoZXJraW4gc28gZm9yIG5vdyBpdCBpcyBwcm9iYWJseQorICAvLyBmaW5lCisgIGxldCB2YWwgPSBrZXkuZ2V0KCd2Jyk7CisgIGlmIChrID09PSAnd2VpZ2h0JykgeworICAgIHZhbCA9ICdkWycgKyB2YWwgKyAnXS5kJyA7CisgIH0gZWxzZSBpZiAoayA9PT0gJ2FnZScgfHwgayA9PT0gJ3NpbmNlJyB8fCBrID09PSAnc2tpbGwnKSB7CisgICAgdmFsID0gJ2RbJyArIHZhbCArICddLmknOworICB9CisgIHJldHVybiBrZXkuZ2V0KCduJykgKyAiLSIgKyBrICsgIi0+IiArIHZhbDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2hlbHBlci5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaGVscGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyOTI2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2hlbHBlci5qcwpAQCAtMCwwICsxLDY0IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCisgKi8KKworaW1wb3J0IERyaXZlclJlbW90ZUNvbm5lY3Rpb24gZnJvbSAnLi4vbGliL2RyaXZlci9kcml2ZXItcmVtb3RlLWNvbm5lY3Rpb24uanMnOworaW1wb3J0IENsaWVudCBmcm9tICcuLi9saWIvZHJpdmVyL2NsaWVudC5qcyc7CisKK2xldCBzZXJ2ZXJVcmw7CitsZXQgc2VydmVyQXV0aFVybDsKK2lmIChwcm9jZXNzLmVudi5ET0NLRVJfRU5WSVJPTk1FTlQgPT09ICd0cnVlJykgeworICBzZXJ2ZXJVcmwgPSAnaHR0cDovL2dyZW1saW4tc2VydmVyLXRlc3QtanM6NDU5NDAvZ3JlbWxpbic7CisgIHNlcnZlckF1dGhVcmwgPSAnaHR0cHM6Ly9ncmVtbGluLXNlcnZlci10ZXN0LWpzOjQ1OTQxL2dyZW1saW4nOworfSBlbHNlIHsKKyAgc2VydmVyVXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NDU5NDAvZ3JlbWxpbic7CisgIHNlcnZlckF1dGhVcmwgPSAnaHR0cHM6Ly9sb2NhbGhvc3Q6NDU5NDEvZ3JlbWxpbic7Cit9CisKKy8qKiBAcmV0dXJucyB7RHJpdmVyUmVtb3RlQ29ubmVjdGlvbn0gKi8KK2V4cG9ydCBmdW5jdGlvbiBnZXRDb25uZWN0aW9uKHRyYXZlcnNhbFNvdXJjZSkgeworICByZXR1cm4gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oc2VydmVyVXJsLCB7IHRyYXZlcnNhbFNvdXJjZSB9KTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldERyaXZlclJlbW90ZUNvbm5lY3Rpb24odXJsLCBvcHRpb25zKSB7CisgIHJldHVybiBuZXcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbih1cmwsIHsgLi4ub3B0aW9ucyB9KTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudCh0cmF2ZXJzYWxTb3VyY2UpIHsKKyAgcmV0dXJuIG5ldyBDbGllbnQoc2VydmVyVXJsLCB7IHRyYXZlcnNhbFNvdXJjZSB9KTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0ZWRDbGllbnQodHJhdmVyc2FsU291cmNlLCBpbnRlcmNlcHRvcnMpIHsKKyAgcmV0dXJuIG5ldyBDbGllbnQoc2VydmVyQXV0aFVybCwgeworICAgIHRyYXZlcnNhbFNvdXJjZSwKKyAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLAorICAgIGludGVyY2VwdG9ycywKKyAgfSk7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBnZXRBdXRoZW50aWNhdGVkQ29ubmVjdGlvbih0cmF2ZXJzYWxTb3VyY2UsIGludGVyY2VwdG9ycykgeworICByZXR1cm4gbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oc2VydmVyQXV0aFVybCwgeworICAgIHRyYXZlcnNhbFNvdXJjZSwKKyAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLAorICAgIGludGVyY2VwdG9ycywKKyAgfSk7Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL2F1dGgtdGVzdHMuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL2F1dGgtdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMDJhZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vYXV0aC10ZXN0cy5qcwpAQCAtMCwwICsxLDgxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JzsKK2ltcG9ydCBhbm9uIGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL2Fub255bW91cy10cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgYmFzaWMgfSBmcm9tICcuLi8uLi9saWIvZHJpdmVyL2F1dGguanMnOworaW1wb3J0IHsgZ2V0QXV0aGVudGljYXRlZENsaWVudCwgZ2V0QXV0aGVudGljYXRlZENvbm5lY3Rpb24gfSBmcm9tICcuLi9oZWxwZXIuanMnOworCisvKioKKyAqIEludGVncmF0aW9uIHRlc3RzIGZvciBiYXNpYyBhdXRoZW50aWNhdGlvbi4KKyAqCisgKiBUaGVzZSB0ZXN0cyByZXF1aXJlIGEgR3JlbWxpbiBTZXJ2ZXIgcnVubmluZyB3aXRoIGF1dGhlbnRpY2F0aW9uIGVuYWJsZWQKKyAqIG9uIHRoZSBhdXRoIFVSTCAoZGVmYXVsdDogaHR0cHM6Ly9sb2NhbGhvc3Q6NDU5NDEvZ3JlbWxpbikuCisgKgorICogVG8gcnVuOgorICogICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEPTAgUlVOX0JBU0lDX0FVVEhfSU5URUdSQVRJT05fVEVTVFM9dHJ1ZSBucG0gcnVuIGludGVncmF0aW9uLXRlc3QKKyAqLworZGVzY3JpYmUoJ0Jhc2ljIEF1dGggSW50ZWdyYXRpb24nLCBmdW5jdGlvbiAoKSB7CisgIGNvbnN0IHJ1bkF1dGhUZXN0cyA9IHByb2Nlc3MuZW52LlJVTl9CQVNJQ19BVVRIX0lOVEVHUkFUSU9OX1RFU1RTID09PSAndHJ1ZSc7CisKKyAgYmVmb3JlKGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoIXJ1bkF1dGhUZXN0cykgeworICAgICAgdGhpcy5za2lwKCk7CisgICAgfQorICB9KTsKKworICBkZXNjcmliZSgnQ2xpZW50IHdpdGggYmFzaWMgYXV0aCcsIGZ1bmN0aW9uICgpIHsKKyAgICBsZXQgY2xpZW50OworCisgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHsKKyAgICAgIGNsaWVudCA9IGdldEF1dGhlbnRpY2F0ZWRDbGllbnQoJ2dtb2Rlcm4nLCBiYXNpYygnc3RlcGhlbicsICdwYXNzd29yZCcpKTsKKyAgICAgIHJldHVybiBjbGllbnQub3BlbigpOworICAgIH0pOworCisgICAgYWZ0ZXIoZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIGNsaWVudC5jbG9zZSgpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBhdXRoZW50aWNhdGUgYW5kIHN1Ym1pdCBhIHRyYXZlcnNhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zdWJtaXQoJ2cuVigpLmNvdW50KCknKTsKKyAgICAgIGFzc2VydC5vayhyZXN1bHQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5maXJzdCgpLCA2KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ0RyaXZlclJlbW90ZUNvbm5lY3Rpb24gd2l0aCBiYXNpYyBhdXRoJywgZnVuY3Rpb24gKCkgeworICAgIGxldCBjb25uZWN0aW9uOworCisgICAgYmVmb3JlKGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbm5lY3Rpb24gPSBnZXRBdXRoZW50aWNhdGVkQ29ubmVjdGlvbignZ21vZGVybicsIGJhc2ljKCdzdGVwaGVuJywgJ3Bhc3N3b3JkJykpOworICAgICAgcmV0dXJuIGNvbm5lY3Rpb24ub3BlbigpOworICAgIH0pOworCisgICAgYWZ0ZXIoZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIGNvbm5lY3Rpb24uY2xvc2UoKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgYXV0aGVudGljYXRlIGFuZCBleGVjdXRlIHRyYXZlcnNhbCcsIGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOworICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBnLlYoKS5jb3VudCgpLnRvTGlzdCgpOworICAgICAgYXNzZXJ0Lm9rKGNvdW50KTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb3VudFswXSwgNik7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL2NsaWVudC10ZXN0cy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vY2xpZW50LXRlc3RzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTRjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L2ludGVncmF0aW9uL2NsaWVudC10ZXN0cy5qcwpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7CitpbXBvcnQgeyBWZXJ0ZXgsIEVkZ2UsIFZlcnRleFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaC5qcyc7CitpbXBvcnQgeyBnZXRDbGllbnQgfSBmcm9tICcuLi9oZWxwZXIuanMnOworaW1wb3J0IHsgY2FyZGluYWxpdHkgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanMnOworCitsZXQgY2xpZW50LCBjbGllbnRDcmV3OworCitkZXNjcmliZSgnQ2xpZW50JywgZnVuY3Rpb24gKCkgeworICBiZWZvcmUoZnVuY3Rpb24gKCkgeworICAgIGNsaWVudCA9IGdldENsaWVudCgnZ21vZGVybicpOworICAgIGNsaWVudENyZXcgPSBnZXRDbGllbnQoJ2djcmV3JykKKyAgICByZXR1cm4gY2xpZW50Lm9wZW4oKTsKKyAgfSk7CisgIGFmdGVyKGZ1bmN0aW9uICgpIHsKKyAgICBjbGllbnRDcmV3LmNsb3NlKCk7CisgICAgcmV0dXJuIGNsaWVudC5jbG9zZSgpOworICB9KTsKKyAgZGVzY3JpYmUoJyNzdWJtaXQoKScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIHNlbmQgYW5kIHBhcnNlIGEgc2NyaXB0JywgZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQoJ2cuVigpLnRhaWwoKScpCisgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgICBhc3NlcnQub2socmVzdWx0KTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5maXJzdCgpIGluc3RhbmNlb2YgVmVydGV4KTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBzZW5kIGFuZCBwYXJzZSBhIHNjcmlwdCB3aXRoIGJpbmRpbmdzJywgZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQoJ2cuVigpLmhhcygibmFtZSIsIHgpLnZhbHVlcygiYWdlIiknLCB7IHg6ICdtYXJrbycgfSkKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZmlyc3QoKSwgMjkpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgcmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMnLCAoKSA9PiB7CisgICAgICByZXR1cm4gY2xpZW50LnN1Ym1pdCgiZy5WKCkudGFpbCgpIikKKyAgICAgICAgLnRoZW4ocnMgPT4geworICAgICAgICAgIGFzc2VydC5vayhycy5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTWFwKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHNraXAgVmVydGV4IHByb3BlcnRpZXMgZm9yIHJlcXVlc3Qgd2l0aCB0b2tlbnMnLCBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gY2xpZW50LnN1Ym1pdCgnZy53aXRoKCJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiLCAidG9rZW5zIikuVigxKScpCisgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsKKyAgICAgICAgICBhc3NlcnQub2socmVzdWx0KTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgY29uc3QgdmVydGV4ID0gcmVzdWx0LmZpcnN0KCk7CisgICAgICAgICAgYXNzZXJ0Lm9rKHZlcnRleCBpbnN0YW5jZW9mIFZlcnRleCk7CisgICAgICAgICAgYXNzZXJ0Lm9rKHZlcnRleC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgVmVydGV4IHByb3BlcnRpZXMgZm9yIGdyZW1saW4gcmVxdWVzdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCdnLlYoMSknKQorICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7CisgICAgICAgICAgYXNzZXJ0Lm9rKHJlc3VsdCk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDEpOworICAgICAgICAgIGNvbnN0IHZlcnRleCA9IHJlc3VsdC5maXJzdCgpOworICAgICAgICAgIGFzc2VydC5vayh2ZXJ0ZXggaW5zdGFuY2VvZiBWZXJ0ZXgpOworICAgICAgICAgIGNvbnN0IGFnZSA9IHZlcnRleC5wcm9wZXJ0aWVzLmZpbmQocCA9PiBwLmtleSA9PT0gJ2FnZScpOworICAgICAgICAgIGNvbnN0IG5hbWUgPSB2ZXJ0ZXgucHJvcGVydGllcy5maW5kKHAgPT4gcC5rZXkgPT09ICduYW1lJyk7CisgICAgICAgICAgYXNzZXJ0Lm9rKGFnZSk7CisgICAgICAgICAgYXNzZXJ0Lm9rKG5hbWUpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhZ2UudmFsdWUsIDI5KTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmFtZS52YWx1ZSwgJ21hcmtvJyk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgRWRnZSBwcm9wZXJ0aWVzIGZvciBncmVtbGluIHJlcXVlc3QnLCBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gY2xpZW50LnN1Ym1pdCgnZy5FKCkuaGFzKCJ3ZWlnaHQiLCAwLjUpLmxpbWl0KDEpJykKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTsKKyAgICAgICAgICBjb25zdCBlZGdlID0gcmVzdWx0LmZpcnN0KCk7CisgICAgICAgICAgYXNzZXJ0Lm9rKGVkZ2UgaW5zdGFuY2VvZiBFZGdlKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZWRnZS5sYWJlbCwgJ2tub3dzJyk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVkZ2UucHJvcGVydGllc1swXS52YWx1ZSwgMC41KTsKKyAgICAgICAgICBhc3NlcnQub2soZWRnZS5pblYpOworICAgICAgICAgIGFzc2VydC5vayhlZGdlLm91dFYpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIFZlcnRleFByb3BlcnR5IG1ldGFkYXRhIGZvciBncmVtbGluIHJlcXVlc3QnLCBmdW5jdGlvbiAoKSB7CisgICAgICByZXR1cm4gY2xpZW50Q3Jldy5zdWJtaXQoJ2cuVig3KS5wcm9wZXJ0aWVzKCJsb2NhdGlvbiIpLmxpbWl0KDEpJykKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTsKKyAgICAgICAgICBjb25zdCBwcm9wID0gcmVzdWx0LmZpcnN0KCk7CisgICAgICAgICAgYXNzZXJ0Lm9rKHByb3AgaW5zdGFuY2VvZiBWZXJ0ZXhQcm9wZXJ0eSk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHByb3Aua2V5LCAnbG9jYXRpb24nKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocHJvcC52YWx1ZSwgJ2NlbnRyZXZpbGxlJyk7CisKKyAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBwcm9wLnByb3BlcnRpZXMuZmluZChwID0+IHAua2V5ID09PSAnc3RhcnRUaW1lJyk7CisgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHByb3AucHJvcGVydGllcy5maW5kKHAgPT4gcC5rZXkgPT09ICdlbmRUaW1lJyk7CisgICAgICAgICAgYXNzZXJ0Lm9rKHN0YXJ0VGltZSk7CisgICAgICAgICAgYXNzZXJ0Lm9rKGVuZFRpbWUpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdGFydFRpbWUudmFsdWUsIDE5OTApOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmRUaW1lLnZhbHVlLCAyMDAwKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHNraXAgVmVydGV4IHByb3BlcnRpZXMgZm9yIGdyZW1saW4gcmVxdWVzdCB3aXRoIHRva2VucycsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHJldHVybiBjbGllbnQuc3VibWl0KCdnLndpdGgoIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJ0b2tlbnMiKS5WKDEpJykKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeworICAgICAgICAgIGFzc2VydC5vayhyZXN1bHQpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTsKKyAgICAgICAgICBjb25zdCB2ZXJ0ZXggPSByZXN1bHQuZmlyc3QoKTsKKyAgICAgICAgICBhc3NlcnQub2sodmVydGV4IGluc3RhbmNlb2YgVmVydGV4KTsKKyAgICAgICAgICBhc3NlcnQub2sodmVydGV4LnByb3BlcnRpZXMubGVuZ3RoID09PSAwKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBWZXJ0ZXhQcm9wZXJ0aWVzIHByb3BlcnRpZXMgZm9yIGdyZW1saW4gcmVxdWVzdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IGNyZXdDbGllbnQgPSBnZXRDbGllbnQoJ2djcmV3Jyk7CisgICAgICBhd2FpdCBjcmV3Q2xpZW50Lm9wZW4oKTsKKworICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3Jld0NsaWVudC5zdWJtaXQoJ2cuVig3KScpOworCisgICAgICBhc3NlcnQub2socmVzdWx0KTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAxKTsKKyAgICAgIGNvbnN0IHZlcnRleCA9IHJlc3VsdC5maXJzdCgpOworICAgICAgCisgICAgICBhc3NlcnRWZXJ0ZXhQcm9wZXJ0aWVzKHZlcnRleCk7CisKKyAgICAgIGF3YWl0IGNyZXdDbGllbnQuY2xvc2UoKTsKKyAgICB9KTsKKworICAgIC8vIFRPRE86OiBSZXZpc2l0IHdoYXQgaXQgbWVhbnMgdG8gY2xvc2UgYSBjbGllbnQgaW4gSFRUUC4KKyAgICAvLyBpdCgic2hvdWxkIHJlamVjdCBwZW5kaW5nIHRyYXZlcnNhbCBwcm9taXNlcyBpZiBjb25uZWN0aW9uIGNsb3NlcyIsIGFzeW5jICgpID0+IHsKKyAgICAvLyAgIGNvbnN0IGNsb3NpbmdDbGllbnQgPSBnZXRDbGllbnQoJ2dtb2Rlcm4nKTsKKyAgICAvLyAgIGF3YWl0IGNsb3NpbmdDbGllbnQub3BlbigpOworICAgIC8vCisgICAgLy8gICAvLyB2ZXJpZnkgdGhlIGNsaWVudCB3b3JrcyBiZWZvcmUgY2xvc2luZworICAgIC8vICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xvc2luZ0NsaWVudC5zdWJtaXQoImcuVigpLnRhaWwoKSIpOworICAgIC8vICAgYXNzZXJ0Lm9rKHJlc3VsdCk7CisgICAgLy8KKyAgICAvLyAgIGF3YWl0IGNsb3NpbmdDbGllbnQuY2xvc2UoKTsKKyAgICAvLyAgIGFzc2VydC5vayghY2xvc2luZ0NsaWVudC5pc09wZW4oKSk7CisgICAgLy8gfSk7CisgIH0pOworfSk7CisKK2Z1bmN0aW9uIGFzc2VydFZlcnRleFByb3BlcnRpZXModmVydGV4KSB7CisgIGFzc2VydC5vayh2ZXJ0ZXggaW5zdGFuY2VvZiBWZXJ0ZXgpOworICBsZXQgbG9jYXRpb25zOworICBpZiAodmVydGV4LnByb3BlcnRpZXMgaW5zdGFuY2VvZiBBcnJheSkgeworICAgIGxvY2F0aW9ucyA9IHZlcnRleC5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAua2V5ID09ICdsb2NhdGlvbicpOworICB9IGVsc2UgeworICAgIGxvY2F0aW9ucyA9IHZlcnRleC5wcm9wZXJ0aWVzLmxvY2F0aW9uCisgIH0KKyAgYXNzZXJ0LnN0cmljdEVxdWFsKGxvY2F0aW9ucy5sZW5ndGgsIDMpOworCisgIGNvbnN0IHZlcnRleFByb3BlcnR5ID0gbG9jYXRpb25zWzBdOworICBhc3NlcnQuc3RyaWN0RXF1YWwodmVydGV4UHJvcGVydHkudmFsdWUsICdjZW50cmV2aWxsZScpOworICBjb25zdCBzdGFydCA9IHZlcnRleFByb3BlcnR5LnByb3BlcnRpZXMuZmluZChwID0+IHAua2V5ID09PSAnc3RhcnRUaW1lJyk7CisgIGNvbnN0IGVuZCA9IHZlcnRleFByb3BlcnR5LnByb3BlcnRpZXMuZmluZChwID0+IHAua2V5ID09PSAnZW5kVGltZScpOworICBhc3NlcnQub2soc3RhcnQpOworICBhc3NlcnQub2soZW5kKTsKKyAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXJ0LnZhbHVlLCAxOTkwKTsKKyAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuZC52YWx1ZSwgMjAwMCk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9pbnRlZ3JhdGlvbi9yZW1vdGUtY29ubmVjdGlvbi10ZXN0cy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vcmVtb3RlLWNvbm5lY3Rpb24tdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlMjY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vcmVtb3RlLWNvbm5lY3Rpb24tdGVzdHMuanMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JzsKK2ltcG9ydCB7IFZlcnRleCB9IGZyb20gJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGguanMnOworaW1wb3J0IGFub24gZnJvbSAnLi4vLi4vbGliL3Byb2Nlc3MvYW5vbnltb3VzLXRyYXZlcnNhbC5qcyc7CitpbXBvcnQgeyBnZXRDb25uZWN0aW9uLCBnZXRDbGllbnQgfSBmcm9tICcuLi9oZWxwZXIuanMnOworaW1wb3J0IHtQfSBmcm9tICIuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanMiOworCitsZXQgY29ubmVjdGlvbjsKK2xldCBjbGllbnQ7CisKK2Rlc2NyaWJlKCdEcml2ZXJSZW1vdGVDb25uZWN0aW9uJywgZnVuY3Rpb24gKCkgeworICBiZWZvcmUoZnVuY3Rpb24gKCkgeworICAgIGNvbm5lY3Rpb24gPSBnZXRDb25uZWN0aW9uKCdnbW9kZXJuJyk7CisgICAgY2xpZW50ID0gZ2V0Q2xpZW50KCdnbW9kZXJuJyk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24ub3BlbigpOworICB9KTsKKyAgYWZ0ZXIoZnVuY3Rpb24gKCkgeworICAgIGNsaWVudC5jbG9zZSgpOworICAgIHJldHVybiBjb25uZWN0aW9uLmNsb3NlKCk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjc3VibWl0KCknLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Nob3VsZCBzZW5kIHRoZSByZXF1ZXN0IGFuZCBwYXJzZSB0aGUgcmVzcG9uc2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKTsKKyAgICAgIHJldHVybiBnLlYoKS50YWlsKCkudG9MaXN0KCkKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKKyAgICAgICAgICBhc3NlcnQub2sobGlzdCk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3QubGVuZ3RoLCAxKTsKKyAgICAgICAgICBhc3NlcnQub2sobGlzdFswXSBpbnN0YW5jZW9mIFZlcnRleCk7CisgICAgICAgIH0pOworICAgIH0pOworICAgIGl0KCdzaG91bGQgc2VuZCB0aGUgcmVxdWVzdCB3aXRoIHN5bnRheCBlcnJvciBhbmQgcGFyc2UgdGhlIHJlc3BvbnNlIGVycm9yJywgZnVuY3Rpb24gKCkgeworICAgICAgcmV0dXJuIGNsaWVudC5zdWJtaXQoJ1NZTlRBWF9FUlJPUicpCisgICAgICAgIC50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICAgIGFzc2VydC5mYWlsKCJzeW50YXggZXJyb3Igc2hvdWxkIHRocm93Iik7CisgICAgICAgIH0pCisgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CisgICAgICAgICAgYXNzZXJ0Lm9rKGVycik7CisgICAgICAgICAgYXNzZXJ0Lm9rKGVyci5zdGF0dXNDb2RlID09PSA0MDApOworICAgICAgICAgIGFzc2VydC5vayhlcnIuc3RhdHVzQXR0cmlidXRlcyk7CisgICAgICAgICAgYXNzZXJ0Lm9rKGVyci5zdGF0dXNBdHRyaWJ1dGVzLmhhcygnZXhjZXB0aW9ucycpKTsKKyAgICAgICAgICBhc3NlcnQub2soZXJyLnN0YXR1c0F0dHJpYnV0ZXMuaGFzKCdzdGFja1RyYWNlJykpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICBpdCgnc2hvdWxkIGl0ZXJhdGUgb3JkZXJlZCByZXN1bHRzJywgYXN5bmMgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbik7CisgICAgICBjb25zdCB0cmF2ZXJzYWwgPSBnLlYoKS5oYXMoJ25hbWUnLCBQLndpdGhpbignbWFya28nLCAncGV0ZXInKSkudmFsdWVzKCduYW1lJykub3JkZXIoKTsKKyAgICAgIGNvbnN0IGZpcnN0ID0gYXdhaXQgdHJhdmVyc2FsLm5leHQoKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaXJzdC52YWx1ZSwgJ21hcmtvJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgdHJhdmVyc2FsLmhhc05leHQoKSwgdHJ1ZSk7CisgICAgICBjb25zdCBzZWNvbmQgPSBhd2FpdCB0cmF2ZXJzYWwubmV4dCgpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNlY29uZC52YWx1ZSwgJ3BldGVyJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXdhaXQgdHJhdmVyc2FsLmhhc05leHQoKSwgZmFsc2UpOworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9pbnRlZ3JhdGlvbi9zb2NrZXQtY29ubmVjdGlvbi10ZXN0cy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vc29ja2V0LWNvbm5lY3Rpb24tdGVzdHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjMzMxYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vc29ja2V0LWNvbm5lY3Rpb24tdGVzdHMuanMKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgS3lsZSBCb3llcgorICovCisndXNlIHN0cmljdCc7CisKK2ltcG9ydCBhc3NlcnQgZnJvbSAiYXNzZXJ0IjsKK2ltcG9ydCBodHRwIGZyb20gImh0dHAiOworaW1wb3J0IHVybCBmcm9tICJ1cmwiOworaW1wb3J0IENsaWVudCBmcm9tICcuLi8uLi9saWIvZHJpdmVyL2NsaWVudC5qcyc7CisKK2NvbnN0IHRlc3RTZXJ2ZXJQb3J0ID0gNDU5NDQ7Citjb25zdCB0ZXN0U2VydmVyNDAxUmVzcG9uc2VCb2R5ID0gJ0ludmFsaWQgY3JlZGVudGlhbHMgcHJvdmlkZWQnOworCitkZXNjcmliZSgnQ29ubmVjdGlvbicsIGZ1bmN0aW9uICgpIHsKKyAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoZnVuY3Rpb24gKHJlcSwgcmVzKSB7CisgICAgY29uc3QgcGFyc2VkVXJsID0gdXJsLnBhcnNlKHJlcS51cmwsIHRydWUpOworICAgIGNvbnN0IHBhdGhuYW1lID0gcGFyc2VkVXJsLnBhdGhuYW1lOworICAgIGlmIChwYXRobmFtZSA9PT0gJy80MDEnKSB7CisgICAgICByZXMuc3RhdHVzQ29kZSA9IDQwMTsKKyAgICAgIHJldHVybiByZXMuZW5kKHRlc3RTZXJ2ZXI0MDFSZXNwb25zZUJvZHkpOworICAgIH0KKyAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDsKKyAgICByZXMuZW5kKCk7CisgIH0pOworICBiZWZvcmUoZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2VydmVyLmxpc3Rlbih0ZXN0U2VydmVyUG9ydCwgcmVzb2x2ZSkpOworICB9KTsKKyAgYWZ0ZXIoZnVuY3Rpb24gKCkgeworICAgIHJldHVybiBzZXJ2ZXIuY2xvc2UoKTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNzdWJtaXQoKScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSB1bmV4cGVjdGVkIHJlc3BvbnNlIGVycm9ycyB3aXRoIGJvZHknLCBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KGBodHRwOi8vbG9jYWxob3N0OiR7dGVzdFNlcnZlclBvcnR9LzQwMWAsIHt9KTsKKyAgICAgIHRyeSB7CisgICAgICAgIGF3YWl0IGNsaWVudC5zdWJtaXQoJ2cuVigpJyk7CisgICAgICAgIGFzc2VydC5mYWlsKCdpbnZhbGlkIHN0YXR1cyBjb2RlcyBzaG91bGQgdGhyb3cnKTsKKyAgICAgIH0gY2F0Y2ggKGVycikgeworICAgICAgICBhc3NlcnQub2soZXJyKTsKKyAgICAgICAgYXNzZXJ0Lm9rKGVyci5tZXNzYWdlLmluZGV4T2YoJzQwMScpID4gMCk7CisgICAgICB9CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5leHBlY3RlZCByZXNwb25zZSBlcnJvcnMgd2l0aCBubyBib2R5JywgYXN5bmMgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudChgaHR0cDovL2xvY2FsaG9zdDoke3Rlc3RTZXJ2ZXJQb3J0fS80MDRgLCB7fSk7CisgICAgICB0cnkgeworICAgICAgICBhd2FpdCBjbGllbnQuc3VibWl0KCdnLlYoKScpOworICAgICAgICBhc3NlcnQuZmFpbCgnaW52YWxpZCBzdGF0dXMgY29kZXMgc2hvdWxkIHRocm93Jyk7CisgICAgICB9IGNhdGNoIChlcnIpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGVycik7CisgICAgICAgIGFzc2VydC5vayhlcnIubWVzc2FnZS5pbmRleE9mKCc0MDQnKSA+IDApOworICAgICAgfQorICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC9pbnRlZ3JhdGlvbi90cmF2ZXJzYWwtdGVzdC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vdHJhdmVyc2FsLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0M2Q3MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvaW50ZWdyYXRpb24vdHJhdmVyc2FsLXRlc3QuanMKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKKyAqLworCitpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7CitpbXBvcnQgeyBBc3NlcnRpb25FcnJvciB9IGZyb20gJ2Fzc2VydCc7CitpbXBvcnQge0VkZ2UsIFZlcnRleCwgVmVydGV4UHJvcGVydHl9IGZyb20gJy4uLy4uL2xpYi9zdHJ1Y3R1cmUvZ3JhcGguanMnOworaW1wb3J0IGFub24gZnJvbSAnLi4vLi4vbGliL3Byb2Nlc3MvYW5vbnltb3VzLXRyYXZlcnNhbC5qcyc7CitpbXBvcnQgeyBHcmFwaFRyYXZlcnNhbFNvdXJjZSwgR3JhcGhUcmF2ZXJzYWwsIHN0YXRpY3MgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMnOworaW1wb3J0IHsKKyAgU3ViZ3JhcGhTdHJhdGVneSwgUmVhZE9ubHlTdHJhdGVneSwgU2VlZFN0cmF0ZWd5LCBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSwgRmlsdGVyUmFua2luZ1N0cmF0ZWd5LAorICBPcHRpb25zU3RyYXRlZ3ksIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LCBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSwgTWF0Y2hBbGdvcml0aG1TdHJhdGVneQorfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3kuanMnOworaW1wb3J0IEdyZW1saW5MYW5nIGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL2dyZW1saW4tbGFuZy5qcyc7CitpbXBvcnQgeyBnZXRDb25uZWN0aW9uLCBnZXREcml2ZXJSZW1vdGVDb25uZWN0aW9uIH0gZnJvbSAnLi4vaGVscGVyLmpzJzsKK2NvbnN0IF9fID0gc3RhdGljczsKKworbGV0IGNvbm5lY3Rpb247CitsZXQgdHhDb25uZWN0aW9uOworCitjbGFzcyBTb2NpYWxUcmF2ZXJzYWwgZXh0ZW5kcyBHcmFwaFRyYXZlcnNhbCB7CisgIGNvbnN0cnVjdG9yKGdyYXBoLCB0cmF2ZXJzYWxTdHJhdGVnaWVzLCBncmVtbGluTGFuZykgeworICAgIHN1cGVyKGdyYXBoLCB0cmF2ZXJzYWxTdHJhdGVnaWVzLCBncmVtbGluTGFuZyk7CisgIH0KKworICBhZ2VkKGFnZSkgeworICAgIHJldHVybiB0aGlzLmhhcygncGVyc29uJywgJ2FnZScsIGFnZSk7CisgIH0KK30KKworY2xhc3MgU29jaWFsVHJhdmVyc2FsU291cmNlIGV4dGVuZHMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgeworICBjb25zdHJ1Y3RvcihncmFwaCwgdHJhdmVyc2FsU3RyYXRlZ2llcywgZ3JlbWxpbkxhbmcpIHsKKyAgICBzdXBlcihncmFwaCwgdHJhdmVyc2FsU3RyYXRlZ2llcywgZ3JlbWxpbkxhbmcsIFNvY2lhbFRyYXZlcnNhbFNvdXJjZSwgU29jaWFsVHJhdmVyc2FsKTsKKyAgfQorCisgIHBlcnNvbihuYW1lKSB7CisgICAgcmV0dXJuIHRoaXMuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCBuYW1lKTsKKyAgfQorfQorCitmdW5jdGlvbiBhbm9ueW1vdXMoKSB7CisgIHJldHVybiBuZXcgU29jaWFsVHJhdmVyc2FsKG51bGwsIG51bGwsIG5ldyBHcmVtbGluTGFuZygpKTsKK30KKworZnVuY3Rpb24gYWdlZChhZ2UpIHsKKyAgcmV0dXJuIGFub255bW91cygpLmFnZWQoYWdlKTsKK30KKworZGVzY3JpYmUoJ1RyYXZlcnNhbCcsIGZ1bmN0aW9uICgpIHsKKyAgYmVmb3JlKGZ1bmN0aW9uICgpIHsKKyAgICBjb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbignZ21vZGVybicpOworICAgIHJldHVybiBjb25uZWN0aW9uLm9wZW4oKTsKKyAgfSk7CisgIGFmdGVyKGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gY29ubmVjdGlvbi5jbG9zZSgpOworICB9KTsKKyAgZGVzY3JpYmUoIiNjb25zdHJ1Y3QiLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Nob3VsZCBub3QgaGFuZyBpZiBzZXJ2ZXIgbm90IHByZXNlbnQnLCBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGdldERyaXZlclJlbW90ZUNvbm5lY3Rpb24oJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OC9ncmVtbGluJywge3RyYXZlcnNhbFNvdXJjZTogJ2cnfSkpOworICAgICAgcmV0dXJuIGcuVigpLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24oKSB7CisgICAgICAgIGFzc2VydC5mYWlsKCJ0aGVyZSBpcyBubyBzZXJ2ZXIgc28gYW4gZXJyb3Igc2hvdWxkIGhhdmUgb2NjdXJyZWQiKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikgeworICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHRocm93IGVycjsKKyAgICAgICAgYXNzZXJ0Lm9rKGVycik7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisgIGRlc2NyaWJlKCcjdG9MaXN0KCknLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Nob3VsZCBzdWJtaXQgdGhlIHRyYXZlcnNhbCBhbmQgcmV0dXJuIGEgbGlzdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKTsKKyAgICAgIHJldHVybiBnLlYoKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7CisgICAgICAgIGFzc2VydC5vayhsaXN0KTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3QubGVuZ3RoLCA2KTsKKyAgICAgICAgbGlzdC5mb3JFYWNoKHYgPT4gYXNzZXJ0Lm9rKHYgaW5zdGFuY2VvZiBWZXJ0ZXgpKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKyAgZGVzY3JpYmUoJyNjbG9uZSgpJywgZnVuY3Rpb24gKCkgeworICAgIGl0KCdzaG91bGQgcmVzZXQgYSB0cmF2ZXJzYWwgd2hlbiBjbG9uZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbik7CisgICAgICB2YXIgdCA9IGcuVigpLmNvdW50KCk7CisgICAgICByZXR1cm4gdC5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCA2KTsKKyAgICAgICAgdC5jbG9uZSgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtMikgeworICAgICAgICAgIGFzc2VydC5vayhpdGVtMik7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0yLnZhbHVlLCA2KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisgIGRlc2NyaWJlKCcjbmV4dCgpJywgZnVuY3Rpb24gKCkgeworICAgIGl0KCdzaG91bGQgc3VibWl0IHRoZSB0cmF2ZXJzYWwgYW5kIHJldHVybiBhbiBpdGVyYXRvcicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKTsKKyAgICAgIHZhciB0ID0gZy5WKCkuY291bnQoKTsKKyAgICAgIHJldHVybiB0Lmhhc05leHQoKQorICAgICAgICAudGhlbihmdW5jdGlvbiAobW9yZSkgeworICAgICAgICAgIGFzc2VydC5vayhtb3JlKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobW9yZSwgdHJ1ZSk7CisgICAgICAgICAgcmV0dXJuIHQubmV4dCgpOworICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0uZG9uZSwgZmFsc2UpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaXRlbS52YWx1ZSwgJ251bWJlcicpOworICAgICAgICAgIHJldHVybiB0Lm5leHQoKTsKKyAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgIGFzc2VydC5vayhpdGVtKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCB0cnVlKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS52YWx1ZSwgbnVsbCk7CisgICAgICAgIH0pOworICAgIH0pOworICB9KTsKKyAgZGVzY3JpYmUoJyNtYXRlcmlhbGl6ZVByb3BlcnRpZXMoKScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIHNraXAgdmVydGV4IHByb3BlcnRpZXMgd2hlbiB0b2tlbnMgaXMgc2V0JywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOworICAgICAgcmV0dXJuIGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJ0b2tlbnMiKS5WKCkudG9MaXN0KCkudGhlbihmdW5jdGlvbiAobGlzdCkgeworICAgICAgICBhc3NlcnQub2sobGlzdCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0Lmxlbmd0aCwgNik7CisgICAgICAgIGxpc3QuZm9yRWFjaCh2ID0+IGFzc2VydC5vayh2IGluc3RhbmNlb2YgVmVydGV4KSk7CisgICAgICAgIGxpc3QuZm9yRWFjaCh2ID0+IGFzc2VydC5zdHJpY3RFcXVhbCh2LnByb3BlcnRpZXMubGVuZ3RoLCAwKSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgICBpdCgnc2hvdWxkIHNraXAgZWRnZSBwcm9wZXJ0aWVzIHdoZW4gdG9rZW5zIGlzIHNldCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHZhciBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKTsKKyAgICAgIHJldHVybiBnLndpdGhfKCJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiLCAidG9rZW5zIikuRSgpLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGxpc3QpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdC5sZW5ndGgsIDYpOworICAgICAgICBsaXN0LmZvckVhY2goZSA9PiBhc3NlcnQub2soZSBpbnN0YW5jZW9mIEVkZ2UpKTsKKyAgICAgICAgLy8gZHVlIHRvIHRoZSB3YXkgZWRnZSBpcyBjb25zdHJ1Y3RlZCwgZWRnZSBwcm9wZXJ0aWVzIHdpbGwgYmUge30gb3IgW10KKyAgICAgICAgbGlzdC5mb3JFYWNoKGUgPT4gYXNzZXJ0LnN0cmljdEVxdWFsKE9iamVjdC5rZXlzKGUucHJvcGVydGllcykubGVuZ3RoLCAwKSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgICBpdCgnc2hvdWxkIHNraXAgdmVydGV4IHByb3BlcnR5IHByb3BlcnRpZXMgd2hlbiB0b2tlbnMgaXMgc2V0JywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pOworICAgICAgcmV0dXJuIGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJ0b2tlbnMiKS5WKCkucHJvcGVydGllcygpLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGxpc3QpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdC5sZW5ndGgsIDEyKTsKKyAgICAgICAgbGlzdC5mb3JFYWNoKHZwID0+IGFzc2VydC5vayh2cCBpbnN0YW5jZW9mIFZlcnRleFByb3BlcnR5KSk7CisgICAgICAgIGxpc3QuZm9yRWFjaCh2cCA9PiBhc3NlcnQuc3RyaWN0RXF1YWwodnAucHJvcGVydGllcy5sZW5ndGgsIDApKTsKKyAgICAgIH0pOworICAgIH0pOworICAgIGl0KCdzaG91bGQgc2tpcCBwYXRoIGVsZW1lbnQgcHJvcGVydGllcyB3aGVuIHRva2VucyBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7CisgICAgICB2YXIgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25uZWN0aW9uKTsKKyAgICAgIHJldHVybiBnLndpdGhfKCJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiLCAidG9rZW5zIikuVigpLmhhcygnbmFtZScsJ21hcmtvJykub3V0RSgpLmluVigpLmhhc0xhYmVsKCdzb2Z0d2FyZScpLnBhdGgoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICBjb25zdCBwID0gaXRlbS52YWx1ZTsKKyAgICAgICAgYXNzZXJ0Lm9rKHApOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocC5vYmplY3RzLmxlbmd0aCwgMyk7CisgICAgICAgIGNvbnN0IGEgPSBwLm9iamVjdHNbMF07CisgICAgICAgIGNvbnN0IGIgPSBwLm9iamVjdHNbMV07CisgICAgICAgIGNvbnN0IGMgPSBwLm9iamVjdHNbMl07CisgICAgICAgIGFzc2VydC5vayhhIGluc3RhbmNlb2YgVmVydGV4KTsKKyAgICAgICAgYXNzZXJ0Lm9rKGIgaW5zdGFuY2VvZiBFZGdlKTsKKyAgICAgICAgYXNzZXJ0Lm9rKGMgaW5zdGFuY2VvZiBWZXJ0ZXgpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYS5wcm9wZXJ0aWVzLmxlbmd0aCwgMCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChPYmplY3Qua2V5cyhiLnByb3BlcnRpZXMpLmxlbmd0aCwgMCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjLnByb3BlcnRpZXMubGVuZ3RoLCAwKTsKKyAgICAgIH0pOworICAgIH0pOworICAgIGl0KCdzaG91bGQgbWF0ZXJpYWxpemUgcGF0aCBlbGVtZW50IHByb3BlcnRpZXMgd2hlbiBhbGwgaXMgc2V0JywgZnVuY3Rpb24gKCkgeworICAgICAgdmFyIGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29ubmVjdGlvbik7CisgICAgICByZXR1cm4gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgImFsbCIpLlYoKS5oYXMoJ25hbWUnLCdtYXJrbycpLm91dEUoKS5pblYoKS5oYXNMYWJlbCgnc29mdHdhcmUnKS5wYXRoKCkubmV4dCgpLnRoZW4oZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgY29uc3QgcCA9IGl0ZW0udmFsdWU7CisgICAgICAgIGFzc2VydC5vayhwKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHAub2JqZWN0cy5sZW5ndGgsIDMpOworICAgICAgICBjb25zdCBhID0gcC5vYmplY3RzWzBdOworICAgICAgICBjb25zdCBiID0gcC5vYmplY3RzWzFdOworICAgICAgICBjb25zdCBjID0gcC5vYmplY3RzWzJdOworICAgICAgICBhc3NlcnQub2soYSBpbnN0YW5jZW9mIFZlcnRleCk7CisgICAgICAgIGFzc2VydC5vayhiIGluc3RhbmNlb2YgRWRnZSk7CisgICAgICAgIGFzc2VydC5vayhjIGluc3RhbmNlb2YgVmVydGV4KTsKKyAgICAgICAgYXNzZXJ0Lm9rKGEucHJvcGVydGllcyk7CisgICAgICAgIC8vIHRoZXNlIGFzc2VydGlvbnMgYXJlIGlmL3RoZW4gYmVjYXVzZSBvZiBob3cgbWl4ZWQgdXAgamF2YXNjcmlwdCBpcyByaWdodCBub3cgb24gc2VyaWFsaXphdGlvbgorICAgICAgICAvLyBzdGFuZGFyZHMgYXMgZGlzY3Vzc2VkIG9uIFRJTktFUlBPUC0zMTg2IC0gY2FuIGZpeCB0aGF0IG9uIGEgYnJlYWtpbmcgY2hhbmdlLi4udW50aWwgdGhlbiB3ZQorICAgICAgICAvLyBqdXN0IHJldGFpbiBleGlzdGluZyB3ZWlyZG5lc3MuCisgICAgICAgIGxldCBhTmFtZVByb3BzLCBhQWdlUHJvcHM7CisgICAgICAgIGlmIChhLnByb3BlcnRpZXMgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgIGFOYW1lUHJvcHMgPSBhLnByb3BlcnRpZXMuZmlsdGVyKHAgPT4gcC5rZXkgPT09ICduYW1lJyk7CisgICAgICAgICAgYUFnZVByb3BzID0gYS5wcm9wZXJ0aWVzLmZpbHRlcihwID0+IHAua2V5ID09PSAnYWdlJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYU5hbWVQcm9wcyA9IGEucHJvcGVydGllc1snbmFtZSddOworICAgICAgICAgIGFBZ2VQcm9wcyA9IGEucHJvcGVydGllc1snYWdlJ107CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0Lm9rKGFOYW1lUHJvcHMpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYU5hbWVQcm9wcy5sZW5ndGgsIDEpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYU5hbWVQcm9wc1swXS52YWx1ZSwgJ21hcmtvJyk7CisgICAgICAgIGFzc2VydC5vayhhQWdlUHJvcHMpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYUFnZVByb3BzLmxlbmd0aCwgMSk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhQWdlUHJvcHNbMF0udmFsdWUsIDI5KTsKKyAgICAgICAgYXNzZXJ0Lm9rKGIucHJvcGVydGllcyk7CisgICAgICAgIGNvbnN0IGJXZWlnaHQgPSBiLnByb3BlcnRpZXNbMF0udmFsdWUKKyAgICAgICAgYXNzZXJ0Lm9rKGJXZWlnaHQgIT09IHVuZGVmaW5lZCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiV2VpZ2h0LCAwLjQpOworICAgICAgICBhc3NlcnQub2soYy5wcm9wZXJ0aWVzKTsKKyAgICAgICAgbGV0IGNOYW1lUHJvcHMsIGNMYW5nUHJvcHM7CisgICAgICAgIGlmIChjLnByb3BlcnRpZXMgaW5zdGFuY2VvZiBBcnJheSkgeworICAgICAgICAgIGNOYW1lUHJvcHMgPSBjLnByb3BlcnRpZXMuZmlsdGVyKHAgPT4gcC5rZXkgPT09ICduYW1lJyk7CisgICAgICAgICAgY0xhbmdQcm9wcyA9IGMucHJvcGVydGllcy5maWx0ZXIocCA9PiBwLmtleSA9PT0gJ2xhbmcnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjTmFtZVByb3BzID0gYy5wcm9wZXJ0aWVzWyduYW1lJ107CisgICAgICAgICAgY0xhbmdQcm9wcyA9IGMucHJvcGVydGllc1snbGFuZyddOworICAgICAgICB9CisgICAgICAgIGFzc2VydC5vayhjTmFtZVByb3BzKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNOYW1lUHJvcHMubGVuZ3RoLCAxKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNOYW1lUHJvcHNbMF0udmFsdWUsICdsb3AnKTsKKyAgICAgICAgYXNzZXJ0Lm9rKGNMYW5nUHJvcHMpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY0xhbmdQcm9wcy5sZW5ndGgsIDEpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY0xhbmdQcm9wc1swXS52YWx1ZSwgJ2phdmEnKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKyAgZGVzY3JpYmUoJ2RzbCcsIGZ1bmN0aW9uKCkgeworICAgIGl0KCdzaG91bGQgZXhwb3NlIERTTCBtZXRob2RzJywgZnVuY3Rpb24oKSB7CisgICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoU29jaWFsVHJhdmVyc2FsU291cmNlKS53aXRoXyhjb25uZWN0aW9uKTsKKyAgICAgIHJldHVybiBnLnBlcnNvbignbWFya28nKS5hZ2VkKDI5KS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7CisgICAgICAgICAgYXNzZXJ0Lm9rKGxpc3QpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0Lmxlbmd0aCwgMSk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3RbMF0sICdtYXJrbycpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgZXhwb3NlIGFub255bW91cyBEU0wgbWV0aG9kcycsIGZ1bmN0aW9uKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKFNvY2lhbFRyYXZlcnNhbFNvdXJjZSkud2l0aF8oY29ubmVjdGlvbik7CisgICAgICByZXR1cm4gZy5wZXJzb24oJ21hcmtvJykuZmlsdGVyKGFnZWQoMjkpKS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7CisgICAgICAgIGFzc2VydC5vayhsaXN0KTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3QubGVuZ3RoLCAxKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3RbMF0sICdtYXJrbycpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworICBkZXNjcmliZSgibW9yZSBjb21wbGV4IHRyYXZlcnNhbHMiLCBmdW5jdGlvbigpIHsKKyAgICBpdCgnc2hvdWxkIHJldHVybiBwYXRocyBvZiB2YWx1ZSBtYXBzJywgZnVuY3Rpb24oKSB7CisgICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKTsKKyAgICAgIHJldHVybiBnLlYoMSkub3V0KCkub3JkZXIoKS5pbl8oKS5vcmRlcigpLmxpbWl0KDEpLnBhdGgoKS5ieShfXy52YWx1ZU1hcCgnbmFtZScpKS50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7CisgICAgICAgIGFzc2VydC5vayhsaXN0KTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3QubGVuZ3RoLCAxKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxpc3RbMF0ub2JqZWN0c1swXS5nZXQoJ25hbWUnKVswXSwgIm1hcmtvIik7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsaXN0WzBdLm9iamVjdHNbMV0uZ2V0KCduYW1lJylbMF0sICJ2YWRhcyIpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdFswXS5vYmplY3RzWzJdLmdldCgnbmFtZScpWzBdLCAibWFya28iKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKyAgZGVzY3JpYmUoInNob3VsZCBhbGxvdyBUcmF2ZXJzYWxTdHJhdGVneSBkZWZpbml0aW9uIiwgZnVuY3Rpb24oKSB7CisgICAgaXQoJ3Nob3VsZCBhbGxvdyBTdWJncmFwaFN0cmF0ZWd5JywgZnVuY3Rpb24oKSB7CisgICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKS53aXRoU3RyYXRlZ2llcygKKyAgICAgICAgICBuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6X18uaGFzTGFiZWwoInBlcnNvbiIpLCBlZGdlczpfXy5oYXNMYWJlbCgiY3JlYXRlZCIpfSkpOworICAgICAgZy5WKCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCA0KTsKKyAgICAgIH0sIChlcnIpID0+IGFzc2VydC5mYWlsKCJ0YW5rZWQ6ICIgKyBlcnIpKTsKKyAgICAgIGcuRSgpLmNvdW50KCkubmV4dCgpLnRoZW4oZnVuY3Rpb24gKGl0ZW0xKSB7CisgICAgICAgIGFzc2VydC5vayhpdGVtMSk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtMS52YWx1ZSwgMCk7CisgICAgICB9LCAoZXJyKSA9PiBhc3NlcnQuZmFpbCgidGFua2VkOiAiICsgZXJyKSk7CisgICAgICBnLlYoKS5sYWJlbCgpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCAxKTsKKyAgICAgIH0sIChlcnIpID0+IGFzc2VydC5mYWlsKCJ0YW5rZWQ6ICIgKyBlcnIpKTsKKyAgICAgIGcuVigpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCAicGVyc29uIik7CisgICAgICB9LCAoZXJyKSA9PiBhc3NlcnQuZmFpbCgidGFua2VkOiAiICsgZXJyKSk7CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBhbGxvdyBSZWFkT25seVN0cmF0ZWd5JywgZnVuY3Rpb24oKSB7CisgICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhjb25uZWN0aW9uKS53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKTsKKyAgICAgIHJldHVybiBnLmFkZFYoKS5pdGVyYXRlKCkudGhlbigoKSA9PiBhc3NlcnQuZmFpbCgic2hvdWxkIGhhdmUgdGFua2VkIiksIChlcnIpID0+IGFzc2VydC5vayhlcnIpKTsKKyAgICB9KTsKKyAgICBpdCgnc2hvdWxkIGFsbG93IE9wdGlvbnNTdHJhdGVneScsIGZ1bmN0aW9uKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneSgpKTsKKyAgICAgIHJldHVybiBnLlYoKS5jb3VudCgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtMSkgeworICAgICAgICBhc3NlcnQub2soaXRlbTEpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbTEudmFsdWUsIDYpOworICAgICAgfSk7CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBhbGxvdyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneScsIGZ1bmN0aW9uKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMobmV3IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KHtsb2dXYXJuaW5nczogZmFsc2UsIHRocm93RXhjZXB0aW9uOiB0cnVlfSkpOworICAgICAgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KCJpZCIsICJwbGVhc2UtZG9uJ3QtdXNlLWlkIikuaXRlcmF0ZSgpLnRoZW4oKCkgPT4gYXNzZXJ0LmZhaWwoInNob3VsZCBoYXZlIHRhbmtlZCIpLCAoZXJyKSA9PiBhc3NlcnQub2soZXJyKSk7CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBhbGxvdyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneScsIGZ1bmN0aW9uKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMobmV3IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KHtsb2dXYXJuaW5nczogZmFsc2UsIHRocm93RXhjZXB0aW9uOiB0cnVlfSkpOworICAgICAgZy5WKCkub3V0RSgiY3JlYXRlZCIsICJrbm93cyIpLmNvdW50KCkubmV4dCgpLnRoZW4oZnVuY3Rpb24gKGl0ZW0xKSB7CisgICAgICAgIGFzc2VydC5vayhpdGVtMSk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtMS52YWx1ZSwgNik7CisgICAgICB9KTsKKyAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5pdGVyYXRlKCkudGhlbigoKSA9PiBhc3NlcnQuZmFpbCgic2hvdWxkIGhhdmUgdGFua2VkIiksIChlcnIpID0+IGFzc2VydC5zdHJpY3RFcXVhbChlcnIuc3RhdHVzQ29kZSwgNTAwKSk7CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBhbGxvdyB3aXRoXyhldmFsdWF0aW9uVGltZW91dCwxMCknLCBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pLndpdGhfKCd4Jykud2l0aF8oJ2V2YWx1YXRpb25UaW1lb3V0JywgMTApOworICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLml0ZXJhdGUoKS50aGVuKCgpID0+IGFzc2VydC5mYWlsKCJzaG91bGQgaGF2ZSB0YW5rZWQiKSwgKGVycikgPT4gYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5zdGF0dXNDb2RlLCA0MDApKTsKKyAgICB9KTsKKyAgICBpdCgnc2hvdWxkIGFsbG93IFNlZWRTdHJhdGVneScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDk5OTk5OX0pKTsKKyAgICAgIHJldHVybiBnLlYoKS5jb2luKDAuNCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCAxKTsKKyAgICAgIH0sIChlcnIpID0+IGFzc2VydC5mYWlsKCJ0YW5rZWQ6ICIgKyBlcnIpKTsKKyAgICB9KTsKKyAgICBpdCgnc2hvdWxkIGFsbG93IHdpdGhvdXQgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3knLCBmdW5jdGlvbigpIHsKKyAgICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhfKGNvbm5lY3Rpb24pLndpdGhvdXRTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KTsKKyAgICAgIHJldHVybiBnLlYoKS5jb3VudCgpLm5leHQoKS50aGVuKGZ1bmN0aW9uIChpdGVtMSkgeworICAgICAgICBhc3NlcnQub2soaXRlbTEpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbTEudmFsdWUsIDYpOworICAgICAgfSk7CisgICAgfSk7CisgICAgaXQoJ3Nob3VsZCBhbGxvdyB3aXRoIEZpbHRlclJhbmtpbmdTdHJhdGVneScsIGZ1bmN0aW9uKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8oY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMobmV3IEZpbHRlclJhbmtpbmdTdHJhdGVneSgpKTsKKyAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkudGhlbihmdW5jdGlvbiAoaXRlbTEpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKGl0ZW0xKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0xLnZhbHVlLCA0KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKyAgLy9UT0RPOjogUmUtZW5hYmxlIGFmdGVyIHR4IHJlaW1wbGVtZW50YXRpb24KKyAgLy8gZGVzY3JpYmUoInNob3VsZCBoYW5kbGUgdHggZXJyb3JzIGlmIGdyYXBoIG5vdCBzdXBwb3J0IHR4IiwgZnVuY3Rpb24oKSB7CisgIC8vICAgaXQoJ3Nob3VsZCB0aHJvdyBleGNlcHRpb24gb24gY29tbWl0IGlmIGdyYXBoIG5vdCBzdXBwb3J0IHR4JywgYXN5bmMgZnVuY3Rpb24oKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOworICAvLyAgICAgY29uc3QgdHggPSBnLnR4KCk7CisgIC8vICAgICBjb25zdCBndHggPSB0eC5iZWdpbigpOworICAvLyAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZy5WKCkuY291bnQoKS5uZXh0KCk7CisgIC8vICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoNiwgcmVzdWx0LnZhbHVlKTsKKyAgLy8gICAgIHRyeSB7CisgIC8vICAgICAgIGF3YWl0IHR4LmNvbW1pdCgpOworICAvLyAgICAgICBhc3NlcnQuZmFpbCgic2hvdWxkIHRocm93IGVycm9yIik7CisgIC8vICAgICB9IGNhdGNoIChlcnIpIHsKKyAgLy8gICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVyci5zdGF0dXNDb2RlLCA1MDApOworICAvLyAgICAgICBhc3NlcnQub2soZXJyLnN0YXR1c01lc3NhZ2UuaW5jbHVkZXMoJ0dyYXBoIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zJykpOworICAvLyAgICAgfQorICAvLyAgIH0pOworICAvLyAgIGl0KCdzaG91bGQgdGhyb3cgZXhjZXB0aW9uIG9uIHJvbGxiYWNrIGlmIGdyYXBoIG5vdCBzdXBwb3J0IHR4JywgYXN5bmMgZnVuY3Rpb24oKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOworICAvLyAgICAgY29uc3QgdHggPSBnLnR4KCk7CisgIC8vICAgICB0eC5iZWdpbigpOworICAvLyAgICAgdHJ5IHsKKyAgLy8gICAgICAgYXdhaXQgdHgucm9sbGJhY2soKTsKKyAgLy8gICAgICAgYXNzZXJ0LmZhaWwoInNob3VsZCB0aHJvdyBlcnJvciIpOworICAvLyAgICAgfSBjYXRjaCAoZXJyKSB7CisgIC8vICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlcnIuc3RhdHVzQ29kZSwgNTAwKTsKKyAgLy8gICAgICAgYXNzZXJ0Lm9rKGVyci5zdGF0dXNNZXNzYWdlLmluY2x1ZGVzKCdHcmFwaCBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zYWN0aW9ucycpKTsKKyAgLy8gICAgIH0KKyAgLy8gICB9KTsKKyAgLy8gfSk7CisgIC8vIGRlc2NyaWJlKCdzdXBwb3J0IHJlbW90ZSB0cmFuc2FjdGlvbnMgLSBjb21taXQnLCBmdW5jdGlvbigpIHsKKyAgLy8gICBiZWZvcmUoZnVuY3Rpb24gKCkgeworICAvLyAgICAgdHhDb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbignZ3R4Jyk7CisgIC8vICAgICByZXR1cm4gdHhDb25uZWN0aW9uLm9wZW4oKTsKKyAgLy8gICB9KTsKKyAgLy8gICBhZnRlcihmdW5jdGlvbiAoKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyh0eENvbm5lY3Rpb24pOworICAvLyAgICAgcmV0dXJuIGcuVigpLmRyb3AoKS5pdGVyYXRlKCkudGhlbigoKSA9PiB7CisgIC8vICAgICAgIHJldHVybiB0eENvbm5lY3Rpb24uY2xvc2UoKQorICAvLyAgICAgfSk7CisgIC8vICAgfSk7CisgIC8vICAgaXQoJ3Nob3VsZCBjb21taXQgYSBzaW1wbGUgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyh0eENvbm5lY3Rpb24pOworICAvLyAgICAgY29uc3QgdHggPSBnLnR4KCk7CisgIC8vICAgICBjb25zdCBndHggPSB0eC5iZWdpbigpOworICAvLyAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWworICAvLyAgICAgICBndHguYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9yZ2UiKS5pdGVyYXRlKCksCisgIC8vICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJqb3NoIikuaXRlcmF0ZSgpCisgIC8vICAgICBdKTsKKyAgLy8KKyAgLy8gICAgIGxldCByID0gYXdhaXQgZ3R4LlYoKS5jb3VudCgpLm5leHQoKTsKKyAgLy8gICAgIC8vIGFzc2VydCB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uLi4uLgorICAvLyAgICAgYXNzZXJ0Lm9rKHIpOworICAvLyAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHIudmFsdWUsIDIpOworICAvLworICAvLyAgICAgLy8gbm93IGNvbW1pdCBjaGFuZ2VzIHRvIHRlc3Qgb3V0c2lkZSBvZiB0aGUgdHJhbnNhY3Rpb24KKyAgLy8gICAgIGF3YWl0IHR4LmNvbW1pdCgpOworICAvLworICAvLyAgICAgciA9IGF3YWl0IGcuVigpLmNvdW50KCkubmV4dCgpOworICAvLyAgICAgYXNzZXJ0Lm9rKHIpOworICAvLyAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHIudmFsdWUsIDIpOworICAvLyAgICAgLy8gY29ubmVjdGlvbiBjbG9zaW5nIGFzeW5jLCBzbyBuZWVkIHRvIHdhaXQKKyAgLy8gICAgIHdoaWxlICh0eC5fc2Vzc2lvbkJhc2VkQ29ubmVjdGlvbi5pc09wZW4pIHsKKyAgLy8gICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7CisgIC8vICAgICB9CisgIC8vICAgICBhc3NlcnQub2soIXR4Ll9zZXNzaW9uQmFzZWRDb25uZWN0aW9uLmlzT3Blbik7CisgIC8vICAgfSk7CisgIC8vIH0pOworICAvLyBkZXNjcmliZSgnc3VwcG9ydCByZW1vdGUgdHJhbnNhY3Rpb25zIC0gcm9sbGJhY2snLCBmdW5jdGlvbigpIHsKKyAgLy8gICBiZWZvcmUoZnVuY3Rpb24gKCkgeworICAvLworICAvLyAgICAgdHhDb25uZWN0aW9uID0gZ2V0Q29ubmVjdGlvbignZ3R4Jyk7CisgIC8vICAgICByZXR1cm4gdHhDb25uZWN0aW9uLm9wZW4oKTsKKyAgLy8gICB9KTsKKyAgLy8gICBhZnRlcihmdW5jdGlvbiAoKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyh0eENvbm5lY3Rpb24pOworICAvLyAgICAgcmV0dXJuIGcuVigpLmRyb3AoKS5pdGVyYXRlKCkudGhlbigoKSA9PiB7CisgIC8vICAgICAgIHJldHVybiB0eENvbm5lY3Rpb24uY2xvc2UoKQorICAvLyAgICAgfSk7CisgIC8vICAgfSk7CisgIC8vICAgaXQoJ3Nob3VsZCByb2xsYmFjayBhIHNpbXBsZSB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uKCkgeworICAvLyAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8odHhDb25uZWN0aW9uKTsKKyAgLy8gICAgIGNvbnN0IHR4ID0gZy50eCgpOworICAvLyAgICAgY29uc3QgZ3R4ID0gdHguYmVnaW4oKTsKKyAgLy8gICAgIGF3YWl0IFByb21pc2UuYWxsKFsKKyAgLy8gICAgICAgZ3R4LmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImpvcmdlIikuaXRlcmF0ZSgpLAorICAvLyAgICAgICBndHguYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiam9zaCIpLml0ZXJhdGUoKQorICAvLyAgICAgXSk7CisgIC8vCisgIC8vICAgICBsZXQgciA9IGF3YWl0IGd0eC5WKCkuY291bnQoKS5uZXh0KCk7CisgIC8vICAgICAvLyBhc3NlcnQgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4uLi4KKyAgLy8gICAgIGFzc2VydC5vayhyKTsKKyAgLy8gICAgIGFzc2VydC5zdHJpY3RFcXVhbChyLnZhbHVlLCAyKTsKKyAgLy8KKyAgLy8gICAgIC8vIG5vdyByb2xsYmFjayBjaGFuZ2VzIHRvIHRlc3Qgb3V0c2lkZSBvZiB0aGUgdHJhbnNhY3Rpb24KKyAgLy8gICAgIGF3YWl0IHR4LnJvbGxiYWNrKCk7CisgIC8vCisgIC8vICAgICByID0gYXdhaXQgZy5WKCkuY291bnQoKS5uZXh0KCk7CisgIC8vICAgICBhc3NlcnQub2socik7CisgIC8vICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoci52YWx1ZSwgMCk7CisgIC8vICAgICAvLyBjb25uZWN0aW9uIGNsb3NpbmcgYXN5bmMsIHNvIG5lZWQgdG8gd2FpdAorICAvLyAgICAgd2hpbGUgKHR4Ll9zZXNzaW9uQmFzZWRDb25uZWN0aW9uLmlzT3BlbikgeworICAvLyAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTApKTsKKyAgLy8gICAgIH0KKyAgLy8gICAgIGFzc2VydC5vayghdHguX3Nlc3Npb25CYXNlZENvbm5lY3Rpb24uaXNPcGVuKTsKKyAgLy8gICB9KTsKKyAgLy8gfSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvYXV0aC10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2F1dGgtdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIyYTVkCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2F1dGgtdGVzdC5qcwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7CitpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInOworaW1wb3J0IHsgYmFzaWMsIHNpZ3Y0IH0gZnJvbSAnLi4vLi4vbGliL2RyaXZlci9hdXRoLmpzJzsKKworZGVzY3JpYmUoJ2F1dGgnLCBmdW5jdGlvbiAoKSB7CisgIGRlc2NyaWJlKCdiYXNpYycsIGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiBjcmVhdGVNb2NrUmVxdWVzdCgpIHsKKyAgICAgIHJldHVybiB7CisgICAgICAgIHVybDogJ2h0dHBzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicsCisgICAgICAgIG1ldGhvZDogJ1BPU1QnLAorICAgICAgICBoZWFkZXJzOiB7CisgICAgICAgICAgJ2FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCcsCisgICAgICAgIH0sCisgICAgICAgIGJvZHk6IG5ldyBVaW50OEFycmF5KDApLAorICAgICAgfTsKKyAgICB9CisKKyAgICBpdCgnc2hvdWxkIGFkZCBhdXRob3JpemF0aW9uIGhlYWRlcicsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlcXVlc3QgPSBjcmVhdGVNb2NrUmVxdWVzdCgpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcXVlc3QuaGVhZGVyc1snYXV0aG9yaXphdGlvbiddLCB1bmRlZmluZWQpOworCisgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IGJhc2ljKCd1c2VybmFtZScsICdwYXNzd29yZCcpOworICAgICAgY29uc3QgcmVzdWx0ID0gaW50ZXJjZXB0b3IocmVxdWVzdCk7CisKKyAgICAgIGFzc2VydC5vayhyZXN1bHQuaGVhZGVyc1snYXV0aG9yaXphdGlvbiddLnN0YXJ0c1dpdGgoJ0Jhc2ljICcpKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgZW5jb2RlIGNyZWRlbnRpYWxzIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlcXVlc3QgPSBjcmVhdGVNb2NrUmVxdWVzdCgpOworICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSBiYXNpYygndXNlcm5hbWUnLCAncGFzc3dvcmQnKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGludGVyY2VwdG9yKHJlcXVlc3QpOworCisgICAgICBjb25zdCBlbmNvZGVkID0gcmVzdWx0LmhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXS5zdWJzdHJpbmcoJ0Jhc2ljICcubGVuZ3RoKTsKKyAgICAgIGNvbnN0IGRlY29kZWQgPSBCdWZmZXIuZnJvbShlbmNvZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZWNvZGVkLCAndXNlcm5hbWU6cGFzc3dvcmQnKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHJlcXVlc3Qgb2JqZWN0JywgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZU1vY2tSZXF1ZXN0KCk7CisgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IGJhc2ljKCd1c2VybmFtZScsICdwYXNzd29yZCcpOworICAgICAgY29uc3QgcmVzdWx0ID0gaW50ZXJjZXB0b3IocmVxdWVzdCk7CisKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIHJlcXVlc3QpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnc2lndjQnLCBmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gY3JlYXRlTW9ja1JlcXVlc3QoKSB7CisgICAgICByZXR1cm4geworICAgICAgICB1cmw6ICdodHRwczovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nLAorICAgICAgICBtZXRob2Q6ICdQT1NUJywKKyAgICAgICAgaGVhZGVyczogeworICAgICAgICAgICdhY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAnLAorICAgICAgICB9LAorICAgICAgICBib2R5OiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbSgneyJncmVtbGluIjoiZy5WKCkifScpKSwKKyAgICAgIH07CisgICAgfQorCisgICAgY29uc3QgbW9ja1Byb3ZpZGVyID0gKCkgPT4gKHsKKyAgICAgIGFjY2Vzc0tleUlkOiAnTU9DS19BQ0NFU1NfS0VZJywKKyAgICAgIHNlY3JldEFjY2Vzc0tleTogJ01PQ0tfU0VDUkVUX0tFWScsCisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGFkZCBzaWduZWQgaGVhZGVycycsIGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlcXVlc3QgPSBjcmVhdGVNb2NrUmVxdWVzdCgpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcXVlc3QuaGVhZGVyc1snYXV0aG9yaXphdGlvbiddLCB1bmRlZmluZWQpOworCisgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHNpZ3Y0KCd4eC1kdW1teS0xJywgJ3Rlc3Qtc2VydmljZScsIG1vY2tQcm92aWRlcik7CisgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnRlcmNlcHRvcihyZXF1ZXN0KTsKKworICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5oZWFkZXJzWyd4LWFtei1kYXRlJ10pOworICAgICAgY29uc3QgYXV0aEhlYWRlciA9IHJlc3VsdC5oZWFkZXJzWydhdXRob3JpemF0aW9uJ107CisgICAgICBhc3NlcnQub2soYXV0aEhlYWRlci5zdGFydHNXaXRoKCdBV1M0LUhNQUMtU0hBMjU2IENyZWRlbnRpYWw9TU9DS19BQ0NFU1NfS0VZJykpOworICAgICAgYXNzZXJ0Lm9rKGF1dGhIZWFkZXIuaW5jbHVkZXMoJ3h4LWR1bW15LTEvdGVzdC1zZXJ2aWNlL2F3czRfcmVxdWVzdCcpKTsKKyAgICAgIGFzc2VydC5vayhhdXRoSGVhZGVyLmluY2x1ZGVzKCdTaWduYXR1cmU9JykpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBhZGQgc2Vzc2lvbiB0b2tlbiB3aGVuIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZU1vY2tSZXF1ZXN0KCk7CisgICAgICBjb25zdCBwcm92aWRlcldpdGhUb2tlbiA9ICgpID0+ICh7CisgICAgICAgIGFjY2Vzc0tleUlkOiAnTU9DS19BQ0NFU1NfS0VZJywKKyAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiAnTU9DS19TRUNSRVRfS0VZJywKKyAgICAgICAgc2Vzc2lvblRva2VuOiAnTU9DS19TRVNTSU9OX1RPS0VOJywKKyAgICAgIH0pOworCisgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHNpZ3Y0KCd4eC1kdW1teS0xJywgJ3Rlc3Qtc2VydmljZScsIHByb3ZpZGVyV2l0aFRva2VuKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludGVyY2VwdG9yKHJlcXVlc3QpOworCisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmhlYWRlcnNbJ3gtYW16LXNlY3VyaXR5LXRva2VuJ10sICdNT0NLX1NFU1NJT05fVE9LRU4nKTsKKyAgICAgIGNvbnN0IGF1dGhIZWFkZXIgPSByZXN1bHQuaGVhZGVyc1snYXV0aG9yaXphdGlvbiddOworICAgICAgYXNzZXJ0Lm9rKGF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPScpKTsKKyAgICAgIGFzc2VydC5vayhhdXRoSGVhZGVyLmluY2x1ZGVzKCdTaWduYXR1cmU9JykpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgcmVxdWVzdCBvYmplY3QnLCBhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCByZXF1ZXN0ID0gY3JlYXRlTW9ja1JlcXVlc3QoKTsKKyAgICAgIGNvbnN0IGludGVyY2VwdG9yID0gc2lndjQoJ3h4LWR1bW15LTEnLCAndGVzdC1zZXJ2aWNlJywgbW9ja1Byb3ZpZGVyKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGludGVyY2VwdG9yKHJlcXVlc3QpOworCisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCByZXF1ZXN0KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9jbGllbnQtdGVzdC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9jbGllbnQtdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODM0MmEzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2NsaWVudC10ZXN0LmpzCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnOworaW1wb3J0IENsaWVudCBmcm9tICcuLi8uLi9saWIvZHJpdmVyL2NsaWVudC5qcyc7CisKK2Rlc2NyaWJlKCdDbGllbnQnLCBmdW5jdGlvbiAoKSB7CisgIGNvbnN0IHF1ZXJ5ID0gJ2N1c3RvbVF1ZXJ5JzsKKworICBpdCgnc2hvdWxkIHN1Ym1pdCByZXF1ZXN0IHdpdGggZGVmYXVsdCB0cmF2ZXJzYWxTb3VyY2UnLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc3QgY29ubmVjdGlvbk1vY2sgPSB7CisgICAgICBzdWJtaXQ6IGZ1bmN0aW9uIChyZXF1ZXN0TWVzc2FnZSkgeworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVxdWVzdE1lc3NhZ2UuZ2V0R3JlbWxpbigpLCBxdWVyeSk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXF1ZXN0TWVzc2FnZS5nZXRHKCksICdnJyk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXF1ZXN0TWVzc2FnZS5nZXRMYW5ndWFnZSgpLCAnZ3JlbWxpbi1sYW5nJyk7CisgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAgIH0KKyAgICB9OworCisgICAgY29uc3QgY3VzdG9tQ2xpZW50ID0gbmV3IENsaWVudCgnaHR0cDovL2xvY2FsaG9zdDo5MzIxJywge3RyYXZlcnNhbFNvdXJjZTogJ2cnLCBjb25uZWN0T25TdGFydHVwOiBmYWxzZX0pOworICAgIGN1c3RvbUNsaWVudC5fY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25Nb2NrOworICAgIGN1c3RvbUNsaWVudC5zdWJtaXQocXVlcnkpCisgIH0pOworCisgIGl0KCdzaG91bGQgc3VibWl0IHJlcXVlc3Qgd2l0aCBjdXN0b20gdHJhdmVyc2FsU291cmNlJywgZnVuY3Rpb24gKCkgeworICAgIGNvbnN0IGNvbm5lY3Rpb25Nb2NrID0geworICAgICAgc3VibWl0OiBmdW5jdGlvbiAocmVxdWVzdE1lc3NhZ2UpIHsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcXVlc3RNZXNzYWdlLmdldEdyZW1saW4oKSwgcXVlcnkpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVxdWVzdE1lc3NhZ2UuZ2V0RygpLCAnZ0N1c3RvbScpOworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICB9CisgICAgfTsKKworICAgIGNvbnN0IGN1c3RvbUNsaWVudCA9IG5ldyBDbGllbnQoJ2h0dHA6Ly9sb2NhbGhvc3Q6OTMyMScsIHt0cmF2ZXJzYWxTb3VyY2U6ICdnQ3VzdG9tJywgY29ubmVjdE9uU3RhcnR1cDogZmFsc2V9KTsKKyAgICBjdXN0b21DbGllbnQuX2Nvbm5lY3Rpb24gPSBjb25uZWN0aW9uTW9jazsKKyAgICBjdXN0b21DbGllbnQuc3VibWl0KHF1ZXJ5KQorICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2VsZW1lbnQtY29tcGFyaXNvbi10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2VsZW1lbnQtY29tcGFyaXNvbi10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNGZkOTgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZWxlbWVudC1jb21wYXJpc29uLXRlc3QuanMKQEAgLTAsMCArMSwyOTggQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgZXhwZWN0LCB1c2UsIEFzc2VydGlvbiB9IGZyb20gJ2NoYWknOworaW1wb3J0IHsgVmVydGV4UHJvcGVydHksIFByb3BlcnR5LCBWZXJ0ZXgsIEVkZ2UsIFBhdGggfSBmcm9tICcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoLmpzJzsKK2ltcG9ydCB7IGRlZXBNZW1iZXJzQnlJZCwgb3B0IH0gZnJvbSAnLi4vY3VjdW1iZXIvZWxlbWVudC1jb21wYXJpc29uLmpzJzsKK2ltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcWwnOworCit1c2UoZnVuY3Rpb24gKF9jaGFpLCBjaGFpVXRpbHMpIHsKKyAgQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCgnbWVtYmVycycsIGZ1bmN0aW9uIChfc3VwZXIpIHsKKyAgICByZXR1cm4gZGVlcE1lbWJlcnNCeUlkOworICB9KTsKK30pOworCitkZXNjcmliZSgncHJpbWl0aXZlcycsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIHBhc3MnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwoMSwgMSwgb3B0KSkudG8uYmUudHJ1ZTsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChmYWxzZSwgZmFsc2UsIG9wdCkpLnRvLmJlLnRydWU7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwobnVsbCwgbnVsbCwgb3B0KSkudG8uYmUudHJ1ZTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgZmFpbCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCgxLCAyLCBvcHQpKS50by5iZS5mYWxzZTsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCh0cnVlLCBmYWxzZSwgb3B0KSkudG8uYmUuZmFsc2U7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwoMCwgIjAiLCBvcHQpKS50by5iZS5mYWxzZTsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCgwLCBmYWxzZSwgb3B0KSkudG8uYmUuZmFsc2U7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwoMCwgbnVsbCwgb3B0KSkudG8uYmUuZmFsc2U7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwoZmFsc2UsIG51bGwsIG9wdCkpLnRvLmJlLmZhbHNlOworICAgIH0pOworfSk7CisKK2Rlc2NyaWJlKCdlbGVtZW50cycsIGZ1bmN0aW9uICgpIHsKKyAgICBjb25zdCB2MSA9IG5ldyBWZXJ0ZXgoMSwgImRvZyIsIHVuZGVmaW5lZCk7CisgICAgY29uc3QgdjIgPSBuZXcgVmVydGV4KDEsICJjYXQiLCB1bmRlZmluZWQpOworICAgIGNvbnN0IHYzID0gbmV3IFZlcnRleCgyLCAiY2F0IiwgdW5kZWZpbmVkKTsKKworICAgIGNvbnN0IGUxID0gbmV3IEVkZ2UoMiwgdjEsICJjaGFzZXMiLCB2MywgdW5kZWZpbmVkKTsKKyAgICBjb25zdCBlMiA9IG5ldyBFZGdlKDMsIHYxLCAiY2hhc2VzIiwgdjMsIHVuZGVmaW5lZCk7CisgICAgY29uc3QgZTMgPSBuZXcgRWRnZSgzLCB2MiwgImNoYXNlcyIsIHYzLCB1bmRlZmluZWQpOworCisgICAgY29uc3QgdnAxID0gbmV3IFZlcnRleFByb3BlcnR5KDMsICJzaXplIiwgInNtYWxsIiwgdW5kZWZpbmVkKTsKKyAgICBjb25zdCB2cDIgPSBuZXcgVmVydGV4UHJvcGVydHkoMywgInNpemUiLCAibGFyZ2UiLCB1bmRlZmluZWQpOworICAgIGNvbnN0IHZwMyA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSg0LCAic2l6ZSIsICJsYXJnZSIsIHVuZGVmaW5lZCk7CisKKyAgICBpdCgnc2hvdWxkIHBhc3Mgd2l0aCBzYW1lIGlkLCBkaWZmZXJlbnQgdmFsdWVzJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHYxLCB2Miwgb3B0KSkudG8uYmUudHJ1ZTsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChlMiwgZTMsIG9wdCkpLnRvLmJlLnRydWU7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwodnAxLCB2cDIsIG9wdCkpLnRvLmJlLnRydWU7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBkaWZmZXJlbnQgaWQsIHNhbWUgdmFsdWVzJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHYyLCB2Mywgb3B0KSkudG8uYmUuZmFsc2U7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwoZTEsIGUyLCBvcHQpKS50by5iZS5mYWxzZTsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCh2cDIsIHZwMywgb3B0KSkudG8uYmUuZmFsc2U7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBzYW1lIGlkLCBkaWZmZXJlbnQgdHlwZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbCh2MywgZTEsIG9wdCkpLnRvLmJlLmZhbHNlOworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKGUzLCB2cDEsIG9wdCkpLnRvLmJlLmZhbHNlOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ2VsZW1lbnQgYXJyYXlzJywgZnVuY3Rpb24gKCkgeworICAgICAgICBjb25zdCBlYTEgPSBbdjEsIGUyLCB2M107CisgICAgICAgIGNvbnN0IGVhMiA9IFt2MSwgZTIsIHYzXTsKKyAgICAgICAgY29uc3QgZWEzID0gW2UyLCB2MSwgdjNdOworICAgICAgICBjb25zdCBlYTQgPSBbZTIsIGUyLCB2M107CisgICAgICAgIGNvbnN0IGVhNSA9IFt2MSwgZTIsIHYzLCB2cDFdOworCisgICAgICAgIGl0KCd1bm9yZGVyZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBleHBlY3QoZWExKS50by5oYXZlLmRlZXAubWVtYmVycyhlYTIpOworICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoZWEzKTsKKyAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhlYTQpOworICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKGVhNSk7CisgICAgICAgICAgICBleHBlY3QoZWE1KS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoZWExKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBleHBlY3QoZWExKS50by5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGVhMik7CisgICAgICAgICAgICBleHBlY3QoZWExKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhlYTMpOworICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoZWE0KTsKKyAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGVhNSk7CisgICAgICAgICAgICBleHBlY3QoZWE1KS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhlYTEpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnaW5jbHVkZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLmluY2x1ZGUuZGVlcC5tZW1iZXJzKGVhMik7CisgICAgICAgICAgICBleHBlY3QoZWExKS50by5pbmNsdWRlLmRlZXAubWVtYmVycyhlYTMpOworICAgICAgICAgICAgZXhwZWN0KGVhMSkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWE0KTsKKyAgICAgICAgICAgIGV4cGVjdChlYTEpLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhlYTUpOworCisgICAgICAgICAgICBleHBlY3QoZWEyKS50by5pbmNsdWRlLmRlZXAubWVtYmVycyhlYTEpOworICAgICAgICAgICAgZXhwZWN0KGVhMykudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWExKTsKKyAgICAgICAgICAgIGV4cGVjdChlYTQpLnRvLm5vdC5pbmNsdWRlLmRlZXAubWVtYmVycyhlYTEpOworICAgICAgICAgICAgZXhwZWN0KGVhNSkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoZWExKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ3Byb3BlcnR5JywgZnVuY3Rpb24gKCkgeworICAgIGNvbnN0IHAxID0gbmV3IFByb3BlcnR5KCJhIiwgIjEiKTsKKyAgICBjb25zdCBwMiA9IG5ldyBQcm9wZXJ0eSgiYSIsICIxIik7CisgICAgY29uc3QgcDMgPSBuZXcgUHJvcGVydHkoImEiLCAxKTsKKyAgICBjb25zdCBwNCA9IG5ldyBQcm9wZXJ0eSgxLCAxKTsKKyAgICBjb25zdCBwNSA9IG5ldyBQcm9wZXJ0eSgxLCAiYSIpOworCisgICAgaXQoJ3Nob3VsZCBwYXNzIG9ubHkgcHJvcGVydGllcyB0aGF0IG1hdGNoIGV4YWN0bHknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwocDEsIHAyLCBvcHQpKS50by5iZS50cnVlOworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHAxLCBwMywgb3B0KSkudG8uYmUuZmFsc2U7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwocDEsIHA0LCBvcHQpKS50by5iZS5mYWxzZTsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChwMywgcDUsIG9wdCkpLnRvLmJlLmZhbHNlOworICAgIH0pOworfSk7CisKK2Rlc2NyaWJlKCdhcnJheXMnLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc3QgYTEgPSBbMSwgMiwgM107CisgICAgY29uc3QgYTIgPSBbMSwgMiwgM107CisgICAgY29uc3QgYTMgPSBbMiwgMSwgM107CisgICAgY29uc3QgYTQgPSBbMiwgMiwgM107CisgICAgY29uc3QgYTUgPSBbMSwgMiwgMywgNF07CisKKyAgICBpdCgndW5vcmRlcmVkJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoYTEpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKGEyKTsKKyAgICAgICAgZXhwZWN0KGExKS50by5oYXZlLmRlZXAubWVtYmVycyhhMyk7CisgICAgICAgIGV4cGVjdChhMSkudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKGE0KTsKKyAgICAgICAgZXhwZWN0KGExKS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoYTUpOworICAgICAgICBleHBlY3QoYTUpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhhMSk7CisgICAgfSk7CisKKyAgICBpdCgnb3JkZXJlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KGExKS50by5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGEyKTsKKyAgICAgICAgZXhwZWN0KGExKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhMyk7CisgICAgICAgIGV4cGVjdChhMSkudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTQpOworICAgICAgICBleHBlY3QoYTEpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGE1KTsKKyAgICAgICAgZXhwZWN0KGE1KS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhMSk7CisgICAgfSk7CisKKyAgICBjb25zdCBhNiA9IFsxLCAyLCBhMV07CisgICAgY29uc3QgYTcgPSBbMSwgYTMsIDJdOworICAgIGNvbnN0IGE4ID0gWzEsIDIsIGE1XTsKKworICAgIGNvbnN0IGE5ID0gWzEsIGExLCBhMV07CisgICAgY29uc3QgYTEwID0gWzEsIGExLCBhM107CisKKyAgICBjb25zdCBhMTEgPSBbYTldCisgICAgY29uc3QgYTEyID0gW2ExMF0KKworICAgIGl0KCd1bm9yZGVyZWQgbmVzdGVkJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoYTYpLnRvLmhhdmUubm90LmRlZXAubWVtYmVycyhhNyk7IC8vIG5lc3RlZCBhcnJheXMgb3JkZXJlZCBkaWZmZXJlbnRseSBkb24ndCBwYXNzIGFzIHRoZSBzYW1lIGl0ZW0KKyAgICAgICAgZXhwZWN0KGE2KS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoYTgpOworICAgICAgICBleHBlY3QoYTkpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhhMTApOworICAgICAgICBleHBlY3QoYTExKS50by5ub3QuaGF2ZS5kZWVwLm1lbWJlcnMoYTEyKTsKKyAgICB9KTsKKworICAgIGl0KCdvcmRlcmVkIG5lc3RlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KGE2KS50by5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGE2KTsKKyAgICAgICAgZXhwZWN0KGE2KS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhNyk7CisgICAgICAgIGV4cGVjdChhNikudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTgpOworICAgICAgICBleHBlY3QoYTkpLnRvLm5vdC5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKGExMCk7CisgICAgICAgIGV4cGVjdChhMTApLnRvLmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoYTEwKTsKKyAgICAgICAgZXhwZWN0KGExMSkudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhMTEpOworICAgICAgICBleHBlY3QoYTExKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhhMTIpOworICAgIH0pOworfSk7CisKK2Rlc2NyaWJlKCdtYXAnLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc3QgbTEgPSBbbmV3IE1hcChbCisgICAgICAgIFsncmlwcGxlJywgW25ldyBWZXJ0ZXgoNSwgJ3NvZnR3YXJlJywgdW5kZWZpbmVkKV1dLAorICAgICAgICBbJ3BldGVyJywgW25ldyBWZXJ0ZXgoNiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldXSwKKyAgICAgICAgWyd2YWRhcycsIFtuZXcgVmVydGV4KDIsICdwZXJzb24nLCB1bmRlZmluZWQpXV0KKyAgICBdKV07CisgICAgY29uc3QgbTIgPSBbbmV3IE1hcChbCisgICAgICAgIFsncmlwcGxlJywgW25ldyBWZXJ0ZXgoNSwgJ3NvZnR3YXJlJywgdW5kZWZpbmVkKV1dLAorICAgICAgICBbJ3BldGVyJywgW25ldyBWZXJ0ZXgoNiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldXQorICAgIF0pXTsKKyAgICBjb25zdCBtMyA9IFtuZXcgTWFwKFsKKyAgICAgICAgWydyaXBwbGUnLCBbbmV3IFZlcnRleCg1LCAnc29mdHdhcmUnLCB1bmRlZmluZWQpXV0sCisgICAgICAgIFsndmFkYXMnLCBbbmV3IFZlcnRleCgyLCAncGVyc29uJywgdW5kZWZpbmVkKV1dLAorICAgICAgICBbJ3BldGVyJywgW25ldyBWZXJ0ZXgoNiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldXQorICAgIF0pXTsKKyAgICBjb25zdCBtNCA9IFtuZXcgTWFwKFsKKyAgICAgICAgWydyaXBwbGUnLCBbbmV3IFZlcnRleCg1LCAnc29mdHdhcmUnLCB1bmRlZmluZWQpXV0sCisgICAgICAgIFsndmFkYXMnLCBbbmV3IFZlcnRleCg2LCAncGVyc29uJywgdW5kZWZpbmVkKV1dLAorICAgICAgICBbJ3BldGVyJywgW25ldyBWZXJ0ZXgoMiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldXQorICAgIF0pXTsKKworICAgIGl0KCd1bm9yZGVyZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdChtMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMobTEpOworICAgICAgICBleHBlY3QobTEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhtMik7CisgICAgICAgIGV4cGVjdChtMSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMobTMpOworICAgICAgICBleHBlY3QobTEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhtNCk7CisgICAgfSk7CisKKyAgICBpdCgnb3JkZXJlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KG0xKS50by5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKG0xKTsKKyAgICAgICAgZXhwZWN0KG0xKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhtMik7CisgICAgICAgIGV4cGVjdChtMSkudG8uaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhtMyk7IC8vIG1hcCBlbnRyaWVzIGNhbiBiZSB1bm9yZGVyZWQKKyAgICAgICAgZXhwZWN0KG0xKS50by5ub3QuaGF2ZS5kZWVwLm9yZGVyZWQubWVtYmVycyhtNCk7CisgICAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ29iamVjdHMnLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc3Qgb2JqMSA9IFt7CisgICAgICAgIGsxOiAidjEiLAorICAgICAgICBrMjogInYyIiwKKyAgICAgICAgazM6IHsgazQ6ICJ2NCIsIGs1OiAidjUiIH0KKyAgICB9XTsKKyAgICBjb25zdCBvYmoyID0gW3sKKyAgICAgICAgazE6ICJ2MSIsCisgICAgICAgIGsyOiAidjIiLAorICAgICAgICBrMzogeyBrNDogInY0IiwgazU6ICJ2NSIgfQorICAgIH1dOworICAgIGNvbnN0IG9iajMgPSBbeworICAgICAgICBrMjogInYyIiwKKyAgICAgICAgazE6ICJ2MSIsCisgICAgICAgIGszOiB7IGs1OiAidjUiLCBrNDogInY0IiB9CisgICAgfV07CisgICAgY29uc3Qgb2JqNCA9IFt7CisgICAgICAgIGsxOiAidjEiLAorICAgICAgICBrMjogInYyIiwKKyAgICAgICAgazM6IHsgazQ6ICJ2NCIgfQorICAgIH1dOworICAgIGNvbnN0IG9iajUgPSBbeworICAgICAgICBrMTogInYxIiwKKyAgICAgICAgazI6ICJ2MiIsCisgICAgICAgIGszOiB7IGs0OiAidjUiLCBrNTogInY0IiB9CisgICAgfV07CisKKyAgICBpdCgnc2hvdWxkIHBhc3MnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdChvYmoxKS50by5oYXZlLmRlZXAubWVtYmVycyhvYmoyKTsgLy8gaWRlbnRpY2FsCisgICAgICAgIGV4cGVjdChvYmoxKS50by5oYXZlLmRlZXAubWVtYmVycyhvYmozKTsgLy8gb3JkZXIgc3dhcHBlZAorICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBmYWlsJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3Qob2JqMSkudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKG9iajQpOyAvLyBtaXNzaW5nIG5lc3RlZCBrdnAKKyAgICAgICAgZXhwZWN0KG9iajEpLnRvLm5vdC5oYXZlLmRlZXAubWVtYmVycyhvYmo1KTsgLy8gdmFsdWVzIHN3YXBwZWQKKyAgICB9KTsKKworICAgIGNvbnN0IG9iajYgPSBbeworICAgICAgICBrMTogInYxIiwKKyAgICAgICAgazI6ICJ2MiIsCisgICAgICAgIGszOiBbIDEsIDIsIDMgXQorICAgIH1dOworICAgIGNvbnN0IG9iajcgPSBbeworICAgICAgICBrMzogWyAxLCAyLCAzIF0sCisgICAgICAgIGsxOiAidjEiLAorICAgICAgICBrMjogInYyIgorICAgIH1dOworICAgIGNvbnN0IG9iajggPSBbeworICAgICAgICBrMTogInYxIiwKKyAgICAgICAgazI6ICJ2MiIsCisgICAgICAgIGszOiBbIDIsIDEsIDMgXQorICAgIH1dOworCisgICAgaXQoJ3Vub3JkZXJlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KG9iajYpLnRvLmhhdmUuZGVlcC5tZW1iZXJzKG9iajcpOworICAgICAgICBleHBlY3Qob2JqNikudG8ubm90LmhhdmUuZGVlcC5tZW1iZXJzKG9iajgpOworICAgIH0pOworCisgICAgaXQoJ29yZGVyZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdChvYmo2KS50by5oYXZlLmRlZXAub3JkZXJlZC5tZW1iZXJzKG9iajcpOyAvLyBrdnAgY2FuIGJlIHVub3JkZXJlZAorICAgICAgICBleHBlY3Qob2JqNikudG8ubm90LmhhdmUuZGVlcC5vcmRlcmVkLm1lbWJlcnMob2JqOCk7IC8vIGFycmF5IG11c3QgYmUgb3JkZXJlZAorICAgIH0pOworCisgICAgY29uc3QgcGF0aDEgPSBuZXcgUGF0aChbInBhdGgiXSwgW25ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicsIHVuZGVmaW5lZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWZXJ0ZXgoMiwgJ3BlcnNvbicsIHVuZGVmaW5lZCldKTsKKyAgICBjb25zdCBwYXRoMiA9IG5ldyBQYXRoKFsicGF0aCJdLCBbbmV3IFZlcnRleCgxLCAncGVyc29uJywgdW5kZWZpbmVkKV0pOworICAgIGNvbnN0IHBhdGgzID0gbmV3IFBhdGgoWyJwYXRoIl0sIFtuZXcgVmVydGV4KDIsICdwZXJzb24nLCB1bmRlZmluZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmVydGV4KDEsICdwZXJzb24nLCB1bmRlZmluZWQpXSk7CisKKyAgICBpdCgndW5vcmRlcmVkJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHBhdGgxLCBwYXRoMSkpLnRvLmJlLnRydWU7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwocGF0aDEsIHBhdGgyKSkudG8uYmUuZmFsc2U7CisgICAgICAgIGV4cGVjdChkZWVwRXF1YWwocGF0aDEsIHBhdGgzKSkudG8uYmUuZmFsc2U7CisgICAgfSk7CisKKyAgICBpdCgnb3JkZXJlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KGRlZXBFcXVhbChwYXRoMSwgcGF0aDEpKS50by5iZS50cnVlOworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHBhdGgxLCBwYXRoMikpLnRvLmJlLmZhbHNlOworICAgICAgICBleHBlY3QoZGVlcEVxdWFsKHBhdGgxLCBwYXRoMykpLnRvLmJlLmZhbHNlOworICAgIH0pOworCit9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9leHBvcnRzLXRlc3QuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZXhwb3J0cy10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWFkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZXhwb3J0cy10ZXN0LmpzCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAYXV0aG9yIEpvcmdlIEJheSBHb25kcmEKKyAqLworCitpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7CitpbXBvcnQgKiBhcyBnbHZNb2R1bGUgZnJvbSAnLi4vLi4vbGliL2luZGV4LmpzJzsKKworZGVzY3JpYmUoJ0FQSScsIGZ1bmN0aW9uICgpIHsKKyAgaXQoJ3Nob3VsZCBleHBvcnQgZmllbGRzIHVuZGVyIHByb2Nlc3MnLCBmdW5jdGlvbiAoKSB7CisgICAgYXNzZXJ0Lm9rKGdsdk1vZHVsZSk7CisgICAgYXNzZXJ0Lm9rKGdsdk1vZHVsZS5wcm9jZXNzKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLkdyZW1saW5MYW5nLCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLkVudW1WYWx1ZSwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5QLCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLlRyYXZlcnNhbCwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5UcmF2ZXJzYWxTaWRlRWZmZWN0cywgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5UcmF2ZXJzYWxTdHJhdGVnaWVzLCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLlRyYXZlcnNhbFN0cmF0ZWd5LCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLlRyYXZlcnNlciwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5HcmFwaFRyYXZlcnNhbCwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5HcmFwaFRyYXZlcnNhbFNvdXJjZSwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5iYXJyaWVyLCAnb2JqZWN0Jyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5jYXJkaW5hbGl0eSwgJ29iamVjdCcpOworICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3MuY29sdW1uLCAnb2JqZWN0Jyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5kaXJlY3Rpb24sICdvYmplY3QnKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLmRpcmVjdGlvbi5ib3RoLCAnb2JqZWN0Jyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGdsdk1vZHVsZS5wcm9jZXNzLmRpcmVjdGlvbi5ib3RoLmVsZW1lbnROYW1lLCAnQk9USCcpOworICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLnByb2Nlc3Mub3BlcmF0b3IsICdvYmplY3QnKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLm9yZGVyLCAnb2JqZWN0Jyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy5wb3AsICdvYmplY3QnKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLnNjb3BlLCAnb2JqZWN0Jyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUucHJvY2Vzcy50LCAnb2JqZWN0Jyk7CisgICAgYXNzZXJ0Lm9rKGdsdk1vZHVsZS5wcm9jZXNzLnN0YXRpY3MpOworICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLnByb2Nlc3MsICdBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UnKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5wcm9jZXNzLnRyYXZlcnNhbCwgJ2Z1bmN0aW9uJyk7CisgIH0pOworICBpdCgnc2hvdWxkIGV4cG9zZSBmaWVsZHMgdW5kZXIgc3RydWN0dXJlJywgZnVuY3Rpb24gKCkgeworICAgIGFzc2VydC5vayhnbHZNb2R1bGUuc3RydWN0dXJlKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5zdHJ1Y3R1cmUuRWRnZSwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLkdyYXBoLCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5zdHJ1Y3R1cmUuUGF0aCwgJ2Z1bmN0aW9uJyk7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBnbHZNb2R1bGUuc3RydWN0dXJlLlByb3BlcnR5LCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5zdHJ1Y3R1cmUuVmVydGV4LCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHksICdmdW5jdGlvbicpOworICB9KTsKKyAgaXQoJ3Nob3VsZCBleHBvc2UgZmllbGRzIHVuZGVyIGRyaXZlcicsIGZ1bmN0aW9uICgpIHsKKyAgICBhc3NlcnQub2soZ2x2TW9kdWxlLmRyaXZlcik7CisgICAgdmFsaWRhdGVDb25zdHJ1Y3RvcihnbHZNb2R1bGUuZHJpdmVyLCAnUmVtb3RlQ29ubmVjdGlvbicpOworICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLmRyaXZlciwgJ1JlbW90ZVN0cmF0ZWd5Jyk7CisgICAgdmFsaWRhdGVDb25zdHJ1Y3RvcihnbHZNb2R1bGUuZHJpdmVyLCAnUmVtb3RlVHJhdmVyc2FsJyk7CisgICAgdmFsaWRhdGVDb25zdHJ1Y3RvcihnbHZNb2R1bGUuZHJpdmVyLCAnRHJpdmVyUmVtb3RlQ29ubmVjdGlvbicpOworICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLmRyaXZlciwgJ0NsaWVudCcpOworICAgIHZhbGlkYXRlQ29uc3RydWN0b3IoZ2x2TW9kdWxlLmRyaXZlciwgJ1Jlc3VsdFNldCcpOworICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgZ2x2TW9kdWxlLmRyaXZlci5hdXRoLmJhc2ljLCAnZnVuY3Rpb24nKTsKKyAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGdsdk1vZHVsZS5kcml2ZXIuYXV0aC5zaWd2NCwgJ2Z1bmN0aW9uJyk7CisgIH0pOworfSk7CisKK2Z1bmN0aW9uIHZhbGlkYXRlQ29uc3RydWN0b3IocGFyZW50LCBuYW1lKSB7CisgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgcGFyZW50W25hbWVdLCAnZnVuY3Rpb24nKTsKKyAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcmVudFtuYW1lXS5uYW1lLCBuYW1lKTsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVJlYWRlci10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0dyYXBoQmluYXJ5UmVhZGVyLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4NjE4OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVJlYWRlci10ZXN0LmpzCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBHcmFwaEJpbmFyeVJlYWRlciB2NCByZXNwb25zZSBmb3JtYXQgdGVzdHMuCisgKiBUZXN0cyB0aGUgcmVhZGVyJ3MgYWJpbGl0eSB0byBwYXJzZSB2NCByZXNwb25zZSBmb3JtYXQ6CisgKiB7dmVyc2lvbjoweDg0fXtidWxrZWQ6Qnl0ZX17cmVzdWx0X2RhdGEgc3RyZWFtfXttYXJrZXI6MHhGRCAweDAwIDB4MDB9e3N0YXR1c19jb2RlOkludCBiYXJlfXtzdGF0dXNfbWVzc2FnZTpudWxsYWJsZX17ZXhjZXB0aW9uOm51bGxhYmxlfQorICovCisKK2ltcG9ydCB7IGFzc2VydCB9IGZyb20gJ2NoYWknOworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKK2ltcG9ydCBHcmFwaEJpbmFyeVJlYWRlciBmcm9tICcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvR3JhcGhCaW5hcnlSZWFkZXIuanMnOworaW1wb3J0IGlvYyBmcm9tICcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcyc7CisKK2Rlc2NyaWJlKCdHcmFwaEJpbmFyeVJlYWRlcicsICgpID0+IHsKKyAgY29uc3QgcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKGlvYyk7CisKKyAgZGVzY3JpYmUoJ2lucHV0IHZhbGlkYXRpb24nLCAoKSA9PiB7CisgICAgaXQoJ3VuZGVmaW5lZCBidWZmZXIgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWFkZXIucmVhZFJlc3BvbnNlKHVuZGVmaW5lZCksIC9CdWZmZXIgaXMgbWlzc2luZy8pOworICAgIH0pOworCisgICAgaXQoJ251bGwgYnVmZmVyIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcmVhZGVyLnJlYWRSZXNwb25zZShudWxsKSwgL0J1ZmZlciBpcyBtaXNzaW5nLyk7CisgICAgfSk7CisKKyAgICBpdCgnbm9uLUJ1ZmZlciB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlYWRlci5yZWFkUmVzcG9uc2UoJ25vdCBhIGJ1ZmZlcicpLCAvTm90IGFuIGluc3RhbmNlIG9mIEJ1ZmZlci8pOworICAgIH0pOworCisgICAgaXQoJ2VtcHR5IGJ1ZmZlciB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlYWRlci5yZWFkUmVzcG9uc2UoQnVmZmVyLmFsbG9jKDApKSwgL0J1ZmZlciBpcyBlbXB0eS8pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgndmVyc2lvbiB2YWxpZGF0aW9uJywgKCkgPT4geworICAgIGl0KCdyZWplY3RzIHZlcnNpb24gMHgwMCcsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKSwgL1Vuc3VwcG9ydGVkIHZlcnNpb24gJzAnLyk7CisgICAgfSk7CisKKyAgICBpdCgncmVqZWN0cyB2ZXJzaW9uIDB4ODEnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbMHg4MV0pOworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlciksIC9VbnN1cHBvcnRlZCB2ZXJzaW9uICcxMjknLyk7CisgICAgfSk7CisKKyAgICBpdCgncmVqZWN0cyB2ZXJzaW9uIDB4RkYnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbMHhGRl0pOworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlciksIC9VbnN1cHBvcnRlZCB2ZXJzaW9uICcyNTUnLyk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdub24tYnVsa2VkIHJlc3BvbnNlcycsICgpID0+IHsKKyAgICBpdCgnc2luZ2xlIHZhbHVlJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAvLyB2ZXJzaW9uCisgICAgICAgIDB4MDAsIC8vIGJ1bGtlZD1mYWxzZQorICAgICAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAvLyBmcSBJbnQ6IHR5cGVfY29kZT0weDAxLCB2YWx1ZV9mbGFnPTB4MDAsIHZhbHVlPTY3CisgICAgICAgIDB4RkQsIDB4MDAsIDB4MDAsIC8vIG1hcmtlcgorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweEM4LCAvLyBzdGF0dXNfY29kZT0yMDAKKyAgICAgICAgMHgwMSwgLy8gc3RhdHVzX21lc3NhZ2UgbnVsbCBmbGFnCisgICAgICAgIDB4MDEgIC8vIGV4Y2VwdGlvbiBudWxsIGZsYWcKKyAgICAgIF0pOworICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZGVyLnJlYWRSZXNwb25zZShidWZmZXIpOworICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHQsIHsKKyAgICAgICAgc3RhdHVzOiB7IGNvZGU6IDIwMCwgbWVzc2FnZTogbnVsbCwgZXhjZXB0aW9uOiBudWxsIH0sCisgICAgICAgIHJlc3VsdDogeyBkYXRhOiBbNjddLCBidWxrZWQ6IGZhbHNlIH0sCisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdtdWx0aXBsZSB2YWx1ZXMnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIC8vIHZlcnNpb24KKyAgICAgICAgMHgwMCwgLy8gYnVsa2VkPWZhbHNlCisgICAgICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIC8vIGZxIEludDogNjcKKyAgICAgICAgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg2OCwgMHg2NSwgMHg2QywgMHg2QywgMHg2RiwgLy8gZnEgU3RyaW5nOiAiaGVsbG8iCisgICAgICAgIDB4RkQsIDB4MDAsIDB4MDAsIC8vIG1hcmtlcgorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweEM4LCAvLyBzdGF0dXNfY29kZT0yMDAKKyAgICAgICAgMHgwMSwgLy8gc3RhdHVzX21lc3NhZ2UgbnVsbAorICAgICAgICAweDAxICAvLyBleGNlcHRpb24gbnVsbAorICAgICAgXSk7CisgICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlcik7CisgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdCwgeworICAgICAgICBzdGF0dXM6IHsgY29kZTogMjAwLCBtZXNzYWdlOiBudWxsLCBleGNlcHRpb246IG51bGwgfSwKKyAgICAgICAgcmVzdWx0OiB7IGRhdGE6IFs2NywgJ2hlbGxvJ10sIGJ1bGtlZDogZmFsc2UgfQorICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnZW1wdHkgcmVzdWx0JywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAvLyB2ZXJzaW9uCisgICAgICAgIDB4MDAsIC8vIGJ1bGtlZD1mYWxzZQorICAgICAgICAweEZELCAweDAwLCAweDAwLCAvLyBtYXJrZXIgKG5vIGRhdGEpCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4Q0MsIC8vIHN0YXR1c19jb2RlPTIwNAorICAgICAgICAweDAxLCAvLyBzdGF0dXNfbWVzc2FnZSBudWxsCisgICAgICAgIDB4MDEgIC8vIGV4Y2VwdGlvbiBudWxsCisgICAgICBdKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0LCB7CisgICAgICAgIHN0YXR1czogeyBjb2RlOiAyMDQsIG1lc3NhZ2U6IG51bGwsIGV4Y2VwdGlvbjogbnVsbCB9LAorICAgICAgICByZXN1bHQ6IHsgZGF0YTogW10sIGJ1bGtlZDogZmFsc2UgfQorICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdidWxrZWQgcmVzcG9uc2VzJywgKCkgPT4geworICAgIGl0KCdzaW5nbGUgaXRlbSB3aXRoIGJ1bGsgY291bnQnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIC8vIHZlcnNpb24KKyAgICAgICAgMHgwMSwgLy8gYnVsa2VkPXRydWUKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgLy8gZnEgSW50OiA2NworICAgICAgICAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAvLyBmcSBMb25nIGJ1bGs9MworICAgICAgICAweEZELCAweDAwLCAweDAwLCAvLyBtYXJrZXIKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhDOCwgLy8gc3RhdHVzX2NvZGU9MjAwCisgICAgICAgIDB4MDEsIC8vIHN0YXR1c19tZXNzYWdlIG51bGwKKyAgICAgICAgMHgwMSAgLy8gZXhjZXB0aW9uIG51bGwKKyAgICAgIF0pOworICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZGVyLnJlYWRSZXNwb25zZShidWZmZXIpOworICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHQsIHsKKyAgICAgICAgc3RhdHVzOiB7IGNvZGU6IDIwMCwgbWVzc2FnZTogbnVsbCwgZXhjZXB0aW9uOiBudWxsIH0sCisgICAgICAgIHJlc3VsdDogeyBkYXRhOiBbeyB2OiA2NywgYnVsazogMyB9XSwgYnVsa2VkOiB0cnVlIH0KKyAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoJ211bHRpcGxlIGl0ZW1zIHdpdGggYnVsayBjb3VudHMnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIC8vIHZlcnNpb24KKyAgICAgICAgMHgwMSwgLy8gYnVsa2VkPXRydWUKKyAgICAgICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgLy8gZnEgSW50OiA2NworICAgICAgICAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAvLyBmcSBMb25nIGJ1bGs9MgorICAgICAgICAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDY4LCAweDY1LCAweDZDLCAweDZDLCAweDZGLCAvLyBmcSBTdHJpbmc6ICJoZWxsbyIKKyAgICAgICAgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgLy8gZnEgTG9uZyBidWxrPTEKKyAgICAgICAgMHhGRCwgMHgwMCwgMHgwMCwgLy8gbWFya2VyCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzgsIC8vIHN0YXR1c19jb2RlPTIwMAorICAgICAgICAweDAxLCAvLyBzdGF0dXNfbWVzc2FnZSBudWxsCisgICAgICAgIDB4MDEgIC8vIGV4Y2VwdGlvbiBudWxsCisgICAgICBdKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0LCB7CisgICAgICAgIHN0YXR1czogeyBjb2RlOiAyMDAsIG1lc3NhZ2U6IG51bGwsIGV4Y2VwdGlvbjogbnVsbCB9LAorICAgICAgICByZXN1bHQ6IHsgZGF0YTogW3sgdjogNjcsIGJ1bGs6IDIgfSwgeyB2OiAnaGVsbG8nLCBidWxrOiAxIH1dLCBidWxrZWQ6IHRydWUgfQorICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdzdGF0dXMgY29kZXMnLCAoKSA9PiB7CisgICAgaXQoJ3N0YXR1cyA0MDMnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIDB4MDAsIC8vIHZlcnNpb24sIGJ1bGtlZD1mYWxzZQorICAgICAgICAweEZELCAweDAwLCAweDAwLCAvLyBtYXJrZXIKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHg5MywgLy8gc3RhdHVzX2NvZGU9NDAzCisgICAgICAgIDB4MDEsIDB4MDEgLy8gbnVsbCBtZXNzYWdlLCBudWxsIGV4Y2VwdGlvbgorICAgICAgXSk7CisgICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlcik7CisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnN0YXR1cy5jb2RlLCA0MDMpOworICAgIH0pOworCisgICAgaXQoJ3N0YXR1cyA1MDAnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIDB4MDAsIC8vIHZlcnNpb24sIGJ1bGtlZD1mYWxzZQorICAgICAgICAweEZELCAweDAwLCAweDAwLCAvLyBtYXJrZXIKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMSwgMHhGNCwgLy8gc3RhdHVzX2NvZGU9NTAwCisgICAgICAgIDB4MDEsIDB4MDEgLy8gbnVsbCBtZXNzYWdlLCBudWxsIGV4Y2VwdGlvbgorICAgICAgXSk7CisgICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlcik7CisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnN0YXR1cy5jb2RlLCA1MDApOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnbnVsbGFibGUgc3RhdHVzX21lc3NhZ2UnLCAoKSA9PiB7CisgICAgaXQoJ3ByZXNlbnQgbWVzc2FnZScsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsKKyAgICAgICAgMHg4NCwgMHgwMCwgLy8gdmVyc2lvbiwgYnVsa2VkPWZhbHNlCisgICAgICAgIDB4RkQsIDB4MDAsIDB4MDAsIC8vIG1hcmtlcgorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweEM4LCAvLyBzdGF0dXNfY29kZT0yMDAKKyAgICAgICAgMHgwMCwgLy8gbWVzc2FnZSBwcmVzZW50IGZsYWcKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg1MywgMHg3NSwgMHg2MywgMHg2MywgMHg2NSwgMHg3MywgMHg3MywgLy8gYmFyZSBTdHJpbmc6ICJTdWNjZXNzIgorICAgICAgICAweDAxIC8vIGV4Y2VwdGlvbiBudWxsCisgICAgICBdKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuc3RhdHVzLm1lc3NhZ2UsICdTdWNjZXNzJyk7CisgICAgfSk7CisKKyAgICBpdCgnbnVsbCBtZXNzYWdlJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAweDAwLCAvLyB2ZXJzaW9uLCBidWxrZWQ9ZmFsc2UKKyAgICAgICAgMHhGRCwgMHgwMCwgMHgwMCwgLy8gbWFya2VyCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzgsIC8vIHN0YXR1c19jb2RlPTIwMAorICAgICAgICAweDAxLCAvLyBtZXNzYWdlIG51bGwgZmxhZworICAgICAgICAweDAxIC8vIGV4Y2VwdGlvbiBudWxsCisgICAgICBdKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuc3RhdHVzLm1lc3NhZ2UsIG51bGwpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnbnVsbGFibGUgZXhjZXB0aW9uJywgKCkgPT4geworICAgIGl0KCdwcmVzZW50IGV4Y2VwdGlvbicsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsKKyAgICAgICAgMHg4NCwgMHgwMCwgLy8gdmVyc2lvbiwgYnVsa2VkPWZhbHNlCisgICAgICAgIDB4RkQsIDB4MDAsIDB4MDAsIC8vIG1hcmtlcgorICAgICAgICAweDAwLCAweDAwLCAweDAxLCAweEY0LCAvLyBzdGF0dXNfY29kZT01MDAKKyAgICAgICAgMHgwMSwgLy8gbWVzc2FnZSBudWxsCisgICAgICAgIDB4MDAsIC8vIGV4Y2VwdGlvbiBwcmVzZW50IGZsYWcKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0NSwgMHg3MiwgMHg3MiwgMHg2RiwgMHg3MiAvLyBiYXJlIFN0cmluZzogIkVycm9yIgorICAgICAgXSk7CisgICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlcik7CisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnN0YXR1cy5leGNlcHRpb24sICdFcnJvcicpOworICAgIH0pOworCisgICAgaXQoJ251bGwgZXhjZXB0aW9uJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAweDAwLCAvLyB2ZXJzaW9uLCBidWxrZWQ9ZmFsc2UKKyAgICAgICAgMHhGRCwgMHgwMCwgMHgwMCwgLy8gbWFya2VyCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4QzgsIC8vIHN0YXR1c19jb2RlPTIwMAorICAgICAgICAweDAxLCAvLyBtZXNzYWdlIG51bGwKKyAgICAgICAgMHgwMSAvLyBleGNlcHRpb24gbnVsbCBmbGFnCisgICAgICBdKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRlci5yZWFkUmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuc3RhdHVzLmV4Y2VwdGlvbiwgbnVsbCk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdlcnJvciByZXNwb25zZScsICgpID0+IHsKKyAgICBpdCgnbm8gcmVzdWx0IGRhdGEgd2l0aCBlcnJvciBzdGF0dXMnLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIDB4MDAsIC8vIHZlcnNpb24sIGJ1bGtlZD1mYWxzZQorICAgICAgICAweEZELCAweDAwLCAweDAwLCAvLyBtYXJrZXIgKG5vIGRhdGEpCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDEsIDB4RjQsIC8vIHN0YXR1c19jb2RlPTUwMAorICAgICAgICAweDAwLCAvLyBtZXNzYWdlIHByZXNlbnQKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwRSwgMHg0OSwgMHg2RSwgMHg3NCwgMHg2NSwgMHg3MiwgMHg2RSwgMHg2MSwgMHg2QywgMHgyMCwgMHg2NSwgMHg3MiwgMHg3MiwgMHg2RiwgMHg3MiwgLy8gIkludGVybmFsIGVycm9yIiAoMTQgY2hhcnMpCisgICAgICAgIDB4MDAsIC8vIGV4Y2VwdGlvbiBwcmVzZW50CisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDUsIDB4NzgsIDB4NjMsIDB4NjUsIDB4NzAsIDB4NzQsIDB4NjksIDB4NkYsIDB4NkUgLy8gIkV4Y2VwdGlvbiIKKyAgICAgIF0pOworICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZGVyLnJlYWRSZXNwb25zZShidWZmZXIpOworICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHQsIHsKKyAgICAgICAgc3RhdHVzOiB7IGNvZGU6IDUwMCwgbWVzc2FnZTogJ0ludGVybmFsIGVycm9yJywgZXhjZXB0aW9uOiAnRXhjZXB0aW9uJyB9LAorICAgICAgICByZXN1bHQ6IHsgZGF0YTogW10sIGJ1bGtlZDogZmFsc2UgfQorICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdjb21wbGV4IHJlc3VsdCB2YWx1ZXMnLCAoKSA9PiB7CisgICAgaXQoJ3ZlcnRleCBpbiByZXN1bHQgZGF0YScsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsKKyAgICAgICAgMHg4NCwgMHgwMCwgLy8gdmVyc2lvbiwgYnVsa2VkPWZhbHNlCisgICAgICAgIDB4MTEsIDB4MDAsIC8vIGZxIFZlcnRleDogdHlwZV9jb2RlPTB4MTEsIHZhbHVlX2ZsYWc9MHgwMAorICAgICAgICAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAvLyBpZDogZnEgSW50PTEKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgLy8gbGFiZWw6IGJhcmUgTGlzdCBsZW5ndGg9MQorICAgICAgICAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDcwLCAweDY1LCAweDcyLCAweDczLCAweDZGLCAweDZFLCAvLyBmcSBTdHJpbmc9InBlcnNvbiIKKyAgICAgICAgMHgwQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gcHJvcGVydGllczogZnEgTGlzdD1lbXB0eQorICAgICAgICAweEZELCAweDAwLCAweDAwLCAvLyBtYXJrZXIKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHhDOCwgLy8gc3RhdHVzX2NvZGU9MjAwCisgICAgICAgIDB4MDEsIDB4MDEgLy8gbnVsbCBtZXNzYWdlLCBudWxsIGV4Y2VwdGlvbgorICAgICAgXSk7CisgICAgICBjb25zdCByZXN1bHQgPSByZWFkZXIucmVhZFJlc3BvbnNlKGJ1ZmZlcik7CisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnJlc3VsdC5kYXRhLmxlbmd0aCwgMSk7CisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnJlc3VsdC5kYXRhWzBdLmlkLCAxKTsKKyAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQucmVzdWx0LmRhdGFbMF0ubGFiZWwsICdwZXJzb24nKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L0dyYXBoQmluYXJ5V3JpdGVyLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyYTA3YgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVdyaXRlci10ZXN0LmpzCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBHcmFwaEJpbmFyeVdyaXRlciB2NCByZXF1ZXN0IGZvcm1hdCB0ZXN0cy4KKyAqIFRlc3RzIHRoZSB3cml0ZXIncyBhYmlsaXR5IHRvIGdlbmVyYXRlIHY0IHJlcXVlc3QgZm9ybWF0OgorICoge3ZlcnNpb246MHg4NH17ZmllbGRzOk1hcCBiYXJlfXtncmVtbGluOlN0cmluZyBiYXJlfQorICovCisKK2ltcG9ydCB7IGFzc2VydCB9IGZyb20gJ2NoYWknOworaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJzsKK2ltcG9ydCBHcmFwaEJpbmFyeVdyaXRlciBmcm9tICcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9pbnRlcm5hbHMvR3JhcGhCaW5hcnlXcml0ZXIuanMnOworaW1wb3J0IGlvYyBmcm9tICcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcyc7CisKK2Rlc2NyaWJlKCdHcmFwaEJpbmFyeVdyaXRlcicsICgpID0+IHsKKyAgY29uc3Qgd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKGlvYyk7CisKKyAgZGVzY3JpYmUoJ3ZlcnNpb24gYnl0ZScsICgpID0+IHsKKyAgICBpdCgnZmlyc3QgYnl0ZSBpcyAweDg0JywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gd3JpdGVyLndyaXRlUmVxdWVzdCh7IGdyZW1saW46ICdnLlYoKScsIGZpZWxkczogbmV3IE1hcCgpIH0pOworICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFswXSwgMHg4NCk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdlbXB0eSBmaWVsZHMgKyBncmVtbGluJywgKCkgPT4geworICAgIGl0KCdlbXB0eSBtYXAgKyBiYXJlIHN0cmluZycsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IHdyaXRlci53cml0ZVJlcXVlc3QoeyBncmVtbGluOiAnZy5WKCknLCBmaWVsZHM6IG5ldyBNYXAoKSB9KTsKKyAgICAgIGNvbnN0IGV4cGVjdGVkID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAvLyB2ZXJzaW9uCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGVtcHR5IG1hcCBiYXJlIChsZW5ndGg9MCkKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgLy8gc3RyaW5nIGxlbmd0aD01CisgICAgICAgIDB4NjcsIDB4MkUsIDB4NTYsIDB4MjgsIDB4MjkgLy8gImcuVigpIgorICAgICAgXSk7CisgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnZmllbGRzIHdpdGggZW50cmllcycsICgpID0+IHsKKyAgICBpdCgnbWFwIHdpdGggZXZhbHVhdGlvblRpbWVvdXQgZW50cnknLCAoKSA9PiB7CisgICAgICBjb25zdCBmaWVsZHMgPSBuZXcgTWFwKCk7CisgICAgICBmaWVsZHMuc2V0KCdldmFsdWF0aW9uVGltZW91dCcsIDEwMDApOworICAgICAgY29uc3QgcmVzdWx0ID0gd3JpdGVyLndyaXRlUmVxdWVzdCh7IGdyZW1saW46ICdnLlYoKScsIGZpZWxkcyB9KTsKKyAgICAgIGNvbnN0IGV4cGVjdGVkID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAvLyB2ZXJzaW9uCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIC8vIG1hcCBsZW5ndGg9MQorICAgICAgICAweDAzLCAweDAwLCAvLyBrZXkgdHlwZV9jb2RlPVNUUklORywgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIC8vIGtleSBzdHJpbmcgbGVuZ3RoPTE3CisgICAgICAgIDB4NjUsIDB4NzYsIDB4NjEsIDB4NkMsIDB4NzUsIDB4NjEsIDB4NzQsIDB4NjksIDB4NkYsIDB4NkUsIDB4NTQsIDB4NjksIDB4NkQsIDB4NjUsIDB4NkYsIDB4NzUsIDB4NzQsIC8vICJldmFsdWF0aW9uVGltZW91dCIKKyAgICAgICAgMHgwMSwgMHgwMCwgLy8gdmFsdWUgdHlwZV9jb2RlPUlOVCwgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDMsIDB4RTgsIC8vIHZhbHVlIGludD0xMDAwCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIC8vIGdyZW1saW4gc3RyaW5nIGxlbmd0aD01CisgICAgICAgIDB4NjcsIDB4MkUsIDB4NTYsIDB4MjgsIDB4MjkgLy8gImcuVigpIgorICAgICAgXSk7CisgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnZGVmYXVsdCBmaWVsZHMnLCAoKSA9PiB7CisgICAgaXQoJ3VuZGVmaW5lZCBmaWVsZHMgZGVmYXVsdHMgdG8gZW1wdHkgbWFwJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gd3JpdGVyLndyaXRlUmVxdWVzdCh7IGdyZW1saW46ICdnLlYoKScsIGZpZWxkczogdW5kZWZpbmVkIH0pOworICAgICAgY29uc3QgZXhwZWN0ZWQgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIC8vIHZlcnNpb24KKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gZW1wdHkgbWFwIGJhcmUgKGxlbmd0aD0wKQorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDA1LCAvLyBzdHJpbmcgbGVuZ3RoPTUKKyAgICAgICAgMHg2NywgMHgyRSwgMHg1NiwgMHgyOCwgMHgyOSAvLyAiZy5WKCkiCisgICAgICBdKTsKKyAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdWx0LCBleHBlY3RlZCk7CisgICAgfSk7CisKKyAgICBpdCgnbnVsbCBmaWVsZHMgZGVmYXVsdHMgdG8gZW1wdHkgbWFwJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gd3JpdGVyLndyaXRlUmVxdWVzdCh7IGdyZW1saW46ICdnLlYoKScsIGZpZWxkczogbnVsbCB9KTsKKyAgICAgIGNvbnN0IGV4cGVjdGVkID0gQnVmZmVyLmZyb20oWworICAgICAgICAweDg0LCAvLyB2ZXJzaW9uCisgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIC8vIGVtcHR5IG1hcCBiYXJlIChsZW5ndGg9MCkKKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgLy8gc3RyaW5nIGxlbmd0aD01CisgICAgICAgIDB4NjcsIDB4MkUsIDB4NTYsIDB4MjgsIDB4MjkgLy8gImcuVigpIgorICAgICAgXSk7CisgICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnZ3JlbWxpbiBhcyBiYXJlIHN0cmluZycsICgpID0+IHsKKyAgICBpdCgnbm8gdHlwZV9jb2RlL3ZhbHVlX2ZsYWcgcHJlZml4IG9uIGdyZW1saW4nLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSB3cml0ZXIud3JpdGVSZXF1ZXN0KHsgZ3JlbWxpbjogJ2cuVigpLmNvdW50KCknLCBmaWVsZHM6IG5ldyBNYXAoKSB9KTsKKyAgICAgIC8vIFZlcmlmeSBncmVtbGluIHBvcnRpb24gc3RhcnRzIHdpdGggbGVuZ3RoLCBub3QgdHlwZV9jb2RlCisgICAgICBjb25zdCBncmVtbGluU3RhcnQgPSA1OyAvLyBhZnRlciB2ZXJzaW9uICsgZW1wdHkgbWFwCisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0W2dyZW1saW5TdGFydF0sIDB4MDApOyAvLyBsZW5ndGggYnl0ZSAxCisgICAgICBhc3NlcnQuZXF1YWwocmVzdWx0W2dyZW1saW5TdGFydCArIDFdLCAweDAwKTsgLy8gbGVuZ3RoIGJ5dGUgMgorICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdFtncmVtbGluU3RhcnQgKyAyXSwgMHgwMCk7IC8vIGxlbmd0aCBieXRlIDMKKyAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbZ3JlbWxpblN0YXJ0ICsgM10sIDB4MEQpOyAvLyBsZW5ndGg9MTMKKyAgICAgIGFzc2VydC5lcXVhbChyZXN1bHRbZ3JlbWxpblN0YXJ0ICsgNF0sIDB4NjcpOyAvLyAnZycKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ2VtcHR5IGdyZW1saW4nLCAoKSA9PiB7CisgICAgaXQoJ2VtcHR5IHN0cmluZyBoYXMgbGVuZ3RoIDAnLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSB3cml0ZXIud3JpdGVSZXF1ZXN0KHsgZ3JlbWxpbjogJycsIGZpZWxkczogbmV3IE1hcCgpIH0pOworICAgICAgY29uc3QgZXhwZWN0ZWQgPSBCdWZmZXIuZnJvbShbCisgICAgICAgIDB4ODQsIC8vIHZlcnNpb24KKyAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gZW1wdHkgbWFwIGJhcmUgKGxlbmd0aD0wKQorICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIC8vIGVtcHR5IHN0cmluZyBiYXJlIChsZW5ndGg9MCkKKyAgICAgIF0pOworICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9lcnJvci1jYXNlcy10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L2Vycm9yLWNhc2VzLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0NjE2YgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9lcnJvci1jYXNlcy10ZXN0LmpzCkBAIC0wLDAgKzEsNDQzIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBFcnJvciBoYW5kbGluZyB0ZXN0cyBmb3IgR3JhcGhCaW5hcnlWNCBzZXJpYWxpemVycy4gVmFsaWRhdGVzIGJlaGF2aW9yIGZvcgorICogbWFsZm9ybWVkIGlucHV0OiBpbnZhbGlkIGJ1ZmZlcnMsIHVua25vd24gdHlwZSBjb2RlcywgYmFkIHZhbHVlIGZsYWdzLAorICogdHJ1bmNhdGVkIGRhdGEsIG5lZ2F0aXZlIGxlbmd0aHMsIGFuZCB1bnN1cHBvcnRlZCB0eXBlcy4KKyAqLworCitpbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdjaGFpJzsKK2ltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7CitpbXBvcnQgaW9jIGZyb20gJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5LmpzJzsKK2ltcG9ydCB7IFAsIFRleHRQLCBUcmF2ZXJzZXIgfSBmcm9tICcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgT3B0aW9uc1N0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5LmpzJzsKKworY29uc3QgeyBhbnlTZXJpYWxpemVyLCBpbnRTZXJpYWxpemVyLCBsb25nU2VyaWFsaXplciwgc3RyaW5nU2VyaWFsaXplciwgbGlzdFNlcmlhbGl6ZXIsIG1hcFNlcmlhbGl6ZXIsIHV1aWRTZXJpYWxpemVyLCBkYXRlVGltZVNlcmlhbGl6ZXIsIGZsb2F0U2VyaWFsaXplciwgc2hvcnRTZXJpYWxpemVyLCBieXRlU2VyaWFsaXplciwgYmlnSW50ZWdlclNlcmlhbGl6ZXIsIGJpbmFyeVNlcmlhbGl6ZXIsIHNldFNlcmlhbGl6ZXIsIGVudW1TZXJpYWxpemVyIH0gPSBpb2M7CisKK2Rlc2NyaWJlKCdHcmFwaEJpbmFyeSB2NCBFcnJvciBDYXNlcycsICgpID0+IHsKKyAgZGVzY3JpYmUoJ0J1ZmZlciB2YWxpZGF0aW9uJywgKCkgPT4geworICAgIGl0KCd1bmRlZmluZWQgYnVmZmVyIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZSh1bmRlZmluZWQpLCAvYnVmZmVyIGlzIG1pc3NpbmcvKTsKKyAgICB9KTsKKworICAgIGl0KCdudWxsIGJ1ZmZlciB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobnVsbCksIC9idWZmZXIgaXMgbWlzc2luZy8pOworICAgIH0pOworCisgICAgaXQoJ25vbi1CdWZmZXIgb2JqZWN0IHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZSgnbm90IGEgYnVmZmVyJyksIC9idWZmZXIgaXMgbWlzc2luZy8pOworICAgIH0pOworCisgICAgaXQoJ2VtcHR5IGJ1ZmZlciB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmFsbG9jKDApKSwgL2J1ZmZlciBpcyBlbXB0eS8pOworICAgIH0pOworCisgICAgaXQoJ2J1ZmZlciB3aXRoIG9ubHkgdHlwZV9jb2RlLCBubyB2YWx1ZV9mbGFnIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwMV0pKSwgL3ZhbHVlX2ZsYWcuKm1pc3NpbmcvKTsKKyAgICB9KTsKKworICAgIGl0KCdpbmRpdmlkdWFsIHNlcmlhbGl6ZXIgd2l0aCB1bmRlZmluZWQgYnVmZmVyIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW50U2VyaWFsaXplci5kZXNlcmlhbGl6ZSh1bmRlZmluZWQpLCAvYnVmZmVyIGlzIG1pc3NpbmcvKTsKKyAgICB9KTsKKworICAgIGl0KCdpbmRpdmlkdWFsIHNlcmlhbGl6ZXIgd2l0aCBudWxsIGJ1ZmZlciB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUobnVsbCksIC9idWZmZXIgaXMgbWlzc2luZy8pOworICAgIH0pOworCisgICAgaXQoJ2luZGl2aWR1YWwgc2VyaWFsaXplciB3aXRoIGVtcHR5IGJ1ZmZlciB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGludFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmFsbG9jKDApKSwgL2J1ZmZlciBpcyBlbXB0eS8pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnVHlwZSBjb2RlIGVycm9ycycsICgpID0+IHsKKyAgICBpdCgndW5rbm93biB0eXBlIGNvZGUgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDk5LCAweDAwXSkpLCAvdW5rbm93bi4qdHlwZV9jb2RlLyk7CisgICAgfSk7CisKKyAgICBpdCgnd3JvbmcgdHlwZSBjb2RlIGZvciBJTlQgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSkpLCAvdW5leHBlY3RlZC4qdHlwZV9jb2RlLyk7CisgICAgfSk7CisKKyAgICBpdCgnd3JvbmcgdHlwZSBjb2RlIGZvciBMT05HIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbG9uZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSksIC91bmV4cGVjdGVkLip0eXBlX2NvZGUvKTsKKyAgICB9KTsKKworICAgIGl0KCd3cm9uZyB0eXBlIGNvZGUgZm9yIFNUUklORyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHN0cmluZ1NlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSksIC91bmV4cGVjdGVkLip0eXBlX2NvZGUvKTsKKyAgICB9KTsKKworICAgIGl0KCd3cm9uZyB0eXBlIGNvZGUgZm9yIERPVUJMRSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlvYy5kb3VibGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAxLCAweDAwXSkpLCAvdW5leHBlY3RlZC4qdHlwZV9jb2RlLyk7CisgICAgfSk7CisKKyAgICBpdCgnd3JvbmcgdHlwZSBjb2RlIGZvciBCT09MRUFOIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW9jLmJvb2xlYW5TZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAxLCAweDAwXSkpLCAvdW5leHBlY3RlZC4qdHlwZV9jb2RlLyk7CisgICAgfSk7CisKKyAgICBpdCgnd3JvbmcgdHlwZSBjb2RlIGZvciBVVUlEIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdXVpZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDEsIDB4MDBdKSksIC91bmV4cGVjdGVkLip0eXBlX2NvZGUvKTsKKyAgICB9KTsKKworICAgIGl0KCd3cm9uZyB0eXBlIGNvZGUgZm9yIExJU1QgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBsaXN0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwMSwgMHgwMF0pKSwgL3VuZXhwZWN0ZWQuKnR5cGVfY29kZS8pOworICAgIH0pOworCisgICAgaXQoJ3dyb25nIHR5cGUgY29kZSBmb3IgTUFQIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbWFwU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwMSwgMHgwMF0pKSwgL3VuZXhwZWN0ZWQuKnR5cGVfY29kZS8pOworICAgIH0pOworCisgICAgaXQoJ3dyb25nIHR5cGUgY29kZSBmb3IgRkxPQVQgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmbG9hdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDksIDB4MDBdKSksIC91bmV4cGVjdGVkLip0eXBlX2NvZGUvKTsKKyAgICB9KTsKKworICAgIGl0KCd3cm9uZyB0eXBlIGNvZGUgZm9yIFNIT1JUIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2hvcnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDI3LCAweDAwXSkpLCAvdW5leHBlY3RlZC4qdHlwZV9jb2RlLyk7CisgICAgfSk7CisKKyAgICBpdCgnd3JvbmcgdHlwZSBjb2RlIGZvciBCWVRFIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYnl0ZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MjUsIDB4MDBdKSksIC91bmV4cGVjdGVkLip0eXBlX2NvZGUvKTsKKyAgICB9KTsKKworICAgIGl0KCd3cm9uZyB0eXBlIGNvZGUgZm9yIEJJR0lOVEVHRVIgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaWdJbnRlZ2VyU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgyNCwgMHgwMF0pKSwgL3VuZXhwZWN0ZWQuKnR5cGVfY29kZS8pOworICAgIH0pOworCisgICAgaXQoJ3dyb25nIHR5cGUgY29kZSBmb3IgQklOQVJZIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmluYXJ5U2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgyNiwgMHgwMF0pKSwgL3VuZXhwZWN0ZWQuKnR5cGVfY29kZS8pOworICAgIH0pOworCisgICAgaXQoJ3dyb25nIHR5cGUgY29kZSBmb3IgU0VUIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc2V0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwQywgMHgwMF0pKSwgL3VuZXhwZWN0ZWQuKnR5cGVfY29kZS8pOworICAgIH0pOworCisgICAgaXQoJ3dyb25nIHR5cGUgY29kZSBmb3IgREFURVRJTUUgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBkYXRlVGltZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDUsIDB4MDBdKSksIC91bmV4cGVjdGVkLip0eXBlX2NvZGUvKTsKKyAgICB9KTsKKworICAgIGl0KCd3cm9uZyB0eXBlIGNvZGUgZm9yIEVOVU0gdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBlbnVtU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgxOSwgMHgwMF0pKSwgL3VuZXhwZWN0ZWQuKnR5cGVfY29kZS8pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnVmFsdWUgZmxhZyBlcnJvcnMnLCAoKSA9PiB7CisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDAzIGZvciBJTlQgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAxLCAweDAzXSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDBGIGZvciBTVFJJTkcgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAzLCAweDBGXSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweEZGIGZvciBMSVNUIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbGlzdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDksIDB4RkZdKSksIC91bmV4cGVjdGVkLip2YWx1ZV9mbGFnLyk7CisgICAgfSk7CisKKyAgICBpdCgnaW52YWxpZCB2YWx1ZV9mbGFnIDB4MDUgZm9yIE1BUCB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG1hcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MEEsIDB4MDVdKSksIC91bmV4cGVjdGVkLip2YWx1ZV9mbGFnLyk7CisgICAgfSk7CisKKyAgICBpdCgnaW52YWxpZCB2YWx1ZV9mbGFnIDB4MTAgZm9yIERPVUJMRSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlvYy5kb3VibGVTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDA3LCAweDEwXSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDA0IGZvciBGTE9BVCB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZsb2F0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwOCwgMHgwNF0pKSwgL3VuZXhwZWN0ZWQuKnZhbHVlX2ZsYWcvKTsKKyAgICB9KTsKKworICAgIGl0KCdpbnZhbGlkIHZhbHVlX2ZsYWcgMHgwNiBmb3IgU0hPUlQgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzaG9ydFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MjYsIDB4MDZdKSksIC91bmV4cGVjdGVkLip2YWx1ZV9mbGFnLyk7CisgICAgfSk7CisKKyAgICBpdCgnaW52YWxpZCB2YWx1ZV9mbGFnIDB4MDcgZm9yIEJZVEUgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBieXRlU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgyNCwgMHgwN10pKSwgL3VuZXhwZWN0ZWQuKnZhbHVlX2ZsYWcvKTsKKyAgICB9KTsKKworICAgIGl0KCdpbnZhbGlkIHZhbHVlX2ZsYWcgMHgwOCBmb3IgQklHSU5URUdFUiB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJpZ0ludGVnZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDIzLCAweDA4XSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDA5IGZvciBCSU5BUlkgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBiaW5hcnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDI1LCAweDA5XSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDBBIGZvciBTRVQgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzZXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDBCLCAweDBBXSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDBCIGZvciBEQVRFVElNRSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGRhdGVUaW1lU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwNCwgMHgwQl0pKSwgL3VuZXhwZWN0ZWQuKnZhbHVlX2ZsYWcvKTsKKyAgICB9KTsKKworICAgIGl0KCdpbnZhbGlkIHZhbHVlX2ZsYWcgMHgwQyBmb3IgVVVJRCB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV1aWRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDBDLCAweDBDXSkpLCAvdW5leHBlY3RlZC4qdmFsdWVfZmxhZy8pOworICAgIH0pOworCisgICAgaXQoJ2ludmFsaWQgdmFsdWVfZmxhZyAweDBEIGZvciBFTlVNIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZW51bVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MTgsIDB4MERdKSksIC91bmV4cGVjdGVkLip2YWx1ZV9mbGFnLyk7CisgICAgfSk7CisKKyAgICBpdCgnbWlzc2luZyB2YWx1ZV9mbGFnIGZvciBJTlQgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAxXSkpLCAvdmFsdWVfZmxhZy4qbWlzc2luZy8pOworICAgIH0pOworCisgICAgaXQoJ21pc3NpbmcgdmFsdWVfZmxhZyBmb3IgU1RSSU5HIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwM10pKSwgL3ZhbHVlX2ZsYWcuKm1pc3NpbmcvKTsKKyAgICB9KTsKKworICAgIGl0KCdtaXNzaW5nIHZhbHVlX2ZsYWcgZm9yIExJU1QgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBsaXN0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbMHgwOV0pKSwgL3ZhbHVlX2ZsYWcuKm1pc3NpbmcvKTsKKyAgICB9KTsKKworICAgIGl0KCdtaXNzaW5nIHZhbHVlX2ZsYWcgZm9yIE1BUCB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG1hcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MEFdKSksIC92YWx1ZV9mbGFnLiptaXNzaW5nLyk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdUcnVuY2F0ZWQgZGF0YScsICgpID0+IHsKKyAgICBpdCgnSU5UIHdpdGggb25seSAyIG9mIDQgdmFsdWUgYnl0ZXMgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpbnRTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAxLCAweDAwLCAweDAwLCAweDAxXSkpLCAvdW5leHBlY3RlZC4qdmFsdWUuKmxlbmd0aC8pOworICAgIH0pOworCisgICAgaXQoJ0xPTkcgd2l0aCBvbmx5IDQgb2YgOCB2YWx1ZSBieXRlcyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGxvbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSkpLCAvdW5leHBlY3RlZC4qdmFsdWUuKmxlbmd0aC8pOworICAgIH0pOworCisgICAgaXQoJ0RPVUJMRSB3aXRoIG9ubHkgNCBvZiA4IHZhbHVlIGJ5dGVzIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW9jLmRvdWJsZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKSksIC91bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnRkxPQVQgd2l0aCBvbmx5IDIgb2YgNCB2YWx1ZSBieXRlcyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlvYy5mbG9hdFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MDgsIDB4MDAsIDB4MDAsIDB4MDFdKSksIC91bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnU0hPUlQgd2l0aCBvbmx5IDEgb2YgMiB2YWx1ZSBieXRlcyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGlvYy5zaG9ydFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MjYsIDB4MDAsIDB4MDFdKSksIC91bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnU1RSSU5HIHdpdGggbGVuZ3RoIDEwIGJ1dCBvbmx5IDMgYnl0ZXMgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAzLCAweDAwXSksIC8vIFNUUklORywgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDBBXSksIC8vIGxlbmd0aD0xMAorICAgICAgICBCdWZmZXIuZnJvbShbMHg0MSwgMHg0MiwgMHg0M10pIC8vIG9ubHkgMyBieXRlczogIkFCQyIKKyAgICAgIF0pOworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzdHJpbmdTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC91bmV4cGVjdGVkLip0ZXh0X3ZhbHVlLipsZW5ndGgvKTsKKyAgICB9KTsKKworICAgIGl0KCdMSVNUIHdpdGggbGVuZ3RoIDUgYnV0IG9ubHkgMSBpdGVtIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoWworICAgICAgICBCdWZmZXIuZnJvbShbMHgwOSwgMHgwMF0pLCAvLyBMSVNULCB2YWx1ZV9mbGFnPTB4MDAKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDVdKSwgLy8gbGVuZ3RoPTUKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKSAvLyBvbmx5IDEgSU5UIGl0ZW0KKyAgICAgIF0pOworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBsaXN0U2VyaWFsaXplci5kZXNlcmlhbGl6ZShidWZmZXIpLCAvaXRlbV8xLipidWZmZXIgaXMgZW1wdHkvKTsKKyAgICB9KTsKKworICAgIGl0KCdNQVAgd2l0aCBsZW5ndGggMyBidXQgb25seSAxIGVudHJ5IHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoWworICAgICAgICBCdWZmZXIuZnJvbShbMHgwQSwgMHgwMF0pLCAvLyBNQVAsIHZhbHVlX2ZsYWc9MHgwMAorICAgICAgICBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwM10pLCAvLyBsZW5ndGg9MworICAgICAgICBCdWZmZXIuZnJvbShbMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg2QiwgMHg2NSwgMHg3OV0pLCAvLyBrZXk6ICJrZXkiCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSkgLy8gdmFsdWU6IDEKKyAgICAgIF0pOworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBtYXBTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC97aXRlbV8xfS4qYnVmZmVyIGlzIGVtcHR5Lyk7CisgICAgfSk7CisKKyAgICBpdCgnVVVJRCB3aXRoIG9ubHkgOCBvZiAxNiBieXRlcyB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFsKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MEMsIDB4MDBdKSwgLy8gVVVJRCwgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDQxLCAweEQyLCAweEUyLCAweDhBLCAweDIwLCAweDEzLCAweDRFLCAweDM1XSkgLy8gb25seSA4IGJ5dGVzCisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdXVpZFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKSwgL3VuZXhwZWN0ZWQuKnZhbHVlLipsZW5ndGgvKTsKKyAgICB9KTsKKworICAgIGl0KCdEQVRFVElNRSB3aXRoIG9ubHkgMTAgb2YgMTggYnl0ZXMgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDA0LCAweDAwXSksIC8vIERBVEVUSU1FLCB2YWx1ZV9mbGFnPTB4MDAKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDcsIDB4QjIsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSAvLyBvbmx5IDEwIGJ5dGVzCisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZGF0ZVRpbWVTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC91bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnQk9PTEVBTiB3aXRoIG5vIHZhbHVlIGJ5dGUgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpb2MuYm9vbGVhblNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MjcsIDB4MDBdKSksIC91bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnQllURSB3aXRoIG5vIHZhbHVlIGJ5dGUgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBpb2MuYnl0ZVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oWzB4MjQsIDB4MDBdKSksIC91bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnQklHSU5URUdFUiB3aXRoIHRydW5jYXRlZCBsZW5ndGggdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDIzLCAweDAwXSksIC8vIEJJR0lOVEVHRVIsIHZhbHVlX2ZsYWc9MHgwMAorICAgICAgICBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMF0pIC8vIG9ubHkgMiBieXRlcyBvZiBsZW5ndGggaW5zdGVhZCBvZiA0CisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmlnSW50ZWdlclNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKSwgL3tsZW5ndGh9Lip1bmV4cGVjdGVkLip2YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisKKyAgICBpdCgnQklHSU5URUdFUiB3aXRoIGxlbmd0aD0wIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoWworICAgICAgICBCdWZmZXIuZnJvbShbMHgyMywgMHgwMF0pLCAvLyBCSUdJTlRFR0VSLCB2YWx1ZV9mbGFnPTB4MDAKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSAvLyBsZW5ndGg9MAorICAgICAgXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJpZ0ludGVnZXJTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC97bGVuZ3RofT0wIGlzIGxlc3MgdGhhbiBvbmUvKTsKKyAgICB9KTsKKworICAgIGl0KCdCSU5BUlkgd2l0aCB0cnVuY2F0ZWQgdmFsdWUgZGF0YSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFsKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MjUsIDB4MDBdKSwgLy8gQklOQVJZLCB2YWx1ZV9mbGFnPTB4MDAKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDVdKSwgLy8gbGVuZ3RoPTUKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDEsIDB4MDJdKSAvLyBvbmx5IDIgYnl0ZXMgaW5zdGVhZCBvZiA1CisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYmluYXJ5U2VyaWFsaXplci5kZXNlcmlhbGl6ZShidWZmZXIpLCAve3ZhbHVlfS4qdW5leHBlY3RlZC4qdmFsdWUuKmxlbmd0aC8pOworICAgIH0pOworCisgICAgaXQoJ1NFVCB3aXRoIGxlbmd0aCA1IGJ1dCBvbmx5IDEgaXRlbSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFsKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MEIsIDB4MDBdKSwgLy8gU0VULCB2YWx1ZV9mbGFnPTB4MDAKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDVdKSwgLy8gbGVuZ3RoPTUKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDFdKSAvLyBvbmx5IDEgSU5UIGl0ZW0KKyAgICAgIF0pOworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBzZXRTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC97aXRlbV8xfS4qYnVmZmVyIGlzIGVtcHR5Lyk7CisgICAgfSk7CisKKyAgICBpdCgnRU5VTSB3aXRoIHRydW5jYXRlZCBlbGVtZW50TmFtZSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFsKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MTgsIDB4MDBdKSwgLy8gRElSRUNUSU9OLCB2YWx1ZV9mbGFnPTB4MDAKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDVdKSAvLyBTVFJJTkcgd2l0aCBsZW5ndGg9NSBidXQgbm8gZGF0YQorICAgICAgXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGVudW1TZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC9lbGVtZW50TmFtZS4qdW5leHBlY3RlZC4qdGV4dF92YWx1ZS4qbGVuZ3RoLyk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdOZWdhdGl2ZSBsZW5ndGhzJywgKCkgPT4geworICAgIGl0KCdTVFJJTkcgd2l0aCBuZWdhdGl2ZSBsZW5ndGggdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAzLCAweDAwXSksIC8vIFNUUklORywgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGXSkgLy8gbGVuZ3RoPS0xCisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gc3RyaW5nU2VyaWFsaXplci5kZXNlcmlhbGl6ZShidWZmZXIpLCAvbGVuZ3RoLipsZXNzIHRoYW4gemVyby8pOworICAgIH0pOworCisgICAgaXQoJ0xJU1Qgd2l0aCBuZWdhdGl2ZSBsZW5ndGggdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDA5LCAweDAwXSksIC8vIExJU1QsIHZhbHVlX2ZsYWc9MHgwMAorICAgICAgICBCdWZmZXIuZnJvbShbMHhGRiwgMHhGRiwgMHhGRiwgMHhGRl0pIC8vIGxlbmd0aD0tMQorICAgICAgXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGxpc3RTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC9sZW5ndGguKmxlc3MgdGhhbiB6ZXJvLyk7CisgICAgfSk7CisKKyAgICBpdCgnTUFQIHdpdGggbmVnYXRpdmUgbGVuZ3RoIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoWworICAgICAgICBCdWZmZXIuZnJvbShbMHgwQSwgMHgwMF0pLCAvLyBNQVAsIHZhbHVlX2ZsYWc9MHgwMAorICAgICAgICBCdWZmZXIuZnJvbShbMHhGRiwgMHhGRiwgMHhGRiwgMHhGRl0pIC8vIGxlbmd0aD0tMQorICAgICAgXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG1hcFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKSwgL2xlbmd0aC4qbGVzcyB0aGFuIHplcm8vKTsKKyAgICB9KTsKKworICAgIGl0KCdTRVQgd2l0aCBuZWdhdGl2ZSBsZW5ndGggdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDBCLCAweDAwXSksIC8vIFNFVCwgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGXSkgLy8gbGVuZ3RoPS0xCisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW9jLnNldFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKSwgL2xlbmd0aC4qbGVzcyB0aGFuIHplcm8vKTsKKyAgICB9KTsKKworICAgIGl0KCdCSU5BUlkgd2l0aCBuZWdhdGl2ZSBsZW5ndGggdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDI1LCAweDAwXSksIC8vIEJJTkFSWSwgdmFsdWVfZmxhZz0weDAwCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGXSkgLy8gbGVuZ3RoPS0xCisgICAgICBdKTsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gaW9jLmJpbmFyeVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKSwgL2xlbmd0aC4qbGVzcyB0aGFuIHplcm8vKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ0J1bGsgZmxhZyBlcnJvcnMnLCAoKSA9PiB7CisgICAgaXQoJ0xJU1Qgd2l0aCBidWxrIGZsYWcgYnV0IG1pc3NpbmcgYnVsayBjb3VudCBkYXRhIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoWworICAgICAgICBCdWZmZXIuZnJvbShbMHgwOSwgMHgwMl0pLCAvLyBMSVNULCB2YWx1ZV9mbGFnPTB4MDIgKGJ1bGspCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSksIC8vIGxlbmd0aD0xCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSkgLy8gMSBJTlQgaXRlbSBidXQgbm8gYnVsayBjb3VudAorICAgICAgXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGxpc3RTZXJpYWxpemVyLmRlc2VyaWFsaXplKGJ1ZmZlciksIC97aXRlbV8wfS4qYnVsayBjb3VudCBpcyBtaXNzaW5nLyk7CisgICAgfSk7CisKKyAgICBpdCgnU0VUIHdpdGggYnVsayBmbGFnIGJ1dCBtaXNzaW5nIGJ1bGsgY291bnQgZGF0YSB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFsKKyAgICAgICAgQnVmZmVyLmZyb20oWzB4MEIsIDB4MDJdKSwgLy8gU0VULCB2YWx1ZV9mbGFnPTB4MDIgKGJ1bGspCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAxXSksIC8vIGxlbmd0aD0xCisgICAgICAgIEJ1ZmZlci5mcm9tKFsweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxXSkgLy8gMSBJTlQgaXRlbSBidXQgbm8gYnVsayBjb3VudAorICAgICAgXSk7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHNldFNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYnVmZmVyKSwgL3tpdGVtXzB9LipidWxrIGNvdW50IGlzIG1pc3NpbmcvKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1NlcmlhbGl6YXRpb24gcmVqZWN0aW9uIGZvciB1bnN1cHBvcnRlZCB0eXBlcycsICgpID0+IHsKKyAgICBpdCgnU3ltYm9sIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW55U2VyaWFsaXplci5zZXJpYWxpemUoU3ltYm9sKCd0ZXN0JykpLCAvTm8gc2VyaWFsaXplciBmb3VuZCB0byBzdXBwb3J0IGl0ZW0vKTsKKyAgICB9KTsKKworICAgIGl0KCdmdW5jdGlvbiB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKCgpID0+IHt9KSwgL05vIHNlcmlhbGl6ZXIgZm91bmQgdG8gc3VwcG9ydCBpdGVtLyk7CisgICAgfSk7CisKKyAgICBpdCgnYXJyb3cgZnVuY3Rpb24gdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgoeCkgPT4geCArIDEpLCAvTm8gc2VyaWFsaXplciBmb3VuZCB0byBzdXBwb3J0IGl0ZW0vKTsKKyAgICB9KTsKKworICAgIGl0KCdhc3luYyBmdW5jdGlvbiB0aHJvd3MgZXJyb3InLCAoKSA9PiB7CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzeW5jICgpID0+IHt9KSwgL05vIHNlcmlhbGl6ZXIgZm91bmQgdG8gc3VwcG9ydCBpdGVtLyk7CisgICAgfSk7CisKKyAgICBpdCgnZ2VuZXJhdG9yIGZ1bmN0aW9uIHRocm93cyBlcnJvcicsICgpID0+IHsKKyAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gYW55U2VyaWFsaXplci5zZXJpYWxpemUoZnVuY3Rpb24qICgpIHt9KSwgL05vIHNlcmlhbGl6ZXIgZm91bmQgdG8gc3VwcG9ydCBpdGVtLyk7CisgICAgfSk7CisKKyAgICBpdCgnY2xhc3MgY29uc3RydWN0b3IgdGhyb3dzIGVycm9yJywgKCkgPT4geworICAgICAgY2xhc3MgVGVzdENsYXNzIHt9CisgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKFRlc3RDbGFzcyksIC9ObyBzZXJpYWxpemVyIGZvdW5kIHRvIHN1cHBvcnQgaXRlbS8pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgndjEtcmVtb3ZlZCB0eXBlcyBzZXJpYWxpemF0aW9uIGJlaGF2aW9yJywgKCkgPT4geworICAgIGl0KCdQLmVxKCJjb2xlIikgc2VyaWFsaXplcyBhcyBNYXAgKHYxIHR5cGVzIGZhbGwgdGhyb3VnaCB0byBNYXBTZXJpYWxpemVyKScsICgpID0+IHsKKyAgICAgIC8vIHYxIFAgdHlwZXMgbm8gbG9uZ2VyIGhhdmUgZGVkaWNhdGVkIHNlcmlhbGl6ZXJzLCBzbyB0aGV5IHNlcmlhbGl6ZSBhcyBNYXBzCisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShQLmVxKCdjb2xlJykpOworICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5sZW5ndGggPiAwLCAnU2hvdWxkIHNlcmlhbGl6ZSBzdWNjZXNzZnVsbHkgYXMgTWFwJyk7CisgICAgfSk7CisKKyAgICBpdCgnVGV4dFAuY29udGFpbmluZygieCIpIHNlcmlhbGl6ZXMgYXMgTWFwICh2MSB0eXBlcyBmYWxsIHRocm91Z2ggdG8gTWFwU2VyaWFsaXplciknLCAoKSA9PiB7CisgICAgICAvLyB2MSBUZXh0UCB0eXBlcyBubyBsb25nZXIgaGF2ZSBkZWRpY2F0ZWQgc2VyaWFsaXplcnMsIHNvIHRoZXkgc2VyaWFsaXplIGFzIE1hcHMKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKFRleHRQLmNvbnRhaW5pbmcoJ3gnKSk7CisgICAgICBhc3NlcnQub2socmVzdWx0Lmxlbmd0aCA+IDAsICdTaG91bGQgc2VyaWFsaXplIHN1Y2Nlc3NmdWxseSBhcyBNYXAnKTsKKyAgICB9KTsKKworICAgIGl0KCduZXcgVHJhdmVyc2VyKCJjb2xlIiwgMSkgc2VyaWFsaXplcyBhcyBNYXAgKHYxIHR5cGVzIGZhbGwgdGhyb3VnaCB0byBNYXBTZXJpYWxpemVyKScsICgpID0+IHsKKyAgICAgIC8vIHYxIFRyYXZlcnNlciB0eXBlcyBubyBsb25nZXIgaGF2ZSBkZWRpY2F0ZWQgc2VyaWFsaXplcnMsIHNvIHRoZXkgc2VyaWFsaXplIGFzIE1hcHMKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBUcmF2ZXJzZXIoJ2NvbGUnLCAxKSk7CisgICAgICBhc3NlcnQub2socmVzdWx0Lmxlbmd0aCA+IDAsICdTaG91bGQgc2VyaWFsaXplIHN1Y2Nlc3NmdWxseSBhcyBNYXAnKTsKKyAgICB9KTsKKworICAgIGl0KCduZXcgT3B0aW9uc1N0cmF0ZWd5KHt9KSBzZXJpYWxpemVzIGFzIE1hcCAodjEgdHlwZXMgZmFsbCB0aHJvdWdoIHRvIE1hcFNlcmlhbGl6ZXIpJywgKCkgPT4geworICAgICAgLy8gdjEgT3B0aW9uc1N0cmF0ZWd5IHR5cGVzIG5vIGxvbmdlciBoYXZlIGRlZGljYXRlZCBzZXJpYWxpemVycywgc28gdGhleSBzZXJpYWxpemUgYXMgTWFwcworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUobmV3IE9wdGlvbnNTdHJhdGVneSh7fSkpOworICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5sZW5ndGggPiAwLCAnU2hvdWxkIHNlcmlhbGl6ZSBzdWNjZXNzZnVsbHkgYXMgTWFwJyk7CisgICAgfSk7CisgIH0pOworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L21vZGVsLXRlc3QuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvbW9kZWwtdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjliZWFlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L21vZGVsLXRlc3QuanMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoKKyAqIEdyYXBoQmluYXJ5VjQgLmdiaW4gcmVmZXJlbmNlIGZpbGUgdmFsaWRhdGlvbiBhZ2FpbnN0IGV4cGVjdGVkIEpTIG1vZGVsIHZhbHVlcy4KKyAqCisgKiBTZXQgdGhlIElPX1RFU1RfRElSRUNUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUKKyAqIHRoZSAuZ2JpbiBmaWxlcyB0aGF0IHJlcHJlc2VudCB0aGUgc2VyaWFsaXplZCAibW9kZWwiIGFyZSBsb2NhdGVkLgorICovCisKK2ltcG9ydCB7IGFzc2VydCB9IGZyb20gJ2NoYWknOworaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnOworaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7CitpbXBvcnQgeyBtb2RlbCB9IGZyb20gJy4vbW9kZWwuanMnOworaW1wb3J0IGlvYyBmcm9tICcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcyc7CisKK2NvbnN0IHsgYW55U2VyaWFsaXplciB9ID0gaW9jOworCitjb25zdCBnYmluRGlyID0gJ2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvJzsKK2NvbnN0IHNlYXJjaFBhdHRlcm4gPSAnZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluJzsKK2NvbnN0IHRoaXNGaWxlID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpOworY29uc3QgZGVmYXVsdERpciA9IHRoaXNGaWxlLnN1YnN0cmluZygwLCB0aGlzRmlsZS5pbmRleE9mKHNlYXJjaFBhdHRlcm4pKTsKK2NvbnN0IHRlc3RSZXNvdXJjZURpcmVjdG9yeSA9IHByb2Nlc3MuZW52LklPX1RFU1RfRElSRUNUT1JZIHx8IChkZWZhdWx0RGlyICsgZ2JpbkRpcik7CisKK2Z1bmN0aW9uIHJlYWRHYmluRmlsZShuYW1lKSB7CisgIHJldHVybiByZWFkRmlsZVN5bmModGVzdFJlc291cmNlRGlyZWN0b3J5ICsgbmFtZSArICctdjQuZ2JpbicpOworfQorCisvLyBieXRlLWV4YWN0OiBkZXNlcmlhbGl6ZSwgc2VyaWFsaXplLCByb3VuZC10cmlwLCBsZW5ndGggdHJhY2tpbmcKK2Z1bmN0aW9uIHJ1bihuYW1lLCBjb21wYXJhdG9yID0gYXNzZXJ0RXF1YWwpIHsKKyAgZGVzY3JpYmUobmFtZSwgKCkgPT4geworICAgIGNvbnN0IGZpbGVCeXRlcyA9IHJlYWRHYmluRmlsZShuYW1lKTsKKyAgICBjb25zdCBtb2RlbFZhbHVlID0gbW9kZWxbbmFtZV07CisKKyAgICBpdCgnZGVzZXJpYWxpemUgLmdiaW4gbWF0Y2hlcyBtb2RlbCcsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZmlsZUJ5dGVzKTsKKyAgICAgIGNvbXBhcmF0b3IocmVzdWx0LnYsIG1vZGVsVmFsdWUpOworICAgIH0pOworCisgICAgaXQoJ3NlcmlhbGl6ZSBtb2RlbCBtYXRjaGVzIC5nYmluIGJ5dGVzJywgKCkgPT4geworICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG1vZGVsVmFsdWUpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzZXJpYWxpemVkLCBmaWxlQnl0ZXMpOworICAgIH0pOworCisgICAgaXQoJ3JvdW5kLXRyaXAgc2VyaWFsaXplKGRlc2VyaWFsaXplKGZpbGVCeXRlcykpIG1hdGNoZXMgLmdiaW4nLCAoKSA9PiB7CisgICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGZpbGVCeXRlcyk7CisgICAgICBjb25zdCByZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShkZXNlcmlhbGl6ZWQudik7CisgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc2VyaWFsaXplZCwgZmlsZUJ5dGVzKTsKKyAgICB9KTsKKworICAgIGl0KCdsZW5ndGggdHJhY2tpbmcnLCAoKSA9PiB7CisgICAgICBjb25zdCBnYXJiYWdlQnl0ZXMgPSBCdWZmZXIuY29uY2F0KFtmaWxlQnl0ZXMsIEJ1ZmZlci5mcm9tKFsweEZGXSldKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZ2FyYmFnZUJ5dGVzKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuLCBmaWxlQnl0ZXMubGVuZ3RoKTsKKyAgICB9KTsKKyAgfSk7Cit9CisKKy8vIG9iamVjdC1sZXZlbDogZGVzZXJpYWxpemUsIGRvdWJsZSByb3VuZC10cmlwIGlkZW1wb3RlbmN5LCBsZW5ndGggdHJhY2tpbmcKK2Z1bmN0aW9uIHJ1bldyaXRlUmVhZChuYW1lLCBjb21wYXJhdG9yID0gYXNzZXJ0RXF1YWwpIHsKKyAgZGVzY3JpYmUobmFtZSwgKCkgPT4geworICAgIGNvbnN0IGZpbGVCeXRlcyA9IHJlYWRHYmluRmlsZShuYW1lKTsKKyAgICBjb25zdCBtb2RlbFZhbHVlID0gbW9kZWxbbmFtZV07CisKKyAgICBpdCgnZGVzZXJpYWxpemUgLmdiaW4gbWF0Y2hlcyBtb2RlbCcsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoZmlsZUJ5dGVzKTsKKyAgICAgIGNvbXBhcmF0b3IocmVzdWx0LnYsIG1vZGVsVmFsdWUpOworICAgIH0pOworCisgICAgaXQoJ2RvdWJsZSByb3VuZC10cmlwIGlkZW1wb3RlbmN5JywgKCkgPT4geworICAgICAgY29uc3QgZmlyc3RSb3VuZFRyaXAgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG1vZGVsVmFsdWUpKTsKKyAgICAgIGNvbnN0IHNlY29uZFJvdW5kVHJpcCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoYW55U2VyaWFsaXplci5zZXJpYWxpemUoZmlyc3RSb3VuZFRyaXAudikpOworICAgICAgY29tcGFyYXRvcihmaXJzdFJvdW5kVHJpcC52LCBzZWNvbmRSb3VuZFRyaXAudik7CisgICAgfSk7CisKKyAgICBpdCgnbGVuZ3RoIHRyYWNraW5nJywgKCkgPT4geworICAgICAgY29uc3QgZ2FyYmFnZUJ5dGVzID0gQnVmZmVyLmNvbmNhdChbZmlsZUJ5dGVzLCBCdWZmZXIuZnJvbShbMHhGRl0pXSk7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGdhcmJhZ2VCeXRlcyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmxlbiwgZmlsZUJ5dGVzLmxlbmd0aCk7CisgICAgfSk7CisgIH0pOworfQorCisvLyBkZXNlcmlhbGl6ZS1vbmx5OiBkZXNlcmlhbGl6ZSwgbGVuZ3RoIHRyYWNraW5nCitmdW5jdGlvbiBydW5SZWFkKG5hbWUsIGNvbXBhcmF0b3IgPSBhc3NlcnRFcXVhbCkgeworICBkZXNjcmliZShuYW1lLCAoKSA9PiB7CisgICAgY29uc3QgZmlsZUJ5dGVzID0gcmVhZEdiaW5GaWxlKG5hbWUpOworICAgIGNvbnN0IG1vZGVsVmFsdWUgPSBtb2RlbFtuYW1lXTsKKworICAgIGl0KCdkZXNlcmlhbGl6ZSAuZ2JpbiBtYXRjaGVzIG1vZGVsJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShmaWxlQnl0ZXMpOworICAgICAgY29tcGFyYXRvcihyZXN1bHQudiwgbW9kZWxWYWx1ZSk7CisgICAgfSk7CisKKyAgICBpdCgnbGVuZ3RoIHRyYWNraW5nJywgKCkgPT4geworICAgICAgY29uc3QgZ2FyYmFnZUJ5dGVzID0gQnVmZmVyLmNvbmNhdChbZmlsZUJ5dGVzLCBCdWZmZXIuZnJvbShbMHhGRl0pXSk7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKGdhcmJhZ2VCeXRlcyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmxlbiwgZmlsZUJ5dGVzLmxlbmd0aCk7CisgICAgfSk7CisgIH0pOworfQorCisvLyB1bmltcGxlbWVudGVkIHR5cGUKK2Z1bmN0aW9uIHNraXAobmFtZSwgcmVhc29uKSB7CisgIGRlc2NyaWJlKG5hbWUsICgpID0+IHsKKyAgICBpdC5za2lwKGAke3JlYXNvbn1gLCAoKSA9PiB7fSk7CisgIH0pOworfQorCitmdW5jdGlvbiBhc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKSB7CisgIGlmIChOdW1iZXIuaXNOYU4oZXhwZWN0ZWQpICYmIE51bWJlci5pc05hTihhY3R1YWwpKSByZXR1cm47CisgIGlmIChPYmplY3QuaXMoZXhwZWN0ZWQsIC0wKSAmJiBPYmplY3QuaXMoYWN0dWFsLCAtMCkpIHJldHVybjsKKyAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihleHBlY3RlZCkgJiYgQnVmZmVyLmlzQnVmZmVyKGFjdHVhbCkpIHsKKyAgICBhc3NlcnQuaXNUcnVlKGV4cGVjdGVkLmVxdWFscyhhY3R1YWwpKTsKKyAgICByZXR1cm47CisgIH0KKyAgaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgU2V0ICYmIGFjdHVhbCBpbnN0YW5jZW9mIFNldCkgeworICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoWy4uLmV4cGVjdGVkXS5zb3J0KCksIFsuLi5hY3R1YWxdLnNvcnQoKSk7CisgICAgcmV0dXJuOworICB9CisgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdiaWdpbnQnICYmIHR5cGVvZiBhY3R1YWwgPT09ICdiaWdpbnQnKSB7CisgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworICAgIHJldHVybjsKKyAgfQorICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpOworfQorCitmdW5jdGlvbiBuYW5Db21wYXJhdG9yKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgYXNzZXJ0LmlzVHJ1ZShOdW1iZXIuaXNOYU4oYWN0dWFsKSk7CisgIGFzc2VydC5pc1RydWUoTnVtYmVyLmlzTmFOKGV4cGVjdGVkKSk7Cit9CisKK2Z1bmN0aW9uIG5lZ1plcm9Db21wYXJhdG9yKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgYXNzZXJ0LmlzVHJ1ZShPYmplY3QuaXMoYWN0dWFsLCAtMCkpOworICBhc3NlcnQuaXNUcnVlKE9iamVjdC5pcyhleHBlY3RlZCwgLTApKTsKK30KKworZnVuY3Rpb24gc2V0Q29tcGFyYXRvcihhY3R1YWwsIGV4cGVjdGVkKSB7CisgIGFzc2VydC5pbnN0YW5jZU9mKGFjdHVhbCwgU2V0KTsKKyAgYXNzZXJ0Lmluc3RhbmNlT2YoZXhwZWN0ZWQsIFNldCk7CisgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoWy4uLmFjdHVhbF0uc29ydCgpLCBbLi4uZXhwZWN0ZWRdLnNvcnQoKSk7Cit9CisKK2Z1bmN0aW9uIHNldENhcmRpbmFsaXR5Q29tcGFyYXRvcihhY3R1YWwsIGV4cGVjdGVkKSB7CisgIGFzc2VydC5zdHJpY3RFcXVhbChhY3R1YWwuaWQsIGV4cGVjdGVkLmlkKTsKKyAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdHVhbC5sYWJlbCwgZXhwZWN0ZWQubGFiZWwpOworICBhc3NlcnQuaW5zdGFuY2VPZihhY3R1YWwudmFsdWUsIFNldCk7CisgIGFzc2VydC5pbnN0YW5jZU9mKGV4cGVjdGVkLnZhbHVlLCBTZXQpOworICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFsuLi5hY3R1YWwudmFsdWVdLnNvcnQoKSwgWy4uLmV4cGVjdGVkLnZhbHVlXS5zb3J0KCkpOworICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGFjdHVhbC5wcm9wZXJ0aWVzLCBleHBlY3RlZC5wcm9wZXJ0aWVzKTsKK30KKworZnVuY3Rpb24gaW52YWxpZERhdGVDb21wYXJhdG9yKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgYXNzZXJ0LmlzVHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBEYXRlKTsKKyAgYXNzZXJ0LmlzVHJ1ZShleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpOworICBhc3NlcnQuaXNUcnVlKE51bWJlci5pc05hTihhY3R1YWwuZ2V0VGltZSgpKSk7CisgIGFzc2VydC5pc1RydWUoTnVtYmVyLmlzTmFOKGV4cGVjdGVkLmdldFRpbWUoKSkpOworfQorCitkZXNjcmliZSgnR3JhcGhCaW5hcnkgdjQgTW9kZWwgVGVzdHMnLCAoKSA9PiB7CisgIC8vIHJ1biBtb2RlICgzMSBlbnRyaWVzKQorICBydW4oJ3Bvcy1iaWdpbnRlZ2VyJyk7CisgIHJ1bignbmVnLWJpZ2ludGVnZXInKTsKKyAgcnVuKCdlbXB0eS1iaW5hcnknKTsKKyAgcnVuKCdzdHItYmluYXJ5Jyk7CisgIHJ1bignbWF4LWRvdWJsZScpOworICBydW4oJ21pbi1kb3VibGUnKTsKKyAgcnVuKCduZWctbWF4LWRvdWJsZScpOworICBydW4oJ25lZy1taW4tZG91YmxlJyk7CisgIHJ1bignbmFuLWRvdWJsZScsIG5hbkNvbXBhcmF0b3IpOworICBydW4oJ3Bvcy1pbmYtZG91YmxlJyk7CisgIHJ1bignbmVnLWluZi1kb3VibGUnKTsKKyAgcnVuKCd1bnNwZWNpZmllZC1udWxsJyk7CisgIHJ1bigndHJ1ZS1ib29sZWFuJyk7CisgIHJ1bignZmFsc2UtYm9vbGVhbicpOworICBydW4oJ3NpbmdsZS1ieXRlLXN0cmluZycpOworICBydW4oJ21peGVkLXN0cmluZycpOworICBydW4oJ3Zhci10eXBlLWxpc3QnKTsKKyAgcnVuKCdlbXB0eS1saXN0Jyk7CisgIHJ1bignbm8tcHJvcC1lZGdlJyk7CisgIHJ1bignbWF4LWludCcpOworICBydW4oJ21pbi1pbnQnKTsKKyAgcnVuKCdlbXB0eS1tYXAnKTsKKyAgcnVuKCd0cmF2ZXJzYWwtcGF0aCcpOworICBydW4oJ2VtcHR5LXBhdGgnKTsKKyAgcnVuKCdlZGdlLXByb3BlcnR5Jyk7CisgIHJ1bignbnVsbC1wcm9wZXJ0eScpOworICBydW4oJ2VtcHR5LXNldCcpOworICBydW4oJ25vLXByb3AtdmVydGV4Jyk7CisgIHJ1bignaWQtdCcpOworICBydW4oJ291dC1kaXJlY3Rpb24nKTsKKyAgcnVuKCduZWctemVyby1kb3VibGUnLCBuZWdaZXJvQ29tcGFyYXRvcik7CisKKyAgLy8gcnVuV3JpdGVSZWFkIG1vZGUgKDIzIGVudHJpZXMpCisgIHJ1bldyaXRlUmVhZCgnbWluLWJ5dGUnKTsKKyAgcnVuV3JpdGVSZWFkKCdtYXgtYnl0ZScpOworICBydW5Xcml0ZVJlYWQoJ21heC1mbG9hdCcpOworICBydW5Xcml0ZVJlYWQoJ21pbi1mbG9hdCcpOworICBydW5Xcml0ZVJlYWQoJ25lZy1tYXgtZmxvYXQnKTsKKyAgcnVuV3JpdGVSZWFkKCduZWctbWluLWZsb2F0Jyk7CisgIHJ1bldyaXRlUmVhZCgnbmFuLWZsb2F0JywgbmFuQ29tcGFyYXRvcik7CisgIHJ1bldyaXRlUmVhZCgncG9zLWluZi1mbG9hdCcpOworICBydW5Xcml0ZVJlYWQoJ25lZy1pbmYtZmxvYXQnKTsKKyAgcnVuV3JpdGVSZWFkKCd2YXItYnVsa2xpc3QnKTsKKyAgcnVuV3JpdGVSZWFkKCdlbXB0eS1idWxrbGlzdCcpOworICBydW5Xcml0ZVJlYWQoJ3RyYXZlcnNhbC1lZGdlJyk7CisgIHJ1bldyaXRlUmVhZCgnbWluLWxvbmcnKTsKKyAgcnVuV3JpdGVSZWFkKCdtYXgtbG9uZycpOworICBydW5Xcml0ZVJlYWQoJ3Zhci10eXBlLXNldCcsIHNldENvbXBhcmF0b3IpOworICBydW5Xcml0ZVJlYWQoJ21heC1zaG9ydCcpOworICBydW5Xcml0ZVJlYWQoJ21pbi1zaG9ydCcpOworICBydW5Xcml0ZVJlYWQoJ3NwZWNpZmllZC11dWlkJyk7CisgIHJ1bldyaXRlUmVhZCgnbmlsLXV1aWQnKTsKKyAgcnVuV3JpdGVSZWFkKCd0cmF2ZXJzYWwtdmVydGV4cHJvcGVydHknKTsKKyAgcnVuV3JpdGVSZWFkKCdtZXRhLXZlcnRleHByb3BlcnR5Jyk7CisgIHJ1bldyaXRlUmVhZCgnc2V0LWNhcmRpbmFsaXR5LXZlcnRleHByb3BlcnR5Jywgc2V0Q2FyZGluYWxpdHlDb21wYXJhdG9yKTsKKyAgcnVuV3JpdGVSZWFkKCd0cmF2ZXJzYWwtdmVydGV4Jyk7CisKKyAgLy8gcnVuUmVhZCBtb2RlICg1IGVudHJpZXMpCisgIHJ1blJlYWQoJ25lZy16ZXJvLWZsb2F0JywgbmVnWmVyb0NvbXBhcmF0b3IpOworICBydW5SZWFkKCdtYXgtb2Zmc2V0ZGF0ZXRpbWUnLCBpbnZhbGlkRGF0ZUNvbXBhcmF0b3IpOworICBydW5SZWFkKCdtaW4tb2Zmc2V0ZGF0ZXRpbWUnLCBpbnZhbGlkRGF0ZUNvbXBhcmF0b3IpOworICBydW5SZWFkKCdwcm9wLXBhdGgnKTsKKyAgcnVuUmVhZCgndmFyLXR5cGUtbWFwJyk7CisKKyAgLy8gc2tpcCBtb2RlICg4IGVudHJpZXMpCisgIHNraXAoJ3NpbmdsZS1ieXRlLWNoYXInLCAnQ2hhciB0eXBlICgweDgwKSBub3QgaW1wbGVtZW50ZWQnKTsKKyAgc2tpcCgnbXVsdGktYnl0ZS1jaGFyJywgJ0NoYXIgdHlwZSAoMHg4MCkgbm90IGltcGxlbWVudGVkJyk7CisgIHNraXAoJ3RyYXZlcnNhbC10cmVlJywgJ1RyZWUgdHlwZSBub3QgaW1wbGVtZW50ZWQnKTsKKyAgc2tpcCgndGlua2VyLWdyYXBoJywgJ0dyYXBoIHR5cGUgbm90IGltcGxlbWVudGVkJyk7CisgIHNraXAoJ3Bvcy1iaWdkZWNpbWFsJywgJ0JpZ0RlY2ltYWwgdHlwZSBub3QgaW1wbGVtZW50ZWQnKTsKKyAgc2tpcCgnbmVnLWJpZ2RlY2ltYWwnLCAnQmlnRGVjaW1hbCB0eXBlIG5vdCBpbXBsZW1lbnRlZCcpOworICBza2lwKCdmb3JldmVyLWR1cmF0aW9uJywgJ0R1cmF0aW9uIHR5cGUgbm90IGltcGxlbWVudGVkJyk7CisgIHNraXAoJ3plcm8tZHVyYXRpb24nLCAnRHVyYXRpb24gdHlwZSBub3QgaW1wbGVtZW50ZWQnKTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9tb2RlbC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS9tb2RlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDY0MjczCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L21vZGVsLmpzCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCB7IFZlcnRleCwgRWRnZSwgUHJvcGVydHksIFZlcnRleFByb3BlcnR5LCBQYXRoIH0gZnJvbSAnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaC5qcyc7CitpbXBvcnQgeyBkaXJlY3Rpb24sIHQgfSBmcm9tICcuLi8uLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwuanMnOworCisvKgorICogVW5zdXBwb3J0ZWQgdHlwZXMgKG5vIG1hcCBlbnRyaWVzLCAuZ2JpbiBmaWxlcyBleGlzdCBidXQgdHlwZXMgbm90IGltcGxlbWVudGVkKToKKyAqIC0gc2luZ2xlLWJ5dGUtY2hhciwgbXVsdGktYnl0ZS1jaGFyIChDaGFyIDB4ODAgbm90IGltcGxlbWVudGVkKQorICogLSB0cmF2ZXJzYWwtdHJlZSAoVHJlZSB0eXBlIG5vdCBpbXBsZW1lbnRlZCkKKyAqIC0gdGlua2VyLWdyYXBoIChHcmFwaCB0eXBlIG5vdCBpbXBsZW1lbnRlZCkKKyAqIC0gcG9zLWJpZ2RlY2ltYWwsIG5lZy1iaWdkZWNpbWFsIChCaWdEZWNpbWFsIHR5cGUgbm90IGltcGxlbWVudGVkKQorICogLSBmb3JldmVyLWR1cmF0aW9uLCB6ZXJvLWR1cmF0aW9uIChEdXJhdGlvbiB0eXBlIG5vdCBpbXBsZW1lbnRlZCkKKyAqLworCitjb25zdCBtb2RlbCA9IHt9OworCisvLyBCaWdJbnRlZ2VyIHZhbHVlcworbW9kZWxbJ3Bvcy1iaWdpbnRlZ2VyJ10gPSBCaWdJbnQoJzEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMScpOworbW9kZWxbJ25lZy1iaWdpbnRlZ2VyJ10gPSBCaWdJbnQoJy0xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEnKTsKKworLy8gQnl0ZSB2YWx1ZXMgKEpTIGhhcyBubyBieXRlIHR5cGUsIGRlc2VyaWFsaXplcyB0byBOdW1iZXIpCittb2RlbFsnbWluLWJ5dGUnXSA9IC0xMjg7Cittb2RlbFsnbWF4LWJ5dGUnXSA9IDEyNzsKKworLy8gQmluYXJ5IHZhbHVlcworbW9kZWxbJ2VtcHR5LWJpbmFyeSddID0gQnVmZmVyLmZyb20oJycsICd1dGYtOCcpOworbW9kZWxbJ3N0ci1iaW5hcnknXSA9IEJ1ZmZlci5mcm9tKCdzb21lIGJ5dGVzIGZvciB5b3UnLCAndXRmLTgnKTsKKworLy8gRG91YmxlIHZhbHVlcworbW9kZWxbJ21heC1kb3VibGUnXSA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OworbW9kZWxbJ21pbi1kb3VibGUnXSA9IDVlLTMyNDsKK21vZGVsWyduZWctbWF4LWRvdWJsZSddID0gLTEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OworbW9kZWxbJ25lZy1taW4tZG91YmxlJ10gPSAtNWUtMzI0OworbW9kZWxbJ25hbi1kb3VibGUnXSA9IE5hTjsKK21vZGVsWydwb3MtaW5mLWRvdWJsZSddID0gSW5maW5pdHk7Cittb2RlbFsnbmVnLWluZi1kb3VibGUnXSA9IC1JbmZpbml0eTsKK21vZGVsWyduZWctemVyby1kb3VibGUnXSA9IC0wOworCisvLyBGbG9hdCB2YWx1ZXMgKEpTIGhhcyBubyBmbG9hdCB0eXBlLCBkZXNlcmlhbGl6ZXMgdG8gTnVtYmVyIHdpdGggSUVFRSA3NTQgZG91YmxlIHJlcHJlc2VudGF0aW9uKQorbW9kZWxbJ21heC1mbG9hdCddID0gMy40MDI4MjM0NjYzODUyODg2ZSszODsKK21vZGVsWydtaW4tZmxvYXQnXSA9IDEuNDAxMjk4NDY0MzI0ODE3ZS00NTsKK21vZGVsWyduZWctbWF4LWZsb2F0J10gPSAtMy40MDI4MjM0NjYzODUyODg2ZSszODsKK21vZGVsWyduZWctbWluLWZsb2F0J10gPSAtMS40MDEyOTg0NjQzMjQ4MTdlLTQ1OworbW9kZWxbJ25hbi1mbG9hdCddID0gTmFOOworbW9kZWxbJ3Bvcy1pbmYtZmxvYXQnXSA9IEluZmluaXR5OworbW9kZWxbJ25lZy1pbmYtZmxvYXQnXSA9IC1JbmZpbml0eTsKK21vZGVsWyduZWctemVyby1mbG9hdCddID0gLTA7CisKKy8vIE51bGwKK21vZGVsWyd1bnNwZWNpZmllZC1udWxsJ10gPSBudWxsOworCisvLyBCb29sZWFuIHZhbHVlcworbW9kZWxbJ3RydWUtYm9vbGVhbiddID0gdHJ1ZTsKK21vZGVsWydmYWxzZS1ib29sZWFuJ10gPSBmYWxzZTsKKworLy8gU3RyaW5nIHZhbHVlcworbW9kZWxbJ3NpbmdsZS1ieXRlLXN0cmluZyddID0gJ2FiYyc7Cittb2RlbFsnbWl4ZWQtc3RyaW5nJ10gPSAnYWJjXHUwMzkxXHUwMzkyXHUwMzkzJzsKKworLy8gTGlzdCB2YWx1ZXMKK21vZGVsWyd2YXItYnVsa2xpc3QnXSA9IFsnbWFya28nLCAnam9zaCcsICdqb3NoJ107Cittb2RlbFsnZW1wdHktYnVsa2xpc3QnXSA9IFtdOworbW9kZWxbJ3Zhci10eXBlLWxpc3QnXSA9IFsxLCAncGVyc29uJywgdHJ1ZSwgbnVsbF07Cittb2RlbFsnZW1wdHktbGlzdCddID0gW107CisKKy8vIEVkZ2UgdmFsdWVzCittb2RlbFsndHJhdmVyc2FsLWVkZ2UnXSA9IG5ldyBFZGdlKAorICAxMywKKyAgbmV3IFZlcnRleCgxLCAncGVyc29uJyksICAgIC8vIG91dFYgKGZpcnN0IGluIEpTIGNvbnN0cnVjdG9yKQorICAnZGV2ZWxvcHMnLAorICBuZXcgVmVydGV4KDEwLCAnc29mdHdhcmUnKSwgLy8gaW5WCisgIFtuZXcgUHJvcGVydHkoJ3NpbmNlJywgMjAwOSldCispOworbW9kZWxbJ25vLXByb3AtZWRnZSddID0gbmV3IEVkZ2UoCisgIDEzLAorICBuZXcgVmVydGV4KDEsICdwZXJzb24nKSwKKyAgJ2RldmVsb3BzJywKKyAgbmV3IFZlcnRleCgxMCwgJ3NvZnR3YXJlJykKKyk7CisKKy8vIEludGVnZXIgdmFsdWVzCittb2RlbFsnbWF4LWludCddID0gMjE0NzQ4MzY0NzsKK21vZGVsWydtaW4taW50J10gPSAtMjE0NzQ4MzY0ODsKKworLy8gTG9uZyB2YWx1ZXMKK21vZGVsWydtYXgtbG9uZyddID0gOTIyMzM3MjAzNjg1NDc3NTgwN247Cittb2RlbFsnbWluLWxvbmcnXSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4bjsKKworLy8gTWFwIHZhbHVlcworY29uc3QgZGF0ZUtleSA9IG5ldyBEYXRlKERhdGUuVVRDKDE5NzAsIDAsIDEsIDAsIDI0LCA0MSwgMjk1KSk7IC8vIDE0ODEyOTUgbXMKK21vZGVsWyd2YXItdHlwZS1tYXAnXSA9IG5ldyBNYXAoWworICBbbnVsbCwgbnVsbF0sCisgIFtbMSwgMiwgM10sIGRhdGVLZXldLAorICBbZGF0ZUtleSwgJ3JlZCddLAorICBbJ3Rlc3QnLCAxMjNdCitdKTsKK21vZGVsWydlbXB0eS1tYXAnXSA9IG5ldyBNYXAoKTsKKworLy8gUGF0aCB2YWx1ZXMKK21vZGVsWyd0cmF2ZXJzYWwtcGF0aCddID0gbmV3IFBhdGgoCisgIFtuZXcgU2V0KCksIG5ldyBTZXQoKSwgbmV3IFNldCgpXSwKKyAgW25ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicpLCBuZXcgVmVydGV4KDEwLCAnc29mdHdhcmUnKSwgbmV3IFZlcnRleCgxMSwgJ3NvZnR3YXJlJyldCispOworbW9kZWxbJ2VtcHR5LXBhdGgnXSA9IG5ldyBQYXRoKFtdLCBbXSk7CisKKy8vIENvbXBsZXggcGF0aCB3aXRoIG5lc3RlZCBwcm9wZXJ0aWVzCitjb25zdCBwcm9wUGF0aFZlcnRleCA9IG5ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicsIFsKKyAgbmV3IFZlcnRleFByb3BlcnR5KDAsICduYW1lJywgJ21hcmtvJyksCisgIG5ldyBWZXJ0ZXhQcm9wZXJ0eSg2LCAnbG9jYXRpb24nLCAnc2FuIGRpZWdvJywgWworICAgIG5ldyBQcm9wZXJ0eSgnc3RhcnRUaW1lJywgMTk5NyksCisgICAgbmV3IFByb3BlcnR5KCdlbmRUaW1lJywgMjAwMSkKKyAgXSksCisgIG5ldyBWZXJ0ZXhQcm9wZXJ0eSg3LCAnbG9jYXRpb24nLCAnc2FudGEgY3J1eicsIFsKKyAgICBuZXcgUHJvcGVydHkoJ3N0YXJ0VGltZScsIDIwMDEpLAorICAgIG5ldyBQcm9wZXJ0eSgnZW5kVGltZScsIDIwMDQpCisgIF0pLAorICBuZXcgVmVydGV4UHJvcGVydHkoOCwgJ2xvY2F0aW9uJywgJ2JydXNzZWxzJywgWworICAgIG5ldyBQcm9wZXJ0eSgnc3RhcnRUaW1lJywgMjAwNCksCisgICAgbmV3IFByb3BlcnR5KCdlbmRUaW1lJywgMjAwNSkKKyAgXSksCisgIG5ldyBWZXJ0ZXhQcm9wZXJ0eSg5LCAnbG9jYXRpb24nLCAnc2FudGEgZmUnLCBbCisgICAgbmV3IFByb3BlcnR5KCdzdGFydFRpbWUnLCAyMDA1KQorICBdKQorXSk7Citjb25zdCBwcm9wUGF0aFZlcnRleDIgPSBuZXcgVmVydGV4KDEwLCAnc29mdHdhcmUnLCBbCisgIG5ldyBWZXJ0ZXhQcm9wZXJ0eSg0LCAnbmFtZScsICdncmVtbGluJykKK10pOworY29uc3QgcHJvcFBhdGhWZXJ0ZXgzID0gbmV3IFZlcnRleCgxMSwgJ3NvZnR3YXJlJywgWworICBuZXcgVmVydGV4UHJvcGVydHkoNSwgJ25hbWUnLCAndGlua2VyZ3JhcGgnKQorXSk7Cittb2RlbFsncHJvcC1wYXRoJ10gPSBuZXcgUGF0aCgKKyAgW25ldyBTZXQoKSwgbmV3IFNldCgpLCBuZXcgU2V0KCldLAorICBbcHJvcFBhdGhWZXJ0ZXgsIHByb3BQYXRoVmVydGV4MiwgcHJvcFBhdGhWZXJ0ZXgzXQorKTsKKworLy8gUHJvcGVydHkgdmFsdWVzIChubyBwYXJlbnQgcGFyYW0gaW4gSlMpCittb2RlbFsnZWRnZS1wcm9wZXJ0eSddID0gbmV3IFByb3BlcnR5KCdzaW5jZScsIDIwMDkpOworbW9kZWxbJ251bGwtcHJvcGVydHknXSA9IG5ldyBQcm9wZXJ0eSgnJywgbnVsbCk7CisKKy8vIFNldCB2YWx1ZXMKK21vZGVsWyd2YXItdHlwZS1zZXQnXSA9IG5ldyBTZXQoWzIsICdwZXJzb24nLCB0cnVlLCBudWxsXSk7Cittb2RlbFsnZW1wdHktc2V0J10gPSBuZXcgU2V0KCk7CisKKy8vIFNob3J0IHZhbHVlcyAoSlMgaGFzIG5vIHNob3J0IHR5cGUsIGRlc2VyaWFsaXplcyB0byBOdW1iZXIpCittb2RlbFsnbWF4LXNob3J0J10gPSAzMjc2NzsKK21vZGVsWydtaW4tc2hvcnQnXSA9IC0zMjc2ODsKKworLy8gVVVJRCB2YWx1ZXMgKHBsYWluIHN0cmluZ3MgaW4gSlMpCittb2RlbFsnc3BlY2lmaWVkLXV1aWQnXSA9ICc0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYnOworbW9kZWxbJ25pbC11dWlkJ10gPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJzsKKworLy8gVmVydGV4IHZhbHVlcworbW9kZWxbJ25vLXByb3AtdmVydGV4J10gPSBuZXcgVmVydGV4KDEsICdwZXJzb24nKTsKKworLy8gVmVydGV4UHJvcGVydHkgdmFsdWVzIChubyBwYXJlbnQgcGFyYW0sIGtleSBlcXVhbHMgbGFiZWwpCittb2RlbFsndHJhdmVyc2FsLXZlcnRleHByb3BlcnR5J10gPSBuZXcgVmVydGV4UHJvcGVydHkoMCwgJ25hbWUnLCAnbWFya28nKTsKK21vZGVsWydtZXRhLXZlcnRleHByb3BlcnR5J10gPSBuZXcgVmVydGV4UHJvcGVydHkoMSwgJ3BlcnNvbicsICdzdGVwaGVuJywgW25ldyBQcm9wZXJ0eSgnYScsICdiJyldKTsKK21vZGVsWydzZXQtY2FyZGluYWxpdHktdmVydGV4cHJvcGVydHknXSA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSgxLCAncGVyc29uJywgbmV3IFNldChbJ3N0ZXBoZW4nLCAnbWFya28nXSksIFtuZXcgUHJvcGVydHkoJ2EnLCAnYicpXSk7CisKKy8vIEVudW0gdmFsdWVzCittb2RlbFsnaWQtdCddID0gdC5pZDsKK21vZGVsWydvdXQtZGlyZWN0aW9uJ10gPSBkaXJlY3Rpb24ub3V0OworCisvLyBDb21wbGV4IHZlcnRleCB3aXRoIHByb3BlcnRpZXMgKGZyb20gLmdiaW4gZGVzZXJpYWxpemF0aW9uIHN0cnVjdHVyZSkKK2NvbnN0IG5hbWUgPSBuZXcgVmVydGV4UHJvcGVydHkoMCwgJ25hbWUnLCAnbWFya28nKTsKK2NvbnN0IHNhbkRpZWdvID0gbmV3IFZlcnRleFByb3BlcnR5KDYsICdsb2NhdGlvbicsICdzYW4gZGllZ28nLCBbCisgIG5ldyBQcm9wZXJ0eSgnc3RhcnRUaW1lJywgMTk5NyksCisgIG5ldyBQcm9wZXJ0eSgnZW5kVGltZScsIDIwMDEpCitdKTsKK2NvbnN0IHNhbnRhQ3J1eiA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSg3LCAnbG9jYXRpb24nLCAnc2FudGEgY3J1eicsIFsKKyAgbmV3IFByb3BlcnR5KCdzdGFydFRpbWUnLCAyMDAxKSwKKyAgbmV3IFByb3BlcnR5KCdlbmRUaW1lJywgMjAwNCkKK10pOworY29uc3QgYnJ1c3NlbHMgPSBuZXcgVmVydGV4UHJvcGVydHkoOCwgJ2xvY2F0aW9uJywgJ2JydXNzZWxzJywgWworICBuZXcgUHJvcGVydHkoJ3N0YXJ0VGltZScsIDIwMDQpLAorICBuZXcgUHJvcGVydHkoJ2VuZFRpbWUnLCAyMDA1KQorXSk7Citjb25zdCBzYW50YUZlID0gbmV3IFZlcnRleFByb3BlcnR5KDksICdsb2NhdGlvbicsICdzYW50YSBmZScsIFsKKyAgbmV3IFByb3BlcnR5KCdzdGFydFRpbWUnLCAyMDA1KQorXSk7Cittb2RlbFsndHJhdmVyc2FsLXZlcnRleCddID0gbmV3IFZlcnRleCgxLCAncGVyc29uJywgW25hbWUsIHNhbkRpZWdvLCBzYW50YUNydXosIGJydXNzZWxzLCBzYW50YUZlXSk7CisKKy8vIERhdGVUaW1lIHZhbHVlcyAoaW52YWxpZCBkYXRlcyBmb3Igb3ZlcmZsb3cgY2FzZXMpCittb2RlbFsnbWF4LW9mZnNldGRhdGV0aW1lJ10gPSBuZXcgRGF0ZShOYU4pOyAgLy8gWWVhciA5OTk5OTk5OTkgb3ZlcmZsb3dzIEpTIERhdGUKK21vZGVsWydtaW4tb2Zmc2V0ZGF0ZXRpbWUnXSA9IG5ldyBEYXRlKE5hTik7ICAvLyBZZWFyIC05OTk5OTk5OTkgb3ZlcmZsb3dzIEpTIERhdGUKKworZXhwb3J0IHsgbW9kZWwgfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JhcGhiaW5hcnkvbnVsbC1oYW5kbGluZy10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L251bGwtaGFuZGxpbmctdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzlmOGJmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L251bGwtaGFuZGxpbmctdGVzdC5qcwpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKgorICogTnVsbCBhbmQgdW5kZWZpbmVkIGhhbmRsaW5nIHRlc3RzIGZvciBHcmFwaEJpbmFyeVY0LiBWYWxpZGF0ZXMKKyAqIGZ1bGx5LXF1YWxpZmllZCBhbmQgYmFyZSBudWxsIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGZvcgorICogZXZlcnkgc3VwcG9ydGVkIHR5cGUuCisgKi8KKworaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnY2hhaSc7CitpbXBvcnQgaW9jIGZyb20gJy4uLy4uLy4uL2xpYi9zdHJ1Y3R1cmUvaW8vYmluYXJ5L0dyYXBoQmluYXJ5LmpzJzsKK2NvbnN0IHsgYW55U2VyaWFsaXplciwgRGF0YVR5cGUgfSA9IGlvYzsKKworZGVzY3JpYmUoJ0dyYXBoQmluYXJ5IHY0IE51bGwgSGFuZGxpbmcgVGVzdHMnLCAoKSA9PiB7CisgIGRlc2NyaWJlKCdhbnlTZXJpYWxpemVyIGxldmVsJywgKCkgPT4geworICAgIGl0KCdzZXJpYWxpemUgbnVsbCcsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG51bGwpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQsIEJ1ZmZlci5mcm9tKFsweEZFLCAweDAxXSkpOworICAgIH0pOworCisgICAgaXQoJ3NlcmlhbGl6ZSB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh1bmRlZmluZWQpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQsIEJ1ZmZlci5mcm9tKFsweEZFLCAweDAxXSkpOworICAgIH0pOworCisgICAgaXQoJ2Rlc2VyaWFsaXplIHVuc3BlY2lmaWVkIG51bGwnLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFsweEZFLCAweDAxXSkpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC52LCBudWxsKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuLCAyKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ3Blci10eXBlIGZ1bGx5LXF1YWxpZmllZCBudWxsJywgKCkgPT4geworICAgIGNvbnN0IHR5cGVzID0gWworICAgICAgeyBuYW1lOiAnSU5UJywgY29kZTogRGF0YVR5cGUuSU5ULCBzZXJpYWxpemVyOiAnaW50U2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ0xPTkcnLCBjb2RlOiBEYXRhVHlwZS5MT05HLCBzZXJpYWxpemVyOiAnbG9uZ1NlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdTVFJJTkcnLCBjb2RlOiBEYXRhVHlwZS5TVFJJTkcsIHNlcmlhbGl6ZXI6ICdzdHJpbmdTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnRE9VQkxFJywgY29kZTogRGF0YVR5cGUuRE9VQkxFLCBzZXJpYWxpemVyOiAnZG91YmxlU2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ0ZMT0FUJywgY29kZTogRGF0YVR5cGUuRkxPQVQsIHNlcmlhbGl6ZXI6ICdmbG9hdFNlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdCT09MRUFOJywgY29kZTogRGF0YVR5cGUuQk9PTEVBTiwgc2VyaWFsaXplcjogJ2Jvb2xlYW5TZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnU0hPUlQnLCBjb2RlOiBEYXRhVHlwZS5TSE9SVCwgc2VyaWFsaXplcjogJ3Nob3J0U2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ0JZVEUnLCBjb2RlOiBEYXRhVHlwZS5CWVRFLCBzZXJpYWxpemVyOiAnYnl0ZVNlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdVVUlEJywgY29kZTogRGF0YVR5cGUuVVVJRCwgc2VyaWFsaXplcjogJ3V1aWRTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnQklHSU5URUdFUicsIGNvZGU6IERhdGFUeXBlLkJJR0lOVEVHRVIsIHNlcmlhbGl6ZXI6ICdiaWdJbnRlZ2VyU2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ0RBVEVUSU1FJywgY29kZTogRGF0YVR5cGUuREFURVRJTUUsIHNlcmlhbGl6ZXI6ICdkYXRlVGltZVNlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdCSU5BUlknLCBjb2RlOiBEYXRhVHlwZS5CSU5BUlksIHNlcmlhbGl6ZXI6ICdiaW5hcnlTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnTElTVCcsIGNvZGU6IERhdGFUeXBlLkxJU1QsIHNlcmlhbGl6ZXI6ICdsaXN0U2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ1NFVCcsIGNvZGU6IERhdGFUeXBlLlNFVCwgc2VyaWFsaXplcjogJ3NldFNlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdNQVAnLCBjb2RlOiBEYXRhVHlwZS5NQVAsIHNlcmlhbGl6ZXI6ICdtYXBTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnVkVSVEVYJywgY29kZTogRGF0YVR5cGUuVkVSVEVYLCBzZXJpYWxpemVyOiAndmVydGV4U2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ0VER0UnLCBjb2RlOiBEYXRhVHlwZS5FREdFLCBzZXJpYWxpemVyOiAnZWRnZVNlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdQUk9QRVJUWScsIGNvZGU6IERhdGFUeXBlLlBST1BFUlRZLCBzZXJpYWxpemVyOiAncHJvcGVydHlTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnVkVSVEVYUFJPUEVSVFknLCBjb2RlOiBEYXRhVHlwZS5WRVJURVhQUk9QRVJUWSwgc2VyaWFsaXplcjogJ3ZlcnRleFByb3BlcnR5U2VyaWFsaXplcicgfSwKKyAgICAgIHsgbmFtZTogJ1BBVEgnLCBjb2RlOiBEYXRhVHlwZS5QQVRILCBzZXJpYWxpemVyOiAncGF0aFNlcmlhbGl6ZXInIH0KKyAgICBdOworCisgICAgdHlwZXMuZm9yRWFjaCgoeyBuYW1lLCBjb2RlLCBzZXJpYWxpemVyIH0pID0+IHsKKyAgICAgIGRlc2NyaWJlKG5hbWUsICgpID0+IHsKKyAgICAgICAgaXQoJ3NlcmlhbGl6ZSBudWxsIGZ1bGx5LXF1YWxpZmllZCcsICgpID0+IHsKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBpb2Nbc2VyaWFsaXplcl0uc2VyaWFsaXplKG51bGwsIHRydWUpOworICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LCBCdWZmZXIuZnJvbShbY29kZSwgMHgwMV0pKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3NlcmlhbGl6ZSB1bmRlZmluZWQgZnVsbHktcXVhbGlmaWVkJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlvY1tzZXJpYWxpemVyXS5zZXJpYWxpemUodW5kZWZpbmVkLCB0cnVlKTsKKyAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdCwgQnVmZmVyLmZyb20oW2NvZGUsIDB4MDFdKSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdkZXNlcmlhbGl6ZSBmdWxseS1xdWFsaWZpZWQgbnVsbCcsICgpID0+IHsKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBpb2Nbc2VyaWFsaXplcl0uZGVzZXJpYWxpemUoQnVmZmVyLmZyb20oW2NvZGUsIDB4MDFdKSwgdHJ1ZSk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC52LCBudWxsKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmxlbiwgMik7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvLyBFbnVtU2VyaWFsaXplciBoYXMgc3BlY2lhbCBudWxsIGhhbmRsaW5nIC0gaXQgZG9lc24ndCBzdXBwb3J0IG51bGwvdW5kZWZpbmVkIGRpcmVjdGx5CisgICAgZGVzY3JpYmUoJ0RJUkVDVElPTicsICgpID0+IHsKKyAgICAgIGl0KCdkZXNlcmlhbGl6ZSBmdWxseS1xdWFsaWZpZWQgbnVsbCcsICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gaW9jLmVudW1TZXJpYWxpemVyLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKFtEYXRhVHlwZS5ESVJFQ1RJT04sIDB4MDFdKSwgdHJ1ZSk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudiwgbnVsbCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuLCAyKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ1QnLCAoKSA9PiB7CisgICAgICBpdCgnZGVzZXJpYWxpemUgZnVsbHktcXVhbGlmaWVkIG51bGwnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlvYy5lbnVtU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbRGF0YVR5cGUuVCwgMHgwMV0pLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC52LCBudWxsKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW4sIDIpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnTUVSR0UnLCAoKSA9PiB7CisgICAgICBpdCgnZGVzZXJpYWxpemUgZnVsbHktcXVhbGlmaWVkIG51bGwnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlvYy5lbnVtU2VyaWFsaXplci5kZXNlcmlhbGl6ZShCdWZmZXIuZnJvbShbRGF0YVR5cGUuTUVSR0UsIDB4MDFdKSwgdHJ1ZSk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudiwgbnVsbCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuLCAyKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgncGVyLXR5cGUgYmFyZSBudWxsJywgKCkgPT4geworICAgIGNvbnN0IGJhcmVOdWxsVGVzdHMgPSBbCisgICAgICB7IG5hbWU6ICdJTlQnLCBzZXJpYWxpemVyOiAnaW50U2VyaWFsaXplcicsIGV4cGVjdGVkOiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pLCBkZWZhdWx0VmFsdWU6IDAgfSwKKyAgICAgIHsgbmFtZTogJ0xPTkcnLCBzZXJpYWxpemVyOiAnbG9uZ1NlcmlhbGl6ZXInLCBleHBlY3RlZDogQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSwgZGVmYXVsdFZhbHVlOiAwIH0sCisgICAgICB7IG5hbWU6ICdTVFJJTkcnLCBzZXJpYWxpemVyOiAnc3RyaW5nU2VyaWFsaXplcicsIGV4cGVjdGVkOiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pLCBkZWZhdWx0VmFsdWU6ICcnIH0sCisgICAgICB7IG5hbWU6ICdET1VCTEUnLCBzZXJpYWxpemVyOiAnZG91YmxlU2VyaWFsaXplcicsIGV4cGVjdGVkOiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pLCBkZWZhdWx0VmFsdWU6IDAuMCB9LAorICAgICAgeyBuYW1lOiAnRkxPQVQnLCBzZXJpYWxpemVyOiAnZmxvYXRTZXJpYWxpemVyJywgZXhwZWN0ZWQ6IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSksIGRlZmF1bHRWYWx1ZTogMC4wIH0sCisgICAgICB7IG5hbWU6ICdCT09MRUFOJywgc2VyaWFsaXplcjogJ2Jvb2xlYW5TZXJpYWxpemVyJywgZXhwZWN0ZWQ6IEJ1ZmZlci5mcm9tKFsweDAwXSksIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSwKKyAgICAgIHsgbmFtZTogJ1NIT1JUJywgc2VyaWFsaXplcjogJ3Nob3J0U2VyaWFsaXplcicsIGV4cGVjdGVkOiBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMF0pLCBkZWZhdWx0VmFsdWU6IDAgfSwKKyAgICAgIHsgbmFtZTogJ0JZVEUnLCBzZXJpYWxpemVyOiAnYnl0ZVNlcmlhbGl6ZXInLCBleHBlY3RlZDogQnVmZmVyLmZyb20oWzB4MDBdKSwgZGVmYXVsdFZhbHVlOiAwIH0sCisgICAgICB7IG5hbWU6ICdVVUlEJywgc2VyaWFsaXplcjogJ3V1aWRTZXJpYWxpemVyJywgZXhwZWN0ZWQ6IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSksIGRlZmF1bHRWYWx1ZTogJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCcgfSwKKyAgICAgIHsgbmFtZTogJ0JJR0lOVEVHRVInLCBzZXJpYWxpemVyOiAnYmlnSW50ZWdlclNlcmlhbGl6ZXInLCBleHBlY3RlZDogQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDBdKSwgZGVmYXVsdFZhbHVlOiBCaWdJbnQoMCkgfSwKKyAgICAgIHsgbmFtZTogJ0RBVEVUSU1FJywgc2VyaWFsaXplcjogJ2RhdGVUaW1lU2VyaWFsaXplcicsIGV4cGVjdGVkOiBCdWZmZXIuYWxsb2MoMTgpLCBkZWZhdWx0VmFsdWU6IG51bGwgfSwKKyAgICAgIHsgbmFtZTogJ0JJTkFSWScsIHNlcmlhbGl6ZXI6ICdiaW5hcnlTZXJpYWxpemVyJywgZXhwZWN0ZWQ6IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSksIGRlZmF1bHRWYWx1ZTogQnVmZmVyLmFsbG9jKDApIH0KKyAgICBdOworCisgICAgYmFyZU51bGxUZXN0cy5mb3JFYWNoKCh7IG5hbWUsIHNlcmlhbGl6ZXIsIGV4cGVjdGVkLCBkZWZhdWx0VmFsdWUgfSkgPT4geworICAgICAgZGVzY3JpYmUobmFtZSwgKCkgPT4geworICAgICAgICBpdCgnc2VyaWFsaXplIG51bGwgYmFyZScsICgpID0+IHsKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBpb2Nbc2VyaWFsaXplcl0uc2VyaWFsaXplKG51bGwsIGZhbHNlKTsKKyAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2VyaWFsaXplIHVuZGVmaW5lZCBiYXJlJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlvY1tzZXJpYWxpemVyXS5zZXJpYWxpemUodW5kZWZpbmVkLCBmYWxzZSk7CisgICAgICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2Rlc2VyaWFsaXplIGJhcmUgbnVsbCcsICgpID0+IHsKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBpb2Nbc2VyaWFsaXplcl0uZGVzZXJpYWxpemUoZXhwZWN0ZWQsIGZhbHNlKTsKKyAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlID09PSBudWxsKSB7CisgICAgICAgICAgICAvLyBEQVRFVElNRTogMTggemVybyBieXRlcyBwcm9kdWNlIGEgdmFsaWQgRGF0ZSBvYmplY3QgYnV0IHdpdGggaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZQorICAgICAgICAgICAgYXNzZXJ0Lmluc3RhbmNlT2YocmVzdWx0LnYsIERhdGUpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gJ2JpZ2ludCcpIHsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudiwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkZWZhdWx0VmFsdWUpKSB7CisgICAgICAgICAgICBhc3NlcnQuaXNUcnVlKEJ1ZmZlci5pc0J1ZmZlcihyZXN1bHQudikpOworICAgICAgICAgICAgYXNzZXJ0LmlzVHJ1ZShyZXN1bHQudi5lcXVhbHMoZGVmYXVsdFZhbHVlKSk7CisgICAgICAgICAgfSBlbHNlIGlmIChkZWZhdWx0VmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7CisgICAgICAgICAgICBhc3NlcnQuaW5zdGFuY2VPZihyZXN1bHQudiwgRGF0ZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudiwgZGVmYXVsdFZhbHVlKTsKKyAgICAgICAgICB9CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW4sIGV4cGVjdGVkLmxlbmd0aCk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICAvLyBDb2xsZWN0aW9uIHR5cGVzIGhhdmUgZGlmZmVyZW50IGJhcmUgbnVsbCBiZWhhdmlvcgorICAgIGNvbnN0IGNvbGxlY3Rpb25UZXN0cyA9IFsKKyAgICAgIHsgbmFtZTogJ0xJU1QnLCBzZXJpYWxpemVyOiAnbGlzdFNlcmlhbGl6ZXInLCBleHBlY3RlZDogQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSwgZGVmYXVsdFZhbHVlOiBbXSB9LAorICAgICAgeyBuYW1lOiAnU0VUJywgc2VyaWFsaXplcjogJ3NldFNlcmlhbGl6ZXInLCBleHBlY3RlZDogQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKSwgZGVmYXVsdFZhbHVlOiBuZXcgU2V0KCkgfSwKKyAgICAgIHsgbmFtZTogJ01BUCcsIHNlcmlhbGl6ZXI6ICdtYXBTZXJpYWxpemVyJywgZXhwZWN0ZWQ6IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSksIGRlZmF1bHRWYWx1ZTogbmV3IE1hcCgpIH0KKyAgICBdOworCisgICAgY29sbGVjdGlvblRlc3RzLmZvckVhY2goKHsgbmFtZSwgc2VyaWFsaXplciwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSB9KSA9PiB7CisgICAgICBkZXNjcmliZShuYW1lLCAoKSA9PiB7CisgICAgICAgIGl0KCdzZXJpYWxpemUgbnVsbCBiYXJlJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlvY1tzZXJpYWxpemVyXS5zZXJpYWxpemUobnVsbCwgZmFsc2UpOworICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocmVzdWx0LCBleHBlY3RlZCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzZXJpYWxpemUgdW5kZWZpbmVkIGJhcmUnLCAoKSA9PiB7CisgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaW9jW3NlcmlhbGl6ZXJdLnNlcmlhbGl6ZSh1bmRlZmluZWQsIGZhbHNlKTsKKyAgICAgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnZGVzZXJpYWxpemUgYmFyZSBudWxsJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGlvY1tzZXJpYWxpemVyXS5kZXNlcmlhbGl6ZShleHBlY3RlZCwgZmFsc2UpOworICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWUgaW5zdGFuY2VvZiBTZXQpIHsKKyAgICAgICAgICAgIGFzc2VydC5pbnN0YW5jZU9mKHJlc3VsdC52LCBTZXQpOworICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC52LnNpemUsIDApOworICAgICAgICAgIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlIGluc3RhbmNlb2YgTWFwKSB7CisgICAgICAgICAgICBhc3NlcnQuaW5zdGFuY2VPZihyZXN1bHQudiwgTWFwKTsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQudi5zaXplLCAwKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSkgeworICAgICAgICAgICAgYXNzZXJ0LmlzQXJyYXkocmVzdWx0LnYpOworICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC52Lmxlbmd0aCwgMCk7CisgICAgICAgICAgfQorICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuLCBleHBlY3RlZC5sZW5ndGgpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgLy8gR3JhcGggdHlwZXMgc2VyaWFsaXplIHRvIGVtcHR5IHN0cnVjdHVyZXMKKyAgICBjb25zdCBncmFwaFRlc3RzID0gWworICAgICAgeyBuYW1lOiAnVkVSVEVYJywgc2VyaWFsaXplcjogJ3ZlcnRleFNlcmlhbGl6ZXInIH0sCisgICAgICB7IG5hbWU6ICdFREdFJywgc2VyaWFsaXplcjogJ2VkZ2VTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnUFJPUEVSVFknLCBzZXJpYWxpemVyOiAncHJvcGVydHlTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnVkVSVEVYUFJPUEVSVFknLCBzZXJpYWxpemVyOiAndmVydGV4UHJvcGVydHlTZXJpYWxpemVyJyB9LAorICAgICAgeyBuYW1lOiAnUEFUSCcsIHNlcmlhbGl6ZXI6ICdwYXRoU2VyaWFsaXplcicgfQorICAgIF07CisKKyAgICBncmFwaFRlc3RzLmZvckVhY2goKHsgbmFtZSwgc2VyaWFsaXplciB9KSA9PiB7CisgICAgICBkZXNjcmliZShuYW1lLCAoKSA9PiB7CisgICAgICAgIGl0KCdzZXJpYWxpemUgbnVsbCBiYXJlIHByb2R1Y2VzIG5vbi1lbXB0eSBieXRlcycsICgpID0+IHsKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBpb2Nbc2VyaWFsaXplcl0uc2VyaWFsaXplKG51bGwsIGZhbHNlKTsKKyAgICAgICAgICBhc3NlcnQuaXNUcnVlKHJlc3VsdC5sZW5ndGggPiAwKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3NlcmlhbGl6ZSB1bmRlZmluZWQgYmFyZSBwcm9kdWNlcyBub24tZW1wdHkgYnl0ZXMnLCAoKSA9PiB7CisgICAgICAgICAgY29uc3QgcmVzdWx0ID0gaW9jW3NlcmlhbGl6ZXJdLnNlcmlhbGl6ZSh1bmRlZmluZWQsIGZhbHNlKTsKKyAgICAgICAgICBhc3NlcnQuaXNUcnVlKHJlc3VsdC5sZW5ndGggPiAwKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2Rlc2VyaWFsaXplIGJhcmUgbnVsbCBwcm9kdWNlcyBkZWZhdWx0IG9iamVjdCcsICgpID0+IHsKKyAgICAgICAgICBjb25zdCBudWxsQnl0ZXMgPSBpb2Nbc2VyaWFsaXplcl0uc2VyaWFsaXplKG51bGwsIGZhbHNlKTsKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBpb2Nbc2VyaWFsaXplcl0uZGVzZXJpYWxpemUobnVsbEJ5dGVzLCBmYWxzZSk7CisgICAgICAgICAgYXNzZXJ0LmlzTm90TnVsbChyZXN1bHQudik7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW4sIG51bGxCeXRlcy5sZW5ndGgpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS90eXBlLWRldGVjdGlvbi10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyYXBoYmluYXJ5L3R5cGUtZGV0ZWN0aW9uLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY2Nzg0ZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9ncmFwaGJpbmFyeS90eXBlLWRldGVjdGlvbi10ZXN0LmpzCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBUeXBlIGRldGVjdGlvbiBhbmQgZGlzcGF0Y2ggdGVzdHMgZm9yIEdyYXBoQmluYXJ5VjQuIFZlcmlmaWVzIHRoYXQKKyAqIGFueVNlcmlhbGl6ZXIgcm91dGVzIGVhY2ggSlMgdHlwZSB0byB0aGUgY29ycmVjdCBzZXJpYWxpemVyIHR5cGUgY29kZSwKKyAqIGNhbkJlVXNlZEZvciByZWplY3RzIHdyb25nIHR5cGVzLCBhbmQgcm91bmQtdHJpcCBleHRyYXMgbm90IGNvdmVyZWQKKyAqIGJ5IC5nYmluIHJlZmVyZW5jZSBmaWxlcy4KKyAqLworCitpbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdjaGFpJzsKK2ltcG9ydCB7IFZlcnRleCwgRWRnZSwgUHJvcGVydHksIFZlcnRleFByb3BlcnR5LCBQYXRoIH0gZnJvbSAnLi4vLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaC5qcyc7CitpbXBvcnQgeyBkaXJlY3Rpb24sIHQsIG1lcmdlIH0gZnJvbSAnLi4vLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLmpzJzsKK2ltcG9ydCBpb2MsIHsgRGF0YVR5cGUgfSBmcm9tICcuLi8uLi8uLi9saWIvc3RydWN0dXJlL2lvL2JpbmFyeS9HcmFwaEJpbmFyeS5qcyc7CisKK2NvbnN0IHsgYW55U2VyaWFsaXplciB9ID0gaW9jOworCitkZXNjcmliZSgnVHlwZSBEZXRlY3Rpb24gVGVzdHMnLCAoKSA9PiB7CisgIGRlc2NyaWJlKCdOdW1iZXIgcm91dGluZyAoTnVtYmVyU2VyaWFsaXphdGlvblN0cmF0ZWd5KScsICgpID0+IHsKKyAgICBpdCgnSW50ZWdlciBpbiBJbnQzMiByYW5nZSDihpIgSU5UICgweDAxKScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKDQyKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLklOVCk7CisgICAgfSk7CisKKyAgICBpdCgnSW50ZWdlciBhdCBJbnQzMiBib3VuZGFyaWVzIOKGkiBJTlQgKDB4MDEpJywgKCkgPT4geworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKDIxNDc0ODM2NDcpWzBdLCBEYXRhVHlwZS5JTlQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKC0yMTQ3NDgzNjQ4KVswXSwgRGF0YVR5cGUuSU5UKTsKKyAgICB9KTsKKworICAgIGl0KCdJbnRlZ2VyIGJleW9uZCBJbnQzMiBidXQgaW4gSW50NjQg4oaSIExPTkcgKDB4MDIpJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUoMjE0NzQ4MzY0OCk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5MT05HKTsKKyAgICB9KTsKKworICAgIGl0KCdOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiDihpIgTE9ORyAoMHgwMiknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5MT05HKTsKKyAgICB9KTsKKworICAgIGl0KCdOdW1iZXIuTUlOX1NBRkVfSU5URUdFUiDihpIgTE9ORyAoMHgwMiknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShOdW1iZXIuTUlOX1NBRkVfSU5URUdFUik7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5MT05HKTsKKyAgICB9KTsKKworICAgIGl0KCdOb24taW50ZWdlciDihpIgRE9VQkxFICgweDA3KScsICgpID0+IHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgzLjE0KVswXSwgRGF0YVR5cGUuRE9VQkxFKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgwLjEpWzBdLCBEYXRhVHlwZS5ET1VCTEUpOworICAgIH0pOworCisgICAgaXQoJ05hTiDihpIgRE9VQkxFICgweDA3KScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKE5hTik7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5ET1VCTEUpOworICAgIH0pOworCisgICAgaXQoJ8KxSW5maW5pdHkg4oaSIERPVUJMRSAoMHgwNyknLCAoKSA9PiB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW55U2VyaWFsaXplci5zZXJpYWxpemUoSW5maW5pdHkpWzBdLCBEYXRhVHlwZS5ET1VCTEUpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKC1JbmZpbml0eSlbMF0sIERhdGFUeXBlLkRPVUJMRSk7CisgICAgfSk7CisKKyAgICBpdCgnLTAg4oaSIERPVUJMRSAoMHgwNykgcHJlc2VydmluZyBzaWduJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUoLTApOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuRE9VQkxFKTsKKyAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTsKKyAgICAgIGFzc2VydC5pc1RydWUoT2JqZWN0LmlzKGRlc2VyaWFsaXplZC52LCAtMCkpOworICAgIH0pOworCisgICAgaXQoJ0JpZ0ludCB3aXRoaW4gSW50NjQgcmFuZ2Ug4oaSIEJJR0lOVEVHRVIgKDB4MjMpJywgKCkgPT4geworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKDEyM24pWzBdLCBEYXRhVHlwZS5CSUdJTlRFR0VSKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgtNDU2bilbMF0sIERhdGFUeXBlLkJJR0lOVEVHRVIpOworICAgIH0pOworCisgICAgaXQoJ0JpZ0ludCBhdCBJbnQ2NCBib3VuZGFyaWVzIOKGkiBCSUdJTlRFR0VSICgweDIzKScsICgpID0+IHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgybioqNjNuIC0gMW4pWzBdLCBEYXRhVHlwZS5CSUdJTlRFR0VSKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSgtKDJuKio2M24pKVswXSwgRGF0YVR5cGUuQklHSU5URUdFUik7CisgICAgfSk7CisKKyAgICBpdCgnQmlnSW50IGJleW9uZCBJbnQ2NCDihpIgQklHSU5URUdFUiAoMHgyMyknLCAoKSA9PiB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW55U2VyaWFsaXplci5zZXJpYWxpemUoMm4qKjYzbilbMF0sIERhdGFUeXBlLkJJR0lOVEVHRVIpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKC0oMm4qKjYzbikgLSAxbilbMF0sIERhdGFUeXBlLkJJR0lOVEVHRVIpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnVHlwZSBkaXNwYXRjaCcsICgpID0+IHsKKyAgICBpdCgnYm9vbGVhbiDihpIgQk9PTEVBTiAoMHgyNyknLCAoKSA9PiB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYW55U2VyaWFsaXplci5zZXJpYWxpemUodHJ1ZSlbMF0sIERhdGFUeXBlLkJPT0xFQU4pOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGZhbHNlKVswXSwgRGF0YVR5cGUuQk9PTEVBTik7CisgICAgfSk7CisKKyAgICBpdCgnc3RyaW5nIOKGkiBTVFJJTkcgKDB4MDMpJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUoJ2hlbGxvJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5TVFJJTkcpOworICAgIH0pOworCisgICAgaXQoJ0RhdGUg4oaSIERBVEVUSU1FICgweDA0KScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBEYXRlKCkpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuREFURVRJTUUpOworICAgIH0pOworCisgICAgaXQoJ0FycmF5IOKGkiBMSVNUICgweDA5KScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKFsxLCAyLCAzXSk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5MSVNUKTsKKyAgICB9KTsKKworICAgIGl0KCdTZXQg4oaSIFNFVCAoMHgwYiknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgU2V0KFsxLCAyLCAzXSkpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuU0VUKTsKKyAgICB9KTsKKworICAgIGl0KCdNYXAg4oaSIE1BUCAoMHgwYSknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgTWFwKFtbJ2EnLCAxXV0pKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLk1BUCk7CisgICAgfSk7CisKKyAgICBpdCgnUGxhaW4gb2JqZWN0IOKGkiBNQVAgKDB4MGEpJywgKCkgPT4geworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUoe30pOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuTUFQKTsKKyAgICB9KTsKKworICAgIGl0KCdCdWZmZXIg4oaSIEJJTkFSWSAoMHgyNSknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShCdWZmZXIuZnJvbSgndGVzdCcpKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLkJJTkFSWSk7CisgICAgfSk7CisKKyAgICBpdCgnbnVsbCDihpIgVU5TUEVDSUZJRURfTlVMTCAoMHhmZSknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZShudWxsKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLlVOU1BFQ0lGSUVEX05VTEwpOworICAgIH0pOworCisgICAgaXQoJ3VuZGVmaW5lZCDihpIgVU5TUEVDSUZJRURfTlVMTCAoMHhmZSknLCAoKSA9PiB7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh1bmRlZmluZWQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuVU5TUEVDSUZJRURfTlVMTCk7CisgICAgfSk7CisKKyAgICBpdCgnVmVydGV4IOKGkiBWRVJURVggKDB4MTEpJywgKCkgPT4geworICAgICAgY29uc3QgdmVydGV4ID0gbmV3IFZlcnRleCgxLCAncGVyc29uJyk7CisgICAgICBjb25zdCByZXN1bHQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2ZXJ0ZXgpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuVkVSVEVYKTsKKyAgICB9KTsKKworICAgIGl0KCdFZGdlIOKGkiBFREdFICgweDBkKScsICgpID0+IHsKKyAgICAgIGNvbnN0IGVkZ2UgPSBuZXcgRWRnZSgxLCBuZXcgVmVydGV4KDEsICdwZXJzb24nKSwgJ2tub3dzJywgbmV3IFZlcnRleCgyLCAncGVyc29uJykpOworICAgICAgY29uc3QgcmVzdWx0ID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUoZWRnZSk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0WzBdLCBEYXRhVHlwZS5FREdFKTsKKyAgICB9KTsKKworICAgIGl0KCdQcm9wZXJ0eSDihpIgUFJPUEVSVFkgKDB4MGYpJywgKCkgPT4geworICAgICAgY29uc3QgcHJvcGVydHkgPSBuZXcgUHJvcGVydHkoJ25hbWUnLCAnbWFya28nKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHByb3BlcnR5KTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLlBST1BFUlRZKTsKKyAgICB9KTsKKworICAgIGl0KCdWZXJ0ZXhQcm9wZXJ0eSDihpIgVkVSVEVYUFJPUEVSVFkgKDB4MTIpJywgKCkgPT4geworICAgICAgY29uc3QgdnAgPSBuZXcgVmVydGV4UHJvcGVydHkoMSwgJ25hbWUnLCAnbWFya28nKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHZwKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLlZFUlRFWFBST1BFUlRZKTsKKyAgICB9KTsKKworICAgIGl0KCdQYXRoIOKGkiBQQVRIICgweDBlKScsICgpID0+IHsKKyAgICAgIGNvbnN0IHBhdGggPSBuZXcgUGF0aChbbmV3IFNldCgpXSwgWzFdKTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHBhdGgpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuUEFUSCk7CisgICAgfSk7CisKKyAgICBpdCgnZGlyZWN0aW9uLm91dCDihpIgRElSRUNUSU9OICgweDE4KScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKGRpcmVjdGlvbi5vdXQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuRElSRUNUSU9OKTsKKyAgICB9KTsKKworICAgIGl0KCd0LmlkIOKGkiBUICgweDIwKScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHQuaWQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdFswXSwgRGF0YVR5cGUuVCk7CisgICAgfSk7CisKKyAgICBpdCgnbWVyZ2Uub25DcmVhdGUg4oaSIE1FUkdFICgweDJlKScsICgpID0+IHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKG1lcmdlLm9uQ3JlYXRlKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHRbMF0sIERhdGFUeXBlLk1FUkdFKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ2NhbkJlVXNlZEZvciBuZWdhdGl2ZSBjYXNlcycsICgpID0+IHsKKyAgICBpdCgnaW50U2VyaWFsaXplciByZWplY3RzIG5vbi1udW1iZXJzJywgKCkgPT4geworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmludFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuaW50U2VyaWFsaXplci5jYW5CZVVzZWRGb3IodHJ1ZSkpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmludFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKFtdKSk7CisgICAgfSk7CisKKyAgICBpdCgnc3RyaW5nU2VyaWFsaXplciByZWplY3RzIG5vbi1zdHJpbmdzJywgKCkgPT4geworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLnN0cmluZ1NlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKDQyKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2Muc3RyaW5nU2VyaWFsaXplci5jYW5CZVVzZWRGb3IodHJ1ZSkpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLnN0cmluZ1NlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKFtdKSk7CisgICAgfSk7CisKKyAgICBpdCgnYm9vbGVhblNlcmlhbGl6ZXIgcmVqZWN0cyBub24tYm9vbGVhbnMnLCAoKSA9PiB7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuYm9vbGVhblNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKDQyKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuYm9vbGVhblNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuYm9vbGVhblNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKFtdKSk7CisgICAgfSk7CisKKyAgICBpdCgndmVydGV4U2VyaWFsaXplciByZWplY3RzIG5vbi12ZXJ0aWNlcycsICgpID0+IHsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy52ZXJ0ZXhTZXJpYWxpemVyLmNhbkJlVXNlZEZvcihuZXcgRWRnZSgxLCBuZXcgVmVydGV4KDEsICdwJyksICdrbm93cycsIG5ldyBWZXJ0ZXgoMiwgJ3AnKSkpKTsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy52ZXJ0ZXhTZXJpYWxpemVyLmNhbkJlVXNlZEZvcignc3RyaW5nJykpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLnZlcnRleFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKDQyKSk7CisgICAgfSk7CisKKyAgICBpdCgnZWRnZVNlcmlhbGl6ZXIgcmVqZWN0cyBub24tZWRnZXMnLCAoKSA9PiB7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuZWRnZVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKG5ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicpKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuZWRnZVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuZWRnZVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKDQyKSk7CisgICAgfSk7CisKKyAgICBpdCgnc2V0U2VyaWFsaXplciByZWplY3RzIG5vbi1zZXRzJywgKCkgPT4geworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLnNldFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKFtdKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2Muc2V0U2VyaWFsaXplci5jYW5CZVVzZWRGb3Ioe30pKTsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy5zZXRTZXJpYWxpemVyLmNhbkJlVXNlZEZvcignc3RyaW5nJykpOworICAgIH0pOworCisgICAgaXQoJ2xpc3RTZXJpYWxpemVyIHJlamVjdHMgbm9uLWFycmF5cycsICgpID0+IHsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy5saXN0U2VyaWFsaXplci5jYW5CZVVzZWRGb3IobmV3IFNldCgpKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MubGlzdFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKHt9KSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MubGlzdFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgfSk7CisKKyAgICBpdCgnZGF0ZVRpbWVTZXJpYWxpemVyIHJlamVjdHMgbm9uLWRhdGVzJywgKCkgPT4geworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmRhdGVUaW1lU2VyaWFsaXplci5jYW5CZVVzZWRGb3IoNDIpKTsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy5kYXRlVGltZVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuZGF0ZVRpbWVTZXJpYWxpemVyLmNhbkJlVXNlZEZvcihbXSkpOworICAgIH0pOworCisgICAgaXQoJ21hcFNlcmlhbGl6ZXIgcmVqZWN0cyBub24tbWFwcy9ub24tb2JqZWN0cycsICgpID0+IHsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy5tYXBTZXJpYWxpemVyLmNhbkJlVXNlZEZvcig0MikpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLm1hcFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MubWFwU2VyaWFsaXplci5jYW5CZVVzZWRGb3IoW10pKTsKKyAgICB9KTsKKworICAgIGl0KCdiaW5hcnlTZXJpYWxpemVyIHJlamVjdHMgbm9uLWJ1ZmZlcnMnLCAoKSA9PiB7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MuYmluYXJ5U2VyaWFsaXplci5jYW5CZVVzZWRGb3IoJ3N0cmluZycpKTsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy5iaW5hcnlTZXJpYWxpemVyLmNhbkJlVXNlZEZvcig0MikpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmJpbmFyeVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKFtdKSk7CisgICAgfSk7CisKKyAgICBpdCgncGF0aFNlcmlhbGl6ZXIgcmVqZWN0cyBub24tcGF0aHMnLCAoKSA9PiB7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MucGF0aFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKG5ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicpKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MucGF0aFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MucGF0aFNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKDQyKSk7CisgICAgfSk7CisKKyAgICBpdCgncHJvcGVydHlTZXJpYWxpemVyIHJlamVjdHMgbm9uLXByb3BlcnRpZXMnLCAoKSA9PiB7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MucHJvcGVydHlTZXJpYWxpemVyLmNhbkJlVXNlZEZvcihuZXcgVmVydGV4KDEsICdwZXJzb24nKSkpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLnByb3BlcnR5U2VyaWFsaXplci5jYW5CZVVzZWRGb3IoJ3N0cmluZycpKTsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy5wcm9wZXJ0eVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKDQyKSk7CisgICAgfSk7CisKKyAgICBpdCgndmVydGV4UHJvcGVydHlTZXJpYWxpemVyIHJlamVjdHMgbm9uLXZlcnRleC1wcm9wZXJ0aWVzJywgKCkgPT4geworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLnZlcnRleFByb3BlcnR5U2VyaWFsaXplci5jYW5CZVVzZWRGb3IobmV3IFZlcnRleCgxLCAncGVyc29uJykpKTsKKyAgICAgIGFzc2VydC5pc0ZhbHNlKGlvYy52ZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIuY2FuQmVVc2VkRm9yKCdzdHJpbmcnKSk7CisgICAgICBhc3NlcnQuaXNGYWxzZShpb2MudmVydGV4UHJvcGVydHlTZXJpYWxpemVyLmNhbkJlVXNlZEZvcig0MikpOworICAgIH0pOworCisgICAgaXQoJ2VudW1TZXJpYWxpemVyIHJlamVjdHMgbm9uLWVudW1zJywgKCkgPT4geworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmVudW1TZXJpYWxpemVyLmNhbkJlVXNlZEZvcignc3RyaW5nJykpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmVudW1TZXJpYWxpemVyLmNhbkJlVXNlZEZvcig0MikpOworICAgICAgYXNzZXJ0LmlzRmFsc2UoaW9jLmVudW1TZXJpYWxpemVyLmNhbkJlVXNlZEZvcihuZXcgVmVydGV4KDEsICdwZXJzb24nKSkpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnUm91bmQtdHJpcCBleHRyYXMnLCAoKSA9PiB7CisgICAgaXQoJ25lc3RlZCBjb2xsZWN0aW9ucycsICgpID0+IHsKKyAgICAgIGNvbnN0IHZhbHVlID0gWzEsIFsyLCAzXSwgbmV3IE1hcChbWydhJywgWzRdXV0pXTsKKyAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CisgICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQudiwgdmFsdWUpOworICAgIH0pOworCisgICAgaXQoJ2VtcHR5IGNvbnRhaW5lcnMnLCAoKSA9PiB7CisgICAgICBjb25zdCB2YWx1ZXMgPSBbW10sIG5ldyBTZXQoKSwgbmV3IE1hcCgpLCAnJ107CisgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7CisgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CisgICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoc2VyaWFsaXplZCk7CisgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnYsIHZhbHVlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoJ0pTLXNwZWNpZmljIGxhYmVsIGNvbnN0cnVjdGlvbiBzdXJ2aXZlcyByb3VuZC10cmlwJywgKCkgPT4geworICAgICAgY29uc3QgdmVydGV4ID0gbmV3IFZlcnRleCgxMjMsICdwZXJzb24nKTsKKyAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2ZXJ0ZXgpOworICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShzZXJpYWxpemVkKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQudi5sYWJlbCwgJ3BlcnNvbicpOworICAgIH0pOworCisgICAgaXQoJ1VuaWNvZGUgc3RyaW5ncycsICgpID0+IHsKKyAgICAgIGNvbnN0IHZhbHVlID0gJ/CfmoAgSGVsbG8g5LiW55WMJzsKKyAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CisgICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlc2VyaWFsaXplZC52LCB2YWx1ZSk7CisgICAgfSk7CisKKyAgICBpdCgnYm91bmRhcnkgaW50ZWdlcnMnLCAoKSA9PiB7CisgICAgICBjb25zdCB2YWx1ZXMgPSBbMCwgLTEsIDFdOworICAgICAgdmFsdWVzLmZvckVhY2godmFsdWUgPT4geworICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpOworICAgICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnYsIHZhbHVlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoJ05hTiByb3VuZC10cmlwJywgKCkgPT4geworICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKE5hTik7CisgICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpOworICAgICAgYXNzZXJ0LmlzVHJ1ZShOdW1iZXIuaXNOYU4oZGVzZXJpYWxpemVkLnYpKTsKKyAgICB9KTsKKworICAgIGl0KCdjb21wbGV4IG5lc3RlZCBzdHJ1Y3R1cmUnLCAoKSA9PiB7CisgICAgICBjb25zdCB2YWx1ZSA9IG5ldyBNYXAoWworICAgICAgICBbJ251bWJlcnMnLCBbMSwgMi41LCBCaWdJbnQoMTIzKV1dLAorICAgICAgICBbJ3NldHMnLCBuZXcgU2V0KFsnYScsICdiJ10pXSwKKyAgICAgICAgWydtYXAnLCBuZXcgTWFwKFtbMSwgJ29uZSddLCBbMiwgJ3R3byddXSldLAorICAgICAgICBbJ25lc3RlZCcsIG5ldyBNYXAoW1snaW5uZXInLCBbdHJ1ZSwgZmFsc2UsIG51bGxdXV0pXQorICAgICAgXSk7CisgICAgICBjb25zdCBzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUodmFsdWUpOworICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShzZXJpYWxpemVkKTsKKyAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnYsIHZhbHVlKTsKKyAgICB9KTsKKworICAgIGl0KCdtaXhlZCB0eXBlIGFycmF5JywgKCkgPT4geworICAgICAgY29uc3QgdmFsdWUgPSBbMSwgJ3N0cmluZycsIHRydWUsIG51bGwsIG5ldyBEYXRlKDApLCBCdWZmZXIuZnJvbSgndGVzdCcpXTsKKyAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CisgICAgICBjb25zdCBkZXNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLmRlc2VyaWFsaXplKHNlcmlhbGl6ZWQpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlc2VyaWFsaXplZC52Lmxlbmd0aCwgdmFsdWUubGVuZ3RoKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQudlswXSwgMSk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnZbMV0sICdzdHJpbmcnKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQudlsyXSwgdHJ1ZSk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnZbM10sIG51bGwpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQudls0XSwgbmV3IERhdGUoMCkpOworICAgICAgYXNzZXJ0LmlzVHJ1ZShCdWZmZXIuaXNCdWZmZXIoZGVzZXJpYWxpemVkLnZbNV0pKTsKKyAgICAgIGFzc2VydC5pc1RydWUoZGVzZXJpYWxpemVkLnZbNV0uZXF1YWxzKEJ1ZmZlci5mcm9tKCd0ZXN0JykpKTsKKyAgICB9KTsKKworICAgIGl0KCdncmFwaCBlbGVtZW50cyB3aXRoIHByb3BlcnRpZXMnLCAoKSA9PiB7CisgICAgICBjb25zdCB2ZXJ0ZXggPSBuZXcgVmVydGV4KDEsIFsncGVyc29uJ10sIFtuZXcgVmVydGV4UHJvcGVydHkoMSwgWyduYW1lJ10sICdtYXJrbycpXSk7CisgICAgICBjb25zdCBzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5zZXJpYWxpemUodmVydGV4KTsKKyAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoc2VyaWFsaXplZCk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnYuaWQsIDEpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlc2VyaWFsaXplZC52LmxhYmVsLCAncGVyc29uJyk7CisgICAgfSk7CisKKyAgICBpdCgncGF0aCB3aXRoIG11bHRpcGxlIGxhYmVscycsICgpID0+IHsKKyAgICAgIGNvbnN0IHBhdGggPSBuZXcgUGF0aChbbmV3IFNldChbJ2EnXSksIG5ldyBTZXQoWydiJywgJ2MnXSldLCBbMSwgMl0pOworICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHBhdGgpOworICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShzZXJpYWxpemVkKTsKKyAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZGVzZXJpYWxpemVkLnYubGFiZWxzLCBwYXRoLmxhYmVscyk7CisgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGRlc2VyaWFsaXplZC52Lm9iamVjdHMsIHBhdGgub2JqZWN0cyk7CisgICAgfSk7CisKKyAgICBpdCgnbGFyZ2UgbnVtYmVycycsICgpID0+IHsKKyAgICAgIGNvbnN0IHZhbHVlcyA9IFtOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsIDJuKioxMDBuXTsKKyAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHsKKyAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKTsKKyAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShzZXJpYWxpemVkKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlc2VyaWFsaXplZC52LCB2YWx1ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdzcGVjaWFsIGZsb2F0IHZhbHVlcycsICgpID0+IHsKKyAgICAgIGNvbnN0IHZhbHVlcyA9IFtJbmZpbml0eSwgLUluZmluaXR5XTsKKyAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHsKKyAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlKTsKKyAgICAgICAgY29uc3QgZGVzZXJpYWxpemVkID0gYW55U2VyaWFsaXplci5kZXNlcmlhbGl6ZShzZXJpYWxpemVkKTsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlc2VyaWFsaXplZC52LCB2YWx1ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdlbnVtIHZhbHVlcycsICgpID0+IHsKKyAgICAgIGNvbnN0IHZhbHVlcyA9IFtkaXJlY3Rpb24ub3V0LCBkaXJlY3Rpb24uaW4sIGRpcmVjdGlvbi5ib3RoLCB0LmlkLCB0LmtleSwgdC5sYWJlbCwgdC52YWx1ZSwgbWVyZ2Uub25DcmVhdGUsIG1lcmdlLm9uTWF0Y2gsIG1lcmdlLm91dFYsIG1lcmdlLmluVl07CisgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7CisgICAgICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSBhbnlTZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSk7CisgICAgICAgIGNvbnN0IGRlc2VyaWFsaXplZCA9IGFueVNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoc2VyaWFsaXplZCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNlcmlhbGl6ZWQudiwgdmFsdWUpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyZW1saW4tbGFuZy10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L2dyZW1saW4tbGFuZy10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMzU5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvZ3JlbWxpbi1sYW5nLXRlc3QuanMKQEAgLTAsMCArMSw0MTcgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnOworaW1wb3J0IHsgR3JhcGhUcmF2ZXJzYWxTb3VyY2UsIHN0YXRpY3MgYXMgX18sIENhcmRpbmFsaXR5VmFsdWUgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMnOworaW1wb3J0IHsgUCwgVGV4dFAsIHQgYXMgVCwgb3JkZXIgYXMgT3JkZXIsIHNjb3BlIGFzIFNjb3BlLCBjb2x1bW4gYXMgQ29sdW1uLAorICAgICAgICAgb3BlcmF0b3IgYXMgT3BlcmF0b3IsIHBvcCBhcyBQb3AsIGNhcmRpbmFsaXR5IGFzIENhcmRpbmFsaXR5LAorICAgICAgICAgd2l0aE9wdGlvbnMgYXMgV2l0aE9wdGlvbnMsIGRpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC5qcyc7CitpbXBvcnQgeyBSZWFkT25seVN0cmF0ZWd5LCBTdWJncmFwaFN0cmF0ZWd5LCBPcHRpb25zU3RyYXRlZ3ksCisgICAgICAgICBQYXJ0aXRpb25TdHJhdGVneSwgU2VlZFN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLXN0cmF0ZWd5LmpzJzsKK2ltcG9ydCB7IEdyYXBoLCBWZXJ0ZXggfSBmcm9tICcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoLmpzJzsKK2ltcG9ydCB7IFRyYXZlcnNhbFN0cmF0ZWdpZXMgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3kuanMnOworaW1wb3J0IHsgTG9uZyB9IGZyb20gJy4uLy4uL2xpYi91dGlscy5qcyc7CitpbXBvcnQgR3JlbWxpbkxhbmcgZnJvbSAnLi4vLi4vbGliL3Byb2Nlc3MvZ3JlbWxpbi1sYW5nLmpzJzsKKworY29uc3QgZyA9IG5ldyBHcmFwaFRyYXZlcnNhbFNvdXJjZShuZXcgR3JhcGgoKSwgbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKSk7CisKK2Rlc2NyaWJlKCdHcmVtbGluTGFuZycsIGZ1bmN0aW9uICgpIHsKKyAgZGVzY3JpYmUoJ0VuZC10by1lbmQgdGVzdHMnLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc3QgdGVzdHMgPSBbCisgICAgICAvLyAjMAorICAgICAgW2cuVigpLCAnZy5WKCknXSwKKyAgICAgIC8vICMxCisgICAgICBbZy5WKCcxJywnMicsJzMnLCc0JyksICJnLlYoJzEnLCcyJywnMycsJzQnKSJdLAorICAgICAgLy8gIzIKKyAgICAgIFtnLlYoJzMnKS52YWx1ZU1hcCh0cnVlKSwgImcuVignMycpLnZhbHVlTWFwKHRydWUpIl0sCisgICAgICAvLyAjMworICAgICAgW2cuVigpLmNvbnN0YW50KDUpLCAnZy5WKCkuY29uc3RhbnQoNSknXSwKKyAgICAgIC8vICM0CisgICAgICBbZy5WKCkuY29uc3RhbnQoMS41KSwgJ2cuVigpLmNvbnN0YW50KDEuNUQpJ10sCisgICAgICAvLyAjNQorICAgICAgW2cuVigpLmNvbnN0YW50KCdIZWxsbycpLCAiZy5WKCkuY29uc3RhbnQoJ0hlbGxvJykiXSwKKyAgICAgIC8vICM2CisgICAgICBbZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5saW1pdCg1KSwgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykubGltaXQoNSkiXSwKKyAgICAgIC8vICM3CisgICAgICBbZy5WKCkuaGFzTGFiZWwoUC53aXRoaW4oWydhJywnYicsJ2MnXSkpLCAiZy5WKCkuaGFzTGFiZWwod2l0aGluKFsnYScsJ2InLCdjJ10pKSJdLAorICAgICAgLy8gIzgKKyAgICAgIFtnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcsJ2NvbnRpbmVudCcpLm91dCgpLmxpbWl0KDUpLCAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnLCdjb250aW5lbnQnKS5vdXQoKS5saW1pdCg1KSJdLAorICAgICAgLy8gIzkKKyAgICAgIFtnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm91dCgpLnZhbHVlcygnY29kZScpLmxpbWl0KDUpLCAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vdXQoKS52YWx1ZXMoJ2NvZGUnKS5saW1pdCg1KSJdLAorICAgICAgLy8gIzEwCisgICAgICBbZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJykubGltaXQoMTApLndoZXJlKFAuZXEoJ2EnKSkuYnkoJ3JlZ2lvbicpLCAiZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJykubGltaXQoMTApLndoZXJlKGVxKCdhJykpLmJ5KCdyZWdpb24nKSJdLAorICAgICAgLy8gIzExCisgICAgICBbZy5WKCczJykucmVwZWF0KF9fLm91dCgncm91dGUnKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDIpLnBhdGgoKS5ieSgnY29kZScpLCAiZy5WKCczJykucmVwZWF0KF9fLm91dCgncm91dGUnKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDIpLnBhdGgoKS5ieSgnY29kZScpIl0sCisgICAgICAvLyAjMTIKKyAgICAgIFtnLlYoKS5oYXMoJ2FpcnBvcnQnLCdyZWdpb24nLCdVUy1UWCcpLm9yZGVyKCkuYnkoJ2NvZGUnKSwgImcuVigpLmhhcygnYWlycG9ydCcsJ3JlZ2lvbicsJ1VTLVRYJykub3JkZXIoKS5ieSgnY29kZScpIl0sCisgICAgICAvLyAjMTMKKyAgICAgIFtnLlYoJzMnKS51bmlvbihfXy52YWx1ZXMoJ2NvZGUnKSxfXy52YWx1ZXMoJ2NpdHknKSksICJnLlYoJzMnKS51bmlvbihfXy52YWx1ZXMoJ2NvZGUnKSxfXy52YWx1ZXMoJ2NpdHknKSkiXSwKKyAgICAgIC8vICMxNAorICAgICAgW2cuVignMycpLmFzKCdhJykub3V0KCdyb3V0ZScsJ3JvdXRlcycpLnBhdGgoKS5ieSgnY29kZScpLCAiZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJywncm91dGVzJykucGF0aCgpLmJ5KCdjb2RlJykiXSwKKyAgICAgIC8vICMxNQorICAgICAgW2cuVigpLndoZXJlKF9fLnZhbHVlcygncnVud2F5cycpLmlzKDUpKSwgImcuVigpLndoZXJlKF9fLnZhbHVlcygncnVud2F5cycpLmlzKDUpKSJdLAorICAgICAgLy8gIzE2CisgICAgICBbZy5WKCczJykucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKSkucGF0aCgpLmJ5KCdjb2RlJykubGltaXQoNSksICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLmhhcygnY29kZScsJ0FHUicpKS5wYXRoKCkuYnkoJ2NvZGUnKS5saW1pdCg1KSJdLAorICAgICAgLy8gIzE3CisgICAgICBbZy5WKCkub3JkZXIoKS5ieShfXy5pZCgpKSwgJ2cuVigpLm9yZGVyKCkuYnkoX18uaWQoKSknXSwKKyAgICAgIC8vICMxOAorICAgICAgW2cuVigpLm9yZGVyKCkuYnkoVC5pZCksICdnLlYoKS5vcmRlcigpLmJ5KFQuaWQpJ10sCisgICAgICAvLyAjMTkKKyAgICAgIFtnLlYoKS5vcmRlcigpLmJ5KF9fLmlkKCksT3JkZXIuZGVzYyksICdnLlYoKS5vcmRlcigpLmJ5KF9fLmlkKCksT3JkZXIuZGVzYyknXSwKKyAgICAgIC8vICMyMAorICAgICAgW2cuVigpLm9yZGVyKCkuYnkoJ2NvZGUnLE9yZGVyLmRlc2MpLCAiZy5WKCkub3JkZXIoKS5ieSgnY29kZScsT3JkZXIuZGVzYykiXSwKKyAgICAgIC8vICMyMQorICAgICAgW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykuZGVkdXAoKS5sb2NhbChfXy52YWx1ZXMoJ2NvZGUnLCdjaXR5JykuZm9sZCgpKSwgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykuZGVkdXAoKS5sb2NhbChfXy52YWx1ZXMoJ2NvZGUnLCdjaXR5JykuZm9sZCgpKSJdLAorICAgICAgLy8gIzIyCisgICAgICBbZy5WKCkuY291bnQoU2NvcGUubG9jYWwpLCAnZy5WKCkuY291bnQoU2NvcGUubG9jYWwpJ10sCisgICAgICAvLyAjMjMKKyAgICAgIFtnLkUoKS5jb3VudCgpLCAnZy5FKCkuY291bnQoKSddLAorICAgICAgLy8gIzI0CisgICAgICBbZy5WKCczJykub3V0RSgncm91dGUnKS5pblYoKS5wYXRoKCkuYnkoJ2NvZGUnKS5ieSgnZGlzdCcpLCAiZy5WKCczJykub3V0RSgncm91dGUnKS5pblYoKS5wYXRoKCkuYnkoJ2NvZGUnKS5ieSgnZGlzdCcpIl0sCisgICAgICAvLyAjMjUKKyAgICAgIFtnLlYoJzMnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cyksICJnLlYoJzMnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cykiXSwKKyAgICAgIC8vICMyNgorICAgICAgW2cuVignMycpLnByb3BlcnR5TWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLCAiZy5WKCczJykucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykiXSwKKyAgICAgIC8vICMyNworICAgICAgW2cuVigpLmhhcygnYWlycG9ydCcsJ2NvZGUnLCdBVVMnKS52YWx1ZXMoJ3J1bndheXMnKS5tYXRoKCdfICsgMScpLCAiZy5WKCkuaGFzKCdhaXJwb3J0JywnY29kZScsJ0FVUycpLnZhbHVlcygncnVud2F5cycpLm1hdGgoJ18gKyAxJykiXSwKKyAgICAgIC8vICMyOAorICAgICAgW2cuVignMycpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDMpLmxpbWl0KDUpLnBhdGgoKS5ieSgnY29kZScpLCAiZy5WKCczJykuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMykubGltaXQoNSkucGF0aCgpLmJ5KCdjb2RlJykiXSwKKyAgICAgIC8vICMyOQorICAgICAgW2cuVigpLm1hdGNoKF9fLmFzKCdhJykuaGFzKCdjb2RlJywnQVVTJyksX18uYXMoJ2EnKS5vdXQoJ3JvdXRlJykuYXMoJ2InKSkuc2VsZWN0KCdiJykuYnkoJ2NvZGUnKSwgImcuVigpLm1hdGNoKF9fLmFzKCdhJykuaGFzKCdjb2RlJywnQVVTJyksX18uYXMoJ2EnKS5vdXQoJ3JvdXRlJykuYXMoJ2InKSkuc2VsZWN0KCdiJykuYnkoJ2NvZGUnKSJdLAorICAgICAgLy8gIzMwCisgICAgICBbZy5WKCkuaGFzKCd0ZXN0LXVzaW5nLWtleXdvcmQtYXMtcHJvcGVydHknLCdyZXBlYXQnKSwgImcuVigpLmhhcygndGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5JywncmVwZWF0JykiXSwKKyAgICAgIC8vICMzMQorICAgICAgW2cuYWRkRSgndGVzdCcpLnRvKF9fLlYoJzQnKSksICJnLmFkZEUoJ3Rlc3QnKS50byhfXy5WKCc0JykpIl0sCisgICAgICAvLyAjMzIKKyAgICAgIFtnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5tYXgoKSwgJ2cuVigpLnZhbHVlcyhcJ3J1bndheXNcJykubWF4KCknXSwKKyAgICAgIC8vICMzMworICAgICAgW2cuVigpLnZhbHVlcygncnVud2F5cycpLm1pbigpLCAnZy5WKCkudmFsdWVzKFwncnVud2F5c1wnKS5taW4oKSddLAorICAgICAgLy8gIzM0CisgICAgICBbZy5WKCkudmFsdWVzKCdydW53YXlzJykuc3VtKCksICdnLlYoKS52YWx1ZXMoXCdydW53YXlzXCcpLnN1bSgpJ10sCisgICAgICAvLyAjMzUKKyAgICAgIFtnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5tZWFuKCksICdnLlYoKS52YWx1ZXMoXCdydW53YXlzXCcpLm1lYW4oKSddLAorICAgICAgLy8gIzM2CisgICAgICBbZy53aXRoU2FjaygwKS5WKCczJywnNScpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgncnVud2F5cycpLnNhY2soKSwgImcud2l0aFNhY2soMCkuVignMycsJzUnKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoJ3J1bndheXMnKS5zYWNrKCkiXSwKKyAgICAgIC8vICMzNworICAgICAgW2cuaW5qZWN0KDMsNCw1KSwgJ2cuaW5qZWN0KDMsNCw1KSddLAorICAgICAgLy8gIzM4CisgICAgICBbZy5pbmplY3QoWzMsNCw1XSksICdnLmluamVjdChbMyw0LDVdKSddLAorICAgICAgLy8gIzM5CisgICAgICBbZy5pbmplY3QoMyw0LDUpLmNvdW50KCksICdnLmluamVjdCgzLDQsNSkuY291bnQoKSddLAorICAgICAgLy8gIzQwCisgICAgICBbZy5WKCkuaGFzKCdydW53YXlzJyxQLmd0KDUpKS5jb3VudCgpLCAiZy5WKCkuaGFzKCdydW53YXlzJyxndCg1KSkuY291bnQoKSJdLAorICAgICAgLy8gIzQxCisgICAgICBbZy5WKCkuaGFzKCdydW53YXlzJyxQLmx0ZSg1LjMpKS5jb3VudCgpLCAiZy5WKCkuaGFzKCdydW53YXlzJyxsdGUoNS4zRCkpLmNvdW50KCkiXSwKKyAgICAgIC8vICM0MgorICAgICAgW2cuVigpLmhhcygnY29kZScsUC53aXRoaW4oWzEyMywxMjRdKSksICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbMTIzLDEyNF0pKSJdLAorICAgICAgLy8gIzQzCisgICAgICBbZy5WKCkuaGFzKCdjb2RlJyxQLndpdGhpbihbMTIzLCdhYmMnXSkpLCAiZy5WKCkuaGFzKCdjb2RlJyx3aXRoaW4oWzEyMywnYWJjJ10pKSJdLAorICAgICAgLy8gIzQ0CisgICAgICBbZy5WKCkuaGFzKCdjb2RlJyxQLndpdGhpbihbJ2FiYycsMTIzXSkpLCAiZy5WKCkuaGFzKCdjb2RlJyx3aXRoaW4oWydhYmMnLDEyM10pKSJdLAorICAgICAgLy8gIzQ1CisgICAgICBbZy5WKCkuaGFzKCdjb2RlJyxQLndpdGhpbihbJ2FiYycsJ3h5eiddKSksICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbJ2FiYycsJ3h5eiddKSkiXSwKKyAgICAgIC8vICM0NgorICAgICAgW2cuVigpLmhhcygncmVnaW9uJyxQLndpdGhpbihbJ1VTLVRYJywnVVMtR0EnXSkpLCAiZy5WKCkuaGFzKCdyZWdpb24nLHdpdGhpbihbJ1VTLVRYJywnVVMtR0EnXSkpIl0sCisgICAgICAvLyAjNDcKKyAgICAgIFtnLlYoKS5hbmQoX18uaGFzKCdydW53YXlzJyxQLmd0KDUpKSxfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJykpLCAiZy5WKCkuYW5kKF9fLmhhcygncnVud2F5cycsZ3QoNSkpLF9fLmhhcygncmVnaW9uJywnVVMtVFgnKSkiXSwKKyAgICAgIC8vICM0OAorICAgICAgW2cuVigpLnVuaW9uKF9fLmhhcygncnVud2F5cycsUC5ndCg1KSksX18uaGFzKCdyZWdpb24nLCdVUy1UWCcpKSwgImcuVigpLnVuaW9uKF9fLmhhcygncnVud2F5cycsZ3QoNSkpLF9fLmhhcygncmVnaW9uJywnVVMtVFgnKSkiXSwKKyAgICAgIC8vICM0OQorICAgICAgW2cuVignMycpLmNob29zZShfXy52YWx1ZXMoJ3J1bndheXMnKS5pcygzKSxfXy5jb25zdGFudCgndGhyZWUnKSxfXy5jb25zdGFudCgnbm90IHRocmVlJykpLCAiZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpLmlzKDMpLF9fLmNvbnN0YW50KCd0aHJlZScpLF9fLmNvbnN0YW50KCdub3QgdGhyZWUnKSkiXSwKKyAgICAgIC8vICM1MAorICAgICAgW2cuVignMycpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oMCxfXy5jb25zdGFudCgnbm9uZScpKS5vcHRpb24oMSxfXy5jb25zdGFudCgnb25lJykpLm9wdGlvbigyLF9fLmNvbnN0YW50KCd0d28nKSksICJnLlYoJzMnKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKDAsX18uY29uc3RhbnQoJ25vbmUnKSkub3B0aW9uKDEsX18uY29uc3RhbnQoJ29uZScpKS5vcHRpb24oMixfXy5jb25zdGFudCgndHdvJykpIl0sCisgICAgICAvLyAjNTEKKyAgICAgIFtnLlYoJzMnKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKDEuNSxfXy5jb25zdGFudCgnb25lIGFuZCBhIGhhbGYnKSksICJnLlYoJzMnKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKDEuNUQsX18uY29uc3RhbnQoJ29uZSBhbmQgYSBoYWxmJykpIl0sCisgICAgICAvLyAjNTIKKyAgICAgIFtnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm9yKF9fLmxvb3BzKCkuaXMoMyksX18uaGFzKCdjb2RlJywnQUdSJykpKS5jb3VudCgpLCAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5vcihfXy5sb29wcygpLmlzKDMpLF9fLmhhcygnY29kZScsJ0FHUicpKSkuY291bnQoKSJdLAorICAgICAgLy8gIzUzCisgICAgICBbZy5WKCkuZ3JvdXAoKS5ieSgnY29udGluZW50JykuYnkoX18uY291bnQoKSkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMpLCAiZy5WKCkuZ3JvdXAoKS5ieSgnY29udGluZW50JykuYnkoX18uY291bnQoKSkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMpIl0sCisgICAgICAvLyAjNTQKKyAgICAgIFtnLlYoJzMnKS5hcygnYScpLm91dCgncm91dGUnKS5hcygnYScpLnNlbGVjdChQb3AuYWxsLCdhJyksICJnLlYoJzMnKS5hcygnYScpLm91dCgncm91dGUnKS5hcygnYScpLnNlbGVjdChQb3AuYWxsLCdhJykiXSwKKyAgICAgIC8vICM1NQorICAgICAgW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwncDEnLDEwKSwgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwncDEnLDEwKSJdLAorICAgICAgLy8gIzU2CisgICAgICBbZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwncDEnLDEwKSwgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsJ3AxJywxMCkiXSwKKyAgICAgIC8vICM1NworICAgICAgW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwncDEnLDEwKSwgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwncDEnLDEwKSJdLAorICAgICAgLy8gIzU4CisgICAgICBbZy5WKCkub3JkZXIoKS5ieShULmxhYmVsKSwgJ2cuVigpLm9yZGVyKCkuYnkoVC5sYWJlbCknXSwKKyAgICAgIC8vICM1OQorICAgICAgW2cuVigpLnJhbmdlKDEsNSksICdnLlYoKS5yYW5nZSgxLDUpJ10sCisgICAgICAvLyAjNjAKKyAgICAgIFtnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eSgncDEnLDEyMyksICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eSgncDEnLDEyMykiXSwKKyAgICAgIC8vICM2MQorICAgICAgW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJyxuZXcgRGF0ZSgnMjAyMS0wMi0wMVQwOTozMDowMC4wMDBaJykpLCBgZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ2RhdGUnLGRhdGV0aW1lKCIyMDIxLTAyLTAxVDA5OjMwOjAwLjAwMFoiKSlgXSwKKyAgICAgIC8vICM2MgorICAgICAgW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJyxuZXcgRGF0ZSgnMjAyMS0wMi0wMVQwMDowMDowMC4wMDBaJykpLCBgZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ2RhdGUnLGRhdGV0aW1lKCIyMDIxLTAyLTAxVDAwOjAwOjAwLjAwMFoiKSlgXSwKKyAgICAgIC8vICM2MworICAgICAgW2cuYWRkRSgncm91dGUnKS5mcm9tXyhfXy5WKCcxJykpLnRvKF9fLlYoJzInKSksICJnLmFkZEUoJ3JvdXRlJykuZnJvbShfXy5WKCcxJykpLnRvKF9fLlYoJzInKSkiXSwKKyAgICAgIC8vICM2NAorICAgICAgW2cud2l0aFNpZGVFZmZlY3QoJ2EnLFsxLDJdKS5WKCkudmFsdWVzKCdydW53YXlzJykud2hlcmUoUC53aXRoaW4oJ2EnKSksICJnLndpdGhTaWRlRWZmZWN0KCdhJyxbMSwyXSkuVigpLnZhbHVlcygncnVud2F5cycpLndoZXJlKHdpdGhpbihbJ2EnXSkpIl0sCisgICAgICAvLyAjNjUKKyAgICAgIFtnLndpdGhTaWRlRWZmZWN0KCdhJywxKS5WKCkudmFsdWVzKCdydW53YXlzJykud2hlcmUoUC53aXRoaW4oJ2EnKSksICJnLndpdGhTaWRlRWZmZWN0KCdhJywxKS5WKCkudmFsdWVzKCdydW53YXlzJykud2hlcmUod2l0aGluKFsnYSddKSkiXSwKKyAgICAgIC8vICM2NgorICAgICAgW2cud2l0aFNpZGVFZmZlY3QoJ2EnLCdhYmMnKS5WKCkudmFsdWVzKCdydW53YXlzJykud2hlcmUoUC53aXRoaW4oJ2EnKSksICJnLndpdGhTaWRlRWZmZWN0KCdhJywnYWJjJykuVigpLnZhbHVlcygncnVud2F5cycpLndoZXJlKHdpdGhpbihbJ2EnXSkpIl0sCisgICAgICAvLyAjNjcKKyAgICAgIFtnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLmxpbWl0KDUpLnZhbHVlcygnY29kZScpLmZvbGQoKS5pbmRleCgpLCAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5saW1pdCg1KS52YWx1ZXMoJ2NvZGUnKS5mb2xkKCkuaW5kZXgoKSJdLAorICAgICAgLy8gIzY4CisgICAgICBbZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS50aW1lTGltaXQoMTAwMCkuY291bnQoKSwgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykudGltZUxpbWl0KDEwMDApLmNvdW50KCkiXSwKKyAgICAgIC8vICM2OQorICAgICAgW2cuVigpLndoZXJlKF9fLnZhbHVlcygnZWxldicpLmlzKFAuZ3QoMTQwMDApKSksICJnLlYoKS53aGVyZShfXy52YWx1ZXMoJ2VsZXYnKS5pcyhndCgxNDAwMCkpKSJdLAorICAgICAgLy8gIzcwCisgICAgICBbZy5WKCkud2hlcmUoX18ub3V0KCkuY291bnQoKS5pcyhQLmd0KDIwMCkpKS52YWx1ZXMoJ2NvZGUnKSwgImcuVigpLndoZXJlKF9fLm91dCgpLmNvdW50KCkuaXMoZ3QoMjAwKSkpLnZhbHVlcygnY29kZScpIl0sCisgICAgICAvLyAjNzEKKyAgICAgIFtnLlYoKS5maWx0ZXIoX18uaGFzKCdyZWdpb24nLCdVUy1UWCcpKS5jb3VudCgpLCAiZy5WKCkuZmlsdGVyKF9fLmhhcygncmVnaW9uJywnVVMtVFgnKSkuY291bnQoKSJdLAorICAgICAgLy8gIzcyCisgICAgICBbZy53aXRoU2FjaygwKS5WKCczJykucmVwZWF0KF9fLm91dEUoJ3JvdXRlJykuc2FjayhPcGVyYXRvci5zdW0pLmJ5KCdkaXN0JykuaW5WKCkpLnVudGlsKF9fLm9yKF9fLmxvb3BzKCkuaXMoMiksX18uc2FjaygpLmlzKFAuZ3QoNTAwKSkpKS5sb2NhbChfXy51bmlvbihfXy5wYXRoKCkuYnkoJ2NvZGUnKS5ieSgnZGlzdCcpLF9fLnNhY2soKSkuZm9sZCgpKS5saW1pdCgxMCksICJnLndpdGhTYWNrKDApLlYoJzMnKS5yZXBlYXQoX18ub3V0RSgncm91dGUnKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoJ2Rpc3QnKS5pblYoKSkudW50aWwoX18ub3IoX18ubG9vcHMoKS5pcygyKSxfXy5zYWNrKCkuaXMoZ3QoNTAwKSkpKS5sb2NhbChfXy51bmlvbihfXy5wYXRoKCkuYnkoJ2NvZGUnKS5ieSgnZGlzdCcpLF9fLnNhY2soKSkuZm9sZCgpKS5saW1pdCgxMCkiXSwKKyAgICAgIC8vICM3MworICAgICAgW2cuYWRkVigpLmFzKCdhJykuYWRkVigpLmFzKCdiJykuYWRkRSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJyksICJnLmFkZFYoKS5hcygnYScpLmFkZFYoKS5hcygnYicpLmFkZEUoJ2tub3dzJykuZnJvbSgnYScpLnRvKCdiJykiXSwKKyAgICAgIC8vICM3NAorICAgICAgW2cuYWRkVignUGVyc29uJykuYXMoJ2EnKS5hZGRWKCdQZXJzb24nKS5hcygnYicpLmFkZEUoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLCAiZy5hZGRWKCdQZXJzb24nKS5hcygnYScpLmFkZFYoJ1BlcnNvbicpLmFzKCdiJykuYWRkRSgna25vd3MnKS5mcm9tKCdhJykudG8oJ2InKSJdLAorICAgICAgLy8gIzc1CisgICAgICBbZy5WKCczJykucHJvamVjdCgnT3V0JywnSW4nKS5ieShfXy5vdXQoKS5jb3VudCgpKS5ieShfXy5pbl8oKS5jb3VudCgpKSwgImcuVignMycpLnByb2plY3QoJ091dCcsJ0luJykuYnkoX18ub3V0KCkuY291bnQoKSkuYnkoX18uaW4oKS5jb3VudCgpKSJdLAorICAgICAgLy8gIzc2CisgICAgICBbZy5WKCczJykub3V0KCdyb3V0ZScpLmFnZ3JlZ2F0ZSgneCcpLndoZXJlKFAud2l0aGluKCd4JykpLnBhdGgoKS5ieSgnY29kZScpLCAiZy5WKCczJykub3V0KCdyb3V0ZScpLmFnZ3JlZ2F0ZSgneCcpLndoZXJlKHdpdGhpbihbJ3gnXSkpLnBhdGgoKS5ieSgnY29kZScpIl0sCisgICAgICAvLyAjNzcKKyAgICAgIFtnLlYoKS5oYXMoJ2RhdGUnLG5ldyBEYXRlKCcyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFonKSksIGBnLlYoKS5oYXMoJ2RhdGUnLGRhdGV0aW1lKCIyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFoiKSlgXSwKKyAgICAgIC8vICM3OAorICAgICAgW2cuVigpLmhhcygnZGF0ZScsUC53aXRoaW4oW25ldyBEYXRlKCcyMDIxLTAxLTAxVDAwOjAwOjAwLjAwMFonKSxuZXcgRGF0ZSgnMjAyMS0wMi0yMlQwMDowMDowMC4wMDBaJyldKSksIGBnLlYoKS5oYXMoJ2RhdGUnLHdpdGhpbihbZGF0ZXRpbWUoIjIwMjEtMDEtMDFUMDA6MDA6MDAuMDAwWiIpLGRhdGV0aW1lKCIyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFoiKV0pKWBdLAorICAgICAgLy8gIzc5CisgICAgICBbZy5WKCkuaGFzKCdkYXRlJyxQLmJldHdlZW4obmV3IERhdGUoJzIwMjEtMDEtMDFUMDA6MDA6MDAuMDAwWicpLG5ldyBEYXRlKCcyMDIxLTAyLTIyVDAwOjAwOjAwLjAwMFonKSkpLCBgZy5WKCkuaGFzKCdkYXRlJyxiZXR3ZWVuKGRhdGV0aW1lKCIyMDIxLTAxLTAxVDAwOjAwOjAwLjAwMFoiKSxkYXRldGltZSgiMjAyMS0wMi0yMlQwMDowMDowMC4wMDBaIikpKWBdLAorICAgICAgLy8gIzgwCisgICAgICBbZy5WKCkuaGFzKCdkYXRlJyxQLmluc2lkZShuZXcgRGF0ZSgnMjAyMS0wMS0wMVQwMDowMDowMC4wMDBaJyksbmV3IERhdGUoJzIwMjEtMDItMjJUMDA6MDA6MDAuMDAwWicpKSksIGBnLlYoKS5oYXMoJ2RhdGUnLGluc2lkZShkYXRldGltZSgiMjAyMS0wMS0wMVQwMDowMDowMC4wMDBaIiksZGF0ZXRpbWUoIjIwMjEtMDItMjJUMDA6MDA6MDAuMDAwWiIpKSlgXSwKKyAgICAgIC8vICM4MQorICAgICAgW2cuVigpLmhhcygnZGF0ZScsUC5ndChuZXcgRGF0ZSgnMjAyMS0wMS0wMVQwMDowMDowMC4wMDBaJykpKSwgYGcuVigpLmhhcygnZGF0ZScsZ3QoZGF0ZXRpbWUoIjIwMjEtMDEtMDFUMDA6MDA6MDAuMDAwWiIpKSlgXSwKKyAgICAgIC8vICM4MgorICAgICAgW2cuVigpLmhhcygncnVud2F5cycsUC5iZXR3ZWVuKDMsNSkpLCAiZy5WKCkuaGFzKCdydW53YXlzJyxiZXR3ZWVuKDMsNSkpIl0sCisgICAgICAvLyAjODMKKyAgICAgIFtnLlYoKS5oYXMoJ3J1bndheXMnLFAuaW5zaWRlKDMsNSkpLCAiZy5WKCkuaGFzKCdydW53YXlzJyxpbnNpZGUoMyw1KSkiXSwKKyAgICAgIC8vICM4NAorICAgICAgW2cuVignMycpLm91dEUoKS5lbGVtZW50TWFwKCksICJnLlYoJzMnKS5vdXRFKCkuZWxlbWVudE1hcCgpIl0sCisgICAgICAvLyAjODUKKyAgICAgIFtnLlYoJzMnKS52YWx1ZU1hcCgpLmJ5KF9fLnVuZm9sZCgpKSwgImcuVignMycpLnZhbHVlTWFwKCkuYnkoX18udW5mb2xkKCkpIl0sCisgICAgICAvLyAjODYKKyAgICAgIFtnLlYoJzQ0JykudmFsdWVNYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMsV2l0aE9wdGlvbnMubGFiZWxzKSwgImcuVignNDQnKS52YWx1ZU1hcCgpLndpdGgoJ350aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zJywyKSJdLAorICAgICAgLy8gIzg3CisgICAgICBbZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSwgImcuVignNDQnKS52YWx1ZU1hcCgpLndpdGgoJ350aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zJykiXSwKKyAgICAgIC8vICM4OAorICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuYWRkVigndGVzdCcpLCAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5hZGRWKCd0ZXN0JykiXSwKKyAgICAgIC8vICM4OQorICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJyksIGVkZ2VzOiBfXy5oYXNMYWJlbCgncm91dGUnKX0pKS5WKCkuY291bnQoKSwgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLGVkZ2VzOl9fLmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiXSwKKyAgICAgIC8vICM5MAorICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRleFByb3BlcnRpZXM6IF9fLmhhc05vdCgncnVud2F5cycpfSkpLlYoKS5jb3VudCgpLCAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhc05vdCgncnVud2F5cycpKSkuVigpLmNvdW50KCkiXSwKKyAgICAgIC8vICM5MQorICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJyksIHZlcnRleFByb3BlcnRpZXM6IF9fLmhhc05vdCgncnVud2F5cycpfSkpLlYoKS5jb3VudCgpLCAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJyksdmVydGV4UHJvcGVydGllczpfXy5oYXNOb3QoJ3J1bndheXMnKSkpLlYoKS5jb3VudCgpIl0sCisgICAgICAvLyAjOTIKKyAgICAgIFtnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCksIG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLCBlZGdlczogX18uaGFzTGFiZWwoJ3JvdXRlJyl9KSkuVigpLmNvdW50KCksICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLGVkZ2VzOl9fLmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiXSwKKyAgICAgIC8vICM5MworICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSwgbmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJyl9KSkuVigpLmNvdW50KCksICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpKSkuVigpLmNvdW50KCkiXSwKKyAgICAgIC8vICM5NCAtIE9wdGlvbnNTdHJhdGVneSBleHRyYWN0ZWQsIG5vdCBzZXJpYWxpemVkCisgICAgICBbZy53aXRoXygnZXZhbHVhdGlvblRpbWVvdXQnLDUwMCkuVigpLmNvdW50KCksICdnLlYoKS5jb3VudCgpJ10sCisgICAgICAvLyAjOTUgLSBPcHRpb25zU3RyYXRlZ3kgZXh0cmFjdGVkLCBub3Qgc2VyaWFsaXplZAorICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneSh7ZXZhbHVhdGlvblRpbWVvdXQ6IDUwMH0pKS5WKCkuY291bnQoKSwgJ2cuVigpLmNvdW50KCknXSwKKyAgICAgIC8vICM5NgorICAgICAgW2cud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6ICdfcGFydGl0aW9uJywgd3JpdGVQYXJ0aXRpb246ICdhJywgcmVhZFBhcnRpdGlvbnM6IFsnYScsJ2InXX0pKS5hZGRWKCd0ZXN0JyksICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6J19wYXJ0aXRpb24nLHdyaXRlUGFydGl0aW9uOidhJyxyZWFkUGFydGl0aW9uczpbJ2EnLCdiJ10pKS5hZGRWKCd0ZXN0JykiXSwKKyAgICAgIC8vICM5NworICAgICAgW2cud2l0aENvbXB1dGVyKCkuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQnLF9fLmhhcygnbmFtZScsJ3BldGVyJykpLCAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQnLF9fLmhhcygnbmFtZScsJ3BldGVyJykpIl0sCisgICAgICAvLyAjOTgKKyAgICAgIFtnLlYoKS5jb2FsZXNjZShfXy5FKCksX18uYWRkRSgncGVyc29uJykpLCAiZy5WKCkuY29hbGVzY2UoX18uRSgpLF9fLmFkZEUoJ3BlcnNvbicpKSJdLAorICAgICAgLy8gIzk5CisgICAgICBbZy5pbmplY3QoMSkuRSgpLCAnZy5pbmplY3QoMSkuRSgpJ10sCisgICAgICAvLyAjMTAwCisgICAgICBbZy5WKCkuaGFzKCduYW1lJyxUZXh0UC5zdGFydGluZ1dpdGgoJ2ZvbycpKSwgImcuVigpLmhhcygnbmFtZScsc3RhcnRpbmdXaXRoKCdmb28nKSkiXSwKKyAgICAgIC8vICMxMDEKKyAgICAgIFtnLlYoKS5oYXMoJ25hbWUnLFRleHRQLmVuZGluZ1dpdGgoJ2ZvbycpKSwgImcuVigpLmhhcygnbmFtZScsZW5kaW5nV2l0aCgnZm9vJykpIl0sCisgICAgICAvLyAjMTAyCisgICAgICBbZy5WKCkuaGFzKCdwMScsbnVsbCksICJnLlYoKS5oYXMoJ3AxJyxudWxsKSJdLAorICAgICAgLy8gIzEwMworICAgICAgW2cuVihuZXcgVmVydGV4KDAsJ3BlcnNvbicpKSwgJ2cuVigwKSddLAorICAgICAgLy8gIzEwNCAtIE1hcCB3aXRoIGVudW0ga2V5CisgICAgICBbZy5pbmplY3QobmV3IE1hcChbW1QuaWQsIDBdLCBbVC5sYWJlbCwgJ3BlcnNvbiddLCBbJ25hbWUnLCAnc3RlcGhlbiddLCBbJ2FnZScsIDMyXV0pKSwgImcuaW5qZWN0KFsoVC5pZCk6MCwoVC5sYWJlbCk6J3BlcnNvbicsJ25hbWUnOidzdGVwaGVuJywnYWdlJzozMl0pIl0sCisgICAgICAvLyAjMTA1IC0gY2hhaW5lZCBvciBwcmVkaWNhdGVzCisgICAgICBbZy5WKCkuaGFzKCdhZ2UnLFAuZ3QoNSkub3IoUC5sdCgyKSkub3IoUC5lcSgzKSkpLCAiZy5WKCkuaGFzKCdhZ2UnLGd0KDUpLm9yKGx0KDIpKS5vcihlcSgzKSkpIl0sCisgICAgICAvLyAjMTA2IC0gY29tcGxleCBuZXN0ZWQgYW5kL29yIHByZWRpY2F0ZXMKKyAgICAgIFtnLlYoKS5oYXMoJ2FnZScsUC5ndCg1KS5hbmQoUC5sdCgxMCkpLm9yKFAuZXEoMTUpKSksICJnLlYoKS5oYXMoJ2FnZScsZ3QoNSkuYW5kKGx0KDEwKSkub3IoZXEoMTUpKSkiXSwKKyAgICAgIC8vICMxMDcKKyAgICAgIFtnLmluamVjdChuZXcgU2V0KFsnYSddKSksICJnLmluamVjdCh7J2EnfSkiXSwKKyAgICAgIC8vICMxMDgKKyAgICAgIFtnLm1lcmdlVihudWxsKSwgJ2cubWVyZ2VWKG51bGwpJ10sCisgICAgICAvLyAjMTA5CisgICAgICBbZy5tZXJnZUUobnVsbCksICdnLm1lcmdlRShudWxsKSddLAorICAgICAgLy8gIzExMCAtIGRvdWJsZSBxdW90ZSBpbiBzdHJpbmcKKyAgICAgIFtnLmFkZFYoJyJ0ZXN0IicpLCAiZy5hZGRWKCdcXFwidGVzdFxcXCInKSJdLAorICAgICAgLy8gIzExMSAtIG1peGVkIHF1b3RlcworICAgICAgW2cuYWRkVigidCdcImVzdCIpLCAiZy5hZGRWKCd0XFwnXFxcImVzdCcpIl0sCisgICAgICAvLyAjMTEyIC0gbmV3bGluZSBpbiBzdHJpbmcKKyAgICAgIFtnLmFkZFYoJ2hlbGxvXG53b3JsZCcpLCAiZy5hZGRWKCdoZWxsb1xcbndvcmxkJykiXSwKKyAgICAgIC8vICMxMTMgLSB0YWIgaW4gc3RyaW5nCisgICAgICBbZy5hZGRWKCdoZWxsb1x0d29ybGQnKSwgImcuYWRkVignaGVsbG9cXHR3b3JsZCcpIl0sCisgICAgICAvLyAjMTE0IC0gY2FycmlhZ2UgcmV0dXJuIGluIHN0cmluZworICAgICAgW2cuaW5qZWN0KCdhXHJiJyksICJnLmluamVjdCgnYVxccmInKSJdLAorICAgICAgLy8gIzExNSAtIGJhY2tzcGFjZSBpbiBzdHJpbmcKKyAgICAgIFtnLmluamVjdCgnYVxiYicpLCAiZy5pbmplY3QoJ2FcXGJiJykiXSwKKyAgICAgIC8vICMxMTYgLSBmb3JtIGZlZWQgaW4gc3RyaW5nCisgICAgICBbZy5pbmplY3QoJ2FcZmInKSwgImcuaW5qZWN0KCdhXFxmYicpIl0sCisgICAgICAvLyAjMTE3IC0gbnVsbCBjaGFyIGluIHN0cmluZworICAgICAgW2cuaW5qZWN0KCdhXHgwMGInKSwgImcuaW5qZWN0KCdhXFx1MDAwMGInKSJdLAorICAgICAgLy8gIzExOCAtIGRhdGV0aW1lIHdpdGggbm9uLXplcm8gbWlsbGlzZWNvbmRzCisgICAgICBbZy5pbmplY3QobmV3IERhdGUoJzIwMTgtMDMtMjFUMDg6MzU6NDQuNzQxWicpKSwgJ2cuaW5qZWN0KGRhdGV0aW1lKCIyMDE4LTAzLTIxVDA4OjM1OjQ0Ljc0MVoiKSknXSwKKyAgICAgIC8vICMxMTkgLSB3aXRob3V0U3RyYXRlZ2llcworICAgICAgW2cud2l0aG91dFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuVigpLCAnZy53aXRob3V0U3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCknXSwKKyAgICAgIC8vICMxMjAgLSBTZWVkU3RyYXRlZ3kKKyAgICAgIFtnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDk5OTk5OX0pKS5WKCksICdnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDo5OTk5OTkpKS5WKCknXSwKKyAgICAgIC8vICMxMjEgLSBQLndpdGhpbiB3aXRoIGVtcHR5IGxpc3QKKyAgICAgIFtnLlYoKS5oYXMoJ2NvZGUnLFAud2l0aGluKFtdKSksICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbXSkpIl0sCisgICAgICAvLyAjMTIyIC0gUC5ub3QKKyAgICAgIFtnLlYoKS5oYXMoJ2FnZScsUC5ub3QoUC5lcSg1KSkpLCAiZy5WKCkuaGFzKCdhZ2UnLG5vdChlcSg1KSkpIl0sCisgICAgICAvLyAjMTIzIC0gRGlyZWN0aW9uIGFsaWFzZXMgZnJvbV8gYW5kIHRvIG1hcHBlZCB0byBPVVQgYW5kIElOCisgICAgICBbZy5WKCkudG8oZGlyZWN0aW9uLmZyb21fLCAna25vd3MnKS50byhkaXJlY3Rpb24uaW4sICdjcmVhdGVkJyksCisgICAgICAgImcuVigpLnRvKERpcmVjdGlvbi5PVVQsJ2tub3dzJykudG8oRGlyZWN0aW9uLklOLCdjcmVhdGVkJykiXSwKKyAgICAgIC8vICMxMjQgLSBmcm9tXy90byB3aXRoIFZlcnRleCBJRCBleHRyYWN0aW9uCisgICAgICBbZy5hZGRFKCdrbm93cycpLmZyb21fKG5ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicpKS50byhuZXcgVmVydGV4KDIsICdwZXJzb24nKSksCisgICAgICAgImcuYWRkRSgna25vd3MnKS5mcm9tKDEpLnRvKDIpIl0sCisgICAgICAvLyAjMTI1IC0gbWlkLXRyYXZlcnNhbCBWKCkgd2l0aCBWZXJ0ZXggSUQgZXh0cmFjdGlvbgorICAgICAgW2cuaW5qZWN0KCdmb28nKS5WKDEsIG5ldyBWZXJ0ZXgoMiwgJ3BlcnNvbicpKSwKKyAgICAgICAiZy5pbmplY3QoJ2ZvbycpLlYoMSwyKSJdLAorICAgICAgLy8gIzEyNiAtIG1lcmdlRSB3aXRoIFZlcnRleCBJRCBleHRyYWN0aW9uIGluIE1hcCAoc291cmNlIHN0ZXApCisgICAgICBbZy5tZXJnZUUobmV3IE1hcChbWydsYWJlbCcsICdrbm93cyddLCBbZGlyZWN0aW9uLm91dCwgbmV3IFZlcnRleCgxLCAncGVyc29uJyldLCBbZGlyZWN0aW9uLmluLCBuZXcgVmVydGV4KDIsICdwZXJzb24nKV1dKSksCisgICAgICAgImcubWVyZ2VFKFsnbGFiZWwnOidrbm93cycsKERpcmVjdGlvbi5PVVQpOjEsKERpcmVjdGlvbi5JTik6Ml0pIl0sCisgICAgICAvLyAjMTI3IC0gbWVyZ2VFIHdpdGggVmVydGV4IElEIGV4dHJhY3Rpb24gaW4gTWFwIChtaWQtdHJhdmVyc2FsKQorICAgICAgW2cuaW5qZWN0KCdmb28nKS5tZXJnZUUobmV3IE1hcChbWydsYWJlbCcsICdrbm93cyddLCBbZGlyZWN0aW9uLm91dCwgbmV3IFZlcnRleCgxLCAncGVyc29uJyldLCBbZGlyZWN0aW9uLmluLCBuZXcgVmVydGV4KDIsICdwZXJzb24nKV1dKSksCisgICAgICAgImcuaW5qZWN0KCdmb28nKS5tZXJnZUUoWydsYWJlbCc6J2tub3dzJywoRGlyZWN0aW9uLk9VVCk6MSwoRGlyZWN0aW9uLklOKToyXSkiXSwKKyAgICBdOworCisgICAgdGVzdHMuZm9yRWFjaCgoW3RyYXZlcnNhbCwgZXhwZWN0ZWRdLCBpbmRleCkgPT4geworICAgICAgaXQoYHRlc3QgIyR7aW5kZXh9OiAke2V4cGVjdGVkfWAsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRyYXZlcnNhbC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgZXhwZWN0ZWQpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdKUy1zcGVjaWZpYyB0ZXN0cycsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBMb25nIHZhbHVlcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnLlYobmV3IExvbmcoJzkwMDcxOTkyNTQ3NDA5OTMnKSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLlYoOTAwNzE5OTI1NDc0MDk5M0wpJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBiaWdpbnQgYXMgQmlnSW50ZWdlciAoTiBzdWZmaXgpJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KEJpZ0ludCg1KSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLmluamVjdCg1TiknKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnLmluamVjdChCaWdJbnQoJzkyMjMzNzIwMzY4NTQ3NzU4MDcnKSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLmluamVjdCg5MjIzMzcyMDM2ODU0Nzc1ODA3TiknKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnLmluamVjdChCaWdJbnQoMTApKipCaWdJbnQoMzApKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBOKScpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbnVtYmVyIGludGVnZXIgaW4gSW50MzIgcmFuZ2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZy5pbmplY3QoNDIpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAnZy5pbmplY3QoNDIpJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBudW1iZXIgaW50ZWdlciBiZXlvbmQgSW50MzIgcmFuZ2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZy5pbmplY3QoMzAwMDAwMDAwMCkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLmluamVjdCgzMDAwMDAwMDAwTCknKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIG51bWJlciBhdCBJbnQzMiBib3VuZGFyaWVzJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KDIxNDc0ODM2NDcpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAnZy5pbmplY3QoMjE0NzQ4MzY0NyknKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnLmluamVjdCgyMTQ3NDgzNjQ4KS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KDIxNDc0ODM2NDhMKScpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KC0yMTQ3NDgzNjQ4KS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KC0yMTQ3NDgzNjQ4KScpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KC0yMTQ3NDgzNjQ5KS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KC0yMTQ3NDgzNjQ5TCknKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIG51bWJlciBmbG9hdCB3aXRoIEQgc3VmZml4JywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KDMuMTQpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAnZy5pbmplY3QoMy4xNEQpJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBOYU4nLCBmdW5jdGlvbiAoKSB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZy5pbmplY3QoTmFOKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KE5hTiknKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIG51bWJlciBhdCBzYWZlIGludGVnZXIgYm91bmRhcmllcycsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnLmluamVjdCg5MDA3MTk5MjU0NzQwOTkxKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KDkwMDcxOTkyNTQ3NDA5OTFMKScpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KC05MDA3MTk5MjU0NzQwOTkxKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KC05MDA3MTk5MjU0NzQwOTkxTCknKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIEluZmluaXR5JywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KEluZmluaXR5KS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KCtJbmZpbml0eSknKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIC1JbmZpbml0eScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChnLmluamVjdCgtSW5maW5pdHkpLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAnZy5pbmplY3QoLUluZmluaXR5KScpOworICAgIH0pOworCisgICAgaXQoJ3NvdXJjZSBvcGVyYXRpb25zIHNob3VsZCBub3QgbXV0YXRlIG9yaWdpbmFsIGcnLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBnMiA9IGcud2l0aFNhY2soMCk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZy5WKCkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLlYoKScpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcyLlYoKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cud2l0aFNhY2soMCkuVigpJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBjbG9uZSBpc29sYXRpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCB0MSA9IGcuVigpLmhhcygnbmFtZScsJ2pvc2gnKTsKKyAgICAgIGNvbnN0IHQyID0gdDEuY2xvbmUoKS5vdXQoJ2NyZWF0ZWQnKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0MS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgImcuVigpLmhhcygnbmFtZScsJ2pvc2gnKSIpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHQyLmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAiZy5WKCkuaGFzKCduYW1lJywnam9zaCcpLm91dCgnY3JlYXRlZCcpIik7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBhbm9ueW1vdXMgdHJhdmVyc2FsIHByZWZpeCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHQgPSBfXy5vdXQoJ2tub3dzJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodC5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oJ19fJyksICJfXy5vdXQoJ2tub3dzJykiKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIE9wdGlvbnNTdHJhdGVneSBleHRyYWN0aW9uJywgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgdCA9IGcud2l0aF8oJ2V2YWx1YXRpb25UaW1lb3V0JywgNTAwKS5WKCkuY291bnQoKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0LmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAnZy5WKCkuY291bnQoKScpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHQuZ2V0R3JlbWxpbkxhbmcoKS5nZXRPcHRpb25zU3RyYXRlZ2llcygpLmxlbmd0aCwgMSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSBTZXQnLCBmdW5jdGlvbiAoKSB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZy5pbmplY3QobmV3IFNldCgpKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwgJ2cuaW5qZWN0KHt9KScpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgTWFwJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGcuaW5qZWN0KG5ldyBNYXAoKSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLmluamVjdChbOl0pJyk7IAorICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgaW5qZWN0IHdpdGggYXJyYXknLCBmdW5jdGlvbiAoKSB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZy5pbmplY3QoWzMsNCw1XSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksICdnLmluamVjdChbMyw0LDVdKScpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgaXRlcmF0ZS9kaXNjYXJkJywgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgdCA9IGcuVigpLmNvdW50KCk7CisgICAgICB0Lml0ZXJhdGUoKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0LmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpLCAnZy5WKCkuY291bnQoKS5kaXNjYXJkKCknKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIENhcmRpbmFsaXR5VmFsdWUubGlzdCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgKKyAgICAgICAgZy5pbmplY3QobmV3IE1hcChbWydhZ2UnLCBDYXJkaW5hbGl0eVZhbHVlLmxpc3QoMzMpXV0pKS5nZXRHcmVtbGluTGFuZygpLmdldEdyZW1saW4oKSwKKyAgICAgICAgImcuaW5qZWN0KFsnYWdlJzpDYXJkaW5hbGl0eS5saXN0KDMzKV0pIgorICAgICAgKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIENhcmRpbmFsaXR5VmFsdWUuc2V0JywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKAorICAgICAgICBnLmluamVjdChuZXcgTWFwKFtbJ2FnZScsIENhcmRpbmFsaXR5VmFsdWUuc2V0KDMzKV1dKSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksCisgICAgICAgICJnLmluamVjdChbJ2FnZSc6Q2FyZGluYWxpdHkuc2V0KDMzKV0pIgorICAgICAgKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgaGFuZGxlIENhcmRpbmFsaXR5VmFsdWUuc2luZ2xlJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKAorICAgICAgICBnLmluamVjdChuZXcgTWFwKFtbJ2FnZScsIENhcmRpbmFsaXR5VmFsdWUuc2luZ2xlKDMzKV1dKSkuZ2V0R3JlbWxpbkxhbmcoKS5nZXRHcmVtbGluKCksCisgICAgICAgICJnLmluamVjdChbJ2FnZSc6Q2FyZGluYWxpdHkuc2luZ2xlKDMzKV0pIgorICAgICAgKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvcmVzdWx0LXNldC10ZXN0LmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3Jlc3VsdC1zZXQtdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjc0ZTczCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3Jlc3VsdC1zZXQtdGVzdC5qcwpAQCAtMCwwICsxLDkzIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCisgKi8KKworaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnOworaW1wb3J0IFJlc3VsdFNldCBmcm9tICcuLi8uLi9saWIvZHJpdmVyL3Jlc3VsdC1zZXQuanMnOworCitkZXNjcmliZSgnUmVzdWx0U2V0JywgZnVuY3Rpb24gKCkgeworICBkZXNjcmliZSgnI3RvQXJyYXkoKScsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSBvZiBpdGVtcycsICgpID0+IHsKKyAgICAgIGNvbnN0IGl0ZW1zID0gWydhJywgJ2InXTsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXN1bHRTZXQoaXRlbXMpOworICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkocmVzdWx0LnRvQXJyYXkoKSkpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQudG9BcnJheSgpLCBpdGVtcyk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjbGVuZ3RoJywgKCkgPT4geworICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGl0ZW1zJywgKCkgPT4geworICAgICAgY29uc3QgaXRlbXMgPSBbJ2EnLCAnYicsIDEsIDBdOworICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IFJlc3VsdFNldChpdGVtcyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgaXRlbXMubGVuZ3RoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNmaXJzdCgpJywgKCkgPT4geworICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBmaXJzdCBpdGVtIHdoZW4gdGhlcmUgYXJlIG9uZSBvciBtb3JlIHRoYW4gb25lIGl0ZW0nLCAoKSA9PiB7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobmV3IFJlc3VsdFNldChbJ2EnLCAnYiddKS5maXJzdCgpLCAnYScpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBSZXN1bHRTZXQoWyd6J10pLmZpcnN0KCksICd6Jyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlcmUgYXJlIG5vIGl0ZW1zJywgKCkgPT4geworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG5ldyBSZXN1bHRTZXQoW10pLmZpcnN0KCksIG51bGwpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnI1tTeW1ib2wuaXRlcmF0b3JdKCknLCAoKSA9PiB7CisgICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGJlIGl0ZXJhYmxlJywgKCkgPT4geworICAgICAgY29uc3QgaXRlbXMgPSBbMSwgMiwgM107CisgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUmVzdWx0U2V0KGl0ZW1zKTsKKyAgICAgIGNvbnN0IG9idGFpbmVkID0gW107CisgICAgICBmb3IgKGxldCBpdGVtIG9mIHJlc3VsdCkgeworICAgICAgICBvYnRhaW5lZC5wdXNoKGl0ZW0pOworICAgICAgfQorCisgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG9idGFpbmVkLCBpdGVtcyk7CisgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEFycmF5LmZyb20ocmVzdWx0KSwgaXRlbXMpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnI1t1dGlsLmluc3BlY3QuY3VzdG9tXSgpJywgKCkgPT4geworICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBBcnJheSByZXByZXNlbnRhdGlvbicsICgpID0+IHsKKyAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwobmV3IFJlc3VsdFNldChbMSwgMiwgM10pLml0ZW1zLCBbMSwgMiwgM10pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnI2F0dHJpYnV0ZXMnLCAoKSA9PiB7CisgICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGFuIGVtcHR5IE1hcCB3aGVuIG5vdCBkZWZpbmVkJywgKCkgPT4geworICAgICAgY29uc3QgcnMgPSBuZXcgUmVzdWx0U2V0KFtdKTsKKyAgICAgIGFzc2VydC5vayhycy5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTWFwKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChycy5hdHRyaWJ1dGVzLnNpemUsIDApOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGF0dHJpYnV0ZXMgd2hlbiBkZWZpbmVkJywgKCkgPT4geworICAgICAgY29uc3QgYXR0cmlidXRlcyA9IG5ldyBNYXAoWworICAgICAgICBbJ2EnLCAxXSwKKyAgICAgICAgWydiJywgMV0sCisgICAgICBdKTsKKyAgICAgIGNvbnN0IHJzID0gbmV3IFJlc3VsdFNldChbXSwgYXR0cmlidXRlcyk7CisgICAgICBhc3NlcnQub2socnMuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE1hcCk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocnMuYXR0cmlidXRlcywgYXR0cmlidXRlcyk7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvc3RydWN0dXJlLXR5cGVzLXRlc3QuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvc3RydWN0dXJlLXR5cGVzLXRlc3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiYzRiYQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC9zdHJ1Y3R1cmUtdHlwZXMtdGVzdC5qcwpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBhdXRob3IgSm9yZ2UgQmF5IEdvbmRyYQorICovCisKK2ltcG9ydCB7IGFzc2VydCB9IGZyb20gJ2NoYWknOworaW1wb3J0IHsgVmVydGV4UHJvcGVydHksIFByb3BlcnR5LCBWZXJ0ZXgsIEVkZ2UsIFBhdGggfSBmcm9tICcuLi8uLi9saWIvc3RydWN0dXJlL2dyYXBoLmpzJzsKKworZGVzY3JpYmUoJ0VkZ2UnLCAoKSA9PiB7CisgIGRlc2NyaWJlKCcjdG9TdHJpbmcoKScsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHN1cHBvcnQgZW1wdHkgb3V0ViBhbmQgaW5WJywgKCkgPT4geworICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBFZGdlKCcxMjMnLCBudWxsLCAnbGFiZWwxJywgdW5kZWZpbmVkLCBudWxsKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbGVtZW50LnRvU3RyaW5nKCksIGBlWzEyM11bPy1sYWJlbDEtPj9dYCk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdwcm9wZXJ0aWVzJywgKCkgPT4geworICAgIGl0KCdzaG91bGQgZGVmYXVsdCB0byBlbXB0eSBhcnJheSB3aGVuIG5vdCBwcm92aWRlZCcsICgpID0+IHsKKyAgICAgIGNvbnN0IGVkZ2UgPSBuZXcgRWRnZSgnMTIzJywgbmV3IFZlcnRleCgxKSwgJ2tub3dzJywgbmV3IFZlcnRleCgyKSk7CisgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGVkZ2UucHJvcGVydGllcywgW10pOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGVtcHR5IGFycmF5IHdoZW4gdW5kZWZpbmVkJywgKCkgPT4geworICAgICAgY29uc3QgZWRnZSA9IG5ldyBFZGdlKCcxMjMnLCBuZXcgVmVydGV4KDEpLCAna25vd3MnLCBuZXcgVmVydGV4KDIpLCB1bmRlZmluZWQpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChlZGdlLnByb3BlcnRpZXMsIFtdKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ1ZlcnRleCcsICgpID0+IHsKKyAgZGVzY3JpYmUoJyN0b1N0cmluZygpJywgKCkgPT4geworICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYmFzZWQgb24gdGhlIGlkJywgKCkgPT4geworICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBWZXJ0ZXgoLTIwMCwgJ2xhYmVsMScsIG51bGwpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVsZW1lbnQudG9TdHJpbmcoKSwgYHZbLTIwMF1gKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ3Byb3BlcnRpZXMnLCAoKSA9PiB7CisgICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGVtcHR5IGFycmF5IHdoZW4gbm90IHByb3ZpZGVkJywgKCkgPT4geworICAgICAgY29uc3QgdmVydGV4ID0gbmV3IFZlcnRleCgxLCAncGVyc29uJyk7CisgICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHZlcnRleC5wcm9wZXJ0aWVzLCBbXSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gZW1wdHkgYXJyYXkgd2hlbiB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAgICBjb25zdCB2ZXJ0ZXggPSBuZXcgVmVydGV4KDEsICdwZXJzb24nLCB1bmRlZmluZWQpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh2ZXJ0ZXgucHJvcGVydGllcywgW10pOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGVtcHR5IGFycmF5IHdoZW4gbnVsbCcsICgpID0+IHsKKyAgICAgIGNvbnN0IHZlcnRleCA9IG5ldyBWZXJ0ZXgoMSwgJ3BlcnNvbicsIG51bGwpOworICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbCh2ZXJ0ZXgucHJvcGVydGllcywgW10pOworICAgIH0pOworICB9KTsKK30pOworCitkZXNjcmliZSgnVmVydGV4UHJvcGVydHknLCAoKSA9PiB7CisgIGRlc2NyaWJlKCcjdG9TdHJpbmcoKScsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFuZCBzdW1tYXJpemUnLCAoKSA9PiB7CisgICAgICBbCisgICAgICAgIFsgbmV3IFZlcnRleFByb3BlcnR5KDEsICdsYWJlbDEnLCAndmFsdWUxJyksICd2cFtsYWJlbDEtPnZhbHVlMV0nIF0sCisgICAgICAgIFsgbmV3IFZlcnRleFByb3BlcnR5KDEsICdsYWJlbDInLCBudWxsKSwgJ3ZwW2xhYmVsMi0+bnVsbF0nIF0sCisgICAgICAgIFsgbmV3IFZlcnRleFByb3BlcnR5KDEsICdsYWJlbDMnLCB1bmRlZmluZWQpLCAndnBbbGFiZWwzLT51bmRlZmluZWRdJyBdLAorICAgICAgICBbIG5ldyBWZXJ0ZXhQcm9wZXJ0eSgxLCAnbGFiZWw0JywgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyksICd2cFtsYWJlbDQtPmFiY2RlZmdoaWprbG1ub3BxcnN0XScgXQorICAgICAgXS5mb3JFYWNoKGl0ZW0gPT4geworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbVswXS50b1N0cmluZygpLCBpdGVtWzFdKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgncHJvcGVydGllcycsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIGRlZmF1bHQgdG8gZW1wdHkgYXJyYXkgd2hlbiBub3QgcHJvdmlkZWQnLCAoKSA9PiB7CisgICAgICBjb25zdCB2cCA9IG5ldyBWZXJ0ZXhQcm9wZXJ0eSgyNCwgJ25hbWUnLCAnbWFya28nKTsKKyAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodnAucHJvcGVydGllcywgW10pOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBkZWZhdWx0IHRvIGVtcHR5IGFycmF5IHdoZW4gdW5kZWZpbmVkJywgKCkgPT4geworICAgICAgY29uc3QgdnAgPSBuZXcgVmVydGV4UHJvcGVydHkoMjQsICduYW1lJywgJ21hcmtvJywgdW5kZWZpbmVkKTsKKyAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodnAucHJvcGVydGllcywgW10pOworICAgIH0pOworICB9KTsKK30pOworCitkZXNjcmliZSgnUHJvcGVydHknLCAoKSA9PiB7CisgIGRlc2NyaWJlKCcjdG9TdHJpbmcoKScsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFuZCBzdW1tYXJpemUnLCAoKSA9PiB7CisgICAgICBbCisgICAgICAgIFsgbmV3IFByb3BlcnR5KCdrZXkxJywgJ3ZhbHVlMScpLCAncFtrZXkxLT52YWx1ZTFdJyBdLAorICAgICAgICBbIG5ldyBQcm9wZXJ0eSgna2V5MicsIG51bGwpLCAncFtrZXkyLT5udWxsXScgXSwKKyAgICAgICAgWyBuZXcgUHJvcGVydHkoJ2tleTMnLCB1bmRlZmluZWQpLCAncFtrZXkzLT51bmRlZmluZWRdJyBdLAorICAgICAgICBbIG5ldyBQcm9wZXJ0eSgna2V5NCcsICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicpLCAncFtrZXk0LT5hYmNkZWZnaGlqa2xtbm9wcXJzdF0nIF0KKyAgICAgIF0uZm9yRWFjaChpdGVtID0+IHsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW1bMF0udG9TdHJpbmcoKSwgaXRlbVsxXSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ1BhdGgnLCAoKSA9PiB7CisgIGRlc2NyaWJlKCcjdG9TdHJpbmcoKScsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFuZCBzdW1tYXJpemUnLCAoKSA9PiB7CisgICAgICBbCisgICAgICAgIFsgbmV3IFBhdGgoWydhJywgJ2InXSwgWzEsIDJdKSwgJ3BhdGhbMSwgMl0nIF0sCisgICAgICAgIFsgbmV3IFBhdGgoWydhJywgJ2InXSwgbnVsbCksICdwYXRoW10nIF0KKyAgICAgIF0uZm9yRWFjaChpdGVtID0+IHsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW1bMF0udG9TdHJpbmcoKSwgaXRlbVsxXSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhbnNsYXRvci9jb3JwdXMtdGVzdC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC90cmFuc2xhdG9yL2NvcnB1cy10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYjBmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhbnNsYXRvci9jb3JwdXMtdGVzdC5qcwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnOworaW1wb3J0IGZzIGZyb20gJ2ZzJzsKK2ltcG9ydCBwYXRoIGZyb20gJ3BhdGgnOworaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7CitpbXBvcnQgeyBHcmVtbGluVHJhbnNsYXRvciB9IGZyb20gJy4uLy4uLy4uL2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dyZW1saW5UcmFuc2xhdG9yLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3JFeGNlcHRpb24gfSBmcm9tICcuLi8uLi8uLi9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdG9yRXhjZXB0aW9uLmpzJzsKK2ltcG9ydCB7IFRyYW5zbGF0b3IgfSBmcm9tICcuLi8uLi8uLi9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9UcmFuc2xhdG9yLmpzJzsKKworY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7CisKKy8vIFNlYXJjaCBmb3IgdHJhbnNsYXRpb25zLmpzb24gdXAgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkKK2Z1bmN0aW9uIGZpbmRUcmFuc2xhdGlvbnNQYXRoKCkgeworICBsZXQgY3VycmVudCA9IF9fZGlybmFtZTsKKyAgd2hpbGUgKGN1cnJlbnQgIT09IHBhdGgucGFyc2UoY3VycmVudCkucm9vdCkgeworICAgIGNvbnN0IHAgPSBwYXRoLmpvaW4oCisgICAgICBjdXJyZW50LAorICAgICAgJ2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9sYW5ndWFnZS90cmFuc2xhdG9yL3RyYW5zbGF0aW9ucy5qc29uJywKKyAgICApOworICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gcDsKKyAgICBjdXJyZW50ID0gcGF0aC5kaXJuYW1lKGN1cnJlbnQpOworICB9CisgIHJldHVybiBudWxsOworfQorCitjb25zdCB0cmFuc2xhdGlvbnNQYXRoID0gZmluZFRyYW5zbGF0aW9uc1BhdGgoKTsKKworZGVzY3JpYmUoJ0dyZW1saW5UcmFuc2xhdG9yIGNvcnB1cycsIGZ1bmN0aW9uICgpIHsKKyAgbGV0IHNjZW5hcmlvcyA9IFtdOworICBpZiAodHJhbnNsYXRpb25zUGF0aCAmJiBmcy5leGlzdHNTeW5jKHRyYW5zbGF0aW9uc1BhdGgpKSB7CisgICAgc2NlbmFyaW9zID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModHJhbnNsYXRpb25zUGF0aCwgJ3V0ZjgnKSk7CisgIH0KKworICBpdCgndHJhbnNsYXRpb25zLmpzb24gc2hvdWxkIGJlIHByZXNlbnQgYW5kIGxvYWRlZCcsIGZ1bmN0aW9uICgpIHsKKyAgICBhc3NlcnQub2soCisgICAgICB0cmFuc2xhdGlvbnNQYXRoICE9PSBudWxsLAorICAgICAgJ0NvdWxkIG5vdCBmaW5kIHRyYW5zbGF0aW9ucy5qc29uIGluIHRoZSBwcm9qZWN0IHN0cnVjdHVyZS4gUnVuIG12biBnZW5lcmF0ZS1yZXNvdXJjZXMgaW4gZ3JlbWxpbi10ZXN0LicsCisgICAgKTsKKyAgICBhc3NlcnQub2soc2NlbmFyaW9zLmxlbmd0aCA+IDAsICd0cmFuc2xhdGlvbnMuanNvbiBpcyBlbXB0eScpOworICB9KTsKKworICBkZXNjcmliZSgncGVyLXNjZW5hcmlvIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkgeworICAgIHNjZW5hcmlvcy5mb3JFYWNoKChzY2VuYXJpbykgPT4geworICAgICAgc2NlbmFyaW8udHJhdmVyc2Fscy5mb3JFYWNoKCh0cmF2ZXJzYWwpID0+IHsKKyAgICAgICAgY29uc3QgeyBvcmlnaW5hbCB9ID0gdHJhdmVyc2FsOworCisgICAgICAgIC8vIEphdmFTY3JpcHQKKyAgICAgICAgY29uc3QganNFeHBlY3RlZCA9IHRyYXZlcnNhbFsnamF2YXNjcmlwdCddOworICAgICAgICBpZiAoanNFeHBlY3RlZCAhPT0gdW5kZWZpbmVkICYmIGpzRXhwZWN0ZWQgIT09IG51bGwpIHsKKyAgICAgICAgICBpdChgW2phdmFzY3JpcHRdIHRyYW5zbGF0ZXMgWyR7c2NlbmFyaW8uc2NlbmFyaW99XTogJHtvcmlnaW5hbH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsICdnJywgJ0pBVkFTQ1JJUFQnKTsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCBqc0V4cGVjdGVkKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpdChgW2phdmFzY3JpcHRdIHRocm93cyBmb3IgdW50cmFuc2xhdGFibGUgWyR7c2NlbmFyaW8uc2NlbmFyaW99XTogJHtvcmlnaW5hbH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbCwgJ2cnLCAnSkFWQVNDUklQVCcpLCBUcmFuc2xhdG9yRXhjZXB0aW9uKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFB5dGhvbgorICAgICAgICBjb25zdCBweUV4cGVjdGVkID0gdHJhdmVyc2FsWydweXRob24nXTsKKyAgICAgICAgaWYgKHB5RXhwZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiBweUV4cGVjdGVkICE9PSBudWxsKSB7CisgICAgICAgICAgaXQoYFtweXRob25dIHRyYW5zbGF0ZXMgWyR7c2NlbmFyaW8uc2NlbmFyaW99XTogJHtvcmlnaW5hbH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsICdnJywgJ1BZVEhPTicpOworICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5nZXRUcmFuc2xhdGVkKCksIHB5RXhwZWN0ZWQpOworICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGl0KGBbcHl0aG9uXSB0aHJvd3MgZm9yIHVudHJhbnNsYXRhYmxlIFske3NjZW5hcmlvLnNjZW5hcmlvfV06ICR7b3JpZ2luYWx9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsICdnJywgJ1BZVEhPTicpLCBUcmFuc2xhdG9yRXhjZXB0aW9uKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIC5ORVQKKyAgICAgICAgY29uc3QgZG90bmV0RXhwZWN0ZWQgPSB0cmF2ZXJzYWxbJ2RvdG5ldCddOworICAgICAgICBpZiAoZG90bmV0RXhwZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiBkb3RuZXRFeHBlY3RlZCAhPT0gbnVsbCkgeworICAgICAgICAgIGl0KGBbZG90bmV0XSB0cmFuc2xhdGVzIFske3NjZW5hcmlvLnNjZW5hcmlvfV06ICR7b3JpZ2luYWx9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLCAnZycsICdET1RORVQnKTsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCBkb3RuZXRFeHBlY3RlZCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaXQoYFtkb3RuZXRdIHRocm93cyBmb3IgdW50cmFuc2xhdGFibGUgWyR7c2NlbmFyaW8uc2NlbmFyaW99XTogJHtvcmlnaW5hbH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbCwgJ2cnLCAnRE9UTkVUJyksIFRyYW5zbGF0b3JFeGNlcHRpb24pOworICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gR28KKyAgICAgICAgY29uc3QgZ29FeHBlY3RlZCA9IHRyYXZlcnNhbFsnZ28nXTsKKyAgICAgICAgaWYgKGdvRXhwZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiBnb0V4cGVjdGVkICE9PSBudWxsKSB7CisgICAgICAgICAgaXQoYFtnb10gdHJhbnNsYXRlcyBbJHtzY2VuYXJpby5zY2VuYXJpb31dOiAke29yaWdpbmFsfWAsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbCwgJ2cnLCAnR08nKTsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCBnb0V4cGVjdGVkKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpdChgW2dvXSB0aHJvd3MgZm9yIHVudHJhbnNsYXRhYmxlIFske3NjZW5hcmlvLnNjZW5hcmlvfV06ICR7b3JpZ2luYWx9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsICdnJywgJ0dPJyksIFRyYW5zbGF0b3JFeGNlcHRpb24pOworICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gQW5vbnltaXplZAorICAgICAgICBjb25zdCBhbm9ueW1pemVkRXhwZWN0ZWQgPSB0cmF2ZXJzYWxbJ2Fub255bWl6ZWQnXTsKKyAgICAgICAgaWYgKGFub255bWl6ZWRFeHBlY3RlZCAhPT0gdW5kZWZpbmVkICYmIGFub255bWl6ZWRFeHBlY3RlZCAhPT0gbnVsbCkgeworICAgICAgICAgIGl0KGBbYW5vbnltaXplZF0gdHJhbnNsYXRlcyBbJHtzY2VuYXJpby5zY2VuYXJpb31dOiAke29yaWdpbmFsfWAsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbCwgJ2cnLCAnQU5PTllNSVpFRCcpOworICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5nZXRUcmFuc2xhdGVkKCksIGFub255bWl6ZWRFeHBlY3RlZCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaXQoYFthbm9ueW1pemVkXSB0aHJvd3MgZm9yIHVudHJhbnNsYXRhYmxlIFske3NjZW5hcmlvLnNjZW5hcmlvfV06ICR7b3JpZ2luYWx9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsICdnJywgJ0FOT05ZTUlaRUQnKSwgVHJhbnNsYXRvckV4Y2VwdGlvbik7CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm9vdnkKKyAgICAgICAgY29uc3QgZ3Jvb3Z5RXhwZWN0ZWQgPSB0cmF2ZXJzYWxbJ2dyb292eSddOworICAgICAgICBpZiAoZ3Jvb3Z5RXhwZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiBncm9vdnlFeHBlY3RlZCAhPT0gbnVsbCkgeworICAgICAgICAgIGl0KGBbZ3Jvb3Z5XSB0cmFuc2xhdGVzIFske3NjZW5hcmlvLnNjZW5hcmlvfV06ICR7b3JpZ2luYWx9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKG9yaWdpbmFsLCAnZycsICdHUk9PVlknKTsKKyAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCBncm9vdnlFeHBlY3RlZCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaXQoYFtncm9vdnldIHRocm93cyBmb3IgdW50cmFuc2xhdGFibGUgWyR7c2NlbmFyaW8uc2NlbmFyaW99XTogJHtvcmlnaW5hbH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbCwgJ2cnLCAnR1JPT1ZZJyksIFRyYW5zbGF0b3JFeGNlcHRpb24pOworICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gSmF2YQorICAgICAgICBjb25zdCBqYXZhRXhwZWN0ZWQgPSB0cmF2ZXJzYWxbJ2phdmEnXTsKKyAgICAgICAgaWYgKGphdmFFeHBlY3RlZCAhPT0gdW5kZWZpbmVkICYmIGphdmFFeHBlY3RlZCAhPT0gbnVsbCkgeworICAgICAgICAgIGl0KGBbamF2YV0gdHJhbnNsYXRlcyBbJHtzY2VuYXJpby5zY2VuYXJpb31dOiAke29yaWdpbmFsfWAsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShvcmlnaW5hbCwgJ2cnLCAnSkFWQScpOworICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5nZXRUcmFuc2xhdGVkKCksIGphdmFFeHBlY3RlZCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaXQoYFtqYXZhXSB0aHJvd3MgZm9yIHVudHJhbnNsYXRhYmxlIFske3NjZW5hcmlvLnNjZW5hcmlvfV06ICR7b3JpZ2luYWx9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsICdnJywgJ0pBVkEnKSwgVHJhbnNsYXRvckV4Y2VwdGlvbik7CisgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYW5zbGF0b3IvZ3JlbWxpbi10cmFuc2xhdG9yLXRlc3QuanMgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90ZXN0L3VuaXQvdHJhbnNsYXRvci9ncmVtbGluLXRyYW5zbGF0b3ItdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjg2NmMzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYW5zbGF0b3IvZ3JlbWxpbi10cmFuc2xhdG9yLXRlc3QuanMKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK2ltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JzsKK2ltcG9ydCB7IEdyZW1saW5UcmFuc2xhdG9yIH0gZnJvbSAnLi4vLi4vLi4vbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvR3JlbWxpblRyYW5zbGF0b3IuanMnOworaW1wb3J0IHsgVHJhbnNsYXRvckV4Y2VwdGlvbiB9IGZyb20gJy4uLy4uLy4uL2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1RyYW5zbGF0b3JFeGNlcHRpb24uanMnOworaW1wb3J0IHsgVHJhbnNsYXRvciB9IGZyb20gJy4uLy4uLy4uL2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL1RyYW5zbGF0b3IuanMnOworaW1wb3J0IFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi4vLi4vLi4vbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgSmF2YXNjcmlwdFRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi4vLi4vLi4vbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvSmF2YXNjcmlwdFRyYW5zbGF0ZVZpc2l0b3IuanMnOworaW1wb3J0IFB5dGhvblRyYW5zbGF0ZVZpc2l0b3IgZnJvbSAnLi4vLi4vLi4vbGliL2xhbmd1YWdlL3RyYW5zbGF0b3IvUHl0aG9uVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgR29UcmFuc2xhdGVWaXNpdG9yIGZyb20gJy4uLy4uLy4uL2xpYi9sYW5ndWFnZS90cmFuc2xhdG9yL0dvVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgRG90TmV0VHJhbnNsYXRlVmlzaXRvciBmcm9tICcuLi8uLi8uLi9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9Eb3ROZXRUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCBKYXZhVHJhbnNsYXRlVmlzaXRvciBmcm9tICcuLi8uLi8uLi9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9KYXZhVHJhbnNsYXRlVmlzaXRvci5qcyc7CitpbXBvcnQgR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvciBmcm9tICcuLi8uLi8uLi9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9Hcm9vdnlUcmFuc2xhdGVWaXNpdG9yLmpzJzsKK2ltcG9ydCBBbm9ueW1pemVkVHJhbnNsYXRlVmlzaXRvciBmcm9tICcuLi8uLi8uLi9saWIvbGFuZ3VhZ2UvdHJhbnNsYXRvci9Bbm9ueW1pemVkVHJhbnNsYXRlVmlzaXRvci5qcyc7CisKK2Rlc2NyaWJlKCdHcmVtbGluVHJhbnNsYXRvcicsIGZ1bmN0aW9uICgpIHsKKyAgZGVzY3JpYmUoJ2Jhc2ljIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkgeworICAgIGNvbnN0IHRlc3RzID0gWworICAgICAgLy8gYmFzaWMgdHJhdmVyc2FscworICAgICAgWydnLlYoKScsICdnLlYoKSddLAorICAgICAgWydnLlYoMSknLCAnZy5WKDEpJ10sCisgICAgICBbJ2cuVigibmFtZSIpJywgJ2cuVigibmFtZSIpJ10sCisgICAgICBbJ2cuVigpLmhhc0xhYmVsKCJwZXJzb24iKScsICdnLlYoKS5oYXNMYWJlbCgicGVyc29uIiknXSwKKyAgICAgIFsnZy5WKCkub3V0KCJrbm93cyIpJywgJ2cuVigpLm91dCgia25vd3MiKSddLAorICAgICAgLy8gcmVzZXJ2ZWQgd29yZCBtYXBwaW5nCisgICAgICBbJ2cuVigpLmluKCJrbm93cyIpJywgJ2cuVigpLmluXygia25vd3MiKSddLAorICAgICAgWydnLlYoKS5mcm9tKCJhIiknLCAnZy5WKCkuZnJvbV8oImEiKSddLAorICAgICAgLy8gYW5vbnltb3VzIHRyYXZlcnNhbAorICAgICAgWydnLlYoKS53aGVyZShfXy5vdXQoImtub3dzIikpJywgJ2cuVigpLndoZXJlKF9fLm91dCgia25vd3MiKSknXSwKKyAgICAgIC8vIGVudW0gZXhwbGljaXQgbmFtaW5nCisgICAgICBbJ2cuVigpLm9yZGVyKCkuYnkoVC5pZCknLCAnZy5WKCkub3JkZXIoKS5ieShULmlkKSddLAorICAgICAgWydnLlYoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYyknLCAnZy5WKCkub3JkZXIoKS5ieShPcmRlci5hc2MpJ10sCisgICAgICAvLyBwcmVkaWNhdGVzCisgICAgICBbJ2cuVigpLmhhcygiYWdlIiwgUC5ndCgzMCkpJywgJ2cuVigpLmhhcygiYWdlIiwgUC5ndCgzMCkpJ10sCisgICAgICBbJ2cuVigpLmhhcygibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoIm1hciIpKScsICdnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5jb250YWluaW5nKCJtYXIiKSknXSwKKyAgICAgIC8vIGludGVnZXIgc3VmZml4IHN0cmlwcGluZworICAgICAgWydnLlYoKS5yYW5nZSgwLCAxMGwpJywgJ2cuVigpLnJhbmdlKDAsIDEwKSddLAorICAgICAgLy8gZmxvYXQgc3VmZml4IHN0cmlwcGluZworICAgICAgWydnLlYoKS5oYXMoIndlaWdodCIsIFAuZ3QoMC41ZikpJywgJ2cuVigpLmhhcygid2VpZ2h0IiwgUC5ndCgwLjUpKSddLAorICAgICAgLy8gTWFwIGxpdGVyYWwKKyAgICAgIFsnZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCBbKFQubGFiZWwpOiAicGVyc29uIl0pJywgJ2cuYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgbmV3IE1hcChbW1QubGFiZWwsICJwZXJzb24iXV0pKSddLAorICAgICAgLy8gU2V0IGxpdGVyYWwKKyAgICAgIFsnZy5pbmplY3QoezEsMiwzfSknLCAnZy5pbmplY3QobmV3IFNldChbMSwgMiwgM10pKSddLAorICAgICAgLy8gQ29sbGVjdGlvbiBsaXRlcmFsCisgICAgICBbJ2cuaW5qZWN0KFsxLDIsM10pJywgJ2cuaW5qZWN0KFsxLCAyLCAzXSknXSwKKyAgICAgIC8vIE5hbi9JbmYKKyAgICAgIFsnZy5pbmplY3QoTmFOKScsICdnLmluamVjdChOdW1iZXIuTmFOKSddLAorICAgICAgWydnLmluamVjdChJbmZpbml0eSknLCAnZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSddLAorICAgICAgWydnLmluamVjdCgtSW5maW5pdHkpJywgJ2cuaW5qZWN0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSknXSwKKyAgICAgIC8vIHRlcm1pbmFsIHN0ZXBzIOKAlCBwYXNzIHRocm91Z2ggYXMtaXMgaW4gSmF2YVNjcmlwdAorICAgICAgWydnLlYoKS50b0xpc3QoKScsICdnLlYoKS50b0xpc3QoKSddLAorICAgICAgWydnLlYoKS50b1NldCgpJywgJ2cuVigpLnRvU2V0KCknXSwKKyAgICAgIFsnZy5WKCkudG9CdWxrU2V0KCknLCAnZy5WKCkudG9CdWxrU2V0KCknXSwKKyAgICAgIFsnZy5WKCkuaXRlcmF0ZSgpJywgJ2cuVigpLml0ZXJhdGUoKSddLAorICAgICAgWydnLlYoKS5oYXNOZXh0KCknLCAnZy5WKCkuaGFzTmV4dCgpJ10sCisgICAgICBbJ2cuVigpLnRyeU5leHQoKScsICdnLlYoKS50cnlOZXh0KCknXSwKKyAgICAgIFsnZy5WKCkubmV4dCgpJywgJ2cuVigpLm5leHQoKSddLAorICAgICAgWydnLlYoKS5uZXh0KDIpJywgJ2cuVigpLm5leHQoMiknXSwKKyAgICAgIC8vIHRyYW5zYWN0aW9uIHN0ZXBzIOKAlCBwYXNzIHRocm91Z2ggYXMtaXMgaW4gSmF2YVNjcmlwdAorICAgICAgWydnLnR4KCkuYmVnaW4oKScsICdnLnR4KCkuYmVnaW4oKSddLAorICAgICAgWydnLnR4KCkuY29tbWl0KCknLCAnZy50eCgpLmNvbW1pdCgpJ10sCisgICAgICBbJ2cudHgoKS5yb2xsYmFjaygpJywgJ2cudHgoKS5yb2xsYmFjaygpJ10sCisgICAgXTsKKworICAgIHRlc3RzLmZvckVhY2goZnVuY3Rpb24gKFtpbnB1dCwgZXhwZWN0ZWRdKSB7CisgICAgICBpdChgdHJhbnNsYXRlczogJHtpbnB1dH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShpbnB1dCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCBleHBlY3RlZCk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ2N1c3RvbSBncmFwaFRyYXZlcnNhbFNvdXJjZU5hbWUnLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3VzZXMgY3VzdG9tIHNvdXJjZSBuYW1lJywgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgcmVzdWx0ID0gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCdnLlYoKScsICdzb3VyY2UnKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCAnc291cmNlLlYoKScpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnVHJhbnNsYXRvciByZWdpc3RyeScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnYWNjZXB0cyBKQVZBU0NSSVBUIGtleScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgnZy5WKCknLCAnZycsICdKQVZBU0NSSVBUJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmdldFRyYW5zbGF0ZWQoKSwgJ2cuVigpJyk7CisgICAgfSk7CisKKyAgICBpdCgnaGFzIEpBVkFTQ1JJUFQgZmFjdG9yeScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHZpc2l0b3IgPSBUcmFuc2xhdG9yLkpBVkFTQ1JJUFQoJ2cnKTsKKyAgICAgIGFzc2VydC5vayh2aXNpdG9yIGluc3RhbmNlb2YgSmF2YXNjcmlwdFRyYW5zbGF0ZVZpc2l0b3IpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnY3VzdG9tIHZpc2l0b3InLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ2FjY2VwdHMgVHJhbnNsYXRlVmlzaXRvciBzdWJjbGFzcyBkaXJlY3RseScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHZpc2l0b3IgPSBuZXcgSmF2YXNjcmlwdFRyYW5zbGF0ZVZpc2l0b3IoJ215RycpOworICAgICAgY29uc3QgcmVzdWx0ID0gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCdnLlYoKScsICdteUcnLCB2aXNpdG9yKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCAnbXlHLlYoKScpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgncGFyYW1ldGVyIHRyYWNraW5nJywgZnVuY3Rpb24gKCkgeworICAgIGl0KCd0cmFja3MgdmFyaWFibGVzIGFzIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoJ2cuVih2aWQxKScpOworICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5nZXRQYXJhbWV0ZXJzKCkuaGFzKCd2aWQxJykpOworICAgIH0pOworCisgICAgaXQoJ3JldHVybnMgb3JpZ2luYWwgcXVlcnknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBxdWVyeSA9ICdnLlYoKS5oYXNMYWJlbCgicGVyc29uIiknOworICAgICAgY29uc3QgcmVzdWx0ID0gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKHF1ZXJ5KTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0T3JpZ2luYWwoKSwgcXVlcnkpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgncmFuZ2UgbGl0ZXJhbHMgdGhyb3cnLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Rocm93cyBUcmFuc2xhdG9yRXhjZXB0aW9uIGZvciByYW5nZSBsaXRlcmFsJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnRocm93cygKKyAgICAgICAgKCkgPT4gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCdnLmluamVjdCgxLi41KScpLAorICAgICAgICBUcmFuc2xhdG9yRXhjZXB0aW9uLAorICAgICAgKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ1B5dGhvblRyYW5zbGF0ZVZpc2l0b3InLCBmdW5jdGlvbiAoKSB7CisgIGNvbnN0IHRyYW5zbGF0ZSA9IChxKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUocSwgJ2cnLCAnUFlUSE9OJykuZ2V0VHJhbnNsYXRlZCgpOworCisgIGRlc2NyaWJlKCdiYXNpYyB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHsKKyAgICBjb25zdCB0ZXN0cyA9IFsKKyAgICAgIC8vIGJhc2ljIHRyYXZlcnNhbHMg4oCUIGNhbWVsQ2FzZSBtZXRob2RzIGJlY29tZSBzbmFrZV9jYXNlCisgICAgICBbJ2cuVigpJywgJ2cuVigpJ10sCisgICAgICBbJ2cuVigxKScsICdnLlYoMSknXSwKKyAgICAgIFsnZy5WKCJuYW1lIiknLCAiZy5WKCduYW1lJykiXSwKKyAgICAgIFsnZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpJywgImcuVigpLmhhc19sYWJlbCgncGVyc29uJykiXSwKKyAgICAgIFsnZy5WKCkub3V0KCJrbm93cyIpJywgImcuVigpLm91dCgna25vd3MnKSJdLAorICAgICAgLy8gcmVzZXJ2ZWQgd29yZCBtYXBwaW5nCisgICAgICBbJ2cuVigpLmluKCJrbm93cyIpJywgImcuVigpLmluXygna25vd3MnKSJdLAorICAgICAgWydnLlYoKS5mcm9tKCJhIiknLCAiZy5WKCkuZnJvbV8oJ2EnKSJdLAorICAgICAgWydnLlYoKS5maWx0ZXIoX18uaGFzKCJuYW1lIikpJywgJ2cuVigpLmZpbHRlcl8oX18uaGFzKFwnbmFtZVwnKSknXSwKKyAgICAgIC8vIHN0cmluZyBsaXRlcmFscyB1c2Ugc2luZ2xlIHF1b3RlcworICAgICAgWydnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKScsICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKSJdLAorICAgICAgLy8gYm9vbGVhbiBjYXBpdGFsaXNhdGlvbgorICAgICAgWydnLlYoKS5oYXMoImFjdGl2ZSIsIHRydWUpJywgImcuVigpLmhhcygnYWN0aXZlJywgVHJ1ZSkiXSwKKyAgICAgIFsnZy5WKCkuaGFzKCJhY3RpdmUiLCBmYWxzZSknLCAiZy5WKCkuaGFzKCdhY3RpdmUnLCBGYWxzZSkiXSwKKyAgICAgIC8vIG51bGwg4oaSIE5vbmUKKyAgICAgIFsnZy5WKCkuaGFzKCJuYW1lIiwgbnVsbCknLCAiZy5WKCkuaGFzKCduYW1lJywgTm9uZSkiXSwKKyAgICAgIC8vIGVudW0gZXhwbGljaXQgbmFtaW5nIOKAlCBULmlkIOKGkiBULmlkXyBpbiBQeXRob24gKGlkIGlzIGEgYnVpbHRpbikKKyAgICAgIFsnZy5WKCkub3JkZXIoKS5ieShULmlkKScsICdnLlYoKS5vcmRlcigpLmJ5KFQuaWRfKSddLAorICAgICAgWydnLlYoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYyknLCAnZy5WKCkub3JkZXIoKS5ieShPcmRlci5hc2MpJ10sCisgICAgICAvLyBjYW1lbENhc2Ugc3RlcCBuYW1lcyDihpIgc25ha2VfY2FzZQorICAgICAgWydnLlYoKS52YWx1ZU1hcCgpJywgJ2cuVigpLnZhbHVlX21hcCgpJ10sCisgICAgICBbJ2cuVigpLm91dEUoKScsICdnLlYoKS5vdXRfZSgpJ10sCisgICAgICAvLyBwcmVkaWNhdGVzCisgICAgICBbJ2cuVigpLmhhcygiYWdlIiwgUC5ndCgzMCkpJywgImcuVigpLmhhcygnYWdlJywgUC5ndCgzMCkpIl0sCisgICAgICBbJ2cuVigpLmhhcygibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoIm1hciIpKScsICJnLlYoKS5oYXMoJ25hbWUnLCBUZXh0UC5jb250YWluaW5nKCdtYXInKSkiXSwKKyAgICAgIC8vIGludGVnZXIgc3VmZml4IHN0cmlwcGluZworICAgICAgWydnLlYoKS5yYW5nZSgwLCAxMGwpJywgJ2cuVigpLnJhbmdlXygwLCBsb25nKDEwKSknXSwKKyAgICAgIC8vIGZsb2F0IHN1ZmZpeCBzdHJpcHBpbmcKKyAgICAgIFsnZy5WKCkuaGFzKCJ3ZWlnaHQiLCBQLmd0KDAuNWYpKScsICJnLlYoKS5oYXMoJ3dlaWdodCcsIFAuZ3QoMC41KSkiXSwKKyAgICAgIC8vIE5hTi9JbmYKKyAgICAgIFsiZy5pbmplY3QoTmFOKSIsICJnLmluamVjdChmbG9hdCgnbmFuJykpIl0sCisgICAgICBbImcuaW5qZWN0KEluZmluaXR5KSIsICJnLmluamVjdChmbG9hdCgnaW5mJykpIl0sCisgICAgICBbImcuaW5qZWN0KC1JbmZpbml0eSkiLCAiZy5pbmplY3QoZmxvYXQoJy1pbmYnKSkiXSwKKyAgICAgIC8vIENvbGxlY3Rpb24gbGl0ZXJhbHMKKyAgICAgIFsnZy5pbmplY3QoWzEsMiwzXSknLCAnZy5pbmplY3QoWzEsIDIsIDNdKSddLAorICAgICAgLy8gU2V0IGxpdGVyYWwgKG5vbi1lbXB0eSkKKyAgICAgIFsnZy5pbmplY3QoezEsMiwzfSknLCAnZy5pbmplY3QoezEsIDIsIDN9KSddLAorICAgICAgLy8gTWFwIGxpdGVyYWwg4oCUIFQuaWQg4oaSIFQuaWRfIGluIFB5dGhvbgorICAgICAgWydnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFQuaWQsIFsoVC5sYWJlbCk6ICJwZXJzb24iXSknLCAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoVC5pZF8sIHsgVC5sYWJlbDogJ3BlcnNvbicgfSkiXSwKKyAgICAgIC8vIHRlcm1pbmFsIHN0ZXBzIOKAlCBjYW1lbENhc2Ug4oaSIHNuYWtlX2Nhc2UKKyAgICAgIFsnZy5WKCkudG9MaXN0KCknLCAnZy5WKCkudG9fbGlzdCgpJ10sCisgICAgICBbJ2cuVigpLnRvU2V0KCknLCAnZy5WKCkudG9fc2V0KCknXSwKKyAgICAgIFsnZy5WKCkudG9CdWxrU2V0KCknLCAnZy5WKCkudG9fYnVsa19zZXQoKSddLAorICAgICAgWydnLlYoKS5pdGVyYXRlKCknLCAnZy5WKCkuaXRlcmF0ZSgpJ10sCisgICAgICBbJ2cuVigpLmhhc05leHQoKScsICdnLlYoKS5oYXNfbmV4dCgpJ10sCisgICAgICBbJ2cuVigpLnRyeU5leHQoKScsICdnLlYoKS50cnlfbmV4dCgpJ10sCisgICAgICBbJ2cuVigpLm5leHQoKScsICdnLlYoKS5uZXh0KCknXSwKKyAgICAgIFsnZy5WKCkubmV4dCgyKScsICdnLlYoKS5uZXh0KDIpJ10sCisgICAgICAvLyB0cmFuc2FjdGlvbiBzdGVwcyDigJQgbm8gY2hhbmdlIGluIFB5dGhvbgorICAgICAgWydnLnR4KCkuYmVnaW4oKScsICdnLnR4KCkuYmVnaW4oKSddLAorICAgICAgWydnLnR4KCkuY29tbWl0KCknLCAnZy50eCgpLmNvbW1pdCgpJ10sCisgICAgICBbJ2cudHgoKS5yb2xsYmFjaygpJywgJ2cudHgoKS5yb2xsYmFjaygpJ10sCisgICAgXTsKKworICAgIHRlc3RzLmZvckVhY2goZnVuY3Rpb24gKFtpbnB1dCwgZXhwZWN0ZWRdKSB7CisgICAgICBpdChgdHJhbnNsYXRlczogJHtpbnB1dH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0cmFuc2xhdGUoaW5wdXQpLCBleHBlY3RlZCk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1RyYW5zbGF0b3IgcmVnaXN0cnknLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ2FjY2VwdHMgUFlUSE9OIGtleScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgnZy5WKCknLCAnZycsICdQWVRIT04nKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCAnZy5WKCknKTsKKyAgICB9KTsKKworICAgIGl0KCdoYXMgUFlUSE9OIGZhY3RvcnknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCB2aXNpdG9yID0gVHJhbnNsYXRvci5QWVRIT04oJ2cnKTsKKyAgICAgIGFzc2VydC5vayh2aXNpdG9yIGluc3RhbmNlb2YgUHl0aG9uVHJhbnNsYXRlVmlzaXRvcik7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdyYW5nZSBsaXRlcmFscyB0aHJvdycsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgndGhyb3dzIFRyYW5zbGF0b3JFeGNlcHRpb24gZm9yIHJhbmdlIGxpdGVyYWwnLCBmdW5jdGlvbiAoKSB7CisgICAgICBhc3NlcnQudGhyb3dzKAorICAgICAgICAoKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoJ2cuaW5qZWN0KDEuLjUpJywgJ2cnLCAnUFlUSE9OJyksCisgICAgICAgIFRyYW5zbGF0b3JFeGNlcHRpb24sCisgICAgICApOworICAgIH0pOworICB9KTsKK30pOworCitkZXNjcmliZSgnR29UcmFuc2xhdGVWaXNpdG9yJywgZnVuY3Rpb24gKCkgeworICBjb25zdCB0cmFuc2xhdGUgPSAocSkgPT4gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKHEsICdnJywgJ0dPJykuZ2V0VHJhbnNsYXRlZCgpOworCisgIGRlc2NyaWJlKCdiYXNpYyB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHsKKyAgICBjb25zdCB0ZXN0cyA9IFsKKyAgICAgIC8vIGJhc2ljIHRyYXZlcnNhbHMg4oCUIGFsbCBzdGVwIG1ldGhvZHMgYmVjb21lIFBhc2NhbENhc2UKKyAgICAgIFsnZy5WKCknLCAnZy5WKCknXSwKKyAgICAgIFsnZy5WKDEpJywgJ2cuVigxKSddLAorICAgICAgWydnLlYoIm5hbWUiKScsICdnLlYoIm5hbWUiKSddLAorICAgICAgWydnLlYoKS5oYXNMYWJlbCgicGVyc29uIiknLCAnZy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpJ10sCisgICAgICBbJ2cuVigpLm91dCgia25vd3MiKScsICdnLlYoKS5PdXQoImtub3dzIiknXSwKKyAgICAgIC8vIGFub255bW91cyB0cmF2ZXJzYWwgdXNlcyBncmVtbGluZ28uVF9fLgorICAgICAgWydnLlYoKS53aGVyZShfXy5vdXQoImtub3dzIikpJywgJ2cuVigpLldoZXJlKGdyZW1saW5nby5UX18uT3V0KCJrbm93cyIpKSddLAorICAgICAgLy8gZW51bSBleHBsaWNpdCBuYW1pbmcgd2l0aCBncmVtbGluZ28uIHByZWZpeAorICAgICAgWydnLlYoKS5vcmRlcigpLmJ5KFQuaWQpJywgJ2cuVigpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLlQuSWQpJ10sCisgICAgICBbJ2cuVigpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKScsICdnLlYoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5Bc2MpJ10sCisgICAgICAvLyBwcmVkaWNhdGVzIGdldCBncmVtbGluZ28uIHByZWZpeCBhbmQgUGFzY2FsQ2FzZSBtZXRob2QKKyAgICAgIFsnZy5WKCkuaGFzKCJhZ2UiLCBQLmd0KDMwKSknLCAnZy5WKCkuSGFzKCJhZ2UiLCBncmVtbGluZ28uUC5HdCgzMCkpJ10sCisgICAgICBbJ2cuVigpLmhhcygibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoIm1hciIpKScsICdnLlYoKS5IYXMoIm5hbWUiLCBncmVtbGluZ28uVGV4dFAuQ29udGFpbmluZygibWFyIikpJ10sCisgICAgICAvLyBpbnRlZ2VyIHN1ZmZpeGVzIGJlY29tZSBHbyB0eXBlIGNhc3RzCisgICAgICBbJ2cuVigpLnJhbmdlKDAsIDEwbCknLCAnZy5WKCkuUmFuZ2UoMCwgaW50NjQoMTApKSddLAorICAgICAgLy8gZmxvYXQgc3VmZml4CisgICAgICBbJ2cuVigpLmhhcygid2VpZ2h0IiwgUC5ndCgwLjVmKSknLCAnZy5WKCkuSGFzKCJ3ZWlnaHQiLCBncmVtbGluZ28uUC5HdChmbG9hdDMyKDAuNSkpKSddLAorICAgICAgLy8gTWFwIGxpdGVyYWwKKyAgICAgIFsnZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCBbKFQubGFiZWwpOiAicGVyc29uIl0pJywgJ2cuQWRkVigicGVyc29uIikuUHJvcGVydHkoZ3JlbWxpbmdvLlQuSWQsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtncmVtbGluZ28uVC5MYWJlbDogInBlcnNvbiIgfSknXSwKKyAgICAgIC8vIFNldCBsaXRlcmFsCisgICAgICBbJ2cuaW5qZWN0KHsxLDIsM30pJywgJ2cuSW5qZWN0KGdyZW1saW5nby5OZXdTaW1wbGVTZXQoMSwgMiwgMykpJ10sCisgICAgICAvLyBDb2xsZWN0aW9uIGxpdGVyYWwKKyAgICAgIFsnZy5pbmplY3QoWzEsMiwzXSknLCAnZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzfSknXSwKKyAgICAgIC8vIE5hTi9JbmYKKyAgICAgIFsnZy5pbmplY3QoTmFOKScsICdnLkluamVjdChtYXRoLk5hTigpKSddLAorICAgICAgWydnLmluamVjdChJbmZpbml0eSknLCAnZy5JbmplY3QobWF0aC5JbmYoMSkpJ10sCisgICAgICBbJ2cuaW5qZWN0KC1JbmZpbml0eSknLCAnZy5JbmplY3QobWF0aC5JbmYoLTEpKSddLAorICAgICAgLy8gbnVsbCDihpIgbmlsCisgICAgICBbJ2cuVigpLmhhcygibmFtZSIsIG51bGwpJywgJ2cuVigpLkhhcygibmFtZSIsIG5pbCknXSwKKyAgICAgIC8vIHRlcm1pbmFsIHN0ZXBzIOKAlCBQYXNjYWxDYXNlCisgICAgICBbJ2cuVigpLnRvTGlzdCgpJywgJ2cuVigpLlRvTGlzdCgpJ10sCisgICAgICBbJ2cuVigpLnRvU2V0KCknLCAnZy5WKCkuVG9TZXQoKSddLAorICAgICAgWydnLlYoKS50b0J1bGtTZXQoKScsICdnLlYoKS5Ub0J1bGtTZXQoKSddLAorICAgICAgWydnLlYoKS5pdGVyYXRlKCknLCAnZy5WKCkuSXRlcmF0ZSgpJ10sCisgICAgICBbJ2cuVigpLmhhc05leHQoKScsICdnLlYoKS5IYXNOZXh0KCknXSwKKyAgICAgIFsnZy5WKCkudHJ5TmV4dCgpJywgJ2cuVigpLlRyeU5leHQoKSddLAorICAgICAgWydnLlYoKS5uZXh0KCknLCAnZy5WKCkuTmV4dCgpJ10sCisgICAgICBbJ2cuVigpLm5leHQoMiknLCAnZy5WKCkuTmV4dCgyKSddLAorICAgICAgLy8gdHJhbnNhY3Rpb24gc3RlcHMg4oCUIFBhc2NhbENhc2UKKyAgICAgIFsnZy50eCgpLmJlZ2luKCknLCAnZy5UeCgpLkJlZ2luKCknXSwKKyAgICAgIFsnZy50eCgpLmNvbW1pdCgpJywgJ2cuVHgoKS5Db21taXQoKSddLAorICAgICAgWydnLnR4KCkucm9sbGJhY2soKScsICdnLlR4KCkuUm9sbGJhY2soKSddLAorICAgIF07CisKKyAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChbaW5wdXQsIGV4cGVjdGVkXSkgeworICAgICAgaXQoYHRyYW5zbGF0ZXM6ICR7aW5wdXR9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJhbnNsYXRlKGlucHV0KSwgZXhwZWN0ZWQpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdUcmFuc2xhdG9yIHJlZ2lzdHJ5JywgZnVuY3Rpb24gKCkgeworICAgIGl0KCdhY2NlcHRzIEdPIGtleScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgnZy5WKCknLCAnZycsICdHTycpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5nZXRUcmFuc2xhdGVkKCksICdnLlYoKScpOworICAgIH0pOworCisgICAgaXQoJ2hhcyBHTyBmYWN0b3J5JywgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgdmlzaXRvciA9IFRyYW5zbGF0b3IuR08oJ2cnKTsKKyAgICAgIGFzc2VydC5vayh2aXNpdG9yIGluc3RhbmNlb2YgR29UcmFuc2xhdGVWaXNpdG9yKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ3JhbmdlIGxpdGVyYWxzIHRocm93JywgZnVuY3Rpb24gKCkgeworICAgIGl0KCd0aHJvd3MgVHJhbnNsYXRvckV4Y2VwdGlvbiBmb3IgcmFuZ2UgbGl0ZXJhbCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGFzc2VydC50aHJvd3MoCisgICAgICAgICgpID0+IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgnZy5pbmplY3QoMS4uNSknLCAnZycsICdHTycpLAorICAgICAgICBUcmFuc2xhdG9yRXhjZXB0aW9uLAorICAgICAgKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ0RvdE5ldFRyYW5zbGF0ZVZpc2l0b3InLCBmdW5jdGlvbiAoKSB7CisgIGNvbnN0IHRyYW5zbGF0ZSA9IChxKSA9PiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUocSwgJ2cnLCAnRE9UTkVUJykuZ2V0VHJhbnNsYXRlZCgpOworCisgIGRlc2NyaWJlKCdiYXNpYyB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHsKKyAgICBjb25zdCB0ZXN0cyA9IFsKKyAgICAgIC8vIGJhc2ljIHRyYXZlcnNhbHMg4oCUIGFsbCBzdGVwIG1ldGhvZHMgYmVjb21lIFBhc2NhbENhc2UKKyAgICAgIFsnZy5WKCknLCAnZy5WKCknXSwKKyAgICAgIFsnZy5WKDEpJywgJ2cuVigxKSddLAorICAgICAgWydnLlYoIm5hbWUiKScsICdnLlYoIm5hbWUiKSddLAorICAgICAgWydnLlYoKS5oYXNMYWJlbCgicGVyc29uIiknLCAnZy5WKCkuSGFzTGFiZWwoInBlcnNvbiIpJ10sCisgICAgICBbJ2cuVigpLm91dCgia25vd3MiKScsICdnLlYoKS5PdXQoImtub3dzIiknXSwKKyAgICAgIC8vIGFub255bW91cyB0cmF2ZXJzYWwgdXNlcyBfXy4gKG5vIHByZWZpeCkKKyAgICAgIFsnZy5WKCkud2hlcmUoX18ub3V0KCJrbm93cyIpKScsICdnLlYoKS5XaGVyZShfXy5PdXQoImtub3dzIikpJ10sCisgICAgICAvLyBlbnVtIG5hbWluZzogcHJlZml4IGFzLWlzLCB2YWx1ZSBjYXBpdGFsaXplZAorICAgICAgWydnLlYoKS5vcmRlcigpLmJ5KFQuaWQpJywgJ2cuVigpLk9yZGVyKCkuQnkoVC5JZCknXSwKKyAgICAgIFsnZy5WKCkub3JkZXIoKS5ieShPcmRlci5hc2MpJywgJ2cuVigpLk9yZGVyKCkuQnkoT3JkZXIuQXNjKSddLAorICAgICAgLy8gcHJlZGljYXRlczogUGFzY2FsQ2FzZSBtZXRob2QgbmFtZQorICAgICAgWydnLlYoKS5oYXMoImFnZSIsIFAuZ3QoMzApKScsICdnLlYoKS5IYXMoImFnZSIsIFAuR3QoMzApKSddLAorICAgICAgWydnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5jb250YWluaW5nKCJtYXIiKSknLCAnZy5WKCkuSGFzKCJuYW1lIiwgVGV4dFAuQ29udGFpbmluZygibWFyIikpJ10sCisgICAgICAvLyBpbnRlZ2VyIHN1ZmZpeGVzCisgICAgICBbJ2cuVigpLnJhbmdlKDAsIDEwbCknLCAnZy5WKCkuUmFuZ2U8b2JqZWN0PigwLCAxMGwpJ10sCisgICAgICBbJ2cuVigpLnJhbmdlKDAsIDVpKScsICdnLlYoKS5SYW5nZTxvYmplY3Q+KDAsIDUpJ10sCisgICAgICAvLyBmbG9hdCBzdWZmaXhlcyDigJQgZi9kIGtlcHQgZm9yIEMjCisgICAgICBbJ2cuVigpLmhhcygid2VpZ2h0IiwgUC5ndCgwLjVmKSknLCAnZy5WKCkuSGFzKCJ3ZWlnaHQiLCBQLkd0KDAuNWYpKSddLAorICAgICAgLy8gTmFOIC8gSW5mCisgICAgICBbJ2cuaW5qZWN0KE5hTiknLCAnZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKSddLAorICAgICAgWydnLmluamVjdChJbmZpbml0eSknLCAnZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuUG9zaXRpdmVJbmZpbml0eSknXSwKKyAgICAgIFsnZy5pbmplY3QoLUluZmluaXR5KScsICdnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OZWdhdGl2ZUluZmluaXR5KSddLAorICAgICAgLy8gQ29sbGVjdGlvbnMKKyAgICAgIFsnZy5pbmplY3QoWzEsMiwzXSknLCAnZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KSddLAorICAgICAgWydnLmluamVjdCh7MSwyLDN9KScsICdnLkluamVjdDxvYmplY3Q+KG5ldyBIYXNoU2V0PG9iamVjdD4geyAxLCAyLCAzIH0pJ10sCisgICAgICAvLyBNYXAgbGl0ZXJhbAorICAgICAgWydnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFQuaWQsIFsoVC5sYWJlbCk6ICJwZXJzb24iXSknLCAnZy5BZGRWKChzdHJpbmcpICJwZXJzb24iKS5Qcm9wZXJ0eShULklkLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgInBlcnNvbiIgfX0pJ10sCisgICAgICAvLyB2YWx1ZXMgZ2V0cyA8b2JqZWN0PgorICAgICAgWydnLlYoKS52YWx1ZXMoIm5hbWUiKScsICdnLlYoKS5WYWx1ZXM8b2JqZWN0PigibmFtZSIpJ10sCisgICAgICAvLyBudWxsIGNhc3QKKyAgICAgIFsnZy5WKCkuaGFzKCJuYW1lIiwgbnVsbCknLCAnZy5WKCkuSGFzKCJuYW1lIiwgKG9iamVjdCkgbnVsbCknXSwKKyAgICAgIC8vIHRlcm1pbmFsIHN0ZXBzIOKAlCBQYXNjYWxDYXNlCisgICAgICBbJ2cuVigpLnRvTGlzdCgpJywgJ2cuVigpLlRvTGlzdCgpJ10sCisgICAgICBbJ2cuVigpLnRvU2V0KCknLCAnZy5WKCkuVG9TZXQoKSddLAorICAgICAgWydnLlYoKS50b0J1bGtTZXQoKScsICdnLlYoKS5Ub0J1bGtTZXQoKSddLAorICAgICAgWydnLlYoKS5pdGVyYXRlKCknLCAnZy5WKCkuSXRlcmF0ZSgpJ10sCisgICAgICBbJ2cuVigpLmhhc05leHQoKScsICdnLlYoKS5IYXNOZXh0KCknXSwKKyAgICAgIFsnZy5WKCkudHJ5TmV4dCgpJywgJ2cuVigpLlRyeU5leHQoKSddLAorICAgICAgWydnLlYoKS5uZXh0KCknLCAnZy5WKCkuTmV4dCgpJ10sCisgICAgICBbJ2cuVigpLm5leHQoMiknLCAnZy5WKCkuTmV4dCgyKSddLAorICAgICAgLy8gdHJhbnNhY3Rpb24gc3RlcHMg4oCUIFBhc2NhbENhc2UKKyAgICAgIFsnZy50eCgpLmJlZ2luKCknLCAnZy5UeCgpLkJlZ2luKCknXSwKKyAgICAgIFsnZy50eCgpLmNvbW1pdCgpJywgJ2cuVHgoKS5Db21taXQoKSddLAorICAgICAgWydnLnR4KCkucm9sbGJhY2soKScsICdnLlR4KCkuUm9sbGJhY2soKSddLAorICAgIF07CisKKyAgICB0ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChbaW5wdXQsIGV4cGVjdGVkXSkgeworICAgICAgaXQoYHRyYW5zbGF0ZXM6ICR7aW5wdXR9YCwgZnVuY3Rpb24gKCkgeworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJhbnNsYXRlKGlucHV0KSwgZXhwZWN0ZWQpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdUcmFuc2xhdG9yIHJlZ2lzdHJ5JywgZnVuY3Rpb24gKCkgeworICAgIGl0KCdhY2NlcHRzIERPVE5FVCBrZXknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoJ2cuVigpJywgJ2cnLCAnRE9UTkVUJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmdldFRyYW5zbGF0ZWQoKSwgJ2cuVigpJyk7CisgICAgfSk7CisKKyAgICBpdCgnaGFzIERPVE5FVCBmYWN0b3J5JywgZnVuY3Rpb24gKCkgeworICAgICAgY29uc3QgdmlzaXRvciA9IFRyYW5zbGF0b3IuRE9UTkVUKCdnJyk7CisgICAgICBhc3NlcnQub2sodmlzaXRvciBpbnN0YW5jZW9mIERvdE5ldFRyYW5zbGF0ZVZpc2l0b3IpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgncmFuZ2UgbGl0ZXJhbHMgdGhyb3cnLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Rocm93cyBUcmFuc2xhdG9yRXhjZXB0aW9uIGZvciByYW5nZSBsaXRlcmFsJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnRocm93cygKKyAgICAgICAgKCkgPT4gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCdnLmluamVjdCgxLi41KScsICdnJywgJ0RPVE5FVCcpLAorICAgICAgICBUcmFuc2xhdG9yRXhjZXB0aW9uLAorICAgICAgKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUoJ0phdmFUcmFuc2xhdGVWaXNpdG9yJywgZnVuY3Rpb24gKCkgeworICBjb25zdCB0cmFuc2xhdGUgPSAocSkgPT4gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKHEsICdnJywgJ0pBVkEnKS5nZXRUcmFuc2xhdGVkKCk7CisKKyAgZGVzY3JpYmUoJ2Jhc2ljIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkgeworICAgIGNvbnN0IHRlc3RzID0gWworICAgICAgLy8gYmFzaWMgdHJhdmVyc2FscyDigJQgY2FtZWxDYXNlIHByZXNlcnZlZAorICAgICAgWydnLlYoKScsICdnLlYoKSddLAorICAgICAgWydnLlYoMSknLCAnZy5WKDEpJ10sCisgICAgICBbJ2cuVigibmFtZSIpJywgJ2cuVigibmFtZSIpJ10sCisgICAgICBbJ2cuVigpLmhhc0xhYmVsKCJwZXJzb24iKScsICdnLlYoKS5oYXNMYWJlbCgicGVyc29uIiknXSwKKyAgICAgIFsnZy5WKCkub3V0KCJrbm93cyIpJywgJ2cuVigpLm91dCgia25vd3MiKSddLAorICAgICAgLy8gYW5vbnltb3VzIHRyYXZlcnNhbAorICAgICAgWydnLlYoKS53aGVyZShfXy5vdXQoImtub3dzIikpJywgJ2cuVigpLndoZXJlKF9fLm91dCgia25vd3MiKSknXSwKKyAgICAgIC8vIGVudW0gZXhwbGljaXQgbmFtaW5nIOKAlCBiYXNlIGNsYXNzIGhhbmRsZXMsIGFzLWlzCisgICAgICBbJ2cuVigpLm9yZGVyKCkuYnkoVC5pZCknLCAnZy5WKCkub3JkZXIoKS5ieShULmlkKSddLAorICAgICAgWydnLlYoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYyknLCAnZy5WKCkub3JkZXIoKS5ieShPcmRlci5hc2MpJ10sCisgICAgICAvLyBwcmVkaWNhdGVzCisgICAgICBbJ2cuVigpLmhhcygiYWdlIiwgUC5ndCgzMCkpJywgJ2cuVigpLmhhcygiYWdlIiwgUC5ndCgzMCkpJ10sCisgICAgICBbJ2cuVigpLmhhcygibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoIm1hciIpKScsICdnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5jb250YWluaW5nKCJtYXIiKSknXSwKKyAgICAgIC8vIGludGVnZXIgc3VmZml4ZXMKKyAgICAgIFsnZy5WKCkucmFuZ2UoMCwgMTBsKScsICdnLlYoKS5yYW5nZSgwLCAxMGwpJ10sCisgICAgICBbJ2cuaW5qZWN0KDFiKScsICdnLmluamVjdChuZXcgQnl0ZSgxKSknXSwKKyAgICAgIFsnZy5pbmplY3QoMXMpJywgJ2cuaW5qZWN0KG5ldyBTaG9ydCgxKSknXSwKKyAgICAgIFsnZy5pbmplY3QoMWkpJywgJ2cuaW5qZWN0KDEpJ10sCisgICAgICBbJ2cuaW5qZWN0KDFuKScsICdnLmluamVjdChuZXcgQmlnSW50ZWdlcigiMSIpKSddLAorICAgICAgLy8gZmxvYXQgc3VmZml4ZXMKKyAgICAgIFsnZy5WKCkuaGFzKCJ3ZWlnaHQiLCBQLmd0KDAuNWYpKScsICdnLlYoKS5oYXMoIndlaWdodCIsIFAuZ3QoMC41ZikpJ10sCisgICAgICAvLyBOYU4vSW5mCisgICAgICBbJ2cuaW5qZWN0KE5hTiknLCAnZy5pbmplY3QoRG91YmxlLk5hTiknXSwKKyAgICAgIFsnZy5pbmplY3QoSW5maW5pdHkpJywgJ2cuaW5qZWN0KERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSknXSwKKyAgICAgIFsnZy5pbmplY3QoLUluZmluaXR5KScsICdnLmluamVjdChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpJ10sCisgICAgICAvLyBDb2xsZWN0aW9uIGxpdGVyYWxzCisgICAgICBbJ2cuaW5qZWN0KFsxLDIsM10pJywgJ2cuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KSddLAorICAgICAgLy8gU2V0IGxpdGVyYWwKKyAgICAgIFsnZy5pbmplY3QoezEsMiwzfSknLCAnZy5pbmplY3QobmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KSddLAorICAgICAgLy8gTWFwIGxpdGVyYWwKKyAgICAgIFsnZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCBbKFQubGFiZWwpOiAicGVyc29uIl0pJywgJ2cuYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFQubGFiZWwsICJwZXJzb24iKTsgfX0pJ10sCisgICAgICAvLyB0ZXJtaW5hbCBzdGVwcyDigJQgcGFzcyB0aHJvdWdoIGFzLWlzIGluIEphdmEKKyAgICAgIFsnZy5WKCkudG9MaXN0KCknLCAnZy5WKCkudG9MaXN0KCknXSwKKyAgICAgIFsnZy5WKCkuaXRlcmF0ZSgpJywgJ2cuVigpLml0ZXJhdGUoKSddLAorICAgICAgWydnLlYoKS5uZXh0KCknLCAnZy5WKCkubmV4dCgpJ10sCisgICAgICBbJ2cuVigpLm5leHQoMiknLCAnZy5WKCkubmV4dCgyKSddLAorICAgICAgLy8gdHJhbnNhY3Rpb24gc3RlcHMg4oCUIHBhc3MgdGhyb3VnaCBhcy1pcyBpbiBKYXZhCisgICAgICBbJ2cudHgoKS5iZWdpbigpJywgJ2cudHgoKS5iZWdpbigpJ10sCisgICAgICBbJ2cudHgoKS5jb21taXQoKScsICdnLnR4KCkuY29tbWl0KCknXSwKKyAgICAgIFsnZy50eCgpLnJvbGxiYWNrKCknLCAnZy50eCgpLnJvbGxiYWNrKCknXSwKKyAgICBdOworCisgICAgdGVzdHMuZm9yRWFjaChmdW5jdGlvbiAoW2lucHV0LCBleHBlY3RlZF0pIHsKKyAgICAgIGl0KGB0cmFuc2xhdGVzOiAke2lucHV0fWAsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRyYW5zbGF0ZShpbnB1dCksIGV4cGVjdGVkKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnVHJhbnNsYXRvciByZWdpc3RyeScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnYWNjZXB0cyBKQVZBIGtleScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgnZy5WKCknLCAnZycsICdKQVZBJyk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LmdldFRyYW5zbGF0ZWQoKSwgJ2cuVigpJyk7CisgICAgfSk7CisKKyAgICBpdCgnaGFzIEpBVkEgZmFjdG9yeScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHZpc2l0b3IgPSBUcmFuc2xhdG9yLkpBVkEoJ2cnKTsKKyAgICAgIGFzc2VydC5vayh2aXNpdG9yIGluc3RhbmNlb2YgSmF2YVRyYW5zbGF0ZVZpc2l0b3IpOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgncmFuZ2UgbGl0ZXJhbHMgdGhyb3cnLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Rocm93cyBUcmFuc2xhdG9yRXhjZXB0aW9uIGZvciByYW5nZSBsaXRlcmFsJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnRocm93cygKKyAgICAgICAgKCkgPT4gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKCdnLmluamVjdCgxLi41KScsICdnJywgJ0pBVkEnKSwKKyAgICAgICAgVHJhbnNsYXRvckV4Y2VwdGlvbiwKKyAgICAgICk7CisgICAgfSk7CisgIH0pOworfSk7CisKK2Rlc2NyaWJlKCdHcm9vdnlUcmFuc2xhdGVWaXNpdG9yJywgZnVuY3Rpb24gKCkgeworICBjb25zdCB0cmFuc2xhdGUgPSAocSkgPT4gR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlKHEsICdnJywgJ0dST09WWScpLmdldFRyYW5zbGF0ZWQoKTsKKworICBkZXNjcmliZSgnYmFzaWMgdHJhbnNsYXRpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgY29uc3QgdGVzdHMgPSBbCisgICAgICAvLyBiYXNpYyB0cmF2ZXJzYWxzIOKAlCBjYW1lbENhc2UgcHJlc2VydmVkCisgICAgICBbJ2cuVigpJywgJ2cuVigpJ10sCisgICAgICBbJ2cuVigxKScsICdnLlYoMSknXSwKKyAgICAgIFsnZy5WKCJuYW1lIiknLCAnZy5WKCJuYW1lIiknXSwKKyAgICAgIFsnZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpJywgJ2cuVigpLmhhc0xhYmVsKCJwZXJzb24iKSddLAorICAgICAgWydnLlYoKS5vdXQoImtub3dzIiknLCAnZy5WKCkub3V0KCJrbm93cyIpJ10sCisgICAgICAvLyBhbm9ueW1vdXMgdHJhdmVyc2FsCisgICAgICBbJ2cuVigpLndoZXJlKF9fLm91dCgia25vd3MiKSknLCAnZy5WKCkud2hlcmUoX18ub3V0KCJrbm93cyIpKSddLAorICAgICAgLy8gZW51bSBleHBsaWNpdCBuYW1pbmcg4oCUIGJhc2UgY2xhc3MgaGFuZGxlcywgYXMtaXMKKyAgICAgIFsnZy5WKCkub3JkZXIoKS5ieShULmlkKScsICdnLlYoKS5vcmRlcigpLmJ5KFQuaWQpJ10sCisgICAgICBbJ2cuVigpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKScsICdnLlYoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYyknXSwKKyAgICAgIC8vIHByZWRpY2F0ZXMKKyAgICAgIFsnZy5WKCkuaGFzKCJhZ2UiLCBQLmd0KDMwKSknLCAnZy5WKCkuaGFzKCJhZ2UiLCBQLmd0KDMwKSknXSwKKyAgICAgIFsnZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAuY29udGFpbmluZygibWFyIikpJywgJ2cuVigpLmhhcygibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoIm1hciIpKSddLAorICAgICAgLy8gaW50ZWdlciBzdWZmaXhlcworICAgICAgWydnLlYoKS5yYW5nZSgwLCAxMGwpJywgJ2cuVigpLnJhbmdlKDAsIDEwbCknXSwKKyAgICAgIFsnZy5pbmplY3QoMWIpJywgJ2cuaW5qZWN0KChieXRlKTEpJ10sCisgICAgICBbJ2cuaW5qZWN0KDFzKScsICdnLmluamVjdCgoc2hvcnQpMSknXSwKKyAgICAgIFsnZy5pbmplY3QoMWkpJywgJ2cuaW5qZWN0KDFpKSddLAorICAgICAgWydnLmluamVjdCgxbiknLCAnZy5pbmplY3QoMWcpJ10sCisgICAgICAvLyBmbG9hdCBzdWZmaXhlcworICAgICAgWydnLlYoKS5oYXMoIndlaWdodCIsIFAuZ3QoMC41ZikpJywgJ2cuVigpLmhhcygid2VpZ2h0IiwgUC5ndCgwLjVmKSknXSwKKyAgICAgIC8vIE5hTiDigJQgYmFzZSBjbGFzcyBvdXRwdXRzIE5hTiBhcy1pcworICAgICAgWydnLmluamVjdChOYU4pJywgJ2cuaW5qZWN0KE5hTiknXSwKKyAgICAgIC8vIEluZmluaXR5CisgICAgICBbJ2cuaW5qZWN0KEluZmluaXR5KScsICdnLmluamVjdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpJ10sCisgICAgICBbJ2cuaW5qZWN0KC1JbmZpbml0eSknLCAnZy5pbmplY3QoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKSddLAorICAgICAgLy8gQ29sbGVjdGlvbiBsaXRlcmFscyDigJQgYmFzZSBjbGFzcyBoYW5kbGVzIGFzIFtpdGVtc10KKyAgICAgIFsnZy5pbmplY3QoWzEsMiwzXSknLCAnZy5pbmplY3QoWzEsIDIsIDNdKSddLAorICAgICAgLy8gU2V0IGxpdGVyYWwg4oCUIEdyb292eTogW2l0ZW1zXSBhcyBTZXQKKyAgICAgIFsnZy5pbmplY3QoezEsMiwzfSknLCAnZy5pbmplY3QoWzEsIDIsIDNdIGFzIFNldCknXSwKKyAgICAgIC8vIE1hcCBsaXRlcmFsIOKAlCBHcm9vdnkgcHJlc2VydmVzIHBhcmVucyBvbiBleHByZXNzaW9uIGtleXMKKyAgICAgIFsnZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCBbKFQubGFiZWwpOiAicGVyc29uIl0pJywgJ2cuYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgWyhULmxhYmVsKToicGVyc29uIl0pJ10sCisgICAgICAvLyBudWxsIGFzIE1hcCBpbiBtZXJnZVYKKyAgICAgIFsnZy5tZXJnZVYobnVsbCknLCAnZy5tZXJnZVYoKE1hcCkgbnVsbCknXSwKKyAgICAgIC8vIHN0cmF0ZWd5IG5vLWFyZ3M6IG91dHB1dCBuYW1lIGFzLWlzCisgICAgICBbJ2cud2l0aFN0cmF0ZWdpZXMoQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kpLlYoKScsICdnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCknXSwKKyAgICAgIC8vIHN0cmF0ZWd5IHdpdGggYXJnczogcHJlcGVuZCBuZXcKKyAgICAgIFsnZy53aXRoU3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwgbG9nV2FybmluZzogZmFsc2UpKS5WKCkub3V0KCknLCAnZy53aXRoU3RyYXRlZ2llcyhuZXcgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246dHJ1ZSwgbG9nV2FybmluZzpmYWxzZSkpLlYoKS5vdXQoKSddLAorICAgICAgLy8gd2l0aG91dFN0cmF0ZWdpZXM6IG5vIC5jbGFzcyBzdWZmaXgKKyAgICAgIFsnZy53aXRob3V0U3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kpLlYoKScsICdnLndpdGhvdXRTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpJ10sCisgICAgICAvLyB0ZXJtaW5hbCBzdGVwcyDigJQgcGFzcyB0aHJvdWdoIGFzLWlzIGluIEdyb292eQorICAgICAgWydnLlYoKS50b0xpc3QoKScsICdnLlYoKS50b0xpc3QoKSddLAorICAgICAgWydnLlYoKS5pdGVyYXRlKCknLCAnZy5WKCkuaXRlcmF0ZSgpJ10sCisgICAgICBbJ2cuVigpLm5leHQoKScsICdnLlYoKS5uZXh0KCknXSwKKyAgICAgIFsnZy5WKCkubmV4dCgyKScsICdnLlYoKS5uZXh0KDIpJ10sCisgICAgICAvLyB0cmFuc2FjdGlvbiBzdGVwcyDigJQgcGFzcyB0aHJvdWdoIGFzLWlzIGluIEdyb292eQorICAgICAgWydnLnR4KCkuYmVnaW4oKScsICdnLnR4KCkuYmVnaW4oKSddLAorICAgICAgWydnLnR4KCkuY29tbWl0KCknLCAnZy50eCgpLmNvbW1pdCgpJ10sCisgICAgICBbJ2cudHgoKS5yb2xsYmFjaygpJywgJ2cudHgoKS5yb2xsYmFjaygpJ10sCisgICAgXTsKKworICAgIHRlc3RzLmZvckVhY2goZnVuY3Rpb24gKFtpbnB1dCwgZXhwZWN0ZWRdKSB7CisgICAgICBpdChgdHJhbnNsYXRlczogJHtpbnB1dH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0cmFuc2xhdGUoaW5wdXQpLCBleHBlY3RlZCk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1RyYW5zbGF0b3IgcmVnaXN0cnknLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ2FjY2VwdHMgR1JPT1ZZIGtleScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgnZy5WKCknLCAnZycsICdHUk9PVlknKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLCAnZy5WKCknKTsKKyAgICB9KTsKKworICAgIGl0KCdoYXMgR1JPT1ZZIGZhY3RvcnknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCB2aXNpdG9yID0gVHJhbnNsYXRvci5HUk9PVlkoJ2cnKTsKKyAgICAgIGFzc2VydC5vayh2aXNpdG9yIGluc3RhbmNlb2YgR3Jvb3Z5VHJhbnNsYXRlVmlzaXRvcik7CisgICAgfSk7CisgIH0pOworfSk7CisKK2Rlc2NyaWJlKCdBbm9ueW1pemVkVHJhbnNsYXRlVmlzaXRvcicsIGZ1bmN0aW9uICgpIHsKKyAgY29uc3QgdHJhbnNsYXRlID0gKHEpID0+IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShxLCAnZycsICdBTk9OWU1JWkVEJykuZ2V0VHJhbnNsYXRlZCgpOworCisgIGRlc2NyaWJlKCdiYXNpYyBhbm9ueW1pemF0aW9uJywgZnVuY3Rpb24gKCkgeworICAgIGNvbnN0IHRlc3RzID0gWworICAgICAgLy8gc3RydWN0dXJlIHByZXNlcnZlZCwgc3RyaW5ncyByZXBsYWNlZAorICAgICAgWydnLlYoKS5oYXNMYWJlbCgicGVyc29uIiknLCAnZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCknXSwKKyAgICAgIC8vIHNhbWUgdmFsdWUgcmV1c2VzIHNhbWUgcGxhY2Vob2xkZXIKKyAgICAgIFsnZy5WKCkuaGFzKCJuYW1lIiwgIm5hbWUiKScsICdnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMCknXSwKKyAgICAgIC8vIGRpZmZlcmVudCBzdHJpbmcgdmFsdWVzIGdldCBkaWZmZXJlbnQgcGxhY2Vob2xkZXJzCisgICAgICBbJ2cuVigpLmhhcygiYWdlIiwgIm1hcmtvIiknLCAnZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpJ10sCisgICAgICAvLyBwbGFpbiBudW1iZXJzIOKAlCBubyBzdWZmaXgg4oaSIG51bWJlcgorICAgICAgWydnLlYoKS5oYXMoImFnZSIsIFAuZ3QoMzApKScsICdnLlYoKS5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKSknXSwKKyAgICAgIFsnZy5WKCkuaGFzKCJhZ2UiLCBQLmJldHdlZW4oMjYsIDMwKSknLCAnZy5WKCkuaGFzKHN0cmluZzAsIFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSknXSwKKyAgICAgIC8vIGludGVnZXIgc3VmZml4IGkg4oaSIGludGVnZXIKKyAgICAgIFsnZy5pbmplY3QoMWkpJywgJ2cuaW5qZWN0KGludGVnZXIwKSddLAorICAgICAgLy8gaW50ZWdlciBzdWZmaXggbCDihpIgbG9uZworICAgICAgWydnLmluamVjdCgxMGwpJywgJ2cuaW5qZWN0KGxvbmcwKSddLAorICAgICAgLy8gaW50ZWdlciBzdWZmaXggYiDihpIgYnl0ZQorICAgICAgWydnLmluamVjdCgxYiknLCAnZy5pbmplY3QoYnl0ZTApJ10sCisgICAgICAvLyBpbnRlZ2VyIHN1ZmZpeCBzIOKGkiBzaG9ydAorICAgICAgWydnLmluamVjdCgxcyknLCAnZy5pbmplY3Qoc2hvcnQwKSddLAorICAgICAgLy8gaW50ZWdlciBzdWZmaXggbiDihpIgYmlnaW50ZWdlcgorICAgICAgWydnLmluamVjdCgxbiknLCAnZy5pbmplY3QoYmlnaW50ZWdlcjApJ10sCisgICAgICAvLyBmbG9hdCBzdWZmaXggZiDihpIgZmxvYXQKKyAgICAgIFsnZy5pbmplY3QoMC41ZiknLCAnZy5pbmplY3QoZmxvYXQwKSddLAorICAgICAgLy8gZmxvYXQgc3VmZml4IGQg4oaSIGRvdWJsZQorICAgICAgWydnLmluamVjdCgwLjVkKScsICdnLmluamVjdChkb3VibGUwKSddLAorICAgICAgLy8gZmxvYXQgc3VmZml4IG0g4oaSIGJpZ2RlY2ltYWwKKyAgICAgIFsnZy5pbmplY3QoMS41bSknLCAnZy5pbmplY3QoYmlnZGVjaW1hbDApJ10sCisgICAgICAvLyBOYU4g4oaSIG51bWJlcgorICAgICAgWydnLmluamVjdChOYU4pJywgJ2cuaW5qZWN0KG51bWJlcjApJ10sCisgICAgICAvLyBJbmZpbml0eSDihpIgbnVtYmVyCisgICAgICBbJ2cuaW5qZWN0KEluZmluaXR5KScsICdnLmluamVjdChudW1iZXIwKSddLAorICAgICAgWyctSW5maW5pdHknICsgJycgLCAnbnVtYmVyMCddLCAgLy8gaGFuZGxlZCB2aWEgaW5qZWN0IGJlbG93CisgICAgICAvLyBib29sZWFuCisgICAgICBbJ2cuaW5qZWN0KHRydWUpJywgJ2cuaW5qZWN0KGJvb2xlYW4wKSddLAorICAgICAgWydnLmluamVjdChmYWxzZSknLCAnZy5pbmplY3QoYm9vbGVhbjApJ10sCisgICAgICAvLyBudWxsIOKGkiBvYmplY3QKKyAgICAgIFsnZy5pbmplY3QobnVsbCknLCAnZy5pbmplY3Qob2JqZWN0MCknXSwKKyAgICAgIC8vIGNvbGxlY3Rpb24g4oaSIGxpc3QKKyAgICAgIFsnZy5pbmplY3QoWzEsMiwzXSknLCAnZy5pbmplY3QobGlzdDApJ10sCisgICAgICAvLyBzZXQg4oaSIHNldAorICAgICAgWydnLmluamVjdCh7MSwyLDN9KScsICdnLmluamVjdChzZXQwKSddLAorICAgICAgLy8gbWFwIOKGkiBtYXAKKyAgICAgIFsnZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCBbKFQubGFiZWwpOiAicGVyc29uIl0pJywgJ2cuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShULmlkLCBtYXAwKSddLAorICAgICAgLy8gZW51bXMvdHJhdmVyc2FsIHN0ZXBzIHBhc3MgdGhyb3VnaCB1bmNoYW5nZWQKKyAgICAgIFsnZy5WKCkub3JkZXIoKS5ieShULmlkKScsICdnLlYoKS5vcmRlcigpLmJ5KFQuaWQpJ10sCisgICAgICBbJ2cuVigpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKScsICdnLlYoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYyknXSwKKyAgICAgIC8vIHZhcmlhYmxlcyBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkCisgICAgICBbJ2cuVih2aWQxKScsICdnLlYodmlkMSknXSwKKyAgICBdOworCisgICAgdGVzdHMKKyAgICAgIC5maWx0ZXIoKFtpbnB1dF0pID0+ICFpbnB1dC5zdGFydHNXaXRoKCctSW5maW5pdHknKSkKKyAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChbaW5wdXQsIGV4cGVjdGVkXSkgeworICAgICAgICBpdChgYW5vbnltaXplczogJHtpbnB1dH1gLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRyYW5zbGF0ZShpbnB1dCksIGV4cGVjdGVkKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgIGl0KCdhbm9ueW1pemVzOiBnLmluamVjdCgtSW5maW5pdHkpJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRyYW5zbGF0ZSgnZy5pbmplY3QoLUluZmluaXR5KScpLCAnZy5pbmplY3QobnVtYmVyMCknKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1RyYW5zbGF0b3IgcmVnaXN0cnknLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ2FjY2VwdHMgQU5PTllNSVpFRCBrZXknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCByZXN1bHQgPSBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUoJ2cuVigpJywgJ2cnLCAnQU5PTllNSVpFRCcpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5nZXRUcmFuc2xhdGVkKCksICdnLlYoKScpOworICAgIH0pOworCisgICAgaXQoJ2hhcyBBTk9OWU1JWkVEIGZhY3RvcnknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCB2aXNpdG9yID0gVHJhbnNsYXRvci5BTk9OWU1JWkVEKCdnJyk7CisgICAgICBhc3NlcnQub2sodmlzaXRvciBpbnN0YW5jZW9mIEFub255bWl6ZWRUcmFuc2xhdGVWaXNpdG9yKTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC90cmF2ZXJzYWwtc3RyYXRlZ3ktdGVzdC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC90cmF2ZXJzYWwtc3RyYXRlZ3ktdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ3ODVmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYXZlcnNhbC1zdHJhdGVneS10ZXN0LmpzCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnOworaW1wb3J0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcywgT3B0aW9uc1N0cmF0ZWd5LCBDb25uZWN0aXZlU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy90cmF2ZXJzYWwtc3RyYXRlZ3kuanMnOworCitkZXNjcmliZSgnVHJhdmVyc2FsU3RyYXRlZ2llcycsIGZ1bmN0aW9uICgpIHsKKworICBkZXNjcmliZSgnI3JlbW92ZVN0cmF0ZWd5KCknLCBmdW5jdGlvbiAoKSB7CisgICAgaXQoJ3Nob3VsZCByZW1vdmUgc3RyYXRlZ3knLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCB0cyA9IG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKCkKKyAgICAgIHRzLmFkZFN0cmF0ZWd5KG5ldyBDb25uZWN0aXZlU3RyYXRlZ3koKSk7CisgICAgICB0cy5hZGRTdHJhdGVneShuZXcgT3B0aW9uc1N0cmF0ZWd5KHt4OiAxMjN9KSk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHMuc3RyYXRlZ2llcy5sZW5ndGgsIDIpOworCisgICAgICBjb25zdCBjID0gbmV3IE9wdGlvbnNTdHJhdGVneSh7eDogMTIzfSk7CisgICAgICBjb25zdCBvcyA9IHRzLnJlbW92ZVN0cmF0ZWd5KGMpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKG9zLnN0cmF0ZWd5TmFtZSwgYy5zdHJhdGVneU5hbWUpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRzLnN0cmF0ZWdpZXMubGVuZ3RoLCAxKTsKKworICAgICAgdHMucmVtb3ZlU3RyYXRlZ3kobmV3IENvbm5lY3RpdmVTdHJhdGVneSgpKTsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0cy5zdHJhdGVnaWVzLmxlbmd0aCwgMCk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIG5vdCBmaW5kIGFueXRoaW5nIHRvIHJlbW92ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHRzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKQorICAgICAgdHMuYWRkU3RyYXRlZ3kobmV3IE9wdGlvbnNTdHJhdGVneSh7eDogMTIzfSkpOworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRzLnN0cmF0ZWdpZXMubGVuZ3RoLCAxKTsKKyAgICAgIHRzLnJlbW92ZVN0cmF0ZWd5KG5ldyBDb25uZWN0aXZlU3RyYXRlZ3koKSk7CisgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHMuc3RyYXRlZ2llcy5sZW5ndGgsIDEpOworICAgIH0pOworICB9KTsKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC90cmF2ZXJzYWwtdGVzdC5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3Rlc3QvdW5pdC90cmF2ZXJzYWwtdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRmNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdGVzdC91bml0L3RyYXZlcnNhbC10ZXN0LmpzCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGF1dGhvciBKb3JnZSBCYXkgR29uZHJhCisgKi8KKworaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnOworaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7CitpbXBvcnQgeyBHcmFwaCwgVmVydGV4IH0gZnJvbSAnLi4vLi4vbGliL3N0cnVjdHVyZS9ncmFwaC5qcyc7CitpbXBvcnQgYW5vbiBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9hbm9ueW1vdXMtdHJhdmVyc2FsLmpzJzsKK2ltcG9ydCB7IFAsIG9yZGVyLCBkaXJlY3Rpb24sIFRyYXZlcnNlciwgVHJhdmVyc2FsIH0gZnJvbSAnLi4vLi4vbGliL3Byb2Nlc3MvdHJhdmVyc2FsLmpzJzsKK2ltcG9ydCB7IHN0YXRpY3MgfSBmcm9tICcuLi8uLi9saWIvcHJvY2Vzcy9ncmFwaC10cmF2ZXJzYWwuanMnOworY29uc3QgViA9IHN0YXRpY3MuVjsKKworaW1wb3J0IHsgVHJhdmVyc2FsU3RyYXRlZ2llcyB9IGZyb20gJy4uLy4uL2xpYi9wcm9jZXNzL3RyYXZlcnNhbC1zdHJhdGVneS5qcyc7CitpbXBvcnQgeyBSZW1vdGVDb25uZWN0aW9uIH0gZnJvbSAnLi4vLi4vbGliL2RyaXZlci9yZW1vdGUtY29ubmVjdGlvbi5qcyc7CisKK2Rlc2NyaWJlKCdUcmF2ZXJzYWwnLCBmdW5jdGlvbiAoKSB7CisKKworICBkZXNjcmliZSgnI25leHQoKScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnc2hvdWxkIGFwcGx5IHRoZSBzdHJhdGVnaWVzIGFuZCByZXR1cm4gYSBQcm9taXNlIHdpdGggdGhlIGl0ZXJhdG9yIGl0ZW0nLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBzdHJhdGVneU1vY2sgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbiAodHJhdmVyc2FsKSB7CisgICAgICAgICAgdHJhdmVyc2FsLnJlc3VsdHMgPSBbIG5ldyBUcmF2ZXJzZXIoMSwgMSksIG5ldyBUcmF2ZXJzZXIoMiwgMSkgXTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKKyAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKKyAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyBUcmF2ZXJzYWwobnVsbCwgc3RyYXRlZ2llcywgbnVsbCk7CisgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKQorICAgICAgICAudGhlbihmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLnZhbHVlLCAxKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCBmYWxzZSk7CisgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5uZXh0KCk7CisgICAgICAgIH0pCisgICAgICAgIC50aGVuKGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0udmFsdWUsIDIpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLmRvbmUsIGZhbHNlKTsKKyAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKTsKKyAgICAgICAgfSkKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS52YWx1ZSwgbnVsbCk7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0uZG9uZSwgdHJ1ZSk7CisgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5uZXh0KCk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBzdXBwb3J0IGJ1bGsnLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBzdHJhdGVneU1vY2sgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbiAodHJhdmVyc2FsKSB7CisgICAgICAgICAgdHJhdmVyc2FsLnJlc3VsdHMgPSBbIG5ldyBUcmF2ZXJzZXIoMSwgMiksIG5ldyBUcmF2ZXJzZXIoMiwgMSkgXTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKKyAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKKyAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyBUcmF2ZXJzYWwobnVsbCwgc3RyYXRlZ2llcywgbnVsbCk7CisgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKQorICAgICAgICAudGhlbihmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLnZhbHVlLCAxKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCBmYWxzZSk7CisgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5uZXh0KCk7CisgICAgICAgIH0pCisgICAgICAgIC50aGVuKGZ1bmN0aW9uIChpdGVtKSB7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0udmFsdWUsIDEpOworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLmRvbmUsIGZhbHNlKTsKKyAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKTsKKyAgICAgICAgfSkKKyAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGl0ZW0pIHsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS52YWx1ZSwgMik7CisgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGl0ZW0uZG9uZSwgZmFsc2UpOworICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwubmV4dCgpOworICAgICAgICB9KQorICAgICAgICAudGhlbihmdW5jdGlvbiAoaXRlbSkgeworICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpdGVtLnZhbHVlLCBudWxsKTsKKyAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXRlbS5kb25lLCB0cnVlKTsKKyAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsLm5leHQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGlmIChTeW1ib2wuYXN5bmNJdGVyYXRvcikgeworICAgIGRlc2NyaWJlKCdAQGFzeW5jSXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7CisgICAgICBpdCgnc2hvdWxkIGV4cG9zZSB0aGUgYXN5bmMgaXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyBUcmF2ZXJzYWwobnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgdHJhdmVyc2FsW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgJ2Z1bmN0aW9uJyk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfQorCisgIGRlc2NyaWJlKCcjdG9MaXN0KCknLCBmdW5jdGlvbiAoKSB7CisKKyAgICBpdCgnc2hvdWxkIGFwcGx5IHRoZSBzdHJhdGVnaWVzIGFuZCByZXR1cm4gYSBQcm9taXNlIHdpdGggYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBzdHJhdGVneU1vY2sgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbiAodHJhdmVyc2FsKSB7CisgICAgICAgICAgdHJhdmVyc2FsLnJlc3VsdHMgPSBbIG5ldyBUcmF2ZXJzZXIoJ2EnLCAxKSwgbmV3IFRyYXZlcnNlcignYicsIDEpIF07CisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworICAgICAgICB9CisgICAgICB9OworICAgICAgY29uc3Qgc3RyYXRlZ2llcyA9IG5ldyBUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7CisgICAgICBzdHJhdGVnaWVzLmFkZFN0cmF0ZWd5KHN0cmF0ZWd5TW9jayk7CisgICAgICBjb25zdCB0cmF2ZXJzYWwgPSBuZXcgVHJhdmVyc2FsKG51bGwsIHN0cmF0ZWdpZXMsIG51bGwpOworICAgICAgcmV0dXJuIHRyYXZlcnNhbC50b0xpc3QoKS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7CisgICAgICAgIGFzc2VydC5vayhsaXN0KTsKKyAgICAgICAgYXNzZXJ0LmRlZXBFcXVhbChsaXN0LCBbICdhJywgJ2InIF0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSB3aGVuIHRyYXZlcnNlcnMgaXMgZW1wdHknLCBmdW5jdGlvbiAoKSB7CisgICAgICBjb25zdCBzdHJhdGVneU1vY2sgPSB7CisgICAgICAgIGFwcGx5OiBmdW5jdGlvbiAodHJhdmVyc2FsKSB7CisgICAgICAgICAgdHJhdmVyc2FsLnJlc3VsdHMgPSBbXTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKKyAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKKyAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyBUcmF2ZXJzYWwobnVsbCwgc3RyYXRlZ2llcywgbnVsbCk7CisgICAgICByZXR1cm4gdHJhdmVyc2FsLnRvTGlzdCgpLnRoZW4oZnVuY3Rpb24gKGxpc3QpIHsKKyAgICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkobGlzdCkpOworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobGlzdC5sZW5ndGgsIDApOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHN1cHBvcnQgYnVsaycsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGNvbnN0IHN0cmF0ZWd5TW9jayA9IHsKKyAgICAgICAgYXBwbHk6IGZ1bmN0aW9uICh0cmF2ZXJzYWwpIHsKKyAgICAgICAgICB0cmF2ZXJzYWwucmVzdWx0cyA9IFsgbmV3IFRyYXZlcnNlcigxLCAxKSwgbmV3IFRyYXZlcnNlcigyLCAzKSwgbmV3IFRyYXZlcnNlcigzLCAyKSwKKyAgICAgICAgICAgIG5ldyBUcmF2ZXJzZXIoNCwgMSkgXTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CisgICAgICAgIH0KKyAgICAgIH07CisgICAgICBjb25zdCBzdHJhdGVnaWVzID0gbmV3IFRyYXZlcnNhbFN0cmF0ZWdpZXMoKTsKKyAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ3koc3RyYXRlZ3lNb2NrKTsKKyAgICAgIGNvbnN0IHRyYXZlcnNhbCA9IG5ldyBUcmF2ZXJzYWwobnVsbCwgc3RyYXRlZ2llcywgbnVsbCk7CisgICAgICByZXR1cm4gdHJhdmVyc2FsLnRvTGlzdCgpCisgICAgICAgIC50aGVuKGxpc3QgPT4geworICAgICAgICAgIGV4cGVjdChsaXN0KS50by5oYXZlLm1lbWJlcnMoWzEsIDIsIDIsIDIsIDMsIDMsIDRdKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjaXRlcmF0ZSgpJywgZnVuY3Rpb24gKCkgeworICAgIGl0KCdzaG91bGQgYXBwbHkgdGhlIHN0cmF0ZWdpZXMgYW5kIHJldHVybiBhIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBsZXQgYXBwbGllZCA9IGZhbHNlOworICAgICAgY29uc3Qgc3RyYXRlZ3lNb2NrID0geworICAgICAgICBhcHBseTogZnVuY3Rpb24gKHRyYXZlcnNhbCkgeworICAgICAgICAgIGFwcGxpZWQgPSB0cnVlOworICAgICAgICAgIHRyYXZlcnNhbC5yZXN1bHRzID0gWyBuZXcgVHJhdmVyc2VyKCdhJywgMSksIG5ldyBUcmF2ZXJzZXIoJ2InLCAxKSBdOworICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTsKKyAgICAgICAgfQorICAgICAgfTsKKyAgICAgIGNvbnN0IHN0cmF0ZWdpZXMgPSBuZXcgVHJhdmVyc2FsU3RyYXRlZ2llcygpOworICAgICAgc3RyYXRlZ2llcy5hZGRTdHJhdGVneShzdHJhdGVneU1vY2spOworICAgICAgY29uc3QgdHJhdmVyc2FsID0gbmV3IFRyYXZlcnNhbChudWxsLCBzdHJhdGVnaWVzKTsKKyAgICAgIHJldHVybiB0cmF2ZXJzYWwuaXRlcmF0ZSgpLnRoZW4oKCkgPT4geworICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYXBwbGllZCwgdHJ1ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1AjdG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHsKKyAgICBpdCgnY29udmVydCB0byBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aCBQJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFAuZ3QoMTgpLnRvU3RyaW5nKCksICdndCgxOCknKTsKKyAgICB9KTsKKworICAgIGl0KCdjb252ZXJ0IHRvIHN0cmluZyByZXByZXNlbnRhdGlvbiB3aXRoIFAud2l0aGluJywgZnVuY3Rpb24gKCkgeworICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFAud2l0aGluKCdhJywgJ2InKS50b1N0cmluZygpLCAid2l0aGluKFsnYScsICdiJ10pIik7CisgICAgfSk7CisKKyAgICBpdCgnY29udmVydCB0byBzdHJpbmcgcmVwcmVzZW50YXRpb24gd2l0aCBQLndpdGhpbiBhcnJheScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChQLndpdGhpbihbJ2EnLCAnYiddKS50b1N0cmluZygpLCAid2l0aGluKFsnYScsICdiJ10pIik7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCJidWlsZCIsIGZ1bmN0aW9uKCkgeworICAgIGl0KCdzaG91bGQgb25seSBhbGxvdyBhbm9ueW1vdXMgY2hpbGQgdHJhdmVyc2FscycsIGZ1bmN0aW9uKCkgeworICAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aF8obmV3IEdyYXBoKCkpOworICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdyhmdW5jdGlvbigpIHsKKyAgICAgICAgZy5WKDApLmFkZEUoInNlbGYiKS50byhWKDEpKQorICAgICAgfSk7CisKKyAgICAgIGFzc2VydC50aHJvd3MoZnVuY3Rpb24oKSB7CisgICAgICAgIGcuVigwKS5hZGRFKCJzZWxmIikudG8oZy5WKDEpKQorICAgICAgfSk7CisgICAgfSkKKyAgfSk7CisKKyAgLy8gVE9ETzo6IFJlLWVuYWJsZSBhZnRlciB0cmFuc2FjdGlvbnMKKyAgLy8gZGVzY3JpYmUoJ2NoaWxkIHRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uKCkgeworICAvLyAgIGl0KCdzaG91bGQgbm90IHN1cHBvcnQgY2hpbGQgdHJhbnNhY3Rpb25zJywgZnVuY3Rpb24oKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhuZXcgTW9ja1JlbW90ZUNvbm5lY3Rpb24oKSk7CisgIC8vICAgICBjb25zdCB0eCA9IGcudHgoKTsKKyAgLy8gICAgIGFzc2VydC50aHJvd3MoZnVuY3Rpb24oKSB7CisgIC8vICAgICAgIHR4LmJlZ2luKCkudHgoKTsKKyAgLy8gICAgIH0pOworICAvLyAgIH0pOworICAvLyB9KTsKKyAgLy8KKyAgLy8gZGVzY3JpYmUoJ25vdCBvcGVuZWQgdHJhbnNhY3Rpb25zJywgZnVuY3Rpb24oKSB7CisgIC8vICAgaXQoJ3Nob3VsZCBub3QgYWxsb3cgY29tbWl0IGZvciBub3Qgb3BlbmVkIHRyYW5zYWN0aW9ucycsIGFzeW5jIGZ1bmN0aW9uKCkgeworICAvLyAgICAgY29uc3QgZyA9IGFub24udHJhdmVyc2FsKCkud2l0aFJlbW90ZShuZXcgTW9ja1JlbW90ZUNvbm5lY3Rpb24oKSk7CisgIC8vICAgICBjb25zdCB0eCA9IGcudHgoKTsKKyAgLy8gICAgIHRyeSB7CisgIC8vICAgICAgIGF3YWl0IHR4LmNvbW1pdCgpOworICAvLyAgICAgICBhc3NlcnQuZmFpbCgic2hvdWxkIHRocm93IGVycm9yIik7CisgIC8vICAgICB9IGNhdGNoIChlcnIpIHsKKyAgLy8gICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCdDYW5ub3QgY29tbWl0IGEgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3Qgc3RhcnRlZCcsIGVyci5tZXNzYWdlKTsKKyAgLy8gICAgIH0KKyAgLy8gICB9KTsKKyAgLy8gICBpdCgnc2hvdWxkIG5vdCBhbGxvdyByb2xsYmFjayBmb3Igbm90IG9wZW5lZCB0cmFuc2FjdGlvbnMnLCBhc3luYyBmdW5jdGlvbigpIHsKKyAgLy8gICAgIGNvbnN0IGcgPSBhbm9uLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUobmV3IE1vY2tSZW1vdGVDb25uZWN0aW9uKCkpOworICAvLyAgICAgY29uc3QgdHggPSBnLnR4KCk7CisgIC8vICAgICB0cnkgeworICAvLyAgICAgICBhd2FpdCB0eC5yb2xsYmFjaygpOworICAvLyAgICAgICBhc3NlcnQuZmFpbCgic2hvdWxkIHRocm93IGVycm9yIik7CisgIC8vICAgICB9IGNhdGNoIChlcnIpIHsKKyAgLy8gICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCdDYW5ub3Qgcm9sbGJhY2sgYSB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBzdGFydGVkJywgZXJyLm1lc3NhZ2UpOworICAvLyAgICAgfQorICAvLyAgIH0pOworICAvLyB9KTsKKyAgLy8KKyAgLy8gZGVzY3JpYmUoJ3R4I2JlZ2luKCknLCBmdW5jdGlvbigpIHsKKyAgLy8gICBpdCgic2hvdWxkIG5vdCBhbGxvdyBhIHRyYW5zYWN0aW9uIHRvIGJlZ2luIG1vcmUgdGhhbiBvbmNlIiwgZnVuY3Rpb24oKSB7CisgIC8vICAgICBjb25zdCBnID0gYW5vbi50cmF2ZXJzYWwoKS53aXRoXyhuZXcgTW9ja1JlbW90ZUNvbm5lY3Rpb24oKSk7CisgIC8vICAgICBjb25zdCB0eCA9IGcudHgoKTsKKyAgLy8gICAgIHR4LmJlZ2luKCk7CisgIC8vICAgICBhc3NlcnQudGhyb3dzKGZ1bmN0aW9uICgpIHsKKyAgLy8gICAgICAgdHguYmVnaW4oKTsKKyAgLy8gICAgIH0pOworICAvLyAgIH0pOworICAvLyB9KTsKKworCit9KTsKKworY2xhc3MgTW9ja1JlbW90ZUNvbm5lY3Rpb24gZXh0ZW5kcyBSZW1vdGVDb25uZWN0aW9uIHsKKyAgY29uc3RydWN0b3IoYm91bmQgPSBmYWxzZSkgeworICAgIHN1cGVyKCdodHRwOi8vbG9jYWxob3N0Ojk5OTgvZ3JlbWxpbicpOworICAgIHRoaXMuX2JvdW5kID0gYm91bmQ7CisgIH0KKworICBnZXQgaXNTZXNzaW9uQm91bmQoKSB7CisgICAgcmV0dXJuIHRoaXMuX2JvdW5kOworICB9CisKKyAgc3VibWl0KGdyZW1saW5MYW5nKSB7CisgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpOworICB9CisKKyAgY3JlYXRlU2Vzc2lvbigpIHsKKyAgICByZXR1cm4gbmV3IE1vY2tSZW1vdGVDb25uZWN0aW9uKHRydWUpOworICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdHNjb25maWcuanNvbiBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3RzY29uZmlnLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzNzQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L3RzY29uZmlnLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAiZXh0ZW5kcyI6ICJAdHNjb25maWcvbm9kZTE4L3RzY29uZmlnLmpzb24iLAorICAiY29tcGlsZXJPcHRpb25zIjogeworICAgICJsaWIiOiBbIkRPTSIsICJlczIwMjIiXSwKKyAgICAiYWxsb3dKcyI6IHRydWUsCisgICAgImRlY2xhcmF0aW9uIjogdHJ1ZSwKKyAgICAib3V0RGlyIjogImJ1aWxkIiwKKyAgfSwKKyAgImluY2x1ZGUiOiBbImxpYiJdLAorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdHNjb25maWcudGVzdC5qc29uIGIvZ3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvdHNjb25maWcudGVzdC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YmZhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC90c2NvbmZpZy50ZXN0Lmpzb24KQEAgLTAsMCArMSw3IEBACit7CisgICJleHRlbmRzIjogIi4vdHNjb25maWcuanNvbiIsCisgICJjb21waWxlck9wdGlvbnMiOiB7CisgICAgIm5vRW1pdCI6IHRydWUKKyAgfSwKKyAgImluY2x1ZGUiOiBbImxpYiIsICJ0ZXN0Il0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvLmVudi5leGFtcGxlIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC8uZW52LmV4YW1wbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvLmVudi5leGFtcGxlCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwLy5lbnYuZXhhbXBsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC8uZ2l0aWdub3JlIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0Ly5naXRpZ25vcmUKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC8ubnBtaWdub3JlIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC8ubnBtaWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0Ly5ucG1pZ25vcmUKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvLm5wbWlnbm9yZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC8ucHJldHRpZXJpZ25vcmUgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwLy5wcmV0dGllcmlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC8ucHJldHRpZXJpZ25vcmUKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvLnByZXR0aWVyaWdub3JlCmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0Ly5wcmV0dGllcnJjIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC8ucHJldHRpZXJyYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC8ucHJldHRpZXJyYwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC8ucHJldHRpZXJyYwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9MSUNFTlNFIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L0xJQ0VOU0UKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvTElDRU5TRQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9OT1RJQ0UgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvTk9USUNFCmNvcHkgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9OT1RJQ0UKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvUkVBRE1FLm1kIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZDYyZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNTM0IEBACis8IS0tCisKKyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLT4KKworIyBHcmVtbGluIE1DUCBTZXJ2ZXIKKworPiAqKkNvbm5lY3QgQUkgYWdlbnRzIGxpa2UgQ2xhdWRlLCBDdXJzb3IsIGFuZCBXaW5kc3VyZiB0byB5b3VyIGdyYXBoIGRhdGFiYXNlcyEqKgorCitBbiBbTUNQXShodHRwczovL21vZGVsY29udGV4dHByb3RvY29sLmlvLykgKE1vZGVsIENvbnRleHQgUHJvdG9jb2wpIHNlcnZlciB0aGF0IGVuYWJsZXMgQUkgYXNzaXN0YW50cyB0byBpbnRlcmFjdCB3aXRoCithbnkgQXBhY2hlIFRpbmtlclBvcC1jb21wYXRpYmxlIGdyYXBoIGRhdGFiYXNlIGhvc3RlZCBpbiBbR3JlbWxpbiBTZXJ2ZXJdKGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jZ3JlbWxpbi1zZXJ2ZXIpCit0aHJvdWdoIG5hdHVyYWwgbGFuZ3VhZ2UuIFF1ZXJ5IHlvdXIgZGF0YSwgZGlzY292ZXIgc2NoZW1hcywgYW5hbHl6ZSByZWxhdGlvbnNoaXBzLCBhbmQgbWFuYWdlIGdyYXBoIGRhdGEgdXNpbmcgc2ltcGxlCitjb252ZXJzYXRpb25zLgorCisjIyDinKggV2hhdCBZb3UgQ2FuIERvCisKK1RhbGsgdG8geW91ciBncmFwaCBkYXRhYmFzZSBuYXR1cmFsbHk6CisKKy0g8J+UjSAqKiJXaGF0J3MgdGhlIHN0cnVjdHVyZSBvZiBteSBncmFwaD8iKiogLSBBdXRvbWF0aWMgc2NoZW1hIGRpc2NvdmVyeQorLSDwn5OKICoqIlNob3cgbWUgYWxsIHVzZXJzIG92ZXIgMzAgYW5kIHRoZWlyIGNvbm5lY3Rpb25zIioqIC0gQ29tcGxleCBncmFwaCBxdWVyaWVzCistIPCflJcgKioiRmluZCB0aGUgc2hvcnRlc3QgcGF0aCBiZXR3ZWVuIEFsaWNlIGFuZCBCb2IiKiogLSBSZWxhdGlvbnNoaXAgYW5hbHlzaXMKKy0g8J+TiCAqKiJHaXZlIG1lIGdyYXBoIHN0YXRpc3RpY3MgYW5kIG1ldHJpY3MiKiogLSBEYXRhIGluc2lnaHRzCistIPCfp6AgKipTbWFydCBlbnVtIGRpc2NvdmVyeSoqIC0gQUkgbGVhcm5zIHlvdXIgZGF0YSdzIHZhbGlkIHZhbHVlcyBhdXRvbWF0aWNhbGx5CisKKyMjIPCfm6DvuI8gQXZhaWxhYmxlIFRvb2xzCisKK1lvdXIgQUkgYXNzaXN0YW50IGdldHMgYWNjZXNzIHRvIHRoZXNlIHBvd2VyZnVsIHRvb2xzOgorCit8IFRvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgfCBXaGF0IEl0IERvZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKK3wg8J+UjSAqKmdldF9ncmFwaF9zdGF0dXMqKiAgICAgICAgfCBIZWFsdGggQ2hlY2sgICAgIHwgVmVyaWZ5IGRhdGFiYXNlIGNvbm5lY3Rpdml0eSBhbmQgc2VydmVyIHN0YXR1cyAgICAgICAgICAgICAgIHwKK3wg8J+TiyAqKmdldF9ncmFwaF9zY2hlbWEqKiAgICAgICAgfCBTY2hlbWEgRGlzY292ZXJ5IHwgR2V0IGNvbXBsZXRlIGdyYXBoIHN0cnVjdHVyZSB3aXRoIHZlcnRpY2VzIGFuZCBlZGdlcyAgICAgICAgIHwKK3wg4pqhICoqcnVuX2dyZW1saW5fcXVlcnkqKiAgICAgICB8IFF1ZXJ5IEV4ZWN1dGlvbiAgfCBFeGVjdXRlIGFueSBHcmVtbGluIHRyYXZlcnNhbCBxdWVyeSB3aXRoIGZ1bGwgc3ludGF4IHN1cHBvcnQgfAorfCDwn5SEICoqcmVmcmVzaF9zY2hlbWFfY2FjaGUqKiAgICB8IENhY2hlIE1hbmFnZW1lbnQgfCBGb3JjZSBpbW1lZGlhdGUgcmVmcmVzaCBvZiBjYWNoZWQgc2NoZW1hIGluZm9ybWF0aW9uICAgICAgICAgfAorfCDwn5SEICoqdHJhbnNsYXRlX2dyZW1saW5fcXVlcnkqKiB8IFRyYW5zbGF0aW9uICAgICAgfCBUcmFuc2xhdGUgYSBHcmVtbGluIHF1ZXJ5IHRvIGEgdGFyZ2V0IGxhbmd1YWdlIHZhcmlhbnQgICAgICAgfAorfCDwn5GMICoqZm9ybWF0X2dyZW1saW5fcXVlcnkqKiAgICB8IFF1ZXJ5IEZvcm1hdHRpbmcgfCBGb3JtYXQgYSBHcmVtbGluIHF1ZXJ5IHN0cmluZyB1c2luZyBncmVtbGludCAgICAgICAgICAgICAgICAgfAorCisjIyMgR3JlbWxpbiBRdWVyeSBUcmFuc2xhdGlvbgorCitUaGUgYHRyYW5zbGF0ZV9ncmVtbGluX3F1ZXJ5YCB0b29sIHRyYW5zbGF0ZXMgYSBHcmVtbGluIHF1ZXJ5IHRvIGEgdGFyZ2V0IGxhbmd1YWdlIHZhcmlhbnQuIFN1cHBvcnRlZCB0YXJnZXRzCithcmU6IGBjYW5vbmljYWxgLCBgamF2YXNjcmlwdGAsIGBweXRob25gLCBgZ29gLCBgZG90bmV0YCwgYGphdmFgLCBgZ3Jvb3Z5YCwgYW5kIGBhbm9ueW1pemVkYC4KKworVGhlIG9wdGlvbmFsIGBzb3VyY2VgIHBhcmFtZXRlciBkZXNjcmliZXMgdGhlIGRpYWxlY3Qgb2YgdGhlIGlucHV0LiBXaGVuIG9taXR0ZWQgb3Igc2V0IHRvIGBhdXRvYCAodGhlIGRlZmF1bHQpLAordGhlIHNlcnZlciBmaXJzdCBhcHBsaWVzIG1lY2hhbmljYWwgbm9ybWFsaXphdGlvbiBhbmQgdGhlbiByZXF1ZXN0cyBMTE0gbm9ybWFsaXphdGlvbiBmcm9tIHRoZSBNQ1AgY2xpZW50IHZpYSBNQ1AKK3NhbXBsaW5nIGJlZm9yZSB0cmFuc2xhdGluZy4gSWYgdGhlIE1DUCBjbGllbnQgZG9lcyBub3Qgc3VwcG9ydCBzYW1wbGluZywgdGhlIExMTSBzdGVwIGlzIHNraXBwZWQgYW5kIGEgd2FybmluZworaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlLiBTZXQgYHNvdXJjZWAgdG8gYGNhbm9uaWNhbGAgdG8gc2tpcCBub3JtYWxpemF0aW9uIGVudGlyZWx5IHdoZW4gdGhlIGlucHV0IGlzIGFscmVhZHkKK2luIGNhbm9uaWNhbCBncmVtbGluLWxhbmd1YWdlIEFOVExSIGZvcm1hdC4KKworIyMjIE9mZmxpbmUgTW9kZQorCitgR1JFTUxJTl9NQ1BfRU5EUE9JTlRgIGlzIG9wdGlvbmFsLiBXaGVuIG5vdCBzZXQsIGdyYXBoIHRvb2xzIChgZ2V0X2dyYXBoX3N0YXR1c2AsIGBnZXRfZ3JhcGhfc2NoZW1hYCwKK2BydW5fZ3JlbWxpbl9xdWVyeWAsIGByZWZyZXNoX3NjaGVtYV9jYWNoZWApIGFyZSBub3QgcmVnaXN0ZXJlZCwgYnV0IGB0cmFuc2xhdGVfZ3JlbWxpbl9xdWVyeWAgYW5kCitgZm9ybWF0X2dyZW1saW5fcXVlcnlgIHJlbWFpbiBmdWxseSBhdmFpbGFibGUuCisKKyMjIPCfmoAgUXVpY2sgU2V0dXAKKworIyMjIFN0ZXAgMTogSW5zdGFsbAorCitgYGBiYXNoCisjIFRoZSBucHggY29tbWFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCB0aGUgcGFja2FnZSBpZiBuZWVkZWQKKyMgTm8gc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHN0ZXAgcmVxdWlyZWQKK2BgYAorCisjIyMjIEFsdGVybmF0aXZlOiBCdWlsZCBmcm9tIFNvdXJjZQorCitgYGBiYXNoCisjIENsb25lIGFuZCBzZXR1cAorZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wLmdpdAorY2QgdGlua2VycG9wL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AKK25wbSBpbnN0YWxsCitucG0gcnVuIGJ1aWxkCitgYGAKKworIyMjIFN0ZXAgMjogQ29uZmlndXJlIFlvdXIgQUkgQ2xpZW50CisKK0FkZCB0aGlzIHRvIHlvdXIgTUNQIGNsaWVudCBjb25maWd1cmF0aW9uOgorCisjIyMjIENsYXVkZSBEZXNrdG9wIC8gQ3Vyc29yIC8gV2luZHN1cmYKKworKipVc2luZyB0aGUgcHVibGlzaGVkIHBhY2thZ2UgKHJlY29tbWVuZGVkKToqKgorCitgYGBqc29uCit7CisgICJtY3BTZXJ2ZXJzIjogeworICAgICJncmVtbGluIjogeworICAgICAgImNvbW1hbmQiOiAibnB4IiwKKyAgICAgICJhcmdzIjogWyJncmVtbGluLW1jcCJdLAorICAgICAgImVudiI6IHsKKyAgICAgICAgIkdSRU1MSU5fTUNQX0VORFBPSU5UIjogImxvY2FsaG9zdDo4MTgyIiwKKyAgICAgICAgIkdSRU1MSU5fTUNQX0xPR19MRVZFTCI6ICJpbmZvIgorICAgICAgfQorICAgIH0KKyAgfQorfQorYGBgCisKKyoqRnJvbSBzb3VyY2U6KioKKworYGBganNvbgoreworICAibWNwU2VydmVycyI6IHsKKyAgICAiZ3JlbWxpbiI6IHsKKyAgICAgICJjb21tYW5kIjogIm5vZGUiLAorICAgICAgImFyZ3MiOiBbIi9wYXRoL3RvL2dyZW1saW4tbWNwL2Rpc3Qvc2VydmVyLmpzIl0sCisgICAgICAiZW52IjogeworICAgICAgICAiR1JFTUxJTl9NQ1BfRU5EUE9JTlQiOiAibG9jYWxob3N0OjgxODIiLAorICAgICAgICAiR1JFTUxJTl9NQ1BfTE9HX0xFVkVMIjogImluZm8iCisgICAgICB9CisgICAgfQorICB9Cit9CitgYGAKKworIyMjIyBXaXRoIEF1dGhlbnRpY2F0aW9uIGFuZCBHcmFwaFRyYXZlcnNhbFNvdXJjZQorCitgYGBqc29uCit7CisgICJtY3BTZXJ2ZXJzIjogeworICAgICJncmVtbGluIjogeworICAgICAgImNvbW1hbmQiOiAibnB4IiwKKyAgICAgICJhcmdzIjogWyJncmVtbGluLW1jcCJdLAorICAgICAgImVudiI6IHsKKyAgICAgICAgIkdSRU1MSU5fTUNQX0VORFBPSU5UIjogInlvdXItc2VydmVyLmNvbTo4MTgyL2ciLAorICAgICAgICAiR1JFTUxJTl9NQ1BfVVNFUk5BTUUiOiAieW91ci11c2VybmFtZSIsCisgICAgICAgICJHUkVNTElOX01DUF9QQVNTV09SRCI6ICJ5b3VyLXBhc3N3b3JkIiwKKyAgICAgICAgIkdSRU1MSU5fTUNQX1VTRV9TU0wiOiAidHJ1ZSIKKyAgICAgIH0KKyAgICB9CisgIH0KK30KK2BgYAorCisjIyMgU3RlcCAzOiBTdGFydCBZb3VyIEdyZW1saW4gU2VydmVyCisKK01ha2Ugc3VyZSB5b3VyIEdyZW1saW4tY29tcGF0aWJsZSBkYXRhYmFzZSBpcyBydW5uaW5nOgorCitgYGBiYXNoCisjIEZvciBBcGFjaGUgVGlua2VyUG9wIEdyZW1saW4gU2VydmVyCisuL2Jpbi9ncmVtbGluLXNlcnZlci5zaCBzdGFydAorCisjIE9yIHVzaW5nIERvY2tlcgorZG9ja2VyIHJ1biAtcCA4MTgyOjgxODIgdGlua2VycG9wL2dyZW1saW4tc2VydmVyCitgYGAKKworIyMjIFN0ZXAgNDogVGVzdCB0aGUgQ29ubmVjdGlvbgorCitSZXN0YXJ0IHlvdXIgQUkgY2xpZW50IGFuZCB0cnkgYXNraW5nOgorCis+ICJDYW4geW91IGNoZWNrIGlmIG15IGdyYXBoIGRhdGFiYXNlIGlzIGNvbm5lY3RlZCBhbmQgc2hvdyBtZSBpdHMgc2NoZW1hPyIKKworIyMg8J+SoSBVc2FnZSBFeGFtcGxlcworCisjIyMgU2NoZW1hIEV4cGxvcmF0aW9uCisKKyoqWW91IGFzazoqKiBfIldoYXQncyB0aGUgc3RydWN0dXJlIG9mIG15IGdyYXBoIGRhdGFiYXNlPyJfCisKKyoqQUkgcmVzcG9uc2U6KiogVGhlIEFJIGNhbGxzIGBnZXRfZ3JhcGhfc2NoZW1hYCBhbmQgdGVsbHMgeW91IGFib3V0IHlvdXIgdmVydGV4IHR5cGVzLCBlZGdlIHR5cGVzLCBhbmQgaG93IHRoZXkncmUgY29ubmVjdGVkLgorCisjIyMgRGF0YSBBbmFseXNpcworCisqKllvdSBhc2s6KiogXyJTaG93IG1lIGFsbCBwZW9wbGUgb3ZlciAzMCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyJfCisKKyoqQUkgcmVzcG9uc2U6KiogVGhlIEFJIGV4ZWN1dGVzIGBnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuaGFzKCdhZ2UnLCBndCgzMCkpLm91dCgpLnBhdGgoKWAgYW5kIGV4cGxhaW5zIHRoZSByZXN1bHRzIGluIG5hdHVyYWwgbGFuZ3VhZ2UuCisKKyMjIyBHcmFwaCBNZXRyaWNzCisKKyoqWW91IGFzazoqKiBfIkdpdmUgbWUgc29tZSBzdGF0aXN0aWNzIGFib3V0IG15IGdyYXBoIl8KKworKipBSSByZXNwb25zZToqKiBUaGUgQUkgcnVucyBtdWx0aXBsZSBxdWVyaWVzIHRvIGNvdW50IHZlcnRpY2VzLCBlZGdlcywgYW5kIGFuYWx5emUgdGhlIGRpc3RyaWJ1dGlvbiwgdGhlbiBwcmVzZW50cyBhIHN1bW1hcnkuCisKKyMjIPCfp6AgQXV0b21hdGljIEVudW0gRGlzY292ZXJ5CisKKz4gKipXaHkgdGhpcyBtYXR0ZXJzOioqIEFJIGFnZW50cyB3b3JrIGJlc3Qgd2hlbiB0aGV5IGtub3cgdGhlIGV4YWN0IHZhbGlkIHZhbHVlcyBmb3IgcHJvcGVydGllcy4gSW5zdGVhZCBvZiBndWVzc2luZyBvciBtYWtpbmcgaW52YWxpZCBxdWVyaWVzLCB0aGV5IGNhbiB1c2UgcHJlY2lzZSwgcmVhbCB2YWx1ZXMgZnJvbSB5b3VyIGRhdGEuCisKK09uZSBvZiB0aGUgbW9zdCBwb3dlcmZ1bCBmZWF0dXJlcyBvZiB0aGlzIE1DUCBzZXJ2ZXIgaXMgKipBdXRvbWF0aWMgRW51bSBEaXNjb3ZlcnkqKiAtIGl0IGludGVsbGlnZW50bHkgYW5hbHl6ZXMgeW91ciBncmFwaCBkYXRhIHRvIGRpc2NvdmVyIHZhbGlkIHByb3BlcnR5IHZhbHVlcyBhbmQgcHJvdmlkZXMgdGhlbSBhcyBlbnVtcyB0byBBSSBhZ2VudHMuCisKKyMjIyBRdWVyeSBGb3JtYXR0aW5nCisKKyoqWW91IGFzazoqKiBfIkZvcm1hdCB0aGlzIEdyZW1saW4gcXVlcnkgXGBnLlYoKS5vdXQoJ2JvdGgnKS5wcm9qZWN0KCduYW1lJywnYWdlJykuYnkoJ25hbWUnKS5ieSgnYWdlJylcYC4iXworCisqKkFJIHJlc3BvbnNlOioqIFRoZSBBSSBjYWxscyB0aGUgYGZvcm1hdF9ncmVtbGluX3F1ZXJ5YCB0b29sIGFuZCByZXR1cm5zIGEgZm9ybWF0dGVkIEdyZW1saW4gc3RyaW5nIChvciBhIHN0cnVjdHVyZWQgZXJyb3IgaWYgcGFyc2luZyBmYWlscykuIE9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucyBpbmNsdWRlIGBpbmRlbnRhdGlvbmAsIGBtYXhMaW5lTGVuZ3RoYCwgYW5kIGBzaG91bGRQbGFjZURvdHNBZnRlckxpbmVCcmVha3NgLgorCisjIyMg8J+klCBUaGUgUHJvYmxlbSBJdCBTb2x2ZXMKKworKipXaXRob3V0IEVudW0gRGlzY292ZXJ5OioqCisKK2BgYAorQUk6ICJJIHNlZSB0aGlzIHZlcnRleCBoYXMgYSAnc3RhdHVzJyBwcm9wZXJ0eSBvZiB0eXBlICdzdHJpbmcnLi4uCisgICAgIExldCBtZSB0cnkgcXVlcnlpbmcgd2l0aCBzdGF0dXM9J2FjdGl2ZSciCitSZXN1bHQ6IOKdjCBObyByZXN1bHRzIChhY3R1YWwgdmFsdWVzIGFyZSAnQ09ORklSTUVEJywgJ1BFTkRJTkcnLCAnQ0FOQ0VMTEVEJykKK2BgYAorCisqKldpdGggRW51bSBEaXNjb3Zlcnk6KioKKworYGBgCitBSTogIkkgY2FuIHNlZSB0aGUgJ3N0YXR1cycgcHJvcGVydHkgaGFzIHRoZXNlIGV4YWN0IHZhbHVlczoKKyAgICAgWydDT05GSVJNRUQnLCAnUEVORElORycsICdDQU5DRUxMRUQnLCAnV0FJVExJU1RFRCddCisgICAgIExldCBtZSBxdWVyeSB3aXRoIHN0YXR1cz0nQ09ORklSTUVEJyIKK1Jlc3VsdDog4pyFIFBlcmZlY3QgcmVzdWx0cyB1c2luZyByZWFsIGRhdGEgdmFsdWVzCitgYGAKKworIyMjIPCfkqEgSG93IEl0IFdvcmtzCisKK1RoZSBzZXJ2ZXIgYXV0b21hdGljYWxseSBzY2FucyB5b3VyIGdyYXBoIHByb3BlcnRpZXMgYW5kOgorCisxLiAqKklkZW50aWZpZXMgTG93LUNhcmRpbmFsaXR5IFByb3BlcnRpZXMqKiAtIFByb3BlcnRpZXMgd2l0aCBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcworMi4gKipFeHRyYWN0cyBSZWFsIFZhbHVlcyoqIC0gU2FtcGxlcyBhY3R1YWwgZGF0YSBmcm9tIHlvdXIgZ3JhcGgKKzMuICoqUHJvdmlkZXMgYXMgRW51bXMqKiAtIEluY2x1ZGVzIHZhbGlkIHZhbHVlcyBpbiB0aGUgc2NoZW1hIGZvciBBSSBhZ2VudHMKKworKipFeGFtcGxlIE91dHB1dDoqKgorCitgYGBqc29uCit7CisgICJuYW1lIjogImJvb2tpbmdTdGF0dXMiLAorICAidHlwZSI6IFsic3RyaW5nIl0sCisgICJjYXJkaW5hbGl0eSI6ICJzaW5nbGUiLAorICAiZW51bSI6IFsiQ09ORklSTUVEIiwgIlBFTkRJTkciLCAiQ0FOQ0VMTEVEIiwgIldBSVRMSVNURUQiXSwKKyAgInNhbXBsZV92YWx1ZXMiOiBbIkNPTkZJUk1FRCIsICJQRU5ESU5HIl0KK30KK2BgYAorCisjIyMg8J+OryBCZW5lZml0cyBmb3IgQUkgQWdlbnRzCisKKy0gKirwn46vIEFjY3VyYXRlIFF1ZXJpZXMqKiAtIEFJIHVzZXMgcmVhbCB2YWx1ZXMgaW5zdGVhZCBvZiBndWVzc2luZworLSAqKuKaoSBGYXN0ZXIgUmVzdWx0cyoqIC0gTm8gdHJpYWwtYW5kLWVycm9yIHdpdGggaW52YWxpZCB2YWx1ZXMKKy0gKirwn6egIEJldHRlciBVbmRlcnN0YW5kaW5nKiogLSBBSSBsZWFybnMgeW91ciBkYXRhIHZvY2FidWxhcnkKKy0gKirwn5OKIFNtYXJ0ZXIgQW5hbHl0aWNzKiogLSBFbmFibGVzIGdyb3VwaW5nIGFuZCBmaWx0ZXJpbmcgd2l0aCBhY3R1YWwgY2F0ZWdvcmllcworCisjIyMg4pqZ77iPIENvbmZpZ3VyYXRpb24gT3B0aW9ucworCitGaW5lLXR1bmUgZW51bSBkaXNjb3ZlcnkgdG8gbWF0Y2ggeW91ciBkYXRhOgorCitgYGBiYXNoCisjIEVuYWJsZS9kaXNhYmxlIGVudW0gZGlzY292ZXJ5CitHUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEPSJ0cnVlIiAgICAgICAgICMgRGVmYXVsdDogdHJ1ZQorCisjIENvbnRyb2wgd2hhdCBnZXRzIGRldGVjdGVkIGFzIGVudW0KK0dSRU1MSU5fTUNQX0VOVU1fQ0FSRElOQUxJVFlfVEhSRVNIT0xEPSIxMCIgICAgICAgIyBNYXggZGlzdGluY3QgdmFsdWVzIGZvciBlbnVtIChkZWZhdWx0OiAxMCkKKworIyBFeGNsdWRlIHNwZWNpZmljIHByb3BlcnRpZXMKK0dSRU1MSU5fTUNQX0VOVU1fUFJPUEVSVFlfREVOWUxJU1Q9ImlkLHV1aWQsdGltZXN0YW1wLGNyZWF0ZWRBdCx1cGRhdGVkQXQiCisKKyMgU2NoZW1hIG9wdGltaXphdGlvbgorR1JFTUxJTl9NQ1BfU0NIRU1BX01BWF9FTlVNX1ZBTFVFUz0iMTAiICAgICAgICAgICAjIExpbWl0IGVudW0gdmFsdWVzIHNob3duIChkZWZhdWx0OiAxMCkKK0dSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX1NBTVBMRV9WQUxVRVM9ImZhbHNlIiAgIyBSZWR1Y2Ugc2NoZW1hIHNpemUgKGRlZmF1bHQ6IGZhbHNlKQorYGBgCisKKyMjIyDwn5qrIFByb3BlcnR5IERlbnlsaXN0CisKK1NvbWUgcHJvcGVydGllcyBzaG91bGQgbmV2ZXIgYmUgdHJlYXRlZCBhcyBlbnVtczoKKworKipBdXRvbWF0aWNhbGx5IEV4Y2x1ZGVkOioqCisKKy0gKipIaWdoLWNhcmRpbmFsaXR5KiogcHJvcGVydGllcyAoPiB0aHJlc2hvbGQgdW5pcXVlIHZhbHVlcykKKy0gKipOdW1lcmljIElEcyoqIGFuZCAqKlVVSURzKioKKy0gKipUaW1lc3RhbXBzKiogYW5kICoqZGF0ZXMqKgorLSAqKkxvbmcgdGV4dCoqIGZpZWxkcworCisqKk1hbnVhbCBFeGNsdXNpb246KioKKworYGBgYmFzaAorIyBFeGNsdWRlIHNwZWNpZmljIHByb3BlcnRpZXMgYnkgbmFtZQorR1JFTUxJTl9NQ1BfRU5VTV9QUk9QRVJUWV9ERU5ZTElTVD0idXNlcklkLHNlc3Npb25JZCxkZXNjcmlwdGlvbixub3Rlcyxjb250ZW50IgorYGBgCisKKyoqQ29tbW9uIERlbnlsaXN0IFBhdHRlcm5zOioqCisKKy0gYGlkLHV1aWQsZ3VpZGAgLSBVbmlxdWUgaWRlbnRpZmllcnMKKy0gYHRpbWVzdGFtcCxjcmVhdGVkQXQsdXBkYXRlZEF0LGxhc3RNb2RpZmllZGAgLSBUaW1lIGZpZWxkcworLSBgZGVzY3JpcHRpb24sbm90ZXMsY29tbWVudCxjb250ZW50LHRleHRgIC0gRnJlZSB0ZXh0IGZpZWxkcworLSBgZW1haWwsdXJsLHBob25lLGFkZHJlc3NgIC0gUGVyc29uYWwvY29udGFjdCBkYXRhCistIGBoYXNoLHRva2VuLGtleSxzZWNyZXRgIC0gU2VjdXJpdHktcmVsYXRlZCBmaWVsZHMKKworIyMjIPCfm6DvuI8gUmVhbC1Xb3JsZCBFeGFtcGxlcworCisqKkUtY29tbWVyY2UgR3JhcGg6KioKKworYGBganNvbgoreworICAib3JkZXJTdGF0dXMiOiB7CisgICAgImVudW0iOiBbIlBFTkRJTkciLCAiUFJPQ0VTU0lORyIsICJTSElQUEVEIiwgIkRFTElWRVJFRCIsICJDQU5DRUxMRUQiXQorICB9LAorICAicHJvZHVjdENhdGVnb3J5IjogeworICAgICJlbnVtIjogWyJFTEVDVFJPTklDUyIsICJDTE9USElORyIsICJCT09LUyIsICJIT01FIiwgIlNQT1JUUyJdCisgIH0sCisgICJwYXltZW50TWV0aG9kIjogeworICAgICJlbnVtIjogWyJDUkVESVRfQ0FSRCIsICJQQVlQQUwiLCAiQkFOS19UUkFOU0ZFUiIsICJDUllQVE8iXQorICB9Cit9CitgYGAKKworKipTb2NpYWwgTmV0d29yayBHcmFwaDoqKgorCitgYGBqc29uCit7CisgICJyZWxhdGlvbnNoaXBUeXBlIjogeworICAgICJlbnVtIjogWyJGUklFTkQiLCAiRkFNSUxZIiwgIkNPTExFQUdVRSIsICJBQ1FVQUlOVEFOQ0UiXQorICB9LAorICAicHJpdmFjeUxldmVsIjogeworICAgICJlbnVtIjogWyJQVUJMSUMiLCAiRlJJRU5EUyIsICJQUklWQVRFIl0KKyAgfSwKKyAgImFjY291bnRTdGF0dXMiOiB7CisgICAgImVudW0iOiBbIkFDVElWRSIsICJTVVNQRU5ERUQiLCAiREVBQ1RJVkFURUQiXQorICB9Cit9CitgYGAKKworIyMjIPCflKcgVHVuaW5nIGZvciBZb3VyIERhdGEKKworKipGb3IgTGFyZ2UgRGF0YXNldHM6KioKKworYGBgYmFzaAorR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTEQ9IjUiICAgICAjIFN0cmljdGVyIGVudW0gZGV0ZWN0aW9uCitHUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTPSI1IiAgICAgICAgICMgRmV3ZXIgdmFsdWVzIGluIHNjaGVtYQorYGBgCisKKyoqRm9yIFJpY2ggQ2F0ZWdvcmljYWwgRGF0YToqKgorCitgYGBiYXNoCitHUkVNTElOX01DUF9FTlVNX0NBUkRJTkFMSVRZX1RIUkVTSE9MRD0iMjUiICAgICMgTW9yZSBwZXJtaXNzaXZlIGRldGVjdGlvbgorR1JFTUxJTl9NQ1BfU0NIRU1BX01BWF9FTlVNX1ZBTFVFUz0iMjAiICAgICAgICAjIFNob3cgbW9yZSBlbnVtIHZhbHVlcworYGBgCisKKyoqRm9yIFBlcmZvcm1hbmNlLUNyaXRpY2FsIEVudmlyb25tZW50czoqKgorCitgYGBiYXNoCitHUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEPSJmYWxzZSIgICAgICMgRGlzYWJsZSBmb3IgZmFzdGVyIHNjaGVtYSBsb2FkaW5nCitHUkVNTElOX01DUF9TQ0hFTUFfSU5DTFVERV9TQU1QTEVfVkFMVUVTPSJmYWxzZSIgIyBNaW5pbWFsIHNjaGVtYSBzaXplCitgYGAKKworVGhpcyBpbnRlbGxpZ2VudCBlbnVtIGRpc2NvdmVyeSB0cmFuc2Zvcm1zIGhvdyBBSSBhZ2VudHMgaW50ZXJhY3Qgd2l0aCB5b3VyIGdyYXBoIGRhdGEsIG1ha2luZyBxdWVyaWVzIG1vcmUgYWNjdXJhdGUgYW5kIGluc2lnaHRzIG1vcmUgbWVhbmluZ2Z1bCEg8J+OrworCisjIyDimpnvuI8gQ29uZmlndXJhdGlvbiBPcHRpb25zCisKKyMjIyBCYXNpYyBDb25maWd1cmF0aW9uCisKK2BgYGJhc2gKKyMgT3B0aW9uYWwgLSB3aGVuIG5vdCBzZXQsIGdyYXBoIHRvb2xzIGFyZSB1bmF2YWlsYWJsZSBidXQgdHJhbnNsYXRlIGFuZCBmb3JtYXQgdG9vbHMgcmVtYWluIGFjdGl2ZQorR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9ImxvY2FsaG9zdDo4MTgyIgorCisjIE9wdGlvbmFsCitHUkVNTElOX01DUF9VU0VfU1NMPSJ0cnVlIiAgICAgICAgICAgICAgIyBFbmFibGUgU1NML1RMUworR1JFTUxJTl9NQ1BfVVNFUk5BTUU9InVzZXJuYW1lIiAgICAgICAgICMgQXV0aGVudGljYXRpb24KK0dSRU1MSU5fTUNQX1BBU1NXT1JEPSJwYXNzd29yZCIgICAgICAgICAjIEF1dGhlbnRpY2F0aW9uCitHUkVNTElOX01DUF9JRExFX1RJTUVPVVQ9IjMwMCIgICAgICAgICAgIyBDb25uZWN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoZGVmYXVsdDogMzAwKQorR1JFTUxJTl9NQ1BfTE9HX0xFVkVMPSJpbmZvIiAgICAgICAgICAgICAgICAgICAgIyBMb2dnaW5nIGxldmVsOiBlcnJvciwgd2FybiwgaW5mbywgZGVidWcKK2BgYAorCisjIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvbgorCitgYGBiYXNoCisjIFNjaGVtYSBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nCitHUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEPSJ0cnVlIiAgICAgICAgICMgRW5hYmxlIHNtYXJ0IGVudW0gZGV0ZWN0aW9uIChkZWZhdWx0OiB0cnVlKQorR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTEQ9IjEwIiAgICAgICAjIE1heCBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVudW0gZGV0ZWN0aW9uIChkZWZhdWx0OiAxMCkKK0dSRU1MSU5fTUNQX0VOVU1fUFJPUEVSVFlfREVOWUxJU1Q9ImlkLHRpbWVzdGFtcCIgIyBFeGNsdWRlIHNwZWNpZmljIHByb3BlcnRpZXMgZnJvbSBlbnVtIGRldGVjdGlvbgorR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUz0iZmFsc2UiICAjIEluY2x1ZGUgc2FtcGxlIHZhbHVlcyBpbiBzY2hlbWEgKGRlZmF1bHQ6IGZhbHNlKQorR1JFTUxJTl9NQ1BfU0NIRU1BX01BWF9FTlVNX1ZBTFVFUz0iMTAiICAgICAgICAgICAjIExpbWl0IGVudW0gdmFsdWVzIHNob3duIChkZWZhdWx0OiAxMCkKK0dSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX0NPVU5UUz0iZmFsc2UiICAgICAgICAgIyBJbmNsdWRlIHZlcnRleC9lZGdlIGNvdW50cyBpbiBzY2hlbWEgKGRlZmF1bHQ6IGZhbHNlKQorYGBgCisKKyMjIPCflJAgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKKworPiAqKuKaoO+4jyBJbXBvcnRhbnQ6KiogVGhpcyBzZXJ2ZXIgaXMgZGVzaWduZWQgZm9yIGRldmVsb3BtZW50IGFuZCB0cnVzdGVkIGVudmlyb25tZW50cy4KKworIyMjIEN1cnJlbnQgTGltaXRhdGlvbnMKKworLSBCYXNpYyBpbnB1dCBzYW5pdGl6YXRpb24gKGFkdmFuY2VkIGluamVjdGlvbiBwcm90ZWN0aW9uIGluIGRldmVsb3BtZW50KQorLSBObyBjb25uZWN0aW9uIHBvb2xpbmcgb3IgcmF0ZSBsaW1pdGluZworLSBBbGwgR3JlbWxpbiBzeW50YXggaXMgcGVybWl0dGVkCistIE5vIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IG1vbml0b3JpbmcKKworIyMjIFJlY29tbWVuZGVkIFNlY3VyaXR5IFByYWN0aWNlcworCistIPCflJIgVXNlIGJlaGluZCBhIGZpcmV3YWxsIGluIHByb2R1Y3Rpb24KKy0g8J+UkSBFbmFibGUgc3Ryb25nIGF1dGhlbnRpY2F0aW9uIG9uIEdyZW1saW4gU2VydmVyCistIPCfk4ogTW9uaXRvciBxdWVyeSBwYXR0ZXJucyBhbmQgcmVzb3VyY2UgdXNhZ2UKKy0g8J+RkyBDb25zaWRlciB1c2luZyBhIHJlYWQtb25seSBncmFwaCBjb25maWd1cmF0aW9uIGlmIHlvdSBkbyBub3QgZXhwZWN0IG9yIGRlc2lyZSBtdXRhdGlvbnMKKy0g8J+boe+4jyBDb25zaWRlciBhIHF1ZXJ5IHByb3h5IGZvciBhZGRpdGlvbmFsIHNlY3VyaXR5IGNvbnRyb2xzCistIPCflIQgS2VlcCBkZXBlbmRlbmNpZXMgdXBkYXRlZAorCisjIyDwn4aYIFRyb3VibGVzaG9vdGluZworCisjIyMgQ29ubmVjdGlvbiBJc3N1ZXMKKworfCBQcm9ibGVtICAgICAgICAgICAgICAgICB8IFNvbHV0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKK3wgIkNvbm5lY3Rpb24gcmVmdXNlZCIgICAgfCBWZXJpZnkgR3JlbWxpbiBzZXJ2ZXIgaXMgcnVubmluZzogYGN1cmwgaHR0cDovL2xvY2FsaG9zdDo4MTgyL2AgfAorfCAiQXV0aGVudGljYXRpb24gZmFpbGVkIiB8IENoZWNrIGBHUkVNTElOX01DUF9VU0VSTkFNRWAgYW5kIGBHUkVNTElOX01DUF9QQVNTV09SRGAgICAgICAgICB8Cit8ICJJbnZhbGlkIGVuZHBvaW50IiAgICAgIHwgVXNlIGZvcm1hdCBgaG9zdDpwb3J0YCBvciBgaG9zdDpwb3J0L2dgIGZvciB0cmF2ZXJzYWwgc291cmNlICAgIHwKKworIyMjIENvbW1vbiBFcnJvciBNZXNzYWdlcworCistICoqIlNjaGVtYSBjYWNoZSBmYWlsZWQiKiogLSBTZXJ2ZXIgY291bGRuJ3QgZGlzY292ZXIgZ3JhcGggc3RydWN0dXJlIChlbXB0eSBkYXRhYmFzZT8pCistICoqIkludmFsaWQgcXVlcnkgc3ludGF4IioqIC0gR3JlbWxpbiBxdWVyeSBoYXMgc3ludGF4IGVycm9ycworLSAqKiJUaW1lb3V0IioqIC0gUXVlcnkgdG9vayB0b28gbG9uZywgY2hlY2sgYEdSRU1MSU5fTUNQX0lETEVfVElNRU9VVGAKKworIyMjIFRlc3RpbmcgWW91ciBTZXR1cAorCitgYGBiYXNoCisjIFRlc3QgY29ubmVjdGlvbgorY3VybCAtZiBodHRwOi8vbG9jYWxob3N0OjgxODIvCisKKyMgQ2hlY2sgc2VydmVyIGxvZ3MKK3RhaWwgLWYgbG9ncy9ncmVtbGluLW1jcC5sb2cKKworIyBWZXJpZnkgc2NoZW1hIGVuZHBvaW50CitjdXJsIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluCitgYGAKKworLS0tCisKKyMjIPCflKcgRGV2ZWxvcGVyIERvY3VtZW50YXRpb24KKworX1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgYXJlIGZvciBkZXZlbG9wZXJzIHdobyB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gb3IgbW9kaWZ5IHRoZSBzZXJ2ZXIuXworCisjIyMgRGV2ZWxvcG1lbnQgU2V0dXAKKworYGBgYmFzaAorIyBDbG9uZSBhbmQgaW5zdGFsbAorZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wLmdpdAorY2QgdGlua2VycG9wL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AKK25wbSBpbnN0YWxsCisKKyMgRGV2ZWxvcG1lbnQgd2l0aCBob3QgcmVsb2FkCitucG0gcnVuIGRldgorCisjIFJ1biB0ZXN0cworbnBtIHRlc3QKK25wbSBydW4gdGVzdDpjb3ZlcmFnZQorbnBtIHJ1biB0ZXN0OndhdGNoCisKKyMgSW50ZWdyYXRpb24gdGVzdHMgKHJlcXVpcmVzIHJ1bm5pbmcgR3JlbWxpbiBzZXJ2ZXIpCitHUkVNTElOX01DUF9FTkRQT0lOVD1sb2NhbGhvc3Q6ODE4Mi9nIG5wbSBydW4gdGVzdDppdAorCisjIEFsbCB0ZXN0cyB0b2dldGhlciAodW5pdCArIGludGVncmF0aW9uKQorbnBtIHRlc3QgJiYgbnBtIHJ1biB0ZXN0Oml0CitgYGAKKworIyMjIEFyY2hpdGVjdHVyZQorCistICoqRnVsbCBUeXBlIFNhZmV0eSoqOiBUeXBlU2NyaXB0ICsgRWZmZWN0IGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgcGF0dGVybnMKKy0gKipFZmZlY3QtYmFzZWQgQXJjaGl0ZWN0dXJlKio6IFVzZXMgRWZmZWN0LnRzIGZvciBjb21wb3NhYmxlLCB0eXBlLXNhZmUgb3BlcmF0aW9ucworLSAqKlNlcnZpY2UtT3JpZW50ZWQgRGVzaWduKio6IERlcGVuZGVuY2llcyBtYW5hZ2VkIHRocm91Z2ggRWZmZWN0J3MgQ29udGV4dC5UYWcgcGF0dGVybnMKKy0gKipMYXllci1CYXNlZCBDb21wb3NpdGlvbioqOiBBcHBsaWNhdGlvbiBidWlsdCB1c2luZyBFZmZlY3QuTGF5ZXIgZm9yIGRlcGVuZGVuY3kgcmVzb2x1dGlvbgorLSAqKkNvbXByZWhlbnNpdmUgVGVzdGluZyoqOiBVbml0ICsgSW50ZWdyYXRpb24gdGVzdHMgd2l0aCBFZmZlY3QgdGVzdGluZyBwYXR0ZXJucworLSAqKkVycm9yIEhhbmRsaW5nKio6IEVmZmVjdC1iYXNlZCBlcnJvciBtYW5hZ2VtZW50IHdpdGggY3VzdG9tIGVycm9yIHR5cGVzCisKKyMjIyBQcm9qZWN0IFN0cnVjdHVyZQorCitgYGAKK3NyYy8KK+KUnOKUgOKUgCBzZXJ2ZXIudHMgICAgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIE1DUCBzZXJ2ZXIgd2l0aCBncmFjZWZ1bCBzdGFydHVwL3NodXRkb3duCivilJzilIDilIAgY29uZmlnLnRzICAgICAgICAgICAgICAjIEVmZmVjdC5Db25maWctYmFzZWQgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uCivilJzilIDilIAgY29uc3RhbnRzLnRzICAgICAgICAgICAjIEFwcGxpY2F0aW9uIGNvbnN0YW50cyBpbnRlZ3JhdGVkIHdpdGggRWZmZWN0IGNvbmZpZ3VyYXRpb24KK+KUnOKUgOKUgCBncmVtbGluLwor4pSCICAg4pSc4pSA4pSAIHNlcnZpY2UudHMgICAgICAgICAjIEdyZW1saW5TZXJ2aWNlIHVzaW5nIEVmZmVjdC5Db250ZXh0LlRhZyBwYXR0ZXJuCivilIIgICDilJzilIDilIAgc2NoZW1hLXNlcnZpY2UudHMgICMgU2NoZW1hU2VydmljZSB3aXRoIEVmZmVjdCBkZXBlbmRlbmN5IGluamVjdGlvbgor4pSCICAg4pSU4pSA4pSAIHR5cGVzLnRzICAgICAgICAgICAjIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHNjaGVtYXMKK+KUnOKUgOKUgCBoYW5kbGVycy8gICAgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIE1DUCByZXF1ZXN0IGhhbmRsZXJzCivilIIgICDilJzilIDilIAgdG9vbHMudHMgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIHRvb2wgaGFuZGxlcnMKK+KUgiAgIOKUnOKUgOKUgCByZXNvdXJjZXMudHMgICAgICAgIyBFZmZlY3QtYmFzZWQgcmVzb3VyY2UgaGFuZGxlcnMKK+KUgiAgIOKUlOKUgOKUgCBlZmZlY3QtcnVudGltZS1icmlkZ2UudHMgIyBNYW5hZ2VkUnVudGltZSBjb250YWluZXIgZm9yIEVmZmVjdCBleGVjdXRpb24KK+KUlOKUgOKUgCB1dGlscy8gICAgICAgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIHV0aWxpdHkgbW9kdWxlcworICAgIOKUnOKUgOKUgCByZXN1bHQtcGFyc2VyLnRzICAgIyBHcmVtbGluIHJlc3VsdCBwYXJzaW5nIHdpdGggbWV0YWRhdGEgZXh0cmFjdGlvbgorICAgIOKUlOKUgOKUgCB0eXBlLWd1YXJkcy50cyAgICAgIyBSdW50aW1lIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zCitgYGAKKworIyMjIEF2YWlsYWJsZSBTY3JpcHRzCisKK3wgQ29tbWFuZCAgICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8Cit8IGBucG0gcnVuIGJ1aWxkYCAgICB8IENvbXBpbGUgVHlwZVNjcmlwdCB0byBKYXZhU2NyaXB0ICAgICAgICAgICAgICAgIHwKK3wgYG5wbSBydW4gZGV2YCAgICAgIHwgRGV2ZWxvcG1lbnQgbW9kZSB3aXRoIGhvdCByZWxvYWQgICAgICAgICAgICAgICAgfAorfCBgbnBtIHRlc3RgICAgICAgICAgfCBSdW4gdW5pdCB0ZXN0IHN1aXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBucG0gcnVuIGxpbnRgICAgICB8IENvZGUgbGludGluZyB3aXRoIEVTTGludCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgYG5wbSBydW4gZm9ybWF0YCAgIHwgQ29kZSBmb3JtYXR0aW5nIHdpdGggUHJldHRpZXIgICAgICAgICAgICAgICAgICAgfAorfCBgbnBtIHJ1biB2YWxpZGF0ZWAgfCBSdW4gYWxsIGNoZWNrcyAoZm9ybWF0LCBsaW50LCB0eXBlLWNoZWNrLCB0ZXN0KSB8CisKKyMjIyBTbWFydCBTY2hlbWEgRGlzY292ZXJ5CisKK1RoZSBzZXJ2ZXIgaW1wbGVtZW50cyBpbnRlbGxpZ2VudCBzY2hlbWEgZGlzY292ZXJ5IHdpdGggZW51bWVyYXRpb24gZGV0ZWN0aW9uOgorCitgYGBqc29uCit7CisgICJuYW1lIjogInN0YXR1cyIsCisgICJ0eXBlIjogWyJzdHJpbmciXSwKKyAgImNhcmRpbmFsaXR5IjogInNpbmdsZSIsCisgICJlbnVtIjogWyJDb25maXJtZWQiLCAiUGVuZGluZyIsICJDYW5jZWxsZWQiLCAiV2FpdGxpc3RlZCJdCit9CitgYGAKKworIyMjIENvbnRyaWJ1dGluZworCitGb2xsb3cgdGhlIEFwYWNoZSBUaW5rZXJQb3AgW2NvbnRyaWJ1dGlvbiBndWlkZWxpbmVzXShodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iL21hc3Rlci9DT05UUklCVVRJTkcuYXNjaWlkb2MpCisKKyMjIyBUZXN0aW5nIFN0cmF0ZWd5CisKKy0gKipVbml0IFRlc3RzKiogKGB0ZXN0cy9gKTogSW5kaXZpZHVhbCBjb21wb25lbnQgdGVzdGluZworICAtIENvbXBvbmVudCBpc29sYXRpb24gd2l0aCBjb21wcmVoZW5zaXZlIG1vY2tpbmcKKyAgLSBUeXBlIHNhZmV0eSB2YWxpZGF0aW9uIHdpdGggWm9kIHNjaGVtYXMKKyAgLSBGYXN0IGV4ZWN1dGlvbiB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcworLSAqKkludGVncmF0aW9uIFRlc3RzKiogKGB0ZXN0cy9pbnRlZ3JhdGlvbi9gKTogRnVsbCB3b3JrZmxvdyB0ZXN0aW5nCisgIC0gUmVhbCBHcmVtbGluIHNlcnZlciBjb25uZWN0aW9ucyB2aWEgRG9ja2VyCisgIC0gRW5kLXRvLWVuZCBNQ1AgcHJvdG9jb2wgdmFsaWRhdGlvbgorICAtIERhdGFiYXNlIG9wZXJhdGlvbnMgYW5kIHF1ZXJ5IGV4ZWN1dGlvbgorLSAqKkNJIFRlc3RpbmcqKjogQXV0b21hdGVkIHRlc3RpbmcgaW4gR2l0SHViIEFjdGlvbnMKKyAgLSBVbml0IHRlc3RzIHJ1biBvbiBldmVyeSBjb21taXQKKyAgLSBJbnRlZ3JhdGlvbiB0ZXN0cyBydW4gd2l0aCBEb2NrZXIgR3JlbWxpbiBzZXJ2ZXIKKyAgLSBCb3RoIHJlcXVpcmVkIGZvciByZWxlYXNlcworCisjIyBMaWNlbnNlCisKK1RoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wIC0gc2VlIHRoZSBbTElDRU5TRV0oaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCkKK2ZpbGUgZm9yIGRldGFpbHMuCisKK1RoaXMgcHJvamVjdCBpcyBwYXJ0IG9mIHRoZSBbQXBhY2hlIFRpbmtlclBvcF0oaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8pIHByb2plY3QuCisKKy0tLQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9lc2xpbnQuY29uZmlnLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9lc2xpbnQuY29uZmlnLmpzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L2VzbGludC5jb25maWcuanMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvZXNsaW50LmNvbmZpZy5qcwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9qZXN0LmNvbmZpZy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvamVzdC5jb25maWcuanMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvamVzdC5jb25maWcuanMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvamVzdC5jb25maWcuanMKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvcGFja2FnZS5qc29uIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9wYWNrYWdlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU4OTJiYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvcGFja2FnZS5qc29uCkBAIC0wLDAgKzEsOTcgQEAKK3sKKyAgIm5hbWUiOiAiZ3JlbWxpbi1tY3AiLAorICAidmVyc2lvbiI6ICI0LjAuMC1hbHBoYTEiLAorICAiZGVzY3JpcHRpb24iOiAiVGhlIG9mZmljaWFsIEFwYWNoZSBUaW5rZXJQb3AgTUNQIHNlcnZlciBmb3IgR3JlbWxpbiB0aGF0IGFsbG93cyBmb3IgZmV0Y2hpbmcgc3RhdHVzLCBzY2hlbWEsIGFuZCBxdWVyeWluZyB1c2luZyBHcmVtbGluIGZvciBhbnkgVGlua2VyUG9wLWNvbXBhdGlibGUgZ3JhcGggZGF0YWJhc2UgKFR5cGVTY3JpcHQgaW1wbGVtZW50YXRpb24pLiIsCisgICJ0eXBlIjogIm1vZHVsZSIsCisgICJtYWluIjogImRpc3Qvc2VydmVyLmpzIiwKKyAgImJpbiI6IHsKKyAgICAiZ3JlbWxpbi1tY3AiOiAiZGlzdC9zZXJ2ZXIuanMiCisgIH0sCisgICJzY3JpcHRzIjogeworICAgICJnZW5lcmF0ZS1zdGVwLW5hbWVzIjogIm5vZGUgc2NyaXB0cy9nZW5lcmF0ZS1zdGVwLW5hbWVzLmpzIiwKKyAgICAiYnVpbGQiOiAibnBtIHJ1biBnZW5lcmF0ZS1zdGVwLW5hbWVzICYmIHRzYyAmJiBjaG1vZCAreCBkaXN0L3NlcnZlci5qcyIsCisgICAgImRldiI6ICJ0c3ggc3JjL3NlcnZlci50cyIsCisgICAgInN0YXJ0IjogIm5vZGUgZGlzdC9zZXJ2ZXIuanMiLAorICAgICJ0ZXN0IjogImplc3QiLAorICAgICJ0ZXN0OndhdGNoIjogImplc3QgLS13YXRjaCIsCisgICAgInRlc3Q6Y292ZXJhZ2UiOiAiamVzdCAtLWNvdmVyYWdlIiwKKyAgICAidGVzdDppdCI6ICJHUkVNTElOX01DUF9FTkRQT0lOVD1sb2NhbGhvc3Q6ODE4Mi9nIGplc3QgdGVzdHMvaW50ZWdyYXRpb24gLS10ZXN0UGF0aElnbm9yZVBhdHRlcm5zPVwiL25vZGVfbW9kdWxlcy98L2Rpc3QvXCIgLS1mb3JjZUV4aXQgLS1kZXRlY3RPcGVuSGFuZGxlcyIsCisgICAgImxpbnQiOiAiZXNsaW50IHNyYyB0ZXN0cyAtLWV4dCAudHMiLAorICAgICJsaW50OmZpeCI6ICJlc2xpbnQgc3JjIHRlc3RzIC0tZXh0IC50cyAtLWZpeCIsCisgICAgImZvcm1hdCI6ICJwcmV0dGllciAtLXdyaXRlIFwic3JjLyoqLyoudHNcIiBcInRlc3RzLyoqLyoudHNcIiBcIioue2pzLGpzb24sbWR9XCIiLAorICAgICJmb3JtYXQ6Y2hlY2siOiAicHJldHRpZXIgLS1jaGVjayBcInNyYy8qKi8qLnRzXCIgXCJ0ZXN0cy8qKi8qLnRzXCIgXCIqLntqcyxqc29uLG1kfVwiIiwKKyAgICAidHlwZS1jaGVjayI6ICJ0c2MgLS1ub0VtaXQiLAorICAgICJ2YWxpZGF0ZSI6ICJucG0gcnVuIGZvcm1hdCAmJiBucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB0eXBlLWNoZWNrICYmIG5wbSB0ZXN0IiwKKyAgICAiY2xlYW4iOiAicm0gLXJmIGRpc3QiLAorICAgICJwcmVwYXJlIjogImh1c2t5IiwKKyAgICAicHJlcHVibGlzaE9ubHkiOiAibnBtIHJ1biBjbGVhbiAmJiBucG0gcnVuIGJ1aWxkICYmIG5wbSBydW4gdmFsaWRhdGUiLAorICAgICJwcmVwYWNrIjogIm5wbSBydW4gYnVpbGQiLAorICAgICJwb3N0aW5zdGFsbCI6ICJjaG1vZCAreCBkaXN0L3NlcnZlci5qcyB8fCB0cnVlIgorICB9LAorICAia2V5d29yZHMiOiBbCisgICAgIm1jcCIsCisgICAgIm1vZGVsLWNvbnRleHQtcHJvdG9jb2wiLAorICAgICJhcGFjaGUtdGlua2VycG9wIiwKKyAgICAidGlua2VycG9wIiwKKyAgICAiZ3JlbWxpbiIsCisgICAgImdyYXBoIiwKKyAgICAiZGF0YWJhc2UiLAorICAgICJncmFwaGRiIgorICBdLAorICAiYXV0aG9yIjogeworICAgICJuYW1lIjogIkFwYWNoZSBUaW5rZXJQb3AgdGVhbSIKKyAgfSwKKyAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgImdyZW1saW50IjogIjQuMC4wLWFscGhhMSIsCisgICAgIkBlZmZlY3QvcGxhdGZvcm0iOiAiXjAuOTAuNiIsCisgICAgIkBlZmZlY3QvcGxhdGZvcm0tbm9kZSI6ICJeMC45Ni4wIiwKKyAgICAiQG1vZGVsY29udGV4dHByb3RvY29sL3NkayI6ICJeMS4xNy40IiwKKyAgICAiZWZmZWN0IjogIl4zLjE3LjkiLAorICAgICJncmVtbGluIjogIjQuMC4wLWFscGhhMSIsCisgICAgIndpbnN0b24iOiAiXjMuMTcuMCIsCisgICAgInpvZCI6ICJeMy4yNS43NiIKKyAgfSwKKyAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAiQGVzbGludC9qcyI6ICJeMTAuMC4wIiwKKyAgICAiQHR5cGVzL2plc3QiOiAiXjMwLjAuMCIsCisgICAgIkB0eXBlcy9ub2RlIjogIl4yNC4zLjAiLAorICAgICJhdWRpdC1jaSI6ICJeNy4xLjAiLAorICAgICJlc2xpbnQiOiAiXjEwLjAuMCIsCisgICAgImVzbGludC1jb25maWctcHJldHRpZXIiOiAiXjEwLjEuOCIsCisgICAgImh1c2t5IjogIl45LjEuNyIsCisgICAgImplc3QiOiAiXjMwLjAuNSIsCisgICAgImxpbnQtc3RhZ2VkIjogIl4xNi4xLjUiLAorICAgICJwcmV0dGllciI6ICJeMy42LjIiLAorICAgICJ0cy1qZXN0IjogIl4yOS40LjEiLAorICAgICJ0c3giOiAiXjQuMjAuNSIsCisgICAgInR5cGVzY3JpcHQiOiAiXjUuOS4yIiwKKyAgICAidHlwZXNjcmlwdC1lc2xpbnQiOiAiXjguNDAuMCIKKyAgfSwKKyAgImVuZ2luZXMiOiB7CisgICAgIm5vZGUiOiAiPj0yMiIKKyAgfSwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wLmdpdCIKKyAgfSwKKyAgImJ1Z3MiOiB7CisgICAgInVybCI6ICJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUCIKKyAgfSwKKyAgImhvbWVwYWdlIjogImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvIiwKKyAgImZpbGVzIjogWworICAgICJkaXN0LyIsCisgICAgIlJFQURNRS5tZCIsCisgICAgIkxJQ0VOU0UiLAorICAgICJOT1RJQ0UiCisgIF0sCisgICJsaW50LXN0YWdlZCI6IHsKKyAgICAiKi57dHMsanN9IjogWworICAgICAgImVzbGludCAtLWZpeCIsCisgICAgICAicHJldHRpZXIgLS13cml0ZSIKKyAgICBdLAorICAgICIqLntqc29uLG1kfSI6IFsKKyAgICAgICJwcmV0dGllciAtLXdyaXRlIgorICAgIF0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9wb20ueG1sIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NGYyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3BvbS54bWwKQEAgLTAsMCArMSwyNTcgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWpzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLW1jcDwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gTUNQPC9uYW1lPgorCisgICAgPHByb3BlcnRpZXM+CisgICAgICAgIDxtYXZlbi50ZXN0LnNraXA+ZmFsc2U8L21hdmVuLnRlc3Quc2tpcD4KKyAgICAgICAgPHNraXBUZXN0cz4ke21hdmVuLnRlc3Quc2tpcH08L3NraXBUZXN0cz4KKyAgICA8L3Byb3BlcnRpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS90YXJnZXQ8L2RpcmVjdG9yeT4KKyAgICAgICAgPGZpbmFsTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH0tJHtwcm9qZWN0LnZlcnNpb259PC9maW5hbE5hbWU+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8IS0tCisgICAgICAgICAgICAgICAgVXNlIGdtYXZlbnBsdXMtcGx1Z2luIHRvOgorICAgICAgICAgICAgICAgICAgICAtIFVwZGF0ZSB0aGUgcGFja2FnZSB2ZXJzaW9uIGFuZCBncmVtbGluIGRlcGVuZGVuY3kgdmVyc2lvbgorICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5nbWF2ZW5wbHVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdtYXZlbnBsdXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5ncm9vdnk8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ncm9vdnktYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtncm9vdnkudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51cGRhdGUtdmVyc2lvbjwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZXhlY3V0ZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBtYXZlblZlcnNpb24gPSAiJHtwcm9qZWN0LnZlcnNpb259IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHZlcnNpb25Gb3JKcyA9IG1hdmVuVmVyc2lvbi5yZXBsYWNlKCItU05BUFNIT1QiLCAiLWFscGhhMSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcGxhdGZvcm1BZ25vc3RpY0Jhc2VEaXJQYXRoID0gcHJvamVjdC5iYXNlZGlyLmdldEFic29sdXRlUGF0aCgpLnJlcGxhY2UoIlxcIiwgIi8iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGZpbGUgPSBuZXcgRmlsZShwbGF0Zm9ybUFnbm9zdGljQmFzZURpclBhdGggKyAiL3BhY2thZ2UuanNvbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgY29udGVudCA9IGZpbGUuZ2V0VGV4dCgiVVRGLTgiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUZpcnN0KC8idmVyc2lvbiI6ICIoLiopIiwvLCAiXCJ2ZXJzaW9uXCI6IFwiIiArIHZlcnNpb25Gb3JKcyArICJcIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUZpcnN0KC8iZ3JlbWxpbiI6ICJbXiJdKyIvLCAiXCJncmVtbGluXCI6IFwiIiArIHZlcnNpb25Gb3JKcyArICJcIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlRmlyc3QoLyJncmVtbGludCI6ICJbXiJdKyIvLCAiXCJncmVtbGludFwiOiBcIiIgKyB2ZXJzaW9uRm9ySnMgKyAiXCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShjb250ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NjcmlwdHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY2xlYW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmNsZWFuPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZmlsZXNldHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZmlsZXNldD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PmRpc3Q8L2RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxmaWxlc2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+bm9kZV9tb2R1bGVzPC9kaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgICAgICAgICAgIDwvZmlsZXNldHM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuZWlyc2xldHQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTUuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5pbnN0YWxsIG5vZGUgYW5kIG5wbSBhdCB3b3Jrc3BhY2Ugcm9vdDwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmFsaWRhdGU8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmluc3RhbGwtbm9kZS1hbmQtbnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3b3JraW5nRGlyZWN0b3J5PiR7cHJvamVjdC5iYXNlZGlyfS8uLjwvd29ya2luZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIHdvcmtzcGFjZSBpbnN0YWxsPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+Y2k8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT4ke3Byb2plY3QuYmFzZWRpcn0vLi48L3dvcmtpbmdEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmluc3RhbGwgbm9kZSBhbmQgbnBtPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+aW5zdGFsbC1ub2RlLWFuZC1ucG08L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ucG0gdmFsaWRhdGU8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPiR7c2tpcFRlc3RzfTwvc2tpcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPnJ1biB2YWxpZGF0ZTwvYXJndW1lbnRzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ucG0gYnVpbGQ8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+cnVuIGJ1aWxkPC9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHdvcmtpbmdEaXJlY3Rvcnk+Ljwvd29ya2luZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgPG5vZGVWZXJzaW9uPiR7cnVudGltZS5ub2RlLnZlcnNpb259PC9ub2RlVmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPG5wbVZlcnNpb24+JHtydW50aW1lLm5wbS52ZXJzaW9ufTwvbnBtVmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPCEtLSBUaGVyZSBpcyBubyBKVk0gY29kZS9hcnRpZmFjdHMgdG8gcHVibGlzaCBmb3IgdGhpcyBtb2R1bGUgLS0+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXZhZG9jLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNvdXJjZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwU291cmNlPnRydWU8L3NraXBTb3VyY2U+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1pbnN0YWxsLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGxveS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuY29kZS5tYXZlbi1yZXBsYWNlci1wbHVnaW48L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+cmVwbGFjZXI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxmaWxlPnNyYy9jb25zdGFudHMudHM8L2ZpbGU+CisgICAgICAgICAgICAgICAgICAgIDxyZXBsYWNlbWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZW1lbnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRva2VuPkdSRU1MSU5fVkVSU0lPTiA9ICcuKic8L3Rva2VuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT5HUkVNTElOX1ZFUlNJT04gPSAnJHtwcm9qZWN0LnZlcnNpb259JzwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3JlcGxhY2VtZW50PgorICAgICAgICAgICAgICAgICAgICA8L3JlcGxhY2VtZW50cz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgPHByb2ZpbGVzPgorICAgICAgICA8IS0tCisgICAgICAgUHJvdmlkZXMgYSB3YXkgdG8gZGVwbG95IHRoZSBncmVtbGluLW1jcCB0byBucG0uIFRoaXMgY2Fubm90IGJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG1hdmVuIGV4ZWN1dGlvbgorICAgICAgIGJlY2F1c2UgbnBtIGRvZXMgbm90IGhhdmUgYSBzdGFnaW5nIGVudmlyb25tZW50IGxpa2Ugc29uYXR5cGUgZm9yIHJlbGVhc2VzLiBBcyBzb29uIGFzIHRoZSByZWxlYXNlIGlzCisgICAgICAgcHVibGlzaGVkIGl0IGlzIHB1YmxpYy4gSW4gb3VyIHJlbGVhc2Ugd29ya2Zsb3csIGRlcGxveSBvY2N1cnMgcHJpb3IgdG8gdm90ZSBvbiB0aGUgcmVsZWFzZSBhbmQgd2UgY2FuJ3QKKyAgICAgICBtYWtlIHRoaXMgc3R1ZmYgcHVibGljIHVudGlsIHRoZSB2b3RlIGlzIG92ZXIuCisgICAgICAgLS0+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmdyZW1saW4tbWNwLWRlcGxveTwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PmZhbHNlPC9hY3RpdmVCeURlZmF1bHQ+CisgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICA8bmFtZT5ucG08L25hbWU+CisgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxidWlsZD4KKyAgICAgICAgICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuZWlyc2xldHQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5mcm9udGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIHB1Ymxpc2g8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+ZGVwbG95PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+cHVibGlzaDwvYXJndW1lbnRzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCBuZWVkcyB0byBiZSBvdmVycmlkZGVuIGdpdmVuIGhvdyB0aGUgPGNvbmZpZ3VyYXRpb24+IGlzIHNwZWNpZmllZCBpbiB0aGUgbWFpbiBidWlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBzaG91bGQgYmUgZmluZSB0byBqdXN0IGFsd2F5cyBkZXBsb3kgYmVjYXVzZSB0aGlzIDxwcm9maWxlPiBuZWVkcyB0byBiZSBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlZCBhbmQgdGhhdCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZ2l2ZW4gb3VyIGRlcGxveW1lbnQgcHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT4uPC93b3JraW5nRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub2RlVmVyc2lvbj4ke3J1bnRpbWUubm9kZS52ZXJzaW9ufTwvbm9kZVZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5wbVZlcnNpb24+JHtydW50aW1lLm5wbS52ZXJzaW9ufTwvbnBtVmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgICAgPC9wbHVnaW5zPgorICAgICAgICAgICAgPC9idWlsZD4KKyAgICAgICAgPC9wcm9maWxlPgorICAgIDwvcHJvZmlsZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NjcmlwdHMvZ2VuZXJhdGUtc3RlcC1uYW1lcy5qcyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc2NyaXB0cy9nZW5lcmF0ZS1zdGVwLW5hbWVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWJkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NjcmlwdHMvZ2VuZXJhdGUtc3RlcC1uYW1lcy5qcwpAQCAtMCwwICsxLDk5IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogR2VuZXJhdGVzIHNyYy90cmFuc2xhdG9yL3N0ZXBOYW1lcy50cyBmcm9tIHRoZSBHcmVtbGluLmc0IGdyYW1tYXIuCisgKgorICogRXh0cmFjdHMgYWxsIHRyYXZlcnNhbE1ldGhvZF94eHggYW5kIHRyYXZlcnNhbFNvdXJjZVNwYXduTWV0aG9kX3h4eCBydWxlIG5hbWVzLAorICogZGVyaXZlcyBjYW1lbENhc2UgY2Fub25pY2FsIHN0ZXAgbmFtZXMgYW5kIHRoZWlyIFBhc2NhbENhc2UgZXF1aXZhbGVudHMgdXNlZCBieQorICogR28gYW5kIC5ORVQgZGlhbGVjdHMuCisgKgorICogUnVuIHZpYTogbnBtIHJ1biBnZW5lcmF0ZS1zdGVwLW5hbWVzCisgKi8KKworaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnOworaW1wb3J0IHsgam9pbiwgZGlybmFtZSB9IGZyb20gJ3BhdGgnOworaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ3VybCc7CisKK2NvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTsKKworY29uc3QgZ3JhbW1hclBhdGggPSBqb2luKAorICBfX2Rpcm5hbWUsCisgICcuLi8uLi8uLi9ncmVtbGluLWxhbmd1YWdlL3NyYy9tYWluL2FudGxyNC9HcmVtbGluLmc0JworKTsKK2NvbnN0IG91dHB1dFBhdGggPSBqb2luKF9fZGlybmFtZSwgJy4uL3NyYy90cmFuc2xhdG9yL3N0ZXBOYW1lcy50cycpOworCitjb25zdCBncmFtbWFyID0gcmVhZEZpbGVTeW5jKGdyYW1tYXJQYXRoLCAndXRmLTgnKTsKKworY29uc3Qgc3RlcE5hbWVzID0gbmV3IFNldCgpOworZm9yIChjb25zdCBsaW5lIG9mIGdyYW1tYXIuc3BsaXQoJ1xuJykpIHsKKyAgY29uc3QgbWF0Y2ggPSBsaW5lLm1hdGNoKC9edHJhdmVyc2FsKD86TWV0aG9kfFNvdXJjZVNwYXduTWV0aG9kKV8oW2EtekEtWl0rKS8pOworICBpZiAobWF0Y2gpIHsKKyAgICBzdGVwTmFtZXMuYWRkKG1hdGNoWzFdKTsKKyAgfQorfQorCitjb25zdCBzb3J0ZWQgPSBbLi4uc3RlcE5hbWVzXS5zb3J0KCk7CisKK2NvbnN0IGNhbWVsQ2FzZUVudHJpZXMgPSBzb3J0ZWQubWFwKG4gPT4gYCAgJyR7bn0nLGApLmpvaW4oJ1xuJyk7Citjb25zdCBwYXNjYWxDYXNlRW50cmllcyA9IHNvcnRlZAorICAubWFwKG4gPT4gYCAgJyR7blswXS50b1VwcGVyQ2FzZSgpfSR7bi5zbGljZSgxKX0nLGApCisgIC5qb2luKCdcbicpOworCitjb25zdCBjb250ZW50ID0gYC8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gR2VuZXJhdGVkIGJ5IHNjcmlwdHMvZ2VuZXJhdGUtc3RlcC1uYW1lcy5qcyDigJQgZG8gbm90IGVkaXQgbWFudWFsbHkuCisvLyBSZS1ydW4gXGBucG0gcnVuIGdlbmVyYXRlLXN0ZXAtbmFtZXNcYCBhZnRlciBjaGFuZ2VzIHRvIEdyZW1saW4uZzQuCisKKy8qKgorICogQ2Fub25pY2FsIGNhbWVsQ2FzZSBHcmVtbGluIHN0ZXAgbmFtZXMgZGVyaXZlZCBmcm9tIHRoZSBncmVtbGluLWxhbmd1YWdlIGdyYW1tYXIuCisgKiBVc2VkIHRvIHNhZmVseSBpZGVudGlmeSBzdGVwIG5hbWVzIGR1cmluZyBub3JtYWxpemF0aW9uLgorICovCitleHBvcnQgY29uc3QgR1JFTUxJTl9TVEVQX05BTUVTOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbCiske2NhbWVsQ2FzZUVudHJpZXN9CitdKTsKKworLyoqCisgKiBQYXNjYWxDYXNlIGVxdWl2YWxlbnRzIG9mIEdyZW1saW4gc3RlcCBuYW1lcywgYXMgdXNlZCBieSBHbyBhbmQgLk5FVCBkaWFsZWN0cy4KKyAqIFVzZWQgYXMgYW4gYWxsb3dsaXN0IHdoZW4gY29udmVydGluZyBQYXNjYWxDYXNlIHRva2VucyB0byBjYW1lbENhc2UgZHVyaW5nIG5vcm1hbGl6YXRpb24uCisgKi8KK2V4cG9ydCBjb25zdCBHUkVNTElOX1NURVBfTkFNRVNfUEFTQ0FMOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbCiske3Bhc2NhbENhc2VFbnRyaWVzfQorXSk7CitgOworCit3cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIGNvbnRlbnQsICd1dGYtOCcpOworY29uc29sZS5sb2coYEdlbmVyYXRlZCAke291dHB1dFBhdGh9IHdpdGggJHtzdGVwTmFtZXMuc2l6ZX0gc3RlcCBuYW1lcy5gKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2NvbmZpZy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2NvbmZpZy50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2IwNTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvY29uZmlnLnRzCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogR3JlbWxpbiBNQ1AgU2VydmVyCisgKgorICogVHlwZS1zYWZlIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gd2l0aCB0eXBlLXNhZmUgZW52aXJvbm1lbnQgdmFyaWFibGUgbG9hZGluZy4KKyAqCisgKiBQcm92aWRlcyBjb21wcmVoZW5zaXZlIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBmb3IgdGhlIEdyZW1saW4gTUNQIHNlcnZlciB1c2luZworICogRWZmZWN0LkNvbmZpZyBmb3IgdmFsaWRhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIEFsbCBjb25maWd1cmF0aW9ucyBhcmUgbG9hZGVkIGZyb20KKyAqIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzIGFuZCBkZXRhaWxlZCB2YWxpZGF0aW9uLgorICoKKyAqIEBleGFtcGxlIEVudmlyb25tZW50IFZhcmlhYmxlcworICogYGBgYmFzaAorICogR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9bG9jYWxob3N0OjgxODIKKyAqIEdSRU1MSU5fTUNQX1VTRV9TU0w9ZmFsc2UKKyAqIEdSRU1MSU5fTUNQX0xPR19MRVZFTD1pbmZvCisgKiBHUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEPXRydWUKKyAqIGBgYAorICovCisKK2ltcG9ydCB7IENvbmZpZywgQ29uZmlnRXJyb3IsIEVmZmVjdCwgRWl0aGVyLCBwaXBlIH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB7IERFRkFVTFRTLCBTRVJWRVJfSU5GTyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJzsKKworLyoqCisgKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhIEdyZW1saW4gZW5kcG9pbnQgc3RyaW5nLgorICogRm9ybWF0OiBob3N0OnBvcnQgb3IgaG9zdDpwb3J0L3RyYXZlcnNhbF9zb3VyY2UKKyAqIFJldHVybnMgRWl0aGVyLnJpZ2h0KHtob3N0LCBwb3J0LCB0cmF2ZXJzYWxTb3VyY2V9KSBvbiBzdWNjZXNzLCBFaXRoZXIubGVmdChDb25maWdFcnJvcikgb24gZmFpbHVyZS4KKyAqIEBwYXJhbSBlbmRwb2ludCAtIFJhdyBlbmRwb2ludCBzdHJpbmcKKyAqLworY29uc3QgcGFyc2VFbmRwb2ludCA9ICgKKyAgZW5kcG9pbnQ6IHN0cmluZworKTogRWl0aGVyLkVpdGhlcjwKKyAgeyBob3N0OiBzdHJpbmc7IHBvcnQ6IG51bWJlcjsgdHJhdmVyc2FsU291cmNlOiBzdHJpbmcgfSwKKyAgQ29uZmlnRXJyb3IuQ29uZmlnRXJyb3IKKz4gPT4geworICBjb25zdCB0cmltbWVkRW5kcG9pbnQgPSBlbmRwb2ludC50cmltKCk7CisKKyAgaWYgKCF0cmltbWVkRW5kcG9pbnQpIHsKKyAgICByZXR1cm4gRWl0aGVyLmxlZnQoQ29uZmlnRXJyb3IuSW52YWxpZERhdGEoW10sICdFbmRwb2ludCBjYW5ub3QgYmUgZW1wdHknKSk7CisgIH0KKworICBjb25zdCBwYXJ0cyA9IHRyaW1tZWRFbmRwb2ludC5zcGxpdCgnLycpOworICBjb25zdCBob3N0UG9ydCA9IHBhcnRzWzBdOworICBjb25zdCB0cmF2ZXJzYWxTb3VyY2UgPSBwYXJ0c1sxXSA/PyBERUZBVUxUUy5UUkFWRVJTQUxfU09VUkNFOworCisgIGlmICghaG9zdFBvcnQpIHsKKyAgICByZXR1cm4gRWl0aGVyLmxlZnQoCisgICAgICBDb25maWdFcnJvci5JbnZhbGlkRGF0YSgKKyAgICAgICAgW10sCisgICAgICAgICdJbnZhbGlkIGVuZHBvaW50IGZvcm1hdC4gRXhwZWN0ZWQgaG9zdDpwb3J0IG9yIGhvc3Q6cG9ydC90cmF2ZXJzYWxfc291cmNlJworICAgICAgKQorICAgICk7CisgIH0KKworICBjb25zdCBob3N0UG9ydFBhcnRzID0gaG9zdFBvcnQuc3BsaXQoJzonKTsKKyAgaWYgKGhvc3RQb3J0UGFydHMubGVuZ3RoICE9PSAyKSB7CisgICAgcmV0dXJuIEVpdGhlci5sZWZ0KAorICAgICAgQ29uZmlnRXJyb3IuSW52YWxpZERhdGEoW10sICdJbnZhbGlkIGhvc3Q6cG9ydCBmb3JtYXQuIEV4cGVjdGVkIGV4YWN0bHkgb25lIGNvbG9uIHNlcGFyYXRvcicpCisgICAgKTsKKyAgfQorCisgIGNvbnN0IFtob3N0LCBwb3J0U3RyXSA9IGhvc3RQb3J0UGFydHM7CisKKyAgaWYgKCFob3N0Py50cmltKCkgfHwgIXBvcnRTdHI/LnRyaW0oKSkgeworICAgIHJldHVybiBFaXRoZXIubGVmdCgKKyAgICAgIENvbmZpZ0Vycm9yLkludmFsaWREYXRhKFtdLCAnSG9zdCBhbmQgcG9ydCBhcmUgcmVxdWlyZWQgYW5kIGNhbm5vdCBiZSBlbXB0eScpCisgICAgKTsKKyAgfQorCisgIGNvbnN0IHBvcnQgPSBwYXJzZUludChwb3J0U3RyLnRyaW0oKSwgMTApOworICBpZiAoaXNOYU4ocG9ydCkgfHwgcG9ydCA8PSAwIHx8IHBvcnQgPiA2NTUzNSkgeworICAgIHJldHVybiBFaXRoZXIubGVmdCgKKyAgICAgIENvbmZpZ0Vycm9yLkludmFsaWREYXRhKFtdLCAnUG9ydCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDY1NTM1JykKKyAgICApOworICB9CisKKyAgcmV0dXJuIEVpdGhlci5yaWdodCh7CisgICAgaG9zdDogaG9zdC50cmltKCksCisgICAgcG9ydCwKKyAgICB0cmF2ZXJzYWxTb3VyY2U6IHRyYXZlcnNhbFNvdXJjZS50cmltKCksCisgIH0pOworfTsKKworLyoqCisgKiBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIGludG8gYSBzdHJpbmcgYXJyYXksIHRyaW1taW5nIHdoaXRlc3BhY2UgYW5kIHJlbW92aW5nIGVtcHR5IGVudHJpZXMuCisgKiBAcGFyYW0gdmFsdWUgLSBSYXcgY29tbWEtc2VwYXJhdGVkIHN0cmluZworICogQHJldHVybnMgc3RyaW5nW10KKyAqLworY29uc3QgcGFyc2VDb21tYVNlcGFyYXRlZExpc3QgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdID0+CisgIHZhbHVlCisgICAgLnNwbGl0KCcsJykKKyAgICAubWFwKHMgPT4gcy50cmltKCkpCisgICAgLmZpbHRlcihzID0+IHMubGVuZ3RoID4gMCk7CisKKy8qKgorICogR1JFTUxJTl9NQ1BfRU5EUE9JTlQ6IHN0cmluZywgb3B0aW9uYWwuIEdyZW1saW4gU2VydmVyIGNvbXBhdGlibGUgd2Vic29ja2V0IGVuZHBvaW50LgorICogV2hlbiBvbWl0dGVkIHRoZSBzZXJ2ZXIgc3RhcnRzIGluIG9mZmxpbmUgbW9kZSDigJQgdHJhbnNsYXRlL2Zvcm1hdCB0b29scyByZW1haW4gYXZhaWxhYmxlCisgKiBidXQgZ3JhcGggdG9vbHMgKHF1ZXJ5LCBzY2hlbWEsIHN0YXR1cykgd2lsbCByZXR1cm4gYSAibm8gc2VydmVyIGNvbmZpZ3VyZWQiIGVycm9yLgorICovCitjb25zdCBHcmVtbGluTWNwRW5kcG9pbnRDb25maWcgPSBDb25maWcub3B0aW9uKAorICBwaXBlKENvbmZpZy5zdHJpbmcoJ0dSRU1MSU5fTUNQX0VORFBPSU5UJyksIENvbmZpZy5tYXBPckZhaWwocGFyc2VFbmRwb2ludCkpCispOworCisvKioKKyAqIEdSRU1MSU5fTUNQX1VTRV9TU0w6IGJvb2xlYW4sIG9wdGlvbmFsLiBFbmFibGVzIFNTTCBhbmQgZGVmYXVsdHMgdG8gZmFsc2UuCisgKi8KK2NvbnN0IEdyZW1saW5NY3BVc2VTc2xDb25maWcgPSBDb25maWcud2l0aERlZmF1bHQoCisgIENvbmZpZy5ib29sZWFuKCdHUkVNTElOX01DUF9VU0VfU1NMJyksCisgIERFRkFVTFRTLlVTRV9TU0wKKyk7CisKKy8qKgorICogR1JFTUxJTl9NQ1BfVVNFUk5BTUU6IHN0cmluZywgb3B0aW9uYWwuIEdyZW1saW4gREIgdXNlcm5hbWUKKyAqLworY29uc3QgR3JlbWxpbk1jcFVzZXJuYW1lQ29uZmlnID0gQ29uZmlnLm9wdGlvbihDb25maWcuc3RyaW5nKCdHUkVNTElOX01DUF9VU0VSTkFNRScpKTsKKworLyoqCisgKiBHUkVNTElOX01DUF9QQVNTV09SRDogc3RyaW5nLCBvcHRpb25hbCwgcmVkYWN0ZWQuIEdyZW1saW4gREIgcGFzc3dvcmQKKyAqLworY29uc3QgR3JlbWxpbk1jcFBhc3N3b3JkQ29uZmlnID0gQ29uZmlnLm9wdGlvbihDb25maWcucmVkYWN0ZWQoJ0dSRU1MSU5fTUNQX1BBU1NXT1JEJykpOworCisvKioKKyAqIEdSRU1MSU5fTUNQX0xPR19MRVZFTDogJ2Vycm9yJyB8ICd3YXJuJyB8ICdpbmZvJyB8ICdkZWJ1ZycsIGRlZmF1bHQ6IGluZm8uIExvZ2dpbmcgdmVyYm9zaXR5CisgKi8KK2NvbnN0IEdyZW1saW5NY3BMb2dMZXZlbENvbmZpZyA9IHBpcGUoCisgIENvbmZpZy5saXRlcmFsKCdlcnJvcicsICd3YXJuJywgJ2luZm8nLCAnZGVidWcnKSgnR1JFTUxJTl9NQ1BfTE9HX0xFVkVMJyksCisgIENvbmZpZy53aXRoRGVmYXVsdChERUZBVUxUUy5MT0dfTEVWRUwpCispOworCisvKioKKyAqIEdSRU1MSU5fTUNQX0lETEVfVElNRU9VVDogbnVtYmVyLCBkZWZhdWx0OiAzMDAuIENvbm5lY3Rpb24gaWRsZSB0aW1lb3V0IChzZWNvbmRzKQorICovCitjb25zdCBHcmVtbGluTWNwSWRsZVRpbWVvdXRDb25maWcgPSBwaXBlKAorICBDb25maWcuaW50ZWdlcignR1JFTUxJTl9NQ1BfSURMRV9USU1FT1VUJyksCisgIENvbmZpZy53aXRoRGVmYXVsdCgzMDApLAorICBDb25maWcudmFsaWRhdGUoeworICAgIG1lc3NhZ2U6ICdJZGxlIHRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInLAorICAgIHZhbGlkYXRpb246IG4gPT4gbiA+IDAsCisgIH0pCispOworCisvKioKKyAqIEdSRU1MSU5fTUNQX0VOVU1fRElTQ09WRVJZX0VOQUJMRUQ6IGJvb2xlYW4sIGRlZmF1bHQ6IHRydWUuIEVuYWJsZSBlbnVtIHByb3BlcnR5IGRpc2NvdmVyeQorICovCitjb25zdCBHcmVtbGluTWNwRW51bURpc2NvdmVyeUVuYWJsZWRDb25maWcgPSBDb25maWcud2l0aERlZmF1bHQoCisgIENvbmZpZy5ib29sZWFuKCdHUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEJyksCisgIHRydWUKKyk7CisKKy8qKgorICogR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTEQ6IG51bWJlciwgZGVmYXVsdDogMTAuIE1heCBjYXJkaW5hbGl0eSBmb3IgZW51bSBkZXRlY3Rpb24KKyAqLworY29uc3QgR3JlbWxpbk1jcEVudW1DYXJkaW5hbGl0eVRocmVzaG9sZENvbmZpZyA9IHBpcGUoCisgIENvbmZpZy5pbnRlZ2VyKCdHUkVNTElOX01DUF9FTlVNX0NBUkRJTkFMSVRZX1RIUkVTSE9MRCcpLAorICBDb25maWcud2l0aERlZmF1bHQoMTApLAorICBDb25maWcudmFsaWRhdGUoeworICAgIG1lc3NhZ2U6ICdFbnVtIGNhcmRpbmFsaXR5IHRocmVzaG9sZCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsCisgICAgdmFsaWRhdGlvbjogbiA9PiBuID4gMCwKKyAgfSkKKyk7CisKKy8qKgorICogR1JFTUxJTl9NQ1BfRU5VTV9QUk9QRVJUWV9ERU5ZTElTVDogc3RyaW5nLCBkZWZhdWx0OiBpZCxwayxuYW1lLGRlc2NyaXB0aW9uLC4uLgorICogQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcHJvcGVydGllcyB0byBleGNsdWRlIGZyb20gZW51bSBkZXRlY3Rpb24KKyAqLworY29uc3QgR3JlbWxpbk1jcEVudW1Qcm9wZXJ0eURlbnlMaXN0Q29uZmlnID0gcGlwZSgKKyAgQ29uZmlnLnN0cmluZygnR1JFTUxJTl9NQ1BfRU5VTV9QUk9QRVJUWV9ERU5ZTElTVCcpLAorICBDb25maWcud2l0aERlZmF1bHQoJ2lkLHBrLG5hbWUsZGVzY3JpcHRpb24sc3RhcnREYXRlLGVuZERhdGUsdGltZXN0YW1wLGNyZWF0ZWRBdCx1cGRhdGVkQXQnKSwKKyAgQ29uZmlnLm1hcChwYXJzZUNvbW1hU2VwYXJhdGVkTGlzdCkKKyk7CisKKy8qKgorICogR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUzogYm9vbGVhbiwgZGVmYXVsdDogZmFsc2UuIEluY2x1ZGUgc2FtcGxlIHZhbHVlcyBpbiBzY2hlbWEgb3V0cHV0CisgKi8KK2NvbnN0IEdyZW1saW5NY3BTY2hlbWFJbmNsdWRlU2FtcGxlVmFsdWVzQ29uZmlnID0gQ29uZmlnLndpdGhEZWZhdWx0KAorICBDb25maWcuYm9vbGVhbignR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUycpLAorICBmYWxzZQorKTsKKworLyoqCisgKiBHUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTOiBudW1iZXIsIGRlZmF1bHQ6IDEwLiBNYXggZW51bSB2YWx1ZXMgcGVyIHByb3BlcnR5ICjiiaQgMTAwKQorICovCitjb25zdCBHcmVtbGluTWNwU2NoZW1hTWF4RW51bVZhbHVlc0NvbmZpZyA9IHBpcGUoCisgIENvbmZpZy5pbnRlZ2VyKCdHUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTJyksCisgIENvbmZpZy53aXRoRGVmYXVsdCgxMCksCisgIENvbmZpZy52YWxpZGF0ZSh7CisgICAgbWVzc2FnZTogJ01heCBlbnVtIHZhbHVlcyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAo4omkIDEwMCknLAorICAgIHZhbGlkYXRpb246IG4gPT4gbiA+IDAgJiYgbiA8PSAxMDAsCisgIH0pCispOworCisvKioKKyAqIEdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX0NPVU5UUzogYm9vbGVhbiwgZGVmYXVsdDogZmFsc2UuIEluY2x1ZGUgcHJvcGVydHkgY291bnRzIGluIHNjaGVtYSBvdXRwdXQKKyAqLworY29uc3QgR3JlbWxpbk1jcFNjaGVtYUluY2x1ZGVDb3VudHNDb25maWcgPSBDb25maWcud2l0aERlZmF1bHQoCisgIENvbmZpZy5ib29sZWFuKCdHUkVNTElOX01DUF9TQ0hFTUFfSU5DTFVERV9DT1VOVFMnKSwKKyAgZmFsc2UKKyk7CisKKy8qKgorICogQ29ubmVjdGlvbkNvbmZpZzogQWdncmVnYXRlcyBhbmQgdmFsaWRhdGVzIGFsbCBHcmVtbGluIGNvbm5lY3Rpb24tcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgKiBFbnN1cmVzIGhvc3QsIHBvcnQsIHRyYXZlcnNhbFNvdXJjZSwgdXNlU1NMLCB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCBpZGxlVGltZW91dCBhcmUgcHJlc2VudCBhbmQgdmFsaWQuCisgKiBSZXR1cm5zIGEgdmFsaWRhdGVkIGNvbmZpZyBvYmplY3Qgb3IgdGhyb3dzIENvbmZpZ0Vycm9yIG9uIGZhaWx1cmUuCisgKi8KK2NvbnN0IENvbm5lY3Rpb25Db25maWcgPSBDb25maWcuYWxsKHsKKyAgZW5kcG9pbnQ6IEdyZW1saW5NY3BFbmRwb2ludENvbmZpZywKKyAgdXNlU1NMOiBHcmVtbGluTWNwVXNlU3NsQ29uZmlnLAorICB1c2VybmFtZTogR3JlbWxpbk1jcFVzZXJuYW1lQ29uZmlnLAorICBwYXNzd29yZDogR3JlbWxpbk1jcFBhc3N3b3JkQ29uZmlnLAorICBpZGxlVGltZW91dDogR3JlbWxpbk1jcElkbGVUaW1lb3V0Q29uZmlnLAorfSk7CisKKy8qKgorICogU2NoZW1hRGlzY292ZXJ5Q29uZmlnOiBBZ2dyZWdhdGVzIGFuZCB2YWxpZGF0ZXMgYWxsIHNjaGVtYSBkaXNjb3ZlcnktcmVsYXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisgKiBFbnN1cmVzIGVudW0gZGlzY292ZXJ5LCBjYXJkaW5hbGl0eSwgZGVueWxpc3QsIHNhbXBsZSB2YWx1ZXMsIG1heCBlbnVtIHZhbHVlcywgYW5kIGNvdW50cyBhcmUgcHJlc2VudCBhbmQgdmFsaWQuCisgKiBSZXR1cm5zIGEgdmFsaWRhdGVkIGNvbmZpZyBvYmplY3Qgb3IgdGhyb3dzIENvbmZpZ0Vycm9yIG9uIGZhaWx1cmUuCisgKi8KK2NvbnN0IFNjaGVtYURpc2NvdmVyeUNvbmZpZyA9IENvbmZpZy5hbGwoeworICBlbnVtRGlzY292ZXJ5RW5hYmxlZDogR3JlbWxpbk1jcEVudW1EaXNjb3ZlcnlFbmFibGVkQ29uZmlnLAorICBlbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQ6IEdyZW1saW5NY3BFbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGRDb25maWcsCisgIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBHcmVtbGluTWNwRW51bVByb3BlcnR5RGVueUxpc3RDb25maWcsCisgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IEdyZW1saW5NY3BTY2hlbWFJbmNsdWRlU2FtcGxlVmFsdWVzQ29uZmlnLAorICBtYXhFbnVtVmFsdWVzOiBHcmVtbGluTWNwU2NoZW1hTWF4RW51bVZhbHVlc0NvbmZpZywKKyAgaW5jbHVkZUNvdW50czogR3JlbWxpbk1jcFNjaGVtYUluY2x1ZGVDb3VudHNDb25maWcsCit9KTsKKworLyoqCisgKiBTZXJ2ZXJDb25maWc6IEltbXV0YWJsZSBzZXJ2ZXIgbmFtZSBhbmQgdmVyc2lvbiBmcm9tIGNvbnN0YW50cy50cworICovCitjb25zdCBTZXJ2ZXJDb25maWcgPSBDb25maWcuc3VjY2VlZCh7CisgIG5hbWU6IFNFUlZFUl9JTkZPLk5BTUUsCisgIHZlcnNpb246IFNFUlZFUl9JTkZPLlZFUlNJT04sCit9IGFzIGNvbnN0KTsKKworLyoqCisgKiBMb2dnaW5nQ29uZmlnOiBBZ2dyZWdhdGVzIGFuZCB2YWxpZGF0ZXMgbG9nZ2luZyBjb25maWd1cmF0aW9uLgorICogQWx3YXlzIHVzZXMgc3RydWN0dXJlZCBsb2dnaW5nIG91dHB1dC4KKyAqLworY29uc3QgTG9nZ2luZ0NvbmZpZyA9IHBpcGUoCisgIENvbmZpZy5hbGwoeworICAgIGxldmVsOiBHcmVtbGluTWNwTG9nTGV2ZWxDb25maWcsCisgIH0pLAorICBDb25maWcubWFwKGNvbmZpZyA9PiAoeworICAgIGxldmVsOiBjb25maWcubGV2ZWwsCisgICAgc3RydWN0dXJlZDogdHJ1ZSBhcyBjb25zdCwgLy8gQWx3YXlzIHVzZSBzdHJ1Y3R1cmVkIGxvZ2dpbmcKKyAgfSkpCispOworCisvKioKKyAqIEFwcENvbmZpZzogQ29tcGxldGUgdmFsaWRhdGVkIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgorICogQWdncmVnYXRlcyBncmVtbGluLCBzY2hlbWEsIHNlcnZlciwgYW5kIGxvZ2dpbmcgY29uZmlncy4KKyAqIFRocm93cyBDb25maWdFcnJvciBvbiBhbnkgdmFsaWRhdGlvbiBmYWlsdXJlLgorICovCitleHBvcnQgY29uc3QgQXBwQ29uZmlnID0gQ29uZmlnLmFsbCh7CisgIGdyZW1saW46IENvbm5lY3Rpb25Db25maWcsCisgIHNjaGVtYTogU2NoZW1hRGlzY292ZXJ5Q29uZmlnLAorICBzZXJ2ZXI6IFNlcnZlckNvbmZpZywKKyAgbG9nZ2luZzogTG9nZ2luZ0NvbmZpZywKK30pOworCisvKioKKyAqIFR5cGUgYWxpYXMgZm9yIHRoZSByZXNvbHZlZCwgdmFsaWRhdGVkIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0LgorICovCitleHBvcnQgdHlwZSBBcHBDb25maWdUeXBlID0gRWZmZWN0LkVmZmVjdC5TdWNjZXNzPHR5cGVvZiBBcHBDb25maWc+OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvY29ubmVjdGl2aXR5LXN0YXRlLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvY29ubmVjdGl2aXR5LXN0YXRlLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NmNiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9jb25uZWN0aXZpdHktc3RhdGUudHMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgdHlwZSB7IEdyZW1saW5Db25uZWN0aW9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7CisKK2V4cG9ydCB0eXBlIEdyZW1saW5Db25uZWN0aXZpdHlTdGF0ZSA9ICd1bmtub3duJyB8ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCc7CisKK3R5cGUgQ29ubmVjdGl2aXR5TGlzdGVuZXIgPSAoCisgIG5leHQ6IEdyZW1saW5Db25uZWN0aXZpdHlTdGF0ZSwKKyAgcHJldmlvdXM6IEdyZW1saW5Db25uZWN0aXZpdHlTdGF0ZQorKSA9PiB2b2lkOworCitsZXQgY29ubmVjdGl2aXR5U3RhdGU6IEdyZW1saW5Db25uZWN0aXZpdHlTdGF0ZSA9ICd1bmtub3duJzsKK2NvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8Q29ubmVjdGl2aXR5TGlzdGVuZXI+KCk7CisKK2NvbnN0IHRyYW5zaXRpb25Db25uZWN0aXZpdHlTdGF0ZSA9IChuZXh0OiBHcmVtbGluQ29ubmVjdGl2aXR5U3RhdGUpOiB2b2lkID0+IHsKKyAgY29uc3QgcHJldmlvdXMgPSBjb25uZWN0aXZpdHlTdGF0ZTsKKyAgaWYgKHByZXZpb3VzID09PSBuZXh0KSB7CisgICAgcmV0dXJuOworICB9CisgIGNvbm5lY3Rpdml0eVN0YXRlID0gbmV4dDsKKyAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBsaXN0ZW5lcnMpIHsKKyAgICBsaXN0ZW5lcihuZXh0LCBwcmV2aW91cyk7CisgIH0KK307CisKK2V4cG9ydCBjb25zdCBtYXJrR3JlbWxpbkNvbm5lY3RlZCA9ICgpOiB2b2lkID0+IHsKKyAgdHJhbnNpdGlvbkNvbm5lY3Rpdml0eVN0YXRlKCdjb25uZWN0ZWQnKTsKK307CisKK2V4cG9ydCBjb25zdCBtYXJrR3JlbWxpbkRpc2Nvbm5lY3RlZCA9ICgpOiB2b2lkID0+IHsKKyAgdHJhbnNpdGlvbkNvbm5lY3Rpdml0eVN0YXRlKCdkaXNjb25uZWN0ZWQnKTsKK307CisKK2V4cG9ydCBjb25zdCBnZXRHcmVtbGluQ29ubmVjdGl2aXR5U3RhdGUgPSAoKTogR3JlbWxpbkNvbm5lY3Rpdml0eVN0YXRlID0+IGNvbm5lY3Rpdml0eVN0YXRlOworCitleHBvcnQgY29uc3Qgb25HcmVtbGluQ29ubmVjdGl2aXR5U3RhdGVDaGFuZ2UgPSAobGlzdGVuZXI6IENvbm5lY3Rpdml0eUxpc3RlbmVyKTogKCgpID0+IHZvaWQpID0+IHsKKyAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7CisgIHJldHVybiAoKSA9PiBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTsKK307CisKK2V4cG9ydCBjb25zdCBpc0dyZW1saW5Db25uZWN0aW9uRXJyb3IgPSAoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBHcmVtbGluQ29ubmVjdGlvbkVycm9yID0+CisgIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYKKyAgZXJyb3IgIT09IG51bGwgJiYKKyAgJ190YWcnIGluIGVycm9yICYmCisgIChlcnJvciBhcyB7IF90YWc/OiBzdHJpbmcgfSkuX3RhZyA9PT0gJ0dyZW1saW5Db25uZWN0aW9uRXJyb3InOworCisvLyBUZXN0LW9ubHkgdXRpbGl0eSB0byByZXNldCBnbG9iYWwgc2luZ2xldG9uIHN0YXRlIGJldHdlZW4gdGVzdCBjYXNlcy4KK2V4cG9ydCBjb25zdCByZXNldEdyZW1saW5Db25uZWN0aXZpdHlTdGF0ZUZvclRlc3RzID0gKCk6IHZvaWQgPT4geworICBjb25uZWN0aXZpdHlTdGF0ZSA9ICd1bmtub3duJzsKKyAgbGlzdGVuZXJzLmNsZWFyKCk7Cit9OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvY29uc3RhbnRzLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvY29uc3RhbnRzLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzN2IzM2MKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9jb25zdGFudHMudHMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgQXBwbGljYXRpb24gY29uc3RhbnRzIGFuZCBkZWZhdWx0IHZhbHVlcy4KKyAqCisgKiBDZW50cmFsaXplZCBsb2NhdGlvbiBmb3IgYWxsIGNvbnN0YW50IHZhbHVlcyB1c2VkIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uCisgKiBpbmNsdWRpbmcgc2VydmVyIG1ldGFkYXRhLCBNQ1AgcHJvdG9jb2wgaWRlbnRpZmllcnMsIGFuZCBjb25maWd1cmF0aW9uIGRlZmF1bHRzLgorICovCisKK2V4cG9ydCBjb25zdCBHUkVNTElOX1ZFUlNJT04gPSAnNC4wLjAtU05BUFNIT1QnOyAvLyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgorCisvLyBTZXJ2ZXIgSW5mb3JtYXRpb24KK2V4cG9ydCBjb25zdCBTRVJWRVJfSU5GTyA9IHsKKyAgTkFNRTogJ2dyZW1saW4tbWNwJywKKyAgVkVSU0lPTjogR1JFTUxJTl9WRVJTSU9OLAorfSBhcyBjb25zdDsKKworLy8gTUNQIFJlc291cmNlIFVSSXMKK2V4cG9ydCBjb25zdCBSRVNPVVJDRV9VUklTID0geworICBTVEFUVVM6ICdncmVtbGluOi8vc3RhdHVzJywKKyAgU0NIRU1BOiAnZ3JlbWxpbjovL3NjaGVtYScsCit9IGFzIGNvbnN0OworCisvLyBNQ1AgVG9vbCBOYW1lcworZXhwb3J0IGNvbnN0IFRPT0xfTkFNRVMgPSB7CisgIEdFVF9HUkFQSF9TVEFUVVM6ICdnZXRfZ3JhcGhfc3RhdHVzJywKKyAgR0VUX0dSQVBIX1NDSEVNQTogJ2dldF9ncmFwaF9zY2hlbWEnLAorICBSVU5fR1JFTUxJTl9RVUVSWTogJ3J1bl9ncmVtbGluX3F1ZXJ5JywKKyAgUkVGUkVTSF9TQ0hFTUFfQ0FDSEU6ICdyZWZyZXNoX3NjaGVtYV9jYWNoZScsCisgIEZPUk1BVF9HUkVNTElOX1FVRVJZOiAnZm9ybWF0X2dyZW1saW5fcXVlcnknLAorICBUUkFOU0xBVEVfR1JFTUxJTl9RVUVSWTogJ3RyYW5zbGF0ZV9ncmVtbGluX3F1ZXJ5JywKK30gYXMgY29uc3Q7CisKKy8vIERlZmF1bHQgQ29uZmlndXJhdGlvbiBWYWx1ZXMKK2V4cG9ydCBjb25zdCBERUZBVUxUUyA9IHsKKyAgVFJBVkVSU0FMX1NPVVJDRTogJ2cnLAorICBVU0VfU1NMOiBmYWxzZSwKKyAgTE9HX0xFVkVMOiAnaW5mbycgYXMgY29uc3QsCit9IGFzIGNvbnN0OworCisvLyBDb25uZWN0aW9uIFN0YXR1cyBNZXNzYWdlcyAob25seSB1c2VkIG9uZXMpCitleHBvcnQgY29uc3QgU1RBVFVTX01FU1NBR0VTID0geworICBBVkFJTEFCTEU6ICdBdmFpbGFibGUnLAorfSBhcyBjb25zdDsKKworLy8gTUlNRSBUeXBlcworZXhwb3J0IGNvbnN0IE1JTUVfVFlQRVMgPSB7CisgIFRFWFRfUExBSU46ICd0ZXh0L3BsYWluJywKKyAgQVBQTElDQVRJT05fSlNPTjogJ2FwcGxpY2F0aW9uL2pzb24nLAorfSBhcyBjb25zdDsKZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2Vycm9ycy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2Vycm9ycy50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZXJyb3JzLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9lcnJvcnMudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vY2xpZW50LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9jbGllbnQudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3ZDNjMwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vY2xpZW50LnRzCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgQ29udGV4dCwgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB0eXBlIHsgR3JlbWxpbkNvbm5lY3Rpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycy5qcyc7CitpbXBvcnQgdHlwZSB7IENvbm5lY3Rpb25TdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnOworCisvKioKKyAqIEdyZW1saW4gY2xpZW50IHNlcnZpY2UgcHJvdmlkaW5nIGxhenksIHJlY29ubmVjdC1jYXBhYmxlIGNvbm5lY3Rpb24gbWFuYWdlbWVudC4KKyAqCisgKiBgZ2V0Q29ubmVjdGlvbmAgcmV0dXJucyB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBmcm9tIHRoZSBjYWNoZSwgb3IgY3JlYXRlcyBhIG5ldworICogb25lIGlmIG5vbmUgZXhpc3RzLiBGYWlscyB3aXRoIGBHcmVtbGluQ29ubmVjdGlvbkVycm9yYCBpZiBubyBlbmRwb2ludCBpcyBjb25maWd1cmVkCisgKiBvciBpZiB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IGZhaWxzLgorICoKKyAqIGBpbnZhbGlkYXRlYCBjbG9zZXMgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAoaWYgYW55KSBhbmQgY2xlYXJzIHRoZSBjYWNoZSBzbyB0aGUKKyAqIG5leHQgYGdldENvbm5lY3Rpb25gIGNhbGwgY3JlYXRlcyBhIGZyZXNoIGNvbm5lY3Rpb24uCisgKi8KK2V4cG9ydCBjbGFzcyBHcmVtbGluQ2xpZW50IGV4dGVuZHMgQ29udGV4dC5UYWcoJ0dyZW1saW5DbGllbnQnKTwKKyAgR3JlbWxpbkNsaWVudCwKKyAgeworICAgIHJlYWRvbmx5IGdldENvbm5lY3Rpb246IEVmZmVjdC5FZmZlY3Q8Q29ubmVjdGlvblN0YXRlLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yPjsKKyAgICByZWFkb25seSBpbnZhbGlkYXRlOiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyPjsKKyAgfQorPigpIHt9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL2Nvbm5lY3Rpb24udHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL2Nvbm5lY3Rpb24udHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0NWQzMQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vY29ubmVjdGlvbi50cwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgUHJvdmlkZXMgYSBsaXZlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHcmVtbGluQ2xpZW50IHNlcnZpY2UuCisgKgorICogQXQgbGF5ZXIgY29uc3RydWN0aW9uIHRpbWUsIGNoZWNrcyB3aGV0aGVyIEdSRU1MSU5fTUNQX0VORFBPSU5UIGlzIGNvbmZpZ3VyZWQ6CisgKgorICogLSAqKk9mZmxpbmUgbW9kZSoqIChubyBlbmRwb2ludCk6IGBnZXRDb25uZWN0aW9uYCBhbHdheXMgZmFpbHMgaW1tZWRpYXRlbHkgd2l0aCBhCisgKiAgIGNsZWFyIGVycm9yLiBObyBncmVtbGluIGRyaXZlciBvYmplY3RzIChDbGllbnQsIERyaXZlclJlbW90ZUNvbm5lY3Rpb24sIGV0Yy4pCisgKiAgIGFyZSBldmVyIGluc3RhbnRpYXRlZC4KKyAqCisgKiAtICoqT25saW5lIG1vZGUqKiAoZW5kcG9pbnQgY29uZmlndXJlZCk6IGNvbm5lY3Rpb24gaXMgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgdXNlCisgKiAgIGFuZCBjYWNoZWQuIE9uIGludmFsaWRhdGlvbiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgYW5kIHRoZSBjYWNoZSBjbGVhcmVkLCBzbworICogICB0aGUgbmV4dCBgZ2V0Q29ubmVjdGlvbmAgY3JlYXRlcyBhIGZyZXNoIGNvbm5lY3Rpb24uCisgKi8KKworaW1wb3J0IHsgRWZmZWN0LCBMYXllciwgT3B0aW9uLCBSZWRhY3RlZCwgUmVmLCBwaXBlIH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB7IGRyaXZlciwgcHJvY2VzcyB9IGZyb20gJ2dyZW1saW4nOworaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnLmpzJzsKK2ltcG9ydCB7IEVycm9ycyB9IGZyb20gJy4uL2Vycm9ycy5qcyc7CitpbXBvcnQgeyBHcmVtbGluQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQuanMnOworaW1wb3J0IHR5cGUgeyBDb25uZWN0aW9uU3RhdGUgfSBmcm9tICcuL3R5cGVzLmpzJzsKK2ltcG9ydCB0eXBlIHsgR3JlbWxpbkNvbm5lY3Rpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycy5qcyc7CisKK2NvbnN0IHsgQ2xpZW50LCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIH0gPSBkcml2ZXI7Citjb25zdCB7IEFub255bW91c1RyYXZlcnNhbFNvdXJjZSB9ID0gcHJvY2VzczsKKworY29uc3QgTk9fRU5EUE9JTlRfTVNHID0KKyAgJ05vIEdyZW1saW4gU2VydmVyIGNvbmZpZ3VyZWQuIFNldCBHUkVNTElOX01DUF9FTkRQT0lOVCB0byBlbmFibGUgZ3JhcGggb3BlcmF0aW9ucy4nOworCisvKioKKyAqIFNhZmVseSBjbG9zZXMgYSBHcmVtbGluIGNvbm5lY3Rpb24sIGxvZ2dpbmcgYW55IGVycm9ycyB3aXRob3V0IHByb3BhZ2F0aW5nIHRoZW0uCisgKi8KK2NvbnN0IGNsb3NlQ29ubmVjdGlvbiA9IChzdGF0ZTogQ29ubmVjdGlvblN0YXRlKTogRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlcj4gPT4KKyAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgeworICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnQ2xvc2luZyBHcmVtbGluIGNvbm5lY3Rpb24nKTsKKyAgICB5aWVsZCogcGlwZSgKKyAgICAgIEVmZmVjdC50cnlQcm9taXNlKHsKKyAgICAgICAgdHJ5OiAoKSA9PiBzdGF0ZS5jb25uZWN0aW9uLmNsb3NlKCksCisgICAgICAgIGNhdGNoOiBlcnJvciA9PiBFcnJvcnMuY29ubmVjdGlvbignRmFpbGVkIHRvIGNsb3NlIEdyZW1saW4gY29ubmVjdGlvbicsIHsgZXJyb3IgfSksCisgICAgICB9KSwKKyAgICAgIEVmZmVjdC5jYXRjaEFsbChlcnJvciA9PiBFZmZlY3QubG9nV2FybmluZyhgRXJyb3IgZHVyaW5nIGNvbm5lY3Rpb24gY2xvc2U6ICR7ZXJyb3IubWVzc2FnZX1gKSkKKyAgICApOworICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnR3JlbWxpbiBjb25uZWN0aW9uIGNsb3NlZCcpOworICB9KTsKKworLyoqCisgKiBDcmVhdGVzIGEgZnJlc2ggR3JlbWxpbiBjb25uZWN0aW9uLiBPbmx5IGNhbGxlZCB3aGVuIHRoZSBlbmRwb2ludCBJUyBjb25maWd1cmVkLgorICovCitjb25zdCBjcmVhdGVDb25uZWN0aW9uID0gKAorICBob3N0OiBzdHJpbmcsCisgIHBvcnQ6IG51bWJlciwKKyAgdHJhdmVyc2FsU291cmNlOiBzdHJpbmcsCisgIHVzZVNTTDogYm9vbGVhbiwKKyAgYXV0aGVudGljYXRvcklucHV0OiBPcHRpb24uT3B0aW9uPHsgdXNlcm5hbWU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9PgorKTogRWZmZWN0LkVmZmVjdDxDb25uZWN0aW9uU3RhdGUsIEdyZW1saW5Db25uZWN0aW9uRXJyb3I+ID0+CisgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgICBjb25zdCBwcm90b2NvbCA9IHVzZVNTTCA/ICd3c3MnIDogJ3dzJzsKKyAgICBjb25zdCB1cmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3R9OiR7cG9ydH0vZ3JlbWxpbmA7CisKKyAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ0NyZWF0aW5nIEdyZW1saW4gY29ubmVjdGlvbicsIHsKKyAgICAgIGhvc3QsCisgICAgICBwb3J0LAorICAgICAgc3NsOiB1c2VTU0wsCisgICAgICB0cmF2ZXJzYWxTb3VyY2UsCisgICAgfSk7CisKKyAgICBjb25zdCBoZWFkZXJzID0gT3B0aW9uLm1hdGNoKGF1dGhlbnRpY2F0b3JJbnB1dCwgeworICAgICAgb25Ob25lOiAoKSA9PiB1bmRlZmluZWQsCisgICAgICBvblNvbWU6ICh7IHVzZXJuYW1lLCBwYXNzd29yZCB9KSA9PiB7CisgICAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YDsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShjcmVkZW50aWFscykudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsCisgICAgICAgIH07CisgICAgICB9LAorICAgIH0pOworCisgICAgY29uc3QgY29ubmVjdGlvbiA9IHlpZWxkKiBFZmZlY3QudHJ5KHsKKyAgICAgIHRyeTogKCkgPT4KKyAgICAgICAgbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24odXJsLCB7CisgICAgICAgICAgdHJhdmVyc2FsU291cmNlLAorICAgICAgICAgIGhlYWRlcnMsCisgICAgICAgIH0pLAorICAgICAgY2F0Y2g6IGVycm9yID0+IEVycm9ycy5jb25uZWN0aW9uKCdGYWlsZWQgdG8gY3JlYXRlIHJlbW90ZSBjb25uZWN0aW9uJywgeyBlcnJvciB9KSwKKyAgICB9KTsKKworICAgIGNvbnN0IGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25uZWN0aW9uKTsKKyAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHVybCwgeworICAgICAgdHJhdmVyc2FsU291cmNlLAorICAgICAgaGVhZGVycywKKyAgICB9KTsKKworICAgIC8vIFZlcmlmeSB0aGUgc2VydmVyIGlzIHJlYWNoYWJsZSBiZWZvcmUgY2FjaGluZworICAgIHlpZWxkKiBFZmZlY3QudHJ5UHJvbWlzZSh7CisgICAgICB0cnk6ICgpID0+IGcuaW5qZWN0KDEpLm5leHQoKSwKKyAgICAgIGNhdGNoOiBlcnJvciA9PiBFcnJvcnMuY29ubmVjdGlvbignQ29ubmVjdGlvbiB0ZXN0IGZhaWxlZCcsIHsgZXJyb3IgfSksCisgICAgfSk7CisKKyAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ+KchSBHcmVtbGluIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgYW5kIHZlcmlmaWVkJyk7CisKKyAgICByZXR1cm4geyBjbGllbnQsIGNvbm5lY3Rpb24sIGcsIGxhc3RVc2VkOiBEYXRlLm5vdygpIH07CisgIH0pOworCisvKioKKyAqIEEgbGF5ZXIgdGhhdCBwcm92aWRlcyBhIGxpdmUgYEdyZW1saW5DbGllbnRgIHNlcnZpY2UuCisgKgorICogQnJhbmNoZXMgYXQgY29uc3RydWN0aW9uIHRpbWUgb24gd2hldGhlciBHUkVNTElOX01DUF9FTkRQT0lOVCBpcyBjb25maWd1cmVkOgorICogLSBObyBlbmRwb2ludCDihpIgb2ZmbGluZSBzZXJ2aWNlOyBgZ2V0Q29ubmVjdGlvbmAgYWx3YXlzIGZhaWxzLCBubyBkcml2ZXIgb2JqZWN0cyBjcmVhdGVkLgorICogLSBFbmRwb2ludCBzZXQg4oaSIG9ubGluZSBzZXJ2aWNlOyBsYXp5IGNhY2hlZCBjb25uZWN0aW9uIHdpdGggaW52YWxpZGF0ZSBzdXBwb3J0LgorICovCitleHBvcnQgY29uc3QgR3JlbWxpbkNsaWVudExpdmUgPSBMYXllci5zY29wZWQoCisgIEdyZW1saW5DbGllbnQsCisgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgICBjb25zdCBjb25maWcgPSB5aWVsZCogQXBwQ29uZmlnOworCisgICAgLy8g4pSA4pSAIE9mZmxpbmUgbW9kZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKKyAgICBpZiAoT3B0aW9uLmlzTm9uZShjb25maWcuZ3JlbWxpbi5lbmRwb2ludCkpIHsKKyAgICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygKKyAgICAgICAgJ+KaoO+4jyAgTm8gR1JFTUxJTl9NQ1BfRU5EUE9JTlQgY29uZmlndXJlZCDigJQgc3RhcnRpbmcgaW4gb2ZmbGluZSBtb2RlLiAnICsKKyAgICAgICAgICAnVHJhbnNsYXRlIGFuZCBmb3JtYXQgdG9vbHMgYXJlIGF2YWlsYWJsZTsgZ3JhcGggdG9vbHMgcmVxdWlyZSBhbiBlbmRwb2ludC4nCisgICAgICApOworICAgICAgcmV0dXJuIEdyZW1saW5DbGllbnQub2YoeworICAgICAgICBnZXRDb25uZWN0aW9uOiBFZmZlY3QuZmFpbChFcnJvcnMuY29ubmVjdGlvbihOT19FTkRQT0lOVF9NU0cpKSwKKyAgICAgICAgaW52YWxpZGF0ZTogRWZmZWN0LnZvaWQsCisgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyDilIDilIAgT25saW5lIG1vZGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACisgICAgY29uc3QgeyBob3N0LCBwb3J0LCB0cmF2ZXJzYWxTb3VyY2UgfSA9IGNvbmZpZy5ncmVtbGluLmVuZHBvaW50LnZhbHVlOworCisgICAgY29uc3QgYXV0aGVudGljYXRvcklucHV0ID0gT3B0aW9uLnppcFdpdGgoCisgICAgICBjb25maWcuZ3JlbWxpbi51c2VybmFtZSwKKyAgICAgIGNvbmZpZy5ncmVtbGluLnBhc3N3b3JkLAorICAgICAgKHVzZXJuYW1lLCBwYXNzd29yZCkgPT4gKHsgdXNlcm5hbWUsIHBhc3N3b3JkOiBSZWRhY3RlZC52YWx1ZShwYXNzd29yZCkgfSkKKyAgICApOworCisgICAgY29uc3QgcmVmID0geWllbGQqIFJlZi5tYWtlPE9wdGlvbi5PcHRpb248Q29ubmVjdGlvblN0YXRlPj4oT3B0aW9uLm5vbmUoKSk7CisKKyAgICAvLyBSZWxlYXNlIGNvbm5lY3Rpb24gd2hlbiB0aGUgc2NvcGUgY2xvc2VzCisgICAgeWllbGQqIEVmZmVjdC5hZGRGaW5hbGl6ZXIoKCkgPT4KKyAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgICAgICAgY29uc3QgY3VycmVudCA9IHlpZWxkKiBSZWYuZ2V0KHJlZik7CisgICAgICAgIGlmIChPcHRpb24uaXNTb21lKGN1cnJlbnQpKSB7CisgICAgICAgICAgeWllbGQqIGNsb3NlQ29ubmVjdGlvbihjdXJyZW50LnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfSkKKyAgICApOworCisgICAgY29uc3QgZ2V0Q29ubmVjdGlvbjogRWZmZWN0LkVmZmVjdDxDb25uZWN0aW9uU3RhdGUsIEdyZW1saW5Db25uZWN0aW9uRXJyb3I+ID0gRWZmZWN0LmdlbigKKyAgICAgIGZ1bmN0aW9uKiAoKSB7CisgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB5aWVsZCogUmVmLmdldChyZWYpOworICAgICAgICBpZiAoT3B0aW9uLmlzU29tZShjdXJyZW50KSkgeworICAgICAgICAgIHJldHVybiBjdXJyZW50LnZhbHVlOworICAgICAgICB9CisgICAgICAgIGNvbnN0IHN0YXRlID0geWllbGQqIGNyZWF0ZUNvbm5lY3Rpb24oCisgICAgICAgICAgaG9zdCwKKyAgICAgICAgICBwb3J0LAorICAgICAgICAgIHRyYXZlcnNhbFNvdXJjZSwKKyAgICAgICAgICBjb25maWcuZ3JlbWxpbi51c2VTU0wsCisgICAgICAgICAgYXV0aGVudGljYXRvcklucHV0CisgICAgICAgICk7CisgICAgICAgIHlpZWxkKiBSZWYuc2V0KHJlZiwgT3B0aW9uLnNvbWUoc3RhdGUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlOworICAgICAgfQorICAgICk7CisKKyAgICBjb25zdCBpbnZhbGlkYXRlOiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyPiA9IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgICAgIGNvbnN0IGN1cnJlbnQgPSB5aWVsZCogUmVmLmdldChyZWYpOworICAgICAgeWllbGQqIFJlZi5zZXQocmVmLCBPcHRpb24ubm9uZSgpKTsKKyAgICAgIGlmIChPcHRpb24uaXNTb21lKGN1cnJlbnQpKSB7CisgICAgICAgIHlpZWxkKiBjbG9zZUNvbm5lY3Rpb24oY3VycmVudC52YWx1ZSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICByZXR1cm4gR3JlbWxpbkNsaWVudC5vZih7IGdldENvbm5lY3Rpb24sIGludmFsaWRhdGUgfSk7CisgIH0pCispOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9lZGdlLXBhdHRlcm5zLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9lZGdlLXBhdHRlcm5zLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmRjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL2VkZ2UtcGF0dGVybnMudHMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFJlbGF0aW9uc2hpcCBwYXR0ZXJuIGFuYWx5c2lzIGZvciBncmFwaCBzY2hlbWFzLgorICoKKyAqIEFuYWx5emVzIGVkZ2UgY29ubmVjdGl2aXR5IHBhdHRlcm5zIGJldHdlZW4gdmVydGV4IHR5cGVzIHRvIGdlbmVyYXRlCisgKiByZWxhdGlvbnNoaXAgcGF0dGVybiBtZXRhZGF0YSBmb3Igc2NoZW1hIGRvY3VtZW50YXRpb24uCisgKi8KKworaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICdncmVtbGluJzsKK2ltcG9ydCB0eXBlIHsgRWRnZVBhdHRlcm4gfSBmcm9tICcuL21vZGVscy9pbmRleC5qcyc7CitpbXBvcnQgeyBleGVjdXRlR3JlbWxpblF1ZXJ5IH0gZnJvbSAnLi9xdWVyeS11dGlscy5qcyc7CitpbXBvcnQgdHlwZSB7IEdyZW1saW5RdWVyeUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzLmpzJzsKK2ltcG9ydCB0eXBlIHsgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJzsKKworY29uc3QgeyBpblYsIG91dFYsIGxhYmVsIH0gPSBwcm9jZXNzLnN0YXRpY3M7CisKKy8qKgorICogUmF3IHBhdHRlcm4gZGF0YSBmcm9tIEdyZW1saW4gcHJvamVjdCgpIHF1ZXJ5LgorICovCitpbnRlcmZhY2UgUmF3UGF0dGVybkRhdGEgeworICBmcm9tOiB1bmtub3duOworICB0bzogdW5rbm93bjsKKyAgbGFiZWw6IHVua25vd247Cit9CisKKy8qKgorICogR2VuZXJhdGVzIHJlbGF0aW9uc2hpcCBwYXR0ZXJucyBieSBhbmFseXppbmcgZWRnZSBjb25uZWN0aXZpdHkuCisgKgorICogQHBhcmFtIGcgLSBHcmVtbGluIHRyYXZlcnNhbCBzb3VyY2UKKyAqIEBwYXJhbSBtYXhQYXR0ZXJucyAtIE1heGltdW0gbnVtYmVyIG9mIHBhdHRlcm5zIHRvIHJldHJpZXZlIChkZWZhdWx0OiAxMDAwKQorICogQHJldHVybnMgRWZmZWN0IHdpdGggYXJyYXkgb2YgcmVsYXRpb25zaGlwIHBhdHRlcm5zCisgKi8KK2V4cG9ydCBjb25zdCBnZW5lcmF0ZUVkZ2VQYXR0ZXJucyA9ICgKKyAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCisgIG1heFBhdHRlcm5zOiBudW1iZXIgPSAxMDAwCispOiBFZmZlY3QuRWZmZWN0PEVkZ2VQYXR0ZXJuW10sIEdyZW1saW5RdWVyeUVycm9yPiA9PgorICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7CisgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCdHZW5lcmF0aW5nIGVkZ2UgcGF0dGVybnMgZnJvbSBlZGdlIGNvbm5lY3Rpdml0eScpOworCisgICAgLy8gR2V0IGFsbCBwYXR0ZXJucyBpbiBhIHNpbmdsZSBvcHRpbWl6ZWQgcXVlcnkKKyAgICBjb25zdCBhbGxQYXR0ZXJucyA9IHlpZWxkKiBleGVjdXRlR3JlbWxpblF1ZXJ5KAorICAgICAgKCkgPT4KKyAgICAgICAgZworICAgICAgICAgIC5FKCkKKyAgICAgICAgICAucHJvamVjdCgnZnJvbScsICd0bycsICdsYWJlbCcpCisgICAgICAgICAgLmJ5KG91dFYoKS5sYWJlbCgpKQorICAgICAgICAgIC5ieShpblYoKS5sYWJlbCgpKQorICAgICAgICAgIC5ieShsYWJlbCgpKQorICAgICAgICAgIC5kZWR1cCgpCisgICAgICAgICAgLmxpbWl0KG1heFBhdHRlcm5zKQorICAgICAgICAgIC50b0xpc3QoKSwKKyAgICAgICdGYWlsZWQgdG8gZ2V0IGVkZ2UgcGF0dGVybnMnLAorICAgICAgYGcuRSgpLnByb2plY3QoJ2Zyb20nLCAndG8nLCAnbGFiZWwnKS5ieShvdXRWKCkubGFiZWwoKSkuYnkoaW5WKCkubGFiZWwoKSkuYnkobGFiZWwoKSkuZGVkdXAoKS5saW1pdCgke21heFBhdHRlcm5zfSkudG9MaXN0KClgCisgICAgKTsKKworICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygKKyAgICAgIGBSZXRyaWV2ZWQgJHsoYWxsUGF0dGVybnMgYXMgdW5rbm93bltdKS5sZW5ndGh9IHJhdyBwYXR0ZXJucyBmcm9tIGRhdGFiYXNlYAorICAgICk7CisKKyAgICAvLyBQcm9jZXNzIHRoZSByZXN1bHRzIGludG8gc3RydWN0dXJlZCBwYXR0ZXJucworICAgIGNvbnN0IHByb2Nlc3NlZFBhdHRlcm5zID0geWllbGQqIHByb2Nlc3NSYXdQYXR0ZXJucyhhbGxQYXR0ZXJucyBhcyB1bmtub3duW10pOworCisgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKGBQcm9jZXNzZWQgJHtwcm9jZXNzZWRQYXR0ZXJucy5sZW5ndGh9IHZhbGlkIHJlbGF0aW9uc2hpcCBwYXR0ZXJuc2ApOworCisgICAgcmV0dXJuIHByb2Nlc3NlZFBhdHRlcm5zOworICB9KTsKKworLyoqCisgKiBQcm9jZXNzZXMgcmF3IEdyZW1saW4gcGF0dGVybiByZXN1bHRzIGludG8gc3RydWN0dXJlZCByZWxhdGlvbnNoaXAgcGF0dGVybnMuCisgKgorICogQHBhcmFtIHJhd1BhdHRlcm5zIC0gUmF3IHBhdHRlcm4gZGF0YSBmcm9tIEdyZW1saW4gcXVlcnkKKyAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIHByb2Nlc3NlZCByZWxhdGlvbnNoaXAgcGF0dGVybnMKKyAqLworY29uc3QgcHJvY2Vzc1Jhd1BhdHRlcm5zID0gKHJhd1BhdHRlcm5zOiB1bmtub3duW10pOiBFZmZlY3QuRWZmZWN0PEVkZ2VQYXR0ZXJuW10sIG5ldmVyPiA9PiB7CisgIC8vIEV4dHJhY3QgcGF0dGVybiBkYXRhIGhhbmRsaW5nIGJvdGggTWFwIGFuZCBvYmplY3QgZm9ybWF0cworICBjb25zdCBleHRyYWN0ZWRQYXR0ZXJucyA9IHJhd1BhdHRlcm5zLm1hcChleHRyYWN0UGF0dGVybkRhdGEpOworCisgIC8vIEZpbHRlciBvdXQgaW52YWxpZCBwYXR0ZXJucyBhbmQgY29udmVydCB0byBmaW5hbCBmb3JtYXQKKyAgY29uc3QgdmFsaWRQYXR0ZXJucyA9IGV4dHJhY3RlZFBhdHRlcm5zLmZpbHRlcihpc1ZhbGlkUGF0dGVybikubWFwKGNvbnZlcnRUb0VkZ2VQYXR0ZXJuKTsKKworICByZXR1cm4gRWZmZWN0LnN1Y2NlZWQodmFsaWRQYXR0ZXJucyk7Cit9OworCisvKioKKyAqIEV4dHJhY3RzIHBhdHRlcm4gZGF0YSBmcm9tIHZhcmlvdXMgR3JlbWxpbiByZXN1bHQgZm9ybWF0cy4KKyAqCisgKiBAcGFyYW0gaXRlbSAtIFJhdyBwYXR0ZXJuIGl0ZW0gZnJvbSBHcmVtbGluCisgKiBAcmV0dXJucyBFeHRyYWN0ZWQgcGF0dGVybiBkYXRhCisgKi8KK2NvbnN0IGV4dHJhY3RQYXR0ZXJuRGF0YSA9IChpdGVtOiB1bmtub3duKTogUmF3UGF0dGVybkRhdGEgPT4geworICAvLyBIYW5kbGUgTWFwIGZvcm1hdCAoY29tbW9uIGluIHNvbWUgR3JlbWxpbiBpbXBsZW1lbnRhdGlvbnMpCisgIGlmIChpdGVtIGluc3RhbmNlb2YgTWFwKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIGZyb206IGl0ZW0uZ2V0KCdmcm9tJyksCisgICAgICB0bzogaXRlbS5nZXQoJ3RvJyksCisgICAgICBsYWJlbDogaXRlbS5nZXQoJ2xhYmVsJyksCisgICAgfTsKKyAgfQorCisgIC8vIEhhbmRsZSBwbGFpbiBvYmplY3QgZm9ybWF0CisgIGlmIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JykgeworICAgIGNvbnN0IG9iaiA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47CisgICAgcmV0dXJuIHsKKyAgICAgIGZyb206IG9ialsnZnJvbSddLAorICAgICAgdG86IG9ialsndG8nXSwKKyAgICAgIGxhYmVsOiBvYmpbJ2xhYmVsJ10sCisgICAgfTsKKyAgfQorCisgIC8vIEZhbGxiYWNrIGZvciB1bmV4cGVjdGVkIGZvcm1hdHMKKyAgcmV0dXJuIHsgZnJvbTogbnVsbCwgdG86IG51bGwsIGxhYmVsOiBudWxsIH07Cit9OworCisvKioKKyAqIFZhbGlkYXRlcyB0aGF0IHBhdHRlcm4gZGF0YSBjb250YWlucyByZXF1aXJlZCBzdHJpbmcgdmFsdWVzLgorICoKKyAqIEBwYXJhbSBwYXR0ZXJuIC0gUGF0dGVybiBkYXRhIHRvIHZhbGlkYXRlCisgKiBAcmV0dXJucyBUcnVlIGlmIHBhdHRlcm4gaXMgdmFsaWQKKyAqLworY29uc3QgaXNWYWxpZFBhdHRlcm4gPSAocGF0dGVybjogUmF3UGF0dGVybkRhdGEpOiBwYXR0ZXJuIGlzIFJlcXVpcmVkPFJhd1BhdHRlcm5EYXRhPiA9PgorICBwYXR0ZXJuLmZyb20gIT09IG51bGwgJiYKKyAgcGF0dGVybi50byAhPT0gbnVsbCAmJgorICBwYXR0ZXJuLmxhYmVsICE9PSBudWxsICYmCisgIHR5cGVvZiBwYXR0ZXJuLmZyb20gPT09ICdzdHJpbmcnICYmCisgIHR5cGVvZiBwYXR0ZXJuLnRvID09PSAnc3RyaW5nJyAmJgorICB0eXBlb2YgcGF0dGVybi5sYWJlbCA9PT0gJ3N0cmluZyc7CisKKy8qKgorICogQ29udmVydHMgdmFsaWRhdGVkIHBhdHRlcm4gZGF0YSB0byBmaW5hbCBFZGdlUGF0dGVybiBmb3JtYXQuCisgKgorICogQHBhcmFtIHBhdHRlcm4gLSBWYWxpZGF0ZWQgcGF0dGVybiBkYXRhCisgKiBAcmV0dXJucyBSZWxhdGlvbnNoaXAgcGF0dGVybiBvYmplY3QKKyAqLworY29uc3QgY29udmVydFRvRWRnZVBhdHRlcm4gPSAocGF0dGVybjogUmVxdWlyZWQ8UmF3UGF0dGVybkRhdGE+KTogRWRnZVBhdHRlcm4gPT4gKHsKKyAgbGVmdF92ZXJ0ZXg6IHBhdHRlcm4uZnJvbSBhcyBzdHJpbmcsCisgIHJpZ2h0X3ZlcnRleDogcGF0dGVybi50byBhcyBzdHJpbmcsCisgIHJlbGF0aW9uOiBwYXR0ZXJuLmxhYmVsIGFzIHN0cmluZywKK30pOworCisvKioKKyAqIEFuYWx5emVzIHJlbGF0aW9uc2hpcCBkZW5zaXR5IGFuZCBwcm92aWRlcyBwYXR0ZXJuIHN0YXRpc3RpY3MuCisgKgorICogQHBhcmFtIHBhdHRlcm5zIC0gQXJyYXkgb2YgcmVsYXRpb25zaGlwIHBhdHRlcm5zCisgKiBAcmV0dXJucyBQYXR0ZXJuIGFuYWx5c2lzIHN0YXRpc3RpY3MKKyAqLworZXhwb3J0IGNvbnN0IGFuYWx5emVQYXR0ZXJuU3RhdGlzdGljcyA9IChwYXR0ZXJuczogRWRnZVBhdHRlcm5bXSkgPT4geworICBjb25zdCB2ZXJ0ZXhUeXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpOworICBjb25zdCBlZGdlVHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTsKKyAgY29uc3QgY29ubmVjdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpOworCisgIHBhdHRlcm5zLmZvckVhY2gocGF0dGVybiA9PiB7CisgICAgdmVydGV4VHlwZXMuYWRkKHBhdHRlcm4ubGVmdF92ZXJ0ZXgpOworICAgIHZlcnRleFR5cGVzLmFkZChwYXR0ZXJuLnJpZ2h0X3ZlcnRleCk7CisgICAgZWRnZVR5cGVzLmFkZChwYXR0ZXJuLnJlbGF0aW9uKTsKKworICAgIGNvbnN0IGNvbm5lY3Rpb25LZXkgPSBgJHtwYXR0ZXJuLmxlZnRfdmVydGV4fS0+JHtwYXR0ZXJuLnJpZ2h0X3ZlcnRleH1gOworICAgIGNvbm5lY3Rpb25zLnNldChjb25uZWN0aW9uS2V5LCAoY29ubmVjdGlvbnMuZ2V0KGNvbm5lY3Rpb25LZXkpIHx8IDApICsgMSk7CisgIH0pOworCisgIHJldHVybiB7CisgICAgdG90YWxQYXR0ZXJuczogcGF0dGVybnMubGVuZ3RoLAorICAgIHVuaXF1ZVZlcnRleFR5cGVzOiB2ZXJ0ZXhUeXBlcy5zaXplLAorICAgIHVuaXF1ZUVkZ2VUeXBlczogZWRnZVR5cGVzLnNpemUsCisgICAgYXZlcmFnZUNvbm5lY3Rpb25zUGVyVmVydGV4VHlwZTogcGF0dGVybnMubGVuZ3RoIC8gTWF0aC5tYXgodmVydGV4VHlwZXMuc2l6ZSwgMSksCisgICAgdmVydGV4VHlwZXM6IEFycmF5LmZyb20odmVydGV4VHlwZXMpLnNvcnQoKSwKKyAgICBlZGdlVHlwZXM6IEFycmF5LmZyb20oZWRnZVR5cGVzKS5zb3J0KCksCisgICAgY29ubmVjdGlvbkZyZXF1ZW5jaWVzOiBPYmplY3QuZnJvbUVudHJpZXMoY29ubmVjdGlvbnMpLAorICB9OworfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vbW9kZWxzL2dyYXBoLXNjaGVtYS50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vbW9kZWxzL2dyYXBoLXNjaGVtYS50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9tb2RlbHMvZ3JhcGgtc2NoZW1hLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL21vZGVscy9ncmFwaC1zY2hlbWEudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vbW9kZWxzL2luZGV4LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9tb2RlbHMvaW5kZXgudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vbW9kZWxzL2luZGV4LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL21vZGVscy9pbmRleC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9tb2RlbHMvcXVlcnktcmVzdWx0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9tb2RlbHMvcXVlcnktcmVzdWx0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL21vZGVscy9xdWVyeS1yZXN1bHQudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vbW9kZWxzL3F1ZXJ5LXJlc3VsdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9wcm9wZXJ0eS1hbmFseXplci50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vcHJvcGVydHktYW5hbHl6ZXIudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYwZmE2MgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vcHJvcGVydHktYW5hbHl6ZXIudHMKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFByb3BlcnR5IGFuYWx5c2lzIGZvciBncmFwaCBzY2hlbWEgZ2VuZXJhdGlvbi4KKyAqCisgKiBIYW5kbGVzIGFuYWx5c2lzIG9mIHZlcnRleCBhbmQgZWRnZSBwcm9wZXJ0aWVzIGluY2x1ZGluZyB0eXBlIGRldGVjdGlvbiwKKyAqIGVudW0gZGlzY292ZXJ5LCBjYXJkaW5hbGl0eSBhbmFseXNpcywgYW5kIHNhbXBsZSB2YWx1ZSBjb2xsZWN0aW9uLgorICovCisKK2ltcG9ydCB7IEVmZmVjdCB9IGZyb20gJ2VmZmVjdCc7CitpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSAnLi9tb2RlbHMvaW5kZXguanMnOworaW1wb3J0IHR5cGUgeyBHcmFwaFRyYXZlcnNhbFNvdXJjZSwgU2NoZW1hQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7CitpbXBvcnQgeyBnZXRTYW1wbGVQcm9wZXJ0eVZhbHVlcywgcHJvY2Vzc0JhdGNoZWQgfSBmcm9tICcuL3F1ZXJ5LXV0aWxzLmpzJzsKK2ltcG9ydCB0eXBlIHsgR3JlbWxpblF1ZXJ5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnOworCisvKioKKyAqIEFuYWx5emVzIHByb3BlcnR5IGNoYXJhY3RlcmlzdGljcyBmcm9tIGNvbGxlY3RlZCB2YWx1ZXMuCisgKgorICogQHBhcmFtIHByb3BlcnR5S2V5IC0gTmFtZSBvZiB0aGUgcHJvcGVydHkKKyAqIEBwYXJhbSB2YWx1ZXMgLSBBcnJheSBvZiBzYW1wbGUgdmFsdWVzCisgKiBAcGFyYW0gY29uZmlnIC0gU2NoZW1hIGNvbmZpZ3VyYXRpb24KKyAqIEByZXR1cm5zIFByb3BlcnR5IGFuYWx5c2lzIHJlc3VsdAorICovCitleHBvcnQgY29uc3QgYW5hbHl6ZVByb3BlcnR5RnJvbVZhbHVlcyA9ICgKKyAgcHJvcGVydHlLZXk6IHN0cmluZywKKyAgdmFsdWVzOiB1bmtub3duW10sCisgIGNvbmZpZzogU2NoZW1hQ29uZmlnCispOiBQcm9wZXJ0eSA9PiB7CisgIC8vIFNraXAgZGVueWxpc3RlZCBwcm9wZXJ0aWVzCisgIGlmIChjb25maWcuZW51bVByb3BlcnR5RGVueUxpc3QuaW5jbHVkZXMocHJvcGVydHlLZXkpKSB7CisgICAgcmV0dXJuIHsKKyAgICAgIG5hbWU6IHByb3BlcnR5S2V5LAorICAgICAgdHlwZTogWyd1bmtub3duJ10sCisgICAgfTsKKyAgfQorCisgIC8vIERlZHVwbGljYXRlIGFuZCBsaW1pdCB2YWx1ZXMKKyAgY29uc3QgdW5pcXVlVmFsdWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KHZhbHVlcykpLnNsaWNlKDAsIGNvbmZpZy5tYXhFbnVtVmFsdWVzICsgMSk7CisKKyAgLy8gRGV0ZXJtaW5lIHR5cGVzIGZyb20gc2FtcGxlIHZhbHVlcworICBjb25zdCB0eXBlcyA9IEFycmF5LmZyb20obmV3IFNldCh1bmlxdWVWYWx1ZXMubWFwKCh2YWw6IHVua25vd24pID0+IHR5cGVvZiB2YWwpLmZpbHRlcihCb29sZWFuKSkpOworCisgIGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IHsKKyAgICBuYW1lOiBwcm9wZXJ0eUtleSwKKyAgICB0eXBlOiB0eXBlcy5sZW5ndGggPiAwID8gdHlwZXMgOiBbJ3Vua25vd24nXSwKKyAgfTsKKworICAvLyBBZGQgc2FtcGxlIHZhbHVlcyBpZiByZXF1ZXN0ZWQKKyAgaWYgKGNvbmZpZy5pbmNsdWRlU2FtcGxlVmFsdWVzICYmIHVuaXF1ZVZhbHVlcy5sZW5ndGggPiAwKSB7CisgICAgcHJvcGVydHkuc2FtcGxlX3ZhbHVlcyA9IHVuaXF1ZVZhbHVlcy5zbGljZSgwLCA1KTsKKyAgfQorCisgIC8vIERldGVybWluZSBpZiB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGVudW0KKyAgaWYgKHVuaXF1ZVZhbHVlcy5sZW5ndGggPD0gY29uZmlnLmVudW1DYXJkaW5hbGl0eVRocmVzaG9sZCAmJiB1bmlxdWVWYWx1ZXMubGVuZ3RoID4gMCkgeworICAgIHByb3BlcnR5LmVudW0gPSB1bmlxdWVWYWx1ZXM7CisgICAgcHJvcGVydHkuY2FyZGluYWxpdHkgPSAnc2luZ2xlJzsKKyAgfQorCisgIHJldHVybiBwcm9wZXJ0eTsKK307CisKKy8qKgorICogQW5hbHl6ZXMgYSBzaW5nbGUgcHJvcGVydHkgZm9yIGFuIGVsZW1lbnQgKHZlcnRleCBvciBlZGdlKS4KKyAqCisgKiBAcGFyYW0gZyAtIEdyZW1saW4gdHJhdmVyc2FsIHNvdXJjZQorICogQHBhcmFtIGVsZW1lbnRMYWJlbCAtIExhYmVsIG9mIHRoZSB2ZXJ0ZXggb3IgZWRnZQorICogQHBhcmFtIHByb3BlcnR5S2V5IC0gUHJvcGVydHkgdG8gYW5hbHl6ZQorICogQHBhcmFtIGNvbmZpZyAtIFNjaGVtYSBjb25maWd1cmF0aW9uCisgKiBAcGFyYW0gaXNWZXJ0ZXggLSBXaGV0aGVyIGFuYWx5emluZyB2ZXJ0ZXggKHRydWUpIG9yIGVkZ2UgKGZhbHNlKSBwcm9wZXJ0eQorICogQHJldHVybnMgRWZmZWN0IHdpdGggcHJvcGVydHkgYW5hbHlzaXMKKyAqLworZXhwb3J0IGNvbnN0IGFuYWx5emVTaW5nbGVQcm9wZXJ0eSA9ICgKKyAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCisgIGVsZW1lbnRMYWJlbDogc3RyaW5nLAorICBwcm9wZXJ0eUtleTogc3RyaW5nLAorICBjb25maWc6IFNjaGVtYUNvbmZpZywKKyAgaXNWZXJ0ZXg6IGJvb2xlYW4KKyk6IEVmZmVjdC5FZmZlY3Q8UHJvcGVydHksIEdyZW1saW5RdWVyeUVycm9yPiA9PgorICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7CisgICAgLy8gU2tpcCBkZW55bGlzdGVkIHByb3BlcnRpZXMgZWFybHkKKyAgICBpZiAoY29uZmlnLmVudW1Qcm9wZXJ0eURlbnlMaXN0LmluY2x1ZGVzKHByb3BlcnR5S2V5KSkgeworICAgICAgcmV0dXJuIHsKKyAgICAgICAgbmFtZTogcHJvcGVydHlLZXksCisgICAgICAgIHR5cGU6IFsndW5rbm93biddLAorICAgICAgfTsKKyAgICB9CisKKyAgICAvLyBHZXQgc2FtcGxlIHZhbHVlcyBmb3IgYW5hbHlzaXMKKyAgICBjb25zdCBzYW1wbGVWYWx1ZXMgPSB5aWVsZCogZ2V0U2FtcGxlUHJvcGVydHlWYWx1ZXMoCisgICAgICBnLAorICAgICAgZWxlbWVudExhYmVsLAorICAgICAgcHJvcGVydHlLZXksCisgICAgICBpc1ZlcnRleCwKKyAgICAgIDUwLCAvLyBzYW1wbGUgbGltaXQKKyAgICAgIGNvbmZpZy5tYXhFbnVtVmFsdWVzCisgICAgKTsKKworICAgIHJldHVybiBhbmFseXplUHJvcGVydHlGcm9tVmFsdWVzKHByb3BlcnR5S2V5LCBzYW1wbGVWYWx1ZXMsIGNvbmZpZyk7CisgIH0pOworCisvKioKKyAqIEFuYWx5emVzIGFsbCBwcm9wZXJ0aWVzIGZvciBhIGxpc3Qgb2YgZWxlbWVudHMgdXNpbmcgYmF0Y2hlZCBwcm9jZXNzaW5nLgorICoKKyAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCisgKiBAcGFyYW0gZWxlbWVudExhYmVscyAtIEFycmF5IG9mIHZlcnRleCBvciBlZGdlIGxhYmVscworICogQHBhcmFtIHByb3BlcnR5S2V5c0ZuIC0gRnVuY3Rpb24gdG8gZ2V0IHByb3BlcnR5IGtleXMgZm9yIGFuIGVsZW1lbnQKKyAqIEBwYXJhbSBjb25maWcgLSBTY2hlbWEgY29uZmlndXJhdGlvbgorICogQHBhcmFtIGlzVmVydGV4IC0gV2hldGhlciBhbmFseXppbmcgdmVydGljZXMgKHRydWUpIG9yIGVkZ2VzIChmYWxzZSkKKyAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGFycmF5IG9mIHByb3BlcnR5IGFuYWx5c2VzCisgKi8KK2V4cG9ydCBjb25zdCBhbmFseXplRWxlbWVudFByb3BlcnRpZXMgPSAoCisgIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAorICBlbGVtZW50TGFiZWxzOiBzdHJpbmdbXSwKKyAgcHJvcGVydHlLZXlzRm46ICgKKyAgICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKKyAgICBsYWJlbDogc3RyaW5nCisgICkgPT4gRWZmZWN0LkVmZmVjdDxzdHJpbmdbXSwgR3JlbWxpblF1ZXJ5RXJyb3I+LAorICBjb25maWc6IFNjaGVtYUNvbmZpZywKKyAgaXNWZXJ0ZXg6IGJvb2xlYW4KKyk6IEVmZmVjdC5FZmZlY3Q8dW5rbm93bltdLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KKyAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgeworICAgIGNvbnN0IGJhdGNoU2l6ZSA9IGNvbmZpZy5iYXRjaFNpemUgfHwgMTA7CisKKyAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oCisgICAgICBgQW5hbHl6aW5nICR7ZWxlbWVudExhYmVscy5sZW5ndGh9ICR7aXNWZXJ0ZXggPyAndmVydGV4JyA6ICdlZGdlJ30gbGFiZWxzIHdpdGggYmF0Y2ggc2l6ZSAke2JhdGNoU2l6ZX1gCisgICAgKTsKKworICAgIHJldHVybiB5aWVsZCogcHJvY2Vzc0JhdGNoZWQoZWxlbWVudExhYmVscywgYmF0Y2hTaXplLCAoZWxlbWVudExhYmVsOiBzdHJpbmcpID0+CisgICAgICBhbmFseXplUHJvcGVydGllc0ZvckxhYmVsKGcsIGVsZW1lbnRMYWJlbCwgcHJvcGVydHlLZXlzRm4sIGNvbmZpZywgaXNWZXJ0ZXgpCisgICAgKTsKKyAgfSk7CisKKy8vIFRPRE86IGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wL3B1bGwvMzIzOCNkaXNjdXNzaW9uX3IyNDI5NjY0Njk3CisKKy8qKgorICogQW5hbHl6ZXMgcHJvcGVydGllcyBmb3IgYSBzaW5nbGUgZWxlbWVudCBsYWJlbC4KKyAqCisgKiBAcGFyYW0gZyAtIEdyZW1saW4gdHJhdmVyc2FsIHNvdXJjZQorICogQHBhcmFtIGVsZW1lbnRMYWJlbCAtIExhYmVsIHRvIGFuYWx5emUKKyAqIEBwYXJhbSBwcm9wZXJ0eUtleXNGbiAtIEZ1bmN0aW9uIHRvIGdldCBwcm9wZXJ0eSBrZXlzCisgKiBAcGFyYW0gY29uZmlnIC0gU2NoZW1hIGNvbmZpZ3VyYXRpb24KKyAqIEBwYXJhbSBpc1ZlcnRleCAtIFdoZXRoZXIgYW5hbHl6aW5nIHZlcnRleCBvciBlZGdlCisgKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBwcm9wZXJ0eSBhbmFseXNpcworICovCitjb25zdCBhbmFseXplUHJvcGVydGllc0ZvckxhYmVsID0gKAorICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKKyAgZWxlbWVudExhYmVsOiBzdHJpbmcsCisgIHByb3BlcnR5S2V5c0ZuOiAoCisgICAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCisgICAgbGFiZWw6IHN0cmluZworICApID0+IEVmZmVjdC5FZmZlY3Q8c3RyaW5nW10sIEdyZW1saW5RdWVyeUVycm9yPiwKKyAgY29uZmlnOiBTY2hlbWFDb25maWcsCisgIGlzVmVydGV4OiBib29sZWFuCispOiBFZmZlY3QuRWZmZWN0PHVua25vd24sIEdyZW1saW5RdWVyeUVycm9yPiA9PgorICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7CisgICAgLy8gR2V0IGFsbCBwcm9wZXJ0eSBrZXlzIGZvciB0aGlzIGxhYmVsCisgICAgY29uc3QgcHJvcGVydHlLZXlzID0geWllbGQqIHByb3BlcnR5S2V5c0ZuKGcsIGVsZW1lbnRMYWJlbCk7CisKKyAgICAvLyBBbmFseXplIHByb3BlcnRpZXMgd2l0aCBjb250cm9sbGVkIGNvbmN1cnJlbmN5CisgICAgY29uc3QgcHJvcGVydGllcyA9IHlpZWxkKiBFZmZlY3QuYWxsKAorICAgICAgcHJvcGVydHlLZXlzLm1hcChrZXkgPT4gYW5hbHl6ZVNpbmdsZVByb3BlcnR5KGcsIGVsZW1lbnRMYWJlbCwga2V5LCBjb25maWcsIGlzVmVydGV4KSksCisgICAgICB7IGNvbmN1cnJlbmN5OiA1IH0KKyAgICApOworCisgICAgLy8gUmV0dXJuIHRoZSBhbmFseXNpcworICAgIHJldHVybiB7CisgICAgICBbJ2xhYmVsJ106IGVsZW1lbnRMYWJlbCwKKyAgICAgIHByb3BlcnRpZXMsCisgICAgfTsKKyAgfSk7CisKKy8qKgorICogQ3JlYXRlcyBhIHByb3BlcnR5IGFuYWx5emVyIHdpdGggY291bnQgaW5mb3JtYXRpb24uCisgKgorICogQHBhcmFtIGNvdW50cyAtIENvdW50IGRhdGEgZm9yIGVsZW1lbnRzCisgKiBAcGFyYW0gY29uZmlnIC0gU2NoZW1hIGNvbmZpZ3VyYXRpb24KKyAqIEByZXR1cm5zIEZ1bmN0aW9uIHRoYXQgYWRkcyBjb3VudCBpbmZvcm1hdGlvbiB0byBhbmFseXNpcworICovCitleHBvcnQgY29uc3Qgd2l0aEVsZW1lbnRDb3VudHMgPQorICA8VCBleHRlbmRzIHsgY291bnQ/OiBudW1iZXIgfT4oCisgICAgY291bnRzOiB7IHZhbHVlPzogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB9IHwgbnVsbCwKKyAgICBjb25maWc6IFNjaGVtYUNvbmZpZworICApID0+CisgIChlbGVtZW50TGFiZWw6IHN0cmluZywgYW5hbHlzaXM6IE9taXQ8VCwgJ2NvdW50Jz4pOiBUID0+IHsKKyAgICBjb25zdCBjb3VudCA9IGNvbmZpZy5pbmNsdWRlQ291bnRzID8gY291bnRzPy52YWx1ZT8uW2VsZW1lbnRMYWJlbF0gOiB1bmRlZmluZWQ7CisKKyAgICByZXR1cm4geworICAgICAgLi4uYW5hbHlzaXMsCisgICAgICAuLi4oY291bnQgIT09IHVuZGVmaW5lZCAmJiB7IGNvdW50IH0pLAorICAgIH0gYXMgVDsKKyAgfTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vcXVlcnktdXRpbHMudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3F1ZXJ5LXV0aWxzLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYTRiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3F1ZXJ5LXV0aWxzLnRzCkBAIC0wLDAgKzEsMjMyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGZpbGVvdmVydmlldyBTaGFyZWQgdXRpbGl0aWVzIGZvciBHcmVtbGluIHF1ZXJ5IGV4ZWN1dGlvbiBhbmQgYmF0Y2hlZCBwcm9jZXNzaW5nLgorICoKKyAqIFByb3ZpZGVzIGNvbW1vbiBwYXR0ZXJucyBmb3IgRWZmZWN0LVRTIGJhc2VkIEdyZW1saW4gcXVlcnkgZXhlY3V0aW9uIHdpdGgKKyAqIHN0YW5kYXJkaXplZCBlcnJvciBoYW5kbGluZywgYmF0Y2hpbmcsIGFuZCB0aW1lb3V0IG1hbmFnZW1lbnQuCisgKi8KKworaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICdncmVtbGluJzsKK2ltcG9ydCB7IEVycm9ycywgdHlwZSBHcmVtbGluUXVlcnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy5qcyc7CitpbXBvcnQgdHlwZSB7IEdyYXBoVHJhdmVyc2FsU291cmNlIH0gZnJvbSAnLi90eXBlcy5qcyc7CisKK2NvbnN0IHsgbGFiZWwgfSA9IHByb2Nlc3Muc3RhdGljczsKKwordHlwZSBDb3VudFJlc3VsdCA9IHsgdmFsdWU/OiB1bmtub3duIH07CisKK2NvbnN0IGV4dHJhY3RDb3VudE1hcCA9IChyZXN1bHQ6IHVua25vd24pOiBNYXA8c3RyaW5nLCBudW1iZXI+IHwgdW5kZWZpbmVkID0+IHsKKyAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnIHx8IHJlc3VsdCA9PT0gbnVsbCB8fCAhKCd2YWx1ZScgaW4gcmVzdWx0KSkgeworICAgIHJldHVybiB1bmRlZmluZWQ7CisgIH0KKworICBjb25zdCB2YWx1ZSA9IChyZXN1bHQgYXMgQ291bnRSZXN1bHQpLnZhbHVlOworICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBNYXAgPyAodmFsdWUgYXMgTWFwPHN0cmluZywgbnVtYmVyPikgOiB1bmRlZmluZWQ7Cit9OworCisvKioKKyAqIFByb2Nlc3NlcyBpdGVtcyBpbiBjb250cm9sbGVkIGJhdGNoZXMgd2l0aCBjb25jdXJyZW5jeSBsaW1pdGluZy4KKyAqCisgKiBAcGFyYW0gaXRlbXMgLSBBcnJheSBvZiBpdGVtcyB0byBwcm9jZXNzCisgKiBAcGFyYW0gYmF0Y2hTaXplIC0gTnVtYmVyIG9mIGl0ZW1zIHBlciBiYXRjaAorICogQHBhcmFtIHByb2Nlc3NvciAtIEVmZmVjdCB0byBydW4gb24gZWFjaCBpdGVtCisgKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBhbGwgcHJvY2Vzc2VkIHJlc3VsdHMKKyAqCisgKiBDcml0aWNhbCBmb3IgbGFyZ2UgZ3JhcGhzIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgZGF0YWJhc2Ugd2l0aCBjb25jdXJyZW50IHF1ZXJpZXMuCisgKiBQcm9jZXNzZXMgYmF0Y2hlcyBzZXF1ZW50aWFsbHkgYnV0IGFsbG93cyBjb250cm9sbGVkIGNvbmN1cnJlbmN5IHdpdGhpbiBlYWNoIGJhdGNoLgorICovCitleHBvcnQgY29uc3QgcHJvY2Vzc0JhdGNoZWQgPSA8VCwgUiwgRT4oCisgIGl0ZW1zOiBUW10sCisgIGJhdGNoU2l6ZTogbnVtYmVyLAorICBwcm9jZXNzb3I6IChpdGVtOiBUKSA9PiBFZmZlY3QuRWZmZWN0PFIsIEU+CispOiBFZmZlY3QuRWZmZWN0PFJbXSwgRT4gPT4KKyAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgeworICAgIGNvbnN0IGJhdGNoZXM6IFRbXVtdID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkgKz0gYmF0Y2hTaXplKSB7CisgICAgICBiYXRjaGVzLnB1c2goaXRlbXMuc2xpY2UoaSwgaSArIGJhdGNoU2l6ZSkpOworICAgIH0KKworICAgIGNvbnN0IHJlc3VsdHM6IFJbXSA9IFtdOworICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykgeworICAgICAgY29uc3QgYmF0Y2hSZXN1bHRzID0geWllbGQqIEVmZmVjdC5hbGwoYmF0Y2gubWFwKHByb2Nlc3NvciksIHsKKyAgICAgICAgY29uY3VycmVuY3k6IE1hdGgubWluKGJhdGNoU2l6ZSwgMTApLAorICAgICAgfSk7CisgICAgICByZXN1bHRzLnB1c2goLi4uYmF0Y2hSZXN1bHRzKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0czsKKyAgfSk7CisKKy8qKgorICogRXhlY3V0ZXMgYSBHcmVtbGluIHF1ZXJ5IHdpdGggc3RhbmRhcmRpemVkIGVycm9yIGhhbmRsaW5nLgorICoKKyAqIEBwYXJhbSBxdWVyeUZuIC0gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgUHJvbWlzZSBmcm9tIGEgR3JlbWxpbiB0cmF2ZXJzYWwKKyAqIEBwYXJhbSBlcnJvck1lc3NhZ2UgLSBIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlIGZvciBmYWlsdXJlcworICogQHBhcmFtIHF1ZXJ5RGVzY3JpcHRpb24gLSBUZWNobmljYWwgZGVzY3JpcHRpb24gb2YgdGhlIHF1ZXJ5IGZvciBkZWJ1Z2dpbmcKKyAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIHF1ZXJ5IHJlc3VsdHMgb3IgdHlwZWQgZXJyb3IKKyAqLworZXhwb3J0IGNvbnN0IGV4ZWN1dGVHcmVtbGluUXVlcnkgPSA8VD4oCisgIHF1ZXJ5Rm46ICgpID0+IFByb21pc2U8VD4sCisgIGVycm9yTWVzc2FnZTogc3RyaW5nLAorICBxdWVyeURlc2NyaXB0aW9uOiBzdHJpbmcKKyk6IEVmZmVjdC5FZmZlY3Q8VCwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+CisgIEVmZmVjdC50cnlQcm9taXNlKHsKKyAgICB0cnk6IHF1ZXJ5Rm4sCisgICAgY2F0Y2g6IChlcnJvcjogdW5rbm93bikgPT4gRXJyb3JzLnF1ZXJ5KGVycm9yTWVzc2FnZSwgcXVlcnlEZXNjcmlwdGlvbiwgeyBlcnJvciB9KSwKKyAgfSk7CisKKy8qKgorICogR2V0cyBhbGwgdmVydGV4IGxhYmVscyBmcm9tIHRoZSBncmFwaC4KKyAqCisgKiBAcGFyYW0gZyAtIEdyZW1saW4gdHJhdmVyc2FsIHNvdXJjZQorICogQHJldHVybnMgRWZmZWN0IHdpdGggYXJyYXkgb2YgdmVydGV4IGxhYmVsIHN0cmluZ3MKKyAqLworZXhwb3J0IGNvbnN0IGdldFZlcnRleExhYmVscyA9ICgKKyAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UKKyk6IEVmZmVjdC5FZmZlY3Q8c3RyaW5nW10sIEdyZW1saW5RdWVyeUVycm9yPiA9PgorICBleGVjdXRlR3JlbWxpblF1ZXJ5KAorICAgICgpID0+IGcuVigpLmxhYmVsKCkuZGVkdXAoKS50b0xpc3QoKSwKKyAgICAnRmFpbGVkIHRvIGdldCB2ZXJ0ZXggbGFiZWxzJywKKyAgICAnZy5WKCkubGFiZWwoKS5kZWR1cCgpLnRvTGlzdCgpJworICApLnBpcGUoRWZmZWN0Lm1hcChsYWJlbHMgPT4gbGFiZWxzIGFzIHN0cmluZ1tdKSk7CisKKy8qKgorICogR2V0cyBhbGwgZWRnZSBsYWJlbHMgZnJvbSB0aGUgZ3JhcGguCisgKgorICogQHBhcmFtIGcgLSBHcmVtbGluIHRyYXZlcnNhbCBzb3VyY2UKKyAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGFycmF5IG9mIGVkZ2UgbGFiZWwgc3RyaW5ncworICovCitleHBvcnQgY29uc3QgZ2V0RWRnZUxhYmVscyA9ICgKKyAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UKKyk6IEVmZmVjdC5FZmZlY3Q8c3RyaW5nW10sIEdyZW1saW5RdWVyeUVycm9yPiA9PgorICBleGVjdXRlR3JlbWxpblF1ZXJ5KAorICAgICgpID0+IGcuRSgpLmxhYmVsKCkuZGVkdXAoKS50b0xpc3QoKSwKKyAgICAnRmFpbGVkIHRvIGdldCBlZGdlIGxhYmVscycsCisgICAgJ2cuRSgpLmxhYmVsKCkuZGVkdXAoKS50b0xpc3QoKScKKyAgKS5waXBlKEVmZmVjdC5tYXAobGFiZWxzID0+IGxhYmVscyBhcyBzdHJpbmdbXSkpOworCisvKioKKyAqIEdldHMgdmVydGV4IGNvdW50cyBncm91cGVkIGJ5IGxhYmVsLgorICoKKyAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCisgKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCB2ZXJ0ZXggY291bnQgZGF0YQorICovCitleHBvcnQgY29uc3QgZ2V0VmVydGV4Q291bnRzUGVyTGFiZWwgPSAoZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UpID0+CisgIGV4ZWN1dGVHcmVtbGluUXVlcnkoCisgICAgKCkgPT4gZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KGxhYmVsKCkpLm5leHQoKSwKKyAgICAnRmFpbGVkIHRvIGdldCB2ZXJ0ZXggY291bnRzJywKKyAgICAnZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KGxhYmVsKCkpLm5leHQoKScKKyAgKS5waXBlKAorICAgIEVmZmVjdC5tYXAocmVzdWx0ID0+IHsKKyAgICAgIGNvbnN0IG1hcCA9IGV4dHJhY3RDb3VudE1hcChyZXN1bHQpOworICAgICAgcmV0dXJuIHsgdmFsdWU6IG1hcCA/IChPYmplY3QuZnJvbUVudHJpZXMobWFwKSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA6IHVuZGVmaW5lZCB9OworICAgIH0pCisgICk7CisKKy8qKgorICogR2V0cyBlZGdlIGNvdW50cyBncm91cGVkIGJ5IGxhYmVsLgorICoKKyAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCisgKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBlZGdlIGNvdW50IGRhdGEKKyAqLworZXhwb3J0IGNvbnN0IGdldEVkZ2VDb3VudHNQZXJMYWJlbCA9IChnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSkgPT4KKyAgZXhlY3V0ZUdyZW1saW5RdWVyeSgKKyAgICAoKSA9PiBnLkUoKS5ncm91cENvdW50KCkuYnkobGFiZWwoKSkubmV4dCgpLAorICAgICdGYWlsZWQgdG8gZ2V0IGVkZ2UgY291bnRzJywKKyAgICAnZy5FKCkuZ3JvdXBDb3VudCgpLmJ5KGxhYmVsKCkpLm5leHQoKScKKyAgKS5waXBlKAorICAgIEVmZmVjdC5tYXAocmVzdWx0ID0+IHsKKyAgICAgIGNvbnN0IG1hcCA9IGV4dHJhY3RDb3VudE1hcChyZXN1bHQpOworICAgICAgcmV0dXJuIHsgdmFsdWU6IG1hcCA/IChPYmplY3QuZnJvbUVudHJpZXMobWFwKSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA6IHVuZGVmaW5lZCB9OworICAgIH0pCisgICk7CisKKy8qKgorICogR2V0cyBwcm9wZXJ0eSBrZXlzIGZvciBhIHNwZWNpZmljIHZlcnRleCBsYWJlbC4KKyAqCisgKiBAcGFyYW0gZyAtIEdyZW1saW4gdHJhdmVyc2FsIHNvdXJjZQorICogQHBhcmFtIHZlcnRleExhYmVsIC0gTGFiZWwgdG8gYW5hbHl6ZQorICogQHBhcmFtIHNhbXBsZUxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgdmVydGljZXMgdG8gc2FtcGxlIGZvciBwcm9wZXJ0aWVzCisgKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBhcnJheSBvZiBwcm9wZXJ0eSBrZXkgc3RyaW5ncworICovCitleHBvcnQgY29uc3QgZ2V0VmVydGV4UHJvcGVydHlLZXlzID0gKAorICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKKyAgdmVydGV4TGFiZWw6IHN0cmluZywKKyAgc2FtcGxlTGltaXQ6IG51bWJlciA9IDEwMAorKTogRWZmZWN0LkVmZmVjdDxzdHJpbmdbXSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+CisgIGV4ZWN1dGVHcmVtbGluUXVlcnkoCisgICAgKCkgPT4gZy5WKCkuaGFzTGFiZWwodmVydGV4TGFiZWwpLmxpbWl0KHNhbXBsZUxpbWl0KS5wcm9wZXJ0aWVzKCkua2V5KCkuZGVkdXAoKS50b0xpc3QoKSwKKyAgICBgRmFpbGVkIHRvIGdldCBwcm9wZXJ0aWVzIGZvciB2ZXJ0ZXggJHt2ZXJ0ZXhMYWJlbH1gLAorICAgIGBnLlYoKS5oYXNMYWJlbCgnJHt2ZXJ0ZXhMYWJlbH0nKS5saW1pdCgke3NhbXBsZUxpbWl0fSkucHJvcGVydGllcygpLmtleSgpLmRlZHVwKCkudG9MaXN0KClgCisgICkucGlwZShFZmZlY3QubWFwKGtleXMgPT4ga2V5cyBhcyBzdHJpbmdbXSkpOworCisvKioKKyAqIEdldHMgcHJvcGVydHkga2V5cyBmb3IgYSBzcGVjaWZpYyBlZGdlIGxhYmVsLgorICoKKyAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCisgKiBAcGFyYW0gZWRnZUxhYmVsIC0gTGFiZWwgdG8gYW5hbHl6ZQorICogQHBhcmFtIHNhbXBsZUxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgZWRnZXMgdG8gc2FtcGxlIGZvciBwcm9wZXJ0aWVzCisgKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBhcnJheSBvZiBwcm9wZXJ0eSBrZXkgc3RyaW5ncworICovCitleHBvcnQgY29uc3QgZ2V0RWRnZVByb3BlcnR5S2V5cyA9ICgKKyAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCisgIGVkZ2VMYWJlbDogc3RyaW5nLAorICBzYW1wbGVMaW1pdDogbnVtYmVyID0gMTAwCispOiBFZmZlY3QuRWZmZWN0PHN0cmluZ1tdLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KKyAgZXhlY3V0ZUdyZW1saW5RdWVyeSgKKyAgICAoKSA9PiBnLkUoKS5oYXNMYWJlbChlZGdlTGFiZWwpLmxpbWl0KHNhbXBsZUxpbWl0KS5wcm9wZXJ0aWVzKCkua2V5KCkuZGVkdXAoKS50b0xpc3QoKSwKKyAgICBgRmFpbGVkIHRvIGdldCBwcm9wZXJ0aWVzIGZvciBlZGdlICR7ZWRnZUxhYmVsfWAsCisgICAgYGcuRSgpLmhhc0xhYmVsKCcke2VkZ2VMYWJlbH0nKS5saW1pdCgke3NhbXBsZUxpbWl0fSkucHJvcGVydGllcygpLmtleSgpLmRlZHVwKCkudG9MaXN0KClgCisgICkucGlwZShFZmZlY3QubWFwKGtleXMgPT4ga2V5cyBhcyBzdHJpbmdbXSkpOworCisvKioKKyAqIEdldHMgc2FtcGxlIHByb3BlcnR5IHZhbHVlcyBmb3IgYW5hbHlzaXMuCisgKgorICogQHBhcmFtIGcgLSBHcmVtbGluIHRyYXZlcnNhbCBzb3VyY2UKKyAqIEBwYXJhbSBlbGVtZW50TGFiZWwgLSBWZXJ0ZXggb3IgZWRnZSBsYWJlbAorICogQHBhcmFtIHByb3BlcnR5S2V5IC0gUHJvcGVydHkgdG8gc2FtcGxlCisgKiBAcGFyYW0gaXNWZXJ0ZXggLSBXaGV0aGVyIHRoaXMgaXMgYSB2ZXJ0ZXggKHRydWUpIG9yIGVkZ2UgKGZhbHNlKQorICogQHBhcmFtIHNhbXBsZUxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gc2FtcGxlCisgKiBAcGFyYW0gbWF4VmFsdWVzIC0gTWF4aW11bSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzIHRvIGNvbGxlY3QKKyAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGFycmF5IG9mIHNhbXBsZSB2YWx1ZXMKKyAqLworZXhwb3J0IGNvbnN0IGdldFNhbXBsZVByb3BlcnR5VmFsdWVzID0gKAorICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKKyAgZWxlbWVudExhYmVsOiBzdHJpbmcsCisgIHByb3BlcnR5S2V5OiBzdHJpbmcsCisgIGlzVmVydGV4OiBib29sZWFuLAorICBzYW1wbGVMaW1pdDogbnVtYmVyID0gNTAsCisgIG1heFZhbHVlczogbnVtYmVyID0gMTAKKyk6IEVmZmVjdC5FZmZlY3Q8dW5rbm93bltdLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4geworICBjb25zdCB0cmF2ZXJzYWwgPSBpc1ZlcnRleCA/IGcuVigpLmhhc0xhYmVsKGVsZW1lbnRMYWJlbCkgOiBnLkUoKS5oYXNMYWJlbChlbGVtZW50TGFiZWwpOworCisgIHJldHVybiBleGVjdXRlR3JlbWxpblF1ZXJ5KAorICAgICgpID0+CisgICAgICB0cmF2ZXJzYWwKKyAgICAgICAgLmxpbWl0KHNhbXBsZUxpbWl0KQorICAgICAgICAudmFsdWVzKHByb3BlcnR5S2V5KQorICAgICAgICAuZGVkdXAoKQorICAgICAgICAubGltaXQobWF4VmFsdWVzICsgMSkKKyAgICAgICAgLnRvTGlzdCgpLAorICAgIGBGYWlsZWQgdG8gZ2V0IHZhbHVlcyBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eUtleX1gLAorICAgIGBnLiR7aXNWZXJ0ZXggPyAnVicgOiAnRSd9KCkuaGFzTGFiZWwoJyR7ZWxlbWVudExhYmVsfScpLmxpbWl0KCR7c2FtcGxlTGltaXR9KS52YWx1ZXMoJyR7cHJvcGVydHlLZXl9JykuZGVkdXAoKS5saW1pdCgke21heFZhbHVlcyArIDF9KS50b0xpc3QoKWAKKyAgKS5waXBlKEVmZmVjdC5tYXAodmFsdWVzID0+IHZhbHVlcyBhcyB1bmtub3duW10pKTsKK307CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL3NjaGVtYS1hc3NlbWJseS50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vc2NoZW1hLWFzc2VtYmx5LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL3NjaGVtYS1hc3NlbWJseS50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9zY2hlbWEtYXNzZW1ibHkudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vc2NoZW1hLWNhY2hlLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9zY2hlbWEtY2FjaGUudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vc2NoZW1hLWNhY2hlLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3NjaGVtYS1jYWNoZS50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9zY2hlbWEtZ2VuZXJhdG9yLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9zY2hlbWEtZ2VuZXJhdG9yLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMTk5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3NjaGVtYS1nZW5lcmF0b3IudHMKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IFN0cmVhbWxpbmVkIGdyYXBoIHNjaGVtYSBnZW5lcmF0aW9uIG9yY2hlc3RyYXRvci4KKyAqCisgKiBDb29yZGluYXRlcyBzY2hlbWEgZ2VuZXJhdGlvbiB1c2luZyBtb2R1bGFyIGNvbXBvbmVudHMgZm9yIHF1ZXJ5IGV4ZWN1dGlvbiwKKyAqIHByb3BlcnR5IGFuYWx5c2lzLCByZWxhdGlvbnNoaXAgcGF0dGVybnMsIGFuZCBzY2hlbWEgYXNzZW1ibHkuIFByb3ZpZGVzCisgKiB0aW1lb3V0IHByb3RlY3Rpb24gYW5kIGNvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmcuCisgKi8KKworaW1wb3J0IHsgRWZmZWN0LCBEdXJhdGlvbiB9IGZyb20gJ2VmZmVjdCc7CitpbXBvcnQgeyB0eXBlIEdyYXBoU2NoZW1hLCB0eXBlIFZlcnRleCwgdHlwZSBFZGdlIH0gZnJvbSAnLi9tb2RlbHMvaW5kZXguanMnOworaW1wb3J0IHsgRXJyb3JzLCB0eXBlIEdyZW1saW5RdWVyeUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzLmpzJzsKK2ltcG9ydCB0eXBlIHsgQ29ubmVjdGlvblN0YXRlLCBHcmFwaFRyYXZlcnNhbFNvdXJjZSwgU2NoZW1hQ29uZmlnIH0gZnJvbSAnLi90eXBlcy5qcyc7CitpbXBvcnQgeworICBnZXRWZXJ0ZXhMYWJlbHMsCisgIGdldEVkZ2VMYWJlbHMsCisgIGdldFZlcnRleENvdW50c1BlckxhYmVsLAorICBnZXRFZGdlQ291bnRzUGVyTGFiZWwsCisgIGdldFZlcnRleFByb3BlcnR5S2V5cywKKyAgZ2V0RWRnZVByb3BlcnR5S2V5cywKK30gZnJvbSAnLi9xdWVyeS11dGlscy5qcyc7CitpbXBvcnQgeyBhbmFseXplRWxlbWVudFByb3BlcnRpZXMsIHdpdGhFbGVtZW50Q291bnRzIH0gZnJvbSAnLi9wcm9wZXJ0eS1hbmFseXplci5qcyc7CitpbXBvcnQgeyBnZW5lcmF0ZUVkZ2VQYXR0ZXJucyB9IGZyb20gJy4vZWRnZS1wYXR0ZXJucy5qcyc7CitpbXBvcnQgeyBhc3NlbWJsZUdyYXBoU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEtYXNzZW1ibHkuanMnOworCit0eXBlIFNjaGVtYUNvdW50RGF0YSA9IHsgdmFsdWU/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0gfCBudWxsOworCitjb25zdCBERUZBVUxUX1NDSEVNQV9USU1FT1VUX01TID0gMzAwMDA7CisKKy8qKgorICogRGVmYXVsdCBzY2hlbWEgY29uZmlndXJhdGlvbgorICovCitleHBvcnQgY29uc3QgREVGQVVMVF9TQ0hFTUFfQ09ORklHOiBTY2hlbWFDb25maWcgPSB7CisgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGZhbHNlLAorICBtYXhFbnVtVmFsdWVzOiAxMCwKKyAgaW5jbHVkZUNvdW50czogZmFsc2UsCisgIGVudW1DYXJkaW5hbGl0eVRocmVzaG9sZDogMTAsCisgIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBbJ2lkJywgJ3RpbWVzdGFtcCddLAorICB0aW1lb3V0TXM6IERFRkFVTFRfU0NIRU1BX1RJTUVPVVRfTVMsCisgIGJhdGNoU2l6ZTogMTAsCit9OworCisvKioKKyAqIENvcmUgc2NoZW1hIGdlbmVyYXRpb24gb3JjaGVzdHJhdG9yLgorICoKKyAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCisgKiBAcGFyYW0gY29uZmlnIC0gU2NoZW1hIGNvbmZpZ3VyYXRpb24KKyAqIEBwYXJhbSBzdGFydFRpbWUgLSBHZW5lcmF0aW9uIHN0YXJ0IHRpbWVzdGFtcCBmb3IgbWV0cmljcworICogQHJldHVybnMgRWZmZWN0IHdpdGggY29tcGxldGUgc2NoZW1hCisgKi8KK2NvbnN0IGV4ZWN1dGVTY2hlbWFHZW5lcmF0aW9uID0gKAorICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKKyAgY29uZmlnOiBTY2hlbWFDb25maWcsCisgIHN0YXJ0VGltZTogbnVtYmVyCispOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KKyAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgeworICAgIC8vIFN0ZXAgMTogRGlzY292ZXIgZ3JhcGggc3RydWN0dXJlCisgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCdEaXNjb3ZlcmluZyBncmFwaCBzdHJ1Y3R1cmUnKTsKKyAgICBjb25zdCBbdmVydGV4TGFiZWxzLCBlZGdlTGFiZWxzXSA9IHlpZWxkKiBFZmZlY3QuYWxsKFtnZXRWZXJ0ZXhMYWJlbHMoZyksIGdldEVkZ2VMYWJlbHMoZyldKTsKKworICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygKKyAgICAgIGBGb3VuZCAke3ZlcnRleExhYmVscy5sZW5ndGh9IHZlcnRleCBsYWJlbHMgYW5kICR7ZWRnZUxhYmVscy5sZW5ndGh9IGVkZ2UgbGFiZWxzYAorICAgICk7CisKKyAgICAvLyBTdGVwIDI6IEdldCBjb3VudHMgaWYgZW5hYmxlZAorICAgIGNvbnN0IFt2ZXJ0ZXhDb3VudHNQZXJMYWJlbCwgZWRnZUNvdW50c1BlckxhYmVsXSA9IHlpZWxkKiBnZXRFbGVtZW50Q291bnRzUGVyTGFiZWwoZywgY29uZmlnKTsKKworICAgIC8vIFN0ZXAgMzogQW5hbHl6ZSBwcm9wZXJ0aWVzIGFuZCBwYXR0ZXJucyBpbiBwYXJhbGxlbAorICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnQW5hbHl6aW5nIHByb3BlcnRpZXMgYW5kIHJlbGF0aW9uc2hpcCBwYXR0ZXJucycpOworICAgIGNvbnN0IFtyYXdWZXJ0aWNlcywgcmF3RWRnZXMsIHBhdHRlcm5zXSA9IHlpZWxkKiBFZmZlY3QuYWxsKAorICAgICAgWworICAgICAgICBhbmFseXplRWxlbWVudFByb3BlcnRpZXMoZywgdmVydGV4TGFiZWxzLCBnZXRWZXJ0ZXhQcm9wZXJ0eUtleXMsIGNvbmZpZywgdHJ1ZSksCisgICAgICAgIGFuYWx5emVFbGVtZW50UHJvcGVydGllcyhnLCBlZGdlTGFiZWxzLCBnZXRFZGdlUHJvcGVydHlLZXlzLCBjb25maWcsIGZhbHNlKSwKKyAgICAgICAgZ2VuZXJhdGVFZGdlUGF0dGVybnMoZyksCisgICAgICBdLAorICAgICAgeyBjb25jdXJyZW5jeTogMyB9CisgICAgKTsKKworICAgIC8vIFN0ZXAgNDogQWRkIGNvdW50IGluZm9ybWF0aW9uCisgICAgY29uc3QgdmVydGljZXMgPSBhZGRFbGVtZW50Q291bnRzPFZlcnRleD4ocmF3VmVydGljZXMsIHZlcnRleENvdW50c1BlckxhYmVsLCBjb25maWcpOworICAgIGNvbnN0IGVkZ2VzID0gYWRkRWxlbWVudENvdW50czxFZGdlPihyYXdFZGdlcywgZWRnZUNvdW50c1BlckxhYmVsLCBjb25maWcpOworCisgICAgLy8gU3RlcCA1OiBBc3NlbWJsZSBmaW5hbCBzY2hlbWEKKyAgICByZXR1cm4geWllbGQqIGFzc2VtYmxlR3JhcGhTY2hlbWEodmVydGljZXMsIGVkZ2VzLCBwYXR0ZXJucywgY29uZmlnLCBzdGFydFRpbWUpOworICB9KTsKKworLyoqCisgKiBHZXRzIHZlcnRleCBhbmQgZWRnZSBjb3VudHMgaWYgZW5hYmxlZCBpbiBjb25maWd1cmF0aW9uLgorICovCitjb25zdCBnZXRFbGVtZW50Q291bnRzUGVyTGFiZWwgPSAoCisgIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAorICBjb25maWc6IFNjaGVtYUNvbmZpZworKTogRWZmZWN0LkVmZmVjdDxbU2NoZW1hQ291bnREYXRhLCBTY2hlbWFDb3VudERhdGFdLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4geworICBpZiAoIWNvbmZpZy5pbmNsdWRlQ291bnRzKSB7CisgICAgcmV0dXJuIEVmZmVjdC5zdWNjZWVkKFtudWxsLCBudWxsXSk7CisgIH0KKworICByZXR1cm4gRWZmZWN0LmFsbChbZ2V0VmVydGV4Q291bnRzUGVyTGFiZWwoZyksIGdldEVkZ2VDb3VudHNQZXJMYWJlbChnKV0pOworfTsKKworLyoqCisgKiBBZGRzIGNvdW50IGluZm9ybWF0aW9uIHRvIGFuYWx5c2lzIHJlc3VsdHMuCisgKi8KK2NvbnN0IGFkZEVsZW1lbnRDb3VudHMgPSA8VCBleHRlbmRzIFZlcnRleCB8IEVkZ2U+KAorICByYXdFbGVtZW50czogdW5rbm93bltdLAorICBjb3VudHM6IFNjaGVtYUNvdW50RGF0YSwKKyAgY29uZmlnOiBTY2hlbWFDb25maWcKKyk6IFRbXSA9PiB7CisgIGNvbnN0IGFkZENvdW50cyA9IHdpdGhFbGVtZW50Q291bnRzPFQ+KGNvdW50cywgY29uZmlnKTsKKworICByZXR1cm4gcmF3RWxlbWVudHMubWFwKGVsZW1lbnQgPT4geworICAgIGNvbnN0IGVsZW1lbnREYXRhID0gZWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsKKyAgICBjb25zdCBsYWJlbCA9IGVsZW1lbnREYXRhWydsYWJlbCddIGFzIHN0cmluZzsKKyAgICByZXR1cm4gYWRkQ291bnRzKGxhYmVsLCBlbGVtZW50RGF0YSBhcyBPbWl0PFQsICdjb3VudCc+KTsKKyAgfSk7Cit9OworCisvKioKKyAqIEFwcGxpZXMgdGltZW91dCBwcm90ZWN0aW9uIHRvIHNjaGVtYSBnZW5lcmF0aW9uLgorICoKKyAqIEBwYXJhbSBzY2hlbWFHZW5lcmF0aW9uIC0gRWZmZWN0IHBlcmZvcm1pbmcgc2NoZW1hIGdlbmVyYXRpb24KKyAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHdpdGggdGltZW91dCBzZXR0aW5ncworICogQHJldHVybnMgRWZmZWN0IHdpdGggdGltZW91dCBwcm90ZWN0aW9uIGFwcGxpZWQKKyAqLworY29uc3QgYXBwbHlTY2hlbWFUaW1lb3V0ID0gKAorICBzY2hlbWFHZW5lcmF0aW9uOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluUXVlcnlFcnJvcj4sCisgIGNvbmZpZzogU2NoZW1hQ29uZmlnCispOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4geworICBjb25zdCB0aW1lb3V0RHVyYXRpb24gPSBEdXJhdGlvbi5taWxsaXMoY29uZmlnLnRpbWVvdXRNcyB8fCBERUZBVUxUX1NDSEVNQV9USU1FT1VUX01TKTsKKyAgY29uc3QgdGltZW91dEVmZmVjdCA9IEVmZmVjdC50aW1lb3V0KHNjaGVtYUdlbmVyYXRpb24sIHRpbWVvdXREdXJhdGlvbik7CisKKyAgcmV0dXJuIEVmZmVjdC5jYXRjaFRhZyh0aW1lb3V0RWZmZWN0LCAnVGltZW91dEV4Y2VwdGlvbicsICgpID0+CisgICAgRWZmZWN0LmZhaWwoCisgICAgICBFcnJvcnMucXVlcnkoCisgICAgICAgIGBTY2hlbWEgZ2VuZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHtjb25maWcudGltZW91dE1zIHx8IERFRkFVTFRfU0NIRU1BX1RJTUVPVVRfTVN9bXNgLAorICAgICAgICAnc2NoZW1hLWdlbmVyYXRpb24nCisgICAgICApCisgICAgKQorICApOworfTsKKworLyoqCisgKiBNYWluIGVudHJ5IHBvaW50IGZvciBncmFwaCBzY2hlbWEgZ2VuZXJhdGlvbi4KKyAqCisgKiBAcGFyYW0gY29ubmVjdGlvblN0YXRlIC0gQWN0aXZlIEdyZW1saW4gY29ubmVjdGlvbiB3aXRoIHRyYXZlcnNhbCBzb3VyY2UKKyAqIEBwYXJhbSBjb25maWcgLSBTY2hlbWEgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGNvbXBsZXRlIEdyYXBoU2NoZW1hIG9yIGNvbm5lY3Rpb24gZXJyb3IKKyAqCisgKiBPcmNoZXN0cmF0ZXMgdGhlIGNvbXBsZXRlIHNjaGVtYSBnZW5lcmF0aW9uIHBpcGVsaW5lOgorICogMS4gVmFsaWRhdGVzIGNvbm5lY3Rpb24gc3RhdGUKKyAqIDIuIEFwcGxpZXMgdGltZW91dCBwcm90ZWN0aW9uCisgKiAzLiBEZWxlZ2F0ZXMgdG8gY29yZSBnZW5lcmF0aW9uIGxvZ2ljCisgKgorICogV2lsbCB0aW1lb3V0IGlmIGdlbmVyYXRpb24gZXhjZWVkcyBjb25maWd1cmVkIHRpbWUgbGltaXQgKGRlZmF1bHQgMzBzKS4KKyAqLworZXhwb3J0IGNvbnN0IGdlbmVyYXRlR3JhcGhTY2hlbWEgPSAoCisgIGNvbm5lY3Rpb25TdGF0ZTogQ29ubmVjdGlvblN0YXRlLAorICBjb25maWc6IFNjaGVtYUNvbmZpZyA9IERFRkFVTFRfU0NIRU1BX0NPTkZJRworKTogRWZmZWN0LkVmZmVjdDxHcmFwaFNjaGVtYSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+CisgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgICBjb25zdCBnID0gY29ubmVjdGlvblN0YXRlLmc7CisgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnU3RhcnRpbmcgZ3JhcGggc2NoZW1hIGdlbmVyYXRpb24nLCB7CisgICAgICBjb25maWc6IHsKKyAgICAgICAgaW5jbHVkZUNvdW50czogY29uZmlnLmluY2x1ZGVDb3VudHMsCisgICAgICAgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGNvbmZpZy5pbmNsdWRlU2FtcGxlVmFsdWVzLAorICAgICAgICBtYXhFbnVtVmFsdWVzOiBjb25maWcubWF4RW51bVZhbHVlcywKKyAgICAgIH0sCisgICAgfSk7CisKKyAgICBjb25zdCBzY2hlbWFHZW5lcmF0aW9uID0gZXhlY3V0ZVNjaGVtYUdlbmVyYXRpb24oZywgY29uZmlnLCBzdGFydFRpbWUpOworICAgIHJldHVybiB5aWVsZCogYXBwbHlTY2hlbWFUaW1lb3V0KHNjaGVtYUdlbmVyYXRpb24sIGNvbmZpZyk7CisgIH0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9zY2hlbWEudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3NjaGVtYS50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzM1OWIwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi9zY2hlbWEudHMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgeyBFZmZlY3QsIENvbnRleHQsIExheWVyLCBwaXBlIH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB7IGdlbmVyYXRlR3JhcGhTY2hlbWEsIERFRkFVTFRfU0NIRU1BX0NPTkZJRyB9IGZyb20gJy4vc2NoZW1hLWdlbmVyYXRvci5qcyc7CitpbXBvcnQgeworICBjcmVhdGVTY2hlbWFDYWNoZSwKKyAgZ2V0Q2FjaGVkU2NoZW1hLAorICBpbnZhbGlkYXRlU2NoZW1hQ2FjaGUsCisgIHBlZWtDYWNoZWRTY2hlbWEsCisgIHJlZnJlc2hTY2hlbWFDYWNoZSwKK30gZnJvbSAnLi9zY2hlbWEtY2FjaGUuanMnOworaW1wb3J0IHR5cGUgeyBHcmFwaFNjaGVtYSB9IGZyb20gJy4vbW9kZWxzL2luZGV4LmpzJzsKK2ltcG9ydCB7IEdyZW1saW5DbGllbnQgfSBmcm9tICcuL2NsaWVudC5qcyc7CitpbXBvcnQgeyBBcHBDb25maWcgfSBmcm9tICcuLi9jb25maWcuanMnOworaW1wb3J0IHR5cGUgeyBHcmVtbGluQ29ubmVjdGlvbkVycm9yLCBHcmVtbGluUXVlcnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy5qcyc7CisKKy8vIERlZmluZSB0aGUgc2VydmljZSBpbnRlcmZhY2UgYW5kIGNyZWF0ZSBhIHRhZworZXhwb3J0IGNsYXNzIFNjaGVtYVNlcnZpY2UgZXh0ZW5kcyBDb250ZXh0LlRhZygnU2NoZW1hU2VydmljZScpPAorICBTY2hlbWFTZXJ2aWNlLAorICB7CisgICAgcmVhZG9ubHkgZ2V0U2NoZW1hOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHwgR3JlbWxpblF1ZXJ5RXJyb3I+OworICAgIHJlYWRvbmx5IHBlZWtTY2hlbWE6IEVmZmVjdC5FZmZlY3Q8R3JhcGhTY2hlbWEgfCBudWxsLCBuZXZlcj47CisgICAgcmVhZG9ubHkgaW52YWxpZGF0ZVNjaGVtYTogRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlcj47CisgICAgcmVhZG9ubHkgcmVmcmVzaFNjaGVtYTogRWZmZWN0LkVmZmVjdDx2b2lkLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHwgR3JlbWxpblF1ZXJ5RXJyb3I+OworICB9Cis+KCkge30KKworLy8gSW1wbGVtZW50IHRoZSBsaXZlIGxheWVyCitleHBvcnQgY29uc3QgU2NoZW1hU2VydmljZUxpdmUgPSBMYXllci5lZmZlY3QoCisgIFNjaGVtYVNlcnZpY2UsCisgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgICBjb25zdCBncmVtbGluQ2xpZW50ID0geWllbGQqIEdyZW1saW5DbGllbnQ7CisgICAgY29uc3QgY29uZmlnID0geWllbGQqIEFwcENvbmZpZzsKKyAgICBjb25zdCBjYWNoZVJlZiA9IHlpZWxkKiBjcmVhdGVTY2hlbWFDYWNoZSgpOworCisgICAgY29uc3QgZ2VuZXJhdGVTY2hlbWFFZmZlY3QgPSBwaXBlKAorICAgICAgZ3JlbWxpbkNsaWVudC5nZXRDb25uZWN0aW9uLAorICAgICAgRWZmZWN0LmZsYXRNYXAoY29ubiA9PgorICAgICAgICBnZW5lcmF0ZUdyYXBoU2NoZW1hKGNvbm4sIHsKKyAgICAgICAgICAuLi5ERUZBVUxUX1NDSEVNQV9DT05GSUcsCisgICAgICAgICAgaW5jbHVkZUNvdW50czogY29uZmlnLnNjaGVtYS5pbmNsdWRlQ291bnRzLAorICAgICAgICAgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGNvbmZpZy5zY2hlbWEuaW5jbHVkZVNhbXBsZVZhbHVlcywKKyAgICAgICAgfSkKKyAgICAgICkKKyAgICApOworCisgICAgY29uc3QgZ2V0U2NoZW1hID0gZ2V0Q2FjaGVkU2NoZW1hKGNhY2hlUmVmLCBnZW5lcmF0ZVNjaGVtYUVmZmVjdCk7CisgICAgY29uc3QgcGVla1NjaGVtYSA9IHBlZWtDYWNoZWRTY2hlbWEoY2FjaGVSZWYpOworICAgIGNvbnN0IGludmFsaWRhdGVTY2hlbWEgPSBpbnZhbGlkYXRlU2NoZW1hQ2FjaGUoY2FjaGVSZWYpOworICAgIGNvbnN0IHJlZnJlc2hTY2hlbWEgPSBFZmZlY3QuYXNWb2lkKHJlZnJlc2hTY2hlbWFDYWNoZShjYWNoZVJlZiwgZ2VuZXJhdGVTY2hlbWFFZmZlY3QpKTsKKworICAgIHJldHVybiBTY2hlbWFTZXJ2aWNlLm9mKHsKKyAgICAgIGdldFNjaGVtYSwKKyAgICAgIHBlZWtTY2hlbWEsCisgICAgICBpbnZhbGlkYXRlU2NoZW1hLAorICAgICAgcmVmcmVzaFNjaGVtYSwKKyAgICB9KTsKKyAgfSkKKyk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3NlcnZpY2UudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9ncmVtbGluL3NlcnZpY2UudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNhYzA4MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vc2VydmljZS50cwpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgRWZmZWN0LWJhc2VkIEdyZW1saW4gc2VydmljZSBmb3IgZ3JhcGggZGF0YWJhc2Ugb3BlcmF0aW9ucy4KKyAqCisgKiBQcm92aWRlcyBhIG1vZHVsYXIsIGNvbXBvc2FibGUgc2VydmljZSBsYXllciBmb3IgR3JlbWxpbiBncmFwaCBkYXRhYmFzZXMgdXNpbmcKKyAqIEVmZmVjdC10cyBwYXR0ZXJucy4gSGFuZGxlcyBjb25uZWN0aW9uIG1hbmFnZW1lbnQsIHNjaGVtYSBjYWNoaW5nLCBxdWVyeSBleGVjdXRpb24sCisgKiBhbmQgZXJyb3IgaGFuZGxpbmcuIE9uIGFueSBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHRoZSBzZXJ2aWNlIGludmFsaWRhdGVzIHRoZQorICogY2FjaGVkIGNvbm5lY3Rpb24gYW5kIHJldHJpZXMgdGhlIG9wZXJhdGlvbiBvbmNlIHRvIHRyYW5zcGFyZW50bHkgcmVjb25uZWN0LgorICovCisKK2ltcG9ydCB7IEVmZmVjdCwgQ29udGV4dCwgTGF5ZXIsIHBpcGUgfSBmcm9tICdlZmZlY3QnOworaW1wb3J0IHsgdHlwZSBHcmVtbGluUXVlcnlSZXN1bHQsIEdyZW1saW5RdWVyeVJlc3VsdFNjaGVtYSB9IGZyb20gJy4vbW9kZWxzL2luZGV4LmpzJzsKK2ltcG9ydCB7IHBhcnNlR3JlbWxpblJlc3VsdHNXaXRoTWV0YWRhdGEgfSBmcm9tICcuLi91dGlscy9yZXN1bHQtcGFyc2VyLmpzJzsKK2ltcG9ydCB7IGlzR3JlbWxpblJlc3VsdCB9IGZyb20gJy4uL3V0aWxzL3R5cGUtZ3VhcmRzLmpzJzsKK2ltcG9ydCB7IEdyZW1saW5Db25uZWN0aW9uRXJyb3IsIEdyZW1saW5RdWVyeUVycm9yLCBFcnJvcnMsIFBhcnNlRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnOworaW1wb3J0IHsgR3JlbWxpbkNsaWVudCB9IGZyb20gJy4vY2xpZW50LmpzJzsKK2ltcG9ydCB7IFNjaGVtYVNlcnZpY2UgfSBmcm9tICcuL3NjaGVtYS5qcyc7CitpbXBvcnQgdHlwZSB7IEdyZW1saW5DbGllbnRUeXBlLCBHcmVtbGluUmVzdWx0U2V0LCBDb25uZWN0aW9uU3RhdGUgfSBmcm9tICcuL3R5cGVzLmpzJzsKK2ltcG9ydCB0eXBlIHsgR3JhcGhTY2hlbWEsIFNlcnZpY2VTdGF0dXMgfSBmcm9tICcuL3R5cGVzLmpzJzsKKworLyoqCisgKiBHcmVtbGluIHNlcnZpY2UgdXNpbmcgRWZmZWN0IENvbnRleHQuVGFnIHBhdHRlcm4uCisgKgorICogUHJvdmlkZXMgZ3JhcGggZGF0YWJhc2Ugb3BlcmF0aW9ucyBpbmNsdWRpbmc6CisgKiAtIENvbm5lY3Rpb24gc3RhdHVzIG1vbml0b3JpbmcKKyAqIC0gU2NoZW1hIGludHJvc3BlY3Rpb24gYW5kIGNhY2hpbmcKKyAqIC0gUXVlcnkgZXhlY3V0aW9uIHdpdGggcmVzdWx0IHBhcnNpbmcKKyAqIC0gSGVhbHRoIGNoZWNrIGNhcGFiaWxpdGllcworICoKKyAqIEFsbCBvcGVyYXRpb25zIHJldHVybiBFZmZlY3QgdHlwZXMgZm9yIGNvbXBvc2FibGUgZXJyb3IgaGFuZGxpbmcuCisgKi8KK2V4cG9ydCBjbGFzcyBHcmVtbGluU2VydmljZSBleHRlbmRzIENvbnRleHQuVGFnKCdHcmVtbGluU2VydmljZScpPAorICBHcmVtbGluU2VydmljZSwKKyAgeworICAgIHJlYWRvbmx5IGdldFN0YXR1czogRWZmZWN0LkVmZmVjdDxTZXJ2aWNlU3RhdHVzLCBuZXZlcj47CisgICAgcmVhZG9ubHkgZ2V0U2NoZW1hOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHwgR3JlbWxpblF1ZXJ5RXJyb3I+OworICAgIHJlYWRvbmx5IGdldENhY2hlZFNjaGVtYTogRWZmZWN0LkVmZmVjdDxHcmFwaFNjaGVtYSB8IG51bGwsIG5ldmVyPjsKKyAgICByZWFkb25seSByZWZyZXNoU2NoZW1hQ2FjaGU6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvciB8IEdyZW1saW5RdWVyeUVycm9yPjsKKyAgICByZWFkb25seSBleGVjdXRlUXVlcnk6ICgKKyAgICAgIHF1ZXJ5OiBzdHJpbmcKKyAgICApID0+IEVmZmVjdC5FZmZlY3Q8R3JlbWxpblF1ZXJ5UmVzdWx0LCBHcmVtbGluUXVlcnlFcnJvciB8IEdyZW1saW5Db25uZWN0aW9uRXJyb3IgfCBQYXJzZUVycm9yPjsKKyAgICByZWFkb25seSBoZWFsdGhDaGVjazogRWZmZWN0LkVmZmVjdDx7IGhlYWx0aHk6IGJvb2xlYW47IGRldGFpbHM6IHN0cmluZyB9LCBuZXZlcj47CisgIH0KKz4oKSB7fQorCisvKioKKyAqIENyZWF0ZXMgdGhlIEdyZW1saW4gc2VydmljZSBpbXBsZW1lbnRhdGlvbiB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uLgorICoKKyAqIFRoZSBzZXJ2aWNlIHdyYXBzIGFsbCBncmFwaCBvcGVyYXRpb25zIGluIGEgcmVjb25uZWN0IGxheWVyOiBvbiBhbnkKKyAqIEdyZW1saW5Db25uZWN0aW9uRXJyb3IgdGhlIGNhY2hlZCBjb25uZWN0aW9uIGlzIGludmFsaWRhdGVkIGFuZCB0aGUgb3BlcmF0aW9uCisgKiBpcyByZXRyaWVkIG9uY2Ugd2l0aCBhIGZyZXNoIGNvbm5lY3Rpb24uCisgKi8KK2NvbnN0IG1ha2VHcmVtbGluU2VydmljZSA9IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgY29uc3QgZ3JlbWxpbkNsaWVudCA9IHlpZWxkKiBHcmVtbGluQ2xpZW50OworICBjb25zdCBzY2hlbWFTZXJ2aWNlID0geWllbGQqIFNjaGVtYVNlcnZpY2U7CisKKyAgLyoqCisgICAqIFdyYXBzIGFuIEVmZmVjdCBzbyB0aGF0IG9uIEdyZW1saW5Db25uZWN0aW9uRXJyb3IgdGhlIGNvbm5lY3Rpb24gaXMKKyAgICogaW52YWxpZGF0ZWQgYW5kIHRoZSBvcGVyYXRpb24gcmV0cmllZCBleGFjdGx5IG9uY2UuCisgICAqLworICBjb25zdCB3aXRoUmVjb25uZWN0ID0gPEEsIEU+KAorICAgIG9wZXJhdGlvbjogRWZmZWN0LkVmZmVjdDxBLCBFIHwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvcj4KKyAgKTogRWZmZWN0LkVmZmVjdDxBLCBFIHwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvcj4gPT4KKyAgICBwaXBlKAorICAgICAgb3BlcmF0aW9uLAorICAgICAgRWZmZWN0LmNhdGNoVGFnKCdHcmVtbGluQ29ubmVjdGlvbkVycm9yJywgKCkgPT4KKyAgICAgICAgcGlwZSgKKyAgICAgICAgICBFZmZlY3QubG9nV2FybmluZygnQ29ubmVjdGlvbiBlcnJvciDigJQgaW52YWxpZGF0aW5nIGFuZCByZXRyeWluZyBvbmNlJyksCisgICAgICAgICAgRWZmZWN0LmFuZFRoZW4oZ3JlbWxpbkNsaWVudC5pbnZhbGlkYXRlKSwKKyAgICAgICAgICBFZmZlY3QuYW5kVGhlbihvcGVyYXRpb24pCisgICAgICAgICkKKyAgICAgICkKKyAgICApOworCisgIC8qKgorICAgKiBFeGVjdXRlcyBhIHJhdyBHcmVtbGluIHF1ZXJ5IGFnYWluc3QgdGhlIGNsaWVudC4KKyAgICovCisgIGNvbnN0IGV4ZWN1dGVSYXdRdWVyeSA9ICgKKyAgICBxdWVyeTogc3RyaW5nLAorICAgIGNsaWVudDogR3JlbWxpbkNsaWVudFR5cGUKKyAgKTogRWZmZWN0LkVmZmVjdDx1bmtub3duLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KKyAgICBwaXBlKAorICAgICAgRWZmZWN0LnRyeVByb21pc2UoKCkgPT4gY2xpZW50LnN1Ym1pdChxdWVyeSwgbnVsbCkpLAorICAgICAgRWZmZWN0Lm1hcEVycm9yKChlcnJvcjogdW5rbm93bikgPT4gRXJyb3JzLnF1ZXJ5KCdRdWVyeSBleGVjdXRpb24gZmFpbGVkJywgcXVlcnksIGVycm9yKSkKKyAgICApOworCisgIC8qKgorICAgKiBQcm9jZXNzZXMgR3JlbWxpbiBSZXN1bHRTZXQgaW50byBzdGFuZGFyZCBhcnJheSBmb3JtYXQuCisgICAqLworICBjb25zdCBwcm9jZXNzUmVzdWx0U2V0ID0gKHJlc3VsdFNldDogdW5rbm93bik6IHVua25vd25bXSA9PiB7CisgICAgaWYgKHJlc3VsdFNldCAmJiB0eXBlb2YgcmVzdWx0U2V0ID09PSAnb2JqZWN0JyAmJiAnX2l0ZW1zJyBpbiByZXN1bHRTZXQpIHsKKyAgICAgIHJldHVybiAocmVzdWx0U2V0IGFzIHVua25vd24gYXMgR3JlbWxpblJlc3VsdFNldCkudG9BcnJheSgpOworICAgIH0KKyAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRTZXQpKSB7CisgICAgICByZXR1cm4gcmVzdWx0U2V0OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0U2V0ICE9PSB1bmRlZmluZWQgPyBbcmVzdWx0U2V0XSA6IFtdOworICB9OworCisgIC8qKgorICAgKiBUcmFuc2Zvcm1zIHJhdyByZXN1bHQgc2V0IGludG8gcGFyc2VkIEdyZW1saW5RdWVyeVJlc3VsdCBmb3JtYXQuCisgICAqLworICBjb25zdCB0cmFuc2Zvcm1HcmVtbGluUmVzdWx0ID0gKAorICAgIHF1ZXJ5OiBzdHJpbmcsCisgICAgcmVzdWx0U2V0OiB1bmtub3duCisgICk6IEVmZmVjdC5FZmZlY3Q8eyByZXN1bHRzOiB1bmtub3duW107IG1lc3NhZ2U6IHN0cmluZyB9LCBQYXJzZUVycm9yPiA9PgorICAgIHBpcGUoCisgICAgICBFZmZlY3Quc3luYygoKSA9PiBwcm9jZXNzUmVzdWx0U2V0KHJlc3VsdFNldCkpLAorICAgICAgRWZmZWN0LmZsYXRNYXAoZGF0YUFycmF5ID0+IHBhcnNlR3JlbWxpblJlc3VsdHNXaXRoTWV0YWRhdGEoZGF0YUFycmF5KSksCisgICAgICBFZmZlY3QubWFwKHBhcnNlZCA9PiAoeworICAgICAgICByZXN1bHRzOiBwYXJzZWQucmVzdWx0cywKKyAgICAgICAgbWVzc2FnZTogJ1F1ZXJ5IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseScsCisgICAgICB9KSksCisgICAgICBFZmZlY3QubWFwRXJyb3IoZXJyb3IgPT4gRXJyb3JzLnBhcnNlKCdSZXN1bHQgcGFyc2luZyBmYWlsZWQnLCBxdWVyeSwgZXJyb3IpKQorICAgICk7CisKKyAgLyoqCisgICAqIFZhbGlkYXRlcyBxdWVyeSByZXN1bHQgYWdhaW5zdCB0aGUgR3JlbWxpblF1ZXJ5UmVzdWx0IHNjaGVtYS4KKyAgICovCisgIGNvbnN0IHZhbGlkYXRlUXVlcnlSZXN1bHQgPSAoCisgICAgcXVlcnk6IHN0cmluZywKKyAgICByZXN1bHQ6IHVua25vd24KKyAgKTogRWZmZWN0LkVmZmVjdDxHcmVtbGluUXVlcnlSZXN1bHQsIFBhcnNlRXJyb3I+ID0+CisgICAgcGlwZSgKKyAgICAgIEVmZmVjdC50cnkoKCkgPT4gR3JlbWxpblF1ZXJ5UmVzdWx0U2NoZW1hLnBhcnNlKHJlc3VsdCkpLAorICAgICAgRWZmZWN0Lm1hcEVycm9yKChlcnJvcjogdW5rbm93bikgPT4gRXJyb3JzLnBhcnNlKCdSZXN1bHQgdmFsaWRhdGlvbiBmYWlsZWQnLCBxdWVyeSwgZXJyb3IpKQorICAgICk7CisKKyAgLyoqCisgICAqIENvcmUgcXVlcnkgZXhlY3V0aW9uIOKAlCBvYnRhaW5zIHRoZSBjb25uZWN0aW9uIGFuZCBydW5zIHRoZSBxdWVyeS4KKyAgICovCisgIGNvbnN0IGRvRXhlY3V0ZVF1ZXJ5ID0gKAorICAgIHF1ZXJ5OiBzdHJpbmcKKyAgKTogRWZmZWN0LkVmZmVjdDxHcmVtbGluUXVlcnlSZXN1bHQsIEdyZW1saW5RdWVyeUVycm9yIHwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvciB8IFBhcnNlRXJyb3I+ID0+CisgICAgcGlwZSgKKyAgICAgIGdyZW1saW5DbGllbnQuZ2V0Q29ubmVjdGlvbiwKKyAgICAgIEVmZmVjdC5mbGF0TWFwKGNvbm4gPT4gZXhlY3V0ZVJhd1F1ZXJ5KHF1ZXJ5LCBjb25uLmNsaWVudCkpLAorICAgICAgRWZmZWN0LmZpbHRlck9yRmFpbChpc0dyZW1saW5SZXN1bHQsIHJlc3VsdFNldCA9PgorICAgICAgICBFcnJvcnMucXVlcnkoJ0ludmFsaWQgcmVzdWx0IGZvcm1hdCByZWNlaXZlZCcsIHF1ZXJ5LCByZXN1bHRTZXQpCisgICAgICApLAorICAgICAgRWZmZWN0LmFuZFRoZW4ocmVzdWx0U2V0ID0+IHRyYW5zZm9ybUdyZW1saW5SZXN1bHQocXVlcnksIHJlc3VsdFNldCkpLAorICAgICAgRWZmZWN0LmFuZFRoZW4ocGFyc2VkUmVzdWx0cyA9PiB2YWxpZGF0ZVF1ZXJ5UmVzdWx0KHF1ZXJ5LCBwYXJzZWRSZXN1bHRzKSkKKyAgICApOworCisgIC8qKgorICAgKiBFeGVjdXRlcyBhIEdyZW1saW4gcXVlcnkgd2l0aCB0cmFuc3BhcmVudCByZWNvbm5lY3Rpb24gb24gZmFpbHVyZS4KKyAgICovCisgIGNvbnN0IGV4ZWN1dGVRdWVyeSA9ICgKKyAgICBxdWVyeTogc3RyaW5nCisgICk6IEVmZmVjdC5FZmZlY3Q8R3JlbWxpblF1ZXJ5UmVzdWx0LCBHcmVtbGluUXVlcnlFcnJvciB8IEdyZW1saW5Db25uZWN0aW9uRXJyb3IgfCBQYXJzZUVycm9yPiA9PgorICAgIHBpcGUoCisgICAgICBFZmZlY3QubG9nRGVidWcoYEV4ZWN1dGluZyBHcmVtbGluIHF1ZXJ5OiAke3F1ZXJ5fWApLAorICAgICAgRWZmZWN0LmFuZFRoZW4oKCkgPT4gd2l0aFJlY29ubmVjdChkb0V4ZWN1dGVRdWVyeShxdWVyeSkpKQorICAgICk7CisKKyAgLyoqCisgICAqIFBlcmZvcm1zIGEgbGlnaHR3ZWlnaHQgc2VydmVyIHJvdW5kLXRyaXAgdG8gdmVyaWZ5IHRoZSBjdXJyZW50IGNvbm5lY3Rpb24gaXMgc3RpbGwgYWxpdmUuCisgICAqLworICBjb25zdCB2ZXJpZnlDb25uZWN0aW9uQWxpdmUgPSAoCisgICAgY29ubjogQ29ubmVjdGlvblN0YXRlCisgICk6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvcj4gPT4KKyAgICBwaXBlKAorICAgICAgRWZmZWN0LnRyeVByb21pc2UoKCkgPT4gY29ubi5nLmluamVjdCgxKS5uZXh0KCkpLAorICAgICAgRWZmZWN0LmFzVm9pZCwKKyAgICAgIEVmZmVjdC5tYXBFcnJvcihlcnJvciA9PiBFcnJvcnMuY29ubmVjdGlvbignQ29ubmVjdGlvbiBoZWFsdGggY2hlY2sgZmFpbGVkJywgZXJyb3IpKQorICAgICk7CisKKyAgLyoqCisgICAqIFJldHVybnMgY3VycmVudCBjb25uZWN0aW9uIHN0YXR1cyB3aXRob3V0IHRocm93aW5nLgorICAgKi8KKyAgY29uc3QgZ2V0U3RhdHVzOiBFZmZlY3QuRWZmZWN0PFNlcnZpY2VTdGF0dXMsIG5ldmVyPiA9IHBpcGUoCisgICAgd2l0aFJlY29ubmVjdCgKKyAgICAgIHBpcGUoCisgICAgICAgIGdyZW1saW5DbGllbnQuZ2V0Q29ubmVjdGlvbiwKKyAgICAgICAgRWZmZWN0LmZsYXRNYXAoY29ubiA9PiB2ZXJpZnlDb25uZWN0aW9uQWxpdmUoY29ubikpLAorICAgICAgICBFZmZlY3QuYXMoeyBzdGF0dXM6ICdjb25uZWN0ZWQnIGFzIGNvbnN0IH0pCisgICAgICApCisgICAgKSwKKyAgICBFZmZlY3QuY2F0Y2hBbGwoKCkgPT4gRWZmZWN0LnN1Y2NlZWQoeyBzdGF0dXM6ICdkaXNjb25uZWN0ZWQnIGFzIGNvbnN0IH0pKQorICApOworCisgIGNvbnN0IGhlYWx0aENoZWNrOiBFZmZlY3QuRWZmZWN0PHsgaGVhbHRoeTogYm9vbGVhbjsgZGV0YWlsczogc3RyaW5nIH0sIG5ldmVyPiA9IHBpcGUoCisgICAgd2l0aFJlY29ubmVjdCgKKyAgICAgIHBpcGUoCisgICAgICAgIGdyZW1saW5DbGllbnQuZ2V0Q29ubmVjdGlvbiwKKyAgICAgICAgRWZmZWN0LmZsYXRNYXAoY29ubiA9PiB2ZXJpZnlDb25uZWN0aW9uQWxpdmUoY29ubikpLAorICAgICAgICBFZmZlY3QuYXMoeyBoZWFsdGh5OiB0cnVlLCBkZXRhaWxzOiAnQ29ubmVjdGVkJyB9KQorICAgICAgKQorICAgICksCisgICAgRWZmZWN0LmNhdGNoQWxsKCgpID0+IEVmZmVjdC5zdWNjZWVkKHsgaGVhbHRoeTogZmFsc2UsIGRldGFpbHM6ICdDb25uZWN0aW9uIHVuYXZhaWxhYmxlJyB9KSkKKyAgKTsKKworICByZXR1cm4geworICAgIGdldFN0YXR1cywKKyAgICBnZXRTY2hlbWE6IHdpdGhSZWNvbm5lY3Qoc2NoZW1hU2VydmljZS5nZXRTY2hlbWEpLAorICAgIGdldENhY2hlZFNjaGVtYTogc2NoZW1hU2VydmljZS5wZWVrU2NoZW1hLAorICAgIHJlZnJlc2hTY2hlbWFDYWNoZTogd2l0aFJlY29ubmVjdChzY2hlbWFTZXJ2aWNlLnJlZnJlc2hTY2hlbWEpLAorICAgIGV4ZWN1dGVRdWVyeSwKKyAgICBoZWFsdGhDaGVjaywKKyAgfSBhcyBjb25zdDsKK30pOworCisvKioKKyAqIENyZWF0ZXMgYSBsYXllciBwcm92aWRpbmcgdGhlIEdyZW1saW4gc2VydmljZSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBEZXBlbmRzIG9uIGBHcmVtbGluQ2xpZW50YCBhbmQgYFNjaGVtYVNlcnZpY2VgLgorICovCitleHBvcnQgY29uc3QgR3JlbWxpblNlcnZpY2VMaXZlID0gTGF5ZXIuZWZmZWN0KEdyZW1saW5TZXJ2aWNlLCBtYWtlR3JlbWxpblNlcnZpY2UpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvZ3JlbWxpbi90eXBlcy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vdHlwZXMudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlYjFiMQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2dyZW1saW4vdHlwZXMudHMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIFNoYXJlZCB0eXBlcyBhbmQgaW50ZXJmYWNlcyBmb3IgR3JlbWxpbiBzZXJ2aWNlIG1vZHVsZXMKKyAqLworCitpbXBvcnQgeyBkcml2ZXIsIHByb2Nlc3MgfSBmcm9tICdncmVtbGluJzsKK2ltcG9ydCB0eXBlIHsgR3JhcGhTY2hlbWEgfSBmcm9tICcuL21vZGVscy9pbmRleC5qcyc7CisKK2V4cG9ydCB0eXBlIHsgR3JhcGhTY2hlbWEgfTsKKworZXhwb3J0IHR5cGUgR3JlbWxpbkNsaWVudFR5cGUgPSBJbnN0YW5jZVR5cGU8KHR5cGVvZiBkcml2ZXIpWydDbGllbnQnXT47CitleHBvcnQgdHlwZSBHcmVtbGluUmVzdWx0U2V0ID0gSW5zdGFuY2VUeXBlPCh0eXBlb2YgZHJpdmVyKVsnUmVzdWx0U2V0J10+OworZXhwb3J0IHR5cGUgR3JlbWxpbkNvbm5lY3Rpb24gPSBJbnN0YW5jZVR5cGU8KHR5cGVvZiBkcml2ZXIpWydEcml2ZXJSZW1vdGVDb25uZWN0aW9uJ10+OworZXhwb3J0IHR5cGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgPSBJbnN0YW5jZVR5cGU8KHR5cGVvZiBwcm9jZXNzKVsnR3JhcGhUcmF2ZXJzYWxTb3VyY2UnXT47CisKKy8qKgorICogQWN0aXZlIEdyZW1saW4gY29ubmVjdGlvbiBzdGF0ZS4gT25seSBjcmVhdGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gc3VjY2VlZHMuCisgKi8KK2V4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblN0YXRlIHsKKyAgcmVhZG9ubHkgY2xpZW50OiBHcmVtbGluQ2xpZW50VHlwZTsKKyAgcmVhZG9ubHkgY29ubmVjdGlvbjogR3JlbWxpbkNvbm5lY3Rpb247CisgIHJlYWRvbmx5IGc6IEdyYXBoVHJhdmVyc2FsU291cmNlOworICByZWFkb25seSBsYXN0VXNlZDogbnVtYmVyOworfQorCisvKioKKyAqIENvbmZpZ3VyYXRpb24gZm9yIHNjaGVtYSBnZW5lcmF0aW9uCisgKi8KK2V4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQ29uZmlnIHsKKyAgaW5jbHVkZVNhbXBsZVZhbHVlczogYm9vbGVhbjsKKyAgbWF4RW51bVZhbHVlczogbnVtYmVyOworICBpbmNsdWRlQ291bnRzOiBib29sZWFuOworICBlbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQ6IG51bWJlcjsKKyAgZW51bVByb3BlcnR5RGVueUxpc3Q6IHN0cmluZ1tdOworICB0aW1lb3V0TXM/OiBudW1iZXI7CisgIGJhdGNoU2l6ZT86IG51bWJlcjsKK30KKworLyoqCisgKiBTY2hlbWEgY2FjaGUgZW50cnkKKyAqLworZXhwb3J0IGludGVyZmFjZSBTY2hlbWFDYWNoZUVudHJ5IHsKKyAgc2NoZW1hOiBHcmFwaFNjaGVtYTsKKyAgdGltZXN0YW1wOiBudW1iZXI7Cit9CisKKy8qKgorICogR3JlbWxpbiBzZXJ2aWNlIHN0YXR1cyBpbmZvcm1hdGlvbgorICovCitleHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VTdGF0dXMgeworICAvKiogT3ZlcmFsbCBjb25uZWN0aW9uIHN0YXR1cyAqLworICBzdGF0dXM6ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCcgfCAnZXJyb3InOworfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvaGFuZGxlcnMvcmVzb3VyY2VzLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvaGFuZGxlcnMvcmVzb3VyY2VzLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZDM3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9oYW5kbGVycy9yZXNvdXJjZXMudHMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IE1DUCByZXNvdXJjZSBoYW5kbGVycyBmb3IgZ3JhcGggZGF0YWJhc2UgaW5mb3JtYXRpb24uCisgKgorICogUHJvdmlkZXMgTUNQIHJlc291cmNlcyB0aGF0IGV4cG9zZSByZWFsLXRpbWUgZ3JhcGggZGF0YWJhc2Ugc3RhdHVzIGFuZCBzY2hlbWEKKyAqIGluZm9ybWF0aW9uLiBSZXNvdXJjZXMgYXJlIGFsd2F5cyByZWdpc3RlcmVkOyB3aGVuIG5vIGVuZHBvaW50IGlzIGNvbmZpZ3VyZWQKKyAqIHRoZXkgcmV0dXJuIGEgImRpc2Nvbm5lY3RlZCAtIGNvbmZpZ3VyZSBhbiBlbmRwb2ludCIgbWVzc2FnZS4KKyAqLworCitpbXBvcnQgeyBFZmZlY3QsIHBpcGUsIFJ1bnRpbWUsIE9wdGlvbiB9IGZyb20gJ2VmZmVjdCc7CitpbXBvcnQgdHlwZSB7IE1jcFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL21jcC5qcyc7CitpbXBvcnQgeyBSRVNPVVJDRV9VUklTLCBNSU1FX1RZUEVTIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJzsKK2ltcG9ydCB7IEdyZW1saW5TZXJ2aWNlIH0gZnJvbSAnLi4vZ3JlbWxpbi9zZXJ2aWNlLmpzJzsKK2ltcG9ydCB0eXBlIHsgQXBwQ29uZmlnVHlwZSB9IGZyb20gJy4uL2NvbmZpZy5qcyc7CisKK2NvbnN0IE9GRkxJTkVfU1RBVFVTID0gJ2Rpc2Nvbm5lY3RlZCAtIGNvbmZpZ3VyZSBhbiBlbmRwb2ludCc7Citjb25zdCBPRkZMSU5FX1NDSEVNQSA9IEpTT04uc3RyaW5naWZ5KAorICB7CisgICAgc3RhdHVzOiAnZGlzY29ubmVjdGVkJywKKyAgICBtZXNzYWdlOiAnQ29uZmlndXJlIGBHUkVNTElOX01DUF9FTkRQT0lOVGAgdG8gZW5hYmxlIGdyYXBoIG9wZXJhdGlvbnMuJywKKyAgfSwKKyAgbnVsbCwKKyAgMgorKTsKKworLyoqCisgKiBSZWdpc3RlcnMgTUNQIHJlc291cmNlIGhhbmRsZXJzIHdpdGggdGhlIHNlcnZlci4KKyAqCisgKiBCb3RoIHJlc291cmNlcyBhcmUgYWx3YXlzIHJlZ2lzdGVyZWQuIFdoZW4gbm8gZW5kcG9pbnQgaXMgY29uZmlndXJlZCB0aGUKKyAqIHJlc3BvbnNlcyBjb250YWluIGEgc3RhdGljICJkaXNjb25uZWN0ZWQiIG1lc3NhZ2U7IG90aGVyd2lzZSB0aGUgbGl2ZQorICogR3JlbWxpbiBzZXJ2aWNlIGlzIHF1ZXJpZWQuCisgKgorICogQHBhcmFtIHNlcnZlciAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2UKKyAqIEBwYXJhbSBydW50aW1lIC0gRWZmZWN0IHJ1bnRpbWUgd2l0aCBHcmVtbGluIHNlcnZpY2UKKyAqIEBwYXJhbSBjb25maWcgLSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uCisgKi8KK2V4cG9ydCBmdW5jdGlvbiByZWdpc3RlckVmZmVjdFJlc291cmNlSGFuZGxlcnMoCisgIHNlcnZlcjogTWNwU2VydmVyLAorICBydW50aW1lOiBSdW50aW1lLlJ1bnRpbWU8R3JlbWxpblNlcnZpY2U+LAorICBjb25maWc6IEFwcENvbmZpZ1R5cGUKKyk6IHZvaWQgeworICBjb25zdCBlbmRwb2ludEZyb21FbnYgPSBwcm9jZXNzLmVudlsnR1JFTUxJTl9NQ1BfRU5EUE9JTlQnXSA/PyAnJzsKKyAgY29uc3QgZW5kcG9pbnRJc0NvbmZpZ3VyZWRJbkVudiA9IGVuZHBvaW50RnJvbUVudi50cmltKCkgIT09ICcnOworICBjb25zdCBoYXNFbmRwb2ludCA9IGVuZHBvaW50SXNDb25maWd1cmVkSW5FbnYgJiYgT3B0aW9uLmlzU29tZShjb25maWcuZ3JlbWxpbi5lbmRwb2ludCk7CisKKyAgLy8gUmVnaXN0ZXIgc3RhdHVzIHJlc291cmNlCisgIHNlcnZlci5yZWdpc3RlclJlc291cmNlKAorICAgICdzdGF0dXMnLAorICAgIFJFU09VUkNFX1VSSVMuU1RBVFVTLAorICAgIHsKKyAgICAgIHRpdGxlOiAnR3JlbWxpbiBHcmFwaCBTdGF0dXMnLAorICAgICAgZGVzY3JpcHRpb246ICdSZWFsLXRpbWUgY29ubmVjdGlvbiBzdGF0dXMgb2YgdGhlIEdyZW1saW4gZ3JhcGggZGF0YWJhc2UnLAorICAgICAgbWltZVR5cGU6IE1JTUVfVFlQRVMuVEVYVF9QTEFJTiwKKyAgICB9LAorICAgIChfdXJpLCBfZXh0cmEpID0+IHsKKyAgICAgIGlmICghaGFzRW5kcG9pbnQpIHsKKyAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7CisgICAgICAgICAgY29udGVudHM6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdXJpOiBSRVNPVVJDRV9VUklTLlNUQVRVUywKKyAgICAgICAgICAgICAgbWltZVR5cGU6IE1JTUVfVFlQRVMuVEVYVF9QTEFJTiwKKyAgICAgICAgICAgICAgdGV4dDogT0ZGTElORV9TVEFUVVMsCisgICAgICAgICAgICB9LAorICAgICAgICAgIF0sCisgICAgICAgIH0pOworICAgICAgfQorCisgICAgICByZXR1cm4gRWZmZWN0LnJ1blByb21pc2UoCisgICAgICAgIHBpcGUoCisgICAgICAgICAgR3JlbWxpblNlcnZpY2UsCisgICAgICAgICAgRWZmZWN0LmFuZFRoZW4oc2VydmljZSA9PiBzZXJ2aWNlLmdldFN0YXR1cyksCisgICAgICAgICAgRWZmZWN0Lm1hcChzdGF0dXNPYmogPT4gc3RhdHVzT2JqLnN0YXR1cyksCisgICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKGVycm9yID0+IEVmZmVjdC5zdWNjZWVkKFN0cmluZyhlcnJvcikpKSwKKyAgICAgICAgICBFZmZlY3QucHJvdmlkZShydW50aW1lKQorICAgICAgICApCisgICAgICApLnRoZW4ocmVzdWx0ID0+ICh7CisgICAgICAgIGNvbnRlbnRzOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgdXJpOiBSRVNPVVJDRV9VUklTLlNUQVRVUywKKyAgICAgICAgICAgIG1pbWVUeXBlOiBNSU1FX1RZUEVTLlRFWFRfUExBSU4sCisgICAgICAgICAgICB0ZXh0OiByZXN1bHQsCisgICAgICAgICAgfSwKKyAgICAgICAgXSwKKyAgICAgIH0pKTsKKyAgICB9CisgICk7CisKKyAgLy8gUmVnaXN0ZXIgc2NoZW1hIHJlc291cmNlCisgIHNlcnZlci5yZWdpc3RlclJlc291cmNlKAorICAgICdzY2hlbWEnLAorICAgIFJFU09VUkNFX1VSSVMuU0NIRU1BLAorICAgIHsKKyAgICAgIHRpdGxlOiAnR3JlbWxpbiBHcmFwaCBTY2hlbWEnLAorICAgICAgZGVzY3JpcHRpb246CisgICAgICAgICdDb21wbGV0ZSBzY2hlbWEgb2YgdGhlIGdyYXBoIGluY2x1ZGluZyB2ZXJ0ZXggbGFiZWxzLCBlZGdlIGxhYmVscywgYW5kIHJlbGF0aW9uc2hpcCBwYXR0ZXJucycsCisgICAgICBtaW1lVHlwZTogTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9KU09OLAorICAgIH0sCisgICAgKF91cmksIF9leHRyYSkgPT4geworICAgICAgaWYgKCFoYXNFbmRwb2ludCkgeworICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsKKyAgICAgICAgICBjb250ZW50czogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICB1cmk6IFJFU09VUkNFX1VSSVMuU0NIRU1BLAorICAgICAgICAgICAgICBtaW1lVHlwZTogTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9KU09OLAorICAgICAgICAgICAgICB0ZXh0OiBPRkZMSU5FX1NDSEVNQSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgXSwKKyAgICAgICAgfSk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBFZmZlY3QucnVuUHJvbWlzZSgKKyAgICAgICAgcGlwZSgKKyAgICAgICAgICBHcmVtbGluU2VydmljZSwKKyAgICAgICAgICBFZmZlY3QuYW5kVGhlbihzZXJ2aWNlID0+IHNlcnZpY2UuZ2V0U2NoZW1hKSwKKyAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoZXJyb3IgPT4KKyAgICAgICAgICAgIEVmZmVjdC5zdWNjZWVkKHsgc3RhdHVzOiAnZGlzY29ubmVjdGVkJywgbWVzc2FnZTogU3RyaW5nKGVycm9yKSB9KQorICAgICAgICAgICksCisgICAgICAgICAgRWZmZWN0LnByb3ZpZGUocnVudGltZSkKKyAgICAgICAgKQorICAgICAgKS50aGVuKHJlc3VsdCA9PiAoeworICAgICAgICBjb250ZW50czogWworICAgICAgICAgIHsKKyAgICAgICAgICAgIHVyaTogUkVTT1VSQ0VfVVJJUy5TQ0hFTUEsCisgICAgICAgICAgICBtaW1lVHlwZTogTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9KU09OLAorICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSwKKyAgICAgICAgICB9LAorICAgICAgICBdLAorICAgICAgfSkpOworICAgIH0KKyAgKTsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2hhbmRsZXJzL3Rvb2wtcGF0dGVybnMudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9oYW5kbGVycy90b29sLXBhdHRlcm5zLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9oYW5kbGVycy90b29sLXBhdHRlcm5zLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9oYW5kbGVycy90b29sLXBhdHRlcm5zLnRzCmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9oYW5kbGVycy90b29scy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL2hhbmRsZXJzL3Rvb2xzLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjQyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy9oYW5kbGVycy90b29scy50cwpAQCAtMCwwICsxLDQxNiBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgTUNQIHRvb2wgaGFuZGxlcnMgZm9yIEdyZW1saW4gZ3JhcGggZGF0YWJhc2Ugb3BlcmF0aW9ucy4KKyAqCisgKiBSZWdpc3RlcnMgTUNQIHRvb2xzIHRoYXQgZXhwb3NlIEdyZW1saW4gZnVuY3Rpb25hbGl0eSBpbmNsdWRpbmcgc3RhdHVzIGNoZWNrcywKKyAqIHNjaGVtYSBpbnRyb3NwZWN0aW9uLCBhbmQgcXVlcnkgZXhlY3V0aW9uLiBVc2VzIEVmZmVjdC1iYXNlZCBkZXBlbmRlbmN5IGluamVjdGlvbgorICogZm9yIHNlcnZpY2UgYWNjZXNzLgorICovCisKK2ltcG9ydCB7IEVmZmVjdCwgUnVudGltZSwgT3B0aW9uLCBwaXBlIH0gZnJvbSAnZWZmZWN0JzsKK2ltcG9ydCB0eXBlIHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJzsKK2ltcG9ydCB7IHogfSBmcm9tICd6b2QnOworaW1wb3J0IHsgVE9PTF9OQU1FUyB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7CitpbXBvcnQgeyBHcmVtbGluU2VydmljZSB9IGZyb20gJy4uL2dyZW1saW4vc2VydmljZS5qcyc7CitpbXBvcnQgeworICBjcmVhdGVUb29sRWZmZWN0LAorICBjcmVhdGVTdHJpbmdUb29sRWZmZWN0LAorICBjcmVhdGVTdWNjZXNzUmVzcG9uc2UsCit9IGZyb20gJy4vdG9vbC1wYXR0ZXJucy5qcyc7CitpbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJ2dyZW1saW50JzsKK2ltcG9ydCB7IEdyZW1saW5UcmFuc2xhdG9yIH0gZnJvbSAnZ3JlbWxpbi9sYW5ndWFnZSc7CitpbXBvcnQgeyBub3JtYWxpemVBbmRUcmFuc2xhdGUgfSBmcm9tICcuLi90cmFuc2xhdG9yL2luZGV4LmpzJzsKK2ltcG9ydCB0eXBlIHsgQXBwQ29uZmlnVHlwZSB9IGZyb20gJy4uL2NvbmZpZy5qcyc7CitpbXBvcnQgeworICBtYXJrR3JlbWxpbkNvbm5lY3RlZCwKKyAgbWFya0dyZW1saW5EaXNjb25uZWN0ZWQsCisgIGlzR3JlbWxpbkNvbm5lY3Rpb25FcnJvciwKK30gZnJvbSAnLi4vY29ubmVjdGl2aXR5LXN0YXRlLmpzJzsKKworLyoqCisgKiBJbnB1dCB2YWxpZGF0aW9uIHNjaGVtYXMgZm9yIHRvb2wgcGFyYW1ldGVycy4KKyAqLworCisvLyBQYXJhbWV0ZXJsZXNzIHRvb2xzOiBzdHJpY3QgZW1wdHkgb2JqZWN0Citjb25zdCBlbXB0eUlucHV0U2NoZW1hID0gei5vYmplY3Qoe30pLnN0cmljdCgpOworCisvLyBSdW4gR3JlbWxpbiBRdWVyeSBpbnB1dAorY29uc3QgcnVuUXVlcnlJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHsKKyAgcXVlcnk6IHoKKyAgICAuc3RyaW5nKCkKKyAgICAubWluKDEsICdUaGUgR3JlbWxpbiBxdWVyeSBjYW5ub3QgYmUgZW1wdHknKQorICAgIC5tYXgoMTAwMDAsICdUaGUgR3JlbWxpbiBxdWVyeSBjYW5ub3QgZXhjZWVkIDEwLDAwMCBjaGFyYWN0ZXJzJykKKyAgICAucmVmaW5lKHEgPT4gcS50cmltKCkuc3RhcnRzV2l0aCgnZy4nKSwgeworICAgICAgbWVzc2FnZTogJ1RoZSBHcmVtbGluIHF1ZXJ5IG11c3Qgc3RhcnQgd2l0aCAiZy4iJywKKyAgICB9KQorICAgIC5kZXNjcmliZSgnVGhlIEdyZW1saW4gcXVlcnkgdG8gZXhlY3V0ZScpLAorfSk7CisKKy8vIEZvcm1hdCBHcmVtbGluIFF1ZXJ5IGlucHV0IC0gYWxsb3cgYW55IHN0cmluZyBhbmQgZXhwb3NlIGdyZW1saW50IG9wdGlvbnMgYXMgdG9wLWxldmVsIG9wdGlvbmFsIGZpZWxkcworY29uc3QgZm9ybWF0UXVlcnlJbnB1dFNjaGVtYSA9IHoKKyAgLm9iamVjdCh7CisgICAgcXVlcnk6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1RoZSBHcmVtbGluIHF1ZXJ5IChvciBhbnkgc3RyaW5nKSB0byBmb3JtYXQnKSwKKyAgICAvLyBFeHBvc2UgZ3JlbWxpbnQgb3B0aW9ucyBhcyBvcHRpb25hbCB0b3AtbGV2ZWwgZmllbGRzCisgICAgaW5kZW50YXRpb246IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKS5vcHRpb25hbCgpLAorICAgIG1heExpbmVMZW5ndGg6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLAorICAgIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrczogei5ib29sZWFuKCkub3B0aW9uYWwoKSwKKyAgfSkKKyAgLnN0cmljdCgpOworCisvLyBUcmFuc2xhdGUgR3JlbWxpbiBRdWVyeSBpbnB1dAorY29uc3QgVFJBTlNMQVRFX1RBUkdFVFMgPSBbCisgICdjYW5vbmljYWwnLAorICAnamF2YXNjcmlwdCcsCisgICdweXRob24nLAorICAnZ28nLAorICAnZG90bmV0JywKKyAgJ2phdmEnLAorICAnZ3Jvb3Z5JywKKyAgJ2Fub255bWl6ZWQnLAorXSBhcyBjb25zdDsKK3R5cGUgVHJhbnNsYXRlVGFyZ2V0ID0gKHR5cGVvZiBUUkFOU0xBVEVfVEFSR0VUUylbbnVtYmVyXTsKKworY29uc3QgdG9Vbmtub3duUmVjb3JkID0gKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsID0+CisgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgPyAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIDogbnVsbDsKKworY29uc3QgVEFSR0VUX1RPX1RSQU5TTEFUT1JfS0VZOiBSZWNvcmQ8VHJhbnNsYXRlVGFyZ2V0LCBzdHJpbmc+ID0geworICBjYW5vbmljYWw6ICdDQU5PTklDQUwnLAorICBqYXZhc2NyaXB0OiAnSkFWQVNDUklQVCcsCisgIHB5dGhvbjogJ1BZVEhPTicsCisgIGdvOiAnR08nLAorICBkb3RuZXQ6ICdET1RORVQnLAorICBqYXZhOiAnSkFWQScsCisgIGdyb292eTogJ0dST09WWScsCisgIGFub255bWl6ZWQ6ICdBTk9OWU1JWkVEJywKK307CisKK2NvbnN0IFRSQU5TTEFURV9TT1VSQ0VTID0gWworICAnY2Fub25pY2FsJywKKyAgJ2phdmFzY3JpcHQnLAorICAncHl0aG9uJywKKyAgJ2dvJywKKyAgJ2RvdG5ldCcsCisgICdqYXZhJywKKyAgJ2dyb292eScsCisgICdhdXRvJywKK10gYXMgY29uc3Q7CisKK2NvbnN0IHRyYW5zbGF0ZVF1ZXJ5SW5wdXRTY2hlbWEgPSB6CisgIC5vYmplY3QoeworICAgIGdyZW1saW46IHoKKyAgICAgIC5zdHJpbmcoKQorICAgICAgLm1pbigxLCAnVGhlIEdyZW1saW4gcXVlcnkgY2Fubm90IGJlIGVtcHR5JykKKyAgICAgIC5kZXNjcmliZSgKKyAgICAgICAgJ1RoZSBHcmVtbGluIHF1ZXJ5IHN0cmluZyB0byB0cmFuc2xhdGUuIFdoZW4gc291cmNlIGlzIG9taXR0ZWQgb3IgImNhbm9uaWNhbCIsIG11c3QgdXNlIGNhbm9uaWNhbCBHcmVtbGluIEFOVExSIGdyYW1tYXIgZm9ybWF0LiBGb3IgYW55IG90aGVyIHNvdXJjZSB2YWx1ZSwgdGhlIHF1ZXJ5IHdpbGwgYmUgbm9ybWFsaXplZCBhdXRvbWF0aWNhbGx5LicKKyAgICAgICksCisgICAgdGFyZ2V0OiB6LmVudW0oVFJBTlNMQVRFX1RBUkdFVFMpLmRlc2NyaWJlKCdUaGUgdGFyZ2V0IGxhbmd1YWdlIHRvIHRyYW5zbGF0ZSBpbnRvJyksCisgICAgc291cmNlOiB6CisgICAgICAuZW51bShUUkFOU0xBVEVfU09VUkNFUykKKyAgICAgIC5vcHRpb25hbCgpCisgICAgICAuZGVzY3JpYmUoCisgICAgICAgICdUaGUgc291cmNlIGRpYWxlY3Qgb2YgdGhlIGlucHV0IHF1ZXJ5LiBPbWl0IG9yIHVzZSAiYXV0byIgdG8gbm9ybWFsaXplIGF1dG9tYXRpY2FsbHkgdmlhIExMTSBiZWZvcmUgdHJhbnNsYXRpbmcgKGRlZmF1bHQgYmVoYXZpb3IpLiBVc2UgImNhbm9uaWNhbCIgdG8gc2tpcCBub3JtYWxpemF0aW9uIGFuZCB0cmFuc2xhdGUgZGlyZWN0bHkgKG9ubHkgaWYgeW91ciBpbnB1dCBpcyBhbHJlYWR5IGluIGNhbm9uaWNhbCBHcmVtbGluIEFOVExSIGdyYW1tYXIgZm9ybWF0KS4nCisgICAgICApLAorICAgIHRyYXZlcnNhbFNvdXJjZTogegorICAgICAgLnN0cmluZygpCisgICAgICAub3B0aW9uYWwoKQorICAgICAgLmRlc2NyaWJlKCdUaGUgdHJhdmVyc2FsIHNvdXJjZSB2YXJpYWJsZSBuYW1lIChkZWZhdWx0OiAiZyIpJyksCisgIH0pCisgIC5zdHJpY3QoKTsKKworLyoqCisgKiBSZWdpc3RlcnMgTUNQIHRvb2wgaGFuZGxlcnMgd2l0aCB0aGUgc2VydmVyLgorICoKKyAqIEdyYXBoIHRvb2xzIChzdGF0dXMsIHNjaGVtYSwgcXVlcnkpIGFyZSBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBhIEdyZW1saW4gZW5kcG9pbnQgaXMgY29uZmlndXJlZC4gVXRpbGl0eSB0b29scyAodHJhbnNsYXRlLCBmb3JtYXQpIGFyZSBhbHdheXMgcmVnaXN0ZXJlZC4KKyAqCisgKiBAcGFyYW0gc2VydmVyIC0gTUNQIHNlcnZlciBpbnN0YW5jZQorICogQHBhcmFtIHJ1bnRpbWUgLSBFZmZlY3QgcnVudGltZSB3aXRoIEdyZW1saW4gc2VydmljZQorICogQHBhcmFtIGNvbmZpZyAtIEFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24KKyAqLworZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRWZmZWN0VG9vbEhhbmRsZXJzKAorICBzZXJ2ZXI6IE1jcFNlcnZlciwKKyAgcnVudGltZTogUnVudGltZS5SdW50aW1lPEdyZW1saW5TZXJ2aWNlPiwKKyAgY29uZmlnOiBBcHBDb25maWdUeXBlCispOiB2b2lkIHsKKyAgaWYgKE9wdGlvbi5pc1NvbWUoY29uZmlnLmdyZW1saW4uZW5kcG9pbnQpKSB7CisgICAgcmVnaXN0ZXJHcmFwaFRvb2xzKHNlcnZlciwgcnVudGltZSk7CisgIH0KKyAgcmVnaXN0ZXJVdGlsaXR5VG9vbHMoc2VydmVyLCBydW50aW1lKTsKK30KKworLyoqCisgKiBSZWdpc3RlcnMgZ3JhcGgtY29ubmVjdGl2aXR5IHRvb2xzIChzdGF0dXMsIHNjaGVtYSwgcXVlcnkpLgorICogT25seSBjYWxsZWQgd2hlbiBhIEdyZW1saW4gZW5kcG9pbnQgaXMgY29uZmlndXJlZC4KKyAqLworZnVuY3Rpb24gcmVnaXN0ZXJHcmFwaFRvb2xzKHNlcnZlcjogTWNwU2VydmVyLCBydW50aW1lOiBSdW50aW1lLlJ1bnRpbWU8R3JlbWxpblNlcnZpY2U+KTogdm9pZCB7CisgIGNvbnN0IHdpdGhPcGVyYXRpb25Db25uZWN0aXZpdHlUcmFja2luZyA9IDxBLCBFLCBSPihlZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj4pID0+CisgICAgcGlwZSgKKyAgICAgIGVmZmVjdCwKKyAgICAgIEVmZmVjdC50YXAoKCkgPT4gRWZmZWN0LnN5bmMobWFya0dyZW1saW5Db25uZWN0ZWQpKSwKKyAgICAgIEVmZmVjdC50YXBFcnJvcihlcnJvciA9PgorICAgICAgICBFZmZlY3Quc3luYygoKSA9PiB7CisgICAgICAgICAgaWYgKGlzR3JlbWxpbkNvbm5lY3Rpb25FcnJvcihlcnJvcikpIHsKKyAgICAgICAgICAgIG1hcmtHcmVtbGluRGlzY29ubmVjdGVkKCk7CisgICAgICAgICAgfQorICAgICAgICB9KQorICAgICAgKQorICAgICk7CisKKyAgY29uc3QgZ2V0VHJhY2tlZFN0YXR1cyA9IHBpcGUoCisgICAgR3JlbWxpblNlcnZpY2UsCisgICAgRWZmZWN0LmFuZFRoZW4oc2VydmljZSA9PiBzZXJ2aWNlLmdldFN0YXR1cyksCisgICAgRWZmZWN0LnRhcChzdGF0dXNPYmogPT4KKyAgICAgIEVmZmVjdC5zeW5jKCgpID0+IHsKKyAgICAgICAgaWYgKHN0YXR1c09iai5zdGF0dXMgPT09ICdjb25uZWN0ZWQnKSB7CisgICAgICAgICAgbWFya0dyZW1saW5Db25uZWN0ZWQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBtYXJrR3JlbWxpbkRpc2Nvbm5lY3RlZCgpOworICAgICAgICB9CisgICAgICB9KQorICAgICksCisgICAgRWZmZWN0Lm1hcChzdGF0dXNPYmogPT4gc3RhdHVzT2JqLnN0YXR1cykKKyAgKTsKKworICAvLyBHZXQgR3JhcGggU3RhdHVzCisgIHNlcnZlci5yZWdpc3RlclRvb2woCisgICAgVE9PTF9OQU1FUy5HRVRfR1JBUEhfU1RBVFVTLAorICAgIHsKKyAgICAgIHRpdGxlOiAnR2V0IEdyYXBoIFN0YXR1cycsCisgICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgY29ubmVjdGlvbiBzdGF0dXMgb2YgdGhlIEdyZW1saW4gZ3JhcGggZGF0YWJhc2UnLAorICAgICAgaW5wdXRTY2hlbWE6IGVtcHR5SW5wdXRTY2hlbWEuc2hhcGUsCisgICAgfSwKKyAgICAoKSA9PgorICAgICAgRWZmZWN0LnJ1blByb21pc2UoCisgICAgICAgIHBpcGUoCisgICAgICAgICAgY3JlYXRlU3RyaW5nVG9vbEVmZmVjdChnZXRUcmFja2VkU3RhdHVzLCAnQ29ubmVjdGlvbiBzdGF0dXMgY2hlY2sgZmFpbGVkJyksCisgICAgICAgICAgRWZmZWN0LnByb3ZpZGUocnVudGltZSkKKyAgICAgICAgKQorICAgICAgKQorICApOworCisgIC8vIEdldCBHcmFwaCBTY2hlbWEKKyAgc2VydmVyLnJlZ2lzdGVyVG9vbCgKKyAgICBUT09MX05BTUVTLkdFVF9HUkFQSF9TQ0hFTUEsCisgICAgeworICAgICAgdGl0bGU6ICdHZXQgR3JhcGggU2NoZW1hJywKKyAgICAgIGRlc2NyaXB0aW9uOgorICAgICAgICAnR2V0IHRoZSBjb21wbGV0ZSBzY2hlbWEgb2YgdGhlIGdyYXBoIGluY2x1ZGluZyB2ZXJ0ZXggbGFiZWxzLCBlZGdlIGxhYmVscywgYW5kIHJlbGF0aW9uc2hpcCBwYXR0ZXJucycsCisgICAgICBpbnB1dFNjaGVtYTogZW1wdHlJbnB1dFNjaGVtYS5zaGFwZSwKKyAgICB9LAorICAgICgpID0+CisgICAgICBFZmZlY3QucnVuUHJvbWlzZSgKKyAgICAgICAgcGlwZSgKKyAgICAgICAgICBjcmVhdGVUb29sRWZmZWN0KAorICAgICAgICAgICAgd2l0aE9wZXJhdGlvbkNvbm5lY3Rpdml0eVRyYWNraW5nKAorICAgICAgICAgICAgICBFZmZlY3QuYW5kVGhlbihHcmVtbGluU2VydmljZSwgc2VydmljZSA9PiBzZXJ2aWNlLmdldFNjaGVtYSkKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAnU2NoZW1hIHJldHJpZXZhbCBmYWlsZWQnCisgICAgICAgICAgKSwKKyAgICAgICAgICBFZmZlY3QucHJvdmlkZShydW50aW1lKQorICAgICAgICApCisgICAgICApCisgICk7CisKKyAgLy8gUmVmcmVzaCBTY2hlbWEgQ2FjaGUKKyAgc2VydmVyLnJlZ2lzdGVyVG9vbCgKKyAgICBUT09MX05BTUVTLlJFRlJFU0hfU0NIRU1BX0NBQ0hFLAorICAgIHsKKyAgICAgIHRpdGxlOiAnUmVmcmVzaCBTY2hlbWEgQ2FjaGUnLAorICAgICAgZGVzY3JpcHRpb246ICdGb3JjZSBhbiBpbW1lZGlhdGUgcmVmcmVzaCBvZiB0aGUgZ3JhcGggc2NoZW1hIGNhY2hlJywKKyAgICAgIGlucHV0U2NoZW1hOiBlbXB0eUlucHV0U2NoZW1hLnNoYXBlLAorICAgIH0sCisgICAgKCkgPT4KKyAgICAgIEVmZmVjdC5ydW5Qcm9taXNlKAorICAgICAgICBwaXBlKAorICAgICAgICAgIGNyZWF0ZVN0cmluZ1Rvb2xFZmZlY3QoCisgICAgICAgICAgICB3aXRoT3BlcmF0aW9uQ29ubmVjdGl2aXR5VHJhY2tpbmcoCisgICAgICAgICAgICAgIEVmZmVjdC5hbmRUaGVuKEdyZW1saW5TZXJ2aWNlLCBzZXJ2aWNlID0+CisgICAgICAgICAgICAgICAgRWZmZWN0Lm1hcChzZXJ2aWNlLnJlZnJlc2hTY2hlbWFDYWNoZSwgKCkgPT4gJ1NjaGVtYSBjYWNoZSByZWZyZXNoZWQgc3VjY2Vzc2Z1bGx5LicpCisgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAnRmFpbGVkIHRvIHJlZnJlc2ggc2NoZW1hJworICAgICAgICAgICksCisgICAgICAgICAgRWZmZWN0LnByb3ZpZGUocnVudGltZSkKKyAgICAgICAgKQorICAgICAgKQorICApOworCisgIC8vIFJ1biBHcmVtbGluIFF1ZXJ5CisgIHNlcnZlci5yZWdpc3RlclRvb2woCisgICAgVE9PTF9OQU1FUy5SVU5fR1JFTUxJTl9RVUVSWSwKKyAgICB7CisgICAgICB0aXRsZTogJ1J1biBHcmVtbGluIFF1ZXJ5JywKKyAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZSBhIEdyZW1saW4gdHJhdmVyc2FsIHF1ZXJ5IGFnYWluc3QgdGhlIGdyYXBoIGRhdGFiYXNlJywKKyAgICAgIGlucHV0U2NoZW1hOiBydW5RdWVyeUlucHV0U2NoZW1hLnNoYXBlLAorICAgIH0sCisgICAgKGFyZ3M6IHVua25vd24pID0+IHsKKyAgICAgIGNvbnN0IHsgcXVlcnkgfSA9IHJ1blF1ZXJ5SW5wdXRTY2hlbWEucGFyc2UoYXJncyk7CisgICAgICByZXR1cm4gRWZmZWN0LnJ1blByb21pc2UoCisgICAgICAgIHBpcGUoCisgICAgICAgICAgR3JlbWxpblNlcnZpY2UsCisgICAgICAgICAgRWZmZWN0LmFuZFRoZW4oc2VydmljZSA9PiB3aXRoT3BlcmF0aW9uQ29ubmVjdGl2aXR5VHJhY2tpbmcoc2VydmljZS5leGVjdXRlUXVlcnkocXVlcnkpKSksCisgICAgICAgICAgRWZmZWN0Lm1hcChjcmVhdGVTdWNjZXNzUmVzcG9uc2UpLAorICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbChlcnJvciA9PiB7CisgICAgICAgICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0geworICAgICAgICAgICAgICByZXN1bHRzOiBbXSwKKyAgICAgICAgICAgICAgbWVzc2FnZTogYFF1ZXJ5IGZhaWxlZDogJHtlcnJvcn1gLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBFZmZlY3Quc3VjY2VlZChjcmVhdGVTdWNjZXNzUmVzcG9uc2UoZXJyb3JSZXNwb25zZSkpOworICAgICAgICAgIH0pLAorICAgICAgICAgIEVmZmVjdC5wcm92aWRlKHJ1bnRpbWUpCisgICAgICAgICkKKyAgICAgICk7CisgICAgfQorICApOworfQorCisvKioKKyAqIFJlZ2lzdGVycyB1dGlsaXR5IHRvb2xzICh0cmFuc2xhdGUsIGZvcm1hdCkgdGhhdCBkbyBub3QgcmVxdWlyZSBhIEdyZW1saW4gc2VydmVyLgorICogQWx3YXlzIHJlZ2lzdGVyZWQgcmVnYXJkbGVzcyBvZiBlbmRwb2ludCBjb25maWd1cmF0aW9uLgorICovCitmdW5jdGlvbiByZWdpc3RlclV0aWxpdHlUb29scyhzZXJ2ZXI6IE1jcFNlcnZlciwgcnVudGltZTogUnVudGltZS5SdW50aW1lPEdyZW1saW5TZXJ2aWNlPik6IHZvaWQgeworICAvLyBUcmFuc2xhdGUgR3JlbWxpbiBRdWVyeQorICBzZXJ2ZXIucmVnaXN0ZXJUb29sKAorICAgIFRPT0xfTkFNRVMuVFJBTlNMQVRFX0dSRU1MSU5fUVVFUlksCisgICAgeworICAgICAgdGl0bGU6ICdUcmFuc2xhdGUgR3JlbWxpbiBRdWVyeScsCisgICAgICBkZXNjcmlwdGlvbjoKKyAgICAgICAgJ1RyYW5zbGF0ZSBhIEdyZW1saW4gcXVlcnkgaW50byBhbm90aGVyIGxhbmd1YWdlIHZhcmlhbnQuIEJ5IGRlZmF1bHQsIGF1dG9tYXRpY2FsbHkgbm9ybWFsaXplcyB0aGUgaW5wdXQgdmlhIExMTSBiZWZvcmUgdHJhbnNsYXRpbmcuIFNldCBzb3VyY2UgdG8gImNhbm9uaWNhbCIgdG8gc2tpcCBub3JtYWxpemF0aW9uIGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGluIGNhbm9uaWNhbCBHcmVtbGluIEFOVExSIGdyYW1tYXIgZm9ybWF0LicsCisgICAgICBpbnB1dFNjaGVtYTogdHJhbnNsYXRlUXVlcnlJbnB1dFNjaGVtYS5zaGFwZSwKKyAgICB9LAorICAgIChhcmdzOiB1bmtub3duKSA9PiB7CisgICAgICBjb25zdCB7IGdyZW1saW4sIHRhcmdldCwgc291cmNlLCB0cmF2ZXJzYWxTb3VyY2UgfSA9IHRyYW5zbGF0ZVF1ZXJ5SW5wdXRTY2hlbWEucGFyc2UoYXJncyk7CisgICAgICBjb25zdCB0cmFuc2xhdG9yS2V5ID0gVEFSR0VUX1RPX1RSQU5TTEFUT1JfS0VZW3RhcmdldF07CisgICAgICBjb25zdCB0c291cmNlID0gdHJhdmVyc2FsU291cmNlID8/ICdnJzsKKworICAgICAgaWYgKHNvdXJjZSA9PT0gJ2Nhbm9uaWNhbCcpIHsKKyAgICAgICAgLy8gQXBwcm9hY2ggMTogZGlyZWN0IHRyYW5zbGF0aW9uLCBjYW5vbmljYWwgaW5wdXQgYXNzdW1lZAorICAgICAgICB0cnkgeworICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgKKyAgICAgICAgICAgIGdyZW1saW4sCisgICAgICAgICAgICB0c291cmNlLAorICAgICAgICAgICAgdHJhbnNsYXRvcktleSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGU+WzJdCisgICAgICAgICAgKTsKKyAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKAorICAgICAgICAgICAgY3JlYXRlU3VjY2Vzc1Jlc3BvbnNlKHsKKyAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZSwKKyAgICAgICAgICAgICAgb3JpZ2luYWw6IHJlc3VsdC5nZXRPcmlnaW5hbCgpLAorICAgICAgICAgICAgICB0cmFuc2xhdGVkOiByZXN1bHQuZ2V0VHJhbnNsYXRlZCgpLAorICAgICAgICAgICAgICB0YXJnZXQsCisgICAgICAgICAgICB9KQorICAgICAgICAgICk7CisgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgKKyAgICAgICAgICAgIGNyZWF0ZVN1Y2Nlc3NSZXNwb25zZSh7CisgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLAorICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLAorICAgICAgICAgICAgICB0YXJnZXQsCisgICAgICAgICAgICB9KQorICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gQXBwcm9hY2ggMis1OiBtZWNoYW5pY2FsIG5vcm1hbGl6YXRpb24gdGhlbiBMTE0gbm9ybWFsaXphdGlvbiB2aWEgTUNQIHNhbXBsaW5nCisgICAgICByZXR1cm4gRWZmZWN0LnJ1blByb21pc2UoCisgICAgICAgIHBpcGUoCisgICAgICAgICAgRWZmZWN0LnRyeVByb21pc2UoKCkgPT4KKyAgICAgICAgICAgIG5vcm1hbGl6ZUFuZFRyYW5zbGF0ZShncmVtbGluLCB0cmFuc2xhdG9yS2V5LCB0c291cmNlLCBzZXJ2ZXIuc2VydmVyKQorICAgICAgICAgICksCisgICAgICAgICAgRWZmZWN0Lm1hcChyZXN1bHQgPT4KKyAgICAgICAgICAgIGNyZWF0ZVN1Y2Nlc3NSZXNwb25zZSh7CisgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsCisgICAgICAgICAgICAgIG9yaWdpbmFsOiByZXN1bHQub3JpZ2luYWwsCisgICAgICAgICAgICAgIG5vcm1hbGl6ZWQ6IHJlc3VsdC5ub3JtYWxpemVkLAorICAgICAgICAgICAgICB0cmFuc2xhdGVkOiByZXN1bHQudHJhbnNsYXRlZCwKKyAgICAgICAgICAgICAgdGFyZ2V0LAorICAgICAgICAgICAgICAuLi4ocmVzdWx0LmxsbU5vcm1hbGl6YXRpb25Ta2lwcGVkICYmIHsKKyAgICAgICAgICAgICAgICB3YXJuaW5nOgorICAgICAgICAgICAgICAgICAgJ0xMTSBub3JtYWxpemF0aW9uIHVuYXZhaWxhYmxlOyByZXN1bHQgaXMgYmFzZWQgb24gbWVjaGFuaWNhbCBub3JtYWxpemF0aW9uIG9ubHkgYW5kIG1heSBiZSBsZXNzIGFjY3VyYXRlLicsCisgICAgICAgICAgICAgIH0pLAorICAgICAgICAgICAgfSkKKyAgICAgICAgICApLAorICAgICAgICAgIEVmZmVjdC5jYXRjaEFsbChlcnJvciA9PgorICAgICAgICAgICAgRWZmZWN0LnN1Y2NlZWQoCisgICAgICAgICAgICAgIGNyZWF0ZVN1Y2Nlc3NSZXNwb25zZSh7CisgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsCisgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgICAgICB0YXJnZXQsCisgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApOworICAgIH0KKyAgKTsKKworICAvLyBGb3JtYXQgR3JlbWxpbiBRdWVyeSAodXNlcyBsb2NhbCBncmVtbGludCkKKyAgc2VydmVyLnJlZ2lzdGVyVG9vbCgKKyAgICBUT09MX05BTUVTLkZPUk1BVF9HUkVNTElOX1FVRVJZLAorICAgIHsKKyAgICAgIHRpdGxlOiAnRm9ybWF0IEdyZW1saW4gUXVlcnknLAorICAgICAgZGVzY3JpcHRpb246ICdGb3JtYXQgYSBHcmVtbGluIHF1ZXJ5IHVzaW5nIEdyZW1saW50IGFuZCByZXR1cm4gYSBzdHJ1Y3R1cmVkIHJlc3VsdCcsCisgICAgICBpbnB1dFNjaGVtYTogZm9ybWF0UXVlcnlJbnB1dFNjaGVtYS5zaGFwZSwKKyAgICB9LAorICAgIChhcmdzOiB1bmtub3duKSA9PiB7CisgICAgICBjb25zdCBwYXJzZWQgPSBmb3JtYXRRdWVyeUlucHV0U2NoZW1hLnBhcnNlKGFyZ3MpOworICAgICAgY29uc3QgeyBxdWVyeSwgaW5kZW50YXRpb24sIG1heExpbmVMZW5ndGgsIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrcyB9ID0gcGFyc2VkOworCisgICAgICAvLyBCdWlsZCBvcHRpb25zIG9ubHkgd2l0aCBmaWVsZHMgcHJvdmlkZWQgKHVuZGVmaW5lZHMgd2lsbCBiZSBpZ25vcmVkIGJ5IGdyZW1saW50IGRlZmF1bHRzKQorICAgICAgY29uc3Qgb3B0aW9ucyA9CisgICAgICAgIGluZGVudGF0aW9uICE9PSB1bmRlZmluZWQgfHwKKyAgICAgICAgbWF4TGluZUxlbmd0aCAhPT0gdW5kZWZpbmVkIHx8CisgICAgICAgIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrcyAhPT0gdW5kZWZpbmVkCisgICAgICAgICAgPyB7IGluZGVudGF0aW9uLCBtYXhMaW5lTGVuZ3RoLCBzaG91bGRQbGFjZURvdHNBZnRlckxpbmVCcmVha3MgfQorICAgICAgICAgIDogdW5kZWZpbmVkOworCisgICAgICBjb25zdCBlZmZlY3QgPSBFZmZlY3QudHJ5KCgpID0+IGZvcm1hdFF1ZXJ5KHF1ZXJ5LCBvcHRpb25zKSk7CisKKyAgICAgIC8vIE1hcCBzdWNjZXNzIHRvIHN0cnVjdHVyZWQgSlNPTiBhbmQgZXJyb3JzIHRvIHN0cnVjdHVyZWQgZXJyb3Igb2JqZWN0IChzdGlsbCByZXR1cm5lZCBhcyBzdWNjZXNzIHJlc3BvbnNlKQorICAgICAgY29uc3QgcmVzcG9uc2VFZmZlY3QgPSBwaXBlKAorICAgICAgICBlZmZlY3QsCisgICAgICAgIEVmZmVjdC5tYXAoZm9ybWF0dGVkID0+CisgICAgICAgICAgY3JlYXRlU3VjY2Vzc1Jlc3BvbnNlKHsgc3VjY2VzczogdHJ1ZSwgZm9ybWF0dGVkUXVlcnk6IGZvcm1hdHRlZCB9KQorICAgICAgICApLAorICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoZXJyb3IgPT4KKyAgICAgICAgICBFZmZlY3Quc3VjY2VlZCgKKyAgICAgICAgICAgIGNyZWF0ZVN1Y2Nlc3NSZXNwb25zZSh7CisgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLAorICAgICAgICAgICAgICBlcnJvcjogeworICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFN0cmluZyhlcnJvciksCisgICAgICAgICAgICAgICAgLy8gaW5jbHVkZSBjb21tb24gZXJyb3IgZmllbGRzIHdoZW4gcHJlc2VudCB0byBtYWtlIGl0IHN0cnVjdHVyZWQKKyAgICAgICAgICAgICAgICBuYW1lOgorICAgICAgICAgICAgICAgICAgdG9Vbmtub3duUmVjb3JkKGVycm9yKSAmJiB0eXBlb2YgdG9Vbmtub3duUmVjb3JkKGVycm9yKT8uWyduYW1lJ10gPT09ICdzdHJpbmcnCisgICAgICAgICAgICAgICAgICAgID8gKHRvVW5rbm93blJlY29yZChlcnJvcik/LlsnbmFtZSddIGFzIHN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsCisgICAgICAgICAgICAgICAgc3RhY2s6CisgICAgICAgICAgICAgICAgICB0b1Vua25vd25SZWNvcmQoZXJyb3IpICYmIHR5cGVvZiB0b1Vua25vd25SZWNvcmQoZXJyb3IpPy5bJ3N0YWNrJ10gPT09ICdzdHJpbmcnCisgICAgICAgICAgICAgICAgICAgID8gKHRvVW5rbm93blJlY29yZChlcnJvcik/Llsnc3RhY2snXSBhcyBzdHJpbmcpCisgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLAorICAgICAgICAgICAgICAgIGRldGFpbHM6IHRvVW5rbm93blJlY29yZChlcnJvcik/LlsnZGV0YWlscyddLAorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSkKKyAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICk7CisKKyAgICAgIHJldHVybiBFZmZlY3QucnVuUHJvbWlzZShwaXBlKHJlc3BvbnNlRWZmZWN0LCBFZmZlY3QucHJvdmlkZShydW50aW1lKSkpOworICAgIH0KKyAgKTsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3NlcnZlci50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3NlcnZlci50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzcwYzBlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvc2VydmVyLnRzCkBAIC0wLDAgKzEsNDUxIEBACisjIS91c3IvYmluL2VudiBub2RlCisKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBAZmlsZW92ZXJ2aWV3IE1DUCBzZXJ2ZXIgZm9yIEFwYWNoZSBUaW5rZXJQb3AgR3JlbWxpbiBncmFwaCBkYXRhYmFzZXMuCisgKgorICogUHJvdmlkZXMgTUNQIChNb2RlbCBDb250ZXh0IFByb3RvY29sKSB0b29scyBhbmQgcmVzb3VyY2VzIGZvciBpbnRlcmFjdGluZyB3aXRoCisgKiBHcmVtbGluLWNvbXBhdGlibGUgZ3JhcGggZGF0YWJhc2VzIGluY2x1ZGluZyBBcGFjaGUgVGlua2VyUG9wLCBBbWF6b24gTmVwdHVuZSwKKyAqIEF6dXJlIENvc21vcyBEQiwgYW5kIG90aGVycy4KKyAqCisgKiBCdWlsdCB3aXRoIEVmZmVjdC10cyBmb3IgZnVuY3Rpb25hbCBjb21wb3NpdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuCisgKi8KKworaW1wb3J0IHsKKyAgQ29uZmlnUHJvdmlkZXIsCisgIEVmZmVjdCwKKyAgTGF5ZXIsCisgIHBpcGUsCisgIExvZ0xldmVsLAorICBMb2dnZXIsCisgIENvbnRleHQsCisgIEZpYmVyLAorICBPcHRpb24sCit9IGZyb20gJ2VmZmVjdCc7CitpbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJzsKK2ltcG9ydCB7IE1jcFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL21jcC5qcyc7CisKK2ltcG9ydCB7IEFwcENvbmZpZywgdHlwZSBBcHBDb25maWdUeXBlIH0gZnJvbSAnLi9jb25maWcuanMnOworaW1wb3J0IHsgR3JlbWxpblNlcnZpY2UsIEdyZW1saW5TZXJ2aWNlTGl2ZSB9IGZyb20gJy4vZ3JlbWxpbi9zZXJ2aWNlLmpzJzsKK2ltcG9ydCB7IEdyZW1saW5DbGllbnQgfSBmcm9tICcuL2dyZW1saW4vY2xpZW50LmpzJzsKK2ltcG9ydCB7IFNjaGVtYVNlcnZpY2VMaXZlIH0gZnJvbSAnLi9ncmVtbGluL3NjaGVtYS5qcyc7CitpbXBvcnQgeyByZWdpc3RlckVmZmVjdFRvb2xIYW5kbGVycyB9IGZyb20gJy4vaGFuZGxlcnMvdG9vbHMuanMnOworaW1wb3J0IHsgcmVnaXN0ZXJFZmZlY3RSZXNvdXJjZUhhbmRsZXJzIH0gZnJvbSAnLi9oYW5kbGVycy9yZXNvdXJjZXMuanMnOworaW1wb3J0IHsgRXJyb3JzIH0gZnJvbSAnLi9lcnJvcnMuanMnOworCisvKioKKyAqIFNlcnZpY2UgdGFnIGZvciB0aGUgTUNQIHNlcnZlciBpbnN0YW5jZSB1c2luZyBFZmZlY3QgMy54IENvbnRleHQuVGFnIHBhdHRlcm4uCisgKgorICogUHJvdmlkZXMgc2VydmVyIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGluY2x1ZGluZyBzdGFydC9zdG9wIG9wZXJhdGlvbnMuCisgKi8KK2NsYXNzIE1jcFNlcnZlclNlcnZpY2UgZXh0ZW5kcyBDb250ZXh0LlRhZygnTWNwU2VydmVyU2VydmljZScpPAorICBNY3BTZXJ2ZXJTZXJ2aWNlLAorICB7CisgICAgcmVhZG9ubHkgc2VydmVyOiBNY3BTZXJ2ZXI7CisgICAgcmVhZG9ubHkgc3RhcnQ6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgRXJyb3I+OworICAgIHJlYWRvbmx5IHN0b3A6IEVmZmVjdC5FZmZlY3Q8dm9pZCwgbmV2ZXI+OworICB9Cis+KCkge30KKworLyoqCisgKiBDcmVhdGVzIHRoZSBNQ1Agc2VydmVyIHNlcnZpY2UgaW1wbGVtZW50YXRpb24uCisgKgorICogQHJldHVybnMgRWZmZWN0IHRoYXQgcHJvdmlkZXMgTUNQIHNlcnZlciB3aXRoIHJlZ2lzdGVyZWQgaGFuZGxlcnMKKyAqCisgKiBTaWRlIGVmZmVjdHM6CisgKiAtIENyZWF0ZXMgTUNQIHNlcnZlciBpbnN0YW5jZQorICogLSBSZWdpc3RlcnMgdG9vbCBhbmQgcmVzb3VyY2UgaGFuZGxlcnMKKyAqIC0gU2V0cyB1cCBtYW5hZ2VkIHJ1bnRpbWUgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uCisgKiAtIENvbmZpZ3VyZXMgZmluYWxpemVycyBmb3IgY2xlYW51cAorICovCitjb25zdCBtYWtlTWNwU2VydmVyU2VydmljZSA9IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgY29uc3QgY29uZmlnID0geWllbGQqIEFwcENvbmZpZzsKKworICAvLyBDcmVhdGUgTUNQIHNlcnZlciBpbnN0YW5jZQorICBjb25zdCBzZXJ2ZXIgPSBuZXcgTWNwU2VydmVyKHsKKyAgICBuYW1lOiBjb25maWcuc2VydmVyLm5hbWUsCisgICAgdmVyc2lvbjogY29uZmlnLnNlcnZlci52ZXJzaW9uLAorICB9KTsKKworICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ+KchSBNQ1AgU2VydmVyIGluc3RhbmNlIGNyZWF0ZWQnLCB7CisgICAgc2VydmljZTogY29uZmlnLnNlcnZlci5uYW1lLAorICAgIG5hbWU6IGNvbmZpZy5zZXJ2ZXIubmFtZSwKKyAgICB2ZXJzaW9uOiBjb25maWcuc2VydmVyLnZlcnNpb24sCisgIH0pOworCisgIC8vIENyZWF0ZSBydW50aW1lIGZvciBoYW5kbGVycyBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQKKyAgY29uc3QgcnVudGltZSA9IHlpZWxkKiBFZmZlY3QucnVudGltZTxHcmVtbGluU2VydmljZT4oKTsKKworICAvLyBSZWdpc3RlciBoYW5kbGVycyB3aXRoIGRlcGVuZGVuY3kgaW5qZWN0aW9uCisgIHJlZ2lzdGVyRWZmZWN0VG9vbEhhbmRsZXJzKHNlcnZlciwgcnVudGltZSwgY29uZmlnKTsKKyAgcmVnaXN0ZXJFZmZlY3RSZXNvdXJjZUhhbmRsZXJzKHNlcnZlciwgcnVudGltZSwgY29uZmlnKTsKKworICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ+KchSBIYW5kbGVycyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseScsIHsKKyAgICBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUsCisgIH0pOworCisgIHJldHVybiB7CisgICAgc2VydmVyLAorICAgIHN0YXJ0OiBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7CisgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ/CflIwgQ3JlYXRpbmcgU1RESU8gdHJhbnNwb3J0Li4uJywgeyBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUgfSk7CisKKyAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpOworCisgICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ/CflJcgQ29ubmVjdGluZyBzZXJ2ZXIgdG8gdHJhbnNwb3J0Li4uJywgeworICAgICAgICBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUsCisgICAgICB9KTsKKworICAgICAgeWllbGQqIHBpcGUoCisgICAgICAgIEVmZmVjdC50cnlQcm9taXNlKCgpID0+IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCkpLAorICAgICAgICBFZmZlY3QubWFwRXJyb3IoZXJyb3IgPT4KKyAgICAgICAgICBFcnJvcnMuY29ubmVjdGlvbignU2VydmVyIGNvbm5lY3Rpb24gZmFpbGVkJywgeworICAgICAgICAgICAgZXJyb3JfdHlwZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgOiB0eXBlb2YgZXJyb3IsCisgICAgICAgICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksCisgICAgICAgICAgfSkKKyAgICAgICAgKQorICAgICAgKTsKKworICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCfinIUgR3JlbWxpbiBNQ1AgU2VydmVyIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5JywgeworICAgICAgICBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUsCisgICAgICAgIHBpZDogcHJvY2Vzcy5waWQsCisgICAgICAgIHJlYWR5OiB0cnVlLAorICAgICAgfSk7CisgICAgfSksCisgICAgc3RvcDogRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgeworICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCfwn5uRIFN0b3BwaW5nIEdyZW1saW4gTUNQIFNlcnZlci4uLicsIHsgc2VydmljZTogY29uZmlnLnNlcnZlci5uYW1lIH0pOworICAgICAgLy8gU2VydmVyIGNsZWFudXAgd291bGQgZ28gaGVyZSBpZiBuZWVkZWQKKyAgICB9KSwKKyAgfTsKK30pOworCitjb25zdCBNY3BTZXJ2ZXJTZXJ2aWNlTGl2ZSA9IExheWVyLmVmZmVjdChNY3BTZXJ2ZXJTZXJ2aWNlLCBtYWtlTWNwU2VydmVyU2VydmljZSk7CisKKy8qKgorICogTGF5ZXIgY29tcG9zaXRpb24gcHJvdmlkaW5nIGFsbCBhcHBsaWNhdGlvbiBkZXBlbmRlbmNpZXMuCisgKgorICogV2hlbiBHUkVNTElOX01DUF9FTkRQT0lOVCBpcyBub3Qgc2V0IHdlIHVzZSBhIGdyZW1saW4tZnJlZSBvZmZsaW5lIHN0dWIgc28KKyAqIHRoZSBncmVtbGluIGRyaXZlciBpcyBuZXZlciBpbXBvcnRlZCBvciBpbnN0YW50aWF0ZWQuICBXaGVuIGl0IElTIHNldCB3ZQorICogZHluYW1pY2FsbHkgaW1wb3J0IHRoZSByZWFsIEdyZW1saW5DbGllbnRMaXZlICh3aGljaCBwdWxscyBpbiB0aGUgZHJpdmVyKS4KKyAqLworY29uc3QgTk9fRU5EUE9JTlRfTVNHID0KKyAgJ05vIEdyZW1saW4gU2VydmVyIGNvbmZpZ3VyZWQuIFNldCBHUkVNTElOX01DUF9FTkRQT0lOVCB0byBlbmFibGUgZ3JhcGggb3BlcmF0aW9ucy4nOworCitjb25zdCBHcmVtbGluQ2xpZW50T2ZmbGluZUxpdmUgPSBMYXllci5zdWNjZWVkKAorICBHcmVtbGluQ2xpZW50LAorICBHcmVtbGluQ2xpZW50Lm9mKHsKKyAgICBnZXRDb25uZWN0aW9uOiBFZmZlY3QuZmFpbChFcnJvcnMuY29ubmVjdGlvbihOT19FTkRQT0lOVF9NU0cpKSwKKyAgICBpbnZhbGlkYXRlOiBFZmZlY3Qudm9pZCwKKyAgfSkKKyk7CisKK2NvbnN0IEdyZW1saW5MYXllciA9IExheWVyLnByb3ZpZGUoR3JlbWxpblNlcnZpY2VMaXZlLCBTY2hlbWFTZXJ2aWNlTGl2ZSk7CisKKy8vIENob29zZSB0aGUgY2xpZW50IGxheWVyIGJhc2VkIHB1cmVseSBvbiB3aGV0aGVyIHRoZSBlbnYgdmFyIGlzIHByZXNlbnQgYXQgc3RhcnR1cC4KKy8vIFRoaXMgaXMgY2hlY2tlZCBiZWZvcmUgYW55IEVmZmVjdCBydW5zIHNvIHRoZSBncmVtbGluIGRyaXZlciBpcyBuZXZlciBsb2FkZWQgd2hlbgorLy8gbm8gZW5kcG9pbnQgaXMgY29uZmlndXJlZC4KK2NvbnN0IGVuZHBvaW50SXNDb25maWd1cmVkID0KKyAgcHJvY2Vzcy5lbnZbJ0dSRU1MSU5fTUNQX0VORFBPSU5UJ10gIT09IHVuZGVmaW5lZCAmJgorICBwcm9jZXNzLmVudlsnR1JFTUxJTl9NQ1BfRU5EUE9JTlQnXS50cmltKCkgIT09ICcnOworCisvLyBEeW5hbWljYWxseSBpbXBvcnQgdGhlIHJlYWwgY2xpZW50IGxheWVyIG9ubHkgd2hlbiBhbiBlbmRwb2ludCBpcyBwcm92aWRlZCwKKy8vIGtlZXBpbmcgdGhlIGdyZW1saW4gZHJpdmVyIG91dCBvZiB0aGUgbW9kdWxlIGdyYXBoIGluIG9mZmxpbmUgbW9kZS4KK2NvbnN0IGdldEdyZW1saW5DbGllbnRMYXllciA9IGFzeW5jICgpID0+IHsKKyAgaWYgKCFlbmRwb2ludElzQ29uZmlndXJlZCkgeworICAgIHJldHVybiBHcmVtbGluQ2xpZW50T2ZmbGluZUxpdmU7CisgIH0KKyAgY29uc3QgeyBHcmVtbGluQ2xpZW50TGl2ZSB9ID0gYXdhaXQgaW1wb3J0KCcuL2dyZW1saW4vY29ubmVjdGlvbi5qcycpOworICByZXR1cm4gR3JlbWxpbkNsaWVudExpdmU7Cit9OworCisvLyBSZXNvbHZlZCBvbmNlIGF0IHN0YXJ0dXA7IHVzZWQgYmVsb3cgaW4gQXBwTGF5ZXIuCitjb25zdCBHcmVtbGluQ2xpZW50TGF5ZXJQcm9taXNlID0gZ2V0R3JlbWxpbkNsaWVudExheWVyKCk7CisKKy8qKgorICogTWFpbiBhcHBsaWNhdGlvbiBFZmZlY3QuCisgKgorICogT3JjaGVzdHJhdGVzIHNlcnZlciBzdGFydHVwLCBjb25maWd1cmF0aW9uIGxvYWRpbmcsIGFuZCBncmFjZWZ1bCBzaHV0ZG93bi4KKyAqIFVzZXMgRWZmZWN0Lm5ldmVyIHRvIGtlZXAgdGhlIHNlcnZlciBydW5uaW5nIGluZGVmaW5pdGVseS4KKyAqLworY29uc3QgcHJvZ3JhbSA9IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKKyAgLy8gR2V0IGNvbmZpZ3VyYXRpb24KKyAgY29uc3QgY29uZmlnID0geWllbGQqIEFwcENvbmZpZzsKKworICBjb25zdCBlbmRwb2ludEluZm8gPSBPcHRpb24ubWF0Y2goY29uZmlnLmdyZW1saW4uZW5kcG9pbnQsIHsKKyAgICBvbk5vbmU6ICgpID0+ICh7IGNvbmZpZ3VyZWQ6IGZhbHNlIH0pLAorICAgIG9uU29tZTogZXAgPT4gKHsKKyAgICAgIGNvbmZpZ3VyZWQ6IHRydWUsCisgICAgICBob3N0OiBlcC5ob3N0LAorICAgICAgcG9ydDogZXAucG9ydCwKKyAgICAgIHRyYXZlcnNhbFNvdXJjZTogZXAudHJhdmVyc2FsU291cmNlLAorICAgIH0pLAorICB9KTsKKworICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ/CfmoAgU3RhcnRpbmcgQXBhY2hlIFRpbmtlclBvcCBHcmVtbGluIE1DUCBTZXJ2ZXIuLi4nLCB7CisgICAgc2VydmljZTogY29uZmlnLnNlcnZlci5uYW1lLAorICAgIHZlcnNpb246IGNvbmZpZy5zZXJ2ZXIudmVyc2lvbiwKKyAgICBncmVtbGluRW5kcG9pbnQ6IE9wdGlvbi5tYXRjaChjb25maWcuZ3JlbWxpbi5lbmRwb2ludCwgeworICAgICAgb25Ob25lOiAoKSA9PiAnKG5vbmUpJywKKyAgICAgIG9uU29tZTogZXAgPT4gYCR7ZXAuaG9zdH06JHtlcC5wb3J0fWAsCisgICAgfSksCisgICAgbG9nTGV2ZWw6IGNvbmZpZy5sb2dnaW5nLmxldmVsLAorICAgIGNvbmZpZzogeworICAgICAgc2VydmVyOiB7CisgICAgICAgIG5hbWU6IGNvbmZpZy5zZXJ2ZXIubmFtZSwKKyAgICAgICAgdmVyc2lvbjogY29uZmlnLnNlcnZlci52ZXJzaW9uLAorICAgICAgfSwKKyAgICAgIGdyZW1saW46IHsKKyAgICAgICAgLi4uZW5kcG9pbnRJbmZvLAorICAgICAgICB1c2VTU0w6IGNvbmZpZy5ncmVtbGluLnVzZVNTTCwKKyAgICAgICAgaWRsZVRpbWVvdXQ6IGNvbmZpZy5ncmVtbGluLmlkbGVUaW1lb3V0LAorICAgICAgICB1c2VybmFtZTogT3B0aW9uLmdldE9yTnVsbChjb25maWcuZ3JlbWxpbi51c2VybmFtZSksCisgICAgICAgIGhhc1Bhc3N3b3JkOiBPcHRpb24uaXNTb21lKGNvbmZpZy5ncmVtbGluLnBhc3N3b3JkKSwKKyAgICAgIH0sCisgICAgICBzY2hlbWE6IHsKKyAgICAgICAgZW51bURpc2NvdmVyeUVuYWJsZWQ6IGNvbmZpZy5zY2hlbWEuZW51bURpc2NvdmVyeUVuYWJsZWQsCisgICAgICAgIGVudW1DYXJkaW5hbGl0eVRocmVzaG9sZDogY29uZmlnLnNjaGVtYS5lbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQsCisgICAgICAgIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBjb25maWcuc2NoZW1hLmVudW1Qcm9wZXJ0eURlbnlMaXN0LAorICAgICAgICBpbmNsdWRlU2FtcGxlVmFsdWVzOiBjb25maWcuc2NoZW1hLmluY2x1ZGVTYW1wbGVWYWx1ZXMsCisgICAgICAgIG1heEVudW1WYWx1ZXM6IGNvbmZpZy5zY2hlbWEubWF4RW51bVZhbHVlcywKKyAgICAgICAgaW5jbHVkZUNvdW50czogY29uZmlnLnNjaGVtYS5pbmNsdWRlQ291bnRzLAorICAgICAgfSwKKyAgICAgIGxvZ2dpbmc6IHsKKyAgICAgICAgbGV2ZWw6IGNvbmZpZy5sb2dnaW5nLmxldmVsLAorICAgICAgICBzdHJ1Y3R1cmVkOiB0cnVlLAorICAgICAgfSwKKyAgICB9LAorICB9KTsKKworICAvLyBHZXQgc2VydmVyIHNlcnZpY2UKKyAgY29uc3QgbWNwU2VydmVyID0geWllbGQqIE1jcFNlcnZlclNlcnZpY2U7CisKKyAgLy8gU2V0IHVwIGdyYWNlZnVsIHNodXRkb3duCisgIHlpZWxkKiBFZmZlY3QuYWRkRmluYWxpemVyKCgpID0+IG1jcFNlcnZlci5zdG9wKTsKKworICAvLyBTdGFydCB0aGUgc2VydmVyCisgIHlpZWxkKiBtY3BTZXJ2ZXIuc3RhcnQ7CisKKyAgLy8gS2VlcCB0aGUgcHJvZ3JhbSBydW5uaW5nCisgIHlpZWxkKiBFZmZlY3QubmV2ZXI7Cit9KTsKKworLyoqCisgKiBTYWZlbHkgc2VyaWFsaXplcyBvYmplY3RzIHRvIEpTT04gd2l0aCBmYWxsYmFjayBlcnJvciBoYW5kbGluZy4KKyAqCisgKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIHNlcmlhbGl6ZQorICogQHJldHVybnMgSlNPTiBzdHJpbmcsIHdpdGggZXJyb3IgbWV0YWRhdGEgaWYgc2VyaWFsaXphdGlvbiBmYWlscworICovCitjb25zdCBzYWZlSnNvblN0cmluZ2lmeSA9IChvYmo6IHVua25vd24pOiBzdHJpbmcgPT4KKyAgcGlwZSgKKyAgICBFZmZlY3QudHJ5KCgpID0+IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpLAorICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PgorICAgICAgRWZmZWN0LnN1Y2NlZWQoCisgICAgICAgIEpTT04uc3RyaW5naWZ5KHsKKyAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcob2JqKSwKKyAgICAgICAgICBzZXJpYWxpemF0aW9uX2Vycm9yOiB0cnVlLAorICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAorICAgICAgICB9KQorICAgICAgKQorICAgICksCisgICAgRWZmZWN0LnJ1blN5bmMKKyAgKTsKKworLyoqCisgKiBTdHJ1Y3R1cmVkIGxvZ2dpbmcgRWZmZWN0IHRoYXQgd3JpdGVzIHRvIHN0ZGVyci4KKyAqCisgKiBAcGFyYW0gbG9nRGF0YSAtIFN0cnVjdHVyZWQgbG9nIGRhdGEgb2JqZWN0CisgKiBAcmV0dXJucyBFZmZlY3QgdGhhdCB3cml0ZXMgbG9nIGVudHJ5IHRvIHN0ZGVycgorICoKKyAqIE5vdGU6IEFsbCBsb2dnaW5nIGdvZXMgdG8gc3RkZXJyIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggTUNQIEpTT04tUlBDCisgKiBjb21tdW5pY2F0aW9uIG9uIHN0ZG91dC4KKyAqLworY29uc3QgbG9nVG9TdGRlcnIgPSAobG9nRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBFZmZlY3QuRWZmZWN0PHZvaWQ+ID0+CisgIEVmZmVjdC5zeW5jKCgpID0+IHsKKyAgICBjb25zdCBsb2dFbnRyeSA9IHsKKyAgICAgIC4uLmxvZ0RhdGEsCisgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKKyAgICB9OworICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke3NhZmVKc29uU3RyaW5naWZ5KGxvZ0VudHJ5KX1cbmApOworICB9KTsKKworLyoqCisgKiBFbmhhbmNlZCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gY29uZmlnCisgKiBDUklUSUNBTDogQWxsIGxvZ2dpbmcgbXVzdCBnbyB0byBzdGRlcnIgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBNQ1AgSlNPTiByZXNwb25zZXMKKyAqLworY29uc3QgY3JlYXRlTG9nZ2VyTGF5ZXIgPSAoY29uZmlnOiBBcHBDb25maWdUeXBlKSA9PiB7CisgIGNvbnN0IGxvZ0xldmVsTWFwID0geworICAgIGVycm9yOiBMb2dMZXZlbC5FcnJvciwKKyAgICB3YXJuOiBMb2dMZXZlbC5XYXJuaW5nLAorICAgIGluZm86IExvZ0xldmVsLkluZm8sCisgICAgZGVidWc6IExvZ0xldmVsLkRlYnVnLAorICB9IGFzIGNvbnN0OworICBjb25zdCBtaW5pbXVtTG9nTGV2ZWwgPSBsb2dMZXZlbE1hcFtjb25maWcubG9nZ2luZy5sZXZlbF0gPz8gTG9nTGV2ZWwuSW5mbzsKKworICByZXR1cm4gTGF5ZXIubWVyZ2VBbGwoCisgICAgTG9nZ2VyLnJlcGxhY2UoCisgICAgICBMb2dnZXIuZGVmYXVsdExvZ2dlciwKKyAgICAgIExvZ2dlci5tYWtlKCh7IGxvZ0xldmVsOiBsZXZlbCwgbWVzc2FnZSwgLi4ucmVzdCB9KSA9PiB7CisgICAgICAgIGNvbnN0IGxvZ0RhdGEgPSB7CisgICAgICAgICAgbGV2ZWw6IGxldmVsLl90YWcudG9Mb3dlckNhc2UoKSwKKyAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcygKKyAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3QpLmZpbHRlcigKKyAgICAgICAgICAgICAgKFtrZXldKSA9PiAha2V5LnN0YXJ0c1dpdGgoJ18nKSAmJiBrZXkgIT09ICdzcGFuJyAmJiBrZXkgIT09ICdmaWJlcicKKyAgICAgICAgICAgICkKKyAgICAgICAgICApLAorICAgICAgICB9OworICAgICAgICAvLyBJTVBPUlRBTlQ6IHJ1biB0aGUgZWZmZWN0IHN5bmNocm9ub3VzbHksIGZvciB0aGUgbG92ZSBhbGwgdGhhdCBpcyBzYW5lLCBydW4gaXQgc3luY2hyb25vdXNseSEhIQorICAgICAgICBFZmZlY3QucnVuU3luYyhsb2dUb1N0ZGVycihsb2dEYXRhKSk7CisgICAgICB9KQorICAgICksCisgICAgTG9nZ2VyLm1pbmltdW1Mb2dMZXZlbChtaW5pbXVtTG9nTGV2ZWwpCisgICk7Cit9OworCisvKioKKyAqIEVmZmVjdC1iYXNlZCBncmFjZWZ1bCBzaHV0ZG93biB1c2luZyBFZmZlY3QncyBpbnRlcnJ1cHRpb24gc3lzdGVtCisgKi8KK2NvbnN0IHdpdGhHcmFjZWZ1bFNodXRkb3duID0gPEEsIEUsIFI+KGVmZmVjdDogRWZmZWN0LkVmZmVjdDxBLCBFLCBSPik6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj4gPT4KKyAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgeworICAgIGNvbnN0IGZpYmVyID0geWllbGQqIEVmZmVjdC5mb3JrKGVmZmVjdCk7CisKKyAgICAvLyBTZXQgdXAgc2lnbmFsIGhhbmRsZXJzIHVzaW5nIEVmZmVjdCdzIGludGVycnVwdGlvbgorICAgIGNvbnN0IHNldHVwU2lnbmFsSGFuZGxlciA9IChzaWduYWw6IE5vZGVKUy5TaWduYWxzKSA9PgorICAgICAgRWZmZWN0LnN5bmMoKCkgPT4geworICAgICAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4geworICAgICAgICAgIEVmZmVjdC5ydW5Qcm9taXNlKAorICAgICAgICAgICAgcGlwZSgKKyAgICAgICAgICAgICAgRWZmZWN0LmxvZ0luZm8oYFJlY2VpdmVkICR7c2lnbmFsfS4gSW5pdGlhdGluZyBncmFjZWZ1bCBzaHV0ZG93bi4uLmApLAorICAgICAgICAgICAgICBFZmZlY3QuYW5kVGhlbigoKSA9PiBGaWJlci5pbnRlcnJ1cHQoZmliZXIpKSwKKyAgICAgICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcjogdW5rbm93bikgPT4KKyAgICAgICAgICAgICAgICBsb2dUb1N0ZGVycih7CisgICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJywKKyAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBkdXJpbmcgc2h1dGRvd24nLAorICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgKS5maW5hbGx5KCgpID0+IHsKKyAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgIHlpZWxkKiBzZXR1cFNpZ25hbEhhbmRsZXIoJ1NJR0lOVCcpOworICAgIHlpZWxkKiBzZXR1cFNpZ25hbEhhbmRsZXIoJ1NJR1RFUk0nKTsKKworICAgIHJldHVybiB5aWVsZCogRmliZXIuam9pbihmaWJlcik7CisgIH0pOworCisvKioKKyAqIE1haW4gZW50cnkgcG9pbnQgd2l0aCBmdWxsIEVmZmVjdCBjb21wb3NpdGlvbi4KKyAqCisgKiBAcGFyYW0gYXBwTGF5ZXIgLSBGdWxseSBjb21wb3NlZCBhcHBsaWNhdGlvbiBsYXllciAoYnVpbHQgYWZ0ZXIgcmVzb2x2aW5nIHRoZQorICogICBncmVtbGluIGNsaWVudCBsYXllciBhc3luY2hyb25vdXNseSBzbyB0aGUgZ3JlbWxpbiBkcml2ZXIgaXMgbmV2ZXIgaW1wb3J0ZWQKKyAqICAgd2hlbiBHUkVNTElOX01DUF9FTkRQT0lOVCBpcyBub3Qgc2V0KS4KKyAqLworLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKK2NvbnN0IG1haW4gPSAoYXBwTGF5ZXI6IExheWVyLkxheWVyPE1jcFNlcnZlclNlcnZpY2UsIGFueSwgbmV2ZXI+KSA9PgorICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7CisgICAgLy8gQWRkIHN0YXJ0dXAgbG9nZ2luZyBiZWZvcmUgYW55dGhpbmcgZWxzZSAtIENSSVRJQ0FMOiBVc2Ugc3RkZXJyIG9ubHkKKyAgICB5aWVsZCogbG9nVG9TdGRlcnIoeworICAgICAgbGV2ZWw6ICdpbmZvJywKKyAgICAgIG1lc3NhZ2U6ICdBcGFjaGUgVGlua2VyUG9wIC0gR3JlbWxpbiBNQ1AgU2VydmVyIGV4ZWN1dGFibGUgc3RhcnRlZCcsCisgICAgICBwcm9jZXNzX2luZm86IHsKKyAgICAgICAgcGlkOiBwcm9jZXNzLnBpZCwKKyAgICAgICAgbm9kZV92ZXJzaW9uOiBwcm9jZXNzLnZlcnNpb25zLm5vZGUsCisgICAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLAorICAgICAgICBhcmd2OiBwcm9jZXNzLmFyZ3YsCisgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSwKKyAgICAgIH0sCisgICAgfSk7CisKKyAgICAvLyBHZXQgY29uZmlndXJhdGlvbiBlYXJseSBmb3IgbG9nZ2luZyBzZXR1cAorICAgIGNvbnN0IGNvbmZpZyA9IHlpZWxkKiBBcHBDb25maWc7CisKKyAgICAvLyBMb2cgY29uZmlndXJhdGlvbgorICAgIHlpZWxkKiBsb2dUb1N0ZGVycih7CisgICAgICBsZXZlbDogJ2luZm8nLAorICAgICAgbWVzc2FnZTogJ0NvbmZpZ3VyYXRpb24gbG9hZGVkJywKKyAgICAgIGNvbmZpZzogeworICAgICAgICBncmVtbGluOiBPcHRpb24ubWF0Y2goY29uZmlnLmdyZW1saW4uZW5kcG9pbnQsIHsKKyAgICAgICAgICBvbk5vbmU6ICgpID0+ICh7CisgICAgICAgICAgICBjb25maWd1cmVkOiBmYWxzZSwKKyAgICAgICAgICAgIHVzZV9zc2w6IGNvbmZpZy5ncmVtbGluLnVzZVNTTCwKKyAgICAgICAgICAgIGlkbGVfdGltZW91dDogY29uZmlnLmdyZW1saW4uaWRsZVRpbWVvdXQsCisgICAgICAgICAgfSksCisgICAgICAgICAgb25Tb21lOiBlcCA9PiAoeworICAgICAgICAgICAgY29uZmlndXJlZDogdHJ1ZSwKKyAgICAgICAgICAgIGhvc3Q6IGVwLmhvc3QsCisgICAgICAgICAgICBwb3J0OiBlcC5wb3J0LAorICAgICAgICAgICAgdXNlX3NzbDogY29uZmlnLmdyZW1saW4udXNlU1NMLAorICAgICAgICAgICAgdHJhdmVyc2FsX3NvdXJjZTogZXAudHJhdmVyc2FsU291cmNlLAorICAgICAgICAgICAgaWRsZV90aW1lb3V0OiBjb25maWcuZ3JlbWxpbi5pZGxlVGltZW91dCwKKyAgICAgICAgICB9KSwKKyAgICAgICAgfSksCisgICAgICAgIGxvZ2dpbmc6IHsKKyAgICAgICAgICBsZXZlbDogY29uZmlnLmxvZ2dpbmcubGV2ZWwsCisgICAgICAgIH0sCisgICAgICB9LAorICAgIH0pOworCisgICAgLy8gUnVuIHRoZSBtYWluIHByb2dyYW0gd2l0aCBhbGwgc2VydmljZXMgcHJvdmlkZWQKKyAgICB5aWVsZCogcGlwZSgKKyAgICAgIHdpdGhHcmFjZWZ1bFNodXRkb3duKHByb2dyYW0pLAorICAgICAgRWZmZWN0LnByb3ZpZGUoYXBwTGF5ZXIpLAorICAgICAgRWZmZWN0LnByb3ZpZGUoY3JlYXRlTG9nZ2VyTGF5ZXIoY29uZmlnKSkKKyAgICApOworICB9KTsKKworLyoqCisgKiBSdW4gdGhlIGFwcGxpY2F0aW9uIHdpdGggaW1wcm92ZWQgZXJyb3IgaGFuZGxpbmcgdXNpbmcgRWZmZWN0IHBhdHRlcm5zLgorICoKKyAqIEFzeW5jIHNvIHdlIGNhbiBhd2FpdCB0aGUgZ3JlbWxpbiBjbGllbnQgbGF5ZXIgcmVzb2x1dGlvbiBiZWZvcmUgYnVpbGRpbmcgdGhlCisgKiBmdWxsIGxheWVyIGdyYXBoIGFuZCBzdGFydGluZyB0aGUgRWZmZWN0IHJ1bnRpbWUuCisgKi8KKy8vIEVuc3VyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24gcmVzb2x1dGlvbiBhY3Jvc3MgdGhlIGFwcAorY29uc3QgRW52Q29uZmlnTGF5ZXIgPSBMYXllci5zZXRDb25maWdQcm92aWRlcihDb25maWdQcm92aWRlci5mcm9tRW52KCkpOworCithc3luYyBmdW5jdGlvbiBydW4oKTogUHJvbWlzZTx2b2lkPiB7CisgIGNvbnN0IGdyZW1saW5DbGllbnRMYXllciA9IGF3YWl0IEdyZW1saW5DbGllbnRMYXllclByb21pc2U7CisKKyAgY29uc3QgQXBwTGF5ZXIgPSBMYXllci5wcm92aWRlKAorICAgIE1jcFNlcnZlclNlcnZpY2VMaXZlLAorICAgIExheWVyLnByb3ZpZGUoR3JlbWxpbkxheWVyLCBncmVtbGluQ2xpZW50TGF5ZXIpCisgICk7CisKKyAgY29uc3QgcnVuTWFpbiA9IHBpcGUoCisgICAgRWZmZWN0LnNjb3BlZChtYWluKEFwcExheWVyKSksCisgICAgRWZmZWN0LnByb3ZpZGUoRW52Q29uZmlnTGF5ZXIpLAorICAgIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3I6IHVua25vd24pID0+CisgICAgICBsb2dUb1N0ZGVycih7CisgICAgICAgIGxldmVsOiAnZXJyb3InLAorICAgICAgICBtZXNzYWdlOiAnRmF0YWwgZXJyb3IgaW4gbWFpbiBwcm9ncmFtJywKKyAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSwKKyAgICAgICAgZXJyb3JfdHlwZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgOiB0eXBlb2YgZXJyb3IsCisgICAgICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQsCisgICAgICB9KS5waXBlKEVmZmVjdC5hbmRUaGVuKCgpID0+IEVmZmVjdC5zeW5jKCgpID0+IHByb2Nlc3MuZXhpdCgxKSkpKQorICAgICkKKyAgKTsKKworICBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShydW5NYWluKTsKK30KKworcnVuKCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy90cmFuc2xhdG9yL2luZGV4LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdHJhbnNsYXRvci9pbmRleC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjUzNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdHJhbnNsYXRvci9pbmRleC50cwpAQCAtMCwwICsxLDcyIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGZpbGVvdmVydmlldyBPcmNoZXN0cmF0ZXMgdGhlIG5vcm1hbGl6ZS1hbmQtdHJhbnNsYXRlIHBpcGVsaW5lLgorICoKKyAqIFBpcGVsaW5lOgorICogICAxLiBNZWNoYW5pY2FsIHByZS1wcm9jZXNzaW5nIChncmVtbGluZ28uIHN0cmlwLCB0cmFpbGluZyBfLCBQYXNjYWxDYXNl4oaSY2FtZWxDYXNlKQorICogICAyLiBMTE0gbm9ybWFsaXphdGlvbiB2aWEgTUNQIHNhbXBsaW5nIChoYW5kbGVzIHJlbWFpbmluZyBkaWFsZWN0LXNwZWNpZmljIGNvbnN0cnVjdHMpCisgKiAgIDMuIEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgpIHRvIHRoZSB0YXJnZXQgbGFuZ3VhZ2UKKyAqLworCitpbXBvcnQgdHlwZSB7IFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzJzsKK2ltcG9ydCB7IEdyZW1saW5UcmFuc2xhdG9yIH0gZnJvbSAnZ3JlbWxpbi9sYW5ndWFnZSc7CitpbXBvcnQgeyBhcHBseU1lY2hhbmljYWxOb3JtYWxpemF0aW9uIH0gZnJvbSAnLi9ub3JtYWxpemVycy9zaGFyZWQuanMnOworaW1wb3J0IHsgbm9ybWFsaXplV2l0aExsbSB9IGZyb20gJy4vbGxtLmpzJzsKKworZXhwb3J0IGludGVyZmFjZSBOb3JtYWxpemVBbmRUcmFuc2xhdGVSZXN1bHQgeworICByZWFkb25seSBvcmlnaW5hbDogc3RyaW5nOworICByZWFkb25seSBub3JtYWxpemVkOiBzdHJpbmc7CisgIHJlYWRvbmx5IHRyYW5zbGF0ZWQ6IHN0cmluZzsKKyAgcmVhZG9ubHkgbGxtTm9ybWFsaXphdGlvblNraXBwZWQ6IGJvb2xlYW47Cit9CisKKy8qKgorICogTm9ybWFsaXplcyBhIEdyZW1saW4gcXVlcnkgZnJvbSBhbnkgZGlhbGVjdCB0byBjYW5vbmljYWwgZm9ybWF0LCB0aGVuIHRyYW5zbGF0ZXMKKyAqIGl0IHRvIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGxhbmd1YWdlLgorICoKKyAqIEBwYXJhbSBxdWVyeSAtIElucHV0IEdyZW1saW4gcXVlcnkgaW4gYW55IGRpYWxlY3QKKyAqIEBwYXJhbSB0YXJnZXQgLSBUcmFuc2xhdG9yIGtleSAoZS5nLiAnSkFWQVNDUklQVCcsICdQWVRIT04nKQorICogQHBhcmFtIHRyYXZlcnNhbFNvdXJjZSAtIFRyYXZlcnNhbCBzb3VyY2UgdmFyaWFibGUgbmFtZSAoZGVmYXVsdDogJ2cnKQorICogQHBhcmFtIHNlcnZlciAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2UgZm9yIExMTSBzYW1wbGluZworICogQHJldHVybnMgT3JpZ2luYWwsIG5vcm1hbGl6ZWQsIGFuZCB0cmFuc2xhdGVkIHF1ZXJ5IHN0cmluZ3MKKyAqLworZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZUFuZFRyYW5zbGF0ZSgKKyAgcXVlcnk6IHN0cmluZywKKyAgdGFyZ2V0OiBzdHJpbmcsCisgIHRyYXZlcnNhbFNvdXJjZTogc3RyaW5nLAorICBzZXJ2ZXI6IFNlcnZlcgorKTogUHJvbWlzZTxOb3JtYWxpemVBbmRUcmFuc2xhdGVSZXN1bHQ+IHsKKyAgY29uc3QgbWVjaGFuaWNhbCA9IGFwcGx5TWVjaGFuaWNhbE5vcm1hbGl6YXRpb24ocXVlcnkpOworICBjb25zdCBbbm9ybWFsaXplZCwgbGxtTm9ybWFsaXphdGlvblNraXBwZWRdID0gYXdhaXQgbm9ybWFsaXplV2l0aExsbShtZWNoYW5pY2FsLCBzZXJ2ZXIpCisgICAgLnRoZW4oKHJlc3VsdCk6IFtzdHJpbmcsIGJvb2xlYW5dID0+IFtyZXN1bHQsIGZhbHNlXSkKKyAgICAuY2F0Y2goKCk6IFtzdHJpbmcsIGJvb2xlYW5dID0+IFttZWNoYW5pY2FsLCB0cnVlXSk7CisgIGNvbnN0IHJlc3VsdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZSgKKyAgICBub3JtYWxpemVkLAorICAgIHRyYXZlcnNhbFNvdXJjZSwKKyAgICB0YXJnZXQgYXMgUGFyYW1ldGVyczx0eXBlb2YgR3JlbWxpblRyYW5zbGF0b3IudHJhbnNsYXRlPlsyXQorICApOworICByZXR1cm4geworICAgIG9yaWdpbmFsOiBxdWVyeSwKKyAgICBub3JtYWxpemVkLAorICAgIHRyYW5zbGF0ZWQ6IHJlc3VsdC5nZXRUcmFuc2xhdGVkKCksCisgICAgbGxtTm9ybWFsaXphdGlvblNraXBwZWQsCisgIH07Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy90cmFuc2xhdG9yL2xsbS50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3RyYW5zbGF0b3IvbGxtLnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWFhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy90cmFuc2xhdG9yL2xsbS50cwpAQCAtMCwwICsxLDgxIEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qKgorICogQGZpbGVvdmVydmlldyBMTE0tYmFzZWQgbm9ybWFsaXphdGlvbiBvZiBHcmVtbGluIHF1ZXJpZXMgdG8gY2Fub25pY2FsIGZvcm1hdC4KKyAqCisgKiBVc2VzIE1DUCBzYW1wbGluZyB0byByZXF1ZXN0IG5vcm1hbGl6YXRpb24gZnJvbSB0aGUgaG9zdCBMTE0gY2xpZW50LCByZXF1aXJpbmcKKyAqIG5vIEFQSSBrZXkgYW5kIG5vIGRlcGVuZGVuY3kgb24gYW55IHNwZWNpZmljIExMTSBwcm92aWRlci4KKyAqLworCitpbXBvcnQgdHlwZSB7IFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzJzsKKworY29uc3QgU1lTVEVNX1BST01QVCA9IGBZb3UgYXJlIGEgR3JlbWxpbiBxdWVyeSBub3JtYWxpemVyLiBDb252ZXJ0IHRoZSBnaXZlbiBHcmVtbGluIHF1ZXJ5IHRvIGNhbm9uaWNhbCBncmVtbGluLWxhbmd1YWdlIEFOVExSIGdyYW1tYXIgZm9ybWF0LgorCitDYW5vbmljYWwgZm9ybWF0IHJ1bGVzOgorLSBTdGVwIG5hbWVzIGFyZSBjYW1lbENhc2U6IG91dCgpLCBoYXNMYWJlbCgpLCB2YWx1ZXMoKSDigJQgbm90IFBhc2NhbENhc2UKKy0gQm9vbGVhbiBsaXRlcmFscyBhcmUgbG93ZXJjYXNlOiB0cnVlLCBmYWxzZSDigJQgbm90IFRydWUsIEZhbHNlCistIE51bGwgbGl0ZXJhbCBpczogbnVsbCDigJQgbm90IE5vbmUKKy0gTm8gbGFuZ3VhZ2Utc3BlY2lmaWMgcHJlZml4ZXMgKGdyZW1saW5nby4gaGFzIGFscmVhZHkgYmVlbiBzdHJpcHBlZCkKKy0gRW51bSB2YWx1ZXMgdXNlIHRoZSBsb25nIGZvcm0gKENsYXNzTmFtZS5tZW1iZXIpIHdpdGggZXhhY3QgY2FzaW5nOgorICBUOiBULmlkLCBULmxhYmVsLCBULmtleSwgVC52YWx1ZQorICBEaXJlY3Rpb246IERpcmVjdGlvbi5PVVQsIERpcmVjdGlvbi5JTiwgRGlyZWN0aW9uLkJPVEgsIERpcmVjdGlvbi5mcm9tLCBEaXJlY3Rpb24udG8KKyAgT3JkZXI6IE9yZGVyLmFzYywgT3JkZXIuZGVzYywgT3JkZXIuc2h1ZmZsZQorICBTY29wZTogU2NvcGUubG9jYWwsIFNjb3BlLmdsb2JhbAorICBQb3A6IFBvcC5maXJzdCwgUG9wLmxhc3QsIFBvcC5hbGwsIFBvcC5taXhlZAorICBNZXJnZTogTWVyZ2Uub25DcmVhdGUsIE1lcmdlLm9uTWF0Y2gsIE1lcmdlLm91dFYsIE1lcmdlLmluVgorICBDYXJkaW5hbGl0eTogQ2FyZGluYWxpdHkuc2luZ2xlLCBDYXJkaW5hbGl0eS5zZXQsIENhcmRpbmFsaXR5Lmxpc3QKKyAgQ29sdW1uOiBDb2x1bW4ua2V5cywgQ29sdW1uLnZhbHVlcworICBPcGVyYXRvcjogT3BlcmF0b3IuYWRkQWxsLCBPcGVyYXRvci5hbmQsIE9wZXJhdG9yLmFzc2lnbiwgT3BlcmF0b3IuZGl2LCBPcGVyYXRvci5tYXgsIE9wZXJhdG9yLm1pbiwgT3BlcmF0b3IubWludXMsIE9wZXJhdG9yLm11bHQsIE9wZXJhdG9yLm9yLCBPcGVyYXRvci5zdW0sIE9wZXJhdG9yLnN1bUxvbmcKKyAgUGljazogUGljay5hbnksIFBpY2subm9uZSwgUGljay51bnByb2R1Y3RpdmUKKyAgRFQ6IERULnNlY29uZCwgRFQubWludXRlLCBEVC5ob3VyLCBEVC5kYXkKKyAgQmFycmllcjogQmFycmllci5ub3JtU2FjaworICBHVHlwZTogR1R5cGUuQklHREVDSU1BTCwgR1R5cGUuQklHSU5ULCBHVHlwZS5CSU5BUlksIEdUeXBlLkJPT0xFQU4sIEdUeXBlLkJZVEUsIEdUeXBlLkNIQVIsIEdUeXBlLkRBVEVUSU1FLCBHVHlwZS5ET1VCTEUsIEdUeXBlLkRVUkFUSU9OLCBHVHlwZS5FREdFLCBHVHlwZS5GTE9BVCwgR1R5cGUuR1JBUEgsIEdUeXBlLklOVCwgR1R5cGUuTElTVCwgR1R5cGUuTE9ORywgR1R5cGUuTUFQLCBHVHlwZS5OVUxMLCBHVHlwZS5OVU1CRVIsIEdUeXBlLlBBVEgsIEdUeXBlLlBST1BFUlRZLCBHVHlwZS5TRVQsIEdUeXBlLlNIT1JULCBHVHlwZS5TVFJJTkcsIEdUeXBlLlRSRUUsIEdUeXBlLlVVSUQsIEdUeXBlLlZFUlRFWCwgR1R5cGUuVlBST1BFUlRZCistIE5vIHR5cGUgY2FzdHM6IHVzZSBudWxsIGluc3RlYWQgb2YgKE1hcCkgbnVsbCwgKE9iamVjdCkgbnVsbCwgKFN0cmluZykgbnVsbCwgZXRjLgorLSBDb2xsZWN0aW9uIGxpdGVyYWxzOiBbYSwgYiwgY10gZm9yIGxpc3RzLCB7YSwgYiwgY30gZm9yIHNldHMsIFsia2V5IjogdmFsdWVdIGZvciBtYXBzCistIERhdGUgbGl0ZXJhbHM6IGRhdGV0aW1lKCIyMDIzLTAxLTAxVDAwOjAwOjAwWiIpIOKAlCBub3QgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoLi4uKSwgbm90IERhdGVUaW1lKC4uLikKKy0gVVVJRCBsaXRlcmFsczogVVVJRCgiLi4uIikgb3IgVVVJRCgpIOKAlCBub3QgdXVpZCguLi4pLCBub3QgVVVJRC5mcm9tU3RyaW5nKC4uLiksIG5vdCBVVUlELnJhbmRvbVVVSUQoKQorLSBTcGVjaWFsIGZsb2F0IGxpdGVyYWxzOiBOYU4gKG5vdCBEb3VibGUuTmFOLCBOdW1iZXIuTmFOLCBmbG9hdCgnbmFuJyksIG1hdGguTmFOKCkpOyBJbmZpbml0eSAobm90IERvdWJsZS5Qb3NpdGl2ZUluZmluaXR5LCBtYXRoLkluZigxKSk7IC1JbmZpbml0eSAobm90IERvdWJsZS5OZWdhdGl2ZUluZmluaXR5LCBtYXRoLkluZigtMSkpCistIE51bWVyaWMgdHlwZSBzdWZmaXhlcyBhcmUgcHJlc2VydmVkIGFzLWlzOiBiIChieXRlKSwgcyAoc2hvcnQpLCBpIChpbnQpLCBsIChsb25nKSwgZiAoZmxvYXQpLCBkIChkb3VibGUpLCBtIChCaWdEZWNpbWFsKSwgbiAoQmlnSW50ZWdlcikg4oCUIGUuZy4sIDFiLCAxcywgMWksIDBsLCAxLjVmLCAxLjVkLCAxbSwgMW4KKy0gTm8gSmF2YSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9ycyAobmV3IEFycmF5TGlzdDw+KCksIG5ldyBIYXNoU2V0PD4oKSwgbmV3IExpbmtlZEhhc2hNYXA8PigpKSDigJQgdXNlIGxpc3Qvc2V0L21hcCBsaXRlcmFscworCitSZXR1cm4gT05MWSB0aGUgbm9ybWFsaXplZCBHcmVtbGluIHF1ZXJ5LiBObyBleHBsYW5hdGlvbiwgbm8gbWFya2Rvd24sIG5vIHN1cnJvdW5kaW5nIHRleHQuYDsKKworLyoqCisgKiBOb3JtYWxpemVzIGEgR3JlbWxpbiBxdWVyeSB0byBjYW5vbmljYWwgZm9ybWF0IHVzaW5nIE1DUCBzYW1wbGluZy4KKyAqIERlbGVnYXRlcyB0byB0aGUgaG9zdCBMTE0gY2xpZW50IOKAlCBubyBBUEkga2V5IG9yIHZlbmRvciBkZXBlbmRlbmN5IHJlcXVpcmVkLgorICoKKyAqIEBwYXJhbSBxdWVyeSAtIFByZS1wcm9jZXNzZWQgR3JlbWxpbiBxdWVyeSAoYWZ0ZXIgbWVjaGFuaWNhbCBub3JtYWxpemF0aW9uKQorICogQHBhcmFtIHNlcnZlciAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2UgdXNlZCB0byBpc3N1ZSB0aGUgc2FtcGxpbmcgcmVxdWVzdAorICogQHJldHVybnMgTm9ybWFsaXplZCBjYW5vbmljYWwgR3JlbWxpbiBxdWVyeSBzdHJpbmcKKyAqIEB0aHJvd3MgSWYgdGhlIGNsaWVudCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIG9yIHRoZSByZXNwb25zZSBpcyBub3QgdGV4dAorICovCitleHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplV2l0aExsbShxdWVyeTogc3RyaW5nLCBzZXJ2ZXI6IFNlcnZlcik6IFByb21pc2U8c3RyaW5nPiB7CisgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlcnZlci5jcmVhdGVNZXNzYWdlKHsKKyAgICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiB7IHR5cGU6ICd0ZXh0JywgdGV4dDogcXVlcnkgfSB9XSwKKyAgICBzeXN0ZW1Qcm9tcHQ6IFNZU1RFTV9QUk9NUFQsCisgICAgbWF4VG9rZW5zOiAxMDI0LAorICB9KTsKKworICBpZiAocmVzdWx0LmNvbnRlbnQudHlwZSAhPT0gJ3RleHQnKSB7CisgICAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIHJlc3BvbnNlIHR5cGUgZnJvbSBMTE0gbm9ybWFsaXphdGlvbicpOworICB9CisKKyAgcmV0dXJuIHJlc3VsdC5jb250ZW50LnRleHQudHJpbSgpOworfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdHJhbnNsYXRvci9ub3JtYWxpemVycy9zaGFyZWQudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy90cmFuc2xhdG9yL25vcm1hbGl6ZXJzL3NoYXJlZC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjM4YTgyCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdHJhbnNsYXRvci9ub3JtYWxpemVycy9zaGFyZWQudHMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvKioKKyAqIEBmaWxlb3ZlcnZpZXcgTWVjaGFuaWNhbCBwcmUtbm9ybWFsaXphdGlvbiB0cmFuc2Zvcm1zIGFwcGxpZWQgYmVmb3JlIExMTSBub3JtYWxpemF0aW9uLgorICoKKyAqIFRoZXNlIHRyYW5zZm9ybXMgYXJlIGNoZWFwLCBkZXRlcm1pbmlzdGljLCBhbmQgbGFuZ3VhZ2UtYWdub3N0aWMuIFRoZXkgcmVkdWNlIG5vaXNlCisgKiBiZWZvcmUgdGhlIExMTSBzZWVzIHRoZSBxdWVyeToKKyAqICAgMS4gU3RyaXAgZ3JlbWxpbmdvLiBwcmVmaXggKEdvIGRpYWxlY3QpCisgKiAgIDIuIFN0cmlwIHRyYWlsaW5nIF8gZnJvbSBrbm93biBzdGVwIG5hbWVzIChyZXNlcnZlZCB3b3JkIHdvcmthcm91bmRzKQorICogICAzLiBDb252ZXJ0IFBhc2NhbENhc2Ugc3RlcCBuYW1lcyB0byBjYW1lbENhc2UgKEdvLy5ORVQgZGlhbGVjdHMpCisgKi8KKworaW1wb3J0IHsgR1JFTUxJTl9TVEVQX05BTUVTLCBHUkVNTElOX1NURVBfTkFNRVNfUEFTQ0FMIH0gZnJvbSAnLi4vc3RlcE5hbWVzLmpzJzsKKworLyoqCisgKiBBcHBsaWVzIG1lY2hhbmljYWwgcHJlLW5vcm1hbGl6YXRpb24gdG8gYSBHcmVtbGluIHF1ZXJ5IHN0cmluZy4KKyAqIFNhZmUgdG8gYXBwbHkgdG8gYW55IGRpYWxlY3QgaW5jbHVkaW5nIGNhbm9uaWNhbCDigJQgdHJhbnNmb3JtcyBhcmUgaWRlbXBvdGVudC4KKyAqLworZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TWVjaGFuaWNhbE5vcm1hbGl6YXRpb24ocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7CisgIGxldCByZXN1bHQgPSBxdWVyeTsKKworICAvLyAxLiBTdHJpcCBncmVtbGluZ28uIHByZWZpeAorICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvZ3JlbWxpbmdvXC4vZywgJycpOworCisgIC8vIDIuIFN0cmlwIHRyYWlsaW5nIF8gZnJvbSBrbm93biBzdGVwIG5hbWVzIGJlZm9yZSAoCisgIC8vICAgIGUuZy4gaW5fKCDihpIgaW4oLCBmcm9tXygg4oaSIGZyb20oCisgIC8vICAgIE9ubHkgYXBwbGllcyB0byBuYW1lcyBpbiBHUkVNTElOX1NURVBfTkFNRVMgdG8gYXZvaWQgY29ycnVwdGluZyB1c2VyIGlkZW50aWZpZXJzLgorICByZXN1bHQgPSByZXN1bHQucmVwbGFjZSgvXGIoXHcrKV9ccypcKC9nLCAoX21hdGNoLCBuYW1lOiBzdHJpbmcpID0+IHsKKyAgICBpZiAoR1JFTUxJTl9TVEVQX05BTUVTLmhhcyhuYW1lKSkgeworICAgICAgcmV0dXJuIGAke25hbWV9KGA7CisgICAgfQorICAgIHJldHVybiBfbWF0Y2g7CisgIH0pOworCisgIC8vIDMuIENvbnZlcnQgUGFzY2FsQ2FzZSBzdGVwIG5hbWVzIOKGkiBjYW1lbENhc2UKKyAgLy8gICAgZS5nLiBIYXNMYWJlbCgg4oaSIGhhc0xhYmVsKCwgT3V0KCDihpIgb3V0KAorICAvLyAgICBPbmx5IGNvbnZlcnRzIHRva2VucyB3aGVyZSAoYSkgdGhlIFBhc2NhbENhc2UgZm9ybSBpcyBpbiBHUkVNTElOX1NURVBfTkFNRVNfUEFTQ0FMIGFuZAorICAvLyAgICAoYikgdGhlIHJlc3VsdGluZyBjYW1lbENhc2UgZm9ybSBpcyBpbiBHUkVNTElOX1NURVBfTkFNRVMuIFRoZSBzZWNvbmQgY2hlY2sgaGFuZGxlcworICAvLyAgICBzdGVwcyBsaWtlIFYgYW5kIEUgd2hvc2UgY2Fub25pY2FsIGZvcm0gaXMgYWxyZWFkeSB1cHBlcmNhc2Ug4oCUIGNvbnZlcnRpbmcgdGhlbSB0bworICAvLyAgICB2KCBvciBlKCB3b3VsZCBiZSB3cm9uZy4KKyAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1xiKFtBLVpdW2EtekEtWjAtOV0qKVxzKlwoL2csIChfbWF0Y2gsIG5hbWU6IHN0cmluZykgPT4geworICAgIGlmIChHUkVNTElOX1NURVBfTkFNRVNfUEFTQ0FMLmhhcyhuYW1lKSkgeworICAgICAgY29uc3QgY2FtZWwgPSBgJHtuYW1lLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpfSR7bmFtZS5zbGljZSgxKX1gOworICAgICAgaWYgKEdSRU1MSU5fU1RFUF9OQU1FUy5oYXMoY2FtZWwpKSB7CisgICAgICAgIHJldHVybiBgJHtjYW1lbH0oYDsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIF9tYXRjaDsKKyAgfSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3RyYW5zbGF0b3Ivc3RlcE5hbWVzLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdHJhbnNsYXRvci9zdGVwTmFtZXMudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg3MzI5MwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3RyYW5zbGF0b3Ivc3RlcE5hbWVzLnRzCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vIEdlbmVyYXRlZCBieSBzY3JpcHRzL2dlbmVyYXRlLXN0ZXAtbmFtZXMuanMg4oCUIGRvIG5vdCBlZGl0IG1hbnVhbGx5LgorLy8gUmUtcnVuIGBucG0gcnVuIGdlbmVyYXRlLXN0ZXAtbmFtZXNgIGFmdGVyIGNoYW5nZXMgdG8gR3JlbWxpbi5nNC4KKworLyoqCisgKiBDYW5vbmljYWwgY2FtZWxDYXNlIEdyZW1saW4gc3RlcCBuYW1lcyBkZXJpdmVkIGZyb20gdGhlIGdyZW1saW4tbGFuZ3VhZ2UgZ3JhbW1hci4KKyAqIFVzZWQgdG8gc2FmZWx5IGlkZW50aWZ5IHN0ZXAgbmFtZXMgZHVyaW5nIG5vcm1hbGl6YXRpb24uCisgKi8KK2V4cG9ydCBjb25zdCBHUkVNTElOX1NURVBfTkFNRVM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFsKKyAgJ0UnLAorICAnVicsCisgICdhZGRFJywKKyAgJ2FkZFYnLAorICAnYWdncmVnYXRlJywKKyAgJ2FsbCcsCisgICdhbmQnLAorICAnYW55JywKKyAgJ2FzJywKKyAgJ2FzQm9vbCcsCisgICdhc0RhdGUnLAorICAnYXNTdHJpbmcnLAorICAnYmFycmllcicsCisgICdib3RoJywKKyAgJ2JvdGhFJywKKyAgJ2JvdGhWJywKKyAgJ2JyYW5jaCcsCisgICdieScsCisgICdjYWxsJywKKyAgJ2NhcCcsCisgICdjaG9vc2UnLAorICAnY29hbGVzY2UnLAorICAnY29pbicsCisgICdjb21iaW5lJywKKyAgJ2NvbmNhdCcsCisgICdjb25qb2luJywKKyAgJ2Nvbm5lY3RlZENvbXBvbmVudCcsCisgICdjb25zdGFudCcsCisgICdjb3VudCcsCisgICdjeWNsaWNQYXRoJywKKyAgJ2RhdGVBZGQnLAorICAnZGF0ZURpZmYnLAorICAnZGVkdXAnLAorICAnZGlmZmVyZW5jZScsCisgICdkaXNjYXJkJywKKyAgJ2Rpc2p1bmN0JywKKyAgJ2Ryb3AnLAorICAnZWxlbWVudCcsCisgICdlbGVtZW50TWFwJywKKyAgJ2VtaXQnLAorICAnZmFpbCcsCisgICdmaWx0ZXInLAorICAnZmxhdE1hcCcsCisgICdmb2xkJywKKyAgJ2Zvcm1hdCcsCisgICdmcm9tJywKKyAgJ2dyb3VwJywKKyAgJ2dyb3VwQ291bnQnLAorICAnaGFzJywKKyAgJ2hhc0lkJywKKyAgJ2hhc0tleScsCisgICdoYXNMYWJlbCcsCisgICdoYXNOb3QnLAorICAnaGFzVmFsdWUnLAorICAnaWQnLAorICAnaWRlbnRpdHknLAorICAnaW4nLAorICAnaW5FJywKKyAgJ2luVicsCisgICdpbmRleCcsCisgICdpbmplY3QnLAorICAnaW50ZXJzZWN0JywKKyAgJ2lvJywKKyAgJ2lzJywKKyAgJ2tleScsCisgICdsVHJpbScsCisgICdsYWJlbCcsCisgICdsZW5ndGgnLAorICAnbGltaXQnLAorICAnbG9jYWwnLAorICAnbG9vcHMnLAorICAnbWFwJywKKyAgJ21hdGNoJywKKyAgJ21hdGgnLAorICAnbWF4JywKKyAgJ21lYW4nLAorICAnbWVyZ2UnLAorICAnbWVyZ2VFJywKKyAgJ21lcmdlVicsCisgICdtaW4nLAorICAnbm9uZScsCisgICdub3QnLAorICAnb3B0aW9uJywKKyAgJ29wdGlvbmFsJywKKyAgJ29yJywKKyAgJ29yZGVyJywKKyAgJ290aGVyVicsCisgICdvdXQnLAorICAnb3V0RScsCisgICdvdXRWJywKKyAgJ3BhZ2VSYW5rJywKKyAgJ3BhdGgnLAorICAncGVlclByZXNzdXJlJywKKyAgJ3Byb2R1Y3QnLAorICAncHJvZmlsZScsCisgICdwcm9qZWN0JywKKyAgJ3Byb3BlcnRpZXMnLAorICAncHJvcGVydHknLAorICAncHJvcGVydHlNYXAnLAorICAnclRyaW0nLAorICAncmFuZ2UnLAorICAncmVhZCcsCisgICdyZXBlYXQnLAorICAncmVwbGFjZScsCisgICdyZXZlcnNlJywKKyAgJ3NhY2snLAorICAnc2FtcGxlJywKKyAgJ3NlbGVjdCcsCisgICdzaG9ydGVzdFBhdGgnLAorICAnc2lkZUVmZmVjdCcsCisgICdzaW1wbGVQYXRoJywKKyAgJ3NraXAnLAorICAnc3BsaXQnLAorICAnc3ViZ3JhcGgnLAorICAnc3Vic3RyaW5nJywKKyAgJ3N1bScsCisgICd0YWlsJywKKyAgJ3RpbWVMaW1pdCcsCisgICd0aW1lcycsCisgICd0bycsCisgICd0b0UnLAorICAndG9Mb3dlcicsCisgICd0b1VwcGVyJywKKyAgJ3RvVicsCisgICd0cmVlJywKKyAgJ3RyaW0nLAorICAndW5mb2xkJywKKyAgJ3VuaW9uJywKKyAgJ3VudGlsJywKKyAgJ3ZhbHVlJywKKyAgJ3ZhbHVlTWFwJywKKyAgJ3ZhbHVlcycsCisgICd3aGVyZScsCisgICd3aXRoJywKKyAgJ3dyaXRlJywKK10pOworCisvKioKKyAqIFBhc2NhbENhc2UgZXF1aXZhbGVudHMgb2YgR3JlbWxpbiBzdGVwIG5hbWVzLCBhcyB1c2VkIGJ5IEdvIGFuZCAuTkVUIGRpYWxlY3RzLgorICogVXNlZCBhcyBhbiBhbGxvd2xpc3Qgd2hlbiBjb252ZXJ0aW5nIFBhc2NhbENhc2UgdG9rZW5zIHRvIGNhbWVsQ2FzZSBkdXJpbmcgbm9ybWFsaXphdGlvbi4KKyAqLworZXhwb3J0IGNvbnN0IEdSRU1MSU5fU1RFUF9OQU1FU19QQVNDQUw6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFsKKyAgJ0UnLAorICAnVicsCisgICdBZGRFJywKKyAgJ0FkZFYnLAorICAnQWdncmVnYXRlJywKKyAgJ0FsbCcsCisgICdBbmQnLAorICAnQW55JywKKyAgJ0FzJywKKyAgJ0FzQm9vbCcsCisgICdBc0RhdGUnLAorICAnQXNTdHJpbmcnLAorICAnQmFycmllcicsCisgICdCb3RoJywKKyAgJ0JvdGhFJywKKyAgJ0JvdGhWJywKKyAgJ0JyYW5jaCcsCisgICdCeScsCisgICdDYWxsJywKKyAgJ0NhcCcsCisgICdDaG9vc2UnLAorICAnQ29hbGVzY2UnLAorICAnQ29pbicsCisgICdDb21iaW5lJywKKyAgJ0NvbmNhdCcsCisgICdDb25qb2luJywKKyAgJ0Nvbm5lY3RlZENvbXBvbmVudCcsCisgICdDb25zdGFudCcsCisgICdDb3VudCcsCisgICdDeWNsaWNQYXRoJywKKyAgJ0RhdGVBZGQnLAorICAnRGF0ZURpZmYnLAorICAnRGVkdXAnLAorICAnRGlmZmVyZW5jZScsCisgICdEaXNjYXJkJywKKyAgJ0Rpc2p1bmN0JywKKyAgJ0Ryb3AnLAorICAnRWxlbWVudCcsCisgICdFbGVtZW50TWFwJywKKyAgJ0VtaXQnLAorICAnRmFpbCcsCisgICdGaWx0ZXInLAorICAnRmxhdE1hcCcsCisgICdGb2xkJywKKyAgJ0Zvcm1hdCcsCisgICdGcm9tJywKKyAgJ0dyb3VwJywKKyAgJ0dyb3VwQ291bnQnLAorICAnSGFzJywKKyAgJ0hhc0lkJywKKyAgJ0hhc0tleScsCisgICdIYXNMYWJlbCcsCisgICdIYXNOb3QnLAorICAnSGFzVmFsdWUnLAorICAnSWQnLAorICAnSWRlbnRpdHknLAorICAnSW4nLAorICAnSW5FJywKKyAgJ0luVicsCisgICdJbmRleCcsCisgICdJbmplY3QnLAorICAnSW50ZXJzZWN0JywKKyAgJ0lvJywKKyAgJ0lzJywKKyAgJ0tleScsCisgICdMVHJpbScsCisgICdMYWJlbCcsCisgICdMZW5ndGgnLAorICAnTGltaXQnLAorICAnTG9jYWwnLAorICAnTG9vcHMnLAorICAnTWFwJywKKyAgJ01hdGNoJywKKyAgJ01hdGgnLAorICAnTWF4JywKKyAgJ01lYW4nLAorICAnTWVyZ2UnLAorICAnTWVyZ2VFJywKKyAgJ01lcmdlVicsCisgICdNaW4nLAorICAnTm9uZScsCisgICdOb3QnLAorICAnT3B0aW9uJywKKyAgJ09wdGlvbmFsJywKKyAgJ09yJywKKyAgJ09yZGVyJywKKyAgJ090aGVyVicsCisgICdPdXQnLAorICAnT3V0RScsCisgICdPdXRWJywKKyAgJ1BhZ2VSYW5rJywKKyAgJ1BhdGgnLAorICAnUGVlclByZXNzdXJlJywKKyAgJ1Byb2R1Y3QnLAorICAnUHJvZmlsZScsCisgICdQcm9qZWN0JywKKyAgJ1Byb3BlcnRpZXMnLAorICAnUHJvcGVydHknLAorICAnUHJvcGVydHlNYXAnLAorICAnUlRyaW0nLAorICAnUmFuZ2UnLAorICAnUmVhZCcsCisgICdSZXBlYXQnLAorICAnUmVwbGFjZScsCisgICdSZXZlcnNlJywKKyAgJ1NhY2snLAorICAnU2FtcGxlJywKKyAgJ1NlbGVjdCcsCisgICdTaG9ydGVzdFBhdGgnLAorICAnU2lkZUVmZmVjdCcsCisgICdTaW1wbGVQYXRoJywKKyAgJ1NraXAnLAorICAnU3BsaXQnLAorICAnU3ViZ3JhcGgnLAorICAnU3Vic3RyaW5nJywKKyAgJ1N1bScsCisgICdUYWlsJywKKyAgJ1RpbWVMaW1pdCcsCisgICdUaW1lcycsCisgICdUbycsCisgICdUb0UnLAorICAnVG9Mb3dlcicsCisgICdUb1VwcGVyJywKKyAgJ1RvVicsCisgICdUcmVlJywKKyAgJ1RyaW0nLAorICAnVW5mb2xkJywKKyAgJ1VuaW9uJywKKyAgJ1VudGlsJywKKyAgJ1ZhbHVlJywKKyAgJ1ZhbHVlTWFwJywKKyAgJ1ZhbHVlcycsCisgICdXaGVyZScsCisgICdXaXRoJywKKyAgJ1dyaXRlJywKK10pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvdXRpbHMvcmVzdWx0LW1ldGFkYXRhLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdXRpbHMvcmVzdWx0LW1ldGFkYXRhLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy91dGlscy9yZXN1bHQtbWV0YWRhdGEudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3V0aWxzL3Jlc3VsdC1tZXRhZGF0YS50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvdXRpbHMvcmVzdWx0LXBhcnNlci50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3V0aWxzL3Jlc3VsdC1wYXJzZXIudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL3V0aWxzL3Jlc3VsdC1wYXJzZXIudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3Avc3JjL3V0aWxzL3Jlc3VsdC1wYXJzZXIudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL3V0aWxzL3R5cGUtZ3VhcmRzLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC9zcmMvdXRpbHMvdHlwZS1ndWFyZHMudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL3V0aWxzL3R5cGUtZ3VhcmRzLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3NyYy91dGlscy90eXBlLWd1YXJkcy50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9jb25maWcudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvY29uZmlnLnRlc3QudHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjMGMxNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvY29uZmlnLnRlc3QudHMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyoqCisgKiBUZXN0cyBmb3IgRWZmZWN0LWJhc2VkIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBhbmQgdmFsaWRhdGlvbi4KKyAqLworCitpbXBvcnQgeyBFZmZlY3QsIFJlZGFjdGVkLCBPcHRpb24gfSBmcm9tICdlZmZlY3QnOworaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUVhY2ggfSBmcm9tICdAamVzdC9nbG9iYWxzJzsKK2ltcG9ydCB7IEdSRU1MSU5fVkVSU0lPTiwgU0VSVkVSX0lORk8gfSBmcm9tICcuLi9zcmMvY29uc3RhbnRzJzsKK2ltcG9ydCB7IEFwcENvbmZpZywgdHlwZSBBcHBDb25maWdUeXBlIH0gZnJvbSAnLi4vc3JjL2NvbmZpZyc7CisKK2Rlc2NyaWJlKCdFZmZlY3QtYmFzZWQgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50JywgKCkgPT4geworICBjb25zdCBvcmlnaW5hbEVudiA9IHByb2Nlc3MuZW52OworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIC8vIFJlc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcworICAgIHByb2Nlc3MuZW52ID0geyAuLi5vcmlnaW5hbEVudiB9OworICB9KTsKKworICBhZnRlckVhY2goKCkgPT4geworICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgZW52aXJvbm1lbnQKKyAgICBwcm9jZXNzLmVudiA9IG9yaWdpbmFsRW52OworICB9KTsKKworICBkZXNjcmliZSgnQXBwQ29uZmlnIEVmZmVjdCcsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgY29tcGxldGUgY29uZmlndXJhdGlvbicsIGFzeW5jICgpID0+IHsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyL2cnOworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfVVNFX1NTTCA9ICdmYWxzZSc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9VU0VSTkFNRSA9ICd0ZXN0dXNlcic7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9QQVNTV09SRCA9ICd0ZXN0cGFzcyc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9MT0dfTEVWRUwgPSAnaW5mbyc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9JRExFX1RJTUVPVVQgPSAnMzAwJzsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VOVU1fRElTQ09WRVJZX0VOQUJMRUQgPSAndHJ1ZSc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX0NBUkRJTkFMSVRZX1RIUkVTSE9MRCA9ICcxMCc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX1BST1BFUlRZX0RFTllMSVNUID0gJ2lkLHBrLG5hbWUnOworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUyA9ICdmYWxzZSc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTID0gJzEwJzsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX0NPVU5UUyA9ICd0cnVlJzsKKworICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKKworICAgICAgZXhwZWN0KE9wdGlvbi5pc1NvbWUocmVzdWx0LmdyZW1saW4uZW5kcG9pbnQpKS50b0JlKHRydWUpOworICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLmVuZHBvaW50KS50b0VxdWFsKAorICAgICAgICBPcHRpb24uc29tZSh7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA4MTgyLCB0cmF2ZXJzYWxTb3VyY2U6ICdnJyB9KQorICAgICAgKTsKKyAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoeworICAgICAgICBncmVtbGluOiB7CisgICAgICAgICAgdXNlU1NMOiBmYWxzZSwKKyAgICAgICAgICBpZGxlVGltZW91dDogMzAwLAorICAgICAgICB9LAorICAgICAgICBzY2hlbWE6IHsKKyAgICAgICAgICBlbnVtRGlzY292ZXJ5RW5hYmxlZDogdHJ1ZSwKKyAgICAgICAgICBlbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQ6IDEwLAorICAgICAgICAgIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBbJ2lkJywgJ3BrJywgJ25hbWUnXSwKKyAgICAgICAgICBpbmNsdWRlU2FtcGxlVmFsdWVzOiBmYWxzZSwKKyAgICAgICAgICBtYXhFbnVtVmFsdWVzOiAxMCwKKyAgICAgICAgICBpbmNsdWRlQ291bnRzOiB0cnVlLAorICAgICAgICB9LAorICAgICAgICBsb2dnaW5nOiB7CisgICAgICAgICAgbGV2ZWw6ICdpbmZvJywKKyAgICAgICAgfSwKKyAgICAgICAgc2VydmVyOiB7CisgICAgICAgICAgbmFtZTogU0VSVkVSX0lORk8uTkFNRSwKKyAgICAgICAgICB2ZXJzaW9uOiBHUkVNTElOX1ZFUlNJT04sCisgICAgICAgIH0sCisgICAgICB9KTsKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi51c2VybmFtZSkudG9FcXVhbChPcHRpb24uc29tZSgndGVzdHVzZXInKSk7CisgICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4ucGFzc3dvcmQpLnRvRXF1YWwoT3B0aW9uLnNvbWUoUmVkYWN0ZWQubWFrZSgndGVzdHBhc3MnKSkpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbWluaW1hbCBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdHMnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7CisKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7CisKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5lbmRwb2ludCkudG9FcXVhbCgKKyAgICAgICAgT3B0aW9uLnNvbWUoeyBob3N0OiAnbG9jYWxob3N0JywgcG9ydDogODE4MiwgdHJhdmVyc2FsU291cmNlOiAnZycgfSkKKyAgICAgICk7CisgICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsKKyAgICAgICAgZ3JlbWxpbjogeworICAgICAgICAgIHVzZVNTTDogZmFsc2UsCisgICAgICAgICAgaWRsZVRpbWVvdXQ6IDMwMCwKKyAgICAgICAgfSwKKyAgICAgICAgc2NoZW1hOiB7CisgICAgICAgICAgZW51bURpc2NvdmVyeUVuYWJsZWQ6IHRydWUsCisgICAgICAgICAgZW51bUNhcmRpbmFsaXR5VGhyZXNob2xkOiAxMCwKKyAgICAgICAgICBpbmNsdWRlU2FtcGxlVmFsdWVzOiBmYWxzZSwKKyAgICAgICAgICBtYXhFbnVtVmFsdWVzOiAxMCwKKyAgICAgICAgICBpbmNsdWRlQ291bnRzOiBmYWxzZSwKKyAgICAgICAgfSwKKyAgICAgICAgbG9nZ2luZzogeworICAgICAgICAgIGxldmVsOiAnaW5mbycsCisgICAgICAgIH0sCisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgc3VjY2VlZCB3aXRoIG5vIEdSRU1MSU5fTUNQX0VORFBPSU5UIChvZmZsaW5lIG1vZGUpJywgYXN5bmMgKCkgPT4geworICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UOworCisgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOworCisgICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4uZW5kcG9pbnQpLnRvRXF1YWwoT3B0aW9uLm5vbmUoKSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHBhcnNlIGJvb2xlYW4gdmFsdWVzIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1VTRV9TU0wgPSAndHJ1ZSc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEID0gJ3RydWUnOworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUyA9ICd0cnVlJzsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX0NPVU5UUyA9ICdmYWxzZSc7CisKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7CisKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi51c2VTU0wpLnRvQmUodHJ1ZSk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtRGlzY292ZXJ5RW5hYmxlZCkudG9CZSh0cnVlKTsKKyAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmluY2x1ZGVTYW1wbGVWYWx1ZXMpLnRvQmUodHJ1ZSk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5pbmNsdWRlQ291bnRzKS50b0JlKGZhbHNlKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgcGFyc2UgZW5kcG9pbnQgd2l0aCB0cmF2ZXJzYWwgc291cmNlJywgYXN5bmMgKCkgPT4geworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OjgxODIvY3VzdG9tJzsKKworICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKKworICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLmVuZHBvaW50KS50b0VxdWFsKAorICAgICAgICBPcHRpb24uc29tZSh7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA4MTgyLCB0cmF2ZXJzYWxTb3VyY2U6ICdjdXN0b20nIH0pCisgICAgICApOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBwYXJzZSBjb21tYS1zZXBhcmF0ZWQgZGVueWxpc3QnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX1BST1BFUlRZX0RFTllMSVNUID0gJ2lkLCBwaywgbmFtZSwgZGVzY3JpcHRpb24nOworCisgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOworCisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtUHJvcGVydHlEZW55TGlzdCkudG9FcXVhbChbJ2lkJywgJ3BrJywgJ25hbWUnLCAnZGVzY3JpcHRpb24nXSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGxvZyBsZXZlbCBlbnVtJywgYXN5bmMgKCkgPT4geworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OjgxODInOworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfTE9HX0xFVkVMID0gJ2RlYnVnJzsKKworICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKKworICAgICAgZXhwZWN0KHJlc3VsdC5sb2dnaW5nLmxldmVsKS50b0JlKCdkZWJ1ZycpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBmYWlsIHdpdGggaW52YWxpZCBsb2cgbGV2ZWwnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9MT0dfTEVWRUwgPSAnaW52YWxpZCc7CisKKyAgICAgIGF3YWl0IGV4cGVjdChFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpKS5yZWplY3RzLnRvVGhyb3coKTsKKyAgICB9KTsKKworICAgIGl0KCdzaG91bGQgcGFyc2UgbnVtZXJpYyB2YWx1ZXMgY29ycmVjdGx5JywgYXN5bmMgKCkgPT4geworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OjgxODInOworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfSURMRV9USU1FT1VUID0gJzYwMCc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX0NBUkRJTkFMSVRZX1RIUkVTSE9MRCA9ICcyMCc7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTID0gJzE1JzsKKworICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKKworICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLmlkbGVUaW1lb3V0KS50b0JlKDYwMCk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQpLnRvQmUoMjApOworICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEubWF4RW51bVZhbHVlcykudG9CZSgxNSk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBvcHRpb25hbCBhdXRoZW50aWNhdGlvbiBmaWVsZHMnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9VU0VSTkFNRSA9ICd0ZXN0dXNlcic7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9QQVNTV09SRCA9ICd0ZXN0cGFzcyc7CisKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7CisKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi51c2VybmFtZSkudG9FcXVhbChPcHRpb24uc29tZSgndGVzdHVzZXInKSk7CisgICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4ucGFzc3dvcmQpLnRvRXF1YWwoT3B0aW9uLnNvbWUoUmVkYWN0ZWQubWFrZSgndGVzdHBhc3MnKSkpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYW5kbGUgbWlzc2luZyBvcHRpb25hbCBhdXRoZW50aWNhdGlvbiBmaWVsZHMnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7CisgICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfVVNFUk5BTUU7CisgICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfUEFTU1dPUkQ7CisKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7CisKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi51c2VybmFtZSkudG9FcXVhbChPcHRpb24ubm9uZTxzdHJpbmc+KCkpOworICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnBhc3N3b3JkKS50b0VxdWFsKE9wdGlvbi5ub25lPHN0cmluZz4oKSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdFcnJvciBIYW5kbGluZycsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHByb3ZpZGUgbWVhbmluZ2Z1bCBlcnJvciBmb3IgaW52YWxpZCBlbmRwb2ludCBmb3JtYXQnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdpbnZhbGlkLWVuZHBvaW50JzsKKworICAgICAgYXdhaXQgZXhwZWN0KEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZykpLnJlamVjdHMudG9UaHJvdygvSW52YWxpZCBob3N0OnBvcnQgZm9ybWF0Lyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHByb3ZpZGUgbWVhbmluZ2Z1bCBlcnJvciBmb3IgaW52YWxpZCBwb3J0JywgYXN5bmMgKCkgPT4geworICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OmludmFsaWQnOworCisgICAgICBhd2FpdCBleHBlY3QoRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKSkucmVqZWN0cy50b1Rocm93KC9Qb3J0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHByb3ZpZGUgbWVhbmluZ2Z1bCBlcnJvciBmb3IgZW1wdHkgZW5kcG9pbnQnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICcnOworCisgICAgICBhd2FpdCBleHBlY3QoRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKSkucmVqZWN0cy50b1Rocm93KCk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIGhhbmRsZSBtaXNzaW5nIGhvc3Qgb3IgcG9ydCcsIGFzeW5jICgpID0+IHsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJzo4MTgyJzsKKworICAgICAgYXdhaXQgZXhwZWN0KEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZykpLnJlamVjdHMudG9UaHJvdygvSG9zdCBhbmQgcG9ydCBhcmUgcmVxdWlyZWQvKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ0NvbmZpZ3VyYXRpb24gVmFsaWRhdGlvbicsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFsbCByZXF1aXJlZCBjb25maWd1cmF0aW9uIGZpZWxkcyBhcmUgcHJlc2VudCcsIGFzeW5jICgpID0+IHsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyL2cnOworCisgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOworCisgICAgICAvLyBDaGVjayBhbGwgcmVxdWlyZWQgZmllbGRzIGFyZSBwcmVzZW50CisgICAgICBleHBlY3QoT3B0aW9uLmlzU29tZShyZXN1bHQuZ3JlbWxpbi5lbmRwb2ludCkpLnRvQmUodHJ1ZSk7CisgICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udXNlU1NMKS50b0JlRGVmaW5lZCgpOworICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLmlkbGVUaW1lb3V0KS50b0JlRGVmaW5lZCgpOworICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuZW51bURpc2NvdmVyeUVuYWJsZWQpLnRvQmVEZWZpbmVkKCk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQpLnRvQmVEZWZpbmVkKCk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtUHJvcGVydHlEZW55TGlzdCkudG9CZURlZmluZWQoKTsKKyAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmluY2x1ZGVTYW1wbGVWYWx1ZXMpLnRvQmVEZWZpbmVkKCk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5tYXhFbnVtVmFsdWVzKS50b0JlRGVmaW5lZCgpOworICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuaW5jbHVkZUNvdW50cykudG9CZURlZmluZWQoKTsKKyAgICAgIGV4cGVjdChyZXN1bHQuc2VydmVyLm5hbWUpLnRvQmVEZWZpbmVkKCk7CisgICAgICBleHBlY3QocmVzdWx0LnNlcnZlci52ZXJzaW9uKS50b0JlRGVmaW5lZCgpOworICAgICAgZXhwZWN0KHJlc3VsdC5sb2dnaW5nLmxldmVsKS50b0JlRGVmaW5lZCgpOworICAgIH0pOworCisgICAgaXQoJ3Nob3VsZCBoYXZlIGNvcnJlY3QgZGVmYXVsdCB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7CisKKyAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7CisKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5lbmRwb2ludCkudG9FcXVhbCgKKyAgICAgICAgT3B0aW9uLnNvbWUoeyBob3N0OiAnbG9jYWxob3N0JywgcG9ydDogODE4MiwgdHJhdmVyc2FsU291cmNlOiAnZycgfSkKKyAgICAgICk7CisgICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udXNlU1NMKS50b0JlKGZhbHNlKTsKKyAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5pZGxlVGltZW91dCkudG9CZSgzMDApOworICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuZW51bURpc2NvdmVyeUVuYWJsZWQpLnRvQmUodHJ1ZSk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQpLnRvQmUoMTApOworICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuaW5jbHVkZVNhbXBsZVZhbHVlcykudG9CZShmYWxzZSk7CisgICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5tYXhFbnVtVmFsdWVzKS50b0JlKDEwKTsKKyAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmluY2x1ZGVDb3VudHMpLnRvQmUoZmFsc2UpOworICAgICAgZXhwZWN0KHJlc3VsdC5sb2dnaW5nLmxldmVsKS50b0JlKCdpbmZvJyk7CisgICAgfSk7CisKKyAgICBpdCgnc2hvdWxkIHVzZSBFZmZlY3QgZm9yIHR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGFjY2VzcycsICgpID0+IHsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKKworICAgICAgLy8gVGVzdCB0aGF0IEFwcENvbmZpZyBpcyBhbiBFZmZlY3QKKyAgICAgIGV4cGVjdChFZmZlY3QuaXNFZmZlY3QoQXBwQ29uZmlnKSkudG9CZSh0cnVlKTsKKworICAgICAgLy8gVGVzdCB0eXBlIGNvbXBhdGliaWxpdHkKKyAgICAgIGNvbnN0IHRlc3RFZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8QXBwQ29uZmlnVHlwZSwgYW55PiA9IEFwcENvbmZpZzsKKyAgICAgIGV4cGVjdChFZmZlY3QuaXNFZmZlY3QodGVzdEVmZmVjdCkpLnRvQmUodHJ1ZSk7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2VkZ2UtcGF0dGVybnMudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvZWRnZS1wYXR0ZXJucy50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2VkZ2UtcGF0dGVybnMudGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9lZGdlLXBhdHRlcm5zLnRlc3QudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvZ3JlbWxpbnQtZm9ybWF0LnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3Rlc3RzL2dyZW1saW50LWZvcm1hdC50ZXN0LnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTE0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3Rlc3RzL2dyZW1saW50LWZvcm1hdC50ZXN0LnRzCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUFsbCB9IGZyb20gJ0BqZXN0L2dsb2JhbHMnOworCitsZXQgZm9ybWF0UXVlcnk6IChxOiBzdHJpbmcsIG9wdHM/OiBhbnkpID0+IHN0cmluZzsKKworYmVmb3JlQWxsKGFzeW5jICgpID0+IHsKKyAgLy8gSW1wb3J0IHRoZSBjb21waWxlZCBncmVtbGludCBhcnRpZmFjdCBkaXJlY3RseSBmcm9tIHRoZSByZXBvc2l0b3J5IChsaWIvaW5kZXguanMpCisgIGNvbnN0IG1vZCA9IGF3YWl0IGltcG9ydCgnLi4vLi4vZ3JlbWxpbnQvbGliL2luZGV4LmpzJyk7CisgIC8vIFJlc29sdmUgYWNyb3NzIHBvc3NpYmxlIGludGVyb3Agc2hhcGVzCisgIGZvcm1hdFF1ZXJ5ID0KKyAgICAobW9kICYmIChtb2QuZm9ybWF0UXVlcnkgYXMgYW55KSkgfHwKKyAgICAobW9kICYmIG1vZC5kZWZhdWx0ICYmIChtb2QuZGVmYXVsdC5mb3JtYXRRdWVyeSBhcyBhbnkpKSB8fAorICAgIChtb2QgJiYgKG1vZC5kZWZhdWx0IGFzIGFueSkpPy5mb3JtYXRRdWVyeSB8fAorICAgIChtb2QgYXMgYW55KTsKKworICBpZiAoIWZvcm1hdFF1ZXJ5IHx8IHR5cGVvZiBmb3JtYXRRdWVyeSAhPT0gJ2Z1bmN0aW9uJykgeworICAgIHRocm93IG5ldyBFcnJvcigKKyAgICAgICdDb3VsZCBub3QgcmVzb2x2ZSBmb3JtYXRRdWVyeSBmcm9tIGdyZW1saW50IG1vZHVsZS4gUGxlYXNlIGJ1aWxkIGdyZW1saW50IGZpcnN0LicKKyAgICApOworICB9Cit9KTsKKworZGVzY3JpYmUoJ2dyZW1saW50IGZvcm1hdFF1ZXJ5JywgKCkgPT4geworICBjb25zdCBzYW1wbGUgPSBgZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLmhhcygnbmFtZScsJ21hcmtvJykub3V0KCdrbm93cycpLnZhbHVlcygnbmFtZScpYDsKKworICBpdCgnZm9ybWF0cyBhbmQgcmV0dXJucyBhIGRpZmZlcmVudCBzdHJpbmcgdGhhdCBjb250YWlucyBuZXdsaW5lcycsICgpID0+IHsKKyAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRRdWVyeShzYW1wbGUsIHsKKyAgICAgIGluZGVudGF0aW9uOiAyLAorICAgICAgbWF4TGluZUxlbmd0aDogNjAsCisgICAgICBzaG91bGRQbGFjZURvdHNBZnRlckxpbmVCcmVha3M6IHRydWUsCisgICAgfSk7CisgICAgZXhwZWN0KHR5cGVvZiBmb3JtYXR0ZWQpLnRvQmUoJ3N0cmluZycpOworICAgIGV4cGVjdChmb3JtYXR0ZWQpLm5vdC50b0JlKHNhbXBsZSk7CisgICAgZXhwZWN0KGZvcm1hdHRlZC5pbmNsdWRlcygnXG4nKSkudG9CZSh0cnVlKTsKKyAgfSk7CisKKyAgaXQoJ3Byb2R1Y2VzIGRpZmZlcmVudCBvdXRwdXQgZm9yIGRpZmZlcmVudCBpbmRlbnRhdGlvbiBvcHRpb25zJywgKCkgPT4geworICAgIGNvbnN0IGYyID0gZm9ybWF0UXVlcnkoc2FtcGxlLCB7IGluZGVudGF0aW9uOiAyIH0pOworICAgIGNvbnN0IGY0ID0gZm9ybWF0UXVlcnkoc2FtcGxlLCB7IGluZGVudGF0aW9uOiA0IH0pOworICAgIGV4cGVjdChmMikubm90LnRvQmUoZjQpOworCisgICAgY29uc3Qgc2Vjb25kTGluZTIgPSBmMi5zcGxpdCgnXG4nKVsxXSB8fCAnJzsKKyAgICBjb25zdCBzZWNvbmRMaW5lNCA9IGY0LnNwbGl0KCdcbicpWzFdIHx8ICcnOworCisgICAgY29uc3QgbGVhZGluZ1NwYWNlcyA9IChzOiBzdHJpbmcpID0+IHMubWF0Y2goL14gKi8pPy5bMF0ubGVuZ3RoIHx8IDA7CisgICAgZXhwZWN0KGxlYWRpbmdTcGFjZXMoc2Vjb25kTGluZTIpKS50b0JlTGVzc1RoYW5PckVxdWFsKGxlYWRpbmdTcGFjZXMoc2Vjb25kTGluZTQpKTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvdGVzdHMvaW50ZWdyYXRpb24vbWNwLWludGVncmF0aW9uLnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3Rlc3RzL2ludGVncmF0aW9uL21jcC1pbnRlZ3JhdGlvbi50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2ludGVncmF0aW9uL21jcC1pbnRlZ3JhdGlvbi50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW4tbWNwL3Rlc3RzL2ludGVncmF0aW9uL21jcC1pbnRlZ3JhdGlvbi50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL21vZGVscy50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9tb2RlbHMudGVzdC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9tb2RlbHMudGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9tb2RlbHMudGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9wcm9wZXJ0eS1hbmFseXplci50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9wcm9wZXJ0eS1hbmFseXplci50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL3Byb3BlcnR5LWFuYWx5emVyLnRlc3QudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvcHJvcGVydHktYW5hbHl6ZXIudGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9xdWVyeS11dGlscy50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9xdWVyeS11dGlscy50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL3F1ZXJ5LXV0aWxzLnRlc3QudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvcXVlcnktdXRpbHMudGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9yZXNvdXJjZS1yZWFkLmludGVncmF0aW9uLnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3Rlc3RzL3Jlc291cmNlLXJlYWQuaW50ZWdyYXRpb24udGVzdC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODVhMWFhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9yZXNvdXJjZS1yZWFkLmludGVncmF0aW9uLnRlc3QudHMKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiAgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2ltcG9ydCB7IEVmZmVjdCwgTGF5ZXIsIE9wdGlvbiB9IGZyb20gJ2VmZmVjdCc7CitpbXBvcnQgeyBhZnRlckVhY2gsIGJlZm9yZUVhY2gsIGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSAnQGplc3QvZ2xvYmFscyc7CitpbXBvcnQgeyBDbGllbnQgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL2NsaWVudC9pbmRleC5qcyc7CitpbXBvcnQgeyBJbk1lbW9yeVRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvaW5NZW1vcnkuanMnOworaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJzsKK2ltcG9ydCB7IHJlZ2lzdGVyRWZmZWN0UmVzb3VyY2VIYW5kbGVycyB9IGZyb20gJy4uL3NyYy9oYW5kbGVycy9yZXNvdXJjZXMnOworaW1wb3J0IHsgUkVTT1VSQ0VfVVJJUyB9IGZyb20gJy4uL3NyYy9jb25zdGFudHMnOworaW1wb3J0IHR5cGUgeyBBcHBDb25maWdUeXBlIH0gZnJvbSAnLi4vc3JjL2NvbmZpZyc7CitpbXBvcnQgeyBHcmVtbGluU2VydmljZSB9IGZyb20gJy4uL3NyYy9ncmVtbGluL3NlcnZpY2UnOworaW1wb3J0IHR5cGUgeyBHcmFwaFNjaGVtYSwgR3JlbWxpblF1ZXJ5UmVzdWx0IH0gZnJvbSAnLi4vc3JjL2dyZW1saW4vbW9kZWxzJzsKK2NvbnN0IG1ha2VDb25maWcgPSAoKTogQXBwQ29uZmlnVHlwZSA9PgorICAoeworICAgIGdyZW1saW46IHsKKyAgICAgIGVuZHBvaW50OiBPcHRpb24uc29tZSh7IGhvc3Q6ICdsb2NhbGhvc3QnLCBwb3J0OiA4MTgyLCB0cmF2ZXJzYWxTb3VyY2U6ICdnJyB9KSwKKyAgICAgIHVzZVNTTDogZmFsc2UsCisgICAgICB1c2VybmFtZTogT3B0aW9uLm5vbmUoKSwKKyAgICAgIHBhc3N3b3JkOiBPcHRpb24ubm9uZSgpLAorICAgICAgaWRsZVRpbWVvdXQ6IDMwMCwKKyAgICB9LAorICAgIHNjaGVtYTogeworICAgICAgZW51bURpc2NvdmVyeUVuYWJsZWQ6IHRydWUsCisgICAgICBlbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQ6IDEwLAorICAgICAgZW51bVByb3BlcnR5RGVueUxpc3Q6IFtdLAorICAgICAgaW5jbHVkZVNhbXBsZVZhbHVlczogZmFsc2UsCisgICAgICBtYXhFbnVtVmFsdWVzOiAxMCwKKyAgICAgIGluY2x1ZGVDb3VudHM6IGZhbHNlLAorICAgIH0sCisgICAgc2VydmVyOiB7IG5hbWU6ICdncmVtbGluLW1jcCcsIHZlcnNpb246ICd0ZXN0JyB9LAorICAgIGxvZ2dpbmc6IHsgbGV2ZWw6ICdpbmZvJywgc3RydWN0dXJlZDogdHJ1ZSB9LAorICB9KSBhcyB1bmtub3duIGFzIEFwcENvbmZpZ1R5cGU7Citjb25zdCBtYWtlRmFrZVJ1bnRpbWUgPSAoc3RhdHVzUmVzdWx0OiAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnID0gJ2Nvbm5lY3RlZCcpID0+IHsKKyAgY29uc3Qgc2NoZW1hOiBHcmFwaFNjaGVtYSA9IHsKKyAgICB2ZXJ0aWNlczogW10sCisgICAgZWRnZXM6IFtdLAorICAgIGVkZ2VfcGF0dGVybnM6IFtdLAorICAgIG1ldGFkYXRhOiB7CisgICAgICBnZW5lcmF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKKyAgICAgIGdlbmVyYXRlZF9ieTogJ3Rlc3QnLAorICAgICAgc2FtcGxlX3NpemVfcGVyX2xhYmVsOiAwLAorICAgICAgb3B0aW1pemF0aW9uX3NldHRpbmdzOiB7CisgICAgICAgIGluY2x1ZGVfY291bnRzOiBmYWxzZSwKKyAgICAgICAgaW5jbHVkZV9zYW1wbGVfdmFsdWVzOiBmYWxzZSwKKyAgICAgICAgbWF4X2VudW1fdmFsdWVzOiAxMCwKKyAgICAgIH0sCisgICAgfSwKKyAgfTsKKworICBjb25zdCBxdWVyeVJlc3VsdDogR3JlbWxpblF1ZXJ5UmVzdWx0ID0geworICAgIHJlc3VsdHM6IFtdLAorICAgIG1lc3NhZ2U6ICdvaycsCisgIH07CisKKyAgY29uc3QgZmFrZVNlcnZpY2UgPSBHcmVtbGluU2VydmljZS5vZih7CisgICAgZ2V0U3RhdHVzOiBFZmZlY3Quc3VjY2VlZCh7IHN0YXR1czogc3RhdHVzUmVzdWx0IH0pLAorICAgIGdldFNjaGVtYTogRWZmZWN0LnN1Y2NlZWQoc2NoZW1hKSwKKyAgICBnZXRDYWNoZWRTY2hlbWE6IEVmZmVjdC5zdWNjZWVkKG51bGwpLAorICAgIHJlZnJlc2hTY2hlbWFDYWNoZTogRWZmZWN0LnZvaWQsCisgICAgZXhlY3V0ZVF1ZXJ5OiAocXVlcnk6IHN0cmluZykgPT4geworICAgICAgdm9pZCBxdWVyeTsKKyAgICAgIHJldHVybiBFZmZlY3Quc3VjY2VlZChxdWVyeVJlc3VsdCk7CisgICAgfSwKKyAgICBoZWFsdGhDaGVjazogRWZmZWN0LnN1Y2NlZWQoeworICAgICAgaGVhbHRoeTogc3RhdHVzUmVzdWx0ID09PSAnY29ubmVjdGVkJywKKyAgICAgIGRldGFpbHM6IHN0YXR1c1Jlc3VsdCA9PT0gJ2Nvbm5lY3RlZCcgPyAnQ29ubmVjdGVkJyA6ICdDb25uZWN0aW9uIHVuYXZhaWxhYmxlJywKKyAgICB9KSwKKyAgfSk7CisgIHJldHVybiBFZmZlY3QucnVuU3luYygKKyAgICBFZmZlY3QucHJvdmlkZShFZmZlY3QucnVudGltZTxHcmVtbGluU2VydmljZT4oKSwgTGF5ZXIuc3VjY2VlZChHcmVtbGluU2VydmljZSwgZmFrZVNlcnZpY2UpKQorICApOworfTsKK2Rlc2NyaWJlKCdyZXNvdXJjZSByZWFkIGludGVncmF0aW9uJywgKCkgPT4geworICBjb25zdCBvcmlnaW5hbEVuZHBvaW50ID0gcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQ7CisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyL2cnOworICB9KTsKKyAgYWZ0ZXJFYWNoKCgpID0+IHsKKyAgICBpZiAodHlwZW9mIG9yaWdpbmFsRW5kcG9pbnQgPT09ICdzdHJpbmcnKSB7CisgICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9IG9yaWdpbmFsRW5kcG9pbnQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVDsKKyAgICB9CisgIH0pOworICBpdCgncmV0dXJucyBjb3JyZWN0IFVSSSBhbmQgY29udGVudCBmb3Igc3RhdHVzIGFuZCBzY2hlbWEgcmVzb3VyY2UgcmVhZHMnLCBhc3luYyAoKSA9PiB7CisgICAgY29uc3Qgc2VydmVyID0gbmV3IE1jcFNlcnZlcih7IG5hbWU6ICdyZXNvdXJjZS1yZWFkLXRlc3Qtc2VydmVyJywgdmVyc2lvbjogJzEuMC4wJyB9KTsKKyAgICByZWdpc3RlckVmZmVjdFJlc291cmNlSGFuZGxlcnMoc2VydmVyLCBtYWtlRmFrZVJ1bnRpbWUoJ2Nvbm5lY3RlZCcpLCBtYWtlQ29uZmlnKCkpOworICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbGllbnQoeyBuYW1lOiAncmVzb3VyY2UtcmVhZC10ZXN0LWNsaWVudCcsIHZlcnNpb246ICcxLjAuMCcgfSk7CisgICAgY29uc3QgW2NsaWVudFRyYW5zcG9ydCwgc2VydmVyVHJhbnNwb3J0XSA9IEluTWVtb3J5VHJhbnNwb3J0LmNyZWF0ZUxpbmtlZFBhaXIoKTsKKyAgICBhd2FpdCBQcm9taXNlLmFsbChbc2VydmVyLmNvbm5lY3Qoc2VydmVyVHJhbnNwb3J0KSwgY2xpZW50LmNvbm5lY3QoY2xpZW50VHJhbnNwb3J0KV0pOworICAgIHRyeSB7CisgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjbGllbnQucmVhZFJlc291cmNlKHsgdXJpOiBSRVNPVVJDRV9VUklTLlNUQVRVUyB9KTsKKyAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IGNsaWVudC5yZWFkUmVzb3VyY2UoeyB1cmk6IFJFU09VUkNFX1VSSVMuU0NIRU1BIH0pOworICAgICAgZXhwZWN0KHN0YXR1cy5jb250ZW50c1swXT8udXJpKS50b0JlKFJFU09VUkNFX1VSSVMuU1RBVFVTKTsKKyAgICAgIGNvbnN0IHN0YXR1c1RleHQgPQorICAgICAgICBzdGF0dXMuY29udGVudHNbMF0gJiYgJ3RleHQnIGluIHN0YXR1cy5jb250ZW50c1swXSA/IHN0YXR1cy5jb250ZW50c1swXS50ZXh0IDogJyc7CisgICAgICBleHBlY3Qoc3RhdHVzVGV4dCkudG9CZSgnY29ubmVjdGVkJyk7CisgICAgICBleHBlY3Qoc2NoZW1hLmNvbnRlbnRzWzBdPy51cmkpLnRvQmUoUkVTT1VSQ0VfVVJJUy5TQ0hFTUEpOworICAgICAgY29uc3Qgc2NoZW1hVGV4dCA9CisgICAgICAgIHNjaGVtYS5jb250ZW50c1swXSAmJiAndGV4dCcgaW4gc2NoZW1hLmNvbnRlbnRzWzBdID8gc2NoZW1hLmNvbnRlbnRzWzBdLnRleHQgOiAnJzsKKyAgICAgIGV4cGVjdChzY2hlbWFUZXh0KS50b0NvbnRhaW4oJ3ZlcnRpY2VzJyk7CisgICAgICBleHBlY3Qoc2NoZW1hVGV4dCkudG9Db250YWluKCdlZGdlcycpOworICAgIH0gZmluYWxseSB7CisgICAgICBhd2FpdCBjbGllbnQuY2xvc2UoKTsKKyAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpOworICAgIH0KKyAgfSk7CisgIGl0KCdyZXR1cm5zIG9mZmxpbmUgY29udGVudCB3aGVuIEdSRU1MSU5fTUNQX0VORFBPSU5UIGlzIG5vdCBzZXQnLCBhc3luYyAoKSA9PiB7CisgICAgZGVsZXRlIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UOworICAgIGNvbnN0IHNlcnZlciA9IG5ldyBNY3BTZXJ2ZXIoeyBuYW1lOiAncmVzb3VyY2Utb2ZmbGluZS10ZXN0LXNlcnZlcicsIHZlcnNpb246ICcxLjAuMCcgfSk7CisgICAgcmVnaXN0ZXJFZmZlY3RSZXNvdXJjZUhhbmRsZXJzKHNlcnZlciwgbWFrZUZha2VSdW50aW1lKCdjb25uZWN0ZWQnKSwgbWFrZUNvbmZpZygpKTsKKyAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHsgbmFtZTogJ3Jlc291cmNlLW9mZmxpbmUtdGVzdC1jbGllbnQnLCB2ZXJzaW9uOiAnMS4wLjAnIH0pOworICAgIGNvbnN0IFtjbGllbnRUcmFuc3BvcnQsIHNlcnZlclRyYW5zcG9ydF0gPSBJbk1lbW9yeVRyYW5zcG9ydC5jcmVhdGVMaW5rZWRQYWlyKCk7CisgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3NlcnZlci5jb25uZWN0KHNlcnZlclRyYW5zcG9ydCksIGNsaWVudC5jb25uZWN0KGNsaWVudFRyYW5zcG9ydCldKTsKKyAgICB0cnkgeworICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgY2xpZW50LnJlYWRSZXNvdXJjZSh7IHVyaTogUkVTT1VSQ0VfVVJJUy5TVEFUVVMgfSk7CisgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCBjbGllbnQucmVhZFJlc291cmNlKHsgdXJpOiBSRVNPVVJDRV9VUklTLlNDSEVNQSB9KTsKKyAgICAgIGNvbnN0IHN0YXR1c1RleHQgPQorICAgICAgICBzdGF0dXMuY29udGVudHNbMF0gJiYgJ3RleHQnIGluIHN0YXR1cy5jb250ZW50c1swXSA/IHN0YXR1cy5jb250ZW50c1swXS50ZXh0IDogJyc7CisgICAgICBleHBlY3Qoc3RhdHVzVGV4dCkudG9CZSgnZGlzY29ubmVjdGVkIC0gY29uZmlndXJlIGFuIGVuZHBvaW50Jyk7CisgICAgICBjb25zdCBzY2hlbWFUZXh0ID0KKyAgICAgICAgc2NoZW1hLmNvbnRlbnRzWzBdICYmICd0ZXh0JyBpbiBzY2hlbWEuY29udGVudHNbMF0gPyBzY2hlbWEuY29udGVudHNbMF0udGV4dCA6ICcnOworICAgICAgZXhwZWN0KHNjaGVtYVRleHQpLnRvQ29udGFpbignQ29uZmlndXJlIGBHUkVNTElOX01DUF9FTkRQT0lOVGAnKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAgYXdhaXQgY2xpZW50LmNsb3NlKCk7CisgICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTsKKyAgICB9CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL2dyZW1saW4tbWNwL3Rlc3RzL3Jlc291cmNlcy50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9yZXNvdXJjZXMudGVzdC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWM3OGYzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9yZXNvdXJjZXMudGVzdC50cwpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqICB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgeyBPcHRpb24sIFJ1bnRpbWUgfSBmcm9tICdlZmZlY3QnOworaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUVhY2gsIGFmdGVyRWFjaCB9IGZyb20gJ0BqZXN0L2dsb2JhbHMnOworaW1wb3J0IHR5cGUgeyBNY3BTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9tY3AuanMnOworaW1wb3J0IHsgcmVnaXN0ZXJFZmZlY3RSZXNvdXJjZUhhbmRsZXJzIH0gZnJvbSAnLi4vc3JjL2hhbmRsZXJzL3Jlc291cmNlcyc7CitpbXBvcnQgeyBSRVNPVVJDRV9VUklTLCBNSU1FX1RZUEVTIH0gZnJvbSAnLi4vc3JjL2NvbnN0YW50cyc7CitpbXBvcnQgdHlwZSB7IEdyZW1saW5TZXJ2aWNlIH0gZnJvbSAnLi4vc3JjL2dyZW1saW4vc2VydmljZSc7CitpbXBvcnQgdHlwZSB7IEFwcENvbmZpZ1R5cGUgfSBmcm9tICcuLi9zcmMvY29uZmlnJzsKKwordHlwZSBSZXNvdXJjZUhhbmRsZXIgPSAoCisgIHVyaTogVVJMLAorICBleHRyYTogdW5rbm93bgorKSA9PiBQcm9taXNlPHsKKyAgY29udGVudHM6IEFycmF5PHsgdXJpOiBzdHJpbmc7IG1pbWVUeXBlOiBzdHJpbmc7IHRleHQ6IHN0cmluZyB9PjsKK30+OworCitjb25zdCBjcmVhdGVNb2NrU2VydmVyID0gKCkgPT4geworICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBSZXNvdXJjZUhhbmRsZXI+KCk7CisKKyAgY29uc3Qgc2VydmVyID0geworICAgIHJlZ2lzdGVyUmVzb3VyY2U6ICgKKyAgICAgIG5hbWU6IHN0cmluZywKKyAgICAgIF91cmk6IHN0cmluZywKKyAgICAgIF9tZXRhOiB1bmtub3duLAorICAgICAgaGFuZGxlcjogUmVzb3VyY2VIYW5kbGVyCisgICAgKTogdm9pZCA9PiB7CisgICAgICBoYW5kbGVycy5zZXQobmFtZSwgaGFuZGxlcik7CisgICAgfSwKKyAgfSBhcyB1bmtub3duIGFzIE1jcFNlcnZlcjsKKworICByZXR1cm4geyBzZXJ2ZXIsIGhhbmRsZXJzIH07Cit9OworCitkZXNjcmliZSgncmVzb3VyY2UgaGFuZGxlciBvZmZsaW5lIGJlaGF2aW9yJywgKCkgPT4geworICBjb25zdCBvcmlnaW5hbEVuZHBvaW50ID0gcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQ7CisKKyAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgZGVsZXRlIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UOworICB9KTsKKworICBhZnRlckVhY2goKCkgPT4geworICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxFbmRwb2ludCA9PT0gJ3N0cmluZycpIHsKKyAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gb3JpZ2luYWxFbmRwb2ludDsKKyAgICB9IGVsc2UgeworICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UOworICAgIH0KKyAgfSk7CisKKyAgaXQoJ3JldHVybnMgb2ZmbGluZSBzdGF0dXMgYW5kIHNjaGVtYSB3aGVuIEdSRU1MSU5fTUNQX0VORFBPSU5UIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgeyBzZXJ2ZXIsIGhhbmRsZXJzIH0gPSBjcmVhdGVNb2NrU2VydmVyKCk7CisKKyAgICBjb25zdCBjb25maWcgPSB7CisgICAgICBncmVtbGluOiB7CisgICAgICAgIC8vIFNpbXVsYXRlIHN0YWxlIHByZS1wYXJzZWQgY29uZmlnOyBlbnYgdmFyIGFic2VuY2UgbXVzdCBzdGlsbCBmb3JjZSBvZmZsaW5lIHJlc291cmNlIG91dHB1dC4KKyAgICAgICAgZW5kcG9pbnQ6IE9wdGlvbi5zb21lKHsgaG9zdDogJ2xvY2FsaG9zdCcsIHBvcnQ6IDgxODIsIHRyYXZlcnNhbFNvdXJjZTogJ2cnIH0pLAorICAgICAgICB1c2VTU0w6IGZhbHNlLAorICAgICAgICB1c2VybmFtZTogT3B0aW9uLm5vbmUoKSwKKyAgICAgICAgcGFzc3dvcmQ6IE9wdGlvbi5ub25lKCksCisgICAgICAgIGlkbGVUaW1lb3V0OiAzMDAsCisgICAgICB9LAorICAgICAgc2NoZW1hOiB7CisgICAgICAgIGVudW1EaXNjb3ZlcnlFbmFibGVkOiB0cnVlLAorICAgICAgICBlbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQ6IDEwLAorICAgICAgICBlbnVtUHJvcGVydHlEZW55TGlzdDogW10sCisgICAgICAgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGZhbHNlLAorICAgICAgICBtYXhFbnVtVmFsdWVzOiAxMCwKKyAgICAgICAgaW5jbHVkZUNvdW50czogZmFsc2UsCisgICAgICB9LAorICAgICAgc2VydmVyOiB7CisgICAgICAgIG5hbWU6ICdncmVtbGluLW1jcCcsCisgICAgICAgIHZlcnNpb246ICd0ZXN0JywKKyAgICAgIH0sCisgICAgICBsb2dnaW5nOiB7CisgICAgICAgIGxldmVsOiAnaW5mbycsCisgICAgICAgIHN0cnVjdHVyZWQ6IHRydWUsCisgICAgICB9LAorICAgIH0gYXMgdW5rbm93biBhcyBBcHBDb25maWdUeXBlOworCisgICAgcmVnaXN0ZXJFZmZlY3RSZXNvdXJjZUhhbmRsZXJzKAorICAgICAgc2VydmVyLAorICAgICAgUnVudGltZS5kZWZhdWx0UnVudGltZSBhcyBSdW50aW1lLlJ1bnRpbWU8R3JlbWxpblNlcnZpY2U+LAorICAgICAgY29uZmlnCisgICAgKTsKKworICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGhhbmRsZXJzLmdldCgnc3RhdHVzJykhKG5ldyBVUkwoUkVTT1VSQ0VfVVJJUy5TVEFUVVMpLCB7fSk7CisgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgaGFuZGxlcnMuZ2V0KCdzY2hlbWEnKSEobmV3IFVSTChSRVNPVVJDRV9VUklTLlNDSEVNQSksIHt9KTsKKworICAgIGV4cGVjdChzdGF0dXMpLnRvRXF1YWwoeworICAgICAgY29udGVudHM6IFsKKyAgICAgICAgeworICAgICAgICAgIHVyaTogUkVTT1VSQ0VfVVJJUy5TVEFUVVMsCisgICAgICAgICAgbWltZVR5cGU6IE1JTUVfVFlQRVMuVEVYVF9QTEFJTiwKKyAgICAgICAgICB0ZXh0OiAnZGlzY29ubmVjdGVkIC0gY29uZmlndXJlIGFuIGVuZHBvaW50JywKKyAgICAgICAgfSwKKyAgICAgIF0sCisgICAgfSk7CisKKyAgICBleHBlY3Qoc2NoZW1hKS50b0VxdWFsKHsKKyAgICAgIGNvbnRlbnRzOiBbCisgICAgICAgIHsKKyAgICAgICAgICB1cmk6IFJFU09VUkNFX1VSSVMuU0NIRU1BLAorICAgICAgICAgIG1pbWVUeXBlOiBNSU1FX1RZUEVTLkFQUExJQ0FUSU9OX0pTT04sCisgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkoCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YXR1czogJ2Rpc2Nvbm5lY3RlZCcsCisgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDb25maWd1cmUgYEdSRU1MSU5fTUNQX0VORFBPSU5UYCB0byBlbmFibGUgZ3JhcGggb3BlcmF0aW9ucy4nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAyCisgICAgICAgICAgKSwKKyAgICAgICAgfSwKKyAgICAgIF0sCisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL3NjaGVtYS1hc3NlbWJseS50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9zY2hlbWEtYXNzZW1ibHkudGVzdC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9zY2hlbWEtYXNzZW1ibHkudGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90ZXN0cy9zY2hlbWEtYXNzZW1ibHkudGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9zZXR1cC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvc2V0dXAudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvdGVzdHMvc2V0dXAudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbi1tY3AvdGVzdHMvc2V0dXAudHMKZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdHNjb25maWcuanNvbiBiL2dyZW1saW4tanMvZ3JlbWxpbi1tY3AvdHNjb25maWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTg0MGJjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGluLW1jcC90c2NvbmZpZy5qc29uCkBAIC0wLDAgKzEsNDYgQEAKK3sKKyAgImNvbXBpbGVyT3B0aW9ucyI6IHsKKyAgICAidGFyZ2V0IjogIkVTMjAyMiIsCisgICAgIm1vZHVsZSI6ICJFU05leHQiLAorICAgICJtb2R1bGVSZXNvbHV0aW9uIjogImJ1bmRsZXIiLAorICAgICJiYXNlVXJsIjogIi4iLAorICAgICJwYXRocyI6IHsKKyAgICAgICJncmVtbGluIjogWworICAgICAgICAiLi4vLi4vLi4vLi4vZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2J1aWxkL2VzbS9pbmRleC5kLnRzIgorICAgICAgXSwKKyAgICAgICJncmVtbGluL2xhbmd1YWdlIjogWworICAgICAgICAiLi4vLi4vLi4vLi4vZ3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2J1aWxkL2VzbS9sYW5ndWFnZS9pbmRleC5kLnRzIgorICAgICAgXQorICAgIH0sCisgICAgImxpYiI6IFsiRVMyMDIyIl0sCisgICAgIm91dERpciI6ICIuL2Rpc3QiLAorICAgICJyb290RGlyIjogIi4vc3JjIiwKKyAgICAic3RyaWN0IjogdHJ1ZSwKKyAgICAiZXNNb2R1bGVJbnRlcm9wIjogdHJ1ZSwKKyAgICAic2tpcExpYkNoZWNrIjogdHJ1ZSwKKyAgICAiZm9yY2VDb25zaXN0ZW50Q2FzaW5nSW5GaWxlTmFtZXMiOiB0cnVlLAorICAgICJkZWNsYXJhdGlvbiI6IHRydWUsCisgICAgImRlY2xhcmF0aW9uTWFwIjogdHJ1ZSwKKyAgICAic291cmNlTWFwIjogdHJ1ZSwKKyAgICAicmVtb3ZlQ29tbWVudHMiOiBmYWxzZSwKKyAgICAibm9JbXBsaWNpdEFueSI6IHRydWUsCisgICAgIm5vSW1wbGljaXRSZXR1cm5zIjogdHJ1ZSwKKyAgICAibm9JbXBsaWNpdFRoaXMiOiB0cnVlLAorICAgICJub1VudXNlZExvY2FscyI6IHRydWUsCisgICAgIm5vVW51c2VkUGFyYW1ldGVycyI6IHRydWUsCisgICAgImV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzIjogZmFsc2UsCisgICAgIm5vSW1wbGljaXRPdmVycmlkZSI6IHRydWUsCisgICAgIm5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmUiOiB0cnVlLAorICAgICJub1VuY2hlY2tlZEluZGV4ZWRBY2Nlc3MiOiB0cnVlLAorICAgICJhbGxvd1VudXNlZExhYmVscyI6IGZhbHNlLAorICAgICJhbGxvd1VucmVhY2hhYmxlQ29kZSI6IGZhbHNlLAorICAgICJyZXNvbHZlSnNvbk1vZHVsZSI6IHRydWUsCisgICAgImlzb2xhdGVkTW9kdWxlcyI6IHRydWUsCisgICAgInZlcmJhdGltTW9kdWxlU3ludGF4IjogdHJ1ZQorICB9LAorICAiaW5jbHVkZSI6IFsic3JjLyoqLyoiXSwKKyAgImV4Y2x1ZGUiOiBbIm5vZGVfbW9kdWxlcyIsICJkaXN0IiwgInRlc3RzIl0sCisgICJ0cy1ub2RlIjogeworICAgICJlc20iOiB0cnVlCisgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW50Ly5naXRpZ25vcmUgYi9ncmVtbGluLWpzL2dyZW1saW50Ly5naXRpZ25vcmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50Ly5naXRpZ25vcmUKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvLnByZXR0aWVycmMgYi9ncmVtbGluLWpzL2dyZW1saW50Ly5wcmV0dGllcnJjCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC8ucHJldHRpZXJyYwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC8ucHJldHRpZXJyYwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvTElDRU5TRSBiL2dyZW1saW4tanMvZ3JlbWxpbnQvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvTElDRU5TRQpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9MSUNFTlNFCmRpZmYgLS1naXQgYS9ncmVtbGludC9OT1RJQ0UgYi9ncmVtbGluLWpzL2dyZW1saW50L05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvTk9USUNFCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L05PVElDRQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGludC9SRUFETUUubWQgYi9ncmVtbGluLWpzL2dyZW1saW50L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIyMDdmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9SRUFETUUubWQKQEAgLTAsMCArMSwxMTUgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCishW0dyZW1saW50IEdpdGh1YiBIZWFkZXIgMTkyMHgxMDI0XShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8yNTY2MzcyOS84ODQ4ODc4OC1kNWE3MzcwMC1jZjhmLTExZWEtOWFkYi0wM2Q2MmM3N2MxYjcucG5nKQorCisjIyMgV2hhdCBpcyBHcmVtbGludD8KKworR3JlbWxpbnQgaXMgYSBjb2RlIGZvcm1hdHRlciwgZnJvbSBbQXBhY2hlIFRpbmtlclBvcOKEol1bdGtdIHdoaWNoIHBhcnNlcyBHcmVtbGluIHF1ZXJpZXMgYW5kIHJld3JpdGVzIHRoZW0gdG8gYWRoZXJlIHRvIGNlcnRhaW4gc3R5bGluZyBydWxlcy4gSXQgZG9lcyBzbyBieSBwYXJzaW5nIHRoZSBxdWVyeSB0byBhbiBhYnN0cmFjdCBzeW50YXggdHJlZSwgYW5kIHJlcHJpbnRpbmcgaXQgZnJvbSBzY3JhdGNoLgorCisjIyMgQnV0IHdoeT8KKworLSBUbyBtYWtlIEdyZW1saW4gcXVlcmllcyBtb3JlIHJlYWRhYmxlCistIFRvIG1ha2UgeW91ciBxdWVyaWVzIG1vcmUgYmVhdXRpZnVsCistIFRvIGFjdCBhcyBhICJsaXZpbmciIHN0eWxlIGd1aWRlCisKKyMjIyBJbnN0YWxsIEdyZW1saW50IGFzIGEgSmF2YVNjcmlwdCAvIFR5cGVTY3JpcHQgcGFja2FnZQorCitgYGBiYXNoCitucG0gaW5zdGFsbCBncmVtbGludAorYGBgCisKKyMjIyBCYXNpYyBleGFtcGxlCisKK2BgYHR5cGVzY3JpcHQKK2ltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnZ3JlbWxpbnQnOworCitjb25zdCB1bmZvcm1hdHRlZFF1ZXJ5ID0gYGcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5zaG9ydGVzdFBhdGgoKS53aXRoKFNob3J0ZXN0UGF0aC50YXJnZXQsIF9fLmhhcygnbmFtZScsICdqb3NoJykpLndpdGgoU2hvcnRlc3RQYXRoLmRpc3RhbmNlLCAnd2VpZ2h0JylgOworCitjb25zdCBmb3JtYXR0ZWRRdWVyeSA9IGZvcm1hdFF1ZXJ5KHVuZm9ybWF0dGVkUXVlcnkpOworCitjb25zb2xlLmxvZyhmb3JtYXR0ZWRRdWVyeSk7CitgYGAKKworYGBgCitnLlYoKS4KKyAgaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLgorICBzaG9ydGVzdFBhdGgoKS4KKyAgICB3aXRoKFNob3J0ZXN0UGF0aC50YXJnZXQsIF9fLmhhcygnbmFtZScsICdqb3NoJykpLgorICAgIHdpdGgoU2hvcnRlc3RQYXRoLmRpc3RhbmNlLCAnd2VpZ2h0JykKK2BgYAorCisjIyMgT3ZlcnJpZGUgZGVmYXVsdCBtYXggbGluZSBsZW5ndGgKKworVGhlIGRlZmF1bHQgbWF4IGxpbmUgbGVuZ3RoIGlzIDgwLCBidXQgaXQgY2FuIGVhc2lseSBiZSBvdmVycmlkZGVuLgorCitgYGB0eXBlc2NyaXB0CitpbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJ2dyZW1saW50JzsKKworY29uc3QgdW5mb3JtYXR0ZWRRdWVyeSA9IGBnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuc2hvcnRlc3RQYXRoKCkud2l0aChTaG9ydGVzdFBhdGgudGFyZ2V0LCBfXy5oYXMoJ25hbWUnLCAnam9zaCcpKS53aXRoKFNob3J0ZXN0UGF0aC5kaXN0YW5jZSwgJ3dlaWdodCcpYDsKKworY29uc3QgZm9ybWF0dGVkUXVlcnkgPSBmb3JtYXRRdWVyeSh1bmZvcm1hdHRlZFF1ZXJ5LCB7IG1heExpbmVMZW5ndGg6IDUwIH0pOworCitjb25zb2xlLmxvZyhmb3JtYXR0ZWRRdWVyeSk7CitgYGAKKworYGBgCitnLlYoKS4KKyAgaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLgorICBzaG9ydGVzdFBhdGgoKS4KKyAgICB3aXRoKAorICAgICAgU2hvcnRlc3RQYXRoLnRhcmdldCwKKyAgICAgIF9fLmhhcygnbmFtZScsICdqb3NoJykpLgorICAgIHdpdGgoU2hvcnRlc3RQYXRoLmRpc3RhbmNlLCAnd2VpZ2h0JykKK2BgYAorCisjIyMgT3RoZXIgZm9ybWF0dGluZyBvcHRpb25zCisKK2BgYHR5cGVzY3JpcHQKK2ltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnZ3JlbWxpbnQnOworCitjb25zdCB1bmZvcm1hdHRlZFF1ZXJ5ID0gYGcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5zaG9ydGVzdFBhdGgoKS53aXRoKFNob3J0ZXN0UGF0aC50YXJnZXQsIF9fLmhhcygnbmFtZScsICdqb3NoJykpLndpdGgoU2hvcnRlc3RQYXRoLmRpc3RhbmNlLCAnd2VpZ2h0JylgOworCitjb25zdCBmb3JtYXR0ZWRRdWVyeSA9IGZvcm1hdFF1ZXJ5KHVuZm9ybWF0dGVkUXVlcnksIHsKKyAgaW5kZW50YXRpb246IDQsIC8vIGRlZmF1bHQ6IDAKKyAgbWF4TGluZUxlbmd0aDogNDAsIC8vIGRlZmF1bHQ6IDgwCisgIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrczogdHJ1ZSwgLy8gZGVmYXVsdDogZmFsc2UKK30pOworCitjb25zb2xlLmxvZyhmb3JtYXR0ZWRRdWVyeSk7CitgYGAKKworYGBgCisgICAgZy5WKCkKKyAgICAgIC5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykKKyAgICAgIC5zaG9ydGVzdFBhdGgoKQorICAgICAgICAud2l0aCgKKyAgICAgICAgICBTaG9ydGVzdFBhdGgudGFyZ2V0LAorICAgICAgICAgIF9fLmhhcygnbmFtZScsICdqb3NoJykpCisgICAgICAgIC53aXRoKAorICAgICAgICAgIFNob3J0ZXN0UGF0aC5kaXN0YW5jZSwKKyAgICAgICAgICAnd2VpZ2h0JykKK2BgYAorCisjIyMgSnVzdCBsb29raW5nIGZvciBhbiBvbmxpbmUgR3JlbWxpbiBxdWVyeSBmb3JtYXR0ZXI/CisKK2h0dHBzOi8vZ3JlbWxpbnQuY29tIGlzIGEgd2Vic2l0ZSB3aGljaCB1dGlsaXplcyB0aGUgR3JlbWxpbnQgbGlicmFyeSB0byBnaXZlIHVzZXJzIGFuIG9ubGluZSAibGl2aW5nIiBzdHlsZSBndWlkZSBmb3IgR3JlbWxpbiBxdWVyaWVzLiBJdCBhbHNvIHNlcnZlcyBhcyBhIHBsYXRmb3JtIGZvciBzaG93Y2FzaW5nIHRoZSBmZWF0dXJlcyBvZiBHcmVtbGludC4gSXRzIHNvdXJjZSBjb2RlIGlzIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvdHJlZS9tYXN0ZXIvZG9jcy9zaXRlL2hvbWUvZ3JlbWxpbnQpLgorIVtHcmVtbGludCBWMiBTY3JlZW5zaG90XShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8yNTY2MzcyOS84ODQ4ODUxOC1mMDc4YWMwMC1jZjhkLTExZWEtOWUxYy0wMWVkZWMyODU3NTEucG5nKQorCitbdGtdOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGludC9lc2xpbnQuY29uZmlnLmpzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9lc2xpbnQuY29uZmlnLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Njg2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW50L2VzbGludC5jb25maWcuanMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK2NvbnN0IHRzZXNsaW50ID0gcmVxdWlyZSgndHlwZXNjcmlwdC1lc2xpbnQnKTsKK2NvbnN0IHByZXR0aWVyID0gcmVxdWlyZSgnZXNsaW50LWNvbmZpZy1wcmV0dGllcicpOworCittb2R1bGUuZXhwb3J0cyA9IHRzZXNsaW50LmNvbmZpZygKKyAgLi4udHNlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCwKKyAgcHJldHRpZXIsCisgIHsKKyAgICBydWxlczogeworICAgICAgLy8gdHNsaW50OnJlY29tbWVuZGVkIGRpZCBub3QgZW5mb3JjZSB0aGVzZSBydWxlcworICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnknOiAnb2ZmJywKKyAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMnOiAnb2ZmJywKKyAgICAgIC8vIHRzbGludDpyZWNvbW1lbmRlZCBoYWQgbm8tc2hhZG93ZWQtdmFyaWFibGUgZGlzYWJsZWQKKyAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93JzogJ29mZicsCisgICAgfSwKKyAgfSwKKyk7CmRpZmYgLS1naXQgYS9ncmVtbGludC9qZXN0Y29uZmlnLmpzb24gYi9ncmVtbGluLWpzL2dyZW1saW50L2plc3Rjb25maWcuanNvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvamVzdGNvbmZpZy5qc29uCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L2plc3Rjb25maWcuanNvbgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGludC9wYWNrYWdlLmpzb24gYi9ncmVtbGluLWpzL2dyZW1saW50L3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGEzZWRiCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw1NCBAQAoreworICAibmFtZSI6ICJncmVtbGludCIsCisgICJ2ZXJzaW9uIjogIjQuMC4wLWFscGhhMSIsCisgICJkZXNjcmlwdGlvbiI6ICJMaW50ZXIvY29kZSBmb3JtYXR0ZXIgZm9yIEdyZW1saW4iLAorICAibWFpbiI6ICJsaWIvaW5kZXguanMiLAorICAidHlwZXMiOiAibGliL2luZGV4LmQudHMiLAorICAic2NyaXB0cyI6IHsKKyAgICAiYnVpbGQiOiAidHNjIiwKKyAgICAiZm9ybWF0IjogInByZXR0aWVyIC0td3JpdGUgXCJzcmMvKiovKi50c1wiIiwKKyAgICAibGludCI6ICJlc2xpbnQgc3JjIiwKKyAgICAidGVzdCI6ICJqZXN0IC0tY29uZmlnIGplc3Rjb25maWcuanNvbiIsCisgICAgInByZXBhcmUiOiAibnBtIHJ1biBidWlsZCIsCisgICAgInByZXB1Ymxpc2hPbmx5IjogIm5wbSB0ZXN0ICYmIG5wbSBydW4gbGludCIsCisgICAgInByZXZlcnNpb24iOiAibnBtIHJ1biBsaW50IiwKKyAgICAidmVyc2lvbiI6ICJucG0gcnVuIGZvcm1hdCAmJiBnaXQgYWRkIC1BIHNyYyIsCisgICAgInBvc3R2ZXJzaW9uIjogImdpdCBwdXNoICYmIGdpdCBwdXNoIC0tdGFncyIKKyAgfSwKKyAgInJlcG9zaXRvcnkiOiB7CisgICAgInR5cGUiOiAiZ2l0IiwKKyAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wLmdpdCIKKyAgfSwKKyAgImtleXdvcmRzIjogWworICAgICJjb2RlIiwKKyAgICAiZm9ybWF0dGVyIiwKKyAgICAiZ3JhcGgiLAorICAgICJncmFwaGRiIiwKKyAgICAidGlua2VycG9wIiwKKyAgICAiZ3JlbWxpbiIsCisgICAgInF1ZXJ5IgorICBdLAorICAiYXV0aG9yIjogIsOYeXZpbmQgU8OmYsO4IiwKKyAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICJidWdzIjogeworICAgICJ1cmwiOiAiaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AiCisgIH0sCisgICJob21lcGFnZSI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCisgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgIkB0eXBlcy9qZXN0IjogIl4zMC4wLjAiLAorICAgICJAdHlwZXMvbm9kZSI6ICJeMjIuNS4xIiwKKyAgICAiZXNsaW50IjogIl4xMC4wLjAiLAorICAgICJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjogIl4xMC4wLjAiLAorICAgICJqZXN0IjogIl4zMC4wLjAiLAorICAgICJwcmV0dGllciI6ICJeMy4wLjAiLAorICAgICJ0cy1qZXN0IjogIl4yOS40LjYiLAorICAgICJ0eXBlc2NyaXB0IjogIl41LjAuMCIsCisgICAgInR5cGVzY3JpcHQtZXNsaW50IjogIl44LjAuMCIKKyAgfSwKKyAgImZpbGVzIjogWworICAgICJsaWIvKiovKiIKKyAgXSwKKyAgImVuZ2luZXMiOiB7CisgICAgIm5vZGUiOiAiPj0yMiIKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9ncmVtbGludC9wb20ueG1sIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNGYxMjQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL2dyZW1saW50L3BvbS54bWwKQEAgLTAsMCArMSwyMzMgQEAKKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCit0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCitUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKK3RoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1qczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPmdyZW1saW50PC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogR3JlbWxpbnQ8L25hbWU+CisgICAgPHByb3BlcnRpZXM+CisgICAgICAgIDxtYXZlbi50ZXN0LnNraXA+ZmFsc2U8L21hdmVuLnRlc3Quc2tpcD4KKyAgICAgICAgPHNraXBUZXN0cz4ke21hdmVuLnRlc3Quc2tpcH08L3NraXBUZXN0cz4KKyAgICA8L3Byb3BlcnRpZXM+CisgICAgPGJ1aWxkPgorICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0PC9kaXJlY3Rvcnk+CisgICAgICAgIDxmaW5hbE5hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9LSR7cHJvamVjdC52ZXJzaW9ufTwvZmluYWxOYW1lPgorICAgICAgICA8cGx1Z2luTWFuYWdlbWVudD4KKyAgICAgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuZWlyc2xldHQ8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmZyb250ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xNS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPC9wbHVnaW5zPgorICAgICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8IS0tCisgICAgICAgICAgICAgICAgVXNlIGdtYXZlbnBsdXMtcGx1Z2luIHRvOgorICAgICAgICAgICAgICAgICAgICAtIFVwZGF0ZSB2ZXJzaW9uIG51bWJlcgorICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5nbWF2ZW5wbHVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdtYXZlbnBsdXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5ncm9vdnk8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ncm9vdnktYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtncm9vdnkudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD51cGRhdGUtdmVyc2lvbjwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+ZXhlY3V0ZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+cHJvamVjdEJhc2VEaXI8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LmJhc2VkaXJ9PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+bWF2ZW5WZXJzaW9uPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPiR7cHJvamVjdC52ZXJzaW9ufTwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHRzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHZlcnNpb25Gb3JKcyA9IG1hdmVuVmVyc2lvbi5yZXBsYWNlKCItU05BUFNIT1QiLCAiLWFscGhhMSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcGxhdGZvcm1BZ25vc3RpY0Jhc2VEaXJQYXRoID0gcHJvamVjdC5iYXNlZGlyLmdldEFic29sdXRlUGF0aCgpLnJlcGxhY2UoIlxcIiwiLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZmlsZSA9IG5ldyBGaWxlKHBsYXRmb3JtQWdub3N0aWNCYXNlRGlyUGF0aCArICIvcGFja2FnZS5qc29uIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoZmlsZS5nZXRUZXh0KCJVVEYtOCIpLnJlcGxhY2VGaXJzdCgvInZlcnNpb24iOiAiKC4qKSIsLywgIlwidmVyc2lvblwiOiBcIiIgKyB2ZXJzaW9uRm9ySnMgKyAiXCIsIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Y2xlYW48L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5laXJzbGV0dDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5mcm9udGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+aW5zdGFsbCBub2RlIGFuZCBucG0gYXQgd29ya3NwYWNlIHJvb3Q8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnZhbGlkYXRlPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5pbnN0YWxsLW5vZGUtYW5kLW5wbTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT4ke3Byb2plY3QuYmFzZWRpcn0vLi48L3dvcmtpbmdEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSB3b3Jrc3BhY2UgaW5zdGFsbDwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmFsaWRhdGU8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPmNpPC9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdvcmtpbmdEaXJlY3Rvcnk+JHtwcm9qZWN0LmJhc2VkaXJ9Ly4uPC93b3JraW5nRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5pbnN0YWxsIG5vZGUgYW5kIG5wbTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5pbnN0YWxsLW5vZGUtYW5kLW5wbTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSB0ZXN0PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ucG08L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+JHtza2lwVGVzdHN9PC9za2lwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+dGVzdCAtLWV4aXQ8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFpbE9uRXJyb3I+dHJ1ZTwvZmFpbE9uRXJyb3I+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPG5vZGVWZXJzaW9uPiR7cnVudGltZS5ub2RlLnZlcnNpb259PC9ub2RlVmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPG5wbVZlcnNpb24+JHtydW50aW1lLm5wbS52ZXJzaW9ufTwvbnBtVmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDwhLS0KKyAgICAgICAgICAgIHRoZXJlIGlzIG5vIHBvaW50IHRvIGJ1aWxkaW5nL2RlcGxveWluZyB0aGUganZtIHN0dWZmIC0gdGhlcmUgaXMgbm8gamF2YSBzb3VyY2UgcmVhbGx5IC0ganVzdCBwb21zCisgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNraXBTb3VyY2U+dHJ1ZTwvc2tpcFNvdXJjZT4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWluc3RhbGwtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisgICAgPHByb2ZpbGVzPgorICAgICAgICA8IS0tCisgICAgICAgIFByb3ZpZGVzIGEgd2F5IHRvIGRlcGxveSBncmVtbGludCB0byBucG0uIFRoaXMgY2Fubm90IGJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG1hdmVuIGV4ZWN1dGlvbgorICAgICAgICBiZWNhdXNlIG5wbSBkb2VzIG5vdCBoYXZlIGEgc3RhZ2luZyBlbnZpcm9ubWVudCBsaWtlIHNvbmF0eXBlIGZvciByZWxlYXNlcy4gQXMgc29vbiBhcyB0aGUgcmVsZWFzZSBpcworICAgICAgICBwdWJsaXNoZWQgaXQgaXMgcHVibGljLiBJbiBvdXIgcmVsZWFzZSB3b3JrZmxvdywgZGVwbG95IG9jY3VycyBwcmlvciB0byB2b3RlIG9uIHRoZSByZWxlYXNlIGFuZCB3ZSBjYW4ndAorICAgICAgICBtYWtlIHRoaXMgc3R1ZmYgcHVibGljIHVudGlsIHRoZSB2b3RlIGlzIG92ZXIuCisgICAgICAgIC0tPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5ncmVtbGludC1kZXBsb3k8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD5mYWxzZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgPG5hbWU+bnBtPC9uYW1lPgorICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICA8L2FjdGl2YXRpb24+CisgICAgICAgICAgICA8YnVpbGQ+CisgICAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBwdWJsaXNoPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmRlcGxveTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPnB1Ymxpc2g8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBnaXZlbiBob3cgdGhlIDxjb25maWd1cmF0aW9uPiBpcyBzcGVjaWZpZWQgaW4gdGhlIG1haW4gYnVpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIGZpbmUgdG8ganVzdCBhbHdheXMgZGVwbG95IGJlY2F1c2UgdGhpcyA8cHJvZmlsZT4gbmVlZHMgdG8gYmUgbWFudWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQgYW5kIHRoYXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGdpdmVuIG91ciBkZXBsb3ltZW50IHByb2Nlc3MuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vZGVWZXJzaW9uPiR7cnVudGltZS5ub2RlLnZlcnNpb259PC9ub2RlVmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnBtVmVyc2lvbj4ke3J1bnRpbWUubnBtLnZlcnNpb259PC9ucG1WZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgICAgICAgICA8L2J1aWxkPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vY2xvc3VyZUluZGVudGF0aW9uLnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vY2xvc3VyZUluZGVudGF0aW9uLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vY2xvc3VyZUluZGVudGF0aW9uLnRlc3QudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9jbG9zdXJlSW5kZW50YXRpb24udGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9jdXJseUJyYWNrZXRNdWx0aWxpbmVXcmFwcGluZy50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2N1cmx5QnJhY2tldE11bHRpbGluZVdyYXBwaW5nLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vY3VybHlCcmFja2V0TXVsdGlsaW5lV3JhcHBpbmcudGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2N1cmx5QnJhY2tldE11bHRpbGluZVdyYXBwaW5nLnRlc3QudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vY3VybHlCcmFja2V0V3JhcHBpbmcudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9jdXJseUJyYWNrZXRXcmFwcGluZy50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2N1cmx5QnJhY2tldFdyYXBwaW5nLnRlc3QudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9jdXJseUJyYWNrZXRXcmFwcGluZy50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2RlZmF1bHRDb25maWcudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9kZWZhdWx0Q29uZmlnLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vZGVmYXVsdENvbmZpZy50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vZGVmYXVsdENvbmZpZy50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2RldGVybWluZVdoYXRQYXJ0c09mQ29kZUFyZUdyZW1saW4udGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9kZXRlcm1pbmVXaGF0UGFydHNPZkNvZGVBcmVHcmVtbGluLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vZGV0ZXJtaW5lV2hhdFBhcnRzT2ZDb2RlQXJlR3JlbWxpbi50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vZGV0ZXJtaW5lV2hhdFBhcnRzT2ZDb2RlQXJlR3JlbWxpbi50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2RvdHNBZnRlckxpbmVCcmVha3MudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9kb3RzQWZ0ZXJMaW5lQnJlYWtzLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vZG90c0FmdGVyTGluZUJyZWFrcy50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vZG90c0FmdGVyTGluZUJyZWFrcy50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2ludmFsaWRJbmRlbnRhdGlvbkFuZE1heExpbmVMZW5ndGgudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9pbnZhbGlkSW5kZW50YXRpb25BbmRNYXhMaW5lTGVuZ3RoLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vaW52YWxpZEluZGVudGF0aW9uQW5kTWF4TGluZUxlbmd0aC50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vaW52YWxpZEluZGVudGF0aW9uQW5kTWF4TGluZUxlbmd0aC50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL2xheW91dFV0aWxzLnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbGF5b3V0VXRpbHMudGVzdC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9sYXlvdXRVdGlscy50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbGF5b3V0VXRpbHMudGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9tYXhMaW5lTGVuZ3RoLnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbWF4TGluZUxlbmd0aC50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL21heExpbmVMZW5ndGgudGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL21heExpbmVMZW5ndGgudGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9tb2R1bGF0b3JJbmRlbnRhdGlvbi50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL21vZHVsYXRvckluZGVudGF0aW9uLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbW9kdWxhdG9ySW5kZW50YXRpb24udGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL21vZHVsYXRvckluZGVudGF0aW9uLnRlc3QudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbW9kdWxhdG9yV3JhcHBpbmcudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9tb2R1bGF0b3JXcmFwcGluZy50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL21vZHVsYXRvcldyYXBwaW5nLnRlc3QudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9tb2R1bGF0b3JXcmFwcGluZy50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL211bHRpcGxlUXVlcmllc0F0T25jZS50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL211bHRpcGxlUXVlcmllc0F0T25jZS50ZXN0LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL211bHRpcGxlUXVlcmllc0F0T25jZS50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbXVsdGlwbGVRdWVyaWVzQXRPbmNlLnRlc3QudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbm9uR3JlbWxpbkluZGVudGF0aW9uLnRlc3QudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbm9uR3JlbWxpbkluZGVudGF0aW9uLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbm9uR3JlbWxpbkluZGVudGF0aW9uLnRlc3QudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9ub25HcmVtbGluSW5kZW50YXRpb24udGVzdC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L19fdGVzdHNfXy9ub25NZXRob2RJbmRlbnRhdGlvbi50ZXN0LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL25vbk1ldGhvZEluZGVudGF0aW9uLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9fX3Rlc3RzX18vbm9uTWV0aG9kSW5kZW50YXRpb24udGVzdC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvX190ZXN0c19fL25vbk1ldGhvZEluZGVudGF0aW9uLnRlc3QudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9jb25zdHMudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9jb25zdHMudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9jb25zdHMudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2NvbnN0cy50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdENsb3N1cmUudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRDbG9zdXJlLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0Q2xvc3VyZS50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0Q2xvc3VyZS50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdE1ldGhvZC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdE1ldGhvZC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdE1ldGhvZC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0TWV0aG9kLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0Tm9uR3JlbWxpbi50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdE5vbkdyZW1saW4udHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXROb25HcmVtbGluLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXROb25HcmVtbGluLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0U3RyaW5nLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0U3RyaW5nLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0U3RyaW5nLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRTdHJpbmcudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvZ2V0U3RlcEdyb3Vwcy9pbmRleC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL2luZGV4LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvaW5kZXgudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL2luZGV4LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlRmlyc3RTdGVwSW5TdGVwR3JvdXAudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvZ2V0U3RlcEdyb3Vwcy9yZWR1Y2VGaXJzdFN0ZXBJblN0ZXBHcm91cC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3JlZHVjZUZpcnN0U3RlcEluU3RlcEdyb3VwLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvZ2V0U3RlcEdyb3Vwcy9yZWR1Y2VGaXJzdFN0ZXBJblN0ZXBHcm91cC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3JlZHVjZUxhc3RTdGVwSW5TdGVwR3JvdXAudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvZ2V0U3RlcEdyb3Vwcy9yZWR1Y2VMYXN0U3RlcEluU3RlcEdyb3VwLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlTGFzdFN0ZXBJblN0ZXBHcm91cC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlTGFzdFN0ZXBJblN0ZXBHcm91cC50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3JlZHVjZU1pZGRsZVN0ZXBJblN0ZXBHcm91cC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3JlZHVjZU1pZGRsZVN0ZXBJblN0ZXBHcm91cC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3JlZHVjZU1pZGRsZVN0ZXBJblN0ZXBHcm91cC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlTWlkZGxlU3RlcEluU3RlcEdyb3VwLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlU2luZ2xlU3RlcEluU3RlcEdyb3VwLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlU2luZ2xlU3RlcEluU3RlcEdyb3VwLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvcmVkdWNlU2luZ2xlU3RlcEluU3RlcEdyb3VwLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvZ2V0U3RlcEdyb3Vwcy9yZWR1Y2VTaW5nbGVTdGVwSW5TdGVwR3JvdXAudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvZ2V0U3RlcEdyb3Vwcy91dGlscy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3V0aWxzLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2dldFN0ZXBHcm91cHMvdXRpbHMudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFRyYXZlcnNhbC9nZXRTdGVwR3JvdXBzL3V0aWxzLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2luZGV4LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2luZGV4LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0VHJhdmVyc2FsL2luZGV4LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRUcmF2ZXJzYWwvaW5kZXgudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9mb3JtYXRXb3JkLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvZm9ybWF0V29yZC50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFdvcmQudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2Zvcm1hdFdvcmQudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy9pbmRleC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2luZGV4LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvaW5kZXgudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL2luZGV4LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvZm9ybWF0U3ludGF4VHJlZXMvdXRpbHMudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy91dGlscy50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2Zvcm1hdFN5bnRheFRyZWVzL3V0aWxzLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9mb3JtYXRTeW50YXhUcmVlcy91dGlscy50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2luZGV4LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvaW5kZXgudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9pbmRleC50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvaW5kZXgudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9sYXlvdXRVdGlscy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2xheW91dFV0aWxzLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvbGF5b3V0VXRpbHMudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L2xheW91dFV0aWxzLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcGFyc2VUb1N5bnRheFRyZWVzL19fdGVzdHNfXy9leHRyYWN0R3JlbWxpblF1ZXJpZXMudGVzdC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3BhcnNlVG9TeW50YXhUcmVlcy9fX3Rlc3RzX18vZXh0cmFjdEdyZW1saW5RdWVyaWVzLnRlc3QudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9wYXJzZVRvU3ludGF4VHJlZXMvX190ZXN0c19fL2V4dHJhY3RHcmVtbGluUXVlcmllcy50ZXN0LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9wYXJzZVRvU3ludGF4VHJlZXMvX190ZXN0c19fL2V4dHJhY3RHcmVtbGluUXVlcmllcy50ZXN0LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcGFyc2VUb1N5bnRheFRyZWVzL2V4dHJhY3RHcmVtbGluUXVlcmllcy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3BhcnNlVG9TeW50YXhUcmVlcy9leHRyYWN0R3JlbWxpblF1ZXJpZXMudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9wYXJzZVRvU3ludGF4VHJlZXMvZXh0cmFjdEdyZW1saW5RdWVyaWVzLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9wYXJzZVRvU3ludGF4VHJlZXMvZXh0cmFjdEdyZW1saW5RdWVyaWVzLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcGFyc2VUb1N5bnRheFRyZWVzL2luZGV4LnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcGFyc2VUb1N5bnRheFRyZWVzL2luZGV4LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcGFyc2VUb1N5bnRheFRyZWVzL2luZGV4LnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9wYXJzZVRvU3ludGF4VHJlZXMvaW5kZXgudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9yZWNyZWF0ZVF1ZXJ5T25lbGluZXJGcm9tU3ludGF4VHJlZS50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3JlY3JlYXRlUXVlcnlPbmVsaW5lckZyb21TeW50YXhUcmVlLnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcmVjcmVhdGVRdWVyeU9uZWxpbmVyRnJvbVN5bnRheFRyZWUudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3JlY3JlYXRlUXVlcnlPbmVsaW5lckZyb21TeW50YXhUcmVlLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvcmVjcmVhdGVRdWVyeVN0cmluZ0Zyb21Gb3JtYXR0ZWRTeW50YXhUcmVlcy50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3JlY3JlYXRlUXVlcnlTdHJpbmdGcm9tRm9ybWF0dGVkU3ludGF4VHJlZXMudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9yZWNyZWF0ZVF1ZXJ5U3RyaW5nRnJvbUZvcm1hdHRlZFN5bnRheFRyZWVzLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS9yZWNyZWF0ZVF1ZXJ5U3RyaW5nRnJvbUZvcm1hdHRlZFN5bnRheFRyZWVzLnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvdHlwZXMudHMgYi9ncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS90eXBlcy50cwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3R5cGVzLnRzCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3NyYy9mb3JtYXRRdWVyeS90eXBlcy50cwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvc3JjL2Zvcm1hdFF1ZXJ5L3V0aWxzLnRzIGIvZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvdXRpbHMudHMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW50L3NyYy9mb3JtYXRRdWVyeS91dGlscy50cwpyZW5hbWUgdG8gZ3JlbWxpbi1qcy9ncmVtbGludC9zcmMvZm9ybWF0UXVlcnkvdXRpbHMudHMKZGlmZiAtLWdpdCBhL2dyZW1saW50L3NyYy9pbmRleC50cyBiL2dyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2luZGV4LnRzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC9zcmMvaW5kZXgudHMKcmVuYW1lIHRvIGdyZW1saW4tanMvZ3JlbWxpbnQvc3JjL2luZGV4LnRzCmRpZmYgLS1naXQgYS9ncmVtbGludC90c2NvbmZpZy5qc29uIGIvZ3JlbWxpbi1qcy9ncmVtbGludC90c2NvbmZpZy5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGludC90c2NvbmZpZy5qc29uCnJlbmFtZSB0byBncmVtbGluLWpzL2dyZW1saW50L3RzY29uZmlnLmpzb24KZGlmZiAtLWdpdCBhL2dyZW1saW4tanMvcGFja2FnZS1sb2NrLmpzb24gYi9ncmVtbGluLWpzL3BhY2thZ2UtbG9jay5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYzNiNjAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLWpzL3BhY2thZ2UtbG9jay5qc29uCkBAIC0wLDAgKzEsMTM1NDUgQEAKK3sKKyAgIm5hbWUiOiAiYXBhY2hlLXRpbmtlcnBvcCIsCisgICJsb2NrZmlsZVZlcnNpb24iOiAzLAorICAicmVxdWlyZXMiOiB0cnVlLAorICAicGFja2FnZXMiOiB7CisgICAgIiI6IHsKKyAgICAgICJuYW1lIjogImFwYWNoZS10aW5rZXJwb3AiLAorICAgICAgIndvcmtzcGFjZXMiOiBbCisgICAgICAgICJncmVtbGluLWphdmFzY3JpcHQiLAorICAgICAgICAiZ3JlbWxpbi1tY3AiLAorICAgICAgICAiZ3JlbWxpbnQiCisgICAgICBdCisgICAgfSwKKyAgICAiZ3JlbWxpbi1qYXZhc2NyaXB0IjogeworICAgICAgIm5hbWUiOiAiZ3JlbWxpbiIsCisgICAgICAidmVyc2lvbiI6ICI0LjAuMC1hbHBoYTEiLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW50bHI0bmciOiAiMy4wLjE2IiwKKyAgICAgICAgImJ1ZmZlciI6ICJeNi4wLjMiLAorICAgICAgICAiZXZlbnRlbWl0dGVyMyI6ICJeNS4wLjEiLAorICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIl40LjUuMiIKKyAgICAgIH0sCisgICAgICAiZGV2RGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGN1Y3VtYmVyL2N1Y3VtYmVyIjogIn4xMi43LjAiLAorICAgICAgICAiQGVzbGludC9qcyI6ICJeOS4xNi4wIiwKKyAgICAgICAgIkBrbmlnaHRlZC9kdWVsIjogIl40LjAuMiIsCisgICAgICAgICJAdHNjb25maWcvbm9kZTE4IjogIl4xOC4yLjIiLAorICAgICAgICAiQHR5cGVzL3JlYWRhYmxlLXN0cmVhbSI6ICJeNC4wLjEwIiwKKyAgICAgICAgImFudGxyLW5nIjogIl4xLjAuMTAiLAorICAgICAgICAiY2hhaSI6ICJeNi4yLjIiLAorICAgICAgICAiY2hhaS1zdHJpbmciOiAiXjIuMC4wIiwKKyAgICAgICAgImNvbG9ycyI6ICIxLjQuMCIsCisgICAgICAgICJjcm9zcy1lbnYiOiAiXjEwLjEuMCIsCisgICAgICAgICJkZWVwLWVxbCI6ICJeNS4wLjIiLAorICAgICAgICAiZXNsaW50IjogIl45LjM2LjAiLAorICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMTAuMC4xIiwKKyAgICAgICAgImVzbGludC1wbHVnaW4tcHJldHRpZXIiOiAiXjUuMC4wIiwKKyAgICAgICAgImdsb2JhbHMiOiAiXjE3LjUuMCIsCisgICAgICAgICJtb2NoYSI6ICJeMTEuNy41IiwKKyAgICAgICAgInByZXR0aWVyIjogIl4zLjAuMCIsCisgICAgICAgICJ0cy1ub2RlIjogIl4xMC45LjIiLAorICAgICAgICAidHlwZWRvYyI6ICJeMC4yOC4xOCIsCisgICAgICAgICJ0eXBlc2NyaXB0IjogIl41LjQuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMiIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVycyI6ICJeMy45NjcuMCIsCisgICAgICAgICJAc21pdGh5L2hhc2gtbm9kZSI6ICJeNC4yLjEyIiwKKyAgICAgICAgIkBzbWl0aHkvc2lnbmF0dXJlLXY0IjogIl41LjMuMTIiCisgICAgICB9CisgICAgfSwKKyAgICAiZ3JlbWxpbi1tY3AiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMC1hbHBoYTEiLAorICAgICAgImhhc0luc3RhbGxTY3JpcHQiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC42IiwKKyAgICAgICAgIkBlZmZlY3QvcGxhdGZvcm0tbm9kZSI6ICJeMC45Ni4wIiwKKyAgICAgICAgIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsiOiAiXjEuMTcuNCIsCisgICAgICAgICJlZmZlY3QiOiAiXjMuMTcuOSIsCisgICAgICAgICJncmVtbGluIjogIjQuMC4wLWFscGhhMSIsCisgICAgICAgICJncmVtbGludCI6ICI0LjAuMC1hbHBoYTEiLAorICAgICAgICAid2luc3RvbiI6ICJeMy4xNy4wIiwKKyAgICAgICAgInpvZCI6ICJeMy4yNS43NiIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiZ3JlbWxpbi1tY3AiOiAiZGlzdC9zZXJ2ZXIuanMiCisgICAgICB9LAorICAgICAgImRldkRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlc2xpbnQvanMiOiAiXjEwLjAuMCIsCisgICAgICAgICJAdHlwZXMvamVzdCI6ICJeMzAuMC4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yNC4zLjAiLAorICAgICAgICAiYXVkaXQtY2kiOiAiXjcuMS4wIiwKKyAgICAgICAgImVzbGludCI6ICJeMTAuMC4wIiwKKyAgICAgICAgImVzbGludC1jb25maWctcHJldHRpZXIiOiAiXjEwLjEuOCIsCisgICAgICAgICJodXNreSI6ICJeOS4xLjciLAorICAgICAgICAiamVzdCI6ICJeMzAuMC41IiwKKyAgICAgICAgImxpbnQtc3RhZ2VkIjogIl4xNi4xLjUiLAorICAgICAgICAicHJldHRpZXIiOiAiXjMuNi4yIiwKKyAgICAgICAgInRzLWplc3QiOiAiXjI5LjQuMSIsCisgICAgICAgICJ0c3giOiAiXjQuMjAuNSIsCisgICAgICAgICJ0eXBlc2NyaXB0IjogIl41LjkuMiIsCisgICAgICAgICJ0eXBlc2NyaXB0LWVzbGludCI6ICJeOC40MC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIyIgorICAgICAgfQorICAgIH0sCisgICAgImdyZW1saW4tbWNwL25vZGVfbW9kdWxlcy9AZXNsaW50L2pzIjogeworICAgICAgInZlcnNpb24iOiAiMTAuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2pzLy0vanMtMTAuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ZVI5azVwZDRneGpaMGFiUm9JYXhkYzdJM25Ea3RvWFprMnFPdjlnQ05XeDNtVndFbjMyVlJoeUxhUnNEaUpqVHMweHEvVDhtZlB0eXVYdTdHV0JjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZXNsaW50Lm9yZy9kb25hdGUiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc2xpbnQiOiAiXjEwLjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJlc2xpbnQiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiZ3JlbWxpbi1tY3Avbm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlIjogeworICAgICAgInZlcnNpb24iOiAiMjQuMTIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL25vZGUvLS9ub2RlLTI0LjEyLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUExc3JlMjZrZTdIREl1WS9NMjNuZDlnZkIrbnJtaHRZeU1JTmJqSTF6SEp4WXRlS1I2cVNNWDU2RnNtak1jRGIzU01jakpnNUJpUlJnT0NDL3lCRDBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInVuZGljaS10eXBlcyI6ICJ+Ny4xNi4wIgorICAgICAgfQorICAgIH0sCisgICAgImdyZW1saW4tbWNwL25vZGVfbW9kdWxlcy9lc2xpbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMC4yLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC8tL2VzbGludC0xMC4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdpeUdhS3NEZ3FYdkY0MFA4bUR3aVVwL0tRakUxRmRySUVKc004UFozWENpbmlUTVhTM09IV1dVZTVGSTVhZ29DbnI4eDR4UHJURFp1eHNCbE5IbCtRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6ICJeNC44LjAiLAorICAgICAgICAiQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcCI6ICJeNC4xMi4yIiwKKyAgICAgICAgIkBlc2xpbnQvY29uZmlnLWFycmF5IjogIl4wLjIzLjUiLAorICAgICAgICAiQGVzbGludC9jb25maWctaGVscGVycyI6ICJeMC41LjUiLAorICAgICAgICAiQGVzbGludC9jb3JlIjogIl4xLjIuMSIsCisgICAgICAgICJAZXNsaW50L3BsdWdpbi1raXQiOiAiXjAuNy4xIiwKKyAgICAgICAgIkBodW1hbmZzL25vZGUiOiAiXjAuMTYuNiIsCisgICAgICAgICJAaHVtYW53aG9jb2Rlcy9tb2R1bGUtaW1wb3J0ZXIiOiAiXjEuMC4xIiwKKyAgICAgICAgIkBodW1hbndob2NvZGVzL3JldHJ5IjogIl4wLjQuMiIsCisgICAgICAgICJAdHlwZXMvZXN0cmVlIjogIl4xLjAuNiIsCisgICAgICAgICJhanYiOiAiXjYuMTQuMCIsCisgICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjYiLAorICAgICAgICAiZGVidWciOiAiXjQuMy4yIiwKKyAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl40LjAuMCIsCisgICAgICAgICJlc2xpbnQtc2NvcGUiOiAiXjkuMS4yIiwKKyAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjUuMC4xIiwKKyAgICAgICAgImVzcHJlZSI6ICJeMTEuMi4wIiwKKyAgICAgICAgImVzcXVlcnkiOiAiXjEuNy4wIiwKKyAgICAgICAgImVzdXRpbHMiOiAiXjIuMC4yIiwKKyAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiLAorICAgICAgICAiZmlsZS1lbnRyeS1jYWNoZSI6ICJeOC4wLjAiLAorICAgICAgICAiZmluZC11cCI6ICJeNS4wLjAiLAorICAgICAgICAiZ2xvYi1wYXJlbnQiOiAiXjYuMC4yIiwKKyAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAorICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKKyAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4wIiwKKyAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeS13aXRob3V0LWpzb25pZnkiOiAiXjEuMC4xIiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICJeMTAuMi40IiwKKyAgICAgICAgIm5hdHVyYWwtY29tcGFyZSI6ICJeMS40LjAiLAorICAgICAgICAib3B0aW9uYXRvciI6ICJeMC45LjMiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImVzbGludCI6ICJiaW4vZXNsaW50LmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZXNsaW50Lm9yZy9kb25hdGUiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJqaXRpIjogIioiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAiaml0aSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJncmVtbGludCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wLWFscGhhMSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJkZXZEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvamVzdCI6ICJeMzAuMC4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMi41LjEiLAorICAgICAgICAiZXNsaW50IjogIl4xMC4wLjAiLAorICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMTAuMC4wIiwKKyAgICAgICAgImplc3QiOiAiXjMwLjAuMCIsCisgICAgICAgICJwcmV0dGllciI6ICJeMy4wLjAiLAorICAgICAgICAidHMtamVzdCI6ICJeMjkuNC42IiwKKyAgICAgICAgInR5cGVzY3JpcHQiOiAiXjUuMC4wIiwKKyAgICAgICAgInR5cGVzY3JpcHQtZXNsaW50IjogIl44LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJncmVtbGludC9ub2RlX21vZHVsZXMvQHR5cGVzL25vZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyMi4xOS4xNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL25vZGUvLS9ub2RlLTIyLjE5LjE3LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13R2RNY2YrdlBZTTZqaWtwUy9xaGc2V2lxU1YvT2hHK2plZUhUL0tsVnF4WWZENDBpWUpmOS9BRTF1UXhWV0Z2VTdNaXBLUmtSdjhOU0hpQ0dnUHI4UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ1bmRpY2ktdHlwZXMiOiAifjYuMjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJncmVtbGludC9ub2RlX21vZHVsZXMvZXNsaW50IjogeworICAgICAgInZlcnNpb24iOiAiMTAuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQvLS9lc2xpbnQtMTAuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13aXlHYUtzRGdxWHZGNDBQOG1Ed2lVcC9LUWpFMUZkcklFSnNNOFBaM1hDaW5pVE1YUzNPSFdXVWU1Rkk1YWdvQ25yOHg0eFByVERadXhzQmxOSGwrUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMiOiAiXjQuOC4wIiwKKyAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAiOiAiXjQuMTIuMiIsCisgICAgICAgICJAZXNsaW50L2NvbmZpZy1hcnJheSI6ICJeMC4yMy41IiwKKyAgICAgICAgIkBlc2xpbnQvY29uZmlnLWhlbHBlcnMiOiAiXjAuNS41IiwKKyAgICAgICAgIkBlc2xpbnQvY29yZSI6ICJeMS4yLjEiLAorICAgICAgICAiQGVzbGludC9wbHVnaW4ta2l0IjogIl4wLjcuMSIsCisgICAgICAgICJAaHVtYW5mcy9ub2RlIjogIl4wLjE2LjYiLAorICAgICAgICAiQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogIl4xLjAuMSIsCisgICAgICAgICJAaHVtYW53aG9jb2Rlcy9yZXRyeSI6ICJeMC40LjIiLAorICAgICAgICAiQHR5cGVzL2VzdHJlZSI6ICJeMS4wLjYiLAorICAgICAgICAiYWp2IjogIl42LjE0LjAiLAorICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC42IiwKKyAgICAgICAgImRlYnVnIjogIl40LjMuMiIsCisgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeNC4wLjAiLAorICAgICAgICAiZXNsaW50LXNjb3BlIjogIl45LjEuMiIsCisgICAgICAgICJlc2xpbnQtdmlzaXRvci1rZXlzIjogIl41LjAuMSIsCisgICAgICAgICJlc3ByZWUiOiAiXjExLjIuMCIsCisgICAgICAgICJlc3F1ZXJ5IjogIl4xLjcuMCIsCisgICAgICAgICJlc3V0aWxzIjogIl4yLjAuMiIsCisgICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIiwKKyAgICAgICAgImZpbGUtZW50cnktY2FjaGUiOiAiXjguMC4wIiwKKyAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKKyAgICAgICAgImdsb2ItcGFyZW50IjogIl42LjAuMiIsCisgICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKKyAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCisgICAgICAgICJpcy1nbG9iIjogIl40LjAuMCIsCisgICAgICAgICJqc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5IjogIl4xLjAuMSIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiXjEwLjIuNCIsCisgICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKKyAgICAgICAgIm9wdGlvbmF0b3IiOiAiXjAuOS4zIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJlc2xpbnQiOiAiYmluL2VzbGludC5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgXjIyLjEzLjAgfHwgPj0yNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2VzbGludC5vcmcvZG9uYXRlIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaml0aSI6ICIqIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgImppdGkiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAiZ3JlbWxpbnQvbm9kZV9tb2R1bGVzL3VuZGljaS10eXBlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5kaWNpLXR5cGVzLy0vdW5kaWNpLXR5cGVzLTYuMjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaXdEWnFnMFFBR3JnOVJhdjVING4wTTY0YzNta1I1OWNKNndRcCs3QzRuSTBnc21FeGFlZGFZTE5PNDRlVDRBdEJCd2piVGlHUE1sdDJNZDBUOUg5SlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIvLS9zaGEyNTYtYnJvd3Nlci01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVhmTi9sR290U1F3dTZITmNFc0lBU283a1dYWjVIWVd2Zk9tU05LRHNFcUM0T2FzaFRwOGFsVG1heitGN1RDMkwwODNTRnY1UmRCK3FVM1ZzMWtacXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWpzIjogIl41LjIuMCIsCisgICAgICAgICJAYXdzLWNyeXB0by9zdXBwb3J0cy13ZWItY3J5cHRvIjogIl41LjIuMCIsCisgICAgICAgICJAYXdzLWNyeXB0by91dGlsIjogIl41LjIuMCIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy4yMjIuMCIsCisgICAgICAgICJAYXdzLXNkay91dGlsLWxvY2F0ZS13aW5kb3ciOiAiXjMuMC4wIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl4yLjAuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3NoYTI1Ni1icm93c2VyL25vZGVfbW9kdWxlcy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L2lzLWFycmF5LWJ1ZmZlci8tL2lzLWFycmF5LWJ1ZmZlci0yLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR0dQM085UUZEMjR1R2VBWFlVandTVFhBUm9xcFp5a0hhZE9tQThHNXZmSlBLMC9EQzY3cWEvLzBxdnFySnpMMXhjOFdRV1g3L3ljN2Z3dWRqUEhQaEE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYnVmZmVyLWZyb20vLS91dGlsLWJ1ZmZlci1mcm9tLTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JSmRXQmJUY01RNkRBMGdkTmhoL0J3ckxrRFIrQURXNUtyMWFabWQ0azNESUY2ZXpNVjRSMk5JQW1UMDh3UUozeVVLODJ0aEhXbUMvVG5LL3dwTU1JQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6ICJeMi4yLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC11dGY4IjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC11dGY4Ly0vdXRpbC11dGY4LTIuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SOFJkbjhIeTcyS0tjZWJnTGl2OGpRY1FrWG9MTU9HR3Y1dUkxL2swbCtzbnFrT3pRMVIwQ2hVQkN4V01sQnNGTWVrV2pxMHdSdWRJd2VGczdzS1Q1QT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3V0aWwtYnVmZmVyLWZyb20iOiAiXjIuMi4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3NoYTI1Ni1qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLWNyeXB0by9zaGEyNTYtanMvLS9zaGEyNTYtanMtNS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZGUVF5dTdlZHU0dWZ2SVorT2FkRnBISE90K2VTVEJhWWFraTQ0Yytha2pnN3FaZzlvT1FlTGxrNzdGNnRTWXFqREFGQ2xySEprOXRNZjBIZFZ5T3ZBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3MtY3J5cHRvL3V0aWwiOiAiXjUuMi4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjIyMi4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3N1cHBvcnRzLXdlYi1jcnlwdG8iOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1jcnlwdG8vc3VwcG9ydHMtd2ViLWNyeXB0by8tL3N1cHBvcnRzLXdlYi1jcnlwdG8tNS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlBdlVvdG0wMjFrTTMzZUNkTmZ3SU4vL0Y3Ny9JQUREU3M1OGkrTURhT3FGclZqWm85YkFhbDBOSzdIdXJSdVdMTHBGMWlMWDdnYldyakhqZW8rWUZnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLWNyeXB0by91dGlsLy0vdXRpbC01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNFJrVTlFc0k2WnBCdmU1ZnNlUWxHTlVXS01hMVJMUFExZG5qblFvZTA3bGRmSXpjc0diNWhDNVcwRG03dTQyM0tXemF3bHJwYmpYQnJYQ0V2OXphelE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuMjIyLjAiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjIuMC4wIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbC9ub2RlX21vZHVsZXMvQHNtaXRoeS9pcy1hcnJheS1idWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9pcy1hcnJheS1idWZmZXIvLS9pcy1hcnJheS1idWZmZXItMi4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdHUDNPOVFGRDI0dUdlQVhZVWp3U1RYQVJvcXBaeWtIYWRPbUE4RzV2ZkpQSzAvREM2N3FhLy8wcXZxckp6TDF4YzhXUVdYNy95Yzdmd3VkalBIUGhBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3MtY3J5cHRvL3V0aWwvbm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYnVmZmVyLWZyb20vLS91dGlsLWJ1ZmZlci1mcm9tLTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JSmRXQmJUY01RNkRBMGdkTmhoL0J3ckxrRFIrQURXNUtyMWFabWQ0azNESUY2ZXpNVjRSMk5JQW1UMDh3UUozeVVLODJ0aEhXbUMvVG5LL3dwTU1JQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2lzLWFycmF5LWJ1ZmZlciI6ICJeMi4yLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1jcnlwdG8vdXRpbC9ub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXV0ZjgiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLXV0ZjgvLS91dGlsLXV0ZjgtMi4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI4UmRuOEh5NzJLS2NlYmdMaXY4alFjUWtYb0xNT0dHdjV1STEvazBsK3NucWtPelExUjBDaFVCQ3hXTWxCc0ZNZWtXanEwd1J1ZEl3ZUZzN3NLVDVBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6ICJeMi4yLjAiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEwMzMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkvLS9jbGllbnQtY29nbml0by1pZGVudGl0eS0zLjEwMzMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSHY1RWZhdktVdWt4d2ZoZEdrSDVmQkNvM2RqSWJyeDdMWHQ4NHNBUmtpUmlZUFZYL1VaSFgzR3NsQjNSMHoxT1BuczQyWkxOUDdEMVdHRTNkWnkzbnc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWJyb3dzZXIiOiAiNS4yLjAiLAorICAgICAgICAiQGF3cy1jcnlwdG8vc2hhMjU2LWpzIjogIjUuMi4wIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTc0LjIiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlIjogIl4zLjk3Mi4zMyIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyIjogIl4zLjk3Mi4xMCIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlciI6ICJeMy45NzIuMTAiLAorICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uIjogIl4zLjk3Mi4xMSIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQiOiAiXjMuOTcyLjMyIiwKKyAgICAgICAgIkBhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIiOiAiXjMuOTcyLjEyIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzIjogIl4zLjk5Ni43IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1icm93c2VyIjogIl4zLjk3Mi4xMCIsCisgICAgICAgICJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZSI6ICJeMy45NzMuMTgiLAorICAgICAgICAiQHNtaXRoeS9jb25maWctcmVzb2x2ZXIiOiAiXjQuNC4xNiIsCisgICAgICAgICJAc21pdGh5L2NvcmUiOiAiXjMuMjMuMTUiLAorICAgICAgICAiQHNtaXRoeS9mZXRjaC1odHRwLWhhbmRsZXIiOiAiXjUuMy4xNyIsCisgICAgICAgICJAc21pdGh5L2hhc2gtbm9kZSI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvaW52YWxpZC1kZXBlbmRlbmN5IjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50IjogIl40LjQuMzAiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5IjogIl40LjUuMyIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGUiOiAiXjQuMi4xOCIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtc3RhY2siOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlciI6ICJeNC41LjMiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjExIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3VybC1wYXJzZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYm9keS1sZW5ndGgtYnJvd3NlciI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGUiOiAiXjQuMi4zIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLWJyb3dzZXIiOiAiXjQuMy40NyIsCisgICAgICAgICJAc21pdGh5L3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlIjogIl40LjIuNTIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWVuZHBvaW50cyI6ICJeMy40LjEiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtcmV0cnkiOiAiXjQuMy4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzQuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY29yZS8tL2NvcmUtMy45NzQuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVzNhSkptMmNsdThPbXNyd01PTW5mb2YxM082TEduYmtublpJUWVTUmJ4anFLYWgyblZ2a2piVUJCWlZoV3J0MDhLQzY5SDdXc0lOVGRyeEMvMlNYUXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQGF3cy1zZGsveG1sLWJ1aWxkZXIiOiAiXjMuOTcyLjE4IiwKKyAgICAgICAgIkBzbWl0aHkvY29yZSI6ICJeMy4yMy4xNiIsCisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvc2lnbmF0dXJlLXY0IjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjEyIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtbWlkZGxld2FyZSI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1yZXRyeSI6ICJeNC4zLjMiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItY29nbml0by1pZGVudGl0eSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjI2IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWNvZ25pdG8taWRlbnRpdHkvLS9jcmVkZW50aWFsLXByb3ZpZGVyLWNvZ25pdG8taWRlbnRpdHktMy45NzIuMjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVKeUU0MDhkcFJrcjhYU0QxVGpUUWZPQ0sxcjJvK1c2dmhzR0hpTDBQbUpLcjZMZ0NFUDczZXBCYldidzZackpMS3hsVVlQNDRuVnpZN2Ntd1ZsVWd3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL25lc3RlZC1jbGllbnRzIjogIl4zLjk5Ny4xIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4yOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYvLS9jcmVkZW50aWFsLXByb3ZpZGVyLWVudi0zLjk3Mi4yOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcmYrQWxVeGdUZVN6US80em9TMEQrQnQ3WHZncFk0OFBuV0c4WWcvTjlmZE1neUsySmFxYSs2dExacDRNWU1JTUhrR3JmQXhuYlNlYjJZTE1HRk1nNmc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMyIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaHR0cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjMxIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWh0dHAvLS9jcmVkZW50aWFsLXByb3ZpZGVyLWh0dHAtMy45NzIuMzEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRSMi9sUTNxS0ZqMkVPcnNpQVN6ZW1zTkV6MnV6Wi9TVUJmNDgrVTRDcjlhL0ZabEhmSC9od0FlQkpOQnAxZ015Sk54Uk9KWmhUM2RuMWNPK2puWWZRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTc0LjMiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQHNtaXRoeS9mZXRjaC1odHRwLWhhbmRsZXIiOiAiXjUuMy4xNyIsCisgICAgICAgICJAc21pdGh5L25vZGUtaHR0cC1oYW5kbGVyIjogIl40LjYuMCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjEyIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtc3RyZWFtIjogIl40LjUuMjQiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4zMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkvLS9jcmVkZW50aWFsLXByb3ZpZGVyLWluaS0zLjk3Mi4zMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVXdkYkpiT3Jnbk94WmJzaGFOWjREelgzNWg1d1FkMzNNTllUR3pXaE4zT1JHOWxHOUtRYkRYNmw2dERKU0FkYUdUa3RKb1pQU3JpdG1Vb1cxcllrUkE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMyIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWVudiI6ICJeMy45NzIuMjkiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1odHRwIjogIl4zLjk3Mi4zMSIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWxvZ2luIjogIl4zLjk3Mi4zMyIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MiOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvIjogIl4zLjk3Mi4zMyIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eSI6ICJeMy45NzIuMzMiLAorICAgICAgICAiQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMiOiAiXjMuOTk3LjEiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQHNtaXRoeS9jcmVkZW50aWFsLXByb3ZpZGVyLWltZHMiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1sb2dpbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjMzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWxvZ2luLy0vY3JlZGVudGlhbC1wcm92aWRlci1sb2dpbi0zLjk3Mi4zMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV3ladVBWb0RNMUhHTmw0MWVWZzhIU1NYSUIrRkdrdXVLNjNHaERiaDRUTWRmV1UwM0FjaVd2Ri9RcU9WV3ZKdFdWWWFMZGRBTkorYVVrbFZyMmlldXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMyIsCisgICAgICAgICJAYXdzLXNkay9uZXN0ZWQtY2xpZW50cyI6ICJeMy45OTcuMSIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1ub2RlIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMzQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS8tL2NyZWRlbnRpYWwtcHJvdmlkZXItbm9kZS0zLjk3Mi4zNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1BjaXNVUmliS1U0eDBQQ1dKa1dGMUtKWW00OUNwaDlkQ24vUEFuRzVGVTB3cTVJZDNnMnY3UnVFV0F0TmxLdjFBZjRnVUpZQlZHT2VOcFNFRXg0MUE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1lbnYiOiAiXjMuOTcyLjI5IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaHR0cCI6ICJeMy45NzIuMzEiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1pbmkiOiAiXjMuOTcyLjMzIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2VzcyI6ICJeMy45NzIuMjkiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28iOiAiXjMuOTcyLjMzIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5IjogIl4zLjk3Mi4zMyIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcyI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiAiXjQuNC45IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXByb2Nlc3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4yOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzLy0vY3JlZGVudGlhbC1wcm92aWRlci1wcm9jZXNzLTMuOTcyLjI5LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EVVJpc3FXUzNiVWdpd01YVG16eW1WTkdsY1JXMEZuYlBaM1Naa25obXhuQ1htM245aWRrVEo2VCtVaXIzNTlLUkt0Sk5GTFJWaXNrazhIc1NWTGkxdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jb3JlIjogIl4zLjk3NC4zIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvcGVydHktcHJvdmlkZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiAiXjQuNC45IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzbyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjMzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLXNzby8tL2NyZWRlbnRpYWwtcHJvdmlkZXItc3NvLTMuOTcyLjMzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05eTlvYlU0SVFXcnU5ZitOaWlzY1VleUNlNVptUWF2NEZLRWIxcWZVTnJpay9DM0J6QkdVbkhRV3lQRXlYak9YOWNiK3Z4MVRZeDBxWkJ0aW5LZHpUQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay9jb3JlIjogIl4zLjk3NC4zIiwKKyAgICAgICAgIkBhd3Mtc2RrL25lc3RlZC1jbGllbnRzIjogIl4zLjk5Ny4xIiwKKyAgICAgICAgIkBhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycyI6ICIzLjEwMzQuMCIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4zMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci13ZWItaWRlbnRpdHkvLS9jcmVkZW50aWFsLXByb3ZpZGVyLXdlYi1pZGVudGl0eS0zLjk3Mi4zMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmF6aGxOMFlBa25hMlQycDJ2NFl1dVJsVkJWUk5vOFYwU0wrOUplUFRXRG5kRVVBZU9CQWpZZVFmQU1idER5Q2gxMjArekEwT3A2VjBqUzRkdzIraXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMyIsCisgICAgICAgICJAYXdzLXNkay9uZXN0ZWQtY2xpZW50cyI6ICJeMy45OTcuMSIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEwMzMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMvLS9jcmVkZW50aWFsLXByb3ZpZGVycy0zLjEwMzMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteXh3aVlCM3o4aWxWTG10TEV3ckVML01JSVNZRExSeWhBSm1Yb3ppTkl4cUtMb0NuWmVkNEEyQWhsQ2NQTXZGZkE4QjU2b05KNjRuR29lcE1hRWFnenc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY2xpZW50LWNvZ25pdG8taWRlbnRpdHkiOiAiMy4xMDMzLjAiLAorICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMiIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWNvZ25pdG8taWRlbnRpdHkiOiAiXjMuOTcyLjI1IiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItZW52IjogIl4zLjk3Mi4yOCIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWh0dHAiOiAiXjMuOTcyLjMwIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItaW5pIjogIl4zLjk3Mi4zMiIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLWxvZ2luIjogIl4zLjk3Mi4zMiIsCisgICAgICAgICJAYXdzLXNkay9jcmVkZW50aWFsLXByb3ZpZGVyLW5vZGUiOiAiXjMuOTcyLjMzIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItcHJvY2VzcyI6ICJeMy45NzIuMjgiLAorICAgICAgICAiQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlci1zc28iOiAiXjMuOTcyLjMyIiwKKyAgICAgICAgIkBhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXItd2ViLWlkZW50aXR5IjogIl4zLjk3Mi4zMiIsCisgICAgICAgICJAYXdzLXNkay9uZXN0ZWQtY2xpZW50cyI6ICJeMy45OTcuMCIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L2NvbmZpZy1yZXNvbHZlciI6ICJeNC40LjE2IiwKKyAgICAgICAgIkBzbWl0aHkvY29yZSI6ICJeMy4yMy4xNSIsCisgICAgICAgICJAc21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcyI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtaG9zdC1oZWFkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvbWlkZGxld2FyZS1ob3N0LWhlYWRlci8tL21pZGRsZXdhcmUtaG9zdC1oZWFkZXItMy45NzIuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUlKU3NJTWVWUThNTUNQYnVoMUFibHRrRmhMQkxYbjdhZWp6Zlg1WUtUL1ZMREhuKytEY3o4ODg2dFhja0Urd1Fzc3lQVWhhWHJKaGRha08yVmlsUmhnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjEwIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlci8tL21pZGRsZXdhcmUtbG9nZ2VyLTMuOTcyLjEwLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PT3VHdnZ6MURtMjBTalpvNW9FQmVQRnF4dDVuZjhBd2tORFN5VUh2RDkvYmZOQVNtc3RjWXhGQUhVb3d5NG42SW83bVdVWjA0SlVSWndTQnZ5UWFuUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMTEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvbi8tL21pZGRsZXdhcmUtcmVjdXJzaW9uLWRldGVjdGlvbi0zLjk3Mi4xMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItK3p6NmY3OUtqOVY1cUZLMlArRDhFaGpudzRBaHBoQWxDQXNQalVxRWNJbkE5dW10U1NLTXJIYlNhZ0VlT0lzRE51dlZySDk4YmpSSGN5UXVrVHJoYVE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQGF3cy9sYW1iZGEtaW52b2tlLXN0b3JlIjogIl4wLjIuMiIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstczMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjk3Mi4zMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstczMvLS9taWRkbGV3YXJlLXNkay1zMy0zLjk3Mi4zMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZGMyTzJ4MFY1cEdKaG1kUVlRdmVVSUZ0TVpzdXI3R3JHdVNnb0tNNG9RSnVFY2Z2d25KM3NqK2lwNldueFI1bDZUclg1emtsNEtnY2dzd095M3dBelE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMyIsCisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAYXdzLXNkay91dGlsLWFybi1wYXJzZXIiOiAiXjMuOTcyLjMiLAorICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3NpZ25hdHVyZS12NCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvc21pdGh5LWNsaWVudCI6ICJeNC4xMi4xMiIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWNvbmZpZy1wcm92aWRlciI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtc3RyZWFtIjogIl40LjUuMjQiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTcyLjMzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQvLS9taWRkbGV3YXJlLXVzZXItYWdlbnQtMy45NzIuMzMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1xdFQzRm83eGFuV01rMlNiQWNLTEdHSS9xMUdIV05yRXhCajdjbldQMlcybWtUTWhlWEI0bnRKdndQWjFVeFByUW9icnN2MmRXRlhtYU9KZVNPaURnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTc0LjMiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMiOiAiXjMuOTk2LjgiLAorICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtcmV0cnkiOiAiXjQuMy4zIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL25lc3RlZC1jbGllbnRzIjogeworICAgICAgInZlcnNpb24iOiAiMy45OTcuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMvLS9uZXN0ZWQtY2xpZW50cy0zLjk5Ny4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BZmM5aGMyV1pzM1g0SmI4ZG54eXVZaVpzTG9XUk81MXJvVENSZjQ5N2dQbkFLTjJXUmRYQU51MXZhVkNUenduRE1PWUZYYi9jWXY0WlNqeHFBcWNLQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLWNyeXB0by9zaGEyNTYtYnJvd3NlciI6ICI1LjIuMCIsCisgICAgICAgICJAYXdzLWNyeXB0by9zaGEyNTYtanMiOiAiNS4yLjAiLAorICAgICAgICAiQGF3cy1zZGsvY29yZSI6ICJeMy45NzQuMyIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLWhvc3QtaGVhZGVyIjogIl4zLjk3Mi4xMCIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLWxvZ2dlciI6ICJeMy45NzIuMTAiLAorICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS1yZWN1cnNpb24tZGV0ZWN0aW9uIjogIl4zLjk3Mi4xMSIsCisgICAgICAgICJAYXdzLXNkay9taWRkbGV3YXJlLXVzZXItYWdlbnQiOiAiXjMuOTcyLjMzIiwKKyAgICAgICAgIkBhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIiOiAiXjMuOTcyLjEzIiwKKyAgICAgICAgIkBhd3Mtc2RrL3NpZ25hdHVyZS12NC1tdWx0aS1yZWdpb24iOiAiXjMuOTk2LjIwIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzIjogIl4zLjk5Ni44IiwKKyAgICAgICAgIkBhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1icm93c2VyIjogIl4zLjk3Mi4xMCIsCisgICAgICAgICJAYXdzLXNkay91dGlsLXVzZXItYWdlbnQtbm9kZSI6ICJeMy45NzMuMTkiLAorICAgICAgICAiQHNtaXRoeS9jb25maWctcmVzb2x2ZXIiOiAiXjQuNC4xNyIsCisgICAgICAgICJAc21pdGh5L2NvcmUiOiAiXjMuMjMuMTYiLAorICAgICAgICAiQHNtaXRoeS9mZXRjaC1odHRwLWhhbmRsZXIiOiAiXjUuMy4xNyIsCisgICAgICAgICJAc21pdGh5L2hhc2gtbm9kZSI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvaW52YWxpZC1kZXBlbmRlbmN5IjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLWNvbnRlbnQtbGVuZ3RoIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50IjogIl40LjQuMzEiLAorICAgICAgICAiQHNtaXRoeS9taWRkbGV3YXJlLXJldHJ5IjogIl40LjUuNCIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtc2VyZGUiOiAiXjQuMi4xOSIsCisgICAgICAgICJAc21pdGh5L21pZGRsZXdhcmUtc3RhY2siOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlciI6ICJeNC42LjAiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjEyIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3VybC1wYXJzZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYm9keS1sZW5ndGgtYnJvd3NlciI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLW5vZGUiOiAiXjQuMi4zIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1kZWZhdWx0cy1tb2RlLWJyb3dzZXIiOiAiXjQuMy40OCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlIjogIl40LjIuNTMiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWVuZHBvaW50cyI6ICJeMy40LjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtcmV0cnkiOiAiXjQuMy4zIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYXdzLXNkay9yZWdpb24tY29uZmlnLXJlc29sdmVyIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMTMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3JlZ2lvbi1jb25maWctcmVzb2x2ZXIvLS9yZWdpb24tY29uZmlnLXJlc29sdmVyLTMuOTcyLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DdkoyWklqSy9qVkQvbGJPcG93QlZFbEp5QzFZeExUSUoxM3lNMEFFbzB0MnY3c3dPekdqU0E2bEpHSCtEd1pYUWhjalVqb1l3YzhiVllDWDVNRHIxQT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L2NvbmZpZy1yZXNvbHZlciI6ICJeNC40LjE3IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvc2lnbmF0dXJlLXY0LW11bHRpLXJlZ2lvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuOTk2LjIwIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay9zaWduYXR1cmUtdjQtbXVsdGktcmVnaW9uLy0vc2lnbmF0dXJlLXY0LW11bHRpLXJlZ2lvbi0zLjk5Ni4yMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUVqNkRoRWNhTzhSZ1Z0RkNKK3hwQ1FuWkMzSWVzcjA5YXZkWTc1cWtNUWZja1FVTHU0NDdJZWdLN1JzMU1DR2VyVkJmS25KUTRxK3BRcTloSTVsbmc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGF3cy1zZGsvbWlkZGxld2FyZS1zZGstczMiOiAiXjMuOTcyLjMyIiwKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvc2lnbmF0dXJlLXY0IjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3Rva2VuLXByb3ZpZGVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMTAzNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYXdzLXNkay90b2tlbi1wcm92aWRlcnMvLS90b2tlbi1wcm92aWRlcnMtMy4xMDM0LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThFK0tHY0Q0RVQwSDlGWEoyL1pXYmZGblFOWUVrVFpaWUp4QXMxbGtkSmx2ZTFBWXVxYXlkSW5JRmZ2TmdvejVHYll0emJLOC91Z3NTTXU1d1BtNmtBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL2NvcmUiOiAiXjMuOTc0LjMiLAorICAgICAgICAiQGF3cy1zZGsvbmVzdGVkLWNsaWVudHMiOiAiXjMuOTk3LjEiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvc2hhcmVkLWluaS1maWxlLWxvYWRlciI6ICJeNC40LjkiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3R5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzMuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvdHlwZXMvLS90eXBlcy0zLjk3My44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1namxBZHRITWJ0UjlYNWlJaFZVdmJWY3k1NUtuem5wQzZia0RVV1c5ejkxNWJpMGNrZFVyNWNqZjE2S3A2eHEwYlA1SEJEMnh6Z2JMOUY5UXV2NXZVdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1hcm4tcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvdXRpbC1hcm4tcGFyc2VyLy0vdXRpbC1hcm4tcGFyc2VyLTMuOTcyLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUh6U0Q4UE1GcnZnaTJLc2VyeHVmZjVWaXROcTJzZ2YzdzlxeG1za0tEaURUVGhXZlZ0ZUp4dUNTOUpYaVBJUHRtQ3JwKzdOOWFzZklhVmhCRk9SbGxBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtZW5kcG9pbnRzIjogeworICAgICAgInZlcnNpb24iOiAiMy45OTYuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvdXRpbC1lbmRwb2ludHMvLS91dGlsLWVuZHBvaW50cy0zLjk5Ni44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vT1pIY1JEaWhrNWlFZTVWMjVOVldnNDViM3FFQThPcEhXVmRVL1hRaDhaajRoZVZQQUpxV3ZNcGhRblU3TGt1Zm1VbzEwRXB2RlBadVFNaUZMSkszZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYXdzLXNkay90eXBlcyI6ICJeMy45NzMuOCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAiQHNtaXRoeS91cmwtcGFyc2VyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWVuZHBvaW50cyI6ICJeMy40LjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy1zZGsvdXRpbC1sb2NhdGUtd2luZG93IjogeworICAgICAgInZlcnNpb24iOiAiMy45NjUuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGF3cy1zZGsvdXRpbC1sb2NhdGUtd2luZG93Ly0vdXRpbC1sb2NhdGUtd2luZG93LTMuOTY1LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdobEpOTklOUUIrOXF0THRaSmNwUWRnWnczU0NEQ3BYZFVKUDdjVG9Hd0hiQ1dDblJja0dsYzZCeC9PaFd3SVlGTkFuK0ZJeWRZOFNaMFFtVnUzeFRRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1icm93c2VyIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMTAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1icm93c2VyLy0vdXRpbC11c2VyLWFnZW50LWJyb3dzZXItMy45NzIuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZBenFYdmZFc3NHZFNJejhlamF0YW4wYk9keDFxZWZCV0tGL2dXbVZCWElQMUhrUzd2L3dqamFxckFHR0t2eWloclhUWFcwMC8yLzFuVEp0eHBYejdnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL3R5cGVzIjogIl4zLjk3My44IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJib3dzZXIiOiAiXjIuMTEuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzMuMTkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3V0aWwtdXNlci1hZ2VudC1ub2RlLy0vdXRpbC11c2VyLWFnZW50LW5vZGUtMy45NzMuMTkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpBZkhqcHpkYnJ6a0FmdEMxMzlKb1lHZlh6RGg1SFkrQXhSenc4cEdKOGNVTHNmK2w3MjFzS0FNSzhtVjVOdlJFVGFXL0J3Z2hTd1FoR2dvTmdyeE13PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBhd3Mtc2RrL21pZGRsZXdhcmUtdXNlci1hZ2VudCI6ICJeMy45NzIuMzMiLAorICAgICAgICAiQGF3cy1zZGsvdHlwZXMiOiAiXjMuOTczLjgiLAorICAgICAgICAiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlciI6ICJeNC4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtY29uZmlnLXByb3ZpZGVyIjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYXdzLWNydCI6ICI+PTEuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgImF3cy1jcnQiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bhd3Mtc2RrL3htbC1idWlsZGVyIjogeworICAgICAgInZlcnNpb24iOiAiMy45NzIuMTgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3Mtc2RrL3htbC1idWlsZGVyLy0veG1sLWJ1aWxkZXItMy45NzIuMTgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJNRE5WRzFFVFhSaGwxdG5pc1FpWUJlZjNSU2hKMWtmWkE3eDdhZml2VEZNTGlyZkhOVGI2VTcxSzU2OUhOWGhTWGJRWnN3ZUh2U0RaNmV1Qnc4aFBBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJmYXN0LXhtbC1wYXJzZXIiOiAiNS41LjgiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGF3cy9sYW1iZGEtaW52b2tlLXN0b3JlIjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bhd3MvbGFtYmRhLWludm9rZS1zdG9yZS8tL2xhbWJkYS1pbnZva2Utc3RvcmUtMC4yLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlZOHl2akUweTY1MUJpeEtOUGdtdjFXclFjK0daMTQyc2IwejRnWW5DaEREWTJZcUk0UC9qc1NvcEJXcktmQXQ3TE9KQWtPWHQ3ckMvaG1zK1djbFFRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29kZS1mcmFtZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvZGUtZnJhbWUvLS9jb2RlLWZyYW1lLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOU5oQ2VZanE5KzN1eGdkdHAyMExTaUpYSnZOMEZlQ3ROR3BKeHVNRloxS3YzY1dVTmI2RE9oSndVdmNWQ3pLR1I2NmN3NG5qd002aHJKTHFnT3diY3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IiwKKyAgICAgICAgImpzLXRva2VucyI6ICJeNC4wLjAiLAorICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb21wYXQtZGF0YSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvbXBhdC1kYXRhLy0vY29tcGF0LWRhdGEtNy4yOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UMU5DSnFUL2o5K2NuOGZ2a3Q3anR3YkxCZkxDLzF5MWM3TnRDZVhGUmd6R1RzYWZpNjhNUnY4eXprWVNhcEJuRkE2TDNVMlZTYzAyY2lEem9BSmhKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29yZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvcmUvLS9jb3JlLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ0dPZk9KcVdqZzJxVy9NYjZ6TnNEbSt1NXZGUThEeFhmYk0wOXo2OXA1WjYrbUUxaWtQMmpVWHcrajQyUGYxWFRZRUQyUm5pNWY5NW5wWWV1d01EUUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3JtcyI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC9oZWxwZXJzIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3JlbWFwcGluZyI6ICJeMi4zLjUiLAorICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCisgICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAorICAgICAgICAiZ2Vuc3luYyI6ICJeMS4wLjAtYmV0YS4yIiwKKyAgICAgICAgImpzb241IjogIl4yLjIuMyIsCisgICAgICAgICJzZW12ZXIiOiAiXjYuMy4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vYmFiZWwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb3JlL25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTYuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CUjdWdkRDVkhPK3EyeEJFV3NreFM2REpFMXFSbmI3RHh6VXJvZ2I3MUNXb1NmaWNCeFlzaUFHZCtLbDBtbXEvTXByRzl5QXJSa3lyUXhUTzZYak16QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlci5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2dlbmVyYXRvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2dlbmVyYXRvci8tL2dlbmVyYXRvci03LjI5LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFzYUYrOVFjbTJRdjhTUklNTXNjQXZHNE8zbEowRjFHdU1vNUhSL0JwMDJMb3BOZ25aQkMvRWtiZXZIRmVHczRscy9vUHo5ditCc216YmtiZSswZFV3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjkuMCIsCisgICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjEyIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4yOCIsCisgICAgICAgICJqc2VzYyI6ICJeMy4wLjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLy0vaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KWXRsczNocWkxNWZjeDVHYVNOTDdTQ1RKMk1ObWpya0hYZzRGU3BPQS9ncnhLOEt3eVo1YnViSHNDcThGWENrdWE2eGh1YWFCaXQrM2I3K1ZaUmZjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjcuMSIsCisgICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjQuMCIsCisgICAgICAgICJscnUtY2FjaGUiOiAiXjUuMS4xIiwKKyAgICAgICAgInNlbXZlciI6ICJeNi4zLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cy9ub2RlX21vZHVsZXMvc2VtdmVyIjogeworICAgICAgInZlcnNpb24iOiAiNi4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci02LjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlI3VnZEQ1ZITytxMnhCRVdza3hTNkRKRTFxUm5iN0R4elVyb2diNzFDV29TZmljQnhZc2lBR2QrS2wwbW1xL01wckc5eUFyUmt5clF4VE82WGpNekE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiYmluIjogeworICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItZ2xvYmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1nbG9iYWxzLy0vaGVscGVyLWdsb2JhbHMtNy4yOC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rVzZjSVNrWEZhMWpYc0RFZFlBOEhlZXZRVC9GVUxoeHpSOTlweHBobHRaY1ZhdWdwczUzVEhDZWlXQThTZ3V4eHBTcDNnS1BpdVlmU1dvcGtMUTRodz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzLy0vaGVscGVyLW1vZHVsZS1pbXBvcnRzLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDVYa1pLN3I3d2E5THVjR3c5THdaeXlDVXNjYjR4MzdKV1RQejdzd3dGRS8wRk1RQUdwaVdVWm44dTlEemtTQldFY0syNWptdnViZnB3MmRuQU1kYnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjYiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMvLS9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMtNy4yOC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02N29YRkFZcjJjRExEVkdMWFRFQUJqZEJKWjZkckVsVVNJN1dLcDcwTnJweUlTc28zcGxHOVNBR0VGNnk3emJoYS93T3pVQnlXV1RKdkVEVk5JVUdjQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IiwKKyAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yOC42IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMvLS9oZWxwZXItcGx1Z2luLXV0aWxzLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzlnelovYno4M0dSeXNJN2dBRDR3UFQvQUkzdUNuWSs5eG4rTXgvS1BzMkp3SEpJejFXOFBaa2cyY3F5dDNSTk9CTThlamNYaFY2eThPZzdseS9EdWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIvLS9oZWxwZXItc3RyaW5nLXBhcnNlci03LjI3LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFNbFN4S2JwUmxBcmlkREV4azkyblNvYnlEZHBQaWpVcTJEVzZvRG5VcWQwaU9HeG1RanlxaE1JaWhJOSt6djRMUHlaZFJqZTJjYXZXUGJDYldtM2VBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIvLS9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXItNy4yOC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xU3M0aWZ3ektKU1YzOXVjTmpzdmM2V1ZIczZiN1MwM3NPaDJPY0hGOVVIZlZQcVdXQUxVc05VVnpoU0JpSXRqUlpvTEh4N25JYXJWanFLVnVzVVoxUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi8tL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uLTcuMjcuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXZqSm93OUZ4YmhGRktEU3VGblZDZTJXeFhrMXpXYzIyZkZlUFZORWFXSkV1OElyWlZsZGE2TjB1SHd6WnJVTTFpbDdOQzlNbHA0TWFKWWJZZDlKU2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI5LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXJzLy0vaGVscGVycy03LjI5LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhvR3VVczRzQ1pOZXpWRUtkVmN3cW1aTjhHb0hpckxVY0xhWVZOQksySjBEYWRHdGRjcWdyM0JDYnZIOCtYVW80TkdqTmwzVk90U2pFS056cWZGZ0t3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yOC42IiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNy4yOS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGFyc2VyLy0vcGFyc2VyLTcuMjkuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEdnUnp5Lytmc0JhNzIvUlpWSm1HS1BtWnU5QnluOG80TW9McG1OZTFtOFpmWW56NWVtSExRejNVNGdMdWQ2WndsMFJaSWNnaUxEN1VxN3lTRnVETEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI5LjAiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInBhcnNlciI6ICJiaW4vYmFiZWwtcGFyc2VyLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogeworICAgICAgInZlcnNpb24iOiAiNy44LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMvLS9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMtNy44LjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXR5Y21aeGtHZlpheGhNUmJYbFBYdVZGcGRXbFhwaXIyVzRBTWhTSmdSS3prL2VEbElYT2hiMkxIV29McERGN1RFSHlsVjV6Tmh5a1g2S0FnSEptVE53PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1iaWdpbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjguMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50Ly0vcGx1Z2luLXN5bnRheC1iaWdpbnQtNy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXduVG5GbEcrWXhRbTN2RHhwR0U1N1BqMHNyUlU0c0hFL21Ea3QxcXYyWUpKU2VVQWVjMm1hNFdMVW5VUGVLanlyZm50VndlL042ZENYcFUrekwzTnBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogeworICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy03LjEyLjEzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUzcmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhUUVpZQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xMi4xMyIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1zdGF0aWMtYmxvY2siOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jay8tL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3RhdGljLWJsb2NrLTcuMTQuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYitZeVBtcjZsZHlObk02c3FZZU1XRStiZ0pjSnBPNnlTNFFEN3lteGdIMzRHQlBORE0vVEhCaDhpdW55dktJWnp0aXdMSDRDSlowUnhUazllbWdwanc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXR0cmlidXRlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjguNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWF0dHJpYnV0ZXMvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1hdHRyaWJ1dGVzLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItamlMQzBtYTlYa1FUM1RLSjl1WXZsYWttNjZQYW15d28rcXdMK29MOEhKT3ZjNlRXZFpYVmZocUpyOENDemJTR1VBYkRPemxHSEpDMVUrdlJmTFFEdnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjguNiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhLTcuMTAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXFmbStYRHgwK1ByaDNWU2VFUUNQVTgxeUMrSldaMnBEUEZTUzRaZHBmWmhwNE1rRk1hREMxVXFzZW92RUt3U1VwbklMNyt2SytDbHA3YmZoMGlEN2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjguMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzLy0vcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MtNy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxZNmtkR3BXSHZqb2Uydms0V3JBYXBFdUJSNjlFTXhabCtSb0dSaHJGR05ZVks4bU9QQVc4VmZiVC9aZ3JGYlhsRE5paWF4UW5BdGdWQ1o2anYzMEVBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWpzeC8tL3BsdWdpbi1zeW50YXgtanN4LTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd2dFbXIwNkc2c0lwcXI4WUR3QTJkU1JURTNiSitWMElmcHpmU1kzTGZnZDdZV09hQWRseWt2SmkxM1pLQnQ4Y1pIZmdIMUlYTitDTDY1NlczdVVhNHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjguNiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogeworICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLTcuMTAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZDh3YVNobHBGRGluUTVNdHZHVTl4REFPektINDcrRkZvbmV5MmJhRklvTXI5NTJoS09McDFIUjdWc3pvWnZPc1YvNCtSUnN6Tlk3RDE3YmEwdGUwaWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjguMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLy0vcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3ItNy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFTZmY0elBJSTF1MlFEN3krRjhvRHN6MTlldzRJR0VKZzlTVlcrYnF3cHd0ZkZsZWlRRE1kekEvUitVbFdEemZuSEZDeHhsZUZUMFBNSXJSMzZYTE5RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IvLS9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yLTcuMTAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOUg2WWRma2NLL3VPblkvSzcvYUEyeHB6YUFna1FuMzd5eldVTVJLN09hUE9xT3BHUzErbjBINWh4VDlBVXc5RXNTalBXOFNWeU1Kd1lSdFdzM1gzdWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjguMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkLy0vcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQtNy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhvcU1pakdaYjl5M3kyWHNrTitQMXdVR2lWd1daNUptb0RSd3g1KzNHbUVwbE55Vk0yczJEZzhJTEZRbThyV000OG9yR3k1WXBJNUJsOFUxeTd5ZGxBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogeworICAgICAgInZlcnNpb24iOiAiNy44LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmcvLS9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmctNy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZWUEQwUGMxbHBUcXcwYUtvZVJUTWlCK2tXaEFvVDI0UEEra3NXU0JyRnRsNVNJUlZwWmx3TjNOTlBRamVoQTJFLzkxRlYzUmpMV29WVGdsV2NTVjNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZy8tL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmctNy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtvSzlFckgxTUJsQ1B4VjBWQU5rWFcyL2R3NHZsYkdEckZnejhibVVzQkdZa0ZSY2JSd01oNmNJSnViZFBya3hSd3VHZHRDazB2L3dQVEtiUWdCamtnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QvLS9wbHVnaW4tc3ludGF4LXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0LTcuMTQuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHdWbnA5ZHhKNzJaVUpEVjI3WmZiU2o2aUhMb3l0WVptaDNyRmN4Tm52c0pGM2t0a3pMRFpQeS9tQTE3SEdzYVFUMy9EUXNXWVgxZjFRR1drQ29WVWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdC8tL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3YWl0LTcuMTQuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHgrK3VwTHY1VTFyZ1lmd2UxeEJRVWhSbVU0MU5FdnBVdnJwOGprclNDZHZHU25NNS9xZFJNdHlsSjZQRzVPRmtCYUhrYlRBS1RuZDMvWXlFU1JIRnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0IjogeworICAgICAgInZlcnNpb24iOiAiNy4yOC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0Ly0vcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0LTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItK25ETm1ReWU3bmxudXVIRGJvUGJHbTAwVnFnM29POG5pUlJMMjcvNExZSFVzSFloMHpKMXhXT3owdVJ3TkZtTTFBdnprOHdaYmM2cmRpWWhvbXp2L0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjguNiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdGVtcGxhdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90ZW1wbGF0ZS8tL3RlbXBsYXRlLTcuMjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWUE2TWEyS3NDZEdiK1dDNlVwQlZGSkdYTDU4TURBNm95T05ianlGLys1c0JneFkvZHdraExvZ2JNVDJHWFh5VTg0L0loUncvMkQxT3MxQi9naXorQlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjguNiIsCisgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjYiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC90cmF2ZXJzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RyYXZlcnNlLy0vdHJhdmVyc2UtNy4yOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00SFBpUXIwWDcrd2FIZnlYUFpwV1BmV0wvSjdkY04xbXg5Z0w2V2RRVk1iUG5GMytaaFNNczh0Q3hON29IZGRKRTlmaE5FNytseGRubHllbUtmSlJ1QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yOS4wIiwKKyAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMjkuMCIsCisgICAgICAgICJAYmFiZWwvaGVscGVyLWdsb2JhbHMiOiAiXjcuMjguMCIsCisgICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI5LjAiLAorICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjI4LjYiLAorICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI5LjAiLAorICAgICAgICAiZGVidWciOiAiXjQuMy4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90eXBlcy8tL3R5cGVzLTcuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTHdkWkhwU2NNNFF6OFh3MmlLU3pTK2NmZ2xaekpHdm9mUUlDeTdXN3Y0Y2FydTRFYUFteVV1TzZCR3JieVEybVlWMTFXMFU4ajVtQmhkMTRkZDNCMEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogIl43LjI3LjEiLAorICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yOC41IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AYmNvZS92OC1jb3ZlcmFnZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmNvZS92OC1jb3ZlcmFnZS8tL3Y4LWNvdmVyYWdlLTAuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0waFlROFNCNERiNXp2WkI0YXhkTUhHd0VhUWprWnpGalFpTjlMVll2SUZCMm5TVUhXOXRZcHhXcmlQcldEQVNJeGlhWGF4ODNSRWNMeHVTZG5HUFp0dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY29sb3JzL2NvbG9ycy8tL2NvbG9ycy0xLjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItb29XQ3JsWlAxMWk4R0ltU2pUSFlITGt2RkRQNDhuUzQrMjA0bkdiMVJpWC9XWFlIbUpBMklJSTkvZTJEV1ZhYkNFU2RXN2hCQUV6SFJxVW45T1VWdlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xLjkwIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY3Nwb3Rjb2RlL3NvdXJjZS1tYXAtc3VwcG9ydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuOC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3Nwb3Rjb2RlL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjguMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSWNoTmY2ZE40dEhvTUZJbi83T0U4TFdaMTlZNnEvNjdCbWY2dm5HUkV2OFJTYkJWYjlMUEp4RWNud3Jjd1g2aXhTdmFpR29vbUFVdnU0WVN4WHJWZ3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICIwLjMuOSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGNzcG90Y29kZS9zb3VyY2UtbWFwLXN1cHBvcnQvbm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZy8tL3RyYWNlLW1hcHBpbmctMC4zLjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNCZWx0NnRkYzhiUGdBdGJjbWR0TkpsaXJWb1RtRWI1ZTJnQzk0UG5rd0VXOWpJNkNBSFVlb0c4NXRqV1A1V3F1cWZhdm9NdE13aUc0UDkyNlpLS3VRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpIjogIl4zLjAuMyIsCisgICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiAiXjEuNC4xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2NpLWVudmlyb25tZW50IjogeworICAgICAgInZlcnNpb24iOiAiMTMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvY2ktZW52aXJvbm1lbnQvLS9jaS1lbnZpcm9ubWVudC0xMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNzKzNOemZOa0diY21IUGRkakV2NFRLRmlCcFpSUTZXSkVFdWZCOW13K0V4UzIyVi80Ui96cERTRUcrZnNKL2lTTkNkNkEyc0FUZFk4UEZPeVkzWW5BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9jdWN1bWJlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEyLjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL2N1Y3VtYmVyLy0vY3VjdW1iZXItMTIuNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03QS85Q0pwSkR4djFTUTdoQVpVMHpQbjJ5Unh4NlhNUitMTzRUOTRFbm0zY1lOV3NFRWorUkdYMzhOTFg0SU5UK0g2dzVyYVgzQ3NiL3FzNHZVQnNPQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAY3VjdW1iZXIvY2ktZW52aXJvbm1lbnQiOiAiMTMuMC4wIiwKKyAgICAgICAgIkBjdWN1bWJlci9jdWN1bWJlci1leHByZXNzaW9ucyI6ICIxOS4wLjAiLAorICAgICAgICAiQGN1Y3VtYmVyL2doZXJraW4iOiAiMzguMC4wIiwKKyAgICAgICAgIkBjdWN1bWJlci9naGVya2luLXN0cmVhbXMiOiAiNi4wLjAiLAorICAgICAgICAiQGN1Y3VtYmVyL2doZXJraW4tdXRpbHMiOiAiMTEuMC4wIiwKKyAgICAgICAgIkBjdWN1bWJlci9odG1sLWZvcm1hdHRlciI6ICIyMy4wLjAiLAorICAgICAgICAiQGN1Y3VtYmVyL2p1bml0LXhtbC1mb3JtYXR0ZXIiOiAiMC45LjAiLAorICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2Utc3RyZWFtcyI6ICI0LjAuMSIsCisgICAgICAgICJAY3VjdW1iZXIvbWVzc2FnZXMiOiAiMzIuMC4xIiwKKyAgICAgICAgIkBjdWN1bWJlci9wcmV0dHktZm9ybWF0dGVyIjogIjEuMC4xIiwKKyAgICAgICAgIkBjdWN1bWJlci90YWctZXhwcmVzc2lvbnMiOiAiOS4xLjAiLAorICAgICAgICAiYXNzZXJ0aW9uLWVycm9yLWZvcm1hdHRlciI6ICJeMy4wLjAiLAorICAgICAgICAiY2FwaXRhbC1jYXNlIjogIl4xLjAuNCIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiY2xpLXRhYmxlMyI6ICIwLjYuNSIsCisgICAgICAgICJjb21tYW5kZXIiOiAiXjE0LjAuMCIsCisgICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiLAorICAgICAgICAiZXJyb3Itc3RhY2stcGFyc2VyIjogIl4yLjEuNCIsCisgICAgICAgICJmaWd1cmVzIjogIl4zLjIuMCIsCisgICAgICAgICJnbG9iIjogIl4xMy4wLjAiLAorICAgICAgICAiaGFzLWFuc2kiOiAiXjQuMC4xIiwKKyAgICAgICAgImluZGVudC1zdHJpbmciOiAiXjQuMC4wIiwKKyAgICAgICAgImlzLWluc3RhbGxlZC1nbG9iYWxseSI6ICJeMC40LjAiLAorICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCisgICAgICAgICJrbnV0aC1zaHVmZmxlLXNlZWRlZCI6ICJeMS4wLjYiLAorICAgICAgICAibG9kYXNoLm1lcmdlIjogIl40LjYuMiIsCisgICAgICAgICJsb2Rhc2gubWVyZ2V3aXRoIjogIl40LjYuMiIsCisgICAgICAgICJsdXhvbiI6ICIzLjcuMiIsCisgICAgICAgICJtaW1lIjogIl4zLjAuMCIsCisgICAgICAgICJta2RpcnAiOiAiXjMuMC4wIiwKKyAgICAgICAgIm16IjogIl4yLjcuMCIsCisgICAgICAgICJwcm9ncmVzcyI6ICJeMi4wLjMiLAorICAgICAgICAicmVhZC1wYWNrYWdlLXVwIjogIl4xMi4wLjAiLAorICAgICAgICAic2VtdmVyIjogIjcuNy40IiwKKyAgICAgICAgInN0cmluZy1hcmd2IjogIjAuMy4xIiwKKyAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl44LjEuMSIsCisgICAgICAgICJ0eXBlLWZlc3QiOiAiXjQuNDEuMCIsCisgICAgICAgICJ1dGlsLWFyaXR5IjogIl4xLjEuMCIsCisgICAgICAgICJ5YW1sIjogIl4yLjIuMiIsCisgICAgICAgICJ5dXAiOiAiMS43LjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImN1Y3VtYmVyLWpzIjogImJpbi9jdWN1bWJlci5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiMjAgfHwgMjIgfHwgPj0yNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9jdWN1bWJlciIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2N1Y3VtYmVyLWV4cHJlc3Npb25zIjogeworICAgICAgInZlcnNpb24iOiAiMTkuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvY3VjdW1iZXItZXhwcmVzc2lvbnMvLS9jdWN1bWJlci1leHByZXNzaW9ucy0xOS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRGS29PUWgyVWY2RjYvTG4rMU94dUs4TGtUZzZQeUFxZWtoZjJJeDh6cVYyTTU0c0grbTdYTkpOTGhPRk9BVy90OW54elJidzJDY3ZYYkNMamN2SFpnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInJlZ2V4cC1tYXRjaC1pbmRpY2VzIjogIjEuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY3VjdW1iZXIvZ2hlcmtpbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjM4LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL2doZXJraW4vLS9naGVya2luLTM4LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZHVFWEsrS0RmUVV6dTN2c1N6WGpreFEydGlyRjVQUnNjMVhydHM2VEhLSEpPNm1qdzRSak04UlYrdmxpdURhc21oaHJtZExjT2NNN2Q5bnVyTlRKS3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIj49MzEuMC4wIDwzMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2doZXJraW4tc3RyZWFtcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvZ2hlcmtpbi1zdHJlYW1zLy0vZ2hlcmtpbi1zdHJlYW1zLTYuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ITFNITW1kREgwdkNyN3ZzVkVVUmNEQTRXd25STGRqa2hxcjZhNEhRM2k0UkZLMXdpREdQakJHVmRHSkx5dVh1UmRKcEpiRmM2UXhIdlQ4cFU0dDZqdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb21tYW5kZXIiOiAiMTQuMC4wIiwKKyAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9ydCI6ICIwLjUuMjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImdoZXJraW4tamF2YXNjcmlwdCI6ICJiaW4vZ2hlcmtpbiIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjdWN1bWJlci9naGVya2luIjogIj49MjIuMC4wIiwKKyAgICAgICAgIkBjdWN1bWJlci9tZXNzYWdlLXN0cmVhbXMiOiAiPj00LjAuMCIsCisgICAgICAgICJAY3VjdW1iZXIvbWVzc2FnZXMiOiAiPj0xNy4xLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9naGVya2luLXN0cmVhbXMvbm9kZV9tb2R1bGVzL2NvbW1hbmRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTE0LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMnVNOXJZalB2eXEzOU53TFJxYWlMdFdIeURDMUZ2cnlKRGEyQVRUVmltczVZQVM0UHVwc0VRc0R2UDE0RnFoRnIwUDQ5Q1lEdWdpNTl4YXhKbFRYUkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL2doZXJraW4tdXRpbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci9naGVya2luLXV0aWxzLy0vZ2hlcmtpbi11dGlscy0xMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxKK3M0K1RlcEhUZ2RLV0RSNHpiUHlUN3JRam1ZSWN1a1R3TmJ3TndncXI2aThHamNtemY2Tm10YllEQTE5bTFaRmc2a1diRnNtSG5qMzdadVgra1pBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjdWN1bWJlci9naGVya2luIjogIl4zOC4wLjAiLAorICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIl4zMi4wLjAiLAorICAgICAgICAiQHRlcHBlaXMvbXVsdGltYXBzIjogIjMuMC4wIiwKKyAgICAgICAgImNvbW1hbmRlciI6ICIxNC4wLjIiLAorICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIl4wLjUuMjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImdoZXJraW4tdXRpbHMiOiAiYmluL2doZXJraW4tdXRpbHMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9naGVya2luLXV0aWxzL25vZGVfbW9kdWxlcy9jb21tYW5kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxNC4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0xNC4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVR5d29XTk5SYmhvRDBCWHMxUDNaRVNjVzhXNWlLcm5iaXRoSWwwWUgrdUNtQmQwUXBQT0E4eWM4MkRTM0JJRTVNYTZGbkJWVXNKN3dWVUR6NGR2T1dRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9odG1sLWZvcm1hdHRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL2h0bWwtZm9ybWF0dGVyLy0vaHRtbC1mb3JtYXR0ZXItMjMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Xd2NSemRNOEl4eTRlNTNqK0ZybTNmS001ck51SXlXVWZ5NEhhakVOK1hrL1ljakE2eVcwQUNHVEZEUmVCKytWRFp6L2lVdHdZZFRsUFJZMzZOYnFKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9qdW5pdC14bWwtZm9ybWF0dGVyIjogeworICAgICAgInZlcnNpb24iOiAiMC45LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci9qdW5pdC14bWwtZm9ybWF0dGVyLy0vanVuaXQteG1sLWZvcm1hdHRlci0wLjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV0YrQTdwQmFYcEtNRDFpN0s1OU5rNTUxOXpqNGV4dHhZNCs0blNndjVYTHNHWEhEZjFnSm5iODRCa0xVemV2TnRwMm8yUXpNRzB2V0x3U204VjVibHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGN1Y3VtYmVyL3F1ZXJ5IjogIl4xNC4wLjEiLAorICAgICAgICAiQHRlcHBlaXMvbXVsdGltYXBzIjogIl4zLjAuMCIsCisgICAgICAgICJsdXhvbiI6ICJeMy41LjAiLAorICAgICAgICAieG1sYnVpbGRlciI6ICJeMTUuMS4xIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGN1Y3VtYmVyL21lc3NhZ2VzIjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9tZXNzYWdlLXN0cmVhbXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGN1Y3VtYmVyL21lc3NhZ2Utc3RyZWFtcy8tL21lc3NhZ2Utc3RyZWFtcy00LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3hhcDl1UDVqRDh0SFVaVmpUV2d6eGVtaS8wdU9zYkdqZDRMQk9TeGNKb09DUmJFU0Z3ZW1VemlsSnV6TlRCOHBjVFFVaDhENW91ZFV5eGZrSk9LbUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjdWN1bWJlci9tZXNzYWdlcyI6ICI+PTE3LjEuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL21lc3NhZ2VzIjogeworICAgICAgInZlcnNpb24iOiAiMzIuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvbWVzc2FnZXMvLS9tZXNzYWdlcy0zMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFPU29XK0dRdkZVTkFsNnRkUDJDVEJleFRYTU5KRjAwOTRnb1ZVY3Z1Z3RRZVh0SjBLOHNDUDB4YnE3R0dvaWV6cy9lSkFBT0QwMyt6QVBUNjRvckhRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNsYXNzLXRyYW5zZm9ybWVyIjogIjAuNS4xIiwKKyAgICAgICAgInJlZmxlY3QtbWV0YWRhdGEiOiAiMC4yLjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BjdWN1bWJlci9wcmV0dHktZm9ybWF0dGVyIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci9wcmV0dHktZm9ybWF0dGVyLy0vcHJldHR5LWZvcm1hdHRlci0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQTFsVTRWVlAwYVVXZE9UbXBkenZYT3lFWXVQdEJESTB4WXdZSm5tb01EcGx6eE1kaGNIazg2bHl5dllEb01vUHp6cTZPa09FM2lzdW9zdlVVNFg3SVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjUuMC4wIiwKKyAgICAgICAgImNsaS10YWJsZTMiOiAiXjAuNi4wIiwKKyAgICAgICAgImZpZ3VyZXMiOiAiXjMuMi4wIiwKKyAgICAgICAgInRzLWRlZGVudCI6ICJeMi4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAY3VjdW1iZXIvY3VjdW1iZXIiOiAiPj03LjAuMCIsCisgICAgICAgICJAY3VjdW1iZXIvbWVzc2FnZXMiOiAiKiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGN1Y3VtYmVyL3F1ZXJ5IjogeworICAgICAgInZlcnNpb24iOiAiMTQuNy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY3VjdW1iZXIvcXVlcnkvLS9xdWVyeS0xNC43LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZpcVo0Z01FZ1lqbWJ1V3Byb0YvWWVDZEQ1eStnRDJCcWdCSUdicGloT3N4NlVsTnN5em9EU2ZPK1RueTBxNjVEeGZLK3BIbzJVa1B5RWw3ZE83d21RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0ZXBwZWlzL211bHRpbWFwcyI6ICIzLjAuMCIsCisgICAgICAgICJsb2Rhc2guc29ydGJ5IjogIl40LjcuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBjdWN1bWJlci9tZXNzYWdlcyI6ICIqIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AY3VjdW1iZXIvdGFnLWV4cHJlc3Npb25zIjogeworICAgICAgInZlcnNpb24iOiAiOS4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BjdWN1bWJlci90YWctZXhwcmVzc2lvbnMvLS90YWctZXhwcmVzc2lvbnMtOS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ2SGpjUkZaK0oxVHFJYTllRk5PMXdHSHF3eDRWOVpLVjNoWWdrdUsvVmFoSHg3M3VpUDRyS1YzSlZydldTTXJ3ckZ2Skc2QzhhRXduQ1dTdmJ5RmRRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BkYWJoL2RpYWdub3N0aWNzIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BkYWJoL2RpYWdub3N0aWNzLy0vZGlhZ25vc3RpY3MtMi4wLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI0TVNYVFZudU16R0Q3YnpIZFcyWmhoZFBDL2lnRUxFTmNxNUlqRXZlckJ2cTVobjFTWENXY3NpNmVTc2RXUDAvVXIrU0l0UlJqQWt0bWRvWC84Ui9RPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc28tcmljL2NvbG9yc3BhY2UiOiAiXjEuMS42IiwKKyAgICAgICAgImVuYWJsZWQiOiAiMi4wLngiLAorICAgICAgICAia3VsZXIiOiAiXjIuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZWZmZWN0L2NsdXN0ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQ4LjE2IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L2NsdXN0ZXIvLS9jbHVzdGVyLTAuNDguMTYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpaa3JTTVZldE92bFJERDhtUENYM0ljVkp0dlVaQnA2KytsVUtOR0lUNkxSSU9iUlA0bFZ3dGVpODVaKzRnNDlXcGVMdkpuU2RIMHpqUHRHaWVGREhRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC4xMCIsCisgICAgICAgICJAZWZmZWN0L3JwYyI6ICJeMC42OS40IiwKKyAgICAgICAgIkBlZmZlY3Qvc3FsIjogIl4wLjQ0LjIiLAorICAgICAgICAiQGVmZmVjdC93b3JrZmxvdyI6ICJeMC45LjYiLAorICAgICAgICAiZWZmZWN0IjogIl4zLjE3LjE0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZWZmZWN0L2V4cGVyaW1lbnRhbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNTQuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVmZmVjdC9leHBlcmltZW50YWwvLS9leHBlcmltZW50YWwtMC41NC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcUhNdkNRbXJaVDZrVVZvVUMwbHF5bm80WWFkK2o5aEJHQ2RValc4NHprTHdBcTA4dFBxeVNpWlVLUndZK0FlNUIyQWI4cklTWUpIN25RdmN0OURNUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAicGVlciI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidXVpZCI6ICJeMTEuMC4zIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC4yIiwKKyAgICAgICAgImVmZmVjdCI6ICJeMy4xNy43IiwKKyAgICAgICAgImlvcmVkaXMiOiAiXjUiLAorICAgICAgICAibG1kYiI6ICJeMyIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJpb3JlZGlzIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImxtZGIiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BlZmZlY3QvcGxhdGZvcm0iOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjkwLjEwIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3BsYXRmb3JtLy0vcGxhdGZvcm0tMC45MC4xMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWhEUGdDYUxmSU1RS09Db0NQUXZSVVMrWTM0aVlKMDdqZFovQ0JBdllGdmcvaVVCZWJzbUZ1SEw2M1JDRC9ZWkg5QnVLL2txcUxZQUEzTTBmbVVFZ2c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZpbmQtbXktd2F5LXRzIjogIl4wLjEuNiIsCisgICAgICAgICJtc2dwYWNrciI6ICJeMS4xMS40IiwKKyAgICAgICAgIm11bHRpcGFzdGEiOiAiXjAuMi43IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZWZmZWN0IjogIl4zLjE3LjEzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZWZmZWN0L3BsYXRmb3JtLW5vZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjk2LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlZmZlY3QvcGxhdGZvcm0tbm9kZS8tL3BsYXRmb3JtLW5vZGUtMC45Ni4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00bmZCL1hSSkoyNDZNQ2RJN2tsVEUvYVZ2QTl0eGZJODNSbnltUzdwTnlvRzRDWFVLRUxpODdKcmtyV0ZUdE9sZXd6dDVVTVdwbXFzRm1tMnFIeHgzQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlLXNoYXJlZCI6ICJeMC40OS4wIiwKKyAgICAgICAgIm1pbWUiOiAiXjMuMC4wIiwKKyAgICAgICAgInVuZGljaSI6ICJeNy4xMC4wIiwKKyAgICAgICAgIndzIjogIl44LjE4LjIiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZWZmZWN0L2NsdXN0ZXIiOiAiXjAuNDguMiIsCisgICAgICAgICJAZWZmZWN0L3BsYXRmb3JtIjogIl4wLjkwLjYiLAorICAgICAgICAiQGVmZmVjdC9ycGMiOiAiXjAuNjkuMSIsCisgICAgICAgICJAZWZmZWN0L3NxbCI6ICJeMC40NC4yIiwKKyAgICAgICAgImVmZmVjdCI6ICJeMy4xNy4xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVmZmVjdC9wbGF0Zm9ybS1ub2RlLXNoYXJlZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNDkuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVmZmVjdC9wbGF0Zm9ybS1ub2RlLXNoYXJlZC8tL3BsYXRmb3JtLW5vZGUtc2hhcmVkLTAuNDkuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdVlsUWkyc3dEVjloZEhhdHIyT25vdjNHK1ZsRUYrMytRbTlkdmRPWmlaTkUxYlZxdnMvenM2TFZUOFlyei8zVnEvNEpQekdjTithY3gwaWlKbzVaVnc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBwYXJjZWwvd2F0Y2hlciI6ICJeMi41LjEiLAorICAgICAgICAibXVsdGlwYXN0YSI6ICJeMC4yLjciLAorICAgICAgICAid3MiOiAiXjguMTguMiIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlZmZlY3QvY2x1c3RlciI6ICJeMC40OC4xMCIsCisgICAgICAgICJAZWZmZWN0L3BsYXRmb3JtIjogIl4wLjkwLjEwIiwKKyAgICAgICAgIkBlZmZlY3QvcnBjIjogIl4wLjY5LjMiLAorICAgICAgICAiQGVmZmVjdC9zcWwiOiAiXjAuNDQuMiIsCisgICAgICAgICJlZmZlY3QiOiAiXjMuMTcuMTMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BlZmZlY3QvcnBjIjogeworICAgICAgInZlcnNpb24iOiAiMC42OS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3JwYy8tL3JwYy0wLjY5LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxMQ1pQL2FpYVc0SGVvSWFvWnVWWnBKYi9QRkN3ZEpQMjFiM3hQNmwrMXlvUlZ3OEhsS1l5Znkvb3V0UkNGK0JUNG5kdFkwL3V0RlNlR1dDMjFRcjd3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC4xMCIsCisgICAgICAgICJlZmZlY3QiOiAiXjMuMTcuMTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BlZmZlY3Qvc3FsIjogeworICAgICAgInZlcnNpb24iOiAiMC40NC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3NxbC8tL3NxbC0wLjQ0LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURFY3ZyaUh2ajg4enU3a2VydUg5TmNIUXphbTd5UXpMTkxKTzZ1Y0RYTUNBd1d6WVpTSk9zbWt4QnpuUkZ2OHlsRnRjY1NjbEtIMmZ1ait3UktQakNRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ1dWlkIjogIl4xMS4wLjMiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZWZmZWN0L2V4cGVyaW1lbnRhbCI6ICJeMC41NC42IiwKKyAgICAgICAgIkBlZmZlY3QvcGxhdGZvcm0iOiAiXjAuOTAuNCIsCisgICAgICAgICJlZmZlY3QiOiAiXjMuMTcuNyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVmZmVjdC93b3JrZmxvdyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuOS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3dvcmtmbG93Ly0vd29ya2Zsb3ctMC45LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVQQnBTSjhOWXdZQTZWTFpvdmZlandOaWsrMmtBYW9EdGxQaStWVGx4Rk1zY1dOWXgreGxHaVJnOENPL29hMnBIQ3drSllqT0kyN1NHT2xVYXdpejF3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC4xMCIsCisgICAgICAgICJAZWZmZWN0L3JwYyI6ICJeMC42OS40IiwKKyAgICAgICAgImVmZmVjdCI6ICJeMy4xNy4xNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVtbmFwaS9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1uYXBpL2NvcmUvLS9jb3JlLTEuMTAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteXE2T2tKNHA4MkNBZlBsMHU5bVFlYlFIS1BKa1k3V3JJdWsyMDVjVFluWWUrazJaOFlCaDExRnJiUkcvSDZpaGlycWNhY09nbDJCSU84b3lNUUxlWHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlbW5hcGkvd2FzaS10aHJlYWRzIjogIjEuMi4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVtbmFwaS9ydW50aW1lIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1uYXBpL3J1bnRpbWUvLS9ydW50aW1lLTEuMTAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZXd2WWxrODZ4VW9HSTB6UVJOcS9tQysxNlIxUWVEbEtReTIxS2kzb1NZWE5nTGI0NUdWMVA2QTBNKy9zNm55Q3VORHFlNVZwYVk4NEJ6WEd3VmJ3RkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVtbmFwaS93YXNpLXRocmVhZHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVtbmFwaS93YXNpLXRocmVhZHMvLS93YXNpLXRocmVhZHMtMS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVUSUk3T1lGKy9NZXMvTXJjSU9ZcDV5T3RTTUxCV1NJb0xQcGNnd2lwb2lLYmxpNmszMjJ0Y29Gc3hvSUl4UERxVzAxU1FHQWdrbzRFelppMkJOdjJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0c2xpYiI6ICJeMi40LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BlcGljLXdlYi9pbnZhcmlhbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVwaWMtd2ViL2ludmFyaWFudC8tL2ludmFyaWFudC0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbHJUUHFndmZGUXRSL2VZL3FrSXpwOThPR2ROSnUwbTVqaTNxL25KSTh2M1NYa1JLRW5XaU94TW1idmNTb0FJenYvY0dpdXZSeTU3azRzdUtRU0Fkd0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvYWl4LXBwYzY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9haXgtcHBjNjQvLS9haXgtcHBjNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FS1gzUXdtaHoxZU1kRUpva2hBTHIwWWlEMGxoUU53RHFrUFl5UGhpU3dLcmg3LzRLUmpRYzA0c1o4ZGIrNURWVm5aMUxtYk5ESTF1QU1QRVVCblFQZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJwcGM2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYWl4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9hbmRyb2lkLWFybSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYW5kcm9pZC1hcm0vLS9hbmRyb2lkLWFybS0wLjI3LjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWpiUFh2QjRZajJ5QlY3SFVmRTJLSGU0R0pYNTFRcGxDTjFwR2JZanZzeUNaYlFtaWVzMjlFb0pia0VjK3ZZdVU1bzQ1QWZRbjM3dlpseVh5NFlKOFJRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvYW5kcm9pZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYW5kcm9pZC1hcm02NC8tL2FuZHJvaWQtYXJtNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02MmRQWkhwSVh6dkNoZnZmTEpvdzNxNWREdGlOTWt3aVJ6UHlsU0NmcmlMdlplcTBhMWJXQ2hyR3gvQmJVYlB3T3JzV0tNbjhpZFNsbGtsekJ5K2RnUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvYW5kcm9pZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQteDY0Ly0vYW5kcm9pZC14NjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14NVZwTU9EbmVWRGI3MFBZVjJWUU9tSVVVaUJ0WTNEM21QQkc4TnhWazVDb2duZVloa1I3TW1NM3lSL3VNZElUTHJDMW1sL05WMXJqNGJNSnV5OU1DZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImFuZHJvaWQiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2Rhcndpbi1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZGFyd2luLWFybTY0Ly0vZGFyd2luLWFybTY0LTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWxja2RxZXVCUGxLVXd2b0NYSWdJMkQ5L0FCbVBxM1JkcDdJZkw3MDM5M1lnYUFTdDd0Ymp1M0FjK2VQVmkzS0RINk4yUnFlUGZIblhrYUR0WTlma3c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImRhcndpbiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvZGFyd2luLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZGFyd2luLXg2NC8tL2Rhcndpbi14NjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yWW5YcktjWHVUN1orV0w1Szk4MGpWRmR2VktoQ0hoVXdpZCtkRFlRcEgrcXUrVGVmY29taU1BSnBJaUMyRU0zUmp0cTBzTzNTdE1WLyszdzNNeXlxUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImRhcndpbiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC1hcm02NC8tL2ZyZWVic2QtYXJtNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CNDhQcWVDc0VnT3R6TUUyR2JOTTJyb1UyOUFNVHVPSU45MWRzTU8zMHQrWWRpczN6LzNOZ29qNWhobnNPU1N3TnpTKzZKcHBxV3N1aFRwNkU4Mmwydz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZnJlZWJzZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvZnJlZWJzZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2ZyZWVic2QteDY0Ly0vZnJlZWJzZC14NjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qT0JESzVYRWpBNG01SUpLM2JwQVFGOS9MZWx1L1o5WmNkaFRSTGY0Y2FqbEIrOFZFaEZGUmpXZ2Z5M00xTzRyTzJHUS9iMmRMd0NVR3BpRi9lQVROUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImZyZWVic2QiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LWFybSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtYXJtLy0vbGludXgtYXJtLTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmtUL1lYWUJUU1VMbzMrYWY4SWIweWtIOHUyTUJoNTdvN3EvREFzM2xUSmx5VlFrZ1F2bHJQVG5qSXp6UlBReWF2eHRQdGZnMEVvcHZEeUl0MGoxckE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybTY0Ly0vbGludXgtYXJtNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SWlBIQm94WHVOblBRTzlydmpoNWpka1JtVml6a3RrVDdUQ0RrRG1RMFcyU3dISW5LQ0FWOTVHUnV2ZFN2QTd3NFZNd2ZDalVpUHdEaTBaTzZOZmU5QT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LWlhMzIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWlhMzIvLS9saW51eC1pYTMyLTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR0E0OGFLTmt5UURiZDNLdGtwbFlXVDEwMkM1c24vRVpUWTRYUk9reE9OZ3J1SFBVNzJsK2dXK0ZmRjh0ZjJjRmplSGFSYldwT1lhL3VSQnovWHExUGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiaWEzMiIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LWxvb25nNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWxvb25nNjQvLS9saW51eC1sb29uZzY0LTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTRQT3J1Tk0yb1dzRDRXS3ZCU0VLR0lpV1FGOGZaT0FzeWNIT3Q2SkJwWitKTjJuMkpIOVdBdjU2U095dTlYNUlxQWpxU0lQVGFKa3FOOEY3WE9RNVE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAibG9vbmc2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LW1pcHM2NGVsIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1taXBzNjRlbC8tL2xpbnV4LW1pcHM2NGVsLTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItS2FiVDVJNlN0aXJHZkl6MEZNZ2wxSStSMUg3M0dwMG9mTDlBM25HM2kvY1lGSnpLSGhvdUJWNVZXSzFDU2dLdlZhRzRxMVJOcENUUjJMdVRWQjNmSXc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAibWlwczY0ZWwiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1wcGM2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtcHBjNjQvLS9saW51eC1wcGM2NC0wLjI3LjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdSc0w0eDZ3c0dIR1JxaHRJK2lmcE4vdnBPRlRRdG5ic3VwVUY1UjVZVEFnK3kvbEtlbFlSMWhYYm5CZHpEakdiTVlqVkpMSlRkMk9GbU1ld0Fnd2xRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgInBwYzY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtcmlzY3Y2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtcmlzY3Y2NC8tL2xpbnV4LXJpc2N2NjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oTDI1TGJ4TzFRT25nR3p1MlU1eGVYdHhYY1crL0d2TU4zZWpBTnFYa3haL29weVNBWk1yYys5TFkvV3lqQWFuNDF1bnJSM1lybXRUc1Vwd1Q2NkluUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJyaXNjdjY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtczM5MHgiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXMzOTB4Ly0vbGludXgtczM5MHgtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yazhnbzhZY3UxS2I0NnZFZWxodTF2cUVQK1VlUlZqMnpZMXBTdVBkZ3ZiZDV5a0F3ODJMcnJvMjh2WFVyUm16RXNVVjBOekNmNTR5QVJJSzhyMGZkdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJzMzkweCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgteDY0Ly0vbGludXgteDY0LTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHp6bm1BRFB0K09tc1l6dzFFRTMzY2NBK0hQZElxaUNScTdjUWVMMUpscTJnYjErT3lXQmtNQ3JZR0JKK3N4Vnp2ZTJaSkVWZWVQYkxNMmlFSVpTeEE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbmV0YnNkLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9uZXRic2QtYXJtNjQvLS9uZXRic2QtYXJtNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iNnBxdHJRZGlnWkJ3WnhBbjFVcGF6RWlzdndhSUR2ZGJNYm1ybHk3Y0RUTUZudy8rM2xWeHhDVEdPcmtQVm5zWUlvc0pKWEFzSUxHOVhjUVMrWXU2dz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibmV0YnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9uZXRic2QteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9uZXRic2QteDY0Ly0vbmV0YnNkLXg2NC0wLjI3LjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9mYXRrTG9qcjZVK1dONUVEWXVvUWh0TSsxeGNvKy82RlN6SkpudVdpVXc1ZVZjaWNieUszZHE1RWVWL1FIVDF1eTZHb0RoR2JGcHByVWlIVVlnZ3J3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibmV0YnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9vcGVuYnNkLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4yNy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9vcGVuYnNkLWFybTY0Ly0vb3BlbmJzZC1hcm02NC0wLjI3LjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFGdW9qTVFUeEF6NzVGbzhpZFZjcW9RV0VISVhGUmJPYzFUclZjRlNnQ1p0UWZTZGMxUlhnQjN0ak9uL2tyUkhFTlVCNGowMGJmR2p5bDJtSnJVMzdBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJvcGVuYnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9vcGVuYnNkLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC14NjQvLS9vcGVuYnNkLXg2NC0wLjI3LjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStBMU5KbWZNOFdORHY1Q0xWUVlKNVBzaHVSbS80Y0k2V01aUmcxYnkxR3dQSVFQQ1RzMUdMRVVId2lpUUdUNXpEZHlMaVJNL2wxRzBQdjU0Z3Z0S0lnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAib3BlbmJzZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL29wZW5oYXJtb255LWFybTY0Ly0vb3Blbmhhcm1vbnktYXJtNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rS3J2WWIvQzh6QTlDVS9nMHNSNncyUkJ3N0lHYzVKMkJQbmMzZFljNVZKeEhDU0YxeU5NeFRWNUxRN0d1S3RlUVhadHNwakZiaXVXNS9kT2o3SDRZdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAib3Blbmhhcm1vbnkiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL3N1bm9zLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvc3Vub3MteDY0Ly0vc3Vub3MteDY0LTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaWtrdEloRkJ6UU50L1FEeU9MNTgwdGk5KzVtTC9ZWmVVUEtVMml2R3RHamRUWW9xejZqT2JqNm5PTWZoQVNwUzRHVTRRL0NsaDFRdHhXQXZjWUthbUE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJzdW5vcyIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvd2luMzItYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWFybTY0Ly0vd2luMzItYXJtNjQtMC4yNy43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03eVJoYkh2UHFTcFJVVjdRMjBWdUR3YmpXNWtJTXdUSHBwdHVVelYrQUE0NmtpUHplNVo3cWd0NkNMQ0szcFdGckhlTmZEZDFWS2d5UDRPK25nMTdDQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL3dpbjMyLWlhMzIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjI3LjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWlhMzIvLS93aW4zMi1pYTMyLTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU213S1hlNlZISXlaWWJCTEpyaE9vQ0pSQi9aMXRja3ptZ1RMZkZZT2ZwTUF4NjNCSkVhTDlFeEk4eDd2MG9BTzNaaDZEL09pMWdWeEVZcjVvVUNGaHc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiaWEzMiIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL3dpbjMyLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMjcuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzIteDY0Ly0vd2luMzIteDY0LTAuMjcuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNTZoaUFKUGh3UTFSNGkrMjFGVkY3VjhrU0Q1elpUZEhjVnVSRk1XMGhuNzUzdlZmUU44eGx4NHVPUFQ0eG9HSDBaL29WQVR1UjgyQWlxU1RESXBhSGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzbGludC1jb21tdW5pdHkvZXNsaW50LXV0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiNC45LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscy8tL2VzbGludC11dGlscy00LjkuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGhyWW1OaVlwcFI3em5GRWRxZ2ZXSFhSNk5Da1pFSzdod1dESFpVaml0LzIvVTByNlh2a0RsMFNZbm9NNTFIcTdGaENHZExEVDZ6eENDT1kxaGV4c1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeMy40LjMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzbGludCI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8ID49OC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscy9ub2RlX21vZHVsZXMvZXNsaW50LXZpc2l0b3Ita2V5cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtdmlzaXRvci1rZXlzLy0vZXNsaW50LXZpc2l0b3Ita2V5cy0zLjQuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd3BjK0xYZWl5aWlzeFBsRWtVelU2c3Z5UzFmcklPM01neGoxZmR5N1BtOFlnemd1YXgyTjNGYS9EL2FnMVdxYk9wcmRJK3VZNndNVWw4L2EyRytpYWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMTIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC1jb21tdW5pdHkvcmVnZXhwcC8tL3JlZ2V4cHAtNC4xMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FcmlTVGx0NU9DOS83U1hrUlNDQWhmU3h4b1NVZ0JtMzNPSCtJa3diZHBnb3FzU3NVZzd5M3VoK0lJQ0kvUWc0QkJXcjNVMmkzOVJwbXljYnhNcTRldz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTIuMC4wIHx8IF4xNC4wLjAgfHwgPj0xNi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvY29uZmlnLWFycmF5IjogeworICAgICAgInZlcnNpb24iOiAiMC4yMy41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2NvbmZpZy1hcnJheS8tL2NvbmZpZy1hcnJheS0wLjIzLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkza0tMdkMxZHZUT1Qrb0dscU5RMVhMcUs2RDFIVTJZWFBjNTJObUFsSlpiTU1XRHpHWVhNaVBSSjhUWUQzOW11RC9PVGpsWm1OSjRpYjdkdlNyTUJBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXNsaW50L29iamVjdC1zY2hlbWEiOiAiXjMuMC41IiwKKyAgICAgICAgImRlYnVnIjogIl40LjMuMSIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiXjEwLjIuNCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgXjIyLjEzLjAgfHwgPj0yNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzbGludC9jb25maWctaGVscGVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2NvbmZpZy1oZWxwZXJzLy0vY29uZmlnLWhlbHBlcnMtMC41LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVJSllLVENFQ2JQL25zS2FhcnVGNkxXOTY3bXRiUWJzdzRKVHRTVmtVUWM5TW5lU2ticmdQSkFiS2w5bldyMFplb3dWOEJmc2FyQm1QcEJ6R2VsQTJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXNsaW50L2NvcmUiOiAiXjEuMi4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L2NvcmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9jb3JlLy0vY29yZS0xLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXdjRTFQK0FaNEM2RFdscGluL09tT0E1NG1tSVovK3hadUppUWQ0U3lCMjlvQUpqTjMwVVc5d2tLTnB0VzJjdHA0Y0VzdmhsTFkvQ3NRMXVvSERsb1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjE1IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L2VzbGludHJjIjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvZXNsaW50cmMvLS9lc2xpbnRyYy0zLjMuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNElsSngwWDBxZnRWc041RSsvdkd1alRSSUZ0d3VMYk5zVlVlN1RPNnpZUERSMU82bkZ3dndoSUtFS1NybDZkWmNobVlCSVRhenhLb1VZT2pkdGpsUmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYWp2IjogIl42LjE0LjAiLAorICAgICAgICAiZGVidWciOiAiXjQuMy4yIiwKKyAgICAgICAgImVzcHJlZSI6ICJeMTAuMC4xIiwKKyAgICAgICAgImdsb2JhbHMiOiAiXjE0LjAuMCIsCisgICAgICAgICJpZ25vcmUiOiAiXjUuMi4wIiwKKyAgICAgICAgImltcG9ydC1mcmVzaCI6ICJeMy4yLjEiLAorICAgICAgICAianMteWFtbCI6ICJeNC4xLjEiLAorICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuNSIsCisgICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIl4zLjEuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4xNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTEuMS4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVdQR2ZEeG55ektVN3JOT1c5U1AvYzUwdmkzeHJtcnVhLys2aGZQYkNTMkFCTldmeDI0dlBpZHp2QzdrcmpVL1JUbzIzNXNWNzc2eW1sc010R0tqOGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIiwKKyAgICAgICAgImNvbmNhdC1tYXAiOiAiMC4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMvbm9kZV9tb2R1bGVzL2VzbGludC12aXNpdG9yLWtleXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXZpc2l0b3Ita2V5cy8tL2VzbGludC12aXNpdG9yLWtleXMtNC4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVoZGs1c2ZxY2VlLzlIL3JDT0ppa1l6NjdvMGEyVHcyaEdSUE9HMlkxUjJkZzdiclJlMXVHMHlhTlFESHUrVE8vdVFQRi81ZUNhcHZZU21IVWp0N0pRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzbGludC9lc2xpbnRyYy9ub2RlX21vZHVsZXMvZXNwcmVlIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtMTAuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qNlBBUTJ1VXI3OVBaaEJqUDVDNWZobDhlMzlGbVJuT2pzRDVsR25XckZVOGkyRzc3NnRCSzcrblA4S3VRVVRUeUFaVXdmUXFYQWdyVkg1TWJIOUNZUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhY29ybiI6ICJeOC4xNS4wIiwKKyAgICAgICAgImFjb3JuLWpzeCI6ICJeNS4zLjIiLAorICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeNC4yLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L2VzbGludHJjL25vZGVfbW9kdWxlcy9nbG9iYWxzIjogeworICAgICAgInZlcnNpb24iOiAiMTQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWxzLy0vZ2xvYmFscy0xNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9haEd2dU1HUWxQdy9pdklZQmpWU3JXQWZXTEJla3U1dHBQRTJmT1BMaStXSGZmSVdidWgydENqaHlRaFRCUE1mNUU5akRFSDRGT21UWWdZd2JLd3RRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzbGludC9lc2xpbnRyYy9ub2RlX21vZHVsZXMvbWluaW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0zLjEuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmdqV1Vzbm5UNm4rTlVrNmVacTc3emVGZHBXMkxXRHpQNnpGR3JDYkhYaVlOdWw1RHpxazJISFE1dUZIMkROVzVYYnA4K2pWemFlTnQ5NHNzRUVsNHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl4xLjEuNyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiKiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGVzbGludC9qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjkuMzkuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9qcy8tL2pzLTkuMzkuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbkU3REVJY2h2dGlGVHdCdzRMZmJ1NTlQRytrQ29maGpzS2FDV3p4VHB0NGxmUmpSTXFHNnVNQnpLWHVFY3lYaE9Ib1VwOXJpQW03L2FXWUdoWFo5Y3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2VzbGludC5vcmcvZG9uYXRlIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L29iamVjdC1zY2hlbWEiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9vYmplY3Qtc2NoZW1hLy0vb2JqZWN0LXNjaGVtYS0zLjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnFUYVVFZ3h6bStZRFNkRWxhZDZQaVJvWDR0OFZHRGpDdHQwNXpuNG5VODEwVUl4L3VORVY3L2xaSjZLd0ZUaEtaT3pPeHpYeTQ4ZGErTm83SFphTXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8IF4yMi4xMy4wIHx8ID49MjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvcGx1Z2luLWtpdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L3BsdWdpbi1raXQvLS9wbHVnaW4ta2l0LTAuNy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yWkFQM2FWZ0I5ZHM5S09lVVNMK3paMjFoUG1vOGRoNmZuSUZ3UlFqNUVBWmw5Z3pSN3d4WWJZWFl5c0FNOENUcUdtVUd5cDJTNGtVZFYxN01uR3VXUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVzbGludC9jb3JlIjogIl4xLjIuMSIsCisgICAgICAgICJsZXZuIjogIl4wLjQuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgXjIyLjEzLjAgfHwgPj0yNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGdlcnJpdDAvbWluaS1zaGlraSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGdlcnJpdDAvbWluaS1zaGlraS8tL21pbmktc2hpa2ktMy4yMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iRU1PUmxHMGNxZGpWeUNFdVUwY0RRYk9SV1gra1lDZW8wa1YxbGJ4RjVidDRyN1NJRDJsOWJxc3hKRU0wem5kYXhwT1VUN3JpQ3lJVkV1cXEvWW54Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc2hpa2lqcy9lbmdpbmUtb25pZ3VydW1hIjogIl4zLjIzLjAiLAorICAgICAgICAiQHNoaWtpanMvbGFuZ3MiOiAiXjMuMjMuMCIsCisgICAgICAgICJAc2hpa2lqcy90aGVtZXMiOiAiXjMuMjMuMCIsCisgICAgICAgICJAc2hpa2lqcy90eXBlcyI6ICJeMy4yMy4wIiwKKyAgICAgICAgIkBzaGlraWpzL3ZzY29kZS10ZXh0bWF0ZSI6ICJeMTAuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AaG9uby9ub2RlLXNlcnZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTkuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bob25vL25vZGUtc2VydmVyLy0vbm9kZS1zZXJ2ZXItMS4xOS4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3d0dmd0WHhuV3N1Y1h2YlFYa1JncWtzaUgyUWVkMzdIOXhIWm9jRTVzQTNOOE84TzgvOEZBM3VjbFFYeFhWemM5WEJadUVPTUs3K3IwMkZtU3BIdHc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMTQuMSIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImhvbm8iOiAiXjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BodW1hbmZzL2NvcmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjE5LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbmZzL2NvcmUvLS9jb3JlLTAuMTkuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWhYTm0rQ0ZNV2NiQ2hYeXdGd2ttaHFqczNQUkNtY1NhL2hmQmdMSWI3b1E1SE5iMXdTMGljV3NHdFNBVU5nZWZIZUkrZUJyQThJMWZ4bWJIc0dkdkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBodW1hbmZzL3R5cGVzIjogIl4wLjE1LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMTguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGh1bWFuZnMvbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTYuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFuZnMvbm9kZS8tL25vZGUtMC4xNi44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nRTFlUU5aM1IrK2tUekZVcGRHbHBteThrRFpEL01MeUhxRHdxamtWUUkwSk1kSTFENTFzeTFIOTU4UE5YWWtNMnJBYWM3ZTUvQ25JS1pySHRQaDNCUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGh1bWFuZnMvY29yZSI6ICJeMC4xOS4yIiwKKyAgICAgICAgIkBodW1hbmZzL3R5cGVzIjogIl4wLjE1LjAiLAorICAgICAgICAiQGh1bWFud2hvY29kZXMvcmV0cnkiOiAiXjAuNC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjE4LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BodW1hbmZzL3R5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiMC4xNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaHVtYW5mcy90eXBlcy8tL3R5cGVzLTAuMTUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWloxdzBhb1Frd3VVdUM3WWYrN3NkZWFOZnFRaWlMY1NSYmZJMDhvQXhxTHRwWFFyOUFJVlg3QXk3SExEdWlMWUFhRlB1OG9CWU5xL1FJaTlVUkhKM1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMTguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlci8tL21vZHVsZS1pbXBvcnRlci0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnh2ZVY0Vjh2NVliNG5jRlRUM3JQU2daQk9wQ2tqZksweTRvVlZWSndJdURWQlJNRFhyUHlYUkw5ODhpNWFwOW05Ym55RUVqV2ZtNVdrQm10ZmZMZkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMjIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL256YWthcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGh1bWFud2hvY29kZXMvcmV0cnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFud2hvY29kZXMvcmV0cnkvLS9yZXRyeS0wLjQuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYlYwVGdvOUs0aGZQQ2VrK2FNQW44MVJwcEZLdjJ5U0RRZU1vU1p1dlRBU3l3TlRuVkpDQXJDWkUyRldxcHZJYXRLdTdWTVJMV2xSMUVhenZWaER5aFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL256YWthcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGlzYWFjcy9jbGl1aSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXNhYWNzL2NsaXVpLy0vY2xpdWktOC4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU84amNqYWJYYWxlT0c5RFEwK0FSWFdaQlRmblA0V05BcXp1aUpLN2xsNDRBbXhHS3YvSjJNNFRQanhqWTN6bkJDZnZCWEZ6dWNtMXR3ZHlGeWJGcUVBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNS4xLjIiLAorICAgICAgICAic3RyaW5nLXdpZHRoLWNqcyI6ICJucG06c3RyaW5nLXdpZHRoQF40LjIuMCIsCisgICAgICAgICJzdHJpcC1hbnNpIjogIl43LjAuMSIsCisgICAgICAgICJzdHJpcC1hbnNpLWNqcyI6ICJucG06c3RyaXAtYW5zaUBeNi4wLjEiLAorICAgICAgICAid3JhcC1hbnNpIjogIl44LjEuMCIsCisgICAgICAgICJ3cmFwLWFuc2ktY2pzIjogIm5wbTp3cmFwLWFuc2lAXjcuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AaXNhYWNzL2NsaXVpL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTYuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00RGo2TTI4SkIrb0FIOGtGa1RMVW8rYTJqd09Ga3VxYjN5dWNVMENBTmNSUlVieFMwY1AwblpZQ0dqY2MzQk5Yd1JJc1VWbURHZ3phd21lN3p2Skh2Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bpc2FhY3MvY2xpdWkvbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4IjogeworICAgICAgInZlcnNpb24iOiAiOS4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vtb2ppLXJlZ2V4Ly0vZW1vamktcmVnZXgtOS4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwxOERhSnNYU1VrMis0MnB2OG1MczVqSlQyaHFGa0ZFNGoyMXdPbWdiVXFzWjJoTDcyTnNVVTc4NWc5UlhnbzNzMFpOZ1ZsNDJUaUhwM1p0T3YvVnlnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bpc2FhY3MvY2xpdWkvbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctd2lkdGgvLS9zdHJpbmctd2lkdGgtNS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhuTE9DUjN2amNZOGJlb05MdGNqWjUvbnhuMmFmbU1FNmxockRyZWJva3FNYXArWGJlVzhuOVRYcFBET3FkR0s1cWNJM29UMEdLVFc2d0M3RU1pVnFBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVhc3Rhc2lhbndpZHRoIjogIl4wLjIuMCIsCisgICAgICAgICJlbW9qaS1yZWdleCI6ICJeOS4yLjIiLAorICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGlzYWFjcy9jbGl1aS9ub2RlX21vZHVsZXMvd3JhcC1hbnNpIjogeworICAgICAgInZlcnNpb24iOiAiOC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS04LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2k3UVdJNnpVTXE1NmJFU0Z2YWd0bXpNZEdPdG94ZlIrU2V6MTFNb2JmYzd0bStWa1Vja2s5YlcyVWVmZlRHVlViT2tzeG1TdzBBQTJnczhnNzFOQ1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjYuMS4wIiwKKyAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNS4wLjEiLAorICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvLS9sb2FkLW55Yy1jb25maWctMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZqZUhTbEl6cHYvTnlEM04wWXVIZlhPUERJaXhjQTFxMlpWOTh3c01xY1lsUG12Mm4zWWIybFlQOVhNRWxuYUZWWGc1QTdZTFRlTHU2Vjg0dVFEam1RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNhbWVsY2FzZSI6ICJeNS4zLjEiLAorICAgICAgICAiZmluZC11cCI6ICJeNC4xLjAiLAorICAgICAgICAiZ2V0LXBhY2thZ2UtdHlwZSI6ICJeMC4xLjAiLAorICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKKyAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9hcmdwYXJzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJncGFyc2UvLS9hcmdwYXJzZS0xLjAuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW81Um95NnRORzRTTC9GT2tDQU42UnpqaWFrWlMyNVJMWUZyY010dEpxYmRkOEJXcm5BK2ZHejU3aU41UGIwNnB2Qkd2bDVnUTBCNDhkSmxzbFh2b1RnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNwcmludGYtanMiOiAifjEuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvbm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBwT3dBZFEvWWxYUTJ2ajhhM2g4SWlwRHVZUmkzd2NlVlFRR1lXeE5JTmNjcTQwQW53N0Jsc0VYQ01idDFadCtPTEE2RnE5c3VJcElXRDBPc25JU2x3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxvY2F0ZS1wYXRoIjogIl41LjAuMCIsCisgICAgICAgICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9qcy15YW1sIjogeworICAgICAgInZlcnNpb24iOiAiMy4xNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC0zLjE0LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBNU21rcXhyMTA2WGExNTZjMk0yNjVaK0ZUclBsK294ZC9yZ09ReTJ0aWpRZUs1VHhRNDNwc08xWkN3aFZPU2RubitSemt6bFJ6L2VZNEJnSkJZVnBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFyZ3BhcnNlIjogIl4xLjAuNyIsCisgICAgICAgICJlc3ByaW1hIjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAianMteWFtbCI6ICJiaW4vanMteWFtbC5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLWxvY2F0ZSI6ICJeNC4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9wLWxpbWl0IjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTIuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vLzg4bUZXU0p4OGx4Q3p3ZEFBQlRKTDJNeVdCMTIrZUlZN01ETDJTcUxtQWtlS1U5cXhSdld1U3lUam0zRlVtcEJFTXVGZmNrQUlxRWFWR1VEeGI2dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLXRyeSI6ICJeMi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvbm9kZV9tb2R1bGVzL3AtbG9jYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI3OVpaLzB3QXhLR3Uzb1lNbHo4ankva2Joc05yUzdTS1o3UHhFSEJnSjUrRjJtdEZXMmZLMmNPdEJoMWNIWWtRc2J6RlY3SStFb1JLZTZZdDBvSzdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInAtbGltaXQiOiAiXjIuMi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZy9ub2RlX21vZHVsZXMvcmVzb2x2ZS1mcm9tIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtZnJvbS8tL3Jlc29sdmUtZnJvbS01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVlnOUtQMjRkRDVxa2E5SjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlEbmpCNXdha3NpQzQ5cnZNQjBQclVKUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZWnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9zY2hlbWEiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGlzdGFuYnVsanMvc2NoZW1hLy0vc2NoZW1hLTAuMS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rU2c2R0NSL3d5MW9TbVFERnE0TFFEQWhtM0VUS25vcnhOK3k1bmJMVUxPUjNQMGMxNGYyV3VyemozL3hxUFh0YXNMRmZIZDVpUkZRN0FKdDRLSDJjdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvbnNvbGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvbnNvbGUvLS9jb25zb2xlLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUEF3Q3ZGSjQ2OTZYUDJxWmorTEFuMUJXalphSjZSakc2YzcvbGtNYVVKbmt5TVMzNHVjdUlzZnFZdmZza1ZOdlVJMjdSL3U0UDFITVlGbmxWWEcvV3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMy4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb3JlLy0vY29yZS0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVU1bVZQc0J4TFNPNnhZYmYrdGdreW1MeCtpQWh2Wlg0My94STErZWoyWk9QblBka2RPMUN6RG1GS2gybVpCbjJzNFhaaXhzekhlUW56cDFnbS9ESXh3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3BhdHRlcm4iOiAiMzAuMC4xIiwKKyAgICAgICAgIkBqZXN0L3JlcG9ydGVycyI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMy4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl40LjMuMiIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiY2ktaW5mbyI6ICJeNC4yLjAiLAorICAgICAgICAiZXhpdC14IjogIl4wLjIuMiIsCisgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKKyAgICAgICAgImplc3QtY2hhbmdlZC1maWxlcyI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1jb25maWciOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCisgICAgICAgICJqZXN0LXJlc29sdmUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtcnVubmVyIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3Qtc25hcHNob3QiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC13YXRjaGVyIjogIjMwLjMuMCIsCisgICAgICAgICJwcmV0dHktZm9ybWF0IjogIjMwLjMuMCIsCisgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2RpZmYtc2VxdWVuY2VzIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9kaWZmLXNlcXVlbmNlcy8tL2RpZmYtc2VxdWVuY2VzLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0c1MU1WbkxxMWVjVlVhUTNmcjZZdXVBT2l0SEsxUzRXVUpIbnNQRkUvcXVRcjMzQURVeDFGZnJUQ3BNQ1J4dnkwWXI5QlRoS3BEalNsY1RpOTF0TUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9lbnZpcm9ubWVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNsTFNGNEJlNzM1eVFYeWgyK21jdEJPek5EeDVzNXVMdjg4L2o4UW4xd0g2NzlQRGN3eTY3K1lkQURuOE5KbkdqemxYdE42MmFzR0gvVDR2V09rZmF3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJqZXN0LW1vY2siOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2V4cGVjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZXhwZWN0Ly0vZXhwZWN0LTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzZObGg0eEp4azJELzlVUkNuM3dGaTk4ZDJoYjE5dVdFMWlkTHNUdDJ5d2h2ZE9sZGJ3M1M1NzBoQmduMjVQNElDVVovY0JqeWJyQmV4MmcxN0lEYmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXhwZWN0IjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXNuYXBzaG90IjogIjMwLjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9leHBlY3QtdXRpbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2V4cGVjdC11dGlscy8tL2V4cGVjdC11dGlscy0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWowK1c1aVFROGhCaDd0SFprVFF2M3EyRmgvTTdKZTcyY0lzWXFDNE9ha3RndE83djFTbzlVVGpwNnVQQkhJYUI2YmVvRi9SUnNDZ01KS3Z0aTB3QURBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L2dldC10eXBlIjogIjMwLjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9mYWtlLXRpbWVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdVUURzOFNPUDlVUlN0WDFEemhENDI1Q3FiTi9IeFVZQ1R3VnJUOHNUVkJmTXZGcVl0L3M2MUVLNVQwNXFuSHUwcG82Uml0WEl2UDlvdFp4WUR6VEdRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6ICJeMTUuMC4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtbW9jayI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC11dGlsIjogIjMwLjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9nZXQtdHlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2V0LXR5cGUvLS9nZXQtdHlwZS0zMC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVNYlpFMmhVbngxV1YwcG1VUlpZOVhvWFBrVVlqcGM1NW1iMENyaHRkV0x0ek1RUEZ2dS9yWmtUTFpGVHNkYVZRYStUcjRlV0F0ZXFjVXpvYXdxL3VBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvZ2xvYmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2xvYmFscy8tL2dsb2JhbHMtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rb3dMQ0JCZGZwZ0wzSFUrQkQ1ZXRyMVN2YlhwU2l0SkswaXMxa2lZakp4QUFKZ2dZTVJRejVoU2RkNXBxMXNTZ2dmeFBidzJsZDcxcHQ0eDV3d1ZpQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvZXhwZWN0IjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1tb2NrIjogIjMwLjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9wYXR0ZXJuIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9wYXR0ZXJuLy0vcGF0dGVybi0zMC4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdXcDdOZlFXMjdMYUJRejNUSVRTOEw3WkNRMFRMdnRtSS8vNE93bFFSeDRybld4Y1BOSVlqeFpwRGNONCtVbEd4Z20zalM1UVB6OElQVENrYjU5d1pBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3JlcG9ydGVycy8tL3JlcG9ydGVycy0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWEwOXo4OVMrUGtRbkwwNTViVmo4K3BlMkNhZWQyUEJPYWN6SGNYQ3lrVzVuZ3hYOUVXeC8xdUF3bmN4Yy9IaVUwb1pxZndzZU1qeWh4Z1JqUzQ5cVB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiY29lL3Y4LWNvdmVyYWdlIjogIl4wLjIuMyIsCisgICAgICAgICJAamVzdC9jb25zb2xlIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI1IiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4yIiwKKyAgICAgICAgImV4aXQteCI6ICJeMC4yLjIiLAorICAgICAgICAiZ2xvYiI6ICJeMTAuNS4wIiwKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAorICAgICAgICAiaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4zLjAuMCIsCisgICAgICAgICJpc3RhbmJ1bC1saWItaW5zdHJ1bWVudCI6ICJeNi4wLjAiLAorICAgICAgICAiaXN0YW5idWwtbGliLXJlcG9ydCI6ICJeMy4wLjAiLAorICAgICAgICAiaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzIjogIl41LjAuMCIsCisgICAgICAgICJpc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjEuMyIsCisgICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC11dGlsIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXdvcmtlciI6ICIzMC4zLjAiLAorICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKKyAgICAgICAgInN0cmluZy1sZW5ndGgiOiAiXjQuMC4yIiwKKyAgICAgICAgInY4LXRvLWlzdGFuYnVsIjogIl45LjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAibm9kZS1ub3RpZmllciI6ICJeOC4wLjEgfHwgXjkuMC4wIHx8IF4xMC4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAibm9kZS1ub3RpZmllciI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWxhbmNlZC1tYXRjaC8tL2JhbGFuY2VkLW1hdGNoLTEuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zb1NlVU8wVE1WNjdoTjFBbWJYc0s0eWFxVTd0amlIbGJ4UkRaT3BIMEtXOStDZVg0YlJBYVgwQW54dDB0eDJNcnBScFd3UWFQd0lsSVNFSmhZVTVQdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMvbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVROMWtDWkFnZGd3ZUpoV1dwZ0tZclFhTU5IY0RVTEhrV3dRSXNwZHRqVjRZNWF1clJkWnBqQXFuNnlYM0ZQcVRBOW5nSENjNGhKeE1BTWdHZnZlODV3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy9nbG9iIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi0xMC41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURmWE44RGZoSjdOSDNPZTdjRm11M05DdTF3S2JrUmVKOFRvcnpTQUZiU0tybE5hUVNLZkl6cVlxVlk4emxiczJOTEJiV3BSaVU1MkdYMlBiYUJWTmtnPT0iLAorICAgICAgImRlcHJlY2F0ZWQiOiAiT2xkIHZlcnNpb25zIG9mIGdsb2IgYXJlIG5vdCBzdXBwb3J0ZWQsIGFuZCBjb250YWluIHdpZGVseSBwdWJsaWNpemVkIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFBsZWFzZSB1cGRhdGUuIFN1cHBvcnQgZm9yIG9sZCB2ZXJzaW9ucyBtYXkgYmUgcHVyY2hhc2VkIChhdCBleG9yYml0YW50IHJhdGVzKSBieSBjb250YWN0aW5nIGlAaXpzLm1lIiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmb3JlZ3JvdW5kLWNoaWxkIjogIl4zLjEuMCIsCisgICAgICAgICJqYWNrc3BlYWsiOiAiXjMuMS4yIiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICJeOS4wLjQiLAorICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4yIiwKKyAgICAgICAgInBhY2thZ2UtanNvbi1mcm9tLWRpc3QiOiAiXjEuMC4wIiwKKyAgICAgICAgInBhdGgtc2N1cnJ5IjogIl4xLjExLjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImdsb2IiOiAiZGlzdC9lc20vYmluLm1qcyIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMvbm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjQuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTEwLjQuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSk5BelpjWHJDdDQyVkdMdVl6MHpmQXpEZkF2SldXNkFmWWxEQlF5RFY1RENsSTJtNXNBbUsrT0lPN3M1OVhmc1JzV0hwMDJqQUpyUmFkUFJHVHQ2U1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjAuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTkuMC45LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQndCTjlBTDRkcW1FVGxwUzJ6YXN4K3ZUZVdjbFd6a2JsZlprN0tUQTVqM2plT09Oei90UkNuWm9tVXl2Tmc4M3dMNVp2OVNzNkhNSlhBZ0w4UjJZZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjIuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTciCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvcmVwb3J0ZXJzL25vZGVfbW9kdWxlcy9wYXRoLXNjdXJyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1zY3VycnkvLS9wYXRoLXNjdXJyeS0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhhNE53MTdGUzlBcFFGSjl1bUxpSlM0b3JHam03Wnp3VXJ3YW1jR1F1SFN6RHl0aDlib0tEYXljWWREY1pEdXFZQVRYdzRIRlhnYXFXVGN0Vy92MUhBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJscnUtY2FjaGUiOiAiXjEwLjIuMCIsCisgICAgICAgICJtaW5pcGFzcyI6ICJeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNiB8fCAxNCA+PTE0LjE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3NjaGVtYXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NjaGVtYXMvLS9zY2hlbWFzLTMwLjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRG1kWWd0ZXpNa2gzY3BVOC8xdXlYYWt2M3RKUmNtY1h4Qk9jTzB0YmFvelB3cG1oNFlNc25XclFtOVptWk1mYTVvY2J4emJGazZPNGJEUEVjL2lBbkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNpbmNsYWlyL3R5cGVib3giOiAiXjAuMzQuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC9zbmFwc2hvdC11dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3Qvc25hcHNob3QtdXRpbHMvLS9zbmFwc2hvdC11dGlscy0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9SYlJOOXNmNVBQODJ2M0ZYTlN3bU8xT1REUjJ2elIyWVRhUitFM1ZrU0JaOHphZFFFNklxWWRZRWVGSDFOSWtlQjJISUdkRjAyZGFwYjZLME1qMDVnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3NvdXJjZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTMwLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUlSV01VVVIzc2RiUDM2b3lOeWhiVGhMSHlKMmVFRENsUENpSFZicllBZTVnM0NIUkFySVZwQnc3Y2RTQjVmcitvZlNmSWIyVG5zdzhpRUhMMFBZUWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI1IiwKKyAgICAgICAgImNhbGxzaXRlcyI6ICJeMy4xLjAiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXJlc3VsdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1yZXN1bHQvLS90ZXN0LXJlc3VsdC0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWUvNTJuSkd1RDc0QUtUU2UwUDR5NXdGUmxhWFAwcW1yUzE3cnFPTUhlU3dtMjc4VnlOeVhFM2dGTy80RFRHRjl3KzY1cmEzbG8zVktqMExCcnptZ2RRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuNiIsCisgICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXNlcXVlbmNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1zZXF1ZW5jZXIvLS90ZXN0LXNlcXVlbmNlci0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRnYld5OWI4UURsUWVSWmN2N0xORisvakZpaVlIVEtobzF4aXJhdVo3a1Z3WTdhdmpGRjZ1VFQwUnFsZ3VkQjVPdUlQYWdGZFZ0ZkZNb3NqVmJrMWVBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjMuMCIsCisgICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKKyAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIjMwLjMuMCIsCisgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvdHJhbnNmb3JtIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UTEtZMzNmU0xWZC9sS0IyWUkxcEg2OWlqeVVibE8vQlF2Q2o1NjZZdm53dXpvVE5yNjQ4aUUwajIydlJ2Vk5rMkhzUHdCeVB4QVRnM01sZVMzZ2Y1QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4yNy40IiwKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjUiLAorICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl43LjAuMSIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCisgICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC43IiwKKyAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCisgICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeNS4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KSG04N2s3YkEzM2hwQm5ndFU4aDZVQnViL2ZxcUE5dVhmdysyMWo1SG1rN29vUEhsYm9STnhIcTBKY010QytuOFZKR1AxbWNmbkQzTWsrWEtlMW9Tdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9wYXR0ZXJuIjogIjMwLjAuMSIsCisgICAgICAgICJAamVzdC9zY2hlbWFzIjogIjMwLjAuNSIsCisgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuNiIsCisgICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjQiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuMzMiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMC4zLjEzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy8tL2dlbi1tYXBwaW5nLTAuMy4xMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmtrdC83bmlKNk1nRVB4RjBiWWRRNmV0WmFBK2ZRdkRjTEtja2h5MXlJUU96YW9LakJCalNqNjMvYUxWallFM3FoUnQ1ZHZNK3VVeWZDZzZVS0NCYkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjIjogIl4xLjUuMCIsCisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3JlbWFwcGluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9yZW1hcHBpbmcvLS9yZW1hcHBpbmctMi4zLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxJOXUvK2xhWUc0RHMxVERLU0pXMllQcklsY1ZZT3dpMmZVQzZ4QjQzbHVlQ2pneFY0bGZmT0NaQ3RZRmlINlROT1grdFFLWHg5N1Q0SUtIYmh5SEVRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuNSIsCisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpLy0vcmVzb2x2ZS11cmktMy4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJSSVNnQ0lqUDIwL3RiV1NQV01FaTU0UVZQUlpFeGt1RDlsSkwrVUl4VUt0d1ZKQTh3VzFUcmIxak1zMVJGWG8xQ0JUTlovNWhwQzlRdm1LV2RvcEt3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMvLS9zb3VyY2VtYXAtY29kZWMtMS41LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNZUTkzMTBncnF4dWVXYmwrV3VJVUlhaVVhRGNqN1dPcTVmVmhFbGpOVmdSZk9VaFk5ZnkyelR2Zm9xV3NuZWJoOFNsNzBWU2NGYklDdkpuTEtCME9nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMzEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvLS90cmFjZS1tYXBwaW5nLTAuMy4zMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItenpOUitTZFFTREp6Yzhqb2FlUDhRUW9DUXI4TnVZeDJkSUl5dGwxUWVCRVpISjl1VzZoZWJzcllnYno4aEp3VVFhbzNUV0NNdG1mVjhOdTF0d09MQXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvcmVzb2x2ZS11cmkiOiAiXjMuMS4wIiwKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICJeMS40LjE0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Aa25pZ2h0ZWQvZHVlbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Aa25pZ2h0ZWQvZHVlbC8tL2R1ZWwtNC4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZuTVdUMkpacVNmM1hmMWo5YmxaZGJ0ZUpPeG1lK0ZFSkY3ZEgvY1c4Z1pMVURmQnJzYzBaRjZWWmZiNVJoazRFYnVhVVA4N3FjaG5NamZHaHVpSWVRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogIl4wLjMuMTMiLAorICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjMxIiwKKyAgICAgICAgIkBrbmlnaHRlZC9tb2R1bGUiOiAiXjEuNS4yIiwKKyAgICAgICAgImZpbmQtdXAiOiAiXjguMC4wIiwKKyAgICAgICAgImdldC10c2NvbmZpZyI6ICJeNC4xMy4wIiwKKyAgICAgICAgIm1hZ2ljLXN0cmluZyI6ICJeMC4zMC4yMSIsCisgICAgICAgICJyZWFkLXBhY2thZ2UtdXAiOiAiXjEyLjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiZHVlbCI6ICJkaXN0L2VzbS9kdWVsLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIyLjIxLjEgPDIzIHx8ID49MjQgPDI1IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTUuNS4wIDw2IiwKKyAgICAgICAgInR5cGVzY3JpcHQtbmV4dCI6ICJucG06dHlwZXNjcmlwdEBuZXh0IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgInR5cGVzY3JpcHQtbmV4dCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGtuaWdodGVkL2R1ZWwvbm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtOC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpHRzhwdkRpMkMrSnhpZFlkSXdRRHlTL0NnY3JJZGgxOGN2Z3hjQmdlM3dTSFJRT3Jvb01EM0dsRkJjbU1KQU45TTQyU0FaakRwNXp2MWRnbEpqd3d3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxvY2F0ZS1wYXRoIjogIl44LjAuMCIsCisgICAgICAgICJ1bmljb3JuLW1hZ2ljIjogIl4wLjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Aa25pZ2h0ZWQvZHVlbC9ub2RlX21vZHVsZXMvbG9jYXRlLXBhdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC04LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFQ5ZXdXQUM0M3RpQVY3eERBUGZsTWtHMHFPUG4yUWpIcWxnWDhGT3FtV2EvcnhueVlEdWxGOVQwRjd0UnkxdStUVlRtSy9NLy82VklPeWUrMnpEWGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicC1sb2NhdGUiOiAiXjYuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BrbmlnaHRlZC9kdWVsL25vZGVfbW9kdWxlcy9wLWxpbWl0IjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01YjBSNHR4cHpqUFdWdy9jWFhVUmVzb0Q0aGI2VS94OUJIMDhMN253K0dOMXNlekR6UGR4ZVJ2cGM5YzQzM2ZaaEJhbi93dXNqYkNzcXdxbTRFSUJJUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ5b2N0by1xdWV1ZSI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMi4yMC4wIHx8IF4xNC4xMy4xIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BrbmlnaHRlZC9kdWVsL25vZGVfbW9kdWxlcy9wLWxvY2F0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxvY2F0ZS8tL3AtbG9jYXRlLTYuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13UHJxNjZMbGhsNy80QUdDNkkrY3F4VDA3TGhYdldMMDhMTlh6MWZFTk93MEFwNHNSWlovZ1pwVFRKNWpwdXJ6enpmUzJXL0dlOUJZM0xnTGpDU2hjdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLWxpbWl0IjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjEyLjIwLjAgfHwgXjE0LjEzLjEgfHwgPj0xNi4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGtuaWdodGVkL2R1ZWwvbm9kZV9tb2R1bGVzL3VuaWNvcm4tbWFnaWMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pY29ybi1tYWdpYy8tL3VuaWNvcm4tbWFnaWMtMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStRQkJYQkN2aWZjNTZmc2J1eFpRNlNpYzN3cXFjM1dXYXF4czU4Z3ZKcmNPdU44M0hHVEN3ejNvUzVwaHpVOUx0aFJORTlWckpDRkNMVWdIZWVGbmZBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGtuaWdodGVkL2R1ZWwvbm9kZV9tb2R1bGVzL3lvY3RvLXF1ZXVlIjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lvY3RvLXF1ZXVlLy0veW9jdG8tcXVldWUtMS4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRMQ2NzZS9VMk1IWjYzSEFKVkUrdjcxbzd5T2RJZTRjWjcwV3BmOEQvSXlqREtZUUxWNUdENDZCK2hTVGpKc3ZWNVB6dGp2SG9VNTgwRWZ0eGpEWkZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQGtuaWdodGVkL21vZHVsZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Aa25pZ2h0ZWQvbW9kdWxlLy0vbW9kdWxlLTEuNS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVnZiNC9mVmlKZmFvTEVtbjgxVEdpcm1SL2wzNmdRd2lFRUozU0N6OUZvRDhNelRnWWVGZ0E1b1RvQWZUY0ZTeGxaOUFFYnVrSnlEaDFLVXo4WDFIQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtYWdpYy1zdHJpbmciOiAiXjAuMzAuMjEiLAorICAgICAgICAib3hjLXBhcnNlciI6ICJeMC4xMTYuMCIsCisgICAgICAgICJwZXJpc2NvcGljIjogIl40LjAuMiIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiZHViIjogImRpc3QvY2xpLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIyLjIxLjEgPDIzIHx8ID49MjQgPDI1IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrIjogeworICAgICAgInZlcnNpb24iOiAiMS4yOS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrLy0vc2RrLTEuMjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItem8zN21aQTloSldwVUxna1Jwb3dld2V6MXk2TUw1R3NYSlBZOEZJMHRCQkNkNzdIRXZ6YTRqRHFSS09YZ0hObjg2N1BWR0N5VGR6cXB6MGl6dTVaalE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBob25vL25vZGUtc2VydmVyIjogIl4xLjE5LjkiLAorICAgICAgICAiYWp2IjogIl44LjE3LjEiLAorICAgICAgICAiYWp2LWZvcm1hdHMiOiAiXjMuMC4xIiwKKyAgICAgICAgImNvbnRlbnQtdHlwZSI6ICJeMS4wLjUiLAorICAgICAgICAiY29ycyI6ICJeMi44LjUiLAorICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC41IiwKKyAgICAgICAgImV2ZW50c291cmNlIjogIl4zLjAuMiIsCisgICAgICAgICJldmVudHNvdXJjZS1wYXJzZXIiOiAiXjMuMC4wIiwKKyAgICAgICAgImV4cHJlc3MiOiAiXjUuMi4xIiwKKyAgICAgICAgImV4cHJlc3MtcmF0ZS1saW1pdCI6ICJeOC4yLjEiLAorICAgICAgICAiaG9ubyI6ICJeNC4xMS40IiwKKyAgICAgICAgImpvc2UiOiAiXjYuMS4zIiwKKyAgICAgICAgImpzb24tc2NoZW1hLXR5cGVkIjogIl44LjAuMiIsCisgICAgICAgICJwa2NlLWNoYWxsZW5nZSI6ICJeNS4wLjAiLAorICAgICAgICAicmF3LWJvZHkiOiAiXjMuMC4wIiwKKyAgICAgICAgInpvZCI6ICJeMy4yNSB8fCBeNC4wIiwKKyAgICAgICAgInpvZC10by1qc29uLXNjaGVtYSI6ICJeMy4yNS4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGNmd29ya2VyL2pzb24tc2NoZW1hIjogIl40LjEuMSIsCisgICAgICAgICJ6b2QiOiAiXjMuMjUgfHwgXjQuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAY2Z3b3JrZXIvanNvbi1zY2hlbWEiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiem9kIjogeworICAgICAgICAgICJvcHRpb25hbCI6IGZhbHNlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9ub2RlX21vZHVsZXMvYWp2IjogeworICAgICAgInZlcnNpb24iOiAiOC4xOC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYvLS9hanYtOC4xOC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QbFhQZUVXTVhNWjdzUFlPSHFtRHlDSnpjZk5yVXIzZkdOS3RlelgxNHlrWE9FSXZ5SzgxZCtxeWR4ODlLWTVPNzFGS01QYVEydkJmQkZJNU5IUjYzQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmFzdC1kZWVwLWVxdWFsIjogIl4zLjEuMyIsCisgICAgICAgICJmYXN0LXVyaSI6ICJeMy4wLjEiLAorICAgICAgICAianNvbi1zY2hlbWEtdHJhdmVyc2UiOiAiXjEuMC4wIiwKKyAgICAgICAgInJlcXVpcmUtZnJvbS1zdHJpbmciOiAiXjIuMC4yIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9lcG9iZXJlemtpbiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTk04L1A5bjNYalhoSVpuMWxMaGtGYUFDVE9VUlFYaldoVjRCQS9Sbk92OHh2Z3F0cXBBWDlJTzRtUlF4U3gxUmxvNHRxemVxYjBzT2xydWFPeTNkdWc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLWFybTY0Ly0vbXNncGFja3ItZXh0cmFjdC1kYXJ3aW4tYXJtNjQtMy4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFaSHRsVmdiQWR5MnpBcU5BOUd1MVVwSXVJOFh2c2QxdjhpYzZCMnBabWVGbkZjTVdpUExmV1hoN1RWdzRlR0VaL0M5VEgyODFLd2hWb2VRVUtieWp3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWRhcndpbi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1kYXJ3aW4teDY0Ly0vbXNncGFja3ItZXh0cmFjdC1kYXJ3aW4teDY0LTMuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tZHpkM0FWellLdVVtaVdPUThHTmhsNjQvSW9GR29sNTY5ek5SZGtMUmVoNkxSTEhPWHhVNFU4ZXEwSndhRDhpRkhkVkdxU3k0SWpGTDRyZW9XQ0RGdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJkYXJ3aW4iCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtbGludXgtYXJtIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtbGludXgtYXJtLy0vbXNncGFja3ItZXh0cmFjdC1saW51eC1hcm0tMy4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZnMHV5L2RHL25aRVhmWWlsS29SZTd5QUxhTm1Ib1llSW9KdUo3S0orWXlVMmJ2WTh2UHYyN2Y3VUtoR1JwWTZldUZZcUVWaHhDRlpnQVVOUUJNM253PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtbGludXgtYXJtNjQvLS9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybTY0LTMuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZeFFMK2F4MFhxQkpEWmlLaW1TMlhRYWYrMndER1ZhMWVuVlJHekV2TExWRmVxYTVreDJiV2J0Y1NYZ3N4alFCN25ScXFJR0ZJY0x0ZUYvc0hlVnRRZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LXg2NC8tL21zZ3BhY2tyLWV4dHJhY3QtbGludXgteDY0LTMuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jdndOZmJQMDdwS1VmcTF1SCtTNktKN2RUOUs4V09FNFppQWNzclNlcytVWTU1RS8wakxZYyt2cStETzdqbG1xUmI1ekFnZ0V4S20wSDdPL0NCYWVzZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC13aW4zMi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC13aW4zMi14NjQvLS9tc2dwYWNrci1leHRyYWN0LXdpbjMyLXg2NC0zLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteDBmV2FRdFlwNEU2c2t0YnNkQXFuZWh4RGdFYy9Wd003dUxzUkNZV2FpR3UweWtZZFpQaVM4ekNXZG5qSHd5aXVtb3VzeGZCbTRTTzMxZVhxd0VaaFE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BuYXBpLXJzL3dhc20tcnVudGltZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbmFwaS1ycy93YXNtLXJ1bnRpbWUvLS93YXNtLXJ1bnRpbWUtMS4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNOUU5OZ0ExWVNsSmIva01IMWlsZEFTUDlIVzcvN2tZblJJMnN6V0phb2ZhUzFoV21iR0k0SCtkMysyMmFHelhYTjlJSituK0dpRlZjR2lwSlAxOG93PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlieXMvd2FzbS11dGlsIjogIl4wLjEwLjEiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL0Jyb29vb29va2x5biIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlbW5hcGkvY29yZSI6ICJeMS43LjEiLAorICAgICAgICAiQGVtbmFwaS9ydW50aW1lIjogIl4xLjcuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1hbmRyb2lkLWFybS1lYWJpIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy1hbmRyb2lkLWFybS1lYWJpLy0vYmluZGluZy1hbmRyb2lkLWFybS1lYWJpLTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFPRVQ3WUlPVTMrQU5PLzN4UWVSVkdONVh4NitKR1hhSXdscWtjSFNmeEovenp3MkI2amIwWWFMaFg0NVNlUmx1S1ZUVThya2E0Ti90SHROb0pqb0NnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgPj0yMi4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ab3hjLXBhcnNlci9iaW5kaW5nLWFuZHJvaWQtYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLWFuZHJvaWQtYXJtNjQvLS9iaW5kaW5nLWFuZHJvaWQtYXJtNjQtMC4xMTYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWgwWnZ0aDVjUTZYWmtQM1FGOU1EclhmNjk1enI1WHhYcS93QlFxcFpiMHVBZ0k5d3ByOTgvSHgyUlpJVE1mbk5qa0lxMlZjeVU0NG8zQTBiZEVtbFE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImFuZHJvaWQiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1kYXJ3aW4tYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLWRhcndpbi1hcm02NC8tL2JpbmRpbmctZGFyd2luLWFybTY0LTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBsY1RkL0pza2E1NWRUb1p6NlhkUkJQUlZzaithc2pEOFFDcFFGdnQzV2o4cFkrMTBEMXBFNTNNZWkzUE9BUy93U1JTeTdIaVEydHdybTdIMkEwQ2pBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJkYXJ3aW4iCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1kYXJ3aW4teDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy1kYXJ3aW4teDY0Ly0vYmluZGluZy1kYXJ3aW4teDY0LTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFocWNGM2UzeDVaMlplcHpYcFo4dWdSRWRteHZCTCtnMW5RMFN4TzExcElaZmNrNlV0Yk90d3RkQUF4blFYQkhIdGlkdTdsUGNyQnExU0V4MjZ0MVBRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctZnJlZWJzZC14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLWZyZWVic2QteDY0Ly0vYmluZGluZy1mcmVlYnNkLXg2NC0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15bzIvTGFTWHRsektCdXJ2TmJ3dW4vc04vUkp3VzNYaGJNcjA2OUZ3TlZ0ZnQ3R0JuYUxMZFBJei9zZjQ3aWN4dy9CUFZpRVg2d0Z2emVEMTJtdHJBZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImZyZWVic2QiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1hcm0tZ251ZWFiaWhmIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1hcm0tZ251ZWFiaWhmLy0vYmluZGluZy1saW51eC1hcm0tZ251ZWFiaWhmLTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVpWmVsaUlQUGRGc3VhUHg4UHpETVZpakQvNFlhVXhPNDYvZVlQazVyYVJvY0pxamp4T0c2R0FhY1E4VXJHM2ZicmdZamFFQ2hmWUwxZThEeUU0NDVBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1hcm0tbXVzbGVhYmloZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTE2LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgtYXJtLW11c2xlYWJpaGYvLS9iaW5kaW5nLWxpbnV4LWFybS1tdXNsZWFiaWhmLTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5mN2huS1JZUlNJZ2dsUWNMQXFFMlN0NGIvWXI2ZGgrWjdpbjhteG9sMDY1S25ldnc3MVhaQWlWMWZtUFNvanE2dUtQTFY5ZW9IL3dGcmdyNFRuWlh3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1hcm02NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LWFybTY0LWdudS8tL2JpbmRpbmctbGludXgtYXJtNjQtZ251LTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlTSkkwUzRRZ2duM1FIcFQ4WTFqdFpjZUEwbTRCbHB2TzNuZTJXeGQzM1VkVEhNbWVsQW5yWHJ5ald1dEhXUXRqQ3pPd1NuRkJFb1FBZE5OeXQxdTNBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgPj0yMi4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ab3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wvLS9iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wtMC4xMTYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd01aNi8vR0krcTFKd083RzJPUjUxK2VBNVA4R3IzQm9iVThSQXpDR0pwdHZ5R01rV2I3S1ExRThzOG5hVlpScjZiU0dXQUwycDNtQ3pLT3htRVBtckE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgtcHBjNjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1wcGM2NC1nbnUvLS9iaW5kaW5nLWxpbnV4LXBwYzY0LWdudS0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01Qk8wS0N6VEcySFpUbnAzcjZTQ0FPZUNzL0d3RkJRSjFXQU9HL1JPZkRmMWZWVkV5NmhydExLVExDdVVNYWFtSDM4disxK1JWRW16Umt6Qmorck1EUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJwcGM2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1yaXNjdjY0LWdudSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTE2LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgtcmlzY3Y2NC1nbnUvLS9iaW5kaW5nLWxpbnV4LXJpc2N2NjQtZ251LTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU0yNGdZYi9vY1ZNbkx3bkgyd1k1c0x0NHNSQmtBVUhEbWZpWXR5VVlkS1RrZlBPS3Rwb3BkNW90c0wvQlBMbklocE1EOHpieTR1WFZ2dzdCVTBVSWx3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgInJpc2N2NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgtcmlzY3Y2NC1tdXNsIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1yaXNjdjY0LW11c2wvLS9iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbC0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MSExYVEhDSDBiZHZHamxpdHdyMW5nZWgzMkdBZ3E5SFl6UTVWQWd0MGswVVQ4NEFTOEFrWGo5U3BvYTlsMjBmWGtWZ1N2QUtjQ0VreWRpNE9sMjNEdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJyaXNjdjY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgPj0yMi4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ab3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LXMzOTB4LWdudSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTE2LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgtczM5MHgtZ251Ly0vYmluZGluZy1saW51eC1zMzkweC1nbnUtMC4xMTYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVkUrWHN6dHVFNWpkSHZMSURJUU11eURwejVOSkdxMVZ4LzhFWFlGMHNTL2dlaGx2OUdoRHBHVldVMFNDWi9ManpJeTRpby9aMFc4NFV1ZHF1ZnZQM2c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiczM5MHgiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgteDY0LWdudSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTE2LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgteDY0LWdudS8tL2JpbmRpbmctbGludXgteDY0LWdudS0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yeFVrYXV5ampDbWdBN0JvUjYzb2dSR0V0Z3ViUk9uQ204QVhFOXlkZytwNDJqQ0dMTHFHMDVtRmNTMmVDK0ZZeUFVNThaRkpOWFhlcUZXMWlDeVRHUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctbGludXgteDY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LXg2NC1tdXNsLy0vYmluZGluZy1saW51eC14NjQtbXVzbC0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wem9abGs5TW1YZTZvVGdTaDVsVDFENTFTREMxYmZ3Qzk2Sm1FMWFtTUZBUGRFYkprNU1GUmlzZlROOVRGQnBCaWdRdWE2NTg0MnRqYXhxTWlvckFZdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctb3Blbmhhcm1vbnktYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLW9wZW5oYXJtb255LWFybTY0Ly0vYmluZGluZy1vcGVuaGFybW9ueS1hcm02NC0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QR1M3WHFpazc3VTlXTXlXNjI2Z0FENUEyclNONjI5VXZ5WUpLQWwvdGdwVCtLcVpJNCs1NnBKZkV4aHY4SVcvUHBTSGpZSHdqbWFrd29iTGlrejh3dz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAib3Blbmhhcm1vbnkiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8ID49MjIuMTIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQG94Yy1wYXJzZXIvYmluZGluZy13YXNtMzItd2FzaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMTE2LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BveGMtcGFyc2VyL2JpbmRpbmctd2FzbTMyLXdhc2kvLS9iaW5kaW5nLXdhc20zMi13YXNpLTAuMTE2LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxHTmYvOVBVOFh4QjRHdDFHcjFBS3dTcmp4R1lhNm9zMFBsclQ0YnBvUXNmRTNnYVpvblFUS3dKeUtoaVFkZ3k3cEJDSStlZDFMQjFOTmliMUZZVUx3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIndhc20zMiIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBuYXBpLXJzL3dhc20tcnVudGltZSI6ICJeMS4xLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ab3hjLXBhcnNlci9iaW5kaW5nLXdpbjMyLWFybTY0LW1zdmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXBhcnNlci9iaW5kaW5nLXdpbjMyLWFybTY0LW1zdmMvLS9iaW5kaW5nLXdpbjMyLWFybTY0LW1zdmMtMC4xMTYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdGNzT0hFMzFkdUJTUlFYWjdOZmR0am1NS1p3UVlsUzAwUHdBTUo0dzVvWHMzaVBDdmlzVXVJWFA3S280RnplT0JUUnZrZDY0YnR4dFE2Y1JNMEt3bHc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIndpbjMyIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BveGMtcGFyc2VyL2JpbmRpbmctd2luMzItaWEzMi1tc3ZjIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy13aW4zMi1pYTMyLW1zdmMvLS9iaW5kaW5nLXdpbjMyLWlhMzItbXN2Yy0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oaWdDei94K2RPUTI2NFlFazIyaG51NFJEcXZqaGZlaGpGT1JweG9oNDJReVV4c1A2ZUllbWJZZXNCVXU1aWxBTFdvMEh2UkQrbTg5YXoyQlNUd3FwUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJpYTMyIgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgPj0yMi4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ab3hjLXBhcnNlci9iaW5kaW5nLXdpbjMyLXg2NC1tc3ZjIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG94Yy1wYXJzZXIvYmluZGluZy13aW4zMi14NjQtbXN2Yy8tL2JpbmRpbmctd2luMzIteDY0LW1zdmMtMC4xMTYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTGcyU1JtVkhwR0c4NWtuRFZMYnY0NHIxYlluME9wSVYwdmc5alZtb0VJcERqM1E0a3dYdVE2TVdWdHVzbHdIUjhvMkNTaXFkQmVFbjFuMVVScnM2RWc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE5LjAgfHwgPj0yMi4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ab3hjLXByb2plY3QvdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjExNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ab3hjLXByb2plY3QvdHlwZXMvLS90eXBlcy0wLjExNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11T1Q4UzF0bFBtRGNrTnhNTnRJdWROL3lYcExkbmhsSk1YMm9MUzdjeENkN0wwc1VGMDlBL0ViU1ZNV1QzWS9pVDQ0SXdYQ0pTSmZnZlN4WEFxV2Y5UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9Cb3NoZW4iCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXIvLS93YXRjaGVyLTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10bW1aM2xReEFlL2svK3JOblhRUmF3SjROanhPMmhxaU9MVEh2V2NodEdaVUxwNFJ5RmVoNmFVNFhkT1lCRmUyS0Uxb1NoUVR2NEFibE9zMmlPck5uUT09IiwKKyAgICAgICJoYXNJbnN0YWxsU2NyaXB0IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZGV0ZWN0LWxpYmMiOiAiXjIuMC4zIiwKKyAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIiwKKyAgICAgICAgIm5vZGUtYWRkb24tYXBpIjogIl43LjAuMCIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4zIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWFuZHJvaWQtYXJtNjQiOiAiMi41LjYiLAorICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWRhcndpbi1hcm02NCI6ICIyLjUuNiIsCisgICAgICAgICJAcGFyY2VsL3dhdGNoZXItZGFyd2luLXg2NCI6ICIyLjUuNiIsCisgICAgICAgICJAcGFyY2VsL3dhdGNoZXItZnJlZWJzZC14NjQiOiAiMi41LjYiLAorICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybS1nbGliYyI6ICIyLjUuNiIsCisgICAgICAgICJAcGFyY2VsL3dhdGNoZXItbGludXgtYXJtLW11c2wiOiAiMi41LjYiLAorICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybTY0LWdsaWJjIjogIjIuNS42IiwKKyAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci1saW51eC1hcm02NC1tdXNsIjogIjIuNS42IiwKKyAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci1saW51eC14NjQtZ2xpYmMiOiAiMi41LjYiLAorICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWxpbnV4LXg2NC1tdXNsIjogIjIuNS42IiwKKyAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci13aW4zMi1hcm02NCI6ICIyLjUuNiIsCisgICAgICAgICJAcGFyY2VsL3dhdGNoZXItd2luMzItaWEzMiI6ICIyLjUuNiIsCisgICAgICAgICJAcGFyY2VsL3dhdGNoZXItd2luMzIteDY0IjogIjIuNS42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItYW5kcm9pZC1hcm02NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItYW5kcm9pZC1hcm02NC8tL3dhdGNoZXItYW5kcm9pZC1hcm02NC0yLjUuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVF4U1MzNHRQRi82Wkc3ci9JaDl4eStrUC9Xd2VkaUVVc3FtdGYwY3VDVjVUUFBLdy9QUUhSaHVlVW82SmRlRkphcVYzcHlqbTBHZFlqWm90YlJ0L0E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJhbmRyb2lkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1kYXJ3aW4tYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLWRhcndpbi1hcm02NC8tL3dhdGNoZXItZGFyd2luLWFybTY0LTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aMlpkcm53eVh2dnZkdFJITG1NNGtueWRJZFU5YWRPM0Q0bi8wY1ZpcEYzclJpd1ArMy9zZnpwQXdBL3FLRkw2aTFNb2RhYWJrVTdJYnBlTUJnaVZFQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImRhcndpbiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItZGFyd2luLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItZGFyd2luLXg2NC8tL3dhdGNoZXItZGFyd2luLXg2NC0yLjUuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSGd2T2YzVzlkaGl0aGN3T1dYOXVEWnluMWxXOVIrN3RQWjRzdWcrTkdyR0lvNFJrMWhBWExFYmNIMVRRU3F4dHMwTllYWGxPV3FWcHZTMVNGUzRmUmc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1mcmVlYnNkLXg2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItZnJlZWJzZC14NjQvLS93YXRjaGVyLWZyZWVic2QteDY0LTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12SlZpOHlkL3F6SnhFS0hrZWVtaDd3M1lBbjZSSkN0WWxFNEhQTW9WbkNwSVhFelNyeEVyQlc1U0pCZ0tMYlhVM1dkSXBrakJUZVVOdHlCVm44VFJuZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJmcmVlYnNkIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1saW51eC1hcm0tZ2xpYmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybS1nbGliYy8tL3dhdGNoZXItbGludXgtYXJtLWdsaWJjLTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05SmlZZkI2aDZCZ1Y1MENDZmFzZkxmL3V2T2NKc2tNU3djZEgxUEhIOXJ2UzFJck55OHphZDZJVVZQVlVmbVhyK3UrS205SXhjZk1MemdkT3VkejlFUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm0iCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItbGludXgtYXJtLW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybS1tdXNsLy0vd2F0Y2hlci1saW51eC1hcm0tbXVzbC0yLjUuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmUzZ1VDRzU3bnVVVVN5akJxL01BTTBDekFydHVJT3hzQmRRK2Z0ejZobzhuN3MxaTlFMU5tay94bVAzMjNyMllMMFNPTnMxRXV3cUJwMnUxazVmeGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtIgorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybTY0LWdsaWJjIjogeworICAgICAgInZlcnNpb24iOiAiMi41LjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci1saW51eC1hcm02NC1nbGliYy8tL3dhdGNoZXItbGludXgtYXJtNjQtZ2xpYmMtMi41LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYyZy9EVDNOaEdQZEJtTVdZb3hpeHFZcjN2L1VYY21MT1l5MTZCeDBUTTIwVGNoZHV3cjRFYUNibXhoMTMyMVRBQnFQR0RwUzhEL2dnT1RhbGppak9BPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybTY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybTY0LW11c2wvLS93YXRjaGVyLWxpbnV4LWFybTY0LW11c2wtMi41LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFiNm5hTURHbGJDd2RoTGo2aGdvVktKbDJvZEwzNHoyc3FrQzdaNmt6aXI4YjVXNjVXWURwTEI2UjA2S2FidlpkZ29ISS96eGtlNGIzelIwd0FiRFRBPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWxpbnV4LXg2NC1nbGliYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItbGludXgteDY0LWdsaWJjLy0vd2F0Y2hlci1saW51eC14NjQtZ2xpYmMtMi41LjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtiVDV3dk5RbHg3TmFHanpQRnU4blZJVzFyV3FWNzgwTzdadGtqdVdhUFVncHYyTk1GcGpZRVJWaTBVWWoxbXNaTnlDekdsYUNXRXR6YytleGpNR2JRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1saW51eC14NjQtbXVzbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItbGludXgteDY0LW11c2wvLS93YXRjaGVyLWxpbnV4LXg2NC1tdXNsLTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xSlJGZUMraDdSZFh3bGRIelRzbWR0WVIvS3U4U3lsTGdUVS9yZU11cWRWRDdDdEx3ZjBWUjFGcWVwclowZUhRa08wdnFzYnZGTFhVbVltL3VOS0pCZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItd2luMzItYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLXdpbjMyLWFybTY0Ly0vd2F0Y2hlci13aW4zMi1hcm02NC0yLjUuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3VreWViamM2ZUdsdzl5UnQ2NzhEeFZGN3JqWGF0V2lIdlRYcXBoWkx2bzdhQzVOZEVnRnVmVndqRmZZNTFpallFV3BYYnFGNWp0cksyNzV6NTJENFE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItd2luMzItaWEzMiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItd2luMzItaWEzMi8tL3dhdGNoZXItd2luMzItaWEzMi0yLjUuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItazM1eUxwMVpNd3dlZTNFei9weEJpNWNmNEFvQktZWGowMENaODBqVXo1aDhwcnBpYVFzaVJQS1FNeG9Mc3ROdXFlMnZSNFJOUEVBRWNqRUZ6aEV6L2c9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiaWEzMiIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIndpbjMyIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci13aW4zMi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLXdpbjMyLXg2NC8tL3dhdGNoZXItd2luMzIteDY0LTIuNS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oYlFsWWNDcTVkbEFYOVF4K2tGYjBGSHVlNnZiamxmMEZyTnpTS2RZSzJBUFVmN3RHZkd4UUNrMmloRVJFbWJSNlpNYzBNVkFENVJJWC80MWdwVXpUdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ4NjQiCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJ3aW4zMiIKKyAgICAgIF0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AcGtnanMvcGFyc2VhcmdzIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGtnanMvcGFyc2VhcmdzLy0vcGFyc2VhcmdzLTAuMTEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzFWa2pkRDBRQkxQb2RHckpVZXFhckg4VkFJdlFPRElid2g5WHBQNVN5aXNmN1lvUWdzSktQTkZvcXFMUWx1K1ZRL3RWU3NoTVI2bG9QTW44VStkUGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bwa2dyL2NvcmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBrZ3IvY29yZS8tL2NvcmUtMC4yLjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFOcVh5ZlZTMndtOWh3ZVNZRDJPN0YwRzA2dXVyajlrWjk2VFJRRTVZOWhVNyt0Z2Rad0lrYkFLYzVPY3kxSHhFWTJrdURRYTZjUTFXUnMvTzVMRktBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMi4yMC4wIHx8IF4xNC4xOC4wIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BrZ3IiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzaGlraWpzL2VuZ2luZS1vbmlndXJ1bWEiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIzLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaGlraWpzL2VuZ2luZS1vbmlndXJ1bWEvLS9lbmdpbmUtb25pZ3VydW1hLTMuMjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMW5XSU53S1h4S0tMcVBpYlQ1ZjRwQUZMZWo5b1p6UVRzYnk4OTQyT1Rsc0p6T0JaME1XS2l3ek1zZCtqaHp1OFlQQ0hBc3dHbm5OMVl0UWZpckwzNWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNoaWtpanMvdHlwZXMiOiAiMy4yMy4wIiwKKyAgICAgICAgIkBzaGlraWpzL3ZzY29kZS10ZXh0bWF0ZSI6ICJeMTAuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac2hpa2lqcy9sYW5ncyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNoaWtpanMvbGFuZ3MvLS9sYW5ncy0zLjIzLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJFcDRXM1JlNWFCMS82MlJTWVFJbks5bU0zSHNMZUI5MWNIcXpuQUpNdXlscWp6TlZBVkNNbk5XUkhGdGNOSFhzb05SYXlQOXoxcWo0U3Ezbk1xWVhnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzaGlraWpzL3R5cGVzIjogIjMuMjMuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNoaWtpanMvdGhlbWVzIjogeworICAgICAgInZlcnNpb24iOiAiMy4yMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2hpa2lqcy90aGVtZXMvLS90aGVtZXMtMy4yMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01cXlTWWExWmdBVDE4SFIveXBFTkw5Y1VTR09lSTJ4KzRJdllKdTRKZ1ZKZGl6bjZrRzRpYTVRMWpERU9pN2dUYk40UmJ1WXRtSGgwVzNlY2NPcmpNQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc2hpa2lqcy90eXBlcyI6ICIzLjIzLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzaGlraWpzL3R5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiMy4yMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2hpa2lqcy90eXBlcy8tL3R5cGVzLTMuMjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM0paNUhYT1pmWWpzWVNrMHlQd0Jya3VweVlTTHBBRTI2UWMwSExnaGhaTkdUWmcvU0t4WElJZ294T3BtbWVRUDBSUlNESlRrMS92UGZ3OXRidytqU1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNoaWtpanMvdnNjb2RlLXRleHRtYXRlIjogIl4xMC4wLjIiLAorICAgICAgICAiQHR5cGVzL2hhc3QiOiAiXjMuMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac2hpa2lqcy92c2NvZGUtdGV4dG1hdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMC4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaGlraWpzL3ZzY29kZS10ZXh0bWF0ZS8tL3ZzY29kZS10ZXh0bWF0ZS0xMC4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgzeWVnaFoyeHhpbjNOajh6MU5NZC9OQ3VjYStnc1lYc3d5d0R5NWJIdndsV0w4dHBUUW16R2VVdUhkOUZDM0UvU0JFTXZ6SlJ3V0VPejVnR2VzOVFnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzaW5jbGFpci90eXBlYm94IjogeworICAgICAgInZlcnNpb24iOiAiMC4zNC40OSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbmNsYWlyL3R5cGVib3gvLS90eXBlYm94LTAuMzQuNDkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJyeVNRUXM3SnRuMGpvVjhYaDlaVi9oWmI5T3piMHBtYXpESUFTQmtZS0NqWHJYVTNtcGNGYWhtSy96NFlEaEdrUXZQOW1XSmJWeWFoZHRVNXdRQStBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2NvbW1vbnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbm9uanMvY29tbW9ucy8tL2NvbW1vbnMtMy4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUszbUNIS1E5c1ZoOG8xQzljeGt3eGFPbVhvQU1sRHhDMW1ZeUhyanFPV0VjQmpZcjc2dDk2ekwyemxqNWRVR1ozSFN3MjQwWDFxZ0gzTWpmMXlKV3BRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInR5cGUtZGV0ZWN0IjogIjQuMC44IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac2lub25qcy9mYWtlLXRpbWVycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE1LjMuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbm9uanMvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy0xNS4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1ybjM1SmwycENwbnMrbUUzSGFaYTF5UE41RVlDUmdpTUkrMTM1Q09qcjJocjhDbHM5RFhxSVo1N3ZaZTJjejd5MlhWU3E5MnRjczZrR1FjVDFKOFJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzaW5vbmpzL2NvbW1vbnMiOiAiXjMuMC4xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2NvbmZpZy1yZXNvbHZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNC4xNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9jb25maWctcmVzb2x2ZXIvLS9jb25maWctcmVzb2x2ZXItNC40LjE3LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UekRaY0FuaFR5QUhiWFZ4V1pvNy90RWNySWVGcTIwSUJrOFNvM09MT2V0V3BSOEV3WS95RXFCTUJGYUpNZXlFaVJFRHE0TmZFbCtxTzNPQVVEK3ZiUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogIl40LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1jb25maWctcHJvdmlkZXIiOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1lbmRwb2ludHMiOiAiXjMuNC4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlIjogIl40LjIuMTQiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiMy4yMy4xNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9jb3JlLy0vY29yZS0zLjIzLjE2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KU3RvbU9ySU5RQTFWcU5Fb3BMc2djZGd3ZDQyYXU3bXlrS3FWcjMwWEZ3ODl3THQ5c0R4SkRpNGRqVlBSd1FtbXp5VEd5L3VPdlRjMnVsdE1wRmkxdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAiQHNtaXRoeS91cmwtcGFyc2VyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJhc2U2NCI6ICJeNC4zLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJvZHktbGVuZ3RoLWJyb3dzZXIiOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1taWRkbGV3YXJlIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXN0cmVhbSI6ICJeNC41LjI0IiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJAc21pdGh5L3V1aWQiOiAiXjEuMS4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvY3JlZGVudGlhbC1wcm92aWRlci1pbWRzIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy8tL2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcy00LjIuMTQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUF1Mjh6Qk40OFpBb1hkb29HVUhlbXVWQnJrRStJZTZSUG1HTklBSnNGcWozM1ZoYjZ4QWdSaWZVeWRaMmFZK00rS2FNQUVUQWxLazVOQzVoMUc3d3BnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgIkBzbWl0aHkvdXJsLXBhcnNlciI6ICJeNC4yLjE0IiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvZmV0Y2gtaHR0cC1oYW5kbGVyIjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjE3IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L2ZldGNoLWh0dHAtaGFuZGxlci8tL2ZldGNoLWh0dHAtaGFuZGxlci01LjMuMTcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJYT3ZRemFTbTZNbm1MYVdBMWVsZ2ZRY0F0TjRVUDN2WHFWOTdiSHVvT3JIUU9KaUxUM2RzNm85ZW81YnFkMFRKZlJGcHpkR25EUWRXM0ZBQ2lBVmR3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlciI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L2hhc2gtbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9oYXNoLW5vZGUvLS9oYXNoLW5vZGUtNC4yLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04WkJEWTJERDR3citHR2pUcFB0aWdsRXNxcjBsVVArS0hxZ1pjV2N6RmY2cWVaL1lSak1JT29RV1ZRbG13dTdFdHhLVGQ4WVhEOGxibG1ZY3BCSUExZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tIjogIl40LjIuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXRmOCI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9pbnZhbGlkLWRlcGVuZGVuY3kiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvaW52YWxpZC1kZXBlbmRlbmN5Ly0vaW52YWxpZC1kZXBlbmRlbmN5LTQuMi4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzIxcUppVFNiMjV4dnZPcCtIMlROWnpQQ25ncnZsNXZJUHFQQjh6US9EbUpGNFFXWE8xOXgxZFdmTUpaNndadXVXVVBQbTBnVjhDMGNVMytpZmNXdXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvaXMtYXJyYXktYnVmZmVyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvaXMtYXJyYXktYnVmZmVyLy0vaXMtYXJyYXktYnVmZmVyLTQuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uNnJRNE44Smo0WVRRTzNZRnJsZ1p1d0tvZGY0elVGczdFSklXSDg2cFNDV0JhQXRBR0JGZkNNN1d4NkQyYkJKMnhxRk54R0JTclVXc3dUM00wVkpvdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtY29udGVudC1sZW5ndGgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvbWlkZGxld2FyZS1jb250ZW50LWxlbmd0aC8tL21pZGRsZXdhcmUtY29udGVudC1sZW5ndGgtNC4yLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14aEhxN2ZYNC8zbHY1Tkh4TFVrM09lRXZsMHhaK0VrM3FJYldhQ0w0ZjlKd2dEWkVjbFBCRWxsamFaQ0FJdGRHUFFsL2tTTTRMUE1PcHkxTVlncHJwdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9taWRkbGV3YXJlLWVuZHBvaW50IjogeworICAgICAgInZlcnNpb24iOiAiNC40LjMxIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L21pZGRsZXdhcmUtZW5kcG9pbnQvLS9taWRkbGV3YXJlLWVuZHBvaW50LTQuNC4zMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItS0pQZENJTjJrT0UyYUdtcVpkN2VVVHI0V1F3T0dndExXZ1Vrc3dHSmdnczdyQmNRWVFqY1pNRURhM0MwRHdiT2lYUzlMOC93RG9RSGtmeEJZTGZpTHc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1zZXJkZSI6ICJeNC4yLjE5IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiAiXjQuNC45IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3VybC1wYXJzZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtbWlkZGxld2FyZSI6ICJeNC4yLjE0IiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1yZXRyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L21pZGRsZXdhcmUtcmV0cnkvLS9taWRkbGV3YXJlLXJldHJ5LTQuNS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vejduSUZLK1pSVzNJZS9sM05FVkdkeTM0THZtRU96QnJ0QkF2Z1daLzRQcktYMHhQM2tXbThwa2Zjd1VrNTIzU3F4WmhkYlFQOUpTWGdqRjc3VWhwdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2NvcmUiOiAiXjMuMjMuMTYiLAorICAgICAgICAiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlciI6ICJeNC4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvbiI6ICJeNC4zLjAiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjEyIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtbWlkZGxld2FyZSI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1yZXRyeSI6ICJeNC4zLjMiLAorICAgICAgICAiQHNtaXRoeS91dWlkIjogIl4xLjEuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L21pZGRsZXdhcmUtc2VyZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvbWlkZGxld2FyZS1zZXJkZS8tL21pZGRsZXdhcmUtc2VyZGUtNC4yLjE5LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RNnkrVzloM2lZVk1DS1dEb1ZnZStPQzFMS0ZxYkVLYXE4U0lXRzJYMmJXSlJwZC82ZERMeUlDY05MVDZQYmpIM1JyNmJtZy9TZURCMjVYRk9GZmVFdz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2NvcmUiOiAiXjMuMjMuMTYiLAorICAgICAgICAiQHNtaXRoeS9wcm90b2NvbC1odHRwIjogIl41LjMuMTQiLAorICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvbWlkZGxld2FyZS1zdGFjayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9taWRkbGV3YXJlLXN0YWNrLy0vbWlkZGxld2FyZS1zdGFjay00LjIuMTQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJkdmtVS0x1RmRLc0NSbU9FNE1uNjNjbzBEanRzbStKTWgwYllaUXVwTjFwSndNZUU4Rm1RbVJMTHp6RU1OMGRuTmk3Q0RDWVlIOEYwRVZ3V2lQQmVBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyIjogeworICAgICAgInZlcnNpb24iOiAiNC4zLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L25vZGUtY29uZmlnLXByb3ZpZGVyLy0vbm9kZS1jb25maWctcHJvdmlkZXItNC4zLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TK2dGanlvL3dlU1ZMMFAxYjlUczhDL0N3SWZOQ2dVUGlrazNzbDZRVnNmRS91VXVPK1FzRitOc0UvSmtwdldxcXl6MXdnN0hGZGlhWnVqNUNvQk1SZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyIjogIl40LjQuOSIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L25vZGUtaHR0cC1oYW5kbGVyLy0vbm9kZS1odHRwLWhhbmRsZXItNC42LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVA3MzRjQW9URnR1R2ZXYS9SM2pnQm5HbFVSdDJ3OWJZRUJ3UU5NS2Y1OHNSTTlSU2hpckIybUt3THNWUCtqbEcvd3hwQ3U4YWJ2OE54ZFV0czh0ZExBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlciI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyLy0vcHJvcGVydHktcHJvdmlkZXItNC4yLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XdU0zMUNnZnNuUS8xMGk3TllyMFB5eHFrbkQ3Mlk1dU1mVU1WU25pUGpiRVBjZWlURXJiNGVJcUpRK3BkeE5FQVVFV3Jld3JHaklSalZiVkhzeFppUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9wcm90b2NvbC1odHRwIjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3Byb3RvY29sLWh0dHAvLS9wcm90b2NvbC1odHRwLTUuMy4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZE41RjhrSHg4Uk5VMHIrcEN3Tm1GWnl6NkNoak1relNoeS96dXA2TXRrUm1taXg0dlp6SmRXK2RpN3gvL2IxTGl5bklldjg4Rk0xOGllK3d3UGNRdFE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvcXVlcnlzdHJpbmctYnVpbGRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4xNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9xdWVyeXN0cmluZy1idWlsZGVyLy0vcXVlcnlzdHJpbmctYnVpbGRlci00LjIuMTQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhZQTVaMElxVGVGKzVYRGRoNEJCbVNBMEh2YmdWWkl5djRjbU9vVWhlRE5SNTdLMUhnQnA5dWtVTXgzQ3IzWHBESEhwTEJuZXhQRTNMQXREc1prajJBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXJpLWVzY2FwZSI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS9xdWVyeXN0cmluZy1wYXJzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvcXVlcnlzdHJpbmctcGFyc2VyLy0vcXVlcnlzdHJpbmctcGFyc2VyLTQuMi4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHIrWXlxQkQyM0dWdlJ4R0dyY2Mvb09lTmxLM1B6VDVGdTRkenJEWHh6UzFMcEZpdUwyUFFRcUtQczg3TTc5YVc3emlNcytudkIzcWR3NzdTcUU3THc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2VydmljZS1lcnJvci1jbGFzc2lmaWNhdGlvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3NlcnZpY2UtZXJyb3ItY2xhc3NpZmljYXRpb24vLS9zZXJ2aWNlLWVycm9yLWNsYXNzaWZpY2F0aW9uLTQuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05aktzQllRUlBSMHhCTGdjMjQxNVJzQTVQSWNQMnNpczRvQmROOXMwRDEzY2cxQjEyODRtTlRqeDlZYytCRUVSWHp1UG01T2JrdEk5Nk94c0toOEU5QT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3NoYXJlZC1pbmktZmlsZS1sb2FkZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS9zaGFyZWQtaW5pLWZpbGUtbG9hZGVyLy0vc2hhcmVkLWluaS1maWxlLWxvYWRlci00LjQuOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDk1L1YySTE1U0hnZWRTSm9EUEQyM0p1U2ZLQXA3MjZaSTFWMHd0akIwN1doN3EvMHRyaS8wZTBETGVmWkNIZ3hab25yR0t0L09DVHBBdFAxd0Uxa1E9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc2lnbmF0dXJlLXY0IjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3NpZ25hdHVyZS12NC8tL3NpZ25hdHVyZS12NC01LjMuMTQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFEOVkvbm1sVmpDZVNpdkNiaFo3aGdFcG1IeVkxaDBHdnBTWnQzbDB4Y0Q5SmptalZDMUNIT296UzYrR2grL2xkTUg4SnVKNmN1ak9iUXFmYXlBVkZBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvaXMtYXJyYXktYnVmZmVyIjogIl40LjIuMiIsCisgICAgICAgICJAc21pdGh5L3Byb3RvY29sLWh0dHAiOiAiXjUuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAiQHNtaXRoeS91dGlsLWhleC1lbmNvZGluZyI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3V0aWwtdXJpLWVzY2FwZSI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvc21pdGh5LWNsaWVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMTIuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvc21pdGh5LWNsaWVudC8tL3NtaXRoeS1jbGllbnQtNC4xMi4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZGFPN1NKbjRlTTZBcmJtckVzKy9CVGJIN2FmOEFFYlNMM09NUWRjUnZ2bjh0dVVjUjVyVTJuNkRneElWNTNhWE1TNDJ1d0s4TmdLS0NoNVhncVlPUFE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9jb3JlIjogIl4zLjIzLjE2IiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1lbmRwb2ludCI6ICJeNC40LjMxIiwKKyAgICAgICAgIkBzbWl0aHkvbWlkZGxld2FyZS1zdGFjayI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvcHJvdG9jb2wtaHR0cCI6ICJeNS4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtc3RyZWFtIjogIl40LjUuMjQiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS90eXBlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMTQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS90eXBlcy8tL3R5cGVzLTQuMTQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNTliNUh0U1ZyVlIvZVlOZWkzQlVqM0RDUEtEL0c3RXRERGU3T0VKRTdpN0Z0UUZ1Z1lvNk14Ym90UzhtVkprTE5WZjhnWWFBbEVCd3d0SjlIemhXU2c9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91cmwtcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3VybC1wYXJzZXIvLS91cmwtcGFyc2VyLTQuMi4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDA2QmlCaWdKOGJUQTNNZ25PZkN0RFVXbkFNWTBZZmVkTy9HUnBtYzdwK3dnM0tXOHZiWHkxeHdTdTVBU3kwd1Y3clJZdGxmWk9JS0g0WHFmaGpTUVE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9xdWVyeXN0cmluZy1wYXJzZXIiOiAiXjQuMi4xNCIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJhc2U2NCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYmFzZTY0Ly0vdXRpbC1iYXNlNjQtNC4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhSSDZiMEgvNUEzU2dibG1NYTVFclhRMlhLaGZiUUIrRm0vb3lMWjJPMmtDVXJ3Z2c1NWJVMFJla216QWh1d09qQTlxZE41VlUyQnByT3ZHR1VrT09RPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6ICJeNC4yLjIiLAorICAgICAgICAiQHNtaXRoeS91dGlsLXV0ZjgiOiAiXjQuMi4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1ib2R5LWxlbmd0aC1icm93c2VyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1ib2R5LWxlbmd0aC1icm93c2VyLy0vdXRpbC1ib2R5LWxlbmd0aC1icm93c2VyLTQuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KS0NyTE5PdXAzT09nbXplYUtRd2k0WkNUV2xZUjVINEdtMXIydVRNVkJYb2VtbzFVRWdoazV2dE1pMXhTdTJ5bWdLVkdXNjMxZTJmcDkvUjYxMFpqUT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtYm9keS1sZW5ndGgtbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtYm9keS1sZW5ndGgtbm9kZS8tL3V0aWwtYm9keS1sZW5ndGgtbm9kZS00LjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWmtKR3ZxQnpNSFZIRTdyL2hjdUN4bFRZOHBRcjFrTXRkc1ZQczdleDRtTVUrRUFiY1hwcGZvNU5teXhNWWkyWFU0OWVxYXo1NmoyZ3NrNGRISFBHL2c9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWJ1ZmZlci1mcm9tIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1idWZmZXItZnJvbS8tL3V0aWwtYnVmZmVyLWZyb20tNC4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZEWEQ3Y3ZVb0ZXd042dnRRZkV0YTU0MFkvWUJlNUpuZUszU29aZzliVGhTb09BQy9lR2VZRXVhNlJrQmdLakdhL3N6NlkrRHVCWmozK1lFWTIxeTRRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvaXMtYXJyYXktYnVmZmVyIjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtY29uZmlnLXByb3ZpZGVyIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1jb25maWctcHJvdmlkZXIvLS91dGlsLWNvbmZpZy1wcm92aWRlci00LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFdVMDNWM1hVcHJKd2FVSUZWdjRpT25TMUZDOUhuTUhEZlVybE5EU2g0MzE1djBjV3lhSUVyUDhLaXFHVmJmNXorSnVwb1ZwTk03WkIzakZpVGVqdlE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtYnJvd3NlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy40OCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtYnJvd3Nlci8tL3V0aWwtZGVmYXVsdHMtbW9kZS1icm93c2VyLTQuMy40OC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHhWUlZQWWFSRFdhNllRZHNlMWFXWDFxcmtzbUxzdk55R0JLZGMzMnE0akZ6U2p4WVZOV2ZzdGtuQWZSMjI4VG56UzR0emdzd1hSdVlJYmhYQnVYRlE9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9wcm9wZXJ0eS1wcm92aWRlciI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvc21pdGh5LWNsaWVudCI6ICJeNC4xMi4xMiIsCisgICAgICAgICJAc21pdGh5L3R5cGVzIjogIl40LjE0LjEiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi41MyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLWRlZmF1bHRzLW1vZGUtbm9kZS8tL3V0aWwtZGVmYXVsdHMtbW9kZS1ub2RlLTQuMi41My50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWJnQ2srOUpkQnE4cFlDOFk2VTVmanlTOGU0c2JveUFTaGV0eFBOTDByUkJ0YVZsNTZHU0ZBeHNvbFZCSWVhMXRYUjRMUEl6TDhpNnhxbWNmMCtEQ1E9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9jb25maWctcmVzb2x2ZXIiOiAiXjQuNC4xNyIsCisgICAgICAgICJAc21pdGh5L2NyZWRlbnRpYWwtcHJvdmlkZXItaW1kcyI6ICJeNC4yLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1jb25maWctcHJvdmlkZXIiOiAiXjQuMy4xNCIsCisgICAgICAgICJAc21pdGh5L3Byb3BlcnR5LXByb3ZpZGVyIjogIl40LjIuMTQiLAorICAgICAgICAiQHNtaXRoeS9zbWl0aHktY2xpZW50IjogIl40LjEyLjEyIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtZW5kcG9pbnRzIjogeworICAgICAgInZlcnNpb24iOiAiMy40LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1lbmRwb2ludHMvLS91dGlsLWVuZHBvaW50cy0zLjQuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTU1VHIrM09LbGQ0VFR0blQrUmhLT1FIeVB4bTNqL3hMNE9SODNXQlVoTEphS0RTOWRuSjdhclJNT3AzdDMxZGNMaEFwd0c5Ymd2clJYQkhsTGRJa2c9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS9ub2RlLWNvbmZpZy1wcm92aWRlciI6ICJeNC4zLjE0IiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtaGV4LWVuY29kaW5nIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmcvLS91dGlsLWhleC1lbmNvZGluZy00LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWN6M1c1dnVISzRzTFFkeVQ5M2svcmZyVXdkSjgvSForbk1VT3lHZHBlR0ExV3h0NjV6WXdpM29FbDlrT00rUnN3dllxOTBmemtORGFoUFM4SzBPSWc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLW1pZGRsZXdhcmUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXRpbC1taWRkbGV3YXJlLy0vdXRpbC1taWRkbGV3YXJlLTQuMi4xNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVN1MnZqOVJZTkRFdi9WKzJFK2pYa2t3R3NnUjdkYzRzZkhuOVo3cnV6UUhKSUVuaTl6enc1Q2F1dlJYbEZKZm1nY3FZUDhmV2EwZGtoMlEyWWFReXc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHNtaXRoeS90eXBlcyI6ICJeNC4xNC4xIiwKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0BzbWl0aHkvdXRpbC1yZXRyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtcmV0cnkvLS91dGlsLXJldHJ5LTQuMy4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pZGpVdmQ0TTlKajZyWGtocXc0SDRyZUhvd2V1SzRaeFlXeU9yRXA0TjJyT0Y1VnRhT2xRR0xEUUp2YS84V2FuTlhrOVNjUXRzQWI3bzVVSEd2Rm00QT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L3NlcnZpY2UtZXJyb3ItY2xhc3NpZmljYXRpb24iOiAiXjQuMy4wIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiNC41LjI0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtc3RyZWFtLy0vdXRpbC1zdHJlYW0tNC41LjI0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uYTV2djJtQlNEelhld0xFRW9XR0k3TFFRa2ZwbUZFb21Cc21PcHpMRmpxR2N0bTBpTXdYWTVsQXdlc1k5cElhRXJrY2NXMHF6RU9VY1lQK1dLbmVYZz09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc21pdGh5L2ZldGNoLWh0dHAtaGFuZGxlciI6ICJeNS4zLjE3IiwKKyAgICAgICAgIkBzbWl0aHkvbm9kZS1odHRwLWhhbmRsZXIiOiAiXjQuNi4wIiwKKyAgICAgICAgIkBzbWl0aHkvdHlwZXMiOiAiXjQuMTQuMSIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYmFzZTY0IjogIl40LjMuMiIsCisgICAgICAgICJAc21pdGh5L3V0aWwtYnVmZmVyLWZyb20iOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1oZXgtZW5jb2RpbmciOiAiXjQuMi4yIiwKKyAgICAgICAgIkBzbWl0aHkvdXRpbC11dGY4IjogIl40LjIuMiIsCisgICAgICAgICJ0c2xpYiI6ICJeMi42LjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac21pdGh5L3V0aWwtdXJpLWVzY2FwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac21pdGh5L3V0aWwtdXJpLWVzY2FwZS8tL3V0aWwtdXJpLWVzY2FwZS00LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmtBU3RCbHZxK2xUWEh5QVpZZkpSYi9EZlMzcnNpbkxpd2IrNjlTc3RDOVZiMHM5dk5Xa1J3cG5qOTE4UGZpODVtemk0MnNPcWRWNzJPTHhXQUlTbnc9PSIsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dGlsLXV0ZjgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNtaXRoeS91dGlsLXV0ZjgvLS91dGlsLXV0ZjgtNC4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTc1TWVZcGpkV1JlOE01RTNBVzBPNEN4M1VhZHdlUytjd2RYandZR0JXNWgvZ3h4bmJlWjg3N3NMUFgvWkpBOUdWVGxML3FHMGRYUDI5SldGQ0QxQXl3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzbWl0aHkvdXRpbC1idWZmZXItZnJvbSI6ICJeNC4yLjIiLAorICAgICAgICAidHNsaWIiOiAiXjIuNi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHNtaXRoeS91dWlkIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzbWl0aHkvdXVpZC8tL3V1aWQtMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU8vSUVkY0NVS2t1Yno2MHRGYkdBN2NlSVRUQUpzdHkrbEJqTm9vclA0WjZYUnFhRmIvT2pRalpPRG9waEVjdXE2OG5LbTYvMHIrNi9sTFErWFZwazhnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjYuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0Bzby1yaWMvY29sb3JzcGFjZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac28tcmljL2NvbG9yc3BhY2UvLS9jb2xvcnNwYWNlLTEuMS42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vS2lLa3BITk9CZ2tGSnd1OXNoNDhMa0hTTVlHeXVUY1NGSy9xTUJkbk9BbHJSSnpSU1hBT0ZCNXF3emFWUXVEbDh3QXZIVk1rYUFTUURSZVRhaHh1dz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY29sb3IiOiAiXjUuMC4yIiwKKyAgICAgICAgInRleHQtaGV4IjogIjEuMC54IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9Ac3RhbmRhcmQtc2NoZW1hL3NwZWMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHN0YW5kYXJkLXNjaGVtYS9zcGVjLy0vc3BlYy0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDJhRnk1akFMaG5pRzVIZ3FyRDZqWExpL3JVV3JLdnFOL3FKeDZ5b0pzZ0toYmxWZCtpcXFVNFJDWGF2bS9qUGl0eURvNVRDdktNbnBqS25Pcml5MHc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0ZXBwZWlzL211bHRpbWFwcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdGVwcGVpcy9tdWx0aW1hcHMvLS9tdWx0aW1hcHMtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUlEN2Zvc2JjNTBUYlQwTUswRUcxMk8rZ0FQM1czQWEvUHo0RGFUdFF0RXZsYzlPZGFxaTBkZSt4dVo3TGkyR3RLNEh6RVg3SXVSV1MvSm1aTGtzUjNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0c2NvbmZpZy9ub2RlMTAiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMTIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0c2NvbmZpZy9ub2RlMTAvLS9ub2RlMTAtMS4wLjEyLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VQ1lCYWVGdk0xMWFVMnkzWVBaLy9PNVJoait4S3l6eTdtdmNJb0FqQVNiaWd5OG1ITXJ5UDVjSzdkZ2psejJoV3hoMWc1cEx3MDg0RTBhL3dsVVNGUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHNjb25maWcvbm9kZTEyIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjExIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHNjb25maWcvbm9kZTEyLy0vbm9kZTEyLTEuMC4xMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY3FlZnVSc2gxMnBXeUdzSW9CS0pBOWx1RnUzbVJ4Q0ErT1JadkE0a3RMU3pJdUNVdFdWeEdJdVhpZ0V3TzUveXdXRk1aMlFFR0tXdmtaRzF6RE1UYWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHRzY29uZmlnL25vZGUxNCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHNjb25maWcvbm9kZTE0Ly0vbm9kZTE0LTEuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15c1Q4bWhkaXhXSzZIdzNpMVYyQWVScVo1V2ZYZzFHNDNtcW9ZbE0ybmM2Mzg4RnE1amNYeXI1bVJzcVZpTHgvR0pZZG9MMGJmWEQ4bm1GK1puL0lvdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHNjb25maWcvbm9kZTE2IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0c2NvbmZpZy9ub2RlMTYvLS9ub2RlMTYtMS4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZ4aFV5NEo4bHlleWluSDdBemwxcGRkNDNHSmhaSC90UDJ3ZU44VG50UWJsT1krQTBYYlQ4REprMS9vQ1B1T095Zy9KYTc1N3JHMENnSGNXQzhPZk1BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0c2NvbmZpZy9ub2RlMTgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxOC4yLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0c2NvbmZpZy9ub2RlMTgvLS9ub2RlMTgtMTguMi42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lQVdRekFqUGoxOHRLbkR6bVdzdHo0T3lXZXdMVU5CbTl0ZG9OOUxheXpvYm9Sa3RZeDNFbmsxWlhQbVRoajU1TDdjNFZXWXEvQnpxMEE1MXpuWmZodz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlieXMvd2FzbS11dGlsIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlieXMvd2FzbS11dGlsLy0vd2FzbS11dGlsLTAuMTAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOXRUYVBKTFNpZWpaS3grQm1vZzR1U3VidGVxVHZGclZyVVJ3a21IaXhCbzBHNHNlRDB6VXhwOThFMUR6VUJKeExRM05Qd1hyR0tEaVZqd3gvRHBQc2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2JhYmVsX19jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiNy4yMC41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX2NvcmUvLS9iYWJlbF9fY29yZS03LjIwLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFvUXByWnZ6NXdRRkp3TURxZXNlUlhXdjNycU12aGdwYlhGZlZ5V2hieDlYNDdQT0lBNmkvK2RYZWZFbVpLb0FnT2FUZGFJZ05TTXFNSVU2MXlSeXpBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjAuNyIsCisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjAuNyIsCisgICAgICAgICJAdHlwZXMvYmFiZWxfX2dlbmVyYXRvciI6ICIqIiwKKyAgICAgICAgIkB0eXBlcy9iYWJlbF9fdGVtcGxhdGUiOiAiKiIsCisgICAgICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fZ2VuZXJhdG9yIjogeworICAgICAgInZlcnNpb24iOiAiNy4yNy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX2dlbmVyYXRvci8tL2JhYmVsX19nZW5lcmF0b3ItNy4yNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11ZkZkMlhpOTJPQVZQWXN5K1A0bjcvVTdlNjhmZXgwK0VlOGdTRzlLWDdlbzA4NENXaVE0c2R4a3R2ZGwwYk9QdXBYdFZKUFkxOXprNkV3V3FVUThsZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX3RlbXBsYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNy40LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fdGVtcGxhdGUvLS9iYWJlbF9fdGVtcGxhdGUtNy40LjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWgvTlVhU3lHNUV5eEJJcDhZUnhvNFJNZTIvcVFndnlvd1J3Vk16aFloQkNPTmJXOFBVc2c0bGtGTXJoZ1poVWU1ejNMM01pTER1dnlKL0NhUGEyQThBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMS4wIiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjI4LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fdHJhdmVyc2UvLS9iYWJlbF9fdHJhdmVyc2UtNy4yOC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04UHZjWGY3MGdURFpCZ3Q5cHR4SjhlbEJlQmpjTE9BY090b08vbVBKanRqaTErQ2RHYkhnbTc3b20xR3JzUHhzaUUrdVhJcE5TSzY0VVlhSXdRWGQ0UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjguMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2VzcmVjdXJzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZXNyZWN1cnNlLy0vZXNyZWN1cnNlLTQuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14SkJBYkRpZm81aHBmZkRCdUhsMFk4eXdzd2JpQXAvV2k3WS9HdEFnU2xaeUlBQnBweXVyeFZ1ZU9QRThMVVFPeGRsZ2k2WnFjZTd1b0VwcU5UZWlVdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvZXN0cmVlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9lc3RyZWUvLS9lc3RyZWUtMS4wLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRXSHpIYTJXcUVYSS9PMUU5T2pyb2NNVEtKbDJtU3JFb2xoMUlvbXJ2NlUrSnVOd2FIWHNYeDliTHU1Z0c3QlVXRklOMHNrSVFKUS9MMXJJZXg0WDZ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9oYXN0IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9oYXN0Ly0vaGFzdC0zLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1BzK2JiUXc1YUNqK3g2bGFOR1dMSDN3dmlIdG9Ddi9QMytvdEJoYk9oSmdHOHF0cGRBTWxUQ3hMdHNUV0E3TEgxT2gvYkZDSHNCbjBUUFM1bTMwRVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL3VuaXN0IjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS8tL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS0yLjAuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMlFGL3QvYXVXbTBsc3k4WHRLVlBHMTl2M3NTT1FsSmUvWUhaZ2ZqYi9LQkJIT0dTVitKMnEvUzY3MXJjcTl1VEJyTEFYbVpwcUppYVFiTVQrek5VMXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQvLS9pc3RhbmJ1bC1saWItcmVwb3J0LTMuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OUW43QUhRbmsvUlNMT3hyQmJHeUpNL2FWUStwamo1SENnYXNGeGMwSy9LaG9BVGZRLzQ3QXlVbDE1STJ5QlVwaWhqbWFzK2ErVkpCT3FlY3JGSCt1QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzLy0vaXN0YW5idWwtcmVwb3J0cy0zLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGsyQjFOV2FsRjl0b0NSdTZnakJ6UjY5c3lGalA0T2Q4V1JBWCswbW1mOWxBakNSaWNMT1djK1pyeFpIeC8wWFJqb3Rna0Y5dDZpYU1KK2FYY09kWlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQiOiAiKiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2plc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9qZXN0Ly0vamVzdC0zMC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhUWXVnemh1d3FXandzMENWejhRcE0zNitUK0R6NW1URUJLaE5zL2VzR0xuQ0lsR2RSeStEcTc4TlJqZDdsczdyOEJDOFpSTU9yS2xrTzFoVTBKT3dBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImV4cGVjdCI6ICJeMzAuMC4wIiwKKyAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjMwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2pzb24tc2NoZW1hIjogeworICAgICAgInZlcnNpb24iOiAiNy4wLjE1IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvanNvbi1zY2hlbWEvLS9qc29uLXNjaGVtYS03LjAuMTUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTUrZlA4UDhNRk5DK0F5WkNEeHJCMnBrWkZQR3pxUVdVenBTZXV1Vkx2bThWTWNvck5ZYXZCcW9GY3hLOGJRejRRc2JuNG9VRUVlbTR3RExmY3lzR0hBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlIjogeworICAgICAgInZlcnNpb24iOiAiMjUuNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvbm9kZS8tL25vZGUtMjUuNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rcUlZUktkTllKd1kzdlJDWk1kSmJQTEpBdEdqUUJ1ZHpaemR6d1FZa0VQUWQrUEpHaXhVTDVRZnZDTERhVUxvTHYrUmhUM0xEa3dFZkthQWtnU21OUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ1bmRpY2ktdHlwZXMiOiAifjcuMTkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL25vZGUvbm9kZV9tb2R1bGVzL3VuZGljaS10eXBlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMTkuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5kaWNpLXR5cGVzLy0vdW5kaWNpLXR5cGVzLTcuMTkuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVlWblY1T0VtMkFXOGNKTUNwZFYyMENEeWFOM2cwQWpEbE9HZjFPVzRpYURFeDhNd2R0Q2hVcDR6dTRIMFZQM25EUkYvOFJLV0grSVBwOXVXMFlHWmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjQuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEvLS9ub3JtYWxpemUtcGFja2FnZS1kYXRhLTIuNC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zN2krT2FXVGg5cWVLNExTSFBzeVJDN05haG5Hb3ROdVp2akxTZ2NQemJscEhCM3JyQ0p4QU9nSTVnQ2RLbTdjb29uc2FYMU9mMElMaVRjblpqYmZ4QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvcmVhZGFibGUtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjIzIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTQuMC4yMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd3dYcnRRdmJNSHhDYkJnakhhTUdFbUltRlRReHhwZk1PUi9ab1FuWHhCMXdvcWtVYmRMR0ZEZ2F1bzAwUHk5SXVkaWFxU2VpQml1bFNWOWk2WElQaWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3N0YWNrLXV0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zdGFjay11dGlscy8tL3N0YWNrLXV0aWxzLTIuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05YUViWVozVGJZTXpuUGRjZHIzU21JckxYd0MvQUtaWFFlQ2Y5UGdhbzVDS2I4Q3lIdUVYNWp6V1BUa3ZyZWd2aFJKSGNwUk82QkZvR1c5eWNhT2tZdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvdHJpcGxlLWJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3RyaXBsZS1iZWFtLy0vdHJpcGxlLWJlYW0tMS4zLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZXYVllc1RoUk1DbDE5aXJ5TVlQNy94Mk9WZ0N0YklWZmxER0ZwV25iOWlyWEkzVWpZRTRBem1ZdWlVS1kxQUpzdEdpam9ZK01nVXN6TWdSeElZVFl3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvdW5pc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3VuaXN0Ly0vdW5pc3QtMy4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtvL2dJRkpSdjE3N1hnWnNaY0J3bnFKTjV4L0dpZW44cU5PbjBENWJRVS96QXpWZjladDNCbGNVaUxxaFY5eTRBUmswR2JUM3RuVWlQTmduVFh6Yy9RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMzUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMzUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFVSGtlQ3lRRnhNWGc3OXdRZlR0Zm5kRUMrTjlaWmc3NkhKZnRESnArcUgydFY3R2o0T0ppN2wrUGlXd0orcFd0VzhHd1NtcXNEai9veW1oclRXWGpnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIxLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMS4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUk0cTlRVTlNUXY0b0VPejR0QUhKdE56MWN3dUx4bjJGM3hjYzJpVjVXZHFMUHBVbmozMGFVdXh0MW1BeFlURytvZThDWk1WLys2clU0UzRnUkR6cXRRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luIjogeworICAgICAgInZlcnNpb24iOiAiOC41OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbi8tL2VzbGludC1wbHVnaW4tOC41OS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IeUFadHBka2dad3BxOFN6M0ZTVXZDUjRjK1NjYnVXYTlBa3NLMkp3ZXViN3c0TTN5VHo0TzExQXFWSnpMWWp5L0I5WldQeWM4MUkrbU9kSlUvYkRRdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogIl40LjEyLjIiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlLXV0aWxzIjogIjguNTkuMCIsCisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMiOiAiOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiOC41OS4wIiwKKyAgICAgICAgImlnbm9yZSI6ICJeNy4wLjUiLAorICAgICAgICAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsCisgICAgICAgICJ0cy1hcGktdXRpbHMiOiAiXjIuNS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyIjogIl44LjU5LjAiLAorICAgICAgICAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIHx8IF4xMC4wLjAiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4vbm9kZV9tb2R1bGVzL2lnbm9yZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pZ25vcmUvLS9pZ25vcmUtNy4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhzNTl4Qk5mVUl1bk1GZ1dBYkdYNWNxNjg5M0liV2c0S25yamJZd1gzdHgwenRvclZnVERBNkIyc3hmOGVqSEo0d3o4QnFHVU1ZbG56TkJlcjVOdkdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjU5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIvLS9wYXJzZXItOC41OS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1USTFYR3dLYkRwbzl0Ulc4VURJWENPZUxrNTVxZTlaRkdzOE1US1U2L00wOEhXVHc1MkREL0lZaGZRdE9FaEVkUGhMTVQyNkthL3g3cDcwbmQzZHpEZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlciI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogIjguNTkuMCIsCisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiOC41OS4wIiwKKyAgICAgICAgImRlYnVnIjogIl40LjQuMyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIHx8IF4xMC4wLjAiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3Byb2plY3Qtc2VydmljZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguNTkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3Byb2plY3Qtc2VydmljZS8tL3Byb2plY3Qtc2VydmljZS04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUx3NUlUclI1czVUYkMxOVlTdmxyNjNaZkxhSm9VNnZ0S1RIeUIwR1FPcFgwVzdkNS9JcjZ2VWFoV2kvOFNwcy9uT3VrWlEwSUIzU21seFpuamFLVm53PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90c2NvbmZpZy11dGlscyI6ICJeOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICJeOC41OS4wIiwKKyAgICAgICAgImRlYnVnIjogIl40LjQuMyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjU5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC9zY29wZS1tYW5hZ2VyLy0vc2NvcGUtbWFuYWdlci04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVV6UjE2VXQ4SXBBM01jNERiZ0FTaGxQUGtWbTh4WE1XYWZYeEIwQm9jYVZSSHM4Wkdha0F4R1Jza0Y3RklkM3NkazlsZ0dENzNHU0ZhV21XRkRFNGRnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Zpc2l0b3Ita2V5cyI6ICI4LjU5LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3RzY29uZmlnLXV0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiOC41OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdHNjb25maWctdXRpbHMvLS90c2NvbmZpZy11dGlscy04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTkxU2JsM3M0S2IzU3libGlJWTZtdUZCbUhWditwWVhmeWJDNE9vbHAzZHZrOEJ2SUUzd09QYys0MDNDV0lUN21KTmtmUVJHdGRxZ2h6czIrWjkxVHFnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInR5cGVzY3JpcHQiOiAiPj00LjguNCA8Ni4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC90eXBlLXV0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiOC41OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZS11dGlscy8tL3R5cGUtdXRpbHMtOC41OS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zVFJpWmFRU2x0R3FHZU5ySnp6cjErOFljRW9iS0g5ckhucUlwLzFwc2ZLRm1oUlFETk1HUDVoQnVmYW5ZVEd6bndTaHpWTHMzTXorZ0RON0hrV2ZYZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZSI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogIjguNTkuMCIsCisgICAgICAgICJkZWJ1ZyI6ICJeNC40LjMiLAorICAgICAgICAidHMtYXBpLXV0aWxzIjogIl4yLjUuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIHx8IF4xMC4wLjAiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiOC41OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMvLS90eXBlcy04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5MemRzVDFnZE9nRnh4eHdybE5WVUJ6U05CRUVISjg2YmJsbWs0UUFTNnN0ZmlnN3JjSnpXS3FDeXhGeTNZUlJIWERXRWtiMk5yYWxBMW5PWWtrbS9BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogeworICAgICAgInZlcnNpb24iOiAiOC41OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUvLS90eXBlc2NyaXB0LWVzdHJlZS04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU85UmU5UDFCbUJMRkp5aWtSYlFwTGt1L1FBMy9BdWVaTk85V2VQTEJ3UXJ2a2l4VG1EZTh1NzZCNkNZVUFJVFJsL3JIYXdnZ0VxVUduNVFJa1ZSTE13PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC9wcm9qZWN0LXNlcnZpY2UiOiAiOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90c2NvbmZpZy11dGlscyI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogIjguNTkuMCIsCisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdmlzaXRvci1rZXlzIjogIjguNTkuMCIsCisgICAgICAgICJkZWJ1ZyI6ICJeNC40LjMiLAorICAgICAgICAibWluaW1hdGNoIjogIl4xMC4yLjIiLAorICAgICAgICAic2VtdmVyIjogIl43LjcuMyIsCisgICAgICAgICJ0aW55Z2xvYmJ5IjogIl4wLjIuMTUiLAorICAgICAgICAidHMtYXBpLXV0aWxzIjogIl4yLjUuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogeworICAgICAgInZlcnNpb24iOiAiOC41OS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMvLS91dGlscy04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUkxUi9LN1YwN1hzTUoxMk9heGcvTzlHZnJ5c0dUbUNSaHZaSkJ2MFJFME5jVUxNempxVnBSNWtSUlFqSHN6M0ovYkVsVTdId0NPN3prcUwrTVNVeitnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6ICJeNC45LjEiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiOC41OS4wIiwKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjguNTkuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIHx8IF4xMC4wLjAiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3Zpc2l0b3Ita2V5cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguNTkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3Zpc2l0b3Ita2V5cy8tL3Zpc2l0b3Ita2V5cy04LjU5LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS91ZWpadDRkU2VyZTFieDEyV0xsUGZ2OEdrdHpjYUR0dUo3czQyL0hFWjV6R2o5b3hSYUQ0Ymo3cXdTdW5Ya2YrcGJBaEZ0MnpqcEhZVWlUNWxIZjBRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI4LjU5LjAiLAorICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvLS9zdHJ1Y3R1cmVkLWNsb25lLTEuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XbW9OOHFhSUFvN1dUWVdiQVp1RzhQWUVobjVma3o3ZFpycVRCWjdkdHQvL2xMMkd3bXMxSWNuUTV5SHFqRGZYOEZ0NWo0WXpETTIzZjg3ekJmRGU5Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWFuZHJvaWQtYXJtLWVhYmkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctYW5kcm9pZC1hcm0tZWFiaS8tL3Jlc29sdmVyLWJpbmRpbmctYW5kcm9pZC1hcm0tZWFiaS0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBwTFJVZ0hWYUdSV1V4MFIwVXQwNk1qbzlnQmFCa2czdi84QXh1c0dMaHNJb3RiQkx1Ums1MXJBenFMQzhncTZOeXlBb2pFWGdsTmp6ZjZSOTQ4RE53PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1hbmRyb2lkLWFybTY0IjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWFuZHJvaWQtYXJtNjQvLS9yZXNvbHZlci1iaW5kaW5nLWFuZHJvaWQtYXJtNjQtMS4xMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sQ3hrVnRiNHdwMXYrRW9OK0hqSUc5Y0lJelBrWDVPdE0wM3BRWWtHK1U1Ty93TDUzTEM0UWJJZWF6Z2lLcWx1R2VWRWVCbFphaEhhbENhQnZVMWEyZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiYW5kcm9pZCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1kYXJ3aW4tYXJtNjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctZGFyd2luLWFybTY0Ly0vcmVzb2x2ZXItYmluZGluZy1kYXJ3aW4tYXJtNjQtMS4xMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nUFZBMVVqUnUxWS9Jc0IvZFFFc3AyVjFwbTQ0T2Y2K0xXdmJMYzlTRGsxYzJLaGhEUkRCVWtRQ1lWV2U2ZjI2dUpiM2ZPSzhzYVdNZ3RYOElyTWszZz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm02NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWRhcndpbi14NjQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctZGFyd2luLXg2NC8tL3Jlc29sdmVyLWJpbmRpbmctZGFyd2luLXg2NC0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNGelA3cldLZDNsWmFDc0R6ZTA3UVgxU0MyNGxPOG1QdHk5dmRQK1lWYTNNR2RWZ1BtRmM1OTMxN2IyaW9YdGdDTUtHaUNMeEo0SFFzNjJvejZHZlJRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWZyZWVic2QteDY0IjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWZyZWVic2QteDY0Ly0vcmVzb2x2ZXItYmluZGluZy1mcmVlYnNkLXg2NC0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZxdEdnYWszelg0RENCNlBGcHNINStLbXQvOENJaTRCcnk0cmIxaG82QXYyUUhUUkVNKzQ3eTI4MlVxaXUzWlJGNUlRaW9KUTVxV1JWNmpkdUEraUd3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZnJlZWJzZCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm0tZ251ZWFiaWhmIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybS1nbnVlYWJpaGYvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybS1nbnVlYWJpaGYtMS4xMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11OTJtdmxjWXRwOU1SS21QK1p2TW10UE4zNCsvM2xNSGx5TWo3d1hKRGVYeHVNMFZnenowK1BQSk5zcm8xbTNJWlBZQ2hJa245NDR3VzhUWWdHS0ZIdz09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJhcm0iCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybS1tdXNsZWFiaWhmIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybS1tdXNsZWFiaWhmLy0vcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm0tbXVzbGVhYmloZi0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNJTmFvWTJ6N0xWQ3JmSGtJY212ajdvc1RPdG02VlZUMTZiNW9RZFM0YmVpYlgyU1lCd2dZTG1xaEJqQTF0NTFDYXJTYUJ1WDVZTnNXTGpzcWZXNUN3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybSIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtNjQtZ251IjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LWdudS8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtNjQtZ251LTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMzRndzdQakRHQjlKZ2VQSkVtaEVxQmhXdkNpaVdDdVhzTDloWXBoREY3Y3JXN1VnSTA1Z3lCQWk2TUY1OHVHY01PaU9xU0oyeWJFZUN2SGNxMEJDbVE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtNjQtbXVzbC8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtNjQtbXVzbC0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJ5TUl4NlVmNTNoaE90SkRJYW1TYlRza0E5OXNQSFM5Nnd4VkUvYkp0ZVBKSnRwZEtHWE8xd1k5MG9SZFh1WU9HT1R1cWpUOEFDY2NNYzRLNlFtVDN3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImFybTY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1wcGM2NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcHBjNjQtZ251Ly0vcmVzb2x2ZXItYmluZGluZy1saW51eC1wcGM2NC1nbnUtMS4xMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EOFZhZTc0QTQvYSttWkgwRmJPa0ZKTDlEU0syUjZURlBDOU0rakNXWWlhL3EyZWluQ3ViWDEwcGVjcERpVG1rSlZVSCt5OEszQlpDbHljRDhuQ1NoQT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJwcGM2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcmlzY3Y2NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcmlzY3Y2NC1nbnUvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtZ251LTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZnJ4TDRPcnpPV1ZWc09jOTYrVjNhcVRJUWwxTzJUamdFeFY0RUtnUlkwOUFKOWxlWnBFZzhBazlwaGFkYnVYMEJBNGs4VTVxdHZNU1FRR0dtYUpxY1E9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicmlzY3Y2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcmlzY3Y2NC1tdXNsIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbC8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcmlzY3Y2NC1tdXNsLTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbUo1dnVEYUlaK2wvYWN2MDFzSG9YZnBueXJOS09rLzNhRG9FZExPL1h0bjlIdVpsREQ2akt4SGxrTjhaaFd5TEpzUkJ4ZnY5R1lNMnV0UTFTQ2hLZXc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAicmlzY3Y2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtczM5MHgtZ251IjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXMzOTB4LWdudS8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgtczM5MHgtZ251LTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0VMbzhlYkJWdGI5c0E3ck1lMUNwaDRRSHJlQnloYVoyUUVBRGQ5TnpJUXNZTlFwdDlVa005aXFyMmxoR3I1YWZoODg1ZC9jQjVRZVRYU2JaSFRZUGc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiczM5MHgiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgImxpbnV4IgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXg2NC1nbnUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgteDY0LWdudS8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgteDY0LWdudS0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUMzWkFIdWdLZ292VjVZdkFNc3hocTBndFh1d0VTVUtjNU1oRXRqQnBMb0hQTFlNK2l1d1NqM2xmbEZ3SzNEUG02ODY2MHJaN0c4Qk1jd1NybzdoRDV3PT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAibGludXgiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgteDY0LW11c2wiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgteDY0LW11c2wvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXg2NC1tdXNsLTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItclYwWVNveWhLMm5aNHZFc3dUL1F3cXpxUVh3NUk2Q2pvYVlNT1gwVHFCbFdob2pVZjhQOTRtdkk3bnVKVGVhQ2trZHMzUUU0K3pTOEtvK0dkWHVadEE9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAieDY0IgorICAgICAgXSwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAib3MiOiBbCisgICAgICAgICJsaW51eCIKKyAgICAgIF0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy13YXNtMzItd2FzaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy13YXNtMzItd2FzaS8tL3Jlc29sdmVyLWJpbmRpbmctd2FzbTMyLXdhc2ktMS4xMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01dTRSa2Z4Sm0rTmc3SVdna3ppM3FyRk92THZRWW5QQm1qbVpROCtzelRLL2IzMWZRQ25sZU5sMUdnRXQ3bklzWlJJZjVQTGhQd1QwV00rcTQ1eC9VUT09IiwKKyAgICAgICJjcHUiOiBbCisgICAgICAgICJ3YXNtMzIiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAbmFwaS1ycy93YXNtLXJ1bnRpbWUiOiAiXjAuMi4xMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctd2FzbTMyLXdhc2kvbm9kZV9tb2R1bGVzL0BuYXBpLXJzL3dhc20tcnVudGltZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5hcGktcnMvd2FzbS1ydW50aW1lLy0vd2FzbS1ydW50aW1lLTAuMi4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWlZXVWNmd1k0RS95UGl0UUpsNDgxRmpGbzNLMjJENnFGMER1Rkg2WS9uYm5FMTFHWTV1Z3VEeFpNR1hQUThXUTAxMjhNWFFEN1RuZkh5SzRvV29JSlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlbW5hcGkvY29yZSI6ICJeMS40LjMiLAorICAgICAgICAiQGVtbmFwaS9ydW50aW1lIjogIl4xLjQuMyIsCisgICAgICAgICJAdHlieXMvd2FzbS11dGlsIjogIl4wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctd2luMzItYXJtNjQtbXN2YyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi1hcm02NC1tc3ZjLy0vcmVzb2x2ZXItYmluZGluZy13aW4zMi1hcm02NC1tc3ZjLTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItblJjejVJbDRsbjBrTWhmTDhTM2hMa3hJODVCWHMzbzhFWW9hdHRzSk5kc1g0WVVVODlpT2tWbjdnMFZIU1J4RnVWTWRNNFExakVwSUlkMUloaW0vVXc9PSIsCisgICAgICAiY3B1IjogWworICAgICAgICAiYXJtNjQiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIndpbjMyIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLWlhMzItbXN2YyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi1pYTMyLW1zdmMvLS9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLWlhMzItbXN2Yy0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURDRUk2dDVpMU5tQVpwNnBGb25wRDVtN2k2YUZycG9mY3A0TEEyaThJSXE2MEp5bzI4aGFtS0J4TnJaY3lPd1ZPWmtnc1JwOU8yc1hXQldQOE1udklRPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgImlhMzIiCisgICAgICBdLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJvcyI6IFsKKyAgICAgICAgIndpbjMyIgorICAgICAgXQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLXg2NC1tc3ZjIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLXg2NC1tc3ZjLy0vcmVzb2x2ZXItYmluZGluZy13aW4zMi14NjQtbXN2Yy0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxyVzIwMGhaZGJmUnR6dGJ5Z3lhcS82alA2QUtFOHFRTjJLdlBjSit4N3dpRDAzOFl0bll0WjgySU1OSjY5R0ppYlY3YndMM3k5RmdLKzV3L3BZdDZnPT0iLAorICAgICAgImNwdSI6IFsKKyAgICAgICAgIng2NCIKKyAgICAgIF0sCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAid2luMzIiCisgICAgICBdCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fib3J0LWNvbnRyb2xsZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWJvcnQtY29udHJvbGxlci8tL2Fib3J0LWNvbnRyb2xsZXItMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWg4bFE4dGFjWlluUjN2TlFUZ2liait0T0RISTUvK2wwNkF1MlBjcml2L0dtZXQwZWFqNFR3V0g0MXNPOXduSERpUXNFajE5cTBkcnpkV2RlQUh0d2VnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJldmVudC10YXJnZXQtc2hpbSI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni41IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hY2NlcHRzIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FjY2VwdHMvLS9hY2NlcHRzLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01Y3ZnNkN0S3dmZ2RtVnFZMVdJaVhLYzNRMWJrUnFHTGkrMlcvNmFvKzZZN2d1L1JDd1J1QWhHRXpoNUI0S2xzelN1VExnWll1cUZxbzViSW1qTktuZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWltZS10eXBlcyI6ICJeMy4wLjAiLAorICAgICAgICAibmVnb3RpYXRvciI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYWNvcm4iOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjE2LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLy0vYWNvcm4tOC4xNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VVkp5RTlNdHRPc0JRSURLdzFza2I5bkF3UXVSNXd1R0QzKzgySzZKZ0psbS9ZK0tJOTJvTnNNTkdaQ1lkRHNWdFJIU2FrMHBjVjVEbm81KzRqaDlzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJhY29ybiI6ICJiaW4vYWNvcm4iCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC40LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fjb3JuLWpzeCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi1qc3gvLS9hY29ybi1qc3gtNS4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJxOXMrSk5oZjBJQ2hqdERYeGxsSjdnNDFvWms1U2xYdHAwTEh3eUE1Y2Vqd243dkttS3A0cFByaTZZRWVQdjJQVTY1c0FzZWdiWHRJaW5tREZEWGdRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhY29ybiI6ICJeNi4wLjAgfHwgXjcuMC4wIHx8IF44LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYWNvcm4td2FsayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMy41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi13YWxrLy0vYWNvcm4td2Fsay04LjMuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSEVITmZiYXJzOXY0cGdwVzZTTzFLU1BrZm9TMHhWT00vOVV6a0psdGpsc0habUphc3hnOGFYa3VaYTdTTWY4dktHSUJocFVzUGx1UVNxaEpGQ3FlYnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYWNvcm4iOiAiXjguMTEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYWp2IjogeworICAgICAgInZlcnNpb24iOiAiNi4xNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hanYvLS9hanYtNi4xNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JV3Jvc20veXJuNDNlaUtxa2ZrSGlzN1Fpb0RsZWFYUUhkRFZQS2cwRlN3d2QvRHV2eVg3OVRabkZPbllwQjdkY3NGQU1tdEZ6dFp1WFBEdlNlUGtGdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4xIiwKKyAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIl4yLjAuMCIsCisgICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMC40LjEiLAorICAgICAgICAidXJpLWpzIjogIl40LjIuMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZXBvYmVyZXpraW4iCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi1mb3JtYXRzLy0vYWp2LWZvcm1hdHMtMy4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThpVXFsNTBFVVIrdVVjZFJRM0hEcWE2RVZ5bzNkb2NMOGc1V0ozRk5jV211NjJJYmtHVXVlL3BFeUxCVzhWR0tLdWNUUGdxZWtzNGZJVTFEQTR5b3dRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhanYiOiAiXjguMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYWp2IjogIl44LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJhanYiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fqdi1mb3JtYXRzL25vZGVfbW9kdWxlcy9hanYiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjE4LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fqdi8tL2Fqdi04LjE4LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBsWFBlRVdNWE1aN3NQWU9IcW1EeUNKemNmTnJVcjNmR05LdGV6WDE0eWtYT0VJdnlLODFkK3F5ZHg4OUtZNU83MUZLTVBhUTJ2QmZCRkk1TkhSNjNBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmYXN0LWRlZXAtZXF1YWwiOiAiXjMuMS4zIiwKKyAgICAgICAgImZhc3QtdXJpIjogIl4zLjAuMSIsCisgICAgICAgICJqc29uLXNjaGVtYS10cmF2ZXJzZSI6ICJeMS4wLjAiLAorICAgICAgICAicmVxdWlyZS1mcm9tLXN0cmluZyI6ICJeMi4wLjIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Vwb2JlcmV6a2luIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hanYtZm9ybWF0cy9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTk04L1A5bjNYalhoSVpuMWxMaGtGYUFDVE9VUlFYaldoVjRCQS9Sbk92OHh2Z3F0cXBBWDlJTzRtUlF4U3gxUmxvNHRxemVxYjBzT2xydWFPeTNkdWc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fuc2ktZXNjYXBlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLWVzY2FwZXMvLS9hbnNpLWVzY2FwZXMtNC4zLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdLWGo1QUxyS1dRTHNZRzlqbFRSbVIveEtsdXhIVitaOVFFd05JZ0NmTTEvdXdQTUN1elZWbmg1bXdUZCtPdUJaY3dTSU1icXNzTldSbTFsRTUxUWFRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInR5cGUtZmVzdCI6ICJeMC4yMS4zIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYW5zaS1lc2NhcGVzL25vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIxLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC0wLjIxLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQwcnpCcTg3bTNmVmNkdUhEVUZoS215eVgrOWVvNldRalp2ZjUxRWEvTTBRNytUMzc0SnAxYVVpeVVsMEdLeHA4TS9PRVRWSFNEdm1reVBndlgrWDJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICIoTUlUIE9SIENDMC0xLjApIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNC4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUlMbHY0ay8zZjZ2ZlE0T29QMkFHdmlyT2t0bFE5OFpFTDFrOUZhUWp4YTNMMWFiQmdidVREQWRQT3B2YkduY0MwQlRWUXJsK09NOHhaR0s2dFdYdDdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hbnRsci1uZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW50bHItbmcvLS9hbnRsci1uZy0xLjAuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZ3M05kc1FQM2RhYnVackRoS0FNZXdyQnNZNUtTQWNNcnZoV0JWRG1IWWVndjVENTFweXB6Q1lLMVBwamFSVktjVmVQLzV4S2ZxSlkzMVR2WEFDT2RBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFudGxyNG5nIjogIjMuMC4xNiIsCisgICAgICAgICJjb21tYW5kZXIiOiAiMTMuMS4wIiwKKyAgICAgICAgInN0cmluZ3RlbXBsYXRlNHRzIjogIjEuMC45IiwKKyAgICAgICAgInVuaWNvZGUtcHJvcGVydGllcyI6ICIxLjQuMSIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiYW50bHItbmciOiAiZGlzdC9jbGkvcnVubmVyLmpzIiwKKyAgICAgICAgImdydW4iOiAiZGlzdC9jbGkvVGVzdFJpZy5qcyIsCisgICAgICAgICJpbnRlcnByZXRlciI6ICJkaXN0L2NsaS9JbnRlcnByZXRlci5qcyIsCisgICAgICAgICJ0ZXN0cmlnIjogImRpc3QvY2xpL1Rlc3RSaWcuanMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FudGxyLW5nL25vZGVfbW9kdWxlcy9jb21tYW5kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMy4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0xMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9yRmVDcE5KUWJoU1pqR1Z3TzlSRlYzeFBxYm5FUlM4TW1JUXpDdEQvemw2Z3BKdVYvYk1MdU45Mm9HM0Y3ZDhvREVISFJydWpTWE5VcjhmcGpudEt3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FudGxyNG5nIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjE2IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnRscjRuZy8tL2FudGxyNG5nLTMuMC4xNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRFF1SmtDN2tYM3h1bmZGNEsyS3NXVFN2b3h4c2x2K0ZRcC9XSFFaVEpTc0gyRWMzUWZGbXJ4QzNOa3kyb2s5eWdsWG42bkhNNHpVYVZEeGNONWY2a0E9PSIsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FueS1wcm9taXNlIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueS1wcm9taXNlLy0vYW55LXByb21pc2UtMS4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdVdm1LYWxXUnQxd2dqTDFSckd4b1NKVy8wUVpGSWVncGVHdlpHOWtqcDh2clJ1NTVYVEhid25xcTJHcFhtOXVMYmN1aHhtM0lxWDlPQjRNWlIxYjJBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FueW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueW1hdGNoLy0vYW55bWF0Y2gtMy4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtNUmVGVXIwQjR0K0QrT0JralIzS1lxdm9jcDJYYVN6TzU1VWNCNm1nUU1kM0tiY0UrbVdUeXZWVjdEL3pzZEViTm5WNmFjWlV1dGtpSFFYdlRyMVJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5vcm1hbGl6ZS1wYXRoIjogIl4zLjAuMCIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMC40IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSA4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hbnltYXRjaC9ub2RlX21vZHVsZXMvcGljb21hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMi4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC0yLjMuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVjcrdlFFSjA2WitjNXRTeWU4UytuSFVmSTUxeG9YSVhqSFE5OWNRdEtVa1FxcU8xa08vS0NKVWZaWHVCNDdoL1lCbERoYWgySDNoZFVHWG44aWUwb0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04LjYiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FyZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmcvLS9hcmctNC4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTU4UzlRRHFHMFh4MjdZd1BTdDlmSnhpdmpZbDQzMllDd2ZETWZaKzcxUkFxVXJaZWY3THJLUVozTEhMT3dDUzRGTE5CcGxQNTMzWng4OTVTZU9DSHZBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2FyZ3BhcnNlIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTgrOVdxZWJiRnpwWDlPUitXYTZPMjlhc0lvZ2VSTXpjR3RBSU5kcE1ISHlBZzEwZjA1YVNGVkJiY0VxR2YvUFh3MUVqQVorcTIvYkVCZzNEdnVySzNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJQeXRob24tMi4wIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hc3NlcnRpb24tZXJyb3ItZm9ybWF0dGVyIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fzc2VydGlvbi1lcnJvci1mb3JtYXR0ZXIvLS9hc3NlcnRpb24tZXJyb3ItZm9ybWF0dGVyLTMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02WXlBVkxyRXplMGtRN0NtSmZVZ3JMSGIrWTdYZ2htTDJJZTdpalZhMlk5eW5QM0xWK1ZEaXdGazYyRG4wcXRxYm1ZMEJUMHNzNnAxeHhwaUYyUFliUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJkaWZmIjogIl40LjAuMSIsCisgICAgICAgICJwYWQtcmlnaHQiOiAiXjAuMi4yIiwKKyAgICAgICAgInJlcGVhdC1zdHJpbmciOiAiXjEuNi4xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9hc3luYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hc3luYy8tL2FzeW5jLTMuMi42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1odENVRGx4eXlDTE1nYU0zeFhnMEMwTFcyeHFmdVE2cDA1cENFSXNYdXlRK2Exa29ZS1R1Qk16Uk53bXliZkxndkpETWQwcjFMVG40K0UwVGk2QzJBQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYXVkaXQtY2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXVkaXQtY2kvLS9hdWRpdC1jaS03LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUGpqRWVqbFNUNTdTL2FEYmVXTGljMGdsSjhDTmwvZWtZM2tmR0ZQTXJQa211YVlhREtjTUgwRjl4OXlTOVZwNlVSaHVlZlNDdWJsL0cwWTJyNm9QMGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNyb3NzLXNwYXduIjogIl43LjAuMyIsCisgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeNC4wLjAiLAorICAgICAgICAiZXZlbnQtc3RyZWFtIjogIjQuMC4xIiwKKyAgICAgICAgImpqdSI6ICJeMS40LjAiLAorICAgICAgICAianNvbnN0cmVhbS1uZXh0IjogIl4zLjAuMCIsCisgICAgICAgICJyZWFkbGluZS10cmFuc2Zvcm0iOiAiMS4wLjAiLAorICAgICAgICAic2VtdmVyIjogIl43LjAuMCIsCisgICAgICAgICJ0c2xpYiI6ICJeMi4wLjAiLAorICAgICAgICAieWFyZ3MiOiAiXjE3LjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiYXVkaXQtY2kiOiAiZGlzdC9iaW4uanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2JhYmVsLWplc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLWplc3QvLS9iYWJlbC1qZXN0LTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1JwYXVFVTJLUnJDb3g1WjI5NmFlVkhSNGpROThCQ251MElPMzMyRC94cEhOT3NJSC9iZ1NSazlrNkdiS0liQnc4dkZlTjZjdHV1NnRWOFdPeVZmWVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIjMwLjMuMCIsCisgICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMjAuNSIsCisgICAgICAgICJiYWJlbC1wbHVnaW4taXN0YW5idWwiOiAiXjcuMC4xIiwKKyAgICAgICAgImJhYmVsLXByZXNldC1qZXN0IjogIjMwLjMuMCIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjAgfHwgXjguMC4wLTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2JhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4taXN0YW5idWwvLS9iYWJlbC1wbHVnaW4taXN0YW5idWwtNy4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUQ4WjZRbThqQ3ZWWHRJUmtCbnFOSFgwekozN3JRY0ZKOXU4V09TNnRrWU9zUmRIQnp5cENzdGF4V2l1NVpJbHFRdHZpUlliZ25STFNvQ0V2anFjcWJBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgIndvcmtzcGFjZXMiOiBbCisgICAgICAgICJ0ZXN0L2JhYmVsLTgiCisgICAgICBdLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjAuMCIsCisgICAgICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWciOiAiXjEuMC4wIiwKKyAgICAgICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6ICJeMC4xLjMiLAorICAgICAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiAiXjYuMC4yIiwKKyAgICAgICAgInRlc3QtZXhjbHVkZSI6ICJeNi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wbHVnaW4tamVzdC1ob2lzdC8tL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0LTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItK1RSa0J5aHN3czZzZlBqVmFpdHphZGsxSTBGNXNQdk9WVUg1dHlUU3poZVBwc0dJVnJkZXVuSFN3L0MzNlFlb2NTOTVPT2s4bHVuYzRybHU1QW53c2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL2JhYmVsX19jb3JlIjogIl43LjIwLjUiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgvLS9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheC0xLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRS9WbEFFelJyc0xFYjIrZHY4eXAzYm80c2NvZjNsOW5SNGxybGQrSXk1TnlWcWdWWVVKbkRBbXVua2hQTWlzUkkzMlFjNGlSaXo0MjVkOHZNKysyZmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6ICJeNy44LjQiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50IjogIl43LjguMyIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogIl43LjEyLjEzIiwKKyAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jayI6ICJeNy4xNC41IiwKKyAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1hdHRyaWJ1dGVzIjogIl43LjI0LjciLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEiOiAiXjcuMTAuNCIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiAiXjcuOC4zIiwKKyAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWxvZ2ljYWwtYXNzaWdubWVudC1vcGVyYXRvcnMiOiAiXjcuMTAuNCIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiAiXjcuOC4zIiwKKyAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjEwLjQiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkIjogIl43LjguMyIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogIl43LjguMyIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy44LjMiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QiOiAiXjcuMTQuNSIsCisgICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiAiXjcuMTQuNSIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMCB8fCBeOC4wLjAtMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYmFiZWwtcHJlc2V0LWplc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXByZXNldC1qZXN0Ly0vYmFiZWwtcHJlc2V0LWplc3QtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02WmNVYldIQytkTXoydmZ6ZE53aTg3WjFnUXNMTksydUx1SzFRODlSMTF4ZHZlamNpdmxZWXdEbEV2MEZIWDNWd0VYcGJCUTl1dWZCL01VTnBaR2ZoUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYWJlbC1wbHVnaW4tamVzdC1ob2lzdCI6ICIzMC4zLjAiLAorICAgICAgICAiYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgiOiAiXjEuMi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xMS4wIHx8IF44LjAuMC1iZXRhLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtNC4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJMcmdFY1JUd1gybzZnR3hHT0NOeU12R1NwMzVZb2Z1WXp3OWgxSU1UUm1LcXR0QVpaVlU2N2JkYjlQcjJ2VUhBOCtqM2kydEpmak82QzYrNG15R1RBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIjE4IHx8IDIwIHx8ID49MjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYXNlNjQtanMvLS9iYXNlNjQtanMtMS41LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFLcGFZbEhuOHQ0U1ZiT0hDeStiNStLS2d2UjR2cnNEOHZidnJiaVFKcHM3ZktEVGtqa0RyeTZqaTByVUpqQzBremJOZVBMd3p4cThpeXBvNDFxZVdBPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYmFzZWxpbmUtYnJvd3Nlci1tYXBwaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMi4xMC4yMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFzZWxpbmUtYnJvd3Nlci1tYXBwaW5nLy0vYmFzZWxpbmUtYnJvd3Nlci1tYXBwaW5nLTIuMTAuMjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFBYVh4RVBmWFQrR3ZUQkpGdXk0eVhWSFdKQlhhNE9kYkllYkdOL3dYNURsc0lrVTArd3pHbmQybE96b2tTazUxZDVMVW1xamdCTFJMbHlwTFVxSW5RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJiYXNlbGluZS1icm93c2VyLW1hcHBpbmciOiAiZGlzdC9jbGkuY2pzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ib2R5LXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ib2R5LXBhcnNlci8tL2JvZHktcGFyc2VyLTIuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vUDVWa0FUS2xOd2NndnhpMHZNMHAvRDNuMkMzRVJlWVZYK0ROWXM1VGpaRm4vb1F0MmorNHNWSnRTTXIxOHBkUnI4d2pUY0JsNkxvVitGVXd6UG1OQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnl0ZXMiOiAiXjMuMS4yIiwKKyAgICAgICAgImNvbnRlbnQtdHlwZSI6ICJeMS4wLjUiLAorICAgICAgICAiZGVidWciOiAiXjQuNC4zIiwKKyAgICAgICAgImh0dHAtZXJyb3JzIjogIl4yLjAuMCIsCisgICAgICAgICJpY29udi1saXRlIjogIl4wLjcuMCIsCisgICAgICAgICJvbi1maW5pc2hlZCI6ICJeMi40LjEiLAorICAgICAgICAicXMiOiAiXjYuMTQuMSIsCisgICAgICAgICJyYXctYm9keSI6ICJeMy4wLjEiLAorICAgICAgICAidHlwZS1pcyI6ICJeMi4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9leHByZXNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ib3dzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjE0LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jvd3Nlci8tL2Jvd3Nlci0yLjE0LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXR6UGp6Q3h5Z0FLV0ZPSlAwMTFveEZIczU3SHpJaE9FcmFjSWdBZVBFNHBxQjNMaWtBTEtuU3pVeVU0TUdzOS9pQ0VVdUhsQUpUalRjNU0rdTdZRUdnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi01LjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlp6bkxndHdobitNYWN0OXRmaXd4NjRmQTllckhIL01DWEVVZkIvMGJYLzZGejZueTVFR1RYWWx0TW9jcWc0eEZBUVp0bk8zREhXV1hpOFJpdU43Y1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjQuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIxOCB8fCAyMCB8fCA+PTIyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9icm93c2VyLXN0ZG91dCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2VyLXN0ZG91dC8tL2Jyb3dzZXItc3Rkb3V0LTEuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xaEFWSTErQXYyWDdxZWxPZkFJWXdYT05vb2Q2WGxaRS9mWGFCU21XL1Q1U3pMQW1DZ3ppK2VpV0U3ZlV2YkhhZU5CUUgxM1VmdGpwWHhzZkxrTXBndz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9icm93c2Vyc2xpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjI4LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb3dzZXJzbGlzdC8tL2Jyb3dzZXJzbGlzdC00LjI4LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTQ4eFNyaVpZWWcrOHFYbmE5a3dxaklWenVReGkrS1lXcDIrNW5DWW5ZS1BUcjBMdkQ4OUpxazJPcjVvZ3h6ME5VTWZJamhoMmxJVVgvTHlYOUI0b0lnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Jyb3dzZXJzbGlzdCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL25wbS9icm93c2Vyc2xpc3QiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2FpIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYXNlbGluZS1icm93c2VyLW1hcHBpbmciOiAiXjIuMTAuMTIiLAorICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDE3ODIiLAorICAgICAgICAiZWxlY3Ryb24tdG8tY2hyb21pdW0iOiAiXjEuNS4zMjgiLAorICAgICAgICAibm9kZS1yZWxlYXNlcyI6ICJeMi4wLjM2IiwKKyAgICAgICAgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiXjEuMi4zIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJicm93c2Vyc2xpc3QiOiAiY2xpLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeNiB8fCBeNyB8fCBeOCB8fCBeOSB8fCBeMTAgfHwgXjExIHx8IF4xMiB8fCA+PTEzLjciCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2JzLWxvZ2dlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icy1sb2dnZXIvLS9icy1sb2dnZXItMC4yLjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBkOERDb3htYmdjN2h5UEtPdnh0cU5jallvT3NBQlBRZGNDVWpHcDNkNDJWUjJDWDFPUmhrMkE4N29xcXU1UjFrays3Nm5zeFp1cGtteWQrTVZ0Q29nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjIueCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvYnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ic2VyLy0vYnNlci0yLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1F4VE5FL0dBZklJcm1ITFVFM29KeXA1Rk82SFJCZmhqbnc0L3dNbUE2M1pHREpuV0JtZ1kvbHlRQnBuRFVrR21BaGJTZTM5dHgyZC9pVE9BZmdsd1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5vZGUtaW50NjQiOiAiXjAuNC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9idWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnVmZmVyLy0vYnVmZmVyLTYuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVGlDcE54dHdpWlpIRVpiY2JUSWNaakVSVklDbjl5cS9wREZrVGw5NS9BeHpEMW5hQmN0TjdZTzY4cmlNL2dMU0RZN3Nkck1ieThob2ZBRFl1dXFPQT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJhc2U2NC1qcyI6ICJeMS4zLjEiLAorICAgICAgICAiaWVlZTc1NCI6ICJeMS4yLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2J1ZmZlci1mcm9tIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1ZmZlci1mcm9tLy0vYnVmZmVyLWZyb20tMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUUrWFFDUndTYmFhaUNodHY2azZEd2djK2J4K0JzNnZ1S0pISGw1a294L0JhS2JoaVh6cVFPd0s0Y08yMnlFbEdwMk9DbWp3VmhUM0hteGd5UEduSmZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2J5dGVzIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J5dGVzLy0vYnl0ZXMtMy4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9OZjdUeXpUeDZTM3lSSk9iT0FWNzk1NnI4Y3IyK09qOEFDNWR0OHdTUDNCUUFvZVg1OE5vSHlDVThQOHpHa05YU3RqVFNpNmZ6TzZGMHBCZGNZYkVnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzLy0vY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMtMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNwMWFibEowaXZEa1N6amNhSmR4RXVuTjUvWHZrc0ZKMnNNQkZmcTZ4MHJ5aFFWLzJiL0t3RmUyMWNNcG1IdFBPU2lqOEs5OS93U2ZvRXVUT2JtdU1RPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKKyAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NhbGwtYm91bmQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbC1ib3VuZC8tL2NhbGwtYm91bmQtMS4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSt5czk5N1U5NnBvNEt4L0FCcEJDcWhBOUV1eEphUVdEUWc3Mjk1SDRoQnBodjNJWmcwYm9CS3V3WXB0NFlYcDZNWjVBbVpRblUvdHlNVGxScGFTZWpnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjYWxsLWJpbmQtYXBwbHktaGVscGVycyI6ICJeMS4wLjIiLAorICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4zLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jYWxsc2l0ZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbHNpdGVzLy0vY2FsbHNpdGVzLTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QOEJqQXNYdlpTK1ZJRFVJMTFoSENRRXY3NFlUNjdZVWk1SkpGTldJcUwyMzVzQm1qWDQrcXg5TXV2bHM1aXZ5TkVOY3R4NDZ4UUxRM2FUdUU3c3NhUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NhbWVsY2FzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW1lbGNhc2UvLS9jYW1lbGNhc2UtNS4zLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwyOFNUQjE3MG53V1M2M1VqdGxFT0UzZGxkUUFwYUpYWmtPSTF1TUZmemYzclJ1UGVnSGFIZXN5ZWUrWXhRK1c2U3ZSRFFWNlVyZE9kUmlSMTUzd0pnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2FuaXVzZS1saXRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMwMDAxNzg4IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW5pdXNlLWxpdGUvLS9jYW5pdXNlLWxpdGUtMS4wLjMwMDAxNzg4LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02cThIRnArbE9RdGNmN3dCSyt1RWVueHltVldrR0trakZwQ3Z3NVcyNWNtTXdFRFU0NXAxeFFGQlF2OEpEbE1Ncnk3ZU54eUJhUitxeGdtVFVaa0lSUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9icm93c2Vyc2xpc3QiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vY2FuaXVzZS1saXRlIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIkNDLUJZLTQuMCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2FwaXRhbC1jYXNlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhcGl0YWwtY2FzZS8tL2NhcGl0YWwtY2FzZS0xLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZHMzN1c4Q3l0SGd3bmhHR1RpODhwY1B5UjE1cW9Oa09wWXdtTU1mbldxcVdnRVNhcExxdkR4Nmh1RmpRNXZxV1NuMlowNjE3M1hOQTdMdE1PZVVoMUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibm8tY2FzZSI6ICJeMy4wLjQiLAorICAgICAgICAidHNsaWIiOiAiXjIuMC4zIiwKKyAgICAgICAgInVwcGVyLWNhc2UtZmlyc3QiOiAiXjIuMC4yIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jaGFpIjogeworICAgICAgInZlcnNpb24iOiAiNi4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWkvLS9jaGFpLTYuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OVVBSbHVPZk9pVEtCS3ZXUHRTRDRQaEZ2V0NxT2kwQkdTdE5XczU3WDlqczdYR1RwclNtRm96NUYwdFdoUjRXUGpOZVI5alhxZEM3L1VwU0pUbmxSZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jaGFpLXN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFpLXN0cmluZy8tL2NoYWktc3RyaW5nLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16UXQ1djI5SXVWS1lzZ0NFcHRpZ0EwcjEydTgxWkZSaDN4ZjFnSVNzYlZzWnFaMDlqcXNjdjNydXF6aUFtZ2x0cFgwclJnWVhwYm5HSFJYUFYwMjdNUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2hhaSI6ICI+PSA0IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jaGFsayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFsay8tL2NoYWxrLTQuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vS25iaEZ5UklYcFV1ZXo4aUJNbXlFYTRuYmo0SU9ReXVoYy93eTlrWTcvV1ZQY3dJTzlWQTY2OFB1OFJrTzcrMEc3NlNMUk9leXc5Q3BRMDYxaTRtQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4xLjAiLAorICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsaz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NoYWxrL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTQuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16YkI5ckNKQVQxcmJqaVZEYjJocUtGSE5ZTHhndGs4TlVSeFozSVp3RDNGNk50eGJYWlFDbm5TaTFMa3grSURvaGRQbEZwMjIyd1ZBTEloZVpKUVNFZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NoYWxrL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTIuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SUkVDUHNqN2l1L3hiNW9LWWNzRkhTcHBGTm5zai81Mk9WVFJLYjR6UDVvblh3VkYzelZtbVRvTmNPZkdDK0NSRHBmSy9VNTg0Zk1nMzhaSENhRWxLUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb2xvci1uYW1lIjogIn4xLjEuNCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj03LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2hhbGsvbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRPeSszQXVXM2Eyd05iWkhJdU1acFRjZ2pHdUxVL3VCTC91YmNaRjlPWGJEbzhmZjRPOHlWcDVCZjBlZlM4dUVvWW81cTRGeDdkWTlPZ1FHWGdBc1FBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NoYWxrL25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTcuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xcENBdlJsOXN0dU9IdmVLc243SG5jSlJ2djUwMXFJYWNLelFsTy8rTHd4YzkrMHEyd0x5djREZnZ0ODAvRFBuMnBxT0JzSmREaW9nWEdSOStPdndSdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2hhci1yZWdleCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaGFyLXJlZ2V4Ly0vY2hhci1yZWdleC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1dXWHp0dlo1U0JRVitlUmdLRmVoOHE1c0x1WlkyKzhXVUl6bHhXVlRnK29Hd1kxNHF5bHgxS2JLekhkOFA2WllrQWcweHlJRFU5Sk1IaHlKTVoxanc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2hva2lkYXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hva2lkYXIvLS9jaG9raWRhci00LjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWd6dThrZkJ2bytjQTQ5NjJqblAxS2tTNkRvcDVOUzZnN1I1TEZZSnI0YjhVYjk0UFBRWFVrc0N3OVB2WG9lWFBSUmRkUk5DNUMxSlFVUjJTTUd0bkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicmVhZGRpcnAiOiAiXjQuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxNC4xNi4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vcGF1bG1pbGxyLmNvbS9mdW5kaW5nLyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2ktaW5mbyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jaS1pbmZvLy0vY2ktaW5mby00LjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzdQU3dlcmNDWlUyRmM0c1g5NGVGOGs4UHh0ZTZKQXdMNC9JQ1pMRmpKTHFlZ3M3a0N1QXNxcWovNzBOUUY2VHZEcGdGamt1YlFCMkZXMlpaZGR2UWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaWJpcmFqLXMiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2pzLW1vZHVsZS1sZXhlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9janMtbW9kdWxlLWxleGVyLy0vY2pzLW1vZHVsZS1sZXhlci0yLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGJIVFMyWXV6VXZ0b0xqZHkrOTh5a2JOQjVqUzArMDdFdkZOWGVycVpRSjg5RjdESTZFVDdPUW8vSEp1VzZLMGFWc0tBOWhqOS9SVmIya1FWT3JQRFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2xhc3MtdHJhbnNmb3JtZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xhc3MtdHJhbnNmb3JtZXIvLS9jbGFzcy10cmFuc2Zvcm1lci0wLjUuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU1FhMVdzNmhVYmZDOTh2S0d4WkgzS0ZZMFkxbG01Wm0wU1k4WFg5emJLN0ZKQ3lWRWFjM0FUVzBSSXB3elcrb09mbUhFNVBNUHVmREc5aENmb0VPTXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2xpLWN1cnNvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGktY3Vyc29yLy0vY2xpLWN1cnNvci01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUNqNE81d0t5c3pqTW1EVDR0Wmo5M2t4eXlkTi9LNXpQV1NDZTYvMEFWL0FBMXBxZTVaQkl3MGEyWmZQUVY3bEw1L3liNUhzVXJlSjZVRkFGMXRFUXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicmVzdG9yZS1jdXJzb3IiOiAiXjUuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NsaS10YWJsZTMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjYuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2xpLXRhYmxlMy8tL2NsaS10YWJsZTMtMC42LjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStXLzVlZlRSN3k1SFJEN2dBQ3c5eVFqcU1WdkVNTEJIbWJvTS9rUFdhbStIK0hteXJnamg2WW5jVktLMTIyWVprWHJMdWR6VHVBdWtVdzlGbk1mN0lRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4yLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIjEwLiogfHwgPj0gMTIuKiIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAY29sb3JzL2NvbG9ycyI6ICIxLjUuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2xpLXRydW5jYXRlIjogeworICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaS10cnVuY2F0ZS8tL2NsaS10cnVuY2F0ZS01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFJ3dklPTUdyZk9Bbk0xSll0cVFJbXVhTnRERXY5djZvSVlBczRMSUh3VGlLZWU4dXd2SWkzNjNpZ3NzT0MwTzVVMDRpNEFsRU5zNzlMUUx1OXRFTXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAic2xpY2UtYW5zaSI6ICJeOC4wLjAiLAorICAgICAgICAic3RyaW5nLXdpZHRoIjogIl44LjIuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jbGktdHJ1bmNhdGUvbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctd2lkdGgvLS9zdHJpbmctd2lkdGgtOC4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZoSlBROE4wVjBQM1NObVA2aDJKOTlSTHV6cld6Mmd2VDdWbks1dEt2ck5xSm95UzlXNC9GYjhtbzMxVWlQdnkwMHo3RFFYa1AyaG5LQlZhdjc2dGh3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImdldC1lYXN0LWFzaWFuLXdpZHRoIjogIl4xLjUuMCIsCisgICAgICAgICJzdHJpcC1hbnNpIjogIl43LjEuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jbGl1aSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGl1aS8tL2NsaXVpLTguMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CU2VObnl1czc1QzQvL05ROWdRdDEvY3NUWHlvLzhTYithZkxBa3pBcHRGdU1zb2Q5SEZva0dOdWRacGkvb1FWNzNoblZLK3NSKzVQVlJNZCtEcjdZUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKKyAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwKKyAgICAgICAgIndyYXAtYW5zaSI6ICJeNy4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NsaXVpL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NsaXVpL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTQuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16YkI5ckNKQVQxcmJqaVZEYjJocUtGSE5ZTHhndGs4TlVSeFozSVp3RDNGNk50eGJYWlFDbm5TaTFMa3grSURvaGRQbEZwMjIyd1ZBTEloZVpKUVNFZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NsaXVpL25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0IjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTIuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SUkVDUHNqN2l1L3hiNW9LWWNzRkhTcHBGTm5zai81Mk9WVFJLYjR6UDVvblh3VkYzelZtbVRvTmNPZkdDK0NSRHBmSy9VNTg0Zk1nMzhaSENhRWxLUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb2xvci1uYW1lIjogIn4xLjEuNCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj03LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY2xpdWkvbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRPeSszQXVXM2Eyd05iWkhJdU1acFRjZ2pHdUxVL3VCTC91YmNaRjlPWGJEbzhmZjRPOHlWcDVCZjBlZlM4dUVvWW81cTRGeDdkWTlPZ1FHWGdBc1FBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NsaXVpL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jbGl1aS9ub2RlX21vZHVsZXMvd3JhcC1hbnNpIjogeworICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS03LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVZHSWoya2FtTFNUeHc2TnNaam9CeGZTd3NuMHljZGVzbWM0cCtRMjFjNXpQdVoxcGwrTmZ4VmR4UHRkSHZtTlZPUTZYU1lHNEFVdHl0L0ZpN0QxNlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMC4wIiwKKyAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4xLjAiLAorICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NvIjogeworICAgICAgInZlcnNpb24iOiAiNC42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvLy0vY28tNC42LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFWYjBkTTVIdkcrdWF4aXRtOHdPTmw3amx0eDhkcWhmVTMzRGNxdE9aY0xTVklLU0RETERpNyswTGJBS2l5SThoRDl1NDJtMll4WFNrTUdXVGhhZWNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJpb2pzIjogIj49IDEuMC4wIiwKKyAgICAgICAgIm5vZGUiOiAiPj0gMC4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb2xsZWN0LXY4LWNvdmVyYWdlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbGxlY3QtdjgtY292ZXJhZ2UvLS9jb2xsZWN0LXY4LWNvdmVyYWdlLTEuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xTDVhcUlrd1BmaW9kYU1nUXVua0YxelJoTnFpZkhCbXRiYmJ4Y3I2eVZ4eEJubGl3NFRET1c2TnhwTzhESkxnSjE2T1QrWTR6dFpxUDZwL0Z0WG5Bdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb2xvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci8tL2NvbG9yLTUuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lem1WY0xSM3hBVnA4a1lPbTRHUzQ1WkxMZ0lFNlNQQUZvZHVMcjZoVERhandiM0taMkY0Nmd1bEszWHBjd1JGYjVLS0dDU2V6Q0JBWTREdzRIc3lYQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMy4xLjMiLAorICAgICAgICAiY29sb3Itc3RyaW5nIjogIl4yLjEuMyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY29sb3ItY29udmVydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0zLjEuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZmFzREgyb250MkdxRjVIcHlPNHcwK0JjZXdsaEhFWk9GbjljMWNrWmRIcEo1NlFiN01IaEgvSWNKWmJCR2d2ZHR3ZHdOYkx2eGlCRWRnMzM2aUE5U2c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNvbG9yLW5hbWUiOiAiXjIuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0LjYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFiUGFETkZtMGF4ekU0TUVBektQdXFLV2VSYVQ0M1UvaHl4S1BCZHFUZm1QRitkNm43RlNvVEZ4TFZVTFVKT21pTHAwMUtqaElQUEgrSHJYWkpONFJnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyLjIwIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb2xvci1zdHJpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3Itc3RyaW5nLy0vY29sb3Itc3RyaW5nLTIuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CYjZDcThvcTBJakRPZTh3Sm1pNEplTm43NjNYczljZnJCY2F5bEsxdFB5cFd6eW95MkczbDkwdjlrNjRranBobC9aSmpQSVNoRnp0ZW5Sb21pOFdUZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY29sb3ItbmFtZSI6ICJeMi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NvbG9yZXR0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4yMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3JldHRlLy0vY29sb3JldHRlLTIuMC4yMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSWZFRHh3b1dJamtlWEwxZVhjRGlvdzRVYktqaExkcTYvRXVTVlI5R01ON0tWSDNyOWdRODNlNzNoc3oxTmQxVDNpamQ1eHYxd2NXUllPK0Q2a0NJMnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY29sb3JzIjogeworICAgICAgInZlcnNpb24iOiAiMS40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9ycy8tL2NvbG9ycy0xLjQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYStVcVRoNGtnWmcvU2xHdmZiekRIcGdSdTdBQVFPbW1xUkhKbnhoUlpJQ0tGVVQ5MWJyVmhOTnQ1OENNV1U5UHNCYnYzUERDWlVIYlZ4dURpSDJtdEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEuOTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NvbW1hbmRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE0LjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29tbWFuZGVyLy0vY29tbWFuZGVyLTE0LjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSCt5MEpvL1QxUlo5cVBQNEVoMXBrY1FjTFJnbHJhSmFTTG95T3RIeHU2QWFwa2pXVkN5MlNpdDFRUTR4M0RuZzhxRGxTc1pFZXQ3ZzVQcTA2TXZUZ3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY29uY2F0LW1hcCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25jYXQtbWFwLy0vY29uY2F0LW1hcC0wLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItL1NydjRkc3d5UU5CZm9oR3B6OW82WWIzR3ozU3JVRHFCSDVyVHVoR1I3YWh0bGJZS25WeHcyYkNGTVJsamFBN0VYSGFYWjh3c0hkb2RGdmJraEttcWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY29udGVudC1kaXNwb3NpdGlvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb250ZW50LWRpc3Bvc2l0aW9uLy0vY29udGVudC1kaXNwb3NpdGlvbi0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWpSQ0g5Wi8rRFJQN3Jrdlk4M0IreUdJR1g5Nk9ZZEptem5ncW53MlNCU3hxQ0ZQZDB3MmttM3M1aWF3cEdYOGtybndTR21GMEZXNU5ocjBIZmFpM2c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9leHByZXNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb250ZW50LXR5cGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udGVudC10eXBlLy0vY29udGVudC10eXBlLTEuMC41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uVGpxZmNCRkVpcEtkWEN2NFlEUVdDZm1jTFpLbTgxbGRGMHBBb3BUdnlyRkdWYmNSNlAvVkFBZDVHN04rMHRUcjhRcWlVMHRGYWRENkZLNE50SndPQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb252ZXJ0LXNvdXJjZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LdnA0NTlIclYyRkVKMUNBc2kxS3UrTVkza2FzSDE5VEZ5a1R6MnhXbU1lcTZiazJOVTNYWHZmSitRNjFtMHhrdFd3dCsxSFNZZjNKWnNUbXMzYVJKZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb29raWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjcuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29va2llLy0vY29va2llLTAuNy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15a2k1WG5LdWY3NTBsNTB1R1RsbHQ2a0tJTFk0blExZU5JUWF0b1hFQnlaNWRXZ25LcWJucW1UckJFNUI0Tjdsck1KS1EyeXRXTWlUTzJvMHY2RXcvdz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9jb29raWUtc2lnbmF0dXJlIjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvb2tpZS1zaWduYXR1cmUvLS9jb29raWUtc2lnbmF0dXJlLTEuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ENzZ1VTczdWxTWHJEMVVYRjRLRTJUTXhWVndoc25DZ2ZBeVRnOWs4UDZLR1pqbFhLck9MZTRkSlFLSTNCeGk1d2plc1pvRlhKV0VsTldCalBaTWJoZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjYuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvY29ycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuOC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3JzLy0vY29ycy0yLjguNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEp0WkJCSEE2dmpJQWFGNkVuSWFxNmxhQkJQOWFxL1kzb3VWSmpFZm9IYlJCY0hCQUhZY01oL3c4TERyazJQdklNTXE4Z21vcGE1RDRWOFJtYnJ4R3c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm9iamVjdC1hc3NpZ24iOiAiXjQiLAorICAgICAgICAidmFyeSI6ICJeMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC4xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2V4cHJlc3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2NyZWF0ZS1yZXF1aXJlIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NyZWF0ZS1yZXF1aXJlLy0vY3JlYXRlLXJlcXVpcmUtMS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRjS0ZYM2puME1wSWFYamlzb1J2ZXhJSlZFS3phcTd6MnJaS3hmK01TcjlUa2RtSG1zVTRtMmxjTG9qcmovRkhsOG1rNVZ4TW1ZQStmdFJrUC8zb0tRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Nyb3NzLWVudiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Jvc3MtZW52Ly0vY3Jvc3MtZW52LTEwLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3NZb3NnbkFDWlRBRGNtRXlKY3RrSklvcUFoSGp0dHc3UnNGclZvSk5YYnNXV3FhcTZZbSs3a1pqcTZtUzQ1TzBqaWo2dnRpUmVwcEtRRXRxV3k2RHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVwaWMtd2ViL2ludmFyaWFudCI6ICJeMS4wLjAiLAorICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC42IgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJjcm9zcy1lbnYiOiAiZGlzdC9iaW4vY3Jvc3MtZW52LmpzIiwKKyAgICAgICAgImNyb3NzLWVudi1zaGVsbCI6ICJkaXN0L2Jpbi9jcm9zcy1lbnYtc2hlbGwuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduIjogeworICAgICAgInZlcnNpb24iOiAiNy4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nyb3NzLXNwYXduLy0vY3Jvc3Mtc3Bhd24tNy4wLjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVWMlFPV1Aybld6c3kyYU1wOGFSaWJoaTlkbHpGNUhnaDVTSGFCOU9pVEdFeURUaUpKeXgwdXk1MVFYZHlXYnRBSE51YTRYSnpVS2NhM096S1VkM3ZBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwYXRoLWtleSI6ICJeMy4xLjAiLAorICAgICAgICAic2hlYmFuZy1jb21tYW5kIjogIl4yLjAuMCIsCisgICAgICAgICJ3aGljaCI6ICJeMi4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2RlYnVnIjogeworICAgICAgInZlcnNpb24iOiAiNC40LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctNC40LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJHd3dXbndRdmtWZmF2S1Z0MjJGR0x3K3hZU2R6QVJ3bTBydTZEaFRWQTN1bVU1aFpjMjhWM2tPNHN0Z1lyeXJUbExwdXZnSTlHaWlqbHRBak5iY3FBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtcyI6ICJeMi4xLjMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49Ni4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kZWNhbWVsaXplIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY2FtZWxpemUvLS9kZWNhbWVsaXplLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05aUUxUGdTaWs5SGVJSXcySk85NElpZG5FM2VCb1FyRkozdzdzRnV6U1g0RHBtWjN2NXNacFVpVjVTd2NmNm1RRUYrWTBydThOZW8rcCtueWgySitoUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2RlZGVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWRlbnQvLS9kZWRlbnQtMS43LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVd6TXgzbVc5OFNOK3puM2hnZW1mNE96ZG15TmhoaEt6NUF5MHBVZlFpTVEzZTFnK3htVEpXcC9wS2R3S1ZYaGRTa0FFR0lJenFldVdyTDNtVi9BWGJBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYWJlbC1wbHVnaW4tbWFjcm9zIjogIl4zLjEuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJiYWJlbC1wbHVnaW4tbWFjcm9zIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kZWVwLWVxbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwLWVxbC8tL2RlZXAtZXFsLTUuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oNWsvNVU1MElKSkZwemZMNm5POWphYXVtZmpPL2YyTmpLL29ZQjJEanptNHA5TCszVDlxV3BacVoyaEFiTFB1dVlxOXdyVTA4V1F5QlRMNUdiUGs1UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2RlZXAtaXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVlcC1pcy8tL2RlZXAtaXMtMC4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9JUHprc21UZzQvTXJpaWFZR08rb2tYRFQ3enRuL3czRXB0di8rZ1NJZE1kS3NKbzB1NENmWU5GSlB5KzRTS011Q3FHdzJ3eG5BK1VSTWczdDhhL2JRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2RlZXBtZXJnZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwbWVyZ2UvLS9kZWVwbWVyZ2UtNC4zLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNzVXFiTUVjNzdYcXBkTk83RlJ5Um9nK2VXM3BoK0dZQ2JqK3JLK3VZeVJNdXdzVnkwck1pVnRQbitRSmxLRnZXUC8xUFlwYXBxWW4wTWUya25GbitBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kZXBkIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlcGQvLS9kZXBkLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nN25INlA2ZHlEaW9Kb2dBQUdwckdwQ3RWSW1KaHBQay9yb0N6ZGIzZkloNjEvcy9uUHNmUjZvbnlNd2tDQVIvT2xDM3lCQzBsRVN2VW9RRUFzc0lydz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC44IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kZXRlY3QtbGliYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXRlY3QtbGliYy8tL2RldGVjdC1saWJjLTIuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CdGoyQk9PTzgzbzNXeUg1OWU4TWdYc3hFUVZjYXJrVU9wRVlydWJCMHVyd25OMTB5UTM2NHJzaUJ5VTExblpscVdZWm0wNWkvb2Y3aW80bXppaEJ0UT09IiwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZGV0ZWN0LW5ld2xpbmUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGV0ZWN0LW5ld2xpbmUvLS9kZXRlY3QtbmV3bGluZS0zLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVEx6K3gvdkVYbS9ZN1A3d24xRUpGTkx4WXBVRDRUZ01vc3hZNmZBVkpVbkpNYnVwSEJPbmN4eVdVRzlPcFRhSDlFQkQ3dUZJNUxmRWdtTU9jNTREc0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kaWZmIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYvLS9kaWZmLTQuMC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YMDdudHRKUWt3a2ZLZnZUUEcvS1NuRTJPTWRjVUNhbzYrZVhGM3dtbklRUm4yYVBBSEgzVnhEYkRPZGVna2Q2SmJQc1hxU2hwdkVPSGZBVCtuQ053UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMy4xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9kdW5kZXItcHJvdG8iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZHVuZGVyLXByb3RvLy0vZHVuZGVyLXByb3RvLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LSU4vbkRKQlFSY1h3ME1MVmhaRTlpUUhtRzY4cUFWSUJnOUNxbVVZam1RSWhnaWo5VTVNRnZycWtVTDVGYnR5eXpadU9lT3QwemRlUmU0VVk3Y3QrQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMiOiAiXjEuMC4xIiwKKyAgICAgICAgImVzLWVycm9ycyI6ICJeMS4zLjAiLAorICAgICAgICAiZ29wZCI6ICJeMS4yLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZHVwbGV4ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZHVwbGV4ZXIvLS9kdXBsZXhlci0wLjEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItanRENllHMzcwWkNJaS85R1RhSktReFdUWkQwNDUrNFI0aFRrL3gxVXlvcWFkeUo5eDlDZ1NpMVJsVkRRRjhVMnN4TExTbkZrQ2FNaWhxbGpISVdnTWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZWFzdGFzaWFud2lkdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWFzdGFzaWFud2lkdGgvLS9lYXN0YXNpYW53aWR0aC0wLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSTg4VFlaV2M5WGlZSFJRNC8zYzVyampmZ2tqaEx5VzJsdUdJaGVHRVJiTlE2T1k3eVR5YmFuU3BEWFphOHk3VlVQOVltRGNZYStleXE0Y2E3aUxxV0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZWUtZmlyc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWUtZmlyc3QvLS9lZS1maXJzdC0xLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV013bTlMaFJVbytXVWFSTit2UnVFVHFHODlJZ1pwaFZTTmtkRmdlYjZzUy9FNE9yRElON3Q0OENBZXdTSFhjNkM4bGVmRDhLS2ZyNXZZNjFiclFsb3c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VmZmVjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWZmZWN0Ly0vZWZmZWN0LTMuMjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkEzVHNCZDBtQnlUaHVDbkU2RlFxUytMM0RMYXprNFViRTlqcDBDcVZmSWpRbDVES2k4c0FlOTNPL1pLZUY3Y2xMNjVmSnhjc1ZHaUFLWVhkbkhCeUE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBzdGFuZGFyZC1zY2hlbWEvc3BlYyI6ICJeMS4wLjAiLAorICAgICAgICAiZmFzdC1jaGVjayI6ICJeMy4yMy4xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lbGVjdHJvbi10by1jaHJvbWl1bSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4zNDEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsZWN0cm9uLXRvLWNocm9taXVtLy0vZWxlY3Ryb24tdG8tY2hyb21pdW0tMS41LjM0MS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXNaVHNzZmVyamdEZ2FxUlRjMGllUCtvenpwT3k3TFFUUFR0RVczeVFGbjQrT1JkSUFaV1Y1QnRoWFB5SEY3WXFMdkZKQ1VQaE5oZEFKUVlsWVVnaXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZW1pdHRlcnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEzLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtaXR0ZXJ5Ly0vZW1pdHRlcnktMC4xMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EZVd3YXdrNnI1eVI5akZnbkRLWXQ0c0xTMExtSEpKaTNaT25iNS9KZGJZd2ozblcrRnhRbkhJamhCS3o4WUxDN29STlBWTTlOUTQ3STNDVngzNGVxUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZW1pdHRlcnk/c3BvbnNvcj0xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTguMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NU2pZemNXTk9BMGV3QUhwejBNeHBZRnZ3ZzZ5ankxTkczeHRlb3F6NjQ0VkNvL1JQZ25yMS9HR3QraWMzaUpUelE4RXUzVGRNMTRTYXduVlVtR0U2QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lbmFibGVkIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuYWJsZWQvLS9lbmFibGVkLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BS3JOOThrdXdPek1JZEFpelhHSTg2VUZCb28yNkNMMjFVTTc2M3kxaC9HTVNKNC9PSFU5azJZbHNtQnB5U2NGby93Ykx6V1FKQk1DVzQrSU8zLytPUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZW5jb2RldXJsIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUTBuOUhSaTRtNkp1R0lWMWVGbG12SkI3WkVWeHU5M0lyTXlpTXNHQzBsck1KTVd6Umd4NldHcXV5ZlFnWlZiMzF2aEdnWG5mbVBOTlhteG5Pa1JCcmc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZW50aXRpZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW50aXRpZXMvLS9lbnRpdGllcy00LjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVjBoakg0ZEdQaDlBbzVwME1vUlk2QlZxdHdDamh6NnZJNUxUOEFKNTVIKzRnOS80dmJIeDFJNTRmUzBYdWNsTGhESEFyUFFDaU1qRHhqYUw4ZlB4aHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEyIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mYjU1L2VudGl0aWVzP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZW52aXJvbm1lbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0xLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFV0b1BrTWdnYnowTVB5UGlJV3IxS3A0YWVXSmpEWjZTTXZVUmhpbWpkWmdzUnVEcGxGNS9zOWhjZ0doeVhNaHMrNnZwbnVvaVoya0ZpdTNGTW5TOFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lcnJvci1leCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMy40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcnJvci1leC8tL2Vycm9yLWV4LTEuMy40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zcVFhbUFuUjE0VmdDcjFBNjE4QTNzR3J5Z2NwSytIRWJlbkEvSGlFQWtrVXdjWklJQi90Z1dxSEZ4V2dPeURoNG5CNEpDUmltaDc5ZFI1WXdjOU1EUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpcy1hcnJheWlzaCI6ICJeMC4yLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Vycm9yLXN0YWNrLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcnJvci1zdGFjay1wYXJzZXIvLS9lcnJvci1zdGFjay1wYXJzZXItMi4xLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNrNVY2d1ZhelBocTVNaHBPK0FVeEpuNXg3WFNYR2wxUjkzVm43aSt6UzE1S0RWeFFpamVqTkNyejgzNDAvMmJnTEJqUjlHdEVHOFpWS09ORGpjcUdRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInN0YWNrZnJhbWUiOiAiXjEuMy40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZGVmaW5lLXByb3BlcnR5Ly0vZXMtZGVmaW5lLXByb3BlcnR5LTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lM25SZmdmVVo0ck5HTDIzMmdVZ1gwNlFOeXllejA0S2RqRnJGK0xUUm9PWG1yT2dGS0RnNEJDZHNqVzhFblQ2OWVxZFlHbVJwSndpUFZZTnJDYVczZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lcy1lcnJvcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZXJyb3JzLy0vZXMtZXJyb3JzLTEuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aZjVIMkt4dDJ4alR2Ykp2UDJaV0xFSUN4QTZqK2hBbU16SWx5cHk0eGNCZzF2S1ZueDg5V3kwR2JTK2tmNWN3Q1ZGRnpkQ0ZoMlhTQ0ZOVUxTNmNzdz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lcy1vYmplY3QtYXRvbXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtb2JqZWN0LWF0b21zLy0vZXMtb2JqZWN0LWF0b21zLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GR2dIMmg4ektOaW05bGpqN2RhbmtGUGNJQ0lLOUNwNWJtK2MyZ1FTWWVQaHBhRzUrZXNyTE9EaWhJb3JuK1BlNkZHSnpXaFhRb3RQdjczalRhbGRYQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXMtZXJyb3JzIjogIl4xLjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2J1aWxkIjogeworICAgICAgInZlcnNpb24iOiAiMC4yNy43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2J1aWxkLy0vZXNidWlsZC0wLjI3LjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUl4cGliVGp5Vm5tcklRbzVhcU5wQ2dvQUNBL2RUS0xUbGhNSGloVkhoZGt4S3lQTzF1QkJ0aHVtVDByZEhtY3NrOXVNb25JV1MwbTRGbGpXeklMaDN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImVzYnVpbGQiOiAiYmluL2VzYnVpbGQiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVzYnVpbGQvYWl4LXBwYzY0IjogIjAuMjcuNyIsCisgICAgICAgICJAZXNidWlsZC9hbmRyb2lkLWFybSI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC1hcm02NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC14NjQiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL2Rhcndpbi1hcm02NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvZGFyd2luLXg2NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvZnJlZWJzZC14NjQiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LWFybSI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtYXJtNjQiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LWlhMzIiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LWxvb25nNjQiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LW1pcHM2NGVsIjogIjAuMjcuNyIsCisgICAgICAgICJAZXNidWlsZC9saW51eC1wcGM2NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtcmlzY3Y2NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvbGludXgtczM5MHgiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL2xpbnV4LXg2NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvbmV0YnNkLWFybTY0IjogIjAuMjcuNyIsCisgICAgICAgICJAZXNidWlsZC9uZXRic2QteDY0IjogIjAuMjcuNyIsCisgICAgICAgICJAZXNidWlsZC9vcGVuYnNkLWFybTY0IjogIjAuMjcuNyIsCisgICAgICAgICJAZXNidWlsZC9vcGVuYnNkLXg2NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL3N1bm9zLXg2NCI6ICIwLjI3LjciLAorICAgICAgICAiQGVzYnVpbGQvd2luMzItYXJtNjQiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL3dpbjMyLWlhMzIiOiAiMC4yNy43IiwKKyAgICAgICAgIkBlc2J1aWxkL3dpbjMyLXg2NCI6ICIwLjI3LjciCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzY2FsYWRlIjogeworICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FsYWRlLy0vZXNjYWxhZGUtMy4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdVajJxbHhhUXRPNGc2UHE1YzI5R1RjV0dEeWQ4aXRMOHpUbGlwZ0VDejNKZXNBaWlPS290ZDhKVTZvdEIzUEFDZ0c2eGtKVXlWaGJvTVMrYmplL2pBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNjYXBlLWh0bWwiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLWh0bWwvLS9lc2NhcGUtaHRtbC0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmlTdXBaNE9ldUd3cjY4bEdJZXltL2tzSVpNSm9kVUdPU0NaL0ZTblR4Y3Jla2J2cXJnZFV4bEpPTXBpamFLWlZqQUpyV3JHcy82Snk4T011eWo5b3c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVR0cGNOSjNYQXp4M0dxOHNXUnpKYVZhalJzMHVWeEEyWUFrZGIxam0yWWtQejRHNmVnVUZBeUEzbjV2dEVJWmVmUGs1V2E0VVhiS3VTNWZLa0pXZGdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNsaW50IjogeworICAgICAgInZlcnNpb24iOiAiOS4zOS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQvLS9lc2xpbnQtOS4zOS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Yb01qZEJPd2UvZXNWZ0V2TG1Oc0QzSVJIa203ZmJLSVVHdnJsZWxvSlhVWmdESGlnMklQV05uaXYrR3dqeUpYenVOcVZqbHI1KzR5VlVaanljSndmUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMiOiAiXjQuOC4wIiwKKyAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAiOiAiXjQuMTIuMSIsCisgICAgICAgICJAZXNsaW50L2NvbmZpZy1hcnJheSI6ICJeMC4yMS4yIiwKKyAgICAgICAgIkBlc2xpbnQvY29uZmlnLWhlbHBlcnMiOiAiXjAuNC4yIiwKKyAgICAgICAgIkBlc2xpbnQvY29yZSI6ICJeMC4xNy4wIiwKKyAgICAgICAgIkBlc2xpbnQvZXNsaW50cmMiOiAiXjMuMy41IiwKKyAgICAgICAgIkBlc2xpbnQvanMiOiAiOS4zOS40IiwKKyAgICAgICAgIkBlc2xpbnQvcGx1Z2luLWtpdCI6ICJeMC40LjEiLAorICAgICAgICAiQGh1bWFuZnMvbm9kZSI6ICJeMC4xNi42IiwKKyAgICAgICAgIkBodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlciI6ICJeMS4wLjEiLAorICAgICAgICAiQGh1bWFud2hvY29kZXMvcmV0cnkiOiAiXjAuNC4yIiwKKyAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiXjEuMC42IiwKKyAgICAgICAgImFqdiI6ICJeNi4xNC4wIiwKKyAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCisgICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjYiLAorICAgICAgICAiZGVidWciOiAiXjQuMy4yIiwKKyAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl40LjAuMCIsCisgICAgICAgICJlc2xpbnQtc2NvcGUiOiAiXjguNC4wIiwKKyAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjQuMi4xIiwKKyAgICAgICAgImVzcHJlZSI6ICJeMTAuNC4wIiwKKyAgICAgICAgImVzcXVlcnkiOiAiXjEuNS4wIiwKKyAgICAgICAgImVzdXRpbHMiOiAiXjIuMC4yIiwKKyAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiLAorICAgICAgICAiZmlsZS1lbnRyeS1jYWNoZSI6ICJeOC4wLjAiLAorICAgICAgICAiZmluZC11cCI6ICJeNS4wLjAiLAorICAgICAgICAiZ2xvYi1wYXJlbnQiOiAiXjYuMC4yIiwKKyAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAorICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKKyAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4wIiwKKyAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeS13aXRob3V0LWpzb25pZnkiOiAiXjEuMC4xIiwKKyAgICAgICAgImxvZGFzaC5tZXJnZSI6ICJeNC42LjIiLAorICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuNSIsCisgICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKKyAgICAgICAgIm9wdGlvbmF0b3IiOiAiXjAuOS4zIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJlc2xpbnQiOiAiYmluL2VzbGludC5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2VzbGludC5vcmcvZG9uYXRlIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaml0aSI6ICIqIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgImppdGkiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzbGludC1jb25maWctcHJldHRpZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMC4xLjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1jb25maWctcHJldHRpZXIvLS9lc2xpbnQtY29uZmlnLXByZXR0aWVyLTEwLjEuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItODJHWlVqUlMwcC9qZ2FuZjZxMXJFTzI1VlNvSEgwaEtQQ1RyZ2lsbFBqZEkvM2JnQmhBRTFRekhySFRpempwUnZ5NnBHQXZLakRKdGsycEY5TkRxOHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJiaW4vY2xpLmpzIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludC1jb25maWctcHJldHRpZXIiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc2xpbnQiOiAiPj03LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNsaW50LXBsdWdpbi1wcmV0dGllciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuNS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtcGx1Z2luLXByZXR0aWVyLy0vZXNsaW50LXBsdWdpbi1wcmV0dGllci01LjUuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHNjWGticVVaMnNQaXRoQXVMbTVNWEwrV3BoK1U3d0huZ1BCdjlPTVd3bFA4aWFmbHl4cGpUWVprbWRnQjQvdlBJaGVtUmxCRW9Mckg3VUMxbjdhVXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicHJldHRpZXItbGludGVyLWhlbHBlcnMiOiAiXjEuMC4xIiwKKyAgICAgICAgInN5bmNraXQiOiAiXjAuMTEuMTIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xNC4xOC4wIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludC1wbHVnaW4tcHJldHRpZXIiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvZXNsaW50IjogIj49OC4wLjAiLAorICAgICAgICAiZXNsaW50IjogIj49OC4wLjAiLAorICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICI+PSA3LjAuMCA8MTAuMC4wIHx8ID49MTAuMS4wIiwKKyAgICAgICAgInByZXR0aWVyIjogIj49My4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAiQHR5cGVzL2VzbGludCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQtc2NvcGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXNjb3BlLy0vZXNsaW50LXNjb3BlLTkuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14UzkwSDUxY0t3MGpsdHhtdm1IeTJJYWkxTElxcmZidzU3Yjc5dy9KN01mdkRma0lrRlora2o2ekMzQmp0VXdoMTUwSHNTU2R4WFpjc3V2NzJtaURGUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvZXNyZWN1cnNlIjogIl40LjMuMSIsCisgICAgICAgICJAdHlwZXMvZXN0cmVlIjogIl4xLjAuOCIsCisgICAgICAgICJlc3JlY3Vyc2UiOiAiXjQuMy4wIiwKKyAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNsaW50LXZpc2l0b3Ita2V5cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQtdmlzaXRvci1rZXlzLy0vZXNsaW50LXZpc2l0b3Ita2V5cy01LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEQ0MGVIeEEzNWgwUEVJWk5lSWprSG9EUjRZampKcDM0YmlNMG1EdnBsQmUvL21CK0lIQ3FIREdWN3B4Ris3TWtsVHZpZ2hjQ1BQWkM3eW5XeWpkVEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4yMC4xOS4wIHx8IF4yMi4xMy4wIHx8ID49MjQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL0Blc2xpbnQvY29uZmlnLWFycmF5IjogeworICAgICAgInZlcnNpb24iOiAiMC4yMS4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2NvbmZpZy1hcnJheS8tL2NvbmZpZy1hcnJheS0wLjIxLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5KbDJLR1RscmY5R2pMaW1nSXJ1K1YvbXpnU0swQUJDRFFSdnh3NUJqVVJMN1dmSDV1b1dtaXpiSDdRQjZNbW5NQmQ4Y0lDOXVjZVduZXpMMVZaV1d3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAZXNsaW50L29iamVjdC1zY2hlbWEiOiAiXjIuMS43IiwKKyAgICAgICAgImRlYnVnIjogIl40LjMuMSIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS41IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL0Blc2xpbnQvY29uZmlnLWhlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9jb25maWctaGVscGVycy8tL2NvbmZpZy1oZWxwZXJzLTAuNC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nQnJ4Tjg4Z09JZjNSN2phNUs5c2x3TmF5VmNaZ0s2U09VT1JtMnVCelRlSUVmZVZhSWhPcEN0VG94M1A2UjdvMmpMRndMRlRMbkM3a1UvUkdjWUVndz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGVzbGludC9jb3JlIjogIl4wLjE3LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzbGludC9ub2RlX21vZHVsZXMvQGVzbGludC9jb3JlIjogeworICAgICAgInZlcnNpb24iOiAiMC4xNy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2NvcmUvLS9jb3JlLTAuMTcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteUwvc0xycG10RGFGRWlVajFvc1JQNFRJMk1EejFBZGRKTCtqWjdLU3F2QnVsaU40eHFZWTU0SWZkTjhxRDhUb2E2ZzFpbG9waDFmeFFOa2pPeHJycFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjE1IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL0Blc2xpbnQvb2JqZWN0LXNjaGVtYSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L29iamVjdC1zY2hlbWEvLS9vYmplY3Qtc2NoZW1hLTIuMS43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WdEFPYXltV1ZmWmNtWmJwNkUybXltcERJSHZ5alhzLzEyTHFXWWpWdzZxanJmRitWSytmeUczM2tDaHozbm5LK1NVNS9OZUhPcXJURUhTOHNYTzNPQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNsaW50L25vZGVfbW9kdWxlcy9AZXNsaW50L3BsdWdpbi1raXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9wbHVnaW4ta2l0Ly0vcGx1Z2luLWtpdC0wLjQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDMvcXRyRFVva3I3TEpxb0YyYzMrUkludS90NHpmcnBZZG9TRGZZeWhnNTJyd0xWNlRuT3ZkRzRmWG03SWtTQjN3RXJrY21KUzlpRWhqVnRPU0VqakE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBlc2xpbnQvY29yZSI6ICJeMC4xNy4wIiwKKyAgICAgICAgImxldm4iOiAiXjAuNC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzbGludC9ub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMS4xLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NV1BHZkR4bnl6S1U3ck5PVzlTUC9jNTB2aTN4cm1ydWEvKzZoZlBiQ1MyQUJOV2Z4MjR2UGlkenZDN2tyalUvUlRvMjM1c1Y3NzZ5bWxzTXRHS2o4Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYWxhbmNlZC1tYXRjaCI6ICJeMS4wLjAiLAorICAgICAgICAiY29uY2F0LW1hcCI6ICIwLjAuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNsaW50L25vZGVfbW9kdWxlcy9lc2xpbnQtc2NvcGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXNjb3BlLy0vZXNsaW50LXNjb3BlLTguNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zTlhPZktDbjc0cnQ4UklDS012SlM3WEtWL1hrOWtBN0R5SnI4bUppazNTN0N3Z3kzcWxra215UzJ1UUIzamlKZzZWTmRaZC9wREJKdTBudkcyTmxUZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc3JlY3Vyc2UiOiAiXjQuMy4wIiwKKyAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNsaW50L25vZGVfbW9kdWxlcy9lc2xpbnQtdmlzaXRvci1rZXlzIjogeworICAgICAgInZlcnNpb24iOiAiNC4yLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC12aXNpdG9yLWtleXMvLS9lc2xpbnQtdmlzaXRvci1rZXlzLTQuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VaGRrNXNmcWNlZS85SC9yQ09KaWtZejY3bzBhMlR3MmhHUlBPRzJZMVIyZGc3YnJSZTF1RzB5YU5RREh1K1RPL3VRUEYvNWVDYXB2WVNtSFVqdDdKUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzbGludC9ub2RlX21vZHVsZXMvZXNwcmVlIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtMTAuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qNlBBUTJ1VXI3OVBaaEJqUDVDNWZobDhlMzlGbVJuT2pzRDVsR25XckZVOGkyRzc3NnRCSzcrblA4S3VRVVRUeUFaVXdmUXFYQWdyVkg1TWJIOUNZUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhY29ybiI6ICJeOC4xNS4wIiwKKyAgICAgICAgImFjb3JuLWpzeCI6ICJeNS4zLjIiLAorICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeNC4yLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9lc2xpbnQvbm9kZV9tb2R1bGVzL21pbmltYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMy4xLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZnaldVc25uVDZuK05VazZlWnE3N3plRmRwVzJMV0R6UDZ6RkdyQ2JIWGlZTnVsNUR6cWsySEhRNXVGSDJETlc1WGJwOCtqVnphZU50OTRzc0VFbDR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICJeMS4xLjciCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzcHJlZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjExLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNwcmVlLy0vZXNwcmVlLTExLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3AzRHJWRUlvcFcxQjFhdkFHTHVDU2gxanViYzAxSDJKSGM4QjRxcUdibG1nNWdJOXl1bUJnQUNqV280SmxJYzA0dWZ1ZzR4SjNTUUk4SGtTL1Jnenc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYWNvcm4iOiAiXjguMTYuMCIsCisgICAgICAgICJhY29ybi1qc3giOiAiXjUuMy4yIiwKKyAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjUuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCBeMjIuMTMuMCB8fCA+PTI0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXNwcmltYSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS00LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUd1RkZ3N1VwZGErZzRwK1FIdm5XMFJ5VFgvU1ZlSkJETS9nQ3RNQVJPMGNMdVQySGNFS25UUHZoalY2YUdlcXJDQi9zYk5vcDBLc3ptMGpzYVdVNEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCisgICAgICAiYmluIjogeworICAgICAgICAiZXNwYXJzZSI6ICJiaW4vZXNwYXJzZS5qcyIsCisgICAgICAgICJlc3ZhbGlkYXRlIjogImJpbi9lc3ZhbGlkYXRlLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzcXVlcnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNxdWVyeS8tL2VzcXVlcnktMS43LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFwNkcwV1F3Y1UvTEhzdkx3T04xZkFRWDlacDBBMlk2WS9jSkJsOXIvSmJXOTBaeWc0L3piRzZ6ekthMk9UQUxFTGFyWUhtS3UwR2hwTTVFTys3VDBnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzcmVjdXJzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3JlY3Vyc2UvLS9lc3JlY3Vyc2UtNC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUttZktMM2I2RytSWHZQOE4xdnIzVHExa0wvb0NGZ24yTllYRXRxUDgvTDNwS2FwVUE0RzhjRlZhb0YzU1UzMjNDRDRYeXBSL2ZmaW9IbWt0aTYvVGFnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTQuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS01LjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTU1kQVJ1VkVRemlOVGVKRDhEZ01xbWh3UjExQlJRL2NCUCtwTHRZZFNUbmYzTUlPOGZGZWlJTkViWDM2WmRObGZVLzdBOWYzZ1V3NDlCM29Rc3Z3QkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2VzdXRpbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN1dGlscy8tL2VzdXRpbHMtMi4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtWc2NxWGs0T0NwNjhTWjBka2dFS1ZpNi84aWozMDBLQldUSnEzMlAvZFllV1RTd0s0MVd5VHhhbE4xZVJtQTVaOVVVL0xYOUQ3RldTbVY5U0FZeDZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ldGFnIjogeworICAgICAgInZlcnNpb24iOiAiMS44LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V0YWcvLS9ldGFnLTEuOC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hSUw1Rng3bWF3VmEzMDBhbDJCbkVFNGlOdm8xcUVUeExyUEkvbzA1TDd6NmdvN2ZDdzFKNkVRbWJLNEZtSjJBUzdrZ1ZGL0tFWld1ZkJmZENsTWNQZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ldmVudC1zdHJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnQtc3RyZWFtLy0vZXZlbnQtc3RyZWFtLTQuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xQUNYZHUvOVZIUEJ6Y3loZE9XUjUvSWFoaEdNZjByb1RlWkpmenowNzdHd3lsY0RkOTB5T0hMb3VobXY3R0o1WHpQaTZla2FRV2Q4QXZQUDJuT3ZwQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJkdXBsZXhlciI6ICJeMC4xLjEiLAorICAgICAgICAiZnJvbSI6ICJeMC4xLjciLAorICAgICAgICAibWFwLXN0cmVhbSI6ICIwLjAuNyIsCisgICAgICAgICJwYXVzZS1zdHJlYW0iOiAiXjAuMC4xMSIsCisgICAgICAgICJzcGxpdCI6ICJeMS4wLjEiLAorICAgICAgICAic3RyZWFtLWNvbWJpbmVyIjogIl4wLjIuMiIsCisgICAgICAgICJ0aHJvdWdoIjogIl4yLjMuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXZlbnQtdGFyZ2V0LXNoaW0iOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXZlbnQtdGFyZ2V0LXNoaW0vLS9ldmVudC10YXJnZXQtc2hpbS01LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaS8yWGJuU3ovdXhSQ1U2K05kVkpnS1dEVE00MjcrTXFZYmtRekQzMjFEdUNRSlVxT3VKS0lBMElNMitXMnh0WUhkS09tWjRkUjZmRXhzZDRTWEwrV1E9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudGVtaXR0ZXIzLy0vZXZlbnRlbWl0dGVyMy01LjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbWxzVFJ5R2FQQmpQZWRrNkJ2dythcWJzWER0b0F5QXptNU1PN0pnVSt5VlJ5TVE1TzhiRDRLY2NpN0JTODVmOTN2ZWVnZUNQa0w4UjRHTENsbmpMRnc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2V2ZW50cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudHMvLS9ldmVudHMtMy4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1RdysyZmtRYkFMelE3VjBNWTBJcWRuWE5PZVR0UDRyMGxOOXo3QUFhd0NYZ3FlYTdiRGlpMjBBWXJJQnJGZC9IeDBNMk9jejZTMTExQ2FGa1VjYjBRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuOC54IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ldmVudHNvdXJjZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudHNvdXJjZS8tL2V2ZW50c291cmNlLTMuMC43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DUlQxV1R5dVFvRDc3MUdXNTZYRVpGUS9ab1NmV2lkMWFsS0dEWU1ta3QyeWw4VVhyVlI0cHNwcVdORWNxS3ZWSXpnNlBBbHRXanhjU1NQcmJvQTRpQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXZlbnRzb3VyY2UtcGFyc2VyIjogIl4zLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2V2ZW50c291cmNlLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudHNvdXJjZS1wYXJzZXIvLS9ldmVudHNvdXJjZS1wYXJzZXItMy4wLjgudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcwUVdHa3I0c254cjBPWExSV3NGTGVSQklSUHVRT3Z0NHM4UVlqbVVsbWxreVRaa1JxUzdFRFZSWnR6VTNUaXlEYlhTemFPZUYwWFVLeThQY2h6dWtRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXhlY2EiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhlY2EvLS9leGVjYS01LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOHVTcFpab2NBWlJCQVBJRUlOSmozTG85SHlHaXRsbGN6YzI3RWg1WVlvampNRk1uOHlITURNYVVIRTJKcWZxMDVEL3d1Y3dJNEpHVVJ5WHQxdmNoeWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC4zIiwKKyAgICAgICAgImdldC1zdHJlYW0iOiAiXjYuMC4wIiwKKyAgICAgICAgImh1bWFuLXNpZ25hbHMiOiAiXjIuMS4wIiwKKyAgICAgICAgImlzLXN0cmVhbSI6ICJeMi4wLjAiLAorICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCisgICAgICAgICJucG0tcnVuLXBhdGgiOiAiXjQuMC4xIiwKKyAgICAgICAgIm9uZXRpbWUiOiAiXjUuMS4yIiwKKyAgICAgICAgInNpZ25hbC1leGl0IjogIl4zLjAuMyIsCisgICAgICAgICJzdHJpcC1maW5hbC1uZXdsaW5lIjogIl4yLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2V4ZWNhP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXhpdC14IjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4aXQteC8tL2V4aXQteC0wLjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItK0k2Qi9Ja0pjMW8vMnRpVVJ5ei9pdnUvTzBuS05FQXJJVUI1Tzd6QnJsRFZKcjIyU0NMSDN4VGVFcnk0MjhMdkZoUnpJQTFnOGl6Z3V4Si9nYk5jVlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2V4cGVjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwZWN0Ly0vZXhwZWN0LTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMXpRcmNpVGlRZlJkbzdxSk0xdUc0bmF2bThEYXlGYTJUZ0NTUmx6VXlOa2hjSjZYVVpGM2hqbnBreXIzVmhBcVBIN2kvOUdrRzdUdjVhYno2ZnF6MFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvZXhwZWN0LXV0aWxzIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC9nZXQtdHlwZSI6ICIzMC4xLjAiLAorICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1tb2NrIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2V4cHJlc3MiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwcmVzcy8tL2V4cHJlc3MtNS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhJUzRpZFdXYWk2OU5leklkUnQyeEZWb2ZhRjRqKzZJTk9wSmxWT0xETzh6WEdwVVZFVnpJWWsxMlVVaTJKempFeldMM0lPQXhjVHViZ3o5UG8weVh3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhY2NlcHRzIjogIl4yLjAuMCIsCisgICAgICAgICJib2R5LXBhcnNlciI6ICJeMi4yLjEiLAorICAgICAgICAiY29udGVudC1kaXNwb3NpdGlvbiI6ICJeMS4wLjAiLAorICAgICAgICAiY29udGVudC10eXBlIjogIl4xLjAuNSIsCisgICAgICAgICJjb29raWUiOiAiXjAuNy4xIiwKKyAgICAgICAgImNvb2tpZS1zaWduYXR1cmUiOiAiXjEuMi4xIiwKKyAgICAgICAgImRlYnVnIjogIl40LjQuMCIsCisgICAgICAgICJkZXBkIjogIl4yLjAuMCIsCisgICAgICAgICJlbmNvZGV1cmwiOiAiXjIuMC4wIiwKKyAgICAgICAgImVzY2FwZS1odG1sIjogIl4xLjAuMyIsCisgICAgICAgICJldGFnIjogIl4xLjguMSIsCisgICAgICAgICJmaW5hbGhhbmRsZXIiOiAiXjIuMS4wIiwKKyAgICAgICAgImZyZXNoIjogIl4yLjAuMCIsCisgICAgICAgICJodHRwLWVycm9ycyI6ICJeMi4wLjAiLAorICAgICAgICAibWVyZ2UtZGVzY3JpcHRvcnMiOiAiXjIuMC4wIiwKKyAgICAgICAgIm1pbWUtdHlwZXMiOiAiXjMuMC4wIiwKKyAgICAgICAgIm9uLWZpbmlzaGVkIjogIl4yLjQuMSIsCisgICAgICAgICJvbmNlIjogIl4xLjQuMCIsCisgICAgICAgICJwYXJzZXVybCI6ICJeMS4zLjMiLAorICAgICAgICAicHJveHktYWRkciI6ICJeMi4wLjciLAorICAgICAgICAicXMiOiAiXjYuMTQuMCIsCisgICAgICAgICJyYW5nZS1wYXJzZXIiOiAiXjEuMi4xIiwKKyAgICAgICAgInJvdXRlciI6ICJeMi4yLjAiLAorICAgICAgICAic2VuZCI6ICJeMS4xLjAiLAorICAgICAgICAic2VydmUtc3RhdGljIjogIl4yLjIuMCIsCisgICAgICAgICJzdGF0dXNlcyI6ICJeMi4wLjEiLAorICAgICAgICAidHlwZS1pcyI6ICJeMi4wLjEiLAorICAgICAgICAidmFyeSI6ICJeMS4xLjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXhwcmVzcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZXhwcmVzcy1yYXRlLWxpbWl0IjogeworICAgICAgInZlcnNpb24iOiAiOC4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MtcmF0ZS1saW1pdC8tL2V4cHJlc3MtcmF0ZS1saW1pdC04LjMuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzdWbUZlSmtPMC9ydmltRUR1VUM1SDMwb3FVQzRFeU9oeUdjY2Zxb0xlYkIwb2lFWWZNN253UHJzRHNCTDFnc1Rwd2Z6WDhTRnkyTVQzVER5UnErYmc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImlwLWFkZHJlc3MiOiAiMTAuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxNiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZXhwcmVzcy1yYXRlLWxpbWl0IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXhwcmVzcyI6ICI+PSA0LjExIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mYXN0LWNoZWNrIjogeworICAgICAgInZlcnNpb24iOiAiMy4yMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LWNoZWNrLy0vZmFzdC1jaGVjay0zLjIzLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWg1KzFPenpmQ0MzRWY3VmJ0S2Rjdjd6c3N0VVF3VURsWXBVVHZqZVVzSkFzc1BnTG43UXpiYm9QdEw1cm8wNE1xMHJQT3NNemw3cTVoSWJSczJ3RDFBPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9kdWJ6enoiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9mYXN0LWNoZWNrIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwdXJlLXJhbmQiOiAiXjYuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1kZWVwLWVxdWFsLy0vZmFzdC1kZWVwLWVxdWFsLTMuMS4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mM3FROW9ReTlqMkFoQmUvSDlWQzkxd0xtS0JDQ1UvZ0RPbktOQVlHNWhzd083QkxLajA5SGM1SFlOejljR0krK3hscERDSWdEYWl0VnMwM0FUUjg0UT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmFzdC1kaWZmIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtZGlmZi8tL2Zhc3QtZGlmZi0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVnhQUDROcWJVamo2TWFBT2FmV2VVbjJjWFdMY0N0bGprbFV0WmYwSW5kNFhRK1FQdG1BMGIxOHpaeTBqSVF4K0V4UlZDUi9aUXBCbWlrNWxYc2hOc3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5Ly0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnktMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxoZC93RitMazk4SFpvVEN0bFZyYUh0Zmg1WFlpaklqYWxYY2s3c2FVdHVhblNEeUxNeG5IaFNYRURKcUh4RDdtc1I4RDB1Q21xbGt3akNWOHh2d0h3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Zhc3QtbGV2ZW5zaHRlaW4iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1sZXZlbnNodGVpbi8tL2Zhc3QtbGV2ZW5zaHRlaW4tMi4wLjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURDWHU2SWZocWNrczdUWktZM0h4cDN5NnFwaFk1U0pabXJXTURyS2NFUlNPWFdRZE1oVTlJZy9QWXJ6eXcvdWw5ak9JeWgwTjRNMHRiQzVob2RnOGR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Zhc3QtcHJpbnRmIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjEwIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LXByaW50Zi8tL2Zhc3QtcHJpbnRmLTEuNi4xMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3dUZ0c5TzRGVklkU2hoYlZGM0p4T2dTQlkyK2VQR3N1MlYvVU9OZ29DUHpGOVZZNlpkQk1Lc0hLQ1lRSFp3TmszcU5vdVVvbFJEc2dWeGNWQTVHMXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mYXN0LXVyaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LXVyaS8tL2Zhc3QtdXJpLTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pUGVlREtKU1dmNElFT2FzVlZya25YcGFCVjBJQXB6L2dwN1MyYmI3WjRMbGpibDJNR0pScUluWmlVclF3VjE2Y3B6dy9EM1M1ajVKdWxqL2dUNTJBQT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mYXN0aWZ5IgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZmFzdGlmeSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmFzdC14bWwtYnVpbGRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LXhtbC1idWlsZGVyLy0vZmFzdC14bWwtYnVpbGRlci0xLjEuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNFRKbi84RktMZXNsTEFIM2Rub2hYcUUzUVNveGtodmFNemVwT0laeXR3SlhaTzY5QmZ6MEhCZERIek9UT29uNkc1OVpyazZWUTJiRWl2MXQ2MXJma0E9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvTmF0dXJhbEludGVsbGlnZW5jZSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInBhdGgtZXhwcmVzc2lvbi1tYXRjaGVyIjogIl4xLjEuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmFzdC14bWwtcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiNS41LjgiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QteG1sLXBhcnNlci8tL2Zhc3QteG1sLXBhcnNlci01LjUuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWjdGaDJuVlFTYjJkK3BvRFZpTTA2M2l4MlpHdDlqbVkxbldoUGZIQk9LMkhnbmIvT1czUDRFdDNQLzgxU0VlajBKN1FiV3RKcXhPMDVoOFFZZks3TFE9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvTmF0dXJhbEludGVsbGlnZW5jZSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZhc3QteG1sLWJ1aWxkZXIiOiAiXjEuMS40IiwKKyAgICAgICAgInBhdGgtZXhwcmVzc2lvbi1tYXRjaGVyIjogIl4xLjIuMCIsCisgICAgICAgICJzdHJudW0iOiAiXjIuMi4wIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJmeHBhcnNlciI6ICJzcmMvY2xpL2NsaS5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmItd2F0Y2htYW4iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmItd2F0Y2htYW4vLS9mYi13YXRjaG1hbi0yLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDUxNjFCcWJ1Q2FTbkI4aklielFIT2xwZ3NQbUs1ckpWRGZES085MUF4czVOQzF1dTNIUlFtNnd0OWNkOS8rR3RRUUlPNTNKZEdYWG95RHBUQXNnWUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJzZXIiOiAiMi4xLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZkaXIiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmRpci8tL2ZkaXItNi41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRJYll0WmJ1Y09zMEJSR3FQSmtzaEpVWWRMK1NESDdkVk04Z2p5K0VScDNXQVVqTEVGSkUrMDJrYW55SHR3aldPbndyS1lCaXdBbU0wcDRrTEpBblhnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAicGljb21hdGNoIjogIl4zIHx8IF40IgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgInBpY29tYXRjaCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmVjaGEiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmVjaGEvLS9mZWNoYS00LjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT1AySVVVNkhlWUtKaTNpMHo0QTE5a0hNUW9MVnM0SGMrRFBxcXhJMmgvRFBaSFRtL3Zqc2ZDNlAwYjRqQ015MTRYaXpMQnF2bmRRK1VpbEQ3NzA3Snc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZpZ3VyZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlndXJlcy8tL2ZpZ3VyZXMtMy4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlhZHVRRlJLTFhZT0dnRW42QVphdTkwajNnZ1NPeWlxWFUwRjlKWmZlWFloTmErSms0WCtzNDVBMnpnNWpuczg3R0FGYTM0QkJtMmtYdzRYcE5jYmRnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4xLjAuNSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZpZ3VyZXMvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMS4wLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZiUm9yQjVGVVFXdmxhMTZVOFIvcWdhRkl5YTJxR3p3RHJObUNadVlLcmJkU1VNRzZJMVpDR1FSZWZrUlZodU9rSUdWbmU3QlEzNURTZm8xcXZKcUZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC44LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZpbGUtZW50cnktY2FjaGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsZS1lbnRyeS1jYWNoZS8tL2ZpbGUtZW50cnktY2FjaGUtOC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhYVFV3Q3Zpc2E1b2FjTkdSUDlTZk50WUJOQU1pK1JQd0JGbWJsWkVGN043c3dIWVFTNi9aZms3U1J3eDRENWozQ0gyMTFZTlJjbzFERU1OVmZaQ25RPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZsYXQtY2FjaGUiOiAiXjQuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmluYWxoYW5kbGVyIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmFsaGFuZGxlci8tL2ZpbmFsaGFuZGxlci0yLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzhLb1pnUlpOK2E1ck53cVR4bFpaZVBqVC80Y25tMFJPVjcwTGVkUkhaMHA4dTlmUklEMGhKVVpRcGtLTHpybzhMZm1DOHN4MjNiWTZ0Vk54djhwUUE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImRlYnVnIjogIl40LjQuMCIsCisgICAgICAgICJlbmNvZGV1cmwiOiAiXjIuMC4wIiwKKyAgICAgICAgImVzY2FwZS1odG1sIjogIl4xLjAuMyIsCisgICAgICAgICJvbi1maW5pc2hlZCI6ICJeMi40LjEiLAorICAgICAgICAicGFyc2V1cmwiOiAiXjEuMy4zIiwKKyAgICAgICAgInN0YXR1c2VzIjogIl4yLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTguMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXhwcmVzcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmluZC1teS13YXktdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC1teS13YXktdHMvLS9maW5kLW15LXdheS10cy0wLjEuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTg1TDlab1h0TkFleTNZNlorZUJXVzY1OGtPL013Ujd6SWFma0lVUFVNZjNpc1pHME5DczJwalcyd3RqeEFLdUpQeE1Bc0hVSVA0WlBHdjBvNWd5VEE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtNS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTc4L1BYVDF3bExMRGdUekRzN3NqcTloenowdlhEK3puKzd3eXBFZTRmWFF4Q21kbXFmR3NFUFF4bWlDU1FJM2FqRlY5MWJWU3N2TnRySlJpVzZuR25nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxvY2F0ZS1wYXRoIjogIl42LjAuMCIsCisgICAgICAgICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmluZC11cC1zaW1wbGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC1zaW1wbGUvLS9maW5kLXVwLXNpbXBsZS0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWZkNE83enBxSGVSeWc0UGZEUXNYbWxEZTJQZmRIdEp0NkFrdDhqT1dhQXBMT1prNUpYczZWTVIyOWx6MDNwUmU5bXB5a3JSQ1lJWXhhSlljZnBuY1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mbGF0IjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZsYXQvLS9mbGF0LTUuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iNnN1RUQrNS8zclRwVUJkRzFndXBJbDhNUEZDQU1BMFFYd21sakxodkNVS2NVdmRFNGdXa3k5enB1R0NjWEhPc3o0Sjl3UEdOV3E2T0twbUl6ejNoUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJmbGF0IjogImNsaS5qcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZmxhdC1jYWNoZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mbGF0LWNhY2hlLy0vZmxhdC1jYWNoZS00LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZjdjY0ZQSzNTWEZIcHgxNVVJR3lSSi9GSlFjdHVLWjB6VnVOM2ZyQm80SG5LM2NheTlWRVcwUjZ5UFlGSEMwQWdxaHVrUHpLanEyMnQ1RG1BeXFHeXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmxhdHRlZCI6ICJeMy4yLjkiLAorICAgICAgICAia2V5diI6ICJeNC41LjQiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZsYXR0ZWQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjQuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmxhdHRlZC8tL2ZsYXR0ZWQtMy40LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBqRHNlN1J6aGNQa0lKd3k1dDdLUFdRU1o5Y0FielFYY2Fmc2V0UW9EN3NPSlJRbEdpa05ieDd5WnAyT290RG5KeXJEY2J5UnEzVHRiMThpWU9xa3hBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZuLm5hbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm4ubmFtZS8tL2ZuLm5hbWUtMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdSbm1CNWdQeUpwQWhUUWRTWlRTcDl1YVBTdmwwOUtvWWNNUXRzQjlyUW9PbXpzOWRINmZmZWNjSCtaK2N2NlA2OEh1NWJDNkpqUmg0QWgvbUhTTlJ3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9mb3JlZ3JvdW5kLWNoaWxkIjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcmVncm91bmQtY2hpbGQvLS9mb3JlZ3JvdW5kLWNoaWxkLTMuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nSVhqS3F0RnVXRWd6RlJKQTlXQ1FlU0pMWkRqZ0pVT01DTXp4dHZGcS8zN0tvak0xQkZHdWZxc0N5MHI0cVNRbVlMc1pZTWV5UnF6SVdPTXVwMDNzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjYiLAorICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjQuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE0IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ZvcmVncm91bmQtY2hpbGQvbm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0IjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQtNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ6eVoxZTg4dzlPMWlOSmJLbk9sdllUcldQRGw0Nk8xYkcwRDNYSW52Kzl0a1ByeHJOOGpVVVRpRmxEa2ttS1dnbjFNNkNmSUExM1N1R3FPYTlLb3J3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZm9yd2FyZGVkIjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcndhcmRlZC8tL2ZvcndhcmRlZC0wLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnVSRzBmcEJ0UkhTVENPQVNlNmhEMjU4dEV1YkZvUkxiNFpOQTZOeE1WSE53MmdPY3dIbzl3eWFibHpNek9BNXo5eEE5TDFLTmprL050Nk1UOWFZb3c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZnJlc2giOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJlc2gvLS9mcmVzaC0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUngvV3ljWjYwSE9hcUxLQWk2Y0hSS0tJN3p4V2JKMzFNaG50bXR3TW9hVGVGN1hGSDloaEJwOHZJVGFNaWRmbGpSUTZlWVdDS2thVEsreWtWSkhQMkE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcm9tLy0vZnJvbS0wLjEuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHdlMjBlRjFPeFZ4cC9NTC9rcTJwMXVjNkt2RksvK3ZzOFdqRWJlS21WMkhlMjJNS203WUYyQU5JdCtFT3FoSjVMM0svU3V1UGhrMGhXUURqT00yM2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZnMucmVhbHBhdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnMucmVhbHBhdGgvLS9mcy5yZWFscGF0aC0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT08wcEgybEs2YTBoWm5BZGF1NUl0ekhQSTZwVWx2STdqTVZueFVRUnR3NG93RjJ3azhsT1NhYnRHRENUUDRHZ3JnMk1iR25XTzlYOEsxdDQrZkdNRHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZnNldmVudHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnNldmVudHMvLS9mc2V2ZW50cy0yLjMuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXhvRGZYK2ZMN2ZhQVRuYWdtV1BwYkZ0d2gvUjc3V21NTXFxSEdTNjVDM3Z2QjBZSHJnRitCMVltWjM0NDF0TWo1bjYzazAyMTJYTm9Kd3psaGZmUXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJoYXNJbnN0YWxsU2NyaXB0IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgIm9zIjogWworICAgICAgICAiZGFyd2luIgorICAgICAgXSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeOC4xNi4wIHx8IF4xMC42LjAgfHwgPj0xMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnVuY3Rpb24tYmluZC8tL2Z1bmN0aW9uLWJpbmQtMS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdYSE54SDdxWDl4RzVtSXd4a2h1bVRveC9NSVJOY09nRHJ4V3NNdDJwQXIyM1dIcDZNclJsTjdGQlNGcENwcitvVk8wRjc0NGlVZ1I4Mm5KTWZHMlNBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dlbnN5bmMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMC1iZXRhLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dlbnN5bmMvLS9nZW5zeW5jLTEuMC4wLWJldGEuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2hON05hc2tZdk1ETFFZNTVnblczTlErbWVzRUFlcFRxbGcrVkViajd6enFFTUJWTmh6Y0dZWWVxRm8vVGxZejZlUWlGY3AxSGNzQ1pPK25HZ1M4emc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1jYWxsZXItZmlsZS8tL2dldC1jYWxsZXItZmlsZS0yLjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRHlGUDNCTS8zWUhUUU9DVUwvdzBPWkhSMGxwS2VHcnhvdGNIV2NxTkVkbmx0cUZ3WFZmaEVCUTk0ZUlvMzRBZlFwbzByR2tpNGN5SWlmdFkwNmgyRmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiNi4qIHx8IDguKiB8fCA+PSAxMC4qIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtZWFzdC1hc2lhbi13aWR0aC8tL2dldC1lYXN0LWFzaWFuLXdpZHRoLTEuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DUStiRU8rVHZhL3FsbXcyNGRDZWp1bEs1cE16Vm5VT0ZPaWpWb2dkM0tRczA3SG5SSWdwOFRHaXB2Q0NSVDA2eGVZRWJwYmd3YUN4Z2xGeWl1SWNtQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LWludHJpbnNpYy8tL2dldC1pbnRyaW5zaWMtMS4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlmU2pTYW9zL2ZSSVZJcCt4U0psRTZsZndoRVM3TE50S2FDQklhbUhzanIybmExQmlBQkpQbzBtT2pqejhHSkRVUmFybUNQR3FhaVZnNW1mamI5OENRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjYWxsLWJpbmQtYXBwbHktaGVscGVycyI6ICJeMS4wLjIiLAorICAgICAgICAiZXMtZGVmaW5lLXByb3BlcnR5IjogIl4xLjAuMSIsCisgICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKKyAgICAgICAgImVzLW9iamVjdC1hdG9tcyI6ICJeMS4xLjEiLAorICAgICAgICAiZnVuY3Rpb24tYmluZCI6ICJeMS4xLjIiLAorICAgICAgICAiZ2V0LXByb3RvIjogIl4xLjAuMSIsCisgICAgICAgICJnb3BkIjogIl4xLjIuMCIsCisgICAgICAgICJoYXMtc3ltYm9scyI6ICJeMS4xLjAiLAorICAgICAgICAiaGFzb3duIjogIl4yLjAuMiIsCisgICAgICAgICJtYXRoLWludHJpbnNpY3MiOiAiXjEuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2V0LXBhY2thZ2UtdHlwZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtcGFja2FnZS10eXBlLy0vZ2V0LXBhY2thZ2UtdHlwZS0wLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGp6dUt0WTY0R1lmV2l6TkFKMGZyOVZxdHRaa05pSzJpUzQzMEx0SUh6akJFcjZiWDhBbTJ6bTRzVzRSbzV3aldXNWNBbFJMMXFBTVRjWGJqTkFPMlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2V0LXByb3RvIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1wcm90by8tL2dldC1wcm90by0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc1RTZkJqb1hCcDg5SnZJS0llZnF3N1UyQ0NlYnNjNzRraVk2YXdpR29nS3RvU0diZ2pZRS9HLytsOXNGM01XRlBOYzlJY29PQzRPRGZLSGZ4Rm1wMGc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImR1bmRlci1wcm90byI6ICJeMS4wLjEiLAorICAgICAgICAiZXMtb2JqZWN0LWF0b21zIjogIl4xLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9nZXQtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1zdHJlYW0vLS9nZXQtc3RyZWFtLTYuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10czZXaSsyajNqUWpxaTcwdzVBbE44REZua1N3QytNcW14RXpkRUFMQjJxWFpZVjNYL2IxQ1RmZ1BMR0pOTWVBV3hkUGZVOEZPMW1zM05VZmFIQ1BZZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dldC10c2NvbmZpZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMTQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LXRzY29uZmlnLy0vZ2V0LXRzY29uZmlnLTQuMTQuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteVRiKzhEWHpEUkV6Z3ZZbWg2czl2SHNTVkNIZUMwRzNQSTViRVhOQkh0bXNoUG5PK1M1TzdxZ0xFT24wSTVRdk15NmtwWk44SzFOS0d5aWxMYjkzd0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicmVzb2x2ZS1wa2ctbWFwcyI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ByaXZhdGVudW1iZXIvZ2V0LXRzY29uZmlnP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEzLjAuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItMTMuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Xamx5cm9sbW04dURwbS9vZ0d5WFpYYjFaK0NhMkI4TmJKd3FCVmcwYXhLOUdiQmVvUzd5R1Y2dmpYbllkR202WDUzaWVoRXV4eGJ5aUtwOFFtTjRWdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQmx1ZU9hay0xLjAuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWluaW1hdGNoIjogIl4xMC4yLjIiLAorICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4zIiwKKyAgICAgICAgInBhdGgtc2N1cnJ5IjogIl4yLjAuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiMTggfHwgMjAgfHwgPj0yMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9nbG9iLXBhcmVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTYuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YeHdJOEVPaFZRZ1dwNmlETCszYjByODZmNGQ2QVg2elNVNTVIZkI0eWRDRXVYTFhjNUZjWWVPdStubkdmdFM0VEVqdS8xMXJ0NEtKUFRNZ2JmbXY0QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpcy1nbG9iIjogIl40LjAuMyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMC4xMy4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9nbG9iYWwtZGlycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iYWwtZGlycy8tL2dsb2JhbC1kaXJzLTMuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OQmNHR0ZiQkE5czFWekQ0MVFYREcrMysrdDlNbjV0MUZwTGRoRVNZNm9LWTRnWVRGcFg0d08zc3FHVWEwU3JqdGJmajNzelgwUm5lbW1yVlJVZFVMQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpbmkiOiAiMi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ2xvYmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE3LjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFscy8tL2dsb2JhbHMtMTcuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xb1YrSEsyeUZsLzM2NnQyL0NiMyt4eFBVbzVCdU15bm9tb0RtaWFaQklkYnMrMHBZYmpmWlUrdHdMaEdLcDR1Q1ovK05idHBWZXBINWJHQ3hSeXkyZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dvcGQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ29wZC8tL2dvcGQtMS4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpVS1JoNi9rVUZvQWlUQXRUWVBaSjNodzl3Tnh4K0JJQk9pam5sRzlQbnJKc0NjU2pzMXd5eUQ2dkpwYVl0Z256RHJLWVJTcWYzT082UmZhOTN4c1JnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIuMTEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYWNlZnVsLWZzLy0vZ3JhY2VmdWwtZnMtNC4yLjExLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SYko1L2ptRmNOTkNjRFY1bzllVG5CTEovSHN6V1YwUDczYmMrRmY0blMvckpqK1lhUzZJR3lpT0wwVm9CWVgrbDFXcmwzazYzaC9LckgrbmhKMFh2UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ncmVtbGluIjogeworICAgICAgInJlc29sdmVkIjogImdyZW1saW4tamF2YXNjcmlwdCIsCisgICAgICAibGluayI6IHRydWUKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvZ3JlbWxpbi1tY3AiOiB7CisgICAgICAicmVzb2x2ZWQiOiAiZ3JlbWxpbi1tY3AiLAorICAgICAgImxpbmsiOiB0cnVlCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2dyZW1saW50IjogeworICAgICAgInJlc29sdmVkIjogImdyZW1saW50IiwKKyAgICAgICJsaW5rIjogdHJ1ZQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzIjogeworICAgICAgInZlcnNpb24iOiAiNC43LjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhbmRsZWJhcnMvLS9oYW5kbGViYXJzLTQuNy45LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00RTcxRTBycE9hUXVKUjJBM3hEWitHTTFIeVdZdjFjbFI1OHRDOGVtUU5lUWUzUkg3TUF6U2JhdCtWMHdHNzhMUUJvNm02YnpTRy9MNHBCdUNzZ25VUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtaW5pbWlzdCI6ICJeMS4yLjUiLAorICAgICAgICAibmVvLWFzeW5jIjogIl4yLjYuMiIsCisgICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIsCisgICAgICAgICJ3b3Jkd3JhcCI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImhhbmRsZWJhcnMiOiAiYmluL2hhbmRsZWJhcnMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC40LjciCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAidWdsaWZ5LWpzIjogIl4zLjEuNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaGFzLWFuc2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWFuc2kvLS9oYXMtYW5zaS00LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUXI0UnRUbTMweHZFZHFVWGJTQlZXRHUrUHJUb2tKT3dlL0ZVK1ZkZkpQaytNWEFQb2VPektwUnlyRFRuWklKd0FrUTRvQkxUVTUzbnUwSHJrRi9aMkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1yZWdleCI6ICJeNC4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy00LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXlrSlQvUTFLalRXY3RwcGdJQWdmU08wdEtWdVpVamhnTXIxN2txVHVtTWw2QWZ2M0VJU2xlVTdxWlV6b1hERlRBSFREQzROT29HL1p4VTNFdmxNUFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9oYXMtc3ltYm9scyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtc3ltYm9scy8tL2hhcy1zeW1ib2xzLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xY0ROZHdKMkphb2htYjNzZzRPbUthTUJ3dUM0OHNZbmk1SFV3MkR2c0M4TGpHVExLOWgrZWIxWDZSeXVPSGU0aFQwVUxDVzY4aW9taGpVb0tVcWxQUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2hhc293biI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXNvd24vLS9oYXNvd24tMi4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVqNEFoZmhmTDJRMnpwTW1MbzdVMVV2OStQeWhJWnBnUUxHVDFGOW1pSUdtaUNKSW9DZ1NtY3pGZHJjOTdtV1Q0a1ZZNzJLQStXbm5oSjVwZ2hTdlNnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9oZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oZS8tL2hlLTEuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GLzFEblVHUG9wT1JaaTBuaStDdnJDZ0hRNUZ5RUFIUkxTQXB1WVdNbXJiU3dvTjJNbi83aytHbDM4Z0puUjd5eURaazZXTFh3aUdvZDFKT1dOREtHdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJoZSI6ICJiaW4vaGUiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2hvbm8iOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEyLjE0IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob25vLy0vaG9uby00LjEyLjE0LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hbTV6ZmczeXU2c3FuNXlqS0JOcWhuVFg3Q3YrbTAwb3grN2piYUtrckxNUko0ckFkbGRkMXhQZC9KemJCV3NwcWFRdjZSU1RyZ0ZOOTVFc2ZoQys3dz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNi45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2hvc3RlZC1naXQtaW5mbyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjkuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob3N0ZWQtZ2l0LWluZm8vLS9ob3N0ZWQtZ2l0LWluZm8tOS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU00MjJoN28vQlIzcm1DUThVSGk3Y3l5TXFLbHRkUDlVbytKMmZYSytSU0FZK3dUY0tPSVJ5aFR1S3Y0cW4rREpmM2crUEw4OTBBeklkNUtacFgrQ0JnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxydS1jYWNoZSI6ICJeMTEuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTcuMCB8fCA+PTIyLjkuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaG9zdGVkLWdpdC1pbmZvL25vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMS4zLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS0xMS4zLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU54VkZ3TEFucmQ5aTdLVUJ4QzREclVobWdqek9zKzFRbTUwRDNvRjEvb0wrcjFOcFo0Z0E3eHZHMC96SjhldlI3eklLbjR2TGY3cVROZHVXRnRDclJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIyMCB8fCA+PTIyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9odG1sLWVzY2FwZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lc2NhcGVyLy0vaHRtbC1lc2NhcGVyLTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IMmlNdGQwSTRNdDVlWWlhcFJkSURqcCtYemVsWFEwdEZFNEpTN1lGd0ZldlhYTW1PcDlteU5yVXZDZzBENndzOGlxa1JQQmZLSGdid2lnMVNtbExmZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9odHRwLWVycm9ycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLWVycm9ycy8tL2h0dHAtZXJyb3JzLTIuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00RmJSZEFYK2JTZG1vNEFVRnVTMFdOaVB6OE5nRnQrcjhUaGdOV21scmpRanQxUTdaUjkrelRsY2UyODU5eDRLU1hyd0lzYWVUcURvS1FtdFA4cExtUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZGVwZCI6ICJ+Mi4wLjAiLAorICAgICAgICAiaW5oZXJpdHMiOiAifjIuMC40IiwKKyAgICAgICAgInNldHByb3RvdHlwZW9mIjogIn4xLjIuMCIsCisgICAgICAgICJzdGF0dXNlcyI6ICJ+Mi4wLjIiLAorICAgICAgICAidG9pZGVudGlmaWVyIjogIn4xLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC44IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXhwcmVzcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odW1hbi1zaWduYWxzLy0vaHVtYW4tc2lnbmFscy0yLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQjRGRlo2cS9UMmpoaGtzZ2tiRVczSEJ2V0lmRFc4NXNua1FnYXd0MDdTN0o1UVhUazZCa05WKzB5QWVack01UXBNQWRZbG9jR29sam4wc0ovV1FrRnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAuMTcuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaHVza3kiOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjEuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHVza3kvLS9odXNreS05LjEuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWdzNXl0YU5qQnJoNU93M3pydmRVVVkrMFZ4SXVXVkw0aTlpcnQ2ZnJpVitCcWRDZm1WMTFDUVRXTWlCWVdIYlhoY28rSjFrSGZUT1VrZVBoQ0R2TUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAiaHVza3kiOiAiYmluLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy90eXBpY29kZSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjcuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaW05RGpFRFE1NXM5Zkw0RVl6T0F2MHlNcW1NQlNacDZHMFZ2RnlUTVBLV3hpU0JIVWo5TlcvcXFMbVhVd1hyck03QXZxU2xUQ2Z2cVJiMGNNOHlZcXc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNhZmVyLWJ1ZmZlciI6ICI+PSAyLjEuMiA8IDMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2V4cHJlc3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2llZWU3NTQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWVlZTc1NC8tL2llZWU3NTQtMS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRjeXFoRHZYMUM0NmxYWmNWcUNwSytGdE1SUVZkSU1ONi9EZjVqczJ6b3VVc3FHN0k2c0Z4aXRJQys3S1lLMjlLZFhPTEhkdTl6TDRzRm5vVlFucWFBPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaWdub3JlIjogeworICAgICAgInZlcnNpb24iOiAiNS4zLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lnbm9yZS8tL2lnbm9yZS01LjMuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHNCVE5VcVFURHdrV3RjZFlJMmkwNlkvblVCRXNORURKS2pXZGlnTHZlZ3k4a0R1SkFTOHVSbHBra2NRcHlFWEwwWi9wakR5NUhCbU1qUkNKMmdxK2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaW1wb3J0LWZyZXNoIjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltcG9ydC1mcmVzaC8tL2ltcG9ydC1mcmVzaC0zLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFIzS2ZyVFpUWUxQQjZqVWpmeDZNRjlXY1dySEw5c3U1VE9iSzRaa1lnQmRXS1BPRm9Tb1FJZEV1VHVSODJwbXR4SDJzcFdHOWg2ZXR3ZnIxcExCcVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicGFyZW50LW1vZHVsZSI6ICJeMS4wLjAiLAorICAgICAgICAicmVzb2x2ZS1mcm9tIjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2ltcG9ydC1sb2NhbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbXBvcnQtbG9jYWwvLS9pbXBvcnQtbG9jYWwtMy4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJTUGx1bjFKVVBXb002dDNGMGR3MEZrQ0YvaldZOGt0dGNZNGY1OTlHTFRTamgyT0N1dWhkVGtKUXNFY1p6QnFiWFpHS01LMk9xVzFvWnNqdGYvZ1FBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInBrZy1kaXIiOiAiXjQuMi4wIiwKKyAgICAgICAgInJlc29sdmUtY3dkIjogIl4zLjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiaW1wb3J0LWxvY2FsLWZpeHR1cmUiOiAiZml4dHVyZXMvY2xpLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaW11cm11cmhhc2giOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW11cm11cmhhc2gvLS9pbXVybXVyaGFzaC0wLjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm1YTVo2d3V2RG1MaUhFbWw5eWt6cU82bHdGYm9mMEdHNElrY0dhRU5kQ1JERG1NVm5ueTdzNUhzSWdIQ2JhcTB3Mk15UGhEcWtoVFVnUzJMVTJQSEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjguMTkiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2luZGVudC1zdHJpbmciOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5kZW50LXN0cmluZy8tL2luZGVudC1zdHJpbmctNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVkRERadTRBMk95SUs3THIvMnpHK3c1am1idWsxRFZCbkV3UkVRdkJ6c3BCSmtDRWJSYThHeFUxbGdoWWNhR0pDblJXaWJqRFhscTc3OVgxL3k1eHdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaW5kZXgtdG8tcG9zaXRpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5kZXgtdG8tcG9zaXRpb24vLS9pbmRleC10by1wb3NpdGlvbi0xLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWWc3K3p0Umtxc2xNQVMyaUZhVStPYTRLVFNpZHI2M09zRkdsT3JKb1c5ODFrSVlPM0NHQ1Mzd0E5NVAxbVVpL0lWU0prbjBENDc5S1RKcFZwdkZOdXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pbmZsaWdodCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmZsaWdodC8tL2luZmxpZ2h0LTEuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rOTJJL2IwOHE0d3ZGc2NYQ0x2cWZzSENyanJGN3lpWHNRdUlWdlZFN044MlczK2FxcHp1VWRCYmZoV2N5L0ZaUjMvNElnZmxNZ0tMT3N2UERyR0NKQT09IiwKKyAgICAgICJkZXByZWNhdGVkIjogIlRoaXMgbW9kdWxlIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCBsZWFrcyBtZW1vcnkuIERvIG5vdCB1c2UgaXQuIENoZWNrIG91dCBscnUtY2FjaGUgaWYgeW91IHdhbnQgYSBnb29kIGFuZCB0ZXN0ZWQgd2F5IHRvIGNvYWxlc2NlIGFzeW5jIHJlcXVlc3RzIGJ5IGEga2V5IHZhbHVlLCB3aGljaCBpcyBtdWNoIG1vcmUgY29tcHJlaGVuc2l2ZSBhbmQgcG93ZXJmdWwuIiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJvbmNlIjogIl4xLjMuMCIsCisgICAgICAgICJ3cmFwcHkiOiAiMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaW5oZXJpdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5oZXJpdHMvLS9pbmhlcml0cy0yLjAuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItay92R2FYNC9ZbGEzV3p5TUN2VFFPWFllSUh2cU9LdG5xQmR1elRIcHpwUVp6QXNrS01oWjJLK0VuQmlTTTl6R1NvSUZlTXBYS3hhNGRZZVpJUXFld1E9PSIsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2luaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmkvLS9pbmktMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdQbkY0b04zQ3ZaRjIzQURoQTV3UmFZRVFwSjhxeWdTa2J0VFhXQmVYV1htRVZSWEsrMUlUY2lIV3dIaHNqdjFUbVcwTWdhY0l2NmhFaTVwWDVOUWRBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lwLWFkZHJlc3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lwLWFkZHJlc3MvLS9pcC1hZGRyZXNzLTEwLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFhBREh4WG12VDkrQ1J4aFhnNTZMSm92RStibVduRVdCNzhMQjgzVlpUcHJLVG1hQzVRZnJ1WG9jeHpUWjJLbDBETndLdUJkbEloakw4TGVZOFNmOFE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDEyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pcGFkZHIuanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjkuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXBhZGRyLmpzLy0vaXBhZGRyLmpzLTEuOS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wS0kvNjA3eG94U1RvSDdHak4xRmZTYkxvVTArYnRUaWNqc1FTV1FsaC9oWnlrTjhLcG1NZjd1WXdQVzNSK2FrWjZSL3cxOFpsWFNIQllYaVlVUE8zZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC4xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtYXJyYXlpc2giOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYXJyYXlpc2gvLS9pcy1hcnJheWlzaC0wLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItenowNlM4dDBvem9EWE1HK3ViZTI2emVDVE5YY0tJUEpaSmk4aEJyRjRpZENMbXM0Q0c5UXRLN3FCbDFib2k1T0R6RnBqc3diNUpQbUhDYk1wamFZemc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtZXh0Z2xvYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRnbG9iLy0vaXMtZXh0Z2xvYi0yLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2JLYkFOa042MDNWaTRqRVp2NDlMZVZKTW40eUd3c2J6WndvckVveUVpdXRzTjNuSllkYk8zNnpmaEdKNlFFRHBPWklGa0R0bnE1SlJ4bXZsM2pzb1E9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC8tL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50LTUuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01WEhZYVN5aXFBRGI0Um5aMUJkYWQ2Y1BwOFRvaXNlNFR6RWpjT1lESFprVENiS2dpVWw3V1RVQ3BOV0h1eG1EdDkxd25zWkJjOXhpbk56b3B2M0pNUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJnZXQtZWFzdC1hc2lhbi13aWR0aCI6ICJeMS4zLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtZ2VuZXJhdG9yLWZuIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWdlbmVyYXRvci1mbi8tL2lzLWdlbmVyYXRvci1mbi0yLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY1RJQjR5UFlML0dydzBFYVN6QVN6ZzZiQnk5Z3FDb2Z2V044b2tUaEFZSXhLSlpDK3VkbFJBbUdiTTBYTGVuaUVKU3M4dUVnSFBHdUhTZTFYc09MU1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pcy1nbG9iIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWdsb2IvLS9pcy1nbG9iLTQuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14ZWxTYXlISDM2WmdFN1pXaGxpN3BXMzRoTmJObDhPanY1S1Zta0pENGhCZEQzdGg4VGZrOXZZYXNMTSttWFdPWmhGa2daZnhoTFNucndScjRlbFNTZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaXMtZXh0Z2xvYiI6ICJeMi4xLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pcy1pbnN0YWxsZWQtZ2xvYmFsbHkiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtaW5zdGFsbGVkLWdsb2JhbGx5Ly0vaXMtaW5zdGFsbGVkLWdsb2JhbGx5LTAuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pd0dxTzNKMjFhYVNrQzdqV25IUC9kaWZhendTN1NGZUlxeHY2d0V0TFU4WTVLbHpGVGp5cWNTSVQwZDhzNCtkRGhLeXRzazlQSloyQmtTNWVad1FSUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJnbG9iYWwtZGlycyI6ICJeMy4wLjAiLAorICAgICAgICAiaXMtcGF0aC1pbnNpZGUiOiAiXjMuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lzLXBhdGgtaW5zaWRlIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBhdGgtaW5zaWRlLy0vaXMtcGF0aC1pbnNpZGUtMy4wLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZkNGdBQmIreWNHQW1Lb3U4ZU1mdEN1cFNpcjVsUnhxZjRhRC92ZDBjRDJxYzRITDA3T2pDZXVITXI4Um80Q29NYWVDS0RCMC9FQ0JPVldqVHdVdlBRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBsYWluLW9iai8tL2lzLXBsYWluLW9iai0yLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVduZnlSd3hMLytTc3JXWWZPcFV0ejViM1lEK255ZmtIdmpiY2Fuems4emd5TzRBU0Q2N3VWTVJ0OGs1Yk00bExNRG5YZnJpUmhPcGVtdytOZlQxZUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pcy1wcm9taXNlIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXByb21pc2UvLS9pcy1wcm9taXNlLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1odnBvSTZrb3JoSk1uZWoyODVkU2c2bnUxK2U2dXhzN3pHM0JZQW01YnlxRHNnSk5Xd3h6TTZ6NmlaaUFnUVI0VEozMEptQlRPd3FaVXczV2x5SDNBUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtcmVmZXJlbmNlIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXJlZmVyZW5jZS8tL2lzLXJlZmVyZW5jZS0zLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaXhrSm9xUXZBUDg4RTZ3THlkTEdHcUNKc3JGVW5xb0g2SG5hY3pCOFhtREgxb2FXVSt4eGRwdHZpa1RnYUVodFo1M0t5NllYaUJ1VUkyV1hMTUN3anc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL2VzdHJlZSI6ICJeMS4wLjYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2lzLXN0cmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhGb2lKaVRsNjNubitrc3RIR0J0ZXdXU0tuUUxweWIxNTVLSGhlQTFsMzl1dnRPOW5XSW9wMXAzdWRxUGNVZC94YkYxVkxNTzRuN09JNnA3UmJuZ0RnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXMtdW5pY29kZS1zdXBwb3J0ZWQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtdW5pY29kZS1zdXBwb3J0ZWQvLS9pcy11bmljb2RlLXN1cHBvcnRlZC0wLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIta254RzJxNFVDM3U4c3RSR3lBVkpDT2R4Rm12NURaaVJjZGxJYUFRWEFiU2ZKeWErT2hvcE5vdExRcnN0QmhxdXF1NFpwdUtiRGMvOFM2bWdYZ1BGUHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pc2V4ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SSHhNTHA5bG5LSEdIUm5nOVFGaFJDTWJZQWNWcG42OXNtU0djcTNmMzZ4amdWVldUaGo0cXFMYlRMbHE3U3NqOEIrZklRMUV1Q0VHSTJsS3N5UWVJdz09IiwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogeworICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS8tL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS0zLjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzhkcHNGK3IwV1YvOE1OUktmbm1ydENXaHVLanhycTJ3K2pwekJMNVVaS1RpMkxlVlduV09tV1J4Rmxlc0pPTm1jK3dMQUd2S1FaRU9hbmtvMExGVGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudC8tL2lzdGFuYnVsLWxpYi1pbnN0cnVtZW50LTYuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WdGdrN0wvUjJKSHl5R1cwN3Nwb0ZsQjgvbHBqaU9MVGpNZG1zNkFGTXJhWXQzQmFKYXVvZC9OR3JmblZHL3k0SXgxSkV1TVJQRFBFajJ1YSt6ejEvUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4yMy45IiwKKyAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjMuOSIsCisgICAgICAgICJAaXN0YW5idWxqcy9zY2hlbWEiOiAiXjAuMS4zIiwKKyAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4yLjAiLAorICAgICAgICAic2VtdmVyIjogIl43LjUuNCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItcmVwb3J0Ly0vaXN0YW5idWwtbGliLXJlcG9ydC0zLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR0NmRTFtdHNIR09FTENVOGUvWjdZV3pwbXlicngvK2RTVGZMcnZZOHFSbWFZNnpYVEtXbjZXUUlqYUFGdzA2OWljbTZHVk1Oa2d1ME56STRpUFpVTnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4zLjAuMCIsCisgICAgICAgICJtYWtlLWRpciI6ICJeNC4wLjAiLAorICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItcmVwb3J0L25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTcuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xcENBdlJsOXN0dU9IdmVLc243SG5jSlJ2djUwMXFJYWNLelFsTy8rTHd4YzkrMHEyd0x5djREZnZ0ODAvRFBuMnBxT0JzSmREaW9nWEdSOStPdndSdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcy8tL2lzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcy01LjAuNi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWcyZCtFbTRLaXpaQzVuaVdoUWFJb21nZjVXbEw0dk9Palo1eEdDbUY4U25QRS9tRFdXWGd2UkV4ZGNwQ2doOWxMUlJhMS9mU1lwMnltbWJKMXBJK0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjIzIiwKKyAgICAgICAgImRlYnVnIjogIl40LjEuMSIsCisgICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1yZXBvcnRzIjogeworICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLXJlcG9ydHMvLS9pc3RhbmJ1bC1yZXBvcnRzLTMuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IR1lXV1MvZWhxVFYzeE4xMGkyM3RrUGtwSDQ2TUxDSU1GTkNhYUtOYXZBWFRGMVJrcXhhd0VQdG5qbkdaNlhLU0luQktraU9BNUJLUythWmlZM0F2QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJodG1sLWVzY2FwZXIiOiAiXjIuMC4wIiwKKyAgICAgICAgImlzdGFuYnVsLWxpYi1yZXBvcnQiOiAiXjMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2phY2tzcGVhayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qYWNrc3BlYWsvLS9qYWNrc3BlYWstMy40LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9HbFpRcHoyeWZhaEEvUmQxWThDZDlTSUVzcXZYa0xWb1N3L2Nnd2huaEZNRGJzUUZlWllvSko3YklaQlM5QmNhbVVXOTZhc3EvbnBQV3VnTStSUUJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAaXNhYWNzL2NsaXVpIjogIl44LjAuMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfSwKKyAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBwa2dqcy9wYXJzZWFyZ3MiOiAiXjAuMTEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC8tL2plc3QtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ba1hJSUZjYWF6eW12ZXkyaS8rRjk0WFJuTTZUc1ZMWkRoQk1Mc2QxU2YvVzB3enN2dnBqZXlVckNaRDZIR0c0U0RZUGdESkRCS2VpSlRCYjEwV3pNZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9jb3JlIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiaW1wb3J0LWxvY2FsIjogIl4zLjIuMCIsCisgICAgICAgICJqZXN0LWNsaSI6ICIzMC4zLjAiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImplc3QiOiAiYmluL2plc3QuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9CisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtY2hhbmdlZC1maWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jaGFuZ2VkLWZpbGVzLy0vamVzdC1jaGFuZ2VkLWZpbGVzLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQi83Q255NmNWNUF0Nk0yNUVXRGdmOVM2MTdsSGl2YW1MOHZsNktFcEpxa1N0YXV6Y0c0ZStXUGZEZ01NRitINEZWSDRBMlBMUnl2Z0RKYW40NDQxUUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZXhlY2EiOiAiXjUuMS4xIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1jaXJjdXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtY2lyY3VzLy0vamVzdC1jaXJjdXMtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QeVhxNXN6ZVNmUi80ZjFsWXFDbW1RamgwdnFEa1VSVVlpOU42d2huSGpsUno0SVVRZk1jWGtHTGVFb2lKdHh0eVBxZ1VhVVVmeVFsQXBYV0JTTjFSQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvZXhwZWN0IjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMy4wIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImNvIjogIl40LjYuMCIsCisgICAgICAgICJkZWRlbnQiOiAiXjEuNi4wIiwKKyAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4xLjAiLAorICAgICAgICAiamVzdC1lYWNoIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3Qtc25hcHNob3QiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiLAorICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4zLjAiLAorICAgICAgICAicHVyZS1yYW5kIjogIl43LjAuMCIsCisgICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAorICAgICAgICAic3RhY2stdXRpbHMiOiAiXjIuMC42IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtY2lyY3VzL25vZGVfbW9kdWxlcy9wdXJlLXJhbmQiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVyZS1yYW5kLy0vcHVyZS1yYW5kLTcuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vVFVaTS9OQVpTOHA3QU5SM1NIaDMwa1hCK3pLMnIyQlBjRW4vYXdKSWJPdnE4MldvTU40cDYyQVdXcDNIaHc1MEcweE1zdzFtaElCTHFIdzY0RWNOUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9kdWJ6enoiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9mYXN0LWNoZWNrIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNsaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jbGkvLS9qZXN0LWNsaS0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWw2VHF4K2oxZkRYSkVXNWJxWXlrRFFRN21RZys5bWhXWHRuait0UVpyVFdZSHlIb2k2QmU4SFB1bURTQStVaVgyLzJidUVnakE1OGlKemRqMTQ2dUN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L2NvcmUiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImV4aXQteCI6ICJeMC4yLjIiLAorICAgICAgICAiaW1wb3J0LWxvY2FsIjogIl4zLjIuMCIsCisgICAgICAgICJqZXN0LWNvbmZpZyI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC11dGlsIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXZhbGlkYXRlIjogIjMwLjMuMCIsCisgICAgICAgICJ5YXJncyI6ICJeMTcuNy4yIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJqZXN0IjogImJpbi9qZXN0LmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJub2RlLW5vdGlmaWVyIjogIl44LjAuMSB8fCBeOS4wLjAgfHwgXjEwLjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJub2RlLW5vdGlmaWVyIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jb25maWcvLS9qZXN0LWNvbmZpZy0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdQTUFrTUF0TkRZOVAvb0tPYnRzUkcvNktUcmh0Z1BKb0JUbWsyMHVEbjRVeTYvM0VKbm5hWkpyZS9GTVQxS1ZSeDhjdmUxcjcvRmxNSU9mUlZXTDR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjI3LjQiLAorICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMS4wIiwKKyAgICAgICAgIkBqZXN0L3BhdHRlcm4iOiAiMzAuMC4xIiwKKyAgICAgICAgIkBqZXN0L3Rlc3Qtc2VxdWVuY2VyIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiYmFiZWwtamVzdCI6ICIzMC4zLjAiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImNpLWluZm8iOiAiXjQuMi4wIiwKKyAgICAgICAgImRlZXBtZXJnZSI6ICJeNC4zLjEiLAorICAgICAgICAiZ2xvYiI6ICJeMTAuNS4wIiwKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAorICAgICAgICAiamVzdC1jaXJjdXMiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtZG9jYmxvY2siOiAiMzAuMi4wIiwKKyAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCisgICAgICAgICJqZXN0LXJlc29sdmUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtcnVubmVyIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiMzAuMy4wIiwKKyAgICAgICAgInBhcnNlLWpzb24iOiAiXjUuMi4wIiwKKyAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiMzAuMy4wIiwKKyAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCisgICAgICAgICJzdHJpcC1qc29uLWNvbW1lbnRzIjogIl4zLjEuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJlc2J1aWxkLXJlZ2lzdGVyIjogIj49My40LjAiLAorICAgICAgICAidHMtbm9kZSI6ICI+PTkuMC4wIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImVzYnVpbGQtcmVnaXN0ZXIiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAidHMtbm9kZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1jb25maWcvbm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTIuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UTjFrQ1pBZ2Rnd2VKaFdXcGdLWXJRYU1OSGNEVUxIa1d3UUlzcGR0alY0WTVhdXJSZFpwakFxbjZ5WDNGUHFUQTluZ0hDYzRoSnhNQU1nR2Z2ZTg1dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYWxhbmNlZC1tYXRjaCI6ICJeMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9nbG9iIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi0xMC41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURmWE44RGZoSjdOSDNPZTdjRm11M05DdTF3S2JrUmVKOFRvcnpTQUZiU0tybE5hUVNLZkl6cVlxVlk4emxiczJOTEJiV3BSaVU1MkdYMlBiYUJWTmtnPT0iLAorICAgICAgImRlcHJlY2F0ZWQiOiAiT2xkIHZlcnNpb25zIG9mIGdsb2IgYXJlIG5vdCBzdXBwb3J0ZWQsIGFuZCBjb250YWluIHdpZGVseSBwdWJsaWNpemVkIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFBsZWFzZSB1cGRhdGUuIFN1cHBvcnQgZm9yIG9sZCB2ZXJzaW9ucyBtYXkgYmUgcHVyY2hhc2VkIChhdCBleG9yYml0YW50IHJhdGVzKSBieSBjb250YWN0aW5nIGlAaXpzLm1lIiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmb3JlZ3JvdW5kLWNoaWxkIjogIl4zLjEuMCIsCisgICAgICAgICJqYWNrc3BlYWsiOiAiXjMuMS4yIiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICJeOS4wLjQiLAorICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4yIiwKKyAgICAgICAgInBhY2thZ2UtanNvbi1mcm9tLWRpc3QiOiAiXjEuMC4wIiwKKyAgICAgICAgInBhdGgtc2N1cnJ5IjogIl4xLjExLjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImdsb2IiOiAiZGlzdC9lc20vYmluLm1qcyIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtMTAuNC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KTkF6WmNYckN0NDJWR0x1WXowemZBekRmQXZKV1c2QWZZbERCUXlEVjVEQ2xJMm01c0FtSytPSU83czU5WGZzUnNXSHAwMmpBSnJSYWRQUkdUdDZTUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZy9ub2RlX21vZHVsZXMvbWluaW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiOS4wLjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC05LjAuOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItT0J3Qk45QUw0ZHFtRVRscFMyemFzeCt2VGVXY2xXemtibGZaazdLVEE1ajNqZU9PTnovdFJDblpvbVV5dk5nODN3TDVadjlTczZITUpYQWdMOFIyWWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl4yLjAuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNiB8fCAxNCA+PTE0LjE3IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnL25vZGVfbW9kdWxlcy9wYXRoLXNjdXJyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1zY3VycnkvLS9wYXRoLXNjdXJyeS0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhhNE53MTdGUzlBcFFGSjl1bUxpSlM0b3JHam03Wnp3VXJ3YW1jR1F1SFN6RHl0aDlib0tEYXljWWREY1pEdXFZQVRYdzRIRlhnYXFXVGN0Vy92MUhBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJscnUtY2FjaGUiOiAiXjEwLjIuMCIsCisgICAgICAgICJtaW5pcGFzcyI6ICJeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNiB8fCAxNCA+PTE0LjE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtZGlmZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjNxNFBEUWpTNExyS3hmV0IzWjVLTmsxWGpYdFpUQndRcDcxT1AwSm8wM1o2VjYweCsrSzVMOGs2WnJXOE1ZOHBPRnlsWnZITTB6c2pTMVJxbEhKWlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvZGlmZi1zZXF1ZW5jZXMiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L2dldC10eXBlIjogIjMwLjEuMCIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4zLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1kb2NibG9jayI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kb2NibG9jay8tL2plc3QtZG9jYmxvY2stMzAuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10Ui9GRmdaS1MxQ1hsdU9Relp2TkgzKzB6OWpYcjNsZEdTRDhiaHl1eHZsVlV3YmVMT0d5bmt1bnZsVE14Y2hDNXVycktuZFlpd0NGQzBETFZqcE9DQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJkZXRlY3QtbmV3bGluZSI6ICJeMy4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWVhY2gvLS9qZXN0LWVhY2gtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WOGVNbmRnL2FaKzNMbkNKZ1NtMTNJeFM1WFNCTTIyUVNaYzlCdFBLOERlazZwbStoZlVOZndCZHZzQjNkMzQyYm8xcTd3blNrQzM4empYMjU5cVpOQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9nZXQtdHlwZSI6ICIzMC4xLjAiLAorICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMy4wIiwKKyAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGk2SEl0dy9KU2lKVnNDNXEwaG5LSWUvaGJZZlpMVkc5WUovMHBVOUh6Mm4vOXFaZTNSaG41czVDVVpBNU9SWmxjZFQvdm1BWFJNeU9OWEp3UHJtWVE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJqZXN0LW1vY2siOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICIzMC4zLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tTWkyb3FHNEtSVTBSOVFFdHNjbDg3SnpNWGZVaGJLYUZxT3htamIyQ0tjYkhjVUdGckpDQldIbW5UaVVxaTZKY256b0JsTzRyV2ZwZGwyay9SZkxDQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJhbnltYXRjaCI6ICJeMy4xLjMiLAorICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4yIiwKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAorICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3Qtd29ya2VyIjogIjMwLjMuMCIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4zIiwKKyAgICAgICAgIndhbGtlciI6ICJeMS4wLjgiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmc2V2ZW50cyI6ICJeMi4zLjMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtbGVhay1kZXRlY3RvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1sZWFrLWRldGVjdG9yLy0vamVzdC1sZWFrLWRldGVjdG9yLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY3VLbVVVR0lqZlhaQWlHSjdUYkVNeDBiY3FOZFBQSTZQMVYrN2FGK20vRlVKcUZEeGtGUjRKcWtUdThaT2lVNUFhWC94MGhaMjBLYWFJUFhRemJNR1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMS4wIiwKKyAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtbWF0Y2hlci11dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tYXRjaGVyLXV0aWxzLy0vamVzdC1tYXRjaGVyLXV0aWxzLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSEV0Yzl1RlFnYVVIa0M3bkxTbFFMM1RwaDRQanh0L3lpUHZrSXJyREN0OWpob0xJZ3hhdWJvMUcrQ0ZPbm1IWU14SHd3ZGFTTjdta0lGczZaSzhPaEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMS4wIiwKKyAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCisgICAgICAgICJqZXN0LWRpZmYiOiAiMzAuMy4wIiwKKyAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtbWVzc2FnZS11dGlsIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1lc3NhZ2UtdXRpbC8tL2plc3QtbWVzc2FnZS11dGlsLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWi9qNEJvKzR5U0orSlBKTjNiMlFibDloRHEzVnJYbW5qakdFV0QveDBCQ1hlT1hQVFYxaVpZWXpsMlg4YzFNYUNPTCtld015TkJjbTg4c2JvRTZZV3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjcuMSIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL3N0YWNrLXV0aWxzIjogIl4yLjAuMyIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4zIiwKKyAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiMzAuMy4wIiwKKyAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCisgICAgICAgICJzdGFjay11dGlscyI6ICJeMi4wLjYiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1tb2NrIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1vY2svLS9qZXN0LW1vY2stMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PVHpJQ0s4Q3BFK3Q0bmRoS3J3bElkYk02UG44ajAwbHZtU21xNWVqaU8rS3h1a2JMamdPZmxLV01uM0tFMzRFWmRRbTVScVR1S2orNVJJRW5pWWhvZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtcG5wLXJlc29sdmVyIjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcG5wLXJlc29sdmVyLy0vamVzdC1wbnAtcmVzb2x2ZXItMS4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSszTnB3UUVuUm9JQnR4NGZ5aGJsUURQZ0pJMEgxSUVJa1g3U2hMVWpQR0E3VHRVVHZJMW9pS2kzU1I0b0JSMGhRaFFSODBsNFdBZTVSclhCd1dNQTh3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImplc3QtcmVzb2x2ZSI6ICIqIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKKyAgICAgICAgImplc3QtcmVzb2x2ZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1yZWdleC11dGlsIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMzAuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qSEVRZ0JYQWdjK0doNGcwcDNiQ2V2Z1JDVlJrQjRWQjcwemhvQUU0OGd4ZVNyMWhmVU9zTS9DMldvSmdWTDdFeWcvL2h1ZFlFTmJtM05lKy9kUlZWQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtcmVzb2x2ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLy0vamVzdC1yZXNvbHZlLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTlJ0VEFIUWxwZDE1RjlyVVIzNmpxd2VsYnJEVi9kWTR2ek50ZTNTMmt4Q0tVSlJZTmQ1LzZuVFNiWWlhazFWWDVnOElvRkYyM1VqNVRVUmtVVzhPNWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAorICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMyIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiMzAuMy4wIiwKKyAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCisgICAgICAgICJ1bnJzLXJlc29sdmVyIjogIl4xLjcuMTEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy8tL2plc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05ZXY4czNZTjZIc3l6OUxWNzVYVXdrQ1ZGbHdQYmFGbjZXcDc1cW5JMHd6QUlOWVdZOEZiMys2eTU5UndkM1FhUzNrS1hmZkhYc1pNemlNYXZmei9udz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiMzAuMC4xIiwKKyAgICAgICAgImplc3Qtc25hcHNob3QiOiAiMzAuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bm5lci8tL2plc3QtcnVubmVyLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0R2NkM5TEdLV0RQTGlhOVRTelp3ZjRoM2tNUUNxeVRwcSs5NVBPRG5UUkRPMGc5b3M0OFhJWVlrUzZEMjM2dmpwQmlyMmZGNjNZbUpGdHFrUzVEdXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvY29uc29sZSI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKKyAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCisgICAgICAgICJlbWl0dGVyeSI6ICJeMC4xMy4xIiwKKyAgICAgICAgImV4aXQteCI6ICJeMC4yLjIiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJqZXN0LWRvY2Jsb2NrIjogIjMwLjIuMCIsCisgICAgICAgICJqZXN0LWVudmlyb25tZW50LW5vZGUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LWxlYWstZGV0ZWN0b3IiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXJlc29sdmUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtcnVudGltZSI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC11dGlsIjogIjMwLjMuMCIsCisgICAgICAgICJqZXN0LXdhdGNoZXIiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3Qtd29ya2VyIjogIjMwLjMuMCIsCisgICAgICAgICJwLWxpbWl0IjogIl4zLjEuMCIsCisgICAgICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiAiMC41LjEzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtcnVubmVyL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwLXN1cHBvcnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjUuMTMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjUuMTMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNIU0tGSGFkalZBNW9SNFBQcWh0QVZkY0JXd1JZVmQ2ZzZjQVhuSWJSaUl3YzJFaFByVHVLVUJkU0x2bEVLeUlQM0dDZjg5Zmx0dmNaaVA5TU1GQTF3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJ1ZmZlci1mcm9tIjogIl4xLjAuMCIsCisgICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bnRpbWUvLS9qZXN0LXJ1bnRpbWUtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DZ0MraElCSmJ1aDc4SEVmZmtoTktjYlhBeXRRVmlwbGNsOHh1cHFlSVd5S1FGNTBrQ1FBOEo3R2VKQ2tqaXNDNmhwbkM5TXVmOGpWNVJkdGRGYkduZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L2dsb2JhbHMiOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiMzAuMC4xIiwKKyAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKKyAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCisgICAgICAgICJjanMtbW9kdWxlLWxleGVyIjogIl4yLjEuMCIsCisgICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMiIsCisgICAgICAgICJnbG9iIjogIl4xMC41LjAiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtbW9jayI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCisgICAgICAgICJqZXN0LXJlc29sdmUiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3Qtc25hcHNob3QiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKKyAgICAgICAgInN0cmlwLWJvbSI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWxhbmNlZC1tYXRjaC8tL2JhbGFuY2VkLW1hdGNoLTEuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zb1NlVU8wVE1WNjdoTjFBbWJYc0s0eWFxVTd0amlIbGJ4UkRaT3BIMEtXOStDZVg0YlJBYVgwQW54dDB0eDJNcnBScFd3UWFQd0lsSVNFSmhZVTVQdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVROMWtDWkFnZGd3ZUpoV1dwZ0tZclFhTU5IY0RVTEhrV3dRSXNwZHRqVjRZNWF1clJkWnBqQXFuNnlYM0ZQcVRBOW5nSENjNGhKeE1BTWdHZnZlODV3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9nbG9iIjogeworICAgICAgInZlcnNpb24iOiAiMTAuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi0xMC41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURmWE44RGZoSjdOSDNPZTdjRm11M05DdTF3S2JrUmVKOFRvcnpTQUZiU0tybE5hUVNLZkl6cVlxVlk4emxiczJOTEJiV3BSaVU1MkdYMlBiYUJWTmtnPT0iLAorICAgICAgImRlcHJlY2F0ZWQiOiAiT2xkIHZlcnNpb25zIG9mIGdsb2IgYXJlIG5vdCBzdXBwb3J0ZWQsIGFuZCBjb250YWluIHdpZGVseSBwdWJsaWNpemVkIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFBsZWFzZSB1cGRhdGUuIFN1cHBvcnQgZm9yIG9sZCB2ZXJzaW9ucyBtYXkgYmUgcHVyY2hhc2VkIChhdCBleG9yYml0YW50IHJhdGVzKSBieSBjb250YWN0aW5nIGlAaXpzLm1lIiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmb3JlZ3JvdW5kLWNoaWxkIjogIl4zLjEuMCIsCisgICAgICAgICJqYWNrc3BlYWsiOiAiXjMuMS4yIiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICJeOS4wLjQiLAorICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4yIiwKKyAgICAgICAgInBhY2thZ2UtanNvbi1mcm9tLWRpc3QiOiAiXjEuMC4wIiwKKyAgICAgICAgInBhdGgtc2N1cnJ5IjogIl4xLjExLjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImdsb2IiOiAiZGlzdC9lc20vYmluLm1qcyIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUvbm9kZV9tb2R1bGVzL2xydS1jYWNoZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjQuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTEwLjQuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSk5BelpjWHJDdDQyVkdMdVl6MHpmQXpEZkF2SldXNkFmWWxEQlF5RFY1RENsSTJtNXNBbUsrT0lPN3M1OVhmc1JzV0hwMDJqQUpyUmFkUFJHVHQ2U1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjAuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTkuMC45LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQndCTjlBTDRkcW1FVGxwUzJ6YXN4K3ZUZVdjbFd6a2JsZlprN0tUQTVqM2plT09Oei90UkNuWm9tVXl2Tmc4M3dMNVp2OVNzNkhNSlhBZ0w4UjJZZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjIuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTciCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lL25vZGVfbW9kdWxlcy9wYXRoLXNjdXJyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1zY3VycnkvLS9wYXRoLXNjdXJyeS0xLjExLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhhNE53MTdGUzlBcFFGSjl1bUxpSlM0b3JHam03Wnp3VXJ3YW1jR1F1SFN6RHl0aDlib0tEYXljWWREY1pEdXFZQVRYdzRIRlhnYXFXVGN0Vy92MUhBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJscnUtY2FjaGUiOiAiXjEwLjIuMCIsCisgICAgICAgICJtaW5pcGFzcyI6ICJeNS4wLjAgfHwgXjYuMC4yIHx8IF43LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNiB8fCAxNCA+PTE0LjE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc25hcHNob3QvLS9qZXN0LXNuYXBzaG90LTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZjE0YzdhdHBiNE8yRGVOaHdjdlM4MTBZNjN3RW44TzFIcUsvbHVKNEY2TTROanZ4bUFLUXdCVVdqYkV4VXRNeFdKUTB3VmdtQ0t5bWVKSzZOWk1uZlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMjcuNCIsCisgICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjI3LjUiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanN4IjogIl43LjI3LjEiLAorICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdHlwZXNjcmlwdCI6ICJeNy4yNy4xIiwKKyAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yNy4zIiwKKyAgICAgICAgIkBqZXN0L2V4cGVjdC11dGlscyI6ICIzMC4zLjAiLAorICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMS4wIiwKKyAgICAgICAgIkBqZXN0L3NuYXBzaG90LXV0aWxzIjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiMzAuMy4wIiwKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4yLjAiLAorICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKKyAgICAgICAgImV4cGVjdCI6ICIzMC4zLjAiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJqZXN0LWRpZmYiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICIzMC4zLjAiLAorICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4zLjAiLAorICAgICAgICAic2VtdmVyIjogIl43LjcuMiIsCisgICAgICAgICJzeW5ja2l0IjogIl4wLjExLjgiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC11dGlsIjogeworICAgICAgInZlcnNpb24iOiAiMzAuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0valpEYTAwYTNTejdyZHl1NTVOTHJRQ0lyYnlJa2JCeGFyZWVqUUkzMTVmL2k4SGpZTitaV3NETExwb1FTaVVJRUl5WkYvUjhmRGczQm1COEF0SHR0Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAorICAgICAgICAiY2ktaW5mbyI6ICJeNC4yLjAiLAorICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4zIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2plc3QtdmFsaWRhdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTMwLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSS94ekM4aDVHK1NIQ2IyUDJnV2tKWXJOaVRiZUw0N0t2S2VXNUV6cGxreXh6QlJCdzFzc1NIbEkvalhlYzB1a0gycTd4MnpBV1FtNzAxNWl1c2c2MlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMS4wIiwKKyAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjMuMCIsCisgICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMy4wIiwKKyAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCisgICAgICAgICJsZXZlbiI6ICJeMy4xLjAiLAorICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4zLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC12YWxpZGF0ZS9ub2RlX21vZHVsZXMvY2FtZWxjYXNlIjogeworICAgICAgInZlcnNpb24iOiAiNi4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbWVsY2FzZS8tL2NhbWVsY2FzZS02LjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItR215NkZoWWxDWTd1T0VsWlVTYnhvMlVDREg4b3dFazk5NmdrYnJwc2dHdHJKTE0zSjdqR3hsOUljN1F3d2o0aXZPRTVBV1pXUk1lY0RkRjdocUdqRkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qZXN0LXdhdGNoZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd2F0Y2hlci8tL2plc3Qtd2F0Y2hlci0zMC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBKMWQ5VGh0VFI4YU1pQldVZGNvd25xOW1EZExYc1F6SmF5VGs0a21hQlJIS3Z3TlFuK0FOdmV1aEVCVXlOSTJoUjFUVmh2UThENWtIdWJiekJIUi93PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjMuMCIsCisgICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4zLjAiLAorICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCisgICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMy4yIiwKKyAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCisgICAgICAgICJlbWl0dGVyeSI6ICJeMC4xMy4xIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICIzMC4zLjAiLAorICAgICAgICAic3RyaW5nLWxlbmd0aCI6ICJeNC4wLjIiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzMC4zLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EckNLa2FRd0hleGpSVUZUbVB6czdzSFFlMFRTajludkRBTEtHZHdtSzVtVzl2N2o5MEJ1ZFdpcktBSkh0M1FROURocmcxRjdEb2dQemhDaHBwa0pwUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKKyAgICAgICAgIkB1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lIjogIl4xLjMuMCIsCisgICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMy4wIiwKKyAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAorICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMS4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pqdSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qanUvLS9qanUtMS40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTh3YjlZdzk2Nk9TeEFwaUN0MEszeU5KTDhwbk5lSXYrT0VxMllNaWR6NEZLUDZub25TUm9PWGM4MGlYWTRKYU4yRkMxMUI5cXNObURzbStaT2ZNUk9BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pvc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvam9zZS8tL2pvc2UtNi4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWQ3a1BEZDM0S08vWW56YURPbGlrR3BPdXJmRjBCeUMyc0VWNGNBTkN0ZHFMbFRmQmx3MnAxNE8vNWQvenY0MGdKUGJJUXhmRVMzblN4MS9vWU55dVpRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9wYW52YSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanMtdG9rZW5zIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzLXRva2Vucy8tL2pzLXRva2Vucy00LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUmRKVWZsY0UzY1V6S2lNcVFnc0N1MDZGUHU5VWRJSk8wYmVZYlBoSE40azZhcGdKdGlmY29DdFQ5YmN4T3BZQnRwRDJrQ002U2J6ZzRDYXVzVy9QS1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanMteWFtbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC00LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVFLVDR6UXhYbDhsTHdCdEhNV3dhVGNHZkZPWnZpT0pldDNPeS94bUdrMmdaSDY3N0NKTTlFdnRmZFNrZ1djQVRaaGovNTVKWjBybXkzbXlDVDVsc0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYXJncGFyc2UiOiAiXjIuMC4xIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJqcy15YW1sIjogImJpbi9qcy15YW1sLmpzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9qc2VzYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc2VzYy8tL2pzZXNjLTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vc00zZE8yRk96WGpLUWhKdW8wUTE3M3dmMktPbzh0NEk4dkh5NmxGOXBvVXA3YktUMC9OSEU4ZlBYMjNQd2ZobnlrZnFuQzJ4UnhPblZ3NVh1R0lhQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJqc2VzYyI6ICJiaW4vanNlc2MiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNvbi1idWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1idWZmZXIvLS9qc29uLWJ1ZmZlci0zLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGJWNUJmUjJtcWZRVEptK1Y1dFBQZGYrWnB1aGlJdlR1QUI1ZzhrY3JYT1pwVFQvUXd3VlJXQnl3WDFvenI2bEV1UGRiSHh3YUpsbTlHNm1JMnNmU1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMvLS9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycy0yLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHlGd3locm8vSkVvZjZHaGUyaXoyTmNYb2oyc2xvTnNXci9Yc0VSREsvb2lQQ2ZhTmhsNU9OZnAralFkQVpSUVEwSUpXTnpIOXpJWkY3bGk5MWtoMnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHJhdmVyc2UvLS9qc29uLXNjaGVtYS10cmF2ZXJzZS0wLjQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGJiQ0g1ZENZVTVUOExjRWhodWg3SEo4OEhYdVczcXNJM1kwek9aRktmWkVIY3BXaUhVL0p4ems2MjlCcnNhYi9tTWlIUXRpOXdNUCs4NDVSUGUzVmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHlwZWQiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zY2hlbWEtdHlwZWQvLS9qc29uLXNjaGVtYS10eXBlZC04LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZlFob1hkY3ZjM1YyOHg3QzdCTXM0UDUra05sZ1VVUmUyam1VVDFULy9vQlJNRHJxeTFRUGVsSmltd1pHbzdIZzlWUFYzRVFWNUJucTRoYkZ5MnZldEE9PSIsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzb24tc3RhYmxlLXN0cmluZ2lmeS13aXRob3V0LWpzb25pZnkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeS8tL2pzb24tc3RhYmxlLXN0cmluZ2lmeS13aXRob3V0LWpzb25pZnktMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJkYm95K2w3dEEzT0dXNkZqeUZIV2tQNUx1QnlqMVRrMzNManlxMGF4eXpkazkvL0pTaTJ1M2ZQMVFTbWQxS053cTZWT0tZR2xBdTg3Q2lzVmlyNlB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzb241IjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb241Ly0vanNvbjUtMi4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhtT1dlN2V5SFlIMTRjTGRWUG95ZytHT0gzcllYKytLcHpyeWxKd1NXOTh0M05rK1U4WE9sOEZXS09nd3R6ZGI4bFhHZjZ6WXdEVXplSE1XZnhhc3lnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgImpzb241IjogImxpYi9jbGkuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvanNvbnBhcnNlIjogeworICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb25wYXJzZS8tL2pzb25wYXJzZS0xLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUE9RWHZwZEw2OStDbHVZc2lsbEo3U1VoS3Z5dFlqVzl2Ry9HS3BuZit4UDhVV2dZRU0vUmFNekhIb2ZiQUxEaUtiYlAxVzhVRVltZ0dsMzlXa1Bac2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJlbmdpbmVzIjogWworICAgICAgICAibm9kZSA+PSAwLjIuMCIKKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2pzb25zdHJlYW0tbmV4dCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uc3RyZWFtLW5leHQvLS9qc29uc3RyZWFtLW5leHQtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFBaTZvUGhkdDdCS3lRbjFTcklJR1pCdDB1a0t1T1VFMXFWNmtKM0dnaW9TT1l6c1JjOHo5SGZyMUJWbWFjQS9qTGU5bkFSZm1nTUdnbjY4QnFJQWdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICIoTUlUIE9SIEFwYWNoZS0yLjApIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJqc29ucGFyc2UiOiAiXjEuMi4wIiwKKyAgICAgICAgInRocm91Z2gyIjogIl40LjAuMiIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAianNvbnN0cmVhbS1uZXh0IjogImJpbi5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMva2V5diI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNS40IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9rZXl2Ly0va2V5di00LjUuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItb3hWSGtIUi9FSmYyQ05Ybld4UkxXNm1nN0p5Q0NVY0cwRHRFR21MMmN0VW8xUE5UaW4xUFVpbCtyLys0cjVNcFZnQy9mbjFranN4N21qU3VqS3FJcHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAianNvbi1idWZmZXIiOiAiMy4wLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2tudXRoLXNodWZmbGUtc2VlZGVkIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tudXRoLXNodWZmbGUtc2VlZGVkLy0va251dGgtc2h1ZmZsZS1zZWVkZWQtMS4wLjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlwRkgwU3BscmZ5S3lvakNMeFpmTWN2a2hmNWhIMGQrVXdSOW5UVkovRERRSkd1emNYalR3QjdUUDdzRGZlaFN1ZGxHR2FPTGJsbUVXcXYwNEVSVldnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzZWVkLXJhbmRvbSI6ICJ+Mi4yLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2t1bGVyIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2t1bGVyLy0va3VsZXItMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhxOW5IN0tsV1ptWEF0b2RYRERSRTd2czZEVTFnVFU4ellESERpV0xTaXA0NUVnd3EzcGxMSHpQbjI3Tmd2ekwycjFMTVBDMXZkcWg5OHNReHRxajRBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9sZXZlbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZlbi8tL2xldmVuLTMuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xc2RhK0g4alRhVWFOL3g1dnpXMnJ6Yys4Unc0VEFRLzRLakI0Nkl3SzVWSCtJbFZlZWVqZS9Fb1pScGlYdklxakZnSzg0UWZmcVB6dEdJM1ZCTEcxQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xldm4iOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGV2bi8tL2xldm4tMC40LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStiVDJ1SDRFNUxHRTdoL24zZXZjUy9zUWxKWENwSXA2eW04T1dKNWVWNis2N0RzcWwvTGFhVDdxSkJBdDJyemZvYS81UUJHQmh4RGl4MWRNdDJrUUtRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIiwKKyAgICAgICAgInR5cGUtY2hlY2siOiAifjAuNC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbGluZXMtYW5kLWNvbHVtbnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGluZXMtYW5kLWNvbHVtbnMvLS9saW5lcy1hbmQtY29sdW1ucy0xLjIuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3lseWxlc1pRL1BWMjlqaEVEbDNVZmpvNlpYN2dDcUpyNUY3UEtycWM5M3Y3ZnpTeW10MUJwd0VVOG5BVVhzOHF6enZxaGJqaEs1UVpnNk10L0hrQmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbGlua2lmeS1pdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9saW5raWZ5LWl0Ly0vbGlua2lmeS1pdC01LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWFIQ2J6UVJBRGNkUCtBVHFuRHVoaEovTVJJcURrWlg1cHlqRkhSUnlzUzh2WjVBYnFHRW9GSWI2cFlIUForTC9PQzJMYyt4VDh1SFZWUjVDQUsvd1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidWMubWljcm8iOiAiXjIuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9saW50LXN0YWdlZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE2LjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGludC1zdGFnZWQvLS9saW50LXN0YWdlZC0xNi40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxCV3Q4aHVqaC9DanlzdzVHWVZtWnBGSFhEQ2daemhyT204dmJjVWRvYkFEWk5PSy9iUnNocjJrTTNEZmdycnRSMURRaGZ1cFc5Z25JWE9maUZpK2J3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNvbW1hbmRlciI6ICJeMTQuMC4zIiwKKyAgICAgICAgImxpc3RyMiI6ICJeOS4wLjUiLAorICAgICAgICAicGljb21hdGNoIjogIl40LjAuMyIsCisgICAgICAgICJzdHJpbmctYXJndiI6ICJeMC4zLjIiLAorICAgICAgICAidGlueWV4ZWMiOiAiXjEuMC40IiwKKyAgICAgICAgInlhbWwiOiAiXjIuOC4yIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJsaW50LXN0YWdlZCI6ICJiaW4vbGludC1zdGFnZWQuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMTciCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vbGludC1zdGFnZWQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xpbnQtc3RhZ2VkL25vZGVfbW9kdWxlcy9zdHJpbmctYXJndiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctYXJndi8tL3N0cmluZy1hcmd2LTAuMy4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hcUQyUTAxNDRaKy9ScUc1Mk5lSEVrWmF1VEFVV0pPOGM2eVRmdEdKS08zVGphNXRVZ0lmbUlsNmtFeHZodHhTRFA3ZlhCNkR2emtmTXBDZC9GM0crUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuNi4xOSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbGlzdHIyIjogeworICAgICAgInZlcnNpb24iOiAiOS4wLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpc3RyMi8tL2xpc3RyMi05LjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUU0RmI4M0xnRWd3Tnc5NlJLTnZLVjRWVEx1WGZvS3VkQW1tMmxQOEtrODdLYU1LMC9YcngvYUFrTVdtVDhtRGIrM01sRkRzcGZiQ3M3YWRqUnhBMmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2xpLXRydW5jYXRlIjogIl41LjAuMCIsCisgICAgICAgICJjb2xvcmV0dGUiOiAiXjIuMC4yMCIsCisgICAgICAgICJldmVudGVtaXR0ZXIzIjogIl41LjAuMSIsCisgICAgICAgICJsb2ctdXBkYXRlIjogIl42LjEuMCIsCisgICAgICAgICJyZmRjIjogIl4xLjQuMSIsCisgICAgICAgICJ3cmFwLWFuc2kiOiAiXjkuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbG9jYXRlLXBhdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC02LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaVBaSzZlWWpieFJ1M3VCNC9XWjNFc0VJTUpGTXFBb29wbDNSK3p1cTBVamNBbS9NTzZLQ3dlRGdQZlAzZWxUenRvS1AzS3RuVkh4VG4yTkhCU0RWVXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicC1sb2NhdGUiOiAiXjUuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5tZW1vaXplIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5tZW1vaXplLy0vbG9kYXNoLm1lbW9pemUtNC4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ3aitOem1nblF6VEFZWGNzSFlMZ2ltbHRPVjFNWEh0bE9XZjZHakw5S2o4R0s1RkludzVKb3R4dmJPcytJdlYxL0R6bzA0L2ZDR2ZMVnM3YVhiNEFnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5tZXJnZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuNi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gubWVyZ2UvLS9sb2Rhc2gubWVyZ2UtNC42LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBLcGpxWFJWdnJZeUNzWDFzd1IvWFRLMHZhNlZRa1FNNk1ObzdQcVc3N0J5akFob0FSQThFZnJQMU40K0tsS2o4WVMwWlVDdFJUL1lVdWh5WUR1aklRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5tZXJnZXdpdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjYuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLm1lcmdld2l0aC8tL2xvZGFzaC5tZXJnZXdpdGgtNC42LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdLM2c1UlBaV1RSU2VMU3BnUDhYaHJhK3BuakJDNTZxOUZaWWUxZDVSTjNUSjM1ZGJrR3kzWXFCU01ieUNybGJpK0NNOVozSms1eVRMN1JDc3Fib3lRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5zb3J0YnkiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjcuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9kYXNoLnNvcnRieS8tL2xvZGFzaC5zb3J0YnktNC43LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhEV1hHOGlzTW50QXlSRjV2Wjd4S3VFdk9oVDRBaGxSdC8zY3pUU2p2R1V4allDQlZSUVk0OFZpREh5Zll6OVZJb0JrVzRUTUdRTmFweCtsM1JVd2RBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZy1zeW1ib2xzIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZy1zeW1ib2xzLy0vbG9nLXN5bWJvbHMtNC4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThYUHZwQUE4dXloZnRldThwSXZReHBKWjdTWVlkcFVpdlpwR3k2c0ZzQnVLUlkvN3JRR2F2ZWRlQjhhSytaa3lxNnVwTUZWTC85QVc2dk9ZemZSeUxnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNoYWxrIjogIl40LjEuMCIsCisgICAgICAgICJpcy11bmljb2RlLXN1cHBvcnRlZCI6ICJeMC4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbG9nLXVwZGF0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2ctdXBkYXRlLy0vbG9nLXVwZGF0ZS02LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOWllOEl0UFI2dGpZNXVZSmg4Sy9acnYvUk1aNVZPbE9XdnRaZEVIWVNURktaZklCUFFhOXRPQUVlQVdoZCtBbkluZUxKMjJ3NWZqT1l0b3V0cFdxNXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl43LjAuMCIsCisgICAgICAgICJjbGktY3Vyc29yIjogIl41LjAuMCIsCisgICAgICAgICJzbGljZS1hbnNpIjogIl43LjEuMCIsCisgICAgICAgICJzdHJpcC1hbnNpIjogIl43LjEuMCIsCisgICAgICAgICJ3cmFwLWFuc2kiOiAiXjkuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZy11cGRhdGUvbm9kZV9tb2R1bGVzL2Fuc2ktZXNjYXBlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLWVzY2FwZXMvLS9hbnNpLWVzY2FwZXMtNy4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJ2VThuWWdHUUJ4Y21NdUVlVUVtTlR2ck1WakpOU0g3UmdXMjR2WGV4TjRWZW42cUN2eTRUbnRudmxud25NTFRWbGNSUVFkYlJZOE5LbmFJb2VXRE5nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVudmlyb25tZW50IjogIl4xLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9sb2ctdXBkYXRlL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTYuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00RGo2TTI4SkIrb0FIOGtGa1RMVW8rYTJqd09Ga3VxYjN5dWNVMENBTmNSUlVieFMwY1AwblpZQ0dqY2MzQk5Yd1JJc1VWbURHZ3phd21lN3p2Skh2Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZy11cGRhdGUvbm9kZV9tb2R1bGVzL3NsaWNlLWFuc2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xpY2UtYW5zaS8tL3NsaWNlLWFuc2ktNy4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlPQldGZ1VYN2NhSVppdXV0SUN4VmdYMVNkeHdBVkZGS3d0MUV2TVlZZWMvTldPNW1lT0o2SzV1UXhocllCZFFKbmU0S3hpcVpjK0twdEZPV0ZTSTl3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFuc2ktc3R5bGVzIjogIl42LjIuMSIsCisgICAgICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3NsaWNlLWFuc2k/c3BvbnNvcj0xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9sb2dmb3JtIjogeworICAgICAgInZlcnNpb24iOiAiMi43LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZ2Zvcm0vLS9sb2dmb3JtLTIuNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1URllBNGpuUDdQVmJtbEJJZmhsU2UrV0t4czlka2xYTVRFR2NCQ0l2TGhFL1RuM0g2R2sxbm9ydXBWVzdtNUNuZDRiTGNyMDhBeXRieVYveGo3Zi9rUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGNvbG9ycy9jb2xvcnMiOiAiMS42LjAiLAorICAgICAgICAiQHR5cGVzL3RyaXBsZS1iZWFtIjogIl4xLjMuMiIsCisgICAgICAgICJmZWNoYSI6ICJeNC4yLjAiLAorICAgICAgICAibXMiOiAiXjIuMS4xIiwKKyAgICAgICAgInNhZmUtc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4zLjEiLAorICAgICAgICAidHJpcGxlLWJlYW0iOiAiXjEuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvZ2Zvcm0vbm9kZV9tb2R1bGVzL0Bjb2xvcnMvY29sb3JzIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjb2xvcnMvY29sb3JzLy0vY29sb3JzLTEuNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JcitBT2licXpySXNMNmFqdDNSejNMc2tCN09pTVZIcWx0Wm1zcGJXL1RKdVRWdXlPTWlyVnFBa2pmWTZKSVNpTEhneU5xaWNBQzhBeUhIR3pOZC9kQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEuOTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2xvd2VyLWNhc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG93ZXItY2FzZS8tL2xvd2VyLWNhc2UtMi4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdmbTNsM05BRjlXZk42VzNKT21mNWRyd3BWcVg3OEp0b0dKM0E2VzBhNlpubGRNNDF3MmZWNUQ0OTBwc0tGVHBNZHM4VEpzZS9lSExGRnNOSEhqSGdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRzbGliIjogIl4yLjAuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogeworICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS01LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3BOQVJRQTNJd3YralRBMHV0VVZWYnJoK0pscnIxRnYwZTU2R0d6QUZPWE43ZGsvRnZpYURXOExIbUs1MkRsY0g0V1AybjZnSTh2TjFhZXNCRmdvOXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAieWFsbGlzdCI6ICJeMy4wLjIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2x1bnIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHVuci8tL2x1bnItMi4zLjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpUVTNEYVphRjNSdDlyaE4zdUJNR1FEM2REMi92RlFxbnZaQ0R2NGRsNWlPenEySVpRcVR4dTkwcjRFNUorblA3MEozaWxxVkNyYmhvMmVXYWVXOE93PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL2x1eG9uIjogeworICAgICAgInZlcnNpb24iOiAiMy43LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2x1eG9uLy0vbHV4b24tMy43LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZ0RWhYaC9nTmpJOVlnMXU0algvMFlWUE12eHpIdUdnQ202dEM1a1p5YjA4eWpHV0ducUFqR0p2Y1hicVFSMlAzTXlNRUZuUmJwY2RGUzZQQmNMcWV3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21hZ2ljLXN0cmluZyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMzAuMjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hZ2ljLXN0cmluZy8tL21hZ2ljLXN0cmluZy0wLjMwLjIxLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12ZDJGNFlVeUVYS0djTEhvcStURXlDanh1ZVNlSG5GeHl5ak5wODB5ZzBYVjR2VWhuRGVyL2x2dmxxTS9hckI1YlhRTjVLMi8zb2lueUNSeXg4VDJDUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMiOiAiXjEuNS41IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tYWtlLWRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTQuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oWGRVVFpZSVZPdDFFeC8vakFRaSt3VFpacFVwd0JqLzBRc096cWVnYjNyR01NZUppU0V1NXhMSG5ZZkJyUlY0UkgyK09DU09POTVJcy83eDFXSjRidz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzZW12ZXIiOiAiXjcuNS4zIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21ha2UtZXJyb3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFrZS1lcnJvci8tL21ha2UtZXJyb3ItMS4zLjYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXM4VWhsTmU3dlBLb21RaEMxcUZlbE1va3IvU2MzQWdOYnNvM243NG1WUEE1TFRad2tCOU5sWGY0WFBhbUx4SkU4aDBnaDczck05NHh2d1JUMkNWSW53PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21ha2VlcnJvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFrZWVycm9yLy0vbWFrZWVycm9yLTEuMC4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm1xQ3ZVaG10NDNtYWRscEZ6RzRCUXpHMlozbTZ0dlFETktkQ2xabk8zVmJJdWRKWW14c1QwRk5KTWVpQjIrSlRTbFRRVFNiVThRZGVzVm13SmNtTGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidG1wbCI6ICIxLjAuNSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbWFwLXN0cmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYXAtc3RyZWFtLy0vbWFwLXN0cmVhbS0wLjAuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQzBYMEtRbUdtM04yZnRiVEdCaFN5dXlkUSt2VjFMQzNmM3pQdlQzUlhIWE5acnZmUFpjb1hwL041RE9hOHZlZFgvclRNbTJDalR0aXZGZzJTVEpNUlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbWFya2Rvd24taXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxNC4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcmtkb3duLWl0Ly0vbWFya2Rvd24taXQtMTQuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CdVUycW5UdGk5WUtnSzVOK0llTXVicDE0WlVLVVV3N3llSmJranRvc3ZIaVAwQVo1YzhJQWdFTWs3OUQwZUM4RjIzcjRBYy9xOGNBSUZkbTJGdHlvQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhcmdwYXJzZSI6ICJeMi4wLjEiLAorICAgICAgICAiZW50aXRpZXMiOiAiXjQuNC4wIiwKKyAgICAgICAgImxpbmtpZnktaXQiOiAiXjUuMC4wIiwKKyAgICAgICAgIm1kdXJsIjogIl4yLjAuMCIsCisgICAgICAgICJwdW55Y29kZS5qcyI6ICJeMi4zLjEiLAorICAgICAgICAidWMubWljcm8iOiAiXjIuMS4wIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJtYXJrZG93bi1pdCI6ICJiaW4vbWFya2Rvd24taXQubWpzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWF0aC1pbnRyaW5zaWNzLy0vbWF0aC1pbnRyaW5zaWNzLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vSVh0YndFazVIVFB5RXd5S1g2aEdrWVh4TTluYmo2NEIraWxWSm5DL1I2QjBwSDVHNFYzYjBwVmJMN0RCajR0a2hCQXBwYlFVbGY2RjZYbDlMSHUxZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZHVybCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZHVybC8tL21kdXJsLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MZis5KzJyK1RkcDV3WERYQzRQY0lCalREdHE0VUtqQ1BNUWhLSXV6cEpOVzBiOTZrVnFTd1cwYlQ3RmhSU2ZtQWlGWWdQK1NDUnZkckRvemZoMFU1dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZWRpYS10eXBlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZWRpYS10eXBlci8tL21lZGlhLXR5cGVyLTEuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1haXNuckRQNEdOZTA2VWNLRm5WNWJmTU5QQlV3NGpzTEdhV3dXZm5IM3YwMkduQnVYWDJNQ1ZuNVJicldvMGozcGN6VWlsWWJscTdmUTdOdzJ0NVhLdz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC44IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1kZXNjcmlwdG9ycyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXJnZS1kZXNjcmlwdG9ycy8tL21lcmdlLWRlc2NyaXB0b3JzLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TbmszMTRWNWF5RkxocDNma1VSRXViNld0akJmUGRDUFkxTG44LzhtdW51THVpWWhzQUJnQlZXc296QUcrTVdNYlZFdmNkY3BiaTlSN3d3MjJsOVEzZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1zdHJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2Utc3RyZWFtLy0vbWVyZ2Utc3RyZWFtLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hYnYvcU9jdVBmazNVUlBmRHptWlUxTEttdXc4a1QrMG5JSHZLcktnRnJ3aWZvbC9kb1djZEE0WnFzV1E4RU5yRktrZDY3TWZwby9Mb3ZiSVVzYnQzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9taW1lIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWUvLS9taW1lLTMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qU0NVNy9WQjFsb0lXQlplMTRhRVlIVS8rMVVNRUhvYU83cXhDT1ZKT3c5R2dINzJWQVdwcHhOY2pVK3g5YTJrM0dTSUJYTkt4WFFGcVJ2dlo3dnIzQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAibWltZSI6ICJjbGkuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9taW1lLWRiIjogeworICAgICAgInZlcnNpb24iOiAiMS41NC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLWRiLy0vbWltZS1kYi0xLjU0LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFVNUVKdUlOMldEZW1DY0FwMnZGQmZwL200RUFoV0puVU5TU3cwaXhzNy9rWGJkNlBnNjRFbXdKa05kRmhCOGFXdDFzSDJDVFhyTHhvL2lBR1Yzb1BRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21pbWUtdHlwZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS10eXBlcy8tL21pbWUtdHlwZXMtMy4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxiZ3pkazBoNGp1b1E5ZkNLWFc0YnkwVUpxaituT09ySTlNSjFzU2o0bkk4YUkyZW8xcW12UUVpZTRWRDFnbHNTMjUwbjE1THNXc1l0Q3VnaVN0UzVBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtaW1lLWRiIjogIl4xLjU0LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9leHByZXNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9taW1pYy1mbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1pYy1mbi8tL21pbWljLWZuLTIuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PcWJPazVvRVFlQVo4V1hXeWRsdTlISmp6OVdWZEVJdmFtTUNjWG11cVVZalRrbkgvc3FzV3ZoUTN2Z3dLRlJSMUhwanZOQktRMzduYkpnWXpHcUdjZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21pbWljLWZ1bmN0aW9uIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWljLWZ1bmN0aW9uLy0vbWltaWMtZnVuY3Rpb24tNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZQNzlYVVB4VjJDaWdZUDNqV3dBVUZTa3UyYUtxQkg3dVRBYXBGV0NCcXV0c2JtRG85NktZNW84dWg2VSsvWVNJbjVPeEpuWHA3M2JlVmtwcU1JR2hBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbWluaW1hdGNoIjogeworICAgICAgInZlcnNpb24iOiAiMTAuMi41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMTAuMi41LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NVUxrVkxmS0dZREZZZWpQMDdRT3VyRExMUXBjams3RncrN2pYUzJSMmN6UlF6UjU2eUhSdmVVNU5ESkVPdmlIK2hFVFpLU2tJazVjK1QyM0dqRlVNZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQmx1ZU9hay0xLjAuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJhY2UtZXhwYW5zaW9uIjogIl41LjAuNSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiMTggfHwgMjAgfHwgPj0yMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9taW5pbWlzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0LTEuMi44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yeXlBUjhxQmtOM1l1aGVKYW5VcFdDNVUzYmI1b3NEeXdOQjhSekRWbER3REhib2NBSnZlcXFqMXU4K1NWRDdqa1dUNHl2c0hDcFdxcVdxQXhiMHpDQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21pbmlwYXNzIjogeworICAgICAgInZlcnNpb24iOiAiNy4xLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmlwYXNzLy0vbWluaXBhc3MtNy4xLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRFQkhxRG5Jb00vMXJYTUUxemdrYTlnNlEybGNvQ2t4SEx1YzdPREo1QnhiUDVkNGMyWjVjR2d0WEFrdTU5MjAwQ3g3ZGl1SFRPWWZTQkQ4bjZtbThBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTciCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21rZGlycCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ta2RpcnAvLS9ta2RpcnAtMy4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStOc3lVVUFaRG1vNllWSHpML3N0eFN1M3Q5WVMxaWxqbGl5M0JTRHJYSi9ka24xS1lkbXRaT0RHR2pMY2M5WExnVlZwSDRLc2hIQjhYbVpnTWhhQlhnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgIm1rZGlycCI6ICJkaXN0L2Nqcy9zcmMvYmluLmpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21vY2hhIjogeworICAgICAgInZlcnNpb24iOiAiMTEuNy41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tb2NoYS8tL21vY2hhLTExLjcuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbVRUNlJnb3BFWUFCelhXRngrR2NKK1pRMzJrcDRmTWYweHZwWklJZlNxOVo4bEMvKytNdGNDblE5dDVGUDJ2ZVlFUDk1RklZU3ZXK1U5ZlY0eHJsaWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJvd3Nlci1zdGRvdXQiOiAiXjEuMy4xIiwKKyAgICAgICAgImNob2tpZGFyIjogIl40LjAuMSIsCisgICAgICAgICJkZWJ1ZyI6ICJeNC4zLjUiLAorICAgICAgICAiZGlmZiI6ICJeNy4wLjAiLAorICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjQuMC4wIiwKKyAgICAgICAgImZpbmQtdXAiOiAiXjUuMC4wIiwKKyAgICAgICAgImdsb2IiOiAiXjEwLjQuNSIsCisgICAgICAgICJoZSI6ICJeMS4yLjAiLAorICAgICAgICAiaXMtcGF0aC1pbnNpZGUiOiAiXjMuMC4zIiwKKyAgICAgICAgImpzLXlhbWwiOiAiXjQuMS4wIiwKKyAgICAgICAgImxvZy1zeW1ib2xzIjogIl40LjEuMCIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiXjkuMC41IiwKKyAgICAgICAgIm1zIjogIl4yLjEuMyIsCisgICAgICAgICJwaWNvY29sb3JzIjogIl4xLjEuMSIsCisgICAgICAgICJzZXJpYWxpemUtamF2YXNjcmlwdCI6ICJeNi4wLjIiLAorICAgICAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICJeMy4xLjEiLAorICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjguMS4xIiwKKyAgICAgICAgIndvcmtlcnBvb2wiOiAiXjkuMi4wIiwKKyAgICAgICAgInlhcmdzIjogIl4xNy43LjIiLAorICAgICAgICAieWFyZ3MtcGFyc2VyIjogIl4yMS4xLjEiLAorICAgICAgICAieWFyZ3MtdW5wYXJzZXIiOiAiXjIuMC4wIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJfbW9jaGEiOiAiYmluL19tb2NoYSIsCisgICAgICAgICJtb2NoYSI6ICJiaW4vbW9jaGEuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21vY2hhL25vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWxhbmNlZC1tYXRjaC8tL2JhbGFuY2VkLW1hdGNoLTEuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zb1NlVU8wVE1WNjdoTjFBbWJYc0s0eWFxVTd0amlIbGJ4UkRaT3BIMEtXOStDZVg0YlJBYVgwQW54dDB0eDJNcnBScFd3UWFQd0lsSVNFSmhZVTVQdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tb2NoYS9ub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0yLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVE4xa0NaQWdkZ3dlSmhXV3BnS1lyUWFNTkhjRFVMSGtXd1FJc3BkdGpWNFk1YXVyUmRacGpBcW42eVgzRlBxVEE5bmdIQ2M0aEp4TUFNZ0dmdmU4NXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9tb2NoYS9ub2RlX21vZHVsZXMvZGlmZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kaWZmLy0vZGlmZi03LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUEpXSFViMVJGZXZLQ3dhRkE5UmxHNXRDZCtGTzVpUmg5QThIRXRrbUJIMkxpMDNpSnJpQjZtNkpJTjRyR3ozSzNKTGF3STcvdmVBMXh6UktQNklTQnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjMuMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbW9jaGEvbm9kZV9tb2R1bGVzL2dsb2IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMC41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2IvLS9nbG9iLTEwLjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGZYTjhEZmhKN05IM09lN2NGbXUzTkN1MXdLYmtSZUo4VG9yelNBRmJTS3JsTmFRU0tmSXpxWXFWWTh6bGJzMk5MQmJXcFJpVTUyR1gyUGJhQlZOa2c9PSIsCisgICAgICAiZGVwcmVjYXRlZCI6ICJPbGQgdmVyc2lvbnMgb2YgZ2xvYiBhcmUgbm90IHN1cHBvcnRlZCwgYW5kIGNvbnRhaW4gd2lkZWx5IHB1YmxpY2l6ZWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLCB3aGljaCBoYXZlIGJlZW4gZml4ZWQgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi4gUGxlYXNlIHVwZGF0ZS4gU3VwcG9ydCBmb3Igb2xkIHZlcnNpb25zIG1heSBiZSBwdXJjaGFzZWQgKGF0IGV4b3JiaXRhbnQgcmF0ZXMpIGJ5IGNvbnRhY3RpbmcgaUBpenMubWUiLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZvcmVncm91bmQtY2hpbGQiOiAiXjMuMS4wIiwKKyAgICAgICAgImphY2tzcGVhayI6ICJeMy4xLjIiLAorICAgICAgICAibWluaW1hdGNoIjogIl45LjAuNCIsCisgICAgICAgICJtaW5pcGFzcyI6ICJeNy4xLjIiLAorICAgICAgICAicGFja2FnZS1qc29uLWZyb20tZGlzdCI6ICJeMS4wLjAiLAorICAgICAgICAicGF0aC1zY3VycnkiOiAiXjEuMTEuMSIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiZ2xvYiI6ICJkaXN0L2VzbS9iaW4ubWpzIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21vY2hhL25vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMC40LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS0xMC40LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpOQXpaY1hyQ3Q0MlZHTHVZejB6ZkF6RGZBdkpXVzZBZllsREJReURWNURDbEkybTVzQW1LK09JTzdzNTlYZnNSc1dIcDAyakFKclJhZFBSR1R0NlNRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21vY2hhL25vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjAuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTkuMC45LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PQndCTjlBTDRkcW1FVGxwUzJ6YXN4K3ZUZVdjbFd6a2JsZlprN0tUQTVqM2plT09Oei90UkNuWm9tVXl2Tmc4M3dMNVp2OVNzNkhNSlhBZ0w4UjJZZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjIuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTciCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbW9jaGEvbm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5IjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLXNjdXJyeS8tL3BhdGgtc2N1cnJ5LTEuMTEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWGE0TncxN0ZTOUFwUUZKOXVtTGlKUzRvckdqbTdaendVcndhbWNHUXVIU3pEeXRoOWJvS0RheWNZZERjWkR1cVlBVFh3NEhGWGdhcVdUY3RXL3YxSEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJsdWVPYWstMS4wLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxydS1jYWNoZSI6ICJeMTAuMi4wIiwKKyAgICAgICAgIm1pbmlwYXNzIjogIl41LjAuMCB8fCBeNi4wLjIgfHwgXjcuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNkZsenViVExaRzNKMmEvTlZDQWxlRWhqenE1b3hnSHlhQ1U5eVlYdmNMc3ZvVmFISnEvczV4WEk2L1hYUDZ0ejdSOXhBT3RIblNPL3RYdEYzV1JUbEE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL21zZ3BhY2tyIjogeworICAgICAgInZlcnNpb24iOiAiMS4xMS4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXNncGFja3IvLS9tc2dwYWNrci0xLjExLjEwLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pQ1pOcStIc3p2RitmQzNhbkNtNG5CbVdFbmJlSUFmcERzNklTdEFFS2hRMllTZ2tqelZHMkZGOVhKcXd3UWg1YkgzTjlPVVRVdDRRd1ZONk1MTUx0QT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJtc2dwYWNrci1leHRyYWN0IjogIl4zLjAuMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbXNncGFja3ItZXh0cmFjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tc2dwYWNrci1leHRyYWN0Ly0vbXNncGFja3ItZXh0cmFjdC0zLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUDBlZlQxQzlqSWRWUmVmcWp6T1E5WG1sNTd6cE9Ybkl1Uytjc2FCNE1kWmJUZG1HRExvOFhoekJHMU43YU8xMWdLRERrSnZCTFVMZUZUbzQ2d3dyZUE9PSIsCisgICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJub2RlLWd5cC1idWlsZC1vcHRpb25hbC1wYWNrYWdlcyI6ICI1LjIuMiIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAiZG93bmxvYWQtbXNncGFja3ItcHJlYnVpbGRzIjogImJpbi9kb3dubG9hZC1wcmVidWlsZHMuanMiCisgICAgICB9LAorICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1kYXJ3aW4tYXJtNjQiOiAiMy4wLjMiLAorICAgICAgICAiQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1kYXJ3aW4teDY0IjogIjMuMC4zIiwKKyAgICAgICAgIkBtc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtbGludXgtYXJtIjogIjMuMC4zIiwKKyAgICAgICAgIkBtc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtbGludXgtYXJtNjQiOiAiMy4wLjMiLAorICAgICAgICAiQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1saW51eC14NjQiOiAiMy4wLjMiLAorICAgICAgICAiQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC13aW4zMi14NjQiOiAiMy4wLjMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL211bHRpcGFzdGEiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuNyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXVsdGlwYXN0YS8tL211bHRpcGFzdGEtMC4yLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtQQTU4ZDY4S2dHaWwxNW9EcVhqa1VCRUJZYzAwWHZiUGo1L1grZHl6ZW8vbFdtOU5jMjVwUVJsZjFEK2d2NE9wSzdOTTBKMW9kcmJ1OUpOTkd2eW5BPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9teiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tei8tL216LTIuNy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ODFHTk83bm5ZTUVockdoOUxleW1vRTQrWXIwV241TWNISVpNSzVjZlFDbCtORFgwOHNDWmdVYzkvNk1Ibmk5SVd1RkxtMVozSFRDWHUyejlmTjYyUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnktcHJvbWlzZSI6ICJeMS4wLjAiLAorICAgICAgICAib2JqZWN0LWFzc2lnbiI6ICJeNC4wLjEiLAorICAgICAgICAidGhlbmlmeS1hbGwiOiAiXjEuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9uYXBpLXBvc3RpbnN0YWxsIjogeworICAgICAgInZlcnNpb24iOiAiMC4zLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25hcGktcG9zdGluc3RhbGwvLS9uYXBpLXBvc3RpbnN0YWxsLTAuMy40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QSEk1ZjFPMEVQNXhKOWdRbUZHTVM2SVpjclZ2VGpwWGp6N05hNDFnVEU3ZUUyaEsxMWxnMDRDRUNDWUVFamRjMTdFVjRETytma0dFdHQ3VHBUYVRpUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJuYXBpLXBvc3RpbnN0YWxsIjogImxpYi9jbGkuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xMi4yMC4wIHx8IF4xNC4xOC4wIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL25hcGktcG9zdGluc3RhbGwiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25hdHVyYWwtY29tcGFyZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYXR1cmFsLWNvbXBhcmUvLS9uYXR1cmFsLWNvbXBhcmUtMS40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9XTkQ4ZWkzVnROQzloN1Y2MHFmZjNTVm9iSHI5OTZDVHdneHViZ3lRWUVwZzI5MGg5SjBidXlFQ05OSmV4a0ZtNXNPYWpoNUcxMTZSWUExYzhaTVN3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25lZ290aWF0b3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVnb3RpYXRvci8tL25lZ290aWF0b3ItMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThPZnMvQVVRaDhNYUVjcmxxNXhPWDBDUTl5cFRGNWRsNzhtamxNTmZPSzA4ZnpwZ1RIUVJRUEJ4Y1BsRXRJdzB5UnB3cytaby8zcis1V1JieTd1M0dnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25lby1hc3luYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uZW8tYXN5bmMvLS9uZW8tYXN5bmMtMi42LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlkM1VFUzVtV0NTcVIrcU5UOTNTM1VvWVVrcUFaOWxMZzhhN2c5cmltc1dtWUdLOGNWVG9BNC9zRjNScnNoZHlWM3NBR01YVlVtcE1ZT3crZExwT3V3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25vLWNhc2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm8tY2FzZS8tL25vLWNhc2UtMy4wLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZnQU4zakdBaCtSb3hVR1pIVFNPTEpJcVVjMndtb0J3R1I0dGJwTkFLbW1vdkZvV3EwT2RSa2IwVmtsZFJlTzJhMmlCVC9PRXVsRzlYU1VjMTByM3pnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxvd2VyLWNhc2UiOiAiXjIuMC4yIiwKKyAgICAgICAgInRzbGliIjogIl4yLjAuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvbm9kZS1hZGRvbi1hcGkiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1hZGRvbi1hcGkvLS9ub2RlLWFkZG9uLWFwaS03LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNW0zYnN5cmpGV0UxeGY3bno3WVhkTjR1ZG5WdFhLNi9ZZmduNXFuYWhMNmJDa2YyeUt0NGszbnVUS0F0VDRyM0lHOEpOUjJuY3NJTWRadUF6SmpIUVE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25vZGUtZ3lwLWJ1aWxkLW9wdGlvbmFsLXBhY2thZ2VzIjogeworICAgICAgInZlcnNpb24iOiAiNS4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtZ3lwLWJ1aWxkLW9wdGlvbmFsLXBhY2thZ2VzLy0vbm9kZS1neXAtYnVpbGQtb3B0aW9uYWwtcGFja2FnZXMtNS4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXMrdytyQlducFRNd1NGYmFFMFVYc1JsZzdoVTRGamVrS1U0ZXlBaWg1VDhuSnVOWlQxbk5zc2tYcHhtZXFTSzlVemtCbDZVZ1JsbktjOGh6OElFcU93PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZGV0ZWN0LWxpYmMiOiAiXjIuMC4xIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJub2RlLWd5cC1idWlsZC1vcHRpb25hbC1wYWNrYWdlcyI6ICJiaW4uanMiLAorICAgICAgICAibm9kZS1neXAtYnVpbGQtb3B0aW9uYWwtcGFja2FnZXMtb3B0aW9uYWwiOiAib3B0aW9uYWwuanMiLAorICAgICAgICAibm9kZS1neXAtYnVpbGQtb3B0aW9uYWwtcGFja2FnZXMtdGVzdCI6ICJidWlsZC10ZXN0LmpzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ub2RlLWludDY0IjogeworICAgICAgInZlcnNpb24iOiAiMC40LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtaW50NjQvLS9ub2RlLWludDY0LTAuNC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PNWx6OTF4U09lb1hQNkR1bHlIZmxscHErRWcwME1XaXRaSWJ0UGZvU0V2cUlIZGw1Z2ZjWTZoWXpEV25qMHFENXR6NTJQSTA4dTlxVXZTVmVVQmVIdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ub2RlLXJlbGVhc2VzIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjM3IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLXJlbGVhc2VzLy0vbm9kZS1yZWxlYXNlcy0yLjAuMzcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFoNWdLWkNGK3BPL28zSXF0NUpwN3djOXJIM2VKSjArbmgvQ0lvaVJ3alJ4ZGUvaEFIeUxQWFlONFYzQ3FLQWJpWlBTZUpGU1dIbUpzYmtpY3RhMEVnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9ybWFsaXplLXBhY2thZ2UtZGF0YS8tL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEtOC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJXaytQSTQzM2VFU1E3b3VuWXhJcDY3Q1l1VnNTMXVZU29uWDNrQTZwcy8zTFdmalZRYS9wdEVnNlkzVDZ1QU1xMW1XcFg5UFErcXgrUWFIcHNjN2dRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImhvc3RlZC1naXQtaW5mbyI6ICJeOS4wLjAiLAorICAgICAgICAic2VtdmVyIjogIl43LjMuNSIsCisgICAgICAgICJ2YWxpZGF0ZS1ucG0tcGFja2FnZS1saWNlbnNlIjogIl4zLjAuNCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjIwLjE3LjAgfHwgPj0yMi45LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1wYXRoIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vcm1hbGl6ZS1wYXRoLy0vbm9ybWFsaXplLXBhdGgtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZlWnM1THMzV3RDaXNIV3A5UzJHVXk4ZHFrcEdpNEJWU3ozR2FxaUU2ZXp1YjA1MTJFU3p0WFV3VUI2QzZJS2JRa1kyUG5iL21ENFdZb2pDUndjd0xBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9ucG0tcnVuLXBhdGgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnBtLXJ1bi1wYXRoLy0vbnBtLXJ1bi1wYXRoLTQuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TNDhXelpXNzc3emhOSXJuN2d4T2xJU05BcWk5WkMvdVFGblJkYmVJSGhaaENBNlVxcGtPVDhUMUc3QnZmZGdQNEVyOGdGNHNVYmFTMGk3UXZJZkNXdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwYXRoLWtleSI6ICJeMy4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtYXNzaWduLy0vb2JqZWN0LWFzc2lnbi00LjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItckpnVFFua1VuSDFzRnc4eVQ2VlNVM3pEM3NXbXU2c1poSXNlWThWWCtHUnUzUDZGN0Z1K0pORG9YZmtsRWxiTEpTbmMzRlVRSFZlNGNVNWhqK0JjVWc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9vYmplY3QtaW5zcGVjdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTMuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWluc3BlY3QvLS9vYmplY3QtaW5zcGVjdC0xLjEzLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVc2N2lMbDRKMkVYRUdUYmZlSENmZnJqRGZpdHZMQU5nMFVsWDN3RlVVU1R4OTJLWFJGZWdNSFVWZ1NxRSt3dmhBYmk0V3FqR2c5Y3p5c1RWMkVwYmV3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvb24tZmluaXNoZWQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjQuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItb1ZsemtnM0VOQWhDazJ6ZHY3SUp3ZC9RVUQ0ejJSeFJ3cGtjR1k4cHNDVmNDWVpOcTR3WW5WV0FMSE0rYnJ0dUpqZVBXaVlGL0NsbXVEcjhDaDUra2c9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVlLWZpcnN0IjogIjEuMS4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL29uY2UiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25jZS8tL29uY2UtMS40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxOYUpnSSsyUTVVUlFCa2NjRUtIVFFPUGFYZFV4blpaRWxRVFpZME1GVUF1YUVxZTFFK055dmdkei9hSXlOaTZaOU16TzVkdjFIOG41OC9HRUxwMyt3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJ3cmFwcHkiOiAiMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvb25lLXRpbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25lLXRpbWUvLS9vbmUtdGltZS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNURYT2lSS3d1U0VjUS9sMGtHQ0Y2UTNqY0FERnY1dFNtUmFKY2svT3FrVkZjT3p1dEIxMzRLUlNmRjB4RHJMMzlNTm5xeGJIQmJVVWNqWkloVGdiMmc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImZuLm5hbWUiOiAiMS54LngiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL29uZXRpbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25ldGltZS8tL29uZXRpbWUtNS4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWticGFTU0dKVFdkQVk1S1BWZU1PS1hTclB0cjhDOEM3d29kSmJjc2Q1MWpSbm1EK0dadThZMFZvVTZEbTVaNHZXcjBJZy8xTkt1V1JLZjdqNWFhWVNnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm1pbWljLWZuIjogIl4yLjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL29wdGlvbmF0b3IiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjkuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3B0aW9uYXRvci8tL29wdGlvbmF0b3ItMC45LjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZJcFE3bUtVeFJjWk5MSU9iUjBoejdseHNhcFNTSVlOWkp3WFBHZUYwbVRWcUdLRklYajFEUWNNb1QyMlMzUk9jTHlZL3J6MFBXYVdaOWF5V21hZDlnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImRlZXAtaXMiOiAiXjAuMS4zIiwKKyAgICAgICAgImZhc3QtbGV2ZW5zaHRlaW4iOiAiXjIuMC42IiwKKyAgICAgICAgImxldm4iOiAiXjAuNC4xIiwKKyAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIiwKKyAgICAgICAgInR5cGUtY2hlY2siOiAiXjAuNC4wIiwKKyAgICAgICAgIndvcmQtd3JhcCI6ICJeMS4yLjUiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuOC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9veGMtcGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMTYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb3hjLXBhcnNlci8tL294Yy1wYXJzZXItMC4xMTYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdWdFbzZ3d3FhcUNHY3BpN0dzTEN3U2tvRDdnSVh6dnRkYVR4RSttYnJYRllhelU1UTlZZHBaZEFqOXoyYjc5aS94bHYrdVcyYUF2eXpHQWxwVXpoS1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQG94Yy1wcm9qZWN0L3R5cGVzIjogIl4wLjExNi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMjAuMTkuMCB8fCA+PTIyLjEyLjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL0Jvc2hlbiIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWFuZHJvaWQtYXJtLWVhYmkiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWFuZHJvaWQtYXJtNjQiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWRhcndpbi1hcm02NCI6ICIwLjExNi4wIiwKKyAgICAgICAgIkBveGMtcGFyc2VyL2JpbmRpbmctZGFyd2luLXg2NCI6ICIwLjExNi4wIiwKKyAgICAgICAgIkBveGMtcGFyc2VyL2JpbmRpbmctZnJlZWJzZC14NjQiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LWFybS1nbnVlYWJpaGYiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LWFybS1tdXNsZWFiaWhmIjogIjAuMTE2LjAiLAorICAgICAgICAiQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC1hcm02NC1nbnUiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LXBwYzY0LWdudSI6ICIwLjExNi4wIiwKKyAgICAgICAgIkBveGMtcGFyc2VyL2JpbmRpbmctbGludXgtcmlzY3Y2NC1nbnUiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbCI6ICIwLjExNi4wIiwKKyAgICAgICAgIkBveGMtcGFyc2VyL2JpbmRpbmctbGludXgtczM5MHgtZ251IjogIjAuMTE2LjAiLAorICAgICAgICAiQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC14NjQtZ251IjogIjAuMTE2LjAiLAorICAgICAgICAiQG94Yy1wYXJzZXIvYmluZGluZy1saW51eC14NjQtbXVzbCI6ICIwLjExNi4wIiwKKyAgICAgICAgIkBveGMtcGFyc2VyL2JpbmRpbmctb3Blbmhhcm1vbnktYXJtNjQiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLXdhc20zMi13YXNpIjogIjAuMTE2LjAiLAorICAgICAgICAiQG94Yy1wYXJzZXIvYmluZGluZy13aW4zMi1hcm02NC1tc3ZjIjogIjAuMTE2LjAiLAorICAgICAgICAiQG94Yy1wYXJzZXIvYmluZGluZy13aW4zMi1pYTMyLW1zdmMiOiAiMC4xMTYuMCIsCisgICAgICAgICJAb3hjLXBhcnNlci9iaW5kaW5nLXdpbjMyLXg2NC1tc3ZjIjogIjAuMTE2LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3AtbGltaXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMy4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRZT2FuTTN3R3dOR3NaTjJjVlRZUEFydzQ1NHhuWGo1cW1XRjFiRW9BYzQrY1Uvb2w3R1ZoN29kZXZqcDFGTkhkdUhjM0taTWNGZHV4VTVYYzZ1SlJRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInlvY3RvLXF1ZXVlIjogIl4wLjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLWxvY2F0ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxvY2F0ZS8tL3AtbG9jYXRlLTUuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MYU5qdFJXVUJZKyt6QjVuRS9Od2Nhb015bFNQaytTK1pITkIxVHpkYk1KTW55NmR5bnBBR3Q3WC90bC9RWXEzVEllRTZueEhwcGJvMkxHeW1yRzVQdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLWxpbWl0IjogIl4zLjAuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wLXRyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLXRyeS8tL3AtdHJ5LTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNG5QQVZUQVUwQjlEMzUvR2szdUpmLzdYWWJRY3lvaFNLZHZBeElSU05naEZsNGU3MWhWb0duQk5RejljV2FYeE8ySTEwS1RDKzNqTWR2dm9LdzZkUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhY2thZ2UtanNvbi1mcm9tLWRpc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFja2FnZS1qc29uLWZyb20tZGlzdC8tL3BhY2thZ2UtanNvbi1mcm9tLWRpc3QtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVFWklTMy9ieTRPQzh2TDNQMmRUWFJFVHBlYkxJMk5pSTV2SXJqYUQvNVV0cmtGWC90TmJ3alRTUkFHQy8rN0NBbzJwSWNCYVJnV21jQkJIY3NhQ0l3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYWQtcmlnaHQiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFkLXJpZ2h0Ly0vcGFkLXJpZ2h0LTAuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00Y3k4TTk1aW9JR29sQ29NbW0yY01udEdSMWxQTEViT016T0t1OGJ6anVKUDZKcHpFTVFjREhtaDdoSExZR2dvYituS2UxWUhGTWFHNFY1OUhRYTg5Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJyZXBlYXQtc3RyaW5nIjogIl4xLjUuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3Bha28iOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjIuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFrby8tL3Bha28tMC4yLjkudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5VY3dhS3hVeFdyWkxwREcrei94WmFDZ1FJVGtBL0R2NFYvVDZidzdWT042bDFYei9WbnJCcXJZalpRMTJUYW1LSHpJVFRmT0VJWVVqNDh5MktYSW1BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhcmVudC1tb2R1bGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyZW50LW1vZHVsZS8tL3BhcmVudC1tb2R1bGUtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdRMkVXUnBRVjgvbytBdzhZcXRmWlpQZk5SV1pZa2JpZEU5azVycGwvaEMzdnRISEJmR20ySWZpNnFXVitjb0RHa3JVS1pBeEUzTG90NWtjc1JsaCtnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNhbGxzaXRlcyI6ICJeMy4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49NiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGFyc2UtanNvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi01LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXlDS3ZtL3BoQ0d4T2tZUlNDTTgyaUR3Y3Q4L0VvblNFZ0NTeFd4RDd2ZTZqSGdnc0ZsNGZaVlFCUFJOZ1FvS2l1Vi9vZGhGckd6UVhad2JpZkM4Umc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMC4wIiwKKyAgICAgICAgImVycm9yLWV4IjogIl4xLjMuMSIsCisgICAgICAgICJqc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6ICJeMi4zLjAiLAorICAgICAgICAibGluZXMtYW5kLWNvbHVtbnMiOiAiXjEuMS42IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGFyc2V1cmwiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2V1cmwvLS9wYXJzZXVybC0xLjMuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ2l5ZU94RlQvSlp5TjVtMHo5UGZYdzRTQ0JKNlN5Z3oxRHBsMHdxamxoREVHR0JQMUduc1VWRUwwcDYzaG9HMWZjajNmSHluWGk5TllPNG5XT0wrcVE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGF0aC1leGlzdHMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1leGlzdHMvLS9wYXRoLWV4aXN0cy00LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWs5UXk1UTdqWWIyV3djZXk1RnB2ZzJLb0FjL1pJaExTTE9TQm1SbXlnUHNHd2tWVnQwZlphMHFydE16K202dEpUQUhmWlE4Rm5tQjRNRzRMV3k3L3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLWV4cHJlc3Npb24tbWF0Y2hlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4cHJlc3Npb24tbWF0Y2hlci8tL3BhdGgtZXhwcmVzc2lvbi1tYXRjaGVyLTEuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jYnJlclpWKzZydmRRcnJEK2lHTWNaRkVpaVNyYnY5VGZka3ZudXN5NnkweDBHS0JYUkVGZy9ZNjVHaElmbTB0bkxudFRoaHpDbmZLd3AxV1JqZUN5UT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9OYXR1cmFsSW50ZWxsaWdlbmNlIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhdGgtaXMtYWJzb2x1dGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1pcy1hYnNvbHV0ZS8tL3BhdGgtaXMtYWJzb2x1dGUtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFWYnczVUoyZTlicTY0dlNhUzlBbTBmamUxUGE4cGJHcVRUc21YZmFJaU1wbnI1RGxEaGZKT3VMajlTZjk1WlBWREFVZXJEZkVrODhNUG1QZTdVQ1FnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLWtleSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWtleS8tL3BhdGgta2V5LTMuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vam1lTjBxZCt5MGpzekV0b1k0OHIwUGVxNWR3TUVrSWxDT3U2UTVmNDFsZmtzd1h1S3RZcmhnb1RwTG55SWNIbTI0VWhxeCs1VHFtMkluU3dMaEU2UT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLXNjdXJyeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLXNjdXJyeS8tL3BhdGgtc2N1cnJ5LTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zTy9pVlZzSkFQc09ucHdXSWVEK2Q2ei83UG1xQXB5UWVQVXRDbmRqYXRqLzlJNUx5bEh2dDVxbHVGYUJUM0k1aDNyMWVqZlIwNTZjK0ZDditObk5YZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQmx1ZU9hay0xLjAuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibHJ1LWNhY2hlIjogIl4xMS4wLjAiLAorICAgICAgICAibWluaXBhc3MiOiAiXjcuMS4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIxOCB8fCAyMCB8fCA+PTIyIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhdGgtc2N1cnJ5L25vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxMS4zLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS0xMS4zLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU54VkZ3TEFucmQ5aTdLVUJ4QzREclVobWdqek9zKzFRbTUwRDNvRjEvb0wrcjFOcFo0Z0E3eHZHMC96SjhldlI3eklLbjR2TGY3cVROZHVXRnRDclJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIyMCB8fCA+PTIyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wYXRoLXRvLXJlZ2V4cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguNC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLXRvLXJlZ2V4cC8tL3BhdGgtdG8tcmVnZXhwLTguNC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xUmN1SWRQNjlOUG00cWJBQ0srYURvZ0k1Q0JETWkxaktlMHJ5NXJTUUp6OEpWTHNDN2pWOFhwaUpqR1JMTG9sM04rUjVpaEdZY3JQTFRubzZwQWRCQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2V4cHJlc3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3BhdXNlLXN0cmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC4xMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF1c2Utc3RyZWFtLy0vcGF1c2Utc3RyZWFtLTAuMC4xMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItZTNGQmxYTG1OL0QxUyt6SHphblA0RS80WjYwb0ZBYTNPMDUxcXQxcHhhN0RFSldLQXlpbDZ1cFlWWENXYWRFbnVvcWE0UGtjOW9VeDl6c3hZZVJ2OEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogWworICAgICAgICAiTUlUIiwKKyAgICAgICAgIkFwYWNoZTIiCisgICAgICBdLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRocm91Z2giOiAifjIuMyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGVyaXNjb3BpYyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wZXJpc2NvcGljLy0vcGVyaXNjb3BpYy00LjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUQvQ25qRUk2VEpZd3FMWG1FVkJ5RWJUMVJ3VUdTVzNXNTF0L3VXZisyQWc3Rk1ITHFKMVhOaGF3R2FYQmY5L2dacitEaEYzYlRHTE93KzAzR0puemc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL2VzdHJlZSI6ICIqIiwKKyAgICAgICAgImlzLXJlZmVyZW5jZSI6ICJeMy4wLjIiLAorICAgICAgICAiemltbWVyZnJhbWUiOiAiXjEuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9waWNvY29sb3JzIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29jb2xvcnMvLS9waWNvY29sb3JzLTEuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14Y2VIMnNuaHRiNU05bGlxRHNtRXc1NmxlMzc2bVRaa0VYL2pFYi9SeE5GeWVnTnVsN2VOc2xDWFA5RkRqL0xjdTBYOEtFeU1jZVAybnRwYUhyREVWQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9waWNvbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGljb21hdGNoLy0vcGljb21hdGNoLTQuMC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RUDg4QkFLdk1hbS8zTnhINnZqMm8yMVI2TWp4WlVBZDZubHdBUy9wbkd2TjlJVkxvY0xIeEdZSXpGaGc2ZlVRKzV0aDZQNGR2NGVXOWpYM0RTSWo3QT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvam9uc2NobGlua2VydCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGlyYXRlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC43IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waXJhdGVzLy0vcGlyYXRlcy00LjAuNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVGZ5U3JzLzVubThmUUpEY0JEdVVuZzNWT1VLc2Q3Uyt6cXZiT1RpR1hIZnhYNHdLMzFhcmQraG9OdXZraWNNLzJZRnpscERnQUJPZXZLU3NCNEcvRkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGtjZS1jaGFsbGVuZ2UiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGtjZS1jaGFsbGVuZ2UvLS9wa2NlLWNoYWxsZW5nZS01LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd1EwYi9XNEZyMDFxdHBIbHFTcXNwY2ozRWhCdmltc2RoMEtsSGhIOEhSWm5Nc0VhMGVhMmZUVUxPWE9TOWNjUXIzb20rR2NHUms0ZStpc3JaV1Y4cVE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTYuMjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGtnLWRpciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wa2ctZGlyLy0vcGtnLWRpci00LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSFJEemJhS2pDK0FPV1ZYeEFVL3g1NENPR2VJdjllYis2Q2tEU1FvTlR0NFh5V29JSnZ1UHNYaXp4dS9GcjIzRWlla2J0WndtaDFJY0lHL2wvYTEwR1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmluZC11cCI6ICJeNC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGtnLWRpci9ub2RlX21vZHVsZXMvZmluZC11cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC00LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUHBPd0FkUS9ZbFhRMnZqOGEzaDhJaXBEdVlSaTN3Y2VWUVFHWVd4TklOY2NxNDBBbnc3QmxzRVhDTWJ0MVp0K09MQTZGcTlzdUlwSVdEME9zbklTbHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjUuMC4wIiwKKyAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wa2ctZGlyL25vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwLWxvY2F0ZSI6ICJeNC4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGtnLWRpci9ub2RlX21vZHVsZXMvcC1saW1pdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0yLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItLy84OG1GV1NKeDhseEN6d2RBQUJUSkwyTXlXQjEyK2VJWTdNREwyU3FMbUFrZUtVOXF4UnZXdVN5VGptM0ZVbXBCRU11RmZja0FJcUVhVkdVRHhiNnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicC10cnkiOiAiXjIuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcGtnLWRpci9ub2RlX21vZHVsZXMvcC1sb2NhdGUiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS00LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjc5WlovMHdBeEtHdTNvWU1sejhqeS9rYmhzTnJTN1NLWjdQeEVIQmdKNStGMm10RlcyZksyY090QmgxY0hZa1FzYnpGVjdJK0VvUktlNll0MG9LN0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicC1saW1pdCI6ICJeMi4yLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHJlbHVkZS1scyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmVsdWRlLWxzLy0vcHJlbHVkZS1scy0xLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmtjRFByUlpvMVFaTGJuNVJMR1BwZy9XbUlRNjVxb1dXaGNHS2YvYjVlcGxra2FyWDBtOXo4cHBDYXQ0bWxPcVVzV3B5TnVZZ08zVlJ5cllIU3pYNWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3ByZXR0aWVyIjogeworICAgICAgInZlcnNpb24iOiAiMy44LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0aWVyLy0vcHJldHRpZXItMy44LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdpZ1BUTTUzY0dITVc4eFd1VlR5ZGkyS08yMzNWRmlUTnlGNWhMSnFwaWxIZm1uOEM4Z1BmK1BTN2RVVDY0WWNYRmJpTUdaeFM5cENTeEwvRHhtL0p3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInByZXR0aWVyIjogImJpbi9wcmV0dGllci5janMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ByZXR0aWVyL3ByZXR0aWVyP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHJldHRpZXItbGludGVyLWhlbHBlcnMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHRpZXItbGludGVyLWhlbHBlcnMvLS9wcmV0dGllci1saW50ZXItaGVscGVycy0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItU3hUb1I3UDhZMmxXbXYva1R6VkxDMXQvR0RJMldHak13TmhMTEU5cXRIOFExM0MrYUVtdVJsekRzdDRVcDRzMFdjOHNGMk0rSjU3aUIzY01McWZ0Zmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZmFzdC1kaWZmIjogIl4xLjEuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02LjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMwLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMzAuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vRzRUM3dDYmZldXZsam55QXpoQnZwTjQ1RThpT1RYQ1UvVEQzelhXODBIQTNkUTRhaGRxTWtXR2lQV1p2anBRd2xieUhyUFRXVUFxVXpHenY0bDFKUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAamVzdC9zY2hlbWFzIjogIjMwLjAuNSIsCisgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4yLjAiLAorICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjMuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wcm9jZXNzIjogeworICAgICAgInZlcnNpb24iOiAiMC4xMS4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJvY2Vzcy8tL3Byb2Nlc3MtMC4xMS4xMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2RHZWYvZHJXRm95ZEQxSnNNenVGZjgxMDBuWmwrR1QreWFjYzJiRWNlZDVmOVJqazR6K1d0RlVUQnU5UGhPaTlqL2pmbUJQdTBtTUVZNHdJZEFGOEE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wcm9ncmVzcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9ncmVzcy8tL3Byb2dyZXNzLTIuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03UGlIdExsbDVMZG5LSU13MTAwSSs4eEpYUjVnVzJRd1dZa1Q2aUp2YTBiWGl0WkthL1hNclNiZG1nM3IyWG5haWR6OVF1bWQwVlBhTXJabEY5VjlzQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuNC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wcm9wZXJ0eS1leHByIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb3BlcnR5LWV4cHIvLS9wcm9wZXJ0eS1leHByLTIuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TVnRteGhSRS9DR2tuM2VaWTFUNnBDOE5sbjZGci9sdTFtS1NnUnVkMGVDNzN3aGpHZm9Bb2dibjc4TGtEOGFGTDB6ejNiQUZlcktTbk9sN05sRXJCQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wcm94eS1hZGRyIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb3h5LWFkZHIvLS9wcm94eS1hZGRyLTIuMC43LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sbFFzTUxTVURVUFQ0NGpkclUvTzM3cWxuaWZpdERQK1p3cm1tWmNvU0t5TEt2dFp4cHlWMG4yL2JEL040dEJBQVovZ0pFZFpVN0tNcmFvSzErWFlBZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZm9yd2FyZGVkIjogIjAuMi4wIiwKKyAgICAgICAgImlwYWRkci5qcyI6ICIxLjkuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC4xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcHVueWNvZGUiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVueWNvZGUvLS9wdW55Y29kZS0yLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdll0N1VEMVU5V2c2MTM4c2hMdExPdmRBdSs4RHNDL2lsRnRFVkhjSCt3eWRjU3BORTIwQWZTT2R1ZjZNa1JGYWhMNUZZN1gxb1U3bktWWkZ0ZnE4Rmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9wdW55Y29kZS5qcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdW55Y29kZS5qcy8tL3B1bnljb2RlLmpzLTIuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11eEZJSFUwWWxIWWhEUXRWNFI5SjZhNTJTTHgyOEJDalQrNGllaDdJR2Jnd1ZKV08ra200MzFjNHlSbFJFVUFzQW10L3VNalFVeVFITkVQZjBNMzlDQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3B1cmUtcmFuZCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdXJlLXJhbmQvLS9wdXJlLXJhbmQtNi4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJWV2F3dm9ab0JZcHA2eUlvUXRRWEhaam16MzVSU1ZIblVPVGVmbDhWY2pyOHNuVFBZMXducFNQTVdla2NGd2J4STZndG1UN3JTWVBGdno3MWxkaU9BPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9kdWJ6enoiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9mYXN0LWNoZWNrIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9xcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMTUuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcXMvLS9xcy02LjE1LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZZSEVGUkw5bWZnY0F2cWwvWGh3VHZmNWpLY09paXVwdDJGaUp4SGtpWDF6NGo3V0w4Si9qUkhZTGx1T1J2YzFYeEI1clYyMEtvZUswMGdWSmFtc3BnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzaWRlLWNoYW5uZWwiOiAiXjEuMS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuNiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yYW5kb21ieXRlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5kb21ieXRlcy8tL3JhbmRvbWJ5dGVzLTIuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12WWwzaU9YKzRDS1VXdXhHaTlVa2hpZTZmc3FYcVM5RkUyWmFpYzR0TkZEMk4yUVFhWE9NRmJ1S0s0UW1ESEMwSk82QjFacDQxSjBMcFQwb1I2OGFtUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJzYWZlLWJ1ZmZlciI6ICJeNS4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JhbmdlLXBhcnNlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhyZ3N4K29ycW95Z25taEZiS2FIRTZjMjk2SitIVEFRWG94RUY2Z051cFJPbW1HSlJveXpmRzNjY0F2ZXFDQnJ3ci8yeXhRNUJWZC9HVGw1YWdPd1NnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3Jhdy1ib2R5IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jhdy1ib2R5Ly0vcmF3LWJvZHktMy4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUs1elFqRGxseFdrZjdaNXhKZFYwL0IwV1ROcXg2dnhHNzB6SkU0TjBrQnM0TG92bUVZV0p6UUd4QzliUzlSQUt1M2JnTTQwbHJkNXpvTEoxMk1RNUJBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJieXRlcyI6ICJ+My4xLjIiLAorICAgICAgICAiaHR0cC1lcnJvcnMiOiAifjIuMC4xIiwKKyAgICAgICAgImljb252LWxpdGUiOiAifjAuNy4wIiwKKyAgICAgICAgInVucGlwZSI6ICJ+MS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuMTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWN0LWlzIjogeworICAgICAgInZlcnNpb24iOiAiMTguMy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE4LjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItL0xMTVZ5YXMwbGpqQXRvWWlQcVlpTDhWV1h6VVVkVGhybVU1K24yMERadithK0NsUm9ldlV6dzVKeFUrSWVoNS9jODd5dG9UQlY5RzFGaUtmTkpkbWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVhZC1wYWNrYWdlLXVwIjogeworICAgICAgInZlcnNpb24iOiAiMTIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkLXBhY2thZ2UtdXAvLS9yZWFkLXBhY2thZ2UtdXAtMTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RNWhNVkJZdXIvZVFOV0RkYkY0L1dxcXI5Qmp2dHJ3MmtqR3h4QmJLTGJ4OGJWQ0w4Z2NBcmpUeTh6RFV1TEdRaWNmdHBNdVUwcmlRTmNBc2J0T1Zzdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmaW5kLXVwLXNpbXBsZSI6ICJeMS4wLjEiLAorICAgICAgICAicmVhZC1wa2ciOiAiXjEwLjAuMCIsCisgICAgICAgICJ0eXBlLWZlc3QiOiAiXjUuMi4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGFja2FnZS11cC9ub2RlX21vZHVsZXMvdHlwZS1mZXN0IjogeworICAgICAgInZlcnNpb24iOiAiNS42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC01LjYuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOFppSEZtOTFvcmJTQWUyUFNBaVNWQlZrbzE4cGJoYmlCM1U5R2dsU3pGL3pDR2tSK3J4cEh4NnNFTUNVbTRreFk0TGpESVVHZ0NmVU10d2ZaZmpmVUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIihNSVQgT1IgQ0MwLTEuMCkiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRhZ2dlZC10YWciOiAiXjEuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTIwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGtnIjogeworICAgICAgInZlcnNpb24iOiAiMTAuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkLXBrZy8tL3JlYWQtcGtnLTEwLjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItSThnMmxBclFpUDc4bGw1MVVlTVpvamV3dFlnSVJDS0NXcVpFZ09POGMvdWVmVEkrWERYdkNTWHUzK1lOVWFUTnZaem9ickw1K1NxSGpCckJ5UlJUZGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHR5cGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiAiXjIuNC40IiwKKyAgICAgICAgIm5vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiAiXjguMC4wIiwKKyAgICAgICAgInBhcnNlLWpzb24iOiAiXjguMy4wIiwKKyAgICAgICAgInR5cGUtZmVzdCI6ICJeNS40LjQiLAorICAgICAgICAidW5pY29ybi1tYWdpYyI6ICJeMC40LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVhZC1wa2cvbm9kZV9tb2R1bGVzL3BhcnNlLWpzb24iOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2UtanNvbi8tL3BhcnNlLWpzb24tOC4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXliaUd5dnNwSStmQW9SUWJJUFJkZENjU1RWOS9Mc0piZjBlL1M4NVZMb3dWR3pSbW9rZm5lZzJrd1ZXL0tVNXJPWHJQU2JGMXFBS1BNZ05UcXFST1FRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjI2LjIiLAorICAgICAgICAiaW5kZXgtdG8tcG9zaXRpb24iOiAiXjEuMS4wIiwKKyAgICAgICAgInR5cGUtZmVzdCI6ICJeNC4zOS4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGtnL25vZGVfbW9kdWxlcy9wYXJzZS1qc29uL25vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQxLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC00LjQxLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRlVFNRNkg1WUh2cHFWd0JSY25MRENCbkRPSFdZdTdJdkdiSFQ2TjhBT3ltY3I5UEpHamMxR1R0aVdaVFlnME5DZ1l3dm5ZV0VrVkNoUUFyOWJqZndBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICIoTUlUIE9SIENDMC0xLjApIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGtnL25vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTUuNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04WmlIRm05MW9yYlNBZTJQU0FpU1ZCVmtvMThwYmhiaUIzVTlHZ2xTekYvekNHa1IrcnhwSHg2c0VNQ1VtNGt4WTRMakRJVUdnQ2ZVTXR3ZlpmamZVQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiKE1JVCBPUiBDQzAtMS4wKSIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidGFnZ2VkLXRhZyI6ICJeMS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtIjogeworICAgICAgInZlcnNpb24iOiAiNC43LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS00LjcuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0lHR21jcFRMd1BnYThCbjYvWjc1U1ZhSDF6NWRVdXQyaWJTeUFNVmhtVWdnV3BtRG4yZGFwQjBuN2Y4bndhU2lSdGVwQXNmSnlmWElPNURDVkFPRGc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFib3J0LWNvbnRyb2xsZXIiOiAiXjMuMC4wIiwKKyAgICAgICAgImJ1ZmZlciI6ICJeNi4wLjMiLAorICAgICAgICAiZXZlbnRzIjogIl4zLjMuMCIsCisgICAgICAgICJwcm9jZXNzIjogIl4wLjExLjEwIiwKKyAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIl4xLjMuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjEyLjIyLjAgfHwgXjE0LjE3LjAgfHwgPj0xNi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlYWRkaXJwIjogeworICAgICAgInZlcnNpb24iOiAiNC4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRkaXJwLy0vcmVhZGRpcnAtNC4xLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdEaHdrTGZ5d1dMMnM2dkVqeWhyaStlWG1mSDZqMUw3SkUyN1docUxlWXpvaC9BM0RCYVlHRWoySC9IRlpDbi9rTWZpbTczRlh4RUpUdzA2V3R4UXdnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDE0LjE4LjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogImluZGl2aWR1YWwiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vcGF1bG1pbGxyLmNvbS9mdW5kaW5nLyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVhZGxpbmUtdHJhbnNmb3JtIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRsaW5lLXRyYW5zZm9ybS8tL3JlYWRsaW5lLXRyYW5zZm9ybS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0tBNitOOUlHYXQ1MmQ4M2R2eG5BcEFXTitNdFZiMU1pVnVNUi9jZjFPNGtZc0pHK2cvQWF2MEFIY0hLc2I2U3RpbmF5ZlBMbmUwK2ZNWDJzT3pBS2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZWZsZWN0LW1ldGFkYXRhIjogeworICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlZmxlY3QtbWV0YWRhdGEvLS9yZWZsZWN0LW1ldGFkYXRhLTAuMi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11ckJ3Z2ZydlZQL2VBeVh4NGhsdUppdkJLenVFYlNRczlyS1dDckNrYlN4TnY4bXhQY1VaS2V1b0YzVXk0bUpsM0x3cHJwNnl5NS8zOVZXaWdaNEs2UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVnZXhwLW1hdGNoLWluZGljZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZXhwLW1hdGNoLWluZGljZXMvLS9yZWdleHAtbWF0Y2gtaW5kaWNlcy0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRHdadUFrdDhORjVtS3dHR0VSMUVHaDJQUnF5dmhSaGhMdmlIK1I4eThkSXVhUVJPbFVmWGp0NHM5WlRYc3RJc1NrcHRmMDZCU3Z3Y0VtbWZoZUpKV1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInJlZ2V4cC10cmVlIjogIl4wLjEuMTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlZ2V4cC10cmVlIjogeworICAgICAgInZlcnNpb24iOiAiMC4xLjI3IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdleHAtdHJlZS8tL3JlZ2V4cC10cmVlLTAuMS4yNy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUVUeHBqSzZZb1JXSkc1bzZoWEx3dmpZQW9XK0ZFWm45b3MwUEQvYjZBUDZ4UXdzYS9ZN2xDVmdJaXhCYlVQTWZodStpMkx0ZGVBcVZUZ0dsUWFyZkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiYmluIjogeworICAgICAgICAicmVnZXhwLXRyZWUiOiAiYmluL3JlZ2V4cC10cmVlIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcGVhdC1zdHJpbmcvLS9yZXBlYXQtc3RyaW5nLTEuNi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QVjBkekNZRE5mUmkxakNEYkp6cFc3ak5ORFJ1Q09HL2pJNWN0UWNHS3QvY2xaRCtZY1BTM3lJbFd1VEpNbUVTQzhhZXZDRm1XSnk1d2pBRmdOcU42dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuMTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3JlcXVpcmUtZGlyZWN0b3J5IjogeworICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZGlyZWN0b3J5Ly0vcmVxdWlyZS1kaXJlY3RvcnktMi4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZHeEVJNyt3c0c5eHJ2ZGpzcmxtTDIyT01UVGlIUndBTXJvaUVlTWdxOGd6b0xDL1BRcjdSc1JEU1RMVWcvYlpBWnRGK1RWSWtIYzYvNFJJS3J1aStRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC4xMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXF1aXJlLWZyb20tc3RyaW5nIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZnJvbS1zdHJpbmcvLS9yZXF1aXJlLWZyb20tc3RyaW5nLTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YZjBuV2U2UnNlemlGTXUrQXA5YmlpVWJtcGxxNlM5L3ArN3c3WVhQL0pCSGhyVUREVWh3YSt2QU55dWJ1cWZaV1R2ZVUvL0RZVkdzREc3UktML3ZFdz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3Jlc29sdmUtY3dkIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtY3dkLy0vcmVzb2x2ZS1jd2QtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9yWmFYMk1iK3JKQ3BILzZDcFNxdDl4RlZwTisreDAxWG5OMmllOWc2UDUvM3hlbExBa1hXVkFEcGR6MUlIRC9LRmZFWHlFNlYwVTAxT1EzVU8yckVnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS1jd2Qvbm9kZV9tb2R1bGVzL3Jlc29sdmUtZnJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWZyb20vLS9yZXNvbHZlLWZyb20tNS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFZZzlLUDI0ZEQ1cWthOUo0N2QwYVZreTBOK2I0ZlRVODlMTjlpRG5qQjV3YWtzaUM0OXJ2TUIwUHJVSlFHb1RtSDUwWFBpcU92QWpEZmFpakd4WVp3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS1mcm9tIjogeworICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtZnJvbS8tL3Jlc29sdmUtZnJvbS00LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGIvTVltWHN0QWt5c1JGeDhwaU5JMXRHRk5RSUZBM3ZrRTNHcTRFdUExZEY2Z0hwLyt2Z1pxc0NHSmFwdnk4TjNRKzRvN0Z3dnF1UEpjblo3Ull5NGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXNvbHZlLXBrZy1tYXBzIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtcGtnLW1hcHMvLS9yZXNvbHZlLXBrZy1tYXBzLTEuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zZVMyVGoyNlRCVk9DMk5JYzJyT2UyeTJaTzdlZnhJVHRMWmNHU09uSEhOT1E3Q2tpVUJmdzBJdzJjazZ4a0loUHdMaEtOTFM4Qk8raEVwbmdRbHF6dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9wcml2YXRlbnVtYmVyL3Jlc29sdmUtcGtnLW1hcHM/c3BvbnNvcj0xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXN0b3JlLWN1cnNvciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXN0b3JlLWN1cnNvci8tL3Jlc3RvcmUtY3Vyc29yLTUuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vTUEyZGNydzZ1MFlmeEpRWG0zNDJiRktYL0U0c0c5cmJUek85cHRVY1IvZThBMzNjSHV2U3RpWU93SDdmc3prWmxaMXovdGE5QUFvUGsyRjRxSU9IQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJvbmV0aW1lIjogIl43LjAuMCIsCisgICAgICAgICJzaWduYWwtZXhpdCI6ICJeNC4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvcmVzdG9yZS1jdXJzb3Ivbm9kZV9tb2R1bGVzL29uZXRpbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25ldGltZS8tL29uZXRpbWUtNy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZYSmpjODdGU2NGODh1YWZTM0psbERndkFtK2MvU2xmejA2bG9yajJ1QVkzNHJsVXUwTnQrdjh3cmVpSW1jcmdBampJSHAxclhwVERsTE9HdzI5V3dRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIm1pbWljLWZ1bmN0aW9uIjogIl41LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZXN0b3JlLWN1cnNvci9ub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lnbmFsLWV4aXQvLS9zaWduYWwtZXhpdC00LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnp5WjFlODh3OU8xaU5KYktuT2x2WVRyV1BEbDQ2TzFiRzBEM1hJbnYrOXRrUHJ4ck44alVVVGlGbERra21LV2duMU02Q2ZJQTEzU3VHcU9hOUtvcnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yZmRjIjogeworICAgICAgInZlcnNpb24iOiAiMS40LjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JmZGMvLS9yZmRjLTEuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xMWIzTjVRa1JVV1VsN2l5eWxhYWoza09wSVQwTjJpOU1xSUVRWFA3M0dWc045Y3czZmR4OFg2M2NFbVdoSkdpMlBQQ0YyM0lqcDdrdG1kMzlyYXdJQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9yb3V0ZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcm91dGVyLy0vcm91dGVyLTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uTFRyVUttMlV5aUw3cmxoYXB1L1psNDVGd05na1pHYUNwWmJJSGFqRFlnd2xKQ096TFNrK2NJUEFuc0VxVjk1NUdqSUxKbktiZFFDMW5WUHorZ0FZUT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZGVidWciOiAiXjQuNC4wIiwKKyAgICAgICAgImRlcGQiOiAiXjIuMC4wIiwKKyAgICAgICAgImlzLXByb21pc2UiOiAiXjQuMC4wIiwKKyAgICAgICAgInBhcnNldXJsIjogIl4xLjMuMyIsCisgICAgICAgICJwYXRoLXRvLXJlZ2V4cCI6ICJeOC4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDE4IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMi4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ycDNTbzA3S2NkbW1LYkd2Z2FOeFFTSnI3YkdWU1ZrNVM5RXExRitwcGJSbzcwK1llYUR4a3c1RGQ4TlBOK0dENmJqblltMlZ1UHVDWG1wdVl2bUNYUT09IiwKKyAgICAgICJmdW5kaW5nIjogWworICAgICAgICB7CisgICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCisgICAgICAgIH0KKyAgICAgIF0sCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NhZmUtc3RhYmxlLXN0cmluZ2lmeSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuNS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLXN0YWJsZS1zdHJpbmdpZnkvLS9zYWZlLXN0YWJsZS1zdHJpbmdpZnktMi41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIzcnBwVEttOVQrUHNWQ0JFT1VSNDZHV0k3ZmRPczAwVktaMSs5YzFFV0RhRE12alFjNnRVd3VGeUlwcmdHZ1RjV29WSFNLclU4SDMxWkhBMmUwUkhBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zYWZlci1idWZmZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZXItYnVmZmVyLy0vc2FmZXItYnVmZmVyLTIuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZWm8zSzgyU0Q3Uml5aTBFMUVRUG9qTHo3a3BlcG5TUUk5SXlQYkhIZzFYWFhldmI1ZEpJN3RweU4yQUR4R2NRYkhHN3ZjeVJIazBjYndxY1FyaVV0Zz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2VlZC1yYW5kb20iOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VlZC1yYW5kb20vLS9zZWVkLXJhbmRvbS0yLjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMzRFUVY2QUFIUUdob2MwdG4vOTZhOUZzaTZ2MnhkcWUvZE1Vd2xqR1JhRk96UjNFZ1JtRUN2RDBPOHZpOFgrL3VRNTBMR0hma051L0V1ZTVUUEtaa1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2VtdmVyIjogeworICAgICAgInZlcnNpb24iOiAiNy43LjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjcuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkZLQzJJRXRRblZocFQ3OGgxWXA4d3p3cmY4Q00rTXpLTUhHSlpmQnR6aFpOeWNSRm5Yc0hrNkU1VHhJa2tNc2dOUzdtZFgzQUdCN3gyUU0yZGk0bEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiYmluIjogeworICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NlbmQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VuZC8tL3NlbmQtMS4yLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFnblpmN0RGY29JY2FqVGpUd2p3dURqenV6NFBQY1kyU3RLUGxzR0FRMStZSDIwSVJWckJhWFNXbWRqb3dUSjZ1OFJjMDFQb1lPR0hYZlAxbVljWk5RPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJkZWJ1ZyI6ICJeNC40LjMiLAorICAgICAgICAiZW5jb2RldXJsIjogIl4yLjAuMCIsCisgICAgICAgICJlc2NhcGUtaHRtbCI6ICJeMS4wLjMiLAorICAgICAgICAiZXRhZyI6ICJeMS44LjEiLAorICAgICAgICAiZnJlc2giOiAiXjIuMC4wIiwKKyAgICAgICAgImh0dHAtZXJyb3JzIjogIl4yLjAuMSIsCisgICAgICAgICJtaW1lLXR5cGVzIjogIl4zLjAuMiIsCisgICAgICAgICJtcyI6ICJeMi4xLjMiLAorICAgICAgICAib24tZmluaXNoZWQiOiAiXjIuNC4xIiwKKyAgICAgICAgInJhbmdlLXBhcnNlciI6ICJeMS4yLjEiLAorICAgICAgICAic3RhdHVzZXMiOiAiXjIuMC4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAorICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2V4cHJlc3MiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NlcmlhbGl6ZS1qYXZhc2NyaXB0IjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlcmlhbGl6ZS1qYXZhc2NyaXB0Ly0vc2VyaWFsaXplLWphdmFzY3JpcHQtNi4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNhYTF4UEJ5VFRxMmdkZUZaWUxMbytSRkUzNU5IWmtBYnFaZVdOZDNCcHpwcGVWaXNBcXBEamNwOGR5ZjZ1SXZFcUpSZDQ2amVtbXlBNGlGSWVWazhnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInJhbmRvbWJ5dGVzIjogIl4yLjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2VydmUtc3RhdGljIjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlcnZlLXN0YXRpYy8tL3NlcnZlLXN0YXRpYy0yLjIuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFJYQm4wcFBxUVRWUWlDOHd5UXJLczJNT2xYMjR6UTBQT0dhajBrdWx0dm9PQ3N0QlFNNXl2T2hBVlNVd09NalF0VHZzUFdvTkNIZlBHd2FhUUpoVHc9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVuY29kZXVybCI6ICJeMi4wLjAiLAorICAgICAgICAiZXNjYXBlLWh0bWwiOiAiXjEuMC4zIiwKKyAgICAgICAgInBhcnNldXJsIjogIl4xLjMuMyIsCisgICAgICAgICJzZW5kIjogIl4xLjIuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9leHByZXNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zZXRwcm90b3R5cGVvZiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FNUxEWDdXcnA4NUtpbDViaFp2NDZqOGpPZWJvS3E1Sk1tWU0zZ1ZHZEdIOHhGcFBXWFVNc05ybE9EQ3Jrb3hNRWVOaS9YWkl3dVJ2WTRYTndZTUpwdz09IiwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2hlYmFuZy1jb21tYW5kIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctY29tbWFuZC8tL3NoZWJhbmctY29tbWFuZC0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0h4cjJ6WnBZdGRtck4xcURqcnJYL1oxclIxa0c4RHgrZ2twSzFHNGVYbXZYc3dtY0UxaFRXQldZVXpscmFZdzEveVpwNll1RFk3N1l0dmJOMGRtREE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNoZWJhbmctcmVnZXgiOiAiXjMuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NoZWJhbmctcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlYmFuZy1yZWdleC8tL3NoZWJhbmctcmVnZXgtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcrK2RGaHRjeDMzNTN1QmFxOEREUjROdXhCZXRCekM3WlFPaG1UUUluSEVkNmJTclhkaUV5ekN2RzA3WjQ0VVlkTFNoV1V5WHQ1TS95aHo4ZWtjYjFBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaWRlLWNoYW5uZWwvLS9zaWRlLWNoYW5uZWwtMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpYOTllNnRSd2VvVVhxUitWQnJzbGhkYTUxTmg1TVRRd291NXRuVURnYnR5TTBkQmdtaEVEdFdHUC94YktuNmhxZlBSSHVqVU53ejVmeS93YmJobnB3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKKyAgICAgICAgIm9iamVjdC1pbnNwZWN0IjogIl4xLjEzLjMiLAorICAgICAgICAic2lkZS1jaGFubmVsLWxpc3QiOiAiXjEuMC4wIiwKKyAgICAgICAgInNpZGUtY2hhbm5lbC1tYXAiOiAiXjEuMC4xIiwKKyAgICAgICAgInNpZGUtY2hhbm5lbC13ZWFrbWFwIjogIl4xLjAuMiIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC1saXN0IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC1saXN0Ly0vc2lkZS1jaGFubmVsLWxpc3QtMS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1qbi8wYmkvb1VVUmpjNVhsN0lhV2kvT0pKSnVtdW9KRlFKZkREeU80NitoQldzZmFWTTY1VEJIcTJlb1pCaHpsOUVjaHhPaWpwa2JSQzhTVkJRVTB3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKKyAgICAgICAgIm9iamVjdC1pbnNwZWN0IjogIl4xLjEzLjQiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwtbWFwIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC1tYXAvLS9zaWRlLWNoYW5uZWwtbWFwLTEuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WQ2pDTmZnTXNieTN0VGRvMDJuYmp0TS9ld3JhNmpQSG1wVGhlbmtUWWg4cEc5dWNaLzFQOFNvNHU0RkdCZWsvQmpwT1ZzRENNb0xBL2l1QktJRlhSQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2FsbC1ib3VuZCI6ICJeMS4wLjIiLAorICAgICAgICAiZXMtZXJyb3JzIjogIl4xLjMuMCIsCisgICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuNSIsCisgICAgICAgICJvYmplY3QtaW5zcGVjdCI6ICJeMS4xMy4zIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjQiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsLXdlYWttYXAiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lkZS1jaGFubmVsLXdlYWttYXAvLS9zaWRlLWNoYW5uZWwtd2Vha21hcC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1BTL0h2SFFUWW5IaXNMbzlNY3FCSE9KazJGa0hPL3RscHZsZHlybmVtNGFlUXA0aGFpM2d5dGhzd2c2cDAxb1NvVGw1OHJjcGlGQWpGMmJyMkFrMkE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNhbGwtYm91bmQiOiAiXjEuMC4yIiwKKyAgICAgICAgImVzLWVycm9ycyI6ICJeMS4zLjAiLAorICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4yLjUiLAorICAgICAgICAib2JqZWN0LWluc3BlY3QiOiAiXjEuMTMuMyIsCisgICAgICAgICJzaWRlLWNoYW5uZWwtbWFwIjogIl4xLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC40IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0IjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjciLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQtMy4wLjcudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXduRDJaRStsK1NQQy91b1MwdlhlRTlMMSswd3VhTXFLbGZ6OUFNVW8zOEpzeUxTQldTRmNIUjFScmk2MkxaYzEydkxyMWdiM2psN2l3UWhnd3BBYkdRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NsYXNoIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsYXNoLy0vc2xhc2gtMy4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc5UTFoYWVieTM2T1NTdHdiNG50Q0dHR2FLc2FWU2pRNjhmQnhvUWN1dGw1ZlMxdnVZMThIM3dTdDNqRnlGdHJreCtLejBWMUc4NUE0TXlBZERNaTJRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc2xpY2UtYW5zaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbGljZS1hbnNpLy0vc2xpY2UtYW5zaS04LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItc3R4QnlyMTJvZWVPeVkyQmx2aVROUWxZVjV4T2o0N0dpclByNHlBMWhFOUpDdHhmUU4wK3RWYmt4d0N0WURRV2hFS1dGSHNFSzQ4T1JnNWpyb3VDQWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjYuMi4zIiwKKyAgICAgICAgImlzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogIl41LjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0yMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc2xpY2UtYW5zaT9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NsaWNlLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogeworICAgICAgInZlcnNpb24iOiAiNi4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNi4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTREajZNMjhKQitvQUg4a0ZrVExVbythMmp3T0ZrdXFiM3l1Y1UwQ0FOY1JSVWJ4UzBjUDBuWllDR2pjYzNCTlh3UklzVVZtREdnemF3bWU3enZKSHZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAtc3VwcG9ydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuNS4yMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC1zdXBwb3J0Ly0vc291cmNlLW1hcC1zdXBwb3J0LTAuNS4yMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdUJIVTNMM2N6c0l5WVhLWDg4ZmRyR292eGRTQ29UR0RSWjZTWVh0U1J4TFpVekhnNVAvNjZIdDZ1b1VsSHU5RVpvZCtpblhoS28zcVFnd1hVVC95MXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnVmZmVyLWZyb20iOiAiXjEuMC4wIiwKKyAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zcGR4LWNvcnJlY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BkeC1jb3JyZWN0Ly0vc3BkeC1jb3JyZWN0LTMuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rTjlkSmJ2bnlTSFVMSWx1REh5MzJXSFJVdTNPZzdCOXNiWTd0c0ZMY3RRa0lxbk1oM2hFcllnZE1qVFl1cW1jWFgrbEs1VDFsblV0M0c3ek5zd21aQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAic3BkeC1leHByZXNzaW9uLXBhcnNlIjogIl4zLjAuMCIsCisgICAgICAgICJzcGR4LWxpY2Vuc2UtaWRzIjogIl4zLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3BkeC1leGNlcHRpb25zIjogeworICAgICAgInZlcnNpb24iOiAiMi41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHgtZXhjZXB0aW9ucy8tL3NwZHgtZXhjZXB0aW9ucy0yLjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUGlVNDJyK3hPNFViVVMxYnVvM0xQSmtqbE83NDMwWG41U1ZBaGRwenpzUEhzamJZVmZsbm5GZEFUZ2Fibkx1ZGUrQ3F1MjVwNk4rZzJsdy9QRnNhNHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkNDLUJZLTMuMCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3BkeC1leHByZXNzaW9uLXBhcnNlIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHgtZXhwcmVzc2lvbi1wYXJzZS8tL3NwZHgtZXhwcmVzc2lvbi1wYXJzZS0zLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2JxSHVuc1FXbkpORTZLaFZTTXNNZUg1SC9MOUVweW1ienFUUTN1THdOQ0xaMVE0ODFvV2FvZnFIN25PNlYwN3hsWHdZNlBoUWRRMkllZFd4L1pLNFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAic3BkeC1leGNlcHRpb25zIjogIl4yLjEuMCIsCisgICAgICAgICJzcGR4LWxpY2Vuc2UtaWRzIjogIl4zLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3BkeC1saWNlbnNlLWlkcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4yMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BkeC1saWNlbnNlLWlkcy8tL3NwZHgtbGljZW5zZS1pZHMtMy4wLjIzLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DV0xjQ0NIN1ZMdTEzVGdPSCtyOHAxTy9abndocXYvZGJiNmxxV3k2N0crcFQxa0htZUQvK1YzNkFWYi92cThRTUlRd1ZTaEo2U3NsNUZQaDBmdVNkdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQ0MwLTEuMCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3BsaXQiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BsaXQvLS9zcGxpdC0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbVR5T29QYnJpdnRYbnduSXhaUkZZUnJQTnRFRktscEIyZnZqU25DUVVpQUE2cUFaenF3bmE1ZW52SzR1azZPSWVQMTdDc2RGM3JTQkdZVkJzVTBUa2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidGhyb3VnaCI6ICIyIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIqIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EOWNQZ2t2TGxWM3QzSXpMMEQwWUx2R0E5QWhrNFBjdlZ3VWJOMGRTR3IxYVAwTnJ0NEFFblRVYnVHdnF1RUMwbUE2NEdxdDFmemlybFJzNWliWHg4Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdGFjay10cmFjZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMC4xMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhY2stdHJhY2UvLS9zdGFjay10cmFjZS0wLjAuMTAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtHemFoYzdwdVVLa3p5TXQrSXFBZXArVFZOYktQK2syTG13aHViMzltMUFzVFNrYUR1dHg1NmFEQ28rSExEemYvRDI2QklIVEpXTmlURzFLQUppUUNnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICIqIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdGFjay11dGlscyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGFjay11dGlscy8tL3N0YWNrLXV0aWxzLTIuMC42LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbGtXdmZJbTZSbXNXdE5KeCt1cXRLTFM4ZXFGYnhVZzBaekxYcVkwY2FFeTlsN2hydVg4SXBpRG5qc0xhdm9CZ3FDQ1I3MVRxV084TWFYWWhlSjNSUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMi4wLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0YWNrLXV0aWxzL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTIuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcHpjTENYb2xVV2NOdTVIdFZNSFlkWEpqQXJqc0Y5QzBhTm5xdVpZWTR1Vy9WdTBtaXk1WW9XdmJWMzQ1SGF1VnZjQVVucFJ1aE1NY3FUY0dPWTIrdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0YWNrZnJhbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhY2tmcmFtZS8tL3N0YWNrZnJhbWUtMS4zLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9lVnR0N2VXUVMrTmE2Ri8vUzRrSjJLMlZiUmxTOUQ0M21BbE15VnBWV292eTlvK2pmZ0g4TzlhZ3pBTnphaUxqY2xBMG9ZelVYRU00UHVyaFNVQ2h3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0YXR1c2VzIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR2RXk1NVYzREI3dWtuUm8rNGlPR1Q1ZlAxc2xSOHdRb2hWZGtuaWdaUE1wTXN0YUtKUVdod2lZQkFDSkUzVWwycFRuQVRpaGhCWW5SaFpRSEdCaVJ3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmVhbS1jb21iaW5lciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJlYW0tY29tYmluZXIvLS9zdHJlYW0tY29tYmluZXItMC4yLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZ5SE1xZ0xZRHpRRGNBa0wrdGpKREM1blNOdU5JeDB2WnRSWmVpUGg3U2FlZjdWSFg5SDVJam45bDJWSW9sMnphTllsWUVYNkt5dVQvMjM3QTU4cUVRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImR1cGxleGVyIjogIn4wLjEuMSIsCisgICAgICAgICJ0aHJvdWdoIjogIn4yLjMuNCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nX2RlY29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjMuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGtSWDhVMVdqSkZkOExzREoyeVEvd1dXeGFvcEVzQUJVMVhma004QStqMCs4NUpBR3BwdDE2Y3IxV2hnNktJYmI0b2tVNk1xbDZCT2ordXVwL3dLZUE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjIuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5nLWFyZ3YiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjMuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLWFyZ3YvLS9zdHJpbmctYXJndi0wLjMuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTF1UUd6N0l5Vnk5WXdocWpaSVp1MWM4Sk84ZE5JZTIweEJtU1M2cXU5a3YrK2szSkd6Q1ZtcHJiTk41S24rQmd6RDVFN1lZd2cxQ2NqdUpNUk5zdmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjYuMTkiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmluZy1sZW5ndGgiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLWxlbmd0aC8tL3N0cmluZy1sZW5ndGgtNC4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStsNnJOTjVmWUhOaFpaeTQxUlhzWXB0Q2pBMklnbXE0RUc3a1pBWUZRSTFFMVZUWGFycjZaUFhCZzZlcTdZNmVLNEZFaFk2QUpseXVGSWIvdi9TMFZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNoYXItcmVnZXgiOiAiXjEuMC4yIiwKKyAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdHJpbmctbGVuZ3RoL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmluZy1sZW5ndGgvbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkzOFZQU0hjcWtGckNwRm5ROXZ1U1htcXV1djVvWE9LcEdlVDZhR3JyM28zR2M5QWxWYTZKQmZVU09DbmJ4R0daRisvMG9vSTdLclB1VVN6dFVkVTVBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMi4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctd2lkdGgvLS9zdHJpbmctd2lkdGgtNC4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdLeVFSUXBqSjBzSXA2MkVyU1pkR3NqTUpXc2FwNW9STmloSGh1Nkc3SlZPLzlqSUI2VXlldkwrdFh1T3Fybmc4ai9jeEtUV3lXVXd2U1RyaWlaei9nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVtb2ppLXJlZ2V4IjogIl44LjAuMCIsCisgICAgICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6ICJeMy4wLjAiLAorICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoLWNqcyI6IHsKKyAgICAgICJuYW1lIjogInN0cmluZy13aWR0aCIsCisgICAgICAidmVyc2lvbiI6ICI0LjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdpZHRoLTQuMi4zLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13S3lRUlFwakowc0lwNjJFclNaZEdzak1KV3NhcDVvUk5paEhodTZHN0pWTy85aklCNlV5ZXZMK3RYdU9xcm5nOGovY3hLVFd5V1V3dlNUcmlpWnovZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAorICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKKyAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC1janMvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoLWNqcy9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC0zLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItenltbTUrdStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25TdUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgtY2pzL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoL25vZGVfbW9kdWxlcy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC8tL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50LTMuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16eW1tNSt1K3NDc1NXeUQ5cU5hZWpWM0RGdmhDS2NsS2RpellhSlV1SEE4M1JMamI3blN1R25kZENIR3YwaGsrS1k3Qk1BbHNXZUs0VWVnNkVWNlhRZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWTM4VlBTSGNxa0ZyQ3BGblE5dnVTWG1xdXV2NW9YT0twR2VUNmFHcnIzbzNHYzlBbFZhNkpCZlVTT0NuYnhHR1pGKy8wb29JN0tyUHVVU3p0VWRVNUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5ndGVtcGxhdGU0dHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5ndGVtcGxhdGU0dHMvLS9zdHJpbmd0ZW1wbGF0ZTR0cy0xLjAuOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItS1labTJiSmxTanluRzVZK0w0NmZrYUtCUUc2bWhWNmhiMlJCQThkcHgzL1ZqNkc0dTdnd1hOS1l2YU45K1FENXNqNjgvMXNydFNORHZxRXNvN013c1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW50bHI0bmciOiAiMy4wLjE1IiwKKyAgICAgICAgImZhc3QtcHJpbnRmIjogIjEuNi4xMCIsCisgICAgICAgICJoZSI6ICIxLjIuMCIsCisgICAgICAgICJsdXhvbiI6ICIzLjUuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5ndGVtcGxhdGU0dHMvbm9kZV9tb2R1bGVzL2FudGxyNG5nIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjE1IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnRscjRuZy8tL2FudGxyNG5nLTMuMC4xNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVkVMRnFUZmNwR0kyYmo2U2NNV3V4TTNGSTZIT3NvanJnbW53M2NDYlV0c1ExRE5PcTMyd0pzak90N3ZMdmZJbml5eXVFMURJWWVnR2N1Rm1uK2pneXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaW5ndGVtcGxhdGU0dHMvbm9kZV9tb2R1bGVzL2x1eG9uIjogeworICAgICAgInZlcnNpb24iOiAiMy41LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2x1eG9uLy0vbHV4b24tMy41LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJoK1pqcjZETmZVWVIzYlB3SkVudXdEZHFNYnhaVzdMT1FmVU40QjU0K0NsKzBvNXphVTlSSjZiY2lkZkR0QzFjV0NaWFErbnZYOGJmNmJBamkzN1FRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNy4yLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlEUE1OanA0V3lmWUJrSG5qSVJMZmNhMWk2S015R0N0c1Znb0tlL3oxKzZ2dWtnYUVOZGdHQlp0K1ptS1BjNGdhdnZFWjVPZ0hmSGRyYXpoZ055Rzd3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImFuc2ktcmVnZXgiOiAiXjYuMi4yIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9zdHJpcC1hbnNpP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtYW5zaS1janMiOiB7CisgICAgICAibmFtZSI6ICJzdHJpcC1hbnNpIiwKKyAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItWTM4VlBTSGNxa0ZyQ3BGblE5dnVTWG1xdXV2NW9YT0twR2VUNmFHcnIzbzNHYzlBbFZhNkpCZlVTT0NuYnhHR1pGKy8wb29JN0tyUHVVU3p0VWRVNUE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtYW5zaS1janMvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7CisgICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtYW5zaS9ub2RlX21vZHVsZXMvYW5zaS1yZWdleCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC02LjIuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnEzU21TcHlGSGFXalBrOElmOXljNnN2TThjNTZkQjVCQXRXNFFidzVqSFR3d1hYY1RMb1JNa3BESnA2VkwwWHpsV2FDSFRYcmtGVVJNWW1EMHNMcWc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1yZWdleD9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWJvbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1ib20vLS9zdHJpcC1ib20tNC4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN4dXJGdjV0RWdpaTMzWmk4SnRwNTV3RUlJTFI5ZWgzNEZBVzAwUFpmK0puU3NUbVYvaW9ld1NnUWw5N0pIdmdqb1JHd1BTaHNXbStJZHJ4QjM1ZDB3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49OCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RyaXAtZmluYWwtbmV3bGluZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1maW5hbC1uZXdsaW5lLy0vc3RyaXAtZmluYWwtbmV3bGluZS0yLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnJwdmZOQUUzZGN2cTdsbDN4VnVtempLalpRNXRJMXNFVUlLcjNVb2tzMFhVbDQ1U3QzRmxhdFZxZWY5cHJrNGpSRHpoVzZXWmcrM2JrOTN5NnBMakE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1qc29uLWNvbW1lbnRzIjogeworICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWpzb24tY29tbWVudHMvLS9zdHJpcC1qc29uLWNvbW1lbnRzLTMuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZlBjK1I0aWh3cVA2Ti9hSXYyZjFnTUg4bE9WdFdRSG9xQzR5SzZvU0RWVm9jdW1Bc2ZDcWprWG5xaVlNaG1Nd1MvbUVITHA3VmVobHQzcWw2bEVpZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvc3RybnVtIjogeworICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cm51bS8tL3N0cm51bS0yLjIuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0t4NlJVQ3VIZlQzb3lWanRucm1uMTlIMVNpQ3FnSlNnKzU0WHFVUktwNWFDTWJyWHJoTGpSTjlUanV3TWppWXN0WjBNekRySHFrR1o1ZEZUS2Qremc9PSIsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCisgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvTmF0dXJhbEludGVsbGlnZW5jZSIKKyAgICAgICAgfQorICAgICAgXSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogeworICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy9zeW5ja2l0IjogeworICAgICAgInZlcnNpb24iOiAiMC4xMS4xMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3luY2tpdC8tL3N5bmNraXQtMC4xMS4xMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmg3UWpUOC9TdUtVSWZPYlNYTkhOU0s2V0hvNkoxdEhDcUpzdWFGRFA3Z1AwZmt6U2ZUeEk4eTg1SnJwcFowaDhsMG1hSWdjMnRmdVpRNi90M0d0blE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQHBrZ3IvY29yZSI6ICJeMC4yLjkiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xNC4xOC4wIHx8ID49MTYuMC4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3N5bmNraXQiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RhZ2dlZC10YWciOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGFnZ2VkLXRhZy8tL3RhZ2dlZC10YWctMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlFRllyVmhvZCtoZE55eDdnNUJua2tiMEc2c2k4SEp1ck9vT0VnQzhCL08wdVhMSGxhZXkvNjVLUnY2Y3VXQk5oQmdIS0FST1ZwYzdReVlxRTVnRm5nPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGVzdC1leGNsdWRlIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rlc3QtZXhjbHVkZS8tL3Rlc3QtZXhjbHVkZS02LjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0FHV1BJeU9IVTZ6bG1nODhqd203VlJ5WG5NTjdpVjY4T0dBYllEay9NaC94Qy9welZQbFF0WTZuZ29JSC81L3RjaXVoR2Z2RVNVOEdySHJjeEQ1Nnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCisgICAgICAgICJnbG9iIjogIl43LjEuNCIsCisgICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC40IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTgiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3Rlc3QtZXhjbHVkZS9ub2RlX21vZHVsZXMvYmFsYW5jZWQtbWF0Y2giOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM29TZVVPMFRNVjY3aE4xQW1iWHNLNHlhcVU3dGppSGxieFJEWk9wSDBLVzkrQ2VYNGJSQWFYMEFueHQwdHgyTXJwUnBXd1FhUHdJbElTRUpoWVU1UHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGVzdC1leGNsdWRlL25vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24iOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMTQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0xLjEuMTQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1XUEdmRHhueXpLVTdyTk9XOVNQL2M1MHZpM3hybXJ1YS8rNmhmUGJDUzJBQk5XZngyNHZQaWR6dkM3a3JqVS9SVG8yMzVzVjc3NnltbHNNdEdLajhnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIsCisgICAgICAgICJjb25jYXQtbWFwIjogIjAuMC4xIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90ZXN0LWV4Y2x1ZGUvbm9kZV9tb2R1bGVzL2dsb2IiOiB7CisgICAgICAidmVyc2lvbiI6ICI3LjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItNy4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5GUjB6THBVMllDYVJ4d29DSnZMNlV2Q0gySkZ5RlZJdndUTHNJZjIxQXVIbE1za0ExaGhUZGsrTGxZSnRPbFl0OXY2ZHZzekQyQkdScUJMK2lRSzlRPT0iLAorICAgICAgImRlcHJlY2F0ZWQiOiAiT2xkIHZlcnNpb25zIG9mIGdsb2IgYXJlIG5vdCBzdXBwb3J0ZWQsIGFuZCBjb250YWluIHdpZGVseSBwdWJsaWNpemVkIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgd2hpY2ggaGF2ZSBiZWVuIGZpeGVkIGluIHRoZSBjdXJyZW50IHZlcnNpb24uIFBsZWFzZSB1cGRhdGUuIFN1cHBvcnQgZm9yIG9sZCB2ZXJzaW9ucyBtYXkgYmUgcHVyY2hhc2VkIChhdCBleG9yYml0YW50IHJhdGVzKSBieSBjb250YWN0aW5nIGlAaXpzLm1lIiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmcy5yZWFscGF0aCI6ICJeMS4wLjAiLAorICAgICAgICAiaW5mbGlnaHQiOiAiXjEuMC40IiwKKyAgICAgICAgImluaGVyaXRzIjogIjIiLAorICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMSIsCisgICAgICAgICJvbmNlIjogIl4xLjMuMCIsCisgICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIl4xLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiKiIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90ZXN0LWV4Y2x1ZGUvbm9kZV9tb2R1bGVzL21pbmltYXRjaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMy4xLjUudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZnaldVc25uVDZuK05VazZlWnE3N3plRmRwVzJMV0R6UDZ6RkdyQ2JIWGlZTnVsNUR6cWsySEhRNXVGSDJETlc1WGJwOCtqVnphZU50OTRzc0VFbDR3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICJeMS4xLjciCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIioiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RleHQtaGV4IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RleHQtaGV4Ly0vdGV4dC1oZXgtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXV1VkdOV3pnSjR5aFJhTlNpdWJQWTdPaklTdzRzdzRFNVV2MHdianArT3pjYm1WVS9yc1Q4dWpnY1hKaG45eXB6c2dyNXZsenBQcVArTUJCS2NHdmJnPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90aGVuaWZ5IjogeworICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RoZW5pZnkvLS90aGVuaWZ5LTMuMy4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SVlpTSVY1SUcxMEhrM2Vub3RyaHZ6MFQ5ZW02Y3lIQkxrSC9ZQVp1S3FkOGhSa0toU2ZDR0ljUDJLVVkwRVB4bmR6QU5CbU5sbHpXUHdhaytiaGVTdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnktcHJvbWlzZSI6ICJeMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RoZW5pZnktYWxsIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RoZW5pZnktYWxsLy0vdGhlbmlmeS1hbGwtMS42LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJOeFFIL3FJOC90M3RoWEpEd2NzdFVPNHplcW82NCtVeS8rc05WUkJ4NFhuMk9YK09aOW9QK2lKbk5GcXBsRnJhMlpVVmVLQ1NhMm9WV2kzVDR1Vm1BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInRoZW5pZnkiOiAiPj0gMy4xLjAgPCA0IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTAuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGhyb3VnaCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMy44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aHJvdWdoLy0vdGhyb3VnaC0yLjMuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzg5cWc3UEk4d0Fkdlg2MGJNRFArYkZvRDVEdmhtOW9MaGVGcDVPNGEyUUYwY1NCR3NCWDRxWm1hZFBNdlZxbExKQkJjaStXcUdHT0FQdmNEZU5TVmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGhyb3VnaDIiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhyb3VnaDIvLS90aHJvdWdoMi00LjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItaU9xU2F2MDBjVnhFRUlDZUQ3VGpMQjFzdWVFTCs4MVdwenAyYlkxN3VaalpOMHBXWlB1bzRzdVovNjFWdWp4bXFTR0ZmZ09jTnVUWjg1UUp3TlpRcHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3Rocm91Z2gyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjYuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTMuNi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05dS9zbmlDclkzRDVXZHNFUkh6SEU0RzJZQ1hxb0c1RlRIVWlDQzRTSWJyNlhjTFpCWTA1eWE5RUtqWWVrOU81eE9Bd2pHcSsxSmRHQkFTN1E5U2NvQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpbmhlcml0cyI6ICJeMi4wLjMiLAorICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiXjEuMS4xIiwKKyAgICAgICAgInV0aWwtZGVwcmVjYXRlIjogIl4xLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueS1jYXNlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnktY2FzZS8tL3RpbnktY2FzZS0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWV0L2VlTWhrTzZUWDhtblV0ZVM5emdQYlVNUWE0STZLa3A1T1JpQkQ1NDc2L20rUElSaXVtUDV0bWg1aW9KcEg3azUxS2VoYXd5MlVEZnNueHhZOFE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueS1pbmZsYXRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RpbnktaW5mbGF0ZS8tL3RpbnktaW5mbGF0ZS0xLjAuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGtZMWZqMWNLSGIyc2VXRHkwQjE2SGVXeWN6bEpBOS9XVzN1M2M0ei9OaVdEc08zRE9VNUQ3bmhUTEU5Q0YweVh2L1FaRlk3c0VKbWoyNGRLK1JycXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueWV4ZWMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGlueWV4ZWMvLS90aW55ZXhlYy0xLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVktTL1phUWhoa0tGTUFObUFPaGhYVm9JZkJYYmxReEdYMW15Q1EyZmFRcmZtb2JNZnRYZUpQY1pHcDBnUzA3b2N2R0pXRExaR3lPWkRhZERCcVlJSmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdGlueWdsb2JieSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMi4xNiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGlueWdsb2JieS8tL3RpbnlnbG9iYnktMC4yLjE2LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wbjk5VmhvQUNZUjhuRkhoeHFpeCt1dnNiWGluZUFhc1dtNW9qWG9OOHhFd0s1S2QzL1RyaE5uMXdCeXVENTJVeFdSTHk4cHUra1JNbmlFaTZFcTlaZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmZGlyIjogIl42LjUuMCIsCisgICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC40IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyLjAuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvU3VwZXJjaHVwdURldiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdG1wbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90bXBsLy0vdG1wbC0xLjAuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2YwdU9FQVF3SXFHdVdXMk1WellnOGZWL1FObmMvSXB1Sk5HODM3ckx1Y3pBYUxWSHNsV0haUWo0SUdpRWw1SHMza2tiaHdMOUFiN0hyc211aitTbXc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdG9pZGVudGlmaWVyIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvaWRlbnRpZmllci8tL3RvaWRlbnRpZmllci0xLjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzVzU1BLRWtnL0RJUU5tSDQzVjAvdWVyTHJwelZlZGtVaDh0R052YWVYcGZwdXdqS2VubFNveC8yTy9CVGxaVXRFZStKRzdzNVloRXo2MDhQbEFIUkE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90b3Bvc29ydCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b3Bvc29ydC8tL3RvcG9zb3J0LTIuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wYTVFT2tBVXA4RDRtb01pMlc4WkY4amNnYTdCZ1pkOTFPL3lhYkpDRlk4YXorWFN6ZUd5VEtzMEFvbzg5N2lWMU5qNmd1RnE4b3JXRFM5Nno5MW9HZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90cmlwbGUtYmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cmlwbGUtYmVhbS8tL3RyaXBsZS1iZWFtLTEuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hWmJnVmlacmcxUU5jRytMVUxhN25oWnBKVFpTTG0vbVhuSFhuYkFiam1ONWFTYTB5N1Yrd3Z2Nis0V2FCdHBJU0p6VGhLeStQSVB4YzFOcTFFSjltZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMTQuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90cy1hcGktdXRpbHMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHMtYXBpLXV0aWxzLy0vdHMtYXBpLXV0aWxzLTIuNS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PSi9pYnhoUGxxck1NMFVpTkhKLzBDS1Frb0tGMjQzL0FFbXBsdDNxcFJna1c4Vkc3SWZPUzQxaDdWOFRqSVRxZEJ5SHpyamNTLzJzaSt5NGxJaDhOQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjEyIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90cy1kZWRlbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHMtZGVkZW50Ly0vdHMtZGVkZW50LTIuMi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xNVc3dFZNNzFlMnhqSFpUbGdmVERvUEYvU21xS0c1aGRkcTlTelI0OUNIMmhheXFSS0p0UTRtdFJsU3hLYUpsUi8rOXJFTSttbkJIZjdJMi9CUWNwUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTYuMTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3RzLWplc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICIyOS40LjkiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzLWplc3QvLS90cy1qZXN0LTI5LjQuOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItTFRiOTQ5NmdZUE1DcWplRExkUHJLdVh0bmN1ZGVWMXlSWm5GNFdvNWwzU0ZpMFJZRW5ZUk5nTXJGSWRnK0ZIdmZ6akN5UWsxY0xuY1dWcWlTWCtFdlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnMtbG9nZ2VyIjogIl4wLjIuNiIsCisgICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAorICAgICAgICAiaGFuZGxlYmFycyI6ICJeNC43LjkiLAorICAgICAgICAianNvbjUiOiAiXjIuMi4zIiwKKyAgICAgICAgImxvZGFzaC5tZW1vaXplIjogIl40LjEuMiIsCisgICAgICAgICJtYWtlLWVycm9yIjogIl4xLjMuNiIsCisgICAgICAgICJzZW12ZXIiOiAiXjcuNy40IiwKKyAgICAgICAgInR5cGUtZmVzdCI6ICJeNC40MS4wIiwKKyAgICAgICAgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ0cy1qZXN0IjogImNsaS5qcyIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgXjE4LjAuMCB8fCA+PTIwLjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBiYWJlbC9jb3JlIjogIj49Ny4wLjAtYmV0YS4wIDw4IiwKKyAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuMC4wIHx8IF4zMC4wLjAiLAorICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjAuMCB8fCBeMzAuMC4wIiwKKyAgICAgICAgImJhYmVsLWplc3QiOiAiXjI5LjAuMCB8fCBeMzAuMC4wIiwKKyAgICAgICAgImplc3QiOiAiXjI5LjAuMCB8fCBeMzAuMC4wIiwKKyAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuMC4wIHx8IF4zMC4wLjAiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuMyA8NyIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAYmFiZWwvY29yZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiQGplc3QvdHlwZXMiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiYmFiZWwtamVzdCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJlc2J1aWxkIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfSwKKyAgICAgICAgImplc3QtdXRpbCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHMtbm9kZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjkuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHMtbm9kZS8tL3RzLW5vZGUtMTAuOS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMEZGcElkY0hnbjh6Y1BTYmYxZFJldnd0MDQ3WU1uYWlKTTN1MncyUmV3ckIrZm9iL3plUFpjck95UW9MTU1PN2FCSWRkTGNRSUVLNWRZamtMbkdyUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAY3Nwb3Rjb2RlL3NvdXJjZS1tYXAtc3VwcG9ydCI6ICJeMC44LjAiLAorICAgICAgICAiQHRzY29uZmlnL25vZGUxMCI6ICJeMS4wLjciLAorICAgICAgICAiQHRzY29uZmlnL25vZGUxMiI6ICJeMS4wLjciLAorICAgICAgICAiQHRzY29uZmlnL25vZGUxNCI6ICJeMS4wLjAiLAorICAgICAgICAiQHRzY29uZmlnL25vZGUxNiI6ICJeMS4wLjIiLAorICAgICAgICAiYWNvcm4iOiAiXjguNC4xIiwKKyAgICAgICAgImFjb3JuLXdhbGsiOiAiXjguMS4xIiwKKyAgICAgICAgImFyZyI6ICJeNC4xLjAiLAorICAgICAgICAiY3JlYXRlLXJlcXVpcmUiOiAiXjEuMS4wIiwKKyAgICAgICAgImRpZmYiOiAiXjQuMC4xIiwKKyAgICAgICAgIm1ha2UtZXJyb3IiOiAiXjEuMS4xIiwKKyAgICAgICAgInY4LWNvbXBpbGUtY2FjaGUtbGliIjogIl4zLjAuMSIsCisgICAgICAgICJ5biI6ICIzLjEuMSIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAidHMtbm9kZSI6ICJkaXN0L2Jpbi5qcyIsCisgICAgICAgICJ0cy1ub2RlLWN3ZCI6ICJkaXN0L2Jpbi1jd2QuanMiLAorICAgICAgICAidHMtbm9kZS1lc20iOiAiZGlzdC9iaW4tZXNtLmpzIiwKKyAgICAgICAgInRzLW5vZGUtc2NyaXB0IjogImRpc3QvYmluLXNjcmlwdC5qcyIsCisgICAgICAgICJ0cy1ub2RlLXRyYW5zcGlsZS1vbmx5IjogImRpc3QvYmluLXRyYW5zcGlsZS5qcyIsCisgICAgICAgICJ0cy1zY3JpcHQiOiAiZGlzdC9iaW4tc2NyaXB0LWRlcHJlY2F0ZWQuanMiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAc3djL2NvcmUiOiAiPj0xLjIuNTAiLAorICAgICAgICAiQHN3Yy93YXNtIjogIj49MS4yLjUwIiwKKyAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAorICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTIuNyIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7CisgICAgICAgICJAc3djL2NvcmUiOiB7CisgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQorICAgICAgICB9LAorICAgICAgICAiQHN3Yy93YXNtIjogeworICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKKyAgICAgICAgfQorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90c2xpYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuOC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpYi8tL3RzbGliLTIuOC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vSkZ1OTRIUWIrS1ZkdVNVUUw3d25wbXFuZm1Mc09BL25BaDZiNkVIMHdDRW9LMC9tUGVYVTZjM3dLRFY4M01rT3VIUFJIdFNYS0tVOTlJQmF6Uy8ydz09IiwKKyAgICAgICJkZXZPcHRpb25hbCI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICIwQlNEIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90c3giOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjIxLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzeC8tL3RzeC00LjIxLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVDMXNnNFVTczFsZkcwR0ZiMlJMWHNkcFhxQlNFaEFhQS8wa1BMMDF3eHpwTXFMSUxOeEl4SU9LaUlMeitjZGcvcExuT1V4RllPUjV5aEhVNjY2d2J3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImVzYnVpbGQiOiAifjAuMjcuMCIsCisgICAgICAgICJnZXQtdHNjb25maWciOiAiXjQuNy41IgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ0c3giOiAiZGlzdC9jbGkubWpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKKyAgICAgIH0sCisgICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJmc2V2ZW50cyI6ICJ+Mi4zLjMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3R5cGUtY2hlY2siOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1jaGVjay8tL3R5cGUtY2hlY2stMC40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhsZVVvYzl1d0dYcWpXd1hhVVRaQW16TWNGWjU4NThRQTJ2dngxVXI1eEljaXhYSVArOExuRkRnUnBsVTMwdXM2dGVxZGxza0ZmdSthZTRLNzlPb2V3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInByZWx1ZGUtbHMiOiAiXjEuMi4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1kZXRlY3QvLS90eXBlLWRldGVjdC00LjAuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGZyL21JSDFkbE8reDdUbGNNeStiSURxS1Bzdy83MHRWeWVIVzc4N2dvUWpobXFhWmUxMHV3THVqdWJLOXE5TGc2RmlobzFLVUtEWXowWjdrN2c1L2c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj00IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQxLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC00LjQxLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRlVFNRNkg1WUh2cHFWd0JSY25MRENCbkRPSFdZdTdJdkdiSFQ2TjhBT3ltY3I5UEpHamMxR1R0aVdaVFlnME5DZ1l3dm5ZV0VrVkNoUUFyOWJqZndBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICIoTUlUIE9SIENDMC0xLjApIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTE2IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3R5cGUtaXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1pcy8tL3R5cGUtaXMtMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9aczZnc2pGNHZNcDMycXJDYmlWU2tyRm1YdEcvQVpoWTN0MGlBTXJNQmlBWnlWOW9BTHRYTzhoc3JIYk1YRjl4NkwzZ3JsRnV3VzJvQXo3Y2F2K0d3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb250ZW50LXR5cGUiOiAiXjEuMC41IiwKKyAgICAgICAgIm1lZGlhLXR5cGVyIjogIl4xLjEuMCIsCisgICAgICAgICJtaW1lLXR5cGVzIjogIl4zLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC42IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy90eXBlZG9jIjogeworICAgICAgInZlcnNpb24iOiAiMC4yOC4xOSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZWRvYy8tL3R5cGVkb2MtMC4yOC4xOS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0toK2xoZG1NRml2TWxjNnZSUmNNR1hlR0VIR1UyZzhhMkNrUFRKakpsd1JmMWlYYmltV0lQY0ZvbENxZTRFMGQvRlJ0R3N6cElyc3AzV0xwREI4UHc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkBnZXJyaXQwL21pbmktc2hpa2kiOiAiXjMuMjMuMCIsCisgICAgICAgICJsdW5yIjogIl4yLjMuOSIsCisgICAgICAgICJtYXJrZG93bi1pdCI6ICJeMTQuMS4xIiwKKyAgICAgICAgIm1pbmltYXRjaCI6ICJeMTAuMi41IiwKKyAgICAgICAgInlhbWwiOiAiXjIuOC4zIgorICAgICAgfSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ0eXBlZG9jIjogImJpbi90eXBlZG9jIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxOCIsCisgICAgICAgICJwbnBtIjogIj49IDEwIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHlwZXNjcmlwdCI6ICI1LjAueCB8fCA1LjEueCB8fCA1LjIueCB8fCA1LjMueCB8fCA1LjQueCB8fCA1LjUueCB8fCA1LjYueCB8fCA1LjcueCB8fCA1LjgueCB8fCA1LjkueCB8fCA2LjAueCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHlwZXNjcmlwdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuOS4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlc2NyaXB0Ly0vdHlwZXNjcmlwdC01LjkuMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItamwxdlp6UERpbkxyOWVVdDNKL3Q3VjZGZ05FdzlRanZCUGR5c3o5S2ZRREQ0MWZRckMyWTR2S1FkaWFVcEZUNGJYbGIxUkhoTHBwOHd0bTZNNVRnU3c9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInRzYyI6ICJiaW4vdHNjIiwKKyAgICAgICAgInRzc2VydmVyIjogImJpbi90c3NlcnZlciIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNC4xNyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdHlwZXNjcmlwdC1lc2xpbnQiOiB7CisgICAgICAidmVyc2lvbiI6ICI4LjU5LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVzY3JpcHQtZXNsaW50Ly0vdHlwZXNjcmlwdC1lc2xpbnQtOC41OS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CVTNPTlc5WCt2OTBFY0NIOVpTNkxNYWNrY1Z0eFJMbEkzWHJZeXFaSXdWU0hJazdRZjdiRncxejBNOVEwSVV4aFRNWkNmOHBpWTloVFlhTkVJQVNydz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbiI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlciI6ICI4LjU5LjAiLAorICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjguNTkuMCIsCisgICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMiOiAiOC41OS4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc2xpbnQiOiAiXjguNTcuMCB8fCBeOS4wLjAgfHwgXjEwLjAuMCIsCisgICAgICAgICJ0eXBlc2NyaXB0IjogIj49NC44LjQgPDYuMS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91Yy5taWNybyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91Yy5taWNyby8tL3VjLm1pY3JvLTIuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BUkRKbXBobWR2VWs2R2x3N3k5RFEyYkZrS0JId1FITGkybHNhSDZQUG16L0thOXNGT0JzQmx1b3poRGx0V21udjl1L2NGNlJ0ODd6blJUUFYreXAvQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91Z2xpZnktanMiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjE5LjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VnbGlmeS1qcy8tL3VnbGlmeS1qcy0zLjE5LjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXYzWHUreXV3Qlhpc3A2UVlUY0g0VWJIK3hZSlhxbnEybS9MdFFWV0tXelljMWllaFluTGl4b1FETjlGSDYvajkvb3liZmQ2VzlHaHdrbDgrVU1LVEtRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAorICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ1Z2xpZnlqcyI6ICJiaW4vdWdsaWZ5anMiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MC44LjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3VuZGljaSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjcuMjUuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5kaWNpLy0vdW5kaWNpLTcuMjUuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFhucDRrVHlvcjJacStKMUZmUEk2RXEzZXc1aDZWbDBGLzhkOVhVNXpaUWYxdFg5czJTdTEvM1BpTW1VQU5GVUxwbWtzeGtDbGFtSVpjYVVxcnlIc1E9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAuMTguMSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdW5kaWNpLXR5cGVzIjogeworICAgICAgInZlcnNpb24iOiAiNy4xNi4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmRpY2ktdHlwZXMvLS91bmRpY2ktdHlwZXMtNy4xNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aeithWldTajhMRTZ6b3hEK3hyamg0VmZrSUc4WWE2THZZa1pxdFVRR0pQWmpZbDUzeXBDYVV3V3FvN2VJMHg2NktCR2VSbyttbEJFa01TZVNaMzhOdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91bmljb2RlLXByb3BlcnRpZXMiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pY29kZS1wcm9wZXJ0aWVzLy0vdW5pY29kZS1wcm9wZXJ0aWVzLTEuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DTGpDQ0xRNlV1TXhXbmJJeWxraXNiUmozMXF4SFBBdXJ2ZW5hLzBpd1NWYlEyRzFWWTUvSGpWMElSYWJPRWJESGx6WmxSZENyRDROaEIwSnRVNDBQZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJiYXNlNjQtanMiOiAiXjEuMy4wIiwKKyAgICAgICAgInVuaWNvZGUtdHJpZSI6ICJeMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3VuaWNvZGUtdHJpZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91bmljb2RlLXRyaWUvLS91bmljb2RlLXRyaWUtMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXg3YmM3NngwYm00cHJmMVZMZzc5dWhBekt3OERWYm9DbFNONVZ4SnVRK0xLRE9WRVc5Q2RIK1ZZN1NQK3ZYN3hDWVFxenpnUXBGcXoxNXplTHZBdFpRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInBha28iOiAiXjAuMi41IiwKKyAgICAgICAgInRpbnktaW5mbGF0ZSI6ICJeMS4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3VuaWNvcm4tbWFnaWMiOiB7CisgICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pY29ybi1tYWdpYy8tL3VuaWNvcm4tbWFnaWMtMC40LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdINTkwVjlWTmdZSDlnM2xIOXdXalRyVW9Lc2pMRjZzR0xqaFI0c0gxTFdwTG1DT0gwWmY3UHVraERBOEJpUzdLSGU0b1BOa2NUSHFZa2o3U09HVU93PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdW5waXBlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VucGlwZS8tL3VucGlwZS0xLjAuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGp5MmJZaFNzdWZ3V2xLd1BjK2wzY043K3d1SmxLNnV6MFlkSkVPbFFEYmw2am8vWWxQaTRtYjhhZ1VrVkM4QkY3VjhOdXpleVBOcVJrc0EzaHp0S1E9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDAuOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdW5ycy1yZXNvbHZlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5ycy1yZXNvbHZlci8tL3VucnMtcmVzb2x2ZXItMS4xMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iU2p0OXBqYUVCbk5pR2djOXJVaUhHS3Y1bDQvVEd6RG1ZdzNSaG5rSkd0TGhibm5BLzVxSmo3eDNkTkRDUngvUEp4dTc3NExsSDhsQ09sQjRoRWZLZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImhhc0luc3RhbGxTY3JpcHQiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJuYXBpLXBvc3RpbnN0YWxsIjogIl4wLjMuMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS91bnJzLXJlc29sdmVyIgorICAgICAgfSwKKyAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctYW5kcm9pZC1hcm0tZWFiaSI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1hbmRyb2lkLWFybTY0IjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWRhcndpbi1hcm02NCI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1kYXJ3aW4teDY0IjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWZyZWVic2QteDY0IjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybS1nbnVlYWJpaGYiOiAiMS4xMS4xIiwKKyAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtLW11c2xlYWJpaGYiOiAiMS4xMS4xIiwKKyAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtNjQtZ251IjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wiOiAiMS4xMS4xIiwKKyAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcHBjNjQtZ251IjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtZ251IjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbCI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1zMzkweC1nbnUiOiAiMS4xMS4xIiwKKyAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgteDY0LWdudSI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC14NjQtbXVzbCI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy13YXNtMzItd2FzaSI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi1hcm02NC1tc3ZjIjogIjEuMTEuMSIsCisgICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLWlhMzItbXN2YyI6ICIxLjExLjEiLAorICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi14NjQtbXN2YyI6ICIxLjExLjEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBkYXRlLWJyb3dzZXJzbGlzdC1kYi8tL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGItMS4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpzMG05Y3grcU9nRHhvMGVNaUZHRXVlV3p0eitkNCtNM3JHbG1LUFQrVDRJUy9qUDR5bHczTndwdTZjcFRUUDhSMU1BQzFrRjRWYmRMdDNBUmYyMDl3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAiZnVuZGluZyI6IFsKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Jyb3dzZXJzbGlzdCIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IiwKKyAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL25wbS9icm93c2Vyc2xpc3QiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAorICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2FpIgorICAgICAgICB9CisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJlc2NhbGFkZSI6ICJeMy4yLjAiLAorICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiCisgICAgICB9LAorICAgICAgImJpbiI6IHsKKyAgICAgICAgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiY2xpLmpzIgorICAgICAgfSwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiYnJvd3NlcnNsaXN0IjogIj49IDQuMjEuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvdXBwZXItY2FzZS1maXJzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91cHBlci1jYXNlLWZpcnN0Ly0vdXBwZXItY2FzZS1maXJzdC0yLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItNTE0cHBZSEJhS3dmSlJLL3BOQzZjL094ZkdhMG9iU25BbDEwNnU5N0VkMEk2MjVOaW45NktBanR0WkY2WkwzZTFYTHRwaHhucXJPaTlpV2dtK3UrYmc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAidHNsaWIiOiAiXjIuMC4zIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91cmktanMiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjQuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXJpLWpzLy0vdXJpLWpzLTQuNC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03cktVeXkzM1ExeWM5OHBRMURBbUx0d1gxMDlGN1RJZldsVzFZZG84V2wxaWkxU2VIaWVlaDBISGZQZUwyZk1YSzZ6MHM4ZWNLczlmckN1TEp2bmRCZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJwdW55Y29kZSI6ICJeMi4xLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3V0aWwtYXJpdHkiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbC1hcml0eS8tL3V0aWwtYXJpdHktMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtreUlzWEt3ZW1mU3k4WkVvYUl6MDZBcEFwbldzazVoUU8wdkxqWlM2VWtCaUdpVysrSnN5Yjh2U0JvYzBXS2xmZkdvR3M1eVl5L2o1cHA4emNrckZBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3V0aWwtZGVwcmVjYXRlIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V0aWwtZGVwcmVjYXRlLy0vdXRpbC1kZXByZWNhdGUtMS4wLjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVQRDVxMXVYeUZ4SnBDckxuQ2MxbkhucTNnT2E2RFpCb2NBSWlJMlRhU0NBN1ZDSjFVSkRNYWdDeklrWE5zVVlmRDFkYUsvL0xURVE4eGlJYnJIdGN3PT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy91dWlkIjogeworICAgICAgInZlcnNpb24iOiAiMTEuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dWlkLy0vdXVpZC0xMS4xLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTAvQTlyRHk5UDdjSis4dzFjOVdEOVYvLzlXajE1Q2UyTVB6OFJpNjAzMnVzeitOZmVQeHg1QWNOM2JOK3I2Wkw2akVvMDY2L3lOWUIzdG40cFFFeCtBPT0iLAorICAgICAgImZ1bmRpbmciOiBbCisgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvYnJvb2ZhIiwKKyAgICAgICAgImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9jdGF2YW4iCisgICAgICBdLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJwZWVyIjogdHJ1ZSwKKyAgICAgICJiaW4iOiB7CisgICAgICAgICJ1dWlkIjogImRpc3QvZXNtL2Jpbi91dWlkIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy92OC1jb21waWxlLWNhY2hlLWxpYiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92OC1jb21waWxlLWNhY2hlLWxpYi8tL3Y4LWNvbXBpbGUtY2FjaGUtbGliLTMuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13YTdZanlVR2ZOWm5nSS92dEswVUhBTitsZ0RDeEJQQ3lsVlhHcDB6dTU5Rno1YWlHdE5YYXEzRGhJb3YwNjNNb3JCK1ZmdWZMaDNKbEYyS2RUSzN4Zz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy92OC10by1pc3RhbmJ1bCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjkuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92OC10by1pc3RhbmJ1bC8tL3Y4LXRvLWlzdGFuYnVsLTkuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1raUdVYWxXTityZ0JKLzFPSFpzQnRVNHJYWk9mai83cktReFVMS2xJend6UVN2TUpVVU5nUHdKRUVoN2dVNnhFVnhDMGFob09Cdk4yWUk4R0g2Rk5nQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMTIiLAorICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMi4wLjEiLAorICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMC4xMi4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy92YWxpZGF0ZS1ucG0tcGFja2FnZS1saWNlbnNlIjogeworICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UvLS92YWxpZGF0ZS1ucG0tcGFja2FnZS1saWNlbnNlLTMuMC40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EcEttMlVpL3hONy9IUUtDdHBaeG9SV0JoWjlaMGtxdHlnRzhYQ2dOUThabERueHVRbVdoajU2Nmo4Zk40Q3UzL0ptYmhzRG83ZmNBSnE0czloMjdFdz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAic3BkeC1jb3JyZWN0IjogIl4zLjAuMCIsCisgICAgICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiAiXjMuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy92YXJ5IjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhcnkvLS92YXJ5LTEuMS4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTkdiV0xmZDBlVVBhYmhrWFVWbTBqOHV1dlJFeVRoNW92UmEvZHlvdy9CcUFiWkp5Qys1ZlUrSXpRT3ptQUt6WXFZUkFJU29SaGRRcjNlSVovUFhxZz09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gMC44IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93YWxrZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjAuOCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2Fsa2VyLy0vd2Fsa2VyLTEuMC44LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10cy84RThsNWI3a1kwdmxXTGV3T2tEWE1tUGRMY1ZWNEdtT1FMeXh1U3N3SUpzd2VlRlp0QXNNRjdrMU5zenorVFlCUXJsWVJtek9ucjM5OHkxSmVtUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAibWFrZWVycm9yIjogIjEuMC4xMiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2hpY2giOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC0yLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQkxJM1RsMVRXM1B2bDcwbDN5cTNZNjRpK2F3cHdYcXNHQllXa2txTXRuYlhnck1EK3lqN3JoVzBrdUVEeHpKYVlYR2pFVzVvZ2FwS05NRUtOTWppYkE9PSIsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImlzZXhlIjogIl4yLjAuMCIKKyAgICAgIH0sCisgICAgICAiYmluIjogeworICAgICAgICAibm9kZS13aGljaCI6ICJiaW4vbm9kZS13aGljaCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gOCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2luc3RvbiI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMTkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luc3Rvbi8tL3dpbnN0b24tMy4xOS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MWk5KZ1B6ZktSKy9KM2NIa3hjcEhLcEtLdkdmRFpWUFM0aGZKQ2M0Y0NHMENnWXp2bEQ2eUUvUzNDSUwvWXQ5MWFrMzI3WUNwaUYvME15ZVpIRUhLQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiQGNvbG9ycy9jb2xvcnMiOiAiXjEuNi4wIiwKKyAgICAgICAgIkBkYWJoL2RpYWdub3N0aWNzIjogIl4yLjAuOCIsCisgICAgICAgICJhc3luYyI6ICJeMy4yLjMiLAorICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCisgICAgICAgICJsb2dmb3JtIjogIl4yLjcuMCIsCisgICAgICAgICJvbmUtdGltZSI6ICJeMS4wLjAiLAorICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIl4zLjQuMCIsCisgICAgICAgICJzYWZlLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMy4xIiwKKyAgICAgICAgInN0YWNrLXRyYWNlIjogIjAuMC54IiwKKyAgICAgICAgInRyaXBsZS1iZWFtIjogIl4xLjMuMCIsCisgICAgICAgICJ3aW5zdG9uLXRyYW5zcG9ydCI6ICJeNC45LjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDEyLjAuMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd2luc3Rvbi10cmFuc3BvcnQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luc3Rvbi10cmFuc3BvcnQvLS93aW5zdG9uLXRyYW5zcG9ydC00LjkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItOGRyTUo0cmtnYVBvMU1lNHpELzNXTGZJL3pQZEE5bzJJaXBLT0R1bm5HRGN1cWJId2pzYkI3OXlsdjA0TENHR3pVMHhRNnZUem5PTXBRR2FMaGhtNkE9PSIsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImxvZ2Zvcm0iOiAiXjIuNy4wIiwKKyAgICAgICAgInJlYWRhYmxlLXN0cmVhbSI6ICJeMy42LjIiLAorICAgICAgICAidHJpcGxlLWJlYW0iOiAiXjEuMy4wIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxMi4wLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dpbnN0b24tdHJhbnNwb3J0L25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjYuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTMuNi4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05dS9zbmlDclkzRDVXZHNFUkh6SEU0RzJZQ1hxb0c1RlRIVWlDQzRTSWJyNlhjTFpCWTA1eWE5RUtqWWVrOU81eE9Bd2pHcSsxSmRHQkFTN1E5U2NvQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiaW5oZXJpdHMiOiAiXjIuMC4zIiwKKyAgICAgICAgInN0cmluZ19kZWNvZGVyIjogIl4xLjEuMSIsCisgICAgICAgICJ1dGlsLWRlcHJlY2F0ZSI6ICJeMS4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49IDYiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dpbnN0b24vbm9kZV9tb2R1bGVzL0Bjb2xvcnMvY29sb3JzIjogeworICAgICAgInZlcnNpb24iOiAiMS42LjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bjb2xvcnMvY29sb3JzLy0vY29sb3JzLTEuNi4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1JcitBT2licXpySXNMNmFqdDNSejNMc2tCN09pTVZIcWx0Wm1zcGJXL1RKdVRWdXlPTWlyVnFBa2pmWTZKSVNpTEhneU5xaWNBQzhBeUhIR3pOZC9kQT09IiwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEuOTAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dpbnN0b24vbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuNi4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMy42LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTl1L3NuaUNyWTNENVdkc0VSSHpIRTRHMllDWHFvRzVGVEhVaUNDNFNJYnI2WGNMWkJZMDV5YTlFS2pZZWs5TzV4T0F3akdxKzFKZEdCQVM3UTlTY29BPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJpbmhlcml0cyI6ICJeMi4wLjMiLAorICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiXjEuMS4xIiwKKyAgICAgICAgInV0aWwtZGVwcmVjYXRlIjogIl4xLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0gNiIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd29yZC13cmFwIjogeworICAgICAgInZlcnNpb24iOiAiMS4yLjUiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmQtd3JhcC8tL3dvcmQtd3JhcC0xLjIuNS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQk4yMkI1ZWFNTUk5VU10anJHZDVnNWVDWVBwQ1BEVXkwRkpYYllzYVQ1ell4akZPY2tTNTNTUURFM3BXa1ZvV3BIWFZiM0JyWWNFTjRUd2E1NUI1Y0E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dvcmR3cmFwIjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmR3cmFwLy0vd29yZHdyYXAtMS4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWd2VnpKRmxQeWNLYzVkWk40eVBrUDh3N0RjMzdCdFAxeWN6RW5lT2I0dXEzNHBYWmN2cnRSVG1XVjhXK1VtZStYQ3hLZ2JqTStuZXZreUZQTXliZDRRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dvcmtlcnBvb2wiOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjMuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29ya2VycG9vbC8tL3dvcmtlcnBvb2wtOS4zLjQudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRtUFJRWVlTQW5uRGlFQjBQL1l0aXA3YkZHdnFuU1U2STJCY3VTdzdIeCtKU2cvRHNVaTVlYllmYzhHWWFTZHB1dk9jRXM2ZFh4UHVyT1lwZTlRRndnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2kiOiB7CisgICAgICAidmVyc2lvbiI6ICI5LjAuMiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcC1hbnNpLy0vd3JhcC1hbnNpLTkuMC4yLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00MkF0bWdxalYrWDFWcGRPZnlUR09ZUmkwL3pzb0xxdFhRY2tUbXFUZXliVCtCREliTS9HdXhvN3gzcEUydnRwcjFvazZ4UnFNOU9wQmUrSnlvcXl3dz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNi4yLjEiLAorICAgICAgICAic3RyaW5nLXdpZHRoIjogIl43LjAuMCIsCisgICAgICAgICJzdHJpcC1hbnNpIjogIl43LjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xOCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvd3JhcC1hbnNpP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpLWNqcyI6IHsKKyAgICAgICJuYW1lIjogIndyYXAtYW5zaSIsCisgICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcC1hbnNpLy0vd3JhcC1hbnNpLTcuMC4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZVkdJajJrYW1MU1R4dzZOc1pqb0J4ZlN3c24weWNkZXNtYzRwK1EyMWM1elB1WjFwbCtOZnhWZHhQdGRIdm1OVk9RNlhTWUc0QVV0eXQvRmk3RDE2UT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4wLjAiLAorICAgICAgICAic3RyaW5nLXdpZHRoIjogIl40LjEuMCIsCisgICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvd3JhcC1hbnNpP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpLWNqcy9ub2RlX21vZHVsZXMvYW5zaS1yZWdleCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC01LjAuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXVKUVhsVFNVR0wyTEg5U1VYbzhWd3NZNHNvYW5oZ282TE5TbTg0RTFMQmNFOHMzTzB3cGRpUnp5Ujl6L1paSk1sTVd2MzdxT09iOXBkSmxNVUVLRlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2ktY2pzL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTQuMy4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16YkI5ckNKQVQxcmJqaVZEYjJocUtGSE5ZTHhndGs4TlVSeFozSVp3RDNGNk50eGJYWlFDbm5TaTFMa3grSURvaGRQbEZwMjIyd1ZBTEloZVpKUVNFZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS1janMvbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQiOiB7CisgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMi4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJSRUNQc2o3aXUveGI1b0tZY3NGSFNwcEZObnNqLzUyT1ZUUktiNHpQNW9uWHdWRjN6Vm1tVG9OY09mR0MrQ1JEcGZLL1U1ODRmTWczOFpIQ2FFbEtRPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNvbG9yLW5hbWUiOiAifjEuMS40IgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTcuMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2ktY2pzL25vZGVfbW9kdWxlcy9jb2xvci1uYW1lIjogeworICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLW5hbWUvLS9jb2xvci1uYW1lLTEuMS40LnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kT3krM0F1VzNhMndOYlpISXVNWnBUY2dqR3VMVS91QkwvdWJjWkY5T1hiRG84ZmY0Tzh5VnA1QmYwZWZTOHVFb1lvNXE0Rng3ZFk5T2dRR1hnQXNRQT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIgorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2ktY2pzL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpIjogeworICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJkZXBlbmRlbmNpZXMiOiB7CisgICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj04IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogeworICAgICAgInZlcnNpb24iOiAiNi4yLjMiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNi4yLjMudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTREajZNMjhKQitvQUg4a0ZrVExVbythMmp3T0ZrdXFiM3l1Y1UwQ0FOY1JSVWJ4UzBjUDBuWllDR2pjYzNCTlh3UklzVVZtREdnemF3bWU3enZKSHZnPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEwLjYuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC0xMC42LjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRvVUk4NFlTNVlteFcyMTllcm5pV0QwQ0lWT280NnhHS0NvbGVOUVJnT3pEb3JnQmkxdjRENzEvT0Z6Z0Q5R08yVUdLSXYxQzNTcDhEQW4wK2o1dzdBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogeworICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC03LjIuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHNhVElrS1c5YjROK0FFaitTVkErV2hKelY3L3pNaGNTdTc4bUxLV1NrN2NYTU9TSHNCS0ZXVXMwZld3cThReUszTWdKQlFSWDZHYmk0a1liZHZHa1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiZW1vamktcmVnZXgiOiAiXjEwLjMuMCIsCisgICAgICAgICJnZXQtZWFzdC1hc2lhbi13aWR0aCI6ICJeMS4wLjAiLAorICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4xLjAiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTgiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvd3JhcHB5IjogeworICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXBweS8tL3dyYXBweS0xLjAuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItbDRTcC9EUnNlb3I5d0w2RXZWMitUdVFuNjNkTWtQalovc3A5WGtnaFRFYlY5S2xQUzF4VXNaM3U3L0lRTzR3eHRjRkI0YmdwUVBSY1IzUUN2ZXpQY1E9PSIsCisgICAgICAibGljZW5zZSI6ICJJU0MiCisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3dyaXRlLWZpbGUtYXRvbWljIjogeworICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyaXRlLWZpbGUtYXRvbWljLy0vd3JpdGUtZmlsZS1hdG9taWMtNS4wLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStRVTJ6ZDZPVEQ4WFdJSkNiZmZhaVFlSDlVNzNxSXFhZm8xeDZWMXNuQ1dZR0pmNmNWRTBjRFI0RDh4UnpjRW5mSTIxSUZyVVB6UEd0Y1BmOEFDK1J3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCisgICAgICAgICJzaWduYWwtZXhpdCI6ICJeNC4wLjEiCisgICAgICB9LAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIl4xNC4xNy4wIHx8IF4xNi4xMy4wIHx8ID49MTguMC4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cml0ZS1maWxlLWF0b21pYy9ub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQiOiB7CisgICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lnbmFsLWV4aXQvLS9zaWduYWwtZXhpdC00LjEuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYnp5WjFlODh3OU8xaU5KYktuT2x2WVRyV1BEbDQ2TzFiRzBEM1hJbnYrOXRrUHJ4ck44alVVVGlGbERra21LV2duMU02Q2ZJQTEzU3VHcU9hOUtvcnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xNCIKKyAgICAgIH0sCisgICAgICAiZnVuZGluZyI6IHsKKyAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy93cyI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjguMjAuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3MvLS93cy04LjIwLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNBdDhCaGdOYnpDdGdHYnQyT3htcHVyeU82M1pvRGsvc3FhQi96blFtOTRUNGZDRXN5L3lWKzdDZEMxa0poT1U5bGJvQUVVN1Iza3F1dXljRG9pYlZBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwLjAuMCIKKyAgICAgIH0sCisgICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImJ1ZmZlcnV0aWwiOiAiXjQuMC4xIiwKKyAgICAgICAgInV0Zi04LXZhbGlkYXRlIjogIj49NS4wLjIiCisgICAgICB9LAorICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogeworICAgICAgICAiYnVmZmVydXRpbCI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0sCisgICAgICAgICJ1dGYtOC12YWxpZGF0ZSI6IHsKKyAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveG1sYnVpbGRlciI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjE1LjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveG1sYnVpbGRlci8tL3htbGJ1aWxkZXItMTUuMS4xLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15TXFHQnF0WHllTjFlM1RHWXZnTmdEVlozajg0VzRjd2tPWFFzd2dob2w2QVBnWldhZmY5bG5idk43TUhZSk9pWHN2R1BYdGpUWUpFaUM5SjJ3djlFZz09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTguMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveTE4biI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjUuMC44IiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95MThuLy0veTE4bi01LjAuOC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHBmRnplZ2VEV0pISklBbVRMUlAyRHdIamRGNXM3am85dHV6dGRReEFoSU5DZHZTKzNuR0lOcVBkMDBBcGhxSlIvMExoQU5VUzYvKzdTQ2I5OFlPZkE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveWFsbGlzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC0zLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTRVR1FhV1BINTltT1hVWW5BRzJld25jUVM0aTRGNDNUdjNKb0FNK3MyVkRBbVM5TnNLOEdwRE1MckNIUGtzRlQ3aDNLNlRPb1VObjJwYjdSb1h4NGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveWFtbCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuOC4zIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YW1sLy0veWFtbC0yLjguMy50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXZiYUNMT08yT3R3L2xXNWJtaDlkL1dFZGNERmRRcDJaMlpVSDNwWDlVMmloeVVZMG52THY3SjZUcldvd2tsUkdQWWJCL0l1SU1mWWd4YUNQZzVCcGc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIklTQyIsCisgICAgICAiYmluIjogeworICAgICAgICAieWFtbCI6ICJiaW4ubWpzIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PSAxNC42IgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9lZW1lbGkiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3lhcmdzIjogeworICAgICAgInZlcnNpb24iOiAiMTcuNy4yIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy8tL3lhcmdzLTE3LjcuMi50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2RTenpSUSsrQ0tuTkkva3JLbllSVjdKS0tQVVhNRWg2MXNvYUhLZzltcldFaHpGV2hGbnhQeEdsKzY5Y0QxT3U2M0MxM05VUENubUljcnZxQ3VNNnc9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZGVwZW5kZW5jaWVzIjogeworICAgICAgICAiY2xpdWkiOiAiXjguMC4xIiwKKyAgICAgICAgImVzY2FsYWRlIjogIl4zLjEuMSIsCisgICAgICAgICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwKKyAgICAgICAgInJlcXVpcmUtZGlyZWN0b3J5IjogIl4yLjEuMSIsCisgICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4zIiwKKyAgICAgICAgInkxOG4iOiAiXjUuMC41IiwKKyAgICAgICAgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIgorICAgICAgfSwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEyIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIiOiB7CisgICAgICAidmVyc2lvbiI6ICIyMS4xLjEiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMS4xLjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRWcHNKVzdEZGplY0FpRnBiSUIxZTNxeElRc0U2Tm9QYzUvZVRkcmJiSUM0aDBMVnNXaG5vYTNnK20ySGNsQkl1akh6c3haNFZKVkErR1V1YzIvTEJ3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJJU0MiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3lhcmdzLXVucGFyc2VyIjogeworICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLXVucGFyc2VyLy0veWFyZ3MtdW5wYXJzZXItMi4wLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdwUlRJQTlRYzFjYVowYlo2UllSR2JISnRoSld1YWtmK1dtSEswclZlTGtOcnJHaGZvYWJCTmR1ZTZrZElOSTZyNGlmN29jcTlhRC9uN3h3S09kek9BPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgImNhbWVsY2FzZSI6ICJeNi4wLjAiLAorICAgICAgICAiZGVjYW1lbGl6ZSI6ICJeNC4wLjAiLAorICAgICAgICAiZmxhdCI6ICJeNS4wLjIiLAorICAgICAgICAiaXMtcGxhaW4tb2JqIjogIl4yLjEuMCIKKyAgICAgIH0sCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj0xMCIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveWFyZ3MtdW5wYXJzZXIvbm9kZV9tb2R1bGVzL2NhbWVsY2FzZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjYuMy4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW1lbGNhc2UvLS9jYW1lbGNhc2UtNi4zLjAudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdteTZGaFlsQ1k3dU9FbFpVU2J4bzJVQ0RIOG93RWs5OTZna2JycHNnR3RySkxNM0o3akd4bDlJYzdRd3dqNGl2T0U1QVdaV1JNZWNEZEY3aHFHakZBPT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMveW4iOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveW4vLS95bi0zLjEuMS50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItVXg0eWdHV3N1MmM3aXNGV2U4WXUxWWx1Sm1xVmh4cUsyY0xYTlFBNUFjQzNRZmJHTnBNN2Z1MFk4Yi96MTZwWExuRnhaWXZXaGQzZmhCWTlETG1DNlE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIsCisgICAgICAiZW5naW5lcyI6IHsKKyAgICAgICAgIm5vZGUiOiAiPj02IgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy95b2N0by1xdWV1ZSI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95b2N0by1xdWV1ZS8tL3lvY3RvLXF1ZXVlLTAuMS4wLnRneiIsCisgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yVmtzdnNuTkNkSi9vaEdjNnhnUHd5TjhlaGVDeHNpTE04bXh1RS90L21PVnFKZXdQdU8xbWlMcFRIUWlSZ1RLQ0xleEw0TWVBRlZhZ3RzN0htTloyUT09IiwKKyAgICAgICJkZXYiOiB0cnVlLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJlbmdpbmVzIjogeworICAgICAgICAibm9kZSI6ICI+PTEwIgorICAgICAgfSwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCisgICAgICB9CisgICAgfSwKKyAgICAibm9kZV9tb2R1bGVzL3l1cCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjEuNy4xIiwKKyAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95dXAvLS95dXAtMS43LjEudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdLSEZYMm5YdWwyLzREdGZ4aG96djcwMWpMUUhkZjZKMzRZRGgyY0VrcHFvbzhsZTVNZzYvTHJkc2VWTHJGYXJtRnlnWlRsZkloSHgvUUtmYi9RV1h3PT0iLAorICAgICAgImRldiI6IHRydWUsCisgICAgICAibGljZW5zZSI6ICJNSVQiLAorICAgICAgImRlcGVuZGVuY2llcyI6IHsKKyAgICAgICAgInByb3BlcnR5LWV4cHIiOiAiXjIuMC41IiwKKyAgICAgICAgInRpbnktY2FzZSI6ICJeMS4wLjMiLAorICAgICAgICAidG9wb3NvcnQiOiAiXjIuMC4yIiwKKyAgICAgICAgInR5cGUtZmVzdCI6ICJeMi4xOS4wIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy95dXAvbm9kZV9tb2R1bGVzL3R5cGUtZmVzdCI6IHsKKyAgICAgICJ2ZXJzaW9uIjogIjIuMTkuMCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTIuMTkuMC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkFIODIycEFkQmdjTk1BZlduQ0JVM0NGWmNmWi9pMWVaandGVS9kc0xLdW15dXVQM25pdWVnMlVBdWtYWUYwRTJBQW9jODJaU1NmOUowV1FCaW56SEE9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIihNSVQgT1IgQ0MwLTEuMCkiLAorICAgICAgImVuZ2luZXMiOiB7CisgICAgICAgICJub2RlIjogIj49MTIuMjAiCisgICAgICB9LAorICAgICAgImZ1bmRpbmciOiB7CisgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKKyAgICAgIH0KKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvemltbWVyZnJhbWUiOiB7CisgICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvemltbWVyZnJhbWUvLS96aW1tZXJmcmFtZS0xLjEuNC50Z3oiLAorICAgICAgImludGVncml0eSI6ICJzaGE1MTItQjU4TkdCRW9jOFk5TVdXQ1FHbC9ncTl4QkNlNElpS00wYTJ4N0daZFFLT1c1RXhyOFMxVzI0SjZPZ00xbmpLOHhDUkd2QUpJTC9NeFhIZjZTa21RS1E9PSIsCisgICAgICAiZGV2IjogdHJ1ZSwKKyAgICAgICJsaWNlbnNlIjogIk1JVCIKKyAgICB9LAorICAgICJub2RlX21vZHVsZXMvem9kIjogeworICAgICAgInZlcnNpb24iOiAiMy4yNS43NiIsCisgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvem9kLy0vem9kLTMuMjUuNzYudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWd6VXQvcXQ4MW5Yc0ZHS0lGY0MzWW5mRUF4NU5rdW5DZm5EbHZ1QlNTRlMwMmJjWHU0TG1lYTBBRklVd2JMV3hXUHgzZDlwOFM1UW9hdWpLY05ReGNRPT0iLAorICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKKyAgICAgICJmdW5kaW5nIjogeworICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9jb2xpbmhhY2tzIgorICAgICAgfQorICAgIH0sCisgICAgIm5vZGVfbW9kdWxlcy96b2QtdG8tanNvbi1zY2hlbWEiOiB7CisgICAgICAidmVyc2lvbiI6ICIzLjI1LjIiLAorICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3pvZC10by1qc29uLXNjaGVtYS8tL3pvZC10by1qc29uLXNjaGVtYS0zLjI1LjIudGd6IiwKKyAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU8vUGdmbnBUMXhLU0RlUVlTQ2ZSSTVHeTNoUGY5MW1LVkR1WUxVSFpKTWlERnB0dlA0MU1TbldvZm04ZG5DbTAyNTZaTmZaSU03RFN6dVNNQUZuakhBPT0iLAorICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKKyAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogeworICAgICAgICAiem9kIjogIl4zLjI1LjI4IHx8IF40IgorICAgICAgfQorICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1qcy9wYWNrYWdlLmpzb24gYi9ncmVtbGluLWpzL3BhY2thZ2UuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTBjMWVjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1qcy9wYWNrYWdlLmpzb24KQEAgLTAsMCArMSw5IEBACit7CisgICJuYW1lIjogImFwYWNoZS10aW5rZXJwb3AiLAorICAicHJpdmF0ZSI6IHRydWUsCisgICJ3b3Jrc3BhY2VzIjogWworICAgICJncmVtbGluLWphdmFzY3JpcHQiLAorICAgICJncmVtbGluLW1jcCIsCisgICAgImdyZW1saW50IgorICBdCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLWpzL3BvbS54bWwgYi9ncmVtbGluLWpzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllMjEzNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tanMvcG9tLnhtbApAQCAtMCwwICsxLDEwOCBAQAorPCEtLQorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCitjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKK3RoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KK1RoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1qczwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gSlM8L25hbWU+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKworICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmdyZW1saW4tamF2YXNjcmlwdDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmdyZW1saW50PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Z3JlbWxpbi1tY3A8L21vZHVsZT4KKyAgICA8L21vZHVsZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPCEtLQorICAgICAgICAgICAgSW5zdGFsbCBub2RlL25wbSBhbmQgcnVuIG5wbSBjaSBmcm9tIHRoZSB3b3Jrc3BhY2Ugcm9vdCBzbyB0aGF0IGFsbCBKUyB3b3Jrc3BhY2UKKyAgICAgICAgICAgIG1lbWJlcnMgKGdyZW1saW4tamF2YXNjcmlwdCwgZ3JlbWxpbi1tY3AsIGdyZW1saW50KSBzaGFyZSBhIHNpbmdsZSBub2RlX21vZHVsZXMKKyAgICAgICAgICAgIGluc3RhbGxhdGlvbiB3aXRoIHdvcmtzcGFjZSBzeW1saW5rcyBpbiBwbGFjZSBiZWZvcmUgYW55IGNoaWxkIG1vZHVsZSBidWlsZHMuCisgICAgICAgICAgICBUaGlzIHBvbSBydW5zIGZpcnN0IGluIHRoZSBncmVtbGluLWpzIHJlYWN0b3IsIGVuc3VyaW5nIHRoaXMgY29tcGxldGVzIGJlZm9yZQorICAgICAgICAgICAgYW55IGNoaWxkIG1vZHVsZSBiZWdpbnMgaXRzIG93biBidWlsZCBsaWZlY3ljbGUuCisgICAgICAgICAgICAtLT4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5laXJzbGV0dDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5mcm9udGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xNS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxpbmhlcml0ZWQ+ZmFsc2U8L2luaGVyaXRlZD4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5pbnN0YWxsIG5vZGUgYW5kIG5wbTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmFsaWRhdGU8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmluc3RhbGwtbm9kZS1hbmQtbnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIHdvcmtzcGFjZSBpbnN0YWxsPC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52YWxpZGF0ZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+Y2k8L2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8bm9kZVZlcnNpb24+JHtydW50aW1lLm5vZGUudmVyc2lvbn08L25vZGVWZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8bnBtVmVyc2lvbj4ke3J1bnRpbWUubnBtLnZlcnNpb259PC9ucG1WZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c2tpcFNvdXJjZT50cnVlPC9za2lwU291cmNlPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4taW5zdGFsbC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBsb3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1sYW5ndWFnZS9wb20ueG1sIGIvZ3JlbWxpbi1sYW5ndWFnZS9wb20ueG1sCmluZGV4IGFhNmI3NGYuLjBkMGExZGUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tbGFuZ3VhZ2UvcG9tLnhtbAorKysgYi9ncmVtbGluLWxhbmd1YWdlL3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAKICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLWxhbmd1YWdlPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1sYW5ndWFnZS9zcmMvbWFpbi9hbnRscjQvR3JlbWxpbi5nNCBiL2dyZW1saW4tbGFuZ3VhZ2Uvc3JjL21haW4vYW50bHI0L0dyZW1saW4uZzQKaW5kZXggYmQ0MWQzMi4uNTI3MmFlZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1sYW5ndWFnZS9zcmMvbWFpbi9hbnRscjQvR3JlbWxpbi5nNAorKysgYi9ncmVtbGluLWxhbmd1YWdlL3NyYy9tYWluL2FudGxyNC9HcmVtbGluLmc0CkBAIC0xNTU0LDYgKzE1NTQsMTEgQEAKICAgICB8IHZhcmlhYmxlCiAgICAgOwogCitudWxsYWJsZUdlbmVyaWNMaXRlcmFsTWFwCisgICAgOiBnZW5lcmljTWFwTGl0ZXJhbAorICAgIHwgbnVsbExpdGVyYWwKKyAgICA7CisKIHRyYXZlcnNhbFN0cmF0ZWd5VmFyYXJncwogICAgIDogdHJhdmVyc2FsU3RyYXRlZ3lFeHByPwogICAgIDsKQEAgLTIwOTksNyArMjEwNCw3IEBACiBLX0RFRFVQOiAnZGVkdXAnOwogS19ERVNDOiAnZGVzYyc7CiBLX0RJRkZFUkVOQ0U6ICdkaWZmZXJlbmNlJzsKLUtfRElTQ0FSRDogJ2Rpc2NhcmQnOworS19ESVNDQVJEIDogJ2Rpc2NhcmQnOwogS19ESVJFQ1RJT046ICdEaXJlY3Rpb24nOwogS19ESVNKVU5DVDogJ2Rpc2p1bmN0JzsKIEtfRElTVEFOQ0U6ICdkaXN0YW5jZSc7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9wb20ueG1sIGIvZ3JlbWxpbi1tY3AvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2NDUxMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAKLTwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJwb3A8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjMuOC4yLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1tY3A8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGluIE1DUDwvbmFtZT4KLQotICAgIDxwcm9wZXJ0aWVzPgotICAgICAgICA8bWF2ZW4udGVzdC5za2lwPmZhbHNlPC9tYXZlbi50ZXN0LnNraXA+Ci0gICAgICAgIDxza2lwVGVzdHM+JHttYXZlbi50ZXN0LnNraXB9PC9za2lwVGVzdHM+Ci0gICAgPC9wcm9wZXJ0aWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0PC9kaXJlY3Rvcnk+Ci0gICAgICAgIDxmaW5hbE5hbWU+JHtwcm9qZWN0LmFydGlmYWN0SWR9LSR7cHJvamVjdC52ZXJzaW9ufTwvZmluYWxOYW1lPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jbGVhbjwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpcmVjdG9yeT5zcmMvbWFpbi9qYXZhc2NyaXB0L2Rpc3Q8L2RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL2phdmFzY3JpcHQvbm9kZV9tb2R1bGVzPC9kaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvZmlsZXNldHM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuZWlyc2xldHQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTUuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5pbnN0YWxsIG5vZGUgYW5kIG5wbTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dmFsaWRhdGU8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmluc3RhbGwtbm9kZS1hbmQtbnBtPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aWQ+bnBtIGluc3RhbGw8L2lkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+aW5zdGFsbDwvYXJndW1lbnRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ucG0gdmFsaWRhdGU8L2lkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXJlc291cmNlczwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+bnBtPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+cnVuIHZhbGlkYXRlPC9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBidWlsZDwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ucG08L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ3VtZW50cz5ydW4gYnVpbGQ8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8d29ya2luZ0RpcmVjdG9yeT5zcmMvbWFpbi9qYXZhc2NyaXB0PC93b3JraW5nRGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICAgICA8bm9kZVZlcnNpb24+JHtydW50aW1lLm5vZGUudmVyc2lvbn08L25vZGVWZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICA8bnBtVmVyc2lvbj4ke3J1bnRpbWUubnBtLnZlcnNpb259PC9ucG1WZXJzaW9uPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotCi0gICAgICAgICAgICA8IS0tIFRoZXJlIGlzIG5vIEpWTSBjb2RlL2FydGlmYWN0cyB0byBwdWJsaXNoIGZvciB0aGlzIG1vZHVsZSAtLT4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXBTb3VyY2U+dHJ1ZTwvc2tpcFNvdXJjZT4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWluc3RhbGwtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLm1hdmVuLXJlcGxhY2VyLXBsdWdpbjwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5yZXBsYWNlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGU+c3JjL21haW4vamF2YXNjcmlwdC9zcmMvY29uc3RhbnRzLnRzPC9maWxlPgotICAgICAgICAgICAgICAgICAgICA8cmVwbGFjZW1lbnRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGxhY2VtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0b2tlbj5HUkVNTElOX1ZFUlNJT04gPSAnLionPC90b2tlbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+R1JFTUxJTl9WRVJTSU9OID0gJyR7cHJvamVjdC52ZXJzaW9ufSc8L3ZhbHVlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXBsYWNlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPC9yZXBsYWNlbWVudHM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotICAgIDxwcm9maWxlcz4KLSAgICAgICAgPCEtLQotICAgICAgIFByb3ZpZGVzIGEgd2F5IHRvIGRlcGxveSB0aGUgZ3JlbWxpbi1tY3AgdG8gbnBtLiBUaGlzIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBtYXZlbiBleGVjdXRpb24KLSAgICAgICBiZWNhdXNlIG5wbSBkb2VzIG5vdCBoYXZlIGEgc3RhZ2luZyBlbnZpcm9ubWVudCBsaWtlIHNvbmF0eXBlIGZvciByZWxlYXNlcy4gQXMgc29vbiBhcyB0aGUgcmVsZWFzZSBpcwotICAgICAgIHB1Ymxpc2hlZCBpdCBpcyBwdWJsaWMuIEluIG91ciByZWxlYXNlIHdvcmtmbG93LCBkZXBsb3kgb2NjdXJzIHByaW9yIHRvIHZvdGUgb24gdGhlIHJlbGVhc2UgYW5kIHdlIGNhbid0Ci0gICAgICAgbWFrZSB0aGlzIHN0dWZmIHB1YmxpYyB1bnRpbCB0aGUgdm90ZSBpcyBvdmVyLgotICAgICAgIC0tPgotICAgICAgICA8cHJvZmlsZT4KLSAgICAgICAgICAgIDxpZD5ncmVtbGluLW1jcC1kZXBsb3k8L2lkPgotICAgICAgICAgICAgPGFjdGl2YXRpb24+Ci0gICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD5mYWxzZTwvYWN0aXZlQnlEZWZhdWx0PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPG5hbWU+bnBtPC9uYW1lPgotICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8L2FjdGl2YXRpb24+Ci0gICAgICAgICAgICA8YnVpbGQ+Ci0gICAgICAgICAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBwdWJsaXNoPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmRlcGxveTwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPnB1Ymxpc2g8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBnaXZlbiBob3cgdGhlIDxjb25maWd1cmF0aW9uPiBpcyBzcGVjaWZpZWQgaW4gdGhlIG1haW4gYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIGZpbmUgdG8ganVzdCBhbHdheXMgZGVwbG95IGJlY2F1c2UgdGhpcyA8cHJvZmlsZT4gbmVlZHMgdG8gYmUgbWFudWFsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQgYW5kIHRoYXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGdpdmVuIG91ciBkZXBsb3ltZW50IHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdvcmtpbmdEaXJlY3Rvcnk+c3JjL21haW4vamF2YXNjcmlwdDwvd29ya2luZ0RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9kZVZlcnNpb24+JHtydW50aW1lLm5vZGUudmVyc2lvbn08L25vZGVWZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxucG1WZXJzaW9uPiR7cnVudGltZS5ucG0udmVyc2lvbn08L25wbVZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KLSAgICAgICAgICAgIDwvYnVpbGQ+Ci0gICAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9SRUFETUUubWQgYi9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWEyYTY2NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L1JFQURNRS5tZAorKysgL2Rldi9udWxsCkBAIC0xLDUxNiArMCwwIEBACi08IS0tCi0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSB1bmRlciB0aGUgTGljZW5zZS4KLQotLS0+Ci0KLSMgR3JlbWxpbiBNQ1AgU2VydmVyCi0KLT4gKipDb25uZWN0IEFJIGFnZW50cyBsaWtlIENsYXVkZSwgQ3Vyc29yLCBhbmQgV2luZHN1cmYgdG8geW91ciBncmFwaCBkYXRhYmFzZXMhKioKLQotQW4gW01DUF0oaHR0cHM6Ly9tb2RlbGNvbnRleHRwcm90b2NvbC5pby8pIChNb2RlbCBDb250ZXh0IFByb3RvY29sKSBzZXJ2ZXIgdGhhdCBlbmFibGVzIEFJIGFzc2lzdGFudHMgdG8gaW50ZXJhY3Qgd2l0aAotYW55IEFwYWNoZSBUaW5rZXJQb3AtY29tcGF0aWJsZSBncmFwaCBkYXRhYmFzZSBob3N0ZWQgaW4gW0dyZW1saW4gU2VydmVyXShodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9yZWZlcmVuY2UvI2dyZW1saW4tc2VydmVyKQotdGhyb3VnaCBuYXR1cmFsIGxhbmd1YWdlLiBRdWVyeSB5b3VyIGRhdGEsIGRpc2NvdmVyIHNjaGVtYXMsIGFuYWx5emUgcmVsYXRpb25zaGlwcywgYW5kIG1hbmFnZSBncmFwaCBkYXRhIHVzaW5nIHNpbXBsZQotY29udmVyc2F0aW9ucy4KLQotIyMg4pyoIFdoYXQgWW91IENhbiBEbwotCi1UYWxrIHRvIHlvdXIgZ3JhcGggZGF0YWJhc2UgbmF0dXJhbGx5OgotCi0tIPCflI0gKioiV2hhdCdzIHRoZSBzdHJ1Y3R1cmUgb2YgbXkgZ3JhcGg/IioqIC0gQXV0b21hdGljIHNjaGVtYSBkaXNjb3ZlcnkKLS0g8J+TiiAqKiJTaG93IG1lIGFsbCB1c2VycyBvdmVyIDMwIGFuZCB0aGVpciBjb25uZWN0aW9ucyIqKiAtIENvbXBsZXggZ3JhcGggcXVlcmllcwotLSDwn5SXICoqIkZpbmQgdGhlIHNob3J0ZXN0IHBhdGggYmV0d2VlbiBBbGljZSBhbmQgQm9iIioqIC0gUmVsYXRpb25zaGlwIGFuYWx5c2lzCi0tIPCfk4ggKioiR2l2ZSBtZSBncmFwaCBzdGF0aXN0aWNzIGFuZCBtZXRyaWNzIioqIC0gRGF0YSBpbnNpZ2h0cwotLSDwn6egICoqU21hcnQgZW51bSBkaXNjb3ZlcnkqKiAtIEFJIGxlYXJucyB5b3VyIGRhdGEncyB2YWxpZCB2YWx1ZXMgYXV0b21hdGljYWxseQotCi0jIyDwn5ug77iPIEF2YWlsYWJsZSBUb29scwotCi1Zb3VyIEFJIGFzc2lzdGFudCBnZXRzIGFjY2VzcyB0byB0aGVzZSBwb3dlcmZ1bCB0b29sczoKLQotfCBUb29sICAgICAgICAgICAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgIHwgV2hhdCBJdCBEb2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8Ci18IPCflI0gKipnZXRfZ3JhcGhfc3RhdHVzKiogICAgIHwgSGVhbHRoIENoZWNrICAgICB8IFZlcmlmeSBkYXRhYmFzZSBjb25uZWN0aXZpdHkgYW5kIHNlcnZlciBzdGF0dXMgICAgICAgICAgICAgICB8Ci18IPCfk4sgKipnZXRfZ3JhcGhfc2NoZW1hKiogICAgIHwgU2NoZW1hIERpc2NvdmVyeSB8IEdldCBjb21wbGV0ZSBncmFwaCBzdHJ1Y3R1cmUgd2l0aCB2ZXJ0aWNlcyBhbmQgZWRnZXMgICAgICAgICB8Ci18IOKaoSAqKnJ1bl9ncmVtbGluX3F1ZXJ5KiogICAgfCBRdWVyeSBFeGVjdXRpb24gIHwgRXhlY3V0ZSBhbnkgR3JlbWxpbiB0cmF2ZXJzYWwgcXVlcnkgd2l0aCBmdWxsIHN5bnRheCBzdXBwb3J0IHwKLXwg8J+UhCAqKnJlZnJlc2hfc2NoZW1hX2NhY2hlKiogfCBDYWNoZSBNYW5hZ2VtZW50IHwgRm9yY2UgaW1tZWRpYXRlIHJlZnJlc2ggb2YgY2FjaGVkIHNjaGVtYSBpbmZvcm1hdGlvbiAgICAgICAgIHwKLXwg8J+RjCAqKmZvcm1hdF9ncmVtbGluX3F1ZXJ5KiogfCBRdWVyeSBGb3JtYXR0aW5nIHwgRm9ybWF0IGEgR3JlbWxpbiBxdWVyeSBzdHJpbmcgdXNpbmcgZ3JlbWxpbnQgICAgICAgICAgICAgICAgIHwKLQotIyMg8J+agCBRdWljayBTZXR1cAotCi0jIyMgU3RlcCAxOiBJbnN0YWxsCi0KLWBgYGJhc2gKLSMgVGhlIG5weCBjb21tYW5kIHdpbGwgYXV0b21hdGljYWxseSBpbnN0YWxsIHRoZSBwYWNrYWdlIGlmIG5lZWRlZAotIyBObyBzZXBhcmF0ZSBpbnN0YWxsYXRpb24gc3RlcCByZXF1aXJlZAotYGBgCi0KLSMjIyMgQWx0ZXJuYXRpdmU6IEJ1aWxkIGZyb20gU291cmNlCi0KLWBgYGJhc2gKLSMgQ2xvbmUgYW5kIHNldHVwCi1naXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AuZ2l0Ci1jZCB0aW5rZXJwb3AvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdAotbnBtIGluc3RhbGwKLW5wbSBydW4gYnVpbGQKLWBgYAotCi0jIyMgU3RlcCAyOiBDb25maWd1cmUgWW91ciBBSSBDbGllbnQKLQotQWRkIHRoaXMgdG8geW91ciBNQ1AgY2xpZW50IGNvbmZpZ3VyYXRpb246Ci0KLSMjIyMgQ2xhdWRlIERlc2t0b3AgLyBDdXJzb3IgLyBXaW5kc3VyZgotCi0qKlVzaW5nIHRoZSBwdWJsaXNoZWQgcGFja2FnZSAocmVjb21tZW5kZWQpOioqCi0KLWBgYGpzb24KLXsKLSAgIm1jcFNlcnZlcnMiOiB7Ci0gICAgImdyZW1saW4iOiB7Ci0gICAgICAiY29tbWFuZCI6ICJucHgiLAotICAgICAgImFyZ3MiOiBbImdyZW1saW4tbWNwIl0sCi0gICAgICAiZW52IjogewotICAgICAgICAiR1JFTUxJTl9NQ1BfRU5EUE9JTlQiOiAibG9jYWxob3N0OjgxODIiLAotICAgICAgICAiR1JFTUxJTl9NQ1BfTE9HX0xFVkVMIjogImluZm8iCi0gICAgICB9Ci0gICAgfQotICB9Ci19Ci1gYGAKLQotKipGcm9tIHNvdXJjZToqKgotCi1gYGBqc29uCi17Ci0gICJtY3BTZXJ2ZXJzIjogewotICAgICJncmVtbGluIjogewotICAgICAgImNvbW1hbmQiOiAibm9kZSIsCi0gICAgICAiYXJncyI6IFsiL3BhdGgvdG8vZ3JlbWxpbi1tY3AvZGlzdC9zZXJ2ZXIuanMiXSwKLSAgICAgICJlbnYiOiB7Ci0gICAgICAgICJHUkVNTElOX01DUF9FTkRQT0lOVCI6ICJsb2NhbGhvc3Q6ODE4MiIsCi0gICAgICAgICJHUkVNTElOX01DUF9MT0dfTEVWRUwiOiAiaW5mbyIKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLWBgYAotCi0jIyMjIFdpdGggQXV0aGVudGljYXRpb24gYW5kIEdyYXBoVHJhdmVyc2FsU291cmNlCi0KLWBgYGpzb24KLXsKLSAgIm1jcFNlcnZlcnMiOiB7Ci0gICAgImdyZW1saW4iOiB7Ci0gICAgICAiY29tbWFuZCI6ICJucHgiLAotICAgICAgImFyZ3MiOiBbIkBrcHJpdGFtL2dyZW1saW4tbWNwIl0sCi0gICAgICAiZW52IjogewotICAgICAgICAiR1JFTUxJTl9NQ1BfRU5EUE9JTlQiOiAieW91ci1zZXJ2ZXIuY29tOjgxODIvZyIsCi0gICAgICAgICJHUkVNTElOX01DUF9VU0VSTkFNRSI6ICJ5b3VyLXVzZXJuYW1lIiwKLSAgICAgICAgIkdSRU1MSU5fTUNQX1BBU1NXT1JEIjogInlvdXItcGFzc3dvcmQiLAotICAgICAgICAiR1JFTUxJTl9NQ1BfVVNFX1NTTCI6ICJ0cnVlIgotICAgICAgfQotICAgIH0KLSAgfQotfQotYGBgCi0KLSMjIyBTdGVwIDM6IFN0YXJ0IFlvdXIgR3JlbWxpbiBTZXJ2ZXIKLQotTWFrZSBzdXJlIHlvdXIgR3JlbWxpbi1jb21wYXRpYmxlIGRhdGFiYXNlIGlzIHJ1bm5pbmc6Ci0KLWBgYGJhc2gKLSMgRm9yIEFwYWNoZSBUaW5rZXJQb3AgR3JlbWxpbiBTZXJ2ZXIKLS4vYmluL2dyZW1saW4tc2VydmVyLnNoIHN0YXJ0Ci0KLSMgT3IgdXNpbmcgRG9ja2VyCi1kb2NrZXIgcnVuIC1wIDgxODI6ODE4MiB0aW5rZXJwb3AvZ3JlbWxpbi1zZXJ2ZXIKLWBgYAotCi0jIyMgU3RlcCA0OiBUZXN0IHRoZSBDb25uZWN0aW9uCi0KLVJlc3RhcnQgeW91ciBBSSBjbGllbnQgYW5kIHRyeSBhc2tpbmc6Ci0KLT4gIkNhbiB5b3UgY2hlY2sgaWYgbXkgZ3JhcGggZGF0YWJhc2UgaXMgY29ubmVjdGVkIGFuZCBzaG93IG1lIGl0cyBzY2hlbWE/IgotCi0jIyDwn5KhIFVzYWdlIEV4YW1wbGVzCi0KLSMjIyBTY2hlbWEgRXhwbG9yYXRpb24KLQotKipZb3UgYXNrOioqIF8iV2hhdCdzIHRoZSBzdHJ1Y3R1cmUgb2YgbXkgZ3JhcGggZGF0YWJhc2U/Il8KLQotKipBSSByZXNwb25zZToqKiBUaGUgQUkgY2FsbHMgYGdldF9ncmFwaF9zY2hlbWFgIGFuZCB0ZWxscyB5b3UgYWJvdXQgeW91ciB2ZXJ0ZXggdHlwZXMsIGVkZ2UgdHlwZXMsIGFuZCBob3cgdGhleSdyZSBjb25uZWN0ZWQuCi0KLSMjIyBEYXRhIEFuYWx5c2lzCi0KLSoqWW91IGFzazoqKiBfIlNob3cgbWUgYWxsIHBlb3BsZSBvdmVyIDMwIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIl8KLQotKipBSSByZXNwb25zZToqKiBUaGUgQUkgZXhlY3V0ZXMgYGcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS5oYXMoJ2FnZScsIGd0KDMwKSkub3V0KCkucGF0aCgpYCBhbmQgZXhwbGFpbnMgdGhlIHJlc3VsdHMgaW4gbmF0dXJhbCBsYW5ndWFnZS4KLQotIyMjIEdyYXBoIE1ldHJpY3MKLQotKipZb3UgYXNrOioqIF8iR2l2ZSBtZSBzb21lIHN0YXRpc3RpY3MgYWJvdXQgbXkgZ3JhcGgiXwotCi0qKkFJIHJlc3BvbnNlOioqIFRoZSBBSSBydW5zIG11bHRpcGxlIHF1ZXJpZXMgdG8gY291bnQgdmVydGljZXMsIGVkZ2VzLCBhbmQgYW5hbHl6ZSB0aGUgZGlzdHJpYnV0aW9uLCB0aGVuIHByZXNlbnRzIGEgc3VtbWFyeS4KLQotIyMg8J+noCBBdXRvbWF0aWMgRW51bSBEaXNjb3ZlcnkKLQotPiAqKldoeSB0aGlzIG1hdHRlcnM6KiogQUkgYWdlbnRzIHdvcmsgYmVzdCB3aGVuIHRoZXkga25vdyB0aGUgZXhhY3QgdmFsaWQgdmFsdWVzIGZvciBwcm9wZXJ0aWVzLiBJbnN0ZWFkIG9mIGd1ZXNzaW5nIG9yIG1ha2luZyBpbnZhbGlkIHF1ZXJpZXMsIHRoZXkgY2FuIHVzZSBwcmVjaXNlLCByZWFsIHZhbHVlcyBmcm9tIHlvdXIgZGF0YS4KLQotT25lIG9mIHRoZSBtb3N0IHBvd2VyZnVsIGZlYXR1cmVzIG9mIHRoaXMgTUNQIHNlcnZlciBpcyAqKkF1dG9tYXRpYyBFbnVtIERpc2NvdmVyeSoqIC0gaXQgaW50ZWxsaWdlbnRseSBhbmFseXplcyB5b3VyIGdyYXBoIGRhdGEgdG8gZGlzY292ZXIgdmFsaWQgcHJvcGVydHkgdmFsdWVzIGFuZCBwcm92aWRlcyB0aGVtIGFzIGVudW1zIHRvIEFJIGFnZW50cy4KLQotIyMjIFF1ZXJ5IEZvcm1hdHRpbmcKLQotKipZb3UgYXNrOioqIF8iRm9ybWF0IHRoaXMgR3JlbWxpbiBxdWVyeSBcYGcuVigpLm91dCgnYm90aCcpLnByb2plY3QoJ25hbWUnLCdhZ2UnKS5ieSgnbmFtZScpLmJ5KCdhZ2UnKVxgLiJfCi0KLSoqQUkgcmVzcG9uc2U6KiogVGhlIEFJIGNhbGxzIHRoZSBgZm9ybWF0X2dyZW1saW5fcXVlcnlgIHRvb2wgYW5kIHJldHVybnMgYSBmb3JtYXR0ZWQgR3JlbWxpbiBzdHJpbmcgKG9yIGEgc3RydWN0dXJlZCBlcnJvciBpZiBwYXJzaW5nIGZhaWxzKS4gT3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zIGluY2x1ZGUgYGluZGVudGF0aW9uYCwgYG1heExpbmVMZW5ndGhgLCBhbmQgYHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrc2AuCi0KLSMjIyDwn6SUIFRoZSBQcm9ibGVtIEl0IFNvbHZlcwotCi0qKldpdGhvdXQgRW51bSBEaXNjb3Zlcnk6KioKLQotYGBgCi1BSTogIkkgc2VlIHRoaXMgdmVydGV4IGhhcyBhICdzdGF0dXMnIHByb3BlcnR5IG9mIHR5cGUgJ3N0cmluZycuLi4KLSAgICAgTGV0IG1lIHRyeSBxdWVyeWluZyB3aXRoIHN0YXR1cz0nYWN0aXZlJyIKLVJlc3VsdDog4p2MIE5vIHJlc3VsdHMgKGFjdHVhbCB2YWx1ZXMgYXJlICdDT05GSVJNRUQnLCAnUEVORElORycsICdDQU5DRUxMRUQnKQotYGBgCi0KLSoqV2l0aCBFbnVtIERpc2NvdmVyeToqKgotCi1gYGAKLUFJOiAiSSBjYW4gc2VlIHRoZSAnc3RhdHVzJyBwcm9wZXJ0eSBoYXMgdGhlc2UgZXhhY3QgdmFsdWVzOgotICAgICBbJ0NPTkZJUk1FRCcsICdQRU5ESU5HJywgJ0NBTkNFTExFRCcsICdXQUlUTElTVEVEJ10KLSAgICAgTGV0IG1lIHF1ZXJ5IHdpdGggc3RhdHVzPSdDT05GSVJNRUQnIgotUmVzdWx0OiDinIUgUGVyZmVjdCByZXN1bHRzIHVzaW5nIHJlYWwgZGF0YSB2YWx1ZXMKLWBgYAotCi0jIyMg8J+SoSBIb3cgSXQgV29ya3MKLQotVGhlIHNlcnZlciBhdXRvbWF0aWNhbGx5IHNjYW5zIHlvdXIgZ3JhcGggcHJvcGVydGllcyBhbmQ6Ci0KLTEuICoqSWRlbnRpZmllcyBMb3ctQ2FyZGluYWxpdHkgUHJvcGVydGllcyoqIC0gUHJvcGVydGllcyB3aXRoIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgZGlzdGluY3QgdmFsdWVzCi0yLiAqKkV4dHJhY3RzIFJlYWwgVmFsdWVzKiogLSBTYW1wbGVzIGFjdHVhbCBkYXRhIGZyb20geW91ciBncmFwaAotMy4gKipQcm92aWRlcyBhcyBFbnVtcyoqIC0gSW5jbHVkZXMgdmFsaWQgdmFsdWVzIGluIHRoZSBzY2hlbWEgZm9yIEFJIGFnZW50cwotCi0qKkV4YW1wbGUgT3V0cHV0OioqCi0KLWBgYGpzb24KLXsKLSAgIm5hbWUiOiAiYm9va2luZ1N0YXR1cyIsCi0gICJ0eXBlIjogWyJzdHJpbmciXSwKLSAgImNhcmRpbmFsaXR5IjogInNpbmdsZSIsCi0gICJlbnVtIjogWyJDT05GSVJNRUQiLCAiUEVORElORyIsICJDQU5DRUxMRUQiLCAiV0FJVExJU1RFRCJdLAotICAic2FtcGxlX3ZhbHVlcyI6IFsiQ09ORklSTUVEIiwgIlBFTkRJTkciXQotfQotYGBgCi0KLSMjIyDwn46vIEJlbmVmaXRzIGZvciBBSSBBZ2VudHMKLQotLSAqKvCfjq8gQWNjdXJhdGUgUXVlcmllcyoqIC0gQUkgdXNlcyByZWFsIHZhbHVlcyBpbnN0ZWFkIG9mIGd1ZXNzaW5nCi0tICoq4pqhIEZhc3RlciBSZXN1bHRzKiogLSBObyB0cmlhbC1hbmQtZXJyb3Igd2l0aCBpbnZhbGlkIHZhbHVlcwotLSAqKvCfp6AgQmV0dGVyIFVuZGVyc3RhbmRpbmcqKiAtIEFJIGxlYXJucyB5b3VyIGRhdGEgdm9jYWJ1bGFyeQotLSAqKvCfk4ogU21hcnRlciBBbmFseXRpY3MqKiAtIEVuYWJsZXMgZ3JvdXBpbmcgYW5kIGZpbHRlcmluZyB3aXRoIGFjdHVhbCBjYXRlZ29yaWVzCi0KLSMjIyDimpnvuI8gQ29uZmlndXJhdGlvbiBPcHRpb25zCi0KLUZpbmUtdHVuZSBlbnVtIGRpc2NvdmVyeSB0byBtYXRjaCB5b3VyIGRhdGE6Ci0KLWBgYGJhc2gKLSMgRW5hYmxlL2Rpc2FibGUgZW51bSBkaXNjb3ZlcnkKLUdSRU1MSU5fTUNQX0VOVU1fRElTQ09WRVJZX0VOQUJMRUQ9InRydWUiICAgICAgICAgIyBEZWZhdWx0OiB0cnVlCi0KLSMgQ29udHJvbCB3aGF0IGdldHMgZGV0ZWN0ZWQgYXMgZW51bQotR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTEQ9IjEwIiAgICAgICAjIE1heCBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVudW0gKGRlZmF1bHQ6IDEwKQotCi0jIEV4Y2x1ZGUgc3BlY2lmaWMgcHJvcGVydGllcwotR1JFTUxJTl9NQ1BfRU5VTV9QUk9QRVJUWV9ERU5ZTElTVD0iaWQsdXVpZCx0aW1lc3RhbXAsY3JlYXRlZEF0LHVwZGF0ZWRBdCIKLQotIyBTY2hlbWEgb3B0aW1pemF0aW9uCi1HUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTPSIxMCIgICAgICAgICAgICMgTGltaXQgZW51bSB2YWx1ZXMgc2hvd24gKGRlZmF1bHQ6IDEwKQotR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUz0iZmFsc2UiICAjIFJlZHVjZSBzY2hlbWEgc2l6ZSAoZGVmYXVsdDogZmFsc2UpCi1gYGAKLQotIyMjIPCfmqsgUHJvcGVydHkgRGVueWxpc3QKLQotU29tZSBwcm9wZXJ0aWVzIHNob3VsZCBuZXZlciBiZSB0cmVhdGVkIGFzIGVudW1zOgotCi0qKkF1dG9tYXRpY2FsbHkgRXhjbHVkZWQ6KioKLQotLSAqKkhpZ2gtY2FyZGluYWxpdHkqKiBwcm9wZXJ0aWVzICg+IHRocmVzaG9sZCB1bmlxdWUgdmFsdWVzKQotLSAqKk51bWVyaWMgSURzKiogYW5kICoqVVVJRHMqKgotLSAqKlRpbWVzdGFtcHMqKiBhbmQgKipkYXRlcyoqCi0tICoqTG9uZyB0ZXh0KiogZmllbGRzCi0KLSoqTWFudWFsIEV4Y2x1c2lvbjoqKgotCi1gYGBiYXNoCi0jIEV4Y2x1ZGUgc3BlY2lmaWMgcHJvcGVydGllcyBieSBuYW1lCi1HUkVNTElOX01DUF9FTlVNX1BST1BFUlRZX0RFTllMSVNUPSJ1c2VySWQsc2Vzc2lvbklkLGRlc2NyaXB0aW9uLG5vdGVzLGNvbnRlbnQiCi1gYGAKLQotKipDb21tb24gRGVueWxpc3QgUGF0dGVybnM6KioKLQotLSBgaWQsdXVpZCxndWlkYCAtIFVuaXF1ZSBpZGVudGlmaWVycwotLSBgdGltZXN0YW1wLGNyZWF0ZWRBdCx1cGRhdGVkQXQsbGFzdE1vZGlmaWVkYCAtIFRpbWUgZmllbGRzCi0tIGBkZXNjcmlwdGlvbixub3Rlcyxjb21tZW50LGNvbnRlbnQsdGV4dGAgLSBGcmVlIHRleHQgZmllbGRzCi0tIGBlbWFpbCx1cmwscGhvbmUsYWRkcmVzc2AgLSBQZXJzb25hbC9jb250YWN0IGRhdGEKLS0gYGhhc2gsdG9rZW4sa2V5LHNlY3JldGAgLSBTZWN1cml0eS1yZWxhdGVkIGZpZWxkcwotCi0jIyMg8J+boO+4jyBSZWFsLVdvcmxkIEV4YW1wbGVzCi0KLSoqRS1jb21tZXJjZSBHcmFwaDoqKgotCi1gYGBqc29uCi17Ci0gICJvcmRlclN0YXR1cyI6IHsKLSAgICAiZW51bSI6IFsiUEVORElORyIsICJQUk9DRVNTSU5HIiwgIlNISVBQRUQiLCAiREVMSVZFUkVEIiwgIkNBTkNFTExFRCJdCi0gIH0sCi0gICJwcm9kdWN0Q2F0ZWdvcnkiOiB7Ci0gICAgImVudW0iOiBbIkVMRUNUUk9OSUNTIiwgIkNMT1RISU5HIiwgIkJPT0tTIiwgIkhPTUUiLCAiU1BPUlRTIl0KLSAgfSwKLSAgInBheW1lbnRNZXRob2QiOiB7Ci0gICAgImVudW0iOiBbIkNSRURJVF9DQVJEIiwgIlBBWVBBTCIsICJCQU5LX1RSQU5TRkVSIiwgIkNSWVBUTyJdCi0gIH0KLX0KLWBgYAotCi0qKlNvY2lhbCBOZXR3b3JrIEdyYXBoOioqCi0KLWBgYGpzb24KLXsKLSAgInJlbGF0aW9uc2hpcFR5cGUiOiB7Ci0gICAgImVudW0iOiBbIkZSSUVORCIsICJGQU1JTFkiLCAiQ09MTEVBR1VFIiwgIkFDUVVBSU5UQU5DRSJdCi0gIH0sCi0gICJwcml2YWN5TGV2ZWwiOiB7Ci0gICAgImVudW0iOiBbIlBVQkxJQyIsICJGUklFTkRTIiwgIlBSSVZBVEUiXQotICB9LAotICAiYWNjb3VudFN0YXR1cyI6IHsKLSAgICAiZW51bSI6IFsiQUNUSVZFIiwgIlNVU1BFTkRFRCIsICJERUFDVElWQVRFRCJdCi0gIH0KLX0KLWBgYAotCi0jIyMg8J+UpyBUdW5pbmcgZm9yIFlvdXIgRGF0YQotCi0qKkZvciBMYXJnZSBEYXRhc2V0czoqKgotCi1gYGBiYXNoCi1HUkVNTElOX01DUF9FTlVNX0NBUkRJTkFMSVRZX1RIUkVTSE9MRD0iNSIgICAgICMgU3RyaWN0ZXIgZW51bSBkZXRlY3Rpb24KLUdSRU1MSU5fTUNQX1NDSEVNQV9NQVhfRU5VTV9WQUxVRVM9IjUiICAgICAgICAgIyBGZXdlciB2YWx1ZXMgaW4gc2NoZW1hCi1gYGAKLQotKipGb3IgUmljaCBDYXRlZ29yaWNhbCBEYXRhOioqCi0KLWBgYGJhc2gKLUdSRU1MSU5fTUNQX0VOVU1fQ0FSRElOQUxJVFlfVEhSRVNIT0xEPSIyNSIgICAgIyBNb3JlIHBlcm1pc3NpdmUgZGV0ZWN0aW9uCi1HUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTPSIyMCIgICAgICAgICMgU2hvdyBtb3JlIGVudW0gdmFsdWVzCi1gYGAKLQotKipGb3IgUGVyZm9ybWFuY2UtQ3JpdGljYWwgRW52aXJvbm1lbnRzOioqCi0KLWBgYGJhc2gKLUdSRU1MSU5fTUNQX0VOVU1fRElTQ09WRVJZX0VOQUJMRUQ9ImZhbHNlIiAgICAgIyBEaXNhYmxlIGZvciBmYXN0ZXIgc2NoZW1hIGxvYWRpbmcKLUdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX1NBTVBMRV9WQUxVRVM9ImZhbHNlIiAjIE1pbmltYWwgc2NoZW1hIHNpemUKLWBgYAotCi1UaGlzIGludGVsbGlnZW50IGVudW0gZGlzY292ZXJ5IHRyYW5zZm9ybXMgaG93IEFJIGFnZW50cyBpbnRlcmFjdCB3aXRoIHlvdXIgZ3JhcGggZGF0YSwgbWFraW5nIHF1ZXJpZXMgbW9yZSBhY2N1cmF0ZSBhbmQgaW5zaWdodHMgbW9yZSBtZWFuaW5nZnVsISDwn46vCi0KLSMjIOKame+4jyBDb25maWd1cmF0aW9uIE9wdGlvbnMKLQotIyMjIEJhc2ljIENvbmZpZ3VyYXRpb24KLQotYGBgYmFzaAotIyBSZXF1aXJlZAotR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9ImxvY2FsaG9zdDo4MTgyIgotCi0jIE9wdGlvbmFsCi1HUkVNTElOX01DUF9VU0VfU1NMPSJ0cnVlIiAgICAgICAgICAgICAgIyBFbmFibGUgU1NML1RMUwotR1JFTUxJTl9NQ1BfVVNFUk5BTUU9InVzZXJuYW1lIiAgICAgICAgICMgQXV0aGVudGljYXRpb24KLUdSRU1MSU5fTUNQX1BBU1NXT1JEPSJwYXNzd29yZCIgICAgICAgICAjIEF1dGhlbnRpY2F0aW9uCi1HUkVNTElOX01DUF9JRExFX1RJTUVPVVQ9IjMwMCIgICAgICAgICAgIyBDb25uZWN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoZGVmYXVsdDogMzAwKQotR1JFTUxJTl9NQ1BfTE9HX0xFVkVMPSJpbmZvIiAgICAgICAgICAgICAgICAgICAgIyBMb2dnaW5nIGxldmVsOiBlcnJvciwgd2FybiwgaW5mbywgZGVidWcKLWBgYAotCi0jIyMgQWR2YW5jZWQgQ29uZmlndXJhdGlvbgotCi1gYGBiYXNoCi0jIFNjaGVtYSBhbmQgcGVyZm9ybWFuY2UgdHVuaW5nCi1HUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEPSJ0cnVlIiAgICAgICAgICMgRW5hYmxlIHNtYXJ0IGVudW0gZGV0ZWN0aW9uIChkZWZhdWx0OiB0cnVlKQotR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTEQ9IjEwIiAgICAgICAjIE1heCBkaXN0aW5jdCB2YWx1ZXMgZm9yIGVudW0gZGV0ZWN0aW9uIChkZWZhdWx0OiAxMCkKLUdSRU1MSU5fTUNQX0VOVU1fUFJPUEVSVFlfREVOWUxJU1Q9ImlkLHRpbWVzdGFtcCIgIyBFeGNsdWRlIHNwZWNpZmljIHByb3BlcnRpZXMgZnJvbSBlbnVtIGRldGVjdGlvbgotR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUz0iZmFsc2UiICAjIEluY2x1ZGUgc2FtcGxlIHZhbHVlcyBpbiBzY2hlbWEgKGRlZmF1bHQ6IGZhbHNlKQotR1JFTUxJTl9NQ1BfU0NIRU1BX01BWF9FTlVNX1ZBTFVFUz0iMTAiICAgICAgICAgICAjIExpbWl0IGVudW0gdmFsdWVzIHNob3duIChkZWZhdWx0OiAxMCkKLUdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX0NPVU5UUz0iZmFsc2UiICAgICAgICAgIyBJbmNsdWRlIHZlcnRleC9lZGdlIGNvdW50cyBpbiBzY2hlbWEgKGRlZmF1bHQ6IGZhbHNlKQotYGBgCi0KLSMjIPCflJAgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnMKLQotPiAqKuKaoO+4jyBJbXBvcnRhbnQ6KiogVGhpcyBzZXJ2ZXIgaXMgZGVzaWduZWQgZm9yIGRldmVsb3BtZW50IGFuZCB0cnVzdGVkIGVudmlyb25tZW50cy4KLQotIyMjIEN1cnJlbnQgTGltaXRhdGlvbnMKLQotLSBCYXNpYyBpbnB1dCBzYW5pdGl6YXRpb24gKGFkdmFuY2VkIGluamVjdGlvbiBwcm90ZWN0aW9uIGluIGRldmVsb3BtZW50KQotLSBObyBjb25uZWN0aW9uIHBvb2xpbmcgb3IgcmF0ZSBsaW1pdGluZwotLSBBbGwgR3JlbWxpbiBzeW50YXggaXMgcGVybWl0dGVkCi0tIE5vIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IG1vbml0b3JpbmcKLQotIyMjIFJlY29tbWVuZGVkIFNlY3VyaXR5IFByYWN0aWNlcwotCi0tIPCflJIgVXNlIGJlaGluZCBhIGZpcmV3YWxsIGluIHByb2R1Y3Rpb24KLS0g8J+UkSBFbmFibGUgc3Ryb25nIGF1dGhlbnRpY2F0aW9uIG9uIEdyZW1saW4gU2VydmVyCi0tIPCfk4ogTW9uaXRvciBxdWVyeSBwYXR0ZXJucyBhbmQgcmVzb3VyY2UgdXNhZ2UKLS0g8J+RkyBDb25zaWRlciB1c2luZyBhIHJlYWQtb25seSBncmFwaCBjb25maWd1cmF0aW9uIGlmIHlvdSBkbyBub3QgZXhwZWN0IG9yIGRlc2lyZSBtdXRhdGlvbnMKLS0g8J+boe+4jyBDb25zaWRlciBhIHF1ZXJ5IHByb3h5IGZvciBhZGRpdGlvbmFsIHNlY3VyaXR5IGNvbnRyb2xzCi0tIPCflIQgS2VlcCBkZXBlbmRlbmNpZXMgdXBkYXRlZAotCi0jIyDwn4aYIFRyb3VibGVzaG9vdGluZwotCi0jIyMgQ29ubmVjdGlvbiBJc3N1ZXMKLQotfCBQcm9ibGVtICAgICAgICAgICAgICAgICB8IFNvbHV0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKLXwgIkNvbm5lY3Rpb24gcmVmdXNlZCIgICAgfCBWZXJpZnkgR3JlbWxpbiBzZXJ2ZXIgaXMgcnVubmluZzogYGN1cmwgaHR0cDovL2xvY2FsaG9zdDo4MTgyL2AgfAotfCAiQXV0aGVudGljYXRpb24gZmFpbGVkIiB8IENoZWNrIGBHUkVNTElOX01DUF9VU0VSTkFNRWAgYW5kIGBHUkVNTElOX01DUF9QQVNTV09SRGAgICAgICAgICB8Ci18ICJJbnZhbGlkIGVuZHBvaW50IiAgICAgIHwgVXNlIGZvcm1hdCBgaG9zdDpwb3J0YCBvciBgaG9zdDpwb3J0L2dgIGZvciB0cmF2ZXJzYWwgc291cmNlICAgIHwKLQotIyMjIENvbW1vbiBFcnJvciBNZXNzYWdlcwotCi0tICoqIlNjaGVtYSBjYWNoZSBmYWlsZWQiKiogLSBTZXJ2ZXIgY291bGRuJ3QgZGlzY292ZXIgZ3JhcGggc3RydWN0dXJlIChlbXB0eSBkYXRhYmFzZT8pCi0tICoqIkludmFsaWQgcXVlcnkgc3ludGF4IioqIC0gR3JlbWxpbiBxdWVyeSBoYXMgc3ludGF4IGVycm9ycwotLSAqKiJUaW1lb3V0IioqIC0gUXVlcnkgdG9vayB0b28gbG9uZywgY2hlY2sgYEdSRU1MSU5fTUNQX0lETEVfVElNRU9VVGAKLQotIyMjIFRlc3RpbmcgWW91ciBTZXR1cAotCi1gYGBiYXNoCi0jIFRlc3QgY29ubmVjdGlvbgotY3VybCAtZiBodHRwOi8vbG9jYWxob3N0OjgxODIvCi0KLSMgQ2hlY2sgc2VydmVyIGxvZ3MKLXRhaWwgLWYgbG9ncy9ncmVtbGluLW1jcC5sb2cKLQotIyBWZXJpZnkgc2NoZW1hIGVuZHBvaW50Ci1jdXJsIGh0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluCi1gYGAKLQotLS0tCi0KLSMjIPCflKcgRGV2ZWxvcGVyIERvY3VtZW50YXRpb24KLQotX1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgYXJlIGZvciBkZXZlbG9wZXJzIHdobyB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gb3IgbW9kaWZ5IHRoZSBzZXJ2ZXIuXwotCi0jIyMgRGV2ZWxvcG1lbnQgU2V0dXAKLQotYGBgYmFzaAotIyBDbG9uZSBhbmQgaW5zdGFsbAotZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvdGlua2VycG9wLmdpdAotY2QgdGlua2VycG9wL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQKLW5wbSBpbnN0YWxsCi0KLSMgRGV2ZWxvcG1lbnQgd2l0aCBob3QgcmVsb2FkCi1ucG0gcnVuIGRldgotCi0jIFJ1biB0ZXN0cwotbnBtIHRlc3QKLW5wbSBydW4gdGVzdDpjb3ZlcmFnZQotbnBtIHJ1biB0ZXN0OndhdGNoCi0KLSMgSW50ZWdyYXRpb24gdGVzdHMgKHJlcXVpcmVzIHJ1bm5pbmcgR3JlbWxpbiBzZXJ2ZXIpCi1HUkVNTElOX01DUF9FTkRQT0lOVD1sb2NhbGhvc3Q6ODE4Mi9nIG5wbSBydW4gdGVzdDppdAotCi0jIEFsbCB0ZXN0cyB0b2dldGhlciAodW5pdCArIGludGVncmF0aW9uKQotbnBtIHRlc3QgJiYgbnBtIHJ1biB0ZXN0Oml0Ci1gYGAKLQotIyMjIEFyY2hpdGVjdHVyZQotCi0tICoqRnVsbCBUeXBlIFNhZmV0eSoqOiBUeXBlU2NyaXB0ICsgRWZmZWN0IGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgcGF0dGVybnMKLS0gKipFZmZlY3QtYmFzZWQgQXJjaGl0ZWN0dXJlKio6IFVzZXMgRWZmZWN0LnRzIGZvciBjb21wb3NhYmxlLCB0eXBlLXNhZmUgb3BlcmF0aW9ucwotLSAqKlNlcnZpY2UtT3JpZW50ZWQgRGVzaWduKio6IERlcGVuZGVuY2llcyBtYW5hZ2VkIHRocm91Z2ggRWZmZWN0J3MgQ29udGV4dC5UYWcgcGF0dGVybnMKLS0gKipMYXllci1CYXNlZCBDb21wb3NpdGlvbioqOiBBcHBsaWNhdGlvbiBidWlsdCB1c2luZyBFZmZlY3QuTGF5ZXIgZm9yIGRlcGVuZGVuY3kgcmVzb2x1dGlvbgotLSAqKkNvbXByZWhlbnNpdmUgVGVzdGluZyoqOiBVbml0ICsgSW50ZWdyYXRpb24gdGVzdHMgd2l0aCBFZmZlY3QgdGVzdGluZyBwYXR0ZXJucwotLSAqKkVycm9yIEhhbmRsaW5nKio6IEVmZmVjdC1iYXNlZCBlcnJvciBtYW5hZ2VtZW50IHdpdGggY3VzdG9tIGVycm9yIHR5cGVzCi0KLSMjIyBQcm9qZWN0IFN0cnVjdHVyZQotCi1gYGAKLXNyYy8KLeKUnOKUgOKUgCBzZXJ2ZXIudHMgICAgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIE1DUCBzZXJ2ZXIgd2l0aCBncmFjZWZ1bCBzdGFydHVwL3NodXRkb3duCi3ilJzilIDilIAgY29uZmlnLnRzICAgICAgICAgICAgICAjIEVmZmVjdC5Db25maWctYmFzZWQgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uCi3ilJzilIDilIAgY29uc3RhbnRzLnRzICAgICAgICAgICAjIEFwcGxpY2F0aW9uIGNvbnN0YW50cyBpbnRlZ3JhdGVkIHdpdGggRWZmZWN0IGNvbmZpZ3VyYXRpb24KLeKUnOKUgOKUgCBncmVtbGluLwot4pSCICAg4pSc4pSA4pSAIHNlcnZpY2UudHMgICAgICAgICAjIEdyZW1saW5TZXJ2aWNlIHVzaW5nIEVmZmVjdC5Db250ZXh0LlRhZyBwYXR0ZXJuCi3ilIIgICDilJzilIDilIAgc2NoZW1hLXNlcnZpY2UudHMgICMgU2NoZW1hU2VydmljZSB3aXRoIEVmZmVjdCBkZXBlbmRlbmN5IGluamVjdGlvbgot4pSCICAg4pSU4pSA4pSAIHR5cGVzLnRzICAgICAgICAgICAjIFR5cGVTY3JpcHQgdHlwZXMgYW5kIHNjaGVtYXMKLeKUnOKUgOKUgCBoYW5kbGVycy8gICAgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIE1DUCByZXF1ZXN0IGhhbmRsZXJzCi3ilIIgICDilJzilIDilIAgdG9vbHMudHMgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIHRvb2wgaGFuZGxlcnMKLeKUgiAgIOKUnOKUgOKUgCByZXNvdXJjZXMudHMgICAgICAgIyBFZmZlY3QtYmFzZWQgcmVzb3VyY2UgaGFuZGxlcnMKLeKUgiAgIOKUlOKUgOKUgCBlZmZlY3QtcnVudGltZS1icmlkZ2UudHMgIyBNYW5hZ2VkUnVudGltZSBjb250YWluZXIgZm9yIEVmZmVjdCBleGVjdXRpb24KLeKUlOKUgOKUgCB1dGlscy8gICAgICAgICAgICAgICAgICMgRWZmZWN0LWJhc2VkIHV0aWxpdHkgbW9kdWxlcwotICAgIOKUnOKUgOKUgCByZXN1bHQtcGFyc2VyLnRzICAgIyBHcmVtbGluIHJlc3VsdCBwYXJzaW5nIHdpdGggbWV0YWRhdGEgZXh0cmFjdGlvbgotICAgIOKUlOKUgOKUgCB0eXBlLWd1YXJkcy50cyAgICAgIyBSdW50aW1lIHR5cGUgY2hlY2tpbmcgZnVuY3Rpb25zCi1gYGAKLQotIyMjIEF2YWlsYWJsZSBTY3JpcHRzCi0KLXwgQ29tbWFuZCAgICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8Ci18IGBucG0gcnVuIGJ1aWxkYCAgICB8IENvbXBpbGUgVHlwZVNjcmlwdCB0byBKYXZhU2NyaXB0ICAgICAgICAgICAgICAgIHwKLXwgYG5wbSBydW4gZGV2YCAgICAgIHwgRGV2ZWxvcG1lbnQgbW9kZSB3aXRoIGhvdCByZWxvYWQgICAgICAgICAgICAgICAgfAotfCBgbnBtIHRlc3RgICAgICAgICAgfCBSdW4gdW5pdCB0ZXN0IHN1aXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IGBucG0gcnVuIGxpbnRgICAgICB8IENvZGUgbGludGluZyB3aXRoIEVTTGludCAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgYG5wbSBydW4gZm9ybWF0YCAgIHwgQ29kZSBmb3JtYXR0aW5nIHdpdGggUHJldHRpZXIgICAgICAgICAgICAgICAgICAgfAotfCBgbnBtIHJ1biB2YWxpZGF0ZWAgfCBSdW4gYWxsIGNoZWNrcyAoZm9ybWF0LCBsaW50LCB0eXBlLWNoZWNrLCB0ZXN0KSB8Ci0KLSMjIyBTbWFydCBTY2hlbWEgRGlzY292ZXJ5Ci0KLVRoZSBzZXJ2ZXIgaW1wbGVtZW50cyBpbnRlbGxpZ2VudCBzY2hlbWEgZGlzY292ZXJ5IHdpdGggZW51bWVyYXRpb24gZGV0ZWN0aW9uOgotCi1gYGBqc29uCi17Ci0gICJuYW1lIjogInN0YXR1cyIsCi0gICJ0eXBlIjogWyJzdHJpbmciXSwKLSAgImNhcmRpbmFsaXR5IjogInNpbmdsZSIsCi0gICJlbnVtIjogWyJDb25maXJtZWQiLCAiUGVuZGluZyIsICJDYW5jZWxsZWQiLCAiV2FpdGxpc3RlZCJdCi19Ci1gYGAKLQotIyMjIENvbnRyaWJ1dGluZwotCi1Gb2xsb3cgdGhlIEFwYWNoZSBUaW5rZXJQb3AgW2NvbnRyaWJ1dGlvbiBndWlkZWxpbmVzXShodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC9ibG9iL21hc3Rlci9DT05UUklCVVRJTkcuYXNjaWlkb2MpCi0KLSMjIyBUZXN0aW5nIFN0cmF0ZWd5Ci0KLS0gKipVbml0IFRlc3RzKiogKGB0ZXN0cy9gKTogSW5kaXZpZHVhbCBjb21wb25lbnQgdGVzdGluZwotICAtIENvbXBvbmVudCBpc29sYXRpb24gd2l0aCBjb21wcmVoZW5zaXZlIG1vY2tpbmcKLSAgLSBUeXBlIHNhZmV0eSB2YWxpZGF0aW9uIHdpdGggWm9kIHNjaGVtYXMKLSAgLSBGYXN0IGV4ZWN1dGlvbiB3aXRob3V0IGV4dGVybmFsIGRlcGVuZGVuY2llcwotLSAqKkludGVncmF0aW9uIFRlc3RzKiogKGB0ZXN0cy9pbnRlZ3JhdGlvbi9gKTogRnVsbCB3b3JrZmxvdyB0ZXN0aW5nCi0gIC0gUmVhbCBHcmVtbGluIHNlcnZlciBjb25uZWN0aW9ucyB2aWEgRG9ja2VyCi0gIC0gRW5kLXRvLWVuZCBNQ1AgcHJvdG9jb2wgdmFsaWRhdGlvbgotICAtIERhdGFiYXNlIG9wZXJhdGlvbnMgYW5kIHF1ZXJ5IGV4ZWN1dGlvbgotLSAqKkNJIFRlc3RpbmcqKjogQXV0b21hdGVkIHRlc3RpbmcgaW4gR2l0SHViIEFjdGlvbnMKLSAgLSBVbml0IHRlc3RzIHJ1biBvbiBldmVyeSBjb21taXQKLSAgLSBJbnRlZ3JhdGlvbiB0ZXN0cyBydW4gd2l0aCBEb2NrZXIgR3JlbWxpbiBzZXJ2ZXIKLSAgLSBCb3RoIHJlcXVpcmVkIGZvciByZWxlYXNlcwotCi0jIyBMaWNlbnNlCi0KLVRoaXMgcHJvamVjdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgMi4wIC0gc2VlIHRoZSBbTElDRU5TRV0oaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCkKLWZpbGUgZm9yIGRldGFpbHMuCi0KLVRoaXMgcHJvamVjdCBpcyBwYXJ0IG9mIHRoZSBbQXBhY2hlIFRpbmtlclBvcF0oaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8pIHByb2plY3QuCi0KLS0tLQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9wYWNrYWdlLWxvY2suanNvbiBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvcGFja2FnZS1sb2NrLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhY2M3ZmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9wYWNrYWdlLWxvY2suanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDkxMjIgKzAsMCBAQAotewotICAibmFtZSI6ICJncmVtbGluLW1jcCIsCi0gICJ2ZXJzaW9uIjogIjMuOC4yLWFscGhhLjEiLAotICAibG9ja2ZpbGVWZXJzaW9uIjogMywKLSAgInJlcXVpcmVzIjogdHJ1ZSwKLSAgInBhY2thZ2VzIjogewotICAgICIiOiB7Ci0gICAgICAibmFtZSI6ICJncmVtbGluLW1jcCIsCi0gICAgICAidmVyc2lvbiI6ICIzLjguMi1hbHBoYS4xIiwKLSAgICAgICJoYXNJbnN0YWxsU2NyaXB0IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBlZmZlY3QvcGxhdGZvcm0iOiAiXjAuOTAuNiIsCi0gICAgICAgICJAZWZmZWN0L3BsYXRmb3JtLW5vZGUiOiAiXjAuOTYuMCIsCi0gICAgICAgICJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrIjogIl4xLjE3LjQiLAotICAgICAgICAiQHR5cGVzL2dyZW1saW4iOiAiXjMuNi43IiwKLSAgICAgICAgImVmZmVjdCI6ICJeMy4xNy45IiwKLSAgICAgICAgImdyZW1saW4iOiAiXjMuNy40IiwKLSAgICAgICAgImdyZW1saW50IjogIn4zLjguMCIsCi0gICAgICAgICJ3aW5zdG9uIjogIl4zLjE3LjAiLAotICAgICAgICAiem9kIjogIl4zLjI1Ljc2IgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJncmVtbGluLW1jcCI6ICJkaXN0L3NlcnZlci5qcyIKLSAgICAgIH0sCi0gICAgICAiZGV2RGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVzbGludC9qcyI6ICJeOS4zNC4wIiwKLSAgICAgICAgIkB0eXBlcy9qZXN0IjogIl4zMC4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiXjI0LjMuMCIsCi0gICAgICAgICJhdWRpdC1jaSI6ICJeNy4xLjAiLAotICAgICAgICAiZXNsaW50IjogIl45LjM0LjAiLAotICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJeMTAuMS44IiwKLSAgICAgICAgImh1c2t5IjogIl45LjEuNyIsCi0gICAgICAgICJqZXN0IjogIl4zMC4wLjUiLAotICAgICAgICAibGludC1zdGFnZWQiOiAiXjE2LjEuNSIsCi0gICAgICAgICJwcmV0dGllciI6ICJeMy42LjIiLAotICAgICAgICAidHMtamVzdCI6ICJeMjkuNC4xIiwKLSAgICAgICAgInRzeCI6ICJeNC4yMC41IiwKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiXjUuOS4yIiwKLSAgICAgICAgInR5cGVzY3JpcHQtZXNsaW50IjogIl44LjQwLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BhbXBwcm9qZWN0L3JlbWFwcGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYW1wcHJvamVjdC9yZW1hcHBpbmcvLS9yZW1hcHBpbmctMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTMwaVp0QVBneitMVElZb2VpdnFZbzg1M2YwMmpCWVNkNXVHbkdwa0ZWME0zeE90OWFONzNlcmtnWUFtWlU0M3g0VmZxY25MeFc5S3BnM1I1TEM0WVl3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjUiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI0IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29kZS1mcmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvZGUtZnJhbWUvLS9jb2RlLWZyYW1lLTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2pRN1psUTBNdjNiNDdoQUJ1VGV2eVR1WU40aStsb0pLR2VWOWZsY0NnSUszN2NDWFJoK0wxYmQzaUJIbHluZXJoUTdCaENrbjJCUGJRVUwrckdxRmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yNy4xIiwKLSAgICAgICAgImpzLXRva2VucyI6ICJeNC4wLjAiLAotICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb21wYXQtZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvbXBhdC1kYXRhLy0vY29tcGF0LWRhdGEtNy4yOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02MFg3cWtnbHZyYXA4bW4xbGgyZWJ4WGRaWXRVY3BkN2dzbXk5a0xhQko0aS9XZFk4UHFUU2R4eUE4cXJhaWtxS1FLNUMxS1JCS1hxem5yVmFweU5hdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvcmUvLS9jb3JlLTcuMjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteURCSFY5a1FOY3IyL3NVcjlqZ2hWeXo5QzNZNUcyelVNMkgybG8rOW1LdjRzRmdiQThzOFo5dDhEMWppVGtHb08vTm9JZktNeUtXcjRzNkNOMjNad1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGFtcHByb2plY3QvcmVtYXBwaW5nIjogIl4yLjIuMCIsCi0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yNy4xIiwKLSAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMjguMyIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMiOiAiXjcuMjcuMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjI4LjMiLAotICAgICAgICAiQGJhYmVsL2hlbHBlcnMiOiAiXjcuMjguMyIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI4LjMiLAotICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjI3LjIiLAotICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjI4LjMiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjIiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAotICAgICAgICAiZ2Vuc3luYyI6ICJeMS4wLjAtYmV0YS4yIiwKLSAgICAgICAgImpzb241IjogIl4yLjIuMyIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vYmFiZWwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb3JlL25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTYuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CUjdWdkRDVkhPK3EyeEJFV3NreFM2REpFMXFSbmI3RHh6VXJvZ2I3MUNXb1NmaWNCeFlzaUFHZCtLbDBtbXEvTXByRzl5QXJSa3lyUXhUTzZYak16QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlci5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2dlbmVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2dlbmVyYXRvci8tL2dlbmVyYXRvci03LjI4LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNsU3B4R2d2bm1aem5tQmtDUm5WUkVQVUZKdjJ3cnY5aUFvRkR2QURKYzB5cG1kT3hkVXRjTGVCZ0JKNnpFMFBNZVRLbnhlUXp5azB4VEJxNEVwN3p3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMjguMyIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjguMiIsCi0gICAgICAgICJAanJpZGdld2VsbC9nZW4tbWFwcGluZyI6ICJeMC4zLjEyIiwKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4yOCIsCi0gICAgICAgICJqc2VzYyI6ICJeMy4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLy0vaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMtNy4yNy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yKzF0aEdVVVdXakxUWVRIWldLMW44WWdhMGlqQnoxWEFoVVhjS3k4MXJkNWc2eWg3aEdxTXA0NXY3Y2FkU2JFSGM5RzNPVHY0NVN5bmVSTjNwczREUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMjcuMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMjcuMSIsCi0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMjQuMCIsCi0gICAgICAgICJscnUtY2FjaGUiOiAiXjUuMS4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cy9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNi4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci02LjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlI3VnZEQ1ZITytxMnhCRVdza3hTNkRKRTFxUm5iN0R4elVyb2diNzFDV29TZmljQnhZc2lBR2QrS2wwbW1xL01wckc5eUFyUmt5clF4VE82WGpNekE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiYmluIjogewotICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1nbG9iYWxzLy0vaGVscGVyLWdsb2JhbHMtNy4yOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rVzZjSVNrWEZhMWpYc0RFZFlBOEhlZXZRVC9GVUxoeHpSOTlweHBobHRaY1ZhdWdwczUzVEhDZWlXQThTZ3V4eHBTcDNnS1BpdVlmU1dvcGtMUTRodz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzLy0vaGVscGVyLW1vZHVsZS1pbXBvcnRzLTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGdTRldVUE5YTm9wcXRJUFF2bEQ1V2dYWUk1R1kya1AyY0N2b1Q4a2N6amJmY2Z1SWxqVGJjV3J1bEQxQ0lQSVgyZ3Qxd2doYkR5MDh5RTFwKy9yM3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjI3LjEiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI3LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI4LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMvLS9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMtNy4yOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1neXRYVWJzOGsyc1hTOVBuUXB0ejVvMFFucExMNTFTd0FTSU9SWTZYYUJLRjg4bnNPVDBadzlzekxxbFNHUURQLzRUbGpCQUQ1eTk4cDJVMWZxa2Rzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS1pbXBvcnRzIjogIl43LjI3LjEiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yNy4xIiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4yOC4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMvLS9oZWxwZXItcGx1Z2luLXV0aWxzLTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMWduMVVwNVlYa2EzWVlBSEdLcGJpZGVRNVlqZjF0RGE5cVljZ3lzeitjTkNYdWt5TGw2RGpQWGhEM1ZSd1NiOGMwSjl0QTRiMitySEVadGM2UjB0bHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXN0cmluZy1wYXJzZXIvLS9oZWxwZXItc3RyaW5nLXBhcnNlci03LjI3LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFNbFN4S2JwUmxBcmlkREV4azkyblNvYnlEZHBQaWpVcTJEVzZvRG5VcWQwaU9HeG1RanlxaE1JaWhJOSt6djRMUHlaZFJqZTJjYXZXUGJDYldtM2VBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIvLS9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXItNy4yNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EMmhQOWVBK1NxeDFrQlpnenhaaDB5MXRyYnVVK0pvRGtpRXdxaFEzNm5vZFlxSnd5RUloUFNkTU5kN2xPbS80aW83Mmx1VFBXSDIwWWRhMHhPdVVvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi8tL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uLTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXZqSm93OUZ4YmhGRktEU3VGblZDZTJXeFhrMXpXYzIyZkZlUFZORWFXSkV1OElyWlZsZGE2TjB1SHd6WnJVTTFpbDdOQzlNbHA0TWFKWWJZZDlKU2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI4LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXJzLy0vaGVscGVycy03LjI4LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBUTnR2VVFpaHNBc0RITU9QNXBmb2JQOEM2Q000SldYbVA4RHJFSXQ0NmMzcjJiZjg3VWExem9xZXZzTW85Zyt0V0R3Z1dyRlA1RUl4dUJ4NVJ1ZEF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4yNy4yIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yOC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiNy4yOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGFyc2VyLy0vcGFyc2VyLTcuMjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNytFeTFtQWdZcUZBeDJoMFJ1b3hjUVQ1K01sRzNHVFYwVFFyZ3I3L1psaUtzbS9NTkR4VlZ1dGxXYXppTXE3d0pOQXo4TVRxejU1WExwV3Z2YTZTdEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjIiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInBhcnNlciI6ICJiaW4vYmFiZWwtcGFyc2VyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMvLS9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMtNy44LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXR5Y21aeGtHZlpheGhNUmJYbFBYdVZGcGRXbFhwaXIyVzRBTWhTSmdSS3prL2VEbElYT2hiMkxIV29McERGN1RFSHlsVjV6Tmh5a1g2S0FnSEptVE53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1iaWdpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50Ly0vcGx1Z2luLXN5bnRheC1iaWdpbnQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXduVG5GbEcrWXhRbTN2RHhwR0U1N1BqMHNyUlU0c0hFL21Ea3QxcXYyWUpKU2VVQWVjMm1hNFdMVW5VUGVLanlyZm50VndlL042ZENYcFUrekwzTnBnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUzcmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhUUVpZQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xMi4xMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1zdGF0aWMtYmxvY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXN0YXRpYy1ibG9jay8tL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3RhdGljLWJsb2NrLTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYitZeVBtcjZsZHlObk02c3FZZU1XRStiZ0pjSnBPNnlTNFFEN3lteGdIMzRHQlBORE0vVEhCaDhpdW55dktJWnp0aXdMSDRDSlowUnhUazllbWdwanc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtYXR0cmlidXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWF0dHJpYnV0ZXMvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1hdHRyaWJ1dGVzLTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0ZUMEZyS0hnRjUzZjR2T3NaR2kySGgzSTM1UGZTbVZzNElCRkxGajRkbmFmUCtoSVdETGczVnlLbVVIZkxvTEhseXhZNEM3REd0bUh1SmduK0lHd3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjcuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEvLS9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXFmbStYRHgwK1ByaDNWU2VFUUNQVTgxeUMrSldaMnBEUEZTUzRaZHBmWmhwNE1rRk1hREMxVXFzZW92RUt3U1VwbklMNyt2SytDbHA3YmZoMGlEN2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzLy0vcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxZNmtkR3BXSHZqb2Uydms0V3JBYXBFdUJSNjlFTXhabCtSb0dSaHJGR05ZVks4bU9QQVc4VmZiVC9aZ3JGYlhsRE5paWF4UW5BdGdWQ1o2anYzMEVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI3LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWpzeC8tL3BsdWdpbi1zeW50YXgtanN4LTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteThZVE5JZUtveWhHZDlPMEppeXp5eXFrOGdkam51bUdUUVBzejB4T1pPUTJSbWtWSmVaMXZtbWZJdkZFS3F1Y0JHNmF4SkdCWkRFLzdpSTVzdVVJL3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjcuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZDh3YVNobHBGRGluUTVNdHZHVTl4REFPektINDcrRkZvbmV5MmJhRklvTXI5NTJoS09McDFIUjdWc3pvWnZPc1YvNCtSUnN6Tlk3RDE3YmEwdGUwaWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLy0vcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3ItNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFTZmY0elBJSTF1MlFEN3krRjhvRHN6MTlldzRJR0VKZzlTVlcrYnF3cHd0ZkZsZWlRRE1kekEvUitVbFdEemZuSEZDeHhsZUZUMFBNSXJSMzZYTE5RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IvLS9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOUg2WWRma2NLL3VPblkvSzcvYUEyeHB6YUFna1FuMzd5eldVTVJLN09hUE9xT3BHUzErbjBINWh4VDlBVXc5RXNTalBXOFNWeU1Kd1lSdFdzM1gzdWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkLy0vcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhvcU1pakdaYjl5M3kyWHNrTitQMXdVR2lWd1daNUptb0RSd3g1KzNHbUVwbE55Vk0yczJEZzhJTEZRbThyV000OG9yR3k1WXBJNUJsOFUxeTd5ZGxBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmcvLS9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmctNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZWUEQwUGMxbHBUcXcwYUtvZVJUTWlCK2tXaEFvVDI0UEEra3NXU0JyRnRsNVNJUlZwWmx3TjNOTlBRamVoQTJFLzkxRlYzUmpMV29WVGdsV2NTVjNRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZy8tL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmctNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtvSzlFckgxTUJsQ1B4VjBWQU5rWFcyL2R3NHZsYkdEckZnejhibVVzQkdZa0ZSY2JSd01oNmNJSnViZFBya3hSd3VHZHRDazB2L3dQVEtiUWdCamtnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtcHJpdmF0ZS1wcm9wZXJ0eS1pbi1vYmplY3QvLS9wbHVnaW4tc3ludGF4LXByaXZhdGUtcHJvcGVydHktaW4tb2JqZWN0LTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMHdWbnA5ZHhKNzJaVUpEVjI3WmZiU2o2aUhMb3l0WVptaDNyRmN4Tm52c0pGM2t0a3pMRFpQeS9tQTE3SEdzYVFUMy9EUXNXWVgxZjFRR1drQ29WVWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdC8tL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3YWl0LTcuMTQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHgrK3VwTHY1VTFyZ1lmd2UxeEJRVWhSbVU0MU5FdnBVdnJwOGprclNDZHZHU25NNS9xZFJNdHlsSjZQRzVPRmtCYUhrYlRBS1RuZDMvWXlFU1JIRnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTQuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0IjogewotICAgICAgInZlcnNpb24iOiAiNy4yNy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0Ly0vcGx1Z2luLXN5bnRheC10eXBlc2NyaXB0LTcuMjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGZZQ0JNeHZlSHJSTW5BV2wxWmxQWE9aanprTjgyVEhGdkxoUWhGWEZ0ODFaNUhuTitFdFVrWmh2L3pjS3BtVDNmem1XWkIweXdpQnJiQzN2b2did1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMjcuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdGVtcGxhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI3LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90ZW1wbGF0ZS8tL3RlbXBsYXRlLTcuMjcuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTFBEWjg1YUVKeVlTZDE4L0Rrak5oNC95MW50a0U1S3dVSFdUaXFnUnhydXVaTDJGMXl1SGxpZ1ZITHZjSFkydk1IWHR0S0ZwSm42THdmSTdjdzdPRHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMjcuMSIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI3LjIiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI3LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC90cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RyYXZlcnNlLy0vdHJhdmVyc2UtNy4yOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03dzRrWllIbmVMM0E2TlAybnh6SHZUM0hDWjdwdURaWmpGTXFEcEJQRUN1Yjc5c1R0U081Q0dYRGtLclRRcThrc0F3ZkQvWEkyTVJGWDIzbmpkRGFJUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4yNy4xIiwKLSAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMjguMyIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWdsb2JhbHMiOiAiXjcuMjguMCIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjI4LjMiLAotICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjI3LjIiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjIiLAotICAgICAgICAiZGVidWciOiAiXjQuMy4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjI4LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90eXBlcy8tL3R5cGVzLTcuMjguMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcnV2N0FlNEo1ZFVZVUxtZVh3MWdtYjdyWVJ6NTdPV0NQTTU3cEhvam5McS8zWjFDSzJsTlNMVENWanhWazFGL1RaSHdPWlpyT1dpMHVyOTVCYkx4TlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1zdHJpbmctcGFyc2VyIjogIl43LjI3LjEiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4yNy4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmNvZS92OC1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmNvZS92OC1jb3ZlcmFnZS8tL3Y4LWNvdmVyYWdlLTAuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0waFlROFNCNERiNXp2WkI0YXhkTUhHd0VhUWprWnpGalFpTjlMVll2SUZCMm5TVUhXOXRZcHhXcmlQcldEQVNJeGlhWGF4ODNSRWNMeHVTZG5HUFp0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AY29sb3JzL2NvbG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY29sb3JzL2NvbG9ycy8tL2NvbG9ycy0xLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSXIrQU9pYnF6cklzTDZhanQzUnozTHNrQjdPaU1WSHFsdFptc3BiVy9USnVUVnV5T01pclZxQWtqZlk2SklTaUxIZ3lOcWljQUM4QXlISEd6TmQvZEE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xLjkwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZGFiaC9kaWFnbm9zdGljcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZGFiaC9kaWFnbm9zdGljcy8tL2RpYWdub3N0aWNzLTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ocmxRT0lpN2hBZnpzTXFsR1NGeVZ1Y3J4MzhPK2o2d2lHT2YvL0gyZWN2SUVxWU40QURCU1MyaUxNaDVVRnlEdW5DTm5pVUlQay9xM3JpRnY0NXhSQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3JzcGFjZSI6ICIxLjEueCIsCi0gICAgICAgICJlbmFibGVkIjogIjIuMC54IiwKLSAgICAgICAgImt1bGVyIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVmZmVjdC9jbHVzdGVyIjogewotICAgICAgInZlcnNpb24iOiAiMC40OC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L2NsdXN0ZXIvLS9jbHVzdGVyLTAuNDguMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaXh5cjE1MmN6Qk1ha2lFc1hpNnpmNEY2RFNrYTQyTGJ0b0hmN1djRnNmTFREd1laaWVVRVZidzRndklGZkFHZWRmUTBvTFk0K3VBcmRKbGtKNGdPR0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZWZmZWN0L3BsYXRmb3JtIjogIl4wLjkwLjUiLAotICAgICAgICAiQGVmZmVjdC9ycGMiOiAiXjAuNjkuMSIsCi0gICAgICAgICJAZWZmZWN0L3NxbCI6ICJeMC40NC4yIiwKLSAgICAgICAgIkBlZmZlY3Qvd29ya2Zsb3ciOiAiXjAuOS4yIiwKLSAgICAgICAgImVmZmVjdCI6ICJeMy4xNy44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZWZmZWN0L2V4cGVyaW1lbnRhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNTQuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVmZmVjdC9leHBlcmltZW50YWwvLS9leHBlcmltZW50YWwtMC41NC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcUhNdkNRbXJaVDZrVVZvVUMwbHF5bm80WWFkK2o5aEJHQ2RValc4NHprTHdBcTA4dFBxeVNpWlVLUndZK0FlNUIyQWI4cklTWUpIN25RdmN0OURNUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAicGVlciI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidXVpZCI6ICJeMTEuMC4zIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC4yIiwKLSAgICAgICAgImVmZmVjdCI6ICJeMy4xNy43IiwKLSAgICAgICAgImlvcmVkaXMiOiAiXjUiLAotICAgICAgICAibG1kYiI6ICJeMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJpb3JlZGlzIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImxtZGIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BlZmZlY3QvcGxhdGZvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjkwLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlZmZlY3QvcGxhdGZvcm0vLS9wbGF0Zm9ybS0wLjkwLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFUN2FMSlIxK3JZclNMZHc1YWYyVVp6d25Xb0F5OFdta1R4VFVEM3BGWTZ2akZtaCs4MTM3Umhid0tpV2pJSkJUbTJEVnlQWGwxZHgxa0dnMjh4dDZRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmaW5kLW15LXdheS10cyI6ICJeMC4xLjYiLAotICAgICAgICAibXNncGFja3IiOiAiXjEuMTEuNCIsCi0gICAgICAgICJtdWx0aXBhc3RhIjogIl4wLjIuNyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVmZmVjdCI6ICJeMy4xNy44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZWZmZWN0L3BsYXRmb3JtLW5vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjk2LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlZmZlY3QvcGxhdGZvcm0tbm9kZS8tL3BsYXRmb3JtLW5vZGUtMC45Ni4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05djZVSm5TaVFHcTkwZ1lQZGFrY0xqa3lYOTUxWk9ETHd0a1pnWGpkS3dqdmNweDVDMUZlcStMRHNTaWZGM2FPZzFOZ2Ftd0FHWURLaTAwSlF4SzZDZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybS1ub2RlLXNoYXJlZCI6ICJeMC40OS4wIiwKLSAgICAgICAgIm1pbWUiOiAiXjMuMC4wIiwKLSAgICAgICAgInVuZGljaSI6ICJeNy4xMC4wIiwKLSAgICAgICAgIndzIjogIl44LjE4LjIiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZWZmZWN0L2NsdXN0ZXIiOiAiXjAuNDguMCIsCi0gICAgICAgICJAZWZmZWN0L3BsYXRmb3JtIjogIl4wLjkwLjIiLAotICAgICAgICAiQGVmZmVjdC9ycGMiOiAiXjAuNjkuMCIsCi0gICAgICAgICJAZWZmZWN0L3NxbCI6ICJeMC40NC4xIiwKLSAgICAgICAgImVmZmVjdCI6ICJeMy4xNy43IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZWZmZWN0L3BsYXRmb3JtLW5vZGUtc2hhcmVkIjogewotICAgICAgInZlcnNpb24iOiAiMC40OS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3BsYXRmb3JtLW5vZGUtc2hhcmVkLy0vcGxhdGZvcm0tbm9kZS1zaGFyZWQtMC40OS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02dWZQUVV0b2ZZVytqc0FEUkk0UGE0c01ZK2tjMGRjb1hXcEgxb3pIL2JENkk1YzJhdTFuL3dEZmZuTG9YTWVIR1lTcHQvNTREZDdXT3FxTmNPZFhsZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHBhcmNlbC93YXRjaGVyIjogIl4yLjUuMSIsCi0gICAgICAgICJtdWx0aXBhc3RhIjogIl4wLjIuNyIsCi0gICAgICAgICJ3cyI6ICJeOC4xOC4yIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVmZmVjdC9jbHVzdGVyIjogIl4wLjQ4LjAiLAotICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC4yIiwKLSAgICAgICAgIkBlZmZlY3QvcnBjIjogIl4wLjY5LjAiLAotICAgICAgICAiQGVmZmVjdC9zcWwiOiAiXjAuNDQuMSIsCi0gICAgICAgICJlZmZlY3QiOiAiXjMuMTcuNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVmZmVjdC9ycGMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjY5LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BlZmZlY3QvcnBjLy0vcnBjLTAuNjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItekN3VUJoclJGYUtHRWJIQVdWL0RJWFM4WEVtUlZDVm8rYmhVaVZjbWgwaHVUSU9kT2R5cnp0a3NWQ01xZ3MvQjJReTJCVUVyRU9JWEQ5TUwraHFQL2c9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZWZmZWN0L3BsYXRmb3JtIjogIl4wLjkwLjUiLAotICAgICAgICAiZWZmZWN0IjogIl4zLjE3LjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BlZmZlY3Qvc3FsIjogewotICAgICAgInZlcnNpb24iOiAiMC40NC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3NxbC8tL3NxbC0wLjQ0LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURFY3ZyaUh2ajg4enU3a2VydUg5TmNIUXphbTd5UXpMTkxKTzZ1Y0RYTUNBd1d6WVpTSk9zbWt4QnpuUkZ2OHlsRnRjY1NjbEtIMmZ1ait3UktQakNRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ1dWlkIjogIl4xMS4wLjMiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZWZmZWN0L2V4cGVyaW1lbnRhbCI6ICJeMC41NC42IiwKLSAgICAgICAgIkBlZmZlY3QvcGxhdGZvcm0iOiAiXjAuOTAuNCIsCi0gICAgICAgICJlZmZlY3QiOiAiXjMuMTcuNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVmZmVjdC93b3JrZmxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZWZmZWN0L3dvcmtmbG93Ly0vd29ya2Zsb3ctMC45LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJRdzJ3VkNDZGhDMEZnU1FYTDYyc2VmYThUVjNzVlAwRUNSWlM5Q0duVXRpQ1ppVmtSREVlUWxYRXJaa0tWdVZodEFxSkxmbmdxdHA4VWtBckxQWWl3PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJwZWVyIjogdHJ1ZSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVmZmVjdC9wbGF0Zm9ybSI6ICJeMC45MC41IiwKLSAgICAgICAgIkBlZmZlY3QvcnBjIjogIl4wLjY5LjEiLAotICAgICAgICAiZWZmZWN0IjogIl4zLjE3LjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BlbW5hcGkvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZW1uYXBpL2NvcmUvLS9jb3JlLTEuNC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Yc0x3MWRFT3BrU1gvV3VjZHFVaFBXUDdoRHhTdlppWStmc1VDMTRoK0Z0UTJJZm5pNHpuYkJ0OHB1blJYK1VqMkpHL3VEYjhuRUhWS3ZyVmx2ZFo1UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVtbmFwaS93YXNpLXRocmVhZHMiOiAiMS4wLjQiLAotICAgICAgICAidHNsaWIiOiAiXjIuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZW1uYXBpL3J1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVtbmFwaS9ydW50aW1lLy0vcnVudGltZS0xLjQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItKytMQXBPdFkwcEVFejF6cmQ5dnkxL3pYVmFWSkovRWJBRjN1MGZYSXpQSkVEdG5JVHNCR2JiSzBFa003MmFtaGwvUjViKzV4eDBZL1FoY1ZPcHV1bGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRzbGliIjogIl4yLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVtbmFwaS93YXNpLXRocmVhZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVtbmFwaS93YXNpLXRocmVhZHMvLS93YXNpLXRocmVhZHMtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBKUitiT21NT1BIOEF0Y1RHQXlZTml1SjMvRmNvajJYTi9nQkVXekRJS2gyNTRYTyttTTlYb1hIazVHTkVob2R4ZU16bmJnN0JsUm9qVmJLTitnQzZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0c2xpYiI6ICJeMi40LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2FpeC1wcGM2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjUuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvYWl4LXBwYzY0Ly0vYWl4LXBwYzY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT2FHdEw3M0pjazZwQktqTkllMjRCbkZFNmFnR2wrNkt4RHRUZkhoeTFIbWh0aGZLb3VFY09ocXBTTDY0SzQvMFdDdGJLRkxPZHpELzQ0Y0o0azlvcEE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAicHBjNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImFpeCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvYW5kcm9pZC1hcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQtYXJtLy0vYW5kcm9pZC1hcm0tMC4yNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01V05JMURhTXR4UTd0N0I2eGE1NzJYTVhwSEFhSS85SG5oazhsY3hGNHpWTjR4c3RVZ1RsdnVHRG9yQmd1S0VuWk83MHF3RWNMcGZpZk1Mb3hpUHFIUT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm0iCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImFuZHJvaWQiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2FuZHJvaWQtYXJtNjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQtYXJtNjQvLS9hbmRyb2lkLWFybTY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSURyZGRTbXBTdjUxZnRXc2xKTXZsM1EyWlQ5OGZVU0wyL3JsVVh1VnFSWEhDczVFVUYxL2YramJqRjUrTkc5VWZmVURNQ2lUeWg4aWVjN3U4UmxUTGc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImFuZHJvaWQiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2FuZHJvaWQteDY0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9hbmRyb2lkLXg2NC8tL2FuZHJvaWQteDY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSTg1M2lNWjFoV1pkTmxsaFZaS20zNGY0d0VyZDRsTXllVjdCTHpFRXhHRUlaWXNPenFEV0RmK3kwODJpellVRThndEpuWUhkZURwTi82dFVkd3ZmaXc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAieDY0IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJhbmRyb2lkIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9kYXJ3aW4tYXJtNjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2Rhcndpbi1hcm02NC8tL2Rhcndpbi1hcm02NC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhJcElETUFqT0VMaS85UEIzMHZFYlZNczNHVjF2Mnpra1BudXlSUlVSYmhxanl6SUlOd2orbmJRQVRoNEg5R3hVZ0gxa0ZzRXlRTXh3aUxGS1VTNlJnPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImFybTY0IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJkYXJ3aW4iCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2Rhcndpbi14NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2Rhcndpbi14NjQvLS9kYXJ3aW4teDY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItamhIZkJ6allUQTFJUXU4VnlyakNYNEFwSkRuSCtleitJWVZFb0pIZXFKbTlWaEc5RGgyQllhSnJpdGtZSzN2TWFYcmY3T2dyLzBNUTgvTWVJZWZzUFE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAieDY0IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJkYXJ3aW4iCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2ZyZWVic2QtYXJtNjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2ZyZWVic2QtYXJtNjQvLS9mcmVlYnNkLWFybTY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItejkzRG1iblk2Zlg5K0tkRDRVZS9INnNZcytiaEZRSk5DUFpzaTRYV0pvWWJsVXFUMDZNUVVkQkNwY1NmdWlONzJBYnFlQkZ1NUxWUVRqZlhERTJBNlE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImZyZWVic2QiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2ZyZWVic2QteDY0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9mcmVlYnNkLXg2NC8tL2ZyZWVic2QteDY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbXJLWDZIL3ZPeW81djcxWWZYV0p4TFZ4Z3kxa3l0MU1RYUQ4d1pKZ0pmRzRncTREcFFHcGdUQjc0ZTV5QmVRZHlNVGJneHAwWXROajdOdUhOMFBvWmc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAieDY0IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJmcmVlYnNkIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1hcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybS8tL2xpbnV4LWFybS0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhCVTJYdjc4U01nYXlkQm1kb3IzOGxnOFlEbkZLU0FSZzFRNkFUMC95MmV6VUFLaVp2YzIxMVJERkhsRVpSRk5SVmhjTWFtaVRvbzdiRHgzVkVPWVF3PT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImFybSIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LWFybTY0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1hcm02NC8tL2xpbnV4LWFybTY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmxCN2JJY0xUM0cyNnVyaDVEbXNlN2ZpTG1MWG5SbG9wdzRzOERhbGdaOGVmNzlKajRhVWNZYms5MGc4aUNhMjQ2N0hYOFNBSWlkYkw3Z3NxWEhkUnc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1pYTMyIjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1pYTMyLy0vbGludXgtaWEzMi0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWU3UzNNT0pQWkdwMlFXNkFLNitMeTgxckM3b09TZXJRK1A4TDB0YTRGaFZpKy9qL3YyeVp6eDVDcXFEYVdqdFBGZll6MjFWaTFTMGF1SHJhcDNNYTNBPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImlhMzIiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1sb29uZzY0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1sb29uZzY0Ly0vbGludXgtbG9vbmc2NC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNiZTEwQm5uMG9VQUIyQWFsWXp0dkdjSytvNllGRkEvOTgyOVBoT0NVUzl2a0pFbFhHZHBoejBBM0RiTWRQOGdtS2txUG1QY01KbUpPckkzVllCMUpRPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImxvb25nNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC1taXBzNjRlbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjUuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtbWlwczY0ZWwvLS9saW51eC1taXBzNjRlbC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVljTTVicjBtVnladzJqY1FlTElraFd0S1BlVmZBZXJFUzVQdk96YUR4VnRJeVoyTlVCWktOTGpDNXozL2ZVbERnVDZ3ODlWc3hQMnF6TmlwT2FhRHlBPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIm1pcHM2NGVsIgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbGludXgtcHBjNjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXBwYzY0Ly0vbGludXgtcHBjNjQtMC4yNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rKzBIUXZhc2RvMjBKeXR5RHBGdlF0TnJFc0FnTkcyQ1kxQ0xNd0dYZkZUS0dCR1FUM2JPZUxTWUUybDFmWWR2TUw1S1V1d245WjhMMUVXZTJ0enMxdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJwcGM2NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQvLS9saW51eC1yaXNjdjY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdU5JQmEyNzlZM2ZralYrMmNVangzNnhreDdlU2piOEl2bkwwMWVYVUtYZXovQ0JITlJ3NWVrQ0dNUE0wQmNtcUJ4QmNkZ1VXdVVYbVZXd200Q0g5a2c9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAicmlzY3Y2NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL2xpbnV4LXMzOTB4IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1zMzkweC8tL2xpbnV4LXMzOTB4LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTWZpcGh2cDNNakMvbGN0Yis3RDI4N1h3MURHenFKUGIvSjJhSEhjSHhmbFVvKzh0bU4vNmQ0azZJMnlGUjdCVm81L2c3eDJNb25xNCtZZXcwRUhSSUE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiczM5MHgiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9saW51eC14NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXg2NC8tL2xpbnV4LXg2NC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlTd0J5eHpSZTQ4WVZrbXBiZ294VnpuNzZCWGpsWUZYQzdOdkxZcStiK2tEanl5azMwSjBKWTQ3REluOHoxTU8zSzBvU2w5ZlpvUm1aUFFJNEhrbHpnPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL25ldGJzZC1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjUuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbmV0YnNkLWFybTY0Ly0vbmV0YnNkLWFybTY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOWpOSmw2RnFhVUcrQ09kUU1qU0NHVzRRaU1ISDg4eFdidlora1JWYmxac1dya1hsQUJ1R2RGSjFFOUw3SEsrVDBZcWQ0YWtLTmEvbE8wK2pEeFFENFE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIm5ldGJzZCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvbmV0YnNkLXg2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjUuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbmV0YnNkLXg2NC8tL25ldGJzZC14NjQtMC4yNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1STExka2ZsbXFSRzhLYW5QR09VN1JwZzgyOVpIdThuRnk1UHFkaTlVMDFWWXRHOVkwek9HNlZyMno0L1MrLzN6SXlPeGlLNmNDZVlOV09GUjlRUDg3Zz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIm5ldGJzZCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvb3BlbmJzZC1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjUuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC1hcm02NC8tL29wZW5ic2QtYXJtNjQtMC4yNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZYUZCbFBHZURhc2Z0NUlJTStDUUFoSkFxUzNTdDNuSnpERWdzZ0ZpeGNmWmV5R1BDZDZlSkJXemtlNXBpWnVaN0N0TDY1NmVPU1lLazRMczJDMEZSUT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm02NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAib3BlbmJzZCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzYnVpbGQvb3BlbmJzZC14NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL29wZW5ic2QteDY0Ly0vb3BlbmJzZC14NjQtMC4yNS45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xTWtnVEN1dk1HV3VxVnRBdmtwa1hGbXRMOFhoV3krajRqYVNPMnd4Zkp0aWxWQ2kwWkUzN2I4dU9kTUl0SUh6NEk2ejFiV1d0RVg0Q0p3Y0tZTGN1QT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIm9wZW5ic2QiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL29wZW5oYXJtb255LWFybTY0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9vcGVuaGFybW9ueS1hcm02NC8tL29wZW5oYXJtb255LWFybTY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNFhkMHhOaU1WWEtoNkZhN0hFSlFicnBQM20zRERuNDNqS3hNanhMTFJqV25Sc2Z4ak9SWUpsWFBPNEpOY1h0T3lmYWpYb3JSS1k5TmtPcFRIcHRFcmc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIm9wZW5oYXJtb255IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC9zdW5vcy14NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3N1bm9zLXg2NC8tL3N1bm9zLXg2NC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdqSDRzNmh6bzAwbk5lemhwM3dGSUFmbUdaOFU3S3RySk5sRk1SS3hpSTlteEVLMXNjT01BYWE5aTRjclV0dSt0QnIrMElONkpDdUFjU0JKWmZucGh3PT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAic3Vub3MiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2J1aWxkL3dpbjMyLWFybTY0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC93aW4zMi1hcm02NC8tL3dpbjMyLWFybTY0LTAuMjUuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbUdGclZKSG1aaVJxbVA4eEZPYzZiODQvN3hhNXk1WXZSMXg4ZGp6WHBKQlN2L1VzTks2YXFlYys2SkRqQ29uVGd2dlFlZmRHaEZEQXMyRExBZHM2Z1E9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIndpbjMyIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC93aW4zMi1pYTMyIjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC93aW4zMi1pYTMyLy0vd2luMzItaWEzMi0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWIzM2dMVlUyazExblZ4MU9oWDNDOFFRUDZVSFFLNFp0TjU2b0ZXdlZYdnoyVmtEb2U2ZmJHOFRPZ0hGeEV2cWVxb2htUm5JSGU1QTErSEFEazRPUXd3PT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImlhMzIiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIndpbjMyIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNidWlsZC93aW4zMi14NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjI1LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLXg2NC8tL3dpbjMyLXg2NC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBQT2wxbWk2bHBMTlF4bkdveUFmc2NoQW9kUkZZWEorOWZzNldIWHo3Q1NXS2JPcWlNWnN1YkMrQlFzVkt1dWwrM3ZLTHV3VEhzUzJjMnk5RW9Ld3hRPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAid2luMzIiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMvLS9lc2xpbnQtdXRpbHMtNC43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWR5eWJiM0FjYWpDN3VoYTZDdmhkVlJKcWFLeW43dzJZS3FLeUFOMzdOS1lnWlQzNncraVJiMER5bW1jNXFFSjU0OWMvUzMxY01NU0ZkNzVidGVDcEN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjMuNC4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjYuMC4wIHx8IF43LjAuMCB8fCA+PTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMvbm9kZV9tb2R1bGVzL2VzbGludC12aXNpdG9yLWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXZpc2l0b3Ita2V5cy8tL2VzbGludC12aXNpdG9yLWtleXMtMy40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdwYytMWGVpeWlpc3hQbEVrVXpVNnN2eVMxZnJJTzNNZ3hqMWZkeTdQbThZZ3pndWF4Mk4zRmEvRC9hZzFXcWJPcHJkSSt1WTZ3TVVsOC9hMkcraWFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTIuMjIuMCB8fCBeMTQuMTcuMCB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEyLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAvLS9yZWdleHBwLTQuMTIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ0NaQ0RKdWR1QjlPVWtGa1kySWdwcE5aTWkybEJRZ0QycXp3WGtFaWExNmNnZTJwaWpZL2FYaTk2Q0pNcXVETW4zbkpkbFBWMUE1S3JKRVh3ZkxOelE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjAuMCB8fCBeMTQuMC4wIHx8ID49MTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L2NvbmZpZy1hcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9jb25maWctYXJyYXkvLS9jb25maWctYXJyYXktMC4yMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FTklkYzRpTHUwZDkzSGVZaXJ2S21yenNoem9mUHc2VmtaUktRR2U5TnY0NlpuV1V6Y0YxeFYwMWRjdkVnLzF3WFVSNjFPbW1sU2Z5ZXlPN0V2akx4UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVzbGludC9vYmplY3Qtc2NoZW1hIjogIl4yLjEuNiIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjEiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9jb25maWctaGVscGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L2NvbmZpZy1oZWxwZXJzLy0vY29uZmlnLWhlbHBlcnMtMC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhSOTNrOVdockRZcFhIT1JYcHhWTDVvSGozRXJhN3dvNmsvV2Q4L0lzUU5uWlVUemtHUzI5bHluM25BVDA1djZsdFV1VEZWQ0NZREVHZnkyT3Ivc1BBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE1LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2xpbnQvY29yZS8tL2NvcmUtMC4xNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03OE1kMy9ScnhoODNnQ3hvVWMwRWljaXVPSHNJSVR6THk1M20zZDlVeWlXOHk5RGoyRDI5RmVFVHF5S0ErQlJLNzZ0blRwNlJYV2IzcENheThPeW9tZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL2pzb24tc2NoZW1hIjogIl43LjAuMTUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvZXNsaW50cmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9lc2xpbnRyYy8tL2VzbGludHJjLTMuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ndEYxODZDWGhJbDFwNHBKTkdadzhZYzZSbHNob2VQUnZFMFg5MW9QR2Izdlo4cE0zcU9TOVc5TkdQYXQ5THppYUJWN1hySldHeWxOUVhrR2NuTTNJUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhanYiOiAiXjYuMTIuNCIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjIiLAotICAgICAgICAiZXNwcmVlIjogIl4xMC4wLjEiLAotICAgICAgICAiZ2xvYmFscyI6ICJeMTQuMC4wIiwKLSAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAotICAgICAgICAiaW1wb3J0LWZyZXNoIjogIl4zLjIuMSIsCi0gICAgICAgICJqcy15YW1sIjogIl40LjEuMCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMS4yIiwKLSAgICAgICAgInN0cmlwLWpzb24tY29tbWVudHMiOiAiXjMuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGVzbGludC9qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjkuMzQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9qcy8tL2pzLTkuMzQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRW95dnFRbkJOc1YxQ1dhRUo1NTlyeFhMNGM4VjkyZ3hpcmJhd1NtVlVPV1hsc1J4eFFYbDZMbUNwZFVibGd4Z1NrRElxS25oemJhMlNqUlRJL0E1Unc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2VzbGludC5vcmcvZG9uYXRlIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AZXNsaW50L29iamVjdC1zY2hlbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzbGludC9vYmplY3Qtc2NoZW1hLy0vb2JqZWN0LXNjaGVtYS0yLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkJNZzVGUkwwSTBnczUxTS9ndVNBajUvZTE0VlE0dHBablFOV3d1RFQ2NlAxNEk0M0l0bVBmSVpSaE85ZlVWSVBPQVFYVTQ3YXRseXdaL2N6b3FGUEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Blc2xpbnQvcGx1Z2luLWtpdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNsaW50L3BsdWdpbi1raXQvLS9wbHVnaW4ta2l0LTAuMy41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aNWtKK3dVM29BN01NSXFWUjl0eVpSdGpZUHI0T0MwMDRRNFJ3N3BnT0tVT0trSmZaM08yNG56M1dZZkdScE1ETm1jT2kzVHdRT21nbTdCN1RwaWkwdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVzbGludC9jb3JlIjogIl4wLjE1LjIiLAotICAgICAgICAibGV2biI6ICJeMC40LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BodW1hbmZzL2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjE5LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BodW1hbmZzL2NvcmUvLS9jb3JlLTAuMTkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNUR5UTQrMUpFVXplamVLMUpHSUNjaWRleWZVYkdpeGdTOWpOZ2V4NW5xa1crY1k3V1poeEJpZ21pZU41UW53OVpvc1NOVkM5S1FLeWIrR1VhR3lLVUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTguMTguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGh1bWFuZnMvbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTYuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFuZnMvbm9kZS8tL25vZGUtMC4xNi42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZdUkyWkhRTDc4UTVIYmhEaUJBMVg0TG1ZZFhDS0NNUUlmdzBwdzdwaUhKd3lSRUZlYkpVdnJRTjRjTXNzeUVTNngrdmZVYngxQ0lwYVFVS1lkUVpPdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGh1bWFuZnMvY29yZSI6ICJeMC4xOS4xIiwKLSAgICAgICAgIkBodW1hbndob2NvZGVzL3JldHJ5IjogIl4wLjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOC4xOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaHVtYW5mcy9ub2RlL25vZGVfbW9kdWxlcy9AaHVtYW53aG9jb2Rlcy9yZXRyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaHVtYW53aG9jb2Rlcy9yZXRyeS8tL3JldHJ5LTAuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KQnhrRVJ5Z243QnYvR2JONVJ2OFVsNkxWa25TKzVCcDZSZ0RDL084Z0VCVS95ZUg1VWk1Qy9PbFdyVGI2cWN0N0xqamZUNlJlMk54QjBsbjB5WXliQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOC4xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnpha2FzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaHVtYW53aG9jb2Rlcy9tb2R1bGUtaW1wb3J0ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGh1bWFud2hvY29kZXMvbW9kdWxlLWltcG9ydGVyLy0vbW9kdWxlLWltcG9ydGVyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ieHZlVjRWOHY1WWI0bmNGVFQzclBTZ1pCT3BDa2pmSzB5NG9WVlZKd0l1RFZCUk1EWHJQeVhSTDk4OGk1YXA5bTlibnlFRWpXZm01V2tCbXRmZkxmQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMi4yMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnpha2FzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaHVtYW53aG9jb2Rlcy9yZXRyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaHVtYW53aG9jb2Rlcy9yZXRyeS8tL3JldHJ5LTAuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iVjBUZ285SzRoZlBDZWsrYU1BbjgxUnBwRkt2MnlTRFFlTW9TWnV2VEFTeXdOVG5WSkNBckNaRTJGV3FwdklhdEt1N1ZNUkxXbFIxRWF6dlZoRHloUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOC4xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbnpha2FzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXNhYWNzL2NsaXVpIjogewotICAgICAgInZlcnNpb24iOiAiOC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bpc2FhY3MvY2xpdWkvLS9jbGl1aS04LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzhqY2phYlhhbGVPRzlEUTArQVJYV1pCVGZuUDRXTkFxenVpSks3bGw0NEFteEdLdi9KMk00VFBqeGpZM3puQkNmdkJYRnp1Y20xdHdkeUZ5YkZxRUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl41LjEuMiIsCi0gICAgICAgICJzdHJpbmctd2lkdGgtY2pzIjogIm5wbTpzdHJpbmctd2lkdGhAXjQuMi4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjcuMC4xIiwKLSAgICAgICAgInN0cmlwLWFuc2ktY2pzIjogIm5wbTpzdHJpcC1hbnNpQF42LjAuMSIsCi0gICAgICAgICJ3cmFwLWFuc2kiOiAiXjguMS4wIiwKLSAgICAgICAgIndyYXAtYW5zaS1janMiOiAibnBtOndyYXAtYW5zaUBeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvLS9sb2FkLW55Yy1jb25maWctMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZqZUhTbEl6cHYvTnlEM04wWXVIZlhPUERJaXhjQTFxMlpWOTh3c01xY1lsUG12Mm4zWWIybFlQOVhNRWxuYUZWWGc1QTdZTFRlTHU2Vjg0dVFEam1RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbWVsY2FzZSI6ICJeNS4zLjEiLAotICAgICAgICAiZmluZC11cCI6ICJeNC4xLjAiLAotICAgICAgICAiZ2V0LXBhY2thZ2UtdHlwZSI6ICJeMC4xLjAiLAotICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKLSAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9hcmdwYXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJncGFyc2UvLS9hcmdwYXJzZS0xLjAuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW81Um95NnRORzRTTC9GT2tDQU42UnpqaWFrWlMyNVJMWUZyY010dEpxYmRkOEJXcm5BK2ZHejU3aU41UGIwNnB2Qkd2bDVnUTBCNDhkSmxzbFh2b1RnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNwcmludGYtanMiOiAifjEuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvbm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBwT3dBZFEvWWxYUTJ2ajhhM2g4SWlwRHVZUmkzd2NlVlFRR1lXeE5JTmNjcTQwQW53N0Jsc0VYQ01idDFadCtPTEE2RnE5c3VJcElXRDBPc25JU2x3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxvY2F0ZS1wYXRoIjogIl41LjAuMCIsCi0gICAgICAgICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9qcy15YW1sIjogewotICAgICAgInZlcnNpb24iOiAiMy4xNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC0zLjE0LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9rTUg3T1hYSjdZck45T2szL1NYcm51NGlYOXlPaysyNW5xWDRpbVMybnB1dlRZRG1vL1FFWm9xd1prWWFJRGszalZ2Qk9UT0lFZ0VoYUxPeW5CUzlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFyZ3BhcnNlIjogIl4xLjAuNyIsCi0gICAgICAgICJlc3ByaW1hIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAianMteWFtbCI6ICJiaW4vanMteWFtbC5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxvY2F0ZSI6ICJeNC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnL25vZGVfbW9kdWxlcy9wLWxpbWl0IjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vLzg4bUZXU0p4OGx4Q3p3ZEFBQlRKTDJNeVdCMTIrZUlZN01ETDJTcUxtQWtlS1U5cXhSdld1U3lUam0zRlVtcEJFTXVGZmNrQUlxRWFWR1VEeGI2dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLXRyeSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvbm9kZV9tb2R1bGVzL3AtbG9jYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI3OVpaLzB3QXhLR3Uzb1lNbHo4ankva2Joc05yUzdTS1o3UHhFSEJnSjUrRjJtdEZXMmZLMmNPdEJoMWNIWWtRc2J6RlY3SStFb1JLZTZZdDBvSzdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbGltaXQiOiAiXjIuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZy9ub2RlX21vZHVsZXMvcmVzb2x2ZS1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtZnJvbS8tL3Jlc29sdmUtZnJvbS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVlnOUtQMjRkRDVxa2E5SjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlEbmpCNXdha3NpQzQ5cnZNQjBQclVKUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZWnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9zY2hlbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGlzdGFuYnVsanMvc2NoZW1hLy0vc2NoZW1hLTAuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aWFJZNGpOdlZnU1ZROERMM0xUY2FrYUF0WHdUVlV4RTgxaHNsc3lEMkF0b1hXL3dWb2IxMEhrT0oxWC9wQWxjSTdEKzJZb1pLZzVkbzhHL3c2UllnQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvbnNvbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvbnNvbGUvLS9jb25zb2xlLTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFk2YjBYaUwwTmF2M1JlcmVzVWFyd2wyb0l6MWdUbnhHYkdwaG85L3JiVVdzTEgwZjFPRC9WVDg0eHM4YzdWbUg3TUNobkxiMHBhZzZQaFpoQWREaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb3JlLy0vY29yZS0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZLRDBPdWx2UnNYRjFobWFGZ0hoVkp6Y3pXekExUlhNTW85TFRQdUZYbzlxL2FsRGJNRTNKSXlXWXFvdldzVUJXU29CY3NIYUdQU0xGOXJ6NGw5UWVnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3BhdHRlcm4iOiAiMzAuMC4xIiwKLSAgICAgICAgIkBqZXN0L3JlcG9ydGVycyI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl40LjMuMiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAiY2ktaW5mbyI6ICJeNC4yLjAiLAotICAgICAgICAiZXhpdC14IjogIl4wLjIuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKLSAgICAgICAgImplc3QtY2hhbmdlZC1maWxlcyI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1jb25maWciOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtcnVubmVyIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC13YXRjaGVyIjogIjMwLjAuNSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuOCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIjMwLjAuNSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2RpZmYtc2VxdWVuY2VzIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9kaWZmLXNlcXVlbmNlcy8tL2RpZmYtc2VxdWVuY2VzLTMwLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbjVIOFFMREo0N1FxYkNObjVTdUZqQ1JEck9MRVowaDh2QUhDSzVSTDlMczdYYThBUUxhL1l4QWM5VWpGcW9FRE00OG11d3RCR2p0TVk1Y3IwUExEQ3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9lbnZpcm9ubWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFSWDdXb2FXeDFvYU9rRFF2Q1dJbVZROFhOdGR2NXNFV2drNGd4UjZOWGI3V0JVbkw1c1JhazRXUnpJUVJaMVZUV1B2VjRWSTRtZ0dqTkw5VGVLTVlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiMzAuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2V4cGVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZXhwZWN0Ly0vZXhwZWN0LTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNnVkYWM4S0tydFR0QytBWFoyaVVOL1I3ZHA3WWRyeStGbzZGUEZuREc1NHdqVk1uYjZ2Vy9YTmxmN1hqOFVEakFFM2FBVkFzUjRLRnlLazNUQ1htVEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXhwZWN0IjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIjMwLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9leHBlY3QtdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2V4cGVjdC11dGlscy8tL2V4cGVjdC11dGlscy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUYzbG1UVDdDWFdZeXdvVlVHVENtb20wdlhxM0hUVGthWnlUQXpJeStiWFNCaXpCN281cXpsQzlWQ3RxMGFyT2E4R3FtTnNiZy9jRTlDNkhMbjdTemV3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2dldC10eXBlIjogIjMwLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9mYWtlLXRpbWVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpPNURIZk5WK2tnRUFlUDNnSzNYbHBKTEw0VTNTejZlYmwvbjY4VXd0NjRxRkZzNWJ2NGJmRUVqeVJHSzV1TTBDOTBld29vTmdGdUtNZGtiRW9NRVh3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJAc2lub25qcy9mYWtlLXRpbWVycyI6ICJeMTMuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtbW9jayI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC11dGlsIjogIjMwLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2V0LXR5cGUvLS9nZXQtdHlwZS0zMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUF5WWRlbVhDcHRTUkZpckk1RVBhek54eVB3QUwwalh0M3pjZUZqYWo4TkZpS1A5cE9pMGJmWG9uZjZxa2Y4MnoydDNRV1BlTENXV3c0c3RQQnpjdEx3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2xvYmFscy8tL2dsb2JhbHMtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03b0VKVDE5V1c0b2U2SFI3b0xSdkh4d2xKazJnZXYwVTlweDN1ZnM4c1g5UG9EMUV6YTY4S0YwL3RsTjdYMGRxL1dWc0JTY1hRR2dDbGRBMVY5WS9qQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvZXhwZWN0IjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1tb2NrIjogIjMwLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9wYXR0ZXJuIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9wYXR0ZXJuLy0vcGF0dGVybi0zMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdXcDdOZlFXMjdMYUJRejNUSVRTOEw3WkNRMFRMdnRtSS8vNE93bFFSeDRybld4Y1BOSVlqeFpwRGNONCtVbEd4Z20zalM1UVB6OElQVENrYjU5d1pBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9yZXBvcnRlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3JlcG9ydGVycy8tL3JlcG9ydGVycy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1hZmZ0N1ZCWDRqekVEMUZ3R0Mxby85UVVNMnhlYnphdkltWk1lcW5za2xnY3l4QnRvOG1WNEh6TlN6VXJyeUorOFI5TUZPTTNIZ1l1RHJhZFdSKzRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiY29lL3Y4LWNvdmVyYWdlIjogIl4wLjIuMyIsCi0gICAgICAgICJAamVzdC9jb25zb2xlIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI1IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4yIiwKLSAgICAgICAgImV4aXQteCI6ICJeMC4yLjIiLAotICAgICAgICAiZ2xvYiI6ICJeMTAuMy4xMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiAiXjYuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1yZXBvcnQiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcyI6ICJeNS4wLjAiLAotICAgICAgICAiaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4xLjMiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiMzAuMC41IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMiIsCi0gICAgICAgICJ2OC10by1pc3RhbmJ1bCI6ICJeOS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3NjaGVtYXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NjaGVtYXMvLS9zY2hlbWFzLTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRG1kWWd0ZXpNa2gzY3BVOC8xdXlYYWt2M3RKUmNtY1h4Qk9jTzB0YmFvelB3cG1oNFlNc25XclFtOVptWk1mYTVvY2J4emJGazZPNGJEUEVjL2lBbkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHNpbmNsYWlyL3R5cGVib3giOiAiXjAuMzQuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9zbmFwc2hvdC11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3Qvc25hcHNob3QtdXRpbHMvLS9zbmFwc2hvdC11dGlscy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhjQ1E1cVdITHZpMjlVVXJvd2dERnZWNHQ3RVR4WDkxQ2JEY3pNbm9xWFBPSWNaT3h5TmRTam02a1Y1WE1jOCtIa3hmUmVnVS9NVW1uVGJKUnpHclVRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTMwLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTUlSV01VVVIzc2RiUDM2b3lOeWhiVGhMSHlKMmVFRENsUENpSFZicllBZTVnM0NIUkFySVZwQnc3Y2RTQjVmcitvZlNmSWIyVG5zdzhpRUhMMFBZUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjI1IiwKLSAgICAgICAgImNhbGxzaXRlcyI6ICJeMy4xLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXJlc3VsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1yZXN1bHQvLS90ZXN0LXJlc3VsdC0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdQeXp0bkswZ2JETVFBSlo0M3RkTXJvK3FibERISDFSdS95bHpVbzIxVEJLcXQ4OFpxbktLSzJtMzBMS21MTG9LdFIybHhkcENDL1AzZzF2ZktjYXdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuNiIsCi0gICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXNlcXVlbmNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1zZXF1ZW5jZXIvLS90ZXN0LXNlcXVlbmNlci0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFlYS9HMWVnV29JSW96bUREN1BCWFVPeGtla1hsN3VlR3pyc0dHaTFTYmVLZ1FxQ1lDSWYrd2ZiZmxFYmYyTGlQeEw4ajJKWkdMeXJ6WmFnanZXNFlRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjAuNSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIjMwLjAuNSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdHJhbnNmb3JtIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WazhhbUxRQ211Wnl5NkdiQmh0MUpmbzlSU2RCdGc3TGtzK0IwUGVjbmpJOEorUENMUVBHaDd1SThRLzJ3d3BXMmdMZGlBZmlITnNtZWtLbHl3VUxxZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4yNy40IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjUiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl43LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4yLjAuMCIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC44IiwKLSAgICAgICAgInBpcmF0ZXMiOiAiXjQuMC43IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJ3cml0ZS1maWxlLWF0b21pYyI6ICJeNS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hUkVZYTNha3U5U1NuZWE0YVg2YmhLbjRiZ3YzQVhrZ2lqb1FnYllWM3l2YmlHdDZ6K01RODUrNm1JaHg5RHNLVzJCdUIvY0xSL0ErdGNNVGh4K0tMUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9wYXR0ZXJuIjogIjMwLjAuMSIsCi0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIjMwLjAuNSIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuNiIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjQiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE3LjAuMzMiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9nZW4tbWFwcGluZy8tL2dlbi1tYXBwaW5nLTAuMy4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmtrdC83bmlKNk1nRVB4RjBiWWRRNmV0WmFBK2ZRdkRjTEtja2h5MXlJUU96YW9LakJCalNqNjMvYUxWallFM3FoUnQ1ZHZNK3VVeWZDZzZVS0NCYkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvc291cmNlbWFwLWNvZGVjIjogIl4xLjUuMCIsCi0gICAgICAgICJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nIjogIl4wLjMuMjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3Jlc29sdmUtdXJpLy0vcmVzb2x2ZS11cmktMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJSSVNnQ0lqUDIwL3RiV1NQV01FaTU0UVZQUlpFeGt1RDlsSkwrVUl4VUt0d1ZKQTh3VzFUcmIxak1zMVJGWG8xQ0JUTlovNWhwQzlRdm1LV2RvcEt3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AanJpZGdld2VsbC9zb3VyY2VtYXAtY29kZWMvLS9zb3VyY2VtYXAtY29kZWMtMS41LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNZUTkzMTBncnF4dWVXYmwrV3VJVUlhaVVhRGNqN1dPcTVmVmhFbGpOVmdSZk9VaFk5ZnkyelR2Zm9xV3NuZWJoOFNsNzBWU2NGYklDdkpuTEtCME9nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMzAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmcvLS90cmFjZS1tYXBwaW5nLTAuMy4zMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR1E3Tnc1RzJsVHUvQnRIVEtmWGhLSG9rMldHZXRkNFhZY1ZLR3gwMFNqQWs4R013Z0pNM3pyNnpPUmlQR3VPRSsvdmtjOTBLdFRvc1NTdmFDaktiMlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvcmVzb2x2ZS11cmkiOiAiXjMuMS4wIiwKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3NvdXJjZW1hcC1jb2RlYyI6ICJeMS40LjE0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrIjogewotICAgICAgInZlcnNpb24iOiAiMS4xNy40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrLy0vc2RrLTEuMTcuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItenEyNGhmdUFtbWxOWnZpazBGTEk1OHVFNXNyaU4wV1dzUXpJbFluelN1S0RBSEZxSnRCRnJsL0xmQjFOTGdKVDVZN2RFQnphWDR5QUtxT1ByY2V0YXc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFqdiI6ICJeNi4xMi42IiwKLSAgICAgICAgImNvbnRlbnQtdHlwZSI6ICJeMS4wLjUiLAotICAgICAgICAiY29ycyI6ICJeMi44LjUiLAotICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC41IiwKLSAgICAgICAgImV2ZW50c291cmNlIjogIl4zLjAuMiIsCi0gICAgICAgICJldmVudHNvdXJjZS1wYXJzZXIiOiAiXjMuMC4wIiwKLSAgICAgICAgImV4cHJlc3MiOiAiXjUuMC4xIiwKLSAgICAgICAgImV4cHJlc3MtcmF0ZS1saW1pdCI6ICJeNy41LjAiLAotICAgICAgICAicGtjZS1jaGFsbGVuZ2UiOiAiXjUuMC4wIiwKLSAgICAgICAgInJhdy1ib2R5IjogIl4zLjAuMCIsCi0gICAgICAgICJ6b2QiOiAiXjMuMjMuOCIsCi0gICAgICAgICJ6b2QtdG8tanNvbi1zY2hlbWEiOiAiXjMuMjQuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9ub2RlX21vZHVsZXMvem9kLXRvLWpzb24tc2NoZW1hIjogewotICAgICAgInZlcnNpb24iOiAiMy4yNC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy96b2QtdG8tanNvbi1zY2hlbWEvLS96b2QtdG8tanNvbi1zY2hlbWEtMy4yNC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oL3ozUEt2Y1RjVGV0eWpsMWZrajc5TUhORWptK0hwRDZOWGhlV2p6T2VrWTdrVitsd0RZbkh3K2l2SGtpam5DU016MXlKYVdCRDl2dS9GY21rK3ZFZz09IiwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInpvZCI6ICJeMy4yNC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWRhcndpbi1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWRhcndpbi1hcm02NC8tL21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLWFybTY0LTMuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RWkh0bFZnYkFkeTJ6QXFOQTlHdTFVcEl1SThYdnNkMXY4aWM2QjJwWm1lRm5GY01XaVBMZldYaDdUVnc0ZUdFWi9DOVRIMjgxS3doVm9lUVVLYnlqdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm02NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImRhcndpbiIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1kYXJ3aW4teDY0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLXg2NC8tL21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLXg2NC0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbWR6ZDNBVnpZS3VVbWlXT1E4R05obDY0L0lvRkdvbDU2OXpOUmRrTFJlaDZMUkxIT1h4VTRVOGVxMEp3YUQ4aUZIZFZHcVN5NElqRkw0cmVvV0NERnc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAieDY0IgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAiZGFyd2luIgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybS8tL21zZ3BhY2tyLWV4dHJhY3QtbGludXgtYXJtLTMuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mZzB1eS9kRy9uWkVYZllpbEtvUmU3eUFMYU5tSG9ZZUlvSnVKN0tKK1l5VTJidlk4dlB2MjdmN1VLaEdScFk2ZXVGWXFFVmh4Q0ZaZ0FVTlFCTTNudz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm0iCi0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1saW51eC1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybTY0Ly0vbXNncGFja3ItZXh0cmFjdC1saW51eC1hcm02NC0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXhRTCtheDBYcUJKRFppS2ltUzJYUWFmKzJ3REdWYTFlblZSR3pFdkxMVkZlcWE1a3gyYldidGNTWGdzeGpRQjduUnFxSUdGSWNMdGVGL3NIZVZ0UWc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1saW51eC14NjQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG1zZ3BhY2tyLWV4dHJhY3QvbXNncGFja3ItZXh0cmFjdC1saW51eC14NjQvLS9tc2dwYWNrci1leHRyYWN0LWxpbnV4LXg2NC0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY3Z3TmZiUDA3cEtVZnExdUgrUzZLSjdkVDlLOFdPRTRaaUFjc3JTZXMrVVk1NUUvMGpMWWMrdnErRE83amxtcVJiNXpBZ2dFeEttMEg3Ty9DQmFlc2c9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAieDY0IgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3Qtd2luMzIteDY0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Btc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3Qtd2luMzIteDY0Ly0vbXNncGFja3ItZXh0cmFjdC13aW4zMi14NjQtMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXgwZldhUXRZcDRFNnNrdGJzZEFxbmVoeERnRWMvVndNN3VMc1JDWVdhaUd1MHlrWWRaUGlTOHpDV2Ruakh3eWl1bW91c3hmQm00U08zMWVYcXdFWmhRPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIndpbjMyIgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AbmFwaS1ycy93YXNtLXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BuYXBpLXJzL3dhc20tcnVudGltZS8tL3dhc20tcnVudGltZS0wLjIuMTIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpWV1VjZndZNEUveVBpdFFKbDQ4MUZqRm8zSzIyRDZxRjBEdUZINlkvbmJuRTExR1k1dWd1RHhaTUdYUFE4V1EwMTI4TVhRRDdUbmZIeUs0b1dvSUpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZW1uYXBpL2NvcmUiOiAiXjEuNC4zIiwKLSAgICAgICAgIkBlbW5hcGkvcnVudGltZSI6ICJeMS40LjMiLAotICAgICAgICAiQHR5YnlzL3dhc20tdXRpbCI6ICJeMC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9Abm9kZWxpYi9mcy5zY2FuZGlyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bub2RlbGliL2ZzLnNjYW5kaXIvLS9mcy5zY2FuZGlyLTIuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12cTI0QnEzeW01SEVRbTJOS0NyM3lYRHdqYzd2VHNFVGhSRG5rcDJESzlwMXVxTFIrREh1cm0vTk9UbzBLRzdIWUhVN2VwcEtaajNNeXFZdU1CZjYyZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAbm9kZWxpYi9mcy5zdGF0IjogIjIuMC41IiwKLSAgICAgICAgInJ1bi1wYXJhbGxlbCI6ICJeMS4xLjkiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLnN0YXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5vZGVsaWIvZnMuc3RhdC8tL2ZzLnN0YXQtMi4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJraFBQcDJ6cnFEQVFBLzJqTmhuenRjUEFsdjY0WGRoSXA3YTc0NTRBNW92STdCdWt4Z3Q3TVg3dWR3QXUzemcxRGNwUFUwcnozVlYxU2VhcXZZNCtBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bub2RlbGliL2ZzLndhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQG5vZGVsaWIvZnMud2Fsay8tL2ZzLndhbGstMS4yLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9HQitVeGxnV2NnUWtnd284R2NFR3dlbW9URnQzRklPOWFiYWJCbWFHd1hJb0JLWitHVHkwcFAxODViZUdnN0xsaWgvTlNIU1YyWEFzMWxuem5vY1NnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBub2RlbGliL2ZzLnNjYW5kaXIiOiAiMi4xLjUiLAotICAgICAgICAiZmFzdHEiOiAiXjEuNi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLy0vd2F0Y2hlci0yLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZGZVbkN4aU45SDRhcDg0RHZEMnViancrM3ZVTnBzdHhhMFRuZVkvUGFhdDhhM1I0dVFaRExTdldqbXpuQVkvRG9haHFUSGw5VjQ2SEYvWnMzRjI5cGc9PSIsCi0gICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRldGVjdC1saWJjIjogIl4xLjAuMyIsCi0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMyIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuNSIsCi0gICAgICAgICJub2RlLWFkZG9uLWFwaSI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAcGFyY2VsL3dhdGNoZXItYW5kcm9pZC1hcm02NCI6ICIyLjUuMSIsCi0gICAgICAgICJAcGFyY2VsL3dhdGNoZXItZGFyd2luLWFybTY0IjogIjIuNS4xIiwKLSAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci1kYXJ3aW4teDY0IjogIjIuNS4xIiwKLSAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci1mcmVlYnNkLXg2NCI6ICIyLjUuMSIsCi0gICAgICAgICJAcGFyY2VsL3dhdGNoZXItbGludXgtYXJtLWdsaWJjIjogIjIuNS4xIiwKLSAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci1saW51eC1hcm0tbXVzbCI6ICIyLjUuMSIsCi0gICAgICAgICJAcGFyY2VsL3dhdGNoZXItbGludXgtYXJtNjQtZ2xpYmMiOiAiMi41LjEiLAotICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybTY0LW11c2wiOiAiMi41LjEiLAotICAgICAgICAiQHBhcmNlbC93YXRjaGVyLWxpbnV4LXg2NC1nbGliYyI6ICIyLjUuMSIsCi0gICAgICAgICJAcGFyY2VsL3dhdGNoZXItbGludXgteDY0LW11c2wiOiAiMi41LjEiLAotICAgICAgICAiQHBhcmNlbC93YXRjaGVyLXdpbjMyLWFybTY0IjogIjIuNS4xIiwKLSAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci13aW4zMi1pYTMyIjogIjIuNS4xIiwKLSAgICAgICAgIkBwYXJjZWwvd2F0Y2hlci13aW4zMi14NjQiOiAiMi41LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1hbmRyb2lkLWFybTY0IjogewotICAgICAgInZlcnNpb24iOiAiMi41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci1hbmRyb2lkLWFybTY0Ly0vd2F0Y2hlci1hbmRyb2lkLWFybTY0LTIuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LRjgrajluTmJVTjh2ek9GRHBSTXNhS0JIWi9tY2pFak1Ub1ZNSk9oVG96a0RvblFGRnJSY2ZkTFduNnlXS0NtSkttZFZ4U2dIaVl2VENlZjQvcWNCQT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm02NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImFuZHJvaWQiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWRhcndpbi1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItZGFyd2luLWFybTY0Ly0vd2F0Y2hlci1kYXJ3aW4tYXJtNjQtMi41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVBelB2NW9zRG1aeUJob3U4UG9GNGk2UlFYQWZlS0w5dGpiM1F6WXVjY1hGTVFVMHJ1SWMvUE9oMzBlUG5hT3lEMVVYZGxLZ3VIQm1zVHM1M3RWb1B3PT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImFybTY0IgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAiZGFyd2luIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1kYXJ3aW4teDY0IjogewotICAgICAgInZlcnNpb24iOiAiMi41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci1kYXJ3aW4teDY0Ly0vd2F0Y2hlci1kYXJ3aW4teDY0LTIuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xWlhEdGhybk5td3YxMEEwLzNBSk5aOUpHbHpyRjgyaTNnTlFjV096ZDduSjhhaitJTHlXMU1UeFZrMzVEYjB1OTFvRDVObGs5TUJpdWpNbHdtZVhaZz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJkYXJ3aW4iCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWZyZWVic2QteDY0IjogewotICAgICAgInZlcnNpb24iOiAiMi41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci1mcmVlYnNkLXg2NC8tL3dhdGNoZXItZnJlZWJzZC14NjQtMi41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNJNGVsak03RmxwOXlQdUtpOFcwaXJkOFRJL0pLNkNTeGp1M05valZJNkJqSHNUeUs3enhBOXVyalZqRUtKNU1CWUMrYkxtTWNiQVdsWityRmtMcEpRPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImZyZWVic2QiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybS1nbGliYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItbGludXgtYXJtLWdsaWJjLy0vd2F0Y2hlci1saW51eC1hcm0tZ2xpYmMtMi41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJDZFpsRXlUczhnZXlCa2tjblBXdnRYTFk0NEJDZVpLbUdZUnRTZ3R3d25IUjRkeGZIUkczZ1I5OVhkTUVkUTdLZWlEZGFzSnd3dk5TRjVqS3REd2RBPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImFybSIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci1saW51eC1hcm0tbXVzbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItbGludXgtYXJtLW11c2wvLS93YXRjaGVyLWxpbnV4LWFybS1tdXNsLTIuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02RSttL01tMXQxeWhCOFg0MTJzdGlLRkczWHlrbWdkSU9xaGpXaitWTDhvSGtLQUJmdS9nakZqOER2THJZVkhTQk5DKy91NVBlTnJ1amlTUTF6d2QxUT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm0iCi0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItbGludXgtYXJtNjQtZ2xpYmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHBhcmNlbC93YXRjaGVyLWxpbnV4LWFybTY0LWdsaWJjLy0vd2F0Y2hlci1saW51eC1hcm02NC1nbGliYy0yLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTHJHcCtmMDJ5VTNCTjlBK0RHdVkzdjNibW5GVWdnQUlUQkdyaVpIVVJFZk5FelpoL0dPMDZGRjV1Mmt4OHgrR0JFVVlmeVRHYW1vbDRqM205QU5lOHc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItbGludXgtYXJtNjQtbXVzbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItbGludXgtYXJtNjQtbXVzbC8tL3dhdGNoZXItbGludXgtYXJtNjQtbXVzbC0yLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0ZPakFCaTkycE1ZUlhTN0FjUXY5L00xWXVLUnc4U1puaUNEdzBzc1FiL25vUGtSekErSEJEa3dteU9KWXA1d1hjc1RyaHhPMHpxMVUxMWNLOWpzRmc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGFyY2VsIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AcGFyY2VsL3dhdGNoZXItbGludXgteDY0LWdsaWJjIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci1saW51eC14NjQtZ2xpYmMvLS93YXRjaGVyLWxpbnV4LXg2NC1nbGliYy0yLjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2NFU244Tlp5U21md2xUc0l1cis0OXlEcVNueTJJaFBlWmZYdW5RaTQ4RE11Z0tlWjd1eTFGWDgzcE8wWDIyc0hudEo0VWIrOWszNFhRQ1grb0h0MkE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAieDY0IgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLWxpbnV4LXg2NC1tdXNsIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci1saW51eC14NjQtbXVzbC8tL3dhdGNoZXItbGludXgteDY0LW11c2wtMi41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW4wRTJFUWJhdFEzYlhoY0gyRDFYSUFBTkFjVFprUUlDQlBWYXhNZWFDVkJ0T3BCWnBXSnVmN0x3eVdQU0JESVRiN0luOG1xUWdKN2dIOENJTENVUlhnPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci13aW4zMi1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItd2luMzItYXJtNjQvLS93YXRjaGVyLXdpbjMyLWFybTY0LTIuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SRnprbFJ2bWMzUGtqS2pyeTNoTEY5d0Q3cHBSNEFLY1dOekg3a1hSN0dVZTBJZ2IzTno4ZnlQd3RaQ1NxdUdyaFU1SGhVTkRyL21LQnFqN3RxQTJWdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm02NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIndpbjMyIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BwYXJjZWwvd2F0Y2hlci13aW4zMi1pYTMyIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BwYXJjZWwvd2F0Y2hlci13aW4zMi1pYTMyLy0vd2F0Y2hlci13aW4zMi1pYTMyLTIuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jMktrY1ZOK05KbXVBN0NHbGFHRDFxSmgxY0xmRG5Rc0hqRTg5RTYwdlVFTWxxZHVIR0NkQ0xKQ0lENWdlRlZNMGRPdEEzWmlJTzhCb0VRbXpRVmZwUT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJpYTMyIgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAid2luMzIiCi0gICAgICBdLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3BhcmNlbCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBhcmNlbC93YXRjaGVyLXdpbjMyLXg2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGFyY2VsL3dhdGNoZXItd2luMzIteDY0Ly0vd2F0Y2hlci13aW4zMi14NjQtMi41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlsSEJkSklUZU5SKytFdlNRVlVjYVpvV3VweUhmWGUxalp2R1owNk8vNU1mbFBjdVBMdEVwaFNjSUJMK0FpQ1dCTzQ2dERTSHpXeUQwdURtbVpxc2dBPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIndpbjMyIgotICAgICAgXSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9wYXJjZWwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0Bwa2dqcy9wYXJzZWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bwa2dqcy9wYXJzZWFyZ3MvLS9wYXJzZWFyZ3MtMC4xMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rMVZramREMFFCTFBvZEdySlVlcWFySDhWQUl2UU9ESWJ3aDlYcFA1U3lpc2Y3WW9RZ3NKS1BORm9xcUxRbHUrVlEvdFZTc2hNUjZsb1BNbjhVK2RQZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHBrZ3IvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AcGtnci9jb3JlLy0vY29yZS0wLjIuOS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUU5xWHlmVlMyd205aHdlU1lEMk83RjBHMDZ1dXJqOWtaOTZUUlFFNVk5aFU3K3RnZFp3SWtiQUtjNU9jeTFIeEVZMmt1RFFhNmNRMVdScy9PNUxGS0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEyLjIwLjAgfHwgXjE0LjE4LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vcGtnciIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHNpbmNsYWlyL3R5cGVib3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjM0LjQwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2luY2xhaXIvdHlwZWJveC8tL3R5cGVib3gtMC4zNC40MC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3dCTklQOFpBWWV2L09SRFdXMFF2eGR3UFh3eEJ0THNkc0pnU2M3ZURJUnQ4dWJQK3J4VUJ6UHNyd251MTZmZ0VGOEJ4NGxoLyttdlF2SnpjVE02S3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSzNtQ0hLUTlzVmg4bzFDOWN4a3d4YU9tWG9BTWxEeEMxbVl5SHJqcU9XRWNCallyNzZ0OTZ6TDJ6bGo1ZFVHWjNIU3cyNDBYMXFnSDNNamYxeUpXcFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1kZXRlY3QiOiAiNC4wLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzaW5vbmpzL2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMTMuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9mYWtlLXRpbWVycy8tL2Zha2UtdGltZXJzLTEzLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMzYvaFRiSDJ1YVd1R1ZFUnlDNmRhOVl3R1duelVaWHVQcm8vRjJMZnNkT3NMbkNvanovaVNIOE14VXQvRkQyUzVYQlNWUGhtQXJGVVhjcENRMkhraXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHNpbm9uanMvY29tbW9ucyI6ICJeMy4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BzdGFuZGFyZC1zY2hlbWEvc3BlYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac3RhbmRhcmQtc2NoZW1hL3NwZWMvLS9zcGVjLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tMmJPZDBmMlJUOWs4UUp4MUpOODVjWll5SDFScUZCZGx3dGtTbGY0dEJEWUxDaWlabnYxZklJd2FjSzZjcXdYYXZPeWRmME5QVG9NUWdwS3ErZFZsQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5YnlzL3dhc20tdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMTAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5YnlzL3dhc20tdXRpbC8tL3dhc20tdXRpbC0wLjEwLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZ5eVBZRmxPTU55bEc0NUdvQWUweERvTHdXdW93dmY5MkY5a3lTcXpZaDh2bVltN0QydTRpVUpLYTF0T1VwUzcwS3UxM0FTck9rUzRTY1hGc1RhQ05RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0c2xpYiI6ICJeMi40LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19jb3JlLy0vYmFiZWxfX2NvcmUtNy4yMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xb1Fwclp2ejV3UUZKd01EcWVzZVJYV3YzcnFNdmhncGJYRmZWeVdoYng5WDQ3UE9JQTZpLytkWGVmRW1aS29BZ09hVGRhSWdOU01xTUlVNjF5Unl6QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIwLjciLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjIwLjciLAotICAgICAgICAiQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX3RlbXBsYXRlIjogIioiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX2dlbmVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IvLS9iYWJlbF9fZ2VuZXJhdG9yLTcuMjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdWZGZDJYaTkyT0FWUFlzeStQNG43L1U3ZTY4ZmV4MCtFZThnU0c5S1g3ZW8wODRDV2lRNHNkeGt0dmRsMGJPUHVwWHRWSlBZMTl6azZFd1dxVVE4bGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2JhYmVsX190ZW1wbGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RlbXBsYXRlLy0vYmFiZWxfX3RlbXBsYXRlLTcuNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oL05VYVN5RzVFeXhCSXA4WVJ4bzRSTWUyL3FRZ3Z5b3dSd1ZNemhZaEJDT05iVzhQVXNnNGxrRk1yaGdaaFVlNXozTDNNaUxEdXZ5Si9DYVBhMkE4QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjEuMCIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiNy4yOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlLy0vYmFiZWxfX3RyYXZlcnNlLTcuMjguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOFB2Y1hmNzBnVERaQmd0OXB0eEo4ZWxCZUJqY0xPQWNPdG9PL21QSmp0amkxK0NkR2JIZ203N29tMUdyc1B4c2lFK3VYSXBOU0s2NFVZYUl3UVhkNFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjI4LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9lc3RyZWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2VzdHJlZS8tL2VzdHJlZS0xLjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZFdIekhhMldxRVhJL08xRTlPanJvY01US0psMm1TckVvbGgxSW9tcnY2VStKdU53YUhYc1h4OWJMdTVnRzdCVVdGSU4wc2tJUUpRL0wxcklleDRYNnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2dyZW1saW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjYuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2dyZW1saW4vLS9ncmVtbGluLTMuNi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xYnpDbE1VaFZiMis2WE90QXdVbk50Vm1EZUJzdkFZWHlvUVlJdlFjdjlwUWtrN3orRmN0MG81OXJZQ3lMZjRSNDdYbGc3VSs2bHZVa1AzRWMvWFJkZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlLy0vaXN0YW5idWwtbGliLWNvdmVyYWdlLTIuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yUUYvdC9hdVdtMGxzeThYdEtWUEcxOXYzc1NPUWxKZS9ZSFpnZmpiL0tCQkhPR1NWK0oycS9TNjcxcmNxOXVUQnJMQVhtWnBxSmlhUWJNVCt6TlUxdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydC8tL2lzdGFuYnVsLWxpYi1yZXBvcnQtMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5RbjdBSFFuay9SU0xPeHJCYkd5Sk0vYVZRK3BqajVIQ2dhc0Z4YzBLL0tob0FUZlEvNDdBeVVsMTVJMnlCVXBpaGptYXMrYStWSkJPcWVjckZIK3VBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMvLS9pc3RhbmJ1bC1yZXBvcnRzLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wazJCMU5XYWxGOXRvQ1J1NmdqQnpSNjlzeUZqUDRPZDhXUkFYKzBtbWY5bEFqQ1JpY0xPV2MrWnJ4Wkh4LzBYUmpvdGdrRjl0NmlhTUorYVhjT2RaUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2plc3QvLS9qZXN0LTMwLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFRZdWd6aHV3cVdqd3MwQ1Z6OFFwTTM2K1QrRHo1bVRFQktoTnMvZXNHTG5DSWxHZFJ5K0RxNzhOUmpkN2xzN3I4QkM4WlJNT3JLbGtPMWhVMEpPd0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXhwZWN0IjogIl4zMC4wLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMzAuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvanNvbi1zY2hlbWEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMTUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9qc29uLXNjaGVtYS8tL2pzb24tc2NoZW1hLTcuMC4xNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNStmUDhQOE1GTkMrQXlaQ0R4ckIycGtaRlBHenFRV1V6cFNldXVWTHZtOFZNY29yTllhdkJxb0ZjeEs4YlF6NFFzYm40b1VFRWVtNHdETGZjeXNHSEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL25vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ub2RlLy0vbm9kZS0yNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFQVFhDcmZ3bkRMajRWdlhybStVVUNRak5FdkpnTkE4czVGMWN2d1FVKzNLTmx0VE9rQm0xajMwdU5MeXFxUE5lN2dFM0tGekltWW9aRWZMaHA0WW93PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInVuZGljaS10eXBlcyI6ICJ+Ny4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvc3RhY2stdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3N0YWNrLXV0aWxzLy0vc3RhY2stdXRpbHMtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlhRWJZWjNUYllNem5QZGNkcjNTbUlyTFh3Qy9BS1pYUWVDZjlQZ2FvNUNLYjhDeUh1RVg1anpXUFRrdnJlZ3ZoUkpIY3BSTzZCRm9HVzl5Y2FPa1l3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy90cmlwbGUtYmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvdHJpcGxlLWJlYW0vLS90cmlwbGUtYmVhbS0xLjMuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNldhWWVzVGhSTUNsMTlpcnlNWVA3L3gyT1ZnQ3RiSVZmbERHRnBXbmI5aXJYSTNVallFNEF6bVl1aVVLWTFBSnN0R2lqb1krTWdVc3pNZ1J4SVlUWXc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE3LjAuMzMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy95YXJncy8tL3lhcmdzLTE3LjAuMzMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdweEJDS1dQTHI0eFNzSGd6NTExckZKQU0rd1MyOHcyekVPMVFETlk1ek0vUzhvazcwTk5menRIMHh3aHFLeWFLME9IQ2JOOThMREFadXkxY3R4RGtBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUk0cTlRVTlNUXY0b0VPejR0QUhKdE56MWN3dUx4bjJGM3hjYzJpVjVXZHFMUHBVbmozMGFVdXh0MW1BeFlURytvZThDWk1WLys2clU0UzRnUkR6cXRRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luIjogewotICAgICAgInZlcnNpb24iOiAiOC40MC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbi8tL2VzbGludC1wbHVnaW4tOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13L0Vib1BsQndubU9CdFJiaU92empEK3dkaVpkZ0ZlbzE3bGtsdHJ0bjdYMzd2YWdLS1dKQUJ2eWZzSlhUbEhlNlhCenVnbVlnZDRBNG5XK2s4TWl4dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZXNsaW50LWNvbW11bml0eS9yZWdleHBwIjogIl40LjEwLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlLXV0aWxzIjogIjguNDAuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiOC40MC4wIiwKLSAgICAgICAgImdyYXBoZW1lciI6ICJeMS40LjAiLAotICAgICAgICAiaWdub3JlIjogIl43LjAuMCIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgInRzLWFwaS11dGlscyI6ICJeMi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiAiXjguNDAuMCIsCi0gICAgICAgICJlc2xpbnQiOiAiXjguNTcuMCB8fCBeOS4wLjAiLAotICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L2VzbGludC1wbHVnaW4vbm9kZV9tb2R1bGVzL2lnbm9yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pZ25vcmUvLS9pZ25vcmUtNy4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhzNTl4Qk5mVUl1bk1GZ1dBYkdYNWNxNjg5M0liV2c0S25yamJZd1gzdHgwenRvclZnVERBNkIyc3hmOGVqSEo0d3o4QnFHVU1ZbG56TkJlcjVOdkdnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXIvLS9wYXJzZXItOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qQ055QXVYeDhkcjVLSk1rZWNHbVo4S0k2MUtCVWhrQ29iK1NEK0MrSTUrWTFGV0kyWTNRbVk0L2N4TUNDNVdBc1pxb0V0RUVUVmhVaVVNSUdDZjZCdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlciI6ICI4LjQwLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogIjguNDAuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiOC40MC4wIiwKLSAgICAgICAgImRlYnVnIjogIl40LjMuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIiwKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiPj00LjguNCA8Ni4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9wcm9qZWN0LXNlcnZpY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC9wcm9qZWN0LXNlcnZpY2UvLS9wcm9qZWN0LXNlcnZpY2UtOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vQTg5dno3V2Y1REVYc0dWdmNHZFlLYlZNOUY3RHlGWGo1MmxOWVVEUzFMOXlKZnFqVy9mSXA1UGdNdUVKTC9LZXFWVGUyUVNiWEFHVVpsakRVcEFydz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHNjb25maWctdXRpbHMiOiAiXjguNDAuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiXjguNDAuMCIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4zLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiPj00LjguNCA8Ni4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC9zY29wZS1tYW5hZ2VyIjogewotICAgICAgInZlcnNpb24iOiAiOC40MC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvc2NvcGUtbWFuYWdlci8tL3Njb3BlLW1hbmFnZXItOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15OU9iU3RDY2RDaVpLendxc0U4Q2NweXVWTXdSb3VKYmJTck51VGhEcHYxNmRGQWo0MjlJa002TE5iMWRaMm03aEs1Zkh5ek5jRXJaZjdDRWVLWFI0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiOC40MC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC90c2NvbmZpZy11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNDAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3RzY29uZmlnLXV0aWxzLy0vdHNjb25maWctdXRpbHMtOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qdE15dG1VYUc5ZC85a3FTbC9XM0UzeGFXRVNvNGhGRHhBSUhHVlcvV0tLdFFoZXNuUklKU0FKTzZYY2tsdXVKNktEQjV3b0QxRWlxa25yaUN0QW1jdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49NC44LjQgPDYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZS11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguNDAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGUtdXRpbHMvLS90eXBlLXV0aWxzLTguNDAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUU2MGNLNEt6QWM2WnJ6bEpuZmxYZHJNcU9CYXVnZXVrV0lDTzJyQjBLTnZ3ZElNYUVhWWl5d3dITXpBMXFGcFR4ckxoTjlMcDRFLzAwRWdXY0QzT3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzIjogIjguNDAuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC91dGlscyI6ICI4LjQwLjAiLAotICAgICAgICAiZGVidWciOiAiXjQuMy40IiwKLSAgICAgICAgInRzLWFwaS11dGlscyI6ICJeMi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS90eXBlc2NyaXB0LWVzbGludCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzbGludCI6ICJeOC41Ny4wIHx8IF45LjAuMCIsCi0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49NC44LjQgPDYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC90eXBlcy8tL3R5cGVzLTguNDAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRVRkYkZsZ2JBbVhIeUZQd3FVSVlyZmMxMkFydnBCaEVWZ0dBeFZZU3dsaTI2ZG44S28rbElvNFN1OXZJOXlrVFpkSm4rdkpwcnMvMGVaVTBZTUFFUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzdHJlZS8tL3R5cGVzY3JpcHQtZXN0cmVlLTguNDAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazF6OStHSlJlVlZPa2MxV2ZWS3MxdkJyUjVNSUtLYmRBakRUUHZJSzNMOERlNktiRmZQRnQ2QktwZGtkazdyWlMyR3RDL202eUk1TVlYK1VzdXZWWVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Byb2plY3Qtc2VydmljZSI6ICI4LjQwLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3RzY29uZmlnLXV0aWxzIjogIjguNDAuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiAiOC40MC4wIiwKLSAgICAgICAgImRlYnVnIjogIl40LjMuNCIsCi0gICAgICAgICJmYXN0LWdsb2IiOiAiXjMuMy4yIiwKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4zIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeOS4wLjQiLAotICAgICAgICAic2VtdmVyIjogIl43LjYuMCIsCi0gICAgICAgICJ0cy1hcGktdXRpbHMiOiAiXjIuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49NC44LjQgPDYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXNjcmlwdC1lc3RyZWUvbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZS1leHBhbnNpb24vLS9icmFjZS1leHBhbnNpb24tMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUp0MHZIeU0ram1VQnFvakI3RTFOSVlhZHQwdkkwUXhqeGQyVEVyVzk0d0R6K0UyTEFtNXZLTVhYd2c2WlpCVEhQdVVsRGdRSEtYdmpHQmRmY0YxWkRRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlL25vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTkuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HNlQwWlg0OHhnb3p4NzU4N2tvZVg5WXMyTll5Nkdtdi8vUDg5c0V0ZTlWOXdoSWFwTU5GNGlkS3huVzJRdENjTGlUV2xiL3dmQ2FiQXRBRldoaEJvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjIuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTciCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiOC40MC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMvLS91dGlscy04LjQwLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNnemkyTVhTWnlBVU9ZK0JGd0dzMTdzN2FkLzdMK2dLdDZZOHJBVlZXUys3bzZ3cmplRk40blZmVHBiRTI1TU5jeHlKK2lZVVhmbGJzMnhSOWg0VUJnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L2VzbGludC11dGlscyI6ICJeNC43LjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3Njb3BlLW1hbmFnZXIiOiAiOC40MC4wIiwKLSAgICAgICAgIkB0eXBlc2NyaXB0LWVzbGludC90eXBlcyI6ICI4LjQwLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjguNDAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL3R5cGVzY3JpcHQtZXNsaW50IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNsaW50IjogIl44LjU3LjAgfHwgXjkuMC4wIiwKLSAgICAgICAgInR5cGVzY3JpcHQiOiAiPj00LjguNCA8Ni4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlc2NyaXB0LWVzbGludC92aXNpdG9yLWtleXMvLS92aXNpdG9yLWtleXMtOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04Q1o0N1F3YWx5UmpzeXBmd25iSTNoS3k1Z0pEUG1ya0xqa2dNeGhpMCtEWloyUU54Mm5hUzYvaFdvVllVSFU3TFUyemxlRjY4VjltaWFWWnZoRmZUQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZXMiOiAiOC40MC4wIiwKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjQuMi4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lLy0vc3RydWN0dXJlZC1jbG9uZS0xLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV21vTjhxYUlBbzdXVFlXYkFadUc4UFlFaG41Zmt6N2RacnFUQlo3ZHR0Ly9sTDJHd21zMUljblE1eUhxakRmWDhGdDVqNFl6RE0yM2Y4N3pCZkRlOWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1hbmRyb2lkLWFybS1lYWJpIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWFuZHJvaWQtYXJtLWVhYmkvLS9yZXNvbHZlci1iaW5kaW5nLWFuZHJvaWQtYXJtLWVhYmktMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wcExSVWdIVmFHUldVeDBSMFV0MDZNam85Z0JhQmtnM3YvOEF4dXNHTGhzSW90YkJMdVJrNTFyQXpxTEM4Z3E2Tnl5QW9qRVhnbE5qemY2Ujk0OEROdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm0iCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImFuZHJvaWQiCi0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctYW5kcm9pZC1hcm02NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1hbmRyb2lkLWFybTY0Ly0vcmVzb2x2ZXItYmluZGluZy1hbmRyb2lkLWFybTY0LTEuMTEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbEN4a1Z0YjR3cDF2K0VvTitIaklHOWNJSXpQa1g1T3RNMDNwUVlrRytVNU8vd0w1M0xDNFFiSWVhemdpS3FsdUdlVkVlQmxaYWhIYWxDYUJ2VTFhMmc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImFuZHJvaWQiCi0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctZGFyd2luLWFybTY0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWRhcndpbi1hcm02NC8tL3Jlc29sdmVyLWJpbmRpbmctZGFyd2luLWFybTY0LTEuMTEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1BWQTFValJ1MVkvSXNCL2RRRXNwMlYxcG00NE9mNitMV3ZiTGM5U0RrMWMyS2hoRFJEQlVrUUNZVldlNmYyNnVKYjNmT0s4c2FXTWd0WDhJck1rM2c9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImRhcndpbiIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1kYXJ3aW4teDY0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWRhcndpbi14NjQvLS9yZXNvbHZlci1iaW5kaW5nLWRhcndpbi14NjQtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jRnpQN3JXS2QzbFphQ3NEemUwN1FYMVNDMjRsTzhtUHR5OXZkUCtZVmEzTUdkVmdQbUZjNTkzMTdiMmlvWHRnQ01LR2lDTHhKNEhRczYyb3o2R2ZSUT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImRhcndpbiIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1mcmVlYnNkLXg2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1mcmVlYnNkLXg2NC8tL3Jlc29sdmVyLWJpbmRpbmctZnJlZWJzZC14NjQtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mcXRHZ2FrM3pYNERDQjZQRnBzSDUrS210LzhDSWk0QnJ5NHJiMWhvNkF2MlFIVFJFTSs0N3kyODJVcWl1M1pSRjVJUWlvSlE1cVdSVjZqZHVBK2lHdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImZyZWVic2QiCi0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtLWdudWVhYmloZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm0tZ251ZWFiaWhmLy0vcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm0tZ251ZWFiaWhmLTEuMTEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdTkybXZsY1l0cDlNUkttUCtadk1tdFBOMzQrLzNsTUhseU1qN3dYSkRlWHh1TTBWZ3p6MCtQUEpOc3JvMW0zSVpQWUNoSWtuOTQ0d1c4VFlnR0tGSHc9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAiYXJtIgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm0tbXVzbGVhYmloZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm0tbXVzbGVhYmloZi8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtLW11c2xlYWJpaGYtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jSU5hb1kyejdMVkNyZkhrSWNtdmo3b3NUT3RtNlZWVDE2YjVvUWRTNGJlaWJYMlNZQndnWUxtcWhCakExdDUxQ2FyU2FCdVg1WU5zV0xqc3FmVzVDdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm0iCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LWdudSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm02NC1nbnUvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LWdudS0xLjExLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM0Z3c3UGpER0I5SmdlUEpFbWhFcUJoV3ZDaWlXQ3VYc0w5aFlwaERGN2NyVzdVZ0kwNWd5QkFpNk1GNTh1R2NNT2lPcVNKMnliRWVDdkhjcTBCQ21RPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImFybTY0IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1hcm02NC1tdXNsIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SeU1JeDZVZjUzaGhPdEpESWFtU2JUc2tBOTlzUEhTOTZ3eFZFL2JKdGVQSkp0cGRLR1hPMXdZOTBvUmRYdVlPR09UdXFqVDhBQ2NjTWM0SzZRbVQzdz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJhcm02NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcHBjNjQtZ251IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXBwYzY0LWdudS8tL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcHBjNjQtZ251LTEuMTEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDhWYWU3NEE0L2ErbVpIMEZiT2tGSkw5RFNLMlI2VEZQQzlNK2pDV1lpYS9xMmVpbkN1YlgxMHBlY3BEaVRta0pWVUgreThLM0JaQ2x5Y0Q4bkNTaEE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAicHBjNjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtZ251IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtZ251Ly0vcmVzb2x2ZXItYmluZGluZy1saW51eC1yaXNjdjY0LWdudS0xLjExLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZyeEw0T3J6T1dWVnNPYzk2K1YzYXFUSVFsMU8yVGpnRXhWNEVLZ1JZMDlBSjlsZVpwRWc4QWs5cGhhZGJ1WDBCQTRrOFU1cXR2TVNRUUdHbWFKcWNRPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgInJpc2N2NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1yaXNjdjY0LW11c2wvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbC0xLjExLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW1KNXZ1RGFJWitsL2FjdjAxc0hvWGZwbnlyTktPay8zYURvRWRMTy9YdG45SHVabERENmpLeEhsa044WmhXeUxKc1JCeGZ2OUdZTTJ1dFExU0NoS2V3PT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgInJpc2N2NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXMzOTB4LWdudSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1zMzkweC1nbnUvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXMzOTB4LWdudS0xLjExLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtFTG84ZWJCVnRiOXNBN3JNZTFDcGg0UUhyZUJ5aGFaMlFFQURkOU56SVFzWU5RcHQ5VWtNOWlxcjJsaEdyNWFmaDg4NWQvY0I1UWVUWFNiWkhUWVBnPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgInMzOTB4IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJsaW51eCIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC14NjQtZ251IjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXg2NC1nbnUvLS9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXg2NC1nbnUtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DM1pBSHVnS2dvdlY1WXZBTXN4aHEwZ3RYdXdFU1VLYzVNaEV0akJwTG9IUExZTStpdXdTajNsZmxGd0szRFBtNjg2NjByWjdHOEJNY3dTcm83aEQ1dz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImxpbnV4IgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXg2NC1tdXNsIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXg2NC1tdXNsLy0vcmVzb2x2ZXItYmluZGluZy1saW51eC14NjQtbXVzbC0xLjExLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJWMFlTb3loSzJuWjR2RXN3VC9Rd3F6cVFYdzVJNkNqb2FZTU9YMFRxQmxXaG9qVWY4UDk0bXZJN251SlRlYUNra2RzM1FFNCt6UzhLbytHZFh1WnRBPT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgIng2NCIKLSAgICAgIF0sCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgIm9zIjogWwotICAgICAgICAibGludXgiCi0gICAgICBdCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctd2FzbTMyLXdhc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctd2FzbTMyLXdhc2kvLS9yZXNvbHZlci1iaW5kaW5nLXdhc20zMi13YXNpLTEuMTEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNXU0UmtmeEptK05nN0lXZ2t6aTNxckZPdkx2UVluUEJtam1aUTgrc3pUSy9iMzFmUUNubGVObDFHZ0V0N25Jc1pSSWY1UExoUHdUMFdNK3E0NXgvVVE9PSIsCi0gICAgICAiY3B1IjogWwotICAgICAgICAid2FzbTMyIgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQG5hcGktcnMvd2FzbS1ydW50aW1lIjogIl4wLjIuMTEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdW5ycy9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLWFybTY0LW1zdmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctd2luMzItYXJtNjQtbXN2Yy8tL3Jlc29sdmVyLWJpbmRpbmctd2luMzItYXJtNjQtbXN2Yy0xLjExLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5SY3o1SWw0bG4wa01oZkw4UzNoTGt4STg1QlhzM284RVlvYXR0c0pOZHNYNFlVVTg5aU9rVm43ZzBWSFNSeEZ1Vk1kTTRRMWpFcElJZDFJaGltL1V3PT0iLAotICAgICAgImNwdSI6IFsKLSAgICAgICAgImFybTY0IgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJ3aW4zMiIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi1pYTMyLW1zdmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B1bnJzL3Jlc29sdmVyLWJpbmRpbmctd2luMzItaWEzMi1tc3ZjLy0vcmVzb2x2ZXItYmluZGluZy13aW4zMi1pYTMyLW1zdmMtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EQ0VJNnQ1aTFObUFacDZwRm9ucEQ1bTdpNmFGcnBvZmNwNExBMmk4SUlxNjBKeW8yOGhhbUtCeE5yWmN5T3dWT1prZ3NScDlPMnNYV0JXUDhNbnZJUT09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJpYTMyIgotICAgICAgXSwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAib3MiOiBbCi0gICAgICAgICJ3aW4zMiIKLSAgICAgIF0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi14NjQtbXN2YyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi14NjQtbXN2Yy8tL3Jlc29sdmVyLWJpbmRpbmctd2luMzIteDY0LW1zdmMtMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sclcyMDBoWmRiZlJ0enRieWd5YXEvNmpQNkFLRThxUU4yS3ZQY0oreDd3aUQwMzhZdG5ZdFo4MklNTko2OUdKaWJWN2J3TDN5OUZnSys1dy9wWXQ2Zz09IiwKLSAgICAgICJjcHUiOiBbCi0gICAgICAgICJ4NjQiCi0gICAgICBdLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgIndpbjMyIgotICAgICAgXQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hYm9ydC1jb250cm9sbGVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fib3J0LWNvbnRyb2xsZXIvLS9hYm9ydC1jb250cm9sbGVyLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oOGxROHRhY1pZblIzdk5RVGdpYmordE9ESEk1LytsMDZBdTJQY3Jpdi9HbWV0MGVhajRUd1dINDFzTzl3bkhEaVFzRWoxOXEwZHJ6ZFdkZUFIdHdlZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXZlbnQtdGFyZ2V0LXNoaW0iOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWNjZXB0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY2NlcHRzLy0vYWNjZXB0cy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWN2ZzZDdEt3ZmdkbVZxWTFXSWlYS2MzUTFia1JxR0xpKzJXLzZhbys2WTdndS9SQ3dSdUFoR0V6aDVCNEtsc3pTdVRMZ1pZdXFGcW81Ykltak5Lbmc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgIm5lZ290aWF0b3IiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fjb3JuIjogewotICAgICAgInZlcnNpb24iOiAiOC4xNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi8tL2Fjb3JuLTguMTUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTlp5SmFyQmZMN25Xd0lxK0ZETDZacC95SEVoZVBNTm5uSjB5M3FmaWVDcm1OdlljdDh1dnRpVjQxVXZsU2U2YXBBZmswZlkxRmJXeCtOd2ZtcHZ0VGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiYmluIjogewotICAgICAgICAiYWNvcm4iOiAiYmluL2Fjb3JuIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybi1qc3giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4tanN4Ly0vYWNvcm4tanN4LTUuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ycTlzK0pOaGYwSUNoanREWHhsbEo3ZzQxb1prNVNsWHRwMExId3lBNWNlanduN3ZLbUtwNHBQcmk2WUVlUHYyUFU2NXNBc2VnYlh0SWlubURGRFhnUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWNvcm4iOiAiXjYuMC4wIHx8IF43LjAuMCB8fCBeOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FqdiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMTIuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWp2Ly0vYWp2LTYuMTIuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItajNmVkxndlRvNTI3YW55WXlKT0dUWUpiRyt2bm5RWXZFMG01bW1rYzFUSytueEFwcGtDTE1JTDBhWjRkYmxWQ05vR1NoaG0ra3pFNFpVeWtCb01nNGc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjEiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiXjIuMC4wIiwKLSAgICAgICAgImpzb24tc2NoZW1hLXRyYXZlcnNlIjogIl4wLjQuMSIsCi0gICAgICAgICJ1cmktanMiOiAiXjQuMi4yIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9lcG9iZXJlemtpbiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYW5zaS1lc2NhcGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktZXNjYXBlcy8tL2Fuc2ktZXNjYXBlcy00LjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ0tYajVBTHJLV1FMc1lHOWpsVFJtUi94S2x1eEhWK1o5UUV3TklnQ2ZNMS91d1BNQ3V6VlZuaDVtd1RkK091Qlpjd1NJTWJxc3NOV1JtMWxFNTFRYVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjIxLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTYuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1US1k1cHlCa0h5QURPUFlsUlQ5THg2RjU0NG1QbDB2UzVFdzdCSjQ1aEEwOFErdDNHamJ1ZUxsaUJXTjNzTUlDazYreTdIZHl4U3pDNGJXUzhiYUJkZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXJlZ2V4P3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemJCOXJDSkFUMXJiamlWRGIyaHFLRkhOWUx4Z3RrOE5VUnhaM0lad0QzRjZOdHhiWFpRQ25uU2kxTGt4K0lEb2hkUGxGcDIyMndWQUxJaGVaSlFTRWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hbnltYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnltYXRjaC8tL2FueW1hdGNoLTMuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LTVJlRlVyMEI0dCtEK09Ca2pSM0tZcXZvY3AyWGFTek81NVVjQjZtZ1FNZDNLYmNFK21XVHl2VlY3RC96c2RFYk5uVjZhY1pVdXRraUhRWHZUcjFSdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJub3JtYWxpemUtcGF0aCI6ICJeMy4wLjAiLAotICAgICAgICAicGljb21hdGNoIjogIl4yLjAuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXJncGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJncGFyc2UvLS9hcmdwYXJzZS0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOCs5V3FlYmJGenBYOU9SK1dhNk8yOWFzSW9nZVJNemNHdEFJTmRwTUhIeUFnMTBmMDVhU0ZWQmJjRXFHZi9QWHcxRWpBWitxMi9iRUJnM0R2dXJLM1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIlB5dGhvbi0yLjAiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FzeW5jIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzeW5jLy0vYXN5bmMtMy4yLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWh0Q1VEbHh5eUNMTWdhTTN4WGcwQzBMVzJ4cWZ1UTZwMDVwQ0VJc1h1eVErYTFrb1lLVHVCTXpSTndteWJmTGd2SkRNZDByMUxUbjQrRTBUaTZDMkFBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hdWRpdC1jaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hdWRpdC1jaS8tL2F1ZGl0LWNpLTcuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QampFZWpsU1Q1N1MvYURiZVdMaWMwZ2xKOENObC9la1kza2ZHRlBNclBrbXVhWWFES2NNSDBGOXg5eVM5VnA2VVJodWVmU0N1YmwvRzBZMnI2b1AwZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3Jvc3Mtc3Bhd24iOiAiXjcuMC4zIiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl40LjAuMCIsCi0gICAgICAgICJldmVudC1zdHJlYW0iOiAiNC4wLjEiLAotICAgICAgICAiamp1IjogIl4xLjQuMCIsCi0gICAgICAgICJqc29uc3RyZWFtLW5leHQiOiAiXjMuMC4wIiwKLSAgICAgICAgInJlYWRsaW5lLXRyYW5zZm9ybSI6ICIxLjAuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMC4wIiwKLSAgICAgICAgInRzbGliIjogIl4yLjAuMCIsCi0gICAgICAgICJ5YXJncyI6ICJeMTcuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJhdWRpdC1jaSI6ICJkaXN0L2Jpbi5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtamVzdC8tL2JhYmVsLWplc3QtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tUmlqbktpbWhHRE1zaXpUdkJUV290d05wenJrSHIrVnZaVVFCb2YyQXVmWEtCOE5YckwxVzY5VEcyMEV2T3o3YWV2eDZGVEpJYUJ1QmtZeFM4em9sZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiMzAuMC41IiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4yMC41IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNy4wLjAiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LWplc3QiOiAiMzAuMC4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMTEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1pc3RhbmJ1bC8tL2JhYmVsLXBsdWdpbi1pc3RhbmJ1bC03LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQzVPekVOU3gvQStndDd0NFZIMUkyWHNmbHh5UFVtWFJGUEtCeHQzM3huY2RPbXE3b1JPVk0zYlp2OVlzamprdjhPSllETWErdEt1S012cVUvSDN4ZHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMC4wIiwKLSAgICAgICAgIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6ICJeMS4wLjAiLAotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMyIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItaW5zdHJ1bWVudCI6ICJeNi4wLjIiLAotICAgICAgICAidGVzdC1leGNsdWRlIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0Ly0vYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QtMzAuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16VFBNRTNwSTUwTnNGVzhaQmFWSU9lQXh6RVk3WEhsbVdlWFh1OXNySSs5a05mekNVVHk4TUZhbjQ2eE9HWlk4TlpUaE1xcStlM3FaVUtzdlhiYXNuUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMjcuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMjcuMyIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheC8tL2JhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4LTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FL1ZsQUV6UnJzTEViMitkdjh5cDNibzRzY29mM2w5blI0bHJsZCtJeTVOeVZxZ1ZZVUpuREFtdW5raFBNaXNSSTMyUWM0aVJpejQyNWQ4dk0rKzJmZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzIjogIl43LjguNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1iaWdpbnQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWNsYXNzLXByb3BlcnRpZXMiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3Mtc3RhdGljLWJsb2NrIjogIl43LjE0LjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LWF0dHJpYnV0ZXMiOiAiXjcuMjQuNyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6ICJeNy4xMC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWpzb24tc3RyaW5ncyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6ICJeNy4xMC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IiOiAiXjcuMTAuNCIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1wcml2YXRlLXByb3BlcnR5LWluLW9iamVjdCI6ICJeNy4xNC41IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdCI6ICJeNy4xNC41IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIHx8IF44LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wcmVzZXQtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcHJlc2V0LWplc3QvLS9iYWJlbC1wcmVzZXQtamVzdC0zMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStZSGVqRDVpVFdJNDZjWm1jYy9ZdFg0Z2FLQnRkcUNIQ1ZmdVZpbml6VnBibXlqTzN6WW1ldXlGZGZBOGR1UnFRWmZnQ0FNbHNmbWtWYkorZTJNQUp3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IjogIjMwLjAuMSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjExLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhbGFuY2VkLW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Jhc2U2NC1qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYXNlNjQtanMvLS9iYXNlNjQtanMtMS41LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFLcGFZbEhuOHQ0U1ZiT0hDeStiNStLS2d2UjR2cnNEOHZidnJiaVFKcHM3ZktEVGtqa0RyeTZqaTByVUpqQzBremJOZVBMd3p4cThpeXBvNDFxZVdBPT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYm9keS1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYm9keS1wYXJzZXIvLS9ib2R5LXBhcnNlci0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMDJxdkFheHY4dHA3ZkJhL213MWdhOThPR20rZUNicXpKT0tvUnQ3MHNMbWZFRWkranlCWVZUREdmQ0wvazA2LzRFTWsvejAxZ0NlN0hvQ0gvZjJMVGc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJ5dGVzIjogIl4zLjEuMiIsCi0gICAgICAgICJjb250ZW50LXR5cGUiOiAiXjEuMC41IiwKLSAgICAgICAgImRlYnVnIjogIl40LjQuMCIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICJeMi4wLjAiLAotICAgICAgICAiaWNvbnYtbGl0ZSI6ICJeMC42LjMiLAotICAgICAgICAib24tZmluaXNoZWQiOiAiXjIuNC4xIiwKLSAgICAgICAgInFzIjogIl42LjE0LjAiLAotICAgICAgICAicmF3LWJvZHkiOiAiXjMuMC4wIiwKLSAgICAgICAgInR5cGUtaXMiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0xLjEuMTIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlUOVVqVzNyMFVXNWMxUTdHVHdsbHB0WHdodlltRXpGaHpNZlo5SDdGUVd0K3VaZVBqWlBqQlAvVzFaRXlaMXR3R1dvbTUvNTZURjRsUGNxam5ESGNnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIsCi0gICAgICAgICJjb25jYXQtbWFwIjogIjAuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9icmFjZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2VzLy0vYnJhY2VzLTMuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15UWJYZ08vT1NaVkQySXNpTGxybys3SGY2UTE4RUpyS1NFc2RvTXpLZVBLWGN0M2d2RDhvTGNPUWRJekd1cHI1RmorRURlOGdPL2x4YzFCemZNcHh2QT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmlsbC1yYW5nZSI6ICJeNy4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYnJvd3NlcnNsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4yNS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2Vyc2xpc3QvLS9icm93c2Vyc2xpc3QtNC4yNS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jREd2MWtrREk0LzBlNXlPTjl5TTVHLzBBNXU4c2Y1VG5tZFg1QzlxSHpJOVBQdSsrc1E5emptMWs5TmlPcmYzcmlZNE9rSzB6U0dxZnZKeUpzZ0NCUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9icm93c2Vyc2xpc3QiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vYnJvd3NlcnNsaXN0IgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDE3MzUiLAotICAgICAgICAiZWxlY3Ryb24tdG8tY2hyb21pdW0iOiAiXjEuNS4yMDQiLAotICAgICAgICAibm9kZS1yZWxlYXNlcyI6ICJeMi4wLjE5IiwKLSAgICAgICAgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiXjEuMS4zIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeNiB8fCBeNyB8fCBeOCB8fCBeOSB8fCBeMTAgfHwgXjExIHx8IF4xMiB8fCA+PTEzLjciCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JzLWxvZ2dlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icy1sb2dnZXIvLS9icy1sb2dnZXItMC4yLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBkOERDb3htYmdjN2h5UEtPdnh0cU5jallvT3NBQlBRZGNDVWpHcDNkNDJWUjJDWDFPUmhrMkE4N29xcXU1UjFrays3Nm5zeFp1cGtteWQrTVZ0Q29nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjIueCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ic2VyLy0vYnNlci0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1F4VE5FL0dBZklJcm1ITFVFM29KeXA1Rk82SFJCZmhqbnc0L3dNbUE2M1pHREpuV0JtZ1kvbHlRQnBuRFVrR21BaGJTZTM5dHgyZC9pVE9BZmdsd1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtaW50NjQiOiAiXjAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnVmZmVyLy0vYnVmZmVyLTYuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GVGlDcE54dHdpWlpIRVpiY2JUSWNaakVSVklDbjl5cS9wREZrVGw5NS9BeHpEMW5hQmN0TjdZTzY4cmlNL2dMU0RZN3Nkck1ieThob2ZBRFl1dXFPQT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCi0gICAgICAgIH0KLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhc2U2NC1qcyI6ICJeMS4zLjEiLAotICAgICAgICAiaWVlZTc1NCI6ICJeMS4yLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2J1ZmZlci1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1ZmZlci1mcm9tLy0vYnVmZmVyLWZyb20tMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUUrWFFDUndTYmFhaUNodHY2azZEd2djK2J4K0JzNnZ1S0pISGw1a294L0JhS2JoaVh6cVFPd0s0Y08yMnlFbEdwMk9DbWp3VmhUM0hteGd5UEduSmZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2J5dGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J5dGVzLy0vYnl0ZXMtMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9OZjdUeXpUeDZTM3lSSk9iT0FWNzk1NnI4Y3IyK09qOEFDNWR0OHdTUDNCUUFvZVg1OE5vSHlDVThQOHpHa05YU3RqVFNpNmZ6TzZGMHBCZGNZYkVnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzLy0vY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNwMWFibEowaXZEa1N6amNhSmR4RXVuTjUvWHZrc0ZKMnNNQkZmcTZ4MHJ5aFFWLzJiL0t3RmUyMWNNcG1IdFBPU2lqOEs5OS93U2ZvRXVUT2JtdU1RPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhbGwtYm91bmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbC1ib3VuZC8tL2NhbGwtYm91bmQtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSt5czk5N1U5NnBvNEt4L0FCcEJDcWhBOUV1eEphUVdEUWc3Mjk1SDRoQnBodjNJWmcwYm9CS3V3WXB0NFlYcDZNWjVBbVpRblUvdHlNVGxScGFTZWpnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsLWJpbmQtYXBwbHktaGVscGVycyI6ICJeMS4wLjIiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYWxsc2l0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbHNpdGVzLy0vY2FsbHNpdGVzLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QOEJqQXNYdlpTK1ZJRFVJMTFoSENRRXY3NFlUNjdZVWk1SkpGTldJcUwyMzVzQm1qWDQrcXg5TXV2bHM1aXZ5TkVOY3R4NDZ4UUxRM2FUdUU3c3NhUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NhbWVsY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW1lbGNhc2UvLS9jYW1lbGNhc2UtNS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwyOFNUQjE3MG53V1M2M1VqdGxFT0UzZGxkUUFwYUpYWmtPSTF1TUZmemYzclJ1UGVnSGFIZXN5ZWUrWXhRK1c2U3ZSRFFWNlVyZE9kUmlSMTUzd0pnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2FuaXVzZS1saXRlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMwMDAxNzM3IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW5pdXNlLWxpdGUvLS9jYW5pdXNlLWxpdGUtMS4wLjMwMDAxNzM3LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CaWxvTGlYdFFOclk1VXlGMCsxblNKTFhVRU51aGthMnB6eTJGeDVwR3hxYXZkcnhTQ1c0VTZQbi9Qb0czRWZzcGkyZnJSYkhwQlYyWHNyUEU2RURsdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9icm93c2Vyc2xpc3QiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJ0aWRlbGlmdCIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3RpZGVsaWZ0LmNvbS9mdW5kaW5nL2dpdGh1Yi9ucG0vY2FuaXVzZS1saXRlIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9haSIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIkNDLUJZLTQuMCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2hhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay00LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0tuYmhGeVJJWHBVdWV6OGlCTW15RWE0bmJqNElPUXl1aGMvd3k5a1k3L1dWUGN3SU85VkE2NjhQdThSa083KzBHNzZTTFJPZXl3OUNwUTA2MWk0bUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMS4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGs/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jaGFyLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXItcmVnZXgvLS9jaGFyLXJlZ2V4LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rV1dYenR2WjVTQlFWK2VSZ0tGZWg4cTVzTHVaWTIrOFdVSXpseFdWVGcrb0d3WTE0cXlseDFLYkt6SGQ4UDZaWWtBZzB4eUlEVTlKTUhoeUpNWjFqdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jaS1pbmZvIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NpLWluZm8vLS9jaS1pbmZvLTQuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sKzJiTlJNaVFnY2ZJTFVpMzNsYWJBWllJV2xIMWtXRHArZWNObzVpaXNSS3JibTB4Y1J5Q3d3NzEvWVUwRmt3MG1BRnB6OWJKYXlYUGpleTZ2a21hUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpYmlyYWotcyIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9janMtbW9kdWxlLWxleGVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nqcy1tb2R1bGUtbGV4ZXIvLS9janMtbW9kdWxlLWxleGVyLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VWDBPd21ZUllRUWV0ZnJMRVplZXdJRkZJK3dTVG9mQytwTUJMTnVIM1JVdXUveHpHMW96ODRVQ0VET1NvUWxOM2ZaNCtBem1WNTBaWXZHcWtNaDl5QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGktY3Vyc29yIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaS1jdXJzb3IvLS9jbGktY3Vyc29yLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hQ2o0TzV3S3lzempNbURUNHRaajkza3h5eWROL0s1elBXU0NlNi8wQVYvQUExcHFlNVpCSXcwYTJaZlBRVjdsTDUveWI1SHNVcmVKNlVGQUYxdEVRdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZXN0b3JlLWN1cnNvciI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2xpLXRydW5jYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaS10cnVuY2F0ZS8tL2NsaS10cnVuY2F0ZS00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItblBkYUZkUTBoL0dFaWdiUENsejExRDB2L1pKRXd4bWVWWkdlTW8zWjVTdFB0VVRrQTlvMWxENlF3b2lyWWlTRHpiY3duMlhjandtQ3A2OFcxSVM0VEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2xpY2UtYW5zaSI6ICJeNS4wLjAiLAotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl43LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGktdHJ1bmNhdGUvbm9kZV9tb2R1bGVzL2Vtb2ppLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMTAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTEwLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRUMrMG9VTVkxUnFtNE82TExyZ2p0WUR2Y1ZZVHk3Y2hEbk00UTcwMzB0UDRLd2ozdS9wUjZnUDl5Z25wMkNKTUs1R3ErOVEyb3FtckZKQXowMURYanc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2xpLXRydW5jYXRlL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdpZHRoLTcuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10c2FUSWtLVzliNE4rQUVqK1NWQStXaEp6Vjcvek1oY1N1NzhtTEtXU2s3Y1hNT1NIc0JLRldVczBmV3dxOFF5SzNNZ0pCUVJYNkdiaTRrWWJkdkdrUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeMTAuMy4wIiwKLSAgICAgICAgImdldC1lYXN0LWFzaWFuLXdpZHRoIjogIl4xLjAuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl43LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGl1aSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGl1aS8tL2NsaXVpLTguMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CU2VObnl1czc1QzQvL05ROWdRdDEvY3NUWHlvLzhTYithZkxBa3pBcHRGdU1zb2Q5SEZva0dOdWRacGkvb1FWNzNoblZLK3NSKzVQVlJNZCtEcjdZUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NsaXVpL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NsaXVpL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTguMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NU2pZemNXTk9BMGV3QUhwejBNeHBZRnZ3ZzZ5ankxTkczeHRlb3F6NjQ0VkNvL1JQZ25yMS9HR3QraWMzaUpUelE4RXUzVGRNMTRTYXduVlVtR0U2QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGl1aS9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItenltbTUrdStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25TdUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGl1aS9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0t5UVJRcGpKMHNJcDYyRXJTWmRHc2pNSldzYXA1b1JOaWhIaHU2RzdKVk8vOWpJQjZVeWV2TCt0WHVPcXJuZzhqL2N4S1RXeVdVd3ZTVHJpaVp6L2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZW1vamktcmVnZXgiOiAiXjguMC4wIiwKLSAgICAgICAgImlzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGl1aS9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWTM4VlBTSGNxa0ZyQ3BGblE5dnVTWG1xdXV2NW9YT0twR2VUNmFHcnIzbzNHYzlBbFZhNkpCZlVTT0NuYnhHR1pGKy8wb29JN0tyUHVVU3p0VWRVNUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2xpdWkvbm9kZV9tb2R1bGVzL3dyYXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cmFwLWFuc2kvLS93cmFwLWFuc2ktNy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlWR0lqMmthbUxTVHh3Nk5zWmpvQnhmU3dzbjB5Y2Rlc21jNHArUTIxYzV6UHVaMXBsK05meFZkeFB0ZEh2bU5WT1E2WFNZRzRBVXR5dC9GaTdEMTZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl40LjAuMCIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMS4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay93cmFwLWFuc2k/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jby8tL2NvLTQuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RVmIwZE01SHZHK3VheGl0bTh3T05sN2psdHg4ZHFoZlUzM0RjcXRPWmNMU1ZJS1NERExEaTcrMExiQUtpeUk4aEQ5dTQybTJZeFhTa01HV1RoYWVjUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAiaW9qcyI6ICI+PSAxLjAuMCIsCi0gICAgICAgICJub2RlIjogIj49IDAuMTIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sbGVjdC12OC1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xsZWN0LXY4LWNvdmVyYWdlLy0vY29sbGVjdC12OC1jb3ZlcmFnZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbEhsNGQ1L09ORWJMbEp2YUpOdHNGL0x6K1d2QjA3dTJ5Y3FUWWJkcnE3VXlwRFhhaWxFUzR2YWxZYjJlV2lKRnhabFZtcEdla2Zxb3hRaHp5RmRUNFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3IvLS9jb2xvci0zLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUJsN2RaSTlFTk42ZlVHQzdtV3BNVFBOSG1XVVNOYW45dHVXTjZhaGg1WkxOazliYUxKT25TTWxyUWtIY3JmRmd6Mi9SaWdqVVZBamR4MzZWY2VtS0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLWNvbnZlcnQiOiAiXjEuOS4zIiwKLSAgICAgICAgImNvbG9yLXN0cmluZyI6ICJeMS42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJSRUNQc2o3aXUveGI1b0tZY3NGSFNwcEZObnNqLzUyT1ZUUktiNHpQNW9uWHdWRjN6Vm1tVG9OY09mR0MrQ1JEcGZLL1U1ODRmTWczOFpIQ2FFbEtRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAifjEuMS40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2xvci1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLW5hbWUvLS9jb2xvci1uYW1lLTEuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kT3krM0F1VzNhMndOYlpISXVNWnBUY2dqR3VMVS91QkwvdWJjWkY5T1hiRG84ZmY0Tzh5VnA1QmYwZWZTOHVFb1lvNXE0Rng3ZFk5T2dRR1hnQXNRQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3Itc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLXN0cmluZy8tL2NvbG9yLXN0cmluZy0xLjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2hyVmF3UUZvam5adjZ4TTQwYW54NENrb0RQK2Zac3cvWmVyRU1zVy9weXpzUmJFbHBzTC9EQlZXN3EzRXh4d3VzZE5YSTNsWHB1aEVaa3pzOHA1RWc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAiXjEuMC4wIiwKLSAgICAgICAgInNpbXBsZS1zd2l6emxlIjogIl4wLjIuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3Ivbm9kZV9tb2R1bGVzL2NvbG9yLWNvbnZlcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjkuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVFmQVV0ZCt2RmRBdEZRY0M4Q0N5WXQxZllXeFNxQWlLMmNTRDZ6REI4TjNjcHNFQkF2UnhwOXpPR2c2Ry9TSEhKWUFUODgvYXovSXVER0FMc05WYkdnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb2xvci1uYW1lIjogIjEuMS4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2xvci9ub2RlX21vZHVsZXMvY29sb3ItbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNzJmU2VuaE13MkhaTVRWSGVDQTlLQ21wRUlieldpUXNqTitCSGNCYlM5dnIxbXR0K3ZKalBka3NJQk5VbUtBVzhURlVEUEpLNVNVVTNRaEU5TkVYRHc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbG9yZXR0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3JldHRlLy0vY29sb3JldHRlLTIuMC4yMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSWZFRHh3b1dJamtlWEwxZVhjRGlvdzRVYktqaExkcTYvRXVTVlI5R01ON0tWSDNyOWdRODNlNzNoc3oxTmQxVDNpamQ1eHYxd2NXUllPK0Q2a0NJMnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sb3JzcGFjZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvcnNwYWNlLy0vY29sb3JzcGFjZS0xLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmd2S0ppdVZ1MWlnQlVGMmtFalJDWlhvbDZ3aWlHYlk1aXBML29WUHdtMEJMOXNJcE1Jek04SUs3dnd1eElJek9YTVYzRXk1dyt2eGhtMHJSL1ROOHc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yIjogIl4zLjEuMyIsCi0gICAgICAgICJ0ZXh0LWhleCI6ICIxLjAueCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMTQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXItMTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0ydU05cllqUHZ5cTM5TndMUnFhaUx0V0h5REMxRnZyeUpEYTJBVFRWaW1zNVlBUzRQdXBzRVFzRHZQMTRGcWhGcjBQNDlDWUR1Z2k1OXhheEpsVFhSQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb25jYXQtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbmNhdC1tYXAvLS9jb25jYXQtbWFwLTAuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vU3J2NGRzd3lRTkJmb2hHcHo5bzZZYjNHejNTclVEcUJINXJUdWhHUjdhaHRsYllLblZ4dzJiQ0ZNUmxqYUE3RVhIYVhaOHdzSGRvZEZ2YmtoS21xZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb250ZW50LWRpc3Bvc2l0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtZGlzcG9zaXRpb24vLS9jb250ZW50LWRpc3Bvc2l0aW9uLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BdTluUkw4Vk5VdXQvWFN6YlFBMzgrTTc4ZHpQNEQrZXFnM2dmSkhNSUhIWWEzYmcwNjd4ajFLeE1VV2orVlVMYmlaTW93S25nRkZiS2N6VXJOSjFtZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2FmZS1idWZmZXIiOiAiNS4yLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29udGVudC10eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtdHlwZS8tL2NvbnRlbnQtdHlwZS0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItblRqcWZjQkZFaXBLZFhDdjRZRFFXQ2ZtY0xaS204MWxkRjBwQW9wVHZ5ckZHVmJjUjZQL1ZBQWQ1RzdOKzB0VHI4UXFpVTB0RmFkRDZGSzROdEp3T0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3ZwNDU5SHJWMkZFSjFDQXNpMUt1K01ZM2thc0gxOVRGeWtUejJ4V21NZXE2YmsyTlUzWFh2ZkorUTYxbTB4a3RXd3QrMUhTWWYzSlpzVG1zM2FSSmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29va2llIjogewotICAgICAgInZlcnNpb24iOiAiMC43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nvb2tpZS8tL2Nvb2tpZS0wLjcuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWtpNVhuS3VmNzUwbDUwdUdUbGx0NmtLSUxZNG5RMWVOSVFhdG9YRUJ5WjVkV2duS3FibnFtVHJCRTVCNE43bHJNSktRMnl0V01pVE8ybzB2NkV3L3c9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29va2llLXNpZ25hdHVyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb29raWUtc2lnbmF0dXJlLy0vY29va2llLXNpZ25hdHVyZS0xLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDc2dVU3M3VsU1hyRDFVWEY0S0UyVE14VlZ3aHNuQ2dmQXlUZzlrOFA2S0daamxYS3JPTGU0ZEpRS0kzQnhpNXdqZXNab0ZYSldFbE5XQmpQWk1iaGc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjguNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29ycy8tL2NvcnMtMi44LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtJSGJMSnF1NzNSR3IvaG5ick85dUJlaXhOR3V2U1FqdWwvamRGdlMvS0ZTSUgxaFdWZDFuZzd6T0h4K1lyRWZJbkxHN3E0bjZHSFE5Y0R0eHYvUDZnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJvYmplY3QtYXNzaWduIjogIl40IiwKLSAgICAgICAgInZhcnkiOiAiXjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nyb3NzLXNwYXduIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Nyb3NzLXNwYXduLy0vY3Jvc3Mtc3Bhd24tNy4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVWMlFPV1Aybld6c3kyYU1wOGFSaWJoaTlkbHpGNUhnaDVTSGFCOU9pVEdFeURUaUpKeXgwdXk1MVFYZHlXYnRBSE51YTRYSnpVS2NhM096S1VkM3ZBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwYXRoLWtleSI6ICJeMy4xLjAiLAotICAgICAgICAic2hlYmFuZy1jb21tYW5kIjogIl4yLjAuMCIsCi0gICAgICAgICJ3aGljaCI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiNC40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctNC40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtjS0NxaWZ0QkpjWnIrKzd5a29ESUV3U2EzWFdvd1RmTlBvOTJCWXhqWGl5WUVWclVRaDJhTHloeEJDd3d3K2hlb3J0VUZ4RUpZY1J6b3NzdFRFQllRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtcyI6ICJeMi4xLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWRlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVkZW50Ly0vZGVkZW50LTEuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GMVorNVVDRnBtUVV6SmExMWFnYnlQVk1icGdUL3FBMy9TS3lKMWp5QmdtN2RVY1VFYTh2OUp3RGtlclNRWGZha0J3RmxqSXhoT0pxR2tqVXdaOUZTQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmFiZWwtcGx1Z2luLW1hY3JvcyI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiYmFiZWwtcGx1Z2luLW1hY3JvcyI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVlcC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwLWlzLy0vZGVlcC1pcy0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb0lQemtzbVRnNC9NcmlpYVlHTytva1hEVDd6dG4vdzNFcHR2LytnU0lkTWRLc0pvMHU0Q2ZZTkZKUHkrNFNLTXVDcUd3Mnd4bkErVVJNZzN0OGEvYlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVlcG1lcmdlIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZXBtZXJnZS8tL2RlZXBtZXJnZS00LjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3NVcWJNRWM3N1hxcGROTzdGUnlSb2crZVczcGgrR1lDYmorcksrdVl5Uk11d3NWeTByTWlWdFBuK1FKbEtGdldQLzFQWXBhcHFZbjBNZTJrbkZuK0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlcGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwZC8tL2RlcGQtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc3bkg2UDZkeURpb0pvZ0FBR3ByR3BDdFZJbUpocFBrL3JvQ3pkYjNmSWg2MS9zL25Qc2ZSNm9ueU13a0NBUi9PbEMzeUJDMGxFU3ZVb1FFQXNzSXJ3PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RldGVjdC1saWJjIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1saWJjLy0vZGV0ZWN0LWxpYmMtMS4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBHandoc21zcDRrTDJSVHowOHdjT2xHTjgzb3RscUhlRC9aNVQ4R1haQisvWWNwUS9kZ28rbGJVOFpzR3hWMEhJdnFxeG85bDdtcVl3eVlNRDliS0RnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAiYmluIjogewotICAgICAgICAiZGV0ZWN0LWxpYmMiOiAiYmluL2RldGVjdC1saWJjLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RldGVjdC1uZXdsaW5lIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1uZXdsaW5lLy0vZGV0ZWN0LW5ld2xpbmUtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRMeit4L3ZFWG0vWTdQN3duMUVKRk5MeFlwVUQ0VGdNb3N4WTZmQVZKVW5KTWJ1cEhCT25jeHlXVUc5T3BUYUg5RUJEN3VGSTVMZkVnbU1PYzU0RHNBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZHVuZGVyLXByb3RvIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2R1bmRlci1wcm90by8tL2R1bmRlci1wcm90by0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS0lOL25ESkJRUmNYdzBNTFZoWkU5aVFIbUc2OHFBVklCZzlDcW1VWWptUUloZ2lqOVU1TUZ2cnFrVUw1RmJ0eXl6WnVPZU90MHpkZVJlNFVZN2N0K0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYmluZC1hcHBseS1oZWxwZXJzIjogIl4xLjAuMSIsCi0gICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKLSAgICAgICAgImdvcGQiOiAiXjEuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2R1cGxleGVyIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2R1cGxleGVyLy0vZHVwbGV4ZXItMC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWp0RDZZRzM3MFpDSWkvOUdUYUpLUXhXVFpEMDQ1KzRSNGhUay94MVV5b3FhZHlKOXg5Q2dTaTFSbFZEUUY4VTJzeExMU25Ga0NhTWlocWxqSElXZ01nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Vhc3Rhc2lhbndpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vhc3Rhc2lhbndpZHRoLy0vZWFzdGFzaWFud2lkdGgtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUk4OFRZWldjOVhpWUhSUTQvM2M1cmpqZmdramhMeVcybHVHSWhlR0VSYk5RNk9ZN3lUeWJhblNwRFhaYTh5N1ZVUDlZbURjWWErZXlxNGNhN2lMcVdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VlLWZpcnN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VlLWZpcnN0Ly0vZWUtZmlyc3QtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdNd205TGhSVW8rV1VhUk4rdlJ1RVRxRzg5SWdacGhWU05rZEZnZWI2c1MvRTRPckRJTjd0NDhDQWV3U0hYYzZDOGxlZkQ4S0tmcjV2WTYxYnJRbG93PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lZmZlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjE3LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VmZmVjdC8tL2VmZmVjdC0zLjE3LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5ra245bjF6aHkzMERxME1wUWF0RENIN25mWW5PSWllYmtPSE54bW12b1ZuRURLQ3RvKzJad0REV0ZHemNOL29qd2ZxalJYV0dDOUxvOTFLNWt3WkNnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAc3RhbmRhcmQtc2NoZW1hL3NwZWMiOiAiXjEuMC4wIiwKLSAgICAgICAgImZhc3QtY2hlY2siOiAiXjMuMjMuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZWxlY3Ryb24tdG8tY2hyb21pdW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjUuMjA4IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGVjdHJvbi10by1jaHJvbWl1bS8tL2VsZWN0cm9uLXRvLWNocm9taXVtLTEuNS4yMDgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW96WnlpYmVob2U3dE9oTmFmMTZsS21salZmKzNucFpjSklFYkpSVmZ0VnNtQWc1VGVBMW1HUzlkVkNaek93cjJ4VDd4SzE1VjBwNytHWnFTUGdrdVBnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VtaXR0ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbWl0dGVyeS8tL2VtaXR0ZXJ5LTAuMTMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGVXd2F3azZyNXlSOWpGZ25ES1l0NHNMUzBMbUhKSmkzWk9uYjUvSmRiWXdqM25XK0Z4UW5ISWpoQkt6OFlMQzdvUk5QVk05TlE0N0kzQ1Z4MzRlcVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VtaXR0ZXJ5P3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW1vamktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC05LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDE4RGFKc1hTVWsyKzQycHY4bUxzNWpKVDJocUZrRkU0ajIxd09tZ2JVcXNaMmhMNzJOc1VVNzg1ZzlSWGdvM3MwWk5nVmw0MlRpSHAzWnRPdi9WeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW5hYmxlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmFibGVkLy0vZW5hYmxlZC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQUtyTjk4a3V3T3pNSWRBaXpYR0k4NlVGQm9vMjZDTDIxVU03NjN5MWgvR01TSjQvT0hVOWsyWWxzbUJweVNjRm8vd2JMeldRSkJNQ1c0K0lPMy8rT1E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VuY29kZXVybCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmNvZGV1cmwvLS9lbmNvZGV1cmwtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVEwbjlIUmk0bTZKdUdJVjFlRmxtdkpCN1pFVnh1OTNJck15aU1zR0MwbHJNSk1XelJneDZXR3F1eWZRZ1pWYjMxdmhHZ1huZm1QTk5YbXhuT2tSQnJnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Vudmlyb25tZW50IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vudmlyb25tZW50Ly0vZW52aXJvbm1lbnQtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhVdG9Qa01nZ2J6ME1QeVBpSVdyMUtwNGFlV0pqRFo2U012VVJoaW1qZFpnc1J1RHBsRjUvczloY2dHaHlYTWhzKzZ2cG51b2laMmtGaXUzRk1uUzhRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXJyb3ItZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXJyb3ItZXgvLS9lcnJvci1leC0xLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2RGSE5tcWVGU0V0MlpCc0NyaW9yS25uM1oycGorZmQ5a21JNlFvV3c0Ly9ETCtpY0VCZmMwVTdxSkNpc3FyVHNLVGp3NGZORnkycFc5T3FTdEQ4NGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYXJyYXlpc2giOiAiXjAuMi4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZGVmaW5lLXByb3BlcnR5Ly0vZXMtZGVmaW5lLXByb3BlcnR5LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lM25SZmdmVVo0ck5HTDIzMmdVZ1gwNlFOeXllejA0S2RqRnJGK0xUUm9PWG1yT2dGS0RnNEJDZHNqVzhFblQ2OWVxZFlHbVJwSndpUFZZTnJDYVczZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcy1lcnJvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZXJyb3JzLy0vZXMtZXJyb3JzLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aZjVIMkt4dDJ4alR2Ykp2UDJaV0xFSUN4QTZqK2hBbU16SWx5cHk0eGNCZzF2S1ZueDg5V3kwR2JTK2tmNWN3Q1ZGRnpkQ0ZoMlhTQ0ZOVUxTNmNzdz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcy1vYmplY3QtYXRvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtb2JqZWN0LWF0b21zLy0vZXMtb2JqZWN0LWF0b21zLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GR2dIMmg4ektOaW05bGpqN2RhbmtGUGNJQ0lLOUNwNWJtK2MyZ1FTWWVQaHBhRzUrZXNyTE9EaWhJb3JuK1BlNkZHSnpXaFhRb3RQdjczalRhbGRYQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXMtZXJyb3JzIjogIl4xLjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2J1aWxkIjogewotICAgICAgInZlcnNpb24iOiAiMC4yNS45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2J1aWxkLy0vZXNidWlsZC0wLjI1LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNSYk9EaFl5UXgzcXA3WkV3enhPazRKQnFtRC9zZUpyelBhL2NHalkxVnRJbjVFMDlPaTkvZEI0SndjdG5mWjhROGlUN3Jpb1Z2NWsvRk5UL3VmNTRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImVzYnVpbGQiOiAiYmluL2VzYnVpbGQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGVzYnVpbGQvYWl4LXBwYzY0IjogIjAuMjUuOSIsCi0gICAgICAgICJAZXNidWlsZC9hbmRyb2lkLWFybSI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC1hcm02NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvYW5kcm9pZC14NjQiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL2Rhcndpbi1hcm02NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvZGFyd2luLXg2NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvZnJlZWJzZC1hcm02NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvZnJlZWJzZC14NjQiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL2xpbnV4LWFybSI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvbGludXgtYXJtNjQiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL2xpbnV4LWlhMzIiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL2xpbnV4LWxvb25nNjQiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL2xpbnV4LW1pcHM2NGVsIjogIjAuMjUuOSIsCi0gICAgICAgICJAZXNidWlsZC9saW51eC1wcGM2NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvbGludXgtcmlzY3Y2NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvbGludXgtczM5MHgiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL2xpbnV4LXg2NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvbmV0YnNkLWFybTY0IjogIjAuMjUuOSIsCi0gICAgICAgICJAZXNidWlsZC9uZXRic2QteDY0IjogIjAuMjUuOSIsCi0gICAgICAgICJAZXNidWlsZC9vcGVuYnNkLWFybTY0IjogIjAuMjUuOSIsCi0gICAgICAgICJAZXNidWlsZC9vcGVuYnNkLXg2NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvb3Blbmhhcm1vbnktYXJtNjQiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL3N1bm9zLXg2NCI6ICIwLjI1LjkiLAotICAgICAgICAiQGVzYnVpbGQvd2luMzItYXJtNjQiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL3dpbjMyLWlhMzIiOiAiMC4yNS45IiwKLSAgICAgICAgIkBlc2J1aWxkL3dpbjMyLXg2NCI6ICIwLjI1LjkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzY2FsYWRlIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FsYWRlLy0vZXNjYWxhZGUtMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdVajJxbHhhUXRPNGc2UHE1YzI5R1RjV0dEeWQ4aXRMOHpUbGlwZ0VDejNKZXNBaWlPS290ZDhKVTZvdEIzUEFDZ0c2eGtKVXlWaGJvTVMrYmplL2pBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNjYXBlLWh0bWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLWh0bWwvLS9lc2NhcGUtaHRtbC0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmlTdXBaNE9ldUd3cjY4bEdJZXltL2tzSVpNSm9kVUdPU0NaL0ZTblR4Y3Jla2J2cXJnZFV4bEpPTXBpamFLWlZqQUpyV3JHcy82Snk4T011eWo5b3c9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVR0cGNOSjNYQXp4M0dxOHNXUnpKYVZhalJzMHVWeEEyWUFrZGIxam0yWWtQejRHNmVnVUZBeUEzbjV2dEVJWmVmUGs1V2E0VVhiS3VTNWZLa0pXZGdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50IjogewotICAgICAgInZlcnNpb24iOiAiOS4zNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2xpbnQvLS9lc2xpbnQtOS4zNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1STkNIUlg1RXdkckVTeTNKYzlvOGllOEJvZytQZVl2dlNSOHNER29aeE5GVHZaNGRseFVCM1d6UTNiUU16dEZyU1JPREdyTExqOGc2T0Z1R1kvYWlRZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAZXNsaW50LWNvbW11bml0eS9lc2xpbnQtdXRpbHMiOiAiXjQuMi4wIiwKLSAgICAgICAgIkBlc2xpbnQtY29tbXVuaXR5L3JlZ2V4cHAiOiAiXjQuMTIuMSIsCi0gICAgICAgICJAZXNsaW50L2NvbmZpZy1hcnJheSI6ICJeMC4yMS4wIiwKLSAgICAgICAgIkBlc2xpbnQvY29uZmlnLWhlbHBlcnMiOiAiXjAuMy4xIiwKLSAgICAgICAgIkBlc2xpbnQvY29yZSI6ICJeMC4xNS4yIiwKLSAgICAgICAgIkBlc2xpbnQvZXNsaW50cmMiOiAiXjMuMy4xIiwKLSAgICAgICAgIkBlc2xpbnQvanMiOiAiOS4zNC4wIiwKLSAgICAgICAgIkBlc2xpbnQvcGx1Z2luLWtpdCI6ICJeMC4zLjUiLAotICAgICAgICAiQGh1bWFuZnMvbm9kZSI6ICJeMC4xNi42IiwKLSAgICAgICAgIkBodW1hbndob2NvZGVzL21vZHVsZS1pbXBvcnRlciI6ICJeMS4wLjEiLAotICAgICAgICAiQGh1bWFud2hvY29kZXMvcmV0cnkiOiAiXjAuNC4yIiwKLSAgICAgICAgIkB0eXBlcy9lc3RyZWUiOiAiXjEuMC42IiwKLSAgICAgICAgIkB0eXBlcy9qc29uLXNjaGVtYSI6ICJeNy4wLjE1IiwKLSAgICAgICAgImFqdiI6ICJeNi4xMi40IiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjYiLAotICAgICAgICAiZGVidWciOiAiXjQuMy4yIiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl40LjAuMCIsCi0gICAgICAgICJlc2xpbnQtc2NvcGUiOiAiXjguNC4wIiwKLSAgICAgICAgImVzbGludC12aXNpdG9yLWtleXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImVzcHJlZSI6ICJeMTAuNC4wIiwKLSAgICAgICAgImVzcXVlcnkiOiAiXjEuNS4wIiwKLSAgICAgICAgImVzdXRpbHMiOiAiXjIuMC4yIiwKLSAgICAgICAgImZhc3QtZGVlcC1lcXVhbCI6ICJeMy4xLjMiLAotICAgICAgICAiZmlsZS1lbnRyeS1jYWNoZSI6ICJeOC4wLjAiLAotICAgICAgICAiZmluZC11cCI6ICJeNS4wLjAiLAotICAgICAgICAiZ2xvYi1wYXJlbnQiOiAiXjYuMC4yIiwKLSAgICAgICAgImlnbm9yZSI6ICJeNS4yLjAiLAotICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKLSAgICAgICAgImlzLWdsb2IiOiAiXjQuMC4wIiwKLSAgICAgICAgImpzb24tc3RhYmxlLXN0cmluZ2lmeS13aXRob3V0LWpzb25pZnkiOiAiXjEuMC4xIiwKLSAgICAgICAgImxvZGFzaC5tZXJnZSI6ICJeNC42LjIiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMiIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgIm9wdGlvbmF0b3IiOiAiXjAuOS4zIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiYmluL2VzbGludC5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2VzbGludC5vcmcvZG9uYXRlIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaml0aSI6ICIqIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgImppdGkiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC1jb25maWctcHJldHRpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC4xLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1jb25maWctcHJldHRpZXIvLS9lc2xpbnQtY29uZmlnLXByZXR0aWVyLTEwLjEuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItODJHWlVqUlMwcC9qZ2FuZjZxMXJFTzI1VlNvSEgwaEtQQ1RyZ2lsbFBqZEkvM2JnQmhBRTFRekhySFRpempwUnZ5NnBHQXZLakRKdGsycEY5TkRxOHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiYmluIjogewotICAgICAgICAiZXNsaW50LWNvbmZpZy1wcmV0dGllciI6ICJiaW4vY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludC1jb25maWctcHJldHRpZXIiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiPj03LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNsaW50LXNjb3BlIjogewotICAgICAgInZlcnNpb24iOiAiOC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzbGludC1zY29wZS8tL2VzbGludC1zY29wZS04LjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc05YT2ZLQ243NHJ0OFJJQ0tNdkpTN1hLVi9YazlrQTdEeUpyOG1KaWszUzdDd2d5M3Fsa2tteVMydVFCM2ppSmc2Vk5kWmQvcERCSnUwbnZHMk5sVGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXNyZWN1cnNlIjogIl40LjMuMCIsCi0gICAgICAgICJlc3RyYXZlcnNlIjogIl41LjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE4LjAgfHwgXjIwLjkuMCB8fCA+PTIxLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9lc2xpbnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzbGludC12aXNpdG9yLWtleXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNsaW50LXZpc2l0b3Ita2V5cy8tL2VzbGludC12aXNpdG9yLWtleXMtNC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVoZGs1c2ZxY2VlLzlIL3JDT0ppa1l6NjdvMGEyVHcyaEdSUE9HMlkxUjJkZzdiclJlMXVHMHlhTlFESHUrVE8vdVFQRi81ZUNhcHZZU21IVWp0N0pRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2VzbGludCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNwcmVlIjogewotICAgICAgInZlcnNpb24iOiAiMTAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByZWUvLS9lc3ByZWUtMTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qNlBBUTJ1VXI3OVBaaEJqUDVDNWZobDhlMzlGbVJuT2pzRDVsR25XckZVOGkyRzc3NnRCSzcrblA4S3VRVVRUeUFaVXdmUXFYQWdyVkg1TWJIOUNZUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY29ybiI6ICJeOC4xNS4wIiwKLSAgICAgICAgImFjb3JuLWpzeCI6ICJeNS4zLjIiLAotICAgICAgICAiZXNsaW50LXZpc2l0b3Ita2V5cyI6ICJeNC4yLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xOC4wIHx8IF4yMC45LjAgfHwgPj0yMS4xLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXNsaW50IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3ByaW1hIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcHJpbWEvLS9lc3ByaW1hLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lR3VGRnc3VXBkYStnNHArUUh2blcwUnlUWC9TVmVKQkRNL2dDdE1BUk8wY0x1VDJIY0VLblRQdmhqVjZhR2VxckNCL3NiTm9wMEtzem0wanNhV1U0QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJlc3BhcnNlIjogImJpbi9lc3BhcnNlLmpzIiwKLSAgICAgICAgImVzdmFsaWRhdGUiOiAiYmluL2VzdmFsaWRhdGUuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNxdWVyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3F1ZXJ5Ly0vZXNxdWVyeS0xLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY2E5cHc5Zm9tRmNLUHZGTFhoQktVSzkwWnZHaWJpR092UkpOYmpsalk3czd1cS81WU80Qk96Y1l0SnFFeGR4OTlyRjZhQWNuUnhIbWNVSGN6NnNRc2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNS4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNyZWN1cnNlIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzcmVjdXJzZS8tL2VzcmVjdXJzZS00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS21mS0wzYjZHK1JYdlA4TjF2cjNUcTFrTC9vQ0ZnbjJOWVhFdHFQOC9MM3BLYXBVQTRHOGNGVmFvRjNTVTMyM0NENFh5cFIvZmZpb0hta3RpNi9UYWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNS4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc3RyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiNS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdHJhdmVyc2UvLS9lc3RyYXZlcnNlLTUuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NTWRBUnVWRVF6aU5UZUpEOERnTXFtaHdSMTFCUlEvY0JQK3BMdFlkU1RuZjNNSU84ZkZlaUlORWJYMzZaZE5sZlUvN0E5ZjNnVXc0OUIzb1FzdndCQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXN1dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3V0aWxzLy0vZXN1dGlscy0yLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1ZzY3FYazRPQ3A2OFNaMGRrZ0VLVmk2LzhpajMwMEtCV1RKcTMyUC9kWWVXVFN3SzQxV3lUeGFsTjFlUm1BNVo5VVUvTFg5RDdGV1NtVjlTQVl4Nmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0yLUNsYXVzZSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V0YWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXRhZy8tL2V0YWctMS44LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFJTDVGeDdtYXdWYTMwMGFsMkJuRUU0aU52bzFxRVR4THJQSS9vMDVMN3o2Z283ZkN3MUo2RVFtYks0Rm1KMkFTN2tnVkYvS0VaV3VmQmZkQ2xNY1BnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V2ZW50LXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudC1zdHJlYW0vLS9ldmVudC1zdHJlYW0tNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFBQ1hkdS85VkhQQnpjeWhkT1dSNS9JYWhoR01mMHJvVGVaSmZ6ejA3N0d3eWxjRGQ5MHlPSExvdWhtdjdHSjVYelBpNmVrYVFXZDhBdlBQMm5PdnBBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImR1cGxleGVyIjogIl4wLjEuMSIsCi0gICAgICAgICJmcm9tIjogIl4wLjEuNyIsCi0gICAgICAgICJtYXAtc3RyZWFtIjogIjAuMC43IiwKLSAgICAgICAgInBhdXNlLXN0cmVhbSI6ICJeMC4wLjExIiwKLSAgICAgICAgInNwbGl0IjogIl4xLjAuMSIsCi0gICAgICAgICJzdHJlYW0tY29tYmluZXIiOiAiXjAuMi4yIiwKLSAgICAgICAgInRocm91Z2giOiAiXjIuMy44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ldmVudC10YXJnZXQtc2hpbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ldmVudC10YXJnZXQtc2hpbS8tL2V2ZW50LXRhcmdldC1zaGltLTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pLzJYYm5Tei91eFJDVTYrTmRWSmdLV0RUTTQyNytNcVlia1F6RDMyMUR1Q1FKVXFPdUpLSUEwSU0yK1cyeHRZSGRLT21aNGRSNmZFeHNkNFNYTCtXUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ldmVudGVtaXR0ZXIzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50ZW1pdHRlcjMvLS9ldmVudGVtaXR0ZXIzLTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HV2tCdmppU1pLODdFTHJZT1NFU1VZZVZJYzltdkxMZi9uWGFsTU9TNWRZcmdacTlvNU9Wa2JaQVZNMDZDVnhZc0N3SDlCRFpGUGxRVGxQQTFqNGFoQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXZlbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50cy8tL2V2ZW50cy0zLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbVF3KzJma1FiQUx6UTdWME1ZMElxZG5YTk9lVHRQNHIwbE45ejdBQWF3Q1hncWVhN2JEaWkyMEFZcklCckZkL0h4ME0yT2N6NlMxMTFDYUZrVWNiMFE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC44LngiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V2ZW50c291cmNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50c291cmNlLy0vZXZlbnRzb3VyY2UtMy4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNSVDFXVHl1UW9ENzcxR1c1NlhFWkZRL1pvU2ZXaWQxYWxLR0RZTW1rdDJ5bDhVWHJWUjRwc3BxV05FY3FLdlZJemc2UEFsdFdqeGNTU1ByYm9BNGlBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJldmVudHNvdXJjZS1wYXJzZXIiOiAiXjMuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXZlbnRzb3VyY2UtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V2ZW50c291cmNlLXBhcnNlci8tL2V2ZW50c291cmNlLXBhcnNlci0zLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYlNSRzg1WnJNZG1XdG03cWtGOUhlOVROUnpjL0JtOTlnRUpNYVFvSEo5RTZLdjlRQmJzbGRoMm9NajdpWG1ZTkVBVnZOZ3Z2NXZQb3JHNlcrWHRCaFE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leGVjYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjYS8tL2V4ZWNhLTUuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04dVNwWlpvY0FaUkJBUElFSU5KajNMbzlIeUdpdGxsY3pjMjdFaDVZWW9qak1GTW44eUhNRE1hVUhFMkpxZnEwNUQvd3Vjd0k0SkdVUnlYdDF2Y2h5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjMiLAotICAgICAgICAiZ2V0LXN0cmVhbSI6ICJeNi4wLjAiLAotICAgICAgICAiaHVtYW4tc2lnbmFscyI6ICJeMi4xLjAiLAotICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICJeNC4wLjEiLAotICAgICAgICAib25ldGltZSI6ICJeNS4xLjIiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC4zIiwKLSAgICAgICAgInN0cmlwLWZpbmFsLW5ld2xpbmUiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvZXhlY2E/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leGVjYS9ub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lnbmFsLWV4aXQvLS9zaWduYWwtZXhpdC0zLjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd25EMlpFK2wrU1BDL3VvUzB2WGVFOUwxKzB3dWFNcUtsZno5QU1VbzM4SnN5TFNCV1NGY0hSMVJyaTYyTFpjMTJ2THIxZ2Izamw3aXdRaGd3cEFiR1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhpdC14IjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4aXQteC8tL2V4aXQteC0wLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK0k2Qi9Ja0pjMW8vMnRpVVJ5ei9pdnUvTzBuS05FQXJJVUI1Tzd6QnJsRFZKcjIyU0NMSDN4VGVFcnk0MjhMdkZoUnpJQTFnOGl6Z3V4Si9nYk5jVlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cGVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwZWN0Ly0vZXhwZWN0LTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUDB0ZTJwdCtoSEk1cUxKa0lSK2lNdlMrbFlVWm1sOHJLS3NvaFZIQUdZK3VDbHA5WFZiZHlZTkpPSWpTUnBIVnA4czhZcXhKQ2lIVWtTWVpHcjhydFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZXhwZWN0LXV0aWxzIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC9nZXQtdHlwZSI6ICIzMC4wLjEiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1tb2NrIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cHJlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwcmVzcy8tL2V4cHJlc3MtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURUOWNrNVlJUlUrOEdZenpVNWtUM2VIR0E1aUwrMVpkMEV1dE9tVEU5RHRrK1R2dXpkMjNWQlUrZWM3SFBOU1R4WFlPNTVnUFYvaHE0cFNCSkRqRnBBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY2NlcHRzIjogIl4yLjAuMCIsCi0gICAgICAgICJib2R5LXBhcnNlciI6ICJeMi4yLjAiLAotICAgICAgICAiY29udGVudC1kaXNwb3NpdGlvbiI6ICJeMS4wLjAiLAotICAgICAgICAiY29udGVudC10eXBlIjogIl4xLjAuNSIsCi0gICAgICAgICJjb29raWUiOiAiXjAuNy4xIiwKLSAgICAgICAgImNvb2tpZS1zaWduYXR1cmUiOiAiXjEuMi4xIiwKLSAgICAgICAgImRlYnVnIjogIl40LjQuMCIsCi0gICAgICAgICJlbmNvZGV1cmwiOiAiXjIuMC4wIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIl4xLjAuMyIsCi0gICAgICAgICJldGFnIjogIl4xLjguMSIsCi0gICAgICAgICJmaW5hbGhhbmRsZXIiOiAiXjIuMS4wIiwKLSAgICAgICAgImZyZXNoIjogIl4yLjAuMCIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICJeMi4wLjAiLAotICAgICAgICAibWVyZ2UtZGVzY3JpcHRvcnMiOiAiXjIuMC4wIiwKLSAgICAgICAgIm1pbWUtdHlwZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIl4yLjQuMSIsCi0gICAgICAgICJvbmNlIjogIl4xLjQuMCIsCi0gICAgICAgICJwYXJzZXVybCI6ICJeMS4zLjMiLAotICAgICAgICAicHJveHktYWRkciI6ICJeMi4wLjciLAotICAgICAgICAicXMiOiAiXjYuMTQuMCIsCi0gICAgICAgICJyYW5nZS1wYXJzZXIiOiAiXjEuMi4xIiwKLSAgICAgICAgInJvdXRlciI6ICJeMi4yLjAiLAotICAgICAgICAic2VuZCI6ICJeMS4xLjAiLAotICAgICAgICAic2VydmUtc3RhdGljIjogIl4yLjIuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICJeMi4wLjEiLAotICAgICAgICAidHlwZS1pcyI6ICJeMi4wLjEiLAotICAgICAgICAidmFyeSI6ICJeMS4xLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDE4IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZXhwcmVzcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwcmVzcy1yYXRlLWxpbWl0IjogewotICAgICAgInZlcnNpb24iOiAiNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MtcmF0ZS1saW1pdC8tL2V4cHJlc3MtcmF0ZS1saW1pdC03LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2lOOGlQTUR6T01IUFVZbGxCRXNRZFdWQjZmUERNUHF3akJhRnJncjRKZ3IvK29ranZ6QXkrVUhsWVlML1ZzME9zT3JNa3dTNlBKRGtGbEp3b3hVbnc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDE2IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9leHByZXNzLXJhdGUtbGltaXQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJleHByZXNzIjogIj49IDQuMTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIzLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtY2hlY2svLS9mYXN0LWNoZWNrLTMuMjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDUrMU96emZDQzNFZjdWYnRLZGN2N3pzc3RVUXdVRGxZcFVUdmplVXNKQXNzUGdMbjdRemJib1B0TDVybzA0TXEwclBPc016bDdxNWhJYlJzMndEMUE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImluZGl2aWR1YWwiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2R1Ynp6eiIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Zhc3QtY2hlY2siCi0gICAgICAgIH0KLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInB1cmUtcmFuZCI6ICJeNi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0LWRlZXAtZXF1YWwvLS9mYXN0LWRlZXAtZXF1YWwtMy4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYzcVE5b1F5OWoyQWhCZS9IOVZDOTF3TG1LQkNDVS9nRE9uS05BWUc1aHN3TzdCTEtqMDlIYzVIWU56OWNHSSsreGxwRENJZ0RhaXRWczAzQVRSODRRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mYXN0LWdsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1nbG9iLy0vZmFzdC1nbG9iLTMuMy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03TXB0TDhVMGNxY0Zkekl6d09USG9pbFg5eDVCck5xeWU3Wi9MdUM3a0NNUmlvMUVNU3lxUkszQkVBVUQ3c1hScTRpVDRBelRWdVpkaGdRMlRDdllMZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAbm9kZWxpYi9mcy5zdGF0IjogIl4yLjAuMiIsCi0gICAgICAgICJAbm9kZWxpYi9mcy53YWxrIjogIl4xLjIuMyIsCi0gICAgICAgICJnbG9iLXBhcmVudCI6ICJeNS4xLjIiLAotICAgICAgICAibWVyZ2UyIjogIl4xLjMuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuOCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmFzdC1nbG9iL25vZGVfbW9kdWxlcy9nbG9iLXBhcmVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLXBhcmVudC8tL2dsb2ItcGFyZW50LTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BT0lnU1FDZXBpSll3UDNBUm5HeCs1Vm5UdTJIQllkemJHUDQ1ZUx3MXZyM3pCM3ZaTGV5ZWQxc0M5aG5iY09jOS9Tck15TTVSUFFya0d6NGFTOVpvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1nbG9iIjogIl40LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvLS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGhkL3dGK0xrOThIWm9UQ3RsVnJhSHRmaDVYWWlqSWphbFhjazdzYVV0dWFuU0R5TE14bkhoU1hFREpxSHhEN21zUjhEMHVDbXFsa3dqQ1Y4eHZ3SHc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3QtbGV2ZW5zaHRlaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1sZXZlbnNodGVpbi8tL2Zhc3QtbGV2ZW5zaHRlaW4tMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURDWHU2SWZocWNrczdUWktZM0h4cDN5NnFwaFk1U0pabXJXTURyS2NFUlNPWFdRZE1oVTlJZy9QWXJ6eXcvdWw5ak9JeWgwTjRNMHRiQzVob2RnOGR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zhc3RxIjogewotICAgICAgInZlcnNpb24iOiAiMS4xOS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYXN0cS8tL2Zhc3RxLTEuMTkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3dMVHl4a0NYalhieHFJaFRzTUkyTnVpOGh1TVB0bnhnN2tyYWpQSkFqbkVHL2lpT1M3aSt6Q3RXR1pSOUcwTkJLYlhLaDZYOW05VUlzWVgvTjZ2dlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmV1c2lmeSI6ICJeMS4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZiLXdhdGNobWFuIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZiLXdhdGNobWFuLy0vZmItd2F0Y2htYW4tMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXA1MTYxQnFidUNhU25COGpJYnpRSE9scGdzUG1LNXJKVkRmREtPOTFBeHM1TkMxdXUzSFJRbTZ3dDljZDkvK0d0UVFJTzUzSmRHWFhveURwVEFzZ1lBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJic2VyIjogIjIuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mZWNoYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mZWNoYS8tL2ZlY2hhLTQuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PUDJJVVU2SGVZS0ppM2kwejRBMTlrSE1Rb0xWczRIYytEUHFxeEkyaC9EUFpIVG0vdmpzZkM2UDBiNGpDTXkxNFhpekxCcXZuZFErVWlsRDc3MDdKdz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmlsZS1lbnRyeS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxlLWVudHJ5LWNhY2hlLy0vZmlsZS1lbnRyeS1jYWNoZS04LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFhUVXdDdmlzYTVvYWNOR1JQOVNmTnRZQk5BTWkrUlB3QkZtYmxaRUY3Tjdzd0hZUVM2L1pmazdTUnd4NEQ1ajNDSDIxMVlOUmNvMURFTU5WZlpDblE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmxhdC1jYWNoZSI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9maWxsLXJhbmdlIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGwtcmFuZ2UvLS9maWxsLXJhbmdlLTcuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Zc0dwZTNXSExLOFpZaTR0V0RnMkp5M2ViUnoyclhvd0R4bmxkNGJrUUIwMGNjLzFadzlBV25DMGk5enRESml0aXZ0UXZhSTlLYUx5S3JjK2hCVzB5Zz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidG8tcmVnZXgtcmFuZ2UiOiAiXjUuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmFsaGFuZGxlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5hbGhhbmRsZXIvLS9maW5hbGhhbmRsZXItMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS90ODhUeTNkNUpXUWJXWWdhT0dDQ1lmWFJ3VjErYmUwMldxWVlsTDZoMGxFaVVBTVBNOG84cUtHTzAxWUlrT0h6a2EydXAwOHd2Z1lEMG1EaUkrcTNRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeNC40LjAiLAotICAgICAgICAiZW5jb2RldXJsIjogIl4yLjAuMCIsCi0gICAgICAgICJlc2NhcGUtaHRtbCI6ICJeMS4wLjMiLAotICAgICAgICAib24tZmluaXNoZWQiOiAiXjIuNC4xIiwKLSAgICAgICAgInBhcnNldXJsIjogIl4xLjMuMyIsCi0gICAgICAgICJzdGF0dXNlcyI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmluZC1teS13YXktdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC1teS13YXktdHMvLS9maW5kLW15LXdheS10cy0wLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYTg1TDlab1h0TkFleTNZNlorZUJXVzY1OGtPL013Ujd6SWFma0lVUFVNZjNpc1pHME5DczJwalcyd3RqeEFLdUpQeE1Bc0hVSVA0WlBHdjBvNWd5VEE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTc4L1BYVDF3bExMRGdUekRzN3NqcTloenowdlhEK3puKzd3eXBFZTRmWFF4Q21kbXFmR3NFUFF4bWlDU1FJM2FqRlY5MWJWU3N2TnRySlJpVzZuR25nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxvY2F0ZS1wYXRoIjogIl42LjAuMCIsCi0gICAgICAgICJwYXRoLWV4aXN0cyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmxhdC1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mbGF0LWNhY2hlLy0vZmxhdC1jYWNoZS00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZjdjY0ZQSzNTWEZIcHgxNVVJR3lSSi9GSlFjdHVLWjB6VnVOM2ZyQm80SG5LM2NheTlWRVcwUjZ5UFlGSEMwQWdxaHVrUHpLanEyMnQ1RG1BeXFHeXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmxhdHRlZCI6ICJeMy4yLjkiLAotICAgICAgICAia2V5diI6ICJeNC41LjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZsYXR0ZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmxhdHRlZC8tL2ZsYXR0ZWQtMy4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdYK3lzdzRQQkN6MFB6b3NIRGVwWkdBTkV1RkNNTHJuUlRpRXk5TWNHam1rQ1FZd1JxNEEvWDc4NkcvZmpNLytPanNXU1UxWnJZNXF5QVJabU8vdXdnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZuLm5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm4ubmFtZS8tL2ZuLm5hbWUtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdSbm1CNWdQeUpwQWhUUWRTWlRTcDl1YVBTdmwwOUtvWWNNUXRzQjlyUW9PbXpzOWRINmZmZWNjSCtaK2N2NlA2OEh1NWJDNkpqUmg0QWgvbUhTTlJ3PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mb3JlZ3JvdW5kLWNoaWxkIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcmVncm91bmQtY2hpbGQvLS9mb3JlZ3JvdW5kLWNoaWxkLTMuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nSVhqS3F0RnVXRWd6RlJKQTlXQ1FlU0pMWkRqZ0pVT01DTXp4dHZGcS8zN0tvak0xQkZHdWZxc0N5MHI0cVNRbVlMc1pZTWV5UnF6SVdPTXVwMDNzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjYiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjQuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE0IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZvcndhcmRlZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3J3YXJkZWQvLS9mb3J3YXJkZWQtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ1UkcwZnBCdFJIU1RDT0FTZTZoRDI1OHRFdWJGb1JMYjRaTkE2TnhNVkhOdzJnT2N3SG85d3lhYmx6TXpPQTV6OXhBOUwxS05qay9OdDZNVDlhWW93PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZyZXNoIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZyZXNoLy0vZnJlc2gtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJ4L1d5Y1o2MEhPYXFMS0FpNmNIUktLSTd6eFdiSjMxTWhudG10d01vYVRlRjdYRkg5aGhCcDh2SVRhTWlkZmxqUlE2ZVlXQ0trYVRLK3lrVkpIUDJBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Zyb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJvbS8tL2Zyb20tMC4xLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXR3ZTIwZUYxT3hWeHAvTUwva3EycDF1YzZLdkZLLyt2czhXakViZUttVjJIZTIyTUttN1lGMkFOSXQrRU9xaEo1TDNLL1N1dVBoazBoV1FEak9NMjNnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZzLnJlYWxwYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLnJlYWxwYXRoLy0vZnMucmVhbHBhdGgtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9PMHBIMmxLNmEwaFpuQWRhdTVJdHpIUEk2cFVsdkk3ak1WbnhVUVJ0dzRvd0Yyd2s4bE9TYWJ0R0RDVFA0R2dyZzJNYkduV085WDhLMXQ0K2ZHTUR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZzZXZlbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzZXZlbnRzLy0vZnNldmVudHMtMi4zLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV4b0RmWCtmTDdmYUFUbmFnbVdQcGJGdHdoL1I3N1dtTU1xcUhHUzY1QzN2dkIwWUhyZ0YrQjFZbVozNDQxdE1qNW42M2swMjEyWE5vSnd6bGhmZlF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiaGFzSW5zdGFsbFNjcmlwdCI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImRhcndpbiIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjguMTYuMCB8fCBeMTAuNi4wIHx8ID49MTEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Z1bmN0aW9uLWJpbmQvLS9mdW5jdGlvbi1iaW5kLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03WEhOeEg3cVg5eEc1bUl3eGtodW1Ub3gvTUlSTmNPZ0RyeFdzTXQycEFyMjNXSHA2TXJSbE43RkJTRnBDcHIrb1ZPMEY3NDRpVWdSODJuSk1mRzJTQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZW5zeW5jIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAtYmV0YS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZW5zeW5jLy0vZ2Vuc3luYy0xLjAuMC1iZXRhLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNoTjdOYXNrWXZNRExRWTU1Z25XM05RK21lc0VBZXBUcWxnK1ZFYmo3enpxRU1CVk5oemNHWVllcUZvL1RsWXo2ZVFpRmNwMUhjc0NaTytuR2dTOHpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni45LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dldC1jYWxsZXItZmlsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtY2FsbGVyLWZpbGUvLS9nZXQtY2FsbGVyLWZpbGUtMi4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR5RlAzQk0vM1lIVFFPQ1VML3cwT1pIUjBscEtlR3J4b3RjSFdjcU5FZG5sdHFGd1hWZmhFQlE5NGVJbzM0QWZRcG8wckdraTRjeUlpZnRZMDZoMkZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIjYuKiB8fCA4LiogfHwgPj0gMTAuKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LWVhc3QtYXNpYW4td2lkdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LWVhc3QtYXNpYW4td2lkdGgvLS9nZXQtZWFzdC1hc2lhbi13aWR0aC0xLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdnBlTUlRS3hjelRELzBzMkNkRVdIY2IwZWVKZTZURmp4YitKNXhnWDdoU2N4cXJHdXlqbXY0YzFENEEvZ2VsS2Z5b3gwZ0pKd0lIRitmTGplYU04a1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtaW50cmluc2ljIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1pbnRyaW5zaWMvLS9nZXQtaW50cmluc2ljLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05ZlNqU2Fvcy9mUklWSXAreFNKbEU2bGZ3aEVTN0xOdEthQ0JJYW1Ic2pyMm5hMUJpQUJKUG8wbU9qano4R0pEVVJhcm1DUEdxYWlWZzVtZmpiOThDUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMiOiAiXjEuMC4yIiwKLSAgICAgICAgImVzLWRlZmluZS1wcm9wZXJ0eSI6ICJeMS4wLjEiLAotICAgICAgICAiZXMtZXJyb3JzIjogIl4xLjMuMCIsCi0gICAgICAgICJlcy1vYmplY3QtYXRvbXMiOiAiXjEuMS4xIiwKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4yIiwKLSAgICAgICAgImdldC1wcm90byI6ICJeMS4wLjEiLAotICAgICAgICAiZ29wZCI6ICJeMS4yLjAiLAotICAgICAgICAiaGFzLXN5bWJvbHMiOiAiXjEuMS4wIiwKLSAgICAgICAgImhhc293biI6ICJeMi4wLjIiLAotICAgICAgICAibWF0aC1pbnRyaW5zaWNzIjogIl4xLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dldC1wYWNrYWdlLXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LXBhY2thZ2UtdHlwZS8tL2dldC1wYWNrYWdlLXR5cGUtMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBqenVLdFk2NEdZZldpek5BSjBmcjlWcXR0WmtOaUsyaVM0MzBMdElIempCRXI2Ylg4QW0yem00c1c0Um81d2pXVzVjQWxSTDFxQU1UY1hiak5BTzJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dldC1wcm90byI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtcHJvdG8vLS9nZXQtcHJvdG8tMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNUU2ZCam9YQnA4OUp2SUtJZWZxdzdVMkNDZWJzYzc0a2lZNmF3aUdvZ0t0b1NHYmdqWUUvRy8rbDlzRjNNV0ZQTmM5SWNvT0M0T0RmS0hmeEZtcDBnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkdW5kZXItcHJvdG8iOiAiXjEuMC4xIiwKLSAgICAgICAgImVzLW9iamVjdC1hdG9tcyI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtc3RyZWFtLy0vZ2V0LXN0cmVhbS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHM2V2krMmozalFqcWk3MHc1QWxOOERGbmtTd0MrTXFteEV6ZEVBTEIycVhaWVYzWC9iMUNUZmdQTEdKTk1lQVd4ZFBmVThGTzFtczNOVWZhSENQWWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtdHNjb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEwLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC10c2NvbmZpZy8tL2dldC10c2NvbmZpZy00LjEwLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF1SHlKNEFnTXo3dmdTOEhwM042SFhTbWxNZFV5aFNVcmZCRjE2dzE1M3J4dExJRU9FK0hHcWFCcHBjelp2bkhMcVFKZmlIb3RDWXBOaGwwbFVST0ZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlc29sdmUtcGtnLW1hcHMiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9wcml2YXRlbnVtYmVyL2dldC10c2NvbmZpZz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC40LjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2IvLS9nbG9iLTEwLjQuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN0J2OFJGMGs2eGpvN2Q0QS9QeFlMYlVDZmI2YytWcGQyL21CMnlSRGxldzdKYjVoRVhpQ0Q5aWJmTzd3cGs4aTRzZXZLNkRGbnk5aDdFWWJNMy9zSGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZm9yZWdyb3VuZC1jaGlsZCI6ICJeMy4xLjAiLAotICAgICAgICAiamFja3NwZWFrIjogIl4zLjEuMiIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjkuMC40IiwKLSAgICAgICAgIm1pbmlwYXNzIjogIl43LjEuMiIsCi0gICAgICAgICJwYWNrYWdlLWpzb24tZnJvbS1kaXN0IjogIl4xLjAuMCIsCi0gICAgICAgICJwYXRoLXNjdXJyeSI6ICJeMS4xMS4xIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJnbG9iIjogImRpc3QvZXNtL2Jpbi5tanMiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYi1wYXJlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi1wYXJlbnQvLS9nbG9iLXBhcmVudC02LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWHh3SThFT2hWUWdXcDZpREwrM2Iwcjg2ZjRkNkFYNnpTVTU1SGZCNHlkQ0V1WExYYzVGY1llT3Urbm5HZnRTNFRFanUvMTFydDRLSlBUTWdiZm12NEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZ2xvYiI6ICJeNC4wLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMTMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYi9ub2RlX21vZHVsZXMvYnJhY2UtZXhwYW5zaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSnQwdkh5TStqbVVCcW9qQjdFMU5JWWFkdDB2STBReGp4ZDJURXJXOTR3RHorRTJMQW01dktNWFh3ZzZaWkJUSFB1VWxEZ1FIS1h2akdCZGZjRjFaRFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nbG9iL25vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTkuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HNlQwWlg0OHhnb3p4NzU4N2tvZVg5WXMyTll5Nkdtdi8vUDg5c0V0ZTlWOXdoSWFwTU5GNGlkS3huVzJRdENjTGlUV2xiL3dmQ2FiQXRBRldoaEJvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjIuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE2IHx8IDE0ID49MTQuMTciCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYmFscy8tL2dsb2JhbHMtMTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vYWhHdnVNR1FsUHcvaXZJWUJqVlNyV0FmV0xCZWt1NXRwUEUyZk9QTGkrV0hmZklXYnVoMnRDamh5UWhUQlBNZjVFOWpERUg0Rk9tVFlnWXdiS3d0UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dvcGQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ29wZC8tL2dvcGQtMS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpVS1JoNi9rVUZvQWlUQXRUWVBaSjNodzl3Tnh4K0JJQk9pam5sRzlQbnJKc0NjU2pzMXd5eUQ2dkpwYVl0Z256RHJLWVJTcWYzT082UmZhOTN4c1JnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ3JhY2VmdWwtZnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyYWNlZnVsLWZzLy0vZ3JhY2VmdWwtZnMtNC4yLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SYko1L2ptRmNOTkNjRFY1bzllVG5CTEovSHN6V1YwUDczYmMrRmY0blMvckpqK1lhUzZJR3lpT0wwVm9CWVgrbDFXcmwzazYzaC9LckgrbmhKMFh2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ncmFwaGVtZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ3JhcGhlbWVyLy0vZ3JhcGhlbWVyLTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FdEt3b082a3hDTDlXTzV4aXBpSFRabFN6Qm03V0xUNjI3VHFDL3VWUmQwSEttcThOWHllYm5OWXhEb0JpN3d0OGVUV3JVcktYQ09WYUZxOXgxa2dhZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ncmVtbGluIjogewotICAgICAgInZlcnNpb24iOiAiMy43LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyZW1saW4vLS9ncmVtbGluLTMuNy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CQy82cTk3dUZjeUpHamYxeFZxMFV5NXEwNmJKVmJyYjRLcEFBT3U4bGZHVjJSYWxHdXZzSUc3c3ZsV2F0Uy8zcThiL0h1d3FIck1FU1ZFRE5Ca0Jodz09IiwKLSAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJ1ZmZlciI6ICJeNi4wLjMiLAotICAgICAgICAiZXZlbnRlbWl0dGVyMyI6ICJeNS4wLjEiLAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIl40LjUuMiIsCi0gICAgICAgICJ1dWlkIjogIl45LjAuMSIsCi0gICAgICAgICJ3cyI6ICJeOC4xNi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ncmVtbGluL25vZGVfbW9kdWxlcy91dWlkIjogewotICAgICAgInZlcnNpb24iOiAiOS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V1aWQvLS91dWlkLTkuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iKzFlSk9sc1I5SzhISnBvdzlPazNmaVdPV1NJY0l6WG9kdnYwclFqVm9PVk5wV01weGYxd1pOcHQ0eTloMTBvZENOcnFuWXAxT0J6Umt0Y2tCZTNzQT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Jyb29mYSIsCi0gICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvY3RhdmFuIgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiYmluIjogewotICAgICAgICAidXVpZCI6ICJkaXN0L2Jpbi91dWlkIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ncmVtbGludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmVtbGludC8tL2dyZW1saW50LTMuOC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05UjNLWHpocXoyRHBtakFkUStoYWRqbndFZzR1YlZZRWRHVUNsQ2JHNHhHWHJxbzhHeHduTFBRV0xDUTlOVGtjT2RYWGx6dURhaVlLUkwxWEpvTEY0dz09IiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9oYW5kbGViYXJzIjogewotICAgICAgInZlcnNpb24iOiAiNC43LjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhbmRsZWJhcnMvLS9oYW5kbGViYXJzLTQuNy44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12YWZhRnFzOE1aa1JyU1g3c0ZWVWRvM2FwL2VOaUxuYjRJYWtzaHp2UDU2WDVOcjFpR0tBSXFkWDZ0TWxtNkhjTlJJa3I2QXhPNWpGRW9KenpwVDhhUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW5pbWlzdCI6ICJeMS4yLjUiLAotICAgICAgICAibmVvLWFzeW5jIjogIl4yLjYuMiIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIsCi0gICAgICAgICJ3b3Jkd3JhcCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImhhbmRsZWJhcnMiOiAiYmluL2hhbmRsZWJhcnMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC40LjciCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAidWdsaWZ5LWpzIjogIl4zLjEuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXlrSlQvUTFLalRXY3RwcGdJQWdmU08wdEtWdVpVamhnTXIxN2txVHVtTWw2QWZ2M0VJU2xlVTdxWlV6b1hERlRBSFREQzROT29HL1p4VTNFdmxNUFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9oYXMtc3ltYm9scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtc3ltYm9scy8tL2hhcy1zeW1ib2xzLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xY0ROZHdKMkphb2htYjNzZzRPbUthTUJ3dUM0OHNZbmk1SFV3MkR2c0M4TGpHVExLOWgrZWIxWDZSeXVPSGU0aFQwVUxDVzY4aW9taGpVb0tVcWxQUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhc293biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXNvd24vLS9oYXNvd24tMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBoSlU5U0NQdm1NeklCZFpGcU5QWFdhNmRxaDdXZEgwY0lJOXkrQ3lTOHJHM25MNDhCY2xyYTlIbUtoVlZVSHlQV05INVk3eER3QUI3YmZnU2prVU1RPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmdW5jdGlvbi1iaW5kIjogIl4xLjEuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9odG1sLWVzY2FwZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lc2NhcGVyLy0vaHRtbC1lc2NhcGVyLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IMmlNdGQwSTRNdDVlWWlhcFJkSURqcCtYemVsWFEwdEZFNEpTN1lGd0ZldlhYTW1PcDlteU5yVXZDZzBENndzOGlxa1JQQmZLSGdid2lnMVNtbExmZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9odHRwLWVycm9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLWVycm9ycy8tL2h0dHAtZXJyb3JzLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GdHdyRy9ldUJ6YUVqWWVScU9nbHk3RzBxdmlpWG9KV252RUgyWjFwbEJkWGdieWp2MzRwSFRTYjl6b2VITXlEeTMzK0RXeTVXdDlXbytUVVJ0T1lTUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVwZCI6ICIyLjAuMCIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyLjAuNCIsCi0gICAgICAgICJzZXRwcm90b3R5cGVvZiI6ICIxLjIuMCIsCi0gICAgICAgICJzdGF0dXNlcyI6ICIyLjAuMSIsCi0gICAgICAgICJ0b2lkZW50aWZpZXIiOiAiMS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cC1lcnJvcnMvbm9kZV9tb2R1bGVzL3N0YXR1c2VzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJ3TkE5Wi83UHJLMDZyWUxJekZNbGFGK2w3M2l3cHpzcVJJRmdiTUxiVGNMRDZjT2FvODJUYVdlZlBYUXZCMmZPQzRBanVZU0VuZFM3Ti9tVENia2RRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h1bWFuLXNpZ25hbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHVtYW4tc2lnbmFscy8tL2h1bWFuLXNpZ25hbHMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUI0RkZaNnEvVDJqaGhrc2drYkVXM0hCdldJZkRXODVzbmtRZ2F3dDA3UzdKNVFYVGs2QmtOVisweUFlWnJNNVFwTUFkWWxvY0dvbGpuMHNKL1dRa0Z3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjE3LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h1c2t5IjogewotICAgICAgInZlcnNpb24iOiAiOS4xLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h1c2t5Ly0vaHVza3ktOS4xLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVnczV5dGFOakJyaDVPdzN6cnZkVVVZKzBWeEl1V1ZMNGk5aXJ0NmZyaVYrQnFkQ2ZtVjExQ1FUV01pQllXSGJYaGNvK0oxa0hmVE9Va2VQaENEdk1BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImh1c2t5IjogImJpbi5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvdHlwaWNvZGUiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ljb252LWxpdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWNvbnYtbGl0ZS8tL2ljb252LWxpdGUtMC42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTRmQ2s3OXdzaE1kek1wMnJIMDZxV3JKRTRpb2xxTGhDVUgrT2l1SWdVKytSQjArOTRObERMODFhdE83R1g1NXVVS3VlbzB0eEhOdHZFeUk2RDdXZE13PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzYWZlci1idWZmZXIiOiAiPj0gMi4xLjIgPCAzLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2llZWU3NTQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWVlZTc1NC8tL2llZWU3NTQtMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRjeXFoRHZYMUM0NmxYWmNWcUNwSytGdE1SUVZkSU1ONi9EZjVqczJ6b3VVc3FHN0k2c0Z4aXRJQys3S1lLMjlLZFhPTEhkdTl6TDRzRm5vVlFucWFBPT0iLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaWdub3JlIjogewotICAgICAgInZlcnNpb24iOiAiNS4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lnbm9yZS8tL2lnbm9yZS01LjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHNCVE5VcVFURHdrV3RjZFlJMmkwNlkvblVCRXNORURKS2pXZGlnTHZlZ3k4a0R1SkFTOHVSbHBra2NRcHlFWEwwWi9wakR5NUhCbU1qUkNKMmdxK2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW1wb3J0LWZyZXNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltcG9ydC1mcmVzaC8tL2ltcG9ydC1mcmVzaC0zLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFIzS2ZyVFpUWUxQQjZqVWpmeDZNRjlXY1dySEw5c3U1VE9iSzRaa1lnQmRXS1BPRm9Tb1FJZEV1VHVSODJwbXR4SDJzcFdHOWg2ZXR3ZnIxcExCcVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGFyZW50LW1vZHVsZSI6ICJeMS4wLjAiLAotICAgICAgICAicmVzb2x2ZS1mcm9tIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ltcG9ydC1sb2NhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbXBvcnQtbG9jYWwvLS9pbXBvcnQtbG9jYWwtMy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTJTUGx1bjFKVVBXb002dDNGMGR3MEZrQ0YvaldZOGt0dGNZNGY1OTlHTFRTamgyT0N1dWhkVGtKUXNFY1p6QnFiWFpHS01LMk9xVzFvWnNqdGYvZ1FBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBrZy1kaXIiOiAiXjQuMi4wIiwKLSAgICAgICAgInJlc29sdmUtY3dkIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiaW1wb3J0LWxvY2FsLWZpeHR1cmUiOiAiZml4dHVyZXMvY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW11cm11cmhhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW11cm11cmhhc2gvLS9pbXVybXVyaGFzaC0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSm1YTVo2d3V2RG1MaUhFbWw5eWt6cU82bHdGYm9mMEdHNElrY0dhRU5kQ1JERG1NVm5ueTdzNUhzSWdIQ2JhcTB3Mk15UGhEcWtoVFVnUzJMVTJQSEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjguMTkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2luZmxpZ2h0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luZmxpZ2h0Ly0vaW5mbGlnaHQtMS4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWs5MkkvYjA4cTR3dkZzY1hDTHZxZnNIQ3JqckY3eWlYc1F1SVZ2VkU3TjgyVzMrYXFwenVVZEJiZmhXY3kvRlpSMy80SWdmbE1nS0xPc3ZQRHJHQ0pBPT0iLAotICAgICAgImRlcHJlY2F0ZWQiOiAiVGhpcyBtb2R1bGUgaXMgbm90IHN1cHBvcnRlZCwgYW5kIGxlYWtzIG1lbW9yeS4gRG8gbm90IHVzZSBpdC4gQ2hlY2sgb3V0IGxydS1jYWNoZSBpZiB5b3Ugd2FudCBhIGdvb2QgYW5kIHRlc3RlZCB3YXkgdG8gY29hbGVzY2UgYXN5bmMgcmVxdWVzdHMgYnkgYSBrZXkgdmFsdWUsIHdoaWNoIGlzIG11Y2ggbW9yZSBjb21wcmVoZW5zaXZlIGFuZCBwb3dlcmZ1bC4iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm9uY2UiOiAiXjEuMy4wIiwKLSAgICAgICAgIndyYXBweSI6ICIxIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbmhlcml0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmhlcml0cy8tL2luaGVyaXRzLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rL3ZHYVg0L1lsYTNXenlNQ3ZUUU9YWWVJSHZxT0t0bnFCZHV6VEhwenBRWnpBc2tLTWhaMksrRW5CaVNNOXpHU29JRmVNcFhLeGE0ZFllWklRcWV3UT09IiwKLSAgICAgICJsaWNlbnNlIjogIklTQyIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXBhZGRyLmpzIjogewotICAgICAgInZlcnNpb24iOiAiMS45LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lwYWRkci5qcy8tL2lwYWRkci5qcy0xLjkuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMEtJLzYwN3hveFNUb0g3R2pOMUZmU2JMb1UwK2J0VGljanNRU1dRbGgvaFp5a044S3BtTWY3dVl3UFczUitha1o2Ui93MThabFhTSEJZWGlZVVBPM2c9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuMTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWFycmF5aXNoIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFycmF5aXNoLy0vaXMtYXJyYXlpc2gtMC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXp6MDZTOHQwb3pvRFhNRyt1YmUyNnplQ1ROWGNLSVBKWkppOGhCckY0aWRDTG1zNENHOVF0SzdxQmwxYm9pNU9EekZwanN3YjVKUG1IQ2JNcGphWXpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWV4dGdsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0Z2xvYi8tL2lzLWV4dGdsb2ItMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNiS2JBTmtONjAzVmk0akVadjQ5TGVWSk1uNHlHd3Nielp3b3JFb3lFaXV0c04zbkpZZGJPMzZ6ZmhHSjZRRURwT1pJRmtEdG5xNUpSeG12bDNqc29RPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzRMMDk0TjIvZFo3eHFWZHJYaGg5cjFLT0RQSnBGbXM4QjVzR2RKTFB5NjY0QWd2WHNyZVpVeUNRUU5JdFpSRGxZdWc0eFN0TGpOcC9zejNIdkJvd1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1nZW5lcmF0b3ItZm4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2VuZXJhdG9yLWZuLy0vaXMtZ2VuZXJhdG9yLWZuLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jVElCNHlQWUwvR3J3MEVhU3pBU3pnNmJCeTlncUNvZnZXTjhva1RoQVlJeEtKWkMrdWRsUkFtR2JNMFhMZW5pRUpTczh1RWdIUEd1SFNlMVhzT0xTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWdsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2xvYi8tL2lzLWdsb2ItNC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhlbFNheUhIMzZaZ0U3WldobGk3cFczNGhOYk5sOE9qdjVLVm1rSkQ0aEJkRDN0aDhUZms5dllhc0xNK21YV09aaEZrZ1pmeGhMU25yd1JyNGVsU1NnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1leHRnbG9iIjogIl4yLjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLW51bWJlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1udW1iZXIvLS9pcy1udW1iZXItNy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTQxQ2lma2c2ZThUeWxTcGR0VHBlTFZNcXZTQkVWelR0dEh2RVJENzQxK3BuWjhBTnYwMDA0TVJMNDNRS1BEbEs5Y0d2TnA2TlpXWlVCbGJHWFl4eG5nPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtcHJvbWlzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1wcm9taXNlLy0vaXMtcHJvbWlzZS00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaHZwb0k2a29yaEpNbmVqMjg1ZFNnNm51MStlNnV4czd6RzNCWUFtNWJ5cURzZ0pOV3d4ek02ejZpWmlBZ1FSNFRKMzBKbUJUT3dxWlV3M1dseUgzQVE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhGb2lKaVRsNjNubitrc3RIR0J0ZXdXU0tuUUxweWIxNTVLSGhlQTFsMzl1dnRPOW5XSW9wMXAzdWRxUGNVZC94YkYxVkxNTzRuN09JNnA3UmJuZ0RnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXNleGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNleGUvLS9pc2V4ZS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkh4TUxwOWxuS0hHSFJuZzlRRmhSQ01iWUFjVnBuNjlzbVNHY3EzZjM2eGpnVlZXVGhqNHFxTGJUTGxxN1NzajhCK2ZJUTFFdUNFR0kybEtzeVFlSXc9PSIsCi0gICAgICAibGljZW5zZSI6ICJJU0MiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItY292ZXJhZ2UvLS9pc3RhbmJ1bC1saWItY292ZXJhZ2UtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU84ZHBzRityMFdWLzhNTlJLZm5tcnRDV2h1S2p4cnEydytqcHpCTDVVWktUaTJMZVZXbldPbVdSeEZsZXNKT05tYyt3TEFHdktRWkVPYW5rbzBMRlRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLWluc3RydW1lbnQvLS9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudC02LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVnRnazdML1IySkh5eUdXMDdzcG9GbEI4L2xwamlPTFRqTWRtczZBRk1yYVl0M0JhSmF1b2QvTkdyZm5WRy95NEl4MUpFdU1SUERQRWoydWErenoxL1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMjMuOSIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjIzLjkiLAotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMyIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMi4wIiwKLSAgICAgICAgInNlbXZlciI6ICJeNy41LjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLXJlcG9ydC8tL2lzdGFuYnVsLWxpYi1yZXBvcnQtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdDZkUxbXRzSEdPRUxDVThlL1o3WVd6cG15YnJ4LytkU1RmTHJ2WThxUm1hWTZ6WFRLV242V1FJamFBRncwNjlpY202R1ZNTmtndTBOekk0aVBaVU53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAibWFrZS1kaXIiOiAiXjQuMC4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcy8tL2lzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcy01LjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteWcyZCtFbTRLaXpaQzVuaVdoUWFJb21nZjVXbEw0dk9Palo1eEdDbUY4U25QRS9tRFdXWGd2UkV4ZGNwQ2doOWxMUlJhMS9mU1lwMnltbWJKMXBJK0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZyI6ICJeMC4zLjIzIiwKLSAgICAgICAgImRlYnVnIjogIl40LjEuMSIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1yZXBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLXJlcG9ydHMvLS9pc3RhbmJ1bC1yZXBvcnRzLTMuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IR1lXV1MvZWhxVFYzeE4xMGkyM3RrUGtwSDQ2TUxDSU1GTkNhYUtOYXZBWFRGMVJrcXhhd0VQdG5qbkdaNlhLU0luQktraU9BNUJLUythWmlZM0F2QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJodG1sLWVzY2FwZXIiOiAiXjIuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1yZXBvcnQiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2phY2tzcGVhayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qYWNrc3BlYWsvLS9qYWNrc3BlYWstMy40LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9HbFpRcHoyeWZhaEEvUmQxWThDZDlTSUVzcXZYa0xWb1N3L2Nnd2huaEZNRGJzUUZlWllvSko3YklaQlM5QmNhbVVXOTZhc3EvbnBQV3VnTStSUUJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJCbHVlT2FrLTEuMC4wIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAaXNhYWNzL2NsaXVpIjogIl44LjAuMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBwa2dqcy9wYXJzZWFyZ3MiOiAiXjAuMTEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC8tL2plc3QtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15Mm1mY0p5d3VUVWt2TG0yTHAxL3BGWDhrVGdNTzV5eVFHcS9Tay9uMm1ON1hXWXA0SnNDWi9RWFczNE04WVNjZ2s4YlBabFJFSDA0ZjZibFBub0huUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb3JlIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiaW1wb3J0LWxvY2FsIjogIl4zLjIuMCIsCi0gICAgICAgICJqZXN0LWNsaSI6ICIzMC4wLjUiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImplc3QiOiAiYmluL2plc3QuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiAiXjguMC4xIHx8IF45LjAuMCB8fCBeMTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2hhbmdlZC1maWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jaGFuZ2VkLWZpbGVzLy0vamVzdC1jaGFuZ2VkLWZpbGVzLTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkdsMk50ZHgwZUF3WHVHcGRMZFZZVnI1WVFIblNabFEweTlIVkR1NTY1bENVQWU5c2o2Sk90QmJNbUJCaWtHSWVnbmU5cGlERElPZWlMVm9xVGt6NEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXhlY2EiOiAiXjUuMS4xIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1jaXJjdXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtY2lyY3VzLy0vamVzdC1jaXJjdXMtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oL3NqWEVzNEdTK05GRmZxQkRZVDd5NU1zZnhoMDRFd1dMaFFpMEY4a3VXcGUrSi83dElDU2xzd1U4cXZCcXVtUjNrRmdIYmZ1N3ZVNnFydVdXQlB1Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvZXhwZWN0IjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImNvIjogIl40LjYuMCIsCi0gICAgICAgICJkZWRlbnQiOiAiXjEuNi4wIiwKLSAgICAgICAgImlzLWdlbmVyYXRvci1mbiI6ICJeMi4xLjAiLAotICAgICAgICAiamVzdC1lYWNoIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAicC1saW1pdCI6ICJeMy4xLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4wLjUiLAotICAgICAgICAicHVyZS1yYW5kIjogIl43LjAuMCIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RhY2stdXRpbHMiOiAiXjIuMC42IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2lyY3VzL25vZGVfbW9kdWxlcy9wdXJlLXJhbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVyZS1yYW5kLy0vcHVyZS1yYW5kLTcuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vVFVaTS9OQVpTOHA3QU5SM1NIaDMwa1hCK3pLMnIyQlBjRW4vYXdKSWJPdnE4MldvTU40cDYyQVdXcDNIaHc1MEcweE1zdzFtaElCTHFIdzY0RWNOUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJpbmRpdmlkdWFsIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9kdWJ6enoiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9mYXN0LWNoZWNrIgotICAgICAgICB9Ci0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNsaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jbGkvLS9qZXN0LWNsaS0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNhNDVQR01rQlp6Rjk0SE1ybFg0a1V5UE93VXBkWmFzYWxpS04zbWlmdkRta2hMWXFMTGc4SFFUem42Z3E3dkpHYWhGWU1RalhneUpXZllJbUtaek93PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvcmUiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImV4aXQteCI6ICJeMC4yLjIiLAotICAgICAgICAiaW1wb3J0LWxvY2FsIjogIl4zLjIuMCIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC11dGlsIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIjMwLjAuNSIsCi0gICAgICAgICJ5YXJncyI6ICJeMTcuNy4yIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqZXN0IjogImJpbi9qZXN0LmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJub2RlLW5vdGlmaWVyIjogIl44LjAuMSB8fCBeOS4wLjAgfHwgXjEwLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJub2RlLW5vdGlmaWVyIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNvbmZpZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jb25maWcvLS9qZXN0LWNvbmZpZy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFJVmgrSk5PT3B6VWd6VW5QbjVGTHR5Vm5xYzNUUUhWTXVwWXR5ZVVSU2IvL2lMQ29saU1JUjhUeENJREt5eDlaZ2pLblhHdWN1VzY4aEN4Z2Jyd21BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjI3LjQiLAotICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMC4xIiwKLSAgICAgICAgIkBqZXN0L3BhdHRlcm4iOiAiMzAuMC4xIiwKLSAgICAgICAgIkBqZXN0L3Rlc3Qtc2VxdWVuY2VyIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiYmFiZWwtamVzdCI6ICIzMC4wLjUiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImNpLWluZm8iOiAiXjQuMi4wIiwKLSAgICAgICAgImRlZXBtZXJnZSI6ICJeNC4zLjEiLAotICAgICAgICAiZ2xvYiI6ICJeMTAuMy4xMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKLSAgICAgICAgImplc3QtY2lyY3VzIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LWRvY2Jsb2NrIjogIjMwLjAuMSIsCi0gICAgICAgICJqZXN0LWVudmlyb25tZW50LW5vZGUiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICIzMC4wLjEiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXJ1bm5lciI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC11dGlsIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIjMwLjAuNSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuOCIsCi0gICAgICAgICJwYXJzZS1qc29uIjogIl41LjIuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIjMwLjAuNSIsCi0gICAgICAgICJzbGFzaCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtanNvbi1jb21tZW50cyI6ICJeMy4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiZXNidWlsZC1yZWdpc3RlciI6ICI+PTMuNC4wIiwKLSAgICAgICAgInRzLW5vZGUiOiAiPj05LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJlc2J1aWxkLXJlZ2lzdGVyIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInRzLW5vZGUiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMVVJcUU5UG9FS2FIY0lLdnEydmJpYnJDb2c0WThHMHptT3hnUVVWRWlUcXdSNWhKVk1Db0RzTjF2RnZJNUp2d0QzN2hqdWVaMUM0bDJGeUduZnBFMEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZGlmZi1zZXF1ZW5jZXMiOiAiMzAuMC4xIiwKLSAgICAgICAgIkBqZXN0L2dldC10eXBlIjogIjMwLjAuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4wLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1kb2NibG9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kb2NibG9jay8tL2plc3QtZG9jYmxvY2stMzAuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vdkY3OHFuM0RZcGhBYUljM2p5NGdBN1hTQXoxNjduOUJtL3duLzFYaFRMVzd0VEJJelh0Q0pwYi92Y21jNzNOSUllZW9oQ2JkTDk0SmFzeVhVWnNHQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZXRlY3QtbmV3bGluZSI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWVhY2gvLS9qZXN0LWVhY2gtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kS2pSc3gxdVo5NlRWeWVqRDMvYUFXY05LeTZhak1hTjUzMUN3V0lzcmF6SXFJb1hJOVRubnBQbGtyRVlrdS84cmtTM2RoMnJiSCtrTU95aUVJdjB4UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9nZXQtdHlwZSI6ICIzMC4wLjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiMzAuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcHBZaXpYZExNU3ZjaUdzUnNNRW52LzVFRnB2T2RYQmFYUkJ6RlVEUFdyc2Ztb2c0a1lyT0dXWGFyTGxsejZBWGFuNlpBQS9rWW9rZ0RXdW9zMUlLREE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICIzMC4wLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ka21sV05sc1RTUjBuSDNuUmZXNUJLYnFIZWZMWnYwLzZMQ2NjRzB4RkNUV2NKdThUdUV3Rys1Q203NWlCZmpWb29ja21PNkozNW81Z3h0RlNuNXhlZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnltYXRjaCI6ICJeMy4xLjMiLAotICAgICAgICAiZmItd2F0Y2htYW4iOiAiXjIuMC4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIjMwLjAuMSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIjMwLjAuNSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuOCIsCi0gICAgICAgICJ3YWxrZXIiOiAiXjEuMC44IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnNldmVudHMiOiAiXjIuMy4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWxlYWstZGV0ZWN0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbGVhay1kZXRlY3Rvci8tL2plc3QtbGVhay1kZXRlY3Rvci0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNVeHI1dVA4am1ITWNzT3RZTVJCL3pmMWdYTjN5VUljK2lQb3JoTkVURzU0Z0VyRklpVWhMdnlZL09nZ1lwU01PRVlxc21SeG11VTRaT29YNWpwUkZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2dldC10eXBlIjogIjMwLjAuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIjMwLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1hdGNoZXItdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWF0Y2hlci11dGlscy8tL2plc3QtbWF0Y2hlci11dGlscy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXVRZ0dXdDdHT3JSTFAxUDdJd05Xd0sxV0FRYnErbS8vWlkweVh5Z3lmV3Awckpsa3NNU0xRQUE0d1lRQzNiNndsM3pmbmNoeVR4K2szSFo1YVB0Q2JRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2dldC10eXBlIjogIjMwLjAuMSIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAiamVzdC1kaWZmIjogIjMwLjAuNSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIjMwLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1lc3NhZ2UtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tZXNzYWdlLXV0aWwvLS9qZXN0LW1lc3NhZ2UtdXRpbC0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5BaURPaHNLM1Y3UlUwQWEvSG5yUW8rRTRKbGJhcmJtSTNxNlBpNEtjeGljZHRqVjgyZ2NJVXJlak90Y3pDaHRWUVI0a2RkdTFFMUVKbFc2RU45SXlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjI3LjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjMiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjgiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4wLjUiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuNiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LW1vY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbW9jay8tL2plc3QtbW9jay0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9kN1R5YXNBQVFYLzZTK1FDYk42dlpvV09Nd2xUdHp6R3V4Smt1MUdoR2FuQWp6OXkrUXNRa3BTY0RtRVR2ZGM5YVNYeUovT3A0cmhwTVlCV1c5MXdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1wbnAtcmVzb2x2ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1wbnAtcmVzb2x2ZXIvLS9qZXN0LXBucC1yZXNvbHZlci0xLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItKzNOcHdRRW5Sb0lCdHg0ZnloYmxRRFBnSkkwSDFJRUlrWDdTaExValBHQTdUdFVUdkkxb2lLaTNTUjRvQlIwaFFoUVI4MGw0V0FlNVJyWEJ3V01BOHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiamVzdC1yZXNvbHZlIjogIioiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiamVzdC1yZXNvbHZlIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJlZ2V4LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVnZXgtdXRpbC8tL2plc3QtcmVnZXgtdXRpbC0zMC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWpIRVFnQlhBZ2MrR2g0ZzBwM2JDZXZnUkNWUmtCNFZCNzB6aG9BRTQ4Z3hlU3IxaGZVT3NNL0MyV29KZ1ZMN0V5Zy8vaHVkWUVOYm0zTmUrL2RSVlZBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUvLS9qZXN0LXJlc29sdmUtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kK0RqQlExdEloZHo5MUI3OW15d0g1eVl1NzZiWnVFOTZzU2J4ajhNa2pXVng1V05kdDFkZUVGUk9OVkw0VWtLTFNyQWJNa2RoYjI0WE42OTF5RFJIZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1wbnAtcmVzb2x2ZXIiOiAiXjEuMi4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICIzMC4wLjUiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInVucnMtcmVzb2x2ZXIiOiAiXjEuNy4xMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzLy0vamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS94TXZCUjRNcHdrckhXNGlrWklXUnR0QkJSWmdXSzRkNnh0M3hXMWlSRFNLdDR0WHpZa01reVBmQm5TQ2d2OTZjcGtyY3RmWHM2Z2V4ZXFNWXFkRXB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICIzMC4wLjEiLAotICAgICAgICAiamVzdC1zbmFwc2hvdCI6ICIzMC4wLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW5uZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcnVubmVyLy0vamVzdC1ydW5uZXItMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KY0NPdWNabWdwK1l1R2dMQVhITnk3dWFsQng0d1lTZ0pWV3JZTVJCbmI3OWo5UEQwSnhoMEVIdlI1Q3gvcjBDZStaQkM0aENkejJBekZGTGw5aENpdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb25zb2xlIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImVtaXR0ZXJ5IjogIl4wLjEzLjEiLAotICAgICAgICAiZXhpdC14IjogIl4wLjIuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjExIiwKLSAgICAgICAgImplc3QtZG9jYmxvY2siOiAiMzAuMC4xIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtbGVhay1kZXRlY3RvciI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1ydW50aW1lIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3Qtd2F0Y2hlciI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiMzAuMC41IiwKLSAgICAgICAgInAtbGltaXQiOiAiXjMuMS4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAtc3VwcG9ydCI6ICIwLjUuMTMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1ydW50aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bnRpbWUvLS9qZXN0LXJ1bnRpbWUtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03b3lTTkRrcXBlNHhwWDVQUGlKVGU1dkVhK0FrL05uTnoyYkdZWnJBMWZ0RzNSTDNFRmxIYVVrQTFDangrUjhJaEswVmc0M1JNTDVtSmVkR1RQTnozQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L2dsb2JhbHMiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3NvdXJjZS1tYXAiOiAiMzAuMC4xIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjEuMiIsCi0gICAgICAgICJjanMtbW9kdWxlLWxleGVyIjogIl4yLjEuMCIsCi0gICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMiIsCi0gICAgICAgICJnbG9iIjogIl4xMC4zLjEwIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuMTEiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICIzMC4wLjEiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIjMwLjAuNSIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1ib20iOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtc25hcHNob3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzMC4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc25hcHNob3QvLS9qZXN0LXNuYXBzaG90LTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVDAwZFdVL0VrM0xxVHA0K0RjVzZQcmFWeGprMjhXWTVVYS9zKzN6VUtTRVJaU055eFRxaERYQ1dLRzVwMkhBSitjclZRM1dKMlA5WVZIcGoxdGtXK2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMjcuNCIsCi0gICAgICAgICJAYmFiZWwvZ2VuZXJhdG9yIjogIl43LjI3LjUiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanN4IjogIl43LjI3LjEiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdHlwZXNjcmlwdCI6ICJeNy4yNy4xIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4yNy4zIiwKLSAgICAgICAgIkBqZXN0L2V4cGVjdC11dGlscyI6ICIzMC4wLjUiLAotICAgICAgICAiQGplc3QvZ2V0LXR5cGUiOiAiMzAuMC4xIiwKLSAgICAgICAgIkBqZXN0L3NuYXBzaG90LXV0aWxzIjogIjMwLjAuNSIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6ICJeMS4xLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImV4cGVjdCI6ICIzMC4wLjUiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICIzMC4wLjUiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiMzAuMC41IiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICIzMC4wLjUiLAotICAgICAgICAic2VtdmVyIjogIl43LjcuMiIsCi0gICAgICAgICJzeW5ja2l0IjogIl4wLjExLjgiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMzAuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wdnlQV3NzRFpSMEZsZk14Q0JvYzB0dk04aVVFc2thUkZBTFV0R1FZelZFQXFpc0F6dG15K1I4TG5VMTRLVDRYQTBIL2E1SE1WVFhhdDFqTG5lMDEwZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICIzMC4wLjUiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4xLjIiLAotICAgICAgICAiY2ktaW5mbyI6ICJeNC4yLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi4xMSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjQuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTQuMCB8fCBeMjAuMC4wIHx8IF4yMi4wLjAgfHwgPj0yNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtdXRpbC9ub2RlX21vZHVsZXMvcGljb21hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29tYXRjaC8tL3BpY29tYXRjaC00LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNWdUbWdFWS9zcUs2Z0ZYTElzUU5IMTlsV2I0ZWJQRExBNFNkTFA3ZHNXa0lYSFdsRzY2b1B1VnZYU0dGUHBwWVp6OFpEWnEwZFlZcmJIZkJDVlViMVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvam9uc2NobGlua2VydCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC12YWxpZGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC12YWxpZGF0ZS8tL2plc3QtdmFsaWRhdGUtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vdVRtNlZGSGFTMmJveWwrazR1K1FpcDRUU0g3VWxkNXR5RDhwc1E4YWJHZ3QydVlZQjhWd1ZmQUhXSGpIYzBOV21HR2J3TzVoMHNDUE9HSEhldmVmdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9nZXQtdHlwZSI6ICIzMC4wLjEiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiMzAuMC41IiwKLSAgICAgICAgImNhbWVsY2FzZSI6ICJeNi4zLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImxldmVuIjogIl4zLjEuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIjMwLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXZhbGlkYXRlL25vZGVfbW9kdWxlcy9jYW1lbGNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLy0vY2FtZWxjYXNlLTYuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HbXk2RmhZbENZN3VPRWxaVVNieG8yVUNESDhvd0VrOTk2Z2ticnBzZ0d0ckpMTTNKN2pHeGw5SWM3UXd3ajRpdk9FNUFXWldSTWVjRGRGN2hxR2pGQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2hlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13YXRjaGVyLy0vamVzdC13YXRjaGVyLTMwLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItejlzbGovMHZPd0JEQmpOM0w0ejRaWWFBK3BHNTZkNnAza1RVaEZSWUd2WGJYTVdoWG1iL0ZJeFJFWkNEMDZEWVV3REtLbmoyVDgwK1BiNzFDUTBLRWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiMzAuMC41IiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIjMwLjAuNSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4zLjIiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMS4yIiwKLSAgICAgICAgImVtaXR0ZXJ5IjogIl4wLjEzLjEiLAotICAgICAgICAiamVzdC11dGlsIjogIjMwLjAuNSIsCi0gICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXdvcmtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0zMC4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9qUlhzV3pFUDE2TmRVdUJ3LzRIL3prWmRIT2E3TU1ZQ2s0RTQzMGwrOGZFTGVMZy9tcW1NbFJoakw3VU5adlFyRG1ub3ZXWlY0RHhYMDNmWkY0OGZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUiOiAiXjEuMy4wIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICIzMC4wLjUiLAotICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeOC4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xOC4xNC4wIHx8IF4yMC4wLjAgfHwgXjIyLjAuMCB8fCA+PTI0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC13b3JrZXIvbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItOC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1wVUVOMk9vZHRVenh2S1FsNzJjVUY3UlE1RWlIc0d2U3NWRzBpYTljNVJiV0dMMkNJNEM3RXBQUzhVVEJJcGxubHpaaU51VjU2dytGdU54eTN0eTJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3I/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qanUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamp1Ly0vamp1LTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04d2I5WXc5NjZPU3hBcGlDdDBLM3lOSkw4cG5OZUl2K09FcTJZTWlkejRGS1A2bm9uU1JvT1hjODBpWFk0SmFOMkZDMTFCOXFzTm1Ec20rWk9mTVJPQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qcy10b2tlbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMtdG9rZW5zLy0vanMtdG9rZW5zLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SZEpVZmxjRTNjVXpLaU1xUWdzQ3UwNkZQdTlVZElKTzBiZVliUGhITjRrNmFwZ0p0aWZjb0N0VDliY3hPcFlCdHBEMmtDTTZTYnpnNENhdXNXL1BLUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qcy15YW1sIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzLXlhbWwvLS9qcy15YW1sLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13cHhaczlOb3haYUpFU0pHSVpUeURFYVlwbDBGS1NBK0ZCOWFKaXllbUtoTXdreFFnNjNoNFQxS0pnVUdIcFRxUEROUmNtbVlMdWdyUmpKbEJ0V3ZSQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcmdwYXJzZSI6ICJeMi4wLjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImpzLXlhbWwiOiAiYmluL2pzLXlhbWwuanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzZXNjIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZXNjLy0vanNlc2MtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9zTTNkTzJGT3pYaktRaEp1bzBRMTczd2YyS09vOHQ0STh2SHk2bEY5cG9VcDdiS1QwL05IRThmUFgyM1B3ZmhueWtmcW5DMnhSeE9uVnc1WHVHSWFBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImpzZXNjIjogImJpbi9qc2VzYyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29uLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLWJ1ZmZlci8tL2pzb24tYnVmZmVyLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00YlY1QmZSMm1xZlFUSm0rVjV0UFBkZitacHVoaUl2VHVBQjVnOGtjclhPWnBUVC9Rd3dWUldCeXdYMW96cjZsRXVQZGJIeHdhSmxtOUc2bUkyc2ZTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycy8tL2pzb24tcGFyc2UtZXZlbi1iZXR0ZXItZXJyb3JzLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14eUZ3eWhyby9KRW9mNkdoZTJpejJOY1hvajJzbG9Oc1dyL1hzRVJESy9vaVBDZmFOaGw1T05mcCtqUWRBWlJRUTBJSldOekg5eklaRjdsaTkxa2gydz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29uLXNjaGVtYS10cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXNjaGVtYS10cmF2ZXJzZS8tL2pzb24tc2NoZW1hLXRyYXZlcnNlLTAuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14YmJDSDVkQ1lVNVQ4TGNFaGh1aDdISjg4SFh1VzNxc0kzWTB6T1pGS2ZaRUhjcFdpSFUvSnh6azYyOUJyc2FiL21NaUhRdGk5d01QKzg0NVJQZTNWZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXN0YWJsZS1zdHJpbmdpZnktd2l0aG91dC1qc29uaWZ5Ly0vanNvbi1zdGFibGUtc3RyaW5naWZ5LXdpdGhvdXQtanNvbmlmeS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmRib3krbDd0QTNPR1c2Rmp5RkhXa1A1THVCeWoxVGszM0xqeXEwYXh5emRrOS8vSlNpMnUzZlAxUVNtZDFLTndxNlZPS1lHbEF1ODdDaXNWaXI2UHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbjUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbjUvLS9qc29uNS0yLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWG1PV2U3ZXlIWUgxNGNMZFZQb3lnK0dPSDNyWVgrK0twenJ5bEp3U1c5OHQzTmsrVThYT2w4RldLT2d3dHpkYjhsWEdmNnpZd0RVemVITVdmeGFzeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiYmluIjogewotICAgICAgICAianNvbjUiOiAibGliL2NsaS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29ucGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbnBhcnNlLy0vanNvbnBhcnNlLTEuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QT1FYdnBkTDY5K0NsdVlzaWxsSjdTVWhLdnl0WWpXOXZHL0dLcG5mK3hQOFVXZ1lFTS9SYU16SEhvZmJBTERpS2JiUDFXOFVFWW1nR2wzOVdrUFpzZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiBbCi0gICAgICAgICJub2RlID49IDAuMi4wIgotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNvbnN0cmVhbS1uZXh0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb25zdHJlYW0tbmV4dC8tL2pzb25zdHJlYW0tbmV4dC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYUFpNm9QaGR0N0JLeVFuMVNySUlHWkJ0MHVrS3VPVUUxcVY2a0ozR2dpb1NPWXpzUmM4ejlIZnIxQlZtYWNBL2pMZTluQVJmbWdNR2duNjhCcUlBZ2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIihNSVQgT1IgQXBhY2hlLTIuMCkiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImpzb25wYXJzZSI6ICJeMS4yLjAiLAotICAgICAgICAidGhyb3VnaDIiOiAiXjQuMC4yIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqc29uc3RyZWFtLW5leHQiOiAiYmluLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9rZXl2IjogewotICAgICAgInZlcnNpb24iOiAiNC41LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tleXYvLS9rZXl2LTQuNS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1veFZIa0hSL0VKZjJDTlhuV3hSTFc2bWc3SnlDQ1VjRzBEdEVHbUwyY3RVbzFQTlRpbjFQVWlsK3IvKzRyNU1wVmdDL2ZuMWtqc3g3bWpTdWpLcUlwdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqc29uLWJ1ZmZlciI6ICIzLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMva3VsZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva3VsZXIvLS9rdWxlci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWHE5bkg3S2xXWm1YQXRvZFhERFJFN3ZzNkRVMWdUVTh6WURIRGlXTFNpcDQ1RWd3cTNwbExIelBuMjdOZ3Z6TDJyMUxNUEMxdmRxaDk4c1F4dHFqNEE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xldmVuIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xldmVuLy0vbGV2ZW4tMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFzZGErSDhqVGFVYU4veDV2elcycnpjKzhSdzRUQVEvNEtqQjQ2SXdLNVZIK0lsVmVlZWplL0VvWlJwaVh2SXFqRmdLODRRZmZxUHp0R0kzVkJMRzFBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGV2biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZuLy0vbGV2bi0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2JUMnVINEU1TEdFN2gvbjNldmNTL3NRbEpYQ3BJcDZ5bThPV0o1ZVY2KzY3RHNxbC9MYWFUN3FKQkF0MnJ6Zm9hLzVRQkdCaHhEaXgxZE10MmtRS1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHJlbHVkZS1scyI6ICJeMS4yLjEiLAotICAgICAgICAidHlwZS1jaGVjayI6ICJ+MC40LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9saWxjb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGlsY29uZmlnLy0vbGlsY29uZmlnLTMuMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vdmxGS0FvSDVDZ3QzSWUrSkxoUmJ3T3NDUWVQQUJpVTN0SjFlZ0d2eVErMzNSL3Zjd00yWmwyUVIvTHpqc0JlSXRQdDNvU1ZYYXBuK200blFEdnB6dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE0IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9hbnRvbms1MiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGluZXMtYW5kLWNvbHVtbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGluZXMtYW5kLWNvbHVtbnMvLS9saW5lcy1hbmQtY29sdW1ucy0xLjIuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3lseWxlc1pRL1BWMjlqaEVEbDNVZmpvNlpYN2dDcUpyNUY3UEtycWM5M3Y3ZnpTeW10MUJwd0VVOG5BVVhzOHF6enZxaGJqaEs1UVpnNk10L0hrQmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGludC1zdGFnZWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNi4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpbnQtc3RhZ2VkLy0vbGludC1zdGFnZWQtMTYuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11QWVRUXdCeUk2ZGZWN3dwdC9nVnFnK2pBUGFTcDhXd09BOGtLQy9kdjFxdzE0b0dwbnBBaXNZNjVpYkdIVUdEVXYwcllhWjhDQUpaLzFVOGhVdkMyQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNS41LjAiLAotICAgICAgICAiY29tbWFuZGVyIjogIl4xNC4wLjAiLAotICAgICAgICAiZGVidWciOiAiXjQuNC4xIiwKLSAgICAgICAgImxpbGNvbmZpZyI6ICJeMy4xLjMiLAotICAgICAgICAibGlzdHIyIjogIl45LjAuMSIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuOCIsCi0gICAgICAgICJuYW5vLXNwYXduIjogIl4xLjAuMiIsCi0gICAgICAgICJwaWR0cmVlIjogIl4wLjYuMCIsCi0gICAgICAgICJzdHJpbmctYXJndiI6ICJeMC4zLjIiLAotICAgICAgICAieWFtbCI6ICJeMi44LjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImxpbnQtc3RhZ2VkIjogImJpbi9saW50LXN0YWdlZC5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0yMC4xNyIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9saW50LXN0YWdlZCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGludC1zdGFnZWQvbm9kZV9tb2R1bGVzL2NoYWxrIjogewotICAgICAgInZlcnNpb24iOiAiNS42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstNS42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTQ2UXJTUUZ5VlNFeVlBZ1EyMmhRK3pEYTYwWUhBNGZCc3RIbXRTQXBqMVk1dkt0RzI3Zldvd1cwM2pDazVLY2JYRVdQWlVJUjg5NGFBUkNBL0cxa2ZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4xNy4wIHx8IF4xNC4xMyB8fCA+PTE2LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGs/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9saXN0cjIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbGlzdHIyLy0vbGlzdHIyLTkuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WVmQ3Y1M2Vyt2TEp1MndtcTRRbWZWajE0SWVwN2N6NHIvT1dOazM2QXE1Wk9ZN0c4L0JmQ3JRRmV4Y3dCMU9JeEIzeUVSaWVQZkUvUkVCakVGdWxhZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjbGktdHJ1bmNhdGUiOiAiXjQuMC4wIiwKLSAgICAgICAgImNvbG9yZXR0ZSI6ICJeMi4wLjIwIiwKLSAgICAgICAgImV2ZW50ZW1pdHRlcjMiOiAiXjUuMC4xIiwKLSAgICAgICAgImxvZy11cGRhdGUiOiAiXjYuMS4wIiwKLSAgICAgICAgInJmZGMiOiAiXjEuNC4xIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeOS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9saXN0cjIvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNi4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNi4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJONzk4Z0ZmUVgrdml3M1I3eXJHV1JxbnJOMm9Sa0VrVWpqbDRKTm40RThHeHhianRHM0ZickVJSVkzbDgvaHJ3VXdJZUNadmk0UXVPVFA0TUVyVnVnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL2Fuc2ktc3R5bGVzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGlzdHIyL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC0xMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVDKzBvVU1ZMVJxbTRPNkxMcmdqdFlEdmNWWVR5N2NoRG5NNFE3MDMwdFA0S3dqM3UvcFI2Z1A5eWducDJDSk1LNUdxKzlRMm9xbXJGSkF6MDFEWGp3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xpc3RyMi9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC03LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHNhVElrS1c5YjROK0FFaitTVkErV2hKelY3L3pNaGNTdTc4bUxLV1NrN2NYTU9TSHNCS0ZXVXMwZld3cThReUszTWdKQlFSWDZHYmk0a1liZHZHa1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZW1vamktcmVnZXgiOiAiXjEwLjMuMCIsCi0gICAgICAgICJnZXQtZWFzdC1hc2lhbi13aWR0aCI6ICJeMS4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGlzdHIyL25vZGVfbW9kdWxlcy93cmFwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI5LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcC1hbnNpLy0vd3JhcC1hbnNpLTkuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HOHVyYTNTKzNaMkcrbWtnTlJxOGRxYUZaQXV4ZnN4cEJCOE9DVEdSVEN0cCtsL3Y5bmJGTm1DVVAxQlpNdHMzRzExNDJNc1pmbjZlZVVLcnI0UEQxUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNi4yLjEiLAotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl43LjAuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl43LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvd3JhcC1hbnNpP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9jYXRlLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaVBaSzZlWWpieFJ1M3VCNC9XWjNFc0VJTUpGTXFBb29wbDNSK3p1cTBVamNBbS9NTzZLQ3dlRGdQZlAzZWxUenRvS1AzS3RuVkh4VG4yTkhCU0RWVXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC1sb2NhdGUiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5tZW1vaXplIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xvZGFzaC5tZW1vaXplLy0vbG9kYXNoLm1lbW9pemUtNC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ3aitOem1nblF6VEFZWGNzSFlMZ2ltbHRPVjFNWEh0bE9XZjZHakw5S2o4R0s1RkludzVKb3R4dmJPcytJdlYxL0R6bzA0L2ZDR2ZMVnM3YVhiNEFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZGFzaC5tZXJnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gubWVyZ2UvLS9sb2Rhc2gubWVyZ2UtNC42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBLcGpxWFJWdnJZeUNzWDFzd1IvWFRLMHZhNlZRa1FNNk1ObzdQcVc3N0J5akFob0FSQThFZnJQMU40K0tsS2o4WVMwWlVDdFJUL1lVdWh5WUR1aklRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZy11cGRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9nLXVwZGF0ZS8tL2xvZy11cGRhdGUtNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlpZThJdFBSNnRqWTV1WUpoOEsvWnJ2L1JNWjVWT2xPV3Z0WmRFSFlTVEZLWmZJQlBRYTl0T0FFZUFXaGQrQW5JbmVMSjIydzVmak9ZdG91dHBXcTV3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNy4wLjAiLAotICAgICAgICAiY2xpLWN1cnNvciI6ICJeNS4wLjAiLAotICAgICAgICAic2xpY2UtYW5zaSI6ICJeNy4xLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4xLjAiLAotICAgICAgICAid3JhcC1hbnNpIjogIl45LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2ctdXBkYXRlL25vZGVfbW9kdWxlcy9hbnNpLWVzY2FwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1lc2NhcGVzLy0vYW5zaS1lc2NhcGVzLTcuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HZFlPN2E2MW1SMGZPbEFzdkM5L3JJSGY3TDk2c0JjNmRFV3plT3UrS0FlYTViWnlRUlBJcG9qclZvSTRBWEdKUy95Y3UvZkJUZExyVWtBNE9EcnZqdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbnZpcm9ubWVudCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9nLXVwZGF0ZS9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy02LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYk43OThnRmZRWCt2aXczUjd5ckdXUnFuck4yb1JrRWtVampsNEpObjRFOEd4eGJqdEczRmJyRUlJWTNsOC9ocndVd0llQ1p2aTRRdU9UUDRNRXJWdWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2ctdXBkYXRlL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC0xMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUVDKzBvVU1ZMVJxbTRPNkxMcmdqdFlEdmNWWVR5N2NoRG5NNFE3MDMwdFA0S3dqM3UvcFI2Z1A5eWducDJDSk1LNUdxKzlRMm9xbXJGSkF6MDFEWGp3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZy11cGRhdGUvbm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Ly0vaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQtNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9WYTN1OWtrQmJ3N2I4WHc1RjlQK0QvVDlYK1o0K0pydVlWTmFwVGpQWVpZVXpuUTVZZldlRmtPajYwNlhZWVc4eXVnVGZDOFBqMGhZcXZpNHJ5QWhBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdldC1lYXN0LWFzaWFuLXdpZHRoIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2ctdXBkYXRlL25vZGVfbW9kdWxlcy9zbGljZS1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsaWNlLWFuc2kvLS9zbGljZS1hbnNpLTcuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iU2lTbmdaL2pXZVg5M0JxZUlBYklteVRiRWloaXpjd05qRm9SVUlZL1Qxd1dRc2ZzbTJWdzFhZ1BLeWxYdlFUVTdpQVNHZEhoeXFSbHFRemZ6K0h0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNi4yLjEiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9zbGljZS1hbnNpP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9nLXVwZGF0ZS9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC03LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHNhVElrS1c5YjROK0FFaitTVkErV2hKelY3L3pNaGNTdTc4bUxLV1NrN2NYTU9TSHNCS0ZXVXMwZld3cThReUszTWdKQlFSWDZHYmk0a1liZHZHa1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZW1vamktcmVnZXgiOiAiXjEwLjMuMCIsCi0gICAgICAgICJnZXQtZWFzdC1hc2lhbi13aWR0aCI6ICJeMS4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbG9nLXVwZGF0ZS9ub2RlX21vZHVsZXMvd3JhcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiOS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS05LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRzh1cmEzUyszWjJHK21rZ05ScThkcWFGWkF1eGZzeHBCQjhPQ1RHUlRDdHArbC92OW5iRk5tQ1VQMUJaTXRzM0cxMTQyTXNaZm42ZWVVS3JyNFBEMVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjYuMi4xIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNy4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2xvZ2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9nZm9ybS8tL2xvZ2Zvcm0tMi43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRGWUE0am5QN1BWYm1sQklmaGxTZStXS3hzOWRrbFhNVEVHY0JDSXZMaEUvVG4zSDZHazFub3J1cFZXN201Q25kNGJMY3IwOEF5dGJ5Vi94ajdmL2tRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAY29sb3JzL2NvbG9ycyI6ICIxLjYuMCIsCi0gICAgICAgICJAdHlwZXMvdHJpcGxlLWJlYW0iOiAiXjEuMy4yIiwKLSAgICAgICAgImZlY2hhIjogIl40LjIuMCIsCi0gICAgICAgICJtcyI6ICJeMi4xLjEiLAotICAgICAgICAic2FmZS1zdGFibGUtc3RyaW5naWZ5IjogIl4yLjMuMSIsCi0gICAgICAgICJ0cmlwbGUtYmVhbSI6ICJeMS4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xydS1jYWNoZS8tL2xydS1jYWNoZS01LjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS3BOQVJRQTNJd3YralRBMHV0VVZWYnJoK0pscnIxRnYwZTU2R0d6QUZPWE43ZGsvRnZpYURXOExIbUs1MkRsY0g0V1AybjZnSTh2TjFhZXNCRmdvOXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFsbGlzdCI6ICJeMy4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21ha2UtZGlyIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ha2UtZGlyLy0vbWFrZS1kaXItNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWhYZFVUWllJVk90MUV4Ly9qQVFpK3dUWlpwVXB3QmovMFFzT3pxZWdiM3JHTU1lSmlTRXU1eExIbllmQnJSVjRSSDIrT0NTT085NUlzLzd4MVdKNGJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNlbXZlciI6ICJeNy41LjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWFrZS1lcnJvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWVycm9yLy0vbWFrZS1lcnJvci0xLjMuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItczhVaGxOZTd2UEtvbVFoQzFxRmVsTW9rci9TYzNBZ05ic28zbjc0bVZQQTVMVFp3a0I5TmxYZjRYUGFtTHhKRThoMGdoNzNyTTk0eHZ3UlQyQ1ZJbnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWFrZWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlZXJyb3IvLS9tYWtlZXJyb3ItMS4wLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbXFDdlVobXQ0M21hZGxwRnpHNEJRekcyWjNtNnR2UUROS2RDbFpuTzNWYkl1ZEpZbXhzVDBGTkpNZWlCMitKVFNsVFFUU2JVOFFkZXNWbXdKY21MZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0bXBsIjogIjEuMC41IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYXAtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcC1zdHJlYW0vLS9tYXAtc3RyZWFtLTAuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DMFgwS1FtR20zTjJmdGJUR0JoU3l1eWRRK3ZWMUxDM2YzelB2VDNSWEhYTlpydmZQWmNvWHAvTjVET2E4dmVkWC9yVE1tMkNqVHRpdkZnMlNUSk1SUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWF0aC1pbnRyaW5zaWNzLy0vbWF0aC1pbnRyaW5zaWNzLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vSVh0YndFazVIVFB5RXd5S1g2aEdrWVh4TTluYmo2NEIraWxWSm5DL1I2QjBwSDVHNFYzYjBwVmJMN0RCajR0a2hCQXBwYlFVbGY2RjZYbDlMSHUxZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZWRpYS10eXBlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZWRpYS10eXBlci8tL21lZGlhLXR5cGVyLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1haXNuckRQNEdOZTA2VWNLRm5WNWJmTU5QQlV3NGpzTEdhV3dXZm5IM3YwMkduQnVYWDJNQ1ZuNVJicldvMGozcGN6VWlsWWJscTdmUTdOdzJ0NVhLdz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1kZXNjcmlwdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXJnZS1kZXNjcmlwdG9ycy8tL21lcmdlLWRlc2NyaXB0b3JzLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TbmszMTRWNWF5RkxocDNma1VSRXViNld0akJmUGRDUFkxTG44LzhtdW51THVpWWhzQUJnQlZXc296QUcrTVdNYlZFdmNkY3BiaTlSN3d3MjJsOVEzZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2Utc3RyZWFtLy0vbWVyZ2Utc3RyZWFtLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hYnYvcU9jdVBmazNVUlBmRHptWlUxTEttdXc4a1QrMG5JSHZLcktnRnJ3aWZvbC9kb1djZEE0WnFzV1E4RU5yRktrZDY3TWZwby9Mb3ZiSVVzYnQzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZTIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UyLy0vbWVyZ2UyLTEuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04cTdWRWdNSlc0Sjh0Y2ZWUHk4ZzA5TmNRd1pkYndGRXFoZS9XWmtvSXpqbi8zVEdEd3RPQ1l0WEd4QTNPOHRQenBjekNDRGd2K1AyUDV5MDBaSk9PZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taWNyb21hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pY3JvbWF0Y2gvLS9taWNyb21hdGNoLTQuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QWHdmQmhZdTBoQkNQdzhEbjBFK1dEWWI3YWYzZFNMVldLaTNIR3Y4NElkRjRUeUZvQzB5c3hGZDBHb3h3N25TdjRUL1B6RUpReHNZc0VpRkNLbzJCQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJhY2VzIjogIl4zLjAuMyIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMy4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLy0vbWltZS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItalNDVTcvVkIxbG9JV0JaZTE0YUVZSFUvKzFVTUVIb2FPN3F4Q09WSk93OUdnSDcyVkFXcHB4TmNqVSt4OWEyazNHU0lCWE5LeFhRRnFSdnZaN3ZyM0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgIm1pbWUiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWltZS1kYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNTQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS1kYi8tL21pbWUtZGItMS41NC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hVTVFSnVJTjJXRGVtQ2NBcDJ2RkJmcC9tNEVBaFdKblVOU1N3MGl4czcva1hiZDZQZzY0RW13SmtOZEZoQjhhV3Qxc0gyQ1RYckx4by9pQUdWM29QUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW1lLXR5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWUtdHlwZXMvLS9taW1lLXR5cGVzLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14UmM0b0VoVDZlYUJwVTFYRjdBanBPRkQreFFtWE5CNU9WS3dwNHRxQ3VCcEhMUy9aYkJEcmMwN21ZVERxVk1nNlBmeFVqak5wODVPNkNkMlovNUhXQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWltZS1kYiI6ICJeMS41NC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbWljLWZuIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWljLWZuLy0vbWltaWMtZm4tMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9xYk9rNW9FUWVBWjhXWFd5ZGx1OUhKano5V1ZkRUl2YW1NQ2NYbXVxVVlqVGtuSC9zcXNXdmhRM3Znd0tGUlIxSHBqdk5CS1EzN25iSmdZekdxR2NnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWltaWMtZnVuY3Rpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltaWMtZnVuY3Rpb24vLS9taW1pYy1mdW5jdGlvbi01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlA3OVhVUHhWMkNpZ1lQM2pXd0FVRlNrdTJhS3FCSDd1VEFhcEZXQ0JxdXRzYm1Ebzk2S1k1bzh1aDZVKy9ZU0luNU94Sm5YcDczYmVWa3BxTUlHaEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTMuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KN3A2M2hSaUFqdzFOREV3dzFXN2kzNytCeUlyT1dPNVhRUUF6WjNWT2NMMFBOeWJ3cGZtVi9OMDV6RkF6d1E5VVN5RWNYNnQzVU8rSzVhcUJRT0lIdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjEuMS43IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW5pbWlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWlzdC8tL21pbmltaXN0LTEuMi44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yeXlBUjhxQmtOM1l1aGVKYW5VcFdDNVUzYmI1b3NEeXdOQjhSekRWbER3REhib2NBSnZlcXFqMXU4K1NWRDdqa1dUNHl2c0hDcFdxcVdxQXhiMHpDQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbmlwYXNzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmlwYXNzLy0vbWluaXBhc3MtNy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFPT3pTMWNCVFdZRjRCSDhmVmVQREJPTzlpcHRNbkdVRVp3TmMvY01XblRWMm5WTFo3Vm9OV0VQSGtZY3paQTBwZG9BN2RsNmU3Rkw2NTluWDlTMmF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYgfHwgMTQgPj0xNC4xNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNkZsenViVExaRzNKMmEvTlZDQWxlRWhqenE1b3hnSHlhQ1U5eVlYdmNMc3ZvVmFISnEvczV4WEk2L1hYUDZ0ejdSOXhBT3RIblNPL3RYdEYzV1JUbEE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21zZ3BhY2tyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tc2dwYWNrci8tL21zZ3BhY2tyLTEuMTEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWprVUhOMHlxcDlSV0t5MExwbGhoK3dscGR0OW9RQllnVUxaT2lGaFYzVmNsU0YxSm5TUVdaNXI5Z09SUWxOWWFVS1FvUjhpdHY3Zzd6MXhERHVBQ0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXNncGFja3ItZXh0cmFjdCI6ICJeMy4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21zZ3BhY2tyLWV4dHJhY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXNncGFja3ItZXh0cmFjdC8tL21zZ3BhY2tyLWV4dHJhY3QtMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVAwZWZUMUM5aklkVlJlZnFqek9ROVhtbDU3enBPWG5JdVMrY3NhQjRNZFpiVGRtR0RMbzhYaHpCRzFON2FPMTFnS0REa0p2QkxVTGVGVG80Nnd3cmVBPT0iLAotICAgICAgImhhc0luc3RhbGxTY3JpcHQiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1neXAtYnVpbGQtb3B0aW9uYWwtcGFja2FnZXMiOiAiNS4yLjIiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImRvd25sb2FkLW1zZ3BhY2tyLXByZWJ1aWxkcyI6ICJiaW4vZG93bmxvYWQtcHJlYnVpbGRzLmpzIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBtc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLWFybTY0IjogIjMuMC4zIiwKLSAgICAgICAgIkBtc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtZGFyd2luLXg2NCI6ICIzLjAuMyIsCi0gICAgICAgICJAbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybSI6ICIzLjAuMyIsCi0gICAgICAgICJAbXNncGFja3ItZXh0cmFjdC9tc2dwYWNrci1leHRyYWN0LWxpbnV4LWFybTY0IjogIjMuMC4zIiwKLSAgICAgICAgIkBtc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3QtbGludXgteDY0IjogIjMuMC4zIiwKLSAgICAgICAgIkBtc2dwYWNrci1leHRyYWN0L21zZ3BhY2tyLWV4dHJhY3Qtd2luMzIteDY0IjogIjMuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tdWx0aXBhc3RhIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL211bHRpcGFzdGEvLS9tdWx0aXBhc3RhLTAuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LUEE1OGQ2OEtnR2lsMTVvRHFYamtVQkVCWWMwMFh2YlBqNS9YK2R5emVvL2xXbTlOYzI1cFFSbGYxRCtndjRPcEs3Tk0wSjFvZHJidTlKTk5HdnluQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbmFuby1zcGF3biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYW5vLXNwYXduLy0vbmFuby1zcGF3bi0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMjF0K296TVFEQUwvVUdnUVZCYloveFh2Tk8xMCsrWlB1VG1LUk84azlWM0FDbFZSaHQ0OWFodERqZlk4bDFxNm5TSE9yRTVBU2Z0aHpIM29sNlIvaGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0yMC4xNyIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL25hbm8tc3Bhd24/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9uYXBpLXBvc3RpbnN0YWxsIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25hcGktcG9zdGluc3RhbGwvLS9uYXBpLXBvc3RpbnN0YWxsLTAuMy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11VHAxNzJMTFhTeHVTWUh2L2tvdStmNktXM1NNcHBVOWl2dGhhVlRYaWFuOXNPdDNYTS96SFlIcFJaaUxnUW94ZVdmWVVuc2xOV1FIRjErRzcxeGNvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJuYXBpLXBvc3RpbnN0YWxsIjogImxpYi9jbGkuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMC4wIHx8IF4xNC4xOC4wIHx8ID49MTYuMC4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL25hcGktcG9zdGluc3RhbGwiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25hdHVyYWwtY29tcGFyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYXR1cmFsLWNvbXBhcmUvLS9uYXR1cmFsLWNvbXBhcmUtMS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9XTkQ4ZWkzVnROQzloN1Y2MHFmZjNTVm9iSHI5OTZDVHdneHViZ3lRWUVwZzI5MGg5SjBidXlFQ05OSmV4a0ZtNXNPYWpoNUcxMTZSWUExYzhaTVN3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25lZ290aWF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVnb3RpYXRvci8tL25lZ290aWF0b3ItMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLThPZnMvQVVRaDhNYUVjcmxxNXhPWDBDUTl5cFRGNWRsNzhtamxNTmZPSzA4ZnpwZ1RIUVJRUEJ4Y1BsRXRJdzB5UnB3cytaby8zcis1V1JieTd1M0dnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25lby1hc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uZW8tYXN5bmMvLS9uZW8tYXN5bmMtMi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlkM1VFUzVtV0NTcVIrcU5UOTNTM1VvWVVrcUFaOWxMZzhhN2c5cmltc1dtWUdLOGNWVG9BNC9zRjNScnNoZHlWM3NBR01YVlVtcE1ZT3crZExwT3V3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25vZGUtYWRkb24tYXBpIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtYWRkb24tYXBpLy0vbm9kZS1hZGRvbi1hcGktNy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVtM2JzeXJqRldFMXhmN256N1lYZE40dWRuVnRYSzYvWWZnbjVxbmFoTDZiQ2tmMnlLdDRrM251VEtBdFQ0cjNJRzhKTlIybmNzSU1kWnVBekpqSFFRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ub2RlLWd5cC1idWlsZC1vcHRpb25hbC1wYWNrYWdlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWd5cC1idWlsZC1vcHRpb25hbC1wYWNrYWdlcy8tL25vZGUtZ3lwLWJ1aWxkLW9wdGlvbmFsLXBhY2thZ2VzLTUuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zK3crckJXbnBUTXdTRmJhRTBVWHNSbGc3aFU0Rmpla0tVNGV5QWloNVQ4bkp1TlpUMW5Oc3NrWHB4bWVxU0s5VXprQmw2VWdSbG5LYzhoejhJRXFPdz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRldGVjdC1saWJjIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAibm9kZS1neXAtYnVpbGQtb3B0aW9uYWwtcGFja2FnZXMiOiAiYmluLmpzIiwKLSAgICAgICAgIm5vZGUtZ3lwLWJ1aWxkLW9wdGlvbmFsLXBhY2thZ2VzLW9wdGlvbmFsIjogIm9wdGlvbmFsLmpzIiwKLSAgICAgICAgIm5vZGUtZ3lwLWJ1aWxkLW9wdGlvbmFsLXBhY2thZ2VzLXRlc3QiOiAiYnVpbGQtdGVzdC5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1neXAtYnVpbGQtb3B0aW9uYWwtcGFja2FnZXMvbm9kZV9tb2R1bGVzL2RldGVjdC1saWJjIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1saWJjLy0vZGV0ZWN0LWxpYmMtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNVRHYrRzlDc0NLTzFXS01Hdzlmd3EvU1dKWWJJMGM1WTdMVTFBWFlvRGRiaEUyQUhRNk42TmIzNHNHOEZqN1Q1QVB5OHFYRENLdXVJSGQxQlIwdFZBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiQXBhY2hlLTIuMCIsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1pbnQ2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWludDY0Ly0vbm9kZS1pbnQ2NC0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzVsejkxeFNPZW9YUDZEdWx5SGZsbHBxK0VnMDBNV2l0WklidFBmb1NFdnFJSGRsNWdmY1k2aFl6RFduajBxRDV0ejUyUEkwOHU5cVV2U1ZlVUJlSHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1yZWxlYXNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1yZWxlYXNlcy8tL25vZGUtcmVsZWFzZXMtMi4wLjE5LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14eE9XSnNCS3R6QXE3RFkwSitEVHp1ejU4SzhlN3NKYmRnd2tiTVdRZThVWUI2ZWttc1E0NXEwTS90SkRzR2FabWJDK2w3bjU3VVY4SGw1dEh4Tzl1dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ub3JtYWxpemUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtcGF0aC8tL25vcm1hbGl6ZS1wYXRoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZVpzNUxzM1d0Q2lzSFdwOVMyR1V5OGRxa3BHaTRCVlN6M0dhcWlFNmV6dWIwNTEyRVN6dFhVd1VCNkM2SUtiUWtZMlBuYi9tRDRXWW9qQ1J3Y3dMQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbnBtLXJ1bi1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25wbS1ydW4tcGF0aC8tL25wbS1ydW4tcGF0aC00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzQ4V3paVzc3N3poTklybjdneE9sSVNOQXFpOVpDL3VRRm5SZGJlSUhoWmhDQTZVcXBrT1Q4VDFHN0J2ZmRnUDRFcjhnRjRzVWJhUzBpN1F2SWZDV3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGF0aC1rZXkiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LWFzc2lnbi8tL29iamVjdC1hc3NpZ24tNC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXJKZ1RRbmtVbkgxc0Z3OHlUNlZTVTN6RDNzV211NnNaaElzZVk4VlgrR1J1M1A2RjdGdStKTkRvWGZrbEVsYkxKU25jM0ZVUUhWZTRjVTVoaitCY1VnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWluc3BlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEzLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1pbnNwZWN0Ly0vb2JqZWN0LWluc3BlY3QtMS4xMy40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XNjdpTGw0SjJFWEVHVGJmZUhDZmZyakRmaXR2TEFOZzBVbFgzd0ZVVVNUeDkyS1hSRmVnTUhVVmdTcUUrd3ZoQWJpNFdxakdnOWN6eXNUVjJFcGJldz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29uLWZpbmlzaGVkIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uLWZpbmlzaGVkLy0vb24tZmluaXNoZWQtMi40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9WbHprZzNFTkFoQ2syemR2N0lKd2QvUVVENHoyUnhSd3BrY0dZOHBzQ1ZjQ1laTnE0d1luVldBTEhNK2JydHVKamVQV2lZRi9DbG11RHI4Q2g1K2tnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlZS1maXJzdCI6ICIxLjEuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vbmNlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uY2UvLS9vbmNlLTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sTmFKZ0krMlE1VVJRQmtjY0VLSFRRT1BhWGRVeG5aWkVsUVRaWTBNRlVBdWFFcWUxRStOeXZnZHovYUl5Tmk2WjlNek81ZHYxSDhuNTgvR0VMcDMrdz09IiwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAid3JhcHB5IjogIjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29uZS10aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uZS10aW1lLy0vb25lLXRpbWUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVEWE9pUkt3dVNFY1EvbDBrR0NGNlEzamNBREZ2NXRTbVJhSmNrL09xa1ZGY096dXRCMTM0S1JTZkYweERyTDM5TU5ucXhiSEJiVVVjalpJaFRnYjJnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmbi5uYW1lIjogIjEueC54IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vbmV0aW1lIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uZXRpbWUvLS9vbmV0aW1lLTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rYnBhU1NHSlRXZEFZNUtQVmVNT0tYU3JQdHI4QzhDN3dvZEpiY3NkNTFqUm5tRCtHWnU4WTBWb1U2RG01WjR2V3IwSWcvMU5LdVdSS2Y3ajVhYVlTZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW1pYy1mbiI6ICJeMi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vcHRpb25hdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC45LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wdGlvbmF0b3IvLS9vcHRpb25hdG9yLTAuOS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02SXBRN21LVXhSY1pOTElPYlIwaHo3bHhzYXBTU0lZTlpKd1hQR2VGMG1UVnFHS0ZJWGoxRFFjTW9UMjJTM1JPY0x5WS9yejBQV2FXWjlheVdtYWQ5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWVwLWlzIjogIl4wLjEuMyIsCi0gICAgICAgICJmYXN0LWxldmVuc2h0ZWluIjogIl4yLjAuNiIsCi0gICAgICAgICJsZXZuIjogIl4wLjQuMSIsCi0gICAgICAgICJwcmVsdWRlLWxzIjogIl4xLjIuMSIsCi0gICAgICAgICJ0eXBlLWNoZWNrIjogIl4wLjQuMCIsCi0gICAgICAgICJ3b3JkLXdyYXAiOiAiXjEuMi41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcC1saW1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVFlPYW5NM3dHd05Hc1pOMmNWVFlQQXJ3NDU0eG5YajVxbVdGMWJFb0FjNCtjVS9vbDdHVmg3b2RldmpwMUZOSGR1SGMzS1pNY0ZkdXhVNVhjNnVKUlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieW9jdG8tcXVldWUiOiAiXjAuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3AtbG9jYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxhTmp0UldVQlkrK3pCNW5FL053Y2FvTXlsU1BrK1MrWkhOQjFUemRiTUpNbnk2ZHlucEFHdDdYL3RsL1FZcTNUSWVFNm54SHBwYm8yTEd5bXJHNVB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbGltaXQiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3AtdHJ5IjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtdHJ5Ly0vcC10cnktMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI0blBBVlRBVTBCOUQzNS9HazN1SmYvN1hZYlFjeW9oU0tkdkF4SVJTTmdoRmw0ZTcxaFZvR25CTlF6OWNXYVh4TzJJMTBLVEMrM2pNZHZ2b0t3NmRRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGFja2FnZS1qc29uLWZyb20tZGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYWNrYWdlLWpzb24tZnJvbS1kaXN0Ly0vcGFja2FnZS1qc29uLWZyb20tZGlzdC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVUVaSVMzL2J5NE9DOHZMM1AyZFRYUkVUcGViTEkyTmlJNXZJcmphRC81VXRya0ZYL3ROYndqVFNSQUdDLys3Q0FvMnBJY0JhUmdXbWNCQkhjc2FDSXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJsdWVPYWstMS4wLjAiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhcmVudC1tb2R1bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyZW50LW1vZHVsZS8tL3BhcmVudC1tb2R1bGUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdRMkVXUnBRVjgvbytBdzhZcXRmWlpQZk5SV1pZa2JpZEU5azVycGwvaEMzdnRISEJmR20ySWZpNnFXVitjb0RHa3JVS1pBeEUzTG90NWtjc1JsaCtnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGxzaXRlcyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGFyc2UtanNvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXlDS3ZtL3BoQ0d4T2tZUlNDTTgyaUR3Y3Q4L0VvblNFZ0NTeFd4RDd2ZTZqSGdnc0ZsNGZaVlFCUFJOZ1FvS2l1Vi9vZGhGckd6UVhad2JpZkM4Umc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMC4wIiwKLSAgICAgICAgImVycm9yLWV4IjogIl4xLjMuMSIsCi0gICAgICAgICJqc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6ICJeMi4zLjAiLAotICAgICAgICAibGluZXMtYW5kLWNvbHVtbnMiOiAiXjEuMS42IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGFyc2V1cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2V1cmwvLS9wYXJzZXVybC0xLjMuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ2l5ZU94RlQvSlp5TjVtMHo5UGZYdzRTQ0JKNlN5Z3oxRHBsMHdxamxoREVHR0JQMUduc1VWRUwwcDYzaG9HMWZjajNmSHluWGk5TllPNG5XT0wrcVE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGF0aC1leGlzdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1leGlzdHMvLS9wYXRoLWV4aXN0cy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWs5UXk1UTdqWWIyV3djZXk1RnB2ZzJLb0FjL1pJaExTTE9TQm1SbXlnUHNHd2tWVnQwZlphMHFydE16K202dEpUQUhmWlE4Rm5tQjRNRzRMV3k3L3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLWlzLWFic29sdXRlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtaXMtYWJzb2x1dGUvLS9wYXRoLWlzLWFic29sdXRlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BVmJ3M1VKMmU5YnE2NHZTYVM5QW0wZmplMVBhOHBiR3FUVHNtWGZhSWlNcG5yNURsRGhmSk91TGo5U2Y5NVpQVkRBVWVyRGZFazg4TVBtUGU3VUNRZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGF0aC1rZXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGF0aC1rZXkvLS9wYXRoLWtleS0zLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb2ptZU4wcWQreTBqc3pFdG9ZNDhyMFBlcTVkd01Fa0lsQ091NlE1ZjQxbGZrc3dYdUt0WXJoZ29UcExueUljSG0yNFVocXgrNVRxbTJJblN3TGhFNlE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGF0aC1zY3VycnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjExLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtc2N1cnJ5Ly0vcGF0aC1zY3VycnktMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YYTROdzE3RlM5QXBRRko5dW1MaUpTNG9yR2ptN1p6d1Vyd2FtY0dRdUhTekR5dGg5Ym9LRGF5Y1lkRGNaRHVxWUFUWHc0SEZYZ2FxV1RjdFcvdjFIQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQmx1ZU9hay0xLjAuMCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogIl4xMC4yLjAiLAotICAgICAgICAibWluaXBhc3MiOiAiXjUuMC4wIHx8IF42LjAuMiB8fCBeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYgfHwgMTQgPj0xNC4xOCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLXNjdXJyeS9ub2RlX21vZHVsZXMvbHJ1LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMTAuNC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtMTAuNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KTkF6WmNYckN0NDJWR0x1WXowemZBekRmQXZKV1c2QWZZbERCUXlEVjVEQ2xJMm01c0FtSytPSU83czU5WGZzUnNXSHAwMmpBSnJSYWRQUkdUdDZTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLXRvLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLXRvLXJlZ2V4cC8tL3BhdGgtdG8tcmVnZXhwLTguMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UZHJGN2ZXOVJwaGpxNFJqclcwS3AyQVcwQWh3dTlzUkdUa1M2YnZEaTBTQ3dabEVaWW1jZkRiRXNUejhSVmswRUhJUy9WZDFidjNKaEcrMXhadUF5UT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGF1c2Utc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMC4wLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXVzZS1zdHJlYW0vLS9wYXVzZS1zdHJlYW0tMC4wLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lM0ZCbFhMbU4vRDFTK3pIemFuUDRFLzRaNjBvRkFhM08wNTFxdDFweGE3REVKV0tBeWlsNnVwWVZYQ1dhZEVudW9xYTRQa2M5b1V4OXpzeFllUnY4QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiBbCi0gICAgICAgICJNSVQiLAotICAgICAgICAiQXBhY2hlMiIKLSAgICAgIF0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidGhyb3VnaCI6ICJ+Mi4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9waWNvY29sb3JzIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpY29jb2xvcnMvLS9waWNvY29sb3JzLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14Y2VIMnNuaHRiNU05bGlxRHNtRXc1NmxlMzc2bVRaa0VYL2pFYi9SeE5GeWVnTnVsN2VOc2xDWFA5RkRqL0xjdTBYOEtFeU1jZVAybnRwYUhyREVWQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9waWNvbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGljb21hdGNoLy0vcGljb21hdGNoLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KVTN0ZUhUTmptRTJWQ0dGenVZOEVYekNEVndFcUIyYThmc0l2d2FTdEhoQVdKRWVWZDFvMVFEODBDVTYrWmRFWFhTTGJTc3VMd0pqa0NCV3FSUVVWQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BpZHRyZWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlkdHJlZS8tL3BpZHRyZWUtMC42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVHMmRXVFZ3NWJ6cUdSenRuSEV4Y3pOeHQ1VkdzRTZPd1RlQ0czZmRVZjlLQnNaek8zUjVPSUlJeldSK2laQTBOdForUkRWZGFvRTJkSzFjbjZqSDRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInBpZHRyZWUiOiAiYmluL3BpZHRyZWUuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGlyYXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waXJhdGVzLy0vcGlyYXRlcy00LjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVGZ5U3JzLzVubThmUUpEY0JEdVVuZzNWT1VLc2Q3Uyt6cXZiT1RpR1hIZnhYNHdLMzFhcmQraG9OdXZraWNNLzJZRnpscERnQUJPZXZLU3NCNEcvRkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGtjZS1jaGFsbGVuZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGtjZS1jaGFsbGVuZ2UvLS9wa2NlLWNoYWxsZW5nZS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdWVHTGZscnJudndCM3h1by91R29iNXBkNUZON2wwTXNMZjBaODdvL1VRbVJ0d2p2ZnlsZmM5TXVySXhSQVd5d0NZVGdydnBYQmNxalY0T2ZDWUdDSVE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTYuMjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGtnLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wa2ctZGlyLy0vcGtnLWRpci00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSFJEemJhS2pDK0FPV1ZYeEFVL3g1NENPR2VJdjllYis2Q2tEU1FvTlR0NFh5V29JSnZ1UHNYaXp4dS9GcjIzRWlla2J0WndtaDFJY0lHL2wvYTEwR1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmluZC11cCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGtnLWRpci9ub2RlX21vZHVsZXMvZmluZC11cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5kLXVwLy0vZmluZC11cC00LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUHBPd0FkUS9ZbFhRMnZqOGEzaDhJaXBEdVlSaTN3Y2VWUVFHWVd4TklOY2NxNDBBbnc3QmxzRVhDTWJ0MVp0K09MQTZGcTlzdUlwSVdEME9zbklTbHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjUuMC4wIiwKLSAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wa2ctZGlyL25vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxvY2F0ZSI6ICJeNC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGtnLWRpci9ub2RlX21vZHVsZXMvcC1saW1pdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLWxpbWl0Ly0vcC1saW1pdC0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItLy84OG1GV1NKeDhseEN6d2RBQUJUSkwyTXlXQjEyK2VJWTdNREwyU3FMbUFrZUtVOXF4UnZXdVN5VGptM0ZVbXBCRU11RmZja0FJcUVhVkdVRHhiNnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC10cnkiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGtnLWRpci9ub2RlX21vZHVsZXMvcC1sb2NhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS00LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjc5WlovMHdBeEtHdTNvWU1sejhqeS9rYmhzTnJTN1NLWjdQeEVIQmdKNStGMm10RlcyZksyY090QmgxY0hZa1FzYnpGVjdJK0VvUktlNll0MG9LN0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC1saW1pdCI6ICJeMi4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJlbHVkZS1scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmVsdWRlLWxzLy0vcHJlbHVkZS1scy0xLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdmtjRFByUlpvMVFaTGJuNVJMR1BwZy9XbUlRNjVxb1dXaGNHS2YvYjVlcGxra2FyWDBtOXo4cHBDYXQ0bWxPcVVzV3B5TnVZZ08zVlJ5cllIU3pYNWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ByZXR0aWVyIjogewotICAgICAgInZlcnNpb24iOiAiMy42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0aWVyLy0vcHJldHRpZXItMy42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUk3QUlnNWJvQXI1UjBGRnRKNnJDZkQrTEZzV0hwODFkb2xyRkQ4Uzc5VTl0YjhBejJuR3JKbmNuTVNueXMrYnBRSmZSVXpxczlobkE4MU9BQTNoQ3VRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInByZXR0aWVyIjogImJpbi9wcmV0dGllci5janMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ByZXR0aWVyL3ByZXR0aWVyP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMwLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMzAuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EMXRLdFl2QnlyQmtGTGUyd0hKbDJid01KSWlUOHJXK1hBK1RpYXRhSDc5L0ZzekxRTXJwR0V2elVWa3pQYXU3T0NPMFFucmhwZTg3UHF0T0FJQjhZdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9zY2hlbWFzIjogIjMwLjAuNSIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4yLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE4LjMuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE4LjE0LjAgfHwgXjIwLjAuMCB8fCBeMjIuMC4wIHx8ID49MjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcmV0dHktZm9ybWF0L25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1DeHdwdDJTZlR6VHRYY2ZPbHpHRWVlOE8rYytNbVVnR3JOaUJjWG51V3h1RkpIZTZhNUh6N3F3aHdlNU9nYVNZSTBJSnZrTHFXWDFBU0crY0pPa0VpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Byb2Nlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9jZXNzLy0vcHJvY2Vzcy0wLjExLjEwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jZEdlZi9kcldGb3lkRDFKc016dUZmODEwMG5abCtHVCt5YWNjMmJFY2VkNWY5UmprNHorV3RGVVRCdTlQaE9pOWovamZtQlB1MG1NRVk0d0lkQUY4QT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Byb3h5LWFkZHIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJveHktYWRkci8tL3Byb3h5LWFkZHItMi4wLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxsUXNNTFNVRFVQVDQ0amRyVS9PMzdxbG5pZml0RFArWndybW1aY29TS3lMS3Z0WnhweVYwbjIvYkQvTjR0QkFBWi9nSkVkWlU3S01yYW9LMStYWUFnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmb3J3YXJkZWQiOiAiMC4yLjAiLAotICAgICAgICAiaXBhZGRyLmpzIjogIjEuOS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wdW55Y29kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdW55Y29kZS8tL3B1bnljb2RlLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12WXQ3VUQxVTlXZzYxMzhzaEx0TE92ZEF1KzhEc0MvaWxGdEVWSGNIK3d5ZGNTcE5FMjBBZlNPZHVmNk1rUkZhaEw1Rlk3WDFvVTduS1ZaRnRmcThGZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wdXJlLXJhbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVyZS1yYW5kLy0vcHVyZS1yYW5kLTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iVldhd3ZvWm9CWXBwNnlJb1F0UVhIWmptejM1UlNWSG5VT1RlZmw4VmNqcjhzblRQWTF3bnBTUE1XZWtjRndieEk2Z3RtVDdyU1lQRnZ6NzFsZGlPQT09IiwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiaW5kaXZpZHVhbCIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZHVienp6IgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vZmFzdC1jaGVjayIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjE0LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3FzLy0vcXMtNi4xNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZV1dUamdBQlNLY3ZzL25XQmk5UHljWS9KaVBKcU9ENEpBNm85U2VqMkF0dlNHYXJYeEtDM09RU2s0cEFhcmJkUWxLQWg1RDRGQ1FrSk5rVytHQW4zdz09IiwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2lkZS1jaGFubmVsIjogIl4xLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcXVldWUtbWljcm90YXNrIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3F1ZXVlLW1pY3JvdGFzay8tL3F1ZXVlLW1pY3JvdGFzay0xLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnVhTlNhNmZsS1Q1SmFTWVF6Sm9rMDRKelRMMUNBNmFHaHY1cmZMVzNQZ3FBK00yQ2hwWlFuQUM4aDhpNFpGa0JTOFg1UnFrREJIQTdyNGhlajNLOUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJmdW5kaW5nIjogWwotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiZ2l0aHViIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJwYXRyZW9uIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vd3d3LnBhdHJlb24uY29tL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImNvbnN1bHRpbmciLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9mZXJvc3Mub3JnL3N1cHBvcnQiCi0gICAgICAgIH0KLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JhbmdlLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhyZ3N4K29ycW95Z25taEZiS2FIRTZjMjk2SitIVEFRWG94RUY2Z051cFJPbW1HSlJveXpmRzNjY0F2ZXFDQnJ3ci8yeXhRNUJWZC9HVGw1YWdPd1NnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Jhdy1ib2R5IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jhdy1ib2R5Ly0vcmF3LWJvZHktMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJta2hMOENBeUNSUFhDRTI4TU1IMHoyUE5XUUJOazJRMDlaZHhNOUlPT1h3eHdaYk4rcWJXYWF0UGtka1dJS0wyWlZESW1yTi9wSzVIVFJ6MlBjUzRnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJieXRlcyI6ICIzLjEuMiIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICIyLjAuMCIsCi0gICAgICAgICJpY29udi1saXRlIjogIjAuNi4zIiwKLSAgICAgICAgInVucGlwZSI6ICIxLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFjdC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE4LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhY3QtaXMvLS9yZWFjdC1pcy0xOC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS9MTE1WeWFzMGxqakF0b1lpUHFZaUw4VldYelVVZFRocm1VNStuMjBEWnYrYStDbFJvZXZVenc1SnhVK0llaDUvYzg3eXRvVEJWOUcxRmlLZk5KZG1nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tNC43LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9JR0dtY3BUTHdQZ2E4Qm42L1o3NVNWYUgxejVkVXV0MmliU3lBTVZobVVnZ1dwbURuMmRhcEIwbjdmOG53YVNpUnRlcEFzZkp5ZlhJTzVEQ1ZBT0RnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhYm9ydC1jb250cm9sbGVyIjogIl4zLjAuMCIsCi0gICAgICAgICJidWZmZXIiOiAiXjYuMC4zIiwKLSAgICAgICAgImV2ZW50cyI6ICJeMy4zLjAiLAotICAgICAgICAicHJvY2VzcyI6ICJeMC4xMS4xMCIsCi0gICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICJeMS4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMi4yMi4wIHx8IF4xNC4xNy4wIHx8ID49MTYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWFkbGluZS10cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGxpbmUtdHJhbnNmb3JtLy0vcmVhZGxpbmUtdHJhbnNmb3JtLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03S0E2K045SUdhdDUyZDgzZHZ4bkFwQVdOK010VmIxTWlWdU1SL2NmMU80a1lzSkcrZy9BYXYwQUhjSEtzYjZTdGluYXlmUExuZTArZk1YMnNPekFLZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcXVpcmUtZGlyZWN0b3J5IjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcXVpcmUtZGlyZWN0b3J5Ly0vcmVxdWlyZS1kaXJlY3RvcnktMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZHeEVJNyt3c0c5eHJ2ZGpzcmxtTDIyT01UVGlIUndBTXJvaUVlTWdxOGd6b0xDL1BRcjdSc1JEU1RMVWcvYlpBWnRGK1RWSWtIYzYvNFJJS3J1aStRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXNvbHZlLWN3ZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWN3ZC8tL3Jlc29sdmUtY3dkLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PclphWDJNYitySkNwSC82Q3BTcXQ5eEZWcE4rK3gwMVhuTjJpZTlnNlA1LzN4ZWxMQWtYV1ZBRHBkejFJSEQvS0ZmRVh5RTZWMFUwMU9RM1VPMnJFZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZXNvbHZlLWZyb20iOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Jlc29sdmUtY3dkL25vZGVfbW9kdWxlcy9yZXNvbHZlLWZyb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS1mcm9tLy0vcmVzb2x2ZS1mcm9tLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xWWc5S1AyNGRENXFrYTlKNDdkMGFWa3kwTitiNGZUVTg5TE45aURuakI1d2Frc2lDNDlydk1CMFByVUpRR29UbUg1MFhQaXFPdkFqRGZhaWpHeFladz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Jlc29sdmUtZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWZyb20vLS9yZXNvbHZlLWZyb20tNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBiL01ZbVhzdEFreXNSRng4cGlOSTF0R0ZOUUlGQTN2a0UzR3E0RXVBMWRGNmdIcC8rdmdacXNDR0phcHZ5OE4zUSs0bzdGd3ZxdVBKY25aN1JZeTRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS1wa2ctbWFwcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLXBrZy1tYXBzLy0vcmVzb2x2ZS1wa2ctbWFwcy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2VTMlRqMjZUQlZPQzJOSWMyck9lMnkyWk83ZWZ4SVR0TFpjR1NPbkhITk9RN0NraVVCZncwSXcyY2s2eGtJaFB3TGhLTkxTOEJPK2hFcG5nUWxxenc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcHJpdmF0ZW51bWJlci9yZXNvbHZlLXBrZy1tYXBzP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzdG9yZS1jdXJzb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzdG9yZS1jdXJzb3IvLS9yZXN0b3JlLWN1cnNvci01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb01BMmRjcnc2dTBZZnhKUVhtMzQyYkZLWC9FNHNHOXJiVHpPOXB0VWNSL2U4QTMzY0h1dlN0aVlPd0g3ZnN6a1psWjF6L3RhOUFBb1BrMkY0cUlPSEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAib25ldGltZSI6ICJeNy4wLjAiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjQuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTE4IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Jlc3RvcmUtY3Vyc29yL25vZGVfbW9kdWxlcy9vbmV0aW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uZXRpbWUvLS9vbmV0aW1lLTcuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WWEpqYzg3RlNjRjg4dWFmUzNKbGxEZ3ZBbStjL1NsZnowNmxvcmoydUFZMzRybFV1ME50K3Y4d3JlaUltY3JnQWpqSUhwMXJYcFREbExPR3cyOVd3UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW1pYy1mdW5jdGlvbiI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmV1c2lmeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXVzaWZ5Ly0vcmV1c2lmeS0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzZRVWZmMDRvWnBIczBlRzVwODNyRkxoSGVWMDB1Zy9ZZjluWk02ZkxlVXJQZ3VCVGtUUU9kcEFXV3NwTWg1NVRaZlZRRFBhTjNOUUpmYlZSQXhkSXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgImlvanMiOiAiPj0xLjAuMCIsCi0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZmRjIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JmZGMvLS9yZmRjLTEuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xMWIzTjVRa1JVV1VsN2l5eWxhYWoza09wSVQwTjJpOU1xSUVRWFA3M0dWc045Y3czZmR4OFg2M2NFbVdoSkdpMlBQQ0YyM0lqcDdrdG1kMzlyYXdJQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yb3V0ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcm91dGVyLy0vcm91dGVyLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uTFRyVUttMlV5aUw3cmxoYXB1L1psNDVGd05na1pHYUNwWmJJSGFqRFlnd2xKQ096TFNrK2NJUEFuc0VxVjk1NUdqSUxKbktiZFFDMW5WUHorZ0FZUT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiAiXjQuNC4wIiwKLSAgICAgICAgImRlcGQiOiAiXjIuMC4wIiwKLSAgICAgICAgImlzLXByb21pc2UiOiAiXjQuMC4wIiwKLSAgICAgICAgInBhcnNldXJsIjogIl4xLjMuMyIsCi0gICAgICAgICJwYXRoLXRvLXJlZ2V4cCI6ICJeOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ydW4tcGFyYWxsZWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnVuLXBhcmFsbGVsLy0vcnVuLXBhcmFsbGVsLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01bDRWeVpSODZMWi9sRHhaVFI2anFMOEFGRTJTMElGTE1QMjZBYmpzTFZBRHhIZGhCL2MwR1VzSCt5MzlVZkNpM2R6ejhPbFF1UG1uYUpPTW9ESFFCQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImZ1bmRpbmciOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2Zlcm9zcyIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogInBhdHJlb24iLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly93d3cucGF0cmVvbi5jb20vZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAiY29uc3VsdGluZyIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2Zlcm9zcy5vcmcvc3VwcG9ydCIKLSAgICAgICAgfQotICAgICAgXSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicXVldWUtbWljcm90YXNrIjogIl4xLjIuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FmZS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcnAzU28wN0tjZG1tS2JHdmdhTnhRU0pyN2JHVlNWazVTOUVxMUYrcHBiUm83MCtZZWFEeGt3NURkOE5QTitHRDZiam5ZbTJWdVB1Q1htcHVZdm1DWFE9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogImdpdGh1YiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvZmVyb3NzIgotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgInR5cGUiOiAicGF0cmVvbiIsCi0gICAgICAgICAgInVybCI6ICJodHRwczovL3d3dy5wYXRyZW9uLmNvbS9mZXJvc3MiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJjb25zdWx0aW5nIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmVyb3NzLm9yZy9zdXBwb3J0IgotICAgICAgICB9Ci0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYWZlLXN0YWJsZS1zdHJpbmdpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1zdGFibGUtc3RyaW5naWZ5Ly0vc2FmZS1zdGFibGUtc3RyaW5naWZ5LTIuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iM3JwcFRLbTlUK1BzVkNCRU9VUjQ2R1dJN2ZkT3MwMFZLWjErOWMxRVdEYURNdmpRYzZ0VXd1RnlJcHJnR2dUY1dvVkhTS3JVOEgzMVpIQTJlMFJIQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FmZXItYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmVyLWJ1ZmZlci8tL3NhZmVyLWJ1ZmZlci0yLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVpvM0s4MlNEN1JpeWkwRTFFUVBvakx6N2twZXBuU1FJOUl5UGJISGcxWFhYZXZiNWRKSTd0cHlOMkFEeEdjUWJIRzd2Y3lSSGswY2J3cWNRcmlVdGc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlbXZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJGMEZ3K3JPNUFNZjlNQXlhUlhJNEFWMFVsajVsTUhxVnh4ZFNnaVZiaXhTQ1hvRW1tWC9qazBDdUp3NCszU3Fyb1lPOVZvVWgrSGN1Sml2dnRKZW1BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZW5kIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbmQvLS9zZW5kLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11YVcwV3dYS3BMOWJsWEUybzBiUmhvTDJFR1hJclp4UTJaUTRtZ2Nmb0J4ZEZtUW9sZCtxV3NEMmpMcmZaMHRyaktMNnZPdzBqLy9lQXdjQUxGaktTdz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiAiXjQuMy41IiwKLSAgICAgICAgImVuY29kZXVybCI6ICJeMi4wLjAiLAotICAgICAgICAiZXNjYXBlLWh0bWwiOiAiXjEuMC4zIiwKLSAgICAgICAgImV0YWciOiAiXjEuOC4xIiwKLSAgICAgICAgImZyZXNoIjogIl4yLjAuMCIsCi0gICAgICAgICJodHRwLWVycm9ycyI6ICJeMi4wLjAiLAotICAgICAgICAibWltZS10eXBlcyI6ICJeMy4wLjEiLAotICAgICAgICAibXMiOiAiXjIuMS4zIiwKLSAgICAgICAgIm9uLWZpbmlzaGVkIjogIl4yLjQuMSIsCi0gICAgICAgICJyYW5nZS1wYXJzZXIiOiAiXjEuMi4xIiwKLSAgICAgICAgInN0YXR1c2VzIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NlcnZlLXN0YXRpYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXJ2ZS1zdGF0aWMvLS9zZXJ2ZS1zdGF0aWMtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTYxZzlwQ2gwVm5oN0l1dFpqdExHR3BUQTM1NStPUG4yVHlEdi82aXZQMmgvQWRBVlg5YXpzb3htZzIvTTZuWmVRWk5ZQkV3SWNzbmUxbUpkOW9RSXRRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbmNvZGV1cmwiOiAiXjIuMC4wIiwKLSAgICAgICAgImVzY2FwZS1odG1sIjogIl4xLjAuMyIsCi0gICAgICAgICJwYXJzZXVybCI6ICJeMS4zLjMiLAotICAgICAgICAic2VuZCI6ICJeMS4yLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDE4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXRwcm90b3R5cGVvZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FNUxEWDdXcnA4NUtpbDViaFp2NDZqOGpPZWJvS3E1Sk1tWU0zZ1ZHZEdIOHhGcFBXWFVNc05ybE9EQ3Jrb3hNRWVOaS9YWkl3dVJ2WTRYTndZTUpwdz09IiwKLSAgICAgICJsaWNlbnNlIjogIklTQyIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2hlYmFuZy1jb21tYW5kIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctY29tbWFuZC8tL3NoZWJhbmctY29tbWFuZC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0h4cjJ6WnBZdGRtck4xcURqcnJYL1oxclIxa0c4RHgrZ2twSzFHNGVYbXZYc3dtY0UxaFRXQldZVXpscmFZdzEveVpwNll1RFk3N1l0dmJOMGRtREE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNoZWJhbmctcmVnZXgiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NoZWJhbmctcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlYmFuZy1yZWdleC8tL3NoZWJhbmctcmVnZXgtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTcrK2RGaHRjeDMzNTN1QmFxOEREUjROdXhCZXRCekM3WlFPaG1UUUluSEVkNmJTclhkaUV5ekN2RzA3WjQ0VVlkTFNoV1V5WHQ1TS95aHo4ZWtjYjFBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaWRlLWNoYW5uZWwvLS9zaWRlLWNoYW5uZWwtMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpYOTllNnRSd2VvVVhxUitWQnJzbGhkYTUxTmg1TVRRd291NXRuVURnYnR5TTBkQmdtaEVEdFdHUC94YktuNmhxZlBSSHVqVU53ejVmeS93YmJobnB3PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKLSAgICAgICAgIm9iamVjdC1pbnNwZWN0IjogIl4xLjEzLjMiLAotICAgICAgICAic2lkZS1jaGFubmVsLWxpc3QiOiAiXjEuMC4wIiwKLSAgICAgICAgInNpZGUtY2hhbm5lbC1tYXAiOiAiXjEuMC4xIiwKLSAgICAgICAgInNpZGUtY2hhbm5lbC13ZWFrbWFwIjogIl4xLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC1saXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC1saXN0Ly0vc2lkZS1jaGFubmVsLWxpc3QtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZDTEh0UkQvZ25wQ2lDSEVpSkxPd2RtRlArd3pDbURFa2M5eTdOc1l4ZUY0dTdCdHNuMVp1d2d3Skd4SW1JbUhpY0pBckxQNFIweVg0YzJLQ3JNclRBPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlcy1lcnJvcnMiOiAiXjEuMy4wIiwKLSAgICAgICAgIm9iamVjdC1pbnNwZWN0IjogIl4xLjEzLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zaWRlLWNoYW5uZWwtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC1tYXAvLS9zaWRlLWNoYW5uZWwtbWFwLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WQ2pDTmZnTXNieTN0VGRvMDJuYmp0TS9ld3JhNmpQSG1wVGhlbmtUWWg4cEc5dWNaLzFQOFNvNHU0RkdCZWsvQmpwT1ZzRENNb0xBL2l1QktJRlhSQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FsbC1ib3VuZCI6ICJeMS4wLjIiLAotICAgICAgICAiZXMtZXJyb3JzIjogIl4xLjMuMCIsCi0gICAgICAgICJnZXQtaW50cmluc2ljIjogIl4xLjIuNSIsCi0gICAgICAgICJvYmplY3QtaW5zcGVjdCI6ICJeMS4xMy4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2xqaGFyYiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2lkZS1jaGFubmVsLXdlYWttYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lkZS1jaGFubmVsLXdlYWttYXAvLS9zaWRlLWNoYW5uZWwtd2Vha21hcC0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1BTL0h2SFFUWW5IaXNMbzlNY3FCSE9KazJGa0hPL3RscHZsZHlybmVtNGFlUXA0aGFpM2d5dGhzd2c2cDAxb1NvVGw1OHJjcGlGQWpGMmJyMkFrMkE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbGwtYm91bmQiOiAiXjEuMC4yIiwKLSAgICAgICAgImVzLWVycm9ycyI6ICJeMS4zLjAiLAotICAgICAgICAiZ2V0LWludHJpbnNpYyI6ICJeMS4yLjUiLAotICAgICAgICAib2JqZWN0LWluc3BlY3QiOiAiXjEuMTMuMyIsCi0gICAgICAgICJzaWRlLWNoYW5uZWwtbWFwIjogIl4xLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC40IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9samhhcmIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NpZ25hbC1leGl0IjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZ25hbC1leGl0Ly0vc2lnbmFsLWV4aXQtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJ6eVoxZTg4dzlPMWlOSmJLbk9sdllUcldQRGw0Nk8xYkcwRDNYSW52Kzl0a1ByeHJOOGpVVVRpRmxEa2ttS1dnbjFNNkNmSUExM1N1R3FPYTlLb3J3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2ltcGxlLXN3aXp6bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2ltcGxlLXN3aXp6bGUvLS9zaW1wbGUtc3dpenpsZS0wLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSkEvL2tRZ1p0YnVZODNtK3hUK3RYSmttSm5jR01URlQrQytnMmgyUjl1eGtZSXJFMnl5OXNnbWNMaENudzU3L1dTRCtFaDNKOTdGUEVERm5iWG5EVWc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWFycmF5aXNoIjogIl4wLjMuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2ltcGxlLXN3aXp6bGUvbm9kZV9tb2R1bGVzL2lzLWFycmF5aXNoIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFycmF5aXNoLy0vaXMtYXJyYXlpc2gtMC4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVWUnFDdlZsWmJ1dzNHck02M292TlNOQWVBMUsxNmthUi9MUlkvOTJ3MHp4UTUvMVl6d2JsVVg2NTJpNFhzOVJ3QUdqVzlkOXk2WDg4dDhPYUFKZldRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbGFzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbGFzaC8tL3NsYXNoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nOVExaGFlYnkzNk9TU3R3YjRudENHR0dhS3NhVlNqUTY4ZkJ4b1FjdXRsNWZTMXZ1WTE4SDN3U3QzakZ5RnRya3grS3owVjFHODVBNE15QWRETWkyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NsaWNlLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2xpY2UtYW5zaS8tL3NsaWNlLWFuc2ktNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZDK2xnaXpWUGZpZTBra2hxVVNjd1J1MU8vbEY2Tk9nSm1sQ2dLKy9MWXhEQ1RrOHNHZWxZYUhEaEZjRE4rU24zQ3YrM1ZTYTRCeWVvK0lNQ3pwTWdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl42LjAuMCIsCi0gICAgICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3NsaWNlLWFuc2k/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbGljZS1hbnNpL25vZGVfbW9kdWxlcy9hbnNpLXN0eWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTYuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iTjc5OGdGZlFYK3ZpdzNSN3lyR1dScW5yTjJvUmtFa1Vqamw0Sk5uNEU4R3h4Ymp0RzNGYnJFSUlZM2w4L2hyd1V3SWVDWnZpNFF1T1RQNE1FclZ1Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC8tL3NvdXJjZS1tYXAtMC42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVqZ2FwdW1XbGJNaGtCZ3pUN1lrYzVZWFVUNDZGMGlLdThTR1hxMGJjd1A1ZHovaDBQbGo2ZW5KcWp6MVpicTJsNVdhcVluclZid1dPV015RjNGNDdnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJCU0QtMy1DbGF1c2UiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zb3VyY2UtbWFwLXN1cHBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuMTMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjUuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNIU0tGSGFkalZBNW9SNFBQcWh0QVZkY0JXd1JZVmQ2ZzZjQVhuSWJSaUl3YzJFaFByVHVLVUJkU0x2bEVLeUlQM0dDZjg5Zmx0dmNaaVA5TU1GQTF3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJ1ZmZlci1mcm9tIjogIl4xLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3BsaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BsaXQvLS9zcGxpdC0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbVR5T29QYnJpdnRYbnduSXhaUkZZUnJQTnRFRktscEIyZnZqU25DUVVpQUE2cUFaenF3bmE1ZW52SzR1azZPSWVQMTdDc2RGM3JTQkdZVkJzVTBUa2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidGhyb3VnaCI6ICIyIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EOWNQZ2t2TGxWM3QzSXpMMEQwWUx2R0E5QWhrNFBjdlZ3VWJOMGRTR3IxYVAwTnJ0NEFFblRVYnVHdnF1RUMwbUE2NEdxdDFmemlybFJzNWliWHg4Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTMtQ2xhdXNlIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFjay10cmFjZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC4xMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RhY2stdHJhY2UvLS9zdGFjay10cmFjZS0wLjAuMTAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtHemFoYzdwdVVLa3p5TXQrSXFBZXArVFZOYktQK2syTG13aHViMzltMUFzVFNrYUR1dHg1NmFEQ28rSExEemYvRDI2QklIVEpXTmlURzFLQUppUUNnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFjay11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGFjay11dGlscy8tL3N0YWNrLXV0aWxzLTIuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbGtXdmZJbTZSbXNXdE5KeCt1cXRLTFM4ZXFGYnhVZzBaekxYcVkwY2FFeTlsN2hydVg4SXBpRG5qc0xhdm9CZ3FDQ1I3MVRxV084TWFYWWhlSjNSUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0YWNrLXV0aWxzL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VcHpjTENYb2xVV2NOdTVIdFZNSFlkWEpqQXJqc0Y5QzBhTm5xdVpZWTR1Vy9WdTBtaXk1WW9XdmJWMzQ1SGF1VnZjQVVucFJ1aE1NY3FUY0dPWTIrdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0YXR1c2VzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUR2RXk1NVYzREI3dWtuUm8rNGlPR1Q1ZlAxc2xSOHdRb2hWZGtuaWdaUE1wTXN0YUtKUVdod2lZQkFDSkUzVWwycFRuQVRpaGhCWW5SaFpRSEdCaVJ3PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmVhbS1jb21iaW5lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJlYW0tY29tYmluZXIvLS9zdHJlYW0tY29tYmluZXItMC4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZ5SE1xZ0xZRHpRRGNBa0wrdGpKREM1blNOdU5JeDB2WnRSWmVpUGg3U2FlZjdWSFg5SDVJam45bDJWSW9sMnphTllsWUVYNkt5dVQvMjM3QTU4cUVRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImR1cGxleGVyIjogIn4wLjEuMSIsCi0gICAgICAgICJ0aHJvdWdoIjogIn4yLjMuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nX2RlY29kZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nX2RlY29kZXIvLS9zdHJpbmdfZGVjb2Rlci0xLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGtSWDhVMVdqSkZkOExzREoyeVEvd1dXeGFvcEVzQUJVMVhma004QStqMCs4NUpBR3BwdDE2Y3IxV2hnNktJYmI0b2tVNk1xbDZCT2ordXVwL3dLZUE9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNhZmUtYnVmZmVyIjogIn41LjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLWFyZ3YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLWFyZ3YvLS9zdHJpbmctYXJndi0wLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXFEMlEwMTQ0WisvUnFHNTJOZUhFa1phdVRBVVdKTzhjNnlUZnRHSktPM1RqYTV0VWdJZm1JbDZrRXh2aHR4U0RQN2ZYQjZEdnprZk1wQ2QvRjNHK1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjYuMTkiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy1sZW5ndGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLWxlbmd0aC8tL3N0cmluZy1sZW5ndGgtNC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStsNnJOTjVmWUhOaFpaeTQxUlhzWXB0Q2pBMklnbXE0RUc3a1pBWUZRSTFFMVZUWGFycjZaUFhCZzZlcTdZNmVLNEZFaFk2QUpseXVGSWIvdi9TMFZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYXItcmVnZXgiOiAiXjEuMC4yIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpbmctbGVuZ3RoL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy1sZW5ndGgvbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkzOFZQU0hjcWtGckNwRm5ROXZ1U1htcXV1djVvWE9LcEdlVDZhR3JyM28zR2M5QWxWYTZKQmZVU09DbmJ4R0daRisvMG9vSTdLclB1VVN6dFVkVTVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctd2lkdGgvLS9zdHJpbmctd2lkdGgtNS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhuTE9DUjN2amNZOGJlb05MdGNqWjUvbnhuMmFmbU1FNmxockRyZWJva3FNYXArWGJlVzhuOVRYcFBET3FkR0s1cWNJM29UMEdLVFc2d0M3RU1pVnFBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVhc3Rhc2lhbndpZHRoIjogIl4wLjIuMCIsCi0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOS4yLjIiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoLWNqcyI6IHsKLSAgICAgICJuYW1lIjogInN0cmluZy13aWR0aCIsCi0gICAgICAidmVyc2lvbiI6ICI0LjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdpZHRoLTQuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13S3lRUlFwakowc0lwNjJFclNaZEdzak1KV3NhcDVvUk5paEhodTZHN0pWTy85aklCNlV5ZXZMK3RYdU9xcm5nOGovY3hLVFd5V1V3dlNUcmlpWnovZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC1janMvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoLWNqcy9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC04LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVNqWXpjV05PQTBld0FIcHowTXhwWUZ2d2c2eWp5MU5HM3h0ZW9xejY0NFZDby9SUGducjEvR0d0K2ljM2lKVHpROEV1M1RkTTE0U2F3blZVbUdFNkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoLWNqcy9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItenltbTUrdStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25TdUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgtY2pzL25vZGVfbW9kdWxlcy9zdHJpcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZMzhWUFNIY3FrRnJDcEZuUTl2dVNYbXF1dXY1b1hPS3BHZVQ2YUdycjNvM0djOUFsVmE2SkJmVVNPQ25ieEdHWkYrLzBvb0k3S3JQdVVTenRVZFU1QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWFuc2kvLS9zdHJpcC1hbnNpLTcuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pcTZlVlZJNjRuUVFUUllxMkt0RWcyZDJ1VTdMRWxoVEp3c0g0WXpJSFpzaHhsZ1ptcy93SWM0Vm9EUVRsRy9JdlZJckJLRzA2Q3JabnAwcXY3aGtjUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXJlZ2V4IjogIl42LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3RyaXAtYW5zaT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2ktY2pzIjogewotICAgICAgIm5hbWUiOiAic3RyaXAtYW5zaSIsCi0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkzOFZQU0hjcWtGckNwRm5ROXZ1U1htcXV1djVvWE9LcEdlVDZhR3JyM28zR2M5QWxWYTZKQmZVU09DbmJ4R0daRisvMG9vSTdLclB1VVN6dFVkVTVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2ktY2pzL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1ib20vLS9zdHJpcC1ib20tNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN4dXJGdjV0RWdpaTMzWmk4SnRwNTV3RUlJTFI5ZWgzNEZBVzAwUFpmK0puU3NUbVYvaW9ld1NnUWw5N0pIdmdqb1JHd1BTaHNXbStJZHJ4QjM1ZDB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaXAtZmluYWwtbmV3bGluZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1maW5hbC1uZXdsaW5lLy0vc3RyaXAtZmluYWwtbmV3bGluZS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnJwdmZOQUUzZGN2cTdsbDN4VnVtempLalpRNXRJMXNFVUlLcjNVb2tzMFhVbDQ1U3QzRmxhdFZxZWY5cHJrNGpSRHpoVzZXWmcrM2JrOTN5NnBMakE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1qc29uLWNvbW1lbnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWpzb24tY29tbWVudHMvLS9zdHJpcC1qc29uLWNvbW1lbnRzLTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZlBjK1I0aWh3cVA2Ti9hSXYyZjFnTUg4bE9WdFdRSG9xQzR5SzZvU0RWVm9jdW1Bc2ZDcWprWG5xaVlNaG1Nd1MvbUVITHA3VmVobHQzcWw2bEVpZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci03LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXBDQXZSbDlzdHVPSHZlS3NuN0huY0pSdnY1MDFxSWFjS3pRbE8vK0x3eGM5KzBxMndMeXY0RGZ2dDgwL0RQbjJwcU9Cc0pkRGlvZ1hHUjkrT3Z3Unc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N5bmNraXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zeW5ja2l0Ly0vc3luY2tpdC0wLjExLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NZVFUQTFyMGxpdExVZjBScC9paXNDYUw4NzYxbEtBWkhhaW1sYkdLNGowSHlzQzRQTGZxeWdRajlzcmNzMG0yUmR0RFluRjhVdVl5S3BiakhZcDdKdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAcGtnci9jb3JlIjogIl4wLjIuOSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE4LjAgfHwgPj0xNi4wLjAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vc3luY2tpdCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGVzdC1leGNsdWRlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rlc3QtZXhjbHVkZS8tL3Rlc3QtZXhjbHVkZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0FHV1BJeU9IVTZ6bG1nODhqd203VlJ5WG5NTjdpVjY4T0dBYllEay9NaC94Qy9welZQbFF0WTZuZ29JSC81L3RjaXVoR2Z2RVNVOEdySHJjeEQ1Nnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCi0gICAgICAgICJnbG9iIjogIl43LjEuNCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Rlc3QtZXhjbHVkZS9ub2RlX21vZHVsZXMvZ2xvYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nbG9iLy0vZ2xvYi03LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbkZSMHpMcFUyWUNhUnh3b0NKdkw2VXZDSDJKRnlGVkl2d1RMc0lmMjFBdUhsTXNrQTFoaFRkaytMbFlKdE9sWXQ5djZkdnN6RDJCR1JxQkwraVFLOVE9PSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJHbG9iIHZlcnNpb25zIHByaW9yIHRvIHY5IGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmcy5yZWFscGF0aCI6ICJeMS4wLjAiLAotICAgICAgICAiaW5mbGlnaHQiOiAiXjEuMC40IiwKLSAgICAgICAgImluaGVyaXRzIjogIjIiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjEuMSIsCi0gICAgICAgICJvbmNlIjogIl4xLjMuMCIsCi0gICAgICAgICJwYXRoLWlzLWFic29sdXRlIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiKiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvaXNhYWNzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90ZXh0LWhleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXh0LWhleC8tL3RleHQtaGV4LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11dVZHTld6Z0o0eWhSYU5TaXViUFk3T2pJU3c0c3c0RTVVdjB3YmpwK096Y2JtVlUvcnNUOHVqZ2NYSmhuOXlwenNncjV2bHpwUHFQK01CQktjR3ZiZz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGhyb3VnaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aHJvdWdoLy0vdGhyb3VnaC0yLjMuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzg5cWc3UEk4d0Fkdlg2MGJNRFArYkZvRDVEdmhtOW9MaGVGcDVPNGEyUUYwY1NCR3NCWDRxWm1hZFBNdlZxbExKQkJjaStXcUdHT0FQdmNEZU5TVmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGhyb3VnaDIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGhyb3VnaDIvLS90aHJvdWdoMi00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaU9xU2F2MDBjVnhFRUlDZUQ3VGpMQjFzdWVFTCs4MVdwenAyYlkxN3VaalpOMHBXWlB1bzRzdVovNjFWdWp4bXFTR0ZmZ09jTnVUWjg1UUp3TlpRcHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Rocm91Z2gyL25vZGVfbW9kdWxlcy9yZWFkYWJsZS1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZGFibGUtc3RyZWFtLy0vcmVhZGFibGUtc3RyZWFtLTMuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05dS9zbmlDclkzRDVXZHNFUkh6SEU0RzJZQ1hxb0c1RlRIVWlDQzRTSWJyNlhjTFpCWTA1eWE5RUtqWWVrOU81eE9Bd2pHcSsxSmRHQkFTN1E5U2NvQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpbmhlcml0cyI6ICJeMi4wLjMiLAotICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiXjEuMS4xIiwKLSAgICAgICAgInV0aWwtZGVwcmVjYXRlIjogIl4xLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdG1wbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90bXBsLy0vdG1wbC0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2YwdU9FQVF3SXFHdVdXMk1WellnOGZWL1FObmMvSXB1Sk5HODM3ckx1Y3pBYUxWSHNsV0haUWo0SUdpRWw1SHMza2tiaHdMOUFiN0hyc211aitTbXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkJTRC0zLUNsYXVzZSIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdG8tcmVnZXgtcmFuZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tcmVnZXgtcmFuZ2UvLS90by1yZWdleC1yYW5nZS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNjVQN2l6Nlg1eUVyMWN3Y2d2UXhiYkl3N1VrM2dPeTVkSWR0WjRyRHZlTHFocmRKUCtMaS9IeDZ0eUswTkViKzJHQ3luZUNNSmlHcXJBRENTTms4c1E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLW51bWJlciI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90b2lkZW50aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9pZGVudGlmaWVyLy0vdG9pZGVudGlmaWVyLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vNXNTUEtFa2cvRElRTm1INDNWMC91ZXJMcnB6VmVka1VoOHRHTnZhZVhwZnB1d2pLZW5sU294LzJPL0JUbFpVdEVlK0pHN3M1WWhFejYwOFBsQUhSQT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RyaXBsZS1iZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RyaXBsZS1iZWFtLy0vdHJpcGxlLWJlYW0tMS40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFaYmdWaVpyZzFRTmNHK0xVTGE3bmhacEpUWlNMbS9tWG5IWG5iQWJqbU41YVNhMHk3Vit3dnY2KzRXYUJ0cElTSnpUaEt5K1BJUHhjMU5xMUVKOW1nPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzLWFwaS11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cy1hcGktdXRpbHMvLS90cy1hcGktdXRpbHMtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNVZ1RaTDFpcnc4dTI5YnpyT0Qvbkg4NWpxeWM3NEQ2U3NoRmd1ak9JQTdvc20yUno3ZFlINzdhZ2t4N0g0RkJOeERxN0NqZitJamFYLzh6d0ZXK1pRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTguMTIiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49NC44LjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzLWplc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyOS40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzLWplc3QvLS90cy1qZXN0LTI5LjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU2FlVXRqZnBnOVVxdThJYmVES3RkYVMwZzhsUzZGVDZPek0zZXpyRGZFclBKUEhORG8vRXkrVkZHUDFiUUlEZmFnWURMeVJwZDdPMTVYcEcxRXMyVXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnMtbG9nZ2VyIjogIl4wLjIuNiIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4xLjAiLAotICAgICAgICAiaGFuZGxlYmFycyI6ICJeNC43LjgiLAotICAgICAgICAianNvbjUiOiAiXjIuMi4zIiwKLSAgICAgICAgImxvZGFzaC5tZW1vaXplIjogIl40LjEuMiIsCi0gICAgICAgICJtYWtlLWVycm9yIjogIl4xLjMuNiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuNy4yIiwKLSAgICAgICAgInR5cGUtZmVzdCI6ICJeNC40MS4wIiwKLSAgICAgICAgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ0cy1qZXN0IjogImNsaS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE1LjAgfHwgXjE2LjEwLjAgfHwgXjE4LjAuMCB8fCA+PTIwLjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIj49Ny4wLjAtYmV0YS4wIDw4IiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjkuMC4wIHx8IF4zMC4wLjAiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI5LjAuMCB8fCBeMzAuMC4wIiwKLSAgICAgICAgImJhYmVsLWplc3QiOiAiXjI5LjAuMCB8fCBeMzAuMC4wIiwKLSAgICAgICAgImplc3QiOiAiXjI5LjAuMCB8fCBeMzAuMC4wIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjkuMC4wIHx8IF4zMC4wLjAiLAotICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuMyA8NiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiQGplc3QvdHlwZXMiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiYmFiZWwtamVzdCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJlc2J1aWxkIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtdXRpbCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHMtamVzdC9ub2RlX21vZHVsZXMvdHlwZS1mZXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC40MS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtNC40MS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UZVRTUTZINVlIdnBxVndCUmNuTERDQm5ET0hXWXU3SXZHYkhUNk44QU95bWNyOVBKR2pjMUdUdGlXWlRZZzBOQ2dZd3ZuWVdFa1ZDaFFBcjliamZ3QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiKE1JVCBPUiBDQzAtMS4wKSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuOC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpYi8tL3RzbGliLTIuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vSkZ1OTRIUWIrS1ZkdVNVUUw3d25wbXFuZm1Mc09BL25BaDZiNkVIMHdDRW9LMC9tUGVYVTZjM3dLRFY4M01rT3VIUFJIdFNYS0tVOTlJQmF6Uy8ydz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiMEJTRCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHN4IjogewotICAgICAgInZlcnNpb24iOiAiNC4yMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c3gvLS90c3gtNC4yMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rd0tqTU5VOXcvRWFRYXlIWGI3V0E3WmFIWTZoTjhXZ2Z2SE5RM3QxUG5VOTEvN084VGNUbkloQ0RZVFp3bnQ4SnNPOUlCcVozMExuMXI3cFBGNTJBdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2J1aWxkIjogIn4wLjI1LjAiLAotICAgICAgICAiZ2V0LXRzY29uZmlnIjogIl40LjcuNSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAidHN4IjogImRpc3QvY2xpLm1qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xOC4wLjAiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnNldmVudHMiOiAifjIuMy4zIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90eXBlLWNoZWNrIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtY2hlY2svLS90eXBlLWNoZWNrLTAuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbGVVb2M5dXdHWHFqV3dYYVVUWkFtek1jRlo1ODU4UUEydnZ4MVVyNXhJY2l4WElQKzhMbkZEZ1JwbFUzMHVzNnRlcWRsc2tGZnUrYWU0Szc5T29ldz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwcmVsdWRlLWxzIjogIl4xLjIuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGUtZGV0ZWN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZGV0ZWN0Ly0vdHlwZS1kZXRlY3QtNC4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBmci9tSUgxZGxPK3g3VGxjTXkrYklEcUtQc3cvNzB0VnllSFc3ODdnb1FqaG1xYVplMTB1d0x1anViSzlxOUxnNkZpaG8xS1VLRFl6MFo3azdnNS9nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZS1mZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMC4yMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtMC4yMS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10MHJ6QnE4N20zZlZjZHVIRFVGaEtteXlYKzllbzZXUWpadmY1MUVhL00wUTcrVDM3NEpwMWFVaXlVbDBHS3hwOE0vT0VUVkhTRHZta3lQZ3ZYK1gydz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiKE1JVCBPUiBDQzAtMS4wKSIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90eXBlLWlzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtaXMvLS90eXBlLWlzLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PWnM2Z3NqRjR2TXAzMnFyQ2JpVlNrckZtWHRHL0FaaFkzdDBpQU1yTUJpQVp5VjlvQUx0WE84aHNySGJNWEY5eDZMM2dybEZ1d1cyb0F6N2NhditHdz09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29udGVudC10eXBlIjogIl4xLjAuNSIsCi0gICAgICAgICJtZWRpYS10eXBlciI6ICJeMS4xLjAiLAotICAgICAgICAibWltZS10eXBlcyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZXNjcmlwdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuOS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlc2NyaXB0Ly0vdHlwZXNjcmlwdC01LjkuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ1dCelhRcmMvcU9raGlkdzFPekJUUXVZUmJmeXhEWEpNVkoxWE53VUhHUk9WbXVhZWlFbTNPc2xwWjFSVjk2ZDdTS0tqWktyU0p1Myt0L3hsdzNSOUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInRzYyI6ICJiaW4vdHNjIiwKLSAgICAgICAgInRzc2VydmVyIjogImJpbi90c3NlcnZlciIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xNC4xNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZXNjcmlwdC1lc2xpbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjQwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVzY3JpcHQtZXNsaW50Ly0vdHlwZXNjcmlwdC1lc2xpbnQtOC40MC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YdmQybCtabUZEUEV0NG9qMVFFWHpBNEEydVVLNm9wdkt1M2VHTjlhR2pCOGF1MDJsSVZjTHlpMzc1dzk0aEh5ZWpUT216SVU3N0w4b2wyc1JnOW43UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvZXNsaW50LXBsdWdpbiI6ICI4LjQwLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlciI6ICI4LjQwLjAiLAotICAgICAgICAiQHR5cGVzY3JpcHQtZXNsaW50L3R5cGVzY3JpcHQtZXN0cmVlIjogIjguNDAuMCIsCi0gICAgICAgICJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMiOiAiOC40MC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTguMTguMCB8fCBeMjAuOS4wIHx8ID49MjEuMS4wIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vdHlwZXNjcmlwdC1lc2xpbnQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2xpbnQiOiAiXjguNTcuMCB8fCBeOS4wLjAiLAotICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTQuOC40IDw2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdWdsaWZ5LWpzIjogewotICAgICAgInZlcnNpb24iOiAiMy4xOS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91Z2xpZnktanMvLS91Z2xpZnktanMtMy4xOS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12M1h1K3l1d0JYaXNwNlFZVGNINFViSCt4WUpYcW5xMm0vTHRRVldLV3pZYzFpZWhZbkxpeG9RRE45Rkg2L2o5L295YmZkNlc5R2h3a2w4K1VNS1RLUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiQlNELTItQ2xhdXNlIiwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAidWdsaWZ5anMiOiAiYmluL3VnbGlmeWpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bmRpY2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE1LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuZGljaS8tL3VuZGljaS03LjE1LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdvWkpDUHZ2TXZUZDBPbHFXc0l4VHVJdFRwSkJwVTF0Y2JWbDI0Rk1uM3h0MytWU3Vud1Vhc21mUEpSRTU3b05PMUtzWjRQZ0ExeFRkQVg0aHE4TnlRPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTIwLjE4LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VuZGljaS10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5kaWNpLXR5cGVzLy0vdW5kaWNpLXR5cGVzLTcuMTAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDVGeS9uZm4rMTRMdU9jMktOWWc3NXZacUNscEFpcXNjVnZNeWdObmxzSEJGcFNYZEphWXRYTWNkTkxwbC9RdmMzUDJjQjNzNmxPVjUxbnFzRnE0YWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5waXBlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VucGlwZS8tL3VucGlwZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGp5MmJZaFNzdWZ3V2xLd1BjK2wzY043K3d1SmxLNnV6MFlkSkVPbFFEYmw2am8vWWxQaTRtYjhhZ1VrVkM4QkY3VjhOdXpleVBOcVJrc0EzaHp0S1E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5ycy1yZXNvbHZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5ycy1yZXNvbHZlci8tL3VucnMtcmVzb2x2ZXItMS4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iU2p0OXBqYUVCbk5pR2djOXJVaUhHS3Y1bDQvVEd6RG1ZdzNSaG5rSkd0TGhibm5BLzVxSmo3eDNkTkRDUngvUEp4dTc3NExsSDhsQ09sQjRoRWZLZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImhhc0luc3RhbGxTY3JpcHQiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJuYXBpLXBvc3RpbnN0YWxsIjogIl4wLjMuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS91bnJzLXJlc29sdmVyIgotICAgICAgfSwKLSAgICAgICJvcHRpb25hbERlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctYW5kcm9pZC1hcm0tZWFiaSI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1hbmRyb2lkLWFybTY0IjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWRhcndpbi1hcm02NCI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1kYXJ3aW4teDY0IjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWZyZWVic2QteDY0IjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybS1nbnVlYWJpaGYiOiAiMS4xMS4xIiwKLSAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtLW11c2xlYWJpaGYiOiAiMS4xMS4xIiwKLSAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtYXJtNjQtZ251IjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LWFybTY0LW11c2wiOiAiMS4xMS4xIiwKLSAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgtcHBjNjQtZ251IjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtZ251IjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLWxpbnV4LXJpc2N2NjQtbXVzbCI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC1zMzkweC1nbnUiOiAiMS4xMS4xIiwKLSAgICAgICAgIkB1bnJzL3Jlc29sdmVyLWJpbmRpbmctbGludXgteDY0LWdudSI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy1saW51eC14NjQtbXVzbCI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy13YXNtMzItd2FzaSI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi1hcm02NC1tc3ZjIjogIjEuMTEuMSIsCi0gICAgICAgICJAdW5ycy9yZXNvbHZlci1iaW5kaW5nLXdpbjMyLWlhMzItbXN2YyI6ICIxLjExLjEiLAotICAgICAgICAiQHVucnMvcmVzb2x2ZXItYmluZGluZy13aW4zMi14NjQtbXN2YyI6ICIxLjExLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXBkYXRlLWJyb3dzZXJzbGlzdC1kYi8tL3VwZGF0ZS1icm93c2Vyc2xpc3QtZGItMS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVV4aElaUStRSW5WZHVua0RBYWlhenZ2VC8rZlhMNU9zcjBKWmxKdWxlcFl1NkpkN3FKdERaamx1cjBlbVJsVDcxRU4zU2NQb0U3Z3ZzdUlLS05hdkt3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2Jyb3dzZXJzbGlzdCIKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICJ0eXBlIjogInRpZGVsaWZ0IiwKLSAgICAgICAgICAidXJsIjogImh0dHBzOi8vdGlkZWxpZnQuY29tL2Z1bmRpbmcvZ2l0aHViL25wbS9icm93c2Vyc2xpc3QiCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAidHlwZSI6ICJnaXRodWIiLAotICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2FpIgotICAgICAgICB9Ci0gICAgICBdLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlc2NhbGFkZSI6ICJeMy4yLjAiLAotICAgICAgICAicGljb2NvbG9ycyI6ICJeMS4xLjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInVwZGF0ZS1icm93c2Vyc2xpc3QtZGIiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIj49IDQuMjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdXJpLWpzIjogewotICAgICAgInZlcnNpb24iOiAiNC40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VyaS1qcy8tL3VyaS1qcy00LjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN3JLVXl5MzNRMXljOThwUTFEQW1MdHdYMTA5RjdUSWZXbFcxWWRvOFdsMWlpMVNlSGllZWgwSEhmUGVMMmZNWEs2ejBzOGVjS3M5ZnJDdUxKdm5kQmc9PSIsCi0gICAgICAibGljZW5zZSI6ICJCU0QtMi1DbGF1c2UiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInB1bnljb2RlIjogIl4yLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdXRpbC1kZXByZWNhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXRpbC1kZXByZWNhdGUvLS91dGlsLWRlcHJlY2F0ZS0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRVBENXExdVh5RnhKcENyTG5DYzFuSG5xM2dPYTZEWkJvY0FJaUkyVGFTQ0E3VkNKMVVKRE1hZ0N6SWtYTnNVWWZEMWRhSy8vTFRFUTh4aUlickh0Y3c9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3V1aWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3V1aWQvLS91dWlkLTExLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMC9BOXJEeTlQN2NKKzh3MWM5V0Q5Vi8vOVdqMTVDZTJNUHo4Umk2MDMydXN6K05mZVB4eDVBY04zYk4rcjZaTDZqRW8wNjYveU5ZQjN0bjRwUUV4K0E9PSIsCi0gICAgICAiZnVuZGluZyI6IFsKLSAgICAgICAgImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9icm9vZmEiLAotICAgICAgICAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2N0YXZhbiIKLSAgICAgIF0sCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgInBlZXIiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInV1aWQiOiAiZGlzdC9lc20vYmluL3V1aWQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Y4LXRvLWlzdGFuYnVsIjogewotICAgICAgInZlcnNpb24iOiAiOS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Y4LXRvLWlzdGFuYnVsLy0vdjgtdG8taXN0YW5idWwtOS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtpR1VhbFdOK3JnQkovMU9IWnNCdFU0clhaT2ZqLzdyS1F4VUxLbEl6d3pRU3ZNSlVVTmdQd0pFRWg3Z1U2eEVWeEMwYWhvT0J2TjJZSThHSDZGTmdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmciOiAiXjAuMy4xMiIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMSIsCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEyLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ZhcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdmFyeS8tL3ZhcnktMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJOR2JXTGZkMGVVUGFiaGtYVVZtMGo4dXV2UkV5VGg1b3ZSYS9keW93L0JxQWJaSnlDKzVmVStJelFPem1BS3pZcVlSQUlTb1JoZFFyM2VJWi9QWHFnPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dhbGtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC44IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93YWxrZXIvLS93YWxrZXItMS4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRzLzhFOGw1YjdrWTB2bFdMZXdPa0RYTW1QZExjVlY0R21PUUx5eHVTc3dJSnN3ZWVGWnRBc01GN2sxTnN6eitUWUJRcmxZUm16T25yMzk4eTFKZW1RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtYWtlZXJyb3IiOiAiMS4wLjEyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGljaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGljaC8tL3doaWNoLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTEkzVGwxVFczUHZsNzBsM3lxM1k2NGkrYXdwd1hxc0dCWVdra3FNdG5iWGdyTUQreWo3cmhXMGt1RUR4ekphWVhHakVXNW9nYXBLTk1FS05NamliQT09IiwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXNleGUiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJub2RlLXdoaWNoIjogImJpbi9ub2RlLXdoaWNoIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA4IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aW5zdG9uIjogewotICAgICAgInZlcnNpb24iOiAiMy4xNy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aW5zdG9uLy0vd2luc3Rvbi0zLjE3LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURMaUZJWFlDNWZNUHhhUmc4MzJTNkY1bUpZdmVQdG1PNUc5djlJZ1VGUGhYbTkvR2tYYXJIL1RVckJBVnpoVEN6QWo5YW5FLytHanJnWHAvNTRuT2d3PT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAY29sb3JzL2NvbG9ycyI6ICJeMS42LjAiLAotICAgICAgICAiQGRhYmgvZGlhZ25vc3RpY3MiOiAiXjIuMC4yIiwKLSAgICAgICAgImFzeW5jIjogIl4zLjIuMyIsCi0gICAgICAgICJpcy1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgImxvZ2Zvcm0iOiAiXjIuNy4wIiwKLSAgICAgICAgIm9uZS10aW1lIjogIl4xLjAuMCIsCi0gICAgICAgICJyZWFkYWJsZS1zdHJlYW0iOiAiXjMuNC4wIiwKLSAgICAgICAgInNhZmUtc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4zLjEiLAotICAgICAgICAic3RhY2stdHJhY2UiOiAiMC4wLngiLAotICAgICAgICAidHJpcGxlLWJlYW0iOiAiXjEuMy4wIiwKLSAgICAgICAgIndpbnN0b24tdHJhbnNwb3J0IjogIl40LjkuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aW5zdG9uLXRyYW5zcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aW5zdG9uLXRyYW5zcG9ydC8tL3dpbnN0b24tdHJhbnNwb3J0LTQuOS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04ZHJNSjRya2dhUG8xTWU0ekQvM1dMZkkvelBkQTlvMklpcEtPRHVubkdEY3VxYkh3anNiQjc5eWx2MDRMQ0dHelUweFE2dlR6bk9NcFFHYUxoaG02QT09IiwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9nZm9ybSI6ICJeMi43LjAiLAotICAgICAgICAicmVhZGFibGUtc3RyZWFtIjogIl4zLjYuMiIsCi0gICAgICAgICJ0cmlwbGUtYmVhbSI6ICJeMS4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEyLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2luc3Rvbi10cmFuc3BvcnQvbm9kZV9tb2R1bGVzL3JlYWRhYmxlLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMy42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTl1L3NuaUNyWTNENVdkc0VSSHpIRTRHMllDWHFvRzVGVEhVaUNDNFNJYnI2WGNMWkJZMDV5YTlFS2pZZWs5TzV4T0F3akdxKzFKZEdCQVM3UTlTY29BPT0iLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpbmhlcml0cyI6ICJeMi4wLjMiLAotICAgICAgICAic3RyaW5nX2RlY29kZXIiOiAiXjEuMS4xIiwKLSAgICAgICAgInV0aWwtZGVwcmVjYXRlIjogIl4xLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2luc3Rvbi9ub2RlX21vZHVsZXMvcmVhZGFibGUtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMy42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWRhYmxlLXN0cmVhbS8tL3JlYWRhYmxlLXN0cmVhbS0zLjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOXUvc25pQ3JZM0Q1V2RzRVJIekhFNEcyWUNYcW9HNUZUSFVpQ0M0U0licjZYY0xaQlkwNXlhOUVLalllazlPNXhPQXdqR3ErMUpkR0JBUzdROVNjb0E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImluaGVyaXRzIjogIl4yLjAuMyIsCi0gICAgICAgICJzdHJpbmdfZGVjb2RlciI6ICJeMS4xLjEiLAotICAgICAgICAidXRpbC1kZXByZWNhdGUiOiAiXjEuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93b3JkLXdyYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29yZC13cmFwLy0vd29yZC13cmFwLTEuMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTjIyQjVlYU1NSTlVTXRqckdkNWc1ZUNZUHBDUERVeTBGSlhiWXNhVDV6WXhqRk9ja1M1M1NRREUzcFdrVm9XcEhYVmIzQnJZY0VONFR3YTU1QjVjQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29yZHdyYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29yZHdyYXAvLS93b3Jkd3JhcC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3ZWekpGbFB5Y0tjNWRaTjR5UGtQOHc3RGMzN0J0UDF5Y3pFbmVPYjR1cTM0cFhaY3ZydFJUbVdWOFcrVW1lK1hDeEtnYmpNK25ldmt5RlBNeWJkNFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiOC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS04LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2k3UVdJNnpVTXE1NmJFU0Z2YWd0bXpNZEdPdG94ZlIrU2V6MTFNb2JmYzd0bStWa1Vja2s5YlcyVWVmZlRHVlViT2tzeG1TdzBBQTJnczhnNzFOQ1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjYuMS4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNS4wLjEiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS1janMiOiB7Ci0gICAgICAibmFtZSI6ICJ3cmFwLWFuc2kiLAotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS03LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVZHSWoya2FtTFNUeHc2TnNaam9CeGZTd3NuMHljZGVzbWM0cCtRMjFjNXpQdVoxcGwrTmZ4VmR4UHRkSHZtTlZPUTZYU1lHNEFVdHl0L0ZpN0QxNlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMC4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4xLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3dyYXAtYW5zaT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS1janMvbm9kZV9tb2R1bGVzL2Fuc2ktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1yZWdleC8tL2Fuc2ktcmVnZXgtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXF1SlFYbFRTVUdMMkxIOVNVWG84VndzWTRzb2FuaGdvNkxOU204NEUxTEJjRThzM08wd3BkaVJ6eVI5ei9aWkpNbE1XdjM3cU9PYjlwZEpsTVVFS0ZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpLWNqcy9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC04LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVNqWXpjV05PQTBld0FIcHowTXhwWUZ2d2c2eWp5MU5HM3h0ZW9xejY0NFZDby9SUGducjEvR0d0K2ljM2lKVHpROEV1M1RkTTE0U2F3blZVbUdFNkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpLWNqcy9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItenltbTUrdStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25TdUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cmFwLWFuc2ktY2pzL25vZGVfbW9kdWxlcy9zdHJpbmctd2lkdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaW5nLXdpZHRoLy0vc3RyaW5nLXdpZHRoLTQuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13S3lRUlFwakowc0lwNjJFclNaZEdzak1KV3NhcDVvUk5paEhodTZHN0pWTy85aklCNlV5ZXZMK3RYdU9xcm5nOGovY3hLVFd5V1V3dlNUcmlpWnovZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS1janMvbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVkzOFZQU0hjcWtGckNwRm5ROXZ1U1htcXV1djVvWE9LcEdlVDZhR3JyM28zR2M5QWxWYTZKQmZVU09DbmJ4R0daRisvMG9vSTdLclB1VVN6dFVkVTVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dyYXAtYW5zaS9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy02LjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYk43OThnRmZRWCt2aXczUjd5ckdXUnFuck4yb1JrRWtVampsNEpObjRFOEd4eGJqdEczRmJyRUlJWTNsOC9ocndVd0llQ1p2aTRRdU9UUDRNRXJWdWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cmFwcHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcHB5Ly0vd3JhcHB5LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sNFNwL0RSc2Vvcjl3TDZFdlYyK1R1UW42M2RNa1BqWi9zcDlYa2doVEViVjlLbFBTMXhVc1ozdTcvSVFPNHd4dGNGQjRiZ3BRUFJjUjNRQ3ZlelBjUT09IiwKLSAgICAgICJsaWNlbnNlIjogIklTQyIKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JpdGUtZmlsZS1hdG9taWMvLS93cml0ZS1maWxlLWF0b21pYy01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK1FVMnpkNk9URDhYV0lKQ2JmZmFpUWVIOVU3M3FJcWFmbzF4NlYxc25DV1lHSmY2Y1ZFMGNEUjREOHhSemNFbmZJMjFJRnJVUHpQR3RjUGY4QUMrUnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIklTQyIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaW11cm11cmhhc2giOiAiXjAuMS40IiwKLSAgICAgICAgInNpZ25hbC1leGl0IjogIl40LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjE0LjE3LjAgfHwgXjE2LjEzLjAgfHwgPj0xOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dzIjogewotICAgICAgInZlcnNpb24iOiAiOC4xOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cy8tL3dzLTguMTguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUEVJR0NZNXRTbFV0NTBjcXlNWGZDelgrb09QcU4wdnVHcVd6YmNKMnh2bmt6a3E0Nm9PcHo3ZFFhVERCZGZJQ2I0TjE0K0dBUlVEdzJYVjJONHR2emc9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAuMC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnVmZmVydXRpbCI6ICJeNC4wLjEiLAotICAgICAgICAidXRmLTgtdmFsaWRhdGUiOiAiPj01LjAuMiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJidWZmZXJ1dGlsIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInV0Zi04LXZhbGlkYXRlIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95MThuIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3kxOG4vLS95MThuLTUuMC44LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0wcGZGemVnZURXSkhKSUFtVExSUDJEd0hqZEY1czdqbzl0dXp0ZFF4QWhJTkNkdlMrM25HSU5xUGQwMEFwaHFKUi8wTGhBTlVTNi8rN1NDYjk4WU9mQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YWxsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbGxpc3QvLS95YWxsaXN0LTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hNFVHUWFXUEg1OW1PWFVZbkFHMmV3bmNRUzRpNEY0M1R2M0pvQU0rczJWREFtUzlOc0s4R3BETUxyQ0hQa3NGVDdoM0s2VE9vVU5uMnBiN1JvWHg0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YW1sIjogewotICAgICAgInZlcnNpb24iOiAiMi44LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhbWwvLS95YW1sLTIuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sY1ljTXhYMlBPOVhNR3ZBSmtKM09zTk13Ky83RktlczcvaGdlckdVWVdJb1d1NWovK1lRcWNacjVKblBaV3pPc0VCZ01iU2JpU1RuL2R2LzY5TWtwdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiSVNDIiwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ5YW1sIjogImJpbi5tanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDE0LjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuNy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy8tL3lhcmdzLTE3LjcuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItN2RTenpSUSsrQ0tuTkkva3JLbllSVjdKS0tQVVhNRWg2MXNvYUhLZzltcldFaHpGV2hGbnhQeEdsKzY5Y0QxT3U2M0MxM05VUENubUljcnZxQ3VNNnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2xpdWkiOiAiXjguMC4xIiwKLSAgICAgICAgImVzY2FsYWRlIjogIl4zLjEuMSIsCi0gICAgICAgICJnZXQtY2FsbGVyLWZpbGUiOiAiXjIuMC41IiwKLSAgICAgICAgInJlcXVpcmUtZGlyZWN0b3J5IjogIl4yLjEuMSIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4zIiwKLSAgICAgICAgInkxOG4iOiAiXjUuMC41IiwKLSAgICAgICAgInlhcmdzLXBhcnNlciI6ICJeMjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRWcHNKVzdEZGplY0FpRnBiSUIxZTNxeElRc0U2Tm9QYzUvZVRkcmJiSUM0aDBMVnNXaG5vYTNnK20ySGNsQkl1akh6c3haNFZKVkErR1V1YzIvTEJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJJU0MiLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3lhcmdzL25vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIiwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3lhcmdzL25vZGVfbW9kdWxlcy9lbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTguMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NU2pZemNXTk9BMGV3QUhwejBNeHBZRnZ3ZzZ5ankxTkczeHRlb3F6NjQ0VkNvL1JQZ25yMS9HR3QraWMzaUpUelE4RXUzVGRNMTRTYXduVlVtR0U2QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImxpY2Vuc2UiOiAiTUlUIgotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncy9ub2RlX21vZHVsZXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQvLS9pcy1mdWxsd2lkdGgtY29kZS1wb2ludC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItenltbTUrdStzQ3NTV3lEOXFOYWVqVjNERnZoQ0tjbEtkaXpZYUpVdUhBODNSTGpiN25TdUduZGRDSEd2MGhrK0tZN0JNQWxzV2VLNFVlZzZFVjZYUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncy9ub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd0t5UVJRcGpKMHNJcDYyRXJTWmRHc2pNSldzYXA1b1JOaWhIaHU2RzdKVk8vOWpJQjZVeWV2TCt0WHVPcXJuZzhqL2N4S1RXeVdVd3ZTVHJpaVp6L2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZW1vamktcmVnZXgiOiAiXjguMC4wIiwKLSAgICAgICAgImlzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncy9ub2RlX21vZHVsZXMvc3RyaXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWTM4VlBTSGNxa0ZyQ3BGblE5dnVTWG1xdXV2NW9YT0twR2VUNmFHcnIzbzNHYzlBbFZhNkpCZlVTT0NuYnhHR1pGKy8wb29JN0tyUHVVU3p0VWRVNUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveW9jdG8tcXVldWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveW9jdG8tcXVldWUvLS95b2N0by1xdWV1ZS0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItclZrc3Zzbk5DZEovb2hHYzZ4Z1B3eU44ZWhlQ3hzaUxNOG14dUUvdC9tT1ZxSmV3UHVPMW1pTHBUSFFpUmdUS0NMZXhMNE1lQUZWYWd0czdIbU5aMlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJsaWNlbnNlIjogIk1JVCIsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy96b2QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjI1Ljc2IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy96b2QvLS96b2QtMy4yNS43Ni50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ3pVdC9xdDgxblhzRkdLSUZjQzNZbmZFQXg1Tmt1bkNmbkRsdnVCU1NGUzAyYmNYdTRMbWVhMEFGSVV3YkxXeFdQeDNkOXA4UzVRb2F1aktjTlF4Y1E9PSIsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2NvbGluaGFja3MiCi0gICAgICB9Ci0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3BhY2thZ2UuanNvbiBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvcGFja2FnZS5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzM2Y2QxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvcGFja2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotewotICAibmFtZSI6ICJncmVtbGluLW1jcCIsCi0gICJ2ZXJzaW9uIjogIjMuOC4yLWFscGhhLjEiLAotICAiZGVzY3JpcHRpb24iOiAiVGhlIG9mZmljaWFsIEFwYWNoZSBUaW5rZXJQb3AgTUNQIHNlcnZlciBmb3IgR3JlbWxpbiB0aGF0IGFsbG93cyBmb3IgZmV0Y2hpbmcgc3RhdHVzLCBzY2hlbWEsIGFuZCBxdWVyeWluZyB1c2luZyBHcmVtbGluIGZvciBhbnkgVGlua2VyUG9wLWNvbXBhdGlibGUgZ3JhcGggZGF0YWJhc2UgKFR5cGVTY3JpcHQgaW1wbGVtZW50YXRpb24pLiIsCi0gICJ0eXBlIjogIm1vZHVsZSIsCi0gICJtYWluIjogImRpc3Qvc2VydmVyLmpzIiwKLSAgImJpbiI6IHsKLSAgICAiZ3JlbWxpbi1tY3AiOiAiZGlzdC9zZXJ2ZXIuanMiCi0gIH0sCi0gICJzY3JpcHRzIjogewotICAgICJidWlsZCI6ICJ0c2MgJiYgY2htb2QgK3ggZGlzdC9zZXJ2ZXIuanMiLAotICAgICJkZXYiOiAidHN4IHNyYy9zZXJ2ZXIudHMiLAotICAgICJzdGFydCI6ICJub2RlIGRpc3Qvc2VydmVyLmpzIiwKLSAgICAidGVzdCI6ICJqZXN0IiwKLSAgICAidGVzdDp3YXRjaCI6ICJqZXN0IC0td2F0Y2giLAotICAgICJ0ZXN0OmNvdmVyYWdlIjogImplc3QgLS1jb3ZlcmFnZSIsCi0gICAgInRlc3Q6aXQiOiAiR1JFTUxJTl9NQ1BfRU5EUE9JTlQ9bG9jYWxob3N0OjgxODIvZyBqZXN0IHRlc3RzL2ludGVncmF0aW9uIC0tdGVzdFBhdGhJZ25vcmVQYXR0ZXJucz1cIi9ub2RlX21vZHVsZXMvfC9kaXN0L1wiIC0tZm9yY2VFeGl0IC0tZGV0ZWN0T3BlbkhhbmRsZXMiLAotICAgICJsaW50IjogImVzbGludCBzcmMgdGVzdHMgLS1leHQgLnRzIiwKLSAgICAibGludDpmaXgiOiAiZXNsaW50IHNyYyB0ZXN0cyAtLWV4dCAudHMgLS1maXgiLAotICAgICJmb3JtYXQiOiAicHJldHRpZXIgLS13cml0ZSBcInNyYy8qKi8qLnRzXCIgXCJ0ZXN0cy8qKi8qLnRzXCIgXCIqLntqcyxqc29uLG1kfVwiIiwKLSAgICAiZm9ybWF0OmNoZWNrIjogInByZXR0aWVyIC0tY2hlY2sgXCJzcmMvKiovKi50c1wiIFwidGVzdHMvKiovKi50c1wiIFwiKi57anMsanNvbixtZH1cIiIsCi0gICAgInR5cGUtY2hlY2siOiAidHNjIC0tbm9FbWl0IiwKLSAgICAidmFsaWRhdGUiOiAibnBtIHJ1biBmb3JtYXQgJiYgbnBtIHJ1biBsaW50ICYmIG5wbSBydW4gdHlwZS1jaGVjayAmJiBucG0gdGVzdCIsCi0gICAgImNsZWFuIjogInJtIC1yZiBkaXN0IiwKLSAgICAicHJlcGFyZSI6ICJodXNreSIsCi0gICAgInByZXB1Ymxpc2hPbmx5IjogIm5wbSBydW4gY2xlYW4gJiYgbnBtIHJ1biBidWlsZCAmJiBucG0gcnVuIHZhbGlkYXRlIiwKLSAgICAicHJlcGFjayI6ICJucG0gcnVuIGJ1aWxkIiwKLSAgICAicG9zdGluc3RhbGwiOiAiY2htb2QgK3ggZGlzdC9zZXJ2ZXIuanMgfHwgdHJ1ZSIKLSAgfSwKLSAgImtleXdvcmRzIjogWwotICAgICJtY3AiLAotICAgICJtb2RlbC1jb250ZXh0LXByb3RvY29sIiwKLSAgICAiYXBhY2hlLXRpbmtlcnBvcCIsCi0gICAgInRpbmtlcnBvcCIsCi0gICAgImdyZW1saW4iLAotICAgICJncmFwaCIsCi0gICAgImRhdGFiYXNlIiwKLSAgICAiZ3JhcGhkYiIKLSAgXSwKLSAgImF1dGhvciI6IHsKLSAgICAibmFtZSI6ICJBcGFjaGUgVGlua2VyUG9wIHRlYW0iCi0gIH0sCi0gICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAiZGVwZW5kZW5jaWVzIjogewotICAgICJncmVtbGludCI6ICJ+My44LjAiLAotICAgICJAZWZmZWN0L3BsYXRmb3JtIjogIl4wLjkwLjYiLAotICAgICJAZWZmZWN0L3BsYXRmb3JtLW5vZGUiOiAiXjAuOTYuMCIsCi0gICAgIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsiOiAiXjEuMTcuNCIsCi0gICAgIkB0eXBlcy9ncmVtbGluIjogIl4zLjYuNyIsCi0gICAgImVmZmVjdCI6ICJeMy4xNy45IiwKLSAgICAiZ3JlbWxpbiI6ICJeMy43LjQiLAotICAgICJ3aW5zdG9uIjogIl4zLjE3LjAiLAotICAgICJ6b2QiOiAiXjMuMjUuNzYiCi0gIH0sCi0gICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgIkBlc2xpbnQvanMiOiAiXjkuMzQuMCIsCi0gICAgIkB0eXBlcy9qZXN0IjogIl4zMC4wLjAiLAotICAgICJAdHlwZXMvbm9kZSI6ICJeMjQuMy4wIiwKLSAgICAiYXVkaXQtY2kiOiAiXjcuMS4wIiwKLSAgICAiZXNsaW50IjogIl45LjM0LjAiLAotICAgICJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjogIl4xMC4xLjgiLAotICAgICJodXNreSI6ICJeOS4xLjciLAotICAgICJqZXN0IjogIl4zMC4wLjUiLAotICAgICJsaW50LXN0YWdlZCI6ICJeMTYuMS41IiwKLSAgICAicHJldHRpZXIiOiAiXjMuNi4yIiwKLSAgICAidHMtamVzdCI6ICJeMjkuNC4xIiwKLSAgICAidHN4IjogIl40LjIwLjUiLAotICAgICJ0eXBlc2NyaXB0IjogIl41LjkuMiIsCi0gICAgInR5cGVzY3JpcHQtZXNsaW50IjogIl44LjQwLjAiCi0gIH0sCi0gICJlbmdpbmVzIjogewotICAgICJub2RlIjogIj49MjAiCi0gIH0sCi0gICJyZXBvc2l0b3J5IjogewotICAgICJ0eXBlIjogImdpdCIsCi0gICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC5naXQiCi0gIH0sCi0gICJidWdzIjogewotICAgICJ1cmwiOiAiaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AiCi0gIH0sCi0gICJob21lcGFnZSI6ICJodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnLyIsCi0gICJmaWxlcyI6IFsKLSAgICAiZGlzdC8iLAotICAgICJSRUFETUUubWQiLAotICAgICJMSUNFTlNFIiwKLSAgICAiTk9USUNFIgotICBdLAotICAibGludC1zdGFnZWQiOiB7Ci0gICAgIioue3RzLGpzfSI6IFsKLSAgICAgICJlc2xpbnQgLS1maXgiLAotICAgICAgInByZXR0aWVyIC0td3JpdGUiCi0gICAgXSwKLSAgICAiKi57anNvbixtZH0iOiBbCi0gICAgICAicHJldHRpZXIgLS13cml0ZSIKLSAgICBdCi0gIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2NvbmZpZy50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2NvbmZpZy50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZmMzAxNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9jb25maWcudHMKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEdyZW1saW4gTUNQIFNlcnZlcgotICoKLSAqIFR5cGUtc2FmZSBBcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIHdpdGggdHlwZS1zYWZlIGVudmlyb25tZW50IHZhcmlhYmxlIGxvYWRpbmcuCi0gKgotICogUHJvdmlkZXMgY29tcHJlaGVuc2l2ZSBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQgZm9yIHRoZSBHcmVtbGluIE1DUCBzZXJ2ZXIgdXNpbmcKLSAqIEVmZmVjdC5Db25maWcgZm9yIHZhbGlkYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nLiBBbGwgY29uZmlndXJhdGlvbnMgYXJlIGxvYWRlZCBmcm9tCi0gKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCBzZW5zaWJsZSBkZWZhdWx0cyBhbmQgZGV0YWlsZWQgdmFsaWRhdGlvbi4KLSAqCi0gKiBAZXhhbXBsZSBFbnZpcm9ubWVudCBWYXJpYWJsZXMKLSAqIGBgYGJhc2gKLSAqIEdSRU1MSU5fTUNQX0VORFBPSU5UPWxvY2FsaG9zdDo4MTgyCi0gKiBHUkVNTElOX01DUF9VU0VfU1NMPWZhbHNlCi0gKiBHUkVNTElOX01DUF9MT0dfTEVWRUw9aW5mbwotICogR1JFTUxJTl9NQ1BfRU5VTV9ESVNDT1ZFUllfRU5BQkxFRD10cnVlCi0gKiBgYGAKLSAqLwotCi1pbXBvcnQgeyBDb25maWcsIENvbmZpZ0Vycm9yLCBFZmZlY3QsIEVpdGhlciwgcGlwZSB9IGZyb20gJ2VmZmVjdCc7Ci1pbXBvcnQgeyBERUZBVUxUUywgU0VSVkVSX0lORk8gfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7Ci0KLS8qKgotICogUGFyc2VzIGFuZCB2YWxpZGF0ZXMgYSBHcmVtbGluIGVuZHBvaW50IHN0cmluZy4KLSAqIEZvcm1hdDogaG9zdDpwb3J0IG9yIGhvc3Q6cG9ydC90cmF2ZXJzYWxfc291cmNlCi0gKiBSZXR1cm5zIEVpdGhlci5yaWdodCh7aG9zdCwgcG9ydCwgdHJhdmVyc2FsU291cmNlfSkgb24gc3VjY2VzcywgRWl0aGVyLmxlZnQoQ29uZmlnRXJyb3IpIG9uIGZhaWx1cmUuCi0gKiBAcGFyYW0gZW5kcG9pbnQgLSBSYXcgZW5kcG9pbnQgc3RyaW5nCi0gKi8KLWNvbnN0IHBhcnNlRW5kcG9pbnQgPSAoCi0gIGVuZHBvaW50OiBzdHJpbmcKLSk6IEVpdGhlci5FaXRoZXI8Ci0gIHsgaG9zdDogc3RyaW5nOyBwb3J0OiBudW1iZXI7IHRyYXZlcnNhbFNvdXJjZTogc3RyaW5nIH0sCi0gIENvbmZpZ0Vycm9yLkNvbmZpZ0Vycm9yCi0+ID0+IHsKLSAgY29uc3QgdHJpbW1lZEVuZHBvaW50ID0gZW5kcG9pbnQudHJpbSgpOwotCi0gIGlmICghdHJpbW1lZEVuZHBvaW50KSB7Ci0gICAgcmV0dXJuIEVpdGhlci5sZWZ0KENvbmZpZ0Vycm9yLkludmFsaWREYXRhKFtdLCAnRW5kcG9pbnQgY2Fubm90IGJlIGVtcHR5JykpOwotICB9Ci0KLSAgY29uc3QgcGFydHMgPSB0cmltbWVkRW5kcG9pbnQuc3BsaXQoJy8nKTsKLSAgY29uc3QgaG9zdFBvcnQgPSBwYXJ0c1swXTsKLSAgY29uc3QgdHJhdmVyc2FsU291cmNlID0gcGFydHNbMV0gPz8gREVGQVVMVFMuVFJBVkVSU0FMX1NPVVJDRTsKLQotICBpZiAoIWhvc3RQb3J0KSB7Ci0gICAgcmV0dXJuIEVpdGhlci5sZWZ0KAotICAgICAgQ29uZmlnRXJyb3IuSW52YWxpZERhdGEoCi0gICAgICAgIFtdLAotICAgICAgICAnSW52YWxpZCBlbmRwb2ludCBmb3JtYXQuIEV4cGVjdGVkIGhvc3Q6cG9ydCBvciBob3N0OnBvcnQvdHJhdmVyc2FsX3NvdXJjZScKLSAgICAgICkKLSAgICApOwotICB9Ci0KLSAgY29uc3QgaG9zdFBvcnRQYXJ0cyA9IGhvc3RQb3J0LnNwbGl0KCc6Jyk7Ci0gIGlmIChob3N0UG9ydFBhcnRzLmxlbmd0aCAhPT0gMikgewotICAgIHJldHVybiBFaXRoZXIubGVmdCgKLSAgICAgIENvbmZpZ0Vycm9yLkludmFsaWREYXRhKFtdLCAnSW52YWxpZCBob3N0OnBvcnQgZm9ybWF0LiBFeHBlY3RlZCBleGFjdGx5IG9uZSBjb2xvbiBzZXBhcmF0b3InKQotICAgICk7Ci0gIH0KLQotICBjb25zdCBbaG9zdCwgcG9ydFN0cl0gPSBob3N0UG9ydFBhcnRzOwotCi0gIGlmICghaG9zdD8udHJpbSgpIHx8ICFwb3J0U3RyPy50cmltKCkpIHsKLSAgICByZXR1cm4gRWl0aGVyLmxlZnQoCi0gICAgICBDb25maWdFcnJvci5JbnZhbGlkRGF0YShbXSwgJ0hvc3QgYW5kIHBvcnQgYXJlIHJlcXVpcmVkIGFuZCBjYW5ub3QgYmUgZW1wdHknKQotICAgICk7Ci0gIH0KLQotICBjb25zdCBwb3J0ID0gcGFyc2VJbnQocG9ydFN0ci50cmltKCksIDEwKTsKLSAgaWYgKGlzTmFOKHBvcnQpIHx8IHBvcnQgPD0gMCB8fCBwb3J0ID4gNjU1MzUpIHsKLSAgICByZXR1cm4gRWl0aGVyLmxlZnQoCi0gICAgICBDb25maWdFcnJvci5JbnZhbGlkRGF0YShbXSwgJ1BvcnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgYmV0d2VlbiAxIGFuZCA2NTUzNScpCi0gICAgKTsKLSAgfQotCi0gIHJldHVybiBFaXRoZXIucmlnaHQoewotICAgIGhvc3Q6IGhvc3QudHJpbSgpLAotICAgIHBvcnQsCi0gICAgdHJhdmVyc2FsU291cmNlOiB0cmF2ZXJzYWxTb3VyY2UudHJpbSgpLAotICB9KTsKLX07Ci0KLS8qKgotICogUGFyc2VzIGEgY29tbWEtc2VwYXJhdGVkIHN0cmluZyBpbnRvIGEgc3RyaW5nIGFycmF5LCB0cmltbWluZyB3aGl0ZXNwYWNlIGFuZCByZW1vdmluZyBlbXB0eSBlbnRyaWVzLgotICogQHBhcmFtIHZhbHVlIC0gUmF3IGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcKLSAqIEByZXR1cm5zIHN0cmluZ1tdCi0gKi8KLWNvbnN0IHBhcnNlQ29tbWFTZXBhcmF0ZWRMaXN0ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSA9PgotICB2YWx1ZQotICAgIC5zcGxpdCgnLCcpCi0gICAgLm1hcChzID0+IHMudHJpbSgpKQotICAgIC5maWx0ZXIocyA9PiBzLmxlbmd0aCA+IDApOwotCi0vKioKLSAqIEdSRU1MSU5fTUNQX0VORFBPSU5UOiBzdHJpbmcsIHJlcXVpcmVkLiBHcmVtbGluIFNlcnZlciBjb21wYXRpYmxlIHdlYnNvY2tldCBlbmRwb2ludC4KLSAqLwotY29uc3QgR3JlbWxpbk1jcEVuZHBvaW50Q29uZmlnID0gcGlwZSgKLSAgQ29uZmlnLnN0cmluZygnR1JFTUxJTl9NQ1BfRU5EUE9JTlQnKSwKLSAgQ29uZmlnLm1hcE9yRmFpbChwYXJzZUVuZHBvaW50KQotKTsKLQotLyoqCi0gKiBHUkVNTElOX01DUF9VU0VfU1NMOiBib29sZWFuLCBvcHRpb25hbC4gRW5hYmxlcyBTU0wgYW5kIGRlZmF1bHRzIHRvIGZhbHNlLgotICovCi1jb25zdCBHcmVtbGluTWNwVXNlU3NsQ29uZmlnID0gQ29uZmlnLndpdGhEZWZhdWx0KAotICBDb25maWcuYm9vbGVhbignR1JFTUxJTl9NQ1BfVVNFX1NTTCcpLAotICBERUZBVUxUUy5VU0VfU1NMCi0pOwotCi0vKioKLSAqIEdSRU1MSU5fTUNQX1VTRVJOQU1FOiBzdHJpbmcsIG9wdGlvbmFsLiBHcmVtbGluIERCIHVzZXJuYW1lCi0gKi8KLWNvbnN0IEdyZW1saW5NY3BVc2VybmFtZUNvbmZpZyA9IENvbmZpZy5vcHRpb24oQ29uZmlnLnN0cmluZygnR1JFTUxJTl9NQ1BfVVNFUk5BTUUnKSk7Ci0KLS8qKgotICogR1JFTUxJTl9NQ1BfUEFTU1dPUkQ6IHN0cmluZywgb3B0aW9uYWwsIHJlZGFjdGVkLiBHcmVtbGluIERCIHBhc3N3b3JkCi0gKi8KLWNvbnN0IEdyZW1saW5NY3BQYXNzd29yZENvbmZpZyA9IENvbmZpZy5vcHRpb24oQ29uZmlnLnJlZGFjdGVkKCdHUkVNTElOX01DUF9QQVNTV09SRCcpKTsKLQotLyoqCi0gKiBHUkVNTElOX01DUF9MT0dfTEVWRUw6ICdlcnJvcicgfCAnd2FybicgfCAnaW5mbycgfCAnZGVidWcnLCBkZWZhdWx0OiBpbmZvLiBMb2dnaW5nIHZlcmJvc2l0eQotICovCi1jb25zdCBHcmVtbGluTWNwTG9nTGV2ZWxDb25maWcgPSBwaXBlKAotICBDb25maWcubGl0ZXJhbCgnZXJyb3InLCAnd2FybicsICdpbmZvJywgJ2RlYnVnJykoJ0dSRU1MSU5fTUNQX0xPR19MRVZFTCcpLAotICBDb25maWcud2l0aERlZmF1bHQoREVGQVVMVFMuTE9HX0xFVkVMKQotKTsKLQotLyoqCi0gKiBHUkVNTElOX01DUF9JRExFX1RJTUVPVVQ6IG51bWJlciwgZGVmYXVsdDogMzAwLiBDb25uZWN0aW9uIGlkbGUgdGltZW91dCAoc2Vjb25kcykKLSAqLwotY29uc3QgR3JlbWxpbk1jcElkbGVUaW1lb3V0Q29uZmlnID0gcGlwZSgKLSAgQ29uZmlnLmludGVnZXIoJ0dSRU1MSU5fTUNQX0lETEVfVElNRU9VVCcpLAotICBDb25maWcud2l0aERlZmF1bHQoMzAwKSwKLSAgQ29uZmlnLnZhbGlkYXRlKHsKLSAgICBtZXNzYWdlOiAnSWRsZSB0aW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJywKLSAgICB2YWxpZGF0aW9uOiBuID0+IG4gPiAwLAotICB9KQotKTsKLQotLyoqCi0gKiBHUkVNTElOX01DUF9FTlVNX0RJU0NPVkVSWV9FTkFCTEVEOiBib29sZWFuLCBkZWZhdWx0OiB0cnVlLiBFbmFibGUgZW51bSBwcm9wZXJ0eSBkaXNjb3ZlcnkKLSAqLwotY29uc3QgR3JlbWxpbk1jcEVudW1EaXNjb3ZlcnlFbmFibGVkQ29uZmlnID0gQ29uZmlnLndpdGhEZWZhdWx0KAotICBDb25maWcuYm9vbGVhbignR1JFTUxJTl9NQ1BfRU5VTV9ESVNDT1ZFUllfRU5BQkxFRCcpLAotICB0cnVlCi0pOwotCi0vKioKLSAqIEdSRU1MSU5fTUNQX0VOVU1fQ0FSRElOQUxJVFlfVEhSRVNIT0xEOiBudW1iZXIsIGRlZmF1bHQ6IDEwLiBNYXggY2FyZGluYWxpdHkgZm9yIGVudW0gZGV0ZWN0aW9uCi0gKi8KLWNvbnN0IEdyZW1saW5NY3BFbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGRDb25maWcgPSBwaXBlKAotICBDb25maWcuaW50ZWdlcignR1JFTUxJTl9NQ1BfRU5VTV9DQVJESU5BTElUWV9USFJFU0hPTEQnKSwKLSAgQ29uZmlnLndpdGhEZWZhdWx0KDEwKSwKLSAgQ29uZmlnLnZhbGlkYXRlKHsKLSAgICBtZXNzYWdlOiAnRW51bSBjYXJkaW5hbGl0eSB0aHJlc2hvbGQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInLAotICAgIHZhbGlkYXRpb246IG4gPT4gbiA+IDAsCi0gIH0pCi0pOwotCi0vKioKLSAqIEdSRU1MSU5fTUNQX0VOVU1fUFJPUEVSVFlfREVOWUxJU1Q6IHN0cmluZywgZGVmYXVsdDogaWQscGssbmFtZSxkZXNjcmlwdGlvbiwuLi4KLSAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHByb3BlcnRpZXMgdG8gZXhjbHVkZSBmcm9tIGVudW0gZGV0ZWN0aW9uCi0gKi8KLWNvbnN0IEdyZW1saW5NY3BFbnVtUHJvcGVydHlEZW55TGlzdENvbmZpZyA9IHBpcGUoCi0gIENvbmZpZy5zdHJpbmcoJ0dSRU1MSU5fTUNQX0VOVU1fUFJPUEVSVFlfREVOWUxJU1QnKSwKLSAgQ29uZmlnLndpdGhEZWZhdWx0KCdpZCxwayxuYW1lLGRlc2NyaXB0aW9uLHN0YXJ0RGF0ZSxlbmREYXRlLHRpbWVzdGFtcCxjcmVhdGVkQXQsdXBkYXRlZEF0JyksCi0gIENvbmZpZy5tYXAocGFyc2VDb21tYVNlcGFyYXRlZExpc3QpCi0pOwotCi0vKioKLSAqIEdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX1NBTVBMRV9WQUxVRVM6IGJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlLiBJbmNsdWRlIHNhbXBsZSB2YWx1ZXMgaW4gc2NoZW1hIG91dHB1dAotICovCi1jb25zdCBHcmVtbGluTWNwU2NoZW1hSW5jbHVkZVNhbXBsZVZhbHVlc0NvbmZpZyA9IENvbmZpZy53aXRoRGVmYXVsdCgKLSAgQ29uZmlnLmJvb2xlYW4oJ0dSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX1NBTVBMRV9WQUxVRVMnKSwKLSAgZmFsc2UKLSk7Ci0KLS8qKgotICogR1JFTUxJTl9NQ1BfU0NIRU1BX01BWF9FTlVNX1ZBTFVFUzogbnVtYmVyLCBkZWZhdWx0OiAxMC4gTWF4IGVudW0gdmFsdWVzIHBlciBwcm9wZXJ0eSAo4omkIDEwMCkKLSAqLwotY29uc3QgR3JlbWxpbk1jcFNjaGVtYU1heEVudW1WYWx1ZXNDb25maWcgPSBwaXBlKAotICBDb25maWcuaW50ZWdlcignR1JFTUxJTl9NQ1BfU0NIRU1BX01BWF9FTlVNX1ZBTFVFUycpLAotICBDb25maWcud2l0aERlZmF1bHQoMTApLAotICBDb25maWcudmFsaWRhdGUoewotICAgIG1lc3NhZ2U6ICdNYXggZW51bSB2YWx1ZXMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKOKJpCAxMDApJywKLSAgICB2YWxpZGF0aW9uOiBuID0+IG4gPiAwICYmIG4gPD0gMTAwLAotICB9KQotKTsKLQotLyoqCi0gKiBHUkVNTElOX01DUF9TQ0hFTUFfSU5DTFVERV9DT1VOVFM6IGJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlLiBJbmNsdWRlIHByb3BlcnR5IGNvdW50cyBpbiBzY2hlbWEgb3V0cHV0Ci0gKi8KLWNvbnN0IEdyZW1saW5NY3BTY2hlbWFJbmNsdWRlQ291bnRzQ29uZmlnID0gQ29uZmlnLndpdGhEZWZhdWx0KAotICBDb25maWcuYm9vbGVhbignR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfQ09VTlRTJyksCi0gIGZhbHNlCi0pOwotCi0vKioKLSAqIENvbm5lY3Rpb25Db25maWc6IEFnZ3JlZ2F0ZXMgYW5kIHZhbGlkYXRlcyBhbGwgR3JlbWxpbiBjb25uZWN0aW9uLXJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzLgotICogRW5zdXJlcyBob3N0LCBwb3J0LCB0cmF2ZXJzYWxTb3VyY2UsIHVzZVNTTCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBhbmQgaWRsZVRpbWVvdXQgYXJlIHByZXNlbnQgYW5kIHZhbGlkLgotICogUmV0dXJucyBhIHZhbGlkYXRlZCBjb25maWcgb2JqZWN0IG9yIHRocm93cyBDb25maWdFcnJvciBvbiBmYWlsdXJlLgotICovCi1jb25zdCBDb25uZWN0aW9uQ29uZmlnID0gcGlwZSgKLSAgQ29uZmlnLmFsbCh7Ci0gICAgZW5kcG9pbnQ6IEdyZW1saW5NY3BFbmRwb2ludENvbmZpZywKLSAgICB1c2VTU0w6IEdyZW1saW5NY3BVc2VTc2xDb25maWcsCi0gICAgdXNlcm5hbWU6IEdyZW1saW5NY3BVc2VybmFtZUNvbmZpZywKLSAgICBwYXNzd29yZDogR3JlbWxpbk1jcFBhc3N3b3JkQ29uZmlnLAotICAgIGlkbGVUaW1lb3V0OiBHcmVtbGluTWNwSWRsZVRpbWVvdXRDb25maWcsCi0gIH0pLAotICBDb25maWcubWFwKCh7IGVuZHBvaW50LCAuLi5yZXN0IH0pID0+ICh7Ci0gICAgaG9zdDogZW5kcG9pbnQuaG9zdCwKLSAgICBwb3J0OiBlbmRwb2ludC5wb3J0LAotICAgIHRyYXZlcnNhbFNvdXJjZTogZW5kcG9pbnQudHJhdmVyc2FsU291cmNlLAotICAgIC4uLnJlc3QsCi0gIH0pKQotKTsKLQotLyoqCi0gKiBTY2hlbWFEaXNjb3ZlcnlDb25maWc6IEFnZ3JlZ2F0ZXMgYW5kIHZhbGlkYXRlcyBhbGwgc2NoZW1hIGRpc2NvdmVyeS1yZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSAqIEVuc3VyZXMgZW51bSBkaXNjb3ZlcnksIGNhcmRpbmFsaXR5LCBkZW55bGlzdCwgc2FtcGxlIHZhbHVlcywgbWF4IGVudW0gdmFsdWVzLCBhbmQgY291bnRzIGFyZSBwcmVzZW50IGFuZCB2YWxpZC4KLSAqIFJldHVybnMgYSB2YWxpZGF0ZWQgY29uZmlnIG9iamVjdCBvciB0aHJvd3MgQ29uZmlnRXJyb3Igb24gZmFpbHVyZS4KLSAqLwotY29uc3QgU2NoZW1hRGlzY292ZXJ5Q29uZmlnID0gQ29uZmlnLmFsbCh7Ci0gIGVudW1EaXNjb3ZlcnlFbmFibGVkOiBHcmVtbGluTWNwRW51bURpc2NvdmVyeUVuYWJsZWRDb25maWcsCi0gIGVudW1DYXJkaW5hbGl0eVRocmVzaG9sZDogR3JlbWxpbk1jcEVudW1DYXJkaW5hbGl0eVRocmVzaG9sZENvbmZpZywKLSAgZW51bVByb3BlcnR5RGVueUxpc3Q6IEdyZW1saW5NY3BFbnVtUHJvcGVydHlEZW55TGlzdENvbmZpZywKLSAgaW5jbHVkZVNhbXBsZVZhbHVlczogR3JlbWxpbk1jcFNjaGVtYUluY2x1ZGVTYW1wbGVWYWx1ZXNDb25maWcsCi0gIG1heEVudW1WYWx1ZXM6IEdyZW1saW5NY3BTY2hlbWFNYXhFbnVtVmFsdWVzQ29uZmlnLAotICBpbmNsdWRlQ291bnRzOiBHcmVtbGluTWNwU2NoZW1hSW5jbHVkZUNvdW50c0NvbmZpZywKLX0pOwotCi0vKioKLSAqIFNlcnZlckNvbmZpZzogSW1tdXRhYmxlIHNlcnZlciBuYW1lIGFuZCB2ZXJzaW9uIGZyb20gY29uc3RhbnRzLnRzCi0gKi8KLWNvbnN0IFNlcnZlckNvbmZpZyA9IENvbmZpZy5zdWNjZWVkKHsKLSAgbmFtZTogU0VSVkVSX0lORk8uTkFNRSwKLSAgdmVyc2lvbjogU0VSVkVSX0lORk8uVkVSU0lPTiwKLX0gYXMgY29uc3QpOwotCi0vKioKLSAqIExvZ2dpbmdDb25maWc6IEFnZ3JlZ2F0ZXMgYW5kIHZhbGlkYXRlcyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCi0gKiBBbHdheXMgdXNlcyBzdHJ1Y3R1cmVkIGxvZ2dpbmcgb3V0cHV0LgotICovCi1jb25zdCBMb2dnaW5nQ29uZmlnID0gcGlwZSgKLSAgQ29uZmlnLmFsbCh7Ci0gICAgbGV2ZWw6IEdyZW1saW5NY3BMb2dMZXZlbENvbmZpZywKLSAgfSksCi0gIENvbmZpZy5tYXAoY29uZmlnID0+ICh7Ci0gICAgbGV2ZWw6IGNvbmZpZy5sZXZlbCwKLSAgICBzdHJ1Y3R1cmVkOiB0cnVlIGFzIGNvbnN0LCAvLyBBbHdheXMgdXNlIHN0cnVjdHVyZWQgbG9nZ2luZwotICB9KSkKLSk7Ci0KLS8qKgotICogQXBwQ29uZmlnOiBDb21wbGV0ZSB2YWxpZGF0ZWQgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBvYmplY3QuCi0gKiBBZ2dyZWdhdGVzIGdyZW1saW4sIHNjaGVtYSwgc2VydmVyLCBhbmQgbG9nZ2luZyBjb25maWdzLgotICogVGhyb3dzIENvbmZpZ0Vycm9yIG9uIGFueSB2YWxpZGF0aW9uIGZhaWx1cmUuCi0gKi8KLWV4cG9ydCBjb25zdCBBcHBDb25maWcgPSBDb25maWcuYWxsKHsKLSAgZ3JlbWxpbjogQ29ubmVjdGlvbkNvbmZpZywKLSAgc2NoZW1hOiBTY2hlbWFEaXNjb3ZlcnlDb25maWcsCi0gIHNlcnZlcjogU2VydmVyQ29uZmlnLAotICBsb2dnaW5nOiBMb2dnaW5nQ29uZmlnLAotfSk7Ci0KLS8qKgotICogVHlwZSBhbGlhcyBmb3IgdGhlIHJlc29sdmVkLCB2YWxpZGF0ZWQgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBvYmplY3QuCi0gKi8KLWV4cG9ydCB0eXBlIEFwcENvbmZpZ1R5cGUgPSBFZmZlY3QuRWZmZWN0LlN1Y2Nlc3M8dHlwZW9mIEFwcENvbmZpZz47CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9jb25zdGFudHMudHMgYi9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9jb25zdGFudHMudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNDE5ZGMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvY29uc3RhbnRzLnRzCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgQXBwbGljYXRpb24gY29uc3RhbnRzIGFuZCBkZWZhdWx0IHZhbHVlcy4KLSAqCi0gKiBDZW50cmFsaXplZCBsb2NhdGlvbiBmb3IgYWxsIGNvbnN0YW50IHZhbHVlcyB1c2VkIHRocm91Z2hvdXQgdGhlIGFwcGxpY2F0aW9uCi0gKiBpbmNsdWRpbmcgc2VydmVyIG1ldGFkYXRhLCBNQ1AgcHJvdG9jb2wgaWRlbnRpZmllcnMsIGFuZCBjb25maWd1cmF0aW9uIGRlZmF1bHRzLgotICovCi0KLWV4cG9ydCBjb25zdCBHUkVNTElOX1ZFUlNJT04gPSAnMy44LjItU05BUFNIT1QnOyAvLyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgotCi0vLyBTZXJ2ZXIgSW5mb3JtYXRpb24KLWV4cG9ydCBjb25zdCBTRVJWRVJfSU5GTyA9IHsKLSAgTkFNRTogJ2dyZW1saW4tbWNwJywKLSAgVkVSU0lPTjogR1JFTUxJTl9WRVJTSU9OLAotfSBhcyBjb25zdDsKLQotLy8gTUNQIFJlc291cmNlIFVSSXMKLWV4cG9ydCBjb25zdCBSRVNPVVJDRV9VUklTID0gewotICBTVEFUVVM6ICdncmVtbGluOi8vc3RhdHVzJywKLSAgU0NIRU1BOiAnZ3JlbWxpbjovL3NjaGVtYScsCi19IGFzIGNvbnN0OwotCi0vLyBNQ1AgVG9vbCBOYW1lcwotZXhwb3J0IGNvbnN0IFRPT0xfTkFNRVMgPSB7Ci0gIEdFVF9HUkFQSF9TVEFUVVM6ICdnZXRfZ3JhcGhfc3RhdHVzJywKLSAgR0VUX0dSQVBIX1NDSEVNQTogJ2dldF9ncmFwaF9zY2hlbWEnLAotICBSVU5fR1JFTUxJTl9RVUVSWTogJ3J1bl9ncmVtbGluX3F1ZXJ5JywKLSAgUkVGUkVTSF9TQ0hFTUFfQ0FDSEU6ICdyZWZyZXNoX3NjaGVtYV9jYWNoZScsCi0gIEZPUk1BVF9HUkVNTElOX1FVRVJZOiAnZm9ybWF0X2dyZW1saW5fcXVlcnknLAotfSBhcyBjb25zdDsKLQotLy8gRGVmYXVsdCBDb25maWd1cmF0aW9uIFZhbHVlcwotZXhwb3J0IGNvbnN0IERFRkFVTFRTID0gewotICBUUkFWRVJTQUxfU09VUkNFOiAnZycsCi0gIFVTRV9TU0w6IGZhbHNlLAotICBMT0dfTEVWRUw6ICdpbmZvJyBhcyBjb25zdCwKLX0gYXMgY29uc3Q7Ci0KLS8vIENvbm5lY3Rpb24gU3RhdHVzIE1lc3NhZ2VzIChvbmx5IHVzZWQgb25lcykKLWV4cG9ydCBjb25zdCBTVEFUVVNfTUVTU0FHRVMgPSB7Ci0gIEFWQUlMQUJMRTogJ0F2YWlsYWJsZScsCi19IGFzIGNvbnN0OwotCi0vLyBNSU1FIFR5cGVzCi1leHBvcnQgY29uc3QgTUlNRV9UWVBFUyA9IHsKLSAgVEVYVF9QTEFJTjogJ3RleHQvcGxhaW4nLAotICBBUFBMSUNBVElPTl9KU09OOiAnYXBwbGljYXRpb24vanNvbicsCi19IGFzIGNvbnN0OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9jbGllbnQudHMgYi9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL2NsaWVudC50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1OTVkYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL2NsaWVudC50cworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJ2VmZmVjdCc7Ci1pbXBvcnQgdHlwZSB7IENvbm5lY3Rpb25TdGF0ZSB9IGZyb20gJy4vdHlwZXMuanMnOwotCi0vKioKLSAqIFJlcHJlc2VudHMgdGhlIEdyZW1saW4gY2xpZW50IGFzIGEgc2VydmljZSBpbiB0aGUgRWZmZWN0IGNvbnRleHQuCi0gKgotICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYWN0aXZlIEdyZW1saW4gY29ubmVjdGlvbiBzdGF0ZSwKLSAqIGluY2x1ZGluZyB0aGUgY2xpZW50LCBjb25uZWN0aW9uLCBhbmQgdHJhdmVyc2FsIHNvdXJjZSAoYGdgKS4KLSAqCi0gKiBAZXhhbXBsZQotICogYGBgdHlwZXNjcmlwdAotICogaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKLSAqIGltcG9ydCB7IEdyZW1saW5DbGllbnQgfSBmcm9tICcuL2NsaWVudC5qcyc7Ci0gKgotICogY29uc3QgbXlFZmZlY3QgPSBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gKiAgIGNvbnN0IGdyZW1saW4gPSB5aWVsZCogR3JlbWxpbkNsaWVudDsKLSAqICAgY29uc3QgY291bnQgPSB5aWVsZCogRWZmZWN0LnRyeVByb21pc2UoKCkgPT4gZ3JlbWxpbi5nLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gKiAgIHJldHVybiBjb3VudC52YWx1ZTsKLSAqIH0pOwotICogYGBgCi0gKi8KLWV4cG9ydCBjbGFzcyBHcmVtbGluQ2xpZW50IGV4dGVuZHMgQ29udGV4dC5UYWcoJ0dyZW1saW5DbGllbnQnKTxHcmVtbGluQ2xpZW50LCBDb25uZWN0aW9uU3RhdGU+KCkge30KZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vY29ubmVjdGlvbi50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vY29ubmVjdGlvbi50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JmZjdlYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL2Nvbm5lY3Rpb24udHMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgUHJvdmlkZXMgYSBsaXZlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBHcmVtbGluQ2xpZW50IHNlcnZpY2UuCi0gKgotICogVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgYEdyZW1saW5DbGllbnRMaXZlYCBsYXllciwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yCi0gKiBjcmVhdGluZyBhbmQgbWFuYWdpbmcgdGhlIGxpZmVjeWNsZSBvZiBhIEdyZW1saW4gZGF0YWJhc2UgY29ubmVjdGlvbi4KLSAqIFRoZSBsYXllciB1c2VzIGBFZmZlY3QuTGF5ZXJgIHRvIHByb3ZpZGUgdGhlIGBHcmVtbGluQ2xpZW50YCBzZXJ2aWNlCi0gKiB0byB0aGUgYXBwbGljYXRpb24ncyBjb250ZXh0LCBlbnN1cmluZyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIGFjcXVpcmVkCi0gKiB3aGVuIHRoZSBsYXllciBpcyBidWlsdCBhbmQgcmVsZWFzZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gc2h1dHMgZG93bi4KLSAqLwotCi1pbXBvcnQgeyBFZmZlY3QsIExheWVyLCBPcHRpb24sIFJlZGFjdGVkIH0gZnJvbSAnZWZmZWN0JzsKLWltcG9ydCBncmVtbGluIGZyb20gJ2dyZW1saW4nOwotaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnLmpzJzsKLWltcG9ydCB7IEVycm9ycyB9IGZyb20gJy4uL2Vycm9ycy5qcyc7Ci1pbXBvcnQgeyBHcmVtbGluQ2xpZW50IH0gZnJvbSAnLi9jbGllbnQuanMnOwotaW1wb3J0IHR5cGUgeyBDb25uZWN0aW9uU3RhdGUgfSBmcm9tICcuL3R5cGVzLmpzJzsKLQotY29uc3QgeyBQbGFpblRleHRTYXNsQXV0aGVudGljYXRvciB9ID0gZ3JlbWxpbi5kcml2ZXIuYXV0aDsKLWNvbnN0IHsgQ2xpZW50LCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIH0gPSBncmVtbGluLmRyaXZlcjsKLWNvbnN0IHsgQW5vbnltb3VzVHJhdmVyc2FsU291cmNlIH0gPSBncmVtbGluLnByb2Nlc3M7Ci0KLS8qKgotICogQ3JlYXRlcyBhbmQgdGVzdHMgYSBHcmVtbGluIGNvbm5lY3Rpb24uCi0gKgotICogVGhpcyBlZmZlY3QgaXMgcmVzcG9uc2libGUgZm9yIGVzdGFibGlzaGluZyBhIGNvbm5lY3Rpb24gdG8gdGhlIEdyZW1saW4KLSAqIHNlcnZlciwgY3JlYXRpbmcgYSBjbGllbnQgYW5kIGEgZ3JhcGggdHJhdmVyc2FsIHNvdXJjZSAoYGdgKSwgYW5kIHRoZW4KLSAqIHRlc3RpbmcgdGhlIGNvbm5lY3Rpb24gdG8gZW5zdXJlIGl0IGlzIGZ1bmN0aW9uYWwgYmVmb3JlIGl0IGlzIHVzZWQuCi0gKgotICogQHBhcmFtIGNvbmZpZyBUaGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBjb250YWluaW5nIEdyZW1saW4gY29ubmVjdGlvbiBkZXRhaWxzLgotICogQHJldHVybnMgQW4gYEVmZmVjdGAgdGhhdCByZXNvbHZlcyB0byBhIGBDb25uZWN0aW9uU3RhdGVgIG9iamVjdCBvciBmYWlscyB3aXRoIGEgYEdyZW1saW5Db25uZWN0aW9uRXJyb3JgLgotICovCi1jb25zdCBtYWtlQ29ubmVjdGlvbiA9IEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKLSAgY29uc3QgY29uZmlnID0geWllbGQqIEFwcENvbmZpZzsKLSAgY29uc3QgcHJvdG9jb2wgPSBjb25maWcuZ3JlbWxpbi51c2VTU0wgPyAnd3NzJyA6ICd3cyc7Ci0gIGNvbnN0IHVybCA9IGAke3Byb3RvY29sfTovLyR7Y29uZmlnLmdyZW1saW4uaG9zdH06JHtjb25maWcuZ3JlbWxpbi5wb3J0fS9ncmVtbGluYDsKLSAgY29uc3QgdHJhdmVyc2FsU291cmNlID0gY29uZmlnLmdyZW1saW4udHJhdmVyc2FsU291cmNlOwotCi0gIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnQWNxdWlyaW5nIEdyZW1saW4gY29ubmVjdGlvbicsIHsKLSAgICBob3N0OiBjb25maWcuZ3JlbWxpbi5ob3N0LAotICAgIHBvcnQ6IGNvbmZpZy5ncmVtbGluLnBvcnQsCi0gICAgc3NsOiBjb25maWcuZ3JlbWxpbi51c2VTU0wsCi0gICAgdHJhdmVyc2FsU291cmNlOiBjb25maWcuZ3JlbWxpbi50cmF2ZXJzYWxTb3VyY2UsCi0gIH0pOwotCi0gIGNvbnN0IGF1dGggPSBPcHRpb24uemlwV2l0aCgKLSAgICBjb25maWcuZ3JlbWxpbi51c2VybmFtZSwKLSAgICBjb25maWcuZ3JlbWxpbi5wYXNzd29yZCwKLSAgICAodXNlcm5hbWUsIHBhc3N3b3JkKSA9PiAoeyB1c2VybmFtZSwgcGFzc3dvcmQ6IFJlZGFjdGVkLnZhbHVlKHBhc3N3b3JkKSB9KQotICApOwotCi0gIC8vIEJ1aWxkIGEgcHJvcGVyIEdyZW1saW4gYXV0aGVudGljYXRvciB3aGVuIGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZAotICBjb25zdCBhdXRoZW50aWNhdG9yID0gT3B0aW9uLm1hcCgKLSAgICBhdXRoLAotICAgICh7IHVzZXJuYW1lLCBwYXNzd29yZCB9KSA9PiBuZXcgUGxhaW5UZXh0U2FzbEF1dGhlbnRpY2F0b3IodXNlcm5hbWUsIHBhc3N3b3JkKQotICApOwotCi0gIGNvbnN0IGNvbm5lY3Rpb24gPSB5aWVsZCogRWZmZWN0LnRyeSh7Ci0gICAgdHJ5OiAoKSA9PgotICAgICAgbmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24odXJsLCB7Ci0gICAgICAgIHRyYXZlcnNhbFNvdXJjZSwKLSAgICAgICAgYXV0aGVudGljYXRvcjogT3B0aW9uLmdldE9yVW5kZWZpbmVkKGF1dGhlbnRpY2F0b3IpLAotICAgICAgfSksCi0gICAgY2F0Y2g6IGVycm9yID0+IEVycm9ycy5jb25uZWN0aW9uKCdGYWlsZWQgdG8gY3JlYXRlIHJlbW90ZSBjb25uZWN0aW9uJywgeyBlcnJvciB9KSwKLSAgfSk7Ci0KLSAgY29uc3QgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbm5lY3Rpb24pOwotICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHVybCwgewotICAgIHRyYXZlcnNhbFNvdXJjZSwKLSAgICBhdXRoZW50aWNhdG9yOiBPcHRpb24uZ2V0T3JVbmRlZmluZWQoYXV0aGVudGljYXRvciksCi0gIH0pOwotCi0gIC8vIFRlc3QgdGhlIGNvbm5lY3Rpb24KLSAgeWllbGQqIEVmZmVjdC50cnlQcm9taXNlKHsKLSAgICB0cnk6ICgpID0+IGcuaW5qZWN0KDEpLm5leHQoKSwKLSAgICBjYXRjaDogZXJyb3IgPT4gRXJyb3JzLmNvbm5lY3Rpb24oJ0Nvbm5lY3Rpb24gdGVzdCBmYWlsZWQnLCB7IGVycm9yIH0pLAotICB9KTsKLQotICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ+KchSBHcmVtbGluIGNvbm5lY3Rpb24gYWNxdWlyZWQgc3VjY2Vzc2Z1bGx5Jyk7Ci0KLSAgcmV0dXJuIHsKLSAgICBjbGllbnQsCi0gICAgY29ubmVjdGlvbiwKLSAgICBnLAotICAgIGxhc3RVc2VkOiBEYXRlLm5vdygpLAotICB9OwotfSk7Ci0KLS8qKgotICogU2FmZWx5IGNsb3NlcyBhIEdyZW1saW4gY29ubmVjdGlvbi4KLSAqCi0gKiBUaGlzIGVmZmVjdCB0YWtlcyBhIGBDb25uZWN0aW9uU3RhdGVgIGFuZCBjbG9zZXMgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiwKLSAqIGxvZ2dpbmcgYW55IGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgcHJvY2Vzcy4KLSAqCi0gKiBAcGFyYW0gc3RhdGUgVGhlIGBDb25uZWN0aW9uU3RhdGVgIHRvIGJlIGNsb3NlZC4KLSAqIEByZXR1cm5zIEFuIGBFZmZlY3RgIHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICovCi1jb25zdCByZWxlYXNlQ29ubmVjdGlvbiA9IChzdGF0ZTogQ29ubmVjdGlvblN0YXRlKSA9PgotICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCdSZWxlYXNpbmcgR3JlbWxpbiBjb25uZWN0aW9uJyk7Ci0gICAgeWllbGQqIEVmZmVjdC50cnlQcm9taXNlKHsKLSAgICAgIHRyeTogKCkgPT4gc3RhdGUuY29ubmVjdGlvbi5jbG9zZSgpLAotICAgICAgY2F0Y2g6IGVycm9yID0+IEVycm9ycy5jb25uZWN0aW9uKCdGYWlsZWQgdG8gY2xvc2UgR3JlbWxpbiBjb25uZWN0aW9uJywgeyBlcnJvciB9KSwKLSAgICB9KS5waXBlKEVmZmVjdC5jYXRjaEFsbChlcnJvciA9PiBFZmZlY3QubG9nV2FybmluZyhgRXJyb3IgZHVyaW5nIHJlbGVhc2U6ICR7ZXJyb3IubWVzc2FnZX1gKSkpOwotICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnR3JlbWxpbiBjb25uZWN0aW9uIHJlbGVhc2VkIHN1Y2Nlc3NmdWxseScpOwotICB9KTsKLQotLyoqCi0gKiBBIGxheWVyIHRoYXQgcHJvdmlkZXMgYSBsaXZlIGBHcmVtbGluQ2xpZW50YCBzZXJ2aWNlLgotICoKLSAqIFRoaXMgbGF5ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBsaWZlY3ljbGUgb2YgdGhlIEdyZW1saW4gY29ubmVjdGlvbi4KLSAqIEl0IGFjcXVpcmVzIGEgY29ubmVjdGlvbiB3aGVuIHRoZSBsYXllciBpcyBpbml0aWFsaXplZCBhbmQgcmVsZWFzZXMgaXQKLSAqIHdoZW4gdGhlIGFwcGxpY2F0aW9uIHNjb3BlIGlzIGNsb3NlZC4KLSAqCi0gKiBAZXhhbXBsZQotICogYGBgdHlwZXNjcmlwdAotICogaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKLSAqIGltcG9ydCB7IEdyZW1saW5DbGllbnRMaXZlIH0gZnJvbSAnLi9jb25uZWN0aW9uLmpzJzsKLSAqCi0gKiBjb25zdCBteUFwcCA9IEVmZmVjdC5wcm92aWRlKAotICogICAvLyBteSBlZmZlY3RzLi4uCi0gKiAgIEdyZW1saW5DbGllbnRMaXZlCi0gKiApOwotICogYGBgCi0gKi8KLWV4cG9ydCBjb25zdCBHcmVtbGluQ2xpZW50TGl2ZSA9IExheWVyLnNjb3BlZCgKLSAgR3JlbWxpbkNsaWVudCwKLSAgRWZmZWN0LmFjcXVpcmVSZWxlYXNlKG1ha2VDb25uZWN0aW9uLCByZWxlYXNlQ29ubmVjdGlvbikKLSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL2VkZ2UtcGF0dGVybnMudHMgYi9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL2VkZ2UtcGF0dGVybnMudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNjExNDcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9lZGdlLXBhdHRlcm5zLnRzCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFJlbGF0aW9uc2hpcCBwYXR0ZXJuIGFuYWx5c2lzIGZvciBncmFwaCBzY2hlbWFzLgotICoKLSAqIEFuYWx5emVzIGVkZ2UgY29ubmVjdGl2aXR5IHBhdHRlcm5zIGJldHdlZW4gdmVydGV4IHR5cGVzIHRvIGdlbmVyYXRlCi0gKiByZWxhdGlvbnNoaXAgcGF0dGVybiBtZXRhZGF0YSBmb3Igc2NoZW1hIGRvY3VtZW50YXRpb24uCi0gKi8KLQotaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKLWltcG9ydCBncmVtbGluIGZyb20gJ2dyZW1saW4nOwotaW1wb3J0IHR5cGUgeyBFZGdlUGF0dGVybiB9IGZyb20gJy4vbW9kZWxzL2luZGV4LmpzJzsKLWltcG9ydCB7IGV4ZWN1dGVHcmVtbGluUXVlcnkgfSBmcm9tICcuL3F1ZXJ5LXV0aWxzLmpzJzsKLWltcG9ydCB0eXBlIHsgR3JlbWxpblF1ZXJ5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMuanMnOwotaW1wb3J0IHR5cGUgeyBwcm9jZXNzIH0gZnJvbSAnZ3JlbWxpbic7Ci0KLXR5cGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgPSBwcm9jZXNzLkdyYXBoVHJhdmVyc2FsU291cmNlOwotCi1jb25zdCB7IGluViwgb3V0ViwgbGFiZWwgfSA9IGdyZW1saW4ucHJvY2Vzcy5zdGF0aWNzOwotCi0vKioKLSAqIFJhdyBwYXR0ZXJuIGRhdGEgZnJvbSBHcmVtbGluIHByb2plY3QoKSBxdWVyeS4KLSAqLwotaW50ZXJmYWNlIFJhd1BhdHRlcm5EYXRhIHsKLSAgZnJvbTogdW5rbm93bjsKLSAgdG86IHVua25vd247Ci0gIGxhYmVsOiB1bmtub3duOwotfQotCi0vKioKLSAqIEdlbmVyYXRlcyByZWxhdGlvbnNoaXAgcGF0dGVybnMgYnkgYW5hbHl6aW5nIGVkZ2UgY29ubmVjdGl2aXR5LgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcGFyYW0gbWF4UGF0dGVybnMgLSBNYXhpbXVtIG51bWJlciBvZiBwYXR0ZXJucyB0byByZXRyaWV2ZSAoZGVmYXVsdDogMTAwMCkKLSAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGFycmF5IG9mIHJlbGF0aW9uc2hpcCBwYXR0ZXJucwotICovCi1leHBvcnQgY29uc3QgZ2VuZXJhdGVFZGdlUGF0dGVybnMgPSAoCi0gIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAotICBtYXhQYXR0ZXJuczogbnVtYmVyID0gMTAwMAotKTogRWZmZWN0LkVmZmVjdDxFZGdlUGF0dGVybltdLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KLSAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgewotICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnR2VuZXJhdGluZyBlZGdlIHBhdHRlcm5zIGZyb20gZWRnZSBjb25uZWN0aXZpdHknKTsKLQotICAgIC8vIEdldCBhbGwgcGF0dGVybnMgaW4gYSBzaW5nbGUgb3B0aW1pemVkIHF1ZXJ5Ci0gICAgY29uc3QgYWxsUGF0dGVybnMgPSB5aWVsZCogZXhlY3V0ZUdyZW1saW5RdWVyeSgKLSAgICAgICgpID0+Ci0gICAgICAgIGcKLSAgICAgICAgICAuRSgpCi0gICAgICAgICAgLnByb2plY3QoJ2Zyb20nLCAndG8nLCAnbGFiZWwnKQotICAgICAgICAgIC5ieShvdXRWKCkubGFiZWwoKSkKLSAgICAgICAgICAuYnkoaW5WKCkubGFiZWwoKSkKLSAgICAgICAgICAuYnkobGFiZWwoKSkKLSAgICAgICAgICAuZGVkdXAoKQotICAgICAgICAgIC5saW1pdChtYXhQYXR0ZXJucykKLSAgICAgICAgICAudG9MaXN0KCksCi0gICAgICAnRmFpbGVkIHRvIGdldCBlZGdlIHBhdHRlcm5zJywKLSAgICAgIGBnLkUoKS5wcm9qZWN0KCdmcm9tJywgJ3RvJywgJ2xhYmVsJykuYnkob3V0VigpLmxhYmVsKCkpLmJ5KGluVigpLmxhYmVsKCkpLmJ5KGxhYmVsKCkpLmRlZHVwKCkubGltaXQoJHttYXhQYXR0ZXJuc30pLnRvTGlzdCgpYAotICAgICk7Ci0KLSAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oCi0gICAgICBgUmV0cmlldmVkICR7KGFsbFBhdHRlcm5zIGFzIHVua25vd25bXSkubGVuZ3RofSByYXcgcGF0dGVybnMgZnJvbSBkYXRhYmFzZWAKLSAgICApOwotCi0gICAgLy8gUHJvY2VzcyB0aGUgcmVzdWx0cyBpbnRvIHN0cnVjdHVyZWQgcGF0dGVybnMKLSAgICBjb25zdCBwcm9jZXNzZWRQYXR0ZXJucyA9IHlpZWxkKiBwcm9jZXNzUmF3UGF0dGVybnMoYWxsUGF0dGVybnMgYXMgdW5rbm93bltdKTsKLQotICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbyhgUHJvY2Vzc2VkICR7cHJvY2Vzc2VkUGF0dGVybnMubGVuZ3RofSB2YWxpZCByZWxhdGlvbnNoaXAgcGF0dGVybnNgKTsKLQotICAgIHJldHVybiBwcm9jZXNzZWRQYXR0ZXJuczsKLSAgfSk7Ci0KLS8qKgotICogUHJvY2Vzc2VzIHJhdyBHcmVtbGluIHBhdHRlcm4gcmVzdWx0cyBpbnRvIHN0cnVjdHVyZWQgcmVsYXRpb25zaGlwIHBhdHRlcm5zLgotICoKLSAqIEBwYXJhbSByYXdQYXR0ZXJucyAtIFJhdyBwYXR0ZXJuIGRhdGEgZnJvbSBHcmVtbGluIHF1ZXJ5Ci0gKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBwcm9jZXNzZWQgcmVsYXRpb25zaGlwIHBhdHRlcm5zCi0gKi8KLWNvbnN0IHByb2Nlc3NSYXdQYXR0ZXJucyA9IChyYXdQYXR0ZXJuczogdW5rbm93bltdKTogRWZmZWN0LkVmZmVjdDxFZGdlUGF0dGVybltdLCBuZXZlcj4gPT4gewotICAvLyBFeHRyYWN0IHBhdHRlcm4gZGF0YSBoYW5kbGluZyBib3RoIE1hcCBhbmQgb2JqZWN0IGZvcm1hdHMKLSAgY29uc3QgZXh0cmFjdGVkUGF0dGVybnMgPSByYXdQYXR0ZXJucy5tYXAoZXh0cmFjdFBhdHRlcm5EYXRhKTsKLQotICAvLyBGaWx0ZXIgb3V0IGludmFsaWQgcGF0dGVybnMgYW5kIGNvbnZlcnQgdG8gZmluYWwgZm9ybWF0Ci0gIGNvbnN0IHZhbGlkUGF0dGVybnMgPSBleHRyYWN0ZWRQYXR0ZXJucy5maWx0ZXIoaXNWYWxpZFBhdHRlcm4pLm1hcChjb252ZXJ0VG9FZGdlUGF0dGVybik7Ci0KLSAgcmV0dXJuIEVmZmVjdC5zdWNjZWVkKHZhbGlkUGF0dGVybnMpOwotfTsKLQotLyoqCi0gKiBFeHRyYWN0cyBwYXR0ZXJuIGRhdGEgZnJvbSB2YXJpb3VzIEdyZW1saW4gcmVzdWx0IGZvcm1hdHMuCi0gKgotICogQHBhcmFtIGl0ZW0gLSBSYXcgcGF0dGVybiBpdGVtIGZyb20gR3JlbWxpbgotICogQHJldHVybnMgRXh0cmFjdGVkIHBhdHRlcm4gZGF0YQotICovCi1jb25zdCBleHRyYWN0UGF0dGVybkRhdGEgPSAoaXRlbTogdW5rbm93bik6IFJhd1BhdHRlcm5EYXRhID0+IHsKLSAgLy8gSGFuZGxlIE1hcCBmb3JtYXQgKGNvbW1vbiBpbiBzb21lIEdyZW1saW4gaW1wbGVtZW50YXRpb25zKQotICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1hcCkgewotICAgIHJldHVybiB7Ci0gICAgICBmcm9tOiBpdGVtLmdldCgnZnJvbScpLAotICAgICAgdG86IGl0ZW0uZ2V0KCd0bycpLAotICAgICAgbGFiZWw6IGl0ZW0uZ2V0KCdsYWJlbCcpLAotICAgIH07Ci0gIH0KLQotICAvLyBIYW5kbGUgcGxhaW4gb2JqZWN0IGZvcm1hdAotICBpZiAoaXRlbSAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHsKLSAgICBjb25zdCBvYmogPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+OwotICAgIHJldHVybiB7Ci0gICAgICBmcm9tOiBvYmpbJ2Zyb20nXSwKLSAgICAgIHRvOiBvYmpbJ3RvJ10sCi0gICAgICBsYWJlbDogb2JqWydsYWJlbCddLAotICAgIH07Ci0gIH0KLQotICAvLyBGYWxsYmFjayBmb3IgdW5leHBlY3RlZCBmb3JtYXRzCi0gIHJldHVybiB7IGZyb206IG51bGwsIHRvOiBudWxsLCBsYWJlbDogbnVsbCB9OwotfTsKLQotLyoqCi0gKiBWYWxpZGF0ZXMgdGhhdCBwYXR0ZXJuIGRhdGEgY29udGFpbnMgcmVxdWlyZWQgc3RyaW5nIHZhbHVlcy4KLSAqCi0gKiBAcGFyYW0gcGF0dGVybiAtIFBhdHRlcm4gZGF0YSB0byB2YWxpZGF0ZQotICogQHJldHVybnMgVHJ1ZSBpZiBwYXR0ZXJuIGlzIHZhbGlkCi0gKi8KLWNvbnN0IGlzVmFsaWRQYXR0ZXJuID0gKHBhdHRlcm46IFJhd1BhdHRlcm5EYXRhKTogcGF0dGVybiBpcyBSZXF1aXJlZDxSYXdQYXR0ZXJuRGF0YT4gPT4KLSAgcGF0dGVybi5mcm9tICE9PSBudWxsICYmCi0gIHBhdHRlcm4udG8gIT09IG51bGwgJiYKLSAgcGF0dGVybi5sYWJlbCAhPT0gbnVsbCAmJgotICB0eXBlb2YgcGF0dGVybi5mcm9tID09PSAnc3RyaW5nJyAmJgotICB0eXBlb2YgcGF0dGVybi50byA9PT0gJ3N0cmluZycgJiYKLSAgdHlwZW9mIHBhdHRlcm4ubGFiZWwgPT09ICdzdHJpbmcnOwotCi0vKioKLSAqIENvbnZlcnRzIHZhbGlkYXRlZCBwYXR0ZXJuIGRhdGEgdG8gZmluYWwgRWRnZVBhdHRlcm4gZm9ybWF0LgotICoKLSAqIEBwYXJhbSBwYXR0ZXJuIC0gVmFsaWRhdGVkIHBhdHRlcm4gZGF0YQotICogQHJldHVybnMgUmVsYXRpb25zaGlwIHBhdHRlcm4gb2JqZWN0Ci0gKi8KLWNvbnN0IGNvbnZlcnRUb0VkZ2VQYXR0ZXJuID0gKHBhdHRlcm46IFJlcXVpcmVkPFJhd1BhdHRlcm5EYXRhPik6IEVkZ2VQYXR0ZXJuID0+ICh7Ci0gIGxlZnRfdmVydGV4OiBwYXR0ZXJuLmZyb20gYXMgc3RyaW5nLAotICByaWdodF92ZXJ0ZXg6IHBhdHRlcm4udG8gYXMgc3RyaW5nLAotICByZWxhdGlvbjogcGF0dGVybi5sYWJlbCBhcyBzdHJpbmcsCi19KTsKLQotLyoqCi0gKiBBbmFseXplcyByZWxhdGlvbnNoaXAgZGVuc2l0eSBhbmQgcHJvdmlkZXMgcGF0dGVybiBzdGF0aXN0aWNzLgotICoKLSAqIEBwYXJhbSBwYXR0ZXJucyAtIEFycmF5IG9mIHJlbGF0aW9uc2hpcCBwYXR0ZXJucwotICogQHJldHVybnMgUGF0dGVybiBhbmFseXNpcyBzdGF0aXN0aWNzCi0gKi8KLWV4cG9ydCBjb25zdCBhbmFseXplUGF0dGVyblN0YXRpc3RpY3MgPSAocGF0dGVybnM6IEVkZ2VQYXR0ZXJuW10pID0+IHsKLSAgY29uc3QgdmVydGV4VHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTsKLSAgY29uc3QgZWRnZVR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7Ci0gIGNvbnN0IGNvbm5lY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTsKLQotICBwYXR0ZXJucy5mb3JFYWNoKHBhdHRlcm4gPT4gewotICAgIHZlcnRleFR5cGVzLmFkZChwYXR0ZXJuLmxlZnRfdmVydGV4KTsKLSAgICB2ZXJ0ZXhUeXBlcy5hZGQocGF0dGVybi5yaWdodF92ZXJ0ZXgpOwotICAgIGVkZ2VUeXBlcy5hZGQocGF0dGVybi5yZWxhdGlvbik7Ci0KLSAgICBjb25zdCBjb25uZWN0aW9uS2V5ID0gYCR7cGF0dGVybi5sZWZ0X3ZlcnRleH0tPiR7cGF0dGVybi5yaWdodF92ZXJ0ZXh9YDsKLSAgICBjb25uZWN0aW9ucy5zZXQoY29ubmVjdGlvbktleSwgKGNvbm5lY3Rpb25zLmdldChjb25uZWN0aW9uS2V5KSB8fCAwKSArIDEpOwotICB9KTsKLQotICByZXR1cm4gewotICAgIHRvdGFsUGF0dGVybnM6IHBhdHRlcm5zLmxlbmd0aCwKLSAgICB1bmlxdWVWZXJ0ZXhUeXBlczogdmVydGV4VHlwZXMuc2l6ZSwKLSAgICB1bmlxdWVFZGdlVHlwZXM6IGVkZ2VUeXBlcy5zaXplLAotICAgIGF2ZXJhZ2VDb25uZWN0aW9uc1BlclZlcnRleFR5cGU6IHBhdHRlcm5zLmxlbmd0aCAvIE1hdGgubWF4KHZlcnRleFR5cGVzLnNpemUsIDEpLAotICAgIHZlcnRleFR5cGVzOiBBcnJheS5mcm9tKHZlcnRleFR5cGVzKS5zb3J0KCksCi0gICAgZWRnZVR5cGVzOiBBcnJheS5mcm9tKGVkZ2VUeXBlcykuc29ydCgpLAotICAgIGNvbm5lY3Rpb25GcmVxdWVuY2llczogT2JqZWN0LmZyb21FbnRyaWVzKGNvbm5lY3Rpb25zKSwKLSAgfTsKLX07CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL3Byb3BlcnR5LWFuYWx5emVyLnRzIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9wcm9wZXJ0eS1hbmFseXplci50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkMDViNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL3Byb3BlcnR5LWFuYWx5emVyLnRzCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IFByb3BlcnR5IGFuYWx5c2lzIGZvciBncmFwaCBzY2hlbWEgZ2VuZXJhdGlvbi4KLSAqCi0gKiBIYW5kbGVzIGFuYWx5c2lzIG9mIHZlcnRleCBhbmQgZWRnZSBwcm9wZXJ0aWVzIGluY2x1ZGluZyB0eXBlIGRldGVjdGlvbiwKLSAqIGVudW0gZGlzY292ZXJ5LCBjYXJkaW5hbGl0eSBhbmFseXNpcywgYW5kIHNhbXBsZSB2YWx1ZSBjb2xsZWN0aW9uLgotICovCi0KLWltcG9ydCB7IEVmZmVjdCB9IGZyb20gJ2VmZmVjdCc7Ci1pbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSAnLi9tb2RlbHMvaW5kZXguanMnOwotaW1wb3J0IHR5cGUgeyBTY2hlbWFDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJzsKLWltcG9ydCB0eXBlIHsgcHJvY2VzcyB9IGZyb20gJ2dyZW1saW4nOwotaW1wb3J0IHsgZ2V0U2FtcGxlUHJvcGVydHlWYWx1ZXMsIHByb2Nlc3NCYXRjaGVkIH0gZnJvbSAnLi9xdWVyeS11dGlscy5qcyc7Ci1pbXBvcnQgdHlwZSB7IEdyZW1saW5RdWVyeUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzLmpzJzsKLQotdHlwZSBHcmFwaFRyYXZlcnNhbFNvdXJjZSA9IHByb2Nlc3MuR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci0KLS8qKgotICogQW5hbHl6ZXMgcHJvcGVydHkgY2hhcmFjdGVyaXN0aWNzIGZyb20gY29sbGVjdGVkIHZhbHVlcy4KLSAqCi0gKiBAcGFyYW0gcHJvcGVydHlLZXkgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eQotICogQHBhcmFtIHZhbHVlcyAtIEFycmF5IG9mIHNhbXBsZSB2YWx1ZXMKLSAqIEBwYXJhbSBjb25maWcgLSBTY2hlbWEgY29uZmlndXJhdGlvbgotICogQHJldHVybnMgUHJvcGVydHkgYW5hbHlzaXMgcmVzdWx0Ci0gKi8KLWV4cG9ydCBjb25zdCBhbmFseXplUHJvcGVydHlGcm9tVmFsdWVzID0gKAotICBwcm9wZXJ0eUtleTogc3RyaW5nLAotICB2YWx1ZXM6IHVua25vd25bXSwKLSAgY29uZmlnOiBTY2hlbWFDb25maWcKLSk6IFByb3BlcnR5ID0+IHsKLSAgLy8gU2tpcCBkZW55bGlzdGVkIHByb3BlcnRpZXMKLSAgaWYgKGNvbmZpZy5lbnVtUHJvcGVydHlEZW55TGlzdC5pbmNsdWRlcyhwcm9wZXJ0eUtleSkpIHsKLSAgICByZXR1cm4gewotICAgICAgbmFtZTogcHJvcGVydHlLZXksCi0gICAgICB0eXBlOiBbJ3Vua25vd24nXSwKLSAgICB9OwotICB9Ci0KLSAgLy8gRGVkdXBsaWNhdGUgYW5kIGxpbWl0IHZhbHVlcwotICBjb25zdCB1bmlxdWVWYWx1ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQodmFsdWVzKSkuc2xpY2UoMCwgY29uZmlnLm1heEVudW1WYWx1ZXMgKyAxKTsKLQotICAvLyBEZXRlcm1pbmUgdHlwZXMgZnJvbSBzYW1wbGUgdmFsdWVzCi0gIGNvbnN0IHR5cGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KHVuaXF1ZVZhbHVlcy5tYXAoKHZhbDogdW5rbm93bikgPT4gdHlwZW9mIHZhbCkuZmlsdGVyKEJvb2xlYW4pKSk7Ci0KLSAgY29uc3QgcHJvcGVydHk6IFByb3BlcnR5ID0gewotICAgIG5hbWU6IHByb3BlcnR5S2V5LAotICAgIHR5cGU6IHR5cGVzLmxlbmd0aCA+IDAgPyB0eXBlcyA6IFsndW5rbm93biddLAotICB9OwotCi0gIC8vIEFkZCBzYW1wbGUgdmFsdWVzIGlmIHJlcXVlc3RlZAotICBpZiAoY29uZmlnLmluY2x1ZGVTYW1wbGVWYWx1ZXMgJiYgdW5pcXVlVmFsdWVzLmxlbmd0aCA+IDApIHsKLSAgICBwcm9wZXJ0eS5zYW1wbGVfdmFsdWVzID0gdW5pcXVlVmFsdWVzLnNsaWNlKDAsIDUpOwotICB9Ci0KLSAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZW51bQotICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA8PSBjb25maWcuZW51bUNhcmRpbmFsaXR5VGhyZXNob2xkICYmIHVuaXF1ZVZhbHVlcy5sZW5ndGggPiAwKSB7Ci0gICAgcHJvcGVydHkuZW51bSA9IHVuaXF1ZVZhbHVlczsKLSAgICBwcm9wZXJ0eS5jYXJkaW5hbGl0eSA9ICdzaW5nbGUnOwotICB9Ci0KLSAgcmV0dXJuIHByb3BlcnR5OwotfTsKLQotLyoqCi0gKiBBbmFseXplcyBhIHNpbmdsZSBwcm9wZXJ0eSBmb3IgYW4gZWxlbWVudCAodmVydGV4IG9yIGVkZ2UpLgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcGFyYW0gZWxlbWVudExhYmVsIC0gTGFiZWwgb2YgdGhlIHZlcnRleCBvciBlZGdlCi0gKiBAcGFyYW0gcHJvcGVydHlLZXkgLSBQcm9wZXJ0eSB0byBhbmFseXplCi0gKiBAcGFyYW0gY29uZmlnIC0gU2NoZW1hIGNvbmZpZ3VyYXRpb24KLSAqIEBwYXJhbSBpc1ZlcnRleCAtIFdoZXRoZXIgYW5hbHl6aW5nIHZlcnRleCAodHJ1ZSkgb3IgZWRnZSAoZmFsc2UpIHByb3BlcnR5Ci0gKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBwcm9wZXJ0eSBhbmFseXNpcwotICovCi1leHBvcnQgY29uc3QgYW5hbHl6ZVNpbmdsZVByb3BlcnR5ID0gKAotICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKLSAgZWxlbWVudExhYmVsOiBzdHJpbmcsCi0gIHByb3BlcnR5S2V5OiBzdHJpbmcsCi0gIGNvbmZpZzogU2NoZW1hQ29uZmlnLAotICBpc1ZlcnRleDogYm9vbGVhbgotKTogRWZmZWN0LkVmZmVjdDxQcm9wZXJ0eSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+Ci0gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKLSAgICAvLyBTa2lwIGRlbnlsaXN0ZWQgcHJvcGVydGllcyBlYXJseQotICAgIGlmIChjb25maWcuZW51bVByb3BlcnR5RGVueUxpc3QuaW5jbHVkZXMocHJvcGVydHlLZXkpKSB7Ci0gICAgICByZXR1cm4gewotICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSwKLSAgICAgICAgdHlwZTogWyd1bmtub3duJ10sCi0gICAgICB9OwotICAgIH0KLQotICAgIC8vIEdldCBzYW1wbGUgdmFsdWVzIGZvciBhbmFseXNpcwotICAgIGNvbnN0IHNhbXBsZVZhbHVlcyA9IHlpZWxkKiBnZXRTYW1wbGVQcm9wZXJ0eVZhbHVlcygKLSAgICAgIGcsCi0gICAgICBlbGVtZW50TGFiZWwsCi0gICAgICBwcm9wZXJ0eUtleSwKLSAgICAgIGlzVmVydGV4LAotICAgICAgNTAsIC8vIHNhbXBsZSBsaW1pdAotICAgICAgY29uZmlnLm1heEVudW1WYWx1ZXMKLSAgICApOwotCi0gICAgcmV0dXJuIGFuYWx5emVQcm9wZXJ0eUZyb21WYWx1ZXMocHJvcGVydHlLZXksIHNhbXBsZVZhbHVlcywgY29uZmlnKTsKLSAgfSk7Ci0KLS8qKgotICogQW5hbHl6ZXMgYWxsIHByb3BlcnRpZXMgZm9yIGEgbGlzdCBvZiBlbGVtZW50cyB1c2luZyBiYXRjaGVkIHByb2Nlc3NpbmcuCi0gKgotICogQHBhcmFtIGcgLSBHcmVtbGluIHRyYXZlcnNhbCBzb3VyY2UKLSAqIEBwYXJhbSBlbGVtZW50TGFiZWxzIC0gQXJyYXkgb2YgdmVydGV4IG9yIGVkZ2UgbGFiZWxzCi0gKiBAcGFyYW0gcHJvcGVydHlLZXlzRm4gLSBGdW5jdGlvbiB0byBnZXQgcHJvcGVydHkga2V5cyBmb3IgYW4gZWxlbWVudAotICogQHBhcmFtIGNvbmZpZyAtIFNjaGVtYSBjb25maWd1cmF0aW9uCi0gKiBAcGFyYW0gaXNWZXJ0ZXggLSBXaGV0aGVyIGFuYWx5emluZyB2ZXJ0aWNlcyAodHJ1ZSkgb3IgZWRnZXMgKGZhbHNlKQotICogQHJldHVybnMgRWZmZWN0IHdpdGggYXJyYXkgb2YgcHJvcGVydHkgYW5hbHlzZXMKLSAqLwotZXhwb3J0IGNvbnN0IGFuYWx5emVFbGVtZW50UHJvcGVydGllcyA9ICgKLSAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCi0gIGVsZW1lbnRMYWJlbHM6IHN0cmluZ1tdLAotICBwcm9wZXJ0eUtleXNGbjogKAotICAgIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAotICAgIGxhYmVsOiBzdHJpbmcKLSAgKSA9PiBFZmZlY3QuRWZmZWN0PHN0cmluZ1tdLCBHcmVtbGluUXVlcnlFcnJvcj4sCi0gIGNvbmZpZzogU2NoZW1hQ29uZmlnLAotICBpc1ZlcnRleDogYm9vbGVhbgotKTogRWZmZWN0LkVmZmVjdDx1bmtub3duW10sIEdyZW1saW5RdWVyeUVycm9yPiA9PgotICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gICAgY29uc3QgYmF0Y2hTaXplID0gY29uZmlnLmJhdGNoU2l6ZSB8fCAxMDsKLQotICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygKLSAgICAgIGBBbmFseXppbmcgJHtlbGVtZW50TGFiZWxzLmxlbmd0aH0gJHtpc1ZlcnRleCA/ICd2ZXJ0ZXgnIDogJ2VkZ2UnfSBsYWJlbHMgd2l0aCBiYXRjaCBzaXplICR7YmF0Y2hTaXplfWAKLSAgICApOwotCi0gICAgcmV0dXJuIHlpZWxkKiBwcm9jZXNzQmF0Y2hlZChlbGVtZW50TGFiZWxzLCBiYXRjaFNpemUsIChlbGVtZW50TGFiZWw6IHN0cmluZykgPT4KLSAgICAgIGFuYWx5emVQcm9wZXJ0aWVzRm9yTGFiZWwoZywgZWxlbWVudExhYmVsLCBwcm9wZXJ0eUtleXNGbiwgY29uZmlnLCBpc1ZlcnRleCkKLSAgICApOwotICB9KTsKLQotLy8gVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS90aW5rZXJwb3AvcHVsbC8zMjM4I2Rpc2N1c3Npb25fcjI0Mjk2NjQ2OTcKLQotLyoqCi0gKiBBbmFseXplcyBwcm9wZXJ0aWVzIGZvciBhIHNpbmdsZSBlbGVtZW50IGxhYmVsLgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcGFyYW0gZWxlbWVudExhYmVsIC0gTGFiZWwgdG8gYW5hbHl6ZQotICogQHBhcmFtIHByb3BlcnR5S2V5c0ZuIC0gRnVuY3Rpb24gdG8gZ2V0IHByb3BlcnR5IGtleXMKLSAqIEBwYXJhbSBjb25maWcgLSBTY2hlbWEgY29uZmlndXJhdGlvbgotICogQHBhcmFtIGlzVmVydGV4IC0gV2hldGhlciBhbmFseXppbmcgdmVydGV4IG9yIGVkZ2UKLSAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIHByb3BlcnR5IGFuYWx5c2lzCi0gKi8KLWNvbnN0IGFuYWx5emVQcm9wZXJ0aWVzRm9yTGFiZWwgPSAoCi0gIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAotICBlbGVtZW50TGFiZWw6IHN0cmluZywKLSAgcHJvcGVydHlLZXlzRm46ICgKLSAgICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKLSAgICBsYWJlbDogc3RyaW5nCi0gICkgPT4gRWZmZWN0LkVmZmVjdDxzdHJpbmdbXSwgR3JlbWxpblF1ZXJ5RXJyb3I+LAotICBjb25maWc6IFNjaGVtYUNvbmZpZywKLSAgaXNWZXJ0ZXg6IGJvb2xlYW4KLSk6IEVmZmVjdC5FZmZlY3Q8dW5rbm93biwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+Ci0gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKLSAgICAvLyBHZXQgYWxsIHByb3BlcnR5IGtleXMgZm9yIHRoaXMgbGFiZWwKLSAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSB5aWVsZCogcHJvcGVydHlLZXlzRm4oZywgZWxlbWVudExhYmVsKTsKLQotICAgIC8vIEFuYWx5emUgcHJvcGVydGllcyB3aXRoIGNvbnRyb2xsZWQgY29uY3VycmVuY3kKLSAgICBjb25zdCBwcm9wZXJ0aWVzID0geWllbGQqIEVmZmVjdC5hbGwoCi0gICAgICBwcm9wZXJ0eUtleXMubWFwKGtleSA9PiBhbmFseXplU2luZ2xlUHJvcGVydHkoZywgZWxlbWVudExhYmVsLCBrZXksIGNvbmZpZywgaXNWZXJ0ZXgpKSwKLSAgICAgIHsgY29uY3VycmVuY3k6IDUgfQotICAgICk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGFuYWx5c2lzCi0gICAgcmV0dXJuIHsKLSAgICAgIFsnbGFiZWwnXTogZWxlbWVudExhYmVsLAotICAgICAgcHJvcGVydGllcywKLSAgICB9OwotICB9KTsKLQotLyoqCi0gKiBDcmVhdGVzIGEgcHJvcGVydHkgYW5hbHl6ZXIgd2l0aCBjb3VudCBpbmZvcm1hdGlvbi4KLSAqCi0gKiBAcGFyYW0gY291bnRzIC0gQ291bnQgZGF0YSBmb3IgZWxlbWVudHMKLSAqIEBwYXJhbSBjb25maWcgLSBTY2hlbWEgY29uZmlndXJhdGlvbgotICogQHJldHVybnMgRnVuY3Rpb24gdGhhdCBhZGRzIGNvdW50IGluZm9ybWF0aW9uIHRvIGFuYWx5c2lzCi0gKi8KLWV4cG9ydCBjb25zdCB3aXRoRWxlbWVudENvdW50cyA9Ci0gIDxUIGV4dGVuZHMgeyBjb3VudD86IG51bWJlciB9PigKLSAgICBjb3VudHM6IHsgdmFsdWU/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0gfCBudWxsLAotICAgIGNvbmZpZzogU2NoZW1hQ29uZmlnCi0gICkgPT4KLSAgKGVsZW1lbnRMYWJlbDogc3RyaW5nLCBhbmFseXNpczogT21pdDxULCAnY291bnQnPik6IFQgPT4gewotICAgIGNvbnN0IGNvdW50ID0gY29uZmlnLmluY2x1ZGVDb3VudHMgPyBjb3VudHM/LnZhbHVlPy5bZWxlbWVudExhYmVsXSA6IHVuZGVmaW5lZDsKLQotICAgIHJldHVybiB7Ci0gICAgICAuLi5hbmFseXNpcywKLSAgICAgIC4uLihjb3VudCAhPT0gdW5kZWZpbmVkICYmIHsgY291bnQgfSksCi0gICAgfSBhcyBUOwotICB9OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9xdWVyeS11dGlscy50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vcXVlcnktdXRpbHMudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5M2NlYmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9xdWVyeS11dGlscy50cworKysgL2Rldi9udWxsCkBAIC0xLDIyMyArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBTaGFyZWQgdXRpbGl0aWVzIGZvciBHcmVtbGluIHF1ZXJ5IGV4ZWN1dGlvbiBhbmQgYmF0Y2hlZCBwcm9jZXNzaW5nLgotICoKLSAqIFByb3ZpZGVzIGNvbW1vbiBwYXR0ZXJucyBmb3IgRWZmZWN0LVRTIGJhc2VkIEdyZW1saW4gcXVlcnkgZXhlY3V0aW9uIHdpdGgKLSAqIHN0YW5kYXJkaXplZCBlcnJvciBoYW5kbGluZywgYmF0Y2hpbmcsIGFuZCB0aW1lb3V0IG1hbmFnZW1lbnQuCi0gKi8KLQotaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSAnZWZmZWN0JzsKLWltcG9ydCBncmVtbGluIGZyb20gJ2dyZW1saW4nOwotaW1wb3J0IHsgRXJyb3JzLCB0eXBlIEdyZW1saW5RdWVyeUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzLmpzJzsKLWltcG9ydCB0eXBlIHsgcHJvY2VzcyB9IGZyb20gJ2dyZW1saW4nOwotCi10eXBlIEdyYXBoVHJhdmVyc2FsU291cmNlID0gcHJvY2Vzcy5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLQotY29uc3QgeyBsYWJlbCB9ID0gZ3JlbWxpbi5wcm9jZXNzLnN0YXRpY3M7Ci0KLS8qKgotICogUHJvY2Vzc2VzIGl0ZW1zIGluIGNvbnRyb2xsZWQgYmF0Y2hlcyB3aXRoIGNvbmN1cnJlbmN5IGxpbWl0aW5nLgotICoKLSAqIEBwYXJhbSBpdGVtcyAtIEFycmF5IG9mIGl0ZW1zIHRvIHByb2Nlc3MKLSAqIEBwYXJhbSBiYXRjaFNpemUgLSBOdW1iZXIgb2YgaXRlbXMgcGVyIGJhdGNoCi0gKiBAcGFyYW0gcHJvY2Vzc29yIC0gRWZmZWN0IHRvIHJ1biBvbiBlYWNoIGl0ZW0KLSAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGFsbCBwcm9jZXNzZWQgcmVzdWx0cwotICoKLSAqIENyaXRpY2FsIGZvciBsYXJnZSBncmFwaHMgdG8gYXZvaWQgb3ZlcndoZWxtaW5nIHRoZSBkYXRhYmFzZSB3aXRoIGNvbmN1cnJlbnQgcXVlcmllcy4KLSAqIFByb2Nlc3NlcyBiYXRjaGVzIHNlcXVlbnRpYWxseSBidXQgYWxsb3dzIGNvbnRyb2xsZWQgY29uY3VycmVuY3kgd2l0aGluIGVhY2ggYmF0Y2guCi0gKi8KLWV4cG9ydCBjb25zdCBwcm9jZXNzQmF0Y2hlZCA9IDxULCBSLCBFPigKLSAgaXRlbXM6IFRbXSwKLSAgYmF0Y2hTaXplOiBudW1iZXIsCi0gIHByb2Nlc3NvcjogKGl0ZW06IFQpID0+IEVmZmVjdC5FZmZlY3Q8UiwgRT4KLSk6IEVmZmVjdC5FZmZlY3Q8UltdLCBFPiA9PgotICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gICAgY29uc3QgYmF0Y2hlczogVFtdW10gPSBbXTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArPSBiYXRjaFNpemUpIHsKLSAgICAgIGJhdGNoZXMucHVzaChpdGVtcy5zbGljZShpLCBpICsgYmF0Y2hTaXplKSk7Ci0gICAgfQotCi0gICAgY29uc3QgcmVzdWx0czogUltdID0gW107Ci0gICAgZm9yIChjb25zdCBiYXRjaCBvZiBiYXRjaGVzKSB7Ci0gICAgICBjb25zdCBiYXRjaFJlc3VsdHMgPSB5aWVsZCogRWZmZWN0LmFsbChiYXRjaC5tYXAocHJvY2Vzc29yKSwgewotICAgICAgICBjb25jdXJyZW5jeTogTWF0aC5taW4oYmF0Y2hTaXplLCAxMCksCi0gICAgICB9KTsKLSAgICAgIHJlc3VsdHMucHVzaCguLi5iYXRjaFJlc3VsdHMpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHRzOwotICB9KTsKLQotLyoqCi0gKiBFeGVjdXRlcyBhIEdyZW1saW4gcXVlcnkgd2l0aCBzdGFuZGFyZGl6ZWQgZXJyb3IgaGFuZGxpbmcuCi0gKgotICogQHBhcmFtIHF1ZXJ5Rm4gLSBGdW5jdGlvbiB0aGF0IHJldHVybnMgYSBQcm9taXNlIGZyb20gYSBHcmVtbGluIHRyYXZlcnNhbAotICogQHBhcmFtIGVycm9yTWVzc2FnZSAtIEh1bWFuLXJlYWRhYmxlIGVycm9yIG1lc3NhZ2UgZm9yIGZhaWx1cmVzCi0gKiBAcGFyYW0gcXVlcnlEZXNjcmlwdGlvbiAtIFRlY2huaWNhbCBkZXNjcmlwdGlvbiBvZiB0aGUgcXVlcnkgZm9yIGRlYnVnZ2luZwotICogQHJldHVybnMgRWZmZWN0IHdpdGggcXVlcnkgcmVzdWx0cyBvciB0eXBlZCBlcnJvcgotICovCi1leHBvcnQgY29uc3QgZXhlY3V0ZUdyZW1saW5RdWVyeSA9IDxUPigKLSAgcXVlcnlGbjogKCkgPT4gUHJvbWlzZTxUPiwKLSAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsCi0gIHF1ZXJ5RGVzY3JpcHRpb246IHN0cmluZwotKTogRWZmZWN0LkVmZmVjdDxULCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KLSAgRWZmZWN0LnRyeVByb21pc2UoewotICAgIHRyeTogcXVlcnlGbiwKLSAgICBjYXRjaDogKGVycm9yOiB1bmtub3duKSA9PiBFcnJvcnMucXVlcnkoZXJyb3JNZXNzYWdlLCBxdWVyeURlc2NyaXB0aW9uLCB7IGVycm9yIH0pLAotICB9KTsKLQotLyoqCi0gKiBHZXRzIGFsbCB2ZXJ0ZXggbGFiZWxzIGZyb20gdGhlIGdyYXBoLgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBhcnJheSBvZiB2ZXJ0ZXggbGFiZWwgc3RyaW5ncwotICovCi1leHBvcnQgY29uc3QgZ2V0VmVydGV4TGFiZWxzID0gKAotICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZQotKTogRWZmZWN0LkVmZmVjdDxzdHJpbmdbXSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+Ci0gIGV4ZWN1dGVHcmVtbGluUXVlcnkoCi0gICAgKCkgPT4gZy5WKCkubGFiZWwoKS5kZWR1cCgpLnRvTGlzdCgpLAotICAgICdGYWlsZWQgdG8gZ2V0IHZlcnRleCBsYWJlbHMnLAotICAgICdnLlYoKS5sYWJlbCgpLmRlZHVwKCkudG9MaXN0KCknCi0gICkucGlwZShFZmZlY3QubWFwKGxhYmVscyA9PiBsYWJlbHMgYXMgc3RyaW5nW10pKTsKLQotLyoqCi0gKiBHZXRzIGFsbCBlZGdlIGxhYmVscyBmcm9tIHRoZSBncmFwaC4KLSAqCi0gKiBAcGFyYW0gZyAtIEdyZW1saW4gdHJhdmVyc2FsIHNvdXJjZQotICogQHJldHVybnMgRWZmZWN0IHdpdGggYXJyYXkgb2YgZWRnZSBsYWJlbCBzdHJpbmdzCi0gKi8KLWV4cG9ydCBjb25zdCBnZXRFZGdlTGFiZWxzID0gKAotICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZQotKTogRWZmZWN0LkVmZmVjdDxzdHJpbmdbXSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+Ci0gIGV4ZWN1dGVHcmVtbGluUXVlcnkoCi0gICAgKCkgPT4gZy5FKCkubGFiZWwoKS5kZWR1cCgpLnRvTGlzdCgpLAotICAgICdGYWlsZWQgdG8gZ2V0IGVkZ2UgbGFiZWxzJywKLSAgICAnZy5FKCkubGFiZWwoKS5kZWR1cCgpLnRvTGlzdCgpJwotICApLnBpcGUoRWZmZWN0Lm1hcChsYWJlbHMgPT4gbGFiZWxzIGFzIHN0cmluZ1tdKSk7Ci0KLS8qKgotICogR2V0cyB2ZXJ0ZXggY291bnRzIGdyb3VwZWQgYnkgbGFiZWwuCi0gKgotICogQHBhcmFtIGcgLSBHcmVtbGluIHRyYXZlcnNhbCBzb3VyY2UKLSAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIHZlcnRleCBjb3VudCBkYXRhCi0gKi8KLWV4cG9ydCBjb25zdCBnZXRWZXJ0ZXhDb3VudHNQZXJMYWJlbCA9IChnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSkgPT4KLSAgZXhlY3V0ZUdyZW1saW5RdWVyeSgKLSAgICAoKSA9PiBnLlYoKS5ncm91cENvdW50KCkuYnkobGFiZWwoKSkubmV4dCgpLAotICAgICdGYWlsZWQgdG8gZ2V0IHZlcnRleCBjb3VudHMnLAotICAgICdnLlYoKS5ncm91cENvdW50KCkuYnkobGFiZWwoKSkubmV4dCgpJwotICApLnBpcGUoCi0gICAgRWZmZWN0Lm1hcChyZXN1bHQgPT4gewotICAgICAgY29uc3QgbWFwID0gKHJlc3VsdCBhcyBhbnkpPy52YWx1ZSBhcyBNYXA8c3RyaW5nLCBudW1iZXI+IHwgdW5kZWZpbmVkOwotICAgICAgcmV0dXJuIHsgdmFsdWU6IG1hcCA/IChPYmplY3QuZnJvbUVudHJpZXMobWFwKSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA6IHVuZGVmaW5lZCB9OwotICAgIH0pCi0gICk7Ci0KLS8qKgotICogR2V0cyBlZGdlIGNvdW50cyBncm91cGVkIGJ5IGxhYmVsLgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBlZGdlIGNvdW50IGRhdGEKLSAqLwotZXhwb3J0IGNvbnN0IGdldEVkZ2VDb3VudHNQZXJMYWJlbCA9IChnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSkgPT4KLSAgZXhlY3V0ZUdyZW1saW5RdWVyeSgKLSAgICAoKSA9PiBnLkUoKS5ncm91cENvdW50KCkuYnkobGFiZWwoKSkubmV4dCgpLAotICAgICdGYWlsZWQgdG8gZ2V0IGVkZ2UgY291bnRzJywKLSAgICAnZy5FKCkuZ3JvdXBDb3VudCgpLmJ5KGxhYmVsKCkpLm5leHQoKScKLSAgKS5waXBlKAotICAgIEVmZmVjdC5tYXAocmVzdWx0ID0+IHsKLSAgICAgIGNvbnN0IG1hcCA9IChyZXN1bHQgYXMgYW55KT8udmFsdWUgYXMgTWFwPHN0cmluZywgbnVtYmVyPiB8IHVuZGVmaW5lZDsKLSAgICAgIHJldHVybiB7IHZhbHVlOiBtYXAgPyAoT2JqZWN0LmZyb21FbnRyaWVzKG1hcCkgYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPikgOiB1bmRlZmluZWQgfTsKLSAgICB9KQotICApOwotCi0vKioKLSAqIEdldHMgcHJvcGVydHkga2V5cyBmb3IgYSBzcGVjaWZpYyB2ZXJ0ZXggbGFiZWwuCi0gKgotICogQHBhcmFtIGcgLSBHcmVtbGluIHRyYXZlcnNhbCBzb3VyY2UKLSAqIEBwYXJhbSB2ZXJ0ZXhMYWJlbCAtIExhYmVsIHRvIGFuYWx5emUKLSAqIEBwYXJhbSBzYW1wbGVMaW1pdCAtIE1heGltdW0gbnVtYmVyIG9mIHZlcnRpY2VzIHRvIHNhbXBsZSBmb3IgcHJvcGVydGllcwotICogQHJldHVybnMgRWZmZWN0IHdpdGggYXJyYXkgb2YgcHJvcGVydHkga2V5IHN0cmluZ3MKLSAqLwotZXhwb3J0IGNvbnN0IGdldFZlcnRleFByb3BlcnR5S2V5cyA9ICgKLSAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCi0gIHZlcnRleExhYmVsOiBzdHJpbmcsCi0gIHNhbXBsZUxpbWl0OiBudW1iZXIgPSAxMDAKLSk6IEVmZmVjdC5FZmZlY3Q8c3RyaW5nW10sIEdyZW1saW5RdWVyeUVycm9yPiA9PgotICBleGVjdXRlR3JlbWxpblF1ZXJ5KAotICAgICgpID0+IGcuVigpLmhhc0xhYmVsKHZlcnRleExhYmVsKS5saW1pdChzYW1wbGVMaW1pdCkucHJvcGVydGllcygpLmtleSgpLmRlZHVwKCkudG9MaXN0KCksCi0gICAgYEZhaWxlZCB0byBnZXQgcHJvcGVydGllcyBmb3IgdmVydGV4ICR7dmVydGV4TGFiZWx9YCwKLSAgICBgZy5WKCkuaGFzTGFiZWwoJyR7dmVydGV4TGFiZWx9JykubGltaXQoJHtzYW1wbGVMaW1pdH0pLnByb3BlcnRpZXMoKS5rZXkoKS5kZWR1cCgpLnRvTGlzdCgpYAotICApLnBpcGUoRWZmZWN0Lm1hcChrZXlzID0+IGtleXMgYXMgc3RyaW5nW10pKTsKLQotLyoqCi0gKiBHZXRzIHByb3BlcnR5IGtleXMgZm9yIGEgc3BlY2lmaWMgZWRnZSBsYWJlbC4KLSAqCi0gKiBAcGFyYW0gZyAtIEdyZW1saW4gdHJhdmVyc2FsIHNvdXJjZQotICogQHBhcmFtIGVkZ2VMYWJlbCAtIExhYmVsIHRvIGFuYWx5emUKLSAqIEBwYXJhbSBzYW1wbGVMaW1pdCAtIE1heGltdW0gbnVtYmVyIG9mIGVkZ2VzIHRvIHNhbXBsZSBmb3IgcHJvcGVydGllcwotICogQHJldHVybnMgRWZmZWN0IHdpdGggYXJyYXkgb2YgcHJvcGVydHkga2V5IHN0cmluZ3MKLSAqLwotZXhwb3J0IGNvbnN0IGdldEVkZ2VQcm9wZXJ0eUtleXMgPSAoCi0gIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAotICBlZGdlTGFiZWw6IHN0cmluZywKLSAgc2FtcGxlTGltaXQ6IG51bWJlciA9IDEwMAotKTogRWZmZWN0LkVmZmVjdDxzdHJpbmdbXSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+Ci0gIGV4ZWN1dGVHcmVtbGluUXVlcnkoCi0gICAgKCkgPT4gZy5FKCkuaGFzTGFiZWwoZWRnZUxhYmVsKS5saW1pdChzYW1wbGVMaW1pdCkucHJvcGVydGllcygpLmtleSgpLmRlZHVwKCkudG9MaXN0KCksCi0gICAgYEZhaWxlZCB0byBnZXQgcHJvcGVydGllcyBmb3IgZWRnZSAke2VkZ2VMYWJlbH1gLAotICAgIGBnLkUoKS5oYXNMYWJlbCgnJHtlZGdlTGFiZWx9JykubGltaXQoJHtzYW1wbGVMaW1pdH0pLnByb3BlcnRpZXMoKS5rZXkoKS5kZWR1cCgpLnRvTGlzdCgpYAotICApLnBpcGUoRWZmZWN0Lm1hcChrZXlzID0+IGtleXMgYXMgc3RyaW5nW10pKTsKLQotLyoqCi0gKiBHZXRzIHNhbXBsZSBwcm9wZXJ0eSB2YWx1ZXMgZm9yIGFuYWx5c2lzLgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcGFyYW0gZWxlbWVudExhYmVsIC0gVmVydGV4IG9yIGVkZ2UgbGFiZWwKLSAqIEBwYXJhbSBwcm9wZXJ0eUtleSAtIFByb3BlcnR5IHRvIHNhbXBsZQotICogQHBhcmFtIGlzVmVydGV4IC0gV2hldGhlciB0aGlzIGlzIGEgdmVydGV4ICh0cnVlKSBvciBlZGdlIChmYWxzZSkKLSAqIEBwYXJhbSBzYW1wbGVMaW1pdCAtIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIHNhbXBsZQotICogQHBhcmFtIG1heFZhbHVlcyAtIE1heGltdW0gbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyB0byBjb2xsZWN0Ci0gKiBAcmV0dXJucyBFZmZlY3Qgd2l0aCBhcnJheSBvZiBzYW1wbGUgdmFsdWVzCi0gKi8KLWV4cG9ydCBjb25zdCBnZXRTYW1wbGVQcm9wZXJ0eVZhbHVlcyA9ICgKLSAgZzogR3JhcGhUcmF2ZXJzYWxTb3VyY2UsCi0gIGVsZW1lbnRMYWJlbDogc3RyaW5nLAotICBwcm9wZXJ0eUtleTogc3RyaW5nLAotICBpc1ZlcnRleDogYm9vbGVhbiwKLSAgc2FtcGxlTGltaXQ6IG51bWJlciA9IDUwLAotICBtYXhWYWx1ZXM6IG51bWJlciA9IDEwCi0pOiBFZmZlY3QuRWZmZWN0PHVua25vd25bXSwgR3JlbWxpblF1ZXJ5RXJyb3I+ID0+IHsKLSAgY29uc3QgdHJhdmVyc2FsID0gaXNWZXJ0ZXggPyBnLlYoKS5oYXNMYWJlbChlbGVtZW50TGFiZWwpIDogZy5FKCkuaGFzTGFiZWwoZWxlbWVudExhYmVsKTsKLQotICByZXR1cm4gZXhlY3V0ZUdyZW1saW5RdWVyeSgKLSAgICAoKSA9PgotICAgICAgdHJhdmVyc2FsCi0gICAgICAgIC5saW1pdChzYW1wbGVMaW1pdCkKLSAgICAgICAgLnZhbHVlcyhwcm9wZXJ0eUtleSkKLSAgICAgICAgLmRlZHVwKCkKLSAgICAgICAgLmxpbWl0KG1heFZhbHVlcyArIDEpCi0gICAgICAgIC50b0xpc3QoKSwKLSAgICBgRmFpbGVkIHRvIGdldCB2YWx1ZXMgZm9yIHByb3BlcnR5ICR7cHJvcGVydHlLZXl9YCwKLSAgICBgZy4ke2lzVmVydGV4ID8gJ1YnIDogJ0UnfSgpLmhhc0xhYmVsKCcke2VsZW1lbnRMYWJlbH0nKS5saW1pdCgke3NhbXBsZUxpbWl0fSkudmFsdWVzKCcke3Byb3BlcnR5S2V5fScpLmRlZHVwKCkubGltaXQoJHttYXhWYWx1ZXMgKyAxfSkudG9MaXN0KClgCi0gICkucGlwZShFZmZlY3QubWFwKHZhbHVlcyA9PiB2YWx1ZXMgYXMgdW5rbm93bltdKSk7Ci19OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9zY2hlbWEtZ2VuZXJhdG9yLnRzIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9zY2hlbWEtZ2VuZXJhdG9yLnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzYwOWI4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vc2NoZW1hLWdlbmVyYXRvci50cworKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBTdHJlYW1saW5lZCBncmFwaCBzY2hlbWEgZ2VuZXJhdGlvbiBvcmNoZXN0cmF0b3IuCi0gKgotICogQ29vcmRpbmF0ZXMgc2NoZW1hIGdlbmVyYXRpb24gdXNpbmcgbW9kdWxhciBjb21wb25lbnRzIGZvciBxdWVyeSBleGVjdXRpb24sCi0gKiBwcm9wZXJ0eSBhbmFseXNpcywgcmVsYXRpb25zaGlwIHBhdHRlcm5zLCBhbmQgc2NoZW1hIGFzc2VtYmx5LiBQcm92aWRlcwotICogdGltZW91dCBwcm90ZWN0aW9uIGFuZCBjb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nLgotICovCi0KLWltcG9ydCB7IEVmZmVjdCwgRHVyYXRpb24gfSBmcm9tICdlZmZlY3QnOwotaW1wb3J0IHsgdHlwZSBHcmFwaFNjaGVtYSwgdHlwZSBWZXJ0ZXgsIHR5cGUgRWRnZSB9IGZyb20gJy4vbW9kZWxzL2luZGV4LmpzJzsKLWltcG9ydCB7IEVycm9ycywgdHlwZSBHcmVtbGluQ29ubmVjdGlvbkVycm9yLCB0eXBlIEdyZW1saW5RdWVyeUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzLmpzJzsKLWltcG9ydCB0eXBlIHsgQ29ubmVjdGlvblN0YXRlLCBTY2hlbWFDb25maWcgfSBmcm9tICcuL3R5cGVzLmpzJzsKLWltcG9ydCB7Ci0gIGdldFZlcnRleExhYmVscywKLSAgZ2V0RWRnZUxhYmVscywKLSAgZ2V0VmVydGV4Q291bnRzUGVyTGFiZWwsCi0gIGdldEVkZ2VDb3VudHNQZXJMYWJlbCwKLSAgZ2V0VmVydGV4UHJvcGVydHlLZXlzLAotICBnZXRFZGdlUHJvcGVydHlLZXlzLAotfSBmcm9tICcuL3F1ZXJ5LXV0aWxzLmpzJzsKLWltcG9ydCB7IGFuYWx5emVFbGVtZW50UHJvcGVydGllcywgd2l0aEVsZW1lbnRDb3VudHMgfSBmcm9tICcuL3Byb3BlcnR5LWFuYWx5emVyLmpzJzsKLWltcG9ydCB7IGdlbmVyYXRlRWRnZVBhdHRlcm5zIH0gZnJvbSAnLi9lZGdlLXBhdHRlcm5zLmpzJzsKLWltcG9ydCB7IGFzc2VtYmxlR3JhcGhTY2hlbWEgfSBmcm9tICcuL3NjaGVtYS1hc3NlbWJseS5qcyc7Ci1pbXBvcnQgdHlwZSB7IHByb2Nlc3MgfSBmcm9tICdncmVtbGluJzsKLQotdHlwZSBHcmFwaFRyYXZlcnNhbFNvdXJjZSA9IHByb2Nlc3MuR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci10eXBlIFNjaGVtYUNvdW50RGF0YSA9IHsgdmFsdWU/OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0gfCBudWxsOwotCi1jb25zdCBERUZBVUxUX1NDSEVNQV9USU1FT1VUX01TID0gMzAwMDA7Ci0KLS8qKgotICogRGVmYXVsdCBzY2hlbWEgY29uZmlndXJhdGlvbgotICovCi1leHBvcnQgY29uc3QgREVGQVVMVF9TQ0hFTUFfQ09ORklHOiBTY2hlbWFDb25maWcgPSB7Ci0gIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGZhbHNlLAotICBtYXhFbnVtVmFsdWVzOiAxMCwKLSAgaW5jbHVkZUNvdW50czogZmFsc2UsCi0gIGVudW1DYXJkaW5hbGl0eVRocmVzaG9sZDogMTAsCi0gIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBbJ2lkJywgJ3RpbWVzdGFtcCddLAotICB0aW1lb3V0TXM6IERFRkFVTFRfU0NIRU1BX1RJTUVPVVRfTVMsCi0gIGJhdGNoU2l6ZTogMTAsCi19OwotCi0vKioKLSAqIENvcmUgc2NoZW1hIGdlbmVyYXRpb24gb3JjaGVzdHJhdG9yLgotICoKLSAqIEBwYXJhbSBnIC0gR3JlbWxpbiB0cmF2ZXJzYWwgc291cmNlCi0gKiBAcGFyYW0gY29uZmlnIC0gU2NoZW1hIGNvbmZpZ3VyYXRpb24KLSAqIEBwYXJhbSBzdGFydFRpbWUgLSBHZW5lcmF0aW9uIHN0YXJ0IHRpbWVzdGFtcCBmb3IgbWV0cmljcwotICogQHJldHVybnMgRWZmZWN0IHdpdGggY29tcGxldGUgc2NoZW1hCi0gKi8KLWNvbnN0IGV4ZWN1dGVTY2hlbWFHZW5lcmF0aW9uID0gKAotICBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZSwKLSAgY29uZmlnOiBTY2hlbWFDb25maWcsCi0gIHN0YXJ0VGltZTogbnVtYmVyCi0pOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KLSAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgewotICAgIC8vIFN0ZXAgMTogRGlzY292ZXIgZ3JhcGggc3RydWN0dXJlCi0gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCdEaXNjb3ZlcmluZyBncmFwaCBzdHJ1Y3R1cmUnKTsKLSAgICBjb25zdCBbdmVydGV4TGFiZWxzLCBlZGdlTGFiZWxzXSA9IHlpZWxkKiBFZmZlY3QuYWxsKFtnZXRWZXJ0ZXhMYWJlbHMoZyksIGdldEVkZ2VMYWJlbHMoZyldKTsKLQotICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygKLSAgICAgIGBGb3VuZCAke3ZlcnRleExhYmVscy5sZW5ndGh9IHZlcnRleCBsYWJlbHMgYW5kICR7ZWRnZUxhYmVscy5sZW5ndGh9IGVkZ2UgbGFiZWxzYAotICAgICk7Ci0KLSAgICAvLyBTdGVwIDI6IEdldCBjb3VudHMgaWYgZW5hYmxlZAotICAgIGNvbnN0IFt2ZXJ0ZXhDb3VudHNQZXJMYWJlbCwgZWRnZUNvdW50c1BlckxhYmVsXSA9IHlpZWxkKiBnZXRFbGVtZW50Q291bnRzUGVyTGFiZWwoZywgY29uZmlnKTsKLQotICAgIC8vIFN0ZXAgMzogQW5hbHl6ZSBwcm9wZXJ0aWVzIGFuZCBwYXR0ZXJucyBpbiBwYXJhbGxlbAotICAgIHlpZWxkKiBFZmZlY3QubG9nSW5mbygnQW5hbHl6aW5nIHByb3BlcnRpZXMgYW5kIHJlbGF0aW9uc2hpcCBwYXR0ZXJucycpOwotICAgIGNvbnN0IFtyYXdWZXJ0aWNlcywgcmF3RWRnZXMsIHBhdHRlcm5zXSA9IHlpZWxkKiBFZmZlY3QuYWxsKAotICAgICAgWwotICAgICAgICBhbmFseXplRWxlbWVudFByb3BlcnRpZXMoZywgdmVydGV4TGFiZWxzLCBnZXRWZXJ0ZXhQcm9wZXJ0eUtleXMsIGNvbmZpZywgdHJ1ZSksCi0gICAgICAgIGFuYWx5emVFbGVtZW50UHJvcGVydGllcyhnLCBlZGdlTGFiZWxzLCBnZXRFZGdlUHJvcGVydHlLZXlzLCBjb25maWcsIGZhbHNlKSwKLSAgICAgICAgZ2VuZXJhdGVFZGdlUGF0dGVybnMoZyksCi0gICAgICBdLAotICAgICAgeyBjb25jdXJyZW5jeTogMyB9Ci0gICAgKTsKLQotICAgIC8vIFN0ZXAgNDogQWRkIGNvdW50IGluZm9ybWF0aW9uCi0gICAgY29uc3QgdmVydGljZXMgPSBhZGRFbGVtZW50Q291bnRzPFZlcnRleD4ocmF3VmVydGljZXMsIHZlcnRleENvdW50c1BlckxhYmVsLCBjb25maWcpOwotICAgIGNvbnN0IGVkZ2VzID0gYWRkRWxlbWVudENvdW50czxFZGdlPihyYXdFZGdlcywgZWRnZUNvdW50c1BlckxhYmVsLCBjb25maWcpOwotCi0gICAgLy8gU3RlcCA1OiBBc3NlbWJsZSBmaW5hbCBzY2hlbWEKLSAgICByZXR1cm4geWllbGQqIGFzc2VtYmxlR3JhcGhTY2hlbWEodmVydGljZXMsIGVkZ2VzLCBwYXR0ZXJucywgY29uZmlnLCBzdGFydFRpbWUpOwotICB9KTsKLQotLyoqCi0gKiBHZXRzIHZlcnRleCBhbmQgZWRnZSBjb3VudHMgaWYgZW5hYmxlZCBpbiBjb25maWd1cmF0aW9uLgotICovCi1jb25zdCBnZXRFbGVtZW50Q291bnRzUGVyTGFiZWwgPSAoCi0gIGc6IEdyYXBoVHJhdmVyc2FsU291cmNlLAotICBjb25maWc6IFNjaGVtYUNvbmZpZwotKTogRWZmZWN0LkVmZmVjdDxbU2NoZW1hQ291bnREYXRhLCBTY2hlbWFDb3VudERhdGFdLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4gewotICBpZiAoIWNvbmZpZy5pbmNsdWRlQ291bnRzKSB7Ci0gICAgcmV0dXJuIEVmZmVjdC5zdWNjZWVkKFtudWxsLCBudWxsXSk7Ci0gIH0KLQotICByZXR1cm4gRWZmZWN0LmFsbChbZ2V0VmVydGV4Q291bnRzUGVyTGFiZWwoZyksIGdldEVkZ2VDb3VudHNQZXJMYWJlbChnKV0pOwotfTsKLQotLyoqCi0gKiBBZGRzIGNvdW50IGluZm9ybWF0aW9uIHRvIGFuYWx5c2lzIHJlc3VsdHMuCi0gKi8KLWNvbnN0IGFkZEVsZW1lbnRDb3VudHMgPSA8VCBleHRlbmRzIFZlcnRleCB8IEVkZ2U+KAotICByYXdFbGVtZW50czogdW5rbm93bltdLAotICBjb3VudHM6IFNjaGVtYUNvdW50RGF0YSwKLSAgY29uZmlnOiBTY2hlbWFDb25maWcKLSk6IFRbXSA9PiB7Ci0gIGNvbnN0IGFkZENvdW50cyA9IHdpdGhFbGVtZW50Q291bnRzPFQ+KGNvdW50cywgY29uZmlnKTsKLQotICByZXR1cm4gcmF3RWxlbWVudHMubWFwKGVsZW1lbnQgPT4gewotICAgIGNvbnN0IGVsZW1lbnREYXRhID0gZWxlbWVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsKLSAgICBjb25zdCBsYWJlbCA9IGVsZW1lbnREYXRhWydsYWJlbCddIGFzIHN0cmluZzsKLSAgICByZXR1cm4gYWRkQ291bnRzKGxhYmVsLCBlbGVtZW50RGF0YSBhcyBPbWl0PFQsICdjb3VudCc+KTsKLSAgfSk7Ci19OwotCi0vKioKLSAqIEFwcGxpZXMgdGltZW91dCBwcm90ZWN0aW9uIHRvIHNjaGVtYSBnZW5lcmF0aW9uLgotICoKLSAqIEBwYXJhbSBzY2hlbWFHZW5lcmF0aW9uIC0gRWZmZWN0IHBlcmZvcm1pbmcgc2NoZW1hIGdlbmVyYXRpb24KLSAqIEBwYXJhbSBjb25maWcgLSBDb25maWd1cmF0aW9uIHdpdGggdGltZW91dCBzZXR0aW5ncwotICogQHJldHVybnMgRWZmZWN0IHdpdGggdGltZW91dCBwcm90ZWN0aW9uIGFwcGxpZWQKLSAqLwotY29uc3QgYXBwbHlTY2hlbWFUaW1lb3V0ID0gKAotICBzY2hlbWFHZW5lcmF0aW9uOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluUXVlcnlFcnJvcj4sCi0gIGNvbmZpZzogU2NoZW1hQ29uZmlnCi0pOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4gewotICBjb25zdCB0aW1lb3V0RHVyYXRpb24gPSBEdXJhdGlvbi5taWxsaXMoY29uZmlnLnRpbWVvdXRNcyB8fCBERUZBVUxUX1NDSEVNQV9USU1FT1VUX01TKTsKLSAgY29uc3QgdGltZW91dEVmZmVjdCA9IEVmZmVjdC50aW1lb3V0KHNjaGVtYUdlbmVyYXRpb24sIHRpbWVvdXREdXJhdGlvbik7Ci0KLSAgcmV0dXJuIEVmZmVjdC5jYXRjaFRhZyh0aW1lb3V0RWZmZWN0LCAnVGltZW91dEV4Y2VwdGlvbicsICgpID0+Ci0gICAgRWZmZWN0LmZhaWwoCi0gICAgICBFcnJvcnMucXVlcnkoCi0gICAgICAgIGBTY2hlbWEgZ2VuZXJhdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHtjb25maWcudGltZW91dE1zIHx8IERFRkFVTFRfU0NIRU1BX1RJTUVPVVRfTVN9bXNgLAotICAgICAgICAnc2NoZW1hLWdlbmVyYXRpb24nCi0gICAgICApCi0gICAgKQotICApOwotfTsKLQotLyoqCi0gKiBNYWluIGVudHJ5IHBvaW50IGZvciBncmFwaCBzY2hlbWEgZ2VuZXJhdGlvbi4KLSAqCi0gKiBAcGFyYW0gY29ubmVjdGlvblN0YXRlIC0gQWN0aXZlIEdyZW1saW4gY29ubmVjdGlvbiB3aXRoIHRyYXZlcnNhbCBzb3VyY2UKLSAqIEBwYXJhbSBjb25maWcgLSBTY2hlbWEgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMKLSAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIGNvbXBsZXRlIEdyYXBoU2NoZW1hIG9yIGNvbm5lY3Rpb24gZXJyb3IKLSAqCi0gKiBPcmNoZXN0cmF0ZXMgdGhlIGNvbXBsZXRlIHNjaGVtYSBnZW5lcmF0aW9uIHBpcGVsaW5lOgotICogMS4gVmFsaWRhdGVzIGNvbm5lY3Rpb24gc3RhdGUKLSAqIDIuIEFwcGxpZXMgdGltZW91dCBwcm90ZWN0aW9uCi0gKiAzLiBEZWxlZ2F0ZXMgdG8gY29yZSBnZW5lcmF0aW9uIGxvZ2ljCi0gKgotICogV2lsbCB0aW1lb3V0IGlmIGdlbmVyYXRpb24gZXhjZWVkcyBjb25maWd1cmVkIHRpbWUgbGltaXQgKGRlZmF1bHQgMzBzKS4KLSAqLwotZXhwb3J0IGNvbnN0IGdlbmVyYXRlR3JhcGhTY2hlbWEgPSAoCi0gIGNvbm5lY3Rpb25TdGF0ZTogQ29ubmVjdGlvblN0YXRlLAotICBjb25maWc6IFNjaGVtYUNvbmZpZyA9IERFRkFVTFRfU0NIRU1BX0NPTkZJRwotKTogRWZmZWN0LkVmZmVjdDxHcmFwaFNjaGVtYSwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvciB8IEdyZW1saW5RdWVyeUVycm9yPiA9PgotICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gICAgaWYgKCFjb25uZWN0aW9uU3RhdGUuZykgewotICAgICAgcmV0dXJuIHlpZWxkKiBFZmZlY3QuZmFpbChFcnJvcnMuY29ubmVjdGlvbignR3JhcGggdHJhdmVyc2FsIHNvdXJjZSBub3QgYXZhaWxhYmxlJykpOwotICAgIH0KLQotICAgIGNvbnN0IGcgPSBjb25uZWN0aW9uU3RhdGUuZzsKLSAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCdTdGFydGluZyBncmFwaCBzY2hlbWEgZ2VuZXJhdGlvbicsIHsKLSAgICAgIGNvbmZpZzogewotICAgICAgICBpbmNsdWRlQ291bnRzOiBjb25maWcuaW5jbHVkZUNvdW50cywKLSAgICAgICAgaW5jbHVkZVNhbXBsZVZhbHVlczogY29uZmlnLmluY2x1ZGVTYW1wbGVWYWx1ZXMsCi0gICAgICAgIG1heEVudW1WYWx1ZXM6IGNvbmZpZy5tYXhFbnVtVmFsdWVzLAotICAgICAgfSwKLSAgICB9KTsKLQotICAgIGNvbnN0IHNjaGVtYUdlbmVyYXRpb24gPSBleGVjdXRlU2NoZW1hR2VuZXJhdGlvbihnLCBjb25maWcsIHN0YXJ0VGltZSk7Ci0gICAgcmV0dXJuIHlpZWxkKiBhcHBseVNjaGVtYVRpbWVvdXQoc2NoZW1hR2VuZXJhdGlvbiwgY29uZmlnKTsKLSAgfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9ncmVtbGluL3NjaGVtYS50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vc2NoZW1hLnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzRkODBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vc2NoZW1hLnRzCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgeyBFZmZlY3QsIENvbnRleHQsIExheWVyIH0gZnJvbSAnZWZmZWN0JzsKLWltcG9ydCB7IGdlbmVyYXRlR3JhcGhTY2hlbWEsIERFRkFVTFRfU0NIRU1BX0NPTkZJRyB9IGZyb20gJy4vc2NoZW1hLWdlbmVyYXRvci5qcyc7Ci1pbXBvcnQgewotICBjcmVhdGVTY2hlbWFDYWNoZSwKLSAgZ2V0Q2FjaGVkU2NoZW1hLAotICBpbnZhbGlkYXRlU2NoZW1hQ2FjaGUsCi0gIHBlZWtDYWNoZWRTY2hlbWEsCi0gIHJlZnJlc2hTY2hlbWFDYWNoZSwKLX0gZnJvbSAnLi9zY2hlbWEtY2FjaGUuanMnOwotaW1wb3J0IHR5cGUgeyBHcmFwaFNjaGVtYSB9IGZyb20gJy4vbW9kZWxzL2luZGV4LmpzJzsKLWltcG9ydCB7IEdyZW1saW5DbGllbnQgfSBmcm9tICcuL2NsaWVudC5qcyc7Ci1pbXBvcnQgeyBBcHBDb25maWcgfSBmcm9tICcuLi9jb25maWcuanMnOwotaW1wb3J0IHR5cGUgeyBHcmVtbGluQ29ubmVjdGlvbkVycm9yLCBHcmVtbGluUXVlcnlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy5qcyc7Ci0KLS8vIERlZmluZSB0aGUgc2VydmljZSBpbnRlcmZhY2UgYW5kIGNyZWF0ZSBhIHRhZwotZXhwb3J0IGNsYXNzIFNjaGVtYVNlcnZpY2UgZXh0ZW5kcyBDb250ZXh0LlRhZygnU2NoZW1hU2VydmljZScpPAotICBTY2hlbWFTZXJ2aWNlLAotICB7Ci0gICAgcmVhZG9ubHkgZ2V0U2NoZW1hOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHwgR3JlbWxpblF1ZXJ5RXJyb3I+OwotICAgIHJlYWRvbmx5IHBlZWtTY2hlbWE6IEVmZmVjdC5FZmZlY3Q8R3JhcGhTY2hlbWEgfCBudWxsLCBuZXZlcj47Ci0gICAgcmVhZG9ubHkgaW52YWxpZGF0ZVNjaGVtYTogRWZmZWN0LkVmZmVjdDx2b2lkLCBuZXZlcj47Ci0gICAgcmVhZG9ubHkgcmVmcmVzaFNjaGVtYTogRWZmZWN0LkVmZmVjdDx2b2lkLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHwgR3JlbWxpblF1ZXJ5RXJyb3I+OwotICB9Ci0+KCkge30KLQotLy8gSW1wbGVtZW50IHRoZSBsaXZlIGxheWVyCi1leHBvcnQgY29uc3QgU2NoZW1hU2VydmljZUxpdmUgPSBMYXllci5lZmZlY3QoCi0gIFNjaGVtYVNlcnZpY2UsCi0gIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHsKLSAgICBjb25zdCBncmVtbGluQ2xpZW50ID0geWllbGQqIEdyZW1saW5DbGllbnQ7Ci0gICAgY29uc3QgY29uZmlnID0geWllbGQqIEFwcENvbmZpZzsKLSAgICBjb25zdCBjYWNoZVJlZiA9IHlpZWxkKiBjcmVhdGVTY2hlbWFDYWNoZSgpOwotCi0gICAgY29uc3QgZ2VuZXJhdGVTY2hlbWFFZmZlY3QgPSBnZW5lcmF0ZUdyYXBoU2NoZW1hKGdyZW1saW5DbGllbnQsIHsKLSAgICAgIC4uLkRFRkFVTFRfU0NIRU1BX0NPTkZJRywKLSAgICAgIGluY2x1ZGVDb3VudHM6IGNvbmZpZy5zY2hlbWEuaW5jbHVkZUNvdW50cywKLSAgICAgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGNvbmZpZy5zY2hlbWEuaW5jbHVkZVNhbXBsZVZhbHVlcywKLSAgICB9KTsKLQotICAgIGNvbnN0IGdldFNjaGVtYSA9IGdldENhY2hlZFNjaGVtYShjYWNoZVJlZiwgZ2VuZXJhdGVTY2hlbWFFZmZlY3QpOwotICAgIGNvbnN0IHBlZWtTY2hlbWEgPSBwZWVrQ2FjaGVkU2NoZW1hKGNhY2hlUmVmKTsKLSAgICBjb25zdCBpbnZhbGlkYXRlU2NoZW1hID0gaW52YWxpZGF0ZVNjaGVtYUNhY2hlKGNhY2hlUmVmKTsKLSAgICBjb25zdCByZWZyZXNoU2NoZW1hID0gRWZmZWN0LmFzVm9pZChyZWZyZXNoU2NoZW1hQ2FjaGUoY2FjaGVSZWYsIGdlbmVyYXRlU2NoZW1hRWZmZWN0KSk7Ci0KLSAgICByZXR1cm4gU2NoZW1hU2VydmljZS5vZih7Ci0gICAgICBnZXRTY2hlbWEsCi0gICAgICBwZWVrU2NoZW1hLAotICAgICAgaW52YWxpZGF0ZVNjaGVtYSwKLSAgICAgIHJlZnJlc2hTY2hlbWEsCi0gICAgfSk7Ci0gIH0pCi0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9zZXJ2aWNlLnRzIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi9zZXJ2aWNlLnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDEwMjQ5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vc2VydmljZS50cworKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLS8qKgotICogQGZpbGVvdmVydmlldyBFZmZlY3QtYmFzZWQgR3JlbWxpbiBzZXJ2aWNlIGZvciBncmFwaCBkYXRhYmFzZSBvcGVyYXRpb25zLgotICoKLSAqIFByb3ZpZGVzIGEgbW9kdWxhciwgY29tcG9zYWJsZSBzZXJ2aWNlIGxheWVyIGZvciBHcmVtbGluIGdyYXBoIGRhdGFiYXNlcyB1c2luZwotICogRWZmZWN0LXRzIHBhdHRlcm5zLiBIYW5kbGVzIGNvbm5lY3Rpb24gbWFuYWdlbWVudCwgc2NoZW1hIGNhY2hpbmcsIHF1ZXJ5IGV4ZWN1dGlvbiwKLSAqIGFuZCBlcnJvciBoYW5kbGluZy4KLSAqLwotCi1pbXBvcnQgeyBFZmZlY3QsIENvbnRleHQsIExheWVyLCBwaXBlIH0gZnJvbSAnZWZmZWN0JzsKLWltcG9ydCB7IHR5cGUgR3JlbWxpblF1ZXJ5UmVzdWx0LCBHcmVtbGluUXVlcnlSZXN1bHRTY2hlbWEgfSBmcm9tICcuL21vZGVscy9pbmRleC5qcyc7Ci1pbXBvcnQgeyBwYXJzZUdyZW1saW5SZXN1bHRzV2l0aE1ldGFkYXRhIH0gZnJvbSAnLi4vdXRpbHMvcmVzdWx0LXBhcnNlci5qcyc7Ci1pbXBvcnQgeyBpc0dyZW1saW5SZXN1bHQgfSBmcm9tICcuLi91dGlscy90eXBlLWd1YXJkcy5qcyc7Ci1pbXBvcnQgeyBHcmVtbGluQ29ubmVjdGlvbkVycm9yLCBHcmVtbGluUXVlcnlFcnJvciwgRXJyb3JzLCBQYXJzZUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzLmpzJzsKLWltcG9ydCB7IEdyZW1saW5DbGllbnQgfSBmcm9tICcuL2NsaWVudC5qcyc7Ci1pbXBvcnQgeyBTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi9zY2hlbWEuanMnOwotaW1wb3J0IHR5cGUgeyBHcmVtbGluQ2xpZW50VHlwZSwgR3JlbWxpblJlc3VsdFNldCB9IGZyb20gJy4vdHlwZXMuanMnOwotaW1wb3J0IHR5cGUgeyBHcmFwaFNjaGVtYSwgU2VydmljZVN0YXR1cyB9IGZyb20gJy4vdHlwZXMuanMnOwotCi0vKioKLSAqIEdyZW1saW4gc2VydmljZSB1c2luZyBFZmZlY3QgQ29udGV4dC5UYWcgcGF0dGVybi4KLSAqCi0gKiBQcm92aWRlcyBncmFwaCBkYXRhYmFzZSBvcGVyYXRpb25zIGluY2x1ZGluZzoKLSAqIC0gQ29ubmVjdGlvbiBzdGF0dXMgbW9uaXRvcmluZwotICogLSBTY2hlbWEgaW50cm9zcGVjdGlvbiBhbmQgY2FjaGluZwotICogLSBRdWVyeSBleGVjdXRpb24gd2l0aCByZXN1bHQgcGFyc2luZwotICogLSBIZWFsdGggY2hlY2sgY2FwYWJpbGl0aWVzCi0gKgotICogQWxsIG9wZXJhdGlvbnMgcmV0dXJuIEVmZmVjdCB0eXBlcyBmb3IgY29tcG9zYWJsZSBlcnJvciBoYW5kbGluZy4KLSAqLwotZXhwb3J0IGNsYXNzIEdyZW1saW5TZXJ2aWNlIGV4dGVuZHMgQ29udGV4dC5UYWcoJ0dyZW1saW5TZXJ2aWNlJyk8Ci0gIEdyZW1saW5TZXJ2aWNlLAotICB7Ci0gICAgcmVhZG9ubHkgZ2V0U3RhdHVzOiBFZmZlY3QuRWZmZWN0PFNlcnZpY2VTdGF0dXMsIG5ldmVyPjsKLSAgICByZWFkb25seSBnZXRTY2hlbWE6IEVmZmVjdC5FZmZlY3Q8R3JhcGhTY2hlbWEsIEdyZW1saW5Db25uZWN0aW9uRXJyb3IgfCBHcmVtbGluUXVlcnlFcnJvcj47Ci0gICAgcmVhZG9ubHkgZ2V0Q2FjaGVkU2NoZW1hOiBFZmZlY3QuRWZmZWN0PEdyYXBoU2NoZW1hIHwgbnVsbCwgbmV2ZXI+OwotICAgIHJlYWRvbmx5IHJlZnJlc2hTY2hlbWFDYWNoZTogRWZmZWN0LkVmZmVjdDx2b2lkLCBHcmVtbGluQ29ubmVjdGlvbkVycm9yIHwgR3JlbWxpblF1ZXJ5RXJyb3I+OwotICAgIHJlYWRvbmx5IGV4ZWN1dGVRdWVyeTogKAotICAgICAgcXVlcnk6IHN0cmluZwotICAgICkgPT4gRWZmZWN0LkVmZmVjdDxHcmVtbGluUXVlcnlSZXN1bHQsIEdyZW1saW5RdWVyeUVycm9yIHwgR3JlbWxpbkNvbm5lY3Rpb25FcnJvciB8IFBhcnNlRXJyb3I+OwotICAgIHJlYWRvbmx5IGhlYWx0aENoZWNrOiBFZmZlY3QuRWZmZWN0PHsgaGVhbHRoeTogYm9vbGVhbjsgZGV0YWlsczogc3RyaW5nIH0sIG5ldmVyPjsKLSAgfQotPigpIHt9Ci0KLS8qKgotICogQ3JlYXRlcyB0aGUgR3JlbWxpbiBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHdpdGggZGVwZW5kZW5jeSBpbmplY3Rpb24uCi0gKgotICogQHJldHVybnMgRWZmZWN0IHByb3ZpZGluZyB0aGUgY29tcGxldGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbgotICoKLSAqIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIG1hbmFnZXM6Ci0gKiAtIENvbm5lY3Rpb24gc3RhdGUgdGhyb3VnaCB0aGUgR3JlbWxpbkNsaWVudCBzZXJ2aWNlCi0gKiAtIFNjaGVtYSBjYWNoZSB3aXRoIGF1dG9tYXRpYyBnZW5lcmF0aW9uIGFuZCByZWZyZXNoIGNhcGFiaWxpdGllcwotICogLSBRdWVyeSBleGVjdXRpb24gd2l0aCByZXN1bHQgdHJhbnNmb3JtYXRpb24gYW5kIHZhbGlkYXRpb24KLSAqIC0gSGVhbHRoIG1vbml0b3JpbmcgYW5kIHN0YXR1cyByZXBvcnRpbmcKLSAqLwotY29uc3QgbWFrZUdyZW1saW5TZXJ2aWNlID0gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgewotICBjb25zdCBncmVtbGluQ2xpZW50ID0geWllbGQqIEdyZW1saW5DbGllbnQ7Ci0gIGNvbnN0IHNjaGVtYVNlcnZpY2UgPSB5aWVsZCogU2NoZW1hU2VydmljZTsKLQotICAvKioKLSAgICogRXhlY3V0ZXMgYSByYXcgR3JlbWxpbiBxdWVyeSBhZ2FpbnN0IHRoZSBjbGllbnQuCi0gICAqCi0gICAqIEBwYXJhbSBxdWVyeSAtIEdyZW1saW4gdHJhdmVyc2FsIHF1ZXJ5IHN0cmluZwotICAgKiBAcGFyYW0gY2xpZW50IC0gR3JlbWxpbiBjbGllbnQgaW5zdGFuY2UKLSAgICogQHJldHVybnMgRWZmZWN0IHdpdGggcXVlcnkgcmVzdWx0cyBvciBleGVjdXRpb24gZXJyb3IKLSAgICovCi0gIGNvbnN0IGV4ZWN1dGVSYXdRdWVyeSA9ICgKLSAgICBxdWVyeTogc3RyaW5nLAotICAgIGNsaWVudDogR3JlbWxpbkNsaWVudFR5cGUKLSAgKTogRWZmZWN0LkVmZmVjdDx1bmtub3duLCBHcmVtbGluUXVlcnlFcnJvcj4gPT4KLSAgICBwaXBlKAotICAgICAgRWZmZWN0LnRyeVByb21pc2UoKCkgPT4gY2xpZW50LnN1Ym1pdChxdWVyeSkpLAotICAgICAgRWZmZWN0Lm1hcEVycm9yKChlcnJvcjogdW5rbm93bikgPT4gRXJyb3JzLnF1ZXJ5KCdRdWVyeSBleGVjdXRpb24gZmFpbGVkJywgcXVlcnksIGVycm9yKSkKLSAgICApOwotCi0gIC8qKgotICAgKiBQcm9jZXNzZXMgR3JlbWxpbiBSZXN1bHRTZXQgaW50byBzdGFuZGFyZCBhcnJheSBmb3JtYXQuCi0gICAqCi0gICAqIEBwYXJhbSByZXN1bHRTZXQgLSBSYXcgcmVzdWx0IGZyb20gR3JlbWxpbiBjbGllbnQKLSAgICogQHJldHVybnMgQXJyYXkgb2YgcmVzdWx0IGl0ZW1zCi0gICAqLwotICBjb25zdCBwcm9jZXNzUmVzdWx0U2V0ID0gKHJlc3VsdFNldDogdW5rbm93bik6IHVua25vd25bXSA9PiB7Ci0gICAgaWYgKHJlc3VsdFNldCAmJiB0eXBlb2YgcmVzdWx0U2V0ID09PSAnb2JqZWN0JyAmJiAnX2l0ZW1zJyBpbiByZXN1bHRTZXQpIHsKLSAgICAgIHJldHVybiAocmVzdWx0U2V0IGFzIHVua25vd24gYXMgR3JlbWxpblJlc3VsdFNldCkudG9BcnJheSgpOwotICAgIH0KLSAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRTZXQpKSB7Ci0gICAgICByZXR1cm4gcmVzdWx0U2V0OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0U2V0ICE9PSB1bmRlZmluZWQgPyBbcmVzdWx0U2V0XSA6IFtdOwotICB9OwotCi0gIC8qKgotICAgKiBUcmFuc2Zvcm1zIHJhdyByZXN1bHQgc2V0IGludG8gcGFyc2VkIEdyZW1saW5RdWVyeVJlc3VsdCBmb3JtYXQuCi0gICAqCi0gICAqIEBwYXJhbSBxdWVyeSAtIE9yaWdpbmFsIHF1ZXJ5IHN0cmluZyBmb3IgZXJyb3IgY29udGV4dAotICAgKiBAcGFyYW0gcmVzdWx0U2V0IC0gUmF3IHJlc3VsdCBzZXQgZnJvbSBHcmVtbGluCi0gICAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIHBhcnNlZCByZXN1bHRzIGFuZCBtZXRhZGF0YQotICAgKi8KLSAgY29uc3QgdHJhbnNmb3JtR3JlbWxpblJlc3VsdCA9ICgKLSAgICBxdWVyeTogc3RyaW5nLAotICAgIHJlc3VsdFNldDogdW5rbm93bgotICApOiBFZmZlY3QuRWZmZWN0PHsgcmVzdWx0czogdW5rbm93bltdOyBtZXNzYWdlOiBzdHJpbmcgfSwgUGFyc2VFcnJvcj4gPT4KLSAgICBwaXBlKAotICAgICAgRWZmZWN0LnN5bmMoKCkgPT4gcHJvY2Vzc1Jlc3VsdFNldChyZXN1bHRTZXQpKSwKLSAgICAgIEVmZmVjdC5mbGF0TWFwKGRhdGFBcnJheSA9PiBwYXJzZUdyZW1saW5SZXN1bHRzV2l0aE1ldGFkYXRhKGRhdGFBcnJheSkpLAotICAgICAgRWZmZWN0Lm1hcChwYXJzZWQgPT4gKHsKLSAgICAgICAgcmVzdWx0czogcGFyc2VkLnJlc3VsdHMsCi0gICAgICAgIG1lc3NhZ2U6ICdRdWVyeSBleGVjdXRlZCBzdWNjZXNzZnVsbHknLAotICAgICAgfSkpLAotICAgICAgRWZmZWN0Lm1hcEVycm9yKGVycm9yID0+IEVycm9ycy5wYXJzZSgnUmVzdWx0IHBhcnNpbmcgZmFpbGVkJywgcXVlcnksIGVycm9yKSkKLSAgICApOwotCi0gIC8qKgotICAgKiBWYWxpZGF0ZXMgcXVlcnkgcmVzdWx0IGFnYWluc3QgdGhlIEdyZW1saW5RdWVyeVJlc3VsdCBzY2hlbWEuCi0gICAqCi0gICAqIEBwYXJhbSBxdWVyeSAtIE9yaWdpbmFsIHF1ZXJ5IHN0cmluZyBmb3IgZXJyb3IgY29udGV4dAotICAgKiBAcGFyYW0gcmVzdWx0IC0gUGFyc2VkIHJlc3VsdCBvYmplY3QKLSAgICogQHJldHVybnMgRWZmZWN0IHdpdGggdmFsaWRhdGVkIEdyZW1saW5RdWVyeVJlc3VsdAotICAgKi8KLSAgY29uc3QgdmFsaWRhdGVRdWVyeVJlc3VsdCA9ICgKLSAgICBxdWVyeTogc3RyaW5nLAotICAgIHJlc3VsdDogdW5rbm93bgotICApOiBFZmZlY3QuRWZmZWN0PEdyZW1saW5RdWVyeVJlc3VsdCwgUGFyc2VFcnJvcj4gPT4KLSAgICBwaXBlKAotICAgICAgRWZmZWN0LnRyeSgoKSA9PiBHcmVtbGluUXVlcnlSZXN1bHRTY2hlbWEucGFyc2UocmVzdWx0KSksCi0gICAgICBFZmZlY3QubWFwRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiBFcnJvcnMucGFyc2UoJ1Jlc3VsdCB2YWxpZGF0aW9uIGZhaWxlZCcsIHF1ZXJ5LCBlcnJvcikpCi0gICAgKTsKLQotICAvKioKLSAgICogRXhlY3V0ZXMgYSBHcmVtbGluIHF1ZXJ5IHdpdGggY29tcHJlaGVuc2l2ZSBlcnJvciBoYW5kbGluZy4KLSAgICoKLSAgICogQHBhcmFtIHF1ZXJ5IC0gR3JlbWxpbiB0cmF2ZXJzYWwgcXVlcnkgc3RyaW5nCi0gICAqIEByZXR1cm5zIEVmZmVjdCB3aXRoIHBhcnNlZCBhbmQgdmFsaWRhdGVkIHF1ZXJ5IHJlc3VsdHMKLSAgICovCi0gIGNvbnN0IGV4ZWN1dGVRdWVyeSA9ICgKLSAgICBxdWVyeTogc3RyaW5nCi0gICk6IEVmZmVjdC5FZmZlY3Q8R3JlbWxpblF1ZXJ5UmVzdWx0LCBHcmVtbGluUXVlcnlFcnJvciB8IEdyZW1saW5Db25uZWN0aW9uRXJyb3IgfCBQYXJzZUVycm9yPiA9PgotICAgIHBpcGUoCi0gICAgICBFZmZlY3QubG9nRGVidWcoYEV4ZWN1dGluZyBHcmVtbGluIHF1ZXJ5OiAke3F1ZXJ5fWApLAotICAgICAgRWZmZWN0LmFuZFRoZW4oKCkgPT4gZXhlY3V0ZVJhd1F1ZXJ5KHF1ZXJ5LCBncmVtbGluQ2xpZW50LmNsaWVudCkpLAotICAgICAgRWZmZWN0LmZpbHRlck9yRmFpbChpc0dyZW1saW5SZXN1bHQsIHJlc3VsdFNldCA9PgotICAgICAgICBFcnJvcnMucXVlcnkoJ0ludmFsaWQgcmVzdWx0IGZvcm1hdCByZWNlaXZlZCcsIHF1ZXJ5LCByZXN1bHRTZXQpCi0gICAgICApLAotICAgICAgRWZmZWN0LmFuZFRoZW4ocmVzdWx0U2V0ID0+IHRyYW5zZm9ybUdyZW1saW5SZXN1bHQocXVlcnksIHJlc3VsdFNldCkpLAotICAgICAgRWZmZWN0LmFuZFRoZW4ocGFyc2VkUmVzdWx0cyA9PiB2YWxpZGF0ZVF1ZXJ5UmVzdWx0KHF1ZXJ5LCBwYXJzZWRSZXN1bHRzKSkKLSAgICApOwotCi0gIGNvbnN0IGdldFN0YXR1cyA9IEVmZmVjdC5zdWNjZWVkKHsgc3RhdHVzOiAnY29ubmVjdGVkJyBhcyBjb25zdCB9KTsKLQotICBjb25zdCBoZWFsdGhDaGVjayA9IEVmZmVjdC5zdWNjZWVkKHsKLSAgICBoZWFsdGh5OiB0cnVlLAotICAgIGRldGFpbHM6ICdDb25uZWN0ZWQnLAotICB9KTsKLQotICByZXR1cm4gewotICAgIGdldFN0YXR1cywKLSAgICBnZXRTY2hlbWE6IHNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hLAotICAgIGdldENhY2hlZFNjaGVtYTogc2NoZW1hU2VydmljZS5wZWVrU2NoZW1hLAotICAgIHJlZnJlc2hTY2hlbWFDYWNoZTogc2NoZW1hU2VydmljZS5yZWZyZXNoU2NoZW1hLAotICAgIGV4ZWN1dGVRdWVyeSwKLSAgICBoZWFsdGhDaGVjaywKLSAgfSBhcyBjb25zdDsKLX0pOwotCi0vKioKLSAqIENyZWF0ZXMgYSBsYXllciBwcm92aWRpbmcgdGhlIEdyZW1saW4gc2VydmljZSBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBUaGlzIGxheWVyIGRlcGVuZHMgb24gdGhlIGBHcmVtbGluQ2xpZW50YCBzZXJ2aWNlLCB3aGljaCBpcyBleHBlY3RlZAotICogdG8gYmUgcHJvdmlkZWQgZWxzZXdoZXJlIGluIHRoZSBhcHBsaWNhdGlvbidzIGxheWVyIGNvbXBvc2l0aW9uLgotICovCi1leHBvcnQgY29uc3QgR3JlbWxpblNlcnZpY2VMaXZlID0gTGF5ZXIuZWZmZWN0KEdyZW1saW5TZXJ2aWNlLCBtYWtlR3JlbWxpblNlcnZpY2UpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi90eXBlcy50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2dyZW1saW4vdHlwZXMudHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YTFjMGUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvZ3JlbWxpbi90eXBlcy50cworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBTaGFyZWQgdHlwZXMgYW5kIGludGVyZmFjZXMgZm9yIEdyZW1saW4gc2VydmljZSBtb2R1bGVzCi0gKi8KLQotaW1wb3J0IHR5cGUgeyBkcml2ZXIsIHByb2Nlc3MgfSBmcm9tICdncmVtbGluJzsKLWltcG9ydCB0eXBlIHsgR3JhcGhTY2hlbWEgfSBmcm9tICcuL21vZGVscy9pbmRleC5qcyc7Ci0KLWV4cG9ydCB0eXBlIHsgR3JhcGhTY2hlbWEgfTsKLQotZXhwb3J0IHR5cGUgR3JlbWxpbkNsaWVudFR5cGUgPSBkcml2ZXIuQ2xpZW50OwotZXhwb3J0IHR5cGUgR3JlbWxpblJlc3VsdFNldCA9IGRyaXZlci5SZXN1bHRTZXQ7Ci1leHBvcnQgdHlwZSBHcmVtbGluQ29ubmVjdGlvbiA9IGRyaXZlci5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uOwotZXhwb3J0IHR5cGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgPSBwcm9jZXNzLkdyYXBoVHJhdmVyc2FsU291cmNlOwotCi0vKioKLSAqIEludGVybmFsIGNvbm5lY3Rpb24gc3RhdGUgLSByZXByZXNlbnRzIGEgZnVsbHkgaW5pdGlhbGl6ZWQgY29ubmVjdGlvbgotICovCi1leHBvcnQgaW50ZXJmYWNlIENvbm5lY3Rpb25TdGF0ZSB7Ci0gIHJlYWRvbmx5IGNsaWVudDogR3JlbWxpbkNsaWVudFR5cGU7Ci0gIHJlYWRvbmx5IGNvbm5lY3Rpb246IEdyZW1saW5Db25uZWN0aW9uOwotICByZWFkb25seSBnOiBHcmFwaFRyYXZlcnNhbFNvdXJjZTsKLSAgcmVhZG9ubHkgbGFzdFVzZWQ6IG51bWJlcjsKLX0KLQotLyoqCi0gKiBDb25maWd1cmF0aW9uIGZvciBzY2hlbWEgZ2VuZXJhdGlvbgotICovCi1leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUNvbmZpZyB7Ci0gIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGJvb2xlYW47Ci0gIG1heEVudW1WYWx1ZXM6IG51bWJlcjsKLSAgaW5jbHVkZUNvdW50czogYm9vbGVhbjsKLSAgZW51bUNhcmRpbmFsaXR5VGhyZXNob2xkOiBudW1iZXI7Ci0gIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBzdHJpbmdbXTsKLSAgdGltZW91dE1zPzogbnVtYmVyOwotICBiYXRjaFNpemU/OiBudW1iZXI7Ci19Ci0KLS8qKgotICogU2NoZW1hIGNhY2hlIGVudHJ5Ci0gKi8KLWV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQ2FjaGVFbnRyeSB7Ci0gIHNjaGVtYTogR3JhcGhTY2hlbWE7Ci0gIHRpbWVzdGFtcDogbnVtYmVyOwotfQotCi0vKioKLSAqIEdyZW1saW4gc2VydmljZSBzdGF0dXMgaW5mb3JtYXRpb24KLSAqLwotZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlU3RhdHVzIHsKLSAgLyoqIE92ZXJhbGwgY29ubmVjdGlvbiBzdGF0dXMgKi8KLSAgc3RhdHVzOiAnY29ubmVjdGVkJyB8ICdkaXNjb25uZWN0ZWQnIHwgJ2Vycm9yJzsKLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2hhbmRsZXJzL3Jlc291cmNlcy50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2hhbmRsZXJzL3Jlc291cmNlcy50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIwZjhmNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9oYW5kbGVycy9yZXNvdXJjZXMudHMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0vKioKLSAqIEBmaWxlb3ZlcnZpZXcgTUNQIHJlc291cmNlIGhhbmRsZXJzIGZvciBncmFwaCBkYXRhYmFzZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBQcm92aWRlcyBNQ1AgcmVzb3VyY2VzIHRoYXQgZXhwb3NlIHJlYWwtdGltZSBncmFwaCBkYXRhYmFzZSBzdGF0dXMgYW5kIHNjaGVtYQotICogaW5mb3JtYXRpb24uIFJlc291cmNlcyBhcmUgYXV0b21hdGljYWxseSB1cGRhdGVkIGFuZCBjYW4gYmUgc3Vic2NyaWJlZCB0byBieQotICogTUNQIGNsaWVudHMgZm9yIGxpdmUgbW9uaXRvcmluZy4KLSAqLwotCi1pbXBvcnQgeyBFZmZlY3QsIHBpcGUsIFJ1bnRpbWUgfSBmcm9tICdlZmZlY3QnOwotaW1wb3J0IHR5cGUgeyBNY3BTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9tY3AuanMnOwotaW1wb3J0IHsgUkVTT1VSQ0VfVVJJUywgTUlNRV9UWVBFUyB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7Ci1pbXBvcnQgeyBFUlJPUl9QUkVGSVhFUyB9IGZyb20gJy4uL2Vycm9ycy5qcyc7Ci1pbXBvcnQgeyBHcmVtbGluU2VydmljZSB9IGZyb20gJy4uL2dyZW1saW4vc2VydmljZS5qcyc7Ci0KLS8qKgotICogUmVnaXN0ZXJzIE1DUCByZXNvdXJjZSBoYW5kbGVycyB3aXRoIHRoZSBzZXJ2ZXIuCi0gKgotICogQHBhcmFtIHNlcnZlciAtIE1DUCBzZXJ2ZXIgaW5zdGFuY2UKLSAqIEBwYXJhbSBydW50aW1lIC0gRWZmZWN0IHJ1bnRpbWUgd2l0aCBHcmVtbGluIHNlcnZpY2UKLSAqCi0gKiBSZWdpc3RlcnMgcmVzb3VyY2VzIGZvcjoKLSAqIC0gR3JhcGggY29ubmVjdGlvbiBzdGF0dXMgbW9uaXRvcmluZwotICogLSBMaXZlIHNjaGVtYSBpbmZvcm1hdGlvbiBhY2Nlc3MKLSAqLwotZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRWZmZWN0UmVzb3VyY2VIYW5kbGVycygKLSAgc2VydmVyOiBNY3BTZXJ2ZXIsCi0gIHJ1bnRpbWU6IFJ1bnRpbWUuUnVudGltZTxHcmVtbGluU2VydmljZT4KLSk6IHZvaWQgewotICAvLyBSZWdpc3RlciBzdGF0dXMgcmVzb3VyY2UgdXNpbmcgdGhlIHJlY29tbWVuZGVkIHJlZ2lzdGVyUmVzb3VyY2UgbWV0aG9kCi0gIHNlcnZlci5yZWdpc3RlclJlc291cmNlKAotICAgICdzdGF0dXMnLAotICAgIFJFU09VUkNFX1VSSVMuU1RBVFVTLAotICAgIHsKLSAgICAgIHRpdGxlOiAnR3JlbWxpbiBHcmFwaCBTdGF0dXMnLAotICAgICAgZGVzY3JpcHRpb246ICdSZWFsLXRpbWUgY29ubmVjdGlvbiBzdGF0dXMgb2YgdGhlIEdyZW1saW4gZ3JhcGggZGF0YWJhc2UnLAotICAgICAgbWltZVR5cGU6IE1JTUVfVFlQRVMuVEVYVF9QTEFJTiwKLSAgICB9LAotICAgICgpID0+Ci0gICAgICBFZmZlY3QucnVuUHJvbWlzZSgKLSAgICAgICAgcGlwZSgKLSAgICAgICAgICBHcmVtbGluU2VydmljZSwKLSAgICAgICAgICBFZmZlY3QuYW5kVGhlbihzZXJ2aWNlID0+IHNlcnZpY2UuZ2V0U3RhdHVzKSwKLSAgICAgICAgICBFZmZlY3QubWFwKHN0YXR1c09iaiA9PiBzdGF0dXNPYmouc3RhdHVzKSwKLSAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoZXJyb3IgPT4gRWZmZWN0LnN1Y2NlZWQoYCR7RVJST1JfUFJFRklYRVMuQ09OTkVDVElPTn06ICR7ZXJyb3J9YCkpLAotICAgICAgICAgIEVmZmVjdC5wcm92aWRlKHJ1bnRpbWUpCi0gICAgICAgICkKLSAgICAgICkudGhlbihyZXN1bHQgPT4gKHsKLSAgICAgICAgY29udGVudHM6IFsKLSAgICAgICAgICB7Ci0gICAgICAgICAgICB1cmk6IFJFU09VUkNFX1VSSVMuU1RBVFVTLAotICAgICAgICAgICAgbWltZVR5cGU6IE1JTUVfVFlQRVMuVEVYVF9QTEFJTiwKLSAgICAgICAgICAgIHRleHQ6IHJlc3VsdCwKLSAgICAgICAgICB9LAotICAgICAgICBdLAotICAgICAgfSkpCi0gICk7Ci0KLSAgLy8gUmVnaXN0ZXIgc2NoZW1hIHJlc291cmNlIHVzaW5nIHRoZSByZWNvbW1lbmRlZCByZWdpc3RlclJlc291cmNlIG1ldGhvZAotICBzZXJ2ZXIucmVnaXN0ZXJSZXNvdXJjZSgKLSAgICAnc2NoZW1hJywKLSAgICBSRVNPVVJDRV9VUklTLlNDSEVNQSwKLSAgICB7Ci0gICAgICB0aXRsZTogJ0dyZW1saW4gR3JhcGggU2NoZW1hJywKLSAgICAgIGRlc2NyaXB0aW9uOgotICAgICAgICAnQ29tcGxldGUgc2NoZW1hIG9mIHRoZSBncmFwaCBpbmNsdWRpbmcgdmVydGV4IGxhYmVscywgZWRnZSBsYWJlbHMsIGFuZCByZWxhdGlvbnNoaXAgcGF0dGVybnMnLAotICAgICAgbWltZVR5cGU6IE1JTUVfVFlQRVMuQVBQTElDQVRJT05fSlNPTiwKLSAgICB9LAotICAgICgpID0+Ci0gICAgICBFZmZlY3QucnVuUHJvbWlzZSgKLSAgICAgICAgcGlwZSgKLSAgICAgICAgICBHcmVtbGluU2VydmljZSwKLSAgICAgICAgICBFZmZlY3QuYW5kVGhlbihzZXJ2aWNlID0+IHNlcnZpY2UuZ2V0U2NoZW1hKSwKLSAgICAgICAgICBFZmZlY3QuY2F0Y2hBbGwoZXJyb3IgPT4gRWZmZWN0LnN1Y2NlZWQoeyBlcnJvcjogU3RyaW5nKGVycm9yKSB9KSksCi0gICAgICAgICAgRWZmZWN0LnByb3ZpZGUocnVudGltZSkKLSAgICAgICAgKQotICAgICAgKS50aGVuKHJlc3VsdCA9PiAoewotICAgICAgICBjb250ZW50czogWwotICAgICAgICAgIHsKLSAgICAgICAgICAgIHVyaTogUkVTT1VSQ0VfVVJJUy5TQ0hFTUEsCi0gICAgICAgICAgICBtaW1lVHlwZTogTUlNRV9UWVBFUy5BUFBMSUNBVElPTl9KU09OLAotICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkocmVzdWx0LCBudWxsLCAyKSwKLSAgICAgICAgICB9LAotICAgICAgICBdLAotICAgICAgfSkpCi0gICk7Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3NyYy9oYW5kbGVycy90b29scy50cyBiL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2hhbmRsZXJzL3Rvb2xzLnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTBkMjk2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL2hhbmRsZXJzL3Rvb2xzLnRzCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IE1DUCB0b29sIGhhbmRsZXJzIGZvciBHcmVtbGluIGdyYXBoIGRhdGFiYXNlIG9wZXJhdGlvbnMuCi0gKgotICogUmVnaXN0ZXJzIE1DUCB0b29scyB0aGF0IGV4cG9zZSBHcmVtbGluIGZ1bmN0aW9uYWxpdHkgaW5jbHVkaW5nIHN0YXR1cyBjaGVja3MsCi0gKiBzY2hlbWEgaW50cm9zcGVjdGlvbiwgYW5kIHF1ZXJ5IGV4ZWN1dGlvbi4gVXNlcyBFZmZlY3QtYmFzZWQgZGVwZW5kZW5jeSBpbmplY3Rpb24KLSAqIGZvciBzZXJ2aWNlIGFjY2Vzcy4KLSAqLwotCi1pbXBvcnQgeyBFZmZlY3QsIFJ1bnRpbWUsIHBpcGUgfSBmcm9tICdlZmZlY3QnOwotaW1wb3J0IHR5cGUgeyBNY3BTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9tY3AuanMnOwotaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7Ci1pbXBvcnQgeyBUT09MX05BTUVTIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJzsKLWltcG9ydCB7IEdyZW1saW5TZXJ2aWNlIH0gZnJvbSAnLi4vZ3JlbWxpbi9zZXJ2aWNlLmpzJzsKLWltcG9ydCB7Ci0gIGNyZWF0ZVRvb2xFZmZlY3QsCi0gIGNyZWF0ZVN0cmluZ1Rvb2xFZmZlY3QsCi0gIGNyZWF0ZVF1ZXJ5RWZmZWN0LAotICBjcmVhdGVTdWNjZXNzUmVzcG9uc2UsCi19IGZyb20gJy4vdG9vbC1wYXR0ZXJucy5qcyc7Ci1pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJ2dyZW1saW50JzsKLQotLyoqCi0gKiBJbnB1dCB2YWxpZGF0aW9uIHNjaGVtYXMgZm9yIHRvb2wgcGFyYW1ldGVycy4KLSAqLwotCi0vLyBQYXJhbWV0ZXJsZXNzIHRvb2xzOiBzdHJpY3QgZW1wdHkgb2JqZWN0Ci1jb25zdCBlbXB0eUlucHV0U2NoZW1hID0gei5vYmplY3Qoe30pLnN0cmljdCgpOwotCi0vLyBSdW4gR3JlbWxpbiBRdWVyeSBpbnB1dAotY29uc3QgcnVuUXVlcnlJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHsKLSAgcXVlcnk6IHoKLSAgICAuc3RyaW5nKCkKLSAgICAubWluKDEsICdUaGUgR3JlbWxpbiBxdWVyeSBjYW5ub3QgYmUgZW1wdHknKQotICAgIC5tYXgoMTAwMDAsICdUaGUgR3JlbWxpbiBxdWVyeSBjYW5ub3QgZXhjZWVkIDEwLDAwMCBjaGFyYWN0ZXJzJykKLSAgICAucmVmaW5lKHEgPT4gcS50cmltKCkuc3RhcnRzV2l0aCgnZy4nKSwgewotICAgICAgbWVzc2FnZTogJ1RoZSBHcmVtbGluIHF1ZXJ5IG11c3Qgc3RhcnQgd2l0aCAiZy4iJywKLSAgICB9KQotICAgIC5kZXNjcmliZSgnVGhlIEdyZW1saW4gcXVlcnkgdG8gZXhlY3V0ZScpLAotfSk7Ci0KLS8vIEZvcm1hdCBHcmVtbGluIFF1ZXJ5IGlucHV0IC0gYWxsb3cgYW55IHN0cmluZyBhbmQgZXhwb3NlIGdyZW1saW50IG9wdGlvbnMgYXMgdG9wLWxldmVsIG9wdGlvbmFsIGZpZWxkcwotY29uc3QgZm9ybWF0UXVlcnlJbnB1dFNjaGVtYSA9IHoKLSAgLm9iamVjdCh7Ci0gICAgcXVlcnk6IHouc3RyaW5nKCkuZGVzY3JpYmUoJ1RoZSBHcmVtbGluIHF1ZXJ5IChvciBhbnkgc3RyaW5nKSB0byBmb3JtYXQnKSwKLSAgICAvLyBFeHBvc2UgZ3JlbWxpbnQgb3B0aW9ucyBhcyBvcHRpb25hbCB0b3AtbGV2ZWwgZmllbGRzCi0gICAgaW5kZW50YXRpb246IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKS5vcHRpb25hbCgpLAotICAgIG1heExpbmVMZW5ndGg6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5vcHRpb25hbCgpLAotICAgIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrczogei5ib29sZWFuKCkub3B0aW9uYWwoKSwKLSAgfSkKLSAgLnN0cmljdCgpOwotCi0vKioKLSAqIFJlZ2lzdGVycyBhbGwgTUNQIHRvb2wgaGFuZGxlcnMgd2l0aCB0aGUgc2VydmVyLgotICoKLSAqIEBwYXJhbSBzZXJ2ZXIgLSBNQ1Agc2VydmVyIGluc3RhbmNlCi0gKiBAcGFyYW0gcnVudGltZSAtIEVmZmVjdCBydW50aW1lIHdpdGggR3JlbWxpbiBzZXJ2aWNlCi0gKgotICogUmVnaXN0ZXJzIHRvb2xzIGZvcjoKLSAqIC0gR3JhcGggc3RhdHVzIG1vbml0b3JpbmcKLSAqIC0gU2NoZW1hIGludHJvc3BlY3Rpb24gYW5kIGNhY2hpbmcKLSAqIC0gUXVlcnkgZXhlY3V0aW9uCi0gKi8KLWV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckVmZmVjdFRvb2xIYW5kbGVycygKLSAgc2VydmVyOiBNY3BTZXJ2ZXIsCi0gIHJ1bnRpbWU6IFJ1bnRpbWUuUnVudGltZTxHcmVtbGluU2VydmljZT4KLSk6IHZvaWQgewotICAvLyBHZXQgR3JhcGggU3RhdHVzCi0gIHNlcnZlci5yZWdpc3RlclRvb2woCi0gICAgVE9PTF9OQU1FUy5HRVRfR1JBUEhfU1RBVFVTLAotICAgIHsKLSAgICAgIHRpdGxlOiAnR2V0IEdyYXBoIFN0YXR1cycsCi0gICAgICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgY29ubmVjdGlvbiBzdGF0dXMgb2YgdGhlIEdyZW1saW4gZ3JhcGggZGF0YWJhc2UnLAotICAgICAgaW5wdXRTY2hlbWE6IGVtcHR5SW5wdXRTY2hlbWEuc2hhcGUsCi0gICAgfSwKLSAgICAoKSA9PgotICAgICAgRWZmZWN0LnJ1blByb21pc2UoCi0gICAgICAgIHBpcGUoCi0gICAgICAgICAgY3JlYXRlU3RyaW5nVG9vbEVmZmVjdCgKLSAgICAgICAgICAgIEVmZmVjdC5hbmRUaGVuKEdyZW1saW5TZXJ2aWNlLCBzZXJ2aWNlID0+Ci0gICAgICAgICAgICAgIEVmZmVjdC5tYXAoc2VydmljZS5nZXRTdGF0dXMsIHN0YXR1c09iaiA9PiBzdGF0dXNPYmouc3RhdHVzKQotICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICdDb25uZWN0aW9uIHN0YXR1cyBjaGVjayBmYWlsZWQnCi0gICAgICAgICAgKSwKLSAgICAgICAgICBFZmZlY3QucHJvdmlkZShydW50aW1lKQotICAgICAgICApCi0gICAgICApCi0gICk7Ci0KLSAgLy8gR2V0IEdyYXBoIFNjaGVtYQotICBzZXJ2ZXIucmVnaXN0ZXJUb29sKAotICAgIFRPT0xfTkFNRVMuR0VUX0dSQVBIX1NDSEVNQSwKLSAgICB7Ci0gICAgICB0aXRsZTogJ0dldCBHcmFwaCBTY2hlbWEnLAotICAgICAgZGVzY3JpcHRpb246Ci0gICAgICAgICdHZXQgdGhlIGNvbXBsZXRlIHNjaGVtYSBvZiB0aGUgZ3JhcGggaW5jbHVkaW5nIHZlcnRleCBsYWJlbHMsIGVkZ2UgbGFiZWxzLCBhbmQgcmVsYXRpb25zaGlwIHBhdHRlcm5zJywKLSAgICAgIGlucHV0U2NoZW1hOiBlbXB0eUlucHV0U2NoZW1hLnNoYXBlLAotICAgIH0sCi0gICAgKCkgPT4KLSAgICAgIEVmZmVjdC5ydW5Qcm9taXNlKAotICAgICAgICBwaXBlKAotICAgICAgICAgIGNyZWF0ZVRvb2xFZmZlY3QoCi0gICAgICAgICAgICBFZmZlY3QuYW5kVGhlbihHcmVtbGluU2VydmljZSwgc2VydmljZSA9PiBzZXJ2aWNlLmdldFNjaGVtYSksCi0gICAgICAgICAgICAnU2NoZW1hIHJldHJpZXZhbCBmYWlsZWQnCi0gICAgICAgICAgKSwKLSAgICAgICAgICBFZmZlY3QucHJvdmlkZShydW50aW1lKQotICAgICAgICApCi0gICAgICApCi0gICk7Ci0KLSAgLy8gUmVmcmVzaCBTY2hlbWEgQ2FjaGUKLSAgc2VydmVyLnJlZ2lzdGVyVG9vbCgKLSAgICBUT09MX05BTUVTLlJFRlJFU0hfU0NIRU1BX0NBQ0hFLAotICAgIHsKLSAgICAgIHRpdGxlOiAnUmVmcmVzaCBTY2hlbWEgQ2FjaGUnLAotICAgICAgZGVzY3JpcHRpb246ICdGb3JjZSBhbiBpbW1lZGlhdGUgcmVmcmVzaCBvZiB0aGUgZ3JhcGggc2NoZW1hIGNhY2hlJywKLSAgICAgIGlucHV0U2NoZW1hOiBlbXB0eUlucHV0U2NoZW1hLnNoYXBlLAotICAgIH0sCi0gICAgKCkgPT4KLSAgICAgIEVmZmVjdC5ydW5Qcm9taXNlKAotICAgICAgICBwaXBlKAotICAgICAgICAgIGNyZWF0ZVN0cmluZ1Rvb2xFZmZlY3QoCi0gICAgICAgICAgICBFZmZlY3QuYW5kVGhlbihHcmVtbGluU2VydmljZSwgc2VydmljZSA9PgotICAgICAgICAgICAgICBFZmZlY3QubWFwKHNlcnZpY2UucmVmcmVzaFNjaGVtYUNhY2hlLCAoKSA9PiAnU2NoZW1hIGNhY2hlIHJlZnJlc2hlZCBzdWNjZXNzZnVsbHkuJykKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAnRmFpbGVkIHRvIHJlZnJlc2ggc2NoZW1hJwotICAgICAgICAgICksCi0gICAgICAgICAgRWZmZWN0LnByb3ZpZGUocnVudGltZSkKLSAgICAgICAgKQotICAgICAgKQotICApOwotCi0gIC8vIFJ1biBHcmVtbGluIFF1ZXJ5Ci0gIHNlcnZlci5yZWdpc3RlclRvb2woCi0gICAgVE9PTF9OQU1FUy5SVU5fR1JFTUxJTl9RVUVSWSwKLSAgICB7Ci0gICAgICB0aXRsZTogJ1J1biBHcmVtbGluIFF1ZXJ5JywKLSAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0ZSBhIEdyZW1saW4gdHJhdmVyc2FsIHF1ZXJ5IGFnYWluc3QgdGhlIGdyYXBoIGRhdGFiYXNlJywKLSAgICAgIGlucHV0U2NoZW1hOiBydW5RdWVyeUlucHV0U2NoZW1hLnNoYXBlLAotICAgIH0sCi0gICAgKGFyZ3M6IHVua25vd24pID0+IHsKLSAgICAgIGNvbnN0IHsgcXVlcnkgfSA9IHJ1blF1ZXJ5SW5wdXRTY2hlbWEucGFyc2UoYXJncyk7Ci0gICAgICByZXR1cm4gRWZmZWN0LnJ1blByb21pc2UocGlwZShjcmVhdGVRdWVyeUVmZmVjdChxdWVyeSksIEVmZmVjdC5wcm92aWRlKHJ1bnRpbWUpKSk7Ci0gICAgfQotICApOwotCi0gIC8vIEZvcm1hdCBHcmVtbGluIFF1ZXJ5ICh1c2VzIGxvY2FsIGdyZW1saW50KQotICBzZXJ2ZXIucmVnaXN0ZXJUb29sKAotICAgIFRPT0xfTkFNRVMuRk9STUFUX0dSRU1MSU5fUVVFUlksCi0gICAgewotICAgICAgdGl0bGU6ICdGb3JtYXQgR3JlbWxpbiBRdWVyeScsCi0gICAgICBkZXNjcmlwdGlvbjogJ0Zvcm1hdCBhIEdyZW1saW4gcXVlcnkgdXNpbmcgR3JlbWxpbnQgYW5kIHJldHVybiBhIHN0cnVjdHVyZWQgcmVzdWx0JywKLSAgICAgIGlucHV0U2NoZW1hOiBmb3JtYXRRdWVyeUlucHV0U2NoZW1hLnNoYXBlLAotICAgIH0sCi0gICAgKGFyZ3M6IHVua25vd24pID0+IHsKLSAgICAgIGNvbnN0IHBhcnNlZCA9IGZvcm1hdFF1ZXJ5SW5wdXRTY2hlbWEucGFyc2UoYXJncyk7Ci0gICAgICBjb25zdCB7IHF1ZXJ5LCBpbmRlbnRhdGlvbiwgbWF4TGluZUxlbmd0aCwgc2hvdWxkUGxhY2VEb3RzQWZ0ZXJMaW5lQnJlYWtzIH0gPSBwYXJzZWQ7Ci0KLSAgICAgIC8vIEJ1aWxkIG9wdGlvbnMgb25seSB3aXRoIGZpZWxkcyBwcm92aWRlZCAodW5kZWZpbmVkcyB3aWxsIGJlIGlnbm9yZWQgYnkgZ3JlbWxpbnQgZGVmYXVsdHMpCi0gICAgICBjb25zdCBvcHRpb25zID0KLSAgICAgICAgaW5kZW50YXRpb24gIT09IHVuZGVmaW5lZCB8fAotICAgICAgICBtYXhMaW5lTGVuZ3RoICE9PSB1bmRlZmluZWQgfHwKLSAgICAgICAgc2hvdWxkUGxhY2VEb3RzQWZ0ZXJMaW5lQnJlYWtzICE9PSB1bmRlZmluZWQKLSAgICAgICAgICA/IHsgaW5kZW50YXRpb24sIG1heExpbmVMZW5ndGgsIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrcyB9Ci0gICAgICAgICAgOiB1bmRlZmluZWQ7Ci0KLSAgICAgIGNvbnN0IGVmZmVjdCA9IEVmZmVjdC50cnkoKCkgPT4gZm9ybWF0UXVlcnkocXVlcnksIG9wdGlvbnMpKTsKLQotICAgICAgLy8gTWFwIHN1Y2Nlc3MgdG8gc3RydWN0dXJlZCBKU09OIGFuZCBlcnJvcnMgdG8gc3RydWN0dXJlZCBlcnJvciBvYmplY3QgKHN0aWxsIHJldHVybmVkIGFzIHN1Y2Nlc3MgcmVzcG9uc2UpCi0gICAgICBjb25zdCByZXNwb25zZUVmZmVjdCA9IHBpcGUoCi0gICAgICAgIGVmZmVjdCwKLSAgICAgICAgRWZmZWN0Lm1hcChmb3JtYXR0ZWQgPT4KLSAgICAgICAgICBjcmVhdGVTdWNjZXNzUmVzcG9uc2UoeyBzdWNjZXNzOiB0cnVlLCBmb3JtYXR0ZWRRdWVyeTogZm9ybWF0dGVkIH0pCi0gICAgICAgICksCi0gICAgICAgIEVmZmVjdC5jYXRjaEFsbChlcnJvciA9PgotICAgICAgICAgIEVmZmVjdC5zdWNjZWVkKAotICAgICAgICAgICAgY3JlYXRlU3VjY2Vzc1Jlc3BvbnNlKHsKLSAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsCi0gICAgICAgICAgICAgIGVycm9yOiB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZTogU3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIGNvbW1vbiBlcnJvciBmaWVsZHMgd2hlbiBwcmVzZW50IHRvIG1ha2UgaXQgc3RydWN0dXJlZAotICAgICAgICAgICAgICAgIG5hbWU6IChlcnJvciAmJiAoZXJyb3IgYXMgYW55KS5uYW1lKSB8fCB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgc3RhY2s6IChlcnJvciAmJiAoZXJyb3IgYXMgYW55KS5zdGFjaykgfHwgdW5kZWZpbmVkLAotICAgICAgICAgICAgICAgIGRldGFpbHM6IChlcnJvciAmJiAoZXJyb3IgYXMgYW55KS5kZXRhaWxzKSB8fCB1bmRlZmluZWQsCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICB9KQotICAgICAgICAgICkKLSAgICAgICAgKQotICAgICAgKTsKLQotICAgICAgcmV0dXJuIEVmZmVjdC5ydW5Qcm9taXNlKHBpcGUocmVzcG9uc2VFZmZlY3QsIEVmZmVjdC5wcm92aWRlKHJ1bnRpbWUpKSk7Ci0gICAgfQotICApOwotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvc2VydmVyLnRzIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9zcmMvc2VydmVyLnRzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2JmM2M4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvc3JjL3NlcnZlci50cworKysgL2Rldi9udWxsCkBAIC0xLDM3MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBub2RlCi0KLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBAZmlsZW92ZXJ2aWV3IE1DUCBzZXJ2ZXIgZm9yIEFwYWNoZSBUaW5rZXJQb3AgR3JlbWxpbiBncmFwaCBkYXRhYmFzZXMuCi0gKgotICogUHJvdmlkZXMgTUNQIChNb2RlbCBDb250ZXh0IFByb3RvY29sKSB0b29scyBhbmQgcmVzb3VyY2VzIGZvciBpbnRlcmFjdGluZyB3aXRoCi0gKiBHcmVtbGluLWNvbXBhdGlibGUgZ3JhcGggZGF0YWJhc2VzIGluY2x1ZGluZyBBcGFjaGUgVGlua2VyUG9wLCBBbWF6b24gTmVwdHVuZSwKLSAqIEF6dXJlIENvc21vcyBEQiwgYW5kIG90aGVycy4KLSAqCi0gKiBCdWlsdCB3aXRoIEVmZmVjdC10cyBmb3IgZnVuY3Rpb25hbCBjb21wb3NpdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuCi0gKi8KLQotaW1wb3J0IHsgQ29uZmlnUHJvdmlkZXIsIEVmZmVjdCwgTGF5ZXIsIHBpcGUsIExvZ0xldmVsLCBMb2dnZXIsIENvbnRleHQsIEZpYmVyIH0gZnJvbSAnZWZmZWN0JzsKLWltcG9ydCB7IFN0ZGlvU2VydmVyVHJhbnNwb3J0IH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RkaW8uanMnOwotaW1wb3J0IHsgTWNwU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvbWNwLmpzJzsKLQotaW1wb3J0IHsgQXBwQ29uZmlnLCB0eXBlIEFwcENvbmZpZ1R5cGUgfSBmcm9tICcuL2NvbmZpZy5qcyc7Ci1pbXBvcnQgeyBHcmVtbGluU2VydmljZSwgR3JlbWxpblNlcnZpY2VMaXZlIH0gZnJvbSAnLi9ncmVtbGluL3NlcnZpY2UuanMnOwotaW1wb3J0IHsgR3JlbWxpbkNsaWVudExpdmUgfSBmcm9tICcuL2dyZW1saW4vY29ubmVjdGlvbi5qcyc7Ci1pbXBvcnQgeyBTY2hlbWFTZXJ2aWNlTGl2ZSB9IGZyb20gJy4vZ3JlbWxpbi9zY2hlbWEuanMnOwotaW1wb3J0IHsgcmVnaXN0ZXJFZmZlY3RUb29sSGFuZGxlcnMgfSBmcm9tICcuL2hhbmRsZXJzL3Rvb2xzLmpzJzsKLWltcG9ydCB7IHJlZ2lzdGVyRWZmZWN0UmVzb3VyY2VIYW5kbGVycyB9IGZyb20gJy4vaGFuZGxlcnMvcmVzb3VyY2VzLmpzJzsKLWltcG9ydCB7IEVycm9ycyB9IGZyb20gJy4vZXJyb3JzLmpzJzsKLQotLyoqCi0gKiBTZXJ2aWNlIHRhZyBmb3IgdGhlIE1DUCBzZXJ2ZXIgaW5zdGFuY2UgdXNpbmcgRWZmZWN0IDMueCBDb250ZXh0LlRhZyBwYXR0ZXJuLgotICoKLSAqIFByb3ZpZGVzIHNlcnZlciBsaWZlY3ljbGUgbWFuYWdlbWVudCBpbmNsdWRpbmcgc3RhcnQvc3RvcCBvcGVyYXRpb25zLgotICovCi1jbGFzcyBNY3BTZXJ2ZXJTZXJ2aWNlIGV4dGVuZHMgQ29udGV4dC5UYWcoJ01jcFNlcnZlclNlcnZpY2UnKTwKLSAgTWNwU2VydmVyU2VydmljZSwKLSAgewotICAgIHJlYWRvbmx5IHNlcnZlcjogTWNwU2VydmVyOwotICAgIHJlYWRvbmx5IHN0YXJ0OiBFZmZlY3QuRWZmZWN0PHZvaWQsIEVycm9yPjsKLSAgICByZWFkb25seSBzdG9wOiBFZmZlY3QuRWZmZWN0PHZvaWQsIG5ldmVyPjsKLSAgfQotPigpIHt9Ci0KLS8qKgotICogQ3JlYXRlcyB0aGUgTUNQIHNlcnZlciBzZXJ2aWNlIGltcGxlbWVudGF0aW9uLgotICoKLSAqIEByZXR1cm5zIEVmZmVjdCB0aGF0IHByb3ZpZGVzIE1DUCBzZXJ2ZXIgd2l0aCByZWdpc3RlcmVkIGhhbmRsZXJzCi0gKgotICogU2lkZSBlZmZlY3RzOgotICogLSBDcmVhdGVzIE1DUCBzZXJ2ZXIgaW5zdGFuY2UKLSAqIC0gUmVnaXN0ZXJzIHRvb2wgYW5kIHJlc291cmNlIGhhbmRsZXJzCi0gKiAtIFNldHMgdXAgbWFuYWdlZCBydW50aW1lIGZvciBkZXBlbmRlbmN5IGluamVjdGlvbgotICogLSBDb25maWd1cmVzIGZpbmFsaXplcnMgZm9yIGNsZWFudXAKLSAqLwotY29uc3QgbWFrZU1jcFNlcnZlclNlcnZpY2UgPSBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gIGNvbnN0IGNvbmZpZyA9IHlpZWxkKiBBcHBDb25maWc7Ci0KLSAgLy8gQ3JlYXRlIE1DUCBzZXJ2ZXIgaW5zdGFuY2UKLSAgY29uc3Qgc2VydmVyID0gbmV3IE1jcFNlcnZlcih7Ci0gICAgbmFtZTogY29uZmlnLnNlcnZlci5uYW1lLAotICAgIHZlcnNpb246IGNvbmZpZy5zZXJ2ZXIudmVyc2lvbiwKLSAgfSk7Ci0KLSAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCfinIUgTUNQIFNlcnZlciBpbnN0YW5jZSBjcmVhdGVkJywgewotICAgIHNlcnZpY2U6IGNvbmZpZy5zZXJ2ZXIubmFtZSwKLSAgICBuYW1lOiBjb25maWcuc2VydmVyLm5hbWUsCi0gICAgdmVyc2lvbjogY29uZmlnLnNlcnZlci52ZXJzaW9uLAotICB9KTsKLQotICAvLyBDcmVhdGUgcnVudGltZSBmb3IgaGFuZGxlcnMgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0Ci0gIGNvbnN0IHJ1bnRpbWUgPSB5aWVsZCogRWZmZWN0LnJ1bnRpbWU8R3JlbWxpblNlcnZpY2U+KCk7Ci0KLSAgLy8gUmVnaXN0ZXIgaGFuZGxlcnMgd2l0aCBkZXBlbmRlbmN5IGluamVjdGlvbgotICByZWdpc3RlckVmZmVjdFRvb2xIYW5kbGVycyhzZXJ2ZXIsIHJ1bnRpbWUpOwotICByZWdpc3RlckVmZmVjdFJlc291cmNlSGFuZGxlcnMoc2VydmVyLCBydW50aW1lKTsKLQotICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ+KchSBIYW5kbGVycyByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseScsIHsKLSAgICBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUsCi0gIH0pOwotCi0gIHJldHVybiB7Ci0gICAgc2VydmVyLAotICAgIHN0YXJ0OiBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ/CflIwgQ3JlYXRpbmcgU1RESU8gdHJhbnNwb3J0Li4uJywgeyBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUgfSk7Ci0KLSAgICAgIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpOwotCi0gICAgICB5aWVsZCogRWZmZWN0LmxvZ0luZm8oJ/CflJcgQ29ubmVjdGluZyBzZXJ2ZXIgdG8gdHJhbnNwb3J0Li4uJywgewotICAgICAgICBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUsCi0gICAgICB9KTsKLQotICAgICAgeWllbGQqIHBpcGUoCi0gICAgICAgIEVmZmVjdC50cnlQcm9taXNlKCgpID0+IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCkpLAotICAgICAgICBFZmZlY3QubWFwRXJyb3IoZXJyb3IgPT4KLSAgICAgICAgICBFcnJvcnMuY29ubmVjdGlvbignU2VydmVyIGNvbm5lY3Rpb24gZmFpbGVkJywgewotICAgICAgICAgICAgZXJyb3JfdHlwZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLmNvbnN0cnVjdG9yLm5hbWUgOiB0eXBlb2YgZXJyb3IsCi0gICAgICAgICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksCi0gICAgICAgICAgfSkKLSAgICAgICAgKQotICAgICAgKTsKLQotICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCfinIUgR3JlbWxpbiBNQ1AgU2VydmVyIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5JywgewotICAgICAgICBzZXJ2aWNlOiBjb25maWcuc2VydmVyLm5hbWUsCi0gICAgICAgIHBpZDogcHJvY2Vzcy5waWQsCi0gICAgICAgIHJlYWR5OiB0cnVlLAotICAgICAgfSk7Ci0gICAgfSksCi0gICAgc3RvcDogRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgewotICAgICAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCfwn5uRIFN0b3BwaW5nIEdyZW1saW4gTUNQIFNlcnZlci4uLicsIHsgc2VydmljZTogY29uZmlnLnNlcnZlci5uYW1lIH0pOwotICAgICAgLy8gU2VydmVyIGNsZWFudXAgd291bGQgZ28gaGVyZSBpZiBuZWVkZWQKLSAgICB9KSwKLSAgfTsKLX0pOwotCi1jb25zdCBNY3BTZXJ2ZXJTZXJ2aWNlTGl2ZSA9IExheWVyLmVmZmVjdChNY3BTZXJ2ZXJTZXJ2aWNlLCBtYWtlTWNwU2VydmVyU2VydmljZSk7Ci0KLS8qKgotICogTGF5ZXIgY29tcG9zaXRpb24gcHJvdmlkaW5nIGFsbCBhcHBsaWNhdGlvbiBkZXBlbmRlbmNpZXMuCi0gKi8KLWNvbnN0IEdyZW1saW5MYXllciA9IExheWVyLnByb3ZpZGUoR3JlbWxpblNlcnZpY2VMaXZlLCBTY2hlbWFTZXJ2aWNlTGl2ZSk7Ci1jb25zdCBBcHBMYXllciA9IExheWVyLnByb3ZpZGUoCi0gIE1jcFNlcnZlclNlcnZpY2VMaXZlLAotICBMYXllci5wcm92aWRlKEdyZW1saW5MYXllciwgR3JlbWxpbkNsaWVudExpdmUpCi0pOwotCi0vKioKLSAqIE1haW4gYXBwbGljYXRpb24gRWZmZWN0LgotICoKLSAqIE9yY2hlc3RyYXRlcyBzZXJ2ZXIgc3RhcnR1cCwgY29uZmlndXJhdGlvbiBsb2FkaW5nLCBhbmQgZ3JhY2VmdWwgc2h1dGRvd24uCi0gKiBVc2VzIEVmZmVjdC5uZXZlciB0byBrZWVwIHRoZSBzZXJ2ZXIgcnVubmluZyBpbmRlZmluaXRlbHkuCi0gKi8KLWNvbnN0IHByb2dyYW0gPSBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7Ci0gIC8vIEdldCBjb25maWd1cmF0aW9uCi0gIGNvbnN0IGNvbmZpZyA9IHlpZWxkKiBBcHBDb25maWc7Ci0KLSAgeWllbGQqIEVmZmVjdC5sb2dJbmZvKCfwn5qAIFN0YXJ0aW5nIEFwYWNoZSBUaW5rZXJQb3AgR3JlbWxpbiBNQ1AgU2VydmVyLi4uJywgewotICAgIHNlcnZpY2U6IGNvbmZpZy5zZXJ2ZXIubmFtZSwKLSAgICB2ZXJzaW9uOiBjb25maWcuc2VydmVyLnZlcnNpb24sCi0gICAgZ3JlbWxpbkVuZHBvaW50OiBgJHtjb25maWcuZ3JlbWxpbi5ob3N0fToke2NvbmZpZy5ncmVtbGluLnBvcnR9YCwKLSAgICBsb2dMZXZlbDogY29uZmlnLmxvZ2dpbmcubGV2ZWwsCi0gICAgY29uZmlnOiB7Ci0gICAgICBzZXJ2ZXI6IHsKLSAgICAgICAgbmFtZTogY29uZmlnLnNlcnZlci5uYW1lLAotICAgICAgICB2ZXJzaW9uOiBjb25maWcuc2VydmVyLnZlcnNpb24sCi0gICAgICB9LAotICAgICAgZ3JlbWxpbjogewotICAgICAgICBob3N0OiBjb25maWcuZ3JlbWxpbi5ob3N0LAotICAgICAgICBwb3J0OiBjb25maWcuZ3JlbWxpbi5wb3J0LAotICAgICAgICB0cmF2ZXJzYWxTb3VyY2U6IGNvbmZpZy5ncmVtbGluLnRyYXZlcnNhbFNvdXJjZSwKLSAgICAgICAgdXNlU1NMOiBjb25maWcuZ3JlbWxpbi51c2VTU0wsCi0gICAgICAgIGlkbGVUaW1lb3V0OiBjb25maWcuZ3JlbWxpbi5pZGxlVGltZW91dCwKLSAgICAgICAgdXNlcm5hbWU6IGNvbmZpZy5ncmVtbGluLnVzZXJuYW1lID8/IG51bGwsCi0gICAgICAgIGhhc1Bhc3N3b3JkOiBCb29sZWFuKGNvbmZpZy5ncmVtbGluLnBhc3N3b3JkKSwKLSAgICAgIH0sCi0gICAgICBzY2hlbWE6IHsKLSAgICAgICAgZW51bURpc2NvdmVyeUVuYWJsZWQ6IGNvbmZpZy5zY2hlbWEuZW51bURpc2NvdmVyeUVuYWJsZWQsCi0gICAgICAgIGVudW1DYXJkaW5hbGl0eVRocmVzaG9sZDogY29uZmlnLnNjaGVtYS5lbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQsCi0gICAgICAgIGVudW1Qcm9wZXJ0eURlbnlMaXN0OiBjb25maWcuc2NoZW1hLmVudW1Qcm9wZXJ0eURlbnlMaXN0LAotICAgICAgICBpbmNsdWRlU2FtcGxlVmFsdWVzOiBjb25maWcuc2NoZW1hLmluY2x1ZGVTYW1wbGVWYWx1ZXMsCi0gICAgICAgIG1heEVudW1WYWx1ZXM6IGNvbmZpZy5zY2hlbWEubWF4RW51bVZhbHVlcywKLSAgICAgICAgaW5jbHVkZUNvdW50czogY29uZmlnLnNjaGVtYS5pbmNsdWRlQ291bnRzLAotICAgICAgfSwKLSAgICAgIGxvZ2dpbmc6IHsKLSAgICAgICAgbGV2ZWw6IGNvbmZpZy5sb2dnaW5nLmxldmVsLAotICAgICAgICBzdHJ1Y3R1cmVkOiB0cnVlLAotICAgICAgfSwKLSAgICB9LAotICB9KTsKLQotICAvLyBHZXQgc2VydmVyIHNlcnZpY2UKLSAgY29uc3QgbWNwU2VydmVyID0geWllbGQqIE1jcFNlcnZlclNlcnZpY2U7Ci0KLSAgLy8gU2V0IHVwIGdyYWNlZnVsIHNodXRkb3duCi0gIHlpZWxkKiBFZmZlY3QuYWRkRmluYWxpemVyKCgpID0+IG1jcFNlcnZlci5zdG9wKTsKLQotICAvLyBTdGFydCB0aGUgc2VydmVyCi0gIHlpZWxkKiBtY3BTZXJ2ZXIuc3RhcnQ7Ci0KLSAgLy8gS2VlcCB0aGUgcHJvZ3JhbSBydW5uaW5nCi0gIHlpZWxkKiBFZmZlY3QubmV2ZXI7Ci19KTsKLQotLyoqCi0gKiBTYWZlbHkgc2VyaWFsaXplcyBvYmplY3RzIHRvIEpTT04gd2l0aCBmYWxsYmFjayBlcnJvciBoYW5kbGluZy4KLSAqCi0gKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIHNlcmlhbGl6ZQotICogQHJldHVybnMgSlNPTiBzdHJpbmcsIHdpdGggZXJyb3IgbWV0YWRhdGEgaWYgc2VyaWFsaXphdGlvbiBmYWlscwotICovCi1jb25zdCBzYWZlSnNvblN0cmluZ2lmeSA9IChvYmo6IHVua25vd24pOiBzdHJpbmcgPT4KLSAgcGlwZSgKLSAgICBFZmZlY3QudHJ5KCgpID0+IEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMikpLAotICAgIEVmZmVjdC5jYXRjaEFsbCgoKSA9PgotICAgICAgRWZmZWN0LnN1Y2NlZWQoCi0gICAgICAgIEpTT04uc3RyaW5naWZ5KHsKLSAgICAgICAgICBtZXNzYWdlOiBTdHJpbmcob2JqKSwKLSAgICAgICAgICBzZXJpYWxpemF0aW9uX2Vycm9yOiB0cnVlLAotICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLAotICAgICAgICB9KQotICAgICAgKQotICAgICksCi0gICAgRWZmZWN0LnJ1blN5bmMKLSAgKTsKLQotLyoqCi0gKiBTdHJ1Y3R1cmVkIGxvZ2dpbmcgRWZmZWN0IHRoYXQgd3JpdGVzIHRvIHN0ZGVyci4KLSAqCi0gKiBAcGFyYW0gbG9nRGF0YSAtIFN0cnVjdHVyZWQgbG9nIGRhdGEgb2JqZWN0Ci0gKiBAcmV0dXJucyBFZmZlY3QgdGhhdCB3cml0ZXMgbG9nIGVudHJ5IHRvIHN0ZGVycgotICoKLSAqIE5vdGU6IEFsbCBsb2dnaW5nIGdvZXMgdG8gc3RkZXJyIHRvIGF2b2lkIGludGVyZmVyaW5nIHdpdGggTUNQIEpTT04tUlBDCi0gKiBjb21tdW5pY2F0aW9uIG9uIHN0ZG91dC4KLSAqLwotY29uc3QgbG9nVG9TdGRlcnIgPSAobG9nRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBFZmZlY3QuRWZmZWN0PHZvaWQ+ID0+Ci0gIEVmZmVjdC5zeW5jKCgpID0+IHsKLSAgICBjb25zdCBsb2dFbnRyeSA9IHsKLSAgICAgIC4uLmxvZ0RhdGEsCi0gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKLSAgICB9OwotICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke3NhZmVKc29uU3RyaW5naWZ5KGxvZ0VudHJ5KX1cbmApOwotICB9KTsKLQotLyoqCi0gKiBFbmhhbmNlZCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gY29uZmlnCi0gKiBDUklUSUNBTDogQWxsIGxvZ2dpbmcgbXVzdCBnbyB0byBzdGRlcnIgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBNQ1AgSlNPTiByZXNwb25zZXMKLSAqLwotY29uc3QgY3JlYXRlTG9nZ2VyTGF5ZXIgPSAoY29uZmlnOiBBcHBDb25maWdUeXBlKSA9PiB7Ci0gIGNvbnN0IGxvZ0xldmVsTWFwID0gewotICAgIGVycm9yOiBMb2dMZXZlbC5FcnJvciwKLSAgICB3YXJuOiBMb2dMZXZlbC5XYXJuaW5nLAotICAgIGluZm86IExvZ0xldmVsLkluZm8sCi0gICAgZGVidWc6IExvZ0xldmVsLkRlYnVnLAotICB9IGFzIGNvbnN0OwotICBjb25zdCBtaW5pbXVtTG9nTGV2ZWwgPSBsb2dMZXZlbE1hcFtjb25maWcubG9nZ2luZy5sZXZlbF0gPz8gTG9nTGV2ZWwuSW5mbzsKLQotICByZXR1cm4gTGF5ZXIubWVyZ2VBbGwoCi0gICAgTG9nZ2VyLnJlcGxhY2UoCi0gICAgICBMb2dnZXIuZGVmYXVsdExvZ2dlciwKLSAgICAgIExvZ2dlci5tYWtlKCh7IGxvZ0xldmVsOiBsZXZlbCwgbWVzc2FnZSwgLi4ucmVzdCB9KSA9PiB7Ci0gICAgICAgIGNvbnN0IGxvZ0RhdGEgPSB7Ci0gICAgICAgICAgbGV2ZWw6IGxldmVsLl90YWcudG9Mb3dlckNhc2UoKSwKLSAgICAgICAgICBtZXNzYWdlLAotICAgICAgICAgIC4uLk9iamVjdC5mcm9tRW50cmllcygKLSAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3QpLmZpbHRlcigKLSAgICAgICAgICAgICAgKFtrZXldKSA9PiAha2V5LnN0YXJ0c1dpdGgoJ18nKSAmJiBrZXkgIT09ICdzcGFuJyAmJiBrZXkgIT09ICdmaWJlcicKLSAgICAgICAgICAgICkKLSAgICAgICAgICApLAotICAgICAgICB9OwotICAgICAgICAvLyBJTVBPUlRBTlQ6IHJ1biB0aGUgZWZmZWN0IHN5bmNocm9ub3VzbHksIGZvciB0aGUgbG92ZSBhbGwgdGhhdCBpcyBzYW5lLCBydW4gaXQgc3luY2hyb25vdXNseSEhIQotICAgICAgICBFZmZlY3QucnVuU3luYyhsb2dUb1N0ZGVycihsb2dEYXRhKSk7Ci0gICAgICB9KQotICAgICksCi0gICAgTG9nZ2VyLm1pbmltdW1Mb2dMZXZlbChtaW5pbXVtTG9nTGV2ZWwpCi0gICk7Ci19OwotCi0vKioKLSAqIEVmZmVjdC1iYXNlZCBncmFjZWZ1bCBzaHV0ZG93biB1c2luZyBFZmZlY3QncyBpbnRlcnJ1cHRpb24gc3lzdGVtCi0gKi8KLWNvbnN0IHdpdGhHcmFjZWZ1bFNodXRkb3duID0gPEEsIEUsIFI+KGVmZmVjdDogRWZmZWN0LkVmZmVjdDxBLCBFLCBSPik6IEVmZmVjdC5FZmZlY3Q8QSwgRSwgUj4gPT4KLSAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgewotICAgIGNvbnN0IGZpYmVyID0geWllbGQqIEVmZmVjdC5mb3JrKGVmZmVjdCk7Ci0KLSAgICAvLyBTZXQgdXAgc2lnbmFsIGhhbmRsZXJzIHVzaW5nIEVmZmVjdCdzIGludGVycnVwdGlvbgotICAgIGNvbnN0IHNldHVwU2lnbmFsSGFuZGxlciA9IChzaWduYWw6IE5vZGVKUy5TaWduYWxzKSA9PgotICAgICAgRWZmZWN0LnN5bmMoKCkgPT4gewotICAgICAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4gewotICAgICAgICAgIEVmZmVjdC5ydW5Qcm9taXNlKAotICAgICAgICAgICAgcGlwZSgKLSAgICAgICAgICAgICAgRWZmZWN0LmxvZ0luZm8oYFJlY2VpdmVkICR7c2lnbmFsfS4gSW5pdGlhdGluZyBncmFjZWZ1bCBzaHV0ZG93bi4uLmApLAotICAgICAgICAgICAgICBFZmZlY3QuYW5kVGhlbigoKSA9PiBGaWJlci5pbnRlcnJ1cHQoZmliZXIpKSwKLSAgICAgICAgICAgICAgRWZmZWN0LmNhdGNoQWxsKChlcnJvcjogdW5rbm93bikgPT4KLSAgICAgICAgICAgICAgICBsb2dUb1N0ZGVycih7Ci0gICAgICAgICAgICAgICAgICBsZXZlbDogJ2Vycm9yJywKLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBkdXJpbmcgc2h1dGRvd24nLAotICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSwKLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICApCi0gICAgICAgICAgICApCi0gICAgICAgICAgKS5maW5hbGx5KCgpID0+IHsKLSAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICB9KTsKLQotICAgIHlpZWxkKiBzZXR1cFNpZ25hbEhhbmRsZXIoJ1NJR0lOVCcpOwotICAgIHlpZWxkKiBzZXR1cFNpZ25hbEhhbmRsZXIoJ1NJR1RFUk0nKTsKLQotICAgIHJldHVybiB5aWVsZCogRmliZXIuam9pbihmaWJlcik7Ci0gIH0pOwotCi0vKioKLSAqIE1haW4gZW50cnkgcG9pbnQgd2l0aCBmdWxsIEVmZmVjdCBjb21wb3NpdGlvbgotICovCi1jb25zdCBtYWluID0gRWZmZWN0LmdlbihmdW5jdGlvbiogKCkgewotICAvLyBBZGQgc3RhcnR1cCBsb2dnaW5nIGJlZm9yZSBhbnl0aGluZyBlbHNlIC0gQ1JJVElDQUw6IFVzZSBzdGRlcnIgb25seQotICB5aWVsZCogbG9nVG9TdGRlcnIoewotICAgIGxldmVsOiAnaW5mbycsCi0gICAgbWVzc2FnZTogJ0FwYWNoZSBUaW5rZXJQb3AgLSBHcmVtbGluIE1DUCBTZXJ2ZXIgZXhlY3V0YWJsZSBzdGFydGVkJywKLSAgICBwcm9jZXNzX2luZm86IHsKLSAgICAgIHBpZDogcHJvY2Vzcy5waWQsCi0gICAgICBub2RlX3ZlcnNpb246IHByb2Nlc3MudmVyc2lvbnMubm9kZSwKLSAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLAotICAgICAgYXJndjogcHJvY2Vzcy5hcmd2LAotICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLAotICAgIH0sCi0gIH0pOwotCi0gIC8vIEdldCBjb25maWd1cmF0aW9uIGVhcmx5IGZvciBsb2dnaW5nIHNldHVwCi0gIGNvbnN0IGNvbmZpZyA9IHlpZWxkKiBBcHBDb25maWc7Ci0KLSAgLy8gTG9nIGNvbmZpZ3VyYXRpb24KLSAgeWllbGQqIGxvZ1RvU3RkZXJyKHsKLSAgICBsZXZlbDogJ2luZm8nLAotICAgIG1lc3NhZ2U6ICdDb25maWd1cmF0aW9uIGxvYWRlZCcsCi0gICAgY29uZmlnOiB7Ci0gICAgICBncmVtbGluOiB7Ci0gICAgICAgIGhvc3Q6IGNvbmZpZy5ncmVtbGluLmhvc3QsCi0gICAgICAgIHBvcnQ6IGNvbmZpZy5ncmVtbGluLnBvcnQsCi0gICAgICAgIHVzZV9zc2w6IGNvbmZpZy5ncmVtbGluLnVzZVNTTCwKLSAgICAgICAgdHJhdmVyc2FsX3NvdXJjZTogY29uZmlnLmdyZW1saW4udHJhdmVyc2FsU291cmNlLAotICAgICAgICBpZGxlX3RpbWVvdXQ6IGNvbmZpZy5ncmVtbGluLmlkbGVUaW1lb3V0LAotICAgICAgfSwKLSAgICAgIGxvZ2dpbmc6IHsKLSAgICAgICAgbGV2ZWw6IGNvbmZpZy5sb2dnaW5nLmxldmVsLAotICAgICAgfSwKLSAgICB9LAotICB9KTsKLQotICAvLyBSdW4gdGhlIG1haW4gcHJvZ3JhbSB3aXRoIGFsbCBzZXJ2aWNlcyBwcm92aWRlZAotICB5aWVsZCogcGlwZSgKLSAgICB3aXRoR3JhY2VmdWxTaHV0ZG93bihwcm9ncmFtKSwKLSAgICBFZmZlY3QucHJvdmlkZShBcHBMYXllciksCi0gICAgRWZmZWN0LnByb3ZpZGUoY3JlYXRlTG9nZ2VyTGF5ZXIoY29uZmlnKSkKLSAgKTsKLX0pOwotCi0vKioKLSAqIFJ1biB0aGUgYXBwbGljYXRpb24gd2l0aCBpbXByb3ZlZCBlcnJvciBoYW5kbGluZyB1c2luZyBFZmZlY3QgcGF0dGVybnMKLSAqLwotLy8gRW5zdXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgdXNlZCBmb3IgY29uZmlndXJhdGlvbiByZXNvbHV0aW9uIGFjcm9zcyB0aGUgYXBwCi1jb25zdCBFbnZDb25maWdMYXllciA9IExheWVyLnNldENvbmZpZ1Byb3ZpZGVyKENvbmZpZ1Byb3ZpZGVyLmZyb21FbnYoKSk7Ci0KLWNvbnN0IHJ1bk1haW4gPSBwaXBlKAotICBFZmZlY3Quc2NvcGVkKG1haW4pLAotICBFZmZlY3QucHJvdmlkZShFbnZDb25maWdMYXllciksCi0gIEVmZmVjdC5jYXRjaEFsbCgoZXJyb3I6IHVua25vd24pID0+Ci0gICAgbG9nVG9TdGRlcnIoewotICAgICAgbGV2ZWw6ICdlcnJvcicsCi0gICAgICBtZXNzYWdlOiAnRmF0YWwgZXJyb3IgaW4gbWFpbiBwcm9ncmFtJywKLSAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksCi0gICAgICBlcnJvcl90eXBlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IuY29uc3RydWN0b3IubmFtZSA6IHR5cGVvZiBlcnJvciwKLSAgICAgIHN0YWNrOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQsCi0gICAgfSkucGlwZShFZmZlY3QuYW5kVGhlbigoKSA9PiBFZmZlY3Quc3luYygoKSA9PiBwcm9jZXNzLmV4aXQoMSkpKSkKLSAgKQotKTsKLQotRWZmZWN0LnJ1blByb21pc2UocnVuTWFpbik7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2NvbmZpZy50ZXN0LnRzIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9jb25maWcudGVzdC50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VmOWU3OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2NvbmZpZy50ZXN0LnRzCisrKyAvZGV2L251bGwKQEAgLTEsMjgxICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotLyoqCi0gKiBUZXN0cyBmb3IgRWZmZWN0LWJhc2VkIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBhbmQgdmFsaWRhdGlvbi4KLSAqLwotCi1pbXBvcnQgeyBFZmZlY3QsIFJlZGFjdGVkLCBPcHRpb24gfSBmcm9tICdlZmZlY3QnOwotaW1wb3J0IHsgZGVzY3JpYmUsIGl0LCBleHBlY3QsIGJlZm9yZUVhY2ggfSBmcm9tICdAamVzdC9nbG9iYWxzJzsKLWltcG9ydCB7IEdSRU1MSU5fVkVSU0lPTiwgU0VSVkVSX0lORk8gfSBmcm9tICcuLi9zcmMvY29uc3RhbnRzJzsKLWltcG9ydCB7IEFwcENvbmZpZywgdHlwZSBBcHBDb25maWdUeXBlIH0gZnJvbSAnLi4vc3JjL2NvbmZpZyc7Ci0KLWRlc2NyaWJlKCdFZmZlY3QtYmFzZWQgQ29uZmlndXJhdGlvbiBNYW5hZ2VtZW50JywgKCkgPT4gewotICBjb25zdCBvcmlnaW5hbEVudiA9IHByb2Nlc3MuZW52OwotCi0gIGJlZm9yZUVhY2goKCkgPT4gewotICAgIC8vIFJlc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgIHByb2Nlc3MuZW52ID0geyAuLi5vcmlnaW5hbEVudiB9OwotICB9KTsKLQotICBhZnRlckVhY2goKCkgPT4gewotICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgZW52aXJvbm1lbnQKLSAgICBwcm9jZXNzLmVudiA9IG9yaWdpbmFsRW52OwotICB9KTsKLQotICBkZXNjcmliZSgnQXBwQ29uZmlnIEVmZmVjdCcsICgpID0+IHsKLSAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGEgY29tcGxldGUgY29uZmlndXJhdGlvbicsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyL2cnOwotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfVVNFX1NTTCA9ICdmYWxzZSc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9VU0VSTkFNRSA9ICd0ZXN0dXNlcic7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9QQVNTV09SRCA9ICd0ZXN0cGFzcyc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9MT0dfTEVWRUwgPSAnaW5mbyc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9JRExFX1RJTUVPVVQgPSAnMzAwJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VOVU1fRElTQ09WRVJZX0VOQUJMRUQgPSAndHJ1ZSc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX0NBUkRJTkFMSVRZX1RIUkVTSE9MRCA9ICcxMCc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTlVNX1BST1BFUlRZX0RFTllMSVNUID0gJ2lkLHBrLG5hbWUnOwotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfU0NIRU1BX0lOQ0xVREVfU0FNUExFX1ZBTFVFUyA9ICdmYWxzZSc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9TQ0hFTUFfTUFYX0VOVU1fVkFMVUVTID0gJzEwJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX0NPVU5UUyA9ICd0cnVlJzsKLQotICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKLQotICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7Ci0gICAgICAgIGdyZW1saW46IHsKLSAgICAgICAgICBob3N0OiAnbG9jYWxob3N0JywKLSAgICAgICAgICBwb3J0OiA4MTgyLAotICAgICAgICAgIHRyYXZlcnNhbFNvdXJjZTogJ2cnLAotICAgICAgICAgIHVzZVNTTDogZmFsc2UsCi0gICAgICAgICAgaWRsZVRpbWVvdXQ6IDMwMCwKLSAgICAgICAgfSwKLSAgICAgICAgc2NoZW1hOiB7Ci0gICAgICAgICAgZW51bURpc2NvdmVyeUVuYWJsZWQ6IHRydWUsCi0gICAgICAgICAgZW51bUNhcmRpbmFsaXR5VGhyZXNob2xkOiAxMCwKLSAgICAgICAgICBlbnVtUHJvcGVydHlEZW55TGlzdDogWydpZCcsICdwaycsICduYW1lJ10sCi0gICAgICAgICAgaW5jbHVkZVNhbXBsZVZhbHVlczogZmFsc2UsCi0gICAgICAgICAgbWF4RW51bVZhbHVlczogMTAsCi0gICAgICAgICAgaW5jbHVkZUNvdW50czogdHJ1ZSwKLSAgICAgICAgfSwKLSAgICAgICAgbG9nZ2luZzogewotICAgICAgICAgIGxldmVsOiAnaW5mbycsCi0gICAgICAgIH0sCi0gICAgICAgIHNlcnZlcjogewotICAgICAgICAgIG5hbWU6IFNFUlZFUl9JTkZPLk5BTUUsCi0gICAgICAgICAgdmVyc2lvbjogR1JFTUxJTl9WRVJTSU9OLAotICAgICAgICB9LAotICAgICAgfSk7Ci0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udXNlcm5hbWUpLnRvRXF1YWwoT3B0aW9uLnNvbWUoJ3Rlc3R1c2VyJykpOwotICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnBhc3N3b3JkKS50b0VxdWFsKE9wdGlvbi5zb21lKFJlZGFjdGVkLm1ha2UoJ3Rlc3RwYXNzJykpKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGFuZGxlIG1pbmltYWwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzJywgYXN5bmMgKCkgPT4gewotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OjgxODInOwotCi0gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOwotCi0gICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsKLSAgICAgICAgZ3JlbWxpbjogewotICAgICAgICAgIGhvc3Q6ICdsb2NhbGhvc3QnLAotICAgICAgICAgIHBvcnQ6IDgxODIsCi0gICAgICAgICAgdHJhdmVyc2FsU291cmNlOiAnZycsCi0gICAgICAgICAgdXNlU1NMOiBmYWxzZSwKLSAgICAgICAgICBpZGxlVGltZW91dDogMzAwLAotICAgICAgICB9LAotICAgICAgICBzY2hlbWE6IHsKLSAgICAgICAgICBlbnVtRGlzY292ZXJ5RW5hYmxlZDogdHJ1ZSwKLSAgICAgICAgICBlbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQ6IDEwLAotICAgICAgICAgIGluY2x1ZGVTYW1wbGVWYWx1ZXM6IGZhbHNlLAotICAgICAgICAgIG1heEVudW1WYWx1ZXM6IDEwLAotICAgICAgICAgIGluY2x1ZGVDb3VudHM6IGZhbHNlLAotICAgICAgICB9LAotICAgICAgICBsb2dnaW5nOiB7Ci0gICAgICAgICAgbGV2ZWw6ICdpbmZvJywKLSAgICAgICAgfSwKLSAgICAgIH0pOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gcmVxdWlyZWQgR1JFTUxJTl9NQ1BfRU5EUE9JTlQgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHsKLSAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVDsKLQotICAgICAgYXdhaXQgZXhwZWN0KEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZykpLnJlamVjdHMudG9UaHJvdygpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBwYXJzZSBib29sZWFuIHZhbHVlcyBjb3JyZWN0bHknLCBhc3luYyAoKSA9PiB7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9VU0VfU1NMID0gJ3RydWUnOwotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5VTV9ESVNDT1ZFUllfRU5BQkxFRCA9ICd0cnVlJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1NDSEVNQV9JTkNMVURFX1NBTVBMRV9WQUxVRVMgPSAndHJ1ZSc7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9TQ0hFTUFfSU5DTFVERV9DT1VOVFMgPSAnZmFsc2UnOwotCi0gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOwotCi0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udXNlU1NMKS50b0JlKHRydWUpOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuZW51bURpc2NvdmVyeUVuYWJsZWQpLnRvQmUodHJ1ZSk7Ci0gICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5pbmNsdWRlU2FtcGxlVmFsdWVzKS50b0JlKHRydWUpOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuaW5jbHVkZUNvdW50cykudG9CZShmYWxzZSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHBhcnNlIGVuZHBvaW50IHdpdGggdHJhdmVyc2FsIHNvdXJjZScsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyL2N1c3RvbSc7Ci0KLSAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7Ci0KLSAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5ob3N0KS50b0JlKCdsb2NhbGhvc3QnKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5wb3J0KS50b0JlKDgxODIpOwotICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnRyYXZlcnNhbFNvdXJjZSkudG9CZSgnY3VzdG9tJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHBhcnNlIGNvbW1hLXNlcGFyYXRlZCBkZW55bGlzdCcsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VOVU1fUFJPUEVSVFlfREVOWUxJU1QgPSAnaWQsIHBrLCBuYW1lLCBkZXNjcmlwdGlvbic7Ci0KLSAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7Ci0KLSAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmVudW1Qcm9wZXJ0eURlbnlMaXN0KS50b0VxdWFsKFsnaWQnLCAncGsnLCAnbmFtZScsICdkZXNjcmlwdGlvbiddKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgbG9nIGxldmVsIGVudW0nLCBhc3luYyAoKSA9PiB7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9MT0dfTEVWRUwgPSAnZGVidWcnOwotCi0gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOwotCi0gICAgICBleHBlY3QocmVzdWx0LmxvZ2dpbmcubGV2ZWwpLnRvQmUoJ2RlYnVnJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIGxvZyBsZXZlbCcsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0xPR19MRVZFTCA9ICdpbnZhbGlkJzsKLQotICAgICAgYXdhaXQgZXhwZWN0KEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZykpLnJlamVjdHMudG9UaHJvdygpOwotICAgIH0pOwotCi0gICAgaXQoJ3Nob3VsZCBwYXJzZSBudW1lcmljIHZhbHVlcyBjb3JyZWN0bHknLCBhc3luYyAoKSA9PiB7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6ODE4Mic7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9JRExFX1RJTUVPVVQgPSAnNjAwJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VOVU1fQ0FSRElOQUxJVFlfVEhSRVNIT0xEID0gJzIwJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1NDSEVNQV9NQVhfRU5VTV9WQUxVRVMgPSAnMTUnOwotCi0gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOwotCi0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4uaWRsZVRpbWVvdXQpLnRvQmUoNjAwKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmVudW1DYXJkaW5hbGl0eVRocmVzaG9sZCkudG9CZSgyMCk7Ci0gICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5tYXhFbnVtVmFsdWVzKS50b0JlKDE1KTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGFuZGxlIG9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGZpZWxkcycsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1VTRVJOQU1FID0gJ3Rlc3R1c2VyJzsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX1BBU1NXT1JEID0gJ3Rlc3RwYXNzJzsKLQotICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKLQotICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnVzZXJuYW1lKS50b0VxdWFsKE9wdGlvbi5zb21lKCd0ZXN0dXNlcicpKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5wYXNzd29yZCkudG9FcXVhbChPcHRpb24uc29tZShSZWRhY3RlZC5tYWtlKCd0ZXN0cGFzcycpKSk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIGhhbmRsZSBtaXNzaW5nIG9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGZpZWxkcycsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKLSAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9VU0VSTkFNRTsKLSAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9QQVNTV09SRDsKLQotICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKTsKLQotICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnVzZXJuYW1lKS50b0VxdWFsKE9wdGlvbi5ub25lPHN0cmluZz4oKSk7Ci0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4ucGFzc3dvcmQpLnRvRXF1YWwoT3B0aW9uLm5vbmU8c3RyaW5nPigpKTsKLSAgICB9KTsKLSAgfSk7Ci0KLSAgZGVzY3JpYmUoJ0Vycm9yIEhhbmRsaW5nJywgKCkgPT4gewotICAgIGl0KCdzaG91bGQgcHJvdmlkZSBtZWFuaW5nZnVsIGVycm9yIGZvciBpbnZhbGlkIGVuZHBvaW50IGZvcm1hdCcsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2ludmFsaWQtZW5kcG9pbnQnOwotCi0gICAgICBhd2FpdCBleHBlY3QoRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKSkucmVqZWN0cy50b1Rocm93KC9JbnZhbGlkIGhvc3Q6cG9ydCBmb3JtYXQvKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgcHJvdmlkZSBtZWFuaW5nZnVsIGVycm9yIGZvciBpbnZhbGlkIHBvcnQnLCBhc3luYyAoKSA9PiB7Ci0gICAgICBwcm9jZXNzLmVudi5HUkVNTElOX01DUF9FTkRQT0lOVCA9ICdsb2NhbGhvc3Q6aW52YWxpZCc7Ci0KLSAgICAgIGF3YWl0IGV4cGVjdChFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpKS5yZWplY3RzLnRvVGhyb3coL1BvcnQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIvKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgcHJvdmlkZSBtZWFuaW5nZnVsIGVycm9yIGZvciBlbXB0eSBlbmRwb2ludCcsIGFzeW5jICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJyc7Ci0KLSAgICAgIGF3YWl0IGV4cGVjdChFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpKS5yZWplY3RzLnRvVGhyb3coKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGFuZGxlIG1pc3NpbmcgaG9zdCBvciBwb3J0JywgYXN5bmMgKCkgPT4gewotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnOjgxODInOwotCi0gICAgICBhd2FpdCBleHBlY3QoRWZmZWN0LnJ1blByb21pc2UoQXBwQ29uZmlnKSkucmVqZWN0cy50b1Rocm93KC9Ib3N0IGFuZCBwb3J0IGFyZSByZXF1aXJlZC8pOwotICAgIH0pOwotICB9KTsKLQotICBkZXNjcmliZSgnQ29uZmlndXJhdGlvbiBWYWxpZGF0aW9uJywgKCkgPT4gewotICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYWxsIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gZmllbGRzIGFyZSBwcmVzZW50JywgYXN5bmMgKCkgPT4gewotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OjgxODIvZyc7Ci0KLSAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVmZmVjdC5ydW5Qcm9taXNlKEFwcENvbmZpZyk7Ci0KLSAgICAgIC8vIENoZWNrIGFsbCByZXF1aXJlZCBmaWVsZHMgYXJlIHByZXNlbnQKLSAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5ob3N0KS50b0JlRGVmaW5lZCgpOwotICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnBvcnQpLnRvQmVEZWZpbmVkKCk7Ci0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udHJhdmVyc2FsU291cmNlKS50b0JlRGVmaW5lZCgpOwotICAgICAgZXhwZWN0KHJlc3VsdC5ncmVtbGluLnVzZVNTTCkudG9CZURlZmluZWQoKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5pZGxlVGltZW91dCkudG9CZURlZmluZWQoKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmVudW1EaXNjb3ZlcnlFbmFibGVkKS50b0JlRGVmaW5lZCgpOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuZW51bUNhcmRpbmFsaXR5VGhyZXNob2xkKS50b0JlRGVmaW5lZCgpOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuZW51bVByb3BlcnR5RGVueUxpc3QpLnRvQmVEZWZpbmVkKCk7Ci0gICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5pbmNsdWRlU2FtcGxlVmFsdWVzKS50b0JlRGVmaW5lZCgpOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEubWF4RW51bVZhbHVlcykudG9CZURlZmluZWQoKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmluY2x1ZGVDb3VudHMpLnRvQmVEZWZpbmVkKCk7Ci0gICAgICBleHBlY3QocmVzdWx0LnNlcnZlci5uYW1lKS50b0JlRGVmaW5lZCgpOwotICAgICAgZXhwZWN0KHJlc3VsdC5zZXJ2ZXIudmVyc2lvbikudG9CZURlZmluZWQoKTsKLSAgICAgIGV4cGVjdChyZXN1bHQubG9nZ2luZy5sZXZlbCkudG9CZURlZmluZWQoKTsKLSAgICB9KTsKLQotICAgIGl0KCdzaG91bGQgaGF2ZSBjb3JyZWN0IGRlZmF1bHQgdmFsdWVzJywgYXN5bmMgKCkgPT4gewotICAgICAgcHJvY2Vzcy5lbnYuR1JFTUxJTl9NQ1BfRU5EUE9JTlQgPSAnbG9jYWxob3N0OjgxODInOwotCi0gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZmZlY3QucnVuUHJvbWlzZShBcHBDb25maWcpOwotCi0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udHJhdmVyc2FsU291cmNlKS50b0JlKCdnJyk7Ci0gICAgICBleHBlY3QocmVzdWx0LmdyZW1saW4udXNlU1NMKS50b0JlKGZhbHNlKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuZ3JlbWxpbi5pZGxlVGltZW91dCkudG9CZSgzMDApOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuZW51bURpc2NvdmVyeUVuYWJsZWQpLnRvQmUodHJ1ZSk7Ci0gICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5lbnVtQ2FyZGluYWxpdHlUaHJlc2hvbGQpLnRvQmUoMTApOwotICAgICAgZXhwZWN0KHJlc3VsdC5zY2hlbWEuaW5jbHVkZVNhbXBsZVZhbHVlcykudG9CZShmYWxzZSk7Ci0gICAgICBleHBlY3QocmVzdWx0LnNjaGVtYS5tYXhFbnVtVmFsdWVzKS50b0JlKDEwKTsKLSAgICAgIGV4cGVjdChyZXN1bHQuc2NoZW1hLmluY2x1ZGVDb3VudHMpLnRvQmUoZmFsc2UpOwotICAgICAgZXhwZWN0KHJlc3VsdC5sb2dnaW5nLmxldmVsKS50b0JlKCdpbmZvJyk7Ci0gICAgfSk7Ci0KLSAgICBpdCgnc2hvdWxkIHVzZSBFZmZlY3QgZm9yIHR5cGUtc2FmZSBjb25maWd1cmF0aW9uIGFjY2VzcycsICgpID0+IHsKLSAgICAgIHByb2Nlc3MuZW52LkdSRU1MSU5fTUNQX0VORFBPSU5UID0gJ2xvY2FsaG9zdDo4MTgyJzsKLQotICAgICAgLy8gVGVzdCB0aGF0IEFwcENvbmZpZyBpcyBhbiBFZmZlY3QKLSAgICAgIGV4cGVjdChFZmZlY3QuaXNFZmZlY3QoQXBwQ29uZmlnKSkudG9CZSh0cnVlKTsKLQotICAgICAgLy8gVGVzdCB0eXBlIGNvbXBhdGliaWxpdHkKLSAgICAgIGNvbnN0IHRlc3RFZmZlY3Q6IEVmZmVjdC5FZmZlY3Q8QXBwQ29uZmlnVHlwZSwgYW55PiA9IEFwcENvbmZpZzsKLSAgICAgIGV4cGVjdChFZmZlY3QuaXNFZmZlY3QodGVzdEVmZmVjdCkpLnRvQmUodHJ1ZSk7Ci0gICAgfSk7Ci0gIH0pOwotfSk7CmRpZmYgLS1naXQgYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2dyZW1saW50LWZvcm1hdC50ZXN0LnRzIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90ZXN0cy9ncmVtbGludC1mb3JtYXQudGVzdC50cwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ4ZjBhMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L3Rlc3RzL2dyZW1saW50LWZvcm1hdC50ZXN0LnRzCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1pbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCwgYmVmb3JlQWxsIH0gZnJvbSAnQGplc3QvZ2xvYmFscyc7Ci0KLWxldCBmb3JtYXRRdWVyeTogKHE6IHN0cmluZywgb3B0cz86IGFueSkgPT4gc3RyaW5nOwotCi1iZWZvcmVBbGwoYXN5bmMgKCkgPT4gewotICAvLyBJbXBvcnQgdGhlIGNvbXBpbGVkIGdyZW1saW50IGFydGlmYWN0IGRpcmVjdGx5IGZyb20gdGhlIHJlcG9zaXRvcnkgKGxpYi9pbmRleC5qcykKLSAgY29uc3QgbW9kID0gYXdhaXQgaW1wb3J0KCcuLi8uLi8uLi8uLi8uLi9ncmVtbGludC9saWIvaW5kZXguanMnKTsKLSAgLy8gUmVzb2x2ZSBhY3Jvc3MgcG9zc2libGUgaW50ZXJvcCBzaGFwZXMKLSAgZm9ybWF0UXVlcnkgPQotICAgIChtb2QgJiYgKG1vZC5mb3JtYXRRdWVyeSBhcyBhbnkpKSB8fAotICAgIChtb2QgJiYgbW9kLmRlZmF1bHQgJiYgKG1vZC5kZWZhdWx0LmZvcm1hdFF1ZXJ5IGFzIGFueSkpIHx8Ci0gICAgKG1vZCAmJiAobW9kLmRlZmF1bHQgYXMgYW55KSk/LmZvcm1hdFF1ZXJ5IHx8Ci0gICAgKG1vZCBhcyBhbnkpOwotCi0gIGlmICghZm9ybWF0UXVlcnkgfHwgdHlwZW9mIGZvcm1hdFF1ZXJ5ICE9PSAnZnVuY3Rpb24nKSB7Ci0gICAgdGhyb3cgbmV3IEVycm9yKAotICAgICAgJ0NvdWxkIG5vdCByZXNvbHZlIGZvcm1hdFF1ZXJ5IGZyb20gZ3JlbWxpbnQgbW9kdWxlLiBQbGVhc2UgYnVpbGQgZ3JlbWxpbnQgZmlyc3QuJwotICAgICk7Ci0gIH0KLX0pOwotCi1kZXNjcmliZSgnZ3JlbWxpbnQgZm9ybWF0UXVlcnknLCAoKSA9PiB7Ci0gIGNvbnN0IHNhbXBsZSA9IGBnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuaGFzKCduYW1lJywnbWFya28nKS5vdXQoJ2tub3dzJykudmFsdWVzKCduYW1lJylgOwotCi0gIGl0KCdmb3JtYXRzIGFuZCByZXR1cm5zIGEgZGlmZmVyZW50IHN0cmluZyB0aGF0IGNvbnRhaW5zIG5ld2xpbmVzJywgKCkgPT4gewotICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFF1ZXJ5KHNhbXBsZSwgewotICAgICAgaW5kZW50YXRpb246IDIsCi0gICAgICBtYXhMaW5lTGVuZ3RoOiA2MCwKLSAgICAgIHNob3VsZFBsYWNlRG90c0FmdGVyTGluZUJyZWFrczogdHJ1ZSwKLSAgICB9KTsKLSAgICBleHBlY3QodHlwZW9mIGZvcm1hdHRlZCkudG9CZSgnc3RyaW5nJyk7Ci0gICAgZXhwZWN0KGZvcm1hdHRlZCkubm90LnRvQmUoc2FtcGxlKTsKLSAgICBleHBlY3QoZm9ybWF0dGVkLmluY2x1ZGVzKCdcbicpKS50b0JlKHRydWUpOwotICB9KTsKLQotICBpdCgncHJvZHVjZXMgZGlmZmVyZW50IG91dHB1dCBmb3IgZGlmZmVyZW50IGluZGVudGF0aW9uIG9wdGlvbnMnLCAoKSA9PiB7Ci0gICAgY29uc3QgZjIgPSBmb3JtYXRRdWVyeShzYW1wbGUsIHsgaW5kZW50YXRpb246IDIgfSk7Ci0gICAgY29uc3QgZjQgPSBmb3JtYXRRdWVyeShzYW1wbGUsIHsgaW5kZW50YXRpb246IDQgfSk7Ci0gICAgZXhwZWN0KGYyKS5ub3QudG9CZShmNCk7Ci0KLSAgICBjb25zdCBzZWNvbmRMaW5lMiA9IGYyLnNwbGl0KCdcbicpWzFdIHx8ICcnOwotICAgIGNvbnN0IHNlY29uZExpbmU0ID0gZjQuc3BsaXQoJ1xuJylbMV0gfHwgJyc7Ci0KLSAgICBjb25zdCBsZWFkaW5nU3BhY2VzID0gKHM6IHN0cmluZykgPT4gcy5tYXRjaCgvXiAqLyk/LlswXS5sZW5ndGggfHwgMDsKLSAgICBleHBlY3QobGVhZGluZ1NwYWNlcyhzZWNvbmRMaW5lMikpLnRvQmVMZXNzVGhhbk9yRXF1YWwobGVhZGluZ1NwYWNlcyhzZWNvbmRMaW5lNCkpOwotICB9KTsKLX0pOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90c2NvbmZpZy5qc29uIGIvZ3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC90c2NvbmZpZy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWRjOTExLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tbWNwL3NyYy9tYWluL2phdmFzY3JpcHQvdHNjb25maWcuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLXsKLSAgImNvbXBpbGVyT3B0aW9ucyI6IHsKLSAgICAidGFyZ2V0IjogIkVTMjAyMiIsCi0gICAgIm1vZHVsZSI6ICJFU05leHQiLAotICAgICJtb2R1bGVSZXNvbHV0aW9uIjogIm5vZGUiLAotICAgICJsaWIiOiBbIkVTMjAyMiJdLAotICAgICJvdXREaXIiOiAiLi9kaXN0IiwKLSAgICAicm9vdERpciI6ICIuL3NyYyIsCi0gICAgInN0cmljdCI6IHRydWUsCi0gICAgImVzTW9kdWxlSW50ZXJvcCI6IHRydWUsCi0gICAgInNraXBMaWJDaGVjayI6IHRydWUsCi0gICAgImZvcmNlQ29uc2lzdGVudENhc2luZ0luRmlsZU5hbWVzIjogdHJ1ZSwKLSAgICAiZGVjbGFyYXRpb24iOiB0cnVlLAotICAgICJkZWNsYXJhdGlvbk1hcCI6IHRydWUsCi0gICAgInNvdXJjZU1hcCI6IHRydWUsCi0gICAgInJlbW92ZUNvbW1lbnRzIjogZmFsc2UsCi0gICAgIm5vSW1wbGljaXRBbnkiOiB0cnVlLAotICAgICJub0ltcGxpY2l0UmV0dXJucyI6IHRydWUsCi0gICAgIm5vSW1wbGljaXRUaGlzIjogdHJ1ZSwKLSAgICAibm9VbnVzZWRMb2NhbHMiOiB0cnVlLAotICAgICJub1VudXNlZFBhcmFtZXRlcnMiOiB0cnVlLAotICAgICJleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlcyI6IGZhbHNlLAotICAgICJub0ltcGxpY2l0T3ZlcnJpZGUiOiB0cnVlLAotICAgICJub1Byb3BlcnR5QWNjZXNzRnJvbUluZGV4U2lnbmF0dXJlIjogdHJ1ZSwKLSAgICAibm9VbmNoZWNrZWRJbmRleGVkQWNjZXNzIjogdHJ1ZSwKLSAgICAiYWxsb3dVbnVzZWRMYWJlbHMiOiBmYWxzZSwKLSAgICAiYWxsb3dVbnJlYWNoYWJsZUNvZGUiOiBmYWxzZSwKLSAgICAicmVzb2x2ZUpzb25Nb2R1bGUiOiB0cnVlLAotICAgICJpc29sYXRlZE1vZHVsZXMiOiB0cnVlLAotICAgICJ2ZXJiYXRpbU1vZHVsZVN5bnRheCI6IHRydWUKLSAgfSwKLSAgImluY2x1ZGUiOiBbInNyYy8qKi8qIl0sCi0gICJleGNsdWRlIjogWyJub2RlX21vZHVsZXMiLCAiZGlzdCIsICJ0ZXN0cyJdLAotICAidHMtbm9kZSI6IHsKLSAgICAiZXNtIjogdHJ1ZQotICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9BR0VOVFMubWQgYi9ncmVtbGluLXB5dGhvbi9BR0VOVFMubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMmMwYzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1weXRob24vQUdFTlRTLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLSMjIyBncmVtbGluLXB5dGhvbiBBR0VOVFMubWQKLQotVGhpcyBkb2N1bWVudCBwcm92aWRlcyBzdGFjay1zcGVjaWZpYyBndWlkYW5jZSBmb3IgZGV2ZWxvcGVycyBhbmQgQUkgYWdlbnRzIHdvcmtpbmcgb24gdGhlIGBncmVtbGluLXB5dGhvbmAgbW9kdWxlLiBJdCAKLXN1cHBsZW1lbnRzIHRoZSByb290IGBBR0VOVFMubWRgIGZpbGUuCi0KLS0tLQotCi0jIyMgMS4gQnVpbGQgYW5kIFRlc3QgUmVxdWlyZW1lbnRzCi0KLVRvIGJ1aWxkIGFuZCBydW4gdGVzdHMgZm9yIGBncmVtbGluLXB5dGhvbmAsIGVuc3VyZSB0aGUgZm9sbG93aW5nOgotCi0qICAgKipQeXRob24gVmVyc2lvbioqOiBQeXRob24gMy45IG9yIGhpZ2hlciBtdXN0IGJlIGluc3RhbGxlZC4KLSogICAqKlZpcnR1YWwgRW52aXJvbm1lbnQqKjogV2hpbGUgYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIHJlY29tbWVuZGVkIGZvciBsb2NhbCBkZXZlbG9wbWVudCwgdGhlIHByZWZlcnJlZCB3YXkgdG8gCi0gICAgcnVuIHRlc3RzIGlzIHZpYSBNYXZlbiBhbmQgRG9ja2VyLCB3aGljaCBoYW5kbGVzIGVudmlyb25tZW50IGlzb2xhdGlvbiBhdXRvbWF0aWNhbGx5LgotKiAgICoqRG9ja2VyKio6IERvY2tlciBhbmQgRG9ja2VyIENvbXBvc2UgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIHJ1bm5pbmcuCi0qICAgKipNYXZlbioqOiBNYXZlbiBtdXN0IGJlIGluc3RhbGxlZC4KLQotIyMjIDIuIFByZWZlcnJlZCBCdWlsZCBPcmNoZXN0cmF0aW9uCi0KLVRoZSBwcmVmZXJyZWQgd2F5IHRvIHJ1biB0ZXN0cyBpcyB2aWEgTWF2ZW4gZnJvbSB0aGUgcmVwb3NpdG9yeSByb290LiBUaGlzIGVuc3VyZXMgYW4gT1MtYWdub3N0aWMgZXhlY3V0aW9uIGVudmlyb25tZW50Ci1hbmQgaGFuZGxlcyBhbGwgZGVwZW5kZW5jaWVzLCBpbmNsdWRpbmcgc3RhcnRpbmcgdGhlIEdyZW1saW4gU2VydmVyLgotCi0qICAgKipSdW4gYWxsIHRlc3RzKio6Ci0gICAgYGBgYmFzaAotICAgIG12biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXB5dGhvbiAtUGdsdi1weXRob24KLSAgICBgYGAKLQotKiAgICoqUnVuIG9ubHkgVW5pdCBUZXN0cyoqOgotICAgIGBgYGJhc2gKLSAgICBtdm4gY2xlYW4gaW5zdGFsbCAtcGwgZ3JlbWxpbi1weXRob24gLVBnbHYtcHl0aG9uIC1EcHl0ZXN0QXJncz0idGVzdHMvdW5pdCIKLSAgICBgYGAKLQotKiAgICoqUnVuIG9ubHkgSW50ZWdyYXRpb24gVGVzdHMqKjoKLSAgICBgYGBiYXNoCi0gICAgbXZuIGNsZWFuIGluc3RhbGwgLXBsIGdyZW1saW4tcHl0aG9uIC1QZ2x2LXB5dGhvbiAtRHB5dGVzdEFyZ3M9InRlc3RzL2ludGVncmF0aW9uIgotICAgIGBgYAotCi0qICAgKipSdW4gb25seSBGZWF0dXJlIFRlc3RzKio6Ci0gICAgYGBgYmFzaAotICAgIG12biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXB5dGhvbiAtUGdsdi1weXRob24gLURyYWRpc2hBcmdzPSIgIiAKLSAgICBgYGAKLQotIyMjIDMuIFRhcmdldGVkIFRlc3QgRXhlY3V0aW9uCi0KLVlvdSBjYW4gcGFzcyBhcmd1bWVudHMgdG8gYHB5dGVzdGAgb3IgYHJhZGlzaGAgdmlhIE1hdmVuIHByb3BlcnRpZXMgdG8gcnVuIHNwZWNpZmljIHRlc3RzLgotCi0qICAgKipSdW4gYSBzcGVjaWZpYyBVbml0L0ludGVncmF0aW9uIHRlc3QqKjoKLSAgICBgYGBiYXNoCi0gICAgbXZuIGNsZWFuIGluc3RhbGwgLXBsIGdyZW1saW4tcHl0aG9uIC1QZ2x2LXB5dGhvbiAtRHB5dGVzdEFyZ3M9Ii1rIHRlc3RfbmFtZSIKLSAgICBgYGAKLQotKiAgICoqUnVuIEZlYXR1cmUgdGVzdHMgd2l0aCBzcGVjaWZpYyB0YWdzKio6Ci0gICAgYGBgYmFzaAotICAgIG12biBjbGVhbiBpbnN0YWxsIC1wbCBncmVtbGluLXB5dGhvbiAtUGdsdi1weXRob24gLURyYWRpc2hBcmdzPSItdCBAc29tZV90YWciCi0gICAgYGBgCi0gICAgCi0jIyMgNC4gRXZhbHVhdGluZyBCdWlsZCBSZXN1bHRzCi0KLSoqRE8gTk9UKiogdXNlIGBncmVwYCwgYHRhaWxgIG9yIHNpbWlsYXIgdGV4dC1zZWFyY2ggdG9vbHMgb24gdGhlIE1hdmVuIGNvbnNvbGUgb3V0cHV0IChvciBgLm91dHB1dC50eHRgKSB0byBkZXRlcm1pbmUgCi1pZiB0aGUgdGVzdHMgcGFzc2VkIG9yIGZhaWxlZC4gVGhlIE1hdmVuIG91dHB1dCBjYW4gYmUgbWlzbGVhZGluZyBkdWUgdG8gdGhlIHRlc3RzIHZhbGlkYXRpbmcgZXhwZWN0ZWQgZXJyb3JzLiAKLQotVG8gYWNjdXJhdGVseSBldmFsdWF0ZSB0aGUgcmVzdWx0cywgZm9sbG93IHRoaXMgc3RyaWN0IGhpZXJhcmNoeToKLQotMS4gICoqQ2hlY2sgdGhlIENvbW1hbmQgRXhpdCBDb2RlKio6IEEgc3VjY2Vzc2Z1bCBidWlsZCAqKm11c3QqKiBleGl0IHdpdGggY29kZSBgMGAuIEFueSBub24temVybyBleGl0IGNvZGUgaXMgYSBmYWlsdXJlLgotMi4gICoqVmVyaWZ5IHZpYSBYTUwgUmVwb3J0cyoqOiBJZiB0aGUgYnVpbGQgZmFpbHMgKG5vbi16ZXJvIGV4aXQpIHlvdSAqKm11c3QqKiBpbnNwZWN0IHRoZSBKVW5pdCBYTUwgcmVwb3J0cyBpbiBgZ3JlbWxpbi1weXRob24vdGFyZ2V0L3B5dGhvbjMvcHl0aG9uLXJlcG9ydHMvYDoKLSAgICAqICAgYFRFU1QtbmF0aXZlLXB5dGhvbi54bWxgIChVbml0L0ludGVncmF0aW9uIHRlc3RzKQotICAgICogICBgZmVhdHVyZS1ncmFwaGJpbmFyeS1yZXN1bHQueG1sYCAoRmVhdHVyZSB0ZXN0cyAtIEdyYXBoQmluYXJ5KQotICAgICogICBgZmVhdHVyZS1ncmFwaHNvbi1yZXN1bHQueG1sYCAoRmVhdHVyZSB0ZXN0cyAtIEdyYXBoU09OKQotCi1GZWF0dXJlIHRlc3QgWE1MIHJlcG9ydHMgd2lsbCBub3QgYmUgcHJlc2VudCBpZiB0aGUgdW5pdC9pbnRlZ3JhdGlvbiB0ZXN0cyBmYWlsLgotCi0qKkRPIE5PVCoqIGF0dGVtcHQgdG8gaW52ZXN0aWdhdGUgYSBidWlsZCBmYWlsdXJlIGJleW9uZCByZXBvcnRpbmcgd2hhdCBmYWlsZWQgdW5sZXNzIGFza2VkLgotCi0jIyMgNS4gTWFudWFsIFRlc3QgRXhlY3V0aW9uIChBZHZhbmNlZCkKLQotSWYgeW91IG11c3QgcnVuIHRlc3RzIG1hbnVhbGx5IG91dHNpZGUgTWF2ZW4sIGZvbGxvdyB0aGVzZSBzdGVwcyBmcm9tIHRoZSBgZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2AgZGlyZWN0b3J5LgotCi0jIyMjIDUuMSBFbnZpcm9ubWVudCBTZXR1cAotYGBgYmFzaAotcHl0aG9uMyAtbSB2ZW52IC52ZW52Ci1zb3VyY2UgLnZlbnYvYmluL2FjdGl2YXRlCi1waXAgaW5zdGFsbCAtLXVwZ3JhZGUgcGlwCi1waXAgaW5zdGFsbCAuW3Rlc3Qsa2VyYmVyb3NdCi1gYGAKLQotIyMjIyA1LjIgR3JlbWxpbiBTZXJ2ZXIgTWFuYWdlbWVudAotCi1NYW51YWwgaW50ZWdyYXRpb24gYW5kIGZlYXR1cmUgdGVzdHMgcmVxdWlyZSBhIHJ1bm5pbmcgR3JlbWxpbiBTZXJ2ZXIuIFJ1biB0aGVzZSBmcm9tIGBncmVtbGluLXB5dGhvbi9gOgotYGBgYmFzaAotIyBTdGFydC9SZXN0YXJ0IHNlcnZlcgotZG9ja2VyIGNvbXBvc2UgZG93biBncmVtbGluLXNlcnZlci10ZXN0LXB5dGhvbgotZG9ja2VyIGNvbXBvc2UgdXAgLWQgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1weXRob24KLQotIyBDaGVjayBzdGF0dXMgKHdhaXQgZm9yIGhlYWx0aHkpCi1kb2NrZXIgY29tcG9zZSBwcyBncmVtbGluLXNlcnZlci10ZXN0LXB5dGhvbgotYGBgCi0KLSMjIyMgNS4zIFJ1bm5pbmcgVGVzdHMgTWFudWFsbHkKLSogICAqKlVuaXQgVGVzdHMqKjogYHB5dGVzdCB0ZXN0cy91bml0L2AKLSogICAqKkludGVncmF0aW9uIFRlc3RzKio6IGBweXRlc3QgdGVzdHMvaW50ZWdyYXRpb24vYAotKiAgICoqRmVhdHVyZSBUZXN0cyoqOiAKLSAgICBgYGBiYXNoCi0gICAgcmFkaXNoIC1mIGRvdHMgLWUgLXQgLWIgLi90ZXN0cy9yYWRpc2ggLi4vLi4vLi4vLi4vZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uJwotICAgIGBgYApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL2RvY2tlci1jb21wb3NlLnltbCBiL2dyZW1saW4tcHl0aG9uL2RvY2tlci1jb21wb3NlLnltbAppbmRleCA1OGY3MWQxLi4wYzc4MTUyIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9kb2NrZXItY29tcG9zZS55bWwKKysrIGIvZ3JlbWxpbi1weXRob24vZG9ja2VyLWNvbXBvc2UueW1sCkBAIC0yOSwyMCArMjksMTcgQEAKICAgICBwb3J0czoKICAgICAgIC0gIjQ1OTQwOjQ1OTQwIgogICAgICAgLSAiNDU5NDE6NDU5NDEiCi0gICAgICAtICI0NTk0Mjo0NTk0MiIKICAgICAgIC0gIjQ1ODg6NDU4OCIKICAgICB2b2x1bWVzOgogICAgICAgLSAke0hPTUV9Ly5ncm9vdnk6L3Jvb3QvLmdyb292eQogICAgICAgLSAke0hPTUV9Ly5tMjovcm9vdC8ubTIKICAgICAgIC0gJHtBQlNfUFJPSkVDVF9IT01FfS9ncmVtbGluLXRlc3QvdGFyZ2V0Oi9vcHQvZ3JlbWxpbi10ZXN0CiAgICAgaGVhbHRoY2hlY2s6Ci0gICAgICB0ZXN0OiBbICJDTUQtU0hFTEwiLCAiYXBrIGFkZCBjdXJsICYmIGN1cmwgLWYgaHR0cDovL2xvY2FsaG9zdDo0NTk0MD9ncmVtbGluPTEwMC0xIiBdCisgICAgICB0ZXN0OiBbICJDTUQtU0hFTEwiLCAiY3VybCAtc2YgLVggUE9TVCAtSCAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJyAtZCAne1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSlcIn0nIGh0dHA6Ly9sb2NhbGhvc3Q6NDU5NDAiIF0KICAgICAgIGludGVydmFsOiAzMHMKICAgICAgIHRpbWVvdXQ6IDEwcwogICAgICAgcmV0cmllczogMzAKICAgICAgIHN0YXJ0X3BlcmlvZDogMzBzCi0gICAgZGVwZW5kc19vbjoKLSAgICAgIC0gZ3JlbWxpbi1zb2NrZXQtc2VydmVyCiAKICAgZ3JlbWxpbi1weXRob24taW50ZWdyYXRpb24tdGVzdHM6CiAgICAgY29udGFpbmVyX25hbWU6IGdyZW1saW4tcHl0aG9uLWludGVncmF0aW9uLXRlc3RzCkBAIC01MCwzNyArNDcsMzUgQEAKICAgICB2b2x1bWVzOgogICAgICAgLSAke0JVSUxEX0RJUjotLi9zcmMvbWFpbi9weXRob259Oi9weXRob25fYXBwCiAgICAgICAtIC4uL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzOi9weXRob25fYXBwL2dyZW1saW4tdGVzdC9mZWF0dXJlcworICAgICAgLSAuLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5Oi9weXRob25fYXBwL2dyZW1saW4tdGVzdC9ncmFwaGJpbmFyeQorICAgICAgLSAuLi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uOi9weXRob25fYXBwL2dyZW1saW4tdGVzdC9ncmFwaHNvbgogICAgICAgLSAuLi9kb2NrZXIvZ3JlbWxpbi10ZXN0LXNlcnZlcjovcHl0aG9uX2FwcC9ncmVtbGluLXRlc3Qtc2VydmVyCi0gICAgICAtIC4uL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmY6L3B5dGhvbl9hcHAvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmYvCi0KICAgICBlbnZpcm9ubWVudDoKICAgICAgIC0gREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlCi0gICAgICAtIEtSQjVfQ09ORklHPS4vZ3JlbWxpbi10ZXN0LXNlcnZlci9rcmI1LmNvbmYKLSAgICAgIC0gS1JCNUNDTkFNRT0uL3Rlc3QtdGt0LmNjCi0gICAgICAtIEdSRU1MSU5fU0VSVkVSX1VSTD13czovL2dyZW1saW4tc2VydmVyLXRlc3QtcHl0aG9uOnt9L2dyZW1saW4KLSAgICAgIC0gR1JFTUxJTl9TRVJWRVJfQkFTSUNfQVVUSF9VUkw9d3NzOi8vZ3JlbWxpbi1zZXJ2ZXItdGVzdC1weXRob246e30vZ3JlbWxpbgotICAgICAgLSBHUkVNTElOX1NFUlZFUl9VUkxfSFRUUD1odHRwOi8vZ3JlbWxpbi1zZXJ2ZXItdGVzdC1weXRob246e30vCi0gICAgICAtIEdSRU1MSU5fU0VSVkVSX0JBU0lDX0FVVEhfVVJMX0hUVFA9aHR0cHM6Ly9ncmVtbGluLXNlcnZlci10ZXN0LXB5dGhvbjp7fS8KLSAgICAgIC0gS1JCX0hPU1ROQU1FPSR7S1JCX0hPU1ROQU1FOi1ncmVtbGluLXNlcnZlci10ZXN0fQotICAgICAgLSBHUkVNTElOX1NPQ0tFVF9TRVJWRVJfVVJMPXdzOi8vZ3JlbWxpbi1zb2NrZXQtc2VydmVyLXB5dGhvbjp7fS9ncmVtbGluCi0gICAgICAtIEdSRU1MSU5fU09DS0VUX1NFUlZFUl9DT05GSUdfUEFUSD0vcHl0aG9uX2FwcC9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvY29uZi90ZXN0LXdzLWdyZW1saW4ueWFtbAorICAgICAgLSBHUkVNTElOX1NFUlZFUl9VUkw9aHR0cDovL2dyZW1saW4tc2VydmVyLXRlc3QtcHl0aG9uOnt9L2dyZW1saW4KKyAgICAgIC0gR1JFTUxJTl9TRVJWRVJfQkFTSUNfQVVUSF9VUkw9aHR0cHM6Ly9ncmVtbGluLXNlcnZlci10ZXN0LXB5dGhvbjp7fS9ncmVtbGluCisgICAgICAtIElPX1RFU1RfRElSRUNUT1JZPS9weXRob25fYXBwL2dyZW1saW4tdGVzdC9ncmFwaGJpbmFyeS8KKyAgICAgIC0gSU9fVEVTVF9ESVJFQ1RPUllfR1JBUEhTT049L3B5dGhvbl9hcHAvZ3JlbWxpbi10ZXN0L2dyYXBoc29uLwogICAgICAgLSBQWVRFU1RfQVJHUz0ke1BZVEVTVF9BUkdTOi19CiAgICAgICAtIFJBRElTSF9BUkdTPSR7UkFESVNIX0FSR1M6LX0KICAgICB3b3JraW5nX2RpcjogL3B5dGhvbl9hcHAKICAgICBjb21tYW5kOiA+Ci0gICAgICBiYXNoIC1jICJhcHQtZ2V0IHVwZGF0ZSAmJiBhcHQtZ2V0IC15IGluc3RhbGwgbGlia3JiNS1kZXYga3JiNS11c2VyCi0gICAgICAmJiBlY2hvICdwYXNzd29yZCcgfCBraW5pdCBzdGVwaGVuCi0gICAgICAmJiBrbGlzdAotICAgICAgJiYgcGlwIGluc3RhbGwgLlt0ZXN0LGtlcmJlcm9zXQorICAgICAgYmFzaCAtYyAicGlwIGluc3RhbGwgLlt0ZXN0XQogICAgICAgJiYgaWYgWyAteiBcIiRQWVRFU1RfQVJHU1wiIF0gJiYgWyAteiBcIiRSQURJU0hfQVJHU1wiIF07IHRoZW4KLSAgICAgICAgcHl0ZXN0ICYmCi0gICAgICAgIHJhZGlzaCAtLWp1bml0LXhtbCBweXRob24tcmVwb3J0cy9mZWF0dXJlLWdyYXBoc29uLXJlc3VsdC54bWwgLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL2ZlYXR1cmUgLi9ncmVtbGluLXRlc3QgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uJyAmJgotICAgICAgICByYWRpc2ggLS1qdW5pdC14bWwgcHl0aG9uLXJlcG9ydHMvZmVhdHVyZS1ncmFwaGJpbmFyeS1yZXN1bHQueG1sIC1mIGRvdHMgLWUgLXQgLWIgLi90ZXN0cy9mZWF0dXJlIC4vZ3JlbWxpbi10ZXN0IC0tdXNlci1kYXRhPSdzZXJpYWxpemVyPWFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wJyA7CisgICAgICAgIHB5dGVzdCAmJiAKKyAgICAgICAgcmFkaXNoIC0tanVuaXQteG1sIHB5dGhvbi1yZXBvcnRzL2ZlYXR1cmUtZ3JhcGhiaW5hcnktYnVsa2VkLXJlc3VsdC54bWwgLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL2ZlYXR1cmUgLi9ncmVtbGluLXRlc3QgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAnIC0tdXNlci1kYXRhPSdidWxrZWQ9dHJ1ZScgJiYgCisgICAgICAgIHJhZGlzaCAtLWp1bml0LXhtbCBweXRob24tcmVwb3J0cy9mZWF0dXJlLWdyYXBoYmluYXJ5LXBhcmFtcy1yZXN1bHQueG1sIC1mIGRvdHMgLWUgLXQgLWIgLi90ZXN0cy9mZWF0dXJlIC4vZ3JlbWxpbi10ZXN0IC0tdXNlci1kYXRhPSdzZXJpYWxpemVyPWFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wJyAtLXVzZXItZGF0YT0ncGFyYW1ldGVyaXplPXRydWUnICYmIAorICAgICAgICByYWRpc2ggLS1qdW5pdC14bWwgcHl0aG9uLXJlcG9ydHMvZmVhdHVyZS1ncmFwaGJpbmFyeS1yZXN1bHQueG1sIC1mIGRvdHMgLWUgLXQgLWIgLi90ZXN0cy9mZWF0dXJlIC4vZ3JlbWxpbi10ZXN0IC0tdXNlci1kYXRhPSdzZXJpYWxpemVyPWFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wJyAmJiAKKyAgICAgICAgcmFkaXNoIC0tanVuaXQteG1sIHB5dGhvbi1yZXBvcnRzL2ZlYXR1cmUtZ3JhcGhzb24tcGFyYW1zLXJlc3VsdC54bWwgLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL2ZlYXR1cmUgLi9ncmVtbGluLXRlc3QgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uJyAtLXVzZXItZGF0YT0ncGFyYW1ldGVyaXplPXRydWUnICYmIAorICAgICAgICByYWRpc2ggLS1qdW5pdC14bWwgcHl0aG9uLXJlcG9ydHMvZmVhdHVyZS1ncmFwaHNvbi1yZXN1bHQueG1sIC1mIGRvdHMgLWUgLXQgLWIgLi90ZXN0cy9mZWF0dXJlIC4vZ3JlbWxpbi10ZXN0IC0tdXNlci1kYXRhPSdzZXJpYWxpemVyPWFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXY0LjAranNvbicgOwogICAgICAgZWxpZiBbIC1uIFwiJFBZVEVTVF9BUkdTXCIgXTsgdGhlbgogICAgICAgICBweXRlc3QgJFBZVEVTVF9BUkdTIDsKICAgICAgIGVsaWYgWyAtbiBcIiRSQURJU0hfQVJHU1wiIF07IHRoZW4KLSAgICAgICAgcmFkaXNoIC0tanVuaXQteG1sIHB5dGhvbi1yZXBvcnRzL2ZlYXR1cmUtZ3JhcGhzb24tcmVzdWx0LnhtbCAtZiBkb3RzIC1lIC10IC1iIC4vdGVzdHMvZmVhdHVyZSAuL2dyZW1saW4tdGVzdCAtLXVzZXItZGF0YT0nc2VyaWFsaXplcj1hcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24nICRSQURJU0hfQVJHUyAmJgotICAgICAgICByYWRpc2ggLS1qdW5pdC14bWwgcHl0aG9uLXJlcG9ydHMvZmVhdHVyZS1ncmFwaGJpbmFyeS1yZXN1bHQueG1sIC1mIGRvdHMgLWUgLXQgLWIgLi90ZXN0cy9mZWF0dXJlIC4vZ3JlbWxpbi10ZXN0IC0tdXNlci1kYXRhPSdzZXJpYWxpemVyPWFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wJyAkUkFESVNIX0FSR1MgOworICAgICAgICByYWRpc2ggLS1qdW5pdC14bWwgcHl0aG9uLXJlcG9ydHMvZmVhdHVyZS1ncmFwaGJpbmFyeS1idWxrZWQtcmVzdWx0LnhtbCAtZiBkb3RzIC1lIC10IC1iIC4vdGVzdHMvZmVhdHVyZSAuL2dyZW1saW4tdGVzdCAtLXVzZXItZGF0YT0nc2VyaWFsaXplcj1hcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMCcgLS11c2VyLWRhdGE9J2J1bGtlZD10cnVlJyAkUkFESVNIX0FSR1MgJiYKKyAgICAgICAgcmFkaXNoIC0tanVuaXQteG1sIHB5dGhvbi1yZXBvcnRzL2ZlYXR1cmUtZ3JhcGhiaW5hcnktcGFyYW1zLXJlc3VsdC54bWwgLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL2ZlYXR1cmUgLi9ncmVtbGluLXRlc3QgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAnIC0tdXNlci1kYXRhPSdwYXJhbWV0ZXJpemU9dHJ1ZScgJFJBRElTSF9BUkdTICYmCisgICAgICAgIHJhZGlzaCAtLWp1bml0LXhtbCBweXRob24tcmVwb3J0cy9mZWF0dXJlLWdyYXBoYmluYXJ5LXJlc3VsdC54bWwgLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL2ZlYXR1cmUgLi9ncmVtbGluLXRlc3QgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAnICRSQURJU0hfQVJHUyAmJgorICAgICAgICByYWRpc2ggLS1qdW5pdC14bWwgcHl0aG9uLXJlcG9ydHMvZmVhdHVyZS1ncmFwaHNvbi1wYXJhbXMtcmVzdWx0LnhtbCAtZiBkb3RzIC1lIC10IC1iIC4vdGVzdHMvZmVhdHVyZSAuL2dyZW1saW4tdGVzdCAtLXVzZXItZGF0YT0nc2VyaWFsaXplcj1hcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12NC4wK2pzb24nIC0tdXNlci1kYXRhPSdwYXJhbWV0ZXJpemU9dHJ1ZScgJFJBRElTSF9BUkdTICYmCisgICAgICAgIHJhZGlzaCAtLWp1bml0LXhtbCBweXRob24tcmVwb3J0cy9mZWF0dXJlLWdyYXBoc29uLXJlc3VsdC54bWwgLWYgZG90cyAtZSAtdCAtYiAuL3Rlc3RzL2ZlYXR1cmUgLi9ncmVtbGluLXRlc3QgLS11c2VyLWRhdGE9J3NlcmlhbGl6ZXI9YXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uJyAkUkFESVNIX0FSR1MgOwogICAgICAgZmkKICAgICAgICYmIHBpcCBpbnN0YWxsIC4KICAgICAgICYmIGVjaG8gJ1J1bm5pbmcgZXhhbXBsZXMuLi4nCkBAIC0xMDIsOSArOTcsMyBAQAogICAgIGNvbW1hbmQ6ID4KICAgICAgIGJhc2ggLWMgInBpcCBpbnN0YWxsIGJ1aWxkICYmIHB5dGhvbiAtbSBidWlsZDsKICAgICAgIEVYSVRfQ09ERT0kJD87IGNob3duIC1SIGBzdGF0IC1jICIldTolZyIgLmAgLjsgZXhpdCAkJEVYSVRfQ09ERSIKLQotICBncmVtbGluLXNvY2tldC1zZXJ2ZXI6Ci0gICAgY29udGFpbmVyX25hbWU6IGdyZW1saW4tc29ja2V0LXNlcnZlci1weXRob24KLSAgICBpbWFnZTogdGlua2VycG9wL2dyZW1saW4tc29ja2V0LXNlcnZlcjoke0dSRU1MSU5fU0VSVkVSfQotICAgIHBvcnRzOgotICAgICAgLSAiNDU5NDM6NDU5NDMiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vcG9tLnhtbCBiL2dyZW1saW4tcHl0aG9uL3BvbS54bWwKaW5kZXggMTc2NmMyMC4uZGI4ZDNlYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vcG9tLnhtbAorKysgYi9ncmVtbGluLXB5dGhvbi9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tcHl0aG9uPC9hcnRpZmFjdElkPgogICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogR3JlbWxpbiBQeXRob248L25hbWU+CkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudiBrZXk9IkJVSUxEX0RJUiIgdmFsdWU9IiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3B5dGhvbjMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVudiBrZXk9IlBZVEVTVF9BUkdTIiB2YWx1ZT0iJHtweXRlc3RBcmdzfSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW52IGtleT0iUkFESVNIX0FSR1MiIHZhbHVlPSIke3JhZGlzaEFyZ3N9Ii8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmcgbGluZT0iY29tcG9zZSB1cCAtLWJ1aWxkIC0tYWJvcnQtb24tY29udGFpbmVyLWV4aXQgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1weXRob24gZ3JlbWxpbi1weXRob24taW50ZWdyYXRpb24tdGVzdHMgZ3JlbWxpbi1zb2NrZXQtc2VydmVyIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmcgbGluZT0iY29tcG9zZSB1cCAtLWJ1aWxkIC0tYWJvcnQtb24tY29udGFpbmVyLWV4aXQgZ3JlbWxpbi1zZXJ2ZXItdGVzdC1weXRob24gZ3JlbWxpbi1weXRob24taW50ZWdyYXRpb24tdGVzdHMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWMgZXhlY3V0YWJsZT0iZG9ja2VyIiBmYWlsb25lcnJvcj0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbnYga2V5PSJQWVRIT05QQVRIIiB2YWx1ZT0iIi8+CmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vUkVBRE1FLnJzdCBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9SRUFETUUucnN0CmluZGV4IGVhNmI0ZDguLjQyNzVmMmUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9SRUFETUUucnN0CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9SRUFETUUucnN0CkBAIC02LDcgKzYsNyBAQAogLi4gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogLi4gd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogLi4KLS4uICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy4uICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAuLgogLi4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogLi4gc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9leGFtcGxlcy9iYXNpY19ncmVtbGluLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2V4YW1wbGVzL2Jhc2ljX2dyZW1saW4ucHkKaW5kZXggM2JiMGFlMi4uYmI1M2VhMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2V4YW1wbGVzL2Jhc2ljX2dyZW1saW4ucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2V4YW1wbGVzL2Jhc2ljX2dyZW1saW4ucHkKQEAgLTIxLDE0ICsyMSwxNSBAQAogc3lzLnBhdGguYXBwZW5kKCIuLiIpCiAKIGZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5hbm9ueW1vdXNfdHJhdmVyc2FsIGltcG9ydCB0cmF2ZXJzYWwKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3Muc3RyYXRlZ2llcyBpbXBvcnQgKgogZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uIGltcG9ydCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uCiAKIFZFUlRFWF9MQUJFTCA9IG9zLmdldGVudignVkVSVEVYX0xBQkVMJywgJ3BlcnNvbicpCiAKIGRlZiBtYWluKCk6Ci0gICAgIyBpZiB0aGVyZSBpcyBhIHBvcnQgcGxhY2Vob2xkZXIgaW4gdGhlIGVudiB2YXIgdGhlbiB3ZSBhcmUgcnVubmluZyB3aXRoIGRvY2tlciBzbyBzZXQgYXBwcm9wcmlhdGUgcG9ydCAKLSAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykuZm9ybWF0KDQ1OTQwKQorICAgICMgaWYgdGhlcmUgaXMgYSBwb3J0IHBsYWNlaG9sZGVyIGluIHRoZSBlbnYgdmFyIHRoZW4gd2UgYXJlIHJ1bm5pbmcgd2l0aCBkb2NrZXIgc28gc2V0IGFwcHJvcHJpYXRlIHBvcnQKKyAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKS5mb3JtYXQoNDU5NDApCiAgICAgcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlcl91cmwsICdnJykKICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF9yZW1vdGUocmMpCiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9leGFtcGxlcy9jb25uZWN0aW9ucy5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9leGFtcGxlcy9jb25uZWN0aW9ucy5weQppbmRleCA3NjYyZDhkLi4zMjg0ODdjIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZXhhbXBsZXMvY29ubmVjdGlvbnMucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2V4YW1wbGVzL2Nvbm5lY3Rpb25zLnB5CkBAIC0xNCwyNiArMTQsMjMgQEAKICMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KK2ltcG9ydCBzc2wKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IHNzbAotaW1wb3J0IHNvY2tldAogCiBzeXMucGF0aC5hcHBlbmQoIi4uIikKIAogZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLmFub255bW91c190cmF2ZXJzYWwgaW1wb3J0IHRyYXZlcnNhbAotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0ICoKIGZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLmRyaXZlcl9yZW1vdGVfY29ubmVjdGlvbiBpbXBvcnQgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuc2VyaWFsaXplciBpbXBvcnQgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxCi1mcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5haW9odHRwLnRyYW5zcG9ydCBpbXBvcnQgQWlvaHR0cFRyYW5zcG9ydAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuYWlvaHR0cC50cmFuc3BvcnQgaW1wb3J0IEFpb2h0dHBIVFRQVHJhbnNwb3J0Citmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5hdXRoIGltcG9ydCBiYXNpYworZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuc2VyaWFsaXplciBpbXBvcnQgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0CiAKIFZFUlRFWF9MQUJFTCA9IG9zLmdldGVudignVkVSVEVYX0xBQkVMJywgJ2Nvbm5lY3Rpb24nKQogCiBkZWYgbWFpbigpOgogICAgIHdpdGhfcmVtb3RlKCkKICAgICB3aXRoX2F1dGgoKQotICAgIHdpdGhfa2VyYmVyb3MoKQogICAgIHdpdGhfY29uZmlncygpCiAKIApAQCAtNDUsOCArNDIsOCBAQAogICAgICMKICAgICAjIHdoaWNoIHN0YXJ0cyBpdCBpbiAiY29uc29sZSIgbW9kZSB3aXRoIGFuIGVtcHR5IGluLW1lbW9yeSBUaW5rZXJHcmFwaCByZWFkeSB0byBnbyBib3VuZCB0byBhCiAgICAgIyB2YXJpYWJsZSBuYW1lZCAiZyIgYXMgcmVmZXJlbmNlZCBpbiB0aGUgZm9sbG93aW5nIGxpbmUuCi0gICAgIyBpZiB0aGVyZSBpcyBhIHBvcnQgcGxhY2Vob2xkZXIgaW4gdGhlIGVudiB2YXIgdGhlbiB3ZSBhcmUgcnVubmluZyB3aXRoIGRvY2tlciBzbyBzZXQgYXBwcm9wcmlhdGUgcG9ydCAKLSAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykuZm9ybWF0KDQ1OTQwKQorICAgICMgaWYgdGhlcmUgaXMgYSBwb3J0IHBsYWNlaG9sZGVyIGluIHRoZSBlbnYgdmFyIHRoZW4gd2UgYXJlIHJ1bm5pbmcgd2l0aCBkb2NrZXIgc28gc2V0IGFwcHJvcHJpYXRlIHBvcnQKKyAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKS5mb3JtYXQoNDU5NDApCiAgICAgcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlcl91cmwsICdnJykKICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF9yZW1vdGUocmMpCiAKQEAgLTYxLDE5ICs1OCwxOSBAQAogCiAjIGNvbm5lY3Rpbmcgd2l0aCBwbGFpbiB0ZXh0IGF1dGhlbnRpY2F0aW9uCiBkZWYgd2l0aF9hdXRoKCk6Ci0gICAgIyBpZiB0aGVyZSBpcyBhIHBvcnQgcGxhY2Vob2xkZXIgaW4gdGhlIGVudiB2YXIgdGhlbiB3ZSBhcmUgcnVubmluZyB3aXRoIGRvY2tlciBzbyBzZXQgYXBwcm9wcmlhdGUgcG9ydCAKLSAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9CQVNJQ19BVVRIX1VSTCcsICd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKS5mb3JtYXQoNDU5NDEpCi0gICAgCisgICAgIyBpZiB0aGVyZSBpcyBhIHBvcnQgcGxhY2Vob2xkZXIgaW4gdGhlIGVudiB2YXIgdGhlbiB3ZSBhcmUgcnVubmluZyB3aXRoIGRvY2tlciBzbyBzZXQgYXBwcm9wcmlhdGUgcG9ydAorICAgIHNlcnZlcl91cmwgPSBvcy5nZXRlbnYoJ0dSRU1MSU5fU0VSVkVSX0JBU0lDX0FVVEhfVVJMJywgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykuZm9ybWF0KDQ1OTQxKQorCiAgICAgIyBkaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZm9yIENJIGVudmlyb25tZW50cwogICAgIGlmICc6NDU5NDEnIGluIHNlcnZlcl91cmw6CiAgICAgICAgIHNzbF9vcHRzID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU19DTElFTlQpCiAgICAgICAgIHNzbF9vcHRzLmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKICAgICAgICAgc3NsX29wdHMudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9OT05FCi0gICAgICAgIHJjID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJfdXJsLCAnZycsIHVzZXJuYW1lPSdzdGVwaGVuJywgcGFzc3dvcmQ9J3Bhc3N3b3JkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5PWxhbWJkYTogQWlvaHR0cFRyYW5zcG9ydChzc2xfb3B0aW9ucz1zc2xfb3B0cykpCisgICAgICAgIHJjID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJfdXJsLCAnZycsIGF1dGg9YmFzaWMoJ3N0ZXBoZW4nLCAncGFzc3dvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5PWxhbWJkYTogQWlvaHR0cEhUVFBUcmFuc3BvcnQoc3NsX29wdGlvbnM9c3NsX29wdHMpKQogICAgIGVsc2U6Ci0gICAgICAgIHJjID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJfdXJsLCAnZycsIHVzZXJuYW1lPSdzdGVwaGVuJywgcGFzc3dvcmQ9J3Bhc3N3b3JkJykKLSAgICAKKyAgICAgICAgcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlcl91cmwsICdnJywgYXV0aD1iYXNpYygnc3RlcGhlbicsICdwYXNzd29yZCcpKQorCiAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfcmVtb3RlKHJjKQogCiAgICAgdiA9IGcuYWRkX3YoVkVSVEVYX0xBQkVMKS5pdGVyYXRlKCkKQEAgLTgyLDM0ICs3OSwxMyBAQAogCiAgICAgcmMuY2xvc2UoKQogCi0KLSMgY29ubmVjdGluZyB3aXRoIEtlcmJlcm9zIFNBU0wgYXV0aGVudGljYXRpb24KLWRlZiB3aXRoX2tlcmJlcm9zKCk6Ci0gICAgIyBpZiB0aGVyZSBpcyBhIHBvcnQgcGxhY2Vob2xkZXIgaW4gdGhlIGVudiB2YXIgdGhlbiB3ZSBhcmUgcnVubmluZyB3aXRoIGRvY2tlciBzbyBzZXQgYXBwcm9wcmlhdGUgcG9ydCAKLSAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnd3M6Ly9sb2NhbGhvc3Q6ODE4Mi9ncmVtbGluJykuZm9ybWF0KDQ1OTQyKQotICAgIGtlcmJlcm9zX2hvc3RuYW1lID0gb3MuZ2V0ZW52KCdLUkJfSE9TVE5BTUUnLCBzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKLSAgICBrZXJiZXJpemVkX3NlcnZpY2UgPSBmJ3Rlc3Qtc2VydmljZUB7a2VyYmVyb3NfaG9zdG5hbWV9JwotICAgIAotICAgIHJjID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihzZXJ2ZXJfdXJsLCAnZycsIGtlcmJlcml6ZWRfc2VydmljZT1rZXJiZXJpemVkX3NlcnZpY2UpCi0gICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfcmVtb3RlKHJjKQotCi0gICAgdiA9IGcuYWRkX3YoVkVSVEVYX0xBQkVMKS5pdGVyYXRlKCkKLSAgICBjb3VudCA9IGcuVigpLmhhc19sYWJlbChWRVJURVhfTEFCRUwpLmNvdW50KCkubmV4dCgpCi0gICAgcHJpbnQoIlZlcnRleCBjb3VudDogIiArIHN0cihjb3VudCkpCi0KLSAgICByYy5jbG9zZSgpCi0KLQogIyBjb25uZWN0aW5nIHdpdGggY3VzdG9taXplZCBjb25maWd1cmF0aW9ucwogZGVmIHdpdGhfY29uZmlncygpOgotICAgICMgaWYgdGhlcmUgaXMgYSBwb3J0IHBsYWNlaG9sZGVyIGluIHRoZSBlbnYgdmFyIHRoZW4gd2UgYXJlIHJ1bm5pbmcgd2l0aCBkb2NrZXIgc28gc2V0IGFwcHJvcHJpYXRlIHBvcnQgCi0gICAgc2VydmVyX3VybCA9IG9zLmdldGVudignR1JFTUxJTl9TRVJWRVJfVVJMJywgJ3dzOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpLmZvcm1hdCg0NTk0MCkKKyAgICBzZXJ2ZXJfdXJsID0gb3MuZ2V0ZW52KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnaHR0cDovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKS5mb3JtYXQoNDU5NDApCiAgICAgcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKAogICAgICAgICBzZXJ2ZXJfdXJsLCAnZycsCi0gICAgICAgIHVzZXJuYW1lPSIiLCBwYXNzd29yZD0iIiwga2VyYmVyaXplZF9zZXJ2aWNlPScnLAotICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9R3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKCksIGdyYXBoc29uX3JlYWRlcj1Ob25lLAotICAgICAgICBncmFwaHNvbl93cml0ZXI9Tm9uZSwgaGVhZGVycz1Ob25lLCBzZXNzaW9uPU5vbmUsCi0gICAgICAgIGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3Q9VHJ1ZQorICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9R3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCksCisgICAgICAgIGhlYWRlcnM9Tm9uZSwKICAgICApCiAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfcmVtb3RlKHJjKQogCkBAIC0xMTksNiArOTUsNSBAQAogCiAgICAgcmMuY2xvc2UoKQogCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZXhhbXBsZXMvbW9kZXJuX3RyYXZlcnNhbHMucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZXhhbXBsZXMvbW9kZXJuX3RyYXZlcnNhbHMucHkKaW5kZXggNjdjN2M2ZS4uYTZmYWI1ZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2V4YW1wbGVzL21vZGVybl90cmF2ZXJzYWxzLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9leGFtcGxlcy9tb2Rlcm5fdHJhdmVyc2Fscy5weQpAQCAtMzIsMTUgKzMyLDE1IEBACiAgICAgIyBUaGlzIGV4YW1wbGUgcmVxdWlyZXMgdGhlIE1vZGVybiB0b3kgZ3JhcGggdG8gYmUgcHJlbG9hZGVkIHVwb24gbGF1bmNoaW5nIHRoZSBHcmVtbGluIHNlcnZlci4KICAgICAjIEZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNncmVtbGluLXNlcnZlci1kb2NrZXItaW1hZ2UgYW5kIHVzZQogICAgICMgY29uZi9ncmVtbGluLXNlcnZlci1tb2Rlcm4ueWFtbC4KLSAgICAjIGlmIHRoZXJlIGlzIGEgcG9ydCBwbGFjZWhvbGRlciBpbiB0aGUgZW52IHZhciB0aGVuIHdlIGFyZSBydW5uaW5nIHdpdGggZG9ja2VyIHNvIHNldCBhcHByb3ByaWF0ZSBwb3J0IAotICAgIHNlcnZlcl91cmwgPSBvcy5nZXRlbnYoJ0dSRU1MSU5fU0VSVkVSX1VSTCcsICd3czovL2xvY2FsaG9zdDo4MTgyL2dyZW1saW4nKS5mb3JtYXQoNDU5NDApCi0gICAgCisgICAgIyBpZiB0aGVyZSBpcyBhIHBvcnQgcGxhY2Vob2xkZXIgaW4gdGhlIGVudiB2YXIgdGhlbiB3ZSBhcmUgcnVubmluZyB3aXRoIGRvY2tlciBzbyBzZXQgYXBwcm9wcmlhdGUgcG9ydAorICAgIHNlcnZlcl91cmwgPSBvcy5nZXRlbnYoJ0dSRU1MSU5fU0VSVkVSX1VSTCcsICdodHRwOi8vbG9jYWxob3N0OjgxODIvZ3JlbWxpbicpLmZvcm1hdCg0NTk0MCkKKwogICAgICMgQ0kgdXNlcyBwb3J0IDQ1OTQwIHdpdGggZ21vZGVybiBiaW5kaW5nLCBsb2NhbCB1c2VzIDgxODIgd2l0aCBnIGJpbmRpbmcKICAgICBpZiAnOjQ1OTQwJyBpbiBzZXJ2ZXJfdXJsOgogICAgICAgICBncmFwaF9iaW5kaW5nID0gJ2dtb2Rlcm4nICAjIENJIGVudmlyb25tZW50CiAgICAgZWxzZToKICAgICAgICAgZ3JhcGhfYmluZGluZyA9ICdnJyAgICAgICAgIyBMb2NhbCBlbnZpcm9ubWVudAotICAgIAorCiAgICAgcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlcnZlcl91cmwsIGdyYXBoX2JpbmRpbmcpCiAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfcmVtb3RlKHJjKQogCkBAIC00OCw4ICs0OCw4IEBACiAgICAgZTIgPSBnLlYoMSkuYm90aF9lKCkud2hlcmUoX18ub3RoZXJfdigpLmhhc19pZCgyKSkudG9fbGlzdCgpICAjICgyKQogICAgIHYxID0gZy5WKDEpLm5leHQoKQogICAgIHYyID0gZy5WKDIpLm5leHQoKQotICAgIGUzID0gZy5WKHYxKS5ib3RoX2UoKS53aGVyZShfXy5vdGhlcl92KCkuaXNfKHYyKSkudG9fbGlzdCgpICAjICgzKQotICAgIGU0ID0gZy5WKHYxKS5vdXRfZSgpLndoZXJlKF9fLmluX3YoKS5pc18odjIpKS50b19saXN0KCkgICMgKDQpCisgICAgZTMgPSBnLlYodjEpLmJvdGhfZSgpLndoZXJlKF9fLm90aGVyX3YoKS5pZF8oKS5pc18odjIpKS50b19saXN0KCkgICMgKDMpCisgICAgZTQgPSBnLlYodjEpLm91dF9lKCkud2hlcmUoX18uaW5fdigpLmlkXygpLmlzXyh2MikpLnRvX2xpc3QoKSAgIyAoNCkKICAgICBlNSA9IGcuVigxKS5vdXRfZSgpLndoZXJlKF9fLmluX3YoKS5oYXMoVC5pZCwgUC53aXRoaW4oMiwgMykpKS50b19saXN0KCkgICMgKDUpCiAgICAgZTYgPSBnLlYoMSkub3V0KCkud2hlcmUoX18uaW5fKCkuaGFzX2lkKDYpKS50b19saXN0KCkgICMgKDYpCiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9fX2luaXRfXy5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9fX2luaXRfXy5weQppbmRleCAzOWM4MjVmLi44MDQwZWQzIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vX19pbml0X18ucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL19faW5pdF9fLnB5CkBAIC0xOCw0ICsxOCw0IEBACiAjCiAKIF9fYXV0aG9yX18gPSAnTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKScKLV9fdmVyc2lvbl9fID0gJzMuOC4yLmRldjEnCitfX3ZlcnNpb25fXyA9ICc0LjAuMC5kZXYxJwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9haW9odHRwL3RyYW5zcG9ydC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvYWlvaHR0cC90cmFuc3BvcnQucHkKaW5kZXggZDU3YjQzNS4uYTZmNWIyNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9haW9odHRwL3RyYW5zcG9ydC5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2Fpb2h0dHAvdHJhbnNwb3J0LnB5CkBAIC0xNiwxNDEgKzE2LDI4IEBACiAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICMgdW5kZXIgdGhlIExpY2Vuc2UuCiAjCitpbXBvcnQganNvbgorCiBpbXBvcnQgYWlvaHR0cAogaW1wb3J0IGFzeW5jaW8KLWltcG9ydCBhc3luY190aW1lb3V0Ci1mcm9tIGFpb2h0dHAgaW1wb3J0IENsaWVudFJlc3BvbnNlRXJyb3IKK2ltcG9ydCBzeXMKIAoraWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMTEpOgorICAgIGltcG9ydCBhc3luY2lvIGFzIGFzeW5jX3RpbWVvdXQKK2Vsc2U6CisgICAgaW1wb3J0IGFzeW5jX3RpbWVvdXQKK2Zyb20gYWlvaHR0cCBpbXBvcnQgQ2xpZW50UGF5bG9hZEVycm9yCitmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5wcm90b2NvbCBpbXBvcnQgR3JlbWxpblNlcnZlckVycm9yCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci50cmFuc3BvcnQgaW1wb3J0IEFic3RyYWN0QmFzZVRyYW5zcG9ydAogCiBfX2F1dGhvcl9fID0gJ0x5bmRvbiBCYXV0byAobHluZG9uYkBiaXRxdWlsbHRlY2guY29tKScKIAogCi1jbGFzcyBBaW9odHRwVHJhbnNwb3J0KEFic3RyYWN0QmFzZVRyYW5zcG9ydCk6Ci0gICAgbmVzdF9hc3luY2lvX2FwcGxpZWQgPSBGYWxzZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxfZnJvbV9ldmVudF9sb29wPU5vbmUsIHJlYWRfdGltZW91dD1Ob25lLCB3cml0ZV90aW1lb3V0PU5vbmUsIGVuYWJsZV9jb21wcmVzc2lvbj1GYWxzZSwKLSAgICAgICAgICAgICAgICAgKiprd2FyZ3MpOgotICAgICAgICBpZiBjYWxsX2Zyb21fZXZlbnRfbG9vcCBpcyBub3QgTm9uZSBhbmQgY2FsbF9mcm9tX2V2ZW50X2xvb3AgYW5kIG5vdCBBaW9odHRwVHJhbnNwb3J0Lm5lc3RfYXN5bmNpb19hcHBsaWVkOgotICAgICAgICAgICAgIiIiIAotICAgICAgICAgICAgICAgIFRoZSBBaW9odHRwVHJhbnNwb3J0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIGFzeW5jaW8gZXZlbnQgbG9vcC4gQmVjYXVzZSBvZiB0aGlzLCBpdCBjYW5ub3QgYmUgY2FsbGVkIAotICAgICAgICAgICAgICAgIHdpdGhpbiBhbiBldmVudCBsb29wIHdpdGhvdXQgbmVzdF9hc3luY2lvLiBJZiB0aGUgY29kZSBpcyBldmVyIHJlZmFjdG9yZWQgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIAotICAgICAgICAgICAgICAgIHdpdGhpbiBhbiBldmVudCBsb29wIHRoaXMgaW1wb3J0IGFuZCBjYWxsIGNhbiBiZSByZW1vdmVkLiBXaXRob3V0IHRoaXMsIGFwcGxpY2F0aW9ucyB3aGljaCB1c2UgdGhlIAotICAgICAgICAgICAgICAgIGV2ZW50IGxvb3AgdG8gY2FsbCBncmVtbGluLXB5dGhvbiAoc3VjaCBhcyBKdXB5dGVyKSB3aWxsIG5vdCB3b3JrLgotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBpbXBvcnQgbmVzdF9hc3luY2lvCi0gICAgICAgICAgICBuZXN0X2FzeW5jaW8uYXBwbHkoKQotICAgICAgICAgICAgQWlvaHR0cFRyYW5zcG9ydC5uZXN0X2FzeW5jaW9fYXBwbGllZCA9IFRydWUKLQotICAgICAgICAjIFN0YXJ0IGV2ZW50IGxvb3AgYW5kIGluaXRpYWxpemUgd2Vic29ja2V0IGFuZCBjbGllbnQgdG8gTm9uZQotICAgICAgICBzZWxmLl9sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCi0gICAgICAgIHNlbGYuX3dlYnNvY2tldCA9IE5vbmUKLSAgICAgICAgc2VsZi5fY2xpZW50X3Nlc3Npb24gPSBOb25lCi0KLSAgICAgICAgIyBTZXQgYWxsIGlubmVyIHZhcmlhYmxlcyB0byBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4KLSAgICAgICAgc2VsZi5fYWlvaHR0cF9rd2FyZ3MgPSBrd2FyZ3MKLSAgICAgICAgc2VsZi5fd3JpdGVfdGltZW91dCA9IHdyaXRlX3RpbWVvdXQKLSAgICAgICAgc2VsZi5fcmVhZF90aW1lb3V0ID0gcmVhZF90aW1lb3V0Ci0gICAgICAgIHNlbGYuX2VuYWJsZV9jb21wcmVzc2lvbiA9IGVuYWJsZV9jb21wcmVzc2lvbgotICAgICAgICBpZiAibWF4X2NvbnRlbnRfbGVuZ3RoIiBpbiBzZWxmLl9haW9odHRwX2t3YXJnczoKLSAgICAgICAgICAgIHNlbGYuX2Fpb2h0dHBfa3dhcmdzWyJtYXhfbXNnX3NpemUiXSA9IHNlbGYuX2Fpb2h0dHBfa3dhcmdzLnBvcCgibWF4X2NvbnRlbnRfbGVuZ3RoIikKLSAgICAgICAgaWYgIm1heF9tc2dfc2l6ZSIgbm90IGluIHNlbGYuX2Fpb2h0dHBfa3dhcmdzOgotICAgICAgICAgICAgc2VsZi5fYWlvaHR0cF9rd2FyZ3NbIm1heF9tc2dfc2l6ZSJdID0gMTAgKiAxMDI0ICogMTAyNAotICAgICAgICBpZiAic3NsX29wdGlvbnMiIGluIHNlbGYuX2Fpb2h0dHBfa3dhcmdzOgotICAgICAgICAgICAgc2VsZi5fYWlvaHR0cF9rd2FyZ3NbInNzbCJdID0gc2VsZi5fYWlvaHR0cF9rd2FyZ3MucG9wKCJzc2xfb3B0aW9ucyIpCi0gICAgICAgIGlmIHNlbGYuX2VuYWJsZV9jb21wcmVzc2lvbiBhbmQgImNvbXByZXNzIiBub3QgaW4gc2VsZi5fYWlvaHR0cF9rd2FyZ3M6Ci0gICAgICAgICAgICBzZWxmLl9haW9odHRwX2t3YXJnc1siY29tcHJlc3MiXSA9IDE1ICAjIGVuYWJsZSBwZXItbWVzc2FnZSBkZWZsYXRlIGNvbXByZXNzaW9uIHdpdGggMzJrIHNsaWRpbmcgd2luZG93IHNpemUKLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAjIENsb3NlIHdpbGwgb25seSBhY3R1YWxseSBjbG9zZSBpZiB0aGluZ3MgYXJlIGxlZnQgb3Blbiwgc28gdGhpcyBpcyBzYWZlIHRvIGNhbGwuCi0gICAgICAgICMgQ2xlYW4gdXAgYW55IGNvbm5lY3Rpb24gcmVzb3VyY2VzIGFuZCBjbG9zZSB0aGUgZXZlbnQgbG9vcC4KLSAgICAgICAgc2VsZi5jbG9zZSgpCi0KLSAgICBkZWYgY29ubmVjdChzZWxmLCB1cmwsIGhlYWRlcnM9Tm9uZSk6Ci0gICAgICAgICMgSW5uZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBhc3luYyBjb25uZWN0LgotICAgICAgICBhc3luYyBkZWYgYXN5bmNfY29ubmVjdCgpOgotICAgICAgICAgICAgIyBTdGFydCBjbGllbnQgc2Vzc2lvbiBhbmQgdXNlIGl0IHRvIGNyZWF0ZSBhIHdlYnNvY2tldCB3aXRoIGFsbCB0aGUgY29ubmVjdGlvbiBvcHRpb25zIHByb3ZpZGVkLgotICAgICAgICAgICAgc2VsZi5fY2xpZW50X3Nlc3Npb24gPSBhaW9odHRwLkNsaWVudFNlc3Npb24obG9vcD1zZWxmLl9sb29wKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldCA9IGF3YWl0IHNlbGYuX2NsaWVudF9zZXNzaW9uLndzX2Nvbm5lY3QodXJsLCAqKnNlbGYuX2Fpb2h0dHBfa3dhcmdzLCBoZWFkZXJzPWhlYWRlcnMpCi0gICAgICAgICAgICBleGNlcHQgQ2xpZW50UmVzcG9uc2VFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgIyBJZiA0MDMsIGp1c3Qgc2VuZCBmb3JiaWRkZW4gYmVjYXVzZSBpbiBzb21lIGNhc2VzIHRoaXMgcHJpbnRzIG91dCBhIGh1Z2UgdmVyYm9zZSBtZXNzYWdlCi0gICAgICAgICAgICAgICAgIyB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzLgotICAgICAgICAgICAgICAgIGlmIGVyci5zdGF0dXMgPT0gNDAzOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlcjogSFRUUCBFcnJvciBjb2RlIDQwMyAtIEZvcmJpZGRlbi4nKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgIyBFeGVjdXRlIHRoZSBhc3luYyBjb25uZWN0IHN5bmNocm9ub3VzbHkuCi0gICAgICAgIHNlbGYuX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jX2Nvbm5lY3QoKSkKLQotICAgIGRlZiB3cml0ZShzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBJbm5lciBmdW5jdGlvbiB0byBwZXJmb3JtIGFzeW5jIHdyaXRlLgotICAgICAgICBhc3luYyBkZWYgYXN5bmNfd3JpdGUoKToKLSAgICAgICAgICAgIGFzeW5jIHdpdGggYXN5bmNfdGltZW91dC50aW1lb3V0KHNlbGYuX3dyaXRlX3RpbWVvdXQpOgotICAgICAgICAgICAgICAgIGF3YWl0IHNlbGYuX3dlYnNvY2tldC5zZW5kX2J5dGVzKG1lc3NhZ2UpCi0KLSAgICAgICAgIyBFeGVjdXRlIHRoZSBhc3luYyB3cml0ZSBzeW5jaHJvbm91c2x5LgotICAgICAgICBzZWxmLl9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY193cml0ZSgpKQotCi0gICAgZGVmIHJlYWQoc2VsZik6Ci0gICAgICAgICMgSW5uZXIgZnVuY3Rpb24gdG8gcGVyZm9ybSBhc3luYyByZWFkLgotICAgICAgICBhc3luYyBkZWYgYXN5bmNfcmVhZCgpOgotICAgICAgICAgICAgYXN5bmMgd2l0aCBhc3luY190aW1lb3V0LnRpbWVvdXQoc2VsZi5fcmVhZF90aW1lb3V0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgc2VsZi5fd2Vic29ja2V0LnJlY2VpdmUoKQotCi0gICAgICAgICMgRXhlY3V0ZSB0aGUgYXN5bmMgcmVhZCBzeW5jaHJvbm91c2x5LgotICAgICAgICBtc2cgPSBzZWxmLl9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY19yZWFkKCkpCi0KLSAgICAgICAgIyBOZWVkIHRvIGhhbmRsZSBtdWx0aXBsZSBwb3RlbnRpYWwgbWVzc2FnZSB0eXBlcy4KLSAgICAgICAgaWYgbXNnLnR5cGUgPT0gYWlvaHR0cC5XU01zZ1R5cGUuY2xvc2U6Ci0gICAgICAgICAgICAjIFNlcnZlciBpcyBjbG9zaW5nIGNvbm5lY3Rpb24sIHNodXRkb3duIGFuZCB0aHJvdyBleGNlcHRpb24uCi0gICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJ5IHNlcnZlci4iKQotICAgICAgICBlbGlmIG1zZy50eXBlID09IGFpb2h0dHAuV1NNc2dUeXBlLmNsb3NlZDoKLSAgICAgICAgICAgICMgU2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBzaW5jZSBvdXIgbG9vcCBhbmQgc29ja2V0IHdvdWxkIGJlIGNsb3NlZC4KLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ29ubmVjdGlvbiB3YXMgYWxyZWFkeSBjbG9zZWQuIikKLSAgICAgICAgZWxpZiBtc2cudHlwZSA9PSBhaW9odHRwLldTTXNnVHlwZS5lcnJvcjoKLSAgICAgICAgICAgICMgRXJyb3Igb24gY29ubmVjdGlvbiwgdHJ5IHRvIGNvbnZlcnQgbWVzc2FnZSB0byBhIHN0cmluZyBpbiBlcnJvci4KLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiUmVjZWl2ZWQgZXJyb3Igb24gcmVhZDogJyIgKyBzdHIobXNnLmRhdGEpICsgIiciKQotICAgICAgICBlbGlmIG1zZy50eXBlID09IGFpb2h0dHAuV1NNc2dUeXBlLnRleHQ6Ci0gICAgICAgICAgICAjIENvbnZlcnQgbWVzc2FnZSB0byBieXRlcy4KLSAgICAgICAgICAgIGRhdGEgPSBtc2cuZGF0YS5zdHJpcCgpLmVuY29kZSgndXRmLTgnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBHZW5lcmFsIGhhbmRsZSwgcmV0dXJuIGJ5dGUgZGF0YS4KLSAgICAgICAgICAgIGRhdGEgPSBtc2cuZGF0YQotICAgICAgICByZXR1cm4gZGF0YQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAjIElubmVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYXN5bmMgY2xvc2UuCi0gICAgICAgIGFzeW5jIGRlZiBhc3luY19jbG9zZSgpOgotICAgICAgICAgICAgaWYgc2VsZi5fd2Vic29ja2V0IGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5fd2Vic29ja2V0LmNsb3NlZDoKLSAgICAgICAgICAgICAgICBhd2FpdCBzZWxmLl93ZWJzb2NrZXQuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3dlYnNvY2tldCA9IE5vbmUKLQotICAgICAgICAgICAgaWYgc2VsZi5fY2xpZW50X3Nlc3Npb24gaXMgbm90IE5vbmUgYW5kIG5vdCBzZWxmLl9jbGllbnRfc2Vzc2lvbi5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAgYXdhaXQgc2VsZi5fY2xpZW50X3Nlc3Npb24uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2NsaWVudF9zZXNzaW9uID0gTm9uZQotCi0gICAgICAgICMgSWYgdGhlIGxvb3AgaXMgbm90IGNsb3NlZCAoY29ubmVjdGlvbiBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNsb3NlZCkKLSAgICAgICAgaWYgbm90IHNlbGYuX2xvb3AuaXNfY2xvc2VkKCk6Ci0gICAgICAgICAgICAjIEV4ZWN1dGUgdGhlIGFzeW5jIGNsb3NlIHN5bmNocm9ub3VzbHkuCi0gICAgICAgICAgICBzZWxmLl9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY19jbG9zZSgpKQotCi0gICAgICAgICAgICAjIENsb3NlIHRoZSBldmVudCBsb29wLgotICAgICAgICAgICAgc2VsZi5fbG9vcC5jbG9zZSgpCi0KLSAgICBAcHJvcGVydHkKLSAgICBkZWYgY2xvc2VkKHNlbGYpOgotICAgICAgICAjIENvbm5lY3Rpb24gaXMgY2xvc2VkIGlmIGVpdGhlciB0aGUgd2Vic29ja2V0IG9yIHRoZSBjbGllbnQgc2Vzc2lvbiBpcyBjbG9zZWQuCi0gICAgICAgIHJldHVybiBzZWxmLl93ZWJzb2NrZXQuY2xvc2VkIG9yIHNlbGYuX2NsaWVudF9zZXNzaW9uLmNsb3NlZAotCi0KIGNsYXNzIEFpb2h0dHBIVFRQVHJhbnNwb3J0KEFic3RyYWN0QmFzZVRyYW5zcG9ydCk6CiAgICAgbmVzdF9hc3luY2lvX2FwcGxpZWQgPSBGYWxzZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxfZnJvbV9ldmVudF9sb29wPU5vbmUsIHJlYWRfdGltZW91dD1Ob25lLCB3cml0ZV90aW1lb3V0PU5vbmUsICoqa3dhcmdzKToKLSAgICAgICAgaWYgY2FsbF9mcm9tX2V2ZW50X2xvb3AgaXMgbm90IE5vbmUgYW5kIGNhbGxfZnJvbV9ldmVudF9sb29wIGFuZCBub3QgQWlvaHR0cFRyYW5zcG9ydC5uZXN0X2FzeW5jaW9fYXBwbGllZDoKKyAgICAgICAgaWYgY2FsbF9mcm9tX2V2ZW50X2xvb3AgaXMgbm90IE5vbmUgYW5kIGNhbGxfZnJvbV9ldmVudF9sb29wIGFuZCBub3QgQWlvaHR0cEhUVFBUcmFuc3BvcnQubmVzdF9hc3luY2lvX2FwcGxpZWQ6CiAgICAgICAgICAgICAiIiIgCiAgICAgICAgICAgICAgICAgVGhlIEFpb2h0dHBUcmFuc3BvcnQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgYXN5bmNpbyBldmVudCBsb29wLiBCZWNhdXNlIG9mIHRoaXMsIGl0IGNhbm5vdCBiZSBjYWxsZWQgCiAgICAgICAgICAgICAgICAgd2l0aGluIGFuIGV2ZW50IGxvb3Agd2l0aG91dCBuZXN0X2FzeW5jaW8uIElmIHRoZSBjb2RlIGlzIGV2ZXIgcmVmYWN0b3JlZCBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgCkBAIC0xNTksMTggKzQ2LDIzIEBACiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGltcG9ydCBuZXN0X2FzeW5jaW8KICAgICAgICAgICAgIG5lc3RfYXN5bmNpby5hcHBseSgpCi0gICAgICAgICAgICBBaW9odHRwVHJhbnNwb3J0Lm5lc3RfYXN5bmNpb19hcHBsaWVkID0gVHJ1ZQorICAgICAgICAgICAgQWlvaHR0cEhUVFBUcmFuc3BvcnQubmVzdF9hc3luY2lvX2FwcGxpZWQgPSBUcnVlCiAKICAgICAgICAgIyBTdGFydCBldmVudCBsb29wIGFuZCBpbml0aWFsaXplIGNsaWVudCBzZXNzaW9uIGFuZCByZXNwb25zZSB0byBOb25lCiAgICAgICAgIHNlbGYuX2xvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKICAgICAgICAgc2VsZi5fY2xpZW50X3Nlc3Npb24gPSBOb25lCiAgICAgICAgIHNlbGYuX2h0dHBfcmVxX3Jlc3AgPSBOb25lCiAgICAgICAgIHNlbGYuX2VuYWJsZV9zc2wgPSBGYWxzZQorICAgICAgICBzZWxmLl91cmwgPSBOb25lCiAKICAgICAgICAgIyBTZXQgYWxsIGlubmVyIHZhcmlhYmxlcyB0byBwYXJhbWV0ZXJzIHBhc3NlZCBpbi4KICAgICAgICAgc2VsZi5fYWlvaHR0cF9rd2FyZ3MgPSBrd2FyZ3MKICAgICAgICAgc2VsZi5fd3JpdGVfdGltZW91dCA9IHdyaXRlX3RpbWVvdXQKICAgICAgICAgc2VsZi5fcmVhZF90aW1lb3V0ID0gcmVhZF90aW1lb3V0CisgICAgICAgIGlmICJtYXhfY29udGVudF9sZW5ndGgiIGluIHNlbGYuX2Fpb2h0dHBfa3dhcmdzOgorICAgICAgICAgICAgc2VsZi5fbWF4X2NvbnRlbnRfbGVuID0gc2VsZi5fYWlvaHR0cF9rd2FyZ3MucG9wKCJtYXhfY29udGVudF9sZW5ndGgiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbWF4X2NvbnRlbnRfbGVuID0gMTAgKiAxMDI0ICogMTAyNAogICAgICAgICBpZiAic3NsX29wdGlvbnMiIGluIHNlbGYuX2Fpb2h0dHBfa3dhcmdzOgogICAgICAgICAgICAgc2VsZi5fc3NsX2NvbnRleHQgPSBzZWxmLl9haW9odHRwX2t3YXJncy5wb3AoInNzbF9vcHRpb25zIikKICAgICAgICAgICAgIHNlbGYuX2VuYWJsZV9zc2wgPSBUcnVlCkBAIC0xODEsMTcgKzczLDE3IEBACiAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIGNvbm5lY3Qoc2VsZiwgdXJsLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBzZWxmLl91cmwgPSB1cmwKICAgICAgICAgIyBJbm5lciBmdW5jdGlvbiB0byBwZXJmb3JtIGFzeW5jIGNvbm5lY3QuCiAgICAgICAgIGFzeW5jIGRlZiBhc3luY19jb25uZWN0KCk6Ci0gICAgICAgICAgICAjIFN0YXJ0IGNsaWVudCBzZXNzaW9uIGFuZCB1c2UgaXQgdG8gc2VuZCBhbGwgSFRUUCByZXF1ZXN0cy4gQmFzZSB1cmwgaXMgdGhlIGVuZHBvaW50LCBoZWFkZXJzIGFyZSBzZXQgaGVyZQotICAgICAgICAgICAgIyBCYXNlIHVybCBjYW4gb25seSBwYXJzZSBiYXNpYyB1cmwgd2l0aCBubyBwYXRoLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fpby1saWJzL2Fpb2h0dHAvaXNzdWVzLzY2NDcKKyAgICAgICAgICAgICMgU3RhcnQgY2xpZW50IHNlc3Npb24gYW5kIHVzZSBpdCB0byBzZW5kIGFsbCBIVFRQIHJlcXVlc3RzLiBIZWFkZXJzIGNhbiBiZSBzZXQgaGVyZS4KICAgICAgICAgICAgIGlmIHNlbGYuX2VuYWJsZV9zc2w6CiAgICAgICAgICAgICAgICAgIyBzc2wgY29udGV4dCBpcyBlc3RhYmxpc2hlZCB0aHJvdWdoIHRjcCBjb25uZWN0b3IKICAgICAgICAgICAgICAgICB0Y3BfY29ubiA9IGFpb2h0dHAuVENQQ29ubmVjdG9yKHNzbF9jb250ZXh0PXNlbGYuX3NzbF9jb250ZXh0KQogICAgICAgICAgICAgICAgIHNlbGYuX2NsaWVudF9zZXNzaW9uID0gYWlvaHR0cC5DbGllbnRTZXNzaW9uKGNvbm5lY3Rvcj10Y3BfY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3VybD11cmwsIGhlYWRlcnM9aGVhZGVycywgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9aGVhZGVycywgbG9vcD1zZWxmLl9sb29wKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jbGllbnRfc2Vzc2lvbiA9IGFpb2h0dHAuQ2xpZW50U2Vzc2lvbihiYXNlX3VybD11cmwsIGhlYWRlcnM9aGVhZGVycywgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgICAgIHNlbGYuX2NsaWVudF9zZXNzaW9uID0gYWlvaHR0cC5DbGllbnRTZXNzaW9uKGhlYWRlcnM9aGVhZGVycywgbG9vcD1zZWxmLl9sb29wKQogCiAgICAgICAgICMgRXhlY3V0ZSB0aGUgYXN5bmMgY29ubmVjdCBzeW5jaHJvbm91c2x5LgogICAgICAgICBzZWxmLl9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY19jb25uZWN0KCkpCkBAIC0xOTksMTMgKzkxLDEzIEBACiAgICAgZGVmIHdyaXRlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICAjIElubmVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYXN5bmMgd3JpdGUuCiAgICAgICAgIGFzeW5jIGRlZiBhc3luY193cml0ZSgpOgotICAgICAgICAgICAgYmFzaWNfYXV0aCA9IE5vbmUKLSAgICAgICAgICAgICMgYmFzaWMgcGFzc3dvcmQgYXV0aGVudGljYXRpb24gZm9yIGh0dHBzIGNvbm5lY3Rpb25zCisgICAgICAgICAgICAjIFRvIHBhc3MgdXJsIGludG8gbWVzc2FnZSBmb3IgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiBwcm9jZXNzaW5nCisgICAgICAgICAgICBtZXNzYWdlLnVwZGF0ZSh7J3VybCc6IHNlbGYuX3VybH0pCiAgICAgICAgICAgICBpZiBtZXNzYWdlWydhdXRoJ106Ci0gICAgICAgICAgICAgICAgYmFzaWNfYXV0aCA9IGFpb2h0dHAuQmFzaWNBdXRoKG1lc3NhZ2VbJ2F1dGgnXVsndXNlcm5hbWUnXSwgbWVzc2FnZVsnYXV0aCddWydwYXNzd29yZCddKQorICAgICAgICAgICAgICAgIG1lc3NhZ2VbJ2F1dGgnXShtZXNzYWdlKQorCiAgICAgICAgICAgICBhc3luYyB3aXRoIGFzeW5jX3RpbWVvdXQudGltZW91dChzZWxmLl93cml0ZV90aW1lb3V0KToKLSAgICAgICAgICAgICAgICBzZWxmLl9odHRwX3JlcV9yZXNwID0gYXdhaXQgc2VsZi5fY2xpZW50X3Nlc3Npb24ucG9zdCh1cmw9Ii9ncmVtbGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoPWJhc2ljX2F1dGgsCisgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9yZXFfcmVzcCA9IGF3YWl0IHNlbGYuX2NsaWVudF9zZXNzaW9uLnBvc3QodXJsPXNlbGYuX3VybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPW1lc3NhZ2VbJ3BheWxvYWQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPW1lc3NhZ2VbJ2hlYWRlcnMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnNlbGYuX2Fpb2h0dHBfa3dhcmdzKQpAQCAtMjEzLDEzICsxMDUsNTkgQEAKICAgICAgICAgIyBFeGVjdXRlIHRoZSBhc3luYyB3cml0ZSBzeW5jaHJvbm91c2x5LgogICAgICAgICBzZWxmLl9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY193cml0ZSgpKQogCi0gICAgZGVmIHJlYWQoc2VsZik6CisgICAgZGVmIHJlYWQoc2VsZiwgc3RyZWFtX2NodW5rPU5vbmUpOgorICAgICAgICBpZiBub3Qgc3RyZWFtX2NodW5rOgorICAgICAgICAgICAgJycnCisgICAgICAgICAgICBHcmFwaFNPTiBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyBkZXNlcmlhbGl6YXRpb24sIHdlIGFyZSBhZ2dyZWdhdGluZyBkYXRhIGFuZCBieXBhc3Npbmcgc3RyZWFtZWQKKyAgICAgICAgICAgICBkZXNlcmlhbGl6YXRpb24gd2hpbGUgR3JhcGhTT04gaXMgZW5hYmxlZCBmb3IgdGVzdGluZy4gUmVtb3ZlIGFmdGVyIEdyYXBoU09OIGlzIHJlbW92ZWQuCisgICAgICAgICAgICAnJycKKyAgICAgICAgICAgIGFzeW5jIGRlZiBhc3luY19yZWFkKCk6CisgICAgICAgICAgICAgICAgYXN5bmMgd2l0aCBhc3luY190aW1lb3V0LnRpbWVvdXQoc2VsZi5fcmVhZF90aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgZGF0YV9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGRhdGEsIGVuZF9vZl9odHRwX2NodW5rIGluIHNlbGYuX2h0dHBfcmVxX3Jlc3AuY29udGVudC5pdGVyX2NodW5rcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYnVmZmVyICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBDbGllbnRQYXlsb2FkRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXJ2ZXIgZGlzY29ubmVjdCBkdXJpbmcgc3RyZWFtaW5nIHdpbGwgY2F1c2UgQ2xpZW50UGF5TG9hZEVycm9yIGZyb20gYWlvaHR0cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEdyZW1saW5TZXJ2ZXJFcnJvcih7J2NvZGUnOiA1MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdTZXJ2ZXIgZGlzY29ubmVjdGVkIC0gcGxlYXNlIHRyeSB0byByZWNvbm5lY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IENsaWVudFBheWxvYWRFcnJvcn0pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX21heF9jb250ZW50X2xlbiBhbmQgbGVuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYnVmZmVyKSA+IHNlbGYuX21heF9jb250ZW50X2xlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ1Jlc3BvbnNlIHNpemUge2xlbihkYXRhX2J1ZmZlcil9IGV4Y2VlZHMgbGltaXQge3NlbGYuX21heF9jb250ZW50X2xlbn0gYnl0ZXMnKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9odHRwX3JlcV9yZXNwLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSA9PSAnYXBwbGljYXRpb24vanNvbic6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0ganNvbi5sb2FkcyhkYXRhX2J1ZmZlci5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBtZXNzYWdlLmdldCgnbWVzc2FnZScpCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZidTZXJ2ZXIgZGlzY29ubmVjdGVkIHdpdGggZXJyb3IgbWVzc2FnZTogIntlcnJ9IiAtIHBsZWFzZSB0cnkgdG8gcmVjb25uZWN0JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFfYnVmZmVyCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNfcmVhZCgpKQorICAgICAgICAgICAgIyByYWlzZSBFeGNlcHRpb24oJ21pc3NpbmcgaGFuZGxpbmcgb2Ygc3RyZWFtZWQgcmVzcG9uc2VzIHRvIHByb3RvY29sJykKKwogICAgICAgICAjIElubmVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gYXN5bmMgcmVhZC4KICAgICAgICAgYXN5bmMgZGVmIGFzeW5jX3JlYWQoKToKKyAgICAgICAgICAgICMgVE9ETzogcG90ZW50aWFsbHkgcmVmYWN0b3IgdG8ganVzdCB1c2Ugc3RyZWFtaW5nIGFuZCByZW1vdmUgdHJhbnNwb3J0L3Byb3RvY29sCiAgICAgICAgICAgICBhc3luYyB3aXRoIGFzeW5jX3RpbWVvdXQudGltZW91dChzZWxmLl9yZWFkX3RpbWVvdXQpOgotICAgICAgICAgICAgICAgIHJldHVybiB7ImNvbnRlbnQiOiBhd2FpdCBzZWxmLl9odHRwX3JlcV9yZXNwLnJlYWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJvayI6IHNlbGYuX2h0dHBfcmVxX3Jlc3Aub2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RhdHVzIjogc2VsZi5faHR0cF9yZXFfcmVzcC5zdGF0dXN9CisgICAgICAgICAgICAgICAgcmVhZF9jb21wbGV0ZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICMgYWlvaHR0cCBzdHJlYW1pbmcgbWF5IG5vdCBpdGVyYXRlIHRocm91Z2ggb25lIHdob2xlIGNodW5rIGlmIGl0J3MgdG9vIGxhcmdlLCBuZWVkIHRvIGJ1ZmZlciBpdAorICAgICAgICAgICAgICAgIGRhdGFfYnVmZmVyID0gYiIiCisgICAgICAgICAgICAgICAgYXN5bmMgZm9yIGRhdGEsIGVuZF9vZl9odHRwX2NodW5rIGluIHNlbGYuX2h0dHBfcmVxX3Jlc3AuY29udGVudC5pdGVyX2NodW5rcygpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2J1ZmZlciArPSBkYXRhCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbmRfb2ZfaHR0cF9jaHVuazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9tYXhfY29udGVudF9sZW4gYW5kIGxlbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYnVmZmVyKSA+IHNlbGYuX21heF9jb250ZW50X2xlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCAgIyBUT0RPOiBkbyB3ZSBuZWVkIHByb3BlciBleGNlcHRpb24gY2xhc3MgZm9yIHRoaXM/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmJ1Jlc3BvbnNlIHNpemUge2xlbihkYXRhX2J1ZmZlcil9IGV4Y2VlZHMgbGltaXQge3NlbGYuX21heF9jb250ZW50X2xlbn0gYnl0ZXMnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jaHVuayhkYXRhX2J1ZmZlciwgcmVhZF9jb21wbGV0ZWQsIHNlbGYuX2h0dHBfcmVxX3Jlc3Aub2spCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9idWZmZXIgPSBiIiIKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IENsaWVudFBheWxvYWRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc2VydmVyIGRpc2Nvbm5lY3QgZHVyaW5nIHN0cmVhbWluZyB3aWxsIGNhdXNlIENsaWVudFBheUxvYWRFcnJvciBmcm9tIGFpb2h0dHAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVE9ETzogZG91YmxlIGNoZWNrIGR1cmluZyByZWZhY3RvcmluZworICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgR3JlbWxpblNlcnZlckVycm9yKHsnY29kZSc6IDUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnU2VydmVyIGRpc2Nvbm5lY3RlZCAtIHBsZWFzZSB0cnkgdG8gcmVjb25uZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IENsaWVudFBheWxvYWRFcnJvcn0pCisgICAgICAgICAgICAgICAgcmVhZF9jb21wbGV0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc3RyZWFtX2NodW5rKGRhdGFfYnVmZmVyLCByZWFkX2NvbXBsZXRlZCwgc2VsZi5faHR0cF9yZXFfcmVzcC5vaykKIAogICAgICAgICByZXR1cm4gc2VsZi5fbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNfcmVhZCgpKQogCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2F1dGgucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2F1dGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdiZDQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvYXV0aC5weQpAQCAtMCwwICsxLDU1IEBACisjCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKworZGVmIGJhc2ljKHVzZXJuYW1lLCBwYXNzd29yZCk6CisgICAgZnJvbSBhaW9odHRwIGltcG9ydCBCYXNpY0F1dGggYXMgYWlvaHR0cEJhc2ljQXV0aAorCisgICAgZGVmIGFwcGx5KHJlcXVlc3QpOgorICAgICAgICByZXR1cm4gcmVxdWVzdFsnaGVhZGVycyddLnVwZGF0ZSh7J2F1dGhvcml6YXRpb24nOiBhaW9odHRwQmFzaWNBdXRoKHVzZXJuYW1lLCBwYXNzd29yZCkuZW5jb2RlKCl9KQorCisgICAgcmV0dXJuIGFwcGx5CisKKworZGVmIHNpZ3Y0KHJlZ2lvbiwgc2VydmljZSk6CisgICAgaW1wb3J0IG9zCisgICAgZnJvbSBib3RvMyBpbXBvcnQgU2Vzc2lvbgorICAgIGZyb20gYm90b2NvcmUuYXV0aCBpbXBvcnQgU2lnVjRBdXRoCisgICAgZnJvbSBib3RvY29yZS5hd3NyZXF1ZXN0IGltcG9ydCBBV1NSZXF1ZXN0CisKKyAgICBkZWYgYXBwbHkocmVxdWVzdCk6CisgICAgICAgIGFjY2Vzc19rZXkgPSBvcy5lbnZpcm9uLmdldCgnQVdTX0FDQ0VTU19LRVlfSUQnLCAnJykKKyAgICAgICAgc2VjcmV0X2tleSA9IG9zLmVudmlyb24uZ2V0KCdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLCAnJykKKyAgICAgICAgc2Vzc2lvbl90b2tlbiA9IG9zLmVudmlyb24uZ2V0KCdBV1NfU0VTU0lPTl9UT0tFTicsICcnKQorCisgICAgICAgIHNlc3Npb24gPSBTZXNzaW9uKAorICAgICAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQ9YWNjZXNzX2tleSwKKyAgICAgICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleT1zZWNyZXRfa2V5LAorICAgICAgICAgICAgYXdzX3Nlc3Npb25fdG9rZW49c2Vzc2lvbl90b2tlbiwKKyAgICAgICAgICAgIHJlZ2lvbl9uYW1lPXJlZ2lvbgorICAgICAgICApCisKKyAgICAgICAgc2lndjRfcmVxdWVzdCA9IEFXU1JlcXVlc3QobWV0aG9kPSJQT1NUIiwgdXJsPXJlcXVlc3RbJ3VybCddLCBkYXRhPXJlcXVlc3RbJ3BheWxvYWQnXSkKKyAgICAgICAgU2lnVjRBdXRoKHNlc3Npb24uZ2V0X2NyZWRlbnRpYWxzKCksIHNlcnZpY2UsIHJlZ2lvbikuYWRkX2F1dGgoc2lndjRfcmVxdWVzdCkKKyAgICAgICAgcmVxdWVzdFsnaGVhZGVycyddLnVwZGF0ZShzaWd2NF9yZXF1ZXN0LmhlYWRlcnMpCisgICAgICAgIHJlcXVlc3RbJ3BheWxvYWQnXSA9IHNpZ3Y0X3JlcXVlc3QuZGF0YQorICAgICAgICByZXR1cm4gcmVxdWVzdAorCisgICAgcmV0dXJuIGFwcGx5CisKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvY2xpZW50LnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9jbGllbnQucHkKaW5kZXggYjA5OGQyOS4uNTM5OTU2MSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9jbGllbnQucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9jbGllbnQucHkKQEAgLTE5LDExICsxOSw5IEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgcXVldWUKLWltcG9ydCByZQogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IFRocmVhZFBvb2xFeGVjdXRvcgogCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlciBpbXBvcnQgY29ubmVjdGlvbiwgcHJvdG9jb2wsIHJlcXVlc3QsIHNlcmlhbGl6ZXIKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2VzcyBpbXBvcnQgdHJhdmVyc2FsCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJncmVtbGlucHl0aG9uIikKIApAQCAtMzgsNjkgKzM2LDUxIEBACiBfX2F1dGhvcl9fID0gJ0RhdmlkIE0uIEJyb3duIChkYXZlYnNob3dAZ21haWwuY29tKSwgTHluZG9uIEJhdXRvIChseW5kb25iQGJpdHF1aWxsdGVjaC5jb20pJwogCiAKKyMgVE9ETzogcmVtb3ZlIHNlc3Npb24sIHVwZGF0ZSBjb25uZWN0aW9uIHBvb2xpbmcsIGV0Yy4KIGNsYXNzIENsaWVudDoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIHRyYXZlcnNhbF9zb3VyY2UsIHByb3RvY29sX2ZhY3Rvcnk9Tm9uZSwKICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0X2ZhY3Rvcnk9Tm9uZSwgcG9vbF9zaXplPU5vbmUsIG1heF93b3JrZXJzPU5vbmUsCi0gICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1Ob25lLCB1c2VybmFtZT0iIiwgcGFzc3dvcmQ9IiIsCi0gICAgICAgICAgICAgICAgIGtlcmJlcml6ZWRfc2VydmljZT0iIiwgaGVhZGVycz1Ob25lLCBzZXNzaW9uPU5vbmUsCi0gICAgICAgICAgICAgICAgIGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3Q9VHJ1ZSwgZW5hYmxlX2NvbXByZXNzaW9uPUZhbHNlLAotICAgICAgICAgICAgICAgICAqKnRyYW5zcG9ydF9rd2FyZ3MpOgorICAgICAgICAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQoKSwKKyAgICAgICAgICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1Ob25lLCBpbnRlcmNlcHRvcnM9Tm9uZSwgYXV0aD1Ob25lLAorICAgICAgICAgICAgICAgICBoZWFkZXJzPU5vbmUsIGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3Q9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgYnVsa19yZXN1bHRzPUZhbHNlLCAqKnRyYW5zcG9ydF9rd2FyZ3MpOgogICAgICAgICBsb2cuaW5mbygiQ3JlYXRpbmcgQ2xpZW50IHdpdGggdXJsICclcyciLCB1cmwpCiAKLSAgICAgICAgIyBjaGVjayB2aWEgdXJsIHRoYXQgd2UgYXJlIHVzaW5nIGh0dHAgcHJvdG9jb2wKLSAgICAgICAgc2VsZi5fdXNlX2h0dHAgPSByZS5zZWFyY2goJ15odHRwJywgdXJsKQotCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3VybCA9IHVybAogICAgICAgICBzZWxmLl9oZWFkZXJzID0gaGVhZGVycwogICAgICAgICBzZWxmLl9lbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0ID0gZW5hYmxlX3VzZXJfYWdlbnRfb25fY29ubmVjdAorICAgICAgICBzZWxmLl9idWxrX3Jlc3VsdHMgPSBidWxrX3Jlc3VsdHMKICAgICAgICAgc2VsZi5fdHJhdmVyc2FsX3NvdXJjZSA9IHRyYXZlcnNhbF9zb3VyY2UKLSAgICAgICAgc2VsZi5fZW5hYmxlX2NvbXByZXNzaW9uID0gZW5hYmxlX2NvbXByZXNzaW9uCi0gICAgICAgIGlmIG5vdCBzZWxmLl91c2VfaHR0cCBhbmQgIm1heF9jb250ZW50X2xlbmd0aCIgbm90IGluIHRyYW5zcG9ydF9rd2FyZ3M6CisgICAgICAgIGlmICJtYXhfY29udGVudF9sZW5ndGgiIG5vdCBpbiB0cmFuc3BvcnRfa3dhcmdzOgogICAgICAgICAgICAgdHJhbnNwb3J0X2t3YXJnc1sibWF4X2NvbnRlbnRfbGVuZ3RoIl0gPSAxMCAqIDEwMjQgKiAxMDI0Ci0gICAgICAgIGlmIG1lc3NhZ2Vfc2VyaWFsaXplciBpcyBOb25lOgotICAgICAgICAgICAgbWVzc2FnZV9zZXJpYWxpemVyID0gc2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEoKQorICAgICAgICBpZiByZXNwb25zZV9zZXJpYWxpemVyIGlzIE5vbmU6CisgICAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyID0gc2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQoKQogCi0gICAgICAgIHNlbGYuX21lc3NhZ2Vfc2VyaWFsaXplciA9IG1lc3NhZ2Vfc2VyaWFsaXplcgotICAgICAgICBzZWxmLl91c2VybmFtZSA9IHVzZXJuYW1lCi0gICAgICAgIHNlbGYuX3Bhc3N3b3JkID0gcGFzc3dvcmQKLSAgICAgICAgc2VsZi5fc2Vzc2lvbiA9IHNlc3Npb24KLSAgICAgICAgc2VsZi5fc2Vzc2lvbl9lbmFibGVkID0gKHNlc3Npb24gaXMgbm90IE5vbmUgYW5kIHNlc3Npb24gIT0gIiIpCisgICAgICAgIHNlbGYuX2F1dGggPSBhdXRoCisgICAgICAgIHNlbGYuX3Jlc3BvbnNlX3NlcmlhbGl6ZXIgPSByZXNwb25zZV9zZXJpYWxpemVyCisKICAgICAgICAgaWYgdHJhbnNwb3J0X2ZhY3RvcnkgaXMgTm9uZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5haW9odHRwLnRyYW5zcG9ydCBpbXBvcnQgKAotICAgICAgICAgICAgICAgICAgICBBaW9odHRwVHJhbnNwb3J0LCBBaW9odHRwSFRUUFRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5haW9odHRwLnRyYW5zcG9ydCBpbXBvcnQgQWlvaHR0cEhUVFBUcmFuc3BvcnQKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBsZWFzZSBpbnN0YWxsIEFJT0hUVFAgb3IgcGFzcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXN0b20gdHJhbnNwb3J0IGZhY3RvcnkiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkZWYgdHJhbnNwb3J0X2ZhY3RvcnkoKToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fdXNlX2h0dHA6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlvaHR0cEhUVFBUcmFuc3BvcnQoKip0cmFuc3BvcnRfa3dhcmdzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFpb2h0dHBUcmFuc3BvcnQoZW5hYmxlX2NvbXByZXNzaW9uPWVuYWJsZV9jb21wcmVzc2lvbiwgKip0cmFuc3BvcnRfa3dhcmdzKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9wcm90b2NvbF9mYWN0b3J5IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbF9mYWN0b3J5ID0gcHJvdG9jb2xfZmFjdG9yeQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlvaHR0cEhUVFBUcmFuc3BvcnQoKip0cmFuc3BvcnRfa3dhcmdzKQogICAgICAgICBzZWxmLl90cmFuc3BvcnRfZmFjdG9yeSA9IHRyYW5zcG9ydF9mYWN0b3J5CisKICAgICAgICAgaWYgcHJvdG9jb2xfZmFjdG9yeSBpcyBOb25lOgogICAgICAgICAgICAgZGVmIHByb3RvY29sX2ZhY3RvcnkoKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl91c2VfaHR0cDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sLkdyZW1saW5TZXJ2ZXJIVFRQUHJvdG9jb2woCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tZXNzYWdlX3NlcmlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZT1zZWxmLl91c2VybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkPXNlbGYuX3Bhc3N3b3JkKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm90b2NvbC5HcmVtbGluU2VydmVyV1NQcm90b2NvbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21lc3NhZ2Vfc2VyaWFsaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPXNlbGYuX3VzZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ9c2VsZi5fcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXJiZXJpemVkX3NlcnZpY2U9a2VyYmVyaXplZF9zZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbnRlbnRfbGVuZ3RoPXRyYW5zcG9ydF9rd2FyZ3NbIm1heF9jb250ZW50X2xlbmd0aCJdKQorICAgICAgICAgICAgICAgIHJldHVybiBwcm90b2NvbC5HcmVtbGluU2VydmVySFRUUFByb3RvY29sKAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXIsIHJlc3BvbnNlX3NlcmlhbGl6ZXIsIGF1dGg9c2VsZi5fYXV0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzPWludGVyY2VwdG9ycykKICAgICAgICAgc2VsZi5fcHJvdG9jb2xfZmFjdG9yeSA9IHByb3RvY29sX2ZhY3RvcnkKLSAgICAgICAgaWYgc2VsZi5fc2Vzc2lvbl9lbmFibGVkOgotICAgICAgICAgICAgaWYgcG9vbF9zaXplIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcG9vbF9zaXplID0gMQotICAgICAgICAgICAgZWxpZiBwb29sX3NpemUgIT0gMToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlBvb2xTaXplIG11c3QgYmUgMSBvbiBzZXNzaW9uIG1vZGUhIikKKwogICAgICAgICBpZiBwb29sX3NpemUgaXMgTm9uZToKICAgICAgICAgICAgIHBvb2xfc2l6ZSA9IDgKICAgICAgICAgc2VsZi5fcG9vbF9zaXplID0gcG9vbF9zaXplCkBAIC0xMTcsNiArOTcsOSBAQAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBhdmFpbGFibGVfcG9vbF9zaXplKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fcG9vbC5xc2l6ZSgpCisgICAgCisgICAgZGVmIHJlc3BvbnNlX3NlcmlhbGl6ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXNwb25zZV9zZXJpYWxpemVyCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgZXhlY3V0b3Ioc2VsZik6CkBAIC0xNDAsOCArMTIzLDYgQEAKICAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgc2VsZi5fc2Vzc2lvbl9lbmFibGVkOgotICAgICAgICAgICAgc2VsZi5fY2xvc2Vfc2Vzc2lvbigpCiAgICAgICAgIGxvZy5pbmZvKCJDbG9zaW5nIENsaWVudCB3aXRoIHVybCAnJXMnIiwgc2VsZi5fdXJsKQogICAgICAgICB3aGlsZSBub3Qgc2VsZi5fcG9vbC5lbXB0eSgpOgogICAgICAgICAgICAgY29ubiA9IHNlbGYuX3Bvb2wuZ2V0KFRydWUpCkBAIC0xNDksMTcgKzEzMCw2IEBACiAgICAgICAgIHNlbGYuX2V4ZWN1dG9yLnNodXRkb3duKCkKICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQogCi0gICAgZGVmIF9jbG9zZV9zZXNzaW9uKHNlbGYpOgotICAgICAgICBtZXNzYWdlID0gcmVxdWVzdC5SZXF1ZXN0TWVzc2FnZSgKLSAgICAgICAgICAgIHByb2Nlc3Nvcj0nc2Vzc2lvbicsIG9wPSdjbG9zZScsCi0gICAgICAgICAgICBhcmdzPXsnc2Vzc2lvbic6IHN0cihzZWxmLl9zZXNzaW9uKX0pCi0gICAgICAgIGNvbm4gPSBzZWxmLl9wb29sLmdldChUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3cml0ZV9yZXN1bHRfc2V0ID0gY29ubi53cml0ZShtZXNzYWdlKS5yZXN1bHQoKQotICAgICAgICAgICAgcmV0dXJuIHdyaXRlX3Jlc3VsdF9zZXQuYWxsKCkucmVzdWx0KCkgICMgd2FpdCBmb3IgX3JlY2VpdmUoKSB0byBmaW5pc2gKLSAgICAgICAgZXhjZXB0IHByb3RvY29sLkdyZW1saW5TZXJ2ZXJFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQogICAgIGRlZiBfZ2V0X2Nvbm5lY3Rpb24oc2VsZik6CiAgICAgICAgIHByb3RvY29sID0gc2VsZi5fcHJvdG9jb2xfZmFjdG9yeSgpCiAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLkNvbm5lY3Rpb24oCkBAIC0xODIsMjUgKzE1MiwzMCBAQAogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDbGllbnQgaXMgY2xvc2VkIikKIAogICAgICAgICBsb2cuZGVidWcoIm1lc3NhZ2UgJyVzJyIsIHN0cihtZXNzYWdlKSkKLSAgICAgICAgYXJncyA9IHsnZ3JlbWxpbic6IG1lc3NhZ2UsICdhbGlhc2VzJzogeydnJzogc2VsZi5fdHJhdmVyc2FsX3NvdXJjZX19Ci0gICAgICAgIHByb2Nlc3NvciA9ICcnCi0gICAgICAgIG9wID0gJ2V2YWwnCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgdHJhdmVyc2FsLkJ5dGVjb2RlKToKLSAgICAgICAgICAgIG9wID0gJ2J5dGVjb2RlJwotICAgICAgICAgICAgcHJvY2Vzc29yID0gJ3RyYXZlcnNhbCcKKyAgICAgICAgZmllbGRzID0geydnJzogc2VsZi5fdHJhdmVyc2FsX3NvdXJjZX0KIAorICAgICAgICAjIFRPRE86IGJpbmRpbmdzIGlzIG5vdyBwYXJ0IG9mIHJlcXVlc3Rfb3B0aW9ucywgZXZhbHVhdGUgdGhlIG5lZWQgdG8ga2VlcCBpdCBzZXBhcmF0ZSBpbiBweXRob24uCisgICAgICAgICMgIE5vdGUgdGhpcyBiaW5kaW5ncyBwYXJhbWV0ZXIgb25seSBhcHBsaWVzIHRvIHN0cmluZyBzY3JpcHQgc3VibWlzc2lvbnMKICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpIGFuZCBiaW5kaW5nczoKLSAgICAgICAgICAgIGFyZ3NbJ2JpbmRpbmdzJ10gPSBiaW5kaW5ncworICAgICAgICAgICAgZmllbGRzWydiaW5kaW5ncyddID0gYmluZGluZ3MKIAotICAgICAgICBpZiBzZWxmLl9zZXNzaW9uX2VuYWJsZWQ6Ci0gICAgICAgICAgICBhcmdzWydzZXNzaW9uJ10gPSBzdHIoc2VsZi5fc2Vzc2lvbikKLSAgICAgICAgICAgIHByb2Nlc3NvciA9ICdzZXNzaW9uJwotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgdHJhdmVyc2FsLkJ5dGVjb2RlKSBvciBpc2luc3RhbmNlKG1lc3NhZ2UsIHN0cik6Ci0gICAgICAgICAgICBsb2cuZGVidWcoInByb2Nlc3Nvcj0nJXMnLCBvcD0nJXMnLCBhcmdzPSclcyciLCBzdHIocHJvY2Vzc29yKSwgc3RyKG9wKSwgc3RyKGFyZ3MpKQotICAgICAgICAgICAgbWVzc2FnZSA9IHJlcXVlc3QuUmVxdWVzdE1lc3NhZ2UocHJvY2Vzc29yPXByb2Nlc3Nvciwgb3A9b3AsIGFyZ3M9YXJncykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpOgorICAgICAgICAgICAgbG9nLmRlYnVnKCJmaWVsZHM9JyVzJywgZ3JlbWxpbj0nJXMnIiwgc3RyKGZpZWxkcyksIHN0cihtZXNzYWdlKSkKKyAgICAgICAgICAgIG1lc3NhZ2UgPSByZXF1ZXN0LlJlcXVlc3RNZXNzYWdlKGZpZWxkcz1maWVsZHMsIGdyZW1saW49bWVzc2FnZSkKIAogICAgICAgICBjb25uID0gc2VsZi5fcG9vbC5nZXQoVHJ1ZSkKICAgICAgICAgaWYgcmVxdWVzdF9vcHRpb25zOgotICAgICAgICAgICAgbWVzc2FnZS5hcmdzLnVwZGF0ZShyZXF1ZXN0X29wdGlvbnMpCisgICAgICAgICAgICBtZXNzYWdlLmZpZWxkcy51cGRhdGUoe3Rva2VuOiByZXF1ZXN0X29wdGlvbnNbdG9rZW5dIGZvciB0b2tlbiBpbiByZXF1ZXN0LlRva2VucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiBpbiByZXF1ZXN0X29wdGlvbnMgYW5kIHRva2VuICE9ICdiaW5kaW5ncyd9KQorICAgICAgICAgICAgaWYgJ2JpbmRpbmdzJyBpbiByZXF1ZXN0X29wdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgJ2JpbmRpbmdzJyBpbiBtZXNzYWdlLmZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5maWVsZHNbJ2JpbmRpbmdzJ10udXBkYXRlKHJlcXVlc3Rfb3B0aW9uc1snYmluZGluZ3MnXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmZpZWxkc1snYmluZGluZ3MnXSA9IHJlcXVlc3Rfb3B0aW9uc1snYmluZGluZ3MnXQorICAgICAgICAgICAgaWYgJ3BhcmFtcycgaW4gcmVxdWVzdF9vcHRpb25zOgorICAgICAgICAgICAgICAgIGlmICdiaW5kaW5ncycgaW4gbWVzc2FnZS5maWVsZHM6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmllbGRzWydiaW5kaW5ncyddLnVwZGF0ZShyZXF1ZXN0X29wdGlvbnNbJ3BhcmFtcyddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZmllbGRzWydiaW5kaW5ncyddID0gcmVxdWVzdF9vcHRpb25zWydwYXJhbXMnXQorCiAgICAgICAgIHJldHVybiBjb25uLndyaXRlKG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2Nvbm5lY3Rpb24ucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2Nvbm5lY3Rpb24ucHkKaW5kZXggMDc3NjFmNS4uMDZiYWU4NSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9jb25uZWN0aW9uLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvY29ubmVjdGlvbi5weQpAQCAtMTQsNyArMTQsNiBAQAogIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogIyB1bmRlciB0aGUgTGljZW5zZS4KLWltcG9ydCB1dWlkCiBpbXBvcnQgcXVldWUKIGZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBGdXR1cmUKIApAQCAtMjYsNyArMjUsOCBAQAogY2xhc3MgQ29ubmVjdGlvbjoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIHRyYXZlcnNhbF9zb3VyY2UsIHByb3RvY29sLCB0cmFuc3BvcnRfZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgZXhlY3V0b3IsIHBvb2wsIGhlYWRlcnM9Tm9uZSwgZW5hYmxlX3VzZXJfYWdlbnRfb25fY29ubmVjdD1UcnVlKToKKyAgICAgICAgICAgICAgICAgZXhlY3V0b3IsIHBvb2wsIGhlYWRlcnM9Tm9uZSwgZW5hYmxlX3VzZXJfYWdlbnRfb25fY29ubmVjdD1UcnVlLAorICAgICAgICAgICAgICAgICBidWxrX3Jlc3VsdHM9RmFsc2UpOgogICAgICAgICBzZWxmLl91cmwgPSB1cmwKICAgICAgICAgc2VsZi5faGVhZGVycyA9IGhlYWRlcnMKICAgICAgICAgc2VsZi5fdHJhdmVyc2FsX3NvdXJjZSA9IHRyYXZlcnNhbF9zb3VyY2UKQEAgLTM1LDExICszNSwxNCBAQAogICAgICAgICBzZWxmLl9leGVjdXRvciA9IGV4ZWN1dG9yCiAgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9vbCA9IHBvb2wKLSAgICAgICAgc2VsZi5fcmVzdWx0cyA9IHt9CisgICAgICAgIHNlbGYuX3Jlc3VsdF9zZXQgPSBOb25lCiAgICAgICAgIHNlbGYuX2luaXRlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2VuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3QgPSBlbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0CiAgICAgICAgIGlmIHNlbGYuX2VuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3Q6CiAgICAgICAgICAgICBzZWxmLl9fYWRkX2hlYWRlcih1c2VyYWdlbnQudXNlckFnZW50SGVhZGVyLCB1c2VyYWdlbnQudXNlckFnZW50KQorICAgICAgICBzZWxmLl9idWxrX3Jlc3VsdHMgPSBidWxrX3Jlc3VsdHMKKyAgICAgICAgaWYgc2VsZi5fYnVsa19yZXN1bHRzOgorICAgICAgICAgICAgc2VsZi5fX2FkZF9oZWFkZXIoImJ1bGtSZXN1bHRzIiwgInRydWUiKQogCiAgICAgZGVmIGNvbm5lY3Qoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydDoKQEAgLTU2LDE3ICs1OSwxMSBAQAogICAgIGRlZiB3cml0ZShzZWxmLCByZXF1ZXN0X21lc3NhZ2UpOgogICAgICAgICBpZiBub3Qgc2VsZi5faW5pdGVkOgogICAgICAgICAgICAgc2VsZi5jb25uZWN0KCkKLSAgICAgICAgaWYgcmVxdWVzdF9tZXNzYWdlLmFyZ3MuZ2V0KCJyZXF1ZXN0SWQiKToKLSAgICAgICAgICAgIHJlcXVlc3RfaWQgPSBzdHIocmVxdWVzdF9tZXNzYWdlLmFyZ3MuZ2V0KCJyZXF1ZXN0SWQiKSkKLSAgICAgICAgICAgIHV1aWQuVVVJRChyZXF1ZXN0X2lkKSAgIyBDaGVja3MgZm9yIHByb3BlciBVVUlEIG9yIGVsc2Ugc2VydmVyIHdpbGwgcmV0dXJuIGFuIGVycm9yLgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVxdWVzdF9pZCA9IHN0cih1dWlkLnV1aWQ0KCkpCi0gICAgICAgIHJlc3VsdF9zZXQgPSByZXN1bHRzZXQuUmVzdWx0U2V0KHF1ZXVlLlF1ZXVlKCksIHJlcXVlc3RfaWQpCi0gICAgICAgIHNlbGYuX3Jlc3VsdHNbcmVxdWVzdF9pZF0gPSByZXN1bHRfc2V0CisgICAgICAgIHNlbGYuX3Jlc3VsdF9zZXQgPSByZXN1bHRzZXQuUmVzdWx0U2V0KHF1ZXVlLlF1ZXVlKCkpCiAgICAgICAgICMgQ3JlYXRlIHdyaXRlIHRhc2sKICAgICAgICAgZnV0dXJlID0gRnV0dXJlKCkKICAgICAgICAgZnV0dXJlX3dyaXRlID0gc2VsZi5fZXhlY3V0b3Iuc3VibWl0KAotICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wud3JpdGUsIHJlcXVlc3RfaWQsIHJlcXVlc3RfbWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLndyaXRlLCByZXF1ZXN0X21lc3NhZ2UpCiAKICAgICAgICAgZGVmIGNiKGYpOgogICAgICAgICAgICAgdHJ5OgpAQCAtNzcsMjIgKzc0LDI3IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgU3RhcnQgcmVjZWl2ZSB0YXNrCiAgICAgICAgICAgICAgICAgZG9uZSA9IHNlbGYuX2V4ZWN1dG9yLnN1Ym1pdChzZWxmLl9yZWNlaXZlKQotICAgICAgICAgICAgICAgIHJlc3VsdF9zZXQuZG9uZSA9IGRvbmUKLSAgICAgICAgICAgICAgICBmdXR1cmUuc2V0X3Jlc3VsdChyZXN1bHRfc2V0KQorICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9zZXQuZG9uZSA9IGRvbmUKKyAgICAgICAgICAgICAgICBmdXR1cmUuc2V0X3Jlc3VsdChzZWxmLl9yZXN1bHRfc2V0KQogCiAgICAgICAgIGZ1dHVyZV93cml0ZS5hZGRfZG9uZV9jYWxsYmFjayhjYikKICAgICAgICAgcmV0dXJuIGZ1dHVyZQogCiAgICAgZGVmIF9yZWNlaXZlKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl90cmFuc3BvcnQucmVhZCgpCi0gICAgICAgICAgICAgICAgc3RhdHVzX2NvZGUgPSBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGRhdGEsIHNlbGYuX3Jlc3VsdHMpCi0gICAgICAgICAgICAgICAgaWYgc3RhdHVzX2NvZGUgIT0gMjA2OgotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgJycnCisgICAgICAgICAgICBHcmFwaFNPTiBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyBkZXNlcmlhbGl6YXRpb24sIHdlIGFyZSBhZ2dyZWdhdGluZyBkYXRhIGFuZCBieXBhc3Npbmcgc3RyZWFtZWQKKyAgICAgICAgICAgICBkZXNlcmlhbGl6YXRpb24gd2hpbGUgR3JhcGhTT04gaXMgZW5hYmxlZCBmb3IgdGVzdGluZy4gUmVtb3ZlIGFmdGVyIEdyYXBoU09OIGlzIHJlbW92ZWQuCisgICAgICAgICAgICAnJycKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWRfYWdncmVnYXRlKHNlbGYuX3RyYW5zcG9ydC5yZWFkKCksIHNlbGYuX3Jlc3VsdF9zZXQpCisgICAgICAgICAgICAjIHJlLWVuYWJsZSBzdHJlYW1pbmcgYWZ0ZXIgZ3JhcGhTT04gcmVtb3ZhbAorICAgICAgICAgICAgIyBzZWxmLl90cmFuc3BvcnQucmVhZChzZWxmLnN0cmVhbV9jaHVuaykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuX3Bvb2wucHV0X25vd2FpdChzZWxmKQogCisgICAgZGVmIHN0cmVhbV9jaHVuayhzZWxmLCBjaHVua19kYXRhLCByZWFkX2NvbXBsZXRlZD1Ob25lLCBodHRwX3JlcV9yZXNwPU5vbmUpOgorICAgICAgICBzZWxmLl9wcm90b2NvbC5kYXRhX3JlY2VpdmVkKGNodW5rX2RhdGEsIHNlbGYuX3Jlc3VsdF9zZXQsIHJlYWRfY29tcGxldGVkLCBodHRwX3JlcV9yZXNwKQorCiAgICAgZGVmIF9fYWRkX2hlYWRlcihzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgaWYgc2VsZi5faGVhZGVycyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5faGVhZGVycyA9IGRpY3QoKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9kcml2ZXJfcmVtb3RlX2Nvbm5lY3Rpb24ucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbi5weQppbmRleCA2NTAyMmU1Li4wMDM5YTQ2IDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbi5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbi5weQpAQCAtMjEsMTEgKzIxLDggQEAKIGltcG9ydCB3YXJuaW5ncwogCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlciBpbXBvcnQgY2xpZW50LCBzZXJpYWxpemVyCi1mcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5yZW1vdGVfY29ubmVjdGlvbiBpbXBvcnQgKAotICAgIFJlbW90ZUNvbm5lY3Rpb24sIFJlbW90ZVRyYXZlcnNhbCkKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5zdHJhdGVnaWVzIGltcG9ydCBPcHRpb25zU3RyYXRlZ3kKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IEJ5dGVjb2RlCi1pbXBvcnQgdXVpZAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIucmVtb3RlX2Nvbm5lY3Rpb24gaW1wb3J0IFJlbW90ZUNvbm5lY3Rpb24sIFJlbW90ZVRyYXZlcnNhbAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIucmVxdWVzdCBpbXBvcnQgVG9rZW5zCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJncmVtbGlucHl0aG9uIikKIApAQCAtMzYsMTAgKzMzLDEwIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCB0cmF2ZXJzYWxfc291cmNlPSJnIiwgcHJvdG9jb2xfZmFjdG9yeT1Ob25lLAogICAgICAgICAgICAgICAgICB0cmFuc3BvcnRfZmFjdG9yeT1Ob25lLCBwb29sX3NpemU9Tm9uZSwgbWF4X3dvcmtlcnM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgdXNlcm5hbWU9IiIsIHBhc3N3b3JkPSIiLCBrZXJiZXJpemVkX3NlcnZpY2U9JycsCi0gICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1Ob25lLCBncmFwaHNvbl9yZWFkZXI9Tm9uZSwKLSAgICAgICAgICAgICAgICAgZ3JhcGhzb25fd3JpdGVyPU5vbmUsIGhlYWRlcnM9Tm9uZSwgc2Vzc2lvbj1Ob25lLAotICAgICAgICAgICAgICAgICBlbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0PVRydWUsIGVuYWJsZV9jb21wcmVzc2lvbj1GYWxzZSwgKip0cmFuc3BvcnRfa3dhcmdzKToKKyAgICAgICAgICAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCksCisgICAgICAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9Tm9uZSwgaW50ZXJjZXB0b3JzPU5vbmUsIGF1dGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgaGVhZGVycz1Ob25lLCBlbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0PVRydWUsCisgICAgICAgICAgICAgICAgIGJ1bGtfcmVzdWx0cz1GYWxzZSwgKip0cmFuc3BvcnRfa3dhcmdzKToKICAgICAgICAgbG9nLmluZm8oIkNyZWF0aW5nIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gd2l0aCB1cmwgJyVzJyIsIHN0cih1cmwpKQogICAgICAgICBzZWxmLl9fdXJsID0gdXJsCiAgICAgICAgIHNlbGYuX190cmF2ZXJzYWxfc291cmNlID0gdHJhdmVyc2FsX3NvdXJjZQpAQCAtNDcsNjMgKzQ0LDM5IEBACiAgICAgICAgIHNlbGYuX190cmFuc3BvcnRfZmFjdG9yeSA9IHRyYW5zcG9ydF9mYWN0b3J5CiAgICAgICAgIHNlbGYuX19wb29sX3NpemUgPSBwb29sX3NpemUKICAgICAgICAgc2VsZi5fX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKLSAgICAgICAgc2VsZi5fX3VzZXJuYW1lID0gdXNlcm5hbWUKLSAgICAgICAgc2VsZi5fX3Bhc3N3b3JkID0gcGFzc3dvcmQKLSAgICAgICAgc2VsZi5fX2tlcmJlcml6ZWRfc2VydmljZSA9IGtlcmJlcml6ZWRfc2VydmljZQotICAgICAgICBzZWxmLl9fbWVzc2FnZV9zZXJpYWxpemVyID0gbWVzc2FnZV9zZXJpYWxpemVyCi0gICAgICAgIHNlbGYuX19ncmFwaHNvbl9yZWFkZXIgPSBncmFwaHNvbl9yZWFkZXIKLSAgICAgICAgc2VsZi5fX2dyYXBoc29uX3dyaXRlciA9IGdyYXBoc29uX3dyaXRlcgorICAgICAgICBzZWxmLl9fYXV0aCA9IGF1dGgKICAgICAgICAgc2VsZi5fX2hlYWRlcnMgPSBoZWFkZXJzCi0gICAgICAgIHNlbGYuX19zZXNzaW9uID0gc2Vzc2lvbgogICAgICAgICBzZWxmLl9fZW5hYmxlX3VzZXJfYWdlbnRfb25fY29ubmVjdCA9IGVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3QKLSAgICAgICAgc2VsZi5fX2VuYWJsZV9jb21wcmVzc2lvbiA9IGVuYWJsZV9jb21wcmVzc2lvbgorICAgICAgICBzZWxmLl9fYnVsa19yZXN1bHRzID0gYnVsa19yZXN1bHRzCiAgICAgICAgIHNlbGYuX190cmFuc3BvcnRfa3dhcmdzID0gdHJhbnNwb3J0X2t3YXJncwogCi0gICAgICAgICMga2VlcHMgYSBsaXN0IG9mIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVuIHNwYXduZWQgZnJvbSB0aGlzIERyaXZlclJlbW90ZUNvbm5lY3Rpb24KLSAgICAgICAgIyBzbyB0aGF0IHRoZXkgY2FuIGJlIGNsb3NlZCBpZiB0aGlzIHBhcmVudCBzZXNzaW9uIGlzIGNsb3NlZC4KLSAgICAgICAgc2VsZi5fX3NwYXduZWRfc2Vzc2lvbnMgPSBbXQotCi0gICAgICAgIGlmIG1lc3NhZ2Vfc2VyaWFsaXplciBpcyBOb25lIGFuZCBncmFwaHNvbl9yZWFkZXIgaXMgbm90IE5vbmUgYW5kIGdyYXBoc29uX3dyaXRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplciA9IHNlcmlhbGl6ZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplcigKLSAgICAgICAgICAgICAgICByZWFkZXI9Z3JhcGhzb25fcmVhZGVyLAotICAgICAgICAgICAgICAgIHdyaXRlcj1ncmFwaHNvbl93cml0ZXIpCisgICAgICAgIGlmIHJlc3BvbnNlX3NlcmlhbGl6ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXIgPSBzZXJpYWxpemVyLkdyYXBoQmluYXJ5U2VyaWFsaXplcnNWNCgpCiAgICAgICAgIHNlbGYuX2NsaWVudCA9IGNsaWVudC5DbGllbnQodXJsLCB0cmF2ZXJzYWxfc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3Rvcnk9cHJvdG9jb2xfZmFjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRfZmFjdG9yeT10cmFuc3BvcnRfZmFjdG9yeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb29sX3NpemU9cG9vbF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF93b3JrZXJzPW1heF93b3JrZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1tZXNzYWdlX3NlcmlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU9dXNlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ9cGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VyYmVyaXplZF9zZXJ2aWNlPWtlcmJlcml6ZWRfc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9cmVxdWVzdF9zZXJpYWxpemVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9cmVzcG9uc2Vfc2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnM9aW50ZXJjZXB0b3JzLCBhdXRoPWF1dGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz1oZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb249c2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0PWVuYWJsZV91c2VyX2FnZW50X29uX2Nvbm5lY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2NvbXByZXNzaW9uPWVuYWJsZV9jb21wcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWxrX3Jlc3VsdHM9YnVsa19yZXN1bHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdHJhbnNwb3J0X2t3YXJncykKICAgICAgICAgc2VsZi5fdXJsID0gc2VsZi5fY2xpZW50Ll91cmwKICAgICAgICAgc2VsZi5fdHJhdmVyc2FsX3NvdXJjZSA9IHNlbGYuX2NsaWVudC5fdHJhdmVyc2FsX3NvdXJjZQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAjIGNsb3NlIHRoaXMgY2xpZW50IGFuZCBhbnkgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBpbnN0YW5jZXMgc3Bhd25lZCBmcm9tIHRoaXMgb25lCi0gICAgICAgICMgZm9yIGEgc2Vzc2lvbgotICAgICAgICBpZiBsZW4oc2VsZi5fX3NwYXduZWRfc2Vzc2lvbnMpID4gMDoKLSAgICAgICAgICAgIGxvZy5pbmZvKCJjbG9zaW5nIHNwYXduZWQgc2Vzc2lvbnMgZnJvbSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHdpdGggdXJsICclcyciLCBzdHIoc2VsZi5fdXJsKSkKLSAgICAgICAgICAgIGZvciBzcGF3bmVkX3Nlc3Npb24gaW4gc2VsZi5fX3NwYXduZWRfc2Vzc2lvbnM6Ci0gICAgICAgICAgICAgICAgc3Bhd25lZF9zZXNzaW9uLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX19zcGF3bmVkX3Nlc3Npb25zLmNsZWFyKCkKLQotICAgICAgICBpZiBzZWxmLl9fc2Vzc2lvbjoKLSAgICAgICAgICAgIGxvZy5pbmZvKCJjbG9zaW5nIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gd2l0aCB1cmwgJyVzJyB3aXRoIHNlc3Npb24gJyVzJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3VybCksIHN0cihzZWxmLl9fc2Vzc2lvbikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2cuaW5mbygiY2xvc2luZyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIHdpdGggdXJsICclcyciLCBzdHIoc2VsZi5fdXJsKSkKKyAgICAgICAgbG9nLmluZm8oImNsb3NpbmcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiB3aXRoIHVybCAnJXMnIiwgc3RyKHNlbGYuX3VybCkpCiAKICAgICAgICAgc2VsZi5fY2xpZW50LmNsb3NlKCkKIAotICAgIGRlZiBzdWJtaXQoc2VsZiwgYnl0ZWNvZGUpOgotICAgICAgICBsb2cuZGVidWcoInN1Ym1pdCB3aXRoIGJ5dGVjb2RlICclcyciLCBzdHIoYnl0ZWNvZGUpKQotICAgICAgICByZXN1bHRfc2V0ID0gc2VsZi5fY2xpZW50LnN1Ym1pdChieXRlY29kZSwgcmVxdWVzdF9vcHRpb25zPXNlbGYuX2V4dHJhY3RfcmVxdWVzdF9vcHRpb25zKGJ5dGVjb2RlKSkKKyAgICBkZWYgc3VibWl0KHNlbGYsIGdyZW1saW5fbGFuZyk6CisgICAgICAgIGxvZy5kZWJ1Zygic3VibWl0IHdpdGggZ3JlbWxpbiBsYW5nIHNjcmlwdCAnJXMnIiwgZ3JlbWxpbl9sYW5nLmdldF9ncmVtbGluKCkpCisgICAgICAgIGdyZW1saW5fbGFuZy5hZGRfZyhzZWxmLl90cmF2ZXJzYWxfc291cmNlKQorICAgICAgICByZXN1bHRfc2V0ID0gc2VsZi5fY2xpZW50LnN1Ym1pdChncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9vcHRpb25zPXNlbGYuZXh0cmFjdF9yZXF1ZXN0X29wdGlvbnMoZ3JlbWxpbl9sYW5nKSkKICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdF9zZXQuYWxsKCkucmVzdWx0KCkKICAgICAgICAgcmV0dXJuIFJlbW90ZVRyYXZlcnNhbChpdGVyKHJlc3VsdHMpKQogCkBAIC0xMTQsMTAgKzg3LDEyIEBACiAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgIHNlbGYuc3VibWl0X2FzeW5jKG1lc3NhZ2UsIGJpbmRpbmdzLCByZXF1ZXN0X29wdGlvbnMpCiAKLSAgICBkZWYgc3VibWl0X2FzeW5jKHNlbGYsIGJ5dGVjb2RlKToKLSAgICAgICAgbG9nLmRlYnVnKCJzdWJtaXRfYXN5bmMgd2l0aCBieXRlY29kZSAnJXMnIiwgc3RyKGJ5dGVjb2RlKSkKKyAgICBkZWYgc3VibWl0X2FzeW5jKHNlbGYsIGdyZW1saW5fbGFuZyk6CisgICAgICAgIGxvZy5kZWJ1Zygic3VibWl0X2FzeW5jIHdpdGggZ3JlbWxpbiBsYW5nIHNjcmlwdCAnJXMnIiwgZ3JlbWxpbl9sYW5nLmdldF9ncmVtbGluKCkpCiAgICAgICAgIGZ1dHVyZSA9IEZ1dHVyZSgpCi0gICAgICAgIGZ1dHVyZV9yZXN1bHRfc2V0ID0gc2VsZi5fY2xpZW50LnN1Ym1pdF9hc3luYyhieXRlY29kZSwgcmVxdWVzdF9vcHRpb25zPXNlbGYuX2V4dHJhY3RfcmVxdWVzdF9vcHRpb25zKGJ5dGVjb2RlKSkKKyAgICAgICAgZ3JlbWxpbl9sYW5nLmFkZF9nKHNlbGYuX3RyYXZlcnNhbF9zb3VyY2UpCisgICAgICAgIGZ1dHVyZV9yZXN1bHRfc2V0ID0gc2VsZi5fY2xpZW50LnN1Ym1pdF9hc3luYyhncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rfb3B0aW9ucz1zZWxmLmV4dHJhY3RfcmVxdWVzdF9vcHRpb25zKGdyZW1saW5fbGFuZykpCiAKICAgICAgICAgZGVmIGNiKGYpOgogICAgICAgICAgICAgdHJ5OgpAQCAtMTMzLDUxICsxMDgsMjUgQEAKICAgICBkZWYgaXNfY2xvc2VkKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2xpZW50LmlzX2Nsb3NlZCgpCiAKLSAgICBkZWYgaXNfc2Vzc2lvbl9ib3VuZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX19zZXNzaW9uIGlzIG5vdCBOb25lCi0KLSAgICBkZWYgY3JlYXRlX3Nlc3Npb24oc2VsZik6Ci0gICAgICAgIGxvZy5pbmZvKCJDcmVhdGluZyBzZXNzaW9uIGJhc2VkIGNvbm5lY3Rpb24iKQotICAgICAgICBpZiBzZWxmLmlzX3Nlc3Npb25fYm91bmQoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignQ29ubmVjdGlvbiBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc2Vzc2lvbiAtIGNoaWxkIHNlc3Npb25zIGFyZSBub3QgYWxsb3dlZCcpCi0gICAgICAgIGNvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHNlbGYuX191cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNhbF9zb3VyY2U9c2VsZi5fX3RyYXZlcnNhbF9zb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3Rvcnk9c2VsZi5fX3Byb3RvY29sX2ZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5PXNlbGYuX190cmFuc3BvcnRfZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbF9zaXplPXNlbGYuX19wb29sX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF93b3JrZXJzPXNlbGYuX19tYXhfd29ya2VycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU9c2VsZi5fX3VzZXJuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZD1zZWxmLl9fcGFzc3dvcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlcmJlcml6ZWRfc2VydmljZT1zZWxmLl9fa2VyYmVyaXplZF9zZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VsZi5fX21lc3NhZ2Vfc2VyaWFsaXplciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhzb25fcmVhZGVyPXNlbGYuX19ncmFwaHNvbl9yZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoc29uX3dyaXRlcj1zZWxmLl9fZ3JhcGhzb25fd3JpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXNlbGYuX19oZWFkZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uPXV1aWQudXVpZDQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX3VzZXJfYWdlbnRfb25fY29ubmVjdD1zZWxmLl9fZW5hYmxlX3VzZXJfYWdlbnRfb25fY29ubmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipzZWxmLl9fdHJhbnNwb3J0X2t3YXJncykKLSAgICAgICAgc2VsZi5fX3NwYXduZWRfc2Vzc2lvbnMuYXBwZW5kKGNvbm4pCi0gICAgICAgIHJldHVybiBjb25uCi0KLSAgICBkZWYgcmVtb3ZlX3Nlc3Npb24oc2VsZiwgc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uKToKLSAgICAgICAgc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fX3NwYXduZWRfc2Vzc2lvbnMucmVtb3ZlKHNlc3Npb25fYmFzZWRfY29ubmVjdGlvbikKLQotICAgIGRlZiBjb21taXQoc2VsZik6Ci0gICAgICAgIGxvZy5pbmZvKCJTdWJtaXR0aW5nIGNvbW1pdCBncmFwaCBvcGVyYXRpb24uIikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NsaWVudC5zdWJtaXQoQnl0ZWNvZGUuR3JhcGhPcC5jb21taXQoKSkKLQotICAgIGRlZiByb2xsYmFjayhzZWxmKToKLSAgICAgICAgbG9nLmluZm8oIlN1Ym1pdHRpbmcgcm9sbGJhY2sgZ3JhcGggb3BlcmF0aW9uLiIpCi0gICAgICAgIHJldHVybiBzZWxmLl9jbGllbnQuc3VibWl0KEJ5dGVjb2RlLkdyYXBoT3Aucm9sbGJhY2soKSkKKyAgICAjIFRPRE8gcmVtb3ZlIG9yIHVwZGF0ZSBvbmNlIEhUVFAgdHJhbnNhY3Rpb24gaXMgaW1wbGVtZW50ZWQKKyAgICAjIGRlZiBjb21taXQoc2VsZik6CisgICAgIyAgICAgbG9nLmluZm8oIlN1Ym1pdHRpbmcgY29tbWl0IGdyYXBoIG9wZXJhdGlvbi4iKQorICAgICMgICAgIHJldHVybiBzZWxmLl9jbGllbnQuc3VibWl0KEJ5dGVjb2RlLkdyYXBoT3AuY29tbWl0KCkpCisgICAgIworICAgICMgZGVmIHJvbGxiYWNrKHNlbGYpOgorICAgICMgICAgIGxvZy5pbmZvKCJTdWJtaXR0aW5nIHJvbGxiYWNrIGdyYXBoIG9wZXJhdGlvbi4iKQorICAgICMgICAgIHJldHVybiBzZWxmLl9jbGllbnQuc3VibWl0KEJ5dGVjb2RlLkdyYXBoT3Aucm9sbGJhY2soKSkKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2V4dHJhY3RfcmVxdWVzdF9vcHRpb25zKGJ5dGVjb2RlKToKLSAgICAgICAgb3B0aW9uc19zdHJhdGVneSA9IG5leHQoKHggZm9yIHggaW4gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeFswXSA9PSAid2l0aFN0cmF0ZWdpZXMiIGFuZCB0eXBlKHhbMV0pIGlzIE9wdGlvbnNTdHJhdGVneSksIE5vbmUpCi0gICAgICAgIHJlcXVlc3Rfb3B0aW9ucyA9IE5vbmUKLSAgICAgICAgaWYgb3B0aW9uc19zdHJhdGVneToKLSAgICAgICAgICAgIGFsbG93ZWRfa2V5cyA9IFsnZXZhbHVhdGlvblRpbWVvdXQnLCAnc2NyaXB0RXZhbHVhdGlvblRpbWVvdXQnLCAnYmF0Y2hTaXplJywgJ3JlcXVlc3RJZCcsICd1c2VyQWdlbnQnLCAnbWF0ZXJpYWxpemVQcm9wZXJ0aWVzJ10KLSAgICAgICAgICAgIHJlcXVlc3Rfb3B0aW9ucyA9IHthbGxvd2VkOiBvcHRpb25zX3N0cmF0ZWd5WzFdLmNvbmZpZ3VyYXRpb25bYWxsb3dlZF0gZm9yIGFsbG93ZWQgaW4gYWxsb3dlZF9rZXlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWxsb3dlZCBpbiBvcHRpb25zX3N0cmF0ZWd5WzFdLmNvbmZpZ3VyYXRpb259CisgICAgZGVmIGV4dHJhY3RfcmVxdWVzdF9vcHRpb25zKGdyZW1saW5fbGFuZyk6CisgICAgICAgIHJlcXVlc3Rfb3B0aW9ucyA9IHt9CisgICAgICAgIGZvciBvcyBpbiBncmVtbGluX2xhbmcub3B0aW9uc19zdHJhdGVnaWVzOgorICAgICAgICAgICAgcmVxdWVzdF9vcHRpb25zLnVwZGF0ZSh7dG9rZW46IG9zLmNvbmZpZ3VyYXRpb25bdG9rZW5dIGZvciB0b2tlbiBpbiBUb2tlbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuIGluIG9zLmNvbmZpZ3VyYXRpb259KQorICAgICAgICAjIHJlcXVlc3QgdGhlIHNlcnZlciB0byBidWxrIHJlc3VsdHMgYnkgZGVmYXVsdCB3aGVuIHVzaW5nIGRyYyB0aHJvdWdoIHJlcXVlc3Qgb3B0aW9ucworICAgICAgICBpZiAnYnVsa1Jlc3VsdHMnIG5vdCBpbiByZXF1ZXN0X29wdGlvbnM6CisgICAgICAgICAgICByZXF1ZXN0X29wdGlvbnNbJ2J1bGtSZXN1bHRzJ10gPSBUcnVlCisgICAgICAgIGlmIGdyZW1saW5fbGFuZy5wYXJhbWV0ZXJzIGlzIG5vdCBOb25lIGFuZCBsZW4oZ3JlbWxpbl9sYW5nLnBhcmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAgIHJlcXVlc3Rfb3B0aW9uc1sicGFyYW1zIl0gPSBncmVtbGluX2xhbmcucGFyYW1ldGVycworCiAgICAgICAgIHJldHVybiByZXF1ZXN0X29wdGlvbnMKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvcHJvdG9jb2wucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3Byb3RvY29sLnB5CmluZGV4IDJhYjYxN2EuLmU0NThiYTEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvcHJvdG9jb2wucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9wcm90b2NvbC5weQpAQCAtMTYsMTggKzE2LDggQEAKICMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogIyB1bmRlciB0aGUgTGljZW5zZS4KICMKLWltcG9ydCBqc29uCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IGFiYwotaW1wb3J0IGJhc2U2NAotaW1wb3J0IHN0cnVjdAotCi0jIGltcG9ydCBrZXJiZXJvcyAgICBPcHRpb25hbCBkZXBlbmRlbmN5IGltcG9ydGVkIGluIHJlbGV2YW50IGNvZGVibG9jawotCi1mcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlciBpbXBvcnQgcmVxdWVzdAotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIucmVzdWx0c2V0IGltcG9ydCBSZXN1bHRTZXQKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmFuc2xhdG9yIGltcG9ydCBUcmFuc2xhdG9yCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBCeXRlY29kZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiZ3JlbWxpbnB5dGhvbiIpCiAKQEAgLTM3LDEzICsyNyw5IEBACiBjbGFzcyBHcmVtbGluU2VydmVyRXJyb3IoRXhjZXB0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzKToKICAgICAgICAgc3VwZXIoR3JlbWxpblNlcnZlckVycm9yLCBzZWxmKS5fX2luaXRfXygnezB9OiB7MX0nLmZvcm1hdChzdGF0dXNbJ2NvZGUnXSwgc3RhdHVzWydtZXNzYWdlJ10pKQotICAgICAgICBzZWxmLl9zdGF0dXNfYXR0cmlidXRlcyA9IHN0YXR1c1snYXR0cmlidXRlcyddCiAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNbJ2NvZGUnXQogICAgICAgICBzZWxmLnN0YXR1c19tZXNzYWdlID0gc3RhdHVzWydtZXNzYWdlJ10KLQotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBzdGF0dXNfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXR1c19hdHRyaWJ1dGVzCisgICAgICAgIHNlbGYuc3RhdHVzX2V4Y2VwdGlvbiA9IHN0YXR1c1snZXhjZXB0aW9uJ10KIAogCiBjbGFzcyBDb25maWd1cmF0aW9uRXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDIwMyArNDMsMTMzIEBACiAgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIG1lc3NhZ2UsIHJlc3VsdHNfZGljdCk6CisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgbWVzc2FnZSwgcmVzdWx0X3NldCk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgd3JpdGUoc2VsZiwgcmVxdWVzdF9pZCwgcmVxdWVzdF9tZXNzYWdlKToKKyAgICBkZWYgd3JpdGUoc2VsZiwgcmVxdWVzdF9tZXNzYWdlKToKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIEdyZW1saW5TZXJ2ZXJXU1Byb3RvY29sKEFic3RyYWN0QmFzZVByb3RvY29sKToKLSAgICBRT1BfQVVUSF9CSVQgPSAxCi0gICAgX2tlcmJlcm9zX2NvbnRleHQgPSBOb25lCi0gICAgX21heF9jb250ZW50X2xlbmd0aCA9IDEwICogMTAyNCAqIDEwMjQKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLAotICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgIHVzZXJuYW1lPScnLCBwYXNzd29yZD0nJywKLSAgICAgICAgICAgICAgICAga2VyYmVyaXplZF9zZXJ2aWNlPScnLAotICAgICAgICAgICAgICAgICBtYXhfY29udGVudF9sZW5ndGg9MTAgKiAxMDI0ICogMTAyNCk6Ci0gICAgICAgIHNlbGYuX21lc3NhZ2Vfc2VyaWFsaXplciA9IG1lc3NhZ2Vfc2VyaWFsaXplcgotICAgICAgICBzZWxmLl91c2VybmFtZSA9IHVzZXJuYW1lCi0gICAgICAgIHNlbGYuX3Bhc3N3b3JkID0gcGFzc3dvcmQKLSAgICAgICAgc2VsZi5fa2VyYmVyaXplZF9zZXJ2aWNlID0ga2VyYmVyaXplZF9zZXJ2aWNlCi0gICAgICAgIHNlbGYuX21heF9jb250ZW50X2xlbmd0aCA9IG1heF9jb250ZW50X2xlbmd0aAotCi0gICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgotICAgICAgICBzdXBlcihHcmVtbGluU2VydmVyV1NQcm90b2NvbCwgc2VsZikuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKLQotICAgIGRlZiB3cml0ZShzZWxmLCByZXF1ZXN0X2lkLCByZXF1ZXN0X21lc3NhZ2UpOgotICAgICAgICBtZXNzYWdlID0gc2VsZi5fbWVzc2FnZV9zZXJpYWxpemVyLnNlcmlhbGl6ZV9tZXNzYWdlKHJlcXVlc3RfaWQsIHJlcXVlc3RfbWVzc2FnZSkKLSAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlKG1lc3NhZ2UpCi0KLSAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBtZXNzYWdlLCByZXN1bHRzX2RpY3QpOgotICAgICAgICAjIGlmIEdyZW1saW4gU2VydmVyIGN1dHMgb2ZmIHRoZW4gd2UgZ2V0IGEgTm9uZSBmb3IgdGhlIG1lc3NhZ2UKLSAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgotICAgICAgICAgICAgbG9nLmVycm9yKCJSZWNlaXZlZCBlbXB0eSBtZXNzYWdlIGZyb20gc2VydmVyLiIpCi0gICAgICAgICAgICByYWlzZSBHcmVtbGluU2VydmVyRXJyb3Ioeydjb2RlJzogNTAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdTZXJ2ZXIgZGlzY29ubmVjdGVkIC0gcGxlYXNlIHRyeSB0byByZWNvbm5lY3QnLCAnYXR0cmlidXRlcyc6IHt9fSkKLQotICAgICAgICBtZXNzYWdlID0gc2VsZi5fbWVzc2FnZV9zZXJpYWxpemVyLmRlc2VyaWFsaXplX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgcmVxdWVzdF9pZCA9IG1lc3NhZ2VbJ3JlcXVlc3RJZCddCi0gICAgICAgIHJlc3VsdF9zZXQgPSByZXN1bHRzX2RpY3RbcmVxdWVzdF9pZF0gaWYgcmVxdWVzdF9pZCBpbiByZXN1bHRzX2RpY3QgZWxzZSBSZXN1bHRTZXQoTm9uZSwgTm9uZSkKLSAgICAgICAgc3RhdHVzX2NvZGUgPSBtZXNzYWdlWydzdGF0dXMnXVsnY29kZSddCi0gICAgICAgIGFnZ3JlZ2F0ZV90byA9IG1lc3NhZ2VbJ3Jlc3VsdCddWydtZXRhJ10uZ2V0KCdhZ2dyZWdhdGVUbycsICdsaXN0JykKLSAgICAgICAgZGF0YSA9IG1lc3NhZ2VbJ3Jlc3VsdCddWydkYXRhJ10KLSAgICAgICAgcmVzdWx0X3NldC5hZ2dyZWdhdGVfdG8gPSBhZ2dyZWdhdGVfdG8KLSAgICAgICAgaWYgc3RhdHVzX2NvZGUgPT0gNDA3OgotICAgICAgICAgICAgaWYgc2VsZi5fdXNlcm5hbWUgYW5kIHNlbGYuX3Bhc3N3b3JkOgotICAgICAgICAgICAgICAgIGF1dGhfYnl0ZXMgPSBiJycuam9pbihbYidceDAwJywgc2VsZi5fdXNlcm5hbWUuZW5jb2RlKCd1dGYtOCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwJywgc2VsZi5fcGFzc3dvcmQuZW5jb2RlKCd1dGYtOCcpXSkKLSAgICAgICAgICAgICAgICBhdXRoID0gYmFzZTY0LmI2NGVuY29kZShhdXRoX2J5dGVzKQotICAgICAgICAgICAgICAgIHJlcXVlc3RfbWVzc2FnZSA9IHJlcXVlc3QuUmVxdWVzdE1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgICAgICd0cmF2ZXJzYWwnLCAnYXV0aGVudGljYXRpb24nLCB7J3Nhc2wnOiBhdXRoLmRlY29kZSgpfSkKLSAgICAgICAgICAgIGVsaWYgc2VsZi5fa2VyYmVyaXplZF9zZXJ2aWNlOgotICAgICAgICAgICAgICAgIHJlcXVlc3RfbWVzc2FnZSA9IHNlbGYuX2tlcmJlcm9zX3JlY2VpdmVkKG1lc3NhZ2UpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAnR3JlbWxpbiBzZXJ2ZXIgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgaW4gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi4gJyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb3IgYmFzaWMgYXV0aGVudGljYXRpb24gcHJvdmlkZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQuICcgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9yIGtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGUgdGhlIGtlcmJlcml6ZWRfc2VydmljZSBwYXJhbWV0ZXIuJwotICAgICAgICAgICAgICAgIGxvZy5lcnJvcihlcnJvcl9tZXNzYWdlKQotICAgICAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FcnJvcihlcnJvcl9tZXNzYWdlKQotICAgICAgICAgICAgc2VsZi53cml0ZShyZXF1ZXN0X2lkLCByZXF1ZXN0X21lc3NhZ2UpCi0gICAgICAgICAgICBkYXRhID0gc2VsZi5fdHJhbnNwb3J0LnJlYWQoKQotICAgICAgICAgICAgIyBBbGxvdyBmb3IgYXV0aCBoYW5kc2hha2Ugd2l0aCBtdWx0aXBsZSBzdGVwcwotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YV9yZWNlaXZlZChkYXRhLCByZXN1bHRzX2RpY3QpCi0gICAgICAgIGVsaWYgc3RhdHVzX2NvZGUgPT0gMjA0OgotICAgICAgICAgICAgcmVzdWx0X3NldC5zdHJlYW0ucHV0X25vd2FpdChbXSkKLSAgICAgICAgICAgIGRlbCByZXN1bHRzX2RpY3RbcmVxdWVzdF9pZF0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXNfY29kZQotICAgICAgICBlbGlmIHN0YXR1c19jb2RlIGluIFsyMDAsIDIwNl06Ci0gICAgICAgICAgICByZXN1bHRfc2V0LnN0cmVhbS5wdXRfbm93YWl0KGRhdGEpCi0gICAgICAgICAgICBpZiBzdGF0dXNfY29kZSA9PSAyMDA6Ci0gICAgICAgICAgICAgICAgcmVzdWx0X3NldC5zdGF0dXNfYXR0cmlidXRlcyA9IG1lc3NhZ2VbJ3N0YXR1cyddWydhdHRyaWJ1dGVzJ10KLSAgICAgICAgICAgICAgICBkZWwgcmVzdWx0c19kaWN0W3JlcXVlc3RfaWRdCi0gICAgICAgICAgICByZXR1cm4gc3RhdHVzX2NvZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVGhpcyBtZXNzYWdlIGlzIGdvaW5nIHRvIGJlIGh1Z2UgYW5kIGtpbmQgb2YgaGFyZCB0byByZWFkLCBidXQgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLAotICAgICAgICAgICAgIyBpdCBjYW4gcHJvdmlkZSBpbnZhbHVhYmxlIGluZm8sIHNvIHNwYWNlIGl0IG91dCBhcHByb3ByaWF0ZWx5LgotICAgICAgICAgICAgbG9nLmVycm9yKCJcclxuUmVjZWl2ZWQgZXJyb3IgbWVzc2FnZSAnJXMnXHJcblxyXG5XaXRoIHJlc3VsdHMgZGljdGlvbmFyeSAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHIobWVzc2FnZSksIHN0cihyZXN1bHRzX2RpY3QpKQotICAgICAgICAgICAgZGVsIHJlc3VsdHNfZGljdFtyZXF1ZXN0X2lkXQotICAgICAgICAgICAgcmFpc2UgR3JlbWxpblNlcnZlckVycm9yKG1lc3NhZ2VbJ3N0YXR1cyddKQotCi0gICAgZGVmIF9rZXJiZXJvc19yZWNlaXZlZChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgIyBJbnNwaXJlZCBieTogaHR0cHM6Ly9naXRodWIuY29tL3Rob2Jicy9wdXJlLXNhc2wvYmxvYi8wLjYuMi9wdXJlc2FzbC9tZWNoYW5pc21zLnB5Ci0gICAgICAgICMgICAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90aG9iYnMvcHVyZS1zYXNsL2Jsb2IvMC42LjIvTElDRU5TRQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpbXBvcnQga2VyYmVyb3MKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1BsZWFzZSBpbnN0YWxsIGdyZW1saW5weXRob25ba2VyYmVyb3NdLicpCi0KLSAgICAgICAgIyBGaXJzdCBwYXNzOiBnZXQgc2VydmljZSBncmFudGluZyB0aWNrZXQgYW5kIHJldHVybiBpdCB0byBncmVtbGluLXNlcnZlcgotICAgICAgICBpZiBub3Qgc2VsZi5fa2VyYmVyb3NfY29udGV4dDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBfLCBrZXJiZXJvc19jb250ZXh0ID0ga2VyYmVyb3MuYXV0aEdTU0NsaWVudEluaXQoCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2tlcmJlcml6ZWRfc2VydmljZSwgZ3NzZmxhZ3M9a2VyYmVyb3MuR1NTX0NfTVVUVUFMX0ZMQUcpCi0gICAgICAgICAgICAgICAga2VyYmVyb3MuYXV0aEdTU0NsaWVudFN0ZXAoa2VyYmVyb3NfY29udGV4dCwgJycpCi0gICAgICAgICAgICAgICAgYXV0aCA9IGtlcmJlcm9zLmF1dGhHU1NDbGllbnRSZXNwb25zZShrZXJiZXJvc19jb250ZXh0KQotICAgICAgICAgICAgICAgIHNlbGYuX2tlcmJlcm9zX2NvbnRleHQgPSBrZXJiZXJvc19jb250ZXh0Ci0gICAgICAgICAgICBleGNlcHQga2VyYmVyb3MuS3JiRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICdLZXJiZXJvcyBhdXRoZW50aWNhdGlvbiByZXF1aXJlcyBhIHZhbGlkIHNlcnZpY2UgbmFtZSBpbiBEcml2ZXJSZW1vdGVDb25uZWN0aW9uLCAnCi0gICAgICAgICAgICAgICAgICAgICdhcyB3ZWxsIGFzIGEgdmFsaWQgdGd0IChleHBvcnQgS1JCNUNDTkFNRSkgb3Iga2V5dGFiIChleHBvcnQgS1JCNV9LVE5BTUUpOiAnICsgc3RyKGUpKQotICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuUmVxdWVzdE1lc3NhZ2UoJycsICdhdXRoZW50aWNhdGlvbicsIHsnc2FzbCc6IGF1dGh9KQotCi0gICAgICAgICMgU2Vjb25kIHBhc3M6IGNvbXBsZXRpb24gb2YgYXV0aGVudGljYXRpb24KLSAgICAgICAgc2FzbF9yZXNwb25zZSA9IG1lc3NhZ2VbJ3N0YXR1cyddWydhdHRyaWJ1dGVzJ11bJ3Nhc2wnXQotICAgICAgICBpZiBub3Qgc2VsZi5fdXNlcm5hbWU6Ci0gICAgICAgICAgICByZXN1bHRfY29kZSA9IGtlcmJlcm9zLmF1dGhHU1NDbGllbnRTdGVwKHNlbGYuX2tlcmJlcm9zX2NvbnRleHQsIHNhc2xfcmVzcG9uc2UpCi0gICAgICAgICAgICBpZiByZXN1bHRfY29kZSA9PSBrZXJiZXJvcy5BVVRIX0dTU19DT01QTEVURToKLSAgICAgICAgICAgICAgICBzZWxmLl91c2VybmFtZSA9IGtlcmJlcm9zLmF1dGhHU1NDbGllbnRVc2VyTmFtZShzZWxmLl9rZXJiZXJvc19jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuUmVxdWVzdE1lc3NhZ2UoJycsICdhdXRoZW50aWNhdGlvbicsIHsnc2FzbCc6ICcnfSkKLQotICAgICAgICAjIFRoaXJkIHBhc3M6IHNhc2wgcXVhbGl0eSBvZiBwcm90ZWN0aW9uIChxb3ApIGhhbmRzaGFrZQotCi0gICAgICAgICMgR3JlbWxpbi1zZXJ2ZXIgS3JiNUF1dGhlbnRpY2F0b3Igb25seSBzdXBwb3J0cyBxb3A9UU9QX0FVVEg7IHVzZSBzc2wgZm9yIGNvbmZpZGVudGlhbGl0eS4KLSAgICAgICAgIyBIYW5kc2hha2UgY29udGVudCBmb3JtYXQ6Ci0gICAgICAgICMgYnl0ZSAwOiB0aGUgc2VsZWN0ZWQgcW9wLiAxPT1hdXRoLCAyPT1hdXRoLWludCwgND09YXV0aC1jb25mCi0gICAgICAgICMgYnl0ZSAxLTM6IHRoZSBtYXggbGVuZ3RoIGZvciBhbnkgYnVmZmVyIHNlbnQgYmFjayBhbmQgZm9ydGggb24gdGhpcyBjb25uZWN0aW9uLiAoYmlnIGVuZGlhbikKLSAgICAgICAgIyB0aGUgcmVzdCBvZiB0aGUgYnVmZmVyOiB0aGUgYXV0aG9yaXphdGlvbiB1c2VyIG5hbWUgaW4gVVRGLTggLSBub3QgbnVsbCB0ZXJtaW5hdGVkLgotICAgICAgICBrZXJiZXJvcy5hdXRoR1NTQ2xpZW50VW53cmFwKHNlbGYuX2tlcmJlcm9zX2NvbnRleHQsIHNhc2xfcmVzcG9uc2UpCi0gICAgICAgIGRhdGEgPSBrZXJiZXJvcy5hdXRoR1NTQ2xpZW50UmVzcG9uc2Uoc2VsZi5fa2VyYmVyb3NfY29udGV4dCkKLSAgICAgICAgcGxhaW50ZXh0X2RhdGEgPSBiYXNlNjQuYjY0ZGVjb2RlKGRhdGEpCi0gICAgICAgIGFzc2VydCBsZW4ocGxhaW50ZXh0X2RhdGEpID09IDQsICJVbmV4cGVjdGVkIHJlc3BvbnNlIGZyb20gZ3JlbWxpbiBzZXJ2ZXIgc2FzbCBoYW5kc2hha2UiCi0gICAgICAgIHdvcmQsID0gc3RydWN0LnVucGFjaygnIUknLCBwbGFpbnRleHRfZGF0YSkKLSAgICAgICAgcW9wX2JpdHMgPSB3b3JkID4+IDI0Ci0gICAgICAgIGFzc2VydCBzZWxmLlFPUF9BVVRIX0JJVCAmIHFvcF9iaXRzLCAiVW5leHBlY3RlZCBzYXNsIHFvcCBsZXZlbCByZWNlaXZlZCBmcm9tIGdyZW1saW4gc2VydmVyIgotCi0gICAgICAgIG5hbWVfbGVuZ3RoID0gbGVuKHNlbGYuX3VzZXJuYW1lKQotICAgICAgICBmbXQgPSAnIUknICsgc3RyKG5hbWVfbGVuZ3RoKSArICdzJwotICAgICAgICB3b3JkID0gc2VsZi5RT1BfQVVUSF9CSVQgPDwgMjQgfCBzZWxmLl9tYXhfY29udGVudF9sZW5ndGgKLSAgICAgICAgb3V0ID0gc3RydWN0LnBhY2soZm10LCB3b3JkLCBzZWxmLl91c2VybmFtZS5lbmNvZGUoInV0Zi04IiksICkKLSAgICAgICAgZW5jb2RlZCA9IGJhc2U2NC5iNjRlbmNvZGUob3V0KS5kZWNvZGUoJ2FzY2lpJykKLSAgICAgICAga2VyYmVyb3MuYXV0aEdTU0NsaWVudFdyYXAoc2VsZi5fa2VyYmVyb3NfY29udGV4dCwgZW5jb2RlZCkKLSAgICAgICAgYXV0aCA9IGtlcmJlcm9zLmF1dGhHU1NDbGllbnRSZXNwb25zZShzZWxmLl9rZXJiZXJvc19jb250ZXh0KQotICAgICAgICByZXR1cm4gcmVxdWVzdC5SZXF1ZXN0TWVzc2FnZSgnJywgJ2F1dGhlbnRpY2F0aW9uJywgeydzYXNsJzogYXV0aH0pCi0KLQogY2xhc3MgR3JlbWxpblNlcnZlckhUVFBQcm90b2NvbChBYnN0cmFjdEJhc2VQcm90b2NvbCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwKLSAgICAgICAgICAgICAgICAgbWVzc2FnZV9zZXJpYWxpemVyLAotICAgICAgICAgICAgICAgICB1c2VybmFtZT0nJywgcGFzc3dvcmQ9JycpOgotICAgICAgICBzZWxmLl9tZXNzYWdlX3NlcmlhbGl6ZXIgPSBtZXNzYWdlX3NlcmlhbGl6ZXIKLSAgICAgICAgc2VsZi5fdXNlcm5hbWUgPSB1c2VybmFtZQotICAgICAgICBzZWxmLl9wYXNzd29yZCA9IHBhc3N3b3JkCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3Rfc2VyaWFsaXplciwgcmVzcG9uc2Vfc2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzPU5vbmUsIGF1dGg9Tm9uZSk6CisgICAgICAgIGlmIGNhbGxhYmxlKGludGVyY2VwdG9ycyk6CisgICAgICAgICAgICBpbnRlcmNlcHRvcnMgPSBbaW50ZXJjZXB0b3JzXQorICAgICAgICBlbGlmIG5vdCAoaXNpbnN0YW5jZShpbnRlcmNlcHRvcnMsIHR1cGxlKQorICAgICAgICAgICAgICAgICAgb3IgaXNpbnN0YW5jZShpbnRlcmNlcHRvcnMsIGxpc3QpCisgICAgICAgICAgICAgICAgICBvciBpbnRlcmNlcHRvcnMgaXMgTm9uZSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImludGVyY2VwdG9ycyBtdXN0IGJlIGEgY2FsbGFibGUsIHR1cGxlLCBsaXN0IG9yIE5vbmUiKQorCisgICAgICAgIHNlbGYuX2F1dGggPSBhdXRoCisgICAgICAgIHNlbGYuX2ludGVyY2VwdG9ycyA9IGludGVyY2VwdG9ycworICAgICAgICBzZWxmLl9yZXF1ZXN0X3NlcmlhbGl6ZXIgPSByZXF1ZXN0X3NlcmlhbGl6ZXIKKyAgICAgICAgc2VsZi5fcmVzcG9uc2Vfc2VyaWFsaXplciA9IHJlc3BvbnNlX3NlcmlhbGl6ZXIKKyAgICAgICAgc2VsZi5fcmVzcG9uc2VfbXNnID0geydzdGF0dXMnOiB7J2NvZGUnOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogJyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IHsnbWV0YSc6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IFtdfX0KKyAgICAgICAgc2VsZi5faXNfZmlyc3RfY2h1bmsgPSBUcnVlCiAKICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CiAgICAgICAgIHN1cGVyKEdyZW1saW5TZXJ2ZXJIVFRQUHJvdG9jb2wsIHNlbGYpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCiAKLSAgICBkZWYgd3JpdGUoc2VsZiwgcmVxdWVzdF9pZCwgcmVxdWVzdF9tZXNzYWdlKToKLQotICAgICAgICBiYXNpY19hdXRoID0ge30KLSAgICAgICAgaWYgc2VsZi5fdXNlcm5hbWUgYW5kIHNlbGYuX3Bhc3N3b3JkOgotICAgICAgICAgICAgYmFzaWNfYXV0aFsndXNlcm5hbWUnXSA9IHNlbGYuX3VzZXJuYW1lCi0gICAgICAgICAgICBiYXNpY19hdXRoWydwYXNzd29yZCddID0gc2VsZi5fcGFzc3dvcmQKLQotICAgICAgICBjb250ZW50X3R5cGUgPSBzdHIoc2VsZi5fbWVzc2FnZV9zZXJpYWxpemVyLnZlcnNpb24sIGVuY29kaW5nPSd1dGYtOCcpCisgICAgZGVmIHdyaXRlKHNlbGYsIHJlcXVlc3RfbWVzc2FnZSk6CisgICAgICAgIGFjY2VwdCA9IHN0cihzZWxmLl9yZXNwb25zZV9zZXJpYWxpemVyLnZlcnNpb24sIGVuY29kaW5nPSd1dGYtOCcpCiAgICAgICAgIG1lc3NhZ2UgPSB7Ci0gICAgICAgICAgICAnaGVhZGVycyc6IHsnQ09OVEVOVC1UWVBFJzogY29udGVudF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgJ0FDQ0VQVCc6IGNvbnRlbnRfdHlwZX0sCi0gICAgICAgICAgICAncGF5bG9hZCc6IHNlbGYuX21lc3NhZ2Vfc2VyaWFsaXplci5zZXJpYWxpemVfbWVzc2FnZShyZXF1ZXN0X2lkLCByZXF1ZXN0X21lc3NhZ2UpLAotICAgICAgICAgICAgJ2F1dGgnOiBiYXNpY19hdXRoCisgICAgICAgICAgICAnaGVhZGVycyc6IHsnYWNjZXB0JzogYWNjZXB0fSwKKyAgICAgICAgICAgICdwYXlsb2FkJzogc2VsZi5fcmVxdWVzdF9zZXJpYWxpemVyLnNlcmlhbGl6ZV9tZXNzYWdlKHJlcXVlc3RfbWVzc2FnZSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9yZXF1ZXN0X3NlcmlhbGl6ZXIgaXMgbm90IE5vbmUgZWxzZSByZXF1ZXN0X21lc3NhZ2UsCisgICAgICAgICAgICAnYXV0aCc6IHNlbGYuX2F1dGgKICAgICAgICAgfQogCisgICAgICAgICMgVGhlIHVzZXIgbWF5IG5vdCB3YW50IHRoZSBwYXlsb2FkIHRvIGJlIHNlcmlhbGl6ZWQgaWYgdGhleSBhcmUgdXNpbmcgYW4gaW50ZXJjZXB0b3IuCisgICAgICAgIGlmIHNlbGYuX3JlcXVlc3Rfc2VyaWFsaXplciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9IHN0cihzZWxmLl9yZXF1ZXN0X3NlcmlhbGl6ZXIudmVyc2lvbiwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgIG1lc3NhZ2VbJ2hlYWRlcnMnXVsnY29udGVudC10eXBlJ10gPSBjb250ZW50X3R5cGUKKworICAgICAgICBmb3IgaW50ZXJjZXB0b3IgaW4gc2VsZi5faW50ZXJjZXB0b3JzIG9yIFtdOgorICAgICAgICAgICAgbWVzc2FnZSA9IGludGVyY2VwdG9yKG1lc3NhZ2UpCisKICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlKG1lc3NhZ2UpCiAKLSAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCByZXNwb25zZSwgcmVzdWx0c19kaWN0KToKLSAgICAgICAgIyBpZiBHcmVtbGluIFNlcnZlciBjdXRzIG9mZiB0aGVuIHdlIGdldCBhIE5vbmUgZm9yIHRoZSBtZXNzYWdlCi0gICAgICAgIGlmIHJlc3BvbnNlIGlzIE5vbmU6Ci0gICAgICAgICAgICBsb2cuZXJyb3IoIlJlY2VpdmVkIGVtcHR5IG1lc3NhZ2UgZnJvbSBzZXJ2ZXIuIikKLSAgICAgICAgICAgIHJhaXNlIEdyZW1saW5TZXJ2ZXJFcnJvcih7J2NvZGUnOiA1MDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ1NlcnZlciBkaXNjb25uZWN0ZWQgLSBwbGVhc2UgdHJ5IHRvIHJlY29ubmVjdCcsICdhdHRyaWJ1dGVzJzoge319KQorICAgICcnJworICAgIEdyYXBoU09OIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nIGRlc2VyaWFsaXphdGlvbiwgd2UgYXJlIGFnZ3JlZ2F0aW5nIGRhdGEgYW5kIGJ5cGFzc2luZyBzdHJlYW1lZAorICAgICBkZXNlcmlhbGl6YXRpb24gd2hpbGUgR3JhcGhTT04gaXMgZW5hYmxlZCBmb3IgdGVzdGluZy4gUmVtb3ZlIGFmdGVyIEdyYXBoU09OIGlzIHJlbW92ZWQuCisgICAgJycnCisgICAgZGVmIGRhdGFfcmVjZWl2ZWRfYWdncmVnYXRlKHNlbGYsIHJlc3BvbnNlLCByZXN1bHRfc2V0KToKKyAgICAgICAgcmVzcG9uc2VfbXNnID0geydzdGF0dXMnOiB7J2NvZGUnOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogJyd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc3VsdCc6IHsnbWV0YSc6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IFtdfX0KIAotICAgICAgICBpZiByZXNwb25zZVsnb2snXToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9tZXNzYWdlX3NlcmlhbGl6ZXIuZGVzZXJpYWxpemVfbWVzc2FnZShyZXNwb25zZVsnY29udGVudCddKQotICAgICAgICAgICAgcmVxdWVzdF9pZCA9IG1lc3NhZ2VbJ3JlcXVlc3RJZCddCi0gICAgICAgICAgICByZXN1bHRfc2V0ID0gcmVzdWx0c19kaWN0W3JlcXVlc3RfaWRdIGlmIHJlcXVlc3RfaWQgaW4gcmVzdWx0c19kaWN0IGVsc2UgUmVzdWx0U2V0KE5vbmUsIE5vbmUpCi0gICAgICAgICAgICBzdGF0dXNfY29kZSA9IG1lc3NhZ2VbJ3N0YXR1cyddWydjb2RlJ10KLSAgICAgICAgICAgIGFnZ3JlZ2F0ZV90byA9IG1lc3NhZ2VbJ3Jlc3VsdCddWydtZXRhJ10uZ2V0KCdhZ2dyZWdhdGVUbycsICdsaXN0JykKLSAgICAgICAgICAgIGRhdGEgPSBtZXNzYWdlWydyZXN1bHQnXVsnZGF0YSddCisgICAgICAgIHJlc3BvbnNlX21zZyA9IHNlbGYuX2RlY29kZV9jaHVuayhyZXNwb25zZV9tc2csIHJlc3BvbnNlLCBzZWxmLl9pc19maXJzdF9jaHVuaykKKworICAgICAgICBzZWxmLl9pc19maXJzdF9jaHVuayA9IEZhbHNlCisgICAgICAgIHN0YXR1c19jb2RlID0gcmVzcG9uc2VfbXNnWydzdGF0dXMnXVsnY29kZSddCisgICAgICAgIGFnZ3JlZ2F0ZV90byA9IHJlc3BvbnNlX21zZ1sncmVzdWx0J11bJ21ldGEnXS5nZXQoJ2FnZ3JlZ2F0ZVRvJywgJ2xpc3QnKQorICAgICAgICBkYXRhID0gcmVzcG9uc2VfbXNnWydyZXN1bHQnXVsnZGF0YSddCisgICAgICAgIHJlc3VsdF9zZXQuYWdncmVnYXRlX3RvID0gYWdncmVnYXRlX3RvCisgICAgICAgIHNlbGYuX2lzX2ZpcnN0X2NodW5rID0gVHJ1ZQorCisgICAgICAgIGlmIHN0YXR1c19jb2RlID09IDIwNCBhbmQgbGVuKGRhdGEpID09IDA6CisgICAgICAgICAgICByZXN1bHRfc2V0LnN0cmVhbS5wdXRfbm93YWl0KFtdKQorICAgICAgICBlbGlmIHN0YXR1c19jb2RlIGluIFsyMDAsIDIwNCwgMjA2XToKKyAgICAgICAgICAgIHJlc3VsdF9zZXQuc3RyZWFtLnB1dF9ub3dhaXQoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZy5lcnJvcigiXHJcblJlY2VpdmVkIGVycm9yIG1lc3NhZ2UgJyVzJ1xyXG5cclxuV2l0aCByZXN1bHQgc2V0ICclcyciLAorICAgICAgICAgICAgICAgICAgICAgIHN0cihzZWxmLl9yZXNwb25zZV9tc2cpLCBzdHIocmVzdWx0X3NldCkpCisgICAgICAgICAgICByYWlzZSBHcmVtbGluU2VydmVyRXJyb3Ioeydjb2RlJzogc3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBzZWxmLl9yZXNwb25zZV9tc2dbJ3N0YXR1cyddWydtZXNzYWdlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IHNlbGYuX3Jlc3BvbnNlX21zZ1snc3RhdHVzJ11bJ2V4Y2VwdGlvbiddfSkKKworICAgICMgZGF0YSBpcyByZWNlaXZlZCBpbiBjaHVua3MKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCByZXNwb25zZV9jaHVuaywgcmVzdWx0X3NldCwgcmVhZF9jb21wbGV0ZWQ9Tm9uZSwgaHR0cF9yZXFfcmVzcD1Ob25lKToKKyAgICAgICAgIyB3ZSBzaG91bGRuJ3QgbmVlZCB0byB1c2UgdGhlIGh0dHBfcmVxX3Jlc3AgY29kZSBhcyBzdGF0dXMgaXMgc2VudCBpbiByZXNwb25zZSBtZXNzYWdlLCBidXQgbGVhdmluZyBpdCBmb3Igbm93CisgICAgICAgIGlmIHJlYWRfY29tcGxldGVkOgorICAgICAgICAgICAgc3RhdHVzX2NvZGUgPSBzZWxmLl9yZXNwb25zZV9tc2dbJ3N0YXR1cyddWydjb2RlJ10KKyAgICAgICAgICAgIGFnZ3JlZ2F0ZV90byA9IHNlbGYuX3Jlc3BvbnNlX21zZ1sncmVzdWx0J11bJ21ldGEnXS5nZXQoJ2FnZ3JlZ2F0ZVRvJywgJ2xpc3QnKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Jlc3BvbnNlX21zZ1sncmVzdWx0J11bJ2RhdGEnXQogICAgICAgICAgICAgcmVzdWx0X3NldC5hZ2dyZWdhdGVfdG8gPSBhZ2dyZWdhdGVfdG8KIAotICAgICAgICAgICAgaWYgc3RhdHVzX2NvZGUgPT0gMjA0OgorICAgICAgICAgICAgIyByZXNldCByZXNwb25zZSBtZXNzYWdlCisgICAgICAgICAgICBzZWxmLl9yZXNwb25zZV9tc2cgPSB7J3N0YXR1cyc6IHsnY29kZSc6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6ICcnfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzdWx0JzogeydtZXRhJzoge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IFtdfX0KKyAgICAgICAgICAgIHNlbGYuX2lzX2ZpcnN0X2NodW5rID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBzdGF0dXNfY29kZSA9PSAyMDQgYW5kIGxlbihkYXRhKSA9PSAwOgogICAgICAgICAgICAgICAgIHJlc3VsdF9zZXQuc3RyZWFtLnB1dF9ub3dhaXQoW10pCi0gICAgICAgICAgICAgICAgZGVsIHJlc3VsdHNfZGljdFtyZXF1ZXN0X2lkXQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXNfY29kZQotICAgICAgICAgICAgZWxpZiBzdGF0dXNfY29kZSBpbiBbMjAwLCAyMDZdOgorICAgICAgICAgICAgZWxpZiBzdGF0dXNfY29kZSBpbiBbMjAwLCAyMDQsIDIwNl06CiAgICAgICAgICAgICAgICAgcmVzdWx0X3NldC5zdHJlYW0ucHV0X25vd2FpdChkYXRhKQotICAgICAgICAgICAgICAgIGlmIHN0YXR1c19jb2RlID09IDIwMDoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3NldC5zdGF0dXNfYXR0cmlidXRlcyA9IG1lc3NhZ2VbJ3N0YXR1cyddWydhdHRyaWJ1dGVzJ10KLSAgICAgICAgICAgICAgICAgICAgZGVsIHJlc3VsdHNfZGljdFtyZXF1ZXN0X2lkXQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXNfY29kZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIlxyXG5SZWNlaXZlZCBlcnJvciBtZXNzYWdlICclcydcclxuXHJcbldpdGggcmVzdWx0IHNldCAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKHNlbGYuX3Jlc3BvbnNlX21zZyksIHN0cihyZXN1bHRfc2V0KSkKKyAgICAgICAgICAgICAgICByYWlzZSBHcmVtbGluU2VydmVyRXJyb3Ioeydjb2RlJzogc3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IHNlbGYuX3Jlc3BvbnNlX21zZ1snc3RhdHVzJ11bJ21lc3NhZ2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBzZWxmLl9yZXNwb25zZV9tc2dbJ3N0YXR1cyddWydleGNlcHRpb24nXX0pCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFRoaXMgbWVzc2FnZSBpcyBnb2luZyB0byBiZSBodWdlIGFuZCBraW5kIG9mIGhhcmQgdG8gcmVhZCwgYnV0IGluIHRoZSBldmVudCBvZiBhbiBlcnJvciwKLSAgICAgICAgICAgICMgaXQgY2FuIHByb3ZpZGUgaW52YWx1YWJsZSBpbmZvLCBzbyBzcGFjZSBpdCBvdXQgYXBwcm9wcmlhdGVseS4KLSAgICAgICAgICAgIGxvZy5lcnJvcigiXHJcblJlY2VpdmVkIGVycm9yIG1lc3NhZ2UgJyVzJ1xyXG5cclxuV2l0aCByZXN1bHRzIGRpY3Rpb25hcnkgJyVzJyIsCi0gICAgICAgICAgICAgICAgICAgICAgc3RyKHJlc3BvbnNlWydjb250ZW50J10pLCBzdHIocmVzdWx0c19kaWN0KSkKLSAgICAgICAgICAgIGJvZHkgPSBqc29uLmxvYWRzKHJlc3BvbnNlWydjb250ZW50J10pCi0gICAgICAgICAgICBkZWwgcmVzdWx0c19kaWN0W2JvZHlbJ3JlcXVlc3RJZCddXQotICAgICAgICAgICAgcmFpc2UgR3JlbWxpblNlcnZlckVycm9yKHsnY29kZSc6IHJlc3BvbnNlWydzdGF0dXMnXSwgJ21lc3NhZ2UnOiBib2R5WydtZXNzYWdlJ10sICdhdHRyaWJ1dGVzJzoge319KQorICAgICAgICAgICAgc2VsZi5fcmVzcG9uc2VfbXNnID0gc2VsZi5fZGVjb2RlX2NodW5rKHNlbGYuX3Jlc3BvbnNlX21zZywgcmVzcG9uc2VfY2h1bmssIHNlbGYuX2lzX2ZpcnN0X2NodW5rKQorICAgICAgICAgICAgc2VsZi5faXNfZmlyc3RfY2h1bmsgPSBGYWxzZQorCisgICAgZGVmIF9kZWNvZGVfY2h1bmsoc2VsZiwgbWVzc2FnZSwgZGF0YV9idWZmZXIsIGlzX2ZpcnN0X2NodW5rKToKKyAgICAgICAgY2h1bmtfbXNnID0gc2VsZi5fcmVzcG9uc2Vfc2VyaWFsaXplci5kZXNlcmlhbGl6ZV9tZXNzYWdlKGRhdGFfYnVmZmVyLCBpc19maXJzdF9jaHVuaykKKworICAgICAgICBpZiAncmVzdWx0JyBpbiBjaHVua19tc2c6CisgICAgICAgICAgICBtc2dfZGF0YSA9IG1lc3NhZ2VbJ3Jlc3VsdCddWydkYXRhJ10KKyAgICAgICAgICAgIGNodW5rX2RhdGEgPSBjaHVua19tc2dbJ3Jlc3VsdCddWydkYXRhJ10KKyAgICAgICAgICAgIG1lc3NhZ2VbJ3Jlc3VsdCddWydkYXRhJ10gPSBbKm1zZ19kYXRhLCAqY2h1bmtfZGF0YV0KKyAgICAgICAgaWYgJ3N0YXR1cycgaW4gY2h1bmtfbXNnOgorICAgICAgICAgICAgc3RhdHVzX2NvZGUgPSBjaHVua19tc2dbJ3N0YXR1cyddWydjb2RlJ10KKyAgICAgICAgICAgIGlmIHN0YXR1c19jb2RlIGluIFsyMDAsIDIwNCwgMjA2XToKKyAgICAgICAgICAgICAgICBtZXNzYWdlLnVwZGF0ZSh7J3N0YXR1cyc6IGNodW5rX21zZ1snc3RhdHVzJ119KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBHcmVtbGluU2VydmVyRXJyb3Ioeydjb2RlJzogc3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IGNodW5rX21zZ1snc3RhdHVzJ11bJ21lc3NhZ2UnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBjaHVua19tc2dbJ3N0YXR1cyddWydleGNlcHRpb24nXX0pCisgICAgICAgIHJldHVybiBtZXNzYWdlCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3JlbW90ZV9jb25uZWN0aW9uLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9yZW1vdGVfY29ubmVjdGlvbi5weQppbmRleCA4M2M4NmJlLi4wZjJiNjEwIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3JlbW90ZV9jb25uZWN0aW9uLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvcmVtb3RlX2Nvbm5lY3Rpb24ucHkKQEAgLTM3LDE4ICszNywxMiBAQAogICAgICAgICByZXR1cm4gc2VsZi5fdHJhdmVyc2FsX3NvdXJjZQogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBzdWJtaXQoc2VsZiwgYnl0ZWNvZGUpOgorICAgIGRlZiBzdWJtaXQoc2VsZiwgZ3JlbWxpbl9sYW5nKToKICAgICAgICAgcGFzcwogCiAgICAgZGVmIGlzX2Nsb3NlZChzZWxmKToKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdpc19jbG9zZWQoKSBtdXN0IGJlIGltcGxlbWVudGVkJykKIAotICAgIGRlZiBpc19zZXNzaW9uX2JvdW5kKHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBjcmVhdGVfc2Vzc2lvbihzZWxmKToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdjcmVhdGVTZXNzaW9uKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCcpOwotCiAgICAgZGVmIGNvbW1pdChzZWxmKToKICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdjb21taXQoKSBtdXN0IGJlIGltcGxlbWVudGVkJykKIApAQCAtNzUsMTAgKzY5LDEwIEBACiAKICAgICBkZWYgYXBwbHkoc2VsZiwgdHJhdmVyc2FsKToKICAgICAgICAgaWYgdHJhdmVyc2FsLnRyYXZlcnNlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHJlbW90ZV90cmF2ZXJzYWwgPSBzZWxmLnJlbW90ZV9jb25uZWN0aW9uLnN1Ym1pdCh0cmF2ZXJzYWwuYnl0ZWNvZGUpCisgICAgICAgICAgICByZW1vdGVfdHJhdmVyc2FsID0gc2VsZi5yZW1vdGVfY29ubmVjdGlvbi5zdWJtaXQodHJhdmVyc2FsLmdyZW1saW5fbGFuZykKICAgICAgICAgICAgIHRyYXZlcnNhbC5yZW1vdGVfcmVzdWx0cyA9IHJlbW90ZV90cmF2ZXJzYWwKICAgICAgICAgICAgIHRyYXZlcnNhbC50cmF2ZXJzZXJzID0gcmVtb3RlX3RyYXZlcnNhbC50cmF2ZXJzZXJzCiAKICAgICBkZWYgYXBwbHlfYXN5bmMoc2VsZiwgdHJhdmVyc2FsKToKICAgICAgICAgaWYgdHJhdmVyc2FsLnRyYXZlcnNlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHRyYXZlcnNhbC5yZW1vdGVfcmVzdWx0cyA9IHNlbGYucmVtb3RlX2Nvbm5lY3Rpb24uc3VibWl0X2FzeW5jKHRyYXZlcnNhbC5ieXRlY29kZSkKKyAgICAgICAgICAgIHRyYXZlcnNhbC5yZW1vdGVfcmVzdWx0cyA9IHNlbGYucmVtb3RlX2Nvbm5lY3Rpb24uc3VibWl0X2FzeW5jKHRyYXZlcnNhbC5ncmVtbGluX2xhbmcpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3JlcXVlc3QucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3JlcXVlc3QucHkKaW5kZXggNTc2MGEyNS4uNzhjZDU0YSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9yZXF1ZXN0LnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvcmVxdWVzdC5weQpAQCAtMjAsNiArMjAsOCBAQAogCiBfX2F1dGhvcl9fID0gJ0RhdmlkIE0uIEJyb3duIChkYXZlYnNob3dAZ21haWwuY29tKScKIAotCiBSZXF1ZXN0TWVzc2FnZSA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCi0gICAgJ1JlcXVlc3RNZXNzYWdlJywgWydwcm9jZXNzb3InLCAnb3AnLCAnYXJncyddKQorICAgICdSZXF1ZXN0TWVzc2FnZScsIFsnZmllbGRzJywgJ2dyZW1saW4nXSkKKworVG9rZW5zID0gWydiYXRjaFNpemUnLCAnYmluZGluZ3MnLCAnZycsICdncmVtbGluJywgJ2xhbmd1YWdlJywKKyAgICAgICAgICAnZXZhbHVhdGlvblRpbWVvdXQnLCAnbWF0ZXJpYWxpemVQcm9wZXJ0aWVzJywgJ3RpbWVvdXRNcycsICd1c2VyQWdlbnQnLCAnYnVsa1Jlc3VsdHMnXQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9yZXN1bHRzZXQucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3Jlc3VsdHNldC5weQppbmRleCA0MDE4ZjMxLi4xZjFlYTVmIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3Jlc3VsdHNldC5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3Jlc3VsdHNldC5weQpAQCAtMjMsMTIgKzIzLDEwIEBACiAKIGNsYXNzIFJlc3VsdFNldDoKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0sIHJlcXVlc3RfaWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW0pOgogICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KLSAgICAgICAgc2VsZi5fcmVxdWVzdF9pZCA9IHJlcXVlc3RfaWQKICAgICAgICAgc2VsZi5fZG9uZSA9IE5vbmUKICAgICAgICAgc2VsZi5fYWdncmVnYXRlX3RvID0gTm9uZQotICAgICAgICBzZWxmLl9zdGF0dXNfYXR0cmlidXRlcyA9IHt9CiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgYWdncmVnYXRlX3RvKHNlbGYpOgpAQCAtMzksMTggKzM3LDYgQEAKICAgICAgICAgc2VsZi5fYWdncmVnYXRlX3RvID0gdmFsCiAKICAgICBAcHJvcGVydHkKLSAgICBkZWYgc3RhdHVzX2F0dHJpYnV0ZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9zdGF0dXNfYXR0cmlidXRlcwotCi0gICAgQHN0YXR1c19hdHRyaWJ1dGVzLnNldHRlcgotICAgIGRlZiBzdGF0dXNfYXR0cmlidXRlcyhzZWxmLCB2YWwpOgotICAgICAgICBzZWxmLl9zdGF0dXNfYXR0cmlidXRlcyA9IHZhbAotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIHJlcXVlc3RfaWQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZXF1ZXN0X2lkCi0KLSAgICBAcHJvcGVydHkKICAgICBkZWYgc3RyZWFtKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fc3RyZWFtCiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvc2VyaWFsaXplci5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvc2VyaWFsaXplci5weQppbmRleCAyMDQzYzlkLi4zZjE4ZThjIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3NlcmlhbGl6ZXIucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL2RyaXZlci9zZXJpYWxpemVyLnB5CkBAIC0yMCw4ICsyMCwxMCBAQAogaW1wb3J0IGJhc2U2NAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBzdHJ1Y3QKLWltcG9ydCB1dWlkCiBpbXBvcnQgaW8KKworZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgVHJhdmVyc2VyCisKIHRyeToKICAgICBpbXBvcnQgdWpzb24gYXMganNvbgogICAgIGlmIGludChqc29uLl9fdmVyc2lvbl9fWzBdKSA8IDI6CkBAIC0yOSw3MiArMzEsMTYgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBpbXBvcnQganNvbgogCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pbyBpbXBvcnQgZ3JhcGhiaW5hcnlWMQotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8gaW1wb3J0IGdyYXBoc29uVjJkMAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8gaW1wb3J0IGdyYXBoc29uVjNkMAorZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8gaW1wb3J0IGdyYXBoYmluYXJ5VjQsIGdyYXBoc29uVjQKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLnV0aWwgaW1wb3J0IE1hcmtlcgogCiBfX2F1dGhvcl9fID0gJ0RhdmlkIE0uIEJyb3duIChkYXZlYnNob3dAZ21haWwuY29tKSwgTHluZG9uIEJhdXRvIChseW5kb25iQGJpdHF1aWxsdGVjaC5jb20pJwogCisiIiIKK0dyYXBoU09OVjQKKyIiIgogCi1jbGFzcyBQcm9jZXNzb3I6Ci0gICAgIiIiQmFzZSBjbGFzcyBmb3IgT3BQcm9jZXNzb3Igc2VyaWFsaXphdGlvbiBzeXN0ZW0uIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVyKToKLSAgICAgICAgc2VsZi5fd3JpdGVyID0gd3JpdGVyCi0KLSAgICBkZWYgZ2V0X29wX2FyZ3Moc2VsZiwgb3AsIGFyZ3MpOgotICAgICAgICBvcF9tZXRob2QgPSBnZXRhdHRyKHNlbGYsIG9wLCBOb25lKQotICAgICAgICBpZiBub3Qgb3BfbWV0aG9kOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJQcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBvcDoge30iLmZvcm1hdChvcCkpCi0gICAgICAgIHJldHVybiBvcF9tZXRob2QoYXJncykKLQotCi1jbGFzcyBTdGFuZGFyZChQcm9jZXNzb3IpOgotCi0gICAgZGVmIGF1dGhlbnRpY2F0aW9uKHNlbGYsIGFyZ3MpOgotICAgICAgICByZXR1cm4gYXJncwotCi0gICAgZGVmIGV2YWwoc2VsZiwgYXJncyk6Ci0gICAgICAgIHJldHVybiBhcmdzCi0KLQotY2xhc3MgU2Vzc2lvbihQcm9jZXNzb3IpOgotCi0gICAgZGVmIGF1dGhlbnRpY2F0aW9uKHNlbGYsIGFyZ3MpOgotICAgICAgICByZXR1cm4gYXJncwotCi0gICAgZGVmIGV2YWwoc2VsZiwgYXJncyk6Ci0gICAgICAgIHJldHVybiBhcmdzCi0KLSAgICBkZWYgY2xvc2Uoc2VsZiwgYXJncyk6Ci0gICAgICAgIHJldHVybiBhcmdzCi0KLSAgICBkZWYgYnl0ZWNvZGUoc2VsZiwgYXJncyk6Ci0gICAgICAgIGdyZW1saW4gPSBhcmdzWydncmVtbGluJ10KLSAgICAgICAgYXJnc1snZ3JlbWxpbiddID0gc2VsZi5fd3JpdGVyLnRvX2RpY3QoZ3JlbWxpbikKLSAgICAgICAgYWxpYXNlcyA9IGFyZ3MuZ2V0KCdhbGlhc2VzJywgJycpCi0gICAgICAgIGlmIG5vdCBhbGlhc2VzOgotICAgICAgICAgICAgYWxpYXNlcyA9IHsnZyc6ICdnJ30KLSAgICAgICAgYXJnc1snYWxpYXNlcyddID0gYWxpYXNlcwotICAgICAgICByZXR1cm4gYXJncwotCi0KLWNsYXNzIFRyYXZlcnNhbChQcm9jZXNzb3IpOgotCi0gICAgZGVmIGF1dGhlbnRpY2F0aW9uKHNlbGYsIGFyZ3MpOgotICAgICAgICByZXR1cm4gYXJncwotCi0gICAgZGVmIGJ5dGVjb2RlKHNlbGYsIGFyZ3MpOgotICAgICAgICBncmVtbGluID0gYXJnc1snZ3JlbWxpbiddCi0gICAgICAgIGFyZ3NbJ2dyZW1saW4nXSA9IHNlbGYuX3dyaXRlci50b19kaWN0KGdyZW1saW4pCi0gICAgICAgIGFsaWFzZXMgPSBhcmdzLmdldCgnYWxpYXNlcycsICcnKQotICAgICAgICBpZiBub3QgYWxpYXNlczoKLSAgICAgICAgICAgIGFsaWFzZXMgPSB7J2cnOiAnZyd9Ci0gICAgICAgIGFyZ3NbJ2FsaWFzZXMnXSA9IGFsaWFzZXMKLSAgICAgICAgcmV0dXJuIGFyZ3MKLQotCi1jbGFzcyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyKG9iamVjdCk6CitjbGFzcyBHcmFwaFNPTlNlcmlhbGl6ZXJzVjQob2JqZWN0KToKICAgICAiIiIKICAgICBNZXNzYWdlIHNlcmlhbGl6ZXIgZm9yIEdyYXBoU09OLiBBbGxvdyB1c2VycyB0byBwYXNzIGN1c3RvbSByZWFkZXIsCiAgICAgd3JpdGVyLCBhbmQgdmVyc2lvbiBrd2FyZ3MgZm9yIGN1c3RvbSBzZXJpYWxpemF0aW9uLiBPdGhlcndpc2UsCkBAIC0xMDIsOSArNDgsOSBAQAogICAgICIiIgogCiAgICAgIyBLRUVQIFRSQUNLIE9GIENVUlJFTlQgREVGQVVMVFMKLSAgICBERUZBVUxUX1JFQURFUl9DTEFTUyA9IGdyYXBoc29uVjNkMC5HcmFwaFNPTlJlYWRlcgotICAgIERFRkFVTFRfV1JJVEVSX0NMQVNTID0gZ3JhcGhzb25WM2QwLkdyYXBoU09OV3JpdGVyCi0gICAgREVGQVVMVF9WRVJTSU9OID0gYiJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24iCisgICAgREVGQVVMVF9SRUFERVJfQ0xBU1MgPSBncmFwaHNvblY0LkdyYXBoU09OUmVhZGVyCisgICAgREVGQVVMVF9XUklURVJfQ0xBU1MgPSBncmFwaHNvblY0LkdyYXBoU09OV3JpdGVyCisgICAgREVGQVVMVF9WRVJTSU9OID0gYiJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12NC4wK2pzb24iCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZGVyPU5vbmUsIHdyaXRlcj1Ob25lLCB2ZXJzaW9uPU5vbmUpOgogICAgICAgICBpZiBub3QgdmVyc2lvbjoKQEAgLTExNSw4MCArNjEsNDkgQEAKICAgICAgICAgc2VsZi5fZ3JhcGhzb25fcmVhZGVyID0gcmVhZGVyCiAgICAgICAgIGlmIG5vdCB3cml0ZXI6CiAgICAgICAgICAgICB3cml0ZXIgPSBzZWxmLkRFRkFVTFRfV1JJVEVSX0NMQVNTKCkKLSAgICAgICAgc2VsZi5zdGFuZGFyZCA9IFN0YW5kYXJkKHdyaXRlcikKLSAgICAgICAgc2VsZi50cmF2ZXJzYWwgPSBUcmF2ZXJzYWwod3JpdGVyKQotICAgICAgICBzZWxmLnNlc3Npb24gPSBTZXNzaW9uKHdyaXRlcikKKyAgICAgICAgc2VsZi5fZ3JhcGhzb25fd3JpdGVyID0gd3JpdGVyCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgdmVyc2lvbihzZWxmKToKICAgICAgICAgIiIiUmVhZCBvbmx5IHByb3BlcnR5IiIiCiAgICAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKLSAgICBkZWYgZ2V0X3Byb2Nlc3NvcihzZWxmLCBwcm9jZXNzb3IpOgotICAgICAgICBwcm9jZXNzb3IgPSBnZXRhdHRyKHNlbGYsIHByb2Nlc3NvciwgTm9uZSkKLSAgICAgICAgaWYgbm90IHByb2Nlc3NvcjoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBwcm9jZXNzb3IiKQotICAgICAgICByZXR1cm4gcHJvY2Vzc29yCi0KLSAgICBkZWYgc2VyaWFsaXplX21lc3NhZ2Uoc2VsZiwgcmVxdWVzdF9pZCwgcmVxdWVzdF9tZXNzYWdlKToKLSAgICAgICAgcHJvY2Vzc29yID0gcmVxdWVzdF9tZXNzYWdlLnByb2Nlc3NvcgotICAgICAgICBvcCA9IHJlcXVlc3RfbWVzc2FnZS5vcAotICAgICAgICBhcmdzID0gcmVxdWVzdF9tZXNzYWdlLmFyZ3MKLSAgICAgICAgaWYgbm90IHByb2Nlc3NvcjoKLSAgICAgICAgICAgIHByb2Nlc3Nvcl9vYmogPSBzZWxmLmdldF9wcm9jZXNzb3IoJ3N0YW5kYXJkJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb2Nlc3Nvcl9vYmogPSBzZWxmLmdldF9wcm9jZXNzb3IocHJvY2Vzc29yKQotICAgICAgICBhcmdzID0gcHJvY2Vzc29yX29iai5nZXRfb3BfYXJncyhvcCwgYXJncykKLSAgICAgICAgbWVzc2FnZSA9IHNlbGYuYnVpbGRfbWVzc2FnZShyZXF1ZXN0X2lkLCBwcm9jZXNzb3IsIG9wLCBhcmdzKQorICAgIGRlZiBzZXJpYWxpemVfbWVzc2FnZShzZWxmLCByZXF1ZXN0X21lc3NhZ2UpOgorICAgICAgICBtZXNzYWdlID0gc2VsZi5idWlsZF9tZXNzYWdlKHJlcXVlc3RfbWVzc2FnZS5maWVsZHMsIHJlcXVlc3RfbWVzc2FnZS5ncmVtbGluKQogICAgICAgICByZXR1cm4gbWVzc2FnZQogCi0gICAgZGVmIGJ1aWxkX21lc3NhZ2Uoc2VsZiwgcmVxdWVzdF9pZCwgcHJvY2Vzc29yLCBvcCwgYXJncyk6CisgICAgZGVmIGJ1aWxkX21lc3NhZ2Uoc2VsZiwgZmllbGRzLCBncmVtbGluKToKICAgICAgICAgbWVzc2FnZSA9IHsKLSAgICAgICAgICAgICdyZXF1ZXN0SWQnOiB7J0B0eXBlJzogJ2c6VVVJRCcsICdAdmFsdWUnOiByZXF1ZXN0X2lkfSwKLSAgICAgICAgICAgICdwcm9jZXNzb3InOiBwcm9jZXNzb3IsCi0gICAgICAgICAgICAnb3AnOiBvcCwKLSAgICAgICAgICAgICdhcmdzJzogYXJncworICAgICAgICAgICAgJ2dyZW1saW4nOiBncmVtbGluICAjIGdyZW1saW4gd2lsIGFsd2F5cyBiZSBhIGdyZW1saW4gbGFuZyBzdHJpbmcgc2NyaXB0CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNlbGYuZmluYWxpemVfbWVzc2FnZShtZXNzYWdlLCBiIlx4MjEiLCBzZWxmLnZlcnNpb24pCisgICAgICAgIGZvciBrLCB2IGluIGZpZWxkcy5pdGVtcygpOgorICAgICAgICAgICAgbWVzc2FnZVtrXSA9IHNlbGYuX2dyYXBoc29uX3dyaXRlci50b19kaWN0KHYpCisgICAgICAgIHJldHVybiBzZWxmLmZpbmFsaXplX21lc3NhZ2UobWVzc2FnZSkKIAotICAgIGRlZiBmaW5hbGl6ZV9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIG1pbWVfbGVuLCBtaW1lX3R5cGUpOgorICAgIGRlZiBmaW5hbGl6ZV9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICBtZXNzYWdlID0ganNvbi5kdW1wcyhtZXNzYWdlKQotICAgICAgICBtZXNzYWdlID0gYicnLmpvaW4oW21pbWVfbGVuLCBtaW1lX3R5cGUsIG1lc3NhZ2UuZW5jb2RlKCd1dGYtOCcpXSkKICAgICAgICAgcmV0dXJuIG1lc3NhZ2UKIAotICAgIGRlZiBkZXNlcmlhbGl6ZV9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgotICAgICAgICAjIGZvciBwYXJzaW5nIHN0cmluZyBtZXNzYWdlIHZpYSBIVFRQIGNvbm5lY3Rpb25zCi0gICAgICAgIG1zZyA9IGpzb24ubG9hZHMobWVzc2FnZSBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIHN0cikgZWxzZSBtZXNzYWdlLmRlY29kZSgndXRmLTgnKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2dyYXBoc29uX3JlYWRlci50b19vYmplY3QobXNnKQorICAgIGRlZiBkZXNlcmlhbGl6ZV9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGlzX2ZpcnN0X2NodW5rPUZhbHNlKToKKyAgICAgICAgaWYgaXNfZmlyc3RfY2h1bms6CisgICAgICAgICAgICBtc2cgPSBqc29uLmxvYWRzKG1lc3NhZ2UgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpIGVsc2UgbWVzc2FnZS5kZWNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ3JhcGhzb25fcmVhZGVyLnRvX29iamVjdChtc2cpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGdyYXBoU09OIGRvZXMgbm90IHN0cmVhbSwgYWxsIHJlc3VsdHMgYXJlIGFnZ3JlZ2F0ZWQgaW5zaWRlIHRoZSBmaXJzdCBjaHVuaworICAgICAgICAgICAgcmV0dXJuICIiCiAKLQotY2xhc3MgR3JhcGhTT05TZXJpYWxpemVyc1YyZDAoR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplcik6Ci0gICAgIiIiTWVzc2FnZSBzZXJpYWxpemVyIGZvciBHcmFwaFNPTiAyLjAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHJlYWRlciA9IGdyYXBoc29uVjJkMC5HcmFwaFNPTlJlYWRlcigpCi0gICAgICAgIHdyaXRlciA9IGdyYXBoc29uVjJkMC5HcmFwaFNPTldyaXRlcigpCi0gICAgICAgIHZlcnNpb24gPSBiImFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbiIKLSAgICAgICAgc3VwZXIoR3JhcGhTT05TZXJpYWxpemVyc1YyZDAsIHNlbGYpLl9faW5pdF9fKHJlYWRlciwgd3JpdGVyLCB2ZXJzaW9uKQotCi0KLWNsYXNzIEdyYXBoU09OU2VyaWFsaXplcnNWM2QwKEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXIpOgotICAgICIiIk1lc3NhZ2Ugc2VyaWFsaXplciBmb3IgR3JhcGhTT04gMy4wIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICByZWFkZXIgPSBncmFwaHNvblYzZDAuR3JhcGhTT05SZWFkZXIoKQotICAgICAgICB3cml0ZXIgPSBncmFwaHNvblYzZDAuR3JhcGhTT05Xcml0ZXIoKQotICAgICAgICB2ZXJzaW9uID0gYiJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24iCi0gICAgICAgIHN1cGVyKEdyYXBoU09OU2VyaWFsaXplcnNWM2QwLCBzZWxmKS5fX2luaXRfXyhyZWFkZXIsIHdyaXRlciwgdmVyc2lvbikKLQotCi1jbGFzcyBHcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEob2JqZWN0KToKLSAgICBERUZBVUxUX1JFQURFUl9DTEFTUyA9IGdyYXBoYmluYXJ5VjEuR3JhcGhCaW5hcnlSZWFkZXIKLSAgICBERUZBVUxUX1dSSVRFUl9DTEFTUyA9IGdyYXBoYmluYXJ5VjEuR3JhcGhCaW5hcnlXcml0ZXIKLSAgICBERUZBVUxUX1ZFUlNJT04gPSBiImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wIgorIiIiCitHcmFwaEJpbmFyeVY0CisiIiIKK2NsYXNzIEdyYXBoQmluYXJ5U2VyaWFsaXplcnNWNChvYmplY3QpOgorICAgIERFRkFVTFRfUkVBREVSX0NMQVNTID0gZ3JhcGhiaW5hcnlWNC5HcmFwaEJpbmFyeVJlYWRlcgorICAgIERFRkFVTFRfV1JJVEVSX0NMQVNTID0gZ3JhcGhiaW5hcnlWNC5HcmFwaEJpbmFyeVdyaXRlcgorICAgIERFRkFVTFRfVkVSU0lPTiA9IGIiYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAiCiAKICAgICBtYXhfaW50NjQgPSAweEZGRkZGRkZGRkZGRkZGRkYKICAgICBoZWFkZXJfc3RydWN0ID0gc3RydWN0LlN0cnVjdCgnPmIzMnNCUVEnKQogICAgIGhlYWRlcl9wYWNrID0gaGVhZGVyX3N0cnVjdC5wYWNrCi0gICAgaW50X3BhY2sgPSBncmFwaGJpbmFyeVYxLmludDMyX3BhY2sKKyAgICBpbnRfcGFjayA9IGdyYXBoYmluYXJ5VjQuaW50MzJfcGFjawogICAgIGludDMyX3VucGFjayA9IHN0cnVjdC5TdHJ1Y3QoIj5pIikudW5wYWNrCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVhZGVyPU5vbmUsIHdyaXRlcj1Ob25lLCB2ZXJzaW9uPU5vbmUpOgpAQCAtMjAxLDk0ICsxMTYsOTUgQEAKICAgICAgICAgaWYgbm90IHdyaXRlcjoKICAgICAgICAgICAgIHdyaXRlciA9IHNlbGYuREVGQVVMVF9XUklURVJfQ0xBU1MoKQogICAgICAgICBzZWxmLl9ncmFwaGJpbmFyeV93cml0ZXIgPSB3cml0ZXIKLSAgICAgICAgc2VsZi5zdGFuZGFyZCA9IFN0YW5kYXJkKHdyaXRlcikKLSAgICAgICAgc2VsZi50cmF2ZXJzYWwgPSBUcmF2ZXJzYWwod3JpdGVyKQotICAgICAgICBzZWxmLnNlc3Npb24gPSBTZXNzaW9uKHdyaXRlcikKKyAgICAgICAgc2VsZi5fYnVsa2VkID0gRmFsc2UKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiB2ZXJzaW9uKHNlbGYpOgogICAgICAgICAiIiJSZWFkIG9ubHkgcHJvcGVydHkiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX3ZlcnNpb24KIAotICAgIGRlZiBnZXRfcHJvY2Vzc29yKHNlbGYsIHByb2Nlc3Nvcik6Ci0gICAgICAgIHByb2Nlc3NvciA9IGdldGF0dHIoc2VsZiwgcHJvY2Vzc29yLCBOb25lKQotICAgICAgICBpZiBub3QgcHJvY2Vzc29yOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHByb2Nlc3NvciIpCi0gICAgICAgIHJldHVybiBwcm9jZXNzb3IKLQotICAgIGRlZiBzZXJpYWxpemVfbWVzc2FnZShzZWxmLCByZXF1ZXN0X2lkLCByZXF1ZXN0X21lc3NhZ2UpOgotICAgICAgICBwcm9jZXNzb3IgPSByZXF1ZXN0X21lc3NhZ2UucHJvY2Vzc29yCi0gICAgICAgIG9wID0gcmVxdWVzdF9tZXNzYWdlLm9wCi0gICAgICAgIGFyZ3MgPSByZXF1ZXN0X21lc3NhZ2UuYXJncwotICAgICAgICBpZiBub3QgcHJvY2Vzc29yOgotICAgICAgICAgICAgcHJvY2Vzc29yX29iaiA9IHNlbGYuZ2V0X3Byb2Nlc3Nvcignc3RhbmRhcmQnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJvY2Vzc29yX29iaiA9IHNlbGYuZ2V0X3Byb2Nlc3Nvcihwcm9jZXNzb3IpCi0gICAgICAgIGFyZ3MgPSBwcm9jZXNzb3Jfb2JqLmdldF9vcF9hcmdzKG9wLCBhcmdzKQotICAgICAgICBtZXNzYWdlID0gc2VsZi5idWlsZF9tZXNzYWdlKHJlcXVlc3RfaWQsIHByb2Nlc3Nvciwgb3AsIGFyZ3MpCisgICAgZGVmIHNlcmlhbGl6ZV9tZXNzYWdlKHNlbGYsIHJlcXVlc3RfbWVzc2FnZSk6CisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLmJ1aWxkX21lc3NhZ2UocmVxdWVzdF9tZXNzYWdlLmZpZWxkcywgcmVxdWVzdF9tZXNzYWdlLmdyZW1saW4pCiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAKLSAgICBkZWYgYnVpbGRfbWVzc2FnZShzZWxmLCByZXF1ZXN0X2lkLCBwcm9jZXNzb3IsIG9wLCBhcmdzKToKKyAgICBkZWYgYnVpbGRfbWVzc2FnZShzZWxmLCBmaWVsZHMsIGdyZW1saW4pOgogICAgICAgICBtZXNzYWdlID0gewotICAgICAgICAgICAgJ3JlcXVlc3RJZCc6IHJlcXVlc3RfaWQsCi0gICAgICAgICAgICAncHJvY2Vzc29yJzogcHJvY2Vzc29yLAotICAgICAgICAgICAgJ29wJzogb3AsCi0gICAgICAgICAgICAnYXJncyc6IGFyZ3MKKyAgICAgICAgICAgICdmaWVsZHMnOiBmaWVsZHMsCisgICAgICAgICAgICAnZ3JlbWxpbic6IGdyZW1saW4KICAgICAgICAgfQotICAgICAgICByZXR1cm4gc2VsZi5maW5hbGl6ZV9tZXNzYWdlKG1lc3NhZ2UsIDB4MjAsIHNlbGYudmVyc2lvbikKKyAgICAgICAgcmV0dXJuIHNlbGYuZmluYWxpemVfbWVzc2FnZShtZXNzYWdlKQogCi0gICAgZGVmIGZpbmFsaXplX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgbWltZV9sZW4sIG1pbWVfdHlwZSk6CisgICAgZGVmIGZpbmFsaXplX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgIGJhID0gYnl0ZWFycmF5KCkKIAotICAgICAgICByZXF1ZXN0X2lkID0gdXVpZC5VVUlEKHN0cihtZXNzYWdlWydyZXF1ZXN0SWQnXSkpCi0gICAgICAgIGJhLmV4dGVuZChzZWxmLmhlYWRlcl9wYWNrKG1pbWVfbGVuLCBtaW1lX3R5cGUsIDB4ODEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0X2lkLmludCA+PiA2NCkgJiBzZWxmLm1heF9pbnQ2NCwgcmVxdWVzdF9pZC5pbnQgJiBzZWxmLm1heF9pbnQ2NCkpCi0KLSAgICAgICAgb3BfYnl0ZXMgPSBtZXNzYWdlWydvcCddLmVuY29kZSgidXRmLTgiKQotICAgICAgICBiYS5leHRlbmQoc2VsZi5pbnRfcGFjayhsZW4ob3BfYnl0ZXMpKSkKLSAgICAgICAgYmEuZXh0ZW5kKG9wX2J5dGVzKQotCi0gICAgICAgIHByb2Nlc3Nvcl9ieXRlcyA9IG1lc3NhZ2VbJ3Byb2Nlc3NvciddLmVuY29kZSgidXRmLTgiKQotICAgICAgICBiYS5leHRlbmQoc2VsZi5pbnRfcGFjayhsZW4ocHJvY2Vzc29yX2J5dGVzKSkpCi0gICAgICAgIGJhLmV4dGVuZChwcm9jZXNzb3JfYnl0ZXMpCi0KLSAgICAgICAgYXJncyA9IG1lc3NhZ2VbImFyZ3MiXQotICAgICAgICBiYS5leHRlbmQoc2VsZi5pbnRfcGFjayhsZW4oYXJncykpKQotICAgICAgICBmb3IgaywgdiBpbiBhcmdzLml0ZW1zKCk6CisgICAgICAgIGJhLmV4dGVuZChncmFwaGJpbmFyeVY0LnVpbnQ4X3BhY2soMHg4NCkpCisgICAgICAgIGZpZWxkcyA9IG1lc3NhZ2VbImZpZWxkcyJdCisgICAgICAgIGJhLmV4dGVuZChzZWxmLmludF9wYWNrKGxlbihmaWVsZHMpKSkKKyAgICAgICAgZm9yIGssIHYgaW4gZmllbGRzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLl9ncmFwaGJpbmFyeV93cml0ZXIudG9fZGljdChrLCBiYSkKKyAgICAgICAgICAgIHNlbGYuX2dyYXBoYmluYXJ5X3dyaXRlci50b19kaWN0KHYsIGJhKQogCi0gICAgICAgICAgICAjIHByb2Nlc3Nvcl9vYmouZ2V0X29wX2FyZ3MgaW4gc2VyaWFsaXplX21lc3NhZ2UoKSBzZWVtcyB0byBhbHJlYWR5IGhhbmRsZSBieXRlY29kZS4gaW4gcHl0aG9uIDMKLSAgICAgICAgICAgICMgYmVjYXVzZSBieXRlYXJyYXkgaXNuJ3QgYm91bmQgdG8gYSB0eXBlIGluIGdyYXBoYmluYXJ5IGl0IGZhbGxzIHRocm91Z2ggdGhlIHdyaXRlT2JqZWN0KCkgYW5kCi0gICAgICAgICAgICAjIGp1c3Qgd29ya3MgYnV0IHB5dGhvbiAyIGJ5dGVhcnJheSBpcyBib3VuZCB0byBCeXRlQnVmZmVyVHlwZSBzbyBpdCB3cml0ZXMgRGF0YVR5cGUuYnl0ZWJ1ZmZlcgotICAgICAgICAgICAgIyByYXRoZXIgdGhhbiBEYXRhVHlwZS5ieXRlY29kZSBhbmQgdGhlIHNlcnZlciBnZXRzIGNvbmZ1c2VkLiBzcGVjaWFsIGNhc2luZyB0aGlzIGZvciBub3cgdW50aWwKLSAgICAgICAgICAgICMgaXQgY2FuIGJlIHJlZmFjdG9yZWQKLSAgICAgICAgICAgIGlmIGsgPT0gImdyZW1saW4iIGFuZCBpc2luc3RhbmNlKHYsIGJ5dGVhcnJheSk6Ci0gICAgICAgICAgICAgICAgYmEuZXh0ZW5kKHYpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2dyYXBoYmluYXJ5X3dyaXRlci50b19kaWN0KHYsIGJhKQorICAgICAgICBncmVtbGluID0gbWVzc2FnZVsnZ3JlbWxpbiddCisgICAgICAgICMgVE9ETzogaGFjayB0byByZW1vdmUgdHlwZSBjb2RlIGZyb20gZ3JlbWxpbiB2YWx1ZSBmb3IgVjQgbWVzc2FnZSBmb3JtYXQsIHdyaXRlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHdheSB0bworICAgICAgICAjICB3cml0ZSB2YWx1ZSBkaXJlY3RseSBieSBwYXNzaW5nIHNlcmlhbGl6ZXIgdHlwZXMsIGNoZWNrIGJhY2sgd2hlbiByZW1vdmluZyBieXRlY29kZQorICAgICAgICBncmVtbGluX2JhID0gYnl0ZWFycmF5KCkKKyAgICAgICAgc2VsZi5fZ3JhcGhiaW5hcnlfd3JpdGVyLnRvX2RpY3QoZ3JlbWxpbiwgZ3JlbWxpbl9iYSkKKyAgICAgICAgYmEuZXh0ZW5kKGdyZW1saW5fYmFbMjpdKQogCiAgICAgICAgIHJldHVybiBieXRlcyhiYSkKIAotICAgIGRlZiBkZXNlcmlhbGl6ZV9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgorICAgIGRlZiBkZXNlcmlhbGl6ZV9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIGlzX2ZpcnN0X2NodW5rPUZhbHNlKToKKyAgICAgICAgaWYgbGVuKG1lc3NhZ2UpID09IDA6CisgICAgICAgICAgICByZXR1cm4geydzdGF0dXMnOiB7J2NvZGUnOiAyMDR9LAorICAgICAgICAgICAgICAgICAgICAncmVzdWx0JzogeydtZXRhJzoge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBbXX19CisKICAgICAgICAgIyBmb3IgcGFyc2luZyBzdHJpbmcgbWVzc2FnZSB2aWEgSFRUUCBjb25uZWN0aW9ucwogICAgICAgICBiID0gaW8uQnl0ZXNJTyhiYXNlNjQuYjY0ZGVjb2RlKG1lc3NhZ2UpIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgc3RyKSBlbHNlIG1lc3NhZ2UpCiAKLSAgICAgICAgYi5yZWFkKDEpICAjIHZlcnNpb24KKyAgICAgICAgaWYgaXNfZmlyc3RfY2h1bms6CisgICAgICAgICAgICBiLnJlYWQoMSkgICMgdmVyc2lvbgorICAgICAgICAgICAgc2VsZi5fYnVsa2VkID0gYi5yZWFkKDEpWzBdID09IDB4MDEKIAotICAgICAgICByZXF1ZXN0X2lkID0gc3RyKHNlbGYuX2dyYXBoYmluYXJ5X3JlYWRlci50b19vYmplY3QoYiwgZ3JhcGhiaW5hcnlWMS5EYXRhVHlwZS51dWlkKSkKLSAgICAgICAgc3RhdHVzX2NvZGUgPSBzZWxmLmludDMyX3VucGFjayhiLnJlYWQoNCkpWzBdCi0gICAgICAgIHN0YXR1c19tc2cgPSBzZWxmLl9ncmFwaGJpbmFyeV9yZWFkZXIudG9fb2JqZWN0KGIsIGdyYXBoYmluYXJ5VjEuRGF0YVR5cGUuc3RyaW5nKQotICAgICAgICBzdGF0dXNfYXR0cnMgPSBzZWxmLl9ncmFwaGJpbmFyeV9yZWFkZXIudG9fb2JqZWN0KGIsIGdyYXBoYmluYXJ5VjEuRGF0YVR5cGUubWFwLCBudWxsYWJsZT1GYWxzZSkKLSAgICAgICAgbWV0YV9hdHRycyA9IHNlbGYuX2dyYXBoYmluYXJ5X3JlYWRlci50b19vYmplY3QoYiwgZ3JhcGhiaW5hcnlWMS5EYXRhVHlwZS5tYXAsIG51bGxhYmxlPUZhbHNlKQotICAgICAgICByZXN1bHQgPSBzZWxmLl9ncmFwaGJpbmFyeV9yZWFkZXIudG9fb2JqZWN0KGIpCisgICAgICAgIHJlc3VsdCwgcmVhZGFibGUgPSBzZWxmLnJlYWRfcGF5bG9hZChiKQorICAgICAgICBpZiBub3QgcmVhZGFibGU6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICdyZXN1bHQnOiB7J21ldGEnOiB7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogcmVzdWx0fQorICAgICAgICAgICAgfQorICAgICAgICBzdGF0dXNfY29kZSA9IHNlbGYuaW50MzJfdW5wYWNrKGIucmVhZCg0KSlbMF0gICMgc3RhdHVzIGNvZGUKKyAgICAgICAgc3RhdHVzX21zZyA9IHNlbGYuX2dyYXBoYmluYXJ5X3JlYWRlci50b19vYmplY3QoYiwgZ3JhcGhiaW5hcnlWNC5EYXRhVHlwZS5zdHJpbmcsIG51bGxhYmxlPVRydWUpCisgICAgICAgIHN0YXR1c19leCA9IHNlbGYuX2dyYXBoYmluYXJ5X3JlYWRlci50b19vYmplY3QoYiwgZ3JhcGhiaW5hcnlWNC5EYXRhVHlwZS5zdHJpbmcsIG51bGxhYmxlPVRydWUpCisgICAgICAgICMgbWV0YV9hdHRycyA9IHNlbGYuX2dyYXBoYmluYXJ5X3JlYWRlci50b19vYmplY3QoYiwgZ3JhcGhiaW5hcnlWNC5EYXRhVHlwZS5tYXAsIG51bGxhYmxlPUZhbHNlKQogCiAgICAgICAgIGIuY2xvc2UoKQogCi0gICAgICAgIG1zZyA9IHsncmVxdWVzdElkJzogcmVxdWVzdF9pZCwKLSAgICAgICAgICAgICAgICdzdGF0dXMnOiB7J2NvZGUnOiBzdGF0dXNfY29kZSwKKyAgICAgICAgbXNnID0geydzdGF0dXMnOiB7J2NvZGUnOiBzdGF0dXNfY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBzdGF0dXNfbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0cmlidXRlcyc6IHN0YXR1c19hdHRyc30sCi0gICAgICAgICAgICAgICAncmVzdWx0JzogeydtZXRhJzogbWV0YV9hdHRycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IHN0YXR1c19leH0sCisgICAgICAgICAgICAgICAncmVzdWx0JzogeydtZXRhJzoge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYXRhJzogcmVzdWx0fX0KIAogICAgICAgICByZXR1cm4gbXNnCisKKyAgICBkZWYgcmVhZF9wYXlsb2FkKHNlbGYsIGJ1ZmZlcik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICByZWFkYWJsZSA9IFRydWUKKyAgICAgICAgd2hpbGUgYnVmZmVyLnJlYWRhYmxlKCk6ICAjIGZpbmQgbWV0aG9kIG9yIHdheSB0byBhY2Nlc3MgcmVhZGFibGUgYnl0ZXMgd2l0aG91dCB1c2luZyBidWZmZXIuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgYnVmZmVyLnRlbGwoKSA9PSBsZW4oYnVmZmVyLmdldHZhbHVlKCkpOgorICAgICAgICAgICAgICAgIHJlYWRhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgc2VsZi5fYnVsa2VkOgorICAgICAgICAgICAgICAgIGl0ZW0gPSBzZWxmLl9ncmFwaGJpbmFyeV9yZWFkZXIudG9fb2JqZWN0KGJ1ZmZlcikKKyAgICAgICAgICAgICAgICBpZiBpdGVtID09IE1hcmtlci5lbmRfb2Zfc3RyZWFtKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1bGtlZCA9IEZhbHNlICAjIG5vIG1vcmUgZGF0YSBleHBlY3RlZCwgcmVzZXQgYnVsa2VkIGZsYWcKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBidWxrID0gc2VsZi5fZ3JhcGhiaW5hcnlfcmVhZGVyLnRvX29iamVjdChidWZmZXIpCisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoVHJhdmVyc2VyKGl0ZW0sIGJ1bGspKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZ3JhcGhiaW5hcnlfcmVhZGVyLnRvX29iamVjdChidWZmZXIpCisgICAgICAgICAgICAgICAgaWYgZGF0YSA9PSBNYXJrZXIuZW5kX29mX3N0cmVhbSgpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGRhdGEpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMsIHJlYWRhYmxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vZHJpdmVyL3VzZXJhZ2VudC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvdXNlcmFnZW50LnB5CmluZGV4IDE0YmYyMzcuLmY5MDY1ZDcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvdXNlcmFnZW50LnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9kcml2ZXIvdXNlcmFnZW50LnB5CkBAIC0xOCw3ICsxOCw3IEBACiAjCiBpbXBvcnQgcGxhdGZvcm0KIAotZ3JlbWxpbl92ZXJzaW9uID0gIjMuOC4yLVNOQVBTSE9UIiAgIyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgorZ3JlbWxpbl92ZXJzaW9uID0gIjQuMC4wLVNOQVBTSE9UIiAgIyBETyBOT1QgTU9ESUZZIC0gQ29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJ5IE1hdmVuIFJlcGxhY2VyIFBsdWdpbgogCiBkZWYgX2dlbmVyYXRlX3VzZXJfYWdlbnQoKToKICAgICBhcHBsaWNhdGlvbl9uYW1lID0gIk5vdEF2YWlsYWJsZSIKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9wcm9jZXNzL2dyYXBoX3RyYXZlcnNhbC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9wcm9jZXNzL2dyYXBoX3RyYXZlcnNhbC5weQppbmRleCA3YjUxOWI0Li4wODJkZjQ2IDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vcHJvY2Vzcy9ncmFwaF90cmF2ZXJzYWwucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3Byb2Nlc3MvZ3JhcGhfdHJhdmVyc2FsLnB5CkBAIC0yNCwxMCArMjQsMTEgQEAKIGZyb20gLnRyYXZlcnNhbCBpbXBvcnQgVHJhdmVyc2FsCiBmcm9tIC50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNhbFN0cmF0ZWdpZXMKIGZyb20gLnN0cmF0ZWdpZXMgaW1wb3J0IFZlcnRleFByb2dyYW1TdHJhdGVneSwgT3B0aW9uc1N0cmF0ZWd5Ci1mcm9tIC50cmF2ZXJzYWwgaW1wb3J0IEJ5dGVjb2RlCitmcm9tIC50cmF2ZXJzYWwgaW1wb3J0IEdyZW1saW5MYW5nCiBmcm9tIC4uZHJpdmVyLnJlbW90ZV9jb25uZWN0aW9uIGltcG9ydCBSZW1vdGVTdHJhdGVneQogZnJvbSAuLiBpbXBvcnQgc3RhdGljcwogZnJvbSAuLnN0YXRpY3MgaW1wb3J0IGxvbmcKK2Zyb20gLi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IFZlcnRleAogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcigiZ3JlbWxpbnB5dGhvbiIpCiAKQEAgLTM1LDEzICszNiwxMyBAQAogCiAKIGNsYXNzIEdyYXBoVHJhdmVyc2FsU291cmNlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoLCB0cmF2ZXJzYWxfc3RyYXRlZ2llcywgYnl0ZWNvZGU9Tm9uZSwgcmVtb3RlX2Nvbm5lY3Rpb249Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoLCB0cmF2ZXJzYWxfc3RyYXRlZ2llcywgZ3JlbWxpbl9sYW5nPU5vbmUsIHJlbW90ZV9jb25uZWN0aW9uPU5vbmUpOgogICAgICAgICBsb2cuaW5mbygiQ3JlYXRpbmcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuIikKICAgICAgICAgc2VsZi5ncmFwaCA9IGdyYXBoCiAgICAgICAgIHNlbGYudHJhdmVyc2FsX3N0cmF0ZWdpZXMgPSB0cmF2ZXJzYWxfc3RyYXRlZ2llcwotICAgICAgICBpZiBieXRlY29kZSBpcyBOb25lOgotICAgICAgICAgICAgYnl0ZWNvZGUgPSBCeXRlY29kZSgpCi0gICAgICAgIHNlbGYuYnl0ZWNvZGUgPSBieXRlY29kZQorICAgICAgICBpZiBncmVtbGluX2xhbmcgaXMgTm9uZToKKyAgICAgICAgICAgIGdyZW1saW5fbGFuZyA9IEdyZW1saW5MYW5nKCkKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcgPSBncmVtbGluX2xhbmcKICAgICAgICAgc2VsZi5ncmFwaF90cmF2ZXJzYWwgPSBHcmFwaFRyYXZlcnNhbAogICAgICAgICBpZiByZW1vdGVfY29ubmVjdGlvbjoKICAgICAgICAgICAgIHNlbGYudHJhdmVyc2FsX3N0cmF0ZWdpZXMuYWRkX3N0cmF0ZWdpZXMoW1JlbW90ZVN0cmF0ZWd5KHJlbW90ZV9jb25uZWN0aW9uKV0pCkBAIC01MSwxMCArNTIsMTAgQEAKICAgICAgICAgcmV0dXJuICJncmFwaHRyYXZlcnNhbHNvdXJjZVsiICsgc3RyKHNlbGYuZ3JhcGgpICsgIl0iCiAKICAgICBkZWYgZ2V0X2dyYXBoX3RyYXZlcnNhbF9zb3VyY2Uoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLmdyYXBoLCBUcmF2ZXJzYWxTdHJhdGVnaWVzKHNlbGYudHJhdmVyc2FsX3N0cmF0ZWdpZXMpLCBCeXRlY29kZShzZWxmLmJ5dGVjb2RlKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuZ3JhcGgsIFRyYXZlcnNhbFN0cmF0ZWdpZXMoc2VsZi50cmF2ZXJzYWxfc3RyYXRlZ2llcyksIEdyZW1saW5MYW5nKHNlbGYuZ3JlbWxpbl9sYW5nKSkKIAogICAgIGRlZiBnZXRfZ3JhcGhfdHJhdmVyc2FsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5ncmFwaF90cmF2ZXJzYWwoc2VsZi5ncmFwaCwgc2VsZi50cmF2ZXJzYWxfc3RyYXRlZ2llcywgQnl0ZWNvZGUoc2VsZi5ieXRlY29kZSkpCisgICAgICAgIHJldHVybiBzZWxmLmdyYXBoX3RyYXZlcnNhbChzZWxmLmdyYXBoLCBzZWxmLnRyYXZlcnNhbF9zdHJhdGVnaWVzLCBHcmVtbGluTGFuZyhzZWxmLmdyZW1saW5fbGFuZykpCiAKICAgICBkZWYgd2l0aEJ1bGsoc2VsZiwgKmFyZ3MpOgogICAgICAgICB3YXJuaW5ncy53YXJuKApAQCAtNjUsNyArNjYsNyBAQAogCiAgICAgZGVmIHdpdGhfYnVsayhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbF9zb3VyY2UoKQotICAgICAgICBzb3VyY2UuYnl0ZWNvZGUuYWRkX3NvdXJjZSgid2l0aEJ1bGsiLCAqYXJncykKKyAgICAgICAgc291cmNlLmdyZW1saW5fbGFuZy5hZGRfc291cmNlKCJ3aXRoQnVsayIsICphcmdzKQogICAgICAgICByZXR1cm4gc291cmNlCiAKICAgICBkZWYgd2l0aFBhdGgoc2VsZiwgKmFyZ3MpOgpAQCAtNzcsNyArNzgsNyBAQAogCiAgICAgZGVmIHdpdGhfcGF0aChzZWxmLCAqYXJncyk6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbF9zb3VyY2UoKQotICAgICAgICBzb3VyY2UuYnl0ZWNvZGUuYWRkX3NvdXJjZSgid2l0aFBhdGgiLCAqYXJncykKKyAgICAgICAgc291cmNlLmdyZW1saW5fbGFuZy5hZGRfc291cmNlKCJ3aXRoUGF0aCIsICphcmdzKQogICAgICAgICByZXR1cm4gc291cmNlCiAKICAgICBkZWYgd2l0aFNhY2soc2VsZiwgKmFyZ3MpOgpAQCAtODksNyArOTAsNyBAQAogCiAgICAgZGVmIHdpdGhfc2FjayhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbF9zb3VyY2UoKQotICAgICAgICBzb3VyY2UuYnl0ZWNvZGUuYWRkX3NvdXJjZSgid2l0aFNhY2siLCAqYXJncykKKyAgICAgICAgc291cmNlLmdyZW1saW5fbGFuZy5hZGRfc291cmNlKCJ3aXRoU2FjayIsICphcmdzKQogICAgICAgICByZXR1cm4gc291cmNlCiAKICAgICBkZWYgd2l0aFNpZGVFZmZlY3Qoc2VsZiwgKmFyZ3MpOgpAQCAtMTAxLDcgKzEwMiw3IEBACiAKICAgICBkZWYgd2l0aF9zaWRlX2VmZmVjdChzZWxmLCAqYXJncyk6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbF9zb3VyY2UoKQotICAgICAgICBzb3VyY2UuYnl0ZWNvZGUuYWRkX3NvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCAqYXJncykKKyAgICAgICAgc291cmNlLmdyZW1saW5fbGFuZy5hZGRfc291cmNlKCJ3aXRoU2lkZUVmZmVjdCIsICphcmdzKQogICAgICAgICByZXR1cm4gc291cmNlCiAKICAgICBkZWYgd2l0aFN0cmF0ZWdpZXMoc2VsZiwgKmFyZ3MpOgpAQCAtMTEzLDcgKzExNCw3IEBACiAKICAgICBkZWYgd2l0aF9zdHJhdGVnaWVzKHNlbGYsICphcmdzKToKICAgICAgICAgc291cmNlID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsX3NvdXJjZSgpCi0gICAgICAgIHNvdXJjZS5ieXRlY29kZS5hZGRfc291cmNlKCJ3aXRoU3RyYXRlZ2llcyIsICphcmdzKQorICAgICAgICBzb3VyY2UuZ3JlbWxpbl9sYW5nLmFkZF9zb3VyY2UoIndpdGhTdHJhdGVnaWVzIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzb3VyY2UKIAogICAgIGRlZiB3aXRob3V0U3RyYXRlZ2llcyhzZWxmLCAqYXJncyk6CkBAIC0xMjUsMTIgKzEyNiwxMiBAQAogCiAgICAgZGVmIHdpdGhvdXRfc3RyYXRlZ2llcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbF9zb3VyY2UoKQotICAgICAgICBzb3VyY2UuYnl0ZWNvZGUuYWRkX3NvdXJjZSgid2l0aG91dFN0cmF0ZWdpZXMiLCAqYXJncykKKyAgICAgICAgc291cmNlLmdyZW1saW5fbGFuZy5hZGRfc291cmNlKCJ3aXRob3V0U3RyYXRlZ2llcyIsICphcmdzKQogICAgICAgICByZXR1cm4gc291cmNlCiAKICAgICBkZWYgd2l0aF8oc2VsZiwgaywgdj1Ob25lKToKICAgICAgICAgc291cmNlID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsX3NvdXJjZSgpCi0gICAgICAgIG9wdGlvbnNfc3RyYXRlZ3kgPSBuZXh0KCh4IGZvciB4IGluIHNvdXJjZS5ieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zCisgICAgICAgIG9wdGlvbnNfc3RyYXRlZ3kgPSBuZXh0KCh4IGZvciB4IGluIHNvdXJjZS5ncmVtbGluX2xhbmcuZ3JlbWxpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeFswXSA9PSAid2l0aFN0cmF0ZWdpZXMiIGFuZCB0eXBlKHhbMV0pIGlzIE9wdGlvbnNTdHJhdGVneSksIE5vbmUpCiAKICAgICAgICAgdmFsID0gVHJ1ZSBpZiB2IGlzIE5vbmUgZWxzZSB2CkBAIC0xNDIsMjMgKzE0MywyNCBAQAogCiAgICAgICAgIHJldHVybiBzb3VyY2UKIAotICAgIGRlZiB0eChzZWxmKToKLSAgICAgICAgIyBJbiBvcmRlciB0byBrZWVwIHRoZSBjb25zdHJ1Y3RvciB1bmNoYW5nZWQgd2l0aGluIDMuNS54IHdlIGNhbiB0cnkgdG8gcG9wIHRoZSBSZW1vdGVDb25uZWN0aW9uIG91dCBvZiB0aGUKLSAgICAgICAgIyBUcmF2ZXJzYWxTdHJhdGVnaWVzLiBrZWVwaW5nIHRoaXMgdW5jaGFuZ2VkIHdpbGwgYWxsb3cgdXNlciBEU0xzIHRvIG5vdCB0YWtlIGEgYnJlYWsuCi0gICAgICAgICMgVGhpcyBpcyB0aGUgc2FtZSBzdHJhdGVneSBhcyBncmVtbGluLWphdmFzY3JpcHQuCi0gICAgICAgICMgVE9ETyBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUC0yNjY0OiByZWZhY3RvciB0aGlzIHRvIGJlIG5pY2VyIGluIDMuNi4wIHdoZW4KLSAgICAgICAgIyAgd2UgY2FuIHRha2UgYSBicmVha2luZyBjaGFuZ2UKLSAgICAgICAgcmVtb3RlX2Nvbm5lY3Rpb24gPSBuZXh0KCh4LnJlbW90ZV9jb25uZWN0aW9uIGZvciB4IGluIHNlbGYudHJhdmVyc2FsX3N0cmF0ZWdpZXMudHJhdmVyc2FsX3N0cmF0ZWdpZXMgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LmZxY24gPT0gInB5OlJlbW90ZVN0cmF0ZWd5IiksIE5vbmUpCi0KLSAgICAgICAgaWYgcmVtb3RlX2Nvbm5lY3Rpb24gaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IsIHJlbW90ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkIGZvciB0cmFuc2FjdGlvbi4iKQotCi0gICAgICAgICMgWW91IGNhbid0IGRvIGcudHgoKS5iZWdpbigpLnR4KCkgaS5lIGNoaWxkIHRyYW5zYWN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgaWYgcmVtb3RlX2Nvbm5lY3Rpb24gYW5kIHJlbW90ZV9jb25uZWN0aW9uLmlzX3Nlc3Npb25fYm91bmQoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhpcyBUcmF2ZXJzYWxTb3VyY2UgaXMgYWxyZWFkeSBib3VuZCB0byBhIHRyYW5zYWN0aW9uIC0gY2hpbGQgdHJhbnNhY3Rpb25zIGFyZSBub3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwb3J0ZWQiKQotICAgICAgICByZXR1cm4gVHJhbnNhY3Rpb24oc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb24pCisgICAgIyBUT0RPIHJlbW92ZSBvciB1cGRhdGUgb25jZSBIVFRQIHRyYW5zYWN0aW9uIGlzIGltcGxlbWVudGVkCisgICAgIyBkZWYgdHgoc2VsZik6CisgICAgIyAgICAgIyBJbiBvcmRlciB0byBrZWVwIHRoZSBjb25zdHJ1Y3RvciB1bmNoYW5nZWQgd2l0aGluIDMuNS54IHdlIGNhbiB0cnkgdG8gcG9wIHRoZSBSZW1vdGVDb25uZWN0aW9uIG91dCBvZiB0aGUKKyAgICAjICAgICAjIFRyYXZlcnNhbFN0cmF0ZWdpZXMuIGtlZXBpbmcgdGhpcyB1bmNoYW5nZWQgd2lsbCBhbGxvdyB1c2VyIERTTHMgdG8gbm90IHRha2UgYSBicmVhay4KKyAgICAjICAgICAjIFRoaXMgaXMgdGhlIHNhbWUgc3RyYXRlZ3kgYXMgZ3JlbWxpbi1qYXZhc2NyaXB0LgorICAgICMgICAgICMgVE9ETyBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1RJTktFUlBPUC0yNjY0OiByZWZhY3RvciB0aGlzIHRvIGJlIG5pY2VyIGluIDMuNi4wIHdoZW4KKyAgICAjICAgICAjICB3ZSBjYW4gdGFrZSBhIGJyZWFraW5nIGNoYW5nZQorICAgICMgICAgIHJlbW90ZV9jb25uZWN0aW9uID0gbmV4dCgoeC5yZW1vdGVfY29ubmVjdGlvbiBmb3IgeCBpbiBzZWxmLnRyYXZlcnNhbF9zdHJhdGVnaWVzLnRyYXZlcnNhbF9zdHJhdGVnaWVzIGlmCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LmZxY24gPT0gInB5OlJlbW90ZVN0cmF0ZWd5IiksIE5vbmUpCisgICAgIworICAgICMgICAgIGlmIHJlbW90ZV9jb25uZWN0aW9uIGlzIE5vbmU6CisgICAgIyAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IsIHJlbW90ZSBjb25uZWN0aW9uIGlzIHJlcXVpcmVkIGZvciB0cmFuc2FjdGlvbi4iKQorICAgICMKKyAgICAjICAgICAjIFlvdSBjYW4ndCBkbyBnLnR4KCkuYmVnaW4oKS50eCgpIGkuZSBjaGlsZCB0cmFuc2FjdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgIyAgICAgaWYgcmVtb3RlX2Nvbm5lY3Rpb24gYW5kIHJlbW90ZV9jb25uZWN0aW9uLmlzX3Nlc3Npb25fYm91bmQoKToKKyAgICAjICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGlzIFRyYXZlcnNhbFNvdXJjZSBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgdHJhbnNhY3Rpb24gLSBjaGlsZCB0cmFuc2FjdGlvbnMgYXJlIG5vdCAiCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIikKKyAgICAjICAgICByZXR1cm4gVHJhbnNhY3Rpb24oc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb24pCiAKICAgICBkZWYgd2l0aENvbXB1dGVyKHNlbGYsIGdyYXBoX2NvbXB1dGVyPU5vbmUsIHdvcmtlcnM9Tm9uZSwgcmVzdWx0PU5vbmUsIHBlcnNpc3Q9Tm9uZSwgdmVydGljZXM9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgIGVkZ2VzPU5vbmUsIGNvbmZpZ3VyYXRpb249Tm9uZSk6CkBAIC0xNzUsMTIgKzE3NywxMiBAQAogCiAgICAgZGVmIEUoc2VsZiwgKmFyZ3MpOgogICAgICAgICB0cmF2ZXJzYWwgPSBzZWxmLmdldF9ncmFwaF90cmF2ZXJzYWwoKQotICAgICAgICB0cmF2ZXJzYWwuYnl0ZWNvZGUuYWRkX3N0ZXAoIkUiLCAqYXJncykKKyAgICAgICAgdHJhdmVyc2FsLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiRSIsICphcmdzKQogICAgICAgICByZXR1cm4gdHJhdmVyc2FsCiAKICAgICBkZWYgVihzZWxmLCAqYXJncyk6CiAgICAgICAgIHRyYXZlcnNhbCA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbCgpCi0gICAgICAgIHRyYXZlcnNhbC5ieXRlY29kZS5hZGRfc3RlcCgiViIsICphcmdzKQorICAgICAgICB0cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJWIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwKIAogICAgIGRlZiBhZGRFKHNlbGYsICphcmdzKToKQEAgLTE5Miw3ICsxOTQsNyBAQAogCiAgICAgZGVmIGFkZF9lKHNlbGYsICphcmdzKToKICAgICAgICAgdHJhdmVyc2FsID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsKCkKLSAgICAgICAgdHJhdmVyc2FsLmJ5dGVjb2RlLmFkZF9zdGVwKCJhZGRFIiwgKmFyZ3MpCisgICAgICAgIHRyYXZlcnNhbC5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFkZEUiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbAogCiAgICAgZGVmIGFkZFYoc2VsZiwgKmFyZ3MpOgpAQCAtMjA0LDQzICsyMDYsNDMgQEAKIAogICAgIGRlZiBhZGRfdihzZWxmLCAqYXJncyk6CiAgICAgICAgIHRyYXZlcnNhbCA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbCgpCi0gICAgICAgIHRyYXZlcnNhbC5ieXRlY29kZS5hZGRfc3RlcCgiYWRkViIsICphcmdzKQorICAgICAgICB0cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJhZGRWIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwKIAogICAgIGRlZiBtZXJnZV92KHNlbGYsICphcmdzKToKICAgICAgICAgdHJhdmVyc2FsID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsKCkKLSAgICAgICAgdHJhdmVyc2FsLmJ5dGVjb2RlLmFkZF9zdGVwKCJtZXJnZVYiLCAqYXJncykKKyAgICAgICAgdHJhdmVyc2FsLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibWVyZ2VWIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwKIAogICAgIGRlZiBtZXJnZV9lKHNlbGYsICphcmdzKToKICAgICAgICAgdHJhdmVyc2FsID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsKCkKLSAgICAgICAgdHJhdmVyc2FsLmJ5dGVjb2RlLmFkZF9zdGVwKCJtZXJnZUUiLCAqYXJncykKKyAgICAgICAgdHJhdmVyc2FsLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibWVyZ2VFIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwKIAogICAgIGRlZiBpbmplY3Qoc2VsZiwgKmFyZ3MpOgogICAgICAgICB0cmF2ZXJzYWwgPSBzZWxmLmdldF9ncmFwaF90cmF2ZXJzYWwoKQotICAgICAgICB0cmF2ZXJzYWwuYnl0ZWNvZGUuYWRkX3N0ZXAoImluamVjdCIsICphcmdzKQorICAgICAgICB0cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJpbmplY3QiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbAogCiAgICAgZGVmIGlvKHNlbGYsICphcmdzKToKICAgICAgICAgdHJhdmVyc2FsID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsKCkKLSAgICAgICAgdHJhdmVyc2FsLmJ5dGVjb2RlLmFkZF9zdGVwKCJpbyIsICphcmdzKQorICAgICAgICB0cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJpbyIsICphcmdzKQogICAgICAgICByZXR1cm4gdHJhdmVyc2FsCiAKICAgICBkZWYgY2FsbChzZWxmLCAqYXJncyk6CiAgICAgICAgIHRyYXZlcnNhbCA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbCgpCi0gICAgICAgIHRyYXZlcnNhbC5ieXRlY29kZS5hZGRfc3RlcCgiY2FsbCIsICphcmdzKQorICAgICAgICB0cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJjYWxsIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiB0cmF2ZXJzYWwKIAogICAgIGRlZiB1bmlvbihzZWxmLCAqYXJncyk6CiAgICAgICAgIHRyYXZlcnNhbCA9IHNlbGYuZ2V0X2dyYXBoX3RyYXZlcnNhbCgpCi0gICAgICAgIHRyYXZlcnNhbC5ieXRlY29kZS5hZGRfc3RlcCgidW5pb24iLCAqYXJncykKKyAgICAgICAgdHJhdmVyc2FsLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgidW5pb24iLCAqYXJncykKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbAogCiAKIGNsYXNzIEdyYXBoVHJhdmVyc2FsKFRyYXZlcnNhbCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoLCB0cmF2ZXJzYWxfc3RyYXRlZ2llcywgYnl0ZWNvZGUpOgotICAgICAgICBzdXBlcihHcmFwaFRyYXZlcnNhbCwgc2VsZikuX19pbml0X18oZ3JhcGgsIHRyYXZlcnNhbF9zdHJhdGVnaWVzLCBieXRlY29kZSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JhcGgsIHRyYXZlcnNhbF9zdHJhdGVnaWVzLCBncmVtbGluX2xhbmcpOgorICAgICAgICBzdXBlcihHcmFwaFRyYXZlcnNhbCwgc2VsZikuX19pbml0X18oZ3JhcGgsIHRyYXZlcnNhbF9zdHJhdGVnaWVzLCBncmVtbGluX2xhbmcpCiAKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICBpZiBpc2luc3RhbmNlKGluZGV4LCBpbnQpOgpAQCAtMjYyLDE0ICsyNjQsMTQgQEAKICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVzKGtleSkKIAogICAgIGRlZiBjbG9uZShzZWxmKToKLSAgICAgICAgcmV0dXJuIEdyYXBoVHJhdmVyc2FsKHNlbGYuZ3JhcGgsIHNlbGYudHJhdmVyc2FsX3N0cmF0ZWdpZXMsIGNvcHkuZGVlcGNvcHkoc2VsZi5ieXRlY29kZSkpCisgICAgICAgIHJldHVybiBHcmFwaFRyYXZlcnNhbChzZWxmLmdyYXBoLCBzZWxmLnRyYXZlcnNhbF9zdHJhdGVnaWVzLCBjb3B5LmRlZXBjb3B5KHNlbGYuZ3JlbWxpbl9sYW5nKSkKIAogICAgIGRlZiBWKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiViIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiViIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIEUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJFIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJFIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgYWRkRShzZWxmLCAqYXJncyk6CkBAIC0yODAsNyArMjgyLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuYWRkX2UoKmFyZ3MpCiAKICAgICBkZWYgYWRkX2Uoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhZGRFIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJhZGRFIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgYWRkVihzZWxmLCAqYXJncyk6CkBAIC0yOTEsNTEgKzI5Myw1MSBAQAogICAgICAgICByZXR1cm4gc2VsZi5hZGRfdigqYXJncykKIAogICAgIGRlZiBhZGRfdihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImFkZFYiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFkZFYiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBhZ2dyZWdhdGUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhZ2dyZWdhdGUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFnZ3JlZ2F0ZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFsbF8oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhbGwiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFsbCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFuZF8oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhbmQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFuZCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFueV8oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhbnkiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFueSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFzXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImFzIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJhcyIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFzX2Jvb2woc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhc0Jvb2wiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFzQm9vbCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFzX2RhdGUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJhc0RhdGUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImFzRGF0ZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFzX251bWJlcihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImFzTnVtYmVyIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJhc051bWJlciIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGFzX3N0cmluZyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImFzU3RyaW5nIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJhc1N0cmluZyIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGJhcnJpZXIoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJiYXJyaWVyIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJiYXJyaWVyIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgYm90aChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImJvdGgiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImJvdGgiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBib3RoRShzZWxmLCAqYXJncyk6CkBAIC0zNDYsNyArMzQ4LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuYm90aF9lKCphcmdzKQogCiAgICAgZGVmIGJvdGhfZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImJvdGhFIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJib3RoRSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGJvdGhWKHNlbGYsICphcmdzKToKQEAgLTM1Nyw0NyArMzU5LDQ3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmJvdGhfdigqYXJncykKIAogICAgIGRlZiBib3RoX3Yoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJib3RoViIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiYm90aFYiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBicmFuY2goc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJicmFuY2giLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImJyYW5jaCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGJ5KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiYnkiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImJ5IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgY2FsbChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImNhbGwiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImNhbGwiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBjYXAoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJjYXAiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImNhcCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGNob29zZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImNob29zZSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiY2hvb3NlIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgY29hbGVzY2Uoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJjb2FsZXNjZSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiY29hbGVzY2UiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBjb2luKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiY29pbiIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiY29pbiIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGNvbWJpbmUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJjb21iaW5lIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJjb21iaW5lIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgY29uY2F0KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiY29uY2F0IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJjb25jYXQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBjb25qb2luKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiY29uam9pbiIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiY29uam9pbiIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGNvbm5lY3RlZENvbXBvbmVudChzZWxmLCAqYXJncyk6CkBAIC00MDgsMTUgKzQxMCwxNSBAQAogICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0ZWRfY29tcG9uZW50KCphcmdzKQogCiAgICAgZGVmIGNvbm5lY3RlZF9jb21wb25lbnQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJjb25uZWN0ZWRDb21wb25lbnQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImNvbm5lY3RlZENvbXBvbmVudCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGNvbnN0YW50KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiY29uc3RhbnQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImNvbnN0YW50IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgY291bnQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJjb3VudCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiY291bnQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBjeWNsaWNQYXRoKHNlbGYsICphcmdzKToKQEAgLTQyNywzOSArNDI5LDM5IEBACiAgICAgICAgIHJldHVybiBzZWxmLmN5Y2xpY19wYXRoKCphcmdzKQogCiAgICAgZGVmIGN5Y2xpY19wYXRoKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiY3ljbGljUGF0aCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiY3ljbGljUGF0aCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGRhdGVfYWRkKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZGF0ZUFkZCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZGF0ZUFkZCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGRhdGVfZGlmZihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImRhdGVEaWZmIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJkYXRlRGlmZiIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGRlZHVwKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZGVkdXAiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImRlZHVwIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgZGlmZmVyZW5jZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImRpZmZlcmVuY2UiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImRpZmZlcmVuY2UiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBkaXNjYXJkKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZGlzY2FyZCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZGlzY2FyZCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGRpc2p1bmN0KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZGlzanVuY3QiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImRpc2p1bmN0IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgZHJvcChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImRyb3AiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImRyb3AiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBlbGVtZW50KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZWxlbWVudCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZWxlbWVudCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGVsZW1lbnRNYXAoc2VsZiwgKmFyZ3MpOgpAQCAtNDcwLDE5ICs0NzIsMTkgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZWxlbWVudF9tYXAoKmFyZ3MpCiAKICAgICBkZWYgZWxlbWVudF9tYXAoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJlbGVtZW50TWFwIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJlbGVtZW50TWFwIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgZW1pdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImVtaXQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImVtaXQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBmYWlsKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZmFpbCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZmFpbCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGZpbHRlcl8oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJmaWx0ZXIiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImZpbHRlciIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGZsYXRNYXAoc2VsZiwgKmFyZ3MpOgpAQCAtNDkzLDIzICs0OTUsMjYgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuZmxhdF9tYXAoKmFyZ3MpCiAKICAgICBkZWYgZmxhdF9tYXAoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJmbGF0TWFwIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJmbGF0TWFwIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgZm9sZChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImZvbGQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImZvbGQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBmb3JtYXRfKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZm9ybWF0IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJmb3JtYXQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBmcm9tXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImZyb20iLCAqYXJncykKKyAgICAgICAgaWYgbGVuKGFyZ3MpID09IDEgYW5kIGlzaW5zdGFuY2UoYXJnc1swXSwgVmVydGV4KToKKyAgICAgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJmcm9tIiwgX18uVihhcmdzWzBdLmlkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJmcm9tIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgZ3JvdXAoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJncm91cCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZ3JvdXAiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBncm91cENvdW50KHNlbGYsICphcmdzKToKQEAgLTUyMCwxMSArNTI1LDExIEBACiAgICAgICAgIHJldHVybiBzZWxmLmdyb3VwX2NvdW50KCphcmdzKQogCiAgICAgZGVmIGdyb3VwX2NvdW50KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiZ3JvdXBDb3VudCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZ3JvdXBDb3VudCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGhhcyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImhhcyIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaGFzIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaGFzSWQoc2VsZiwgKmFyZ3MpOgpAQCAtNTM1LDcgKzU0MCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmhhc19pZCgqYXJncykKIAogICAgIGRlZiBoYXNfaWQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJoYXNJZCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaGFzSWQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBoYXNLZXkoc2VsZiwgKmFyZ3MpOgpAQCAtNTUxLDEzICs1NTYsOSBAQAogICAgICAgICAgICAgImdyZW1saW5fcHl0aG9uLnByb2Nlc3MuR3JhcGhUcmF2ZXJzYWxTb3VyY2UuaGFzX2tleS4iLAogICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgICAgICByZXR1cm4gc2VsZi5oYXNfa2V5KCphcmdzKQotICAgIAotICAgIGRlZiBoYXNfa2V5KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiaGFzS2V5IiwgKmFyZ3MpCi0gICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaGFzX2tleShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImhhc0tleSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaGFzS2V5IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaGFzTGFiZWwoc2VsZiwgKmFyZ3MpOgpAQCAtNTY4LDcgKzU2OSw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmhhc19sYWJlbCgqYXJncykKIAogICAgIGRlZiBoYXNfbGFiZWwoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJoYXNMYWJlbCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaGFzTGFiZWwiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBoYXNOb3Qoc2VsZiwgKmFyZ3MpOgpAQCAtNTc5LDcgKzU4MCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLmhhc19ub3QoKmFyZ3MpCiAKICAgICBkZWYgaGFzX25vdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImhhc05vdCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaGFzTm90IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaGFzVmFsdWUoc2VsZiwgKmFyZ3MpOgpAQCAtNTkwLDE1ICs1OTEsMTUgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuaGFzX3ZhbHVlKCphcmdzKQogCiAgICAgZGVmIGhhc192YWx1ZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImhhc1ZhbHVlIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJoYXNWYWx1ZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGlkXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImlkIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJpZCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGlkZW50aXR5KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiaWRlbnRpdHkiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImlkZW50aXR5IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaW5FKHNlbGYsICphcmdzKToKQEAgLTYwOSw3ICs2MTAsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5pbl9lKCphcmdzKQogCiAgICAgZGVmIGluX2Uoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJpbkUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImluRSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGluVihzZWxmLCAqYXJncyk6CkBAIC02MjAsMTE5ICs2MjEsMTE5IEBACiAgICAgICAgIHJldHVybiBzZWxmLmluX3YoKmFyZ3MpCiAKICAgICBkZWYgaW5fdihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImluViIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaW5WIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaW5fKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiaW4iLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImluIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaW5kZXgoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJpbmRleCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaW5kZXgiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBpbmplY3Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJpbmplY3QiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImluamVjdCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGludGVyc2VjdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImludGVyc2VjdCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiaW50ZXJzZWN0IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgaXNfKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiaXMiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImlzIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYga2V5KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgia2V5IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJrZXkiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBsYWJlbChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImxhYmVsIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJsYWJlbCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGxlbmd0aChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImxlbmd0aCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibGVuZ3RoIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbGltaXQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJsaW1pdCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibGltaXQiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBsb2NhbChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImxvY2FsIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJsb2NhbCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGxvb3BzKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgibG9vcHMiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoImxvb3BzIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbFRyaW0oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJsVHJpbSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibFRyaW0iLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBsX3RyaW0oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJsVHJpbSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibFRyaW0iLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBtYXAoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJtYXAiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm1hcCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG1hdGNoKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgibWF0Y2giLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm1hdGNoIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbWF0aChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIm1hdGgiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm1hdGgiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBtYXhfKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgibWF4IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJtYXgiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBtZWFuKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgibWVhbiIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibWVhbiIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG1lcmdlKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgibWVyZ2UiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm1lcmdlIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbWVyZ2VfZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIm1lcmdlRSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibWVyZ2VFIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbWVyZ2VfdihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIm1lcmdlViIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibWVyZ2VWIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbWluXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIm1pbiIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgibWluIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgbm9uZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIm5vbmUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm5vbmUiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBub3RfKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgibm90IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJub3QiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBvcHRpb24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJvcHRpb24iLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm9wdGlvbiIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG9wdGlvbmFsKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgib3B0aW9uYWwiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm9wdGlvbmFsIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgb3JfKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgib3IiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm9yIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgb3JkZXIoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJvcmRlciIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgib3JkZXIiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBvdGhlclYoc2VsZiwgKmFyZ3MpOgpAQCAtNzQzLDExICs3NDQsMTEgQEAKICAgICAgICAgcmV0dXJuIHNlbGYub3RoZXJfdigqYXJncykKIAogICAgIGRlZiBvdGhlcl92KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgib3RoZXJWIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJvdGhlclYiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBvdXQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJvdXQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIm91dCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG91dEUoc2VsZiwgKmFyZ3MpOgpAQCAtNzU4LDcgKzc1OSw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLm91dF9lKCphcmdzKQogCiAgICAgZGVmIG91dF9lKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgib3V0RSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgib3V0RSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG91dFYoc2VsZiwgKmFyZ3MpOgpAQCAtNzY5LDcgKzc3MCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLm91dF92KCphcmdzKQogCiAgICAgZGVmIG91dF92KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgib3V0ViIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgib3V0ViIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHBhZ2VSYW5rKHNlbGYsICphcmdzKToKQEAgLTc4MCwxMSArNzgxLDExIEBACiAgICAgICAgIHJldHVybiBzZWxmLnBhZ2VfcmFuaygqYXJncykKIAogICAgIGRlZiBwYWdlX3Jhbmsoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJwYWdlUmFuayIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicGFnZVJhbmsiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBwYXRoKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgicGF0aCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicGF0aCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHBlZXJQcmVzc3VyZShzZWxmLCAqYXJncyk6CkBAIC03OTUsMzEgKzc5NiwzMSBAQAogICAgICAgICByZXR1cm4gc2VsZi5wZWVyX3ByZXNzdXJlKCphcmdzKQogCiAgICAgZGVmIHBlZXJfcHJlc3N1cmUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJwZWVyUHJlc3N1cmUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInBlZXJQcmVzc3VyZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHByb2R1Y3Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJwcm9kdWN0IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJwcm9kdWN0IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgcHJvZmlsZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInByb2ZpbGUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInByb2ZpbGUiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBwcm9ncmFtKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgicHJvZ3JhbSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicHJvZ3JhbSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHByb2plY3Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJwcm9qZWN0IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJwcm9qZWN0IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgcHJvcGVydGllcyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInByb3BlcnRpZXMiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInByb3BlcnRpZXMiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBwcm9wZXJ0eShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInByb3BlcnR5IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJwcm9wZXJ0eSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHByb3BlcnR5TWFwKHNlbGYsICphcmdzKToKQEAgLTgzMCw0NyArODMxLDQ3IEBACiAgICAgICAgIHJldHVybiBzZWxmLnByb3BlcnR5X21hcCgqYXJncykKIAogICAgIGRlZiBwcm9wZXJ0eV9tYXAoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJwcm9wZXJ0eU1hcCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicHJvcGVydHlNYXAiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiByYW5nZV8oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJyYW5nZSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicmFuZ2UiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiByZWFkKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgicmVhZCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicmVhZCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHJlcGVhdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInJlcGVhdCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicmVwZWF0IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgcmVwbGFjZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInJlcGxhY2UiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInJlcGxhY2UiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiByZXZlcnNlKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgicmV2ZXJzZSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgicmV2ZXJzZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHJUcmltKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiclRyaW0iLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInJUcmltIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgcl90cmltKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgiclRyaW0iLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInJUcmltIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgc2FjayhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInNhY2siLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInNhY2siLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBzYW1wbGUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJzYW1wbGUiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInNhbXBsZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHNlbGVjdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInNlbGVjdCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgic2VsZWN0IiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgc2hvcnRlc3RQYXRoKHNlbGYsICphcmdzKToKQEAgLTg4MSw3ICs4ODIsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5zaG9ydGVzdF9wYXRoKCphcmdzKQogCiAgICAgZGVmIHNob3J0ZXN0X3BhdGgoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJzaG9ydGVzdFBhdGgiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInNob3J0ZXN0UGF0aCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHNpZGVFZmZlY3Qoc2VsZiwgKmFyZ3MpOgpAQCAtODkyLDcgKzg5Myw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLnNpZGVfZWZmZWN0KCphcmdzKQogCiAgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgic2lkZUVmZmVjdCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgic2lkZUVmZmVjdCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHNpbXBsZVBhdGgoc2VsZiwgKmFyZ3MpOgpAQCAtOTAzLDMxICs5MDQsMzEgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuc2ltcGxlX3BhdGgoKmFyZ3MpCiAKICAgICBkZWYgc2ltcGxlX3BhdGgoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJzaW1wbGVQYXRoIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJzaW1wbGVQYXRoIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgc2tpcChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInNraXAiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInNraXAiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBzcGxpdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInNwbGl0IiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJzcGxpdCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHN1YmdyYXBoKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgic3ViZ3JhcGgiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInN1YmdyYXBoIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgc3Vic3RyaW5nKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgic3Vic3RyaW5nIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJzdWJzdHJpbmciLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBzdW1fKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgic3VtIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJzdW0iLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiB0YWlsKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgidGFpbCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgidGFpbCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRpbWVMaW1pdChzZWxmLCAqYXJncyk6CkBAIC05MzgsMTUgKzkzOSwxOCBAQAogICAgICAgICByZXR1cm4gc2VsZi50aW1lX2xpbWl0KCphcmdzKQogCiAgICAgZGVmIHRpbWVfbGltaXQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ0aW1lTGltaXQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInRpbWVMaW1pdCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRpbWVzKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgidGltZXMiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInRpbWVzIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgdG8oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ0byIsICphcmdzKQorICAgICAgICBpZiBsZW4oYXJncykgPT0gMSBhbmQgaXNpbnN0YW5jZShhcmdzWzBdLCBWZXJ0ZXgpOgorICAgICAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInRvIiwgX18uVihhcmdzWzBdLmlkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJ0byIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRvRShzZWxmLCAqYXJncyk6CkBAIC05NTcsMTUgKzk2MSwxNSBAQAogICAgICAgICByZXR1cm4gc2VsZi50b19lKCphcmdzKQogCiAgICAgZGVmIHRvX2Uoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ0b0UiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInRvRSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRvX2xvd2VyKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgidG9Mb3dlciIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgidG9Mb3dlciIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRvX3VwcGVyKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgidG9VcHBlciIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgidG9VcHBlciIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRvVihzZWxmLCAqYXJncyk6CkBAIC05NzYsMzEgKzk4MCwzMSBAQAogICAgICAgICByZXR1cm4gc2VsZi50b192KCphcmdzKQogCiAgICAgZGVmIHRvX3Yoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ0b1YiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInRvViIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHRyZWUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ0cmVlIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJ0cmVlIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgdHJpbShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInRyaW0iLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInRyaW0iLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiB1bmZvbGQoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ1bmZvbGQiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInVuZm9sZCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHVuaW9uKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5ieXRlY29kZS5hZGRfc3RlcCgidW5pb24iLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoInVuaW9uIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgdW50aWwoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ1bnRpbCIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgidW50aWwiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiB2YWx1ZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInZhbHVlIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJ2YWx1ZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHZhbHVlTWFwKHNlbGYsICphcmdzKToKQEAgLTEwMTEsMjMgKzEwMTUsMjMgQEAKICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWVfbWFwKCphcmdzKQogCiAgICAgZGVmIHZhbHVlX21hcChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInZhbHVlTWFwIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJ2YWx1ZU1hcCIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIHZhbHVlcyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoInZhbHVlcyIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgidmFsdWVzIiwgKmFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgd2hlcmUoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLmJ5dGVjb2RlLmFkZF9zdGVwKCJ3aGVyZSIsICphcmdzKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgid2hlcmUiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiB3aXRoXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIndpdGgiLCAqYXJncykKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcuYWRkX3N0ZXAoIndpdGgiLCAqYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiB3cml0ZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoIndyaXRlIiwgKmFyZ3MpCisgICAgICAgIHNlbGYuZ3JlbWxpbl9sYW5nLmFkZF9zdGVwKCJ3cml0ZSIsICphcmdzKQogICAgICAgICByZXR1cm4gc2VsZgogCiAKQEAgLTEwNDUsNyArMTA0OSw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc3RhcnQoY2xzKToKLSAgICAgICAgcmV0dXJuIEdyYXBoVHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpCisgICAgICAgIHJldHVybiBHcmFwaFRyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9fKGNscywgKmFyZ3MpOgpAQCAtMTA1MywxMSArMTA1NywxMSBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIEUoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLkUoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLkUoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgVihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuVigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuVigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBhZGRFKGNscywgKmFyZ3MpOgpAQCAtMTA2OSw3ICsxMDczLDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBhZGRfZShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuYWRkX2UoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmFkZF9lKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGFkZFYoY2xzLCAqYXJncyk6CkBAIC0xMDgxLDUxICsxMDg1LDUxIEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYWRkX3YoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmFkZF92KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5hZGRfdigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBhZ2dyZWdhdGUoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmFnZ3JlZ2F0ZSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuYWdncmVnYXRlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGFsbF8oY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmFsbF8oKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmFsbF8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYW5kXyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuYW5kXygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuYW5kXygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBhbnlfKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5hbnlfKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5hbnlfKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGFzXyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuYXNfKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5hc18oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYXNfYm9vbChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuYXNfYm9vbCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuYXNfYm9vbCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBhc19kYXRlKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5hc19kYXRlKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5hc19kYXRlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGFzX251bWJlcihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuYXNfbnVtYmVyKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5hc19udW1iZXIoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYXNfc3RyaW5nKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5hc19zdHJpbmcoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmFzX3N0cmluZygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBiYXJyaWVyKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5iYXJyaWVyKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5iYXJyaWVyKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGJvdGgoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmJvdGgoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmJvdGgoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYm90aEUoY2xzLCAqYXJncyk6CkBAIC0xMTM3LDcgKzExNDEsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGJvdGhfZShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuYm90aF9lKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5ib3RoX2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYm90aFYoY2xzLCAqYXJncyk6CkBAIC0xMTQ5LDUxICsxMTUzLDUxIEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgYm90aF92KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5ib3RoX3YoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmJvdGhfdigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBicmFuY2goY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmJyYW5jaCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuYnJhbmNoKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGNhbGwoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmNhbGwoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmNhbGwoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgY2FwKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5jYXAoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmNhcCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBjaG9vc2UoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmNob29zZSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuY2hvb3NlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGNvYWxlc2NlKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5jb2FsZXNjZSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuY29hbGVzY2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgY29pbihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuY29pbigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuY29pbigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBjb21iaW5lKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5jb21iaW5lKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5jb21iaW5lKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGNvbmNhdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuY29uY2F0KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5jb25jYXQoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgY29uam9pbihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuY29uam9pbigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuY29uam9pbigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBjb25zdGFudChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuY29uc3RhbnQoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmNvbnN0YW50KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGNvdW50KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5jb3VudCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuY291bnQoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgY3ljbGljUGF0aChjbHMsICphcmdzKToKQEAgLTEyMDUsMzkgKzEyMDksMzkgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBjeWNsaWNfcGF0aChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuY3ljbGljX3BhdGgoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmN5Y2xpY19wYXRoKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRhdGVfYWRkKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5kYXRlX2FkZCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuZGF0ZV9hZGQoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZGF0ZV9kaWZmKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5kYXRlX2RpZmYoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmRhdGVfZGlmZigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBkZWR1cChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZGVkdXAoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmRlZHVwKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRpZmZlcmVuY2UoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmRpZmZlcmVuY2UoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmRpZmZlcmVuY2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZGlzY2FyZChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZGlzY2FyZCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuZGlzY2FyZCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBkaXNqdW5jdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZGlzanVuY3QoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmRpc2p1bmN0KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGRyb3AoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmRyb3AoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmRyb3AoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZWxlbWVudChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZWxlbWVudCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuZWxlbWVudCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBlbGVtZW50TWFwKGNscywgKmFyZ3MpOgpAQCAtMTI0OSwxOSArMTI1MywxOSBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGVsZW1lbnRfbWFwKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5lbGVtZW50X21hcCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuZWxlbWVudF9tYXAoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZW1pdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZW1pdCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuZW1pdCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmYWlsKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5mYWlsKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5mYWlsKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZpbHRlcl8oY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmZpbHRlcl8oKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmZpbHRlcl8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmxhdE1hcChjbHMsICphcmdzKToKQEAgLTEyNzMsMTkgKzEyNzcsMTkgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmbGF0X21hcChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZmxhdF9tYXAoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmZsYXRfbWFwKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZvbGQoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmZvbGQoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmZvbGQoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZm9ybWF0XyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZm9ybWF0XygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuZm9ybWF0XygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBncm91cChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuZ3JvdXAoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmdyb3VwKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGdyb3VwQ291bnQoY2xzLCAqYXJncyk6CkBAIC0xMjk3LDExICsxMzAxLDExIEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZ3JvdXBfY291bnQoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmdyb3VwX2NvdW50KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5ncm91cF9jb3VudCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBoYXMoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmhhcygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuaGFzKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGhhc0lkKGNscywgKmFyZ3MpOgpAQCAtMTMxMyw3ICsxMzE3LDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBoYXNfaWQoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmhhc19pZCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuaGFzX2lkKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGhhc0tleShjbHMsICphcmdzKToKQEAgLTEzMzMsNyArMTMzNyw3IEBACiAgICAgCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGhhc19rZXkgKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5oYXNfa2V5KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5oYXNfa2V5XygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBoYXNMYWJlbChjbHMsICphcmdzKToKQEAgLTEzNDUsNyArMTM0OSw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaGFzX2xhYmVsKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5oYXNfbGFiZWwoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmhhc19sYWJlbCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBoYXNOb3QoY2xzLCAqYXJncyk6CkBAIC0xMzU3LDcgKzEzNjEsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGhhc19ub3QoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmhhc19ub3QoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmhhc19ub3QoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaGFzVmFsdWUoY2xzLCAqYXJncyk6CkBAIC0xMzY5LDE1ICsxMzczLDE1IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaGFzX3ZhbHVlKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5oYXNfdmFsdWUoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmhhc192YWx1ZSgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBpZF8oY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmlkXygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuaWRfKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGlkZW50aXR5KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5pZGVudGl0eSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuaWRlbnRpdHkoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaW5FKGNscywgKmFyZ3MpOgpAQCAtMTM4OSw3ICsxMzkzLDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBpbl9lKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5pbl9lKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5pbl9lKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGluVihjbHMsICphcmdzKToKQEAgLTE0MDEsNTEgKzE0MDUsNTEgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBpbl92KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5pbl92KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5pbl92KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGluXyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuaW5fKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5pbl8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaW5kZXgoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmluZGV4KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5pbmRleCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBpbmplY3QoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmluamVjdCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuaW5qZWN0KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGludGVyc2VjdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuaW50ZXJzZWN0KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5pbnRlcnNlY3QoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgaXNfKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5pc18oKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmlzXygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBrZXkoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmtleSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkua2V5KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGxhYmVsKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5sYWJlbCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkubGFiZWwoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbGVuZ3RoKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5sZW5ndGgoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmxlbmd0aCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBsaW1pdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkubGltaXQoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLmxpbWl0KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGxvY2FsKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5sb2NhbCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkubG9jYWwoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbG9vcHMoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmxvb3BzKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5sb29wcygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBsdHJpbShjbHMsICphcmdzKToKQEAgLTE0NTcsNjMgKzE0NjEsNjMgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBsX3RyaW0oY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmxfdHJpbSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkubF90cmltKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG1hcChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkubWFwKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5tYXAoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbWF0Y2goY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLm1hdGNoKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5tYXRjaCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtYXRoKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5tYXRoKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5tYXRoKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG1heF8oY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLm1heF8oKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLm1heF8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbWVhbihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkubWVhbigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkubWVhbigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtZXJnZShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkubWVyZ2UoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLm1lcmdlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG1lcmdlX2UoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLm1lcmdlX2UoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLm1lcmdlX2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbWVyZ2VfdihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkubWVyZ2VfdigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkubWVyZ2VfdigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtaW5fKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5taW5fKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5taW5fKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG5vbmUoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLm5vbmUoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLm5vbmUoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgbm90XyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkubm90XygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkubm90XygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBvcHRpb25hbChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkub3B0aW9uYWwoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLm9wdGlvbmFsKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG9yXyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkub3JfKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5vcl8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgb3JkZXIoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLm9yZGVyKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5vcmRlcigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBvdGhlclYoY2xzLCAqYXJncyk6CkBAIC0xNTI1LDExICsxNTI5LDExIEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgb3RoZXJfdihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkub3RoZXJfdigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkub3RoZXJfdigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBvdXQoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLm91dCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkub3V0KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG91dEUoY2xzLCAqYXJncyk6CkBAIC0xNTQxLDcgKzE1NDUsNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIG91dF9lKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5vdXRfZSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkub3V0X2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgb3V0VihjbHMsICphcmdzKToKQEAgLTE1NTMsMjcgKzE1NTcsMjcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBvdXRfdihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkub3V0X3YoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLm91dF92KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHBhdGgoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnBhdGgoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnBhdGgoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcHJvZHVjdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkucHJvZHVjdCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkucHJvZHVjdCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwcm9qZWN0KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5wcm9qZWN0KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5wcm9qZWN0KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHByb3BlcnRpZXMoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnByb3BlcnRpZXMoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnByb3BlcnRpZXMoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcHJvcGVydHkoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnByb3BlcnR5KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5wcm9wZXJ0eSgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwcm9wZXJ0eU1hcChjbHMsICphcmdzKToKQEAgLTE1ODUsMjMgKzE1ODksMjMgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBwcm9wZXJ0eV9tYXAoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnByb3BlcnR5X21hcCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkucHJvcGVydHlfbWFwKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHJhbmdlXyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkucmFuZ2VfKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5yYW5nZV8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcmVwZWF0KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5yZXBlYXQoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnJlcGVhdCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiByZXBsYWNlKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5yZXBsYWNlKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5yZXBsYWNlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHJldmVyc2UoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnJldmVyc2UoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnJldmVyc2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgclRyaW0oY2xzLCAqYXJncyk6CkBAIC0xNjEzLDE5ICsxNjE3LDE5IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcl90cmltKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5yX3RyaW0oKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnJfdHJpbSgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzYWNrKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5zYWNrKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5zYWNrKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNhbXBsZShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuc2FtcGxlKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5zYW1wbGUoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2VsZWN0KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5zZWxlY3QoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnNlbGVjdCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzaWRlRWZmZWN0KGNscywgKmFyZ3MpOgpAQCAtMTYzNyw3ICsxNjQxLDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzaWRlX2VmZmVjdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkuc2lkZV9lZmZlY3QoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnNpZGVfZWZmZWN0KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNpbXBsZVBhdGgoY2xzLCAqYXJncyk6CkBAIC0xNjQ5LDMxICsxNjUzLDMxIEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc2ltcGxlX3BhdGgoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnNpbXBsZV9wYXRoKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5zaW1wbGVfcGF0aCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBza2lwKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5za2lwKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5za2lwKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNwbGl0KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5zcGxpdCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuc3BsaXQoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgc3ViZ3JhcGgoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnN1YmdyYXBoKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5zdWJncmFwaCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzdWJzdHJpbmcoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnN1YnN0cmluZygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuc3Vic3RyaW5nKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHN1bV8oY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnN1bV8oKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnN1bV8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGFpbChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudGFpbCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkudGFpbCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0aW1lTGltaXQoY2xzLCAqYXJncyk6CkBAIC0xNjg1LDE1ICsxNjg5LDE1IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGltZV9saW1pdChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudGltZV9saW1pdCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkudGltZV9saW1pdCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0aW1lcyhjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudGltZXMoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnRpbWVzKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRvKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS50bygqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkudG8oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdG9FKGNscywgKmFyZ3MpOgpAQCAtMTcwNSwxNSArMTcwOSwxNSBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRvX2UoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnRvX2UoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnRvX2UoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdG9fbG93ZXIoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnRvX2xvd2VyKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS50b19sb3dlcigqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0b191cHBlcihjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudG9fdXBwZXIoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnRvX3VwcGVyKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRvVihjbHMsICphcmdzKToKQEAgLTE3MjUsMzEgKzE3MjksMzEgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0b192KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS50b192KCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS50b192KCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHRyZWUoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnRyZWUoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnRyZWUoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdHJpbShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudHJpbSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkudHJpbSgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB1bmZvbGQoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnVuZm9sZCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkudW5mb2xkKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHVuaW9uKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS51bmlvbigqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkudW5pb24oKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdW50aWwoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnVudGlsKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS51bnRpbCgqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB2YWx1ZShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudmFsdWUoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnZhbHVlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHZhbHVlTWFwKGNscywgKmFyZ3MpOgpAQCAtMTc2MSw5MCArMTc2NSw5MCBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHZhbHVlX21hcChjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkudmFsdWVfbWFwKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS52YWx1ZV9tYXAoKmFyZ3MpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdmFsdWVzKGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS52YWx1ZXMoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLnZhbHVlcygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB3aGVyZShjbHMsICphcmdzKToKLSAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgQnl0ZWNvZGUoKSkud2hlcmUoKmFyZ3MpCisgICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEdyZW1saW5MYW5nKCkpLndoZXJlKCphcmdzKQogCiAKICMgQ2xhc3MgdG8gaGFuZGxlIHRyYW5zYWN0aW9ucy4KLWNsYXNzIFRyYW5zYWN0aW9uOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGcsIHJlbW90ZV9jb25uZWN0aW9uKToKLSAgICAgICAgc2VsZi5fZyA9IGcKLSAgICAgICAgc2VsZi5fc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uID0gTm9uZQotICAgICAgICBzZWxmLl9yZW1vdGVfY29ubmVjdGlvbiA9IHJlbW90ZV9jb25uZWN0aW9uCi0gICAgICAgIHNlbGYuX19pc19vcGVuID0gRmFsc2UKLSAgICAgICAgc2VsZi5fX211dGV4ID0gTG9jaygpCi0KLSAgICAjIEJlZ2lucyB0cmFuc2FjdGlvbi4KLSAgICBkZWYgYmVnaW4oc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5fX211dGV4OgotICAgICAgICAgICAgIyBWZXJpZnkgdHJhbnNhY3Rpb24gaXMgbm90IG9wZW4uCi0gICAgICAgICAgICBzZWxmLl9fdmVyaWZ5X3RyYW5zYWN0aW9uX3N0YXRlKEZhbHNlLCAiVHJhbnNhY3Rpb24gYWxyZWFkeSBzdGFydGVkIG9uIHRoaXMgb2JqZWN0IikKLQotICAgICAgICAgICAgIyBDcmVhdGUgbmV3IHNlc3Npb24gdXNpbmcgdGhlIHJlbW90ZSBjb25uZWN0aW9uLgotICAgICAgICAgICAgc2VsZi5fc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uID0gc2VsZi5fcmVtb3RlX2Nvbm5lY3Rpb24uY3JlYXRlX3Nlc3Npb24oKQotICAgICAgICAgICAgc2VsZi5fX2lzX29wZW4gPSBUcnVlCi0KLSAgICAgICAgICAgICMgU2V0IHRoZSBzZXNzaW9uIGFzIGEgcmVtb3RlIHN0cmF0ZWd5IHdpdGhpbiB0aGUgdHJhdmVyc2FsIHN0cmF0ZWd5LgotICAgICAgICAgICAgdHJhdmVyc2FsX3N0cmF0ZWd5ID0gVHJhdmVyc2FsU3RyYXRlZ2llcygpCi0gICAgICAgICAgICB0cmF2ZXJzYWxfc3RyYXRlZ3kuYWRkX3N0cmF0ZWdpZXMoW1JlbW90ZVN0cmF0ZWd5KHNlbGYuX3Nlc3Npb25fYmFzZWRfY29ubmVjdGlvbildKQotCi0gICAgICAgICAgICAjIFJldHVybiBuZXcgR3JhcGhUcmF2ZXJzYWxTb3VyY2UuCi0gICAgICAgICAgICByZXR1cm4gR3JhcGhUcmF2ZXJzYWxTb3VyY2Uoc2VsZi5fZy5ncmFwaCwgdHJhdmVyc2FsX3N0cmF0ZWd5LCBzZWxmLl9nLmJ5dGVjb2RlKQotCi0gICAgIyBSb2xscyB0cmFuc2FjdGlvbiBiYWNrLgotICAgIGRlZiByb2xsYmFjayhzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLl9fbXV0ZXg6Ci0gICAgICAgICAgICAjIFZlcmlmeSB0cmFuc2FjdGlvbiBpcyBvcGVuLCBjbG9zZSBzZXNzaW9uIGFuZCByZXR1cm4gcmVzdWx0IG9mIHRyYW5zYWN0aW9uJ3Mgcm9sbGJhY2suCi0gICAgICAgICAgICBzZWxmLl9fdmVyaWZ5X3RyYW5zYWN0aW9uX3N0YXRlKFRydWUsICJDYW5ub3Qgcm9sbGJhY2sgYSB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBzdGFydGVkLiIpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fX2Nsb3NlX3Nlc3Npb24oc2VsZi5fc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uLnJvbGxiYWNrKCkpCi0KLSAgICAjIENvbW1pdHMgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCi0gICAgZGVmIGNvbW1pdChzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLl9fbXV0ZXg6Ci0gICAgICAgICAgICAjIFZlcmlmeSB0cmFuc2FjdGlvbiBpcyBvcGVuLCBjbG9zZSBzZXNzaW9uIGFuZCByZXR1cm4gcmVzdWx0IG9mIHRyYW5zYWN0aW9uJ3MgY29tbWl0LgotICAgICAgICAgICAgc2VsZi5fX3ZlcmlmeV90cmFuc2FjdGlvbl9zdGF0ZShUcnVlLCAiQ2Fubm90IGNvbW1pdCBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQuIikKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xvc2Vfc2Vzc2lvbihzZWxmLl9zZXNzaW9uX2Jhc2VkX2Nvbm5lY3Rpb24uY29tbWl0KCkpCi0KLSAgICAjIENsb3NlcyBzZXNzaW9uLgotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLl9fbXV0ZXg6Ci0gICAgICAgICAgICAjIFZlcmlmeSB0cmFuc2FjdGlvbiBpcyBvcGVuLgotICAgICAgICAgICAgc2VsZi5fX3ZlcmlmeV90cmFuc2FjdGlvbl9zdGF0ZShUcnVlLCAiQ2Fubm90IGNsb3NlIGEgdHJhbnNhY3Rpb24gdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIGNsb3NlZC4iKQotICAgICAgICAgICAgc2VsZi5fX2Nsb3NlX3Nlc3Npb24oTm9uZSkKLQotICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRyYW5zYWN0aW9uIGlzIG9wZW4uCi0gICAgIyBBbGxvdyBjYW1lbGNhc2UgZnVuY3Rpb24gaGVyZSB0byBrZWVwIGFwaSBjb25zaXN0ZW50IHdpdGggb3RoZXIgbGFuZ3VhZ2VzLgotICAgIGRlZiBpc09wZW4oc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLndhcm4oCi0gICAgICAgICAgICAiZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5UcmFuc2FjdGlvbi5pc09wZW4gd2lsbCBiZSByZXBsYWNlZCBieSAiCi0gICAgICAgICAgICAiZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5UcmFuc2FjdGlvbi5pc19vcGVuLiIsCi0gICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgIHJldHVybiBzZWxmLmlzX29wZW4oKQotCi0gICAgZGVmIGlzX29wZW4oc2VsZik6Ci0gICAgICAgICMgaWYgdGhlIHVuZGVybHlpbmcgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbiBpcyBjbG9zZWQgdGhlbiB0aGUgVHJhbnNhY3Rpb24gY2FuJ3QgYmUgb3BlbgotICAgICAgICBpZiAoc2VsZi5fc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uIGFuZCBzZWxmLl9zZXNzaW9uX2Jhc2VkX2Nvbm5lY3Rpb24uaXNfY2xvc2VkKCkpIG9yIFwKLSAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdGVfY29ubmVjdGlvbi5pc19jbG9zZWQoKToKLSAgICAgICAgICAgIHNlbGYuX19pc19vcGVuID0gRmFsc2UKLQotICAgICAgICByZXR1cm4gc2VsZi5fX2lzX29wZW4KLQotICAgIGRlZiBfX3ZlcmlmeV90cmFuc2FjdGlvbl9zdGF0ZShzZWxmLCBzdGF0ZSwgZXJyb3JfbWVzc2FnZSk6Ci0gICAgICAgIGlmIHNlbGYuX19pc19vcGVuICE9IHN0YXRlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGVycm9yX21lc3NhZ2UpCi0KLSAgICBkZWYgX19jbG9zZV9zZXNzaW9uKHNlbGYsIHNlc3Npb24pOgotICAgICAgICBzZWxmLl9faXNfb3BlbiA9IEZhbHNlCi0gICAgICAgIHNlbGYuX3JlbW90ZV9jb25uZWN0aW9uLnJlbW92ZV9zZXNzaW9uKHNlbGYuX3Nlc3Npb25fYmFzZWRfY29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuIHNlc3Npb24KKyMgY2xhc3MgVHJhbnNhY3Rpb246CisjCisjICAgICBkZWYgX19pbml0X18oc2VsZiwgZywgcmVtb3RlX2Nvbm5lY3Rpb24pOgorIyAgICAgICAgIHNlbGYuX2cgPSBnCisjICAgICAgICAgc2VsZi5fc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uID0gTm9uZQorIyAgICAgICAgIHNlbGYuX3JlbW90ZV9jb25uZWN0aW9uID0gcmVtb3RlX2Nvbm5lY3Rpb24KKyMgICAgICAgICBzZWxmLl9faXNfb3BlbiA9IEZhbHNlCisjICAgICAgICAgc2VsZi5fX211dGV4ID0gTG9jaygpCisjCisjICAgICAjIEJlZ2lucyB0cmFuc2FjdGlvbi4KKyMgICAgIGRlZiBiZWdpbihzZWxmKToKKyMgICAgICAgICB3aXRoIHNlbGYuX19tdXRleDoKKyMgICAgICAgICAgICAgIyBWZXJpZnkgdHJhbnNhY3Rpb24gaXMgbm90IG9wZW4uCisjICAgICAgICAgICAgIHNlbGYuX192ZXJpZnlfdHJhbnNhY3Rpb25fc3RhdGUoRmFsc2UsICJUcmFuc2FjdGlvbiBhbHJlYWR5IHN0YXJ0ZWQgb24gdGhpcyBvYmplY3QiKQorIworIyAgICAgICAgICAgICAjIENyZWF0ZSBuZXcgc2Vzc2lvbiB1c2luZyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24uCisjICAgICAgICAgICAgIHNlbGYuX3Nlc3Npb25fYmFzZWRfY29ubmVjdGlvbiA9IHNlbGYuX3JlbW90ZV9jb25uZWN0aW9uLmNyZWF0ZV9zZXNzaW9uKCkKKyMgICAgICAgICAgICAgc2VsZi5fX2lzX29wZW4gPSBUcnVlCisjCisjICAgICAgICAgICAgICMgU2V0IHRoZSBzZXNzaW9uIGFzIGEgcmVtb3RlIHN0cmF0ZWd5IHdpdGhpbiB0aGUgdHJhdmVyc2FsIHN0cmF0ZWd5LgorIyAgICAgICAgICAgICB0cmF2ZXJzYWxfc3RyYXRlZ3kucHkgPSBUcmF2ZXJzYWxTdHJhdGVnaWVzKCkKKyMgICAgICAgICAgICAgdHJhdmVyc2FsX3N0cmF0ZWd5LnB5LmFkZF9zdHJhdGVnaWVzKFtSZW1vdGVTdHJhdGVneShzZWxmLl9zZXNzaW9uX2Jhc2VkX2Nvbm5lY3Rpb24pXSkKKyMKKyMgICAgICAgICAgICAgIyBSZXR1cm4gbmV3IEdyYXBoVHJhdmVyc2FsU291cmNlLgorIyAgICAgICAgICAgICByZXR1cm4gR3JhcGhUcmF2ZXJzYWxTb3VyY2Uoc2VsZi5fZy5ncmFwaCwgdHJhdmVyc2FsX3N0cmF0ZWd5LnB5LCBzZWxmLl9nLmJ5dGVjb2RlKQorIworIyAgICAgIyBSb2xscyB0cmFuc2FjdGlvbiBiYWNrLgorIyAgICAgZGVmIHJvbGxiYWNrKHNlbGYpOgorIyAgICAgICAgIHdpdGggc2VsZi5fX211dGV4OgorIyAgICAgICAgICAgICAjIFZlcmlmeSB0cmFuc2FjdGlvbiBpcyBvcGVuLCBjbG9zZSBzZXNzaW9uIGFuZCByZXR1cm4gcmVzdWx0IG9mIHRyYW5zYWN0aW9uJ3Mgcm9sbGJhY2suCisjICAgICAgICAgICAgIHNlbGYuX192ZXJpZnlfdHJhbnNhY3Rpb25fc3RhdGUoVHJ1ZSwgIkNhbm5vdCByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQuIikKKyMgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbG9zZV9zZXNzaW9uKHNlbGYuX3Nlc3Npb25fYmFzZWRfY29ubmVjdGlvbi5yb2xsYmFjaygpKQorIworIyAgICAgIyBDb21taXRzIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgorIyAgICAgZGVmIGNvbW1pdChzZWxmKToKKyMgICAgICAgICB3aXRoIHNlbGYuX19tdXRleDoKKyMgICAgICAgICAgICAgIyBWZXJpZnkgdHJhbnNhY3Rpb24gaXMgb3BlbiwgY2xvc2Ugc2Vzc2lvbiBhbmQgcmV0dXJuIHJlc3VsdCBvZiB0cmFuc2FjdGlvbidzIGNvbW1pdC4KKyMgICAgICAgICAgICAgc2VsZi5fX3ZlcmlmeV90cmFuc2FjdGlvbl9zdGF0ZShUcnVlLCAiQ2Fubm90IGNvbW1pdCBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQuIikKKyMgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbG9zZV9zZXNzaW9uKHNlbGYuX3Nlc3Npb25fYmFzZWRfY29ubmVjdGlvbi5jb21taXQoKSkKKyMKKyMgICAgICMgQ2xvc2VzIHNlc3Npb24uCisjICAgICBkZWYgY2xvc2Uoc2VsZik6CisjICAgICAgICAgd2l0aCBzZWxmLl9fbXV0ZXg6CisjICAgICAgICAgICAgICMgVmVyaWZ5IHRyYW5zYWN0aW9uIGlzIG9wZW4uCisjICAgICAgICAgICAgIHNlbGYuX192ZXJpZnlfdHJhbnNhY3Rpb25fc3RhdGUoVHJ1ZSwgIkNhbm5vdCBjbG9zZSBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzIHByZXZpb3VzbHkgYmVlbiBjbG9zZWQuIikKKyMgICAgICAgICAgICAgc2VsZi5fX2Nsb3NlX3Nlc3Npb24oTm9uZSkKKyMKKyMgICAgICMgUmV0dXJuIHdoZXRoZXIgb3Igbm90IHRyYW5zYWN0aW9uIGlzIG9wZW4uCisjICAgICAjIEFsbG93IGNhbWVsY2FzZSBmdW5jdGlvbiBoZXJlIHRvIGtlZXAgYXBpIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBsYW5ndWFnZXMuCisjICAgICBkZWYgaXNPcGVuKHNlbGYpOgorIyAgICAgICAgIHdhcm5pbmdzLndhcm4oCisjICAgICAgICAgICAgICJncmVtbGluX3B5dGhvbi5wcm9jZXNzLlRyYW5zYWN0aW9uLmlzT3BlbiB3aWxsIGJlIHJlcGxhY2VkIGJ5ICIKKyMgICAgICAgICAgICAgImdyZW1saW5fcHl0aG9uLnByb2Nlc3MuVHJhbnNhY3Rpb24uaXNfb3Blbi4iLAorIyAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisjICAgICAgICAgcmV0dXJuIHNlbGYuaXNfb3BlbigpCisjCisjICAgICBkZWYgaXNfb3BlbihzZWxmKToKKyMgICAgICAgICAjIGlmIHRoZSB1bmRlcmx5aW5nIERyaXZlclJlbW90ZUNvbm5lY3Rpb24gaXMgY2xvc2VkIHRoZW4gdGhlIFRyYW5zYWN0aW9uIGNhbid0IGJlIG9wZW4KKyMgICAgICAgICBpZiAoc2VsZi5fc2Vzc2lvbl9iYXNlZF9jb25uZWN0aW9uIGFuZCBzZWxmLl9zZXNzaW9uX2Jhc2VkX2Nvbm5lY3Rpb24uaXNfY2xvc2VkKCkpIG9yIFwKKyMgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW90ZV9jb25uZWN0aW9uLmlzX2Nsb3NlZCgpOgorIyAgICAgICAgICAgICBzZWxmLl9faXNfb3BlbiA9IEZhbHNlCisjCisjICAgICAgICAgcmV0dXJuIHNlbGYuX19pc19vcGVuCisjCisjICAgICBkZWYgX192ZXJpZnlfdHJhbnNhY3Rpb25fc3RhdGUoc2VsZiwgc3RhdGUsIGVycm9yX21lc3NhZ2UpOgorIyAgICAgICAgIGlmIHNlbGYuX19pc19vcGVuICE9IHN0YXRlOgorIyAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZXJyb3JfbWVzc2FnZSkKKyMKKyMgICAgIGRlZiBfX2Nsb3NlX3Nlc3Npb24oc2VsZiwgc2Vzc2lvbik6CisjICAgICAgICAgc2VsZi5fX2lzX29wZW4gPSBGYWxzZQorIyAgICAgICAgIHNlbGYuX3JlbW90ZV9jb25uZWN0aW9uLnJlbW92ZV9zZXNzaW9uKHNlbGYuX3Nlc3Npb25fYmFzZWRfY29ubmVjdGlvbikKKyMgICAgICAgICByZXR1cm4gc2Vzc2lvbgogCiAKIGRlZiBFKCphcmdzKToKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9wcm9jZXNzL3RyYW5zbGF0b3IucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vcHJvY2Vzcy90cmFuc2xhdG9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzOTA3YmY5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9wcm9jZXNzL3RyYW5zbGF0b3IucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotIwotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0iIiIKLUNsYXNzIHRoYXQgY2FuIHR1cm4gdHJhdmVyc2FscyBiYWNrIGludG8gR3JlbWxpbiBHcm9vdnkgZm9ybWF0IHRleHQgcXVlcmllcy4KLVRob3NlIHF1ZXJpZXMgY2FuIHRoZW4gYmUgcnVuIGluIHRoZSBHcmVtbGluIGNvbnNvbGUgb3IgdXNpbmcgdGhlIEdMViBzdWJtaXQoPFN0cmluZz4pIEFQSSBvcgotc2VudCB0byBhbnkgVGlua2VyUG9wIGNvbXBsaWFudCBIVFRQIGVuZHBvaW50LgotIiIiCi1fX2F1dGhvcl9fID0gJ0tlbHZpbiBSLiBMYXdyZW5jZSAoZ2Z4bWFuKScKLQotaW1wb3J0IG1hdGgKLWltcG9ydCBudW1iZXJzCi1pbXBvcnQgcmUKLQotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgKgotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0ICoKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBWZXJ0ZXgsIEVkZ2UsIFZlcnRleFByb3BlcnR5Ci1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQotCi0KLWNsYXNzIFRyYW5zbGF0b3I6Ci0gICAgIiIiCi0gICAgVHVybiBhIGJ5dGVjb2RlIG9iamVjdCBiYWNrIGludG8gYSB0ZXh0dWFsIHF1ZXJ5IChHcmVtbGluIEdyb292eSBzY3JpcHQpLgotICAgICIiIgotCi0gICAgIyBEaWN0aW9uYXJ5IHVzZWQgdG8gcmV2ZXJzZS1tYXAgdG9rZW4gSURzIHRvIHN0cmluZ3MKLSAgICBvcHRpb25zID0gewotICAgICAgICBXaXRoT3B0aW9ucy50b2tlbnM6ICd0b2tlbnMnLAotICAgICAgICBXaXRoT3B0aW9ucy5ub25lOiAnbm9uZScsCi0gICAgICAgIFdpdGhPcHRpb25zLmlkczogJ2lkcycsCi0gICAgICAgIFdpdGhPcHRpb25zLmxhYmVsczogJ2xhYmVscycsCi0gICAgICAgIFdpdGhPcHRpb25zLmtleXM6ICdrZXlzJywKLSAgICAgICAgV2l0aE9wdGlvbnMudmFsdWVzOiAndmFsdWVzJywKLSAgICAgICAgV2l0aE9wdGlvbnMuYWxsOiAnYWxsJywKLSAgICAgICAgV2l0aE9wdGlvbnMuaW5kZXhlcjogJ2luZGV4ZXInLAotICAgICAgICBXaXRoT3B0aW9ucy5saXN0OiAnbGlzdCcsCi0gICAgICAgIFdpdGhPcHRpb25zLm1hcDogJ21hcCcKLSAgICB9Ci0KLSAgICBjb25uX3AgPSBbJ2FuZCcsICdvciddCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhdmVyc2FsX3NvdXJjZT1Ob25lKToKLSAgICAgICAgc2VsZi50cmF2ZXJzYWxfc291cmNlID0gdHJhdmVyc2FsX3NvdXJjZQotCi0gICAgZGVmIGdldF90cmF2ZXJzYWxfc291cmNlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50cmF2ZXJzYWxfc291cmNlCi0KLSAgICBkZWYgZ2V0X3RhcmdldF9sYW5ndWFnZShzZWxmKToKLSAgICAgICAgcmV0dXJuICJncmVtbGluLWdyb292eSIKLQotICAgIGRlZiBvZihzZWxmLCB0cmF2ZXJzYWxfc291cmNlKToKLSAgICAgICAgc2VsZi50cmF2ZXJzYWxfc291cmNlID0gdHJhdmVyc2FsX3NvdXJjZQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgIyBEbyBhbnkgbmVlZGVkIHNwZWNpYWwgcHJvY2Vzc2luZyBmb3IgdGhlIHJlcHJlc2VudGF0aW9uCi0gICAgIyBvZiBzdHJpbmdzIGFuZCBkYXRlcyBhbmQgYm9vbGVhbi4KLSAgICBkZWYgZml4dXAoc2VsZiwgdik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uodiwgc3RyKToKLSAgICAgICAgICAgIHJldHVybiBmJ3t2IXJ9JyAgIyB1c2UgcmVwcigpIGZvcm1hdCBmb3IgY2Fub25pY2FsIHN0cmluZyByZXAKLSAgICAgICAgZWxpZiB0eXBlKHYpID09IGRhdGV0aW1lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19kYXRlKHYpCi0gICAgICAgIGVsaWYgdHlwZSh2KSA9PSBib29sOgotICAgICAgICAgICAgcmV0dXJuICd0cnVlJyBpZiB2IGVsc2UgJ2ZhbHNlJwotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodiwgbnVtYmVycy5OdW1iZXIpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc19udW1iZXIodikKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHYsIHNldCk6Ci0gICAgICAgICAgICByZXR1cm4gZidbe3N0cih2KVsxOi0xXX1dJwotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodiwgUCk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX3ByZWRpY2F0ZSh2KQotICAgICAgICBlbGlmIHR5cGUodikgPT0gVmVydGV4OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc192ZXJ0ZXgodikKLSAgICAgICAgZWxpZiB0eXBlKHYpID09IEVkZ2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2VkZ2UodikKLSAgICAgICAgZWxpZiB0eXBlKHYpIGluIFtNZXJnZV06ICAjIG9uX2NyZWF0ZSBvbl9tYXRjaCBvdXRfdiBpbl92Ci0gICAgICAgICAgICB0bXAgPSBzdHIodikKLSAgICAgICAgICAgIHJldHVybiBmJ3t0bXAuc3BsaXQoIl8iKVswXX17dG1wLnNwbGl0KCJfIilbMV0uY2FwaXRhbGl6ZSgpfScgaWYgdG1wLmZpbmQoJ18nKSBlbHNlIHRtcAotICAgICAgICBlbGlmIHYgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAnbnVsbCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzdHIodikKLQotICAgICMgVHVybiBhIFB5dGhvbiBkYXRldGltZSBpbnRvIHRoZSBlcXVpdmFsZW50IG5ldyBEYXRlKC4uLikKLSAgICBkZWYgcHJvY2Vzc19kYXRlKHNlbGYsIGRhdGUpOgotICAgICAgICB5ID0gZGF0ZS55ZWFyIC0gMTkwMAotICAgICAgICBtbyA9IGRhdGUubW9udGgKLSAgICAgICAgZCA9IGRhdGUuZGF5Ci0gICAgICAgIGggPSBkYXRlLmhvdXIKLSAgICAgICAgbWkgPSBkYXRlLm1pbnV0ZQotICAgICAgICBzID0gZGF0ZS5zZWNvbmQKLSAgICAgICAgcmV0dXJuIGYnbmV3IERhdGUoe3l9LHttb30se2R9LHtofSx7bWl9LHtzfSknCi0KLSAgICAjIERvIHNwZWNpYWwgcHJvY2Vzc2luZyBuZWVkZWQgdG8gZm9ybWF0IHByZWRpY2F0ZXMgdGhhdCBjb21lIGluCi0gICAgIyBzdWNoIGFzICJndChhKSIgY29ycmVjdGx5LgotICAgIGRlZiBwcm9jZXNzX3ByZWRpY2F0ZShzZWxmLCBwKToKLSAgICAgICAgcmVzID0gJycKLSAgICAgICAgaWYgcC5vcGVyYXRvciBpbiBzZWxmLmNvbm5fcDoKLSAgICAgICAgICAgIHJlcyArPSBmJ3tzZWxmLnByb2Nlc3NfcHJlZGljYXRlKHAudmFsdWUpfS57cC5vcGVyYXRvcn0oe3NlbGYucHJvY2Vzc19wcmVkaWNhdGUocC5vdGhlcil9KScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlcyArPSBmJ3tzZWxmLnByb2Nlc3NfcF92YWx1ZShwKX0nCi0gICAgICAgIHJldHVybiByZXMKLQotICAgICMgcHJvY2VzcyB0aGUgdmFsdWUgb2YgdGhlIHByZWRpY2F0ZXMKLSAgICBkZWYgcHJvY2Vzc19wX3ZhbHVlKHNlbGYsIHApOgotICAgICAgICByZXMgPSBzdHIocCkuc3BsaXQoJygnKVswXSArICcoJwotICAgICAgICBpZiB0eXBlKHAudmFsdWUpID09IGxpc3Q6Ci0gICAgICAgICAgICByZXMgKz0gJ1snCi0gICAgICAgICAgICBmb3IgdiBpbiBwLnZhbHVlOgotICAgICAgICAgICAgICAgIHJlcyArPSBzZWxmLmZpeHVwKHYpICsgJywnCi0gICAgICAgICAgICByZXMgPSAocmVzWzA6LTFdICsgJ10nKSBpZiBsZW4ocC52YWx1ZSkgPiAwIGVsc2UgKHJlcyArICddJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlcyArPSBzZWxmLmZpeHVwKHAudmFsdWUpCi0gICAgICAgICAgICBpZiBwLm90aGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHJlcyArPSBmJyx7c2VsZi5maXh1cChwLm90aGVyKX0nCi0gICAgICAgIHJlcyArPSAnKScKLSAgICAgICAgcmV0dXJuIHJlcwotCi0gICAgIyBTcGVjaWFsIHByb2Nlc3NpbmcgdG8gaGFuZGxlIHN0cmF0ZWdpZXMKLSAgICBkZWYgcHJvY2Vzc19zdHJhdGVneShzZWxmLCBzKToKLSAgICAgICAgYyA9IDAKLSAgICAgICAgcmVzID0gJycKLSAgICAgICAgIyBpZiBwYXJhbWV0ZXIgaXMgZW1wdHksIG9ubHkgcGFzcyBjbGFzcyBuYW1lIChyZWZlcmVuY2VkIEdyb292eVRyYW5zbGF0b3IuamF2YSkKLSAgICAgICAgaWYgbm90IHMuY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIHJlcyArPSBzLnN0cmF0ZWd5X25hbWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlcyA9IGYnbmV3IHtzdHIocyl9KCcKLSAgICAgICAgICAgIGZvciBrZXkgaW4gcy5jb25maWd1cmF0aW9uOgotICAgICAgICAgICAgICAgIHJlcyArPSAnLCcgaWYgYyA+IDAgZWxzZSAnJwotICAgICAgICAgICAgICAgIHJlcyArPSBrZXkgKyAnOicKLSAgICAgICAgICAgICAgICB2YWwgPSBzLmNvbmZpZ3VyYXRpb25ba2V5XQotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBUcmF2ZXJzYWwpOgotICAgICAgICAgICAgICAgICAgICByZXMgKz0gc2VsZi50cmFuc2xhdGUodmFsLmJ5dGVjb2RlLCBjaGlsZD1UcnVlKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJlcyArPSBzZWxmLmZpeHVwKHZhbCkKLSAgICAgICAgICAgICAgICBjICs9IDEKLSAgICAgICAgICAgIHJlcyArPSAnKScKLSAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICBwYXNzCi0KLSAgICAjIFNwZWNpYWwgcHJvY2Vzc2luZyB0byBoYW5kbGUgdmVydGljZXMKLSAgICBkZWYgcHJvY2Vzc192ZXJ0ZXgoc2VsZiwgdmVydGV4KToKLSAgICAgICAgcmV0dXJuIGYnbmV3IFJlZmVyZW5jZVZlcnRleCh7c2VsZi5maXh1cCh2ZXJ0ZXguaWQpfSxcJ3t2ZXJ0ZXgubGFiZWx9XCcpJwotCi0gICAgIyBTcGVjaWFsIHByb2Nlc3NpbmcgdG8gaGFuZGxlIGVkZ2VzCi0gICAgZGVmIHByb2Nlc3NfZWRnZShzZWxmLCBlZGdlKToKLSAgICAgICAgcmV0dXJuIGYnbmV3IFJlZmVyZW5jZUVkZ2Uoe3N0cihlZGdlLmlkKX0sXCd7ZWRnZS5sYWJlbH1cJywnIFwKLSAgICAgICAgICAgICAgIGYnbmV3IFJlZmVyZW5jZVZlcnRleCh7c3RyKGVkZ2UuaW5WLmlkKX0sXCd7ZWRnZS5pblYubGFiZWx9XCcpLCcgXAotICAgICAgICAgICAgICAgZiduZXcgUmVmZXJlbmNlVmVydGV4KHtzdHIoZWRnZS5vdXRWLmlkKX0sXCd7ZWRnZS5vdXRWLmxhYmVsfVwnKSknCi0KLSAgICAjIFNwZWNpYWwgcHJvY2Vzc2luZyB0byBoYW5kbGUgdmVydGV4IHByb3BlcnR5Ci0gICAgZGVmIHByb2Nlc3NfdmVydGV4X3Byb3BlcnR5KHNlbGYsIHZwKToKLSAgICAgICAgcmV0dXJuIGYnbmV3IFJlZmVyZW5jZVZlcnRleFByb3BlcnR5KHtzdHIodnAuaWQpfSxcJ3t2cC5sYWJlbH1cJyx7c2VsZi5maXh1cCh2cC52YWx1ZSl9KScKLQotICAgICMgU3BlY2lhbCBwcm9jZXNzaW5nIHRvIGhhbmRsZSBsYW1iZGEKLSAgICBkZWYgcHJvY2Vzc19sYW1iZGEoc2VsZiwgbGFtKToKLSAgICAgICAgbGFtYmRhX3Jlc3VsdCA9IGxhbSgpCi0gICAgICAgIHNjcmlwdCA9IGxhbWJkYV9yZXN1bHQgaWYgaXNpbnN0YW5jZShsYW1iZGFfcmVzdWx0LCBzdHIpIGVsc2UgbGFtYmRhX3Jlc3VsdFswXQotICAgICAgICByZXR1cm4gZid7c2NyaXB0fScgaWYgcmUubWF0Y2gociJeXHsuKlx9JCIsIHNjcmlwdCwgZmxhZ3M9cmUuRE9UQUxMKSBlbHNlIGYne3t7c2NyaXB0fX19JwotCi0gICAgZGVmIHByb2Nlc3NfZGljdChzZWxmLCBkKToKLSAgICAgICAgYyA9IDAKLSAgICAgICAgcmVzID0gJ1snCi0gICAgICAgIGlmIGxlbihkKSA9PSAwOgotICAgICAgICAgICAgcmVzICs9ICc6JwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdyYXAgPSBub3QgaXNpbnN0YW5jZShrLCBzdHIpCi0gICAgICAgICAgICAgICAgcmVzICs9ICcsJyBpZiBjID4gMCBlbHNlICcnCi0gICAgICAgICAgICAgICAgcmVzICs9ICcoJyBpZiB3cmFwIGVsc2UgJycKLSAgICAgICAgICAgICAgICByZXMgKz0gc2VsZi5maXh1cChrKQotICAgICAgICAgICAgICAgIHJlcyArPSAnKScgaWYgd3JhcCBlbHNlICcnCi0gICAgICAgICAgICAgICAgcmVzICs9IGYnOntzZWxmLmZpeHVwKHYpfScKLSAgICAgICAgICAgICAgICBjICs9IDEKLSAgICAgICAgcmVzICs9ICddJwotICAgICAgICByZXR1cm4gcmVzCi0KLSAgICBkZWYgcHJvY2Vzc19udW1iZXIoc2VsZiwgbik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobiwgZmxvYXQpOgotICAgICAgICAgICAgIyBjb252ZXJ0aW5nIGZsb2F0cyBpbnRvIGRvdWJsZXMgZm9yIHNjcmlwdCBzaW5jZSBweXRob24gZG9lc24ndCBkaXN0aW5ndWlzaCBhbmQgamF2YSBkZWZhdWx0cyB0byBkb3VibGUKLSAgICAgICAgICAgIGlmIG1hdGguaXNuYW4obik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJEb3VibGUuTmFOIgotICAgICAgICAgICAgZWxpZiBtYXRoLmlzaW5mKG4pIGFuZCBuID4gMDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkRvdWJsZS5QT1NJVElWRV9JTkZJTklUWSIKLSAgICAgICAgICAgIGVsaWYgbWF0aC5pc2luZihuKSBhbmQgbiA8IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBmJ3tufWQnCi0gICAgICAgIHJldHVybiBmJ3tufScKLQotICAgIGRlZiBwcm9jZXNzX2xpc3Qoc2VsZiwgbCk6Ci0gICAgICAgIGMgPSAwCi0gICAgICAgIHJlcyA9ICdbJwotICAgICAgICBmb3IgaSBpbiBsOgotICAgICAgICAgICAgcmVzICs9ICcsJyBpZiBjID4gMCBlbHNlICcnCi0gICAgICAgICAgICByZXMgKz0gc2VsZi5maXh1cChpKQotICAgICAgICAgICAgYyArPSAxCi0gICAgICAgIHJlcyArPSAnXScKLSAgICAgICAgcmV0dXJuIHJlcwotCi0gICAgIyBTcGVjaWFsIHByb2Nlc3NpbmcgdG8gaGFuZGxlIGJpbmRpbmdzIGluc2lkZSBvZiB0cmF2ZXJzYWxzCi0gICAgZGVmIHByb2Nlc3NfYmluZGluZyhzZWxmLCBiaW5kaW5nKToKLSAgICAgICAgcmV0dXJuIGYnQmluZGluZ3MuaW5zdGFuY2UoKS5vZihcJ3tiaW5kaW5nLmtleX1cJywge3N0cihiaW5kaW5nLnZhbHVlKX0pJwotCi0gICAgIyBNYWluIGRyaXZlciBvZiB0aGUgdHJhbnNsYXRpb24uIERpZmZlcmVudCBwYXJ0cyBvZgotICAgICMgYSBUcmF2ZXJzYWwgYXJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseS4KLSAgICBkZWYgZG9fdHJhbnNsYXRpb24oc2VsZiwgc3RlcCk6Ci0gICAgICAgIHNjcmlwdCA9ICcnCi0gICAgICAgIHBhcmFtcyA9IHN0ZXBbMTpdCi0gICAgICAgIHNjcmlwdCArPSAnLicgKyBzdGVwWzBdICsgJygnCi0gICAgICAgIGlmIGxlbihwYXJhbXMpID4gMDoKLSAgICAgICAgICAgIGMgPSAwCi0gICAgICAgICAgICB3aXRoX29wdHMgPSBGYWxzZQotICAgICAgICAgICAgaXNfbWVyZ2Vfb3AgPSAoc3RlcFswXSA9PSAnbWVyZ2VWJykgb3IgKHN0ZXBbMF0gPT0gJ21lcmdlRScpCi0gICAgICAgICAgICBmb3IgcCBpbiBwYXJhbXM6Ci0gICAgICAgICAgICAgICAgc2NyaXB0ICs9ICcsJyBpZiBjID4gMCBlbHNlICcnCi0gICAgICAgICAgICAgICAgaWYgd2l0aF9vcHRzOgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKz0gZidXaXRoT3B0aW9ucy57c2VsZi5vcHRpb25zW3BdfScKLSAgICAgICAgICAgICAgICBlbGlmIHR5cGUocCkgPT0gQnl0ZWNvZGU6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnRyYW5zbGF0ZShwLCBUcnVlKQotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwLCBQKToKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0ICs9IHNlbGYucHJvY2Vzc19wcmVkaWNhdGUocCkKLSAgICAgICAgICAgICAgICBlbGlmIHR5cGUocCkgPT0gVmVydGV4OgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKz0gc2VsZi5wcm9jZXNzX3ZlcnRleChwKQotICAgICAgICAgICAgICAgIGVsaWYgdHlwZShwKSA9PSBFZGdlOgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKz0gc2VsZi5wcm9jZXNzX2VkZ2UocCkKLSAgICAgICAgICAgICAgICBlbGlmIHR5cGUocCkgPT0gVmVydGV4UHJvcGVydHk6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnByb2Nlc3NfdmVydGV4X3Byb3BlcnR5KHApCi0gICAgICAgICAgICAgICAgZWxpZiB0eXBlKHApIGluIFtDYXJkaW5hbGl0eSwgUG9wLCBPcGVyYXRvciwgU2NvcGUsIFRdOgotICAgICAgICAgICAgICAgICAgICB0bXAgPSBzdHIocCkKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0ICs9IHRtcFswOi0xXSBpZiB0bXAuZW5kc3dpdGgoJ18nKSBlbHNlIHRtcAotICAgICAgICAgICAgICAgIGVsaWYgdHlwZShwKSBpbiBbTWVyZ2VdOiAgIyBvbl9jcmVhdGUgb25fbWF0Y2ggb3V0X3YgaW5fdgotICAgICAgICAgICAgICAgICAgICBpc19tZXJnZV9vcCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gc3RyKHApCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBmJ3t0bXAuc3BsaXQoIl8iKVswXX17dG1wLnNwbGl0KCJfIilbMV0uY2FwaXRhbGl6ZSgpfScgaWYgdG1wLmZpbmQoJ18nKSBlbHNlIHRtcAotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwLCBUcmF2ZXJzYWxTdHJhdGVneSk6ICAjIHRoaXMgd2lsbCBjYXB0dXJlIGFsbCBzdHJhdGVnaWVzCi0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnByb2Nlc3Nfc3RyYXRlZ3kocCkKLSAgICAgICAgICAgICAgICBlbGlmIHR5cGUocCkgPT0gZGF0ZXRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnByb2Nlc3NfZGF0ZShwKQotICAgICAgICAgICAgICAgIGVsaWYgcCA9PSBXaXRoT3B0aW9ucy50b2tlbnM6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSAnV2l0aE9wdGlvbnMudG9rZW5zJwotICAgICAgICAgICAgICAgICAgICB3aXRoX29wdHMgPSBUcnVlCi0gICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHAsIHN0cik6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBmJ3twIXJ9JyAgIyB1c2UgcmVwcigpIGZvcm1hdCBmb3IgY2Fub25pY2FsIHN0cmluZyByZXAKLSAgICAgICAgICAgICAgICBlbGlmIHR5cGUocCkgPT0gYm9vbDoKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0ICs9ICd0cnVlJyBpZiBwIGVsc2UgJ2ZhbHNlJwotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwLCB0eXBlKGxhbWJkYTogTm9uZSkpIGFuZCBwLl9fbmFtZV9fID09IChsYW1iZGE6IE5vbmUpLl9fbmFtZV9fOgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKz0gc2VsZi5wcm9jZXNzX2xhbWJkYShwKQotICAgICAgICAgICAgICAgIGVsaWYgdHlwZShwKSA9PSBCaW5kaW5nOgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgKz0gc2VsZi5wcm9jZXNzX2JpbmRpbmcocCkKLSAgICAgICAgICAgICAgICBlbGlmIHAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0ICs9ICcoVHJhdmVyc2FsKSBudWxsJyBpZiBpc19tZXJnZV9vcCBlbHNlICdudWxsJwotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwLCB0eXBlKToKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0ICs9IHAuX19uYW1lX18KLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UocCwgZGljdCk6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnByb2Nlc3NfZGljdChwKQotICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwLCBudW1iZXJzLk51bWJlcik6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnByb2Nlc3NfbnVtYmVyKHApCi0gICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHAsIHNldCk6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBmJ1t7c3RyKHApWzE6LTFdfV0gYXMgU2V0JyBpZiBsZW4ocCkgPiAwIGVsc2UgJ1tdIGFzIFNldCcKLSAgICAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UocCwgbGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLnByb2Nlc3NfbGlzdChwKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCArPSBzdHIocCkKLSAgICAgICAgICAgICAgICBjICs9IDEKLSAgICAgICAgc2NyaXB0ICs9ICcpJwotICAgICAgICByZXR1cm4gc2NyaXB0Ci0KLSAgICAjIFRyYW5zbGF0aW9uIHN0YXJ0cyBoZXJlLiBUaGVyZSBhcmUgdHdvIG1haW4gcGFydHMgdG8gYSAKLSAgICAjIHRyYXZlcnNhbC4gU291cmNlIGluc3RydWN0aW9ucyBzdWNoIGFzICJ3aXRoU2lkZUVmZmVjdCIKLSAgICAjIGFuZCAid2l0aFN0cmF0ZWdpZXMiLCBhbmQgc3RlcCBpbnN0cnVjdGlvbnMgc3VjaCBhcyAKLSAgICAjICJhZGRWIiBhbmQgInJlcGVhdCIuIElmIGNoaWxkIGlzIFRydWUgd2Ugd2lsbCBnZW5lcmF0ZQotICAgICMgYW5vbnltb3VzIHRyYXZlcnNhbCBzdHlsZSBzeW50YXguCi0gICAgZGVmIHRyYW5zbGF0ZShzZWxmLCBieXRlY29kZSwgY2hpbGQ9RmFsc2UpOgotICAgICAgICBzY3JpcHQgPSAnX18nIGlmIGNoaWxkIGVsc2Ugc2VsZi50cmF2ZXJzYWxfc291cmNlCi0KLSAgICAgICAgZm9yIHN0ZXAgaW4gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uczoKLSAgICAgICAgICAgIHNjcmlwdCArPSBzZWxmLmRvX3RyYW5zbGF0aW9uKHN0ZXApCi0KLSAgICAgICAgZm9yIHN0ZXAgaW4gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnM6Ci0gICAgICAgICAgICBzY3JpcHQgKz0gc2VsZi5kb190cmFuc2xhdGlvbihzdGVwKQotCi0gICAgICAgIHJldHVybiBzY3JpcHQKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9wcm9jZXNzL3RyYXZlcnNhbC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9wcm9jZXNzL3RyYXZlcnNhbC5weQppbmRleCA5YzZmODZjLi5lZGM2ZGVlIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vcHJvY2Vzcy90cmF2ZXJzYWwucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3Byb2Nlc3MvdHJhdmVyc2FsLnB5CkBAIC0xOCwyNSArMTgsMzMgQEAKICMKIAogaW1wb3J0IGNvcHkKK2ltcG9ydCBtYXRoCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdXVpZAogaW1wb3J0IHdhcm5pbmdzCisKIGZyb20gYWVudW0gaW1wb3J0IEVudW0KK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBWZXJ0ZXgsIEVkZ2UsIFBhdGgsIFByb3BlcnR5CisKIGZyb20gLi4gaW1wb3J0IHN0YXRpY3MKLWZyb20gLi5zdGF0aWNzIGltcG9ydCBsb25nCitmcm9tIC4uc3RhdGljcyBpbXBvcnQgbG9uZywgU2luZ2xlQnl0ZSwgc2hvcnQsIGJpZ2ludCwgQmlnRGVjaW1hbAorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKwogCiBjbGFzcyBUcmF2ZXJzYWwob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JhcGgsIHRyYXZlcnNhbF9zdHJhdGVnaWVzLCBieXRlY29kZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdyYXBoLCB0cmF2ZXJzYWxfc3RyYXRlZ2llcywgZ3JlbWxpbl9sYW5nKToKICAgICAgICAgc2VsZi5ncmFwaCA9IGdyYXBoCiAgICAgICAgIHNlbGYudHJhdmVyc2FsX3N0cmF0ZWdpZXMgPSB0cmF2ZXJzYWxfc3RyYXRlZ2llcwotICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZWNvZGUKKyAgICAgICAgc2VsZi5ncmVtbGluX2xhbmcgPSBncmVtbGluX2xhbmcKICAgICAgICAgc2VsZi50cmF2ZXJzZXJzID0gTm9uZQogICAgICAgICBzZWxmLmxhc3RfdHJhdmVyc2VyID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuYnl0ZWNvZGUpCisgICAgICAgIHJldHVybiBzZWxmLmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUgPT0gb3RoZXIuYnl0ZWNvZGUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpID09IG90aGVyLmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIApAQCAtNDgsMTEgKzU2LDE2IEBACiAgICAgICAgICAgICBzZWxmLnRyYXZlcnNhbF9zdHJhdGVnaWVzLmFwcGx5X3N0cmF0ZWdpZXMoc2VsZikKICAgICAgICAgaWYgc2VsZi5sYXN0X3RyYXZlcnNlciBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5sYXN0X3RyYXZlcnNlciA9IG5leHQoc2VsZi50cmF2ZXJzZXJzKQotICAgICAgICBvYmplY3QgPSBzZWxmLmxhc3RfdHJhdmVyc2VyLm9iamVjdAotICAgICAgICBzZWxmLmxhc3RfdHJhdmVyc2VyLmJ1bGsgPSBzZWxmLmxhc3RfdHJhdmVyc2VyLmJ1bGsgLSAxCi0gICAgICAgIGlmIHNlbGYubGFzdF90cmF2ZXJzZXIuYnVsayA8PSAwOgorICAgICAgICByZXMgPSBzZWxmLmxhc3RfdHJhdmVyc2VyCisgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzLCBUcmF2ZXJzZXIpOgorICAgICAgICAgICAgb2JqID0gcmVzLm9iamVjdAorICAgICAgICAgICAgc2VsZi5sYXN0X3RyYXZlcnNlci5idWxrID0gc2VsZi5sYXN0X3RyYXZlcnNlci5idWxrIC0gMQorICAgICAgICAgICAgaWYgc2VsZi5sYXN0X3RyYXZlcnNlci5idWxrIDw9IDA6CisgICAgICAgICAgICAgICAgc2VsZi5sYXN0X3RyYXZlcnNlciA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubGFzdF90cmF2ZXJzZXIgPSBOb25lCi0gICAgICAgIHJldHVybiBvYmplY3QKKyAgICAgICAgICAgIHJldHVybiByZXMKIAogICAgIGRlZiB0b0xpc3Qoc2VsZik6CiAgICAgICAgIHdhcm5pbmdzLndhcm4oCkBAIC03NSwxMCArODgsMTIgQEAKICAgICAgICAgcmV0dXJuIHNldChpdGVyKHNlbGYpKQogCiAgICAgZGVmIGl0ZXJhdGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYnl0ZWNvZGUuYWRkX3N0ZXAoImRpc2NhcmQiKQorICAgICAgICBzZWxmLmdyZW1saW5fbGFuZy5hZGRfc3RlcCgiZGlzY2FyZCIpCiAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB0cnk6IHNlbGYubmV4dF90cmF2ZXJzZXIoKQotICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246IHJldHVybiBzZWxmCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5uZXh0X3RyYXZlcnNlcigpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIG5leHRUcmF2ZXJzZXIoc2VsZik6CiAgICAgICAgIHdhcm5pbmdzLndhcm4oCkBAIC0xMDgsOSArMTIzLDExIEBACiAgICAgICAgIGlmIHNlbGYudHJhdmVyc2VycyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi50cmF2ZXJzYWxfc3RyYXRlZ2llcy5hcHBseV9zdHJhdGVnaWVzKHNlbGYpCiAgICAgICAgIGlmIHNlbGYubGFzdF90cmF2ZXJzZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeTogc2VsZi5sYXN0X3RyYXZlcnNlciA9IG5leHQoc2VsZi50cmF2ZXJzZXJzKQotICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246IHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gbm90KHNlbGYubGFzdF90cmF2ZXJzZXIgaXMgTm9uZSkgYW5kIHNlbGYubGFzdF90cmF2ZXJzZXIuYnVsayA+IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmxhc3RfdHJhdmVyc2VyID0gbmV4dChzZWxmLnRyYXZlcnNlcnMpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZi5sYXN0X3RyYXZlcnNlciBpcyBOb25lKSBhbmQgc2VsZi5sYXN0X3RyYXZlcnNlci5idWxrID4gMCBpZiBpc2luc3RhbmNlKHNlbGYubGFzdF90cmF2ZXJzZXIsIFRyYXZlcnNlcikgZWxzZSBUcnVlCiAKICAgICBkZWYgbmV4dChzZWxmLCBhbW91bnQ9Tm9uZSk6CiAgICAgICAgIGlmIGFtb3VudCBpcyBOb25lOgpAQCAtMTIwLDggKzEzNywxMCBAQAogICAgICAgICAgICAgdGVtcExpc3QgPSBbXQogICAgICAgICAgICAgd2hpbGUgY291bnQgPCBhbW91bnQ6CiAgICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCArIDEKLSAgICAgICAgICAgICAgICB0cnk6IHRlbXAgPSBzZWxmLl9fbmV4dF9fKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjogcmV0dXJuIHRlbXBMaXN0CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZW1wID0gc2VsZi5fX25leHRfXygpCisgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTGlzdAogICAgICAgICAgICAgICAgIHRlbXBMaXN0LmFwcGVuZCh0ZW1wKQogICAgICAgICAgICAgcmV0dXJuIHRlbXBMaXN0CiAKQEAgLTEyOSw2ICsxNDgsNyBAQAogICAgICAgICBzZWxmLnRyYXZlcnNhbF9zdHJhdGVnaWVzLmFwcGx5X2FzeW5jX3N0cmF0ZWdpZXMoc2VsZikKICAgICAgICAgZnV0dXJlX3RyYXZlcnNhbCA9IHNlbGYucmVtb3RlX3Jlc3VsdHMKICAgICAgICAgZnV0dXJlID0gdHlwZShmdXR1cmVfdHJhdmVyc2FsKSgpCisKICAgICAgICAgZGVmIHByb2Nlc3MoZik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJhdmVyc2FsID0gZi5yZXN1bHQoKQpAQCAtMTQ1LDYgKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUuc2V0X3Jlc3VsdChyZXN1bHQpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLnNldF9yZXN1bHQoc2VsZikKKwogICAgICAgICBmdXR1cmVfdHJhdmVyc2FsLmFkZF9kb25lX2NhbGxiYWNrKHByb2Nlc3MpCiAgICAgICAgIHJldHVybiBmdXR1cmUKIApAQCAtMTgzLDE3ICsyMDQsNiBAQAogc3RhdGljcy5hZGRfc3RhdGljKCdmcm9tXycsIERpcmVjdGlvbi5PVVQpCiBzdGF0aWNzLmFkZF9zdGF0aWMoJ3RvJywgRGlyZWN0aW9uLklOKQogCi1HcmFwaFNPTlZlcnNpb24gPSBFbnVtKCdHcmFwaFNPTlZlcnNpb24nLCAnIFYxXzAgVjJfMCBWM18wJykKLQotc3RhdGljcy5hZGRfc3RhdGljKCdWMV8wJywgR3JhcGhTT05WZXJzaW9uLlYxXzApCi1zdGF0aWNzLmFkZF9zdGF0aWMoJ1YyXzAnLCBHcmFwaFNPTlZlcnNpb24uVjJfMCkKLXN0YXRpY3MuYWRkX3N0YXRpYygnVjNfMCcsIEdyYXBoU09OVmVyc2lvbi5WM18wKQotCi1HcnlvVmVyc2lvbiA9IEVudW0oJ0dyeW9WZXJzaW9uJywgJyBWMV8wIFYzXzAnKQotCi1zdGF0aWNzLmFkZF9zdGF0aWMoJ1YxXzAnLCBHcnlvVmVyc2lvbi5WMV8wKQotc3RhdGljcy5hZGRfc3RhdGljKCdWM18wJywgR3J5b1ZlcnNpb24uVjNfMCkKLQogRFQgPSBFbnVtKCdEVCcsICcgc2Vjb25kIG1pbnV0ZSBob3VyIGRheScpCiAKIHN0YXRpY3MuYWRkX3N0YXRpYygnc2Vjb25kJywgRFQuc2Vjb25kKQpAQCAtMjMyLDcgKzI0Miw2IEBACiBzdGF0aWNzLmFkZF9zdGF0aWMoJ2dsb2JhbF8nLCBTY29wZS5nbG9iYWxfKQogc3RhdGljcy5hZGRfc3RhdGljKCdsb2NhbCcsIFNjb3BlLmxvY2FsKQogCi0KIFQgPSBFbnVtKCdUJywgJyBpZCBpZF8ga2V5IGxhYmVsIHZhbHVlJykKIAogc3RhdGljcy5hZGRfc3RhdGljKCdpZCcsIFQuaWQpCkBAIC0yNDEsNyArMjUwLDYgQEAKIHN0YXRpY3MuYWRkX3N0YXRpYygna2V5JywgVC5rZXkpCiBzdGF0aWNzLmFkZF9zdGF0aWMoJ3ZhbHVlJywgVC52YWx1ZSkKIAotCiBPcGVyYXRvciA9IEVudW0oJ09wZXJhdG9yJywgJyBhZGRBbGwgYWRkX2FsbCBhbmRfIGFzc2lnbiBkaXYgbWF4IG1heF8gbWluIG1pbl8gbWludXMgbXVsdCBvcl8gc3VtXyBzdW1Mb25nIHN1bV9sb25nJykKIAogc3RhdGljcy5hZGRfc3RhdGljKCdzdW1fJywgT3BlcmF0b3Iuc3VtXykKQEAgLTM1Miw3ICszNjAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFAoIndpdGhpbiIsIGxpc3QoYXJnc1swXSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gUCgid2l0aGluIiwgbGlzdChhcmdzKSkKLSAgICAgICAgCisKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIHdpdGhvdXQoKmFyZ3MpOgogICAgICAgICBpZiBsZW4oYXJncykgPT0gMSBhbmQgdHlwZShhcmdzWzBdKSA9PSBsaXN0OgpAQCAtNTE0LDcgKzUyMiw3IEBACiAgICAgZGVmIHN0YXJ0aW5nV2l0aCgqYXJncyk6CiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5UZXh0UC5zdGFydGluZ1dpdGggd2lsbCBiZSByZXBsYWNlZCBieSAiCi0gICAgICAgICAgICAiZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5UZXh0UC5zdGFydGluZ1dpdGguIiwKKyAgICAgICAgICAgICJncmVtbGluX3B5dGhvbi5wcm9jZXNzLlRleHRQLnN0YXJ0aW5nX3dpdGguIiwKICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgcmV0dXJuIFRleHRQKCJzdGFydGluZ1dpdGgiLCAqYXJncykKIApAQCAtNjEyLDE2ICs2MjAsMTIgQEAKIAogc3RhdGljcy5hZGRfc3RhdGljKCdub3RfcmVnZXgnLCBub3RfcmVnZXgpCiAKLQotCi0KICcnJwogSU8KICcnJwogCiAKIGNsYXNzIElPKG9iamVjdCk6Ci0KICAgICBncmFwaG1sID0gImdyYXBobWwiCiAKICAgICBncmFwaHNvbiA9ICJncmFwaHNvbiIKQEAgLTY0MSw3ICs2NDUsNiBAQAogCiAKIGNsYXNzIENvbm5lY3RlZENvbXBvbmVudChvYmplY3QpOgotCiAgICAgY29tcG9uZW50ID0gImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnQiCiAKICAgICBlZGdlcyA9ICJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5lZGdlcyIKQEAgLTY1Nyw3ICs2NjAsNiBAQAogCiAKIGNsYXNzIFNob3J0ZXN0UGF0aChvYmplY3QpOgotCiAgICAgZGlzdGFuY2UgPSAifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UiCiAKICAgICBlZGdlcyA9ICJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcyIKQEAgLTY3OSw3ICs2ODEsNiBAQAogCiAKIGNsYXNzIFBhZ2VSYW5rKG9iamVjdCk6Ci0KICAgICBlZGdlcyA9ICJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzIgogCiAgICAgcHJvcGVydHlOYW1lID0gIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lIgpAQCAtNjk1LDcgKzY5Niw2IEBACiAKIAogY2xhc3MgUGVlclByZXNzdXJlKG9iamVjdCk6Ci0KICAgICBlZGdlcyA9ICJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlcyIKIAogICAgIHByb3BlcnR5TmFtZSA9ICJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWUiCkBAIC03NTAsMTAgKzc1MCwxMSBAQAogCiAKIGNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmF0ZWd5X25hbWU9Tm9uZSwgY29uZmlndXJhdGlvbj1Ob25lLCBmcWNuPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJhdGVneV9uYW1lPU5vbmUsIGNvbmZpZ3VyYXRpb249Tm9uZSwgZnFjbj1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYuZnFjbiA9IGZxY24KICAgICAgICAgc2VsZi5zdHJhdGVneV9uYW1lID0gdHlwZShzZWxmKS5fX25hbWVfXyBpZiBzdHJhdGVneV9uYW1lIGlzIE5vbmUgZWxzZSBzdHJhdGVneV9uYW1lCiAgICAgICAgIHNlbGYuY29uZmlndXJhdGlvbiA9IHt9IGlmIGNvbmZpZ3VyYXRpb24gaXMgTm9uZSBlbHNlIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0geyoqa3dhcmdzLCAqKnNlbGYuY29uZmlndXJhdGlvbn0gICMgbWVyZ2UgYWRkaXRpb25hbCBrd2FyZ3MgaW50byBzdHJhdGVneSBjb25maWd1cmF0aW9uCiAKICAgICBkZWYgYXBwbHkoc2VsZiwgdHJhdmVyc2FsKToKICAgICAgICAgcmV0dXJuCkBAIC03NzIsMTUzICs3NzMsMTEgQEAKIAogCiAnJycKLUJZVEVDT0RFCi0nJycKLQotCi1jbGFzcyBCeXRlY29kZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBieXRlY29kZT1Ob25lKToKLSAgICAgICAgc2VsZi5zb3VyY2VfaW5zdHJ1Y3Rpb25zID0gW10KLSAgICAgICAgc2VsZi5zdGVwX2luc3RydWN0aW9ucyA9IFtdCi0gICAgICAgIHNlbGYuYmluZGluZ3MgPSB7fQotICAgICAgICBpZiBieXRlY29kZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuc291cmNlX2luc3RydWN0aW9ucyA9IGxpc3QoYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9ucykKLSAgICAgICAgICAgIHNlbGYuc3RlcF9pbnN0cnVjdGlvbnMgPSBsaXN0KGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zKQotCi0gICAgZGVmIGFkZF9zb3VyY2Uoc2VsZiwgc291cmNlX25hbWUsICphcmdzKToKLSAgICAgICAgaW5zdHJ1Y3Rpb24gPSBbc291cmNlX25hbWVdCi0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgICAgIGluc3RydWN0aW9uLmFwcGVuZChzZWxmLl9fY29udmVydEFyZ3VtZW50KGFyZykpCi0gICAgICAgIHNlbGYuc291cmNlX2luc3RydWN0aW9ucy5hcHBlbmQoaW5zdHJ1Y3Rpb24pCi0KLSAgICBkZWYgYWRkX3N0ZXAoc2VsZiwgc3RlcF9uYW1lLCAqYXJncyk6Ci0gICAgICAgIGluc3RydWN0aW9uID0gW3N0ZXBfbmFtZV0KLSAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgotICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uYXBwZW5kKHNlbGYuX19jb252ZXJ0QXJndW1lbnQoYXJnKSkKLSAgICAgICAgc2VsZi5zdGVwX2luc3RydWN0aW9ucy5hcHBlbmQoaW5zdHJ1Y3Rpb24pCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX2luc3RydWN0aW9ucyA9PSBvdGhlci5zb3VyY2VfaW5zdHJ1Y3Rpb25zIGFuZCBzZWxmLnN0ZXBfaW5zdHJ1Y3Rpb25zID09IG90aGVyLnN0ZXBfaW5zdHJ1Y3Rpb25zCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKLSAgICAgICAgYmIgPSBCeXRlY29kZSgpCi0gICAgICAgIGJiLnNvdXJjZV9pbnN0cnVjdGlvbnMgPSBzZWxmLnNvdXJjZV9pbnN0cnVjdGlvbnMKLSAgICAgICAgYmIuc3RlcF9pbnN0cnVjdGlvbnMgPSBzZWxmLnN0ZXBfaW5zdHJ1Y3Rpb25zCi0gICAgICAgIGJiLmJpbmRpbmdzID0gc2VsZi5iaW5kaW5ncwotICAgICAgICByZXR1cm4gYmIKLQotICAgIGRlZiBfX2RlZXBjb3B5X18oc2VsZiwgbWVtbz17fSk6Ci0gICAgICAgIGJiID0gQnl0ZWNvZGUoKQotICAgICAgICBiYi5zb3VyY2VfaW5zdHJ1Y3Rpb25zID0gY29weS5kZWVwY29weShzZWxmLnNvdXJjZV9pbnN0cnVjdGlvbnMsIG1lbW8pCi0gICAgICAgIGJiLnN0ZXBfaW5zdHJ1Y3Rpb25zID0gY29weS5kZWVwY29weShzZWxmLnN0ZXBfaW5zdHJ1Y3Rpb25zLCBtZW1vKQotICAgICAgICBiYi5iaW5kaW5ncyA9IGNvcHkuZGVlcGNvcHkoc2VsZi5iaW5kaW5ncywgbWVtbykKLSAgICAgICAgcmV0dXJuIGJiCi0KLSAgICBkZWYgX19jb252ZXJ0QXJndW1lbnQoc2VsZiwgYXJnKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIFRyYXZlcnNhbCk6Ci0gICAgICAgICAgICBpZiBhcmcuZ3JhcGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUaGUgY2hpbGQgdHJhdmVyc2FsIG9mICIgKyBzdHIoYXJnKSArICIgd2FzIG5vdCBzcGF3bmVkIGFub255bW91c2x5IC0gdXNlIHRoZSBfXyBjbGFzcyByYXRoZXIgdGhhbiBhIFRyYXZlcnNhbFNvdXJjZSB0byBjb25zdHJ1Y3QgdGhlIGNoaWxkIHRyYXZlcnNhbCIpCi0gICAgICAgICAgICBzZWxmLmJpbmRpbmdzLnVwZGF0ZShhcmcuYnl0ZWNvZGUuYmluZGluZ3MpCi0gICAgICAgICAgICByZXR1cm4gYXJnLmJ5dGVjb2RlCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIGRpY3QpOgotICAgICAgICAgICAgbmV3RGljdCA9IHt9Ci0gICAgICAgICAgICBmb3Iga2V5IGluIGFyZzoKLSAgICAgICAgICAgICAgICBuZXdEaWN0W3NlbGYuX19jb252ZXJ0QXJndW1lbnQoa2V5KV0gPSBzZWxmLl9fY29udmVydEFyZ3VtZW50KGFyZ1trZXldKQotICAgICAgICAgICAgcmV0dXJuIG5ld0RpY3QKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZywgbGlzdCk6Ci0gICAgICAgICAgICBuZXdMaXN0ID0gW10KLSAgICAgICAgICAgIGZvciBpdGVtIGluIGFyZzoKLSAgICAgICAgICAgICAgICBuZXdMaXN0LmFwcGVuZChzZWxmLl9fY29udmVydEFyZ3VtZW50KGl0ZW0pKQotICAgICAgICAgICAgcmV0dXJuIG5ld0xpc3QKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZywgc2V0KToKLSAgICAgICAgICAgIG5ld1NldCA9IHNldCgpCi0gICAgICAgICAgICBmb3IgaXRlbSBpbiBhcmc6Ci0gICAgICAgICAgICAgICAgbmV3U2V0LmFkZChzZWxmLl9fY29udmVydEFyZ3VtZW50KGl0ZW0pKQotICAgICAgICAgICAgcmV0dXJuIG5ld1NldAotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYXJnLCBCaW5kaW5nKToKLSAgICAgICAgICAgIHNlbGYuYmluZGluZ3NbYXJnLmtleV0gPSBhcmcudmFsdWUKLSAgICAgICAgICAgIHJldHVybiBCaW5kaW5nKGFyZy5rZXksIHNlbGYuX19jb252ZXJ0QXJndW1lbnQoYXJnLnZhbHVlKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBhcmcKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIChzdHIoc2VsZi5zb3VyY2VfaW5zdHJ1Y3Rpb25zKSBpZiBsZW4oc2VsZi5zb3VyY2VfaW5zdHJ1Y3Rpb25zKSA+IDAgZWxzZSAiIikgKyBcCi0gICAgICAgICAgICAgICAoc3RyKHNlbGYuc3RlcF9pbnN0cnVjdGlvbnMpIGlmIGxlbihzZWxmLnN0ZXBfaW5zdHJ1Y3Rpb25zKSA+IDAgZWxzZSAiIikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2NyZWF0ZV9ncmFwaF9vcChuYW1lLCAqdmFsdWVzKToKLSAgICAgICAgYmMgPSBCeXRlY29kZSgpCi0gICAgICAgIGJjLmFkZF9zb3VyY2UobmFtZSwgKnZhbHVlcykKLSAgICAgICAgcmV0dXJuIGJjCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgY2xhc3MgR3JhcGhPcDoKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgY29tbWl0KCk6Ci0gICAgICAgICAgICByZXR1cm4gQnl0ZWNvZGUuX2NyZWF0ZV9ncmFwaF9vcCgidHgiLCAiY29tbWl0IikKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiByb2xsYmFjaygpOgotICAgICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlLl9jcmVhdGVfZ3JhcGhfb3AoInR4IiwgInJvbGxiYWNrIikKLQotCi1jbGFzcyBDYXJkaW5hbGl0eVZhbHVlKEJ5dGVjb2RlKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY2FyZGluYWxpdHksIHZhbCk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18oKQotICAgICAgICBzZWxmLmFkZF9zb3VyY2UoIkNhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwiLCBjYXJkaW5hbGl0eSwgdmFsKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNpbmdsZShjbHMsIHZhbCk6Ci0gICAgICAgIHJldHVybiBDYXJkaW5hbGl0eVZhbHVlKENhcmRpbmFsaXR5LnNpbmdsZSwgdmFsKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGxpc3RfKGNscywgdmFsKToKLSAgICAgICAgcmV0dXJuIENhcmRpbmFsaXR5VmFsdWUoQ2FyZGluYWxpdHkubGlzdF8sIHZhbCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRfKGNscywgdmFsKToKLSAgICAgICAgcmV0dXJuIENhcmRpbmFsaXR5VmFsdWUoQ2FyZGluYWxpdHkuc2V0XywgdmFsKQotCi0KLScnJwotQklORElOR1MKLScnJwotCi0KLWNsYXNzIEJpbmRpbmdzKG9iamVjdCk6Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIG9mKGtleSwgdmFsdWUpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIHN0cik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIktleSBtdXN0IGJlIHN0ciIpCi0gICAgICAgIHJldHVybiBCaW5kaW5nKGtleSwgdmFsdWUpCi0KLQotY2xhc3MgQmluZGluZyhvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgc2VsZi5rZXkgPSBrZXkKLSAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKSBhbmQgc2VsZi5rZXkgPT0gb3RoZXIua2V5IGFuZCBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCi0KLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKHNlbGYua2V5KSArIGhhc2goc2VsZi52YWx1ZSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJiaW5kaW5nWyIgKyBzZWxmLmtleSArICI9IiArIHN0cihzZWxmLnZhbHVlKSArICJdIgotCi0KLScnJwogV0lUSCBPUFRJT05TCiAnJycKIAogCiBjbGFzcyBXaXRoT3B0aW9ucyhvYmplY3QpOgotCiAgICAgdG9rZW5zID0gIn50aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zIgogCiAgICAgbm9uZSA9IDAKQEAgLTkzOSwzICs3OTgsMzkxIEBACiAKICAgICBtYXAgPSAxCiAKKworJycnCitHUkVNTElOIExBTkdVQUdFCisnJycKKworCitjbGFzcyBHcmVtbGluTGFuZyhvYmplY3QpOgorICAgIGNvbm5fcCA9IFsnYW5kJywgJ29yJ10KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBncmVtbGluX2xhbmc9Tm9uZSk6CisgICAgICAgIHNlbGYuZW1wdHlfYXJyYXkgPSBbXQorCisgICAgICAgIHNlbGYuZ3JlbWxpbiA9IFtdCisgICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHt9CisgICAgICAgIHNlbGYub3B0aW9uc19zdHJhdGVnaWVzID0gW10KKyAgICAgICAgc2VsZi5wYXJhbV9jb3VudCA9IEF0b21pY0ludGVnZXIoKQorCisgICAgICAgIGlmIGdyZW1saW5fbGFuZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZ3JlbWxpbiA9IGxpc3QoZ3JlbWxpbl9sYW5nLmdyZW1saW4pCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnMgPSBkaWN0KGdyZW1saW5fbGFuZy5wYXJhbWV0ZXJzKQorICAgICAgICAgICAgc2VsZi5vcHRpb25zX3N0cmF0ZWdpZXMgPSBsaXN0KGdyZW1saW5fbGFuZy5vcHRpb25zX3N0cmF0ZWdpZXMpCisgICAgICAgICAgICBzZWxmLnBhcmFtX2NvdW50ID0gZ3JlbWxpbl9sYW5nLnBhcmFtX2NvdW50CisKKyAgICBkZWYgX2FkZF90b19ncmVtbGluKHNlbGYsIHN0cmluZ19uYW1lLCAqYXJncyk6CisKKyAgICAgICAgaWYgc3RyaW5nX25hbWUgPT0gJ0NhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwnOgorICAgICAgICAgICAgc2VsZi5ncmVtbGluLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBmJ3tzZWxmLl9hcmdfYXNfc3RyaW5nKGFyZ3NbMF1bMF0pfSh7c2VsZi5fYXJnX2FzX3N0cmluZyhhcmdzWzBdWzFdKX0pJykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuZ3JlbWxpbi5leHRlbmQoWycuJywgc3RyaW5nX25hbWUsICcoJ10pCisKKyAgICAgICAgYyA9IDAKKyAgICAgICAgd2hpbGUgbGVuKGFyZ3NbMF0pID4gYzoKKyAgICAgICAgICAgIGlmIGMgIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmdyZW1saW4uYXBwZW5kKCcsJykKKyAgICAgICAgICAgIHNlbGYuZ3JlbWxpbi5hcHBlbmQoc2VsZi5fYXJnX2FzX3N0cmluZyhzZWxmLl9jb252ZXJ0X2FyZ3VtZW50KGFyZ3NbMF1bY10pKSkKKyAgICAgICAgICAgIGMgKz0gMQorCisgICAgICAgIHNlbGYuZ3JlbWxpbi5hcHBlbmQoJyknKQorCisgICAgZGVmIF9hcmdfYXNfc3RyaW5nKHNlbGYsIGFyZyk6CisKKyAgICAgICAgaWYgYXJnIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJ251bGwnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6CisgICAgICAgICAgICByZXR1cm4gZid7YXJnIXJ9JyAgIyB1c2UgcmVwcigpIGZvcm1hdCBmb3IgY2Fub25pY2FsIHN0cmluZyByZXAKKyAgICAgICAgICAgICMgcmV0dXJuIGYnInthcmd9IicKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIGJvb2wpOgorICAgICAgICAgICAgcmV0dXJuICd0cnVlJyBpZiBhcmcgZWxzZSAnZmFsc2UnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIFNpbmdsZUJ5dGUpOgorICAgICAgICAgICAgcmV0dXJuIGYne2FyZ31CJworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgc2hvcnQpOgorICAgICAgICAgICAgcmV0dXJuIGYne2FyZ31TJworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgbG9uZyk6CisgICAgICAgICAgICByZXR1cm4gZid7YXJnfUwnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBiaWdpbnQpOgorICAgICAgICAgICAgcmV0dXJuIGYne2FyZ31OJworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgaW50KToKKyAgICAgICAgICAgIHJldHVybiBmJ3thcmd9JworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgZmxvYXQpOgorICAgICAgICAgICAgIyBjb252ZXJ0aW5nIGZsb2F0cyBpbnRvIGRvdWJsZXMgZm9yIHNjcmlwdCBzaW5jZSBweXRob24gZG9lc24ndCBkaXN0aW5ndWlzaCBhbmQgamF2YSBkZWZhdWx0cyB0byBkb3VibGUKKyAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oYXJnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIk5hTiIKKyAgICAgICAgICAgIGVsaWYgbWF0aC5pc2luZihhcmcpIGFuZCBhcmcgPiAwOgorICAgICAgICAgICAgICAgIHJldHVybiAiK0luZmluaXR5IgorICAgICAgICAgICAgZWxpZiBtYXRoLmlzaW5mKGFyZykgYW5kIGFyZyA8IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuICItSW5maW5pdHkiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBmJ3thcmd9RCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIEJpZ0RlY2ltYWwpOgorICAgICAgICAgICAgcmV0dXJuIGYne2FyZy52YWx1ZX1NJworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBkYXRldGltZSk6CisgICAgICAgICAgICByZXR1cm4gZidkYXRldGltZSgie2FyZy5pc29mb3JtYXQoKX0iKScKKworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgdXVpZC5VVUlEKToKKyAgICAgICAgICAgIHJldHVybiBmJ1VVSUQoInthcmd9IiknCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIEVudW0pOgorICAgICAgICAgICAgdG1wID0gc3RyKGFyZykKKyAgICAgICAgICAgIGlmIHRtcC5lbmRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIHJldHVybiB0bXBbMDotMV0KKyAgICAgICAgICAgIGVsaWYgJ18nIGluIHRtcDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZid7dG1wLnNwbGl0KCJfIilbMF19e3RtcC5zcGxpdCgiXyIpWzFdLmNhcGl0YWxpemUoKX0nCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB0bXAKKworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgVmVydGV4KToKKyAgICAgICAgICAgIHJldHVybiBmJ3tzZWxmLl9hcmdfYXNfc3RyaW5nKGFyZy5pZCl9JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBQKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX3ByZWRpY2F0ZShhcmcpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIEdyZW1saW5MYW5nKSBvciBpc2luc3RhbmNlKGFyZywgVHJhdmVyc2FsKToKKyAgICAgICAgICAgIGdyZW1saW5fbGFuZyA9IGFyZyBpZiBpc2luc3RhbmNlKGFyZywgR3JlbWxpbkxhbmcpIGVsc2UgYXJnLmdyZW1saW5fbGFuZworICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJzLnVwZGF0ZShncmVtbGluX2xhbmcucGFyYW1ldGVycykKKyAgICAgICAgICAgIHJldHVybiBncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oJ19fJykKKworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgR1ZhbHVlKToKKyAgICAgICAgICAgIGtleSA9IGFyZy5nZXRfbmFtZSgpCisKKyAgICAgICAgICAgIGlmIG5vdCBrZXkuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGYnaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSB7a2V5fS4nKQorCisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZi5wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyc1trZXldICE9IGFyZy52YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGYncGFyYW1ldGVyIHdpdGggbmFtZSB7a2V5fSBhbHJlYWR5IGV4aXN0cy4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcnNba2V5XSA9IGFyZy52YWx1ZQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBkaWN0KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX2RpY3QoYXJnKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCBzZXQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3Nfc2V0KGFyZykKKworICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2Vzc19saXN0KGFyZykKKworICAgICAgICBpZiBoYXNhdHRyKGFyZywgJ19fY2xhc3NfXycpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBhcmcuX19uYW1lX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FzX3BhcmFtZXRlcihhcmcpCisKKyAgICBkZWYgX2FzX3BhcmFtZXRlcihzZWxmLCBhcmcpOgorICAgICAgICBwYXJhbV9uYW1lID0gZidfe3NlbGYucGFyYW1fY291bnQuZ2V0X2FuZF9pbmNyZW1lbnQoKX0nCisgICAgICAgIHNlbGYucGFyYW1ldGVyc1twYXJhbV9uYW1lXSA9IGFyZworICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQorCisgICAgIyBEbyBzcGVjaWFsIHByb2Nlc3NpbmcgbmVlZGVkIHRvIGZvcm1hdCBwcmVkaWNhdGVzIHRoYXQgY29tZSBpbgorICAgICMgc3VjaCBhcyAiZ3QoYSkiIGNvcnJlY3RseS4KKyAgICBkZWYgX3Byb2Nlc3NfcHJlZGljYXRlKHNlbGYsIHApOgorICAgICAgICByZXMgPSBbXQorICAgICAgICBpZiBwLm9wZXJhdG9yIGluIHNlbGYuY29ubl9wOgorICAgICAgICAgICAgcmVzLmFwcGVuZChmJ3tzZWxmLl9wcm9jZXNzX3ByZWRpY2F0ZShwLnZhbHVlKX0ue3Aub3BlcmF0b3J9KHtzZWxmLl9wcm9jZXNzX3ByZWRpY2F0ZShwLm90aGVyKX0pJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoZid7c2VsZi5fcHJvY2Vzc19wX3ZhbHVlKHApfScpCisgICAgICAgIHJldHVybiAnJy5qb2luKHJlcykKKworICAgICMgcHJvY2VzcyB0aGUgdmFsdWUgb2YgdGhlIHByZWRpY2F0ZXMKKyAgICBkZWYgX3Byb2Nlc3NfcF92YWx1ZShzZWxmLCBwKToKKyAgICAgICAgYyA9IDAKKyAgICAgICAgcmVzID0gW3N0cihwKS5zcGxpdCgnKCcpWzBdICsgJygnXQorICAgICAgICBpZiBpc2luc3RhbmNlKHAudmFsdWUsIGxpc3QpOgorICAgICAgICAgICAgcmVzLmFwcGVuZCgnWycpCisgICAgICAgICAgICBmb3IgdiBpbiBwLnZhbHVlOgorICAgICAgICAgICAgICAgIGlmIGMgPiAwOgorICAgICAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCcsJykKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKHNlbGYuX2FyZ19hc19zdHJpbmcodikpCisgICAgICAgICAgICAgICAgYyArPSAxCisgICAgICAgICAgICByZXMuYXBwZW5kKCddJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoc2VsZi5fYXJnX2FzX3N0cmluZyhwLnZhbHVlKSkKKyAgICAgICAgICAgIGlmIHAub3RoZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChmJyx7c2VsZi5fYXJnX2FzX3N0cmluZyhwLm90aGVyKX0nKQorICAgICAgICByZXMuYXBwZW5kKCcpJykKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocmVzKQorCisgICAgZGVmIF9wcm9jZXNzX2RpY3Qoc2VsZiwgZCk6CisgICAgICAgIGMgPSAwCisgICAgICAgIHJlcyA9IFsnWyddCisgICAgICAgIGlmIGxlbihkKSA9PSAwOgorICAgICAgICAgICAgcmVzLmFwcGVuZCgnOicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgd3JhcCA9IG5vdCBpc2luc3RhbmNlKGssIHN0cikKKyAgICAgICAgICAgICAgICBpZiBjID4gMDoKKyAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgnLCcpCisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChmJyh7c2VsZi5fYXJnX2FzX3N0cmluZyhrKX0pJykgaWYgd3JhcCBlbHNlIHJlcy5hcHBlbmQoc2VsZi5fYXJnX2FzX3N0cmluZyhrKSkKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKGYnOntzZWxmLl9hcmdfYXNfc3RyaW5nKHYpfScpCisgICAgICAgICAgICAgICAgYyArPSAxCisgICAgICAgIHJlcy5hcHBlbmQoJ10nKQorICAgICAgICByZXR1cm4gJycuam9pbihyZXMpCisKKyAgICBkZWYgX3Byb2Nlc3Nfc2V0KHNlbGYsIHMpOgorICAgICAgICBjID0gMAorICAgICAgICByZXMgPSBbJ3snXQorICAgICAgICBmb3IgaSBpbiBzOgorICAgICAgICAgICAgaWYgYyA+IDA6CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgnLCcpCisgICAgICAgICAgICByZXMuYXBwZW5kKHNlbGYuX2FyZ19hc19zdHJpbmcoaSkpCisgICAgICAgICAgICBjICs9IDEKKyAgICAgICAgcmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAnJy5qb2luKHJlcykKKworICAgIGRlZiBfcHJvY2Vzc19saXN0KHNlbGYsIGxzdCk6CisgICAgICAgIGMgPSAwCisgICAgICAgIHJlcyA9IFsnWyddCisgICAgICAgIGZvciBpIGluIGxzdDoKKyAgICAgICAgICAgIGlmIGMgPiAwOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoJywnKQorICAgICAgICAgICAgcmVzLmFwcGVuZChzZWxmLl9hcmdfYXNfc3RyaW5nKGkpKQorICAgICAgICAgICAgYyArPSAxCisgICAgICAgIHJlcy5hcHBlbmQoJ10nKQorICAgICAgICByZXR1cm4gJycuam9pbihyZXMpCisKKyAgICBkZWYgZ2V0X2dyZW1saW4oc2VsZiwgZz0nZycpOgorICAgICAgICAjIHNwZWNpYWwgaGFuZGxpbmcgZm9yIENhcmRpbmFsaXR5VmFsdWVUcmF2ZXJzYWwKKyAgICAgICAgaWYgbGVuKHNlbGYuZ3JlbWxpbikgIT0gMCBhbmQgc2VsZi5ncmVtbGluWzBdICE9ICcuJzoKKyAgICAgICAgICAgIHJldHVybiAnJy5qb2luKHNlbGYuZ3JlbWxpbikKKworICAgICAgICByZXR1cm4gZyArICcnLmpvaW4oc2VsZi5ncmVtbGluKQorCisgICAgZGVmIGdldF9wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXJhbWV0ZXJzCisKKyAgICBkZWYgYWRkX2coc2VsZiwgZyk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyc1snZyddID0gZworCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcmFtX2NvdW50LnNldCgwKQorCisgICAgZGVmIGFkZF9zb3VyY2Uoc2VsZiwgc291cmNlX25hbWUsICphcmdzKToKKworICAgICAgICBpZiBzb3VyY2VfbmFtZSA9PSAnd2l0aFN0cmF0ZWdpZXMnIGFuZCBsZW4oYXJncykgIT0gMDoKKyAgICAgICAgICAgIGFyZ3MgPSBzZWxmLmJ1aWxkX3N0cmF0ZWd5X2FyZ3MoYXJncykKKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuZ3JlbWxpbi5hcHBlbmQoJy4nKQorICAgICAgICAgICAgICAgIHNlbGYuZ3JlbWxpbi5hcHBlbmQoZid3aXRoU3RyYXRlZ2llcyh7YXJnc30pJykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9hZGRfdG9fZ3JlbWxpbihzb3VyY2VfbmFtZSwgYXJncykKKworICAgIGRlZiBidWlsZF9zdHJhdGVneV9hcmdzKHNlbGYsIGFyZ3MpOgorICAgICAgICByZXMgPSBbXQorICAgICAgICBjID0gMAorICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgICAgICAgICBpZiBjID4gMDoKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCcsJykKKyAgICAgICAgICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgT3B0aW9uc1N0cmF0ZWd5CisgICAgICAgICAgICBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3Muc3RyYXRlZ2llcyBpbXBvcnQgT3B0aW9uc1N0cmF0ZWd5CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgT3B0aW9uc1N0cmF0ZWd5KToKKyAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnNfc3RyYXRlZ2llcy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgYXJnLmNvbmZpZ3VyYXRpb246CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChhcmcuc3RyYXRlZ3lfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChmJ25ldyB7c3RyKGFyZyl9KCcpCisgICAgICAgICAgICAgICAgY3QgPSAwCisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBhcmcuY29uZmlndXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgY3QgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZCgnLCcpCisgICAgICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoZid7a2V5fTonKQorICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmcuY29uZmlndXJhdGlvbltrZXldCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBUcmF2ZXJzYWwpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChzZWxmLl9hcmdfYXNfc3RyaW5nKHZhbC5ncmVtbGluX2xhbmcpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChzZWxmLl9hcmdfYXNfc3RyaW5nKHZhbCkpCisgICAgICAgICAgICAgICAgICAgIGN0ICs9IDEKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCcpJykKKyAgICAgICAgICAgIGMgKz0gMQorICAgICAgICByZXR1cm4gJycuam9pbihyZXMpCisKKyAgICBkZWYgYWRkX3N0ZXAoc2VsZiwgc3RlcF9uYW1lLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2FkZF90b19ncmVtbGluKHN0ZXBfbmFtZSwgYXJncykKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gJycuam9pbihzZWxmLmdyZW1saW4pID09ICcnLmpvaW4oc2VsZi5ncmVtbGluKSBhbmQgc2VsZi5wYXJhbWV0ZXJzID09IG90aGVyLnBhcmFtZXRlcnMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fY29weV9fKHNlbGYpOgorICAgICAgICBnbCA9IEdyZW1saW5MYW5nKCkKKyAgICAgICAgZ2wucGFyYW1ldGVycyA9IHNlbGYucGFyYW1ldGVycworICAgICAgICBnbC5ncmVtbGluID0gc2VsZi5ncmVtbGluCisgICAgICAgIHJldHVybiBnbAorCisgICAgZGVmIF9fZGVlcGNvcHlfXyhzZWxmLCBtZW1vPU5vbmUpOgorICAgICAgICBpZiBtZW1vIGlzIE5vbmU6CisgICAgICAgICAgICBtZW1vID0ge30KKyAgICAgICAgZ2wgPSBHcmVtbGluTGFuZygpCisgICAgICAgIGdsLnBhcmFtZXRlcnMgPSBjb3B5LmRlZXBjb3B5KHNlbGYucGFyYW1ldGVycywgbWVtbykKKyAgICAgICAgZ2wuZ3JlbWxpbiA9IGNvcHkuZGVlcGNvcHkoc2VsZi5ncmVtbGluLCBtZW1vKQorICAgICAgICByZXR1cm4gZ2wKKworICAgIGRlZiBfY29udmVydF9hcmd1bWVudChzZWxmLCBhcmcpOgorICAgICAgICAjIGlmIGFyZyBpcyBOb25lIG9yIGxlbihhcmcpID09IDA6CisgICAgICAgICMgICAgIHJldHVybiBhcmcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIFRyYXZlcnNhbCk6CisgICAgICAgICAgICBpZiBhcmcuZ3JhcGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUaGUgY2hpbGQgdHJhdmVyc2FsIG9mICIgKyBzdHIoCisgICAgICAgICAgICAgICAgICAgIGFyZykgKyAid2FzIG5vdCBzcGF3bmVkIGFub255bW91c2x5IC0gdXNlIHRoZSBfXyBjbGFzcyByYXRoZXIgdGhhbiBhIFRyYXZlcnNhbFNvdXJjZSB0byBjb25zdHJ1Y3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBjaGlsZCB0cmF2ZXJzYWwuIikKKyAgICAgICAgICAgIHJldHVybiBhcmcuZ3JlbWxpbl9sYW5nCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIGRpY3QpOgorICAgICAgICAgICAgbmV3RGljdCA9IHt9CisgICAgICAgICAgICBmb3Iga2V5IGluIGFyZzoKKyAgICAgICAgICAgICAgICBuZXdEaWN0W3NlbGYuX2NvbnZlcnRfYXJndW1lbnQoa2V5KV0gPSBzZWxmLl9jb252ZXJ0X2FyZ3VtZW50KGFyZ1trZXldKQorICAgICAgICAgICAgcmV0dXJuIG5ld0RpY3QKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZywgbGlzdCk6CisgICAgICAgICAgICBuZXdMaXN0ID0gW10KKyAgICAgICAgICAgIGZvciBpdGVtIGluIGFyZzoKKyAgICAgICAgICAgICAgICBuZXdMaXN0LmFwcGVuZChzZWxmLl9jb252ZXJ0X2FyZ3VtZW50KGl0ZW0pKQorICAgICAgICAgICAgcmV0dXJuIG5ld0xpc3QKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGFyZywgc2V0KToKKyAgICAgICAgICAgIG5ld1NldCA9IHNldCgpCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBhcmc6CisgICAgICAgICAgICAgICAgbmV3U2V0LmFkZChzZWxmLl9jb252ZXJ0X2FyZ3VtZW50KGl0ZW0pKQorICAgICAgICAgICAgcmV0dXJuIG5ld1NldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGFyZworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCcnLmpvaW4oc2VsZi5ncmVtbGluKSBpZiBsZW4oc2VsZi5ncmVtbGluKSA+IDAgZWxzZSAiIikgKyBcCisgICAgICAgICAgICAoc3RyKHNlbGYucGFyYW1ldGVycykgaWYgbGVuKHNlbGYucGFyYW1ldGVycykgPiAwIGVsc2UgIiIpCisKKyAgICAjIFRPRE8gdG8gYmUgcmVtb3ZlZCBvciB1cGRhdGVkIG9uY2UgSFRUUCB0cmFuc2FjdGlvbiBpcyBpbXBsZW1lbnRlZAorICAgICMgQHN0YXRpY21ldGhvZAorICAgICMgZGVmIF9jcmVhdGVfZ3JhcGhfb3AobmFtZSwgKnZhbHVlcyk6CisgICAgIyAgICAgYmMgPSBCeXRlY29kZSgpCisgICAgIyAgICAgYmMuYWRkX3NvdXJjZShuYW1lLCAqdmFsdWVzKQorICAgICMgICAgIHJldHVybiBiYworICAgICMKKyAgICAjIEBzdGF0aWNtZXRob2QKKyAgICAjIGNsYXNzIEdyYXBoT3A6CisgICAgIyAgICAgQHN0YXRpY21ldGhvZAorICAgICMgICAgIGRlZiBjb21taXQoKToKKyAgICAjICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlLl9jcmVhdGVfZ3JhcGhfb3AoInR4IiwgImNvbW1pdCIpCisgICAgIworICAgICMgICAgIEBzdGF0aWNtZXRob2QKKyAgICAjICAgICBkZWYgcm9sbGJhY2soKToKKyAgICAjICAgICAgICAgcmV0dXJuIEJ5dGVjb2RlLl9jcmVhdGVfZ3JhcGhfb3AoInR4IiwgInJvbGxiYWNrIikKKworCitjbGFzcyBHVmFsdWU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcGFyYW1ldGVyIG5hbWUgY2Fubm90IGJlIE5vbmUuIikKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJyk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oZidpbnZhbGlkIEdWYWx1ZSBuYW1lIHtuYW1lfS4gU2hvdWxkIG5vdCBzdGFydCB3aXRoIF8uJykKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBnZXRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorCisgICAgZGVmIGlzX251bGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIGlzIE5vbmUKKworICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKworY2xhc3MgQ2FyZGluYWxpdHlWYWx1ZShHcmVtbGluTGFuZyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhcmRpbmFsaXR5LCB2YWwpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5hZGRfc291cmNlKCJDYXJkaW5hbGl0eVZhbHVlVHJhdmVyc2FsIiwgY2FyZGluYWxpdHksIHZhbCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzaW5nbGUoY2xzLCB2YWwpOgorICAgICAgICByZXR1cm4gQ2FyZGluYWxpdHlWYWx1ZShDYXJkaW5hbGl0eS5zaW5nbGUsIHZhbCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsaXN0XyhjbHMsIHZhbCk6CisgICAgICAgIHJldHVybiBDYXJkaW5hbGl0eVZhbHVlKENhcmRpbmFsaXR5Lmxpc3RfLCB2YWwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0XyhjbHMsIHZhbCk6CisgICAgICAgIHJldHVybiBDYXJkaW5hbGl0eVZhbHVlKENhcmRpbmFsaXR5LnNldF8sIHZhbCkKKworCitjbGFzcyBBdG9taWNJbnRlZ2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdmFsdWUgPSAwCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICBkZWYgZ2V0X2FuZF9pbmNyZW1lbnQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fdmFsdWUKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlICs9IDEKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIHNldChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9zdGF0aWNzLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0YXRpY3MucHkKaW5kZXggZTc1ZTk1NS4uODAxNzc3OCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0YXRpY3MucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0YXRpY3MucHkKQEAgLTQyLDE1ICs0Miw2IEBACiBMaXN0VHlwZSA9IGxpc3QKIERpY3RUeXBlID0gZGljdAogU2V0VHlwZSA9IHNldAotQnl0ZUJ1ZmZlclR5cGUgPSBieXRlcwotCi0KLWNsYXNzIHRpbWVzdGFtcChmbG9hdCk6Ci0gICAgIiIiCi0gICAgSW4gUHl0aG9uIGEgdGltZXN0YW1wIGlzIHNpbXBseSBhIGZsb2F0LiBUaGlzIGR1bW15IGNsYXNzIChzaW1pbGFyIHRvIGxvbmcpLCBhbGxvd3MgdXNlcnMgdG8gd3JhcCBhIGZsb2F0Ci0gICAgaW4gYSBHTFYgc2NyaXB0IHRvIG1ha2Ugc3VyZSB0aGUgdmFsdWUgaXMgc2VyaWFsaXplZCBhcyBhIEdyZW1saW4gdGltZXN0YW1wLgotICAgICIiIgotICAgIHBhc3MKIAogCiBjbGFzcyBTaW5nbGVCeXRlKGludCk6CmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2dyYXBoLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0cnVjdHVyZS9ncmFwaC5weQppbmRleCBjMDkzZDE0Li4yZmY2ZTU2IDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2dyYXBoLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9zdHJ1Y3R1cmUvZ3JhcGgucHkKQEAgLTE5LDEyICsxOSwxMSBAQAogCiBfX2F1dGhvcl9fID0gJ01hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSknCiAKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IEdyYXBoVHJhdmVyc2FsU291cmNlCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBUcmF2ZXJzYWxTdHJhdGVnaWVzCi1pbXBvcnQgd2FybmluZ3MKLQogCiBjbGFzcyBHcmFwaChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi52ZXJ0aWNlcyA9IHt9CisgICAgICAgIHNlbGYuZWRnZXMgPSB7fQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gImdyYXBoW10iCkBAIC0zNiw2ICszNSwyNyBAQAogICAgICAgICBzZWxmLmxhYmVsID0gbGFiZWwKICAgICAgICAgc2VsZi5wcm9wZXJ0aWVzID0gW10gaWYgcHJvcGVydGllcyBpcyBOb25lIGVsc2UgcHJvcGVydGllcwogCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGZvciBwIGluIHNlbGYucHJvcGVydGllczoKKyAgICAgICAgICAgIGlmIHAua2V5ID09IGtleToKKyAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZQorICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIGZvciBwIGluIHNlbGYucHJvcGVydGllczoKKyAgICAgICAgICAgIGlmIHAua2V5ID09IGtleToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2V0KHAua2V5IGZvciBwIGluIHNlbGYucHJvcGVydGllcykKKworICAgIGRlZiB2YWx1ZXMoc2VsZiwgKnByb3BlcnR5X2tleXMpOgorICAgICAgICBpZiBsZW4ocHJvcGVydHlfa2V5cykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBbcC52YWx1ZSBmb3IgcCBpbiBzZWxmLnByb3BlcnRpZXNdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gW3AudmFsdWUgZm9yIHAgaW4gc2VsZi5wcm9wZXJ0aWVzIGlmIHAua2V5IGluIHByb3BlcnR5X2tleXNdCisKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKSBhbmQgc2VsZi5pZCA9PSBvdGhlci5pZAogCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5VjEucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5VjEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YTMzNzkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeVYxLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIxOSArMCwwIEBACi0iIiIKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSIiIgotCi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCBjYWxlbmRhcgotaW1wb3J0IHV1aWQKLWltcG9ydCBtYXRoCi1pbXBvcnQgaW8KLWltcG9ydCBzdHJ1Y3QKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Ci1pbXBvcnQgbG9nZ2luZwotCi1mcm9tIHN0cnVjdCBpbXBvcnQgcGFjaywgdW5wYWNrCi1mcm9tIGFlbnVtIGltcG9ydCBFbnVtCi1mcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKLWZyb20gZ3JlbWxpbl9weXRob24gaW1wb3J0IHN0YXRpY3MKLWZyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgRmxvYXRUeXBlLCBCaWdEZWNpbWFsLCBGdW5jdGlvblR5cGUsIFNob3J0VHlwZSwgSW50VHlwZSwgTG9uZ1R5cGUsIEJpZ0ludFR5cGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVR5cGUsIERpY3RUeXBlLCBMaXN0VHlwZSwgU2V0VHlwZSwgU2luZ2xlQnl0ZSwgQnl0ZUJ1ZmZlclR5cGUsIEdyZW1saW5UeXBlLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmdsZUNoYXIKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IEJhcnJpZXIsIEJpbmRpbmcsIEJ5dGVjb2RlLCBDYXJkaW5hbGl0eSwgQ29sdW1uLCBEaXJlY3Rpb24sIERULCBHVHlwZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVyZ2UsT3BlcmF0b3IsIE9yZGVyLCBQaWNrLCBQb3AsIFAsIFNjb3BlLCBUZXh0UCwgVHJhdmVyc2FsLCBUcmF2ZXJzZXIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYXZlcnNhbFN0cmF0ZWd5LCBUCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuZ3JhcGhfdHJhdmVyc2FsIGltcG9ydCBHcmFwaFRyYXZlcnNhbAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IEdyYXBoLCBFZGdlLCBQcm9wZXJ0eSwgVmVydGV4LCBWZXJ0ZXhQcm9wZXJ0eSwgUGF0aAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8udXRpbCBpbXBvcnQgSGFzaGFibGVEaWN0LCBTeW1ib2xVdGlsCi0KLWxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQotCi0jIFdoZW4gd2UgZmFsbCBiYWNrIHRvIGEgc3VwZXJjbGFzcydzIHNlcmlhbGl6ZXIsIHdlIGl0ZXJhdGUgb3ZlciB0aGlzIG1hcC4KLSMgV2Ugd2FudCB0aGF0IGl0ZXJhdGlvbiBvcmRlciB0byBiZSBjb25zaXN0ZW50LCBzbyB3ZSB1c2UgYW4gT3JkZXJlZERpY3QsCi0jIG5vdCBhIGRpY3QuCi1fc2VyaWFsaXplcnMgPSBPcmRlcmVkRGljdCgpCi1fZGVzZXJpYWxpemVycyA9IHt9Ci0KLQotY2xhc3MgRGF0YVR5cGUoRW51bSk6Ci0gICAgbnVsbCA9IDB4ZmUKLSAgICBpbnQgPSAweDAxCi0gICAgbG9uZyA9IDB4MDIKLSAgICBzdHJpbmcgPSAweDAzCi0gICAgZGF0ZSA9IDB4MDQKLSAgICB0aW1lc3RhbXAgPSAweDA1Ci0gICAgY2xhenogPSAweDA2Ci0gICAgZG91YmxlID0gMHgwNwotICAgIGZsb2F0ID0gMHgwOAotICAgIGxpc3QgPSAweDA5Ci0gICAgbWFwID0gMHgwYQotICAgIHNldCA9IDB4MGIKLSAgICB1dWlkID0gMHgwYwotICAgIGVkZ2UgPSAweDBkCi0gICAgcGF0aCA9IDB4MGUKLSAgICBwcm9wZXJ0eSA9IDB4MGYKLSAgICBncmFwaCA9IDB4MTAgICAgICAgICAgICAgICAgICAjIG5vdCBzdXBwb3J0ZWQgLSBubyBncmFwaCBvYmplY3QgaW4gcHl0aG9uIHlldAotICAgIHZlcnRleCA9IDB4MTEKLSAgICB2ZXJ0ZXhwcm9wZXJ0eSA9IDB4MTIKLSAgICBiYXJyaWVyID0gMHgxMwotICAgIGJpbmRpbmcgPSAweDE0Ci0gICAgYnl0ZWNvZGUgPSAweDE1Ci0gICAgY2FyZGluYWxpdHkgPSAweDE2Ci0gICAgY29sdW1uID0gMHgxNwotICAgIGRpcmVjdGlvbiA9IDB4MTgKLSAgICBvcGVyYXRvciA9IDB4MTkKLSAgICBvcmRlciA9IDB4MWEKLSAgICBwaWNrID0gMHgxYgotICAgIHBvcCA9IDB4MWMKLSAgICBsYW1iZGFfID0gMHgxZAotICAgIHAgPSAweDFlCi0gICAgc2NvcGUgPSAweDFmCi0gICAgdCA9IDB4MjAKLSAgICB0cmF2ZXJzZXIgPSAweDIxCi0gICAgYmlnZGVjaW1hbCA9IDB4MjIKLSAgICBiaWdpbnRlZ2VyID0gMHgyMwotICAgIGJ5dGUgPSAweDI0Ci0gICAgYnl0ZWJ1ZmZlciA9IDB4MjUKLSAgICBzaG9ydCA9IDB4MjYKLSAgICBib29sZWFuID0gMHgyNwotICAgIHRleHRwID0gMHgyOAotICAgIHRyYXZlcnNhbHN0cmF0ZWd5ID0gMHgyOQotICAgIGJ1bGtzZXQgPSAweDJhCi0gICAgdHJlZSA9IDB4MmIgICAgICAgICAgICAgICAgICAgIyBub3Qgc3VwcG9ydGVkIC0gbm8gdHJlZSBvYmplY3QgaW4gUHl0aG9uIHlldAotICAgIG1ldHJpY3MgPSAweDJjCi0gICAgdHJhdmVyc2FsbWV0cmljcyA9IDB4MmQKLSAgICBtZXJnZSA9IDB4MmUKLSAgICBkdCA9IDB4MmYKLSAgICBndHlwZSA9IDB4MzAKLSAgICBjaGFyID0gMHg4MAotICAgIGR1cmF0aW9uID0gMHg4MQotICAgIGluZXRhZGRyZXNzID0gMHg4MiAgICAgICAgICAgICMgdG9kbwotICAgIGluc3RhbnQgPSAweDgzICAgICAgICAgICAgICAgICMgdG9kbwotICAgIGxvY2FsZGF0ZSA9IDB4ODQgICAgICAgICAgICAgICMgdG9kbwotICAgIGxvY2FsZGF0ZXRpbWUgPSAweDg1ICAgICAgICAgICMgdG9kbwotICAgIGxvY2FsdGltZSA9IDB4ODYgICAgICAgICAgICAgICMgdG9kbwotICAgIG1vbnRoZGF5ID0gMHg4NyAgICAgICAgICAgICAgICMgdG9kbwotICAgIG9mZnNldGRhdGV0aW1lID0gMHg4OAotICAgIG9mZnNldHRpbWUgPSAweDg5ICAgICAgICAgICAgICMgdG9kbwotICAgIHBlcmlvZCA9IDB4OGEgICAgICAgICAgICAgICAgICMgdG9kbwotICAgIHllYXIgPSAweDhiICAgICAgICAgICAgICAgICAgICMgdG9kbwotICAgIHllYXJtb250aCA9IDB4OGMgICAgICAgICAgICAgICMgdG9kbwotICAgIHpvbmVkYXRldGltZSA9IDB4OGQgICAgICAgICAgICMgdG9kbwotICAgIHpvbmVvZmZzZXQgPSAweDhlICAgICAgICAgICAgICMgdG9kbwotICAgIGN1c3RvbSA9IDB4MDAgICAgICAgICAgICAgICAgICMgdG9kbwotCi0KLU5VTExfQllURVMgPSBbRGF0YVR5cGUubnVsbC52YWx1ZSwgMHgwMV0KLQotCi1kZWYgX21ha2VfcGFja2VyKGZvcm1hdF9zdHJpbmcpOgotICAgIHBhY2tlciA9IHN0cnVjdC5TdHJ1Y3QoZm9ybWF0X3N0cmluZykKLSAgICBwYWNrID0gcGFja2VyLnBhY2sKLSAgICB1bnBhY2sgPSBsYW1iZGEgczogcGFja2VyLnVucGFjayhzKVswXQotICAgIHJldHVybiBwYWNrLCB1bnBhY2sKLQotCi1pbnQ2NF9wYWNrLCBpbnQ2NF91bnBhY2sgPSBfbWFrZV9wYWNrZXIoJz5xJykKLWludDMyX3BhY2ssIGludDMyX3VucGFjayA9IF9tYWtlX3BhY2tlcignPmknKQotaW50MTZfcGFjaywgaW50MTZfdW5wYWNrID0gX21ha2VfcGFja2VyKCc+aCcpCi1pbnQ4X3BhY2ssIGludDhfdW5wYWNrID0gX21ha2VfcGFja2VyKCc+YicpCi11aW50NjRfcGFjaywgdWludDY0X3VucGFjayA9IF9tYWtlX3BhY2tlcignPlEnKQotdWludDhfcGFjaywgdWludDhfdW5wYWNrID0gX21ha2VfcGFja2VyKCc+QicpCi1mbG9hdF9wYWNrLCBmbG9hdF91bnBhY2sgPSBfbWFrZV9wYWNrZXIoJz5mJykKLWRvdWJsZV9wYWNrLCBkb3VibGVfdW5wYWNrID0gX21ha2VfcGFja2VyKCc+ZCcpCi0KLQotY2xhc3MgR3JhcGhCaW5hcnlUeXBlVHlwZSh0eXBlKToKLSAgICBkZWYgX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkY3QpOgotICAgICAgICBjbHMgPSBzdXBlcihHcmFwaEJpbmFyeVR5cGVUeXBlLCBtY3MpLl9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgZGN0KQotICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCdfJyk6Ci0gICAgICAgICAgICBpZiBjbHMucHl0aG9uX3R5cGU6Ci0gICAgICAgICAgICAgICAgX3NlcmlhbGl6ZXJzW2Nscy5weXRob25fdHlwZV0gPSBjbHMKLSAgICAgICAgICAgIGlmIGNscy5ncmFwaGJpbmFyeV90eXBlOgotICAgICAgICAgICAgICAgIF9kZXNlcmlhbGl6ZXJzW2Nscy5ncmFwaGJpbmFyeV90eXBlXSA9IGNscwotICAgICAgICByZXR1cm4gY2xzCi0KLQotY2xhc3MgR3JhcGhCaW5hcnlXcml0ZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VyaWFsaXplcl9tYXA9Tm9uZSk6Ci0gICAgICAgIHNlbGYuc2VyaWFsaXplcnMgPSBfc2VyaWFsaXplcnMuY29weSgpCi0gICAgICAgIGlmIHNlcmlhbGl6ZXJfbWFwOgotICAgICAgICAgICAgc2VsZi5zZXJpYWxpemVycy51cGRhdGUoc2VyaWFsaXplcl9tYXApCi0KLSAgICBkZWYgd3JpdGVfb2JqZWN0KHNlbGYsIG9iamVjdF9kYXRhKToKLSAgICAgICAgcmV0dXJuIHNlbGYudG9fZGljdChvYmplY3RfZGF0YSkKLQotICAgIGRlZiB0b19kaWN0KHNlbGYsIG9iaiwgdG9fZXh0ZW5kPU5vbmUpOgotICAgICAgICBpZiB0b19leHRlbmQgaXMgTm9uZToKLSAgICAgICAgICAgIHRvX2V4dGVuZCA9IGJ5dGVhcnJheSgpCi0KLSAgICAgICAgaWYgb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKE5VTExfQllURVMpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ID0gdHlwZShvYmopCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXJpYWxpemVyc1t0XS5kaWN0aWZ5KG9iaiwgc2VsZiwgdG9fZXh0ZW5kKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBmb3Iga2V5LCBzZXJpYWxpemVyIGluIHNlbGYuc2VyaWFsaXplcnMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwga2V5KToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZGljdGlmeShvYmosIHNlbGYsIHRvX2V4dGVuZCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6Ci0gICAgICAgICAgICByZXR1cm4gZGljdCgoc2VsZi50b19kaWN0KGssIHRvX2V4dGVuZCksIHNlbGYudG9fZGljdCh2LCB0b19leHRlbmQpKSBmb3IgaywgdiBpbiBvYmouaXRlbXMoKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgc2V0KToKLSAgICAgICAgICAgIHJldHVybiBzZXQoW3NlbGYudG9fZGljdChvLCB0b19leHRlbmQpIGZvciBvIGluIG9ial0pCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgotICAgICAgICAgICAgcmV0dXJuIFtzZWxmLnRvX2RpY3QobywgdG9fZXh0ZW5kKSBmb3IgbyBpbiBvYmpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gb2JqCi0KLQotY2xhc3MgR3JhcGhCaW5hcnlSZWFkZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzZXJpYWxpemVyX21hcD1Ob25lKToKLSAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzID0gX2Rlc2VyaWFsaXplcnMuY29weSgpCi0gICAgICAgIGlmIGRlc2VyaWFsaXplcl9tYXA6Ci0gICAgICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnMudXBkYXRlKGRlc2VyaWFsaXplcl9tYXApCi0KLSAgICBkZWYgcmVhZF9vYmplY3Qoc2VsZiwgYik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoYiwgYnl0ZWFycmF5KToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnRvX29iamVjdChpby5CeXRlc0lPKGIpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UoYiwgaW8uQnVmZmVyZWRJT0Jhc2UpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9fb2JqZWN0KGIpCi0KLSAgICBkZWYgdG9fb2JqZWN0KHNlbGYsIGJ1ZmYsIGRhdGFfdHlwZT1Ob25lLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgaWYgZGF0YV90eXBlIGlzIE5vbmU6Ci0gICAgICAgICAgICBidCA9IHVpbnQ4X3VucGFjayhidWZmLnJlYWQoMSkpCi0gICAgICAgICAgICBpZiBidCA9PSBEYXRhVHlwZS5udWxsLnZhbHVlOgotICAgICAgICAgICAgICAgIGlmIG51bGxhYmxlOgotICAgICAgICAgICAgICAgICAgICBidWZmLnJlYWQoMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVzZXJpYWxpemVyc1tEYXRhVHlwZShidCldLm9iamVjdGlmeShidWZmLCBzZWxmLCBudWxsYWJsZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmRlc2VyaWFsaXplcnNbZGF0YV90eXBlXS5vYmplY3RpZnkoYnVmZiwgc2VsZiwgbnVsbGFibGUpCi0KLQotY2xhc3MgX0dyYXBoQmluYXJ5VHlwZUlPKG9iamVjdCwgbWV0YWNsYXNzPUdyYXBoQmluYXJ5VHlwZVR5cGUpOgotICAgIHB5dGhvbl90eXBlID0gTm9uZQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBOb25lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgcHJlZml4X2J5dGVzKGNscywgZ3JhcGhiaW5fdHlwZSwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUsIHRvX2V4dGVuZD1Ob25lKToKLSAgICAgICAgaWYgdG9fZXh0ZW5kIGlzIE5vbmU6Ci0gICAgICAgICAgICB0b19leHRlbmQgPSBieXRlYXJyYXkoKQotCi0gICAgICAgIGlmIG5vdCBhc192YWx1ZToKLSAgICAgICAgICAgIHRvX2V4dGVuZCArPSB1aW50OF9wYWNrKGdyYXBoYmluX3R5cGUudmFsdWUpCi0KLSAgICAgICAgaWYgbnVsbGFibGU6Ci0gICAgICAgICAgICB0b19leHRlbmQgKz0gaW50OF9wYWNrKDApCi0KLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHJlYWRfaW50KGNscywgYnVmZik6Ci0gICAgICAgIHJldHVybiBpbnQzMl91bnBhY2soYnVmZi5yZWFkKDQpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGlzX251bGwoY2xzLCBidWZmLCByZWFkZXIsIGVsc2Vfb3B0LCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIE5vbmUgaWYgbnVsbGFibGUgYW5kIGJ1ZmYucmVhZCgxKVswXSA9PSAweDAxIGVsc2UgZWxzZV9vcHQoYnVmZiwgcmVhZGVyKQotCi0gICAgZGVmIGRpY3RpZnkoc2VsZiwgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotICAgIGRlZiBvYmplY3RpZnkoc2VsZiwgZCwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0gICAgICAgIAotCi1jbGFzcyBMb25nSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gTG9uZ1R5cGUKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUubG9uZwotICAgIGJ5dGVfZm9ybWF0X3BhY2sgPSBpbnQ2NF9wYWNrCi0gICAgYnl0ZV9mb3JtYXRfdW5wYWNrID0gaW50NjRfdW5wYWNrCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgaWYgb2JqIDwgLTkyMjMzNzIwMzY4NTQ3NzU4MDggb3Igb2JqID4gOTIyMzM3MjAzNjg1NDc3NTgwNzoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVmFsdWUgdG9vIGJpZywgcGxlYXNlIHVzZSBiaWdpbnQgR3JlbWxpbiB0eXBlIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChjbHMuYnl0ZV9mb3JtYXRfcGFjayhvYmopKQotICAgICAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBpbnQ2NF91bnBhY2soYnVmZi5yZWFkKDgpKSwgbnVsbGFibGUpCi0KLQotY2xhc3MgSW50SU8oTG9uZ0lPKToKLQotICAgIHB5dGhvbl90eXBlID0gSW50VHlwZQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5pbnQKLSAgICBieXRlX2Zvcm1hdF9wYWNrID0gaW50MzJfcGFjawotICAgIGJ5dGVfZm9ybWF0X3VucGFjayA9IGludDMyX3VucGFjawotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBjbHMucmVhZF9pbnQoYiksIG51bGxhYmxlKQotCi0KLWNsYXNzIFNob3J0SU8oTG9uZ0lPKToKLQotICAgIHB5dGhvbl90eXBlID0gU2hvcnRUeXBlCi0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnNob3J0Ci0gICAgYnl0ZV9mb3JtYXRfcGFjayA9IGludDE2X3BhY2sKLSAgICBieXRlX2Zvcm1hdF91bnBhY2sgPSBpbnQxNl91bnBhY2sKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogaW50MTZfdW5wYWNrKGJ1ZmYucmVhZCgyKSksIG51bGxhYmxlKQotCi0KLWNsYXNzIEJpZ0ludElPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IEJpZ0ludFR5cGUKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYmlnaW50ZWdlcgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHdyaXRlX2JpZ2ludChjbHMsIG9iaiwgdG9fZXh0ZW5kKToKLSAgICAgICAgbGVuZ3RoID0gKG9iai5iaXRfbGVuZ3RoKCkgKyA3KSAvLyA4Ci0gICAgICAgIGlmIG9iaiA+IDA6Ci0gICAgICAgICAgICBiID0gb2JqLnRvX2J5dGVzKGxlbmd0aCwgYnl0ZW9yZGVyPSdiaWcnKQotICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbmd0aCArIDEpKQotICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQ4X3BhY2soMCkpCi0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGhhbmRsZSBuZWdhdGl2ZQotICAgICAgICAgICAgYiA9IG9iai50b19ieXRlcyhsZW5ndGgsIGJ5dGVvcmRlcj0nYmlnJywgc2lnbmVkPVRydWUpCi0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGludDMyX3BhY2sobGVuZ3RoKSkKLSAgICAgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoYikKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICByZXR1cm4gY2xzLndyaXRlX2JpZ2ludChvYmosIHRvX2V4dGVuZCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiByZWFkX2JpZ2ludChjbHMsIGJ1ZmYpOgotICAgICAgICBzaXplID0gY2xzLnJlYWRfaW50KGJ1ZmYpCi0gICAgICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhidWZmLnJlYWQoc2l6ZSksIGJ5dGVvcmRlcj0nYmlnJywgc2lnbmVkPVRydWUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBjbHMucmVhZF9iaWdpbnQoYiksIG51bGxhYmxlKQotCi0KLWNsYXNzIERhdGVJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotCi0gICAgcHl0aG9uX3R5cGUgPSBkYXRldGltZS5kYXRldGltZQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5kYXRlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGltZXN0YW1wX3NlY29uZHMgPSBjYWxlbmRhci50aW1lZ20ob2JqLnV0Y3RpbWV0dXBsZSgpKQotICAgICAgICAgICAgcHRzID0gdGltZXN0YW1wX3NlY29uZHMgKiAxZTMgKyBnZXRhdHRyKG9iaiwgJ21pY3Jvc2Vjb25kJywgMCkgLyAxZTMKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcHRzID0gY2FsZW5kYXIudGltZWdtKG9iai50aW1ldHVwbGUoKSkgKiAxZTMKLQotICAgICAgICB0cyA9IGludChyb3VuZChwdHMpKQotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQ2NF9wYWNrKHRzKSkKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYiwgcjogZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcChpbnQ2NF91bnBhY2soYi5yZWFkKDgpKSAvIDEwMDAuMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZSkKLQotCi1jbGFzcyBPZmZzZXREYXRlVGltZUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IGRhdGV0aW1lLmRhdGV0aW1lCi0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLm9mZnNldGRhdGV0aW1lCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgaWYgb2JqLnR6aW5mbyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIERhdGVJTy5kaWN0aWZ5KG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlLCBudWxsYWJsZSkKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIEludElPLmRpY3RpZnkob2JqLnllYXIsIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLSAgICAgICAgQnl0ZUlPLmRpY3RpZnkob2JqLm1vbnRoLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgIEJ5dGVJTy5kaWN0aWZ5KG9iai5kYXksIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLSAgICAgICAgIyBjb25zdHJ1Y3QgdGltZSBvZiBkYXkgaW4gbmFub3NlY29uZHMKLSAgICAgICAgaCA9IG9iai50aW1lKCkuaG91cgotICAgICAgICBtID0gb2JqLnRpbWUoKS5taW51dGUKLSAgICAgICAgcyA9IG9iai50aW1lKCkuc2Vjb25kCi0gICAgICAgIG1zID0gb2JqLnRpbWUoKS5taWNyb3NlY29uZAotICAgICAgICBucyA9IHJvdW5kKChoKjYwKjYwKjFlOSkgKyAobSo2MCoxZTkpICsgKHMqMWU5KSArIChtcyoxZTMpKQotICAgICAgICBMb25nSU8uZGljdGlmeShucywgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICBvcyA9IHJvdW5kKG9iai51dGNvZmZzZXQoKS50b3RhbF9zZWNvbmRzKCkpCi0gICAgICAgIEludElPLmRpY3RpZnkob3MsIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9kdCwgbnVsbGFibGUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX3JlYWRfZHQoY2xzLCBiLCByKToKLSAgICAgICAgeWVhciA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmludCwgRmFsc2UpCi0gICAgICAgIG1vbnRoID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUuYnl0ZSwgRmFsc2UpCi0gICAgICAgIGRheSA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmJ5dGUsIEZhbHNlKQotICAgICAgICBucyA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmxvbmcsIEZhbHNlKQotICAgICAgICBvZmZzZXQgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5pbnQsIEZhbHNlKQotICAgICAgICB0eiA9IGRhdGV0aW1lLnRpbWV6b25lKHRpbWVkZWx0YShzZWNvbmRzPW9mZnNldCkpCi0gICAgICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZSh5ZWFyLCBtb250aCwgZGF5LCB0emluZm89dHopICsgdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1ucy8xMDAwKQotCi0jIEJhc2VkIG9uIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoaXMgY2xhc3MgbXVzdCBhbHdheXMgYmUgZGVjbGFyZWQgYmVmb3JlIEZsb2F0SU8uCi0jIFNlZW1zIHByZXR0eSBmcmFnaWxlIGZvciBmdXR1cmUgbWFpbnRhaW5lcnMuIE1heWJlIGxvb2sgaW50byB0aGlzLgotY2xhc3MgVGltZXN0YW1wSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IHN0YXRpY3MudGltZXN0YW1wCi0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnRpbWVzdGFtcAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgICMgSmF2YSB0aW1lc3RhbXAgZXhwZWN0cyBtaWxsaXNlY29uZHMgaW50ZWdlciAtIEhhdmUgdG8gdXNlIGludCBiZWNhdXNlIG9mIGxlZ2FjeSBQeXRob24KLSAgICAgICAgdHMgPSBpbnQocm91bmQob2JqICogMTAwMCkpCi0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGludDY0X3BhY2sodHMpKQotICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgIyBQeXRob24gdGltZXN0YW1wIGV4cGVjdHMgc2Vjb25kcwotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogc3RhdGljcy50aW1lc3RhbXAoaW50NjRfdW5wYWNrKGIucmVhZCg4KSkgLyAxMDAwLjApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGUpCi0gICAgCi0KLWRlZiBfbG9uZ19iaXRzX3RvX2RvdWJsZShiaXRzKToKLSAgICByZXR1cm4gdW5wYWNrKCdkJywgcGFjaygnUScsIGJpdHMpKVswXQotCi0KLU5BTiA9IF9sb25nX2JpdHNfdG9fZG91YmxlKDB4N2ZmODAwMDAwMDAwMDAwMCkKLVBPU0lUSVZFX0lORklOSVRZID0gX2xvbmdfYml0c190b19kb3VibGUoMHg3ZmYwMDAwMDAwMDAwMDAwKQotTkVHQVRJVkVfSU5GSU5JVFkgPSBfbG9uZ19iaXRzX3RvX2RvdWJsZSgweEZmZjAwMDAwMDAwMDAwMDApCi0KLQotY2xhc3MgRmxvYXRJTyhMb25nSU8pOgotCi0gICAgcHl0aG9uX3R5cGUgPSBGbG9hdFR5cGUKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuZmxvYXQKLSAgICBncmFwaGJpbmFyeV9iYXNlX3R5cGUgPSBEYXRhVHlwZS5mbG9hdAotICAgIGJ5dGVfZm9ybWF0X3BhY2sgPSBmbG9hdF9wYWNrCi0gICAgYnl0ZV9mb3JtYXRfdW5wYWNrID0gZmxvYXRfdW5wYWNrCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgaWYgbWF0aC5pc25hbihvYmopOgotICAgICAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGNscy5ieXRlX2Zvcm1hdF9wYWNrKE5BTikpCi0gICAgICAgIGVsaWYgbWF0aC5pc2luZihvYmopIGFuZCBvYmogPiAwOgotICAgICAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGNscy5ieXRlX2Zvcm1hdF9wYWNrKFBPU0lUSVZFX0lORklOSVRZKSkKLSAgICAgICAgZWxpZiBtYXRoLmlzaW5mKG9iaikgYW5kIG9iaiA8IDA6Ci0gICAgICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLSAgICAgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoY2xzLmJ5dGVfZm9ybWF0X3BhY2soTkVHQVRJVkVfSU5GSU5JVFkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGNscy5ieXRlX2Zvcm1hdF9wYWNrKG9iaikpCi0KLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBmbG9hdF91bnBhY2soYi5yZWFkKDQpKSwgbnVsbGFibGUpCi0KLQotY2xhc3MgRG91YmxlSU8oRmxvYXRJTyk6Ci0gICAgIiIiCi0gICAgRmxvYXRzIGJhc2ljYWxseSBqdXN0IGZhbGwgdGhyb3VnaCB0byBkb3VibGUgc2VyaWFsaXphdGlvbi4KLSAgICAiIiIKLQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5kb3VibGUKLSAgICBncmFwaGJpbmFyeV9iYXNlX3R5cGUgPSBEYXRhVHlwZS5kb3VibGUKLSAgICBieXRlX2Zvcm1hdF9wYWNrID0gZG91YmxlX3BhY2sKLSAgICBieXRlX2Zvcm1hdF91bnBhY2sgPSBkb3VibGVfdW5wYWNrCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgbGFtYmRhIGIsIHI6IGRvdWJsZV91bnBhY2soYi5yZWFkKDgpKSwgbnVsbGFibGUpCi0KLQotY2xhc3MgQmlnRGVjaW1hbElPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IEJpZ0RlY2ltYWwKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYmlnZGVjaW1hbAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGludDMyX3BhY2sob2JqLnNjYWxlKSkKLSAgICAgICAgcmV0dXJuIEJpZ0ludElPLndyaXRlX2JpZ2ludChvYmoudW5zY2FsZWRfdmFsdWUsIHRvX2V4dGVuZCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfcmVhZChjbHMsIGJ1ZmYpOgotICAgICAgICBzY2FsZSA9IGludDMyX3VucGFjayhidWZmLnJlYWQoNCkpCi0gICAgICAgIHVuc2NhbGVkX3ZhbHVlID0gQmlnSW50SU8ucmVhZF9iaWdpbnQoYnVmZikKLSAgICAgICAgcmV0dXJuIEJpZ0RlY2ltYWwoc2NhbGUsIHVuc2NhbGVkX3ZhbHVlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9RmFsc2UpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogY2xzLl9yZWFkKGIpLCBudWxsYWJsZSkKLQotCi1jbGFzcyBDaGFySU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFNpbmdsZUNoYXIKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuY2hhcgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICB0b19leHRlbmQuZXh0ZW5kKG9iai5lbmNvZGUoInV0Zi04IikpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfY2hhciwgbnVsbGFibGUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX3JlYWRfY2hhcihjbHMsIGIsIHIpOgotICAgICAgICBtYXhfYnl0ZXMgPSA0Ci0gICAgICAgIHggPSBiLnJlYWQoMSkKLSAgICAgICAgd2hpbGUgbWF4X2J5dGVzID4gMDoKLSAgICAgICAgICAgIG1heF9ieXRlcyA9IG1heF9ieXRlcyAtIDEKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4geC5kZWNvZGUoInV0Zi04IikKLSAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6Ci0gICAgICAgICAgICAgICAgeCArPSBiLnJlYWQoMSkKLQotCi1jbGFzcyBTdHJpbmdJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotCi0gICAgcHl0aG9uX3R5cGUgPSBzdHIKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuc3RyaW5nCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHN0cl9ieXRlcyA9IG9iai5lbmNvZGUoInV0Zi04IikKLSAgICAgICAgdG9fZXh0ZW5kICs9IGludDMyX3BhY2sobGVuKHN0cl9ieXRlcykpCi0gICAgICAgIHRvX2V4dGVuZCArPSBzdHJfYnl0ZXMKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBiLnJlYWQoY2xzLnJlYWRfaW50KGIpKS5kZWNvZGUoInV0Zi04IiksIG51bGxhYmxlKQotCi0KLWNsYXNzIExpc3RJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotCi0gICAgcHl0aG9uX3R5cGUgPSBsaXN0Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmxpc3QKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihvYmopKSkKLSAgICAgICAgZm9yIGl0ZW0gaW4gb2JqOgotICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoaXRlbSwgdG9fZXh0ZW5kKQotCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfbGlzdCwgbnVsbGFibGUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX3JlYWRfbGlzdChjbHMsIGIsIHIpOgotICAgICAgICBzaXplID0gY2xzLnJlYWRfaW50KGIpCi0gICAgICAgIHRoZV9saXN0ID0gW10KLSAgICAgICAgd2hpbGUgc2l6ZSA+IDA6Ci0gICAgICAgICAgICB0aGVfbGlzdC5hcHBlbmQoci5yZWFkX29iamVjdChiKSkKLSAgICAgICAgICAgIHNpemUgPSBzaXplIC0gMQotCi0gICAgICAgIHJldHVybiB0aGVfbGlzdAotCi0KLWNsYXNzIFNldERlc2VyaWFsaXplcihMaXN0SU8pOgotCi0gICAgcHl0aG9uX3R5cGUgPSBTZXRUeXBlCi0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnNldAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHRoZV9saXN0ID0gTGlzdElPLm9iamVjdGlmeShidWZmLCByZWFkZXIsIG51bGxhYmxlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2V0KHRoZV9saXN0KQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgbG9nLndhcm5pbmcoIkNvZXJjaW5nIFNldCB0byBsaXN0IGFzIGl0IGNvbnRhaW5zIHVuaGFzaGFibGUgZWxlbWVudHMgKGUuZy4gZGljdCwgbGlzdCkuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgVElOS0VSUE9QLTMyMzIgZm9yIG1vcmUgZGV0YWlscy4iKQotICAgICAgICAgICAgcmV0dXJuIHRoZV9saXN0Ci0KLQotY2xhc3MgTWFwSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gRGljdFR5cGUKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUubWFwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0KLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihvYmopKSkKLSAgICAgICAgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCk6Ci0gICAgICAgICAgICB3cml0ZXIudG9fZGljdChrLCB0b19leHRlbmQpCi0gICAgICAgICAgICB3cml0ZXIudG9fZGljdCh2LCB0b19leHRlbmQpCi0KLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9tYXAsIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX21hcChjbHMsIGIsIHIpOgotICAgICAgICBzaXplID0gY2xzLnJlYWRfaW50KGIpCi0gICAgICAgIHRoZV9kaWN0ID0ge30KLSAgICAgICAgd2hpbGUgc2l6ZSA+IDA6Ci0gICAgICAgICAgICBrID0gSGFzaGFibGVEaWN0Lm9mKHIucmVhZF9vYmplY3QoYikpCi0gICAgICAgICAgICB2ID0gci5yZWFkX29iamVjdChiKQotICAgICAgICAgICAgdGhlX2RpY3Rba10gPSB2Ci0gICAgICAgICAgICBzaXplID0gc2l6ZSAtIDEKLQotICAgICAgICByZXR1cm4gdGhlX2RpY3QKLQotCi1jbGFzcyBVdWlkSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gdXVpZC5VVUlECi0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnV1aWQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChvYmouYnl0ZXMpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogdXVpZC5VVUlEKGJ5dGVzPWIucmVhZCgxNikpLCBudWxsYWJsZSkKLQotCi1jbGFzcyBFZGdlSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gRWRnZQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5lZGdlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0KLSAgICAgICAgd3JpdGVyLnRvX2RpY3Qob2JqLmlkLCB0b19leHRlbmQpCi0gICAgICAgIFN0cmluZ0lPLmRpY3RpZnkob2JqLmxhYmVsLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgIHdyaXRlci50b19kaWN0KG9iai5pblYuaWQsIHRvX2V4dGVuZCkKLSAgICAgICAgU3RyaW5nSU8uZGljdGlmeShvYmouaW5WLmxhYmVsLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgIHdyaXRlci50b19kaWN0KG9iai5vdXRWLmlkLCB0b19leHRlbmQpCi0gICAgICAgIFN0cmluZ0lPLmRpY3RpZnkob2JqLm91dFYubGFiZWwsIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChOVUxMX0JZVEVTKQotICAgICAgICB0b19leHRlbmQuZXh0ZW5kKE5VTExfQllURVMpCi0KLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9lZGdlLCBudWxsYWJsZSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfcmVhZF9lZGdlKGNscywgYiwgcik6Ci0gICAgICAgIGVkZ2VpZCA9IHIucmVhZF9vYmplY3QoYikKLSAgICAgICAgZWRnZWxibCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLnN0cmluZywgRmFsc2UpCi0gICAgICAgIGludiA9IFZlcnRleChyLnJlYWRfb2JqZWN0KGIpLCByLnRvX29iamVjdChiLCBEYXRhVHlwZS5zdHJpbmcsIEZhbHNlKSkKLSAgICAgICAgb3V0diA9IFZlcnRleChyLnJlYWRfb2JqZWN0KGIpLCByLnRvX29iamVjdChiLCBEYXRhVHlwZS5zdHJpbmcsIEZhbHNlKSkKLSAgICAgICAgYi5yZWFkKDIpCi0gICAgICAgIHByb3BzID0gci5yZWFkX29iamVjdChiKQotICAgICAgICAjIG51bGwgcHJvcGVydGllcyBhcmUgcmV0dXJuZWQgYXMgZW1wdHkgbGlzdHMKLSAgICAgICAgcHJvcGVydGllcyA9IFtdIGlmIHByb3BzIGlzIE5vbmUgZWxzZSBwcm9wcwotICAgICAgICBlZGdlID0gRWRnZShlZGdlaWQsIG91dHYsIGVkZ2VsYmwsIGludiwgcHJvcGVydGllcykKLSAgICAgICAgcmV0dXJuIGVkZ2UKLQotCi1jbGFzcyBQYXRoSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gUGF0aAotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5wYXRoCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHdyaXRlci50b19kaWN0KG9iai5sYWJlbHMsIHRvX2V4dGVuZCkKLSAgICAgICAgd3JpdGVyLnRvX2RpY3Qob2JqLm9iamVjdHMsIHRvX2V4dGVuZCkKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBQYXRoKHIucmVhZF9vYmplY3QoYiksIHIucmVhZF9vYmplY3QoYikpLCBudWxsYWJsZSkKLQotCi1jbGFzcyBQcm9wZXJ0eUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IFByb3BlcnR5Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnByb3BlcnR5Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIFN0cmluZ0lPLmRpY3RpZnkob2JqLmtleSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICB3cml0ZXIudG9fZGljdChvYmoudmFsdWUsIHRvX2V4dGVuZCkKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChOVUxMX0JZVEVTKQotICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgY2xzLl9yZWFkX3Byb3BlcnR5LCBudWxsYWJsZSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfcmVhZF9wcm9wZXJ0eShjbHMsIGIsIHIpOgotICAgICAgICBwID0gUHJvcGVydHkoci50b19vYmplY3QoYiwgRGF0YVR5cGUuc3RyaW5nLCBGYWxzZSksIHIucmVhZF9vYmplY3QoYiksIE5vbmUpCi0gICAgICAgIGIucmVhZCgyKQotICAgICAgICByZXR1cm4gcAotCi0KLWNsYXNzIFRpbmtlckdyYXBoSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gR3JhcGgKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuZ3JhcGgKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiVGlua2VyR3JhcGggc2VyaWFsaXphdGlvbiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBncmVtbGluLXB5dGhvbiIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYiwgcmVhZGVyLCBhc192YWx1ZT1GYWxzZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJUaW5rZXJHcmFwaCBkZXNlcmlhbGl6YXRpb24gaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgZ3JlbWxpbi1weXRob24iKQotCi0KLWNsYXNzIFZlcnRleElPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IFZlcnRleAotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS52ZXJ0ZXgKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLSAgICAgICAgd3JpdGVyLnRvX2RpY3Qob2JqLmlkLCB0b19leHRlbmQpCi0gICAgICAgIFN0cmluZ0lPLmRpY3RpZnkob2JqLmxhYmVsLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoTlVMTF9CWVRFUykKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF92ZXJ0ZXgsIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX3ZlcnRleChjbHMsIGIsIHIpOgotICAgICAgICB2ZXJ0ZXhfaWQgPSByLnJlYWRfb2JqZWN0KGIpCi0gICAgICAgIHZlcnRleF9sYWJlbCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLnN0cmluZywgRmFsc2UpCi0gICAgICAgIHByb3BzID0gci5yZWFkX29iamVjdChiKQotICAgICAgICAjIG51bGwgcHJvcGVydGllcyBhcmUgcmV0dXJuZWQgYXMgZW1wdHkgbGlzdHMKLSAgICAgICAgcHJvcGVydGllcyA9IFtdIGlmIHByb3BzIGlzIE5vbmUgZWxzZSBwcm9wcwotICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXgodmVydGV4X2lkLCB2ZXJ0ZXhfbGFiZWwsIHByb3BlcnRpZXMpCi0gICAgICAgIHJldHVybiB2ZXJ0ZXgKLQotCi1jbGFzcyBWZXJ0ZXhQcm9wZXJ0eUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IFZlcnRleFByb3BlcnR5Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnZlcnRleHByb3BlcnR5Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHdyaXRlci50b19kaWN0KG9iai5pZCwgdG9fZXh0ZW5kKQotICAgICAgICBTdHJpbmdJTy5kaWN0aWZ5KG9iai5sYWJlbCwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICB3cml0ZXIudG9fZGljdChvYmoudmFsdWUsIHRvX2V4dGVuZCkKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChOVUxMX0JZVEVTKQotICAgICAgICB0b19leHRlbmQuZXh0ZW5kKE5VTExfQllURVMpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfdmVydGV4cHJvcGVydHksIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX3ZlcnRleHByb3BlcnR5KGNscywgYiwgcik6Ci0gICAgICAgIHZwID0gVmVydGV4UHJvcGVydHkoci5yZWFkX29iamVjdChiKSwgci50b19vYmplY3QoYiwgRGF0YVR5cGUuc3RyaW5nLCBGYWxzZSksIHIucmVhZF9vYmplY3QoYiksIE5vbmUpCi0gICAgICAgIGIucmVhZCgyKQotICAgICAgICBwcm9wZXJ0aWVzID0gci5yZWFkX29iamVjdChiKQotICAgICAgICAjIG51bGwgcHJvcGVydGllcyBhcmUgcmV0dXJuZWQgYXMgZW1wdHkgbGlzdHMKLSAgICAgICAgdnAucHJvcGVydGllcyA9IFtdIGlmIHByb3BlcnRpZXMgaXMgTm9uZSBlbHNlIHByb3BlcnRpZXMKLSAgICAgICAgcmV0dXJuIHZwCi0KLQotY2xhc3MgX0VudW1JTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICBTdHJpbmdJTy5kaWN0aWZ5KFN5bWJvbFV0aWwudG9fY2FtZWxfY2FzZShzdHIob2JqLm5hbWUpKSwgd3JpdGVyLCB0b19leHRlbmQpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfZW51bXZhbCwgbnVsbGFibGUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX3JlYWRfZW51bXZhbChjbHMsIGIsIHIpOgotICAgICAgICBlbnVtX25hbWUgPSByLnRvX29iamVjdChiKQotICAgICAgICByZXR1cm4gY2xzLnB5dGhvbl90eXBlW1N5bWJvbFV0aWwudG9fc25ha2VfY2FzZShlbnVtX25hbWUpXQotCi0KLWNsYXNzIEJhcnJpZXJJTyhfRW51bUlPKToKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYmFycmllcgotICAgIHB5dGhvbl90eXBlID0gQmFycmllcgotCi0KLWNsYXNzIENhcmRpbmFsaXR5SU8oX0VudW1JTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmNhcmRpbmFsaXR5Ci0gICAgcHl0aG9uX3R5cGUgPSBDYXJkaW5hbGl0eQotCi0KLWNsYXNzIENvbHVtbklPKF9FbnVtSU8pOgotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5jb2x1bW4KLSAgICBweXRob25fdHlwZSA9IENvbHVtbgotCi0KLWNsYXNzIERpcmVjdGlvbklPKF9FbnVtSU8pOgotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5kaXJlY3Rpb24KLSAgICBweXRob25fdHlwZSA9IERpcmVjdGlvbgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX2VudW12YWwoY2xzLCBiLCByKToKLSAgICAgICAgIyBEaXJlY3Rpb24gbmVlZHMgdG8gcmV0YWluIGFsbCBDQVBTLiBub3RlIHRoYXQgdG9fL2Zyb21fIGFyZSByZWFsbHkganVzdCBhbGlhc2VzIG9mIElOL09VVAotICAgICAgICAjIHNvIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIGluIHNlcmlhbGl6YXRpb24KLSAgICAgICAgZW51bV9uYW1lID0gci50b19vYmplY3QoYikKLSAgICAgICAgcmV0dXJuIGNscy5weXRob25fdHlwZVtlbnVtX25hbWVdCi0KLQotY2xhc3MgT3BlcmF0b3JJTyhfRW51bUlPKToKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUub3BlcmF0b3IKLSAgICBweXRob25fdHlwZSA9IE9wZXJhdG9yCi0KLQotY2xhc3MgT3JkZXJJTyhfRW51bUlPKToKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUub3JkZXIKLSAgICBweXRob25fdHlwZSA9IE9yZGVyCi0KLQotY2xhc3MgUGlja0lPKF9FbnVtSU8pOgotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5waWNrCi0gICAgcHl0aG9uX3R5cGUgPSBQaWNrCi0KLQotY2xhc3MgUG9wSU8oX0VudW1JTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnBvcAotICAgIHB5dGhvbl90eXBlID0gUG9wCi0KLQotY2xhc3MgQmluZGluZ0lPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBweXRob25fdHlwZSA9IEJpbmRpbmcKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYmluZGluZwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICBTdHJpbmdJTy5kaWN0aWZ5KG9iai5rZXksIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLSAgICAgICAgd3JpdGVyLnRvX2RpY3Qob2JqLnZhbHVlLCB0b19leHRlbmQpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogQmluZGluZyhyLnRvX29iamVjdChiLCBEYXRhVHlwZS5zdHJpbmcsIEZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRfb2JqZWN0KGIpKSwgbnVsbGFibGUpCi0KLQotY2xhc3MgQnl0ZWNvZGVJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gQnl0ZWNvZGUKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYnl0ZWNvZGUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLSAgICAgICAgYmMgPSBvYmouYnl0ZWNvZGUgaWYgaXNpbnN0YW5jZShvYmosIFRyYXZlcnNhbCkgZWxzZSBvYmoKLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihiYy5zdGVwX2luc3RydWN0aW9ucykpKQotICAgICAgICBmb3IgaW5zdCBpbiBiYy5zdGVwX2luc3RydWN0aW9uczoKLSAgICAgICAgICAgIGluc3RfbmFtZSwgaW5zdF9hcmdzID0gaW5zdFswXSwgaW5zdFsxOl0gaWYgbGVuKGluc3QpID4gMSBlbHNlIFtdCi0gICAgICAgICAgICBTdHJpbmdJTy5kaWN0aWZ5KGluc3RfbmFtZSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihpbnN0X2FyZ3MpKSkKLSAgICAgICAgICAgIGZvciBhcmcgaW4gaW5zdF9hcmdzOgotICAgICAgICAgICAgICAgIHdyaXRlci50b19kaWN0KGFyZywgdG9fZXh0ZW5kKQotCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50MzJfcGFjayhsZW4oYmMuc291cmNlX2luc3RydWN0aW9ucykpKQotICAgICAgICBmb3IgaW5zdCBpbiBiYy5zb3VyY2VfaW5zdHJ1Y3Rpb25zOgotICAgICAgICAgICAgaW5zdF9uYW1lLCBpbnN0X2FyZ3MgPSBpbnN0WzBdLCBpbnN0WzE6XSBpZiBsZW4oaW5zdCkgPiAxIGVsc2UgW10KLSAgICAgICAgICAgIFN0cmluZ0lPLmRpY3RpZnkoaW5zdF9uYW1lLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGludDMyX3BhY2sobGVuKGluc3RfYXJncykpKQotICAgICAgICAgICAgZm9yIGFyZyBpbiBpbnN0X2FyZ3M6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmcsIFR5cGVUeXBlKToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoR3JlbWxpblR5cGUoYXJnKCkuZnFjbiksIHRvX2V4dGVuZCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB3cml0ZXIudG9fZGljdChhcmcsIHRvX2V4dGVuZCkKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9ieXRlY29kZSwgbnVsbGFibGUpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX3JlYWRfYnl0ZWNvZGUoY2xzLCBiLCByKToKLSAgICAgICAgYnl0ZWNvZGUgPSBCeXRlY29kZSgpCi0KLSAgICAgICAgc3RlcF9jb3VudCA9IGNscy5yZWFkX2ludChiKQotICAgICAgICBpeCA9IDAKLSAgICAgICAgd2hpbGUgaXggPCBzdGVwX2NvdW50OgotICAgICAgICAgICAgaW5zdCA9IFtyLnRvX29iamVjdChiLCBEYXRhVHlwZS5zdHJpbmcsIEZhbHNlKV0KLSAgICAgICAgICAgIGluc3RfY3QgPSBjbHMucmVhZF9pbnQoYikKLSAgICAgICAgICAgIGl5ID0gMAotICAgICAgICAgICAgd2hpbGUgaXkgPCBpbnN0X2N0OgotICAgICAgICAgICAgICAgIGluc3QuYXBwZW5kKHIucmVhZF9vYmplY3QoYikpCi0gICAgICAgICAgICAgICAgaXkgKz0gMQotICAgICAgICAgICAgYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMuYXBwZW5kKGluc3QpCi0gICAgICAgICAgICBpeCArPSAxCi0KLSAgICAgICAgc291cmNlX2NvdW50ID0gY2xzLnJlYWRfaW50KGIpCi0gICAgICAgIGl4ID0gMAotICAgICAgICB3aGlsZSBpeCA8IHNvdXJjZV9jb3VudDoKLSAgICAgICAgICAgIGluc3QgPSBbci50b19vYmplY3QoYiwgRGF0YVR5cGUuc3RyaW5nLCBGYWxzZSldCi0gICAgICAgICAgICBpbnN0X2N0ID0gY2xzLnJlYWRfaW50KGIpCi0gICAgICAgICAgICBpeSA9IDAKLSAgICAgICAgICAgIHdoaWxlIGl5IDwgaW5zdF9jdDoKLSAgICAgICAgICAgICAgICBpbnN0LmFwcGVuZChyLnJlYWRfb2JqZWN0KGIpKQotICAgICAgICAgICAgICAgIGl5ICs9IDEKLSAgICAgICAgICAgIGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMuYXBwZW5kKGluc3QpCi0gICAgICAgICAgICBpeCArPSAxCi0KLSAgICAgICAgcmV0dXJuIGJ5dGVjb2RlCi0KLQotY2xhc3MgVHJhdmVyc2FsSU8oQnl0ZWNvZGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBHcmFwaFRyYXZlcnNhbAotCi0KLWNsYXNzIExhbWJkYVNlcmlhbGl6ZXIoX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIHB5dGhvbl90eXBlID0gRnVuY3Rpb25UeXBlCi0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmxhbWJkYV8KLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLQotICAgICAgICBsYW1iZGFfcmVzdWx0ID0gb2JqKCkKLSAgICAgICAgc2NyaXB0ID0gbGFtYmRhX3Jlc3VsdCBpZiBpc2luc3RhbmNlKGxhbWJkYV9yZXN1bHQsIHN0cikgZWxzZSBsYW1iZGFfcmVzdWx0WzBdCi0gICAgICAgIGxhbmd1YWdlID0gc3RhdGljcy5kZWZhdWx0X2xhbWJkYV9sYW5ndWFnZSBpZiBpc2luc3RhbmNlKGxhbWJkYV9yZXN1bHQsIHN0cikgZWxzZSBsYW1iZGFfcmVzdWx0WzFdCi0KLSAgICAgICAgU3RyaW5nSU8uZGljdGlmeShsYW5ndWFnZSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotCi0gICAgICAgIHNjcmlwdF9jbGVhbmVkID0gc2NyaXB0Ci0gICAgICAgIHNjcmlwdF9hcmdzID0gLTEKLQotICAgICAgICBpZiBsYW5ndWFnZSA9PSAiZ3JlbWxpbi1ncm9vdnkiIGFuZCAiLT4iIGluIHNjcmlwdDoKLSAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgYWRkZWQgcGFyYW1ldGVycyB0byB0aGUgZ3Jvb3Z5IGNsb3N1cmUgdGhlbiB3ZSBjYW4gZWFzaWx5IGRldGVjdCBvbmUgb3IgdHdvCi0gICAgICAgICAgICAjIGFyZyBsYW1iZGFzIC0gaWYgd2UgY2FuJ3QgZGV0ZWN0IDEgb3IgMiB0aGVuIHdlIGp1c3QgZ28gd2l0aCAidW5rbm93biIKLSAgICAgICAgICAgIGFyZ3MgPSBzY3JpcHRbMDpzY3JpcHQuZmluZCgiLT4iKV0KLSAgICAgICAgICAgIHNjcmlwdF9hcmdzID0gMiBpZiAiLCIgaW4gYXJncyBlbHNlIDEKLQotICAgICAgICBTdHJpbmdJTy5kaWN0aWZ5KHNjcmlwdF9jbGVhbmVkLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50MzJfcGFjayhzY3JpcHRfYXJncykpCi0KLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0KLWNsYXNzIFBTZXJpYWxpemVyKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnAKLSAgICBweXRob25fdHlwZSA9IFAKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgotICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKLQotICAgICAgICBTdHJpbmdJTy5kaWN0aWZ5KG9iai5vcGVyYXRvciwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotCi0gICAgICAgIGFyZ3MgPSBbXQotICAgICAgICBpZiBvYmoub3RoZXIgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLnZhbHVlLCBMaXN0VHlwZSk6Ci0gICAgICAgICAgICAgICAgYXJncyA9IG9iai52YWx1ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChvYmoudmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZChvYmoudmFsdWUpCi0gICAgICAgICAgICBhcmdzLmFwcGVuZChvYmoub3RoZXIpCi0KLSAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihhcmdzKSkpCi0gICAgICAgIGZvciBhIGluIGFyZ3M6Ci0gICAgICAgICAgICB3cml0ZXIudG9fZGljdChhLCB0b19leHRlbmQpCi0KLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0KLWNsYXNzIERUSU8oX0VudW1JTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmR0Ci0gICAgcHl0aG9uX3R5cGUgPSBEVAotCi0KLWNsYXNzIE1lcmdlSU8oX0VudW1JTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLm1lcmdlCi0gICAgcHl0aG9uX3R5cGUgPSBNZXJnZQotCi0KLWNsYXNzIFNjb3BlSU8oX0VudW1JTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnNjb3BlCi0gICAgcHl0aG9uX3R5cGUgPSBTY29wZQotCi0KLWNsYXNzIFRJTyhfRW51bUlPKToKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUudAotICAgIHB5dGhvbl90eXBlID0gVAotCi0KLWNsYXNzIEdUWVBFSU8oX0VudW1JTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmd0eXBlCi0gICAgcHl0aG9uX3R5cGUgPSBHVHlwZQotCi0KLWNsYXNzIFRyYXZlcnNlcklPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnRyYXZlcnNlcgotICAgIHB5dGhvbl90eXBlID0gVHJhdmVyc2VyCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50NjRfcGFjayhvYmouYnVsaykpCi0gICAgICAgIHdyaXRlci50b19kaWN0KG9iai5vYmplY3QsIHRvX2V4dGVuZCkKLSAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF90cmF2ZXJzZXIsIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX3RyYXZlcnNlcihjbHMsIGIsIHIpOgotICAgICAgICBidWxrID0gaW50NjRfdW5wYWNrKGIucmVhZCg4KSkKLSAgICAgICAgb2JqID0gci5yZWFkX29iamVjdChiKQotICAgICAgICByZXR1cm4gVHJhdmVyc2VyKG9iaiwgYnVsaz1idWxrKQotCi0KLWNsYXNzIEJ5dGVJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gU2luZ2xlQnl0ZQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5ieXRlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50OF9wYWNrKG9iaikpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGIsIHI6IGludC5fX25ld19fKFNpbmdsZUJ5dGUsIGludDhfdW5wYWNrKGIucmVhZCgxKSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGUpCi0KLQotY2xhc3MgQnl0ZUJ1ZmZlcklPKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBCeXRlQnVmZmVyVHlwZQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5ieXRlYnVmZmVyCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50MzJfcGFjayhsZW4ob2JqKSkpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQob2JqKQotICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgY2xzLl9yZWFkX2J5dGVidWZmZXIsIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX2J5dGVidWZmZXIoY2xzLCBiLCByKToKLSAgICAgICAgc2l6ZSA9IGNscy5yZWFkX2ludChiKQotICAgICAgICByZXR1cm4gQnl0ZUJ1ZmZlclR5cGUoYi5yZWFkKHNpemUpKQotCi0KLWNsYXNzIEJvb2xlYW5JTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gYm9vbAotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5ib29sZWFuCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50OF9wYWNrKDB4MDEgaWYgb2JqIGVsc2UgMHgwMCkpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGIsIHI6IFRydWUgaWYgaW50OF91bnBhY2soYi5yZWFkKDEpKSA9PSAweDAxIGVsc2UgRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsYWJsZSkKLQotCi1jbGFzcyBUZXh0UFNlcmlhbGl6ZXIoX0dyYXBoQmluYXJ5VHlwZUlPKToKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUudGV4dHAKLSAgICBweXRob25fdHlwZSA9IFRleHRQCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0KLSAgICAgICAgU3RyaW5nSU8uZGljdGlmeShvYmoub3BlcmF0b3IsIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLQotICAgICAgICBhcmdzID0gW10KLSAgICAgICAgaWYgb2JqLm90aGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iai52YWx1ZSwgTGlzdFR5cGUpOgotICAgICAgICAgICAgICAgIGFyZ3MgPSBvYmoudmFsdWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob2JqLnZhbHVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXJncy5hcHBlbmQob2JqLnZhbHVlKQotICAgICAgICAgICAgYXJncy5hcHBlbmQob2JqLm90aGVyKQotCi0gICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50MzJfcGFjayhsZW4oYXJncykpKQotICAgICAgICBmb3IgYSBpbiBhcmdzOgotICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoYSwgdG9fZXh0ZW5kKQotCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotCi1jbGFzcyBCdWxrU2V0RGVzZXJpYWxpemVyKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0KLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYnVsa3NldAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9idWxrc2V0LCBudWxsYWJsZSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfcmVhZF9idWxrc2V0KGNscywgYiwgcik6Ci0gICAgICAgIHNpemUgPSBjbHMucmVhZF9pbnQoYikKLSAgICAgICAgdGhlX2xpc3QgPSBbXQotICAgICAgICB3aGlsZSBzaXplID4gMDoKLSAgICAgICAgICAgIGl0bSA9IHIucmVhZF9vYmplY3QoYikKLSAgICAgICAgICAgIGJ1bGsgPSBpbnQ2NF91bnBhY2soYi5yZWFkKDgpKQotICAgICAgICAgICAgZm9yIHkgaW4gcmFuZ2UoYnVsayk6Ci0gICAgICAgICAgICAgICAgdGhlX2xpc3QuYXBwZW5kKGl0bSkgICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemUgPSBzaXplIC0gMQotCi0gICAgICAgIHJldHVybiB0aGVfbGlzdAotCi0KLWNsYXNzIE1ldHJpY3NEZXNlcmlhbGl6ZXIoX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5tZXRyaWNzCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgY2xzLl9yZWFkX21ldHJpY3MsIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX21ldHJpY3MoY2xzLCBiLCByKToKLSAgICAgICAgbWV0cmljaWQgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5zdHJpbmcsIEZhbHNlKQotICAgICAgICBuYW1lID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUuc3RyaW5nLCBGYWxzZSkKLSAgICAgICAgZHVyYXRpb24gPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5sb25nLCBudWxsYWJsZT1GYWxzZSkKLSAgICAgICAgY291bnRzID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubWFwLCBudWxsYWJsZT1GYWxzZSkKLSAgICAgICAgYW5ub3RhdGlvbnMgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5tYXAsIG51bGxhYmxlPUZhbHNlKQotICAgICAgICBtZXRyaWNzID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubGlzdCwgbnVsbGFibGU9RmFsc2UpCi0KLSAgICAgICAgcmV0dXJuIHsiaWQiOiBtZXRyaWNpZCwKLSAgICAgICAgICAgICAgICAibmFtZSI6IG5hbWUsCi0gICAgICAgICAgICAgICAgImR1ciI6IGR1cmF0aW9uLAotICAgICAgICAgICAgICAgICJjb3VudHMiOiBjb3VudHMsCi0gICAgICAgICAgICAgICAgImFubm90YXRpb25zIjogYW5ub3RhdGlvbnMsCi0gICAgICAgICAgICAgICAgIm1ldHJpY3MiOiBtZXRyaWNzfQotCi0KLWNsYXNzIFRyYXZlcnNhbE1ldHJpY3NEZXNlcmlhbGl6ZXIoX0dyYXBoQmluYXJ5VHlwZUlPKToKLQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS50cmF2ZXJzYWxtZXRyaWNzCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgY2xzLl9yZWFkX3RyYXZlcnNhbG1ldHJpY3MsIG51bGxhYmxlKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9yZWFkX3RyYXZlcnNhbG1ldHJpY3MoY2xzLCBiLCByKToKLSAgICAgICAgZHVyYXRpb24gPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5sb25nLCBudWxsYWJsZT1GYWxzZSkKLSAgICAgICAgbWV0cmljcyA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmxpc3QsIG51bGxhYmxlPUZhbHNlKQotCi0gICAgICAgIHJldHVybiB7ImR1ciI6IGR1cmF0aW9uLAotICAgICAgICAgICAgICAgICJtZXRyaWNzIjogbWV0cmljc30KLQotCi1jbGFzcyBDbGFzc1NlcmlhbGl6ZXIoX0dyYXBoQmluYXJ5VHlwZUlPKToKLSAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuY2xhenoKLSAgICBweXRob25fdHlwZSA9IEdyZW1saW5UeXBlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKLSAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCi0gICAgICAgIFN0cmluZ0lPLmRpY3RpZnkob2JqLmdyZW1saW5fdHlwZSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCi0KLQotY2xhc3MgVHJhdmVyc2FsU3RyYXRlZ3lTZXJpYWxpemVyKF9HcmFwaEJpbmFyeVR5cGVJTyk6Ci0gICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnRyYXZlcnNhbHN0cmF0ZWd5Ci0gICAgcHl0aG9uX3R5cGUgPSBUcmF2ZXJzYWxTdHJhdGVneQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotCi0gICAgICAgIENsYXNzU2VyaWFsaXplci5kaWN0aWZ5KEdyZW1saW5UeXBlKG9iai5mcWNuKSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICBjb25mID0ge2s6IGNscy5fY29udmVydCh2KSBmb3IgaywgdiBpbiBvYmouY29uZmlndXJhdGlvbi5pdGVtcygpfQotICAgICAgICBNYXBJTy5kaWN0aWZ5KGNvbmYsIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKLQotICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2NvbnZlcnQoY2xzLCB2KToKLSAgICAgICAgcmV0dXJuIHYuYnl0ZWNvZGUgaWYgaXNpbnN0YW5jZSh2LCBUcmF2ZXJzYWwpIGVsc2UgdgotCi0KLWNsYXNzIER1cmF0aW9uSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IHRpbWVkZWx0YQotICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5kdXJhdGlvbgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6Ci0gICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQotICAgICAgICBMb25nSU8uZGljdGlmeShvYmouc2Vjb25kcywgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQotICAgICAgICBJbnRJTy5kaWN0aWZ5KG9iai5taWNyb3NlY29uZHMgKiAxMDAwLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCi0gICAgICAgIHJldHVybiB0b19leHRlbmQKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgotICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfZHVyYXRpb24sIG51bGxhYmxlKQotICAgIAotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfcmVhZF9kdXJhdGlvbihjbHMsIGIsIHIpOgotICAgICAgICBzZWNvbmRzID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubG9uZywgRmFsc2UpCi0gICAgICAgIG5hbm9zID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUuaW50LCBGYWxzZSkKLSAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShzZWNvbmRzPXNlY29uZHMsIG1pY3Jvc2Vjb25kcz1uYW5vcyAvIDEwMDApCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5VjQucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5VjQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxZDcxNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnlWNC5weQpAQCAtMCwwICsxLDkyMyBAQAorIiIiCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisiIiIKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0IGlvCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hdGgKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB1dWlkCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YSwgdGltZXpvbmUKK2Zyb20gc3RydWN0IGltcG9ydCBwYWNrLCB1bnBhY2sKKworZnJvbSBhZW51bSBpbXBvcnQgRW51bQorZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgRGlyZWN0aW9uLCBULCBNZXJnZSwgR1R5cGUKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgRmxvYXRUeXBlLCBCaWdEZWNpbWFsLCBTaG9ydFR5cGUsIEludFR5cGUsIExvbmdUeXBlLCBCaWdJbnRUeXBlLCBcCisgICAgRGljdFR5cGUsIFNldFR5cGUsIFNpbmdsZUJ5dGUsIFNpbmdsZUNoYXIKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBHcmFwaCwgRWRnZSwgUHJvcGVydHksIFZlcnRleCwgVmVydGV4UHJvcGVydHksIFBhdGgKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLnV0aWwgaW1wb3J0IEhhc2hhYmxlRGljdCwgU3ltYm9sVXRpbCwgTWFya2VyCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisjIFdoZW4gd2UgZmFsbCBiYWNrIHRvIGEgc3VwZXJjbGFzcydzIHNlcmlhbGl6ZXIsIHdlIGl0ZXJhdGUgb3ZlciB0aGlzIG1hcC4KKyMgV2Ugd2FudCB0aGF0IGl0ZXJhdGlvbiBvcmRlciB0byBiZSBjb25zaXN0ZW50LCBzbyB3ZSB1c2UgYW4gT3JkZXJlZERpY3QsCisjIG5vdCBhIGRpY3QuCitfc2VyaWFsaXplcnMgPSBPcmRlcmVkRGljdCgpCitfZGVzZXJpYWxpemVycyA9IHt9CisKKworY2xhc3MgRGF0YVR5cGUoRW51bSk6CisgICAgbnVsbCA9IDB4ZmUKKyAgICBpbnQgPSAweDAxCisgICAgbG9uZyA9IDB4MDIKKyAgICBzdHJpbmcgPSAweDAzCisgICAgZGF0ZXRpbWUgPSAweDA0CisgICAgZG91YmxlID0gMHgwNworICAgIGZsb2F0ID0gMHgwOAorICAgIGxpc3QgPSAweDA5CisgICAgbWFwID0gMHgwYQorICAgIHNldCA9IDB4MGIKKyAgICB1dWlkID0gMHgwYworICAgIGVkZ2UgPSAweDBkCisgICAgcGF0aCA9IDB4MGUKKyAgICBwcm9wZXJ0eSA9IDB4MGYKKyAgICBncmFwaCA9IDB4MTAgICAgICAgICAgICAgICAgICAjIG5vdCBzdXBwb3J0ZWQgLSBubyBncmFwaCBvYmplY3QgaW4gcHl0aG9uIHlldAorICAgIHZlcnRleCA9IDB4MTEKKyAgICB2ZXJ0ZXhwcm9wZXJ0eSA9IDB4MTIKKyAgICBkaXJlY3Rpb24gPSAweDE4CisgICAgdCA9IDB4MjAKKyAgICBtZXJnZSA9IDB4MmUKKyAgICBiaWdkZWNpbWFsID0gMHgyMgorICAgIGJpZ2ludGVnZXIgPSAweDIzCisgICAgYnl0ZSA9IDB4MjQKKyAgICBiaW5hcnkgPSAweDI1CisgICAgc2hvcnQgPSAweDI2CisgICAgYm9vbGVhbiA9IDB4MjcKKyAgICB0cmVlID0gMHgyYiAgICAgICAgICAgICAgICAgICAjIG5vdCBzdXBwb3J0ZWQgLSBubyB0cmVlIG9iamVjdCBpbiBQeXRob24geWV0CisgICAgZ3R5cGUgPSAweDMwCisgICAgY2hhciA9IDB4ODAKKyAgICBkdXJhdGlvbiA9IDB4ODEKKyAgICBtYXJrZXIgPSAweGZkCisgICAgY3VzdG9tID0gMHgwMCAgICAgICAgICAgICAgICAgIyB0b2RvCisKKworTlVMTF9CWVRFUyA9IFtEYXRhVHlwZS5udWxsLnZhbHVlLCAweDAxXQorCisKK2RlZiBfbWFrZV9wYWNrZXIoZm9ybWF0X3N0cmluZyk6CisgICAgcGFja2VyID0gc3RydWN0LlN0cnVjdChmb3JtYXRfc3RyaW5nKQorICAgIHBhY2sgPSBwYWNrZXIucGFjaworICAgIHVucGFjayA9IGxhbWJkYSBzOiBwYWNrZXIudW5wYWNrKHMpWzBdCisgICAgcmV0dXJuIHBhY2ssIHVucGFjaworCisKK2ludDY0X3BhY2ssIGludDY0X3VucGFjayA9IF9tYWtlX3BhY2tlcignPnEnKQoraW50MzJfcGFjaywgaW50MzJfdW5wYWNrID0gX21ha2VfcGFja2VyKCc+aScpCitpbnQxNl9wYWNrLCBpbnQxNl91bnBhY2sgPSBfbWFrZV9wYWNrZXIoJz5oJykKK2ludDhfcGFjaywgaW50OF91bnBhY2sgPSBfbWFrZV9wYWNrZXIoJz5iJykKK3VpbnQ2NF9wYWNrLCB1aW50NjRfdW5wYWNrID0gX21ha2VfcGFja2VyKCc+UScpCit1aW50OF9wYWNrLCB1aW50OF91bnBhY2sgPSBfbWFrZV9wYWNrZXIoJz5CJykKK2Zsb2F0X3BhY2ssIGZsb2F0X3VucGFjayA9IF9tYWtlX3BhY2tlcignPmYnKQorZG91YmxlX3BhY2ssIGRvdWJsZV91bnBhY2sgPSBfbWFrZV9wYWNrZXIoJz5kJykKKworCitjbGFzcyBHcmFwaEJpbmFyeVR5cGVUeXBlKHR5cGUpOgorICAgIGRlZiBfX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRjdCk6CisgICAgICAgIGNscyA9IHN1cGVyKEdyYXBoQmluYXJ5VHlwZVR5cGUsIG1jcykuX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkY3QpCisgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgICAgIGlmIGNscy5weXRob25fdHlwZToKKyAgICAgICAgICAgICAgICBfc2VyaWFsaXplcnNbY2xzLnB5dGhvbl90eXBlXSA9IGNscworICAgICAgICAgICAgaWYgY2xzLmdyYXBoYmluYXJ5X3R5cGU6CisgICAgICAgICAgICAgICAgX2Rlc2VyaWFsaXplcnNbY2xzLmdyYXBoYmluYXJ5X3R5cGVdID0gY2xzCisgICAgICAgIHJldHVybiBjbHMKKworCitjbGFzcyBHcmFwaEJpbmFyeVdyaXRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJpYWxpemVyX21hcD1Ob25lKToKKyAgICAgICAgc2VsZi5zZXJpYWxpemVycyA9IF9zZXJpYWxpemVycy5jb3B5KCkKKyAgICAgICAgaWYgc2VyaWFsaXplcl9tYXA6CisgICAgICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVwZGF0ZShzZXJpYWxpemVyX21hcCkKKworICAgIGRlZiB3cml0ZV9vYmplY3Qoc2VsZiwgb2JqZWN0X2RhdGEpOgorICAgICAgICByZXR1cm4gc2VsZi50b19kaWN0KG9iamVjdF9kYXRhKQorCisgICAgZGVmIHRvX2RpY3Qoc2VsZiwgb2JqLCB0b19leHRlbmQ9Tm9uZSk6CisgICAgICAgIGlmIHRvX2V4dGVuZCBpcyBOb25lOgorICAgICAgICAgICAgdG9fZXh0ZW5kID0gYnl0ZWFycmF5KCkKKworICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoTlVMTF9CWVRFUykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQgPSB0eXBlKG9iaikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNlcmlhbGl6ZXJzW3RdLmRpY3RpZnkob2JqLCBzZWxmLCB0b19leHRlbmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGZvciBrZXksIHNlcmlhbGl6ZXIgaW4gc2VsZi5zZXJpYWxpemVycy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBrZXkpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplci5kaWN0aWZ5KG9iaiwgc2VsZiwgdG9fZXh0ZW5kKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KToKKyAgICAgICAgICAgIHJldHVybiBkaWN0KChzZWxmLnRvX2RpY3QoaywgdG9fZXh0ZW5kKSwgc2VsZi50b19kaWN0KHYsIHRvX2V4dGVuZCkpIGZvciBrLCB2IGluIG9iai5pdGVtcygpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBzZXQpOgorICAgICAgICAgICAgcmV0dXJuIHNldChbc2VsZi50b19kaWN0KG8sIHRvX2V4dGVuZCkgZm9yIG8gaW4gb2JqXSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgbGlzdCk6CisgICAgICAgICAgICByZXR1cm4gW3NlbGYudG9fZGljdChvLCB0b19leHRlbmQpIGZvciBvIGluIG9ial0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvYmoKKworCitjbGFzcyBHcmFwaEJpbmFyeVJlYWRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXNlcmlhbGl6ZXJfbWFwPU5vbmUpOgorICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnMgPSBfZGVzZXJpYWxpemVycy5jb3B5KCkKKyAgICAgICAgaWYgZGVzZXJpYWxpemVyX21hcDoKKyAgICAgICAgICAgIHNlbGYuZGVzZXJpYWxpemVycy51cGRhdGUoZGVzZXJpYWxpemVyX21hcCkKKworICAgIGRlZiByZWFkX29iamVjdChzZWxmLCBiKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShiLCBieXRlYXJyYXkpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9fb2JqZWN0KGlvLkJ5dGVzSU8oYikpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShiLCBpby5CdWZmZXJlZElPQmFzZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50b19vYmplY3QoYikKKworICAgIGRlZiB0b19vYmplY3Qoc2VsZiwgYnVmZiwgZGF0YV90eXBlPU5vbmUsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBpZiBkYXRhX3R5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIGJ0ID0gdWludDhfdW5wYWNrKGJ1ZmYucmVhZCgxKSkKKyAgICAgICAgICAgIGlmIGJ0ID09IERhdGFUeXBlLm51bGwudmFsdWU6CisgICAgICAgICAgICAgICAgaWYgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgICAgIGJ1ZmYucmVhZCgxKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZXNlcmlhbGl6ZXJzW0RhdGFUeXBlKGJ0KV0ub2JqZWN0aWZ5KGJ1ZmYsIHNlbGYsIG51bGxhYmxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVzZXJpYWxpemVyc1tkYXRhX3R5cGVdLm9iamVjdGlmeShidWZmLCBzZWxmLCBudWxsYWJsZSkKKworCitjbGFzcyBfR3JhcGhCaW5hcnlUeXBlSU8ob2JqZWN0LCBtZXRhY2xhc3M9R3JhcGhCaW5hcnlUeXBlVHlwZSk6CisgICAgcHl0aG9uX3R5cGUgPSBOb25lCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwcmVmaXhfYnl0ZXMoY2xzLCBncmFwaGJpbl90eXBlLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSwgdG9fZXh0ZW5kPU5vbmUsIG9yZGVyZWQ9RmFsc2UpOgorICAgICAgICBpZiB0b19leHRlbmQgaXMgTm9uZToKKyAgICAgICAgICAgIHRvX2V4dGVuZCA9IGJ5dGVhcnJheSgpCisKKyAgICAgICAgaWYgbm90IGFzX3ZhbHVlOgorICAgICAgICAgICAgdG9fZXh0ZW5kICs9IHVpbnQ4X3BhY2soZ3JhcGhiaW5fdHlwZS52YWx1ZSkKKworICAgICAgICBpZiBudWxsYWJsZToKKyAgICAgICAgICAgIGlmIG9yZGVyZWQ6CisgICAgICAgICAgICAgICAgdG9fZXh0ZW5kICs9IGludDhfcGFjaygyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0b19leHRlbmQgKz0gaW50OF9wYWNrKDApCisKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJlYWRfaW50KGNscywgYnVmZik6CisgICAgICAgIHJldHVybiBpbnQzMl91bnBhY2soYnVmZi5yZWFkKDQpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX251bGwoY2xzLCBidWZmLCByZWFkZXIsIGVsc2Vfb3B0LCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIE5vbmUgaWYgbnVsbGFibGUgYW5kIGJ1ZmYucmVhZCgxKVswXSA9PSAweDAxIGVsc2UgZWxzZV9vcHQoYnVmZiwgcmVhZGVyKQorCisgICAgZGVmIGRpY3RpZnkoc2VsZiwgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBvYmplY3RpZnkoc2VsZiwgZCwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKworY2xhc3MgTG9uZ0lPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisKKyAgICBweXRob25fdHlwZSA9IExvbmdUeXBlCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmxvbmcKKyAgICBieXRlX2Zvcm1hdF9wYWNrID0gaW50NjRfcGFjaworICAgIGJ5dGVfZm9ybWF0X3VucGFjayA9IGludDY0X3VucGFjaworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGlmIG9iaiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4IG9yIG9iaiA+IDkyMjMzNzIwMzY4NTQ3NzU4MDc6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlZhbHVlIHRvbyBiaWcsIHBsZWFzZSB1c2UgYmlnaW50IEdyZW1saW4gdHlwZSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoY2xzLmJ5dGVfZm9ybWF0X3BhY2sob2JqKSkKKyAgICAgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogaW50NjRfdW5wYWNrKGJ1ZmYucmVhZCg4KSksIG51bGxhYmxlKQorCisKK2NsYXNzIEludElPKExvbmdJTyk6CisKKyAgICBweXRob25fdHlwZSA9IEludFR5cGUKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuaW50CisgICAgYnl0ZV9mb3JtYXRfcGFjayA9IGludDMyX3BhY2sKKyAgICBieXRlX2Zvcm1hdF91bnBhY2sgPSBpbnQzMl91bnBhY2sKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogY2xzLnJlYWRfaW50KGIpLCBudWxsYWJsZSkKKworCitjbGFzcyBTaG9ydElPKExvbmdJTyk6CisKKyAgICBweXRob25fdHlwZSA9IFNob3J0VHlwZQorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5zaG9ydAorICAgIGJ5dGVfZm9ybWF0X3BhY2sgPSBpbnQxNl9wYWNrCisgICAgYnl0ZV9mb3JtYXRfdW5wYWNrID0gaW50MTZfdW5wYWNrCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgbGFtYmRhIGIsIHI6IGludDE2X3VucGFjayhidWZmLnJlYWQoMikpLCBudWxsYWJsZSkKKworCitjbGFzcyBCaWdJbnRJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBCaWdJbnRUeXBlCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmJpZ2ludGVnZXIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB3cml0ZV9iaWdpbnQoY2xzLCBvYmosIHRvX2V4dGVuZCk6CisgICAgICAgIGxlbmd0aCA9IChvYmouYml0X2xlbmd0aCgpICsgNykgLy8gOAorICAgICAgICBpZiBvYmogPiAwOgorICAgICAgICAgICAgYiA9IG9iai50b19ieXRlcyhsZW5ndGgsIGJ5dGVvcmRlcj0nYmlnJykKKyAgICAgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50MzJfcGFjayhsZW5ndGggKyAxKSkKKyAgICAgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoaW50OF9wYWNrKDApKQorICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBoYW5kbGUgbmVnYXRpdmUKKyAgICAgICAgICAgIGIgPSBvYmoudG9fYnl0ZXMobGVuZ3RoLCBieXRlb3JkZXI9J2JpZycsIHNpZ25lZD1UcnVlKQorICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbmd0aCkpCisgICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGIpCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgcmV0dXJuIGNscy53cml0ZV9iaWdpbnQob2JqLCB0b19leHRlbmQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcmVhZF9iaWdpbnQoY2xzLCBidWZmKToKKyAgICAgICAgc2l6ZSA9IGNscy5yZWFkX2ludChidWZmKQorICAgICAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoYnVmZi5yZWFkKHNpemUpLCBieXRlb3JkZXI9J2JpZycsIHNpZ25lZD1UcnVlKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogY2xzLnJlYWRfYmlnaW50KGIpLCBudWxsYWJsZSkKKworCitkZWYgX2xvbmdfYml0c190b19kb3VibGUoYml0cyk6CisgICAgcmV0dXJuIHVucGFjaygnZCcsIHBhY2soJ1EnLCBiaXRzKSlbMF0KKworCitOQU4gPSBfbG9uZ19iaXRzX3RvX2RvdWJsZSgweDdmZjgwMDAwMDAwMDAwMDApCitQT1NJVElWRV9JTkZJTklUWSA9IF9sb25nX2JpdHNfdG9fZG91YmxlKDB4N2ZmMDAwMDAwMDAwMDAwMCkKK05FR0FUSVZFX0lORklOSVRZID0gX2xvbmdfYml0c190b19kb3VibGUoMHhGZmYwMDAwMDAwMDAwMDAwKQorCisKK2NsYXNzIEZsb2F0SU8oTG9uZ0lPKToKKworICAgIHB5dGhvbl90eXBlID0gRmxvYXRUeXBlCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmZsb2F0CisgICAgZ3JhcGhiaW5hcnlfYmFzZV90eXBlID0gRGF0YVR5cGUuZmxvYXQKKyAgICBieXRlX2Zvcm1hdF9wYWNrID0gZmxvYXRfcGFjaworICAgIGJ5dGVfZm9ybWF0X3VucGFjayA9IGZsb2F0X3VucGFjaworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGlmIG1hdGguaXNuYW4ob2JqKToKKyAgICAgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChjbHMuYnl0ZV9mb3JtYXRfcGFjayhOQU4pKQorICAgICAgICBlbGlmIG1hdGguaXNpbmYob2JqKSBhbmQgb2JqID4gMDoKKyAgICAgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChjbHMuYnl0ZV9mb3JtYXRfcGFjayhQT1NJVElWRV9JTkZJTklUWSkpCisgICAgICAgIGVsaWYgbWF0aC5pc2luZihvYmopIGFuZCBvYmogPCAwOgorICAgICAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCisgICAgICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGNscy5ieXRlX2Zvcm1hdF9wYWNrKE5FR0FUSVZFX0lORklOSVRZKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChjbHMuYnl0ZV9mb3JtYXRfcGFjayhvYmopKQorCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBsYW1iZGEgYiwgcjogZmxvYXRfdW5wYWNrKGIucmVhZCg0KSksIG51bGxhYmxlKQorCisKK2NsYXNzIERvdWJsZUlPKEZsb2F0SU8pOgorICAgICIiIgorICAgIEZsb2F0cyBiYXNpY2FsbHkganVzdCBmYWxsIHRocm91Z2ggdG8gZG91YmxlIHNlcmlhbGl6YXRpb24uCisgICAgIiIiCisKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuZG91YmxlCisgICAgZ3JhcGhiaW5hcnlfYmFzZV90eXBlID0gRGF0YVR5cGUuZG91YmxlCisgICAgYnl0ZV9mb3JtYXRfcGFjayA9IGRvdWJsZV9wYWNrCisgICAgYnl0ZV9mb3JtYXRfdW5wYWNrID0gZG91YmxlX3VucGFjaworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBkb3VibGVfdW5wYWNrKGIucmVhZCg4KSksIG51bGxhYmxlKQorCisKK2NsYXNzIEJpZ0RlY2ltYWxJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBCaWdEZWNpbWFsCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmJpZ2RlY2ltYWwKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKG9iai5zY2FsZSkpCisgICAgICAgIHJldHVybiBCaWdJbnRJTy53cml0ZV9iaWdpbnQob2JqLnVuc2NhbGVkX3ZhbHVlLCB0b19leHRlbmQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWQoY2xzLCBidWZmKToKKyAgICAgICAgc2NhbGUgPSBpbnQzMl91bnBhY2soYnVmZi5yZWFkKDQpKQorICAgICAgICB1bnNjYWxlZF92YWx1ZSA9IEJpZ0ludElPLnJlYWRfYmlnaW50KGJ1ZmYpCisgICAgICAgIHJldHVybiBCaWdEZWNpbWFsKHNjYWxlLCB1bnNjYWxlZF92YWx1ZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgbGFtYmRhIGIsIHI6IGNscy5fcmVhZChiKSwgbnVsbGFibGUpCisKKworY2xhc3MgRGF0ZVRpbWVJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBkYXRldGltZQorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5kYXRldGltZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGlmIG9iai50emluZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJUaW1lem9uZSBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCB3aGVuIGNvbnN0cnVjdGluZyBkYXRldGltZSIpCisgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICBJbnRJTy5kaWN0aWZ5KG9iai55ZWFyLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIEJ5dGVJTy5kaWN0aWZ5KG9iai5tb250aCwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQorICAgICAgICBCeXRlSU8uZGljdGlmeShvYmouZGF5LCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgICMgY29uc3RydWN0IHRpbWUgb2YgZGF5IGluIG5hbm9zZWNvbmRzCisgICAgICAgIGggPSBvYmoudGltZSgpLmhvdXIKKyAgICAgICAgbSA9IG9iai50aW1lKCkubWludXRlCisgICAgICAgIHMgPSBvYmoudGltZSgpLnNlY29uZAorICAgICAgICBtcyA9IG9iai50aW1lKCkubWljcm9zZWNvbmQKKyAgICAgICAgbnMgPSByb3VuZCgoaCo2MCo2MCoxZTkpICsgKG0qNjAqMWU5KSArIChzKjFlOSkgKyAobXMqMWUzKSkKKyAgICAgICAgTG9uZ0lPLmRpY3RpZnkobnMsIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKKyAgICAgICAgb3MgPSByb3VuZChvYmoudXRjb2Zmc2V0KCkudG90YWxfc2Vjb25kcygpKQorICAgICAgICBJbnRJTy5kaWN0aWZ5KG9zLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfZHQsIG51bGxhYmxlKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9yZWFkX2R0KGNscywgYiwgcik6CisgICAgICAgIHllYXIgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5pbnQsIEZhbHNlKQorICAgICAgICBtb250aCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmJ5dGUsIEZhbHNlKQorICAgICAgICBkYXkgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5ieXRlLCBGYWxzZSkKKyAgICAgICAgbnMgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5sb25nLCBGYWxzZSkKKyAgICAgICAgb2Zmc2V0ID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUuaW50LCBGYWxzZSkKKyAgICAgICAgdHogPSB0aW1lem9uZSh0aW1lZGVsdGEoc2Vjb25kcz1vZmZzZXQpKQorICAgICAgICByZXR1cm4gZGF0ZXRpbWUoeWVhciwgbW9udGgsIGRheSwgdHppbmZvPXR6KSArIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9bnMvMTAwMCkKKworCitjbGFzcyBDaGFySU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IFNpbmdsZUNoYXIKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuY2hhcgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICB0b19leHRlbmQuZXh0ZW5kKG9iai5lbmNvZGUoInV0Zi04IikpCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfY2hhciwgbnVsbGFibGUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWRfY2hhcihjbHMsIGIsIHIpOgorICAgICAgICBtYXhfYnl0ZXMgPSA0CisgICAgICAgIHggPSBiLnJlYWQoMSkKKyAgICAgICAgd2hpbGUgbWF4X2J5dGVzID4gMDoKKyAgICAgICAgICAgIG1heF9ieXRlcyA9IG1heF9ieXRlcyAtIDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4geC5kZWNvZGUoInV0Zi04IikKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgeCArPSBiLnJlYWQoMSkKKworCitjbGFzcyBTdHJpbmdJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBzdHIKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuc3RyaW5nCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCisgICAgICAgIHN0cl9ieXRlcyA9IG9iai5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgdG9fZXh0ZW5kICs9IGludDMyX3BhY2sobGVuKHN0cl9ieXRlcykpCisgICAgICAgIHRvX2V4dGVuZCArPSBzdHJfYnl0ZXMKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGxhbWJkYSBiLCByOiBiLnJlYWQoY2xzLnJlYWRfaW50KGIpKS5kZWNvZGUoInV0Zi04IiksIG51bGxhYmxlKQorCisKK2NsYXNzIExpc3RJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBsaXN0CisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmxpc3QKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihvYmopKSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2JqOgorICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoaXRlbSwgdG9fZXh0ZW5kKQorCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBmbGFnID0gMHgwMAorICAgICAgICBpZiBudWxsYWJsZToKKyAgICAgICAgICAgIGZsYWcgPSBidWZmLnJlYWQoMSlbMF0KKyAgICAgICAgICAgIGlmIGZsYWcgPT0gMHgwMToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWFkX2xpc3QoYnVmZiwgcmVhZGVyLCBmbGFnKQorICAgICAgICByZXR1cm4gY2xzLl9yZWFkX2xpc3QoYnVmZiwgcmVhZGVyLCBmbGFnKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9yZWFkX2xpc3QoY2xzLCBiLCByLCBmbGFnKToKKyAgICAgICAgc2l6ZSA9IGNscy5yZWFkX2ludChiKQorICAgICAgICB0aGVfbGlzdCA9IFtdCisgICAgICAgIGlmIGZsYWcgPT0gMHgwMjoKKyAgICAgICAgICAgIHdoaWxlIHNpemUgPiAwOgorICAgICAgICAgICAgICAgIGl0bSA9IHIucmVhZF9vYmplY3QoYikKKyAgICAgICAgICAgICAgICBidWxrID0gaW50NjRfdW5wYWNrKGIucmVhZCg4KSkKKyAgICAgICAgICAgICAgICBmb3IgeSBpbiByYW5nZShidWxrKToKKyAgICAgICAgICAgICAgICAgICAgdGhlX2xpc3QuYXBwZW5kKGl0bSkKKyAgICAgICAgICAgICAgICBzaXplID0gc2l6ZSAtIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdoaWxlIHNpemUgPiAwOgorICAgICAgICAgICAgICAgIHRoZV9saXN0LmFwcGVuZChyLnJlYWRfb2JqZWN0KGIpKQorICAgICAgICAgICAgICAgIHNpemUgPSBzaXplIC0gMQorCisgICAgICAgIHJldHVybiB0aGVfbGlzdAorCisKK2NsYXNzIFNldERlc2VyaWFsaXplcihMaXN0SU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBTZXRUeXBlCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnNldAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHRoZV9saXN0ID0gTGlzdElPLm9iamVjdGlmeShidWZmLCByZWFkZXIsIG51bGxhYmxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2V0KHRoZV9saXN0KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgbG9nLndhcm5pbmcoIkNvZXJjaW5nIFNldCB0byBsaXN0IGFzIGl0IGNvbnRhaW5zIHVuaGFzaGFibGUgZWxlbWVudHMgKGUuZy4gZGljdCwgbGlzdCkuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgVElOS0VSUE9QLTMyMzIgZm9yIG1vcmUgZGV0YWlscy4iKQorICAgICAgICAgICAgcmV0dXJuIHRoZV9saXN0CisKKworY2xhc3MgTWFwSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKKworICAgIHB5dGhvbl90eXBlID0gRGljdFR5cGUKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUubWFwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQsIG9yZGVyZWQ9aXNpbnN0YW5jZShvYmosIE9yZGVyZWREaWN0KSkKKworICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGludDMyX3BhY2sobGVuKG9iaikpKQorICAgICAgICBmb3IgaywgdiBpbiBvYmouaXRlbXMoKToKKyAgICAgICAgICAgIHdyaXRlci50b19kaWN0KGssIHRvX2V4dGVuZCkKKyAgICAgICAgICAgIHdyaXRlci50b19kaWN0KHYsIHRvX2V4dGVuZCkKKworICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgZmxhZyA9IDB4MDAKKyAgICAgICAgaWYgbnVsbGFibGU6CisgICAgICAgICAgICBmbGFnID0gYnVmZi5yZWFkKDEpWzBdCisgICAgICAgICAgICBpZiBmbGFnID09IDB4MDE6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVhZF9tYXAoYnVmZiwgcmVhZGVyLCBmbGFnKQorICAgICAgICByZXR1cm4gY2xzLl9yZWFkX21hcChidWZmLCByZWFkZXIsIGZsYWcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWRfbWFwKGNscywgYiwgciwgZmxhZyk6CisgICAgICAgIHNpemUgPSBjbHMucmVhZF9pbnQoYikKKyAgICAgICAgdGhlX2RpY3QgPSBPcmRlcmVkRGljdCgpIGlmIGZsYWcgPT0gMHgwMiBlbHNlIHt9CisgICAgICAgIHdoaWxlIHNpemUgPiAwOgorICAgICAgICAgICAgayA9IEhhc2hhYmxlRGljdC5vZihyLnJlYWRfb2JqZWN0KGIpKQorICAgICAgICAgICAgdiA9IHIucmVhZF9vYmplY3QoYikKKyAgICAgICAgICAgIHRoZV9kaWN0W2tdID0gdgorICAgICAgICAgICAgc2l6ZSA9IHNpemUgLSAxCisKKyAgICAgICAgcmV0dXJuIHRoZV9kaWN0CisKKworY2xhc3MgVXVpZElPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisKKyAgICBweXRob25fdHlwZSA9IHV1aWQuVVVJRAorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS51dWlkCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCisgICAgICAgIHRvX2V4dGVuZC5leHRlbmQob2JqLmJ5dGVzKQorICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgbGFtYmRhIGIsIHI6IHV1aWQuVVVJRChieXRlcz1iLnJlYWQoMTYpKSwgbnVsbGFibGUpCisKKworY2xhc3MgRWRnZUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisKKyAgICBweXRob25fdHlwZSA9IEVkZ2UKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuZWRnZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai5pZCwgdG9fZXh0ZW5kKQorICAgICAgICAjIHNlcmlhbGl6aW5nIGxhYmVsIGFzIGxpc3QgaGVyZSBmb3Igbm93IGFjY29yZGluZyB0byBHcmFwaEJpbmFyeVY0CisgICAgICAgIExpc3RJTy5kaWN0aWZ5KFtvYmoubGFiZWxdLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai5pblYuaWQsIHRvX2V4dGVuZCkKKyAgICAgICAgTGlzdElPLmRpY3RpZnkoW29iai5pblYubGFiZWxdLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai5vdXRWLmlkLCB0b19leHRlbmQpCisgICAgICAgIExpc3RJTy5kaWN0aWZ5KFtvYmoub3V0Vi5sYWJlbF0sIHdyaXRlciwgdG9fZXh0ZW5kLCBUcnVlLCBGYWxzZSkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChOVUxMX0JZVEVTKQorICAgICAgICB0b19leHRlbmQuZXh0ZW5kKE5VTExfQllURVMpCisKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9lZGdlLCBudWxsYWJsZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcmVhZF9lZGdlKGNscywgYiwgcik6CisgICAgICAgIGVkZ2VpZCA9IHIucmVhZF9vYmplY3QoYikKKyAgICAgICAgIyByZWFkaW5nIHNpbmdsZSBzdHJpbmcgdmFsdWUgZm9yIG5vdyBhY2NvcmRpbmcgdG8gR3JhcGhCaW5hcnlWNAorICAgICAgICBlZGdlbGJsID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubGlzdCwgRmFsc2UpWzBdCisgICAgICAgIGludiA9IFZlcnRleChyLnJlYWRfb2JqZWN0KGIpLCByLnRvX29iamVjdChiLCBEYXRhVHlwZS5saXN0LCBGYWxzZSlbMF0pCisgICAgICAgIG91dHYgPSBWZXJ0ZXgoci5yZWFkX29iamVjdChiKSwgci50b19vYmplY3QoYiwgRGF0YVR5cGUubGlzdCwgRmFsc2UpWzBdKQorICAgICAgICBiLnJlYWQoMikKKyAgICAgICAgcHJvcHMgPSByLnJlYWRfb2JqZWN0KGIpCisgICAgICAgICMgbnVsbCBwcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBhcyBlbXB0eSBsaXN0cworICAgICAgICBwcm9wZXJ0aWVzID0gW10gaWYgcHJvcHMgaXMgTm9uZSBlbHNlIHByb3BzCisgICAgICAgIGVkZ2UgPSBFZGdlKGVkZ2VpZCwgb3V0diwgZWRnZWxibCwgaW52LCBwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gZWRnZQorCisKK2NsYXNzIFBhdGhJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBQYXRoCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnBhdGgKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgd3JpdGVyLnRvX2RpY3Qob2JqLmxhYmVscywgdG9fZXh0ZW5kKQorICAgICAgICB3cml0ZXIudG9fZGljdChvYmoub2JqZWN0cywgdG9fZXh0ZW5kKQorICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwgbGFtYmRhIGIsIHI6IFBhdGgoci5yZWFkX29iamVjdChiKSwgci5yZWFkX29iamVjdChiKSksIG51bGxhYmxlKQorCisKK2NsYXNzIFByb3BlcnR5SU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKKworICAgIHB5dGhvbl90eXBlID0gUHJvcGVydHkKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUucHJvcGVydHkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgU3RyaW5nSU8uZGljdGlmeShvYmoua2V5LCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai52YWx1ZSwgdG9fZXh0ZW5kKQorICAgICAgICB0b19leHRlbmQuZXh0ZW5kKE5VTExfQllURVMpCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfcHJvcGVydHksIG51bGxhYmxlKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9yZWFkX3Byb3BlcnR5KGNscywgYiwgcik6CisgICAgICAgIHAgPSBQcm9wZXJ0eShyLnRvX29iamVjdChiLCBEYXRhVHlwZS5zdHJpbmcsIEZhbHNlKSwgci5yZWFkX29iamVjdChiKSwgTm9uZSkKKyAgICAgICAgYi5yZWFkKDIpCisgICAgICAgIHJldHVybiBwCisKKworY2xhc3MgVGlua2VyR3JhcGhJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBHcmFwaAorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5ncmFwaAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorCisgICAgICAgIHZlcnRpY2VzID0gbGlzdChvYmoudmVydGljZXMudmFsdWVzKCkpCisgICAgICAgIGVkZ2VzID0gbGlzdChvYmouZWRnZXMudmFsdWVzKCkpCisKKyAgICAgICAgSW50SU8uZGljdGlmeShsZW4odmVydGljZXMpLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIGZvciB2IGluIHZlcnRpY2VzOgorICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3Qodi5pZCwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgTGlzdElPLmRpY3RpZnkoW3YubGFiZWxdLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgICAgICB2X3Byb3BzID0gdi5wcm9wZXJ0aWVzCisgICAgICAgICAgICBJbnRJTy5kaWN0aWZ5KGxlbih2X3Byb3BzKSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQorICAgICAgICAgICAgZm9yIHZwIGluIHZfcHJvcHM6CisgICAgICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QodnAuaWQsIHRvX2V4dGVuZCkKKyAgICAgICAgICAgICAgICBMaXN0SU8uZGljdGlmeShbdnAubGFiZWxdLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QodnAudmFsdWUsIHRvX2V4dGVuZCkKKyAgICAgICAgICAgICAgICB3cml0ZXIudG9fZGljdChOb25lLCB0b19leHRlbmQpCisgICAgICAgICAgICAgICAgTGlzdElPLmRpY3RpZnkodnAucHJvcGVydGllcywgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQorCisgICAgICAgIEludElPLmRpY3RpZnkobGVuKGVkZ2VzKSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQorICAgICAgICBmb3IgZSBpbiBlZGdlczoKKyAgICAgICAgICAgIHdyaXRlci50b19kaWN0KGUuaWQsIHRvX2V4dGVuZCkKKyAgICAgICAgICAgIExpc3RJTy5kaWN0aWZ5KFtlLmxhYmVsXSwgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQorICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoZS5pblYuaWQsIHRvX2V4dGVuZCkKKyAgICAgICAgICAgIHdyaXRlci50b19kaWN0KE5vbmUsIHRvX2V4dGVuZCkKKyAgICAgICAgICAgIHdyaXRlci50b19kaWN0KGUub3V0Vi5pZCwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoTm9uZSwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QoTm9uZSwgdG9fZXh0ZW5kKQorICAgICAgICAgICAgTGlzdElPLmRpY3RpZnkoZS5wcm9wZXJ0aWVzLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9ncmFwaCwgbnVsbGFibGUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWRfZ3JhcGgoY2xzLCBiLCByKToKKyAgICAgICAgZ3JhcGggPSBHcmFwaCgpCisgICAgICAgIHZlcnRleF9jb3VudCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmludCwgRmFsc2UpCisgICAgICAgIGZvciBfIGluIHJhbmdlKHZlcnRleF9jb3VudCk6CisgICAgICAgICAgICB2X2lkID0gci5yZWFkX29iamVjdChiKQorICAgICAgICAgICAgdl9sYWJlbCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmxpc3QsIEZhbHNlKVswXQorICAgICAgICAgICAgdmVydGV4ID0gVmVydGV4KHZfaWQsIHZfbGFiZWwpCisgICAgICAgICAgICBncmFwaC52ZXJ0aWNlc1t2X2lkXSA9IHZlcnRleAorCisgICAgICAgICAgICB2cF9jb3VudCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmludCwgRmFsc2UpCisgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh2cF9jb3VudCk6CisgICAgICAgICAgICAgICAgdnBfaWQgPSByLnJlYWRfb2JqZWN0KGIpCisgICAgICAgICAgICAgICAgdnBfbGFiZWwgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5saXN0LCBGYWxzZSlbMF0KKyAgICAgICAgICAgICAgICB2cF92YWx1ZSA9IHIucmVhZF9vYmplY3QoYikKKyAgICAgICAgICAgICAgICByLnJlYWRfb2JqZWN0KGIpICAjIGRpc2NhcmQgcGFyZW50CisgICAgICAgICAgICAgICAgdnAgPSBWZXJ0ZXhQcm9wZXJ0eSh2cF9pZCwgdnBfbGFiZWwsIHZwX3ZhbHVlLCB2ZXJ0ZXgpCisgICAgICAgICAgICAgICAgdmVydGV4LnByb3BlcnRpZXMuYXBwZW5kKHZwKQorCisgICAgICAgICAgICAgICAgbWV0YV9wcm9wcyA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmxpc3QsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIG1ldGFfcHJvcHM6CisgICAgICAgICAgICAgICAgICAgIHZwLnByb3BlcnRpZXMuZXh0ZW5kKG1ldGFfcHJvcHMpCisKKyAgICAgICAgZWRnZV9jb3VudCA9IHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmludCwgRmFsc2UpCisgICAgICAgIGZvciBfIGluIHJhbmdlKGVkZ2VfY291bnQpOgorICAgICAgICAgICAgZV9pZCA9IHIucmVhZF9vYmplY3QoYikKKyAgICAgICAgICAgIGVfbGFiZWwgPSByLnRvX29iamVjdChiLCBEYXRhVHlwZS5saXN0LCBGYWxzZSlbMF0KKyAgICAgICAgICAgIGluX3ZfaWQgPSByLnJlYWRfb2JqZWN0KGIpCisgICAgICAgICAgICByLnJlYWRfb2JqZWN0KGIpICAjIGRpc2NhcmQgaW4tdiBsYWJlbAorICAgICAgICAgICAgb3V0X3ZfaWQgPSByLnJlYWRfb2JqZWN0KGIpCisgICAgICAgICAgICByLnJlYWRfb2JqZWN0KGIpICAjIGRpc2NhcmQgb3V0LXYgbGFiZWwKKyAgICAgICAgICAgIHIucmVhZF9vYmplY3QoYikgICMgZGlzY2FyZCBwYXJlbnQKKworICAgICAgICAgICAgZWRnZSA9IEVkZ2UoZV9pZCwgZ3JhcGgudmVydGljZXNbb3V0X3ZfaWRdLCBlX2xhYmVsLCBncmFwaC52ZXJ0aWNlc1tpbl92X2lkXSkKKyAgICAgICAgICAgIGdyYXBoLmVkZ2VzW2VfaWRdID0gZWRnZQorCisgICAgICAgICAgICBlZGdlX3Byb3BzID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubGlzdCwgRmFsc2UpCisgICAgICAgICAgICBpZiBlZGdlX3Byb3BzOgorICAgICAgICAgICAgICAgIGVkZ2UucHJvcGVydGllcy5leHRlbmQoZWRnZV9wcm9wcykKKworICAgICAgICByZXR1cm4gZ3JhcGgKKworCitjbGFzcyBWZXJ0ZXhJTyhfR3JhcGhCaW5hcnlUeXBlSU8pOgorCisgICAgcHl0aG9uX3R5cGUgPSBWZXJ0ZXgKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUudmVydGV4CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai5pZCwgdG9fZXh0ZW5kKQorICAgICAgICAjIHNlcmlhbGl6aW5nIGxhYmVsIGFzIGxpc3QgaGVyZSBmb3Igbm93IGFjY29yZGluZyB0byBHcmFwaEJpbmFyeVY0CisgICAgICAgIExpc3RJTy5kaWN0aWZ5KFtvYmoubGFiZWxdLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoTlVMTF9CWVRFUykKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF92ZXJ0ZXgsIG51bGxhYmxlKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9yZWFkX3ZlcnRleChjbHMsIGIsIHIpOgorICAgICAgICB2ZXJ0ZXhfaWQgPSByLnJlYWRfb2JqZWN0KGIpCisgICAgICAgICMgcmVhZGluZyBzaW5nbGUgc3RyaW5nIHZhbHVlIGZvciBub3cgYWNjb3JkaW5nIHRvIEdyYXBoQmluYXJ5VjQKKyAgICAgICAgdmVydGV4X2xhYmVsID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubGlzdCwgRmFsc2UpWzBdCisgICAgICAgIHByb3BzID0gci5yZWFkX29iamVjdChiKQorICAgICAgICAjIG51bGwgcHJvcGVydGllcyBhcmUgcmV0dXJuZWQgYXMgZW1wdHkgbGlzdHMKKyAgICAgICAgcHJvcGVydGllcyA9IFtdIGlmIHByb3BzIGlzIE5vbmUgZWxzZSBwcm9wcworICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXgodmVydGV4X2lkLCB2ZXJ0ZXhfbGFiZWwsIHByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiB2ZXJ0ZXgKKworCitjbGFzcyBWZXJ0ZXhQcm9wZXJ0eUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisKKyAgICBweXRob25fdHlwZSA9IFZlcnRleFByb3BlcnR5CisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnZlcnRleHByb3BlcnR5CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai5pZCwgdG9fZXh0ZW5kKQorICAgICAgICAjIHNlcmlhbGl6aW5nIGxhYmVsIGFzIGxpc3QgaGVyZSBmb3Igbm93IGFjY29yZGluZyB0byBHcmFwaEJpbmFyeVY0CisgICAgICAgIExpc3RJTy5kaWN0aWZ5KFtvYmoubGFiZWxdLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHdyaXRlci50b19kaWN0KG9iai52YWx1ZSwgdG9fZXh0ZW5kKQorICAgICAgICB0b19leHRlbmQuZXh0ZW5kKE5VTExfQllURVMpCisgICAgICAgIHRvX2V4dGVuZC5leHRlbmQoTlVMTF9CWVRFUykKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF92ZXJ0ZXhwcm9wZXJ0eSwgbnVsbGFibGUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWRfdmVydGV4cHJvcGVydHkoY2xzLCBiLCByKToKKyAgICAgICAgIyByZWFkaW5nIHNpbmdsZSBzdHJpbmcgdmFsdWUgZm9yIG5vdyBhY2NvcmRpbmcgdG8gR3JhcGhCaW5hcnlWNAorICAgICAgICB2cCA9IFZlcnRleFByb3BlcnR5KHIucmVhZF9vYmplY3QoYiksIHIudG9fb2JqZWN0KGIsIERhdGFUeXBlLmxpc3QsIEZhbHNlKVswXSwgci5yZWFkX29iamVjdChiKSwgTm9uZSkKKyAgICAgICAgYi5yZWFkKDIpCisgICAgICAgIHByb3BlcnRpZXMgPSByLnJlYWRfb2JqZWN0KGIpCisgICAgICAgICMgbnVsbCBwcm9wZXJ0aWVzIGFyZSByZXR1cm5lZCBhcyBlbXB0eSBsaXN0cworICAgICAgICB2cC5wcm9wZXJ0aWVzID0gW10gaWYgcHJvcGVydGllcyBpcyBOb25lIGVsc2UgcHJvcGVydGllcworICAgICAgICByZXR1cm4gdnAKKworCitjbGFzcyBfRW51bUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyLCB0b19leHRlbmQsIGFzX3ZhbHVlPUZhbHNlLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgY2xzLnByZWZpeF9ieXRlcyhjbHMuZ3JhcGhiaW5hcnlfdHlwZSwgYXNfdmFsdWUsIG51bGxhYmxlLCB0b19leHRlbmQpCisgICAgICAgIFN0cmluZ0lPLmRpY3RpZnkoU3ltYm9sVXRpbC50b19jYW1lbF9jYXNlKHN0cihvYmoubmFtZSkpLCB3cml0ZXIsIHRvX2V4dGVuZCkKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsIGNscy5fcmVhZF9lbnVtdmFsLCBudWxsYWJsZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcmVhZF9lbnVtdmFsKGNscywgYiwgcik6CisgICAgICAgIGVudW1fbmFtZSA9IHIudG9fb2JqZWN0KGIpCisgICAgICAgIHJldHVybiBjbHMucHl0aG9uX3R5cGVbU3ltYm9sVXRpbC50b19zbmFrZV9jYXNlKGVudW1fbmFtZSldCisKKworY2xhc3MgRGlyZWN0aW9uSU8oX0VudW1JTyk6CisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmRpcmVjdGlvbgorICAgIHB5dGhvbl90eXBlID0gRGlyZWN0aW9uCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWRfZW51bXZhbChjbHMsIGIsIHIpOgorICAgICAgICAjIERpcmVjdGlvbiBuZWVkcyB0byByZXRhaW4gYWxsIENBUFMuIG5vdGUgdGhhdCB0b18vZnJvbV8gYXJlIHJlYWxseSBqdXN0IGFsaWFzZXMgb2YgSU4vT1VUCisgICAgICAgICMgc28gdGhleSBkb24ndCBuZWVkIHRvIGJlIGFjY291bnRlZCBmb3IgaW4gc2VyaWFsaXphdGlvbgorICAgICAgICBlbnVtX25hbWUgPSByLnRvX29iamVjdChiKQorICAgICAgICByZXR1cm4gY2xzLnB5dGhvbl90eXBlW2VudW1fbmFtZV0KKworCitjbGFzcyBUSU8oX0VudW1JTyk6CisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLnQKKyAgICBweXRob25fdHlwZSA9IFQKKworCitjbGFzcyBNZXJnZUlPKF9FbnVtSU8pOgorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5tZXJnZQorICAgIHB5dGhvbl90eXBlID0gTWVyZ2UKKworCitjbGFzcyBHVFlQRUlPKF9FbnVtSU8pOgorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5ndHlwZQorICAgIHB5dGhvbl90eXBlID0gR1R5cGUKKworCitjbGFzcyBCeXRlSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IFNpbmdsZUJ5dGUKKyAgICBncmFwaGJpbmFyeV90eXBlID0gRGF0YVR5cGUuYnl0ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICB0b19leHRlbmQuZXh0ZW5kKGludDhfcGFjayhvYmopKQorICAgICAgICByZXR1cm4gdG9fZXh0ZW5kCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgYnVmZiwgcmVhZGVyLCBudWxsYWJsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIGNscy5pc19udWxsKGJ1ZmYsIHJlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiLCByOiBpbnQuX19uZXdfXyhTaW5nbGVCeXRlLCBpbnQ4X3VucGFjayhiLnJlYWQoMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlKQorCisKK2NsYXNzIEJpbmFyeUlPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBieXRlcworICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5iaW5hcnkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQzMl9wYWNrKGxlbihvYmopKSkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChvYmopCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfYnl0ZWJ1ZmZlciwgbnVsbGFibGUpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3JlYWRfYnl0ZWJ1ZmZlcihjbHMsIGIsIHIpOgorICAgICAgICBzaXplID0gY2xzLnJlYWRfaW50KGIpCisgICAgICAgIHJldHVybiBieXRlcyhiLnJlYWQoc2l6ZSkpCisKKworY2xhc3MgQm9vbGVhbklPKF9HcmFwaEJpbmFyeVR5cGVJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBib29sCisgICAgZ3JhcGhiaW5hcnlfdHlwZSA9IERhdGFUeXBlLmJvb2xlYW4KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQ4X3BhY2soMHgwMSBpZiBvYmogZWxzZSAweDAwKSkKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYiwgcjogVHJ1ZSBpZiBpbnQ4X3VucGFjayhiLnJlYWQoMSkpID09IDB4MDEgZWxzZSBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxhYmxlKQorCisKK2NsYXNzIER1cmF0aW9uSU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IHRpbWVkZWx0YQorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5kdXJhdGlvbgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlciwgdG9fZXh0ZW5kLCBhc192YWx1ZT1GYWxzZSwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIGNscy5wcmVmaXhfYnl0ZXMoY2xzLmdyYXBoYmluYXJ5X3R5cGUsIGFzX3ZhbHVlLCBudWxsYWJsZSwgdG9fZXh0ZW5kKQorICAgICAgICBMb25nSU8uZGljdGlmeShvYmouc2Vjb25kcywgd3JpdGVyLCB0b19leHRlbmQsIFRydWUsIEZhbHNlKQorICAgICAgICBJbnRJTy5kaWN0aWZ5KG9iai5taWNyb3NlY29uZHMgKiAxMDAwLCB3cml0ZXIsIHRvX2V4dGVuZCwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIHJldHVybiB0b19leHRlbmQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBidWZmLCByZWFkZXIsIG51bGxhYmxlPVRydWUpOgorICAgICAgICByZXR1cm4gY2xzLmlzX251bGwoYnVmZiwgcmVhZGVyLCBjbHMuX3JlYWRfZHVyYXRpb24sIG51bGxhYmxlKQorICAgIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcmVhZF9kdXJhdGlvbihjbHMsIGIsIHIpOgorICAgICAgICBzZWNvbmRzID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUubG9uZywgRmFsc2UpCisgICAgICAgIG5hbm9zID0gci50b19vYmplY3QoYiwgRGF0YVR5cGUuaW50LCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShzZWNvbmRzPXNlY29uZHMsIG1pY3Jvc2Vjb25kcz1uYW5vcyAvIDEwMDApCisKKworY2xhc3MgTWFya2VySU8oX0dyYXBoQmluYXJ5VHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IE1hcmtlcgorICAgIGdyYXBoYmluYXJ5X3R5cGUgPSBEYXRhVHlwZS5tYXJrZXIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIsIHRvX2V4dGVuZCwgYXNfdmFsdWU9RmFsc2UsIG51bGxhYmxlPVRydWUpOgorICAgICAgICBjbHMucHJlZml4X2J5dGVzKGNscy5ncmFwaGJpbmFyeV90eXBlLCBhc192YWx1ZSwgbnVsbGFibGUsIHRvX2V4dGVuZCkKKyAgICAgICAgdG9fZXh0ZW5kLmV4dGVuZChpbnQ4X3BhY2sob2JqLmdldF92YWx1ZSgpKSkKKyAgICAgICAgcmV0dXJuIHRvX2V4dGVuZAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGJ1ZmYsIHJlYWRlciwgbnVsbGFibGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBjbHMuaXNfbnVsbChidWZmLCByZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYiwgcjogTWFya2VyLm9mKGludDhfdW5wYWNrKGIucmVhZCgxKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbGFibGUpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0cnVjdHVyZS9pby9ncmFwaHNvblYyZDAucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoc29uVjJkMC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Y3ODU3Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoc29uVjJkMC5weQorKysgL2Rldi9udWxsCkBAIC0xLDY2OSArMCwwIEBACi0jCi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLWltcG9ydCBjYWxlbmRhcgotaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQganNvbgotaW1wb3J0IHV1aWQKLWltcG9ydCBtYXRoCi1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAotZnJvbSBkZWNpbWFsIGltcG9ydCAqCi1mcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKLQotZnJvbSBhZW51bSBpbXBvcnQgRW51bQotZnJvbSBpc29kYXRlIGltcG9ydCBwYXJzZV9kdXJhdGlvbiwgZHVyYXRpb25faXNvZm9ybWF0Ci0KLWZyb20gZ3JlbWxpbl9weXRob24gaW1wb3J0IHN0YXRpY3MKLWZyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgRmxvYXRUeXBlLCBGdW5jdGlvblR5cGUsIFNob3J0VHlwZSwgSW50VHlwZSwgTG9uZ1R5cGUsIFR5cGVUeXBlLCBTaW5nbGVCeXRlLCBcCi0gICAgQnl0ZUJ1ZmZlclR5cGUsIFNpbmdsZUNoYXIsIEJpZ0RlY2ltYWwsIGJpZ2RlY2ltYWwKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IEJpbmRpbmcsIEJ5dGVjb2RlLCBQLCBUZXh0UCwgVHJhdmVyc2FsLCBUcmF2ZXJzZXIsIFRyYXZlcnNhbFN0cmF0ZWd5Ci1mcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgRWRnZSwgUHJvcGVydHksIFZlcnRleCwgVmVydGV4UHJvcGVydHksIFBhdGgKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLnV0aWwgaW1wb3J0IFN5bWJvbFV0aWwKLQotIyBXaGVuIHdlIGZhbGwgYmFjayB0byBhIHN1cGVyY2xhc3MncyBzZXJpYWxpemVyLCB3ZSBpdGVyYXRlIG92ZXIgdGhpcyBtYXAuCi0jIFdlIHdhbnQgdGhhdCBpdGVyYXRpb24gb3JkZXIgdG8gYmUgY29uc2lzdGVudCwgc28gd2UgdXNlIGFuIE9yZGVyZWREaWN0LAotIyBub3QgYSBkaWN0LgotX3NlcmlhbGl6ZXJzID0gT3JkZXJlZERpY3QoKQotX2Rlc2VyaWFsaXplcnMgPSB7fQotCi0KLWNsYXNzIEdyYXBoU09OVHlwZVR5cGUodHlwZSk6Ci0gICAgZGVmIF9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgZGN0KToKLSAgICAgICAgY2xzID0gc3VwZXIoR3JhcGhTT05UeXBlVHlwZSwgbWNzKS5fX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRjdCkKLSAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpOgotICAgICAgICAgICAgaWYgY2xzLnB5dGhvbl90eXBlOgotICAgICAgICAgICAgICAgIF9zZXJpYWxpemVyc1tjbHMucHl0aG9uX3R5cGVdID0gY2xzCi0gICAgICAgICAgICBpZiBjbHMuZ3JhcGhzb25fdHlwZToKLSAgICAgICAgICAgICAgICBfZGVzZXJpYWxpemVyc1tjbHMuZ3JhcGhzb25fdHlwZV0gPSBjbHMKLSAgICAgICAgcmV0dXJuIGNscwotCi0KLWNsYXNzIEdyYXBoU09OVXRpbChvYmplY3QpOgotICAgIFRZUEVfS0VZID0gIkB0eXBlIgotICAgIFZBTFVFX0tFWSA9ICJAdmFsdWUiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdHlwZWRfdmFsdWUoY2xzLCB0eXBlX25hbWUsIHZhbHVlLCBwcmVmaXg9ImciKToKLSAgICAgICAgb3V0ID0ge2Nscy5UWVBFX0tFWTogY2xzLmZvcm1hdF90eXBlKHByZWZpeCwgdHlwZV9uYW1lKX0KLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBvdXRbY2xzLlZBTFVFX0tFWV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gb3V0Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZm9ybWF0X3R5cGUoY2xzLCBwcmVmaXgsIHR5cGVfbmFtZSk6Ci0gICAgICAgIHJldHVybiAiJXM6JXMiICUgKHByZWZpeCwgdHlwZV9uYW1lKQotCi0KLSMgUmVhZC9Xcml0ZSBjbGFzc2VzIHNwbGl0IHRvIGZvbGxvdyBwcmVjZWRlbmNlIG9mIHRoZSBKYXZhIEFQSQotY2xhc3MgR3JhcGhTT05Xcml0ZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VyaWFsaXplcl9tYXA9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICA6cGFyYW0gc2VyaWFsaXplcl9tYXA6IG1hcCBmcm9tIFB5dGhvbiB0eXBlIHRvIHNlcmlhbGl6ZXIgaW5zdGFuY2UgaW1wbGVtZW50aW5nIGBkaWN0aWZ5YAotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5zZXJpYWxpemVycyA9IF9zZXJpYWxpemVycy5jb3B5KCkKLSAgICAgICAgaWYgc2VyaWFsaXplcl9tYXA6Ci0gICAgICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVwZGF0ZShzZXJpYWxpemVyX21hcCkKLQotICAgIGRlZiB3cml0ZV9vYmplY3Qoc2VsZiwgb2JqZWN0RGF0YSk6Ci0gICAgICAgICMgdG8gSlNPTgotICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhzZWxmLnRvX2RpY3Qob2JqZWN0RGF0YSksIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKLQotICAgIGRlZiB0b19kaWN0KHNlbGYsIG9iaik6Ci0gICAgICAgICIiIgotICAgICAgICBFbmNvZGVzIHB5dGhvbiBvYmplY3RzIGluIEdyYXBoU09OIHR5cGUtdGFnZ2VkIGRpY3QgdmFsdWVzCi0gICAgICAgICIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXJpYWxpemVyc1t0eXBlKG9iaildLmRpY3RpZnkob2JqLCBzZWxmKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBmb3Iga2V5LCBzZXJpYWxpemVyIGluIHNlbGYuc2VyaWFsaXplcnMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwga2V5KToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZGljdGlmeShvYmosIHNlbGYpCi0KLSAgICAgICAgIyBsaXN0IGFuZCBtYXAgYXJlIHRyZWF0ZWQgYXMgbm9ybWFsIGpzb24gb2JqcyAoY291bGQgYmUgaXNvbGF0ZWQgc2VyaWFsaXplcnMpCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCAobGlzdCwgc2V0KSk6Ci0gICAgICAgICAgICByZXR1cm4gW3NlbGYudG9fZGljdChvKSBmb3IgbyBpbiBvYmpdCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGRpY3QpOgotICAgICAgICAgICAgcmV0dXJuIGRpY3QoKHNlbGYudG9fZGljdChrKSwgc2VsZi50b19kaWN0KHYpKSBmb3IgaywgdiBpbiBvYmouaXRlbXMoKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBvYmoKLQotCi1jbGFzcyBHcmFwaFNPTlJlYWRlcihvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXNlcmlhbGl6ZXJfbWFwPU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIGRlc2VyaWFsaXplcl9tYXA6IG1hcCBmcm9tIEdyYXBoU09OIHR5cGUgdGFnIHRvIGRlc2VyaWFsaXplciBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgYG9iamVjdGlmeWAKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZGVzZXJpYWxpemVycyA9IF9kZXNlcmlhbGl6ZXJzLmNvcHkoKQotICAgICAgICBpZiBkZXNlcmlhbGl6ZXJfbWFwOgotICAgICAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZShkZXNlcmlhbGl6ZXJfbWFwKQotCi0gICAgZGVmIHJlYWRfb2JqZWN0KHNlbGYsIGpzb25fZGF0YSk6Ci0gICAgICAgICMgZnJvbSBKU09OCi0gICAgICAgIHJldHVybiBzZWxmLnRvX29iamVjdChqc29uLmxvYWRzKGpzb25fZGF0YSkpCi0KLSAgICBkZWYgdG9fb2JqZWN0KHNlbGYsIG9iaik6Ci0gICAgICAgICIiIgotICAgICAgICBVbnBhY2tzIEdyYXBoU09OIHR5cGUtdGFnZ2VkIGRpY3QgdmFsdWVzIGludG8gb2JqZWN0cyBtYXBwZWQgaW4gc2VsZi5kZXNlcmlhbGl6ZXJzCi0gICAgICAgICIiIgotICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVzZXJpYWxpemVyc1tvYmpbR3JhcGhTT05VdGlsLlRZUEVfS0VZXV0ub2JqZWN0aWZ5KG9ialtHcmFwaFNPTlV0aWwuVkFMVUVfS0VZXSwgc2VsZikKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjIGxpc3QgYW5kIG1hcCBhcmUgdHJlYXRlZCBhcyBub3JtYWwganNvbiBvYmpzIChjb3VsZCBiZSBpc29sYXRlZCBkZXNlcmlhbGl6ZXJzKQotICAgICAgICAgICAgcmV0dXJuIGRpY3QoKHNlbGYudG9fb2JqZWN0KGspLCBzZWxmLnRvX29iamVjdCh2KSkgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgotICAgICAgICAgICAgcmV0dXJuIFtzZWxmLnRvX29iamVjdChvKSBmb3IgbyBpbiBvYmpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gb2JqCi0KLQotY2xhc3MgX0dyYXBoU09OVHlwZUlPKG9iamVjdCwgbWV0YWNsYXNzPUdyYXBoU09OVHlwZVR5cGUpOgotICAgIHB5dGhvbl90eXBlID0gTm9uZQotICAgIGdyYXBoc29uX3R5cGUgPSBOb25lCi0KLSAgICBkZWYgZGljdGlmeShzZWxmLCBvYmosIHdyaXRlcik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQotCi0gICAgZGVmIG9iamVjdGlmeShzZWxmLCBkLCByZWFkZXIpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotCi1jbGFzcyBfQnl0ZWNvZGVTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9kaWN0aWZ5X2luc3RydWN0aW9ucyhjbHMsIGluc3RydWN0aW9ucywgd3JpdGVyKToKLSAgICAgICAgb3V0ID0gW10KLSAgICAgICAgZm9yIGluc3RydWN0aW9uIGluIGluc3RydWN0aW9uczoKLSAgICAgICAgICAgIGluc3QgPSBbaW5zdHJ1Y3Rpb25bMF1dCi0gICAgICAgICAgICBpbnN0LmV4dGVuZCh3cml0ZXIudG9fZGljdChhcmcpIGZvciBhcmcgaW4gaW5zdHJ1Y3Rpb25bMTpdKQotICAgICAgICAgICAgb3V0LmFwcGVuZChpbnN0KQotICAgICAgICByZXR1cm4gb3V0Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIGJ5dGVjb2RlLCB3cml0ZXIpOgotICAgICAgICBpZiBpc2luc3RhbmNlKGJ5dGVjb2RlLCBUcmF2ZXJzYWwpOgotICAgICAgICAgICAgYnl0ZWNvZGUgPSBieXRlY29kZS5ieXRlY29kZQotICAgICAgICBvdXQgPSB7fQotICAgICAgICBpZiBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zOgotICAgICAgICAgICAgb3V0WyJzb3VyY2UiXSA9IGNscy5fZGljdGlmeV9pbnN0cnVjdGlvbnMoYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9ucywgd3JpdGVyKQotICAgICAgICBpZiBieXRlY29kZS5zdGVwX2luc3RydWN0aW9uczoKLSAgICAgICAgICAgIG91dFsic3RlcCJdID0gY2xzLl9kaWN0aWZ5X2luc3RydWN0aW9ucyhieXRlY29kZS5zdGVwX2luc3RydWN0aW9ucywgd3JpdGVyKQotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJCeXRlY29kZSIsIG91dCkKLQotY2xhc3MgVHJhdmVyc2FsU2VyaWFsaXplcihfQnl0ZWNvZGVTZXJpYWxpemVyKToKLSAgICBweXRob25fdHlwZSA9IFRyYXZlcnNhbAotCi0KLWNsYXNzIEJ5dGVjb2RlU2VyaWFsaXplcihfQnl0ZWNvZGVTZXJpYWxpemVyKToKLSAgICBweXRob25fdHlwZSA9IEJ5dGVjb2RlCi0KLQotY2xhc3MgVmVydGV4U2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gVmVydGV4Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlZlcnRleCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgdmVydGV4LCB3cml0ZXIpOgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJWZXJ0ZXgiLCB7ImlkIjogd3JpdGVyLnRvX2RpY3QodmVydGV4LmlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IHdyaXRlci50b19kaWN0KHZlcnRleC5sYWJlbCl9KQotCi0KLWNsYXNzIEVkZ2VTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBFZGdlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkVkZ2UiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIGVkZ2UsIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkVkZ2UiLCB7ImlkIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dFYiOiB3cml0ZXIudG9fZGljdChlZGdlLm91dFYuaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWTGFiZWwiOiB3cml0ZXIudG9fZGljdChlZGdlLm91dFYubGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IHdyaXRlci50b19kaWN0KGVkZ2UubGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpblYiOiB3cml0ZXIudG9fZGljdChlZGdlLmluVi5pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluVkxhYmVsIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5pblYubGFiZWwpfSkKLQotCi1jbGFzcyBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFZlcnRleFByb3BlcnR5Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlZlcnRleFByb3BlcnR5IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCB2ZXJ0ZXhfcHJvcGVydHksIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIlZlcnRleFByb3BlcnR5IiwgeyJpZCI6IHdyaXRlci50b19kaWN0KHZlcnRleF9wcm9wZXJ0eS5pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IHdyaXRlci50b19kaWN0KHZlcnRleF9wcm9wZXJ0eS5sYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHdyaXRlci50b19kaWN0KHZlcnRleF9wcm9wZXJ0eS52YWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJ0ZXgiOiB3cml0ZXIudG9fZGljdCh2ZXJ0ZXhfcHJvcGVydHkudmVydGV4LmlkKX0pCi0KLQotY2xhc3MgUHJvcGVydHlTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBQcm9wZXJ0eQotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpQcm9wZXJ0eSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgcHJvcGVydHksIHdyaXRlcik6Ci0gICAgICAgIGVsZW1lbnRfZGljdCA9IHdyaXRlci50b19kaWN0KHByb3BlcnR5LmVsZW1lbnQpCi0gICAgICAgIGlmIGVsZW1lbnRfZGljdCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHZhbHVlX2RpY3QgPSBlbGVtZW50X2RpY3RbIkB2YWx1ZSJdCi0gICAgICAgICAgICBpZiAib3V0VkxhYmVsIiBpbiB2YWx1ZV9kaWN0OgotICAgICAgICAgICAgICAgIGRlbCB2YWx1ZV9kaWN0WyJvdXRWTGFiZWwiXQotICAgICAgICAgICAgaWYgImluVkxhYmVsIiBpbiB2YWx1ZV9kaWN0OgotICAgICAgICAgICAgICAgIGRlbCB2YWx1ZV9kaWN0WyJpblZMYWJlbCJdCi0gICAgICAgICAgICBpZiAicHJvcGVydGllcyIgaW4gdmFsdWVfZGljdDoKLSAgICAgICAgICAgICAgICBkZWwgdmFsdWVfZGljdFsicHJvcGVydGllcyJdCi0gICAgICAgICAgICBpZiAidmFsdWUiIGluIHZhbHVlX2RpY3Q6Ci0gICAgICAgICAgICAgICAgZGVsIHZhbHVlX2RpY3RbInZhbHVlIl0KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiUHJvcGVydHkiLCB7ImtleSI6IHdyaXRlci50b19kaWN0KHByb3BlcnR5LmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogd3JpdGVyLnRvX2RpY3QocHJvcGVydHkudmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IjogZWxlbWVudF9kaWN0fSkKLQotCi1jbGFzcyBUcmF2ZXJzYWxTdHJhdGVneVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFRyYXZlcnNhbFN0cmF0ZWd5Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIHN0cmF0ZWd5LCB3cml0ZXIpOgotICAgICAgICBzdHJhdF9kaWN0ID0ge30KLSAgICAgICAgc3RyYXRfZGljdFsiZnFjbiJdID0gc3RyYXRlZ3kuZnFjbgotICAgICAgICBzdHJhdF9kaWN0WyJjb25mIl0gPSB7fQotICAgICAgICBmb3Iga2V5IGluIHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb246Ci0gICAgICAgICAgICBzdHJhdF9kaWN0WyJjb25mIl1ba2V5XSA9IHdyaXRlci50b19kaWN0KHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb25ba2V5XSkKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShzdHJhdGVneS5zdHJhdGVneV9uYW1lLCBzdHJhdF9kaWN0KQotCi0KLWNsYXNzIFRyYXZlcnNlcklPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBUcmF2ZXJzZXIKLSAgICBncmFwaHNvbl90eXBlID0gImc6VHJhdmVyc2VyIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCB0cmF2ZXJzZXIsIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIlRyYXZlcnNlciIsIHsidmFsdWUiOiB3cml0ZXIudG9fZGljdCh0cmF2ZXJzZXIub2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1bGsiOiB3cml0ZXIudG9fZGljdCh0cmF2ZXJzZXIuYnVsayl9KQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHJldHVybiBUcmF2ZXJzZXIocmVhZGVyLnRvX29iamVjdChkWyJ2YWx1ZSJdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIudG9fb2JqZWN0KGRbImJ1bGsiXSkpCi0KLQotY2xhc3MgRW51bVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IEVudW0KLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgZW51bSwgXyk6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoU3ltYm9sVXRpbC50b19jYW1lbF9jYXNlKHR5cGUoZW51bSkuX19uYW1lX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFV0aWwudG9fY2FtZWxfY2FzZShzdHIoZW51bS5uYW1lKSkpCi0KLQotY2xhc3MgUFNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFAKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgcCwgd3JpdGVyKToKLSAgICAgICAgb3V0ID0geyJwcmVkaWNhdGUiOiBwLm9wZXJhdG9yLAotICAgICAgICAgICAgICAgInZhbHVlIjogW3dyaXRlci50b19kaWN0KHAudmFsdWUpLCB3cml0ZXIudG9fZGljdChwLm90aGVyKV0gaWYgcC5vdGhlciBpcyBub3QgTm9uZSBlbHNlCi0gICAgICAgICAgICAgICB3cml0ZXIudG9fZGljdChwLnZhbHVlKX0KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiUCIsIG91dCkKLQotCi1jbGFzcyBUZXh0UFNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFRleHRQCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIHAsIHdyaXRlcik6Ci0gICAgICAgIG91dCA9IHsicHJlZGljYXRlIjogcC5vcGVyYXRvciwKLSAgICAgICAgICAgICAgICJ2YWx1ZSI6IFt3cml0ZXIudG9fZGljdChwLnZhbHVlKSwgd3JpdGVyLnRvX2RpY3QocC5vdGhlcildIGlmIHAub3RoZXIgaXMgbm90IE5vbmUgZWxzZQotICAgICAgICAgICAgICAgd3JpdGVyLnRvX2RpY3QocC52YWx1ZSl9Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIlRleHRQIiwgb3V0KQotCi0KLWNsYXNzIEJpbmRpbmdTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBCaW5kaW5nCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIGJpbmRpbmcsIHdyaXRlcik6Ci0gICAgICAgIG91dCA9IHsia2V5IjogYmluZGluZy5rZXksCi0gICAgICAgICAgICAgICAidmFsdWUiOiB3cml0ZXIudG9fZGljdChiaW5kaW5nLnZhbHVlKX0KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiQmluZGluZyIsIG91dCkKLQotCi1jbGFzcyBMYW1iZGFTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBGdW5jdGlvblR5cGUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbGFtYmRhX29iamVjdCwgd3JpdGVyKToKLSAgICAgICAgbGFtYmRhX3Jlc3VsdCA9IGxhbWJkYV9vYmplY3QoKQotICAgICAgICBzY3JpcHQgPSBsYW1iZGFfcmVzdWx0IGlmIGlzaW5zdGFuY2UobGFtYmRhX3Jlc3VsdCwgc3RyKSBlbHNlIGxhbWJkYV9yZXN1bHRbMF0KLSAgICAgICAgbGFuZ3VhZ2UgPSBzdGF0aWNzLmRlZmF1bHRfbGFtYmRhX2xhbmd1YWdlIGlmIGlzaW5zdGFuY2UobGFtYmRhX3Jlc3VsdCwgc3RyKSBlbHNlIGxhbWJkYV9yZXN1bHRbMV0KLSAgICAgICAgb3V0ID0geyJzY3JpcHQiOiBzY3JpcHQsCi0gICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiBsYW5ndWFnZX0KLSAgICAgICAgaWYgbGFuZ3VhZ2UgPT0gImdyZW1saW4tZ3Jvb3Z5IiBhbmQgIi0+IiBpbiBzY3JpcHQ6Ci0gICAgICAgICAgICAjIGlmIHRoZSB1c2VyIGhhcyBleHBsaWNpdGx5IGFkZGVkIHBhcmFtZXRlcnMgdG8gdGhlIGdyb292eSBjbG9zdXJlIHRoZW4gd2UgY2FuIGVhc2lseSBkZXRlY3Qgb25lIG9yIHR3bwotICAgICAgICAgICAgIyBhcmcgbGFtYmRhcyAtIGlmIHdlIGNhbid0IGRldGVjdCAxIG9yIDIgdGhlbiB3ZSBqdXN0IGdvIHdpdGggInVua25vd24iCi0gICAgICAgICAgICBhcmdzID0gc2NyaXB0WzA6c2NyaXB0LmZpbmQoIi0+IildCi0gICAgICAgICAgICBvdXRbImFyZ3VtZW50cyJdID0gMiBpZiAiLCIgaW4gYXJncyBlbHNlIDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG91dFsiYXJndW1lbnRzIl0gPSAtMQotCi0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkxhbWJkYSIsIG91dCkKLQotCi1jbGFzcyBUeXBlU2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gVHlwZVR5cGUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgdHlwLCB3cml0ZXIpOgotICAgICAgICByZXR1cm4gd3JpdGVyLnRvX2RpY3QodHlwKCkpCi0KLQotY2xhc3MgVVVJRElPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSB1dWlkLlVVSUQKLSAgICBncmFwaHNvbl90eXBlID0gImc6VVVJRCIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiVVVJRCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIpOgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIHN0cihvYmopKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHJldHVybiBjbHMucHl0aG9uX3R5cGUoZCkKLQotCi1jbGFzcyBEYXRlSU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6RGF0ZSIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRGF0ZSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0aW1lc3RhbXBfc2Vjb25kcyA9IGNhbGVuZGFyLnRpbWVnbShvYmoudXRjdGltZXR1cGxlKCkpCi0gICAgICAgICAgICBwdHMgPSB0aW1lc3RhbXBfc2Vjb25kcyAqIDFlMyArIGdldGF0dHIob2JqLCAnbWljcm9zZWNvbmQnLCAwKSAvIDFlMwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwdHMgPSBjYWxlbmRhci50aW1lZ20ob2JqLnRpbWV0dXBsZSgpKSAqIDFlMwotCi0gICAgICAgIHRzID0gaW50KHJvdW5kKHB0cykpCi0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgdHMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdHMsIHJlYWRlcik6Ci0gICAgICAgICMgUHl0aG9uIHRpbWVzdGFtcCBleHBlY3RzIHNlY29uZHMKLSAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAodHMgLyAxMDAwLjApCi0KLQotICAgIGNsYXNzIE9mZnNldERhdGVUaW1lSU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICAgICAgcHl0aG9uX3R5cGUgPSBkYXRldGltZS5kYXRldGltZQotICAgICAgICBncmFwaHNvbl90eXBlID0gImd4Ok9mZnNldERhdGVUaW1lIgotICAgICAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiT2Zmc2V0RGF0ZVRpbWUiCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBkaWN0aWZ5KGNscywgb2JqLCB3cml0ZXIpOgotICAgICAgICAgICAgaWYgb2JqLnR6aW5mbyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiBEYXRlSU8uZGljdGlmeShvYmosIHdyaXRlcikKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgb2JqLmlzb2Zvcm1hdCgpLCAiZ3giKQotCi0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgb2JqZWN0aWZ5KGNscywgZHQsIHJlYWRlcik6Ci0gICAgICAgICAgICAjIHNwZWNpYWxseSBoYW5kbGluZyBhcyBweXRob24gaXNvZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgenVsdSB1bnRpbCAzLjExCi0gICAgICAgICAgICBkdF9pc28gPSBkdFs6LTFdICsgJyswMDowMCcgaWYgZHQuZW5kc3dpdGgoJ1onKSBlbHNlIGR0Ci0gICAgICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdChkdF9pc28pCi0KLQotIyBCYXNlZCBvbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGlzIGNsYXNzIG11c3QgYWx3YXlzIGJlIGRlY2xhcmVkIGJlZm9yZSBGbG9hdElPLgotIyBTZWVtcyBwcmV0dHkgZnJhZ2lsZSBmb3IgZnV0dXJlIG1haW50YWluZXJzLiBNYXliZSBsb29rIGludG8gdGhpcy4KLWNsYXNzIFRpbWVzdGFtcElPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgIiIiQSB0aW1lc3RhbXAgaW4gUHl0aG9uIGlzIHR5cGUgZmxvYXQiIiIKLSAgICBweXRob25fdHlwZSA9IHN0YXRpY3MudGltZXN0YW1wCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlRpbWVzdGFtcCIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiVGltZXN0YW1wIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlcik6Ci0gICAgICAgICMgSmF2YSB0aW1lc3RhbXAgZXhwZWN0cyBtaWxsaXNlY29uZHMgaW50ZWdlcgotICAgICAgICAjIEhhdmUgdG8gdXNlIGludCBiZWNhdXNlIG9mIGxlZ2FjeSBQeXRob24KLSAgICAgICAgdHMgPSBpbnQocm91bmQob2JqICogMTAwMCkpCi0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgdHMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdHMsIHJlYWRlcik6Ci0gICAgICAgICMgUHl0aG9uIHRpbWVzdGFtcCBleHBlY3RzIHNlY29uZHMKLSAgICAgICAgcmV0dXJuIGNscy5weXRob25fdHlwZSh0cyAvIDEwMDAuMCkKLQotCi1jbGFzcyBfTnVtYmVySU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6ICAjIGJlY2F1c2UgaXNpbnN0YW5jZShGYWxzZSwgaW50KSBhbmQgaXNpbnN0YW5jZShUcnVlLCBpbnQpCi0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIG4pCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBjbHMucHl0aG9uX3R5cGUodikKLQotCi1jbGFzcyBGbG9hdElPKF9OdW1iZXJJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBGbG9hdFR5cGUKLSAgICBncmFwaHNvbl90eXBlID0gImc6RmxvYXQiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkZsb2F0IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG4sIGJvb2wpOiAgIyBiZWNhdXNlIGlzaW5zdGFuY2UoRmFsc2UsIGludCkgYW5kIGlzaW5zdGFuY2UoVHJ1ZSwgaW50KQotICAgICAgICAgICAgcmV0dXJuIG4KLSAgICAgICAgZWxpZiBtYXRoLmlzbmFuKG4pOgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCAiTmFOIikKLSAgICAgICAgZWxpZiBtYXRoLmlzaW5mKG4pIGFuZCBuID4gMDoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgIkluZmluaXR5IikKLSAgICAgICAgZWxpZiBtYXRoLmlzaW5mKG4pIGFuZCBuIDwgMDoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgIi1JbmZpbml0eSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIG4pCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uodiwgc3RyKToKLSAgICAgICAgICAgIGlmIHYgPT0gJ05hTic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KCduYW4nKQotICAgICAgICAgICAgZWxpZiB2ID09ICJJbmZpbml0eSI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KCdpbmYnKQotICAgICAgICAgICAgZWxpZiB2ID09ICItSW5maW5pdHkiOgotICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdCgnLWluZicpCi0KLSAgICAgICAgcmV0dXJuIGNscy5weXRob25fdHlwZSh2KQotCi0KLWNsYXNzIEJpZ0RlY2ltYWxJTyhfTnVtYmVySU8pOgotICAgIHB5dGhvbl90eXBlID0gQmlnRGVjaW1hbAotICAgIGdyYXBoc29uX3R5cGUgPSAiZ3g6QmlnRGVjaW1hbCIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiQmlnRGVjaW1hbCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBzdHIobi52YWx1ZSksICJneCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBiaWdkZWNpbWFsKHYpCi0KLQotY2xhc3MgRG91YmxlSU8oRmxvYXRJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkRvdWJsZSIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRG91YmxlIgotCi0KLWNsYXNzIEludDY0SU8oX051bWJlcklPKToKLSAgICBweXRob25fdHlwZSA9IExvbmdUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkludDY0IgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJJbnQ2NCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKLSAgICAgICAgIyBpZiB3ZSBleGNlZWQgSmF2YSBsb25nIHJhbmdlIHRoZW4gd2UgbmVlZCBhIEJpZ0ludGVnZXIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShuLCBib29sKToKLSAgICAgICAgICAgIHJldHVybiBuCi0gICAgICAgIGVsaWYgbiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4IG9yIG4gPiA5MjIzMzcyMDM2ODU0Nzc1ODA3OgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiQmlnSW50ZWdlciIsIHN0cihuKSwgImd4IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbikKLQotCi1jbGFzcyBCaWdJbnRlZ2VySU8oSW50NjRJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJneDpCaWdJbnRlZ2VyIgotCi0KLWNsYXNzIEludDMySU8oSW50NjRJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBJbnRUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkludDMyIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJJbnQzMiIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKLSAgICAgICAgIyBpZiB3ZSBleGNlZWQgSmF2YSBpbnQgcmFuZ2UgdGhlbiB3ZSBuZWVkIGEgbG9uZwotICAgICAgICBpZiBpc2luc3RhbmNlKG4sIGJvb2wpOgotICAgICAgICAgICAgcmV0dXJuIG4KLSAgICAgICAgZWxpZiBuIDwgLTkyMjMzNzIwMzY4NTQ3NzU4MDggb3IgbiA+IDkyMjMzNzIwMzY4NTQ3NzU4MDc6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJCaWdJbnRlZ2VyIiwgc3RyKG4pLCAiZ3giKQotICAgICAgICBlbGlmIG4gPCAtMjE0NzQ4MzY0OCBvciBuID4gMjE0NzQ4MzY0NzoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkludDY0IiwgbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbikKLQotCi1jbGFzcyBJbnQxNklPKEludDY0SU8pOgotICAgIHB5dGhvbl90eXBlID0gU2hvcnRUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJneDpJbnQxNiIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiSW50MTYiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgICMgaWYgd2UgZXhjZWVkIEphdmEgaW50IHJhbmdlIHRoZW4gd2UgbmVlZCBhIGxvbmcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShuLCBib29sKToKLSAgICAgICAgICAgIHJldHVybiBuCi0gICAgICAgIGVsaWYgbiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4IG9yIG4gPiA5MjIzMzcyMDM2ODU0Nzc1ODA3OgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiQmlnSW50ZWdlciIsIHN0cihuKSwgImd4IikKLSAgICAgICAgZWxpZiBuIDwgLTIxNDc0ODM2NDggb3IgbiA+IDIxNDc0ODM2NDc6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJJbnQ2NCIsIG4pCi0gICAgICAgIGVsaWYgbiA8IC0zMjc2OCBvciBuID4gMzI3Njc6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJJbnQzMiIsIG4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIG4sICJneCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBpbnQuX19uZXdfXyhTaG9ydFR5cGUsIHYpCi0KLQotY2xhc3MgQnl0ZUlPKF9OdW1iZXJJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBTaW5nbGVCeXRlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJneDpCeXRlIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJCeXRlIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG4sIGJvb2wpOiAgIyBiZWNhdXNlIGlzaW5zdGFuY2UoRmFsc2UsIGludCkgYW5kIGlzaW5zdGFuY2UoVHJ1ZSwgaW50KQotICAgICAgICAgICAgcmV0dXJuIG4KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuLCAiZ3giKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIHYsIF8pOgotICAgICAgICByZXR1cm4gaW50Ll9fbmV3X18oU2luZ2xlQnl0ZSwgdikKLQotCi1jbGFzcyBCeXRlQnVmZmVySU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IEJ5dGVCdWZmZXJUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJneDpCeXRlQnVmZmVyIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJCeXRlQnVmZmVyIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsICIiLmpvaW4oY2hyKHgpIGZvciB4IGluIG4pLCAiZ3giKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIHYsIF8pOgotICAgICAgICByZXR1cm4gY2xzLnB5dGhvbl90eXBlKHYsICJ1dGY4IikKLQotCi1jbGFzcyBDaGFySU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFNpbmdsZUNoYXIKLSAgICBncmFwaHNvbl90eXBlID0gImd4OkNoYXIiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkNoYXIiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbiwgImd4IikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKLSAgICAgICAgcmV0dXJuIHN0ci5fX25ld19fKFNpbmdsZUNoYXIsIHYpCi0KLQotY2xhc3MgRHVyYXRpb25JTyhfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gdGltZWRlbHRhCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJneDpEdXJhdGlvbiIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRHVyYXRpb24iCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgZHVyYXRpb25faXNvZm9ybWF0KG4pLCAiZ3giKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIHYsIF8pOgotICAgICAgICByZXR1cm4gcGFyc2VfZHVyYXRpb24odikKLQotCi1jbGFzcyBWZXJ0ZXhEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6VmVydGV4IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHByb3BlcnRpZXMgPSBbXQotICAgICAgICBpZiAicHJvcGVydGllcyIgaW4gZDoKLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSByZWFkZXIudG9fb2JqZWN0KGRbInByb3BlcnRpZXMiXSkKLSAgICAgICAgICAgIGlmIHByb3BlcnRpZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IFtpdGVtIGZvciBzdWJsaXN0IGluIHByb3BlcnRpZXMudmFsdWVzKCkgZm9yIGl0ZW0gaW4gc3VibGlzdF0KLSAgICAgICAgcmV0dXJuIFZlcnRleChyZWFkZXIudG9fb2JqZWN0KGRbImlkIl0pLCBkLmdldCgibGFiZWwiLCAidmVydGV4IiksIHByb3BlcnRpZXMpCi0KLQotY2xhc3MgRWRnZURlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpFZGdlIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHByb3BlcnRpZXMgPSBbXQotICAgICAgICBpZiAicHJvcGVydGllcyIgaW4gZDoKLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSByZWFkZXIudG9fb2JqZWN0KGRbInByb3BlcnRpZXMiXSkKLSAgICAgICAgICAgIGlmIHByb3BlcnRpZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IGxpc3QocHJvcGVydGllcy52YWx1ZXMoKSkKLSAgICAgICAgcmV0dXJuIEVkZ2UocmVhZGVyLnRvX29iamVjdChkWyJpZCJdKSwKLSAgICAgICAgICAgICAgICAgICAgVmVydGV4KHJlYWRlci50b19vYmplY3QoZFsib3V0ViJdKSwgZC5nZXQoIm91dFZMYWJlbCIsICJ2ZXJ0ZXgiKSksCi0gICAgICAgICAgICAgICAgICAgIGQuZ2V0KCJsYWJlbCIsICJlZGdlIiksCi0gICAgICAgICAgICAgICAgICAgIFZlcnRleChyZWFkZXIudG9fb2JqZWN0KGRbImluViJdKSwgZC5nZXQoImluVkxhYmVsIiwgInZlcnRleCIpKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcykKLQotCi1jbGFzcyBWZXJ0ZXhQcm9wZXJ0eURlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpWZXJ0ZXhQcm9wZXJ0eSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgotICAgICAgICBwcm9wZXJ0aWVzID0gW10KLSAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGQ6Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzID0gcmVhZGVyLnRvX29iamVjdChkWyJwcm9wZXJ0aWVzIl0pCi0gICAgICAgICAgICBpZiBwcm9wZXJ0aWVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBsaXN0KG1hcChsYW1iZGEgeDogUHJvcGVydHkoeFswXSwgeFsxXSwgTm9uZSksIHByb3BlcnRpZXMuaXRlbXMoKSkpCi0gICAgICAgIHZlcnRleCA9IFZlcnRleChyZWFkZXIudG9fb2JqZWN0KGQuZ2V0KCJ2ZXJ0ZXgiKSkpIGlmICJ2ZXJ0ZXgiIGluIGQgZWxzZSBOb25lCi0gICAgICAgIHJldHVybiBWZXJ0ZXhQcm9wZXJ0eShyZWFkZXIudG9fb2JqZWN0KGRbImlkIl0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsibGFiZWwiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci50b19vYmplY3QoZFsidmFsdWUiXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzKQotCi0KLWNsYXNzIFByb3BlcnR5RGVzZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlByb3BlcnR5IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIGVsZW1lbnQgPSByZWFkZXIudG9fb2JqZWN0KGRbImVsZW1lbnQiXSkgaWYgImVsZW1lbnQiIGluIGQgZWxzZSBOb25lCi0gICAgICAgIHJldHVybiBQcm9wZXJ0eShkWyJrZXkiXSwgcmVhZGVyLnRvX29iamVjdChkWyJ2YWx1ZSJdKSwgZWxlbWVudCkKLQotCi1jbGFzcyBQYXRoRGVzZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlBhdGgiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgbGFiZWxzID0gW3NldChsYWJlbCkgZm9yIGxhYmVsIGluIGRbImxhYmVscyJdXQotICAgICAgICBvYmplY3RzID0gW3JlYWRlci50b19vYmplY3QobykgZm9yIG8gaW4gZFsib2JqZWN0cyJdXQotICAgICAgICByZXR1cm4gUGF0aChsYWJlbHMsIG9iamVjdHMpCi0KLQotY2xhc3MgVHJhdmVyc2FsTWV0cmljc0Rlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpUcmF2ZXJzYWxNZXRyaWNzIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHJldHVybiByZWFkZXIudG9fb2JqZWN0KGQpCi0KLQotY2xhc3MgTWV0cmljc0Rlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpNZXRyaWNzIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHJldHVybiByZWFkZXIudG9fb2JqZWN0KGQpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoc29uVjNkMC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb25WM2QwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjMyOTc0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb25WM2QwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzk1ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLQotaW1wb3J0IGNhbGVuZGFyCi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCBqc29uCi1pbXBvcnQgdXVpZAotaW1wb3J0IG1hdGgKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0Ci1mcm9tIGRlY2ltYWwgaW1wb3J0ICoKLWltcG9ydCBsb2dnaW5nCi1mcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKLQotZnJvbSBhZW51bSBpbXBvcnQgRW51bQotZnJvbSBpc29kYXRlIGltcG9ydCBwYXJzZV9kdXJhdGlvbiwgZHVyYXRpb25faXNvZm9ybWF0Ci0KLWZyb20gZ3JlbWxpbl9weXRob24gaW1wb3J0IHN0YXRpY3MKLWZyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgRmxvYXRUeXBlLCBGdW5jdGlvblR5cGUsIFNob3J0VHlwZSwgSW50VHlwZSwgTG9uZ1R5cGUsIFR5cGVUeXBlLCBEaWN0VHlwZSwgTGlzdFR5cGUsIFwKLSAgICBTZXRUeXBlLCBTaW5nbGVCeXRlLCBCeXRlQnVmZmVyVHlwZSwgU2luZ2xlQ2hhciwgQmlnRGVjaW1hbCwgYmlnZGVjaW1hbAotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgQmluZGluZywgQnl0ZWNvZGUsIERpcmVjdGlvbiwgUCwgVGV4dFAsIFRyYXZlcnNhbCwgVHJhdmVyc2VyLCBUcmF2ZXJzYWxTdHJhdGVneSwgVAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IEVkZ2UsIFByb3BlcnR5LCBWZXJ0ZXgsIFZlcnRleFByb3BlcnR5LCBQYXRoCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby51dGlsIGltcG9ydCBIYXNoYWJsZURpY3QsIFN5bWJvbFV0aWwKLQotbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCi0KLSMgV2hlbiB3ZSBmYWxsIGJhY2sgdG8gYSBzdXBlcmNsYXNzJ3Mgc2VyaWFsaXplciwgd2UgaXRlcmF0ZSBvdmVyIHRoaXMgbWFwLgotIyBXZSB3YW50IHRoYXQgaXRlcmF0aW9uIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQsIHNvIHdlIHVzZSBhbiBPcmRlcmVkRGljdCwKLSMgbm90IGEgZGljdC4KLV9zZXJpYWxpemVycyA9IE9yZGVyZWREaWN0KCkKLV9kZXNlcmlhbGl6ZXJzID0ge30KLQotCi1jbGFzcyBHcmFwaFNPTlR5cGVUeXBlKHR5cGUpOgotICAgIGRlZiBfX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRjdCk6Ci0gICAgICAgIGNscyA9IHN1cGVyKEdyYXBoU09OVHlwZVR5cGUsIG1jcykuX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkY3QpCi0gICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKLSAgICAgICAgICAgIGlmIGNscy5weXRob25fdHlwZToKLSAgICAgICAgICAgICAgICBfc2VyaWFsaXplcnNbY2xzLnB5dGhvbl90eXBlXSA9IGNscwotICAgICAgICAgICAgaWYgY2xzLmdyYXBoc29uX3R5cGU6Ci0gICAgICAgICAgICAgICAgX2Rlc2VyaWFsaXplcnNbY2xzLmdyYXBoc29uX3R5cGVdID0gY2xzCi0gICAgICAgIHJldHVybiBjbHMKLQotCi1jbGFzcyBHcmFwaFNPTlV0aWwob2JqZWN0KToKLSAgICBUWVBFX0tFWSA9ICJAdHlwZSIKLSAgICBWQUxVRV9LRVkgPSAiQHZhbHVlIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHR5cGVkX3ZhbHVlKGNscywgdHlwZV9uYW1lLCB2YWx1ZSwgcHJlZml4PSJnIik6Ci0gICAgICAgIG91dCA9IHtjbHMuVFlQRV9LRVk6IGNscy5mb3JtYXRfdHlwZShwcmVmaXgsIHR5cGVfbmFtZSl9Ci0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgb3V0W2Nscy5WQUxVRV9LRVldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIG91dAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZvcm1hdF90eXBlKGNscywgcHJlZml4LCB0eXBlX25hbWUpOgotICAgICAgICByZXR1cm4gIiVzOiVzIiAlIChwcmVmaXgsIHR5cGVfbmFtZSkKLQotCi0jIFJlYWQvV3JpdGUgY2xhc3NlcyBzcGxpdCB0byBmb2xsb3cgcHJlY2VkZW5jZSBvZiB0aGUgSmF2YSBBUEkKLWNsYXNzIEdyYXBoU09OV3JpdGVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcmlhbGl6ZXJfbWFwPU5vbmUpOgotICAgICAgICAiIiIKLSAgICAgICAgOnBhcmFtIHNlcmlhbGl6ZXJfbWFwOiBtYXAgZnJvbSBQeXRob24gdHlwZSB0byBzZXJpYWxpemVyIGluc3RhbmNlIGltcGxlbWVudGluZyBgZGljdGlmeWAKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuc2VyaWFsaXplcnMgPSBfc2VyaWFsaXplcnMuY29weSgpCi0gICAgICAgIGlmIHNlcmlhbGl6ZXJfbWFwOgotICAgICAgICAgICAgc2VsZi5zZXJpYWxpemVycy51cGRhdGUoc2VyaWFsaXplcl9tYXApCi0KLSAgICBkZWYgd3JpdGVfb2JqZWN0KHNlbGYsIG9iamVjdERhdGEpOgotICAgICAgICAjIHRvIEpTT04KLSAgICAgICAgcmV0dXJuIGpzb24uZHVtcHMoc2VsZi50b19kaWN0KG9iamVjdERhdGEpLCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCi0KLSAgICBkZWYgdG9fZGljdChzZWxmLCBvYmopOgotICAgICAgICAiIiIKLSAgICAgICAgRW5jb2RlcyBweXRob24gb2JqZWN0cyBpbiBHcmFwaFNPTiB0eXBlLXRhZ2dlZCBkaWN0IHZhbHVlcwotICAgICAgICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2VyaWFsaXplcnNbdHlwZShvYmopXS5kaWN0aWZ5KG9iaiwgc2VsZikKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgZm9yIGtleSwgc2VyaWFsaXplciBpbiBzZWxmLnNlcmlhbGl6ZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGtleSk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLmRpY3RpZnkob2JqLCBzZWxmKQotCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KToKLSAgICAgICAgICAgIHJldHVybiBkaWN0KChzZWxmLnRvX2RpY3QoayksIHNlbGYudG9fZGljdCh2KSkgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHNldCk6Ci0gICAgICAgICAgICByZXR1cm4gc2V0KFtzZWxmLnRvX2RpY3QobykgZm9yIG8gaW4gb2JqXSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgbGlzdCk6Ci0gICAgICAgICAgICByZXR1cm4gW3NlbGYudG9fZGljdChvKSBmb3IgbyBpbiBvYmpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gb2JqCi0KLQotY2xhc3MgR3JhcGhTT05SZWFkZXIob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVzZXJpYWxpemVyX21hcD1Ob25lKToKLSAgICAgICAgIiIiCi0gICAgICAgIDpwYXJhbSBkZXNlcmlhbGl6ZXJfbWFwOiBtYXAgZnJvbSBHcmFwaFNPTiB0eXBlIHRhZyB0byBkZXNlcmlhbGl6ZXIgaW5zdGFuY2UgaW1wbGVtZW50aW5nIGBvYmplY3RpZnlgCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmRlc2VyaWFsaXplcnMgPSBfZGVzZXJpYWxpemVycy5jb3B5KCkKLSAgICAgICAgaWYgZGVzZXJpYWxpemVyX21hcDoKLSAgICAgICAgICAgIHNlbGYuZGVzZXJpYWxpemVycy51cGRhdGUoZGVzZXJpYWxpemVyX21hcCkKLQotICAgIGRlZiByZWFkX29iamVjdChzZWxmLCBqc29uX2RhdGEpOgotICAgICAgICAjIGZyb20gSlNPTgotICAgICAgICByZXR1cm4gc2VsZi50b19vYmplY3QoanNvbi5sb2Fkcyhqc29uX2RhdGEpKQotCi0gICAgZGVmIHRvX29iamVjdChzZWxmLCBvYmopOgotICAgICAgICAiIiIKLSAgICAgICAgVW5wYWNrcyBHcmFwaFNPTiB0eXBlLXRhZ2dlZCBkaWN0IHZhbHVlcyBpbnRvIG9iamVjdHMgbWFwcGVkIGluIHNlbGYuZGVzZXJpYWxpemVycwotICAgICAgICAiIiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGRpY3QpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRlc2VyaWFsaXplcnNbb2JqW0dyYXBoU09OVXRpbC5UWVBFX0tFWV1dLm9iamVjdGlmeShvYmpbR3JhcGhTT05VdGlsLlZBTFVFX0tFWV0sIHNlbGYpCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmV0dXJuIGRpY3QoKHNlbGYudG9fb2JqZWN0KGspLCBzZWxmLnRvX29iamVjdCh2KSkgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIHNldCk6Ci0gICAgICAgICAgICByZXR1cm4gc2V0KFtzZWxmLnRvX29iamVjdChvKSBmb3IgbyBpbiBvYmpdKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBsaXN0KToKLSAgICAgICAgICAgIHJldHVybiBbc2VsZi50b19vYmplY3QobykgZm9yIG8gaW4gb2JqXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG9iagotCi0KLWNsYXNzIF9HcmFwaFNPTlR5cGVJTyhvYmplY3QsIG1ldGFjbGFzcz1HcmFwaFNPTlR5cGVUeXBlKToKLSAgICBweXRob25fdHlwZSA9IE5vbmUKLSAgICBncmFwaHNvbl90eXBlID0gTm9uZQotCi0gICAgZGVmIGRpY3RpZnkoc2VsZiwgb2JqLCB3cml0ZXIpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKLQotICAgIGRlZiBvYmplY3RpZnkoc2VsZiwgZCwgcmVhZGVyKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCi0KLQotY2xhc3MgX0J5dGVjb2RlU2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZGljdGlmeV9pbnN0cnVjdGlvbnMoY2xzLCBpbnN0cnVjdGlvbnMsIHdyaXRlcik6Ci0gICAgICAgIG91dCA9IFtdCi0gICAgICAgIGZvciBpbnN0cnVjdGlvbiBpbiBpbnN0cnVjdGlvbnM6Ci0gICAgICAgICAgICBpbnN0ID0gW2luc3RydWN0aW9uWzBdXQotICAgICAgICAgICAgaW5zdC5leHRlbmQod3JpdGVyLnRvX2RpY3QoYXJnKSBmb3IgYXJnIGluIGluc3RydWN0aW9uWzE6XSkKLSAgICAgICAgICAgIG91dC5hcHBlbmQoaW5zdCkKLSAgICAgICAgcmV0dXJuIG91dAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBieXRlY29kZSwgd3JpdGVyKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShieXRlY29kZSwgVHJhdmVyc2FsKToKLSAgICAgICAgICAgIGJ5dGVjb2RlID0gYnl0ZWNvZGUuYnl0ZWNvZGUKLSAgICAgICAgb3V0ID0ge30KLSAgICAgICAgaWYgYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uczoKLSAgICAgICAgICAgIG91dFsic291cmNlIl0gPSBjbHMuX2RpY3RpZnlfaW5zdHJ1Y3Rpb25zKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMsIHdyaXRlcikKLSAgICAgICAgaWYgYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnM6Ci0gICAgICAgICAgICBvdXRbInN0ZXAiXSA9IGNscy5fZGljdGlmeV9pbnN0cnVjdGlvbnMoYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMsIHdyaXRlcikKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiQnl0ZWNvZGUiLCBvdXQpCi0KLQotY2xhc3MgVHJhdmVyc2FsU2VyaWFsaXplcihfQnl0ZWNvZGVTZXJpYWxpemVyKToKLSAgICBweXRob25fdHlwZSA9IFRyYXZlcnNhbAotCi0KLWNsYXNzIEJ5dGVjb2RlU2VyaWFsaXplcihfQnl0ZWNvZGVTZXJpYWxpemVyKToKLSAgICBweXRob25fdHlwZSA9IEJ5dGVjb2RlCi0KLQotY2xhc3MgVmVydGV4U2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gVmVydGV4Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlZlcnRleCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgdmVydGV4LCB3cml0ZXIpOgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJWZXJ0ZXgiLCB7ImlkIjogd3JpdGVyLnRvX2RpY3QodmVydGV4LmlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogd3JpdGVyLnRvX2RpY3QodmVydGV4LmxhYmVsKX0pCi0KLQotY2xhc3MgRWRnZVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IEVkZ2UKLSAgICBncmFwaHNvbl90eXBlID0gImc6RWRnZSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgZWRnZSwgd3JpdGVyKToKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiRWRnZSIsIHsiaWQiOiB3cml0ZXIudG9fZGljdChlZGdlLmlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5vdXRWLmlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWTGFiZWwiOiB3cml0ZXIudG9fZGljdChlZGdlLm91dFYubGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5sYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5WIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5pblYuaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluVkxhYmVsIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5pblYubGFiZWwpfSkKLQotCi1jbGFzcyBWZXJ0ZXhQcm9wZXJ0eVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFZlcnRleFByb3BlcnR5Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlZlcnRleFByb3BlcnR5IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCB2ZXJ0ZXhfcHJvcGVydHksIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIlZlcnRleFByb3BlcnR5IiwgeyJpZCI6IHdyaXRlci50b19kaWN0KHZlcnRleF9wcm9wZXJ0eS5pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogd3JpdGVyLnRvX2RpY3QodmVydGV4X3Byb3BlcnR5LmxhYmVsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB3cml0ZXIudG9fZGljdCh2ZXJ0ZXhfcHJvcGVydHkudmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJ0ZXgiOiB3cml0ZXIudG9fZGljdCh2ZXJ0ZXhfcHJvcGVydHkudmVydGV4LmlkKX0pCi0KLQotY2xhc3MgUHJvcGVydHlTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBQcm9wZXJ0eQotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpQcm9wZXJ0eSIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgcHJvcGVydHksIHdyaXRlcik6Ci0gICAgICAgIGVsZW1lbnREaWN0ID0gd3JpdGVyLnRvX2RpY3QocHJvcGVydHkuZWxlbWVudCkKLSAgICAgICAgaWYgZWxlbWVudERpY3QgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2YWx1ZURpY3QgPSBlbGVtZW50RGljdFsiQHZhbHVlIl0KLSAgICAgICAgICAgIGlmICJvdXRWTGFiZWwiIGluIHZhbHVlRGljdDoKLSAgICAgICAgICAgICAgICBkZWwgdmFsdWVEaWN0WyJvdXRWTGFiZWwiXQotICAgICAgICAgICAgaWYgImluVkxhYmVsIiBpbiB2YWx1ZURpY3Q6Ci0gICAgICAgICAgICAgICAgZGVsIHZhbHVlRGljdFsiaW5WTGFiZWwiXQotICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIHZhbHVlRGljdDoKLSAgICAgICAgICAgICAgICBkZWwgdmFsdWVEaWN0WyJwcm9wZXJ0aWVzIl0KLSAgICAgICAgICAgIGlmICJ2YWx1ZSIgaW4gdmFsdWVEaWN0OgotICAgICAgICAgICAgICAgIGRlbCB2YWx1ZURpY3RbInZhbHVlIl0KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiUHJvcGVydHkiLCB7ImtleSI6IHdyaXRlci50b19kaWN0KHByb3BlcnR5LmtleSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlIjogd3JpdGVyLnRvX2RpY3QocHJvcGVydHkudmFsdWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbGVtZW50IjogZWxlbWVudERpY3R9KQotCi0KLWNsYXNzIFRyYXZlcnNhbFN0cmF0ZWd5U2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gVHJhdmVyc2FsU3RyYXRlZ3kKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgc3RyYXRlZ3ksIHdyaXRlcik6Ci0gICAgICAgIHN0cmF0X2RpY3QgPSB7fQotICAgICAgICBzdHJhdF9kaWN0WyJmcWNuIl0gPSBzdHJhdGVneS5mcWNuCi0gICAgICAgIHN0cmF0X2RpY3RbImNvbmYiXSA9IHt9Ci0gICAgICAgIGZvciBrZXkgaW4gc3RyYXRlZ3kuY29uZmlndXJhdGlvbjoKLSAgICAgICAgICAgIHN0cmF0X2RpY3RbImNvbmYiXVtrZXldID0gd3JpdGVyLnRvX2RpY3Qoc3RyYXRlZ3kuY29uZmlndXJhdGlvbltrZXldKQotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKHN0cmF0ZWd5LnN0cmF0ZWd5X25hbWUsIHN0cmF0X2RpY3QpCi0KLQotY2xhc3MgVHJhdmVyc2VySU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IFRyYXZlcnNlcgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpUcmF2ZXJzZXIiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIHRyYXZlcnNlciwgd3JpdGVyKToKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiVHJhdmVyc2VyIiwgeyJ2YWx1ZSI6IHdyaXRlci50b19kaWN0KHRyYXZlcnNlci5vYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVsayI6IHdyaXRlci50b19kaWN0KHRyYXZlcnNlci5idWxrKX0pCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgcmV0dXJuIFRyYXZlcnNlcihyZWFkZXIudG9fb2JqZWN0KGRbInZhbHVlIl0pLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci50b19vYmplY3QoZFsiYnVsayJdKSkKLQotCi1jbGFzcyBFbnVtU2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gRW51bQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBlbnVtLCBfKToKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShTeW1ib2xVdGlsLnRvX2NhbWVsX2Nhc2UodHlwZShlbnVtKS5fX25hbWVfXyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVXRpbC50b19jYW1lbF9jYXNlKHN0cihlbnVtLm5hbWUpKSkKLQotCi1jbGFzcyBQU2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gUAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBwLCB3cml0ZXIpOgotICAgICAgICBvdXQgPSB7InByZWRpY2F0ZSI6IHAub3BlcmF0b3IsCi0gICAgICAgICAgICAgICAidmFsdWUiOiBbd3JpdGVyLnRvX2RpY3QocC52YWx1ZSksIHdyaXRlci50b19kaWN0KHAub3RoZXIpXSBpZiBwLm90aGVyIGlzIG5vdCBOb25lIGVsc2UKLSAgICAgICAgICAgICAgIHdyaXRlci50b19kaWN0KHAudmFsdWUpfQotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJQIiwgb3V0KQotCi0KLWNsYXNzIFRleHRQU2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gVGV4dFAKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgcCwgd3JpdGVyKToKLSAgICAgICAgb3V0ID0geyJwcmVkaWNhdGUiOiBwLm9wZXJhdG9yLAotICAgICAgICAgICAgICAgInZhbHVlIjogW3dyaXRlci50b19kaWN0KHAudmFsdWUpLCB3cml0ZXIudG9fZGljdChwLm90aGVyKV0gaWYgcC5vdGhlciBpcyBub3QgTm9uZSBlbHNlCi0gICAgICAgICAgICAgICB3cml0ZXIudG9fZGljdChwLnZhbHVlKX0KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiVGV4dFAiLCBvdXQpCi0KLQotY2xhc3MgQmluZGluZ1NlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IEJpbmRpbmcKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgYmluZGluZywgd3JpdGVyKToKLSAgICAgICAgb3V0ID0geyJrZXkiOiBiaW5kaW5nLmtleSwKLSAgICAgICAgICAgICAgICJ2YWx1ZSI6IHdyaXRlci50b19kaWN0KGJpbmRpbmcudmFsdWUpfQotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJCaW5kaW5nIiwgb3V0KQotCi0KLWNsYXNzIExhbWJkYVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IEZ1bmN0aW9uVHlwZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBsYW1iZGFfb2JqZWN0LCB3cml0ZXIpOgotICAgICAgICBsYW1iZGFfcmVzdWx0ID0gbGFtYmRhX29iamVjdCgpCi0gICAgICAgIHNjcmlwdCA9IGxhbWJkYV9yZXN1bHQgaWYgaXNpbnN0YW5jZShsYW1iZGFfcmVzdWx0LCBzdHIpIGVsc2UgbGFtYmRhX3Jlc3VsdFswXQotICAgICAgICBsYW5ndWFnZSA9IHN0YXRpY3MuZGVmYXVsdF9sYW1iZGFfbGFuZ3VhZ2UgaWYgaXNpbnN0YW5jZShsYW1iZGFfcmVzdWx0LCBzdHIpIGVsc2UgbGFtYmRhX3Jlc3VsdFsxXQotICAgICAgICBvdXQgPSB7InNjcmlwdCI6IHNjcmlwdCwKLSAgICAgICAgICAgICAgICJsYW5ndWFnZSI6IGxhbmd1YWdlfQotICAgICAgICBpZiBsYW5ndWFnZSA9PSAiZ3JlbWxpbi1ncm9vdnkiIGFuZCAiLT4iIGluIHNjcmlwdDoKLSAgICAgICAgICAgICMgaWYgdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgYWRkZWQgcGFyYW1ldGVycyB0byB0aGUgZ3Jvb3Z5IGNsb3N1cmUgdGhlbiB3ZSBjYW4gZWFzaWx5IGRldGVjdCBvbmUgb3IgdHdvCi0gICAgICAgICAgICAjIGFyZyBsYW1iZGFzIC0gaWYgd2UgY2FuJ3QgZGV0ZWN0IDEgb3IgMiB0aGVuIHdlIGp1c3QgZ28gd2l0aCAidW5rbm93biIKLSAgICAgICAgICAgIGFyZ3MgPSBzY3JpcHRbMDpzY3JpcHQuZmluZCgiLT4iKV0KLSAgICAgICAgICAgIG91dFsiYXJndW1lbnRzIl0gPSAyIGlmICIsIiBpbiBhcmdzIGVsc2UgMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb3V0WyJhcmd1bWVudHMiXSA9IC0xCi0KLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiTGFtYmRhIiwgb3V0KQotCi0KLWNsYXNzIFR5cGVTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBUeXBlVHlwZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCB0eXAsIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiB3cml0ZXIudG9fZGljdCh0eXAoKSkKLQotCi1jbGFzcyBVVUlESU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IHV1aWQuVVVJRAotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpVVUlEIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJVVUlEIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgc3RyKG9iaikpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgcmV0dXJuIGNscy5weXRob25fdHlwZShkKQotCi0KLWNsYXNzIERhdGVJTyhfR3JhcGhTT05UeXBlSU8pOgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpEYXRlIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJEYXRlIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlcik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRpbWVzdGFtcF9zZWNvbmRzID0gY2FsZW5kYXIudGltZWdtKG9iai51dGN0aW1ldHVwbGUoKSkKLSAgICAgICAgICAgIHB0cyA9IHRpbWVzdGFtcF9zZWNvbmRzICogMWUzICsgZ2V0YXR0cihvYmosICdtaWNyb3NlY29uZCcsIDApIC8gMWUzCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHB0cyA9IGNhbGVuZGFyLnRpbWVnbShvYmoudGltZXR1cGxlKCkpICogMWUzCi0KLSAgICAgICAgdHMgPSBpbnQocm91bmQocHRzKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCB0cykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCB0cywgcmVhZGVyKToKLSAgICAgICAgIyBQeXRob24gdGltZXN0YW1wIGV4cGVjdHMgc2Vjb25kcwotICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCh0cyAvIDEwMDAuMCkKLQotCi1jbGFzcyBPZmZzZXREYXRlVGltZUlPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBkYXRldGltZS5kYXRldGltZQotICAgIGdyYXBoc29uX3R5cGUgPSAiZ3g6T2Zmc2V0RGF0ZVRpbWUiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIk9mZnNldERhdGVUaW1lIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlcik6Ci0gICAgICAgIGlmIG9iai50emluZm8gaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBEYXRlSU8uZGljdGlmeShvYmosIHdyaXRlcikKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBvYmouaXNvZm9ybWF0KCksICJneCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZHQsIHJlYWRlcik6Ci0gICAgICAgICMgc3BlY2lhbGx5IGhhbmRsaW5nIGFzIHB5dGhvbiBpc29mb3JtYXQgZG9lcyBub3Qgc3VwcG9ydCB6dWx1IHVudGlsIDMuMTEKLSAgICAgICAgZHRfaXNvID0gZHRbOi0xXSArICcrMDA6MDAnIGlmIGR0LmVuZHN3aXRoKCdaJykgZWxzZSBkdAotICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdChkdF9pc28pCi0KLQotIyBCYXNlZCBvbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGlzIGNsYXNzIG11c3QgYWx3YXlzIGJlIGRlY2xhcmVkIGJlZm9yZSBGbG9hdElPLgotIyBTZWVtcyBwcmV0dHkgZnJhZ2lsZSBmb3IgZnV0dXJlIG1haW50YWluZXJzLiBNYXliZSBsb29rIGludG8gdGhpcy4KLWNsYXNzIFRpbWVzdGFtcElPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgIiIiQSB0aW1lc3RhbXAgaW4gUHl0aG9uIGlzIHR5cGUgZmxvYXQiIiIKLSAgICBweXRob25fdHlwZSA9IHN0YXRpY3MudGltZXN0YW1wCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlRpbWVzdGFtcCIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiVGltZXN0YW1wIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlcik6Ci0gICAgICAgICMgSmF2YSB0aW1lc3RhbXAgZXhwZWN0cyBtaWxsaXNlY29uZHMgaW50ZWdlcgotICAgICAgICAjIEhhdmUgdG8gdXNlIGludCBiZWNhdXNlIG9mIGxlZ2FjeSBQeXRob24KLSAgICAgICAgdHMgPSBpbnQocm91bmQob2JqICogMTAwMCkpCi0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgdHMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdHMsIHJlYWRlcik6Ci0gICAgICAgICMgUHl0aG9uIHRpbWVzdGFtcCBleHBlY3RzIHNlY29uZHMKLSAgICAgICAgcmV0dXJuIGNscy5weXRob25fdHlwZSh0cyAvIDEwMDAuMCkKLQotCi1jbGFzcyBfTnVtYmVySU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6ICAjIGJlY2F1c2UgaXNpbnN0YW5jZShGYWxzZSwgaW50KSBhbmQgaXNpbnN0YW5jZShUcnVlLCBpbnQpCi0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIG4pCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBjbHMucHl0aG9uX3R5cGUodikKLQotCi1jbGFzcyBMaXN0SU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IExpc3RUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkxpc3QiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIGwsIHdyaXRlcik6Ci0gICAgICAgIG5ld19saXN0ID0gW10KLSAgICAgICAgZm9yIG9iaiBpbiBsOgotICAgICAgICAgICAgbmV3X2xpc3QuYXBwZW5kKHdyaXRlci50b19kaWN0KG9iaikpCi0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkxpc3QiLCBuZXdfbGlzdCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBsLCByZWFkZXIpOgotICAgICAgICBuZXdfbGlzdCA9IFtdCi0gICAgICAgIGZvciBvYmogaW4gbDoKLSAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChyZWFkZXIudG9fb2JqZWN0KG9iaikpCi0gICAgICAgIHJldHVybiBuZXdfbGlzdAotCi0KLWNsYXNzIFNldElPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBTZXRUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlNldCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgcywgd3JpdGVyKToKLSAgICAgICAgbmV3X2xpc3QgPSBbXQotICAgICAgICBmb3Igb2JqIGluIHM6Ci0gICAgICAgICAgICBuZXdfbGlzdC5hcHBlbmQod3JpdGVyLnRvX2RpY3Qob2JqKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiU2V0IiwgbmV3X2xpc3QpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgcywgcmVhZGVyKToKLSAgICAgICAgIiIiCi0gICAgICAgIEJ5IGRlZmF1bHQsIHJldHVybnMgYSBweXRob24gc2V0Ci0KLSAgICAgICAgSW4gY2FzZSBKYXZhIHJldHVybnMgbnVtZXJpYyB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoaWNoCi0gICAgICAgIHB5dGhvbiBkb24ndCByZWNvZ25pemUsIGNvZXJjZSBhbmQgcmV0dXJuIGEgbGlzdC4KLSAgICAgICAgU2VlIGNvbW1lbnRzIG9mIFRJTktFUlBPUC0xODQ0IGZvciBtb3JlIGRldGFpbHMKLQotICAgICAgICBJbiBjYXNlIHRoZSBzZXQgY29udGFpbnMgbm9uLWhhc2hhYmxlIGVsZW1lbnRzIChlLmcuIGRpY3QsIGxpc3QpLAotICAgICAgICBjb2VyY2UgYW5kIHJldHVybiBhIGxpc3QuCi0gICAgICAgIFNlZSBUSU5LRVJQT1AtMzIzMiBmb3IgbW9yZSBkZXRhaWxzCi0gICAgICAgICIiIgotICAgICAgICBuZXdfbGlzdCA9IFtyZWFkZXIudG9fb2JqZWN0KG9iaikgZm9yIG9iaiBpbiBzXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuZXdfc2V0ID0gc2V0KG5ld19saXN0KQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgbG9nLndhcm5pbmcoIkNvZXJjaW5nIGc6U2V0IHRvIGxpc3QgYXMgaXQgY29udGFpbnMgdW5oYXNoYWJsZSBlbGVtZW50cyAoZS5nLiBkaWN0LCBsaXN0KS4gIgotICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBUSU5LRVJQT1AtMzIzMiBmb3IgbW9yZSBkZXRhaWxzLiIpCi0gICAgICAgICAgICByZXR1cm4gbmV3X2xpc3QKLSAgICAgICAgaWYgbGVuKG5ld19saXN0KSAhPSBsZW4obmV3X3NldCk6Ci0gICAgICAgICAgICBsb2cud2FybmluZygiQ29lcmNpbmcgZzpTZXQgdG8gbGlzdCBkdWUgdG8gamF2YSBudW1lcmljIHZhbHVlcy4gIgotICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBUSU5LRVJQT1AtMTg0NCBmb3IgbW9yZSBkZXRhaWxzLiIpCi0gICAgICAgICAgICByZXR1cm4gbmV3X2xpc3QKLQotICAgICAgICByZXR1cm4gbmV3X3NldAotCi0KLWNsYXNzIE1hcFR5cGUoX0dyYXBoU09OVHlwZUlPKToKLSAgICBweXRob25fdHlwZSA9IERpY3RUeXBlCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOk1hcCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgZCwgd3JpdGVyKToKLSAgICAgICAgbCA9IFtdCi0gICAgICAgIGZvciBrZXkgaW4gZDoKLSAgICAgICAgICAgIGwuYXBwZW5kKHdyaXRlci50b19kaWN0KGtleSkpCi0gICAgICAgICAgICBsLmFwcGVuZCh3cml0ZXIudG9fZGljdChkW2tleV0pKQotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJNYXAiLCBsKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGwsIHJlYWRlcik6Ci0gICAgICAgIG5ld19kaWN0ID0ge30KLSAgICAgICAgaWYgbGVuKGwpID4gMDoKLSAgICAgICAgICAgIHggPSAwCi0gICAgICAgICAgICB3aGlsZSB4IDwgbGVuKGwpOgotICAgICAgICAgICAgICAgIG5ld19kaWN0W0hhc2hhYmxlRGljdC5vZihyZWFkZXIudG9fb2JqZWN0KGxbeF0pKV0gPSByZWFkZXIudG9fb2JqZWN0KGxbeCArIDFdKQotICAgICAgICAgICAgICAgIHggPSB4ICsgMgotICAgICAgICByZXR1cm4gbmV3X2RpY3QKLQotCi1jbGFzcyBCdWxrU2V0SU8oX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6QnVsa1NldCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBsLCByZWFkZXIpOgotICAgICAgICBuZXdfbGlzdCA9IFtdCi0KLSAgICAgICAgIyB0aGlzIGFwcHJvYWNoIGJhc2ljYWxseSBtaW1pY3Mgd2hhdCBjdXJyZW50bHkgZXhpc3RlZCBpbiAzLjMuNCBhbmQgcHJpb3IgdmVyc2lvbnMgd2hlcmUgQnVsa1NldCBpcwotICAgICAgICAjIGJhc2ljYWxseSBqdXN0IGNvZXJjZWQgdG8gbGlzdC4gdGhlIGxpbWl0YXRpb24gaGVyZSBpcyB0aGF0IGlmIHRoZSB2YWx1ZSBvZiBhIGJ1bGsgZXhjZWVkcyB0aGUgc2l6ZSBvZgotICAgICAgICAjIGEgbGlzdCAoaW50byB0aGUgbG9uZyBzcGFjZSkgdGhlbiBzdHVmZiB3b24ndCB3b3JrIG5pY2UuCi0gICAgICAgIGlmIGxlbihsKSA+IDA6Ci0gICAgICAgICAgICB4ID0gMAotICAgICAgICAgICAgd2hpbGUgeCA8IGxlbihsKToKLSAgICAgICAgICAgICAgICBvYmogPSByZWFkZXIudG9fb2JqZWN0KGxbeF0pCi0gICAgICAgICAgICAgICAgYnVsayA9IHJlYWRlci50b19vYmplY3QobFt4ICsgMV0pCi0gICAgICAgICAgICAgICAgZm9yIHkgaW4gcmFuZ2UoYnVsayk6Ci0gICAgICAgICAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZChvYmopCi0gICAgICAgICAgICAgICAgeCA9IHggKyAyCi0gICAgICAgIHJldHVybiBuZXdfbGlzdAotCi0KLWNsYXNzIEZsb2F0SU8oX051bWJlcklPKToKLSAgICBweXRob25fdHlwZSA9IEZsb2F0VHlwZQotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpGbG9hdCIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRmxvYXQiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6ICAjIGJlY2F1c2UgaXNpbnN0YW5jZShGYWxzZSwgaW50KSBhbmQgaXNpbnN0YW5jZShUcnVlLCBpbnQpCi0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICBlbGlmIG1hdGguaXNuYW4obik6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsICJOYU4iKQotICAgICAgICBlbGlmIG1hdGguaXNpbmYobikgYW5kIG4gPiAwOgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCAiSW5maW5pdHkiKQotICAgICAgICBlbGlmIG1hdGguaXNpbmYobikgYW5kIG4gPCAwOgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCAiLUluZmluaXR5IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBzdHIpOgotICAgICAgICAgICAgaWYgdiA9PSAnTmFOJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQoJ25hbicpCi0gICAgICAgICAgICBlbGlmIHYgPT0gIkluZmluaXR5IjoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQoJ2luZicpCi0gICAgICAgICAgICBlbGlmIHYgPT0gIi1JbmZpbml0eSI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KCctaW5mJykKLQotICAgICAgICByZXR1cm4gY2xzLnB5dGhvbl90eXBlKHYpCi0KLQotY2xhc3MgQmlnRGVjaW1hbElPKF9OdW1iZXJJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBCaWdEZWNpbWFsCi0gICAgZ3JhcGhzb25fdHlwZSA9ICJneDpCaWdEZWNpbWFsIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJCaWdEZWNpbWFsIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIHN0cihuLnZhbHVlKSwgImd4IikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKLSAgICAgICAgcmV0dXJuIGJpZ2RlY2ltYWwodikKLQotCi1jbGFzcyBEb3VibGVJTyhGbG9hdElPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6RG91YmxlIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJEb3VibGUiCi0KLQotY2xhc3MgSW50NjRJTyhfTnVtYmVySU8pOgotICAgIHB5dGhvbl90eXBlID0gTG9uZ1R5cGUKLSAgICBncmFwaHNvbl90eXBlID0gImc6SW50NjQiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkludDY0IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgotICAgICAgICAjIGlmIHdlIGV4Y2VlZCBKYXZhIGxvbmcgcmFuZ2UgdGhlbiB3ZSBuZWVkIGEgQmlnSW50ZWdlcgotICAgICAgICBpZiBpc2luc3RhbmNlKG4sIGJvb2wpOgotICAgICAgICAgICAgcmV0dXJuIG4KLSAgICAgICAgZWxpZiBuIDwgLTkyMjMzNzIwMzY4NTQ3NzU4MDggb3IgbiA+IDkyMjMzNzIwMzY4NTQ3NzU4MDc6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJCaWdJbnRlZ2VyIiwgc3RyKG4pLCAiZ3giKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuKQotCi0KLWNsYXNzIEJpZ0ludGVnZXJJTyhJbnQ2NElPKToKLSAgICBncmFwaHNvbl90eXBlID0gImd4OkJpZ0ludGVnZXIiCi0KLQotY2xhc3MgSW50MzJJTyhJbnQ2NElPKToKLSAgICBweXRob25fdHlwZSA9IEludFR5cGUKLSAgICBncmFwaHNvbl90eXBlID0gImc6SW50MzIiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkludDMyIgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgotICAgICAgICAjIGlmIHdlIGV4Y2VlZCBKYXZhIGludCByYW5nZSB0aGVuIHdlIG5lZWQgYSBsb25nCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6Ci0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICBlbGlmIG4gPCAtOTIyMzM3MjAzNjg1NDc3NTgwOCBvciBuID4gOTIyMzM3MjAzNjg1NDc3NTgwNzoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkJpZ0ludGVnZXIiLCBzdHIobiksICJneCIpCi0gICAgICAgIGVsaWYgbiA8IC0yMTQ3NDgzNjQ4IG9yIG4gPiAyMTQ3NDgzNjQ3OgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiSW50NjQiLCBuKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuKQotCi0KLWNsYXNzIEludDE2SU8oSW50NjRJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSBTaG9ydFR5cGUKLSAgICBncmFwaHNvbl90eXBlID0gImd4OkludDE2IgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJJbnQxNiIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKLSAgICAgICAgIyBpZiB3ZSBleGNlZWQgSmF2YSBpbnQgcmFuZ2UgdGhlbiB3ZSBuZWVkIGEgbG9uZwotICAgICAgICBpZiBpc2luc3RhbmNlKG4sIGJvb2wpOgotICAgICAgICAgICAgcmV0dXJuIG4KLSAgICAgICAgZWxpZiBuIDwgLTkyMjMzNzIwMzY4NTQ3NzU4MDggb3IgbiA+IDkyMjMzNzIwMzY4NTQ3NzU4MDc6Ci0gICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJCaWdJbnRlZ2VyIiwgc3RyKG4pLCAiZ3giKQotICAgICAgICBlbGlmIG4gPCAtMjE0NzQ4MzY0OCBvciBuID4gMjE0NzQ4MzY0NzoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkludDY0IiwgbikKLSAgICAgICAgZWxpZiBuIDwgLTMyNzY4IG9yIG4gPiAzMjc2NzoKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkludDMyIiwgbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbiwgImd4IikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKLSAgICAgICAgcmV0dXJuIGludC5fX25ld19fKFNob3J0VHlwZSwgdikKLQotCi1jbGFzcyBCeXRlSU8oX051bWJlcklPKToKLSAgICBweXRob25fdHlwZSA9IFNpbmdsZUJ5dGUKLSAgICBncmFwaHNvbl90eXBlID0gImd4OkJ5dGUiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkJ5dGUiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6ICAjIGJlY2F1c2UgaXNpbnN0YW5jZShGYWxzZSwgaW50KSBhbmQgaXNpbnN0YW5jZShUcnVlLCBpbnQpCi0gICAgICAgICAgICByZXR1cm4gbgotICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIG4sICJneCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBpbnQuX19uZXdfXyhTaW5nbGVCeXRlLCB2KQotCi0KLWNsYXNzIEJ5dGVCdWZmZXJJTyhfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gQnl0ZUJ1ZmZlclR5cGUKLSAgICBncmFwaHNvbl90eXBlID0gImd4OkJ5dGVCdWZmZXIiCi0gICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkJ5dGVCdWZmZXIiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgIiIuam9pbihjaHIoeCkgZm9yIHggaW4gbiksICJneCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBjbHMucHl0aG9uX3R5cGUodiwgInV0ZjgiKQotCi0KLWNsYXNzIENoYXJJTyhfR3JhcGhTT05UeXBlSU8pOgotICAgIHB5dGhvbl90eXBlID0gU2luZ2xlQ2hhcgotICAgIGdyYXBoc29uX3R5cGUgPSAiZ3g6Q2hhciIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiQ2hhciIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuLCAiZ3giKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIHYsIF8pOgotICAgICAgICByZXR1cm4gc3RyLl9fbmV3X18oU2luZ2xlQ2hhciwgdikKLQotCi1jbGFzcyBEdXJhdGlvbklPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgcHl0aG9uX3R5cGUgPSB0aW1lZGVsdGEKLSAgICBncmFwaHNvbl90eXBlID0gImd4OkR1cmF0aW9uIgotICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJEdXJhdGlvbiIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKLSAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBkdXJhdGlvbl9pc29mb3JtYXQobiksICJneCIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6Ci0gICAgICAgIHJldHVybiBwYXJzZV9kdXJhdGlvbih2KQotCi0KLWNsYXNzIFZlcnRleERlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgotICAgIGdyYXBoc29uX3R5cGUgPSAiZzpWZXJ0ZXgiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgcHJvcGVydGllcyA9IFtdCi0gICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBkOgotICAgICAgICAgICAgcHJvcGVydGllcyA9IHJlYWRlci50b19vYmplY3QoZFsicHJvcGVydGllcyJdKQotICAgICAgICAgICAgaWYgcHJvcGVydGllcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gW2l0ZW0gZm9yIHN1Ymxpc3QgaW4gcHJvcGVydGllcy52YWx1ZXMoKSBmb3IgaXRlbSBpbiBzdWJsaXN0XQotICAgICAgICByZXR1cm4gVmVydGV4KHJlYWRlci50b19vYmplY3QoZFsiaWQiXSksIGQuZ2V0KCJsYWJlbCIsICJ2ZXJ0ZXgiKSwgcHJvcGVydGllcykKLQotCi1jbGFzcyBFZGdlRGVzZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkVkZ2UiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgcHJvcGVydGllcyA9IFtdCi0gICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBkOgotICAgICAgICAgICAgcHJvcGVydGllcyA9IHJlYWRlci50b19vYmplY3QoZFsicHJvcGVydGllcyJdKQotICAgICAgICAgICAgaWYgcHJvcGVydGllcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gbGlzdChwcm9wZXJ0aWVzLnZhbHVlcygpKQotICAgICAgICByZXR1cm4gRWRnZShyZWFkZXIudG9fb2JqZWN0KGRbImlkIl0pLAotICAgICAgICAgICAgICAgICAgICBWZXJ0ZXgocmVhZGVyLnRvX29iamVjdChkWyJvdXRWIl0pLCBkLmdldCgib3V0VkxhYmVsIiwgInZlcnRleCIpKSwKLSAgICAgICAgICAgICAgICAgICAgZC5nZXQoImxhYmVsIiwgImVkZ2UiKSwKLSAgICAgICAgICAgICAgICAgICAgVmVydGV4KHJlYWRlci50b19vYmplY3QoZFsiaW5WIl0pLCBkLmdldCgiaW5WTGFiZWwiLCAidmVydGV4IikpLAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzKQotCi0KLWNsYXNzIFZlcnRleFByb3BlcnR5RGVzZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOlZlcnRleFByb3BlcnR5IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6Ci0gICAgICAgIHByb3BlcnRpZXMgPSBbXQotICAgICAgICBpZiAicHJvcGVydGllcyIgaW4gZDoKLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSByZWFkZXIudG9fb2JqZWN0KGRbInByb3BlcnRpZXMiXSkKLSAgICAgICAgICAgIGlmIHByb3BlcnRpZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IGxpc3QobWFwKGxhbWJkYSB4OiBQcm9wZXJ0eSh4WzBdLCB4WzFdLCBOb25lKSwgcHJvcGVydGllcy5pdGVtcygpKSkKLSAgICAgICAgdmVydGV4ID0gVmVydGV4KHJlYWRlci50b19vYmplY3QoZC5nZXQoInZlcnRleCIpKSkgaWYgInZlcnRleCIgaW4gZCBlbHNlIE5vbmUKLSAgICAgICAgcmV0dXJuIFZlcnRleFByb3BlcnR5KHJlYWRlci50b19vYmplY3QoZFsiaWQiXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWyJsYWJlbCJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnRvX29iamVjdChkWyJ2YWx1ZSJdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMpCi0KLQotY2xhc3MgUHJvcGVydHlEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6UHJvcGVydHkiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgZWxlbWVudCA9IHJlYWRlci50b19vYmplY3QoZFsiZWxlbWVudCJdKSBpZiAiZWxlbWVudCIgaW4gZCBlbHNlIE5vbmUKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5KGRbImtleSJdLCByZWFkZXIudG9fb2JqZWN0KGRbInZhbHVlIl0pLCBlbGVtZW50KQotCi0KLWNsYXNzIFBhdGhEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6UGF0aCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgotICAgICAgICByZXR1cm4gUGF0aChyZWFkZXIudG9fb2JqZWN0KGRbImxhYmVscyJdKSwgcmVhZGVyLnRvX29iamVjdChkWyJvYmplY3RzIl0pKQotCi0KLWNsYXNzIFREZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6VCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgotICAgICAgICByZXR1cm4gVFtkXQotCi0KLWNsYXNzIERpcmVjdGlvbklPKF9HcmFwaFNPTlR5cGVJTyk6Ci0gICAgZ3JhcGhzb25fdHlwZSA9ICJnOkRpcmVjdGlvbiIKLSAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRGlyZWN0aW9uIgotICAgIHB5dGhvbl90eXBlID0gRGlyZWN0aW9uCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZGljdGlmeShjbHMsIGQsIHdyaXRlcik6Ci0gICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgZC5uYW1lLCAiZyIpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKLSAgICAgICAgcmV0dXJuIERpcmVjdGlvbltkXQotCi0KLWNsYXNzIFRyYXZlcnNhbE1ldHJpY3NEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6VHJhdmVyc2FsTWV0cmljcyIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgotICAgICAgICByZXR1cm4gcmVhZGVyLnRvX29iamVjdChkKQotCi0KLWNsYXNzIE1ldHJpY3NEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKLSAgICBncmFwaHNvbl90eXBlID0gImc6TWV0cmljcyIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgotICAgICAgICByZXR1cm4gcmVhZGVyLnRvX29iamVjdChkKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0cnVjdHVyZS9pby9ncmFwaHNvblY0LnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0cnVjdHVyZS9pby9ncmFwaHNvblY0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYWRkNDQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL2dyYXBoc29uVjQucHkKQEAgLTAsMCArMSw1OTkgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KK2ltcG9ydCBiYXNlNjQKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQganNvbgoraW1wb3J0IHV1aWQKK2ltcG9ydCBtYXRoCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSBkZWNpbWFsIGltcG9ydCAqCitpbXBvcnQgbG9nZ2luZworZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZWRlbHRhCisKK2Zyb20gYWVudW0gaW1wb3J0IEVudW0KK2Zyb20gaXNvZGF0ZSBpbXBvcnQgcGFyc2VfZHVyYXRpb24sIGR1cmF0aW9uX2lzb2Zvcm1hdAorCitmcm9tIGdyZW1saW5fcHl0aG9uIGltcG9ydCBzdGF0aWNzCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0IEZsb2F0VHlwZSwgQmlnRGVjaW1hbCwgU2hvcnRUeXBlLCBJbnRUeXBlLCBMb25nVHlwZSwgVHlwZVR5cGUsIERpY3RUeXBlLCBMaXN0VHlwZSwgU2V0VHlwZSwgU2luZ2xlQnl0ZSwgU2luZ2xlQ2hhciwgYmlnZGVjaW1hbAorZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgRGlyZWN0aW9uLCBQLCBUZXh0UCwgVHJhdmVyc2FsLCBUcmF2ZXJzZXIsIFRyYXZlcnNhbFN0cmF0ZWd5LCBUCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgRWRnZSwgUHJvcGVydHksIFZlcnRleCwgVmVydGV4UHJvcGVydHksIFBhdGgKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLnV0aWwgaW1wb3J0IEhhc2hhYmxlRGljdCwgU3ltYm9sVXRpbAorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworIyBXaGVuIHdlIGZhbGwgYmFjayB0byBhIHN1cGVyY2xhc3MncyBzZXJpYWxpemVyLCB3ZSBpdGVyYXRlIG92ZXIgdGhpcyBtYXAuCisjIFdlIHdhbnQgdGhhdCBpdGVyYXRpb24gb3JkZXIgdG8gYmUgY29uc2lzdGVudCwgc28gd2UgdXNlIGFuIE9yZGVyZWREaWN0LAorIyBub3QgYSBkaWN0LgorX3NlcmlhbGl6ZXJzID0gT3JkZXJlZERpY3QoKQorX2Rlc2VyaWFsaXplcnMgPSB7fQorCisKK2NsYXNzIEdyYXBoU09OVHlwZVR5cGUodHlwZSk6CisgICAgZGVmIF9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgZGN0KToKKyAgICAgICAgY2xzID0gc3VwZXIoR3JhcGhTT05UeXBlVHlwZSwgbWNzKS5fX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRjdCkKKyAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgaWYgY2xzLnB5dGhvbl90eXBlOgorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVyc1tjbHMucHl0aG9uX3R5cGVdID0gY2xzCisgICAgICAgICAgICBpZiBjbHMuZ3JhcGhzb25fdHlwZToKKyAgICAgICAgICAgICAgICBfZGVzZXJpYWxpemVyc1tjbHMuZ3JhcGhzb25fdHlwZV0gPSBjbHMKKyAgICAgICAgcmV0dXJuIGNscworCisKK2NsYXNzIEdyYXBoU09OVXRpbChvYmplY3QpOgorICAgIFRZUEVfS0VZID0gIkB0eXBlIgorICAgIFZBTFVFX0tFWSA9ICJAdmFsdWUiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdHlwZWRfdmFsdWUoY2xzLCB0eXBlX25hbWUsIHZhbHVlLCBwcmVmaXg9ImciKToKKyAgICAgICAgb3V0ID0ge2Nscy5UWVBFX0tFWTogY2xzLmZvcm1hdF90eXBlKHByZWZpeCwgdHlwZV9uYW1lKX0KKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvdXRbY2xzLlZBTFVFX0tFWV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gb3V0CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZm9ybWF0X3R5cGUoY2xzLCBwcmVmaXgsIHR5cGVfbmFtZSk6CisgICAgICAgIHJldHVybiAiJXM6JXMiICUgKHByZWZpeCwgdHlwZV9uYW1lKQorCisKKyMgUmVhZC9Xcml0ZSBjbGFzc2VzIHNwbGl0IHRvIGZvbGxvdyBwcmVjZWRlbmNlIG9mIHRoZSBKYXZhIEFQSQorY2xhc3MgR3JhcGhTT05Xcml0ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VyaWFsaXplcl9tYXA9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICA6cGFyYW0gc2VyaWFsaXplcl9tYXA6IG1hcCBmcm9tIFB5dGhvbiB0eXBlIHRvIHNlcmlhbGl6ZXIgaW5zdGFuY2UgaW1wbGVtZW50aW5nIGBkaWN0aWZ5YAorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZXJpYWxpemVycyA9IF9zZXJpYWxpemVycy5jb3B5KCkKKyAgICAgICAgaWYgc2VyaWFsaXplcl9tYXA6CisgICAgICAgICAgICBzZWxmLnNlcmlhbGl6ZXJzLnVwZGF0ZShzZXJpYWxpemVyX21hcCkKKworICAgIGRlZiB3cml0ZV9vYmplY3Qoc2VsZiwgb2JqZWN0RGF0YSk6CisgICAgICAgICMgdG8gSlNPTgorICAgICAgICByZXR1cm4ganNvbi5kdW1wcyhzZWxmLnRvX2RpY3Qob2JqZWN0RGF0YSksIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKworICAgIGRlZiB0b19kaWN0KHNlbGYsIG9iaik6CisgICAgICAgICIiIgorICAgICAgICBFbmNvZGVzIHB5dGhvbiBvYmplY3RzIGluIEdyYXBoU09OIHR5cGUtdGFnZ2VkIGRpY3QgdmFsdWVzCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXJpYWxpemVyc1t0eXBlKG9iaildLmRpY3RpZnkob2JqLCBzZWxmKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBmb3Iga2V5LCBzZXJpYWxpemVyIGluIHNlbGYuc2VyaWFsaXplcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwga2V5KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZGljdGlmeShvYmosIHNlbGYpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIGRpY3QpOgorICAgICAgICAgICAgcmV0dXJuIGRpY3QoKHNlbGYudG9fZGljdChrKSwgc2VsZi50b19kaWN0KHYpKSBmb3IgaywgdiBpbiBvYmouaXRlbXMoKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgc2V0KToKKyAgICAgICAgICAgIHJldHVybiBzZXQoW3NlbGYudG9fZGljdChvKSBmb3IgbyBpbiBvYmpdKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBsaXN0KToKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi50b19kaWN0KG8pIGZvciBvIGluIG9ial0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvYmoKKworCitjbGFzcyBHcmFwaFNPTlJlYWRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXNlcmlhbGl6ZXJfbWFwPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgOnBhcmFtIGRlc2VyaWFsaXplcl9tYXA6IG1hcCBmcm9tIEdyYXBoU09OIHR5cGUgdGFnIHRvIGRlc2VyaWFsaXplciBpbnN0YW5jZSBpbXBsZW1lbnRpbmcgYG9iamVjdGlmeWAKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZGVzZXJpYWxpemVycyA9IF9kZXNlcmlhbGl6ZXJzLmNvcHkoKQorICAgICAgICBpZiBkZXNlcmlhbGl6ZXJfbWFwOgorICAgICAgICAgICAgc2VsZi5kZXNlcmlhbGl6ZXJzLnVwZGF0ZShkZXNlcmlhbGl6ZXJfbWFwKQorCisgICAgZGVmIHJlYWRfb2JqZWN0KHNlbGYsIGpzb25fZGF0YSk6CisgICAgICAgICMgZnJvbSBKU09OCisgICAgICAgIHJldHVybiBzZWxmLnRvX29iamVjdChqc29uLmxvYWRzKGpzb25fZGF0YSkpCisKKyAgICBkZWYgdG9fb2JqZWN0KHNlbGYsIG9iaik6CisgICAgICAgICIiIgorICAgICAgICBVbnBhY2tzIEdyYXBoU09OIHR5cGUtdGFnZ2VkIGRpY3QgdmFsdWVzIGludG8gb2JqZWN0cyBtYXBwZWQgaW4gc2VsZi5kZXNlcmlhbGl6ZXJzCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVzZXJpYWxpemVyc1tvYmpbR3JhcGhTT05VdGlsLlRZUEVfS0VZXV0ub2JqZWN0aWZ5KG9ialtHcmFwaFNPTlV0aWwuVkFMVUVfS0VZXSwgc2VsZikKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXR1cm4gZGljdCgoc2VsZi50b19vYmplY3QoayksIHNlbGYudG9fb2JqZWN0KHYpKSBmb3IgaywgdiBpbiBvYmouaXRlbXMoKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgc2V0KToKKyAgICAgICAgICAgIHJldHVybiBzZXQoW3NlbGYudG9fb2JqZWN0KG8pIGZvciBvIGluIG9ial0pCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGxpc3QpOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLnRvX29iamVjdChvKSBmb3IgbyBpbiBvYmpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gb2JqCisKKworY2xhc3MgX0dyYXBoU09OVHlwZUlPKG9iamVjdCwgbWV0YWNsYXNzPUdyYXBoU09OVHlwZVR5cGUpOgorICAgIHB5dGhvbl90eXBlID0gTm9uZQorICAgIGdyYXBoc29uX3R5cGUgPSBOb25lCisKKyAgICBkZWYgZGljdGlmeShzZWxmLCBvYmosIHdyaXRlcik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIG9iamVjdGlmeShzZWxmLCBkLCByZWFkZXIpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworCitjbGFzcyBWZXJ0ZXhTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBWZXJ0ZXgKKyAgICBncmFwaHNvbl90eXBlID0gImc6VmVydGV4IgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCB2ZXJ0ZXgsIHdyaXRlcik6CisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIlZlcnRleCIsIHsiaWQiOiB3cml0ZXIudG9fZGljdCh2ZXJ0ZXguaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbd3JpdGVyLnRvX2RpY3QodmVydGV4LmxhYmVsKV19KQorCisKK2NsYXNzIEVkZ2VTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBFZGdlCisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkVkZ2UiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIGVkZ2UsIHdyaXRlcik6CisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkVkZ2UiLCB7ImlkIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogW3dyaXRlci50b19kaWN0KGVkZ2UubGFiZWwpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5WIjogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWQiOiB3cml0ZXIudG9fZGljdChlZGdlLmluVi5pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCI6IFt3cml0ZXIudG9fZGljdChlZGdlLmluVi5sYWJlbCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ViI6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlkIjogd3JpdGVyLnRvX2RpY3QoZWRnZS5vdXRWLmlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhYmVsIjogW3dyaXRlci50b19kaWN0KGVkZ2Uub3V0Vi5sYWJlbCldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pCisKKworY2xhc3MgVmVydGV4UHJvcGVydHlTZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBWZXJ0ZXhQcm9wZXJ0eQorICAgIGdyYXBoc29uX3R5cGUgPSAiZzpWZXJ0ZXhQcm9wZXJ0eSIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgdmVydGV4X3Byb3BlcnR5LCB3cml0ZXIpOgorICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJWZXJ0ZXhQcm9wZXJ0eSIsIHsiaWQiOiB3cml0ZXIudG9fZGljdCh2ZXJ0ZXhfcHJvcGVydHkuaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiBbd3JpdGVyLnRvX2RpY3QodmVydGV4X3Byb3BlcnR5LmxhYmVsKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSI6IHdyaXRlci50b19kaWN0KHZlcnRleF9wcm9wZXJ0eS52YWx1ZSl9KQorCisKK2NsYXNzIFByb3BlcnR5U2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgorICAgIHB5dGhvbl90eXBlID0gUHJvcGVydHkKKyAgICBncmFwaHNvbl90eXBlID0gImc6UHJvcGVydHkiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIHByb3BlcnR5LCB3cml0ZXIpOgorICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJQcm9wZXJ0eSIsIHsia2V5Ijogd3JpdGVyLnRvX2RpY3QocHJvcGVydHkua2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUiOiB3cml0ZXIudG9fZGljdChwcm9wZXJ0eS52YWx1ZSl9KQorCisKK2NsYXNzIFVVSURJTyhfR3JhcGhTT05UeXBlSU8pOgorICAgIHB5dGhvbl90eXBlID0gdXVpZC5VVUlECisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOlVVSUQiCisgICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIlVVSUQiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG9iaiwgd3JpdGVyKToKKyAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBzdHIob2JqKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgorICAgICAgICByZXR1cm4gY2xzLnB5dGhvbl90eXBlKGQpCisKKworY2xhc3MgRGF0ZVRpbWVJTyhfR3JhcGhTT05UeXBlSU8pOgorICAgIHB5dGhvbl90eXBlID0gZGF0ZXRpbWUuZGF0ZXRpbWUKKyAgICBncmFwaHNvbl90eXBlID0gImc6RGF0ZVRpbWUiCisgICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkRhdGVUaW1lIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBvYmosIHdyaXRlcik6CisgICAgICAgIGlmIG9iai50emluZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJUaW1lem9uZSBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCB3aGVuIGNvbnN0cnVjdGluZyBkYXRldGltZSIpCisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgb2JqLmlzb2Zvcm1hdCgpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGR0LCByZWFkZXIpOgorICAgICAgICAjIHNwZWNpYWxseSBoYW5kbGluZyBhcyBweXRob24gaXNvZm9ybWF0IGRvZXMgbm90IHN1cHBvcnQgenVsdSB1bnRpbCAzLjExCisgICAgICAgIGR0X2lzbyA9IGR0WzotMV0gKyAnKzAwOjAwJyBpZiBkdC5lbmRzd2l0aCgnWicpIGVsc2UgZHQKKyAgICAgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoZHRfaXNvKQorCisKK2NsYXNzIF9OdW1iZXJJTyhfR3JhcGhTT05UeXBlSU8pOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuLCBib29sKTogICMgYmVjYXVzZSBpc2luc3RhbmNlKEZhbHNlLCBpbnQpIGFuZCBpc2luc3RhbmNlKFRydWUsIGludCkKKyAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKKyAgICAgICAgcmV0dXJuIGNscy5weXRob25fdHlwZSh2KQorCisKK2NsYXNzIExpc3RJTyhfR3JhcGhTT05UeXBlSU8pOgorICAgIHB5dGhvbl90eXBlID0gTGlzdFR5cGUKKyAgICBncmFwaHNvbl90eXBlID0gImc6TGlzdCIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgbCwgd3JpdGVyKToKKyAgICAgICAgbmV3X2xpc3QgPSBbXQorICAgICAgICBmb3Igb2JqIGluIGw6CisgICAgICAgICAgICBuZXdfbGlzdC5hcHBlbmQod3JpdGVyLnRvX2RpY3Qob2JqKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiTGlzdCIsIG5ld19saXN0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGwsIHJlYWRlcik6CisgICAgICAgIG5ld19saXN0ID0gW10KKyAgICAgICAgZm9yIG9iaiBpbiBsOgorICAgICAgICAgICAgbmV3X2xpc3QuYXBwZW5kKHJlYWRlci50b19vYmplY3Qob2JqKSkKKyAgICAgICAgcmV0dXJuIG5ld19saXN0CisKKworY2xhc3MgU2V0SU8oX0dyYXBoU09OVHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IFNldFR5cGUKKyAgICBncmFwaHNvbl90eXBlID0gImc6U2V0IgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBzLCB3cml0ZXIpOgorICAgICAgICBuZXdfbGlzdCA9IFtdCisgICAgICAgIGZvciBvYmogaW4gczoKKyAgICAgICAgICAgIG5ld19saXN0LmFwcGVuZCh3cml0ZXIudG9fZGljdChvYmopKQorICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJTZXQiLCBuZXdfbGlzdCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBzLCByZWFkZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgQnkgZGVmYXVsdCwgcmV0dXJucyBhIHB5dGhvbiBzZXQKKworICAgICAgICBJbiBjYXNlIEphdmEgcmV0dXJucyBudW1lcmljIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hpY2gKKyAgICAgICAgcHl0aG9uIGRvbid0IHJlY29nbml6ZSwgY29lcmNlIGFuZCByZXR1cm4gYSBsaXN0LgorICAgICAgICBTZWUgY29tbWVudHMgb2YgVElOS0VSUE9QLTE4NDQgZm9yIG1vcmUgZGV0YWlscworCisgICAgICAgIEluIGNhc2UgdGhlIHNldCBjb250YWlucyBub24taGFzaGFibGUgZWxlbWVudHMgKGUuZy4gZGljdCwgbGlzdCksCisgICAgICAgIGNvZXJjZSBhbmQgcmV0dXJuIGEgbGlzdC4KKyAgICAgICAgU2VlIFRJTktFUlBPUC0zMjMyIGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgIiIiCisgICAgICAgIG5ld19saXN0ID0gW3JlYWRlci50b19vYmplY3Qob2JqKSBmb3Igb2JqIGluIHNdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5ld19zZXQgPSBzZXQobmV3X2xpc3QpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBsb2cud2FybmluZygiQ29lcmNpbmcgZzpTZXQgdG8gbGlzdCBhcyBpdCBjb250YWlucyB1bmhhc2hhYmxlIGVsZW1lbnRzIChlLmcuIGRpY3QsIGxpc3QpLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIFRJTktFUlBPUC0zMjMyIGZvciBtb3JlIGRldGFpbHMuIikKKyAgICAgICAgICAgIHJldHVybiBuZXdfbGlzdAorICAgICAgICBpZiBsZW4obmV3X2xpc3QpICE9IGxlbihuZXdfc2V0KToKKyAgICAgICAgICAgIGxvZy53YXJuaW5nKCJDb2VyY2luZyBnOlNldCB0byBsaXN0IGR1ZSB0byBqYXZhIG51bWVyaWMgdmFsdWVzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIFRJTktFUlBPUC0xODQ0IGZvciBtb3JlIGRldGFpbHMuIikKKyAgICAgICAgICAgIHJldHVybiBuZXdfbGlzdAorCisgICAgICAgIHJldHVybiBuZXdfc2V0CisKKworY2xhc3MgTWFwVHlwZShfR3JhcGhTT05UeXBlSU8pOgorICAgIHB5dGhvbl90eXBlID0gRGljdFR5cGUKKyAgICBncmFwaHNvbl90eXBlID0gImc6TWFwIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBkLCB3cml0ZXIpOgorICAgICAgICBsID0gW10KKyAgICAgICAgZm9yIGtleSBpbiBkOgorICAgICAgICAgICAgbC5hcHBlbmQod3JpdGVyLnRvX2RpY3Qoa2V5KSkKKyAgICAgICAgICAgIGwuYXBwZW5kKHdyaXRlci50b19kaWN0KGRba2V5XSkpCisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIk1hcCIsIGwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgbCwgcmVhZGVyKToKKyAgICAgICAgbmV3X2RpY3QgPSB7fQorICAgICAgICBpZiBsZW4obCkgPiAwOgorICAgICAgICAgICAgeCA9IDAKKyAgICAgICAgICAgIHdoaWxlIHggPCBsZW4obCk6CisgICAgICAgICAgICAgICAgbmV3X2RpY3RbSGFzaGFibGVEaWN0Lm9mKHJlYWRlci50b19vYmplY3QobFt4XSkpXSA9IHJlYWRlci50b19vYmplY3QobFt4ICsgMV0pCisgICAgICAgICAgICAgICAgeCA9IHggKyAyCisgICAgICAgIHJldHVybiBuZXdfZGljdAorCisKK2NsYXNzIEZsb2F0SU8oX051bWJlcklPKToKKyAgICBweXRob25fdHlwZSA9IEZsb2F0VHlwZQorICAgIGdyYXBoc29uX3R5cGUgPSAiZzpGbG9hdCIKKyAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRmxvYXQiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6ICAjIGJlY2F1c2UgaXNpbnN0YW5jZShGYWxzZSwgaW50KSBhbmQgaXNpbnN0YW5jZShUcnVlLCBpbnQpCisgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICBlbGlmIG1hdGguaXNuYW4obik6CisgICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsICJOYU4iKQorICAgICAgICBlbGlmIG1hdGguaXNpbmYobikgYW5kIG4gPiAwOgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCAiSW5maW5pdHkiKQorICAgICAgICBlbGlmIG1hdGguaXNpbmYobikgYW5kIG4gPCAwOgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCAiLUluZmluaXR5IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorICAgICAgICAgICAgaWYgdiA9PSAnTmFOJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQoJ25hbicpCisgICAgICAgICAgICBlbGlmIHYgPT0gIkluZmluaXR5IjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmxvYXQoJ2luZicpCisgICAgICAgICAgICBlbGlmIHYgPT0gIi1JbmZpbml0eSI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZsb2F0KCctaW5mJykKKworICAgICAgICByZXR1cm4gY2xzLnB5dGhvbl90eXBlKHYpCisKKworY2xhc3MgQmlnRGVjaW1hbElPKF9HcmFwaFNPTlR5cGVJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBCaWdEZWNpbWFsCisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkJpZ0RlY2ltYWwiCisgICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkJpZ0RlY2ltYWwiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6CisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgc3RyKG4udmFsdWUpLCAiZyIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6CisgICAgICAgIHJldHVybiBiaWdkZWNpbWFsKHYpCisKKworY2xhc3MgRG91YmxlSU8oRmxvYXRJTyk6CisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkRvdWJsZSIKKyAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRG91YmxlIgorCisKK2NsYXNzIEludDY0SU8oX051bWJlcklPKToKKyAgICBweXRob25fdHlwZSA9IExvbmdUeXBlCisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkludDY0IgorICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJJbnQ2NCIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKKyAgICAgICAgIyBpZiB3ZSBleGNlZWQgSmF2YSBsb25nIHJhbmdlIHRoZW4gd2UgbmVlZCBhIEJpZ0ludGVnZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuLCBib29sKToKKyAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIGVsaWYgbiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4IG9yIG4gPiA5MjIzMzcyMDM2ODU0Nzc1ODA3OgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiQmlnSW50ZWdlciIsIHN0cihuKSwgImciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuKQorCisKK2NsYXNzIEJpZ0ludGVnZXJJTyhJbnQ2NElPKToKKyAgICBncmFwaHNvbl90eXBlID0gImc6QmlnSW50ZWdlciIKKworCitjbGFzcyBJbnQzMklPKEludDY0SU8pOgorICAgIHB5dGhvbl90eXBlID0gSW50VHlwZQorICAgIGdyYXBoc29uX3R5cGUgPSAiZzpJbnQzMiIKKyAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiSW50MzIiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6CisgICAgICAgICMgaWYgd2UgZXhjZWVkIEphdmEgaW50IHJhbmdlIHRoZW4gd2UgbmVlZCBhIGxvbmcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuLCBib29sKToKKyAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgIGVsaWYgbiA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4IG9yIG4gPiA5MjIzMzcyMDM2ODU0Nzc1ODA3OgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiQmlnSW50ZWdlciIsIHN0cihuKSwgImciKQorICAgICAgICBlbGlmIG4gPCAtMjE0NzQ4MzY0OCBvciBuID4gMjE0NzQ4MzY0NzoKKyAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoIkludDY0IiwgbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbikKKworCitjbGFzcyBJbnQxNklPKEludDY0SU8pOgorICAgIHB5dGhvbl90eXBlID0gU2hvcnRUeXBlCisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkludDE2IgorICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJJbnQxNiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKKyAgICAgICAgIyBpZiB3ZSBleGNlZWQgSmF2YSBpbnQgcmFuZ2UgdGhlbiB3ZSBuZWVkIGEgbG9uZworICAgICAgICBpZiBpc2luc3RhbmNlKG4sIGJvb2wpOgorICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgZWxpZiBuIDwgLTkyMjMzNzIwMzY4NTQ3NzU4MDggb3IgbiA+IDkyMjMzNzIwMzY4NTQ3NzU4MDc6CisgICAgICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKCJCaWdJbnRlZ2VyIiwgc3RyKG4pLCAiZyIpCisgICAgICAgIGVsaWYgbiA8IC0yMTQ3NDgzNjQ4IG9yIG4gPiAyMTQ3NDgzNjQ3OgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiSW50NjQiLCBuKQorICAgICAgICBlbGlmIG4gPCAtMzI3Njggb3IgbiA+IDMyNzY3OgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZSgiSW50MzIiLCBuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuLCAiZyIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6CisgICAgICAgIHJldHVybiBpbnQuX19uZXdfXyhTaG9ydFR5cGUsIHYpCisKKworY2xhc3MgQnl0ZUlPKF9OdW1iZXJJTyk6CisgICAgcHl0aG9uX3R5cGUgPSBTaW5nbGVCeXRlCisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkJ5dGUiCisgICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIkJ5dGUiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UobiwgYm9vbCk6ICAjIGJlY2F1c2UgaXNpbnN0YW5jZShGYWxzZSwgaW50KSBhbmQgaXNpbnN0YW5jZShUcnVlLCBpbnQpCisgICAgICAgICAgICByZXR1cm4gbgorICAgICAgICByZXR1cm4gR3JhcGhTT05VdGlsLnR5cGVkX3ZhbHVlKGNscy5ncmFwaHNvbl9iYXNlX3R5cGUsIG4sICJnIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKKyAgICAgICAgcmV0dXJuIGludC5fX25ld19fKFNpbmdsZUJ5dGUsIHYpCisKKworY2xhc3MgQmluYXJ5SU8oX0dyYXBoU09OVHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IGJ5dGVzCisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOkJpbmFyeSIKKyAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiQmluYXJ5IgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGRpY3RpZnkoY2xzLCBuLCB3cml0ZXIpOgorICAgICAgICAjIHdyaXRlcyBhIEpTT04gU3RyaW5nIGNvbnRhaW5pbmcgYmFzZTY0LWVuY29kZWQgYnl0ZXMKKyAgICAgICAgbl9lbmNvZGVkID0gIiIuam9pbihjaHIoeCkgZm9yIHggaW4gYmFzZTY0LmI2NGVuY29kZShuKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuX2VuY29kZWQsICJnIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKKyAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRkZWNvZGUodikKKworCitjbGFzcyBDaGFySU8oX0dyYXBoU09OVHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IFNpbmdsZUNoYXIKKyAgICBncmFwaHNvbl90eXBlID0gImc6Q2hhciIKKyAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiQ2hhciIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgbiwgd3JpdGVyKToKKyAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBuLCAiZyIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgdiwgXyk6CisgICAgICAgIHJldHVybiBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCB2KQorCisKK2NsYXNzIER1cmF0aW9uSU8oX0dyYXBoU09OVHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IHRpbWVkZWx0YQorICAgIGdyYXBoc29uX3R5cGUgPSAiZzpEdXJhdGlvbiIKKyAgICBncmFwaHNvbl9iYXNlX3R5cGUgPSAiRHVyYXRpb24iCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIG4sIHdyaXRlcik6CisgICAgICAgIG5faXNvID0gZHVyYXRpb25faXNvZm9ybWF0KG4pCisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgbl9pc29bOi0yXSArICdUMFMnIGlmIG5faXNvLmVuZHN3aXRoKCcwRCcpIGVsc2Ugbl9pc28sICJnIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCB2LCBfKToKKyAgICAgICAgcmV0dXJuIHBhcnNlX2R1cmF0aW9uKHYpCisKKworY2xhc3MgVmVydGV4RGVzZXJpYWxpemVyKF9HcmFwaFNPTlR5cGVJTyk6CisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOlZlcnRleCIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgorICAgICAgICBwcm9wZXJ0aWVzID0gW10KKyAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGQ6CisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcmVhZGVyLnRvX29iamVjdChkWyJwcm9wZXJ0aWVzIl0pCisgICAgICAgICAgICBpZiBwcm9wZXJ0aWVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbaXRlbSBmb3Igc3VibGlzdCBpbiBwcm9wZXJ0aWVzLnZhbHVlcygpIGZvciBpdGVtIGluIHN1Ymxpc3RdCisgICAgICAgIGxhYmVsID0gZC5nZXQoImxhYmVsIiwgInZlcnRleCIpCisgICAgICAgIHJldHVybiBWZXJ0ZXgocmVhZGVyLnRvX29iamVjdChkWyJpZCJdKSwgbGFiZWwgaWYgaXNpbnN0YW5jZShsYWJlbCwgc3RyKSBlbHNlIGxhYmVsWzBdLCBwcm9wZXJ0aWVzKQorCisKK2NsYXNzIEVkZ2VEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKKyAgICBncmFwaHNvbl90eXBlID0gImc6RWRnZSIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgorICAgICAgICBwcm9wZXJ0aWVzID0gW10KKyAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGQ6CisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcmVhZGVyLnRvX29iamVjdChkWyJwcm9wZXJ0aWVzIl0pCisgICAgICAgICAgICBpZiBwcm9wZXJ0aWVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbaXRlbSBmb3Igc3VibGlzdCBpbiBwcm9wZXJ0aWVzLnZhbHVlcygpIGZvciBpdGVtIGluIHN1Ymxpc3RdCisKKyAgICAgICAgcHJpbnQocmVhZGVyLnRvX29iamVjdChkWyJvdXRWIl0pKQorCisgICAgICAgIHJldHVybiBFZGdlKHJlYWRlci50b19vYmplY3QoZFsiaWQiXSksCisgICAgICAgICAgICAgICAgICAgIFZlcnRleChyZWFkZXIudG9fb2JqZWN0KGRbIm91dFYiXSkuZ2V0KCJpZCIpLCByZWFkZXIudG9fb2JqZWN0KGRbIm91dFYiXSkuZ2V0KCJsYWJlbCIpWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgZC5nZXQoImxhYmVsIiwgImVkZ2UiKVswXSwKKyAgICAgICAgICAgICAgICAgICAgVmVydGV4KHJlYWRlci50b19vYmplY3QoZFsiaW5WIl0pLmdldCgiaWQiKSwgcmVhZGVyLnRvX29iamVjdChkWyJvdXRWIl0pLmdldCgibGFiZWwiKVswXSksCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMpCisKKworY2xhc3MgVmVydGV4UHJvcGVydHlEZXNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKKyAgICBncmFwaHNvbl90eXBlID0gImc6VmVydGV4UHJvcGVydHkiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgb2JqZWN0aWZ5KGNscywgZCwgcmVhZGVyKToKKyAgICAgICAgcHJvcGVydGllcyA9IFtdCisgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBkOgorICAgICAgICAgICAgcHJvcGVydGllcyA9IHJlYWRlci50b19vYmplY3QoZFsicHJvcGVydGllcyJdKQorICAgICAgICAgICAgaWYgcHJvcGVydGllcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gbGlzdChtYXAobGFtYmRhIHg6IFByb3BlcnR5KHhbMF0sIHhbMV0sIE5vbmUpLCBwcm9wZXJ0aWVzLml0ZW1zKCkpKQorICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXgocmVhZGVyLnRvX29iamVjdChkLmdldCgidmVydGV4IikpKSBpZiAidmVydGV4IiBpbiBkIGVsc2UgTm9uZQorICAgICAgICByZXR1cm4gVmVydGV4UHJvcGVydHkocmVhZGVyLnRvX29iamVjdChkWyJpZCJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbImxhYmVsIl1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIudG9fb2JqZWN0KGRbInZhbHVlIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcykKKworCitjbGFzcyBQcm9wZXJ0eURlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgorICAgIGdyYXBoc29uX3R5cGUgPSAiZzpQcm9wZXJ0eSIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgorICAgICAgICBlbGVtZW50ID0gcmVhZGVyLnRvX29iamVjdChkWyJlbGVtZW50Il0pIGlmICJlbGVtZW50IiBpbiBkIGVsc2UgTm9uZQorICAgICAgICByZXR1cm4gUHJvcGVydHkoZFsia2V5Il0sIHJlYWRlci50b19vYmplY3QoZFsidmFsdWUiXSksIGVsZW1lbnQpCisKKworY2xhc3MgUGF0aERlc2VyaWFsaXplcihfR3JhcGhTT05UeXBlSU8pOgorICAgIGdyYXBoc29uX3R5cGUgPSAiZzpQYXRoIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6CisgICAgICAgIHJldHVybiBQYXRoKHJlYWRlci50b19vYmplY3QoZFsibGFiZWxzIl0pLCByZWFkZXIudG9fb2JqZWN0KGRbIm9iamVjdHMiXSkpCisKKworY2xhc3MgVElPKF9HcmFwaFNPTlR5cGVJTyk6CisgICAgZ3JhcGhzb25fdHlwZSA9ICJnOlQiCisgICAgZ3JhcGhzb25fYmFzZV90eXBlID0gIlQiCisgICAgcHl0aG9uX3R5cGUgPSBUCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZGljdGlmeShjbHMsIHQsIHdyaXRlcik6CisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoY2xzLmdyYXBoc29uX2Jhc2VfdHlwZSwgdC5uYW1lLCAiZyIpCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG9iamVjdGlmeShjbHMsIGQsIHJlYWRlcik6CisgICAgICAgIHJldHVybiBUW2RdCisKKworY2xhc3MgRGlyZWN0aW9uSU8oX0dyYXBoU09OVHlwZUlPKToKKyAgICBncmFwaHNvbl90eXBlID0gImc6RGlyZWN0aW9uIgorICAgIGdyYXBoc29uX2Jhc2VfdHlwZSA9ICJEaXJlY3Rpb24iCisgICAgcHl0aG9uX3R5cGUgPSBEaXJlY3Rpb24KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgZCwgd3JpdGVyKToKKyAgICAgICAgcmV0dXJuIEdyYXBoU09OVXRpbC50eXBlZF92YWx1ZShjbHMuZ3JhcGhzb25fYmFzZV90eXBlLCBkLm5hbWUsICJnIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvYmplY3RpZnkoY2xzLCBkLCByZWFkZXIpOgorICAgICAgICByZXR1cm4gRGlyZWN0aW9uW2RdCisKKworY2xhc3MgRW51bVNlcmlhbGl6ZXIoX0dyYXBoU09OVHlwZUlPKToKKyAgICBweXRob25fdHlwZSA9IEVudW0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkaWN0aWZ5KGNscywgZW51bSwgXyk6CisgICAgICAgIHJldHVybiBHcmFwaFNPTlV0aWwudHlwZWRfdmFsdWUoU3ltYm9sVXRpbC50b19jYW1lbF9jYXNlKHR5cGUoZW51bSkuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFV0aWwudG9fY2FtZWxfY2FzZShzdHIoZW51bS5uYW1lKSkpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL3V0aWwucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vZ3JlbWxpbl9weXRob24vc3RydWN0dXJlL2lvL3V0aWwucHkKaW5kZXggNTdlY2E1Yi4uM2VlMDBhMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL2dyZW1saW5fcHl0aG9uL3N0cnVjdHVyZS9pby91dGlsLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9ncmVtbGluX3B5dGhvbi9zdHJ1Y3R1cmUvaW8vdXRpbC5weQpAQCAtMTYsNiArMTYsOSBAQAogIyB1bmRlciB0aGUgTGljZW5zZS4KIAogaW1wb3J0IHJlCitmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jaworCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0IFNpbmdsZUJ5dGUKIAogCiBjbGFzcyBTeW1ib2xVdGlsOgpAQCAtNTgsMyArNjEsMzggQEAKICAgICAgICAgICAgICAgICBuZXdfb1trXSA9IGNscy5vZih2KQogICAgICAgICByZXR1cm4gbmV3X28KIAorCisjIHJlZmVyZW5jZWQgcHl0aG9uIHNpbmdsZXRvbiBmcm9tIGh0dHBzOi8vcmVmYWN0b3JpbmcuZ3VydS9kZXNpZ24tcGF0dGVybnMvc2luZ2xldG9uL3B5dGhvbi9leGFtcGxlI2V4YW1wbGUtMS0tbWFpbi1weSwKKyMgbWlnaHQgbmVlZCBzb21lIHJlZmFjdG9yaW5nCitjbGFzcyBTaW5nbGV0b25NZXRhKHR5cGUpOgorCisgICAgX2luc3RhbmNlcyA9IHt9CisgICAgX2xvY2s6IExvY2sgPSBMb2NrKCkKKworICAgIGRlZiBfX2NhbGxfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggY2xzLl9sb2NrOgorICAgICAgICAgICAgaWYgY2xzIG5vdCBpbiBjbHMuX2luc3RhbmNlczoKKyAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IHN1cGVyKCkuX19jYWxsX18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIGNscy5faW5zdGFuY2VzW2Nsc10gPSBpbnN0YW5jZQorICAgICAgICByZXR1cm4gY2xzLl9pbnN0YW5jZXNbY2xzXQorCisKK2NsYXNzIE1hcmtlcihtZXRhY2xhc3M9U2luZ2xldG9uTWV0YSk6CisgICAgX3ZhbHVlOiBTaW5nbGVCeXRlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU6IFNpbmdsZUJ5dGUpIC0+IE5vbmU6CisgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZW5kX29mX3N0cmVhbSgpOgorICAgICAgICByZXR1cm4gTWFya2VyKFNpbmdsZUJ5dGUoMCkpCisKKyAgICBkZWYgZ2V0X3ZhbHVlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBvZihjbHMsIHZhbCk6CisgICAgICAgIGlmIHZhbCAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICByZXR1cm4gY2xzLmVuZF9vZl9zdHJlYW0oKQorCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vcHlwcm9qZWN0LnRvbWwgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vcHlwcm9qZWN0LnRvbWwKaW5kZXggMTIxYzlhYy4uYTNmNGFiYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3B5cHJvamVjdC50b21sCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi9weXByb2plY3QudG9tbApAQCAtMzIsNyArMzIsOSBAQAogICAgICJhaW9odHRwPj0zLjguMCw8NC4wLjAiLAogICAgICJhZW51bT49MS40LjUsPDQuMC4wIiwKICAgICAiaXNvZGF0ZT49MC42LjAsPDEuMC4wIiwKLSAgICAiYXN5bmMtdGltZW91dD49NC4wLjMsPDUuMC4wIgorICAgICJib3RvMyIsCisgICAgImJvdG9jb3JlIiwKKyAgICAiYXN5bmMtdGltZW91dD49NC4wLjMsPDUuMDsgcHl0aG9uX3ZlcnNpb24gPCBcIjMuMTFcIiIKIF0KIGNsYXNzaWZpZXJzID0gWwogICAgICJJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzIiwKQEAgLTQ1LDcgKzQ3LDcgQEAKIEhvbWVwYWdlID0gImh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmciCiAKIFtwcm9qZWN0Lm9wdGlvbmFsLWRlcGVuZGVuY2llc10KLWtlcmJlcm9zID0gWyJrZXJiZXJvcz49MS4zLjAsPDIuMC4wIl0KK2tlcmJlcm9zID0gWyJrZXJiZXJvcz49MS4zLjAsPDIuMC4wOyBzeXNfcGxhdGZvcm0gIT0gXCJ3aW4zMlwiIl0KIHVqc29uID0gWyJ1anNvbj49Mi4wLjAiXQogdGVzdCA9IFsKICAgICAicHl0ZXN0Pj02LjIuNSw8OC4wLjAiLApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvZmVhdHVyZV9zdGVwcy5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9mZWF0dXJlL2ZlYXR1cmVfc3RlcHMucHkKaW5kZXggNzkwMmIyNy4uZjgyYjY1YSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvZmVhdHVyZV9zdGVwcy5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvZmVhdHVyZS9mZWF0dXJlX3N0ZXBzLnB5CkBAIC0xNywyOCArMTcsNTkgQEAKICMgdW5kZXIgdGhlIExpY2Vuc2UuCiAjCiAKK2Zyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBJdGVyYWJsZQogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBqc29uCiBpbXBvcnQgcmUKIGltcG9ydCB1dWlkCiBmcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0IGxvbmcsIGJpZ2RlY2ltYWwKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBQYXRoLCBWZXJ0ZXgKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBQYXRoLCBWZXJ0ZXgsIEdyYXBoLCBFZGdlLCBWZXJ0ZXhQcm9wZXJ0eSwgUHJvcGVydHkKIGZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5hbm9ueW1vdXNfdHJhdmVyc2FsIGltcG9ydCB0cmF2ZXJzYWwKIGZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBCYXJyaWVyLCBDYXJkaW5hbGl0eSwgUCwgVGV4dFAsIFBvcCwgU2NvcGUsIENvbHVtbiwgT3JkZXIsIERpcmVjdGlvbiwgVCwgXAotICAgIFBpY2ssIE9wZXJhdG9yLCBJTywgV2l0aE9wdGlvbnMsIE1lcmdlCisgICAgUGljaywgT3BlcmF0b3IsIElPLCBXaXRoT3B0aW9ucywgTWVyZ2UsIEdWYWx1ZSwgR3JlbWxpbkxhbmcKIGZyb20gcmFkaXNoIGltcG9ydCBnaXZlbiwgd2hlbiwgdGhlbiwgd29ybGQKIGZyb20gaGFtY3Jlc3QgaW1wb3J0ICoKIAotb3V0ViA9IF9fLm91dFYKK291dFYgPSBfXy5vdXRfdgogbGFiZWwgPSBfXy5sYWJlbAotaW5WID0gX18uaW5WCitpblYgPSBfXy5pbl92CiBwcm9qZWN0ID0gX18ucHJvamVjdAogdGFpbCA9IF9fLnRhaWwKIAogaWdub3JlcyA9IFsKICAgICAiZy53aXRoU2lkZUVmZmVjdChcInhcIix7fSkuVigpLmJvdGgoKS5ib3RoKCkuc2lkZUVmZmVjdChfXy5zdG9yZShcInhcIikuYnkoXCJuYW1lXCIpKS5jYXAoXCJ4XCIpLnVuZm9sZCgpIiwgIyBPYmplY3RzIG11c3QgYmUgYm90aCBvZiBNYXAgb3IgQ29sbGVjdGlvbjogYT1MaW5rZWRIYXNoTWFwIGI9QnVsa1NldD8/PwotICAgICJnLndpdGhTYWNrKDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwbiwgT3BlcmF0b3IuYXNzaWduKS5WKCkubG9jYWwoX18ub3V0KFwia25vd3NcIikuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW4oXCJrbm93c1wiKS5iYXJyaWVyKCkuc2FjaygpIiAjIGlzc3VlcyB3aXRoIEJpZ0ludGVnZXIvQmlnRGVjaW1hbCAtIHdoeSBkbyB3ZSBjYXJyeSBCaWdEZWNpbWFsPyBqdXN0IHVzZSBweXRob24gRGVjaW1hbCBtb2R1bGU/CisgICAgJ2cud2l0aFNhY2soMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBuLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5sb2NhbChfXy5vdXQoImtub3dzIikuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW4oImtub3dzIikuYmFycmllcigpLnNhY2soKScsICMgaXNzdWVzIHdpdGggQmlnSW50ZWdlci9CaWdEZWNpbWFsIC0gd2h5IGRvIHdlIGNhcnJ5IEJpZ0RlY2ltYWw/IGp1c3QgdXNlIHB5dGhvbiBEZWNpbWFsIG1vZHVsZT8KKyAgICAiZy53aXRoU2FjaygyKS5WKCkuc2FjayhPcGVyYXRvci5kaXYpLmJ5KF9fLmNvbnN0YW50KHh4MSkpLnNhY2soKSIsICMgaXNzdWVzIHdpdGggQmlnSW50ZWdlci9CaWdEZWNpbWFsIC0gd2h5IGRvIHdlIGNhcnJ5IEJpZ0RlY2ltYWw/IGp1c3QgdXNlIHB5dGhvbiBEZWNpbWFsIG1vZHVsZT8KKyAgICAjIyBUaGUgZm9sbG93aW5nIHNlY3Rpb24gaGFzIHF1ZXJpZXMgdGhhdCBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IGdyZW1saW4tbGFuZyBwYXJhbWV0ZXJzCisgICAgJ2cuVigpLmJyYW5jaChsMSkub3B0aW9uKCJhIiwgX18udmFsdWVzKCJhZ2UiKSkub3B0aW9uKCJiIiwgX18udmFsdWVzKCJsYW5nIikpLm9wdGlvbigiYiIsIF9fLnZhbHVlcygibmFtZSIpKScsCisgICAgJ2cuVigpLmNob29zZShwcmVkMSwgX18ub3V0KCJrbm93cyIpLCBfXy5pbigiY3JlYXRlZCIpKS52YWx1ZXMoIm5hbWUiKScsCisgICAgJ2cuVigpLnJlcGVhdChfXy5ib3RoKCkpLnVudGlsKHByZWQxKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKScsCisgICAgJ2cuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCJuYW1lIikub3JkZXIoKS5ieShjMSkuZGVkdXAoKS52YWx1ZSgpJywKKyAgICAnZy5WKCkuZmlsdGVyKHByZWQxKScsCisgICAgJ2cuVih2aWQxKS5maWx0ZXIocHJlZDEpJywKKyAgICAnZy5WKHZpZDIpLmZpbHRlcihwcmVkMSknLAorICAgICdnLlYodmlkMSkub3V0KCkuZmlsdGVyKHByZWQxKScsCisgICAgJ2cuRSgpLmZpbHRlcihwcmVkMSknLAorICAgICdnLlYoKS5vdXQoImNyZWF0ZWQiKS5oYXMoIm5hbWUiLCBfXy5tYXAobDEpLmlzKFAuZ3QoMykpKS52YWx1ZXMoIm5hbWUiKScsCisgICAgJ2cuVih2aWQxKS5tYXAobDEpJywKKyAgICAnZy5WKHZpZDEpLm91dEUoKS5sYWJlbCgpLm1hcChsMSknLAorICAgICdnLlYodmlkMSkub3V0KCkubWFwKGwxKS5tYXAobDIpJywKKyAgICAnZy53aXRoUGF0aCgpLlYoKS5hcygiYSIpLm91dCgpLm1hcChsMSknLAorICAgICdnLndpdGhQYXRoKCkuVigpLmFzKCJhIikub3V0KCkub3V0KCkubWFwKGwxKScsCisgICAgJ2cuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuYnkoYzEpLmJ5KGMyKScsCisgICAgJ2cuVigpLm9yZGVyKCkuYnkoIm5hbWUiLCBjMSkuYnkoIm5hbWUiLCBjMikudmFsdWVzKCJuYW1lIiknLAorICAgICdnLlYoKS5oYXNMYWJlbCgicGVyc29uIikub3JkZXIoKS5ieShsMSwgT3JkZXIuZGVzYykudmFsdWVzKCJuYW1lIiknLAorICAgICdnLlYodjEpLmhhc0xhYmVsKCJwZXJzb24iKS5tYXAobDEpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuYXNjKScsCisgICAgJ2cuVigpLnZhbHVlTWFwKCkudW5mb2xkKCkubWFwKGwxKScsCisgICAgJ2cuRShlMTEpJywKKyAgICAnZy5FKGU3LGUxMSknLAorICAgICdnLkUoeHgxKScsCisgICAgJ2cud2l0aFNpZGVFZmZlY3QoImEiLCB4eDEpLlYoKS5ib3RoKCkudmFsdWVzKCJuYW1lIikuYWdncmVnYXRlKFNjb3BlLmxvY2FsLCJhIikuY2FwKCJhIiknLAorICAgICdnLlYoKS5ncm91cCgpLmJ5KGwxKS5ieShfXy5jb25zdGFudCgxKSknLAorICAgICdnLlYodmlkMSkub3V0KCkudmFsdWVzKCJuYW1lIikuaW5qZWN0KCJkYW5pZWwiKS5hcygiYSIpLm1hcChsMSkucGF0aCgpJywKKyAgICAnZy5WKCkuZ3JvdXAoImEiKS5ieShsMSkuYnkoX18uY29uc3RhbnQoMSkpLmNhcCgiYSIpJywKKyAgICAnZy53aXRoU2lkZUVmZmVjdCgiYSIsIHh4MSkuVigpLmJvdGgoKS52YWx1ZXMoIm5hbWUiKS5zdG9yZSgiYSIpLmNhcCgiYSIpJywKIF0KIAogCkBAIC00OCwxNiArNzksMjYgQEAKICAgICB0YWdzZXQgPSBbdGFnLm5hbWUgZm9yIHRhZyBpbiBzdGVwLmFsbF90YWdzXQogICAgIGlmIG5vdCBzdGVwLmNvbnRleHQuaWdub3JlOgogICAgICAgICBzdGVwLmNvbnRleHQuaWdub3JlID0gIkFsbG93TnVsbFByb3BlcnR5VmFsdWVzIiBpbiB0YWdzZXQKLSAgICBpZiBub3Qgc3RlcC5jb250ZXh0Lmlnbm9yZToKKworICAgICMgaWdub3JlIGlmIHdlJ3JlIG5vdCB1c2luZyBncmFwaGJpbmFyeSAtIGdyYXBoc29uIGlzbid0IGltcGxlbWVudGVkIHNpbmNlIHRoYXQgc3VwcG9ydCB3YXMKKyAgICAjIG1lYW50IHRvIGJlIHRlbXBvcmFyeSBvbmx5LiByZW1vdmUgdGhpcyBlbnRpcmUgY2hlY2sgb25jZSB0aGF0IHJlbW92YWwgaGFwcGVucy4KKyAgICBpZiBub3Qgc3RlcC5jb250ZXh0Lmlnbm9yZSBhbmQgbm90IHdvcmxkLmNvbmZpZy51c2VyX2RhdGFbInNlcmlhbGl6ZXIiXSA9PSAiYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAiOgogICAgICAgICBzdGVwLmNvbnRleHQuaWdub3JlID0gIlN0ZXBTdWJncmFwaCIgaW4gdGFnc2V0CisKICAgICBpZiBub3Qgc3RlcC5jb250ZXh0Lmlnbm9yZToKICAgICAgICAgc3RlcC5jb250ZXh0Lmlnbm9yZSA9ICJTdGVwVHJlZSIgaW4gdGFnc2V0CisgICAgaWYgbm90IHN0ZXAuY29udGV4dC5pZ25vcmU6CisgICAgICAgIHN0ZXAuY29udGV4dC5pZ25vcmUgPSAiU3RlcFdyaXRlIiBpbiB0YWdzZXQKKworICAgICMgVElOS0VSUE9QLTMwNTUKKyAgICBpZiBub3Qgc3RlcC5jb250ZXh0Lmlnbm9yZToKKyAgICAgICAgc3RlcC5jb250ZXh0Lmlnbm9yZSA9ICJXaXRoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kiIGluIHRhZ3NldAogCiAgICAgaWYgKHN0ZXAuY29udGV4dC5pZ25vcmUpOgogICAgICAgICByZXR1cm4KIAogICAgIHN0ZXAuY29udGV4dC5ncmFwaF9uYW1lID0gZ3JhcGhfbmFtZQotICAgIHN0ZXAuY29udGV4dC5nID0gdHJhdmVyc2FsKCkud2l0aF8oc3RlcC5jb250ZXh0LnJlbW90ZV9jb25uW2dyYXBoX25hbWVdKQorICAgIHN0ZXAuY29udGV4dC5nID0gdHJhdmVyc2FsKCkud2l0aF8oc3RlcC5jb250ZXh0LnJlbW90ZV9jb25uW2dyYXBoX25hbWVdKS53aXRoXygnbGFuZ3VhZ2UnLCAnZ3JlbWxpbi1sYW5nJykKIAogCiBAZ2l2ZW4oInRoZSBncmFwaCBpbml0aWFsaXplciBvZiIpCkBAIC03MCw3ICsxMTEsNyBAQAogICAgICMganVzdCBiZSBzdXJlIHRoYXQgdGhlIHRyYXZlcnNhbCByZXR1cm5zIHNvbWV0aGluZyB0byBwcm92ZSB0aGF0IGl0IHdvcmtlZCB0byBzb21lIGRlZ3JlZS4gcHJvYmFibHkKICAgICAjIGlzIG92ZXJraWxsIHRvIHRyeSB0byBhc3NlcnQgdGhlIGNvbXBsZXRlIHN1Y2Nlc3Mgb2YgdGhpcyBpbml0IG9wZXJhdGlvbi4gcHJlc3VtYWJseSB0aGUgdGVzdAogICAgICMgc3VpdGUgd291bGQgZmFpbCBlbHNld2hlcmUgaWYgdGhpcyBkaWRuJ3Qgd29yayB3aGljaCB3b3VsZCBoZWxwIGlkZW50aWZ5IGEgcHJvYmxlbS4KLSAgICByZXN1bHQgPSB0LnRvTGlzdCgpCisgICAgcmVzdWx0ID0gdC50b19saXN0KCkKICAgICBhc3NlcnQgbGVuKHJlc3VsdCkgPiAwCiAKIApAQCAtMTA2LDI5ICsxNDcsMzAgQEAKIGRlZiB0cmFuc2xhdGVfdHJhdmVyc2FsKHN0ZXApOgogICAgIGlmIHN0ZXAuY29udGV4dC5pZ25vcmUgPT0gRmFsc2U6CiAgICAgICAgIHN0ZXAuY29udGV4dC5pZ25vcmUgPSBzdGVwLnRleHQgaW4gaWdub3JlcwotCi0gICAgIyBhZnRlciBiYWNrcG9ydCBvZiBzdHJhdGVneSBjb25zdHJ1Y3Rpb24gaW1wcm92ZW1lbnRzIGZyb20gbWFzdGVyLCB0aGVyZSBhcmUgbm93IHRlc3QgZmFpbHVyZXMgKG5vdCBjdXJyZW50bHkKLSAgICAjIHJ1bm5pbmcgR0xWIHRlc3RzIG9uIG1hc3RlcikgLSBUSU5LRVJQT1AtMzA1NQotICAgIGlmIHN0ZXAuY29udGV4dC5pZ25vcmUgPT0gRmFsc2U6Ci0gICAgICAgIHN0ZXAuY29udGV4dC5pZ25vcmUgPSAid2l0aG91dFN0cmF0ZWdpZXMiIGluIHN0ZXAudGV4dAotICAgIGlmIHN0ZXAuY29udGV4dC5pZ25vcmUgPT0gRmFsc2U6Ci0gICAgICAgIHN0ZXAuY29udGV4dC5pZ25vcmUgPSAid2l0aFN0cmF0ZWdpZXMiIGluIHN0ZXAudGV4dAotCiAgICAgaWYgc3RlcC5jb250ZXh0Lmlnbm9yZToKICAgICAgICAgcmV0dXJuCiAKLSAgICBwID0gc3RlcC5jb250ZXh0LnRyYXZlcnNhbF9wYXJhbXMgaWYgaGFzYXR0cihzdGVwLmNvbnRleHQsICJ0cmF2ZXJzYWxfcGFyYW1zIikgZWxzZSB7fQotICAgIGxvY2FsZyA9IHN0ZXAuY29udGV4dC5nCisgICAgcCA9IHt9CisgICAgaWYgaGFzYXR0cihzdGVwLmNvbnRleHQsICJ0cmF2ZXJzYWxfcGFyYW1zIik6CisgICAgICAgICMgdXNlciBmbGFnICJwYXJhbWV0ZXJpemUiLCB3aGVuIHNldCB0byAndHJ1ZScgd2lsbCB1c2UgR1ZhbHVlIHRvIHBhcmFtZXRlcml6ZSBwYXJhbWV0ZXJzIGluc3RlYWQgb2YgZmxhdHRlbmluZyB0aGVtIG91dCBpbnRvIHN0cmluZworICAgICAgICBpZiB3b3JsZC5jb25maWcudXNlcl9kYXRhLmdldCgicGFyYW1ldGVyaXplIik6CisgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGVwLmNvbnRleHQudHJhdmVyc2FsX3BhcmFtcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHBba10gPSBHVmFsdWUoaywgdikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHAgPSBzdGVwLmNvbnRleHQudHJhdmVyc2FsX3BhcmFtcwogCisgICAgbG9jYWxnID0gc3RlcC5jb250ZXh0Lmcud2l0aF8oJ2xhbmd1YWdlJywgJ2dyZW1saW4tbGFuZycpCiAgICAgdGFnc2V0ID0gW3RhZy5uYW1lIGZvciB0YWcgaW4gc3RlcC5hbGxfdGFnc10KICAgICBpZiAiR3JhcGhDb21wdXRlck9ubHkiIGluIHRhZ3NldDoKLSAgICAgICAgbG9jYWxnID0gc3RlcC5jb250ZXh0Lmcud2l0aENvbXB1dGVyKCkKKyAgICAgICAgbG9jYWxnID0gc3RlcC5jb250ZXh0Lmcud2l0aF8oJ2xhbmd1YWdlJywgJ2dyZW1saW4tbGFuZycpLndpdGhfY29tcHV0ZXIoKQogICAgIHBbJ2cnXSA9IGxvY2FsZwogICAgIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwgPSBzdGVwLmNvbnRleHQudHJhdmVyc2Fscy5wb3AoMCkoKipwKQogCiAgICAgaWYgaGFzYXR0cihzdGVwLmNvbnRleHQsICJ0cmF2ZXJzYWxfc2lkZV9lZmZlY3RzIik6CisgICAgICAgIGdyZW1saW5fbGFuZyA9IEdyZW1saW5MYW5nKCkKICAgICAgICAgZm9yIGtleSBpbiBzdGVwLmNvbnRleHQudHJhdmVyc2FsX3NpZGVfZWZmZWN0czoKLSAgICAgICAgICAgIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwuYnl0ZWNvZGUuYWRkX3NvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCBrZXksIHN0ZXAuY29udGV4dC50cmF2ZXJzYWxfc2lkZV9lZmZlY3RzW2tleV0pCisgICAgICAgICAgICBncmVtbGluX2xhbmcuYWRkX3NvdXJjZSgid2l0aFNpZGVFZmZlY3QiLCBrZXksIHN0ZXAuY29udGV4dC50cmF2ZXJzYWxfc2lkZV9lZmZlY3RzW2tleV0pCisgICAgICAgIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmdyZW1saW4gPSBncmVtbGluX2xhbmcuZ3JlbWxpbiArIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmdyZW1saW4gIyBwcmVwZW5kIHRoZSBzaWRlIGVmZmVjdHMgdG8gdGhlIHF1ZXJ5CiAKIAogQHdoZW4oIml0ZXJhdGVkIHRvIGxpc3QiKQpAQCAtMTM3LDcgKzE3OSw3IEBACiAgICAgICAgIHJldHVybgogCiAgICAgdHJ5OgotICAgICAgICBzdGVwLmNvbnRleHQucmVzdWx0ID0gbGlzdChtYXAobGFtYmRhIHg6IF9jb252ZXJ0X3Jlc3VsdHMoeCksIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwudG9MaXN0KCkpKQorICAgICAgICBzdGVwLmNvbnRleHQucmVzdWx0ID0gbGlzdChtYXAobGFtYmRhIHg6IF9jb252ZXJ0X3Jlc3VsdHMoeCksIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwudG9fbGlzdCgpKSkKICAgICAgICAgc3RlcC5jb250ZXh0LmZhaWxlZCA9IEZhbHNlCiAgICAgICAgIHN0ZXAuY29udGV4dC5mYWlsZWRfbWVzc2FnZSA9ICcnCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgpAQCAtMTUxLDcgKzE5Myw5IEBACiAgICAgICAgIHJldHVybgogCiAgICAgdHJ5OgotICAgICAgICBzdGVwLmNvbnRleHQucmVzdWx0ID0gbGlzdChtYXAobGFtYmRhIHg6IF9jb252ZXJ0X3Jlc3VsdHMoeCksIHN0ZXAuY29udGV4dC50cmF2ZXJzYWwubmV4dCgpKSkKKyAgICAgICAgcmVzID0gc3RlcC5jb250ZXh0LnRyYXZlcnNhbC5uZXh0KCkKKyAgICAgICAgcmVzX2l0ZXIgPSBbcmVzXSBpZiAobm90IGlzaW5zdGFuY2UocmVzLCBJdGVyYWJsZSkgb3IgaXNpbnN0YW5jZShyZXMsIChzdHIsIGJ5dGVzKSkpIGVsc2UgcmVzCisgICAgICAgIHN0ZXAuY29udGV4dC5yZXN1bHQgPSBbIF9jb252ZXJ0X3Jlc3VsdHMoeCkgZm9yIHggaW4gcmVzX2l0ZXIgXQogICAgICAgICBzdGVwLmNvbnRleHQuZmFpbGVkID0gRmFsc2UKICAgICAgICAgc3RlcC5jb250ZXh0LmZhaWxlZF9tZXNzYWdlID0gJycKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CkBAIC0xNjEsNyArMjA1LDcgQEAKIAogQHRoZW4oInRoZSB0cmF2ZXJzYWwgd2lsbCByYWlzZSBhbiBlcnJvciIpCiBkZWYgcmFpc2VfYW5fZXJyb3Ioc3RlcCk6Ci0gICAgaWYgc3RlcC5jb250ZXh0Lmlnbm9yZToKKyAgICBpZiAoc3RlcC5jb250ZXh0Lmlnbm9yZSk6CiAgICAgICAgIHJldHVybgogCiAgICAgYXNzZXJ0X3RoYXQoc3RlcC5jb250ZXh0LmZhaWxlZCwgZXF1YWxfdG8oVHJ1ZSkpCkBAIC0xNjksMTcgKzIxMywxNyBAQAogCiBAdGhlbigidGhlIHRyYXZlcnNhbCB3aWxsIHJhaXNlIGFuIGVycm9yIHdpdGggbWVzc2FnZSB7Y29tcGFyaXNvbjp3fSB0ZXh0IG9mIHtleHBlY3RlZF9tZXNzYWdlOlF1b3RlZFN0cmluZ30iKQogZGVmIHJhaXNlX2FuX2Vycm9yX3dpdGhfbWVzc2FnZShzdGVwLCBjb21wYXJpc29uLCBleHBlY3RlZF9tZXNzYWdlKToKLSAgICBpZiBzdGVwLmNvbnRleHQuaWdub3JlOgorICAgIGlmIChzdGVwLmNvbnRleHQuaWdub3JlKToKICAgICAgICAgcmV0dXJuCiAKICAgICBhc3NlcnRfdGhhdChzdGVwLmNvbnRleHQuZmFpbGVkLCBlcXVhbF90byhUcnVlKSkKIAogICAgIGlmIGNvbXBhcmlzb24gPT0gImNvbnRhaW5pbmciOgotICAgICAgICBhc3NlcnRfdGhhdChzdGVwLmNvbnRleHQuZmFpbGVkX21lc3NhZ2UsIGNvbnRhaW5zX3N0cmluZyhleHBlY3RlZF9tZXNzYWdlKSkKKyAgICAgICAgYXNzZXJ0X3RoYXQoc3RlcC5jb250ZXh0LmZhaWxlZF9tZXNzYWdlLnVwcGVyKCksIGNvbnRhaW5zX3N0cmluZyhleHBlY3RlZF9tZXNzYWdlLnVwcGVyKCkpKQogICAgIGVsaWYgY29tcGFyaXNvbiA9PSAiZW5kaW5nIjoKLSAgICAgICAgYXNzZXJ0X3RoYXQoc3RlcC5jb250ZXh0LmZhaWxlZF9tZXNzYWdlLCBlbmRzX3dpdGgoZXhwZWN0ZWRfbWVzc2FnZSkpCisgICAgICAgIGFzc2VydF90aGF0KHN0ZXAuY29udGV4dC5mYWlsZWRfbWVzc2FnZS51cHBlcigpLCBlbmRzX3dpdGgoZXhwZWN0ZWRfbWVzc2FnZS51cHBlcigpKSkKICAgICBlbGlmIGNvbXBhcmlzb24gPT0gInN0YXJ0aW5nIjoKLSAgICAgICAgYXNzZXJ0X3RoYXQoc3RlcC5jb250ZXh0LmZhaWxlZF9tZXNzYWdlLCBzdGFydHNfd2l0aChleHBlY3RlZF9tZXNzYWdlKSkKKyAgICAgICAgYXNzZXJ0X3RoYXQoc3RlcC5jb250ZXh0LmZhaWxlZF9tZXNzYWdlLnVwcGVyKCksIHN0YXJ0c193aXRoKGV4cGVjdGVkX21lc3NhZ2UudXBwZXIoKSkpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBjb21wYXJpc29uICciICsgY29tcGFyaXNvbiArICInLSBtdXN0IGJlOiBjb250YWluaW5nLCBlbmRpbmcgb3Igc3RhcnRpbmciKQogCkBAIC0yMDMsNiArMjQ3LDQ4IEBACiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZGF0YSBjaGFyYWN0ZXJpemF0aW9uIG9mICIgKyBjaGFyYWN0ZXJpemVkX2FzKQogCiAKK0B0aGVuKCJ0aGUgcmVzdWx0IHNob3VsZCBiZSBhIHN1YmdyYXBoIHdpdGggdGhlIGZvbGxvd2luZyIpCitkZWYgYXNzZXJ0X3N1YmdyYXBoKHN0ZXApOgorICAgIGlmIHN0ZXAuY29udGV4dC5pZ25vcmU6CisgICAgICAgIHJldHVybgorCisgICAgYXNzZXJ0X3RoYXQoc3RlcC5jb250ZXh0LmZhaWxlZCwgZXF1YWxfdG8oRmFsc2UpLCBzdGVwLmNvbnRleHQuZmFpbGVkX21lc3NhZ2UpCisKKyAgICAjIHJlc3VsdCBzaG91bGQgYmUgYSBncmFwaAorICAgIHNnID0gc3RlcC5jb250ZXh0LnJlc3VsdFswXQorICAgIGFzc2VydF90aGF0KHNnLCBpbnN0YW5jZV9vZihHcmFwaCkpCisKKyAgICAjIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBkYXRhdGFibGUgdGVsbHMgdXMgd2hhdCB3ZSBhcmUgYXNzZXJ0aW5nCisgICAgaWYgbm90IGdldGF0dHIoc3RlcCwgInRhYmxlIiwgTm9uZSk6CisgICAgICAgIHJldHVybgorICAgIGNvbHVtbl9uYW1lID0gbmV4dChpdGVyKHN0ZXAudGFibGVbMF0ua2V5cygpKSkKKyAgICBhc3NlcnRpbmdfdmVydGljZXMgPSBjb2x1bW5fbmFtZSA9PSAidmVydGljZXMiCisKKyAgICBpZiBhc3NlcnRpbmdfdmVydGljZXM6CisgICAgICAgIGV4cGVjdGVkX3ZlcnRpY2VzID0gW19jb252ZXJ0KGxpbmVbY29sdW1uX25hbWVdLCBzdGVwLmNvbnRleHQpIGZvciBsaW5lIGluIHN0ZXAudGFibGVdCisgICAgICAgIGFzc2VydF90aGF0KGxlbihzZy52ZXJ0aWNlcyksIGVxdWFsX3RvKGxlbihleHBlY3RlZF92ZXJ0aWNlcykpKQorCisgICAgICAgIGZvciBleHBlY3RlZCBpbiBleHBlY3RlZF92ZXJ0aWNlczoKKyAgICAgICAgICAgIGFzc2VydF90aGF0KGV4cGVjdGVkLmlkLCBpc19pbihzZy52ZXJ0aWNlcykpCisgICAgICAgICAgICBhY3R1YWwgPSBzZy52ZXJ0aWNlc1tleHBlY3RlZC5pZF0KKyAgICAgICAgICAgIGFzc2VydF90aGF0KGFjdHVhbC5sYWJlbCwgZXF1YWxfdG8oZXhwZWN0ZWQubGFiZWwpKQorCisgICAgICAgICAgICB2YXJpYWJsZV9rZXkgPSAiYWdlIiBpZiBhY3R1YWwubGFiZWwgPT0gInBlcnNvbiIgZWxzZSAibGFuZyIKKyAgICAgICAgICAgIGFzc2VydF90aGF0KGFjdHVhbFsibmFtZSJdLCBlcXVhbF90byhleHBlY3RlZFsibmFtZSJdKSkKKyAgICAgICAgICAgIGFzc2VydF90aGF0KGFjdHVhbFt2YXJpYWJsZV9rZXldLCBlcXVhbF90byhleHBlY3RlZFt2YXJpYWJsZV9rZXldKSkKKyAgICBlbHNlOgorICAgICAgICBleHBlY3RlZF9lZGdlcyA9IFtfY29udmVydChsaW5lW2NvbHVtbl9uYW1lXSwgc3RlcC5jb250ZXh0KSBmb3IgbGluZSBpbiBzdGVwLnRhYmxlXQorICAgICAgICBhc3NlcnRfdGhhdChsZW4oc2cuZWRnZXMpLCBlcXVhbF90byhsZW4oZXhwZWN0ZWRfZWRnZXMpKSkKKworICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gZXhwZWN0ZWRfZWRnZXM6CisgICAgICAgICAgICBhc3NlcnRfdGhhdChleHBlY3RlZC5pZCwgaXNfaW4oc2cuZWRnZXMpKQorICAgICAgICAgICAgYWN0dWFsID0gc2cuZWRnZXNbZXhwZWN0ZWQuaWRdCisgICAgICAgICAgICBhc3NlcnRfdGhhdChhY3R1YWwubGFiZWwsIGVxdWFsX3RvKGV4cGVjdGVkLmxhYmVsKSkKKyAgICAgICAgICAgIGFzc2VydF90aGF0KGFjdHVhbFsid2VpZ2h0Il0sIGVxdWFsX3RvKGV4cGVjdGVkWyJ3ZWlnaHQiXSkpCisgICAgICAgICAgICBhc3NlcnRfdGhhdChhY3R1YWwub3V0Vi5pZCwgZXF1YWxfdG8oZXhwZWN0ZWQub3V0Vi5pZCkpCisgICAgICAgICAgICBhc3NlcnRfdGhhdChhY3R1YWwuaW5WLmlkLCBlcXVhbF90byhleHBlY3RlZC5pblYuaWQpKQorCisKIEB0aGVuKCJ0aGUgZ3JhcGggc2hvdWxkIHJldHVybiB7Y291bnQ6ZH0gZm9yIGNvdW50IG9mIHt0cmF2ZXJzYWxfc3RyaW5nOlF1b3RlZFN0cmluZ30iKQogZGVmIGFzc2VydF9zaWRlX2VmZmVjdHMoc3RlcCwgY291bnQsIHRyYXZlcnNhbF9zdHJpbmcpOgogICAgIGlmIHN0ZXAuY29udGV4dC5pZ25vcmU6CkBAIC0yMzIsNiArMzE4LDEyIEBACiAgICAgcmV0dXJuCiAKIAorQHRoZW4oInRoZSBmaWxlIHtmaWxlOlF1b3RlZFN0cmluZ30gc2hvdWxkIGV4aXN0IikKK2RlZiB1bnN1cHBvcnRlZF9zY2VuYXJpbyhzdGVwLCBmaWxlKToKKyAgICAjIHRoaXMgaXMgYSBkbyBub3RoaW5nIHN0ZXAgYXMgdGhlIHRlc3QgY2FuJ3QgYmUgc3VwcG9ydGVkIGluIHJlbW90ZSBjYXNlcworICAgIHJldHVybgorCisKIGRlZiBfc3BsaXRfYnlfZWxlbWVudChzKToKICAgICBkZXB0aCA9IDAKICAgICBjdXJyZW50ID0gW10KQEAgLTI5OCw2ICszOTAsMTIgQEAKICAgICAgICAgcmV0dXJuIF9fZmluZF9jYWNoZWRfZWxlbWVudChjdHgsIGdyYXBoX25hbWUsIHZhbFsyOi0xXSwgImUiKQogICAgIGVsaWYgaXNpbnN0YW5jZSh2YWwsIHN0cikgYW5kIHJlLm1hdGNoKHIiXnZwXFsuKlxdJCIsIHZhbCk6ICAjIHBhcnNlIHZlcnRleHByb3BlcnR5CiAgICAgICAgIHJldHVybiBfX2ZpbmRfY2FjaGVkX2VsZW1lbnQoY3R4LCBncmFwaF9uYW1lLCB2YWxbMzotMV0sICJ2cCIpCisgICAgZWxpZiBpc2luc3RhbmNlKHZhbCwgc3RyKSBhbmQgcmUubWF0Y2gociJecHJvcFxbLitcXSQiLCB2YWwpOiAgIyBwYXJzZSBwcm9wZXJ0eSBhcyBrZXkvdmFsdWUgcGFpcgorICAgICAgICBpbm5lciA9IHZhbFs1Oi0xXQorICAgICAgICBjb21tYV9pZHggPSBpbm5lci5pbmRleCgiLCIpCisgICAgICAgIGtleSA9IGlubmVyWzpjb21tYV9pZHhdCisgICAgICAgIHZhbHVlID0gX2NvbnZlcnQoaW5uZXJbY29tbWFfaWR4ICsgMTpdLCBjdHgpCisgICAgICAgIHJldHVybiBQcm9wZXJ0eShrZXksIHZhbHVlLCBOb25lKQogICAgIGVsaWYgaXNpbnN0YW5jZSh2YWwsIHN0cikgYW5kIHJlLm1hdGNoKHIiXm1cWy4qXF0kIiwgdmFsKTogICMgcGFyc2UganNvbiBhcyBhIG1hcAogICAgICAgICByZXR1cm4gX2NvbnZlcnQoanNvbi5sb2Fkcyh2YWxbMjotMV0pLCBjdHgpCiAgICAgZWxpZiBpc2luc3RhbmNlKHZhbCwgc3RyKSBhbmQgcmUubWF0Y2gociJecFxbLipcXSQiLCB2YWwpOiAgIyBwYXJzZSBwYXRoCkBAIC0zNjcsNiArNDY1LDkgQEAKICAgICBpZiBpc2luc3RhbmNlKHZhbCwgUGF0aCk6CiAgICAgICAgICMga2lsbCBvdXQgbGFiZWxzIGFzIHRoZXkgYXJlbid0IGluIHRoZSBhc3NlcnRpb24gbG9naWMKICAgICAgICAgcmV0dXJuIFBhdGgoW3NldChbXSldLCB2YWwub2JqZWN0cykKKyAgICBlbGlmIGlzaW5zdGFuY2UodmFsLCBQcm9wZXJ0eSkgYW5kIG5vdCBpc2luc3RhbmNlKHZhbCwgVmVydGV4UHJvcGVydHkpOgorICAgICAgICAjIHN0cmlwIGVsZW1lbnQgZm9yIGtleS92YWx1ZSBvbmx5IGNvbXBhcmlzb24gd2l0aCBwcm9wWy4uLl0gc3ludGF4CisgICAgICAgIHJldHVybiBQcm9wZXJ0eSh2YWwua2V5LCB2YWwudmFsdWUsIE5vbmUpCiAgICAgZWxpZiBfaXNfbmFuKHZhbCk6CiAgICAgICAgICMgd2UgbmVlZCB0byB1c2UgdGhlIHN0cmluZyBmb3JtIGZvciBOYU4gdG8gdGVzdCB0aGUgcmVzdWx0cyBzaW5jZSBmbG9hdC5uYW4gIT0gZmxvYXQubmFuCiAgICAgICAgIHJldHVybiAiZFtOYU5dIgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvZ3JlbWxpbi5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9mZWF0dXJlL2dyZW1saW4ucHkKaW5kZXggY2NkYzY0My4uMjM1YjVmOSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvZ3JlbWxpbi5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvZmVhdHVyZS9ncmVtbGluLnB5CkBAIC0yMTAsMTEgKzIxMCwxMSBAQAogICAgICdnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWCc6IFsobGFtYmRhIGc6Zy5hZGRfdignZXZlbnQnKS5wcm9wZXJ0eSgnZGF0ZXRpbWUnLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpKSwgKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnZGF0ZXRpbWUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkpXSwgCiAgICAgJ2dfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGRhdGVBZGRYRFRfZGF5WDFYWCc6IFsobGFtYmRhIGc6Zy5hZGRfdignZXZlbnQnKS5wcm9wZXJ0eSgnZGF0ZXRpbWUnLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpKSwgKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnZGF0ZXRpbWUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkucHJvamVjdCgnb3JpZ2luYWwnLCAnbmV4dERheScpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmRhdGVfYWRkKERULmRheSwgMSkpKV0sIAogICAgICdnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9kYXRlRGlmZlhkYXRldGltZVgyMDIzXzA4XzEwWFgnOiBbKGxhbWJkYSBnOmcuYWRkX3YoJ2V2ZW50JykucHJvcGVydHkoJ2RhdGV0aW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKSksIChsYW1iZGEgZzpnLlYoKS52YWx1ZXMoJ2RhdGV0aW1lJykuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmRhdGVfZGlmZihkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwOjMwKzAwOjAwJykpKV0sIAotICAgICdnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF93aGVyZVhpc1hndFhkYXRldGltZVgyMDIwXzAxXzAxWFhYWCc6IFsobGFtYmRhIGc6Zy5hZGRfdignZXZlbnQnKS5wcm9wZXJ0eSgnZGF0ZXRpbWUnLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpKSwgKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnZGF0ZXRpbWUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkud2hlcmUoX18uaXNfKFAuZ3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMC0wMS0wMVQwMDowMCswMDowMCcpKSkpKV0sIAorICAgICdnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF93aGVyZVhpc1hndFhkYXRldGltZVgyMDIwXzAxXzAxWFhYWCc6IFsobGFtYmRhIGc6Zy5hZGRfdignZXZlbnQnKS5wcm9wZXJ0eSgnZGF0ZXRpbWUnLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDEyOjM0OjU2KzAwOjAwJykpKSwgKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnZGF0ZXRpbWUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkud2hlcmUoX18uaXNfKFAuZ3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMC0wMS0wMVQwMDowMCswMDowMCcpKSkpKV0sIAogICAgICdnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9jaG9vc2VYaXNYZXFYZGF0ZXRpbWVYMjAyM18wOF8wOFhYWFhfY29uc3RhbnRYbWF0Y2hYX2NvbnN0YW50WG5vTWF0Y2hYWCc6IFsobGFtYmRhIGc6Zy5hZGRfdignZXZlbnQnKS5wcm9wZXJ0eSgnZGF0ZXRpbWUnLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpKSwgKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnZGF0ZXRpbWUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkuY2hvb3NlKF9fLmlzXyhQLmVxKGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMDA6MDArMDA6MDAnKSkpLCBfXy5jb25zdGFudCgnbWF0Y2gnKSwgX18uY29uc3RhbnQoJ25vTWF0Y2gnKSkpXSwgCiAgICAgJ2dfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2xvY2FsWGFnZ3JlZ2F0ZVhhWF9jYXBYYVgnOiBbKGxhbWJkYSBnOmcuYWRkX3YoJ2V2ZW50JykucHJvcGVydHkoJ2RhdGV0aW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKSksIChsYW1iZGEgZzpnLlYoKS52YWx1ZXMoJ2RhdGV0aW1lJykuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSldLCAKICAgICAnZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2FnZ3JlZ2F0ZVhhWF9jYXBYYVgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMDA6MDArMDA6MDAnKSkuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmFnZ3JlZ2F0ZSgnYScpLmNhcCgnYScpKV0sIAotICAgICdnX2luamVjdFhkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfZ3JvdXBDb3VudCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkuZ3JvdXBfY291bnQoKSldLCAKKyAgICAnZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2dyb3VwQ291bnQnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMTI6MzQ6NTYrMDA6MDAnKSkuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwX2NvdW50KCkpXSwgCiAgICAgJ2dfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFgnOiBbKGxhbWJkYSBnOmcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMS41KSksIChsYW1iZGEgZzpnLlYoKS52YWx1ZXMoJ2RvdWJsZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuRE9VQkxFKSkpXSwgCiAgICAgJ2dfRV92YWx1ZXNYd2VpZ2h0WF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFgnOiBbKGxhbWJkYSBnOmcuRSgpLnZhbHVlcygnd2VpZ2h0JykuaXNfKFAudHlwZV9vZihHVHlwZS5ET1VCTEUpKSldLCAKICAgICAnZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9tYXRoWGNlaWxYJzogWyhsYW1iZGEgZzpnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDIuNykpLCAobGFtYmRhIGc6Zy5WKCkudmFsdWVzKCdkb3VibGUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRPVUJMRSkpLm1hdGgoJ2NlaWwgXycpKV0sIApAQCAtNDQ3LDYgKzQ0Nyw3IEBACiAgICAgJ2dfVl9oYXNJZFhlcVhudWxsWFgnOiBbKGxhbWJkYSBnOmcuVigpLmhhc19pZChQLmVxKE5vbmUpKSldLCAKICAgICAnZ19WX2hhc0lkWDJfbnVsbFgnOiBbKGxhbWJkYSBnLCB2aWQyPU5vbmU6Zy5WKCkuaGFzX2lkKHZpZDIsIE5vbmUpKV0sIAogICAgICdnX1ZfaGFzSWRYbWFya292YXJfdmFkYXN2YXJYJzogWyhsYW1iZGEgZywgdmlkMj1Ob25lLHZpZDE9Tm9uZTpnLlYoKS5oYXNfaWQodmlkMSwgdmlkMikpXSwgCisgICAgJ2dfVl9oYXNJZFhtYXJrb3Zhcl92YWRhc3Zhcl9wZXRlcnZhclgnOiBbKGxhbWJkYSBnLCB2aWQyPU5vbmUsdmlkMT1Ob25lOmcuVigpLmhhc19pZCh2aWQxLCB2aWQyKSldLCAKICAgICAnZ19WX2hhc0lkWDJBc1N0cmluZ19udWxsWCc6IFsobGFtYmRhIGcsIHZpZDI9Tm9uZTpnLlYoKS5oYXNfaWQodmlkMiwgTm9uZSkpXSwgCiAgICAgJ2dfVl9oYXNJZFgxQXNTdHJpbmdfMkFzU3RyaW5nX251bGxYJzogWyhsYW1iZGEgZywgdmlkMj1Ob25lLHZpZDE9Tm9uZTpnLlYoKS5oYXNfaWQodmlkMSwgdmlkMiwgTm9uZSkpXSwgCiAgICAgJ2dfVl9oYXNJZFhudWxsXzJYJzogWyhsYW1iZGEgZywgdmlkMj1Ob25lOmcuVigpLmhhc19pZChOb25lLCB2aWQyKSldLCAKQEAgLTU1Niw3ICs1NTcsNyBAQAogICAgICdnX1ZYNVhfcmFuZ2VYMF8xWF9pbl9yYW5nZVgwXzFYX2luX3ZhbHVlc1huYW1lWCc6IFsobGFtYmRhIGcsIHZpZDU9Tm9uZTpnLlYodmlkNSkucmFuZ2VfKDAsIDEpLmluXygpLnJhbmdlXygwLCAxKS5pbl8oKS52YWx1ZXMoJ25hbWUnKSldLCAKICAgICAnZ19WWDVYX3JlcGVhdFhyYW5nZVgwXzFYX2luX3JlcGVhdFhyYW5nZVgwXzFYX2luWF90aW1lc1gxWFhfdGltZXNYMVhfdmFsdWVzWG5hbWVYJzogWyhsYW1iZGEgZywgdmlkNT1Ob25lOmcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2VfKDAsIDEpLmluXygpLnJlcGVhdChfXy5yYW5nZV8oMCwgMSkuaW5fKCkpLnRpbWVzKDEpKS50aW1lcygxKS52YWx1ZXMoJ25hbWUnKSldLCAKICAgICAnZ19WWDVYX3JlcGVhdFhyYW5nZVgwXzFYX2luX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfY2FwWHhYJzogWyhsYW1iZGEgZywgdmlkNT1Ob25lOmcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2VfKDAsIDEpLmluXygpLmFnZ3JlZ2F0ZSgneCcpKS50aW1lcygyKS5jYXAoJ3gnKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hFYXJseUxpbWl0U3RyYXRlZ3lYX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luX2xpbWl0WDFYX2xpbWl0WDFYWF90aW1lc1gyWCc6IFsobGFtYmRhIGcsIHZpZDU9Tm9uZTpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5FYXJseUxpbWl0U3RyYXRlZ3knKV0pLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluXygpLmxpbWl0KDEpLmxpbWl0KDEpKS50aW1lcygyKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hFYXJseUxpbWl0U3RyYXRlZ3lYX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luX2xpbWl0WDFYX2xpbWl0WDFYWF90aW1lc1gyWCc6IFsobGFtYmRhIGcsIHZpZDU9Tm9uZTpnLndpdGhvdXRfc3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kpLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluXygpLmxpbWl0KDEpLmxpbWl0KDEpKS50aW1lcygyKSldLCAKICAgICAnZ19WX3JlcGVhdFhvdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcuVigpLnJlcGVhdChfXy5vdXQoKS53aGVyZShfXy5oYXMoJ25hbWUnKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpKS50aW1lcygyKSldLCAKICAgICAnZ19WX291dF93aGVyZVhoYXNYbmFtZVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYX291dF93aGVyZVhoYXNYbmFtZVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYJzogWyhsYW1iZGEgZzpnLlYoKS5vdXQoKS53aGVyZShfXy5oYXMoJ25hbWUnKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLm91dCgpLndoZXJlKF9fLmhhcygnbmFtZScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkpXSwgCiAgICAgJ2dfVl9oYXNYbmFtZVhKQU1YWF9yZXBlYXRYb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDJYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy5WKCkuaGFzKCduYW1lJywgJ0pBTScpLnJlcGVhdChfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikpLnRpbWVzKDIpKV0sIApAQCAtNjcwLDU3ICs2NzEsNTcgQEAKICAgICAnZ19WX3doZXJlWGxhYmVsX2lzWHNvZnR3YXJlWFgnOiBbKGxhbWJkYSBnOmcuVigpLndoZXJlKF9fLmxhYmVsKCkuaXNfKCdzb2Z0d2FyZScpKSldLCAKICAgICAnZ19WX3doZXJlWGxhYmVsX2lzWHBlcnNvblhYJzogWyhsYW1iZGEgZzpnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzXygncGVyc29uJykpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5JyldKS5WKCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1Zfb3V0X2NvdW50JzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkub3V0KCkuY291bnQoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneVhfVl93aGVyZVhvdXRYJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkud2hlcmUoX18ub3V0KCkpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYdmFsdWVzWG5hbWVYWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSgpKS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoJ25hbWUnKSkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVhfVl9vcmRlcl9ieVh2YWx1ZXNYbmFtZVhYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5JyldKS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoJ25hbWUnKSkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVhfVl9vcmRlcl9ieVh2YWx1ZXNYbmFtZVhYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoJ25hbWUnKSkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSgpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneScpXSkuVigpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kpLlYoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5Db21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5JyldKS5WKCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWENvbm5lY3RpdmVTdHJhdGVneVN0cmF0ZWd5WF9WX2hhc1huYW1lX21hcmtvWF9vcl93aGVyZVhpblhrbm93c1hfaGFzWG5hbWVfbWFya29YWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoQ29ubmVjdGl2ZVN0cmF0ZWd5KCkpLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vcl8oKS53aGVyZShfXy5pbl8oJ2tub3dzJykuaGFzKCduYW1lJywgJ21hcmtvJykpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWENvbm5lY3RpdmVTdHJhdGVneVhfVl9oYXNYbmFtZV9tYXJrb1hfb3Jfd2hlcmVYaW5Ya25vd3NYX2hhc1huYW1lX21hcmtvWFgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5Db25uZWN0aXZlU3RyYXRlZ3knKV0pLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vcl8oKS53aGVyZShfXy5pbl8oJ2tub3dzJykuaGFzKCduYW1lJywgJ21hcmtvJykpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWENvbm5lY3RpdmVTdHJhdGVneVhfVl9oYXNYbmFtZV9tYXJrb1hfb3Jfd2hlcmVYaW5Ya25vd3NYX2hhc1huYW1lX21hcmtvWFgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcygnbmFtZScsICdtYXJrbycpLm9yXygpLndoZXJlKF9fLmluXygna25vd3MnKS5oYXMoJ25hbWUnLCAnbWFya28nKSkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYQ291bnRTdHJhdGVneVhfVl93aGVyZVhvdXRFX2NvdW50X2lzWDBYWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoQ291bnRTdHJhdGVneSgpKS5WKCkud2hlcmUoX18ub3V0X2UoKS5jb3VudCgpLmlzXygwKSkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYQ291bnRTdHJhdGVneVhfVl93aGVyZVhvdXRFX2NvdW50X2lzWDBYWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uQ291bnRTdHJhdGVneScpXSkuVigpLndoZXJlKF9fLm91dF9lKCkuY291bnQoKS5pc18oMCkpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWENvdW50U3RyYXRlZ3lYX1Zfd2hlcmVYb3V0RV9jb3VudF9pc1gwWFgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRfZSgpLmNvdW50KCkuaXNfKDApKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hFYXJseUxpbWl0U3RyYXRlZ3lYX1Zfb3V0X29yZGVyX2J5WG5hbWVYX3ZhbHVlTWFwX2xpbWl0WDNYX3NlbGVjdFhuYW1lWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KCkpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykudmFsdWVfbWFwKCkubGltaXQoMykuc2VsZWN0KCduYW1lJykpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYRWFybHlMaW1pdFN0cmF0ZWd5WF9WX291dF9vcmRlcl9ieVhuYW1lWF92YWx1ZU1hcF9saW1pdFgzWF9zZWxlY3RYbmFtZVgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkVhcmx5TGltaXRTdHJhdGVneScpXSkuVigpLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS52YWx1ZV9tYXAoKS5saW1pdCgzKS5zZWxlY3QoJ25hbWUnKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hFYXJseUxpbWl0U3RyYXRlZ3lYX1Zfb3V0X29yZGVyX2J5WG5hbWVYX3ZhbHVlTWFwX2xpbWl0WDNYX3NlbGVjdFhuYW1lWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLnZhbHVlX21hcCgpLmxpbWl0KDMpLnNlbGVjdCgnbmFtZScpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX3RydWVfbG9nV2FybmluZ19mYWxzZVhYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KHRocm93X2V4Y2VwdGlvbj1UcnVlLCBsb2dfd2FybmluZz1GYWxzZSkpLlYoKS5vdXQoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl9mYWxzZV9sb2dXYXJuaW5nX2ZhbHNlWFhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dfZXhjZXB0aW9uPUZhbHNlLCBsb2dfd2FybmluZz1GYWxzZSkpLlYoKS5vdXQoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3knKV0pLlYoKS5vdXQoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKS5vdXQoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hFbGVtZW50SWRTdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3koKSkuVigpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWEVsZW1lbnRJZFN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uRWxlbWVudElkU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hFbGVtZW50SWRTdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kpLlYoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hGaWx0ZXJSYW5raW5nU3RyYXRlZ3lYX1Zfb3V0X29yZGVyX2RlZHVwJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3koKSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hGaWx0ZXJSYW5raW5nU3RyYXRlZ3lYX1Zfb3V0X29yZGVyX2RlZHVwJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5GaWx0ZXJSYW5raW5nU3RyYXRlZ3knKV0pLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYRmlsdGVyUmFua2luZ1N0cmF0ZWd5WF9WX291dF9vcmRlcl9kZWR1cCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWEdyYXBoRmlsdGVyU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKEdyYXBoRmlsdGVyU3RyYXRlZ3koKSkuVigpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWEdyYXBoRmlsdGVyU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkdyYXBoRmlsdGVyU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hHcmFwaEZpbHRlclN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lYRGV0YWNoZWRGYWN0b3J5WFhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koaGFsdGVkX3RyYXZlcnNlcl9mYWN0b3J5PSdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeScpKS5WKCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lYUmVmZXJlbmNlRmFjdG9yeVhYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZF90cmF2ZXJzZXJfZmFjdG9yeT0nb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlRmFjdG9yeScpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5IYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneScpXSkuVigpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5WF9WX2lkZW50aXR5X291dCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3koKSkuVigpLmlkZW50aXR5KCkub3V0KCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lYX1ZfaWRlbnRpdHlfb3V0JzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JZGVudGl0eVJlbW92YWxTdHJhdGVneScpXSkuVigpLmlkZW50aXR5KCkub3V0KCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3lYX1ZfaWRlbnRpdHlfb3V0JzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhJZGVudGl0eVJlbW92YWxTdHJhdGVneSkuVigpLmlkZW50aXR5KCkub3V0KCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lYX1Zfb3V0RV9pblYnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpLlYoKS5vdXRfZSgpLmluX3YoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3knKV0pLlYoKS5vdXRfZSgpLmluX3YoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kpLlYoKS5vdXRfZSgpLmluX3YoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hJbmxpbmVGaWx0ZXJTdHJhdGVneVhfVl9maWx0ZXJYaGFzWG5hbWVfbWFya29YWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3koKSkuVigpLmZpbHRlcl8oX18uaGFzKCduYW1lJywgJ21hcmtvJykpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWElubGluZUZpbHRlclN0cmF0ZWd5WF9WX2ZpbHRlclhoYXNYbmFtZV9tYXJrb1hYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JbmxpbmVGaWx0ZXJTdHJhdGVneScpXSkuVigpLmZpbHRlcl8oX18uaGFzKCduYW1lJywgJ21hcmtvJykpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWElubGluZUZpbHRlclN0cmF0ZWd5WF9WX2ZpbHRlclhoYXNYbmFtZV9tYXJrb1hYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSkuVigpLmZpbHRlcl8oX18uaGFzKCduYW1lJywgJ21hcmtvJykpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkuVigpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLkxhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KS5WKCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9vdXRfYm90aEVfY291bnQnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3koKSkuVigpLm91dCgpLmJvdGhfZSgpLmNvdW50KCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9vdXRfYm90aEVfY291bnQnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkxhenlCYXJyaWVyU3RyYXRlZ3knKV0pLlYoKS5vdXQoKS5ib3RoX2UoKS5jb3VudCgpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWExhenlCYXJyaWVyU3RyYXRlZ3lYX1Zfb3V0X2JvdGhFX2NvdW50JzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkub3V0KCkuYm90aF9lKCkuY291bnQoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hNYXRjaEFsZ29yaXRobVN0cmF0ZWd5WG1hdGNoQWxnb3JpdGhtX0NvdW50TWF0Y2hBbGdvcml0aG1YWF9WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KG1hdGNoX2FsZ29yaXRobT0nb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkQ291bnRNYXRjaEFsZ29yaXRobScpKS5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLCBfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2MnKSkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYTWF0Y2hBbGdvcml0aG1TdHJhdGVneVhtYXRjaEFsZ29yaXRobV9HcmVlZHlNYXRjaEFsZ29yaXRobVhYX1ZfbWF0Y2hYYV9rbm93c19iX19hX2NyZWF0ZWRfY1gnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hfYWxnb3JpdGhtPSdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRHcmVlZHlNYXRjaEFsZ29yaXRobScpKS5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLCBfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2MnKSkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYTWF0Y2hBbGdvcml0aG1TdHJhdGVneVhfVl9tYXRjaFhhX2tub3dzX2JfX2FfY3JlYXRlZF9jWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5maW5hbGl6YXRpb24uTWF0Y2hBbGdvcml0aG1TdHJhdGVneScpXSkuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKSwgX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuYXNfKCdjJykpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lYX1ZfbWF0Y2hYYV9rbm93c19iX19hX2NyZWF0ZWRfY1gnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJyksIF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFzXygnYycpKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5WF9WX21hdGNoWGFfY3JlYXRlZF9sb3BfYl9fYl8wY3JlYXRlZF8yOV9jWF93aGVyZVhjX3JlcGVhdFhvdXRYX3RpbWVzWDJYWF9zZWxlY3RYYV9iX2NYJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KCkpLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5oYXMoJ25hbWUnLCAnbG9wJykuYXNfKCdiJyksIF9fLmFzXygnYicpLmluXygnY3JlYXRlZCcpLmhhcygnYWdlJywgMjkpLmFzXygnYycpKS53aGVyZShfXy5hc18oJ2MnKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoJ2EnLCAnYicsICdjJykpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYTWF0Y2hQcmVkaWNhdGVTdHJhdGVneVhfVl9tYXRjaFhhX2NyZWF0ZWRfbG9wX2JfX2JfMGNyZWF0ZWRfMjlfY1hfd2hlcmVYY19yZXBlYXRYb3V0WF90aW1lc1gyWFhfc2VsZWN0WGFfYl9jWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uTWF0Y2hQcmVkaWNhdGVTdHJhdGVneScpXSkuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmhhcygnbmFtZScsICdsb3AnKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaW5fKCdjcmVhdGVkJykuaGFzKCdhZ2UnLCAyOSkuYXNfKCdjJykpLndoZXJlKF9fLmFzXygnYycpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdCgnYScsICdiJywgJ2MnKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5WF9WX21hdGNoWGFfY3JlYXRlZF9sb3BfYl9fYl8wY3JlYXRlZF8yOV9jWF93aGVyZVhjX3JlcGVhdFhvdXRYX3RpbWVzWDJYWF9zZWxlY3RYYV9iX2NYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuaGFzKCduYW1lJywgJ2xvcCcpLmFzXygnYicpLCBfXy5hc18oJ2InKS5pbl8oJ2NyZWF0ZWQnKS5oYXMoJ2FnZScsIDI5KS5hc18oJ2MnKSkud2hlcmUoX18uYXNfKCdjJykucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KCdhJywgJ2InLCAnYycpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3koKSkuVigpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLk1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KS5WKCkpXSwgCiAgICAgJ2dfVl9jb3dvcmtlcic6IFsobGFtYmRhIGc6Zy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5maWx0ZXJfKF9fLm91dF9lKCdjcmVhdGVkJykpLmFnZ3JlZ2F0ZSgncCcpLmFzXygncDEnKS52YWx1ZXMoJ25hbWUnKS5hc18oJ3AxbicpLnNlbGVjdCgncCcpLnVuZm9sZCgpLndoZXJlKFAubmVxKCdwMScpKS5hc18oJ3AyJykudmFsdWVzKCduYW1lJykuYXNfKCdwMm4nKS5zZWxlY3QoJ3AyJykub3V0KCdjcmVhdGVkJykuY2hvb3NlKF9fLmluXygnY3JlYXRlZCcpLndoZXJlKFAuZXEoJ3AxJykpLCBfXy52YWx1ZXMoJ25hbWUnKSwgX18uY29uc3RhbnQoW10pKS5ncm91cCgpLmJ5KF9fLnNlbGVjdCgncDFuJykpLmJ5KF9fLmdyb3VwKCkuYnkoX18uc2VsZWN0KCdwMm4nKSkuYnkoX18udW5mb2xkKCkuZm9sZCgpLnByb2plY3QoJ251bUNvQ3JlYXRlZCcsICdjb0NyZWF0ZWQnKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpLmJ5KCkpKS51bmZvbGQoKSldLCAKICAgICAnZ19WX2Nvd29ya2VyX3dpdGhfbWlkVic6IFsobGFtYmRhIGc6Zy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5maWx0ZXJfKF9fLm91dF9lKCdjcmVhdGVkJykpLmFzXygncDEnKS5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS53aGVyZShQLm5lcSgncDEnKSkuZmlsdGVyXyhfXy5vdXRfZSgnY3JlYXRlZCcpKS5hc18oJ3AyJykubWFwKF9fLm91dCgnY3JlYXRlZCcpLndoZXJlKF9fLmluXygnY3JlYXRlZCcpLmFzXygncDEnKSkudmFsdWVzKCduYW1lJykuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdCgncDEnKS5ieSgnbmFtZScpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdCgncDInKS5ieSgnbmFtZScpKS5ieShfXy5wcm9qZWN0KCdudW1Db0NyZWF0ZWQnLCAnY29DcmVhdGVkJykuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3koKSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWE9wdGlvbnNTdHJhdGVneVhteVZhcl9teVZhbHVlWFhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KG15X3Zhcj0nbXlWYWx1ZScpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uT3B0aW9uc1N0cmF0ZWd5JyldKS5WKCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kpLlYoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hPcmRlckxpbWl0U3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSgpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYT3JkZXJMaW1pdFN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5PcmRlckxpbWl0U3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hPcmRlckxpbWl0U3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9uYW1lJzogWyhsYW1iZGEgZzpnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpKSwgKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJ10pKS5WKCkudmFsdWVzKCduYW1lJykpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1ZfbmFtZSc6IFsobGFtYmRhIGc6Zy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKSksIChsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYScsICdiJ10pKS5WKCkudmFsdWVzKCduYW1lJykpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX25hbWUnOiBbKGxhbWJkYSBnOmcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykpLCAobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2MnXSkpLlYoKS52YWx1ZXMoJ25hbWUnKSldLCAKQEAgLTc0NiwxNSArNzQ3LDE1IEBACiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9tZXJnZVZfb3B0aW9uWG9uQ3JlYXRlWCc6IFsobGFtYmRhIGcsIHh4MT1Ob25lLHh4Mj1Ob25lOmcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpKSwgKGxhbWJkYSBnLCB4eDE9Tm9uZSx4eDI9Tm9uZTpnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYSddKSkubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MikpLCAobGFtYmRhIGcsIHh4MT1Ob25lLHh4Mj1Ob25lOmcuVigpLmhhcygnbmFtZScsICdhbGljZScpLmhhcygnYWdlJywgMzUpLmhhcygnX3BhcnRpdGlvbicsICdhJykpLCAobGFtYmRhIGcsIHh4MT1Ob25lLHh4Mj1Ob25lOmcuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfaW5qZWN0WDBYX19tZXJnZVZfb3B0aW9uWG9uQ3JlYXRlWCc6IFsobGFtYmRhIGcsIHh4MT1Ob25lLHh4Mj1Ob25lOmcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpKSwgKGxhbWJkYSBnLCB4eDE9Tm9uZSx4eDI9Tm9uZTpnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYSddKSkuaW5qZWN0KDApLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpKSwgKGxhbWJkYSBnLCB4eDE9Tm9uZSx4eDI9Tm9uZTpnLlYoKS5oYXMoJ25hbWUnLCAnYWxpY2UnKS5oYXMoJ2FnZScsIDM1KS5oYXMoJ19wYXJ0aXRpb24nLCAnYScpKSwgKGxhbWJkYSBnLCB4eDE9Tm9uZSx4eDI9Tm9uZTpnLlYoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hQYXRoUHJvY2Vzc29yU3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlc1huYW1lWFgnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneSgpKS5WKCkuYXNfKCdhJykuc2VsZWN0KCdhJykuYnkoX18udmFsdWVzKCduYW1lJykpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFBhdGhQcm9jZXNzb3JTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYdmFsdWVzWG5hbWVYWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUGF0aFByb2Nlc3NvclN0cmF0ZWd5JyldKS5WKCkuYXNfKCdhJykuc2VsZWN0KCdhJykuYnkoX18udmFsdWVzKCduYW1lJykpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFBhdGhQcm9jZXNzb3JTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYdmFsdWVzWG5hbWVYWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXNfKCdhJykuc2VsZWN0KCdhJykuYnkoX18udmFsdWVzKCduYW1lJykpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3koKSkuVigpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hQYXRoUmV0cmFjdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkpXSwgCiAgICAgJ2dfVl9zaG9ydGVzdHBhdGgnOiBbKGxhbWJkYSBnOmcuVigpLmFzXygndicpLmJvdGgoKS5hc18oJ3YnKS5wcm9qZWN0KCdzcmMnLCAndGd0JywgJ3AnKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCAndicpKS5ieShfXy5zZWxlY3QoUG9wLmxhc3QsICd2JykpLmJ5KF9fLnNlbGVjdChQb3AuYWxsXywgJ3YnKSkuYXNfKCd0cmlwbGUnKS5ncm91cCgneCcpLmJ5KF9fLnNlbGVjdCgnc3JjJywgJ3RndCcpKS5ieShfXy5zZWxlY3QoJ3AnKS5mb2xkKCkpLnNlbGVjdCgndGd0JykuYmFycmllcigpLnJlcGVhdChfXy5ib3RoKCkuYXNfKCd2JykucHJvamVjdCgnc3JjJywgJ3RndCcsICdwJykuYnkoX18uc2VsZWN0KFBvcC5maXJzdCwgJ3YnKSkuYnkoX18uc2VsZWN0KFBvcC5sYXN0LCAndicpKS5ieShfXy5zZWxlY3QoUG9wLmFsbF8sICd2JykpLmFzXygndCcpLmZpbHRlcl8oX18uc2VsZWN0KFBvcC5hbGxfLCAncCcpLmNvdW50KFNjb3BlLmxvY2FsKS5hc18oJ2wnKS5zZWxlY3QoUG9wLmxhc3QsICd0Jykuc2VsZWN0KFBvcC5hbGxfLCAncCcpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcSgnbCcpKSkud2hlcmUoJ3NyYycsIFAubmVxKCd0Z3QnKSkuc2VsZWN0KFBvcC5sYXN0LCAndCcpLm5vdF8oX18uc2VsZWN0KFBvcC5hbGxfLCAncCcpLmFzXygncCcpLmNvdW50KFNjb3BlLmxvY2FsKS5hc18oJ2wnKS5zZWxlY3QoUG9wLmFsbF8sICd4JykudW5mb2xkKCkuZmlsdGVyXyhfXy5zZWxlY3QoQ29sdW1uLmtleXMpLndoZXJlKFAuZXEoJ3QnKSkuYnkoX18uc2VsZWN0KCdzcmMnLCAndGd0JykpKS5maWx0ZXJfKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcl8oX18uY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAubHQoJ2wnKSksIF9fLndoZXJlKFAuZXEoJ3AnKSkpKSkuYmFycmllcigpLmdyb3VwKCd4JykuYnkoX18uc2VsZWN0KCdzcmMnLCAndGd0JykpLmJ5KF9fLnNlbGVjdChQb3AuYWxsXywgJ3AnKS5mb2xkKCkpLnNlbGVjdCgndGd0JykuYmFycmllcigpKS5jYXAoJ3gnKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkudW5mb2xkKCkubWFwKF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkpXSwgCiAgICAgJ2dfVl9wbGF5bGlzdF9wYXRocyc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KHNlZWQ9OTk5OTkpKS5WKCkuaGFzKCduYW1lJywgJ0JvYl9EeWxhbicpLmluXygnc3VuZ0J5JykuYXNfKCdhJykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlX3BhdGgoKS5mcm9tXygnYScpKS51bnRpbChfXy5vdXQoJ3dyaXR0ZW5CeScpLmhhcygnbmFtZScsICdKb2hubnlfQ2FzaCcpKS5saW1pdCgxKS5hc18oJ2InKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5hc18oJ2MnKS5zaW1wbGVfcGF0aCgpLmZyb21fKCdiJykudG8oJ2MnKSkudW50aWwoX18ub3V0KCdzdW5nQnknKS5oYXMoJ25hbWUnLCAnR3JhdGVmdWxfRGVhZCcpKS5saW1pdCgxKS5wYXRoKCkuZnJvbV8oJ2EnKS51bmZvbGQoKS5wcm9qZWN0KCdzb25nJywgJ2FydGlzdHMnKS5ieSgnbmFtZScpLmJ5KF9fLmNvYWxlc2NlKF9fLm91dCgnc3VuZ0J5JywgJ3dyaXR0ZW5CeScpLmRlZHVwKCkudmFsdWVzKCduYW1lJyksIF9fLmNvbnN0YW50KCdVbmtub3duJykpLmZvbGQoKSkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfZ3JvdXBfYnlYYWdlWF9ieVhuYW1lWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmdyb3VwKCkuYnkoJ2FnZScpLmJ5KCduYW1lJykpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfZ3JvdXBfYnlYYWdlWF9ieVhuYW1lWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3knKV0pLlYoKS5ncm91cCgpLmJ5KCdhZ2UnKS5ieSgnbmFtZScpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2dyb3VwX2J5WGFnZVhfYnlYbmFtZVgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieSgnYWdlJykuYnkoJ25hbWUnKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hQcm9maWxlU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSgpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUHJvZmlsZVN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmZpbmFsaXphdGlvbi5Qcm9maWxlU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hQcm9maWxlU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1Zfb3V0WGtub3dzWF9uYW1lJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5vdXQoJ2tub3dzJykudmFsdWVzKCduYW1lJykpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfYWRkVlhwZXJzb25YJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLmFkZF92KCdwZXJzb24nKSldLCAKQEAgLTc2NSwzMSArNzY2LDMxIEBACiAgICAgJ2dfVl9jbGFzc2ljX3JlY29tbWVuZGF0aW9uJzogWyhsYW1iZGEgZzpnLlYoKS5oYXMoJ25hbWUnLCAnREFSSyBTVEFSJykuYXNfKCdhJykub3V0KCdmb2xsb3dlZEJ5JykuYWdncmVnYXRlKCdzdGFzaCcpLmluXygnZm9sbG93ZWRCeScpLndoZXJlKFAubmVxKCdhJykuYW5kXyhQLm5vdF8oUC53aXRoaW4oJ3N0YXNoJykpKSkuZ3JvdXBfY291bnQoKS51bmZvbGQoKS5wcm9qZWN0KCd4JywgJ3knLCAneicpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKCduYW1lJykpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKCdwZXJmb3JtYW5jZXMnKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdCgneicpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoJ3knKSwgT3JkZXIuYXNjKS5saW1pdCg1KS5sb2NhbChfXy5hZ2dyZWdhdGUoJ20nKSkuc2VsZWN0KCd4JykpXSwgCiAgICAgJ2dfVl9jbGFzc2ljX3JlY29tbWVuZGF0aW9uX3JhbmtlZCc6IFsobGFtYmRhIGc6Zy5WKCkuaGFzKCduYW1lJywgJ0RBUksgU1RBUicpLmFzXygnYScpLm91dCgnZm9sbG93ZWRCeScpLmFnZ3JlZ2F0ZSgnc3Rhc2gnKS5pbl8oJ2ZvbGxvd2VkQnknKS53aGVyZShQLm5lcSgnYScpLmFuZF8oUC5ub3RfKFAud2l0aGluKCdzdGFzaCcpKSkpLmdyb3VwX2NvdW50KCkudW5mb2xkKCkucHJvamVjdCgneCcsICd5JywgJ3onKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygnbmFtZScpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcygncGVyZm9ybWFuY2VzJykpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoJ3onKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KCd5JyksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKCdtJykpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KCkpLlYoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZmluYWxpemF0aW9uLlJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneScpXSkuVigpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhvdXRYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneScpXSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneScpXSkuVigpLnJlcGVhdChfXy5pbl8oKSkudGltZXMoMikpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGluWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW5fKCkpLnRpbWVzKDIpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhvdXRfaGFzWG5hbWVfbm90U3RhcnRpbmdXaXRoWHpYWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18ub3V0KCkuaGFzKCduYW1lJywgVGV4dFAubm90X3N0YXJ0aW5nX3dpdGgoJ3onKSkpLnRpbWVzKDIpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhvdXRfaGFzWG5hbWVfbm90U3RhcnRpbmdXaXRoWHpYWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlJlcGVhdFVucm9sbFN0cmF0ZWd5JyldKS5WKCkucmVwZWF0KF9fLm91dCgpLmhhcygnbmFtZScsIFRleHRQLm5vdF9zdGFydGluZ193aXRoKCd6JykpKS50aW1lcygyKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYb3V0X2hhc1huYW1lX25vdFN0YXJ0aW5nV2l0aFh6WFhYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoJ25hbWUnLCBUZXh0UC5ub3Rfc3RhcnRpbmdfd2l0aCgneicpKSkudGltZXMoMikpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGluX2hhc1hhZ2VfZ3RYMjBYWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uaW5fKCkuaGFzKCdhZ2UnLCBQLmd0KDIwKSkpLnRpbWVzKDIpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhpbl9oYXNYYWdlX2d0WDIwWFhYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneScpXSkuVigpLnJlcGVhdChfXy5pbl8oKS5oYXMoJ2FnZScsIFAuZ3QoMjApKSkudGltZXMoMikpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGluX2hhc1hhZ2VfZ3RYMjBYWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluXygpLmhhcygnYWdlJywgUC5ndCgyMCkpKS50aW1lcygyKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aF9oYXNYYWdlX2x0WDMwWFhYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoJ2FnZScsIFAubHQoMzApKSkudGltZXMoMikpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUmVwZWF0VW5yb2xsU3RyYXRlZ3knKV0pLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcygnYWdlJywgUC5sdCgzMCkpKS50aW1lcygyKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aF9oYXNYYWdlX2x0WDMwWFhYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKCdhZ2UnLCBQLmx0KDMwKSkpLnRpbWVzKDIpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoRV9vdGhlclZfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5ib3RoX2UoKS5vdGhlcl92KCkuaGFzKCdhZ2UnLCBQLmx0KDMwKSkpLnRpbWVzKDIpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoRV9vdGhlclZfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUmVwZWF0VW5yb2xsU3RyYXRlZ3knKV0pLlYoKS5yZXBlYXQoX18uYm90aF9lKCkub3RoZXJfdigpLmhhcygnYWdlJywgUC5sdCgzMCkpKS50aW1lcygyKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYYm90aEVfb3RoZXJWX2hhc1hhZ2VfbHRYMzBYWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhfZSgpLm90aGVyX3YoKS5oYXMoJ2FnZScsIFAubHQoMzApKSkudGltZXMoMikpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfbGltaXRYMVhYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5saW1pdCgxKSkudGltZXMoMikpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfbGltaXRYMVhYX3RpbWVzWDJYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneScpXSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX2xpbWl0WDFYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9vcmRlcl9ieVhuYW1lWF9yZXBlYXRYYm90aF9vcmRlcl9ieVhuYW1lWF9hZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX2xpbWl0WDEwWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVYX3JlcGVhdFhib3RoX29yZGVyX2J5WG5hbWVYX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfbGltaXRYMTBYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5SZXBlYXRVbnJvbGxTdHJhdGVneScpXSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVYX3JlcGVhdFhib3RoX29yZGVyX2J5WG5hbWVYX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfbGltaXRYMTBYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX3NhbXBsZVgxWFhfdGltZXNYMlgnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfc2FtcGxlWDFYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUmVwZWF0VW5yb2xsU3RyYXRlZ3knKV0pLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfc2FtcGxlWDFYWF90aW1lc1gyWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYdGhyb3dFeGNlcHRpb25fdHJ1ZVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhpZF8xMjNYX3Byb3BlcnR5WG5hbWVfbWFya29YJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd19leGNlcHRpb249VHJ1ZSkpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnaWQnLCAxMjMpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykpXSwgCiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYdGhyb3dFeGNlcHRpb25fdHJ1ZVhYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhhZ2VfMjlYX3Byb3BlcnR5WG5hbWVfbWFya29YJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd19leGNlcHRpb249VHJ1ZSwga2V5cz17J2FnZSd9KSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdhZ2UnLCAyOSkucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGlkXzEyM1hfcHJvcGVydHlYbmFtZV9tYXJrb1gnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5JyldKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ2lkJywgMTIzKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnZhbHVlcygpKV0sIAotICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlNlZWRTdHJhdGVneScpXSkuVigpKV0sIAorICAgICdnX3dpdGhvdXRTdHJhdGVnaWVzWFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5WF9hZGRWWHBlcnNvblhfcHJvcGVydHlYaWRfMTIzWF9wcm9wZXJ0eVhuYW1lX21hcmtvWCc6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnaWQnLCAxMjMpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykudmFsdWVzKCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYU2VlZFN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kpLlYoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcygqW0dyZW1saW5UeXBlKCdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5TdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5JyldKS5WKCkpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpKSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfRSc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpKSkuRSgpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9vdXRFJzogWyhsYW1iZGEgZywgdmlkND1Ob25lOmcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLlYodmlkNCkub3V0X2UoKSldLCAKQEAgLTg1MiwxMSArODUzLDExIEBACiAgICAgJ2dfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9FWDlYX2JvdGhWJzogWyhsYW1iZGEgZywgZWlkOT1Ob25lOmcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tfYWRqYWNlbnRfdmVydGljZXM9RmFsc2UsIHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5FKGVpZDkpLmJvdGhfdigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYY2hlY2tBZGphY2VudFZlcnRpY2VzX3N1YmdyYXBoRFhYX0VYOVhfYm90aFYnOiBbKGxhbWJkYSBnLCBlaWQ5PU5vbmU6Zy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShjaGVja19hZGphY2VudF92ZXJ0aWNlcz1UcnVlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuRShlaWQ5KS5ib3RoX3YoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHVzZU1hcFN0ZXBzSW5GaWx0ZXJYX0UnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ubGFiZWwoKS5pc18oUC5lcSgnY3JlYXRlZCcpKSwgdmVydGljZXM9X18udmFsdWVzKCduYW1lJykuaXNfKFAud2l0aGluKCdsb3AnLCAnam9zaCcpKSwgY2hlY2tfYWRqYWNlbnRfdmVydGljZXM9VHJ1ZSkpLkUoKSldLCAKLSAgICAnZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneVhfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WJzogWyhsYW1iZGEgZzpnLndpdGhfc3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSgpKS53aXRob3V0X3N0cmF0ZWdpZXMoKltHcmVtbGluVHlwZSgnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlZlcnRleFByb2dyYW1TdHJhdGVneScpXSkuVigpKV0sIAorICAgICdnX3dpdGhTdHJhdGVnaWVzWFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5WF93aXRob3V0U3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCkpLndpdGhvdXRfc3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSldLCAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneV9WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCksIFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkpXSwgCi0gICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5JyldKS53aXRoX3N0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRob3V0X3N0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kpLndpdGhfc3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpKV0sIAogICAgICdnX3dpdGhTdHJhdGVnaWVzWFZlcnRleFByb2dyYW1TdHJhdGVneVhfVic6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSldLCAKLSAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKCpbR3JlbWxpblR5cGUoJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3knKV0pLlYoKSldLCAKKyAgICAnZ193aXRob3V0U3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3lYX1YnOiBbKGxhbWJkYSBnOmcud2l0aG91dF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpKV0sIAogICAgICdnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWCc6IFsobGFtYmRhIGcsIHZpZDE9Tm9uZTpnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSksIChsYW1iZGEgZywgdmlkMT1Ob25lOmcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hZGRfZSgnY3JlYXRlZEJ5JykudG8oJ2EnKSksIChsYW1iZGEgZywgdmlkMT1Ob25lOmcuRSgpKSwgKGxhbWJkYSBnLCB2aWQxPU5vbmU6Zy5WKHZpZDEpLmluX2UoKSldLCAKICAgICAnZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9hZGRFWGNyZWF0ZWRCeVhfdG9YYVhfcHJvcGVydHlYd2VpZ2h0XzJYJzogWyhsYW1iZGEgZywgdmlkMT1Ob25lOmcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpKSwgKGxhbWJkYSBnLCB2aWQxPU5vbmU6Zy5WKHZpZDEpLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFkZF9lKCdjcmVhdGVkQnknKS50bygnYScpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApKSwgKGxhbWJkYSBnLCB2aWQxPU5vbmU6Zy5FKCkpLCAobGFtYmRhIGcsIHZpZDE9Tm9uZTpnLlYodmlkMSkuYm90aF9lKCkpLCAobGFtYmRhIGcsIHZpZDE9Tm9uZTpnLlYodmlkMSkuaW5fZSgpLmhhcygnd2VpZ2h0JywgMi4wKSldLCAKICAgICAnZ19WX291dEVfcHJvcGVydHlYd2VpZ2h0X251bGxYJzogWyhsYW1iZGEgZzpnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSksIChsYW1iZGEgZzpnLlYoKS5vdXRfZSgpLnByb3BlcnR5KCd3ZWlnaHQnLCBOb25lKSksIChsYW1iZGEgZzpnLkUoKS5wcm9wZXJ0aWVzKCd3ZWlnaHQnKSldLCAKQEAgLTEwMzgsNyArMTAzOSw3IEBACiAgICAgJ2dfVl92YWx1ZXNYbmFtZVhfY29uam9pblgxWCc6IFsobGFtYmRhIGc6Zy5WKCkudmFsdWVzKCduYW1lJykuY29uam9pbignMScpKV0sIAogICAgICdnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2NvbmpvaW5YX1gnOiBbKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnbm9uZXhpc3RhbnQnKS5mb2xkKCkuY29uam9pbignOycpKV0sIAogICAgICdnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfY29uam9pblhfWCc6IFsobGFtYmRhIGc6Zy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS5mb2xkKCkuY29uam9pbignXycpKV0sIAotICAgICdnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfZm9sZF9jb25qb2luWF9YJzogWyhsYW1iZGEgZzpnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oJzsnKSldLCAKKyAgICAnZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2ZvbGRfY29uam9pblhzZW1pY29sb25YJzogWyhsYW1iZGEgZzpnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oJzsnKSldLCAKICAgICAnZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9jb25qb2luWE1BUktPWCc6IFsobGFtYmRhIGc6Zy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygnbmFtZScpLnRvX3VwcGVyKCkpLmNvbmpvaW4oJ01BUktPJykpXSwgCiAgICAgJ2dfaW5qZWN0WG1hcmtvWF9jb25qb2luWF9YJzogWyhsYW1iZGEgZzpnLmluamVjdChbJ21hcmtvJ10pLmNvbmpvaW4oJy0nKSldLCAKICAgICAnZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYX2NvbmpvaW5YMVgnOiBbKGxhbWJkYSBnOmcuVigpLnZhbHVlX21hcCgnbG9jYXRpb24nKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmNvbmpvaW4oJzEnKSldLCAKQEAgLTExMTksOSArMTEyMCw4IEBACiAgICAgJ2dfRSc6IFsobGFtYmRhIGc6Zy5FKCkpXSwgCiAgICAgJ2dfRVgxMVgnOiBbKGxhbWJkYSBnLCBlaWQxMT1Ob25lOmcuRShlaWQxMSkpXSwgCiAgICAgJ2dfRVgxMUFzU3RyaW5nWCc6IFsobGFtYmRhIGcsIGVpZDExPU5vbmU6Zy5FKGVpZDExKSldLCAKLSAgICAnZ19FWGUxMVgnOiBbKGxhbWJkYSBnLCBlMTE9Tm9uZTpnLkUoZTExKSldLCAKLSAgICAnZ19FWGU3X2UxMVgnOiBbKGxhbWJkYSBnLCBlNz1Ob25lLGUxMT1Ob25lOmcuRShlNywgZTExKSldLCAKLSAgICAnZ19FWGxpc3RYZTdfZTExWFgnOiBbKGxhbWJkYSBnLCB4eDE9Tm9uZTpnLkUoeHgxKSldLCAKKyAgICAnZ19FWGVpZDdfZWlkMTFYJzogWyhsYW1iZGEgZywgZWlkMTE9Tm9uZSxlaWQ3PU5vbmU6Zy5FKGVpZDcsIGVpZDExKSldLCAKKyAgICAnZ19FWGxpc3RYZWlkN19laWQxMVhYJzogWyhsYW1iZGEgZywgeHgxPU5vbmU6Zy5FKHh4MSkpXSwgCiAgICAgJ2dfRVhudWxsWCc6IFsobGFtYmRhIGc6Zy5FKE5vbmUpKV0sIAogICAgICdnX0VYbGlzdFhudWxsWFgnOiBbKGxhbWJkYSBnLCB4eDE9Tm9uZTpnLkUoeHgxKSldLCAKICAgICAnZ19FWDExX251bGxYJzogWyhsYW1iZGEgZywgZWlkMTE9Tm9uZTpnLkUoZWlkMTEsIE5vbmUpKV0sIApAQCAtMTE0Miw2ICsxMTQyLDcgQEAKICAgICAnZ19WWDFYX291dEVYa25vd3NfY3JlYXRlZFhfaW5WJzogWyhsYW1iZGEgZywgdmlkMT1Ob25lOmcuVih2aWQxKS5vdXRfZSgna25vd3MnLCAnY3JlYXRlZCcpLmluX3YoKSldLCAKICAgICAnZ19WWDFYX291dEVYa25vd3NYX2JvdGhWJzogWyhsYW1iZGEgZywgdmlkMT1Ob25lOmcuVih2aWQxKS5vdXRfZSgna25vd3MnKS5ib3RoX3YoKSldLCAKICAgICAnZ19WWDFYX291dEVYa25vd3NYX2JvdGhWX25hbWUnOiBbKGxhbWJkYSBnLCB2aWQxPU5vbmU6Zy5WKHZpZDEpLm91dF9lKCdrbm93cycpLmJvdGhfdigpLnZhbHVlcygnbmFtZScpKV0sIAorICAgICdnX1ZfdG9FWG91dF9rbm93c3ZhclhfdmFsdWVzWHdlaWdodFgnOiBbKGxhbWJkYSBnLCB4eDE9Tm9uZTpnLlYoKS50b19lKERpcmVjdGlvbi5PVVQsIHh4MSkudmFsdWVzKCd3ZWlnaHQnKSldLCAKICAgICAnZ19WWDFYX3Byb3BlcnRpZXNfZWxlbWVudCc6IFsobGFtYmRhIGcsIHZpZDI9Tm9uZTpnLlYodmlkMikucHJvcGVydGllcygpLmVsZW1lbnQoKS5saW1pdCgxKSldLCAKICAgICAnZ19WX3Byb3BlcnRpZXNfZWxlbWVudCc6IFsobGFtYmRhIGc6Zy5WKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSldLCAKICAgICAnZ19WX3Byb3BlcnRpZXNYYWdlWF9lbGVtZW50JzogWyhsYW1iZGEgZzpnLlYoKS5wcm9wZXJ0aWVzKCdhZ2UnKS5lbGVtZW50KCkpXSwgCkBAIC0xNTM5LDYgKzE1NDAsMTAgQEAKICAgICAnZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYYWdlX25hbWVYX3ZhbHVlJzogWyhsYW1iZGEgZzpnLlYoKS5oYXMoJ2FnZScpLnByb3BlcnRpZXMoJ2FnZScsICduYW1lJykudmFsdWUoKSldLCAKICAgICAnZ19WX3Byb3BlcnRpZXNYbmFtZV9hZ2VfbnVsbFhfdmFsdWUnOiBbKGxhbWJkYSBnOmcuVigpLnByb3BlcnRpZXMoJ25hbWUnLCAnYWdlJywgTm9uZSkudmFsdWUoKSldLCAKICAgICAnZ19WX3ZhbHVlc1huYW1lX2FnZV9udWxsWCc6IFsobGFtYmRhIGc6Zy5WKCkudmFsdWVzKCduYW1lJywgJ2FnZScsIE5vbmUpKV0sIAorICAgICdnX0VfcHJvcGVydGllc1h3ZWlnaHRYJzogWyhsYW1iZGEgZzpnLkUoKS5wcm9wZXJ0aWVzKCd3ZWlnaHQnKSldLCAKKyAgICAnZ19FX3Byb3BlcnRpZXMnOiBbKGxhbWJkYSBnOmcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnc2luY2UnLCAyMDIwKSksIChsYW1iZGEgZzpnLkUoKS5wcm9wZXJ0aWVzKCkpXSwgCisgICAgJ2dfRV9wcm9wZXJ0aWVzWHNpbmNlWCc6IFsobGFtYmRhIGc6Zy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLnByb3BlcnR5KCdzaW5jZScsIDIwMjApKSwgKGxhbWJkYSBnOmcuRSgpLnByb3BlcnRpZXMoJ3NpbmNlJykpXSwgCisgICAgJ2dfRV9wcm9wZXJ0aWVzX211bHRpX2VkZ2VzJzogWyhsYW1iZGEgZzpnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkucHJvcGVydHkoJ3NpbmNlJywgMjAyMCkuYWRkX2UoJ2xpa2VzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLnByb3BlcnR5KCd0YWcnLCAnZnJpZW5kJykpLCAobGFtYmRhIGc6Zy5FKCkucHJvcGVydGllcygpKV0sIAogICAgICdnX2luamVjdFhfX2ZlYXR1cmVfX190ZXN0X19udWxsWF9yVHJpbSc6IFsobGFtYmRhIGc6Zy5pbmplY3QoJ2ZlYXR1cmUgICcsICdvbmUgdGVzdCAnLCBOb25lLCAnJywgJyAnLCAn44CAYWJjJywgJ2FiY+OAgCcsICfjgIBhYmPjgIAnLCAn44CA44CAJykucl90cmltKCkpXSwgCiAgICAgJ2dfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3JUcmltWGxvY2FsWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoWycgIGZlYXR1cmUgICcsICcgb25lIHRlc3QgJywgTm9uZSwgJycsICcgJywgJ+OAgGFiYycsICdhYmPjgIAnLCAn44CAYWJj44CAJywgJ+OAgOOAgCddKS5yX3RyaW0oU2NvcGUubG9jYWwpKV0sIAogICAgICdnX2luamVjdFhfX2ZlYXR1cmVfX1hfclRyaW0nOiBbKGxhbWJkYSBnOmcuaW5qZWN0KCcgIGZlYXR1cmUgICcpLnJfdHJpbSgpKV0sIApAQCAtMTYyOSw3ICsxNjM0LDcgQEAKICAgICAnZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hc1hhWF9zZWxlY3RYYVhfYnlYYWdlWCc6IFsobGFtYmRhIGc6Zy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFzXygnYScpLnNlbGVjdCgnYScpLmJ5KCdhZ2UnKSldLCAKICAgICAnZ193aXRoU2lkZUVmZmVjdFhrX251bGxYX2luamVjdFh4WF9zZWxlY3RYa1gnOiBbKGxhbWJkYSBnOmcud2l0aF9zaWRlX2VmZmVjdCgnaycsIE5vbmUpLmluamVjdCgneCcpLnNlbGVjdCgnaycpKV0sIAogICAgICdnX1Zfb3V0X2luX3NlbGVjdFhhbGxfYV9hX2FYX2J5WHVuZm9sZF9uYW1lX2ZvbGRYJzogWyhsYW1iZGEgZzpnLmFkZF92KCdBJykucHJvcGVydHkoJ25hbWUnLCAnYTEnKS5hc18oJ2ExJykuYWRkX3YoJ0InKS5wcm9wZXJ0eSgnbmFtZScsICdiMScpLmFzXygnYjEnKS5hZGRfZSgnYWInKS5mcm9tXygnYTEnKS50bygnYjEnKSksIChsYW1iZGEgZzpnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5pbl8oKS5hc18oJ2EnKS5zZWxlY3QoUG9wLmFsbF8sICdhJywgJ2EnLCAnYScpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkpXSwgCi0gICAgJ2dfVl9hc1hsYWJlbFhfbG9jYWxYYWdncmVnYXRlWHhYX3NlbGVjdFh4WF9zZWxlY3RYbGFiZWxYJzogWyhsYW1iZGEgZzpnLlYoKS5hc18oJ2xhYmVsJykubG9jYWwoX18uYWdncmVnYXRlKCd4JykpLmJhcnJpZXIoKS5zZWxlY3QoJ3gnKS5zZWxlY3QoJ2xhYmVsJykpXSwgCisgICAgJ2dfd2l0aG91dFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9hc1hsYWJlbFhfbG9jYWxYYWdncmVnYXRlX3hYX3NlbGVjdFh4WF9zZWxlY3RYbGFiZWxYJzogWyhsYW1iZGEgZzpnLndpdGhvdXRfc3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkuYXNfKCdsYWJlbCcpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgneCcpKS5zZWxlY3QoJ3gnKS5zZWxlY3QoJ2xhYmVsJykpXSwgCiAgICAgJ2dfVl9uYW1lX2FzWGFYX3NlbGVjdFhmaXJzdF9hWCc6IFsobGFtYmRhIGc6Zy5WKCkudmFsdWVzKCduYW1lJykuYXNfKCdhJykuc2VsZWN0KFBvcC5maXJzdCwgJ2EnKSldLCAKICAgICAnZ19WX25hbWVfYXNYYVhfc2VsZWN0WGxhc3RfYVgnOiBbKGxhbWJkYSBnOmcuVigpLnZhbHVlcygnbmFtZScpLmFzXygnYScpLnNlbGVjdChQb3AubGFzdCwgJ2EnKSldLCAKICAgICAnZ19WX25hbWVfYXNYYVhfc2VsZWN0WG1peGVkX2FYJzogWyhsYW1iZGEgZzpnLlYoKS52YWx1ZXMoJ25hbWUnKS5hc18oJ2EnKS5zZWxlY3QoUG9wLm1peGVkLCAnYScpKV0sIApAQCAtMTc5NSw2ICsxODAwLDMwIEBACiAgICAgJ0luamVjdFgxZFhfbHRlWE5hTlgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEuMCkuaXNfKFAubHRlKGZsb2F0KCduYW4nKSkpKV0sIAogICAgICdJbmplY3RYMWRYX2d0WE5hTlgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEuMCkuaXNfKFAuZ3QoZmxvYXQoJ25hbicpKSkpXSwgCiAgICAgJ0luamVjdFgxZFhfZ3RlWE5hTlgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEuMCkuaXNfKFAuZ3RlKGZsb2F0KCduYW4nKSkpKV0sIAorICAgICdJbmplY3RYTmFOWF9lcVgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAuZXEoMS4wKSkpXSwgCisgICAgJ0luamVjdFhOYU5YX25lcVgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAubmVxKDEuMCkpKV0sIAorICAgICdJbmplY3RYTmFOWF9sdFgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAubHQoMS4wKSkpXSwgCisgICAgJ0luamVjdFhOYU5YX2x0ZVgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAubHRlKDEuMCkpKV0sIAorICAgICdJbmplY3RYTmFOWF9ndFgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAuZ3QoMS4wKSkpXSwgCisgICAgJ0luamVjdFhOYU5YX2d0ZVgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAuZ3RlKDEuMCkpKV0sIAorICAgICdJbmplY3RYMWRYX2VxWG51bGxYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxLjApLmlzXyhQLmVxKE5vbmUpKSldLCAKKyAgICAnSW5qZWN0WDFkWF9uZXFYbnVsbFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEuMCkuaXNfKFAubmVxKE5vbmUpKSldLCAKKyAgICAnSW5qZWN0WDFkWF9sdFhudWxsWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoMS4wKS5pc18oUC5sdChOb25lKSkpXSwgCisgICAgJ0luamVjdFgxZFhfbHRlWG51bGxYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxLjApLmlzXyhQLmx0ZShOb25lKSkpXSwgCisgICAgJ0luamVjdFgxZFhfZ3RYbnVsbFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEuMCkuaXNfKFAuZ3QoTm9uZSkpKV0sIAorICAgICdJbmplY3RYMWRYX2d0ZVhudWxsWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoMS4wKS5pc18oUC5ndGUoTm9uZSkpKV0sIAorICAgICdJbmplY3RYbnVsbFhfZXFYMWRYJzogWyhsYW1iZGEgZzpnLmluamVjdChOb25lKS5pc18oUC5lcSgxLjApKSldLCAKKyAgICAnSW5qZWN0WG51bGxYX25lcVgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KE5vbmUpLmlzXyhQLm5lcSgxLjApKSldLCAKKyAgICAnSW5qZWN0WG51bGxYX2x0WDFkWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAubHQoMS4wKSkpXSwgCisgICAgJ0luamVjdFhudWxsWF9sdGVYMWRYJzogWyhsYW1iZGEgZzpnLmluamVjdChOb25lKS5pc18oUC5sdGUoMS4wKSkpXSwgCisgICAgJ0luamVjdFhudWxsWF9ndFgxZFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KE5vbmUpLmlzXyhQLmd0KDEuMCkpKV0sIAorICAgICdJbmplY3RYbnVsbFhfZ3RlWDFkWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAuZ3RlKDEuMCkpKV0sIAorICAgICdJbmplY3RYbnVsbFhfZXFYTmFOWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAuZXEoZmxvYXQoJ25hbicpKSkpXSwgCisgICAgJ0luamVjdFhudWxsWF9uZXFYTmFOWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAubmVxKGZsb2F0KCduYW4nKSkpKV0sIAorICAgICdJbmplY3RYbnVsbFhfbHRYTmFOWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAubHQoZmxvYXQoJ25hbicpKSkpXSwgCisgICAgJ0luamVjdFhudWxsWF9sdGVYTmFOWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAubHRlKGZsb2F0KCduYW4nKSkpKV0sIAorICAgICdJbmplY3RYbnVsbFhfZ3RYTmFOWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAuZ3QoZmxvYXQoJ25hbicpKSkpXSwgCisgICAgJ0luamVjdFhudWxsWF9ndGVYTmFOWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoTm9uZSkuaXNfKFAuZ3RlKGZsb2F0KCduYW4nKSkpKV0sIAogICAgICdJbmplY3RYTmFOWF9lcVhudWxsWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5lcShOb25lKSkpXSwgCiAgICAgJ0luamVjdFhOYU5YX25lcVhudWxsWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5uZXEoTm9uZSkpKV0sIAogICAgICdJbmplY3RYTmFOWF9sdFhudWxsWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5sdChOb25lKSkpXSwgCkBAIC0xODUzLDYgKzE4ODIsMTcgQEAKICAgICAnSW5qZWN0WDFkWF9ub3RYZmFsc2VYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxKS5ub3RfKF9fLmlzXyhQLmx0KDApKSkpXSwgCiAgICAgJ0luamVjdFgxZFhfbm90WE5hTlgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEpLm5vdF8oX18uaXNfKFAuZ3QoZmxvYXQoJ25hbicpKSkpKV0sIAogICAgICdJbmplY3RYMWRYX25vdFhpc1hlcVhOYU5YWFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEpLm5vdF8oX18uaXNfKFAuZXEoZmxvYXQoJ25hbicpKSkpKV0sIAorICAgICdJbmplY3RYMWRYX25vdFhub3RYaXNYZXFYTmFOWFhYWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoMSkubm90XyhfXy5ub3RfKF9fLmlzXyhQLmVxKGZsb2F0KCduYW4nKSkpKSkpXSwgCisgICAgJ0luamVjdFgxZFhfd2hlcmVYbm90WGlzWGx0WE5hTlhYWFgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEpLndoZXJlKF9fLmluamVjdCgxKS5ub3RfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpKSkpXSwgCisgICAgJ0luamVjdFgxZFhfeG9yWHRydWVfdHJ1ZVgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEpLmZpbHRlcl8oX18ub3JfKF9fLmFuZF8oX18uaXNfKFAuZXEoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpLCBfXy5hbmRfKF9fLmlzXyhQLmVxKDEpKSwgX18ubm90XyhfXy5pc18oUC5lcSgxKSkpKSkpKV0sIAorICAgICdJbmplY3RYMWRYX3hvclh0cnVlX2ZhbHNlWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoMSkuZmlsdGVyXyhfXy5vcl8oX18uYW5kXyhfXy5pc18oUC5lcSgxKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSksIF9fLmFuZF8oX18uaXNfKFAuZ3QoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpKSkpXSwgCisgICAgJ0luamVjdFgxZFhfeG9yWHRydWVfZXJyb3JYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxKS5maWx0ZXJfKF9fLm9yXyhfXy5hbmRfKF9fLmlzXyhQLmVxKDEpKSwgX18ubm90XyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkpLCBfXy5hbmRfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpKSkpXSwgCisgICAgJ0luamVjdFgxZFhfeG9yWGZhbHNlX3RydWVYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxKS5maWx0ZXJfKF9fLm9yXyhfXy5hbmRfKF9fLmlzXyhQLmd0KDEpKSwgX18ubm90XyhfXy5pc18oUC5lcSgxKSkpKSwgX18uYW5kXyhfXy5pc18oUC5lcSgxKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSkpKSldLCAKKyAgICAnSW5qZWN0WDFkWF94b3JYZmFsc2VfZmFsc2VYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxKS5maWx0ZXJfKF9fLm9yXyhfXy5hbmRfKF9fLmlzXyhQLmd0KDEpKSwgX18ubm90XyhfXy5pc18oUC5ndCgxKSkpKSwgX18uYW5kXyhfXy5pc18oUC5ndCgxKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSkpKSldLCAKKyAgICAnSW5qZWN0WDFkWF94b3JYZmFsc2VfZXJyb3JYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxKS5maWx0ZXJfKF9fLm9yXyhfXy5hbmRfKF9fLmlzXyhQLmd0KDEpKSwgX18ubm90XyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkpLCBfXy5hbmRfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpLCBfXy5ub3RfKF9fLmlzXyhQLmd0KDEpKSkpKSkpXSwgCisgICAgJ0luamVjdFgxZFhfeG9yWGVycm9yX3RydWVYJzogWyhsYW1iZGEgZzpnLmluamVjdCgxKS5maWx0ZXJfKF9fLm9yXyhfXy5hbmRfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpLCBfXy5hbmRfKF9fLmlzXyhQLmVxKDEpKSwgX18ubm90XyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkpKSkpXSwgCisgICAgJ0luamVjdFgxZFhfeG9yWGVycm9yX2ZhbHNlWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoMSkuZmlsdGVyXyhfXy5vcl8oX18uYW5kXyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSwgX18ubm90XyhfXy5pc18oUC5ndCgxKSkpKSwgX18uYW5kXyhfXy5pc18oUC5ndCgxKSksIF9fLm5vdF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSkpKSkpKV0sIAorICAgICdJbmplY3RYMWRYX3hvclhlcnJvcl9lcnJvclgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KDEpLmZpbHRlcl8oX18ub3JfKF9fLmFuZF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSksIF9fLm5vdF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSkpKSwgX18uYW5kXyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSwgX18ubm90XyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkpKSkpXSwgCiAgICAgJ0luamVjdFhJbmZYX2VxWEluZlgnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KGZsb2F0KCdpbmYnKSkuaXNfKFAuZXEoZmxvYXQoJ2luZicpKSkpXSwgCiAgICAgJ0luamVjdFhJbmZYX25lcVhJbmZYJzogWyhsYW1iZGEgZzpnLmluamVjdChmbG9hdCgnaW5mJykpLmlzXyhQLm5lcShmbG9hdCgnaW5mJykpKSldLCAKICAgICAnSW5qZWN0WE5lZ0luZlhfZXFYTmVnSW5mWCc6IFsobGFtYmRhIGc6Zy5pbmplY3QoZmxvYXQoJy1pbmYnKSkuaXNfKFAuZXEoZmxvYXQoJy1pbmYnKSkpKV0sIApAQCAtMTg3NCw2ICsxOTE0LDggQEAKICAgICAnZ19WX3Byb3BlcnRpZXNfb3JkZXJfaWQnOiBbKGxhbWJkYSBnOmcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmlkXygpKV0sIAogICAgICdnX0VfcHJvcGVydGllc19vcmRlcl92YWx1ZSc6IFsobGFtYmRhIGc6Zy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnYScsIDEwKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDExKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDEyKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDEzKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDE0KS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKS5wcm9wZXJ0eSgnYScsIDE1KSksIChsYW1iZGEgZzpnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS52YWx1ZSgpKV0sIAogICAgICdnX0VfcHJvcGVydGllc19vcmRlcl9ieVhkZXNjWF92YWx1ZSc6IFsobGFtYmRhIGc6Zy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnYScsIDEwKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDExKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDEyKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDEzKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDE0KS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKS5wcm9wZXJ0eSgnYScsIDE1KSksIChsYW1iZGEgZzpnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS52YWx1ZSgpKV0sIAorICAgICdnX0VfcHJvcGVydGllc19vcmRlcic6IFsobGFtYmRhIGc6Zy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnYScsIDEwKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDExKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDEyKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDEzKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDE0KS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKS5wcm9wZXJ0eSgnYScsIDE1KSksIChsYW1iZGEgZzpnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSldLCAKKyAgICAnZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1gnOiBbKGxhbWJkYSBnOmcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkucHJvcGVydHkoJ2EnLCAxMCkuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkucHJvcGVydHkoJ2EnLCAxMSkuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkucHJvcGVydHkoJ2EnLCAxMikuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkucHJvcGVydHkoJ2EnLCAxMykuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkucHJvcGVydHkoJ2EnLCAxNCkuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikucHJvcGVydHkoJ2EnLCAxNSkpLCAobGFtYmRhIGc6Zy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykpXSwgCiAgICAgJ2dfaW5qZWN0X29yZGVyJzogWyhsYW1iZGEgZzpnLmluamVjdCgnenp6JywgJ2ZvbycsIHV1aWQuVVVJRCgnNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxJyksIFsnYScsICdiJywgJ2MnLCAnZCddLCAxLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAxVDAwOjAwKzAwOjAwJyksIFsnYScsICdiJywgJ2MnXSwgeyAnYSc6ICdhJywgJ2InOiAnYicgfSwgTm9uZSwgMi4wLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTAxLTAxVDAwOjAwKzAwOjAwJyksIHsneCcsICd5JywgJ3onfSwgeyAnYSc6ICdhJywgJ2InOiBGYWxzZSwgJ2MnOiAnYycgfSwgJ2JhcicsIHV1aWQuVVVJRCgnNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxJyksIFRydWUsIEZhbHNlLCBmbG9hdCgnaW5mJyksIGZsb2F0KCduYW4nKSwgZmxvYXQoJy1pbmYnKSkub3JkZXIoKSldLCAKICAgICAnZ19pbmplY3Rfb3JkZXJfYnlYZGVzY1gnOiBbKGxhbWJkYSBnOmcuaW5qZWN0KCd6enonLCAnZm9vJywgdXVpZC5VVUlEKCc2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEnKSwgWydhJywgJ2InLCAnYycsICdkJ10sIDEsIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDFUMDA6MDArMDA6MDAnKSwgWydhJywgJ2InLCAnYyddLCB7ICdhJzogJ2EnLCAnYic6ICdiJyB9LCBOb25lLCAyLjAsIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDEtMDFUMDA6MDArMDA6MDAnKSwgeyd4JywgJ3knLCAneid9LCB7ICdhJzogJ2EnLCAnYic6IEZhbHNlLCAnYyc6ICdjJyB9LCAnYmFyJywgdXVpZC5VVUlEKCc1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDEnKSwgVHJ1ZSwgRmFsc2UsIGZsb2F0KCdpbmYnKSwgZmxvYXQoJ25hbicpLCBmbG9hdCgnLWluZicpKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpKV0sIAogICAgICdnX1Zfb3V0X291dF9vcmRlcl9ieVhhc2NYJzogWyhsYW1iZGEgZzpnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykpXSwgCkBAIC0xOTYxLDYgKzIwMDMsNyBAQAogICAgICdnX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFgnOiBbKGxhbWJkYSBnOmcuVigpLmhhc19sYWJlbCgnc29uZycpLmdyb3VwKCkuYnkoJ25hbWUnKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBfY291bnQoKS5ieShULmxhYmVsKSkpXSwgCiAgICAgJ2dfVl9vdXRYZm9sbG93ZWRCeVhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGJvdGhFX2dyb3VwX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWFgnOiBbKGxhbWJkYSBnOmcuVigpLm91dCgnZm9sbG93ZWRCeScpLmdyb3VwKCkuYnkoJ3NvbmdUeXBlJykuYnkoX18uYm90aF9lKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkpKV0sIAogICAgICdnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX2dyb3VwWGFYX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWF93ZWlnaHRfc3VtWCc6IFsobGFtYmRhIGc6Zy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoX2UoKS5ncm91cCgnYScpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcygnd2VpZ2h0Jykuc3VtXygpKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkpXSwgCisgICAgJ2dfd2l0aFNpZGVFZmZlY3RYYV9fbWFya29fNjY2X25vb25lX2JsYWhYX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYb3V0RV9sYWJlbF9mb2xkWF9jYXBYYVgnOiBbKGxhbWJkYSBnOmcud2l0aF9zaWRlX2VmZmVjdCgnYScsIHsgJ21hcmtvJzogWyc2NjYnXSwgJ25vb25lJzogWydibGFoJ10gfSkuVigpLmdyb3VwKCdhJykuYnkoJ25hbWUnKS5ieShfXy5vdXRfZSgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoJ2EnKS51bmZvbGQoKS5ncm91cCgpLmJ5KENvbHVtbi5rZXlzKS5ieShfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykub3JkZXIoU2NvcGUubG9jYWwpLmJ5KE9yZGVyLmFzYykpKV0sIAogICAgICdnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9vdXRYY3JlYXRlZFhfZ3JvdXBfYnlYbmFtZVhfYnlYc2VsZWN0WHBYX3ZhbHVlc1hhZ2VYX3N1bVgnOiBbKGxhbWJkYSBnOmcuVigpLmhhc19sYWJlbCgncGVyc29uJykuYXNfKCdwJykub3V0KCdjcmVhdGVkJykuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KF9fLnNlbGVjdCgncCcpLnZhbHVlcygnYWdlJykuc3VtXygpKSldLCAKICAgICAnZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFgnOiBbKGxhbWJkYSBnOmcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSldLCAKICAgICAnZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cF9ieV9ieVhvdXRfb3JkZXJfZm9sZFgnOiBbKGxhbWJkYSBnOmcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCBQLndpdGhpbigndmFkYXMnLCAncGV0ZXInKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpKSldLCAKQEAgLTIwODgsNCArMjEzMSwxMCBAQAogICAgICdnX1ZYMVhfb3V0RV9pblZfYm90aEVfb3RoZXJWX3RyZWVfYnlYbmFtZVhfYnlYbGFiZWxYJzogWyhsYW1iZGEgZywgdmlkMT1Ob25lOmcuVih2aWQxKS5vdXRfZSgpLmluX3YoKS5ib3RoX2UoKS5vdGhlcl92KCkudHJlZSgpLmJ5KCduYW1lJykuYnkoVC5sYWJlbCkpXSwgCiAgICAgJ2dfVl9vdXRfdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYJzogWyhsYW1iZGEgZzpnLlYoKS5vdXQoKS50cmVlKCdhJykuc2VsZWN0KCdhJykuY291bnQoU2NvcGUubG9jYWwpKV0sIAogICAgICdnX1Zfb3V0X29yZGVyX2J5WG5hbWVYX2xvY2FsWHRyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFgnOiBbKGxhbWJkYSBnOmcuVigpLm91dCgpLmxvY2FsKF9fLnRyZWUoJ2EnKS5zZWxlY3QoJ2EnKS5jb3VudChTY29wZS5sb2NhbCkpKV0sIAorICAgICdnX2lvX3dyaXRlWGtyeW9YJzogWyhsYW1iZGEgZzpnLmlvKCd0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW8nKS53cml0ZSgpKV0sIAorICAgICdnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyeW9YJzogWyhsYW1iZGEgZzpnLmlvKCd0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW8nKS53aXRoXyhJTy53cml0ZXIsIElPLmdyeW8pLndyaXRlKCkpXSwgCisgICAgJ2dfaW9fd3JpdGVYZ3JhcGhzb25YJzogWyhsYW1iZGEgZzpnLmlvKCd0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb24nKS53cml0ZSgpKV0sIAorICAgICdnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBoc29uWCc6IFsobGFtYmRhIGc6Zy5pbygndGlua2VycG9wLW1vZGVybi12My5qc29uJykud2l0aF8oSU8ud3JpdGVyLCBJTy5ncmFwaHNvbikud3JpdGUoKSldLCAKKyAgICAnZ19pb193cml0ZVhncmFwaG1sWCc6IFsobGFtYmRhIGc6Zy5pbygndGlua2VycG9wLW1vZGVybi54bWwnKS53cml0ZSgpKV0sIAorICAgICdnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBobWxYJzogWyhsYW1iZGEgZzpnLmlvKCd0aW5rZXJwb3AtbW9kZXJuLnhtbCcpLndpdGhfKElPLndyaXRlciwgSU8uZ3JhcGhtbCkud3JpdGUoKSldLCAKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9mZWF0dXJlL3RlcnJhaW4ucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvZmVhdHVyZS90ZXJyYWluLnB5CmluZGV4IDRkODA1ZjQuLmIwNmQzZjIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9mZWF0dXJlL3RlcnJhaW4ucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvdGVycmFpbi5weQpAQCAtMzQsNyArMzQsNyBAQAogaW5WID0gX18uaW5fdgogcHJvamVjdCA9IF9fLnByb2plY3QKIHRhaWwgPSBfXy50YWlsCi1ncmVtbGluX3NlcnZlcl91cmwgPSBvcy5lbnZpcm9uLmdldCgnR1JFTUxJTl9TRVJWRVJfVVJMJywgJ3dzOi8vbG9jYWxob3N0Ont9L2dyZW1saW4nKQorZ3JlbWxpbl9zZXJ2ZXJfdXJsID0gb3MuZW52aXJvbi5nZXQoJ0dSRU1MSU5fU0VSVkVSX1VSTCcsICdodHRwOi8vbG9jYWxob3N0Ont9L2dyZW1saW4nKQogdGVzdF9ub19hdXRoX3VybCA9IGdyZW1saW5fc2VydmVyX3VybC5mb3JtYXQoNDU5NDApCiAKIEBiZWZvcmUuYWxsCkBAIC05OSwxMSArOTksMTUgQEAKICAgICBpZiBub3QoInNlcmlhbGl6ZXIiIGluIHdvcmxkLmNvbmZpZy51c2VyX2RhdGEpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0ZXN0IGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgc2V0dGluZyBvZiAtLXVzZXItZGF0YT0ic2VyaWFsaXplcj17bWltZS10eXBlfSInKQogCi0gICAgaWYgd29ybGQuY29uZmlnLnVzZXJfZGF0YVsic2VyaWFsaXplciJdID09ICJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24iOgotICAgICAgICBzID0gc2VyaWFsaXplci5HcmFwaFNPTlNlcmlhbGl6ZXJzVjNkMCgpCi0gICAgZWxpZiB3b3JsZC5jb25maWcudXNlcl9kYXRhWyJzZXJpYWxpemVyIl0gPT0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wIjoKLSAgICAgICAgcyA9IHNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKCkKKyAgICBpZiB3b3JsZC5jb25maWcudXNlcl9kYXRhWyJzZXJpYWxpemVyIl0gPT0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIjoKKyAgICAgICAgcyA9IHNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCkKKyAgICBlbGlmIHdvcmxkLmNvbmZpZy51c2VyX2RhdGFbInNlcmlhbGl6ZXIiXSA9PSAiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uIjoKKyAgICAgICAgcyA9IHNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1Y0KCkKICAgICBlbHNlOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZXJpYWxpemVyIG5vdCBmb3VuZCAtICcgKyB3b3JsZC5jb25maWcudXNlcl9kYXRhWyJzZXJpYWxpemVyIl0pCiAKLSAgICByZXR1cm4gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbih0ZXN0X25vX2F1dGhfdXJsLCBzZXJ2ZXJfZ3JhcGhfbmFtZSwgbWVzc2FnZV9zZXJpYWxpemVyPXMpCisgICAgYnVsa2luZyA9IHdvcmxkLmNvbmZpZy51c2VyX2RhdGFbImJ1bGtpbmciXSA9PSAidHJ1ZSIgaWYgImJ1bGtpbmciIGluIHdvcmxkLmNvbmZpZy51c2VyX2RhdGEgZWxzZSBGYWxzZQorCisgICAgcmV0dXJuIERyaXZlclJlbW90ZUNvbm5lY3Rpb24odGVzdF9ub19hdXRoX3VybCwgc2VydmVyX2dyYXBoX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPXMsIHJlc3BvbnNlX3NlcmlhbGl6ZXI9cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWxrX3Jlc3VsdHM9YnVsa2luZykKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9mZWF0dXJlL3V0aWxzLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvdXRpbHMucHkKaW5kZXggMjdhNjQxYS4uNmY1MzM2MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvdXRpbHMucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ZlYXR1cmUvdXRpbHMucHkKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlKQogCiAgICAgIyBob2xkIGEgbWFwIG9mIG5hbWUvdmVydGV4IGZvciB1c2UgaW4gYXNzZXJ0aW5nIHJlc3VsdHMKLSAgICByZXR1cm4gZy5WKCkuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KF9fLnRhaWwoKSkubmV4dCgpCisgICAgcmV0dXJuIGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJhbGwiKS5WKCkuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KF9fLnRhaWwoKSkubmV4dCgpCiAKIAogQHBpY2sKQEAgLTM2LDEwICszNiwyMyBAQAogCiAgICAgIyBob2xkIGEgbWFwIG9mIHRoZSAibmFtZSIvZWRnZSBmb3IgdXNlIGluIGFzc2VydGluZyByZXN1bHRzIC0gIm5hbWUiIGluIHRoaXMgY29udGV4dCBpcyBpbiB0aGUgZm9ybSBvZgogICAgICMgb3V0Z29pbmdWLWxhYmVsLT5pbmNvbWluZ1YKLSAgICByZXR1cm4gZy5FKCkuZ3JvdXAoKS4gXAotICAgICAgICBieShsYW1iZGE6ICgiaXQub3V0VmVydGV4KCkudmFsdWUoJ25hbWUnKSArICctJyArIGl0LmxhYmVsKCkgKyAnLT4nICsgaXQuaW5WZXJ0ZXgoKS52YWx1ZSgnbmFtZScpIiwgImdyZW1saW4tZ3Jvb3Z5IikpLiBcCisgICAgZWRnZXMgPSB7fQorICAgIGVkZ2VfbWFwID0gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgImFsbCIpLkUoKS5ncm91cCgpLiBcCisgICAgICAgIGJ5KF9fLnByb2plY3QoJ28nLCAnbCcsICdpJykuYnkoX18ub3V0X3YoKS52YWx1ZXMoJ25hbWUnKSkuYnkoX18ubGFiZWwoKSkuYnkoX18uaW5fdigpLnZhbHVlcygnbmFtZScpKSkuIFwKICAgICAgICAgYnkoX18udGFpbCgpKS5uZXh0KCkKIAorICAgIGZvciBrZXksIHZhbHVlIGluIGVkZ2VfbWFwLml0ZW1zKCk6CisgICAgICAgIGVkZ2VzW19nZXRfZWRnZV9rZXlzKGtleSldID0gdmFsdWUKKworICAgIHJldHVybiBlZGdlcworCisKK2RlZiBfZ2V0X2VkZ2Vfa2V5cyhrZXlfbWFwKToKKyAgICBvdXRWID0ga2V5X21hcC5nZXQoJ28nKQorICAgIGxhYmVsID0ga2V5X21hcC5nZXQoJ2wnKQorICAgIGluViA9IGtleV9tYXAuZ2V0KCdpJykKKyAgICByZXR1cm4gZid7b3V0Vn0te2xhYmVsfS0+e2luVn0nCisKIAogQHBpY2sKIGRlZiBjcmVhdGVfbG9va3VwX3ZwKHJlbW90ZSk6CkBAIC00OCwxNSArNjEsMjUgQEAKICAgICAjIGhvbGQgYSBtYXAgb2YgdGhlICJuYW1lIi92ZXJ0ZXhwcm9wZXJ0eSBmb3IgdXNlIGluIGFzc2VydGluZyByZXN1bHRzIC0gIm5hbWUiIGluIHRoaXMgY29udGV4dCBpcyBpbiB0aGUgZm9ybSBvZgogICAgICMgdmVydGV4TmFtZS1wcm9wTmFtZS0+cHJvcFZhbCB3aGVyZSB0aGUgcHJvcFZhbCBtdXN0IGJlIHR5cGVkIGFjY29yZGluZyB0byB0aGUgZ2hlcmtpbiBzcGVjLiBub3RlIHRoYXQgdGhlIHRveQogICAgICMgZ3JhcGhzIG9ubHkgZGVhbCBpbiBTdHJpbmcvSW50L0Zsb2F0L0RvdWJsZSB0eXBlcyBzbyBub25lIG9mIHRoZSBvdGhlciB0eXBlcyBhcmUgYWNjb3VudGVkIGZvciBoZXJlLgotICAgIHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuZ3JvdXAoKS4gXAotICAgICAgICBieShsYW1iZGE6ICgieyBpdCAtPiBcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBkZWYgdmFsID0gaXQudmFsdWUoKVxuIiArCi0gICAgICAgICAgICAgICAgICAgICIgIGlmICh2YWwgaW5zdGFuY2VvZiBJbnRlZ2VyKVxuIiArCi0gICAgICAgICAgICAgICAgICAgICIgICAgdmFsID0gJ2RbJyArIHZhbCArICddLmknXG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgRmxvYXQpXG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgICB2YWwgPSAnZFsnICsgdmFsICsgJ10uZidcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiBEb3VibGUpXG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgICB2YWwgPSAnZFsnICsgdmFsICsgJ10uZCdcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICByZXR1cm4gaXQuZWxlbWVudCgpLnZhbHVlKCduYW1lJykgKyAnLScgKyBpdC5rZXkoKSArICctPicgKyB2YWxcbiIgKwotICAgICAgICAgICAgICAgICAgICAifSIsICJncmVtbGluLWdyb292eSIpKS4gXAorICAgIHZwcyA9IHt9CisgICAgcHJvcHMgPSBnLlYoKS5wcm9wZXJ0aWVzKCkuZ3JvdXAoKS4gXAorICAgICAgICBieShfXy5wcm9qZWN0KCduJywgJ2snLCAndicpLmJ5KF9fLmVsZW1lbnQoKS52YWx1ZXMoJ25hbWUnKSkuYnkoX18ua2V5KCkpLmJ5KF9fLnZhbHVlKCkpKS4gXAogICAgICAgICBieShfXy50YWlsKCkpLm5leHQoKQorCisgICAgZm9yIGtleSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgdnBzW19nZXRfdl9rZXlzKGtleSldID0gdmFsdWUKKworICAgIHJldHVybiB2cHMKKworCisjIHNpbmNlIGdyZW1saW4tbGFuZyBkb2Vzbid0IGFsbG93IGxhbWJkYXMsIHdlIGFyZSB1c2luZyB0aGUgc2FtZSBsb2dpYyBhcyBqYXZhc2NyaXB0IHRvIGNvbnN0cnVjdCB0aGUga2V5cworZGVmIF9nZXRfdl9rZXlzKGtleV9tYXApOgorICAgIGsgPSBrZXlfbWFwLmdldCgnaycpCisgICAgdmFsID0ga2V5X21hcC5nZXQoJ3YnKQorICAgIGlmIGsgPT0gJ3dlaWdodCc6CisgICAgICAgIHZhbCA9IGYnZFt7dmFsfV0uZCcKKyAgICBlbGlmIGsgPT0gJ2FnZScgb3IgayA9PSAnc2luY2UnIG9yIGsgPT0gJ3NraWxsJzoKKyAgICAgICAgdmFsID0gZidkW3t2YWx9XS5pJworICAgIG5hbWUgPSBrZXlfbWFwLmdldCgnbicpCisKKyAgICByZXR1cm4gZid7bmFtZX0te2t9LT57dmFsfScKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9jb25mdGVzdC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9jb25mdGVzdC5weQppbmRleCBmNTI3N2Y3Li5kYjNhNDA0IDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vY29uZnRlc3QucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2NvbmZ0ZXN0LnB5CkBAIC0xOCw2MSArMTgsNDYgQEAKICMKIAogaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworZnJvbSBqc29uIGltcG9ydCBkdW1wcwogaW1wb3J0IG9zCiBpbXBvcnQgc3NsCiBpbXBvcnQgcHl0ZXN0Ci1pbXBvcnQgc29ja2V0CiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHF1ZXVlCiAKLWltcG9ydCB5YW1sCi0KK2Zyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyIGltcG9ydCBzZXJpYWxpemVyCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5jbGllbnQgaW1wb3J0IENsaWVudAogZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIgaW1wb3J0IHNlcmlhbGl6ZXIKLWZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLmRyaXZlcl9yZW1vdGVfY29ubmVjdGlvbiBpbXBvcnQgKAotICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24pCi1mcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5wcm90b2NvbCBpbXBvcnQgR3JlbWxpblNlcnZlcldTUHJvdG9jb2wKLWZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLnNlcmlhbGl6ZXIgaW1wb3J0ICgKLSAgICBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyLCBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCwgR3JhcGhTT05TZXJpYWxpemVyc1YzZDAsCi0gICAgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKQotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuYWlvaHR0cC50cmFuc3BvcnQgaW1wb3J0IEFpb2h0dHBUcmFuc3BvcnQsIEFpb2h0dHBIVFRQVHJhbnNwb3J0Citmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5kcml2ZXJfcmVtb3RlX2Nvbm5lY3Rpb24gaW1wb3J0IERyaXZlclJlbW90ZUNvbm5lY3Rpb24KK2Zyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLnByb3RvY29sIGltcG9ydCBHcmVtbGluU2VydmVySFRUUFByb3RvY29sCitmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5zZXJpYWxpemVyIGltcG9ydCBHcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQKK2Zyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLmFpb2h0dHAudHJhbnNwb3J0IGltcG9ydCBBaW9odHRwSFRUUFRyYW5zcG9ydAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuYXV0aCBpbXBvcnQgYmFzaWMsIHNpZ3Y0CiAKLWdyZW1saW5fc2VydmVyX3VybCA9IG9zLmVudmlyb24uZ2V0KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnd3M6Ly9sb2NhbGhvc3Q6e30vZ3JlbWxpbicpCi1ncmVtbGluX2Jhc2ljX2F1dGhfdXJsID0gb3MuZW52aXJvbi5nZXQoJ0dSRU1MSU5fU0VSVkVSX0JBU0lDX0FVVEhfVVJMJywgJ3dzczovL2xvY2FsaG9zdDp7fS9ncmVtbGluJykKLWdyZW1saW5fc29ja2V0X3NlcnZlcl91cmwgPSBvcy5lbnZpcm9uLmdldCgnR1JFTUxJTl9TT0NLRVRfU0VSVkVSX1VSTCcsICd3czovL2xvY2FsaG9zdDp7fS9ncmVtbGluJykKLQotIyBHZXQgdGhlIGRpcmVjdG9yeSB3aGVyZSBjb25mdGVzdC5weSBpcyBsb2NhdGVkCi1jdXJyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKLWRlZmF1bHRfY29uZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oY3VycmVudF9kaXIsICIuLi8uLi8uLi8uLi8uLi8uLi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mL3Rlc3Qtd3MtZ3JlbWxpbi55YW1sIikKLWdyZW1saW5fc29ja2V0X3NlcnZlcl9jb25maWdfcGF0aCA9IG9zLmVudmlyb24uZ2V0KCJHUkVNTElOX1NPQ0tFVF9TRVJWRVJfQ09ORklHX1BBVEgiLCBkZWZhdWx0X2NvbmZpZ19wYXRoKQotCi1rZXJiZXJvc19ob3N0bmFtZSA9IG9zLmVudmlyb24uZ2V0KCdLUkJfSE9TVE5BTUUnLCBzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKKyIiIkhUVFAgc2VydmVyIHRlc3RpbmcgdmFyaWFibGVzIiIiCitncmVtbGluX3NlcnZlcl91cmwgPSBvcy5lbnZpcm9uLmdldCgnR1JFTUxJTl9TRVJWRVJfVVJMJywgJ2h0dHA6Ly9sb2NhbGhvc3Q6e30vZ3JlbWxpbicpCitncmVtbGluX2Jhc2ljX2F1dGhfdXJsID0gb3MuZW52aXJvbi5nZXQoJ0dSRU1MSU5fU0VSVkVSX0JBU0lDX0FVVEhfVVJMJywgJ2h0dHBzOi8vbG9jYWxob3N0Ont9L2dyZW1saW4nKQogYW5vbnltb3VzX3VybCA9IGdyZW1saW5fc2VydmVyX3VybC5mb3JtYXQoNDU5NDApCiBiYXNpY191cmwgPSBncmVtbGluX2Jhc2ljX2F1dGhfdXJsLmZvcm1hdCg0NTk0MSkKLWtlcmJlcm9zX3VybCA9IGdyZW1saW5fc2VydmVyX3VybC5mb3JtYXQoNDU5NDIpCiAKLWtlcmJlcml6ZWRfc2VydmljZSA9ICd0ZXN0LXNlcnZpY2VAe30nLmZvcm1hdChrZXJiZXJvc19ob3N0bmFtZSkKLWdyZW1saW5fc2VydmVyX3VybF9odHRwID0gb3MuZW52aXJvbi5nZXQoJ0dSRU1MSU5fU0VSVkVSX1VSTF9IVFRQJywgJ2h0dHA6Ly9sb2NhbGhvc3Q6e30vJykKLWdyZW1saW5fYmFzaWNfYXV0aF91cmxfaHR0cCA9IG9zLmVudmlyb24uZ2V0KCdHUkVNTElOX1NFUlZFUl9CQVNJQ19BVVRIX1VSTF9IVFRQJywgJ2h0dHBzOi8vbG9jYWxob3N0Ont9LycpCi1hbm9ueW1vdXNfdXJsX2h0dHAgPSBncmVtbGluX3NlcnZlcl91cmxfaHR0cC5mb3JtYXQoNDU5NDApCi1iYXNpY191cmxfaHR0cCA9IGdyZW1saW5fYmFzaWNfYXV0aF91cmxfaHR0cC5mb3JtYXQoNDU5NDEpCiB2ZXJib3NlX2xvZ2dpbmcgPSBGYWxzZQogCiBsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShhc2N0aW1lKXMgWyUobGV2ZWxuYW1lKThzXSBbJShmaWxlbmFtZSkxNXM6JShsaW5lbm8pZCAtICUoZnVuY05hbWUpMTBzKCldIC0gJShtZXNzYWdlKXMnLAogICAgICAgICAgICAgICAgICAgICBsZXZlbD1sb2dnaW5nLkRFQlVHIGlmIHZlcmJvc2VfbG9nZ2luZyBlbHNlIGxvZ2dpbmcuSU5GTykKIAotCisiIiIKK1Rlc3RzIGJlbG93IGFyZSBmb3IgdGhlIEhUVFAgc2VydmVyIHdpdGggR3JhcGhCaW5hcnlWNAorIiIiCiBAcHl0ZXN0LmZpeHR1cmUKIGRlZiBjb25uZWN0aW9uKHJlcXVlc3QpOgotICAgIHByb3RvY29sID0gR3JlbWxpblNlcnZlcldTUHJvdG9jb2woCi0gICAgICAgIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXIoKSwKLSAgICAgICAgdXNlcm5hbWU9J3N0ZXBoZW4nLCBwYXNzd29yZD0ncGFzc3dvcmQnKQorICAgIHByb3RvY29sID0gR3JlbWxpblNlcnZlckhUVFBQcm90b2NvbCgKKyAgICAgICAgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCksIEdyYXBoQmluYXJ5U2VyaWFsaXplcnNWNCgpLAorICAgICAgICBhdXRoPWJhc2ljKCdzdGVwaGVuJywgJ3Bhc3N3b3JkJykpCiAgICAgZXhlY3V0b3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKDUpCiAgICAgcG9vbCA9IHF1ZXVlLlF1ZXVlKCkKICAgICB0cnk6CiAgICAgICAgIGNvbm4gPSBDb25uZWN0aW9uKGFub255bW91c191cmwsICdnbW9kZXJuJywgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogQWlvaHR0cFRyYW5zcG9ydCgpLCBleGVjdXRvciwgcG9vbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBBaW9odHRwSFRUUFRyYW5zcG9ydCgpLCBleGVjdXRvciwgcG9vbCkKICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgZXhlY3V0b3Iuc2h1dGRvd24oKQogICAgICAgICBweXRlc3Quc2tpcCgnR3JlbWxpbiBTZXJ2ZXIgaXMgbm90IHJ1bm5pbmcnKQpAQCAtOTksNjggKzg0LDE2IEBACiAgICAgICAgIHJldHVybiBjbGllbnQKIAogCi1AcHl0ZXN0LmZpeHR1cmUKLWRlZiBncmVtbGluX3NvY2tldF9zZXJ2ZXJfc2VyaWFsaXplcihzb2NrZXRfc2VydmVyX3NldHRpbmdzKToKLSAgICBpZiBzb2NrZXRfc2VydmVyX3NldHRpbmdzWyJTRVJJQUxJWkVSIl0gPT0gIkdyYXBoQmluYXJ5VjEiOgotICAgICAgICByZXR1cm4gc2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEoKQotICAgIGVsaWYgc29ja2V0X3NlcnZlcl9zZXR0aW5nc1siU0VSSUFMSVpFUiJdID09ICJHcmFwaFNPTlYyIjoKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1YyZDAoKQotICAgIGVsaWYgc29ja2V0X3NlcnZlcl9zZXR0aW5nc1siU0VSSUFMSVpFUiJdID09ICJHcmFwaFNPTlYzIjoKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1YzZDAoKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemVyLkdyYXBoQmluYXJ5U2VyaWFsaXplcnNWMSgpCi0KLQotQHB5dGVzdC5maXh0dXJlCi1kZWYgc29ja2V0X3NlcnZlcl9jbGllbnQocmVxdWVzdCwgc29ja2V0X3NlcnZlcl9zZXR0aW5ncywgZ3JlbWxpbl9zb2NrZXRfc2VydmVyX3NlcmlhbGl6ZXIpOgotICAgIG1hcmtlciA9IHJlcXVlc3Qubm9kZS5nZXRfY2xvc2VzdF9tYXJrZXIoImNsaWVudF9rd2FyZ3MiKQotICAgIGNsaWVudF9rd2FyZ3MgPSBtYXJrZXIuYXJnc1swXSBpZiBtYXJrZXIgaXMgbm90IE5vbmUgZWxzZSBkaWN0KCkKLSAgICB1cmwgPSBncmVtbGluX3NvY2tldF9zZXJ2ZXJfdXJsLmZvcm1hdChzb2NrZXRfc2VydmVyX3NldHRpbmdzWyJQT1JUIl0pCi0gICAgdHJ5OgotICAgICAgICBjbGllbnQgPSBDbGllbnQodXJsLCAnZycsIHBvb2xfc2l6ZT0xLCBtZXNzYWdlX3NlcmlhbGl6ZXI9Z3JlbWxpbl9zb2NrZXRfc2VydmVyX3NlcmlhbGl6ZXIsICoqY2xpZW50X2t3YXJncykKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcHl0ZXN0LnNraXAoJ0dyZW1saW4gU29ja2V0IFNlcnZlciBpcyBub3QgcnVubmluZycpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIGZpbigpOgotICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkKLQotICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihmaW4pCi0gICAgICAgIHJldHVybiBjbGllbnQKLQotCi1AcHl0ZXN0LmZpeHR1cmUKLWRlZiBzb2NrZXRfc2VydmVyX2NsaWVudF9ub191c2VyX2FnZW50KHJlcXVlc3QsIHNvY2tldF9zZXJ2ZXJfc2V0dGluZ3MsIGdyZW1saW5fc29ja2V0X3NlcnZlcl9zZXJpYWxpemVyKToKLSAgICB1cmwgPSBncmVtbGluX3NvY2tldF9zZXJ2ZXJfdXJsLmZvcm1hdChzb2NrZXRfc2VydmVyX3NldHRpbmdzWyJQT1JUIl0pCi0gICAgdHJ5OgotICAgICAgICBjbGllbnQgPSBDbGllbnQodXJsLCAnZycsIHBvb2xfc2l6ZT0xLCBtZXNzYWdlX3NlcmlhbGl6ZXI9Z3JlbWxpbl9zb2NrZXRfc2VydmVyX3NlcmlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVfdXNlcl9hZ2VudF9vbl9jb25uZWN0PUZhbHNlKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBweXRlc3Quc2tpcCgnR3JlbWxpbiBTb2NrZXQgU2VydmVyIGlzIG5vdCBydW5uaW5nJykKLSAgICBlbHNlOgotICAgICAgICBkZWYgZmluKCk6Ci0gICAgICAgICAgICBjbGllbnQuY2xvc2UoKQotCi0gICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGZpbikKLSAgICAgICAgcmV0dXJuIGNsaWVudAotCi0KLUBweXRlc3QuZml4dHVyZQotZGVmIHNvY2tldF9zZXJ2ZXJfc2V0dGluZ3MoKToKLSAgICB3aXRoIG9wZW4oZ3JlbWxpbl9zb2NrZXRfc2VydmVyX2NvbmZpZ19wYXRoLCBtb2RlPSJyYiIpIGFzIGZpbGU6Ci0gICAgICAgIHNldHRpbmdzID0geWFtbC5zYWZlX2xvYWQoZmlsZSkKLSAgICByZXR1cm4gc2V0dGluZ3MKLQotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2Jhc2ljJywgJ2tlcmJlcm9zJ10pCitAcHl0ZXN0LmZpeHR1cmUocGFyYW1zPVsnYmFzaWMnXSkKIGRlZiBhdXRoZW50aWNhdGVkX2NsaWVudChyZXF1ZXN0KToKICAgICB0cnk6CiAgICAgICAgIGlmIHJlcXVlc3QucGFyYW0gPT0gJ2Jhc2ljJzoKICAgICAgICAgICAgICMgdHVybiBvZmYgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkKICAgICAgICAgICAgIHNzbF9vcHRzID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxXzIpCiAgICAgICAgICAgICBzc2xfb3B0cy52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKLSAgICAgICAgICAgIGNsaWVudCA9IENsaWVudChiYXNpY191cmwsICdnbW9kZXJuJywgdXNlcm5hbWU9J3N0ZXBoZW4nLCBwYXNzd29yZD0ncGFzc3dvcmQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5PWxhbWJkYTogQWlvaHR0cFRyYW5zcG9ydChzc2xfb3B0aW9ucz1zc2xfb3B0cykpCi0gICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAna2VyYmVyb3MnOgotICAgICAgICAgICAgY2xpZW50ID0gQ2xpZW50KGtlcmJlcm9zX3VybCwgJ2dtb2Rlcm4nLCBrZXJiZXJpemVkX3NlcnZpY2U9a2VyYmVyaXplZF9zZXJ2aWNlKQorICAgICAgICAgICAgY2xpZW50ID0gQ2xpZW50KGJhc2ljX3VybCwgJ2dtb2Rlcm4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGg9YmFzaWMoJ3N0ZXBoZW4nLCAncGFzc3dvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRfZmFjdG9yeT1sYW1iZGE6IEFpb2h0dHBIVFRQVHJhbnNwb3J0KHNzbF9vcHRpb25zPXNzbF9vcHRzKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgYXV0aGVudGljYXRpb24gb3B0aW9uIC0gIiArIHJlcXVlc3QucGFyYW0pCiAgICAgZXhjZXB0IE9TRXJyb3I6CkBAIC0xNzMsMTggKzEwNiwyMiBAQAogICAgICAgICByZXR1cm4gY2xpZW50CiAKIAotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2dyYXBoc29udjInLCAnZ3JhcGhzb252MycsICdncmFwaGJpbmFyeXYxJ10pCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiBncmFwaGJpbmFyeV9zZXJpYWxpemVyX3Y0KHJlcXVlc3QpOgorICAgIHJldHVybiBHcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQoKQorCisKK0BweXRlc3QuZml4dHVyZShwYXJhbXM9WydncmFwaGJpbmFyeXY0JywnZ3JhcGhzb252NCddKQogZGVmIHJlbW90ZV9jb25uZWN0aW9uKHJlcXVlc3QpOgogICAgIHRyeToKLSAgICAgICAgaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhiaW5hcnl2MSc6CisgICAgICAgIGlmIHJlcXVlc3QucGFyYW0gPT0gJ2dyYXBoYmluYXJ5djQnOgogICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwsICdnbW9kZXJuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEoKSkKLSAgICAgICAgZWxpZiByZXF1ZXN0LnBhcmFtID09ICdncmFwaHNvbnYyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCkpCisgICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhzb252NCc6CiAgICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybCwgJ2dtb2Rlcm4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWMmQwKCkpCi0gICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhzb252Myc6Ci0gICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybCwgJ2dtb2Rlcm4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWM2QwKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1Y0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWNCgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBzZXJpYWxpemVyIG9wdGlvbiAtICIgKyByZXF1ZXN0LnBhcmFtKQogICAgIGV4Y2VwdCBPU0Vycm9yOgpAQCAtMTk3LDE4ICsxMzQsMTUgQEAKICAgICAgICAgcmV0dXJuIHJlbW90ZV9jb25uCiAKIAotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2dyYXBoc29udjInLCAnZ3JhcGhzb252MycsICdncmFwaGJpbmFyeXYxJ10pCitAcHl0ZXN0LmZpeHR1cmUocGFyYW1zPVsnZ3JhcGhiaW5hcnl2NCcsJ2dyYXBoc29udjQnXSkKIGRlZiByZW1vdGVfY29ubmVjdGlvbl9jcmV3KHJlcXVlc3QpOgogICAgIHRyeToKLSAgICAgICAgaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhiaW5hcnl2MSc6CisgICAgICAgIGlmIHJlcXVlc3QucGFyYW0gPT0gJ2dyYXBoYmluYXJ5djQnOgorICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwsICdnY3JldycpCisgICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhzb252NCc6CiAgICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybCwgJ2djcmV3JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEoKSkKLSAgICAgICAgZWxpZiByZXF1ZXN0LnBhcmFtID09ICdncmFwaHNvbnYyJzoKLSAgICAgICAgICAgIHJlbW90ZV9jb25uID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsLCAnZ2NyZXcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWMmQwKCkpCi0gICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhzb252Myc6Ci0gICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybCwgJ2djcmV3JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaFNPTlNlcmlhbGl6ZXJzVjNkMCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaFNPTlNlcmlhbGl6ZXJzVjQoKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgc2VyaWFsaXplciBvcHRpb24gLSAiICsgcmVxdWVzdC5wYXJhbSkKICAgICBleGNlcHQgT1NFcnJvcjoKQEAgLTIyMSwzMSArMTU1LDggQEAKICAgICAgICAgcmV0dXJuIHJlbW90ZV9jb25uCiAKIAotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2dyYXBoc29udjInLCAnZ3JhcGhzb252MycsICdncmFwaGJpbmFyeXYxJ10pCi1kZWYgcmVtb3RlX3RyYW5zYWN0aW9uX2Nvbm5lY3Rpb24ocmVxdWVzdCk6Ci0gICAgdHJ5OgotICAgICAgICBpZiByZXF1ZXN0LnBhcmFtID09ICdncmFwaGJpbmFyeXYxJzoKLSAgICAgICAgICAgIHJlbW90ZV9jb25uID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsLCAnZ3R4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEoKSkKLSAgICAgICAgZWxpZiByZXF1ZXN0LnBhcmFtID09ICdncmFwaHNvbnYyJzoKLSAgICAgICAgICAgIHJlbW90ZV9jb25uID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsLCAnZ3R4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCgpKQotICAgICAgICBlbGlmIHJlcXVlc3QucGFyYW0gPT0gJ2dyYXBoc29udjMnOgotICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwsICdndHgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWM2QwKCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHNlcmlhbGl6ZXIgb3B0aW9uIC0gIiArIHJlcXVlc3QucGFyYW0pCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHB5dGVzdC5za2lwKCdHcmVtbGluIFNlcnZlciBpcyBub3QgcnVubmluZycpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIGZpbigpOgotICAgICAgICAgICAgcmVtb3RlX2Nvbm4uY2xvc2UoKQotCi0gICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGZpbikKLSAgICAgICAgcmV0dXJuIHJlbW90ZV9jb25uCi0KLQotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2Jhc2ljJywgJ2tlcmJlcm9zJ10pCisjIFRPRE86IHJldmlzaXQgb25jZSB0ZXN0aW5nIGZvciBtdWx0aXBsZSB0eXBlcyBvZiBhdXRoIGlzIGVuYWJsZWQKK0BweXRlc3QuZml4dHVyZShwYXJhbXM9WydiYXNpYyddKQogZGVmIHJlbW90ZV9jb25uZWN0aW9uX2F1dGhlbnRpY2F0ZWQocmVxdWVzdCk6CiAgICAgdHJ5OgogICAgICAgICBpZiByZXF1ZXN0LnBhcmFtID09ICdiYXNpYyc6CkBAIC0yNTMsOTIgKzE2NCw3IEBACiAgICAgICAgICAgICBzc2xfb3B0cyA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MV8yKQogICAgICAgICAgICAgc3NsX29wdHMudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9OT05FCiAgICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYmFzaWNfdXJsLCAnZ21vZGVybicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU9J3N0ZXBoZW4nLCBwYXNzd29yZD0ncGFzc3dvcmQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWMmQwKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0X2ZhY3Rvcnk9bGFtYmRhOiBBaW9odHRwVHJhbnNwb3J0KHNzbF9vcHRpb25zPXNzbF9vcHRzKSkKLSAgICAgICAgZWxpZiByZXF1ZXN0LnBhcmFtID09ICdrZXJiZXJvcyc6Ci0gICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oa2VyYmVyb3NfdXJsLCAnZ21vZGVybicsIGtlcmJlcml6ZWRfc2VydmljZT1rZXJiZXJpemVkX3NlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1YyZDAoKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgYXV0aGVudGljYXRpb24gb3B0aW9uIC0gIiArIHJlcXVlc3QucGFyYW0pCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHB5dGVzdC5za2lwKCdHcmVtbGluIFNlcnZlciBpcyBub3QgcnVubmluZycpCi0gICAgZWxzZToKLSAgICAgICAgZGVmIGZpbigpOgotICAgICAgICAgICAgcmVtb3RlX2Nvbm4uY2xvc2UoKQotCi0gICAgICAgIHJlcXVlc3QuYWRkZmluYWxpemVyKGZpbikKLSAgICAgICAgcmV0dXJuIHJlbW90ZV9jb25uCi0KLQotQHB5dGVzdC5maXh0dXJlCi1kZWYgcmVtb3RlX2Nvbm5lY3Rpb25fZ3JhcGhzb25WMihyZXF1ZXN0KToKLSAgICB0cnk6Ci0gICAgICAgIHJlbW90ZV9jb25uID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1YyZDAoKSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcHl0ZXN0LnNraXAoJ0dyZW1saW4gU2VydmVyIGlzIG5vdCBydW5uaW5nJykKLSAgICBlbHNlOgotICAgICAgICBkZWYgZmluKCk6Ci0gICAgICAgICAgICByZW1vdGVfY29ubi5jbG9zZSgpCi0KLSAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZmluKQotICAgICAgICByZXR1cm4gcmVtb3RlX2Nvbm4KLQotCi1AcHl0ZXN0LmZpeHR1cmUKLWRlZiBncmFwaHNvbl9zZXJpYWxpemVyX3YyKHJlcXVlc3QpOgotICAgIHJldHVybiBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCgpCi0KLQotQHB5dGVzdC5maXh0dXJlCi1kZWYgZ3JhcGhzb25fc2VyaWFsaXplcl92MyhyZXF1ZXN0KToKLSAgICByZXR1cm4gR3JhcGhTT05TZXJpYWxpemVyc1YzZDAoKQotCi0KLUBweXRlc3QuZml4dHVyZQotZGVmIGdyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjEocmVxdWVzdCk6Ci0gICAgcmV0dXJuIEdyYXBoQmluYXJ5U2VyaWFsaXplcnNWMSgpCi0KLQotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2dyYXBoc29udjInLCAnZ3JhcGhzb252MycsICdncmFwaGJpbmFyeXYxJ10pCi1kZWYgcmVtb3RlX2Nvbm5lY3Rpb25faHR0cChyZXF1ZXN0KToKLSAgICB0cnk6Ci0gICAgICAgIGlmIHJlcXVlc3QucGFyYW0gPT0gJ2dyYXBoYmluYXJ5djEnOgotICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmxfaHR0cCwgJ2dtb2Rlcm4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoQmluYXJ5U2VyaWFsaXplcnNWMSgpKQotICAgICAgICBlbGlmIHJlcXVlc3QucGFyYW0gPT0gJ2dyYXBoc29udjInOgotICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmxfaHR0cCwgJ2dtb2Rlcm4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWMmQwKCkpCi0gICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhzb252Myc6Ci0gICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybF9odHRwLCAnZ21vZGVybicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1YzZDAoKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgc2VyaWFsaXplciBvcHRpb24gLSAiICsgcmVxdWVzdC5wYXJhbSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcHl0ZXN0LnNraXAoJ0dyZW1saW4gU2VydmVyIGlzIG5vdCBydW5uaW5nJykKLSAgICBlbHNlOgotICAgICAgICBkZWYgZmluKCk6Ci0gICAgICAgICAgICByZW1vdGVfY29ubi5jbG9zZSgpCi0KLSAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZmluKQotICAgICAgICByZXR1cm4gcmVtb3RlX2Nvbm4KLQotCi0iIiIKLSMgVGhlIFdzQW5kSHR0cENoYW5uZWxpemVyIHNvbWVob3cgZG9lcyBub3QgZGlzdGluZ3Vpc2ggdGhlIHNzbCBoYW5kbGVycyBzbyBhdXRoZW50aWNhdGVkIGh0dHBzIHJlbW90ZSBjb25uZWN0aW9uIHdpbGwKLSMgb25seSB3b3JrIHdpdGggSHR0cENoYW5uZWxpemVyIHRoYXQgaXMgY3VycmVudGx5IG5vdCBpbiB0aGUgdGVzdGluZyBzZXQgdXAsIHRodXMgdGhpcyBpcyBjb21tZW50ZWQgb3V0IGZvciBub3cKLQotQHB5dGVzdC5maXh0dXJlKHBhcmFtcz1bJ2Jhc2ljJ10pCi1kZWYgcmVtb3RlX2Nvbm5lY3Rpb25faHR0cF9hdXRoZW50aWNhdGVkKHJlcXVlc3QpOgotICAgIHRyeToKLSAgICAgICAgaWYgcmVxdWVzdC5wYXJhbSA9PSAnYmFzaWMnOgotICAgICAgICAgICAgIyB0dXJuIG9mZiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seQotICAgICAgICAgICAgc3NsX29wdHMgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjFfMikKLSAgICAgICAgICAgIHNzbF9vcHRzLnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfTk9ORQotICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGJhc2ljX3VybF9odHRwLCAnZ21vZGVybicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU9J3N0ZXBoZW4nLCBwYXNzd29yZD0ncGFzc3dvcmQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWMmQwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aD1iYXNpYygnc3RlcGhlbicsICdwYXNzd29yZCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5PWxhbWJkYTogQWlvaHR0cEhUVFBUcmFuc3BvcnQoc3NsX29wdGlvbnM9c3NsX29wdHMpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBhdXRoZW50aWNhdGlvbiBvcHRpb24gLSAiICsgcmVxdWVzdC5wYXJhbSkKQEAgLTM1MCwxOCArMTc2LDEzIEBACiAKICAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZmluKQogICAgICAgICByZXR1cm4gcmVtb3RlX2Nvbm4KLSIiIgogCiAKLUBweXRlc3QuZml4dHVyZShwYXJhbXM9WydncmFwaHNvbnYzJywgJ2dyYXBoYmluYXJ5djEnXSkKLWRlZiBpbnZhbGlkX2FsaWFzX3JlbW90ZV9jb25uZWN0aW9uX2h0dHAocmVxdWVzdCk6CitAcHl0ZXN0LmZpeHR1cmUocGFyYW1zPVsnZ3JhcGhiaW5hcnl2NCddKQorZGVmIGludmFsaWRfYWxpYXNfcmVtb3RlX2Nvbm5lY3Rpb24ocmVxdWVzdCk6CiAgICAgdHJ5OgotICAgICAgICBpZiByZXF1ZXN0LnBhcmFtID09ICdncmFwaGJpbmFyeXYxJzoKLSAgICAgICAgICAgIHJlbW90ZV9jb25uID0gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsX2h0dHAsICdkb2VzX25vdF9leGlzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKCkpCi0gICAgICAgIGVsaWYgcmVxdWVzdC5wYXJhbSA9PSAnZ3JhcGhzb252Myc6Ci0gICAgICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybF9odHRwLCAnZG9lc19ub3RfZXhpc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWM2QwKCkpCisgICAgICAgIGlmIHJlcXVlc3QucGFyYW0gPT0gJ2dyYXBoYmluYXJ5djQnOgorICAgICAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwsICdkb2VzX25vdF9leGlzdCcpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHNlcmlhbGl6ZXIgb3B0aW9uIC0gIiArIHJlcXVlc3QucGFyYW0pCiAgICAgZXhjZXB0IE9TRXJyb3I6CkBAIC0zNzIsMyArMTkzLDQxIEBACiAKICAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZmluKQogICAgICAgICByZXR1cm4gcmVtb3RlX2Nvbm4KKworCitAcHl0ZXN0LmZpeHR1cmUoKQorZGVmIHJlbW90ZV9jb25uZWN0aW9uX3dpdGhfaW50ZXJjZXB0b3IocmVxdWVzdCk6CisgICAgdHJ5OgorICAgICAgICByZW1vdGVfY29ubiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oYW5vbnltb3VzX3VybCwgJ2dtb2Rlcm4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9zZXJpYWxpemVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRvcnM9anNvbl9pbnRlcmNlcHRvcikKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcHl0ZXN0LnNraXAoJ0dyZW1saW4gU2VydmVyIGlzIG5vdCBydW5uaW5nJykKKyAgICBlbHNlOgorICAgICAgICBkZWYgZmluKCk6CisgICAgICAgICAgICByZW1vdGVfY29ubi5jbG9zZSgpCisKKyAgICAgICAgcmVxdWVzdC5hZGRmaW5hbGl6ZXIoZmluKQorICAgICAgICByZXR1cm4gcmVtb3RlX2Nvbm4KKworCitAcHl0ZXN0LmZpeHR1cmUoKQorZGVmIGNsaWVudF93aXRoX2ludGVyY2VwdG9yKHJlcXVlc3QpOgorICAgIHRyeToKKyAgICAgICAgY2xpZW50ID0gQ2xpZW50KGFub255bW91c191cmwsICdnbW9kZXJuJywgcmVxdWVzdF9zZXJpYWxpemVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZV9zZXJpYWxpemVyPUdyYXBoQmluYXJ5U2VyaWFsaXplcnNWNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzPWpzb25faW50ZXJjZXB0b3IpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHB5dGVzdC5za2lwKCdHcmVtbGluIFNlcnZlciBpcyBub3QgcnVubmluZycpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGZpbigpOgorICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICByZXF1ZXN0LmFkZGZpbmFsaXplcihmaW4pCisgICAgICAgIHJldHVybiBjbGllbnQKKworCitkZWYganNvbl9pbnRlcmNlcHRvcihyZXF1ZXN0KToKKyAgICAgICAgcmVxdWVzdFsnaGVhZGVycyddWydjb250ZW50LXR5cGUnXSA9ICJhcHBsaWNhdGlvbi9qc29uIgorICAgICAgICByZXF1ZXN0WydwYXlsb2FkJ10gPSBkdW1wcyh7ImdyZW1saW4iOiAiZy5pbmplY3QoMikiLCAiZyI6ICJnIn0pCisgICAgICAgIHJldHVybiByZXF1ZXN0CmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL19faW5pdF9fLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci9fX2luaXRfXy5weQppbmRleCA2MGRlMjE3Li41ZmIyNTUyIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL19faW5pdF9fLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvX19pbml0X18ucHkKQEAgLTE1LDYgKzE1LDQgQEAKICMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLV9fYXV0aG9yX18gPSAnTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKScKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2F1dGgucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfYXV0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWZkMWZlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2F1dGgucHkKQEAgLTAsMCArMSw2NiBAQAorIworIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorIworaW1wb3J0IG9zCitmcm9tIGFpb2h0dHAgaW1wb3J0IEJhc2ljQXV0aCBhcyBhaW9odHRwQmFzaWNBdXRoCitmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5hdXRoIGltcG9ydCBiYXNpYywgc2lndjQKKworCitkZWYgY3JlYXRlX21vY2tfcmVxdWVzdCgpOgorICAgIHJldHVybiB7J2hlYWRlcnMnOgorICAgICAgICAgICAgeydjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAnLAorICAgICAgICAgICAgICdhY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXY0LjAnfSwKKyAgICAgICAgICAgICdwYXlsb2FkJzogYicnLAorICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3Rlc3RfdXJsOjgxODIvZ3JlbWxpbid9CisKKworY2xhc3MgVGVzdEF1dGgob2JqZWN0KToKKworICAgIGRlZiB0ZXN0X2Jhc2ljX2F1dGhfcmVxdWVzdChzZWxmKToKKyAgICAgICAgbW9ja19yZXF1ZXN0ID0gY3JlYXRlX21vY2tfcmVxdWVzdCgpCisgICAgICAgIGFzc2VydCAnYXV0aG9yaXphdGlvbicgbm90IGluIG1vY2tfcmVxdWVzdFsnaGVhZGVycyddCisgICAgICAgIGJhc2ljKCd1c2VybmFtZScsICdwYXNzd29yZCcpKG1vY2tfcmVxdWVzdCkKKyAgICAgICAgYXNzZXJ0ICdhdXRob3JpemF0aW9uJyBpbiBtb2NrX3JlcXVlc3RbJ2hlYWRlcnMnXQorICAgICAgICBhc3NlcnQgYWlvaHR0cEJhc2ljQXV0aCgndXNlcm5hbWUnLCAncGFzc3dvcmQnKS5lbmNvZGUoKSA9PSBtb2NrX3JlcXVlc3RbJ2hlYWRlcnMnXVsnYXV0aG9yaXphdGlvbiddCisKKyAgICBkZWYgdGVzdF9zaWd2NF9hdXRoX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIG1vY2tfcmVxdWVzdCA9IGNyZWF0ZV9tb2NrX3JlcXVlc3QoKQorICAgICAgICBhc3NlcnQgJ0F1dGhvcml6YXRpb24nIG5vdCBpbiBtb2NrX3JlcXVlc3RbJ2hlYWRlcnMnXQorICAgICAgICBhc3NlcnQgJ1gtQW16LURhdGUnIG5vdCBpbiBtb2NrX3JlcXVlc3RbJ2hlYWRlcnMnXQorICAgICAgICBvcy5lbnZpcm9uWydBV1NfQUNDRVNTX0tFWV9JRCddID0gJ01PQ0tfSUQnCisgICAgICAgIG9zLmVudmlyb25bJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSddID0gJ01PQ0tfS0VZJworICAgICAgICBzaWd2NCgnZ3JlbWxpbi1lYXN0LTEnLCAndGlua2VycG9wLXNpZ3Y0JykobW9ja19yZXF1ZXN0KQorICAgICAgICBhc3NlcnQgbW9ja19yZXF1ZXN0WydoZWFkZXJzJ11bJ1gtQW16LURhdGUnXSBpcyBub3QgTm9uZQorICAgICAgICBhc3NlcnQgbW9ja19yZXF1ZXN0WydoZWFkZXJzJ11bJ0F1dGhvcml6YXRpb24nXS5zdGFydHN3aXRoKCdBV1M0LUhNQUMtU0hBMjU2IENyZWRlbnRpYWw9TU9DS19JRCcpCisgICAgICAgIGFzc2VydCAnZ3JlbWxpbi1lYXN0LTEvdGlua2VycG9wLXNpZ3Y0L2F3czRfcmVxdWVzdCcgaW4gbW9ja19yZXF1ZXN0WydoZWFkZXJzJ11bJ0F1dGhvcml6YXRpb24nXQorICAgICAgICBhc3NlcnQgJ1NpZ25hdHVyZT0nIGluIG1vY2tfcmVxdWVzdFsnaGVhZGVycyddWydBdXRob3JpemF0aW9uJ10KKworICAgIGRlZiB0ZXN0X3NpZ3Y0X2F1dGhfcmVxdWVzdF9zZXNzaW9uX3Rva2VuKHNlbGYpOgorICAgICAgICBtb2NrX3JlcXVlc3QgPSBjcmVhdGVfbW9ja19yZXF1ZXN0KCkKKyAgICAgICAgYXNzZXJ0ICdBdXRob3JpemF0aW9uJyBub3QgaW4gbW9ja19yZXF1ZXN0WydoZWFkZXJzJ10KKyAgICAgICAgYXNzZXJ0ICdYLUFtei1EYXRlJyBub3QgaW4gbW9ja19yZXF1ZXN0WydoZWFkZXJzJ10KKyAgICAgICAgYXNzZXJ0ICdYLUFtei1TZWN1cml0eS1Ub2tlbicgbm90IGluIG1vY2tfcmVxdWVzdFsnaGVhZGVycyddCisgICAgICAgIG9zLmVudmlyb25bJ0FXU19TRVNTSU9OX1RPS0VOJ10gPSAnTU9DS19UT0tFTicKKyAgICAgICAgc2lndjQoJ2dyZW1saW4tZWFzdC0xJywgJ3RpbmtlcnBvcC1zaWd2NCcpKG1vY2tfcmVxdWVzdCkKKyAgICAgICAgYXNzZXJ0IG1vY2tfcmVxdWVzdFsnaGVhZGVycyddWydYLUFtei1EYXRlJ10gaXMgbm90IE5vbmUKKyAgICAgICAgYXNzZXJ0IG1vY2tfcmVxdWVzdFsnaGVhZGVycyddWydBdXRob3JpemF0aW9uJ10uc3RhcnRzd2l0aCgnQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPScpCisgICAgICAgIGFzc2VydCBtb2NrX3JlcXVlc3RbJ2hlYWRlcnMnXVsnWC1BbXotU2VjdXJpdHktVG9rZW4nXSA9PSAnTU9DS19UT0tFTicKKyAgICAgICAgYXNzZXJ0ICdncmVtbGluLWVhc3QtMS90aW5rZXJwb3Atc2lndjQvYXdzNF9yZXF1ZXN0JyBpbiBtb2NrX3JlcXVlc3RbJ2hlYWRlcnMnXVsnQXV0aG9yaXphdGlvbiddCisgICAgICAgIGFzc2VydCAnU2lnbmF0dXJlPScgaW4gbW9ja19yZXF1ZXN0WydoZWFkZXJzJ11bJ0F1dGhvcml6YXRpb24nXQorCisKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9jbGllbnQucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfY2xpZW50LnB5CmluZGV4IGVlZmEzNTYuLjJjOGMwNGMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9jbGllbnQucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2NsaWVudC5weQpAQCAtMjEsNzYgKzIxLDExOCBAQAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHV1aWQKIAotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIgaW1wb3J0IHNlcmlhbGl6ZXIKK2ltcG9ydCBweXRlc3QKIGZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLmNsaWVudCBpbXBvcnQgQ2xpZW50CiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5wcm90b2NvbCBpbXBvcnQgR3JlbWxpblNlcnZlckVycm9yCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5yZXF1ZXN0IGltcG9ydCBSZXF1ZXN0TWVzc2FnZQorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuc2VyaWFsaXplciBpbXBvcnQgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0CiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuZ3JhcGhfdHJhdmVyc2FsIGltcG9ydCBfXywgR3JhcGhUcmF2ZXJzYWxTb3VyY2UKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNhbFN0cmF0ZWdpZXMKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNhbFN0cmF0ZWdpZXMsIEdWYWx1ZQogZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0IE9wdGlvbnNTdHJhdGVneQogZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IEdyYXBoLCBWZXJ0ZXgKLWZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLmFpb2h0dHAudHJhbnNwb3J0IGltcG9ydCBBaW9odHRwVHJhbnNwb3J0Citmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5haW9odHRwLnRyYW5zcG9ydCBpbXBvcnQgQWlvaHR0cEhUVFBUcmFuc3BvcnQKIGZyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgKgogZnJvbSBhc3luY2lvIGltcG9ydCBUaW1lb3V0RXJyb3IKIAogX19hdXRob3JfXyA9ICdEYXZpZCBNLiBCcm93biAoZGF2ZWJzaG93QGdtYWlsLmNvbSknCiAKLWdyZW1saW5fc2VydmVyX3VybCA9IG9zLmVudmlyb24uZ2V0KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnd3M6Ly9sb2NhbGhvc3Q6e30vZ3JlbWxpbicpCitncmVtbGluX3NlcnZlcl91cmwgPSBvcy5lbnZpcm9uLmdldCgnR1JFTUxJTl9TRVJWRVJfVVJMJywgJ2h0dHA6Ly9sb2NhbGhvc3Q6e30vZ3JlbWxpbicpCiB0ZXN0X25vX2F1dGhfdXJsID0gZ3JlbWxpbl9zZXJ2ZXJfdXJsLmZvcm1hdCg0NTk0MCkKIAogCitkZWYgY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0cmF2ZXJzYWwsIHNvdXJjZT0nZ21vZGVybicpOgorICAgIHJldHVybiBSZXF1ZXN0TWVzc2FnZShmaWVsZHM9eydnJzogc291cmNlfSwgZ3JlbWxpbj10cmF2ZXJzYWwuZ3JlbWxpbl9sYW5nLmdldF9ncmVtbGluKCkpCisKKwogZGVmIHRlc3RfY29ubmVjdGlvbihjb25uZWN0aW9uKToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQogICAgIHQgPSBnLlYoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0KQogICAgIHJlc3VsdHNfc2V0ID0gY29ubmVjdGlvbi53cml0ZShtZXNzYWdlKS5yZXN1bHQoKQogICAgIGZ1dHVyZSA9IHJlc3VsdHNfc2V0LmFsbCgpCiAgICAgcmVzdWx0cyA9IGZ1dHVyZS5yZXN1bHQoKQogICAgIGFzc2VydCBsZW4ocmVzdWx0cykgPT0gNgogICAgIGFzc2VydCBpc2luc3RhbmNlKHJlc3VsdHMsIGxpc3QpCiAgICAgYXNzZXJ0IHJlc3VsdHNfc2V0LmRvbmUuZG9uZSgpCi0gICAgYXNzZXJ0ICdob3N0JyBpbiByZXN1bHRzX3NldC5zdGF0dXNfYXR0cmlidXRlcwogCi0KKyMgVE9ETzogcmV2aXNpdCBhZnRlciBtYXhfY29udGVudF9sZW5ndGggZGVmaW5pdGlvbi9pbXBsZW1lbnRhdGlvbiBpcyB1cGRhdGVkCiBkZWYgdGVzdF9jbGllbnRfbWVzc2FnZV90b29fYmlnKGNsaWVudCk6CiAgICAgdHJ5OgotICAgICAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2cnLCBtYXhfY29udGVudF9sZW5ndGg9NDA5NikKLSAgICAgICAgY2xpZW50LnN1Ym1pdCgiXCIgXCIqODAwMCIpLmFsbCgpLnJlc3VsdCgpCisgICAgICAgIGNsaWVudCA9IENsaWVudCh0ZXN0X25vX2F1dGhfdXJsLCAnZycsIG1heF9jb250ZW50X2xlbmd0aD0xMDI0KQorICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgnICcpLnJlcGVhdChjb25jYXQoJyAnKSkudGltZXMoMTIzNCkiKS5hbGwoKS5yZXN1bHQoKQogICAgICAgICBhc3NlcnQgRmFsc2UKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgotICAgICAgICBhc3NlcnQgZXguYXJnc1swXS5zdGFydHN3aXRoKCJSZWNlaXZlZCBlcnJvciBvbiByZWFkOiAnTWVzc2FnZSBzaXplIikgXAotICAgICAgICAgICAgICAgYW5kIGV4LmFyZ3NbMF0uZW5kc3dpdGgoImV4Y2VlZHMgbGltaXQgNDA5NiciKQorICAgICAgICBhc3NlcnQgZXguYXJnc1swXS5zdGFydHN3aXRoKCdSZXNwb25zZSBzaXplJykgXAorICAgICAgICAgICAgICAgYW5kIGV4LmFyZ3NbMF0uZW5kc3dpdGgoJ2V4Y2VlZHMgbGltaXQgMTAyNCBieXRlcycpCiAKICAgICAgICAgIyBjb25maXJtIHRoZSBjbGllbnQgaW5zdGFuY2UgaXMgc3RpbGwgdXNhYmxlIGFuZCBub3QgY2xvc2VkCi0gICAgICAgIGFzc2VydCBbInRlc3QiXSA9PSBjbGllbnQuc3VibWl0KCIndGVzdCciKS5hbGwoKS5yZXN1bHQoKQorICAgICAgICBhc3NlcnQgWyJ0ZXN0Il0gPT0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoJ3Rlc3QnKSIpLmFsbCgpLnJlc3VsdCgpCiAgICAgZmluYWxseToKICAgICAgICAgY2xpZW50LmNsb3NlKCkKIAogCitkZWYgdGVzdF9jbGllbnRfbGFyZ2VfcmVzdWx0KGNsaWVudCk6CisgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQoIltcIiBcIi5yZXBlYXQoMjAwMDAwKSwgXCIgXCIucmVwZWF0KDEwMDAwMCldIiwgcmVxdWVzdF9vcHRpb25zPXsnbGFuZ3VhZ2UnOiAnZ3JlbWxpbi1ncm9vdnknfSkuYWxsKCkucmVzdWx0KCkKKyAgICBhc3NlcnQgbGVuKHJlc3VsdF9zZXRbMF0pID09IDIwMDAwMAorICAgIGFzc2VydCBsZW4ocmVzdWx0X3NldFsxXSkgPT0gMTAwMDAwCisKKworZGVmIHRlc3RfY2xpZW50X3NjcmlwdF9zdWJtaXNzaW9uKGNsaWVudCk6CisgICAgYXNzZXJ0IGxlbihjbGllbnQuc3VibWl0KCJnLmluamVjdCgwLDAsMCwwLDApIikuYWxsKCkucmVzdWx0KCkpID09IDUKKworCiBkZWYgdGVzdF9jbGllbnRfc2ltcGxlX2V2YWwoY2xpZW50KToKLSAgICBhc3NlcnQgY2xpZW50LnN1Ym1pdCgnMSArIDEnKS5hbGwoKS5yZXN1bHQoKVswXSA9PSAyCisgICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ2cuaW5qZWN0KDIpJykuYWxsKCkucmVzdWx0KClbMF0gPT0gMgogCiAKIGRlZiB0ZXN0X2NsaWVudF9zaW1wbGVfZXZhbF9iaW5kaW5ncyhjbGllbnQpOgotICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCd4ICsgeCcsIHsneCc6IDJ9KS5hbGwoKS5yZXN1bHQoKVswXSA9PSA0CisgICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ2cuVih4KS52YWx1ZXMoImFnZSIpJywgeyd4JzogMX0pLmFsbCgpLnJlc3VsdCgpWzBdID09IDI5CiAKIAogZGVmIHRlc3RfY2xpZW50X2V2YWxfdHJhdmVyc2FsKGNsaWVudCk6CiAgICAgYXNzZXJ0IGxlbihjbGllbnQuc3VibWl0KCdnLlYoKScpLmFsbCgpLnJlc3VsdCgpKSA9PSA2CiAKIAorZGVmIHRlc3RfY2xpZW50X2V2YWxfdHJhdmVyc2FsX2JpbmRpbmdzKGNsaWVudCk6CisgICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ2cuVih4KS52YWx1ZXMoIm5hbWUiKScsIGJpbmRpbmdzPXsneCc6IDF9KS5hbGwoKS5yZXN1bHQoKVswXSA9PSAnbWFya28nCisKKworZGVmIHRlc3RfY2xpZW50X2V2YWxfdHJhdmVyc2FsX3JlcXVlc3Rfb3B0aW9uc19iaW5kaW5ncyhjbGllbnQpOgorICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCdnLlYoeCkudmFsdWVzKCJuYW1lIiknLCByZXF1ZXN0X29wdGlvbnM9eydiaW5kaW5ncyc6IHsneCc6IDF9fSkuYWxsKCkucmVzdWx0KClbMF0gPT0gJ21hcmtvJworCisKK2RlZiB0ZXN0X2NsaWVudF9ldmFsX3RyYXZlcnNhbF9iaW5kaW5nc19yZXF1ZXN0X29wdGlvbnNfYmluZGluZ3MoY2xpZW50KToKKyAgICAjIE5vdGUgdGhhdCBwYXJhbWV0ZXJzIGZyb20gcmVxdWVzdF9vcHRpb25zW2JpbmRpbmdzXSBpcyBhcHBsaWVkIGxhdGVyIGFuZCB3aWxsIHJlcGxhY2UgYmluZGluZ3MgaWYga2V5IGlzIHRoZSBzYW1lCisgICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ2cuVih4KS52YWx1ZXMoIm5hbWUiKScsIGJpbmRpbmdzPXsneCc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rfb3B0aW9ucz17J2JpbmRpbmdzJzogeyd4JzogMn19KS5hbGwoKS5yZXN1bHQoKVswXSA9PSAndmFkYXMnCisKKwogZGVmIHRlc3RfY2xpZW50X2Vycm9yKGNsaWVudCk6CiAgICAgdHJ5OgogICAgICAgICAjIHNob3VsZCBmaXJlIGFuIGV4Y2VwdGlvbgotICAgICAgICBjbGllbnQuc3VibWl0KCcxLzAnKS5hbGwoKS5yZXN1bHQoKQorICAgICAgICBjbGllbnQuc3VibWl0KCdnLmluamVjdCgxKS5tYXRoKCJfLzAiKScpLmFsbCgpLnJlc3VsdCgpCiAgICAgICAgIGFzc2VydCBGYWxzZQogICAgIGV4Y2VwdCBHcmVtbGluU2VydmVyRXJyb3IgYXMgZXg6Ci0gICAgICAgIGFzc2VydCAnZXhjZXB0aW9ucycgaW4gZXguc3RhdHVzX2F0dHJpYnV0ZXMKLSAgICAgICAgYXNzZXJ0ICdzdGFja1RyYWNlJyBpbiBleC5zdGF0dXNfYXR0cmlidXRlcworICAgICAgICBhc3NlcnQgZXguc3RhdHVzX21lc3NhZ2UuZW5kc3dpdGgoJ0RpdmlzaW9uIGJ5IHplcm8hJykKKyAgICAgICAgYXNzZXJ0IGV4LnN0YXR1c19leGNlcHRpb24KICAgICAgICAgYXNzZXJ0IHN0cihleCkgPT0gZiJ7ZXguc3RhdHVzX2NvZGV9OiB7ZXguc3RhdHVzX21lc3NhZ2V9IgogCiAgICAgIyBzdGlsbCBjYW4gc3VibWl0IGFmdGVyIGZhaWx1cmUKLSAgICBhc3NlcnQgY2xpZW50LnN1Ym1pdCgneCArIHgnLCB7J3gnOiAyfSkuYWxsKCkucmVzdWx0KClbMF0gPT0gNAorICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCdnLlYoeCkudmFsdWVzKCJhZ2UiKScsIHsneCc6IDF9KS5hbGwoKS5yZXN1bHQoKVswXSA9PSAyOQorCisKK2RlZiB0ZXN0X2JhZF9zZXJpYWxpemF0aW9uKGNsaWVudCk6CisgICAgdHJ5OgorICAgICAgICAjIHNob3VsZCB0aW1lb3V0CisgICAgICAgIGNsaWVudC5zdWJtaXQoJ2phdmEuYXd0LkNvbG9yLlJFRCcsIHJlcXVlc3Rfb3B0aW9ucz17J2xhbmd1YWdlJzogJ2dyZW1saW4tZ3Jvb3Z5J30pLmFsbCgpLnJlc3VsdCgpCisgICAgICAgIGFzc2VydCBGYWxzZQorICAgIGV4Y2VwdCBHcmVtbGluU2VydmVyRXJyb3IgYXMgZXg6CisgICAgICAgIGFzc2VydCBleC5zdGF0dXNfbWVzc2FnZQorICAgICAgICBhc3NlcnQgZXguc3RhdHVzX2V4Y2VwdGlvbgorICAgICAgICBhc3NlcnQgc3RyKGV4KSA9PSBmIntleC5zdGF0dXNfY29kZX06IHtleC5zdGF0dXNfbWVzc2FnZX0iCisKKyAgICAjIHN0aWxsIGNhbiBzdWJtaXQgYWZ0ZXIgZmFpbHVyZQorICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCdnLlYoeCkudmFsdWVzKCJhZ2UiKScsIHsneCc6IDF9KS5hbGwoKS5yZXN1bHQoKVswXSA9PSAyOQogCiAKIGRlZiB0ZXN0X2NsaWVudF9jb25uZWN0aW9uX3Bvb2xfYWZ0ZXJfZXJyb3IoY2xpZW50KToKQEAgLTk5LDU1ICsxNDEsNTUgQEAKIAogICAgIHRyeToKICAgICAgICAgIyBzaG91bGQgZmlyZSBhbiBleGNlcHRpb24KLSAgICAgICAgY2xpZW50LnN1Ym1pdCgnMS8wJykuYWxsKCkucmVzdWx0KCkKKyAgICAgICAgY2xpZW50LnN1Ym1pdCgnZy5pbmplY3QoMSkubWF0aCgiXy8wIiknKS5hbGwoKS5yZXN1bHQoKQogICAgICAgICBhc3NlcnQgRmFsc2UKICAgICBleGNlcHQgR3JlbWxpblNlcnZlckVycm9yIGFzIGdzZToKICAgICAgICAgIyBleHBlY3RpbmcgdGhlIHBvb2wgc2l6ZSB0byBiZSAxIGFnYWluIGFmdGVyIHF1ZXJ5IHJldHVybmVkCi0gICAgICAgIGFzc2VydCBnc2Uuc3RhdHVzX2NvZGUgPT0gNTk3CisgICAgICAgIGFzc2VydCBnc2Uuc3RhdHVzX2NvZGUgPT0gNTAwCiAgICAgICAgIGFzc2VydCBjbGllbnQuYXZhaWxhYmxlX3Bvb2xfc2l6ZSA9PSAxCiAKICAgICAjIHN0aWxsIGNhbiBzdWJtaXQgYWZ0ZXIgZmFpbHVyZQotICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCd4ICsgeCcsIHsneCc6IDJ9KS5hbGwoKS5yZXN1bHQoKVswXSA9PSA0CisgICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ2cuVih4KS52YWx1ZXMoImFnZSIpJywgeyd4JzogMX0pLmFsbCgpLnJlc3VsdCgpWzBdID09IDI5CiAKIAogZGVmIHRlc3RfY2xpZW50X25vX2hhbmdfaWZfc3VibWl0X29uX2Nsb3NlZChjbGllbnQpOgotICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCcxICsgMScpLmFsbCgpLnJlc3VsdCgpWzBdID09IDIKKyAgICBhc3NlcnQgY2xpZW50LnN1Ym1pdCgnZy5pbmplY3QoMiknKS5hbGwoKS5yZXN1bHQoKVswXSA9PSAyCiAgICAgY2xpZW50LmNsb3NlKCkKICAgICB0cnk6CiAgICAgICAgICMgc2hvdWxkIGZhaWwgc2luY2Ugbm90IGhhbmcgaWYgY2xvc2VkCi0gICAgICAgIGNsaWVudC5zdWJtaXQoJzEgKyAxJykuYWxsKCkucmVzdWx0KCkKKyAgICAgICAgY2xpZW50LnN1Ym1pdCgnZy5pbmplY3QoMiknKS5hbGwoKS5yZXN1bHQoKQogICAgICAgICBhc3NlcnQgRmFsc2UKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICBhc3NlcnQgVHJ1ZQogCiAKIGRlZiB0ZXN0X2NsaWVudF9jbG9zZV9hbGxfY29ubmVjdGlvbl9pbl9wb29sKGNsaWVudCk6Ci0gICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnJywgcG9vbF9zaXplPTEsIHNlc3Npb249Ijc1ZTk2MjBlLWRhOTgtNDFlMy05Mzc4LTAzMzZkYjgwM2RlMCIpCisgICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnJywgcG9vbF9zaXplPTEpCiAgICAgYXNzZXJ0IGNsaWVudC5hdmFpbGFibGVfcG9vbF9zaXplID09IDEKLSAgICBjbGllbnQuc3VibWl0KCcyKzInKS5hbGwoKS5yZXN1bHQoKQorICAgIGNsaWVudC5zdWJtaXQoJ2cuaW5qZWN0KDQpJykuYWxsKCkucmVzdWx0KCkKICAgICBjbGllbnQuY2xvc2UoKQogICAgIGFzc2VydCBjbGllbnQuYXZhaWxhYmxlX3Bvb2xfc2l6ZSA9PSAwCiAKIAogZGVmIHRlc3RfY2xpZW50X3NpZGVfdGltZW91dF9zZXRfZm9yX2Fpb2h0dHAoY2xpZW50KToKICAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2dtb2Rlcm4nLAotICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRfZmFjdG9yeT1sYW1iZGE6IEFpb2h0dHBUcmFuc3BvcnQocmVhZF90aW1lb3V0PTEsIHdyaXRlX3RpbWVvdXQ9MSkpCisgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydF9mYWN0b3J5PWxhbWJkYTogQWlvaHR0cEhUVFBUcmFuc3BvcnQocmVhZF90aW1lb3V0PTEsIHdyaXRlX3RpbWVvdXQ9MSkpCiAKICAgICB0cnk6CiAgICAgICAgICMgc2hvdWxkIGZpcmUgYW4gZXhjZXB0aW9uCi0gICAgICAgIGNsaWVudC5zdWJtaXQoJ1RocmVhZC5zbGVlcCgyMDAwKTsxJykuYWxsKCkucmVzdWx0KCkKKyAgICAgICAgY2xpZW50LnN1Ym1pdCgnVGhyZWFkLnNsZWVwKDIwMDApOzEnLCByZXF1ZXN0X29wdGlvbnM9eydsYW5ndWFnZSc6ICdncmVtbGluLWdyb292eSd9KS5hbGwoKS5yZXN1bHQoKQogICAgICAgICBhc3NlcnQgRmFsc2UKICAgICBleGNlcHQgVGltZW91dEVycm9yIGFzIGVycjoKICAgICAgICAgIyBhc3luY2lvIFRpbWVvdXRFcnJvciBoYXMgbm8gbWVzc2FnZS4KICAgICAgICAgYXNzZXJ0IHN0cihlcnIpID09ICIiCiAKICAgICAjIHN0aWxsIGNhbiBzdWJtaXQgYWZ0ZXIgZmFpbHVyZQotICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCd4ICsgeCcsIHsneCc6IDJ9KS5hbGwoKS5yZXN1bHQoKVswXSA9PSA0CisgICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ2cuVih4KS52YWx1ZXMoImFnZSIpJywgeyd4JzogMX0pLmFsbCgpLnJlc3VsdCgpWzBdID09IDI5CiAKIAogYXN5bmMgZGVmIGFzeW5jX2Nvbm5lY3QoZW5hYmxlKToKICAgICB0cnk6Ci0gICAgICAgIHRyYW5zcG9ydCA9IEFpb2h0dHBUcmFuc3BvcnQoY2FsbF9mcm9tX2V2ZW50X2xvb3A9ZW5hYmxlKQorICAgICAgICB0cmFuc3BvcnQgPSBBaW9odHRwSFRUUFRyYW5zcG9ydChjYWxsX2Zyb21fZXZlbnRfbG9vcD1lbmFibGUpCiAgICAgICAgIHRyYW5zcG9ydC5jb25uZWN0KHRlc3Rfbm9fYXV0aF91cmwpCiAgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC0xNjAsNyArMjAyLDcgQEAKICAgICBhc3NlcnQgYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY19jb25uZWN0KFRydWUpKQogCiAKLWRlZiB0ZXN0X2NsaWVudF9ncmVtbGluKGNsaWVudCk6CitkZWYgdGVzdF9jbGllbnRfc3VibWl0KGNsaWVudCk6CiAgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQoJ2cuVigxKScpCiAgICAgcmVzdWx0ID0gcmVzdWx0X3NldC5hbGwoKS5yZXN1bHQoKQogICAgIGFzc2VydCAxID09IGxlbihyZXN1bHQpCkBAIC0xOTIsMzMgKzIzNCw1MiBAQAogICAgICAgICBhc3NlcnQgMCA9PSBsZW4odnAucHJvcGVydGllcykKIAogCi1kZWYgdGVzdF9jbGllbnRfYnl0ZWNvZGUoY2xpZW50KToKK2RlZiB0ZXN0X2NsaWVudF9ncmVtbGluX2xhbmcoY2xpZW50KToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQogICAgIHQgPSBnLlYoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0KQogICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgYXNzZXJ0IGxlbihyZXN1bHRfc2V0LmFsbCgpLnJlc3VsdCgpKSA9PSA2CiAKIAotZGVmIHRlc3RfY2xpZW50X2J5dGVjb2RlX29wdGlvbnMoY2xpZW50KToKK2RlZiB0ZXN0X2NsaWVudF9ncmVtbGluX2xhbmdfb3B0aW9ucyhjbGllbnQpOgogICAgICMgc21va2UgdGVzdCB0byB2YWxpZGF0ZSBzZXJpYWxpemF0aW9uIG9mIE9wdGlvbnNTdHJhdGVneS4gbm8gd2F5IHRvIHJlYWxseSB2YWxpZGF0ZSB0aGlzIGZyb20gYW4gaW50ZWdyYXRpb24KICAgICAjIHRlc3QgcGVyc3BlY3RpdmUgYmVjYXVzZSB0aGVyZSdzIG5vIHdheSB0byBhY2Nlc3MgdGhlIGludGVybmFscyBvZiB0aGUgc3RyYXRlZ3kgdmlhIGJ5dGVjb2RlCiAgICAgZyA9IEdyYXBoVHJhdmVyc2FsU291cmNlKEdyYXBoKCksIFRyYXZlcnNhbFN0cmF0ZWdpZXMoKSkKLSAgICB0ID0gZy53aXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3koKip7IngiOiAidGVzdCIsICJ5IjogVHJ1ZX0pKS5WKCkKLSAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2dtb2Rlcm4nfX0pCisgICAgdCA9IGcud2l0aF9zdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneSgqKnsieCI6ICJ0ZXN0IiwgInkiOiBUcnVlfSkpLlYoKQorICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQpCiAgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQobWVzc2FnZSkKICAgICBhc3NlcnQgbGVuKHJlc3VsdF9zZXQuYWxsKCkucmVzdWx0KCkpID09IDYKICAgICAjIwogICAgIHQgPSBnLndpdGhfKCJ4IiwgInRlc3QiKS53aXRoXygieSIsIFRydWUpLlYoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0KQogICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgYXNzZXJ0IGxlbihyZXN1bHRfc2V0LmFsbCgpLnJlc3VsdCgpKSA9PSA2CiAKIAorZGVmIHRlc3RfY2xpZW50X2dyZW1saW5fbGFuZ19yZXF1ZXN0X29wdGlvbnNfd2l0aF9iaW5kaW5nKGNsaWVudCk6CisgICAgZyA9IEdyYXBoVHJhdmVyc2FsU291cmNlKEdyYXBoKCksIFRyYXZlcnNhbFN0cmF0ZWdpZXMoKSkKKyAgICAjIE5vdGUgdGhhdCBiaW5kaW5ncyBmb3IgY29uc3RydWN0ZWQgdHJhdmVyc2FscyBpcyBkb25lIHZpYSBQYXJhbWV0ZXIgb25seQorICAgIHQgPSBnLndpdGhfKCdsYW5ndWFnZScsICdncmVtbGluLWxhbmcnKS5WKEdWYWx1ZSgneCcsIFsxLCAyLCAzXSkpLmNvdW50KCkKKyAgICByZXF1ZXN0X29wdHMgPSB7J2xhbmd1YWdlJzogJ2dyZW1saW4tbGFuZycsICdwYXJhbXMnOiB7J3gnOiBbMSwgMiwgM119fQorICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQpCisgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQobWVzc2FnZSwgcmVxdWVzdF9vcHRpb25zPXJlcXVlc3Rfb3B0cykKKyAgICBhc3NlcnQgcmVzdWx0X3NldC5hbGwoKS5yZXN1bHQoKVswXSA9PSAzCisgICAgIyBXZSBjYW4gcmUtdXNlIHRoZSBleHRyYWN0ZWQgcmVxdWVzdCBvcHRpb25zIGluIHNjcmlwdCBzdWJtaXNzaW9uCisgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQoJ2cuVih4KS52YWx1ZXMoIm5hbWUiKScsIHJlcXVlc3Rfb3B0aW9ucz1yZXF1ZXN0X29wdHMpCisgICAgYXNzZXJ0IHJlc3VsdF9zZXQuYWxsKCkucmVzdWx0KClbMF0gPT0gJ21hcmtvJworICAgICMgRm9yIHNjcmlwdCBzdWJtaXNzaW9uIG9ubHksIHdlIGNhbiBhbHNvIGFkZCBiaW5kaW5ncyB0byByZXF1ZXN0IG9wdGlvbnMgYW5kIHRoZXkgd2lsbCBiZSBhcHBsaWVkCisgICAgcmVxdWVzdF9vcHRzWydiaW5kaW5ncyddID0geyd5JzogNH0KKyAgICByZXN1bHRfc2V0ID0gY2xpZW50LnN1Ym1pdCgnZy5WKHkpLnZhbHVlcygibmFtZSIpJywgcmVxdWVzdF9vcHRpb25zPXJlcXVlc3Rfb3B0cykKKyAgICBhc3NlcnQgcmVzdWx0X3NldC5hbGwoKS5yZXN1bHQoKVswXSA9PSAnam9zaCcKKyAgICByZXN1bHRfc2V0ID0gY2xpZW50LnN1Ym1pdCgnZy5WKHopLnZhbHVlcygibmFtZSIpJywgYmluZGluZ3M9eyd6JzogNX0sIHJlcXVlc3Rfb3B0aW9ucz1yZXF1ZXN0X29wdHMpCisgICAgYXNzZXJ0IHJlc3VsdF9zZXQuYWxsKCkucmVzdWx0KClbMF0gPT0gJ3JpcHBsZScKKworCiBkZWYgdGVzdF9pdGVyYXRlX3Jlc3VsdF9zZXQoY2xpZW50KToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQogICAgIHQgPSBnLlYoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0KQogICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtMjI5LDcgKzI5MCw3IEBACiBkZWYgdGVzdF9jbGllbnRfYXN5bmMoY2xpZW50KToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQogICAgIHQgPSBnLlYoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0KQogICAgIGZ1dHVyZSA9IGNsaWVudC5zdWJtaXRfYXN5bmMobWVzc2FnZSkKICAgICByZXN1bHRfc2V0ID0gZnV0dXJlLnJlc3VsdCgpCiAgICAgYXNzZXJ0IGxlbihyZXN1bHRfc2V0LmFsbCgpLnJlc3VsdCgpKSA9PSA2CkBAIC0yNDAsOCArMzAxLDggQEAKICAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2dtb2Rlcm4nLCBwb29sX3NpemU9MSkKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQogICAgIHQgPSBnLlYoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKLSAgICBtZXNzYWdlMiA9IFJlcXVlc3RNZXNzYWdlKCd0cmF2ZXJzYWwnLCAnYnl0ZWNvZGUnLCB7J2dyZW1saW4nOiB0LmJ5dGVjb2RlLCAnYWxpYXNlcyc6IHsnZyc6ICdnbW9kZXJuJ319KQorICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQpCisgICAgbWVzc2FnZTIgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQpCiAgICAgZnV0dXJlID0gY2xpZW50LnN1Ym1pdF9hc3luYyhtZXNzYWdlKQogICAgIGZ1dHVyZTIgPSBjbGllbnQuc3VibWl0X2FzeW5jKG1lc3NhZ2UyKQogCkBAIC0yNTcsOCArMzE4LDggQEAKIGRlZiB0ZXN0X211bHRpX2Nvbm5fcG9vbChjbGllbnQpOgogICAgIGcgPSBHcmFwaFRyYXZlcnNhbFNvdXJjZShHcmFwaCgpLCBUcmF2ZXJzYWxTdHJhdGVnaWVzKCkpCiAgICAgdCA9IGcuVigpCi0gICAgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlKCd0cmF2ZXJzYWwnLCAnYnl0ZWNvZGUnLCB7J2dyZW1saW4nOiB0LmJ5dGVjb2RlLCAnYWxpYXNlcyc6IHsnZyc6ICdnbW9kZXJuJ319KQotICAgIG1lc3NhZ2UyID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2dtb2Rlcm4nfX0pCisgICAgbWVzc2FnZSA9IGNyZWF0ZV9iYXNpY19yZXF1ZXN0X21lc3NhZ2UodCkKKyAgICBtZXNzYWdlMiA9IGNyZWF0ZV9iYXNpY19yZXF1ZXN0X21lc3NhZ2UodCkKICAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2cnLCBwb29sX3NpemU9MSkKICAgICBmdXR1cmUgPSBjbGllbnQuc3VibWl0X2FzeW5jKG1lc3NhZ2UpCiAgICAgZnV0dXJlMiA9IGNsaWVudC5zdWJtaXRfYXN5bmMobWVzc2FnZTIpCkBAIC0yODUsNyArMzQ2LDcgQEAKICAgICBjb25kaXRpb24gPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKIAogICAgIGRlZiB0aHJlYWRfcnVuKHRyLCByZXN1bHRfbGlzdCk6Ci0gICAgICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdHIuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2dtb2Rlcm4nfX0pCisgICAgICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHRyKQogICAgICAgICB3aXRoIGNvbmRpdGlvbjoKICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KDUpCiAgICAgICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCkBAIC0zMDcsNzYgKzM2OCw1MSBAQAogICAgICAgICB0LmpvaW4oNSkKIAogICAgIGFzc2VydCBsZW4ocmVzdWx0c1swXVswXSkgPT0gNgotICAgIGFzc2VydCByZXN1bHRzWzFdWzBdWzBdLm9iamVjdCA9PSA2CisgICAgYXNzZXJ0IHJlc3VsdHNbMV1bMF1bMF0gPT0gNgogICAgIGFzc2VydCBsZW4ocmVzdWx0c1syXVswXSkgPT0gNgotICAgIGFzc2VydCByZXN1bHRzWzNdWzBdWzBdLm9iamVjdCA9PSA2CisgICAgYXNzZXJ0IHJlc3VsdHNbM11bMF1bMF0gPT0gNgogCi1kZWYgdGVzdF9jbGllbnRfYnl0ZWNvZGVfd2l0aF9zaG9ydChjbGllbnQpOgorCitkZWYgdGVzdF9jbGllbnRfZ3JlbWxpbl9sYW5nX3dpdGhfc2hvcnQoY2xpZW50KToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQotICAgIHQgPSBnLlYoKS5oYXMoJ2FnZScsIHNob3J0KDE2KSkuY291bnQoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKLSAgICByZXN1bHRfc2V0ID0gY2xpZW50LnN1Ym1pdChtZXNzYWdlKQorICAgIHQgPSBnLndpdGhfKCdsYW5ndWFnZScsICdncmVtbGluLWxhbmcnKS5WKCkuaGFzKCdhZ2UnLCBzaG9ydCgxNikpLmNvdW50KCkKKyAgICByZXF1ZXN0X29wdHMgPSB7J2xhbmd1YWdlJzogJ2dyZW1saW4tbGFuZyd9CisgICAgbWVzc2FnZSA9IGNyZWF0ZV9iYXNpY19yZXF1ZXN0X21lc3NhZ2UodCkKKyAgICByZXN1bHRfc2V0ID0gY2xpZW50LnN1Ym1pdChtZXNzYWdlLCByZXF1ZXN0X29wdGlvbnM9cmVxdWVzdF9vcHRzKQogICAgIHJlc3VsdHMgPSBbXQogICAgIGZvciByZXN1bHQgaW4gcmVzdWx0X3NldDoKICAgICAgICAgcmVzdWx0cyArPSByZXN1bHQKICAgICBhc3NlcnQgbGVuKHJlc3VsdHMpID09IDEKIAotZGVmIHRlc3RfY2xpZW50X2J5dGVjb2RlX3dpdGhfbG9uZyhjbGllbnQpOgorCitkZWYgdGVzdF9jbGllbnRfZ3JlbWxpbl9sYW5nX3dpdGhfbG9uZyhjbGllbnQpOgogICAgIGcgPSBHcmFwaFRyYXZlcnNhbFNvdXJjZShHcmFwaCgpLCBUcmF2ZXJzYWxTdHJhdGVnaWVzKCkpCiAgICAgdCA9IGcuVigpLmhhcygnYWdlJywgbG9uZyg4NTE0MDE5NzI1ODUxMjIpKS5jb3VudCgpCi0gICAgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlKCd0cmF2ZXJzYWwnLCAnYnl0ZWNvZGUnLCB7J2dyZW1saW4nOiB0LmJ5dGVjb2RlLCAnYWxpYXNlcyc6IHsnZyc6ICdnbW9kZXJuJ319KQotICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCisgICAgcmVxdWVzdF9vcHRzID0ge30KKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0KQorICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UsIHJlcXVlc3Rfb3B0aW9ucz1yZXF1ZXN0X29wdHMpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgogICAgICAgICByZXN1bHRzICs9IHJlc3VsdAogICAgIGFzc2VydCBsZW4ocmVzdWx0cykgPT0gMQogCiAKLWRlZiB0ZXN0X2NsaWVudF9ieXRlY29kZV93aXRoX2JpZ2ludChjbGllbnQpOgorZGVmIHRlc3RfY2xpZW50X2dyZW1saW5fbGFuZ193aXRoX2JpZ2ludChjbGllbnQpOgogICAgIGcgPSBHcmFwaFRyYXZlcnNhbFNvdXJjZShHcmFwaCgpLCBUcmF2ZXJzYWxTdHJhdGVnaWVzKCkpCi0gICAgdCA9IGcuVigpLmhhcygnYWdlJywgYmlnaW50KDB4MTAwMF8wMDAwXzAwMDBfMDAwMF8wMDAwKSkuY291bnQoKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZ21vZGVybid9fSkKLSAgICByZXN1bHRfc2V0ID0gY2xpZW50LnN1Ym1pdChtZXNzYWdlKQorICAgIHQgPSBnLndpdGhfKCdsYW5ndWFnZScsICdncmVtbGluLWxhbmcnKS5WKCkuaGFzKCdhZ2UnLCBiaWdpbnQoMHgxMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDApKS5jb3VudCgpCisgICAgcmVxdWVzdF9vcHRzID0geydsYW5ndWFnZSc6ICdncmVtbGluLWxhbmcnfQorICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQpCisgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQobWVzc2FnZSwgcmVxdWVzdF9vcHRpb25zPXJlcXVlc3Rfb3B0cykKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdF9zZXQ6CiAgICAgICAgIHJlc3VsdHMgKz0gcmVzdWx0CiAgICAgYXNzZXJ0IGxlbihyZXN1bHRzKSA9PSAxCiAKIAotZGVmIHRlc3RfbXVsdGlfcmVxdWVzdF9pbl9zZXNzaW9uKGNsaWVudCk6Ci0gICAgIyBPdmVyd3JpdGUgZml4dHVyZSB3aXRoIHNlc3Npb24gY2xpZW50Ci0gICAgc2Vzc2lvbl9pZCA9IHN0cih1dWlkLnV1aWQ0KCkpCi0gICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnJywgc2Vzc2lvbj1zZXNzaW9uX2lkKQotCi0gICAgYXNzZXJ0IGNsaWVudC5zdWJtaXQoJ3ggPSAxJykuYWxsKCkucmVzdWx0KClbMF0gPT0gMQotICAgIGFzc2VydCBjbGllbnQuc3VibWl0KCd4ICsgMicpLmFsbCgpLnJlc3VsdCgpWzBdID09IDMKLQotICAgIGNsaWVudC5jbG9zZSgpCi0KLSAgICAjIGF0dGVtcHQgcmVjb25uZWN0IHRvIHNlc3Npb24gYW5kIG1ha2Ugc3VyZSAieCIgaXMgbm8gbG9uZ2VyIGEgdGhpbmcKLSAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2cnLCBzZXNzaW9uPXNlc3Npb25faWQpCi0gICAgdHJ5OgotICAgICAgICAjIHNob3VsZCBmaXJlIGFuIGV4Y2VwdGlvbgotICAgICAgICBjbGllbnQuc3VibWl0KCd4JykuYWxsKCkucmVzdWx0KCkKLSAgICAgICAgYXNzZXJ0IEZhbHNlCi0gICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgYXNzZXJ0IFRydWUKLQotCi1kZWYgdGVzdF9jbGllbnRfcG9vbF9pbl9zZXNzaW9uKGNsaWVudCk6Ci0gICAgIyBPdmVyd3JpdGUgZml4dHVyZSB3aXRoIHBvb2xfc2l6ZT0yIGNsaWVudAotICAgIHRyeToKLSAgICAgICAgIyBzaG91bGQgZmlyZSBhbiBleGNlcHRpb24KLSAgICAgICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnJywgc2Vzc2lvbj1zdHIodXVpZC51dWlkNCgpKSwgcG9vbF9zaXplPTIpCi0gICAgICAgIGFzc2VydCBGYWxzZQotICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgIGFzc2VydCBUcnVlCi0KLQogZGVmIHRlc3RfYmlnX3Jlc3VsdF9zZXQoY2xpZW50KToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQotICAgIHQgPSBnLmluamVjdCgxKS5yZXBlYXQoX18uYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCBfXy5sb29wcygpKSkudGltZXMoMjAwMDApLmNvdW50KCkKLSAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2cnfX0pCisgICAgdCA9IGcuaW5qZWN0KDEpLnJlcGVhdChfXy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCBfXy5sb29wcygpKSkudGltZXMoMjAwMDApLmNvdW50KCkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0LCBzb3VyY2U9J2cnKQogICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtMzg0LDcgKzQyMCw3IEBACiAgICAgYXNzZXJ0IGxlbihyZXN1bHRzKSA9PSAxCiAKICAgICB0ID0gZy5WKCkubGltaXQoMTApCi0gICAgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlKCd0cmF2ZXJzYWwnLCAnYnl0ZWNvZGUnLCB7J2dyZW1saW4nOiB0LmJ5dGVjb2RlLCAnYWxpYXNlcyc6IHsnZyc6ICdnJ319KQorICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQsIHNvdXJjZT0nZycpCiAgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQobWVzc2FnZSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdF9zZXQ6CkBAIC0zOTIsNyArNDI4LDcgQEAKICAgICBhc3NlcnQgbGVuKHJlc3VsdHMpID09IDEwCiAKICAgICB0ID0gZy5WKCkubGltaXQoMTAwKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZyd9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0LCBzb3VyY2U9J2cnKQogICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtNDAwLDcgKzQzNiw3IEBACiAgICAgYXNzZXJ0IGxlbihyZXN1bHRzKSA9PSAxMDAKIAogICAgIHQgPSBnLlYoKS5saW1pdCgxMDAwKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZyd9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0LCBzb3VyY2U9J2cnKQogICAgIHJlc3VsdF9zZXQgPSBjbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtNDA4LDcgKzQ0NCw3IEBACiAgICAgYXNzZXJ0IGxlbihyZXN1bHRzKSA9PSAxMDAwCiAKICAgICB0ID0gZy5WKCkubGltaXQoMTAwMDApCi0gICAgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlKCd0cmF2ZXJzYWwnLCAnYnl0ZWNvZGUnLCB7J2dyZW1saW4nOiB0LmJ5dGVjb2RlLCAnYWxpYXNlcyc6IHsnZyc6ICdnJ319KQorICAgIG1lc3NhZ2UgPSBjcmVhdGVfYmFzaWNfcmVxdWVzdF9tZXNzYWdlKHQsIHNvdXJjZT0nZycpCiAgICAgcmVzdWx0X3NldCA9IGNsaWVudC5zdWJtaXQobWVzc2FnZSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdF9zZXQ6CkBAIC00MTgsOCArNDU0LDggQEAKIAogZGVmIHRlc3RfYmlnX3Jlc3VsdF9zZXRfc2VjdXJlKGF1dGhlbnRpY2F0ZWRfY2xpZW50KToKICAgICBnID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKQotICAgIHQgPSBnLmluamVjdCgxKS5yZXBlYXQoX18uYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCBfXy5sb29wcygpKSkudGltZXMoMjAwMDApLmNvdW50KCkKLSAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2cnfX0pCisgICAgdCA9IGcuaW5qZWN0KDEpLnJlcGVhdChfXy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCBfXy5sb29wcygpKSkudGltZXMoMjAwMDApLmNvdW50KCkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0LCBzb3VyY2U9J2cnKQogICAgIHJlc3VsdF9zZXQgPSBhdXRoZW50aWNhdGVkX2NsaWVudC5zdWJtaXQobWVzc2FnZSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdF9zZXQ6CkBAIC00MjcsNyArNDYzLDcgQEAKICAgICBhc3NlcnQgbGVuKHJlc3VsdHMpID09IDEKIAogICAgIHQgPSBnLlYoKS5saW1pdCgxMCkKLSAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2cnfX0pCisgICAgbWVzc2FnZSA9IGNyZWF0ZV9iYXNpY19yZXF1ZXN0X21lc3NhZ2UodCwgc291cmNlPSdnJykKICAgICByZXN1bHRfc2V0ID0gYXV0aGVudGljYXRlZF9jbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtNDM1LDcgKzQ3MSw3IEBACiAgICAgYXNzZXJ0IGxlbihyZXN1bHRzKSA9PSAxMAogCiAgICAgdCA9IGcuVigpLmxpbWl0KDEwMCkKLSAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2cnfX0pCisgICAgbWVzc2FnZSA9IGNyZWF0ZV9iYXNpY19yZXF1ZXN0X21lc3NhZ2UodCwgc291cmNlPSdnJykKICAgICByZXN1bHRfc2V0ID0gYXV0aGVudGljYXRlZF9jbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtNDQzLDcgKzQ3OSw3IEBACiAgICAgYXNzZXJ0IGxlbihyZXN1bHRzKSA9PSAxMDAKIAogICAgIHQgPSBnLlYoKS5saW1pdCgxMDAwKQotICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZSgndHJhdmVyc2FsJywgJ2J5dGVjb2RlJywgeydncmVtbGluJzogdC5ieXRlY29kZSwgJ2FsaWFzZXMnOiB7J2cnOiAnZyd9fSkKKyAgICBtZXNzYWdlID0gY3JlYXRlX2Jhc2ljX3JlcXVlc3RfbWVzc2FnZSh0LCBzb3VyY2U9J2cnKQogICAgIHJlc3VsdF9zZXQgPSBhdXRoZW50aWNhdGVkX2NsaWVudC5zdWJtaXQobWVzc2FnZSkKICAgICByZXN1bHRzID0gW10KICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdF9zZXQ6CkBAIC00NTEsNyArNDg3LDcgQEAKICAgICBhc3NlcnQgbGVuKHJlc3VsdHMpID09IDEwMDAKIAogICAgIHQgPSBnLlYoKS5saW1pdCgxMDAwMCkKLSAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoJ3RyYXZlcnNhbCcsICdieXRlY29kZScsIHsnZ3JlbWxpbic6IHQuYnl0ZWNvZGUsICdhbGlhc2VzJzogeydnJzogJ2cnfX0pCisgICAgbWVzc2FnZSA9IGNyZWF0ZV9iYXNpY19yZXF1ZXN0X21lc3NhZ2UodCwgc291cmNlPSdnJykKICAgICByZXN1bHRfc2V0ID0gYXV0aGVudGljYXRlZF9jbGllbnQuc3VibWl0KG1lc3NhZ2UpCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgZm9yIHJlc3VsdCBpbiByZXN1bHRfc2V0OgpAQCAtNDcwLDQ4ICs1MDYsNjcgQEAKICAgICAgICAgYXNzZXJ0IEZhbHNlCiAKIAorIyBUT0RPOiB0ZXN0cyBwYXNzIGJlY2F1c2UgcmVxdWVzdElEIGlzIG5vdyBnZW5lcmF0ZWQgb24gSFRUUCBzZXJ2ZXIgYW5kIHRoaXMgb3B0aW9uIGdldHMgaWdub3JlZCwgdGVzdHMgdG8gYmUgcmVtb3ZlZAorIyAgb3IgdXBkYXRlZCBkZXBlbmRpbmcgb24gaWYgd2Ugc3RpbGwgd2FudCB0byB1c2UgcmVxdWVzdElEIG9yIG5vdAorQHB5dGVzdC5tYXJrLnNraXAocmVhc29uPSJyZXF1ZXN0SUQgaXMgZ2VuZXJhdGVkIG9uIHNlcnZlciBzaWRlIG9ubHksIGRpc2FibGUgZm9yIG5vdyIpCiBkZWYgdGVzdF9jbGllbnRfY3VzdG9tX2ludmFsaWRfcmVxdWVzdF9pZF9ncmFwaHNvbl9zY3JpcHQoY2xpZW50KToKLSAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2dtb2Rlcm4nLCBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaFNPTlNlcmlhbGl6ZXJzVjNkMCgpKQorICAgIGNsaWVudCA9IENsaWVudCh0ZXN0X25vX2F1dGhfdXJsLCAnZ21vZGVybicpCiAgICAgdHJ5OgotICAgICAgICBjbGllbnQuc3VibWl0KCdnLlYoKScsIHJlcXVlc3Rfb3B0aW9ucz17InJlcXVlc3RJZCI6Im1hbGZvcm1lZCJ9KS5hbGwoKS5yZXN1bHQoKQorICAgICAgICBjbGllbnQuc3VibWl0KCdnLlYoKScsIHJlcXVlc3Rfb3B0aW9ucz17InJlcXVlc3RJZCI6ICJtYWxmb3JtZWQifSkuYWxsKCkucmVzdWx0KCkKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgogICAgICAgICBhc3NlcnQgImJhZGx5IGZvcm1lZCBoZXhhZGVjaW1hbCBVVUlEIHN0cmluZyIgaW4gc3RyKGV4KQogCiAKK0BweXRlc3QubWFyay5za2lwKHJlYXNvbj0icmVxdWVzdElEIGlzIGdlbmVyYXRlZCBvbiBzZXJ2ZXIgc2lkZSBvbmx5LCBkaXNhYmxlIGZvciBub3ciKQogZGVmIHRlc3RfY2xpZW50X2N1c3RvbV9pbnZhbGlkX3JlcXVlc3RfaWRfZ3JhcGhiaW5hcnlfc2NyaXB0KGNsaWVudCk6Ci0gICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnbW9kZXJuJywgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKCkpCisgICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnbW9kZXJuJykKICAgICB0cnk6Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoJ2cuVigpJywgcmVxdWVzdF9vcHRpb25zPXsicmVxdWVzdElkIjoibWFsZm9ybWVkIn0pLmFsbCgpLnJlc3VsdCgpCisgICAgICAgIGNsaWVudC5zdWJtaXQoJ2cuVigpJywgcmVxdWVzdF9vcHRpb25zPXsicmVxdWVzdElkIjogIm1hbGZvcm1lZCJ9KS5hbGwoKS5yZXN1bHQoKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgIGFzc2VydCAiYmFkbHkgZm9ybWVkIGhleGFkZWNpbWFsIFVVSUQgc3RyaW5nIiBpbiBzdHIoZXgpCiAKIAorQHB5dGVzdC5tYXJrLnNraXAocmVhc29uPSJyZXF1ZXN0SUQgaXMgZ2VuZXJhdGVkIG9uIHNlcnZlciBzaWRlIG9ubHksIGRpc2FibGUgZm9yIG5vdyIpCiBkZWYgdGVzdF9jbGllbnRfY3VzdG9tX3ZhbGlkX3JlcXVlc3RfaWRfc2NyaXB0X3V1aWQoY2xpZW50KToKLSAgICBhc3NlcnQgbGVuKGNsaWVudC5zdWJtaXQoJ2cuVigpJywgcmVxdWVzdF9vcHRpb25zPXsicmVxdWVzdElkIjp1dWlkLnV1aWQ0KCl9KS5hbGwoKS5yZXN1bHQoKSkgPT0gNgorICAgIGFzc2VydCBsZW4oY2xpZW50LnN1Ym1pdCgnZy5WKCknLCByZXF1ZXN0X29wdGlvbnM9eyJyZXF1ZXN0SWQiOiB1dWlkLnV1aWQ0KCl9KS5hbGwoKS5yZXN1bHQoKSkgPT0gNgogCiAKK0BweXRlc3QubWFyay5za2lwKHJlYXNvbj0icmVxdWVzdElEIGlzIGdlbmVyYXRlZCBvbiBzZXJ2ZXIgc2lkZSBvbmx5LCBkaXNhYmxlIGZvciBub3ciKQogZGVmIHRlc3RfY2xpZW50X2N1c3RvbV92YWxpZF9yZXF1ZXN0X2lkX3NjcmlwdF9zdHJpbmcoY2xpZW50KToKLSAgICBhc3NlcnQgbGVuKGNsaWVudC5zdWJtaXQoJ2cuVigpJywgcmVxdWVzdF9vcHRpb25zPXsicmVxdWVzdElkIjpzdHIodXVpZC51dWlkNCgpKX0pLmFsbCgpLnJlc3VsdCgpKSA9PSA2CisgICAgYXNzZXJ0IGxlbihjbGllbnQuc3VibWl0KCdnLlYoKScsIHJlcXVlc3Rfb3B0aW9ucz17InJlcXVlc3RJZCI6IHN0cih1dWlkLnV1aWQ0KCkpfSkuYWxsKCkucmVzdWx0KCkpID09IDYKIAogCitAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249InJlcXVlc3RJRCBpcyBnZW5lcmF0ZWQgb24gc2VydmVyIHNpZGUgb25seSwgZGlzYWJsZSBmb3Igbm93IikKIGRlZiB0ZXN0X2NsaWVudF9jdXN0b21faW52YWxpZF9yZXF1ZXN0X2lkX2dyYXBoc29uX2J5dGVjb2RlKGNsaWVudCk6Ci0gICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnbW9kZXJuJywgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhTT05TZXJpYWxpemVyc1YzZDAoKSkKKyAgICBjbGllbnQgPSBDbGllbnQodGVzdF9ub19hdXRoX3VybCwgJ2dtb2Rlcm4nKQogICAgIHF1ZXJ5ID0gR3JhcGhUcmF2ZXJzYWxTb3VyY2UoR3JhcGgoKSwgVHJhdmVyc2FsU3RyYXRlZ2llcygpKS5WKCkuYnl0ZWNvZGUKICAgICB0cnk6Ci0gICAgICAgIGNsaWVudC5zdWJtaXQocXVlcnksIHJlcXVlc3Rfb3B0aW9ucz17InJlcXVlc3RJZCI6Im1hbGZvcm1lZCJ9KS5hbGwoKS5yZXN1bHQoKQorICAgICAgICBjbGllbnQuc3VibWl0KHF1ZXJ5LCByZXF1ZXN0X29wdGlvbnM9eyJyZXF1ZXN0SWQiOiAibWFsZm9ybWVkIn0pLmFsbCgpLnJlc3VsdCgpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgYXNzZXJ0ICJiYWRseSBmb3JtZWQgaGV4YWRlY2ltYWwgVVVJRCBzdHJpbmciIGluIHN0cihleCkKIAogCitAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249InJlcXVlc3RJRCBpcyBnZW5lcmF0ZWQgb24gc2VydmVyIHNpZGUgb25seSwgZGlzYWJsZSBmb3Igbm93IikKIGRlZiB0ZXN0X2NsaWVudF9jdXN0b21faW52YWxpZF9yZXF1ZXN0X2lkX2dyYXBoYmluYXJ5X2J5dGVjb2RlKGNsaWVudCk6Ci0gICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnbW9kZXJuJywgbWVzc2FnZV9zZXJpYWxpemVyPXNlcmlhbGl6ZXIuR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKCkpCisgICAgY2xpZW50ID0gQ2xpZW50KHRlc3Rfbm9fYXV0aF91cmwsICdnbW9kZXJuJykKICAgICBxdWVyeSA9IEdyYXBoVHJhdmVyc2FsU291cmNlKEdyYXBoKCksIFRyYXZlcnNhbFN0cmF0ZWdpZXMoKSkuVigpLmJ5dGVjb2RlCiAgICAgdHJ5OgotICAgICAgICBjbGllbnQuc3VibWl0KHF1ZXJ5LCByZXF1ZXN0X29wdGlvbnM9eyJyZXF1ZXN0SWQiOiJtYWxmb3JtZWQifSkuYWxsKCkucmVzdWx0KCkKKyAgICAgICAgY2xpZW50LnN1Ym1pdChxdWVyeSwgcmVxdWVzdF9vcHRpb25zPXsicmVxdWVzdElkIjogIm1hbGZvcm1lZCJ9KS5hbGwoKS5yZXN1bHQoKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgIGFzc2VydCAiYmFkbHkgZm9ybWVkIGhleGFkZWNpbWFsIFVVSUQgc3RyaW5nIiBpbiBzdHIoZXgpCiAKIAorQHB5dGVzdC5tYXJrLnNraXAocmVhc29uPSJyZXF1ZXN0SUQgaXMgZ2VuZXJhdGVkIG9uIHNlcnZlciBzaWRlIG9ubHksIGRpc2FibGUgZm9yIG5vdyIpCiBkZWYgdGVzdF9jbGllbnRfY3VzdG9tX3ZhbGlkX3JlcXVlc3RfaWRfYnl0ZWNvZGUoY2xpZW50KToKICAgICBxdWVyeSA9IEdyYXBoVHJhdmVyc2FsU291cmNlKEdyYXBoKCksIFRyYXZlcnNhbFN0cmF0ZWdpZXMoKSkuVigpLmJ5dGVjb2RlCiAgICAgYXNzZXJ0IGxlbihjbGllbnQuc3VibWl0KHF1ZXJ5KS5hbGwoKS5yZXN1bHQoKSkgPT0gNgorCitkZWYgdGVzdF9yZXNwb25zZV9zZXJpYWxpemVyX25ldmVyX05vbmUoKToKKyAgICBjbGllbnQgPSBDbGllbnQoJ3VybCcsICdnJywgcmVzcG9uc2Vfc2VyaWFsaXplcj1Ob25lKQorICAgIHJlc3Bfc2VyID0gY2xpZW50LnJlc3BvbnNlX3NlcmlhbGl6ZXIoKQorICAgIGFzc2VydCByZXNwX3NlciBpcyBub3QgTm9uZQorCisKK2RlZiB0ZXN0X3NlcmlhbGl6ZXJfYW5kX2ludGVyY2VwdG9yX2ZvcndhcmRlZChjbGllbnRfd2l0aF9pbnRlcmNlcHRvcik6CisgICAgcmVzdWx0ID0gY2xpZW50X3dpdGhfaW50ZXJjZXB0b3Iuc3VibWl0KCJnLmluamVjdCgxKSIpLm5leHQoKQorICAgIGFzc2VydCBbMl0gPT0gcmVzdWx0ICMgaW50ZXJjZXB0b3IgY2hhbmdlcyByZXF1ZXN0IHRvIGcuaW5qZWN0KDIpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbi5weQppbmRleCAzMTI3MWFjLi4yZTcyZTRhIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9kcml2ZXJfcmVtb3RlX2Nvbm5lY3Rpb24ucHkKQEAgLTE4LDQ1ICsxOCw0MyBAQAogIwogaW1wb3J0IG9zCiAKK2ltcG9ydCBweXRlc3QKKwogZnJvbSBncmVtbGluX3B5dGhvbiBpbXBvcnQgc3RhdGljcwogZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIgaW1wb3J0IHNlcmlhbGl6ZXIKIGZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLmRyaXZlcl9yZW1vdGVfY29ubmVjdGlvbiBpbXBvcnQgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbgotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIucHJvdG9jb2wgaW1wb3J0IEdyZW1saW5TZXJ2ZXJFcnJvcgotZnJvbSBncmVtbGluX3B5dGhvbi5zdGF0aWNzIGltcG9ydCBsb25nLCBiaWdpbnQKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNlciwgT3BlcmF0b3IsIEJhcnJpZXIKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNhbFN0cmF0ZWd5Ci1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBCaW5kaW5ncwotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgUCwgT3JkZXIsIFQKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFNjb3BlCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0IGxvbmcKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNhbFN0cmF0ZWd5LCBQLCBPcmRlciwgVCwgRFQsIEdWYWx1ZSwgQ2FyZGluYWxpdHksIFNjb3BlCiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuZ3JhcGhfdHJhdmVyc2FsIGltcG9ydCBfXwogZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLmFub255bW91c190cmF2ZXJzYWwgaW1wb3J0IHRyYXZlcnNhbAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IFZlcnRleAotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0IFN1YmdyYXBoU3RyYXRlZ3ksIFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LCBTZWVkU3RyYXRlZ3kKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBWZXJ0ZXgsIEVkZ2UsIEdyYXBoCitmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3Muc3RyYXRlZ2llcyBpbXBvcnQgU3ViZ3JhcGhTdHJhdGVneSwgU2VlZFN0cmF0ZWd5LCBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneQogZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8udXRpbCBpbXBvcnQgSGFzaGFibGVEaWN0Ci1mcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5zZXJpYWxpemVyIGltcG9ydCBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIucHJvdG9jb2wgaW1wb3J0IEdyZW1saW5TZXJ2ZXJFcnJvcgogCi1fX2F1dGhvcl9fID0gJ01hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSknCi0KLWZyb20gaW50ZWdyYXRpb24uY29uZnRlc3QgaW1wb3J0IGFub255bW91c191cmwKLQotZ3JlbWxpbl9zZXJ2ZXJfdXJsID0gb3MuZW52aXJvbi5nZXQoJ0dSRU1MSU5fU0VSVkVSX1VSTCcsICd3czovL2xvY2FsaG9zdDp7fS9ncmVtbGluJykKK2dyZW1saW5fc2VydmVyX3VybCA9IG9zLmVudmlyb24uZ2V0KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnaHR0cDovL2xvY2FsaG9zdDp7fS8nKQogdGVzdF9ub19hdXRoX3VybCA9IGdyZW1saW5fc2VydmVyX3VybC5mb3JtYXQoNDU5NDApCiAKLWNsYXNzIFRlc3REcml2ZXJSZW1vdGVDb25uZWN0aW9uKG9iamVjdCk6Ci0gICAgZGVmIHRlc3RfdHJhdmVyc2FscyhzZWxmLCByZW1vdGVfY29ubmVjdGlvbik6Ci0gICAgICAgIHN0YXRpY3MubG9hZF9zdGF0aWNzKGdsb2JhbHMoKSkKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQogCi0gICAgICAgIGFzc2VydCBsb25nKDYpID09IGcuVigpLmNvdW50KCkudG9MaXN0KClbMF0KK2NsYXNzIFRlc3REcml2ZXJSZW1vdGVDb25uZWN0aW9uKG9iamVjdCk6CisKKyAgICAjIHRoaXMgaXMgYSB0ZW1wb3JhcnkgdGVzdCBmb3IgYmFzaWMgZ3JhcGhTT05WNCBjb25uZWN0aXZpdHksIG9uY2UgYWxsIHR5cGVzIGFyZSBpbXBsZW1lbnRlZCwgZW5hYmxlIGdyYXBoU09OIHRlc3RpbmcKKyAgICAjIGluIGNvbmZ0ZXN0LnB5IGFuZCByZW1vdmUgdGhpcworICAgIGRlZiB0ZXN0X2dyYXBoU09OVjRfdGVtcChzZWxmKToKKyAgICAgICAgcmVtb3RlX2Nvbm4gPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKHRlc3Rfbm9fYXV0aF91cmwsICdnbW9kZXJuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWNCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Vfc2VyaWFsaXplcj1zZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWNCgpKQorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm4pCisgICAgICAgIGFzc2VydCBsb25nKDYpID09IGcuVigpLmNvdW50KCkudG9fbGlzdCgpWzBdCiAgICAgICAgICMgIwogICAgICAgICBhc3NlcnQgVmVydGV4KDEpID09IGcuVigxKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBnLlYoVmVydGV4KDEpKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0IDEgPT0gZy5WKDEpLmlkXygpLm5leHQoKQotICAgICAgICBhc3NlcnQgVHJhdmVyc2VyKFZlcnRleCgxKSkgPT0gZy5WKDEpLm5leHRUcmF2ZXJzZXIoKQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4oZy5WKDEpLnRvTGlzdCgpKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShnLlYoMSkudG9MaXN0KCksIGxpc3QpCisgICAgICAgICMgYXNzZXJ0IFRyYXZlcnNlcihWZXJ0ZXgoMSkpID09IGcuVigxKS5uZXh0VHJhdmVyc2VyKCkgICMgVE9ETyBjaGVjayBiYWNrIGFmdGVyIGJ1bGtpbmcgYWRkZWQgYmFjaworICAgICAgICBhc3NlcnQgMSA9PSBsZW4oZy5WKDEpLnRvX2xpc3QoKSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZy5WKDEpLnRvX2xpc3QoKSwgbGlzdCkKICAgICAgICAgcmVzdWx0cyA9IGcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikubmFtZQotICAgICAgICByZXN1bHRzID0gcmVzdWx0cy50b0xpc3QoKQorICAgICAgICByZXN1bHRzID0gcmVzdWx0cy50b19saXN0KCkKICAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHJlc3VsdHMpCiAgICAgICAgIGFzc2VydCAibG9wIiBpbiByZXN1bHRzCiAgICAgICAgIGFzc2VydCAicmlwcGxlIiBpbiByZXN1bHRzCkBAIC02NywxOCArNjUsMTQgQEAKICAgICAgICAgYXNzZXJ0IDQgPT0gZy5WKClbMjpdLmNvdW50KCkubmV4dCgpCiAgICAgICAgIGFzc2VydCAyID09IGcuVigpWzoyXS5jb3VudCgpLm5leHQoKQogICAgICAgICAjICMKLSAgICAgICAgcmVzdWx0cyA9IGcud2l0aFNpZGVFZmZlY3QoJ2EnLCBbJ2pvc2gnLCAncGV0ZXInXSkuVigxKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS52YWx1ZXMoJ25hbWUnKS53aGVyZShQLndpdGhpbignYScpKS50b0xpc3QoKQorICAgICAgICByZXN1bHRzID0gZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgWydqb3NoJywgJ3BldGVyJ10pLlYoMSkub3V0KCdjcmVhdGVkJykuaW5fKCdjcmVhdGVkJykudmFsdWVzKCduYW1lJykud2hlcmUoCisgICAgICAgICAgICBQLndpdGhpbignYScpKS50b19saXN0KCkKICAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHJlc3VsdHMpCiAgICAgICAgIGFzc2VydCAnam9zaCcgaW4gcmVzdWx0cwogICAgICAgICBhc3NlcnQgJ3BldGVyJyBpbiByZXN1bHRzCiAgICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy5WKCkub3V0KCkucHJvZmlsZSgpLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCAxID09IGxlbihyZXN1bHRzKQotICAgICAgICBhc3NlcnQgJ21ldHJpY3MnIGluIHJlc3VsdHNbMF0KLSAgICAgICAgYXNzZXJ0ICdkdXInIGluIHJlc3VsdHNbMF0KLSAgICAgICAgIyAjCiAgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ25hbWUnLCAncGV0ZXInKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKS5zZWxlY3QoJ2EnLCAnYicpLmJ5KAotICAgICAgICAgICAgX18udmFsdWVNYXAoKSkudG9MaXN0KCkKKyAgICAgICAgICAgIF9fLnZhbHVlX21hcCgpKS50b19saXN0KCkKICAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKHJlc3VsdHMpCiAgICAgICAgIGFzc2VydCAncGV0ZXInID09IHJlc3VsdHNbMF1bJ2EnXVsnbmFtZSddWzBdCiAgICAgICAgIGFzc2VydCAzNSA9PSByZXN1bHRzWzBdWydhJ11bJ2FnZSddWzBdCkBAIC04Nyw3MCArODEsMTUzIEBACiAgICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzWzBdWydhJ10pCiAgICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzWzBdWydiJ10pCiAgICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy5WKDEpLmluamVjdChnLlYoMikubmV4dCgpKS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKQorICAgICAgICByZXN1bHRzID0gZy5WKDEsIDIpLmluamVjdCgpLnZhbHVlcygnbmFtZScpLnRvX2xpc3QoKQogICAgICAgICBhc3NlcnQgMiA9PSBsZW4ocmVzdWx0cykKICAgICAgICAgYXNzZXJ0ICdtYXJrbycgaW4gcmVzdWx0cwogICAgICAgICBhc3NlcnQgJ3ZhZGFzJyBpbiByZXN1bHRzCiAgICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLm1hcChsYW1iZGE6ICgiaXQuZ2V0KCkudmFsdWUoJ25hbWUnKSIsICJncmVtbGluLWdyb292eSIpKS50b0xpc3QoKQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4ocmVzdWx0cykKLSAgICAgICAgYXNzZXJ0ICdtYXJrbycgaW4gcmVzdWx0cwotICAgICAgICAjICMKICAgICAgICAgIyB0aGlzIHRlc3QganVzdCB2YWxpZGF0ZXMgdGhhdCB0aGUgdW5kZXJzY29yZWQgdmVyc2lvbnMgb2Ygc3RlcHMgY29uZmxpY3Rpbmcgd2l0aCBHcmVtbGluIHdvcmsKICAgICAgICAgIyBwcm9wZXJseSBhbmQgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUgb2xkIHN0ZXBzIGFyZSByZW1vdmVkIC0gVElOS0VSUE9QLTIyNzIKICAgICAgICAgcmVzdWx0cyA9IGcuVigpLmZpbHRlcl8oX18udmFsdWVzKCdhZ2UnKS5zdW1fKCkuYW5kXygKICAgICAgICAgICAgIF9fLm1heF8oKS5pc18oUC5ndCgwKSksIF9fLm1pbl8oKS5pc18oUC5ndCgwKSkpKS5yYW5nZV8oMCwgMSkuaWRfKCkubmV4dCgpCiAgICAgICAgIGFzc2VydCAxID09IHJlc3VsdHMKICAgICAgICAgIyAjCi0gICAgICAgICMgdGVzdCBiaW5kaW5nIGluIFAKLSAgICAgICAgcmVzdWx0cyA9IGcuVigpLmhhcygncGVyc29uJywgJ2FnZScsIEJpbmRpbmdzLm9mKCd4JywgUC5sdCgzMCkpKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgMiA9PSByZXN1bHRzCi0gICAgICAgICMgIwotICAgICAgICAjIHRlc3QgZGljdCBrZXlzIHdoaWNoIGNhbiBvbmx5IHdvcmsgb24gR3JhcGhCaW5hcnkgYW5kIEdyYXBoU09OMyB3aGljaCBpbmNsdWRlIHNwZWNpZmljIHNlcmlhbGl6YXRpb24KKyAgICAgICAgIyB0ZXN0IGRpY3Qga2V5cwogICAgICAgICAjIHR5cGVzIGZvciBkaWN0Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbW90ZV9jb25uZWN0aW9uLl9jbGllbnQuX21lc3NhZ2Vfc2VyaWFsaXplciwgR3JhcGhTT05TZXJpYWxpemVyc1YyZDApOgotICAgICAgICAgICAgcmVzdWx0cyA9IGcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5lbGVtZW50TWFwKCJuYW1lIikuZ3JvdXBDb3VudCgpLm5leHQoKQotICAgICAgICAgICAgYXNzZXJ0IHtIYXNoYWJsZURpY3Qub2Yoe1QuaWQ6IDEsIFQubGFiZWw6ICdwZXJzb24nLCAnbmFtZSc6ICdtYXJrbyd9KTogMX0gPT0gcmVzdWx0cwotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZW1vdGVfY29ubmVjdGlvbi5fY2xpZW50Ll9tZXNzYWdlX3NlcmlhbGl6ZXIsIEdyYXBoU09OU2VyaWFsaXplcnNWMmQwKToKLSAgICAgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuYm90aCgna25vd3MnKS5ncm91cENvdW50KCkuYnkoX18udmFsdWVzKCduYW1lJykuZm9sZCgpKS5uZXh0KCkKLSAgICAgICAgICAgIGFzc2VydCB7dHVwbGUoWyd2YWRhcyddKTogMSwgdHVwbGUoWydqb3NoJ10pOiAxfSA9PSByZXN1bHRzCisgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuZWxlbWVudF9tYXAoIm5hbWUiKS5ncm91cF9jb3VudCgpLm5leHQoKQorICAgICAgICBhc3NlcnQge0hhc2hhYmxlRGljdC5vZih7VC5pZDogMSwgVC5sYWJlbDogJ3BlcnNvbicsICduYW1lJzogJ21hcmtvJ30pOiAxfSA9PSByZXN1bHRzCisgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuYm90aCgna25vd3MnKS5ncm91cF9jb3VudCgpLmJ5KF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkubmV4dCgpCisgICAgICAgIGFzc2VydCB7dHVwbGUoWyd2YWRhcyddKTogMSwgdHVwbGUoWydqb3NoJ10pOiAxfSA9PSByZXN1bHRzCisKKyAgICBkZWYgdGVzdF9idWxrX3JlcXVlc3Rfb3B0aW9uKHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uKToKKyAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQorICAgICAgICByZXN1bHQgPSBnLmluamVjdCgxLDIsMywyLDEpLnRvX2xpc3QoKQorICAgICAgICBhc3NlcnQgNSA9PSBsZW4ocmVzdWx0KQorICAgICAgICBidWxrZWRfcmVzdWx0cyA9IGcud2l0aF8oImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpLndpdGhfKCJidWxrUmVzdWx0cyIsIFRydWUpLmluamVjdCgxLDIsMywyLDEpLnRvX2xpc3QoKQorICAgICAgICBhc3NlcnQgNSA9PSBsZW4oYnVsa2VkX3Jlc3VsdHMpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X3JlcXVlc3Rfb3B0aW9ucyhzZWxmLCByZW1vdGVfY29ubmVjdGlvbik6CisgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbikKKyAgICAgICAgdCA9IGcud2l0aF8oImV2YWx1YXRpb25UaW1lb3V0IiwgMTAwMCkud2l0aF8oImJhdGNoU2l6ZSIsIDEwMCkuVigpLmNvdW50KCkKKyAgICAgICAgYXNzZXJ0IHJlbW90ZV9jb25uZWN0aW9uLmV4dHJhY3RfcmVxdWVzdF9vcHRpb25zKHQuZ3JlbWxpbl9sYW5nKSA9PSB7J2JhdGNoU2l6ZSc6IDEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2YWx1YXRpb25UaW1lb3V0JzogMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1bGtSZXN1bHRzJzogVHJ1ZX0KKyAgICAgICAgYXNzZXJ0IDYgPT0gdC50b19saXN0KClbMF0KKworICAgIEBweXRlc3QubWFyay5za2lwKHJlYXNvbj0iaW52ZXN0aWdhdGUgd2h5ICdpZHMnIHBhcmFtZXRlciBuYW1lIGZhaWxzIHRvIHBhcnNlIGluIGdyZW1saW4tbGFuZyIpCisgICAgZGVmIHRlc3RfZXh0cmFjdF9yZXF1ZXN0X29wdGlvbnNfd2l0aF9wYXJhbXMoc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb24pOgorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCisgICAgICAgIHQgPSBnLndpdGhfKCJldmFsdWF0aW9uVGltZW91dCIsCisgICAgICAgICAgICAgICAgICAgIDEwMDApLndpdGhfKCJiYXRjaFNpemUiLCAxMDApLndpdGhfKCJ1c2VyQWdlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCIpLlYoR1ZhbHVlKCdpZHMnLCBbMSwgMiwgM10pKS5jb3VudCgpCisgICAgICAgIGFzc2VydCByZW1vdGVfY29ubmVjdGlvbi5leHRyYWN0X3JlcXVlc3Rfb3B0aW9ucyh0LmdyZW1saW5fbGFuZykgPT0geydiYXRjaFNpemUnOiAxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldmFsdWF0aW9uVGltZW91dCc6IDEwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyQWdlbnQnOiAndGVzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWxrUmVzdWx0cyc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJhbXMnOiB7J2lkcyc6IFsxLCAyLCAzXX19CisgICAgICAgIGFzc2VydCAzID09IHQudG9fbGlzdCgpWzBdCisKKyAgICBkZWYgdGVzdF90cmF2ZXJzYWxzKHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uKToKKyAgICAgICAgc3RhdGljcy5sb2FkX3N0YXRpY3MoZ2xvYmFscygpKQorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCisKKyAgICAgICAgYXNzZXJ0IGxvbmcoNikgPT0gZy5WKCkuY291bnQoKS50b19saXN0KClbMF0KICAgICAgICAgIyAjCi0gICAgICAgICMgdGVzdCBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgaW4gViAtIEdyYXBoU09OIHdpbGwgZGVzZXJpYWxpemUgaW50byBOb25lIGFuZCBHcmFwaEJpbmFyeSB0byBbXQorICAgICAgICBhc3NlcnQgVmVydGV4KDEpID09IGcuVigxKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBnLlYoVmVydGV4KDEpKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0IDEgPT0gZy5WKDEpLmlkXygpLm5leHQoKQorICAgICAgICAjIGFzc2VydCBUcmF2ZXJzZXIoVmVydGV4KDEpKSA9PSBnLlYoMSkubmV4dFRyYXZlcnNlcigpICAjIFRPRE8gY2hlY2sgYmFjayBhZnRlciBidWxraW5nIGFkZGVkIGJhY2sKKyAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGcuVigxKS50b19saXN0KCkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGcuVigxKS50b19saXN0KCksIGxpc3QpCisgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLm5hbWUKKyAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMudG9fbGlzdCgpCisgICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzKQorICAgICAgICBhc3NlcnQgImxvcCIgaW4gcmVzdWx0cworICAgICAgICBhc3NlcnQgInJpcHBsZSIgaW4gcmVzdWx0cworICAgICAgICAjICMKKyAgICAgICAgYXNzZXJ0IDEwID09IGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpWzA6MTBdLmNvdW50KCkubmV4dCgpCisgICAgICAgIGFzc2VydCAxID09IGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpWzA6MV0uY291bnQoKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0IDAgPT0gZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSlbMDowXS5jb3VudCgpLm5leHQoKQorICAgICAgICBhc3NlcnQgNCA9PSBnLlYoKVsyOl0uY291bnQoKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0IDIgPT0gZy5WKClbOjJdLmNvdW50KCkubmV4dCgpCisgICAgICAgICMgIworICAgICAgICByZXN1bHRzID0gZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgWydqb3NoJywgJ3BldGVyJ10pLlYoMSkub3V0KCdjcmVhdGVkJykuaW5fKCdjcmVhdGVkJykudmFsdWVzKCduYW1lJykud2hlcmUoCisgICAgICAgICAgICBQLndpdGhpbignYScpKS50b19saXN0KCkKKyAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHJlc3VsdHMpCisgICAgICAgIGFzc2VydCAnam9zaCcgaW4gcmVzdWx0cworICAgICAgICBhc3NlcnQgJ3BldGVyJyBpbiByZXN1bHRzCisgICAgICAgICMgIworICAgICAgICAjICMgdG9kbzogZW5hYmxlIHdoZW4gcHJvZmlsZS9leHBsYWluIHNlcmlhbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgIyByZXN1bHRzID0gZy5WKCkub3V0KCkucHJvZmlsZSgpLnRvX2xpc3QoKQorICAgICAgICAjIGFzc2VydCAxID09IGxlbihyZXN1bHRzKQorICAgICAgICAjIGFzc2VydCAnbWV0cmljcycgaW4gcmVzdWx0c1swXQorICAgICAgICAjIGFzc2VydCAnZHVyJyBpbiByZXN1bHRzWzBdCisgICAgICAgICMgIworICAgICAgICByZXN1bHRzID0gZy5WKCkuaGFzKCduYW1lJywgJ3BldGVyJykuYXNfKCdhJykub3V0KCdjcmVhdGVkJykuYXNfKCdiJykuc2VsZWN0KCdhJywgJ2InKS5ieSgKKyAgICAgICAgICAgIF9fLnZhbHVlX21hcCgpKS50b19saXN0KCkKKyAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKHJlc3VsdHMpCisgICAgICAgIGFzc2VydCAncGV0ZXInID09IHJlc3VsdHNbMF1bJ2EnXVsnbmFtZSddWzBdCisgICAgICAgIGFzc2VydCAzNSA9PSByZXN1bHRzWzBdWydhJ11bJ2FnZSddWzBdCisgICAgICAgIGFzc2VydCAnbG9wJyA9PSByZXN1bHRzWzBdWydiJ11bJ25hbWUnXVswXQorICAgICAgICBhc3NlcnQgJ2phdmEnID09IHJlc3VsdHNbMF1bJ2InXVsnbGFuZyddWzBdCisgICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzWzBdWydhJ10pCisgICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzWzBdWydiJ10pCisgICAgICAgICMgIworICAgICAgICByZXN1bHRzID0gZy5WKDEsIDIpLnZhbHVlcygnbmFtZScpLnRvX2xpc3QoKQorICAgICAgICBhc3NlcnQgMiA9PSBsZW4ocmVzdWx0cykKKyAgICAgICAgYXNzZXJ0ICdtYXJrbycgaW4gcmVzdWx0cworICAgICAgICBhc3NlcnQgJ3ZhZGFzJyBpbiByZXN1bHRzCisgICAgICAgICMgIworICAgICAgICAjIHRoaXMgdGVzdCBqdXN0IHZhbGlkYXRlcyB0aGF0IHRoZSB1bmRlcnNjb3JlZCB2ZXJzaW9ucyBvZiBzdGVwcyBjb25mbGljdGluZyB3aXRoIEdyZW1saW4gd29yaworICAgICAgICAjIHByb3Blcmx5IGFuZCBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBvbGQgc3RlcHMgYXJlIHJlbW92ZWQgLSBUSU5LRVJQT1AtMjI3MgorICAgICAgICByZXN1bHRzID0gZy5WKCkuZmlsdGVyXyhfXy52YWx1ZXMoJ2FnZScpLnN1bV8oKS5hbmRfKAorICAgICAgICAgICAgX18ubWF4XygpLmlzXyhQLmd0KDApKSwgX18ubWluXygpLmlzXyhQLmd0KDApKSkpLnJhbmdlXygwLCAxKS5pZF8oKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0IDEgPT0gcmVzdWx0cworICAgICAgICAjICMKKyAgICAgICAgIyB0ZXN0IGRpY3Qga2V5cworICAgICAgICAjIHR5cGVzIGZvciBkaWN0CisgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuZWxlbWVudF9tYXAoIm5hbWUiKS5ncm91cF9jb3VudCgpLm5leHQoKQorICAgICAgICBhc3NlcnQge0hhc2hhYmxlRGljdC5vZih7VC5pZDogMSwgVC5sYWJlbDogJ3BlcnNvbicsICduYW1lJzogJ21hcmtvJ30pOiAxfSA9PSByZXN1bHRzCisgICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuYm90aCgna25vd3MnKS5ncm91cF9jb3VudCgpLmJ5KF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkubmV4dCgpCisgICAgICAgIGFzc2VydCB7dHVwbGUoWyd2YWRhcyddKTogMSwgdHVwbGUoWydqb3NoJ10pOiAxfSA9PSByZXN1bHRzCisgICAgICAgICMgIworICAgICAgICAjIHRlc3QgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzIGluIFYKICAgICAgICAgcmVzdWx0cyA9IGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJ0b2tlbnMiKS5WKCkudG9fbGlzdCgpCiAgICAgICAgIGZvciB2IGluIHJlc3VsdHM6CiAgICAgICAgICAgICBhc3NlcnQgbGVuKHYucHJvcGVydGllcykgPT0gMAogICAgICAgICAjICMKLSAgICAgICAgIyB0ZXN0IG1hdGVyaWFsaXplUHJvcGVydGllcyBpbiBFIC0gR3JhcGhTT04gd2lsbCBkZXNlcmlhbGl6ZSBpbnRvIE5vbmUgYW5kIEdyYXBoQmluYXJ5IHRvIFtdCisgICAgICAgICMgdGVzdCBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgaW4gRQogICAgICAgICByZXN1bHRzID0gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgInRva2VucyIpLkUoKS50b19saXN0KCkKICAgICAgICAgZm9yIGUgaW4gcmVzdWx0czoKICAgICAgICAgICAgIGFzc2VydCBsZW4oZS5wcm9wZXJ0aWVzKSA9PSAwCiAgICAgICAgICMgIwotICAgICAgICAjIHRlc3QgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzIGluIFZQIC0gR3JhcGhTT04gd2lsbCBkZXNlcmlhbGl6ZSBpbnRvIE5vbmUgYW5kIEdyYXBoQmluYXJ5IHRvIFtdCisgICAgICAgICMgdGVzdCBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgaW4gVlAKICAgICAgICAgcmVzdWx0cyA9IGcud2l0aF8oIm1hdGVyaWFsaXplUHJvcGVydGllcyIsICJ0b2tlbnMiKS5WKCkucHJvcGVydGllcygpLnRvX2xpc3QoKQogICAgICAgICBmb3IgdnAgaW4gcmVzdWx0czoKICAgICAgICAgICAgIGFzc2VydCBsZW4odnAucHJvcGVydGllcykgPT0gMAogICAgICAgICAjICMKLSAgICAgICAgIyB0ZXN0IG1hdGVyaWFsaXplUHJvcGVydGllcyBpbiBQYXRoIC0gR3JhcGhTT04gd2lsbCBkZXNlcmlhbGl6ZSBpbnRvIE5vbmUgYW5kIEdyYXBoQmluYXJ5IHRvIFtdCisgICAgICAgICMgdGVzdCBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgaW4gUGF0aAogICAgICAgICBwID0gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgInRva2VucyIpLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXRFKCkuaW5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLnBhdGgoKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0IDMgPT0gbGVuKHAub2JqZWN0cykKICAgICAgICAgYXNzZXJ0IGxlbihwLm9iamVjdHNbMF0ucHJvcGVydGllcykgPT0gMAogICAgICAgICBhc3NlcnQgbGVuKHAub2JqZWN0c1sxXS5wcm9wZXJ0aWVzKSA9PSAwCiAgICAgICAgIGFzc2VydCBsZW4ocC5vYmplY3RzWzJdLnByb3BlcnRpZXMpID09IDAKICAgICAgICAgIyAjCi0gICAgICAgICMgdGVzdCBtYXRlcmlhbGl6ZVByb3BlcnRpZXMgaW4gUGF0aCAtICdhbGwnIHNob3VsZCBtYXRlcmlhbGl6ZSBwcm9wZXJ0aWVzIG9uIGVhY2ggZWxlbWVudAotICAgICAgICBwID0gZy53aXRoXygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIiwgImFsbCIpLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXRFKCkuaW5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLnBhdGgoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDMgPT0gbGVuKHAub2JqZWN0cykKLSAgICAgICAgYXNzZXJ0IHAub2JqZWN0c1swXS5wcm9wZXJ0aWVzIGlzIG5vdCBOb25lIGFuZCBsZW4ocC5vYmplY3RzWzBdLnByb3BlcnRpZXMpID4gMAotICAgICAgICAjIGVkZ2VzIGhhdmUgZGljdC1saWtlIHByb3BlcnRpZXM7IGVuc3VyZSBub3QgZW1wdHkKLSAgICAgICAgYXNzZXJ0IHAub2JqZWN0c1sxXS5wcm9wZXJ0aWVzIGlzIG5vdCBOb25lIGFuZCBsZW4ocC5vYmplY3RzWzFdLnByb3BlcnRpZXMpID4gMAotICAgICAgICBhc3NlcnQgcC5vYmplY3RzWzJdLnByb3BlcnRpZXMgaXMgbm90IE5vbmUgYW5kIGxlbihwLm9iamVjdHNbMl0ucHJvcGVydGllcykgPiAwCisgICAgICAgICMgc3ViZ3JhcGggLSBza2lwcGluZyBHcmFwaFNPTiBmb3Igbm93LiB3ZSBjYW4gcmVtb3ZlIHRoaXMgY2FydmUtb3V0IHdoZW4gd2UgcmVtb3ZlIHRoZSBHcmFwaFNPTiBzdXBwb3J0IHdoaWNoCisgICAgICAgICMgd2FzIG1lYW50IHRvIGJlIHRlbXBvcmFyeQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZW1vdGVfY29ubmVjdGlvbi5fY2xpZW50Ll9yZXNwb25zZV9zZXJpYWxpemVyLCBzZXJpYWxpemVyLkdyYXBoU09OU2VyaWFsaXplcnNWNCk6CisgICAgICAgICAgICBzZyA9IGcuRSgpLmhhc19sYWJlbCgna25vd3MnKS5zdWJncmFwaCgnc2cnKS5jYXAoJ3NnJykubmV4dCgpCisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzZywgR3JhcGgpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHNnLnZlcnRpY2VzKSA9PSAzCisgICAgICAgICAgICBhc3NlcnQgbGVuKHNnLmVkZ2VzKSA9PSAyCisgICAgICAgICAgICBmb3IgdiBpbiBzZy52ZXJ0aWNlcy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2LCBWZXJ0ZXgpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHYubGFiZWwgPT0gJ3BlcnNvbicKKyAgICAgICAgICAgIGZvciBlIGluIHNnLmVkZ2VzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGUsIEVkZ2UpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGUubGFiZWwgPT0gJ2tub3dzJwogCiAgICAgZGVmIHRlc3Rfc2V0X3dpdGhfdW5oYXNoYWJsZV9lbGVtZW50cyhzZWxmLCByZW1vdGVfY29ubmVjdGlvbik6Ci0gICAgICAgICMgdGVzdCB0aGF0IGEgcXVlcnkgcmV0dXJuaW5nIGEgU2V0IGNvbnRhaW5pbmcgbm9uLWhhc2hhYmxlIGVsZW1lbnRzIChtYXBzKSBjYW4gYmUKLSAgICAgICAgIyBkZXNlcmlhbGl6ZWQgd2l0aG91dCBhIFR5cGVFcnJvciAtIHNlZSBUSU5LRVJQT1AtMzIzMgotICAgICAgICAjIEdyYXBoU09OIHYyIGRvZXMgbm90IGhhdmUgYSBTZXQgdHlwZSBzbyBpdCBkZXNlcmlhbGl6ZXMgYXMgbGlzdCAtIHNraXAgZm9yIHYyCi0gICAgICAgIGlmIGlzaW5zdGFuY2UocmVtb3RlX2Nvbm5lY3Rpb24uX2NsaWVudC5fbWVzc2FnZV9zZXJpYWxpemVyLCBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCk6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUocmVtb3RlX2Nvbm5lY3Rpb24pCiAgICAgICAgICMgZy5WKCkudmFsdWVNYXAoKS5kZWR1cChTY29wZS5sb2NhbCkgcmV0dXJucyBhIFNldCBvZiBNYXAgcmVzdWx0cyB3aGljaCBwcmV2aW91c2x5CiAgICAgICAgICMgdGhyZXcgVHlwZUVycm9yIGJlY2F1c2UgUHl0aG9uIHNldHMgY2Fubm90IGNvbnRhaW4gdW5oYXNoYWJsZSBkaWN0IGVsZW1lbnRzLgpAQCAtMTYwLDQ3ICsyMzcsMzYgQEAKICAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHIsIGxpc3QpCiAKLSAgICBkZWYgdGVzdF9sYW1iZGFfdHJhdmVyc2FscyhzZWxmLCByZW1vdGVfY29ubmVjdGlvbik6Ci0gICAgICAgIHN0YXRpY3MubG9hZF9zdGF0aWNzKGdsb2JhbHMoKSkKLSAgICAgICAgYXNzZXJ0ICJyZW1vdGVjb25uZWN0aW9uW3t9LGdtb2Rlcm5dIi5mb3JtYXQodGVzdF9ub19hdXRoX3VybCkgPT0gc3RyKHJlbW90ZV9jb25uZWN0aW9uKQotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCi0KLSAgICAgICAgYXNzZXJ0IDI0LjAgPT0gZy53aXRoU2FjaygxLjAsIGxhbWJkYTogKCJ4IC0+IHggKyAxIiwgImdyZW1saW4tZ3Jvb3Z5IikpLlYoKS5ib3RoKCkuc2FjaygpLnN1bV8oKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDI0LjAgPT0gZy53aXRoU2FjayhsYW1iZGE6ICgiezEuMGR9IiwgImdyZW1saW4tZ3Jvb3Z5IiksIGxhbWJkYTogKCJ4IC0+IHggKyAxIiwgImdyZW1saW4tZ3Jvb3Z5IikpLlYoKS5ib3RoKCkuc2FjaygpLnN1bV8oKS5uZXh0KCkKLQotICAgICAgICBhc3NlcnQgNDguMCA9PSBnLndpdGhTYWNrKDEuMCwgbGFtYmRhOiAoIngsIHkgLT4gIHggKyB5ICsgMSIsICJncmVtbGluLWdyb292eSIpKS5WKCkuYm90aCgpLnNhY2soKS5zdW1fKCkubmV4dCgpCi0gICAgICAgIGFzc2VydCA0OC4wID09IGcud2l0aFNhY2sobGFtYmRhOiAoInsxLjBkfSIsICJncmVtbGluLWdyb292eSIpLCBsYW1iZGE6ICgieCwgeSAtPiAgeCArIHkgKyAxIiwgImdyZW1saW4tZ3Jvb3Z5IikpLlYoKS5ib3RoKCkuc2FjaygpLnN1bV8oKS5uZXh0KCkKLQogICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmLCByZW1vdGVfY29ubmVjdGlvbik6CiAgICAgICAgIHN0YXRpY3MubG9hZF9zdGF0aWNzKGdsb2JhbHMoKSkKICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQogCiAgICAgICAgIHQgPSBnLlYoKS5jb3VudCgpCi0gICAgICAgIGFzc2VydCB0Lmhhc05leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IHQuaGFzTmV4dCgpCi0gICAgICAgIGFzc2VydCB0Lmhhc05leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKKyAgICAgICAgYXNzZXJ0IHQuaGFzX25leHQoKQorICAgICAgICBhc3NlcnQgdC5oYXNfbmV4dCgpCisgICAgICAgIGFzc2VydCB0Lmhhc19uZXh0KCkKKyAgICAgICAgYXNzZXJ0IHQuaGFzX25leHQoKQorICAgICAgICBhc3NlcnQgdC5oYXNfbmV4dCgpCiAgICAgICAgIGFzc2VydCA2ID09IHQubmV4dCgpCi0gICAgICAgIGFzc2VydCBub3QodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QodC5oYXNOZXh0KCkpCisgICAgICAgIGFzc2VydCBub3QgKHQuaGFzX25leHQoKSkKKyAgICAgICAgYXNzZXJ0IG5vdCAodC5oYXNfbmV4dCgpKQorICAgICAgICBhc3NlcnQgbm90ICh0Lmhhc19uZXh0KCkpCisgICAgICAgIGFzc2VydCBub3QgKHQuaGFzX25leHQoKSkKKyAgICAgICAgYXNzZXJ0IG5vdCAodC5oYXNfbmV4dCgpKQogCiAgICAgICAgIHQgPSBnLlYoKS5oYXMoJ25hbWUnLCBQLndpdGhpbignbWFya28nLCAncGV0ZXInKSkudmFsdWVzKCduYW1lJykub3JkZXIoKQogICAgICAgICBhc3NlcnQgIm1hcmtvIiA9PSB0Lm5leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IHQuaGFzTmV4dCgpCi0gICAgICAgIGFzc2VydCB0Lmhhc05leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IHQuaGFzTmV4dCgpCisgICAgICAgIGFzc2VydCB0Lmhhc19uZXh0KCkKKyAgICAgICAgYXNzZXJ0IHQuaGFzX25leHQoKQorICAgICAgICBhc3NlcnQgdC5oYXNfbmV4dCgpCisgICAgICAgIGFzc2VydCB0Lmhhc19uZXh0KCkKKyAgICAgICAgYXNzZXJ0IHQuaGFzX25leHQoKQogICAgICAgICBhc3NlcnQgInBldGVyIiA9PSB0Lm5leHQoKQotICAgICAgICBhc3NlcnQgbm90KHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90KHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90KHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90KHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90KHQuaGFzTmV4dCgpKQorICAgICAgICBhc3NlcnQgbm90ICh0Lmhhc19uZXh0KCkpCisgICAgICAgIGFzc2VydCBub3QgKHQuaGFzX25leHQoKSkKKyAgICAgICAgYXNzZXJ0IG5vdCAodC5oYXNfbmV4dCgpKQorICAgICAgICBhc3NlcnQgbm90ICh0Lmhhc19uZXh0KCkpCisgICAgICAgIGFzc2VydCBub3QgKHQuaGFzX25leHQoKSkKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0Lm5leHQoKQpAQCAtMjExLDQ2ICsyNzcsNDUgQEAKICAgICBkZWYgdGVzdF9zdHJhdGVnaWVzKHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uKToKICAgICAgICAgc3RhdGljcy5sb2FkX3N0YXRpY3MoZ2xvYmFscygpKQogICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pLiBcCi0gICAgICAgICAgICB3aXRoU3RyYXRlZ2llcyhUcmF2ZXJzYWxTdHJhdGVneSgiU3ViZ3JhcGhTdHJhdGVneSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7InZlcnRpY2VzIjogX18uaGFzTGFiZWwoInBlcnNvbiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZGdlcyI6IF9fLmhhc0xhYmVsKCJjcmVhdGVkIil9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneSIpKQotICAgICAgICBhc3NlcnQgNCA9PSBnLlYoKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgMCA9PSBnLkUoKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgMSA9PSBnLlYoKS5sYWJlbCgpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDQgPT0gZy5WKCkuZmlsdGVyXyhsYW1iZGE6ICgieCAtPiB0cnVlIiwgImdyZW1saW4tZ3Jvb3Z5IikpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAicGVyc29uIiA9PSBnLlYoKS5sYWJlbCgpLmRlZHVwKCkubmV4dCgpCi0gICAgICAgICMKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKS4gXAotICAgICAgICAgICAgd2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXNMYWJlbCgicGVyc29uIiksIGVkZ2VzPV9fLmhhc0xhYmVsKCJjcmVhdGVkIikpKQorICAgICAgICAgICAgd2l0aF9zdHJhdGVnaWVzKFRyYXZlcnNhbFN0cmF0ZWd5KCJTdWJncmFwaFN0cmF0ZWd5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidmVydGljZXMiOiBfXy5oYXNfbGFiZWwoInBlcnNvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlZGdlcyI6IF9fLmhhc19sYWJlbCgiY3JlYXRlZCIpfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneSIpKQogICAgICAgICBhc3NlcnQgNCA9PSBnLlYoKS5jb3VudCgpLm5leHQoKQogICAgICAgICBhc3NlcnQgMCA9PSBnLkUoKS5jb3VudCgpLm5leHQoKQogICAgICAgICBhc3NlcnQgMSA9PSBnLlYoKS5sYWJlbCgpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IGcuVigpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkKICAgICAgICAgIwogICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pLiBcCi0gICAgICAgICAgICB3aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzPV9fLmhhc0xhYmVsKCJjcmVhdGVkIikpKQorICAgICAgICAgICAgd2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzX2xhYmVsKCJwZXJzb24iKSwgZWRnZXM9X18uaGFzX2xhYmVsKCJjcmVhdGVkIikpKQorICAgICAgICBhc3NlcnQgNCA9PSBnLlYoKS5jb3VudCgpLm5leHQoKQorICAgICAgICBhc3NlcnQgMCA9PSBnLkUoKS5jb3VudCgpLm5leHQoKQorICAgICAgICBhc3NlcnQgMSA9PSBnLlYoKS5sYWJlbCgpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IGcuVigpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkKKyAgICAgICAgIworICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pLiBcCisgICAgICAgICAgICB3aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShlZGdlcz1fXy5oYXNfbGFiZWwoImNyZWF0ZWQiKSkpCiAgICAgICAgIGFzc2VydCA2ID09IGcuVigpLmNvdW50KCkubmV4dCgpCiAgICAgICAgIGFzc2VydCA0ID09IGcuRSgpLmNvdW50KCkubmV4dCgpCiAgICAgICAgIGFzc2VydCAxID09IGcuRSgpLmxhYmVsKCkuZGVkdXAoKS5jb3VudCgpLm5leHQoKQogICAgICAgICBhc3NlcnQgImNyZWF0ZWQiID09IGcuRSgpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkKICAgICAgICAgIwotICAgICAgICBnID0gZy53aXRob3V0U3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KS4gXAotICAgICAgICAgICAgd2l0aENvbXB1dGVyKHZlcnRpY2VzPV9fLmhhcygibmFtZSIsICJtYXJrbyIpLCBlZGdlcz1fXy5saW1pdCgwKSkKKyAgICAgICAgZyA9IGcud2l0aG91dF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kpLiBcCisgICAgICAgICAgICB3aXRoX2NvbXB1dGVyKHZlcnRpY2VzPV9fLmhhcygibmFtZSIsICJtYXJrbyIpLCBlZGdlcz1fXy5saW1pdCgwKSkKICAgICAgICAgYXNzZXJ0IDEgPT0gZy5WKCkuY291bnQoKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0IDAgPT0gZy5FKCkuY291bnQoKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IGcuVigpLmxhYmVsKCkubmV4dCgpCiAgICAgICAgIGFzc2VydCAibWFya28iID09IGcuVigpLm5hbWUubmV4dCgpCiAgICAgICAgICMKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKS53aXRoQ29tcHV0ZXIoKQorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pLndpdGhfY29tcHV0ZXIoKQogICAgICAgICBhc3NlcnQgNiA9PSBnLlYoKS5jb3VudCgpLm5leHQoKQogICAgICAgICBhc3NlcnQgNiA9PSBnLkUoKS5jb3VudCgpLm5leHQoKQogICAgICAgICAjCi0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbikud2l0aFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KDEyMzQ1KSkKLSAgICAgICAgc2h1ZmZsZWRSZXN1bHQgPSBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCBzaHVmZmxlZFJlc3VsdCA9PSBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCBzaHVmZmxlZFJlc3VsdCA9PSBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCBzaHVmZmxlZFJlc3VsdCA9PSBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnRvTGlzdCgpCisgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbikud2l0aF9zdHJhdGVnaWVzKFNlZWRTdHJhdGVneSgxMjM0NSkpCisgICAgICAgIHNodWZmbGVkUmVzdWx0ID0gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS50b19saXN0KCkKKyAgICAgICAgYXNzZXJ0IHNodWZmbGVkUmVzdWx0ID09IGcuVigpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkudG9fbGlzdCgpCisgICAgICAgIGFzc2VydCBzaHVmZmxlZFJlc3VsdCA9PSBnLlYoKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnRvX2xpc3QoKQorICAgICAgICBhc3NlcnQgc2h1ZmZsZWRSZXN1bHQgPT0gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS50b19saXN0KCkKICAgICAgICAgIwogICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pLiBcCiAgICAgICAgICAgICB3aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd19leGNlcHRpb249VHJ1ZSkpCkBAIC0yNjAsODMgKzMyNSwzMiBAQAogICAgICAgICBleGNlcHQgR3JlbWxpblNlcnZlckVycm9yIGFzIGdzZToKICAgICAgICAgICAgIGFzc2VydCBnc2Uuc3RhdHVzX2NvZGUgPT0gNTAwCiAKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKS53aXRoXygieCIsIFRydWUpLndpdGhfKCdldmFsdWF0aW9uVGltZW91dCcsIDEwKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBnLmluamVjdCgxKS5zaWRlRWZmZWN0KGxhbWJkYTogKCJUaHJlYWQuc2xlZXAoMTAwMCkiLCAiZ3JlbWxpbi1ncm9vdnkiKSkuaXRlcmF0ZSgpCi0gICAgICAgICAgICBhc3NlcnQgRmFsc2UKLSAgICAgICAgZXhjZXB0IEdyZW1saW5TZXJ2ZXJFcnJvciBhcyBnc2U6Ci0gICAgICAgICAgICBhc3NlcnQgZ3NlLnN0YXR1c19jb2RlID09IDU5OAotCi0gICAgZGVmIHRlc3RfY2xvc2Vfc2Vzc2lvbnMoc2VsZiwgcmVtb3RlX3RyYW5zYWN0aW9uX2Nvbm5lY3Rpb24pOgotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX3RyYW5zYWN0aW9uX2Nvbm5lY3Rpb24pCi0gICAgICAgIHR4ID0gZy50eCgpCi0gICAgICAgIGd0eCA9IHR4LmJlZ2luKCkKLSAgICAgICAgIyBzZXNzaW9uIGNyZWF0ZWQgZm9yIG5ldyB0cmFuc2FjdGlvbgotICAgICAgICBhc3NlcnQgMSA9PSBsZW4ocmVtb3RlX3RyYW5zYWN0aW9uX2Nvbm5lY3Rpb24uX0RyaXZlclJlbW90ZUNvbm5lY3Rpb25fX3NwYXduZWRfc2Vzc2lvbnMpCi0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5pdGVyYXRlKCkKLSAgICAgICAgdHgucm9sbGJhY2soKQotICAgICAgICAjIGFmdGVyIGNsb3NpbmcgdHJhbnNhY3Rpb24gd2Ugc2hvdWxkIHJlbW92ZSBzcGF3bmVkX3Nlc3Npb24KLSAgICAgICAgYXNzZXJ0IDAgPT0gbGVuKHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uLl9Ecml2ZXJSZW1vdGVDb25uZWN0aW9uX19zcGF3bmVkX3Nlc3Npb25zKQotCi0gICAgZGVmIHRlc3RfdHhfb25fZ3JhcGhfd2l0aG91dF90eF9zdXBwb3J0KHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uKToKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUocmVtb3RlX2Nvbm5lY3Rpb24pCi0gICAgICAgIHR4ID0gZy50eCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgdHggaXMganVzdCBhIHNlc3Npb24sIHNvIG5vIGV4Y2VwdGlvbiBoZXJlCi0gICAgICAgICAgICBndHggPSB0eC5iZWdpbigpCi0gICAgICAgICAgICAjIHJlYWQgb3BlcmF0aW9uIGlzIG9rIGZvciBzZXNzaW9uZWQgY29ubmVjdGlvbgotICAgICAgICAgICAgYXNzZXJ0IDYgPT0gZ3R4LlYoKS5jb3VudCgpLm5leHQoKQotICAgICAgICAgICAgdHguY29tbWl0KCkuYWxsKCkucmVzdWx0KCkKLSAgICAgICAgICAgIGFzc2VydCBGYWxzZQotICAgICAgICBleGNlcHQgR3JlbWxpblNlcnZlckVycm9yIGFzIGV4OgotICAgICAgICAgICAgYXNzZXJ0ICI1MDA6IEdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zIiA9PSBzdHIoZXgpCi0KLSAgICBkZWYgdGVzdF90eF9jb21taXRfb25fZ3JhcGhfd2l0aG91dF90eF9zdXBwb3J0KHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uKToKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUocmVtb3RlX2Nvbm5lY3Rpb24pCi0gICAgICAgIHR4ID0gZy50eCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHR4LmNvbW1pdCgpCi0gICAgICAgICAgICBhc3NlcnQgRmFsc2UKLSAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKLSAgICAgICAgICAgIGFzc2VydCAiQ2Fubm90IGNvbW1pdCBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQuIiA9PSBzdHIoZXgpCi0KLSAgICBkZWYgdGVzdF90eF9yb2xsYmFja19vbl9ncmFwaF93aXRob3V0X3R4X3N1cHBvcnQoc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb24pOgotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShyZW1vdGVfY29ubmVjdGlvbikKLSAgICAgICAgdHggPSBnLnR4KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdHgucm9sbGJhY2soKQotICAgICAgICAgICAgYXNzZXJ0IEZhbHNlCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6Ci0gICAgICAgICAgICBhc3NlcnQgIkNhbm5vdCByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IHN0YXJ0ZWQuIiA9PSBzdHIoZXgpCiAKICAgICBkZWYgdGVzdF9jbG9uZShzZWxmLCByZW1vdGVfY29ubmVjdGlvbik6CiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbikKICAgICAgICAgdCA9IGcuVigpLmJvdGgoKQotICAgICAgICBhc3NlcnQgMTIgPT0gbGVuKHQudG9MaXN0KCkpCisgICAgICAgIGFzc2VydCAxMiA9PSBsZW4odC50b19saXN0KCkpCiAgICAgICAgIGFzc2VydCA1ID09IHQuY2xvbmUoKS5saW1pdCg1KS5jb3VudCgpLm5leHQoKQogICAgICAgICBhc3NlcnQgMTAgPT0gdC5jbG9uZSgpLmxpbWl0KDEwKS5jb3VudCgpLm5leHQoKQogCisgICAgZGVmIHRlc3RfcmVjZWl2ZV9lcnJvcihzZWxmLCBpbnZhbGlkX2FsaWFzX3JlbW90ZV9jb25uZWN0aW9uKToKKyAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKGludmFsaWRfYWxpYXNfcmVtb3RlX2Nvbm5lY3Rpb24pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZy5WKCkubmV4dCgpCisgICAgICAgICAgICBhc3NlcnQgRmFsc2UKKyAgICAgICAgZXhjZXB0IEdyZW1saW5TZXJ2ZXJFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBhc3NlcnQgZXJyLnN0YXR1c19jb2RlID09IDQwMAorICAgICAgICAgICAgYXNzZXJ0ICgnQ291bGQgbm90IGFsaWFzIFtnXSB0byBbZG9lc19ub3RfZXhpc3RdIGFzIFtkb2VzX25vdF9leGlzdF0gbm90IGluIHRoZSBHcmFwaCBvciBUcmF2ZXJzYWxTb3VyY2UgJworICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsIGJpbmRpbmdzJykgaW4gZXJyLnN0YXR1c19tZXNzYWdlCisKICAgICBkZWYgdGVzdF9hdXRoZW50aWNhdGVkKHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uX2F1dGhlbnRpY2F0ZWQpOgogICAgICAgICBzdGF0aWNzLmxvYWRfc3RhdGljcyhnbG9iYWxzKCkpCiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl9hdXRoZW50aWNhdGVkKQogCi0gICAgICAgIGFzc2VydCBsb25nKDYpID09IGcuVigpLmNvdW50KCkudG9MaXN0KClbMF0KKyAgICAgICAgYXNzZXJ0IGxvbmcoNikgPT0gZy5WKCkuY291bnQoKS50b19saXN0KClbMF0KIAotICAgIGRlZiB0ZXN0X3Nob3VsZF9wcm9wYWdhdGVfZW5hYmxlX2NvbXByZXNzaW9uKHNlbGYpOgotICAgICAgICAjIFVzZSBDb21wcmVzc2lvbgotICAgICAgICBkcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwsIGVuYWJsZV9jb21wcmVzc2lvbj1UcnVlKQotCi0gICAgICAgIGFpb2h0dHBfa3dhcmdzID0gZHJjLl9jbGllbnQuX3RyYW5zcG9ydF9mYWN0b3J5KCkuX2Fpb2h0dHBfa3dhcmdzCi0gICAgICAgIGFzc2VydCBhaW9odHRwX2t3YXJncy5nZXQoImNvbXByZXNzIikgIT0gMAotCi0gICAgICAgICMgRGlzYWJsZSBDb21wcmVzc2lvbgotICAgICAgICBkcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwsIGVuYWJsZV9jb21wcmVzc2lvbj1GYWxzZSkKLQotICAgICAgICBhaW9odHRwX2t3YXJncyA9IGRyYy5fY2xpZW50Ll90cmFuc3BvcnRfZmFjdG9yeSgpLl9haW9odHRwX2t3YXJncwotICAgICAgICBhc3NlcnQgYWlvaHR0cF9rd2FyZ3MuZ2V0KCJjb21wcmVzcyIpIGlzIE5vbmUgb3IgYWlvaHR0cF9rd2FyZ3MuZ2V0KCJjb21wcmVzcyIpID09IDAKLQotICAgICAgICAjIERlZmF1bHQgKG5vIGNvbXByZXNzaW9uKQotICAgICAgICBkcmMgPSBEcml2ZXJSZW1vdGVDb25uZWN0aW9uKGFub255bW91c191cmwpCi0KLSAgICAgICAgYWlvaHR0cF9rd2FyZ3MgPSBkcmMuX2NsaWVudC5fdHJhbnNwb3J0X2ZhY3RvcnkoKS5fYWlvaHR0cF9rd2FyZ3MKLSAgICAgICAgYXNzZXJ0IGFpb2h0dHBfa3dhcmdzLmdldCgiY29tcHJlc3MiKSBpcyBOb25lIG9yIGFpb2h0dHBfa3dhcmdzLmdldCgiY29tcHJlc3MiKSA9PSAwCisgICAgZGVmIHRlc3RfZm9yd2FyZHNfaW50ZXJjZXB0b3Jfc2VyaWFsaXplcnMoc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb25fd2l0aF9pbnRlcmNlcHRvcik6CisgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl93aXRoX2ludGVyY2VwdG9yKQorICAgICAgICByZXN1bHQgPSBnLmluamVjdCgxKS5uZXh0KCkKKyAgICAgICAgYXNzZXJ0IDIgPT0gcmVzdWx0ICMgaW50ZXJjZXB0b3IgY2hhbmdlcyByZXF1ZXN0IHRvIGcuaW5qZWN0KDIpCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uX2h0dHAucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uX2h0dHAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNGQ3OTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbl9odHRwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLSMKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLWltcG9ydCBvcwotCi1mcm9tIGdyZW1saW5fcHl0aG9uIGltcG9ydCBzdGF0aWNzCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0IGxvbmcKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFRyYXZlcnNlcgotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgVHJhdmVyc2FsU3RyYXRlZ3kKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IEJpbmRpbmdzCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBQLCBPcmRlciwgVAotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLmdyYXBoX3RyYXZlcnNhbCBpbXBvcnQgX18KLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5hbm9ueW1vdXNfdHJhdmVyc2FsIGltcG9ydCB0cmF2ZXJzYWwKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBWZXJ0ZXgKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5zdHJhdGVnaWVzIGltcG9ydCBTdWJncmFwaFN0cmF0ZWd5LCBTZWVkU3RyYXRlZ3kKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLnV0aWwgaW1wb3J0IEhhc2hhYmxlRGljdAotZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuc2VyaWFsaXplciBpbXBvcnQgR3JhcGhTT05TZXJpYWxpemVyc1YyZDAKLWZyb20gZ3JlbWxpbl9weXRob24uZHJpdmVyLnByb3RvY29sIGltcG9ydCBHcmVtbGluU2VydmVyRXJyb3IKLQotZ3JlbWxpbl9zZXJ2ZXJfdXJsX2h0dHAgPSBvcy5lbnZpcm9uLmdldCgnR1JFTUxJTl9TRVJWRVJfVVJMX0hUVFAnLCAnaHR0cDovL2xvY2FsaG9zdDp7fS8nKQotdGVzdF9ub19hdXRoX2h0dHBfdXJsID0gZ3JlbWxpbl9zZXJ2ZXJfdXJsX2h0dHAuZm9ybWF0KDQ1OTQwKQotCi0KLWNsYXNzIFRlc3REcml2ZXJSZW1vdGVDb25uZWN0aW9uSHR0cChvYmplY3QpOgotICAgIGRlZiB0ZXN0X3RyYXZlcnNhbHMoc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb25faHR0cCk6Ci0gICAgICAgIHN0YXRpY3MubG9hZF9zdGF0aWNzKGdsb2JhbHMoKSkKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uX2h0dHApCi0KLSAgICAgICAgYXNzZXJ0IGxvbmcoNikgPT0gZy5WKCkuY291bnQoKS50b0xpc3QoKVswXQotICAgICAgICAjICMKLSAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBnLlYoMSkubmV4dCgpCi0gICAgICAgIGFzc2VydCBWZXJ0ZXgoMSkgPT0gZy5WKFZlcnRleCgxKSkubmV4dCgpCi0gICAgICAgIGFzc2VydCAxID09IGcuVigxKS5pZF8oKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IFRyYXZlcnNlcihWZXJ0ZXgoMSkpID09IGcuVigxKS5uZXh0VHJhdmVyc2VyKCkKLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGcuVigxKS50b0xpc3QoKSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZy5WKDEpLnRvTGlzdCgpLCBsaXN0KQotICAgICAgICByZXN1bHRzID0gZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5uYW1lCi0gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzKQotICAgICAgICBhc3NlcnQgImxvcCIgaW4gcmVzdWx0cwotICAgICAgICBhc3NlcnQgInJpcHBsZSIgaW4gcmVzdWx0cwotICAgICAgICAjICMKLSAgICAgICAgYXNzZXJ0IDEwID09IGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpWzA6MTBdLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAxID09IGcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpWzA6MV0uY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDAgPT0gZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSlbMDowXS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgNCA9PSBnLlYoKVsyOl0uY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDIgPT0gZy5WKClbOjJdLmNvdW50KCkubmV4dCgpCi0gICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy53aXRoU2lkZUVmZmVjdCgnYScsIFsnam9zaCcsICdwZXRlciddKS5WKDEpLm91dCgnY3JlYXRlZCcpLmluXygnY3JlYXRlZCcpLnZhbHVlcygnbmFtZScpLndoZXJlKAotICAgICAgICAgICAgUC53aXRoaW4oJ2EnKSkudG9MaXN0KCkKLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHJlc3VsdHMpCi0gICAgICAgIGFzc2VydCAnam9zaCcgaW4gcmVzdWx0cwotICAgICAgICBhc3NlcnQgJ3BldGVyJyBpbiByZXN1bHRzCi0gICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy5WKCkub3V0KCkucHJvZmlsZSgpLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCAxID09IGxlbihyZXN1bHRzKQotICAgICAgICBhc3NlcnQgJ21ldHJpY3MnIGluIHJlc3VsdHNbMF0KLSAgICAgICAgYXNzZXJ0ICdkdXInIGluIHJlc3VsdHNbMF0KLSAgICAgICAgIyAjCi0gICAgICAgIHJlc3VsdHMgPSBnLlYoKS5oYXMoJ25hbWUnLCAncGV0ZXInKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKS5zZWxlY3QoJ2EnLCAnYicpLmJ5KAotICAgICAgICAgICAgX18udmFsdWVNYXAoKSkudG9MaXN0KCkKLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKHJlc3VsdHMpCi0gICAgICAgIGFzc2VydCAncGV0ZXInID09IHJlc3VsdHNbMF1bJ2EnXVsnbmFtZSddWzBdCi0gICAgICAgIGFzc2VydCAzNSA9PSByZXN1bHRzWzBdWydhJ11bJ2FnZSddWzBdCi0gICAgICAgIGFzc2VydCAnbG9wJyA9PSByZXN1bHRzWzBdWydiJ11bJ25hbWUnXVswXQotICAgICAgICBhc3NlcnQgJ2phdmEnID09IHJlc3VsdHNbMF1bJ2InXVsnbGFuZyddWzBdCi0gICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzWzBdWydhJ10pCi0gICAgICAgIGFzc2VydCAyID09IGxlbihyZXN1bHRzWzBdWydiJ10pCi0gICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy5WKDEpLmluamVjdChnLlYoMikubmV4dCgpKS52YWx1ZXMoJ25hbWUnKS50b0xpc3QoKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4ocmVzdWx0cykKLSAgICAgICAgYXNzZXJ0ICdtYXJrbycgaW4gcmVzdWx0cwotICAgICAgICBhc3NlcnQgJ3ZhZGFzJyBpbiByZXN1bHRzCi0gICAgICAgICMgIwotICAgICAgICByZXN1bHRzID0gZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLm1hcCgKLSAgICAgICAgICAgIGxhbWJkYTogKCJpdC5nZXQoKS52YWx1ZSgnbmFtZScpIiwgImdyZW1saW4tZ3Jvb3Z5IikpLnRvTGlzdCgpCi0gICAgICAgIGFzc2VydCAxID09IGxlbihyZXN1bHRzKQotICAgICAgICBhc3NlcnQgJ21hcmtvJyBpbiByZXN1bHRzCi0gICAgICAgICMgIwotICAgICAgICAjIHRoaXMgdGVzdCBqdXN0IHZhbGlkYXRlcyB0aGF0IHRoZSB1bmRlcnNjb3JlZCB2ZXJzaW9ucyBvZiBzdGVwcyBjb25mbGljdGluZyB3aXRoIEdyZW1saW4gd29yawotICAgICAgICAjIHByb3Blcmx5IGFuZCBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBvbGQgc3RlcHMgYXJlIHJlbW92ZWQgLSBUSU5LRVJQT1AtMjI3MgotICAgICAgICByZXN1bHRzID0gZy5WKCkuZmlsdGVyXyhfXy52YWx1ZXMoJ2FnZScpLnN1bV8oKS5hbmRfKAotICAgICAgICAgICAgX18ubWF4XygpLmlzXyhQLmd0KDApKSwgX18ubWluXygpLmlzXyhQLmd0KDApKSkpLnJhbmdlXygwLCAxKS5pZF8oKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDEgPT0gcmVzdWx0cwotICAgICAgICAjICMKLSAgICAgICAgIyB0ZXN0IGJpbmRpbmcgaW4gUAotICAgICAgICByZXN1bHRzID0gZy5WKCkuaGFzKCdwZXJzb24nLCAnYWdlJywgQmluZGluZ3Mub2YoJ3gnLCBQLmx0KDMwKSkpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAyID09IHJlc3VsdHMKLSAgICAgICAgIyAjCi0gICAgICAgICMgdGVzdCBkaWN0IGtleXMgd2hpY2ggY2FuIG9ubHkgd29yayBvbiBHcmFwaEJpbmFyeSBhbmQgR3JhcGhTT04zIHdoaWNoIGluY2x1ZGUgc3BlY2lmaWMgc2VyaWFsaXphdGlvbgotICAgICAgICAjIHR5cGVzIGZvciBkaWN0Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbW90ZV9jb25uZWN0aW9uX2h0dHAuX2NsaWVudC5fbWVzc2FnZV9zZXJpYWxpemVyLCBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCk6Ci0gICAgICAgICAgICByZXN1bHRzID0gZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmVsZW1lbnRNYXAoIm5hbWUiKS5ncm91cENvdW50KCkubmV4dCgpCi0gICAgICAgICAgICBhc3NlcnQge0hhc2hhYmxlRGljdC5vZih7VC5pZDogMSwgVC5sYWJlbDogJ3BlcnNvbicsICduYW1lJzogJ21hcmtvJ30pOiAxfSA9PSByZXN1bHRzCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbW90ZV9jb25uZWN0aW9uX2h0dHAuX2NsaWVudC5fbWVzc2FnZV9zZXJpYWxpemVyLCBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCk6Ci0gICAgICAgICAgICByZXN1bHRzID0gZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmJvdGgoJ2tub3dzJykuZ3JvdXBDb3VudCgpLmJ5KAotICAgICAgICAgICAgICAgIF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkubmV4dCgpCi0gICAgICAgICAgICBhc3NlcnQge3R1cGxlKFsndmFkYXMnXSk6IDEsIHR1cGxlKFsnam9zaCddKTogMX0gPT0gcmVzdWx0cwotCi0gICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uX2h0dHApOgotICAgICAgICBzdGF0aWNzLmxvYWRfc3RhdGljcyhnbG9iYWxzKCkpCi0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl9odHRwKQotCi0gICAgICAgIHQgPSBnLlYoKS5jb3VudCgpCi0gICAgICAgIGFzc2VydCB0Lmhhc05leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IHQuaGFzTmV4dCgpCi0gICAgICAgIGFzc2VydCB0Lmhhc05leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IDYgPT0gdC5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IG5vdCAodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QgKHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90ICh0Lmhhc05leHQoKSkKLSAgICAgICAgYXNzZXJ0IG5vdCAodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QgKHQuaGFzTmV4dCgpKQotCi0gICAgICAgIHQgPSBnLlYoKS5oYXMoJ25hbWUnLCBQLndpdGhpbignbWFya28nLCAncGV0ZXInKSkudmFsdWVzKCduYW1lJykub3JkZXIoKQotICAgICAgICBhc3NlcnQgIm1hcmtvIiA9PSB0Lm5leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IHQuaGFzTmV4dCgpCi0gICAgICAgIGFzc2VydCB0Lmhhc05leHQoKQotICAgICAgICBhc3NlcnQgdC5oYXNOZXh0KCkKLSAgICAgICAgYXNzZXJ0IHQuaGFzTmV4dCgpCi0gICAgICAgIGFzc2VydCAicGV0ZXIiID09IHQubmV4dCgpCi0gICAgICAgIGFzc2VydCBub3QgKHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90ICh0Lmhhc05leHQoKSkKLSAgICAgICAgYXNzZXJ0IG5vdCAodC5oYXNOZXh0KCkpCi0gICAgICAgIGFzc2VydCBub3QgKHQuaGFzTmV4dCgpKQotICAgICAgICBhc3NlcnQgbm90ICh0Lmhhc05leHQoKSkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0Lm5leHQoKQotICAgICAgICAgICAgYXNzZXJ0IEZhbHNlCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYXNzZXJ0IFRydWUKLQotICAgIGRlZiB0ZXN0X2xhbWJkYV90cmF2ZXJzYWxzKHNlbGYsIHJlbW90ZV9jb25uZWN0aW9uX2h0dHApOgotICAgICAgICBzdGF0aWNzLmxvYWRfc3RhdGljcyhnbG9iYWxzKCkpCi0gICAgICAgIGFzc2VydCAicmVtb3RlY29ubmVjdGlvblt7fSxnbW9kZXJuXSIuZm9ybWF0KHRlc3Rfbm9fYXV0aF9odHRwX3VybCkgPT0gc3RyKHJlbW90ZV9jb25uZWN0aW9uX2h0dHApCi0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl9odHRwKQotCi0gICAgICAgIGFzc2VydCAyNC4wID09IGcud2l0aFNhY2soMS4wLCBsYW1iZGE6ICgieCAtPiB4ICsgMSIsICJncmVtbGluLWdyb292eSIpKS5WKCkuYm90aCgpLnNhY2soKS5zdW1fKCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAyNC4wID09IGcud2l0aFNhY2sobGFtYmRhOiAoInsxLjBkfSIsICJncmVtbGluLWdyb292eSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogKCJ4IC0+IHggKyAxIiwgImdyZW1saW4tZ3Jvb3Z5IikpLlYoKS5ib3RoKCkuc2FjaygpLnN1bV8oKS5uZXh0KCkKLQotICAgICAgICBhc3NlcnQgNDguMCA9PSBnLndpdGhTYWNrKDEuMCwgbGFtYmRhOiAoIngsIHkgLT4gIHggKyB5ICsgMSIsICJncmVtbGluLWdyb292eSIpKS5WKCkuYm90aCgpLnNhY2soKS5zdW1fKCkubmV4dCgpCi0gICAgICAgIGFzc2VydCA0OC4wID09IGcud2l0aFNhY2sobGFtYmRhOiAoInsxLjBkfSIsICJncmVtbGluLWdyb292eSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogKCJ4LCB5IC0+ICB4ICsgeSArIDEiLCAiZ3JlbWxpbi1ncm9vdnkiKSkuVigpLmJvdGgoKS5zYWNrKCkuc3VtXygpLm5leHQoKQotCi0gICAgZGVmIHRlc3Rfc3RyYXRlZ2llcyhzZWxmLCByZW1vdGVfY29ubmVjdGlvbl9odHRwKToKLSAgICAgICAgc3RhdGljcy5sb2FkX3N0YXRpY3MoZ2xvYmFscygpKQotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb25faHR0cCkuIFwKLSAgICAgICAgICAgIHdpdGhTdHJhdGVnaWVzKFRyYXZlcnNhbFN0cmF0ZWd5KCJTdWJncmFwaFN0cmF0ZWd5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsidmVydGljZXMiOiBfXy5oYXNMYWJlbCgicGVyc29uIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVkZ2VzIjogX18uaGFzTGFiZWwoImNyZWF0ZWQiKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlN1YmdyYXBoU3RyYXRlZ3kiKSkKLSAgICAgICAgYXNzZXJ0IDQgPT0gZy5WKCkuY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDAgPT0gZy5FKCkuY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDEgPT0gZy5WKCkubGFiZWwoKS5kZWR1cCgpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCA0ID09IGcuVigpLmZpbHRlcl8obGFtYmRhOiAoInggLT4gdHJ1ZSIsICJncmVtbGluLWdyb292eSIpKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgInBlcnNvbiIgPT0gZy5WKCkubGFiZWwoKS5kZWR1cCgpLm5leHQoKQotICAgICAgICAjCi0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl9odHRwKS4gXAotICAgICAgICAgICAgd2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXNMYWJlbCgicGVyc29uIiksIGVkZ2VzPV9fLmhhc0xhYmVsKCJjcmVhdGVkIikpKQotICAgICAgICBhc3NlcnQgNCA9PSBnLlYoKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgMCA9PSBnLkUoKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgMSA9PSBnLlYoKS5sYWJlbCgpLmRlZHVwKCkuY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IGcuVigpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkKLSAgICAgICAgIwotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb25faHR0cCkuIFwKLSAgICAgICAgICAgIHdpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18uaGFzTGFiZWwoImNyZWF0ZWQiKSkpCi0gICAgICAgIGFzc2VydCA2ID09IGcuVigpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCA0ID09IGcuRSgpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAxID09IGcuRSgpLmxhYmVsKCkuZGVkdXAoKS5jb3VudCgpLm5leHQoKQotICAgICAgICBhc3NlcnQgImNyZWF0ZWQiID09IGcuRSgpLmxhYmVsKCkuZGVkdXAoKS5uZXh0KCkKLSAgICAgICAgIwotICAgICAgICBnID0gZy53aXRob3V0U3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KS4gXAotICAgICAgICAgICAgd2l0aENvbXB1dGVyKHZlcnRpY2VzPV9fLmhhcygibmFtZSIsICJtYXJrbyIpLCBlZGdlcz1fXy5saW1pdCgwKSkKLSAgICAgICAgYXNzZXJ0IDEgPT0gZy5WKCkuY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0IDAgPT0gZy5FKCkuY291bnQoKS5uZXh0KCkKLSAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IGcuVigpLmxhYmVsKCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAibWFya28iID09IGcuVigpLm5hbWUubmV4dCgpCi0gICAgICAgICMKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uX2h0dHApLndpdGhDb21wdXRlcigpCi0gICAgICAgIGFzc2VydCA2ID09IGcuVigpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCA2ID09IGcuRSgpLmNvdW50KCkubmV4dCgpCi0gICAgICAgICMKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uX2h0dHApLndpdGhTdHJhdGVnaWVzKFNlZWRTdHJhdGVneSgxMjM0NSkpCi0gICAgICAgIHNodWZmbGVkUmVzdWx0ID0gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS50b0xpc3QoKQotICAgICAgICBhc3NlcnQgc2h1ZmZsZWRSZXN1bHQgPT0gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS50b0xpc3QoKQotICAgICAgICBhc3NlcnQgc2h1ZmZsZWRSZXN1bHQgPT0gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS50b0xpc3QoKQotICAgICAgICBhc3NlcnQgc2h1ZmZsZWRSZXN1bHQgPT0gZy5WKCkudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS50b0xpc3QoKQotCi0gICAgZGVmIHRlc3RfY2xvbmUoc2VsZiwgcmVtb3RlX2Nvbm5lY3Rpb25faHR0cCk6Ci0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl9odHRwKQotICAgICAgICB0ID0gZy5WKCkuYm90aCgpCi0gICAgICAgIGFzc2VydCAxMiA9PSBsZW4odC50b0xpc3QoKSkKLSAgICAgICAgYXNzZXJ0IDUgPT0gdC5jbG9uZSgpLmxpbWl0KDUpLmNvdW50KCkubmV4dCgpCi0gICAgICAgIGFzc2VydCAxMCA9PSB0LmNsb25lKCkubGltaXQoMTApLmNvdW50KCkubmV4dCgpCi0KLSAgICBkZWYgdGVzdF9yZWNlaXZlX2Vycm9yKHNlbGYsIGludmFsaWRfYWxpYXNfcmVtb3RlX2Nvbm5lY3Rpb25faHR0cCk6Ci0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGludmFsaWRfYWxpYXNfcmVtb3RlX2Nvbm5lY3Rpb25faHR0cCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBnLlYoKS5uZXh0KCkKLSAgICAgICAgICAgIGFzc2VydCBGYWxzZQotICAgICAgICBleGNlcHQgR3JlbWxpblNlcnZlckVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIGFzc2VydCBlcnIuc3RhdHVzX2NvZGUgPT0gNDAwCi0gICAgICAgICAgICBhc3NlcnQgJ0NvdWxkIG5vdCByZWJpbmQnIGluIGVyci5zdGF0dXNfbWVzc2FnZQotCi0gICAgIiIiCi0gICAgIyBUaGUgV3NBbmRIdHRwQ2hhbm5lbGl6ZXIgc29tZWhvdyBkb2VzIG5vdCBkaXN0aW5ndWlzaCB0aGUgc3NsIGhhbmRsZXJzIHNvIGF1dGhlbnRpY2F0ZWQgaHR0cHMgcmVtb3RlIGNvbm5lY3Rpb24KLSAgICAjIG9ubHkgd29yayB3aXRoIEh0dHBDaGFubmVsaXplciB0aGF0IGlzIGN1cnJlbnRseSBub3QgaW4gdGhlIHRlc3Rpbmcgc2V0IHVwLCB0aHVzIHRoaXMgaXMgY29tbWVudGVkIG91dCBmb3Igbm93Ci0gICAgCi0gICAgZGVmIHRlc3RfYXV0aGVudGljYXRlZChzZWxmLCByZW1vdGVfY29ubmVjdGlvbl9odHRwX2F1dGhlbnRpY2F0ZWQpOgotICAgICAgICBzdGF0aWNzLmxvYWRfc3RhdGljcyhnbG9iYWxzKCkpCi0gICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbl9odHRwX2F1dGhlbnRpY2F0ZWQpCi0KLSAgICAgICAgYXNzZXJ0IGxvbmcoNikgPT0gZy5WKCkuY291bnQoKS50b0xpc3QoKVswXQotICAgICIiIgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbl90aHJlYWRlZC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9kcml2ZXJfcmVtb3RlX2Nvbm5lY3Rpb25fdGhyZWFkZWQucHkKaW5kZXggOWUxYjE5MS4uODk4ODcyZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X2RyaXZlcl9yZW1vdGVfY29ubmVjdGlvbl90aHJlYWRlZC5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3RfZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uX3RocmVhZGVkLnB5CkBAIC0yOCw5ICsyOCwxMCBAQAogCiBfX2F1dGhvcl9fID0gJ0RhdmlkIE0uIEJyb3duIChkYXZlYnNob3dAZ21haWwuY29tKScKIAotZ3JlbWxpbl9zZXJ2ZXJfdXJsID0gb3MuZW52aXJvbi5nZXQoJ0dSRU1MSU5fU0VSVkVSX1VSTCcsICd3czovL2xvY2FsaG9zdDp7fS9ncmVtbGluJykKK2dyZW1saW5fc2VydmVyX3VybCA9IG9zLmVudmlyb24uZ2V0KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnaHR0cDovL2xvY2FsaG9zdDp7fS9ncmVtbGluJykKIHRlc3Rfbm9fYXV0aF91cmwgPSBncmVtbGluX3NlcnZlcl91cmwuZm9ybWF0KDQ1OTQwKQogCisKIGRlZiB0ZXN0X2Nvbm5zX2luX3RocmVhZHMocmVtb3RlX2Nvbm5lY3Rpb24pOgogICAgIHEgPSBxdWV1ZS5RdWV1ZSgpCiAgICAgY2hpbGQgPSBUaHJlYWQodGFyZ2V0PV9leGVjdXRvciwgYXJncz0ocSwgTm9uZSkpCkBAIC02Nyw3ICs2OCw3IEBACiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhjb25uKQogICAgICAgICBmdXR1cmUgPSBnLlYoKS5wcm9taXNlKCkKICAgICAgICAgdCA9IGZ1dHVyZS5yZXN1bHQoKQotICAgICAgICBhc3NlcnQgbGVuKHQudG9MaXN0KCkpID09IDYKKyAgICAgICAgYXNzZXJ0IGxlbih0LnRvX2xpc3QoKSkgPT0gNgogICAgIGV4Y2VwdDoKICAgICAgICAgcS5wdXQoc3lzLmV4Y19pbmZvKClbMF0pCiAgICAgZWxzZToKQEAgLTc5LDkgKzgwLDkgQEAKIAogZGVmIGhhbmRsZV9yZXF1ZXN0KCk6CiAgICAgdHJ5OgotICAgICAgICByZW1vdGVfY29ubmVjdGlvbiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24odGVzdF9ub19hdXRoX3VybCwgImciKQorICAgICAgICByZW1vdGVfY29ubmVjdGlvbiA9IERyaXZlclJlbW90ZUNvbm5lY3Rpb24odGVzdF9ub19hdXRoX3VybCwgImdtb2Rlcm4iKQogICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCi0gICAgICAgIGcuVigpLmxpbWl0KDEpLnRvTGlzdCgpCisgICAgICAgIGcuVigpLmxpbWl0KDEpLnRvX2xpc3QoKQogICAgICAgICByZW1vdGVfY29ubmVjdGlvbi5jbG9zZSgpCiAgICAgICAgIHJldHVybiBUcnVlCiAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9wcm90b2NvbC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9wcm90b2NvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjRlZjgzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X3Byb3RvY29sLnB5CkBAIC0wLDAgKzEsMTMxIEBACisjCisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCitmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5wcm90b2NvbCBpbXBvcnQgR3JlbWxpblNlcnZlckhUVFBQcm90b2NvbAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuc2VyaWFsaXplciBpbXBvcnQgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0Citmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci50cmFuc3BvcnQgaW1wb3J0IEFic3RyYWN0QmFzZVRyYW5zcG9ydAorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdE1lc3NhZ2UKKworY2xhc3MgTW9ja0hUVFBUcmFuc3BvcnQoQWJzdHJhY3RCYXNlVHJhbnNwb3J0KToKKyAgICBkZWYgY29ubmVjdChzZWxmLCB1cmwsIGhlYWRlcnM9Tm9uZSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB3cml0ZShzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9IG1lc3NhZ2UKKworICAgIGRlZiBnZXRfd3JpdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tZXNzYWdlCisKKyAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICBwYXNzCisKK2RlZiB0ZXN0X25vbmVfcmVxdWVzdF9zZXJpYWxpemVyX3ZhbGlkKCk6CisgICAgcHJvdG9jb2wgPSBHcmVtbGluU2VydmVySFRUUFByb3RvY29sKE5vbmUsIEdyYXBoQmluYXJ5U2VyaWFsaXplcnNWNCgpLCBpbnRlcmNlcHRvcnM9Tm9uZSkKKyAgICBtb2NrX3RyYW5zcG9ydCA9IE1vY2tIVFRQVHJhbnNwb3J0KCkKKyAgICBwcm90b2NvbC5jb25uZWN0aW9uX21hZGUobW9ja190cmFuc3BvcnQpCisgICAgCisgICAgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlKGZpZWxkcz17fSwgZ3JlbWxpbj0iZy5WKCkiKQorICAgIHByb3RvY29sLndyaXRlKG1lc3NhZ2UpCisgICAgd3JpdHRlbiA9IG1vY2tfdHJhbnNwb3J0LmdldF93cml0ZSgpCisKKyAgICBhc3NlcnQgd3JpdHRlblsicGF5bG9hZCJdID09IG1lc3NhZ2UKKyAgICBhc3NlcnQgJ2NvbnRlbnQtdHlwZScgbm90IGluIHdyaXR0ZW5bImhlYWRlcnMiXQorCitkZWYgdGVzdF9ncmFwaGJpbmFyeV9yZXF1ZXN0X3NlcmlhbGl6ZXJfc2VyaWFsaXplc19wYXlsb2FkKCk6CisgICAgZ2Jfc2VyID0gR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCkKKyAgICBwcm90b2NvbCA9IEdyZW1saW5TZXJ2ZXJIVFRQUHJvdG9jb2woZ2Jfc2VyLCBnYl9zZXIpCisgICAgbW9ja190cmFuc3BvcnQgPSBNb2NrSFRUUFRyYW5zcG9ydCgpCisgICAgcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKG1vY2tfdHJhbnNwb3J0KQorICAgIAorICAgIG1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZShmaWVsZHM9e30sIGdyZW1saW49ImcuVigpIikKKyAgICBwcm90b2NvbC53cml0ZShtZXNzYWdlKQorICAgIHdyaXR0ZW4gPSBtb2NrX3RyYW5zcG9ydC5nZXRfd3JpdGUoKQorCisgICAgYXNzZXJ0IHdyaXR0ZW5bInBheWxvYWQiXSA9PSBnYl9zZXIuc2VyaWFsaXplX21lc3NhZ2UobWVzc2FnZSkKKyAgICBhc3NlcnQgd3JpdHRlblsiaGVhZGVycyJdWydjb250ZW50LXR5cGUnXSA9PSBzdHIoZ2Jfc2VyLnZlcnNpb24sIGVuY29kaW5nPSd1dGYtOCcpCisKK2RlZiB0ZXN0X2ludGVyY2VwdG9yX2FsbG93c190dXBsZV9hbmRfbGlzdCgpOgorICAgIHRyeToKKyAgICAgICAgdHVwbGUgPSBHcmVtbGluU2VydmVySFRUUFByb3RvY29sKE5vbmUsIE5vbmUsIGludGVyY2VwdG9ycz0obGFtYmRhIHJlcTogcmVxKSkKKyAgICAgICAgbGlzdCA9IEdyZW1saW5TZXJ2ZXJIVFRQUHJvdG9jb2woTm9uZSwgTm9uZSwgaW50ZXJjZXB0b3JzPVtsYW1iZGEgcmVxOiByZXFdKQorICAgICAgICBhc3NlcnQgVHJ1ZQorICAgIGV4Y2VwdDoKKyAgICAgICAgYXNzZXJ0IEZhbHNlCisKK2RlZiB0ZXN0X2ludGVyY2VwdG9yX2RvZXNudF9hbGxvd19hbnlfdHlwZSgpOgorICAgIHRyeToKKyAgICAgICAgcHJvdG9jb2wgPSBHcmVtbGluU2VydmVySFRUUFByb3RvY29sKE5vbmUsIE5vbmUsIGludGVyY2VwdG9ycz0xKQorICAgICAgICBhc3NlcnQgRmFsc2UKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBhc3NlcnQgVHJ1ZQorCitkZWYgdGVzdF9zaW5nbGVfaW50ZXJjZXB0b3JfcnVucygpOgorICAgIGNoYW5nZWRfcmVxID0gUmVxdWVzdE1lc3NhZ2UoZmllbGRzPXt9LCBncmVtbGluPSJjaGFuZ2VkIikKKyAgICBkZWYgaW50ZXJjZXB0b3IocmVxdWVzdCk6CisgICAgICAgIHJlcXVlc3RbJ3BheWxvYWQnXSA9IGNoYW5nZWRfcmVxCisgICAgICAgIHJldHVybiByZXF1ZXN0CisKKyAgICBwcm90b2NvbCA9IEdyZW1saW5TZXJ2ZXJIVFRQUHJvdG9jb2woTm9uZSwgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycz1pbnRlcmNlcHRvcikKKyAgICBtb2NrX3RyYW5zcG9ydCA9IE1vY2tIVFRQVHJhbnNwb3J0KCkKKyAgICBwcm90b2NvbC5jb25uZWN0aW9uX21hZGUobW9ja190cmFuc3BvcnQpCisgICAgCisgICAgbWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlKGZpZWxkcz17fSwgZ3JlbWxpbj0iZy5WKCkiKQorICAgIHByb3RvY29sLndyaXRlKG1lc3NhZ2UpCisgICAgd3JpdHRlbiA9IG1vY2tfdHJhbnNwb3J0LmdldF93cml0ZSgpCisKKyAgICBhc3NlcnQgd3JpdHRlblsncGF5bG9hZCddID09IGNoYW5nZWRfcmVxCisKK2RlZiB0ZXN0X2ludGVyY2VwdG9yX3dvcmtzX3dpdGhfcmVxdWVzdF9zZXJpYWxpemVyKCk6CisgICAgZ2Jfc2VyID0gR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KCkKKyAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoZmllbGRzPXt9LCBncmVtbGluPSJnLkUoKSIpCisKKyAgICBkZWYgYXNzZXJ0X2ludGVjZXB0b3IocmVxdWVzdCk6CisgICAgICAgIGFzc2VydCByZXF1ZXN0WydwYXlsb2FkJ10gPT0gZ2Jfc2VyLnNlcmlhbGl6ZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJlcXVlc3RbJ3BheWxvYWQnXSA9ICJjaGFuZ2VkIgorICAgICAgICByZXR1cm4gcmVxdWVzdAorICAgIAorICAgIHByb3RvY29sID0gR3JlbWxpblNlcnZlckhUVFBQcm90b2NvbChnYl9zZXIsIGdiX3NlciwgaW50ZXJjZXB0b3JzPWFzc2VydF9pbnRlY2VwdG9yKQorICAgIG1vY2tfdHJhbnNwb3J0ID0gTW9ja0hUVFBUcmFuc3BvcnQoKQorICAgIHByb3RvY29sLmNvbm5lY3Rpb25fbWFkZShtb2NrX3RyYW5zcG9ydCkKKyAgICAKKyAgICBwcm90b2NvbC53cml0ZShtZXNzYWdlKQorICAgIHdyaXR0ZW4gPSBtb2NrX3RyYW5zcG9ydC5nZXRfd3JpdGUoKQorCisgICAgYXNzZXJ0IHdyaXR0ZW5bInBheWxvYWQiXSA9PSAiY2hhbmdlZCIKKworZGVmIHRlc3RfaW50ZXJjZXB0b3JzX3J1bl9zZXF1ZW50aWFsbHkoKToKKyAgICBkZWYgdGhyZWUocmVxdWVzdCk6IHJlcXVlc3RbJ3BheWxvYWQnXS5ncmVtbGluLmFwcGVuZCgzKTsgcmV0dXJuIHJlcXVlc3QKKyAgICBkZWYgdHdvKHJlcXVlc3QpOiByZXF1ZXN0WydwYXlsb2FkJ10uZ3JlbWxpbi5hcHBlbmQoMik7IHJldHVybiByZXF1ZXN0CisgICAgZGVmIG9uZShyZXF1ZXN0KTogcmVxdWVzdFsncGF5bG9hZCddLmdyZW1saW4uYXBwZW5kKDEpOyByZXR1cm4gcmVxdWVzdAorICAgIHByb3RvY29sID0gR3JlbWxpblNlcnZlckhUVFBQcm90b2NvbChOb25lLCBHcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzPVtvbmUsIHR3bywgdGhyZWVdKQorICAgIG1vY2tfdHJhbnNwb3J0ID0gTW9ja0hUVFBUcmFuc3BvcnQoKQorICAgIHByb3RvY29sLmNvbm5lY3Rpb25fbWFkZShtb2NrX3RyYW5zcG9ydCkKKyAgICAKKyAgICBtZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UoZmllbGRzPXt9LCBncmVtbGluPVtdKQorICAgIHByb3RvY29sLndyaXRlKG1lc3NhZ2UpCisgICAgd3JpdHRlbiA9IG1vY2tfdHJhbnNwb3J0LmdldF93cml0ZSgpCisKKyAgICBhc3NlcnQgd3JpdHRlblsicGF5bG9hZCJdLmdyZW1saW4gPT0gWzEsIDIsIDNdCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3Rfc2VyaWFsaXplci5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9zZXJpYWxpemVyLnB5CmluZGV4IDhmNjA0ZTkuLmNmMGNjYmQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9zZXJpYWxpemVyLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF9zZXJpYWxpemVyLnB5CkBAIC0xNiwzMCArMTYsMTIgQEAKICMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogIyB1bmRlciB0aGUgTGljZW5zZS4KICMKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvIGltcG9ydCBncmFwaHNvblYyZDAKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvIGltcG9ydCBncmFwaHNvblYzZDAKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvIGltcG9ydCBncmFwaGJpbmFyeVYxCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pbyBpbXBvcnQgZ3JhcGhiaW5hcnlWNAogCiAKIF9fYXV0aG9yX18gPSAnRGF2aWQgTS4gQnJvd24nCiAKIAotZGVmIHRlc3RfZ3JhcGhzb25fc2VyaWFsaXplcl92MihncmFwaHNvbl9zZXJpYWxpemVyX3YyKToKLSAgICBhc3NlcnQgZ3JhcGhzb25fc2VyaWFsaXplcl92Mi52ZXJzaW9uID09IGIiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjIuMCtqc29uIgotICAgIGFzc2VydCBpc2luc3RhbmNlKGdyYXBoc29uX3NlcmlhbGl6ZXJfdjIuX2dyYXBoc29uX3JlYWRlciwgZ3JhcGhzb25WMmQwLkdyYXBoU09OUmVhZGVyKQotICAgIGFzc2VydCBpc2luc3RhbmNlKGdyYXBoc29uX3NlcmlhbGl6ZXJfdjIuc3RhbmRhcmQuX3dyaXRlciwgZ3JhcGhzb25WMmQwLkdyYXBoU09OV3JpdGVyKQotICAgIGFzc2VydCBpc2luc3RhbmNlKGdyYXBoc29uX3NlcmlhbGl6ZXJfdjIudHJhdmVyc2FsLl93cml0ZXIsIGdyYXBoc29uVjJkMC5HcmFwaFNPTldyaXRlcikKLQotCi1kZWYgdGVzdF9ncmFwaHNvbl9zZXJpYWxpemVyX3YzKGdyYXBoc29uX3NlcmlhbGl6ZXJfdjMpOgotICAgIGFzc2VydCBncmFwaHNvbl9zZXJpYWxpemVyX3YzLnZlcnNpb24gPT0gYiJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24iCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3JhcGhzb25fc2VyaWFsaXplcl92My5fZ3JhcGhzb25fcmVhZGVyLCBncmFwaHNvblYzZDAuR3JhcGhTT05SZWFkZXIpCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3JhcGhzb25fc2VyaWFsaXplcl92My5zdGFuZGFyZC5fd3JpdGVyLCBncmFwaHNvblYzZDAuR3JhcGhTT05Xcml0ZXIpCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3JhcGhzb25fc2VyaWFsaXplcl92My50cmF2ZXJzYWwuX3dyaXRlciwgZ3JhcGhzb25WM2QwLkdyYXBoU09OV3JpdGVyKQotCi0KLWRlZiB0ZXN0X2dyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjEoZ3JhcGhiaW5hcnlfc2VyaWFsaXplcl92MSk6Ci0gICAgYXNzZXJ0IGdyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjEudmVyc2lvbiA9PSBiImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wIgotICAgIGFzc2VydCBpc2luc3RhbmNlKGdyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjEuX2dyYXBoYmluYXJ5X3JlYWRlciwgZ3JhcGhiaW5hcnlWMS5HcmFwaEJpbmFyeVJlYWRlcikKLSAgICBhc3NlcnQgaXNpbnN0YW5jZShncmFwaGJpbmFyeV9zZXJpYWxpemVyX3YxLnN0YW5kYXJkLl93cml0ZXIsIGdyYXBoYmluYXJ5VjEuR3JhcGhCaW5hcnlXcml0ZXIpCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UoZ3JhcGhiaW5hcnlfc2VyaWFsaXplcl92MS50cmF2ZXJzYWwuX3dyaXRlciwgZ3JhcGhiaW5hcnlWMS5HcmFwaEJpbmFyeVdyaXRlcikKK2RlZiB0ZXN0X2dyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjQoZ3JhcGhiaW5hcnlfc2VyaWFsaXplcl92NCk6CisgICAgYXNzZXJ0IGdyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjQudmVyc2lvbiA9PSBiImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIgorICAgIGFzc2VydCBpc2luc3RhbmNlKGdyYXBoYmluYXJ5X3NlcmlhbGl6ZXJfdjQuX2dyYXBoYmluYXJ5X3JlYWRlciwgZ3JhcGhiaW5hcnlWNC5HcmFwaEJpbmFyeVJlYWRlcikKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF93ZWJfc29ja2V0X2NsaWVudF9iZWhhdmlvci5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9kcml2ZXIvdGVzdF93ZWJfc29ja2V0X2NsaWVudF9iZWhhdmlvci5weQppbmRleCBkYTk0ZTUyLi5hZTE5YmNjIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vZHJpdmVyL3Rlc3Rfd2ViX3NvY2tldF9jbGllbnRfYmVoYXZpb3IucHkKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL2RyaXZlci90ZXN0X3dlYl9zb2NrZXRfY2xpZW50X2JlaGF2aW9yLnB5CkBAIC0yNSwxNyArMjUsMTYgQEAKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKIAogaW1wb3J0IHB5dGVzdAotCi1mcm9tIGludGVncmF0aW9uIGltcG9ydCBjb25mdGVzdAotCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlciBpbXBvcnQgdXNlcmFnZW50CiAKIAorIyBUT0RPOiByZW1vdmUgb3IgbW9kaWZ5IGFmdGVyIGltcGxlbWVudGluZyBlcXVpdmFsZW50IHN1cHBvcnQgaW4gSFRUUCBzZXJ2ZXIKICMgTm90ZTogVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyBkaWZmZXJlbnQgYmVoYXZpb3IgaW4gcmVzcG9uc2UgdG8gYSBzZXJ2ZXIgc2VuZGluZyBhIGNsb3NlIGZyYW1lIHRoYW4gdGhlIG90aGVyIEdMVidzLgogIyBPdGhlciBHTFYncyB3aWxsIHJlc3BvbmQgdG8gdGhpcyBieSB0cnlpbmcgdG8gcmVjb25uZWN0LiBUaGlzIHRlc3QgaXMgYWxzbyBkZW1vbnN0cmF0aW5nIGluY29ycmVjdCBiZWhhdmlvciBvZgogIyBjbGllbnQuaXNfY2xvc2VkKCkgYXMgaXQgYXBwZWFycyB1bmF3YXJlIHRoYXQgdGhlIGV2ZW50IGxvb3AgaXMgZGVhZC4KICMgVGhlc2UgZGlmZmVyZW5jZXMgZnJvbSBvdGhlciBHTFYncyBhcmUgYmVpbmcgdHJhY2tlZCBpbiBbVElOS0VSUE9QLTI4NDZdLiBJZiB0aGlzIGJlaGF2aW9yIGlzIGNoYW5nZWQgdG8gcmVzZW1ibGUKICMgb3RoZXIgR0xWJ3MsIHRoaXMgdGVzdCBzaG91bGQgYmUgdXBkYXRlZCB0byBzaG93IGEgdmVydGV4IGlzIGJlaW5nIHJlY2VpdmVkIGJ5IHRoZSBzZWNvbmQgcmVxdWVzdC4KK0BweXRlc3QubWFyay5za2lwKHJlYXNvbj0ibm90IGltcGxlbWVudGVkIGluIEhUVFAgJiBuZWVkIHRvIGNoZWNrIG9uIHNlcnZlciBzaWRlIikKIGRlZiB0ZXN0X2RvZXNfbm90X2NyZWF0ZV9uZXdfY29ubmVjdGlvbl9pZl9jbG9zZWRfYnlfc2VydmVyKHNvY2tldF9zZXJ2ZXJfY2xpZW50LCBzb2NrZXRfc2VydmVyX3NldHRpbmdzKToKICAgICB0cnk6CiAgICAgICAgIHNvY2tldF9zZXJ2ZXJfY2xpZW50LnN1Ym1pdCgKQEAgLTU2LDYgKzU1LDcgQEAKIAogIyBUZXN0cyB0aGF0IGNsaWVudCBpcyBjb3JyZWN0bHkgc2VuZGluZyB1c2VyIGFnZW50IGR1cmluZyB3ZWIgc29ja2V0IGhhbmRzaGFrZSBieSBoYXZpbmcgdGhlIHNlcnZlciByZXR1cm4KICMgdGhlIGNhcHR1cmVkIHVzZXIgYWdlbnQuCitAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249Im5vdCBpbXBsZW1lbnRlZCBpbiBIVFRQICYgbmVlZCB0byBjaGVjayBvbiBzZXJ2ZXIgc2lkZSIpCiBkZWYgdGVzdF9zaG91bGRfaW5jbHVkZV91c2VyX2FnZW50X2luX2hhbmRzaGFrZV9yZXF1ZXN0KHNvY2tldF9zZXJ2ZXJfY2xpZW50LCBzb2NrZXRfc2VydmVyX3NldHRpbmdzKToKICAgICB1c2VyX2FnZW50X3Jlc3BvbnNlID0gc29ja2V0X3NlcnZlcl9jbGllbnQuc3VibWl0KAogICAgICAgICAiMSIsIHJlcXVlc3Rfb3B0aW9ucz17J3JlcXVlc3RJZCc6IHNvY2tldF9zZXJ2ZXJfc2V0dGluZ3NbIlVTRVJfQUdFTlRfUkVRVUVTVF9JRCJdfSkub25lKClbMF0KQEAgLTY1LDYgKzY1LDcgQEAKIAogIyBUZXN0cyB0aGF0IG5vIHVzZXIgYWdlbnQgKG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lIHByb3ZpZGVkIGJ5IGFpb2h0dHApIGlzIHNlbnQgdG8gc2VydmVyIHdoZW4gdGhhdAogIyBiZWhhdmlvdXIgaXMgZGlzYWJsZWQuCitAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249Im5vdCBpbXBsZW1lbnRlZCBpbiBIVFRQICYgbmVlZCB0byBjaGVjayBvbiBzZXJ2ZXIgc2lkZSIpCiBkZWYgdGVzdF9zaG91bGRfbm90X2luY2x1ZGVfdXNlcl9hZ2VudF9pbl9oYW5kc2hha2VfcmVxdWVzdF9pZl9kaXNhYmxlZChzb2NrZXRfc2VydmVyX2NsaWVudF9ub191c2VyX2FnZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0X3NlcnZlcl9zZXR0aW5ncyk6CiAgICAgdXNlcl9hZ2VudF9yZXNwb25zZSA9IHNvY2tldF9zZXJ2ZXJfY2xpZW50X25vX3VzZXJfYWdlbnQuc3VibWl0KApAQCAtNzIsMzcgKzczLDExIEBACiAKICAgICAjIElmIHRoZSBncmVtbGluIHVzZXIgYWdlbnQgaXMgZGlzYWJsZWQsIHRoZSB1bmRlcmx5aW5nIHdlYiBzb2NrZXQgbGlicmFyeSByZXZlcnRzIHRvIHNlbmRpbmcgaXRzIGRlZmF1bHQgdXNlciBhZ2VudAogICAgICMgZHVyaW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuCi0gICAgYXNzZXJ0IHJlLnNlYXJjaChyIl5QeXRob24vKFxkK1wuKSpcZCsgYWlvaHR0cC8oXGQrXC4pKlxkKyIsIHVzZXJfYWdlbnRfcmVzcG9uc2UpCi0KLQotIyBUZXN0cyB0aGF0IGNsaWVudCBkb2VzIG5vdCByZXF1ZXN0IHBlcm1lc3NhZ2UgZGVmbGF0ZSBjb21wcmVzc2lvbiBieSBkZWZhdWx0Ci1kZWYgdGVzdF9zaG91bGRfbm90X3JlcXVlc3RfY29tcHJlc3Npb25fYnlfZGVmYXVsdChzb2NrZXRfc2VydmVyX2NsaWVudCwgc29ja2V0X3NlcnZlcl9zZXR0aW5ncyk6Ci0gICAgcmVzcG9uc2UgPSBzb2NrZXRfc2VydmVyX2NsaWVudC5zdWJtaXQoCi0gICAgICAgICIxIiwgcmVxdWVzdF9vcHRpb25zPXsncmVxdWVzdElkJzogc29ja2V0X3NlcnZlcl9zZXR0aW5nc1siU0VDX1dFQlNPQ0tFVF9FWFRFTlNJT05TIl19KS5vbmUoKVswXQotCi0gICAgYXNzZXJ0ICdwZXJtZXNzYWdlLWRlZmxhdGUnIG5vdCBpbiByZXNwb25zZQotCi0KLSMgVGVzdHMgdGhhdCBjbGllbnQgZG9lcyBub3QgcmVxdWVzdCBwZXJtZXNzYWdlIGRlZmxhdGUgY29tcHJlc3Npb24gd2hlbiBkaXNhYmxlZAotQHB5dGVzdC5tYXJrLmNsaWVudF9rd2FyZ3MoeydlbmFibGVfY29tcHJlc3Npb24nOiBGYWxzZX0pCi1kZWYgdGVzdF9zaG91bGRfbm90X3JlcXVlc3RfY29tcHJlc3Npb25fd2hlbl9kaXNhYmxlZChzb2NrZXRfc2VydmVyX2NsaWVudCwgc29ja2V0X3NlcnZlcl9zZXR0aW5ncyk6Ci0gICAgcmVzcG9uc2UgPSBzb2NrZXRfc2VydmVyX2NsaWVudC5zdWJtaXQoCi0gICAgICAgICIxIiwgcmVxdWVzdF9vcHRpb25zPXsncmVxdWVzdElkJzogc29ja2V0X3NlcnZlcl9zZXR0aW5nc1siU0VDX1dFQlNPQ0tFVF9FWFRFTlNJT05TIl19KS5vbmUoKVswXQotCi0gICAgYXNzZXJ0ICdwZXJtZXNzYWdlLWRlZmxhdGUnIG5vdCBpbiByZXNwb25zZQotCi0KLSMgVGVzdHMgdGhhdCBjbGllbnQgcmVxdWVzdHMgcGVybWVzc2FnZSBkZWZsYXRlIGNvbXByZXNzaW9uIHdoZW4gZW5hYmxlZAotQHB5dGVzdC5tYXJrLmNsaWVudF9rd2FyZ3MoeydlbmFibGVfY29tcHJlc3Npb24nOiBUcnVlfSkKLWRlZiB0ZXN0X3Nob3VsZF9yZXF1ZXN0X2NvbXByZXNzaW9uX3doZW5fZW5hYmxlZChzb2NrZXRfc2VydmVyX2NsaWVudCwgc29ja2V0X3NlcnZlcl9zZXR0aW5ncywpOgotICAgIHJlc3BvbnNlID0gc29ja2V0X3NlcnZlcl9jbGllbnQuc3VibWl0KAotICAgICAgICAiMSIsIHJlcXVlc3Rfb3B0aW9ucz17J3JlcXVlc3RJZCc6IHNvY2tldF9zZXJ2ZXJfc2V0dGluZ3NbIlNFQ19XRUJTT0NLRVRfRVhURU5TSU9OUyJdfSkub25lKClbMF0KLQotICAgIGFzc2VydCAncGVybWVzc2FnZS1kZWZsYXRlJyBpbiByZXNwb25zZQotCisgICAgYXNzZXJ0IHJlLnNlYXJjaCgiXlB5dGhvbi9cZCsoXC5cZCspKiBhaW9odHRwL1xkKyhcLlxkKykqIiwgdXNlcl9hZ2VudF9yZXNwb25zZSkKIAogIyBUZXN0cyB0aGF0IGNsaWVudCBpcyBjb3JyZWN0bHkgc2VuZGluZyBhbGwgb3ZlcnJpZGFibGUgcGVyIHJlcXVlc3Qgc2V0dGluZ3MgKHJlcXVlc3RJZCwgYmF0Y2hTaXplLAogIyBldmFsdWF0aW9uVGltZW91dCwgYW5kIHVzZXJBZ2VudCkgdG8gdGhlIHNlcnZlci4KK0BweXRlc3QubWFyay5za2lwKHJlYXNvbj0ibm90IGltcGxlbWVudGVkIGluIEhUVFAgJiBuZWVkIHRvIGNoZWNrIG9uIHNlcnZlciBzaWRlIikKIGRlZiB0ZXN0X3Nob3VsZF9zZW5kX3Blcl9yZXF1ZXN0X3NldHRpbmdzX3RvX3NlcnZlcihzb2NrZXRfc2VydmVyX2NsaWVudCwgc29ja2V0X3NlcnZlcl9zZXR0aW5ncyk6CiAKICAgICByZXN1bHQgPSBzb2NrZXRfc2VydmVyX2NsaWVudC5zdWJtaXQoCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vcHJvY2Vzcy90ZXN0X2RzbC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9wcm9jZXNzL3Rlc3RfZHNsLnB5CmluZGV4IDU4OTY3M2UuLmFhMWRmMzYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9wcm9jZXNzL3Rlc3RfZHNsLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9wcm9jZXNzL3Rlc3RfZHNsLnB5CkBAIC0xOCw3ICsxOCw3IEBACiAjCiBpbXBvcnQgcHl0ZXN0CiAKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IEJ5dGVjb2RlLCBQCitmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBHcmVtbGluTGFuZywgUAogZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLmdyYXBoX3RyYXZlcnNhbCBpbXBvcnQgKAogICAgIEdyYXBoVHJhdmVyc2FsU291cmNlLCBHcmFwaFRyYXZlcnNhbCkKIGZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fIGFzIEFub255bW91c1RyYXZlcnNhbApAQCAtMzAsMTMgKzMwLDEzIEBACiBjbGFzcyBTb2NpYWxUcmF2ZXJzYWwoR3JhcGhUcmF2ZXJzYWwpOgogCiAgICAgZGVmIGtub3dzKHNlbGYsIHBlcnNvbl9uYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYub3V0KCJrbm93cyIpLmhhc0xhYmVsKCJwZXJzb24iKS5oYXMoIm5hbWUiLCBwZXJzb25fbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYub3V0KCJrbm93cyIpLmhhc19sYWJlbCgicGVyc29uIikuaGFzKCJuYW1lIiwgcGVyc29uX25hbWUpCiAKICAgICBkZWYgeW91bmdlc3RGcmllbmRzQWdlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5vdXQoImtub3dzIikuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygiYWdlIikubWluXygpCisgICAgICAgIHJldHVybiBzZWxmLm91dCgia25vd3MiKS5oYXNfbGFiZWwoInBlcnNvbiIpLnZhbHVlcygiYWdlIikubWluXygpCiAKICAgICBkZWYgY3JlYXRlZEF0TGVhc3Qoc2VsZiwgbnVtYmVyKToKLSAgICAgICAgcmV0dXJuIHNlbGYub3V0RSgiY3JlYXRlZCIpLmNvdW50KCkuaXNfKFAuZ3RlKG51bWJlcikpCisgICAgICAgIHJldHVybiBzZWxmLm91dF9lKCJjcmVhdGVkIikuY291bnQoKS5pc18oUC5ndGUobnVtYmVyKSkKIAogY2xhc3MgX18oQW5vbnltb3VzVHJhdmVyc2FsKToKIApAQCAtNDQsMTUgKzQ0LDE1IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYga25vd3MoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLmtub3dzKCphcmdzKQorICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBHcmVtbGluTGFuZygpKS5rbm93cygqYXJncykKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB5b3VuZ2VzdEZyaWVuZHNBZ2UoY2xzLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBjbHMuZ3JhcGhfdHJhdmVyc2FsKE5vbmUsIE5vbmUsIEJ5dGVjb2RlKCkpLnlvdW5nZXN0RnJpZW5kc0FnZSgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkueW91bmdlc3RGcmllbmRzQWdlKCphcmdzKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGNyZWF0ZWRBdExlYXN0KGNscywgKmFyZ3MpOgotICAgICAgICByZXR1cm4gY2xzLmdyYXBoX3RyYXZlcnNhbChOb25lLCBOb25lLCBCeXRlY29kZSgpKS5jcmVhdGVkQXRMZWFzdCgqYXJncykKKyAgICAgICAgcmV0dXJuIGNscy5ncmFwaF90cmF2ZXJzYWwoTm9uZSwgTm9uZSwgR3JlbWxpbkxhbmcoKSkuY3JlYXRlZEF0TGVhc3QoKmFyZ3MpCiAKIAogY2xhc3MgU29jaWFsVHJhdmVyc2FsU291cmNlKEdyYXBoVHJhdmVyc2FsU291cmNlKToKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgc2VsZi5ncmFwaF90cmF2ZXJzYWwgPSBTb2NpYWxUcmF2ZXJzYWwKIAogICAgIGRlZiBwZXJzb25zKHNlbGYsICphcmdzKToKLSAgICAgICAgdHJhdmVyc2FsID0gc2VsZi5nZXRfZ3JhcGhfdHJhdmVyc2FsKCkuVigpLmhhc0xhYmVsKCJwZXJzb24iKQorICAgICAgICB0cmF2ZXJzYWwgPSBzZWxmLmdldF9ncmFwaF90cmF2ZXJzYWwoKS5WKCkuaGFzX2xhYmVsKCJwZXJzb24iKQogCiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDA6CiAgICAgICAgICAgICB0cmF2ZXJzYWwgPSB0cmF2ZXJzYWwuaGFzKCJuYW1lIiwgUC53aXRoaW4oKmFyZ3MpKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL3Byb2Nlc3MvdGVzdF90cmF2ZXJzYWwucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vcHJvY2Vzcy90ZXN0X3RyYXZlcnNhbC5weQppbmRleCBjNmFkODc2Li4xNDNkYjY1IDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vcHJvY2Vzcy90ZXN0X3RyYXZlcnNhbC5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vcHJvY2Vzcy90ZXN0X3RyYXZlcnNhbC5weQpAQCAtMjUsOSArMjUsOSBAQAogCiBmcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlciBpbXBvcnQgc2VyaWFsaXplcgogZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuZHJpdmVyX3JlbW90ZV9jb25uZWN0aW9uIGltcG9ydCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgR3JhcGgKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBHcmFwaCwgVmVydGV4CiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuYW5vbnltb3VzX3RyYXZlcnNhbCBpbXBvcnQgdHJhdmVyc2FsCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBQLCBEaXJlY3Rpb24sIEJpbmRpbmdzLCBCaW5kaW5nCitmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBQLCBEaXJlY3Rpb24sIFQKIGZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCiAKIGdyZW1saW5fc2VydmVyX3VybCA9IG9zLmVudmlyb24uZ2V0KCdHUkVNTElOX1NFUlZFUl9VUkwnLCAnd3M6Ly9sb2NhbGhvc3Q6e30vZ3JlbWxpbicpCkBAIC0zNSw1OSArMzUsNiBAQAogCiAKIGNsYXNzIFRlc3RUcmF2ZXJzYWwob2JqZWN0KToKLSAgICBkZWYgdGVzdF9ieXRlY29kZShzZWxmKToKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCi0gICAgICAgIGJ5dGVjb2RlID0gZy5WKCkub3V0KCJjcmVhdGVkIikuYnl0ZWNvZGUKLSAgICAgICAgYXNzZXJ0IDAgPT0gbGVuKGJ5dGVjb2RlLmJpbmRpbmdzLmtleXMoKSkKLSAgICAgICAgYXNzZXJ0IDAgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAyID09IGxlbihieXRlY29kZS5zdGVwX2luc3RydWN0aW9ucykKLSAgICAgICAgYXNzZXJ0ICJWIiA9PSBieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgIm91dCIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMF0KLSAgICAgICAgYXNzZXJ0ICJjcmVhdGVkIiA9PSBieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1sxXVsxXQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMF0pCi0gICAgICAgIGFzc2VydCAyID09IGxlbihieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1sxXSkKLSAgICAgICAgIyMKLSAgICAgICAgYnl0ZWNvZGUgPSBnLndpdGhTYWNrKDEpLkUoKS5ncm91cENvdW50KCkuYnkoIndlaWdodCIpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5iaW5kaW5ncy5rZXlzKCkpCi0gICAgICAgIGFzc2VydCAxID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgIndpdGhTYWNrIiA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzBdCi0gICAgICAgIGFzc2VydCAxID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0KLSAgICAgICAgYXNzZXJ0IDMgPT0gbGVuKGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgIkUiID09IGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzBdWzBdCi0gICAgICAgIGFzc2VydCAiZ3JvdXBDb3VudCIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMF0KLSAgICAgICAgYXNzZXJ0ICJieSIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMl1bMF0KLSAgICAgICAgYXNzZXJ0ICJ3ZWlnaHQiID09IGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzJdWzFdCi0gICAgICAgIGFzc2VydCAxID09IGxlbihieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1swXSkKLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzFdKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMl0pCi0gICAgICAgICMjCi0gICAgICAgIGJ5dGVjb2RlID0gZy5WKEJpbmRpbmdzLm9mKCdhJywgWzEsIDIsIDNdKSkgXAotICAgICAgICAgICAgLm91dChCaW5kaW5ncy5vZignYicsICdjcmVhdGVkJykpIFwKLSAgICAgICAgICAgIC53aGVyZShfXy5pbl8oQmluZGluZ3Mub2YoJ2MnLCAnY3JlYXRlZCcpLCBCaW5kaW5ncy5vZignZCcsICdrbm93cycpKSBcCi0gICAgICAgICAgICAgICAgICAgLmNvdW50KCkuaXNfKEJpbmRpbmdzLm9mKCdlJywgUC5ndCgyKSkpKS5ieXRlY29kZQotICAgICAgICBhc3NlcnQgNSA9PSBsZW4oYnl0ZWNvZGUuYmluZGluZ3Mua2V5cygpKQotICAgICAgICBhc3NlcnQgWzEsIDIsIDNdID09IGJ5dGVjb2RlLmJpbmRpbmdzWydhJ10KLSAgICAgICAgYXNzZXJ0ICdjcmVhdGVkJyA9PSBieXRlY29kZS5iaW5kaW5nc1snYiddCi0gICAgICAgIGFzc2VydCAnY3JlYXRlZCcgPT0gYnl0ZWNvZGUuYmluZGluZ3NbJ2MnXQotICAgICAgICBhc3NlcnQgJ2tub3dzJyA9PSBieXRlY29kZS5iaW5kaW5nc1snZCddCi0gICAgICAgIGFzc2VydCBQLmd0KDIpID09IGJ5dGVjb2RlLmJpbmRpbmdzWydlJ10KLSAgICAgICAgYXNzZXJ0IEJpbmRpbmcoJ2InLCAnY3JlYXRlZCcpID09IGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzFdWzFdCi0gICAgICAgIGFzc2VydCAnYmluZGluZ1tiPWNyZWF0ZWRdJyA9PSBzdHIoYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMV0pCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGhhc2goYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMV0pLCBpbnQpCi0gICAgICAgICMjIwotICAgICAgICBieXRlY29kZSA9IGcuVigpLnRvKERpcmVjdGlvbi5mcm9tXywgJ2tub3dzJykudG8oRGlyZWN0aW9uLnRvLCAnY3JlYXRlZCcpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5iaW5kaW5ncy5rZXlzKCkpCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgMyA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAiViIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMF1bMF0KLSAgICAgICAgYXNzZXJ0ICJ0byIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMF0KLSAgICAgICAgYXNzZXJ0IERpcmVjdGlvbi5PVVQgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMV0KLSAgICAgICAgYXNzZXJ0ICJrbm93cyIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMV1bMl0KLSAgICAgICAgYXNzZXJ0IERpcmVjdGlvbi5JTiA9PSBieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1syXVsxXQotICAgICAgICBhc3NlcnQgImNyZWF0ZWQiID09IGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzJdWzJdCi0gICAgICAgIGFzc2VydCAxID09IGxlbihieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1swXSkKLSAgICAgICAgYXNzZXJ0IDMgPT0gbGVuKGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzFdKQotICAgICAgICBhc3NlcnQgMyA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMl0pCiAKICAgICBkZWYgdGVzdF9QKHNlbGYpOgogICAgICAgICAjIHZlcmlmeSB0aGF0IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGlzIHJlc3BlY3RlZApAQCAtOTcsMTcgKzQ0LDEyIEBACiAgICAgICAgICAgICBQLmx0KCJiIikub3JfKFAuZ3QoImMiKSkuYW5kXyhQLm5lcSgiZCIpLm9yXyhQLmd0ZSgiZSIpKSkpCiAKICAgICBkZWYgdGVzdF9hbm9ueW1vdXNfdHJhdmVyc2FsKHNlbGYpOgotICAgICAgICBieXRlY29kZSA9IF9fLl9fKDEpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5iaW5kaW5ncy5rZXlzKCkpCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAiaW5qZWN0IiA9PSBieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgMSA9PSBieXRlY29kZS5zdGVwX2luc3RydWN0aW9uc1swXVsxXQorICAgICAgICBncmVtbGluID0gX18uX18oMSkuZ3JlbWxpbl9sYW5nCisgICAgICAgIGFzc2VydCAiX18uaW5qZWN0KDEpIiA9PSBncmVtbGluLmdldF9ncmVtbGluKCdfXycpCisKICAgICAgICAgIyMKLSAgICAgICAgYnl0ZWNvZGUgPSBfXy5zdGFydCgpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5iaW5kaW5ncy5rZXlzKCkpCi0gICAgICAgIGFzc2VydCAwID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgMCA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCisgICAgICAgIGdyZW1saW4gPSBfXy5zdGFydCgpLmdyZW1saW5fbGFuZworICAgICAgICBhc3NlcnQgIiIgPT0gZ3JlbWxpbi5nZXRfZ3JlbWxpbignJykKIAogICAgIGRlZiB0ZXN0X2Nsb25lX3RyYXZlcnNhbChzZWxmKToKICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCkBAIC0xMTUsMjIgKzU3LDIzIEBACiAgICAgICAgIGNsb25lID0gb3JpZ2luYWwuY2xvbmUoKS5vdXQoImtub3dzIikKICAgICAgICAgY2xvbmVDbG9uZSA9IGNsb25lLmNsb25lKCkub3V0KCJjcmVhdGVkIikKIAotICAgICAgICBhc3NlcnQgMiA9PSBsZW4ob3JpZ2luYWwuYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAzID09IGxlbihjbG9uZS5ieXRlY29kZS5zdGVwX2luc3RydWN0aW9ucykKLSAgICAgICAgYXNzZXJ0IDQgPT0gbGVuKGNsb25lQ2xvbmUuYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCisgICAgICAgIGFzc2VydCAiZy5WKCkub3V0KCdjcmVhdGVkJykiID09IG9yaWdpbmFsLmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCisgICAgICAgIGFzc2VydCAiZy5WKCkub3V0KCdjcmVhdGVkJykub3V0KCdrbm93cycpIiA9PSBjbG9uZS5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQorICAgICAgICBhc3NlcnQgImcuVigpLm91dCgnY3JlYXRlZCcpLm91dCgna25vd3MnKS5vdXQoJ2NyZWF0ZWQnKSIgPT0gY2xvbmVDbG9uZS5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQogCiAgICAgICAgIG9yaWdpbmFsLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKQogICAgICAgICBjbG9uZS5WKCkub3V0KCkKIAotICAgICAgICBhc3NlcnQgMyA9PSBsZW4ob3JpZ2luYWwuYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCA1ID09IGxlbihjbG9uZS5ieXRlY29kZS5zdGVwX2luc3RydWN0aW9ucykKLSAgICAgICAgYXNzZXJ0IDQgPT0gbGVuKGNsb25lQ2xvbmUuYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCisgICAgICAgIGFzc2VydCAiZy5WKCkub3V0KCdjcmVhdGVkJykuaGFzKCdwZXJzb24nLCduYW1lJywnbWFya28nKSIgPT0gb3JpZ2luYWwuZ3JlbWxpbl9sYW5nLmdldF9ncmVtbGluKCkKKyAgICAgICAgYXNzZXJ0ICJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5vdXQoJ2tub3dzJykuVigpLm91dCgpIiA9PSBjbG9uZS5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQorICAgICAgICBhc3NlcnQgImcuVigpLm91dCgnY3JlYXRlZCcpLm91dCgna25vd3MnKS5vdXQoJ2NyZWF0ZWQnKSIgPT0gY2xvbmVDbG9uZS5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQorCiAKICAgICBkZWYgdGVzdF9ub19zdWdhcl9mb3JfbWFnaWNfbWV0aG9kcyhzZWxmKToKICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCiAKICAgICAgICAgdCA9IGcuVigpLmFnZQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4odC5ieXRlY29kZS5zdGVwX2luc3RydWN0aW9ucykKKyAgICAgICAgYXNzZXJ0ICJnLlYoKS52YWx1ZXMoJ2FnZScpIiA9PSB0LmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdCA9IGcuVigpLl9fbGVuX18KQEAgLTE0MSwxNCArODQsMTUgQEAKIAogICAgIGRlZiB0ZXN0X2VuZm9yY2VfYW5vbnltb3VzX2NoaWxkX3RyYXZlcnNhbChzZWxmKToKICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCi0gICAgICAgIGcuVigwKS5hZGRFKCJzZWxmIikudG8oX18uVigxKSkKKyAgICAgICAgZy5WKDApLmFkZF9lKCJzZWxmIikudG8oX18uVigxKSkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBnLlYoMCkuYWRkRSgic2VsZiIpLnRvKGcuVigxKSkKKyAgICAgICAgICAgIGcuVigwKS5hZGRfZSgic2VsZiIpLnRvKGcuVigxKSkKICAgICAgICAgICAgIGFzc2VydCBGYWxzZQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHB5dGVzdC5tYXJrLnNraXAocmVhc29uPSJlbmFibGUgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gSFRUUCIpCiAgICAgZGVmIHRlc3RfdHJhbnNhY3Rpb25fY29tbWl0KHNlbGYsIHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uKToKICAgICAgICAgIyBTdGFydCBhIHRyYW5zYWN0aW9uIHRyYXZlcnNhbC4KICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uKQpAQCAtMTcyLDYgKzExNiw3IEBACiAgICAgICAgIGRyb3BfZ3JhcGhfY2hlY2tfY291bnQoZykKICAgICAgICAgdmVyaWZ5X2d0eF9jbG9zZWQoZ3R4KQogCisgICAgQHB5dGVzdC5tYXJrLnNraXAocmVhc29uPSJlbmFibGUgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gSFRUUCIpCiAgICAgZGVmIHRlc3RfdHJhbnNhY3Rpb25fcm9sbGJhY2soc2VsZiwgcmVtb3RlX3RyYW5zYWN0aW9uX2Nvbm5lY3Rpb24pOgogICAgICAgICAjIFN0YXJ0IGEgdHJhbnNhY3Rpb24gdHJhdmVyc2FsLgogICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX3RyYW5zYWN0aW9uX2Nvbm5lY3Rpb24pCkBAIC0xOTUsNiArMTQwLDcgQEAKICAgICAgICAgZHJvcF9ncmFwaF9jaGVja19jb3VudChnKQogICAgICAgICB2ZXJpZnlfZ3R4X2Nsb3NlZChndHgpCiAKKyAgICBAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249ImVuYWJsZSBhZnRlciB0cmFuc2FjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiBIVFRQIikKICAgICBkZWYgdGVzdF90cmFuc2FjdGlvbl9ub19iZWdpbihzZWxmLCByZW1vdGVfdHJhbnNhY3Rpb25fY29ubmVjdGlvbik6CiAgICAgICAgICMgU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfdHJhbnNhY3Rpb25fY29ubmVjdGlvbikKQEAgLTI0Niw2ICsxOTIsNyBAQAogICAgICAgICB0eC5yb2xsYmFjaygpCiAgICAgICAgIGFzc2VydCBub3QgdHguaXNPcGVuKCkKIAorICAgIEBweXRlc3QubWFyay5za2lwKHJlYXNvbj0iZW5hYmxlIGFmdGVyIHRyYW5zYWN0aW9uIGlzIGltcGxlbWVudGVkIGluIEhUVFAiKQogICAgIGRlZiB0ZXN0X211bHRpX2NvbW1pdF90cmFuc2FjdGlvbihzZWxmLCByZW1vdGVfdHJhbnNhY3Rpb25fY29ubmVjdGlvbik6CiAgICAgICAgICMgU3RhcnQgYSB0cmFuc2FjdGlvbiB0cmF2ZXJzYWwuCiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfdHJhbnNhY3Rpb25fY29ubmVjdGlvbikKQEAgLTI3Niw2ICsyMjMsNyBAQAogICAgICAgICB2ZXJpZnlfdHhfc3RhdGUoW3R4MSwgdHgyXSwgRmFsc2UpCiAgICAgICAgIGFzc2VydCBnLlYoKS5jb3VudCgpLm5leHQoKSA9PSBzdGFydF9jb3VudCArIDMKIAorICAgIEBweXRlc3QubWFyay5za2lwKHJlYXNvbj0iZW5hYmxlIGFmdGVyIHRyYW5zYWN0aW9uIGlzIGltcGxlbWVudGVkIGluIEhUVFAiKQogICAgIGRlZiB0ZXN0X211bHRpX3JvbGxiYWNrX3RyYW5zYWN0aW9uKHNlbGYsIHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uKToKICAgICAgICAgIyBTdGFydCBhIHRyYW5zYWN0aW9uIHRyYXZlcnNhbC4KICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uKQpAQCAtMzA2LDYgKzI1NCw3IEBACiAgICAgICAgIHZlcmlmeV90eF9zdGF0ZShbdHgxLCB0eDJdLCBGYWxzZSkKICAgICAgICAgYXNzZXJ0IGcuVigpLmNvdW50KCkubmV4dCgpID09IHN0YXJ0X2NvdW50CiAKKyAgICBAcHl0ZXN0Lm1hcmsuc2tpcChyZWFzb249ImVuYWJsZSBhZnRlciB0cmFuc2FjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiBIVFRQIikKICAgICBkZWYgdGVzdF9tdWx0aV9jb21taXRfYW5kX3JvbGxiYWNrKHNlbGYsIHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uKToKICAgICAgICAgIyBTdGFydCBhIHRyYW5zYWN0aW9uIHRyYXZlcnNhbC4KICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV90cmFuc2FjdGlvbl9jb25uZWN0aW9uKQpAQCAtMzM2LDYgKzI4NSw3IEBACiAgICAgICAgIHZlcmlmeV90eF9zdGF0ZShbdHgxLCB0eDJdLCBGYWxzZSkKICAgICAgICAgYXNzZXJ0IGcuVigpLmNvdW50KCkubmV4dCgpID09IHN0YXJ0X2NvdW50ICsgMgogCisgICAgQHB5dGVzdC5tYXJrLnNraXAocmVhc29uPSJlbmFibGUgYWZ0ZXIgdHJhbnNhY3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gSFRUUCIpCiAgICAgZGVmIHRlc3RfdHJhbnNhY3Rpb25fY2xvc2VfdHgoc2VsZik6CiAgICAgICAgIHJlbW90ZV9jb25uID0gY3JlYXRlX2Nvbm5lY3Rpb25fdG9fZ3R4KCkKICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uKQpAQCAtMzU1LDggKzMwNSw3IEBACiAgICAgICAgIGFkZF9ub2RlX3ZhbGlkYXRlX3RyYW5zYWN0aW9uX3N0YXRlKGcsIGd0eDIsIDAsIDIsIFt0eDEsIHR4Ml0pCiAKICAgICAgICAgIyBzb21lb25lIGdldHMgbGF6eSBhbmQgZG9lc24ndCBjb21taXQvcm9sbGJhY2sgYW5kIGp1c3QgY2FsbHMgY2xvc2UoKSAtIHRoZSBncmFwaAotICAgICAgICAjIHdpbGwgZGVjaWRlIGhvdyB0byB0cmVhdCB0aGUgdHJhbnNhY3Rpb24sIGJ1dCBmb3IgbmVvNGovZ3JlbWxpbiBzZXJ2ZXIgaW4gdGhpcwotICAgICAgICAjIHRlc3QgY29uZmlndXJhdGlvbiBpdCBzaG91bGQgcm9sbGJhY2sKKyAgICAgICAgIyB3aWxsIGRlY2lkZSBob3cgdG8gdHJlYXQgdGhlIHRyYW5zYWN0aW9uCiAgICAgICAgIHR4MS5jbG9zZSgpCiAgICAgICAgIHR4Mi5jbG9zZSgpCiAKQEAgLTM3MSw2ICszMjAsNyBAQAogCiAgICAgICAgIGRyb3BfZ3JhcGhfY2hlY2tfY291bnQoZykKIAorICAgIEBweXRlc3QubWFyay5za2lwKHJlYXNvbj0iZW5hYmxlIGFmdGVyIHRyYW5zYWN0aW9uIGlzIGltcGxlbWVudGVkIGluIEhUVFAiKQogICAgIGRlZiB0ZXN0X3RyYW5zYWN0aW9uX2Nsb3NlX3R4X2Zyb21fcGFyZW50KHNlbGYpOgogICAgICAgICByZW1vdGVfY29ubiA9IGNyZWF0ZV9jb25uZWN0aW9uX3RvX2d0eCgpCiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubikKQEAgLTM5MSw4ICszNDEsNyBAQAogCiAgICAgICAgICMgc29tZW9uZSBnZXRzIGxhenkgYW5kIGRvZXNuJ3QgY29tbWl0L3JvbGxiYWNrIGFuZCBqdXN0IGNhbGxzIGNsb3NlKCkgYnV0IG9uIHRoZSBwYXJlbnQKICAgICAgICAgIyBEcml2ZXJSZW1vdGVDb25uZWN0aW9uIGZvciBhbGwgdGhlIHNlc3Npb24gdGhhdCB3ZXJlIGNyZWF0ZWQgdmlhIHR4KCkgLSB0aGUgZ3JhcGgKLSAgICAgICAgIyB3aWxsIGRlY2lkZSBob3cgdG8gdHJlYXQgdGhlIHRyYW5zYWN0aW9uLCBidXQgZm9yIG5lbzRqL2dyZW1saW4gc2VydmVyIGluIHRoaXMKLSAgICAgICAgIyB0ZXN0IGNvbmZpZ3VyYXRpb24gaXQgc2hvdWxkIHJvbGxiYWNrCisgICAgICAgICMgd2lsbCBkZWNpZGUgaG93IHRvIHRyZWF0IHRoZSB0cmFuc2FjdGlvbgogICAgICAgICByZW1vdGVfY29ubi5jbG9zZSgpCiAKICAgICAgICAgYXNzZXJ0IG5vdCB0eDEuaXNPcGVuKCkKQEAgLTQwNiwxNiArMzU1LDQ0IEBACiAKICAgICAgICAgZHJvcF9ncmFwaF9jaGVja19jb3VudChnKQogCisgICAgZGVmIHRlc3Rfc2hvdWxkX2V4dHJhY3RfaWRfZnJvbV92ZXJ0ZXgoc2VsZik6CisgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhOb25lKQorCisgICAgICAgICMgVGVzdCBiYXNpYyBWKCkgc3RlcCB3aXRoIG1peGVkIElEIHR5cGVzCisgICAgICAgIHZfc3RhcnQgPSBnLlYoMSwgVmVydGV4KDIpKQorICAgICAgICBhc3NlcnQgImcuVigxLDIpIiA9PSB2X3N0YXJ0LmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCisKKyAgICAgICAgIyBUZXN0IFYoKSBzdGVwIGluIHRoZSBtaWRkbGUgb2YgYSB0cmF2ZXJzYWwKKyAgICAgICAgdl9taWQgPSBnLmluamVjdCgiZm9vIikuVigxLCBWZXJ0ZXgoMikpCisgICAgICAgIGFzc2VydCAiZy5pbmplY3QoJ2ZvbycpLlYoMSwyKSIgPT0gdl9taWQuZ3JlbWxpbl9sYW5nLmdldF9ncmVtbGluKCkKKworICAgICAgICAjIFRlc3QgZWRnZSBjcmVhdGlvbiB3aXRoIGZyb20vdG8gdmVydGljZXMKKyAgICAgICAgZnJvbV90byA9IGcuYWRkX2UoIkVkZ2UiKS5mcm9tXyhWZXJ0ZXgoMSkpLnRvKFZlcnRleCgyKSkKKyAgICAgICAgYXNzZXJ0ICJnLmFkZEUoJ0VkZ2UnKS5mcm9tKF9fLlYoMSkpLnRvKF9fLlYoMikpIiA9PSBmcm9tX3RvLmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCisKKyAgICAgICAgIyBUZXN0IG1lcmdlRSgpIHdpdGggVmVydGV4IGluIGRpY3Rpb25hcnkKKyAgICAgICAgbWVyZ2VfbWFwID0geworICAgICAgICAgICAgVC5sYWJlbDogImtub3dzIiwKKyAgICAgICAgICAgIERpcmVjdGlvbi5PVVQ6IFZlcnRleCgxKSwKKyAgICAgICAgICAgIERpcmVjdGlvbi5JTjogVmVydGV4KDIpCisgICAgICAgIH0KKworICAgICAgICBtZXJnZV9lX3N0YXJ0ID0gZy5tZXJnZV9lKG1lcmdlX21hcCkKKyAgICAgICAgYXNzZXJ0ICJnLm1lcmdlRShbKFQubGFiZWwpOidrbm93cycsKERpcmVjdGlvbi5PVVQpOjEsKERpcmVjdGlvbi5JTik6Ml0pIiA9PSBtZXJnZV9lX3N0YXJ0LmdyZW1saW5fbGFuZy5nZXRfZ3JlbWxpbigpCisKKyAgICAgICAgIyBUZXN0IG1lcmdlRSgpIGluIHRoZSBtaWRkbGUgb2YgYSB0cmF2ZXJzYWwKKyAgICAgICAgbWVyZ2VfZV9taWQgPSBnLmluamVjdCgiZm9vIikubWVyZ2VfZShtZXJnZV9tYXApCisgICAgICAgIGFzc2VydCAiZy5pbmplY3QoJ2ZvbycpLm1lcmdlRShbKFQubGFiZWwpOidrbm93cycsKERpcmVjdGlvbi5PVVQpOjEsKERpcmVjdGlvbi5JTik6Ml0pIiA9PSBtZXJnZV9lX21pZC5ncmVtbGluX2xhbmcuZ2V0X2dyZW1saW4oKQorCiAKIGRlZiBjcmVhdGVfY29ubmVjdGlvbl90b19ndHgoKToKLSAgICByZXR1cm4gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsLCAnZ3R4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3NlcmlhbGl6ZXI9c2VyaWFsaXplci5HcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEoKSkKKyAgICByZXR1cm4gRHJpdmVyUmVtb3RlQ29ubmVjdGlvbihhbm9ueW1vdXNfdXJsLCAnZ3R4JykKIAogCiBkZWYgYWRkX25vZGVfdmFsaWRhdGVfdHJhbnNhY3Rpb25fc3RhdGUoZywgZ19hZGRfdG8sIGdfc3RhcnRfY291bnQsIGdfYWRkX3RvX3N0YXJ0X2NvdW50LCB0eF92ZXJpZnlfbGlzdCk6CiAgICAgIyBBZGQgYSBzaW5nbGUgbm9kZSB0byBnX2FkZF90bywgYnV0IG5vdCBnLgogICAgICMgQ2hlY2sgdGhhdCB2ZXJ0ZXggY291bnQgaW4gZyBpcyBnX3N0YXJ0X2NvdW50IGFuZCB2ZXJ0ZXggY291bnQgaW4gZ19hZGRfdG8gaXMgZ19hZGRfdG9fc3RhcnRfY291bnQgKyAxLgotICAgIGdfYWRkX3RvLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImx5bmRvbiIpLml0ZXJhdGUoKQorICAgIGdfYWRkX3RvLmFkZF92KCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJseW5kb24iKS5pdGVyYXRlKCkKICAgICBhc3NlcnQgZ19hZGRfdG8uVigpLmNvdW50KCkubmV4dCgpID09IGdfYWRkX3RvX3N0YXJ0X2NvdW50ICsgMQogICAgIGFzc2VydCBnLlYoKS5jb3VudCgpLm5leHQoKSA9PSBnX3N0YXJ0X2NvdW50CiAgICAgdmVyaWZ5X3R4X3N0YXRlKHR4X3ZlcmlmeV9saXN0LCBUcnVlKQpAQCAtNDM1LDcgKzQxMiw3IEBACiAgICAgdHJ5OgogICAgICAgICAjIEF0dGVtcHQgdG8gYWRkIGFuIGFkZGl0aW9uYWwgdmVydGV4IHRvIHRoZSB0cmFuc2FjdGlvbi4gVGhpcyBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIHNpbmNlIGl0CiAgICAgICAgICMgaGFzIGJlZW4gcm9sbGVkIGJhY2suCi0gICAgICAgIGd0eCgpLmFkZFYoImZhaWx1cmUiKS5pdGVyYXRlKCkKKyAgICAgICAgZ3R4KCkuYWRkX3YoImZhaWx1cmUiKS5pdGVyYXRlKCkKICAgICAgICAgYXNzZXJ0IEZhbHNlCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vc3RydWN0dXJlL2lvL3Rlc3RfZnVuY3Rpb25hbGl0eWlvLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL2ludGVncmF0aW9uL3N0cnVjdHVyZS9pby90ZXN0X2Z1bmN0aW9uYWxpdHlpby5weQppbmRleCAwOWQxYWFkLi42ZmRlZjA5IDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvaW50ZWdyYXRpb24vc3RydWN0dXJlL2lvL3Rlc3RfZnVuY3Rpb25hbGl0eWlvLnB5CisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy9pbnRlZ3JhdGlvbi9zdHJ1Y3R1cmUvaW8vdGVzdF9mdW5jdGlvbmFsaXR5aW8ucHkKQEAgLTE3LDEyICsxNywxMiBAQAogdW5kZXIgdGhlIExpY2Vuc2UuCiAnJycKIAotaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgdXVpZAoraW1wb3J0IHB5dGVzdAogCi1mcm9tIGdyZW1saW5fcHl0aG9uLmRyaXZlci5zZXJpYWxpemVyIGltcG9ydCBHcmFwaFNPTlNlcmlhbGl6ZXJzVjJkMCwgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhLCB0aW1lem9uZQorZnJvbSBncmVtbGluX3B5dGhvbi5kcml2ZXIuc2VyaWFsaXplciBpbXBvcnQgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0CiBmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuYW5vbnltb3VzX3RyYXZlcnNhbCBpbXBvcnQgdHJhdmVyc2FsCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBEVAogZnJvbSBncmVtbGluX3B5dGhvbi5zdGF0aWNzIGltcG9ydCAqCiAKIApAQCAtODEsNTMgKzgxLDI4IEBACiAgICAgYXNzZXJ0IHZlcnRleC5wcm9wZXJ0aWVzWzFdLnByb3BlcnRpZXNbMV0udmFsdWUgPT0gMjAwMAogCiAKLWRlZiB0ZXN0X3RpbWVzdGFtcChyZW1vdGVfY29ubmVjdGlvbik6Ci0gICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQotICAgIHRzID0gdGltZXN0YW1wKDE0ODE3NTAwNzYyOTUgLyAxMDAwKQotICAgIHJlc3AgPSBnLmFkZFYoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ3RzJywgdHMpCi0gICAgcmVzcCA9IHJlc3AudG9MaXN0KCkKLSAgICB2aWQgPSByZXNwWzBdLmlkCi0gICAgdHJ5OgotICAgICAgICB0c19wcm9wID0gZy5WKHZpZCkucHJvcGVydGllcygndHMnKS50b0xpc3QoKVswXQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh0c19wcm9wLnZhbHVlLCB0aW1lc3RhbXApCi0gICAgICAgIGFzc2VydCB0c19wcm9wLnZhbHVlID09IHRzCi0gICAgZmluYWxseToKLSAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQotCi0KIGRlZiB0ZXN0X2RhdGV0aW1lKHJlbW90ZV9jb25uZWN0aW9uKToKICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCi0gICAgZHQgPSBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDE0ODE3NTAwNzYyOTUgLyAxMDAwKQotICAgIHJlc3AgPSBnLmFkZFYoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2R0JywgZHQpLnRvTGlzdCgpCi0gICAgdmlkID0gcmVzcFswXS5pZAotICAgIHRyeToKLSAgICAgICAgZHRfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ2R0JykudG9MaXN0KClbMF0KLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZHRfcHJvcC52YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpCi0gICAgICAgIGFzc2VydCBkdF9wcm9wLnZhbHVlID09IGR0Ci0gICAgZmluYWxseToKLSAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQotCi1kZWYgdGVzdF9vZmZzZXRkYXRldGltZShyZW1vdGVfY29ubmVjdGlvbik6Ci0gICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQotICAgIHR6ID0gZGF0ZXRpbWUudGltZXpvbmUoZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MzYwMDApKQorICAgIHR6ID0gdGltZXpvbmUodGltZWRlbHRhKHNlY29uZHM9MzYwMDApKQogICAgIG1zID0gMTIzNDU2Nzg5MTIKLSAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMjIsIDUsIDIwLCB0emluZm89dHopICsgZGF0ZXRpbWUudGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1tcykKKyAgICBkdCA9IGRhdGV0aW1lKDIwMjIsIDUsIDIwLCB0emluZm89dHopICsgdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1tcykKICAgICByZXNwID0gZy5hZGRfdigndGVzdF92ZXJ0ZXgnKS5wcm9wZXJ0eSgnZHQnLCBkdCkudG9fbGlzdCgpCiAgICAgdmlkID0gcmVzcFswXS5pZAogICAgIHRyeToKICAgICAgICAgZHRfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ2R0JykudG9fbGlzdCgpWzBdCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGR0X3Byb3AudmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkdF9wcm9wLnZhbHVlLCBkYXRldGltZSkKICAgICAgICAgYXNzZXJ0IGR0X3Byb3AudmFsdWUgPT0gZHQKICAgICBmaW5hbGx5OgogICAgICAgICBnLlYodmlkKS5kcm9wKCkuaXRlcmF0ZSgpCiAKKwogZGVmIHRlc3RfdXVpZChyZW1vdGVfY29ubmVjdGlvbik6CiAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQogICAgIHVpZCA9IHV1aWQuVVVJRCgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikKLSAgICByZXNwID0gZy5hZGRWKCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCd1dWlkJywgdWlkKS50b0xpc3QoKQorICAgIHJlc3AgPSBnLmFkZF92KCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCd1dWlkJywgdWlkKS50b19saXN0KCkKICAgICB2aWQgPSByZXNwWzBdLmlkCiAgICAgdHJ5OgotICAgICAgICB1aWRfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ3V1aWQnKS50b0xpc3QoKVswXQorICAgICAgICB1aWRfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ3V1aWQnKS50b19saXN0KClbMF0KICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodWlkX3Byb3AudmFsdWUsIHV1aWQuVVVJRCkKICAgICAgICAgYXNzZXJ0IHVpZF9wcm9wLnZhbHVlID09IHVpZAogICAgIGZpbmFsbHk6CkBAIC0xMzUsMzEgKzExMCwzMSBAQAogCiAKIGRlZiB0ZXN0X3Nob3J0KHJlbW90ZV9jb25uZWN0aW9uKToKLSAgICBpZiBub3QgaXNpbnN0YW5jZShyZW1vdGVfY29ubmVjdGlvbi5fY2xpZW50Ll9tZXNzYWdlX3NlcmlhbGl6ZXIsIEdyYXBoQmluYXJ5U2VyaWFsaXplcnNWMSk6CisgICAgaWYgbm90IGlzaW5zdGFuY2UocmVtb3RlX2Nvbm5lY3Rpb24uX2NsaWVudC5yZXNwb25zZV9zZXJpYWxpemVyKCksIEdyYXBoQmluYXJ5U2VyaWFsaXplcnNWNCk6CiAgICAgICAgIHJldHVybgogCiAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQogICAgIG51bSA9IHNob3J0KDExMTEpCi0gICAgcmVzcCA9IGcuYWRkVigndGVzdF92ZXJ0ZXgnKS5wcm9wZXJ0eSgnc2hvcnQnLCBudW0pLnRvTGlzdCgpCisgICAgcmVzcCA9IGcud2l0aF8oJ2xhbmd1YWdlJywgJ2dyZW1saW4tbGFuZycpLmFkZF92KCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCdzaG9ydCcsIG51bSkudG9fbGlzdCgpCiAgICAgdmlkID0gcmVzcFswXS5pZAogICAgIHRyeToKLSAgICAgICAgYmlnaW50X3Byb3AgPSBnLlYodmlkKS5wcm9wZXJ0aWVzKCdzaG9ydCcpLnRvTGlzdCgpWzBdCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJpZ2ludF9wcm9wLnZhbHVlLCBpbnQpCi0gICAgICAgIGFzc2VydCBiaWdpbnRfcHJvcC52YWx1ZSA9PSBudW0KKyAgICAgICAgc2hvcnRfcHJvcCA9IGcud2l0aF8oJ2xhbmd1YWdlJywgJ2dyZW1saW4tbGFuZycpLlYodmlkKS5wcm9wZXJ0aWVzKCdzaG9ydCcpLnRvX2xpc3QoKVswXQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzaG9ydF9wcm9wLnZhbHVlLCBpbnQpCisgICAgICAgIGFzc2VydCBzaG9ydF9wcm9wLnZhbHVlID09IG51bQogICAgIGZpbmFsbHk6CiAgICAgICAgIGcuVih2aWQpLmRyb3AoKS5pdGVyYXRlKCkKIAogCiBkZWYgdGVzdF9iaWdpbnRfcG9zaXRpdmUocmVtb3RlX2Nvbm5lY3Rpb24pOgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbW90ZV9jb25uZWN0aW9uLl9jbGllbnQuX21lc3NhZ2Vfc2VyaWFsaXplciwgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShyZW1vdGVfY29ubmVjdGlvbi5fY2xpZW50LnJlc3BvbnNlX3NlcmlhbGl6ZXIoKSwgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KToKICAgICAgICAgcmV0dXJuCiAKICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCiAgICAgYmlnID0gYmlnaW50KDB4MTAwMF8wMDAwXzAwMDBfMDAwMF8wMDAwKQotICAgIHJlc3AgPSBnLmFkZFYoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2JpZ2ludCcsIGJpZykudG9MaXN0KCkKKyAgICByZXNwID0gZy53aXRoXygnbGFuZ3VhZ2UnLCAnZ3JlbWxpbi1sYW5nJykuYWRkX3YoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2JpZ2ludCcsIGJpZykudG9fbGlzdCgpCiAgICAgdmlkID0gcmVzcFswXS5pZAogICAgIHRyeToKLSAgICAgICAgYmlnaW50X3Byb3AgPSBnLlYodmlkKS5wcm9wZXJ0aWVzKCdiaWdpbnQnKS50b0xpc3QoKVswXQorICAgICAgICBiaWdpbnRfcHJvcCA9IGcud2l0aF8oJ2xhbmd1YWdlJywgJ2dyZW1saW4tbGFuZycpLlYodmlkKS5wcm9wZXJ0aWVzKCdiaWdpbnQnKS50b19saXN0KClbMF0KICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmlnaW50X3Byb3AudmFsdWUsIGludCkKICAgICAgICAgYXNzZXJ0IGJpZ2ludF9wcm9wLnZhbHVlID09IGJpZwogICAgIGZpbmFsbHk6CkBAIC0xNjcsMTUgKzE0MiwxNSBAQAogCiAKIGRlZiB0ZXN0X2JpZ2ludF9uZWdhdGl2ZShyZW1vdGVfY29ubmVjdGlvbik6Ci0gICAgaWYgbm90IGlzaW5zdGFuY2UocmVtb3RlX2Nvbm5lY3Rpb24uX2NsaWVudC5fbWVzc2FnZV9zZXJpYWxpemVyLCBHcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjEpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbW90ZV9jb25uZWN0aW9uLl9jbGllbnQucmVzcG9uc2Vfc2VyaWFsaXplcigpLCBHcmFwaEJpbmFyeVNlcmlhbGl6ZXJzVjQpOgogICAgICAgICByZXR1cm4KIAogICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhyZW1vdGVfY29ubmVjdGlvbikKICAgICBiaWcgPSBiaWdpbnQoLTB4MTAwMF8wMDAwXzAwMDBfMDAwMF8wMDAwKQotICAgIHJlc3AgPSBnLmFkZFYoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2JpZ2ludCcsIGJpZykudG9MaXN0KCkKKyAgICByZXNwID0gZy53aXRoXygnbGFuZ3VhZ2UnLCAnZ3JlbWxpbi1sYW5nJykuYWRkX3YoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2JpZ2ludCcsIGJpZykudG9fbGlzdCgpCiAgICAgdmlkID0gcmVzcFswXS5pZAogICAgIHRyeToKLSAgICAgICAgYmlnaW50X3Byb3AgPSBnLlYodmlkKS5wcm9wZXJ0aWVzKCdiaWdpbnQnKS50b0xpc3QoKVswXQorICAgICAgICBiaWdpbnRfcHJvcCA9IGcud2l0aF8oJ2xhbmd1YWdlJywgJ2dyZW1saW4tbGFuZycpLlYodmlkKS5wcm9wZXJ0aWVzKCdiaWdpbnQnKS50b19saXN0KClbMF0KICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmlnaW50X3Byb3AudmFsdWUsIGludCkKICAgICAgICAgYXNzZXJ0IGJpZ2ludF9wcm9wLnZhbHVlID09IGJpZwogICAgIGZpbmFsbHk6CkBAIC0xODMsMTUgKzE1OCwxNSBAQAogCiAKIGRlZiB0ZXN0X2JpZ2RlY2ltYWwocmVtb3RlX2Nvbm5lY3Rpb24pOgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHJlbW90ZV9jb25uZWN0aW9uLl9jbGllbnQuX21lc3NhZ2Vfc2VyaWFsaXplciwgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1YxKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShyZW1vdGVfY29ubmVjdGlvbi5fY2xpZW50LnJlc3BvbnNlX3NlcmlhbGl6ZXIoKSwgR3JhcGhCaW5hcnlTZXJpYWxpemVyc1Y0KToKICAgICAgICAgcmV0dXJuCiAKICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8ocmVtb3RlX2Nvbm5lY3Rpb24pCi0gICAgYmlnZGVjaW1hbCA9IEJpZ0RlY2ltYWwoMTAxLCAyMzUpCi0gICAgcmVzcCA9IGcuYWRkVigndGVzdF92ZXJ0ZXgnKS5wcm9wZXJ0eSgnYmlnZGVjaW1hbCcsIGJpZ2RlY2ltYWwpLnRvTGlzdCgpCisgICAgYmlnZGVjaW1hbCA9IEJpZ0RlY2ltYWwoMTAsIDIzNSkKKyAgICByZXNwID0gZy53aXRoXygnbGFuZ3VhZ2UnLCAnZ3JlbWxpbi1sYW5nJykuYWRkX3YoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2JpZ2RlY2ltYWwnLCBiaWdkZWNpbWFsKS50b19saXN0KCkKICAgICB2aWQgPSByZXNwWzBdLmlkCiAgICAgdHJ5OgotICAgICAgICBiaWdkZWNpbWFsX3Byb3AgPSBnLlYodmlkKS5wcm9wZXJ0aWVzKCdiaWdkZWNpbWFsJykudG9MaXN0KClbMF0KKyAgICAgICAgYmlnZGVjaW1hbF9wcm9wID0gZy53aXRoXygnbGFuZ3VhZ2UnLCAnZ3JlbWxpbi1sYW5nJykuVih2aWQpLnByb3BlcnRpZXMoJ2JpZ2RlY2ltYWwnKS5uZXh0KCkKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmlnZGVjaW1hbF9wcm9wLnZhbHVlLCBCaWdEZWNpbWFsKQogICAgICAgICBhc3NlcnQgYmlnZGVjaW1hbF9wcm9wLnZhbHVlLnNjYWxlID09IGJpZ2RlY2ltYWwuc2NhbGUKICAgICAgICAgYXNzZXJ0IGJpZ2RlY2ltYWxfcHJvcC52YWx1ZS51bnNjYWxlZF92YWx1ZSA9PSBiaWdkZWNpbWFsLnVuc2NhbGVkX3ZhbHVlCkBAIC0yMDAsNzQgKzE3NSwzMCBAQAogCiAKIGRlZiB0ZXN0X29kZF9iaXRzKHJlbW90ZV9jb25uZWN0aW9uKToKLSAgICBpZiBub3QgaXNpbnN0YW5jZShyZW1vdGVfY29ubmVjdGlvbi5fY2xpZW50Ll9tZXNzYWdlX3NlcmlhbGl6ZXIsIEdyYXBoU09OU2VyaWFsaXplcnNWMmQwKToKLSAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQotICAgICAgICBjaGFyX2xvd2VyID0gc3RyLl9fbmV3X18oU2luZ2xlQ2hhciwgY2hyKDc4KSkKLSAgICAgICAgcmVzcCA9IGcuYWRkVigndGVzdF92ZXJ0ZXgnKS5wcm9wZXJ0eSgnY2hhcl9sb3dlcicsIGNoYXJfbG93ZXIpLnRvTGlzdCgpCi0gICAgICAgIHZpZCA9IHJlc3BbMF0uaWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IGcuVih2aWQpLnZhbHVlcygnY2hhcl9sb3dlcicpLnRvTGlzdCgpWzBdCi0gICAgICAgICAgICBhc3NlcnQgdiA9PSBjaGFyX2xvd2VyCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBnLlYodmlkKS5kcm9wKCkuaXRlcmF0ZSgpCi0KLSAgICAgICAgY2hhcl91cHBlciA9IHN0ci5fX25ld19fKFNpbmdsZUNoYXIsIGNocig1NzM0NCkpCi0gICAgICAgIHJlc3AgPSBnLmFkZFYoJ3Rlc3RfdmVydGV4JykucHJvcGVydHkoJ2NoYXJfdXBwZXInLCBjaGFyX3VwcGVyKS50b0xpc3QoKQotICAgICAgICB2aWQgPSByZXNwWzBdLmlkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHYgPSBnLlYodmlkKS52YWx1ZXMoJ2NoYXJfdXBwZXInKS50b0xpc3QoKVswXQotICAgICAgICAgICAgYXNzZXJ0IHYgPT0gY2hhcl91cHBlcgotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQotCi0gICAgICAgIGR1ciA9IGRhdGV0aW1lLnRpbWVkZWx0YShzZWNvbmRzPTEwMDAsIG1pY3Jvc2Vjb25kcz0xMDAwKQotICAgICAgICByZXNwID0gZy5hZGRWKCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCdkdXInLCBkdXIpLnRvTGlzdCgpCi0gICAgICAgIHZpZCA9IHJlc3BbMF0uaWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IGcuVih2aWQpLnZhbHVlcygnZHVyJykudG9MaXN0KClbMF0KLSAgICAgICAgICAgIGFzc2VydCB2ID09IGR1cgotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQotCi1kZWYgdGVzdF90aW1lc3RhbXAocmVtb3RlX2Nvbm5lY3Rpb25fZ3JhcGhzb25WMik6Ci0gICAgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUocmVtb3RlX2Nvbm5lY3Rpb25fZ3JhcGhzb25WMikKLSAgICB0cyA9IHRpbWVzdGFtcCgxNDgxNzUwMDc2Mjk1IC8gMTAwMCkKLSAgICByZXNwID0gZy5hZGRWKCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCd0cycsIHRzKQotICAgIHJlc3AgPSByZXNwLnRvTGlzdCgpCisgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKHJlbW90ZV9jb25uZWN0aW9uKQorICAgIGNoYXJfbG93ZXIgPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNzgpKQorICAgIHJlc3AgPSBnLmFkZF92KCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCdjaGFyX2xvd2VyJywgY2hhcl9sb3dlcikudG9fbGlzdCgpCiAgICAgdmlkID0gcmVzcFswXS5pZAogICAgIHRyeToKLSAgICAgICAgdHNfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ3RzJykudG9MaXN0KClbMF0KLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodHNfcHJvcC52YWx1ZSwgdGltZXN0YW1wKQotICAgICAgICBhc3NlcnQgdHNfcHJvcC52YWx1ZSA9PSB0cwotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBhc3NlcnQgRmFsc2UsICJFcnJvciBtYWtpbmcgcmVxdWVzdCIKKyAgICAgICAgdiA9IGcuVih2aWQpLnZhbHVlcygnY2hhcl9sb3dlcicpLnRvX2xpc3QoKVswXQorICAgICAgICBhc3NlcnQgdiA9PSBjaGFyX2xvd2VyCiAgICAgZmluYWxseToKICAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQogCi1kZWYgdGVzdF9kYXRldGltZShyZW1vdGVfY29ubmVjdGlvbl9ncmFwaHNvblYyKToKLSAgICBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShyZW1vdGVfY29ubmVjdGlvbl9ncmFwaHNvblYyKQotICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgxNDgxNzUwMDc2Mjk1IC8gMTAwMCkKLSAgICByZXNwID0gZy5hZGRWKCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCdkdCcsIGR0KS50b0xpc3QoKQorICAgIGNoYXJfdXBwZXIgPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNTczNDQpKQorICAgIHJlc3AgPSBnLmFkZF92KCd0ZXN0X3ZlcnRleCcpLnByb3BlcnR5KCdjaGFyX3VwcGVyJywgY2hhcl91cHBlcikudG9fbGlzdCgpCiAgICAgdmlkID0gcmVzcFswXS5pZAogICAgIHRyeToKLSAgICAgICAgZHRfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ2R0JykudG9MaXN0KClbMF0KLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZHRfcHJvcC52YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpCi0gICAgICAgIGFzc2VydCBkdF9wcm9wLnZhbHVlID09IGR0Ci0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIGFzc2VydCBGYWxzZSwgIkVycm9yIG1ha2luZyByZXF1ZXN0IgorICAgICAgICB2ID0gZy5WKHZpZCkudmFsdWVzKCdjaGFyX3VwcGVyJykudG9fbGlzdCgpWzBdCisgICAgICAgIGFzc2VydCB2ID09IGNoYXJfdXBwZXIKICAgICBmaW5hbGx5OgogICAgICAgICBnLlYodmlkKS5kcm9wKCkuaXRlcmF0ZSgpCiAKLWRlZiB0ZXN0X3V1aWQocmVtb3RlX2Nvbm5lY3Rpb25fZ3JhcGhzb25WMik6Ci0gICAgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUocmVtb3RlX2Nvbm5lY3Rpb25fZ3JhcGhzb25WMikKLSAgICB1aWQgPSB1dWlkLlVVSUQoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpCi0gICAgcmVzcCA9IGcuYWRkVigndGVzdF92ZXJ0ZXgnKS5wcm9wZXJ0eSgndXVpZCcsIHVpZCkudG9MaXN0KCkKKyAgICBkdXIgPSB0aW1lZGVsdGEoc2Vjb25kcz0xMDAwLCBtaWNyb3NlY29uZHM9MTAwMCkKKyAgICByZXNwID0gZy5hZGRfdigndGVzdF92ZXJ0ZXgnKS5wcm9wZXJ0eSgnZHVyJywgZHVyKS50b19saXN0KCkKICAgICB2aWQgPSByZXNwWzBdLmlkCiAgICAgdHJ5OgotICAgICAgICB1aWRfcHJvcCA9IGcuVih2aWQpLnByb3BlcnRpZXMoJ3V1aWQnKS50b0xpc3QoKVswXQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh1aWRfcHJvcC52YWx1ZSwgdXVpZC5VVUlEKQotICAgICAgICBhc3NlcnQgdWlkX3Byb3AudmFsdWUgPT0gdWlkCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIGFzc2VydCBGYWxzZSwgIkVycm9yIG1ha2luZyByZXF1ZXN0IgorICAgICAgICB2ID0gZy5WKHZpZCkudmFsdWVzKCdkdXInKS50b19saXN0KClbMF0KKyAgICAgICAgYXNzZXJ0IHYgPT0gZHVyCiAgICAgZmluYWxseToKLSAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgICAgZy5WKHZpZCkuZHJvcCgpLml0ZXJhdGUoKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvaW8vdGVzdF9ncmFwaGJpbmFyeVYxLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvaW8vdGVzdF9ncmFwaGJpbmFyeVYxLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2FlZTk4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L2lvL3Rlc3RfZ3JhcGhiaW5hcnlWMS5weQorKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0iIiIKLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLW9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLXJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLXRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLXdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi1zcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi11bmRlciB0aGUgTGljZW5zZS4KLSIiIgotCi1pbXBvcnQgdXVpZAotaW1wb3J0IG1hdGgKLQotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YSwgdGltZXpvbmUKLWZyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgbG9uZywgYmlnaW50LCBCaWdEZWNpbWFsLCBTaW5nbGVCeXRlLCBTaW5nbGVDaGFyLCBCeXRlQnVmZmVyVHlwZSwgdGltZXN0YW1wCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgVmVydGV4LCBFZGdlLCBQcm9wZXJ0eSwgVmVydGV4UHJvcGVydHksIFBhdGgKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLmdyYXBoYmluYXJ5VjEgaW1wb3J0IEdyYXBoQmluYXJ5V3JpdGVyLCBHcmFwaEJpbmFyeVJlYWRlcgotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgQmFycmllciwgQmluZGluZywgQnl0ZWNvZGUsIE1lcmdlLCBEaXJlY3Rpb24KLQotCi1jbGFzcyBUZXN0R3JhcGhCaW5hcnlSZWFkZXIob2JqZWN0KToKLSAgICBncmFwaGJpbmFyeV9yZWFkZXIgPSBHcmFwaEJpbmFyeVJlYWRlcigpCi0KLQotY2xhc3MgVGVzdEdyYXBoQmluYXJ5V3JpdGVyKG9iamVjdCk6Ci0gICAgZ3JhcGhiaW5hcnlfd3JpdGVyID0gR3JhcGhCaW5hcnlXcml0ZXIoKQotICAgIGdyYXBoYmluYXJ5X3JlYWRlciA9IEdyYXBoQmluYXJ5UmVhZGVyKCkKLQotICAgIGRlZiB0ZXN0X251bGwoc2VsZik6Ci0gICAgICAgIGMgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoTm9uZSkpCi0gICAgICAgIGFzc2VydCBjIGlzIE5vbmUKLQotICAgIGRlZiB0ZXN0X2ludChzZWxmKToKLSAgICAgICAgeCA9IDEwMAotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKLSAgICAgICAgeCA9IGxvbmcoMTAwKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfYmlnaW50KHNlbGYpOgotICAgICAgICB4ID0gYmlnaW50KDB4MTAwMF8wMDAwXzAwMDBfMDAwMF8wMDAwKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6Ci0gICAgICAgIHggPSBmbG9hdCgxMDAuMDAxKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgICAgIHggPSBmbG9hdCgnbmFuJykKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgbWF0aC5pc25hbihvdXRwdXQpCi0KLSAgICAgICAgeCA9IGZsb2F0KCctaW5mJykKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgbWF0aC5pc2luZihvdXRwdXQpIGFuZCBvdXRwdXQgPCAwCi0KLSAgICAgICAgeCA9IGZsb2F0KCdpbmYnKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCBtYXRoLmlzaW5mKG91dHB1dCkgYW5kIG91dHB1dCA+IDAKLQotICAgIGRlZiB0ZXN0X2RvdWJsZShzZWxmKToKLSAgICAgICAgeCA9IDEwMC4wMDEKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2JpZ2RlY2ltYWwoc2VsZik6Ci0gICAgICAgIHggPSBCaWdEZWNpbWFsKDEwMCwgMjM0KQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4LnNjYWxlID09IG91dHB1dC5zY2FsZQotICAgICAgICBhc3NlcnQgeC51bnNjYWxlZF92YWx1ZSA9PSBvdXRwdXQudW5zY2FsZWRfdmFsdWUKLQotICAgIGRlZiB0ZXN0X2RhdGUoc2VsZik6Ci0gICAgICAgIHggPSBkYXRldGltZSgyMDE2LCAxMiwgMTQsIDE2LCAxNCwgMzYsIDI5NTAwMCkKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgeCA9IHRpbWVzdGFtcCgxNDgxNzUwMDc2Mjk1IC8gMTAwMCkKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X29mZnNldGRhdGV0aW1lKHNlbGYpOgotICAgICAgICB0eiA9IHRpbWV6b25lKHRpbWVkZWx0YShzZWNvbmRzPTM2MDAwKSkKLSAgICAgICAgbXMgPSAxMjM0NTY3ODkxMgotICAgICAgICB4ID0gZGF0ZXRpbWUoMjAyMiwgNSwgMjAsIHR6aW5mbz10eikgKyB0aW1lZGVsdGEobWljcm9zZWNvbmRzPW1zKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3Rfb2Zmc2V0ZGF0ZXRpbWVfZm9ybWF0KHNlbGYpOgotICAgICAgICB4ID0gZGF0ZXRpbWUuc3RycHRpbWUoJzIwMjItMDUtMjBUMDM6MjU6NDUuNjc4OTEyWicsICclWS0lbS0lZFQlSDolTTolUy4lZiV6JykKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X29mZnNldGRhdGV0aW1lX2xvY2FsKHNlbGYpOgotICAgICAgICB4ID0gZGF0ZXRpbWUubm93KCkuYXN0aW1lem9uZSgpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKLSAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9vZmZzZXRkYXRldGltZV9lcG9jaChzZWxmKToKLSAgICAgICAgeCA9IGRhdGV0aW1lLmZyb210aW1lc3RhbXAoMTY5MDkzNDQwMCkuYXN0aW1lem9uZSh0aW1lem9uZS51dGMpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKLSAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHggPSAic2VyaWFsaXplIHRoaXMhIgotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfaG9tb2dlbmVvdXNfbGlzdChzZWxmKToKLSAgICAgICAgeCA9IFsic2VyaWFsaXplIHRoaXMhIiwgInNlcmlhbGl6ZSB0aGF0ISIsICJzZXJpYWxpemUgdGhhdCEiLCJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiXQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfaGV0ZXJvZ2VuZW91c19saXN0KHNlbGYpOgotICAgICAgICB4ID0gWyJzZXJpYWxpemUgdGhpcyEiLCAwLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsIDEsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiLCAyXQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfaGV0ZXJvZ2VuZW91c19saXN0X3dpdGhfbm9uZShzZWxmKToKLSAgICAgICAgeCA9IFsic2VyaWFsaXplIHRoaXMhIiwgMCwgInNlcmlhbGl6ZSB0aGF0ISIsICJzZXJpYWxpemUgdGhhdCEiLCAxLCAic3RvcCB0ZWxsaW5nIG1lIHdoYXQgdG8gc2VyaWFsaXplIiwgMiwgTm9uZV0KLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2hvbW9nZW5lb3VzX3NldChzZWxmKToKLSAgICAgICAgeCA9IHsic2VyaWFsaXplIHRoaXMhIiwgInNlcmlhbGl6ZSB0aGF0ISIsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUifQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfaGV0ZXJvZ2VuZW91c19zZXQoc2VsZik6Ci0gICAgICAgIHggPSB7InNlcmlhbGl6ZSB0aGlzISIsIDAsICJzZXJpYWxpemUgdGhhdCEiLCAxLCAic3RvcCB0ZWxsaW5nIG1lIHdoYXQgdG8gc2VyaWFsaXplIiwgMn0KLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X3NldF93aXRoX3VuaGFzaGFibGVfZGljdF9lbGVtZW50cyhzZWxmKToKLSAgICAgICAgIyB0ZXN0IHRoYXQgc2V0cyBjb250YWluaW5nIGRpY3RzIGFyZSBjb2VyY2VkIHRvIGxpc3QgLSBzZWUgVElOS0VSUE9QLTMyMzIKLSAgICAgICAgeCA9IFt7Im5hbWUiOiAibWFya28iLCAiYWdlIjogMjl9LCB7Im5hbWUiOiAiam9zaCIsICJhZ2UiOiAzMn1dCi0gICAgICAgIGxpc3RfcGF5bG9hZCA9IHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KQotICAgICAgICAjIHBhdGNoIG91dGVyIHR5cGUgZnJvbSBsaXN0ICgweDA5KSB0byBzZXQgKDB4MGIpCi0gICAgICAgIHNldF9wYXlsb2FkID0gYnl0ZWFycmF5KGxpc3RfcGF5bG9hZCkKLSAgICAgICAgc2V0X3BheWxvYWRbMF0gPSAweDBiCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNldF9wYXlsb2FkKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQsIGxpc3QpCi0gICAgICAgIGFzc2VydCBsZW4ob3V0cHV0KSA9PSAyCi0KLSAgICBkZWYgdGVzdF9zZXRfd2l0aF91bmhhc2hhYmxlX2xpc3RfZWxlbWVudHMoc2VsZik6Ci0gICAgICAgICMgdGVzdCB0aGF0IHNldHMgY29udGFpbmluZyBsaXN0cyBhcmUgY29lcmNlZCB0byBsaXN0IC0gc2VlIFRJTktFUlBPUC0zMjMyCi0gICAgICAgIGxpc3RfcGF5bG9hZCA9IHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdChbWyJtYXJrbyIsICJqb3NoIl0sIFsidmFkYXMiLCAicGV0ZXIiXV0pCi0gICAgICAgICMgdGhlIGZpcnN0IGJ5dGUgaXMgdGhlIERhdGFUeXBlIGZvciBsaXN0ICgweDA5KSwgY2hhbmdlIGl0IHRvIHNldCAoMHgwYikKLSAgICAgICAgc2V0X3BheWxvYWQgPSBieXRlYXJyYXkobGlzdF9wYXlsb2FkKQotICAgICAgICBzZXRfcGF5bG9hZFswXSA9IDB4MGIKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2V0X3BheWxvYWQpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkKLSAgICAgICAgYXNzZXJ0IGxlbihvdXRwdXQpID09IDIKLQotICAgIGRlZiB0ZXN0X3NldF93aXRoX21peGVkX2hhc2hhYmxlX2FuZF91bmhhc2hhYmxlX2VsZW1lbnRzKHNlbGYpOgotICAgICAgICAjIHRlc3QgdGhhdCBzZXRzIGNvbnRhaW5pbmcgYSBtaXggb2YgaGFzaGFibGUgYW5kIHVuaGFzaGFibGUgZWxlbWVudHMgYXJlIGNvZXJjZWQgdG8gbGlzdCAtIHNlZSBUSU5LRVJQT1AtMzIzMgotICAgICAgICB4ID0gWyJtYXJrbyIsIHsibmFtZSI6ICJqb3NoIn0sIDQyXQotICAgICAgICBsaXN0X3BheWxvYWQgPSBzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkKLSAgICAgICAgc2V0X3BheWxvYWQgPSBieXRlYXJyYXkobGlzdF9wYXlsb2FkKQotICAgICAgICBzZXRfcGF5bG9hZFswXSA9IDB4MGIKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2V0X3BheWxvYWQpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkKLSAgICAgICAgYXNzZXJ0IGxlbihvdXRwdXQpID09IDMKLQotICAgIGRlZiB0ZXN0X3NldF93aXRoX25lc3RlZF91bmhhc2hhYmxlX2VsZW1lbnRzKHNlbGYpOgotICAgICAgICAjIHRlc3QgdGhhdCBzZXRzIGNvbnRhaW5pbmcgZGljdHMgd2l0aCBsaXN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBsaXN0IC0gc2VlIFRJTktFUlBPUC0zMjMyCi0gICAgICAgIHggPSBbeyJuYW1lIjogIm1hcmtvIiwgImxhbmdzIjogWyJqYXZhIiwgInB5dGhvbiJdfSwgeyJuYW1lIjogImpvc2giLCAibGFuZ3MiOiBbImdyZW1saW4iXX1dCi0gICAgICAgIGxpc3RfcGF5bG9hZCA9IHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KQotICAgICAgICAjIHBhdGNoIG91dGVyIHR5cGUgZnJvbSBsaXN0ICgweDA5KSB0byBzZXQgKDB4MGIpCi0gICAgICAgIHNldF9wYXlsb2FkID0gYnl0ZWFycmF5KGxpc3RfcGF5bG9hZCkKLSAgICAgICAgc2V0X3BheWxvYWRbMF0gPSAweDBiCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNldF9wYXlsb2FkKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQsIGxpc3QpCi0gICAgICAgIGFzc2VydCBsZW4ob3V0cHV0KSA9PSAyCi0KLSAgICBkZWYgdGVzdF9kaWN0KHNlbGYpOgotICAgICAgICB4ID0geyJ5byI6ICJ3aGF0PyIsCi0gICAgICAgICAgICAgImdvIjogIm5vISIsCi0gICAgICAgICAgICAgIm51bWJlciI6IDEyMywKLSAgICAgICAgICAgICAzMjE6ICJjcmF6eSB3aXRoIHRoZSBudW1iZXIgZm9yIGEga2V5IiwKLSAgICAgICAgICAgICA5ODc6IFsiZ28iLCAiZGVlcCIsIHsiaGVyZSI6ICIhIn1dfQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgICAgIHggPSB7Im1hcmtvIjogWzY2Nl0sICJub29uZSI6IFsiYmxhaCJdfQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgICAgIHggPSB7InJpcHBsZSI6IFtdLCAicGV0ZXIiOiBbImNyZWF0ZWQiXSwgIm5vb25lIjogWyJibGFoIl0sICJ2YWRhcyI6IFtdLAotICAgICAgICAgICAgICJqb3NoIjogWyJjcmVhdGVkIiwgImNyZWF0ZWQiXSwgImxvcCI6IFtdLCAibWFya28iOiBbNjY2LCAiY3JlYXRlZCIsICJrbm93cyIsICJrbm93cyJdfQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfdXVpZChzZWxmKToKLSAgICAgICAgeCA9IHV1aWQuVVVJRCgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2VkZ2Uoc2VsZik6Ci0gICAgICAgIHggPSBFZGdlKDEyMywgVmVydGV4KDEsICdwZXJzb24nKSwgImRldmVsb3BlZCIsIFZlcnRleCgxMCwgInNvZnR3YXJlIikpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKLSAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0Ci0gICAgICAgIGFzc2VydCB4LmluViA9PSBvdXRwdXQuaW5WCi0gICAgICAgIGFzc2VydCB4Lm91dFYgPT0gb3V0cHV0Lm91dFYKLQotICAgIGRlZiB0ZXN0X3BhdGgoc2VsZik6Ci0gICAgICAgIHggPSBQYXRoKFsieCIsICJ5IiwgInoiXSwgWzEsIDIsIDNdKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfcHJvcGVydHkoc2VsZik6Ci0gICAgICAgIHggPSBQcm9wZXJ0eSgibmFtZSIsICJzdGVwaGVuIiwgTm9uZSkKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X3ZlcnRleChzZWxmKToKLSAgICAgICAgeCA9IFZlcnRleCgxMjMsICJwZXJzb24iKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfdmVydGV4cHJvcGVydHkoc2VsZik6Ci0gICAgICAgIHggPSBWZXJ0ZXhQcm9wZXJ0eSgxMjMsICJuYW1lIiwgInN0ZXBoZW4iLCBOb25lKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotICAgICAgICAKLSAgICBkZWYgdGVzdF9iYXJyaWVyKHNlbGYpOgotICAgICAgICB4ID0gQmFycmllci5ub3JtX3NhY2sKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgotICAgICAgICB4ID0gTWVyZ2Uub25fbWF0Y2gKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2RpcmVjdGlvbihzZWxmKToKLSAgICAgICAgeCA9IERpcmVjdGlvbi5PVVQKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgICAgICB4ID0gRGlyZWN0aW9uLmZyb21fCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKLSAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9iaW5kaW5nKHNlbGYpOgotICAgICAgICB4ID0gQmluZGluZygibmFtZSIsICJtYXJrbyIpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKLSAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9ieXRlY29kZShzZWxmKToKLSAgICAgICAgeCA9IEJ5dGVjb2RlKCkKLSAgICAgICAgeC5zb3VyY2VfaW5zdHJ1Y3Rpb25zLmFwcGVuZChbIndpdGhTdHJhdGVnaWVzIiwgIlN1YmdyYXBoU3RyYXRlZ3kiXSkKLSAgICAgICAgeC5zdGVwX2luc3RydWN0aW9ucy5hcHBlbmQoWyJWIiwgMSwgMiwgM10pCi0gICAgICAgIHguc3RlcF9pbnN0cnVjdGlvbnMuYXBwZW5kKFsib3V0Il0pCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKLSAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9ieXRlKHNlbGYpOgotICAgICAgICB4ID0gaW50Ll9fbmV3X18oU2luZ2xlQnl0ZSwgMSkKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2J5dGVidWZmZXIoc2VsZik6Ci0gICAgICAgIHggPSBCeXRlQnVmZmVyVHlwZSgiYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxIiwgInV0ZjgiKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfYm9vbGVhbihzZWxmKToKLSAgICAgICAgeCA9IFRydWUKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgICAgICB4ID0gRmFsc2UKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2NoYXIoc2VsZik6Ci0gICAgICAgIHggPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNzYpKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgICAgIHggPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNTczNDQpKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCi0gICAgICAgIGFzc2VydCB4ID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfZHVyYXRpb24oc2VsZik6Ci0gICAgICAgIHggPSB0aW1lZGVsdGEoc2Vjb25kcz0xMDAwLCBtaWNyb3NlY29uZHM9MTAwMCkKLSAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQotICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L2lvL3Rlc3RfZ3JhcGhzb25WMmQwLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvaW8vdGVzdF9ncmFwaHNvblYyZDAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliODIyYzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvaW8vdGVzdF9ncmFwaHNvblYyZDAucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1MzkgKzAsMCBAQAotIwotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi1fX2F1dGhvcl9fID0gJ01hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSknCi0KLWltcG9ydCBkYXRldGltZQotaW1wb3J0IGNhbGVuZGFyCi1pbXBvcnQganNvbgotaW1wb3J0IHV1aWQKLWltcG9ydCBtYXRoCi1mcm9tIGRlY2ltYWwgaW1wb3J0ICoKLQotZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBNb2NrCi0KLWZyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgKgotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IFZlcnRleCwgRWRnZSwgUHJvcGVydHksIFZlcnRleFByb3BlcnR5LCBHcmFwaCwgUGF0aAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WMmQwIGltcG9ydCBHcmFwaFNPTldyaXRlciwgR3JhcGhTT05SZWFkZXIsIEdyYXBoU09OVXRpbAotaW1wb3J0IGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaHNvblYyZDAKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFAsIE1lcmdlLCBPcGVyYXRvciwgT3JkZXIsIEJhcnJpZXIsIERpcmVjdGlvbgotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0IFN1YmdyYXBoU3RyYXRlZ3kKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MuYW5vbnltb3VzX3RyYXZlcnNhbCBpbXBvcnQgdHJhdmVyc2FsCi0KLQotY2xhc3MgVGVzdEdyYXBoU09OUmVhZGVyOgotICAgIGdyYXBoc29uX3JlYWRlciA9IEdyYXBoU09OUmVhZGVyKCkKLQotICAgIGRlZiB0ZXN0X251bWJlcl9pbnB1dChzZWxmKToKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImd4OkJ5dGUiLAotICAgICAgICAgICAgIkB2YWx1ZSI6IDEKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIFNpbmdsZUJ5dGUpCi0gICAgICAgIGFzc2VydCAxID09IHgKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImd4OkludDE2IiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAxNgotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgc2hvcnQpCi0gICAgICAgIGFzc2VydCAxNiA9PSB4Ci0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAzMQotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgaW50KQotICAgICAgICBhc3NlcnQgMzEgPT0geAotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIjogMzEKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxvbmcpCi0gICAgICAgIGFzc2VydCBsb25nKDMxKSA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJnOkZsb2F0IiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAzMS4zCi0gICAgICAgIH0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBmbG9hdCkKLSAgICAgICAgYXNzZXJ0IDMxLjMgPT0geAotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSI6IDMxLjIKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGZsb2F0KQotICAgICAgICBhc3NlcnQgMzEuMiA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIjogIk5hTiIKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGZsb2F0KQotICAgICAgICBhc3NlcnQgbWF0aC5pc25hbih4KQotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSI6ICJJbmZpbml0eSIKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGZsb2F0KQotICAgICAgICBhc3NlcnQgbWF0aC5pc2luZih4KSBhbmQgeCA+IDAKLSAgICAgICAgIyMKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAiLUluZmluaXR5IgotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgZmxvYXQpCi0gICAgICAgIGFzc2VydCBtYXRoLmlzaW5mKHgpIGFuZCB4IDwgMAotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZ3g6QmlnRGVjaW1hbCIsCi0gICAgICAgICAgICAiQHZhbHVlIjogMzEuMgotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgQmlnRGVjaW1hbCkKLSAgICAgICAgYXNzZXJ0IGJpZ2RlY2ltYWwoMzEuMikgPT0geAotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZ3g6QmlnRGVjaW1hbCIsCi0gICAgICAgICAgICAiQHZhbHVlIjogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxCi0gICAgICAgIH0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBCaWdEZWNpbWFsKQotICAgICAgICBhc3NlcnQgYmlnZGVjaW1hbCgnMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxJykgPT0geAotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZ3g6QmlnSW50ZWdlciIsCi0gICAgICAgICAgICAiQHZhbHVlIjogMzEKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxvbmcpCi0gICAgICAgIGFzc2VydCAzMSA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJneDpCaWdJbnRlZ2VyIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxvbmcpCi0gICAgICAgIGFzc2VydCAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEgPT0geAotCi0gICAgZGVmIHRlc3RfZ3JhcGgoc2VsZik6Ci0gICAgICAgIHZlcnRleCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgotICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjoicGVyc29uIiwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjowfSwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9fV0sImFnZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MX0sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjl9LCJsYWJlbCI6ImFnZSJ9fV19fX0iIiIpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleCwgVmVydGV4KQotICAgICAgICBhc3NlcnQgInBlcnNvbiIgPT0gdmVydGV4LmxhYmVsCi0gICAgICAgIGFzc2VydCAxID09IHZlcnRleC5pZAotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2ZXJ0ZXguaWQsIGludCkKLSAgICAgICAgYXNzZXJ0IHZlcnRleCA9PSBWZXJ0ZXgoMSkKLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHZlcnRleC5wcm9wZXJ0aWVzKQotICAgICAgICAjIGFzc2VydCBhY3R1YWwgcHJvcGVydHkgdmFsdWVzIC0gVmVydGV4LnByb3BlcnRpZXMgc2hvdWxkIGJlIFZlcnRleFByb3BlcnR5IG9iamVjdHMKLSAgICAgICAgYXNzZXJ0IGFueSh2cC5sYWJlbCA9PSAnbmFtZScgYW5kIHZwLnZhbHVlID09ICdtYXJrbycgZm9yIHZwIGluIHZlcnRleC5wcm9wZXJ0aWVzKQotICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICdhZ2UnIGFuZCB2cC52YWx1ZSA9PSAyOSBmb3IgdnAgaW4gdmVydGV4LnByb3BlcnRpZXMpCi0gICAgICAgICMjCi0gICAgICAgIHZlcnRleCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgotICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpGbG9hdCIsIkB2YWx1ZSI6NDUuMjN9fX0iIiIpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleCwgVmVydGV4KQotICAgICAgICBhc3NlcnQgNDUuMjMgPT0gdmVydGV4LmlkCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleC5pZCwgRmxvYXRUeXBlKQotICAgICAgICBhc3NlcnQgInZlcnRleCIgPT0gdmVydGV4LmxhYmVsCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXggPT0gVmVydGV4KDQ1LjIzKQotICAgICAgICAjIHByb3BlcnRpZXMga2V5IG9taXR0ZWQgc2hvdWxkIHlpZWxkIGVtcHR5IGxpc3QKLSAgICAgICAgYXNzZXJ0IHZlcnRleC5wcm9wZXJ0aWVzID09IFtdCi0gICAgICAgICMjCi0gICAgICAgICMgdmVydGV4IHdpdGggZXhwbGljaXQgbGFiZWwgYW5kIHdpdGhvdXQgcHJvcGVydGllcwotICAgICAgICB2ZXJ0ZXggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgICIiIgotICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mn0sImxhYmVsIjoicGVyc29uIn19Ci0gICAgICAgICAgICAiIiIpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleCwgVmVydGV4KQotICAgICAgICBhc3NlcnQgdmVydGV4LmxhYmVsID09ICdwZXJzb24nCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXguaWQgPT0gMgotICAgICAgICBhc3NlcnQgdmVydGV4LnByb3BlcnRpZXMgPT0gW10KLSAgICAgICAgIyMKLSAgICAgICAgdmVydGV4X3Byb3BlcnR5ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwgIkB2YWx1ZSI6eyJpZCI6ImFuSWQiLCJsYWJlbCI6ImFLZXkiLCJ2YWx1ZSI6dHJ1ZSwidmVydGV4Ijp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6OX19fSIiIikKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4X3Byb3BlcnR5LCBWZXJ0ZXhQcm9wZXJ0eSkKLSAgICAgICAgYXNzZXJ0ICJhbklkIiA9PSB2ZXJ0ZXhfcHJvcGVydHkuaWQKLSAgICAgICAgYXNzZXJ0ICJhS2V5IiA9PSB2ZXJ0ZXhfcHJvcGVydHkubGFiZWwKLSAgICAgICAgYXNzZXJ0IHZlcnRleF9wcm9wZXJ0eS52YWx1ZQotICAgICAgICBhc3NlcnQgdmVydGV4X3Byb3BlcnR5LnZlcnRleCA9PSBWZXJ0ZXgoOSkKLSAgICAgICAgIyBubyBwcm9wZXJ0aWVzIGtleSBzaG91bGQgeWllbGQgZW1wdHkgbGlzdCBvZiBtZXRhLXByb3BlcnRpZXMKLSAgICAgICAgYXNzZXJ0IHZlcnRleF9wcm9wZXJ0eS5wcm9wZXJ0aWVzID09IFtdCi0gICAgICAgICMjCi0gICAgICAgIHZlcnRleF9wcm9wZXJ0eSA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgotICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsICJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOiJuYW1lIiwidmFsdWUiOiJtYXJrbyJ9fSIiIikKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4X3Byb3BlcnR5LCBWZXJ0ZXhQcm9wZXJ0eSkKLSAgICAgICAgYXNzZXJ0IDEgPT0gdmVydGV4X3Byb3BlcnR5LmlkCi0gICAgICAgIGFzc2VydCAibmFtZSIgPT0gdmVydGV4X3Byb3BlcnR5LmxhYmVsCi0gICAgICAgIGFzc2VydCAibWFya28iID09IHZlcnRleF9wcm9wZXJ0eS52YWx1ZQotICAgICAgICBhc3NlcnQgdmVydGV4X3Byb3BlcnR5LnZlcnRleCBpcyBOb25lCi0gICAgICAgICMgbm8gcHJvcGVydGllcyBrZXkgc2hvdWxkIHlpZWxkIGVtcHR5IGxpc3Qgb2YgbWV0YS1wcm9wZXJ0aWVzCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXhfcHJvcGVydHkucHJvcGVydGllcyA9PSBbXQotICAgICAgICAjIwotICAgICAgICBlZGdlID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOkVkZ2UiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTd9LCJsYWJlbCI6Imtub3dzIiwiaW5WIjoieCIsIm91dFYiOiJ5IiwiaW5WTGFiZWwiOiJ4TGFiIiwicHJvcGVydGllcyI6eyJhS2V5IjoiYVZhbHVlIiwiYktleSI6dHJ1ZX19fSIiIikKLSAgICAgICAgIyBwcmludCBlZGdlCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVkZ2UsIEVkZ2UpCi0gICAgICAgIGFzc2VydCAxNyA9PSBlZGdlLmlkCi0gICAgICAgIGFzc2VydCAia25vd3MiID09IGVkZ2UubGFiZWwKLSAgICAgICAgYXNzZXJ0IGVkZ2UuaW5WID09IFZlcnRleCgieCIsICJ4TGFiZWwiKQotICAgICAgICBhc3NlcnQgZWRnZS5vdXRWID09IFZlcnRleCgieSIsICJ2ZXJ0ZXgiKQotICAgICAgICAjIwotICAgICAgICAjIGVkZ2Ugd2l0aG91dCBwcm9wZXJ0aWVzIHNob3VsZCB5aWVsZCBlbXB0eSBwcm9wZXJ0aWVzIGxpc3QKLSAgICAgICAgZWRnZTIgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgICIiIgotICAgICAgICB7IkB0eXBlIjoiZzpFZGdlIiwgIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjE4fSwibGFiZWwiOiJrbm93cyIsImluViI6ImEiLCJvdXRWIjoiYiIsImluVkxhYmVsIjoieExhYiJ9fQotICAgICAgICAgICAgIiIiKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShlZGdlMiwgRWRnZSkKLSAgICAgICAgYXNzZXJ0IGVkZ2UyLnByb3BlcnRpZXMgPT0gW10KLSAgICAgICAgIyMKLSAgICAgICAgcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgiIiIKLSAgICAgICAgeyJAdHlwZSI6Imc6UHJvcGVydHkiLCAiQHZhbHVlIjp7ImtleSI6ImFLZXkiLCJ2YWx1ZSI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjE3fSwiZWxlbWVudCI6eyJAdHlwZSI6Imc6RWRnZSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjEyMn0sImxhYmVsIjoia25vd3MiLCJpblYiOiJ4Iiwib3V0ViI6InkiLCJpblZMYWJlbCI6InhMYWIifX19fSIiIikKLSAgICAgICAgIyBwcmludCBwcm9wZXJ0eQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9wZXJ0eSwgUHJvcGVydHkpCi0gICAgICAgIGFzc2VydCAiYUtleSIgPT0gcHJvcGVydHkua2V5Ci0gICAgICAgIGFzc2VydCAxNyA9PSBwcm9wZXJ0eS52YWx1ZQotICAgICAgICBhc3NlcnQgRWRnZSgxMjIsIFZlcnRleCgieCIpLCAia25vd3MiLCBWZXJ0ZXgoInkiKSkgPT0gcHJvcGVydHkuZWxlbWVudAotCi0gICAgZGVmIHRlc3RfcGF0aChzZWxmKToKLSAgICAgICAgIyBvcmlnaW5hbCBwYXRoIHdpdGggdmVydGljZXMgdGhhdCBpbmNsdWRlIHByb3BlcnRpZXMKLSAgICAgICAgcGF0aCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgIiIieyJAdHlwZSI6Imc6UGF0aCIsIkB2YWx1ZSI6eyJsYWJlbHMiOltbImEiXSxbImIiLCJjIl0sW11dLCJvYmplY3RzIjpbeyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjoicGVyc29uIiwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjowfSwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9fV0sImFnZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MX0sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjl9LCJsYWJlbCI6ImFnZSJ9fV19fX0seyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6M30sImxhYmVsIjoic29mdHdhcmUiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjR9LCJ2YWx1ZSI6ImxvcCIsImxhYmVsIjoibmFtZSJ9fV0sImxhbmciOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjV9LCJ2YWx1ZSI6ImphdmEiLCJsYWJlbCI6ImxhbmcifX1dfX19LCJsb3AiXX19IiIiCi0gICAgICAgICkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGF0aCwgUGF0aCkKLSAgICAgICAgYXNzZXJ0ICJwYXRoW3ZbMV0sIHZbM10sIGxvcF0iID09IHN0cihwYXRoKQotICAgICAgICBhc3NlcnQgVmVydGV4KDEpID09IHBhdGhbMF0KLSAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBwYXRoWyJhIl0KLSAgICAgICAgYXNzZXJ0ICJsb3AiID09IHBhdGhbMl0KLSAgICAgICAgYXNzZXJ0IDMgPT0gbGVuKHBhdGgpCi0gICAgICAgICMgZW5zdXJlIGVsZW1lbnQgcHJvcGVydGllcyB3ZXJlIHBvcHVsYXRlZCBmcm9tIEdyYXBoU09OCi0gICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ25hbWUnIGFuZCB2cC52YWx1ZSA9PSAnbWFya28nIGZvciB2cCBpbiBwYXRoWzBdLnByb3BlcnRpZXMpCi0gICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ2FnZScgYW5kIHZwLnZhbHVlID09IDI5IGZvciB2cCBpbiBwYXRoWzBdLnByb3BlcnRpZXMpCi0gICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ25hbWUnIGFuZCB2cC52YWx1ZSA9PSAnbG9wJyBmb3IgdnAgaW4gcGF0aFsxXS5wcm9wZXJ0aWVzKQotICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICdsYW5nJyBhbmQgdnAudmFsdWUgPT0gJ2phdmEnIGZvciB2cCBpbiBwYXRoWzFdLnByb3BlcnRpZXMpCi0KLSAgICAgICAgIyBwYXRoIHdpdGggZWxlbWVudHMgdGhhdCBleGNsdWRlIHByb3BlcnRpZXMgKG5vICJwcm9wZXJ0aWVzIiBrZXkpCi0gICAgICAgIHBhdGgyID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICAiIiJ7IkB0eXBlIjoiZzpQYXRoIiwiQHZhbHVlIjp7ImxhYmVscyI6W1sieCJdLFsieSJdLFsieiJdXSwib2JqZWN0cyI6W3siQHR5cGUiOiJnOlZlcnRleCIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjExfSwibGFiZWwiOiJwZXJzb24ifX0seyJAdHlwZSI6Imc6RWRnZSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjc3fSwibGFiZWwiOiJrbm93cyIsIm91dFYiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMX0sIm91dFZMYWJlbCI6InBlcnNvbiIsImluViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjEyfSwiaW5WTGFiZWwiOiJwZXJzb24ifX0sImhlbGxvIl19fSIiIgotICAgICAgICApCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGgyLCBQYXRoKQotICAgICAgICBhc3NlcnQgMyA9PSBsZW4ocGF0aDIpCi0gICAgICAgIGFzc2VydCBWZXJ0ZXgoMTEsICdwZXJzb24nKSA9PSBwYXRoMlswXQotICAgICAgICBhc3NlcnQgcGF0aDJbMF0ucHJvcGVydGllcyA9PSBbXQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRoMlsxXSwgRWRnZSkKLSAgICAgICAgYXNzZXJ0IHBhdGgyWzFdLnByb3BlcnRpZXMgPT0gW10KLSAgICAgICAgYXNzZXJ0IHBhdGgyWzJdID09ICJoZWxsbyIKLQotICAgICAgICAjIG1peGVkIHBhdGg6IGZpcnN0IHZlcnRleCB3aXRoIHByb3BlcnRpZXMsIHNlY29uZCB2ZXJ0ZXggd2l0aG91dAotICAgICAgICBwYXRoMyA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgIiIieyJAdHlwZSI6Imc6UGF0aCIsIkB2YWx1ZSI6eyJsYWJlbHMiOltbImEiXSxbImIiXV0sIm9iamVjdHMiOlt7IkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOiJwZXJzb24iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjB9LCJ2YWx1ZSI6Im1hcmtvIiwibGFiZWwiOiJuYW1lIn19XX19fSx7IkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoyfSwibGFiZWwiOiJwZXJzb24ifX1dfX0iIiIKLSAgICAgICAgKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRoMywgUGF0aCkKLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHBhdGgzKQotICAgICAgICBhc3NlcnQgVmVydGV4KDEpID09IHBhdGgzWzBdCi0gICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ25hbWUnIGFuZCB2cC52YWx1ZSA9PSAnbWFya28nIGZvciB2cCBpbiBwYXRoM1swXS5wcm9wZXJ0aWVzKQotICAgICAgICBhc3NlcnQgVmVydGV4KDIpID09IHBhdGgzWzFdCi0gICAgICAgIGFzc2VydCBwYXRoM1sxXS5wcm9wZXJ0aWVzID09IFtdCi0KLSAgICBkZWYgdGVzdF9jdXN0b21fbWFwcGluZyhzZWxmKToKLQotICAgICAgICAjIGV4dGVuZGVkIG1hcHBpbmcKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0eXBlX3N0cmluZyA9ICJ0ZXN0Olh0eXBlIgotICAgICAgICBvdmVycmlkZV9zdHJpbmcgPSAiZzpJbnQ2NCIKLSAgICAgICAgc2VyZGVzID0gTW9jaygpCi0KLSAgICAgICAgcmVhZGVyID0gR3JhcGhTT05SZWFkZXIoZGVzZXJpYWxpemVyX21hcD17dHlwZV9zdHJpbmc6IHNlcmRlc30pCi0gICAgICAgIGFzc2VydCB0eXBlX3N0cmluZyBpbiByZWFkZXIuZGVzZXJpYWxpemVycwotCi0gICAgICAgICMgYmFzZSBkaWN0cyBhcmUgbm90IG1vZGlmaWVkCi0gICAgICAgIGFzc2VydCB0eXBlX3N0cmluZyBub3QgaW4gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLmdyYXBoc29uVjJkMC5fZGVzZXJpYWxpemVycwotCi0gICAgICAgIHggPSBYKCkKLSAgICAgICAgbyA9IHJlYWRlci50b19vYmplY3Qoe0dyYXBoU09OVXRpbC5UWVBFX0tFWTogdHlwZV9zdHJpbmcsIEdyYXBoU09OVXRpbC5WQUxVRV9LRVk6IHh9KQotICAgICAgICBzZXJkZXMub2JqZWN0aWZ5LmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHgsIHJlYWRlcikKLSAgICAgICAgYXNzZXJ0IG8gaXMgc2VyZGVzLm9iamVjdGlmeSgpCi0KLSAgICAgICAgIyBvdmVycmlkZGVuIG1hcHBpbmcKLSAgICAgICAgdHlwZV9zdHJpbmcgPSAiZzpJbnQ2NCIKLSAgICAgICAgc2VyZGVzID0gTW9jaygpCi0gICAgICAgIHJlYWRlciA9IEdyYXBoU09OUmVhZGVyKGRlc2VyaWFsaXplcl9tYXA9e3R5cGVfc3RyaW5nOiBzZXJkZXMsIG92ZXJyaWRlX3N0cmluZzogc2VyZGVzfSkKLSAgICAgICAgYXNzZXJ0IGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaHNvblYyZDAuX2Rlc2VyaWFsaXplcnNbdHlwZV9zdHJpbmddIGlzIG5vdCByZWFkZXIuZGVzZXJpYWxpemVyc1t0eXBlX3N0cmluZ10KLQotICAgICAgICB2YWx1ZSA9IDMKLSAgICAgICAgbyA9IHJlYWRlci50b19vYmplY3Qoe0dyYXBoU09OVXRpbC5UWVBFX0tFWTogdHlwZV9zdHJpbmcsIEdyYXBoU09OVXRpbC5WQUxVRV9LRVk6IHZhbHVlfSkKLSAgICAgICAgc2VyZGVzLm9iamVjdGlmeS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCh2YWx1ZSwgcmVhZGVyKQotICAgICAgICBhc3NlcnQgbyBpcyBzZXJkZXMub2JqZWN0aWZ5KCkKLQotICAgIGRlZiB0ZXN0X2RhdGV0aW1lKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTYsIDEyLCAxNCwgMTYsIDE0LCAzNiwgMjk1MDAwKQotICAgICAgICBwdHMgPSBjYWxlbmRhci50aW1lZ20oZXhwZWN0ZWQudXRjdGltZXR1cGxlKCkpICsgZXhwZWN0ZWQubWljcm9zZWNvbmQgLyAxZTYKLSAgICAgICAgdHMgPSBpbnQocm91bmQocHRzICogMTAwMCkpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOkRhdGUiLCAiQHZhbHVlIjogdHN9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3V0cHV0LCBkYXRldGltZS5kYXRldGltZSkKLSAgICAgICAgIyBUSU5LRVJQT1AtMTg0OAotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9vZmZzZXRkYXRldGltZShzZWxmKToKLSAgICAgICAgdHogPSBkYXRldGltZS50aW1lem9uZShkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz0zNjAwMCkpCi0gICAgICAgIG1zID0gMTIzNDU2Nzg5MTIKLSAgICAgICAgZXhwZWN0ZWQgPSBkYXRldGltZS5kYXRldGltZSgyMDIyLCA1LCAyMCwgdHppbmZvPXR6KSArIGRhdGV0aW1lLnRpbWVkZWx0YShtaWNyb3NlY29uZHM9bXMpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeyJAdHlwZSI6ICJneDpPZmZzZXREYXRlVGltZSIsICJAdmFsdWUiOiBleHBlY3RlZC5pc29mb3JtYXQoKX0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQsIGRhdGV0aW1lLmRhdGV0aW1lKQotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9vZmZzZXRkYXRldGltZV96dWx1KHNlbGYpOgotICAgICAgICB0eiA9IGRhdGV0aW1lLnRpbWV6b25lLnV0YwotICAgICAgICBtcyA9IDEyMzQ1Njc4OTEyCi0gICAgICAgIGV4cGVjdGVkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAyMiwgNSwgMjAsIHR6aW5mbz10eikgKyBkYXRldGltZS50aW1lZGVsdGEobWljcm9zZWNvbmRzPW1zKQotICAgICAgICAjIHNpbXVsYXRlIHp1bHUgZm9ybWF0Ci0gICAgICAgIGV4cGVjdGVkX3p1bHUgPSBleHBlY3RlZC5pc29mb3JtYXQoKVs6LTZdICsgJ1onCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeyJAdHlwZSI6ICJneDpPZmZzZXREYXRlVGltZSIsICJAdmFsdWUiOiBleHBlY3RlZF96dWx1fSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgZGF0ZXRpbWUuZGF0ZXRpbWUpCi0gICAgICAgIGFzc2VydCBleHBlY3RlZCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgZHQgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpUaW1lc3RhbXAiLCAiQHZhbHVlIjogMTQ4MTc1MDA3NjI5NX0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkdCwgdGltZXN0YW1wKQotICAgICAgICBhc3NlcnQgZmxvYXQoZHQpID09IDE0ODE3NTAwNzYuMjk1Ci0KLSAgICBkZWYgdGVzdF9kdXJhdGlvbihzZWxmKToKLSAgICAgICAgZCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeyJAdHlwZSI6ICJneDpEdXJhdGlvbiIsICJAdmFsdWUiOiAiUFQxMjBIIn0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkLCBkYXRldGltZS50aW1lZGVsdGEpCi0gICAgICAgIGFzc2VydCBkID09IGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz0xMjApCi0KLSAgICBkZWYgdGVzdF91dWlkKHNlbGYpOgotICAgICAgICBwcm9wID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICBqc29uLmR1bXBzKHsnQHR5cGUnOiAnZzpVVUlEJywgJ0B2YWx1ZSc6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYifSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHByb3AsIHV1aWQuVVVJRCkKLSAgICAgICAgYXNzZXJ0IHN0cihwcm9wKSA9PSAnNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2JwotCi0gICAgZGVmIHRlc3RfbWV0cmljcyhzZWxmKToKLSAgICAgICAgcHJvcCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAganNvbi5kdW1wcyhbeydAdHlwZSc6ICdnOlRyYXZlcnNhbE1ldHJpY3MnLCAnQHZhbHVlJzogeydkdXInOiAxLjQ2ODU5NCwgJ21ldHJpY3MnOiBbCi0gICAgICAgICAgICAgICAgeydAdHlwZSc6ICdnOk1ldHJpY3MnLCAnQHZhbHVlJzogeydkdXInOiAxLjM4MDk1NywgJ2NvdW50cyc6IHt9LCAnbmFtZSc6ICdHcmFwaFN0ZXAoX18uVigpKScsICdhbm5vdGF0aW9ucyc6IHsncGVyY2VudER1cic6IDk0LjAzMjU5MTcxNjk3NTU2fSwgJ2lkJzogJzQuMC4wKCknfX0sCi0gICAgICAgICAgICAgICAgeydAdHlwZSc6ICdnOk1ldHJpY3MnLCAnQHZhbHVlJzogeydkdXInOiAwLjA4NzYzNywgJ2NvdW50cyc6IHt9LCAnbmFtZSc6ICdSZWZlcmVuY2VFbGVtZW50U3RlcCcsICdhbm5vdGF0aW9ucyc6IHsncGVyY2VudER1cic6IDUuOTY3NDA4MjgzMDI0NDQ0fSwgJ2lkJzogJzMuMC4wKCknfX0KLSAgICAgICAgICAgIF19fV0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9wLCBsaXN0KQotICAgICAgICBhc3NlcnQgcHJvcCA9PSBbeydkdXInOiAxLjQ2ODU5NCwgJ21ldHJpY3MnOiBbCi0gICAgICAgICAgICAgICAgeydkdXInOiAxLjM4MDk1NywgJ2NvdW50cyc6IHt9LCAnbmFtZSc6ICdHcmFwaFN0ZXAoX18uVigpKScsICdhbm5vdGF0aW9ucyc6IHsncGVyY2VudER1cic6IDk0LjAzMjU5MTcxNjk3NTU2fSwgJ2lkJzogJzQuMC4wKCknfSwKLSAgICAgICAgICAgICAgICB7J2R1cic6IDAuMDg3NjM3LCAnY291bnRzJzoge30sICduYW1lJzogJ1JlZmVyZW5jZUVsZW1lbnRTdGVwJywgJ2Fubm90YXRpb25zJzogeydwZXJjZW50RHVyJzogNS45Njc0MDgyODMwMjQ0NDR9LCAnaWQnOiAnMy4wLjAoKSd9Ci0gICAgICAgICAgICAgICAgXX1dCi0KLSAgICBkZWYgdGVzdF9ieXRlYnVmZmVyKHNlbGYpOgotICAgICAgICBiYiA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImd4OkJ5dGVCdWZmZXIiLCAiQHZhbHVlIjogImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MSJ9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmIsIEJ5dGVCdWZmZXJUeXBlKQotICAgICAgICBhc3NlcnQgQnl0ZUJ1ZmZlclR5cGUoImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MSIsICJ1dGY4IikgPT0gYmIKLQotICAgIGRlZiB0ZXN0X2NoYXIoc2VsZik6Ci0gICAgICAgIGMgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZ3g6Q2hhciIsICJAdmFsdWUiOiAiTCJ9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYywgU2luZ2xlQ2hhcikKLSAgICAgICAgYXNzZXJ0IGNocig3NikgPT0gYwotCi0gICAgZGVmIHRlc3RfbnVsbChzZWxmKToKLSAgICAgICAgYyA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoTm9uZSkpCi0gICAgICAgIGFzc2VydCBjIGlzIE5vbmUKLQotCi1jbGFzcyBUZXN0R3JhcGhTT05Xcml0ZXI6Ci0gICAgZ3JhcGhzb25fd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIoKQotICAgIGdyYXBoc29uX3JlYWRlciA9IEdyYXBoU09OUmVhZGVyKCkKLQotICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6Ci0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImd4OkJ5dGUiLCAiQHZhbHVlIjogMX0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoaW50Ll9fbmV3X18oU2luZ2xlQnl0ZSwgMSkpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJneDpJbnQxNiIsICJAdmFsdWUiOiAxNn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3Qoc2hvcnQoMTYpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZ3g6SW50MTYiLCAiQHZhbHVlIjogLTE2fSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChzaG9ydCgtMTYpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAyfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChsb25nKDIpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiA4NTE0MDE5NzI1ODUxMjJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoODUxNDAxOTcyNTg1MTIyKSkpCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6SW50NjQiLCAiQHZhbHVlIjogLTJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoLTIpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAtODUxNDAxOTcyNTg1MTIyfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChsb25nKC04NTE0MDE5NzI1ODUxMjIpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCgxKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAtMX0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoLTEpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDY0IiwgIkB2YWx1ZSI6IDg1MTQwMTk3MjU4NTEyMn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoODUxNDAxOTcyNTg1MTIyKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEb3VibGUiLCAiQHZhbHVlIjogMy4yfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCgzLjIpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRvdWJsZSIsICJAdmFsdWUiOiAiTmFOIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoZmxvYXQoJ25hbicpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEb3VibGUiLCAiQHZhbHVlIjogIkluZmluaXR5In0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoZmxvYXQoJ2luZicpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEb3VibGUiLCAiQHZhbHVlIjogIi1JbmZpbml0eSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGZsb2F0KCctaW5mJykpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJneDpCaWdEZWNpbWFsIiwgIkB2YWx1ZSI6ICIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChiaWdkZWNpbWFsKCcxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEnKSkpCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImd4OkJpZ0ludGVnZXIiLCAiQHZhbHVlIjogIjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxKSkpCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImd4OkJpZ0ludGVnZXIiLCAiQHZhbHVlIjogIjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSkpCi0gICAgICAgIGFzc2VydCAiIiJ0cnVlIiIiID09IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChUcnVlKQotCi0gICAgZGVmIHRlc3RfZW51bShzZWxmKToKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpNZXJnZSIsICJAdmFsdWUiOiAib25NYXRjaCJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KE1lcmdlLm9uX21hdGNoKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpPcmRlciIsICJAdmFsdWUiOiAic2h1ZmZsZSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KE9yZGVyLnNodWZmbGUpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkJhcnJpZXIiLCAiQHZhbHVlIjogIm5vcm1TYWNrIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoQmFycmllci5ub3JtX3NhY2spKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOk9wZXJhdG9yIiwgIkB2YWx1ZSI6ICJzdW0ifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChPcGVyYXRvci5zdW1fKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpPcGVyYXRvciIsICJAdmFsdWUiOiAic3VtTG9uZyJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KE9wZXJhdG9yLnN1bV9sb25nKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEaXJlY3Rpb24iLCAiQHZhbHVlIjogIk9VVCJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KERpcmVjdGlvbi5PVVQpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRpcmVjdGlvbiIsICJAdmFsdWUiOiAiT1VUIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoRGlyZWN0aW9uLmZyb21fKSkKLQotICAgIGRlZiB0ZXN0X1Aoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHsnQHR5cGUnOiAnZzpQJywKLSAgICAgICAgICAgICAgICAgICdAdmFsdWUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ3ByZWRpY2F0ZSc6ICdhbmQnLAotICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IFt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdnOlAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnQHZhbHVlJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZWRpY2F0ZSc6ICdvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBbewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdnOlAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdmFsdWUnOiB7J3ByZWRpY2F0ZSc6ICdsdCcsICd2YWx1ZSc6ICdiJ30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydAdHlwZSc6ICdnOlAnLCAnQHZhbHVlJzogeydwcmVkaWNhdGUnOiAnZ3QnLCAndmFsdWUnOiAnYyd9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeydAdHlwZSc6ICdnOlAnLCAnQHZhbHVlJzogeydwcmVkaWNhdGUnOiAnbmVxJywgJ3ZhbHVlJzogJ2QnfX1dfX0KLQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUC5sdCgiYiIpLm9yXyhQLmd0KCJjIikpLmFuZF8oUC5uZXEoImQiKSkpKQotCi0gICAgICAgIHJlc3VsdCA9IHsnQHR5cGUnOiAnZzpQJywgJ0B2YWx1ZSc6IHsncHJlZGljYXRlJzond2l0aGluJywndmFsdWUnOiBbeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDF9LHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAyfV19fQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKFsxLCAyXSkpKQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKDEsIDIpKSkKLQotICAgICAgICByZXN1bHQgPSB7J0B0eXBlJzogJ2c6UCcsICdAdmFsdWUnOiB7J3ByZWRpY2F0ZSc6J3dpdGhpbicsJ3ZhbHVlJzogW3siQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfV19fQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKFsxXSkpKQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKDEpKSkKLQotICAgIGRlZiB0ZXN0X3N0cmF0ZWdpZXMoc2VsZik6Ci0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6U3ViZ3JhcGhTdHJhdGVneSIsICJAdmFsdWUiOiB7J2NvbmYnOiB7fSwgJ2ZxY24nOiAnb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlN1YmdyYXBoU3RyYXRlZ3knfX0gPT0ganNvbi5sb2FkcygKLSAgICAgICAgICAgIHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChTdWJncmFwaFN0cmF0ZWd5KSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpTdWJncmFwaFN0cmF0ZWd5IiwgIkB2YWx1ZSI6IHsnY29uZic6IHsgInZlcnRpY2VzIjogeyJAdHlwZSI6ICJnOkJ5dGVjb2RlIiwgIkB2YWx1ZSI6IHsic3RlcCI6IFtbImhhcyIsICJuYW1lIiwgIm1hcmtvIl1dfX19LCAnZnFjbic6ICdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneSd9fSA9PSBqc29uLmxvYWRzKAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCJuYW1lIiwgIm1hcmtvIikpKSkKLQotICAgIGRlZiB0ZXN0X2dyYXBoKHNlbGYpOgotICAgICAgICAjIFRPRE86IHRoaXMgYXNzZXJ0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcHl0aG9uIDMgYW5kIG5vdyB0aGF0IHdlIHRlc3Qgd2l0aCBib3RoIDIgYW5kIDMgaXQgZmFpbHMKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpWZXJ0ZXgiLCAiQHZhbHVlIjogeyJpZCI6IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAxMn0sICJsYWJlbCI6ICJwZXJzb24ifX0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoVmVydGV4KGxvbmcoMTIpLCAicGVyc29uIikpKQotCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6RWRnZSIsICJAdmFsdWUiOiB7ImlkIjogeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDd9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWIjogeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWTGFiZWwiOiAicGVyc29uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiAia25vd3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpblYiOiB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluVkxhYmVsIjogImRvZyJ9fSA9PSBqc29uLmxvYWRzKAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KEVkZ2UoNywgVmVydGV4KDAsICJwZXJzb24iKSwgImtub3dzIiwgVmVydGV4KDEsICJkb2ciKSkpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwgIkB2YWx1ZSI6IHsiaWQiOiAiYmxhaCIsICJsYWJlbCI6ICJrZXlBIiwgInZhbHVlIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnRleCI6ICJzdGVwaGVuIn19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoVmVydGV4UHJvcGVydHkoImJsYWgiLCAia2V5QSIsIFRydWUsIFZlcnRleCgic3RlcGhlbiIpKSkpCi0KLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsia2V5IjogIm5hbWUiLCAidmFsdWUiOiAibWFya28iLCAiZWxlbWVudCI6IHsiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJ0ZXgiOiAidmVydGV4SWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxMjM0fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiAiYUtleSJ9fX19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoCi0gICAgICAgICAgICAgICAgUHJvcGVydHkoIm5hbWUiLCAibWFya28iLCBWZXJ0ZXhQcm9wZXJ0eSgxMjM0LCAiYUtleSIsIDIxMzQ1LCBWZXJ0ZXgoInZlcnRleElkIikpKSkpCi0KLSAgICAgICAgdmVydGV4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleCgxLCAicGVyc29uIikpKQotICAgICAgICBhc3NlcnQgMSA9PSB2ZXJ0ZXguaWQKLSAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IHZlcnRleC5sYWJlbAotCi0gICAgICAgIGVkZ2UgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChFZGdlKDMsIFZlcnRleCgxLCAicGVyc29uIiksICJrbm93cyIsIFZlcnRleCgyLCAiZG9nIikpKSkKLSAgICAgICAgYXNzZXJ0ICJrbm93cyIgPT0gZWRnZS5sYWJlbAotICAgICAgICBhc3NlcnQgMyA9PSBlZGdlLmlkCi0gICAgICAgIGFzc2VydCAxID09IGVkZ2Uub3V0Vi5pZAotICAgICAgICBhc3NlcnQgMiA9PSBlZGdlLmluVi5pZAotCi0gICAgICAgIHZlcnRleF9wcm9wZXJ0eSA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleFByb3BlcnR5KDEsICJhZ2UiLCAzMiwgVmVydGV4KDEpKSkpCi0gICAgICAgIGFzc2VydCAxID09IHZlcnRleF9wcm9wZXJ0eS5pZAotICAgICAgICBhc3NlcnQgImFnZSIgPT0gdmVydGV4X3Byb3BlcnR5LmtleQotICAgICAgICBhc3NlcnQgMzIgPT0gdmVydGV4X3Byb3BlcnR5LnZhbHVlCi0KLSAgICAgICAgcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUHJvcGVydHkoImFnZSIsIDMyLjIsIEVkZ2UoMSwgVmVydGV4KDIpLCAia25vd3MiLCBWZXJ0ZXgoMykpKSkpCi0gICAgICAgIGFzc2VydCAiYWdlIiA9PSBwcm9wZXJ0eS5rZXkKLSAgICAgICAgYXNzZXJ0IDMyLjIgPT0gcHJvcGVydHkudmFsdWUKLQotICAgIGRlZiB0ZXN0X2N1c3RvbV9tYXBwaW5nKHNlbGYpOgotICAgICAgICAjIGV4dGVuZGVkIG1hcHBpbmcKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZXJkZXMgPSBNb2NrKCkKLSAgICAgICAgd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIoc2VyaWFsaXplcl9tYXA9e1g6IHNlcmRlc30pCi0gICAgICAgIGFzc2VydCBYIGluIHdyaXRlci5zZXJpYWxpemVycwotCi0gICAgICAgICMgYmFzZSBkaWN0cyBhcmUgbm90IG1vZGlmaWVkCi0gICAgICAgIGFzc2VydCBYIG5vdCBpbiBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WMmQwLl9zZXJpYWxpemVycwotCi0gICAgICAgIG9iaiA9IFgoKQotICAgICAgICBkID0gd3JpdGVyLnRvX2RpY3Qob2JqKQotICAgICAgICBzZXJkZXMuZGljdGlmeS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChvYmosIHdyaXRlcikKLSAgICAgICAgYXNzZXJ0IGQgaXMgc2VyZGVzLmRpY3RpZnkoKQotCi0gICAgICAgICMgb3ZlcnJpZGRlbiBtYXBwaW5nCi0gICAgICAgIHNlcmRlcyA9IE1vY2soKQotICAgICAgICB3cml0ZXIgPSBHcmFwaFNPTldyaXRlcihzZXJpYWxpemVyX21hcD17aW50OiBzZXJkZXN9KQotICAgICAgICBhc3NlcnQgZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLmdyYXBoc29uVjJkMC5fc2VyaWFsaXplcnNbaW50XSBpcyBub3Qgd3JpdGVyLnNlcmlhbGl6ZXJzW2ludF0KLQotICAgICAgICB2YWx1ZSA9IDMKLSAgICAgICAgZCA9IHdyaXRlci50b19kaWN0KHZhbHVlKQotICAgICAgICBzZXJkZXMuZGljdGlmeS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCh2YWx1ZSwgd3JpdGVyKQotICAgICAgICBhc3NlcnQgZCBpcyBzZXJkZXMuZGljdGlmeSgpCi0KLSAgICBkZWYgdGVzdF93cml0ZV9sb25nKHNlbGYpOgotICAgICAgICBtYXBwaW5nID0gc2VsZi5ncmFwaHNvbl93cml0ZXIudG9fZGljdCgxKQotICAgICAgICBhc3NlcnQgbWFwcGluZ1snQHR5cGUnXSA9PSAnZzpJbnQzMicKLSAgICAgICAgYXNzZXJ0IG1hcHBpbmdbJ0B2YWx1ZSddID09IDEKLQotICAgICAgICBtYXBwaW5nID0gc2VsZi5ncmFwaHNvbl93cml0ZXIudG9fZGljdChsb25nKDEpKQotICAgICAgICBhc3NlcnQgbWFwcGluZ1snQHR5cGUnXSA9PSAnZzpJbnQ2NCcKLSAgICAgICAgYXNzZXJ0IG1hcHBpbmdbJ0B2YWx1ZSddID09IDEKLQotICAgIGRlZiB0ZXN0X2RhdGV0aW1lKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOkRhdGUiLCAiQHZhbHVlIjogMTQ4MTc1MDA3NjI5NX0sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDE0ODE3NTAwNzYyOTUgLyAxMDAwLjApCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChkdCkKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfdGltZXN0YW1wKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOlRpbWVzdGFtcCIsICJAdmFsdWUiOiAxNDgxNzUwMDc2Mjk1fSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQotICAgICAgICB0cyA9IHRpbWVzdGFtcCgxNDgxNzUwMDc2Mjk1IC8gMTAwMC4wKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QodHMpCi0gICAgICAgIGFzc2VydCBleHBlY3RlZCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2R1cmF0aW9uKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeyJAdHlwZSI6ICJneDpEdXJhdGlvbiIsICJAdmFsdWUiOiAiUDVEIn0sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgZCA9IGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz0xMjApCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChkKQotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF91dWlkKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeydAdHlwZSc6ICdnOlVVSUQnLCAnQHZhbHVlJzogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiJ9LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCi0gICAgICAgIHByb3AgPSB1dWlkLlVVSUQoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChwcm9wKQotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9ieXRlYnVmZmVyKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeydAdHlwZSc6ICdneDpCeXRlQnVmZmVyJywgJ0B2YWx1ZSc6ICdjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEnfSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQotICAgICAgICBiYiA9IEJ5dGVCdWZmZXJUeXBlKCJjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEiLCAidXRmOCIpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChiYikKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfY2hhcihzZWxmKToKLSAgICAgICAgZXhwZWN0ZWQgPSBqc29uLmR1bXBzKHsnQHR5cGUnOiAnZ3g6Q2hhcicsICdAdmFsdWUnOiAnTCd9LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCi0gICAgICAgIGMgPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNzYpKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoYykKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9pby90ZXN0X2dyYXBoc29uVjNkMC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L2lvL3Rlc3RfZ3JhcGhzb25WM2QwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjJmOWRlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L2lvL3Rlc3RfZ3JhcGhzb25WM2QwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjYwICswLDAgQEAKLSMKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotX19hdXRob3JfXyA9ICdNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pJwotCi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCBjYWxlbmRhcgotaW1wb3J0IGpzb24KLWltcG9ydCB1dWlkCi1pbXBvcnQgbWF0aAotZnJvbSBkZWNpbWFsIGltcG9ydCAqCi0KLWZyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jawotCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0ICoKLWZyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBWZXJ0ZXgsIEVkZ2UsIFByb3BlcnR5LCBWZXJ0ZXhQcm9wZXJ0eSwgUGF0aAotZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WM2QwIGltcG9ydCBHcmFwaFNPTldyaXRlciwgR3JhcGhTT05SZWFkZXIsIEdyYXBoU09OVXRpbAotaW1wb3J0IGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaHNvblYzZDAKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IFAsIE1lcmdlLCBCYXJyaWVyLCBPcmRlciwgT3BlcmF0b3IsIERpcmVjdGlvbgotZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0IFN1YmdyYXBoU3RyYXRlZ3kKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCi0KLQotY2xhc3MgVGVzdEdyYXBoU09OUmVhZGVyOgotICAgIGdyYXBoc29uX3JlYWRlciA9IEdyYXBoU09OUmVhZGVyKCkKLQotICAgIGRlZiB0ZXN0X2NvbGxlY3Rpb25zKHNlbGYpOgotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpMaXN0IiwgIkB2YWx1ZSI6IFt7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyJdfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCi0gICAgICAgIGFzc2VydCB4WzBdID09IDEKLSAgICAgICAgYXNzZXJ0IHhbMV0gPT0gMgotICAgICAgICBhc3NlcnQgeFsyXSA9PSAiMyIKLSAgICAgICAgIyMKLQotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogW3siQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyJdfSkpCi0gICAgICAgICMgcmV0dXJuIGEgc2V0IGFzIG5vcm1hbAotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBzZXQpCi0gICAgICAgIGFzc2VydCB4ID09IHsxLCAyLCAiMyJ9Ci0KLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6U2V0IiwgIkB2YWx1ZSI6IFt7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpGbG9hdCIsICJAdmFsdWUiOiAyLjB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIl19KSkKLSAgICAgICAgIyBjb2VyY2UgdG8gbGlzdCBoZXJlIGJlY2F1c2UgSmF2YSBtaWdodCByZXR1cm4gbnVtZXJpY3Mgb2YgZGlmZmVyZW50IHR5cGVzIHdoaWNoIHB5dGhvbiB3b24ndCByZWNvZ25pemUKLSAgICAgICAgIyBzZWUgY29tbWVudHMgb2YgVElOS0VSUE9QLTE4NDQgZm9yIG1vcmUgZGV0YWlscwotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsaXN0KQotICAgICAgICBhc3NlcnQgeCA9PSBsaXN0KFsxLCAyLCAyLjAsICIzIl0pCi0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOk1hcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogWydhJywgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDF9LCAnYicsICJtYXJrbyJdfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGRpY3QpCi0gICAgICAgIGFzc2VydCB4WydhJ10gPT0gMQotICAgICAgICBhc3NlcnQgeFsnYiddID09ICJtYXJrbyIKLSAgICAgICAgYXNzZXJ0IGxlbih4KSA9PSAyCi0KLSAgICAgICAgIyBCdWxrU2V0IGdldHMgY29lcmNlZCB0byBhIExpc3QgLSBib3RoIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6QnVsa1NldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogWyJtYXJrbyIsIHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAxfSwgImpvc2giLCB7IkB0eXBlIjogImc6SW50NjQiLCAiQHZhbHVlIjogM31dfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCi0gICAgICAgIGFzc2VydCBsZW4oeCkgPT0gNAotICAgICAgICBhc3NlcnQgeC5jb3VudCgibWFya28iKSA9PSAxCi0gICAgICAgIGFzc2VydCB4LmNvdW50KCJqb3NoIikgPT0gMwotCi0gICAgZGVmIHRlc3Rfc2V0X3dpdGhfdW5oYXNoYWJsZV9kaWN0X2VsZW1lbnRzKHNlbGYpOgotICAgICAgICAjIHRlc3QgdGhhdCBzZXRzIGNvbnRhaW5pbmcgZGljdHMgYXJlIGNvZXJjZWQgdG8gbGlzdCAtIHNlZSBUSU5LRVJQT1AtMzIzMgotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogWwotICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpNYXAiLCAiQHZhbHVlIjogWyJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAyOX1dfSwKLSAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6TWFwIiwgIkB2YWx1ZSI6IFsibmFtZSIsICJqb3NoIiwgImFnZSIsIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAzMn1dfQotICAgICAgICAgICAgXX0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsaXN0KQotICAgICAgICBhc3NlcnQgbGVuKHgpID09IDIKLQotICAgIGRlZiB0ZXN0X3NldF93aXRoX3VuaGFzaGFibGVfbGlzdF9lbGVtZW50cyhzZWxmKToKLSAgICAgICAgIyB0ZXN0IHRoYXQgc2V0cyBjb250YWluaW5nIGxpc3RzIGFyZSBjb2VyY2VkIHRvIGxpc3QgLSBzZWUgVElOS0VSUE9QLTMyMzIKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6U2V0IiwgIkB2YWx1ZSI6IFsKLSAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6TGlzdCIsICJAdmFsdWUiOiBbIm1hcmtvIiwgImpvc2giXX0sCi0gICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkxpc3QiLCAiQHZhbHVlIjogWyJ2YWRhcyIsICJwZXRlciJdfQotICAgICAgICAgICAgXX0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsaXN0KQotICAgICAgICBhc3NlcnQgbGVuKHgpID09IDIKLQotICAgIGRlZiB0ZXN0X3NldF93aXRoX3VuaGFzaGFibGVfc2V0X2VsZW1lbnRzKHNlbGYpOgotICAgICAgICAjIHRlc3QgdGhhdCBzZXRzIGNvbnRhaW5pbmcgc2V0cyBhcmUgY29lcmNlZCB0byBsaXN0IC0gc2VlIFRJTktFUlBPUC0zMjMyCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbCi0gICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbImEiLCAiYiJdfSwKLSAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6U2V0IiwgIkB2YWx1ZSI6IFsiYyIsICJkIl19Ci0gICAgICAgICAgICBdfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCi0gICAgICAgIGFzc2VydCBsZW4oeCkgPT0gMgotCi0gICAgZGVmIHRlc3Rfc2V0X3dpdGhfbWl4ZWRfaGFzaGFibGVfYW5kX3VuaGFzaGFibGVfZWxlbWVudHMoc2VsZik6Ci0gICAgICAgICMgdGVzdCB0aGF0IHNldHMgY29udGFpbmluZyBhIG1peCBvZiBoYXNoYWJsZSBhbmQgdW5oYXNoYWJsZSBlbGVtZW50cyBhcmUgY29lcmNlZCB0byBsaXN0IC0gc2VlIFRJTktFUlBPUC0zMjMyCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbCi0gICAgICAgICAgICAgICAgIm1hcmtvIiwKLSAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6TWFwIiwgIkB2YWx1ZSI6IFsibmFtZSIsICJqb3NoIl19LAotICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiA0Mn0KLSAgICAgICAgICAgIF19KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbGlzdCkKLSAgICAgICAgYXNzZXJ0IGxlbih4KSA9PSAzCi0KLSAgICBkZWYgdGVzdF9zZXRfd2l0aF9uZXN0ZWRfdW5oYXNoYWJsZV9lbGVtZW50cyhzZWxmKToKLSAgICAgICAgIyB0ZXN0IHRoYXQgc2V0cyBjb250YWluaW5nIGRpY3RzIHdpdGggbGlzdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gbGlzdCAtIHNlZSBUSU5LRVJQT1AtMzIzMgotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogWwotICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpNYXAiLCAiQHZhbHVlIjogWwotICAgICAgICAgICAgICAgICAgICAibmFtZSIsICJtYXJrbyIsCi0gICAgICAgICAgICAgICAgICAgICJsYW5ncyIsIHsiQHR5cGUiOiAiZzpMaXN0IiwgIkB2YWx1ZSI6IFsiamF2YSIsICJweXRob24iXX0KLSAgICAgICAgICAgICAgICBdfSwKLSAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6TWFwIiwgIkB2YWx1ZSI6IFsKLSAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCAiam9zaCIsCi0gICAgICAgICAgICAgICAgICAgICJsYW5ncyIsIHsiQHR5cGUiOiAiZzpMaXN0IiwgIkB2YWx1ZSI6IFsiZ3JlbWxpbiJdfQotICAgICAgICAgICAgICAgIF19Ci0gICAgICAgICAgICBdfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCi0gICAgICAgIGFzc2VydCBsZW4oeCkgPT0gMgotCi0gICAgZGVmIHRlc3RfbnVtYmVyX2lucHV0KHNlbGYpOgotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZ3g6Qnl0ZSIsCi0gICAgICAgICAgICAiQHZhbHVlIjogMQotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgU2luZ2xlQnl0ZSkKLSAgICAgICAgYXNzZXJ0IDEgPT0geAotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZ3g6SW50MTYiLAotICAgICAgICAgICAgIkB2YWx1ZSI6IDE2Ci0gICAgICAgIH0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBzaG9ydCkKLSAgICAgICAgYXNzZXJ0IDE2ID09IHgKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSI6IDMxCi0gICAgICAgIH0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBpbnQpCi0gICAgICAgIGFzc2VydCAzMSA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAzMQotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbG9uZykKLSAgICAgICAgYXNzZXJ0IGxvbmcoMzEpID09IHgKLSAgICAgICAgIyMKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImc6RmxvYXQiLAotICAgICAgICAgICAgIkB2YWx1ZSI6IDMxLjMKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGZsb2F0KQotICAgICAgICBhc3NlcnQgMzEuMyA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIjogMzEuMgotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgZmxvYXQpCi0gICAgICAgIGFzc2VydCAzMS4yID09IHgKLSAgICAgICAgIyMKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAiTmFOIgotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgZmxvYXQpCi0gICAgICAgIGFzc2VydCBtYXRoLmlzbmFuKHgpCi0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJnOkRvdWJsZSIsCi0gICAgICAgICAgICAiQHZhbHVlIjogIkluZmluaXR5IgotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgZmxvYXQpCi0gICAgICAgIGFzc2VydCBtYXRoLmlzaW5mKHgpIGFuZCB4ID4gMAotICAgICAgICAjIwotICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7Ci0gICAgICAgICAgICAiQHR5cGUiOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSI6ICItSW5maW5pdHkiCi0gICAgICAgIH0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBmbG9hdCkKLSAgICAgICAgYXNzZXJ0IG1hdGguaXNpbmYoeCkgYW5kIHggPCAwCi0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJneDpCaWdEZWNpbWFsIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAzMS4yCi0gICAgICAgIH0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBCaWdEZWNpbWFsKQotICAgICAgICBhc3NlcnQgYmlnZGVjaW1hbCgzMS4yKSA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJneDpCaWdEZWNpbWFsIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKLSAgICAgICAgfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIEJpZ0RlY2ltYWwpCi0gICAgICAgIGFzc2VydCBiaWdkZWNpbWFsKCcxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEnKSA9PSB4Ci0gICAgICAgICMjCi0gICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKLSAgICAgICAgICAgICJAdHlwZSI6ICJneDpCaWdJbnRlZ2VyIiwKLSAgICAgICAgICAgICJAdmFsdWUiOiAzMQotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbG9uZykKLSAgICAgICAgYXNzZXJ0IDMxID09IHgKLSAgICAgICAgIyMKLSAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoewotICAgICAgICAgICAgIkB0eXBlIjogImd4OkJpZ0ludGVnZXIiLAotICAgICAgICAgICAgIkB2YWx1ZSI6IDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMQotICAgICAgICB9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbG9uZykKLSAgICAgICAgYXNzZXJ0IDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSA9PSB4Ci0KLSAgICBkZWYgdGVzdF9ncmFwaChzZWxmKToKLSAgICAgICAgdmVydGV4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOlZlcnRleCIsICJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOiJwZXJzb24iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjB9LCJ2YWx1ZSI6Im1hcmtvIiwibGFiZWwiOiJuYW1lIn19XSwiYWdlIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjoxfSwidmFsdWUiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoyOX0sImxhYmVsIjoiYWdlIn19XX19fSIiIikKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4LCBWZXJ0ZXgpCi0gICAgICAgIGFzc2VydCAicGVyc29uIiA9PSB2ZXJ0ZXgubGFiZWwKLSAgICAgICAgYXNzZXJ0IDEgPT0gdmVydGV4LmlkCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleC5pZCwgaW50KQotICAgICAgICBhc3NlcnQgdmVydGV4ID09IFZlcnRleCgxKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4odmVydGV4LnByb3BlcnRpZXMpCi0gICAgICAgICMgYXNzZXJ0IGFjdHVhbCBwcm9wZXJ0eSB2YWx1ZXMgLSBWZXJ0ZXgucHJvcGVydGllcyBzaG91bGQgYmUgVmVydGV4UHJvcGVydHkgb2JqZWN0cwotICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICduYW1lJyBhbmQgdnAudmFsdWUgPT0gJ21hcmtvJyBmb3IgdnAgaW4gdmVydGV4LnByb3BlcnRpZXMpCi0gICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ2FnZScgYW5kIHZwLnZhbHVlID09IDI5IGZvciB2cCBpbiB2ZXJ0ZXgucHJvcGVydGllcykKLSAgICAgICAgIyMKLSAgICAgICAgdmVydGV4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOlZlcnRleCIsICJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkZsb2F0IiwiQHZhbHVlIjo0NS4yM319fSIiIikKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4LCBWZXJ0ZXgpCi0gICAgICAgIGFzc2VydCA0NS4yMyA9PSB2ZXJ0ZXguaWQKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4LmlkLCBGbG9hdFR5cGUpCi0gICAgICAgIGFzc2VydCAidmVydGV4IiA9PSB2ZXJ0ZXgubGFiZWwKLSAgICAgICAgYXNzZXJ0IHZlcnRleCA9PSBWZXJ0ZXgoNDUuMjMpCi0gICAgICAgICMgcHJvcGVydGllcyBrZXkgb21pdHRlZCBzaG91bGQgeWllbGQgZW1wdHkgbGlzdAotICAgICAgICBhc3NlcnQgdmVydGV4LnByb3BlcnRpZXMgPT0gW10KLSAgICAgICAgIyMKLSAgICAgICAgIyB2ZXJ0ZXggd2l0aCBleHBsaWNpdCBsYWJlbCBhbmQgd2l0aG91dCBwcm9wZXJ0aWVzCi0gICAgICAgIHZlcnRleCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOlZlcnRleCIsICJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoyfSwibGFiZWwiOiJwZXJzb24ifX0KLSAgICAgICAgICAgICIiIikKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4LCBWZXJ0ZXgpCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXgubGFiZWwgPT0gJ3BlcnNvbicKLSAgICAgICAgYXNzZXJ0IHZlcnRleC5pZCA9PSAyCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXgucHJvcGVydGllcyA9PSBbXQotICAgICAgICAjIwotICAgICAgICB2ZXJ0ZXhfcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgiIiIKLSAgICAgICAgeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCAiQHZhbHVlIjp7ImlkIjoiYW5JZCIsImxhYmVsIjoiYUtleSIsInZhbHVlIjp0cnVlLCJ2ZXJ0ZXgiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjo5fX19IiIiKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2ZXJ0ZXhfcHJvcGVydHksIFZlcnRleFByb3BlcnR5KQotICAgICAgICBhc3NlcnQgImFuSWQiID09IHZlcnRleF9wcm9wZXJ0eS5pZAotICAgICAgICBhc3NlcnQgImFLZXkiID09IHZlcnRleF9wcm9wZXJ0eS5sYWJlbAotICAgICAgICBhc3NlcnQgdmVydGV4X3Byb3BlcnR5LnZhbHVlCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXhfcHJvcGVydHkudmVydGV4ID09IFZlcnRleCg5KQotICAgICAgICAjIG5vIHByb3BlcnRpZXMga2V5IHNob3VsZCB5aWVsZCBlbXB0eSBsaXN0IG9mIG1ldGEtcHJvcGVydGllcwotICAgICAgICBhc3NlcnQgdmVydGV4X3Byb3BlcnR5LnByb3BlcnRpZXMgPT0gW10KLSAgICAgICAgIyMKLSAgICAgICAgdmVydGV4X3Byb3BlcnR5ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwgIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjF9LCJsYWJlbCI6Im5hbWUiLCJ2YWx1ZSI6Im1hcmtvIn19IiIiKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2ZXJ0ZXhfcHJvcGVydHksIFZlcnRleFByb3BlcnR5KQotICAgICAgICBhc3NlcnQgMSA9PSB2ZXJ0ZXhfcHJvcGVydHkuaWQKLSAgICAgICAgYXNzZXJ0ICJuYW1lIiA9PSB2ZXJ0ZXhfcHJvcGVydHkubGFiZWwKLSAgICAgICAgYXNzZXJ0ICJtYXJrbyIgPT0gdmVydGV4X3Byb3BlcnR5LnZhbHVlCi0gICAgICAgIGFzc2VydCB2ZXJ0ZXhfcHJvcGVydHkudmVydGV4IGlzIE5vbmUKLSAgICAgICAgIyBubyBwcm9wZXJ0aWVzIGtleSBzaG91bGQgeWllbGQgZW1wdHkgbGlzdCBvZiBtZXRhLXByb3BlcnRpZXMKLSAgICAgICAgYXNzZXJ0IHZlcnRleF9wcm9wZXJ0eS5wcm9wZXJ0aWVzID09IFtdCi0gICAgICAgICMjCi0gICAgICAgIGVkZ2UgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgiIiIKLSAgICAgICAgeyJAdHlwZSI6Imc6RWRnZSIsICJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjoxN30sImxhYmVsIjoia25vd3MiLCJpblYiOiJ4Iiwib3V0ViI6InkiLCJpblZMYWJlbCI6InhMYWIiLCJwcm9wZXJ0aWVzIjp7ImFLZXkiOiJhVmFsdWUiLCJiS2V5Ijp0cnVlfX19IiIiKQotICAgICAgICAjIHByaW50IGVkZ2UKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZWRnZSwgRWRnZSkKLSAgICAgICAgYXNzZXJ0IDE3ID09IGVkZ2UuaWQKLSAgICAgICAgYXNzZXJ0ICJrbm93cyIgPT0gZWRnZS5sYWJlbAotICAgICAgICBhc3NlcnQgZWRnZS5pblYgPT0gVmVydGV4KCJ4IiwgInhMYWJlbCIpCi0gICAgICAgIGFzc2VydCBlZGdlLm91dFYgPT0gVmVydGV4KCJ5IiwgInZlcnRleCIpCi0gICAgICAgICMjCi0gICAgICAgICMgZWRnZSB3aXRob3V0IHByb3BlcnRpZXMgc2hvdWxkIHlpZWxkIGVtcHR5IHByb3BlcnRpZXMgbGlzdAotICAgICAgICBlZGdlMiA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgIiIiCi0gICAgICAgIHsiQHR5cGUiOiJnOkVkZ2UiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTh9LCJsYWJlbCI6Imtub3dzIiwiaW5WIjoiYSIsIm91dFYiOiJiIiwiaW5WTGFiZWwiOiJ4TGFiIn19Ci0gICAgICAgICAgICAiIiIpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVkZ2UyLCBFZGdlKQotICAgICAgICBhc3NlcnQgZWRnZTIucHJvcGVydGllcyA9PSBbXQotICAgICAgICAjIwotICAgICAgICBwcm9wZXJ0eSA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgotICAgICAgICB7IkB0eXBlIjoiZzpQcm9wZXJ0eSIsICJAdmFsdWUiOnsia2V5IjoiYUtleSIsInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTd9LCJlbGVtZW50Ijp7IkB0eXBlIjoiZzpFZGdlIiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTIyfSwibGFiZWwiOiJrbm93cyIsImluViI6IngiLCJvdXRWIjoieSIsImluVkxhYmVsIjoieExhYiJ9fX19IiIiKQotICAgICAgICAjIHByaW50IHByb3BlcnR5Ci0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHByb3BlcnR5LCBQcm9wZXJ0eSkKLSAgICAgICAgYXNzZXJ0ICJhS2V5IiA9PSBwcm9wZXJ0eS5rZXkKLSAgICAgICAgYXNzZXJ0IDE3ID09IHByb3BlcnR5LnZhbHVlCi0gICAgICAgIGFzc2VydCBFZGdlKDEyMiwgVmVydGV4KCJ4IiksICJrbm93cyIsIFZlcnRleCgieSIpKSA9PSBwcm9wZXJ0eS5lbGVtZW50Ci0KLSAgICBkZWYgdGVzdF9wYXRoKHNlbGYpOgotICAgICAgICAjIG9yaWdpbmFsIHBhdGggd2l0aCB2ZXJ0aWNlcyB0aGF0IGluY2x1ZGUgcHJvcGVydGllcwotICAgICAgICBwYXRoID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCi0gICAgICAgICAgICAiIiJ7IkB0eXBlIjoiZzpQYXRoIiwiQHZhbHVlIjp7ImxhYmVscyI6eyJAdHlwZSI6Imc6TGlzdCIsIkB2YWx1ZSI6W3siQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJhIl19LHsiQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJiIiwiYyJdfSx7IkB0eXBlIjoiZzpTZXQiLCJAdmFsdWUiOltdfV19LCJvYmplY3RzIjp7IkB0eXBlIjoiZzpMaXN0IiwiQHZhbHVlIjpbeyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjoicGVyc29uIiwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjowfSwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9fV0sImFnZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MX0sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjl9LCJsYWJlbCI6ImFnZSJ9fV19fX0seyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6M30sImxhYmVsIjoic29mdHdhcmUiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjR9LCJ2YWx1ZSI6ImxvcCIsImxhYmVsIjoibmFtZSJ9fV0sImxhbmciOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjV9LCJ2YWx1ZSI6ImphdmEiLCJsYWJlbCI6ImxhbmcifX1dfX19LCJsb3AiXX19fSIiIgotICAgICAgICApCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGgsIFBhdGgpCi0gICAgICAgIGFzc2VydCAicGF0aFt2WzFdLCB2WzNdLCBsb3BdIiA9PSBzdHIocGF0aCkKLSAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBwYXRoWzBdCi0gICAgICAgIGFzc2VydCBWZXJ0ZXgoMSkgPT0gcGF0aFsiYSJdCi0gICAgICAgIGFzc2VydCAibG9wIiA9PSBwYXRoWzJdCi0gICAgICAgIGFzc2VydCAzID09IGxlbihwYXRoKQotICAgICAgICAjIGVuc3VyZSBlbGVtZW50IHByb3BlcnRpZXMgd2VyZSBwb3B1bGF0ZWQgZnJvbSBHcmFwaFNPTgotICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICduYW1lJyBhbmQgdnAudmFsdWUgPT0gJ21hcmtvJyBmb3IgdnAgaW4gcGF0aFswXS5wcm9wZXJ0aWVzKQotICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICdhZ2UnIGFuZCB2cC52YWx1ZSA9PSAyOSBmb3IgdnAgaW4gcGF0aFswXS5wcm9wZXJ0aWVzKQotICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICduYW1lJyBhbmQgdnAudmFsdWUgPT0gJ2xvcCcgZm9yIHZwIGluIHBhdGhbMV0ucHJvcGVydGllcykKLSAgICAgICAgYXNzZXJ0IGFueSh2cC5sYWJlbCA9PSAnbGFuZycgYW5kIHZwLnZhbHVlID09ICdqYXZhJyBmb3IgdnAgaW4gcGF0aFsxXS5wcm9wZXJ0aWVzKQotCi0gICAgICAgICMgcGF0aCB3aXRoIGVsZW1lbnRzIHRoYXQgZXhjbHVkZSBwcm9wZXJ0aWVzIChubyAicHJvcGVydGllcyIga2V5KQotICAgICAgICBwYXRoMiA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgIiIieyJAdHlwZSI6Imc6UGF0aCIsIkB2YWx1ZSI6eyJsYWJlbHMiOnsiQHR5cGUiOiJnOkxpc3QiLCJAdmFsdWUiOlt7IkB0eXBlIjoiZzpTZXQiLCJAdmFsdWUiOlsieCJdfSx7IkB0eXBlIjoiZzpTZXQiLCJAdmFsdWUiOlsieSJdfSx7IkB0eXBlIjoiZzpTZXQiLCJAdmFsdWUiOlsieiJdfV19LCJvYmplY3RzIjp7IkB0eXBlIjoiZzpMaXN0IiwiQHZhbHVlIjpbeyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MTF9LCJsYWJlbCI6InBlcnNvbiJ9fSx7IkB0eXBlIjoiZzpFZGdlIiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6Nzd9LCJsYWJlbCI6Imtub3dzIiwib3V0ViI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjExfSwib3V0VkxhYmVsIjoicGVyc29uIiwiaW5WIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MTJ9LCJpblZMYWJlbCI6InBlcnNvbiJ9fSwiaGVsbG8iXX19fSIiIgotICAgICAgICApCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGgyLCBQYXRoKQotICAgICAgICBhc3NlcnQgMyA9PSBsZW4ocGF0aDIpCi0gICAgICAgIGFzc2VydCBWZXJ0ZXgoMTEsICdwZXJzb24nKSA9PSBwYXRoMlswXQotICAgICAgICBhc3NlcnQgcGF0aDJbMF0ucHJvcGVydGllcyA9PSBbXQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXRoMlsxXSwgRWRnZSkKLSAgICAgICAgYXNzZXJ0IHBhdGgyWzFdLnByb3BlcnRpZXMgPT0gW10KLSAgICAgICAgYXNzZXJ0IHBhdGgyWzJdID09ICJoZWxsbyIKLQotICAgICAgICAjIG1peGVkIHBhdGg6IGZpcnN0IHZlcnRleCB3aXRoIHByb3BlcnRpZXMsIHNlY29uZCB2ZXJ0ZXggd2l0aG91dAotICAgICAgICBwYXRoMyA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgIiIieyJAdHlwZSI6Imc6UGF0aCIsIkB2YWx1ZSI6eyJsYWJlbHMiOnsiQHR5cGUiOiJnOkxpc3QiLCJAdmFsdWUiOlt7IkB0eXBlIjoiZzpTZXQiLCJAdmFsdWUiOlsiYSJdfSx7IkB0eXBlIjoiZzpTZXQiLCJAdmFsdWUiOlsiYiJdfV19LCJvYmplY3RzIjp7IkB0eXBlIjoiZzpMaXN0IiwiQHZhbHVlIjpbeyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjoicGVyc29uIiwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjowfSwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9fV19fX0seyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mn0sImxhYmVsIjoicGVyc29uIn19XX19fSIiIgotICAgICAgICApCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGgzLCBQYXRoKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4ocGF0aDMpCi0gICAgICAgIGFzc2VydCBWZXJ0ZXgoMSkgPT0gcGF0aDNbMF0KLSAgICAgICAgYXNzZXJ0IGFueSh2cC5sYWJlbCA9PSAnbmFtZScgYW5kIHZwLnZhbHVlID09ICdtYXJrbycgZm9yIHZwIGluIHBhdGgzWzBdLnByb3BlcnRpZXMpCi0gICAgICAgIGFzc2VydCBWZXJ0ZXgoMikgPT0gcGF0aDNbMV0KLSAgICAgICAgYXNzZXJ0IHBhdGgzWzFdLnByb3BlcnRpZXMgPT0gW10KLQotICAgIGRlZiB0ZXN0X2N1c3RvbV9tYXBwaW5nKHNlbGYpOgotCi0gICAgICAgICMgZXh0ZW5kZWQgbWFwcGluZwotICAgICAgICBjbGFzcyBYOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHR5cGVfc3RyaW5nID0gInRlc3Q6WHR5cGUiCi0gICAgICAgIG92ZXJyaWRlX3N0cmluZyA9ICJnOkludDY0IgotICAgICAgICBzZXJkZXMgPSBNb2NrKCkKLQotICAgICAgICByZWFkZXIgPSBHcmFwaFNPTlJlYWRlcihkZXNlcmlhbGl6ZXJfbWFwPXt0eXBlX3N0cmluZzogc2VyZGVzfSkKLSAgICAgICAgYXNzZXJ0IHR5cGVfc3RyaW5nIGluIHJlYWRlci5kZXNlcmlhbGl6ZXJzCi0KLSAgICAgICAgIyBiYXNlIGRpY3RzIGFyZSBub3QgbW9kaWZpZWQKLSAgICAgICAgYXNzZXJ0IHR5cGVfc3RyaW5nIG5vdCBpbiBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WM2QwLl9kZXNlcmlhbGl6ZXJzCi0KLSAgICAgICAgeCA9IFgoKQotICAgICAgICBvID0gcmVhZGVyLnRvX29iamVjdCh7R3JhcGhTT05VdGlsLlRZUEVfS0VZOiB0eXBlX3N0cmluZywgR3JhcGhTT05VdGlsLlZBTFVFX0tFWTogeH0pCi0gICAgICAgIHNlcmRlcy5vYmplY3RpZnkuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoeCwgcmVhZGVyKQotICAgICAgICBhc3NlcnQgbyBpcyBzZXJkZXMub2JqZWN0aWZ5KCkKLQotICAgICAgICAjIG92ZXJyaWRkZW4gbWFwcGluZwotICAgICAgICB0eXBlX3N0cmluZyA9ICJnOkludDY0IgotICAgICAgICBzZXJkZXMgPSBNb2NrKCkKLSAgICAgICAgcmVhZGVyID0gR3JhcGhTT05SZWFkZXIoZGVzZXJpYWxpemVyX21hcD17dHlwZV9zdHJpbmc6IHNlcmRlcywgb3ZlcnJpZGVfc3RyaW5nOiBzZXJkZXN9KQotICAgICAgICBhc3NlcnQgZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLmdyYXBoc29uVjNkMC5fZGVzZXJpYWxpemVyc1t0eXBlX3N0cmluZ10gaXMgbm90IHJlYWRlci5kZXNlcmlhbGl6ZXJzWwotICAgICAgICAgICAgdHlwZV9zdHJpbmddCi0KLSAgICAgICAgdmFsdWUgPSAzCi0gICAgICAgIG8gPSByZWFkZXIudG9fb2JqZWN0KHtHcmFwaFNPTlV0aWwuVFlQRV9LRVk6IHR5cGVfc3RyaW5nLCBHcmFwaFNPTlV0aWwuVkFMVUVfS0VZOiB2YWx1ZX0pCi0gICAgICAgIHNlcmRlcy5vYmplY3RpZnkuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgodmFsdWUsIHJlYWRlcikKLSAgICAgICAgYXNzZXJ0IG8gaXMgc2VyZGVzLm9iamVjdGlmeSgpCi0KLSAgICBkZWYgdGVzdF9kYXRldGltZShzZWxmKToKLSAgICAgICAgZXhwZWN0ZWQgPSBkYXRldGltZS5kYXRldGltZSgyMDE2LCAxMiwgMTQsIDE2LCAxNCwgMzYsIDI5NTAwMCkKLSAgICAgICAgcHRzID0gY2FsZW5kYXIudGltZWdtKGV4cGVjdGVkLnV0Y3RpbWV0dXBsZSgpKSArIGV4cGVjdGVkLm1pY3Jvc2Vjb25kIC8gMWU2Ci0gICAgICAgIHRzID0gaW50KHJvdW5kKHB0cyAqIDEwMDApKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpEYXRlIiwgIkB2YWx1ZSI6IHRzfSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgZGF0ZXRpbWUuZGF0ZXRpbWUpCi0gICAgICAgICMgVElOS0VSUE9QLTE4NDgKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCi0gICAgZGVmIHRlc3Rfb2Zmc2V0ZGF0ZXRpbWUoc2VsZik6Ci0gICAgICAgIHR6ID0gZGF0ZXRpbWUudGltZXpvbmUoZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MzYwMDApKQotICAgICAgICBtcyA9IDEyMzQ1Njc4OTEyCi0gICAgICAgIGV4cGVjdGVkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAyMiwgNSwgMjAsIHR6aW5mbz10eikgKyBkYXRldGltZS50aW1lZGVsdGEobWljcm9zZWNvbmRzPW1zKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZ3g6T2Zmc2V0RGF0ZVRpbWUiLCAiQHZhbHVlIjogZXhwZWN0ZWQuaXNvZm9ybWF0KCl9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3V0cHV0LCBkYXRldGltZS5kYXRldGltZSkKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCi0gICAgZGVmIHRlc3Rfb2Zmc2V0ZGF0ZXRpbWVfenVsdShzZWxmKToKLSAgICAgICAgdHogPSBkYXRldGltZS50aW1lem9uZS51dGMKLSAgICAgICAgbXMgPSAxMjM0NTY3ODkxMgotICAgICAgICBleHBlY3RlZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMjIsIDUsIDIwLCB0emluZm89dHopICsgZGF0ZXRpbWUudGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1tcykKLSAgICAgICAgIyBzaW11bGF0ZSB6dWx1IGZvcm1hdAotICAgICAgICBleHBlY3RlZF96dWx1ID0gZXhwZWN0ZWQuaXNvZm9ybWF0KClbOi02XSArICdaJwotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZ3g6T2Zmc2V0RGF0ZVRpbWUiLCAiQHZhbHVlIjogZXhwZWN0ZWRfenVsdX0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdXRwdXQsIGRhdGV0aW1lLmRhdGV0aW1lKQotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF90aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgIGR0ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7IkB0eXBlIjogImc6VGltZXN0YW1wIiwgIkB2YWx1ZSI6IDE0ODE3NTAwNzYyOTV9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZHQsIHRpbWVzdGFtcCkKLSAgICAgICAgYXNzZXJ0IGZsb2F0KGR0KSA9PSAxNDgxNzUwMDc2LjI5NQotCi0gICAgZGVmIHRlc3RfZHVyYXRpb24oc2VsZik6Ci0gICAgICAgIGQgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZ3g6RHVyYXRpb24iLCAiQHZhbHVlIjogIlBUMTIwSCJ9KSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGF0ZXRpbWUudGltZWRlbHRhKQotICAgICAgICBhc3NlcnQgZCA9PSBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9MTIwKQotCi0gICAgZGVmIHRlc3RfdXVpZChzZWxmKToKLSAgICAgICAgcHJvcCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAganNvbi5kdW1wcyh7J0B0eXBlJzogJ2c6VVVJRCcsICdAdmFsdWUnOiAiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2In0pKQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9wLCB1dWlkLlVVSUQpCi0gICAgICAgIGFzc2VydCBzdHIocHJvcCkgPT0gJzQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NicKLQotICAgIGRlZiB0ZXN0X21ldHJpY3Moc2VsZik6Ci0gICAgICAgIHByb3AgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIGpzb24uZHVtcHMoW3snQHR5cGUnOiAnZzpUcmF2ZXJzYWxNZXRyaWNzJywgJ0B2YWx1ZSc6IHsnZHVyJzogMS40Njg1OTQsICdtZXRyaWNzJzogWwotICAgICAgICAgICAgICAgIHsnQHR5cGUnOiAnZzpNZXRyaWNzJywgJ0B2YWx1ZSc6IHsnZHVyJzogMS4zODA5NTcsICdjb3VudHMnOiB7fSwgJ25hbWUnOiAnR3JhcGhTdGVwKF9fLlYoKSknLCAnYW5ub3RhdGlvbnMnOiB7J3BlcmNlbnREdXInOiA5NC4wMzI1OTE3MTY5NzU1Nn0sICdpZCc6ICc0LjAuMCgpJ319LAotICAgICAgICAgICAgICAgIHsnQHR5cGUnOiAnZzpNZXRyaWNzJywgJ0B2YWx1ZSc6IHsnZHVyJzogMC4wODc2MzcsICdjb3VudHMnOiB7fSwgJ25hbWUnOiAnUmVmZXJlbmNlRWxlbWVudFN0ZXAnLCAnYW5ub3RhdGlvbnMnOiB7J3BlcmNlbnREdXInOiA1Ljk2NzQwODI4MzAyNDQ0NH0sICdpZCc6ICczLjAuMCgpJ319Ci0gICAgICAgICAgICBdfX1dKSkKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvcCwgbGlzdCkKLSAgICAgICAgYXNzZXJ0IHByb3AgPT0gW3snZHVyJzogMS40Njg1OTQsICdtZXRyaWNzJzogWwotICAgICAgICAgICAgICAgIHsnZHVyJzogMS4zODA5NTcsICdjb3VudHMnOiB7fSwgJ25hbWUnOiAnR3JhcGhTdGVwKF9fLlYoKSknLCAnYW5ub3RhdGlvbnMnOiB7J3BlcmNlbnREdXInOiA5NC4wMzI1OTE3MTY5NzU1Nn0sICdpZCc6ICc0LjAuMCgpJ30sCi0gICAgICAgICAgICAgICAgeydkdXInOiAwLjA4NzYzNywgJ2NvdW50cyc6IHt9LCAnbmFtZSc6ICdSZWZlcmVuY2VFbGVtZW50U3RlcCcsICdhbm5vdGF0aW9ucyc6IHsncGVyY2VudER1cic6IDUuOTY3NDA4MjgzMDI0NDQ0fSwgJ2lkJzogJzMuMC4wKCknfQotICAgICAgICAgICAgICAgIF19XQotCi0gICAgZGVmIHRlc3RfYnl0ZWJ1ZmZlcihzZWxmKToKLSAgICAgICAgYmIgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJneDpCeXRlQnVmZmVyIiwgIkB2YWx1ZSI6ICJjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEifSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJiLCBCeXRlQnVmZmVyVHlwZSkKLSAgICAgICAgYXNzZXJ0IEJ5dGVCdWZmZXJUeXBlKCJjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEiLCAidXRmOCIpID09IGJiCi0KLSAgICBkZWYgdGVzdF9jaGFyKHNlbGYpOgotICAgICAgICBjID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7IkB0eXBlIjogImd4OkNoYXIiLCAiQHZhbHVlIjogIkwifSkpCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGMsIFNpbmdsZUNoYXIpCi0gICAgICAgIGFzc2VydCBjaHIoNzYpID09IGMKLQotICAgIGRlZiB0ZXN0X251bGwoc2VsZik6Ci0gICAgICAgIGMgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKE5vbmUpKQotICAgICAgICBhc3NlcnQgYyBpcyBOb25lCi0KLQotY2xhc3MgVGVzdEdyYXBoU09OV3JpdGVyOgotICAgIGdyYXBoc29uX3dyaXRlciA9IEdyYXBoU09OV3JpdGVyKCkKLSAgICBncmFwaHNvbl9yZWFkZXIgPSBHcmFwaFNPTlJlYWRlcigpCi0KLSAgICBkZWYgdGVzdF9jb2xsZWN0aW9ucyhzZWxmKToKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpMaXN0IiwgIkB2YWx1ZSI6IFt7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAzfV19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoWzEsIDIsIDNdKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogW3siQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAyfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAzfV19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoezEsIDIsIDMsIDN9KSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpNYXAiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiOiBbJ2EnLCB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX1dfSA9PSBqc29uLmxvYWRzKAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KHsnYSc6IDF9KSkKLQotICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6Ci0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImd4OkJ5dGUiLCAiQHZhbHVlIjogMX0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoaW50Ll9fbmV3X18oU2luZ2xlQnl0ZSwgMSkpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJneDpJbnQxNiIsICJAdmFsdWUiOiAxNn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3Qoc2hvcnQoMTYpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZ3g6SW50MTYiLCAiQHZhbHVlIjogLTE2fSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChzaG9ydCgtMTYpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAyfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChsb25nKDIpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiA4NTE0MDE5NzI1ODUxMjJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoODUxNDAxOTcyNTg1MTIyKSkpCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6SW50NjQiLCAiQHZhbHVlIjogLTJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoLTIpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAtODUxNDAxOTcyNTg1MTIyfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChsb25nKC04NTE0MDE5NzI1ODUxMjIpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCgxKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAtMX0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoLTEpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDY0IiwgIkB2YWx1ZSI6IDg1MTQwMTk3MjU4NTEyMn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoODUxNDAxOTcyNTg1MTIyKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEb3VibGUiLCAiQHZhbHVlIjogMy4yfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCgzLjIpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRvdWJsZSIsICJAdmFsdWUiOiAiTmFOIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoZmxvYXQoJ25hbicpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEb3VibGUiLCAiQHZhbHVlIjogIkluZmluaXR5In0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoZmxvYXQoJ2luZicpKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEb3VibGUiLCAiQHZhbHVlIjogIi1JbmZpbml0eSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGZsb2F0KCctaW5mJykpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJneDpCaWdEZWNpbWFsIiwgIkB2YWx1ZSI6ICIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChiaWdkZWNpbWFsKCcxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEnKSkpCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImd4OkJpZ0ludGVnZXIiLCAiQHZhbHVlIjogIjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxKSkpCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImd4OkJpZ0ludGVnZXIiLCAiQHZhbHVlIjogIjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSkpCi0gICAgICAgIGFzc2VydCAiIiJ0cnVlIiIiID09IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChUcnVlKQotCi0gICAgZGVmIHRlc3RfZW51bShzZWxmKToKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpNZXJnZSIsICJAdmFsdWUiOiAib25NYXRjaCJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KE1lcmdlLm9uX21hdGNoKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpPcmRlciIsICJAdmFsdWUiOiAic2h1ZmZsZSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KE9yZGVyLnNodWZmbGUpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkJhcnJpZXIiLCAiQHZhbHVlIjogIm5vcm1TYWNrIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoQmFycmllci5ub3JtX3NhY2spKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOk9wZXJhdG9yIiwgIkB2YWx1ZSI6ICJzdW0ifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChPcGVyYXRvci5zdW1fKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpPcGVyYXRvciIsICJAdmFsdWUiOiAic3VtTG9uZyJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KE9wZXJhdG9yLnN1bV9sb25nKSkKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEaXJlY3Rpb24iLCAiQHZhbHVlIjogIk9VVCJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KERpcmVjdGlvbi5PVVQpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRpcmVjdGlvbiIsICJAdmFsdWUiOiAiT1VUIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoRGlyZWN0aW9uLmZyb21fKSkKLQotICAgIGRlZiB0ZXN0X1Aoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHsnQHR5cGUnOiAnZzpQJywKLSAgICAgICAgICAgICAgICAgICdAdmFsdWUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgJ3ByZWRpY2F0ZSc6ICdhbmQnLAotICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZSc6IFt7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdnOlAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnQHZhbHVlJzogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZWRpY2F0ZSc6ICdvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiBbewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdnOlAnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdmFsdWUnOiB7J3ByZWRpY2F0ZSc6ICdsdCcsICd2YWx1ZSc6ICdiJ30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydAdHlwZSc6ICdnOlAnLCAnQHZhbHVlJzogeydwcmVkaWNhdGUnOiAnZ3QnLCAndmFsdWUnOiAnYyd9fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeydAdHlwZSc6ICdnOlAnLCAnQHZhbHVlJzogeydwcmVkaWNhdGUnOiAnbmVxJywgJ3ZhbHVlJzogJ2QnfX1dfX0KLQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUC5sdCgiYiIpLm9yXyhQLmd0KCJjIikpLmFuZF8oUC5uZXEoImQiKSkpKQotCi0gICAgICAgIHJlc3VsdCA9IHsnQHR5cGUnOiAnZzpQJywgJ0B2YWx1ZSc6IHsncHJlZGljYXRlJzogJ3dpdGhpbicsICd2YWx1ZSc6IHsnQHR5cGUnOiAnZzpMaXN0JywgJ0B2YWx1ZSc6IFsKLSAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSwgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDJ9XX19fQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKFsxLCAyXSkpKQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKHsxLCAyfSkpKQotICAgICAgICBhc3NlcnQgcmVzdWx0ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFAud2l0aGluKDEsIDIpKSkKLQotICAgICAgICByZXN1bHQgPSB7J0B0eXBlJzogJ2c6UCcsICdAdmFsdWUnOiB7J3ByZWRpY2F0ZSc6ICd3aXRoaW4nLCAndmFsdWUnOiB7J0B0eXBlJzogJ2c6TGlzdCcsICdAdmFsdWUnOiBbCi0gICAgICAgICAgICB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX1dfX19Ci0gICAgICAgIGFzc2VydCByZXN1bHQgPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUC53aXRoaW4oWzFdKSkpCi0gICAgICAgIGFzc2VydCByZXN1bHQgPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUC53aXRoaW4oezF9KSkpCi0gICAgICAgIGFzc2VydCByZXN1bHQgPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUC53aXRoaW4oMSkpKQotCi0gICAgZGVmIHRlc3Rfc3RyYXRlZ2llcyhzZWxmKToKLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpTdWJncmFwaFN0cmF0ZWd5IiwgIkB2YWx1ZSI6IHsnY29uZic6IHt9LCAnZnFjbic6ICdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneSd9fSA9PSBqc29uLmxvYWRzKAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFN1YmdyYXBoU3RyYXRlZ3kpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOlN1YmdyYXBoU3RyYXRlZ3kiLCAiQHZhbHVlIjogeydjb25mJzogeyAidmVydGljZXMiOiB7IkB0eXBlIjogImc6Qnl0ZWNvZGUiLCAiQHZhbHVlIjogeyJzdGVwIjogW1siaGFzIiwgIm5hbWUiLCAibWFya28iXV19fX0sICdmcWNuJzogJ29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5J319ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoIm5hbWUiLCAibWFya28iKSkpKQotCi0gICAgZGVmIHRlc3RfZ3JhcGgoc2VsZik6Ci0gICAgICAgICMgVE9ETzogdGhpcyBhc3NlcnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBweXRob24gMyBhbmQgbm93IHRoYXQgd2UgdGVzdCB3aXRoIGJvdGggMiBhbmQgMyBpdCBmYWlscwotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOlZlcnRleCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsiaWQiOiB7IkB0eXBlIjogImc6SW50NjQiLCAiQHZhbHVlIjogMTJ9LCAibGFiZWwiOiAicGVyc29uIn19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoVmVydGV4KGxvbmcoMTIpLCAicGVyc29uIikpKQotCi0gICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6RWRnZSIsICJAdmFsdWUiOiB7ImlkIjogeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDd9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWIjogeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdXRWTGFiZWwiOiAicGVyc29uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiAia25vd3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpblYiOiB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluVkxhYmVsIjogImRvZyJ9fSA9PSBqc29uLmxvYWRzKAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KEVkZ2UoNywgVmVydGV4KDAsICJwZXJzb24iKSwgImtub3dzIiwgVmVydGV4KDEsICJkb2ciKSkpKQotICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOlZlcnRleFByb3BlcnR5IiwgIkB2YWx1ZSI6IHsiaWQiOiAiYmxhaCIsICJsYWJlbCI6ICJrZXlBIiwgInZhbHVlIjogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcnRleCI6ICJzdGVwaGVuIn19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoVmVydGV4UHJvcGVydHkoImJsYWgiLCAia2V5QSIsIFRydWUsIFZlcnRleCgic3RlcGhlbiIpKSkpCi0KLSAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSI6IHsia2V5IjogIm5hbWUiLCAidmFsdWUiOiAibWFya28iLCAiZWxlbWVudCI6IHsiQHR5cGUiOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJ0ZXgiOiAidmVydGV4SWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpZCI6IHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxMjM0fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFiZWwiOiAiYUtleSJ9fX19ID09IGpzb24ubG9hZHMoCi0gICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoCi0gICAgICAgICAgICAgICAgUHJvcGVydHkoIm5hbWUiLCAibWFya28iLCBWZXJ0ZXhQcm9wZXJ0eSgxMjM0LCAiYUtleSIsIDIxMzQ1LCBWZXJ0ZXgoInZlcnRleElkIikpKSkpCi0KLSAgICAgICAgdmVydGV4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleCgxLCAicGVyc29uIikpKQotICAgICAgICBhc3NlcnQgMSA9PSB2ZXJ0ZXguaWQKLSAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IHZlcnRleC5sYWJlbAotCi0gICAgICAgIGVkZ2UgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKLSAgICAgICAgICAgIHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChFZGdlKDMsIFZlcnRleCgxLCAicGVyc29uIiksICJrbm93cyIsIFZlcnRleCgyLCAiZG9nIikpKSkKLSAgICAgICAgYXNzZXJ0ICJrbm93cyIgPT0gZWRnZS5sYWJlbAotICAgICAgICBhc3NlcnQgMyA9PSBlZGdlLmlkCi0gICAgICAgIGFzc2VydCAxID09IGVkZ2Uub3V0Vi5pZAotICAgICAgICBhc3NlcnQgMiA9PSBlZGdlLmluVi5pZAotCi0gICAgICAgIHZlcnRleF9wcm9wZXJ0eSA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAotICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleFByb3BlcnR5KDEsICJhZ2UiLCAzMiwgVmVydGV4KDEpKSkpCi0gICAgICAgIGFzc2VydCAxID09IHZlcnRleF9wcm9wZXJ0eS5pZAotICAgICAgICBhc3NlcnQgImFnZSIgPT0gdmVydGV4X3Byb3BlcnR5LmtleQotICAgICAgICBhc3NlcnQgMzIgPT0gdmVydGV4X3Byb3BlcnR5LnZhbHVlCi0KLSAgICAgICAgcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUHJvcGVydHkoImFnZSIsIDMyLjIsIEVkZ2UoMSwgVmVydGV4KDIpLCAia25vd3MiLCBWZXJ0ZXgoMykpKSkpCi0gICAgICAgIGFzc2VydCAiYWdlIiA9PSBwcm9wZXJ0eS5rZXkKLSAgICAgICAgYXNzZXJ0IDMyLjIgPT0gcHJvcGVydHkudmFsdWUKLQotICAgIGRlZiB0ZXN0X2N1c3RvbV9tYXBwaW5nKHNlbGYpOgotICAgICAgICAjIGV4dGVuZGVkIG1hcHBpbmcKLSAgICAgICAgY2xhc3MgWDoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZXJkZXMgPSBNb2NrKCkKLSAgICAgICAgd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIoc2VyaWFsaXplcl9tYXA9e1g6IHNlcmRlc30pCi0gICAgICAgIGFzc2VydCBYIGluIHdyaXRlci5zZXJpYWxpemVycwotCi0gICAgICAgICMgYmFzZSBkaWN0cyBhcmUgbm90IG1vZGlmaWVkCi0gICAgICAgIGFzc2VydCBYIG5vdCBpbiBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WM2QwLl9zZXJpYWxpemVycwotCi0gICAgICAgIG9iaiA9IFgoKQotICAgICAgICBkID0gd3JpdGVyLnRvX2RpY3Qob2JqKQotICAgICAgICBzZXJkZXMuZGljdGlmeS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChvYmosIHdyaXRlcikKLSAgICAgICAgYXNzZXJ0IGQgaXMgc2VyZGVzLmRpY3RpZnkoKQotCi0gICAgICAgICMgb3ZlcnJpZGRlbiBtYXBwaW5nCi0gICAgICAgIHNlcmRlcyA9IE1vY2soKQotICAgICAgICB3cml0ZXIgPSBHcmFwaFNPTldyaXRlcihzZXJpYWxpemVyX21hcD17aW50OiBzZXJkZXN9KQotICAgICAgICBhc3NlcnQgZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLmdyYXBoc29uVjNkMC5fc2VyaWFsaXplcnNbaW50XSBpcyBub3Qgd3JpdGVyLnNlcmlhbGl6ZXJzW2ludF0KLQotICAgICAgICB2YWx1ZSA9IDMKLSAgICAgICAgZCA9IHdyaXRlci50b19kaWN0KHZhbHVlKQotICAgICAgICBzZXJkZXMuZGljdGlmeS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCh2YWx1ZSwgd3JpdGVyKQotICAgICAgICBhc3NlcnQgZCBpcyBzZXJkZXMuZGljdGlmeSgpCi0KLSAgICBkZWYgdGVzdF93cml0ZV9sb25nKHNlbGYpOgotICAgICAgICBtYXBwaW5nID0gc2VsZi5ncmFwaHNvbl93cml0ZXIudG9fZGljdCgxKQotICAgICAgICBhc3NlcnQgbWFwcGluZ1snQHR5cGUnXSA9PSAnZzpJbnQzMicKLSAgICAgICAgYXNzZXJ0IG1hcHBpbmdbJ0B2YWx1ZSddID09IDEKLQotICAgICAgICBtYXBwaW5nID0gc2VsZi5ncmFwaHNvbl93cml0ZXIudG9fZGljdChsb25nKDEpKQotICAgICAgICBhc3NlcnQgbWFwcGluZ1snQHR5cGUnXSA9PSAnZzpJbnQ2NCcKLSAgICAgICAgYXNzZXJ0IG1hcHBpbmdbJ0B2YWx1ZSddID09IDEKLQotICAgIGRlZiB0ZXN0X2RhdGV0aW1lKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOkRhdGUiLCAiQHZhbHVlIjogMTQ4MTc1MDA3NjI5NX0sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDE0ODE3NTAwNzYyOTUgLyAxMDAwLjApCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChkdCkKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfdGltZXN0YW1wKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOlRpbWVzdGFtcCIsICJAdmFsdWUiOiAxNDgxNzUwMDc2Mjk1fSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQotICAgICAgICB0cyA9IHRpbWVzdGFtcCgxNDgxNzUwMDc2Mjk1IC8gMTAwMC4wKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QodHMpCi0gICAgICAgIGFzc2VydCBleHBlY3RlZCA9PSBvdXRwdXQKLQotICAgIGRlZiB0ZXN0X2R1cmF0aW9uKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeyJAdHlwZSI6ICJneDpEdXJhdGlvbiIsICJAdmFsdWUiOiAiUDVEIn0sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKLSAgICAgICAgZCA9IGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz0xMjApCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChkKQotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF91dWlkKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeydAdHlwZSc6ICdnOlVVSUQnLCAnQHZhbHVlJzogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiJ9LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCi0gICAgICAgIHByb3AgPSB1dWlkLlVVSUQoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChwcm9wKQotICAgICAgICBhc3NlcnQgZXhwZWN0ZWQgPT0gb3V0cHV0Ci0KLSAgICBkZWYgdGVzdF9ieXRlYnVmZmVyKHNlbGYpOgotICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeydAdHlwZSc6ICdneDpCeXRlQnVmZmVyJywgJ0B2YWx1ZSc6ICdjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEnfSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQotICAgICAgICBiYiA9IEJ5dGVCdWZmZXJUeXBlKCJjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEiLCAidXRmOCIpCi0gICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChiYikKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAotCi0gICAgZGVmIHRlc3RfY2hhcihzZWxmKToKLSAgICAgICAgZXhwZWN0ZWQgPSBqc29uLmR1bXBzKHsnQHR5cGUnOiAnZ3g6Q2hhcicsICdAdmFsdWUnOiAnTCd9LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCi0gICAgICAgIGMgPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNzYpKQotICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoYykKLSAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvcHJvY2Vzcy90ZXN0X2dyZW1saW5fbGFuZy5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3Byb2Nlc3MvdGVzdF9ncmVtbGluX2xhbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRjNzM4YQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3Byb2Nlc3MvdGVzdF9ncmVtbGluX2xhbmcucHkKQEAgLTAsMCArMSw1MzUgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworIiIiCitVbml0IHRlc3RzIGZvciB0aGUgR3JlbWxpbkxhbmcgQ2xhc3MuIE1vZGlmaWVkIGZyb20gZGVwcmVjYXRlZCBHcm9vdnkgVHJhbnNsYXRvciBUZXN0cy4KKyIiIgoraW1wb3J0IHV1aWQKKworZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnN0cmF0ZWdpZXMgaW1wb3J0IFJlYWRPbmx5U3RyYXRlZ3ksIFN1YmdyYXBoU3RyYXRlZ3ksIE9wdGlvbnNTdHJhdGVneSwgUGFydGl0aW9uU3RyYXRlZ3kKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IHdpdGhpbiwgZXEsIFQsIE9yZGVyLCBTY29wZSwgQ29sdW1uLCBPcGVyYXRvciwgUCwgUG9wLCBDYXJkaW5hbGl0eSwgXAorICAgIGJldHdlZW4sIGluc2lkZSwgV2l0aE9wdGlvbnMsIFNob3J0ZXN0UGF0aCwgc3RhcnRpbmdfd2l0aCwgZW5kaW5nX3dpdGgsIGNvbnRhaW5pbmcsIGd0LCBsdGUsIEdWYWx1ZQorZnJvbSBncmVtbGluX3B5dGhvbi5zdGF0aWNzIGltcG9ydCBTaW5nbGVCeXRlLCBzaG9ydCwgbG9uZywgYmlnaW50LCBCaWdEZWNpbWFsCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgR3JhcGgsIFZlcnRleCwgRWRnZSwgVmVydGV4UHJvcGVydHkKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5hbm9ueW1vdXNfdHJhdmVyc2FsIGltcG9ydCB0cmF2ZXJzYWwKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUsIHRpbWVkZWx0YQorCisKK2NsYXNzIFRlc3RHcmVtbGluTGFuZyhvYmplY3QpOgorCisgICAgZGVmIHRlc3RfZ3JlbWxpbl9sYW5nKHNlbGYpOgorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8oTm9uZSkKKworICAgICAgICB0ZXN0cyA9IGxpc3QoKQorICAgICAgICAjIDAKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkiXSkKKyAgICAgICAgIyAxCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCcxJywgJzInLCAnMycsICc0JyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignMScsJzInLCczJywnNCcpIl0pCisgICAgICAgICMgMgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLnZhbHVlX21hcChUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCczJykudmFsdWVNYXAodHJ1ZSkiXSkKKyAgICAgICAgIyAzCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuY29uc3RhbnQoNSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmNvbnN0YW50KDUpIl0pCisgICAgICAgICMgNAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmNvbnN0YW50KDEuNSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmNvbnN0YW50KDEuNUQpIl0pCisgICAgICAgICMgNQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmNvbnN0YW50KCdIZWxsbycpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5jb25zdGFudCgnSGVsbG8nKSJdKQorICAgICAgICAjIDYKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwoJ2FpcnBvcnQnKS5saW1pdCg1KSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5saW1pdCg1KSJdKQorICAgICAgICAjIDcKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwod2l0aGluKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwod2l0aGluKFsnYScsJ2InLCdjJ10pKSJdKQorICAgICAgICAjIDgKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwoJ2FpcnBvcnQnLCAnY29udGluZW50Jykub3V0KCkubGltaXQoNSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JywnY29udGluZW50Jykub3V0KCkubGltaXQoNSkiXSkKKyAgICAgICAgIyA5CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzX2xhYmVsKCdhaXJwb3J0Jykub3V0KCkudmFsdWVzKCdjb2RlJykubGltaXQoNSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3V0KCkudmFsdWVzKCdjb2RlJykubGltaXQoNSkiXSkKKyAgICAgICAgIyAxMAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLmFzXygnYScpLm91dCgncm91dGUnKS5saW1pdCgxMCkud2hlcmUoZXEoJ2EnKSkuYnkoJ3JlZ2lvbicpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5hcygnYScpLm91dCgncm91dGUnKS5saW1pdCgxMCkud2hlcmUoZXEoJ2EnKSkuYnkoJ3JlZ2lvbicpIl0pCisgICAgICAgICMgMTEKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCdyb3V0ZScpLnNpbXBsZV9wYXRoKCkpLnRpbWVzKDIpLnBhdGgoKS5ieSgnY29kZScpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCdyb3V0ZScpLnNpbXBsZVBhdGgoKSkudGltZXMoMikucGF0aCgpLmJ5KCdjb2RlJykiXSkKKyAgICAgICAgIyAxMgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc19sYWJlbCgnYWlycG9ydCcpLm91dCgpLmhhcygncmVnaW9uJywgJ1VTLVRYJykudmFsdWVzKCdjb2RlJykubGltaXQoNSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3V0KCkuaGFzKCdyZWdpb24nLCdVUy1UWCcpLnZhbHVlcygnY29kZScpLmxpbWl0KDUpIl0pCisgICAgICAgICMgMTMKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwoJ2FpcnBvcnQnKS51bmlvbihfXy52YWx1ZXMoJ2NpdHknKSwgX18udmFsdWVzKCdyZWdpb24nKSkubGltaXQoNSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykudW5pb24oX18udmFsdWVzKCdjaXR5JyksX18udmFsdWVzKCdyZWdpb24nKSkubGltaXQoNSkiXSkKKyAgICAgICAgIyAxNAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLmFzXygnYScpLm91dCgncm91dGUnLCAncm91dGVzJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLmFzKCdhJykub3V0KCdyb3V0ZScsJ3JvdXRlcycpIl0pCisgICAgICAgICMgMTUKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS53aGVyZShfXy52YWx1ZXMoJ3J1bndheXMnKS5pc18oNSkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS53aGVyZShfXy52YWx1ZXMoJ3J1bndheXMnKS5pcyg1KSkiXSkKKyAgICAgICAgIyAxNgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVfcGF0aCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCAnQUdSJykpLnBhdGgoKS5ieSgnY29kZScpLmxpbWl0KDUpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKSkucGF0aCgpLmJ5KCdjb2RlJykubGltaXQoNSkiXSkKKyAgICAgICAgIyAxNworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc19sYWJlbCgnYWlycG9ydCcpLm9yZGVyKCkuYnkoX18uaWRfKCkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm9yZGVyKCkuYnkoX18uaWQoKSkiXSkKKyAgICAgICAgIyAxOAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc19sYWJlbCgnYWlycG9ydCcpLm9yZGVyKCkuYnkoVC5pZCksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShULmlkKSJdKQorICAgICAgICAjIDE5CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzX2xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZF8oKSwgT3JkZXIuZGVzYyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZCgpLE9yZGVyLmRlc2MpIl0pCisgICAgICAgICMgMjAKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwoJ2FpcnBvcnQnKS5vcmRlcigpLmJ5KCdjb2RlJywgT3JkZXIuZGVzYyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieSgnY29kZScsT3JkZXIuZGVzYykiXSkKKyAgICAgICAgIyAyMQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMScsICcyJywgJzMnKS5sb2NhbChfXy5vdXQoKS5vdXQoKS5kZWR1cCgpLmZvbGQoKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignMScsJzInLCczJykubG9jYWwoX18ub3V0KCkub3V0KCkuZGVkdXAoKS5mb2xkKCkpIl0pCisgICAgICAgICMgMjIKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5vdXQoKS5wYXRoKCkuY291bnQoU2NvcGUubG9jYWwpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5vdXQoKS5wYXRoKCkuY291bnQoU2NvcGUubG9jYWwpIl0pCisgICAgICAgICMgMjMKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLkUoKS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLkUoKS5jb3VudCgpIl0pCisgICAgICAgICMgMjQKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzUnKS5vdXRfZSgncm91dGUnKS5pbl92KCkucGF0aCgpLmxpbWl0KDEwKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc1Jykub3V0RSgncm91dGUnKS5pblYoKS5wYXRoKCkubGltaXQoMTApIl0pCisgICAgICAgICMgMjUKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzUnKS5wcm9wZXJ0eV9tYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzUnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cykiXSkKKyAgICAgICAgIyAyNgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignNScpLnByb3BlcnR5X21hcCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc1JykucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykiXSkKKyAgICAgICAgIyAyNworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLnZhbHVlcygncnVud2F5cycpLm1hdGgoJ18gKyAxJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLnZhbHVlcygncnVud2F5cycpLm1hdGgoJ18gKyAxJykiXSkKKyAgICAgICAgIyAyOAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlX3BhdGgoKSkudGltZXMoMykubGltaXQoNSkucGF0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5lbWl0KCkucmVwZWF0KF9fLm91dCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykubGltaXQoNSkucGF0aCgpIl0pCisgICAgICAgICMgMjkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5oYXMoJ2NvZGUnLCAnTEhSJykuYXNfKCdiJykpLnNlbGVjdCgnYicpLmJ5KCdjb2RlJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLm1hdGNoKF9fLmFzKCdhJykuaGFzKCdjb2RlJywnTEhSJykuYXMoJ2InKSkuc2VsZWN0KCdiJykuYnkoJ2NvZGUnKSJdKQorICAgICAgICAjIDMwCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCd0ZXN0LXVzaW5nLWtleXdvcmQtYXMtcHJvcGVydHknLCAncmVwZWF0JyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygndGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5JywncmVwZWF0JykiXSkKKyAgICAgICAgIyAzMQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMScpLmFkZF9lKCd0ZXN0JykudG8oX18uVignNCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCcxJykuYWRkRSgndGVzdCcpLnRvKF9fLlYoJzQnKSkiXSkKKyAgICAgICAgIyAzMgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLnZhbHVlcygncnVud2F5cycpLm1heF8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkudmFsdWVzKCdydW53YXlzJykubWF4KCkiXSkKKyAgICAgICAgIyAzMworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLnZhbHVlcygncnVud2F5cycpLm1pbl8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkudmFsdWVzKCdydW53YXlzJykubWluKCkiXSkKKyAgICAgICAgIyAzNAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLnZhbHVlcygncnVud2F5cycpLnN1bV8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkudmFsdWVzKCdydW53YXlzJykuc3VtKCkiXSkKKyAgICAgICAgIyAzNQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLnZhbHVlcygncnVud2F5cycpLm1lYW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkudmFsdWVzKCdydW53YXlzJykubWVhbigpIl0pCisgICAgICAgICMgMzYKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc2FjaygwKS5WKCczJywgJzUnKS5zYWNrKE9wZXJhdG9yLnN1bV8pLmJ5KCdydW53YXlzJykuc2FjaygpLAorICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTYWNrKDApLlYoJzMnLCc1Jykuc2FjayhPcGVyYXRvci5zdW0pLmJ5KCdydW53YXlzJykuc2FjaygpIl0pCisgICAgICAgICMgMzcgLSByZW1vdmVkIGFzIHN0b3JlKCkgd2FzIGRlcHJlY2F0ZWQgYW5kIHJlbW92ZWQgaW4gMy44LjAKKyAgICAgICAgIyAzOAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuaW5qZWN0KDMsIDQsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdCgzLDQsNSkiXSkKKyAgICAgICAgIyAzOQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuaW5qZWN0KFszLCA0LCA1XSksCisgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KFszLDQsNV0pIl0pCisgICAgICAgICMgNDAKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdCgzLCA0LCA1KS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdCgzLDQsNSkuY291bnQoKSJdKQorICAgICAgICAjIDQxCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdydW53YXlzJywgZ3QoNSkpLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncnVud2F5cycsZ3QoNSkpLmNvdW50KCkiXSkKKyAgICAgICAgIyA0MgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygncnVud2F5cycsIGx0ZSg1LjMpKS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ3J1bndheXMnLGx0ZSg1LjNEKSkuY291bnQoKSJdKQorICAgICAgICAjIDQzCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdjb2RlJywgd2l0aGluKDEyMywgMTI0KSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygnY29kZScsd2l0aGluKFsxMjMsMTI0XSkpIl0pCisgICAgICAgICMgNDQKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2NvZGUnLCB3aXRoaW4oMTIzLCAnYWJjJykpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbMTIzLCdhYmMnXSkpIl0pCisgICAgICAgICMgNDUKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2NvZGUnLCB3aXRoaW4oJ2FiYycsIDEyMykpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbJ2FiYycsMTIzXSkpIl0pCisgICAgICAgICMgNDYKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2NvZGUnLCB3aXRoaW4oJ2FiYycsICd4eXonKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygnY29kZScsd2l0aGluKFsnYWJjJywneHl6J10pKSJdKQorICAgICAgICAjIDQ3CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCcxJywgJzInKS5oYXMoJ3JlZ2lvbicsIFAud2l0aGluKCdVUy1UWCcsICdVUy1HQScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCcxJywnMicpLmhhcygncmVnaW9uJyx3aXRoaW4oWydVUy1UWCcsJ1VTLUdBJ10pKSJdKQorICAgICAgICAjIDQ4CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuYW5kXyhfXy5oYXMoJ3J1bndheXMnLCBQLmd0KDUpKSwgX18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmFuZChfXy5oYXMoJ3J1bndheXMnLGd0KDUpKSxfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJykpIl0pCisgICAgICAgICMgNDkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS51bmlvbihfXy5oYXMoJ3J1bndheXMnLCBndCg1KSksIF9fLmhhcygncmVnaW9uJywgJ1VTLVRYJykpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS51bmlvbihfXy5oYXMoJ3J1bndheXMnLGd0KDUpKSxfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJykpIl0pCisgICAgICAgICMgNTAKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5jaG9vc2UoX18udmFsdWVzKCdydW53YXlzJykuaXNfKDMpLCBfXy5jb25zdGFudCgndGhyZWUnKSwgX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpLmlzKDMpLF9fLmNvbnN0YW50KCd0aHJlZScpLF9fLmNvbnN0YW50KCdub3QgdGhyZWUnKSkiXSkKKyAgICAgICAgIyA1MQorICAgICAgICB0ZXN0cy5hcHBlbmQoCisgICAgICAgICAgICBbZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpKS5vcHRpb24oMSwgX18uY29uc3RhbnQoJ3RocmVlJykpLm9wdGlvbigyLCBfXy5jb25zdGFudCgnbm90IHRocmVlJykpLAorICAgICAgICAgICAgICJnLlYoJzMnKS5jaG9vc2UoX18udmFsdWVzKCdydW53YXlzJykpLm9wdGlvbigxLF9fLmNvbnN0YW50KCd0aHJlZScpKS5vcHRpb24oMixfXy5jb25zdGFudCgnbm90IHRocmVlJykpIl0pCisgICAgICAgICMgNTIKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5jaG9vc2UoX18udmFsdWVzKCdydW53YXlzJykpLm9wdGlvbigxLjUsIF9fLmNvbnN0YW50KCdvbmUgYW5kIGEgaGFsZicpKS5vcHRpb24oMiwgX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpKS5vcHRpb24oMS41RCxfXy5jb25zdGFudCgnb25lIGFuZCBhIGhhbGYnKSkub3B0aW9uKDIsX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSJdKQorICAgICAgICAjIDUzCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCczJykucmVwZWF0KF9fLm91dCgpLnNpbXBsZV9wYXRoKCkpLnVudGlsKF9fLmxvb3BzKCkuaXNfKDEpKS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5sb29wcygpLmlzKDEpKS5jb3VudCgpIl0pCisgICAgICAgICMgNTQKKyAgICAgICAgdGVzdHMuYXBwZW5kKAorICAgICAgICAgICAgW2cuVigpLmhhc19sYWJlbCgnYWlycG9ydCcpLmxpbWl0KDIwKS5ncm91cCgpLmJ5KCdyZWdpb24nKS5ieSgnY29kZScpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cyksCisgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykubGltaXQoMjApLmdyb3VwKCkuYnkoJ3JlZ2lvbicpLmJ5KCdjb2RlJykub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzKSJdKQorICAgICAgICAjIDU1CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCcxJykuYXNfKCdhJykuVignMicpLmFzXygnYScpLnNlbGVjdChQb3AuYWxsXywgJ2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCcxJykuYXMoJ2EnKS5WKCcyJykuYXMoJ2EnKS5zZWxlY3QoUG9wLmFsbCwnYScpIl0pCisgICAgICAgICMgNTYKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZF92KCd0ZXN0JykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0XywgJ3AxJywgMTApLAorICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsJ3AxJywxMCkiXSkKKyAgICAgICAgIyA1NworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkX3YoJ3Rlc3QnKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0XywgJ3AxJywgMTApLAorICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCdwMScsMTApIl0pCisKKyAgICAgICAgIyA1OAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkX3YoJ3Rlc3QnKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICdwMScsIDEwKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCdwMScsMTApIl0pCisgICAgICAgICMgNTkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5saW1pdCg1KS5vcmRlcigpLmJ5KFQubGFiZWwpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5saW1pdCg1KS5vcmRlcigpLmJ5KFQubGFiZWwpIl0pCisKKyAgICAgICAgIyA2MAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLnJhbmdlXygxLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkucmFuZ2UoMSw1KSJdKQorCisgICAgICAgICMgNjEKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZF92KCd0ZXN0JykucHJvcGVydHkoJ3AxJywgMTIzKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ3AxJywxMjMpIl0pCisKKyAgICAgICAgIyA2MgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkX3YoJ3Rlc3QnKS5wcm9wZXJ0eSgnZGF0ZScsIGRhdGV0aW1lKDIwMjEsIDIsIDEsIDksIDMwKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJyxkYXRldGltZShcIjIwMjEtMDItMDFUMDk6MzA6MDBcIikpIl0pCisgICAgICAgICMgNjMKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZF92KCd0ZXN0JykucHJvcGVydHkoJ2RhdGUnLCBkYXRldGltZSgyMDIxLCAyLCAxKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJyxkYXRldGltZShcIjIwMjEtMDItMDFUMDA6MDA6MDBcIikpIl0pCisgICAgICAgICMgNjQKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZF9lKCdyb3V0ZScpLmZyb21fKF9fLlYoJzEnKSkudG8oX18uVignMicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5hZGRFKCdyb3V0ZScpLmZyb20oX18uVignMScpKS50byhfXy5WKCcyJykpIl0pCisgICAgICAgICMgNjUKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCBbMSwgMl0pLlYoJzMnKS5zZWxlY3QoJ2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU2lkZUVmZmVjdCgnYScsWzEsMl0pLlYoJzMnKS5zZWxlY3QoJ2EnKSJdKQorICAgICAgICAjIDY2CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgMSkuVignMycpLnNlbGVjdCgnYScpLAorICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTaWRlRWZmZWN0KCdhJywxKS5WKCczJykuc2VsZWN0KCdhJykiXSkKKyAgICAgICAgIyA2NworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cud2l0aF9zaWRlX2VmZmVjdCgnYScsICdhYmMnKS5WKCczJykuc2VsZWN0KCdhJyksCisgICAgICAgICAgICAgICAgICAgICAgImcud2l0aFNpZGVFZmZlY3QoJ2EnLCdhYmMnKS5WKCczJykuc2VsZWN0KCdhJykiXSkKKyAgICAgICAgIyA2OAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygnYWlycG9ydCcsICdyZWdpb24nLCAnVVMtTk0nKS5saW1pdCgzKS52YWx1ZXMoJ2VsZXYnKS5mb2xkKCkuaW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdhaXJwb3J0JywncmVnaW9uJywnVVMtTk0nKS5saW1pdCgzKS52YWx1ZXMoJ2VsZXYnKS5mb2xkKCkuaW5kZXgoKSJdKQorICAgICAgICAjIDY5CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCczJykucmVwZWF0KF9fLnRpbWVfbGltaXQoMTAwMCkub3V0KCkuc2ltcGxlX3BhdGgoKSkudW50aWwoX18uaGFzKCdjb2RlJywgJ0FHUicpKS5wYXRoKCksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLnJlcGVhdChfXy50aW1lTGltaXQoMTAwMCkub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKSkucGF0aCgpIl0pCisKKyAgICAgICAgIyA3MAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc19sYWJlbCgnYWlycG9ydCcpLndoZXJlKF9fLnZhbHVlcygnZWxldicpLmlzXyhndCgxNDAwMCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS53aGVyZShfXy52YWx1ZXMoJ2VsZXYnKS5pcyhndCgxNDAwMCkpKSJdKQorCisgICAgICAgICMgNzEKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwoJ2FpcnBvcnQnKS53aGVyZShfXy5vdXQoKS5jb3VudCgpLmlzXyhndCgyNTApKSkudmFsdWVzKCdjb2RlJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykud2hlcmUoX18ub3V0KCkuY291bnQoKS5pcyhndCgyNTApKSkudmFsdWVzKCdjb2RlJykiXSkKKworICAgICAgICAjIDcyCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzX2xhYmVsKCdhaXJwb3J0JykuZmlsdGVyXyhfXy5vdXQoKS5jb3VudCgpLmlzXyhndCgyNTApKSkudmFsdWVzKCdjb2RlJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykuZmlsdGVyKF9fLm91dCgpLmNvdW50KCkuaXMoZ3QoMjUwKSkpLnZhbHVlcygnY29kZScpIl0pCisgICAgICAgICMgNzMKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc2FjaygwKS4KKyAgICAgICAgICAgICAgICAgICAgIFYoJzMnKS4KKyAgICAgICAgICAgICAgICAgICAgIHJlcGVhdChfXy5vdXRfZSgncm91dGUnKS5zYWNrKE9wZXJhdG9yLnN1bV8pLmJ5KCdkaXN0JykuaW5fdigpKS4KKyAgICAgICAgICAgICAgICAgICAgIHVudGlsKF9fLmhhcygnY29kZScsICdBR1InKS5vcl8oKS5sb29wcygpLmlzXyg0KSkuCisgICAgICAgICAgICAgICAgICAgICBoYXMoJ2NvZGUnLCAnQUdSJykuCisgICAgICAgICAgICAgICAgICAgICBsb2NhbChfXy51bmlvbihfXy5wYXRoKCkuYnkoJ2NvZGUnKS5ieSgnZGlzdCcpLCBfXy5zYWNrKCkpLmZvbGQoKSkuCisgICAgICAgICAgICAgICAgICAgICBsaW1pdCgxMCksCisgICAgICAgICAgICAgICAgICAgICAgImcud2l0aFNhY2soMCkuVignMycpLnJlcGVhdChfXy5vdXRFKCdyb3V0ZScpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgnZGlzdCcpLmluVigpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKS5vcigpLmxvb3BzKCkuaXMoNCkpLmhhcygnY29kZScsJ0FHUicpLmxvY2FsKF9fLnVuaW9uKF9fLnBhdGgoKS5ieSgnY29kZScpLmJ5KCdkaXN0JyksX18uc2FjaygpKS5mb2xkKCkpLmxpbWl0KDEwKSJdKQorCisgICAgICAgICMgNzQKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZF92KCkuYXNfKCdhJykuYWRkX3YoKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigpLmFzKCdhJykuYWRkVigpLmFzKCdiJykuYWRkRSgna25vd3MnKS5mcm9tKCdhJykudG8oJ2InKSJdKQorCisgICAgICAgICMgNzUKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZF92KCdQZXJzb24nKS5hc18oJ2EnKS5hZGRfdignUGVyc29uJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ1BlcnNvbicpLmFzKCdhJykuYWRkVignUGVyc29uJykuYXMoJ2InKS5hZGRFKCdrbm93cycpLmZyb20oJ2EnKS50bygnYicpIl0pCisKKyAgICAgICAgIyA3NgorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLnByb2plY3QoJ091dCcsICdJbicpLmJ5KF9fLm91dCgpLmNvdW50KCkpLmJ5KF9fLmluXygpLmNvdW50KCkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5wcm9qZWN0KCdPdXQnLCdJbicpLmJ5KF9fLm91dCgpLmNvdW50KCkpLmJ5KF9fLmluKCkuY291bnQoKSkiXSkKKworICAgICAgICAjIDc3CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCc0NCcpLm91dCgpLmFnZ3JlZ2F0ZSgnYScpLm91dCgpLndoZXJlKHdpdGhpbignYScpKS5wYXRoKCksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignNDQnKS5vdXQoKS5hZ2dyZWdhdGUoJ2EnKS5vdXQoKS53aGVyZSh3aXRoaW4oWydhJ10pKS5wYXRoKCkiXSkKKworICAgICAgICAjIDc4CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdkYXRlJywgZGF0ZXRpbWUoMjAyMSwgMiwgMjIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdkYXRlJyxkYXRldGltZShcIjIwMjEtMDItMjJUMDA6MDA6MDBcIikpIl0pCisKKyAgICAgICAgIyA3OQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygnZGF0ZScsIHdpdGhpbihkYXRldGltZSgyMDIxLCAyLCAyMiksIGRhdGV0aW1lKDIwMjEsIDEsIDEpKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygnZGF0ZScsd2l0aGluKFtkYXRldGltZShcIjIwMjEtMDItMjJUMDA6MDA6MDBcIiksZGF0ZXRpbWUoXCIyMDIxLTAxLTAxVDAwOjAwOjAwXCIpXSkpIl0pCisKKyAgICAgICAgIyA4MAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygnZGF0ZScsIGJldHdlZW4oZGF0ZXRpbWUoMjAyMSwgMSwgMSksIGRhdGV0aW1lKDIwMjEsIDIsIDIyKSkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2RhdGUnLGJldHdlZW4oZGF0ZXRpbWUoXCIyMDIxLTAxLTAxVDAwOjAwOjAwXCIpLGRhdGV0aW1lKFwiMjAyMS0wMi0yMlQwMDowMDowMFwiKSkpIl0pCisKKyAgICAgICAgIyA4MQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygnZGF0ZScsIGluc2lkZShkYXRldGltZSgyMDIxLCAxLCAxKSwgZGF0ZXRpbWUoMjAyMSwgMiwgMjIpKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygnZGF0ZScsaW5zaWRlKGRhdGV0aW1lKFwiMjAyMS0wMS0wMVQwMDowMDowMFwiKSxkYXRldGltZShcIjIwMjEtMDItMjJUMDA6MDA6MDBcIikpKSJdKQorCisgICAgICAgICMgODIKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2RhdGUnLCBQLmd0KGRhdGV0aW1lKDIwMjEsIDEsIDEsIDksIDMwKSkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2RhdGUnLGd0KGRhdGV0aW1lKFwiMjAyMS0wMS0wMVQwOTozMDowMFwiKSkpIl0pCisKKyAgICAgICAgIyA4MworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygncnVud2F5cycsIGJldHdlZW4oMywgNSkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ3J1bndheXMnLGJldHdlZW4oMyw1KSkiXSkKKworICAgICAgICAjIDg0CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdydW53YXlzJywgaW5zaWRlKDMsIDUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdydW53YXlzJyxpbnNpZGUoMyw1KSkiXSkKKworICAgICAgICAjIDg1CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCc0NCcpLm91dF9lKCkuZWxlbWVudF9tYXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc0NCcpLm91dEUoKS5lbGVtZW50TWFwKCkiXSkKKworICAgICAgICAjIDg2CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCc0NCcpLnZhbHVlX21hcCgpLmJ5KF9fLnVuZm9sZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc0NCcpLnZhbHVlTWFwKCkuYnkoX18udW5mb2xkKCkpIl0pCisKKyAgICAgICAgIyA4NworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignNDQnKS52YWx1ZV9tYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmxhYmVscyksCisgICAgICAgICAgICAgICAgICAgICAgImcuVignNDQnKS52YWx1ZU1hcCgpLndpdGgoJ350aW5rZXJwb3AudmFsdWVNYXAudG9rZW5zJywyKSJdKQorCisgICAgICAgICMgODgKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzQ0JykudmFsdWVfbWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aCgnfnRpbmtlcnBvcC52YWx1ZU1hcC50b2tlbnMnKSJdKQorCisgICAgICAgICMgODkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLmFkZF92KCd0ZXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkVigndGVzdCcpIl0pCisgICAgICAgICMgOTAKKyAgICAgICAgc3RyYXRlZ3kgPSBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygncmVnaW9uJywgJ1VTLVRYJyksIGVkZ2VzPV9fLmhhc19sYWJlbCgncm91dGUnKSkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc3RyYXRlZ2llcyhzdHJhdGVneSkuVigpLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLGVkZ2VzOl9fLmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiXSkKKworICAgICAgICAjIDkxCisgICAgICAgIHN0cmF0ZWd5ID0gU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhfcHJvcGVydGllcz1fXy5oYXNfbm90KCdydW53YXlzJykpCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy53aXRoX3N0cmF0ZWdpZXMoc3RyYXRlZ3kpLlYoKS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzTm90KCdydW53YXlzJykpKS5WKCkuY291bnQoKSJdKQorCisgICAgICAgICMgOTIKKyAgICAgICAgc3RyYXRlZ3kgPSBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygncmVnaW9uJywgJ1VTLVRYJyksIHZlcnRleF9wcm9wZXJ0aWVzPV9fLmhhc19ub3QoJ3J1bndheXMnKSkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc3RyYXRlZ2llcyhzdHJhdGVneSkuVigpLmNvdW50KCksCisgICAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLHZlcnRleFByb3BlcnRpZXM6X18uaGFzTm90KCdydW53YXlzJykpKS5WKCkuY291bnQoKSJdKQorCisgICAgICAgICMgOTMKKyAgICAgICAgc3RyYXRlZ3kgPSBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygncmVnaW9uJywgJ1VTLVRYJyksIGVkZ2VzPV9fLmhhc19sYWJlbCgncm91dGUnKSkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCksIHN0cmF0ZWd5KS5WKCkuY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcygncmVnaW9uJywnVVMtVFgnKSxlZGdlczpfXy5oYXNMYWJlbCgncm91dGUnKSkpLlYoKS5jb3VudCgpIl0pCisKKyAgICAgICAgIyA5NAorICAgICAgICBzdHJhdGVneSA9IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCksIHN0cmF0ZWd5KS5WKCkuY291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcygncmVnaW9uJywnVVMtVFgnKSkpLlYoKS5jb3VudCgpIl0pCisKKyAgICAgICAgIyA5NSBOb3RlIHdpdGhfKCkgb3B0aW9ucyBhcmUgbm93IGV4dHJhY3RlZCBpbnRvIHJlcXVlc3QgbWVzc2FnZSBhbmQgaXMgbm8gbG9uZ2VyIHNlbnQgd2l0aCB0aGUgc2NyaXB0CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy53aXRoXygnZXZhbHVhdGlvblRpbWVvdXQnLCA1MDApLlYoKS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5jb3VudCgpIl0pCisKKyAgICAgICAgIyA5NiBOb3RlIE9wdGlvbnNTdHJhdGVneSBhcmUgbm93IGV4dHJhY3RlZCBpbnRvIHJlcXVlc3QgbWVzc2FnZSBhbmQgaXMgbm8gbG9uZ2VyIHNlbnQgd2l0aCB0aGUgc2NyaXB0CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy53aXRoX3N0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KGV2YWx1YXRpb25UaW1lb3V0PTUwMCkpLlYoKS5jb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5jb3VudCgpIl0pCisKKyAgICAgICAgIyA5NworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cud2l0aF9zdHJhdGVnaWVzKAorICAgICAgICAgICAgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0icGFydGl0aW9uIiwgd3JpdGVfcGFydGl0aW9uPSJhIiwgcmVhZF9wYXJ0aXRpb25zPVsiYSJdKSkuYWRkX3YoJ3Rlc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OidwYXJ0aXRpb24nLHdyaXRlUGFydGl0aW9uOidhJyxyZWFkUGFydGl0aW9uczpbJ2EnXSkpLmFkZFYoJ3Rlc3QnKSJdKQorCisgICAgICAgICMgOTgKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhfY29tcHV0ZXIoKS5WKCkuc2hvcnRlc3RfcGF0aCgpLndpdGhfKFNob3J0ZXN0UGF0aC50YXJnZXQsIF9fLmhhcygnbmFtZScsICdwZXRlcicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQnLF9fLmhhcygnbmFtZScsJ3BldGVyJykpIl0pCisKKyAgICAgICAgIyA5OQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmNvYWxlc2NlKF9fLkUoKSwgX18uYWRkX2UoJ3BlcnNvbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuY29hbGVzY2UoX18uRSgpLF9fLmFkZEUoJ3BlcnNvbicpKSJdKQorCisgICAgICAgICMgMTAwCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5pbmplY3QoMSkuRSgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdCgxKS5FKCkiXSkKKworICAgICAgICAjIDEwMQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygicDEiLCBzdGFydGluZ193aXRoKCJmb28iKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncDEnLHN0YXJ0aW5nV2l0aCgnZm9vJykpIl0pCisKKyAgICAgICAgIyAxMDIKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoInAxIiwgZW5kaW5nX3dpdGgoImZvbyIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdwMScsZW5kaW5nV2l0aCgnZm9vJykpIl0pCisKKyAgICAgICAgIyAxMDMKKyAgICAgICAgY2xhc3MgU3VwZXJTdHIoc3RyKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVihTdXBlclN0cigiZm9vX2lkIikpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoJ2Zvb19pZCcpIl0pCisKKyAgICAgICAgIyAxMDQKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoInAxIiwgY29udGFpbmluZyhTdXBlclN0cigiZm9vIikpKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdwMScsY29udGFpbmluZygnZm9vJykpIl0pCisKKyAgICAgICAgIyAxMDUKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoInAxIiwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncDEnLG51bGwpIl0pCisKKyAgICAgICAgIyAxMDYKKyAgICAgICAgdmVydGV4ID0gVmVydGV4KDAsICJwZXJzb24iKQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVih2ZXJ0ZXgpLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoMCkiXSkKKworICAgICAgICAjIDEwNworICAgICAgICBvdXRWZXJ0ZXggPSBWZXJ0ZXgoMCwgInBlcnNvbiIpCisgICAgICAgIGluVmVydGV4ID0gVmVydGV4KDEsICJwZXJzb24iKQorICAgICAgICBlZGdlID0gRWRnZSgyLCBvdXRWZXJ0ZXgsICJrbm93cyIsIGluVmVydGV4KQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuRShlZGdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5FKF8wKSJdKQorCisgICAgICAgICMgMTA4CisgICAgICAgIHZwID0gVmVydGV4UHJvcGVydHkoMywgInRpbWUiLCAiMTg6MDAiLCBOb25lKQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuaW5qZWN0KHZwKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoXzEpIl0pCisKKyAgICAgICAgIyAxMDkKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdCh7J25hbWUnOiAnamF2YSd9LCB7VC5pZDogMH0sIHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYWdlJzogZmxvYXQoMTApLCAncG9zX2luZic6IGZsb2F0KCJpbmYiKSwgJ25lZ19pbmYnOiBmbG9hdCgiLWluZiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFuJzogZmxvYXQoIm5hbiIpfSksCisgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KFsnbmFtZSc6J2phdmEnXSxbKFQuaWQpOjBdLFs6XSxbJ2FnZSc6MTAuMEQsJ3Bvc19pbmYnOitJbmZpbml0eSwnbmVnX2luZic6LUluZmluaXR5LCduYW4nOk5hTl0pIl0pCisKKyAgICAgICAgIyAxMTAKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdChmbG9hdCgxKSkuaXNfKFAuZXEoMSkub3JfKFAuZ3QoMikpLm9yXyhQLmx0ZSgzKSkub3JfKFAuZ3RlKDQpKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KDEuMEQpLmlzKGVxKDEpLm9yKGd0KDIpKS5vcihsdGUoMykpLm9yKGd0ZSg0KSkpIl0pCisKKyAgICAgICAgIyAxMTEKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmhhcygnYWdlJywgUC5ndCgxMCkub3JfKFAuZ3RlKDExKS5hbmRfKFAubHQoMjApKSkuYW5kXygKKyAgICAgICAgICAgIFAubHQoMjkpLm9yXyhQLmVxKDM1KSkpKS5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuaGFzKCdhZ2UnLGd0KDEwKS5vcihndGUoMTEpLmFuZChsdCgyMCkpKS5hbmQobHQoMjkpLm9yKGVxKDM1KSkpKS52YWx1ZXMoJ25hbWUnKSJdKQorCisgICAgICAgICMgMTEyCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5pbmplY3Qoc2V0KCdhJykpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdCh7J2EnfSkiXSkKKworICAgICAgICAjIDExMworICAgICAgICB0ZXN0cy5hcHBlbmQoW2cubWVyZ2VfdihOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5tZXJnZVYobnVsbCkiXSkKKworICAgICAgICAjIDExNAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cubWVyZ2VfZShOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAiZy5tZXJnZUUobnVsbCkiXSkKKworICAgICAgICAjIDExNQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkX3YoJ1widGVzdFwiJyksCisgICAgICAgICAgICAgICAgICAgICAgImcuYWRkVignXCJ0ZXN0XCInKSJdKQorCisgICAgICAgICMgMTE2CisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5hZGRfdigndFwnImVzdCcpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ3RcXCdcImVzdCcpIl0pCisKKyAgICAgICAgIyAxMTcKKyAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdChUcnVlLCBTaW5nbGVCeXRlKDEpLCBzaG9ydCgyKSwgMywgbG9uZyg0KSwgZmxvYXQoNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoNiksIGJpZ2ludCg3KSwgQmlnRGVjaW1hbCgwLCA4KSksCisgICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KHRydWUsMUIsMlMsMyw0TCw1LjBELDYuMEQsN04sOE0pIl0pCisKKyAgICAgICAgIzExOAorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuaW5qZWN0KHV1aWQuVVVJRCgnOWI4ZDhhOWMtNjFjMi00M2U1LTljYzgtYzI3YjkyNjEyOTBlJykpLAorICAgICAgICAgICAgICAgICAgICAgICdnLmluamVjdChVVUlEKCI5YjhkOGE5Yy02MWMyLTQzZTUtOWNjOC1jMjdiOTI2MTI5MGUiKSknXSkKKworICAgICAgICAjIDExOQorICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkX3YoJ3Rlc3QnKS5wcm9wZXJ0eSgnZGF0ZScsIGRhdGV0aW1lKDIwMjEsIDIsIDEsIDksIDMwLCB0emluZm89dGltZXpvbmUudXRjKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJyxkYXRldGltZShcIjIwMjEtMDItMDFUMDk6MzA6MDArMDA6MDBcIikpIl0pCisgICAgICAgICMgMTIwCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5hZGRfdigndGVzdCcpLnByb3BlcnR5KCdkYXRlJywgZGF0ZXRpbWUoMjAyMSwgMiwgMSwgOSwgMzAsIHR6aW5mbz10aW1lem9uZSh0aW1lZGVsdGEoaG91cnM9NykpKSksCisgICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJyxkYXRldGltZShcIjIwMjEtMDItMDFUMDk6MzA6MDArMDc6MDBcIikpIl0pCisgICAgICAgICMgMTIxCisgICAgICAgIHRlc3RzLmFwcGVuZChbZy5hZGRfdigndGVzdCcpLnByb3BlcnR5KCdkYXRlJywgZGF0ZXRpbWUoMjAyMSwgMiwgMSwgOSwgMzAsIHR6aW5mbz10aW1lem9uZSh0aW1lZGVsdGEoaG91cnM9LTUpKSkpLAorICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eSgnZGF0ZScsZGF0ZXRpbWUoXCIyMDIxLTAyLTAxVDA5OjMwOjAwLTA1OjAwXCIpKSJdKQorCisgICAgICAgIGZvciB0IGluIHJhbmdlKGxlbih0ZXN0cykpOgorICAgICAgICAgICAgZ3JlbWxpbl9sYW5nID0gdGVzdHNbdF1bMF0uZ3JlbWxpbl9sYW5nLmdldF9ncmVtbGluKCkKKyAgICAgICAgICAgIGFzc2VydCBncmVtbGluX2xhbmcgPT0gdGVzdHNbdF1bMV0KKworICAgIGRlZiB0ZXN0X2d2YWx1ZV9uYW1lX2Nhbm5vdF9iZV9udWxsKHNlbGYpOgorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8oTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZy5WKEdWYWx1ZShOb25lLCBbMSwgMiwgM10pKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgYXNzZXJ0IHN0cihleCkgPT0gJ1RoZSBwYXJhbWV0ZXIgbmFtZSBjYW5ub3QgYmUgTm9uZS4nCisKKyAgICBkZWYgdGVzdF9ndmFsdWVfbmFtZV9kb250X25lZWRfZXNjYXBpbmcoc2VsZik6CisgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhOb25lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnLlYoR1ZhbHVlKCdcIicsIFsxLCAyLCAzXSkpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CisgICAgICAgICAgICBhc3NlcnQgc3RyKGV4KSA9PSAnaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSAiLicKKworICAgIGRlZiB0ZXN0X2d2YWx1ZV9pc19ub3RfbnVtYmVyKHNlbGYpOgorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8oTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZy5WKEdWYWx1ZSgnMScsIFsxLCAyLCAzXSkpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CisgICAgICAgICAgICBhc3NlcnQgc3RyKGV4KSA9PSAnaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSAxLicKKworICAgIGRlZiB0ZXN0X2d2YWx1ZV9pc192YWxpZF9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8oTm9uZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZy5WKEdWYWx1ZSgnMWEnLCBbMSwgMiwgM10pKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgYXNzZXJ0IHN0cihleCkgPT0gJ2ludmFsaWQgcGFyYW1ldGVyIG5hbWUgMWEuJworCisgICAgZGVmIHRlc3RfZ3ZhbHVlX2lzX25vdF9yZXNlcnZlZChzZWxmKToKKyAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGcuVihHVmFsdWUoJ18xJywgWzEsIDIsIDNdKSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKKyAgICAgICAgICAgIGFzc2VydCBzdHIoZXgpID09ICdpbnZhbGlkIEdWYWx1ZSBuYW1lIF8xLiBTaG91bGQgbm90IHN0YXJ0IHdpdGggXy4nCisKKyAgICBkZWYgdGVzdF9ndmFsdWVfaXNfbm90X2R1cGxpY2F0ZShzZWxmKToKKyAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGcuaW5qZWN0KEdWYWx1ZSgnaWRzJywgWzEsIDJdKSkuVihHVmFsdWUoJ2lkcycsIFsyLCAzXSkpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CisgICAgICAgICAgICBhc3NlcnQgc3RyKGV4KSA9PSAncGFyYW1ldGVyIHdpdGggbmFtZSBpZHMgYWxyZWFkeSBleGlzdHMuJworCisgICAgZGVmIHRlc3RfZ3ZhbHVlX2FsbG93X3BhcmFtZXRlcl9yZXVzZShzZWxmKToKKyAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCisgICAgICAgIHZhbCA9IFsxLCAyLCAzXQorICAgICAgICBwID0gR1ZhbHVlKCdpZHMnLCB2YWwpCisgICAgICAgIGdyZW1saW4gPSBnLmluamVjdChwKS5WKHApLmdyZW1saW5fbGFuZworICAgICAgICBhc3NlcnQgJ2cuaW5qZWN0KGlkcykuVihpZHMpJyA9PSBncmVtbGluLmdldF9ncmVtbGluKCkKKyAgICAgICAgYXNzZXJ0IHZhbCA9PSBncmVtbGluLmdldF9wYXJhbWV0ZXJzKCkuZ2V0KCdpZHMnKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvcHJvY2Vzcy90ZXN0X3N0cmF0ZWdpZXMucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9wcm9jZXNzL3Rlc3Rfc3RyYXRlZ2llcy5weQppbmRleCBhZGY4YmNkLi4wNjY3ZjBkIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9wcm9jZXNzL3Rlc3Rfc3RyYXRlZ2llcy5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9wcm9jZXNzL3Rlc3Rfc3RyYXRlZ2llcy5weQpAQCAtMjcsOTUgKzI3LDgzIEBACiBjbGFzcyBUZXN0VHJhdmVyc2FsU3RyYXRlZ2llcyhvYmplY3QpOgogICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhOb25lKQotICAgICAgICBieXRlY29kZSA9IGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpKS5ieXRlY29kZQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4oYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9ucykKLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF0pCi0gICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMiID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMF0KLSAgICAgICAgYXNzZXJ0IFJlYWRPbmx5U3RyYXRlZ3koKSA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzFdCi0gICAgICAgIGFzc2VydCAiUmVhZE9ubHlTdHJhdGVneSIgPT0gc3RyKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0pCi0gICAgICAgIGFzc2VydCBoYXNoKFJlYWRPbmx5U3RyYXRlZ3koKSkgPT0gaGFzaChieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzFdKQorICAgICAgICBncmVtbGluX3NjcmlwdCA9IGcud2l0aF9zdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuZ3JlbWxpbl9sYW5nCisgICAgICAgIGdyZW1saW5faW5zdHIgPSBncmVtbGluX3NjcmlwdC5ncmVtbGluCisgICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJSZWFkT25seVN0cmF0ZWd5IiBpbiBzdHIoZ3JlbWxpbl9zY3JpcHQpCisgICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkiID09IGdyZW1saW5faW5zdHJbMV0KICAgICAgICAgYXNzZXJ0IDAgPT0gbGVuKGcudHJhdmVyc2FsX3N0cmF0ZWdpZXMudHJhdmVyc2FsX3N0cmF0ZWdpZXMpICAjIHRoZXNlIHN0cmF0ZWdpZXMgYXJlIHByb3hpZXMKICAgICAgICAgIyMKLSAgICAgICAgZyA9IGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpLCBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKQotICAgICAgICBieXRlY29kZSA9IGcuYnl0ZWNvZGUKLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAzID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdKQotICAgICAgICBhc3NlcnQgIndpdGhTdHJhdGVnaWVzIiA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzBdCi0gICAgICAgIGFzc2VydCBSZWFkT25seVN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsxXQotICAgICAgICBhc3NlcnQgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzJdCisgICAgICAgIGcgPSBnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCksIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpCisgICAgICAgIGdyZW1saW5fc2NyaXB0ID0gZy5ncmVtbGluX2xhbmcKKyAgICAgICAgZ3JlbWxpbl9pbnN0ciA9IGdyZW1saW5fc2NyaXB0LmdyZW1saW4KKyAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIlJlYWRPbmx5U3RyYXRlZ3kiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KSIgPT0gZ3JlbWxpbl9pbnN0clsxXQogICAgICAgICAjIwotICAgICAgICBieXRlY29kZSA9IGcuVigpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAxID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgMyA9PSBsZW4oYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXSkKLSAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgUmVhZE9ubHlTdHJhdGVneSgpID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0KLSAgICAgICAgYXNzZXJ0IEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsyXQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAiViIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMF1bMF0KKyAgICAgICAgZ3JlbWxpbl9zY3JpcHQgPSBnLlYoKS5ncmVtbGluX2xhbmcKKyAgICAgICAgZ3JlbWxpbl9pbnN0ciA9IGdyZW1saW5fc2NyaXB0LmdyZW1saW4KKyAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIlJlYWRPbmx5U3RyYXRlZ3kiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIlYoKSIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kpIiA9PSBncmVtbGluX2luc3RyWzFdCisgICAgICAgIGFzc2VydCAnVicgPT0gZ3JlbWxpbl9pbnN0clszXQogICAgICAgICAjIwotICAgICAgICBieXRlY29kZSA9IGcud2l0aG91dFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkuYnl0ZWNvZGUKLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAzID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4oYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1sxXSkKLSAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgUmVhZE9ubHlTdHJhdGVneSgpID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0KLSAgICAgICAgYXNzZXJ0IEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsyXQotICAgICAgICBhc3NlcnQgIndpdGhvdXRTdHJhdGVnaWVzIiA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzFdWzBdCi0gICAgICAgIGFzc2VydCBSZWFkT25seVN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1sxXVsxXQotICAgICAgICBhc3NlcnQgMSA9PSBsZW4oYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAiViIgPT0gYnl0ZWNvZGUuc3RlcF9pbnN0cnVjdGlvbnNbMF1bMF0KKyAgICAgICAgZ3JlbWxpbl9zY3JpcHQgPSBnLndpdGhvdXRfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5ncmVtbGluX2xhbmcKKyAgICAgICAgZ3JlbWxpbl9pbnN0ciA9IGdyZW1saW5fc2NyaXB0LmdyZW1saW4KKyAgICAgICAgZ3JlbWxpbl9wYXJhbXMgPSBncmVtbGluX3NjcmlwdC5wYXJhbWV0ZXJzCisgICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJSZWFkT25seVN0cmF0ZWd5IiBpbiBzdHIoZ3JlbWxpbl9zY3JpcHQpCisgICAgICAgIGFzc2VydCAiSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJ3aXRob3V0U3RyYXRlZ2llcyIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIlYoKSIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kpIiA9PSBncmVtbGluX2luc3RyWzFdCisgICAgICAgIGFzc2VydCBSZWFkT25seVN0cmF0ZWd5KCkgPT0gZ3JlbWxpbl9wYXJhbXNbIl8wIl0KICAgICAgICAgIyMKLSAgICAgICAgYnl0ZWNvZGUgPSBnLndpdGhvdXRTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSwgTGF6eUJhcnJpZXJTdHJhdGVneSgpKS5WKCkuYnl0ZWNvZGUKLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAzID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdKQotICAgICAgICBhc3NlcnQgMyA9PSBsZW4oYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1sxXSkKLSAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgUmVhZE9ubHlTdHJhdGVneSgpID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0KLSAgICAgICAgYXNzZXJ0IEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsyXQotICAgICAgICBhc3NlcnQgIndpdGhvdXRTdHJhdGVnaWVzIiA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzFdWzBdCi0gICAgICAgIGFzc2VydCBSZWFkT25seVN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1sxXVsxXQotICAgICAgICBhc3NlcnQgTGF6eUJhcnJpZXJTdHJhdGVneSgpID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMV1bMl0KLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgIlYiID09IGJ5dGVjb2RlLnN0ZXBfaW5zdHJ1Y3Rpb25zWzBdWzBdCisgICAgICAgIGdyZW1saW5fc2NyaXB0ID0gZy53aXRob3V0X3N0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpLCBMYXp5QmFycmllclN0cmF0ZWd5KCkpLlYoKS5ncmVtbGluX2xhbmcKKyAgICAgICAgZ3JlbWxpbl9wYXJhbXMgPSBncmVtbGluX3NjcmlwdC5wYXJhbWV0ZXJzCisgICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJSZWFkT25seVN0cmF0ZWd5IiBpbiBzdHIoZ3JlbWxpbl9zY3JpcHQpCisgICAgICAgIGFzc2VydCAiSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJ3aXRob3V0U3RyYXRlZ2llcyIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIlYoKSIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgUmVhZE9ubHlTdHJhdGVneSgpID09IGdyZW1saW5fcGFyYW1zWyJfMSJdCisgICAgICAgIGFzc2VydCBMYXp5QmFycmllclN0cmF0ZWd5KCkgPT0gZ3JlbWxpbl9wYXJhbXNbIl8yIl0KICAgICAgICAgIyMjCiAgICAgICAgIGcgPSB0cmF2ZXJzYWwoKS53aXRoXyhOb25lKQotICAgICAgICBieXRlY29kZSA9IGcud2l0aF8oIngiLCAidGVzdCIpLndpdGhfKCJ5IikuYnl0ZWNvZGUKLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAyID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdKQotICAgICAgICBhc3NlcnQgIndpdGhTdHJhdGVnaWVzIiA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzBdCi0gICAgICAgIGFzc2VydCBPcHRpb25zU3RyYXRlZ3koKSA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzFdCi0gICAgICAgIHN0cmF0ZWd5ID0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsxXQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4oc3RyYXRlZ3kuY29uZmlndXJhdGlvbikKLSAgICAgICAgYXNzZXJ0ICJ0ZXN0IiA9PSBzdHJhdGVneS5jb25maWd1cmF0aW9uWyJ4Il0KLSAgICAgICAgYXNzZXJ0IHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb25bInkiXQorICAgICAgICBncmVtbGluX3NjcmlwdCA9IGcud2l0aF8oIngiLCAidGVzdCIpLndpdGhfKCJ5IikuZ3JlbWxpbl9sYW5nCisgICAgICAgIG9wdGlvbnMgPSBncmVtbGluX3NjcmlwdC5vcHRpb25zX3N0cmF0ZWdpZXMKKyAgICAgICAgYXNzZXJ0ICJ0ZXN0IiA9PSBvcHRpb25zWzBdLmNvbmZpZ3VyYXRpb25bIngiXQorICAgICAgICBhc3NlcnQgb3B0aW9uc1sxXS5jb25maWd1cmF0aW9uWyJ5Il0KIAogICAgIGRlZiB0ZXN0X2NvbmZpZ3VyYWJsZShzZWxmKToKICAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCi0gICAgICAgIGJ5dGVjb2RlID0gZy53aXRoU3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCJncmVlZHkiKSkuYnl0ZWNvZGUKLSAgICAgICAgYXNzZXJ0IDEgPT0gbGVuKGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnMpCi0gICAgICAgIGFzc2VydCAyID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdKQotICAgICAgICBhc3NlcnQgIndpdGhTdHJhdGVnaWVzIiA9PSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzBdCi0gICAgICAgIGFzc2VydCBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsxXQotICAgICAgICBhc3NlcnQgIk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kiID09IHN0cihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzFdKQotICAgICAgICBhc3NlcnQgaGFzaChNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCkpID09IGhhc2goCi0gICAgICAgICAgICBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzFdKSAgIyBldmVuIHRob3VnaCBkaWZmZXJlbnQgY29uZnMsIHNhbWUgc3RyYXRlZ3kKLSAgICAgICAgYXNzZXJ0IDAgPT0gbGVuKGcudHJhdmVyc2FsX3N0cmF0ZWdpZXMudHJhdmVyc2FsX3N0cmF0ZWdpZXMpICAjIHRoZXNlIHN0cmF0ZWdpZXMgYXJlIHByb3hpZXMKKyAgICAgICAgZ3JlbWxpbl9zY3JpcHQgPSBnLndpdGhfc3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCJncmVlZHkiKSkuZ3JlbWxpbl9sYW5nCisgICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKyAgICAgICAgYXNzZXJ0ICJNYXRjaEFsZ29yaXRobVN0cmF0ZWd5IiBpbiBzdHIoZ3JlbWxpbl9zY3JpcHQpCisgICAgICAgIGFzc2VydCAiZ3JlZWR5IiBpbiBzdHIoZ3JlbWxpbl9zY3JpcHQpCiAgICAgICAgICMjIwotICAgICAgICBieXRlY29kZSA9IGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoIm5hbWUiLCAibWFya28iKSkpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAxID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4oYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXSkKLSAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgU3ViZ3JhcGhTdHJhdGVneSgpID09IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0KLSAgICAgICAgc3RyYXRlZ3kgPSBieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zWzBdWzFdCi0gICAgICAgIGFzc2VydCAxID09IGxlbihzdHJhdGVneS5jb25maWd1cmF0aW9uKQotICAgICAgICBhc3NlcnQgX18uaGFzKCJuYW1lIiwibWFya28iKSA9PSBzdHJhdGVneS5jb25maWd1cmF0aW9uWyJ2ZXJ0aWNlcyJdCisgICAgICAgIGdyZW1saW5fc2NyaXB0ID0gZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoIm5hbWUiLCAibWFya28iKSkpLmdyZW1saW5fbGFuZworICAgICAgICBhc3NlcnQgIndpdGhTdHJhdGVnaWVzIiBpbiBzdHIoZ3JlbWxpbl9zY3JpcHQpCisgICAgICAgIGFzc2VydCAiU3ViZ3JhcGhTdHJhdGVneSIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQorICAgICAgICBhc3NlcnQgIl9fLmhhcygnbmFtZScsJ21hcmtvJykiIGluIHN0cihncmVtbGluX3NjcmlwdCkKICAgICAgICAgIyMjCi0gICAgICAgIGJ5dGVjb2RlID0gZy53aXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3koeD0idGVzdCIsIHk9VHJ1ZSkpLmJ5dGVjb2RlCi0gICAgICAgIGFzc2VydCAxID09IGxlbihieXRlY29kZS5zb3VyY2VfaW5zdHJ1Y3Rpb25zKQotICAgICAgICBhc3NlcnQgMiA9PSBsZW4oYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXSkKLSAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyIgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVswXQotICAgICAgICBhc3NlcnQgT3B0aW9uc1N0cmF0ZWd5KCkgPT0gYnl0ZWNvZGUuc291cmNlX2luc3RydWN0aW9uc1swXVsxXQotICAgICAgICBzdHJhdGVneSA9IGJ5dGVjb2RlLnNvdXJjZV9pbnN0cnVjdGlvbnNbMF1bMV0KLSAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHN0cmF0ZWd5LmNvbmZpZ3VyYXRpb24pCi0gICAgICAgIGFzc2VydCAidGVzdCIgPT0gc3RyYXRlZ3kuY29uZmlndXJhdGlvblsieCJdCi0gICAgICAgIGFzc2VydCBzdHJhdGVneS5jb25maWd1cmF0aW9uWyJ5Il0KKyAgICAgICAgZ3JlbWxpbl9zY3JpcHQgPSBnLndpdGhfc3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3koeD0idGVzdCIsIHk9VHJ1ZSkpLmdyZW1saW5fbGFuZworICAgICAgICBvcHRpb25zID0gZ3JlbWxpbl9zY3JpcHQub3B0aW9uc19zdHJhdGVnaWVzCisgICAgICAgIGFzc2VydCAidGVzdCIgPT0gb3B0aW9uc1swXS5jb25maWd1cmF0aW9uWyJ4Il0KKyAgICAgICAgYXNzZXJ0IG9wdGlvbnNbMF0uY29uZmlndXJhdGlvblsieSJdCisKKyAgICBkZWYgdGVzdF9jdXN0b21fc3RyYXRlZ2llcyhzZWxmKToKKyAgICAgICAgZyA9IHRyYXZlcnNhbCgpLndpdGhfKE5vbmUpCisKKyAgICAgICAgZ3JlbWxpbl9zY3JpcHQgPSBnLndpdGhfc3RyYXRlZ2llcyhUcmF2ZXJzYWxTdHJhdGVneShzdHJhdGVneV9uYW1lPSdDdXN0b21TaW5nbGV0b25TdHJhdGVneScpKS5ncmVtbGluX2xhbmcKKyAgICAgICAgYXNzZXJ0ICJ3aXRoU3RyYXRlZ2llcyhDdXN0b21TaW5nbGV0b25TdHJhdGVneSkiIGluIHN0cihncmVtbGluX3NjcmlwdCkKKworICAgICAgICBncmVtbGluX3NjcmlwdCA9IGcud2l0aF9zdHJhdGVnaWVzKFRyYXZlcnNhbFN0cmF0ZWd5KAorICAgICAgICAgICAgc3RyYXRlZ3lfbmFtZT0nQ3VzdG9tQ29uZmlndXJhYmxlU3RyYXRlZ3knLAorICAgICAgICAgICAgc3RyaW5nS2V5PSdzdHJpbmcgdmFsdWUnLAorICAgICAgICAgICAgaW50S2V5PTUsCisgICAgICAgICAgICBib29sZWFuS2V5PVRydWUKKyAgICAgICAgKSkuZ3JlbWxpbl9sYW5nCisgICAgICAgIGFzc2VydCAid2l0aFN0cmF0ZWdpZXMobmV3IEN1c3RvbUNvbmZpZ3VyYWJsZVN0cmF0ZWd5KHN0cmluZ0tleTonc3RyaW5nIHZhbHVlJyxpbnRLZXk6NSxib29sZWFuS2V5OnRydWUpKSIgaW4gc3RyKGdyZW1saW5fc2NyaXB0KQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvcHJvY2Vzcy90ZXN0X3RyYW5zbGF0b3IucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9wcm9jZXNzL3Rlc3RfdHJhbnNsYXRvci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI4ZTIwMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9wcm9jZXNzL3Rlc3RfdHJhbnNsYXRvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ1NSArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLSIiIgotVW5pdCB0ZXN0cyBmb3IgdGhlIFRyYW5zbGF0b3IgQ2xhc3MuCi0iIiIKLV9fYXV0aG9yX18gPSAnS2VsdmluIFIuIExhd3JlbmNlIChnZnhtYW4pJwotCi1mcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgR3JhcGgsIFZlcnRleCwgRWRnZSwgVmVydGV4UHJvcGVydHkKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5hbm9ueW1vdXNfdHJhdmVyc2FsIGltcG9ydCB0cmF2ZXJzYWwKLWZyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy5ncmFwaF90cmF2ZXJzYWwgaW1wb3J0IF9fCi1mcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhbnNsYXRvciBpbXBvcnQgKgotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKLQotCi1jbGFzcyBUZXN0VHJhbnNsYXRvcihvYmplY3QpOgotCi0gICAgZGVmIHRlc3RfdHJhbnNsYXRpb25zKHNlbGYpOgotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8oTm9uZSkKLQotICAgICAgICB0ZXN0cyA9IGxpc3QoKQotICAgICAgICAjIDAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkiXSkKLSAgICAgICAgIyAxCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCcxJywgJzInLCAnMycsICc0JyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMScsJzInLCczJywnNCcpIl0pCi0gICAgICAgICMgMgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLnZhbHVlTWFwKFRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS52YWx1ZU1hcCh0cnVlKSJdKQotICAgICAgICAjIDMKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5jb25zdGFudCg1KSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuY29uc3RhbnQoNSkiXSkKLSAgICAgICAgIyA0Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuY29uc3RhbnQoMS41KSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuY29uc3RhbnQoMS41ZCkiXSkKLSAgICAgICAgIyA1Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuY29uc3RhbnQoJ0hlbGxvJyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmNvbnN0YW50KCdIZWxsbycpIl0pCi0gICAgICAgICMgNgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykubGltaXQoNSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykubGltaXQoNSkiXSkKLSAgICAgICAgIyA3Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzTGFiZWwod2l0aGluKCdhJywgJ2InLCAnYycpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwod2l0aGluKFsnYScsJ2InLCdjJ10pKSJdKQotICAgICAgICAjIDgKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcsICdjb250aW5lbnQnKS5vdXQoKS5saW1pdCg1KSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnLCdjb250aW5lbnQnKS5vdXQoKS5saW1pdCg1KSJdKQotICAgICAgICAjIDkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm91dCgpLnZhbHVlcygnY29kZScpLmxpbWl0KDUpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm91dCgpLnZhbHVlcygnY29kZScpLmxpbWl0KDUpIl0pCi0gICAgICAgICMgMTAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5hc18oJ2EnKS5vdXQoJ3JvdXRlJykubGltaXQoMTApLndoZXJlKGVxKCdhJykpLmJ5KCdyZWdpb24nKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCczJykuYXMoJ2EnKS5vdXQoJ3JvdXRlJykubGltaXQoMTApLndoZXJlKGVxKCdhJykpLmJ5KCdyZWdpb24nKSJdKQotICAgICAgICAjIDExCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCczJykucmVwZWF0KF9fLm91dCgncm91dGUnKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDIpLnBhdGgoKS5ieSgnY29kZScpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCdyb3V0ZScpLnNpbXBsZVBhdGgoKSkudGltZXMoMikucGF0aCgpLmJ5KCdjb2RlJykiXSkKLSAgICAgICAgIyAxMgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3V0KCkuaGFzKCdyZWdpb24nLCAnVVMtVFgnKS52YWx1ZXMoJ2NvZGUnKS5saW1pdCg1KSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vdXQoKS5oYXMoJ3JlZ2lvbicsJ1VTLVRYJykudmFsdWVzKCdjb2RlJykubGltaXQoNSkiXSkKLSAgICAgICAgIyAxMwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykudW5pb24oX18udmFsdWVzKCdjaXR5JyksIF9fLnZhbHVlcygncmVnaW9uJykpLmxpbWl0KDUpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLnVuaW9uKF9fLnZhbHVlcygnY2l0eScpLF9fLnZhbHVlcygncmVnaW9uJykpLmxpbWl0KDUpIl0pCi0gICAgICAgICMgMTQKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5hc18oJ2EnKS5vdXQoJ3JvdXRlJywgJ3JvdXRlcycpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5hcygnYScpLm91dCgncm91dGUnLCdyb3V0ZXMnKSJdKQotICAgICAgICAjIDE1Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkud2hlcmUoX18udmFsdWVzKCdydW53YXlzJykuaXNfKDUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkud2hlcmUoX18udmFsdWVzKCdydW53YXlzJykuaXMoNSkpIl0pCi0gICAgICAgICMgMTYKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCAnQUdSJykpLnBhdGgoKS5ieSgnY29kZScpLmxpbWl0KDUpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5yZXBlYXQoX18ub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKSkucGF0aCgpLmJ5KCdjb2RlJykubGltaXQoNSkiXSkKLSAgICAgICAgIyAxNwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZF8oKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZCgpKSJdKQotICAgICAgICAjIDE4Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vcmRlcigpLmJ5KFQuaWQpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm9yZGVyKCkuYnkoVC5pZCkiXSkKLSAgICAgICAgIyAxOQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZF8oKSwgT3JkZXIuZGVzYyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykub3JkZXIoKS5ieShfXy5pZCgpLE9yZGVyLmRlc2MpIl0pCi0gICAgICAgICMgMjAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLm9yZGVyKCkuYnkoJ2NvZGUnLCBPcmRlci5kZXNjKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5vcmRlcigpLmJ5KCdjb2RlJyxPcmRlci5kZXNjKSJdKQotICAgICAgICAjIDIxCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCcxJywgJzInLCAnMycpLmxvY2FsKF9fLm91dCgpLm91dCgpLmRlZHVwKCkuZm9sZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCcxJywnMicsJzMnKS5sb2NhbChfXy5vdXQoKS5vdXQoKS5kZWR1cCgpLmZvbGQoKSkiXSkKLSAgICAgICAgIyAyMgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMycpLm91dCgpLnBhdGgoKS5jb3VudChTY29wZS5sb2NhbCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLm91dCgpLnBhdGgoKS5jb3VudChTY29wZS5sb2NhbCkiXSkKLSAgICAgICAgIyAyMwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuRSgpLmNvdW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuRSgpLmNvdW50KCkiXSkKLSAgICAgICAgIyAyNAotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignNScpLm91dEUoJ3JvdXRlJykuaW5WKCkucGF0aCgpLmxpbWl0KDEwKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc1Jykub3V0RSgncm91dGUnKS5pblYoKS5wYXRoKCkubGltaXQoMTApIl0pCi0gICAgICAgICMgMjUKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzUnKS5wcm9wZXJ0eU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignNScpLnByb3BlcnR5TWFwKCkuc2VsZWN0KENvbHVtbi5rZXlzKSJdKQotICAgICAgICAjIDI2Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCc1JykucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignNScpLnByb3BlcnR5TWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIl0pCi0gICAgICAgICMgMjcKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS52YWx1ZXMoJ3J1bndheXMnKS5tYXRoKCdfICsgMScpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS52YWx1ZXMoJ3J1bndheXMnKS5tYXRoKCdfICsgMScpIl0pCi0gICAgICAgICMgMjgKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5lbWl0KCkucmVwZWF0KF9fLm91dCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykubGltaXQoNSkucGF0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzMnKS5lbWl0KCkucmVwZWF0KF9fLm91dCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykubGltaXQoNSkucGF0aCgpIl0pCi0gICAgICAgICMgMjkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5oYXMoJ2NvZGUnLCAnTEhSJykuYXNfKCdiJykpLnNlbGVjdCgnYicpLmJ5KCdjb2RlJyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLm1hdGNoKF9fLmFzKCdhJykuaGFzKCdjb2RlJywnTEhSJykuYXMoJ2InKSkuc2VsZWN0KCdiJykuYnkoJ2NvZGUnKSJdKQotICAgICAgICAjIDMwCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCd0ZXN0LXVzaW5nLWtleXdvcmQtYXMtcHJvcGVydHknLCAncmVwZWF0JyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygndGVzdC11c2luZy1rZXl3b3JkLWFzLXByb3BlcnR5JywncmVwZWF0JykiXSkKLSAgICAgICAgIyAzMQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMScpLmFkZEUoJ3Rlc3QnKS50byhfXy5WKCc0JykpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzEnKS5hZGRFKCd0ZXN0JykudG8oX18uVignNCcpKSJdKQotICAgICAgICAjIDMyCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkudmFsdWVzKCdydW53YXlzJykubWF4XygpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5tYXgoKSJdKQotICAgICAgICAjIDMzCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkudmFsdWVzKCdydW53YXlzJykubWluXygpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5taW4oKSJdKQotICAgICAgICAjIDM0Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkudmFsdWVzKCdydW53YXlzJykuc3VtXygpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5zdW0oKSJdKQotICAgICAgICAjIDM1Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkudmFsdWVzKCdydW53YXlzJykubWVhbigpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS52YWx1ZXMoJ3J1bndheXMnKS5tZWFuKCkiXSkKLSAgICAgICAgIyAzNgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cud2l0aFNhY2soMCkuVignMycsICc1Jykuc2FjayhPcGVyYXRvci5zdW1fKS5ieSgncnVud2F5cycpLnNhY2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU2FjaygwKS5WKCczJywnNScpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgncnVud2F5cycpLnNhY2soKSJdKQotICAgICAgICAjIDM3IC0gcmVtb3ZlZCBhcyBzdG9yZSgpIHdhcyBkZXByZWNhdGVkIGFuZCByZW1vdmVkIGluIDMuOC4wCi0gICAgICAgICMgMzgKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdCgzLCA0LCA1KSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoMyw0LDUpIl0pCi0gICAgICAgICMgMzkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdChbMywgNCwgNV0pLAotICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChbMyw0LDVdKSJdKQotICAgICAgICAjIDQwCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5pbmplY3QoMywgNCwgNSkuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoMyw0LDUpLmNvdW50KCkiXSkKLSAgICAgICAgIyA0MQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygncnVud2F5cycsIGd0KDUpKS5jb3VudCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ3J1bndheXMnLGd0KDUpKS5jb3VudCgpIl0pCi0gICAgICAgICMgNDIKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ3J1bndheXMnLCBsdGUoNS4zKSkuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdydW53YXlzJyxsdGUoNS4zZCkpLmNvdW50KCkiXSkKLSAgICAgICAgIyA0MwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygnY29kZScsIHdpdGhpbigxMjMsIDEyNCkpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbMTIzLDEyNF0pKSJdKQotICAgICAgICAjIDQ0Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdjb2RlJywgd2l0aGluKDEyMywgJ2FiYycpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdjb2RlJyx3aXRoaW4oWzEyMywnYWJjJ10pKSJdKQotICAgICAgICAjIDQ1Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdjb2RlJywgd2l0aGluKCdhYmMnLCAxMjMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdjb2RlJyx3aXRoaW4oWydhYmMnLDEyM10pKSJdKQotICAgICAgICAjIDQ2Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdjb2RlJywgd2l0aGluKCdhYmMnLCAneHl6JykpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2NvZGUnLHdpdGhpbihbJ2FiYycsJ3h5eiddKSkiXSkKLSAgICAgICAgIyA0NwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMScsICcyJykuaGFzKCdyZWdpb24nLCBQLndpdGhpbignVVMtVFgnLCAnVVMtR0EnKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMScsJzInKS5oYXMoJ3JlZ2lvbicsd2l0aGluKFsnVVMtVFgnLCdVUy1HQSddKSkiXSkKLSAgICAgICAgIyA0OAotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmFuZF8oX18uaGFzKCdydW53YXlzJywgUC5ndCg1KSksIF9fLmhhcygncmVnaW9uJywgJ1VTLVRYJykpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5hbmQoX18uaGFzKCdydW53YXlzJyxndCg1KSksX18uaGFzKCdyZWdpb24nLCdVUy1UWCcpKSJdKQotICAgICAgICAjIDQ5Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkudW5pb24oX18uaGFzKCdydW53YXlzJywgZ3QoNSkpLCBfXy5oYXMoJ3JlZ2lvbicsICdVUy1UWCcpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkudW5pb24oX18uaGFzKCdydW53YXlzJyxndCg1KSksX18uaGFzKCdyZWdpb24nLCdVUy1UWCcpKSJdKQotICAgICAgICAjIDUwCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpLmlzXygzKSwgX18uY29uc3RhbnQoJ3RocmVlJyksIF9fLmNvbnN0YW50KCdub3QgdGhyZWUnKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLmNob29zZShfXy52YWx1ZXMoJ3J1bndheXMnKS5pcygzKSxfXy5jb25zdGFudCgndGhyZWUnKSxfXy5jb25zdGFudCgnbm90IHRocmVlJykpIl0pCi0gICAgICAgICMgNTEKLSAgICAgICAgdGVzdHMuYXBwZW5kKAotICAgICAgICAgICAgW2cuVignMycpLmNob29zZShfXy52YWx1ZXMoJ3J1bndheXMnKSkub3B0aW9uKDEsIF9fLmNvbnN0YW50KCd0aHJlZScpKS5vcHRpb24oMiwgX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSwKLSAgICAgICAgICAgICAiZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpKS5vcHRpb24oMSxfXy5jb25zdGFudCgndGhyZWUnKSkub3B0aW9uKDIsX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSJdKQotICAgICAgICAjIDUyCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpKS5vcHRpb24oMS41LCBfXy5jb25zdGFudCgnb25lIGFuZCBhIGhhbGYnKSkub3B0aW9uKDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fLmNvbnN0YW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCB0aHJlZScpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCczJykuY2hvb3NlKF9fLnZhbHVlcygncnVud2F5cycpKS5vcHRpb24oMS41ZCxfXy5jb25zdGFudCgnb25lIGFuZCBhIGhhbGYnKSkub3B0aW9uKDIsX18uY29uc3RhbnQoJ25vdCB0aHJlZScpKSJdKQotICAgICAgICAjIDUzCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCczJykucmVwZWF0KF9fLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18ubG9vcHMoKS5pc18oMSkpLmNvdW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLnJlcGVhdChfXy5vdXQoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMSkpLmNvdW50KCkiXSkKLSAgICAgICAgIyA1NAotICAgICAgICB0ZXN0cy5hcHBlbmQoCi0gICAgICAgICAgICBbZy5WKCkuaGFzTGFiZWwoJ2FpcnBvcnQnKS5saW1pdCgyMCkuZ3JvdXAoKS5ieSgncmVnaW9uJykuYnkoJ2NvZGUnKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLmtleXMpLAotICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLmxpbWl0KDIwKS5ncm91cCgpLmJ5KCdyZWdpb24nKS5ieSgnY29kZScpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cykiXSkKLSAgICAgICAgIyA1NQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignMScpLmFzXygnYScpLlYoJzInKS5hc18oJ2EnKS5zZWxlY3QoUG9wLmFsbF8sICdhJyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMScpLmFzKCdhJykuVignMicpLmFzKCdhJykuc2VsZWN0KFBvcC5hbGwsJ2EnKSJdKQotICAgICAgICAjIDU2Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0XywgJ3AxJywgMTApLAotICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsJ3AxJywxMCkiXSkKLSAgICAgICAgIyA1NwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3RfLCAncDEnLCAxMCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsJ3AxJywxMCkiXSkKLQotICAgICAgICAjIDU4Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAncDEnLCAxMCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigndGVzdCcpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwncDEnLDEwKSJdKQotICAgICAgICAjIDU5Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkubGltaXQoNSkub3JkZXIoKS5ieShULmxhYmVsKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkubGltaXQoNSkub3JkZXIoKS5ieShULmxhYmVsKSJdKQotCi0gICAgICAgICMgNjAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5yYW5nZV8oMSwgNSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLnJhbmdlKDEsNSkiXSkKLQotICAgICAgICAjIDYxCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ3AxJywgMTIzKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ3AxJywxMjMpIl0pCi0KLSAgICAgICAgIyA2MgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJywgZGF0ZXRpbWUoMjAyMSwgMiwgMSwgOSwgMzApKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ2RhdGUnLG5ldyBEYXRlKDEyMSwyLDEsOSwzMCwwKSkiXSkKLSAgICAgICAgIyA2MwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuYWRkVigndGVzdCcpLnByb3BlcnR5KCdkYXRlJywgZGF0ZXRpbWUoMjAyMSwgMiwgMSkpLAotICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ3Rlc3QnKS5wcm9wZXJ0eSgnZGF0ZScsbmV3IERhdGUoMTIxLDIsMSwwLDAsMCkpIl0pCi0gICAgICAgICMgNjQKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZEUoJ3JvdXRlJykuZnJvbV8oX18uVignMScpKS50byhfXy5WKCcyJykpLAotICAgICAgICAgICAgICAgICAgICAgICJnLmFkZEUoJ3JvdXRlJykuZnJvbShfXy5WKCcxJykpLnRvKF9fLlYoJzInKSkiXSkKLSAgICAgICAgIyA2NQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cud2l0aFNpZGVFZmZlY3QoJ2EnLCBbMSwgMl0pLlYoJzMnKS5zZWxlY3QoJ2EnKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU2lkZUVmZmVjdCgnYScsWzEsMl0pLlYoJzMnKS5zZWxlY3QoJ2EnKSJdKQotICAgICAgICAjIDY2Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy53aXRoU2lkZUVmZmVjdCgnYScsIDEpLlYoJzMnKS5zZWxlY3QoJ2EnKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU2lkZUVmZmVjdCgnYScsMSkuVignMycpLnNlbGVjdCgnYScpIl0pCi0gICAgICAgICMgNjcKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTaWRlRWZmZWN0KCdhJywgJ2FiYycpLlYoJzMnKS5zZWxlY3QoJ2EnKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU2lkZUVmZmVjdCgnYScsJ2FiYycpLlYoJzMnKS5zZWxlY3QoJ2EnKSJdKQotICAgICAgICAjIDY4Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdhaXJwb3J0JywgJ3JlZ2lvbicsICdVUy1OTScpLmxpbWl0KDMpLnZhbHVlcygnZWxldicpLmZvbGQoKS5pbmRleCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2FpcnBvcnQnLCdyZWdpb24nLCdVUy1OTScpLmxpbWl0KDMpLnZhbHVlcygnZWxldicpLmZvbGQoKS5pbmRleCgpIl0pCi0gICAgICAgICMgNjkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5yZXBlYXQoX18udGltZUxpbWl0KDEwMDApLm91dCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKCdjb2RlJywgJ0FHUicpKS5wYXRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVignMycpLnJlcGVhdChfXy50aW1lTGltaXQoMTAwMCkub3V0KCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKSkucGF0aCgpIl0pCi0KLSAgICAgICAgIyA3MAotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykud2hlcmUoX18udmFsdWVzKCdlbGV2JykuaXNfKGd0KDE0MDAwKSkpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLndoZXJlKF9fLnZhbHVlcygnZWxldicpLmlzKGd0KDE0MDAwKSkpIl0pCi0KLSAgICAgICAgIyA3MQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0Jykud2hlcmUoX18ub3V0KCkuY291bnQoKS5pc18oZ3QoMjUwKSkpLnZhbHVlcygnY29kZScpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXNMYWJlbCgnYWlycG9ydCcpLndoZXJlKF9fLm91dCgpLmNvdW50KCkuaXMoZ3QoMjUwKSkpLnZhbHVlcygnY29kZScpIl0pCi0KLSAgICAgICAgIyA3MgotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykuZmlsdGVyXyhfXy5vdXQoKS5jb3VudCgpLmlzXyhndCgyNTApKSkudmFsdWVzKCdjb2RlJyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdhaXJwb3J0JykuZmlsdGVyKF9fLm91dCgpLmNvdW50KCkuaXMoZ3QoMjUwKSkpLnZhbHVlcygnY29kZScpIl0pCi0gICAgICAgICMgNzMKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTYWNrKDApLgotICAgICAgICAgICAgICAgICAgICAgVignMycpLgotICAgICAgICAgICAgICAgICAgICAgcmVwZWF0KF9fLm91dEUoJ3JvdXRlJykuc2FjayhPcGVyYXRvci5zdW1fKS5ieSgnZGlzdCcpLmluVigpKS4KLSAgICAgICAgICAgICAgICAgICAgIHVudGlsKF9fLmhhcygnY29kZScsICdBR1InKS5vcl8oKS5sb29wcygpLmlzXyg0KSkuCi0gICAgICAgICAgICAgICAgICAgICBoYXMoJ2NvZGUnLCAnQUdSJykuCi0gICAgICAgICAgICAgICAgICAgICBsb2NhbChfXy51bmlvbihfXy5wYXRoKCkuYnkoJ2NvZGUnKS5ieSgnZGlzdCcpLCBfXy5zYWNrKCkpLmZvbGQoKSkuCi0gICAgICAgICAgICAgICAgICAgICBsaW1pdCgxMCksCi0gICAgICAgICAgICAgICAgICAgICAgImcud2l0aFNhY2soMCkuVignMycpLnJlcGVhdChfXy5vdXRFKCdyb3V0ZScpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieSgnZGlzdCcpLmluVigpKS51bnRpbChfXy5oYXMoJ2NvZGUnLCdBR1InKS5vcigpLmxvb3BzKCkuaXMoNCkpLmhhcygnY29kZScsJ0FHUicpLmxvY2FsKF9fLnVuaW9uKF9fLnBhdGgoKS5ieSgnY29kZScpLmJ5KCdkaXN0JyksX18uc2FjaygpKS5mb2xkKCkpLmxpbWl0KDEwKSJdKQotCi0gICAgICAgICMgNzQKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZFYoKS5hc18oJ2EnKS5hZGRWKCkuYXNfKCdiJykuYWRkRSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJyksCi0gICAgICAgICAgICAgICAgICAgICAgImcuYWRkVigpLmFzKCdhJykuYWRkVigpLmFzKCdiJykuYWRkRSgna25vd3MnKS5mcm9tKCdhJykudG8oJ2InKSJdKQotCi0gICAgICAgICMgNzUKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmFkZFYoJ1BlcnNvbicpLmFzXygnYScpLmFkZFYoJ1BlcnNvbicpLmFzXygnYicpLmFkZEUoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLAotICAgICAgICAgICAgICAgICAgICAgICJnLmFkZFYoJ1BlcnNvbicpLmFzKCdhJykuYWRkVignUGVyc29uJykuYXMoJ2InKS5hZGRFKCdrbm93cycpLmZyb20oJ2EnKS50bygnYicpIl0pCi0gICAgICAgICMgNzYKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzMnKS5wcm9qZWN0KCdPdXQnLCAnSW4nKS5ieShfXy5vdXQoKS5jb3VudCgpKS5ieShfXy5pbl8oKS5jb3VudCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCczJykucHJvamVjdCgnT3V0JywnSW4nKS5ieShfXy5vdXQoKS5jb3VudCgpKS5ieShfXy5pbigpLmNvdW50KCkpIl0pCi0gICAgICAgICMgNzcKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoJzQ0Jykub3V0KCkuYWdncmVnYXRlKCdhJykub3V0KCkud2hlcmUod2l0aGluKCdhJykpLnBhdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc0NCcpLm91dCgpLmFnZ3JlZ2F0ZSgnYScpLm91dCgpLndoZXJlKHdpdGhpbihbJ2EnXSkpLnBhdGgoKSJdKQotICAgICAgICAjIDc4Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdkYXRlJywgZGF0ZXRpbWUoMjAyMSwgMiwgMjIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdkYXRlJyxuZXcgRGF0ZSgxMjEsMiwyMiwwLDAsMCkpIl0pCi0gICAgICAgICMgNzkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2RhdGUnLCB3aXRoaW4oZGF0ZXRpbWUoMjAyMSwgMiwgMjIpLCBkYXRldGltZSgyMDIxLCAxLCAxKSkpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2RhdGUnLHdpdGhpbihbbmV3IERhdGUoMTIxLDIsMjIsMCwwLDApLG5ldyBEYXRlKDEyMSwxLDEsMCwwLDApXSkpIl0pCi0gICAgICAgICMgODAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2RhdGUnLCBiZXR3ZWVuKGRhdGV0aW1lKDIwMjEsIDEsIDEpLCBkYXRldGltZSgyMDIxLCAyLCAyMikpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdkYXRlJyxiZXR3ZWVuKG5ldyBEYXRlKDEyMSwxLDEsMCwwLDApLG5ldyBEYXRlKDEyMSwyLDIyLDAsMCwwKSkpIl0pCi0gICAgICAgICMgODEKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoJ2RhdGUnLCBpbnNpZGUoZGF0ZXRpbWUoMjAyMSwgMSwgMSksIGRhdGV0aW1lKDIwMjEsIDIsIDIyKSkpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ2RhdGUnLGluc2lkZShuZXcgRGF0ZSgxMjEsMSwxLDAsMCwwKSxuZXcgRGF0ZSgxMjEsMiwyMiwwLDAsMCkpKSJdKQotICAgICAgICAjIDgyCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdkYXRlJywgUC5ndChkYXRldGltZSgyMDIxLCAxLCAxLCA5LCAzMCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdkYXRlJyxndChuZXcgRGF0ZSgxMjEsMSwxLDksMzAsMCkpKSJdKQotICAgICAgICAjIDgzCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdydW53YXlzJywgYmV0d2VlbigzLCA1KSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncnVud2F5cycsYmV0d2VlbigzLDUpKSJdKQotICAgICAgICAjIDg0Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCkuaGFzKCdydW53YXlzJywgaW5zaWRlKDMsIDUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdydW53YXlzJyxpbnNpZGUoMyw1KSkiXSkKLSAgICAgICAgIyA4NQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignNDQnKS5vdXRFKCkuZWxlbWVudE1hcCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzQ0Jykub3V0RSgpLmVsZW1lbnRNYXAoKSJdKQotICAgICAgICAjIDg2Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCc0NCcpLnZhbHVlTWFwKCkuYnkoX18udW5mb2xkKCkpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJzQ0JykudmFsdWVNYXAoKS5ieShfXy51bmZvbGQoKSkiXSkKLSAgICAgICAgIyA4NwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVignNDQnKS52YWx1ZU1hcCgpLndpdGhfKFdpdGhPcHRpb25zLnRva2VucywgV2l0aE9wdGlvbnMubGFiZWxzKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsV2l0aE9wdGlvbnMubGFiZWxzKSJdKQotICAgICAgICAjIDg4Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCc0NCcpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIl0pCi0gICAgICAgICMgODkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuYWRkVigndGVzdCcpLAotICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLmFkZFYoJ3Rlc3QnKSJdKQotICAgICAgICAjIDkwCi0gICAgICAgIHN0cmF0ZWd5ID0gU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ3JlZ2lvbicsICdVUy1UWCcpLCBlZGdlcz1fXy5oYXNMYWJlbCgncm91dGUnKSkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKHN0cmF0ZWd5KS5WKCkuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoJ3JlZ2lvbicsJ1VTLVRYJyksZWRnZXM6X18uaGFzTGFiZWwoJ3JvdXRlJykpKS5WKCkuY291bnQoKSJdKQotICAgICAgICAjIDkxCi0gICAgICAgIHN0cmF0ZWd5ID0gU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhfcHJvcGVydGllcz1fXy5oYXNOb3QoJ3J1bndheXMnKSkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKHN0cmF0ZWd5KS5WKCkuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhc05vdCgncnVud2F5cycpKSkuVigpLmNvdW50KCkiXSkKLSAgICAgICAgIyA5MgotICAgICAgICBzdHJhdGVneSA9IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSwgdmVydGV4X3Byb3BlcnRpZXM9X18uaGFzTm90KCdydW53YXlzJykpCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy53aXRoU3RyYXRlZ2llcyhzdHJhdGVneSkuVigpLmNvdW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLHZlcnRleFByb3BlcnRpZXM6X18uaGFzTm90KCdydW53YXlzJykpKS5WKCkuY291bnQoKSJdKQotICAgICAgICAjIDkzCi0gICAgICAgIHN0cmF0ZWd5ID0gU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ3JlZ2lvbicsICdVUy1UWCcpLCBlZGdlcz1fXy5oYXNMYWJlbCgncm91dGUnKSkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSwgc3RyYXRlZ3kpLlYoKS5jb3VudCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpLGVkZ2VzOl9fLmhhc0xhYmVsKCdyb3V0ZScpKSkuVigpLmNvdW50KCkiXSkKLSAgICAgICAgIyA5NAotICAgICAgICBzdHJhdGVneSA9IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCdyZWdpb24nLCAnVVMtVFgnKSkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSwgc3RyYXRlZ3kpLlYoKS5jb3VudCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3ksbmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKCdyZWdpb24nLCdVUy1UWCcpKSkuVigpLmNvdW50KCkiXSkKLSAgICAgICAgIyA5NQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cud2l0aF8oJ2V2YWx1YXRpb25UaW1lb3V0JywgNTAwKS5WKCkuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KGV2YWx1YXRpb25UaW1lb3V0OjUwMCkpLlYoKS5jb3VudCgpIl0pCi0gICAgICAgICMgOTYKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneShldmFsdWF0aW9uVGltZW91dD01MDApKS5WKCkuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy53aXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KGV2YWx1YXRpb25UaW1lb3V0OjUwMCkpLlYoKS5jb3VudCgpIl0pCi0gICAgICAgICMgOTcKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhTdHJhdGVnaWVzKAotICAgICAgICAgICAgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0icGFydGl0aW9uIiwgd3JpdGVfcGFydGl0aW9uPSJhIiwgcmVhZF9wYXJ0aXRpb25zPVsiYSJdKSkuYWRkVigndGVzdCcpLAotICAgICAgICAgICAgICAgICAgICAgICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6J3BhcnRpdGlvbicsd3JpdGVQYXJ0aXRpb246J2EnLHJlYWRQYXJ0aXRpb25zOlsnYSddKSkuYWRkVigndGVzdCcpIl0pCi0gICAgICAgICMgOTgKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLndpdGhDb21wdXRlcigpLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoXyhTaG9ydGVzdFBhdGgudGFyZ2V0LCBfXy5oYXMoJ25hbWUnLCAncGV0ZXInKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aCgnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0JyxfXy5oYXMoJ25hbWUnLCdwZXRlcicpKSJdKQotCi0gICAgICAgICMgOTkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5jb2FsZXNjZShfXy5FKCksX18uYWRkRSgncGVyc29uJykpLAotICAgICAgICAgICAgICAgICAgICAgImcuVigpLmNvYWxlc2NlKF9fLkUoKSxfXy5hZGRFKCdwZXJzb24nKSkiXSkKLSAgICAgICAgIyAxMDAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdCgxKS5FKCksCi0gICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoMSkuRSgpIl0pCi0KLSAgICAgICAgIyA5OQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygicDEiLCBzdGFydGluZ193aXRoKCJmb28iKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncDEnLHN0YXJ0aW5nV2l0aCgnZm9vJykpIl0pCi0KLSAgICAgICAgIyAxMDAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoInAxIiwgZW5kaW5nX3dpdGgoImZvbyIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdwMScsZW5kaW5nV2l0aCgnZm9vJykpIl0pCi0KLSAgICAgICAgIyAxMDEKLSAgICAgICAgY2xhc3MgU3VwZXJTdHIoc3RyKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVihTdXBlclN0cigiZm9vX2lkIikpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoJ2Zvb19pZCcpIl0pCi0KLSAgICAgICAgIyAxMDIKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoInAxIiwgY29udGFpbmluZyhTdXBlclN0cigiZm9vIikpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5WKCkuaGFzKCdwMScsY29udGFpbmluZygnZm9vJykpIl0pCi0KLSAgICAgICAgIyAxMDMKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXMoInAxIiwgTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncDEnLG51bGwpIl0pCi0KLSAgICAgICAgIyAxMDQKLSAgICAgICAgdmVydGV4ID0gVmVydGV4KDAsICJwZXJzb24iKQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVih2ZXJ0ZXgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYobmV3IFJlZmVyZW5jZVZlcnRleCgwLCdwZXJzb24nKSkiXSkKLQotICAgICAgICAjIDEwNQotICAgICAgICBvdXRWZXJ0ZXggPSBWZXJ0ZXgoMCwgInBlcnNvbiIpCi0gICAgICAgIGluVmVydGV4ID0gVmVydGV4KDEsICJwZXJzb24iKQotICAgICAgICBlZGdlID0gRWRnZSgyLCBvdXRWZXJ0ZXgsICJrbm93cyIsIGluVmVydGV4KQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuaW5qZWN0KGVkZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICJnLmluamVjdChuZXcgUmVmZXJlbmNlRWRnZSgyLCdrbm93cycsbmV3IFJlZmVyZW5jZVZlcnRleCgxLCdwZXJzb24nKSxuZXcgUmVmZXJlbmNlVmVydGV4KDAsJ3BlcnNvbicpKSkiXSkKLQotICAgICAgICAjIDEwNgotICAgICAgICB2cCA9IFZlcnRleFByb3BlcnR5KDMsICJ0aW1lIiwgIjE4OjAwIiwgTm9uZSkKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdCh2cCksCi0gICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KG5ldyBSZWZlcmVuY2VWZXJ0ZXhQcm9wZXJ0eSgzLCd0aW1lJywnMTg6MDAnKSkiXSkKLQotICAgICAgICAjIDEwNwotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5tYXAobGFtYmRhOiAoIml0LmdldCgpLnZhbHVlKCduYW1lJykiLCAiZ3JlbWxpbi1ncm9vdnkiKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhcygncGVyc29uJywnbmFtZScsJ21hcmtvJykubWFwKHtpdC5nZXQoKS52YWx1ZSgnbmFtZScpfSkiXSkKLQotICAgICAgICAjIDEwOAotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuVigpLmhhcygncGVyc29uJywgJ2FnZScsIEJpbmRpbmdzLm9mKCd4JywgUC5sdCgzMCkpKS5jb3VudCgpLAotICAgICAgICAgICAgICAgICAgICAgICJnLlYoKS5oYXMoJ3BlcnNvbicsJ2FnZScsQmluZGluZ3MuaW5zdGFuY2UoKS5vZigneCcsIGx0KDMwKSkpLmNvdW50KCkiXSkKLQotICAgICAgICAjIDEwOQotICAgICAgICB0ZXN0cy5hcHBlbmQoW2cuaW5qZWN0KHsnbmFtZSc6ICdqYXZhJ30sIHtULmlkOiAwfSwge30sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhZ2UnOiBmbG9hdCgxMCksICdwb3NfaW5mJzogZmxvYXQoImluZiIpLCAnbmVnX2luZic6IGZsb2F0KCItaW5mIiksICduYW4nOiBmbG9hdCgibmFuIil9KSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoWyduYW1lJzonamF2YSddLFsoVC5pZCk6MF0sWzpdLFsnYWdlJzoxMC4wZCwncG9zX2luZic6RG91YmxlLlBPU0lUSVZFX0lORklOSVRZLCduZWdfaW5mJzpEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFksJ25hbic6RG91YmxlLk5hTl0pIl0pCi0KLSAgICAgICAgIyAxMTAKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdChmbG9hdCgxKSkuaXNfKFAuZXEoMSkub3JfKFAuZ3QoMikpLm9yXyhQLmx0ZSgzKSkub3JfKFAuZ3RlKDQpKSksCi0gICAgICAgICAgICAgICAgICAgICAgImcuaW5qZWN0KDEuMGQpLmlzKGVxKDEpLm9yKGd0KDIpKS5vcihsdGUoMykpLm9yKGd0ZSg0KSkpIl0pCi0KLSAgICAgICAgIyAxMTEKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuaGFzKCdhZ2UnLFAuZ3QoMTApLm9yXyhQLmd0ZSgxMSkuYW5kXyhQLmx0KDIwKSkpLmFuZF8oUC5sdCgyOSkub3JfKFAuZXEoMzUpKSkpLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgImcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS5oYXMoJ2FnZScsZ3QoMTApLm9yKGd0ZSgxMSkuYW5kKGx0KDIwKSkpLmFuZChsdCgyOSkub3IoZXEoMzUpKSkpLnZhbHVlcygnbmFtZScpIl0pCi0KLSAgICAgICAgIyAxMTIKLSAgICAgICAgdGVzdHMuYXBwZW5kKFtnLmluamVjdChzZXQoKCdhJykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAiZy5pbmplY3QoWydhJ10gYXMgU2V0KSJdKQotCi0gICAgICAgICMgMTEzCi0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5tZXJnZV92KE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICJnLm1lcmdlVigoVHJhdmVyc2FsKSBudWxsKSJdKQotCi0gICAgICAgICMgMTE0Ci0gICAgICAgIHRlc3RzLmFwcGVuZChbZy5tZXJnZV9lKE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICJnLm1lcmdlRSgoVHJhdmVyc2FsKSBudWxsKSJdKQotCi0gICAgICAgIHRsciA9IFRyYW5zbGF0b3IoKS5vZignZycpCi0KLSAgICAgICAgZm9yIHQgaW4gcmFuZ2UobGVuKHRlc3RzKSk6Ci0gICAgICAgICAgICBhID0gdGxyLnRyYW5zbGF0ZSh0ZXN0c1t0XVswXS5ieXRlY29kZSkKLSAgICAgICAgICAgIGFzc2VydCBhID09IHRlc3RzW3RdWzFdCi0KLSAgICBkZWYgdGVzdF90YXJnZXRfbGFuZ3VhZ2Uoc2VsZik6Ci0gICAgICAgIHRsciA9IFRyYW5zbGF0b3IoKS5vZignZycpCi0gICAgICAgIGFzc2VydCB0bHIuZ2V0X3RhcmdldF9sYW5ndWFnZSgpID09ICdncmVtbGluLWdyb292eScKLQotICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgotICAgICAgICB0bHIgPSBUcmFuc2xhdG9yKCkub2YoJ2cnKQotICAgICAgICBnID0gdHJhdmVyc2FsKCkud2l0aF8oTm9uZSkKLSAgICAgICAgYXNzZXJ0IHRsci50cmFuc2xhdGUoZy5WKCkuYnl0ZWNvZGUpID09ICJnLlYoKSIKLQotICAgIGRlZiB0ZXN0X3NvdXJjZV9uYW1lKHNlbGYpOgotICAgICAgICB0bHIgPSBUcmFuc2xhdG9yKCkub2YoJ2cnKQotICAgICAgICBhc3NlcnQgdGxyLmdldF90cmF2ZXJzYWxfc291cmNlKCkgPT0gJ2cnCmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9pby9fX2luaXRfXy5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvaW8vX19pbml0X18ucHkKcmVuYW1lIHRvIGdyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL2lvL21vZGVsLnB5IGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL2lvL21vZGVsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTAwY2MKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9zdHJ1Y3R1cmUvaW8vbW9kZWwucHkKQEAgLTAsMCArMSwxNTUgQEAKKyIiIgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorIiIiCisKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHV1aWQKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgc2hvcnQsIGxvbmcsIGJpZ2ludCwgQmlnRGVjaW1hbCwgU2luZ2xlQnl0ZQorZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuZ3JhcGggaW1wb3J0IFZlcnRleCwgRWRnZSwgUHJvcGVydHksIFZlcnRleFByb3BlcnR5LCBQYXRoCitmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3MudHJhdmVyc2FsIGltcG9ydCBEaXJlY3Rpb24sIFRyYXZlcnNlciwgVAorCisiIiIKK1RoZSBmb2xsb3dpbmcgbW9kZWxzIGFyZW4ndCBzdXBwb3J0ZWQuCit0aW5rZXItZ3JhcGggICAgICAgICBHcmFwaCB0eXBlIG5vdCBpbXBsZW1lbnRlZAorbWF4LW9mZnNldGRhdGV0aW1lICAgVG9vIGxhcmdlIGZvciBkYXRldGltZQorbWluLW9mZnNldGRhdGV0aW1lICAgVG9vIHNtYWxsIGZvciBkYXRldGltZQorZm9yZXZlci1kdXJhdGlvbiAgICAgVG9vIGxhcmdlIGZvciBkdXJhdGlvbgorbWF4LWZsb2F0ICAgICAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorbWluLWZsb2F0ICAgICAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorbmVnLW1heC1mbG9hdCAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorbmVnLW1pbi1mbG9hdCAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorbmFuLWZsb2F0ICAgICAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorcG9zLWluZi1mbG9hdCAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorbmVnLWluZi1mbG9hdCAgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgorbmVnLXplcm8tZmxvYXQgICAgICAgc2luZ2xlIHByZWNpc2lvbiBmbG9hdCBub3Qgc3VwcG9ydGVkIGluIFB5dGhvbgordHJhdmVyc2FsLXRyZWUgICAgICAgVHJlZSB0eXBlIG5vdCBpbXBsZW1lbnRlZAorIiIiCisKK21vZGVsID0ge30KKworbW9kZWxbInBvcy1iaWdkZWNpbWFsIl0gPSBCaWdEZWNpbWFsKDMzLCAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEpCittb2RlbFsibmVnLWJpZ2RlY2ltYWwiXSA9IEJpZ0RlY2ltYWwoMzMsIC0xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEpCittb2RlbFsicG9zLWJpZ2ludGVnZXIiXSA9IGJpZ2ludCgxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEpCittb2RlbFsibmVnLWJpZ2ludGVnZXIiXSA9IGJpZ2ludCgtMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxKQorbW9kZWxbIm1pbi1ieXRlIl0gPSBTaW5nbGVCeXRlKC0xMjgpCittb2RlbFsibWF4LWJ5dGUiXSA9IFNpbmdsZUJ5dGUoMTI3KQorbW9kZWxbImVtcHR5LWJpbmFyeSJdID0gYnl0ZXMoIiIsICJ1dGY4IikKK21vZGVsWyJzdHItYmluYXJ5Il0gPSBieXRlcygic29tZSBieXRlcyBmb3IgeW91IiwgInV0ZjgiKQorbW9kZWxbIm1heC1kb3VibGUiXSA9IDEuNzk3NjkzMTM0ODYyMzE1N0UzMDgKK21vZGVsWyJtaW4tZG91YmxlIl0gPSA0LjlFLTMyNAorbW9kZWxbIm5lZy1tYXgtZG91YmxlIl0gPSAtMS43OTc2OTMxMzQ4NjIzMTU3RTMwOAorbW9kZWxbIm5lZy1taW4tZG91YmxlIl0gPSAtNC45RS0zMjQKK21vZGVsWyJuYW4tZG91YmxlIl0gPSBmbG9hdCgnbmFuJykKK21vZGVsWyJwb3MtaW5mLWRvdWJsZSJdID0gZmxvYXQoJ2luZicpCittb2RlbFsibmVnLWluZi1kb3VibGUiXSA9IGZsb2F0KCctaW5mJykKK21vZGVsWyJuZWctemVyby1kb3VibGUiXSA9IC0wLjAKK21vZGVsWyJzaW5nbGUtYnl0ZS1jaGFyIl0gPSAnYScKK21vZGVsWyJtdWx0aS1ieXRlLWNoYXIiXSA9ICdcdTAzQTknCittb2RlbFsidW5zcGVjaWZpZWQtbnVsbCJdID0gTm9uZQorbW9kZWxbInRydWUtYm9vbGVhbiJdID0gVHJ1ZQorbW9kZWxbImZhbHNlLWJvb2xlYW4iXSA9IEZhbHNlCittb2RlbFsic2luZ2xlLWJ5dGUtc3RyaW5nIl0gPSAiYWJjIgorbW9kZWxbIm1peGVkLXN0cmluZyJdID0gImFiY1x1MDM5MVx1MDM5Mlx1MDM5MyIKK21vZGVsWyJ2YXItYnVsa2xpc3QiXSA9IFsibWFya28iLCAiam9zaCIsICJqb3NoIl0KK21vZGVsWyJlbXB0eS1idWxrbGlzdCJdID0gW10KK21vZGVsWyJ6ZXJvLWR1cmF0aW9uIl0gPSBkYXRldGltZS50aW1lZGVsdGEoKQorbW9kZWxbInRyYXZlcnNhbC1lZGdlIl0gPSBFZGdlKAorICAgIDEzLAorICAgIFZlcnRleCgxLCAncGVyc29uJyksCisgICAgImRldmVsb3BzIiwKKyAgICBWZXJ0ZXgoMTAsICJzb2Z0d2FyZSIpLAorICAgIFtQcm9wZXJ0eSgic2luY2UiLCAyMDA5LCBOb25lKV0KKykKK21vZGVsWyJuby1wcm9wLWVkZ2UiXSA9IEVkZ2UoCisgICAgMTMsCisgICAgVmVydGV4KDEsICdwZXJzb24nKSwKKyAgICAiZGV2ZWxvcHMiLAorICAgIFZlcnRleCgxMCwgInNvZnR3YXJlIikKKykKK21vZGVsWyJtYXgtaW50Il0gPSAyMTQ3NDgzNjQ3Cittb2RlbFsibWluLWludCJdID0gLTIqKjMxCittb2RlbFsibWF4LWxvbmciXSA9IGxvbmcoMioqNjMtMSkKK21vZGVsWyJtaW4tbG9uZyJdID0gbG9uZygtMioqNjMpCittb2RlbFsidmFyLXR5cGUtbGlzdCJdID0gWzEsICJwZXJzb24iLCBUcnVlLCBOb25lXQorbW9kZWxbImVtcHR5LWxpc3QiXSA9IFtdCittb2RlbFsidmFyLXR5cGUtbWFwIl0gPSB7CisgICAgInRlc3QiOiAxMjMsCisgICAgZGF0ZXRpbWUuZGF0ZXRpbWUoMTk3MCwgMSwgMSwgMCwgMjQsIDQxLCAyOTUwMDAsIHR6aW5mbz1kYXRldGltZS50aW1lem9uZS51dGMpOiAicmVkIiwKKyAgICAoMSwyLDMpOiBkYXRldGltZS5kYXRldGltZSgxOTcwLCAxLCAxLCAwLCAyNCwgNDEsIDI5NTAwMCwgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lLnV0YyksCisgICAgTm9uZTogTm9uZQorfQorbW9kZWxbImVtcHR5LW1hcCJdID0ge30KK21vZGVsWyJ0cmF2ZXJzYWwtcGF0aCJdID0gUGF0aCgKKyAgICBbc2V0KCksIHNldCgpLCBzZXQoKV0sCisgICAgW1ZlcnRleCgxLCAicGVyc29uIiksIFZlcnRleCgxMCwgInNvZnR3YXJlIiksIFZlcnRleCgxMSwgInNvZnR3YXJlIildCispCittb2RlbFsiZW1wdHktcGF0aCJdID0gUGF0aChbXSwgW10pCittb2RlbFsicHJvcC1wYXRoIl0gPSBQYXRoKAorICAgIFtzZXQoKSwgc2V0KCksIHNldCgpXSwKKyAgICBbCisgICAgICAgIFZlcnRleCgxLCAicGVyc29uIiwgVmVydGV4UHJvcGVydHkoCisgICAgICAgICAgICAxMjMsCisgICAgICAgICAgICAibmFtZSIsCisgICAgICAgICAgICAic3RlcGhlbiIsCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgVmVydGV4UHJvcGVydHkoMCwgIm5hbWUiLCAibWFya28iLCBOb25lKSwKKyAgICAgICAgICAgICAgICBWZXJ0ZXhQcm9wZXJ0eSg2LCAibG9jYXRpb24iLCBbXSwgTm9uZSkKKyAgICAgICAgICAgIF0KKyAgICAgICAgKSksCisgICAgICAgIFZlcnRleCgxMCwgInNvZnR3YXJlIiksCisgICAgICAgIFZlcnRleCgxMSwgInNvZnR3YXJlIikKKyAgICBdCispCittb2RlbFsiZWRnZS1wcm9wZXJ0eSJdID0gUHJvcGVydHkoInNpbmNlIiwgMjAwOSwgTm9uZSkKK21vZGVsWyJudWxsLXByb3BlcnR5Il0gPSBQcm9wZXJ0eSgiIiwgTm9uZSwgTm9uZSkKK21vZGVsWyJ2YXItdHlwZS1zZXQiXSA9IHsyLCAicGVyc29uIiwgVHJ1ZSwgTm9uZX0KK21vZGVsWyJlbXB0eS1zZXQiXSA9IHNldCgpCittb2RlbFsibWF4LXNob3J0Il0gPSBzaG9ydCgzMjc2NykKK21vZGVsWyJtaW4tc2hvcnQiXSA9IHNob3J0KC0zMjc2OCkKK21vZGVsWyJzcGVjaWZpZWQtdXVpZCJdID0gdXVpZC5VVUlEKCI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiKQorbW9kZWxbIm5pbC11dWlkIl0gPSB1dWlkLlVVSUQoaW50ID0gMCkKK21vZGVsWyJuby1wcm9wLXZlcnRleCJdID0gVmVydGV4KDEsICJwZXJzb24iKQorbW9kZWxbInRyYXZlcnNhbC12ZXJ0ZXhwcm9wZXJ0eSJdID0gVmVydGV4UHJvcGVydHkoMCwgIm5hbWUiLCAibWFya28iLCBOb25lKQorbW9kZWxbIm1ldGEtdmVydGV4cHJvcGVydHkiXSA9IFZlcnRleFByb3BlcnR5KDEsICJwZXJzb24iLCAic3RlcGhlbiIsIE5vbmUsIFtQcm9wZXJ0eSgiYSIsICJiIiwgTm9uZSldKQorbW9kZWxbInNldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eSJdID0gVmVydGV4UHJvcGVydHkoMSwgInBlcnNvbiIsIHsic3RlcGhlbiIsICJtYXJrbyJ9LCBOb25lLCBbUHJvcGVydHkoImEiLCAiYiIsIE5vbmUpXSkKK21vZGVsWyJpZC10Il0gPSBULmlkCittb2RlbFsib3V0LWRpcmVjdGlvbiJdID0gRGlyZWN0aW9uLk9VVAorCitzYW50YV9mZSA9IFZlcnRleFByb3BlcnR5KAorICAgIDksICJsb2NhdGlvbiIsICJzYW50YSBmZSIsIE5vbmUsCisgICAgW1Byb3BlcnR5KCJzdGFydFRpbWUiLCAyMDA1LCBOb25lKV0KKykKK2JydXNzZWxzID0gVmVydGV4UHJvcGVydHkoCisgICAgOCwgImxvY2F0aW9uIiwgImJydXNzZWxzIiwgTm9uZSwKKyAgICBbUHJvcGVydHkoInN0YXJ0VGltZSIsIDIwMDUsIE5vbmUpLCBQcm9wZXJ0eSgiZW5kVGltZSIsIDIwMDUsIE5vbmUpXQorKQorc2FudGFfY3J1eiA9IFZlcnRleFByb3BlcnR5KAorICAgIDcsICJsb2NhdGlvbiIsICJzYW50YSBjcnV6IiwgTm9uZSwKKyAgICBbUHJvcGVydHkoInN0YXJ0VGltZSIsIDIwMDEsIE5vbmUpLCBQcm9wZXJ0eSgiZW5kVGltZSIsIDIwMDQsIE5vbmUpXQorKQorc2FuX2RpZWdvID0gVmVydGV4UHJvcGVydHkoCisgICAgNiwgImxvY2F0aW9uIiwgInNhbiBkaWVnbyIsIE5vbmUsCisgICAgW1Byb3BlcnR5KCJzdGFydFRpbWUiLCAxOTk3LCBOb25lKSwgUHJvcGVydHkoImVuZFRpbWUiLCAyMDAxLCBOb25lKV0KKykKK25hbWUgPSBWZXJ0ZXhQcm9wZXJ0eSgwLCAibmFtZSIsICJtYXJrbyIsIE5vbmUpCisKK21vZGVsWyJ0cmF2ZXJzYWwtdmVydGV4Il0gPSBWZXJ0ZXgoMSwgInBlcnNvbiIsIFsKKyAgICBQcm9wZXJ0eSgibmFtZSIsIG5hbWUsIE5vbmUpLCBQcm9wZXJ0eSgibG9jYXRpb24iLCBbCisgICAgICAgIHNhbl9kaWVnbywgc2FudGFfY3J1eiwgYnJ1c3NlbHMsIHNhbnRhX2ZlCisgICAgXSwgTm9uZSldKQorbW9kZWxbInZlcnRleC10cmF2ZXJzZXIiXSA9IFRyYXZlcnNlcihtb2RlbFsidHJhdmVyc2FsLXZlcnRleCJdLCAxKQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL2lvL3Rlc3RfZ3JhcGhiaW5hcnlWNC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoYmluYXJ5VjQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmMmFjNQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoYmluYXJ5VjQucHkKQEAgLTAsMCArMSwzMTggQEAKKyIiIgorTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQordG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorIiIiCisKK2ltcG9ydCB1dWlkCitpbXBvcnQgbWF0aAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUsIHRpbWVkZWx0YSwgdGltZXpvbmUKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RhdGljcyBpbXBvcnQgbG9uZywgYmlnaW50LCBCaWdEZWNpbWFsLCBTaW5nbGVCeXRlLCBTaW5nbGVDaGFyCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5ncmFwaCBpbXBvcnQgR3JhcGgsIFZlcnRleCwgRWRnZSwgUHJvcGVydHksIFZlcnRleFByb3BlcnR5LCBQYXRoCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaGJpbmFyeVY0IGltcG9ydCBHcmFwaEJpbmFyeVdyaXRlciwgR3JhcGhCaW5hcnlSZWFkZXIKK2Zyb20gZ3JlbWxpbl9weXRob24ucHJvY2Vzcy50cmF2ZXJzYWwgaW1wb3J0IERpcmVjdGlvbgorZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8udXRpbCBpbXBvcnQgTWFya2VyCisKKworY2xhc3MgVGVzdEdyYXBoQmluYXJ5VjQob2JqZWN0KToKKyAgICBncmFwaGJpbmFyeV93cml0ZXIgPSBHcmFwaEJpbmFyeVdyaXRlcigpCisgICAgZ3JhcGhiaW5hcnlfcmVhZGVyID0gR3JhcGhCaW5hcnlSZWFkZXIoKQorCisgICAgZGVmIHRlc3RfbnVsbChzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdChOb25lKSkKKyAgICAgICAgYXNzZXJ0IGMgaXMgTm9uZQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICB4ID0gMTAwCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgorICAgICAgICB4ID0gbG9uZygxMDApCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9iaWdpbnQoc2VsZik6CisgICAgICAgIHggPSBiaWdpbnQoMHgxMDAwXzAwMDBfMDAwMF8wMDAwXzAwMDApCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgeCA9IGZsb2F0KDEwMC4wMDEpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICAgICAgeCA9IGZsb2F0KCduYW4nKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCBtYXRoLmlzbmFuKG91dHB1dCkKKworICAgICAgICB4ID0gZmxvYXQoJy1pbmYnKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCBtYXRoLmlzaW5mKG91dHB1dCkgYW5kIG91dHB1dCA8IDAKKworICAgICAgICB4ID0gZmxvYXQoJ2luZicpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IG1hdGguaXNpbmYob3V0cHV0KSBhbmQgb3V0cHV0ID4gMAorCisgICAgZGVmIHRlc3RfZG91YmxlKHNlbGYpOgorICAgICAgICB4ID0gMTAwLjAwMQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfYmlnZGVjaW1hbChzZWxmKToKKyAgICAgICAgeCA9IEJpZ0RlY2ltYWwoMTAwLCAyMzQpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHguc2NhbGUgPT0gb3V0cHV0LnNjYWxlCisgICAgICAgIGFzc2VydCB4LnVuc2NhbGVkX3ZhbHVlID09IG91dHB1dC51bnNjYWxlZF92YWx1ZQorCisgICAgZGVmIHRlc3RfZGF0ZXRpbWUoc2VsZik6CisgICAgICAgIHR6ID0gdGltZXpvbmUodGltZWRlbHRhKHNlY29uZHM9MzYwMDApKQorICAgICAgICBtcyA9IDEyMzQ1Njc4OTEyCisgICAgICAgIHggPSBkYXRldGltZSgyMDIyLCA1LCAyMCwgdHppbmZvPXR6KSArIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9bXMpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9kYXRldGltZV9mb3JtYXQoc2VsZik6CisgICAgICAgIHggPSBkYXRldGltZS5zdHJwdGltZSgnMjAyMi0wNS0yMFQwMzoyNTo0NS42Nzg5MTJaJywgJyVZLSVtLSVkVCVIOiVNOiVTLiVmJXonKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfZGF0ZXRpbWVfbG9jYWwoc2VsZik6CisgICAgICAgIHggPSBkYXRldGltZS5ub3coKS5hc3RpbWV6b25lKCkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X2RhdGV0aW1lX2Vwb2NoKHNlbGYpOgorICAgICAgICB4ID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgxNjkwOTM0NDAwKS5hc3RpbWV6b25lKHRpbWV6b25lLnV0YykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKKyAgICAgICAgeCA9ICJzZXJpYWxpemUgdGhpcyEiCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9ob21vZ2VuZW91c19saXN0KHNlbGYpOgorICAgICAgICB4ID0gWyJzZXJpYWxpemUgdGhpcyEiLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsInN0b3AgdGVsbGluZyBtZSB3aGF0IHRvIHNlcmlhbGl6ZSJdCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5lb3VzX2xpc3Qoc2VsZik6CisgICAgICAgIHggPSBbInNlcmlhbGl6ZSB0aGlzISIsIDAsICJzZXJpYWxpemUgdGhhdCEiLCAic2VyaWFsaXplIHRoYXQhIiwgMSwgInN0b3AgdGVsbGluZyBtZSB3aGF0IHRvIHNlcmlhbGl6ZSIsIDJdCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5lb3VzX2xpc3Rfd2l0aF9ub25lKHNlbGYpOgorICAgICAgICB4ID0gWyJzZXJpYWxpemUgdGhpcyEiLCAwLCAic2VyaWFsaXplIHRoYXQhIiwgInNlcmlhbGl6ZSB0aGF0ISIsIDEsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiLCAyLCBOb25lXQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfaG9tb2dlbmVvdXNfc2V0KHNlbGYpOgorICAgICAgICB4ID0geyJzZXJpYWxpemUgdGhpcyEiLCAic2VyaWFsaXplIHRoYXQhIiwgInN0b3AgdGVsbGluZyBtZSB3aGF0IHRvIHNlcmlhbGl6ZSJ9CisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5lb3VzX3NldChzZWxmKToKKyAgICAgICAgeCA9IHsic2VyaWFsaXplIHRoaXMhIiwgMCwgInNlcmlhbGl6ZSB0aGF0ISIsIDEsICJzdG9wIHRlbGxpbmcgbWUgd2hhdCB0byBzZXJpYWxpemUiLCAyfQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3Rfc2V0X3dpdGhfdW5oYXNoYWJsZV9kaWN0X2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCBzZXRzIGNvbnRhaW5pbmcgZGljdHMgYXJlIGNvZXJjZWQgdG8gbGlzdCAtIHNlZSBUSU5LRVJQT1AtMzIzMgorICAgICAgICB4ID0gW3sibmFtZSI6ICJtYXJrbyIsICJhZ2UiOiAyOX0sIHsibmFtZSI6ICJqb3NoIiwgImFnZSI6IDMyfV0KKyAgICAgICAgbGlzdF9wYXlsb2FkID0gc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpCisgICAgICAgICMgcGF0Y2ggb3V0ZXIgdHlwZSBmcm9tIGxpc3QgKDB4MDkpIHRvIHNldCAoMHgwYikKKyAgICAgICAgc2V0X3BheWxvYWQgPSBieXRlYXJyYXkobGlzdF9wYXlsb2FkKQorICAgICAgICBzZXRfcGF5bG9hZFswXSA9IDB4MGIKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2V0X3BheWxvYWQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkKKyAgICAgICAgYXNzZXJ0IGxlbihvdXRwdXQpID09IDIKKworICAgIGRlZiB0ZXN0X3NldF93aXRoX3VuaGFzaGFibGVfbGlzdF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgc2V0cyBjb250YWluaW5nIGxpc3RzIGFyZSBjb2VyY2VkIHRvIGxpc3QgLSBzZWUgVElOS0VSUE9QLTMyMzIKKyAgICAgICAgbGlzdF9wYXlsb2FkID0gc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KFtbIm1hcmtvIiwgImpvc2giXSwgWyJ2YWRhcyIsICJwZXRlciJdXSkKKyAgICAgICAgIyB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgRGF0YVR5cGUgZm9yIGxpc3QgKDB4MDkpLCBjaGFuZ2UgaXQgdG8gc2V0ICgweDBiKQorICAgICAgICBzZXRfcGF5bG9hZCA9IGJ5dGVhcnJheShsaXN0X3BheWxvYWQpCisgICAgICAgIHNldF9wYXlsb2FkWzBdID0gMHgwYgorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZXRfcGF5bG9hZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3V0cHV0LCBsaXN0KQorICAgICAgICBhc3NlcnQgbGVuKG91dHB1dCkgPT0gMgorCisgICAgZGVmIHRlc3Rfc2V0X3dpdGhfbWl4ZWRfaGFzaGFibGVfYW5kX3VuaGFzaGFibGVfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IHNldHMgY29udGFpbmluZyBhIG1peCBvZiBoYXNoYWJsZSBhbmQgdW5oYXNoYWJsZSBlbGVtZW50cyBhcmUgY29lcmNlZCB0byBsaXN0IC0gc2VlIFRJTktFUlBPUC0zMjMyCisgICAgICAgIHggPSBbIm1hcmtvIiwgeyJuYW1lIjogImpvc2gifSwgNDJdCisgICAgICAgIGxpc3RfcGF5bG9hZCA9IHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KQorICAgICAgICBzZXRfcGF5bG9hZCA9IGJ5dGVhcnJheShsaXN0X3BheWxvYWQpCisgICAgICAgIHNldF9wYXlsb2FkWzBdID0gMHgwYgorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZXRfcGF5bG9hZCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3V0cHV0LCBsaXN0KQorICAgICAgICBhc3NlcnQgbGVuKG91dHB1dCkgPT0gMworCisgICAgZGVmIHRlc3Rfc2V0X3dpdGhfbmVzdGVkX3VuaGFzaGFibGVfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IHNldHMgY29udGFpbmluZyBkaWN0cyB3aXRoIGxpc3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIGxpc3QgLSBzZWUgVElOS0VSUE9QLTMyMzIKKyAgICAgICAgeCA9IFt7Im5hbWUiOiAibWFya28iLCAibGFuZ3MiOiBbImphdmEiLCAicHl0aG9uIl19LCB7Im5hbWUiOiAiam9zaCIsICJsYW5ncyI6IFsiZ3JlbWxpbiJdfV0KKyAgICAgICAgbGlzdF9wYXlsb2FkID0gc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpCisgICAgICAgICMgcGF0Y2ggb3V0ZXIgdHlwZSBmcm9tIGxpc3QgKDB4MDkpIHRvIHNldCAoMHgwYikKKyAgICAgICAgc2V0X3BheWxvYWQgPSBieXRlYXJyYXkobGlzdF9wYXlsb2FkKQorICAgICAgICBzZXRfcGF5bG9hZFswXSA9IDB4MGIKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2V0X3BheWxvYWQpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgbGlzdCkKKyAgICAgICAgYXNzZXJ0IGxlbihvdXRwdXQpID09IDIKKworICAgIGRlZiB0ZXN0X2RpY3Qoc2VsZik6CisgICAgICAgIHggPSB7InlvIjogIndoYXQ/IiwKKyAgICAgICAgICAgICAiZ28iOiAibm8hIiwKKyAgICAgICAgICAgICAibnVtYmVyIjogMTIzLAorICAgICAgICAgICAgIDMyMTogImNyYXp5IHdpdGggdGhlIG51bWJlciBmb3IgYSBrZXkiLAorICAgICAgICAgICAgIDk4NzogWyJnbyIsICJkZWVwIiwgeyJoZXJlIjogIiEifV19CisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICAgICAgeCA9IHsibWFya28iOiBbNjY2XSwgIm5vb25lIjogWyJibGFoIl19CisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICAgICAgeCA9IHsicmlwcGxlIjogW10sICJwZXRlciI6IFsiY3JlYXRlZCJdLCAibm9vbmUiOiBbImJsYWgiXSwgInZhZGFzIjogW10sCisgICAgICAgICAgICAgImpvc2giOiBbImNyZWF0ZWQiLCAiY3JlYXRlZCJdLCAibG9wIjogW10sICJtYXJrbyI6IFs2NjYsICJjcmVhdGVkIiwgImtub3dzIiwgImtub3dzIl19CisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX2RpY3Qoc2VsZik6CisgICAgICAgIHggPSBPcmRlcmVkRGljdCgpCisgICAgICAgIHhbJ2EnXSA9IDEKKyAgICAgICAgeFsnYiddID0gMgorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfdXVpZChzZWxmKToKKyAgICAgICAgeCA9IHV1aWQuVVVJRCgiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X2VkZ2Uoc2VsZik6CisgICAgICAgIHggPSBFZGdlKDEyMywgVmVydGV4KDEsICdwZXJzb24nKSwgImRldmVsb3BlZCIsIFZlcnRleCgxMCwgInNvZnR3YXJlIikpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisgICAgICAgIGFzc2VydCB4LmluViA9PSBvdXRwdXQuaW5WCisgICAgICAgIGFzc2VydCB4Lm91dFYgPT0gb3V0cHV0Lm91dFYKKworICAgIGRlZiB0ZXN0X3BhdGgoc2VsZik6CisgICAgICAgIHggPSBQYXRoKFsieCIsICJ5IiwgInoiXSwgWzEsIDIsIDNdKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfcHJvcGVydHkoc2VsZik6CisgICAgICAgIHggPSBQcm9wZXJ0eSgibmFtZSIsICJzdGVwaGVuIiwgTm9uZSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X3ZlcnRleChzZWxmKToKKyAgICAgICAgeCA9IFZlcnRleCgxMjMsICJwZXJzb24iKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfdmVydGV4cHJvcGVydHkoc2VsZik6CisgICAgICAgIHggPSBWZXJ0ZXhQcm9wZXJ0eSgxMjMsICJuYW1lIiwgInN0ZXBoZW4iLCBOb25lKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfZGlyZWN0aW9uKHNlbGYpOgorICAgICAgICB4ID0gRGlyZWN0aW9uLk9VVAorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgICAgIHggPSBEaXJlY3Rpb24uZnJvbV8KKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X2J5dGUoc2VsZik6CisgICAgICAgIHggPSBpbnQuX19uZXdfXyhTaW5nbGVCeXRlLCAxKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoeCkpCisgICAgICAgIGFzc2VydCB4ID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfYmluYXJ5KHNlbGYpOgorICAgICAgICB4ID0gYnl0ZXMoInNvbWUgYnl0ZXMgZm9yIHlvdSIsICJ1dGY4IikKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X2Jvb2xlYW4oc2VsZik6CisgICAgICAgIHggPSBUcnVlCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICAgICAgeCA9IEZhbHNlCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9jaGFyKHNlbGYpOgorICAgICAgICB4ID0gc3RyLl9fbmV3X18oU2luZ2xlQ2hhciwgY2hyKDc2KSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgICAgICB4ID0gc3RyLl9fbmV3X18oU2luZ2xlQ2hhciwgY2hyKDU3MzQ0KSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5ncmFwaGJpbmFyeV9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaGJpbmFyeV93cml0ZXIud3JpdGVfb2JqZWN0KHgpKQorICAgICAgICBhc3NlcnQgeCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X2R1cmF0aW9uKHNlbGYpOgorICAgICAgICB4ID0gdGltZWRlbHRhKHNlY29uZHM9MTAwMCwgbWljcm9zZWNvbmRzPTEwMDApCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9tYXJrZXIoc2VsZik6CisgICAgICAgIHggPSBNYXJrZXIuZW5kX29mX3N0cmVhbSgpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhiaW5hcnlfcmVhZGVyLnJlYWRfb2JqZWN0KHNlbGYuZ3JhcGhiaW5hcnlfd3JpdGVyLndyaXRlX29iamVjdCh4KSkKKyAgICAgICAgYXNzZXJ0IHggPT0gb3V0cHV0CisKKyAgICBkZWYgdGVzdF9ncmFwaChzZWxmKToKKyAgICAgICAgZ3JhcGggPSBHcmFwaCgpCisgICAgICAgIHYxID0gVmVydGV4KDEsICJwZXJzb24iKQorICAgICAgICB2MiA9IFZlcnRleCgyLCAicGVyc29uIikKKyAgICAgICAgZ3JhcGgudmVydGljZXNbMV0gPSB2MQorICAgICAgICBncmFwaC52ZXJ0aWNlc1syXSA9IHYyCisgICAgICAgIGUxID0gRWRnZSgzLCB2MSwgImtub3dzIiwgdjIpCisgICAgICAgIGdyYXBoLmVkZ2VzWzNdID0gZTEKKworICAgICAgICAjIEFkZCBzb21lIHByb3BlcnRpZXMKKyAgICAgICAgdnAxID0gVmVydGV4UHJvcGVydHkoNCwgIm5hbWUiLCAibWFya28iLCB2MSkKKyAgICAgICAgdjEucHJvcGVydGllcy5hcHBlbmQodnAxKQorICAgICAgICB2cDEucHJvcGVydGllcy5hcHBlbmQoUHJvcGVydHkoImFjbCIsICJwdWJsaWMiLCB2cDEpKQorCisgICAgICAgIGUxLnByb3BlcnRpZXMuYXBwZW5kKFByb3BlcnR5KCJ3ZWlnaHQiLCAwLjUsIGUxKSkKKworICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoYmluYXJ5X3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoYmluYXJ5X3dyaXRlci53cml0ZV9vYmplY3QoZ3JhcGgpKQorCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG91dHB1dCwgR3JhcGgpCisgICAgICAgIGFzc2VydCBsZW4ob3V0cHV0LnZlcnRpY2VzKSA9PSAyCisgICAgICAgIGFzc2VydCBsZW4ob3V0cHV0LmVkZ2VzKSA9PSAxCisKKyAgICAgICAgcnYxID0gb3V0cHV0LnZlcnRpY2VzWzFdCisgICAgICAgIGFzc2VydCBydjEubGFiZWwgPT0gInBlcnNvbiIKKyAgICAgICAgYXNzZXJ0IGxlbihydjEucHJvcGVydGllcykgPT0gMQorICAgICAgICBydnAxID0gcnYxLnByb3BlcnRpZXNbMF0KKyAgICAgICAgYXNzZXJ0IHJ2cDEudmFsdWUgPT0gIm1hcmtvIgorICAgICAgICBhc3NlcnQgbGVuKHJ2cDEucHJvcGVydGllcykgPT0gMQorICAgICAgICBhc3NlcnQgcnZwMS5wcm9wZXJ0aWVzWzBdLmtleSA9PSAiYWNsIgorICAgICAgICBhc3NlcnQgcnZwMS5wcm9wZXJ0aWVzWzBdLnZhbHVlID09ICJwdWJsaWMiCisKKyAgICAgICAgcmUxID0gb3V0cHV0LmVkZ2VzWzNdCisgICAgICAgIGFzc2VydCByZTEubGFiZWwgPT0gImtub3dzIgorICAgICAgICBhc3NlcnQgcmUxLm91dFYuaWQgPT0gMQorICAgICAgICBhc3NlcnQgcmUxLmluVi5pZCA9PSAyCisgICAgICAgIGFzc2VydCBsZW4ocmUxLnByb3BlcnRpZXMpID09IDEKKyAgICAgICAgYXNzZXJ0IHJlMS5wcm9wZXJ0aWVzWzBdLmtleSA9PSAid2VpZ2h0IgorICAgICAgICBhc3NlcnQgcmUxLnByb3BlcnRpZXNbMF0udmFsdWUgPT0gMC41CmRpZmYgLS1naXQgYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9zdHJ1Y3R1cmUvaW8vdGVzdF9ncmFwaGJpbmFyeXY0bW9kZWwucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9zdHJ1Y3R1cmUvaW8vdGVzdF9ncmFwaGJpbmFyeXY0bW9kZWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1OTgyMQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoYmluYXJ5djRtb2RlbC5weQpAQCAtMCwwICsxLDMwNCBAQAorIiIiCitMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCitvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCityZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCit0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuCisiIiIKK2ltcG9ydCBweXRlc3QKKworIiIiCitSb3VuZCB0cmlwIHRlc3Rpbmcgb2YgR3JhcGhCaW5hcnlWNCBjb21wYXJlZCB0byBhIGNvcnJlY3QgIm1vZGVsIi4KKworU2V0IHRoZSBJT19URVNUX0RJUkVDVE9SWSBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlCit0aGUgLmdiaW4gZmlsZXMgdGhhdCByZXByZXNlbnQgdGhlIHNlcmlhbGl6ZWQgIm1vZGVsIiBhcmUgbG9jYXRlZC4gCisiIiIKKworZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhiaW5hcnlWNCBpbXBvcnQgR3JhcGhCaW5hcnlXcml0ZXIsIEdyYXBoQmluYXJ5UmVhZGVyCitpbXBvcnQgbWF0aAoraW1wb3J0IG9zCisKK2Zyb20gLm1vZGVsIGltcG9ydCBtb2RlbAorCitncmVtbGluX3Rlc3RfZGlyID0gImdyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvIgorZGlyZWN0b3J5X3NlYXJjaF9wYXR0ZXJuID0gImdyZW1saW4tcHl0aG9uIiArIG9zLnNlcCArICJzcmMiICsgb3Muc2VwICsgIm1haW4iCitkZWZhdWx0X2RpciA9IF9fZmlsZV9fWzpfX2ZpbGVfXy5maW5kKGRpcmVjdG9yeV9zZWFyY2hfcGF0dGVybildCit0ZXN0X3Jlc291cmNlX2RpcmVjdG9yeSA9IG9zLmVudmlyb24uZ2V0KCdJT19URVNUX0RJUkVDVE9SWScsIGRlZmF1bHRfZGlyICsgZ3JlbWxpbl90ZXN0X2RpcikKK3dyaXRlciA9IEdyYXBoQmluYXJ5V3JpdGVyKCkKK3JlYWRlciA9IEdyYXBoQmluYXJ5UmVhZGVyKCkKKworZGVmIGdldF9lbnRyeSh0aXRsZSk6CisgICAgcmV0dXJuIG1vZGVsW3RpdGxlXQorCitkZWYgcmVhZF9maWxlX2J5X25hbWUocmVzb3VyY2VfbmFtZSk6CisgICAgZnVsbF9uYW1lID0gdGVzdF9yZXNvdXJjZV9kaXJlY3RvcnkgKyByZXNvdXJjZV9uYW1lICsgIi0iICsgInY0IiArICIuZ2JpbiIKKyAgICB3aXRoIG9wZW4oZnVsbF9uYW1lLCAncmInKSBhcyByZXNvdXJjZV9maWxlOgorICAgICAgICByZXR1cm4gYnl0ZWFycmF5KHJlc291cmNlX2ZpbGUucmVhZCgpKQorCitkZWYgdGVzdF9wb3NfYmlnZGVjaW1hbCgpOgorICAgIGRlZiBkZWNpbWFsX2NtcCh4LCB5KToKKyAgICAgICAgaWYgeC5zY2FsZSA9PSB5LnNjYWxlIGFuZCB4LnVuc2NhbGVkX3ZhbHVlID09IHkudW5zY2FsZWRfdmFsdWUgYW5kIHgudmFsdWUgPT0geS52YWx1ZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIHJ1bl93cml0ZXJlYWQoInBvcy1iaWdkZWNpbWFsIiwgZGVjaW1hbF9jbXApCisKK2RlZiB0ZXN0X25lZ19iaWdkZWNpbWFsKCk6CisgICAgZGVmIGRlY2ltYWxfY21wKHgsIHkpOgorICAgICAgICBpZiB4LnNjYWxlID09IHkuc2NhbGUgYW5kIHgudW5zY2FsZWRfdmFsdWUgPT0geS51bnNjYWxlZF92YWx1ZSBhbmQgeC52YWx1ZSA9PSB5LnZhbHVlOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcnVuX3dyaXRlcmVhZCgibmVnLWJpZ2RlY2ltYWwiLCBkZWNpbWFsX2NtcCkKKworZGVmIHRlc3RfcG9zX2JpZ2ludGVnZXIoKToKKyAgICAjIGdyZW1saW4tcHl0aG9uIGFkZHMgYW4gZXh0cmEgMCBieXRlIHRvIHRoZSB2YWx1ZS4KKyAgICBydW5fd3JpdGVyZWFkKCJwb3MtYmlnaW50ZWdlciIpCisKK2RlZiB0ZXN0X25lZ19iaWdpbnRlZ2VyKCk6CisgICAgIyBncmVtbGluLXB5dGhvbiBhZGRzIGFuIGV4dHJhIDAgYnl0ZSB0byB0aGUgdmFsdWUuCisgICAgcnVuX3dyaXRlcmVhZCgibmVnLWJpZ2ludGVnZXIiKQorCitkZWYgdGVzdF9taW5fYnl0ZSgpOgorICAgIHJ1bigibWluLWJ5dGUiKQorICAgIAorZGVmIHRlc3RfbWF4X2J5dGUoKToKKyAgICBydW4oIm1heC1ieXRlIikKKworZGVmIHRlc3RfZW1wdHlfYmluYXJ5KCk6CisgICAgcnVuKCJlbXB0eS1iaW5hcnkiKQorCitkZWYgdGVzdF9zdHJfYmluYXJ5KCk6CisgICAgcnVuKCJzdHItYmluYXJ5IikKKworZGVmIHRlc3RfbWF4X2RvdWJsZSgpOgorICAgIHJ1bigibWF4LWRvdWJsZSIpCisKK2RlZiB0ZXN0X21pbl9kb3VibGUoKToKKyAgICBydW4oIm1pbi1kb3VibGUiKQorCitkZWYgdGVzdF9uZWdfbWF4X2RvdWJsZSgpOgorICAgIHJ1bigibmVnLW1heC1kb3VibGUiKQorCitkZWYgdGVzdF9uZWdfbWluX2RvdWJsZSgpOgorICAgIHJ1bigibmVnLW1pbi1kb3VibGUiKQorCitkZWYgdGVzdF9uYW5fZG91YmxlKCk6CisgICAgZGVmIG5hbl9jbXAoeCwgeSk6CisgICAgICAgIGlmIG1hdGguaXNuYW4oeCkgYW5kIG1hdGguaXNuYW4oeSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcnVuKCJuYW4tZG91YmxlIiwgbmFuX2NtcCkKKworZGVmIHRlc3RfcG9zX2luZl9kb3VibGUoKToKKyAgICBydW4oInBvcy1pbmYtZG91YmxlIikKKworZGVmIHRlc3RfbmVnX2luZl9kb3VibGUoKToKKyAgICBydW4oIm5lZy1pbmYtZG91YmxlIikKKworZGVmIHRlc3RfbmVnX3plcm9fZG91YmxlKCk6CisgICAgcnVuKCJuZWctemVyby1kb3VibGUiKQorCitkZWYgdGVzdF96ZXJvX2R1cmF0aW9uKCk6CisgICAgcnVuKCJ6ZXJvLWR1cmF0aW9uIikKKworZGVmIHRlc3RfdHJhdmVyc2FsX2VkZ2UoKToKKyAgICAjIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQgaW4gZ3JlbWxpbi1weXRob24KKyAgICBydW5fd3JpdGVyZWFkKCJ0cmF2ZXJzYWwtZWRnZSIpCisKK2RlZiB0ZXN0X25vX3Byb3BfZWRnZSgpOgorICAgICMgZ3JlbWxpbi1weXRob24gc2VyaWFsaXplcy9kZXNlcmlhbGl6ZXMgIm51bGwiIGZvciBwcm9wcyBub3QgZW1wdHkgbGlzdAorICAgIHJ1bl93cml0ZXJlYWQoIm5vLXByb3AtZWRnZSIpCisKK2RlZiB0ZXN0X21heF9pbnQoKToKKyAgICBydW4oIm1heC1pbnQiKQorCitkZWYgdGVzdF9taW5faW50KCk6CisgICAgcnVuKCJtaW4taW50IikKKworZGVmIHRlc3RfbWF4X2xvbmcoKToKKyAgICAjIGF0dGVtcHRzIHRvIHNlcmlhbGl6ZSBhIGxvbmcgYXMgYW4gaW50CisgICAgcnVuX3dyaXRlcmVhZCgibWF4LWxvbmciKQorCitkZWYgdGVzdF9taW5fbG9uZygpOgorICAgICMgYXR0ZW1wdHMgdG8gc2VyaWFsaXplIGEgbG9uZyBhcyBhbiBpbnQKKyAgICBydW5fd3JpdGVyZWFkKCJtaW4tbG9uZyIpCisKK2RlZiB0ZXN0X3Zhcl90eXBlX2xpc3QoKToKKyAgICBydW4oInZhci10eXBlLWxpc3QiKQorCitkZWYgdGVzdF9lbXB0eV9saXN0KCk6CisgICAgcnVuKCJlbXB0eS1saXN0IikKKworZGVmIHRlc3RfdmFyX3R5cGVfbWFwKCk6CisgICAgIyBjYW4ndCB3cml0ZSB0dXBsZQorICAgIHJ1bl9yZWFkKCJ2YXItdHlwZS1tYXAiKQorCitkZWYgdGVzdF9lbXB0eV9tYXAoKToKKyAgICBydW4oImVtcHR5LW1hcCIpCisKK2RlZiB0ZXN0X3RyYXZlcnNhbF9wYXRoKCk6CisgICAgIyBncmVtbGluLXB5dGhvbiBzZXJpYWxpemVzL2Rlc2VyaWFsaXplcyAibnVsbCIgZm9yIHByb3BzIG5vdCBlbXB0eSBsaXN0CisgICAgcnVuX3dyaXRlcmVhZCgidHJhdmVyc2FsLXBhdGgiKQorCitkZWYgdGVzdF9lbXB0eV9wYXRoKCk6CisgICAgcnVuKCJlbXB0eS1wYXRoIikKKworZGVmIHRlc3RfcHJvcF9wYXRoKCk6CisgICAgIyBncmVtbGluLXB5dGhvbiBkb2Vzbid0IHNlcmlhbGl6ZSBwcm9wZXJ0aWVzCisgICAgcnVuX3dyaXRlcmVhZCgicHJvcC1wYXRoIikKKworZGVmIHRlc3RfZWRnZV9wcm9wZXJ0eSgpOgorICAgIHJ1bigiZWRnZS1wcm9wZXJ0eSIpCisKK2RlZiB0ZXN0X251bGxfcHJvcGVydHkoKToKKyAgICBydW4oIm51bGwtcHJvcGVydHkiKQorCitkZWYgdGVzdF92YXJfdHlwZV9zZXQoKToKKyAgICAjIG9yZGVyaW5nIHdpdGhpbiBzZXQgbWlnaHQgYmUgZGlmZmVyZW50CisgICAgcnVuX3dyaXRlcmVhZCgidmFyLXR5cGUtc2V0IikKKworZGVmIHRlc3RfZW1wdHlfc2V0KCk6CisgICAgcnVuKCJlbXB0eS1zZXQiKQorCitkZWYgdGVzdF9tYXhfc2hvcnQoKToKKyAgICAjIHNob3J0IGRlc2VyaWFsaXplZCB0byBpbnQKKyAgICBydW5fd3JpdGVyZWFkKCJtYXgtc2hvcnQiKQorCitkZWYgdGVzdF9taW5fc2hvcnQoKToKKyAgICAjIHNob3J0IGRlc2VyaWFsaXplZCB0byBpbnQKKyAgICBydW5fd3JpdGVyZWFkKCJtaW4tc2hvcnQiKQorCitkZWYgdGVzdF9zcGVjaWZpZWRfdXVpZCgpOgorICAgIHJ1bigic3BlY2lmaWVkLXV1aWQiKQorCitkZWYgdGVzdF9uaWxfdXVpZCgpOgorICAgIHJ1bigibmlsLXV1aWQiKQorCitkZWYgdGVzdF9ub19wcm9wX3ZlcnRleCgpOgorICAgICMgZ3JlbWxpbi1weXRob24gc2VyaWFsaXplcy9kZXNlcmlhbGl6ZXMgIm51bGwiIGZvciBwcm9wcyBub3QgZW1wdHkgbGlzdAorICAgIHJ1bl93cml0ZXJlYWQoIm5vLXByb3AtdmVydGV4IikKKworZGVmIHRlc3RfdHJhdmVyc2FsX3ZlcnRleHByb3BlcnR5KCk6CisgICAgIyBwcm9wZXJ0aWVzIGFyZW4ndCBzZXJpYWxpemVkIGluIGdyZW1saW4tcHl0aG9uCisgICAgcnVuX3dyaXRlcmVhZCgidHJhdmVyc2FsLXZlcnRleHByb3BlcnR5IikKKworZGVmIHRlc3RfbWV0YV92ZXJ0ZXhwcm9wZXJ0eSgpOgorICAgICMgcHJvcGVydGllcyBhcmVuJ3Qgc2VyaWFsaXplZCBpbiBncmVtbGluLXB5dGhvbgorICAgIHJ1bl93cml0ZXJlYWQoIm1ldGEtdmVydGV4cHJvcGVydHkiKQorCitkZWYgdGVzdF9zZXRfY2FyZGluYWxpdHlfdmVydGV4cHJvcGVydHkoKToKKyAgICAjIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQgaW4gZ3JlbWxpbi1weXRob24KKyAgICBydW5fd3JpdGVyZWFkKCJzZXQtY2FyZGluYWxpdHktdmVydGV4cHJvcGVydHkiKQorCitkZWYgdGVzdF9pZF90KCk6CisgICAgcnVuKCJpZC10IikKKworZGVmIHRlc3Rfb3V0X2RpcmVjdGlvbigpOgorICAgIHJ1bigib3V0LWRpcmVjdGlvbiIpCisKK2RlZiB0ZXN0X3Zhcl9idWxrbGlzdCgpOgorICAgIHJ1bl9yZWFkKCJ2YXItYnVsa2xpc3QiKQorCitkZWYgdGVzdF92YXJfYnVsa2xpc3QoKToKKyAgICBydW5fcmVhZCgiZW1wdHktYnVsa2xpc3QiKQorCitkZWYgdGVzdF9zaW5nbGVfYnl0ZV9jaGFyKCk6CisgICAgIyBjaGFyIGlzIHNlcmlhbGl6ZWQgYXMgc3RyaW5nCisgICAgcnVuX3dyaXRlcmVhZCgic2luZ2xlLWJ5dGUtY2hhciIpCisKK2RlZiB0ZXN0X211bHRpX2J5dGVfY2hhcigpOgorICAgICMgY2hhciBpcyBzZXJpYWxpemVkIGFzIHN0cmluZworICAgIHJ1bl93cml0ZXJlYWQoIm11bHRpLWJ5dGUtY2hhciIpCisKK2RlZiB0ZXN0X3Vuc3BlY2lmaWVkX251bGwoKToKKyAgICAjIG5vIHNlcmlhbGl6ZXIgZm9yIHBsYWluIG51bGwKKyAgICBydW5fd3JpdGVyZWFkKCJ1bnNwZWNpZmllZC1udWxsIikKKworZGVmIHRlc3RfdHJ1ZV9ib29sZWFuKCk6CisgICAgcnVuKCJ0cnVlLWJvb2xlYW4iKQorCitkZWYgdGVzdF9mYWxzZV9ib29sZWFuKCk6CisgICAgcnVuKCJmYWxzZS1ib29sZWFuIikKKworZGVmIHRlc3Rfc2luZ2xlX2J5dGVfc3RyaW5nKCk6CisgICAgcnVuKCJzaW5nbGUtYnl0ZS1zdHJpbmciKQorCitkZWYgdGVzdF9taXhlZF9zdHJpbmcoKToKKyAgICBydW4oIm1peGVkLXN0cmluZyIpCisKK2RlZiBydW4ocmVzb3VyY2VfbmFtZSwgY29tcGFyYXRvciA9IE5vbmUpOgorICAgICIiIgorICAgIFJ1bnMgdGhlIHJlZ3VsYXIgc2V0IG9mIHRlc3RzIGZvciB0aGUgdHlwZSB3aGljaCBpcworICAgICAgICAxLiBtb2RlbCB0byBkZXNlcmlhbGl6ZWQgb2JqZWN0CisgICAgICAgIDIuIHdyaXR0ZW4gYnl0ZXMgdG8gcmVhZCBieXRlcworICAgICAgICAzLiByb3VuZCB0cmlwcGVkIChyZWFkIHRoZW4gd3JpdHRlbikgYnl0ZXMgdG8gcmVhZCBieXRlcworICAgIAorICAgIE9wdGlvbmFsbHkgdGFrZXMgaW4gYSBjb21wYXJhdG9yIHRoYXQgdXNlZCBmb3IgY29tcGFyaXNvbiAxLgorICAgICIiIgorICAgIHJlc291cmNlX2J5dGVzID0gcmVhZF9maWxlX2J5X25hbWUocmVzb3VyY2VfbmFtZSkKKworICAgIG1vZGVsID0gZ2V0X2VudHJ5KHJlc291cmNlX25hbWUpCisgICAgcmVhZCA9IHJlYWRlci5yZWFkX29iamVjdChyZXNvdXJjZV9ieXRlcykKKyAgICBpZiBjb21wYXJhdG9yIGlzIG5vdCBOb25lOgorICAgICAgICBhc3NlcnQgY29tcGFyYXRvcihtb2RlbCwgcmVhZCkKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgbW9kZWwgPT0gcmVhZAorCisgICAgd3JpdHRlbiA9IHdyaXRlci53cml0ZV9vYmplY3QobW9kZWwpCisgICAgYXNzZXJ0IHJlc291cmNlX2J5dGVzID09IHdyaXR0ZW4KKworICAgIHJvdW5kX3RyaXBwZWQgPSB3cml0ZXIud3JpdGVfb2JqZWN0KHJlYWRlci5yZWFkX29iamVjdChyZXNvdXJjZV9ieXRlcykpCisgICAgYXNzZXJ0IHJlc291cmNlX2J5dGVzID09IHJvdW5kX3RyaXBwZWQKKworZGVmIHJ1bl9yZWFkKHJlc291cmNlX25hbWUpOgorICAgICIiIgorICAgIFJ1bnMgdGhlIHJlYWQgdGVzdCB3aGljaCBjb21wYXJlcyB0aGUgbW9kZWwgdG8gZGVzZXJpYWxpemVkIG9iamVjdAorCisgICAgVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG9ubHkgYSBkZXNlcmlhbGl6ZXIKKyAgICBidXQgbm8gc2VyaWFsaXplciBmb3IgdGhlIHNhbWUgdHlwZS4KKyAgICAiIiIKKyAgICByZXNvdXJjZV9ieXRlcyA9IHJlYWRfZmlsZV9ieV9uYW1lKHJlc291cmNlX25hbWUpCisKKyAgICBtb2RlbCA9IGdldF9lbnRyeShyZXNvdXJjZV9uYW1lKQorICAgIHJlYWQgPSByZWFkZXIucmVhZF9vYmplY3QocmVzb3VyY2VfYnl0ZXMpCisgICAgYXNzZXJ0IG1vZGVsID09IHJlYWQKKworZGVmIHJ1bl93cml0ZXJlYWQocmVzb3VyY2VfbmFtZSwgY29tcGFyYXRvciA9IE5vbmUpOgorICAgICIiIgorICAgIFJ1bnMgYSByZWR1Y2VkIHNldCBvZiB0ZXN0cyBmb3IgdGhlIHR5cGUgd2hpY2ggaXMKKyAgICAgICAgMS4gbW9kZWwgdG8gZGVzZXJpYWxpemVkIG9iamVjdAorICAgICAgICAyLiBtb2RlbCB0byByb3VuZCB0cmlwcGVkICh3cml0dGVuIHRoZW4gcmVhZCkgb2JqZWN0CisgICAgCisgICAgT3B0aW9uYWxseSB0YWtlcyBpbiBhIGNvbXBhcmF0b3IgdGhhdCB1c2VkIGZvciBjb21wYXJpc29uIDEuCisKKyAgICBVc2UgdGhpcyBpbiBjYXNlcyB3aGVyZSB0aGUgcmVndWxhciBydW4oKSBmdW5jdGlvbiBpbiB0b28gc3RyaW5nZW50LgorICAgIEUuZy4gd2hlbiBvcmRlcmluZyBkb2Vzbid0IG1hdHRlciBsaWtlIGZvciBzZXRzLiBJZGVhbGx5LCBhIHR5cGUKKyAgICBzaG91bGQgYmUgdGVzdGVkIHdpdGggcnVuKCkgaW5zdGVhZCB3aGVuIHBvc3NpYmxlLgorICAgICIiIgorICAgIHJlc291cmNlX2J5dGVzID0gcmVhZF9maWxlX2J5X25hbWUocmVzb3VyY2VfbmFtZSkKKworICAgIG1vZGVsID0gZ2V0X2VudHJ5KHJlc291cmNlX25hbWUpCisgICAgcmVhZCA9IHJlYWRlci5yZWFkX29iamVjdChyZXNvdXJjZV9ieXRlcykKKyAgICByb3VuZF90cmlwcGVkID0gcmVhZGVyLnJlYWRfb2JqZWN0KHdyaXRlci53cml0ZV9vYmplY3QobW9kZWwpKQorCisgICAgaWYgY29tcGFyYXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgYXNzZXJ0IGNvbXBhcmF0b3IobW9kZWwsIHJlYWQpCisgICAgICAgIGFzc2VydCBjb21wYXJhdG9yKG1vZGVsLCByb3VuZF90cmlwcGVkKQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBtb2RlbCA9PSByZWFkCisgICAgICAgIGFzc2VydCBtb2RlbCA9PSByb3VuZF90cmlwcGVkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL2lvL3Rlc3RfZ3JhcGhzb25WNC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoc29uVjQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1MTAxNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoc29uVjQucHkKQEAgLTAsMCArMSw1NjcgQEAKKyMKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworX19hdXRob3JfXyA9ICdNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pJworCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0IGpzb24KK2ltcG9ydCB1dWlkCitpbXBvcnQgbWF0aAorZnJvbSBkZWNpbWFsIGltcG9ydCAqCisKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0YXRpY3MgaW1wb3J0ICoKK2Zyb20gZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmdyYXBoIGltcG9ydCBWZXJ0ZXgsIEVkZ2UsIFByb3BlcnR5LCBWZXJ0ZXhQcm9wZXJ0eSwgUGF0aAorZnJvbSBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WNCBpbXBvcnQgR3JhcGhTT05Xcml0ZXIsIEdyYXBoU09OUmVhZGVyLCBHcmFwaFNPTlV0aWwKK2ltcG9ydCBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WNAorZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLnRyYXZlcnNhbCBpbXBvcnQgUCwgTWVyZ2UsIEJhcnJpZXIsIE9yZGVyLCBPcGVyYXRvciwgRGlyZWN0aW9uCitmcm9tIGdyZW1saW5fcHl0aG9uLnByb2Nlc3Muc3RyYXRlZ2llcyBpbXBvcnQgU3ViZ3JhcGhTdHJhdGVneQorZnJvbSBncmVtbGluX3B5dGhvbi5wcm9jZXNzLmdyYXBoX3RyYXZlcnNhbCBpbXBvcnQgX18KKworCitjbGFzcyBUZXN0R3JhcGhTT05SZWFkZXI6CisgICAgZ3JhcGhzb25fcmVhZGVyID0gR3JhcGhTT05SZWFkZXIoKQorCisgICAgZGVmIHRlc3RfY29sbGVjdGlvbnMoc2VsZik6CisgICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKKyAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOkxpc3QiLCAiQHZhbHVlIjogW3siQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIl19KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbGlzdCkKKyAgICAgICAgYXNzZXJ0IHhbMF0gPT0gMQorICAgICAgICBhc3NlcnQgeFsxXSA9PSAyCisgICAgICAgIGFzc2VydCB4WzJdID09ICIzIgorICAgICAgICAjIworCisgICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKKyAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIl19KSkKKyAgICAgICAgIyByZXR1cm4gYSBzZXQgYXMgbm9ybWFsCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIHNldCkKKyAgICAgICAgYXNzZXJ0IHggPT0gezEsIDIsICIzIn0KKworICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCisgICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogW3siQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkZsb2F0IiwgIkB2YWx1ZSI6IDIuMH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiXX0pKQorICAgICAgICAjIGNvZXJjZSB0byBsaXN0IGhlcmUgYmVjYXVzZSBKYXZhIG1pZ2h0IHJldHVybiBudW1lcmljcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hpY2ggcHl0aG9uIHdvbid0IHJlY29nbml6ZQorICAgICAgICAjIHNlZSBjb21tZW50cyBvZiBUSU5LRVJQT1AtMTg0NCBmb3IgbW9yZSBkZXRhaWxzCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCisgICAgICAgIGFzc2VydCB4ID09IGxpc3QoWzEsIDIsIDIuMCwgIjMiXSkKKyAgICAgICAgIyMKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAorICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6TWFwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiOiBbJ2EnLCB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMX0sICdiJywgIm1hcmtvIl19KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgZGljdCkKKyAgICAgICAgYXNzZXJ0IHhbJ2EnXSA9PSAxCisgICAgICAgIGFzc2VydCB4WydiJ10gPT0gIm1hcmtvIgorICAgICAgICBhc3NlcnQgbGVuKHgpID09IDIKKworICAgIGRlZiB0ZXN0X3NldF93aXRoX3VuaGFzaGFibGVfZGljdF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgc2V0cyBjb250YWluaW5nIGRpY3RzIGFyZSBjb2VyY2VkIHRvIGxpc3QgLSBzZWUgVElOS0VSUE9QLTMyMzIKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAorICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6U2V0IiwgIkB2YWx1ZSI6IFsKKyAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6TWFwIiwgIkB2YWx1ZSI6IFsibmFtZSIsICJtYXJrbyIsICJhZ2UiLCB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMjl9XX0sCisgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOk1hcCIsICJAdmFsdWUiOiBbIm5hbWUiLCAiam9zaCIsICJhZ2UiLCB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMzJ9XX0KKyAgICAgICAgICAgIF19KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbGlzdCkKKyAgICAgICAgYXNzZXJ0IGxlbih4KSA9PSAyCisKKyAgICBkZWYgdGVzdF9zZXRfd2l0aF91bmhhc2hhYmxlX2xpc3RfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IHNldHMgY29udGFpbmluZyBsaXN0cyBhcmUgY29lcmNlZCB0byBsaXN0IC0gc2VlIFRJTktFUlBPUC0zMjMyCisgICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKKyAgICAgICAgICAgIGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbCisgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkxpc3QiLCAiQHZhbHVlIjogWyJtYXJrbyIsICJqb3NoIl19LAorICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpMaXN0IiwgIkB2YWx1ZSI6IFsidmFkYXMiLCAicGV0ZXIiXX0KKyAgICAgICAgICAgIF19KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgbGlzdCkKKyAgICAgICAgYXNzZXJ0IGxlbih4KSA9PSAyCisKKyAgICBkZWYgdGVzdF9zZXRfd2l0aF91bmhhc2hhYmxlX3NldF9lbGVtZW50cyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgc2V0cyBjb250YWluaW5nIHNldHMgYXJlIGNvZXJjZWQgdG8gbGlzdCAtIHNlZSBUSU5LRVJQT1AtMzIzMgorICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCisgICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogWworICAgICAgICAgICAgICAgIHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogWyJhIiwgImIiXX0sCisgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbImMiLCAiZCJdfQorICAgICAgICAgICAgXX0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsaXN0KQorICAgICAgICBhc3NlcnQgbGVuKHgpID09IDIKKworICAgIGRlZiB0ZXN0X3NldF93aXRoX21peGVkX2hhc2hhYmxlX2FuZF91bmhhc2hhYmxlX2VsZW1lbnRzKHNlbGYpOgorICAgICAgICAjIHRlc3QgdGhhdCBzZXRzIGNvbnRhaW5pbmcgYSBtaXggb2YgaGFzaGFibGUgYW5kIHVuaGFzaGFibGUgZWxlbWVudHMgYXJlIGNvZXJjZWQgdG8gbGlzdCAtIHNlZSBUSU5LRVJQT1AtMzIzMgorICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCisgICAgICAgICAgICBqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpTZXQiLCAiQHZhbHVlIjogWworICAgICAgICAgICAgICAgICJtYXJrbyIsCisgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOk1hcCIsICJAdmFsdWUiOiBbIm5hbWUiLCAiam9zaCJdfSwKKyAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogNDJ9CisgICAgICAgICAgICBdfSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxpc3QpCisgICAgICAgIGFzc2VydCBsZW4oeCkgPT0gMworCisgICAgZGVmIHRlc3Rfc2V0X3dpdGhfbmVzdGVkX3VuaGFzaGFibGVfZWxlbWVudHMoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IHNldHMgY29udGFpbmluZyBkaWN0cyB3aXRoIGxpc3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIGxpc3QgLSBzZWUgVElOS0VSUE9QLTMyMzIKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAorICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6U2V0IiwgIkB2YWx1ZSI6IFsKKyAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6TWFwIiwgIkB2YWx1ZSI6IFsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiLCAibWFya28iLAorICAgICAgICAgICAgICAgICAgICAibGFuZ3MiLCB7IkB0eXBlIjogImc6TGlzdCIsICJAdmFsdWUiOiBbImphdmEiLCAicHl0aG9uIl19CisgICAgICAgICAgICAgICAgXX0sCisgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOk1hcCIsICJAdmFsdWUiOiBbCisgICAgICAgICAgICAgICAgICAgICJuYW1lIiwgImpvc2giLAorICAgICAgICAgICAgICAgICAgICAibGFuZ3MiLCB7IkB0eXBlIjogImc6TGlzdCIsICJAdmFsdWUiOiBbImdyZW1saW4iXX0KKyAgICAgICAgICAgICAgICBdfQorICAgICAgICAgICAgXX0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsaXN0KQorICAgICAgICBhc3NlcnQgbGVuKHgpID09IDIKKworICAgIGRlZiB0ZXN0X251bWJlcl9pbnB1dChzZWxmKToKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeworICAgICAgICAgICAgIkB0eXBlIjogImc6Qnl0ZSIsCisgICAgICAgICAgICAiQHZhbHVlIjogMQorICAgICAgICB9KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgU2luZ2xlQnl0ZSkKKyAgICAgICAgYXNzZXJ0IDEgPT0geAorICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQxNiIsCisgICAgICAgICAgICAiQHZhbHVlIjogMTYKKyAgICAgICAgfSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIHNob3J0KQorICAgICAgICBhc3NlcnQgMTYgPT0geAorICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIjogMzEKKyAgICAgICAgfSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGludCkKKyAgICAgICAgYXNzZXJ0IDMxID09IHgKKyAgICAgICAgIyMKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeworICAgICAgICAgICAgIkB0eXBlIjogImc6SW50NjQiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDMxCisgICAgICAgIH0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsb25nKQorICAgICAgICBhc3NlcnQgbG9uZygzMSkgPT0geAorICAgICAgICAjIworICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpGbG9hdCIsCisgICAgICAgICAgICAiQHZhbHVlIjogMzEuMworICAgICAgICB9KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgZmxvYXQpCisgICAgICAgIGFzc2VydCAzMS4zID09IHgKKyAgICAgICAgIyMKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeworICAgICAgICAgICAgIkB0eXBlIjogImc6RG91YmxlIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAzMS4yCisgICAgICAgIH0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBmbG9hdCkKKyAgICAgICAgYXNzZXJ0IDMxLjIgPT0geAorICAgICAgICAjIworICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpEb3VibGUiLAorICAgICAgICAgICAgIkB2YWx1ZSI6ICJOYU4iCisgICAgICAgIH0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBmbG9hdCkKKyAgICAgICAgYXNzZXJ0IG1hdGguaXNuYW4oeCkKKyAgICAgICAgIyMKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeworICAgICAgICAgICAgIkB0eXBlIjogImc6RG91YmxlIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAiSW5maW5pdHkiCisgICAgICAgIH0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBmbG9hdCkKKyAgICAgICAgYXNzZXJ0IG1hdGguaXNpbmYoeCkgYW5kIHggPiAwCisgICAgICAgICMjCisgICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkRvdWJsZSIsCisgICAgICAgICAgICAiQHZhbHVlIjogIi1JbmZpbml0eSIKKyAgICAgICAgfSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGZsb2F0KQorICAgICAgICBhc3NlcnQgbWF0aC5pc2luZih4KSBhbmQgeCA8IDAKKyAgICAgICAgIyMKKyAgICAgICAgeCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeworICAgICAgICAgICAgIkB0eXBlIjogImc6QmlnRGVjaW1hbCIsCisgICAgICAgICAgICAiQHZhbHVlIjogMzEuMgorICAgICAgICB9KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgQmlnRGVjaW1hbCkKKyAgICAgICAgYXNzZXJ0IERlY2ltYWwoJzMxLjInKSA9PSB4LnZhbHVlCisgICAgICAgICMjCisgICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkJpZ0RlY2ltYWwiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMQorICAgICAgICB9KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoeCwgQmlnRGVjaW1hbCkKKyAgICAgICAgYXNzZXJ0IGJpZ2RlY2ltYWwoMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxKS52YWx1ZSA9PSB4LnZhbHVlCisgICAgICAgICMjCisgICAgICAgIHggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsKKyAgICAgICAgICAgICJAdHlwZSI6ICJnOkJpZ0ludGVnZXIiLAorICAgICAgICAgICAgIkB2YWx1ZSI6IDMxCisgICAgICAgIH0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh4LCBsb25nKQorICAgICAgICBhc3NlcnQgMzEgPT0geAorICAgICAgICAjIworICAgICAgICB4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7CisgICAgICAgICAgICAiQHR5cGUiOiAiZzpCaWdJbnRlZ2VyIiwKKyAgICAgICAgICAgICJAdmFsdWUiOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKKyAgICAgICAgfSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHgsIGxvbmcpCisgICAgICAgIGFzc2VydCAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEgPT0geAorCisgICAgZGVmIHRlc3RfZ3JhcGgoc2VsZik6CisgICAgICAgIHZlcnRleCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgorICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjpbInBlcnNvbiJdLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjB9LCJ2YWx1ZSI6Im1hcmtvIiwibGFiZWwiOlsibmFtZSJdfX1dLCJhZ2UiOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjF9LCJ2YWx1ZSI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjI5fSwibGFiZWwiOlsiYWdlIl19fV19fX0iIiIpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleCwgVmVydGV4KQorICAgICAgICBhc3NlcnQgInBlcnNvbiIgPT0gdmVydGV4LmxhYmVsCisgICAgICAgIGFzc2VydCAxID09IHZlcnRleC5pZAorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2ZXJ0ZXguaWQsIGludCkKKyAgICAgICAgYXNzZXJ0IHZlcnRleCA9PSBWZXJ0ZXgoMSkKKyAgICAgICAgYXNzZXJ0IDIgPT0gbGVuKHZlcnRleC5wcm9wZXJ0aWVzKQorICAgICAgICAjIGFzc2VydCBhY3R1YWwgcHJvcGVydHkgdmFsdWVzIC0gVmVydGV4LnByb3BlcnRpZXMgc2hvdWxkIGJlIFZlcnRleFByb3BlcnR5IG9iamVjdHMKKyAgICAgICAgYXNzZXJ0IGFueSh2cC5sYWJlbCA9PSAnbmFtZScgYW5kIHZwLnZhbHVlID09ICdtYXJrbycgZm9yIHZwIGluIHZlcnRleC5wcm9wZXJ0aWVzKQorICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICdhZ2UnIGFuZCB2cC52YWx1ZSA9PSAyOSBmb3IgdnAgaW4gdmVydGV4LnByb3BlcnRpZXMpCisgICAgICAgICMjCisgICAgICAgIHZlcnRleCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgorICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpGbG9hdCIsIkB2YWx1ZSI6NDUuMjN9fX0iIiIpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleCwgVmVydGV4KQorICAgICAgICBhc3NlcnQgNDUuMjMgPT0gdmVydGV4LmlkCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleC5pZCwgRmxvYXRUeXBlKQorICAgICAgICBhc3NlcnQgInZlcnRleCIgPT0gdmVydGV4LmxhYmVsCisgICAgICAgIGFzc2VydCB2ZXJ0ZXggPT0gVmVydGV4KDQ1LjIzKQorICAgICAgICAjIHByb3BlcnRpZXMga2V5IG9taXR0ZWQgc2hvdWxkIHlpZWxkIGVtcHR5IGxpc3QKKyAgICAgICAgYXNzZXJ0IHZlcnRleC5wcm9wZXJ0aWVzID09IFtdCisgICAgICAgICMjCisgICAgICAgICMgdmVydGV4IHdpdGggZXhwbGljaXQgbGFiZWwgYW5kIHdpdGhvdXQgcHJvcGVydGllcworICAgICAgICB2ZXJ0ZXggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKKyAgICAgICAgICAgICIiIgorICAgICAgICB7IkB0eXBlIjoiZzpWZXJ0ZXgiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mn0sImxhYmVsIjpbInBlcnNvbiJdfX0KKyAgICAgICAgICAgICIiIikKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4LCBWZXJ0ZXgpCisgICAgICAgIGFzc2VydCB2ZXJ0ZXgubGFiZWwgPT0gJ3BlcnNvbicKKyAgICAgICAgYXNzZXJ0IHZlcnRleC5pZCA9PSAyCisgICAgICAgIGFzc2VydCB2ZXJ0ZXgucHJvcGVydGllcyA9PSBbXQorICAgICAgICAjIworICAgICAgICB2ZXJ0ZXhfcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgiIiIKKyAgICAgICAgeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCAiQHZhbHVlIjp7ImlkIjoiYW5JZCIsImxhYmVsIjpbImFLZXkiXSwidmFsdWUiOnRydWUsInZlcnRleCI6eyJAdHlwZSI6Imc6SW50MzIiLCJAdmFsdWUiOjl9fX0iIiIpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZlcnRleF9wcm9wZXJ0eSwgVmVydGV4UHJvcGVydHkpCisgICAgICAgIGFzc2VydCAiYW5JZCIgPT0gdmVydGV4X3Byb3BlcnR5LmlkCisgICAgICAgIGFzc2VydCAiYUtleSIgPT0gdmVydGV4X3Byb3BlcnR5LmxhYmVsCisgICAgICAgIGFzc2VydCB2ZXJ0ZXhfcHJvcGVydHkudmFsdWUKKyAgICAgICAgYXNzZXJ0IHZlcnRleF9wcm9wZXJ0eS52ZXJ0ZXggPT0gVmVydGV4KDkpCisgICAgICAgICMgbm8gcHJvcGVydGllcyBrZXkgc2hvdWxkIHlpZWxkIGVtcHR5IGxpc3Qgb2YgbWV0YS1wcm9wZXJ0aWVzCisgICAgICAgIGFzc2VydCB2ZXJ0ZXhfcHJvcGVydHkucHJvcGVydGllcyA9PSBbXQorICAgICAgICAjIworICAgICAgICB2ZXJ0ZXhfcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgiIiIKKyAgICAgICAgeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MX0sImxhYmVsIjpbIm5hbWUiXSwidmFsdWUiOiJtYXJrbyJ9fSIiIikKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodmVydGV4X3Byb3BlcnR5LCBWZXJ0ZXhQcm9wZXJ0eSkKKyAgICAgICAgYXNzZXJ0IDEgPT0gdmVydGV4X3Byb3BlcnR5LmlkCisgICAgICAgIGFzc2VydCAibmFtZSIgPT0gdmVydGV4X3Byb3BlcnR5LmxhYmVsCisgICAgICAgIGFzc2VydCAibWFya28iID09IHZlcnRleF9wcm9wZXJ0eS52YWx1ZQorICAgICAgICBhc3NlcnQgdmVydGV4X3Byb3BlcnR5LnZlcnRleCBpcyBOb25lCisgICAgICAgICMgbm8gcHJvcGVydGllcyBrZXkgc2hvdWxkIHlpZWxkIGVtcHR5IGxpc3Qgb2YgbWV0YS1wcm9wZXJ0aWVzCisgICAgICAgIGFzc2VydCB2ZXJ0ZXhfcHJvcGVydHkucHJvcGVydGllcyA9PSBbXQorICAgICAgICAjIworICAgICAgICBlZGdlID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoIiIiCisgICAgICAgIHsiQHR5cGUiOiJnOkVkZ2UiLCAiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTd9LCJsYWJlbCI6WyJrbm93cyJdLCJpblYiOnsiaWQiOiJ4IiwibGFiZWwiOlsieExhYmVsIl19LCJvdXRWIjp7ImlkIjoieSIsImxhYmVsIjpbInZlcnRleCJdfSwicHJvcGVydGllcyI6eyJhS2V5IjpbeyJAdHlwZSI6Imc6UHJvcGVydHkiLCJAdmFsdWUiOnsia2V5IjoiYUtleSIsInZhbHVlIjoiYVZhbHVlIn19XSwiYktleSI6W3siQHR5cGUiOiJnOlByb3BlcnR5IiwiQHZhbHVlIjp7ImtleSI6ImJLZXkiLCJ2YWx1ZSI6dHJ1ZX19XX19fSIiIikKKyAgICAgICAgIyBwcmludCBlZGdlCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVkZ2UsIEVkZ2UpCisgICAgICAgIGFzc2VydCAxNyA9PSBlZGdlLmlkCisgICAgICAgIGFzc2VydCAia25vd3MiID09IGVkZ2UubGFiZWwKKyAgICAgICAgYXNzZXJ0IGVkZ2UuaW5WID09IFZlcnRleCgieCIsICJ4TGFiZWwiKQorICAgICAgICBhc3NlcnQgZWRnZS5vdXRWID09IFZlcnRleCgieSIsICJ2ZXJ0ZXgiKQorICAgICAgICAjIworICAgICAgICAjIGVkZ2Ugd2l0aG91dCBwcm9wZXJ0aWVzIHNob3VsZCB5aWVsZCBlbXB0eSBwcm9wZXJ0aWVzIGxpc3QKKyAgICAgICAgZWRnZTIgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgiIiIKKyAgICAgICAgeyJAdHlwZSI6Imc6RWRnZSIsICJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjoxOH0sImxhYmVsIjpbImtub3dzIl0sImluViI6eyJpZCI6IngiLCJsYWJlbCI6WyJ4TGFiZWwiXX0sIm91dFYiOnsiaWQiOiJ5IiwibGFiZWwiOlsidmVydGV4Il19fX0iIiIpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGVkZ2UyLCBFZGdlKQorICAgICAgICBhc3NlcnQgZWRnZTIucHJvcGVydGllcyA9PSBbXQorICAgICAgICAjIworICAgICAgICBwcm9wZXJ0eSA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KCIiIgorICAgICAgICB7IkB0eXBlIjoiZzpQcm9wZXJ0eSIsICJAdmFsdWUiOnsia2V5IjoiYUtleSIsInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MTd9fX0iIiIpCisgICAgICAgICMgcHJpbnQgcHJvcGVydHkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocHJvcGVydHksIFByb3BlcnR5KQorICAgICAgICBhc3NlcnQgImFLZXkiID09IHByb3BlcnR5LmtleQorICAgICAgICBhc3NlcnQgMTcgPT0gcHJvcGVydHkudmFsdWUKKworICAgIGRlZiB0ZXN0X3BhdGgoc2VsZik6CisgICAgICAgIHBhdGggPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKKyAgICAgICAgICAgICIiInsiQHR5cGUiOiJnOlBhdGgiLCJAdmFsdWUiOnsibGFiZWxzIjp7IkB0eXBlIjoiZzpMaXN0IiwiQHZhbHVlIjpbeyJAdHlwZSI6Imc6U2V0IiwiQHZhbHVlIjpbImEiXX0seyJAdHlwZSI6Imc6U2V0IiwiQHZhbHVlIjpbImIiLCJjIl19LHsiQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6W119XX0sIm9iamVjdHMiOnsiQHR5cGUiOiJnOkxpc3QiLCJAdmFsdWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOlsicGVyc29uIl0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MH0sInZhbHVlIjoibWFya28iLCJsYWJlbCI6WyJuYW1lIl19fV0sImFnZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MX0sInZhbHVlIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mjl9LCJsYWJlbCI6WyJhZ2UiXX19XX19fSx7IkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjozfSwibGFiZWwiOlsic29mdHdhcmUiXSwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJAdHlwZSI6Imc6VmVydGV4UHJvcGVydHkiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo0fSwidmFsdWUiOiJsb3AiLCJsYWJlbCI6WyJuYW1lIl19fV0sImxhbmciOlt7IkB0eXBlIjoiZzpWZXJ0ZXhQcm9wZXJ0eSIsIkB2YWx1ZSI6eyJpZCI6eyJAdHlwZSI6Imc6SW50NjQiLCJAdmFsdWUiOjV9LCJ2YWx1ZSI6ImphdmEiLCJsYWJlbCI6WyJsYW5nIl19fV19fX0sImxvcCJdfX19IiIiCisgICAgICAgICkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGF0aCwgUGF0aCkKKyAgICAgICAgYXNzZXJ0ICJwYXRoW3ZbMV0sIHZbM10sIGxvcF0iID09IHN0cihwYXRoKQorICAgICAgICBhc3NlcnQgVmVydGV4KDEpID09IHBhdGhbMF0KKyAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBwYXRoWyJhIl0KKyAgICAgICAgYXNzZXJ0ICJsb3AiID09IHBhdGhbMl0KKyAgICAgICAgYXNzZXJ0IDMgPT0gbGVuKHBhdGgpCisgICAgICAgICMgZW5zdXJlIGVsZW1lbnQgcHJvcGVydGllcyB3ZXJlIHBvcHVsYXRlZCBmcm9tIEdyYXBoU09OCisgICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ25hbWUnIGFuZCB2cC52YWx1ZSA9PSAnbWFya28nIGZvciB2cCBpbiBwYXRoWzBdLnByb3BlcnRpZXMpCisgICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ2FnZScgYW5kIHZwLnZhbHVlID09IDI5IGZvciB2cCBpbiBwYXRoWzBdLnByb3BlcnRpZXMpCisgICAgICAgIGFzc2VydCBhbnkodnAubGFiZWwgPT0gJ25hbWUnIGFuZCB2cC52YWx1ZSA9PSAnbG9wJyBmb3IgdnAgaW4gcGF0aFsxXS5wcm9wZXJ0aWVzKQorICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICdsYW5nJyBhbmQgdnAudmFsdWUgPT0gJ2phdmEnIGZvciB2cCBpbiBwYXRoWzFdLnByb3BlcnRpZXMpCisKKyAgICAgICAgIyBwYXRoIHdpdGggZWxlbWVudHMgdGhhdCBleGNsdWRlIHByb3BlcnRpZXMgKG5vICJwcm9wZXJ0aWVzIiBrZXkpCisgICAgICAgIHBhdGgyID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCisgICAgICAgICAgICAiIiJ7IkB0eXBlIjoiZzpQYXRoIiwiQHZhbHVlIjp7ImxhYmVscyI6eyJAdHlwZSI6Imc6TGlzdCIsIkB2YWx1ZSI6W3siQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJ4Il19LHsiQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJ5Il19LHsiQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJ6Il19XX0sIm9iamVjdHMiOnsiQHR5cGUiOiJnOkxpc3QiLCJAdmFsdWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMX0sImxhYmVsIjpbInBlcnNvbiJdfX0sIHsiQHR5cGUiOiJnOkVkZ2UiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDY0IiwiQHZhbHVlIjo3N30sImxhYmVsIjpbImtub3dzIl0sIm91dFYiOiB7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6MTF9LCJsYWJlbCI6WyJwZXJzb24iXX0sImluViI6IHsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxMn0sImxhYmVsIjpbInBlcnNvbiJdfX19LCJoZWxsbyJdfX19IiIiCisgICAgICAgICkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGF0aDIsIFBhdGgpCisgICAgICAgIGFzc2VydCAzID09IGxlbihwYXRoMikKKyAgICAgICAgYXNzZXJ0IFZlcnRleCgxMSwgJ3BlcnNvbicpID09IHBhdGgyWzBdCisgICAgICAgIGFzc2VydCBwYXRoMlswXS5wcm9wZXJ0aWVzID09IFtdCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhdGgyWzFdLCBFZGdlKQorICAgICAgICBhc3NlcnQgcGF0aDJbMV0ucHJvcGVydGllcyA9PSBbXQorICAgICAgICBhc3NlcnQgcGF0aDJbMl0gPT0gImhlbGxvIgorCisgICAgICAgICMgbWl4ZWQgcGF0aDogZmlyc3QgdmVydGV4IHdpdGggcHJvcGVydGllcywgc2Vjb25kIHZlcnRleCB3aXRob3V0CisgICAgICAgIHBhdGgzID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCisgICAgICAgICAgICAiIiJ7IkB0eXBlIjoiZzpQYXRoIiwiQHZhbHVlIjp7ImxhYmVscyI6eyJAdHlwZSI6Imc6TGlzdCIsIkB2YWx1ZSI6W3siQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJhIl19LHsiQHR5cGUiOiJnOlNldCIsIkB2YWx1ZSI6WyJiIl19XX0sIm9iamVjdHMiOnsiQHR5cGUiOiJnOkxpc3QiLCJAdmFsdWUiOlt7IkB0eXBlIjoiZzpWZXJ0ZXgiLCJAdmFsdWUiOnsiaWQiOnsiQHR5cGUiOiJnOkludDMyIiwiQHZhbHVlIjoxfSwibGFiZWwiOlsicGVyc29uIl0sInByb3BlcnRpZXMiOnsibmFtZSI6W3siQHR5cGUiOiJnOlZlcnRleFByb3BlcnR5IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQ2NCIsIkB2YWx1ZSI6MH0sInZhbHVlIjoibWFya28iLCJsYWJlbCI6WyJuYW1lIl19fV19fX0seyJAdHlwZSI6Imc6VmVydGV4IiwiQHZhbHVlIjp7ImlkIjp7IkB0eXBlIjoiZzpJbnQzMiIsIkB2YWx1ZSI6Mn0sImxhYmVsIjpbInBlcnNvbiJdfX1dfX19IiIiCisgICAgICAgICkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocGF0aDMsIFBhdGgpCisgICAgICAgIGFzc2VydCAyID09IGxlbihwYXRoMykKKyAgICAgICAgYXNzZXJ0IFZlcnRleCgxKSA9PSBwYXRoM1swXQorICAgICAgICBhc3NlcnQgYW55KHZwLmxhYmVsID09ICduYW1lJyBhbmQgdnAudmFsdWUgPT0gJ21hcmtvJyBmb3IgdnAgaW4gcGF0aDNbMF0ucHJvcGVydGllcykKKyAgICAgICAgYXNzZXJ0IFZlcnRleCgyKSA9PSBwYXRoM1sxXQorICAgICAgICBhc3NlcnQgcGF0aDNbMV0ucHJvcGVydGllcyA9PSBbXQorCisgICAgZGVmIHRlc3RfY3VzdG9tX21hcHBpbmcoc2VsZik6CisKKyAgICAgICAgIyBleHRlbmRlZCBtYXBwaW5nCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHlwZV9zdHJpbmcgPSAidGVzdDpYdHlwZSIKKyAgICAgICAgb3ZlcnJpZGVfc3RyaW5nID0gImc6SW50NjQiCisgICAgICAgIHNlcmRlcyA9IE1vY2soKQorCisgICAgICAgIHJlYWRlciA9IEdyYXBoU09OUmVhZGVyKGRlc2VyaWFsaXplcl9tYXA9e3R5cGVfc3RyaW5nOiBzZXJkZXN9KQorICAgICAgICBhc3NlcnQgdHlwZV9zdHJpbmcgaW4gcmVhZGVyLmRlc2VyaWFsaXplcnMKKworICAgICAgICAjIGJhc2UgZGljdHMgYXJlIG5vdCBtb2RpZmllZAorICAgICAgICBhc3NlcnQgdHlwZV9zdHJpbmcgbm90IGluIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaHNvblY0Ll9kZXNlcmlhbGl6ZXJzCisKKyAgICAgICAgeCA9IFgoKQorICAgICAgICBvID0gcmVhZGVyLnRvX29iamVjdCh7R3JhcGhTT05VdGlsLlRZUEVfS0VZOiB0eXBlX3N0cmluZywgR3JhcGhTT05VdGlsLlZBTFVFX0tFWTogeH0pCisgICAgICAgIHNlcmRlcy5vYmplY3RpZnkuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoeCwgcmVhZGVyKQorICAgICAgICBhc3NlcnQgbyBpcyBzZXJkZXMub2JqZWN0aWZ5KCkKKworICAgICAgICAjIG92ZXJyaWRkZW4gbWFwcGluZworICAgICAgICB0eXBlX3N0cmluZyA9ICJnOkludDY0IgorICAgICAgICBzZXJkZXMgPSBNb2NrKCkKKyAgICAgICAgcmVhZGVyID0gR3JhcGhTT05SZWFkZXIoZGVzZXJpYWxpemVyX21hcD17dHlwZV9zdHJpbmc6IHNlcmRlcywgb3ZlcnJpZGVfc3RyaW5nOiBzZXJkZXN9KQorICAgICAgICBhc3NlcnQgZ3JlbWxpbl9weXRob24uc3RydWN0dXJlLmlvLmdyYXBoc29uVjQuX2Rlc2VyaWFsaXplcnNbdHlwZV9zdHJpbmddIGlzIG5vdCByZWFkZXIuZGVzZXJpYWxpemVyc1sKKyAgICAgICAgICAgIHR5cGVfc3RyaW5nXQorCisgICAgICAgIHZhbHVlID0gMworICAgICAgICBvID0gcmVhZGVyLnRvX29iamVjdCh7R3JhcGhTT05VdGlsLlRZUEVfS0VZOiB0eXBlX3N0cmluZywgR3JhcGhTT05VdGlsLlZBTFVFX0tFWTogdmFsdWV9KQorICAgICAgICBzZXJkZXMub2JqZWN0aWZ5LmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHZhbHVlLCByZWFkZXIpCisgICAgICAgIGFzc2VydCBvIGlzIHNlcmRlcy5vYmplY3RpZnkoKQorCisgICAgZGVmIHRlc3RfZGF0ZXRpbWUoc2VsZik6CisgICAgICAgIHR6ID0gZGF0ZXRpbWUudGltZXpvbmUoZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MzYwMDApKQorICAgICAgICBtcyA9IDEyMzQ1Njc4OTEyCisgICAgICAgIGV4cGVjdGVkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAyMiwgNSwgMjAsIHR6aW5mbz10eikgKyBkYXRldGltZS50aW1lZGVsdGEobWljcm9zZWNvbmRzPW1zKQorICAgICAgICBkdCA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoeyJAdHlwZSI6ICJnOkRhdGVUaW1lIiwgIkB2YWx1ZSI6IGV4cGVjdGVkLmlzb2Zvcm1hdCgpfSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGR0LCBkYXRldGltZS5kYXRldGltZSkKKyAgICAgICAgYXNzZXJ0IGR0ID09IGV4cGVjdGVkCisKKyAgICBkZWYgdGVzdF9kYXRldGltZV96dWx1KHNlbGYpOgorICAgICAgICB0eiA9IGRhdGV0aW1lLnRpbWV6b25lLnV0YworICAgICAgICBtcyA9IDEyMzQ1Njc4OTEyCisgICAgICAgIGV4cGVjdGVkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAyMiwgNSwgMjAsIHR6aW5mbz10eikgKyBkYXRldGltZS50aW1lZGVsdGEobWljcm9zZWNvbmRzPW1zKQorICAgICAgICAjIHNpbXVsYXRlIHp1bHUgZm9ybWF0CisgICAgICAgIGV4cGVjdGVkX3p1bHUgPSBleHBlY3RlZC5pc29mb3JtYXQoKVs6LTZdICsgJ1onCisgICAgICAgIGR0ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7IkB0eXBlIjogImc6RGF0ZVRpbWUiLCAiQHZhbHVlIjogZXhwZWN0ZWRfenVsdX0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkdCwgZGF0ZXRpbWUuZGF0ZXRpbWUpCisgICAgICAgIGFzc2VydCBkdCA9PSBleHBlY3RlZAorCisgICAgZGVmIHRlc3RfZHVyYXRpb24oc2VsZik6CisgICAgICAgIGQgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChqc29uLmR1bXBzKHsiQHR5cGUiOiAiZzpEdXJhdGlvbiIsICJAdmFsdWUiOiAiUFQxMjBIIn0pKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkLCBkYXRldGltZS50aW1lZGVsdGEpCisgICAgICAgIGFzc2VydCBkID09IGRhdGV0aW1lLnRpbWVkZWx0YShob3Vycz0xMjApCisKKyAgICBkZWYgdGVzdF91dWlkKHNlbGYpOgorICAgICAgICBwcm9wID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoCisgICAgICAgICAgICBqc29uLmR1bXBzKHsnQHR5cGUnOiAnZzpVVUlEJywgJ0B2YWx1ZSc6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYifSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHByb3AsIHV1aWQuVVVJRCkKKyAgICAgICAgYXNzZXJ0IHN0cihwcm9wKSA9PSAnNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2JworCisgICAgZGVmIHRlc3RfYmluYXJ5KHNlbGYpOgorICAgICAgICBiYiA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAorICAgICAgICAgICAganNvbi5kdW1wcyh7IkB0eXBlIjogImc6QmluYXJ5IiwgIkB2YWx1ZSI6ICJjMjl0WlNCaWVYUmxjeUJtYjNJZ2VXOTEifSkpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJiLCBieXRlcykKKyAgICAgICAgYXNzZXJ0IGJ5dGVzKCJzb21lIGJ5dGVzIGZvciB5b3UiLCAidXRmOCIpID09IGJiCisKKyAgICBkZWYgdGVzdF9jaGFyKHNlbGYpOgorICAgICAgICBjID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3QoanNvbi5kdW1wcyh7IkB0eXBlIjogImc6Q2hhciIsICJAdmFsdWUiOiAiTCJ9KSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYywgU2luZ2xlQ2hhcikKKyAgICAgICAgYXNzZXJ0IGNocig3NikgPT0gYworCisgICAgZGVmIHRlc3RfbnVsbChzZWxmKToKKyAgICAgICAgYyA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KGpzb24uZHVtcHMoTm9uZSkpCisgICAgICAgIGFzc2VydCBjIGlzIE5vbmUKKworCitjbGFzcyBUZXN0R3JhcGhTT05Xcml0ZXI6CisgICAgZ3JhcGhzb25fd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIoKQorICAgIGdyYXBoc29uX3JlYWRlciA9IEdyYXBoU09OUmVhZGVyKCkKKworICAgIGRlZiB0ZXN0X2NvbGxlY3Rpb25zKHNlbGYpOgorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkxpc3QiLCAiQHZhbHVlIjogW3siQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IkB0eXBlIjogImc6SW50MzIiLCAiQHZhbHVlIjogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDN9XX0gPT0ganNvbi5sb2FkcygKKyAgICAgICAgICAgIHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChbMSwgMiwgM10pKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOlNldCIsICJAdmFsdWUiOiBbeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDJ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDN9XX0gPT0ganNvbi5sb2FkcygKKyAgICAgICAgICAgIHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCh7MSwgMiwgMywgM30pKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOk1hcCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSI6IFsnYScsIHsiQHR5cGUiOiAiZzpJbnQzMiIsICJAdmFsdWUiOiAxfV19ID09IGpzb24ubG9hZHMoCisgICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoeydhJzogMX0pKQorCisgICAgZGVmIHRlc3RfbnVtYmVycyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpCeXRlIiwgIkB2YWx1ZSI6IDF9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGludC5fX25ld19fKFNpbmdsZUJ5dGUsIDEpKSkKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQxNiIsICJAdmFsdWUiOiAxNn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3Qoc2hvcnQoMTYpKSkKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQxNiIsICJAdmFsdWUiOiAtMTZ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KHNob3J0KC0xNikpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDY0IiwgIkB2YWx1ZSI6IDJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoMikpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDY0IiwgIkB2YWx1ZSI6IDg1MTQwMTk3MjU4NTEyMn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QobG9uZyg4NTE0MDE5NzI1ODUxMjIpKSkKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpJbnQ2NCIsICJAdmFsdWUiOiAtMn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QobG9uZygtMikpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDY0IiwgIkB2YWx1ZSI6IC04NTE0MDE5NzI1ODUxMjJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGxvbmcoLTg1MTQwMTk3MjU4NTEyMikpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IDF9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KDEpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkludDMyIiwgIkB2YWx1ZSI6IC0xfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCgtMSkpCisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6SW50NjQiLCAiQHZhbHVlIjogODUxNDAxOTcyNTg1MTIyfSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCg4NTE0MDE5NzI1ODUxMjIpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRvdWJsZSIsICJAdmFsdWUiOiAzLjJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KDMuMikpCisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6RG91YmxlIiwgIkB2YWx1ZSI6ICJOYU4ifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChmbG9hdCgnbmFuJykpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRvdWJsZSIsICJAdmFsdWUiOiAiSW5maW5pdHkifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChmbG9hdCgnaW5mJykpKQorICAgICAgICBhc3NlcnQgeyJAdHlwZSI6ICJnOkRvdWJsZSIsICJAdmFsdWUiOiAiLUluZmluaXR5In0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoZmxvYXQoJy1pbmYnKSkpCisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6QmlnRGVjaW1hbCIsICJAdmFsdWUiOiAiMTIzLjQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KGJpZ2RlY2ltYWwoIjEyMy40NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKSkpCisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6QmlnSW50ZWdlciIsICJAdmFsdWUiOiAiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIn0gPT0ganNvbi5sb2FkcyhzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QobG9uZygxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEpKSkKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpCaWdJbnRlZ2VyIiwgIkB2YWx1ZSI6ICIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdCgxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEpKQorICAgICAgICBhc3NlcnQgIiIidHJ1ZSIiIiA9PSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2VudW0oc2VsZik6CisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6RGlyZWN0aW9uIiwgIkB2YWx1ZSI6ICJPVVQifSA9PSBqc29uLmxvYWRzKHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChEaXJlY3Rpb24uT1VUKSkKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpEaXJlY3Rpb24iLCAiQHZhbHVlIjogIk9VVCJ9ID09IGpzb24ubG9hZHMoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KERpcmVjdGlvbi5mcm9tXykpCisKKyAgICBkZWYgdGVzdF9ncmFwaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHsiQHR5cGUiOiAiZzpWZXJ0ZXgiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7ImlkIjogeyJAdHlwZSI6ICJnOkludDY0IiwgIkB2YWx1ZSI6IDEyfSwgImxhYmVsIjogWyJwZXJzb24iXX19ID09IGpzb24ubG9hZHMoCisgICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoVmVydGV4KGxvbmcoMTIpLCAicGVyc29uIikpKQorCisgICAgICAgIGFzc2VydCB7J0B0eXBlJzogJ2c6RWRnZScsICdAdmFsdWUnOiB7J2lkJzogeydAdHlwZSc6ICdnOkludDMyJywgJ0B2YWx1ZSc6IDd9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpblYnOiB7J2lkJzogeydAdHlwZSc6ICdnOkludDMyJywgJ0B2YWx1ZSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogWydkb2cnXX0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xhYmVsJzogWydrbm93cyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRWJzogeydpZCc6IHsnQHR5cGUnOiAnZzpJbnQzMicsICdAdmFsdWUnOiAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFiZWwnOiBbJ3BlcnNvbiddfX19ID09IGpzb24ubG9hZHMoCisgICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoRWRnZSg3LCBWZXJ0ZXgoMCwgInBlcnNvbiIpLCAia25vd3MiLCBWZXJ0ZXgoMSwgImRvZyIpKSkpCisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6VmVydGV4UHJvcGVydHkiLCAiQHZhbHVlIjogeyJpZCI6ICJibGFoIiwgImxhYmVsIjogWyJrZXlBIl0sICJ2YWx1ZSI6IFRydWV9fSA9PSBqc29uLmxvYWRzKAorICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleFByb3BlcnR5KCJibGFoIiwgImtleUEiLCBUcnVlLCBWZXJ0ZXgoInN0ZXBoZW4iKSkpKQorCisgICAgICAgIGFzc2VydCB7IkB0eXBlIjogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiOiB7ImtleSI6ICJuYW1lIiwgInZhbHVlIjogIm1hcmtvIn19ID09IGpzb24ubG9hZHMoCisgICAgICAgICAgICBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoCisgICAgICAgICAgICAgICAgUHJvcGVydHkoIm5hbWUiLCAibWFya28iLCBWZXJ0ZXhQcm9wZXJ0eSgxMjM0LCAiYUtleSIsIDIxMzQ1LCBWZXJ0ZXgoInZlcnRleElkIikpKSkpCisKKyAgICAgICAgdmVydGV4ID0gc2VsZi5ncmFwaHNvbl9yZWFkZXIucmVhZF9vYmplY3Qoc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleCgxLCAicGVyc29uIikpKQorICAgICAgICBhc3NlcnQgMSA9PSB2ZXJ0ZXguaWQKKyAgICAgICAgYXNzZXJ0ICJwZXJzb24iID09IHZlcnRleC5sYWJlbAorCisgICAgICAgIGVkZ2UgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdCgKKyAgICAgICAgICAgIHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChFZGdlKDMsIFZlcnRleCgxLCAicGVyc29uIiksICJrbm93cyIsIFZlcnRleCgyLCAiZG9nIikpKSkKKyAgICAgICAgYXNzZXJ0ICJrbm93cyIgPT0gZWRnZS5sYWJlbAorICAgICAgICBhc3NlcnQgMyA9PSBlZGdlLmlkCisgICAgICAgIGFzc2VydCAxID09IGVkZ2Uub3V0Vi5pZAorICAgICAgICBhc3NlcnQgMiA9PSBlZGdlLmluVi5pZAorCisgICAgICAgIHZlcnRleF9wcm9wZXJ0eSA9IHNlbGYuZ3JhcGhzb25fcmVhZGVyLnJlYWRfb2JqZWN0KAorICAgICAgICAgICAgc2VsZi5ncmFwaHNvbl93cml0ZXIud3JpdGVfb2JqZWN0KFZlcnRleFByb3BlcnR5KDEsICJhZ2UiLCAzMiwgVmVydGV4KDEpKSkpCisgICAgICAgIGFzc2VydCAxID09IHZlcnRleF9wcm9wZXJ0eS5pZAorICAgICAgICBhc3NlcnQgImFnZSIgPT0gdmVydGV4X3Byb3BlcnR5LmtleQorICAgICAgICBhc3NlcnQgMzIgPT0gdmVydGV4X3Byb3BlcnR5LnZhbHVlCisKKyAgICAgICAgcHJvcGVydHkgPSBzZWxmLmdyYXBoc29uX3JlYWRlci5yZWFkX29iamVjdChzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoUHJvcGVydHkoImFnZSIsIDMyLjIsIEVkZ2UoMSwgVmVydGV4KDIpLCAia25vd3MiLCBWZXJ0ZXgoMykpKSkpCisgICAgICAgIGFzc2VydCAiYWdlIiA9PSBwcm9wZXJ0eS5rZXkKKyAgICAgICAgYXNzZXJ0IDMyLjIgPT0gcHJvcGVydHkudmFsdWUKKworICAgIGRlZiB0ZXN0X2N1c3RvbV9tYXBwaW5nKHNlbGYpOgorICAgICAgICAjIGV4dGVuZGVkIG1hcHBpbmcKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZXJkZXMgPSBNb2NrKCkKKyAgICAgICAgd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIoc2VyaWFsaXplcl9tYXA9e1g6IHNlcmRlc30pCisgICAgICAgIGFzc2VydCBYIGluIHdyaXRlci5zZXJpYWxpemVycworCisgICAgICAgICMgYmFzZSBkaWN0cyBhcmUgbm90IG1vZGlmaWVkCisgICAgICAgIGFzc2VydCBYIG5vdCBpbiBncmVtbGluX3B5dGhvbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb25WNC5fc2VyaWFsaXplcnMKKworICAgICAgICBvYmogPSBYKCkKKyAgICAgICAgZCA9IHdyaXRlci50b19kaWN0KG9iaikKKyAgICAgICAgc2VyZGVzLmRpY3RpZnkuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgob2JqLCB3cml0ZXIpCisgICAgICAgIGFzc2VydCBkIGlzIHNlcmRlcy5kaWN0aWZ5KCkKKworICAgICAgICAjIG92ZXJyaWRkZW4gbWFwcGluZworICAgICAgICBzZXJkZXMgPSBNb2NrKCkKKyAgICAgICAgd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIoc2VyaWFsaXplcl9tYXA9e2ludDogc2VyZGVzfSkKKyAgICAgICAgYXNzZXJ0IGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaHNvblY0Ll9zZXJpYWxpemVyc1tpbnRdIGlzIG5vdCB3cml0ZXIuc2VyaWFsaXplcnNbaW50XQorCisgICAgICAgIHZhbHVlID0gMworICAgICAgICBkID0gd3JpdGVyLnRvX2RpY3QodmFsdWUpCisgICAgICAgIHNlcmRlcy5kaWN0aWZ5LmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHZhbHVlLCB3cml0ZXIpCisgICAgICAgIGFzc2VydCBkIGlzIHNlcmRlcy5kaWN0aWZ5KCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2xvbmcoc2VsZik6CisgICAgICAgIG1hcHBpbmcgPSBzZWxmLmdyYXBoc29uX3dyaXRlci50b19kaWN0KDEpCisgICAgICAgIGFzc2VydCBtYXBwaW5nWydAdHlwZSddID09ICdnOkludDMyJworICAgICAgICBhc3NlcnQgbWFwcGluZ1snQHZhbHVlJ10gPT0gMQorCisgICAgICAgIG1hcHBpbmcgPSBzZWxmLmdyYXBoc29uX3dyaXRlci50b19kaWN0KGxvbmcoMSkpCisgICAgICAgIGFzc2VydCBtYXBwaW5nWydAdHlwZSddID09ICdnOkludDY0JworICAgICAgICBhc3NlcnQgbWFwcGluZ1snQHZhbHVlJ10gPT0gMQorCisgICAgZGVmIHRlc3RfZGF0ZXRpbWUoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0ganNvbi5kdW1wcyh7IkB0eXBlIjogImc6RGF0ZVRpbWUiLCAiQHZhbHVlIjogIjIwMjItMDUtMjBUMDM6MjU6NDUuNjc4OTEyKzEwOjAwIn0sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAgdHogPSBkYXRldGltZS50aW1lem9uZShkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz0zNjAwMCkpCisgICAgICAgIG1zID0gMTIzNDU2Nzg5MTIKKyAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZSgyMDIyLCA1LCAyMCwgdHppbmZvPXR6KSArIGRhdGV0aW1lLnRpbWVkZWx0YShtaWNyb3NlY29uZHM9bXMpCisgICAgICAgIG91dHB1dCA9IHNlbGYuZ3JhcGhzb25fd3JpdGVyLndyaXRlX29iamVjdChkdCkKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfZHVyYXRpb24oc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0ganNvbi5kdW1wcyh7IkB0eXBlIjogImc6RHVyYXRpb24iLCAiQHZhbHVlIjogIlA1RCJ9LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCisgICAgICAgIGQgPSBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9MTIwKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoZCkKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfdXVpZChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBqc29uLmR1bXBzKHsnQHR5cGUnOiAnZzpVVUlEJywgJ0B2YWx1ZSc6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYifSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQorICAgICAgICBwcm9wID0gdXVpZC5VVUlEKCI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QocHJvcCkKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dAorCisgICAgZGVmIHRlc3RfYmluYXJ5KHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGpzb24uZHVtcHMoeydAdHlwZSc6ICdnOkJpbmFyeScsICdAdmFsdWUnOiAnYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxJ30sIHNlcGFyYXRvcnM9KCcsJywgJzonKSkKKyAgICAgICAgYmIgPSBieXRlcygic29tZSBieXRlcyBmb3IgeW91IiwgInV0ZjgiKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoYmIpCisgICAgICAgIGFzc2VydCBleHBlY3RlZCA9PSBvdXRwdXQKKworICAgIGRlZiB0ZXN0X2NoYXIoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0ganNvbi5kdW1wcyh7J0B0eXBlJzogJ2c6Q2hhcicsICdAdmFsdWUnOiAnTCd9LCBzZXBhcmF0b3JzPSgnLCcsICc6JykpCisgICAgICAgIGMgPSBzdHIuX19uZXdfXyhTaW5nbGVDaGFyLCBjaHIoNzYpKQorICAgICAgICBvdXRwdXQgPSBzZWxmLmdyYXBoc29uX3dyaXRlci53cml0ZV9vYmplY3QoYykKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkID09IG91dHB1dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoc29udjRtb2RlbC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X2dyYXBoc29udjRtb2RlbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWE1OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL2lvL3Rlc3RfZ3JhcGhzb252NG1vZGVsLnB5CkBAIC0wLDAgKzEsMzA2IEBACisiIiIKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKyIiIgoraW1wb3J0IHB5dGVzdAorCisiIiIKK1JvdW5kIHRyaXAgdGVzdGluZyBvZiBHcmFwaFNPTlY0IGNvbXBhcmVkIHRvIGEgY29ycmVjdCAibW9kZWwiLgorCitTZXQgdGhlIElPX1RFU1RfRElSRUNUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUKK3RoZSAuZ2JpbiBmaWxlcyB0aGF0IHJlcHJlc2VudCB0aGUgc2VyaWFsaXplZCAibW9kZWwiIGFyZSBsb2NhdGVkLiAKKyIiIgorCitmcm9tIGdyZW1saW5fcHl0aG9uLnN0cnVjdHVyZS5pby5ncmFwaHNvblY0IGltcG9ydCBHcmFwaFNPTldyaXRlciwgR3JhcGhTT05SZWFkZXIKK2ltcG9ydCBtYXRoCitpbXBvcnQganNvbgoraW1wb3J0IG9zCisKK2Zyb20gLm1vZGVsIGltcG9ydCBtb2RlbAorCitncmVtbGluX3Rlc3RfZGlyID0gImdyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vIgorZGlyZWN0b3J5X3NlYXJjaF9wYXR0ZXJuID0gImdyZW1saW4tcHl0aG9uIiArIG9zLnNlcCArICJzcmMiICsgb3Muc2VwICsgIm1haW4iCitkZWZhdWx0X2RpciA9IF9fZmlsZV9fWzpfX2ZpbGVfXy5maW5kKGRpcmVjdG9yeV9zZWFyY2hfcGF0dGVybildCit0ZXN0X3Jlc291cmNlX2RpcmVjdG9yeSA9IG9zLmVudmlyb24uZ2V0KCdJT19URVNUX0RJUkVDVE9SWV9HUkFQSFNPTicsIGRlZmF1bHRfZGlyICsgZ3JlbWxpbl90ZXN0X2RpcikKK3dyaXRlciA9IEdyYXBoU09OV3JpdGVyKCkKK3JlYWRlciA9IEdyYXBoU09OUmVhZGVyKCkKKworZGVmIGdldF9lbnRyeSh0aXRsZSk6CisgICAgcmV0dXJuIG1vZGVsW3RpdGxlXQorCitkZWYgcmVhZF9maWxlX2J5X25hbWUocmVzb3VyY2VfbmFtZSk6CisgICAgZnVsbF9uYW1lID0gdGVzdF9yZXNvdXJjZV9kaXJlY3RvcnkgKyByZXNvdXJjZV9uYW1lICsgIi0iICsgInY0IiArICIuanNvbiIKKyAgICB3aXRoIG9wZW4oZnVsbF9uYW1lLCAncicpIGFzIHJlc291cmNlX2ZpbGU6CisgICAgICAgIHJldHVybiBqc29uLmR1bXBzKGpzb24ubG9hZChyZXNvdXJjZV9maWxlKSwgc2VwYXJhdG9ycz0oJywnLCAnOicpKQorCitkZWYgdGVzdF9wb3NfYmlnZGVjaW1hbCgpOgorICAgIGRlZiBkZWNpbWFsX2NtcCh4LCB5KToKKyAgICAgICAgIyBweXRob24ganNvbiBsaWJyYXJ5IGNhbiBvbmx5IHJlYWQgYSBCaWdEZWNpbWFsIGludG8gZmxvYXQgZHVyaW5nIGRlc2VyLCBwcmVjaXNpb24gd2lsbCBiZSBsb3N0IHdpdGggR3JhcGhTT04KKyAgICAgICAgIyBzbyBjb21wYXJlIGZsb2F0IG9ubHkKKyAgICAgICAgaWYgZmxvYXQoeC52YWx1ZSkgPT0gZmxvYXQoeS52YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBydW5fd3JpdGVyZWFkKCJwb3MtYmlnZGVjaW1hbCIsIGRlY2ltYWxfY21wKQorCitkZWYgdGVzdF9uZWdfYmlnZGVjaW1hbCgpOgorICAgIGRlZiBkZWNpbWFsX2NtcCh4LCB5KToKKyAgICAgICAgaWYgZmxvYXQoeC52YWx1ZSkgPT0gZmxvYXQoeS52YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBydW5fd3JpdGVyZWFkKCJuZWctYmlnZGVjaW1hbCIsIGRlY2ltYWxfY21wKQorCitkZWYgdGVzdF9wb3NfYmlnaW50ZWdlcigpOgorICAgICMgZ3JlbWxpbi1weXRob24gYWRkcyBhbiBleHRyYSAwIGJ5dGUgdG8gdGhlIHZhbHVlLgorICAgIHJ1bl93cml0ZXJlYWQoInBvcy1iaWdpbnRlZ2VyIikKKworZGVmIHRlc3RfbmVnX2JpZ2ludGVnZXIoKToKKyAgICAjIGdyZW1saW4tcHl0aG9uIGFkZHMgYW4gZXh0cmEgMCBieXRlIHRvIHRoZSB2YWx1ZS4KKyAgICBydW5fd3JpdGVyZWFkKCJuZWctYmlnaW50ZWdlciIpCisKK2RlZiB0ZXN0X21pbl9ieXRlKCk6CisgICAgcnVuKCJtaW4tYnl0ZSIpCisgICAgCitkZWYgdGVzdF9tYXhfYnl0ZSgpOgorICAgIHJ1bigibWF4LWJ5dGUiKQorCitkZWYgdGVzdF9lbXB0eV9iaW5hcnkoKToKKyAgICBydW4oImVtcHR5LWJpbmFyeSIpCisKK2RlZiB0ZXN0X3N0cl9iaW5hcnkoKToKKyAgICBydW4oInN0ci1iaW5hcnkiKQorCitkZWYgdGVzdF9tYXhfZG91YmxlKCk6CisgICAgcnVuKCJtYXgtZG91YmxlIikKKworZGVmIHRlc3RfbWluX2RvdWJsZSgpOgorICAgIHJ1bigibWluLWRvdWJsZSIpCisKK2RlZiB0ZXN0X25lZ19tYXhfZG91YmxlKCk6CisgICAgcnVuKCJuZWctbWF4LWRvdWJsZSIpCisKK2RlZiB0ZXN0X25lZ19taW5fZG91YmxlKCk6CisgICAgcnVuKCJuZWctbWluLWRvdWJsZSIpCisKK2RlZiB0ZXN0X25hbl9kb3VibGUoKToKKyAgICBkZWYgbmFuX2NtcCh4LCB5KToKKyAgICAgICAgaWYgbWF0aC5pc25hbih4KSBhbmQgbWF0aC5pc25hbih5KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBydW4oIm5hbi1kb3VibGUiLCBuYW5fY21wKQorCitkZWYgdGVzdF9wb3NfaW5mX2RvdWJsZSgpOgorICAgIHJ1bigicG9zLWluZi1kb3VibGUiKQorCitkZWYgdGVzdF9uZWdfaW5mX2RvdWJsZSgpOgorICAgIHJ1bigibmVnLWluZi1kb3VibGUiKQorCitkZWYgdGVzdF9uZWdfemVyb19kb3VibGUoKToKKyAgICBydW4oIm5lZy16ZXJvLWRvdWJsZSIpCisKK2RlZiB0ZXN0X3plcm9fZHVyYXRpb24oKToKKyAgICBydW4oInplcm8tZHVyYXRpb24iKQorCitkZWYgdGVzdF90cmF2ZXJzYWxfZWRnZSgpOgorICAgICMgcHJvcGVydGllcyBhcmVuJ3Qgc2VyaWFsaXplZCBpbiBncmVtbGluLXB5dGhvbgorICAgIHJ1bl93cml0ZXJlYWQoInRyYXZlcnNhbC1lZGdlIikKKworZGVmIHRlc3Rfbm9fcHJvcF9lZGdlKCk6CisgICAgIyBncmVtbGluLXB5dGhvbiBzZXJpYWxpemVzL2Rlc2VyaWFsaXplcyAibnVsbCIgZm9yIHByb3BzIG5vdCBlbXB0eSBsaXN0CisgICAgcnVuX3dyaXRlcmVhZCgibm8tcHJvcC1lZGdlIikKKworZGVmIHRlc3RfbWF4X2ludCgpOgorICAgIHJ1bigibWF4LWludCIpCisKK2RlZiB0ZXN0X21pbl9pbnQoKToKKyAgICBydW4oIm1pbi1pbnQiKQorCitkZWYgdGVzdF9tYXhfbG9uZygpOgorICAgICMgYXR0ZW1wdHMgdG8gc2VyaWFsaXplIGEgbG9uZyBhcyBhbiBpbnQKKyAgICBydW5fd3JpdGVyZWFkKCJtYXgtbG9uZyIpCisKK2RlZiB0ZXN0X21pbl9sb25nKCk6CisgICAgIyBhdHRlbXB0cyB0byBzZXJpYWxpemUgYSBsb25nIGFzIGFuIGludAorICAgIHJ1bl93cml0ZXJlYWQoIm1pbi1sb25nIikKKworZGVmIHRlc3RfdmFyX3R5cGVfbGlzdCgpOgorICAgIHJ1bigidmFyLXR5cGUtbGlzdCIpCisKK2RlZiB0ZXN0X2VtcHR5X2xpc3QoKToKKyAgICBydW4oImVtcHR5LWxpc3QiKQorCitkZWYgdGVzdF92YXJfdHlwZV9tYXAoKToKKyAgICAjIGNhbid0IHdyaXRlIHR1cGxlCisgICAgcnVuX3JlYWQoInZhci10eXBlLW1hcCIpCisKK2RlZiB0ZXN0X2VtcHR5X21hcCgpOgorICAgIHJ1bigiZW1wdHktbWFwIikKKworIyBncmVtbGluLXB5dGhvbiBkb2Vzbid0IHNlcmlhbGl6ZSBwYXRoCitkZWYgdGVzdF90cmF2ZXJzYWxfcGF0aCgpOgorICAgIHJ1bl9yZWFkKCJ0cmF2ZXJzYWwtcGF0aCIpCisKK2RlZiB0ZXN0X2VtcHR5X3BhdGgoKToKKyAgICBydW5fcmVhZCgiZW1wdHktcGF0aCIpCisKK2RlZiB0ZXN0X3Byb3BfcGF0aCgpOgorICAgIHJ1bl9yZWFkKCJwcm9wLXBhdGgiKQorCitkZWYgdGVzdF9lZGdlX3Byb3BlcnR5KCk6CisgICAgcnVuKCJlZGdlLXByb3BlcnR5IikKKworZGVmIHRlc3RfbnVsbF9wcm9wZXJ0eSgpOgorICAgIHJ1bigibnVsbC1wcm9wZXJ0eSIpCisKK2RlZiB0ZXN0X3Zhcl90eXBlX3NldCgpOgorICAgICMgb3JkZXJpbmcgd2l0aGluIHNldCBtaWdodCBiZSBkaWZmZXJlbnQKKyAgICBydW5fd3JpdGVyZWFkKCJ2YXItdHlwZS1zZXQiKQorCitkZWYgdGVzdF9lbXB0eV9zZXQoKToKKyAgICBydW4oImVtcHR5LXNldCIpCisKK2RlZiB0ZXN0X21heF9zaG9ydCgpOgorICAgICMgc2hvcnQgZGVzZXJpYWxpemVkIHRvIGludAorICAgIHJ1bl93cml0ZXJlYWQoIm1heC1zaG9ydCIpCisKK2RlZiB0ZXN0X21pbl9zaG9ydCgpOgorICAgICMgc2hvcnQgZGVzZXJpYWxpemVkIHRvIGludAorICAgIHJ1bl93cml0ZXJlYWQoIm1pbi1zaG9ydCIpCisKK2RlZiB0ZXN0X3NwZWNpZmllZF91dWlkKCk6CisgICAgcnVuKCJzcGVjaWZpZWQtdXVpZCIpCisKK2RlZiB0ZXN0X25pbF91dWlkKCk6CisgICAgcnVuKCJuaWwtdXVpZCIpCisKK2RlZiB0ZXN0X25vX3Byb3BfdmVydGV4KCk6CisgICAgIyBncmVtbGluLXB5dGhvbiBzZXJpYWxpemVzL2Rlc2VyaWFsaXplcyAibnVsbCIgZm9yIHByb3BzIG5vdCBlbXB0eSBsaXN0CisgICAgcnVuX3dyaXRlcmVhZCgibm8tcHJvcC12ZXJ0ZXgiKQorCitkZWYgdGVzdF90cmF2ZXJzYWxfdmVydGV4cHJvcGVydHkoKToKKyAgICAjIHByb3BlcnRpZXMgYXJlbid0IHNlcmlhbGl6ZWQgaW4gZ3JlbWxpbi1weXRob24KKyAgICBydW5fd3JpdGVyZWFkKCJ0cmF2ZXJzYWwtdmVydGV4cHJvcGVydHkiKQorCitkZWYgdGVzdF9tZXRhX3ZlcnRleHByb3BlcnR5KCk6CisgICAgIyBwcm9wZXJ0aWVzIGFyZW4ndCBzZXJpYWxpemVkIGluIGdyZW1saW4tcHl0aG9uCisgICAgcnVuX3dyaXRlcmVhZCgibWV0YS12ZXJ0ZXhwcm9wZXJ0eSIpCisKK2RlZiB0ZXN0X3NldF9jYXJkaW5hbGl0eV92ZXJ0ZXhwcm9wZXJ0eSgpOgorICAgICMgcHJvcGVydGllcyBhcmVuJ3Qgc2VyaWFsaXplZCBpbiBncmVtbGluLXB5dGhvbgorICAgIHJ1bl93cml0ZXJlYWQoInNldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eSIpCisKK2RlZiB0ZXN0X2lkX3QoKToKKyAgICBydW4oImlkLXQiKQorCitkZWYgdGVzdF9vdXRfZGlyZWN0aW9uKCk6CisgICAgcnVuKCJvdXQtZGlyZWN0aW9uIikKKworZGVmIHRlc3RfdmFyX2J1bGtsaXN0KCk6CisgICAgcnVuX3JlYWQoInZhci1idWxrbGlzdCIpCisKK2RlZiB0ZXN0X2VtcHR5X2J1bGtsaXN0KCk6CisgICAgcnVuX3JlYWQoImVtcHR5LWJ1bGtsaXN0IikKKworZGVmIHRlc3Rfc2luZ2xlX2J5dGVfY2hhcigpOgorICAgICMgY2hhciBpcyBzZXJpYWxpemVkIGFzIHN0cmluZworICAgIHJ1bl93cml0ZXJlYWQoInNpbmdsZS1ieXRlLWNoYXIiKQorCitkZWYgdGVzdF9tdWx0aV9ieXRlX2NoYXIoKToKKyAgICAjIGNoYXIgaXMgc2VyaWFsaXplZCBhcyBzdHJpbmcKKyAgICBydW5fd3JpdGVyZWFkKCJtdWx0aS1ieXRlLWNoYXIiKQorCitkZWYgdGVzdF91bnNwZWNpZmllZF9udWxsKCk6CisgICAgIyBubyBzZXJpYWxpemVyIGZvciBwbGFpbiBudWxsCisgICAgcnVuX3dyaXRlcmVhZCgidW5zcGVjaWZpZWQtbnVsbCIpCisKK2RlZiB0ZXN0X3RydWVfYm9vbGVhbigpOgorICAgIHJ1bigidHJ1ZS1ib29sZWFuIikKKworZGVmIHRlc3RfZmFsc2VfYm9vbGVhbigpOgorICAgIHJ1bigiZmFsc2UtYm9vbGVhbiIpCisKK2RlZiB0ZXN0X3NpbmdsZV9ieXRlX3N0cmluZygpOgorICAgIHJ1bigic2luZ2xlLWJ5dGUtc3RyaW5nIikKKworZGVmIHRlc3RfbWl4ZWRfc3RyaW5nKCk6CisgICAgcnVuKCJtaXhlZC1zdHJpbmciKQorCitkZWYgcnVuKHJlc291cmNlX25hbWUsIGNvbXBhcmF0b3IgPSBOb25lKToKKyAgICAiIiIKKyAgICBSdW5zIHRoZSByZWd1bGFyIHNldCBvZiB0ZXN0cyBmb3IgdGhlIHR5cGUgd2hpY2ggaXMKKyAgICAgICAgMS4gbW9kZWwgdG8gZGVzZXJpYWxpemVkIG9iamVjdAorICAgICAgICAyLiB3cml0dGVuIGJ5dGVzIHRvIHJlYWQgYnl0ZXMKKyAgICAgICAgMy4gcm91bmQgdHJpcHBlZCAocmVhZCB0aGVuIHdyaXR0ZW4pIGJ5dGVzIHRvIHJlYWQgYnl0ZXMKKyAgICAKKyAgICBPcHRpb25hbGx5IHRha2VzIGluIGEgY29tcGFyYXRvciB0aGF0IHVzZWQgZm9yIGNvbXBhcmlzb24gMS4KKyAgICAiIiIKKyAgICByZXNvdXJjZV9qc29uID0gcmVhZF9maWxlX2J5X25hbWUocmVzb3VyY2VfbmFtZSkKKworICAgIG1vZGVsID0gZ2V0X2VudHJ5KHJlc291cmNlX25hbWUpCisgICAgcmVhZCA9IHJlYWRlci5yZWFkX29iamVjdChyZXNvdXJjZV9qc29uKQorICAgIGlmIGNvbXBhcmF0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIGFzc2VydCBjb21wYXJhdG9yKG1vZGVsLCByZWFkKQorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBtb2RlbCA9PSByZWFkCisKKyAgICB3cml0dGVuID0gd3JpdGVyLndyaXRlX29iamVjdChtb2RlbCkKKyAgICBhc3NlcnQgcmVzb3VyY2VfanNvbiA9PSB3cml0dGVuCisKKyAgICByb3VuZF90cmlwcGVkID0gd3JpdGVyLndyaXRlX29iamVjdChyZWFkZXIucmVhZF9vYmplY3QocmVzb3VyY2VfanNvbikpCisgICAgYXNzZXJ0IHJlc291cmNlX2pzb24gPT0gcm91bmRfdHJpcHBlZAorCitkZWYgcnVuX3JlYWQocmVzb3VyY2VfbmFtZSk6CisgICAgIiIiCisgICAgUnVucyB0aGUgcmVhZCB0ZXN0IHdoaWNoIGNvbXBhcmVzIHRoZSBtb2RlbCB0byBkZXNlcmlhbGl6ZWQgb2JqZWN0CisKKyAgICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gY2FzZXMgd2hlcmUgdGhlcmUgaXMgb25seSBhIGRlc2VyaWFsaXplcgorICAgIGJ1dCBubyBzZXJpYWxpemVyIGZvciB0aGUgc2FtZSB0eXBlLgorICAgICIiIgorICAgIHJlc291cmNlX2pzb24gPSByZWFkX2ZpbGVfYnlfbmFtZShyZXNvdXJjZV9uYW1lKQorCisgICAgbW9kZWwgPSBnZXRfZW50cnkocmVzb3VyY2VfbmFtZSkKKyAgICByZWFkID0gcmVhZGVyLnJlYWRfb2JqZWN0KHJlc291cmNlX2pzb24pCisgICAgYXNzZXJ0IG1vZGVsID09IHJlYWQKKworZGVmIHJ1bl93cml0ZXJlYWQocmVzb3VyY2VfbmFtZSwgY29tcGFyYXRvciA9IE5vbmUpOgorICAgICIiIgorICAgIFJ1bnMgYSByZWR1Y2VkIHNldCBvZiB0ZXN0cyBmb3IgdGhlIHR5cGUgd2hpY2ggaXMKKyAgICAgICAgMS4gbW9kZWwgdG8gZGVzZXJpYWxpemVkIG9iamVjdAorICAgICAgICAyLiBtb2RlbCB0byByb3VuZCB0cmlwcGVkICh3cml0dGVuIHRoZW4gcmVhZCkgb2JqZWN0CisgICAgCisgICAgT3B0aW9uYWxseSB0YWtlcyBpbiBhIGNvbXBhcmF0b3IgdGhhdCB1c2VkIGZvciBjb21wYXJpc29uIDEuCisKKyAgICBVc2UgdGhpcyBpbiBjYXNlcyB3aGVyZSB0aGUgcmVndWxhciBydW4oKSBmdW5jdGlvbiBpbiB0b28gc3RyaW5nZW50LgorICAgIEUuZy4gd2hlbiBvcmRlcmluZyBkb2Vzbid0IG1hdHRlciBsaWtlIGZvciBzZXRzLiBJZGVhbGx5LCBhIHR5cGUKKyAgICBzaG91bGQgYmUgdGVzdGVkIHdpdGggcnVuKCkgaW5zdGVhZCB3aGVuIHBvc3NpYmxlLgorICAgICIiIgorICAgIHJlc291cmNlX2pzb24gPSByZWFkX2ZpbGVfYnlfbmFtZShyZXNvdXJjZV9uYW1lKQorCisgICAgbW9kZWwgPSBnZXRfZW50cnkocmVzb3VyY2VfbmFtZSkKKyAgICByZWFkID0gcmVhZGVyLnJlYWRfb2JqZWN0KHJlc291cmNlX2pzb24pCisgICAgcm91bmRfdHJpcHBlZCA9IHJlYWRlci5yZWFkX29iamVjdCh3cml0ZXIud3JpdGVfb2JqZWN0KG1vZGVsKSkKKworICAgIGlmIGNvbXBhcmF0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIGFzc2VydCBjb21wYXJhdG9yKG1vZGVsLCByZWFkKQorICAgICAgICBhc3NlcnQgY29tcGFyYXRvcihtb2RlbCwgcm91bmRfdHJpcHBlZCkKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgbW9kZWwgPT0gcmVhZAorICAgICAgICBhc3NlcnQgbW9kZWwgPT0gcm91bmRfdHJpcHBlZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L2lvL3Rlc3RfdXRpbC5weSBiL2dyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L3N0cnVjdHVyZS9pby90ZXN0X3V0aWwucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi90ZXN0cy91bml0L2lvL3Rlc3RfdXRpbC5weQpyZW5hbWUgdG8gZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL2lvL3Rlc3RfdXRpbC5weQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uL3Rlc3RzL3VuaXQvc3RydWN0dXJlL3Rlc3RfZ3JhcGgucHkgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9zdHJ1Y3R1cmUvdGVzdF9ncmFwaC5weQppbmRleCBmM2M1Mzc4Li4yMWQyNjdlIDEwMDY0NAotLS0gYS9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9zdHJ1Y3R1cmUvdGVzdF9ncmFwaC5weQorKysgYi9ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdGVzdHMvdW5pdC9zdHJ1Y3R1cmUvdGVzdF9ncmFwaC5weQpAQCAtMTMyLDMgKzEzMiw1MyBAQAogICAgICAgICBhc3NlcnQgaGFzaChwYXRoKSA9PSBoYXNoKHBhdGgyKQogICAgICAgICBhc3NlcnQgcGF0aCAhPSBQYXRoKFtzZXQoWyJhIl0pLCBzZXQoWyJjIiwgImIiXSksIHNldChbXSldLCBbMSwgVmVydGV4KDEpLCAiaGVsbG8iXSkKICAgICAgICAgYXNzZXJ0IHBhdGggIT0gUGF0aChbc2V0KFsiYSIsICJiIl0pLCBzZXQoWyJjIiwgImIiXSksIHNldChbXSldLCBbMywgVmVydGV4KDEpLCAiaGVsbG8iXSkKKworICAgIGRlZiB0ZXN0X2VsZW1lbnRfdmFsdWVfdmFsdWVzKHNlbGYpOgorICAgICAgICB2ID0gVmVydGV4KDEsICJwZXJzb24iLCBbVmVydGV4UHJvcGVydHkoMTAsICJuYW1lIiwgIm1hcmtvIiwgVmVydGV4KDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnRleFByb3BlcnR5KDExLCAiYWdlIiwgMjksIFZlcnRleCgxKSldKQorICAgICAgICBhc3NlcnQgdlsibmFtZSJdID09ICJtYXJrbyIKKyAgICAgICAgYXNzZXJ0IHZbImFnZSJdID09IDI5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHggPSB2WyJub25leGlzdGVudCJdCisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJTaG91bGQgaGF2ZSB0aHJvd24gS2V5RXJyb3IiCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhc3NlcnQgdi52YWx1ZXMoIm5hbWUiKSA9PSBbIm1hcmtvIl0KKyAgICAgICAgYXNzZXJ0IHYudmFsdWVzKCJhZ2UiKSA9PSBbMjldCisgICAgICAgIGFzc2VydCAibWFya28iIGluIHYudmFsdWVzKCkKKyAgICAgICAgYXNzZXJ0IDI5IGluIHYudmFsdWVzKCkKKyAgICAgICAgYXNzZXJ0IGxlbih2LnZhbHVlcygpKSA9PSAyCisgICAgICAgIGFzc2VydCB2LnZhbHVlcygibmFtZSIsICJhZ2UiKSA9PSBbIm1hcmtvIiwgMjldCisgICAgICAgIGFzc2VydCB2LnZhbHVlcygibm9uZXhpc3RlbnQiKSA9PSBbXQorCisgICAgICAgIGUgPSBFZGdlKDIsIFZlcnRleCgxKSwgImtub3dzIiwgVmVydGV4KDMpLCBbUHJvcGVydHkoIndlaWdodCIsIDAuNSwgTm9uZSldKQorICAgICAgICBhc3NlcnQgZVsid2VpZ2h0Il0gPT0gMC41CisgICAgICAgIGFzc2VydCBlLnZhbHVlcygid2VpZ2h0IikgPT0gWzAuNV0KKyAgICAgICAgYXNzZXJ0IGUudmFsdWVzKCkgPT0gWzAuNV0KKworICAgICAgICB2cCA9IFZlcnRleFByb3BlcnR5KDEwLCAibmFtZSIsICJtYXJrbyIsIFZlcnRleCgxKSwgW1Byb3BlcnR5KCJhY2wiLCAicHVibGljIiwgTm9uZSldKQorICAgICAgICBhc3NlcnQgdnBbImFjbCJdID09ICJwdWJsaWMiCisgICAgICAgIGFzc2VydCB2cC52YWx1ZXMoImFjbCIpID09IFsicHVibGljIl0KKyAgICAgICAgYXNzZXJ0IHZwLnZhbHVlcygpID09IFsicHVibGljIl0KKworICAgIGRlZiB0ZXN0X2VsZW1lbnRfY29udGFpbnNfYW5kX2tleXMoc2VsZik6CisgICAgICAgIHYgPSBWZXJ0ZXgoMSwgInBlcnNvbiIsIFtWZXJ0ZXhQcm9wZXJ0eSgxMCwgIm5hbWUiLCAibWFya28iLCBWZXJ0ZXgoMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGV4UHJvcGVydHkoMTEsICJhZ2UiLCAyOSwgVmVydGV4KDEpKV0pCisgICAgICAgIGFzc2VydCAibmFtZSIgaW4gdgorICAgICAgICBhc3NlcnQgImFnZSIgaW4gdgorICAgICAgICBhc3NlcnQgIm5vbmV4aXN0ZW50IiBub3QgaW4gdgorICAgICAgICBhc3NlcnQgdi5rZXlzKCkgPT0geyJuYW1lIiwgImFnZSJ9CisKKyAgICAgICAgZSA9IEVkZ2UoMiwgVmVydGV4KDEpLCAia25vd3MiLCBWZXJ0ZXgoMyksIFtQcm9wZXJ0eSgid2VpZ2h0IiwgMC41LCBOb25lKV0pCisgICAgICAgIGFzc2VydCAid2VpZ2h0IiBpbiBlCisgICAgICAgIGFzc2VydCAibWlzc2luZyIgbm90IGluIGUKKyAgICAgICAgYXNzZXJ0IGUua2V5cygpID09IHsid2VpZ2h0In0KKworICAgICAgICBlbXB0eV92ID0gVmVydGV4KDk5KQorICAgICAgICBhc3NlcnQgImFueXRoaW5nIiBub3QgaW4gZW1wdHlfdgorICAgICAgICBhc3NlcnQgZW1wdHlfdi5rZXlzKCkgPT0gc2V0KCkKKworICAgICAgICAjIHN1cHBvcnRzIHRoZSBwYXR0ZXJuOiB2ZXJ0ZXhba2V5XSBpZiBrZXkgaW4gdmVydGV4IGVsc2UgTm9uZQorICAgICAgICBhc3NlcnQgdlsibmFtZSJdIGlmICJuYW1lIiBpbiB2IGVsc2UgTm9uZSA9PSAibWFya28iCisgICAgICAgIGFzc2VydCB2WyJtaXNzaW5nIl0gaWYgIm1pc3NpbmciIGluIHYgZWxzZSBOb25lIGlzIE5vbmUKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItY2xhc3NpYy55YW1sIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1jbGFzc2ljLnlhbWwKaW5kZXggNTg0MjljMi4uMzdiNTFmNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1jbGFzc2ljLnlhbWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1jbGFzc2ljLnlhbWwKQEAgLTIxLDYgKzIxLDcgQEAKIGdyYXBoczogewogICBncmFwaDogY29uZi90aW5rZXJncmFwaC1lbXB0eS5wcm9wZXJ0aWVzfQogc2NyaXB0RW5naW5lczogeworICBncmVtbGluLWxhbmc6IHt9LAogICBncmVtbGluLWdyb292eTogewogICAgIHBsdWdpbnM6IHsgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuanNyMjIzLkdyZW1saW5TZXJ2ZXJHcmVtbGluUGx1Z2luOiB7fSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguanNyMjIzLlRpbmtlckdyYXBoR3JlbWxpblBsdWdpbjoge30sCkBAIC0zOCw2ICszOSw2IEBACiBtYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgogbWF4SGVhZGVyU2l6ZTogODE5MgogbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAorbWF4UmVxdWVzdENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCiBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzOiAxMDI0CiByZXN1bHRJdGVyYXRpb25CYXRjaFNpemU6IDY0CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLW1vZGVybi1yZWFkb25seS55YW1sIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1tb2Rlcm4tcmVhZG9ubHkueWFtbAppbmRleCBkZTBhODRhLi4zYzZhZDYzIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLW1vZGVybi1yZWFkb25seS55YW1sCisrKyBiL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLXJlYWRvbmx5LnlhbWwKQEAgLTIxLDYgKzIxLDcgQEAKIGdyYXBoczogewogICBncmFwaDogY29uZi90aW5rZXJncmFwaC1lbXB0eS5wcm9wZXJ0aWVzfQogc2NyaXB0RW5naW5lczogeworICBncmVtbGluLWxhbmc6IHt9LAogICBncmVtbGluLWdyb292eTogewogICAgIHBsdWdpbnM6IHsgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuanNyMjIzLkdyZW1saW5TZXJ2ZXJHcmVtbGluUGx1Z2luOiB7fSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguanNyMjIzLlRpbmtlckdyYXBoR3JlbWxpblBsdWdpbjoge30sCkBAIC0zOCw2ICszOSw2IEBACiBtYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgogbWF4SGVhZGVyU2l6ZTogODE5MgogbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAorbWF4UmVxdWVzdENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCiBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzOiAxMDI0CiByZXN1bHRJdGVyYXRpb25CYXRjaFNpemU6IDY0CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLW1vZGVybi55YW1sIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1tb2Rlcm4ueWFtbAppbmRleCAxYTQ3N2UxLi40NTUxMDIzIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLW1vZGVybi55YW1sCisrKyBiL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItbW9kZXJuLnlhbWwKQEAgLTE4LDkgKzE4LDExIEBACiBob3N0OiBsb2NhbGhvc3QKIHBvcnQ6IDgxODIKIGV2YWx1YXRpb25UaW1lb3V0OiAzMDAwMAorY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyCiBncmFwaHM6IHsKICAgZ3JhcGg6IGNvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllc30KIHNjcmlwdEVuZ2luZXM6IHsKKyAgZ3JlbWxpbi1sYW5nOiB7fSwKICAgZ3JlbWxpbi1ncm9vdnk6IHsKICAgICBwbHVnaW5zOiB7IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmpzcjIyMy5HcmVtbGluU2VydmVyR3JlbWxpblBsdWdpbjoge30sCiAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLmpzcjIyMy5UaW5rZXJHcmFwaEdyZW1saW5QbHVnaW46IHt9LApAQCAtMjgsOSArMzAsOCBAQAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0R3JlbWxpblBsdWdpbjoge2NsYXNzSW1wb3J0czogW2phdmEubGFuZy5NYXRoXSwgbWV0aG9kSW1wb3J0czogW2phdmEubGFuZy5NYXRoIypdfSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLlNjcmlwdEZpbGVHcmVtbGluUGx1Z2luOiB7ZmlsZXM6IFtzY3JpcHRzL2dlbmVyYXRlLW1vZGVybi5ncm9vdnldfX19fQogc2VyaWFsaXplcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICAgICMgYXBwbGljYXRpb24vanNvbgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAtc3RyaW5nZAorICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCwgY29uZmlnOiB7IGlvUmVnaXN0cmllczogW29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWM10gfX0gICAgICAgICAgICAjIGFwcGxpY2F0aW9uL2pzb24KKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjR9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjQuMAogbWV0cmljczogewogICBzbGY0alJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH19CiBzdHJpY3RUcmFuc2FjdGlvbk1hbmFnZW1lbnQ6IGZhbHNlCkBAIC0zOSw2ICs0MCwxMCBAQAogbWF4SW5pdGlhbExpbmVMZW5ndGg6IDQwOTYKIG1heEhlYWRlclNpemU6IDgxOTIKIG1heENodW5rU2l6ZTogODE5MgotbWF4Q29udGVudExlbmd0aDogMTA0ODU3NjAKK21heFJlcXVlc3RDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAogbWF4QWNjdW11bGF0aW9uQnVmZmVyQ29tcG9uZW50czogMTAyNAogcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplOiA2NAord3JpdGVCdWZmZXJMb3dXYXRlck1hcms6IDMyNzY4Cit3cml0ZUJ1ZmZlckhpZ2hXYXRlck1hcms6IDY1NTM2Citzc2w6IHsKKyAgZW5hYmxlZDogZmFsc2V9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1uZW80ai55YW1sIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1uZW80ai55YW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjEwODkwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItbmVvNGoueWFtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4KLQotIyBOb3RlIHRoYXQgVGlua2VyUG9wIGRvZXMgbm90IGluY2x1ZGUgTmVvNGogZGVwZW5kZW5jaWVzIGluIGl0cwotIyBkaXN0cmlidXRpb25zLiBUaGlzIGZpbGUgY2Fubm90IGJlIHVzZWQgYXMgYSBjb25maWd1cmF0aW9uIGZpbGUgdG8gCi0jIEdyZW1saW4gU2VydmVyIHVubGVzcyBOZW80aiBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBvbiB0aGUgCi0jIEdyZW1saW4gU2VydmVyIHBhdGggd2l0aDoKLSMKLSMgYmluL2dyZW1saW4tc2VydmVyLnNoIC1pIG9yZy5hcGFjaGUudGlua2VycG9wIG5lbzRqLWdyZW1saW4geC55LnoKLSMgCi0jIE5vdGUgdGhhdCB1bmxlc3MgdW5kZXIgYSBjb21tZXJjaWFsIGFncmVlbWVudCB3aXRoIE5lbzRqLCBJbmMuLCAKLSMgTmVvNGogaXMgbGljZW5zZWQgQUdQTC4gCi0KLWhvc3Q6IGxvY2FsaG9zdAotcG9ydDogODE4MgotZXZhbHVhdGlvblRpbWVvdXQ6IDMwMDAwCi1jaGFubmVsaXplcjogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcgotZ3JhcGhzOiB7Ci0gIGdyYXBoOiBjb25mL25lbzRqLWVtcHR5LnByb3BlcnRpZXN9Ci1zY3JpcHRFbmdpbmVzOiB7Ci0gIGdyZW1saW4tZ3Jvb3Z5OiB7Ci0gICAgcGx1Z2luczogeyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5qc3IyMjMuR3JlbWxpblNlcnZlckdyZW1saW5QbHVnaW46IHt9LAotICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5qc3IyMjMuTmVvNGpHcmVtbGluUGx1Z2luOiB7fSwKLSAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEdyZW1saW5QbHVnaW46IHtjbGFzc0ltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aF0sIG1ldGhvZEltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aCMqXX0sCi0gICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5TY3JpcHRGaWxlR3JlbWxpblBsdWdpbjoge2ZpbGVzOiBbc2NyaXB0cy9lbXB0eS1zYW1wbGUuZ3Jvb3Z5XX19fX0KLXNlcmlhbGl6ZXJzOgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMywgY29uZmlnOiB7IGlvUmVnaXN0cmllczogW29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWM10gfX0gICAgICAgICAgICAjIGFwcGxpY2F0aW9uL2pzb24KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjEuMAotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSwgY29uZmlnOiB7IHNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nOiB0cnVlIH19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wLXN0cmluZ2QKLXByb2Nlc3NvcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbk9wUHJvY2Vzc29yLCBjb25maWc6IHsgc2Vzc2lvblRpbWVvdXQ6IDI4ODAwMDAwIH19Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnRyYXZlcnNhbC5UcmF2ZXJzYWxPcFByb2Nlc3Nvcn0KLW1ldHJpY3M6IHsKLSAgY29uc29sZVJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH0sCi0gIGNzdlJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMCwgZmlsZU5hbWU6IC90bXAvZ3JlbWxpbi1zZXJ2ZXItbWV0cmljcy5jc3Z9LAotICBqbXhSZXBvcnRlcjoge2VuYWJsZWQ6IHRydWV9LAotICBzbGY0alJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH19Ci1zdHJpY3RUcmFuc2FjdGlvbk1hbmFnZW1lbnQ6IGZhbHNlCi1pZGxlQ29ubmVjdGlvblRpbWVvdXQ6IDAKLWtlZXBBbGl2ZUludGVydmFsOiAwCi1tYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgotbWF4SGVhZGVyU2l6ZTogODE5MgotbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAotbWF4QWNjdW11bGF0aW9uQnVmZmVyQ29tcG9uZW50czogMTAyNAotcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplOiA2NAotd3JpdGVCdWZmZXJMb3dXYXRlck1hcms6IDMyNzY4Ci13cml0ZUJ1ZmZlckhpZ2hXYXRlck1hcms6IDY1NTM2Ci1zc2w6IHsKLSAgZW5hYmxlZDogZmFsc2V9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLXJlc3QtbW9kZXJuLnlhbWwgYi9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLXJlc3QtbW9kZXJuLnlhbWwKaW5kZXggNWRhMmYzNi4uOTA1YTljYSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1yZXN0LW1vZGVybi55YW1sCisrKyBiL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItcmVzdC1tb2Rlcm4ueWFtbApAQCAtMjIsNiArMjIsNyBAQAogZ3JhcGhzOiB7CiAgIGdyYXBoOiBjb25mL3RpbmtlcmdyYXBoLWVtcHR5LnByb3BlcnRpZXN9CiBzY3JpcHRFbmdpbmVzOiB7CisgIGdyZW1saW4tbGFuZzoge30sCiAgIGdyZW1saW4tZ3Jvb3Z5OiB7CiAgICAgcGx1Z2luczogeyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5qc3IyMjMuR3JlbWxpblNlcnZlckdyZW1saW5QbHVnaW46IHt9LAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5qc3IyMjMuVGlua2VyR3JhcGhHcmVtbGluUGx1Z2luOiB7fSwKQEAgLTM4LDYgKzM5LDYgQEAKIG1heEluaXRpYWxMaW5lTGVuZ3RoOiA0MDk2CiBtYXhIZWFkZXJTaXplOiA4MTkyCiBtYXhDaHVua1NpemU6IDgxOTIKLW1heENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCittYXhSZXF1ZXN0Q29udGVudExlbmd0aDogMTA0ODU3NjAKIG1heEFjY3VtdWxhdGlvbkJ1ZmZlckNvbXBvbmVudHM6IDEwMjQKIHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZTogNjQKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItcmVzdC1zZWN1cmUueWFtbCBiL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItcmVzdC1zZWN1cmUueWFtbAppbmRleCAzMDMyN2Y3Li44YTYyNzk1IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLXJlc3Qtc2VjdXJlLnlhbWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1yZXN0LXNlY3VyZS55YW1sCkBAIC0zMCw2ICszMCw3IEBACiBncmFwaHM6IHsKICAgZ3JhcGg6IGNvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllc30KIHNjcmlwdEVuZ2luZXM6IHsKKyAgZ3JlbWxpbi1sYW5nOiB7fSwKICAgZ3JlbWxpbi1ncm9vdnk6IHsKICAgICBwbHVnaW5zOiB7IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmpzcjIyMy5HcmVtbGluU2VydmVyR3JlbWxpblBsdWdpbjoge30sCiAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLmpzcjIyMy5UaW5rZXJHcmFwaEdyZW1saW5QbHVnaW46IHt9LApAQCAtMzgsOSArMzksNiBAQAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuU2NyaXB0RmlsZUdyZW1saW5QbHVnaW46IHtmaWxlczogW3NjcmlwdHMvZW1wdHktc2FtcGxlLXNlY3VyZS5ncm9vdnldfX19fQogc2VyaWFsaXplcnM6CiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICAgICMgYXBwbGljYXRpb24vanNvbgotcHJvY2Vzc29yczoKLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IsIGNvbmZpZzogeyBzZXNzaW9uVGltZW91dDogMjg4MDAwMDAgfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AudHJhdmVyc2FsLlRyYXZlcnNhbE9wUHJvY2Vzc29yfQogbWV0cmljczogewogICBjb25zb2xlUmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwfSwKICAgY3N2UmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwLCBmaWxlTmFtZTogL3RtcC9ncmVtbGluLXNlcnZlci1tZXRyaWNzLmNzdn0sCkBAIC01MCw3ICs0OCw3IEBACiBtYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgogbWF4SGVhZGVyU2l6ZTogODE5MgogbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAorbWF4UmVxdWVzdENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCiBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzOiAxMDI0CiByZXN1bHRJdGVyYXRpb25CYXRjaFNpemU6IDY0CiB3cml0ZUJ1ZmZlckxvd1dhdGVyTWFyazogMzI3NjgKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItc2VjdXJlLnlhbWwgYi9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLXNlY3VyZS55YW1sCmluZGV4IDljOTk2ZjQuLmRkYzU3YzAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItc2VjdXJlLnlhbWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1zZWN1cmUueWFtbApAQCAtMjYsMTAgKzI2LDExIEBACiBob3N0OiBsb2NhbGhvc3QKIHBvcnQ6IDgxODIKIGV2YWx1YXRpb25UaW1lb3V0OiAzMDAwMAotY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuV2ViU29ja2V0Q2hhbm5lbGl6ZXIKK2NoYW5uZWxpemVyOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLkh0dHBDaGFubmVsaXplcgogZ3JhcGhzOiB7CiAgIGdyYXBoOiBjb25mL3RpbmtlcmdyYXBoLWVtcHR5LnByb3BlcnRpZXN9CiBzY3JpcHRFbmdpbmVzOiB7CisgIGdyZW1saW4tbGFuZzoge30sCiAgIGdyZW1saW4tZ3Jvb3Z5OiB7CiAgICAgcGx1Z2luczogeyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5qc3IyMjMuR3JlbWxpblNlcnZlckdyZW1saW5QbHVnaW46IHt9LAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5qc3IyMjMuVGlua2VyR3JhcGhHcmVtbGluUGx1Z2luOiB7fSwKQEAgLTQwLDkgKzQxLDYgQEAKICAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjNdIH19ICAgICAgICAgICAgIyBhcHBsaWNhdGlvbi9qc29uCiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAKICAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEsIGNvbmZpZzogeyBzZXJpYWxpemVSZXN1bHRUb1N0cmluZzogdHJ1ZSB9fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjEuMC1zdHJpbmdkCi1wcm9jZXNzb3JzOgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3NvciwgY29uZmlnOiB7IHNlc3Npb25UaW1lb3V0OiAyODgwMDAwMCB9fQotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC50cmF2ZXJzYWwuVHJhdmVyc2FsT3BQcm9jZXNzb3J9CiBtZXRyaWNzOiB7CiAgIGNvbnNvbGVSZXBvcnRlcjoge2VuYWJsZWQ6IHRydWUsIGludGVydmFsOiAxODAwMDB9LAogICBjc3ZSZXBvcnRlcjoge2VuYWJsZWQ6IHRydWUsIGludGVydmFsOiAxODAwMDAsIGZpbGVOYW1lOiAvdG1wL2dyZW1saW4tc2VydmVyLW1ldHJpY3MuY3N2fSwKQEAgLTU0LDcgKzUyLDcgQEAKIG1heEluaXRpYWxMaW5lTGVuZ3RoOiA0MDk2CiBtYXhIZWFkZXJTaXplOiA4MTkyCiBtYXhDaHVua1NpemU6IDgxOTIKLW1heENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCittYXhSZXF1ZXN0Q29udGVudExlbmd0aDogMTA0ODU3NjAKIG1heEFjY3VtdWxhdGlvbkJ1ZmZlckNvbXBvbmVudHM6IDEwMjQKIHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZTogNjQKIHdyaXRlQnVmZmVyTG93V2F0ZXJNYXJrOiAzMjc2OApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1zcGFyay55YW1sIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci1zcGFyay55YW1sCmluZGV4IGI3YzZmNWQuLmUwODgxMDYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItc3BhcmsueWFtbAorKysgYi9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLXNwYXJrLnlhbWwKQEAgLTQxLDEwICs0MSwxMSBAQAogaG9zdDogbG9jYWxob3N0CiBwb3J0OiA4MTgyCiBldmFsdWF0aW9uVGltZW91dDogMzAwMDAKLWNoYW5uZWxpemVyOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLldlYlNvY2tldENoYW5uZWxpemVyCitjaGFubmVsaXplcjogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXIKIGdyYXBoczogewogICBncmFwaDogY29uZi9oYWRvb3AtZ3J5by5wcm9wZXJ0aWVzfQogc2NyaXB0RW5naW5lczogeworICBncmVtbGluLWxhbmc6IHt9LAogICBncmVtbGluLWdyb292eTogewogICAgIHBsdWdpbnM6IHsgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuanNyMjIzLkdyZW1saW5TZXJ2ZXJHcmVtbGluUGx1Z2luOiB7fSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3BhcmsuanNyMjIzLlNwYXJrR3JlbWxpblBsdWdpbjoge30sCkBAIC01NCw5ICs1NSw2IEBACiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICAgICMgYXBwbGljYXRpb24vanNvbgogICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wCiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAtc3RyaW5nZAotcHJvY2Vzc29yczoKLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IsIGNvbmZpZzogeyBzZXNzaW9uVGltZW91dDogMjg4MDAwMDAgfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AudHJhdmVyc2FsLlRyYXZlcnNhbE9wUHJvY2Vzc29yfQogbWV0cmljczogewogICBjb25zb2xlUmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwfSwKICAgY3N2UmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwLCBmaWxlTmFtZTogL3RtcC9ncmVtbGluLXNlcnZlci1tZXRyaWNzLmNzdn0sCkBAIC02OCw3ICs2Niw3IEBACiBtYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgogbWF4SGVhZGVyU2l6ZTogODE5MgogbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAorbWF4UmVxdWVzdENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCiBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzOiAxMDI0CiByZXN1bHRJdGVyYXRpb25CYXRjaFNpemU6IDY0CiB3cml0ZUJ1ZmZlckxvd1dhdGVyTWFyazogMzI3NjgKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItdHJhbnNhY3Rpb24ueWFtbCBiL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXItdHJhbnNhY3Rpb24ueWFtbAppbmRleCAxYjBiMzk3Li5lNGNjODA0IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLXRyYW5zYWN0aW9uLnlhbWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci10cmFuc2FjdGlvbi55YW1sCkBAIC0xOCwxMCArMTgsMTEgQEAKIGhvc3Q6IGxvY2FsaG9zdAogcG9ydDogODE4MgogZXZhbHVhdGlvblRpbWVvdXQ6IDMwMDAwCi1jaGFubmVsaXplcjogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcgorY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyCiBncmFwaHM6IHsKICAgZ3JhcGg6IGNvbmYvdGlua2VydHJhbnNhY3Rpb25ncmFwaC1lbXB0eS5wcm9wZXJ0aWVzfQogc2NyaXB0RW5naW5lczogeworICBncmVtbGluLWxhbmc6IHt9LAogICBncmVtbGluLWdyb292eTogewogICAgIHBsdWdpbnM6IHsgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuanNyMjIzLkdyZW1saW5TZXJ2ZXJHcmVtbGluUGx1Z2luOiB7fSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguanNyMjIzLlRpbmtlckdyYXBoR3JlbWxpblBsdWdpbjoge30sCkBAIC0zMSw5ICszMiw2IEBACiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICAgICMgYXBwbGljYXRpb24vanNvbgogICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wCiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAtc3RyaW5nZAotcHJvY2Vzc29yczoKLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IsIGNvbmZpZzogeyBzZXNzaW9uVGltZW91dDogMjg4MDAwMDAgfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AudHJhdmVyc2FsLlRyYXZlcnNhbE9wUHJvY2Vzc29yfQogbWV0cmljczogewogICBjb25zb2xlUmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwfSwKICAgY3N2UmVwb3J0ZXI6IHtlbmFibGVkOiB0cnVlLCBpbnRlcnZhbDogMTgwMDAwLCBmaWxlTmFtZTogL3RtcC9ncmVtbGluLXNlcnZlci1tZXRyaWNzLmNzdn0sCkBAIC00NSw3ICs0Myw3IEBACiBtYXhJbml0aWFsTGluZUxlbmd0aDogNDA5NgogbWF4SGVhZGVyU2l6ZTogODE5MgogbWF4Q2h1bmtTaXplOiA4MTkyCi1tYXhDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAorbWF4UmVxdWVzdENvbnRlbnRMZW5ndGg6IDEwNDg1NzYwCiBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzOiAxMDI0CiByZXN1bHRJdGVyYXRpb25CYXRjaFNpemU6IDY0CiB3cml0ZUJ1ZmZlckxvd1dhdGVyTWFyazogMzI3NjgKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXIueWFtbCBiL2dyZW1saW4tc2VydmVyL2NvbmYvZ3JlbWxpbi1zZXJ2ZXIueWFtbAppbmRleCBlYjMzODc0Li4yODZmN2YxIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL2dyZW1saW4tc2VydmVyLnlhbWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9ncmVtbGluLXNlcnZlci55YW1sCkBAIC0xOCwyMiArMTgsMjAgQEAKIGhvc3Q6IGxvY2FsaG9zdAogcG9ydDogODE4MgogZXZhbHVhdGlvblRpbWVvdXQ6IDMwMDAwCi1jaGFubmVsaXplcjogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcgorY2hhbm5lbGl6ZXI6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyCiBncmFwaHM6IHsKICAgZ3JhcGg6IGNvbmYvdGlua2VyZ3JhcGgtZW1wdHkucHJvcGVydGllc30KIHNjcmlwdEVuZ2luZXM6IHsKKyAgZ3JlbWxpbi1sYW5nOiB7fSwKICAgZ3JlbWxpbi1ncm9vdnk6IHsKICAgICBwbHVnaW5zOiB7IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmpzcjIyMy5HcmVtbGluU2VydmVyR3JlbWxpblBsdWdpbjoge30sCiAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLmpzcjIyMy5UaW5rZXJHcmFwaEdyZW1saW5QbHVnaW46IHt9LAogICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0R3JlbWxpblBsdWdpbjoge2NsYXNzSW1wb3J0czogW2phdmEubGFuZy5NYXRoXSwgbWV0aG9kSW1wb3J0czogW2phdmEubGFuZy5NYXRoIypdfSwKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLlNjcmlwdEZpbGVHcmVtbGluUGx1Z2luOiB7ZmlsZXM6IFtzY3JpcHRzL2VtcHR5LXNhbXBsZS5ncm9vdnldfX19fQogc2VyaWFsaXplcnM6Ci0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYzXSB9fSAgICAgICAgICAgICMgYXBwbGljYXRpb24vanNvbgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wCi0gIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLCBjb25maWc6IHsgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmc6IHRydWUgfX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAtc3RyaW5nZAotcHJvY2Vzc29yczoKLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IsIGNvbmZpZzogeyBzZXNzaW9uVGltZW91dDogMjg4MDAwMDAgfX0KLSAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AudHJhdmVyc2FsLlRyYXZlcnNhbE9wUHJvY2Vzc29yfQorICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCwgY29uZmlnOiB7IGlvUmVnaXN0cmllczogW29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWM10gfX0gICAgICAgICAgICAjIGFwcGxpY2F0aW9uL2pzb24KKyAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjEuMAorICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCwgY29uZmlnOiB7IHNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nOiB0cnVlIH19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12MS4wLXN0cmluZ2QKIG1ldHJpY3M6IHsKICAgY29uc29sZVJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH0sCiAgIGNzdlJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMCwgZmlsZU5hbWU6IC90bXAvZ3JlbWxpbi1zZXJ2ZXItbWV0cmljcy5jc3Z9LApAQCAtNDUsNyArNDMsNyBAQAogbWF4SW5pdGlhbExpbmVMZW5ndGg6IDQwOTYKIG1heEhlYWRlclNpemU6IDgxOTIKIG1heENodW5rU2l6ZTogODE5MgotbWF4Q29udGVudExlbmd0aDogMTA0ODU3NjAKK21heFJlcXVlc3RDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAogbWF4QWNjdW11bGF0aW9uQnVmZmVyQ29tcG9uZW50czogMTAyNAogcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplOiA2NAogd3JpdGVCdWZmZXJMb3dXYXRlck1hcms6IDMyNzY4CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9jb25mL2xvZ2JhY2sueG1sIGIvZ3JlbWxpbi1zZXJ2ZXIvY29uZi9sb2diYWNrLnhtbAppbmRleCBiYzI5ZWJjLi41NGFlNDIzIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL2xvZ2JhY2sueG1sCisrKyBiL2dyZW1saW4tc2VydmVyL2NvbmYvbG9nYmFjay54bWwKQEAgLTIzLDcgKzIzLDYgQEAKICAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uaGFkb29wLnN0cnVjdHVyZS5IYWRvb3BHcmFwaCIgbGV2ZWw9IklORk8iLz4KICAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uaGFkb29wLnByb2Nlc3MuY29tcHV0ZXIubWFwcmVkdWNlLk1hcFJlZHVjZUdyYXBoQ29tcHV0ZXIiIGxldmVsPSJJTkZPIi8+CiAgICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5tYXByZWR1Y2UuSm9iIiBsZXZlbD0iSU5GTyIvPgotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaCIgbGV2ZWw9IkVSUk9SIi8+CiAgICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnNwYXJrLm1ldHJpY3MuTWV0cmljc1N5c3RlbSIgbGV2ZWw9IkVSUk9SIi8+CiAgICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNwYXJrLnByb2Nlc3MuY29tcHV0ZXIuU3BhcmtHcmFwaENvbXB1dGVyIiBsZXZlbD0iSU5GTyIvPgogICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AubWFwcmVkLkpvYkNsaWVudCIgbGV2ZWw9IklORk8iLz4KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL2NvbmYvbmVvNGotZW1wdHkucHJvcGVydGllcyBiL2dyZW1saW4tc2VydmVyL2NvbmYvbmVvNGotZW1wdHkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNkZmUyNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9jb25mL25lbzRqLWVtcHR5LnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSMgVGhpcyBpcyBhIHNhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE5lbzRqLiAgTm90ZSB0aGF0Ci0jIFRpbmtlclBvcCBkb2VzIG5vdCBpbmNsdWRlIE5lbzRqIGRlcGVuZGVuY2llcyBpbiBpdHMKLSMgZGlzdHJpYnV0aW9ucy4gIFRvIHVzZSB0aGlzIGZpbGUsIHBsZWFzZSBlbnN1cmUgdGhhdCBOZW80agotIyBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBpbnRvIEdyZW1saW4gU2VydmVyJ3MgcGF0aAotIyB3aXRoOgotIwotIyBncmVtbGluLXNlcnZlci5zaCAtaSBvcmcuYXBhY2hlLnRpbmtlcnBvcCBuZW80ai1ncmVtbGluIDMueS56Ci0jCi0jIE5vdGUgdGhhdCB1bmxlc3MgdW5kZXIgYSBjb21tZXJjaWFsIGFncmVlbWVudCB3aXRoIE5lbzRqLCBJbmMuLAotIyBOZW80aiBpcyBsaWNlbnNlZCBBR1BMLgotCi0KLWdyZW1saW4uZ3JhcGg9b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaAotZ3JlbWxpbi5uZW80ai5kaXJlY3Rvcnk9L3RtcC9uZW80agotZ3JlbWxpbi5uZW80ai5jb25mLmRibXMuYXV0b19pbmRleC5ub2Rlcy5lbmFibGVkPXRydWUKLSNncmVtbGluLm5lbzRqLmNvbmYuZGJtcy5hdXRvX2luZGV4Lm5vZGVzLmtleXM9Ci1ncmVtbGluLm5lbzRqLmNvbmYuZGJtcy5hdXRvX2luZGV4LnJlbGF0aW9uc2hpcHMuZW5hYmxlZD10cnVlCi0jZ3JlbWxpbi5uZW80ai5jb25mLmRibXMuYXV0b19pbmRleC5yZWxhdGlvbnNoaXBzLmtleXM9Ci0KLSMgdGhlc2UgbWVtb3J5IHNldHRpbmdzIGFyZSBsaWtlbHkgdW5zdWl0YWJsZSBmb3IgcHJvZHVjdGlvbiBjYXNlcwotZ3JlbWxpbi5uZW80ai5jb25mLmRibXMubWVtb3J5LmhlYXAuaW5pdGlhbF9zaXplPTUwMG0KLWdyZW1saW4ubmVvNGouY29uZi5kYm1zLm1lbW9yeS5oZWFwLm1heF9zaXplPTUwMG0KLWdyZW1saW4ubmVvNGouY29uZi5kYm1zLm1lbW9yeS5wYWdlY2FjaGUuc2l6ZT0xbQotZ3JlbWxpbi5uZW80ai5jb25mLmRibXMudHhfc3RhdGUubWVtb3J5X2FsbG9jYXRpb249T05fSEVBUAotCi0jIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIGVuYWJsZSBCb2x0IG9uIHRoZSBzcGVjaWZpZWQgcG9ydAotIyBncmVtbGluLm5lbzRqLmNvbmYuZGJtcy5jb25uZWN0b3IuMC50eXBlPUJPTFQKLSMgZ3JlbWxpbi5uZW80ai5jb25mLmRibXMuY29ubmVjdG9yLjAuZW5hYmxlZD10cnVlCi0jIGdyZW1saW4ubmVvNGouY29uZi5kYm1zLmNvbm5lY3Rvci4wLmFkZHJlc3M9bG9jYWxob3N0Ojc2ODcKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3BvbS54bWwgYi9ncmVtbGluLXNlcnZlci9wb20ueG1sCmluZGV4IDZjMmNmMzUuLmRmNGM1ZTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3BvbS54bWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvcG9tLnhtbApAQCAtMjEsNyArMjEsNyBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJwb3A8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjMuOC4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLXNlcnZlcjwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gU2VydmVyPC9uYW1lPgpAQCAtNTEsOCArNTEsOCBAQAogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNvbW1vbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvbGxlY3Rpb25zNDwvYXJ0aWZhY3RJZD4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNoLnFvcy5sb2diYWNrPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9BYnN0cmFjdENoYW5uZWxpemVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0Fic3RyYWN0Q2hhbm5lbGl6ZXIuamF2YQppbmRleCBjMjAyMTYzLi5hYzcyMjQ0IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0Fic3RyYWN0Q2hhbm5lbGl6ZXIuamF2YQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0Fic3RyYWN0Q2hhbm5lbGl6ZXIuamF2YQpAQCAtMzEsMTkgKzMxLDE3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoei5BdXRob3JpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5PcEV4ZWN1dG9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLk9wU2VsZWN0b3JIYW5kbGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuU2VydmVyR3JlbWxpbkV4ZWN1dG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEluaXRpYWxpemVyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuc29ja2V0LlNvY2tldENoYW5uZWw7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQ7CiBpbXBvcnQgb3JnLmphdmF0dXBsZXMuUGFpcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwpAQCAtNzEsNyArNjksNyBAQAogICogR3JlbWxpbiBzY3JpcHRzKS4KICAqIDxwLz4KICAqIEltcGxlbWVudGVycyBuZWVkIG9ubHkgd29ycnkgYWJvdXQgZGV0ZXJtaW5pbmcgaG93IGluY29taW5nIGRhdGEgaXMgY29udmVydGVkIHRvIGEKLSAqIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gYW5kIG91dGdvaW5nIGRhdGEgaXMgY29udmVydGVkIGZyb20gYSAge0BsaW5rIFJlc3BvbnNlTWVzc2FnZX0gdG8gd2hhdGV2ZXIgZXhwZWN0ZWQgZm9ybWF0IGlzCisgKiB7QGxpbmsgUmVxdWVzdE1lc3NhZ2V9IGFuZCBvdXRnb2luZyBkYXRhIGlzIGNvbnZlcnRlZCBmcm9tIGEge0BsaW5rIFJlc3BvbnNlTWVzc2FnZX0gdG8gd2hhdGV2ZXIgZXhwZWN0ZWQgZm9ybWF0IGlzCiAgKiBuZWVkZWQgYnkgdGhlIHBpcGVsaW5lLgogICoKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKQEAgLTc5LDExICs3Nyw4IEBACiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDaGFubmVsaXplciBleHRlbmRzIENoYW5uZWxJbml0aWFsaXplcjxTb2NrZXRDaGFubmVsPiBpbXBsZW1lbnRzIENoYW5uZWxpemVyIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQWJzdHJhY3RDaGFubmVsaXplci5jbGFzcyk7CiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBMaXN0PFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncz4gREVGQVVMVF9TRVJJQUxJWkVSUyA9IEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICBuZXcgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzKEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCksIENvbGxlY3Rpb25zLmVtcHR5TWFwKCkpLAotICAgICAgICAgICAgbmV3IFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncyhHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpLCBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpKSwKLSAgICAgICAgICAgIG5ldyBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3MoR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLmdldE5hbWUoKSwgbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKXt7Ci0gICAgICAgICAgICAgICAgcHV0KEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5UT0tFTl9TRVJJQUxJWkVfUkVTVUxUX1RPX1NUUklORywgdHJ1ZSk7Ci0gICAgICAgICAgICB9fSkKKyAgICAgICAgICAgIG5ldyBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3MoR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldE5hbWUoKSwgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSksCisgICAgICAgICAgICBuZXcgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzKEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNC5jbGFzcy5nZXROYW1lKCksIENvbGxlY3Rpb25zLmVtcHR5TWFwKCkpCiAgICAgKTsKIAogICAgIHByb3RlY3RlZCBTZXR0aW5ncyBzZXR0aW5nczsKQEAgLTk5LDEyICs5NCw5IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfUkVRVUVTVF9IQU5ETEVSID0gInJlcXVlc3QtaGFuZGxlciI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfSFRUUF9SRVNQT05TRV9FTkNPREVSID0gImh0dHAtcmVzcG9uc2UtZW5jb2RlciI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfSFRUUF9BR0dSRUdBVE9SID0gImh0dHAtYWdncmVnYXRvciI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfV0VCU09DS0VUX1NFUlZFUl9DT01QUkVTU0lPTiA9ICJ3ZWItc29ja2V0LXNlcnZlci1jb21wcmVzc2lvbi1oYW5kbGVyIjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9IVFRQX1VTRVJfQUdFTlRfSEFORExFUiA9ICJodHRwLXVzZXItYWdlbnQtaGFuZGxlciI7CiAKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9TU0wgPSAic3NsIjsKLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQSVBFTElORV9PUF9TRUxFQ1RPUiA9ICJvcC1zZWxlY3RvciI7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfT1BfRVhFQ1VUT1IgPSAib3AtZXhlY3V0b3IiOwogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFBJUEVMSU5FX0hUVFBfUkVRVUVTVF9ERUNPREVSID0gImh0dHAtcmVxdWVzdC1kZWNvZGVyIjsKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBHUkVNTElOX0VORFBPSU5UID0gIi9ncmVtbGluIjsKIApAQCAtMTEyLDkgKzEwNCw2IEBACiAKICAgICBwcm90ZWN0ZWQgQ2hhbm5lbEdyb3VwIGNoYW5uZWxzOwogCi0gICAgcHJpdmF0ZSBPcFNlbGVjdG9ySGFuZGxlciBvcFNlbGVjdG9ySGFuZGxlcjsKLSAgICBwcml2YXRlIE9wRXhlY3V0b3JIYW5kbGVyIG9wRXhlY3V0b3JIYW5kbGVyOwotCiAgICAgcHJvdGVjdGVkIEF1dGhlbnRpY2F0b3IgYXV0aGVudGljYXRvcjsKICAgICBwcm90ZWN0ZWQgQXV0aG9yaXplciBhdXRob3JpemVyOwogCkBAIC0xMjQsMTQgKzExMyw2IEBACiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgY29uZmlndXJlKGZpbmFsIENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSk7CiAKLSAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIHBpcGVsaW5lIGlzIGNvbXBsZXRlbHkgY29uZmlndXJlZC4gIEl0IGNhbiBiZSBvdmVycmlkZGVuIHRvIG1ha2UgYW55Ci0gICAgICogZmluYWwgY2hhbmdlcyB0byB0aGUgcGlwZWxpbmUgYmVmb3JlIGl0IGdvZXMgaW50byB1c2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZmluYWxpemUoZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0gICAgICAgIC8vIGRvIG5vdGhpbmcKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbml0KGZpbmFsIFNlcnZlckdyZW1saW5FeGVjdXRvciBzZXJ2ZXJHcmVtbGluRXhlY3V0b3IpIHsKICAgICAgICAgc2V0dGluZ3MgPSBzZXJ2ZXJHcmVtbGluRXhlY3V0b3IuZ2V0U2V0dGluZ3MoKTsKQEAgLTE3OCwxNSArMTU5LDExIEBACiAKICAgICAgICAgYXV0aGVudGljYXRvciA9IGNyZWF0ZUF1dGhlbnRpY2F0b3Ioc2V0dGluZ3MuYXV0aGVudGljYXRpb24pOwogICAgICAgICBhdXRob3JpemVyID0gY3JlYXRlQXV0aG9yaXplcihzZXR0aW5ncy5hdXRob3JpemF0aW9uKTsKLQotICAgICAgICAvLyB0aGVzZSBoYW5kbGVycyBkb24ndCBzaGFyZSBhbnkgc3RhdGUgYW5kIGNhbiB0aHVzIGJlIGluaXRpYWxpemVkIG9uY2UgcGVyIHBpcGVsaW5lCi0gICAgICAgIG9wU2VsZWN0b3JIYW5kbGVyID0gbmV3IE9wU2VsZWN0b3JIYW5kbGVyKHNldHRpbmdzLCBncmFwaE1hbmFnZXIsIGdyZW1saW5FeGVjdXRvciwgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLCB0aGlzKTsKLSAgICAgICAgb3BFeGVjdXRvckhhbmRsZXIgPSBuZXcgT3BFeGVjdXRvckhhbmRsZXIoc2V0dGluZ3MsIGdyYXBoTWFuYWdlciwgZ3JlbWxpbkV4ZWN1dG9yLCBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEl0IGlzIGJlc3Qgbm90IHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGFzIGl0IHNldHMgdXAgc29tZSBjb3JlIHBhcnRzIHRvIHRoZSBzZXJ2ZXIuIFByZWZlciBpbXBsZW1lbnRpbmcgdGhlCi0gICAgICoge0BsaW5rICNjb25maWd1cmUoQ2hhbm5lbFBpcGVsaW5lKX0gYW5kIHtAbGluayAjZmluYWxpemUoQ2hhbm5lbFBpcGVsaW5lKX0gbWV0aG9kcyB0byBhbHRlciB0aGUgcGlwZWxpbmUuCisgICAgICoge0BsaW5rICNjb25maWd1cmUoQ2hhbm5lbFBpcGVsaW5lKX0gbWV0aG9kcyB0byBhbHRlciB0aGUgcGlwZWxpbmUuCiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5pdENoYW5uZWwoZmluYWwgU29ja2V0Q2hhbm5lbCBjaCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0yMDcsNDIgKzE4NCwxOCBAQAogICAgICAgICAvLyBpbnN0YW5jZQogICAgICAgICBjb25maWd1cmUocGlwZWxpbmUpOwogCi0gICAgICAgIHBpcGVsaW5lLmFkZExhc3QoUElQRUxJTkVfT1BfU0VMRUNUT1IsIG9wU2VsZWN0b3JIYW5kbGVyKTsKLSAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9PUF9FWEVDVVRPUiwgb3BFeGVjdXRvckhhbmRsZXIpOwotCi0gICAgICAgIGZpbmFsaXplKHBpcGVsaW5lKTsKLQogICAgICAgICAvLyB0cmFjayB0aGUgbmV3bHkgY3JlYXRlZCBjaGFubmVsIGluIHRoZSBjaGFubmVsIGdyb3VwCiAgICAgICAgIGNoYW5uZWxzLmFkZChjaCk7Ci0KICAgICB9CiAKICAgICBwcm90ZWN0ZWQgQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXIgY3JlYXRlQXV0aGVudGljYXRpb25IYW5kbGVyKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PiBjbGF6eiA9IENsYXNzLmZvck5hbWUoc2V0dGluZ3MuYXV0aGVudGljYXRpb24uYXV0aGVudGljYXRpb25IYW5kbGVyKTsKICAgICAgICAgICAgIEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyIGFhaDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhlIHRocmVlIGFyZyBjb25zdHJ1Y3RvciBpcyB0aGUgbmV3IGZvcm0gYXMgYSBoYW5kbGVyIG1heSBuZWVkIHRoZSBhdXRob3JpemVyIGluIHNvbWUgY2FzZXMKLSAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PltdIHRocmVlQXJnRm9ybSA9IG5ldyBDbGFzc1tde0F1dGhlbnRpY2F0b3IuY2xhc3MsIEF1dGhvcml6ZXIuY2xhc3MsIFNldHRpbmdzLmNsYXNzfTsKLSAgICAgICAgICAgICAgICBmaW5hbCBDb25zdHJ1Y3Rvcjw/PiB0d29BcmdDb25zdHJ1Y3RvciA9IGNsYXp6LmdldERlY2xhcmVkQ29uc3RydWN0b3IodGhyZWVBcmdGb3JtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyKSB0d29BcmdDb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShhdXRoZW50aWNhdG9yLCBhdXRob3JpemVyLCBzZXR0aW5ncyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gdGhyZWVBcmdFeCkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0d28gYXJnIGNvbnN0cnVjdG9yIGlzIHRoZSAib2xkIGZvcm0iIHRoYXQgZXhpc3RlZCBwcmlvciB0byBBdXRob3JpemVycy4gc2hvdWxkIHByb2JhYmx5Ci0gICAgICAgICAgICAgICAgICAgIC8vIGRlcHJlY2F0ZSB0aGlzIGZvcm0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQ2xhc3M8Pz5bXSB0d29BcmdGb3JtID0gbmV3IENsYXNzW117QXV0aGVudGljYXRvci5jbGFzcywgU2V0dGluZ3MuY2xhc3N9OwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb25zdHJ1Y3Rvcjw/PiB0d29BcmdDb25zdHJ1Y3RvciA9IGNsYXp6LmdldERlY2xhcmVkQ29uc3RydWN0b3IodHdvQXJnRm9ybSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZXJlIGlzIGFuIGF1dGhvcml6ZXIgY29uZmlndXJlZCBidXQgdGhlIHt9IGRvZXMgbm90IGhhdmUgYSBjb25zdHJ1Y3RvciBvZiAoe30sIHt9LCB7fSkgc28gaXQgY2Fubm90IGJlIGFkZGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhenouZ2V0TmFtZSgpLCBBdXRoZW50aWNhdG9yLmNsYXNzLmdldFNpbXBsZU5hbWUoKSwgQXV0aG9yaXplci5jbGFzcy5nZXRTaW1wbGVOYW1lKCksIFNldHRpbmdzLmNsYXNzLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyKSB0d29BcmdDb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShhdXRoZW50aWNhdG9yLCBzZXR0aW5ncyk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHR3b0FyZ0V4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IHR3b0FyZ0V4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHRoZSB0aHJlZSBhcmcgY29uc3RydWN0b3IgaXMgdGhlIG5ldyBmb3JtIGFzIGEgaGFuZGxlciBtYXkgbmVlZCB0aGUgYXV0aG9yaXplciBpbiBzb21lIGNhc2VzCisgICAgICAgICAgICBmaW5hbCBDbGFzczw/PltdIHRocmVlQXJnRm9ybSA9IG5ldyBDbGFzc1tde0F1dGhlbnRpY2F0b3IuY2xhc3MsIEF1dGhvcml6ZXIuY2xhc3MsIFNldHRpbmdzLmNsYXNzfTsKKyAgICAgICAgICAgIGZpbmFsIENvbnN0cnVjdG9yPD8+IHRocmVlQXJnQ29uc3RydWN0b3IgPSBjbGF6ei5nZXREZWNsYXJlZENvbnN0cnVjdG9yKHRocmVlQXJnRm9ybSk7CisgICAgICAgICAgICByZXR1cm4gKEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyKSB0aHJlZUFyZ0NvbnN0cnVjdG9yLm5ld0luc3RhbmNlKGF1dGhlbnRpY2F0b3IsIGF1dGhvcml6ZXIsIHNldHRpbmdzKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBsb2dnZXIud2FybihleC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJDb3VsZCBub3QgY3JlYXRlL2NvbmZpZ3VyZSBBdXRoZW50aWNhdGlvbkhhbmRsZXIgJXMiLCBzZXR0aW5ncy5hdXRoZW50aWNhdGlvbi5hdXRoZW50aWNhdGlvbkhhbmRsZXIpLCBleCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0NvbnRleHQuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQ29udGV4dC5qYXZhCmluZGV4IDYyNjc0Y2EuLjA2ZTI1MDcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQ29udGV4dC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQ29udGV4dC5qYXZhCkBAIC0xOSwyNSArMTksMTggQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBhdGg7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuZW5naW5lLkdyZW1saW5FeGVjdXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0Q2hlY2tlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLkFic3RyYWN0VHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRDaGVja2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5GcmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLldzVXNlckFnZW50SGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKQEAgLTQ5LDQ2ICs0MiwzMyBAQAogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCiBwdWJsaWMgY2xhc3MgQ29udGV4dCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKENvbnRleHQuY2xhc3MpOwogICAgIHByaXZhdGUgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0OwogICAgIHByaXZhdGUgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3M7CiAgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgR3JlbWxpbkV4ZWN1dG9yIGdyZW1saW5FeGVjdXRvcjsKICAgICBwcml2YXRlIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNCb29sZWFuIGZpbmFsUmVzcG9uc2VXcml0dGVuID0gbmV3IEF0b21pY0Jvb2xlYW4oKTsKICAgICBwcml2YXRlIGZpbmFsIGxvbmcgcmVxdWVzdFRpbWVvdXQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzOwotICAgIHByaXZhdGUgZmluYWwgUmVxdWVzdENvbnRlbnRUeXBlIHJlcXVlc3RDb250ZW50VHlwZTsKICAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBncmVtbGluQXJndW1lbnQ7CisgICAgcHJpdmF0ZSBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlOwogICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBzdGFydGVkUmVzcG9uc2UgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7CiAgICAgcHJpdmF0ZSBTY2hlZHVsZWRGdXR1cmU8Pz4gdGltZW91dEV4ZWN1dG9yID0gbnVsbDsKICAgICBwcml2YXRlIGJvb2xlYW4gdGltZW91dEV4ZWN1dG9yR3JhYmJlZCA9IGZhbHNlOwogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IHRpbWVvdXRFeGVjdXRvckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVxdWVzdCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50cyBvZiB7QGxpbmsgVG9rZW5zI0FSR1NfR1JFTUxJTn0uCi0gICAgICovCi0gICAgcHVibGljIGVudW0gUmVxdWVzdENvbnRlbnRUeXBlIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnRlbnRzIGlzIG9mIHR5cGUge0BsaW5rIEJ5dGVjb2RlfS4KLSAgICAgICAgICovCi0gICAgICAgIEJZVEVDT0RFLAotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb250ZW50cyBpcyBvZiB0eXBlIHtAY29kZSBTdHJpbmd9LgotICAgICAgICAgKi8KLSAgICAgICAgU0NSSVBULAotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb250ZW50cyBhcmUgbm90IG9mIGEgdHlwZSB0aGF0IGlzIGV4cGVjdGVkLgotICAgICAgICAgKi8KLSAgICAgICAgVU5LTk9XTgotICAgIH0KKyAgICBwcml2YXRlIFN0cmluZyB0cmFuc2FjdGlvbklkOyAvLyBpbml0aWFsbHkgbnVsbCBmb3Igbm9uLXRyYW5zYWN0aW9uYWwgcmVxdWVzdHMgYW5kIGJlZ2luKCkgY2FsbHM7IHNldCBhZnRlciB0cmFuc2FjdGlvbiBjcmVhdGlvbi4KIAogICAgIHB1YmxpYyBDb250ZXh0KGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LAogICAgICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzLCBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgIGZpbmFsIEdyZW1saW5FeGVjdXRvciBncmVtbGluRXhlY3V0b3IsIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UpIHsKKyAgICAgICAgdGhpcyhyZXF1ZXN0TWVzc2FnZSwgY3R4LCBzZXR0aW5ncywgZ3JhcGhNYW5hZ2VyLCBncmVtbGluRXhlY3V0b3IsIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSwKKyAgICAgICAgICAgICAgICBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5SZXF1ZXN0U3RhdGUuTk9UX1NUQVJURUQpOworICAgIH0KKworICAgIHB1YmxpYyBDb250ZXh0KGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LAorICAgICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzLCBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgIGZpbmFsIEdyZW1saW5FeGVjdXRvciBncmVtbGluRXhlY3V0b3IsIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgZmluYWwgSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIuUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZSkgewogICAgICAgICB0aGlzLnJlcXVlc3RNZXNzYWdlID0gcmVxdWVzdE1lc3NhZ2U7CiAgICAgICAgIHRoaXMuY2hhbm5lbEhhbmRsZXJDb250ZXh0ID0gY3R4OwogICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7CkBAIC05NywxMCArNzcsMTEgQEAKICAgICAgICAgdGhpcy5zY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgPSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7CiAKICAgICAgICAgLy8gb3JkZXIgb2YgY2FsbHMgbWF0dGVyIGFzIG9uZSBkZXBlbmRzIG9uIHRoZSBuZXh0Ci0gICAgICAgIHRoaXMuZ3JlbWxpbkFyZ3VtZW50ID0gcmVxdWVzdE1lc3NhZ2UuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19HUkVNTElOKTsKLSAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudFR5cGUgPSBkZXRlcm1pbmVSZXF1ZXN0Q29udGVudHMoKTsKKyAgICAgICAgdGhpcy5ncmVtbGluQXJndW1lbnQgPSByZXF1ZXN0TWVzc2FnZS5nZXRHcmVtbGluKCk7CisgICAgICAgIHRoaXMucmVxdWVzdFN0YXRlID0gcmVxdWVzdFN0YXRlOwogICAgICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0ID0gZGV0ZXJtaW5lVGltZW91dCgpOwogICAgICAgICB0aGlzLm1hdGVyaWFsaXplUHJvcGVydGllcyA9IGRldGVybWluZU1hdGVyaWFsaXplUHJvcGVydGllcygpOworICAgICAgICB0aGlzLnRyYW5zYWN0aW9uSWQgPSByZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZChUb2tlbnMuQVJHU19UUkFOU0FDVElPTl9JRCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0VGltZW91dEV4ZWN1dG9yKGZpbmFsIFNjaGVkdWxlZEZ1dHVyZTw/PiB0aW1lb3V0RXhlY3V0b3IpIHsKQEAgLTEyNSw3ICsxMDYsNyBAQAogICAgIC8qKgogICAgICAqIFRoZSB0aW1lb3V0IGZvciB0aGUgcmVxdWVzdC4gSWYgdGhlIHJlcXVlc3QgaXMgYSBzY3JpcHQgaXQgZXhhbWluZXMgdGhlIHNjcmlwdCBmb3IgYSB0aW1lb3V0IHNldHRpbmcgdXNpbmcKICAgICAgKiB7QGNvZGUgd2l0aCgpfS4gSWYgdGhhdCBpcyBub3QgZm91bmQgdGhlbiBpdCBleGFtaW5lcyB0aGUgcmVxdWVzdCBpdHNlbGYgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IGlzIHByb3ZpZGVkIGJ5Ci0gICAgICoge0BsaW5rIFRva2VucyNBUkdTX0VWQUxfVElNRU9VVH0uIElmIHRoYXQgaXMgbm90IHByb3ZpZGVkIHRoZW4gdGhlIHtAbGluayBTZXR0aW5ncyNldmFsdWF0aW9uVGltZW91dH0gaXMKKyAgICAgKiB7QGxpbmsgVG9rZW5zI1RJTUVPVVRfTVN9LiBJZiB0aGF0IGlzIG5vdCBwcm92aWRlZCB0aGVuIHRoZSB7QGxpbmsgU2V0dGluZ3MjZXZhbHVhdGlvblRpbWVvdXR9IGlzCiAgICAgICogdXRpbGl6ZWQgYXMgdGhlIGRlZmF1bHQuCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZ2V0UmVxdWVzdFRpbWVvdXQoKSB7CkBAIC0xMzYsMjIgKzExNywxOSBAQAogICAgICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0aWVzOwogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGlzRmluYWxSZXNwb25zZVdyaXR0ZW4oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmZpbmFsUmVzcG9uc2VXcml0dGVuLmdldCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBSZXF1ZXN0Q29udGVudFR5cGUgZ2V0UmVxdWVzdENvbnRlbnRUeXBlKCkgewotICAgICAgICByZXR1cm4gcmVxdWVzdENvbnRlbnRUeXBlOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0R3JlbWxpbkFyZ3VtZW50KCkgewotICAgICAgICByZXR1cm4gZ3JlbWxpbkFyZ3VtZW50OwotICAgIH0KLQogICAgIHB1YmxpYyBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgZ2V0U2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKCkgewogICAgICAgICByZXR1cm4gc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwogICAgIH0KIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25JZCgpIHsKKyAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uSWQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VHJhbnNhY3Rpb25JZChmaW5hbCBTdHJpbmcgdHJhbnNhY3Rpb25JZCkgeworICAgICAgICB0aGlzLnRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbklkOworICAgIH0KKworCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgY3VycmVudCByZXF1ZXN0IHRvIEdyZW1saW4gU2VydmVyLgogICAgICAqLwpAQCAtMTg5LDE1ICsxNjcsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHVzZXIgYWdlbnQgKGlmIGFueSkgd2hpY2ggd2FzIHNlbnQgZnJvbSB0aGUgY2xpZW50IGR1cmluZyB0aGUgd2ViIHNvY2tldCBoYW5kc2hha2UuCi0gICAgICogUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgbm8gdXNlciBhZ2VudCBleGlzdHMKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldFVzZXJBZ2VudCgpIHsKLSAgICAgICAgcmV0dXJuIGdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpLmNoYW5uZWwoKS5oYXNBdHRyKFdzVXNlckFnZW50SGFuZGxlci5VU0VSX0FHRU5UX0FUVFJfS0VZKSA/Ci0gICAgICAgICAgICAgICAgZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpLmF0dHIoV3NVc2VyQWdlbnRIYW5kbGVyLlVTRVJfQUdFTlRfQVRUUl9LRVkpLmdldCgpIDogIiI7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogR2V0cyB3aGV0aGVyIHRoZSBzZXJ2ZXIgaGFzIHN0YXJ0ZWQgcHJvY2Vzc2luZyB0aGUgcmVzcG9uc2UgZm9yIHRoaXMgcmVxdWVzdC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBnZXRTdGFydGVkUmVzcG9uc2UoKSB7IHJldHVybiBzdGFydGVkUmVzcG9uc2UuZ2V0KCk7IH0KQEAgLTIwNywxMTggKzE3NiwyOSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFN0YXJ0ZWRSZXNwb25zZSgpIHsgc3RhcnRlZFJlc3BvbnNlLnNldCh0cnVlKTsgfQogCi0gICAgLyoqCi0gICAgICogV3JpdGVzIGEgZGVmYXVsdCB0aW1lb3V0IGVycm9yIHJlc3BvbnNlIG1lc3NhZ2UgdG8gdGhlIHVuZGVybHlpbmcgY2hhbm5lbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZW5kVGltZW91dFJlc3BvbnNlKCkgewotICAgICAgICBzZW5kVGltZW91dFJlc3BvbnNlKFN0cmluZy5mb3JtYXQoIkEgdGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdHJhdmVyc2FsIGV2YWx1YXRpb24gb2YgWyVzXSAtIGNvbnNpZGVyIGluY3JlYXNpbmcgdGhlIGxpbWl0IGdpdmVuIHRvIGV2YWx1YXRpb25UaW1lb3V0IiwgcmVxdWVzdE1lc3NhZ2UpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZXMgYSBzcGVjaWZpYyB0aW1lb3V0IGVycm9yIHJlc3BvbnNlIG1lc3NhZ2UgdG8gdGhlIHVuZGVybHlpbmcgY2hhbm5lbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZW5kVGltZW91dFJlc3BvbnNlKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgICAgIGxvZ2dlci53YXJuKG1lc3NhZ2UpOwotICAgICAgICB3cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChyZXF1ZXN0TWVzc2FnZSkKLSAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQpCi0gICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKG5ldyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpKS5jcmVhdGUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIGEgcmVzcG9uc2UgbWVzc2FnZSB0byB0aGUgdW5kZXJseWluZyBjaGFubmVsIHdoaWxlIGVuc3VyaW5nIHRoYXQgYXQgbW9zdCBvbmUKLSAgICAgKiB7QGxpbmsgUmVzcG9uc2VTdGF0dXNDb2RlI2lzRmluYWxSZXNwb25zZSgpIGZpbmFsfSByZXNwb25zZSBpcyB3cml0dGVuLgotICAgICAqIDxwPk5vdGU6IHRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygd3JpdGluZyB0byB0aGUgY2hhbm5lbCBkaXJlY3RseSB3aGVuIG11bHRpcGxlIHRocmVhZHMKLSAgICAgKiBhcmUgZXhwZWN0ZWQgdG8gcHJvZHVjZSByZXNwb25zZSBtZXNzYWdlcyBjb25jdXJyZW50bHkuPC9wPgotICAgICAqIDxwPkF0dGVtcHRzIHRvIHdyaXRlIG1vcmUgdGhhbiBvbmUgZmluYWwgcmVzcG9uc2UgbWVzc2FnZSB3aWxsIGJlIGlnbm9yZWQuPC9wPgotICAgICAqIEBzZWUgI3dyaXRlQW5kRmx1c2goUmVzcG9uc2VTdGF0dXNDb2RlLCBPYmplY3QpCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgd3JpdGVBbmRGbHVzaChmaW5hbCBSZXNwb25zZU1lc3NhZ2UgbWVzc2FnZSkgewotICAgICAgICB3cml0ZUFuZEZsdXNoKG1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLCBtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZXMgYSByZXNwb25zZSBtZXNzYWdlIHRvIHRoZSB1bmRlcmx5aW5nIGNoYW5uZWwgd2hpbGUgZW5zdXJpbmcgdGhhdCBhdCBtb3N0IG9uZQotICAgICAqIHtAbGluayBSZXNwb25zZVN0YXR1c0NvZGUjaXNGaW5hbFJlc3BvbnNlKCkgZmluYWx9IHJlc3BvbnNlIGlzIHdyaXR0ZW4uCi0gICAgICogPHA+VGhlIGNhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBwcm92aWRlZCByZXNwb25zZSBzdGF0dXMgY29kZSBtYXRjaGVzIHRoZSBjb250ZW50IG9mIHRoZSBtZXNzYWdlLjwvcD4KLSAgICAgKiA8cD5Ob3RlOiB0aGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHdyaXRpbmcgdG8gdGhlIGNoYW5uZWwgZGlyZWN0bHkgd2hlbiBtdWx0aXBsZSB0aHJlYWRzCi0gICAgICogYXJlIGV4cGVjdGVkIHRvIHByb2R1Y2UgcmVzcG9uc2UgbWVzc2FnZXMgY29uY3VycmVudGx5LjwvcD4KLSAgICAgKiA8cD5BdHRlbXB0cyB0byB3cml0ZSBtb3JlIHRoYW4gb25lIGZpbmFsIHJlc3BvbnNlIG1lc3NhZ2Ugd2lsbCBiZSBpZ25vcmVkLjwvcD4KLSAgICAgKiBAc2VlICN3cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3cml0ZUFuZEZsdXNoKGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlLCBmaW5hbCBPYmplY3QgcmVzcG9uc2VNZXNzYWdlKSB7Ci0gICAgICAgIHdyaXRlQW5kTWF5YmVGbHVzaChjb2RlLCByZXNwb25zZU1lc3NhZ2UsIHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBtZXNzYWdlKSB7Ci0gICAgICAgIHRoaXMud3JpdGUobWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCksIG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdyaXRlKGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlLCBmaW5hbCBPYmplY3QgcmVzcG9uc2VNZXNzYWdlKSB7Ci0gICAgICAgIHdyaXRlQW5kTWF5YmVGbHVzaChjb2RlLCByZXNwb25zZU1lc3NhZ2UsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBGbHVzaGVzIG1lc3NhZ2VzIHRvIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKLSAgICAgICAgdGhpcy5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5mbHVzaCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB3cml0ZUFuZE1heWJlRmx1c2goZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGNvZGUsIGZpbmFsIE9iamVjdCByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIGJvb2xlYW4gZmx1c2gpIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBtZXNzYWdlSXNGaW5hbCA9IGNvZGUuaXNGaW5hbFJlc3BvbnNlKCk7Ci0gICAgICAgIGlmIChmaW5hbFJlc3BvbnNlV3JpdHRlbi5jb21wYXJlQW5kU2V0KGZhbHNlLCBtZXNzYWdlSXNGaW5hbCkpIHsKLSAgICAgICAgICAgIHRoaXMuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkud3JpdGUocmVzcG9uc2VNZXNzYWdlKTsKLSAgICAgICAgICAgIGlmIChmbHVzaCkgdGhpcy5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5mbHVzaCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHJlc3BvbnNlTWVzc2FnZSBpbnN0YW5jZW9mIEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgKChGcmFtZSkgcmVzcG9uc2VNZXNzYWdlKS50cnlSZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsb2dNZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiQW5vdGhlciBmaW5hbCByZXNwb25zZSBtZXNzYWdlIHdhcyBhbHJlYWR5IHdyaXR0ZW4gZm9yIHJlcXVlc3QgJXMsIGlnbm9yaW5nIHJlc3BvbnNlIGNvZGU6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRSZXF1ZXN0TWVzc2FnZSgpLmdldFJlcXVlc3RJZCgpLCBjb2RlKTsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKGxvZ01lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXF1ZXN0Q29udGVudFR5cGUgZGV0ZXJtaW5lUmVxdWVzdENvbnRlbnRzKCkgewotICAgICAgICBpZiAoZ3JlbWxpbkFyZ3VtZW50IGluc3RhbmNlb2YgQnl0ZWNvZGUpCi0gICAgICAgICAgICByZXR1cm4gUmVxdWVzdENvbnRlbnRUeXBlLkJZVEVDT0RFOwotICAgICAgICBlbHNlIGlmIChncmVtbGluQXJndW1lbnQgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gUmVxdWVzdENvbnRlbnRUeXBlLlNDUklQVDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFJlcXVlc3RDb250ZW50VHlwZS5VTktOT1dOOwotICAgIH0KLQogICAgIHByaXZhdGUgbG9uZyBkZXRlcm1pbmVUaW1lb3V0KCkgewogICAgICAgICAvLyB0aW1lb3V0IG92ZXJyaWRlIC0gaGFuZGxlIGJvdGggZGVwcmVjYXRlZCBhbmQgbmV3bHkgbmFtZWQgY29uZmlndXJhdGlvbi4gZWFybGllciBsb2dpYyBzaG91bGQgcHJldmVudAogICAgICAgICAvLyBib3RoIGNvbmZpZ3VyYXRpb25zIGZyb20gYmVpbmcgc3VibWl0dGVkIGF0IHRoZSBzYW1lIHRpbWUKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhcmdzID0gcmVxdWVzdE1lc3NhZ2UuZ2V0QXJncygpOwotICAgICAgICBmaW5hbCBsb25nIHNldG8gPSBhcmdzLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0VWQUxfVElNRU9VVCkgPwotICAgICAgICAgICAgICAgICgoTnVtYmVyKSBhcmdzLmdldChUb2tlbnMuQVJHU19FVkFMX1RJTUVPVVQpKS5sb25nVmFsdWUoKSA6IHNldHRpbmdzLmdldEV2YWx1YXRpb25UaW1lb3V0KCk7CisgICAgICAgIGZpbmFsIExvbmcgdGltZW91dE1zID0gcmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGQoVG9rZW5zLlRJTUVPVVRfTVMpOworICAgICAgICBmaW5hbCBsb25nIHNldG8gPSAobnVsbCAhPSB0aW1lb3V0TXMpID8gdGltZW91dE1zIDogc2V0dGluZ3MuZ2V0RXZhbHVhdGlvblRpbWVvdXQoKTsKIAogICAgICAgICAvLyBvdmVycmlkZSB0aGUgdGltZW91dCBpZiB0aGUgbGlmZWN5Y2xlIGhhcyBhIHZhbHVlIGFzc2lnbmVkLiBpZiB0aGUgc2NyaXB0IGNvbnRhaW5zIHdpdGgodGltZW91dCkKICAgICAgICAgLy8gb3B0aW9ucyB0aGVuIGFsbG93IHRoYXQgdmFsdWUgdG8gb3ZlcnJpZGUgd2hhdCdzIHByb3ZpZGVkIG9uIHRoZSBsaWZlY3ljbGUKLSAgICAgICAgZmluYWwgT3B0aW9uYWw8TG9uZz4gdGltZW91dERlZmluZWRJblNjcmlwdCA9IHJlcXVlc3RDb250ZW50VHlwZSA9PSBSZXF1ZXN0Q29udGVudFR5cGUuU0NSSVBUID8KLSAgICAgICAgICAgICAgICBHcmVtbGluU2NyaXB0Q2hlY2tlci5wYXJzZShncmVtbGluQXJndW1lbnQudG9TdHJpbmcoKSkuZ2V0VGltZW91dCgpIDogT3B0aW9uYWwuZW1wdHkoKTsKKyAgICAgICAgZmluYWwgT3B0aW9uYWw8TG9uZz4gdGltZW91dERlZmluZWRJblNjcmlwdCA9IEdyZW1saW5TY3JpcHRDaGVja2VyLnBhcnNlKGdyZW1saW5Bcmd1bWVudC50b1N0cmluZygpKS5nZXRUaW1lb3V0KCk7CiAKICAgICAgICAgcmV0dXJuIHRpbWVvdXREZWZpbmVkSW5TY3JpcHQub3JFbHNlKHNldG8pOwogICAgIH0KIAogICAgIHByaXZhdGUgU3RyaW5nIGRldGVybWluZU1hdGVyaWFsaXplUHJvcGVydGllcygpIHsKLSAgICAgICAgLy8gd2l0aCgpIGluIFNjcmlwdCByZXF1ZXN0IGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eQotICAgICAgICBpZiAocmVxdWVzdENvbnRlbnRUeXBlID09IFJlcXVlc3RDb250ZW50VHlwZS5TQ1JJUFQpIHsKLSAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPFN0cmluZz4gbXAgPSBHcmVtbGluU2NyaXB0Q2hlY2tlci5wYXJzZShncmVtbGluQXJndW1lbnQudG9TdHJpbmcoKSkuZ2V0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBpZiAobXAuaXNQcmVzZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1wLmdldCgpLmVxdWFscyhUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMpCi0gICAgICAgICAgICAgICAgICAgICAgICA/IFRva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUwotICAgICAgICAgICAgICAgICAgICAgICAgOiBUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19BTEw7Ci0gICAgICAgIH0KKyAgICAgICAgZmluYWwgT3B0aW9uYWw8U3RyaW5nPiBtcCA9IEdyZW1saW5TY3JpcHRDaGVja2VyLnBhcnNlKGdyZW1saW5Bcmd1bWVudC50b1N0cmluZygpKS5nZXRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoKTsKKyAgICAgICAgaWYgKG1wLmlzUHJlc2VudCgpKQorICAgICAgICAgICAgcmV0dXJuIG1wLmdldCgpLmVxdWFscyhUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMpCisgICAgICAgICAgICAgICAgICAgID8gVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfVE9LRU5TCisgICAgICAgICAgICAgICAgICAgIDogVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfQUxMOwogCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXJncyA9IHJlcXVlc3RNZXNzYWdlLmdldEFyZ3MoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG1hdGVyaWFsaXplUHJvcGVydGllcyA9IHJlcXVlc3RNZXNzYWdlLmdldEZpZWxkKFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpOwogICAgICAgICAvLyBhbGwgb3B0aW9ucyBleGNlcHQgTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMgdHJlYXRlZCBhcyBNQVRFUklBTElaRV9QUk9QRVJUSUVTX0FMTAotICAgICAgICByZXR1cm4gYXJncy5jb250YWluc0tleShUb2tlbnMuQVJHU19NQVRFUklBTElaRV9QUk9QRVJUSUVTKQotICAgICAgICAgICAgICAgICYmIGFyZ3MuZ2V0KFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpLmVxdWFscyhUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMpCisgICAgICAgIHJldHVybiBUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMuZXF1YWxzKG1hdGVyaWFsaXplUHJvcGVydGllcykKICAgICAgICAgICAgICAgICA/IFRva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUwogICAgICAgICAgICAgICAgIDogVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfQUxMOwogICAgIH0KQEAgLTMzNSw0ICsyMTUsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIHB1YmxpYyBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5SZXF1ZXN0U3RhdGUgZ2V0UmVxdWVzdFN0YXRlKCkgeworICAgICAgICByZXR1cm4gcmVxdWVzdFN0YXRlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlcXVlc3RTdGF0ZShIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0YXRlKSB7CisgICAgICAgIHRoaXMucmVxdWVzdFN0YXRlID0gcmVxdWVzdFN0YXRlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JhcGhNYW5hZ2VyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyYXBoTWFuYWdlci5qYXZhCmluZGV4IGYzODY4YTUuLjkxNDM4ZTEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JhcGhNYW5hZ2VyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmFwaE1hbmFnZXIuamF2YQpAQCAtMTgsNyArMTgsNiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiAKQEAgLTEyNSwzNCArMTI0LDQgQEAKICAgICAgICAgICAgIHJldHVybiBncmFwaC5mZWF0dXJlcygpLmdyYXBoKCkuc3VwcG9ydHNUcmFuc2FjdGlvbnMoKSAmJiBncmFwaC50eCgpLmlzT3BlbigpOwogICAgICAgICB9KTsKICAgICB9Ci0gCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGEgc2NyaXB0IG9yIHF1ZXJ5IGlzIHByb2Nlc3NlZCBieSB0aGUKLSAgICAgKiBncmVtbGluLXNlcnZlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtc2cgdGhlIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gcmVjZWl2ZWQgYnkgdGhlIGdyZW1saW4tc2VydmVyLgotICAgICAqLwotICAgIGRlZmF1bHQgdm9pZCBiZWZvcmVRdWVyeVN0YXJ0KGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgewotCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGEgc2NyaXB0IG9yIHF1ZXJ5IGlzIHByb2Nlc3NlZCBieSB0aGUKLSAgICAgKiBncmVtbGluLXNlcnZlci4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtc2cgdGhlIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gcmVjZWl2ZWQgYnkgdGhlIGdyZW1saW4tc2VydmVyLgotICAgICAqIEBwYXJhbSBlcnJvciB0aGUgZXhjZXB0aW9uIGVuY291bnRlcmVkIGR1cmluZyBwcm9jZXNzaW5nIGZyb20gdGhlIGdyZW1saW4tc2VydmVyLgotICAgICAqLwotICAgIGRlZmF1bHQgdm9pZCBvblF1ZXJ5RXJyb3IoZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnLCBmaW5hbCBUaHJvd2FibGUgZXJyb3IpIHsKLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdoZW4gYSBzY3JpcHQgb3IgcXVlcnkgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcyB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBtc2cgdGhlIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gcmVjZWl2ZWQgYnkgdGhlIGdyZW1saW4tc2VydmVyLgotICAgICAqLwotICAgIGRlZmF1bHQgdm9pZCBvblF1ZXJ5U3VjY2VzcyhmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cpIHsKLQotICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyLmphdmEKaW5kZXggMWQyNGE3Ni4uMTZkOGEyZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyLmphdmEKQEAgLTMzLDggKzMzLDYgQEAKIGltcG9ydCBpby5uZXR0eS51dGlsLmludGVybmFsLmxvZ2dpbmcuSW50ZXJuYWxMb2dnZXJGYWN0b3J5OwogaW1wb3J0IGlvLm5ldHR5LnV0aWwuaW50ZXJuYWwubG9nZ2luZy5TbGY0SkxvZ2dlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuRnJhbWVNZXNzYWdlU2l6ZUVzdGltYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5PcExvYWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLkxpZmVDeWNsZUhvb2s7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5NZXRyaWNNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuU2VydmVyR3JlbWxpbkV4ZWN1dG9yOwpAQCAtMTI5LDkgKzEyNyw2IEBACiAgICAgICAgIC8vIHVzZSB0aGUgRXhlY3V0b3JTZXJ2aWNlIHJldHVybmVkIGZyb20gU2VydmVyR3JlbWxpbkV4ZWN1dG9yIGFzIGl0IG1pZ2h0IGJlIGluaXRpYWxpemVkIHRoZXJlCiAgICAgICAgIHNlcnZlckdyZW1saW5FeGVjdXRvciA9IG5ldyBTZXJ2ZXJHcmVtbGluRXhlY3V0b3Ioc2V0dGluZ3MsIGdyZW1saW5FeGVjdXRvclNlcnZpY2UsIHdvcmtlckdyb3VwKTsKICAgICAgICAgdGhpcy5ncmVtbGluRXhlY3V0b3JTZXJ2aWNlID0gc2VydmVyR3JlbWxpbkV4ZWN1dG9yLmdldEdyZW1saW5FeGVjdXRvclNlcnZpY2UoKTsKLQotICAgICAgICAvLyBpbml0aWFsaXplIHRoZSBPcExvYWRlciB3aXRoIGNvbmZpZ3VyYXRpb25zIGJlaW5nIHBhc3NlZCB0byBlYWNoIE9wUHJvY2Vzc29yIGltcGxlbWVudGF0aW9uIGxvYWRlZAotICAgICAgICBPcExvYWRlci5pbml0KHNldHRpbmdzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE0OCwxNCArMTQzLDE2IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBTZXJ2ZXJCb290c3RyYXAgYiA9IG5ldyBTZXJ2ZXJCb290c3RyYXAoKTsKIAotICAgICAgICAgICAgLy8gbmVlZCBhIGN1c3RvbSBNZXNzYWdlU2l6ZUVzdGltYXRvciB0byBjb3ZlciBGcmFtZQotICAgICAgICAgICAgYi5jaGlsZE9wdGlvbihDaGFubmVsT3B0aW9uLk1FU1NBR0VfU0laRV9FU1RJTUFUT1IsIEZyYW1lTWVzc2FnZVNpemVFc3RpbWF0b3IuaW5zdGFuY2UoKSk7Ci0KICAgICAgICAgICAgIC8vIHdoZW4gaGlnaCB2YWx1ZSBpcyByZWFjaGVkIHRoZW4gdGhlIGNoYW5uZWwgYmVjb21lcyBub24td3JpdGFibGUgYW5kIHN0YXlzIGxpa2UgdGhhdCB1bnRpbCB0aGUKICAgICAgICAgICAgIC8vIGxvdyB2YWx1ZSBpcyBzbyB0aGF0IHRoZXJlIGlzIHRpbWUgdG8gcmVjb3ZlcgogICAgICAgICAgICAgYi5jaGlsZE9wdGlvbihDaGFubmVsT3B0aW9uLldSSVRFX0JVRkZFUl9XQVRFUl9NQVJLLAogICAgICAgICAgICAgICAgICAgICBuZXcgV3JpdGVCdWZmZXJXYXRlck1hcmsoc2V0dGluZ3Mud3JpdGVCdWZmZXJMb3dXYXRlck1hcmssIHNldHRpbmdzLndyaXRlQnVmZmVySGlnaFdhdGVyTWFyaykpOwogICAgICAgICAgICAgYi5jaGlsZE9wdGlvbihDaGFubmVsT3B0aW9uLkFMTE9DQVRPUiwgUG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUKTsKKyAgICAgICAgICAgIC8vIEVuYWJsZSBUQ1AgS2VlcC1BbGl2ZSB0byBkZXRlY3QgaWYgdGhlIHJlbW90ZSBwZWVyIGlzIHN0aWxsIHJlYWNoYWJsZS4KKyAgICAgICAgICAgIC8vIEtlZXAtQWxpdmUgc2VuZHMgcGVyaW9kaWMgcHJvYmVzIHRvIGNoZWNrIGlmIHRoZSByZW1vdGUgcGVlciBpcyBzdGlsbCBhY3RpdmUuCisgICAgICAgICAgICAvLyBJZiB0aGUgcmVtb3RlIHBlZXIgaXMgdW5yZWFjaGFibGUsIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgY2xvc2VkLCBwcmV2ZW50aW5nCisgICAgICAgICAgICAvLyByZXNvdXJjZSBsZWFrcyBhbmQgYXZvaWRpbmcgdGhlIG1haW50ZW5hbmNlIG9mIHN0YWxlIGNvbm5lY3Rpb25zLgorICAgICAgICAgICAgYi5jaGlsZE9wdGlvbihDaGFubmVsT3B0aW9uLlNPX0tFRVBBTElWRSwgdHJ1ZSk7CiAKICAgICAgICAgICAgIC8vIGZpcmUgb2ZmIGFueSBsaWZlY3ljbGUgc2NyaXB0cyB0aGF0IHdlcmUgcHJvdmlkZWQgYnkgdGhlIHVzZXIuIGhvb2tzIGdldCBpbml0aWFsaXplZCBkdXJpbmcKICAgICAgICAgICAgIC8vIFNlcnZlckdyZW1saW5FeGVjdXRvciBpbml0aWFsaXphdGlvbgpAQCAtMjQwLDE2ICsyMzcsNiBAQAogICAgICAgICBzZXJ2ZXJTdG9wcGVkID0gbmV3IENvbXBsZXRhYmxlRnV0dXJlPD4oKTsKICAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggc2VydmljZXNMZWZ0VG9TaHV0ZG93biA9IG5ldyBDb3VudERvd25MYXRjaCgzKTsKIAotICAgICAgICAvLyByZWxlYXNlIHJlc291cmNlcyBpbiB0aGUgT3BQcm9jZXNzb3JzIChlLmcuIGtpbGwgc2Vzc2lvbnMpCi0gICAgICAgIE9wTG9hZGVyLmdldFByb2Nlc3NvcnMoKS5lbnRyeVNldCgpLmZvckVhY2goa3YgLT4gewotICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNodXR0aW5nIGRvd24gT3BQcm9jZXNzb3Jbe31dIiwga3YuZ2V0S2V5KCkpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBrdi5nZXRWYWx1ZSgpLmNsb3NlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiU2h1dGRvd24gd2lsbCBjb250aW51ZSBidXQsIHRoZXJlIHdhcyBhbiBlcnJvciBlbmNvdW50ZXJlZCB3aGlsZSBjbG9zaW5nICIgKyBrdi5nZXRLZXkoKSwgZXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQogICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgYSBjaGFubmVsIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCBpbiB0aGUgZmlyc3QgcGxhY2UgaWYgYmluZCgpIGZhaWxzIGJlY2F1c2UKICAgICAgICAgLy8gb2YgcG9ydCBjb25mbGljdC4gIGluIHRoYXQgY2FzZSwgdGhlcmUncyBubyBuZWVkIHRvIHdhaXQgZm9yIHRoZSBjaGFubmVsIHRvIGNsb3NlLgogICAgICAgICBpZiAobnVsbCA9PSBzZXJ2ZXJTb2NrZXRDaGFubmVsKQpAQCAtMzA2LDYgKzI5MywxMSBAQAogICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUaW1lb3V0IHdhaXRpbmcgZm9yIGJvc3Mvd29ya2VyIHRocmVhZCBwb29scyB0byBzaHV0ZG93biAtIGNvbnRpbnVpbmcgd2l0aCBzaHV0ZG93biBwcm9jZXNzLiIpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoc2VydmVyR3JlbWxpbkV4ZWN1dG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2h1dHRpbmcgZG93biBUcmFuc2FjdGlvbk1hbmFnZXIiKTsKKyAgICAgICAgICAgICAgICBzZXJ2ZXJHcmVtbGluRXhlY3V0b3IuZ2V0VHJhbnNhY3Rpb25NYW5hZ2VyKCkuc2h1dGRvd24oKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gY2xvc2UgVHJhdmVyc2FsU291cmNlIGFuZCBHcmFwaCBpbnN0YW5jZXMgLSB0aGVyZSBhcmVuJ3QgZ3VhcmFudGVlcyB0aGF0IGNsb3NpbmcgR3JhcGggd2lsbCBjbG9zZSBhbGwKICAgICAgICAgICAgIC8vIHNwYXduZWQgVHJhdmVyc2FsU291cmNlIGluc3RhbmNlcyBzbyBib3RoIHNob3VsZCBiZSBjbG9zZWQgZGlyZWN0bHkgYW5kIGluZGVwZW5kZW50bHkuCiAgICAgICAgICAgICBpZiAoc2VydmVyR3JlbWxpbkV4ZWN1dG9yICE9IG51bGwpIHsKQEAgLTQwMyw3ICszOTUsNyBAQAogICAgICAgICBidWlsZGVyLmFwcGVuZChHcmVtbGluLnZlcnNpb24oKSArICJcclxuIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgICAgICBcXCwsLC9cclxuIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgICAgICAgICAobyBvKVxyXG4iKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0tLS0tb09Pby0oMyktb09Pby0tLS0tXHJcbiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLS0tLS1vT09vLSgiICsgR3JlbWxpbi5tYWpvclZlcnNpb24oKSArICIpLW9PT28tLS0tLVxyXG4iKTsKICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvT3BQcm9jZXNzb3IuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvT3BQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzNzg3Zi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL09wUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLk9wUHJvY2Vzc29yRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5UaHJvd2luZ0NvbnN1bWVyOwotCi0vKioKLSAqIEludGVyZmFjZSBmb3IgcHJvdmlkaW5nIGNvbW1hbmRzIHRoYXQgd2Vic29ja2V0IHJlcXVlc3RzIHdpbGwgcmVzcG9uZCB0by4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgT3BQcm9jZXNzb3IgZXh0ZW5kcyBBdXRvQ2xvc2VhYmxlIHsKLQotICAgIC8qKgotICAgICAqIFRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzb3Igd2hpY2ggcmVxdWVzdHMgbXVzdCByZWZlciB0byAicHJvY2Vzc29yIiBmaWVsZCBvbiBhIHJlcXVlc3QuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplIHRoZSB7QGNvZGUgT3BQcm9jZXNzb3J9IHdpdGggc2V0dGluZ3MgZnJvbSB0aGUgc2VydmVyLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBhdAotICAgICAqIHNlcnZlciBzdGFydHVwIGJ5IGEgc2luZ2xlIHRocmVhZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZGVmYXVsdCB2b2lkIGluaXQoZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgLy8gZG8gbm90aGluZyBieSBkZWZhdWx0Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2l2ZW4gdGhlIGNvbnRleHQgKHdoaWNoIGNvbnRhaW5zIHRoZSBSZXF1ZXN0TWVzc2FnZSksIHJldHVybiBiYWNrIGEgQ29uc3VtZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlCi0gICAgICogZXhlY3V0ZWQgd2l0aCB0aGUgY29udGV4dC4gIEEgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiB3aWxsIHNpbXBseSBjaGVjayB0aGUgIm9wIiBmaWVsZCBvbiB0aGUgUmVxdWVzdE1lc3NhZ2UKLSAgICAgKiBhbmQgcmV0dXJuIHRoZSBDb25zdW1lciBmdW5jdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIG9wZXJhdGlvbi4KLSAgICAgKiBAcGFyYW0gY3R4Ci0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHB1YmxpYyBUaHJvd2luZ0NvbnN1bWVyPENvbnRleHQ+IHNlbGVjdChmaW5hbCBDb250ZXh0IGN0eCkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9Qcm9jZXNzaW5nRXhjZXB0aW9uLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL1Byb2Nlc3NpbmdFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjZjNDVkCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9Qcm9jZXNzaW5nRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLkdyZW1saW5FcnJvcjsKKworLyoqCisgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9jZXNzaW5nRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIGZpbmFsIEdyZW1saW5FcnJvciBlcnJvcjsKKworICAgIHB1YmxpYyBQcm9jZXNzaW5nRXhjZXB0aW9uKGZpbmFsIEdyZW1saW5FcnJvciBlcnJvcikgeworICAgICAgICBzdXBlcihlcnJvci5nZXRNZXNzYWdlKCkpOworICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7CisgICAgfQorCisgICAgcHVibGljIEdyZW1saW5FcnJvciBnZXRFcnJvcigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9TZXR0aW5ncy5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9TZXR0aW5ncy5qYXZhCmluZGV4IGYwYTM3M2MuLjM0ODliZDUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvU2V0dGluZ3MuamF2YQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL1NldHRpbmdzLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIAogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuc3NsLkNsaWVudEF1dGg7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblBsdWdpbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0RW5naW5lOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwpAQCAtMjgsMTMgKzI3LDEyIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BbGxvd0FsbEF1dGhlbnRpY2F0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGh6LkF1dGhvcml6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5VbmlmaWVkQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLkh0dHBDaGFubmVsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuU2Vzc2lvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLkRlZmF1bHRHcmFwaE1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5MaWZlQ3ljbGVIb29rOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogaW1wb3J0IG9yZy55YW1sLnNuYWtleWFtbC5Mb2FkZXJPcHRpb25zOwpAQCAtNDIsNiArNDAsNyBAQAogaW1wb3J0IG9yZy55YW1sLnNuYWtleWFtbC5ZYW1sOwogaW1wb3J0IG9yZy55YW1sLnNuYWtleWFtbC5jb25zdHJ1Y3Rvci5Db25zdHJ1Y3RvcjsKIAoraW1wb3J0IGphdmF4Lm5ldC5zc2wuVHJ1c3RNYW5hZ2VyOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwpAQCAtNTMsMTEgKzUyLDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuU2VydmljZUxvYWRlcjsKIGltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIAotaW1wb3J0IGphdmF4Lm5ldC5zc2wuVHJ1c3RNYW5hZ2VyOwotCiAvKioKICAqIFNlcnZlciBzZXR0aW5ncyBhcyBjb25maWd1cmVkIGJ5IGEgWUFNTCBmaWxlLgogICoKQEAgLTY4LDkgKzY0LDkgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoU2V0dGluZ3MuY2xhc3MpOwogCiAgICAgcHVibGljIFNldHRpbmdzKCkgewotICAgICAgICAvLyBzZXR1cCBzb21lIHNlbnNpYmxlIGRlZmF1bHRzIGxpa2UgZ3JlbWxpbi1ncm9vdnkKKyAgICAgICAgLy8gc2V0dXAgc29tZSBzZW5zaWJsZSBkZWZhdWx0cyBsaWtlIGdyZW1saW4tbGFuZwogICAgICAgICBzY3JpcHRFbmdpbmVzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBzY3JpcHRFbmdpbmVzLnB1dCgiZ3JlbWxpbi1ncm9vdnkiLCBuZXcgU2NyaXB0RW5naW5lU2V0dGluZ3MoKSk7CisgICAgICAgIHNjcmlwdEVuZ2luZXMucHV0KCJncmVtbGluLWxhbmciLCBuZXcgU2NyaXB0RW5naW5lU2V0dGluZ3MoKSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMDksNyArMTA1LDcgQEAKICAgICBwdWJsaWMgaW50IHRocmVhZFBvb2xCb3NzID0gMTsKIAogICAgIC8qKgotICAgICAqIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgcmVxdWVzdCAoc2NyaXB0IG9yIGJ5dGVjb2RlKSB0byBjb21wbGV0ZSBleGVjdXRpb24uIERlZmF1bHRzIHRvIDMwMDAwLgorICAgICAqIFRpbWUgaW4gbWlsbGlzZWNvbmRzIHRvIHdhaXQgZm9yIGEgcmVxdWVzdCB0byBjb21wbGV0ZSBleGVjdXRpb24uIERlZmF1bHRzIHRvIDMwMDAwLgogICAgICAqLwogICAgIHB1YmxpYyBsb25nIGV2YWx1YXRpb25UaW1lb3V0ID0gMzAwMDBMOwogCkBAIC0xMzksMTIgKzEzNSwxMSBAQAogICAgIHB1YmxpYyBpbnQgbWF4Q2h1bmtTaXplID0gODE5MjsKIAogICAgIC8qKgotICAgICAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgYWdncmVnYXRlZCBjb250ZW50IGZvciBhIG1lc3NhZ2UuICBXb3JrcyBpbiBjb25jZXJ0IHdpdGgge0BsaW5rICNtYXhDaHVua1NpemV9IHdoZXJlCisgICAgICogVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBhZ2dyZWdhdGVkIGNvbnRlbnQgZm9yIGEgcmVxdWVzdCBtZXNzYWdlLiAgV29ya3MgaW4gY29uY2VydCB3aXRoIHtAbGluayAjbWF4Q2h1bmtTaXplfSB3aGVyZQogICAgICAqIGNodW5rZWQgcmVxdWVzdHMgYXJlIGFjY3VtdWxhdGVkIGJhY2sgaW50byBhIHNpbmdsZSBtZXNzYWdlLiAgQSByZXF1ZXN0IGV4Y2VlZGluZyB0aGlzIHNpemUgd2lsbAotICAgICAqIHJldHVybiBhIDQxMyAtIFJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZSBzdGF0dXMgY29kZS4gIEEgcmVzcG9uc2UgZXhjZWVkaW5nIHRoaXMgc2l6ZSB3aWxsIHJhaXNlIGFuIGludGVybmFsCi0gICAgICogZXhjZXB0aW9uLgorICAgICAqIHJldHVybiBhIDQxMyAtIFJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZSBzdGF0dXMgY29kZS4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IG1heENvbnRlbnRMZW5ndGggPSAxMDI0ICogMTAyNCAqIDEwOworICAgIHB1YmxpYyBpbnQgbWF4UmVxdWVzdENvbnRlbnRMZW5ndGggPSAxMDI0ICogMTAyNCAqIDEwOwogCiAgICAgLyoqCiAgICAgICogTWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdCBjb21wb25lbnRzIHRoYXQgY2FuIGJlIGFnZ3JlZ2F0ZWQgZm9yIGEgbWVzc2FnZS4KQEAgLTE5MCwxNyArMTg1LDI3IEBACiAgICAgcHVibGljIGJvb2xlYW4gc3RyaWN0VHJhbnNhY3Rpb25NYW5hZ2VtZW50ID0gZmFsc2U7CiAKICAgICAvKioKLSAgICAgKiBJZiBzZXQgdG8ge0Bjb2RlIHRydWV9IHRoZSBHcmVtbGluIFNlcnZlciB3aWxsIGNsb3NlIHRoZSBzZXNzaW9uIHdoZW4gYSBHcmFwaE9wIChjb21taXQgb3Igcm9sbGJhY2spIGlzCi0gICAgICogc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBvbiB0aGF0IHNlc3Npb24uCi0gICAgICoKLSAgICAgKiBOT1RFOiBEZWZhdWx0cyB0byBmYWxzZSBpbiAzLjcueC8zLjgueCB0byBwcmV2ZW50IGJyZWFraW5nIGNoYW5nZS4KKyAgICAgKiBUaW1lIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEgdHJhbnNhY3Rpb24gY2FuIHJlbWFpbiBpZGxlIGJlZm9yZSBpdCBpcyBhdXRvbWF0aWNhbGx5IHJvbGxlZCBiYWNrLgorICAgICAqIFRoaXMgcHJldmVudHMgcmVzb3VyY2UgbGVha3MgZnJvbSBhYmFuZG9uZWQgdHJhbnNhY3Rpb25zLiBEZWZhdWx0IGlzIDYwMDAwMCAoMTAgbWludXRlcykuCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gY2xvc2VTZXNzaW9uUG9zdEdyYXBoT3AgPSBmYWxzZTsKKyAgICBwdWJsaWMgbG9uZyB0cmFuc2FjdGlvblRpbWVvdXQgPSA2MDAwMDBMOworCisgICAgLyoqCisgICAgICogVGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgYSB0cmFuc2FjdGlvbiBjb21taXQgb3Igcm9sbGJhY2sgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLgorICAgICAqIERlZmF1bHQgaXMgMTAwMDAgKDEwIHNlY29uZHMpLgorICAgICAqLworICAgIHB1YmxpYyBsb25nIHBlckdyYXBoQ2xvc2VUaW1lb3V0ID0gMTAwMDBMOworCisgICAgLyoqCisgICAgICogTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCB0cmFuc2FjdGlvbnMgYWxsb3dlZCBvbiB0aGUgc2VydmVyLgorICAgICAqIERlZmF1bHQgaXMgMTAwMC4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IG1heENvbmN1cnJlbnRUcmFuc2FjdGlvbnMgPSAxMDAwOwogCiAgICAgLyoqCiAgICAgICogVGhlIGZ1bGwgY2xhc3MgbmFtZSBvZiB0aGUge0BsaW5rIENoYW5uZWxpemVyfSB0byB1c2UgaW4gR3JlbWxpbiBTZXJ2ZXIuCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBjaGFubmVsaXplciA9IFdlYlNvY2tldENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKKyAgICBwdWJsaWMgU3RyaW5nIGNoYW5uZWxpemVyID0gSHR0cENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKIAogICAgIC8qKgogICAgICAqIFRoZSBmdWxsIGNsYXNzIG5hbWUgb2YgdGhlIHtAbGluayBHcmFwaE1hbmFnZXJ9IHRvIHVzZSBpbiBHcmVtbGluIFNlcnZlci4KQEAgLTIxMyw2OCArMjE4LDE3IEBACiAgICAgICogd2lsbCBiZSBwcm9jZXNzZWQgYnkgdGhpcyB0aHJlYWQgcG9vbC4gSWYgdGhlIHRocmVhZHMgYXJlIGV4aGF1c3RlZCwgdGhlIHJlcXVlc3RzIHdpbGwgcXVldWUgdG8gdGhlIHNpemUKICAgICAgKiBzcGVjaWZpZWQgYnkgdGhpcyB2YWx1ZSBhZnRlciB3aGljaCB0aGV5IHdpbGwgYmVnaW4gdG8gcmVqZWN0IHRoZSByZXF1ZXN0cy4KICAgICAgKiA8cC8+Ci0gICAgICogVGhpcyB2YWx1ZSBzaG91bGQgYmUgdGFrZW4gaW4gYWNjb3VudCB3aXRoIHRoZSB7QGxpbmsgI21heFNlc3Npb25UYXNrUXVldWVTaXplfSB3aGljaCBpcyByZWxhdGVkIGluIHNvbWUKLSAgICAgKiByZXNwZWN0cy4gQSByZXF1ZXN0IHRoYXQgc3RhcnRzIGEgbmV3IHtAbGluayBTZXNzaW9ufSBpcyBoYW5kbGVkIGJ5IHRoaXMgcXVldWUsIGJ1dCBhZGRpdGlvbmFsIHJlcXVlc3RzIHRvIGEKLSAgICAgKiBjcmVhdGVkIHtAbGluayBTZXNzaW9ufSB3aWxsIHF1ZXVlIHNlcGFyYXRlbHkgZ2l2ZW4gdGhhdCBzZXR0aW5nIHBlciBzZXNzaW9uLgotICAgICAqIDxwLz4KICAgICAgKiBCeSBkZWZhdWx0IHRoaXMgdmFsdWUgaXMgc2V0IHRvIDgxOTIuCiAgICAgICovCiAgICAgcHVibGljIGludCBtYXhXb3JrUXVldWVTaXplID0gODE5MjsKIAogICAgIC8qKgotICAgICAqIE1heGltdW0gc2l6ZSB0aGF0IGFuIGluZGl2aWR1YWwge0BsaW5rIFNlc3Npb259IGNhbiBxdWV1ZSByZXF1ZXN0cyBiZWZvcmUgc3RhcnRpbmcgdG8gcmVqZWN0IHRoZW0uIE5vdGUgdGhhdCB0aGlzCi0gICAgICogY29uZmlndXJhdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIHtAbGluayBVbmlmaWVkQ2hhbm5lbGl6ZXJ9LiBCeSBkZWZhdWx0IHRoaXMgdmFsdWUgaXMgc2V0IHRvIDQwOTYuCi0gICAgICoKLSAgICAgKiBAc2VlICNtYXhXb3JrUXVldWVTaXplCi0gICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgbm90IHJlcGxhY2VkLgotICAgICAqLwotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIGludCBtYXhTZXNzaW9uVGFza1F1ZXVlU2l6ZSA9IDQwOTY7Ci0KLSAgICAvKioKICAgICAgKiBNYXhpbXVtIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHBhc3NlZCBvbiBhIHJlcXVlc3QuIExhcmdlciBudW1iZXJzIG1heSBpbXBhY3QgcGVyZm9ybWFuY2UgZm9yIHNjcmlwdHMuCi0gICAgICogVGhlIGRlZmF1bHQgaXMgMTYgYW5kIHRoaXMgc2V0dGluZyBvbmx5IGFwcGxpZXMgdG8gdGhlIHtAbGluayBVbmlmaWVkQ2hhbm5lbGl6ZXJ9LgorICAgICAqIFRoZSBkZWZhdWx0IGlzIDE2IGFuZCB0aGlzIHNldHRpbmcgb25seSBhcHBsaWVzIHRvIHRoZSB7QGxpbmsgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXJ9LgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgbWF4UGFyYW1ldGVycyA9IDE2OwogCiAgICAgLyoqCi0gICAgICogVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIHRoYXQgYSB7QGxpbmsgVW5pZmllZENoYW5uZWxpemVyfSBzZXNzaW9uIGNhbiBleGlzdC4gVGhpcyB2YWx1ZSBjYW5ub3QgYmUgZXh0ZW5kZWQKLSAgICAgKiBiZXlvbmQgdGhpcyB2YWx1ZSBpcnJlc3BlY3RpdmUgb2YgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBhbmQgdGhlaXIgaW5kaXZpZHVhbCB0aW1lb3V0cy4gUmVxdWVzdHMgbXVzdCBjb21wbGV0ZQotICAgICAqIHdpdGhpbiB0aGlzIHRpbWUgZnJhbWUuIElmIHRoaXMgdGltZW91dCBpcyByZWFjaGVkIHdoaWxlIHRoZXJlIGlzIGEgcnVubmluZyBldmFsdWF0aW9uLCB0aGVyZSB3aWxsIGJlIGFuIGF0dGVtcHQKLSAgICAgKiB0byBpbnRlcnJ1cHQgaXQgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSB0aW1lb3V0IGVycm9yIHRvIHRoZSBjbGllbnQuIElmIHRoZXJlIGFyZSBleGlzdGluZyByZXF1ZXN0cyBlbnF1ZXVlZCBmb3IKLSAgICAgKiB0aGUgc2Vzc2lvbiB3aGVuIHRoaXMgdGltZW91dCBpcyByZWFjaGVkLCB0aG9zZSByZXF1ZXN0cyB3aWxsIG5vdCBiZSBleGVjdXRlZCBhbmQgd2lsbCBiZSBjbG9zZWQgd2l0aCBzZXJ2ZXIKLSAgICAgKiBlcnJvcnMuIE9wZW4gdHJhbnNhY3Rpb25zIHdpbGwgYmUgaXNzdWVkIGEgcm9sbGJhY2suIFRoZSBkZWZhdWx0IGlzIDEwIG1pbnV0ZXMuCi0gICAgICoKLSAgICAgKiBAZGVwcmVjYXRlZCBBcyBvZiByZWxlYXNlIDMuOC4wLCBub3QgcmVwbGFjZWQuCi0gICAgICovCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgbG9uZyBzZXNzaW9uTGlmZXRpbWVUaW1lb3V0ID0gNjAwMDAwOwotCi0gICAgLyoqCi0gICAgICogRW5hYmxlIHRoZSBnbG9iYWwgZnVuY3Rpb24gY2FjaGUgZm9yIHNlc3Npb25zIHdoZW4gdXNpbmcgdGhlIHtAbGluayBVbmlmaWVkQ2hhbm5lbGl6ZXJ9LiBUaGlzIHNldHRpbmcgaXMgb25seQotICAgICAqIHJlbGV2YW50IHdoZW4ge0BsaW5rICN1c2VHbG9iYWxGdW5jdGlvbkNhY2hlRm9yU2Vzc2lvbnN9IGlzIHtAY29kZSBmYWxzZX0uIFdoZW4ge0BsaW5rIHRydWV9IGl0IG1lYW5zIHRoYXQKLSAgICAgKiBmdW5jdGlvbnMgY3JlYXRlZCBpbiBvbmUgcmVxdWVzdCB0byBhIHNlc3Npb24gcmVtYWluIGF2YWlsYWJsZSBvbiB0aGUgbmV4dCByZXF1ZXN0IHRvIHRoYXQgc2Vzc2lvbi4KLSAgICAgKgotICAgICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIG5vdCByZXBsYWNlZC4KLSAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBib29sZWFuIHVzZUdsb2JhbEZ1bmN0aW9uQ2FjaGVGb3JTZXNzaW9ucyA9IHRydWU7Ci0KLSAgICAvKioKLSAgICAgKiBXaGVuIHtAY29kZSB0cnVlfSBhbmQgdXNpbmcgdGhlIHtAbGluayBVbmlmaWVkQ2hhbm5lbGl6ZXJ9IHRoZSBzYW1lIGVuZ2luZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzZXJ2ZXIKLSAgICAgKiBzZXNzaW9ubGVzcyByZXF1ZXN0cyB3aWxsIGFsc28gYmUgdXNlIHRvIHNlcnZlIHNlc3Npb25zLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB7QGNvZGUgdHJ1ZX0gaXMgcmVjb21tZW5kZWQgYXMKLSAgICAgKiBpdCByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygb2JqZWN0IGNyZWF0aW9uIHJlcXVpcmVkIGZvciBlYWNoIHNlc3Npb24gYW5kIHNob3VsZCBnZW5lcmFsbHkgbGVhZCB0byBiZXR0ZXIKLSAgICAgKiBwZXJmb3JtYW5jZSBlc3BlY2lhbGx5IGlmIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZXJlIHdpbGwgYmUgbWFueSBzZXNzaW9ucyBiZWluZyBjcmVhdGVkIGFuZCBkZXN0cm95ZWQKLSAgICAgKiByYXBpZGx5LiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8ge0Bjb2RlIGZhbHNlfSBpcyBtb3N0bHkgcHJlc2VudCB0byBzdXBwb3J0IHNwZWNpZmljIHVzZSBjYXNlcyB0aGF0IG1heSByZXF1aXJlCi0gICAgICogZWFjaCBzZXNzaW9uIGhhdmluZyBpdHMgb3duIGVuZ2luZSBvciB0byBtYXRjaCBwcmV2aW91cyBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZSBvbGRlciBjaGFubmVsaXplcnMKLSAgICAgKiBwcm9kdWNlZCBwcmlvciB0byAzLjUuMC4KLSAgICAgKgotICAgICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIG5vdCByZXBsYWNlZC4KLSAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBib29sZWFuIHVzZUNvbW1vbkVuZ2luZUZvclNlc3Npb25zID0gdHJ1ZTsKLQotICAgIC8qKgogICAgICAqIENvbmZpZ3VyZWQgbWV0cmljcyBmb3IgR3JlbWxpbiBTZXJ2ZXIuCiAgICAgICovCiAgICAgcHVibGljIFNlcnZlck1ldHJpY3MgbWV0cmljcyA9IG51bGw7CkBAIC0zMTAsMjIgKzI2NCw2IEBACiAgICAgICovCiAgICAgcHVibGljIEJvb2xlYW4gZW5hYmxlQXVkaXRMb2cgPSBmYWxzZTsKIAotICAgIC8qKgotICAgICAqIEN1c3RvbSBzZXR0aW5ncyBmb3Ige0BsaW5rIE9wUHJvY2Vzc29yfSBpbXBsZW1lbnRhdGlvbnMuIEltcGxlbWVudGF0aW9ucyBhcmUgbG9hZGVkIHZpYQotICAgICAqIHtAbGluayBTZXJ2aWNlTG9hZGVyfSBidXQgY3VzdG9tIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBzdXBwbGllZCB0aHJvdWdoIHRoaXMgY29uZmlndXJhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxQcm9jZXNzb3JTZXR0aW5ncz4gcHJvY2Vzc29ycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgLyoqCi0gICAgICogRmluZCB0aGUge0BsaW5rIFByb2Nlc3NvclNldHRpbmdzfSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpZWQgY2xhc3MuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRyaWVzIHRoZW4gb25seSB0aGUKLSAgICAgKiBmaXJzdCBpcyByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgT3B0aW9uYWw8UHJvY2Vzc29yU2V0dGluZ3M+IG9wdGlvbmFsUHJvY2Vzc29yKGZpbmFsIENsYXNzPD8gZXh0ZW5kcyBPcFByb2Nlc3Nvcj4gY2xhenopIHsKLSAgICAgICAgcmV0dXJuIHByb2Nlc3NvcnMuc3RyZWFtKCkKLSAgICAgICAgICAgICAgICAuZmlsdGVyKHAgLT4gcC5jbGFzc05hbWUuZXF1YWxzKGNsYXp6LmdldENhbm9uaWNhbE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgLmZpbmRGaXJzdCgpOwotICAgIH0KLQogICAgIHB1YmxpYyBPcHRpb25hbDxTZXJ2ZXJNZXRyaWNzPiBvcHRpb25hbE1ldHJpY3MoKSB7CiAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZk51bGxhYmxlKG1ldHJpY3MpOwogICAgIH0KQEAgLTM2Miw3ICszMDAsNiBAQAogICAgICAgICBzZXR0aW5nc0Rlc2NyaXB0aW9uLmFkZFByb3BlcnR5UGFyYW1ldGVycygiZ3JhcGhzIiwgU3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MpOwogICAgICAgICBzZXR0aW5nc0Rlc2NyaXB0aW9uLmFkZFByb3BlcnR5UGFyYW1ldGVycygic2NyaXB0RW5naW5lcyIsIFN0cmluZy5jbGFzcywgU2NyaXB0RW5naW5lU2V0dGluZ3MuY2xhc3MpOwogICAgICAgICBzZXR0aW5nc0Rlc2NyaXB0aW9uLmFkZFByb3BlcnR5UGFyYW1ldGVycygic2VyaWFsaXplcnMiLCBTZXJpYWxpemVyU2V0dGluZ3MuY2xhc3MpOwotICAgICAgICBzZXR0aW5nc0Rlc2NyaXB0aW9uLmFkZFByb3BlcnR5UGFyYW1ldGVycygicHJvY2Vzc29ycyIsIFByb2Nlc3NvclNldHRpbmdzLmNsYXNzKTsKICAgICAgICAgY29uc3RydWN0b3IuYWRkVHlwZURlc2NyaXB0aW9uKHNldHRpbmdzRGVzY3JpcHRpb24pOwogCiAgICAgICAgIGZpbmFsIFR5cGVEZXNjcmlwdGlvbiBzZXJpYWxpemVyU2V0dGluZ3NEZXNjcmlwdGlvbiA9IG5ldyBUeXBlRGVzY3JpcHRpb24oU2VyaWFsaXplclNldHRpbmdzLmNsYXNzKTsKQEAgLTQyMSwyMyArMzU4LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDdXN0b20gY29uZmlndXJhdGlvbnMgZm9yIGFueSB7QGxpbmsgT3BQcm9jZXNzb3J9IGltcGxlbWVudGF0aW9ucy4gIFRoZXNlIHNldHRpbmdzIHdpbGwgbm90IGJlIHJlbGV2YW50Ci0gICAgICogdW5sZXNzIHRoZSByZWZlcmVuY2VkIHtAbGluayBPcFByb2Nlc3Nvcn0gaXMgYWN0dWFsbHkgbG9hZGVkIHZpYSB7QGxpbmsgU2VydmljZUxvYWRlcn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBQcm9jZXNzb3JTZXR0aW5ncyB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgZnVsbHkgcXVhbGlmaWVkIGNsYXNzIG5hbWUgb2YgYW4ge0BsaW5rIE9wUHJvY2Vzc29yfSBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgY2xhc3NOYW1lOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBIHNldCBvZiBjb25maWd1cmF0aW9ucyBhcyBleHBlY3RlZCBieSB0aGUge0BsaW5rIE9wUHJvY2Vzc29yfS4gIENvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlCi0gICAgICAgICAqIHtAbGluayBPcFByb2Nlc3Nvcn0gZm9yIGluZm9ybWF0aW9uIG9uIHdoYXQgdGhlc2UgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIFNldHRpbmdzIGZvciB0aGUge0Bjb2RlIFNjcmlwdEVuZ2luZX0uCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTY3JpcHRFbmdpbmVTZXR0aW5ncyB7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2F1dGgvQXV0aGVudGljYXRvci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoL0F1dGhlbnRpY2F0b3IuamF2YQppbmRleCBiNTExMzUyLi5mYjI1MWI1IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2F1dGgvQXV0aGVudGljYXRvci5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvYXV0aC9BdXRoZW50aWNhdG9yLmphdmEKQEAgLTE4LDE4ICsxOCwxNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGg7CiAKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNoYW5uZWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ2hhbm5lbGl6ZXI7CiAKIGltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiAvKioKLSAqIFByb3ZpZGVzIG1ldGhvZHMgcmVsYXRlZCB0byBhdXRoZW50aWNhdGlvbiBvZiBhIHJlcXVlc3QuICBJbXBsZW1lbnRhdGlvbnMgc2hvdWxkIHByb3ZpZGUgYSBTQVNMIGJhc2VkCi0gKiBhdXRoZW50aWNhdGlvbiBtZXRob2QsIGJ1dCBhIGhhbmRsZXIgY2FuIGNob29zZSB0byB1c2UgdGhlIHtAbGluayAjYXV0aGVudGljYXRlKE1hcCl9IG1ldGhvZCBkaXJlY3RseSBpZgotICogcmVxdWlyZWQgZm9yIHByb3RvY29scyB0aGF0IGRvbid0IGVhc2lseSBzdXBwb3J0IFNBU0wuCisgKiBQcm92aWRlcyBtZXRob2RzIHJlbGF0ZWQgdG8gYXV0aGVudGljYXRpb24gb2YgYSByZXF1ZXN0LiAgQSBoYW5kbGVyIHNob3VsZCB1c2UgdGhlIHtAbGluayAjYXV0aGVudGljYXRlKE1hcCl9CisgKiBtZXRob2QgZGlyZWN0bHkuIFNBU0wgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBidXQgdGhlIGludGVyZmFjZSByZW1haW5zIGF2YWlsYWJsZSBmb3IgY3VzdG9tIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMuCiAgKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCkBAIC02NSw2ICs2NCw5IEBACiAgICAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCBTQVNMIG5lZ290aWF0aW9uIGZvciBhIHNpbmdsZSBhdXRoZW50aWNhdGlvbiBhdHRlbXB0LgogICAgICAqIFNBU0wgaXMgc3RhdGVmdWwsIHNvIGEgbmV3IGluc3RhbmNlIHNob3VsZCBiZSB1c2VkIGZvciBlYWNoIGF0dGVtcHQuCiAgICAgICogTm9uLXRyaXZpYWwgaW1wbGVtZW50YXRpb25zIG1heSBkZWxlZ2F0ZSB0byBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgamF2YXguc2VjdXJpdHkuc2FzbC5TYXNsU2VydmVyfQorICAgICAqCisgICAgICogTk9URTogVGhpcyBpbnRlcmZhY2UgaXMgbm8gbG9uZ2VyIHVzZWQgYnkgZGVmYXVsdCBpbiB0aGUgR3JlbWxpbiBTZXJ2ZXIuIEl0IHJlbWFpbnMgaGVyZSBmb3IgdXNlIHdpdGggY3VzdG9tCisgICAgICogICAgICAgc2VydmVyIGltcGxlbWVudGF0aW9ucy4KICAgICAgKi8KICAgICBwdWJsaWMgaW50ZXJmYWNlIFNhc2xOZWdvdGlhdG9yCiAgICAgewpAQCAtNzcsOCArNzksOCBAQAogICAgICAgICAgKiBmaW5pc2hlZC4gSWYgc28sIGFuIHtAbGluayBBdXRoZW50aWNhdGVkVXNlcn0gaXMgb2J0YWluZWQgYnkgY2FsbGluZyB7QGxpbmsgI2dldEF1dGhlbnRpY2F0ZWRVc2VyKCl9IGFuZAogICAgICAgICAgKiB0aGF0IHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3RpdmUgY29ubmVjdGlvbi4gSWYgdGhlIG5lZ290aWF0aW9uIGlzIG5vdCB5ZXQgY29tcGxldGUsCiAgICAgICAgICAqIHRoZSBieXRlW10gaXMgcmV0dXJuZWQgdG8gdGhlIGNsaWVudCBhcyBhIGZ1cnRoZXIgY2hhbGxlbmdlIGluIGFuCi0gICAgICAgICAqIHtAbGluayBSZXNwb25zZU1lc3NhZ2V9IHdpdGgge0BsaW5rIFJlc3BvbnNlU3RhdHVzQ29kZSNBVVRIRU5USUNBVEV9LiBUaGlzIGNvbnRpbnVlcyB1bnRpbCB0aGUgbmVnb3RpYXRpb24KLSAgICAgICAgICogZG9lcyBjb21wbGV0ZSBvciBhbiBlcnJvciBpcyBlbmNvdW50ZXJlZC4KKyAgICAgICAgICoge0BsaW5rIFJlc3BvbnNlTWVzc2FnZX0gd2l0aCB7QGxpbmsgSHR0cFJlc3BvbnNlU3RhdHVzI1BST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEfS4gVGhpcyBjb250aW51ZXMgdW50aWwKKyAgICAgICAgICogdGhlIG5lZ290aWF0aW9uIGRvZXMgY29tcGxldGUgb3IgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgYnl0ZVtdIGV2YWx1YXRlUmVzcG9uc2UoZmluYWwgYnl0ZVtdIGNsaWVudFJlc3BvbnNlKSB0aHJvd3MgQXV0aGVudGljYXRpb25FeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvYXV0aHovQXV0aG9yaXplci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BdXRob3JpemVyLmphdmEKaW5kZXggNTkzZGFiMS4uY2Q1ZWQyOCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BdXRob3JpemVyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BdXRob3JpemVyLmphdmEKQEAgLTE4LDEwICsxOCw5IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aHo7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRlZFVzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKIAogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKQEAgLTM3LDI1ICszNiwxNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldHVwKGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBjb25maWcpIHRocm93cyBBdXRob3JpemF0aW9uRXhjZXB0aW9uOwogCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgYSB1c2VyIGlzIGF1dGhvcml6ZWQgdG8gaGF2ZSBhIGdyZW1saW4gYnl0ZWNvZGUgcmVxdWVzdCBmcm9tIGEgY2xpZW50IGFuc3dlcmVkIGFuZCByYWlzZXMgYW4KLSAgICAgKiB7QGxpbmsgQXV0aG9yaXphdGlvbkV4Y2VwdGlvbn0gaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuIFRoZSByZXR1cm5lZCBieXRlY2RlIGlzIHVzZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZgotICAgICAqIHRoZSByZXF1ZXN0LgotICAgICAqCi0gICAgICogQHBhcmFtIHVzZXIge0BsaW5rIEF1dGhlbnRpY2F0ZWRVc2VyfSB0aGF0IG5lZWRzIGF1dGhvcml6YXRpb24uCi0gICAgICogQHBhcmFtIGJ5dGVjb2RlIFRoZSBncmVtbGluIHtAbGluayBCeXRlY29kZX0gcmVxdWVzdCB0byBhdXRob3JpemUgdGhlIHVzZXIgZm9yLgotICAgICAqIEBwYXJhbSBhbGlhc2VzIEEge0BsaW5rIE1hcH0gd2l0aCBhIHNpbmdsZSBrZXkvdmFsdWUgcGFpciB0aGF0IG1hcHMgdGhlIG5hbWUgb2YgdGhlIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IGluIHRoZQotICAgICAqICAgICAgICAgICAgICAgIHtAbGluayBCeXRlY29kZX0gcmVxdWVzdCB0byBuYW1lIG9mIG9uZSBjb25maWd1cmVkIGluIEdyZW1saW4gU2VydmVyLgotICAgICAqIEByZXR1cm4gVGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHtAbGluayBCeXRlY29kZX0gdG8gYmUgdXNlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBCeXRlY29kZSBhdXRob3JpemUoZmluYWwgQXV0aGVudGljYXRlZFVzZXIgdXNlciwgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcykgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb247CisgICAgLy8gdG9kbzogaW1wbGVtZW50IGF1dGggZm9yIGdyZW1saW4tbGFuZworICAgIHB1YmxpYyBkZWZhdWx0IFN0cmluZyBhdXRob3JpemUoZmluYWwgQXV0aGVudGljYXRlZFVzZXIgdXNlciwgZmluYWwgU3RyaW5nIGdyZW1saW4sIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcykgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb24geworICAgICAgICByZXR1cm4gZ3JlbWxpbjsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciBhIHVzZXIgaXMgYXV0aG9yaXplZCB0byBoYXZlIGEgc2NyaXB0IHJlcXVlc3QgZnJvbSBhIGdyZW1saW4gY2xpZW50IGFuc3dlcmVkIGFuZCByYWlzZXMgYW4KICAgICAgKiB7QGxpbmsgQXV0aG9yaXphdGlvbkV4Y2VwdGlvbn0gaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCiAgICAgICoKICAgICAgKiBAcGFyYW0gdXNlciB7QGxpbmsgQXV0aGVudGljYXRlZFVzZXJ9IHRoYXQgbmVlZHMgYXV0aG9yaXphdGlvbi4KLSAgICAgKiBAcGFyYW0gbXNnIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gaW4gd2hpY2ggdGhlIHtAbGluayBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zfS5BUkdTX0dSRU1MSU4gYXJndW1lbnQgY2FuIGNvbnRhaW4gYW4gYXJiaXRyYXJ5IHN1Y2Nlc3Npb24gb2Ygc2NyaXB0IHN0YXRlbWVudHMuCisgICAgICogQHBhcmFtIG1zZyB7QGxpbmsgUmVxdWVzdE1lc3NhZ2V9IGluIHdoaWNoIHRoZSB7QGxpbmsgVG9rZW5zfS5BUkdTX0dSRU1MSU4gYXJndW1lbnQgY2FuIGNvbnRhaW4gYW4gYXJiaXRyYXJ5IHN1Y2Nlc3Npb24gb2Ygc2NyaXB0IHN0YXRlbWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXV0aG9yaXplKGZpbmFsIEF1dGhlbnRpY2F0ZWRVc2VyIHVzZXIsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb247CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9IdHRwQ2hhbm5lbGl6ZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9IdHRwQ2hhbm5lbGl6ZXIuamF2YQppbmRleCAwMjMzY2MxLi5lNTY0M2Y1IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvSHR0cENoYW5uZWxpemVyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL0h0dHBDaGFubmVsaXplci5qYXZhCkBAIC0xOSw2ICsxOSw5IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWw7CiAKIGltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXI7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBTZXJ2ZXJLZWVwQWxpdmVIYW5kbGVyOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5jb3JzLkNvcnNDb25maWdCdWlsZGVyOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5jb3JzLkNvcnNIYW5kbGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkFic3RyYWN0Q2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7CkBAIC0yNiw4ICsyOSwxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwQmFzaWNBdXRob3JpemF0aW9uSGFuZGxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwUmVxdWVzdElkSGFuZGxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwVXNlckFnZW50SGFuZGxlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuVHJhbnNhY3Rpb25NYW5hZ2VyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwT2JqZWN0QWdncmVnYXRvcjsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFNlcnZlckNvZGVjOwpAQCAtNDYsMTEgKzU0LDE2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEh0dHBDaGFubmVsaXplci5jbGFzcyk7CiAKICAgICBwcml2YXRlIEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyIGh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyOworICAgIHByaXZhdGUgSHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIgaHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIgPSBuZXcgSHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIoKTsKKyAgICBwcml2YXRlIEh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXIgaHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciA9IG5ldyBIdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyKHNlcmlhbGl6ZXJzKTsKKyAgICBwcml2YXRlIEh0dHBSZXF1ZXN0SWRIYW5kbGVyIGh0dHBSZXF1ZXN0SWRIYW5kbGVyID0gbmV3IEh0dHBSZXF1ZXN0SWRIYW5kbGVyKCk7CisgICAgcHJpdmF0ZSBIdHRwQ29udGVudENvbXByZXNzaW9uSGFuZGxlciBodHRwQ29udGVudEVuY29kZXIgPSBuZXcgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIoKTsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgU2VydmVyR3JlbWxpbkV4ZWN1dG9yIHNlcnZlckdyZW1saW5FeGVjdXRvcikgewogICAgICAgICBzdXBlci5pbml0KHNlcnZlckdyZW1saW5FeGVjdXRvcik7Ci0gICAgICAgIGh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyID0gbmV3IEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyKHNlcmlhbGl6ZXJzLCBncmVtbGluRXhlY3V0b3IsIGdyYXBoTWFuYWdlciwgc2V0dGluZ3MpOworICAgICAgICBodHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlciA9IG5ldyBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcigKKyAgICAgICAgICAgICAgICBncmVtbGluRXhlY3V0b3IsIGdyYXBoTWFuYWdlciwgc2V0dGluZ3MsIHNlcnZlckdyZW1saW5FeGVjdXRvci5nZXRUcmFuc2FjdGlvbk1hbmFnZXIoKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC02Myw5ICs3NiwxNiBAQAogICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpCiAgICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KG5ldyBMb2dnaW5nSGFuZGxlcigiaHR0cC1pbyIsIExvZ0xldmVsLkRFQlVHKSk7CiAKLSAgICAgICAgZmluYWwgSHR0cE9iamVjdEFnZ3JlZ2F0b3IgYWdncmVnYXRvciA9IG5ldyBIdHRwT2JqZWN0QWdncmVnYXRvcihzZXR0aW5ncy5tYXhDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiaHR0cC1yZXF1ZXN0aWQtaGFuZGxlciIsIGh0dHBSZXF1ZXN0SWRIYW5kbGVyKTsKKyAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiaHR0cC1rZWVwYWxpdmUtaGFuZGxlciIsIG5ldyBIdHRwU2VydmVyS2VlcEFsaXZlSGFuZGxlcigpKTsKKyAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiaHR0cC1jb3JzLWhhbmRsZXIiLCBuZXcgQ29yc0hhbmRsZXIoQ29yc0NvbmZpZ0J1aWxkZXIuZm9yQW55T3JpZ2luKCkuYnVpbGQoKSkpOworCisgICAgICAgIGZpbmFsIEh0dHBPYmplY3RBZ2dyZWdhdG9yIGFnZ3JlZ2F0b3IgPSBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3Ioc2V0dGluZ3MubWF4UmVxdWVzdENvbnRlbnRMZW5ndGgpOwogICAgICAgICBhZ2dyZWdhdG9yLnNldE1heEN1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzKHNldHRpbmdzLm1heEFjY3VtdWxhdGlvbkJ1ZmZlckNvbXBvbmVudHMpOwogICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0hUVFBfQUdHUkVHQVRPUiwgYWdncmVnYXRvcik7CisgICAgICAgIHBpcGVsaW5lLmFkZExhc3QoImh0dHAtcmVxdWVzdC1jaGVja2VyIiwgaHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIpOworICAgICAgICBwaXBlbGluZS5hZGRMYXN0KCJodHRwLXVzZXItYWdlbnQtaGFuZGxlciIsIG5ldyBIdHRwVXNlckFnZW50SGFuZGxlcigpKTsKKyAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiaHR0cC1jb21wcmVzc2lvbi1oYW5kbGVyIiwgaHR0cENvbnRlbnRFbmNvZGVyKTsKIAogICAgICAgICBpZiAoYXV0aGVudGljYXRvciAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBDYW5ub3QgYWRkIHRoZSBzYW1lIGhhbmRsZXIgaW5zdGFuY2UgbXVsdGlwbGUgdGltZXMgdW5sZXNzCkBAIC03OCwxMiArOTgsMTQgQEAKICAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0FVVEhFTlRJQ0FUT1IsIGF1dGhlbnRpY2F0aW9uSGFuZGxlcik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBUaGUgYXV0aG9yaXplciBuZWVkcyBhY2Nlc3MgdG8gdGhlIFJlcXVlc3RNZXNzYWdlIGJ1dCB0aGUgYXV0aGVudGljYXRvciBkb2Vzbid0LgorICAgICAgICBwaXBlbGluZS5hZGRMYXN0KCJodHRwLXJlcXVlc3RtZXNzYWdlLWRlY29kZXIiLCBodHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyKTsKKwogICAgICAgICBpZiAoYXV0aG9yaXplciAhPSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBDaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyIGF1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IEh0dHBCYXNpY0F1dGhvcml6YXRpb25IYW5kbGVyKGF1dGhvcml6ZXIpOwogICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9BVVRIT1JJWkVSLCBhdXRob3JpemF0aW9uSGFuZGxlcik7CiAgICAgICAgIH0KIAotICAgICAgICBwaXBlbGluZS5hZGRMYXN0KCJodHRwLXVzZXItYWdlbnQtaGFuZGxlciIsIG5ldyBIdHRwVXNlckFnZW50SGFuZGxlcigpKTsKICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgiaHR0cC1ncmVtbGluLWhhbmRsZXIiLCBodHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcik7CiAgICAgICAgIC8vIE5vdGUgdGhhdCBjaGFubmVsUmVhZCgpJ3MgZG8gbm90IHByb3BhZ2F0ZSBkb3duIHRoZSBwaXBlbGluZSBwYXN0IEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyCiAgICAgfQpAQCAtOTIsMTUgKzExNCw5IEBACiAgICAgICAgIGZpbmFsIFN0cmluZyBhdXRoSGFuZGxlckNsYXNzID0gc2V0dGluZ3MuYXV0aGVudGljYXRpb24uYXV0aGVudGljYXRpb25IYW5kbGVyOwogICAgICAgICBpZiAoYXV0aEhhbmRsZXJDbGFzcyA9PSBudWxsKSB7CiAgICAgICAgICAgICAvL0tlZXAgdGhpbmdzIGJhY2t3YXJkcyBjb21wYXRpYmxlCi0gICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcihhdXRoZW50aWNhdG9yLCBzZXR0aW5ncyk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcihhdXRoZW50aWNhdG9yLCBhdXRob3JpemVyLCBzZXR0aW5ncyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXV0aGVudGljYXRpb25IYW5kbGVyKHNldHRpbmdzKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGZpbmFsaXplKGZpbmFsIENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSkgewotICAgICAgICBwaXBlbGluZS5yZW1vdmUoUElQRUxJTkVfT1BfU0VMRUNUT1IpOwotICAgICAgICBwaXBlbGluZS5yZW1vdmUoUElQRUxJTkVfT1BfRVhFQ1VUT1IpOwotICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9VbmlmaWVkQ2hhbm5lbGl6ZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9VbmlmaWVkQ2hhbm5lbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg5M2QyYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvVW5pZmllZENoYW5uZWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsOwotCi1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUGlwZWxpbmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQWJzdHJhY3RDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5DaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5VbmlmaWVkSGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLldzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLlNlcnZlckdyZW1saW5FeGVjdXRvcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi0vKioKLSAqIEEge0BsaW5rIENoYW5uZWxpemVyfSB0aGF0IHN1cHBvcnRzIHdlYnNvY2tldCBhbmQgSFRUUCByZXF1ZXN0cyBhbmQgZG9lcyBzbyB3aXRoIHRoZSBtb3N0IHN0cmVhbWxpbmVkIHByb2Nlc3NpbmcKLSAqIG1vZGVsIGZvciBHcmVtbGluIFNlcnZlciBpbnRyb2R1Y2VkIHdpdGggMy41LjAuCi0gKgotICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgbm90IHJlcGxhY2VkLgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGNsYXNzIFVuaWZpZWRDaGFubmVsaXplciBleHRlbmRzIEFic3RyYWN0Q2hhbm5lbGl6ZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihVbmlmaWVkQ2hhbm5lbGl6ZXIuY2xhc3MpOwotCi0gICAgcHJpdmF0ZSBXc0FuZEh0dHBDaGFubmVsaXplckhhbmRsZXIgd3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyOwotICAgIHByaXZhdGUgVW5pZmllZEhhbmRsZXIgdW5pZmllZEhhbmRsZXI7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgUElQRUxJTkVfVU5JRklFRCA9ICJ1bmlmaWVkIjsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgU2VydmVyR3JlbWxpbkV4ZWN1dG9yIHNlcnZlckdyZW1saW5FeGVjdXRvcikgewotICAgICAgICBzdXBlci5pbml0KHNlcnZlckdyZW1saW5FeGVjdXRvcik7Ci0KLSAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSBVbmlmaWVkQ2hhbm5lbGl6ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UiKTsKLQotICAgICAgICB3c0FuZEh0dHBDaGFubmVsaXplckhhbmRsZXIgPSBuZXcgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyKCk7Ci0gICAgICAgIHdzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlci5pbml0KHNlcnZlckdyZW1saW5FeGVjdXRvciwgbmV3IEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyKHNlcmlhbGl6ZXJzLCBncmVtbGluRXhlY3V0b3IsIGdyYXBoTWFuYWdlciwgc2V0dGluZ3MpKTsKLQotICAgICAgICAvLyB0aGVzZSBoYW5kbGVycyBkb24ndCBzaGFyZSBhbnkgc3RhdGUgYW5kIGNhbiB0aHVzIGJlIGluaXRpYWxpemVkIG9uY2UgcGVyIHBpcGVsaW5lCi0gICAgICAgIHVuaWZpZWRIYW5kbGVyID0gbmV3IFVuaWZpZWRIYW5kbGVyKHNldHRpbmdzLCBncmFwaE1hbmFnZXIsIGdyZW1saW5FeGVjdXRvciwgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjb25maWd1cmUoZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0gICAgICAgIHdzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlci5jb25maWd1cmUocGlwZWxpbmUpOwotICAgICAgICBwaXBlbGluZS5hZGRBZnRlcihQSVBFTElORV9IVFRQX1JFUVVFU1RfREVDT0RFUiwgIldzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlciIsIHdzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZmluYWxpemUoZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0gICAgICAgIHN1cGVyLmZpbmFsaXplKHBpcGVsaW5lKTsKLQotICAgICAgICAvLyBjdXJyZW50bHkgdGhlIEFic3RyYWN0Q2hhbm5lbGl6ZXIgYWRkcyB0aGUgZm9sbG93aW5nIGhhbmRsZXJzIHdoaWNoIHByaW9yIHRvIDMuNS4wIHdlcmUgZXNzZW50aWFsbHkKLSAgICAgICAgLy8gcmVxdWlyZWQgYnkgYW55IEdyZW1saW4tcHJvY2Vzc2luZyBwaXBlbGluZSB5b3UgY291bGQgdGhpbmsgb2YgYmVjYXVzZSB0aGV5IHByb3ZpZGVkIHRoZSBmdW5jdGlvbmFsaXR5Ci0gICAgICAgIC8vIG9mIHRoZSBPcFByb2Nlc3NvciBpbmZyYXN0cnVjdHVyZS4gdGhlIE9wUHJvY2Vzc29yIGluZnJhc3RydWN0dXJlIGlzIG9uIGl0cyB3YXkgdG8gZGVwcmVjYXRpb24gYWZ0ZXIKLSAgICAgICAgLy8gVElOS0VSUE9QLTIyNDUgd2hpY2ggaW50cm9kdWNlZCB0aGlzIGNoYW5uZWxpemVyIGltcGxlbWVudGF0aW9uLiBzaW5jZSBBYnN0cmFjdENoYW5uZWxpemVyIGRvZXMgYSBuaWNlCi0gICAgICAgIC8vIGpvYiBvZiByaWdnaW5nIHVwIHRoZSByZXN0IG9mIHRoZSBwaXBlbGluZSBpdCBzZWVtZWQgdG8gbWFrZSBzZW5zZSB0byBsZWF2ZSBpdCB1bmNoYW5nZWQgdG8gZW5zdXJlIGl0Ci0gICAgICAgIC8vIGRvZXMgbm90IGJyZWFrIGFueW9uZSdzIGNoYW5uZWxpemVycyB0aGF0IG1heSBkZXBlbmQgb24gaXQgKGluY2x1ZGluZyBUaW5rZXJQb3AncyBhbmQgc2ltcGx5IHJlbW92ZQotICAgICAgICAvLyB0aG9zZSBiaXRzIGhlcmUuIGluIHRoZSBmdXR1cmUsIHdoZW4gd2UgcmVtb3ZlIE9wUHJvY2Vzc29yIHN0dWZmIGNvbXBsZXRlbHkgd2UgY2FuIGNsZWFuIHRoaXMgdXAuCi0gICAgICAgIHBpcGVsaW5lLnJlbW92ZShQSVBFTElORV9PUF9TRUxFQ1RPUik7Ci0gICAgICAgIHBpcGVsaW5lLnJlbW92ZShQSVBFTElORV9PUF9FWEVDVVRPUik7Ci0KLSAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9VTklGSUVELCB1bmlmaWVkSGFuZGxlcik7Ci0gICAgfQotCi0gICAgcHVibGljIFVuaWZpZWRIYW5kbGVyIGdldFVuaWZpZWRIYW5kbGVyKCkgewotICAgICAgICByZXR1cm4gdW5pZmllZEhhbmRsZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNJZGxlTW9uaXRvcigpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBjcmVhdGVJZGxlRGV0ZWN0aW9uTWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuIHdzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlci5nZXRXc0NoYW5uZWxpemVyKCkuY3JlYXRlSWRsZURldGVjdGlvbk1lc3NhZ2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV2ViU29ja2V0Q2hhbm5lbGl6ZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9XZWJTb2NrZXRDaGFubmVsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjU5NmQzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9XZWJTb2NrZXRDaGFubmVsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWw7Ci0KLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXI7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguUGluZ1dlYlNvY2tldEZyYW1lOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LldlYlNvY2tldERlY29kZXJDb25maWc7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQWJzdHJhY3RDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5DaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLkFsbG93QWxsQXV0aGVudGljYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuV2ViU29ja2V0QXV0aG9yaXphdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5TYXNsQXV0aGVudGljYXRpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuV3NHcmVtbGluQmluYXJ5UmVxdWVzdERlY29kZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5Xc0dyZW1saW5DbG9zZVJlcXVlc3REZWNvZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuR3JlbWxpblJlc3BvbnNlRnJhbWVFbmNvZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuV3NHcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5Xc0dyZW1saW5UZXh0UmVxdWVzdERlY29kZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5Xc1VzZXJBZ2VudEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUGlwZWxpbmU7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3RBZ2dyZWdhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVxdWVzdERlY29kZXI7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZUVuY29kZXI7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguV2ViU29ja2V0U2VydmVyUHJvdG9jb2xIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LmV4dGVuc2lvbnMuY29tcHJlc3Npb24uV2ViU29ja2V0U2VydmVyQ29tcHJlc3Npb25IYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIubG9nZ2luZy5Mb2dMZXZlbDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmxvZ2dpbmcuTG9nZ2luZ0hhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5TZXJ2ZXJHcmVtbGluRXhlY3V0b3I7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotLyoqCi0gKiBBIHtAbGluayBDaGFubmVsaXplcn0gdGhhdCBleHBvc2VzIGEgV2ViU29ja2V0LWJhc2VkIEdyZW1saW4gZW5kcG9pbnQgd2l0aCBhIGN1c3RvbSBzdWItcHJvdG9jb2wuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdENoYW5uZWxpemVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV2ViU29ja2V0Q2hhbm5lbGl6ZXIuY2xhc3MpOwotCi0gICAgcHJpdmF0ZSBHcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIgZ3JlbWxpblJlc3BvbnNlRnJhbWVFbmNvZGVyOwotICAgIHByaXZhdGUgV3NHcmVtbGluVGV4dFJlcXVlc3REZWNvZGVyIHdzR3JlbWxpblRleHRSZXF1ZXN0RGVjb2RlcjsKLSAgICBwcml2YXRlIFdzR3JlbWxpbkJpbmFyeVJlcXVlc3REZWNvZGVyIHdzR3JlbWxpbkJpbmFyeVJlcXVlc3REZWNvZGVyOwotICAgIHByaXZhdGUgV3NHcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIgd3NHcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXI7Ci0gICAgcHJpdmF0ZSBXc0dyZW1saW5DbG9zZVJlcXVlc3REZWNvZGVyIHdzR3JlbWxpbkNsb3NlUmVxdWVzdERlY29kZXI7Ci0gICAgcHJpdmF0ZSBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlciBhdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci0gICAgcHJpdmF0ZSBDaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyIGF1dGhvcml6YXRpb25IYW5kbGVyOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdChmaW5hbCBTZXJ2ZXJHcmVtbGluRXhlY3V0b3Igc2VydmVyR3JlbWxpbkV4ZWN1dG9yKSB7Ci0gICAgICAgIHN1cGVyLmluaXQoc2VydmVyR3JlbWxpbkV4ZWN1dG9yKTsKLQotICAgICAgICBncmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIgPSBuZXcgR3JlbWxpblJlc3BvbnNlRnJhbWVFbmNvZGVyKCk7Ci0gICAgICAgIHdzR3JlbWxpblRleHRSZXF1ZXN0RGVjb2RlciA9IG5ldyBXc0dyZW1saW5UZXh0UmVxdWVzdERlY29kZXIoc2VyaWFsaXplcnMpOwotICAgICAgICB3c0dyZW1saW5CaW5hcnlSZXF1ZXN0RGVjb2RlciA9IG5ldyBXc0dyZW1saW5CaW5hcnlSZXF1ZXN0RGVjb2RlcihzZXJpYWxpemVycyk7Ci0gICAgICAgIHdzR3JlbWxpbkNsb3NlUmVxdWVzdERlY29kZXIgPSBuZXcgV3NHcmVtbGluQ2xvc2VSZXF1ZXN0RGVjb2RlcihzZXJpYWxpemVycyk7Ci0gICAgICAgIHdzR3JlbWxpblJlc3BvbnNlRnJhbWVFbmNvZGVyID0gbmV3IFdzR3JlbWxpblJlc3BvbnNlRnJhbWVFbmNvZGVyKCk7Ci0KLSAgICAgICAgLy8gY29uZmlndXJlIGF1dGhlbnRpY2F0aW9uIC0gbnVsbCBtZWFucyBkb24ndCBib3RoZXIgdG8gYWRkIGF1dGhlbnRpY2F0aW9uIHRvIHRoZSBwaXBlbGluZQotICAgICAgICBhdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBhdXRoZW50aWNhdG9yLmdldENsYXNzKCkgPT0gQWxsb3dBbGxBdXRoZW50aWNhdG9yLmNsYXNzID8KLSAgICAgICAgICAgIG51bGwgOiBpbnN0YW50aWF0ZUF1dGhlbnRpY2F0aW9uSGFuZGxlcihzZXR0aW5ncyk7Ci0gICAgICAgIGlmIChhdXRob3JpemVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGF1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IFdlYlNvY2tldEF1dGhvcml6YXRpb25IYW5kbGVyKGF1dGhvcml6ZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY29uZmlndXJlKGZpbmFsIENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSkgewotCi0gICAgICAgIGlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QobmV3IExvZ2dpbmdIYW5kbGVyKCJsb2ctZW5jb2Rlci1hZ2dyZWdhdG9yIiwgTG9nTGV2ZWwuREVCVUcpKTsKLQotICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0hUVFBfUkVTUE9OU0VfRU5DT0RFUiwgbmV3IEh0dHBSZXNwb25zZUVuY29kZXIoKSk7Ci0KLSAgICAgICAgbG9nZ2VyLmRlYnVnKCJIdHRwUmVxdWVzdERlY29kZXIgc2V0dGluZ3MgLSBtYXhJbml0aWFsTGluZUxlbmd0aD17fSwgbWF4SGVhZGVyU2l6ZT17fSwgbWF4Q2h1bmtTaXplPXt9IiwKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXhJbml0aWFsTGluZUxlbmd0aCwgc2V0dGluZ3MubWF4SGVhZGVyU2l6ZSwgc2V0dGluZ3MubWF4Q2h1bmtTaXplKTsKLSAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9IVFRQX1JFUVVFU1RfREVDT0RFUiwgbmV3IEh0dHBSZXF1ZXN0RGVjb2RlcihzZXR0aW5ncy5tYXhJbml0aWFsTGluZUxlbmd0aCwgc2V0dGluZ3MubWF4SGVhZGVyU2l6ZSwgc2V0dGluZ3MubWF4Q2h1bmtTaXplKSk7Ci0KLSAgICAgICAgaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKQotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChuZXcgTG9nZ2luZ0hhbmRsZXIoImxvZy1kZWNvZGVyLWFnZ3JlZ2F0b3IiLCBMb2dMZXZlbC5ERUJVRykpOwotCi0gICAgICAgIGxvZ2dlci5kZWJ1ZygiSHR0cE9iamVjdEFnZ3JlZ2F0b3Igc2V0dGluZ3MgLSBtYXhDb250ZW50TGVuZ3RoPXt9LCBtYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzPXt9IiwKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXhDb250ZW50TGVuZ3RoLCBzZXR0aW5ncy5tYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzKTsKLSAgICAgICAgZmluYWwgSHR0cE9iamVjdEFnZ3JlZ2F0b3IgYWdncmVnYXRvciA9IG5ldyBIdHRwT2JqZWN0QWdncmVnYXRvcihzZXR0aW5ncy5tYXhDb250ZW50TGVuZ3RoKTsKLSAgICAgICAgYWdncmVnYXRvci5zZXRNYXhDdW11bGF0aW9uQnVmZmVyQ29tcG9uZW50cyhzZXR0aW5ncy5tYXhBY2N1bXVsYXRpb25CdWZmZXJDb21wb25lbnRzKTsKLSAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChQSVBFTElORV9IVFRQX0FHR1JFR0FUT1IsIGFnZ3JlZ2F0b3IpOwotICAgICAgICAvLyBBZGQgY29tcHJlc3Npb24gZXh0ZW5zaW9uIGZvciBXZWJTb2NrZXQgZGVmaW5lZCBpbiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzY5MgotICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX1dFQlNPQ0tFVF9TRVJWRVJfQ09NUFJFU1NJT04sIG5ldyBXZWJTb2NrZXRTZXJ2ZXJDb21wcmVzc2lvbkhhbmRsZXIoKSk7Ci0KLSAgICAgICAgLy8gc2V0dGluZyBjbG9zZU9uUHJvdG9jb2xWaW9sYXRpb24gdG8gZmFsc2UgcHJldmVudHMgY2F1c2luZyBhbGwgdGhlIG90aGVyIHJlcXVlc3RzIHVzaW5nIHRoZSBzYW1lIGNoYW5uZWwKLSAgICAgICAgLy8gdG8gZmFpbCB3aGVuIGEgc2luZ2xlIHJlcXVlc3QgY2F1c2VzIGEgcHJvdG9jb2wgdmlvbGF0aW9uLgotICAgICAgICBmaW5hbCBXZWJTb2NrZXREZWNvZGVyQ29uZmlnIHdzRGVjb2RlckNvbmZpZyA9IFdlYlNvY2tldERlY29kZXJDb25maWcubmV3QnVpbGRlcigpLgotICAgICAgICAgICAgICAgIGNsb3NlT25Qcm90b2NvbFZpb2xhdGlvbihmYWxzZSkuYWxsb3dFeHRlbnNpb25zKHRydWUpLm1heEZyYW1lUGF5bG9hZExlbmd0aChzZXR0aW5ncy5tYXhDb250ZW50TGVuZ3RoKS5idWlsZCgpOwotICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX1JFUVVFU1RfSEFORExFUiwgbmV3IFdlYlNvY2tldFNlcnZlclByb3RvY29sSGFuZGxlcihHUkVNTElOX0VORFBPSU5ULAotICAgICAgICAgICAgICAgIG51bGwsIGZhbHNlLCBmYWxzZSwgMTAwMDBMLCB3c0RlY29kZXJDb25maWcpKTsKLSAgICAgICAgcGlwZWxpbmUuYWRkTGFzdCgid3MtdXNlci1hZ2VudC1oYW5kbGVyIiwgbmV3IFdzVXNlckFnZW50SGFuZGxlcigpKTsKLSAgICAgICAgaWYgKGxvZ2dlci5pc0RlYnVnRW5hYmxlZCgpKQotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChuZXcgTG9nZ2luZ0hhbmRsZXIoImxvZy1hZ2dyZWdhdG9yLWVuY29kZXIiLCBMb2dMZXZlbC5ERUJVRykpOwotCi0gICAgICAgIHBpcGVsaW5lLmFkZExhc3QoIndzLWZyYW1lLWVuY29kZXIiLCB3c0dyZW1saW5SZXNwb25zZUZyYW1lRW5jb2Rlcik7Ci0gICAgICAgIHBpcGVsaW5lLmFkZExhc3QoInJlc3BvbnNlLWZyYW1lLWVuY29kZXIiLCBncmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIpOwotICAgICAgICBwaXBlbGluZS5hZGRMYXN0KCJyZXF1ZXN0LXRleHQtZGVjb2RlciIsIHdzR3JlbWxpblRleHRSZXF1ZXN0RGVjb2Rlcik7Ci0gICAgICAgIHBpcGVsaW5lLmFkZExhc3QoInJlcXVlc3QtYmluYXJ5LWRlY29kZXIiLCB3c0dyZW1saW5CaW5hcnlSZXF1ZXN0RGVjb2Rlcik7Ci0gICAgICAgIHBpcGVsaW5lLmFkZExhc3QoInJlcXVlc3QtY2xvc2UtZGVjb2RlciIsIHdzR3JlbWxpbkNsb3NlUmVxdWVzdERlY29kZXIpOwotCi0gICAgICAgIGlmIChsb2dnZXIuaXNEZWJ1Z0VuYWJsZWQoKSkKLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QobmV3IExvZ2dpbmdIYW5kbGVyKCJsb2ctYWdncmVnYXRvci1lbmNvZGVyIiwgTG9nTGV2ZWwuREVCVUcpKTsKLQotICAgICAgICBpZiAoYXV0aGVudGljYXRpb25IYW5kbGVyICE9IG51bGwpCi0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0FVVEhFTlRJQ0FUT1IsIGF1dGhlbnRpY2F0aW9uSGFuZGxlcik7Ci0KLSAgICAgICAgaWYgKGF1dGhvcml6YXRpb25IYW5kbGVyICE9IG51bGwpCi0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KFBJUEVMSU5FX0FVVEhPUklaRVIsIGF1dGhvcml6YXRpb25IYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0lkbGVNb25pdG9yKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUlkbGVEZXRlY3Rpb25NZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gbmV3IFBpbmdXZWJTb2NrZXRGcmFtZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXIgaW5zdGFudGlhdGVBdXRoZW50aWNhdGlvbkhhbmRsZXIoZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhlbnRpY2F0aW9uSGFuZGxlciA9IHNldHRpbmdzLmF1dGhlbnRpY2F0aW9uLmF1dGhlbnRpY2F0aW9uSGFuZGxlcjsKLSAgICAgICAgaWYgKGF1dGhlbnRpY2F0aW9uSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvL0tlZXAgdGhpbmdzIGJhY2t3YXJkcyBjb21wYXRpYmxlCi0gICAgICAgICAgICByZXR1cm4gbmV3IFNhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXIoYXV0aGVudGljYXRvciwgc2V0dGluZ3MpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1dGhlbnRpY2F0aW9uSGFuZGxlcihzZXR0aW5ncyk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV3NBbmRIdHRwQ2hhbm5lbGl6ZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9Xc0FuZEh0dHBDaGFubmVsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTRiMWVlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9Xc0FuZEh0dHBDaGFubmVsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuRXZlbnRMb29wR3JvdXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQWJzdHJhY3RDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuU2VydmVyR3JlbWxpbkV4ZWN1dG9yOwotCi0vKioKLSAqIEEgY2hhbm5lbGl6ZXIgZm9yIHBvcnQgdW5pZmljYXRpb24gd2l0aCB3ZWJzb2NrZXRzIGFuZCBodHRwCi0gKgotICogQGF1dGhvciBLZWl0aCBMb2huZXMgbG9obmVza0BnbWFpbC5jb20KLSAqLwotcHVibGljIGNsYXNzIFdzQW5kSHR0cENoYW5uZWxpemVyIGV4dGVuZHMgQWJzdHJhY3RDaGFubmVsaXplciB7Ci0KLSAgICBwcml2YXRlIFdzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlciBoYW5kbGVyOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdChmaW5hbCBTZXJ2ZXJHcmVtbGluRXhlY3V0b3Igc2VydmVyR3JlbWxpbkV4ZWN1dG9yKSB7Ci0gICAgICAgIHN1cGVyLmluaXQoc2VydmVyR3JlbWxpbkV4ZWN1dG9yKTsKLSAgICAgICAgaGFuZGxlciA9IG5ldyBXc0FuZEh0dHBDaGFubmVsaXplckhhbmRsZXIoKTsKLSAgICAgICAgaGFuZGxlci5pbml0KHNlcnZlckdyZW1saW5FeGVjdXRvciwgbmV3IEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyKHNlcmlhbGl6ZXJzLCBncmVtbGluRXhlY3V0b3IsIGdyYXBoTWFuYWdlciwgc2V0dGluZ3MpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjb25maWd1cmUoZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0gICAgICAgIGhhbmRsZXIuY29uZmlndXJlKHBpcGVsaW5lKTsKLSAgICAgICAgcGlwZWxpbmUuYWRkQWZ0ZXIoUElQRUxJTkVfSFRUUF9SRVFVRVNUX0RFQ09ERVIsICJXc0FuZEh0dHBDaGFubmVsaXplckhhbmRsZXIiLCBoYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0lkbGVNb25pdG9yKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUlkbGVEZXRlY3Rpb25NZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gaGFuZGxlci5nZXRXc0NoYW5uZWxpemVyKCkuY3JlYXRlSWRsZURldGVjdGlvbk1lc3NhZ2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9BYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCmluZGV4IDUzZTAwNzcuLjc1YjBlMjkgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9BYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9BYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCkBAIC0zMCwxNCArMzAsNiBAQAogICAgIHByb3RlY3RlZCBmaW5hbCBBdXRoZW50aWNhdG9yIGF1dGhlbnRpY2F0b3I7CiAgICAgcHJvdGVjdGVkIGZpbmFsIEF1dGhvcml6ZXIgYXV0aG9yaXplcjsKIAotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy41LjAsIHJlcGxhY2VkIGJ5IHtAbGluayAjQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXIoQXV0aGVudGljYXRvciwgQXV0aG9yaXplcil9LgotICAgICAqLwotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIEFic3RyYWN0QXV0aGVudGljYXRpb25IYW5kbGVyKGZpbmFsIEF1dGhlbnRpY2F0b3IgYXV0aGVudGljYXRvcikgewotICAgICAgICB0aGlzKGF1dGhlbnRpY2F0b3IsIG51bGwpOwotICAgIH0KLQogICAgIHB1YmxpYyBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlcihmaW5hbCBBdXRoZW50aWNhdG9yIGF1dGhlbnRpY2F0b3IsIGZpbmFsIEF1dGhvcml6ZXIgYXV0aG9yaXplcikgewogICAgICAgICB0aGlzLmF1dGhlbnRpY2F0b3IgPSBhdXRoZW50aWNhdG9yOwogICAgICAgICB0aGlzLmF1dGhvcml6ZXIgPSBhdXRob3JpemVyOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0Fic3RyYWN0U2Vzc2lvbi5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0Fic3RyYWN0U2Vzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWFhZWQ0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9BYnN0cmFjdFNlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgY29tLmNvZGFoYWxlLm1ldHJpY3MuVGltZXI7Ci1pbXBvcnQgZ3Jvb3Z5LmxhbmcuR3Jvb3Z5UnVudGltZUV4Y2VwdGlvbjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWw7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmV4Y2VwdGlvbi5FeGNlcHRpb25VdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuTWVzc2FnZVRleHRTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmVuZ2luZS5HcmVtbGluRXhlY3V0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzLlRpbWVkSW50ZXJydXB0VGltZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0RW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkphdmFUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5GYWlsdXJlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5WZXJpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkJ5dGVjb2RlSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmFwaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JlbWxpblNlcnZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLkF1dGhlbnRpY2F0ZWRVc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5FeGNlcHRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5UcmF2ZXJzZXJJdGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UcmFuc2FjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLlRlbXBvcmFyeUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLWltcG9ydCBvcmcuY29kZWhhdXMuZ3Jvb3Z5LmNvbnRyb2wuTXVsdGlwbGVDb21waWxhdGlvbkVycm9yc0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwotaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2NyaXB0LlNpbXBsZUJpbmRpbmdzOwotaW1wb3J0IGphdmEuaW8uSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50TWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wLlRYX0NPTU1JVDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmFwaE9wLlRYX1JPTExCQUNLOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5BYnN0cmFjdE9wUHJvY2Vzc29yLldSSVRFX1BBVVNFX1RJTUVfTVM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLkFic3RyYWN0T3BQcm9jZXNzb3Iud3JpdGVQYXVzZXNNZXRlcjsKLQotLyoqCi0gKiBBIGJhc2UgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFNlc3Npb259IHdoaWNoIG9mZmVycyBzb21lIGNvbW1vbiBmdW5jdGlvbmFsaXR5IHRoYXQgbWF0Y2hlcyB0eXBpY2FsIEdyZW1saW4gU2VydmVyCi0gKiByZXF1ZXN0IHJlc3BvbnNlIGV4cGVjdGF0aW9ucyBmb3Igc2NyaXB0LCBieXRlY29kZSBhbmQgZ3JhcGggb3BlcmF0aW9ucy4gVGhlIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIGV4dGVuZGVkIGJ1dAotICogdGFrZSBjYXJlIGluIHVuZGVyc3RhbmRpbmcgdGhlIHdheSB0aGF0IGRpZmZlcmVudCBtZXRob2RzIGFyZSBjYWxsZWQgYXMgdGhleSBkbyBkZXBlbmQgb24gb25lIGFub3RoZXIgYSBiaXQuIEl0Ci0gKiBtYXliZSBiZXN0IHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlIHRvIGRldGVybWluZSBob3cgYmVzdCB0byB1c2UgdGhpcyBjbGFzcyBvciB0byBleHRlbmQgZnJvbSB0aGUgaGlnaGVyIG9yZGVyCi0gKiBjbGFzc2VzIG9mIHtAbGluayBTaW5nbGVUYXNrU2Vzc2lvbn0gb3Ige0BsaW5rIE11bHRpVGFza1Nlc3Npb259LgotICoKLSAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIG5vdCByZXBsYWNlZC4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNlc3Npb24gaW1wbGVtZW50cyBTZXNzaW9uLCBBdXRvQ2xvc2VhYmxlIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQWJzdHJhY3RTZXNzaW9uLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgYXVkaXRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmVtbGluU2VydmVyLkFVRElUX0xPR0dFUl9OQU1FKTsKLQotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBzZXNzaW9uSWRPblJlcXVlc3Q7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDaGFubmVsIGluaXRpYWxDaGFubmVsOwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiB0cmFuc2FjdGlvbk1hbmFnZWQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgc2Vzc2lvbklkOwotICAgIHByaXZhdGUgZmluYWwgQXRvbWljUmVmZXJlbmNlPFNjaGVkdWxlZEZ1dHVyZTw/Pj4gc2Vzc2lvbkNhbmNlbEZ1dHVyZSA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PigpOwotICAgIHByaXZhdGUgZmluYWwgQXRvbWljUmVmZXJlbmNlPEZ1dHVyZTw/Pj4gc2Vzc2lvbkZ1dHVyZSA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PigpOwotICAgIHByaXZhdGUgbG9uZyBhY3R1YWxUaW1lb3V0TGVuZ3RoV2hlbkNsb3NlZCA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgc2Vzc2lvbiB0aHJlYWQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCB0aGF0IGlzIHJ1bm5pbmcgdGhlIHNlc3Npb24gYW5kIHNob3VsZCBiZSBzZXQgYnkgYW4KLSAgICAgKiBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUge0BsaW5rICNydW4oKX0gbWV0aG9kLgotICAgICAqLwotICAgIHByb3RlY3RlZCBUaHJlYWQgc2Vzc2lvblRocmVhZDsKLSAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb247Ci0gICAgcHJvdGVjdGVkIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxDbG9zZVJlYXNvbj4gY2xvc2VSZWFzb24gPSBuZXcgQXRvbWljUmVmZXJlbmNlPD4oKTsKLSAgICBwcm90ZWN0ZWQgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlcjsKLSAgICBwcm90ZWN0ZWQgZmluYWwgQ29uY3VycmVudE1hcDxTdHJpbmcsIFNlc3Npb24+IHNlc3Npb25zOwotICAgIHByb3RlY3RlZCBmaW5hbCBTZXQ8U3RyaW5nPiBhbGlhc2VzVXNlZEJ5U2Vzc2lvbiA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICBwcm90ZWN0ZWQgZmluYWwgQXRvbWljQm9vbGVhbiBzZXNzaW9uVGFza1N0YXJ0ZWQgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgcmVhc29uIHRoYXQgYSBwYXJ0aWN1bGFyIHNlc3Npb24gY2xvc2VkLiBUaGUgcmVhc29uIGZvciB0aGUgY2xvc2UgaXMgZ2VuZXJhbGx5IG5vdCBpbXBvcnRhbnQgYXMgYQotICAgICAqIGZpbmFsIGRpc3Bvc2l0aW9uIGZvciB0aGUge0BsaW5rIFNlc3Npb259IGluc3RhbmNlIGFuZCBpcyBtb3JlIHVzZWZ1bCBpbiBhaWRpbmcgZmxvdyBjb250cm9sIGR1cmluZyB0aGUKLSAgICAgKiBjbG9zZSBwcm9jZXNzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBlbnVtIENsb3NlUmVhc29uIHsKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHNlc3Npb24gZXhpdHMgaW4gYSBmYXNoaW9uIHRoYXQgZGlkIG5vdCBwcmVjaXBpdGF0ZSBmcm9tIHNvbWUgZm9ybSBvZiBpbnRlcnJ1cHRpb24sIHRpbWVvdXQgb3IKLSAgICAgICAgICogZXhjZXB0aW9uLCBpLmUuIGl0IGlzIHNpbXBseSBhbGxvd2VkIHRvIHByb2Nlc3MgdG8gYW4gZXhpdCB0aHJvdWdoIGl0cyBub3JtYWwgZXhlY3V0aW9uIGZsb3cuIFRoaXMgc3RhdHVzCi0gICAgICAgICAqIG1heSBvciBtYXkgbm90IGJlIHBvc3NpYmxlIGdpdmVuIHRoZSBjb250ZXh0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gRm9yIGV4YW1wbGUsIGEge0BsaW5rIE11bHRpVGFza1Nlc3Npb259Ci0gICAgICAgICAqIG5lZWRzIHRvIGJlIGludGVycnVwdGVkIHRvIHN0b3AgcHJvY2Vzc2luZy4KLSAgICAgICAgICovCi0gICAgICAgIEVYSVRfUFJPQ0VTU0lORywKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHNlc3Npb24gd2FzIGludGVycnVwdGVkIGJ5IHRoZSBjaGFubmVsIGNsb3NpbmcsIHdoaWNoIGNhbiBiZSBzb21ldGhpbmcgaW5pdGlhdGVkIGJ5IGNsb3NpbmcgdGhlCi0gICAgICAgICAqIHtAY29kZSBDbGllbnR9IG9yIG1pZ2h0IGJlIHRyaWdnZXJlZCBieSB0aGUgc2VydmVyLiBUaGlzIG1heSBub3QgYmUgY29uc2lkZXJlZCBhbiBlcnJvciBzaXR1YXRpb24gYW5kCi0gICAgICAgICAqIGRlcGVuZGluZyBvbiBjb250ZXh0LCBtaWdodCBiZSBzaW1pbGFyIHRvIGEge0BsaW5rICNFWElUX1BST0NFU1NJTkd9IHRlcm1pbmF0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgQ0hBTk5FTF9DTE9TRUQsCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBzZXNzaW9uIGVuY291bnRlcmVkIGFuIGV4Y2VwdGlvbiByZWxhdGVkIHRvIGV4ZWN1dGlvbiBsaWtlIGEgc2NyaXB0IGVycm9yLCB0cmF2ZXJzYWwgaXRlcmF0aW9uIHByb2JsZW0sCi0gICAgICAgICAqIHNlcmlhbGl6YXRpb24gaXNzdWUsIGV0Yy4KLSAgICAgICAgICovCi0gICAgICAgIFBST0NFU1NJTkdfRVhDRVBUSU9OLAotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgc2Vzc2lvbiB3YXMgaW50ZXJydXB0ZWQgYnkgdGhlIHNlc3Npb24gbGlmZXRpbWUgdGltZW91dC4KLSAgICAgICAgICovCi0gICAgICAgIFNFU1NJT05fVElNRU9VVCwKLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHNlc3Npb24gd2FzIGludGVycnVwdGVkIGJ5IHRoZSByZXF1ZXN0IHRpbWVvdXQuCi0gICAgICAgICAqLwotICAgICAgICBSRVFVRVNUX1RJTUVPVVQKLSAgICB9Ci0KLSAgICBBYnN0cmFjdFNlc3Npb24oZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2ssIGZpbmFsIFN0cmluZyBzZXNzaW9uSWQsCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdHJhbnNhY3Rpb25NYW5hZ2VkLAotICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb25jdXJyZW50TWFwPFN0cmluZywgU2Vzc2lvbj4gc2Vzc2lvbnMpIHsKLSAgICAgICAgLy8gdGhpcyBvbmx5IGFwcGxpZXMgdG8gc2Vzc2lvbnMKLSAgICAgICAgdGhpcy5tYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24gPSAoYm9vbGVhbikgc2Vzc2lvblRhc2suZ2V0UmVxdWVzdE1lc3NhZ2UoKS4KLSAgICAgICAgICAgICAgICBvcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfTUFJTlRBSU5fU1RBVEVfQUZURVJfRVhDRVBUSU9OKS5vckVsc2UoZmFsc2UpOwotICAgICAgICB0aGlzLnNlc3Npb25JZE9uUmVxdWVzdCA9IHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX1NFU1NJT04pLmlzUHJlc2VudCgpOwotICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTWFuYWdlZCA9IHRyYW5zYWN0aW9uTWFuYWdlZDsKLSAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBzZXNzaW9uSWQ7Ci0gICAgICAgIHRoaXMuaW5pdGlhbENoYW5uZWwgPSBzZXNzaW9uVGFzay5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5jaGFubmVsKCk7Ci0KLSAgICAgICAgLy8gY2xvc2Ugc2Vzc2lvbiBpZiB0aGUgY2hhbm5lbCBjbG9zZXMgdG8gY2xlYW51cCBhbmQgY2xvc2UgdHJhbnNhY3Rpb25zCi0gICAgICAgIHRoaXMuaW5pdGlhbENoYW5uZWwuY2xvc2VGdXR1cmUoKS5hZGRMaXN0ZW5lcihmIC0+IHsKLSAgICAgICAgICAgIGlmIChjbG9zZVJlYXNvbi5jb21wYXJlQW5kU2V0KG51bGwsIENsb3NlUmVhc29uLkNIQU5ORUxfQ0xPU0VEKSkgewotICAgICAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICB0aGlzLnNlc3Npb25zID0gc2Vzc2lvbnM7Ci0gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gc2Vzc2lvblRhc2suZ2V0R3JhcGhNYW5hZ2VyKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN5bmNocm9uaXplZCB2b2lkIGNhbmNlbChmaW5hbCBib29sZWFuIG1heUludGVycnVwdElmUnVubmluZykgewotICAgICAgICBmaW5hbCBGdXR1cmVUYXNrPD8+IHNmID0gKEZ1dHVyZVRhc2spIHNlc3Npb25GdXR1cmUuZ2V0KCk7Ci0gICAgICAgIGlmIChzZiAhPSBudWxsICYmICFzZi5pc0RvbmUoKSkgewotICAgICAgICAgICAgc2YuY2FuY2VsKG1heUludGVycnVwdElmUnVubmluZyk7Ci0KLSAgICAgICAgICAgIGlmICghc2Vzc2lvblRhc2tTdGFydGVkLmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgc2VuZFRpbWVvdXRSZXNwb25zZUZvclVuY29tbWVuY2VkVGFzaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2FjdGlvbk1hbmFnZWQoKSB7Ci0gICAgICAgIHJldHVybiB0cmFuc2FjdGlvbk1hbmFnZWQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTZXNzaW9uSWQoKSB7Ci0gICAgICAgIHJldHVybiBzZXNzaW9uSWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNCb3VuZFRvKGZpbmFsIENoYW5uZWwgY2hhbm5lbCkgewotICAgICAgICByZXR1cm4gY2hhbm5lbCA9PSBpbml0aWFsQ2hhbm5lbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgbG9uZyBnZXRBY3R1YWxUaW1lb3V0TGVuZ3RoV2hlbkNsb3NlZCgpIHsKLSAgICAgICAgcmV0dXJuIGFjdHVhbFRpbWVvdXRMZW5ndGhXaGVuQ2xvc2VkOwotICAgIH0KLQotICAgIHB1YmxpYyBPcHRpb25hbDxDbG9zZVJlYXNvbj4gZ2V0Q2xvc2VSZWFzb24oKSB7Ci0gICAgICAgIHJldHVybiBPcHRpb25hbC5vZk51bGxhYmxlKGNsb3NlUmVhc29uLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBzY3JpcHQgZW5naW5lIGZyb20gdGhlIGNhY2hlZCBvbmUgaW4gdGhlIHtAbGluayBHcmVtbGluRXhlY3V0b3J9LgotICAgICAqLwotICAgIHB1YmxpYyBHcmVtbGluU2NyaXB0RW5naW5lIGdldFNjcmlwdEVuZ2luZShmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaywgZmluYWwgU3RyaW5nIGxhbmd1YWdlKSB7Ci0gICAgICAgIHJldHVybiBzZXNzaW9uVGFzay5nZXRHcmVtbGluRXhlY3V0b3IoKS5nZXRTY3JpcHRFbmdpbmVNYW5hZ2VyKCkuZ2V0RW5naW5lQnlOYW1lKGxhbmd1YWdlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXNwb25kIHRvIHRoZSBjbGllbnQgd2l0aCB0aGUgc3BlY2lmaWMgdGltZW91dCByZXNwb25zZSBmb3IgdGhpcyBTZXNzaW9uIGltcGxlbWVudGF0aW9uLgotICAgICAqIFRoaXMgaXMgZm9yIHNpdHVhdGlvbnMgd2hlcmUgdGhlIFNlc3Npb24gaGFzbid0IHN0YXJ0ZWQgcnVubmluZy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBzZW5kVGltZW91dFJlc3BvbnNlRm9yVW5jb21tZW5jZWRUYXNrKCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRTZXNzaW9uQ2FuY2VsRnV0dXJlKGZpbmFsIFNjaGVkdWxlZEZ1dHVyZTw/PiBmKSB7Ci0gICAgICAgIGlmICghc2Vzc2lvbkNhbmNlbEZ1dHVyZS5jb21wYXJlQW5kU2V0KG51bGwsIGYpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiU2Vzc2lvbiBjYW5jZWxsYXRpb24gZnV0dXJlIGlzIGFscmVhZHkgc2V0Iik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0U2Vzc2lvbkZ1dHVyZShmaW5hbCBGdXR1cmU8Pz4gZikgewotICAgICAgICBpZiAoIXNlc3Npb25GdXR1cmUuY29tcGFyZUFuZFNldChudWxsLCBmKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlNlc3Npb24gZnV0dXJlIGlzIGFscmVhZHkgc2V0Iik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHRyaWdnZXJUaW1lb3V0KGZpbmFsIGxvbmcgdGltZW91dCwgZmluYWwgYm9vbGVhbiBjYXVzZWRCeVNlc3Npb24pIHsKLSAgICAgICAgLy8gdHJpZ2dlcmluZyB0aW1lb3V0IHRyaWdnZXJzIHRoZSBzdG9wIG9mIHRoZSBzZXNzaW9uIHdoaWNoIHdpbGwgZW5kIGluIGNsb3NlKCkKLSAgICAgICAgLy8gZm9yIGZpbmFsIGNsZWFudXAKLSAgICAgICAgZmluYWwgRnV0dXJlPD8+IGYgPSBzZXNzaW9uRnV0dXJlLmdldCgpOwotICAgICAgICBpZiAoZiAhPSBudWxsICYmICFmLmlzRG9uZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY2xvc2VSZWFzb24uY29tcGFyZUFuZFNldChudWxsLCBjYXVzZWRCeVNlc3Npb24gPyBDbG9zZVJlYXNvbi5TRVNTSU9OX1RJTUVPVVQgOiBDbG9zZVJlYXNvbi5SRVFVRVNUX1RJTUVPVVQpKSB7Ci0gICAgICAgICAgICAgICAgYWN0dWFsVGltZW91dExlbmd0aFdoZW5DbG9zZWQgPSB0aW1lb3V0OwotCi0gICAgICAgICAgICAgICAgLy8gaWYgY2F1c2VkIGJ5IGEgc2Vzc2lvbiB0aW1lb3V0IGZvciBhIE11bHRpVGFza1Nlc3Npb24gT1IgaWYgaXQgaXMgYSByZXF1ZXN0IHRpbWVvdXQgZm9yIGEKLSAgICAgICAgICAgICAgICAvLyBTaW5nbGVUYXNrU2Vzc2lvbiByZXF1ZXN0IHRoZW4gd2UgY2FuIGp1c3Qgc3RyYWlnaHQgY2FuY2VsKCkgdGhlIHNlc3Npb24gaW5zdGFuY2UKLSAgICAgICAgICAgICAgICBpZiAoY2F1c2VkQnlTZXNzaW9uIHx8ICFzZXNzaW9uSWRPblJlcXVlc3QpCi0gICAgICAgICAgICAgICAgICAgIGNhbmNlbCh0cnVlKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gYm90aCBNdWx0aVRhc2tTZXNzaW9uIGFuZCBTaW5nbGVUYXNrU2Vzc2lvbiB0aGUgdGhyZWFkIGdldHMgc2V0IGltbWVkaWF0ZWx5IGF0IHRoZSBzdGFydAotICAgICAgICAgICAgICAgICAgICAvLyBvZiBydW4oKSBhcyBpdCBzaG91bGQgKHRob3VnaCAic2luZ2xlIiBoYXMgbGl0dGxlIG5lZWQgZm9yIGl0KS4gQXMgdHJpZ2dlclRpbWVvdXQoKSBmb3IgYQotICAgICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0IE11bHRpVGFza1Nlc3Npb24gY2FuIG9ubHkgYmUgY2FsbGVkIEFGVEVSIHdlIGFyZSBkZWVwIGluIHRoZSBydW4oKSB0aGVyZSBzaG91bGQgYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gbm8gY2hhbmNlIG9mIHJhY2UgY29uZGl0aW9ucyBvciBzaXR1YXRpb25zIHdoZXJlIHRoZSBzZXNzaW9uVGhyZWFkIGlzIG51bGwgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb25UaHJlYWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblRocmVhZC5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zygie30gaXMgYSB7fSB3aGljaCBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgYXMgdGhlIHRocmVhZCBydW5uaW5nIHRoZSBzZXNzaW9uIGhhcyBub3QgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZW4gc2V0IC0gcGxlYXNlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG5vdCBkZXNpcmFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsIHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgcHJvY2VzcyhmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaykgdGhyb3dzIFNlc3Npb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBzZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGFyZ3MgPSBtc2cuZ2V0QXJncygpOwotICAgICAgICBmaW5hbCBPYmplY3QgZ3JlbWxpblRvRXhlY3V0ZSA9IGFyZ3MuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pOwotCi0gICAgICAgIC8vIGZvciBzdHJpY3QgdHJhbnNhY3Rpb25zIHRyYWNrIHRoZSBhbGlhc2VzIHVzZWQgc28gdGhhdCB3ZSBjYW4gY29tbWl0IHRoZW0gYW5kIG9ubHkgdGhlbSBvbiBjbG9zZSgpCi0gICAgICAgIGlmIChzZXNzaW9uVGFzay5nZXRTZXR0aW5ncygpLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCkKLSAgICAgICAgICAgIG1zZy5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQUxJQVNFUykuaWZQcmVzZW50KG0gLT4gYWxpYXNlc1VzZWRCeVNlc3Npb24uYWRkQWxsKCgoTWFwPFN0cmluZyxTdHJpbmc+KSBtKS52YWx1ZXMoKSkpOwotCi0gICAgICAgIGZpbmFsIFRpbWVyLkNvbnRleHQgdGltZXIgPSBnZXRNZXRyaWNzVGltZXIoc2Vzc2lvblRhc2spOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gaXR0eSBpcyBvcHRpb25hbCBhcyBCeXRlY29kZSBjb3VsZCBiZSBhICJncmFwaCBvcGVyYXRpb24iIHJhdGhlciB0aGFuIGEgVHJhdmVyc2FsLiBncmFwaCBvcGVyYXRpb25zCi0gICAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIGJlIGl0ZXJhdGVkIGFuZCBoYW5kbGUgdGhlaXIgb3duIGxpZmVjeWNsZQotICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8SXRlcmF0b3I8Pz4+IGl0dHkgPSBncmVtbGluVG9FeGVjdXRlIGluc3RhbmNlb2YgQnl0ZWNvZGUgPwotICAgICAgICAgICAgICAgICAgICBmcm9tQnl0ZWNvZGUoc2Vzc2lvblRhc2ssIChCeXRlY29kZSkgZ3JlbWxpblRvRXhlY3V0ZSkgOgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbC5vZihmcm9tU2NyaXB0KHNlc3Npb25UYXNrLCAoU3RyaW5nKSBncmVtbGluVG9FeGVjdXRlKSk7Ci0KLSAgICAgICAgICAgIHByb2Nlc3NBdWRpdExvZyhzZXNzaW9uVGFzay5nZXRTZXR0aW5ncygpLCBzZXNzaW9uVGFzay5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKSwgZ3JlbWxpblRvRXhlY3V0ZSk7Ci0KLSAgICAgICAgICAgIGlmIChpdHR5LmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIGhhbmRsZUl0ZXJhdG9yKHNlc3Npb25UYXNrLCBpdHR5LmdldCgpKTsKLSAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgIGhhbmRsZUV4Y2VwdGlvbihzZXNzaW9uVGFzaywgdCk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICB0aW1lci5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVFeGNlcHRpb24oZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2ssIGZpbmFsIFRocm93YWJsZSB0KSB0aHJvd3MgU2Vzc2lvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmICh0IGluc3RhbmNlb2YgU2Vzc2lvbkV4Y2VwdGlvbikgdGhyb3cgKFNlc3Npb25FeGNlcHRpb24pIHQ7Ci0KLSAgICAgICAgZmluYWwgT3B0aW9uYWw8VGhyb3dhYmxlPiBwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24gPSBkZXRlcm1pbmVJZlNwZWNpYWxFeGNlcHRpb24odCk7Ci0gICAgICAgIGlmIChwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24uaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBzcGVjaWFsID0gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmdldCgpOwotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgc3BlY2lhbFJlc3BvbnNlTXNnID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkpLgotICAgICAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlKHNwZWNpYWwuZ2V0TWVzc2FnZSgpKS4KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHNwZWNpYWwpOwotICAgICAgICAgICAgaWYgKHNwZWNpYWwgaW5zdGFuY2VvZiBUZW1wb3JhcnlFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICBzcGVjaWFsUmVzcG9uc2VNc2cuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RFTVBPUkFSWSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNpYWwgaW5zdGFuY2VvZiBGYWlsdXJlKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgRmFpbHVyZSBmYWlsdXJlID0gKEZhaWx1cmUpIHNwZWNpYWw7Ci0gICAgICAgICAgICAgICAgc3BlY2lhbFJlc3BvbnNlTXNnLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9GQUlMX1NURVApLgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXR0cmlidXRlKFRva2Vucy5TVEFUVVNfQVRUUklCVVRFX0ZBSUxfU1RFUF9NRVNTQUdFLCBmYWlsdXJlLmZvcm1hdCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKHNwZWNpYWwuZ2V0TWVzc2FnZSgpLCBzcGVjaWFsUmVzcG9uc2VNc2cuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKHQpOwotCi0gICAgICAgIGlmIChyb290IGluc3RhbmNlb2YgVGltZWRJbnRlcnJ1cHRUaW1lb3V0RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAvLyBvY2N1cnMgd2hlbiB0aGUgVGltZWRJbnRlcnJ1cHRDdXN0b21pemVyUHJvdmlkZXIgaXMgaW4gcGxheQotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgdGltZW91dCBvY2N1cnJlZCB3aXRoaW4gdGhlIHNjcmlwdCBkdXJpbmcgZXZhbHVhdGlvbiBvZiBbJXNdIC0gY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgbGltaXQgZ2l2ZW4gdG8gVGltZWRJbnRlcnJ1cHRDdXN0b21pemVyUHJvdmlkZXIiLAotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKG1zZywgcm9vdCwgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVElNRU9VVCkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIlRpbWVvdXQgZHVyaW5nIHNjcmlwdCBldmFsdWF0aW9uIHRyaWdnZXJlZCBieSBUaW1lZEludGVycnVwdEN1c3RvbWl6ZXJQcm92aWRlciIpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocm9vdCBpbnN0YW5jZW9mIFRpbWVvdXRFeGNlcHRpb24pIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJTY3JpcHQgZXZhbHVhdGlvbiBleGNlZWRlZCB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQgZm9yIHJlcXVlc3QgWyVzXSIsCi0gICAgICAgICAgICAgICAgICAgIHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeGNlcHRpb24oZXJyb3JNZXNzYWdlLCByb290LCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoc2Vzc2lvblRhc2suZ2V0UmVxdWVzdE1lc3NhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSh0LmdldE1lc3NhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyb290IGluc3RhbmNlb2YgSW50ZXJydXB0ZWRFeGNlcHRpb24gfHwKLSAgICAgICAgICAgICAgICByb290IGluc3RhbmNlb2YgVHJhdmVyc2FsSW50ZXJydXB0ZWRFeGNlcHRpb24gfHwKLSAgICAgICAgICAgICAgICByb290IGluc3RhbmNlb2YgSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbikgewotICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJQcm9jZXNzaW5nIGludGVycnVwdGVkIGJ1dCB0aGUgcmVhc29uIHdoeSB3YXMgbm90IGtub3duIjsKLSAgICAgICAgICAgIHN3aXRjaCAoY2xvc2VSZWFzb24uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENIQU5ORUxfQ0xPU0VEOgotICAgICAgICAgICAgICAgICAgICBtc2cgPSAiUHJvY2Vzc2luZyBpbnRlcnJ1cHRlZCBiZWNhdXNlIHRoZSBjaGFubmVsIHdhcyBjbG9zZWQiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNFU1NJT05fVElNRU9VVDoKLSAgICAgICAgICAgICAgICAgICAgbXNnID0gU3RyaW5nLmZvcm1hdCgiU2Vzc2lvbiBjbG9zZWQgLSAlcyAtIHNlc3Npb25MaWZldGltZVRpbWVvdXQgb2YgJXMgbXMgZXhjZWVkZWQiLCBzZXNzaW9uSWQsIGFjdHVhbFRpbWVvdXRMZW5ndGhXaGVuQ2xvc2VkKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBSRVFVRVNUX1RJTUVPVVQ6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9IFN0cmluZy5mb3JtYXQoIkV2YWx1YXRpb24gZXhjZWVkZWQgdGltZW91dCB0aHJlc2hvbGQgb2YgJXMgbXMiLCBhY3R1YWxUaW1lb3V0TGVuZ3RoV2hlbkNsb3NlZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGNvZGUgPSBjbG9zZVJlYXNvbi5nZXQoKSA9PSBDbG9zZVJlYXNvbi5TRVNTSU9OX1RJTUVPVVQgfHwgY2xvc2VSZWFzb24uZ2V0KCkgPT0gQ2xvc2VSZWFzb24uUkVRVUVTVF9USU1FT1VUID8KLSAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUIDogUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUjsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKG1zZywgcm9vdCwgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKGNvZGUpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJvb3QgaW5zdGFuY2VvZiBNdWx0aXBsZUNvbXBpbGF0aW9uRXJyb3JzRXhjZXB0aW9uICYmIHJvb3QuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJNZXRob2QgdG9vIGxhcmdlIikgJiYKLSAgICAgICAgICAgICAgICAoKE11bHRpcGxlQ29tcGlsYXRpb25FcnJvcnNFeGNlcHRpb24pIHJvb3QpLmdldEVycm9yQ29sbGVjdG9yKCkuZ2V0RXJyb3JDb3VudCgpID09IDEpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJUaGUgR3JlbWxpbiBzdGF0ZW1lbnQgdGhhdCB3YXMgc3VibWl0dGVkIGV4Y2VlZHMgdGhlIG1heGltdW0gY29tcGlsYXRpb24gc2l6ZSBhbGxvd2VkIGJ5IHRoZSBKVk0sIHBsZWFzZSBzcGxpdCBpdCBpbnRvIG11bHRpcGxlIHNtYWxsZXIgc3RhdGVtZW50cyAtICVzIiwgdHJpbU1lc3NhZ2Uoc2Vzc2lvblRhc2suZ2V0UmVxdWVzdE1lc3NhZ2UoKSkpOwotICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgcm9vdCwgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTikKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHJvb3QpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdyb292eVJ1bnRpbWVFeGNlcHRpb24gd2lsbCBoaXQgYSBwcmV0dHkgd2lkZSByYW5nZSBvZiBldmFsIHR5cGUgZXJyb3JzLCBsaWtlIE1pc3NpbmdQcm9wZXJ0eUV4Y2VwdGlvbiwKLSAgICAgICAgLy8gQ29tcGlsYXRpb25GYWlsZWRFeGNlcHRpb24sIE1pc3NpbmdNZXRob2RFeGNlcHRpb24sIGV0Yy4gSWYgbW9yZSBzcGVjaWZpYyBoYW5kbGluZyBpcyByZXF1aXJlZCB0aGVuCi0gICAgICAgIC8vIHRyeSB0byBjYXRjaCBpdCBlYXJsaWVyIGFib3ZlLgotICAgICAgICBpZiAocm9vdCBpbnN0YW5jZW9mIEdyb292eVJ1bnRpbWVFeGNlcHRpb24gfHwKLSAgICAgICAgICAgICAgICByb290IGluc3RhbmNlb2YgVmVyaWZpY2F0aW9uRXhjZXB0aW9uIHx8Ci0gICAgICAgICAgICAgICAgcm9vdCBpbnN0YW5jZW9mIFNjcmlwdEV4Y2VwdGlvbikgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeGNlcHRpb24ocm9vdC5nZXRNZXNzYWdlKCksIHJvb3QsIFJlc3BvbnNlTWVzc2FnZS5idWlsZChzZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0VWQUxVQVRJT04pCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKHJvb3QuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHJvb3QpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKHJvb3QuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiOiAiICsgcm9vdC5nZXRNZXNzYWdlKCksIHJvb3QsCi0gICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbihyb290KQotICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2Uocm9vdC5nZXRNZXNzYWdlKCkpLmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGRlY3JlYXNlIHRoZSBzaXplIG9mIGEgR3JlbWxpbiBzY3JpcHQgdGhhdCB0cmlnZ2VyZWQgYSAibWV0aG9kIHRvbyBsYXJnZSIgZXhjZXB0aW9uIHNvIHRoYXQgaXQKLSAgICAgKiBkb2Vzbid0IGxvZyBhIG1hc3NpdmUgdGV4dCBzdHJpbmcgbm9yIHJldHVybiBhIGxhcmdlIGVycm9yIG1lc3NhZ2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBSZXF1ZXN0TWVzc2FnZSB0cmltTWVzc2FnZShmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cpIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgdHJpbW1lZE1zZyA9IFJlcXVlc3RNZXNzYWdlLmZyb20obXNnKS5jcmVhdGUoKTsKLSAgICAgICAgaWYgKHRyaW1tZWRNc2cuZ2V0QXJncygpLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0dSRU1MSU4pKQotICAgICAgICAgICAgdHJpbW1lZE1zZy5nZXRBcmdzKCkucHV0KFRva2Vucy5BUkdTX0dSRU1MSU4sIHRyaW1tZWRNc2cuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19HUkVNTElOKS50b1N0cmluZygpLnN1YnN0cmluZygwLCAxMDIxKSArICIuLi4iKTsKLQotICAgICAgICByZXR1cm4gdHJpbW1lZE1zZzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayBpZiBhbnkgZXhjZXB0aW9uIGluIHRoZSBjaGFpbiBpcyB7QGxpbmsgVGVtcG9yYXJ5RXhjZXB0aW9ufSBvciB7QGxpbmsgRmFpbHVyZX0gdGhlbiByZXNwb25kIHdpdGggdGhlCi0gICAgICogcmlnaHQgZXJyb3IgY29kZSBzbyB0aGF0IHRoZSBjbGllbnQga25vd3MgdG8gcmV0cnkuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBPcHRpb25hbDxUaHJvd2FibGU+IGRldGVybWluZUlmU3BlY2lhbEV4Y2VwdGlvbihmaW5hbCBUaHJvd2FibGUgZXgpIHsKLSAgICAgICAgcmV0dXJuIFN0cmVhbS5vZihFeGNlcHRpb25VdGlscy5nZXRUaHJvd2FibGVzKGV4KSkuCi0gICAgICAgICAgICAgICAgZmlsdGVyKGkgLT4gaSBpbnN0YW5jZW9mIFRlbXBvcmFyeUV4Y2VwdGlvbiB8fCBpIGluc3RhbmNlb2YgRmFpbHVyZSkuZmluZEZpcnN0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgc2Vzc2lvbiBmcm9tIHRoZSBzZXNzaW9uIGxpc3QgYW5kIGNhbmNlbHMgdGhlIGZ1dHVyZSB0aGF0IG1hbmFnZXMgdGhlIGxpZmV0aW1lIG9mIHRoZSBzZXNzaW9uLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjbG9zZSgpIHsKLSAgICAgICAgLy8gYWxyZWFkeSBjbG9zaW5nL2Nsb3NlZAotICAgICAgICBpZiAoIXNlc3Npb25zLmNvbnRhaW5zS2V5KHNlc3Npb25JZCkpIHJldHVybjsKLQotICAgICAgICBzZXNzaW9ucy5yZW1vdmUoc2Vzc2lvbklkKTsKLQotICAgICAgICBpZiAoc2Vzc2lvbkNhbmNlbEZ1dHVyZS5nZXQoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBTY2hlZHVsZWRGdXR1cmU8Pz4gZiA9IHNlc3Npb25DYW5jZWxGdXR1cmUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoIWYuaXNEb25lKCkpIGYuY2FuY2VsKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiB7QGNvZGUgSXRlcmF0b3J9IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBzY3JpcHQgZXZhbHVhdGlvbiBwcm92aWRlZCBpbiB0aGUge0BsaW5rIFNlc3Npb25UYXNrfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZXNzaW9uVGFzayBUaGUgc2Vzc2lvbiB0YXNrIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHtAY29kZSBJdGVyYXRvcn0KLSAgICAgKiBAcGFyYW0gc2NyaXB0IFRoZSBzY3JpcHQgZXh0cmFjdGVkIGJ5IHRoZSBjYWxsaW5nIG1ldGhvZCBmcm9tIHRoZSB7QGNvZGUgc2Vzc2lvblRhc2t9Ci0gICAgICovCi0gICAgcHJvdGVjdGVkIEl0ZXJhdG9yPD8+IGZyb21TY3JpcHQoZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2ssIGZpbmFsIFN0cmluZyBzY3JpcHQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBzZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGFyZ3MgPSBtc2cuZ2V0QXJncygpOwotICAgICAgICBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UgPSBhcmdzLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0xBTkdVQUdFKSA/IChTdHJpbmcpIGFyZ3MuZ2V0KFRva2Vucy5BUkdTX0xBTkdVQUdFKSA6ICJncmVtbGluLWdyb292eSI7Ci0gICAgICAgIHJldHVybiBJdGVyYXRvclV0aWxzLmFzSXRlcmF0b3IoZ2V0U2NyaXB0RW5naW5lKHNlc3Npb25UYXNrLCBsYW5ndWFnZSkuZXZhbCgKLSAgICAgICAgICAgICAgICBzY3JpcHQsIG1lcmdlQmluZGluZ3NGcm9tUmVxdWVzdChzZXNzaW9uVGFzaywgZ2V0V29ya2VyQmluZGluZ3MoKSkpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIHtAY29kZSBJdGVyYXRvcn0gZnJvbSB7QGxpbmsgQnl0ZWNvZGV9IHByb3ZpZGVkIGluIHRoZSB7QGxpbmsgU2Vzc2lvblRhc2t9LiBJZiB0aGUge0BsaW5rIEJ5dGVjb2RlfQotICAgICAqIGlzIGZvdW5kIHRvIGV2YWx1dGUgdG8gYSB7QGxpbmsgR3JhcGhPcH0gdGhlbiBpdCBpcyBwcm9jZXNzZWQgYW5kIGFuIGVtcHR5IHtAY29kZSBPcHRpb25hbH0gaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc2Vzc2lvblRhc2sgVGhlIHNlc3Npb24gdGFzayB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgaW4gY29uc3RydWN0aW5nIHRoZSB7QGNvZGUgSXRlcmF0b3J9Ci0gICAgICogQHBhcmFtIGJ5dGVjb2RlIFRoZSB7QGxpbmsgQnl0ZWNvZGV9IGV4dHJhY3RlZCBieSB0aGUgY2FsbGluZyBtZXRob2QgZnJvbSB0aGUge0Bjb2RlIHNlc3Npb25UYXNrfQotICAgICAqLwotICAgIHByb3RlY3RlZCBPcHRpb25hbDxJdGVyYXRvcjw/Pj4gZnJvbUJ5dGVjb2RlKGZpbmFsIFNlc3Npb25UYXNrIHNlc3Npb25UYXNrLCBmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYXZlcnNhbDsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gKE1hcDxTdHJpbmcsIFN0cmluZz4pIG1zZy5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQUxJQVNFUykuZ2V0KCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXIgPSBzZXNzaW9uVGFzay5nZXRHcmFwaE1hbmFnZXIoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZU5hbWUgPSBhbGlhc2VzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0VmFsdWUoKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlKHRyYXZlcnNhbFNvdXJjZU5hbWUpOwotCi0gICAgICAgIC8vIGhhbmRsZSBieXRlY29kZSBiYXNlZCBncmFwaCBvcGVyYXRpb25zIGxpa2UgY29tbWl0L3JvbGxiYWNrIGNvbW1hbmRzCi0gICAgICAgIGlmIChCeXRlY29kZUhlbHBlci5pc0dyYXBoT3BlcmF0aW9uKGJ5dGVjb2RlKSkgewotICAgICAgICAgICAgaGFuZGxlR3JhcGhPcGVyYXRpb24oc2Vzc2lvblRhc2ssIGJ5dGVjb2RlLCBnLmdldEdyYXBoKCkpOwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmVtcHR5KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPFN0cmluZz4gbGFtYmRhTGFuZ3VhZ2UgPSBCeXRlY29kZUhlbHBlci5nZXRMYW1iZGFMYW5ndWFnZShieXRlY29kZSk7Ci0gICAgICAgICAgICBpZiAoIWxhbWJkYUxhbmd1YWdlLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIHRyYXZlcnNhbCA9IEphdmFUcmFuc2xhdG9yLm9mKGcpLnRyYW5zbGF0ZShieXRlY29kZSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTaW1wbGVCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICAgICAgICAgIGJpbmRpbmdzLnB1dCh0cmF2ZXJzYWxTb3VyY2VOYW1lLCBnKTsKLSAgICAgICAgICAgICAgICB0cmF2ZXJzYWwgPSBzZXNzaW9uVGFzay5nZXRHcmVtbGluRXhlY3V0b3IoKS5nZXRTY3JpcHRFbmdpbmVNYW5hZ2VyKCkuCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRFbmdpbmVCeU5hbWUobGFtYmRhTGFuZ3VhZ2UuZ2V0KCkpLmV2YWwoYnl0ZWNvZGUsIGJpbmRpbmdzLCB0cmF2ZXJzYWxTb3VyY2VOYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gY29tcGlsZSB0aGUgdHJhdmVyc2FsIC0gd2l0aG91dCBpdCBnZXRFbmRTdGVwKCkgaGFzIG5vdGhpbmcgaW4gaXQKLSAgICAgICAgICAgIHRyYXZlcnNhbC5hcHBseVN0cmF0ZWdpZXMoKTsKLQotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mKG5ldyBUcmF2ZXJzZXJJdGVyYXRvcih0cmF2ZXJzYWwpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBCaW5kaW5ncyBnZXRXb3JrZXJCaW5kaW5ncygpIHRocm93cyBTZXNzaW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTaW1wbGVCaW5kaW5ncyhncmFwaE1hbmFnZXIuZ2V0QXNCaW5kaW5ncygpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgQmluZGluZ3MgbWVyZ2VCaW5kaW5nc0Zyb21SZXF1ZXN0KGZpbmFsIFNlc3Npb25UYXNrIHNlc3Npb25UYXNrLCBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncykgdGhyb3dzIFNlc3Npb25FeGNlcHRpb24gewotICAgICAgICAvLyBhbGlhcyBhbnkgZ2xvYmFsIGJpbmRpbmdzIHRvIGEgZGlmZmVyZW50IHZhcmlhYmxlLgotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBzZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBpZiAobXNnLmdldEFyZ3MoKS5jb250YWluc0tleShUb2tlbnMuQVJHU19BTElBU0VTKSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gKE1hcDxTdHJpbmcsIFN0cmluZz4pIG1zZy5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0FMSUFTRVMpOwotICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLFN0cmluZz4gYWxpYXNLdiA6IGFsaWFzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZSBhbGlhcyByZWZlcnMgdG8gYSBHcmFwaCBpbnN0YW5jZQotICAgICAgICAgICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gc2Vzc2lvblRhc2suZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0R3JhcGgoYWxpYXNLdi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBncmFwaCkgewotICAgICAgICAgICAgICAgICAgICBiaW5kaW5ncy5wdXQoYWxpYXNLdi5nZXRLZXkoKSwgZ3JhcGgpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGFsaWFzIHdhc24ndCBmb3VuZCBhcyBhIEdyYXBoIHRoZW4gcGVyaGFwcyBpdCBpcyBhIFRyYXZlcnNhbFNvdXJjZSAtIGl0IG5lZWRzIHRvIGJlCi0gICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nCi0gICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTb3VyY2UgdHMgPSBzZXNzaW9uVGFzay5nZXRHcmFwaE1hbmFnZXIoKS5nZXRUcmF2ZXJzYWxTb3VyY2UoYWxpYXNLdi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzLnB1dChhbGlhc0t2LmdldEtleSgpLCB0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGlzIHZhbGlkYXRpb24gaXMgaW1wb3J0YW50IHRvIGNhbGxzIHRvIEdyYXBoTWFuYWdlci5jb21taXQoKSBhbmQgcm9sbGJhY2soKSBhcyB0aGV5IGJvdGgKLSAgICAgICAgICAgICAgICAvLyBleHBlY3QgdGhhdCB0aGUgYWxpYXNlcyBzdXBwbGllZCBhcmUgdmFsaWQKLSAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvciA9IFN0cmluZy5mb3JtYXQoIkNvdWxkIG5vdCBhbGlhcyBbJXNdIHRvIFslc10gYXMgWyVzXSBub3QgaW4gdGhlIEdyYXBoIG9yIFRyYXZlcnNhbFNvdXJjZSBnbG9iYWwgYmluZGluZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzS3YuZ2V0S2V5KCksIGFsaWFzS3YuZ2V0VmFsdWUoKSwgYWxpYXNLdi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeGNlcHRpb24oZXJyb3IsIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykuc3RhdHVzTWVzc2FnZShlcnJvcikuY3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gYmluZGluZ3Mgc28gZGV0ZXJtaW5lIGlmIHRoYXQncyBvayB3aXRoIEdyZW1saW4gU2VydmVyCi0gICAgICAgICAgICBpZiAoc2Vzc2lvblRhc2suZ2V0U2V0dGluZ3MoKS5zdHJpY3RUcmFuc2FjdGlvbk1hbmFnZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXJyb3IgPSAiR3JlbWxpbiBTZXJ2ZXIgaXMgY29uZmlndXJlZCB3aXRoIHN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCBhcyAndHJ1ZScgLSB0aGUgJ2FsaWFzZXMnIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkIjsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihlcnJvciwgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UoZXJyb3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkZCBhbnkgYmluZGluZ3MgdG8gb3ZlcnJpZGUgYW55IG90aGVyIHN1cHBsaWVkCi0gICAgICAgIE9wdGlvbmFsLm9mTnVsbGFibGUoKE1hcDxTdHJpbmcsIE9iamVjdD4pIG1zZy5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0JJTkRJTkdTKSkuaWZQcmVzZW50KGJpbmRpbmdzOjpwdXRBbGwpOwotICAgICAgICByZXR1cm4gYmluZGluZ3M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvdmlkZXMgYSBnZW5lcmljIHdheSBvZiBpdGVyYXRpbmcgYSByZXN1bHQgc2V0IGJhY2sgdG8gdGhlIGNsaWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzZXNzaW9uVGFzayBUaGUgR3JlbWxpbiBTZXJ2ZXIge0BsaW5rIFNlc3Npb25UYXNrfSBvYmplY3QgY29udGFpbmluZyBzZXR0aW5ncywgcmVxdWVzdCBtZXNzYWdlLCBldGMuCi0gICAgICogQHBhcmFtIGl0dHkgVGhlIHJlc3VsdCB0byBpdGVyYXRvcgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUl0ZXJhdG9yKGZpbmFsIFNlc3Npb25UYXNrIHNlc3Npb25UYXNrLCBmaW5hbCBJdGVyYXRvcjw/PiBpdHR5KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgbmV0dHlDb250ZXh0ID0gc2Vzc2lvblRhc2suZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzID0gc2Vzc2lvblRhc2suZ2V0U2V0dGluZ3MoKTsKLQotICAgICAgICAvLyB1c2VkIHRvIGxpbWl0IHdhcm5pbmdzIGZvciB3aGVuIG5ldHR5IGZpbGxzIHRoZSBidWZmZXIgYW5kIGhpdHMgdGhlIGhpZ2ggd2F0ZXJtYXJrIC0gcHJldmVudHMKLSAgICAgICAgLy8gb3Zlci1sb2dnaW5nIG9mIHRoZSBzYW1lIG1lc3NhZ2UuCi0gICAgICAgIGxvbmcgbGFzdFdhcm5pbmdUaW1lID0gMDsKLSAgICAgICAgaW50IHdhcm5Db3VudGVyID0gMDsKLQotICAgICAgICAvLyBzZXNzaW9ubGVzcyByZXF1ZXN0cyBhcmUgYWx3YXlzIHRyYW5zYWN0aW9uIG1hbmFnZWQsIGJ1dCBpbi1zZXNzaW9uIHJlcXVlc3RzIGFyZSBjb25maWd1cmFibGUuCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gbWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QgPSB0cmFuc2FjdGlvbk1hbmFnZWQgPwotICAgICAgICAgICAgICAgIHRydWUgOiAoQm9vbGVhbikgbXNnLmdldEFyZ3MoKS5nZXRPckRlZmF1bHQoVG9rZW5zLkFSR1NfTUFOQUdFX1RSQU5TQUNUSU9OLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gd2UgaGF2ZSBhbiBlbXB0eSBpdGVyYXRvciAtIGhhcHBlbnMgb24gc3R1ZmYgbGlrZTogZy5WKCkuaXRlcmF0ZSgpCi0gICAgICAgIGlmICghaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXR0cmlidXRlcyA9IGdlbmVyYXRlU3RhdHVzQXR0cmlidXRlcyhzZXNzaW9uVGFzayxSZXNwb25zZVN0YXR1c0NvZGUuTk9fQ09OVEVOVCwgaXR0eSk7Ci0gICAgICAgICAgICAvLyBhcyB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gaXRlcmF0ZSBpZiB3ZSBhcmUgdHJhbnNhY3Rpb24gbWFuYWdlZCB0aGVuIHdlIHNob3VsZCBleGVjdXRlIGEKLSAgICAgICAgICAgIC8vIGNvbW1pdCBoZXJlIGJlZm9yZSB3ZSBzZW5kIGJhY2sgYSBOT19DT05URU5UIHdoaWNoIGltcGxpZXMgc3VjY2VzcwotICAgICAgICAgICAgaWYgKG1hbmFnZWRUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0KQotICAgICAgICAgICAgICAgIGNsb3NlVHJhbnNhY3Rpb24oc2Vzc2lvblRhc2ssIFRyYW5zYWN0aW9uLlN0YXR1cy5DT01NSVQpOwotCi0gICAgICAgICAgICBzZXNzaW9uVGFzay53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5OT19DT05URU5UKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdGhlIGJhdGNoIHNpemUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHJlcXVlc3QKLSAgICAgICAgZmluYWwgaW50IHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSA9IChJbnRlZ2VyKSBtc2cub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX0JBVENIX1NJWkUpCi0gICAgICAgICAgICAgICAgLm9yRWxzZShzZXR0aW5ncy5yZXN1bHRJdGVyYXRpb25CYXRjaFNpemUpOwotICAgICAgICBMaXN0PE9iamVjdD4gYWdncmVnYXRlID0gbmV3IEFycmF5TGlzdDw+KHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSk7Ci0KLSAgICAgICAgLy8gdXNlIGFuIGV4dGVybmFsIGNvbnRyb2wgdG8gbWFuYWdlIHRoZSBsb29wIGFzIG9wcG9zZWQgdG8ganVzdCBjaGVja2luZyBoYXNOZXh0KCkgaW4gdGhlIHdoaWxlLiAgdGhpcwotICAgICAgICAvLyBwcmV2ZW50IHNpdHVhdGlvbnMgd2hlcmUgYXV0byB0cmFuc2FjdGlvbnMgY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uIGFmdGVyIGNhbGxzIHRvIGNvbW1pdCgpIHdpdGhpbmcKLSAgICAgICAgLy8gdGhlIGxvb3Agb24gY2FsbHMgdG8gaGFzTmV4dCgpLgotICAgICAgICBib29sZWFuIGhhc01vcmUgPSBpdHR5Lmhhc05leHQoKTsKLQotICAgICAgICB3aGlsZSAoaGFzTW9yZSkgewotICAgICAgICAgICAgaWYgKFRocmVhZC5pbnRlcnJ1cHRlZCgpKSB0aHJvdyBuZXcgSW50ZXJydXB0ZWRFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgLy8gY2hlY2sgaWYgYW4gaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gZm9yY2UgZmx1c2ggdGhlIGFnZ3JlZ2F0ZWQgcmVzdWx0cyBiZWZvcmUgdGhlIGl0ZXJhdGlvbiBiYXRjaAotICAgICAgICAgICAgLy8gc2l6ZSBpcyByZWFjaGVkLgotICAgICAgICAgICAgLy8gdG9kbzogd2hhdCBpbXBsZW1lbnRhdGlvbiBkb2VzIHRoaXM/ISBjYW4gd2Uga2lsbCBpdCBnb2luZyBmb3J3YXJkIC0gc2VlbXMgYWx3YXlzIGZhbHNlCi0gICAgICAgICAgICAvLyBmaW5hbCBib29sZWFuIGZvcmNlRmx1c2ggPSBpc0ZvcmNlRmx1c2hlZChuZXR0eUNvbnRleHQsIG1zZywgaXR0eSk7Ci0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlRmx1c2ggPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gaGF2ZSB0byBjaGVjayB0aGUgYWdncmVnYXRlIHNpemUgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdCB3cml0ZWFibGUgKGJlbG93KQotICAgICAgICAgICAgLy8gc28gaXRlcmF0aW5nIG5leHQoKSBpZiB0aGUgbWVzc2FnZSBpcyBub3Qgd3JpdHRlbiBhbmQgZmx1c2hlZCB3b3VsZCBidW1wIHRoZSBhZ2dyZWdhdGUgc2l6ZSBiZXlvbmQKLSAgICAgICAgICAgIC8vIHRoZSBleHBlY3RlZCByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUuICBUb3RhbCBzZXJpYWxpemF0aW9uIHRpbWUgZm9yIHRoZSByZXNwb25zZSByZW1haW5zIGluCi0gICAgICAgICAgICAvLyBlZmZlY3Qgc28gaWYgdGhlIGNsaWVudCBpcyAic2xvdyIgaXQgbWF5IHNpbXBseSB0aW1lb3V0LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgbmVlZCB0byBjaGVjayBoYXNOZXh0KCkgb24gdGhlIGl0ZXJhdG9yIGJlY2F1c2UgaWYgdGhlIGNoYW5uZWwgaXMgbm90IHdyaXRlYWJsZSB0aGUKLSAgICAgICAgICAgIC8vIHByZXZpb3VzIHBhc3MgdGhyb3VnaCB0aGUgd2hpbGUgbG9vcCB3aWxsIGhhdmUgbmV4dCgpJ2QgdGhlIGl0ZXJhdG9yIGFuZCBpZiBpdCBpcyAiZG9uZSIgdGhlbiBhCi0gICAgICAgICAgICAvLyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIHdpbGwgcmFpc2UgaXRzIGhlYWQuIGFsc28gbmVlZCBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QKLSAgICAgICAgICAgIC8vIHJlcXVpcmUgYSBmb3JjZWQgZmx1c2ggd2hpY2ggY2FuIGJlIGZvcmNlZCBieSBzdWItY2xhc3Nlcy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyB0aGlzIGNvdWxkIGJlIHBsYWNlZCBpbnNpZGUgdGhlIGlzV3JpdGVhYmxlKCkgcG9ydGlvbiBvZiB0aGUgaWYtdGhlbiBiZWxvdyBidXQgaXQgc2VlbXMgYmV0dGVyIHRvCi0gICAgICAgICAgICAvLyBhbGxvdyBpdGVyYXRpb24gdG8gY29udGludWUgaW50byBhIGJhdGNoIGlmIHRoYXQgaXMgcG9zc2libGUgcmF0aGVyIHRoYW4ganVzdCBkb2luZyBub3RoaW5nIGF0IGFsbAotICAgICAgICAgICAgLy8gd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNsaWVudCB0byBjYXRjaCB1cAotICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZS5zaXplKCkgPCByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgJiYgaXR0eS5oYXNOZXh0KCkgJiYgIWZvcmNlRmx1c2gpIGFnZ3JlZ2F0ZS5hZGQoaXR0eS5uZXh0KCkpOwotCi0gICAgICAgICAgICAvLyBzZW5kIGJhY2sgYSBwYWdlIG9mIHJlc3VsdHMgaWYgYmF0Y2ggc2l6ZSBpcyBtZXQgb3IgaWYgaXQncyB0aGUgZW5kIG9mIHRoZSByZXN1bHRzIGJlaW5nIGl0ZXJhdGVkLgotICAgICAgICAgICAgLy8gYWxzbyBjaGVjayB3cml0ZWFiaWxpdHkgb2YgdGhlIGNoYW5uZWwgdG8gcHJldmVudCBPT01FIGZvciBzbG93IGNsaWVudHMuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gY2xpZW50cyBtaWdodCBkZWNpZGUgdG8gY2xvc2UgdGhlIE5ldHR5IGNoYW5uZWwgdG8gdGhlIHNlcnZlciB3aXRoIGEgQ2xvc2VXZWJzb2NrZXRGcmFtZSBhZnRlciBlcnJvcnMKLSAgICAgICAgICAgIC8vIGxpa2UgQ29ycnVwdGVkRnJhbWVFeGNlcHRpb24uIE9uIHRoZSBzZXJ2ZXIsIGFsdGhvdWdoIHRoZSBjaGFubmVsIGdldHMgY2xvc2VkLCB0aGVyZSBtaWdodCBiZSBzb21lCi0gICAgICAgICAgICAvLyBleGVjdXRvciB0aHJlYWRzIHdhaXRpbmcgZm9yIHdhdGVybWFyayB0byBjbGVhciB3aGljaCB3aWxsIG5vdCBjbGVhciBpbiB0aGVzZSBjYXNlcyBzaW5jZSBjbGllbnQgaGFzCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGdpdmVuIHVwIG9uIHRoZXNlIHJlcXVlc3RzLiBUaGlzIGxlYWRzIHRvIHRoZXNlIGV4ZWN1dG9ycyB3YWl0aW5nIGZvciB0aGUgY2xpZW50IHRvIGNvbnN1bWUKLSAgICAgICAgICAgIC8vIHJlc3VsdHMgdGlsbCB0aGUgdGltZW91dC4gY2hlY2tpbmcgZm9yIGlzQWN0aXZlKCkgc2hvdWxkIGhlbHAgcHJldmVudCB0aGF0LgotICAgICAgICAgICAgaWYgKG5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNBY3RpdmUoKSAmJiBuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmlzV3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChmb3JjZUZsdXNoIHx8IGFnZ3JlZ2F0ZS5zaXplKCkgPT0gcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplIHx8ICFpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZVN0YXR1c0NvZGUgY29kZSA9IGl0dHkuaGFzTmV4dCgpID8gUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCA6IFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICBGcmFtZSBmcmFtZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IG1ha2VGcmFtZShzZXNzaW9uVGFzaywgYWdncmVnYXRlLCBjb2RlLCBpdHR5KTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGZyYW1lIG1heSB1c2UgYSBCeXRlYnVmIHdoaWNoIGlzIGEgY291bnRhYmxlIHJlbGVhc2UgLSBpZiBpdCBkb2VzIG5vdCBnZXQgd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG93bnN0cmVhbSBpdCBuZWVkcyB0byBiZSByZWxlYXNlZCBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gbnVsbCkgZnJhbWUudHJ5UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gaXMgaGFuZGxlZCBpbiBtYWtlRnJhbWUoKSAtIHNlcmlhbGl6YXRpb24gZXJyb3IgZ2V0cyB3cml0dGVuIGJhY2sgdG8gZHJpdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGF0IHBvaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VUcmFuc2FjdGlvbihzZXNzaW9uVGFzaywgVHJhbnNhY3Rpb24uU3RhdHVzLlJPTExCQUNLKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyBsZWZ0IGluIHRoZSBpdGVyYXRvciBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIGFmdGVyCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBiZSBjbG9zZWQgLSBpbiB0aGF0IGNhc2UgYSBjYWxsIHRvIGhhc05leHQoKSBjb3VsZCBvcGVuIGEgbmV3IHRyYW5zYWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHVuaW50ZW50aW9uYWxseQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG1vcmVJbkl0ZXJhdG9yID0gaXR0eS5oYXNOZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgbmVlZCB0byByZXNldCB0aGUgYWdncmVnYXRpb24gbGlzdCBpZiB0aGVyZSdzIG1vcmUgc3R1ZmYgdG8gd3JpdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb3JlSW5JdGVyYXRvcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGUgPSBuZXcgQXJyYXlMaXN0PD4ocmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiBhbmQgc2VyaWFsaXphdGlvbiBhcmUgYm90aCBjb21wbGV0ZSB3aGljaCBtZWFucyB0aGlzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4gbm90ZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3JzIGludGVybmFsIHRvIHNjcmlwdCBldmFsIG9yIHRpbWVvdXQgd2lsbCByb2xsYmFjayBnaXZlbiBHcmVtbGluU2VydmVyJ3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsIGVycm9ycyB3aWxsIGdldCByb2xsZWRiYWNrIGJlbG93IGJlY2F1c2UgdGhlIGV4Y2VwdGlvbnMgYXJlbid0IHRocm93biBpbiB0aG9zZSBjYXNlcyB0byBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdWdodCBieSB0aGUgR3JlbWxpbkV4ZWN1dG9yIGZvciBnbG9iYWwgcm9sbGJhY2sgbG9naWMuIHRoaXMgb25seSBuZWVkcyB0byBiZSBjb21taXR0ZWQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcyB0byBpdGVyYXRlIGFuZCBzZXJpYWxpemF0aW9uIGlzIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hbmFnZWRUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVRyYW5zYWN0aW9uKHNlc3Npb25UYXNrLCBUcmFuc2FjdGlvbi5TdGF0dXMuQ09NTUlUKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4aXQgdGhlIHJlc3VsdCBpdGVyYXRpb24gbG9vcCBhcyB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIGxlZnQuICB1c2luZyB0aGlzIGV4dGVybmFsIGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG9mIHRoZSBhYm92ZSBjb21taXQuICBzb21lIGdyYXBocyBtYXkgb3BlbiBhIG5ldyB0cmFuc2FjdGlvbiBvbiB0aGUgY2FsbCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhc05leHQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc01vcmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGZyYW1lIG1heSB1c2UgYSBCeXRlYnVmIHdoaWNoIGlzIGEgY291bnRhYmxlIHJlbGVhc2UgLSBpZiBpdCBkb2VzIG5vdCBnZXQgd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG93bnN0cmVhbSBpdCBuZWVkcyB0byBiZSByZWxlYXNlZCBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gbnVsbCkgZnJhbWUudHJ5UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIW1vcmVJbkl0ZXJhdG9yKSBpdGVyYXRlQ29tcGxldGUoc2Vzc2lvblRhc2ssIGl0dHkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmbHVzaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbW1pdCBoYXMgcG90ZW50aWFsbHkgb2NjdXJyZWQuICBpbiB0aGlzIHdheSwgaWYgYSBjb21taXQgd2FzCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkIHRoZW4gaXQgd2lsbCBiZSAxMDAlIGNvbXBsZXRlIGJlZm9yZSB0aGUgY2xpZW50IHJlY2VpdmVzIGl0LiB0aGUgImZyYW1lIiBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBoYXZlIGNvbXBsZXRlbHkgZGV0YWNoZWQgb2JqZWN0cyBmcm9tIHRoZSB0cmFuc2FjdGlvbiAoaS5lLiBzZXJpYWxpemF0aW9uIGhhcyBvY2N1cnJlZCkKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gYSBuZXcgb25lIHNob3VsZCBub3QgYmUgb3BlbmVkIG9uIHRoZSBmbHVzaCBkb3duIHRoZSBuZXR0eSBwaXBlbGluZQotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uVGFzay53cml0ZUFuZEZsdXNoKGNvZGUsIGZyYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotICAgICAgICAgICAgICAgIC8vIGV4cG9uZW50aWFsIGRlbGF5IGJldHdlZW4gd2FybmluZ3MuIGRvbid0IGtlZXAgdHJpZ2dlcmluZyB0aGlzIHdhcm5pbmcgb3ZlciBhbmQgb3ZlciBhZ2FpbiBmb3IgdGhlCi0gICAgICAgICAgICAgICAgLy8gc2FtZSByZXF1ZXN0LiB0b3RhbFBlbmRpbmdXcml0ZUJ5dGVzIGlzIHZvbGF0aWxlIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgYnkgdGhlIHRpbWUgdGhpcyB3YXJuaW5nCi0gICAgICAgICAgICAgICAgLy8gaGl0cyB0aGUgbG9nIHRoZSBsb3cgd2F0ZXJtYXJrIG1heSBoYXZlIGJlZW4gaGl0Ci0gICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCA9IChsb25nKSBNYXRoLnBvdygyLCB3YXJuQ291bnRlcikgKiAxMDAwOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIGxhc3RXYXJuaW5nVGltZSA+PSBpbnRlcnZhbCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGFubmVsIGNoID0gbmV0dHlDb250ZXh0LmNoYW5uZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIldhcm5pbmcge306IE91dGJvdW5kIGJ1ZmZlciBzaXplPXt9LCBwYXVzaW5nIHJlc3BvbnNlIHdyaXRpbmcgYXMgd3JpdGVCdWZmZXJIaWdoV2F0ZXJNYXJrIGV4Y2VlZGVkIG9uIHJlcXVlc3Qge30gZm9yIGNoYW5uZWwge30gLSB3cml0aW5nIHdpbGwgY29udGludWUgb25jZSBjbGllbnQgaGFzIGNhdWdodCB1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybkNvdW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gudW5zYWZlKCkub3V0Ym91bmRCdWZmZXIoKS50b3RhbFBlbmRpbmdXcml0ZUJ5dGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmdldFJlcXVlc3RJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLmlkKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIGxhc3RXYXJuaW5nVGltZSA9IGN1cnJlbnRUaW1lOwotICAgICAgICAgICAgICAgICAgICB3YXJuQ291bnRlcisrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBjbGllbnQgaXMgbGFnZ2luZyB3ZSBjYW4gaG9sZCBoZXJlIGZvciBhIHBlcmlvZCBvZiB0aW1lIGZvciB0aGUgY2xpZW50IHRvIGNhdGNoIHVwLgotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXNuJ3QgYmxvY2tpbmcgdGhlIElPIHRocmVhZCAtIGp1c3QgYSB3b3JrZXIuCi0gICAgICAgICAgICAgICAgVGltZVVuaXQuTUlMTElTRUNPTkRTLnNsZWVwKFdSSVRFX1BBVVNFX1RJTUVfTVMpOwotICAgICAgICAgICAgICAgIHdyaXRlUGF1c2VzTWV0ZXIubWFyaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYge0BsaW5rIEJ5dGVjb2RlfSBpcyBkZXRlY3RlZCB0byBjb250YWluIGEge0BsaW5rIEdyYXBoT3B9IHRoZW4gaXQgZ2V0cyBwcm9jZXNzZWQgYnkgdGhpcyBtZXRob2QuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlR3JhcGhPcGVyYXRpb24oZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2ssIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBHcmFwaCBncmFwaCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGlmIChncmFwaC5mZWF0dXJlcygpLmdyYXBoKCkuc3VwcG9ydHNUcmFuc2FjdGlvbnMoKSkgewotICAgICAgICAgICAgaWYgKFRYX0NPTU1JVC5lcXVhbHMoYnl0ZWNvZGUpIHx8IFRYX1JPTExCQUNLLmVxdWFscyhieXRlY29kZSkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNvbW1pdCA9IFRYX0NPTU1JVC5lcXVhbHMoYnl0ZWNvZGUpOwotICAgICAgICAgICAgICAgIGNsb3NlVHJhbnNhY3Rpb24oc2Vzc2lvblRhc2ssIGNvbW1pdCA/IFRyYW5zYWN0aW9uLlN0YXR1cy5DT01NSVQgOiBUcmFuc2FjdGlvbi5TdGF0dXMuUk9MTEJBQ0spOwotCi0gICAgICAgICAgICAgICAgLy8gd3JpdGUgYmFjayBhIG5vLW9wIGZvciBzdWNjZXNzCi0gICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gZ2VuZXJhdGVTdGF0dXNBdHRyaWJ1dGVzKHNlc3Npb25UYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlLk5PX0NPTlRFTlQsIENvbGxlY3Rpb25zLmVtcHR5SXRlcmF0b3IoKSk7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvblRhc2sud3JpdGVBbmRGbHVzaChSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5OT19DT05URU5UKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpKTsKLQotICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uVGFzay5nZXRTZXR0aW5ncygpLmNsb3NlU2Vzc2lvblBvc3RHcmFwaE9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAiQnl0ZWNvZGUgaW4gcmVxdWVzdCBpcyBub3QgYSByZWNvZ25pemVkIGdyYXBoIG9wZXJhdGlvbjogJXMiLCBieXRlY29kZS50b1N0cmluZygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBHcmFwaC5FeGNlcHRpb25zLnRyYW5zYWN0aW9uc05vdFN1cHBvcnRlZCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gaXRlcmF0aW9uIHdpdGhpbiB7QGxpbmsgI2hhbmRsZUl0ZXJhdG9yKFNlc3Npb25UYXNrLCBJdGVyYXRvcil9IGlzIG9uIGl0cyBmaW5hbCBwYXNzIGFuZCB0aGUgZmluYWwKLSAgICAgKiBmcmFtZSBpcyBhYm91dCB0byBiZSBzZW50IGJhY2sgdG8gdGhlIGNsaWVudC4gVGhpcyBtZXRob2Qgb25seSBnZXRzIGNhbGxlZCBvbiBzdWNjZXNzZnVsIGl0ZXJhdGlvbiBvZiB0aGUKLSAgICAgKiBlbnRpcmUgcmVzdWx0LgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIGl0ZXJhdGVDb21wbGV0ZShmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaywgZmluYWwgSXRlcmF0b3I8Pz4gaXR0eSkgewotICAgICAgICAvLyBkbyBub3RoaW5nIGJ5IGRlZmF1bHQKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZW5lcmF0ZXMgcmVzcG9uc2Ugc3RhdHVzIG1ldGEtZGF0YSB0byBwdXQgb24gYSB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpdHR5IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHtAbGluayBJdGVyYXRvcn0gb2YgcmVzdWx0cyAtIGl0IGlzIG5vdCBtZWFudCB0byBiZSBmb3J3YXJkZWQgaW4KLSAgICAgKiAgICAgICAgICAgICB0aGlzIG1ldGhvZAotICAgICAqLwotICAgIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlU3RhdHVzQXR0cmlidXRlcyhmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGNvZGUsIGZpbmFsIEl0ZXJhdG9yPD8+IGl0dHkpIHsKLSAgICAgICAgLy8gb25seSByZXR1cm4gc2VydmVyIG1ldGFkYXRhIG9uIHRoZSBsYXN0IG1lc3NhZ2UKLSAgICAgICAgaWYgKGl0dHkuaGFzTmV4dCgpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGFEYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtZXRhRGF0YS5wdXQoVG9rZW5zLkFSR1NfSE9TVCwgc2Vzc2lvblRhc2suZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpLnJlbW90ZUFkZHJlc3MoKS50b1N0cmluZygpKTsKLQotICAgICAgICByZXR1cm4gbWV0YURhdGE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2VuZXJhdGVzIHJlc3BvbnNlIHJlc3VsdCBtZXRhLWRhdGEgdG8gcHV0IG9uIGEge0BsaW5rIFJlc3BvbnNlTWVzc2FnZX0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaXR0eSBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCB7QGxpbmsgSXRlcmF0b3J9IG9mIHJlc3VsdHMgLSBpdCBpcyBub3QgbWVhbnQgdG8gYmUgZm9yd2FyZGVkIGluCi0gICAgICogICAgICAgICAgICAgdGhpcyBtZXRob2QKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgTWFwPFN0cmluZywgT2JqZWN0PiBnZW5lcmF0ZVJlc3BvbnNlTWV0YURhdGEoZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlLCBmaW5hbCBJdGVyYXRvcjw/PiBpdHR5KSB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBGcmFtZSBtYWtlRnJhbWUoZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2ssIGZpbmFsIExpc3Q8T2JqZWN0PiBhZ2dyZWdhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZVN0YXR1c0NvZGUgY29kZSwgZmluYWwgSXRlcmF0b3I8Pz4gaXR0eSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBuZXR0eUNvbnRleHQgPSBzZXNzaW9uVGFzay5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKTsKLSAgICAgICAgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXIgc2VyaWFsaXplciA9IG5ldHR5Q29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5nZXQoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VCaW5hcnkgPSBuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuVVNFX0JJTkFSWSkuZ2V0KCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZU1ldGFEYXRhID0gZ2VuZXJhdGVSZXNwb25zZU1ldGFEYXRhKHNlc3Npb25UYXNrLCBjb2RlLCBpdHR5KTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBzdGF0dXNBdHRyaWJ1dGVzID0gZ2VuZXJhdGVTdGF0dXNBdHRyaWJ1dGVzKHNlc3Npb25UYXNrLCBjb2RlLCBpdHR5KTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlc3Npb25UYXNrLmhhbmRsZURldGFjaG1lbnQoYWdncmVnYXRlKTsKLQotICAgICAgICAgICAgaWYgKHVzZUJpbmFyeSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnJhbWUoc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY29kZShjb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoc3RhdHVzQXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5yZXNwb25zZU1ldGFEYXRhKHJlc3BvbnNlTWV0YURhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0KGFnZ3JlZ2F0ZSkuY3JlYXRlKCksIG5ldHR5Q29udGV4dC5hbGxvYygpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBHcmVtbGluVGV4dFJlcXVlc3REZWNvZGVyIHdpbGwgaGF2ZSBwbGFjZWQgYSBNZXNzYWdlVGV4dFNlcmlhbGl6ZXIKLSAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZSBvbiB0aGUgY2hhbm5lbC4KLSAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlVGV4dFNlcmlhbGl6ZXIgdGV4dFNlcmlhbGl6ZXIgPSAoTWVzc2FnZVRleHRTZXJpYWxpemVyKSBzZXJpYWxpemVyOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnJhbWUodGV4dFNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoY29kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKHN0YXR1c0F0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShyZXNwb25zZU1ldGFEYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdChhZ2dyZWdhdGUpLmNyZWF0ZSgpLCBuZXR0eUNvbnRleHQuYWxsb2MoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUaGUgcmVzdWx0IFt7fV0gaW4gdGhlIHJlcXVlc3Qge30gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYW5kIHJldHVybmVkLiIsIGFnZ3JlZ2F0ZSwgbXNnLmdldFJlcXVlc3RJZCgpLCBleCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiRXJyb3IgZHVyaW5nIHNlcmlhbGl6YXRpb246ICVzIiwgRXhjZXB0aW9uSGVscGVyLmdldE1lc3NhZ2VGcm9tRXhjZXB0aW9uT3JDYXVzZShleCkpOwotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGVycm9yID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZy5nZXRSZXF1ZXN0SWQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKGV4KQotICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1NFUklBTElaQVRJT04pLmNyZWF0ZSgpOwotICAgICAgICAgICAgc2Vzc2lvblRhc2sud3JpdGVBbmRGbHVzaChlcnJvcik7Ci0gICAgICAgICAgICB0aHJvdyBleDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCByaWdodCBiZWZvcmUgYSB0cmFuc2FjdGlvbiBzdGFydHMgd2l0aGluIHtAbGluayAjcnVuKCl9LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjaGVja3MgZm9yIG9wZW4KLSAgICAgKiB0cmFuc2FjdGlvbnMgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaWYgaXQgZmluZHMgYW55IGFuZCBnZW5lcmFsbHkgYXNzdW1lcyBhdXRvLXRyYW5zYWN0aW9ucyBhcmUgZW5hYmxlZCBvbgotICAgICAqIGdyYXBocyAoaS5lLiB0cmFuc2FjdGlvbiBhdXRvbWF0aWNhbGx5IHN0YXJ0IG9uIHJlYWQvd3JpdGUpLgotICAgICAqIDxwLz4KLSAgICAgKiBQcm92aWRlcnMgd2hvIGRvIG5vdCBmb2xsb3cgdGhlc2Ugc29ydHMgb2YgdHJhbnNhY3Rpb24gc2VtYW50aWNzIHNob3VsZCBwcm92aWRlIGFuIG92ZXJyaWRlIHRvIHRoaXMgbWV0aG9kLgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHN0YXJ0VHJhbnNhY3Rpb24oZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2spIHsKLSAgICAgICAgaWYgKGdyYXBoTWFuYWdlci5oYXNBbnlPcGVuVHJhbnNhY3Rpb25zKCkpIHsKLSAgICAgICAgICAgIC8vIGxvZ2dlciBhbmQgaGFuZGxpbmcgaW4gY2FsbGluZyBtZXRob2QKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRlZCB0byBzdGFydCB0cmFuc2FjdGlvbiBmb3IgJXMgYnV0IHRoZSB0cmFuc2FjdGlvbiB3YXMgYWxyZWFkeSBvcGVuIiwKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblRhc2suZ2V0UmVxdWVzdE1lc3NhZ2UoKS5nZXRSZXF1ZXN0SWQoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xvc2UgdGhlIHRyYW5zYWN0aW9uIHdpdGhvdXQgYSB7QGxpbmsgU2Vzc2lvblRhc2t9IHdoaWNoIHN1cHBsaWVzIHtAY29kZSBudWxsfSB0byB0aGF0IGFyZ3VtZW50IGZvcgotICAgICAqIHtAbGluayAjY2xvc2VUcmFuc2FjdGlvbihTZXNzaW9uVGFzaywgVHJhbnNhY3Rpb24uU3RhdHVzKX0uIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgY2xvc2VUcmFuc2FjdGlvbihmaW5hbCBUcmFuc2FjdGlvbi5TdGF0dXMgc3RhdHVzKSB7Ci0gICAgICAgIGNsb3NlVHJhbnNhY3Rpb24obnVsbCwgc3RhdHVzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcmllcyB0byBjbG9zZSB0aGUgdHJhbnNhY3Rpb24gYnV0IHdpbGwgY2F0Y2ggZXhjZXB0aW9ucyBhbmQgbG9nIHRoZW0uIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgY2xvc2VUcmFuc2FjdGlvblNhZmVseShmaW5hbCBUcmFuc2FjdGlvbi5TdGF0dXMgc3RhdHVzKSB7Ci0gICAgICAgIGNsb3NlVHJhbnNhY3Rpb25TYWZlbHkobnVsbCwgc3RhdHVzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcmllcyB0byBjbG9zZSB0aGUgdHJhbnNhY3Rpb24gYnV0IHdpbGwgY2F0Y2ggZXhjZXB0aW9ucyBhbmQgbG9nIHRoZW0uIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgY2xvc2VUcmFuc2FjdGlvblNhZmVseShmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaywgZmluYWwgVHJhbnNhY3Rpb24uU3RhdHVzIHN0YXR1cykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xvc2VUcmFuc2FjdGlvbihzZXNzaW9uVGFzaywgc3RhdHVzKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkZhaWxlZCB0byBjbG9zZSB0cmFuc2FjdGlvbiIsIGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzQXVkaXRMb2coZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MsIGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBncmVtbGluVG9FeGVjdXRlKSB7Ci0gICAgICAgIGlmIChzZXR0aW5ncy5lbmFibGVBdWRpdExvZykgewotICAgICAgICAgICAgQXV0aGVudGljYXRlZFVzZXIgdXNlciA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5BVVRIRU5USUNBVEVEX1VTRVIpLmdldCgpOwotICAgICAgICAgICAgaWYgKG51bGwgPT0gdXNlcikgeyAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIHdoZW4gdXNpbmcgdGhlIEFsbG93QWxsQXV0aGVudGljYXRvcgotICAgICAgICAgICAgICAgIHVzZXIgPSBBdXRoZW50aWNhdGVkVXNlci5BTk9OWU1PVVNfVVNFUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBhZGRyZXNzID0gY3R4LmNoYW5uZWwoKS5yZW1vdGVBZGRyZXNzKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGlmIChhZGRyZXNzLnN0YXJ0c1dpdGgoIi8iKSAmJiBhZGRyZXNzLmxlbmd0aCgpID4gMSkgYWRkcmVzcyA9IGFkZHJlc3Muc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgYXVkaXRMb2dnZXIuaW5mbygiVXNlciB7fSB3aXRoIGFkZHJlc3Mge30gcmVxdWVzdGVkOiB7fSIsIHVzZXIuZ2V0TmFtZSgpLCBhZGRyZXNzLCBncmVtbGluVG9FeGVjdXRlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsb3NlcyBhIHRyYW5zYWN0aW9uIHdpdGggY29tbWl0IG9yIHJvbGxiYWNrLiBTdHJpY3QgdHJhbnNhY3Rpb24gbWFuYWdlbWVudCBzZXR0aW5ncyBhcmUgb2JzZXJ2ZWQgd2hlbgotICAgICAqIGNvbmZpZ3VyZWQgYXMgc3VjaCBpbiB7QGxpbmsgU2V0dGluZ3Mjc3RyaWN0VHJhbnNhY3Rpb25NYW5hZ2VtZW50fSBhbmQgd2hlbiBhbGlhc2VzIGFyZSBwcmVzZW50IG9uIHRoZQotICAgICAqIHJlcXVlc3QgaW4gdGhlIGN1cnJlbnQge0BsaW5rIFNlc3Npb25UYXNrfS4gSWYgdGhlIHN1cHBsaWVkIHtAbGluayBTZXNzaW9uVGFza30gaXMge0Bjb2RlIG51bGx9IHRoZW4gInN0cmljdCIgaXMKLSAgICAgKiBieXBhc3NlZCBzbyB0aGlzIGZvcm0gbXVzdCBiZSBjYWxsZWQgd2l0aCBjYXJlLiBCeXBhc3NpbmcgaXMgb2Z0ZW4gdXNlZnVsIHRvIGVuc3VyZSB0aGF0IGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgKiBhcmUgY2xlYW5lZCB1cCB3aGVuIG11bHRpcGxlIGdyYXBocyBhcmUgcmVmZXJlbmNlZC4gUHJlZmVyIGNhbGxpbmcge0BsaW5rICNjbG9zZVRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uLlN0YXR1cyl9Ci0gICAgICogaW4gdGhpcyBjYXNlIGluc3RlYWQuIFRoaXMgbWV0aG9kIGlzIGlkZW1wb3RlbnQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgY2xvc2VUcmFuc2FjdGlvbihmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaywgZmluYWwgVHJhbnNhY3Rpb24uU3RhdHVzIHN0YXR1cykgewotICAgICAgICBpZiAoc3RhdHVzICE9IFRyYW5zYWN0aW9uLlN0YXR1cy5DT01NSVQgJiYgc3RhdHVzICE9IFRyYW5zYWN0aW9uLlN0YXR1cy5ST0xMQkFDSykKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgiVHJhbnNhY3Rpb24uU3RhdHVzIG5vdCBzdXBwb3J0ZWQ6ICVzIiwgc3RhdHVzKSk7Ci0KLSAgICAgICAgZmluYWwgYm9vbGVhbiBjb21taXQgPSBzdGF0dXMgPT0gVHJhbnNhY3Rpb24uU3RhdHVzLkNPTU1JVDsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBzdHJpY3QgPSBzZXNzaW9uVGFzayAhPSBudWxsICYmIHNlc3Npb25UYXNrLmdldFNldHRpbmdzKCkuc3RyaWN0VHJhbnNhY3Rpb25NYW5hZ2VtZW50OwotCi0gICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgIGlmIChjb21taXQpCi0gICAgICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLmNvbW1pdChuZXcgSGFzaFNldDw+KGFsaWFzZXNVc2VkQnlTZXNzaW9uKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLnJvbGxiYWNrKG5ldyBIYXNoU2V0PD4oYWxpYXNlc1VzZWRCeVNlc3Npb24pKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjb21taXQpCi0gICAgICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLmNvbW1pdEFsbCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5yb2xsYmFja0FsbCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBUaW1lci5Db250ZXh0IGdldE1ldHJpY3NUaW1lcihmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaykgewotICAgICAgICAvLyBnZXR0aW5nIHNvbWV0aGluZyBvdGhlciB0aGFuIGJ5dGVjb2RlIG9yIHNjcmlwdCBhdCB0aGlzIHBvaW50IGlzIHVubGlrZWx5IGFzIGVhcmxpZXIgdmFsaWRhdGlvbnMKLSAgICAgICAgLy8gc2hvdWxkIGhhdmUgcGlja2VkIHRoaXMgdXAuCi0gICAgICAgIHN3aXRjaCAoc2Vzc2lvblRhc2suZ2V0UmVxdWVzdENvbnRlbnRUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQllURUNPREU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNlc3Npb24udHJhdmVyc2FsT3BUaW1lci50aW1lKCk7Ci0gICAgICAgICAgICBjYXNlIFNDUklQVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gU2Vzc2lvbi5ldmFsT3BUaW1lci50aW1lKCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVucmVjb2duaXplZCBjb250ZW50IG9mIHRoZSAnZ3JlbWxpbicgYXJndW1lbnQgaW4gdGhlIHJlcXVlc3QiKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9GcmFtZS5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0ZyYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzZDAzODQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0ZyYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudGVkOwotCi0vKioKLSAqIEEgaG9sZGVyIGZvciBhIHtAY29kZSBTdHJpbmd9IG9yIHtAY29kZSBCeXRlQnVmfSB0aGF0IHJlcHJlc2VudHMgYSBtZXNzYWdlIHRvIGJlIHdyaXR0ZW4gYmFjayB0byB0aGUgcmVxdWVzdGluZwotICogY2xpZW50LgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEZyYW1lIHsKLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtc2c7Ci0KLSAgICBwdWJsaWMgRnJhbWUoZmluYWwgT2JqZWN0IG1zZykgewotICAgICAgICB0aGlzLm1zZyA9IG1zZzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldE1zZygpIHsKLSAgICAgICAgcmV0dXJuIG1zZzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgb2JqZWN0IGNvbnRhaW5lZCBpbiB0aGUgZnJhbWUgaXMge0Bjb2RlIFJlZmVyZW5jZUNvdW50ZWR9IHRoZW4gaXQgbWF5IG5lZWQgdG8gYmUgcmVsZWFzZWQgb3IgZWxzZQotICAgICAqIE5ldHR5IHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgdGhhdCBjb3VudGVkIHJlc291cmNlcyBhcmUgbGVha2luZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0cnlSZWxlYXNlKCkgewotICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgUmVmZXJlbmNlQ291bnRlZCkKLSAgICAgICAgICAgICgoUmVmZXJlbmNlQ291bnRlZCkgbXNnKS5yZWxlYXNlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0ZyYW1lTWVzc2FnZVNpemVFc3RpbWF0b3IuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9GcmFtZU1lc3NhZ2VTaXplRXN0aW1hdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YzVhMjkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0ZyYW1lTWVzc2FnZVNpemVFc3RpbWF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkhvbGRlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkZpbGVSZWdpb247Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5NZXNzYWdlU2l6ZUVzdGltYXRvcjsKLQotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS51dGlsLmludGVybmFsLk9iamVjdFV0aWwuY2hlY2tQb3NpdGl2ZU9yWmVybzsKLQotLyoqCi0gKiBBIHtAY29kZSBNZXNzYWdlU2l6ZUVzdGltYXRvcn0gdGhhdCBzaXplcyB0aGUge0BsaW5rIEZyYW1lfSBjbGFzcy4gVGhpcyBpcyBiYXNpY2FsbHkgYW4gaW1wbGVtZW50YXRpb24gb2YgbmV0dHkncwotICogZGVmYXVsdCBidXQgd2l0aCB0aGF0IGFkZGl0aW9uYWwgZmVhdHVyZS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEZyYW1lTWVzc2FnZVNpemVFc3RpbWF0b3IgaW1wbGVtZW50cyBNZXNzYWdlU2l6ZUVzdGltYXRvciB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBIYW5kbGVJbXBsIGltcGxlbWVudHMgSGFuZGxlIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgdW5rbm93blNpemU7Ci0KLSAgICAgICAgcHJpdmF0ZSBIYW5kbGVJbXBsKGludCB1bmtub3duU2l6ZSkgewotICAgICAgICAgICAgdGhpcy51bmtub3duU2l6ZSA9IHVua25vd25TaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgc2l6ZShPYmplY3QgbXNnKSB7Ci0gICAgICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgRnJhbWUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZTAoKChGcmFtZSkgbXNnKS5nZXRNc2coKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBzaXplMChtc2cpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFN0YW5kYXJkIG5ldHR5IGltcGxlbWVudGF0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBpbnQgc2l6ZTAoZmluYWwgT2JqZWN0IG1zZykgewotICAgICAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIEJ5dGVCdWYpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChCeXRlQnVmKSBtc2cpLnJlYWRhYmxlQnl0ZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtc2cgaW5zdGFuY2VvZiBCeXRlQnVmSG9sZGVyKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoQnl0ZUJ1ZkhvbGRlcikgbXNnKS5jb250ZW50KCkucmVhZGFibGVCeXRlcygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIEZpbGVSZWdpb24pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB1bmtub3duU2l6ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCByZXR1cm5zIHtAY29kZSA4fSBmb3IgdW5rbm93biBtZXNzYWdlcyB3aGljaCBtYXRjaGVzIHRoZQotICAgICAqIGltcGxlbWVudGF0aW9uIG9mIG5ldHR5IGF0IHtAY29kZSBEZWZhdWx0TWVzc2FnZVNpemVFc3RpbWF0b3J9Ci0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRnJhbWVNZXNzYWdlU2l6ZUVzdGltYXRvciBpbnN0YW5jZSA9IG5ldyBGcmFtZU1lc3NhZ2VTaXplRXN0aW1hdG9yKDgpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGUgaGFuZGxlOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdW5rbm93blNpemUgICBUaGUgc2l6ZSB3aGljaCBpcyByZXR1cm5lZCBmb3IgdW5rbm93biBtZXNzYWdlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgRnJhbWVNZXNzYWdlU2l6ZUVzdGltYXRvcihpbnQgdW5rbm93blNpemUpIHsKLSAgICAgICAgY2hlY2tQb3NpdGl2ZU9yWmVybyh1bmtub3duU2l6ZSwgInVua25vd25TaXplIik7Ci0gICAgICAgIGhhbmRsZSA9IG5ldyBIYW5kbGVJbXBsKHVua25vd25TaXplKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEZyYW1lTWVzc2FnZVNpemVFc3RpbWF0b3IgaW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiBpbnN0YW5jZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgSGFuZGxlIG5ld0hhbmRsZSgpIHsKLSAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0dyZW1saW5SZXNwb25zZUZyYW1lRW5jb2Rlci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0dyZW1saW5SZXNwb25zZUZyYW1lRW5jb2Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDdmNjk2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9HcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5NZXNzYWdlVGV4dFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JlbWxpblNlcnZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5FeGNlcHRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5NZXRyaWNNYW5hZ2VyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXI7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5NZXNzYWdlVG9NZXNzYWdlRW5jb2RlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkubmFtZTsKLQotLyoqCi0gKiBFbnN1cmVzIHRoYXQgYW55IHtAbGluayBSZXNwb25zZU1lc3NhZ2V9IG1hbmFnZXMgdG8gZ2V0IGNvbnZlcnRlZCB0byBhIHtAbGluayBGcmFtZX0uIEJ5IGNvbnZlcnRpbmcgdG8ge0BsaW5rIEZyYW1lfQotICogZG93bnN0cmVhbSBwcm90b2NvbHMgY2FuIHRyZWF0IHRoZSBnZW5lcmljIHtAbGluayBGcmFtZX0gYW55IHdheSBpdCB3YW50cyAoZS5nLiB3cml0ZSBpdCBiYWNrIGFzIGEgYnl0ZSBhcnJheSwKLSAqIHdlYnNvY2tldCBmcmFtZSwgZXRjKS4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBDaGFubmVsSGFuZGxlci5TaGFyYWJsZQotcHVibGljIGNsYXNzIEdyZW1saW5SZXNwb25zZUZyYW1lRW5jb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VFbmNvZGVyPFJlc3BvbnNlTWVzc2FnZT4gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIuY2xhc3MpOwotICAgIHN0YXRpYyBmaW5hbCBNZXRlciBlcnJvck1ldGVyID0gTWV0cmljTWFuYWdlci5JTlNUQU5DRS5nZXRNZXRlcihuYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJlcnJvcnMiKSk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBlbmNvZGUoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgUmVzcG9uc2VNZXNzYWdlIG8sIGZpbmFsIExpc3Q8T2JqZWN0PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5nZXQoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VCaW5hcnkgPSBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuVVNFX0JJTkFSWSkuZ2V0KCk7Ci0gICAgICAgIGZpbmFsIFNlc3Npb24gc2Vzc2lvbiA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVNTSU9OKS5nZXQoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKCFvLmdldFN0YXR1cygpLmdldENvZGUoKS5pc1N1Y2Nlc3MoKSkKLSAgICAgICAgICAgICAgICBlcnJvck1ldGVyLm1hcmsoKTsKLQotICAgICAgICAgICAgaWYgKHVzZUJpbmFyeSkgewotICAgICAgICAgICAgICAgIGZpbmFsIEZyYW1lIHNlcmlhbGl6ZWQ7Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBjYW1lIGluIG9uIGEgc2Vzc2lvbiB0aGVuIHRoZSBzZXJpYWxpemF0aW9uIG11c3Qgb2NjdXIgaW4gdGhhdCBzYW1lIHRocmVhZCwgZXhjZXB0Ci0gICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3Igd2hlcmUgd2UgY2FuIGZyZWUgdGhlIHNlc3Npb24gZXhlY3V0b3IgZnJvbSBoYXZpbmcgdG8gZG8gdGhhdCBqb2IuIHRoZQotICAgICAgICAgICAgICAgIC8vIHByb2JsZW0gaGVyZSBpcyB0aGF0IGlmIHRoZSBzZXNzaW9uIGV4ZWN1dG9yIGlzIHVzZWQgaW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IgYW5kIHRoZSBleGVjdXRvciBpcwotICAgICAgICAgICAgICAgIC8vIGJsb2NrZWQgYnkgcGFyYWxsZWwgcmVxdWVzdHMgdGhlbiB0aGVyZSBpcyBubyB0aHJlYWQgYXZhaWxhYmxlIHRvIHNlcmlhbGl6ZSB0aGUgcmVzdWx0IGFuZCBzZW5kCi0gICAgICAgICAgICAgICAgLy8gYmFjayB0aGUgcmVzcG9uc2UgYXMgdGhlIHdvcmtlcnMgZ2V0IGFsbCB0aWVkIHVwIGJlaGluZCB0aGUgc2Vzc2lvbiBleGVjdXRvci4KLSAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBzZXNzaW9uIHx8ICFvLmdldFN0YXR1cygpLmdldENvZGUoKS5pc1N1Y2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCA9IG5ldyBGcmFtZShzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkobywgY3R4LmFsbG9jKCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWQgPSBuZXcgRnJhbWUoc2Vzc2lvbi5nZXRFeGVjdXRvcigpLnN1Ym1pdCgoKSAtPiBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkobywgY3R4LmFsbG9jKCkpKS5nZXQoKSk7Ci0KLSAgICAgICAgICAgICAgICBvYmplY3RzLmFkZChzZXJpYWxpemVkKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIEdyZW1saW5UZXh0UmVxdWVzdERlY29kZXIgd2lsbCBoYXZlIHBsYWNlZCBhIE1lc3NhZ2VUZXh0U2VyaWFsaXplcgotICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlIG9uIHRoZSBjaGFubmVsLgotICAgICAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjw/PiB0ZXh0U2VyaWFsaXplciA9IChNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4pIHNlcmlhbGl6ZXI7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBGcmFtZSBzZXJpYWxpemVkOwotCi0gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHJlcXVlc3QgY2FtZSBpbiBvbiBhIHNlc3Npb24gdGhlbiB0aGUgc2VyaWFsaXphdGlvbiBtdXN0IG9jY3VyIHRoYXQgc2FtZSB0aHJlYWQgZXhjZXB0Ci0gICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgZXJyb3JzIGZvciByZWFzb25zIGRlc2NyaWJlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSBzZXNzaW9uIHx8ICFvLmdldFN0YXR1cygpLmdldENvZGUoKS5pc1N1Y2Nlc3MoKSkKLSAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplZCA9IG5ldyBGcmFtZSh0ZXh0U2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKG8sIGN0eC5hbGxvYygpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVkID0gbmV3IEZyYW1lKHNlc3Npb24uZ2V0RXhlY3V0b3IoKS5zdWJtaXQoKCkgLT4gdGV4dFNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhvLCBjdHguYWxsb2MoKSkpLmdldCgpKTsKLQotICAgICAgICAgICAgICAgIG9iamVjdHMuYWRkKHNlcmlhbGl6ZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGVycm9yTWV0ZXIubWFyaygpOwotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSByZXN1bHQgW3t9XSBpbiB0aGUgcmVxdWVzdCB7fSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBhbmQgcmV0dXJuZWQuIiwgby5nZXRSZXN1bHQoKSwgby5nZXRSZXF1ZXN0SWQoKSwgZXgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIkVycm9yIGR1cmluZyBzZXJpYWxpemF0aW9uOiAlcyIsIEV4Y2VwdGlvbkhlbHBlci5nZXRNZXNzYWdlRnJvbUV4Y2VwdGlvbk9yQ2F1c2UoZXgpKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBlcnJvciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChvLmdldFJlcXVlc3RJZCgpKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oZXgpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfU0VSSUFMSVpBVElPTikuY3JlYXRlKCk7Ci0gICAgICAgICAgICBpZiAodXNlQmluYXJ5KSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0cy5hZGQoc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KGVycm9yLCBjdHguYWxsb2MoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4gdGV4dFNlcmlhbGl6ZXIgPSAoTWVzc2FnZVRleHRTZXJpYWxpemVyPD8+KSBzZXJpYWxpemVyOwotICAgICAgICAgICAgICAgIG9iamVjdHMuYWRkKHRleHRTZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoZXJyb3IsIGN0eC5hbGxvYygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmphdmEKaW5kZXggMmZjZjljNC4uOTc0MjU0NyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YQpAQCAtMTgsOSArMTgsNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7CiAKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxGdXR1cmVMaXN0ZW5lcjsKIGltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2U7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkZ1bGxIdHRwTWVzc2FnZTsKIGltcG9ydCBpby5uZXR0eS51dGlsLlJlZmVyZW5jZUNvdW50VXRpbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOwpAQCAtMzIsMTYgKzMwLDE2IEBACiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS51dGlsLkJhc2U2NDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiBpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuVU5BVVRIT1JJWkVEOwotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFZlcnNpb24uSFRUUF8xXzE7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5kc2wuY3JlZGVudGlhbC5DcmVkZW50aWFsR3JhcGhUb2tlbnMuUFJPUEVSVFlfQUREUkVTUzsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzLmRzbC5jcmVkZW50aWFsLkNyZWRlbnRpYWxHcmFwaFRva2Vucy5QUk9QRVJUWV9QQVNTV09SRDsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzLmRzbC5jcmVkZW50aWFsLkNyZWRlbnRpYWxHcmFwaFRva2Vucy5QUk9QRVJUWV9VU0VSTkFNRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yOwogCiAvKioKICAqIEltcGxlbWVudHMgYmFzaWMgSFRUUCBhdXRoZW50aWNhdGlvbiBmb3IgdXNlIHdpdGggdGhlIHtAbGluayBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcn0gYW5kIEhUVFAgYmFzZWQgQVBJIGNhbGxzLgpAQCAtNDksMjAgKzQ3LDEyIEBACiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCiAgKi8KIHB1YmxpYyBjbGFzcyBIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEF1dGhlbnRpY2F0aW9uSGFuZGxlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcyk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOQ09SUkVDVF9DUkVERU5USUFMU19NRVNTQUdFID0gIk1pc3Npbmcgb3IgaW5jb3JyZWN0IGNyZWRlbnRpYWxzIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgYXVkaXRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmVtbGluU2VydmVyLkFVRElUX0xPR0dFUl9OQU1FKTsKICAgICBwcml2YXRlIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBCYXNlNjQuRGVjb2RlciBkZWNvZGVyID0gQmFzZTY0LmdldFVybERlY29kZXIoKTsKIAotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy41LjAsIHJlcGxhY2VkIGJ5IHtAbGluayAjSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0b3IsIEF1dGhvcml6ZXIsIFNldHRpbmdzKX0uCi0gICAgICovCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyKGZpbmFsIEF1dGhlbnRpY2F0b3IgYXV0aGVudGljYXRvciwgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgdGhpcyhhdXRoZW50aWNhdG9yLCBudWxsLCBzZXR0aW5ncyk7Ci0gICAgfQotCiAgICAgcHVibGljIEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcihmaW5hbCBBdXRoZW50aWNhdG9yIGF1dGhlbnRpY2F0b3IsIGZpbmFsIEF1dGhvcml6ZXIgYXV0aG9yaXplciwgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKICAgICAgICAgc3VwZXIoYXV0aGVudGljYXRvciwgYXV0aG9yaXplcik7CiAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsKQEAgLTczLDcgKzYzLDggQEAKICAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIEZ1bGxIdHRwTWVzc2FnZSkgewogICAgICAgICAgICAgZmluYWwgRnVsbEh0dHBNZXNzYWdlIHJlcXVlc3QgPSAoRnVsbEh0dHBNZXNzYWdlKSBtc2c7CiAgICAgICAgICAgICBpZiAoIXJlcXVlc3QuaGVhZGVycygpLmNvbnRhaW5zKCJBdXRob3JpemF0aW9uIikpIHsKLSAgICAgICAgICAgICAgICBzZW5kRXJyb3IoY3R4LCBtc2cpOworICAgICAgICAgICAgICAgIHNlbmRFcnJvcihjdHgsIFVOQVVUSE9SSVpFRCwgSU5DT1JSRUNUX0NSRURFTlRJQUxTX01FU1NBR0UpOworICAgICAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50VXRpbC5yZWxlYXNlKG1zZyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC04MSwyNCArNzIsMjQgQEAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBiYXNpYyA9ICJCYXNpYyAiOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml6YXRpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcnMoKS5nZXQoIkF1dGhvcml6YXRpb24iKTsKICAgICAgICAgICAgIGlmICghYXV0aG9yaXphdGlvbkhlYWRlci5zdGFydHNXaXRoKGJhc2ljKSkgewotICAgICAgICAgICAgICAgIHNlbmRFcnJvcihjdHgsIG1zZyk7CisgICAgICAgICAgICAgICAgc2VuZEVycm9yKGN0eCwgVU5BVVRIT1JJWkVELCBJTkNPUlJFQ1RfQ1JFREVOVElBTFNfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBieXRlW10gZGVjb2RlZFVzZXJQYXNzID0gbnVsbDsKKyAgICAgICAgICAgIGJ5dGVbXSBkZWNvZGVkVXNlclBhc3M7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlbmNvZGVkVXNlclBhc3MgPSBhdXRob3JpemF0aW9uSGVhZGVyLnN1YnN0cmluZyhiYXNpYy5sZW5ndGgoKSk7CiAgICAgICAgICAgICAgICAgZGVjb2RlZFVzZXJQYXNzID0gZGVjb2Rlci5kZWNvZGUoZW5jb2RlZFVzZXJQYXNzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWFlKSB7Ci0gICAgICAgICAgICAgICAgc2VuZEVycm9yKGN0eCwgbXNnKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7Ci0gICAgICAgICAgICAgICAgc2VuZEVycm9yKGN0eCwgbXNnKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gfCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBzZW5kRXJyb3IoY3R4LCBVTkFVVEhPUklaRUQsIGV4LmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXphdGlvbiA9IG5ldyBTdHJpbmcoZGVjb2RlZFVzZXJQYXNzLCBDaGFyc2V0LmZvck5hbWUoIlVURi04IikpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhvcml6YXRpb24gPSBuZXcgU3RyaW5nKGRlY29kZWRVc2VyUGFzcywgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBzcGxpdCA9IGF1dGhvcml6YXRpb24uc3BsaXQoIjoiKTsKICAgICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggIT0gMikgewotICAgICAgICAgICAgICAgIHNlbmRFcnJvcihjdHgsIG1zZyk7CisgICAgICAgICAgICAgICAgc2VuZEVycm9yKGN0eCwgVU5BVVRIT1JJWkVELCBJTkNPUlJFQ1RfQ1JFREVOVElBTFNfTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTEyMSwxNCArMTEyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFscy5nZXQoUFJPUEVSVFlfVVNFUk5BTUUpLCBhZGRyZXNzLCBhdXRoQ2xhc3NQYXJ0c1thdXRoQ2xhc3NQYXJ0cy5sZW5ndGggLSAxXSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoQXV0aGVudGljYXRpb25FeGNlcHRpb24gYWUpIHsKLSAgICAgICAgICAgICAgICBzZW5kRXJyb3IoY3R4LCBtc2cpOworICAgICAgICAgICAgICAgIHNlbmRFcnJvcihjdHgsIFVOQVVUSE9SSVpFRCwgYWUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNlbmRFcnJvcihmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBPYmplY3QgbXNnKSB7Ci0gICAgICAgIC8vIENsb3NlIHRoZSBjb25uZWN0aW9uIGFzIHNvb24gYXMgdGhlIGVycm9yIG1lc3NhZ2UgaXMgc2VudC4KLSAgICAgICAgY3R4LndyaXRlQW5kRmx1c2gobmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBVTkFVVEhPUklaRUQpKS5hZGRMaXN0ZW5lcihDaGFubmVsRnV0dXJlTGlzdGVuZXIuQ0xPU0UpOwotICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOwotICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwQmFzaWNBdXRob3JpemF0aW9uSGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBCYXNpY0F1dGhvcml6YXRpb25IYW5kbGVyLmphdmEKaW5kZXggNDBjNmZiMy4uZjYzZmQ4MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBCYXNpY0F1dGhvcml6YXRpb25IYW5kbGVyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBCYXNpY0F1dGhvcml6YXRpb25IYW5kbGVyLmphdmEKQEAgLTIxLDIwICsyMSwxOSBAQAogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXI7CiBpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7CiBpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5GdWxsSHR0cE1lc3NhZ2U7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkZ1bGxIdHRwUmVxdWVzdDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFV0aWw7CiBpbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRlZFVzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aHouQXV0aG9yaXphdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoei5BdXRob3JpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNUOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKIGltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiBpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuVU5BVVRIT1JJWkVEOwogCkBAIC01OCwxNiArNTcsOCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgY2hhbm5lbFJlYWQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgT2JqZWN0IG1zZykgewotICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgRnVsbEh0dHBNZXNzYWdlKXsKLSAgICAgICAgICAgIGZpbmFsIEZ1bGxIdHRwTWVzc2FnZSByZXF1ZXN0ID0gKEZ1bGxIdHRwTWVzc2FnZSkgbXNnOwotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBrZWVwQWxpdmUgPSBIdHRwVXRpbC5pc0tlZXBBbGl2ZShyZXF1ZXN0KTsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IEh0dHBIYW5kbGVyVXRpbC5nZXRSZXF1ZXN0TWVzc2FnZUZyb21IdHRwUmVxdWVzdCgoRnVsbEh0dHBSZXF1ZXN0KSByZXF1ZXN0KTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKLSAgICAgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgQkFEX1JFUVVFU1QsIGlhZS5nZXRNZXNzYWdlKCksIGtlZXBBbGl2ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgUmVxdWVzdE1lc3NhZ2UpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlID0gKFJlcXVlc3RNZXNzYWdlKSBtc2c7CiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgdXNlciA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5BVVRIRU5USUNBVEVEX1VTRVIpLmdldCgpOwpAQCAtNzUsMjcgKzY2LDI1IEBACiAgICAgICAgICAgICAgICAgICAgIHVzZXIgPSBBdXRoZW50aWNhdGVkVXNlci5BTk9OWU1PVVNfVVNFUjsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBhdXRob3JpemVyLmF1dGhvcml6ZSh1c2VyLCByZXF1ZXN0TWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgY3R4LmZpcmVDaGFubmVsUmVhZChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbiA9IHJlcXVlc3RNZXNzYWdlLmdldEdyZW1saW4oKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICAgICAgYWxpYXNlcy5wdXQoVG9rZW5zLkFSR1NfRywgcmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGQoVG9rZW5zLkFSR1NfRykpOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZXN0cmljdGVkR3JlbWxpbiA9IGF1dGhvcml6ZXIuYXV0aG9yaXplKHVzZXIsIGdyZW1saW4sIGFsaWFzZXMpOworICAgICAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlc3RyaWN0ZWRNc2cgPSBSZXF1ZXN0TWVzc2FnZS5mcm9tKHJlcXVlc3RNZXNzYWdlLCByZXN0cmljdGVkR3JlbWxpbikuY3JlYXRlKCk7CisgICAgICAgICAgICAgICAgY3R4LmZpcmVDaGFubmVsUmVhZChyZXN0cmljdGVkTXNnKTsKKwogICAgICAgICAgICAgfSBjYXRjaCAoQXV0aG9yaXphdGlvbkV4Y2VwdGlvbiBleCkgeyAgLy8gRXhwZWN0ZWQ6IHVzZXJzIGNhbiBhbHRlcm5hdGUgYmV0d2VlbiBhbGxvd2VkIGFuZCBkaXNhbGxvd2VkIHJlcXVlc3RzCiAgICAgICAgICAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSBjdHguY2hhbm5lbCgpLnJlbW90ZUFkZHJlc3MoKS50b1N0cmluZygpOwogICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzLnN0YXJ0c1dpdGgoIi8iKSAmJiBhZGRyZXNzLmxlbmd0aCgpID4gMSkgYWRkcmVzcyA9IGFkZHJlc3Muc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQ7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gSHR0cEhhbmRsZXJVdGlsLmdldFJlcXVlc3RNZXNzYWdlRnJvbUh0dHBSZXF1ZXN0KChGdWxsSHR0cFJlcXVlc3QpIHJlcXVlc3QpLmdldEFyZ09yRGVmYXVsdChUb2tlbnMuQVJHU19HUkVNTElOLCAiIik7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgewotICAgICAgICAgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgQkFEX1JFUVVFU1QsIHJlcXVlc3RNZXNzYWdlLmdldFJlcXVlc3RJZCgpLCBpYWUuZ2V0TWVzc2FnZSgpLCBrZWVwQWxpdmUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSByZXF1ZXN0TWVzc2FnZS5nZXRHcmVtbGluKCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICBhdWRpdExvZ2dlci5pbmZvKCJVc2VyIHt9IHdpdGggYWRkcmVzcyB7fSBhdHRlbXB0ZWQgYW4gdW5hdXRob3JpemVkIGh0dHAgcmVxdWVzdDoge30iLAogICAgICAgICAgICAgICAgICAgICB1c2VyLmdldE5hbWUoKSwgYWRkcmVzcywgc2NyaXB0KTsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIk5vIGF1dGhvcml6YXRpb24gZm9yIHNjcmlwdCBbJXNdIC0gY2hlY2sgcGVybWlzc2lvbnMuIiwgc2NyaXB0KTsKLSAgICAgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgVU5BVVRIT1JJWkVELCByZXF1ZXN0TWVzc2FnZS5nZXRSZXF1ZXN0SWQoKSwgbWVzc2FnZSwga2VlcEFsaXZlKTsKKyAgICAgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgVU5BVVRIT1JJWkVELCAiRmFpbGVkIHRvIGF1dGhvcml6ZTogIiArIGV4LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3QgcmVhZHkgdG8gaGFuZGxlIHJlcXVlc3RzIC0gdW5rbm93biBlcnJvciIsIGF1dGhvcml6ZXIuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpOwotICAgICAgICAgICAgICAgIEh0dHBIYW5kbGVyVXRpbC5zZW5kRXJyb3IoY3R4LCBJTlRFUk5BTF9TRVJWRVJfRVJST1IsIHJlcXVlc3RNZXNzYWdlLmdldFJlcXVlc3RJZCgpLCBtZXNzYWdlLCBrZWVwQWxpdmUpOworICAgICAgICAgICAgICAgIEh0dHBIYW5kbGVyVXRpbC5zZW5kRXJyb3IoY3R4LCBJTlRFUk5BTF9TRVJWRVJfRVJST1IsIG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50VXRpbC5yZWxlYXNlKG1zZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwQ29udGVudENvbXByZXNzaW9uSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZGYzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDg5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZVdGlsOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZDsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbE91dGJvdW5kSGFuZGxlckFkYXB0ZXI7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUHJvbWlzZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJOYW1lczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5MYXN0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC56aXAuRGVmbGF0ZXI7CisKKy8qKgorICogSGFuZGxlcyBjb21wcmVzc2lvbiBvZiBjb250ZW50IHdoZW4gdGhlIHJlc3BvbnNlIGNvbnRhaW5zIHRoZSAiQ29udGVudC1FbmNvZGluZyIgaGVhZGVyLiBDdXJyZW50bHkgc3VwcG9ydHMgImRlZmxhdGUiLgorICogVGhpcyBjbGFzcyBpcyBzcGVjaWZpY2FsbHkgbWVhbnQgdG8gd29yayB3aXRoIHNlcmlhbGl6ZWQgR3JhcGhCaW5hcnkgY2h1bmtzIGFzIHRoZXkgbmVlZCB0byBiZSBkZWZsYXRlZCBwZXIgY2h1bmsgc3VjaAorICogdGhhdCB0aGUgY2h1bmsgZW5kcyB3aXRoIGEgY29tcHJlc3NlZCBNYXJrZXIuRU5EX09GX1NUUkVBTS4KKyAqLworQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCitwdWJsaWMgY2xhc3MgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIgZXh0ZW5kcyBDaGFubmVsT3V0Ym91bmRIYW5kbGVyQWRhcHRlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PERlZmxhdGVyPiBERUZMQVRFUiA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJkZWZsYXRlciIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fQlVGRkVSX1NJWkUgPSAxNjsgLy8gRG9uJ3Qgd2FudCBhIGJ1ZmZlciB0b28gc21hbGwgYXMgaXQgY291bGQgY2F1c2UgbG90cyBvZiByZXNpemluZy4KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIE9iamVjdCBtc2csIENoYW5uZWxQcm9taXNlIHByb21pc2UpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBPYmplY3Qgb3V0ID0gbXNnOworICAgICAgICBpbnQgd3JpdGVJZHggPSAwOworICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKKworICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlICYmICgoKEh0dHBSZXNwb25zZSkgbXNnKS5oZWFkZXJzKCkuY29udGFpbnMoSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfRU5DT0RJTkcpKSkgeworICAgICAgICAgICAgY3R4LmF0dHIoREVGTEFURVIpLnNldChuZXcgRGVmbGF0ZXIoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgSHR0cENvbnRlbnQpIHsKKyAgICAgICAgICAgIGZpbmFsIEJ5dGVCdWYgY2h1bmsgPSAoKEh0dHBDb250ZW50KSBtc2cpLmNvbnRlbnQoKTsKKyAgICAgICAgICAgIGZpbmFsIERlZmxhdGVyIGNvbXByZXNzb3IgPSBjdHguYXR0cihERUZMQVRFUikuZ2V0KCk7CisgICAgICAgICAgICBpZiAobnVsbCA9PSBjb21wcmVzc29yKSB7CisgICAgICAgICAgICAgICAgc3VwZXIud3JpdGUoY3R4LCBtc2csIHByb21pc2UpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29tcHJlc3Nvci5zZXRJbnB1dChCeXRlQnVmVXRpbC5nZXRCeXRlcyhjaHVuaykpOyAvLyBuZWVkIHRvIGNvcHkgYnl0ZXMgYXMgaXQgbWF5IGJlIGluIGEgZGlyZWN0IGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIChtc2cgaW5zdGFuY2VvZiBMYXN0SHR0cENvbnRlbnQpIHsgY29tcHJlc3Nvci5maW5pc2goKTsgfQorCisgICAgICAgICAgICBmaW5hbCBpbnQgY29tcHJlc3NlZFNpemVFc3RpbWF0ZSA9IGNodW5rLnJlYWRhYmxlQnl0ZXMoKSAvIDg7CisgICAgICAgICAgICBieXRlW10gb3V0QnVmID0gbmV3IGJ5dGVbTWF0aC5tYXgoY29tcHJlc3NlZFNpemVFc3RpbWF0ZSwgTUlOX0JVRkZFUl9TSVpFKV07CisgICAgICAgICAgICAvLyBOZWVkIHRvIFNZTkNfRkxVU0ggdG8gZW5zdXJlIHRoYXQgZWFjaCBjaHVuaydzIGRhdGEgaXMgY29tcGxldGVseSBjb21wcmVzc2VkLgorICAgICAgICAgICAgYnl0ZXNXcml0dGVuID0gY29tcHJlc3Nvci5kZWZsYXRlKG91dEJ1Ziwgd3JpdGVJZHgsIG91dEJ1Zi5sZW5ndGgsIERlZmxhdGVyLlNZTkNfRkxVU0gpOworCisgICAgICAgICAgICB3aGlsZSAoYnl0ZXNXcml0dGVuID09IChvdXRCdWYubGVuZ3RoIC0gd3JpdGVJZHgpKSB7CisgICAgICAgICAgICAgICAgd3JpdGVJZHggKz0gYnl0ZXNXcml0dGVuOworICAgICAgICAgICAgICAgIG91dEJ1ZiA9IEFycmF5cy5jb3B5T2Yob3V0QnVmLCBvdXRCdWYubGVuZ3RoICogMik7CisgICAgICAgICAgICAgICAgYnl0ZXNXcml0dGVuID0gY29tcHJlc3Nvci5kZWZsYXRlKG91dEJ1Ziwgd3JpdGVJZHgsIG91dEJ1Zi5sZW5ndGggLSB3cml0ZUlkeCwgRGVmbGF0ZXIuU1lOQ19GTFVTSCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdyaXRlSWR4ICs9IGJ5dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIG91dCA9ICgoSHR0cENvbnRlbnQpIG1zZykucmVwbGFjZShVbnBvb2xlZC53cmFwcGVkQnVmZmVyKG91dEJ1Zikud3JpdGVySW5kZXgod3JpdGVJZHgpKTsKKyAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50VXRpbC5yZWxlYXNlKG1zZyk7CisKKyAgICAgICAgICAgIGlmIChvdXQgaW5zdGFuY2VvZiBMYXN0SHR0cENvbnRlbnQpIHsgY3R4LmF0dHIoREVGTEFURVIpLmdldEFuZFNldChudWxsKS5lbmQoKTsgfQorICAgICAgICB9CisKKyAgICAgICAgc3VwZXIud3JpdGUoY3R4LCBvdXQsIHByb21pc2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyLmphdmEKaW5kZXggMGFhNDI0ZC4uZmEzNGQ0ZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyLmphdmEKQEAgLTE4LDE2NSArMTgsMTg5IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKIAoraW1wb3J0IGNvbS5jb2RhaGFsZS5tZXRyaWNzLk1ldGVyOwogaW1wb3J0IGNvbS5jb2RhaGFsZS5tZXRyaWNzLlRpbWVyOwogaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZDsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWw7CiBpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKIGltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXI7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUHJvbWlzZTsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLlNpbXBsZUNoYW5uZWxJbmJvdW5kSGFuZGxlcjsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLlRvb0xvbmdGcmFtZUV4Y2VwdGlvbjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2U7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkZ1bGxIdHRwUmVxdWVzdDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEh0dHBDb250ZW50OwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXM7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFV0aWw7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmV4Y2VwdGlvbi5FeGNlcHRpb25VdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRDaGVja2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzLlRpbWVkSW50ZXJydXB0VGltZW91dEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0RW5naW5lOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UuZ3JhbW1hci5HcmVtbGluUGFyc2VyRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuRmFpbHVyZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9wZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Qb3A7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci51dGlsLkFic3RyYWN0VHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5Db250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyYXBoTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlByb2Nlc3NpbmdFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdGVkVXNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLkdyZW1saW5FcnJvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLk1ldHJpY01hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5UZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FbGVtZW50OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuVHJhdmVyc2VySXRlcmF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UcmFuc2FjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNsb3NlYWJsZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuVGVtcG9yYXJ5RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5FeGNlcHRpb25IZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uVXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLk1lc3NhZ2VUZXh0U2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmNvZGVoYXVzLmdyb292eS5jb250cm9sLk11bHRpcGxlQ29tcGlsYXRpb25FcnJvcnNFeGNlcHRpb247CiBpbXBvcnQgb3JnLmphdmF0dXBsZXMuUGFpcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOworaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRFeGNlcHRpb247CiBpbXBvcnQgamF2YXguc2NyaXB0LlNpbXBsZUJpbmRpbmdzOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5Ob1N1Y2hFbGVtZW50RXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OwogaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzazsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5SZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRGdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQ29uc3VtZXI7CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07CiAKIGltcG9ydCBzdGF0aWMgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkubmFtZTsKLWltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBNZXRob2QuR0VUOwotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cE1ldGhvZC5QT1NUOwotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNUOwotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzLkNPTlRJTlVFOworaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cEhlYWRlck5hbWVzLkFDQ0VQVF9FTkNPRElORzsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJOYW1lcy5DT05URU5UX0VOQ09ESU5HOworaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cEhlYWRlclZhbHVlcy5ERUZMQVRFOwogaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLWltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1cy5NRVRIT0RfTk9UX0FMTE9XRUQ7Ci1pbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuTk9UX0ZPVU5EOwogaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzLk9LOwotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFZlcnNpb24uSFRUUF8xXzE7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIuUmVxdWVzdFN0YXRlLkZJTklTSEVEOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyLlJlcXVlc3RTdGF0ZS5GSU5JU0hJTkc7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIuUmVxdWVzdFN0YXRlLk5PVF9TVEFSVEVEOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyLlJlcXVlc3RTdGF0ZS5TVFJFQU1JTkc7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEhhbmRsZXJVdGlsLnNlbmRIdHRwUmVzcG9uc2U7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEhhbmRsZXJVdGlsLnNlbmRMYXN0SHR0cENvbnRlbnQ7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cEhhbmRsZXJVdGlsLndyaXRlRXJyb3I7CiAKIC8qKgotICogSGFuZGxlciB0aGF0IHByb2Nlc3NlcyBIVFRQIHJlcXVlc3RzIHRvIHRoZSBIVFRQIEdyZW1saW4gZW5kcG9pbnQuCisgKiBIYW5kbGVyIHRoYXQgcHJvY2Vzc2VzIFJlcXVlc3RNZXNzYWdlLiBUaGlzIGhhbmRsZXIgd2lsbCBhdHRlbXB0IHRvIGV4ZWN1dGUgdGhlIHF1ZXJ5IGFuZCBzdHJlYW0gdGhlIHJlc3VsdHMgYmFjaworICogaW4gSFRUUCBjaHVua3MgdG8gdGhlIGNsaWVudC4KICAqCiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCiAgKi8KIEBDaGFubmVsSGFuZGxlci5TaGFyYWJsZQotcHVibGljIGNsYXNzIEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyIGV4dGVuZHMgQ2hhbm5lbEluYm91bmRIYW5kbGVyQWRhcHRlciB7CitwdWJsaWMgY2xhc3MgSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIgZXh0ZW5kcyBTaW1wbGVDaGFubmVsSW5ib3VuZEhhbmRsZXI8UmVxdWVzdE1lc3NhZ2U+IHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIuY2xhc3MpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBhdWRpdExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEdyZW1saW5TZXJ2ZXIuQVVESVRfTE9HR0VSX05BTUUpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGltZXIgZXZhbE9wVGltZXIgPSBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldFRpbWVyKG5hbWUoR3JlbWxpblNlcnZlci5jbGFzcywgIm9wIiwgImV2YWwiKSk7CiAKICAgICAvKioKLSAgICAgKiBTZXJpYWxpemVycyBmb3IgdGhlIHJlc3BvbnNlLgorICAgICAqIExlbmd0aCBvZiB0aW1lIHRvIHBhdXNlIHdyaXRlcyBpbiBtaWxsaXNlY29uZHMgd2hlbiB0aGUgaGlnaCB3YXRlcm1hcmsgaXMgZXhjZWVkZWQuCiAgICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIFdSSVRFX1BBVVNFX1RJTUVfTVMgPSAxMDsKIAogICAgIC8qKgotICAgICAqIFNlcmlhbGl6ZXIgZm9yIHtAY29kZSB0ZXh0L3BsYWlufSB3aGljaCBpcyBhIHNlcmlhbGl6ZXIgZXhjbHVzaXZlIHRvIEhUVFAuCisgICAgICogVHJhY2tzIHRoZSByYXRlIG9mIHBhdXNlIHRvIHdyaXRlcyB3aGVuIHRoZSBoaWdoIHdhdGVybWFyayBpcyBleGNlZWRlZC4KICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplciB0ZXh0UGxhaW5TZXJpYWxpemVyID0gbmV3IFRleHRQbGFpbk1lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBNZXRlciB3cml0ZVBhdXNlc01ldGVyID0gTWV0cmljTWFuYWdlci5JTlNUQU5DRS5nZXRNZXRlcihuYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJjaGFubmVscyIsICJ3cml0ZS1wYXVzZXMiKSk7CisKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IElOVkFMSURfQklORElOR1NfS0VZUyA9IG5ldyBIYXNoU2V0PD4oKTsKKworICAgIHN0YXRpYyB7CisgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGRBbGwoQXJyYXlzLmFzTGlzdCgKKyAgICAgICAgICAgICAgICBULmlkLm5hbWUoKSwgVC5rZXkubmFtZSgpLAorICAgICAgICAgICAgICAgIFQubGFiZWwubmFtZSgpLCBULnZhbHVlLm5hbWUoKSwKKyAgICAgICAgICAgICAgICBULmlkLmdldEFjY2Vzc29yKCksIFQua2V5LmdldEFjY2Vzc29yKCksCisgICAgICAgICAgICAgICAgVC5sYWJlbC5nZXRBY2Nlc3NvcigpLCBULnZhbHVlLmdldEFjY2Vzc29yKCksCisgICAgICAgICAgICAgICAgVC5pZC5nZXRBY2Nlc3NvcigpLnRvVXBwZXJDYXNlKCksIFQua2V5LmdldEFjY2Vzc29yKCkudG9VcHBlckNhc2UoKSwKKyAgICAgICAgICAgICAgICBULmxhYmVsLmdldEFjY2Vzc29yKCkudG9VcHBlckNhc2UoKSwgVC52YWx1ZS5nZXRBY2Nlc3NvcigpLnRvVXBwZXJDYXNlKCkpKTsKKworICAgICAgICBmb3IgKENvbHVtbiBlbnVtSXRlbSA6IENvbHVtbi52YWx1ZXMoKSkgeworICAgICAgICAgICAgSU5WQUxJRF9CSU5ESU5HU19LRVlTLmFkZChlbnVtSXRlbS5uYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChPcmRlciBlbnVtSXRlbSA6IE9yZGVyLnZhbHVlcygpKSB7CisgICAgICAgICAgICBJTlZBTElEX0JJTkRJTkdTX0tFWVMuYWRkKGVudW1JdGVtLm5hbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKE9wZXJhdG9yIGVudW1JdGVtIDogT3BlcmF0b3IudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGQoZW51bUl0ZW0ubmFtZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoU2NvcGUgZW51bUl0ZW0gOiBTY29wZS52YWx1ZXMoKSkgeworICAgICAgICAgICAgSU5WQUxJRF9CSU5ESU5HU19LRVlTLmFkZChlbnVtSXRlbS5uYW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChQb3AgZW51bUl0ZW0gOiBQb3AudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGQoZW51bUl0ZW0ubmFtZSgpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHByaXZhdGUgZmluYWwgR3JlbWxpbkV4ZWN1dG9yIGdyZW1saW5FeGVjdXRvcjsKICAgICBwcml2YXRlIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBwcml2YXRlIGZpbmFsIFRyYW5zYWN0aW9uTWFuYWdlciB0cmFuc2FjdGlvbk1hbmFnZXI7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIiguKik7cT0oLiopIik7Ci0KLSAgICBwdWJsaWMgSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIoZmluYWwgTWFwPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBHcmVtbGluRXhlY3V0b3IgZ3JlbWxpbkV4ZWN1dG9yLAorICAgIHB1YmxpYyBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcihmaW5hbCBHcmVtbGluRXhlY3V0b3IgZ3JlbWxpbkV4ZWN1dG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICB0aGlzLnNlcmlhbGl6ZXJzID0gc2VyaWFsaXplcnM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUcmFuc2FjdGlvbk1hbmFnZXIgdHJhbnNhY3Rpb25NYW5hZ2VyKSB7CiAgICAgICAgIHRoaXMuZ3JlbWxpbkV4ZWN1dG9yID0gZ3JlbWxpbkV4ZWN1dG9yOwogICAgICAgICB0aGlzLmdyYXBoTWFuYWdlciA9IGdyYXBoTWFuYWdlcjsKICAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOworICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTWFuYWdlciA9IHRyYW5zYWN0aW9uTWFuYWdlcjsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjaGFubmVsUmVhZChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBPYmplY3QgbXNnKSB7Ci0gICAgICAgIGlmIChtc2cgaW5zdGFuY2VvZiBGdWxsSHR0cFJlcXVlc3QpIHsKLSAgICAgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCByZXEgPSAoRnVsbEh0dHBSZXF1ZXN0KSBtc2c7Ci0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGtlZXBBbGl2ZSA9IEh0dHBVdGlsLmlzS2VlcEFsaXZlKHJlcSk7CisgICAgcHVibGljIHZvaWQgY2hhbm5lbFJlYWQwKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB7CisgICAgICAgIGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5IVFRQX1JFU1BPTlNFX1NFTlQpLnNldChmYWxzZSk7CisgICAgICAgIGZpbmFsIFBhaXI8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplciA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5nZXQoKTsKIAotICAgICAgICAgICAgaWYgKCIvZmF2aWNvbi5pY28iLmVxdWFscyhyZXEudXJpKCkpKSB7Ci0gICAgICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIE5PVF9GT1VORCwgIkdyZW1saW4gU2VydmVyIGRvZXNuJ3QgaGF2ZSBhIGZhdmljb24uaWNvIiwga2VlcEFsaXZlKTsKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZmluYWwgQ29udGV4dCByZXF1ZXN0Q3R4ID0gbmV3IENvbnRleHQocmVxdWVzdE1lc3NhZ2UsIGN0eCwgc2V0dGluZ3MsIGdyYXBoTWFuYWdlciwgZ3JlbWxpbkV4ZWN1dG9yLAorICAgICAgICAgICAgICAgIGdyZW1saW5FeGVjdXRvci5nZXRTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UoKSwgTk9UX1NUQVJURUQpOwogCi0gICAgICAgICAgICBpZiAoSHR0cFV0aWwuaXMxMDBDb250aW51ZUV4cGVjdGVkKHJlcSkpIHsKLSAgICAgICAgICAgICAgICBjdHgud3JpdGUobmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBDT05USU5VRSkpOwotICAgICAgICAgICAgfQorICAgICAgICBmaW5hbCBUaW1lci5Db250ZXh0IHRpbWVyQ29udGV4dCA9IGV2YWxPcFRpbWVyLnRpbWUoKTsKKyAgICAgICAgLy8gdGltZW91dCBvdmVycmlkZSAtIGhhbmRsZSBib3RoIGRlcHJlY2F0ZWQgYW5kIG5ld2x5IG5hbWVkIGNvbmZpZ3VyYXRpb24uIGVhcmxpZXIgbG9naWMgc2hvdWxkIHByZXZlbnQKKyAgICAgICAgLy8gYm90aCBjb25maWd1cmF0aW9ucyBmcm9tIGJlaW5nIHN1Ym1pdHRlZCBhdCB0aGUgc2FtZSB0aW1lCisgICAgICAgIGZpbmFsIExvbmcgdGltZW91dE1zID0gcmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGQoVG9rZW5zLlRJTUVPVVRfTVMpOworICAgICAgICBmaW5hbCBsb25nIHNldG8gPSAobnVsbCAhPSB0aW1lb3V0TXMpID8gdGltZW91dE1zIDogcmVxdWVzdEN0eC5nZXRTZXR0aW5ncygpLmdldEV2YWx1YXRpb25UaW1lb3V0KCk7CiAKLSAgICAgICAgICAgIGlmIChyZXEubWV0aG9kKCkgIT0gR0VUICYmIHJlcS5tZXRob2QoKSAhPSBQT1NUKSB7Ci0gICAgICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIE1FVEhPRF9OT1RfQUxMT1dFRCwgTUVUSE9EX05PVF9BTExPV0VELnRvU3RyaW5nKCksIGtlZXBBbGl2ZSk7Ci0gICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IEh0dHBIYW5kbGVyVXRpbC5nZXRSZXF1ZXN0TWVzc2FnZUZyb21IdHRwUmVxdWVzdChyZXEsIHNlcmlhbGl6ZXJzKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbnxTZXJpYWxpemF0aW9uRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIEJBRF9SRVFVRVNULCBleC5nZXRNZXNzYWdlKCksIGtlZXBBbGl2ZSk7Ci0gICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFVVSUQgcmVxdWVzdElkID0gcmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWNjZXB0TWltZSA9IE9wdGlvbmFsLm9mTnVsbGFibGUocmVxLmhlYWRlcnMoKS5nZXQoSHR0cEhlYWRlck5hbWVzLkFDQ0VQVCkpLm9yRWxzZSgiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICAgICAgZmluYWwgUGFpcjxTdHJpbmcsIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplciA9IGNob29zZVNlcmlhbGl6ZXIoYWNjZXB0TWltZSk7Ci0gICAgICAgICAgICBpZiAobnVsbCA9PSBzZXJpYWxpemVyKSB7Ci0gICAgICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIEJBRF9SRVFVRVNULCByZXF1ZXN0SWQsIFN0cmluZy5mb3JtYXQoIm5vIHNlcmlhbGl6ZXIgZm9yIHJlcXVlc3RlZCBBY2NlcHQgaGVhZGVyOiAlcyIsIGFjY2VwdE1pbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAga2VlcEFsaXZlKTsKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG9yaWdpbiA9IHJlcS5oZWFkZXJzKCkuZ2V0KEh0dHBIZWFkZXJOYW1lcy5PUklHSU4pOwotCi0gICAgICAgICAgICAvLyBub3QgdXNpbmcgdGhlIHJlcSBhbnl3aGVyZSBiZWxvdyBoZXJlIC0gYXNzdW1lIGl0IGlzIHNhZmUgdG8gcmVsZWFzZSBhdCB0aGlzIHBvaW50LgotICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKKyAgICAgICAgZmluYWwgRnV0dXJlVGFzazxWb2lkPiBldmFsRnV0dXJlID0gbmV3IEZ1dHVyZVRhc2s8PigoKSAtPiB7CisgICAgICAgICAgICByZXF1ZXN0Q3R4LnNldFN0YXJ0ZWRSZXNwb25zZSgpOwogCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUHJvY2Vzc2luZyByZXF1ZXN0IGNvbnRhaW5pbmcgc2NyaXB0IFt7fV0gYW5kIGJpbmRpbmdzIG9mIFt7fV0gb24ge30iLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UuZ2V0QXJnT3JEZWZhdWx0KFRva2Vucy5BUkdTX0dSRU1MSU4sICIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEFyZ09yRGVmYXVsdChUb2tlbnMuQVJHU19CSU5ESU5HUywgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSksCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZE9yRGVmYXVsdChUb2tlbnMuQVJHU19HUkVNTElOLCAiIiksCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZE9yRGVmYXVsdChUb2tlbnMuQVJHU19CSU5ESU5HUywgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmVuYWJsZUF1ZGl0TG9nKSB7CiAgICAgICAgICAgICAgICAgICAgIEF1dGhlbnRpY2F0ZWRVc2VyIHVzZXIgPSBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuQVVUSEVOVElDQVRFRF9VU0VSKS5nZXQoKTsKQEAgLTE4NiwxMzggKzIxMCwyMjAgQEAKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSBjdHguY2hhbm5lbCgpLnJlbW90ZUFkZHJlc3MoKS50b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy5zdGFydHNXaXRoKCIvIikgJiYgYWRkcmVzcy5sZW5ndGgoKSA+IDEpIGFkZHJlc3MgPSBhZGRyZXNzLnN1YnN0cmluZygxKTsKICAgICAgICAgICAgICAgICAgICAgYXVkaXRMb2dnZXIuaW5mbygiVXNlciB7fSB3aXRoIGFkZHJlc3Mge30gcmVxdWVzdGVkOiB7fSIsIHVzZXIuZ2V0TmFtZSgpLCBhZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEFyZ09yRGVmYXVsdChUb2tlbnMuQVJHU19HUkVNTElOLCAiIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEdyZW1saW4oKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsIENoYW5uZWxQcm9taXNlIHByb21pc2UgPSBjdHguY2hhbm5lbCgpLm5ld1Byb21pc2UoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBBdG9taWNSZWZlcmVuY2U8T2JqZWN0PiByZXN1bHRIb2xkZXIgPSBuZXcgQXRvbWljUmVmZXJlbmNlPD4oKTsKLSAgICAgICAgICAgICAgICBwcm9taXNlLmFkZExpc3RlbmVyKGZ1dHVyZSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGZhaWxlZCB0aGVuIHRoZSBlcnJvciB3YXMgYWxyZWFkeSB3cml0dGVuIGJhY2sgdG8gdGhlIGNsaWVudCBhcyBwYXJ0IG9mIHRoZSBldmFsIGZ1dHVyZQotICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZ1dHVyZS5pc1N1Y2Nlc3MoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJQcmVwYXJpbmcgSFRUUCByZXNwb25zZSBmb3IgcmVxdWVzdCB3aXRoIHNjcmlwdCBbe31dIGFuZCBiaW5kaW5ncyBvZiBbe31dIHdpdGggcmVzdWx0IG9mIFt7fV0gb24gW3t9XSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEFyZ09yRGVmYXVsdChUb2tlbnMuQVJHU19HUkVNTElOLCAiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEFyZ09yRGVmYXVsdChUb2tlbnMuQVJHU19CSU5ESU5HUywgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEhvbGRlci5nZXQoKSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSByZXNwb25zZSA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXNwb25zZShIVFRQXzFfMSwgT0ssIChCeXRlQnVmKSByZXN1bHRIb2xkZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycygpLnNldChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBzZXJpYWxpemVyLmdldFZhbHVlMCgpKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGNvcnMgYnVzaW5lc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnaW4gIT0gbnVsbCkgcmVzcG9uc2UuaGVhZGVycygpLnNldChIdHRwSGVhZGVyTmFtZXMuQUNDRVNTX0NPTlRST0xfQUxMT1dfT1JJR0lOLCBvcmlnaW4pOworICAgICAgICAgICAgICAgIC8vIFRoZXNlIGd1YXJkcyBwcmV2ZW50IGFueSBvYnZpb3VzIGZhaWx1cmVzIGZyb20gcmV0dXJuaW5nIDIwMCBPSyBlYXJseSBieSBkZXRlY3RpbmcgdGhlbSBoZXJlIGFuZAorICAgICAgICAgICAgICAgIC8vIHRocm93aW5nIGJlZm9yZSBhbnkgb3RoZXIgcHJvY2Vzc2luZyBzdGFydHMgc28gdGhlIHVzZXIgZ2V0cyBhIGJldHRlciBlcnJvciBjb2RlLgorICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gcmVxdWVzdEN0eC5nZXRUcmFuc2FjdGlvbklkKCk7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW4gPSByZXF1ZXN0TWVzc2FnZS5nZXRHcmVtbGluKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzVHJhbnNhY3Rpb25CZWdpbihncmVtbGluKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgYmVnaW4gdHJhbnNhY3Rpb24gcmVxdWVzdCB0aGVuIHdlIG5lZWQgdG8gY3JlYXRlIHRoZSBUcmFuc2FjdGlvbiBJRCBmaXJzdCBzaW5jZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZHVhbC10cmFuc21pc3Npb24gZXhwZWN0YXRpb24gbWVhbnMgdGhlIHJlc3BvbnNlIGhlYWRlciBiZWxvdyBzaG91bGQgY29udGFpbiBpdC4KIAotICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRBbmRDbGVhbnVwQ29ubmVjdGlvbihjdHgsIGtlZXBBbGl2ZSwgcmVzcG9uc2UpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHByZXZlbnRzIGFjY2lkZW50YWxseSByZS1vcGVuaW5nIHRoZSB1bmRlcmx5aW5nIHRyYW5zYWN0aW9uLgorICAgICAgICAgICAgICAgICAgICBpZiAodHhJZCAhPSBudWxsKSB0aHJvdyBuZXcgUHJvY2Vzc2luZ0V4Y2VwdGlvbihHcmVtbGluRXJyb3IuYmVnaW5IYXNUcmFuc2FjdGlvbklkKCkpOworCisgICAgICAgICAgICAgICAgICAgIGRvQmVnaW4ocmVxdWVzdEN0eCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eElkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjaGVjayBtYWtlcyBzdXJlIHRoYXQgdGhlIHVuZGVybHlpbmcgR3JhcGggaXMgYWxyZWFkeSBvcGVuIHRvIHN0b3AgYSBjbG9zZWQgdHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSByZS1vcGVuaW5nIGR1ZSB0byB0aGUgZGVmYXVsdCBhdXRvc3RhcnQgbmF0dXJlIG9mIHRyYW5zYWN0aW9ucy4gVGhpcyBvY2N1cnMgaW4gY2FzZXMgd2hlcmUgYQorICAgICAgICAgICAgICAgICAgICAvLyB0cmFuc2FjdGlvbmFsIHRyYXZlcnNhbCBpcyBzdWJtaXR0ZWQgYWZ0ZXIgYSBjb21taXQvcm9sbGJhY2suCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEdyYXBoIGcgPSBncmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlKHJlcXVlc3RNZXNzYWdlLmdldEZpZWxkKFRva2Vucy5BUkdTX0cpKS5nZXRHcmFwaCgpOworICAgICAgICAgICAgICAgICAgICBpZiAoKCFnLnR4KCkuaXNPcGVuKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc2luZ0V4Y2VwdGlvbihHcmVtbGluRXJyb3IudHJhbnNhY3Rpb25Ob3RGb3VuZCh0eElkKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIFRpbWVyLkNvbnRleHQgdGltZXJDb250ZXh0ID0gZXZhbE9wVGltZXIudGltZSgpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3M7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MgPSBjcmVhdGVCaW5kaW5ncyhyZXF1ZXN0TWVzc2FnZS5nZXRBcmdPckRlZmF1bHQoVG9rZW5zLkFSR1NfQklORElOR1MsIENvbGxlY3Rpb25zLmVtcHR5TWFwKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEFyZ09yRGVmYXVsdChUb2tlbnMuQVJHU19BTElBU0VTLCBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpKSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlhZSkgewotICAgICAgICAgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgQkFEX1JFUVVFU1QsIHJlcXVlc3RJZCwgaWFlLmdldE1lc3NhZ2UoKSwga2VlcEFsaXZlKTsKLSAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UobXNnKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHR4SWQgPT0gbnVsbCkgJiYgKGlzVHJhbnNhY3Rpb25Db21taXQoZ3JlbWxpbikgfHwgaXNUcmFuc2FjdGlvblJvbGxiYWNrKGdyZW1saW4pKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBMb2dpY2FsbHksIGNvbW1pdC9yb2xsYmFjayBzaG91bGQgb25seSBiZSBhbGxvd2VkIG9uIGEgdHJhbnNhY3Rpb25hbCByZXF1ZXN0LgorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc2luZ0V4Y2VwdGlvbihHcmVtbGluRXJyb3IudHJhbnNhY3Rpb25hbENvbnRyb2xSZXF1aXJlc1RyYW5zYWN0aW9uKCkpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIHByb3ZpZGUgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gc2VyaWFsaXplIHRvIG1lc3NhZ2UgLSB0aGlzIHdpbGwgZm9yY2Ugc2VyaWFsaXphdGlvbiB0byBvY2N1cgotICAgICAgICAgICAgICAgIC8vIGluIHRoZSBzYW1lIHRocmVhZCBhcyB0aGUgZXZhbC4gYWZ0ZXIgdGhlIENvbXBsZXRhYmxlRnV0dXJlIGlzIHJldHVybmVkIGZyb20gdGhlIGV2YWwgdGhlIHJlc3VsdAotICAgICAgICAgICAgICAgIC8vIGlzIHJlYWR5IHRvIGJlIHdyaXR0ZW4gYXMgYSBCeXRlQnVmIGRpcmVjdGx5IHRvIHRoZSByZXNwb25zZS4gIG5vdGhpbmcgc2hvdWxkIGJlIGJsb2NraW5nIGhlcmUuCi0gICAgICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8T2JqZWN0PiBldmFsRnV0dXJlID0gZ3JlbWxpbkV4ZWN1dG9yLmV2YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZS5nZXRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiksIHJlcXVlc3RNZXNzYWdlLmdldEFyZyhUb2tlbnMuQVJHU19MQU5HVUFHRSksIGJpbmRpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UuZ2V0QXJnT3JEZWZhdWx0KFRva2Vucy5BUkdTX0VWQUxfVElNRU9VVCwgbnVsbCksCi0gICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblV0aWxzLndyYXBGdW5jdGlvbihvIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9wcGluZyB0aGUgdGltZXIgaGVyZSBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gd2hlcmUgdGhlIHRpbWVyIHdvdWxkIGhhdmUgYmVlbiBzdG9wcGVkIGZvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWV0cmljIGluIG90aGVyIGNvbnRleHRzLiAgd2UganVzdCB3YW50IHRvIG1lYXN1cmUgZXZhbCB0aW1lIG5vdCBzZXJpYWxpemF0aW9uIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJDb250ZXh0LnN0b3AoKTsKKyAgICAgICAgICAgICAgICAvLyBTZW5kIGJhY2sgdGhlIDIwMCBPSyByZXNwb25zZSBoZWFkZXIgaGVyZSBzaW5jZSB0aGUgcmVzcG9uc2UgaXMgYWx3YXlzIGNodW5rIHRyYW5zZmVyIGVuY29kZWQuIEFueQorICAgICAgICAgICAgICAgIC8vIGZhaWx1cmVzIHRoYXQgZm9sbG93IHRoaXMgd2lsbCBzaG93IHVwIGluIHRoZSByZXNwb25zZSBib2R5IGluc3RlYWQuCisgICAgICAgICAgICAgICAgc2VuZEh0dHBSZXNwb25zZShjdHgsIE9LLCBjcmVhdGVSZXNwb25zZUhlYWRlcnMoY3R4LCBzZXJpYWxpemVyLCByZXF1ZXN0Q3R4KS50b0FycmF5KENoYXJTZXF1ZW5jZVtdOjpuZXcpKTsKKyAgICAgICAgICAgICAgICBzZW5kSHR0cENvbnRlbnRzKGN0eCwgcmVxdWVzdEN0eCk7CisgICAgICAgICAgICAgICAgc2VuZExhc3RIdHRwQ29udGVudChjdHgsIEh0dHBSZXNwb25zZVN0YXR1cy5PSywgIiIpOworICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICB3cml0ZUVycm9yKHJlcXVlc3RDdHgsIGZvcm1FcnJvclJlc3BvbnNlTWVzc2FnZSh0LCByZXF1ZXN0TWVzc2FnZSksIHNlcmlhbGl6ZXIuZ2V0VmFsdWUxKCkpOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICB0aW1lckNvbnRleHQuc3RvcCgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJUcmFuc2Zvcm1pbmcgcmVzdWx0IG9mIHJlcXVlc3Qgd2l0aCBzY3JpcHQgW3t9XSBhbmQgYmluZGluZ3Mgb2YgW3t9XSB3aXRoIHJlc3VsdCBvZiBbe31dIG9uIFt7fV0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UuZ2V0QXJnKFRva2Vucy5BUkdTX0dSRU1MSU4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UuZ2V0QXJnKFRva2Vucy5BUkdTX0JJTkRJTkdTKSwgbywgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8U3RyaW5nPiBtcCA9IHJlcXVlc3RNZXNzYWdlLmdldEFyZyhUb2tlbnMuQVJHU19HUkVNTElOKSBpbnN0YW5jZW9mIFN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBHcmVtbGluU2NyaXB0Q2hlY2tlci5wYXJzZShyZXF1ZXN0TWVzc2FnZS5nZXRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTikpLmdldE1hdGVyaWFsaXplUHJvcGVydGllcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE9wdGlvbmFsLmVtcHR5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHJlcGxpY2F0ZSB3aGF0IFRyYXZlcnNhbE9wUHJvY2Vzc29yIGRvZXMgd2l0aCB0aGUgYnl0ZWNvZGUgb3AuIGl0IGNvbnZlcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0cyB0byBUcmF2ZXJzZXIgc28gdGhhdCBHTFZzIGNhbiBoYW5kbGUgdGhlIHJlc3VsdHMuIGRvbid0IHF1aXRlIGdldCB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlbmVmaXQgaGVyZSBiZWNhdXNlIHRoZSBidWxrIGhhcyB0byBiZSAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgcmVzb2x2ZWQgdGhlIHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgYXQgbGVhc3QgaHR0cCBpcyBjb21wYXRpYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IHJlc3VsdHMgPSByZXF1ZXN0TWVzc2FnZS5nZXRPcCgpLmVxdWFscyhUb2tlbnMuT1BTX0JZVEVDT0RFKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTGlzdDxPYmplY3Q+KSBJdGVyYXRvclV0aWxzLmFzTGlzdChvKS5zdHJlYW0oKS5tYXAociAtPiBuZXcgRGVmYXVsdFJlbW90ZVRyYXZlcnNlcjxPYmplY3Q+KHIsIDEpKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMuYXNMaXN0KG8pOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1wLmlzUHJlc2VudCgpICYmIG1wLmdldCgpLmVxdWFscyhUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9iamVjdCBmaXJzdEVsZW1lbnQgPSByZXN1bHRzLmdldCgwKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMuc2V0KGksIFJlZmVyZW5jZUZhY3RvcnkuZGV0YWNoKChFbGVtZW50KSByZXN1bHRzLmdldChpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0RWxlbWVudCBpbnN0YW5jZW9mIEFic3RyYWN0VHJhdmVyc2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBpdGVtIDogcmVzdWx0cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFic3RyYWN0VHJhdmVyc2VyKSBpdGVtKS5kZXRhY2goKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQocmVxdWVzdElkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0KHJlc3VsdHMpLmNyZWF0ZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cCBzZXJ2ZXIgaXMgc2Vzc2lvbmxlc3MgYW5kIG11c3QgaGFuZGxlIGNvbW1pdCBvbiB0cmFuc2FjdGlvbnMuIHRoZSBjb21taXQgb2NjdXJzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHNlcmlhbGl6YXRpb24gdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyB0aGluZ3Mgd29yayBmb3Igd2Vic29ja2V0IGJhc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbXVuaWNhdGlvbi4gIHRoaXMgbWVhbnMgdGhhdCBmYWlsZWQgc2VyaWFsaXphdGlvbiBkb2VzIG5vdCBtZWFuIHRoYXQgeW91IHdvbid0IGdldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgY29tbWl0IHRvIHRoZSBkYXRhYmFzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRDb21taXQocmVxdWVzdE1lc3NhZ2UuZ2V0QXJnKFRva2Vucy5BUkdTX0FMSUFTRVMpLCBncmFwaE1hbmFnZXIsIHNldHRpbmdzLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVW5wb29sZWQud3JhcHBlZEJ1ZmZlcihzZXJpYWxpemVyLmdldFZhbHVlMSgpLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2VNZXNzYWdlLCBjdHguYWxsb2MoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJFcnJvciBkdXJpbmcgc2VyaWFsaXphdGlvbiBmb3IgJXMiLCByZXNwb25zZU1lc3NhZ2UpLCBleCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRpbmcgYSBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB3aWxsIGNsZWFyIHRoZSBjYXVzZSB3aGljaCB3aWxsIGFsbG93IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmdXR1cmUgdG8gcmVwb3J0IGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UuIGlmIHRoZSBjYXVzZSBpcyBwcmVzZW50LCB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdyZW1saW5FeGVjdXRvciB3aWxsIHByZWZlciB0aGUgY2F1c2UgYW5kIHdlJ2xsIGdldCBhIGxvdyBsZXZlbCBKYWNrc29uIHNvcnQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IgaW4gdGhlIHJlc3BvbnNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHNlcmlhbGl6ZSB0aGUgcmVzdWx0IHdpdGggJXMgLSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuZ2V0VmFsdWUwKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4LmdldE1lc3NhZ2UoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwotCi0gICAgICAgICAgICAgICAgZXZhbEZ1dHVyZS5leGNlcHRpb25hbGx5KHQgLT4gewotICAgICAgICAgICAgICAgICAgICBpZiAodC5nZXRNZXNzYWdlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIEh0dHBIYW5kbGVyVXRpbC5zZW5kRXJyb3IoY3R4LCBJTlRFUk5BTF9TRVJWRVJfRVJST1IsIHJlcXVlc3RJZCwgdC5nZXRNZXNzYWdlKCksIE9wdGlvbmFsLm9mKHQpLCBrZWVwQWxpdmUpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgSU5URVJOQUxfU0VSVkVSX0VSUk9SLCByZXF1ZXN0SWQsIFN0cmluZy5mb3JtYXQoIkVycm9yIGVuY291bnRlcmVkIGV2YWx1YXRpbmcgc2NyaXB0OiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UuZ2V0QXJnKFRva2Vucy5BUkdTX0dSRU1MSU4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIE9wdGlvbmFsLm9mKHQpLCBrZWVwQWxpdmUpOwotICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnNldEZhaWx1cmUodCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICAgZXZhbEZ1dHVyZS50aGVuQWNjZXB0QXN5bmMociAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vdyB0aGF0IHRoZSBldmFsL3NlcmlhbGl6YXRpb24gaXMgZG9uZSBpbiB0aGUgc2FtZSB0aHJlYWQgLSBjb21wbGV0ZSB0aGUgcHJvbWlzZSBzbyB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICAgLy8gd3JpdGUgYmFjayB0aGUgSFRUUCByZXNwb25zZSBvbiB0aGUgc2FtZSB0aHJlYWQgYXMgdGhlIG9yaWdpbmFsIHJlcXVlc3QKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0SG9sZGVyLnNldChyKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5zZXRTdWNjZXNzKCk7Ci0gICAgICAgICAgICAgICAgfSwgZ3JlbWxpbkV4ZWN1dG9yLmdldEV4ZWN1dG9yU2VydmljZSgpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIC8vIHNlbmQgdGhlIGVycm9yIHJlc3BvbnNlIGhlcmUgYW5kIGRvbid0IHJlbHkgb24gZXhjZXB0aW9uIGNhdWdodCBiZWNhdXNlIGl0IG1pZ2h0IG5vdCBoYXZlIHRoZQotICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgb24gd2hldGhlciB0byBjbG9zZSB0aGUgY29ubmVjdGlvbiBvciBub3QsIGJhc2VkIG9uIGtlZXBhbGl2ZS4KLSAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgVG9vTG9uZ0ZyYW1lRXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIEh0dHBIYW5kbGVyVXRpbC5zZW5kRXJyb3IoY3R4LCBIdHRwUmVzcG9uc2VTdGF0dXMuUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFLCByZXF1ZXN0SWQsIHQuZ2V0TWVzc2FnZSgpICsgIiAtIGluY3JlYXNlIHRoZSBtYXhDb250ZW50TGVuZ3RoIiwga2VlcEFsaXZlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgIT0gbnVsbCl7Ci0gICAgICAgICAgICAgICAgICAgIEh0dHBIYW5kbGVyVXRpbC5zZW5kRXJyb3IoY3R4LCBJTlRFUk5BTF9TRVJWRVJfRVJST1IsIHJlcXVlc3RJZCwgdC5nZXRNZXNzYWdlKCksIGtlZXBBbGl2ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIElOVEVSTkFMX1NFUlZFUl9FUlJPUiwgcmVxdWVzdElkLCBleC5nZXRNZXNzYWdlKCksIGtlZXBBbGl2ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCB0aGlzIHF1ZXJ5IG1heSBoYXZlIGZpbmlzaGVkIGJlZm9yZSB0aGUgdGltZW91dEZ1dHVyZSB3YXMgY3JlYXRlZCwKKyAgICAgICAgICAgICAgICAvLyB0aG91Z2ggdGhpcyBpcyB2ZXJ5IHVubGlrZWx5LiBUaGlzIGlzIGhhbmRsZWQgaW4gdGhlIHNldHRvciwgaWYgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGdyYWJiZWQuCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgcGFzc2VkIHRoaXMgcG9pbnQgYW5kIHRoZSBzZXR0ZXIgaGFzbid0IGJlZW4gY2FsbGVkLCBpdCB3aWxsIGNhbmNlbCB0aGUgdGltZW91dEZ1dHVyZSBpbnNpZGUKKyAgICAgICAgICAgICAgICAvLyB0aGUgc2V0dGVyIHRvIGNvbXBlbnNhdGUuCisgICAgICAgICAgICAgICAgZmluYWwgU2NoZWR1bGVkRnV0dXJlPD8+IHRpbWVvdXRGdXR1cmUgPSByZXF1ZXN0Q3R4LmdldFRpbWVvdXRFeGVjdXRvcigpOworICAgICAgICAgICAgICAgIGlmIChudWxsICE9IHRpbWVvdXRGdXR1cmUpCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXRGdXR1cmUuY2FuY2VsKHRydWUpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNCZWdpblRyYW5zYWN0aW9uUmVxdWVzdCA9IGlzVHJhbnNhY3Rpb25CZWdpbihyZXF1ZXN0TWVzc2FnZS5nZXRHcmVtbGluKCkpOworICAgICAgICAgICAgZmluYWwgRnV0dXJlPD8+IGV4ZWN1dGlvbkZ1dHVyZSA9ICgocmVxdWVzdEN0eC5nZXRUcmFuc2FjdGlvbklkKCkgIT0gbnVsbCkgJiYgIWlzQmVnaW5UcmFuc2FjdGlvblJlcXVlc3QpID8KKyAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25NYW5hZ2VyLmdldChyZXF1ZXN0Q3R4LmdldFRyYW5zYWN0aW9uSWQoKSkuZ2V0KCkuc3VibWl0KGV2YWxGdXR1cmUpIDoKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEN0eC5nZXRHcmVtbGluRXhlY3V0b3IoKS5nZXRFeGVjdXRvclNlcnZpY2UoKS5zdWJtaXQoZXZhbEZ1dHVyZSk7CisgICAgICAgICAgICBpZiAoc2V0byA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSBhIHRpbWVvdXQgaW4gdGhlIHRocmVhZCBwb29sIGZvciBmdXR1cmUgZXhlY3V0aW9uCisgICAgICAgICAgICAgICAgcmVxdWVzdEN0eC5zZXRUaW1lb3V0RXhlY3V0b3IocmVxdWVzdEN0eC5nZXRTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UoKS5zY2hlZHVsZSgoKSAtPiB7CisgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkZ1dHVyZS5jYW5jZWwodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghcmVxdWVzdEN0eC5nZXRTdGFydGVkUmVzcG9uc2UoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVFcnJvcihyZXF1ZXN0Q3R4LCBHcmVtbGluRXJyb3IudGltZW91dChyZXF1ZXN0TWVzc2FnZSksIHNlcmlhbGl6ZXIuZ2V0VmFsdWUxKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgc2V0bywgVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uIHJlZSkgeworICAgICAgICAgICAgd3JpdGVFcnJvcihyZXF1ZXN0Q3R4LCBHcmVtbGluRXJyb3IucmF0ZUxpbWl0aW5nKCksIHNlcmlhbGl6ZXIuZ2V0VmFsdWUxKCkpOworICAgICAgICB9IGNhdGNoIChOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIG5zZWUpIHsKKyAgICAgICAgICAgIHdyaXRlRXJyb3IocmVxdWVzdEN0eCwgR3JlbWxpbkVycm9yLnRyYW5zYWN0aW9uTm90Rm91bmQocmVxdWVzdEN0eC5nZXRUcmFuc2FjdGlvbklkKCkpLCBzZXJpYWxpemVyLmdldFZhbHVlMSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgTGlzdDxDaGFyU2VxdWVuY2U+IGNyZWF0ZVJlc3BvbnNlSGVhZGVycyhmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBQYWlyPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbnRleHQgcmVxdWVzdEN0eCkgeworICAgICAgICBmaW5hbCBMaXN0PENoYXJTZXF1ZW5jZT4gaGVhZGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFKTsKKyAgICAgICAgaGVhZGVycy5hZGQoc2VyaWFsaXplci5nZXRWYWx1ZTAoKSk7CisgICAgICAgIGlmIChhY2NlcHRzRGVmbGF0ZUVuY29kaW5nKGN0eC5hdHRyKFN0YXRlS2V5LlJFUVVFU1RfSEVBREVSUykuZ2V0KCkuZ2V0QWxsKEFDQ0VQVF9FTkNPRElORykpKSB7CisgICAgICAgICAgICBoZWFkZXJzLmFkZChDT05URU5UX0VOQ09ESU5HKTsKKyAgICAgICAgICAgIGhlYWRlcnMuYWRkKERFRkxBVEUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXF1ZXN0Q3R4LmdldFRyYW5zYWN0aW9uSWQoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBoZWFkZXJzLmFkZChUb2tlbnMuSGVhZGVycy5UUkFOU0FDVElPTl9JRCk7CisgICAgICAgICAgICBoZWFkZXJzLmFkZChyZXF1ZXN0Q3R4LmdldFRyYW5zYWN0aW9uSWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhlYWRlcnM7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRIdHRwQ29udGVudHMoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgQ29udGV4dCByZXF1ZXN0Q29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFBhaXI8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplciA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5nZXQoKTsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IHJlcXVlc3RDb250ZXh0LmdldFJlcXVlc3RNZXNzYWdlKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gcmVxdWVzdENvbnRleHQuZ2V0VHJhbnNhY3Rpb25JZCgpOworICAgICAgICBmaW5hbCBPcHRpb25hbDxVbm1hbmFnZWRUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbk1hbmFnZXIuZ2V0KHR4SWQpOworCisgICAgICAgIC8vIEVhcmx5IGd1YXJkIGFnYWluc3QgZmFrZSBvciBpbmNvcnJlY3QgdHJhbnNhY3Rpb24gSURzLgorICAgICAgICBpZiAoKHR4SWQgIT0gbnVsbCkgJiYgdHJhbnNhY3Rpb24uaXNFbXB0eSgpKSB0aHJvdyBuZXcgUHJvY2Vzc2luZ0V4Y2VwdGlvbihHcmVtbGluRXJyb3IudHJhbnNhY3Rpb25Ob3RGb3VuZCh0eElkKSk7CisKKyAgICAgICAgaWYgKGlzVHJhbnNhY3Rpb25CZWdpbihyZXF1ZXN0LmdldEdyZW1saW4oKSkpIHsKKyAgICAgICAgICAgIHJ1bkJlZ2luKHJlcXVlc3RDb250ZXh0LCB0cmFuc2FjdGlvbi5nZXQoKSwgc2VyaWFsaXplcik7CisgICAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2FjdGlvbkNvbW1pdChyZXF1ZXN0LmdldEdyZW1saW4oKSkpIHsKKyAgICAgICAgICAgIGhhbmRsZUdyYXBoT3AocmVxdWVzdENvbnRleHQsIHR4SWQsIFRyYW5zYWN0aW9uOjpjb21taXQsIHNlcmlhbGl6ZXIpOworICAgICAgICB9IGVsc2UgaWYgKGlzVHJhbnNhY3Rpb25Sb2xsYmFjayhyZXF1ZXN0Q29udGV4dC5nZXRSZXF1ZXN0TWVzc2FnZSgpLmdldEdyZW1saW4oKSkpIHsKKyAgICAgICAgICAgIGhhbmRsZUdyYXBoT3AocmVxdWVzdENvbnRleHQsIHR4SWQsIFRyYW5zYWN0aW9uOjpyb2xsYmFjaywgc2VyaWFsaXplcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCb3RoIHRyYW5zYWN0aW9uYWwgYW5kIG5vbi10cmFuc2FjdGlvbmFsIHRyYXZlcnNhbHMgZm9sbG93IHRoaXMgcGF0aCBmb3IgcmVzcG9uc2UgY2h1bmtpbmcuCisgICAgICAgICAgICBpdGVyYXRlU2NyaXB0RXZhbFJlc3VsdChyZXF1ZXN0Q29udGV4dCwgc2VyaWFsaXplci5nZXRWYWx1ZTEoKSwgcmVxdWVzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEdyZW1saW5FcnJvciBmb3JtRXJyb3JSZXNwb25zZU1lc3NhZ2UoVGhyb3dhYmxlIHQsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB7CisgICAgICAgIGlmICh0IGluc3RhbmNlb2YgVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbikgdCA9IHQuZ2V0Q2F1c2UoKTsKKworICAgICAgICAvLyBpZiBhbnkgZXhjZXB0aW9uIGluIHRoZSBjaGFpbiBpcyBUZW1wb3JhcnlFeGNlcHRpb24gb3IgRmFpbHVyZSB0aGVuIHdlIHNob3VsZCByZXNwb25kIHdpdGggdGhlCisgICAgICAgIC8vIHJpZ2h0IGVycm9yIGNvZGUgc28gdGhhdCB0aGUgY2xpZW50IGtub3dzIHRvIHJldHJ5CisgICAgICAgIGZpbmFsIE9wdGlvbmFsPFRocm93YWJsZT4gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uID0gZGV0ZXJtaW5lSWZTcGVjaWFsRXhjZXB0aW9uKHQpOworICAgICAgICBpZiAocG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmlzUHJlc2VudCgpKSB7CisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgc3BlY2lhbCA9IHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbi5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzcGVjaWFsIGluc3RhbmNlb2YgVGVtcG9yYXJ5RXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdyZW1saW5FcnJvci50ZW1wb3Jhcnkoc3BlY2lhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIEZhaWx1cmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR3JlbWxpbkVycm9yLmZhaWxTdGVwKChGYWlsdXJlKSBzcGVjaWFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBHcmVtbGluRXJyb3IuZ2VuZXJhbChzcGVjaWFsKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodCBpbnN0YW5jZW9mIFByb2Nlc3NpbmdFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiAoKFByb2Nlc3NpbmdFeGNlcHRpb24pIHQpLmdldEVycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UodCk7CisKKyAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBUb29Mb25nRnJhbWVFeGNlcHRpb24pIHsKKyAgICAgICAgICAgIHJldHVybiBHcmVtbGluRXJyb3IubG9uZ0ZyYW1lKHQpOworICAgICAgICB9CisgICAgICAgIGlmICh0IGluc3RhbmNlb2YgSW50ZXJydXB0ZWRFeGNlcHRpb24gfHwgdCBpbnN0YW5jZW9mIFRyYXZlcnNhbEludGVycnVwdGVkRXhjZXB0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gR3JlbWxpbkVycm9yLnRpbWVvdXQocmVxdWVzdE1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIGlmICh0IGluc3RhbmNlb2YgVGltZWRJbnRlcnJ1cHRUaW1lb3V0RXhjZXB0aW9uKSB7CisgICAgICAgICAgICAvLyBvY2N1cnMgd2hlbiB0aGUgVGltZWRJbnRlcnJ1cHRDdXN0b21pemVyUHJvdmlkZXIgaXMgaW4gcGxheQorICAgICAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiQSB0aW1lb3V0IG9jY3VycmVkIHdpdGhpbiB0aGUgc2NyaXB0IGR1cmluZyBldmFsdWF0aW9uIG9mIFslc10gLSBjb25zaWRlciBpbmNyZWFzaW5nIHRoZSBsaW1pdCBnaXZlbiB0byBUaW1lZEludGVycnVwdEN1c3RvbWl6ZXJQcm92aWRlciIsIHJlcXVlc3RNZXNzYWdlKSk7CisgICAgICAgICAgICByZXR1cm4gR3JlbWxpbkVycm9yLnRpbWVkSW50ZXJydXB0VGltZW91dCgpOworICAgICAgICB9CisgICAgICAgIGlmICh0IGluc3RhbmNlb2YgVGltZW91dEV4Y2VwdGlvbikgeworICAgICAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiU2NyaXB0IGV2YWx1YXRpb24gZXhjZWVkZWQgdGhlIGNvbmZpZ3VyZWQgdGhyZXNob2xkIGZvciByZXF1ZXN0IFslc10iLCByZXF1ZXN0TWVzc2FnZSkpOworICAgICAgICAgICAgcmV0dXJuIEdyZW1saW5FcnJvci50aW1lb3V0KHJlcXVlc3RNZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodCBpbnN0YW5jZW9mIE11bHRpcGxlQ29tcGlsYXRpb25FcnJvcnNFeGNlcHRpb24gJiYgdC5nZXRNZXNzYWdlKCkuY29udGFpbnMoIk1ldGhvZCB0b28gbGFyZ2UiKSAmJgorICAgICAgICAgICAgICAgICgoTXVsdGlwbGVDb21waWxhdGlvbkVycm9yc0V4Y2VwdGlvbikgdCkuZ2V0RXJyb3JDb2xsZWN0b3IoKS5nZXRFcnJvckNvdW50KCkgPT0gMSkgeworICAgICAgICAgICAgZmluYWwgR3JlbWxpbkVycm9yIGVycm9yID0gR3JlbWxpbkVycm9yLmxvbmdSZXF1ZXN0KHJlcXVlc3RNZXNzYWdlKTsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKGVycm9yLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBHcmVtbGluUGFyc2VyRXhjZXB0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gR3JlbWxpbkVycm9yLnBhcnNpbmcoKEdyZW1saW5QYXJzZXJFeGNlcHRpb24pIHQpOworICAgICAgICB9CisKKyAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiRXhjZXB0aW9uIHByb2Nlc3NpbmcgcmVxdWVzdCBbJXNdLiIsIHJlcXVlc3RNZXNzYWdlKSk7CisgICAgICAgIHJldHVybiBHcmVtbGluRXJyb3IuZ2VuZXJhbCh0KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaXRlcmF0ZVNjcmlwdEV2YWxSZXN1bHQoZmluYWwgQ29udGV4dCBjb250ZXh0LCBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZXJpYWxpemVyLCBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtZXNzYWdlKQorICAgICAgICAgICAgdGhyb3dzIFByb2Nlc3NpbmdFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBTY3JpcHRFeGNlcHRpb24geworICAgICAgICBpZiAobWVzc2FnZS5vcHRpb25hbEZpZWxkKFRva2Vucy5BUkdTX0JJTkRJTkdTKS5pc1ByZXNlbnQoKSkgeworICAgICAgICAgICAgZmluYWwgTWFwIGJpbmRpbmdzID0gKE1hcCkgbWVzc2FnZS5nZXRGaWVsZHMoKS5nZXQoVG9rZW5zLkFSR1NfQklORElOR1MpOworICAgICAgICAgICAgaWYgKEl0ZXJhdG9yVXRpbHMuYW55TWF0Y2goYmluZGluZ3Mua2V5U2V0KCkuaXRlcmF0b3IoKSwgayAtPiBudWxsID09IGsgfHwgIShrIGluc3RhbmNlb2YgU3RyaW5nKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc2luZ0V4Y2VwdGlvbihHcmVtbGluRXJyb3IuYmluZGluZygpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gYmFkQmluZGluZ3MgPSBJdGVyYXRvclV0aWxzLnNldChJdGVyYXRvclV0aWxzLjxTdHJpbmc+ZmlsdGVyKGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCksIElOVkFMSURfQklORElOR1NfS0VZUzo6Y29udGFpbnMpKTsKKyAgICAgICAgICAgIGlmICghYmFkQmluZGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NpbmdFeGNlcHRpb24oR3JlbWxpbkVycm9yLmJpbmRpbmcoYmFkQmluZGluZ3MpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gaWdub3JlIGNvbnRyb2wgYmluZGluZ3MgdGhhdCBnZXQgcGFzc2VkIGluIHdpdGggdGhlICIjanNyMjIzIiBwcmVmaXggLSB0aG9zZSBhcmVuJ3QgdXNlZCBpbiBjb21waWxhdGlvbgorICAgICAgICAgICAgaWYgKEl0ZXJhdG9yVXRpbHMuY291bnQoSXRlcmF0b3JVdGlscy5maWx0ZXIoYmluZGluZ3Mua2V5U2V0KCkuaXRlcmF0b3IoKSwgayAtPiAhay50b1N0cmluZygpLnN0YXJ0c1dpdGgoIiNqc3IyMjMiKSkpID4gc2V0dGluZ3MubWF4UGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBQcm9jZXNzaW5nRXhjZXB0aW9uKEdyZW1saW5FcnJvci5iaW5kaW5nKGJpbmRpbmdzLnNpemUoKSwgc2V0dGluZ3MubWF4UGFyYW1ldGVycykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhcmdzID0gbWVzc2FnZS5nZXRGaWVsZHMoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGxhbmd1YWdlID0gYXJncy5jb250YWluc0tleShUb2tlbnMuQVJHU19MQU5HVUFHRSkgPyAoU3RyaW5nKSBhcmdzLmdldChUb2tlbnMuQVJHU19MQU5HVUFHRSkgOiAiZ3JlbWxpbi1sYW5nIjsKKyAgICAgICAgZmluYWwgR3JlbWxpblNjcmlwdEVuZ2luZSBzY3JpcHRFbmdpbmUgPSBncmVtbGluRXhlY3V0b3IuZ2V0U2NyaXB0RW5naW5lTWFuYWdlcigpLmdldEVuZ2luZUJ5TmFtZShsYW5ndWFnZSk7CisKKyAgICAgICAgZmluYWwgQmluZGluZ3MgbWVyZ2VkQmluZGluZ3MgPSBtZXJnZUJpbmRpbmdzRnJvbVJlcXVlc3QoY29udGV4dCwgbmV3IFNpbXBsZUJpbmRpbmdzKGdyYXBoTWFuYWdlci5nZXRBc0JpbmRpbmdzKCkpKTsKKyAgICAgICAgZmluYWwgT2JqZWN0IHJlc3VsdCA9IHNjcmlwdEVuZ2luZS5ldmFsKG1lc3NhZ2UuZ2V0R3JlbWxpbigpLCBtZXJnZWRCaW5kaW5ncyk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGJ1bGtpbmdTZXR0aW5nID0gY29udGV4dC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5SRVFVRVNUX0hFQURFUlMpLmdldCgpLmdldChUb2tlbnMuQlVMS19SRVNVTFRTKTsKKyAgICAgICAgLy8gYnVsa2luZyBvbmx5IGFwcGxpZXMgaWYgaXQncyBncmVtbGluLWxhbmcsIGFuZCBwZXIgcmVxdWVzdCB0b2tlbiBzZXR0aW5nIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBoZWFkZXIgc2V0dGluZy4KKyAgICAgICAgLy8gVGhlIHNlcmlhbGl6ZXIgY2hlY2sgaXMgdGVtcG9yYXJpbHkgbmVlZGVkIGJlY2F1c2UgR3JhcGhTT04gaGFzbid0IGJlZW4gcmVtb3ZlZCB5ZXQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBidWxraW5nLgorICAgICAgICBmaW5hbCBib29sZWFuIGJ1bGtpbmcgPSBsYW5ndWFnZS5lcXVhbHMoImdyZW1saW4tbGFuZyIpICYmIHNlcmlhbGl6ZXIgaW5zdGFuY2VvZiBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgPworICAgICAgICAgICAgICAgIChhcmdzLmNvbnRhaW5zS2V5KFRva2Vucy5CVUxLX1JFU1VMVFMpID8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdHMuZXF1YWxzKGFyZ3MuZ2V0KFRva2Vucy5CVUxLX1JFU1VMVFMpLCAidHJ1ZSIpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdHMuZXF1YWxzKGJ1bGtpbmdTZXR0aW5nLCAidHJ1ZSIpKSA6CisgICAgICAgICAgICAgICAgZmFsc2U7CisKKyAgICAgICAgSXRlcmF0b3IgaXR0eSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoYnVsa2luZykgeworICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBmb3IgZHJpdmVyIHJlcXVlc3RzCisgICAgICAgICAgICAgICAgKChUcmF2ZXJzYWwuQWRtaW48PywgPz4pIHJlc3VsdCkuYXBwbHlTdHJhdGVnaWVzKCk7CisgICAgICAgICAgICAgICAgaXR0eSA9IG5ldyBUcmF2ZXJzZXJJdGVyYXRvcigoVHJhdmVyc2FsLkFkbWluPD8sID8+KSByZXN1bHQpOworICAgICAgICAgICAgICAgIGhhbmRsZUl0ZXJhdG9yKGNvbnRleHQsIGl0dHksIHNlcmlhbGl6ZXIsIHRydWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpdHR5ID0gSXRlcmF0b3JVdGlscy5hc0l0ZXJhdG9yKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgaGFuZGxlSXRlcmF0b3IoY29udGV4dCwgaXR0eSwgc2VyaWFsaXplciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIC8vIFRJTktFUlBPUC0zMTQ0IGVuc3VyZSBUcmF2ZXJzYWxzIGFyZSBjbG9zZWQgd2hlbiBleGNlcHRpb24gdGhyb3duLgorICAgICAgICAgICAgaWYgKGl0dHkgaW5zdGFuY2VvZiBUcmF2ZXJzZXJJdGVyYXRvcikgeworICAgICAgICAgICAgICAgIENsb3NlYWJsZUl0ZXJhdG9yLmNsb3NlSXRlcmF0b3IoKChUcmF2ZXJzZXJJdGVyYXRvcikgaXR0eSkuZ2V0VHJhdmVyc2FsKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpdHR5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBDbG9zZWFibGVJdGVyYXRvci5jbG9zZUl0ZXJhdG9yKGl0dHkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aHJvdyBleDsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzI2LDcxICs0MzIsMzMzIEBACiAgICAgICAgIGxvZ2dlci5lcnJvcigiRXJyb3IgcHJvY2Vzc2luZyBIVFRQIFJlcXVlc3QiLCBjYXVzZSk7CiAKICAgICAgICAgaWYgKGN0eC5jaGFubmVsKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIElOVEVSTkFMX1NFUlZFUl9FUlJPUiwgY2F1c2UuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBjYXVzZS5nZXRNZXNzYWdlKCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBCaW5kaW5ncyBjcmVhdGVCaW5kaW5ncyhmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGJpbmRpbmdNYXAsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcmViaW5kaW5nTWFwKSB7Ci0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7CisgICAgLyoqCisgICAgICogRGV0ZWN0cyBpZiB0aGUgZ3JlbWxpbiBzY3JpcHQgaXMgYSB0cmFuc2FjdGlvbiBiZWdpbiBjb21tYW5kLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc1RyYW5zYWN0aW9uQmVnaW4oZmluYWwgU3RyaW5nIGdyZW1saW4pIHsKKyAgICAgICAgaWYgKGdyZW1saW4gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZ3JlbWxpbi50cmltKCkuZXF1YWxzSWdub3JlQ2FzZSgiZy50eCgpLmJlZ2luKCkiKTsKKyAgICB9CiAKLSAgICAgICAgLy8gcmViaW5kIGFueSBnbG9iYWwgYmluZGluZ3MgdG8gYSBkaWZmZXJlbnQgdmFyaWFibGUuCi0gICAgICAgIGlmICghcmViaW5kaW5nTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGt2IDogcmViaW5kaW5nTWFwLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmluYWwgR3JhcGggZyA9IHRoaXMuZ3JhcGhNYW5hZ2VyLmdldEdyYXBoKGt2LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGlmIChudWxsICE9IGcpIHsKLSAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHV0KGt2LmdldEtleSgpLCBnKTsKKyAgICAvKioKKyAgICAgKiBEZXRlY3RzIGlmIHRoZSBncmVtbGluIHNjcmlwdCBpcyBhIHRyYW5zYWN0aW9uIGNvbW1pdCBjb21tYW5kLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc1RyYW5zYWN0aW9uQ29tbWl0KGZpbmFsIFN0cmluZyBncmVtbGluKSB7CisgICAgICAgIGlmIChncmVtbGluID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGdyZW1saW4udHJpbSgpLmVxdWFsc0lnbm9yZUNhc2UoImcudHgoKS5jb21taXQoKSIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERldGVjdHMgaWYgdGhlIGdyZW1saW4gc2NyaXB0IGlzIGEgdHJhbnNhY3Rpb24gcm9sbGJhY2sgY29tbWFuZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNUcmFuc2FjdGlvblJvbGxiYWNrKGZpbmFsIFN0cmluZyBncmVtbGluKSB7CisgICAgICAgIGlmIChncmVtbGluID09IG51bGwpIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGdyZW1saW4udHJpbSgpLmVxdWFsc0lnbm9yZUNhc2UoImcudHgoKS5yb2xsYmFjaygpIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlIGJlZ2luIGJ5IGNyZWF0aW5nIGFuIHtAbGluayBVbm1hbmFnZWRUcmFuc2FjdGlvbn0gYW5kIHN1Ym1pdHRpbmcgdGhlIG9wZW4gdG8gaXRzIGV4ZWN1dG9yLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBkb0JlZ2luKGZpbmFsIENvbnRleHQgY3R4KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZU5hbWUgPSBjdHguZ2V0UmVxdWVzdE1lc3NhZ2UoKS5nZXRGaWVsZChUb2tlbnMuQVJHU19HKTsKKworICAgICAgICBmaW5hbCBVbm1hbmFnZWRUcmFuc2FjdGlvbiB0eEN0eDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4Q3R4ID0gdHJhbnNhY3Rpb25NYW5hZ2VyLmNyZWF0ZSh0cmF2ZXJzYWxTb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIGN0eC5zZXRUcmFuc2FjdGlvbklkKHR4Q3R4LmdldFRyYW5zYWN0aW9uSWQoKSk7CisgICAgICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IGdyYXBoTWFuYWdlci5nZXRUcmF2ZXJzYWxTb3VyY2UodHJhdmVyc2FsU291cmNlTmFtZSkuZ2V0R3JhcGgoKTsKKyAgICAgICAgICAgIHR4Q3R4LnN1Ym1pdChuZXcgRnV0dXJlVGFzazw+KCgpIC0+IHsKKyAgICAgICAgICAgICAgICBncmFwaC50eCgpLm9wZW4oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0pKS5nZXQoNTAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsgLy8gTm90IGFuIG9wdGlvbiBmb3Igbm93LCBidXQgNXMgc2hvdWxkIGJlIHBsZW50eS4KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NpbmdFeGNlcHRpb24oR3JlbWxpbkVycm9yLm1heFRyYW5zYWN0aW9uc0V4Y2VlZGVkKGlzZS5nZXRNZXNzYWdlKCkpKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NpbmdFeGNlcHRpb24oR3JlbWxpbkVycm9yLmJpbmRpbmcodHJhdmVyc2FsU291cmNlTmFtZSkpOworICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB1b2UpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBQcm9jZXNzaW5nRXhjZXB0aW9uKEdyZW1saW5FcnJvci50cmFuc2FjdGlvbk5vdFN1cHBvcnRlZCh1b2UpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhlY3V0aW9uRXhjZXB0aW9uIHwgVGltZW91dEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUHJvY2Vzc2luZ0V4Y2VwdGlvbihHcmVtbGluRXJyb3IudHJhbnNhY3Rpb25VbmFibGVUb1N0YXJ0KGUuZ2V0TWVzc2FnZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcnVuQmVnaW4oZmluYWwgQ29udGV4dCBjdHgsIFVubWFuYWdlZFRyYW5zYWN0aW9uIHR4LCBmaW5hbCBQYWlyPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXIpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBCeXRlQnVmIGNodW5rID0gbWFrZUNodW5rKGN0eCwgc2VyaWFsaXplci5nZXRWYWx1ZTEoKSwgTGlzdC5vZihNYXAub2YoVG9rZW5zLkFSR1NfVFJBTlNBQ1RJT05fSUQsIHR4LmdldFRyYW5zYWN0aW9uSWQoKSkpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjdHguZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkud3JpdGVBbmRGbHVzaChuZXcgRGVmYXVsdEh0dHBDb250ZW50KGNodW5rKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUdyYXBoT3AoZmluYWwgQ29udGV4dCBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRyYW5zYWN0aW9uSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQ29uc3VtZXI8VHJhbnNhY3Rpb24+IGdyYXBoT3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUGFpcjxTdHJpbmcsIE1lc3NhZ2VTZXJpYWxpemVyPD8+PiBzZXJpYWxpemVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBncmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlKGN0eC5nZXRSZXF1ZXN0TWVzc2FnZSgpLmdldEZpZWxkKFRva2Vucy5BUkdTX0cpKS5nZXRHcmFwaCgpOworICAgICAgICBncmFwaE9wLmFjY2VwdChncmFwaC50eCgpKTsKKyAgICAgICAgdHJhbnNhY3Rpb25NYW5hZ2VyLmRlc3Ryb3kodHJhbnNhY3Rpb25JZCk7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgY2h1bmsgPSBtYWtlQ2h1bmsoY3R4LCBzZXJpYWxpemVyLmdldFZhbHVlMSgpLCBMaXN0Lm9mKE1hcC5vZihUb2tlbnMuQVJHU19UUkFOU0FDVElPTl9JRCwgdHJhbnNhY3Rpb25JZCkpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBjdHguZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkud3JpdGVBbmRGbHVzaChuZXcgRGVmYXVsdEh0dHBDb250ZW50KGNodW5rKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBCaW5kaW5ncyBtZXJnZUJpbmRpbmdzRnJvbVJlcXVlc3QoZmluYWwgQ29udGV4dCBjdHgsIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzKSB0aHJvd3MgUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgIC8vIGFsaWFzIGFueSBnbG9iYWwgYmluZGluZ3MgdG8gYSBkaWZmZXJlbnQgdmFyaWFibGUuCisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IGN0eC5nZXRSZXF1ZXN0TWVzc2FnZSgpOworCisgICAgICAgIC8vIGFkZCBhbnkgYmluZGluZ3MgdG8gb3ZlcnJpZGUgYW55IG90aGVyIHN1cHBsaWVkCisgICAgICAgIE9wdGlvbmFsLm9mTnVsbGFibGUoKE1hcDxTdHJpbmcsIE9iamVjdD4pIG1zZy5nZXRGaWVsZHMoKS5nZXQoVG9rZW5zLkFSR1NfQklORElOR1MpKS5pZlByZXNlbnQoYmluZGluZ3M6OnB1dEFsbCk7CisKKyAgICAgICAgaWYgKG1zZy5nZXRGaWVsZHMoKS5jb250YWluc0tleShUb2tlbnMuQVJHU19HKSkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFsaWFzZWQgPSBtc2cuZ2V0RmllbGQoVG9rZW5zLkFSR1NfRyk7CisgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZSBhbGlhcyByZWZlcnMgdG8gYSBHcmFwaCBpbnN0YW5jZQorICAgICAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBjdHguZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0R3JhcGgoYWxpYXNlZCk7CisgICAgICAgICAgICBpZiAobnVsbCAhPSBncmFwaCkgeworICAgICAgICAgICAgICAgIGJpbmRpbmdzLnB1dChUb2tlbnMuQVJHU19HLCBncmFwaCk7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBpZiB0aGUgYWxpYXMgd2Fzbid0IGZvdW5kIGFzIGEgR3JhcGggdGhlbiBwZXJoYXBzIGl0IGlzIGEgVHJhdmVyc2FsU291cmNlIC0gaXQgbmVlZHMgdG8gYmUKKyAgICAgICAgICAgIC8vIHNvbWV0aGluZworICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFNvdXJjZSB0cyA9IGN0eC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRUcmF2ZXJzYWxTb3VyY2UoYWxpYXNlZCk7CisgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHV0KFRva2Vucy5BUkdTX0csIHRzKTsKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIHRzID0gdGhpcy5ncmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlKGt2LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSB0cykgewotICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHV0KGt2LmdldEtleSgpLCB0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvciA9IFN0cmluZy5mb3JtYXQoIkNvdWxkIG5vdCByZWJpbmQgWyVzXSB0byBbJXNdIGFzIFslc10gbm90IGluIHRoZSBHcmFwaCBvciBUcmF2ZXJzYWxTb3VyY2UgZ2xvYmFsIGJpbmRpbmdzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrdi5nZXRLZXkoKSwga3YuZ2V0VmFsdWUoKSwga3YuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZXJyb3IpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHRoaXMgdmFsaWRhdGlvbiBpcyBpbXBvcnRhbnQgdG8gY2FsbHMgdG8gR3JhcGhNYW5hZ2VyLmNvbW1pdCgpIGFuZCByb2xsYmFjaygpIGFzIHRoZXkgYm90aAorICAgICAgICAgICAgLy8gZXhwZWN0IHRoYXQgdGhlIGFsaWFzZXMgc3VwcGxpZWQgYXJlIHZhbGlkCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFByb2Nlc3NpbmdFeGNlcHRpb24oR3JlbWxpbkVycm9yLmJpbmRpbmcoYWxpYXNlZCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgYmluZGluZ3MucHV0QWxsKGJpbmRpbmdNYXApOwotCiAgICAgICAgIHJldHVybiBiaW5kaW5nczsKICAgICB9CiAKLSAgICBwcml2YXRlIFBhaXI8U3RyaW5nLCBNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4+IGNob29zZVNlcmlhbGl6ZXIoZmluYWwgU3RyaW5nIG1pbWVUeXBlKSB7Ci0gICAgICAgIGZpbmFsIExpc3Q8UGFpcjxTdHJpbmcsIERvdWJsZT4+IG9yZGVyZWQgPSBTdHJlYW0ub2YobWltZVR5cGUuc3BsaXQoIiwiKSkubWFwKG1lZGlhVHlwZSAtPiB7Ci0gICAgICAgICAgICAvLyBwYXJzZSBvdXQgZWFjaCBtZWRpYVR5cGUgd2l0aCBpdHMgcGFyYW1zIC0ga2VlcGluZyBpdCBzaW1wbGUgYW5kIGp1c3QgbG9va2luZyBmb3IgInF1YWxpdHkiLiAgaWYKLSAgICAgICAgICAgIC8vIHRoYXQgdmFsdWUgaXNuJ3QgdGhlcmUsIGRlZmF1bHQgaXQgdG8gMS4wLiAgbm90IHJlYWxseSB2YWxpZGF0aW5nIGhlcmUgc28gdXNlcnMgYmV0dGVyIGdldCB0aGVpcgotICAgICAgICAgICAgLy8gYWNjZXB0IGhlYWRlcnMgc3RyYWlnaHQKLSAgICAgICAgICAgIGZpbmFsIE1hdGNoZXIgbWF0Y2hlciA9IHBhdHRlcm4ubWF0Y2hlcihtZWRpYVR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIChtYXRjaGVyLm1hdGNoZXMoKSkgPyBQYWlyLndpdGgobWF0Y2hlci5ncm91cCgxKSwgRG91YmxlLnBhcnNlRG91YmxlKG1hdGNoZXIuZ3JvdXAoMikpKSA6IFBhaXIud2l0aChtZWRpYVR5cGUsIDEuMCk7Ci0gICAgICAgIH0pLnNvcnRlZCgobzEsIG8yKSAtPiBvMi5nZXRWYWx1ZTAoKS5jb21wYXJlVG8obzEuZ2V0VmFsdWUwKCkpKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVJdGVyYXRvcihmaW5hbCBDb250ZXh0IGNvbnRleHQsIGZpbmFsIEl0ZXJhdG9yIGl0dHksIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIsIGZpbmFsIGJvb2xlYW4gYnVsa2luZykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IG5ldHR5Q29udGV4dCA9IGNvbnRleHQuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IGNvbnRleHQuZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKKyAgICAgICAgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MgPSBjb250ZXh0LmdldFNldHRpbmdzKCk7CiAKLSAgICAgICAgZm9yIChQYWlyPFN0cmluZywgRG91YmxlPiBwIDogb3JkZXJlZCkgewotICAgICAgICAgICAgLy8gdGhpcyBpc24ndCBwZXJmZWN0IGFzIGl0IGRvZXNuJ3QgcmVhbGx5IGFjY291bnQgZm9yIHdpbGRjYXJkcy4gIHRoYXQgbGV2ZWwgb2YgY29tcGxleGl0eSBkb2Vzbid0IHNlZW0KLSAgICAgICAgICAgIC8vIHN1cGVyIHVzZWZ1bCBmb3IgZ3JlbWxpbiBzZXJ2ZXIgcmVhbGx5LgotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY2VwdCA9IHAuZ2V0VmFsdWUwKCkuZXF1YWxzKCIqLyoiKSA/ICJhcHBsaWNhdGlvbi9qc29uIiA6IHAuZ2V0VmFsdWUwKCk7Ci0gICAgICAgICAgICBpZiAoc2VyaWFsaXplcnMuY29udGFpbnNLZXkoYWNjZXB0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUGFpci53aXRoKGFjY2VwdCwgKE1lc3NhZ2VUZXh0U2VyaWFsaXplcjw/Pikgc2VyaWFsaXplcnMuZ2V0KGFjY2VwdCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoYWNjZXB0LmVxdWFscygidGV4dC9wbGFpbiIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBhaXIud2l0aChhY2NlcHQsIHRleHRQbGFpblNlcmlhbGl6ZXIpOworICAgICAgICAvLyB1c2VkIHRvIGxpbWl0IHdhcm5pbmdzIGZvciB3aGVuIG5ldHR5IGZpbGxzIHRoZSBidWZmZXIgYW5kIGhpdHMgdGhlIGhpZ2ggd2F0ZXJtYXJrIC0gcHJldmVudHMKKyAgICAgICAgLy8gb3Zlci1sb2dnaW5nIG9mIHRoZSBzYW1lIG1lc3NhZ2UuCisgICAgICAgIGxvbmcgbGFzdFdhcm5pbmdUaW1lID0gMDsKKyAgICAgICAgaW50IHdhcm5Db3VudGVyID0gMDsKKworICAgICAgICAvLyB3ZSBoYXZlIGFuIGVtcHR5IGl0ZXJhdG9yIC0gaGFwcGVucyBvbiBzdHVmZiBsaWtlOiBnLlYoKS5pdGVyYXRlKCkKKyAgICAgICAgaWYgKCFpdHR5Lmhhc05leHQoKSkgeworICAgICAgICAgICAgQnl0ZUJ1ZiBjaHVuayA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNodW5rID0gbWFrZUNodW5rKGNvbnRleHQsIHNlcmlhbGl6ZXIsIG5ldyBBcnJheUxpc3Q8PigpLCBmYWxzZSwgYnVsa2luZyk7CisgICAgICAgICAgICAgICAgbmV0dHlDb250ZXh0LndyaXRlQW5kRmx1c2gobmV3IERlZmF1bHRIdHRwQ29udGVudChjaHVuaykpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgLy8gQnl0ZWJ1ZiBpcyBhIGNvdW50YWJsZSByZWxlYXNlIC0gaWYgaXQgZG9lcyBub3QgZ2V0IHdyaXR0ZW4gZG93bnN0cmVhbQorICAgICAgICAgICAgICAgIC8vIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIGhlcmUKKyAgICAgICAgICAgICAgICBpZiAoY2h1bmsgIT0gbnVsbCkgY2h1bmsucmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gdGhlIGJhdGNoIHNpemUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHJlcXVlc3QKKyAgICAgICAgZmluYWwgaW50IHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSA9IChJbnRlZ2VyKSBtc2cub3B0aW9uYWxGaWVsZChUb2tlbnMuQVJHU19CQVRDSF9TSVpFKQorICAgICAgICAgICAgICAgIC5vckVsc2Uoc2V0dGluZ3MucmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKTsKKyAgICAgICAgTGlzdDxPYmplY3Q+IGFnZ3JlZ2F0ZSA9IG5ldyBBcnJheUxpc3Q8PihyZXN1bHRJdGVyYXRpb25CYXRjaFNpemUpOworCisgICAgICAgIC8vIHVzZSBhbiBleHRlcm5hbCBjb250cm9sIHRvIG1hbmFnZSB0aGUgbG9vcCBhcyBvcHBvc2VkIHRvIGp1c3QgY2hlY2tpbmcgaGFzTmV4dCgpIGluIHRoZSB3aGlsZS4gIHRoaXMKKyAgICAgICAgLy8gcHJldmVudCBzaXR1YXRpb25zIHdoZXJlIGF1dG8gdHJhbnNhY3Rpb25zIGNyZWF0ZSBhIG5ldyB0cmFuc2FjdGlvbiBhZnRlciBjYWxscyB0byBjb21taXQoKSB3aXRoaW5nCisgICAgICAgIC8vIHRoZSBsb29wIG9uIGNhbGxzIHRvIGhhc05leHQoKS4KKyAgICAgICAgYm9vbGVhbiBoYXNNb3JlID0gaXR0eS5oYXNOZXh0KCk7CisKKyAgICAgICAgd2hpbGUgKGhhc01vcmUpIHsKKyAgICAgICAgICAgIGlmIChUaHJlYWQuaW50ZXJydXB0ZWQoKSkgdGhyb3cgbmV3IEludGVycnVwdGVkRXhjZXB0aW9uKCk7CisKKyAgICAgICAgICAgIC8vIGhhdmUgdG8gY2hlY2sgdGhlIGFnZ3JlZ2F0ZSBzaXplIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY2hhbm5lbCBpcyBub3Qgd3JpdGVhYmxlIChiZWxvdykKKyAgICAgICAgICAgIC8vIHNvIGl0ZXJhdGluZyBuZXh0KCkgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IHdyaXR0ZW4gYW5kIGZsdXNoZWQgd291bGQgYnVtcCB0aGUgYWdncmVnYXRlIHNpemUgYmV5b25kCisgICAgICAgICAgICAvLyB0aGUgZXhwZWN0ZWQgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplLiAgVG90YWwgc2VyaWFsaXphdGlvbiB0aW1lIGZvciB0aGUgcmVzcG9uc2UgcmVtYWlucyBpbgorICAgICAgICAgICAgLy8gZWZmZWN0IHNvIGlmIHRoZSBjbGllbnQgaXMgInNsb3ciIGl0IG1heSBzaW1wbHkgdGltZW91dC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIG5lZWQgdG8gY2hlY2sgaGFzTmV4dCgpIG9uIHRoZSBpdGVyYXRvciBiZWNhdXNlIGlmIHRoZSBjaGFubmVsIGlzIG5vdCB3cml0ZWFibGUgdGhlCisgICAgICAgICAgICAvLyBwcmV2aW91cyBwYXNzIHRocm91Z2ggdGhlIHdoaWxlIGxvb3Agd2lsbCBoYXZlIG5leHQoKSdkIHRoZSBpdGVyYXRvciBhbmQgaWYgaXQgaXMgImRvbmUiIHRoZW4gYQorICAgICAgICAgICAgLy8gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiB3aWxsIHJhaXNlIGl0cyBoZWFkLiBhbHNvIG5lZWQgYSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0CisgICAgICAgICAgICAvLyByZXF1aXJlIGEgZm9yY2VkIGZsdXNoIHdoaWNoIGNhbiBiZSBmb3JjZWQgYnkgc3ViLWNsYXNzZXMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSBwbGFjZWQgaW5zaWRlIHRoZSBpc1dyaXRlYWJsZSgpIHBvcnRpb24gb2YgdGhlIGlmLXRoZW4gYmVsb3cgYnV0IGl0IHNlZW1zIGJldHRlciB0bworICAgICAgICAgICAgLy8gYWxsb3cgaXRlcmF0aW9uIHRvIGNvbnRpbnVlIGludG8gYSBiYXRjaCBpZiB0aGF0IGlzIHBvc3NpYmxlIHJhdGhlciB0aGFuIGp1c3QgZG9pbmcgbm90aGluZyBhdCBhbGwKKyAgICAgICAgICAgIC8vIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjbGllbnQgdG8gY2F0Y2ggdXAKKyAgICAgICAgICAgIGlmIChhZ2dyZWdhdGUuc2l6ZSgpIDwgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplICYmIGl0dHkuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1bGtpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhdmVyc2VyIHRyYXZlcnNlciA9IChUcmF2ZXJzZXIpIGl0dHkubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGUuYWRkKHRyYXZlcnNlci5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZS5hZGQodHJhdmVyc2VyLmJ1bGsoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlLmFkZChpdHR5Lm5leHQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEb24ndCBrZWVwIGV4ZWN1dG9yIGJ1c3kgaWYgY2xpZW50IGhhcyBhbHJlYWR5IGdpdmVuIHVwOyB0aGVyZSBpcyBubyB3YXkgdG8gY2F0Y2ggdXAgaWYgdGhlIGNoYW5uZWwgaXMKKyAgICAgICAgICAgIC8vIG5vdCBhY3RpdmUsIGFuZCBoZW5jZSB3ZSBzaG91bGQgYnJlYWsgdGhlIGxvb3AuCisgICAgICAgICAgICBpZiAoIW5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNBY3RpdmUoKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBzZW5kIGJhY2sgYSBwYWdlIG9mIHJlc3VsdHMgaWYgYmF0Y2ggc2l6ZSBpcyBtZXQgb3IgaWYgaXQncyB0aGUgZW5kIG9mIHRoZSByZXN1bHRzIGJlaW5nIGl0ZXJhdGVkLgorICAgICAgICAgICAgLy8gYWxzbyBjaGVjayB3cml0ZWFiaWxpdHkgb2YgdGhlIGNoYW5uZWwgdG8gcHJldmVudCBPT01FIGZvciBzbG93IGNsaWVudHMuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gY2xpZW50cyBtaWdodCBkZWNpZGUgdG8gY2xvc2UgdGhlIE5ldHR5IGNoYW5uZWwgdG8gdGhlIHNlcnZlciB3aXRoIGEgQ2xvc2VXZWJzb2NrZXRGcmFtZSBhZnRlciBlcnJvcnMKKyAgICAgICAgICAgIC8vIGxpa2UgQ29ycnVwdGVkRnJhbWVFeGNlcHRpb24uIE9uIHRoZSBzZXJ2ZXIsIGFsdGhvdWdoIHRoZSBjaGFubmVsIGdldHMgY2xvc2VkLCB0aGVyZSBtaWdodCBiZSBzb21lCisgICAgICAgICAgICAvLyBleGVjdXRvciB0aHJlYWRzIHdhaXRpbmcgZm9yIHdhdGVybWFyayB0byBjbGVhciB3aGljaCB3aWxsIG5vdCBjbGVhciBpbiB0aGVzZSBjYXNlcyBzaW5jZSBjbGllbnQgaGFzCisgICAgICAgICAgICAvLyBhbHJlYWR5IGdpdmVuIHVwIG9uIHRoZXNlIHJlcXVlc3RzLiBUaGlzIGxlYWRzIHRvIHRoZXNlIGV4ZWN1dG9ycyB3YWl0aW5nIGZvciB0aGUgY2xpZW50IHRvIGNvbnN1bWUKKyAgICAgICAgICAgIC8vIHJlc3VsdHMgdGlsbCB0aGUgdGltZW91dC4gY2hlY2tpbmcgZm9yIGlzQWN0aXZlKCkgc2hvdWxkIGhlbHAgcHJldmVudCB0aGF0LgorICAgICAgICAgICAgaWYgKG5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNBY3RpdmUoKSAmJiBuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmlzV3JpdGFibGUoKSkgeworICAgICAgICAgICAgICAgIGlmIChhZ2dyZWdhdGUuc2l6ZSgpID09IHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSB8fCAhaXR0eS5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQnl0ZUJ1ZiBjaHVuayA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IG1ha2VDaHVuayhjb250ZXh0LCBzZXJpYWxpemVyLCBhZ2dyZWdhdGUsIGl0dHkuaGFzTmV4dCgpLCBidWxraW5nKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCeXRlYnVmIGlzIGEgY291bnRhYmxlIHJlbGVhc2UgLSBpZiBpdCBkb2VzIG5vdCBnZXQgd3JpdHRlbiBkb3duc3RyZWFtCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBuZWVkcyB0byBiZSByZWxlYXNlZCBoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmsgIT0gbnVsbCkgY2h1bmsucmVsZWFzZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gaXMgaGFuZGxlZCBpbiBtYWtlRnJhbWUoKSAtIHNlcmlhbGl6YXRpb24gZXJyb3IgZ2V0cyB3cml0dGVuIGJhY2sgdG8gZHJpdmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGF0IHBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgbGVmdCBpbiB0aGUgaXRlcmF0b3IgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY291bGQgYmUgY2xvc2VkIC0gaW4gdGhhdCBjYXNlIGEgY2FsbCB0byBoYXNOZXh0KCkgY291bGQgb3BlbiBhIG5ldyB0cmFuc2FjdGlvbgorICAgICAgICAgICAgICAgICAgICAvLyB1bmludGVudGlvbmFsbHkKKyAgICAgICAgICAgICAgICAgICAgaGFzTW9yZSA9IGl0dHkuaGFzTmV4dCgpOworCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IG5lZWQgdG8gcmVzZXQgdGhlIGFnZ3JlZ2F0aW9uIGxpc3QgaWYgdGhlcmUncyBtb3JlIHN0dWZmIHRvIHdyaXRlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZSA9IG5ldyBBcnJheUxpc3Q8PihyZXN1bHRJdGVyYXRpb25CYXRjaFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ5dGVidWYgaXMgYSBjb3VudGFibGUgcmVsZWFzZSAtIGlmIGl0IGRvZXMgbm90IGdldCB3cml0dGVuIGRvd25zdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayAhPSBudWxsKSBjaHVuay5yZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG5ldHR5Q29udGV4dC53cml0ZUFuZEZsdXNoKG5ldyBEZWZhdWx0SHR0cENvbnRlbnQoY2h1bmspKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKworICAgICAgICAgICAgICAgIC8vIGV4cG9uZW50aWFsIGRlbGF5IGJldHdlZW4gd2FybmluZ3MuIGRvbid0IGtlZXAgdHJpZ2dlcmluZyB0aGlzIHdhcm5pbmcgb3ZlciBhbmQgb3ZlciBhZ2FpbiBmb3IgdGhlCisgICAgICAgICAgICAgICAgLy8gc2FtZSByZXF1ZXN0LiB0b3RhbFBlbmRpbmdXcml0ZUJ5dGVzIGlzIHZvbGF0aWxlIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgYnkgdGhlIHRpbWUgdGhpcyB3YXJuaW5nCisgICAgICAgICAgICAgICAgLy8gaGl0cyB0aGUgbG9nIHRoZSBsb3cgd2F0ZXJtYXJrIG1heSBoYXZlIGJlZW4gaGl0CisgICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCA9IChsb25nKSBNYXRoLnBvdygyLCB3YXJuQ291bnRlcikgKiAxMDAwOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIGxhc3RXYXJuaW5nVGltZSA+PSBpbnRlcnZhbCkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGFubmVsIGNoID0gY29udGV4dC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5jaGFubmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJXYXJuaW5nIHt9OiBPdXRib3VuZCBidWZmZXIgc2l6ZT17fSwgcGF1c2luZyByZXNwb25zZSB3cml0aW5nIGFzIHdyaXRlQnVmZmVySGlnaFdhdGVyTWFyayBleGNlZWRlZCBvbiByZXF1ZXN0IHt9IGZvciBjaGFubmVsIHt9IC0gd3JpdGluZyB3aWxsIGNvbnRpbnVlIG9uY2UgY2xpZW50IGhhcyBjYXVnaHQgdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5Db3VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLnVuc2FmZSgpLm91dGJvdW5kQnVmZmVyKCkudG90YWxQZW5kaW5nV3JpdGVCeXRlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLmF0dHIoU3RhdGVLZXkuUkVRVUVTVF9JRCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2guaWQoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbGFzdFdhcm5pbmdUaW1lID0gY3VycmVudFRpbWU7CisgICAgICAgICAgICAgICAgICAgIHdhcm5Db3VudGVyKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGNsaWVudCBpcyBsYWdnaW5nIHdlIGNhbiBob2xkIGhlcmUgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBjbGllbnQgdG8gY2F0Y2ggdXAuCisgICAgICAgICAgICAgICAgLy8gdGhpcyBpc24ndCBibG9ja2luZyB0aGUgSU8gdGhyZWFkIC0ganVzdCBhIHdvcmtlci4KKyAgICAgICAgICAgICAgICBUaW1lVW5pdC5NSUxMSVNFQ09ORFMuc2xlZXAoV1JJVEVfUEFVU0VfVElNRV9NUyk7CisgICAgICAgICAgICAgICAgd3JpdGVQYXVzZXNNZXRlci5tYXJrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiBhbnkgZXhjZXB0aW9uIGluIHRoZSBjaGFpbiBpcyB7QGxpbmsgVGVtcG9yYXJ5RXhjZXB0aW9ufSBvciB7QGxpbmsgRmFpbHVyZX0gdGhlbiByZXNwb25kIHdpdGggdGhlCisgICAgICogcmlnaHQgZXJyb3IgY29kZSBzbyB0aGF0IHRoZSBjbGllbnQga25vd3MgdG8gcmV0cnkuCisgICAgICovCisgICAgcHJpdmF0ZSBPcHRpb25hbDxUaHJvd2FibGU+IGRldGVybWluZUlmU3BlY2lhbEV4Y2VwdGlvbihmaW5hbCBUaHJvd2FibGUgZXgpIHsKKyAgICAgICAgcmV0dXJuIFN0cmVhbS5vZihFeGNlcHRpb25VdGlscy5nZXRUaHJvd2FibGVzKGV4KSkuCisgICAgICAgICAgICAgICAgZmlsdGVyKGkgLT4gaSBpbnN0YW5jZW9mIFRlbXBvcmFyeUV4Y2VwdGlvbiB8fCBpIGluc3RhbmNlb2YgRmFpbHVyZSkuZmluZEZpcnN0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdHNEZWZsYXRlRW5jb2RpbmcoTGlzdDxTdHJpbmc+IGVuY29kaW5ncykgeworICAgICAgICBmb3IgKFN0cmluZyBlbmNvZGluZyA6IGVuY29kaW5ncykgeworICAgICAgICAgICAgaWYgKGVuY29kaW5nLmNvbnRhaW5zKERFRkxBVEUudG9TdHJpbmcoKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBudWxsOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhdHRlbXB0Q29tbWl0KGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcywgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlciwgZmluYWwgYm9vbGVhbiBzdHJpY3QpIHsKLSAgICAgICAgaWYgKHN0cmljdCkKLSAgICAgICAgICAgIGdyYXBoTWFuYWdlci5jb21taXQobmV3IEhhc2hTZXQ8PihhbGlhc2VzLnZhbHVlcygpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdyYXBoTWFuYWdlci5jb21taXRBbGwoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmIG1ha2VDaHVuayhmaW5hbCBDb250ZXh0IGN0eCwgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gYWdncmVnYXRlLCBmaW5hbCBib29sZWFuIGhhc01vcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBidWxraW5nKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBuZXR0eUNvbnRleHQgPSBjdHguZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGN0eC5oYW5kbGVEZXRhY2htZW50KGFnZ3JlZ2F0ZSk7CisKKyAgICAgICAgICAgIGlmICghaGFzTW9yZSAmJiBjdHguZ2V0UmVxdWVzdFN0YXRlKCkgPT0gU1RSRUFNSU5HKSB7CisgICAgICAgICAgICAgICAgY3R4LnNldFJlcXVlc3RTdGF0ZShGSU5JU0hJTkcpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gbnVsbDsKKworICAgICAgICAgICAgLy8gZm9yIHRoaXMgc3RhdGUgbm8gbmVlZCB0byBidWlsZCBmdWxsIFJlc3BvbnNlTWVzc2FnZQorICAgICAgICAgICAgaWYgKGN0eC5nZXRSZXF1ZXN0U3RhdGUoKSAhPSBTVFJFQU1JTkcpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlciBidWlsZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkucmVzdWx0KGFnZ3JlZ2F0ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHB1dCBzdGF0dXMgaW4gbGFzdCBtZXNzYWdlCisgICAgICAgICAgICAgICAgaWYgKGN0eC5nZXRSZXF1ZXN0U3RhdGUoKSA9PSBGSU5JU0hJTkcpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnVpbGRlci5idWxrZWQoYnVsa2luZyk7CisKKyAgICAgICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UgPSBidWlsZGVyLmNyZWF0ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGN0eC5nZXRSZXF1ZXN0U3RhdGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTk9UX1NUQVJURUQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0UmVxdWVzdFN0YXRlKFNUUkVBTUlORyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplci53cml0ZUhlYWRlcihyZXNwb25zZU1lc3NhZ2UsIG5ldHR5Q29udGV4dC5hbGxvYygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdHguc2V0UmVxdWVzdFN0YXRlKEZJTklTSEVEKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdChhZ2dyZWdhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1bGtlZChidWxraW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCksIG5ldHR5Q29udGV4dC5hbGxvYygpKTsKKworICAgICAgICAgICAgICAgIGNhc2UgU1RSRUFNSU5HOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplci53cml0ZUNodW5rKGFnZ3JlZ2F0ZSwgbmV0dHlDb250ZXh0LmFsbG9jKCkpOworICAgICAgICAgICAgICAgIGNhc2UgRklOSVNISU5HOgorICAgICAgICAgICAgICAgICAgICBjdHguc2V0UmVxdWVzdFN0YXRlKEZJTklTSEVEKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIud3JpdGVGb290ZXIocmVzcG9uc2VNZXNzYWdlLCBuZXR0eUNvbnRleHQuYWxsb2MoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2VNZXNzYWdlLCBuZXR0eUNvbnRleHQuYWxsb2MoKSk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3RJZCA9IGN0eC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5hdHRyKFN0YXRlS2V5LlJFUVVFU1RfSUQpLmdldCgpOworICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlRoZSByZXN1bHQgW3t9XSBpbiB0aGUgcmVxdWVzdCB7fSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBhbmQgcmV0dXJuZWQuIiwgYWdncmVnYXRlLCByZXF1ZXN0SWQsIGV4KTsKKyAgICAgICAgICAgIHdyaXRlRXJyb3IoY3R4LCBHcmVtbGluRXJyb3Iuc2VyaWFsaXphdGlvbihleCksIHNlcmlhbGl6ZXIpOworICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZW51bSBSZXF1ZXN0U3RhdGUgeworICAgICAgICBOT1RfU1RBUlRFRCwKKyAgICAgICAgU1RSRUFNSU5HLAorICAgICAgICAvLyBsYXN0IHBvcnRpb24gb2YgZGF0YQorICAgICAgICBGSU5JU0hJTkcsCisgICAgICAgIEZJTklTSEVELAorICAgICAgICBFUlJPUgogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwSGFuZGxlclV0aWwuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwSGFuZGxlclV0aWwuamF2YQppbmRleCA3YjEwMzZjLi5mMGY2YjY1IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cEhhbmRsZXJVdGlsLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBIYW5kbGVyVXRpbC5qYXZhCkBAIC0yMSw0NyArMjEsMzQgQEAKIGltcG9ydCBjb20uY29kYWhhbGUubWV0cmljcy5NZXRlcjsKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsRnV0dXJlOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEZ1dHVyZUxpc3RlbmVyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0RnVsbEh0dHBSZXNwb25zZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRIdHRwUmVzcG9uc2U7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRMYXN0SHR0cENvbnRlbnQ7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkZ1bGxIdHRwUmVzcG9uc2U7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJOYW1lczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlOwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBVdGlsOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5RdWVyeVN0cmluZ0RlY29kZXI7CiBpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuZXhjZXB0aW9uLkV4Y2VwdGlvblV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JlbWxpblNlcnZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zdGFuZGFyZC5TdGFuZGFyZE9wUHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuR3JlbWxpbkVycm9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuTWV0cmljTWFuYWdlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQubm9kZS5BcnJheU5vZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQubm9kZS5PYmplY3ROb2RlOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCiBpbXBvcnQgc3RhdGljIGNvbS5jb2RhaGFsZS5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5Lm5hbWU7CiBpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFOwotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cE1ldGhvZC5HRVQ7Ci1pbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwTWV0aG9kLlBPU1Q7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXMuVFJBTlNGRVJfRU5DT0RJTkc7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyVmFsdWVzLkNIVU5LRUQ7CiBpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwVmVyc2lvbi5IVFRQXzFfMTsKIAogLyoqCkBAIC03MiwyMTggKzU5LDEyMiBAQAogcHVibGljIGNsYXNzIEh0dHBIYW5kbGVyVXRpbCB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEh0dHBIYW5kbGVyVXRpbC5jbGFzcyk7CiAgICAgc3RhdGljIGZpbmFsIE1ldGVyIGVycm9yTWV0ZXIgPSBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldE1ldGVyKG5hbWUoR3JlbWxpblNlcnZlci5jbGFzcywgImVycm9ycyIpKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHU19CSU5ESU5HU19ET1QgPSBUb2tlbnMuQVJHU19CSU5ESU5HUyArICIuIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHU19BTElBU0VTX0RPVCA9IFRva2Vucy5BUkdTX0FMSUFTRVMgKyAiLiI7CisKICAgICAvKioKLSAgICAgKiBUaGlzIGlzIGp1c3QgYSBnZW5lcmljIG1hcHBlciB0byBpbnRlcnByZXQgdGhlIEpTT04gb2YgYSBQT1NUZWQgcmVxdWVzdC4gIEl0IGlzIG5vdCB1c2VkIGZvciB0aGUgc2VyaWFsaXphdGlvbgotICAgICAqIG9mIHRoZSByZXNwb25zZS4KKyAgICAgKiBBIGdlbmVyaWMgbWFwcGVyIHRvIHJldHVybiBKU09OIGVycm9ycyBpbiBzcGVjaWZpYyBjYXNlcy4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwogCiAgICAgLyoqCi0gICAgICogQ29udmVydCBhIGh0dHAgcmVxdWVzdCBpbnRvIGEge0BsaW5rIFJlcXVlc3RNZXNzYWdlfS4KLSAgICAgKiBUaGVyZSBhcmUgMiBwYXlsb2FkIHR5cGVzIG9wdGlvbnMgaGVyZS4KLSAgICAgKiAxLgotICAgICAqICAgICBleGlzdGluZyBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9yZWZlcmVuY2UvI2Nvbm5lY3RpbmctdmlhLWh0dHAKLSAgICAgKiAgICAgaW50ZW5kZWQgdG8gdXNlIHdpdGggY3VybCwgcG9zdG1hbiwgZXRjLiBieSB1c2VycwotICAgICAqICAgICBib3RoIEdFVCBhbmQgUE9TVAotICAgICAqICAgICBDb250ZW50LVR5cGUgaGVhZGVyIGNhbiBiZSBlbXB0eSBvciBhcHBsaWNhdGlvbi9qc29uCi0gICAgICogICAgIEFjY2VwdCBoZWFkZXIgY2FuIGJlIGFueSwgbW9zdCB1c2VmdWwgY2FuIGJlIGFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sIGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbiBhbmQgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uO3R5cGVzPWZhbHNlCi0gICAgICogICAgIFJlcXVlc3QgYm9keSBleGFtcGxlOiB7ICJncmVtbGluIjogImcuVigpIiB9Ci0gICAgICogMi4KLSAgICAgKiAgICAgZXhwZXJpbWVudGFsIHBheWxvYWQgd2l0aCBzZXJpYWxpemVkIFJlcXVlc3RNZXNzYWdlCi0gICAgICogICAgIGludGVuZGVkIGZvciBkcml2ZXJzL0dMVidzLiBTdXBwb3J0IGJvdGggZ3JlbWxpbiBhbmQgYnl0ZWNvZGUgcXVlcmllcy4KLSAgICAgKiAgICAgb25seSBQT1NUCi0gICAgICogICAgIENvbnRlbnQtVHlwZSBpcyBkZWZpbmVkIGJ5IHVzZWQgc2VyaWFsaXplciwgZXhwZWN0ZWQgdHlwZSBHcmFwaFNPTiBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24gb3IgR3JhcGhCaW5hcnkgYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAuIFVudHlwZWQgR3JhcGhTT04gaXMgbm90IHN1cHBvcnRlZCwgaXQgY2FuJ3QgZGVzZXJpYWxpemUgYnl0ZWNvZGUKLSAgICAgKiAgICAgQWNjZXB0IGhlYWRlciBjYW4gYmUgYW55LgotICAgICAqICAgICBSZXF1ZXN0IGJvZHkgY29udGFpbnMgc2VyaWFsaXplZCBSZXF1ZXN0TWVzc2FnZQorICAgICAqIEhlbHBlciBtZXRob2QgdG8gc2VuZCBlcnJvcnMgYmFjayBhcyBKU09OLiBPbmx5IHRvIGJlIHVzZWQgd2hlbiB0aGUgUmVxdWVzdE1lc3NhZ2UgY291bGRuJ3QgYmUgcGFyc2VkLCBiZWNhdXNlCisgICAgICogYSBwcm9wZXIgc2VyaWFsaXplZCBSZXNwb25zZU1lc3NhZ2Ugc2hvdWxkIGJlIHNlbnQgaW4gdGhhdCBjYXNlLgorICAgICAqCisgICAgICogQHBhcmFtIGN0eCAgICAgICAgICAgVGhlIG5ldHR5IGNoYW5uZWwgY29udGV4dC4KKyAgICAgKiBAcGFyYW0gc3RhdHVzICAgICAgICBUaGUgSFRUUCBlcnJvciBzdGF0dXMgY29kZS4KKyAgICAgKiBAcGFyYW0gbWVzc2FnZSAgICAgICBUaGUgZXJyb3IgbWVzc2FnZSB0byBjb250YWluIHRoZSBib2R5LgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUmVxdWVzdE1lc3NhZ2UgZ2V0UmVxdWVzdE1lc3NhZ2VGcm9tSHR0cFJlcXVlc3QoZmluYWwgRnVsbEh0dHBSZXF1ZXN0IHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnMpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXJzKCkuZ2V0KEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUpOwotCi0gICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCgpID09IFBPU1QgJiYgY29udGVudFR5cGUgIT0gbnVsbCAmJiAhY29udGVudFR5cGUuZXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIikgJiYgc2VyaWFsaXplcnMuY29udGFpbnNLZXkoY29udGVudFR5cGUpKSB7Ci0gICAgICAgICAgICBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZXJpYWxpemVyID0gc2VyaWFsaXplcnMuZ2V0KGNvbnRlbnRUeXBlKTsKLQotICAgICAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSByZXF1ZXN0LmNvbnRlbnQoKTsKLQotICAgICAgICAgICAgLy8gYWRkaXRpb25hbCB2YWxpZGF0aW9uIGZvciBoZWFkZXIKLSAgICAgICAgICAgIGZpbmFsIGludCBmaXJzdCA9IGJ1ZmZlci5yZWFkQnl0ZSgpOwotICAgICAgICAgICAgLy8gcGF5bG9hZCBjYW4gYmUgcGxhaW4ganNvbiBvciBjYW4gc3RhcnQgd2l0aCBhZGRpdGlvbmFsIGhlYWRlciB3aXRoIGNvbnRlbnQgdHlwZS4KLSAgICAgICAgICAgIC8vIGlmIGZpcnN0IGNoYXJhY3RlciBpcyBub3QgInsiICgweDdiKSB0aGVuIG5lZWQgdG8gdmVyaWZ5IGlzIGNvcnJlY3Qgc2VyaWFsaXplciBzZWxlY3RlZC4KLSAgICAgICAgICAgIGlmIChmaXJzdCAhPSAweDdiKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbZmlyc3RdOwotICAgICAgICAgICAgICAgIGJ1ZmZlci5yZWFkQnl0ZXMoYnl0ZXMpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtaW1lVHlwZSA9IG5ldyBTdHJpbmcoYnl0ZXMsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOwotCi0gICAgICAgICAgICAgICAgaWYgKEFycmF5cy5zdHJlYW0oc2VyaWFsaXplci5taW1lVHlwZXNTdXBwb3J0ZWQoKSkubm9uZU1hdGNoKHQgLT4gdC5lcXVhbHMobWltZVR5cGUpKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWltZSB0eXBlIG1pc21hdGNoLiBWYWx1ZSBpbiBjb250ZW50LXR5cGUgaGVhZGVyIGlzIG5vdCBlcXVhbCBwYXlsb2FkIGhlYWRlci4iKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci5yZXNldFJlYWRlckluZGV4KCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVxdWVzdChidWZmZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGdldFJlcXVlc3RNZXNzYWdlRnJvbUh0dHBSZXF1ZXN0KHJlcXVlc3QpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnZlcnQgYSBodHRwIHJlcXVlc3QgaW50byBhIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBSZXF1ZXN0TWVzc2FnZSBnZXRSZXF1ZXN0TWVzc2FnZUZyb21IdHRwUmVxdWVzdChmaW5hbCBGdWxsSHR0cFJlcXVlc3QgcmVxdWVzdCkgewotICAgICAgICAvLyBkZWZhdWx0IGlzIGp1c3QgdGhlIFN0YW5kYXJkT3BQcm9jZXNzb3Igd2hpY2ggbWFpbnRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyB3aGljaCBvbmx5Ci0gICAgICAgIC8vIHByb2Nlc3NlZCBzY3JpcHRzLgotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIG1zZ0J1aWxkZXIgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChTdGFuZGFyZE9wUHJvY2Vzc29yLk9QX1BST0NFU1NPUl9OQU1FKTsKLQotICAgICAgICBpZiAocmVxdWVzdC5tZXRob2QoKSA9PSBHRVQpIHsKLSAgICAgICAgICAgIGZpbmFsIFF1ZXJ5U3RyaW5nRGVjb2RlciBkZWNvZGVyID0gbmV3IFF1ZXJ5U3RyaW5nRGVjb2RlcihyZXF1ZXN0LnVyaSgpKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBncmVtbGluUGFybXMgPSBkZWNvZGVyLnBhcmFtZXRlcnMoKS5nZXQoVG9rZW5zLkFSR1NfR1JFTUxJTik7Ci0KLSAgICAgICAgICAgIGlmIChudWxsID09IGdyZW1saW5QYXJtcyB8fCBncmVtbGluUGFybXMuc2l6ZSgpID09IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm8gZ3JlbWxpbiBzY3JpcHQgc3VwcGxpZWQiKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSBncmVtbGluUGFybXMuZ2V0KDApOwotICAgICAgICAgICAgaWYgKHNjcmlwdC5pc0VtcHR5KCkpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vIGdyZW1saW4gc2NyaXB0IHN1cHBsaWVkIik7Ci0KLSAgICAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiByZXF1ZXN0SWRQYXJtcyA9IGRlY29kZXIucGFyYW1ldGVycygpLmdldChUb2tlbnMuUkVRVUVTVF9JRCk7Ci0gICAgICAgICAgICBpZiAocmVxdWVzdElkUGFybXMgIT0gbnVsbCAmJiByZXF1ZXN0SWRQYXJtcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgbXNnQnVpbGRlci5vdmVycmlkZVJlcXVlc3RJZChVVUlELmZyb21TdHJpbmcocmVxdWVzdElkUGFybXMuZ2V0KDApKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzIC0gdGFrZSB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYSBrZXkgb25seSAtIGlnbm9yZSB0aGUgcmVzdAotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGRlY29kZXIucGFyYW1ldGVycygpLmVudHJ5U2V0KCkuc3RyZWFtKCkuZmlsdGVyKGt2IC0+IGt2LmdldEtleSgpLnN0YXJ0c1dpdGgoQVJHU19CSU5ESU5HU19ET1QpKQotICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrdiAtPiBiaW5kaW5ncy5wdXQoa3YuZ2V0S2V5KCkuc3Vic3RyaW5nKEFSR1NfQklORElOR1NfRE9ULmxlbmd0aCgpKSwga3YuZ2V0VmFsdWUoKS5nZXQoMCkpKTsKLQotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZGVjb2Rlci5wYXJhbWV0ZXJzKCkuZW50cnlTZXQoKS5zdHJlYW0oKS5maWx0ZXIoa3YgLT4ga3YuZ2V0S2V5KCkuc3RhcnRzV2l0aChBUkdTX0FMSUFTRVNfRE9UKSkKLSAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goa3YgLT4gYWxpYXNlcy5wdXQoa3YuZ2V0S2V5KCkuc3Vic3RyaW5nKEFSR1NfQUxJQVNFU19ET1QubGVuZ3RoKCkpLCBrdi5nZXRWYWx1ZSgpLmdldCgwKSkpOwotCi0gICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gbGFuZ3VhZ2VQYXJtcyA9IGRlY29kZXIucGFyYW1ldGVycygpLmdldChUb2tlbnMuQVJHU19MQU5HVUFHRSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UgPSAobnVsbCA9PSBsYW5ndWFnZVBhcm1zIHx8IGxhbmd1YWdlUGFybXMuc2l6ZSgpID09IDApID8gbnVsbCA6IGxhbmd1YWdlUGFybXMuZ2V0KDApOwotCi0gICAgICAgICAgICByZXR1cm4gbXNnQnVpbGRlci5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgc2NyaXB0KS5hZGRBcmcoVG9rZW5zLkFSR1NfTEFOR1VBR0UsIGxhbmd1YWdlKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0JJTkRJTkdTLCBiaW5kaW5ncykuYWRkQXJnKFRva2Vucy5BUkdTX0FMSUFTRVMsIGFsaWFzZXMpLmNyZWF0ZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgYm9keTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYm9keSA9IG1hcHBlci5yZWFkVHJlZShyZXF1ZXN0LmNvbnRlbnQoKS50b1N0cmluZyhDaGFyc2V0VXRpbC5VVEZfOCkpOwotICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYm9keSBjb3VsZCBub3QgYmUgcGFyc2VkIiwgaW9lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgc2NyaXB0Tm9kZSA9IGJvZHkuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pOwotICAgICAgICAgICAgaWYgKG51bGwgPT0gc2NyaXB0Tm9kZSkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm8gZ3JlbWxpbiBzY3JpcHQgc3VwcGxpZWQiKTsKLQotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgYmluZGluZ3NOb2RlID0gYm9keS5nZXQoVG9rZW5zLkFSR1NfQklORElOR1MpOwotICAgICAgICAgICAgaWYgKGJpbmRpbmdzTm9kZSAhPSBudWxsICYmICFiaW5kaW5nc05vZGUuaXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJiaW5kaW5ncyBtdXN0IGJlIGEgTWFwIik7Ci0KLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBpZiAoYmluZGluZ3NOb2RlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgYmluZGluZ3NOb2RlLmZpZWxkcygpLmZvckVhY2hSZW1haW5pbmcoa3YgLT4gYmluZGluZ3MucHV0KGt2LmdldEtleSgpLCBmcm9tSnNvbk5vZGUoa3YuZ2V0VmFsdWUoKSkpKTsKLQotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgYWxpYXNlc05vZGUgPSBib2R5LmdldChUb2tlbnMuQVJHU19BTElBU0VTKTsKLSAgICAgICAgICAgIGlmIChhbGlhc2VzTm9kZSAhPSBudWxsICYmICFhbGlhc2VzTm9kZS5pc09iamVjdCgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFsaWFzZXMgbXVzdCBiZSBhIE1hcCIpOwotCi0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBpZiAoYWxpYXNlc05vZGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBhbGlhc2VzTm9kZS5maWVsZHMoKS5mb3JFYWNoUmVtYWluaW5nKGt2IC0+IGFsaWFzZXMucHV0KGt2LmdldEtleSgpLCBrdi5nZXRWYWx1ZSgpLmFzVGV4dCgpKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIGxhbmd1YWdlTm9kZSA9IGJvZHkuZ2V0KFRva2Vucy5BUkdTX0xBTkdVQUdFKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsYW5ndWFnZSA9IG51bGwgPT0gbGFuZ3VhZ2VOb2RlID8gbnVsbCA6IGxhbmd1YWdlTm9kZS5hc1RleHQoKTsKLQotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgcmVxdWVzdElkTm9kZSA9IGJvZHkuZ2V0KFRva2Vucy5SRVFVRVNUX0lEKTsKLSAgICAgICAgICAgIGZpbmFsIFVVSUQgcmVxdWVzdElkID0gbnVsbCA9PSByZXF1ZXN0SWROb2RlID8gVVVJRC5yYW5kb21VVUlEKCkgOiBVVUlELmZyb21TdHJpbmcocmVxdWVzdElkTm9kZS5hc1RleHQoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG9wTm9kZSA9IGJvZHkuZ2V0KCJvcCIpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG9wID0gbnVsbCA9PSBvcE5vZGUgPyAiIiA6IG9wTm9kZS5hc1RleHQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG1zZ0J1aWxkZXIub3ZlcnJpZGVSZXF1ZXN0SWQocmVxdWVzdElkKS5wcm9jZXNzb3Iob3ApCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgc2NyaXB0Tm9kZS5hc1RleHQoKSkuYWRkQXJnKFRva2Vucy5BUkdTX0xBTkdVQUdFLCBsYW5ndWFnZSkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19CSU5ESU5HUywgYmluZGluZ3MpLmFkZEFyZyhUb2tlbnMuQVJHU19BTElBU0VTLCBhbGlhc2VzKS5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBmcm9tSnNvbk5vZGUoZmluYWwgSnNvbk5vZGUgbm9kZSkgewotICAgICAgICBpZiAobm9kZS5pc051bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBlbHNlIGlmIChub2RlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgZmluYWwgT2JqZWN0Tm9kZSBvYmplY3ROb2RlID0gKE9iamVjdE5vZGUpIG5vZGU7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yID0gb2JqZWN0Tm9kZS5maWVsZE5hbWVzKCk7Ci0gICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgICAgICBtYXAucHV0KGtleSwgZnJvbUpzb25Ob2RlKG9iamVjdE5vZGUuZ2V0KGtleSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXA7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIEFycmF5Tm9kZSBhcnJheU5vZGUgPSAoQXJyYXlOb2RlKSBub2RlOwotICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PE9iamVjdD4gYXJyYXkgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlOb2RlLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXkuYWRkKGZyb21Kc29uTm9kZShhcnJheU5vZGUuZ2V0KGkpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0Zsb2F0aW5nUG9pbnROdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLmFzRG91YmxlKCk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUuaXNJbnRlZ3JhbE51bWJlcigpKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXNMb25nKCk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS5hc0Jvb2xlYW4oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXNUZXh0KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2VuZEVycm9yKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBzdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlLCBmaW5hbCBib29sZWFuIGtlZXBBbGl2ZSkgewotICAgICAgICBzZW5kRXJyb3IoY3R4LCBzdGF0dXMsIG51bGwsIG1lc3NhZ2UsIE9wdGlvbmFsLmVtcHR5KCksIGtlZXBBbGl2ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2VuZEVycm9yKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBzdGF0dXMsIGZpbmFsIFVVSUQgcmVxdWVzdElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSwgZmluYWwgYm9vbGVhbiBrZWVwQWxpdmUpIHsKLSAgICAgICAgc2VuZEVycm9yKGN0eCwgc3RhdHVzLCByZXF1ZXN0SWQsIG1lc3NhZ2UsIE9wdGlvbmFsLmVtcHR5KCksIGtlZXBBbGl2ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2VuZEVycm9yKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBzdGF0dXMsIGZpbmFsIFVVSUQgcmVxdWVzdElkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSwgZmluYWwgT3B0aW9uYWw8VGhyb3dhYmxlPiB0LCBmaW5hbCBib29sZWFuIGtlZXBBbGl2ZSkgewotICAgICAgICBpZiAodC5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIkludmFsaWQgcmVxdWVzdCAtIHJlc3BvbmRpbmcgd2l0aCAlcyBhbmQgJXMiLCBzdGF0dXMsIG1lc3NhZ2UpLCB0LmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiSW52YWxpZCByZXF1ZXN0IC0gcmVzcG9uZGluZyB3aXRoICVzIGFuZCAlcyIsIHN0YXR1cywgbWVzc2FnZSkpOwotCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNlbmRFcnJvcihmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBIdHRwUmVzcG9uc2VTdGF0dXMgc3RhdHVzLCBmaW5hbCBTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJJbnZhbGlkIHJlcXVlc3QgLSByZXNwb25kaW5nIHdpdGggJXMgYW5kICVzIiwgc3RhdHVzLCBtZXNzYWdlKSk7CiAgICAgICAgIGVycm9yTWV0ZXIubWFyaygpOworCiAgICAgICAgIGZpbmFsIE9iamVjdE5vZGUgbm9kZSA9IG1hcHBlci5jcmVhdGVPYmplY3ROb2RlKCk7CiAgICAgICAgIG5vZGUucHV0KCJtZXNzYWdlIiwgbWVzc2FnZSk7Ci0gICAgICAgIGlmICh0LmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAvLyAiRXhjZXB0aW9uLUNsYXNzIiBuZWVkcyB0byBnbyBhd2F5IC0gZGlkbid0IHJlYWxpemUgaXQgd2FzIG5hbWVkIHRoYXQgd2F5IGR1cmluZyByZXZpZXcgZm9yIHNvbWUgcmVhc29uLgotICAgICAgICAgICAgLy8gcmVwbGFjZWQgd2l0aCB0aGUgc2FtZSBtZXRob2QgZm9yIGV4Y2VwdGlvbiByZXBvcnRpbmcgYXMgaXMgdXNlZCB3aXRoIHdlYnNvY2tldC9uaW8gcHJvdG9jb2wKLSAgICAgICAgICAgIG5vZGUucHV0KCJFeGNlcHRpb24tQ2xhc3MiLCB0LmdldCgpLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIEFycmF5Tm9kZSBleGNlcHRpb25MaXN0ID0gbm9kZS5wdXRBcnJheShUb2tlbnMuU1RBVFVTX0FUVFJJQlVURV9FWENFUFRJT05TKTsKLSAgICAgICAgICAgIEV4Y2VwdGlvblV0aWxzLmdldFRocm93YWJsZUxpc3QodC5nZXQoKSkuZm9yRWFjaCh0aHJvd2FibGUgLT4gZXhjZXB0aW9uTGlzdC5hZGQodGhyb3dhYmxlLmdldENsYXNzKCkuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICBub2RlLnB1dChUb2tlbnMuU1RBVFVTX0FUVFJJQlVURV9TVEFDS19UUkFDRSwgRXhjZXB0aW9uVXRpbHMuZ2V0U3RhY2tUcmFjZSh0LmdldCgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcXVlc3RJZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBub2RlLnB1dCgicmVxdWVzdElkIiwgcmVxdWVzdElkLnRvU3RyaW5nKCkpOwotICAgICAgICB9CiAKICAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSByZXNwb25zZSA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXNwb25zZSgKICAgICAgICAgICAgICAgICBIVFRQXzFfMSwgc3RhdHVzLCBVbnBvb2xlZC5jb3BpZWRCdWZmZXIobm9kZS50b1N0cmluZygpLCBDaGFyc2V0VXRpbC5VVEZfOCkpOwogICAgICAgICByZXNwb25zZS5oZWFkZXJzKCkuc2V0KENPTlRFTlRfVFlQRSwgImFwcGxpY2F0aW9uL2pzb24iKTsKLQotICAgICAgICBzZW5kQW5kQ2xlYW51cENvbm5lY3Rpb24oY3R4LCBrZWVwQWxpdmUsIHJlc3BvbnNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZW5kQW5kQ2xlYW51cENvbm5lY3Rpb24oZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBrZWVwQWxpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2UgcmVzcG9uc2UpIHsKLSAgICAgICAgSHR0cFV0aWwuc2V0S2VlcEFsaXZlKHJlc3BvbnNlLCBrZWVwQWxpdmUpOwogICAgICAgICBIdHRwVXRpbC5zZXRDb250ZW50TGVuZ3RoKHJlc3BvbnNlLCByZXNwb25zZS5jb250ZW50KCkucmVhZGFibGVCeXRlcygpKTsKIAotICAgICAgICBmaW5hbCBDaGFubmVsRnV0dXJlIGZsdXNoUHJvbWlzZSA9IGN0eC53cml0ZUFuZEZsdXNoKHJlc3BvbnNlKTsKKyAgICAgICAgY3R4LndyaXRlQW5kRmx1c2gocmVzcG9uc2UpOworICAgIH0KIAotICAgICAgICBpZiAoIWtlZXBBbGl2ZSkgewotICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGNvbm5lY3Rpb24gYXMgc29vbiBhcyB0aGUgcmVzcG9uc2UgaXMgc2VudC4KLSAgICAgICAgICAgIGZsdXNoUHJvbWlzZS5hZGRMaXN0ZW5lcihDaGFubmVsRnV0dXJlTGlzdGVuZXIuQ0xPU0UpOworICAgIC8qKgorICAgICAqIFdyaXRlcyBhbmQgZmx1c2hlcyBhIHtAbGluayBSZXNwb25zZU1lc3NhZ2V9IHRoYXQgY29udGFpbnMgYW4gZXJyb3IgYmFjayB0byB0aGUgY2xpZW50LiBDYW4gYmUgdXNlZCB0byBzZW5kCisgICAgICogZXJyb3JzIHdoaWxlIHN0cmVhbWluZyBvciB3aGVuIG5vIHJlc3BvbnNlIGNodW5rIGhhcyBiZWVuIHNlbnQuIFRoaXMgc2VydmVzIGFzIHRoZSBlbmQgb2YgYSByZXNwb25zZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0ICAgICAgICAgICBUaGUgbmV0dHkgY29udGV4dC4KKyAgICAgKiBAcGFyYW0gcmVzcG9uc2VNZXNzYWdlICAgVGhlIHJlc3BvbnNlIHRvIHNlbmQgYmFjay4KKyAgICAgKiBAcGFyYW0gc2VyaWFsaXplciAgICAgICAgVGhlIHNlcmlhbGl6ZXIgdG8gdXNlIHRvIHNlcmlhbGl6ZSB0aGUgZXJyb3IgcmVzcG9uc2UuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgd3JpdGVFcnJvcihmaW5hbCBDb250ZXh0IGNvbnRleHQsIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHggPSBjb250ZXh0LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpOworICAgICAgICAgICAgZmluYWwgQnl0ZUJ1ZiBCeXRlQnVmID0gY29udGV4dC5nZXRSZXF1ZXN0U3RhdGUoKSA9PSBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5SZXF1ZXN0U3RhdGUuU1RSRUFNSU5HCisgICAgICAgICAgICAgICAgICAgID8gc2VyaWFsaXplci53cml0ZUVycm9yRm9vdGVyKHJlc3BvbnNlTWVzc2FnZSwgY3R4LmFsbG9jKCkpCisgICAgICAgICAgICAgICAgICAgIDogc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHJlc3BvbnNlTWVzc2FnZSwgY3R4LmFsbG9jKCkpOworCisgICAgICAgICAgICBjb250ZXh0LnNldFJlcXVlc3RTdGF0ZShIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlci5SZXF1ZXN0U3RhdGUuRVJST1IpOworCisgICAgICAgICAgICBpZiAoIWN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5IVFRQX1JFU1BPTlNFX1NFTlQpLmdldCgpKSB7CisgICAgICAgICAgICAgICAgc2VuZEh0dHBSZXNwb25zZShjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfVFlQRSwgY3R4LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlNFUklBTElaRVIpLmdldCgpLmdldFZhbHVlMCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2gobmV3IERlZmF1bHRIdHRwQ29udGVudChCeXRlQnVmKSk7CisKKyAgICAgICAgICAgIHNlbmRMYXN0SHR0cENvbnRlbnQoY3R4LCByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLCByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0RXhjZXB0aW9uKCkpOworICAgICAgICB9IGNhdGNoIChTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHNlKSB7CisgICAgICAgICAgICBsb2dnZXIud2FybigiVW5hYmxlIHRvIHNlcmlhbGl6ZSBSZXNwb25zZU1lc3NhZ2U6IHt9ICIsIHJlc3BvbnNlTWVzc2FnZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBXcml0ZXMgYSB7QGxpbmsgR3JlbWxpbkVycm9yfSBpbnRvIHRoZSBzdGF0dXMgb2JqZWN0IG9mIGEge0BsaW5rIFJlc3BvbnNlTWVzc2FnZX0gYW5kIHRoZW4gZmx1c2hlcyBpdC4gVXNlZCB0bworICAgICAqIHNlbmQgc3BlY2lmaWMgZXJyb3JzIGJhY2sgdG8gdGhlIGNsaWVudC4gVGhpcyBzZXJ2ZXMgYXMgdGhlIGVuZCBvZiBhIHJlc3BvbnNlLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgICAgICAgVGhlIG5ldHR5IGNvbnRleHQuCisgICAgICogQHBhcmFtIGVycm9yICAgICAgICAgVGhlIEdyZW1saW5FcnJvciB1c2VkIHRvIHBvcHVsYXRlIHRoZSBzdGF0dXMuCisgICAgICogQHBhcmFtIHNlcmlhbGl6ZXIgICAgVGhlIHNlcmlhbGl6ZXIgdG8gdXNlIHRvIHNlcmlhbGl6ZSB0aGUgZXJyb3IgcmVzcG9uc2UuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgd3JpdGVFcnJvcihmaW5hbCBDb250ZXh0IGNvbnRleHQsIGZpbmFsIEdyZW1saW5FcnJvciBlcnJvciwgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplcikgeworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShlcnJvci5nZXRDb2RlKCkpCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXJyb3IuZ2V0TWVzc2FnZSgpKQorICAgICAgICAgICAgICAgIC5leGNlcHRpb24oZXJyb3IuZ2V0RXhjZXB0aW9uKCkpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIHdyaXRlRXJyb3IoY29udGV4dCwgcmVzcG9uc2VNZXNzYWdlLCBzZXJpYWxpemVyKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGRzIHRyYWlsaW5nIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBhcmd1bWVudHMgdG8gYSB7QGxpbmsgRGVmYXVsdExhc3RIdHRwQ29udGVudH0gYW5kIHRoZW4gZmx1c2hlcyBpdC4gVGhpcworICAgICAqIHNlcnZlcyBhcyB0aGUgZW5kIG9mIGEgcmVzcG9uc2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY3R4ICAgICAgICAgICBUaGUgbmV0dHkgY29udGV4dC4KKyAgICAgKiBAcGFyYW0gc3RhdHVzQ29kZSAgICBUaGUgc3RhdHVzIGNvZGUgdG8gaW5jbHVkZSBpbiB0aGUgdHJhaWxlcnMuCisgICAgICogQHBhcmFtIGV4Y2VwdGlvblR5cGUgVGhlIHR5cGUgb2YgZXhjZXB0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIHRyYWlsZXJzLiBMZWF2ZSBibGFuayBvciBudWxsIGlmIG5vIGVycm9yIG9jY3VycmVkLgorICAgICAqLworICAgIHN0YXRpYyB2b2lkIHNlbmRMYXN0SHR0cENvbnRlbnQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgSHR0cFJlc3BvbnNlU3RhdHVzIHN0YXR1c0NvZGUsIGZpbmFsIFN0cmluZyBleGNlcHRpb25UeXBlKSB7CisgICAgICAgIC8vIFRPRE86IHRoaXMgbWlnaHQgYmUgbm90IHNlbnQgaWYgZXhjZXB0aW9uIG9jY3VycyBlYXJseSBzbyBIVFRQIG5vdCBwcm9wZXJseSB0ZXJtaW5hdGVkCisgICAgICAgIGZpbmFsIERlZmF1bHRMYXN0SHR0cENvbnRlbnQgZGVmYXVsdExhc3RIdHRwQ29udGVudCA9IG5ldyBEZWZhdWx0TGFzdEh0dHBDb250ZW50KCk7CisgICAgICAgIGRlZmF1bHRMYXN0SHR0cENvbnRlbnQudHJhaWxpbmdIZWFkZXJzKCkuYWRkKFNlclRva2Vucy5UT0tFTl9DT0RFLCBzdGF0dXNDb2RlLmNvZGUoKSk7CisgICAgICAgIGlmIChleGNlcHRpb25UeXBlICE9IG51bGwgJiYgIWV4Y2VwdGlvblR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkZWZhdWx0TGFzdEh0dHBDb250ZW50LnRyYWlsaW5nSGVhZGVycygpLmFkZChTZXJUb2tlbnMuVE9LRU5fRVhDRVBUSU9OLCBleGNlcHRpb25UeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKGRlZmF1bHRMYXN0SHR0cENvbnRlbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlbmRzIHRoZSBpbml0aWFsIEhUVFAgcmVzcG9uc2UgaGVhZGVyIHdpdGggdGhlIGdpdmVuIHN0YXR1cyBhbmQgb3B0aW9uYWwgaGVhZGVyIHBhaXJzLgorICAgICAqIEFsc28gbWFya3MgdGhlIGNoYW5uZWwgYXMgaGF2aW5nIHNlbnQgYSByZXNwb25zZS4gSGVhZGVycyBtdXN0IGJlIHByb3ZpZGVkIGFzIGFsdGVybmF0aW5nCisgICAgICogbmFtZS92YWx1ZSBwYWlycyAoZS5nLiB7QGNvZGUgQ09OVEVOVF9UWVBFLCAiYXBwbGljYXRpb24vanNvbiJ9KS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjdHggICAgIFRoZSBuZXR0eSBjaGFubmVsIGNvbnRleHQuCisgICAgICogQHBhcmFtIHN0YXR1cyAgVGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHRoZSByZXNwb25zZS4KKyAgICAgKiBAcGFyYW0gaGVhZGVycyBBbHRlcm5hdGluZyBoZWFkZXIgbmFtZS92YWx1ZSBwYWlycyB0byBzZXQgb24gdGhlIHJlc3BvbnNlLgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGhlYWRlcnMgbGVuZ3RoIGlzIG5vdCBldmVuCisgICAgICovCisgICAgc3RhdGljIHZvaWQgc2VuZEh0dHBSZXNwb25zZShmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBIdHRwUmVzcG9uc2VTdGF0dXMgc3RhdHVzLCBmaW5hbCBDaGFyU2VxdWVuY2UuLi4gaGVhZGVycykgeworICAgICAgICBpZiAoKGhlYWRlcnMubGVuZ3RoJTIpICE9IDApIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkhlYWRlcnMgc2hvdWxkIGNvbWUgaW4gcGFpcnMuIik7CisKKyAgICAgICAgZmluYWwgSHR0cFJlc3BvbnNlIHJlc3BvbnNlSGVhZGVyID0gbmV3IERlZmF1bHRIdHRwUmVzcG9uc2UoSFRUUF8xXzEsIHN0YXR1cyk7CisgICAgICAgIHJlc3BvbnNlSGVhZGVyLmhlYWRlcnMoKS5zZXQoVFJBTlNGRVJfRU5DT0RJTkcsIENIVU5LRUQpOworICAgICAgICBmb3IgKGludCBpPTA7IGk8aGVhZGVycy5sZW5ndGg7IGkrPTIpIHsKKyAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVyLmhlYWRlcnMoKS5zZXQoaGVhZGVyc1tpXSwgaGVhZGVyc1tpKzFdKTsKKyAgICAgICAgfQorICAgICAgICBjdHgud3JpdGVBbmRGbHVzaChyZXNwb25zZUhlYWRlcik7CisgICAgICAgIGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5IVFRQX1JFU1BPTlNFX1NFTlQpLnNldCh0cnVlKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwUmVxdWVzdENoZWNraW5nSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZGNhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIuamF2YQpAQCAtMCwwICsxLDU4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLlNpbXBsZUNoYW5uZWxJbmJvdW5kSGFuZGxlcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OworaW1wb3J0IGlvLm5ldHR5LnV0aWwuUmVmZXJlbmNlQ291bnRVdGlsOworCitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQ7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuTk9UX0ZPVU5EOworaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFZlcnNpb24uSFRUUF8xXzE7CisKKy8qKgorICogQSBoYW5kbGVyIHRoYXQgY2hlY2tzIGZvciBlcnJvcnMgaW4gdGhlIEhUVFAgcmVxdWVzdCBmb3IgYWxsIHJvdXRlcy4KKyAqLworQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCitwdWJsaWMgY2xhc3MgSHR0cFJlcXVlc3RDaGVja2luZ0hhbmRsZXIgZXh0ZW5kcyBTaW1wbGVDaGFubmVsSW5ib3VuZEhhbmRsZXI8RnVsbEh0dHBSZXF1ZXN0PiB7CisgICAgcHVibGljIEh0dHBSZXF1ZXN0Q2hlY2tpbmdIYW5kbGVyKCkgeworICAgICAgICAvLyBUaGlzIGhhbmRsZXIgb25seSBjb25zdW1lcyB0aGUgRnVsbEh0dHBSZXF1ZXN0IGluIGNlcnRhaW4gc2l0dWF0aW9ucyBzbyBkb24ndCByZWxlYXNlIGl0LgorICAgICAgICBzdXBlcihmYWxzZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgY2hhbm5lbFJlYWQwKENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIEZ1bGxIdHRwUmVxdWVzdCBtc2cpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBDaHVua2VkIHRyYW5zZmVyIGVuY29kaW5nIGlzIHVzZWQgdG8gc3RyZWFtIGJhY2sgcmVzdWx0cyBzbyBvbmx5IGFjY2VwdCBIVFRQLzEuMSByZXF1ZXN0cy4KKyAgICAgICAgaWYgKG1zZy5wcm90b2NvbFZlcnNpb24oKSAhPSBIVFRQXzFfMSkgeworICAgICAgICAgICAgSHR0cEhhbmRsZXJVdGlsLnNlbmRFcnJvcihjdHgsIEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVELCAiT25seSBIVFRQLzEuMSBpcyBzdXBwb3J0ZWQuIik7CisgICAgICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCIvZmF2aWNvbi5pY28iLmVxdWFscyhtc2cudXJpKCkpKSB7CisgICAgICAgICAgICBIdHRwSGFuZGxlclV0aWwuc2VuZEVycm9yKGN0eCwgTk9UX0ZPVU5ELCAiR3JlbWxpbiBTZXJ2ZXIgZG9lc24ndCBoYXZlIGEgZmF2aWNvbi5pY28iKTsKKyAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50VXRpbC5yZWxlYXNlKG1zZyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjdHguZmlyZUNoYW5uZWxSZWFkKG1zZyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBSZXF1ZXN0SWRIYW5kbGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFJlcXVlc3RJZEhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQxZDBhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBSZXF1ZXN0SWRIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKKworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbER1cGxleEhhbmRsZXI7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxQcm9taXNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVxdWVzdDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5MYXN0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKworLyoqCisgKiBBIGhhbmRsZXIgdGhhdCBnZW5lcmF0ZXMgYSBSZXF1ZXN0IElEIGZvciB0aGUgaW5jb21pbmcgSFRUUCByZXF1ZXN0IGFuZCBpbmplY3RzIHRoZSBzYW1lIElEIGludG8gdGhlIHJlc3BvbnNlIGhlYWRlci4KKyAqLworQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCitwdWJsaWMgY2xhc3MgSHR0cFJlcXVlc3RJZEhhbmRsZXIgZXh0ZW5kcyBDaGFubmVsRHVwbGV4SGFuZGxlciB7CisgICAgLyoqCisgICAgICogVGhlIGtleSBmb3Igd2hldGhlciBhIHtAbGluayBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlfSBoYXMgYmVlbiBzZW50IGZvciB0aGUgY3VycmVudCByZXNwb25zZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8Qm9vbGVhbj4gSU5fVVNFID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoImluVXNlIik7CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBSRVFVRVNUX0lEX0hFQURFUl9OQU1FID0gIkdyZW1saW4tUmVxdWVzdElkIjsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGNoYW5uZWxSZWFkKENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIE9iamVjdCBtc2cpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAobXNnIGluc3RhbmNlb2YgSHR0cFJlcXVlc3QpIHsKKyAgICAgICAgICAgIGZpbmFsIEJvb2xlYW4gY3VycmVudGx5SW5Vc2UgPSBjdHguY2hhbm5lbCgpLmF0dHIoSU5fVVNFKS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50bHlJblVzZSAhPSBudWxsICYmIGN1cnJlbnRseUluVXNlID09IHRydWUpIHsKKyAgICAgICAgICAgICAgICAvLyBQaXBlbGluaW5nIG5vdCBzdXBwb3J0ZWQgc28ganVzdCBpZ25vcmUgdGhlIHJlcXVlc3QgaWYgYW5vdGhlciByZXF1ZXN0IGFscmVhZHkgYmVpbmcgaGFuZGxlZC4KKyAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3R4LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlJFUVVFU1RfSUQpLnNldChVVUlELnJhbmRvbVVVSUQoKSk7CisgICAgICAgICAgICBjdHguY2hhbm5lbCgpLmF0dHIoSU5fVVNFKS5zZXQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBjdHguZmlyZUNoYW5uZWxSZWFkKG1zZyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZXhjZXB0aW9uQ2F1Z2h0KENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIFRocm93YWJsZSBjYXVzZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGN0eC5jaGFubmVsKCkuYXR0cihJTl9VU0UpLnNldChmYWxzZSk7CisgICAgICAgIHN1cGVyLmV4Y2VwdGlvbkNhdWdodChjdHgsIGNhdXNlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBPYmplY3QgbXNnLCBDaGFubmVsUHJvbWlzZSBwcm9taXNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkgeworICAgICAgICAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gKEh0dHBSZXNwb25zZSkgbXNnOworICAgICAgICAgICAgcmVzcG9uc2UuaGVhZGVycygpLmFkZChSRVFVRVNUX0lEX0hFQURFUl9OQU1FLCBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuUkVRVUVTVF9JRCkuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGlmIChtc2cgaW5zdGFuY2VvZiBMYXN0SHR0cENvbnRlbnQpIHsgLy8gcG9zc2libGUgZm9yIGFuIG9iamVjdCB0byBiZSBib3RoIEh0dHBSZXNwb25zZSBhbmQgTGFzdEh0dHBDb250ZW50LgorICAgICAgICAgICAgY3R4LmNoYW5uZWwoKS5hdHRyKElOX1VTRSkuc2V0KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGN0eC53cml0ZShtc2csIHByb21pc2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2Rlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MDE2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2Rlci5qYXZhCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkZ1bGxIdHRwUmVxdWVzdDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cEhlYWRlck5hbWVzOworaW1wb3J0IGlvLm5ldHR5LnV0aWwuQ2hhcnNldFV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5UZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKK2ltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLk1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5ub2RlLkFycmF5Tm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5ub2RlLk9iamVjdE5vZGU7CitpbXBvcnQgb3JnLmphdmF0dXBsZXMuUGFpcjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOworCitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwTWV0aG9kLlBPU1Q7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1Q7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXMuTUVUSE9EX05PVF9BTExPV0VEOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBIYW5kbGVyVXRpbC5zZW5kRXJyb3I7CisKKy8qKgorICogRGVjb2RlcyB0aGUgY29udGVudHMgb2YgYSB7QGxpbmsgRnVsbEh0dHBSZXF1ZXN0fS4gVGhpcyB3aWxsIGV4dHJhY3QgdGhlIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gZnJvbSB0aGUKKyAqIHtAbGluayBGdWxsSHR0cFJlcXVlc3R9IG9yLCBpZiB1bnN1Y2Nlc3NmdWwsIHdpbGwgZmx1c2ggYW4gZXJyb3IgYmFjay4KKyAqLworQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCitwdWJsaWMgY2xhc3MgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyPEZ1bGxIdHRwUmVxdWVzdD4geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiKC4qKTtxPSguKikiKTsKKworICAgIC8qKgorICAgICAqIFNlcmlhbGl6ZXIgZm9yIHtAY29kZSB0ZXh0L3BsYWlufSB3aGljaCBpcyBhIHNlcmlhbGl6ZXIgZXhjbHVzaXZlIHRvIEhUVFAuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplciB0ZXh0UGxhaW5TZXJpYWxpemVyID0gbmV3IFRleHRQbGFpbk1lc3NhZ2VTZXJpYWxpemVyKCk7CisKKyAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE1lc3NhZ2VTZXJpYWxpemVyPD8+PiBzZXJpYWxpemVyczsKKworICAgIC8qKgorICAgICAqIEEgZ2VuZXJpYyBtYXBwZXIgdG8gZGVjb2RlIGFuIGFwcGxpY2F0aW9uL2pzb24gcmVxdWVzdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisKKworICAgIHB1YmxpYyBIdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyKGZpbmFsIE1hcDxTdHJpbmcsIE1lc3NhZ2VTZXJpYWxpemVyPD8+PiBzZXJpYWxpemVycykgeworICAgICAgICB0aGlzLnNlcmlhbGl6ZXJzID0gc2VyaWFsaXplcnM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgZGVjb2RlKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCByZXEsIGZpbmFsIExpc3Q8T2JqZWN0PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgY3R4LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlJFUVVFU1RfSEVBREVSUykuc2V0KHJlcS5oZWFkZXJzKCkpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBhY2NlcHRNaW1lID0gT3B0aW9uYWwub2ZOdWxsYWJsZShyZXEuaGVhZGVycygpLmdldChIdHRwSGVhZGVyTmFtZXMuQUNDRVBUKSkub3JFbHNlKCJhcHBsaWNhdGlvbi9qc29uIik7CisgICAgICAgIGZpbmFsIFBhaXI8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplciA9IGNob29zZVNlcmlhbGl6ZXIoYWNjZXB0TWltZSk7CisKKyAgICAgICAgaWYgKHJlcS5tZXRob2QoKSAhPSBQT1NUKSB7CisgICAgICAgICAgICBzZW5kRXJyb3IoY3R4LCBNRVRIT0RfTk9UX0FMTE9XRUQsIE1FVEhPRF9OT1RfQUxMT1dFRC50b1N0cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChudWxsID09IHNlcmlhbGl6ZXIpIHsKKyAgICAgICAgICAgIHNlbmRFcnJvcihjdHgsIEJBRF9SRVFVRVNULCBTdHJpbmcuZm9ybWF0KCJubyBzZXJpYWxpemVyIGZvciByZXF1ZXN0ZWQgQWNjZXB0IGhlYWRlcjogJXMiLCBhY2NlcHRNaW1lKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlID0gZ2V0UmVxdWVzdE1lc3NhZ2VGcm9tSHR0cFJlcXVlc3QocmVxLCBzZXJpYWxpemVycyk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB8IFNlcmlhbGl6YXRpb25FeGNlcHRpb24gfCBOdWxsUG9pbnRlckV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgc2VuZEVycm9yKGN0eCwgQkFEX1JFUVVFU1QsIGV4LmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVja2VkIGluIGdldFJlcXVlc3RNZXNzYWdlRnJvbUh0dHBSZXF1ZXN0CisgICAgICAgIGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5zZXQoUGFpci53aXRoKHNlcmlhbGl6ZXIuZ2V0VmFsdWUwKCksIHNlcmlhbGl6ZXIuZ2V0VmFsdWUxKCkpKTsKKyAgICAgICAgb2JqZWN0cy5hZGQocmVxdWVzdE1lc3NhZ2UpOworICAgIH0KKworICAgIHByaXZhdGUgUGFpcjxTdHJpbmcsIE1lc3NhZ2VTZXJpYWxpemVyPD8+PiBjaG9vc2VTZXJpYWxpemVyKGZpbmFsIFN0cmluZyBtaW1lVHlwZSkgeworICAgICAgICBmaW5hbCBMaXN0PFBhaXI8U3RyaW5nLCBEb3VibGU+PiBvcmRlcmVkID0gU3RyZWFtLm9mKG1pbWVUeXBlLnNwbGl0KCIsIikpLm1hcChtZWRpYVR5cGUgLT4geworICAgICAgICAgICAgLy8gcGFyc2Ugb3V0IGVhY2ggbWVkaWFUeXBlIHdpdGggaXRzIHBhcmFtcyAtIGtlZXBpbmcgaXQgc2ltcGxlIGFuZCBqdXN0IGxvb2tpbmcgZm9yICJxdWFsaXR5Ii4gIGlmCisgICAgICAgICAgICAvLyB0aGF0IHZhbHVlIGlzbid0IHRoZXJlLCBkZWZhdWx0IGl0IHRvIDEuMC4gIG5vdCByZWFsbHkgdmFsaWRhdGluZyBoZXJlIHNvIHVzZXJzIGJldHRlciBnZXQgdGhlaXIKKyAgICAgICAgICAgIC8vIGFjY2VwdCBoZWFkZXJzIHN0cmFpZ2h0CisgICAgICAgICAgICBmaW5hbCBNYXRjaGVyIG1hdGNoZXIgPSBwYXR0ZXJuLm1hdGNoZXIobWVkaWFUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiAobWF0Y2hlci5tYXRjaGVzKCkpID8gUGFpci53aXRoKG1hdGNoZXIuZ3JvdXAoMSksIERvdWJsZS5wYXJzZURvdWJsZShtYXRjaGVyLmdyb3VwKDIpKSkgOiBQYWlyLndpdGgobWVkaWFUeXBlLCAxLjApOworICAgICAgICB9KS5zb3J0ZWQoKG8xLCBvMikgLT4gbzIuZ2V0VmFsdWUwKCkuY29tcGFyZVRvKG8xLmdldFZhbHVlMCgpKSkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKKworICAgICAgICBmb3IgKFBhaXI8U3RyaW5nLCBEb3VibGU+IHAgOiBvcmRlcmVkKSB7CisgICAgICAgICAgICAvLyB0aGlzIGlzbid0IHBlcmZlY3QgYXMgaXQgZG9lc24ndCByZWFsbHkgYWNjb3VudCBmb3Igd2lsZGNhcmRzLiAgdGhhdCBsZXZlbCBvZiBjb21wbGV4aXR5IGRvZXNuJ3Qgc2VlbQorICAgICAgICAgICAgLy8gc3VwZXIgdXNlZnVsIGZvciBncmVtbGluIHNlcnZlciByZWFsbHkuCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWNjZXB0ID0gcC5nZXRWYWx1ZTAoKS5lcXVhbHMoIiovKiIpID8gImFwcGxpY2F0aW9uL2pzb24iIDogcC5nZXRWYWx1ZTAoKTsKKyAgICAgICAgICAgIGlmIChzZXJpYWxpemVycy5jb250YWluc0tleShhY2NlcHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBQYWlyLndpdGgoYWNjZXB0LCBzZXJpYWxpemVycy5nZXQoYWNjZXB0KSk7CisgICAgICAgICAgICBlbHNlIGlmIChhY2NlcHQuZXF1YWxzKCJ0ZXh0L3BsYWluIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFpci53aXRoKGFjY2VwdCwgdGV4dFBsYWluU2VyaWFsaXplcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgaHR0cCByZXF1ZXN0IGludG8gYSB7QGxpbmsgUmVxdWVzdE1lc3NhZ2V9LgorICAgICAqIFRoZXJlIGFyZSAyIHBheWxvYWQgdHlwZXMgb3B0aW9ucyBoZXJlLgorICAgICAqIDEuCisgICAgICogICAgIGV4aXN0aW5nIGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jY29ubmVjdGluZy12aWEtaHR0cAorICAgICAqICAgICBpbnRlbmRlZCB0byB1c2Ugd2l0aCBjdXJsLCBwb3N0bWFuLCBldGMuIGJ5IHVzZXJzCisgICAgICogICAgIGJvdGggR0VUIGFuZCBQT1NUCisgICAgICogICAgIENvbnRlbnQtVHlwZSBoZWFkZXIgY2FuIGJlIGVtcHR5IG9yIGFwcGxpY2F0aW9uL2pzb24KKyAgICAgKiAgICAgQWNjZXB0IGhlYWRlciBjYW4gYmUgYW55LCBtb3N0IHVzZWZ1bCBjYW4gYmUgYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjMuMCtqc29uCisgICAgICogICAgIGFuZCBhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb247dHlwZXM9ZmFsc2UKKyAgICAgKiAgICAgUmVxdWVzdCBib2R5IGV4YW1wbGU6IHsgImdyZW1saW4iOiAiZy5WKCkiIH0KKyAgICAgKiAyLgorICAgICAqICAgICBleHBlcmltZW50YWwgcGF5bG9hZCB3aXRoIHNlcmlhbGl6ZWQgUmVxdWVzdE1lc3NhZ2UKKyAgICAgKiAgICAgaW50ZW5kZWQgZm9yIGRyaXZlcnMvR0xWJ3MuIFN1cHBvcnQgb25seSBncmVtbGluLgorICAgICAqICAgICBvbmx5IFBPU1QKKyAgICAgKiAgICAgQ29udGVudC1UeXBlIGlzIGRlZmluZWQgYnkgdXNlZCBzZXJpYWxpemVyLCBleHBlY3RlZCB0eXBlIEdyYXBoU09OIGFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYzLjAranNvbiBvcgorICAgICAqICAgICBHcmFwaEJpbmFyeSBhcHBsaWNhdGlvbi92bmQuZ3JhcGhiaW5hcnktdjEuMC4gVW50eXBlZCBHcmFwaFNPTiBpcyBub3Qgc3VwcG9ydGVkLCBpdCBjYW4ndCBkZXNlcmlhbGl6ZSBwYXJhbWV0ZXJzCisgICAgICogICAgIEFjY2VwdCBoZWFkZXIgY2FuIGJlIGFueS4KKyAgICAgKiAgICAgUmVxdWVzdCBib2R5IGNvbnRhaW5zIHNlcmlhbGl6ZWQgUmVxdWVzdE1lc3NhZ2UKKyAgICAgKi8KKyAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgZ2V0UmVxdWVzdE1lc3NhZ2VGcm9tSHR0cFJlcXVlc3QoZmluYWwgRnVsbEh0dHBSZXF1ZXN0IHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIE1lc3NhZ2VTZXJpYWxpemVyPD8+PiBzZXJpYWxpemVycykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgY29udGVudFR5cGUgPSByZXF1ZXN0LmhlYWRlcnMoKS5nZXQoSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfVFlQRSk7CisKKyAgICAgICAgaWYgKGNvbnRlbnRUeXBlICE9IG51bGwgJiYgIWNvbnRlbnRUeXBlLmVxdWFscygiYXBwbGljYXRpb24vanNvbiIpICYmIHNlcmlhbGl6ZXJzLmNvbnRhaW5zS2V5KGNvbnRlbnRUeXBlKSkgeworICAgICAgICAgICAgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciA9IHNlcmlhbGl6ZXJzLmdldChjb250ZW50VHlwZSk7CisgICAgICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IHJlcXVlc3QuY29udGVudCgpOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBjb25kaXRpb25hbGx5SW5zZXJ0RGVmYXVsdEcoc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlcXVlc3QoYnVmZmVyKSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gZGVzZXJpYWxpemUgcmVxdWVzdCB1c2luZzogIiArIHNlcmlhbGl6ZXIuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCksIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjb25kaXRpb25hbGx5SW5zZXJ0RGVmYXVsdEcoZ2V0UmVxdWVzdE1lc3NhZ2VGcm9tSHR0cFJlcXVlc3QocmVxdWVzdCkpOworICAgIH0KKworICAgIHByaXZhdGUgUmVxdWVzdE1lc3NhZ2UgY29uZGl0aW9uYWxseUluc2VydERlZmF1bHRHKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB7CisgICAgICAgIC8vIFRoZSBSZXF1ZXN0TWVzc2FnZSBzaG91bGQgZGVmYXVsdCBBUkdTX0cgdG8gImciIGFjY29yZGluZyB0byB0aGUgSFRUUCBBUEkuIEhvd2V2ZXIsIHRoaXMgd29uJ3QgYWN0dWFsbHkgd29yaworICAgICAgICAvLyBpZiB0aGUgbGFuZ3VhZ2UgaXMgZ3JlbWxpbi1ncm9vdnkgc2luY2UgdGhhdCBhbGxvd3MgYW55IHN0YXRlbWVudC4gU28sIG9ubHkgYWRkIGluIGEgZGVmYXVsdCBpZiB0aGUgbGFuZ3VhZ2UKKyAgICAgICAgLy8gaXMgZ3JlbWxpbi1sYW5nLgorICAgICAgICBSZXF1ZXN0TWVzc2FnZSBmaXhlZFJlcXVlc3RNZXNzYWdlID0gcmVxdWVzdE1lc3NhZ2U7CisgICAgICAgIGlmICgocmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGRPckRlZmF1bHQoVG9rZW5zLkFSR1NfTEFOR1VBR0UsICIiKS5lcXVhbHMoImdyZW1saW4tbGFuZyIpKSAmJgorICAgICAgICAgICAgICAgIChyZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZChUb2tlbnMuQVJHU19HKSA9PSBudWxsKSkgeworICAgICAgICAgICAgZml4ZWRSZXF1ZXN0TWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlLmZyb20ocmVxdWVzdE1lc3NhZ2UpLmFkZEcoImciKS5jcmVhdGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZml4ZWRSZXF1ZXN0TWVzc2FnZTsKKyAgICB9CisKKyAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlIGdldFJlcXVlc3RNZXNzYWdlRnJvbUh0dHBSZXF1ZXN0KGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CisgICAgICAgIGZpbmFsIEpzb25Ob2RlIGJvZHk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBib2R5ID0gbWFwcGVyLnJlYWRUcmVlKHJlcXVlc3QuY29udGVudCgpLnRvU3RyaW5nKENoYXJzZXRVdGlsLlVURl84KSk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYm9keSBjb3VsZCBub3QgYmUgcGFyc2VkIiwgaW9lKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIHNjcmlwdE5vZGUgPSBib2R5LmdldChUb2tlbnMuQVJHU19HUkVNTElOKTsKKyAgICAgICAgaWYgKG51bGwgPT0gc2NyaXB0Tm9kZSkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm8gZ3JlbWxpbiBzY3JpcHQgc3VwcGxpZWQiKTsKKworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChzY3JpcHROb2RlLmFzVGV4dCgpKTsKKworICAgICAgICBmaW5hbCBKc29uTm9kZSBiaW5kaW5nc05vZGUgPSBib2R5LmdldChUb2tlbnMuQVJHU19CSU5ESU5HUyk7CisgICAgICAgIGlmIChiaW5kaW5nc05vZGUgIT0gbnVsbCAmJiAhYmluZGluZ3NOb2RlLmlzT2JqZWN0KCkpCisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJiaW5kaW5ncyBtdXN0IGJlIGEgTWFwIik7CisKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgaWYgKGJpbmRpbmdzTm9kZSAhPSBudWxsKQorICAgICAgICAgICAgYmluZGluZ3NOb2RlLmZpZWxkcygpLmZvckVhY2hSZW1haW5pbmcoa3YgLT4gYmluZGluZ3MucHV0KGt2LmdldEtleSgpLCBmcm9tSnNvbk5vZGUoa3YuZ2V0VmFsdWUoKSkpKTsKKyAgICAgICAgYnVpbGRlci5hZGRCaW5kaW5ncyhiaW5kaW5ncyk7CisKKyAgICAgICAgZmluYWwgSnNvbk5vZGUgZ05vZGUgPSBib2R5LmdldChUb2tlbnMuQVJHU19HKTsKKyAgICAgICAgaWYgKG51bGwgIT0gZ05vZGUpIGJ1aWxkZXIuYWRkRyhnTm9kZS5hc1RleHQoKSk7CisKKyAgICAgICAgZmluYWwgSnNvbk5vZGUgbGFuZ3VhZ2VOb2RlID0gYm9keS5nZXQoVG9rZW5zLkFSR1NfTEFOR1VBR0UpOworICAgICAgICBidWlsZGVyLmFkZExhbmd1YWdlKChudWxsID09IGxhbmd1YWdlTm9kZSkgPyAiZ3JlbWxpbi1sYW5nIiA6IGxhbmd1YWdlTm9kZS5hc1RleHQoKSk7CisKKyAgICAgICAgZmluYWwgSnNvbk5vZGUgY2h1bmtTaXplTm9kZSA9IGJvZHkuZ2V0KFRva2Vucy5BUkdTX0JBVENIX1NJWkUpOworICAgICAgICBpZiAobnVsbCAhPSBjaHVua1NpemVOb2RlKSBidWlsZGVyLmFkZENodW5rU2l6ZShjaHVua1NpemVOb2RlLmFzSW50KCkpOworCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIHRpbWVvdXRNc05vZGUgPSBib2R5LmdldChUb2tlbnMuVElNRU9VVF9NUyk7CisgICAgICAgIGlmIChudWxsICE9IHRpbWVvdXRNc05vZGUpIGJ1aWxkZXIuYWRkVGltZW91dE1pbGxpcyh0aW1lb3V0TXNOb2RlLmFzTG9uZygpKTsKKworICAgICAgICBmaW5hbCBKc29uTm9kZSBtYXRQcm9wc05vZGUgPSBib2R5LmdldChUb2tlbnMuQVJHU19NQVRFUklBTElaRV9QUk9QRVJUSUVTKTsKKyAgICAgICAgaWYgKG51bGwgIT0gbWF0UHJvcHNOb2RlKSBidWlsZGVyLmFkZE1hdGVyaWFsaXplUHJvcGVydGllcyhtYXRQcm9wc05vZGUuYXNUZXh0KCkpOworCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIHR4SWROb2RlID0gYm9keS5nZXQoVG9rZW5zLkFSR1NfVFJBTlNBQ1RJT05fSUQpOworICAgICAgICBpZiAobnVsbCAhPSB0eElkTm9kZSkgYnVpbGRlci5hZGRUcmFuc2FjdGlvbklkKHR4SWROb2RlLmFzVGV4dCgpKTsKKworICAgICAgICByZXR1cm4gYnVpbGRlci5jcmVhdGUoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIE9iamVjdCBmcm9tSnNvbk5vZGUoZmluYWwgSnNvbk5vZGUgbm9kZSkgeworICAgICAgICBpZiAobm9kZS5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBlbHNlIGlmIChub2RlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICAgICAgZmluYWwgT2JqZWN0Tm9kZSBvYmplY3ROb2RlID0gKE9iamVjdE5vZGUpIG5vZGU7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxTdHJpbmc+IGl0ZXJhdG9yID0gb2JqZWN0Tm9kZS5maWVsZE5hbWVzKCk7CisgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGl0ZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgICAgICBtYXAucHV0KGtleSwgZnJvbUpzb25Ob2RlKG9iamVjdE5vZGUuZ2V0KGtleSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYXA7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5Tm9kZSBhcnJheU5vZGUgPSAoQXJyYXlOb2RlKSBub2RlOworICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PE9iamVjdD4gYXJyYXkgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlOb2RlLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXJyYXkuYWRkKGZyb21Kc29uTm9kZShhcnJheU5vZGUuZ2V0KGkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0Zsb2F0aW5nUG9pbnROdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLmFzRG91YmxlKCk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNJbnRlZ3JhbE51bWJlcigpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXNMb25nKCk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICByZXR1cm4gbm9kZS5hc0Jvb2xlYW4oKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIG5vZGUuYXNUZXh0KCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBVc2VyQWdlbnRIYW5kbGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFVzZXJBZ2VudEhhbmRsZXIuamF2YQppbmRleCA1NjNmMDJiLi4yNmU3NWFkIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFVzZXJBZ2VudEhhbmRsZXIuamF2YQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFVzZXJBZ2VudEhhbmRsZXIuamF2YQpAQCAtMjgsOCArMjgsNiBAQAogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5Xc1VzZXJBZ2VudEhhbmRsZXIuVVNFUl9BR0VOVF9IRUFERVJfTkFNRTsKLQogcHVibGljIGNsYXNzIEh0dHBVc2VyQWdlbnRIYW5kbGVyIGV4dGVuZHMgQ2hhbm5lbEluYm91bmRIYW5kbGVyQWRhcHRlciB7CiAgICAgLyoqCiAgICAgICogVGhpcyBjb25zdGFudCBjYXBzIHRoZSBudW1iZXIgb2YgdW5pcXVlIHVzZXIgYWdlbnRzIHdoaWNoIHdpbGwgYmUgdHJhY2tlZCBpbiB0aGUgbWV0cmljcy4gQW55IG5ldyB1bmlxdWUKQEAgLTM4LDYgKzM2LDkgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1VTRVJfQUdFTlRfTUVUUklDUyA9IDEwMDAwOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEh0dHBVc2VyQWdlbnRIYW5kbGVyLmNsYXNzKTsKKworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUl9BR0VOVF9IRUFERVJfTkFNRSA9ICJVc2VyLUFnZW50IjsKKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFN0cmluZz4gVVNFUl9BR0VOVF9BVFRSX0tFWSA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKFVTRVJfQUdFTlRfSEVBREVSX05BTUUpOwogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvTXVsdGlUYXNrU2Vzc2lvbi5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL011bHRpVGFza1Nlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA5ZmIyMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvTXVsdGlUYXNrU2Vzc2lvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmVuZ2luZS5HcmVtbGluRXhlY3V0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzLkdyb292eUNvbXBpbGVyR3JlbWxpblBsdWdpbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0RW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlRyYW5zYWN0aW9uOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZheC5zY3JpcHQuQmluZGluZ3M7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5CbG9ja2luZ1F1ZXVlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRNYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkxpbmtlZEJsb2NraW5nUXVldWU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuUmVqZWN0ZWRFeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3Nvci5DT05GSUdfR0xPQkFMX0ZVTkNUSU9OX0NBQ0hFX0VOQUJMRUQ7Ci0KLS8qKgotICogQSB7QGxpbmsgU2Vzc2lvbn0gaW1wbGVtZW50YXRpb24gdGhhdCBxdWV1ZXMgdGFza3MgZ2l2ZW4gdG8gaXQgYW5kIGV4ZWN1dGVzIHRoZW0gaW4gYSBzZXJpYWwgZmFzaGlvbiB3aXRoaW4gdGhlCi0gKiBzYW1lIHRocmVhZCB3aGljaCB0aHVzIGFsbG93cyBtdWx0aXBsZSB0YXNrcyB0byBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbi4gVGhlIGZpcnN0IHtAbGluayBTZXNzaW9uVGFza30KLSAqIHRvIGV4ZWN1dGUgaXMgc3VwcGxpZWQgb24gdGhlIGNvbnN0cnVjdG9yIGFuZCBhZGRpdGlvbmFsIG9uZXMgbWF5IGJlIGFkZGVkIGFzIHRoZXkgYXJyaXZlIHdpdGgKLSAqIHtAbGluayAjc3VibWl0VGFzayhTZXNzaW9uVGFzayl9IHdoZXJlIHRoZXkgd2lsbCBiZSBhZGRlZCB0byBhIHF1ZXVlIHdoZXJlIHRoZXkgd2lsbCBhd2FpdCBleGVjdXRpb24gaW4gdGhlIHRocmVhZAotICogYm91bmQgdG8gdGhpcyBzZXNzaW9uLgotICoKLSAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIG5vdCByZXBsYWNlZC4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBjbGFzcyBNdWx0aVRhc2tTZXNzaW9uIGV4dGVuZHMgQWJzdHJhY3RTZXNzaW9uIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoTXVsdGlUYXNrU2Vzc2lvbi5jbGFzcyk7Ci0gICAgcHJvdGVjdGVkIGZpbmFsIEJsb2NraW5nUXVldWU8U2Vzc2lvblRhc2s+IHF1ZXVlOwotICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBlbmRpbmcgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2Ugc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotICAgIHByaXZhdGUgZmluYWwgR3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXIgc2NyaXB0RW5naW5lTWFuYWdlcjsKLSAgICBwcml2YXRlIFNjaGVkdWxlZEZ1dHVyZTw/PiByZXF1ZXN0Q2FuY2VsRnV0dXJlOwotICAgIHByaXZhdGUgQmluZGluZ3MgYmluZGluZ3M7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTZXNzaW9uVGFzayBpbml0aWFsU2Vzc2lvblRhc2s7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IHtAY29kZSBNdWx0aVRhc2tTZXNzaW9ufSBvYmplY3QgcHJvdmlkaW5nIHRoZSBpbml0aWFsIHN0YXJ0aW5nIHtAbGluayBTZXNzaW9uVGFza30gdGhhdCBnZXRzCi0gICAgICogZXhlY3V0ZWQgYnkgdGhlIHNlc3Npb24gd2hlbiBpdCBzdGFydHMuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5pdGlhbFNlc3Npb25UYXNrIFRoZSB0YXNrcyB0aGF0IHN0YXJ0cyB0aGUgc2Vzc2lvbi4KLSAgICAgKiBAcGFyYW0gc2Vzc2lvbklkIFRoZSBpZCBvZiB0aGUgc2Vzc2lvbgotICAgICAqIEBwYXJhbSBzZXNzaW9ucyBUaGUgc2Vzc2lvbiBpZCB0byB7QGxpbmsgU2Vzc2lvbn0gaW5zdGFuY2VzIG1hcHBpbmcKLSAgICAgKi8KLSAgICBwdWJsaWMgTXVsdGlUYXNrU2Vzc2lvbihmaW5hbCBTZXNzaW9uVGFzayBpbml0aWFsU2Vzc2lvblRhc2ssIGZpbmFsIFN0cmluZyBzZXNzaW9uSWQsCi0gICAgICAgICAgICAgICAgICAgICBmaW5hbCBDb25jdXJyZW50TWFwPFN0cmluZywgU2Vzc2lvbj4gc2Vzc2lvbnMpIHsKLSAgICAgICAgc3VwZXIoaW5pdGlhbFNlc3Npb25UYXNrLCBzZXNzaW9uSWQsIGZhbHNlLCBzZXNzaW9ucyk7Ci0KLSAgICAgICAgdGhpcy5pbml0aWFsU2Vzc2lvblRhc2sgPSBpbml0aWFsU2Vzc2lvblRhc2s7Ci0gICAgICAgIHF1ZXVlID0gbmV3IExpbmtlZEJsb2NraW5nUXVldWU8Pihpbml0aWFsU2Vzc2lvblRhc2suZ2V0U2V0dGluZ3MoKS5tYXhTZXNzaW9uVGFza1F1ZXVlU2l6ZSk7Ci0KLSAgICAgICAgLy8gdXNpbmcgYSBnbG9iYWwgZnVuY3Rpb24gY2FjaGUgaXMgY2hlYXBlciB0aGFuIGNyZWF0aW5nIGEgbmV3IG9uIHBlciBzZXNzaW9uIGVzcGVjaWFsbHkgaWYgeW91IGhhdmUgdG8KLSAgICAgICAgLy8gY3JlYXRlIGEgbG90IG9mIHNlc3Npb25zLiBpdCB3aWxsIGdlbmVyYXRlIGEgdG9uIG9mIHRocm93LWF3YXkgb2JqZWN0cy4gbW9zdGx5IGtlZXBpbmcgdGhlIG9wdGlvbiBvcGVuCi0gICAgICAgIC8vIHRvIG5vdCB1c2UgaXQgdG8gcHJlc2VydmUgdGhlIGFiaWxpdHkgdG8gdXNlIHRoZSBvbGQgZnVuY3Rpb25hbGl0eSBpZiB3YW50ZWQgb3IgaWYgdGhlcmUgaXMgc29tZSBzcGVjaWZpYwotICAgICAgICAvLyB1c2UgY2FzZSB3aXRoIHNlc3Npb25zIHRoYXQgbmVlZHMgaXQuIGlmIHdlIHdhbnRlZCB0aGlzIGNvdWxkIGV2ZW50dWFsbHkgYmVjb21lIGEgcGVyLXJlcXVlc3Qgb3B0aW9uCi0gICAgICAgIC8vIHNvIHRoYXQgdGhlIGNsaWVudCBjb3VsZCBjb250cm9sIGl0IGFzIG5lY2Vzc2FyeSBhbmQgZ2V0IHNjcmlwdGVuZ2luZSBpc29sYXRpb24gaWYgdGhleSBuZWVkIGl0LgotICAgICAgICBpZiAoaW5pdGlhbFNlc3Npb25UYXNrLmdldFNldHRpbmdzKCkudXNlQ29tbW9uRW5naW5lRm9yU2Vzc2lvbnMpCi0gICAgICAgICAgICBzY3JpcHRFbmdpbmVNYW5hZ2VyID0gaW5pdGlhbFNlc3Npb25UYXNrLmdldEdyZW1saW5FeGVjdXRvcigpLmdldFNjcmlwdEVuZ2luZU1hbmFnZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2NyaXB0RW5naW5lTWFuYWdlciA9IGluaXRpYWxpemVHcmVtbGluRXhlY3V0b3IoaW5pdGlhbFNlc3Npb25UYXNrKS5nZXRTY3JpcHRFbmdpbmVNYW5hZ2VyKCk7Ci0KLSAgICAgICAgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlID0gaW5pdGlhbFNlc3Npb25UYXNrLmdldFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSgpOwotCi0gICAgICAgIC8vIHdvdWxkIGJlIG9kZCBpZiB0aGlzIHRvc3NlZCBhbiBleGNlcHRpb24gYmVjYXVzZSBvbiBjb25zdHJ1Y3Rpb24gdGhlIHF1ZXVlIHNob3VsZCBiZSBlbXB0eSwKLSAgICAgICAgLy8gYnV0IGxldCdzIGhhbmRsZSBpdCBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIGlmIGl0IGhhZCBiZWVuIHJlamVjdGVkIGJ5IHRoZSBxdWV1ZSBpdHNlbGYgYnV0IHB1dCB1cAotICAgICAgICAvLyBhbiBhZGRpdGlvbmFsIGxvZyBiZWNhdXNlIHNvbWV0aGluZyB3b3VsZCBiZSByYXRoZXIgb2ZmIGhlcmUgaWYgd2UgaGl0IHRoaXMgY29uZGl0aW9uCi0gICAgICAgIGlmICghc3VibWl0VGFzayhpbml0aWFsU2Vzc2lvblRhc2spKSB7Ci0gICAgICAgICAgICBsb2dnZXIuZXJyb3IoIlRhc2sge30gcmVqZWN0ZWQgb24gY3JlYXRpb24gb2YgdGhlIHt9IGZvciBzZXNzaW9uIHt9IiwKLSAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkuZ2V0UmVxdWVzdElkKCksIHRoaXMuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgIGdldFNlc3Npb25JZCgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCJUYXNrICVzIHJlamVjdGVkIGZyb20gc2Vzc2lvbiAlcyIsCi0gICAgICAgICAgICAgICAgICAgIGluaXRpYWxTZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpLmdldFJlcXVlc3RJZCgpLCBnZXRTZXNzaW9uSWQoKSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUmVqZWN0ZWRFeGVjdXRpb25FeGNlcHRpb24obXNnKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNjcmlwdCBlbmdpbmUgc3BlY2lmaWMgdG8gdGhpcyBzZXNzaW9uIHdoaWNoIGlzIGRlcGVuZGVudCBvbiB0aGUKLSAgICAgKiB7QGxpbmsgU2V0dGluZ3MjdXNlQ29tbW9uRW5naW5lRm9yU2Vzc2lvbnN9IGNvbmZpZ3VyYXRpb24uCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEdyZW1saW5TY3JpcHRFbmdpbmUgZ2V0U2NyaXB0RW5naW5lKGZpbmFsIFNlc3Npb25UYXNrIHNlc3Npb25UYXNrLCBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UpIHsKLSAgICAgICAgcmV0dXJuIHNjcmlwdEVuZ2luZU1hbmFnZXIuZ2V0RW5naW5lQnlOYW1lKGxhbmd1YWdlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FjY2VwdGluZ1Rhc2tzKCkgewotICAgICAgICByZXR1cm4gIWVuZGluZy5nZXQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZW5kVGltZW91dFJlc3BvbnNlRm9yVW5jb21tZW5jZWRUYXNrKCkgewotICAgICAgICB0aGlzLmNsb3NlKCk7IC8vIE5lZWQgdG8gY2xvc2UgYXMgdGhpcyB0YXNrIHdvbid0IGV2ZXIgc3RhcnQgdG8gcnVuLCBzbyBpdCBzaG91bGQganVzdCBlbmQuCi0gICAgICAgIGluaXRpYWxTZXNzaW9uVGFzay5zZW5kVGltZW91dFJlc3BvbnNlKAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkEgc2Vzc2lvbiB0aW1lb3V0IG9jY3VycmVkIGR1cmluZyB0cmF2ZXJzYWwgZXZhbHVhdGlvbiBvZiBbJXNdIC0gY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgbGltaXQgZ2l2ZW4gdG8gc2Vzc2lvbkxpZmV0aW1lVGltZW91dCIsIGluaXRpYWxTZXNzaW9uVGFzay5nZXRSZXF1ZXN0TWVzc2FnZSgpKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc3VibWl0VGFzayhmaW5hbCBTZXNzaW9uVGFzayBzZXNzaW9uVGFzaykgdGhyb3dzIFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBpc0FjY2VwdGluZ1Rhc2tzKCkgJiYgcXVldWUuYWRkKHNlc3Npb25UYXNrKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlzZSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIlRhc2sgJXMgcmVqZWN0ZWQgZnJvbSBzZXNzaW9uICVzIiwKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblRhc2suZ2V0UmVxdWVzdE1lc3NhZ2UoKS5nZXRSZXF1ZXN0SWQoKSwgZ2V0U2Vzc2lvbklkKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uKG1zZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHNlc3Npb25UYXNrU3RhcnRlZC5zZXQodHJ1ZSk7Ci0KLSAgICAgICAgLy8gYWxsb3cgdGhlIFNlc3Npb24gdG8ga25vdyBhYm91dCB0aGUgdGhyZWFkIHRoYXQgaXMgcnVubmluZyBpdCB3aGljaCB3aWxsIGJlIGEgdGhyZWFkIGZyb20gdGhlIGdyZW1saW5Qb29sCi0gICAgICAgIC8vIHRoZSB0aHJlYWQgcmVhbGx5IG9ubHkgaGFzIHJlbGV2YW5jZSBvbmNlIHRoZSBzZXNzaW9uIGhhcyBzdGFydGVkLiB0aGlzIHRocmVhZCBpcyB0aGVuIGhlbGQgYmVsb3cgaW4gdGhlCi0gICAgICAgIC8vIHdoaWxlKCkgbG9vcCBhd2FpdGluZyBpdGVtcyB0byBhcnJpdmUgb24gdGhlIHJlcXVlc3QgcXVldWUuIGl0IHdpbGwgaG9sZCB1bnRpbCB0aGUgc2Vzc2lvbiBpcyBwcm9wZXJseQotICAgICAgICAvLyBjbG9zZWQgYnkgdGhlIGNsaWVudCBvciB0aHJvdWdoIGludGVycnVwdGlvbi9lcnJvcgotICAgICAgICB0aGlzLnNlc3Npb25UaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotCi0gICAgICAgIC8vIHRoZXJlIG11c3QgYmUgb25lIGl0ZW0gaW4gdGhlIHF1ZXVlIGF0IGxlYXN0IHNpbmNlIGFkZFRhc2soKSBnZXRzIGNhbGxlZCBiZWZvcmUgdGhlIHdvcmtlcgotICAgICAgICAvLyBpcyBldmVyIHN0YXJ0ZWQKLSAgICAgICAgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2sgPSBxdWV1ZS5wb2xsKCk7Ci0gICAgICAgIGlmIChudWxsID09IHNlc3Npb25UYXNrKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJXb3JrZXIgaGFzIG5vIGluaXRpYWwgY29udGV4dCBmb3Igc2Vzc2lvbjogJXMiLCBnZXRTZXNzaW9uSWQoKSkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzdGFydFRyYW5zYWN0aW9uKHNlc3Npb25UYXNrKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gc2NoZWR1bGUgdGltZW91dCBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdCBmcm9tIHRoZSBxdWV1ZQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHNldG8gPSBzZXNzaW9uVGFzay5nZXRSZXF1ZXN0VGltZW91dCgpOwotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FuY2VsRnV0dXJlID0gc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLnNjaGVkdWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IHRoaXMudHJpZ2dlclRpbWVvdXQoc2V0bywgZmFsc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldG8sIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBzdG9wIHByb2Nlc3Npbmcgc3R1ZmYgaW4gdGhlIHF1ZXVlIGlmIHRoaXMgc2Vzc2lvbiBpc24ndCBjb25maWd1cmVkIHRvIGhvbGQgc3RhdGUgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAvLyBleGNlcHRpb25zIChpLmUuIHRoZSBvbGQgT3BQcm9jZXNzb3Igd2F5KSBvciBpZiB0aGlzIHNlc3Npb24gaXMgY2xvc2luZyBkb3duIGJ5IGNlcnRhaW4gZGVhdGgKLSAgICAgICAgICAgICAgICAgICAgLy8gKGkuZS4gY2hhbm5lbCBjbG9zZSBvciBsaWZldGltZSBzZXNzaW9uIHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzKHNlc3Npb25UYXNrKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoU2Vzc2lvbkV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24gfHwgY2xvc2VSZWFzb24uZ2V0KCkgPT0gQ2xvc2VSZWFzb24uQ0hBTk5FTF9DTE9TRUQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVJlYXNvbi5nZXQoKSA9PSBDbG9zZVJlYXNvbi5TRVNTSU9OX1RJTUVPVVQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGNsb3NlIHJlYXNvbiBhcyB3ZSBhcmUgbWFpbnRhaW5pbmcgc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUmVhc29uLnNldChudWxsKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXguZ2V0TWVzc2FnZSgpLCBleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uVGFzay53cml0ZUFuZEZsdXNoKGV4LmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHdvcmsgaXMgZG9uZSB3aXRoaW4gdGhlIHRpbWVvdXQgcGVyaW9kIHNvIGNhbmNlbCBpdAotICAgICAgICAgICAgICAgICAgICBjYW5jZWxSZXF1ZXN0VGltZW91dCgpOwotCi0gICAgICAgICAgICAgICAgICAgIHNlc3Npb25UYXNrID0gcXVldWUudGFrZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIHN0b3BBY2NlcHRpbmdSZXF1ZXN0cygpOwotCi0gICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgY29udGV4dCBnZXRzIGl0cyBleGNlcHRpb24gaGFuZGxlZC4uLgotICAgICAgICAgICAgICAgIGhhbmRsZUV4Y2VwdGlvbihzZXNzaW9uVGFzaywgZXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChTZXNzaW9uRXhjZXB0aW9uIHJleGV4KSB7Ci0gICAgICAgICAgICAvLyBpZiB0aGUgY2xvc2UgcmVhc29uIGlzbid0IGFscmVhZHkgc2V0IHRoZW4gdGhpbmdzIHN0b3BwZWQgZHVyaW5nIGdyZW1saW4gZXhlY3V0aW9uIHNvbWV3aGVyZSBhbmQgbm90Ci0gICAgICAgICAgICAvLyBtb3JlIGV4dGVybmFsIGlzc3VlcyBsaWtlIGNoYW5uZWwgY2xvc2Ugb3IgdGltZW91dHMuCi0gICAgICAgICAgICBjbG9zZVJlYXNvbi5jb21wYXJlQW5kU2V0KG51bGwsIENsb3NlUmVhc29uLlBST0NFU1NJTkdfRVhDRVBUSU9OKTsKLQotICAgICAgICAgICAgLy8gcmVtYWluaW5nIHdvcmsgaXRlbXMgaW4gdGhlIHF1ZXVlIGFyZSBpZ25vcmVkIHNpbmNlIHRoaXMgd29ya2VyIGlzIGNsb3NpbmcuIG11c3Qgc2VuZAotICAgICAgICAgICAgLy8gYmFjayBzb21lIHNvcnQgb2YgcmVzcG9uc2UgdG8gc2F0aXNmeSB0aGUgY2xpZW50LiB3cml0ZUFuZEZsdXNoIGNvZGUgaXMgZGlmZmVyZW50IHRoYW4KLSAgICAgICAgICAgIC8vIHRoZSBSZXNwb25zZU1lc3NhZ2UgYXMgd2UgZG9uJ3Qgd2FudCB0aGUgbWVzc2FnZSB0byBiZSAiZmluYWwiIGZvciB0aGUgQ29udGV4dC4gdGhhdAotICAgICAgICAgICAgLy8gc3RhdHVzIG11c3QgYmUgcmVzZXJ2ZWQgZm9yIHRoZSBtZXNzYWdlIHRoYXQgY2F1c2VkIHRoZSBlcnJvcgotICAgICAgICAgICAgZm9yIChTZXNzaW9uVGFzayBzdCA6IHF1ZXVlKSB7Ci0gICAgICAgICAgICAgICAgc3Qud3JpdGUoUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCwgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHN0LmdldFJlcXVlc3RNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFuIGVhcmxpZXIgcmVxdWVzdCBbJXNdIGZhaWxlZCBwcmlvciB0byB0aGlzIG9uZSBoYXZpbmcgYSBjaGFuY2UgdG8gZXhlY3V0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25UYXNrLmdldFJlcXVlc3RNZXNzYWdlKCkuZ2V0UmVxdWVzdElkKCkpKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBzaG91bGQgdHJpZ2dlciBhIHJvbGxiYWNrIGluIHRoZSBzZXNzaW9uLiBhIG1vcmUgZm9jdXNlZCByb2xsYmFjayBtYXkgaGF2ZSBvY2N1cnJlZAotICAgICAgICAgICAgLy8gZHVyaW5nIHByb2Nlc3MoKSBhbmQgdGhlIHJlbGF0ZWQgcmVzdWx0IGl0ZXJhdGlvbiBJRiB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHdhcyBlbmFibGVkIG9uCi0gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdAotICAgICAgICAgICAgY2xvc2VUcmFuc2FjdGlvblNhZmVseShUcmFuc2FjdGlvbi5TdGF0dXMuUk9MTEJBQ0spOwotCi0gICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjb250ZXh0IGNvdWxkIGFscmVhZHkgYmUgY29tcGxldGVkIHdpdGggU1VDQ0VTUyBhbmQgd2UncmUganVzdCB3YWl0aW5nIGZvciBhbm90aGVyCi0gICAgICAgICAgICAvLyBvbmUgdG8gc2hvdyB1cCB3aGlsZSBhIHRpbWVvdXQgb2NjdXJzIG9yIHRoZSBjaGFubmVsIGNsb3Nlcy4gaW4gdGhlc2UgY2FzZXMsIHRoaXMgd291bGQgYmUgYSB2YWxpZAotICAgICAgICAgICAgLy8gY2xvc2UgaW4gYWxsIGxpa2VsaWhvb2Qgc28gdGhlcmUncyBubyByZWFzb24gdG8gbG9nIG9yIGFsZXJ0IHRoZSBjbGllbnQgYXMgdGhlIGNsaWVudCBhbHJlYWR5IGhhcwotICAgICAgICAgICAgLy8gdGhlIGJlc3QgYW5zd2VyCi0gICAgICAgICAgICBpZiAoIXNlc3Npb25UYXNrLmlzRmluYWxSZXNwb25zZVdyaXR0ZW4oKSkgewotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKHJleGV4LmdldE1lc3NhZ2UoKSwgcmV4ZXgpOwotICAgICAgICAgICAgICAgIHNlc3Npb25UYXNrLndyaXRlKHJleGV4LmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBub3JtYWwgZW5kIHRvIHRoZSBzZXNzaW9uIG9yIGlmIHRoZXJlIGlzIHNvbWUgZ2VuZXJhbCBwcm9jZXNzaW5nIGV4Y2VwdGlvbiB3aGljaCB0YW5rcwotICAgICAgICAgICAgLy8gdGhlIGVudGlyZSBzZXNzaW9uIG9yIGlmIHRoZSBzZXNzaW9uIGxpZmUgdGltZW91dCBpcyBleGNlZWRlZCB0aGVuIHRoZSAgc2Vzc2lvbiBuZWVkcyB0byBiZSByZW1vdmVkCi0gICAgICAgICAgICAvLyBhbmQgZXZlcnl0aGluZyBjbGVhbmVkIHVwCi0gICAgICAgICAgICBpZiAoY2xvc2VSZWFzb24uY29tcGFyZUFuZFNldChudWxsLCBDbG9zZVJlYXNvbi5FWElUX1BST0NFU1NJTkcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlUmVhc29uLmdldCgpID09IENsb3NlUmVhc29uLlBST0NFU1NJTkdfRVhDRVBUSU9OIHx8Ci0gICAgICAgICAgICAgICAgICAgIGNsb3NlUmVhc29uLmdldCgpID09IENsb3NlUmVhc29uLlNFU1NJT05fVElNRU9VVCkgewotICAgICAgICAgICAgICAgIGNsb3NlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGUgc2Vzc2lvbiBpcyBub3cgaW4gYSBzdGF0ZSB3aGVyZSBpdCBpcyBubyBsb25nZXIgaW4gdGhlIHNldCBvZiBjdXJyZW50IHNlc3Npb25zIHNvIGZsdXNoCi0gICAgICAgICAgICAgICAgLy8gcmVtYWluaW5nIG1lc3NhZ2VzIHRvIHRoZSB0cmFuc3BvcnQsIGlmIGFueS4gdGhlIHJlbWFpbmluZyBtZXNzYWdlIHNob3VsZCBiZSBmYWlsdXJlcyBmcm9tCi0gICAgICAgICAgICAgICAgLy8gdGhlIFNlc3Npb25FeGNlcHRpb24gaW4gdGhlIGNhdGNoLiB0aGlzIHByZXZlbnRzIGFuIHVubGlrZWx5IGNhc2Ugd2hlcmUgYSBmYXN0IGNsaWVudCBjYW4KLSAgICAgICAgICAgICAgICAvLyBnZXQgYWhlYWQgb2YgdGhlIHNlcnZlciBhbmQgc3RhcnQgdG8gc2VuZCBtZXNzYWdlcyB0byBhIHRlY2huaWNhbGx5IGVycm9yZWQgb3V0IHNlc3Npb24uIHRoYXQKLSAgICAgICAgICAgICAgICAvLyBpbiBpdHNlbGYgaXMgbm90IG5lY2Vzc2FyaWx5IGJhZCBidXQgaXQgbWFrZXMgdGVzdHMgZmFpbCBzb21ldGltZXMgYmVjYXVzZSB0aGUgdGVzdHMgYXJlCi0gICAgICAgICAgICAgICAgLy8gZGVzaWduZWQgdG8gYXNzZXJ0IGluIHRoZSBzYW1lIGZhc2hpb24gZm9yIE9wUHJvY2Vzc29yIGFuZCBVbmlmaWVkQ2hhbm5lbGl6ZXIgaW5mcmFzdHJ1Y3R1cmUKLSAgICAgICAgICAgICAgICAvLyBhbmQgdGhleSBhcmUgc2xpZ2h0bHkgYXQgb2RkcyB3aXRoIGVhY2ggb3RoZXIgaW4gY2VydGFpbiBzaXR1YXRpb25zLgotICAgICAgICAgICAgICAgIHNlc3Npb25UYXNrLmZsdXNoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG1ldGhvZCBzdG9wcyBpbmNvbWluZyByZXF1ZXN0cyBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSBzZXNzaW9uIHF1ZXVlLiBJdCB0aGVuIGNhbmNlbHMgdGhlIHNlc3Npb24gbGlmZXRpbWUKLSAgICAgKiB0aW1lb3V0IGFuZCB0aGVuIGNhbGxzIHtAbGluayBzdXBlciNjbG9zZSgpfSB3aGljaCB3aWxsIHRoZW4gaW50ZXJydXB0IHRoaXMge0BsaW5rICNydW4oKX0gd2hpY2ggd2lsbCBjbGVhciBvdXQKLSAgICAgKiByZW1haW5pbmcgcmVxdWVzdHMgaW4gdGhlIHF1ZXVlLiBUaGlzIGxhdHRlciBwYXJ0IG9mIHRoZSBjbG9zZSwgd2hlcmUgdGhlIGludGVycnVwdGlvbiBpcyBjb25jZXJuZWQsIGlzIGFuCi0gICAgICogYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBhbmQgd2lsbCBub3QgYmxvY2sgYXMgaXQgZmluaXNoZXMgaXRzIHByb2Nlc3NpbmcgaW4gdGhlICJncmVtbGluUG9vbCIgdGhyZWFkIHRoYXQgd2FzCi0gICAgICogb3JpZ2luYWxseSBoYW5kbGluZyB0aGUgd29yay4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICAgICAgc3RvcEFjY2VwdGluZ1JlcXVlc3RzKCk7Ci0gICAgICAgIGNhbmNlbFJlcXVlc3RUaW1lb3V0KCk7Ci0gICAgICAgIHN1cGVyLmNsb3NlKCk7Ci0gICAgICAgIGxvZ2dlci5kZWJ1ZygiU2Vzc2lvbiB7fSBjbG9zZWQiLCBnZXRTZXNzaW9uSWQoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNhbmNlbFJlcXVlc3RUaW1lb3V0KCkgewotICAgICAgICBpZiAocmVxdWVzdENhbmNlbEZ1dHVyZSAhPSBudWxsICYmICFyZXF1ZXN0Q2FuY2VsRnV0dXJlLmlzRG9uZSgpKQotICAgICAgICAgICAgcmVxdWVzdENhbmNlbEZ1dHVyZS5jYW5jZWwodHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiQ291bGQgbm90IGNhbmNlbCByZXF1ZXN0IHRpbWVvdXQgZm9yIHt9IC0ge30iLCBnZXRTZXNzaW9uSWQoKSwgcmVxdWVzdENhbmNlbEZ1dHVyZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHN0b3BBY2NlcHRpbmdSZXF1ZXN0cygpIHsKLSAgICAgICAgaWYgKGVuZGluZy5jb21wYXJlQW5kU2V0KGZhbHNlLCB0cnVlKSkKLSAgICAgICAgICAgIGNhbmNlbCh0cnVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgQmluZGluZ3MgZ2V0V29ya2VyQmluZGluZ3MoKSB0aHJvd3MgU2Vzc2lvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChudWxsID09IGJpbmRpbmdzKQotICAgICAgICAgICAgYmluZGluZ3MgPSBzdXBlci5nZXRXb3JrZXJCaW5kaW5ncygpOwotICAgICAgICByZXR1cm4gdGhpcy5iaW5kaW5nczsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgR3JlbWxpbkV4ZWN1dG9yIGluaXRpYWxpemVHcmVtbGluRXhlY3V0b3IoZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2spIHsKLSAgICAgICAgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MgPSBzZXNzaW9uVGFzay5nZXRTZXR0aW5ncygpOwotICAgICAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBzZXNzaW9uVGFzay5nZXRHcmVtbGluRXhlY3V0b3IoKS5nZXRFeGVjdXRvclNlcnZpY2UoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VHbG9iYWxGdW5jdGlvbkNhY2hlID0gc2V0dGluZ3MudXNlR2xvYmFsRnVuY3Rpb25DYWNoZUZvclNlc3Npb25zOwotCi0gICAgICAgIC8vIHRoZXNlIGluaXRpYWwgc2V0dGluZ3MgZG9uJ3QgbWF0dGVyIHNvIG11Y2ggYXMgd2UgZG9uJ3QgcmVhbGx5IGV4ZWN1dGUgdGhpbmdzIHRocm91Z2ggdGhlCi0gICAgICAgIC8vIEdyZW1saW5FeGVjdXRvciBkaXJlY3RseS4gSnVzdCBkb2luZyBhbGwgdGhpcyBzZXR1cCB0byBtYWtlIEdyZW1saW5FeGVjdXRvciBkbyB0aGUgd29yayBvZgotICAgICAgICAvLyByaWdnaW5nIHVwIHRoZSBHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlci4KLSAgICAgICAgZmluYWwgR3JlbWxpbkV4ZWN1dG9yLkJ1aWxkZXIgZ3JlbWxpbkV4ZWN1dG9yQnVpbGRlciA9IEdyZW1saW5FeGVjdXRvci5idWlsZCgpCi0gICAgICAgICAgICAgICAgLmV2YWx1YXRpb25UaW1lb3V0KHNldHRpbmdzLmdldEV2YWx1YXRpb25UaW1lb3V0KCkpCi0gICAgICAgICAgICAgICAgLmV4ZWN1dG9yU2VydmljZShleGVjdXRvcikKLSAgICAgICAgICAgICAgICAuZ2xvYmFsQmluZGluZ3MoZ3JhcGhNYW5hZ2VyLmdldEFzQmluZGluZ3MoKSkKLSAgICAgICAgICAgICAgICAuc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSk7Ci0KLSAgICAgICAgc2V0dGluZ3Muc2NyaXB0RW5naW5lcy5mb3JFYWNoKChrLCB2KSAtPiB7Ci0gICAgICAgICAgICAvLyB1c2UgcGx1Z2lucyBpZiB0aGV5IGFyZSBwcmVzZW50Ci0gICAgICAgICAgICBpZiAoIXYucGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzZXJ2ZXIgcmVsYXRlZCBjbGFzc2VzIGFyZSBhdmFpbGFibGUgYXQgaW5pdC4gdGhlIExpZmVDeWNsZUhvb2sgc3R1ZmYgd2lsbCBiZQotICAgICAgICAgICAgICAgIC8vIGFkZGVkIGV4cGxpY2l0bHkgdmlhIGNvbmZpZ3VyYXRpb24gdXNpbmcgR3JlbWxpblNlcnZlckdyZW1saW5Nb2R1bGUgaW4gdGhlIHlhbWwuIG5lZWQgdG8gb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAvLyBzY3JpcHRlbmdpbmUgc2V0dGluZ3Mgd2l0aCBTZXNzaW9uT3BQcm9jZXNzb3Igc3BlY2lmaWMgb25lcyBhcyB0aGUgcHJvY2Vzc2luZyBmb3Igc2Vzc2lvbnMgaXMKLSAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgYW5kIGEgZ2xvYmFsIHNldHRpbmcgbWF5IG5vdCBtYWtlIHNlbnNlIGZvciBhIHNlc3Npb24KLSAgICAgICAgICAgICAgICBpZiAodi5wbHVnaW5zLmNvbnRhaW5zS2V5KEdyb292eUNvbXBpbGVyR3JlbWxpblBsdWdpbi5jbGFzcy5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYucGx1Z2lucy5nZXQoR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luLmNsYXNzLmdldE5hbWUoKSkucHV0KENPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRCwgdXNlR2xvYmFsRnVuY3Rpb25DYWNoZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IHBsdWdpbkNvbmYgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICAgICAgICAgIHBsdWdpbkNvbmYucHV0KENPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRCwgdXNlR2xvYmFsRnVuY3Rpb25DYWNoZSk7Ci0gICAgICAgICAgICAgICAgICAgIHYucGx1Z2lucy5wdXQoR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luLmNsYXNzLmdldE5hbWUoKSwgcGx1Z2luQ29uZik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZ3JlbWxpbkV4ZWN1dG9yQnVpbGRlci5hZGRQbHVnaW5zKGssIHYucGx1Z2lucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBncmVtbGluRXhlY3V0b3JCdWlsZGVyLmNyZWF0ZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlcyAtIHNlc3Npb246ICVzIiwgTXVsdGlUYXNrU2Vzc2lvbi5jbGFzcy5nZXRTaW1wbGVOYW1lKCksIGdldFNlc3Npb25JZCgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvT3BFeGVjdXRvckhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9PcEV4ZWN1dG9ySGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmFjZDc0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9PcEV4ZWN1dG9ySGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuZW5naW5lLkdyZW1saW5FeGVjdXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyYXBoTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5PcFByb2Nlc3NvckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuZnVuY3Rpb24uVGhyb3dpbmdDb25zdW1lcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LnV0aWwuUmVmZXJlbmNlQ291bnRVdGlsOwotaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlBhaXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBDaGFubmVsSGFuZGxlci5TaGFyYWJsZQotcHVibGljIGNsYXNzIE9wRXhlY3V0b3JIYW5kbGVyIGV4dGVuZHMgU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyPFBhaXI8UmVxdWVzdE1lc3NhZ2UsIFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4+PiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKE9wRXhlY3V0b3JIYW5kbGVyLmNsYXNzKTsKLQotICAgIHByaXZhdGUgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyOwotICAgIHByaXZhdGUgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLSAgICBwcml2YXRlIGZpbmFsIEdyZW1saW5FeGVjdXRvciBncmVtbGluRXhlY3V0b3I7Ci0KLSAgICBwdWJsaWMgT3BFeGVjdXRvckhhbmRsZXIoZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MsIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXIsIGZpbmFsIEdyZW1saW5FeGVjdXRvciBncmVtbGluRXhlY3V0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOwotICAgICAgICB0aGlzLmdyYXBoTWFuYWdlciA9IGdyYXBoTWFuYWdlcjsKLSAgICAgICAgdGhpcy5ncmVtbGluRXhlY3V0b3IgPSBncmVtbGluRXhlY3V0b3I7Ci0gICAgICAgIHRoaXMuc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlID0gc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGNoYW5uZWxSZWFkMChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBQYWlyPFJlcXVlc3RNZXNzYWdlLCBUaHJvd2luZ0NvbnN1bWVyPENvbnRleHQ+PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gb2JqZWN0cy5nZXRWYWx1ZTAoKTsKLSAgICAgICAgZmluYWwgVGhyb3dpbmdDb25zdW1lcjxDb250ZXh0PiBvcCA9IG9iamVjdHMuZ2V0VmFsdWUxKCk7Ci0gICAgICAgIGZpbmFsIENvbnRleHQgZ3JlbWxpblNlcnZlckNvbnRleHQgPSBuZXcgQ29udGV4dChtc2csIGN0eCwKLSAgICAgICAgICAgICAgICBzZXR0aW5ncywgZ3JhcGhNYW5hZ2VyLCBncmVtbGluRXhlY3V0b3IsIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcC5hY2NlcHQoZ3JlbWxpblNlcnZlckNvbnRleHQpOwotICAgICAgICB9IGNhdGNoIChPcFByb2Nlc3NvckV4Y2VwdGlvbiBvcGUpIHsKLSAgICAgICAgICAgIC8vIE9wcyBtYXkgY2hvb3NlIHRvIHRocm93IE9wUHJvY2Vzc29yRXhjZXB0aW9uIG9yIHdyaXRlIHRoZSBlcnJvciBSZXNwb25zZU1lc3NhZ2UgZG93biB0aGUgbGluZQotICAgICAgICAgICAgLy8gdGhlbXNlbHZlcwotICAgICAgICAgICAgbG9nZ2VyLndhcm4ob3BlLmdldE1lc3NhZ2UoKSwgb3BlKTsKLSAgICAgICAgICAgIGdyZW1saW5TZXJ2ZXJDb250ZXh0LndyaXRlQW5kRmx1c2gob3BlLmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGFuIHVucGxhbm5lZCBleGNlcHRpb24gbWlnaHQgcmFpc2Ugb3V0IG9mIGFuIE9wUHJvY2Vzc29yIGV4ZWN1dGlvbi4gQnVpbGQgYSBnZW5lcmFsCi0gICAgICAgICAgICAvLyBlcnJvciB0byBzZW5kIGJhY2sgdG8gdGhlIGNsaWVudAotICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXguZ2V0TWVzc2FnZSgpLCBleCk7Ci0gICAgICAgICAgICBncmVtbGluU2VydmVyQ29udGV4dC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oZXgpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKGV4LmdldE1lc3NhZ2UoKSkuY3JlYXRlKCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2Uob2JqZWN0cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvT3BTZWxlY3RvckhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9PcFNlbGVjdG9ySGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmY0NWMyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9PcFNlbGVjdG9ySGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnRpbWVvdXQuSWRsZVN0YXRlOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIudGltZW91dC5JZGxlU3RhdGVFdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmVuZ2luZS5HcmVtbGluRXhlY3V0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmFwaE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuT3BQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AuT3BMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AuT3BQcm9jZXNzb3JFeGNlcHRpb247Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLk1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyOwotaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlBhaXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AQ2hhbm5lbEhhbmRsZXIuU2hhcmFibGUKLXB1YmxpYyBjbGFzcyBPcFNlbGVjdG9ySGFuZGxlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyPFJlcXVlc3RNZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKE9wU2VsZWN0b3JIYW5kbGVyLmNsYXNzKTsKLQotICAgIHByaXZhdGUgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBHcmVtbGluRXhlY3V0b3IgZ3JlbWxpbkV4ZWN1dG9yOwotICAgIHByaXZhdGUgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLSAgICBwcml2YXRlIGZpbmFsIENoYW5uZWxpemVyIGNoYW5uZWxpemVyOwotCi0gICAgcHVibGljIE9wU2VsZWN0b3JIYW5kbGVyKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzLCBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyLCBmaW5hbCBHcmVtbGluRXhlY3V0b3IgZ3JlbWxpbkV4ZWN1dG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2Ugc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLCBmaW5hbCBDaGFubmVsaXplciBjaGFubmVsaXplcikgewotICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gZ3JhcGhNYW5hZ2VyOwotICAgICAgICB0aGlzLmdyZW1saW5FeGVjdXRvciA9IGdyZW1saW5FeGVjdXRvcjsKLSAgICAgICAgdGhpcy5zY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgPSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7Ci0gICAgICAgIHRoaXMuY2hhbm5lbGl6ZXIgPSBjaGFubmVsaXplcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkZWNvZGUoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gb2JqZWN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENvbnRleHQgZ3JlbWxpblNlcnZlckNvbnRleHQgPSBuZXcgQ29udGV4dChtc2csIGN0eCwgc2V0dGluZ3MsCi0gICAgICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLCBncmVtbGluRXhlY3V0b3IsIHRoaXMuc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIGNob29zZSBhIHByb2Nlc3NvciB0byBkbyB0aGUgd29yayBiYXNlZCBvbiB0aGUgcmVxdWVzdCBtZXNzYWdlLgotICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8T3BQcm9jZXNzb3I+IHByb2Nlc3NvciA9IE9wTG9hZGVyLmdldFByb2Nlc3Nvcihtc2cuZ2V0UHJvY2Vzc29yKCkpOwotCi0gICAgICAgICAgICBpZiAocHJvY2Vzc29yLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9jZXNzb3IgaXMga25vd24gc28gdXNlIGl0IHRvIGV2YWx1YXRlIHRoZSBtZXNzYWdlCi0gICAgICAgICAgICAgICAgb2JqZWN0cy5hZGQoUGFpci53aXRoKG1zZywgcHJvY2Vzc29yLmdldCgpLnNlbGVjdChncmVtbGluU2VydmVyQ29udGV4dCkpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGludmFsaWQgb3AgcHJvY2Vzc29yIHNlbGVjdGVkIHNvIHdyaXRlIGJhY2sgYW4gZXJyb3IgYnkgd2F5IG9mIE9wUHJvY2Vzc29yRXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJJbnZhbGlkIE9wUHJvY2Vzc29yIHJlcXVlc3RlZCBbJXNdIiwgbXNnLmdldFByb2Nlc3NvcigpKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKGVycm9yTWVzc2FnZSkuY3JlYXRlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChPcFByb2Nlc3NvckV4Y2VwdGlvbiBvcGUpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKG9wZS5nZXRNZXNzYWdlKCksIG9wZSk7Ci0gICAgICAgICAgICBncmVtbGluU2VydmVyQ29udGV4dC53cml0ZUFuZEZsdXNoKG9wZS5nZXRSZXNwb25zZU1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1c2VyRXZlbnRUcmlnZ2VyZWQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgT2JqZWN0IGV2dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIG9ubHkgbmVlZCB0byBoYW5kbGUgdGhpcyBldmVudCBpZiB0aGUgaWRsZSBtb25pdG9yIGlzIG9uCi0gICAgICAgIGlmICghY2hhbm5lbGl6ZXIuc3VwcG9ydHNJZGxlTW9uaXRvcigpKSByZXR1cm47Ci0KLSAgICAgICAgaWYgKGV2dCBpbnN0YW5jZW9mIElkbGVTdGF0ZUV2ZW50KSB7Ci0gICAgICAgICAgICBmaW5hbCBJZGxlU3RhdGVFdmVudCBlID0gKElkbGVTdGF0ZUV2ZW50KSBldnQ7Ci0KLSAgICAgICAgICAgIC8vIGlmIG5vIHJlcXVlc3RzIChyZWFkZXIpIHRoZW4gY2xvc2UsIGlmIG5vIHdyaXRlcyBmcm9tIHNlcnZlciB0byBjbGllbnQgdGhlbiBwaW5nLiBjbGllbnRzIHNob3VsZAotICAgICAgICAgICAgLy8gcGVyaW9kaWNhbGx5IHBpbmcgdGhlIHNlcnZlciwgYnV0IGNvbWluZyBmcm9tIHRoaXMgZGlyZWN0aW9uIGFsbG93cyB0aGUgc2VydmVyIHRvIGtpbGwgY2hhbm5lbHMgdGhhdAotICAgICAgICAgICAgLy8gaGF2ZSBkZWFkIGNsaWVudHMgb24gdGhlIG90aGVyIGVuZAotICAgICAgICAgICAgaWYgKGUuc3RhdGUoKSA9PSBJZGxlU3RhdGUuUkVBREVSX0lETEUpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ2xvc2luZyBjaGFubmVsIC0gY2xpZW50IGlzIGRpc2Nvbm5lY3RlZCBhZnRlciBpZGxlIHBlcmlvZCBvZiAiICsgc2V0dGluZ3MuaWRsZUNvbm5lY3Rpb25UaW1lb3V0ICsgIiAiICsgY3R4LmNoYW5uZWwoKS5pZCgpLmFzU2hvcnRUZXh0KCkpOwotICAgICAgICAgICAgICAgIGN0eC5jbG9zZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChlLnN0YXRlKCkgPT0gSWRsZVN0YXRlLldSSVRFUl9JRExFICYmIHNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsID4gMCkgewotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDaGVja2luZyBjaGFubmVsIC0gc2VuZGluZyBwaW5nIHRvIGNsaWVudCBhZnRlciBpZGxlIHBlcmlvZCBvZiAiICsgc2V0dGluZ3Mua2VlcEFsaXZlSW50ZXJ2YWwgKyAiICIgKyBjdHguY2hhbm5lbCgpLmlkKCkuYXNTaG9ydFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goY2hhbm5lbGl6ZXIuY3JlYXRlSWRsZURldGVjdGlvbk1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1Nhc2xBbmRIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJjZTEzNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXI7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUGlwZWxpbmU7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoei5BdXRob3JpemVyOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkFic3RyYWN0Q2hhbm5lbGl6ZXIuUElQRUxJTkVfQVVUSE9SSVpFUjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplci5QSVBFTElORV9BVVRIRU5USUNBVE9SOwotCi0vKioKLSAqIEFuIEF1dGhlbnRpY2F0aW9uIEhhbmRsZXIgZm9yIGRvaW5nIFdlYlNvY2tldCBTYXNsIGFuZCBIdHRwIEJhc2ljIGF1dGgKLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgY2xhc3MgU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlciBleHRlbmRzIFNhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXIgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgSFRUUF9BVVRIID0gImh0dHAtYXV0aGVudGljYXRpb24iOwotCi0gICAgLyoqCi0gICAgICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjUuMCwgcmVwbGFjZWQgYnkge0BsaW5rICNTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyKEF1dGhlbnRpY2F0b3IsIEF1dGhvcml6ZXIsIFNldHRpbmdzKX0uCi0gICAgICovCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcihmaW5hbCBBdXRoZW50aWNhdG9yIGF1dGhlbnRpY2F0b3IsIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7Ci0gICAgICAgIHRoaXMoYXV0aGVudGljYXRvciwgbnVsbCwgc2V0dGluZ3MpOwotICAgIH0KLQotICAgIHB1YmxpYyBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyKGZpbmFsIEF1dGhlbnRpY2F0b3IgYXV0aGVudGljYXRvciwgZmluYWwgQXV0aG9yaXplciBhdXRob3JpemVyLCBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICBzdXBlcihhdXRoZW50aWNhdG9yLCBhdXRob3JpemVyLCBzZXR0aW5ncyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2hhbm5lbFJlYWQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgT2JqZWN0IG9iaikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIdHRwTWVzc2FnZSAmJiAhV2ViU29ja2V0SGFuZGxlclV0aWwuaXNXZWJTb2NrZXQoKEh0dHBNZXNzYWdlKW9iaikpIHsKLSAgICAgICAgICAgIGZpbmFsIENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSA9IGN0eC5waXBlbGluZSgpOwotICAgICAgICAgICAgaWYgKG51bGwgIT0gcGlwZWxpbmUuZ2V0KEhUVFBfQVVUSCkpIHsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5yZW1vdmUoSFRUUF9BVVRIKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBpcGVsaW5lLmFkZEFmdGVyKFBJUEVMSU5FX0FVVEhFTlRJQ0FUT1IsIEhUVFBfQVVUSCwgbmV3IEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcihhdXRoZW50aWNhdG9yLCB0aGlzLnNldHRpbmdzKSk7Ci0KLSAgICAgICAgICAgIGlmIChhdXRob3JpemVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBDaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyIGF1dGhvcml6YXRpb25IYW5kbGVyID0gbmV3IEh0dHBCYXNpY0F1dGhvcml6YXRpb25IYW5kbGVyKGF1dGhvcml6ZXIpOwotICAgICAgICAgICAgICAgIHBpcGVsaW5lLnJlbW92ZShQSVBFTElORV9BVVRIT1JJWkVSKTsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRBZnRlcihIVFRQX0FVVEgsIFBJUEVMSU5FX0FVVEhPUklaRVIsIGF1dGhvcml6YXRpb25IYW5kbGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3R4LmZpcmVDaGFubmVsUmVhZChvYmopOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3VwZXIuY2hhbm5lbFJlYWQoY3R4LCBvYmopOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2FzbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1Nhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjIyZDQ2NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2FzbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWw7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS51dGlsLkF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudHVwbGUuSW1tdXRhYmxlUGFpcjsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudHVwbGUuUGFpcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGh6LkF1dGhvcml6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LkluZXRTb2NrZXRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LlNvY2tldEFkZHJlc3M7Ci1pbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkJhc2U2NDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247Ci0KLS8qKgotICogQSBTQVNMIGF1dGhlbnRpY2F0aW9uIGhhbmRsZXIgdGhhdCBhbGxvd3MgdGhlIHtAbGluayBBdXRoZW50aWNhdG9yfSB0byBiZSBwbHVnZ2VkIGludG8gaXQuIFRoaXMgaGFuZGxlciBpcyBtZWFudAotICogdG8gYmUgdXNlZCB3aXRoIHByb3RvY29scyB0aGF0IHByb2Nlc3MgYSB7QGxpbmsgUmVxdWVzdE1lc3NhZ2V9IHN1Y2ggYXMgdGhlIHtAbGluayBXZWJTb2NrZXRDaGFubmVsaXplcn0KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKDxhIGhyZWY9Imh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20iPmh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb208L2E+KQotICovCi1AQ2hhbm5lbEhhbmRsZXIuU2hhcmFibGUKLXB1YmxpYyBjbGFzcyBTYXNsQXV0aGVudGljYXRpb25IYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RBdXRoZW50aWNhdGlvbkhhbmRsZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihTYXNsQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCYXNlNjQuRGVjb2RlciBCQVNFNjRfREVDT0RFUiA9IEJhc2U2NC5nZXREZWNvZGVyKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmFzZTY0LkVuY29kZXIgQkFTRTY0X0VOQ09ERVIgPSBCYXNlNjQuZ2V0RW5jb2RlcigpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRHVyYXRpb24gTUFYX1JFUVVFU1RfREVGRVJSQUJMRV9EVVJBVElPTiA9IER1cmF0aW9uLm9mU2Vjb25kcyg1KTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgYXVkaXRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmVtbGluU2VydmVyLkFVRElUX0xPR0dFUl9OQU1FKTsKLQotICAgIHByb3RlY3RlZCBmaW5hbCBTZXR0aW5ncyBzZXR0aW5nczsKLQotICAgIC8qKgotICAgICAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy41LjAsIHJlcGxhY2VkIGJ5IHtAbGluayAjU2FzbEF1dGhlbnRpY2F0aW9uSGFuZGxlcihBdXRoZW50aWNhdG9yLCBBdXRob3JpemVyLCBTZXR0aW5ncyl9LgotICAgICAqLwotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIFNhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXIoZmluYWwgQXV0aGVudGljYXRvciBhdXRoZW50aWNhdG9yLCBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICB0aGlzKGF1dGhlbnRpY2F0b3IsIG51bGwsIHNldHRpbmdzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2FzbEF1dGhlbnRpY2F0aW9uSGFuZGxlcihmaW5hbCBBdXRoZW50aWNhdG9yIGF1dGhlbnRpY2F0b3IsIGZpbmFsIEF1dGhvcml6ZXIgYXV0aG9yaXplciwgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICAgICAgc3VwZXIoYXV0aGVudGljYXRvciwgYXV0aG9yaXplcik7Ci0gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjaGFubmVsUmVhZChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBPYmplY3QgbXNnKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKCEobXNnIGluc3RhbmNlb2YgUmVxdWVzdE1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICBsb2dnZXIud2Fybigie30gb25seSBwcm9jZXNzZXMgUmVxdWVzdE1lc3NhZ2UgaW5zdGFuY2VzIC0gcmVjZWl2ZWQge30gLSBjaGFubmVsIGNsb3NpbmciLAotICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLCBtc2cuZ2V0Q2xhc3MoKSk7Ci0gICAgICAgICAgICBjdHguY2xvc2UoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlID0gKFJlcXVlc3RNZXNzYWdlKSBtc2c7Ci0KLSAgICAgICAgZmluYWwgQXR0cmlidXRlPEF1dGhlbnRpY2F0b3IuU2FzbE5lZ290aWF0b3I+IG5lZ290aWF0b3IgPSBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuTkVHT1RJQVRPUik7Ci0gICAgICAgIGZpbmFsIEF0dHJpYnV0ZTxSZXF1ZXN0TWVzc2FnZT4gcmVxdWVzdCA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5SRVFVRVNUX01FU1NBR0UpOwotICAgICAgICBmaW5hbCBBdHRyaWJ1dGU8UGFpcjxMb2NhbERhdGVUaW1lLCBMaXN0PFJlcXVlc3RNZXNzYWdlPj4+IGRlZmVycmVkUmVxdWVzdHMgPSBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuREVGRVJSRURfUkVRVUVTVF9NRVNTQUdFUyk7Ci0KLSAgICAgICAgaWYgKG5lZ290aWF0b3IuZ2V0KCkgPT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aW1lIHRocm91Z2ggc28gc2F2ZSB0aGUgcmVxdWVzdCBhbmQgc2VuZCBhbiBBVVRIRU5USUNBVEUgY2hhbGxlbmdlIHdpdGggbm8gZGF0YQotICAgICAgICAgICAgICAgIG5lZ290aWF0b3Iuc2V0KGF1dGhlbnRpY2F0b3IubmV3U2FzbE5lZ290aWF0b3IoZ2V0UmVtb3RlSW5ldEFkZHJlc3MoY3R4KSkpOwotICAgICAgICAgICAgICAgIHJlcXVlc3Quc2V0KHJlcXVlc3RNZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgYXV0aGVudGljYXRlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHJlcXVlc3RNZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURSkuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goYXV0aGVudGljYXRlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIC8vIG5ld1Nhc2xOZWdvdGlhdG9yIGNhbiBjYXVzZSB0cm91YmxlcyAtIGlmIHdlIGRvbid0IGNhdGNoIGFuZCByZXNwb25kIG5pY2VseSB0aGUgZHJpdmVyIHNlZW1zCi0gICAgICAgICAgICAgICAgLy8gdG8gaGFuZyB1bnRpbCB0aW1lb3V0IHdoaWNoIGlzbid0IHNvIG5pY2UuIHRyZWF0aW5nIHRoaXMgbGlrZSBhIHNlcnZlciBlcnJvciBhcyBpdCBtZWFucyB0aGF0Ci0gICAgICAgICAgICAgICAgLy8gdGhlIEF1dGhlbnRpY2F0b3IgaXNuJ3QgcmVhbGx5IHJlYWR5IHRvIGRlYWwgd2l0aCByZXF1ZXN0cyBmb3Igc29tZSByZWFzb24uCi0gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKFN0cmluZy5mb3JtYXQoIiVzIGlzIG5vdCByZWFkeSB0byBoYW5kbGUgcmVxdWVzdHMgLSBjaGVjayBpdHMgY29uZmlndXJhdGlvbiBvciByZWxhdGVkIHNlcnZpY2VzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhlbnRpY2F0b3IuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkpLCBleCk7Ci0KLSAgICAgICAgICAgICAgICByZXNwb25kV2l0aEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyIC0+IGJ1aWxkZXIuc3RhdHVzTWVzc2FnZSgiQXV0aGVudGljYXRvciBpcyBub3QgcmVhZHkgdG8gaGFuZGxlIHJlcXVlc3RzIikuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmICghcmVxdWVzdE1lc3NhZ2UuZ2V0T3AoKS5lcXVhbHMoVG9rZW5zLk9QU19BVVRIRU5USUNBVElPTikpIHsKLSAgICAgICAgICAgIC8vIElmIGF1dGhlbnRpY2F0aW9uIG5lZ290aWF0aW9uIGlzIHBlbmRpbmcsIHN0b3JlIHN1YnNlcXVlbnQgbm9uLWF1dGhlbnRpY2F0aW9uIHJlcXVlc3RzIGZvciBsYXRlciBwcm9jZXNzaW5nCi0gICAgICAgICAgICBkZWZlcnJlZFJlcXVlc3RzLnNldElmQWJzZW50KG5ldyBJbW11dGFibGVQYWlyPD4oTG9jYWxEYXRlVGltZS5ub3coKSwgbmV3IEFycmF5TGlzdDw+KCkpKTsKLSAgICAgICAgICAgIGRlZmVycmVkUmVxdWVzdHMuZ2V0KCkuZ2V0VmFsdWUoKS5hZGQocmVxdWVzdE1lc3NhZ2UpOwotCi0gICAgICAgICAgICBmaW5hbCBEdXJhdGlvbiBkZWZlcnJlZER1cmF0aW9uID0gRHVyYXRpb24uYmV0d2VlbihkZWZlcnJlZFJlcXVlc3RzLmdldCgpLmdldEtleSgpLCBMb2NhbERhdGVUaW1lLm5vdygpKTsKLQotICAgICAgICAgICAgaWYgKGRlZmVycmVkRHVyYXRpb24uY29tcGFyZVRvKE1BWF9SRVFVRVNUX0RFRkVSUkFCTEVfRFVSQVRJT04pID4gMCkgewotICAgICAgICAgICAgICAgIHJlc3BvbmRXaXRoRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgLT4gYnVpbGRlci5zdGF0dXNNZXNzYWdlKCJBdXRoZW50aWNhdGlvbiBkaWQgbm90IGZpbmlzaCBpbiB0aGUgYWxsb3dlZCBkdXJhdGlvbiAoIiArIE1BWF9SRVFVRVNUX0RFRkVSUkFCTEVfRFVSQVRJT04gKyAicykuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5VTkFVVEhPUklaRUQpLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmICghcmVxdWVzdE1lc3NhZ2UuZ2V0QXJncygpLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX1NBU0wpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgdGhhdCBpcyBtaXNzaW5nIGEgInNhc2wiIGFyZ3VtZW50LgotICAgICAgICAgICAgcmVzcG9uZFdpdGhFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgLT4gYnVpbGRlci5zdGF0dXNNZXNzYWdlKCJGYWlsZWQgdG8gYXV0aGVudGljYXRlIikuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuVU5BVVRIT1JJWkVEKSwKLSAgICAgICAgICAgICAgICAgICAgY3R4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIE9iamVjdCBzYXNsT2JqZWN0ID0gcmVxdWVzdE1lc3NhZ2UuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19TQVNMKTsKLQotICAgICAgICBpZiAoIShzYXNsT2JqZWN0IGluc3RhbmNlb2YgU3RyaW5nKSkgewotICAgICAgICAgICAgcmVzcG9uZFdpdGhFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIgLT4gYnVpbGRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJJbmNvcnJlY3QgdHlwZSBmb3IgOiAiICsgVG9rZW5zLkFSR1NfU0FTTCArICIgLSBiYXNlNjQgZW5jb2RlZCBTdHJpbmcgaXMgZXhwZWN0ZWQiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX01BTEZPUk1FRF9SRVFVRVNUKSwKLSAgICAgICAgICAgICAgICAgICAgY3R4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBieXRlW10gc2FzbFJlc3BvbnNlID0gQkFTRTY0X0RFQ09ERVIuZGVjb2RlKChTdHJpbmcpIHNhc2xPYmplY3QpOwotICAgICAgICAgICAgZmluYWwgYnl0ZVtdIHNhc2xNZXNzYWdlID0gbmVnb3RpYXRvci5nZXQoKS5ldmFsdWF0ZVJlc3BvbnNlKHNhc2xSZXNwb25zZSk7Ci0KLSAgICAgICAgICAgIGlmICghbmVnb3RpYXRvci5nZXQoKS5pc0NvbXBsZXRlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBub3QgZG9uZSBoZXJlIC0gc2VuZCBiYWNrIHRoZSBzYXNsIG1lc3NhZ2UgZm9yIG5leHQgY2hhbGxlbmdlLgotICAgICAgICAgICAgICAgIGZpbmFsIEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGFkYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgIG1ldGFkYXRhLnB1dChUb2tlbnMuQVJHU19TQVNMLCBCQVNFNjRfRU5DT0RFUi5lbmNvZGVUb1N0cmluZyhzYXNsTWVzc2FnZSkpOwotICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBhdXRoZW50aWNhdGUgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQocmVxdWVzdE1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlcyhtZXRhZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5BVVRIRU5USUNBVEUpLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKGF1dGhlbnRpY2F0ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLkF1dGhlbnRpY2F0ZWRVc2VyIHVzZXIgPSBuZWdvdGlhdG9yLmdldCgpLmdldEF1dGhlbnRpY2F0ZWRVc2VyKCk7Ci0gICAgICAgICAgICBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuQVVUSEVOVElDQVRFRF9VU0VSKS5zZXQodXNlcik7Ci0gICAgICAgICAgICAvLyBVc2VyIG5hbWUgbG9nZ2VkIHdpdGggdGhlIHJlbW90ZSBzb2NrZXQgYWRkcmVzcyBhbmQgYXV0aGVudGljYXRvciBjbGFzc25hbWUgZm9yIGF1ZGl0IGxvZ2dpbmcKLSAgICAgICAgICAgIGlmIChzZXR0aW5ncy5lbmFibGVBdWRpdExvZykgewotICAgICAgICAgICAgICAgIFN0cmluZyBhZGRyZXNzID0gY3R4LmNoYW5uZWwoKS5yZW1vdGVBZGRyZXNzKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcy5zdGFydHNXaXRoKCIvIikgJiYgYWRkcmVzcy5sZW5ndGgoKSA+IDEpIGFkZHJlc3MgPSBhZGRyZXNzLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBhdXRoQ2xhc3NQYXJ0cyA9IGF1dGhlbnRpY2F0b3IuZ2V0Q2xhc3MoKS50b1N0cmluZygpLnNwbGl0KCJbLl0iKTsKLSAgICAgICAgICAgICAgICBhdWRpdExvZ2dlci5pbmZvKCJVc2VyIHt9IHdpdGggYWRkcmVzcyB7fSBhdXRoZW50aWNhdGVkIGJ5IHt9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZ2V0TmFtZSgpLCBhZGRyZXNzLCBhdXRoQ2xhc3NQYXJ0c1thdXRoQ2xhc3NQYXJ0cy5sZW5ndGggLSAxXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGdvdCBoZXJlIHdlIGFyZSBhdXRoZW50aWNhdGVkIHNvIHJlbW92ZSB0aGUgaGFuZGxlciBhbmQgcGFzcwotICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIG1lc3NhZ2UgZG93biB0aGUgcGlwZWxpbmUgZm9yIHByb2Nlc3NpbmcKLSAgICAgICAgICAgIGN0eC5waXBlbGluZSgpLnJlbW92ZSh0aGlzKTsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG9yaWdpbmFsID0gcmVxdWVzdC5nZXQoKTsKLSAgICAgICAgICAgIGN0eC5maXJlQ2hhbm5lbFJlYWQob3JpZ2luYWwpOwotCi0gICAgICAgICAgICAvLyBBbHNvIHNlbmQgZGVmZXJyZWQgcmVxdWVzdHMgaWYgdGhlcmUgYXJlIGFueSBkb3duIHRoZSBwaXBlbGluZSBmb3IgcHJvY2Vzc2luZwotICAgICAgICAgICAgaWYgKGRlZmVycmVkUmVxdWVzdHMuZ2V0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGRlZmVycmVkUmVxdWVzdHMuZ2V0QW5kU2V0KG51bGwpLmdldFZhbHVlKCkuZm9yRWFjaChjdHg6OmZpcmVDaGFubmVsUmVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEF1dGhlbnRpY2F0aW9uRXhjZXB0aW9uIGFlKSB7Ci0gICAgICAgICAgICByZXNwb25kV2l0aEVycm9yKAotICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlciAtPiBidWlsZGVyLnN0YXR1c01lc3NhZ2UoYWUuZ2V0TWVzc2FnZSgpKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5VTkFVVEhPUklaRUQpLAotICAgICAgICAgICAgICAgICAgICBjdHgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlc3BvbmRXaXRoRXJyb3IoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIGZpbmFsIEZ1bmN0aW9uPFJlc3BvbnNlTWVzc2FnZS5CdWlsZGVyLCBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlcj4gYnVpbGRSZXNwb25zZSwgZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCkgewotICAgICAgICBmaW5hbCBBdHRyaWJ1dGU8UmVxdWVzdE1lc3NhZ2U+IG9yaWdpbmFsUmVxdWVzdCA9IGN0eC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5SRVFVRVNUX01FU1NBR0UpOwotICAgICAgICBmaW5hbCBBdHRyaWJ1dGU8UGFpcjxMb2NhbERhdGVUaW1lLCBMaXN0PFJlcXVlc3RNZXNzYWdlPj4+IGRlZmVycmVkUmVxdWVzdHMgPSBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuREVGRVJSRURfUkVRVUVTVF9NRVNTQUdFUyk7Ci0KLSAgICAgICAgaWYgKCFyZXF1ZXN0TWVzc2FnZS5nZXRPcCgpLmVxdWFscyhUb2tlbnMuT1BTX0FVVEhFTlRJQ0FUSU9OKSkgewotICAgICAgICAgICAgY3R4LndyaXRlKGJ1aWxkUmVzcG9uc2UuYXBwbHkoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHJlcXVlc3RNZXNzYWdlKSkuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdC5nZXQoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjdHgud3JpdGUoYnVpbGRSZXNwb25zZS5hcHBseShSZXNwb25zZU1lc3NhZ2UuYnVpbGQob3JpZ2luYWxSZXF1ZXN0LmdldCgpKSkuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlZmVycmVkUmVxdWVzdHMuZ2V0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgZGVmZXJyZWRSZXF1ZXN0cwotICAgICAgICAgICAgICAgICAgICAuZ2V0QW5kU2V0KG51bGwpLmdldFZhbHVlKCkuc3RyZWFtKCkKLSAgICAgICAgICAgICAgICAgICAgLm1hcChSZXNwb25zZU1lc3NhZ2U6OmJ1aWxkKQotICAgICAgICAgICAgICAgICAgICAubWFwKGJ1aWxkUmVzcG9uc2UpCi0gICAgICAgICAgICAgICAgICAgIC5tYXAoUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXI6OmNyZWF0ZSkKLSAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goY3R4Ojp3cml0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjdHguZmx1c2goKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEluZXRBZGRyZXNzIGdldFJlbW90ZUluZXRBZGRyZXNzKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgpIHsKLSAgICAgICAgZmluYWwgQ2hhbm5lbCBjaGFubmVsID0gY3R4LmNoYW5uZWwoKTsKLQotICAgICAgICBpZiAobnVsbCA9PSBjaGFubmVsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgZmluYWwgU29ja2V0QWRkcmVzcyBnZW5lcmljU29ja2V0QWRkciA9IGNoYW5uZWwucmVtb3RlQWRkcmVzcygpOwotCi0gICAgICAgIGlmICghKGdlbmVyaWNTb2NrZXRBZGRyIGluc3RhbmNlb2YgSW5ldFNvY2tldEFkZHJlc3MpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuICgoSW5ldFNvY2tldEFkZHJlc3MpIGdlbmVyaWNTb2NrZXRBZGRyKS5nZXRBZGRyZXNzKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1NlcnZlclNlcmlhbGl6ZXJzLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2VydmVyU2VyaWFsaXplcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0NWJmZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2VydmVyU2VyaWFsaXplcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5TWFwcGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLWZpbmFsIGNsYXNzIFNlcnZlclNlcmlhbGl6ZXJzIHsKLQotICAgIHByaXZhdGUgU2VydmVyU2VyaWFsaXplcnMoKSB7fQotCi0gICAgLyoqCi0gICAgICogRGVmYXVsdCBiaW5hcnkgc2VyaWFsaXplciB1c2VkIGJ5IHRoZSBzZXJ2ZXIgd2hlbiB0aGUgc2VyaWFsaXplciByZXF1ZXN0ZWQgZG9lcyBub3QgbWF0Y2ggd2hhdCBpcyBvbiB0aGUgc2VydmVyLgotICAgICAqIFRoaXMgZGVmYXVsdHMgdG8gR3JhcGhCaW5hcnkgMS4wLgotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjxHcmFwaEJpbmFyeU1hcHBlcj4gREVGQVVMVF9CSU5BUllfU0VSSUFMSVpFUiA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgYmluYXJ5IHNlcmlhbGl6ZXIgdXNlZCBieSB0aGUgc2VydmVyIHdoZW4gdGhlIHNlcmlhbGl6ZXIgcmVxdWVzdGVkIGRvZXMgbm90IG1hdGNoIHdoYXQgaXMgb24gdGhlIHNlcnZlci4KLSAgICAgKiBUaGlzIGRlZmF1bHRzIHRvIEdyYXBoU09OIDMuMC4KLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8T2JqZWN0TWFwcGVyPiBERUZBVUxUX1RFWFRfU0VSSUFMSVpFUiA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoKTsKLQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1Nlc3Npb24uamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9TZXNzaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2MzdkNzUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1Nlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBjb20uY29kYWhhbGUubWV0cmljcy5UaW1lcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JlbWxpblNlcnZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLk1ldHJpY01hbmFnZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuUmVqZWN0ZWRFeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRnV0dXJlOwotCi1pbXBvcnQgc3RhdGljIGNvbS5jb2RhaGFsZS5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5Lm5hbWU7Ci0KLS8qKgotICogUmVxdWVzdHMgdGhhdCBhcnJpdmUgdGhyb3VnaCB0aGUge0BsaW5rIFVuaWZpZWRIYW5kbGVyfSBhcmUgYWxsIHByb2Nlc3NlZCB3aXRoaW4gYSB7QGNvZGUgU2Vzc2lvbn0gaW1wbGVtZW50YXRpb24uCi0gKiBBIHNlc3Npb24gYWNjZXB0cyBhIHtAbGluayBTZXNzaW9uVGFza30gYXMgdGhlIHdvcmsgaXQgaXMgbWVhbnQgdG8gcGVyZm9ybSBhbmQgdGhvc2UgdGFza3MgYXJlIGNvbnN0cnVjdGVkIGZyb20KLSAqIGluY29taW5nIHJlcXVlc3RzLiBBIHNlc3Npb24gbWF5IGJlIGFzIHNob3J0LWxpdmVkIGFzIHByb2Nlc3NpbmcgYSBzaW5nbGUgdGFzayBiZWZvcmUgZXhpdGluZywgYXMgd2l0aCB0aGUKLSAqIHtAbGluayBTaW5nbGVUYXNrU2Vzc2lvbn0gb3IgbWF5IGJlIGxvbmdlci1saXZlZCBieSBoYW5kbGluZyBtdWx0aXBsZSB0YXNrcywgYXMgd2l0aCB0aGUge0BsaW5rIE11bHRpVGFza1Nlc3Npb259LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNlc3Npb24gZXh0ZW5kcyBSdW5uYWJsZSB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFRpbWVyIHRyYXZlcnNhbE9wVGltZXIgPSBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldFRpbWVyKG5hbWUoR3JlbWxpblNlcnZlci5jbGFzcywgIm9wIiwgInRyYXZlcnNhbCIpKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFRpbWVyIGV2YWxPcFRpbWVyID0gTWV0cmljTWFuYWdlci5JTlNUQU5DRS5nZXRUaW1lcihuYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJvcCIsICJldmFsIikpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgaWRlbnRpZmllciBmb3IgdGhlIHNlc3Npb24uCi0gICAgICovCi0gICAgU3RyaW5nIGdldFNlc3Npb25JZCgpOwotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIHRhc2sgZm9yIHNlc3Npb24gdG8gY29tcGxldGUuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uIGlmIHRoZSB0YXNrIGNhbm5vdCBiZSBxdWV1ZWQKLSAgICAgKi8KLSAgICBib29sZWFuIHN1Ym1pdFRhc2soZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2spIHRocm93cyBSZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIFNldHMgYSByZWZlcmVuY2UgdG8gdGhlIGpvYiB0aGF0IHdpbGwgY2FuY2VsIHRoaXMgc2Vzc2lvbiBpZiBpdCBleGNlZWRzIGl0cyB0aW1lb3V0IHBlcmlvZC4KLSAgICAgKi8KLSAgICB2b2lkIHNldFNlc3Npb25DYW5jZWxGdXR1cmUoZmluYWwgU2NoZWR1bGVkRnV0dXJlPD8+IGYpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgam9iIGl0c2VsZiB0aGF0IGlzIHJ1bm5pbmcgdGhpcyBzZXNzaW9uLgotICAgICAqLwotICAgIHZvaWQgc2V0U2Vzc2lvbkZ1dHVyZShmaW5hbCBGdXR1cmU8Pz4gZik7Ci0KLSAgICAvKioKLSAgICAgKiBQcm92aWRlcyBhIGdlbmVyYWwgd2F5IHRvIGludGVycnVwdCB0aGUgc2Vzc2lvbiBieSB3YXkgb2YgYSB0aW1lb3V0LgotICAgICAqCi0gICAgICogQHBhcmFtIHRpbWVvdXQgdGhlIGxlbmd0aCBvZiB0aW1lIHRoYXQgcGFzc2VkIGZvciB0aGUgdGltZW91dCB0byBoYXZlIHRyaWdnZXJlZAotICAgICAqIEBwYXJhbSBjYXVzZWRCeVNlc3Npb24gZGV0ZXJtaW5lcyBpZiB0aGUgdGltZW91dCB0cmlnZ2VyZWQgZHVlIHRvIGEgcGFydGljdWxhciByZXF1ZXN0IChpLmUuIHtAY29kZSBmYWxzZX0gb3IKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2Ugb2YgdGhlIHNlc3Npb24gbGlmZXRpbWUgKGkuZS4ge0Bjb2RlIHRydWV9Ci0gICAgICovCi0gICAgdm9pZCB0cmlnZ2VyVGltZW91dChmaW5hbCBsb25nIHRpbWVvdXQsIGJvb2xlYW4gY2F1c2VkQnlTZXNzaW9uKTsKLQotICAgIC8qKgotICAgICAqIERldGVybWluZXMgaWYgdGhlIHN1cHBsaWVkIHtAY29kZSBDaGFubmVsfSBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBib3VuZCB0byB0aGUge0Bjb2RlIFNlc3Npb259LgotICAgICAqLwotICAgIGJvb2xlYW4gaXNCb3VuZFRvKGZpbmFsIENoYW5uZWwgY2hhbm5lbCk7Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgc2Vzc2lvbiBjYW4gYWNjZXB0IGFkZGl0aW9uYWwgdGFza3Mgb3Igbm90LgotICAgICAqLwotICAgIGJvb2xlYW4gaXNBY2NlcHRpbmdUYXNrcygpOwotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2Vzc2lvbkV4Y2VwdGlvbi5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1Nlc3Npb25FeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg0Mzg0Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2Vzc2lvbkV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLQotLyoqCi0gKiBBbiBleGNlcHRpb24gdGhhdCBob2xkcyB0aGUgZXJyb3ItcmVsYXRlZCB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfSB3aGljaCBpcyBtZWFudCB0byBiZSByZXR1cm5lZCB0byB0aGUgY2FsbGluZwotICogY2xpZW50LgotICoKLSAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIG5vdCByZXBsYWNlZC4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBjbGFzcyBTZXNzaW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICBwcml2YXRlIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2U7Ci0KLSAgICBwdWJsaWMgU2Vzc2lvbkV4Y2VwdGlvbihmaW5hbCBTdHJpbmcgbWVzc2FnZSwgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSkgewotICAgICAgICBzdXBlcihtZXNzYWdlKTsKLSAgICAgICAgdGhpcy5yZXNwb25zZU1lc3NhZ2UgPSByZXNwb25zZU1lc3NhZ2U7Ci0gICAgfQotCi0gICAgcHVibGljIFNlc3Npb25FeGNlcHRpb24oZmluYWwgU3RyaW5nIG1lc3NhZ2UsIGZpbmFsIFRocm93YWJsZSBjYXVzZSwgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSkgewotICAgICAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7Ci0gICAgICAgIHRoaXMucmVzcG9uc2VNZXNzYWdlID0gcmVzcG9uc2VNZXNzYWdlOwotICAgIH0KLQotICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgZ2V0UmVzcG9uc2VNZXNzYWdlKCkgewotICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25zZU1lc3NhZ2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1Nlc3Npb25UYXNrLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2Vzc2lvblRhc2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M1ZmUyZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2Vzc2lvblRhc2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JhcGhNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLk9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotCi0vKioKLSAqIEEge0Bjb2RlIFNlc3Npb25UYXNrfSBlcXVhdGVzIHRvIGEgcGFydGljdWxhciBpbmNvbWluZyByZXF1ZXN0IHRvIHRoZSB7QGxpbmsgVW5pZmllZEhhbmRsZXJ9IGFuZCBpcyBhbmFsb2dvdXMgdG8KLSAqIGEge0BsaW5rIENvbnRleHR9IGluIHRoZSB7QGxpbmsgT3BQcm9jZXNzb3J9IGFwcHJvYWNoIHRvIGhhbmRsaW5nIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuCi0gKgotICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgbm90IHJlcGxhY2VkLgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGNsYXNzIFNlc3Npb25UYXNrIGV4dGVuZHMgQ29udGV4dCB7Ci0gICAgcHVibGljIFNlc3Npb25UYXNrKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LAotICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncywgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgR3JlbWxpbkV4ZWN1dG9yIGdyZW1saW5FeGVjdXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSkgewotICAgICAgICBzdXBlcihyZXF1ZXN0TWVzc2FnZSwgY3R4LCBzZXR0aW5ncywgZ3JhcGhNYW5hZ2VyLCBncmVtbGluRXhlY3V0b3IsIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1NpbmdsZVRhc2tTZXNzaW9uLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2luZ2xlVGFza1Nlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxOTBhYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU2luZ2xlVGFza1Nlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVHJhbnNhY3Rpb247Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRNYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuUmVqZWN0ZWRFeGVjdXRpb25FeGNlcHRpb247Ci0KLS8qKgotICogQSBzaW1wbGUge0BsaW5rIFNlc3Npb259IGltcGxlbWVudGF0aW9uIHRoYXQgYWNjZXB0cyBvbmUgcmVxdWVzdCwgcHJvY2Vzc2VzIGl0IGFuZCBleGl0cy4KLSAqCi0gKiBAZGVwcmVjYXRlZCBBcyBvZiByZWxlYXNlIDMuOC4wLCBub3QgcmVwbGFjZWQuCi0gKi8KLUBEZXByZWNhdGVkCi1wdWJsaWMgY2xhc3MgU2luZ2xlVGFza1Nlc3Npb24gZXh0ZW5kcyBBYnN0cmFjdFNlc3Npb24gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihTaW5nbGVUYXNrU2Vzc2lvbi5jbGFzcyk7Ci0gICAgcHJvdGVjdGVkIGZpbmFsIFNlc3Npb25UYXNrIG9ubHlTZXNzaW9uVGFzazsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSB7QGNvZGUgU2luZ2xlVGFza1Nlc3Npb259IHRoYXQgaGFzIHRoZSB0YXNrIHRvIGV4ZWN1dGUgc3VwcGxpZWQgb24gY29uc3RydWN0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBTaW5nbGVUYXNrU2Vzc2lvbihmaW5hbCBTZXNzaW9uVGFzayBvbmx5U2Vzc2lvblRhc2ssIGZpbmFsIFN0cmluZyBzZXNzaW9uSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbmN1cnJlbnRNYXA8U3RyaW5nLCBTZXNzaW9uPiBzZXNzaW9ucykgewotICAgICAgICBzdXBlcihvbmx5U2Vzc2lvblRhc2ssIHNlc3Npb25JZCx0cnVlLCBzZXNzaW9ucyk7Ci0gICAgICAgIHRoaXMub25seVNlc3Npb25UYXNrID0gb25seVNlc3Npb25UYXNrOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSB7QGNvZGUgU2luZ2xlV29ya2VyfSBjYW4gb25seSBwcm9jZXNzIG9uZSByZXF1ZXN0IHNvIHRoZSBpbml0aWFsIGNvbnN0cnVjdGlvbiBvZiBpdCBhbHJlYWR5IGhhcyB0aGUKLSAgICAgKiByZXF1ZXN0IGluIGl0IGFuZCBubyBtb3JlIGNhbiBiZSBhZGRlZCwgdGhlcmVmb3JlIHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm4ge0Bjb2RlIGZhbHNlfS4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FjY2VwdGluZ1Rhc2tzKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2VuZFRpbWVvdXRSZXNwb25zZUZvclVuY29tbWVuY2VkVGFzaygpIHsKLSAgICAgICAgb25seVNlc3Npb25UYXNrLnNlbmRUaW1lb3V0UmVzcG9uc2UoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIG9ubHkgdGFrZSBhIHNpbmdsZSB7QGxpbmsgU2Vzc2lvblRhc2t9IG9uIGNvbnN0cnVjdGlvbiAtIG5vIGFkZGl0aW9uYWwgdGFza3MgY2FuIGJlCi0gICAgICogc3VibWl0dGVkLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHN1Ym1pdFRhc2soZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2spIHRocm93cyBSZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU2luZ2xlV29ya2VyIGRvZXNuJ3QgYWNjZXB0IHRhc2tzIGJleW9uZCB0aGUgb25lIHByb3ZpZGVkIHRvIHRoZSBjb25zdHJ1Y3RvciIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc2Vzc2lvblRhc2tTdGFydGVkLnNldCh0cnVlKTsKLQotICAgICAgICAvLyBhbGxvdyB0aGUgU2Vzc2lvbiB0byBrbm93IGFib3V0IHRoZSB0aHJlYWQgdGhhdCBpcyBydW5uaW5nIGl0IC0gdGhlIHRocmVhZCByZWFsbHkgb25seSBoYXMgcmVsZXZhbmNlCi0gICAgICAgIC8vIG9uY2UgdGhlIHNlc3Npb24gaGFzIHN0YXJ0ZWQuCi0gICAgICAgIHRoaXMuc2Vzc2lvblRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHN0YXJ0VHJhbnNhY3Rpb24ob25seVNlc3Npb25UYXNrKTsKLSAgICAgICAgICAgIHByb2Nlc3Mob25seVNlc3Npb25UYXNrKTsKLSAgICAgICAgfSBjYXRjaCAoU2Vzc2lvbkV4Y2VwdGlvbiB3ZSkgewotICAgICAgICAgICAgLy8gaWYgdGhlIGNsb3NlIHJlYXNvbiBpc24ndCBhbHJlYWR5IHNldCB0aGVuIHRoaW5ncyBzdG9wcGVkIGR1cmluZyBncmVtbGluIGV4ZWN1dGlvbiBzb21ld2hlcmUgYW5kIG5vdAotICAgICAgICAgICAgLy8gbW9yZSBleHRlcm5hbCBpc3N1ZXMgbGlrZSBjaGFubmVsIGNsb3NlIG9yIHRpbWVvdXRzLgotICAgICAgICAgICAgY2xvc2VSZWFzb24uY29tcGFyZUFuZFNldChudWxsLCBDbG9zZVJlYXNvbi5QUk9DRVNTSU5HX0VYQ0VQVElPTik7Ci0KLSAgICAgICAgICAgIGxvZ2dlci53YXJuKHdlLmdldE1lc3NhZ2UoKSwgd2UpOwotCi0gICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBhbHJlYWR5IHJvbGxlZGJhY2sgLSB0aGlzIGlzIGEgc2FmZXR5IHZhbHZlCi0gICAgICAgICAgICBjbG9zZVRyYW5zYWN0aW9uU2FmZWx5KG9ubHlTZXNzaW9uVGFzaywgVHJhbnNhY3Rpb24uU3RhdHVzLlJPTExCQUNLKTsKLQotICAgICAgICAgICAgb25seVNlc3Npb25UYXNrLndyaXRlQW5kRmx1c2god2UuZ2V0UmVzcG9uc2VNZXNzYWdlKCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2xvc2VSZWFzb24uY29tcGFyZUFuZFNldChudWxsLCBDbG9zZVJlYXNvbi5FWElUX1BST0NFU1NJTkcpOwotICAgICAgICAgICAgY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCIlcyAtIHNlc3Npb246ICVzIiwgU2luZ2xlVGFza1Nlc3Npb24uY2xhc3MuZ2V0U2ltcGxlTmFtZSgpLCBnZXRTZXNzaW9uSWQoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1N0YXRlS2V5LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU3RhdGVLZXkuamF2YQppbmRleCAyZWIyYmM4Li43ODQ5OTUxIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU3RhdGVLZXkuamF2YQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvU3RhdGVLZXkuamF2YQpAQCAtMTgsMTYgKzE4LDEzIEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKIAotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50dXBsZS5QYWlyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLkF1dGhlbnRpY2F0ZWRVc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb247CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJzOwogaW1wb3J0IGlvLm5ldHR5LnV0aWwuQXR0cmlidXRlS2V5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLkF1dGhlbnRpY2F0ZWRVc2VyOworaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlBhaXI7CiAKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlVGltZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIAogLyoqCiAgKiBLZXlzIHVzZWQgaW4gdGhlIHZhcmlvdXMgaGFuZGxlcnMgdG8gc3RvcmUgc3RhdGUgaW4gdGhlIHBpcGVsaW5lLgpAQCAtNDEsMzIgKzM4LDIyIEBACiAgICAgLyoqCiAgICAgICogVGhlIGtleSBmb3IgdGhlIGN1cnJlbnQgc2VyaWFsaXplciByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZUtleTxNZXNzYWdlU2VyaWFsaXplcjw/Pj4gU0VSSUFMSVpFUiA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJzZXJpYWxpemVyIik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8UGFpcjxTdHJpbmcsIE1lc3NhZ2VTZXJpYWxpemVyPD8+Pj4gU0VSSUFMSVpFUiA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJzZXJpYWxpemVyIik7CiAKICAgICAvKioKLSAgICAgKiBUaGUga2V5IHRvIGluZGljYXRlIGlmIHRoZSBzZXJpYWxpemVyIHNob3VsZCB1c2UgaXRzIGJpbmFyeSBmb3JtYXQuCisgICAgICogVGhlIGtleSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdCBoZWFkZXJzLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PEJvb2xlYW4+IFVTRV9CSU5BUlkgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigidXNlQmluYXJ5Iik7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8SHR0cEhlYWRlcnM+IFJFUVVFU1RfSEVBREVSUyA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJyZXF1ZXN0SGVhZGVycyIpOwogCiAgICAgLyoqCi0gICAgICogVGhlIGtleSBmb3IgdGhlIGN1cnJlbnQge0BsaW5rIFNlc3Npb259IG9iamVjdC4KKyAgICAgKiBUaGUga2V5IGZvciB0aGUgY3VycmVudCByZXF1ZXN0IElELgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFNlc3Npb24+IFNFU1NJT04gPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigic2Vzc2lvbiIpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFVVSUQ+IFJFUVVFU1RfSUQgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigicmVxdWVzdElkIik7CiAKICAgICAvKioKLSAgICAgKiBUaGUga2V5IGZvciB0aGUgY3VycmVudCBTQVNMIG5lZ290aWF0b3IuCisgICAgICogVGhlIGtleSBmb3Igd2hldGhlciBhIHtAbGluayBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlfSBoYXMgYmVlbiBzZW50IGZvciB0aGUgY3VycmVudCByZXNwb25zZS4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZUtleTxBdXRoZW50aWNhdG9yLlNhc2xOZWdvdGlhdG9yPiBORUdPVElBVE9SID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoIm5lZ290aWF0b3IiKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBrZXkgZm9yIHRoZSBjdXJyZW50IHJlcXVlc3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8UmVxdWVzdE1lc3NhZ2U+IFJFUVVFU1RfTUVTU0FHRSA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJyZXF1ZXN0Iik7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUga2V5IGZvciB0aGUgZGVmZXJyZWQgcmVxdWVzdHMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8UGFpcjxMb2NhbERhdGVUaW1lLCBMaXN0PFJlcXVlc3RNZXNzYWdlPj4+IERFRkVSUkVEX1JFUVVFU1RfTUVTU0FHRVMgPSBBdHRyaWJ1dGVLZXkudmFsdWVPZigiZGVmZXJyZWRSZXF1ZXN0cyIpOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PEJvb2xlYW4+IEhUVFBfUkVTUE9OU0VfU0VOVCA9IEF0dHJpYnV0ZUtleS52YWx1ZU9mKCJyZXNwb25zZVNlbnQiKTsKIAogICAgIC8qKgogICAgICAqIFRoZSBrZXkgZm9yIHRoZSBjdXJyZW50IHtAbGluayBBdXRoZW50aWNhdGVkVXNlcn0uCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvVHJhbnNhY3Rpb25NYW5hZ2VyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvVHJhbnNhY3Rpb25NYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwOGE1OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9UcmFuc2FjdGlvbk1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmFwaE1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JlbWxpblNlcnZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLk1ldHJpY01hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50TWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKKworaW1wb3J0IHN0YXRpYyBjb20uY29kYWhhbGUubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5uYW1lOworCisvKioKKyAqIFRyYWNrcyBhY3RpdmUgdHJhbnNhY3Rpb25zIGFuZCByZXR1cm5zIHJlZmVyZW5jZXMgb2YgdGhlbS4KKyAqLworcHVibGljIGNsYXNzIFRyYW5zYWN0aW9uTWFuYWdlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFRyYW5zYWN0aW9uTWFuYWdlci5jbGFzcyk7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbmN1cnJlbnRNYXA8U3RyaW5nLCBVbm1hbmFnZWRUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb25zID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgbG9uZyB0cmFuc2FjdGlvblRpbWVvdXRNczsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zOworICAgIHByaXZhdGUgZmluYWwgbG9uZyBwZXJHcmFwaENsb3NlTXM7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IFRyYW5zYWN0aW9uTWFuYWdlciB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgU2NoZWR1bGVyIGZvciB0aW1lb3V0IG1hbmFnZW1lbnQKKyAgICAgKiBAcGFyYW0gZ3JhcGhNYW5hZ2VyIFRoZSBncmFwaCBtYW5hZ2VyIGZvciBhY2Nlc3NpbmcgdHJhdmVyc2FsIHNvdXJjZXMKKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25UaW1lb3V0TXMgVGltZW91dCBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIGF1dG8tcm9sbGJhY2sKKyAgICAgKiBAcGFyYW0gbWF4Q29uY3VycmVudFRyYW5zYWN0aW9ucyBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRyYW5zYWN0aW9ucyBhbGxvd2VkCisgICAgICovCisgICAgcHVibGljIFRyYW5zYWN0aW9uTWFuYWdlcihmaW5hbCBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2Ugc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgdHJhbnNhY3Rpb25UaW1lb3V0TXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWF4Q29uY3VycmVudFRyYW5zYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgcGVyR3JhcGhDbG9zZU1zKSB7CisgICAgICAgIHRoaXMuc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlID0gc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOworICAgICAgICB0aGlzLmdyYXBoTWFuYWdlciA9IGdyYXBoTWFuYWdlcjsKKyAgICAgICAgdGhpcy50cmFuc2FjdGlvblRpbWVvdXRNcyA9IHRyYW5zYWN0aW9uVGltZW91dE1zOworICAgICAgICB0aGlzLm1heENvbmN1cnJlbnRUcmFuc2FjdGlvbnMgPSBtYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zOworICAgICAgICB0aGlzLnBlckdyYXBoQ2xvc2VNcyA9IHBlckdyYXBoQ2xvc2VNczsKKworICAgICAgICBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldEdhdWdlKHRyYW5zYWN0aW9uczo6c2l6ZSwgbmFtZShHcmVtbGluU2VydmVyLmNsYXNzLCAidHJhbnNhY3Rpb25zIikpOworICAgICAgICBsb2dnZXIuaW5mbygiVHJhbnNhY3Rpb25NYW5hZ2VyIGluaXRpYWxpemVkIHdpdGggdGltZW91dD17fW1zLCBtYXhUcmFuc2FjdGlvbnM9e30iLAorICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uVGltZW91dE1zLCBtYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBVbm1hbmFnZWRUcmFuc2FjdGlvbn0gZm9yIHRoZSBzcGVjaWZpZWQgdHJhdmVyc2FsIHNvdXJjZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0cmF2ZXJzYWxTb3VyY2VOYW1lIFRoZSB0cmF2ZXJzYWwgc291cmNlIGFsaWFzIChlLmcuLCAiZyIpCisgICAgICogQHJldHVybiBUaGUgbmV3IHtAbGluayBVbm1hbmFnZWRUcmFuc2FjdGlvbn0sIHJlYWR5IGZvciB0YXNrIHN1Ym1pc3Npb24KKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiBtYXggdHJhbnNhY3Rpb25zIGV4Y2VlZGVkCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdHJhdmVyc2FsIHNvdXJjZSBub3QgZm91bmQKKyAgICAgKiBAdGhyb3dzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIGlmIHRoZSBncmFwaCBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zYWN0aW9ucworICAgICAqLworICAgIHB1YmxpYyBVbm1hbmFnZWRUcmFuc2FjdGlvbiBjcmVhdGUoZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZU5hbWUpIHsKKyAgICAgICAgaWYgKHRyYW5zYWN0aW9ucy5zaXplKCkgPj0gbWF4Q29uY3VycmVudFRyYW5zYWN0aW9ucykgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiTWF4aW11bSBjb25jdXJyZW50IHRyYW5zYWN0aW9ucyBleGNlZWRlZCAoIiArIG1heENvbmN1cnJlbnRUcmFuc2FjdGlvbnMgKyAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIHRzID0gZ3JhcGhNYW5hZ2VyLmdldFRyYXZlcnNhbFNvdXJjZSh0cmF2ZXJzYWxTb3VyY2VOYW1lKTsKKyAgICAgICAgaWYgKHRzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRyYXZlcnNhbCBzb3VyY2Ugbm90IGZvdW5kOiAiICsgdHJhdmVyc2FsU291cmNlTmFtZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXRzLmdldEdyYXBoKCkuZmVhdHVyZXMoKS5ncmFwaCgpLnN1cHBvcnRzVHJhbnNhY3Rpb25zKCkpIHsKKyAgICAgICAgICAgIHRocm93IEdyYXBoLkV4Y2VwdGlvbnMudHJhbnNhY3Rpb25zTm90U3VwcG9ydGVkKCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBVbm1hbmFnZWRUcmFuc2FjdGlvbiB0eEN0eCA9IGNyZWF0ZVRyYW5zYWN0aW9uQ29udGV4dCh0cy5nZXRHcmFwaCgpKTsKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCJUcmFuc2FjdGlvbiB7fSBjcmVhdGVkIGZvciBzb3VyY2Uge30iLCB0eEN0eC5nZXRUcmFuc2FjdGlvbklkKCksIHRyYXZlcnNhbFNvdXJjZU5hbWUpOworICAgICAgICByZXR1cm4gdHhDdHg7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIHRyYW5zYWN0aW9uIGZyb20gdGhlIGFjdGl2ZSB0cmFuc2FjdGlvbnMgbWFwLiBDYWxsZWQgd2hlbiBhIHRyYW5zYWN0aW9uIGlzCisgICAgICogY29tbWl0dGVkLCByb2xsZWQgYmFjaywgb3Igb3RoZXJ3aXNlIGNsb3NlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZCBUaGUgdHJhbnNhY3Rpb24gSUQgdG8gcmVtb3ZlCisgICAgICovCisgICAgcHVibGljIHZvaWQgZGVzdHJveShmaW5hbCBTdHJpbmcgaWQpIHsKKyAgICAgICAgdHJhbnNhY3Rpb25zLnJlbW92ZShpZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHVuaXF1ZSB0cmFuc2FjdGlvbiBJRCwgcmV0cnlpbmcgb24gdGhlIHVubGlrZWx5IFVVSUQgY29sbGlzaW9uLiBUaGUgbmV3bHkgY3JlYXRlZAorICAgICAqIHtAbGluayBVbm1hbmFnZWRUcmFuc2FjdGlvbn0gaXMgaW5zZXJ0ZWQgaW50byB0aGUgdHJhbnNhY3Rpb25zIG1hcC4KKyAgICAgKi8KKyAgICBwcml2YXRlIFVubWFuYWdlZFRyYW5zYWN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uQ29udGV4dChmaW5hbCBHcmFwaCBncmFwaCkgeworICAgICAgICBTdHJpbmcgdHhJZDsKKyAgICAgICAgVW5tYW5hZ2VkVHJhbnNhY3Rpb24gY3R4OworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHR4SWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpOworICAgICAgICAgICAgY3R4ID0gbmV3IFVubWFuYWdlZFRyYW5zYWN0aW9uKAorICAgICAgICAgICAgICAgICAgICB0eElkLAorICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAgICAgICAgICBncmFwaCwKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblRpbWVvdXRNcywKKyAgICAgICAgICAgICAgICAgICAgcGVyR3JhcGhDbG9zZU1zCisgICAgICAgICAgICApOworICAgICAgICB9IHdoaWxlICh0cmFuc2FjdGlvbnMucHV0SWZBYnNlbnQodHhJZCwgY3R4KSAhPSBudWxsKTsKKworICAgICAgICByZXR1cm4gY3R4OworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYW4gZXhpc3Rpbmcge0BsaW5rIFVubWFuYWdlZFRyYW5zYWN0aW9ufSBieSBJRC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbklkIFRoZSB0cmFuc2FjdGlvbiBJRCB0byBsb29rIHVwCisgICAgICogQHJldHVybiBPcHRpb25hbCBjb250YWluaW5nIHRoZSB7QGxpbmsgVW5tYW5hZ2VkVHJhbnNhY3Rpb259IGlmIGZvdW5kLCBlbXB0eSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwdWJsaWMgT3B0aW9uYWw8VW5tYW5hZ2VkVHJhbnNhY3Rpb24+IGdldChmaW5hbCBTdHJpbmcgdHJhbnNhY3Rpb25JZCkgeworICAgICAgICBpZiAobnVsbCA9PSB0cmFuc2FjdGlvbklkKSByZXR1cm4gT3B0aW9uYWwuZW1wdHkoKTsgLy8gUHJldmVudCBOUEUgZnJvbSBjYWxsaW5nIGdldChudWxsKSBvbiBDb25jdXJyZW50SGFzaE1hcAorICAgICAgICByZXR1cm4gT3B0aW9uYWwub2ZOdWxsYWJsZSh0cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSB0cmFuc2FjdGlvbnMuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBjb3VudCBvZiBhY3RpdmUgdHJhbnNhY3Rpb25zCisgICAgICovCisgICAgcHVibGljIGludCBnZXRBY3RpdmVUcmFuc2FjdGlvbkNvdW50KCkgeworICAgICAgICByZXR1cm4gdHJhbnNhY3Rpb25zLnNpemUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaHV0cyBkb3duIHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLCByb2xsaW5nIGJhY2sgYWxsIGFjdGl2ZSB0cmFuc2FjdGlvbnMuCisgICAgICogPHA+CisgICAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCBkdXJpbmcgc2VydmVyIHNodXRkb3duIHRvIGVuc3VyZSBhbGwgdHJhbnNhY3Rpb25zCisgICAgICogYXJlIHByb3Blcmx5IGNsZWFuZWQgdXAuIEl0IGJsb2NrcyB1bnRpbCBhbGwgcm9sbGJhY2tzIGNvbXBsZXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNodXRkb3duKCkgeworICAgICAgICBmaW5hbCBpbnQgYWN0aXZlQ291bnQgPSB0cmFuc2FjdGlvbnMuc2l6ZSgpOworICAgICAgICBsb2dnZXIuaW5mbygiU2h1dHRpbmcgZG93biBUcmFuc2FjdGlvbk1hbmFnZXIgd2l0aCB7fSBhY3RpdmUgdHJhbnNhY3Rpb25zIiwgYWN0aXZlQ291bnQpOworCisgICAgICAgIGlmIChhY3RpdmVDb3VudCA9PSAwKSByZXR1cm47CisKKyAgICAgICAgLy8gUm9sbCBiYWNrIGFsbCBhY3RpdmUgdHJhbnNhY3Rpb25zCisgICAgICAgIHRyYW5zYWN0aW9ucy52YWx1ZXMoKS5mb3JFYWNoKHRyYW5zYWN0aW9uIC0+IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uY2xvc2UoZmFsc2UpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiRXJyb3Igcm9sbGluZyBiYWNrIHRyYW5zYWN0aW9uIHt9IGR1cmluZyBzaHV0ZG93bjoge30iLAorICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5nZXRUcmFuc2FjdGlvbklkKCksIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgdHJhbnNhY3Rpb25zLmNsZWFyKCk7CisgICAgICAgIGxvZ2dlci5pbmZvKCJUcmFuc2FjdGlvbk1hbmFnZXIgc2h1dGRvd24gY29tcGxldGUiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvVW5pZmllZEhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9VbmlmaWVkSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjQxMWNlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9VbmlmaWVkSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIudGltZW91dC5JZGxlU3RhdGU7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci50aW1lb3V0LklkbGVTdGF0ZUV2ZW50OwotaW1wb3J0IGlvLm5ldHR5LnV0aWwuUmVmZXJlbmNlQ291bnRVdGlsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUG9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JhcGhNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuVW5pZmllZENoYW5uZWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudEhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29uY3VycmVudE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRGdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKgotICogSGFuZGxlciBmb3Igd2Vic29ja2V0cyB0byBiZSB1c2VkIHdpdGggdGhlIHtAbGluayBVbmlmaWVkQ2hhbm5lbGl6ZXJ9LgotICoKLSAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIG5vdCByZXBsYWNlZC4KLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1ARGVwcmVjYXRlZAotcHVibGljIGNsYXNzIFVuaWZpZWRIYW5kbGVyIGV4dGVuZHMgU2ltcGxlQ2hhbm5lbEluYm91bmRIYW5kbGVyPFJlcXVlc3RNZXNzYWdlPiB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFVuaWZpZWRIYW5kbGVyLmNsYXNzKTsKLQotICAgIHByb3RlY3RlZCBmaW5hbCBTZXR0aW5ncyBzZXR0aW5nczsKLSAgICBwcm90ZWN0ZWQgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlcjsKLSAgICBwcm90ZWN0ZWQgZmluYWwgR3JlbWxpbkV4ZWN1dG9yIGdyZW1saW5FeGVjdXRvcjsKLSAgICBwcm90ZWN0ZWQgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLSAgICBwcm90ZWN0ZWQgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIHNlc3Npb25FeGVjdXRvcjsKLSAgICBwcm90ZWN0ZWQgZmluYWwgQ2hhbm5lbGl6ZXIgY2hhbm5lbGl6ZXI7Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgQ29uY3VycmVudE1hcDxTdHJpbmcsIFNlc3Npb24+IHNlc3Npb25zID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgdGhlIGZ1bGwgc2V0IG9mIGludmFsaWQgYmluZGluZyBrZXlzLiAgSXQgaXMgZGVwZW5kZW50IG9uIHRoZSBzdGF0aWMgaW1wb3J0cyBtYWRlIHRvCi0gICAgICogR3JlbWxpbiBTZXJ2ZXIuICBUaGlzIHNob3VsZCBnZXQgcmlkIG9mIHRoZSB3b3JzdCBvZmZlbmRlcnMgdGhvdWdoIGFuZCBwcm92aWRlIGEgZ29vZCBtZXNzYWdlIGJhY2sgdG8gdGhlCi0gICAgICogY2FsbGluZyBjbGllbnQuCi0gICAgICogPHAvPgotICAgICAqIFVzZSBvZiB7QGNvZGUgdG9VcHBlckNhc2UoKX0gb24gdGhlIGFjY2Vzc29yIHZhbHVlcyBvZiB7QGxpbmsgVH0gc29sdmVzIGFuIGlzc3VlIHdoZXJlIHRoZSB7QGNvZGUgU2NyaXB0RW5naW5lfQotICAgICAqIGlnbm9yZXMgcHJpdmF0ZSBzY29wZSBvbiB7QGxpbmsgVH0gYW5kIGltcG9ydHMgc3RhdGljIGZpZWxkcy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IElOVkFMSURfQklORElOR1NfS0VZUyA9IG5ldyBIYXNoU2V0PD4oKTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGRBbGwoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBULmlkLm5hbWUoKSwgVC5rZXkubmFtZSgpLAotICAgICAgICAgICAgICAgIFQubGFiZWwubmFtZSgpLCBULnZhbHVlLm5hbWUoKSwKLSAgICAgICAgICAgICAgICBULmlkLmdldEFjY2Vzc29yKCksIFQua2V5LmdldEFjY2Vzc29yKCksCi0gICAgICAgICAgICAgICAgVC5sYWJlbC5nZXRBY2Nlc3NvcigpLCBULnZhbHVlLmdldEFjY2Vzc29yKCksCi0gICAgICAgICAgICAgICAgVC5pZC5nZXRBY2Nlc3NvcigpLnRvVXBwZXJDYXNlKCksIFQua2V5LmdldEFjY2Vzc29yKCkudG9VcHBlckNhc2UoKSwKLSAgICAgICAgICAgICAgICBULmxhYmVsLmdldEFjY2Vzc29yKCkudG9VcHBlckNhc2UoKSwgVC52YWx1ZS5nZXRBY2Nlc3NvcigpLnRvVXBwZXJDYXNlKCkpKTsKLQotICAgICAgICBmb3IgKENvbHVtbiBlbnVtSXRlbSA6IENvbHVtbi52YWx1ZXMoKSkgewotICAgICAgICAgICAgSU5WQUxJRF9CSU5ESU5HU19LRVlTLmFkZChlbnVtSXRlbS5uYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChPcmRlciBlbnVtSXRlbSA6IE9yZGVyLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBJTlZBTElEX0JJTkRJTkdTX0tFWVMuYWRkKGVudW1JdGVtLm5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKE9wZXJhdG9yIGVudW1JdGVtIDogT3BlcmF0b3IudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGQoZW51bUl0ZW0ubmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoU2NvcGUgZW51bUl0ZW0gOiBTY29wZS52YWx1ZXMoKSkgewotICAgICAgICAgICAgSU5WQUxJRF9CSU5ESU5HU19LRVlTLmFkZChlbnVtSXRlbS5uYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChQb3AgZW51bUl0ZW0gOiBQb3AudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGQoZW51bUl0ZW0ubmFtZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBVbmlmaWVkSGFuZGxlcihmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncywgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgR3JlbWxpbkV4ZWN1dG9yIGdyZW1saW5FeGVjdXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQ2hhbm5lbGl6ZXIgY2hhbm5lbGl6ZXIpIHsKLSAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzOwotICAgICAgICB0aGlzLmdyYXBoTWFuYWdlciA9IGdyYXBoTWFuYWdlcjsKLSAgICAgICAgdGhpcy5ncmVtbGluRXhlY3V0b3IgPSBncmVtbGluRXhlY3V0b3I7Ci0gICAgICAgIHRoaXMuc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlID0gc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotICAgICAgICB0aGlzLmNoYW5uZWxpemVyID0gY2hhbm5lbGl6ZXI7Ci0gICAgICAgIHRoaXMuc2Vzc2lvbkV4ZWN1dG9yID0gZ3JlbWxpbkV4ZWN1dG9yLmdldEV4ZWN1dG9yU2VydmljZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGNoYW5uZWxSZWFkMChmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB2YWxpZGF0ZVJlcXVlc3QobXNnLCBncmFwaE1hbmFnZXIpOwotICAgICAgICAgICAgfSBjYXRjaCAoU2Vzc2lvbkV4Y2VwdGlvbiB3ZSkgewotICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKHdlLmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHRoaXMgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGRyaXZlcnMgc3RpbGwgc2VuZGluZyBhIGNsb3NlIG1lc3NhZ2UuIHRoZSBjbG9zZSBtZXNzYWdlIHdhcwotICAgICAgICAgICAgLy8gcmVtb3ZlZCBpbiAzLjUuMCBidXQgdGhlbiBhZGRlZCBiYWNrIGZvciAzLjUuMi4KLSAgICAgICAgICAgIGlmIChtc2cuZ2V0T3AoKS5lcXVhbHMoVG9rZW5zLk9QU19DTE9TRSkpIHsKLSAgICAgICAgICAgICAgICBjdHgud3JpdGVBbmRGbHVzaChSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLk5PX0NPTlRFTlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8U3RyaW5nPiBvcHRNdWx0aVRhc2tTZXNzaW9uID0gbXNnLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19TRVNTSU9OKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZXNzaW9uSWQgPSBvcHRNdWx0aVRhc2tTZXNzaW9uLm9yRWxzZShtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBTZXNzaW9uVGFzayBpcyByZWFsbHkgYSBDb250ZXh0IGZyb20gT3BQcm9jZXNzb3IuIHdlIHN0aWxsIG5lZWQgdGhlIEdyZW1saW5FeGVjdXRvci9TY3JpcHRFbmdpbmUKLSAgICAgICAgICAgIC8vIGNvbmZpZyB0aGF0IGlzIGFsbCByaWdnZWQgdXAgaW50byB0aGUgc2VydmVyIG5pY2VseSByaWdodCBub3cgc28gaXQgc2VlbWVkIGJlc3QgdG8ganVzdCBrZWVwIHRoZSBnZW5lcmFsCi0gICAgICAgICAgICAvLyBDb250ZXh0IG9iamVjdCBidXQgZXh0ZW5kIChlc3NlbnRpYWxseSByZW5hbWUpIGl0IHRvIFNlc3Npb25UYXNrIHNvIHRoYXQgaXQgYmV0dGVyIGZpdHMgdGhlIG5vbWVuY2xhdHVyZQotICAgICAgICAgICAgLy8gd2UgaGF2ZSBoZXJlLiB3aGVuIHdlIGRyb3AgT3BQcm9jZXNzb3Igc3R1ZmYgYW5kIHJpZCBvdXJzZWx2ZXMgb2YgR3JlbWxpbkV4ZWN1dG9yIHRoZW4gd2UgY2FuIHByb2JhYmx5Ci0gICAgICAgICAgICAvLyBwYXJlIGRvd24gdGhlIGNvbnN0cnVjdG9yIGZvciBTZXNzaW9uVGFzayBmdXJ0aGVyLgotICAgICAgICAgICAgZmluYWwgU2Vzc2lvblRhc2sgc2Vzc2lvblRhc2sgPSBuZXcgU2Vzc2lvblRhc2sobXNnLCBjdHgsIHNldHRpbmdzLCBncmFwaE1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgIGdyZW1saW5FeGVjdXRvciwgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKTsKLQotICAgICAgICAgICAgaWYgKHNlc3Npb25zLmNvbnRhaW5zS2V5KHNlc3Npb25JZCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTZXNzaW9uIHNlc3Npb24gPSBzZXNzaW9ucy5nZXQoc2Vzc2lvbklkKTsKLQotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBzZXNzaW9uIGlzIGJvdW5kIHRvIHRoaXMgY2hhbm5lbCwgdGh1cyBvbmUgY2xpZW50IHBlciBzZXNzaW9uCi0gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uLmlzQm91bmRUbyhjdHguY2hhbm5lbCgpKSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc2Vzc2lvbkNsb3NlZE1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJTZXNzaW9uICVzIGlzIG5vdCBib3VuZCB0byB0aGUgY29ubmVjdGluZyBjbGllbnQiLCBzZXNzaW9uSWQpOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2Uoc2Vzc2lvbkNsb3NlZE1lc3NhZ2UpLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBjdHgud3JpdGVBbmRGbHVzaChyZXNwb25zZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB0aGUgc2Vzc2lvbiBpcyBkb25lIGFjY2VwdGluZyB0YXNrcyB0aGVuIGVycm9yIHRpbWUKLSAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5pc0FjY2VwdGluZ1Rhc2tzKCkgJiYgIXNlc3Npb24uc3VibWl0VGFzayhzZXNzaW9uVGFzaykpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNlc3Npb25DbG9zZWRNZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2Vzc2lvbiAlcyBpcyBubyBsb25nZXIgYWNjZXB0aW5nIHJlcXVlc3RzIGFzIGl0IGhhcyBiZWVuIGNsb3NlZCIsIHNlc3Npb25JZCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShzZXNzaW9uQ2xvc2VkTWVzc2FnZSkuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKHJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSB0aGUgdHlwZSBvZiBzZXNzaW9uIHRvIHN0YXJ0IC0gb25lIHRoYXQgcHJvY2Vzc2VzIHRoZSBjdXJyZW50IHJlcXVlc3Qgb25seSBhbmQgY2xvc2UgT1IKLSAgICAgICAgICAgICAgICAvLyBvbmUgdGhhdCB3aWxsIHByb2Nlc3MgdGhpcyBjdXJyZW50IHJlcXVlc3QgYW5kIG9uZXMgdGhhdCBtYXkgYXJyaXZlIGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgZmluYWwgU2Vzc2lvbiBzZXNzaW9uID0gb3B0TXVsdGlUYXNrU2Vzc2lvbi5pc1ByZXNlbnQoKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVNdWx0aVRhc2tTZXNzaW9uKHNlc3Npb25UYXNrLCBzZXNzaW9uSWQpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVNpbmdsZVRhc2tTZXNzaW9uKHNlc3Npb25UYXNrLCBzZXNzaW9uSWQpOwotCi0gICAgICAgICAgICAgICAgLy8gcXVldWUgdGhlIHNlc3Npb24gdG8gc3RhcnR1cCB3aGVuIGEgdGhyZWFkIGlzIHJlYWR5IHRvIHRha2UgaXQKLSAgICAgICAgICAgICAgICBmaW5hbCBGdXR1cmU8Pz4gc2Vzc2lvbkZ1dHVyZSA9IHNlc3Npb25FeGVjdXRvci5zdWJtaXQoc2Vzc2lvbik7Ci0gICAgICAgICAgICAgICAgc2Vzc2lvbi5zZXRTZXNzaW9uRnV0dXJlKHNlc3Npb25GdXR1cmUpOwotICAgICAgICAgICAgICAgIHNlc3Npb25zLnB1dChzZXNzaW9uSWQsIHNlc3Npb24pOwotCi0gICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBtYXggc2Vzc2lvbiBsaWZlLiBmb3IgbXVsdGkgdGhhdCdzIGdvaW5nIHRvIGJlICJzZXNzaW9uIGxpZmUiIGFuZCBmb3Igc2luZ2xlIHRoYXQKLSAgICAgICAgICAgICAgICAvLyB3aWxsIGJlIHRoZSBzcGFuIG9mIHRoZSByZXF1ZXN0IHRpbWVvdXQKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHNldG8gPSBzZXNzaW9uVGFzay5nZXRSZXF1ZXN0VGltZW91dCgpOwotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgc2Vzc2lvbkxpZmUgPSBvcHRNdWx0aVRhc2tTZXNzaW9uLmlzUHJlc2VudCgpID8gc2V0dGluZ3Muc2Vzc2lvbkxpZmV0aW1lVGltZW91dCA6IHNldG87Ci0KLSAgICAgICAgICAgICAgICAvLyBpZiB0aW1lb3V0IGlzIGVuYWJsZWQgd2hlbiBncmVhdGVyIHRoYW4gemVybyBzY2hlZHVsZSB1cCBhIHRpbWVvdXQgd2hpY2ggaXMgYSBzZXNzaW9uIGxpZmUgdGltZW91dAotICAgICAgICAgICAgICAgIC8vIGZvciBhIG11bHRpIG9yIHRlY2huaWNhbGx5IGEgcmVxdWVzdCB0aW1lb3V0IGZvciBhIHNpbmdsZS4gdGhpcyB3aWxsIGJlIGNhbmNlbGxlZCB3aGVuIHRoZSBzZXNzaW9uCi0gICAgICAgICAgICAgICAgLy8gY2xvc2VzIGJ5IHdheSBvZiBvdGhlciByZWFzb25zIChpLmUuIHN1Y2Nlc3Mgb3IgZXhjZXB0aW9uKSAtIHNlZSBBYnN0cmFjdFNlc3Npb24jY2xvc2UoKQotICAgICAgICAgICAgICAgIGlmIChzZXRvID4gMCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTY2hlZHVsZWRGdXR1cmU8Pz4gc2Vzc2lvbkNhbmNlbEZ1dHVyZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLnNjaGVkdWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4gc2Vzc2lvbi50cmlnZ2VyVGltZW91dChzZXNzaW9uTGlmZSwgb3B0TXVsdGlUYXNrU2Vzc2lvbi5pc1ByZXNlbnQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uTGlmZSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5zZXRTZXNzaW9uQ2FuY2VsRnV0dXJlKHNlc3Npb25DYW5jZWxGdXR1cmUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoUmVqZWN0ZWRFeGVjdXRpb25FeGNlcHRpb24gcmVlKSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybihyZWUuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgICAgLy8gZ2VuZXJpYyBtZXNzYWdlIHNlZW1zIG9rIGhlcmU/IGxpa2UsIHlvdSB3b3VsZCBrbm93IHdoYXQgeW91IHdlcmUgc3VibWl0dGluZyBvbiwgaS5lLiBzZXNzaW9uIG9yCi0gICAgICAgICAgICAvLyBzZXNzaW9ubGVzcywgd2hlbiB5b3UgZ290IHRoaXMgZXJyb3IuIHByb2JhYmx5IGRvbid0IG5lZWQgZ29yeSBkZXRhaWxzLgotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuVE9PX01BTllfUkVRVUVTVFMpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJSYXRlIGxpbWl0aW5nIikuY3JlYXRlKCk7Ci0gICAgICAgICAgICBjdHgud3JpdGVBbmRGbHVzaChyZXNwb25zZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShtc2cpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVSZXF1ZXN0KGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1lc3NhZ2UsIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXIpIHRocm93cyBTZXNzaW9uRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gY2xvc2UgbWVzc2FnZSBqdXN0IG5lZWRzIHRvIGJlIGFjY291bnRlZCBmb3IgaGVyZSBhcyBvZiAzLjUuMi4gaXQgd2lsbCBub3QgY29udGFpbiBhICJncmVtbGluIiBhcmcuIHVuaWZpZWQKLSAgICAgICAgLy8gY2hhbm5lbGl6ZXIgYmFzaWNhbGx5IGlnbm9yZXMgdGhlIGNsb3NlIG1lc3NhZ2Ugb3RoZXJ3aXNlCi0gICAgICAgIGlmICghbWVzc2FnZS5nZXRPcCgpLmVxdWFscyhUb2tlbnMuT1BTX0NMT1NFKSAmJiAhbWVzc2FnZS5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfR1JFTUxJTikuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCJBIG1lc3NhZ2Ugd2l0aCBhIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQuIiwgbWVzc2FnZS5nZXRPcCgpLCBUb2tlbnMuQVJHU19HUkVNTElOKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKG1zZywgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1lc3NhZ2UpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykuc3RhdHVzTWVzc2FnZShtc2cpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19TRVNTSU9OKS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8T2JqZWN0PiBtdHggPSBtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19NQU5BR0VfVFJBTlNBQ1RJT04pOwotICAgICAgICAgICAgaWYgKG10eC5pc1ByZXNlbnQoKSAmJiAhKG10eC5nZXQoKSBpbnN0YW5jZW9mIEJvb2xlYW4pKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIiVzIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBib29sZWFuIiwgVG9rZW5zLkFSR1NfTUFOQUdFX1RSQU5TQUNUSU9OKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPE9iamVjdD4gbXNhZSA9IG1lc3NhZ2Uub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX01BSU5UQUlOX1NUQVRFX0FGVEVSX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICBpZiAobXNhZS5pc1ByZXNlbnQoKSAmJiAhKG1zYWUuZ2V0KCkgaW5zdGFuY2VvZiBCb29sZWFuKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCIlcyBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbiIsIFRva2Vucy5BUkdTX01BSU5UQUlOX1NUQVRFX0FGVEVSX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1lc3NhZ2Uub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX01BTkFHRV9UUkFOU0FDVElPTikuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiJXMgYXJndW1lbnQgb25seSBhcHBsaWVzIHRvIHJlcXVlc3RzIG1hZGUgZm9yIHNlc3Npb25zIiwgVG9rZW5zLkFSR1NfTUFOQUdFX1RSQU5TQUNUSU9OKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19NQUlOVEFJTl9TVEFURV9BRlRFUl9FWENFUFRJT04pLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIiVzIGFyZ3VtZW50IG9ubHkgYXBwbGllcyB0byByZXF1ZXN0cyBtYWRlIGZvciBzZXNzaW9ucyIsIFRva2Vucy5BUkdTX01BSU5UQUlOX1NUQVRFX0FGVEVSX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lc3NhZ2Uub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX0JJTkRJTkdTKS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwIGJpbmRpbmdzID0gKE1hcCkgbWVzc2FnZS5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0JJTkRJTkdTKTsKLSAgICAgICAgICAgIGlmIChJdGVyYXRvclV0aWxzLmFueU1hdGNoKGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCksIGsgLT4gbnVsbCA9PSBrIHx8ICEoayBpbnN0YW5jZW9mIFN0cmluZykpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIlRoZSBbJXNdIG1lc3NhZ2UgaXMgdXNpbmcgb25lIG9yIG1vcmUgaW52YWxpZCBiaW5kaW5nIGtleXMgLSB0aGV5IG11c3QgYmUgb2YgdHlwZSBTdHJpbmcgYW5kIGNhbm5vdCBiZSBudWxsIiwgVG9rZW5zLk9QU19FVkFMKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFNldDxTdHJpbmc+IGJhZEJpbmRpbmdzID0gSXRlcmF0b3JVdGlscy5zZXQoSXRlcmF0b3JVdGlscy48U3RyaW5nPmZpbHRlcihiaW5kaW5ncy5rZXlTZXQoKS5pdGVyYXRvcigpLCBJTlZBTElEX0JJTkRJTkdTX0tFWVM6OmNvbnRhaW5zKSk7Ci0gICAgICAgICAgICBpZiAoIWJhZEJpbmRpbmdzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCJUaGUgWyVzXSBtZXNzYWdlIHN1cHBsaWVzIG9uZSBvciBtb3JlIGludmFsaWQgcGFyYW1ldGVycyBrZXkgb2YgWyVzXSAtIHRoZXNlIGFyZSByZXNlcnZlZCBuYW1lcy4iLCBUb2tlbnMuT1BTX0VWQUwsIGJhZEJpbmRpbmdzKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlnbm9yZSBjb250cm9sIGJpbmRpbmdzIHRoYXQgZ2V0IHBhc3NlZCBpbiB3aXRoIHRoZSAiI2pzcjIyMyIgcHJlZml4IC0gdGhvc2UgYXJlbid0IHVzZWQgaW4gY29tcGlsYXRpb24KLSAgICAgICAgICAgIGlmIChJdGVyYXRvclV0aWxzLmNvdW50KEl0ZXJhdG9yVXRpbHMuZmlsdGVyKGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCksIGsgLT4gIWsudG9TdHJpbmcoKS5zdGFydHNXaXRoKCIjanNyMjIzIikpKSA+IHNldHRpbmdzLm1heFBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiVGhlIFslc10gbWVzc2FnZSBjb250YWlucyAlcyBiaW5kaW5ncyB3aGljaCBpcyBtb3JlIHRoYW4gaXMgYWxsb3dlZCBieSB0aGUgc2VydmVyICVzIGNvbmZpZ3VyYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk9QU19FVkFMLCBiaW5kaW5ncy5zaXplKCksIHNldHRpbmdzLm1heFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKG1zZywgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1lc3NhZ2UpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykuc3RhdHVzTWVzc2FnZShtc2cpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlkYXRpb25zIGZvciBzcGVjaWZpYyBvcCBjb2RlcwotICAgICAgICBpZiAobWVzc2FnZS5nZXRPcCgpLmVxdWFscyhUb2tlbnMuT1BTX0VWQUwpKSB7Ci0gICAgICAgICAgICAvLyBldmFsIG11c3QgaGF2ZSBncmVtbGluIHRoYXQgaXMgdHlwZSBvZiBTdHJpbmcKLSAgICAgICAgICAgIC8vIGxpa2VseSBhIHByb2JsZW0gd2l0aCB0aGUgZHJpdmVyIGFuZCBob3cgaXQgaXMgc2VuZGluZyByZXF1ZXN0cwotICAgICAgICAgICAgaWYgKCEobWVzc2FnZS5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfR1JFTUxJTikuZ2V0KCkgaW5zdGFuY2VvZiBTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQgdGhhdCBpcyBvZiB0eXBlICVzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBUb2tlbnMuT1BTX0VWQUwsIFRva2Vucy5BUkdTX0dSRU1MSU4sIFN0cmluZy5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXNzaW9uRXhjZXB0aW9uKG1zZywgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1lc3NhZ2UpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykuc3RhdHVzTWVzc2FnZShtc2cpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmdldE9wKCkuZXF1YWxzKFRva2Vucy5PUFNfQllURUNPREUpKSB7Ci0gICAgICAgICAgICAvLyBieXRlY29kZSBzaG91bGQgaGF2ZSBncmVtbGluIHRoYXQgaXMgb2YgdHlwZSBCeXRlY29kZQotICAgICAgICAgICAgLy8gbGlrZWx5IGEgcHJvYmxlbSB3aXRoIHRoZSBkcml2ZXIgYW5kIGhvdyBpdCBpcyBzZW5kaW5nIHJlcXVlc3RzCi0gICAgICAgICAgICBpZiAoIShtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19HUkVNTElOKS5nZXQoKSBpbnN0YW5jZW9mIEJ5dGVjb2RlKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCJBIG1lc3NhZ2Ugd2l0aCBbJXNdIG9wIGNvZGUgcmVxdWlyZXMgYSBbJXNdIGFyZ3VtZW50IHRoYXQgaXMgb2YgdHlwZSAlcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfR1JFTUxJTiwgQnl0ZWNvZGUuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGJ5dGVjb2RlIHNob3VsZCBoYXZlIGFuIGFsaWFzIGJvdW5kCi0gICAgICAgICAgICBmaW5hbCBPcHRpb25hbDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBhbGlhc2VzID0gbWVzc2FnZS5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgICAgICBpZiAoIWFsaWFzZXMuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiQSBtZXNzYWdlIHdpdGggWyVzXSBvcCBjb2RlIHJlcXVpcmVzIGEgWyVzXSBhcmd1bWVudC4iLCBUb2tlbnMuT1BTX0JZVEVDT0RFLCBUb2tlbnMuQVJHU19BTElBU0VTKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChhbGlhc2VzLmdldCgpLnNpemUoKSAhPSAxIHx8ICFhbGlhc2VzLmdldCgpLmNvbnRhaW5zS2V5KFRva2Vucy5WQUxfVFJBVkVSU0FMX1NPVVJDRV9BTElBUykpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiQSBtZXNzYWdlIHdpdGggWyVzXSBvcCBjb2RlIHJlcXVpcmVzIHRoZSBbJXNdIGFyZ3VtZW50IHRvIGJlIGEgTWFwIGNvbnRhaW5pbmcgb25lIGFsaWFzIGFzc2lnbm1lbnQgbmFtZWQgJyVzJy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfQUxJQVNFUywgVG9rZW5zLlZBTF9UUkFWRVJTQUxfU09VUkNFX0FMSUFTKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2Vzc2lvbkV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2VCaW5kaW5nRm9yQWxpYXMgPSBhbGlhc2VzLmdldCgpLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICAgICAgaWYgKCFncmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlTmFtZXMoKS5jb250YWlucyh0cmF2ZXJzYWxTb3VyY2VCaW5kaW5nRm9yQWxpYXMpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIlRoZSB0cmF2ZXJzYWwgc291cmNlIFslc10gZm9yIGFsaWFzIFslc10gaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlci4iLCB0cmF2ZXJzYWxTb3VyY2VCaW5kaW5nRm9yQWxpYXMsIFRva2Vucy5WQUxfVFJBVkVSU0FMX1NPVVJDRV9BTElBUyk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlc3Npb25FeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdXNlckV2ZW50VHJpZ2dlcmVkKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBldnQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBvbmx5IG5lZWQgdG8gaGFuZGxlIHRoaXMgZXZlbnQgaWYgdGhlIGlkbGUgbW9uaXRvciBpcyBvbgotICAgICAgICBpZiAoIWNoYW5uZWxpemVyLnN1cHBvcnRzSWRsZU1vbml0b3IoKSkgcmV0dXJuOwotCi0gICAgICAgIGlmIChldnQgaW5zdGFuY2VvZiBJZGxlU3RhdGVFdmVudCkgewotICAgICAgICAgICAgZmluYWwgSWRsZVN0YXRlRXZlbnQgZSA9IChJZGxlU3RhdGVFdmVudCkgZXZ0OwotCi0gICAgICAgICAgICAvLyBpZiBubyByZXF1ZXN0cyAocmVhZGVyKSB0aGVuIGNsb3NlLCBpZiBubyB3cml0ZXMgZnJvbSBzZXJ2ZXIgdG8gY2xpZW50IHRoZW4gcGluZy4gY2xpZW50cyBzaG91bGQKLSAgICAgICAgICAgIC8vIHBlcmlvZGljYWxseSBwaW5nIHRoZSBzZXJ2ZXIsIGJ1dCBjb21pbmcgZnJvbSB0aGlzIGRpcmVjdGlvbiBhbGxvd3MgdGhlIHNlcnZlciB0byBraWxsIGNoYW5uZWxzIHRoYXQKLSAgICAgICAgICAgIC8vIGhhdmUgZGVhZCBjbGllbnRzIG9uIHRoZSBvdGhlciBlbmQKLSAgICAgICAgICAgIGlmIChlLnN0YXRlKCkgPT0gSWRsZVN0YXRlLlJFQURFUl9JRExFKSB7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNsb3NpbmcgY2hhbm5lbCAtIGNsaWVudCBpcyBkaXNjb25uZWN0ZWQgYWZ0ZXIgaWRsZSBwZXJpb2Qgb2YgIiArIHNldHRpbmdzLmlkbGVDb25uZWN0aW9uVGltZW91dCArICIgIiArIGN0eC5jaGFubmVsKCkuaWQoKS5hc1Nob3J0VGV4dCgpKTsKLSAgICAgICAgICAgICAgICBjdHguY2xvc2UoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5zdGF0ZSgpID09IElkbGVTdGF0ZS5XUklURVJfSURMRSAmJiBzZXR0aW5ncy5rZWVwQWxpdmVJbnRlcnZhbCA+IDApIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ2hlY2tpbmcgY2hhbm5lbCAtIHNlbmRpbmcgcGluZyB0byBjbGllbnQgYWZ0ZXIgaWRsZSBwZXJpb2Qgb2YgIiArIHNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsICsgIiAiICsgY3R4LmNoYW5uZWwoKS5pZCgpLmFzU2hvcnRUZXh0KCkpOwotICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKGNoYW5uZWxpemVyLmNyZWF0ZUlkbGVEZXRlY3Rpb25NZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gY3JlYXRpbmcgYSBzaW5nbGUgdGFzayBzZXNzaW9uIHdoZXJlIHRoZSBwcm92aWRlZCB7QGxpbmsgU2Vzc2lvblRhc2t9IHdpbGwgYmUgdGhlIG9ubHkgb25lIHRvIGJlCi0gICAgICogZXhlY3V0ZWQgYW5kIGNhbiB0aGVyZWZvcmUgdGFrZSBhIG1vcmUgZWZmaWNpZW50IGV4ZWN1dGlvbiBwYXRoLgotICAgICAqLwotICAgIHByb3RlY3RlZCBTZXNzaW9uIGNyZWF0ZVNpbmdsZVRhc2tTZXNzaW9uKGZpbmFsIFNlc3Npb25UYXNrIHNlc3Npb25UYXNrLCBmaW5hbCBTdHJpbmcgc2Vzc2lvbklkKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU2luZ2xlVGFza1Nlc3Npb24oc2Vzc2lvblRhc2ssIHNlc3Npb25JZCwgc2Vzc2lvbnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIGNyZWF0aW5nIGEge0BsaW5rIFNlc3Npb259IHRoYXQgd2lsbCBiZSBsb25nLWxpdmVkIHRvIGV4dGVuZCBvdmVyIG11bHRpcGxlIHJlcXVlc3RzIGFuZCB0aGVyZWZvcmUKLSAgICAgKiBwcm9jZXNzIHRoZSBwcm92aWRlZCB7QGxpbmsgU2Vzc2lvblRhc2t9IGFzIHdlbGwgYXMgb25lcyB0aGF0IG1heSBhcnJpdmUgaW4gdGhlIGZ1dHVyZS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgU2Vzc2lvbiBjcmVhdGVNdWx0aVRhc2tTZXNzaW9uKGZpbmFsIFNlc3Npb25UYXNrIHNlc3Npb25UYXNrLCBmaW5hbCBTdHJpbmcgc2Vzc2lvbklkKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTXVsdGlUYXNrU2Vzc2lvbihzZXNzaW9uVGFzaywgc2Vzc2lvbklkLCBzZXNzaW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBY3RpdmVTZXNzaW9uKGZpbmFsIFN0cmluZyBzZXNzaW9uSWQpIHsKLSAgICAgICAgcmV0dXJuIHNlc3Npb25zLmNvbnRhaW5zS2V5KHNlc3Npb25JZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRBY3RpdmVTZXNzaW9uQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBzZXNzaW9ucy5zaXplKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1VubWFuYWdlZFRyYW5zYWN0aW9uLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvVW5tYW5hZ2VkVHJhbnNhY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhkMGUzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1VubWFuYWdlZFRyYW5zYWN0aW9uLmphdmEKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKKworaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRGdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW47CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY1JlZmVyZW5jZTsKKworLyoqCisgKiBNYWludGFpbnMgc3RhdGUgZm9yIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbiBvdmVyIEhUVFAuCisgKiA8cD4KKyAqIEtleSBkZXNpZ24gcHJpbmNpcGxlOiBHcmFwaCB0cmFuc2FjdGlvbnMgYXJlIFRocmVhZExvY2FsLWJvdW5kLCBzbyBhbGwgb3BlcmF0aW9ucworICogZm9yIGEgdHJhbnNhY3Rpb24gbXVzdCBleGVjdXRlIG9uIHRoZSBzYW1lIHRocmVhZC4gVGhpcyBpcyBhY2hpZXZlZCB2aWEgYQorICogc2luZ2xlLXRocmVhZGVkIGV4ZWN1dG9yLiBDYWxsZXJzIHN1Ym1pdCB7QGxpbmsgRnV0dXJlVGFza30gaW5zdGFuY2VzIHRoYXQgY29udGFpbgorICogdGhlIGNvbXBsZXRlIHJlcXVlc3QgbGlmZWN5Y2xlIChncmFwaCBvcGVyYXRpb24sIGVycm9yIGhhbmRsaW5nLCByZXNwb25zZSB3cml0aW5nKSwKKyAqIGZvbGxvd2luZyB0aGUgc2FtZSBwYXR0ZXJuIGFzIHRoZSBub24tdHJhbnNhY3Rpb25hbCBIVFRQIHBhdGggYW5kIHRoZSBsZWdhY3kKKyAqIHtAY29kZSBTZXNzaW9uT3BQcm9jZXNzb3J9LgorICovCitwdWJsaWMgY2xhc3MgVW5tYW5hZ2VkVHJhbnNhY3Rpb24geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihVbm1hbmFnZWRUcmFuc2FjdGlvbi5jbGFzcyk7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB0cmFuc2FjdGlvbklkOworICAgIHByaXZhdGUgZmluYWwgVHJhbnNhY3Rpb25NYW5hZ2VyIG1hbmFnZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaCBncmFwaDsKKyAgICBwcml2YXRlIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHRpbWVvdXQ7CisgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHBlckdyYXBoQ2xvc2U7CisgICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNSZWZlcmVuY2U8U2NoZWR1bGVkRnV0dXJlPD8+PiB0aW1lb3V0RnV0dXJlID0gbmV3IEF0b21pY1JlZmVyZW5jZTw+KCk7CisgICAgLy8gQ29udHJvbHMgd2hldGhlciB0aGUgZXhlY3V0b3IgaXMgc3RpbGwgYWNjZXB0aW5nIHRhc2tzLgorICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBhY2NlcHRpbmcgPSBuZXcgQXRvbWljQm9vbGVhbih0cnVlKTsKKyAgICAvKioKKyAgICAgKiBTaW5nbGUtdGhyZWFkZWQgZXhlY3V0b3IgZW5zdXJlcyBhbGwgb3BlcmF0aW9ucyBmb3IgdGhpcyB0cmFuc2FjdGlvbiBydW4gb24KKyAgICAgKiB0aGUgc2FtZSB0aHJlYWQsIHByZXNlcnZpbmcgdGhlIFRocmVhZExvY2FsIG5hdHVyZSBvZiBHcmFwaCB0cmFuc2FjdGlvbnMuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHtAY29kZSBVbm1hbmFnZWRUcmFuc2FjdGlvbn0gZm9yIG1hbmFnaW5nIGFuIEhUVFAgdHJhbnNhY3Rpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25JZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24KKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25NYW5hZ2VyIFRoZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGlzIHRyYW5zYWN0aW9uJ3MgbGlmZWN5Y2xlCisgICAgICogQHBhcmFtIGdyYXBoIFRoZSBncmFwaCBpbnN0YW5jZSBmb3IgdGhpcyB0cmFuc2FjdGlvbgorICAgICAqIEBwYXJhbSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgU2NoZWR1bGVyIGZvciB0aW1lb3V0IG1hbmFnZW1lbnQKKyAgICAgKiBAcGFyYW0gdHJhbnNhY3Rpb25UaW1lb3V0IFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSBhdXRvLXJvbGxiYWNrCisgICAgICovCisgICAgcHVibGljIFVubWFuYWdlZFRyYW5zYWN0aW9uKGZpbmFsIFN0cmluZyB0cmFuc2FjdGlvbklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUcmFuc2FjdGlvbk1hbmFnZXIgdHJhbnNhY3Rpb25NYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyB0cmFuc2FjdGlvblRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgcGVyR3JhcGhDbG9zZSkgeworICAgICAgICBsb2dnZXIuZGVidWcoIk5ldyB0cmFuc2FjdGlvbiBjb250ZXh0IGVzdGFibGlzaGVkIGZvciB7fSIsIHRyYW5zYWN0aW9uSWQpOworICAgICAgICB0aGlzLnRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbklkOworICAgICAgICB0aGlzLm1hbmFnZXIgPSB0cmFuc2FjdGlvbk1hbmFnZXI7CisgICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDsKKyAgICAgICAgdGhpcy5zY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgPSBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7CisgICAgICAgIHRoaXMudGltZW91dCA9IHRyYW5zYWN0aW9uVGltZW91dDsKKyAgICAgICAgdGhpcy5wZXJHcmFwaENsb3NlID0gcGVyR3JhcGhDbG9zZTsKKworICAgICAgICAvLyBDcmVhdGUgc2luZ2xlLXRocmVhZGVkIGV4ZWN1dG9yIHdpdGggbmFtZWQgdGhyZWFkIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgdGhpcy5leGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigKKyAgICAgICAgICAgIHIgLT4gbmV3IFRocmVhZChyLCAidHgtIiArIHRyYW5zYWN0aW9uSWQuc3Vic3RyaW5nKDAsIE1hdGgubWluKDgsIHRyYW5zYWN0aW9uSWQubGVuZ3RoKCkpKSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRyYW5zYWN0aW9uIElELgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHJhbnNhY3Rpb25JZCgpIHsKKyAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uSWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzZXRzIHRoZSB0aW1lb3V0IGZvciB0aGlzIHRyYW5zYWN0aW9uLiBDYWxsZWQgb24gZWFjaCByZXF1ZXN0LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRvdWNoKCkgeworICAgICAgICB0aW1lb3V0RnV0dXJlLnVwZGF0ZUFuZEdldChmdXR1cmUgLT4geworICAgICAgICAgICAgaWYgKGZ1dHVyZSAhPSBudWxsKSBmdXR1cmUuY2FuY2VsKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZWRFeGVjdXRvclNlcnZpY2Uuc2NoZWR1bGUoKCkgLT4geworICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUcmFuc2FjdGlvbiB7fSB0aW1lZCBvdXQgYWZ0ZXIge30gbXMgb2YgaW5hY3Rpdml0eSIsIHRyYW5zYWN0aW9uSWQsIHRpbWVvdXQpOworICAgICAgICAgICAgICAgIGNsb3NlKGZhbHNlKTsKKyAgICAgICAgICAgIH0sIHRpbWVvdXQsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIC8qKgorICAgICAqIE9wZW5zIHRoZSB1bmRlcmx5aW5nIGdyYXBoIHRyYW5zYWN0aW9uIGFuZCBzdGFydHMgdGhlIGluYWN0aXZpdHkgdGltZW91dC4KKyAgICAgKiBTaG91bGQgYmUgY2FsbGVkIG9uIHRoZSB0cmFuc2FjdGlvbidzIHNpbmdsZS10aHJlYWRlZCBleGVjdXRvciB0byBwcmVzZXJ2ZQorICAgICAqIFRocmVhZExvY2FsIGFmZmluaXR5LiBPbiBmYWlsdXJlIHRoZSBleGNlcHRpb24gaXMgcmUtdGhyb3duIGFuZCB0aGUgY2FsbGVyCisgICAgICogaXMgcmVzcG9uc2libGUgZm9yIGNsZWFudXAgKGUuZy4gdmlhIHtAbGluayAjY2xvc2UoYm9vbGVhbil9KS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvcGVuKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZ3JhcGgudHgoKS5vcGVuKCk7CisgICAgICAgICAgICB0b3VjaCgpOworICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJUcmFuc2FjdGlvbiB7fSBvcGVuZWQiLCB0cmFuc2FjdGlvbklkKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKCJGYWlsZWQgdG8gYmVnaW4gdHJhbnNhY3Rpb24ge306IHt9IiwgdHJhbnNhY3Rpb25JZCwgZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENsb3NlcyB0aGlzIHRyYW5zYWN0aW9uIGFuZCByZWxlYXNlcyBpdHMgcmVzb3VyY2VzLiBXaGVuIHtAY29kZSBmb3JjZX0gaXMge0Bjb2RlIGZhbHNlfSwKKyAgICAgKiBhbnkgb3BlbiBncmFwaCB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFjayBiZWZvcmUgc2h1dGRvd24uIFdoZW4ge0Bjb2RlIGZvcmNlfSBpcyB7QGNvZGUgdHJ1ZX0sCisgICAgICogdGhlIGV4ZWN1dG9yIGlzIHNodXQgZG93biBpbW1lZGlhdGVseSB3aXRob3V0IGF0dGVtcHRpbmcgYSByb2xsYmFjay4KKyAgICAgKgorICAgICAqIEBwYXJhbSBmb3JjZSBpZiB7QGNvZGUgdHJ1ZX0sIHNraXAgdGhlIHJvbGxiYWNrIGF0dGVtcHQgYW5kIHNodXQgZG93biBpbW1lZGlhdGVseQorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjbG9zZShib29sZWFuIGZvcmNlKSB7CisgICAgICAgIGFjY2VwdGluZy5zZXQoZmFsc2UpOworCisgICAgICAgIC8vIGlmIHRoZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgdGhlbiB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gdGhpcyBwcm9jZXNzIGFnYWluLiBpdCdzIHBvc3NpYmxlCisgICAgICAgIC8vIGZvciB0aGlzIHRvIGJlIGNhbGxlZCBhdCByb3VnaGx5IHRoZSBzYW1lIHRpbWUuIHRoaXMgcHJldmVudHMgY2xvc2UoKSBmcm9tIGJlaW5nIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgaWYgKG1hbmFnZXIuZ2V0KHRyYW5zYWN0aW9uSWQpLmlzRW1wdHkoKSkgcmV0dXJuOworCisgICAgICAgIGlmICghZm9yY2UpIHsKKyAgICAgICAgICAgIC8vIHdoZW4gbm90ICJmb3JjZWQiLCBhbiBvcGVuIHRyYW5zYWN0aW9uIHNob3VsZCBiZSByb2xsZWQgYmFjaworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBleGVjdXRvci5zdWJtaXQoKCkgLT4geworICAgICAgICAgICAgICAgICAgICBpZiAoZ3JhcGgudHgoKS5pc09wZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJSb2xsaW5nIGJhY2sgb3BlbiB0cmFuc2FjdGlvbiBvbiB7fSIsIHRyYW5zYWN0aW9uSWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGgudHgoKS5yb2xsYmFjaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkuZ2V0KHBlckdyYXBoQ2xvc2UsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHJvbGxiYWNrIG9uICVzICIsIHRyYW5zYWN0aW9uSWQpLCBleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBwcmV2ZW50IGFueSBhZGRpdGlvbmFsIHJlcXVlc3RzIGZyb20gcHJvY2Vzc2luZy4gaWYgdGhlIGtpbGwgd2FzIG5vdCAiZm9yY2VkIiB0aGVuIGpvYnMgd2VyZSBzY2hlZHVsZWQgdG8KKyAgICAgICAgLy8gdHJ5IHRvIHJvbGxiYWNrIG9wZW4gdHJhbnNhY3Rpb25zLiB0aG9zZSBqb2JzIGVpdGhlciB0aW1lZC1vdXQgb3IgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gZWl0aGVyIHdheSwgbm8KKyAgICAgICAgLy8gYWRkaXRpb25hbCBqb2JzIHdpbGwgYmUgYWxsb3dlZCwgcnVubmluZyBqb2JzIHdpbGwgYmUgY2FuY2VsbGVkIChpZiBwb3NzaWJsZSkgYW5kIGFueSBzY2hlZHVsZWQgam9icyB3aWxsCisgICAgICAgIC8vIGJlIGNhbmNlbGxlZAorICAgICAgICBleGVjdXRvci5zaHV0ZG93bk5vdygpOworICAgICAgICBtYW5hZ2VyLmRlc3Ryb3kodHJhbnNhY3Rpb25JZCk7CisgICAgICAgIE9wdGlvbmFsLm9mTnVsbGFibGUodGltZW91dEZ1dHVyZS5nZXQoKSkuaWZQcmVzZW50KGYgLT4gZi5jYW5jZWwodHJ1ZSkpOworICAgICAgICBsb2dnZXIuZGVidWcoIlRyYW5zYWN0aW9uIHt9IGNsb3NlZCIsIHRyYW5zYWN0aW9uSWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN1Ym1pdHMgYSB0YXNrIHRvIGJlIGV4ZWN1dGVkIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uJ3MgdGhyZWFkIGNvbnRleHQuCisgICAgICogVGhlIHRhc2sgc2hvdWxkIGNvbnRhaW4gdGhlIGNvbXBsZXRlIHJlcXVlc3QgbGlmZWN5Y2xlOiBncmFwaCBvcGVyYXRpb24sCisgICAgICogZXJyb3IgaGFuZGxpbmcsIGFuZCByZXNwb25zZSB3cml0aW5nLgorICAgICAqCisgICAgICogQHBhcmFtIHRhc2sgVGhlIEZ1dHVyZVRhc2sgdG8gZXhlY3V0ZSBvbiB0aGUgdHJhbnNhY3Rpb24gdGhyZWFkCisgICAgICogQHJldHVybiBGdXR1cmUgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGltZW91dCBjYW5jZWxsYXRpb24KKyAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgY2xvc2VkCisgICAgICovCisgICAgcHVibGljIEZ1dHVyZTw/PiBzdWJtaXQoZmluYWwgRnV0dXJlVGFzazxWb2lkPiB0YXNrKSB7CisgICAgICAgIGlmICghYWNjZXB0aW5nLmdldCgpKSB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJUcmFuc2FjdGlvbiAiICsgdHJhbnNhY3Rpb25JZCArICIgaXMgY2xvc2VkIik7CisKKyAgICAgICAgdG91Y2goKTsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLnN1Ym1pdCh0YXNrKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV2ViU29ja2V0QXV0aG9yaXphdGlvbkhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9XZWJTb2NrZXRBdXRob3JpemF0aW9uSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGU0YjBjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9XZWJTb2NrZXRBdXRob3JpemF0aW9uSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEluYm91bmRIYW5kbGVyQWRhcHRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyZW1saW5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdGVkVXNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoei5BdXRob3JpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGh6LkF1dGhvcml6YXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLQotLyoqCi0gKiAgQW4gYXV0aG9yaXphdGlvbiBoYW5kbGVyIGZvciB0aGUgd2Vic29ja2V0cyBjaGFubmVsIHRoYXQgYWxsb3dzIHRoZSB7QGxpbmsgQXV0aG9yaXplcn0gdG8gYmUgcGx1Z2dlZCBpbnRvIGl0LgotICoKLSAqIEBhdXRob3IgTWFyYyBkZSBMaWduaWUKLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgY2xhc3MgV2ViU29ja2V0QXV0aG9yaXphdGlvbkhhbmRsZXIgZXh0ZW5kcyBDaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV2ViU29ja2V0QXV0aG9yaXphdGlvbkhhbmRsZXIuY2xhc3MpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBhdWRpdExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEdyZW1saW5TZXJ2ZXIuQVVESVRfTE9HR0VSX05BTUUpOwotCi0gICAgcHJpdmF0ZSBBdXRoZW50aWNhdGVkVXNlciB1c2VyOwotICAgIHByaXZhdGUgZmluYWwgQXV0aG9yaXplciBhdXRob3JpemVyOwotCi0gICAgcHVibGljIFdlYlNvY2tldEF1dGhvcml6YXRpb25IYW5kbGVyKEF1dGhvcml6ZXIgYXV0aG9yaXplcikgewotICAgICAgICB0aGlzLmF1dGhvcml6ZXIgPSBhdXRob3JpemVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNoYW5uZWxSZWFkKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBtc2cpIHsKLSAgICAgICAgaWYgKG1zZyBpbnN0YW5jZW9mIFJlcXVlc3RNZXNzYWdlKXsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlID0gKFJlcXVlc3RNZXNzYWdlKSBtc2c7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHVzZXIgPSBjdHguY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuQVVUSEVOVElDQVRFRF9VU0VSKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSB1c2VyKSB7ICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgd2hlbiB1c2luZyB0aGUgQWxsb3dBbGxBdXRoZW50aWNhdG9yCi0gICAgICAgICAgICAgICAgICAgIHVzZXIgPSBBdXRoZW50aWNhdGVkVXNlci5BTk9OWU1PVVNfVVNFUjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChyZXF1ZXN0TWVzc2FnZS5nZXRPcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5zLk9QU19CWVRFQ09ERToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlID0gKEJ5dGVjb2RlKSByZXF1ZXN0TWVzc2FnZS5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gKE1hcDxTdHJpbmcsIFN0cmluZz4pIHJlcXVlc3RNZXNzYWdlLmdldEFyZ3MoKS5nZXQoVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBCeXRlY29kZSByZXN0cmljdGVkQnl0ZWNvZGUgPSBhdXRob3JpemVyLmF1dGhvcml6ZSh1c2VyLCBieXRlY29kZSwgYWxpYXNlcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXN0cmljdGVkTXNnID0gUmVxdWVzdE1lc3NhZ2UuZnJvbShyZXF1ZXN0TWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCByZXN0cmljdGVkQnl0ZWNvZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfQUxJQVNFUywgYWxpYXNlcykuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlyZUNoYW5uZWxSZWFkKHJlc3RyaWN0ZWRNc2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5zLk9QU19FVkFMOgotICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplci5hdXRob3JpemUodXNlciwgcmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpcmVDaGFubmVsUmVhZChyZXF1ZXN0TWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlbnMuT1BTX0NMT1NFOgotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpcmVDaGFubmVsUmVhZChyZXF1ZXN0TWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXhjZXB0aW9uKCJUaGlzIEF1dGhvcml6YXRpb25IYW5kbGVyIG9ubHkgaGFuZGxlcyByZXF1ZXN0cyB3aXRoIE9QU19CWVRFQ09ERSBvciBPUFNfRVZBTC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChBdXRob3JpemF0aW9uRXhjZXB0aW9uIGV4KSB7ICAvLyBFeHBlY3RlZDogdXNlcnMgY2FuIGFsdGVybmF0ZSBiZXR3ZWVuIGFsbG93ZWQgYW5kIGRpc2FsbG93ZWQgcmVxdWVzdHMKLSAgICAgICAgICAgICAgICBTdHJpbmcgYWRkcmVzcyA9IGN0eC5jaGFubmVsKCkucmVtb3RlQWRkcmVzcygpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgiLyIpICYmIGFkZHJlc3MubGVuZ3RoKCkgPiAxKSBhZGRyZXNzID0gYWRkcmVzcy5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICAgICAgYXVkaXRMb2dnZXIuaW5mbygiVXNlciB7fSB3aXRoIGFkZHJlc3Mge30gYXR0ZW1wdGVkIGFuIHVuYXV0aG9yaXplZCByZXF1ZXN0IGZvciB7fSBvcGVyYXRpb246IHt9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZ2V0TmFtZSgpLCBhZGRyZXNzLCByZXF1ZXN0TWVzc2FnZS5nZXRPcCgpLCByZXF1ZXN0TWVzc2FnZS5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pKTsKLSAgICAgICAgICAgICAgICBpbnRlcnJ1cHRFdmFsdWF0aW9uKGN0eCwgcmVxdWVzdE1lc3NhZ2UsIGV4LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoInt9IGlzIG5vdCByZWFkeSB0byBoYW5kbGUgcmVxdWVzdHMgLSB1bmtub3duIGVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplci5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaW50ZXJydXB0RXZhbHVhdGlvbihjdHgsIHJlcXVlc3RNZXNzYWdlLCAiVW5rbm93biBlcnJvciBpbiBncmVtbGluLXNlcnZlciIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oInt9IG9ubHkgcHJvY2Vzc2VzIFJlcXVlc3RNZXNzYWdlIGluc3RhbmNlcyAtIHJlY2VpdmVkIHt9IC0gY2hhbm5lbCBjbG9zaW5nIiwKLSAgICAgICAgICAgICAgICB0aGlzLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLCBtc2cuZ2V0Q2xhc3MoKSk7Ci0gICAgICAgICAgICBjdHguY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbnRlcnJ1cHRFdmFsdWF0aW9uKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBlcnJvciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChyZXF1ZXN0TWVzc2FnZSkKLSAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJGYWlsZWQgdG8gYXV0aG9yaXplOiAiICsgZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlVOQVVUSE9SSVpFRCkuY3JlYXRlKCk7Ci0gICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKGVycm9yKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV2ViU29ja2V0SGFuZGxlclV0aWwuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9XZWJTb2NrZXRIYW5kbGVyVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWQ2ODg0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9XZWJTb2NrZXRIYW5kbGVyVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwTWVzc2FnZTsKLQotaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cEhlYWRlck5hbWVzLlVQR1JBREU7Ci1pbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXMuQ09OTkVDVElPTjsKLQotLyoqCi0gKiBBIGNsYXNzIHRvIGhhbmRsZSBjb21tb24gV2ViU29ja2V0IG9wZXJhdGlvbnMuCi0gKgotICogQGF1dGhvciBLZWl0aCBMb2huZXMgbG9obmVza0BnbWFpbC5jb20KLSAqLwotZmluYWwgY2xhc3MgV2ViU29ja2V0SGFuZGxlclV0aWwgewotCi0gICAgc3RhdGljIGJvb2xlYW4gaXNXZWJTb2NrZXQoZmluYWwgSHR0cE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBjb25uZWN0aW9uSGVhZGVyID0gbXNnLmhlYWRlcnMoKS5nZXQoQ09OTkVDVElPTik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyB1cGdyYWRlSGVhZGVyID0gbXNnLmhlYWRlcnMoKS5nZXQoVVBHUkFERSk7Ci0gICAgICAgIHJldHVybiAobnVsbCAhPSBjb25uZWN0aW9uSGVhZGVyICYmIGNvbm5lY3Rpb25IZWFkZXIuZXF1YWxzSWdub3JlQ2FzZSgiVXBncmFkZSIpKSB8fAotICAgICAgICAgICAgICAgKG51bGwgIT0gdXBncmFkZUhlYWRlciAmJiB1cGdyYWRlSGVhZGVyLmVxdWFsc0lnbm9yZUNhc2UoIldlYlNvY2tldCIpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2ZWRiMDMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1dzQW5kSHR0cENoYW5uZWxpemVySGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXI7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUGlwZWxpbmU7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNoYW5uZWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuV2ViU29ja2V0Q2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5Xc0FuZEh0dHBDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLlNlcnZlckdyZW1saW5FeGVjdXRvcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5BYnN0cmFjdENoYW5uZWxpemVyLlBJUEVMSU5FX0hUVFBfQUdHUkVHQVRPUjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQWJzdHJhY3RDaGFubmVsaXplci5QSVBFTElORV9IVFRQX1VTRVJfQUdFTlRfSEFORExFUjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplci5QSVBFTElORV9BVVRIRU5USUNBVE9SOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLldlYlNvY2tldENoYW5uZWxpemVyLlBJUEVMSU5FX1JFUVVFU1RfSEFORExFUjsKLQotLyoqCi0gKiBBIENoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXIgZm9yIHVzZSB3aXRoIHtAbGluayBXc0FuZEh0dHBDaGFubmVsaXplcn0gdGhhdCB0b2dnbGVzIGJldHdlZW4gV2ViU29ja2V0cwotICogYW5kIGh0dHAuCi0gKgotICogQGF1dGhvciBLZWl0aCBMb2huZXMgbG9obmVza0BnbWFpbC5jb20KLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgY2xhc3MgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyIGV4dGVuZHMgQ2hhbm5lbEluYm91bmRIYW5kbGVyQWRhcHRlciB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyLmNsYXNzKTsKLQotICAgIHByaXZhdGUgZmluYWwgV2ViU29ja2V0Q2hhbm5lbGl6ZXIgd3NDaGFubmVsaXplciA9IG5ldyBXZWJTb2NrZXRDaGFubmVsaXplcigpOwotICAgIHByaXZhdGUgSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIgaHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXI7Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0KGZpbmFsIFNlcnZlckdyZW1saW5FeGVjdXRvciBzZXJ2ZXJHcmVtbGluRXhlY3V0b3IsIGZpbmFsIEh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyIGh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyKSB7Ci0gICAgICAgIC8vV2ViU29ja2V0Q2hhbm5lbGl6ZXIgaGFzIGV2ZXJ5dGhpbmcgbmVlZGVkIGZvciB0aGUgaHR0cCBlbmRwb2ludCB0byB3b3JrCi0gICAgICAgIHdzQ2hhbm5lbGl6ZXIuaW5pdChzZXJ2ZXJHcmVtbGluRXhlY3V0b3IpOwotICAgICAgICB0aGlzLmh0dHBHcmVtbGluRW5kcG9pbnRIYW5kbGVyID0gaHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXI7Ci0gICAgfQotCi0gICAgcHVibGljIENoYW5uZWxpemVyIGdldFdzQ2hhbm5lbGl6ZXIoKSB7Ci0gICAgICAgIHJldHVybiB3c0NoYW5uZWxpemVyOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBDaGFubmVsUGlwZWxpbmUgcGlwZWxpbmUpIHsKLSAgICAgICAgd3NDaGFubmVsaXplci5jb25maWd1cmUocGlwZWxpbmUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNoYW5uZWxSZWFkKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBvYmopIHsKLSAgICAgICAgZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lID0gY3R4LnBpcGVsaW5lKCk7Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIdHRwTWVzc2FnZSAmJiAhV2ViU29ja2V0SGFuZGxlclV0aWwuaXNXZWJTb2NrZXQoKEh0dHBNZXNzYWdlKW9iaikpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIGZvciBIVFRQIGFuZCBub3QgV1MgdGhlbiB0aGlzIGhhbmRsZXIgaW5qZWN0cyB0aGUgSFRUUCB1c2VyLWFnZW50IGFuZCBlbmRwb2ludCBoYW5kbGVycwotICAgICAgICAgICAgLy8gaW4gZnJvbnQgb2YgdGhlIEhUVFAgYWdncmVnYXRvciB0byBpbnRlcmNlcHQgdGhlIEh0dHBNZXNzYWdlLgotICAgICAgICAgICAgLy8gVGhpcyByZXBsYWNlcyB0aGUgV1Mgc2VydmVyIHByb3RvY29sIGhhbmRsZXIgc28gdGhhdCB0aGUgcGlwZWxpbmUgaW5pdGlhbGx5IGxvb2tzIGxpa2UgdGhpczoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJZGxlU3RhdGVIYW5kbGVyIC0+IEh0dHBSZXNwb25zZUVuY29kZXIgLT4gSHR0cFJlcXVlc3REZWNvZGVyIC0+Ci0gICAgICAgICAgICAvLyAgICBXc0FuZEh0dHBDaGFubmVsaXplckhhbmRsZXIgLT4gSHR0cE9iamVjdEFnZ3JlZ2F0b3IgLT4KLSAgICAgICAgICAgIC8vICAgIFdlYlNvY2tldFNlcnZlckNvbXByZXNzaW9uSGFuZGxlciAtPiBXZWJTb2NrZXRTZXJ2ZXJQcm90b2NvbEhhbmRzaGFrZUhhbmRsZXIgLT4KLSAgICAgICAgICAgIC8vICAgIFV0ZjhGcmFtZVZhbGlkYXRvciAtPiBXZWJTb2NrZXRTZXJ2ZXJQcm90b2NvbEhhbmRsZXIgLT4gKG1vcmUgd2Vic29ja2V0cykKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBhbmQgc2hpZnRzIHRvIHRoaXMgKHNldHRpbmcgYXNpZGUgdGhlIGF1dGhlbnRpY2F0aW9uIGNvbmRpdGlvbik6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSWRsZVN0YXRlSGFuZGxlciAtPiBIdHRwUmVzcG9uc2VFbmNvZGVyIC0+IEh0dHBSZXF1ZXN0RGVjb2RlciAtPgotICAgICAgICAgICAgLy8gICAgV3NBbmRIdHRwQ2hhbm5lbGl6ZXJIYW5kbGVyIC0+IEh0dHBPYmplY3RBZ2dyZWdhdG9yIC0+Ci0gICAgICAgICAgICAvLyAgICBIdHRwVXNlckFnZW50SGFuZGxlciAtPiBIdHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlciAtPgotICAgICAgICAgICAgLy8gICAgV2ViU29ja2V0U2VydmVyQ29tcHJlc3Npb25IYW5kbGVyIC0+IFdlYlNvY2tldFNlcnZlclByb3RvY29sSGFuZHNoYWtlSGFuZGxlciAtPgotICAgICAgICAgICAgLy8gICAgVXRmOEZyYW1lVmFsaWRhdG9yIC0+IChtb3JlIHdlYnNvY2tldHMpCi0gICAgICAgICAgICBwaXBlbGluZS5yZW1vdmUoUElQRUxJTkVfUkVRVUVTVF9IQU5ETEVSKTsKLSAgICAgICAgICAgIGlmIChudWxsICE9IHBpcGVsaW5lLmdldChQSVBFTElORV9IVFRQX1VTRVJfQUdFTlRfSEFORExFUikpIHsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5yZW1vdmUoUElQRUxJTkVfSFRUUF9VU0VSX0FHRU5UX0hBTkRMRVIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG51bGwgIT0gcGlwZWxpbmUuZ2V0KFBJUEVMSU5FX0FVVEhFTlRJQ0FUT1IpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQ2hhbm5lbEhhbmRsZXIgYXV0aGVudGljYXRvciA9IHBpcGVsaW5lLmdldChQSVBFTElORV9BVVRIRU5USUNBVE9SKTsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5yZW1vdmUoUElQRUxJTkVfQVVUSEVOVElDQVRPUik7Ci0gICAgICAgICAgICAgICAgcGlwZWxpbmUuYWRkQWZ0ZXIoUElQRUxJTkVfSFRUUF9BR0dSRUdBVE9SLCBQSVBFTElORV9BVVRIRU5USUNBVE9SLCBhdXRoZW50aWNhdG9yKTsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRBZnRlcihQSVBFTElORV9BVVRIRU5USUNBVE9SLCBQSVBFTElORV9IVFRQX1VTRVJfQUdFTlRfSEFORExFUiwgbmV3IEh0dHBVc2VyQWdlbnRIYW5kbGVyKCkpOwotICAgICAgICAgICAgICAgIHBpcGVsaW5lLmFkZEFmdGVyKFBJUEVMSU5FX0hUVFBfVVNFUl9BR0VOVF9IQU5ETEVSLCBQSVBFTElORV9SRVFVRVNUX0hBTkRMRVIsIHRoaXMuaHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRBZnRlcihQSVBFTElORV9IVFRQX0FHR1JFR0FUT1IsIFBJUEVMSU5FX0hUVFBfVVNFUl9BR0VOVF9IQU5ETEVSLCBuZXcgSHR0cFVzZXJBZ2VudEhhbmRsZXIoKSk7Ci0gICAgICAgICAgICAgICAgcGlwZWxpbmUuYWRkQWZ0ZXIoUElQRUxJTkVfSFRUUF9VU0VSX0FHRU5UX0hBTkRMRVIsIFBJUEVMSU5FX1JFUVVFU1RfSEFORExFUiwgdGhpcy5odHRwR3JlbWxpbkVuZHBvaW50SGFuZGxlcik7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGNoYW5uZWxSZWFkKCkncyBkbyBub3QgcHJvcGFnYXRlIGRvd24gdGhlIHBpcGVsaW5lIHBhc3QgSHR0cEdyZW1saW5FbmRwb2ludEhhbmRsZXIKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjdHguZmlyZUNoYW5uZWxSZWFkKG9iaik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZXhjZXB0aW9uQ2F1Z2h0KGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIFRocm93YWJsZSBjYXVzZSkgewotICAgICAgICAvLyBUaGUgbG9nIHByaW50aW5nIGhlcmUgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2hlbiBhbiBleGNlcHRpb24gdGhyb3duIGJ5IE5ldHR5IHJlYWNoZXMgdGhpcyBtZXRob2QsCi0gICAgICAgIC8vIGlmIHRoZSBlcnJvciBpcyBub3QgcHJpbnRlZCwgdGhlIHNlcnZlciBzaWRlIHdpbGwgbm90IGJlIGFibGUgdG8gcGVyY2VpdmUgd2hhdCBoYXMgaGFwcGVuZWQuCi0gICAgICAgIC8vIEZvciBleGFtcGxlLCBpZiB0aGUgbWF4Q29udGVudExlbmd0aCBpbiBKYW51c0dyYXBoJ3MgR3JlbWxpbi1TZXJ2ZXIgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gNjU1MzYsCi0gICAgICAgIC8vIGFuZCB0aGUgY2xpZW50IHNlbmRzIGRhdGEgb3ZlciB0aGlzIHNpemUgdmlhIFdlYlNvY2tldCwgdGhlIEphbnVzR3JhcGggc2VydmVyIGxvZ3Mgd2lsbCBhcHBlYXIgbm9ybWFsLAotICAgICAgICAvLyBidXQgdGhlIGNsaWVudCB3aWxsIGV4cGVyaWVuY2UgYSBkaXNjb25uZWN0aW9uLCBtYWtpbmcgaXQgZGlmZmljdWx0IHRvIGltbWVkaWF0ZWx5IGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgaXNzdWUuCi0gICAgICAgIGxvZ2dlci5lcnJvcigiQ291bGQgbm90IHByb2Nlc3MgdGhlIHJlcXVlc3QiLCBjYXVzZSk7Ci0gICAgICAgIGN0eC5jbG9zZSgpOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV3NHcmVtbGluQmluYXJ5UmVxdWVzdERlY29kZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5CaW5hcnlSZXF1ZXN0RGVjb2Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDY0NWRlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5CaW5hcnlSZXF1ZXN0RGVjb2Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlcjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLk1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LkJpbmFyeVdlYlNvY2tldEZyYW1lOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBEZWNvZGVzIHRoZSBjb250ZW50cyBvZiBhIHtAY29kZSBCaW5hcnlXZWJTb2NrZXRGcmFtZX0uICBCaW5hcnktYmFzZWQgZnJhbWVzIGFzc3VtZSB0aGF0IHRoZSBmb3JtYXQgaXMgZW5jb2RlZAotICogaW4gdGhlIGZpcnN0IGluaXRpYWwgYnl0ZXMgb2YgdGhlIG1lc3NhZ2UuICBGcm9tIHRoZXJlIHRoZSBwcm9wZXIgc2VyaWFsaXplciBjYW4gYmUgY2hvc2VuIGFuZCB0aGUgbWVzc2FnZQotICogY2FuIHRoZW4gYmUgZGVzZXJpYWxpemVkLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgY2xhc3MgV3NHcmVtbGluQmluYXJ5UmVxdWVzdERlY29kZXIgZXh0ZW5kcyBNZXNzYWdlVG9NZXNzYWdlRGVjb2RlcjxCaW5hcnlXZWJTb2NrZXRGcmFtZT4gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihXc0dyZW1saW5CaW5hcnlSZXF1ZXN0RGVjb2Rlci5jbGFzcyk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDaGFyc2V0IFVURjggPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnM7Ci0KLSAgICBwdWJsaWMgV3NHcmVtbGluQmluYXJ5UmVxdWVzdERlY29kZXIoZmluYWwgTWFwPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXJzKSB7Ci0gICAgICAgIHRoaXMuc2VyaWFsaXplcnMgPSBzZXJpYWxpemVyczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBkZWNvZGUoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGNoYW5uZWxIYW5kbGVyQ29udGV4dCwgZmluYWwgQmluYXJ5V2ViU29ja2V0RnJhbWUgZnJhbWUsIGZpbmFsIExpc3Q8T2JqZWN0PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBtZXNzYWdlQnl0ZXMgPSBmcmFtZS5jb250ZW50KCk7Ci0gICAgICAgIGZpbmFsIGJ5dGUgbGVuID0gbWVzc2FnZUJ5dGVzLnJlYWRCeXRlKCk7Ci0gICAgICAgIGlmIChsZW4gPD0gMCkgewotICAgICAgICAgICAgb2JqZWN0cy5hZGQoUmVxdWVzdE1lc3NhZ2UuSU5WQUxJRCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBCeXRlQnVmIGNvbnRlbnRUeXBlQnl0ZXMgPSBjaGFubmVsSGFuZGxlckNvbnRleHQuYWxsb2MoKS5idWZmZXIobGVuKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1lc3NhZ2VCeXRlcy5yZWFkQnl0ZXMoY29udGVudFR5cGVCeXRlcyk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29udGVudFR5cGUgPSBjb250ZW50VHlwZUJ5dGVzLnRvU3RyaW5nKFVURjgpOwotICAgICAgICAgICAgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciA9IHNlbGVjdChjb250ZW50VHlwZSwgU2VydmVyU2VyaWFsaXplcnMuREVGQVVMVF9CSU5BUllfU0VSSUFMSVpFUik7Ci0KLSAgICAgICAgICAgIC8vIGl0J3MgaW1wb3J0YW50IHRvIHJlLWluaXRpYWxpemUgdGhlc2UgY2hhbm5lbCBhdHRyaWJ1dGVzIGFzIHRoZXkgYXBwbHkgZ2xvYmFsbHkgdG8gdGhlIGNoYW5uZWwuIGluCi0gICAgICAgICAgICAvLyBvdGhlciB3b3JkcywgdGhlIG5leHQgcmVxdWVzdCB0byB0aGlzIGNoYW5uZWwgbWlnaHQgbm90IGNvbWUgd2l0aCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFuZCBtaXhlZAotICAgICAgICAgICAgLy8gc3RhdGUgY2FuIGNhcnJ5IHRocm91Z2ggZnJvbSBvbmUgcmVxdWVzdCB0byB0aGUgbmV4dAotICAgICAgICAgICAgY2hhbm5lbEhhbmRsZXJDb250ZXh0LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlNFU1NJT04pLnNldChudWxsKTsKLSAgICAgICAgICAgIGNoYW5uZWxIYW5kbGVyQ29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5zZXQoc2VyaWFsaXplcik7Ci0gICAgICAgICAgICBjaGFubmVsSGFuZGxlckNvbnRleHQuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuVVNFX0JJTkFSWSkuc2V0KHRydWUpOwotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG9iamVjdHMuYWRkKHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KG1lc3NhZ2VCeXRlcy5kaXNjYXJkUmVhZEJ5dGVzKCkpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFNlcmlhbGl6YXRpb25FeGNlcHRpb24gc2UpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiU2VyaWFsaXphdGlvbiBlcnJvciB3aGlsZSBkZWNvZGluZyByZXF1ZXN0Iiwgc2UpOwotICAgICAgICAgICAgICAgIG9iamVjdHMuYWRkKFJlcXVlc3RNZXNzYWdlLklOVkFMSUQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY29udGVudFR5cGVCeXRlcy5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlbGVjdChmaW5hbCBTdHJpbmcgbWltZVR5cGUsIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IGRlZmF1bHRTZXJpYWxpemVyKSB7Ci0gICAgICAgIGlmIChsb2dnZXIuaXNXYXJuRW5hYmxlZCgpICYmICFzZXJpYWxpemVycy5jb250YWluc0tleShtaW1lVHlwZSkpCi0gICAgICAgICAgICBsb2dnZXIud2FybigiR3JlbWxpbiBTZXJ2ZXIgaXMgbm90IGNvbmZpZ3VyZWQgd2l0aCBhIHNlcmlhbGl6ZXIgZm9yIHRoZSByZXF1ZXN0ZWQgbWltZSB0eXBlIFt7fV0gLSB1c2luZyB7fSBieSBkZWZhdWx0IiwKLSAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUsIGRlZmF1bHRTZXJpYWxpemVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQotICAgICAgICByZXR1cm4gc2VyaWFsaXplcnMuZ2V0T3JEZWZhdWx0KG1pbWVUeXBlLCBkZWZhdWx0U2VyaWFsaXplcik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1dzR3JlbWxpbkNsb3NlUmVxdWVzdERlY29kZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5DbG9zZVJlcXVlc3REZWNvZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3M2RhYjUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL1dzR3JlbWxpbkNsb3NlUmVxdWVzdERlY29kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuTWVzc2FnZVRvTWVzc2FnZURlY29kZXI7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguQ2xvc2VXZWJTb2NrZXRGcmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBIYW5kbGVzIGNsb3NlIHJlcXVlc3RzIG92ZXIgd2ViIHNvY2tldHMuICBJZiB0aGUgcmVxdWVzdCBpcyBzZXNzaW9uLWJhc2VkIHRoZW4gdGhlIGNsb3NlIG9wZXJhdGlvbiB3aWxsIG5vdCBvbmx5IGNsb3NlCi0gKiB0aGUgY2hhbm5lbCBidXQgYWxzbyBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgcm9sbGJhY2sgdW5jb21taXR0ZWQgdHJhbnNhY3Rpb25zLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQENoYW5uZWxIYW5kbGVyLlNoYXJhYmxlCi1wdWJsaWMgY2xhc3MgV3NHcmVtbGluQ2xvc2VSZXF1ZXN0RGVjb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VEZWNvZGVyPENsb3NlV2ViU29ja2V0RnJhbWU+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV3NHcmVtbGluQ2xvc2VSZXF1ZXN0RGVjb2Rlci5jbGFzcyk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDaGFyc2V0IFVURjggPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnM7Ci0KLSAgICBwdWJsaWMgV3NHcmVtbGluQ2xvc2VSZXF1ZXN0RGVjb2RlcihmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnMpIHsKLSAgICAgICAgdGhpcy5zZXJpYWxpemVycyA9IHNlcmlhbGl6ZXJzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGRlY29kZShmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0LCBmaW5hbCBDbG9zZVdlYlNvY2tldEZyYW1lIGZyYW1lLCBmaW5hbCBMaXN0PE9iamVjdD4gb2JqZWN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWYgbWVzc2FnZUJ5dGVzID0gZnJhbWUuY29udGVudCgpOwotICAgICAgICBmaW5hbCBieXRlIGxlbiA9IG1lc3NhZ2VCeXRlcy5yZWFkQnl0ZSgpOwotICAgICAgICBpZiAobGVuIDw9IDApIHsKLSAgICAgICAgICAgIG9iamVjdHMuYWRkKFJlcXVlc3RNZXNzYWdlLklOVkFMSUQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBjb250ZW50VHlwZUJ5dGVzID0gY2hhbm5lbEhhbmRsZXJDb250ZXh0LmFsbG9jKCkuYnVmZmVyKGxlbik7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtZXNzYWdlQnl0ZXMucmVhZEJ5dGVzKGNvbnRlbnRUeXBlQnl0ZXMpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGVCeXRlcy50b1N0cmluZyhVVEY4KTsKLSAgICAgICAgICAgIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIgPSBzZWxlY3QoY29udGVudFR5cGUsIFNlcnZlclNlcmlhbGl6ZXJzLkRFRkFVTFRfQklOQVJZX1NFUklBTElaRVIpOwotCi0gICAgICAgICAgICAvLyBpdCdzIGltcG9ydGFudCB0byByZS1pbml0aWFsaXplIHRoZXNlIGNoYW5uZWwgYXR0cmlidXRlcyBhcyB0aGV5IGFwcGx5IGdsb2JhbGx5IHRvIHRoZSBjaGFubmVsLiBpbgotICAgICAgICAgICAgLy8gb3RoZXIgd29yZHMsIHRoZSBuZXh0IHJlcXVlc3QgdG8gdGhpcyBjaGFubmVsIG1pZ2h0IG5vdCBjb21lIHdpdGggdGhlIHNhbWUgY29uZmlndXJhdGlvbiBhbmQgbWl4ZWQKLSAgICAgICAgICAgIC8vIHN0YXRlIGNhbiBjYXJyeSB0aHJvdWdoIGZyb20gb25lIHJlcXVlc3QgdG8gdGhlIG5leHQKLSAgICAgICAgICAgIGNoYW5uZWxIYW5kbGVyQ29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVNTSU9OKS5zZXQobnVsbCk7Ci0gICAgICAgICAgICBjaGFubmVsSGFuZGxlckNvbnRleHQuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuU0VSSUFMSVpFUikuc2V0KHNlcmlhbGl6ZXIpOwotICAgICAgICAgICAgY2hhbm5lbEhhbmRsZXJDb250ZXh0LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlVTRV9CSU5BUlkpLnNldCh0cnVlKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBvYmplY3RzLmFkZChzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVxdWVzdChtZXNzYWdlQnl0ZXMuZGlzY2FyZFJlYWRCeXRlcygpKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHNlKSB7Ci0gICAgICAgICAgICAgICAgb2JqZWN0cy5hZGQoUmVxdWVzdE1lc3NhZ2UuSU5WQUxJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjb250ZW50VHlwZUJ5dGVzLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VsZWN0KGZpbmFsIFN0cmluZyBtaW1lVHlwZSwgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gZGVmYXVsdFNlcmlhbGl6ZXIpIHsKLSAgICAgICAgaWYgKGxvZ2dlci5pc1dhcm5FbmFibGVkKCkgJiYgIXNlcmlhbGl6ZXJzLmNvbnRhaW5zS2V5KG1pbWVUeXBlKSkKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJHcmVtbGluIFNlcnZlciBpcyBub3QgY29uZmlndXJlZCB3aXRoIGEgc2VyaWFsaXplciBmb3IgdGhlIHJlcXVlc3RlZCBtaW1lIHR5cGUgW3t9XSAtIHVzaW5nIHt9IGJ5IGRlZmF1bHQiLAotICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSwgZGVmYXVsdFNlcmlhbGl6ZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIHJldHVybiBzZXJpYWxpemVycy5nZXRPckRlZmF1bHQobWltZVR5cGUsIGRlZmF1bHRTZXJpYWxpemVyKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV3NHcmVtbGluUmVzcG9uc2VGcmFtZUVuY29kZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5SZXNwb25zZUZyYW1lRW5jb2Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UyNjllLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5SZXNwb25zZUZyYW1lRW5jb2Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXI7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5NZXNzYWdlVG9NZXNzYWdlRW5jb2RlcjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5CaW5hcnlXZWJTb2NrZXRGcmFtZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5UZXh0V2ViU29ja2V0RnJhbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBFbmNvZGVzIHtAY29kZSBCeXRlQnVmfSBhbmQge0Bjb2RlIFN0cmluZ30gdmFsdWVzIHRvIFdlYnNvY2tldCBmcmFtZXMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AQ2hhbm5lbEhhbmRsZXIuU2hhcmFibGUKLXB1YmxpYyBjbGFzcyBXc0dyZW1saW5SZXNwb25zZUZyYW1lRW5jb2RlciBleHRlbmRzIE1lc3NhZ2VUb01lc3NhZ2VFbmNvZGVyPEZyYW1lPiB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZW5jb2RlKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIEZyYW1lIG8sIGZpbmFsIExpc3Q8T2JqZWN0PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKG8uZ2V0TXNnKCkgaW5zdGFuY2VvZiBCeXRlQnVmKQotICAgICAgICAgICAgb2JqZWN0cy5hZGQobmV3IEJpbmFyeVdlYlNvY2tldEZyYW1lKChCeXRlQnVmKSBvLmdldE1zZygpKSk7Ci0gICAgICAgIGVsc2UgaWYgKG8uZ2V0TXNnKCkgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICAgICAgICBvYmplY3RzLmFkZChuZXcgVGV4dFdlYlNvY2tldEZyYW1lKHRydWUsIDAsIG8uZ2V0TXNnKCkudG9TdHJpbmcoKSkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5UZXh0UmVxdWVzdERlY29kZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc0dyZW1saW5UZXh0UmVxdWVzdERlY29kZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzljZjU1NC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV3NHcmVtbGluVGV4dFJlcXVlc3REZWNvZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuTWVzc2FnZVRleHRTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuTWVzc2FnZVRvTWVzc2FnZURlY29kZXI7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguVGV4dFdlYlNvY2tldEZyYW1lOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIERlY29kZXMgdGhlIGNvbnRlbnRzIG9mIGEge0BsaW5rIFRleHRXZWJTb2NrZXRGcmFtZX0uICBUZXh0LWJhc2VkIGZyYW1lcyBhcmUgYWx3YXlzIGFzc3VtZWQgdG8gYmUKLSAqICJhcHBsaWNhdGlvbi9qc29uIiB3aGVuIGl0IGNvbWVzIHRvIHNlcmlhbGl6YXRpb24uCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AQ2hhbm5lbEhhbmRsZXIuU2hhcmFibGUKLXB1YmxpYyBjbGFzcyBXc0dyZW1saW5UZXh0UmVxdWVzdERlY29kZXIgZXh0ZW5kcyBNZXNzYWdlVG9NZXNzYWdlRGVjb2RlcjxUZXh0V2ViU29ja2V0RnJhbWU+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV3NHcmVtbGluVGV4dFJlcXVlc3REZWNvZGVyLmNsYXNzKTsKLQotICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXJzOwotCi0gICAgcHVibGljIFdzR3JlbWxpblRleHRSZXF1ZXN0RGVjb2RlcihmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnMpIHsKLSAgICAgICAgdGhpcy5zZXJpYWxpemVycyA9IHNlcmlhbGl6ZXJzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGRlY29kZShmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY2hhbm5lbEhhbmRsZXJDb250ZXh0LCBmaW5hbCBUZXh0V2ViU29ja2V0RnJhbWUgZnJhbWUsIGZpbmFsIExpc3Q8T2JqZWN0PiBvYmplY3RzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIHRoZSBkZWZhdWx0IHNlcmlhbGl6ZXIgbXVzdCBiZSBhIE1lc3NhZ2VUZXh0U2VyaWFsaXplciBpbnN0YW5jZSB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhpcyBkZWNvZGVyCi0gICAgICAgICAgICBmaW5hbCBNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciA9IChNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4pIHNlbGVjdCgiYXBwbGljYXRpb24vanNvbiIsIFNlcnZlclNlcmlhbGl6ZXJzLkRFRkFVTFRfVEVYVF9TRVJJQUxJWkVSKTsKLQotICAgICAgICAgICAgLy8gaXQncyBpbXBvcnRhbnQgdG8gcmUtaW5pdGlhbGl6ZSB0aGVzZSBjaGFubmVsIGF0dHJpYnV0ZXMgYXMgdGhleSBhcHBseSBnbG9iYWxseSB0byB0aGUgY2hhbm5lbC4gaW4KLSAgICAgICAgICAgIC8vIG90aGVyIHdvcmRzLCB0aGUgbmV4dCByZXF1ZXN0IHRvIHRoaXMgY2hhbm5lbCBtaWdodCBub3QgY29tZSB3aXRoIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gYW5kIG1peGVkCi0gICAgICAgICAgICAvLyBzdGF0ZSBjYW4gY2FycnkgdGhyb3VnaCBmcm9tIG9uZSByZXF1ZXN0IHRvIHRoZSBuZXh0Ci0gICAgICAgICAgICBjaGFubmVsSGFuZGxlckNvbnRleHQuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuU0VTU0lPTikuc2V0KG51bGwpOwotICAgICAgICAgICAgY2hhbm5lbEhhbmRsZXJDb250ZXh0LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlNFUklBTElaRVIpLnNldChzZXJpYWxpemVyKTsKLSAgICAgICAgICAgIGNoYW5uZWxIYW5kbGVyQ29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5VU0VfQklOQVJZKS5zZXQoZmFsc2UpOwotCi0gICAgICAgICAgICBvYmplY3RzLmFkZChzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVxdWVzdChmcmFtZS50ZXh0KCkpKTsKLSAgICAgICAgfSBjYXRjaCAoU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBzZSkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlNlcmlhbGl6YXRpb24gZXJyb3Igd2hpbGUgZGVjb2RpbmcgcmVxdWVzdCIsIHNlKTsKLSAgICAgICAgICAgIG9iamVjdHMuYWRkKFJlcXVlc3RNZXNzYWdlLklOVkFMSUQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZWxlY3QoZmluYWwgU3RyaW5nIG1pbWVUeXBlLCBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjw/PiBkZWZhdWx0U2VyaWFsaXplcikgewotICAgICAgICBpZiAobG9nZ2VyLmlzV2FybkVuYWJsZWQoKSAmJiAhc2VyaWFsaXplcnMuY29udGFpbnNLZXkobWltZVR5cGUpKQotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIkdyZW1saW4gU2VydmVyIGlzIG5vdCBjb25maWd1cmVkIHdpdGggYSBzZXJpYWxpemVyIGZvciB0aGUgcmVxdWVzdGVkIG1pbWUgdHlwZSBbe31dIC0gdXNpbmcge30gYnkgZGVmYXVsdCIsCi0gICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlLCBkZWZhdWx0U2VyaWFsaXplci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXJzLmdldE9yRGVmYXVsdChtaW1lVHlwZSwgZGVmYXVsdFNlcmlhbGl6ZXIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc1VzZXJBZ2VudEhhbmRsZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9Xc1VzZXJBZ2VudEhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwODJlOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvV3NVc2VyQWdlbnRIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0cmljUmVnaXN0cnk7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSW5ib3VuZEhhbmRsZXJBZGFwdGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyczsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5XZWJTb2NrZXRTZXJ2ZXJQcm90b2NvbEhhbmRsZXI7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JlbWxpblNlcnZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLk1ldHJpY01hbmFnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotLyoqCi0gKiBDaGFubmVsIGhhbmRsZXIgd2hpY2ggZXh0cmFjdHMgYSB1c2VyIGFnZW50IGhlYWRlciBmcm9tIGEgd2ViIHNvY2tldCBoYW5kc2hha2UgaWYgcHJlc2VudAotICogdGhlbiBsb2dzIHRoZSB1c2VyIGFnZW50IGFuZCBzdG9yZXMgaXQgYXMgYSBjaGFubmVsIGF0dHJpYnV0ZSBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KLSAqLwotcHVibGljIGNsYXNzIFdzVXNlckFnZW50SGFuZGxlciBleHRlbmRzIENoYW5uZWxJbmJvdW5kSGFuZGxlckFkYXB0ZXIgewotICAgIC8qKgotICAgICAqIFRoaXMgY29uc3RhbnQgY2FwcyB0aGUgbnVtYmVyIG9mIHVuaXF1ZSB1c2VyIGFnZW50cyB3aGljaCB3aWxsIGJlIHRyYWNrZWQgaW4gdGhlIG1ldHJpY3MuIEFueSBuZXcgdW5pcXVlCi0gICAgICogdXNlciBhZ2VudHMgd2lsbCBiZSByZXBsYWNlZCB3aXRoICJvdGhlciIgaW4gdGhlIG1ldHJpY3MgYWZ0ZXIgdGhpcyBjYXAgaGFzIGJlZW4gcmVhY2hlZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1VTRVJfQUdFTlRfTUVUUklDUyA9IDEwMDAwOwotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBVU0VSX0FHRU5UX0hFQURFUl9OQU1FID0gIlVzZXItQWdlbnQiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFdzVXNlckFnZW50SGFuZGxlci5jbGFzcyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8U3RyaW5nPiBVU0VSX0FHRU5UX0FUVFJfS0VZID0gQXR0cmlidXRlS2V5LnZhbHVlT2YoVVNFUl9BR0VOVF9IRUFERVJfTkFNRSk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1c2VyRXZlbnRUcmlnZ2VyZWQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgamF2YS5sYW5nLk9iamVjdCBldnQpIHsKLSAgICAgICAgaWYgKGV2dCBpbnN0YW5jZW9mIFdlYlNvY2tldFNlcnZlclByb3RvY29sSGFuZGxlci5IYW5kc2hha2VDb21wbGV0ZSkgewotICAgICAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgcmVxdWVzdEhlYWRlcnMgPSAoKFdlYlNvY2tldFNlcnZlclByb3RvY29sSGFuZGxlci5IYW5kc2hha2VDb21wbGV0ZSkgZXZ0KS5yZXF1ZXN0SGVhZGVycygpOwotCi0gICAgICAgICAgICBpZiAocmVxdWVzdEhlYWRlcnMuY29udGFpbnMoVVNFUl9BR0VOVF9IRUFERVJfTkFNRSkpewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB1c2VyQWdlbnQgPSByZXF1ZXN0SGVhZGVycy5nZXQoVVNFUl9BR0VOVF9IRUFERVJfTkFNRSk7Ci0KLSAgICAgICAgICAgICAgICBjdHguY2hhbm5lbCgpLmF0dHIoVVNFUl9BR0VOVF9BVFRSX0tFWSkuc2V0KHVzZXJBZ2VudCk7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJOZXcgQ29ubmVjdGlvbiBvbiBjaGFubmVsIFt7fV0gd2l0aCB1c2VyIGFnZW50IFt7fV0iLCBjdHguY2hhbm5lbCgpLmlkKCkuYXNTaG9ydFRleHQoKSwgdXNlckFnZW50KTsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBtZXRyaWNOYW1lID0gTWV0cmljUmVnaXN0cnkubmFtZShHcmVtbGluU2VydmVyLmNsYXNzLCAidXNlci1hZ2VudCIsIHVzZXJBZ2VudCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGNoZWNrIGlzIHRvIGFkZHJlc3MgYSBjb25jZXJuIHRoYXQgYW4gYXR0YWNrZXIgbWF5IHRyeSB0byBmaWxsIHRoZSBzZXJ2ZXIncyBtZW1vcnkgd2l0aCBhIHZlcnkKLSAgICAgICAgICAgICAgICAvLyBsYXJnZSBudW1iZXIgb2YgdW5pcXVlIHVzZXIgYWdlbnRzLiBGb3IgdGhpcyByZWFzb24gdGhlIHVzZXIgYWdlbnQgaXMgcmVwbGFjZWQgd2l0aCAib3RoZXIiCi0gICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBwdXJwb3NlIG9mIG1ldHJpY3MgaWYgdGhpcyBjYXAgaXMgZXZlciBleGNlZWRlZCBhbmQgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGFscmVhZHkgYmVpbmcgdHJhY2tlZC4KLSAgICAgICAgICAgICAgICBpZihNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldENvdW50ZXJTaXplKCkgPiBNQVhfVVNFUl9BR0VOVF9NRVRSSUNTICYmCi0gICAgICAgICAgICAgICAgICAgICFNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmNvbnRhaW5zKG1ldHJpY05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1ldHJpY05hbWUgPSBNZXRyaWNSZWdpc3RyeS5uYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJ1c2VyLWFnZW50IiwgIm90aGVyIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE1ldHJpY01hbmFnZXIuSU5TVEFOQ0UuZ2V0Q291bnRlcihtZXRyaWNOYW1lKS5pbmMoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJOZXcgQ29ubmVjdGlvbiBvbiBjaGFubmVsIFt7fV0gd2l0aCBubyB1c2VyIGFnZW50IHByb3ZpZGVkIiwgY3R4LmNoYW5uZWwoKS5pZCgpLmFzU2hvcnRUZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGN0eC5maXJlVXNlckV2ZW50VHJpZ2dlcmVkKGV2dCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC9BYnN0cmFjdEV2YWxPcFByb2Nlc3Nvci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC9BYnN0cmFjdEV2YWxPcFByb2Nlc3Nvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGJlYjkyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcDsKLQotaW1wb3J0IGNvbS5jb2RhaGFsZS5tZXRyaWNzLlRpbWVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5UaW1lZEludGVycnVwdFRpbWVvdXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5GYWlsdXJlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3BlcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBvcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLk9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRlZFVzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5TdGF0ZUtleTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Db2x1bW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyZW1saW5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JhcGhNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuTWV0cmljTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNsb3NlYWJsZUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuVGVtcG9yYXJ5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5UaHJvd2luZ0NvbnN1bWVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5jb2RlaGF1cy5ncm9vdnkuY29udHJvbC5NdWx0aXBsZUNvbXBpbGF0aW9uRXJyb3JzRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZheC5zY3JpcHQuQmluZGluZ3M7Ci1pbXBvcnQgamF2YXguc2NyaXB0LlNpbXBsZUJpbmRpbmdzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuUmVqZWN0ZWRFeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkubmFtZTsKLQotLyoqCi0gKiBBIGJhc2Uge0BsaW5rIE9wUHJvY2Vzc29yfSBpbXBsZW1lbnRhdGlvbiB0aGF0IGhlbHBzIHdpdGggb3BlcmF0aW9ucyB0aGF0IGRlYWwgd2l0aCBzY3JpcHQgZXZhbHVhdGlvbiBmdW5jdGlvbnMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IgZXh0ZW5kcyBBYnN0cmFjdE9wUHJvY2Vzc29yIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IuY2xhc3MpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBhdWRpdExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEdyZW1saW5TZXJ2ZXIuQVVESVRfTE9HR0VSX05BTUUpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVGltZXIgZXZhbE9wVGltZXIgPSBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldFRpbWVyKG5hbWUoR3JlbWxpblNlcnZlci5jbGFzcywgIm9wIiwgImV2YWwiKSk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGF0IGNhbiBiZSBwYXNzZWQgb24gYSBzY3JpcHQgZXZhbHVhdGlvbiByZXF1ZXN0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19NQVhfUEFSQU1FVEVSUyA9ICJtYXhQYXJhbWV0ZXJzIjsKLQotICAgIC8qKgotICAgICAqIERlZmF1bHQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYWxsb3dlZCBvbiBhIHNjcmlwdCBldmFsdWF0aW9uIHJlcXVlc3QuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfUEFSQU1FVEVSUyA9IDE2OwotCi0gICAgcHJvdGVjdGVkIGludCBtYXhQYXJhbWV0ZXJzID0gREVGQVVMVF9NQVhfUEFSQU1FVEVSUzsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbWF5IG9yIG1heSBub3QgYmUgdGhlIGZ1bGwgc2V0IG9mIGludmFsaWQgYmluZGluZyBrZXlzLiAgSXQgaXMgZGVwZW5kZW50IG9uIHRoZSBzdGF0aWMgaW1wb3J0cyBtYWRlIHRvCi0gICAgICogR3JlbWxpbiBTZXJ2ZXIuICBUaGlzIHNob3VsZCBnZXQgcmlkIG9mIHRoZSB3b3JzdCBvZmZlbmRlcnMgdGhvdWdoIGFuZCBwcm92aWRlIGEgZ29vZCBtZXNzYWdlIGJhY2sgdG8gdGhlCi0gICAgICogY2FsbGluZyBjbGllbnQuCi0gICAgICogPHAvPgotICAgICAqIFVzZSBvZiB7QGNvZGUgdG9VcHBlckNhc2UoKX0gb24gdGhlIGFjY2Vzc29yIHZhbHVlcyBvZiB7QGxpbmsgVH0gc29sdmVzIGFuIGlzc3VlIHdoZXJlIHRoZSB7QGNvZGUgU2NyaXB0RW5naW5lfQotICAgICAqIGlnbm9yZXMgcHJpdmF0ZSBzY29wZSBvbiB7QGxpbmsgVH0gYW5kIGltcG9ydHMgc3RhdGljIGZpZWxkcy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFNldDxTdHJpbmc+IElOVkFMSURfQklORElOR1NfS0VZUyA9IG5ldyBIYXNoU2V0PD4oKTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGRBbGwoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBULmlkLm5hbWUoKSwgVC5rZXkubmFtZSgpLAotICAgICAgICAgICAgICAgIFQubGFiZWwubmFtZSgpLCBULnZhbHVlLm5hbWUoKSwKLSAgICAgICAgICAgICAgICBULmlkLmdldEFjY2Vzc29yKCksIFQua2V5LmdldEFjY2Vzc29yKCksCi0gICAgICAgICAgICAgICAgVC5sYWJlbC5nZXRBY2Nlc3NvcigpLCBULnZhbHVlLmdldEFjY2Vzc29yKCksCi0gICAgICAgICAgICAgICAgVC5pZC5nZXRBY2Nlc3NvcigpLnRvVXBwZXJDYXNlKCksIFQua2V5LmdldEFjY2Vzc29yKCkudG9VcHBlckNhc2UoKSwKLSAgICAgICAgICAgICAgICBULmxhYmVsLmdldEFjY2Vzc29yKCkudG9VcHBlckNhc2UoKSwgVC52YWx1ZS5nZXRBY2Nlc3NvcigpLnRvVXBwZXJDYXNlKCkpKTsKLQotICAgICAgICBmb3IgKENvbHVtbiBlbnVtSXRlbSA6IENvbHVtbi52YWx1ZXMoKSkgewotICAgICAgICAgICAgSU5WQUxJRF9CSU5ESU5HU19LRVlTLmFkZChlbnVtSXRlbS5uYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChPcmRlciBlbnVtSXRlbSA6IE9yZGVyLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBJTlZBTElEX0JJTkRJTkdTX0tFWVMuYWRkKGVudW1JdGVtLm5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKE9wZXJhdG9yIGVudW1JdGVtIDogT3BlcmF0b3IudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGQoZW51bUl0ZW0ubmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoU2NvcGUgZW51bUl0ZW0gOiBTY29wZS52YWx1ZXMoKSkgewotICAgICAgICAgICAgSU5WQUxJRF9CSU5ESU5HU19LRVlTLmFkZChlbnVtSXRlbS5uYW1lKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChQb3AgZW51bUl0ZW0gOiBQb3AudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIElOVkFMSURfQklORElOR1NfS0VZUy5hZGQoZW51bUl0ZW0ubmFtZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBBYnN0cmFjdEV2YWxPcFByb2Nlc3NvcihmaW5hbCBib29sZWFuIG1hbmFnZVRyYW5zYWN0aW9ucykgewotICAgICAgICBzdXBlcihtYW5hZ2VUcmFuc2FjdGlvbnMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3ZpZGVzIGFuIG9wZXJhdGlvbiBmb3IgZXZhbHVhdGluZyBhIEdyZW1saW4gc2NyaXB0LgotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgVGhyb3dpbmdDb25zdW1lcjxDb250ZXh0PiBnZXRFdmFsT3AoKTsKLQotICAgIC8qKgotICAgICAqIEEgc3ViLWNsYXNzIG1heSBoYXZlIGFkZGl0aW9uYWwgIm9wcyIgdGhhdCBpdCB3aWxsIHNlcnZpY2UuICBDYWxscyB0byB7QGxpbmsgT3BQcm9jZXNzb3Ijc2VsZWN0KENvbnRleHQpfSB0aGF0IGFyZSBub3QKLSAgICAgKiBoYW5kbGVkIHdpbGwgYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIHRvIHNlZSBpZiB0aGUgc3ViLWNsYXNzIGNhbiBzZXJ2aWNlIHRoZSByZXF1ZXN0ZWQgb3AgY29kZS4KLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IE9wdGlvbmFsPFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4+IHNlbGVjdE90aGVyKGZpbmFsIENvbnRleHQgY3R4KSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb247Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVGhyb3dpbmdDb25zdW1lcjxDb250ZXh0PiBzZWxlY3QoZmluYWwgQ29udGV4dCBjdHgpIHRocm93cyBPcFByb2Nlc3NvckV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1lc3NhZ2UgPSBjdHguZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCJTZWxlY3RpbmcgcHJvY2Vzc29yIGZvciBSZXF1ZXN0TWVzc2FnZSB7fSIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGZpbmFsIFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4gb3A7Ci0gICAgICAgIHN3aXRjaCAobWVzc2FnZS5nZXRPcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRva2Vucy5PUFNfRVZBTDoKLSAgICAgICAgICAgICAgICBvcCA9IHZhbGlkYXRlRXZhbE1lc3NhZ2UobWVzc2FnZSkub3JFbHNlKGdldEV2YWxPcCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVG9rZW5zLk9QU19JTlZBTElEOgotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2dJbnZhbGlkID0gU3RyaW5nLmZvcm1hdCgiTWVzc2FnZSBjb3VsZCBub3QgYmUgcGFyc2VkLiAgQ2hlY2sgdGhlIGZvcm1hdCBvZiB0aGUgcmVxdWVzdC4gWyVzXSIsIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcFByb2Nlc3NvckV4Y2VwdGlvbihtc2dJbnZhbGlkLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9NQUxGT1JNRURfUkVRVUVTVCkuc3RhdHVzTWVzc2FnZShtc2dJbnZhbGlkKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG9wID0gc2VsZWN0T3RoZXIoY3R4KS5vckVsc2VUaHJvdygoKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2dEZWZhdWx0ID0gU3RyaW5nLmZvcm1hdCgiTWVzc2FnZSB3aXRoIG9wIGNvZGUgWyVzXSBpcyBub3QgcmVjb2duaXplZC4iLCBtZXNzYWdlLmdldE9wKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKG1zZ0RlZmF1bHQsIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX01BTEZPUk1FRF9SRVFVRVNUKS5zdGF0dXNNZXNzYWdlKG1zZ0RlZmF1bHQpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgT3B0aW9uYWw8VGhyb3dpbmdDb25zdW1lcjxDb250ZXh0Pj4gdmFsaWRhdGVFdmFsTWVzc2FnZShmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb24gewotICAgICAgICBpZiAoIW1lc3NhZ2Uub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX0dSRU1MSU4pLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiQSBtZXNzYWdlIHdpdGggYW4gWyVzXSBvcCBjb2RlIHJlcXVpcmVzIGEgWyVzXSBhcmd1bWVudC4iLCBUb2tlbnMuT1BTX0VWQUwsIFRva2Vucy5BUkdTX0dSRU1MSU4pOwotICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKG1zZywgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1lc3NhZ2UpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykuc3RhdHVzTWVzc2FnZShtc2cpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19CSU5ESU5HUykuaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcCBiaW5kaW5ncyA9IChNYXApIG1lc3NhZ2UuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19CSU5ESU5HUyk7Ci0gICAgICAgICAgICBpZiAoSXRlcmF0b3JVdGlscy5hbnlNYXRjaChiaW5kaW5ncy5rZXlTZXQoKS5pdGVyYXRvcigpLCBrIC0+IG51bGwgPT0gayB8fCAhKGsgaW5zdGFuY2VvZiBTdHJpbmcpKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCJUaGUgWyVzXSBtZXNzYWdlIGlzIHVzaW5nIG9uZSBvciBtb3JlIGludmFsaWQgYmluZGluZyBrZXlzIC0gdGhleSBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nIGFuZCBjYW5ub3QgYmUgbnVsbCIsIFRva2Vucy5PUFNfRVZBTCk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKG1zZywgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1lc3NhZ2UpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUykuc3RhdHVzTWVzc2FnZShtc2cpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gYmFkQmluZGluZ3MgPSBJdGVyYXRvclV0aWxzLnNldChJdGVyYXRvclV0aWxzLjxTdHJpbmc+ZmlsdGVyKGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCksIElOVkFMSURfQklORElOR1NfS0VZUzo6Y29udGFpbnMpKTsKLSAgICAgICAgICAgIGlmICghYmFkQmluZGluZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIlRoZSBbJXNdIG1lc3NhZ2Ugc3VwcGxpZXMgb25lIG9yIG1vcmUgaW52YWxpZCBwYXJhbWV0ZXJzIGtleSBvZiBbJXNdIC0gdGhlc2UgYXJlIHJlc2VydmVkIG5hbWVzLiIsIFRva2Vucy5PUFNfRVZBTCwgYmFkQmluZGluZ3MpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcFByb2Nlc3NvckV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlnbm9yZSBjb250cm9sIGJpbmRpbmdzIHRoYXQgZ2V0IHBhc3NlZCBpbiB3aXRoIHRoZSAiI2pzcjIyMyIgcHJlZml4IC0gdGhvc2UgYXJlbid0IHVzZWQgaW4gY29tcGlsYXRpb24KLSAgICAgICAgICAgIGlmIChJdGVyYXRvclV0aWxzLmNvdW50KEl0ZXJhdG9yVXRpbHMuZmlsdGVyKGJpbmRpbmdzLmtleVNldCgpLml0ZXJhdG9yKCksIGsgLT4gIWsudG9TdHJpbmcoKS5zdGFydHNXaXRoKCIjanNyMjIzIikpKSA+IG1heFBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiVGhlIFslc10gbWVzc2FnZSBjb250YWlucyAlcyBiaW5kaW5ncyB3aGljaCBpcyBtb3JlIHRoYW4gaXMgYWxsb3dlZCBieSB0aGUgc2VydmVyICVzIGNvbmZpZ3VyYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk9QU19FVkFMLCBiaW5kaW5ncy5zaXplKCksIG1heFBhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcFByb2Nlc3NvckV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gT3B0aW9uYWwuZW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIGdlbmVyYWxpemVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiZXZhbCIgb3BlcmF0aW9uLiAgSXQgaGFuZGxlcyBzY3JpcHQgZXZhbHVhdGlvbiBhbmQgaXRlcmF0aW9uIG9mIHJlc3VsdHMKLSAgICAgKiBzbyBhcyB0byB3cml0ZSB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfSBvYmplY3RzIGRvd24gdGhlIE5ldHR5IHBpcGVsaW5lLiAgSXQgYWxzbyBoYW5kbGVzIHNjcmlwdCB0aW1lb3V0cywKLSAgICAgKiBpdGVyYXRpb24gdGltZW91dHMsIG1ldHJpY3MgYW5kIGJ1aWxkaW5nIGJpbmRpbmdzLiAgTm90ZSB0aGF0IHJlc3VsdCBpdGVyYXRpb24gaXMgZGVsZWdhdGVkIHRvIHRoZQotICAgICAqIHtAbGluayAjaGFuZGxlSXRlcmF0b3IoQ29udGV4dCwgSXRlcmF0b3IpfSBtZXRob2QsIHNvIHRob3NlIGV4dGVuZGluZyB0aGlzIGNsYXNzIGNvdWxkIG92ZXJyaWRlIHRoYXQgbWV0aG9kIGZvcgotICAgICAqIGJldHRlciBjb250cm9sIG92ZXIgcmVzdWx0IGl0ZXJhdGlvbi4KLSAgICAgKiBAcGFyYW0gY3R4IFRoZSBjdXJyZW50IEdyZW1saW4gU2VydmVyIHtAbGluayBDb250ZXh0fS4gVGhpcyBoYW5kbGVyIGVuc3VyZXMgdGhhdCBvbmx5IGEgc2luZ2xlIGZpbmFsCi0gICAgICogICAgICAgICAgICByZXNwb25zZSBpcyBzZW50IHRvIHRoZSBjbGllbnQuCi0gICAgICogQHBhcmFtIGdyZW1saW5FeGVjdXRvclN1cHBsaWVyIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB7QGxpbmsgR3JlbWxpbkV4ZWN1dG9yfSB0byB1c2UgaW4gZXhlY3V0aW5nIHRoZQotICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgZXZhbHVhdGlvbi4KLSAgICAgKiBAcGFyYW0gYmluZGluZ3NTdXBwbGllciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUge0BsaW5rIEJpbmRpbmdzfSB0byBwcm92aWRlIHRvIHRoZQotICogICAgICAgICAgICAgICAgICAgICAgICAge0BsaW5rIEdyZW1saW5FeGVjdXRvciNldmFsfSBtZXRob2QuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgZXZhbE9wSW50ZXJuYWwoZmluYWwgQ29udGV4dCBjdHgsIGZpbmFsIFN1cHBsaWVyPEdyZW1saW5FeGVjdXRvcj4gZ3JlbWxpbkV4ZWN1dG9yU3VwcGxpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQmluZGluZ1N1cHBsaWVyIGJpbmRpbmdzU3VwcGxpZXIpIHsKLSAgICAgICAgZmluYWwgVGltZXIuQ29udGV4dCB0aW1lckNvbnRleHQgPSBldmFsT3BUaW1lci50aW1lKCk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IGN0eC5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBmaW5hbCBHcmVtbGluRXhlY3V0b3IgZ3JlbWxpbkV4ZWN1dG9yID0gZ3JlbWxpbkV4ZWN1dG9yU3VwcGxpZXIuZ2V0KCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXIgPSBjdHguZ2V0R3JhcGhNYW5hZ2VyKCk7Ci0gICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzID0gY3R4LmdldFNldHRpbmdzKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhcmdzID0gbXNnLmdldEFyZ3MoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gKFN0cmluZykgYXJncy5nZXQoVG9rZW5zLkFSR1NfR1JFTUxJTik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsYW5ndWFnZSA9IGFyZ3MuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfTEFOR1VBR0UpID8gKFN0cmluZykgYXJncy5nZXQoVG9rZW5zLkFSR1NfTEFOR1VBR0UpIDogbnVsbDsKLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLQotICAgICAgICAvLyBzZXNzaW9ubGVzcyByZXF1ZXN0cyBhcmUgYWx3YXlzIHRyYW5zYWN0aW9uIG1hbmFnZWQsIGJ1dCBpbi1zZXNzaW9uIHJlcXVlc3RzIGFyZSBjb25maWd1cmFibGUuCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gbWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QgPSBtYW5hZ2VUcmFuc2FjdGlvbnMgPwotICAgICAgICAgICAgICAgIHRydWUgOiAoQm9vbGVhbikgYXJncy5nZXRPckRlZmF1bHQoVG9rZW5zLkFSR1NfTUFOQUdFX1RSQU5TQUNUSU9OLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gdGltZW91dCBvdmVycmlkZSAtIGhhbmRsZSBib3RoIGRlcHJlY2F0ZWQgYW5kIG5ld2x5IG5hbWVkIGNvbmZpZ3VyYXRpb24uIGVhcmxpZXIgbG9naWMgc2hvdWxkIHByZXZlbnQKLSAgICAgICAgLy8gYm90aCBjb25maWd1cmF0aW9ucyBmcm9tIGJlaW5nIHN1Ym1pdHRlZCBhdCB0aGUgc2FtZSB0aW1lCi0gICAgICAgIGZpbmFsIGxvbmcgc2V0byA9IGFyZ3MuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfRVZBTF9USU1FT1VUKSA/Ci0gICAgICAgICAgICAgICAgKChOdW1iZXIpIGFyZ3MuZ2V0KFRva2Vucy5BUkdTX0VWQUxfVElNRU9VVCkpLmxvbmdWYWx1ZSgpIDogc2V0dGluZ3MuZ2V0RXZhbHVhdGlvblRpbWVvdXQoKTsKLQotICAgICAgICBmaW5hbCBHcmVtbGluRXhlY3V0b3IuTGlmZUN5Y2xlIGxpZmVDeWNsZSA9IEdyZW1saW5FeGVjdXRvci5MaWZlQ3ljbGUuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5ldmFsdWF0aW9uVGltZW91dE92ZXJyaWRlKHNldG8pCi0gICAgICAgICAgICAgICAgLmFmdGVyRmFpbHVyZSgoYix0KSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5vblF1ZXJ5RXJyb3IobXNnLCB0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hbmFnZWRUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0KSBhdHRlbXB0Um9sbGJhY2sobXNnLCBjdHguZ2V0R3JhcGhNYW5hZ2VyKCksIHNldHRpbmdzLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCk7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAuYWZ0ZXJUaW1lb3V0KChiLCB0KSAtPiB7Ci0gICAgICAgICAgICAgICAgICBncmFwaE1hbmFnZXIub25RdWVyeUVycm9yKG1zZywgdCk7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAuYmVmb3JlRXZhbChiIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLmJlZm9yZVF1ZXJ5U3RhcnQobXNnKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIucHV0QWxsKGJpbmRpbmdzU3VwcGxpZXIuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPcFByb2Nlc3NvckV4Y2VwdGlvbiBvcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJ1YmJsZSB1cCBpbiB0aGUgR3JlbWxpbkV4ZWN1dG9yIHByb3Blcmx5IGFzIHRoZSBSdW50aW1lRXhjZXB0aW9uIHdpbGwgYmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVud3JhcHBlZCBhbmQgdGhlIHJvb3QgY2F1c2UgdGhyb3duCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihvcGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAud2l0aFJlc3VsdChvIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgSXRlcmF0b3IgaXR0eSA9IEl0ZXJhdG9yVXRpbHMuYXNJdGVyYXRvcihvKTsKLQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlByZXBhcmluZyB0byBpdGVyYXRlIHJlc3VsdHMgZnJvbSAtIHt9IC0gaW4gdGhyZWFkIFt7fV0iLCBtc2csIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmVuYWJsZUF1ZGl0TG9nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGVkVXNlciB1c2VyID0gY3R4LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpLmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LkFVVEhFTlRJQ0FURURfVVNFUikuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSB1c2VyKSB7ICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgd2hlbiB1c2luZyB0aGUgQWxsb3dBbGxBdXRoZW50aWNhdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlciA9IEF1dGhlbnRpY2F0ZWRVc2VyLkFOT05ZTU9VU19VU0VSOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSBjdHguZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpLnJlbW90ZUFkZHJlc3MoKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgiLyIpICYmIGFkZHJlc3MubGVuZ3RoKCkgPiAxKSBhZGRyZXNzID0gYWRkcmVzcy5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdWRpdExvZ2dlci5pbmZvKCJVc2VyIHt9IHdpdGggYWRkcmVzcyB7fSByZXF1ZXN0ZWQ6IHt9IiwgdXNlci5nZXROYW1lKCksIGFkZHJlc3MsIHNjcmlwdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlSXRlcmF0b3IoY3R4LCBpdHR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5vblF1ZXJ5U3VjY2Vzcyhtc2cpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VkVHJhbnNhY3Rpb25zRm9yUmVxdWVzdCkgYXR0ZW1wdFJvbGxiYWNrKG1zZywgY3R4LmdldEdyYXBoTWFuYWdlcigpLCBzZXR0aW5ncy5zdHJpY3RUcmFuc2FjdGlvbk1hbmFnZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBDbG9zZWFibGVJdGVyYXRvci5jbG9zZUl0ZXJhdG9yKGl0dHkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3cmFwIHVwIHRoZSBleGNlcHRpb24gYW5kIHJldGhyb3cuIHRoZSBlcnJvciB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGNsaWVudCBieSB0aGUgZXZhbEZ1dHVyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgaXQgd2lsbCBjb21wbGV0ZUV4Y2VwdGlvbmFsbHkgaW4gdGhlIEdyZW1saW5FeGVjdXRvcgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSkuY3JlYXRlKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPE9iamVjdD4gZXZhbEZ1dHVyZSA9IGdyZW1saW5FeGVjdXRvci5ldmFsKHNjcmlwdCwgbGFuZ3VhZ2UsIGJpbmRpbmdzLCBsaWZlQ3ljbGUpOwotCi0gICAgICAgICAgICBldmFsRnV0dXJlLmhhbmRsZSgodiwgdCkgLT4gewotICAgICAgICAgICAgICAgIHRpbWVyQ29udGV4dC5zdG9wKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGFueSBleGNlcHRpb24gaW4gdGhlIGNoYWluIGlzIFRlbXBvcmFyeUV4Y2VwdGlvbiBvciBGYWlsdXJlIHRoZW4gd2Ugc2hvdWxkIHJlc3BvbmQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgZXJyb3IgY29kZSBzbyB0aGF0IHRoZSBjbGllbnQga25vd3MgdG8gcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8VGhyb3dhYmxlPiBwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24gPSBkZXRlcm1pbmVJZlNwZWNpYWxFeGNlcHRpb24odCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24uaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBzcGVjaWFsID0gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgc3BlY2lhbFJlc3BvbnNlTXNnID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2Uoc3BlY2lhbC5nZXRNZXNzYWdlKCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oc3BlY2lhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIFRlbXBvcmFyeUV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxSZXNwb25zZU1zZy5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVEVNUE9SQVJZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIEZhaWx1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGYWlsdXJlIGZhaWx1cmUgPSAoRmFpbHVyZSkgc3BlY2lhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsUmVzcG9uc2VNc2cuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0ZBSUxfU1RFUCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGUoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRkFJTF9TVEVQX01FU1NBR0UsIGZhaWx1cmUuZm9ybWF0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goc3BlY2lhbFJlc3BvbnNlTXNnLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0IGluc3RhbmNlb2YgT3BQcm9jZXNzb3JFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKCgoT3BQcm9jZXNzb3JFeGNlcHRpb24pIHQpLmdldFJlc3BvbnNlTWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0IGluc3RhbmNlb2YgVGltZWRJbnRlcnJ1cHRUaW1lb3V0RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvY2N1cnMgd2hlbiB0aGUgVGltZWRJbnRlcnJ1cHRDdXN0b21pemVyUHJvdmlkZXIgaXMgaW4gcGxheQotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIkEgdGltZW91dCBvY2N1cnJlZCB3aXRoaW4gdGhlIHNjcmlwdCBkdXJpbmcgZXZhbHVhdGlvbiBvZiBbJXNdIC0gY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgbGltaXQgZ2l2ZW4gdG8gVGltZWRJbnRlcnJ1cHRDdXN0b21pemVyUHJvdmlkZXIiLCBtc2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgiVGltZW91dCBkdXJpbmcgc2NyaXB0IGV2YWx1YXRpb24gdHJpZ2dlcmVkIGJ5IFRpbWVkSW50ZXJydXB0Q3VzdG9taXplclByb3ZpZGVyIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbih0KS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIFRpbWVvdXRFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJTY3JpcHQgZXZhbHVhdGlvbiBleGNlZWRlZCB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQgZm9yIHJlcXVlc3QgWyVzXSIsIG1zZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihlcnJvck1lc3NhZ2UsIHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKHQuZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHQpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byB0cmFwIHRoZSBzcGVjaWZpYyBqdm0gZXJyb3Igb2YgIk1ldGhvZCBjb2RlIHRvbyBsYXJnZSEiIHRvIHJlLXdyaXRlIGl0IGFzIHNvbWV0aGluZyBuaWNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBvbmx5IHJlLXdyaXRlIGlmIGl0J3MgdGhlIG9ubHkgZXJyb3IgYmVjYXVzZSBvdGhlcndpc2Ugd2UgbWlnaHQgbG9zZSBzb21lIG90aGVyIGltcG9ydGFudAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgZmFpbHVyZS4gYXQgdGhpcyBwb2ludCwgdGhlcmUgaGFzbid0IGJlZW4gYSBzY2VuYXJpbyB0aGF0IGhhcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlc2VudGVkIGl0c2VsZiB3aGVyZSB0aGUgIk1ldGhvZCBjb2RlIHRvbyBsYXJnZSEiIGNvbWVzIHdpdGggb3RoZXIgY29tcGlsYXRpb24gZXJyb3JzIHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBzZWVtcyB0aGF0IHRoaXMgbWVzc2FnZSB0cnVtcHMgb3RoZXIgY29tcGlsYXRpb24gZXJyb3JzIHRvIHNvbWUgcmVhc29uYWJsZSBkZWdyZWUgdGhhdCBlbmRzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1cCBiZWluZyBmYXZvcmFibGUgZm9yIHRoaXMgcHJvYmxlbQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBNdWx0aXBsZUNvbXBpbGF0aW9uRXJyb3JzRXhjZXB0aW9uICYmIHQuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJNZXRob2QgdG9vIGxhcmdlIikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNdWx0aXBsZUNvbXBpbGF0aW9uRXJyb3JzRXhjZXB0aW9uKSB0KS5nZXRFcnJvckNvbGxlY3RvcigpLmdldEVycm9yQ291bnQoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIlRoZSBHcmVtbGluIHN0YXRlbWVudCB0aGF0IHdhcyBzdWJtaXR0ZWQgZXhjZWVkcyB0aGUgbWF4aW11bSBjb21waWxhdGlvbiBzaXplIGFsbG93ZWQgYnkgdGhlIEpWTSwgcGxlYXNlIHNwbGl0IGl0IGludG8gbXVsdGlwbGUgc21hbGxlciBzdGF0ZW1lbnRzIC0gJXMiLCB0cmltTWVzc2FnZShtc2cpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9FVkFMVUFUSU9OKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbih0KS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UgPSAodC5nZXRNZXNzYWdlKCkgPT0gbnVsbCkgPyB0LnRvU3RyaW5nKCkgOiB0LmdldE1lc3NhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJFeGNlcHRpb24gcHJvY2Vzc2luZyBhIHNjcmlwdCBvbiByZXF1ZXN0IFslc10uIiwgbXNnKSwgdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0VWQUxVQVRJT04pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHQpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uIHJlZSkgewotICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuVE9PX01BTllfUkVRVUVTVFMpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJSYXRlIGxpbWl0aW5nIikuY3JlYXRlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBkZWNyZWFzZSB0aGUgc2l6ZSBvZiBhIEdyZW1saW4gc2NyaXB0IHRoYXQgdHJpZ2dlcmVkIGEgIm1ldGhvZCB0b28gbGFyZ2UiIGV4Y2VwdGlvbiBzbyB0aGF0IGl0Ci0gICAgICogZG9lc24ndCBsb2cgYSBtYXNzaXZlIHRleHQgc3RyaW5nIG5vciByZXR1cm4gYSBsYXJnZSBlcnJvciBtZXNzYWdlLgotICAgICAqLwotICAgIHByaXZhdGUgUmVxdWVzdE1lc3NhZ2UgdHJpbU1lc3NhZ2UoZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnKSB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHRyaW1tZWRNc2cgPSBSZXF1ZXN0TWVzc2FnZS5mcm9tKG1zZykuY3JlYXRlKCk7Ci0gICAgICAgIGlmICh0cmltbWVkTXNnLmdldEFyZ3MoKS5jb250YWluc0tleShUb2tlbnMuQVJHU19HUkVNTElOKSkKLSAgICAgICAgICAgIHRyaW1tZWRNc2cuZ2V0QXJncygpLnB1dChUb2tlbnMuQVJHU19HUkVNTElOLCB0cmltbWVkTXNnLmdldEFyZ3MoKS5nZXQoVG9rZW5zLkFSR1NfR1JFTUxJTikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTAyMSkgKyAiLi4uIik7Ci0KLSAgICAgICAgcmV0dXJuIHRyaW1tZWRNc2c7Ci0gICAgfQotCi0gICAgQEZ1bmN0aW9uYWxJbnRlcmZhY2UKLSAgICBwdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdTdXBwbGllciB7Ci0gICAgICAgIHB1YmxpYyBCaW5kaW5ncyBnZXQoKSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb247Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC9BYnN0cmFjdE9wUHJvY2Vzc29yLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL0Fic3RyYWN0T3BQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyNWM4Zi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL0Fic3RyYWN0T3BQcm9jZXNzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcDsKLQotaW1wb3J0IGNvbS5jb2RhaGFsZS5tZXRyaWNzLk1ldGVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuZXhjZXB0aW9uLkV4Y2VwdGlvblV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyZW1saW5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5NZXRyaWNNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5NZXNzYWdlVGV4dFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5GYWlsdXJlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JhcGhNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLk9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuRnJhbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5TdGF0ZUtleTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuVGVtcG9yYXJ5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07Ci0KLWltcG9ydCBzdGF0aWMgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkubmFtZTsKLQotLyoqCi0gKiBBIGJhc2Uge0BsaW5rIE9wUHJvY2Vzc29yfSBpbXBsZW1lbnRhdGlvbiB0aGF0IHByb2Nlc3NlcyBhbiB7QGNvZGUgSXRlcmF0b3J9IG9mIHJlc3VsdHMgaW4gYSBnZW5lcmFsaXplZCB3YXkgd2hpbGUKLSAqIGVuc3VyaW5nIHRoYXQgZ3JhcGggdHJhbnNhY3Rpb25zIGFyZSBwcm9wZXJseSBtYW5hZ2VkLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T3BQcm9jZXNzb3IgaW1wbGVtZW50cyBPcFByb2Nlc3NvciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yLmNsYXNzKTsKLQotICAgIC8qKgotICAgICAqIExlbmd0aCBvZiB0aW1lIHRvIHBhdXNlIHdyaXRlcyBpbiBtaWxsaXNlY29uZHMgd2hlbiB0aGUgaGlnaCB3YXRlcm1hcmsgaXMgZXhjZWVkZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIFdSSVRFX1BBVVNFX1RJTUVfTVMgPSAxMDsKLQotICAgIC8qKgotICAgICAqIFRyYWNrcyB0aGUgcmF0ZSBvZiBwYXVzZSB0byB3cml0ZXMgd2hlbiB0aGUgaGlnaCB3YXRlcm1hcmsgaXMgZXhjZWVkZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBNZXRlciB3cml0ZVBhdXNlc01ldGVyID0gTWV0cmljTWFuYWdlci5JTlNUQU5DRS5nZXRNZXRlcihuYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJjaGFubmVscyIsICJ3cml0ZS1wYXVzZXMiKSk7Ci0KLSAgICAvKioKLSAgICAgKiBXaGVuIHNldCB0byB7QGNvZGUgdHJ1ZX0sIHRyYW5zYWN0aW9ucyBhcmUgYWx3YXlzIG1hbmFnZWQgb3RoZXJ3aXNlIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHJlcXVlc3QuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gbWFuYWdlVHJhbnNhY3Rpb25zOwotCi0gICAgcHJvdGVjdGVkIEFic3RyYWN0T3BQcm9jZXNzb3IoZmluYWwgYm9vbGVhbiBtYW5hZ2VUcmFuc2FjdGlvbnMpIHsKLSAgICAgICAgdGhpcy5tYW5hZ2VUcmFuc2FjdGlvbnMgPSBtYW5hZ2VUcmFuc2FjdGlvbnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2sgaWYgYW55IGV4Y2VwdGlvbiBpbiB0aGUgY2hhaW4gaXMge0BsaW5rIFRlbXBvcmFyeUV4Y2VwdGlvbn0gb3Ige0BsaW5rIEZhaWx1cmV9IHRoZW4gcmVzcG9uZCB3aXRoIHRoZQotICAgICAqIHJpZ2h0IGVycm9yIGNvZGUgc28gdGhhdCB0aGUgY2xpZW50IGtub3dzIHRvIHJldHJ5LgotICAgICAqLwotICAgIHByb3RlY3RlZCBzdGF0aWMgT3B0aW9uYWw8VGhyb3dhYmxlPiBkZXRlcm1pbmVJZlNwZWNpYWxFeGNlcHRpb24oZmluYWwgVGhyb3dhYmxlIGV4KSB7Ci0gICAgICAgIHJldHVybiBTdHJlYW0ub2YoRXhjZXB0aW9uVXRpbHMuZ2V0VGhyb3dhYmxlcyhleCkpLgotICAgICAgICAgICAgICAgIGZpbHRlcihpIC0+IGkgaW5zdGFuY2VvZiBUZW1wb3JhcnlFeGNlcHRpb24gfHwgaSBpbnN0YW5jZW9mIEZhaWx1cmUpLmZpbmRGaXJzdCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb3ZpZGVzIGEgZ2VuZXJpYyB3YXkgb2YgaXRlcmF0aW5nIGEgcmVzdWx0IHNldCBiYWNrIHRvIHRoZSBjbGllbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgR3JlbWxpbiBTZXJ2ZXIge0BsaW5rIENvbnRleHR9IG9iamVjdCBjb250YWluaW5nIHNldHRpbmdzLCByZXF1ZXN0IG1lc3NhZ2UsIGV0Yy4KLSAgICAgKiBAcGFyYW0gaXR0eSBUaGUgcmVzdWx0IHRvIGl0ZXJhdG9yCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlSXRlcmF0b3IoZmluYWwgQ29udGV4dCBjb250ZXh0LCBmaW5hbCBJdGVyYXRvciBpdHR5KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgbmV0dHlDb250ZXh0ID0gY29udGV4dC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY29udGV4dC5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IGNvbnRleHQuZ2V0U2V0dGluZ3MoKTsKLSAgICAgICAgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciA9IG5ldHR5Q29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5nZXQoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VCaW5hcnkgPSBuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuVVNFX0JJTkFSWSkuZ2V0KCk7Ci0KLSAgICAgICAgLy8gdXNlZCB0byBsaW1pdCB3YXJuaW5ncyBmb3Igd2hlbiBuZXR0eSBmaWxscyB0aGUgYnVmZmVyIGFuZCBoaXRzIHRoZSBoaWdoIHdhdGVybWFyayAtIHByZXZlbnRzCi0gICAgICAgIC8vIG92ZXItbG9nZ2luZyBvZiB0aGUgc2FtZSBtZXNzYWdlLgotICAgICAgICBsb25nIGxhc3RXYXJuaW5nVGltZSA9IDA7Ci0gICAgICAgIGludCB3YXJuQ291bnRlciA9IDA7Ci0KLSAgICAgICAgLy8gc2Vzc2lvbmxlc3MgcmVxdWVzdHMgYXJlIGFsd2F5cyB0cmFuc2FjdGlvbiBtYW5hZ2VkLCBidXQgaW4tc2Vzc2lvbiByZXF1ZXN0cyBhcmUgY29uZmlndXJhYmxlLgotICAgICAgICBmaW5hbCBib29sZWFuIG1hbmFnZWRUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0ID0gc2hvdWxkTWFuYWdlVHJhbnNhY3Rpb25zRm9yUmVxdWVzdChjb250ZXh0KTsKLQotICAgICAgICAvLyB3ZSBoYXZlIGFuIGVtcHR5IGl0ZXJhdG9yIC0gaGFwcGVucyBvbiBzdHVmZiBsaWtlOiBnLlYoKS5pdGVyYXRlKCkKLSAgICAgICAgaWYgKCFpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gZ2VuZXJhdGVTdGF0dXNBdHRyaWJ1dGVzKG5ldHR5Q29udGV4dCwgbXNnLCBSZXNwb25zZVN0YXR1c0NvZGUuTk9fQ09OVEVOVCwgaXR0eSwgc2V0dGluZ3MpOwotICAgICAgICAgICAgLy8gYXMgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGl0ZXJhdGUgaWYgd2UgYXJlIHRyYW5zYWN0aW9uIG1hbmFnZWQgdGhlbiB3ZSBzaG91bGQgZXhlY3V0ZSBhCi0gICAgICAgICAgICAvLyBjb21taXQgaGVyZSBiZWZvcmUgd2Ugc2VuZCBiYWNrIGEgTk9fQ09OVEVOVCB3aGljaCBpbXBsaWVzIHN1Y2Nlc3MKLSAgICAgICAgICAgIGlmIChtYW5hZ2VkVHJhbnNhY3Rpb25zRm9yUmVxdWVzdCkgYXR0ZW1wdENvbW1pdChtc2csIGNvbnRleHQuZ2V0R3JhcGhNYW5hZ2VyKCksIHNldHRpbmdzLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCk7Ci0gICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykKLSAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLk5PX0NPTlRFTlQpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0aGUgYmF0Y2ggc2l6ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgcmVxdWVzdAotICAgICAgICBmaW5hbCBpbnQgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplID0gKEludGVnZXIpIG1zZy5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQkFUQ0hfU0laRSkKLSAgICAgICAgICAgICAgICAub3JFbHNlKHNldHRpbmdzLnJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSk7Ci0gICAgICAgIExpc3Q8T2JqZWN0PiBhZ2dyZWdhdGUgPSBuZXcgQXJyYXlMaXN0PD4ocmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKTsKLQotICAgICAgICAvLyB1c2UgYW4gZXh0ZXJuYWwgY29udHJvbCB0byBtYW5hZ2UgdGhlIGxvb3AgYXMgb3Bwb3NlZCB0byBqdXN0IGNoZWNraW5nIGhhc05leHQoKSBpbiB0aGUgd2hpbGUuICB0aGlzCi0gICAgICAgIC8vIHByZXZlbnQgc2l0dWF0aW9ucyB3aGVyZSBhdXRvIHRyYW5zYWN0aW9ucyBjcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gYWZ0ZXIgY2FsbHMgdG8gY29tbWl0KCkgd2l0aGluZwotICAgICAgICAvLyB0aGUgbG9vcCBvbiBjYWxscyB0byBoYXNOZXh0KCkuCi0gICAgICAgIGJvb2xlYW4gaGFzTW9yZSA9IGl0dHkuaGFzTmV4dCgpOwotCi0gICAgICAgIHdoaWxlIChoYXNNb3JlKSB7Ci0gICAgICAgICAgICBpZiAoVGhyZWFkLmludGVycnVwdGVkKCkpIHRocm93IG5ldyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICAvLyBjaGVjayBpZiBhbiBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBmb3JjZSBmbHVzaCB0aGUgYWdncmVnYXRlZCByZXN1bHRzIGJlZm9yZSB0aGUgaXRlcmF0aW9uIGJhdGNoCi0gICAgICAgICAgICAvLyBzaXplIGlzIHJlYWNoZWQuCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlRmx1c2ggPSBpc0ZvcmNlRmx1c2hlZChuZXR0eUNvbnRleHQsIG1zZywgaXR0eSk7Ci0KLSAgICAgICAgICAgIC8vIGhhdmUgdG8gY2hlY2sgdGhlIGFnZ3JlZ2F0ZSBzaXplIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY2hhbm5lbCBpcyBub3Qgd3JpdGVhYmxlIChiZWxvdykKLSAgICAgICAgICAgIC8vIHNvIGl0ZXJhdGluZyBuZXh0KCkgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IHdyaXR0ZW4gYW5kIGZsdXNoZWQgd291bGQgYnVtcCB0aGUgYWdncmVnYXRlIHNpemUgYmV5b25kCi0gICAgICAgICAgICAvLyB0aGUgZXhwZWN0ZWQgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplLiAgVG90YWwgc2VyaWFsaXphdGlvbiB0aW1lIGZvciB0aGUgcmVzcG9uc2UgcmVtYWlucyBpbgotICAgICAgICAgICAgLy8gZWZmZWN0IHNvIGlmIHRoZSBjbGllbnQgaXMgInNsb3ciIGl0IG1heSBzaW1wbHkgdGltZW91dC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBhIG5lZWQgdG8gY2hlY2sgaGFzTmV4dCgpIG9uIHRoZSBpdGVyYXRvciBiZWNhdXNlIGlmIHRoZSBjaGFubmVsIGlzIG5vdCB3cml0ZWFibGUgdGhlCi0gICAgICAgICAgICAvLyBwcmV2aW91cyBwYXNzIHRocm91Z2ggdGhlIHdoaWxlIGxvb3Agd2lsbCBoYXZlIG5leHQoKSdkIHRoZSBpdGVyYXRvciBhbmQgaWYgaXQgaXMgImRvbmUiIHRoZW4gYQotICAgICAgICAgICAgLy8gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiB3aWxsIHJhaXNlIGl0cyBoZWFkLiBhbHNvIG5lZWQgYSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0Ci0gICAgICAgICAgICAvLyByZXF1aXJlIGEgZm9yY2VkIGZsdXNoIHdoaWNoIGNhbiBiZSBmb3JjZWQgYnkgc3ViLWNsYXNzZXMuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSBwbGFjZWQgaW5zaWRlIHRoZSBpc1dyaXRlYWJsZSgpIHBvcnRpb24gb2YgdGhlIGlmLXRoZW4gYmVsb3cgYnV0IGl0IHNlZW1zIGJldHRlciB0bwotICAgICAgICAgICAgLy8gYWxsb3cgaXRlcmF0aW9uIHRvIGNvbnRpbnVlIGludG8gYSBiYXRjaCBpZiB0aGF0IGlzIHBvc3NpYmxlIHJhdGhlciB0aGFuIGp1c3QgZG9pbmcgbm90aGluZyBhdCBhbGwKLSAgICAgICAgICAgIC8vIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjbGllbnQgdG8gY2F0Y2ggdXAKLSAgICAgICAgICAgIGlmIChhZ2dyZWdhdGUuc2l6ZSgpIDwgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplICYmIGl0dHkuaGFzTmV4dCgpICYmICFmb3JjZUZsdXNoKSBhZ2dyZWdhdGUuYWRkKGl0dHkubmV4dCgpKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3Qga2VlcCBleGVjdXRvciBidXN5IGlmIGNsaWVudCBoYXMgYWxyZWFkeSBnaXZlbiB1cDsgdGhlcmUgaXMgbm8gd2F5IHRvIGNhdGNoIHVwIGlmIHRoZSBjaGFubmVsIGlzCi0gICAgICAgICAgICAvLyBub3QgYWN0aXZlLCBhbmQgaGVuY2Ugd2Ugc2hvdWxkIGJyZWFrIHRoZSBsb29wLgotICAgICAgICAgICAgaWYgKCFuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdFJvbGxiYWNrKG1zZywgY29udGV4dC5nZXRHcmFwaE1hbmFnZXIoKSwgc2V0dGluZ3Muc3RyaWN0VHJhbnNhY3Rpb25NYW5hZ2VtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHNlbmQgYmFjayBhIHBhZ2Ugb2YgcmVzdWx0cyBpZiBiYXRjaCBzaXplIGlzIG1ldCBvciBpZiBpdCdzIHRoZSBlbmQgb2YgdGhlIHJlc3VsdHMgYmVpbmcgaXRlcmF0ZWQuCi0gICAgICAgICAgICAvLyBhbHNvIGNoZWNrIHdyaXRlYWJpbGl0eSBvZiB0aGUgY2hhbm5lbCB0byBwcmV2ZW50IE9PTUUgZm9yIHNsb3cgY2xpZW50cy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBjbGllbnRzIG1pZ2h0IGRlY2lkZSB0byBjbG9zZSB0aGUgTmV0dHkgY2hhbm5lbCB0byB0aGUgc2VydmVyIHdpdGggYSBDbG9zZVdlYnNvY2tldEZyYW1lIGFmdGVyIGVycm9ycwotICAgICAgICAgICAgLy8gbGlrZSBDb3JydXB0ZWRGcmFtZUV4Y2VwdGlvbi4gT24gdGhlIHNlcnZlciwgYWx0aG91Z2ggdGhlIGNoYW5uZWwgZ2V0cyBjbG9zZWQsIHRoZXJlIG1pZ2h0IGJlIHNvbWUKLSAgICAgICAgICAgIC8vIGV4ZWN1dG9yIHRocmVhZHMgd2FpdGluZyBmb3Igd2F0ZXJtYXJrIHRvIGNsZWFyIHdoaWNoIHdpbGwgbm90IGNsZWFyIGluIHRoZXNlIGNhc2VzIHNpbmNlIGNsaWVudCBoYXMKLSAgICAgICAgICAgIC8vIGFscmVhZHkgZ2l2ZW4gdXAgb24gdGhlc2UgcmVxdWVzdHMuIFRoaXMgbGVhZHMgdG8gdGhlc2UgZXhlY3V0b3JzIHdhaXRpbmcgZm9yIHRoZSBjbGllbnQgdG8gY29uc3VtZQotICAgICAgICAgICAgLy8gcmVzdWx0cyB0aWxsIHRoZSB0aW1lb3V0LiBjaGVja2luZyBmb3IgaXNBY3RpdmUoKSBzaG91bGQgaGVscCBwcmV2ZW50IHRoYXQuCi0gICAgICAgICAgICBpZiAobmV0dHlDb250ZXh0LmNoYW5uZWwoKS5pc0FjdGl2ZSgpICYmIG5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNXcml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmNlRmx1c2ggfHwgYWdncmVnYXRlLnNpemUoKSA9PSByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgfHwgIWl0dHkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlID0gaXR0eS5oYXNOZXh0KCkgPyBSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5UIDogUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1M7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGhlcmUgYmVjYXVzZSBpbiBzZXNzaW9ubGVzcyByZXF1ZXN0cyB0aGUgc2VyaWFsaXphdGlvbiBtdXN0IG9jY3VyIGluIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIHRocmVhZCBhcyB0aGUgZXZhbC4gIGFzIGV2YWwgb2NjdXJzIGluIHRoZSBHcmVtbGluRXhlY3V0b3IgdGhlcmUncyBubyB3YXkgdG8gZ2V0IGJhY2sgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRocmVhZCB0aGF0IHByb2Nlc3NlZCB0aGUgZXZhbCBvZiB0aGUgc2NyaXB0IHNvLCB3ZSBoYXZlIHRvIHB1c2ggc2VyaWFsaXphdGlvbiBkb3duIGludG8gdGhhdAotICAgICAgICAgICAgICAgICAgICBGcmFtZSBmcmFtZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IG1ha2VGcmFtZShjb250ZXh0LCBtc2csIHNlcmlhbGl6ZXIsIHVzZUJpbmFyeSwgYWdncmVnYXRlLCBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVJlc3VsdE1ldGFEYXRhKG5ldHR5Q29udGV4dCwgbXNnLCBjb2RlLCBpdHR5LCBzZXR0aW5ncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlU3RhdHVzQXR0cmlidXRlcyhuZXR0eUNvbnRleHQsIG1zZywgY29kZSwgaXR0eSwgc2V0dGluZ3MpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGZyYW1lIG1heSB1c2UgYSBCeXRlYnVmIHdoaWNoIGlzIGEgY291bnRhYmxlIHJlbGVhc2UgLSBpZiBpdCBkb2VzIG5vdCBnZXQgd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG93bnN0cmVhbSBpdCBuZWVkcyB0byBiZSByZWxlYXNlZCBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gbnVsbCkgZnJhbWUudHJ5UmVsZWFzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gaXMgaGFuZGxlZCBpbiBtYWtlRnJhbWUoKSAtIHNlcmlhbGl6YXRpb24gZXJyb3IgZ2V0cyB3cml0dGVuIGJhY2sgdG8gZHJpdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGF0IHBvaW50Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QpIGF0dGVtcHRSb2xsYmFjayhtc2csIGNvbnRleHQuZ2V0R3JhcGhNYW5hZ2VyKCksIHNldHRpbmdzLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIHdoZXRoZXIgdGhlcmUgaXMgYW55dGhpbmcgbGVmdCBpbiB0aGUgaXRlcmF0b3IgYmVjYXVzZSBpdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCBhZnRlcgotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY291bGQgYmUgY2xvc2VkIC0gaW4gdGhhdCBjYXNlIGEgY2FsbCB0byBoYXNOZXh0KCkgY291bGQgb3BlbiBhIG5ldyB0cmFuc2FjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB1bmludGVudGlvbmFsbHkKLSAgICAgICAgICAgICAgICAgICAgaGFzTW9yZSA9IGl0dHkuaGFzTmV4dCgpOwotCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IG5lZWQgdG8gcmVzZXQgdGhlIGFnZ3JlZ2F0aW9uIGxpc3QgaWYgdGhlcmUncyBtb3JlIHN0dWZmIHRvIHdyaXRlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2dyZWdhdGUgPSBuZXcgQXJyYXlMaXN0PD4ocmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiBhbmQgc2VyaWFsaXphdGlvbiBhcmUgYm90aCBjb21wbGV0ZSB3aGljaCBtZWFucyB0aGlzIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4gbm90ZSB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3JzIGludGVybmFsIHRvIHNjcmlwdCBldmFsIG9yIHRpbWVvdXQgd2lsbCByb2xsYmFjayBnaXZlbiBHcmVtbGluU2VydmVyJ3MgZ2xvYmFsIGNvbmZpZ3VyYXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsIGVycm9ycyB3aWxsIGdldCByb2xsZWQgYmFjayBiZWxvdyBiZWNhdXNlIHRoZSBleGNlcHRpb25zIGFyZW4ndCB0aHJvd24gaW4gdGhvc2UgY2FzZXMgdG8gYmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVnaHQgYnkgdGhlIEdyZW1saW5FeGVjdXRvciBmb3IgZ2xvYmFsIHJvbGxiYWNrIGxvZ2ljLiB0aGlzIG9ubHkgbmVlZHMgdG8gYmUgY29tbWl0dGVkIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlcmUgYXJlIG5vIG1vcmUgaXRlbXMgdG8gaXRlcmF0ZSBhbmQgc2VyaWFsaXphdGlvbiBpcyBjb21wbGV0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYW5hZ2VkVHJhbnNhY3Rpb25zRm9yUmVxdWVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW1wdENvbW1pdChtc2csIGNvbnRleHQuZ2V0R3JhcGhNYW5hZ2VyKCksIHNldHRpbmdzLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBmcmFtZSBtYXkgdXNlIGEgQnl0ZWJ1ZiB3aGljaCBpcyBhIGNvdW50YWJsZSByZWxlYXNlIC0gaWYgaXQgZG9lcyBub3QgZ2V0IHdyaXR0ZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvd25zdHJlYW0gaXQgbmVlZHMgdG8gYmUgcmVsZWFzZWQgaGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lICE9IG51bGwpIGZyYW1lLnRyeVJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNNb3JlKSBpdGVyYXRlQ29tcGxldGUobmV0dHlDb250ZXh0LCBtc2csIGl0dHkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmbHVzaCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbW1pdCBoYXMgcG90ZW50aWFsbHkgb2NjdXJyZWQuICBpbiB0aGlzIHdheSwgaWYgYSBjb21taXQgd2FzCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVkIHRoZW4gaXQgd2lsbCBiZSAxMDAlIGNvbXBsZXRlIGJlZm9yZSB0aGUgY2xpZW50IHJlY2VpdmVzIGl0LiB0aGUgImZyYW1lIiBhdCB0aGlzIHBvaW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBoYXZlIGNvbXBsZXRlbHkgZGV0YWNoZWQgb2JqZWN0cyBmcm9tIHRoZSB0cmFuc2FjdGlvbiAoaS5lLiBzZXJpYWxpemF0aW9uIGhhcyBvY2N1cnJlZCkKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gYSBuZXcgb25lIHNob3VsZCBub3QgYmUgb3BlbmVkIG9uIHRoZSBmbHVzaCBkb3duIHRoZSBuZXR0eSBwaXBlbGluZQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goY29kZSwgZnJhbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCi0gICAgICAgICAgICAgICAgLy8gZXhwb25lbnRpYWwgZGVsYXkgYmV0d2VlbiB3YXJuaW5ncy4gZG9uJ3Qga2VlcCB0cmlnZ2VyaW5nIHRoaXMgd2FybmluZyBvdmVyIGFuZCBvdmVyIGFnYWluIGZvciB0aGUKLSAgICAgICAgICAgICAgICAvLyBzYW1lIHJlcXVlc3QuIHRvdGFsUGVuZGluZ1dyaXRlQnl0ZXMgaXMgdm9sYXRpbGUgc28gaXQgaXMgcG9zc2libGUgdGhhdCBieSB0aGUgdGltZSB0aGlzIHdhcm5pbmcKLSAgICAgICAgICAgICAgICAvLyBoaXRzIHRoZSBsb2cgdGhlIGxvdyB3YXRlcm1hcmsgbWF5IGhhdmUgYmVlbiBoaXQKLSAgICAgICAgICAgICAgICBsb25nIGludGVydmFsID0gKGxvbmcpIE1hdGgucG93KDIsIHdhcm5Db3VudGVyKSAqIDEwMDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lIC0gbGFzdFdhcm5pbmdUaW1lID49IGludGVydmFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIENoYW5uZWwgY2ggPSBjb250ZXh0LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpLmNoYW5uZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIldhcm5pbmcge306IE91dGJvdW5kIGJ1ZmZlciBzaXplPXt9LCBwYXVzaW5nIHJlc3BvbnNlIHdyaXRpbmcgYXMgd3JpdGVCdWZmZXJIaWdoV2F0ZXJNYXJrIGV4Y2VlZGVkIG9uIHJlcXVlc3Qge30gZm9yIGNoYW5uZWwge30gLSB3cml0aW5nIHdpbGwgY29udGludWUgb25jZSBjbGllbnQgaGFzIGNhdWdodCB1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybkNvdW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gudW5zYWZlKCkub3V0Ym91bmRCdWZmZXIoKS50b3RhbFBlbmRpbmdXcml0ZUJ5dGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmdldFJlcXVlc3RJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLmlkKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIGxhc3RXYXJuaW5nVGltZSA9IGN1cnJlbnRUaW1lOwotICAgICAgICAgICAgICAgICAgICB3YXJuQ291bnRlcisrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBjbGllbnQgaXMgbGFnZ2luZyB3ZSBjYW4gaG9sZCBoZXJlIGZvciBhIHBlcmlvZCBvZiB0aW1lIGZvciB0aGUgY2xpZW50IHRvIGNhdGNoIHVwLgotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXNuJ3QgYmxvY2tpbmcgdGhlIElPIHRocmVhZCAtIGp1c3QgYSB3b3JrZXIuCi0gICAgICAgICAgICAgICAgVGltZVVuaXQuTUlMTElTRUNPTkRTLnNsZWVwKFdSSVRFX1BBVVNFX1RJTUVfTVMpOwotICAgICAgICAgICAgICAgIHdyaXRlUGF1c2VzTWV0ZXIubWFyaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gaXRlcmF0aW9uIHdpdGhpbiB7QGxpbmsgI2hhbmRsZUl0ZXJhdG9yKENvbnRleHQsIEl0ZXJhdG9yKX0gaXMgb24gaXRzIGZpbmFsIHBhc3MgYW5kIHRoZSBmaW5hbAotICAgICAqIGZyYW1lIGlzIGFib3V0IHRvIGJlIHNlbnQgYmFjayB0byB0aGUgY2xpZW50LiBUaGlzIG1ldGhvZCBvbmx5IGdldHMgY2FsbGVkIG9uIHN1Y2Nlc3NmdWwgaXRlcmF0aW9uIG9mIHRoZQotICAgICAqIGVudGlyZSByZXN1bHQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgaXRlcmF0ZUNvbXBsZXRlKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZywgZmluYWwgSXRlcmF0b3IgaXR0eSkgewotICAgICAgICAvLyBkbyBub3RoaW5nIGJ5IGRlZmF1bHQKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIGlmIGEge0BsaW5rIEZyYW1lfSBzaG91bGQgYmUgZm9yY2UgZmx1c2hlZCBvdXRzaWRlIG9mIHRoZSB7QGNvZGUgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplfSBhbmQgdGhlCi0gICAgICogdGVybWluYXRpb24gb2YgdGhlIGl0ZXJhdG9yLiBCeSBkZWZhdWx0IHRoaXMgbWV0aG9kIHJldHVybiB7QGNvZGUgZmFsc2V9LgotICAgICAqCi0gICAgICogQHBhcmFtIGl0dHkgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQge0BsaW5rIEl0ZXJhdG9yfSBvZiByZXN1bHRzIC0gaXQgaXMgbm90IG1lYW50IHRvIGJlIGZvcndhcmRlZCBpbgotICAgICAqICAgICAgICAgICAgIHRoaXMgbWV0aG9kCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNGb3JjZUZsdXNoZWQoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnLCBmaW5hbCBJdGVyYXRvciBpdHR5KSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZW5lcmF0ZXMgcmVzcG9uc2UgcmVzdWx0IG1ldGEtZGF0YSB0byBwdXQgb24gYSB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpdHR5IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHtAbGluayBJdGVyYXRvcn0gb2YgcmVzdWx0cyAtIGl0IGlzIG5vdCBtZWFudCB0byBiZSBmb3J3YXJkZWQgaW4KLSAgICAgKiAgICAgICAgICAgICB0aGlzIG1ldGhvZAotICAgICAqLwotICAgIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlUmVzdWx0TWV0YURhdGEoZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCwgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGNvZGUsIGZpbmFsIEl0ZXJhdG9yIGl0dHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZW5lcmF0ZXMgcmVzcG9uc2Ugc3RhdHVzIG1ldGEtZGF0YSB0byBwdXQgb24gYSB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpdHR5IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHtAbGluayBJdGVyYXRvcn0gb2YgcmVzdWx0cyAtIGl0IGlzIG5vdCBtZWFudCB0byBiZSBmb3J3YXJkZWQgaW4KLSAgICAgKiAgICAgICAgICAgICB0aGlzIG1ldGhvZAotICAgICAqLwotICAgIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBPYmplY3Q+IGdlbmVyYXRlU3RhdHVzQXR0cmlidXRlcyhmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4LCBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlLCBmaW5hbCBJdGVyYXRvciBpdHR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICAvLyBvbmx5IHJldHVybiBzZXJ2ZXIgbWV0YWRhdGEgb24gdGhlIGxhc3QgbWVzc2FnZQotICAgICAgICBpZiAoaXR0eS5oYXNOZXh0KCkpIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWV0YURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1ldGFEYXRhLnB1dChUb2tlbnMuQVJHU19IT1NULCBjdHguY2hhbm5lbCgpLnJlbW90ZUFkZHJlc3MoKS50b1N0cmluZygpKTsKLQotICAgICAgICByZXR1cm4gbWV0YURhdGE7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBGcmFtZSBtYWtlRnJhbWUoZmluYWwgQ29udGV4dCBjdHgsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlU2VyaWFsaXplcjw/PiBzZXJpYWxpemVyLCBmaW5hbCBib29sZWFuIHVzZUJpbmFyeSwgZmluYWwgTGlzdDxPYmplY3Q+IGFnZ3JlZ2F0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZVN0YXR1c0NvZGUgY29kZSwgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IHJlc3BvbnNlTWV0YURhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IHN0YXR1c0F0dHJpYnV0ZXMpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IG5ldHR5Q29udGV4dCA9IGN0eC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKTsKLQotICAgICAgICAgICAgY3R4LmhhbmRsZURldGFjaG1lbnQoYWdncmVnYXRlKTsKLQotICAgICAgICAgICAgaWYgKHVzZUJpbmFyeSkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnJhbWUoc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY29kZShjb2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoc3RhdHVzQXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5yZXNwb25zZU1ldGFEYXRhKHJlc3BvbnNlTWV0YURhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0KGFnZ3JlZ2F0ZSkuY3JlYXRlKCksIG5ldHR5Q29udGV4dC5hbGxvYygpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBHcmVtbGluVGV4dFJlcXVlc3REZWNvZGVyIHdpbGwgaGF2ZSBwbGFjZWQgYSBNZXNzYWdlVGV4dFNlcmlhbGl6ZXIKLSAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZSBvbiB0aGUgY2hhbm5lbC4KLSAgICAgICAgICAgICAgICBmaW5hbCBNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8Pz4gdGV4dFNlcmlhbGl6ZXIgPSAoTWVzc2FnZVRleHRTZXJpYWxpemVyPD8+KSBzZXJpYWxpemVyOwotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnJhbWUodGV4dFNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoY29kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKHN0YXR1c0F0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShyZXNwb25zZU1ldGFEYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdChhZ2dyZWdhdGUpLmNyZWF0ZSgpLCBuZXR0eUNvbnRleHQuYWxsb2MoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJUaGUgcmVzdWx0IFt7fV0gaW4gdGhlIHJlcXVlc3Qge30gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYW5kIHJldHVybmVkLiIsIGFnZ3JlZ2F0ZSwgbXNnLmdldFJlcXVlc3RJZCgpLCBleCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiRXJyb3IgZHVyaW5nIHNlcmlhbGl6YXRpb246ICVzIiwgRXhjZXB0aW9uSGVscGVyLmdldE1lc3NhZ2VGcm9tRXhjZXB0aW9uT3JDYXVzZShleCkpOwotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGVycm9yID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZy5nZXRSZXF1ZXN0SWQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKGV4KQotICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1NFUklBTElaQVRJT04pLmNyZWF0ZSgpOwotICAgICAgICAgICAgY3R4LndyaXRlQW5kRmx1c2goZXJyb3IpOwotICAgICAgICAgICAgdGhyb3cgZXg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgYXR0ZW1wdENvbW1pdChmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2csIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXIsIGZpbmFsIGJvb2xlYW4gc3RyaWN0KSB7Ci0gICAgICAgIGlmIChzdHJpY3QpIHsKLSAgICAgICAgICAgIGlmIChtc2cuZ2V0QXJncygpLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0FMSUFTRVMpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gKE1hcDxTdHJpbmcsIFN0cmluZz4pIG1zZy5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0FMSUFTRVMpOwotICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5jb21taXQobmV3IEhhc2hTZXQ8PihhbGlhc2VzLnZhbHVlcygpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5jb21taXRBbGwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdyYXBoTWFuYWdlci5jb21taXRBbGwoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBhdHRlbXB0Um9sbGJhY2soZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnLCBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyLCBmaW5hbCBib29sZWFuIHN0cmljdCkgewotICAgICAgICBpZiAoc3RyaWN0KSB7Ci0gICAgICAgICAgICBpZiAobXNnLmdldEFyZ3MoKS5jb250YWluc0tleShUb2tlbnMuQVJHU19BTElBU0VTKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcyA9IChNYXA8U3RyaW5nLCBTdHJpbmc+KSBtc2cuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19BTElBU0VTKTsKLSAgICAgICAgICAgICAgICBncmFwaE1hbmFnZXIucm9sbGJhY2sobmV3IEhhc2hTZXQ8PihhbGlhc2VzLnZhbHVlcygpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5yb2xsYmFja0FsbCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLnJvbGxiYWNrQWxsKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRNYW5hZ2VUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0KGZpbmFsIENvbnRleHQgY3R4KSB7Ci0gICAgICAgIHJldHVybiBtYW5hZ2VUcmFuc2FjdGlvbnMgPwotICAgICAgICAgICAgICAgIHRydWUgOiAoQm9vbGVhbikgY3R4LmdldFJlcXVlc3RNZXNzYWdlKCkuZ2V0QXJncygpLmdldE9yRGVmYXVsdChUb2tlbnMuQVJHU19NQU5BR0VfVFJBTlNBQ1RJT04sIGZhbHNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL09wTG9hZGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL09wTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNjljYmYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC9PcExvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3A7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5PcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zdGFuZGFyZC5TdGFuZGFyZE9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLlNlcnZpY2VMb2FkZXI7Ci0KLS8qKgotICogVXNlcyB7QGxpbmsgU2VydmljZUxvYWRlcn0gdG8gbG9hZCB7QGxpbmsgT3BQcm9jZXNzb3J9IGluc3RhbmNlcyBpbnRvIGEgY2FjaGUuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgT3BMb2FkZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihPcExvYWRlci5jbGFzcyk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBPcFByb2Nlc3Nvcj4gcHJvY2Vzc29ycyA9IG5ldyBIYXNoTWFwPD4oKTsKLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIFNlcnZpY2VMb2FkZXIubG9hZChPcFByb2Nlc3Nvci5jbGFzcykuZm9yRWFjaChvcCAtPiB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IG9wLmdldE5hbWUoKTsKLSAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJBZGRpbmcgdGhlIHt9IE9wUHJvY2Vzc29yLiIsIG5hbWUuZXF1YWxzKFN0YW5kYXJkT3BQcm9jZXNzb3IuT1BfUFJPQ0VTU09SX05BTUUpID8gInN0YW5kYXJkIiA6IG5hbWUpOwotICAgICAgICAgICAgaWYgKHByb2Nlc3NvcnMuY29udGFpbnNLZXkobmFtZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nLmZvcm1hdCgiVGhlcmUgaXMgYSBuYW1pbmcgY29uZmxpY3Qgd2l0aCB0aGUgJXMgT3BQcm9jZXNzb3IgaW1wbGVtZW50YXRpb25zLiIsIG5hbWUpKTsKLQotICAgICAgICAgICAgcHJvY2Vzc29ycy5wdXQobmFtZSwgb3ApOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplIHRoZSB7QGNvZGUgT3BMb2FkZXJ9IHdpdGggc2VydmVyIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBhdCBzdGFydHVwIGJ1dCBpcwotICAgICAqIGRlc2lnbmVkIHRvIGJlIGlkZW1wb3RlbnQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBpbml0KGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7Ci0gICAgICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIHByb2Nlc3NvcnMudmFsdWVzKCkuZm9yRWFjaChwcm9jZXNzb3IgLT4gcHJvY2Vzc29yLmluaXQoc2V0dGluZ3MpKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYW4ge0BsaW5rIE9wUHJvY2Vzc29yfSBieSBpdHMgbmFtZS4gSWYgaXQgY2Fubm90IGJlIGZvdW5kIGFuIHtAbGluayBPcHRpb25hbCNlbXB0eSgpfSBpcyByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIE9wdGlvbmFsPE9wUHJvY2Vzc29yPiBnZXRQcm9jZXNzb3IoZmluYWwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLm9mTnVsbGFibGUocHJvY2Vzc29ycy5nZXQobmFtZSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgYSByZWFkLW9ubHkgbWFwIG9mIHRoZSBwcm9jZXNzb3JzIHdoZXJlIHRoZSBrZXkgaXMgdGhlIHtAbGluayBPcFByb2Nlc3Nvcn0gbmFtZSBhbmQgdGhlIHZhbHVlIGlzIHRoZQotICAgICAqIGluc3RhbmNlIGNyZWF0ZWQgYnkge0BsaW5rIFNlcnZpY2VMb2FkZXJ9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTWFwPFN0cmluZywgT3BQcm9jZXNzb3I+IGdldFByb2Nlc3NvcnMoKSB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAocHJvY2Vzc29ycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVzZXQgdGhlIHByb2Nlc3NvcnMgc28gdGhhdCB0aGV5IGNhbiBiZSByZS1pbml0aWFsaXplZCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncyB3aGljaCBpcyB1c2VmdWwgaW4gdGVzdGluZwotICAgICAqIHNjZW5hcmlvcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvT3BQcm9jZXNzb3JFeGNlcHRpb24uamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvT3BQcm9jZXNzb3JFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI4NWZmZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL09wUHJvY2Vzc29yRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBPcFByb2Nlc3NvckV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbiB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlOwotCi0gICAgcHVibGljIE9wUHJvY2Vzc29yRXhjZXB0aW9uKGZpbmFsIFN0cmluZyBtZXNzYWdlLCBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlKSB7Ci0gICAgICAgIHN1cGVyKG1lc3NhZ2UpOwotICAgICAgICB0aGlzLnJlc3BvbnNlTWVzc2FnZSA9IHJlc3BvbnNlTWVzc2FnZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIGdldFJlc3BvbnNlTWVzc2FnZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VNZXNzYWdlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3Avc2Vzc2lvbi9TZXNzaW9uLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL3Nlc3Npb24vU2Vzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODFjYjQ0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3Avc2Vzc2lvbi9TZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbjsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5Hcm9vdnlDb21waWxlckdyZW1saW5QbHVnaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyYXBoTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLk1ldHJpY01hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5UaHJlYWRGYWN0b3J5VXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwotaW1wb3J0IGphdmF4LnNjcmlwdC5TaW1wbGVCaW5kaW5nczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db25jdXJyZW50SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRGdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkRmFjdG9yeTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbk9wUHJvY2Vzc29yLkNPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IuQ09ORklHX1BFUl9HUkFQSF9DTE9TRV9USU1FT1VUOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3Nvci5DT05GSUdfU0VTU0lPTl9USU1FT1VUOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3Nvci5ERUZBVUxUX1BFUl9HUkFQSF9DTE9TRV9USU1FT1VUOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3Nvci5ERUZBVUxUX1NFU1NJT05fVElNRU9VVDsKLQotLyoqCi0gKiBEZWZpbmVzIGEgInNlc3Npb24iIGZvciB0aGUge0BsaW5rIFNlc3Npb25PcFByb2Nlc3Nvcn0gd2hpY2ggcHJlc2VydmVzIHN0YXRlIGJldHdlZW4gcmVxdWVzdHMgbWFkZSB0byBHcmVtbGluCi0gKiBTZXJ2ZXIuIFNpbmNlIHRyYW5zYWN0aW9ucyBhcmUgYm91bmQgdG8gYSBzaW5nbGUgdGhyZWFkIHRoZSAic2Vzc2lvbiIgbWFpbnRhaW5zIGl0cyBvd24gdGhyZWFkIHRvIHByb2Nlc3MgR3JlbWxpbgotICogc3RhdGVtZW50cyBzbyB0aGF0IGVhY2ggcmVxdWVzdCBjYW4gYmUgZXhlY3V0ZWQgd2l0aGluIGl0IHRvIHByZXNlcnZlIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBmcm9tIG9uZSByZXF1ZXN0IHRvCi0gKiB0aGUgbmV4dC4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXNzaW9uIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoU2Vzc2lvbi5jbGFzcyk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBCaW5kaW5ncyBiaW5kaW5nczsKLSAgICBwcml2YXRlIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzOwotICAgIHByaXZhdGUgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlcjsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBzZXNzaW9uOwotICAgIHByaXZhdGUgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgY29uZmlndXJlZFNlc3Npb25UaW1lb3V0OwotICAgIHByaXZhdGUgZmluYWwgbG9uZyBjb25maWd1cmVkUGVyR3JhcGhDbG9zZVRpbWVvdXQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGdsb2JhbEZ1bmN0aW9uQ2FjaGVFbmFibGVkOwotICAgIHByaXZhdGUgZmluYWwgQ2hhbm5lbCBib3VuZENoYW5uZWw7Ci0KLSAgICBwcml2YXRlIEF0b21pY0Jvb2xlYW4ga2lsbGluZyA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKLSAgICBwcml2YXRlIEF0b21pY1JlZmVyZW5jZTxTY2hlZHVsZWRGdXR1cmU+IGtpbGwgPSBuZXcgQXRvbWljUmVmZXJlbmNlPD4oKTsKLQotICAgIC8qKgotICAgICAqIEVhY2ggc2Vzc2lvbiBnZXRzIGl0cyBvd24gU2NyaXB0RW5naW5lIHNvIGFzIHRvIGlzb2xhdGUgaXRzIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSBjbGFzc2VzIGxvYWRlZCB0byBpdC4KLSAgICAgKiBUaGlzIGlzIGltcG9ydGFudCBhcyBpdCBlbmFibGVzIHVzZXIgaW50ZXJmYWNlcyBidWlsdCBvbiBHcmVtbGluIFNlcnZlciB0byBoYXZlIGlzb2xhdGlvbiBpbiB3aGF0Ci0gICAgICogbGlicmFyaWVzIHRoZXkgdXNlIGFuZCB3aGF0IGNsYXNzZXMgZXhpc3QuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBHcmVtbGluRXhlY3V0b3IgZ3JlbWxpbkV4ZWN1dG9yOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBUaHJlYWRGYWN0b3J5IHRocmVhZEZhY3RvcnlXb3JrZXIgPSBUaHJlYWRGYWN0b3J5VXRpbC5jcmVhdGUoInNlc3Npb24tJWQiKTsKLQotICAgIC8qKgotICAgICAqIEJ5IGJpbmRpbmcgdGhlIHNlc3Npb24gdG8gcnVuIFNjcmlwdEVuZ2luZSBldmFsdWF0aW9ucyBpbiBhIHNwZWNpZmljIHRocmVhZCwgZWFjaCByZXF1ZXN0IHdpbGwgcmVzcGVjdAotICAgICAqIHRoZSBUaHJlYWRMb2NhbCBuYXR1cmUgb2YgR3JhcGggaW1wbGVtZW50YXRpb25zLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKHRocmVhZEZhY3RvcnlXb3JrZXIpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBDb25jdXJyZW50SGFzaE1hcDxTdHJpbmcsIFNlc3Npb24+IHNlc3Npb25zOwotCi0gICAgcHVibGljIFNlc3Npb24oZmluYWwgU3RyaW5nIHNlc3Npb24sIGZpbmFsIENvbnRleHQgY29udGV4dCwgZmluYWwgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBTZXNzaW9uPiBzZXNzaW9ucykgewotICAgICAgICBsb2dnZXIuZGVidWcoIk5ldyBzZXNzaW9uIGVzdGFibGlzaGVkIGZvciB7fSIsIHNlc3Npb24pOwotICAgICAgICB0aGlzLnNlc3Npb24gPSBzZXNzaW9uOwotICAgICAgICB0aGlzLmJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBjb250ZXh0LmdldFNldHRpbmdzKCk7Ci0gICAgICAgIHRoaXMuZ3JhcGhNYW5hZ2VyID0gY29udGV4dC5nZXRHcmFwaE1hbmFnZXIoKTsKLSAgICAgICAgdGhpcy5zY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgPSBjb250ZXh0LmdldFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSgpOwotICAgICAgICB0aGlzLnNlc3Npb25zID0gc2Vzc2lvbnM7Ci0KLSAgICAgICAgZmluYWwgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MgcHJvY2Vzc29yU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzLm9wdGlvbmFsUHJvY2Vzc29yKFNlc3Npb25PcFByb2Nlc3Nvci5jbGFzcykuCi0gICAgICAgICAgICAgICAgb3JFbHNlKFNlc3Npb25PcFByb2Nlc3Nvci5ERUZBVUxUX1NFVFRJTkdTKTsKLSAgICAgICAgdGhpcy5jb25maWd1cmVkU2Vzc2lvblRpbWVvdXQgPSBMb25nLnBhcnNlTG9uZyhwcm9jZXNzb3JTZXR0aW5ncy5jb25maWcuZ2V0T3JEZWZhdWx0KAotICAgICAgICAgICAgICAgIENPTkZJR19TRVNTSU9OX1RJTUVPVVQsIERFRkFVTFRfU0VTU0lPTl9USU1FT1VUKS50b1N0cmluZygpKTsKLSAgICAgICAgdGhpcy5jb25maWd1cmVkUGVyR3JhcGhDbG9zZVRpbWVvdXQgPSBMb25nLnBhcnNlTG9uZyhwcm9jZXNzb3JTZXR0aW5ncy5jb25maWcuZ2V0T3JEZWZhdWx0KAotICAgICAgICAgICAgICAgIENPTkZJR19QRVJfR1JBUEhfQ0xPU0VfVElNRU9VVCwgREVGQVVMVF9QRVJfR1JBUEhfQ0xPU0VfVElNRU9VVCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIHRoaXMuZ2xvYmFsRnVuY3Rpb25DYWNoZUVuYWJsZWQgPSBCb29sZWFuLnBhcnNlQm9vbGVhbigKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5ncy5jb25maWcuZ2V0T3JEZWZhdWx0KENPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRCwgdHJ1ZSkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgdGhpcy5ncmVtbGluRXhlY3V0b3IgPSBpbml0aWFsaXplR3JlbWxpbkV4ZWN1dG9yKCkuY3JlYXRlKCk7Ci0KLSAgICAgICAgc2V0dGluZ3Muc2NyaXB0RW5naW5lcy5rZXlTZXQoKS5mb3JFYWNoKHRoaXM6OnJlZ2lzdGVyTWV0cmljcyk7Ci0KLSAgICAgICAgYm91bmRDaGFubmVsID0gY29udGV4dC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5jaGFubmVsKCk7Ci0gICAgICAgIGJvdW5kQ2hhbm5lbC5jbG9zZUZ1dHVyZSgpLmFkZExpc3RlbmVyKGZ1dHVyZSAtPiBtYW51YWxLaWxsKHRydWUpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBzdXBwbGllZCB7QGNvZGUgQ2hhbm5lbH0gb2JqZWN0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgYm91bmQgdG8gdGhlIHtAY29kZSBTZXNzaW9ufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0JvdW5kVG8oZmluYWwgQ2hhbm5lbCBjaGFubmVsKSB7Ci0gICAgICAgIHJldHVybiBjaGFubmVsID09IGJvdW5kQ2hhbm5lbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR3JlbWxpbkV4ZWN1dG9yIGdldEdyZW1saW5FeGVjdXRvcigpIHsKLSAgICAgICAgcmV0dXJuIGdyZW1saW5FeGVjdXRvcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ3MgZ2V0QmluZGluZ3MoKSB7Ci0gICAgICAgIHJldHVybiBiaW5kaW5nczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRXhlY3V0b3JTZXJ2aWNlIGdldEV4ZWN1dG9yKCkgewotICAgICAgICByZXR1cm4gZXhlY3V0b3I7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZXNzaW9uSWQoKSB7Ci0gICAgICAgIHJldHVybiBzZXNzaW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdGluZ1JlcXVlc3RzKCkgewotICAgICAgICByZXR1cm4gIWtpbGxpbmcuZ2V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdG91Y2goKSB7Ci0gICAgICAgIC8vIGlmIHRoZSB0YXNrIG9mIGtpbGxpbmcgaXMgY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseSB0aGVuIHJlc2V0IHRoZSBzZXNzaW9uIG1vbml0b3IuIG90aGVyd2lzZSB0aGlzIHNlc3Npb24KLSAgICAgICAgLy8gaGFzIGFscmVhZHkgYmVlbiBraWxsZWQgYW5kIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvIHdpdGggdGhpcyBzZXNzaW9uLgotICAgICAgICBraWxsLnVwZGF0ZUFuZEdldChmdXR1cmUgLT4gewotICAgICAgICAgICAgaWYgKG51bGwgPT0gZnV0dXJlIHx8ICFmdXR1cmUuaXNEb25lKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZnV0dXJlICE9IG51bGwpIGZ1dHVyZS5jYW5jZWwoZmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZS5zY2hlZHVsZSgoKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2Vzc2lvbiB7fSBoYXMgYmVlbiBpZGxlIGZvciBtb3JlIHRoYW4ge30gbWlsbGlzZWNvbmRzIC0gcHJlcGFyaW5nIHRvIGNsb3NlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLCB0aGlzLmNvbmZpZ3VyZWRTZXNzaW9uVGltZW91dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBraWxsKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5jb25maWd1cmVkU2Vzc2lvblRpbWVvdXQsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmdXR1cmU7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0b3BzIHRoZSBzZXNzaW9uIHdpdGggY2FsbCB0byB7QGxpbmsgI2tpbGwoYm9vbGVhbil9IGJ1dCBhbHNvIHN0b3BzIHRoZSBzZXNzaW9uIGV4cGlyYXRpb24gY2FsbCB3aGljaCBlbnN1cmVzCi0gICAgICogdGhhdCB0aGUgc2Vzc2lvbiBpcyBvbmx5IGtpbGxlZCBvbmNlLiBTZWUge0BsaW5rICNraWxsKGJvb2xlYW4pfSBmb3IgaW5mb3JtYXRpb24gb24gaG93IHdoYXQgImZvcmNpbmciIHRoZQotICAgICAqIHNlc3Npb24ga2lsbCB3aWxsIG1lYW4uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgbWFudWFsS2lsbChmaW5hbCBib29sZWFuIGZvcmNlKSB7Ci0gICAgICAgIC8vIHNlZW1zIHRoZXJlIGlzIGEgc2l0dWF0aW9uIHdoZXJlIGtpbGwgY2FuIGdldCBudWxsZWQuIHNlZW1zIHRvIG9ubHkgaGFwcGVuIGluIHRyYXZpcyBhcyBhIHJlc3VsdCBvZiB0ZXN0Ci0gICAgICAgIC8vIHJ1bnMgYW5kIGknbSBndWVzc2luZyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggYSBjb21iaW5hdGlvbiBvZiBzaHV0ZG93biBhbmQgc2Vzc2lvbiBjbG9zZSB0aG91Z2ggaSdtCi0gICAgICAgIC8vIG5vdCBzdXJlIHdoeS4gcGVyaGFwcyB0aGlzICJmaXgiIGp1c3QgbWFza3MgdXAgYSBkZWVwZXIgcHJvYmxlbSBidXQgYXMgaSByZWFzb24gb24gaXQgbm93LCBpdCBzZWVtcyBtb3N0bHkKLSAgICAgICAgLy8gYm91bmQgdG8gc2h1dGRvd24gc2l0dWF0aW9ucyB3aGljaCBiYXNpY2FsbHkgbWVhbnMgdGhlIGZvcmNlZCBlbmQgb2YgdGhlIHNlc3Npb24gYW55d2F5LCBzbyBwZXJoYXBzIHRoZQotICAgICAgICAvLyByb290IGNhdXNlIGlzbid0IHNvbWV0aGluZyB0aGF0IG5lZWRzIGltbWVkaWF0ZSBjaGFzaW5nIChhdCBsZWFzdCB1bnRpbCBpdCBjYW4gYmUgc2hvd24gb3RoZXJ3aXNlIGFueXdheSkKLSAgICAgICAgT3B0aW9uYWwub2ZOdWxsYWJsZShraWxsLmdldCgpKS5pZlByZXNlbnQoZiAtPiBmLmNhbmNlbCh0cnVlKSk7Ci0gICAgICAgIGtpbGwoZm9yY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEtpbGxzIHRoZSBzZXNzaW9uIGFuZCByb2xsYmFjayBhbnkgdW5jb21taXR0ZWQgY2hhbmdlcyBvbiB0cmFuc2FjdGlvbmFsIGdyYXBocy4gV2hlbiAiZm9yY2UiIGNsb3NlZCwgdGhlCi0gICAgICogc2Vzc2lvbiB3b24ndCBib3RoZXIgdG8gdHJ5IHRvIHN1Ym1pdCB0cmFuc2FjdGlvbiBjbG9zZSBjb21tYW5kcy4gSXQgd2lsbCBiZSB1cCB0byB0aGUgdW5kZXJseWluZyBncmFwaAotICAgICAqIGltcGxlbWVudGF0aW9uIHRvIGRldGVybWluZSBob3cgaXQgd2lsbCBjbGVhbiB1cCBvcnBoYW5lZCB0cmFuc2FjdGlvbnMuIFRoZSBmb3JjZSB3aWxsIHRyeSB0byBjYW5jZWwgc2NoZWR1bGVkCi0gICAgICogam9icyBhbmQgaW50ZXJydXB0IGFueSBjdXJyZW50bHkgcnVubmluZyBvbmVzLiBJbnRlcnJ1cHRpb24gaXMgbm90IGd1YXJhbnRlZWQsIGJ1dCBhbiBhdHRlbXB0IHdpbGwgYmUgbWFkZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQga2lsbChmaW5hbCBib29sZWFuIGZvcmNlKSB7Ci0gICAgICAgIGtpbGxpbmcuc2V0KHRydWUpOwotCi0gICAgICAgIC8vIGlmIHRoZSBzZXNzaW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCB0aGVuIHRoZXJlJ3Mgbm8gbmVlZCB0byBkbyB0aGlzIHByb2Nlc3MgYWdhaW4uICBpdCdzIHBvc3NpYmxlIHRoYXQKLSAgICAgICAgLy8gdGhlIG1hbnVhbGxLaWxsIGFuZCB0aGUga2lsbCBmdXR1cmUgY291bGQgaGF2ZSBib3RoIGNhbGxlZCBraWxsIGF0IHJvdWdobHkgdGhlIHNhbWUgdGltZS4gdGhpcyBwcmV2ZW50cwotICAgICAgICAvLyBraWxsKCkgZnJvbSBiZWluZyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKLSAgICAgICAgaWYgKCFzZXNzaW9ucy5jb250YWluc0tleShzZXNzaW9uKSkgcmV0dXJuOwotCi0gICAgICAgIGlmICghZm9yY2UpIHsKLSAgICAgICAgICAgIC8vIHdoZW4gdGhlIHNlc3Npb24gaXMga2lsbGVkIG9wZW4gdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHJvbGxlZCBiYWNrCi0gICAgICAgICAgICBncmFwaE1hbmFnZXIuZ2V0R3JhcGhOYW1lcygpLmZvckVhY2goZ05hbWUgLT4gewotICAgICAgICAgICAgICAgIGZpbmFsIEdyYXBoIGcgPSBncmFwaE1hbmFnZXIuZ2V0R3JhcGgoZ05hbWUpOwotICAgICAgICAgICAgICAgIGlmIChnLmZlYXR1cmVzKCkuZ3JhcGgoKS5zdXBwb3J0c1RyYW5zYWN0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgdG8gZXhlY3V0ZSB0aGUgcm9sbGJhY2sgaW4gdGhlIGV4ZWN1dG9yIGJlY2F1c2UgdGhlIHRyYW5zYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aAotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRocmVhZCBvZiBleGVjdXRpb24gZnJvbSB0aGlzIHNlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yLnN1Ym1pdCgoKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcudHgoKS5pc09wZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIlJvbGxpbmcgYmFjayBvcGVuIHRyYW5zYWN0aW9ucyBvbiB7fSBiZWZvcmUga2lsbGluZyBzZXNzaW9uOiB7fSIsIGdOYW1lLCBzZXNzaW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy50eCgpLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSkuZ2V0KGNvbmZpZ3VyZWRQZXJHcmFwaENsb3NlVGltZW91dCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHJvbGxiYWNrIG9uICVzIHdoZW4gY2xvc2luZyBzZXNzaW9uOiAlcyIsIGdOYW1lLCBzZXNzaW9uKSwgZXgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dnZXIuZGVidWcoIlNraXBwZWQgYXR0ZW1wdCB0byBjbG9zZSBvcGVuIGdyYXBoIHRyYW5zYWN0aW9ucyBvbiB7fSAtIGNsb3NlIHdhcyBmb3JjZWQiLCBzZXNzaW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHByZXZlbnQgYW55IGFkZGl0aW9uYWwgcmVxdWVzdHMgZnJvbSBwcm9jZXNzaW5nLiBpZiB0aGUga2lsbCB3YXMgbm90ICJmb3JjZWQiIHRoZW4gam9icyB3ZXJlIHNjaGVkdWxlZCB0bwotICAgICAgICAvLyB0cnkgdG8gcm9sbGJhY2sgb3BlbiB0cmFuc2FjdGlvbnMuIHRob3NlIGpvYnMgZWl0aGVyIHRpbWVkLW91dCBvciBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiBlaXRoZXIgd2F5LCBubwotICAgICAgICAvLyBhZGRpdGlvbmFsIGpvYnMgd2lsbCBiZSBhbGxvd2VkLCBydW5uaW5nIGpvYnMgd2lsbCBiZSBjYW5jZWxsZWQgKGlmIHBvc3NpYmxlKSBhbmQgYW55IHNjaGVkdWxlZCBqb2JzIHdpbGwKLSAgICAgICAgLy8gYmUgY2FuY2VsbGVkCi0gICAgICAgIGV4ZWN1dG9yLnNodXRkb3duTm93KCk7Ci0KLSAgICAgICAgc2Vzc2lvbnMucmVtb3ZlKHNlc3Npb24pOwotCi0gICAgICAgIC8vIG9uY2UgYSBzZXNzaW9uIGlzIGRlYWQgcmVsZWFzZSB0aGUgZ2F1Z2VzIGluIHRoZSByZWdpc3RyeSBmb3IgaXQKLSAgICAgICAgTWV0cmljTWFuYWdlci5JTlNUQU5DRS5nZXRSZWdpc3RyeSgpLnJlbW92ZU1hdGNoaW5nKChzLCBtZXRyaWMpIC0+IHMuY29udGFpbnMoc2Vzc2lvbikpOwotCi0gICAgICAgIGxvZ2dlci5kZWJ1ZygiU2Vzc2lvbiB7fSBjbG9zZWQiLCBzZXNzaW9uKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEdyZW1saW5FeGVjdXRvci5CdWlsZGVyIGluaXRpYWxpemVHcmVtbGluRXhlY3V0b3IoKSB7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5FeGVjdXRvci5CdWlsZGVyIGdyZW1saW5FeGVjdXRvckJ1aWxkZXIgPSBHcmVtbGluRXhlY3V0b3IuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5ldmFsdWF0aW9uVGltZW91dChzZXR0aW5ncy5nZXRFdmFsdWF0aW9uVGltZW91dCgpKQotICAgICAgICAgICAgICAgIC5hZnRlclRpbWVvdXQoKGIsIGUpIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhNYW5hZ2VyLnJvbGxiYWNrQWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3MuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kaW5ncy5wdXRBbGwoYik7Ci0gICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAuYWZ0ZXJTdWNjZXNzKGIgLT4gewotICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRpbmdzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3MucHV0QWxsKGIpOwotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgLmdsb2JhbEJpbmRpbmdzKGdyYXBoTWFuYWdlci5nZXRBc0JpbmRpbmdzKCkpCi0gICAgICAgICAgICAgICAgLmV4ZWN1dG9yU2VydmljZShleGVjdXRvcikKLSAgICAgICAgICAgICAgICAuc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKHNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSk7Ci0KLSAgICAgICAgc2V0dGluZ3Muc2NyaXB0RW5naW5lcy5mb3JFYWNoKChrLCB2KSAtPiB7Ci0gICAgICAgICAgICAvLyB1c2UgcGx1Z2lucyBpZiB0aGV5IGFyZSBwcmVzZW50Ci0gICAgICAgICAgICBpZiAoIXYucGx1Z2lucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhhdCBzZXJ2ZXIgcmVsYXRlZCBjbGFzc2VzIGFyZSBhdmFpbGFibGUgYXQgaW5pdC4gdGhlIExpZmVDeWNsZUhvb2sgc3R1ZmYgd2lsbCBiZQotICAgICAgICAgICAgICAgIC8vIGFkZGVkIGV4cGxpY2l0bHkgdmlhIGNvbmZpZ3VyYXRpb24gdXNpbmcgR3JlbWxpblNlcnZlckdyZW1saW5Nb2R1bGUgaW4gdGhlIHlhbWwuIG5lZWQgdG8gb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAvLyBzY3JpcHRlbmdpbmUgc2V0dGluZ3Mgd2l0aCBTZXNzaW9uT3BQcm9jZXNzb3Igc3BlY2lmaWMgb25lcyBhcyB0aGUgcHJvY2Vzc2luZyBmb3Igc2Vzc2lvbnMgaXMKLSAgICAgICAgICAgICAgICAvLyBkaWZmZXJlbnQgYW5kIGEgZ2xvYmFsIHNldHRpbmcgbWF5IG5vdCBtYWtlIHNlbnNlIGZvciBhIHNlc3Npb24KLSAgICAgICAgICAgICAgICBpZiAodi5wbHVnaW5zLmNvbnRhaW5zS2V5KEdyb292eUNvbXBpbGVyR3JlbWxpblBsdWdpbi5jbGFzcy5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYucGx1Z2lucy5nZXQoR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luLmNsYXNzLmdldE5hbWUoKSkucHV0KENPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRCwgZ2xvYmFsRnVuY3Rpb25DYWNoZUVuYWJsZWQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBwbHVnaW5Db25mID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgICAgICAgICBwbHVnaW5Db25mLnB1dChDT05GSUdfR0xPQkFMX0ZVTkNUSU9OX0NBQ0hFX0VOQUJMRUQsIGdsb2JhbEZ1bmN0aW9uQ2FjaGVFbmFibGVkKTsKLSAgICAgICAgICAgICAgICAgICAgdi5wbHVnaW5zLnB1dChHcm9vdnlDb21waWxlckdyZW1saW5QbHVnaW4uY2xhc3MuZ2V0TmFtZSgpLCBwbHVnaW5Db25mKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBncmVtbGluRXhlY3V0b3JCdWlsZGVyLmFkZFBsdWdpbnMoaywgdi5wbHVnaW5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJuIGdyZW1saW5FeGVjdXRvckJ1aWxkZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyTWV0cmljcyhmaW5hbCBTdHJpbmcgZW5naW5lTmFtZSkgewotICAgICAgICBmaW5hbCBHcmVtbGluU2NyaXB0RW5naW5lIGVuZ2luZSA9IGdyZW1saW5FeGVjdXRvci5nZXRTY3JpcHRFbmdpbmVNYW5hZ2VyKCkuZ2V0RW5naW5lQnlOYW1lKGVuZ2luZU5hbWUpOwotICAgICAgICBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLnJlZ2lzdGVyR3JlbWxpblNjcmlwdEVuZ2luZU1ldHJpY3MoZW5naW5lLCBlbmdpbmVOYW1lLCAic2Vzc2lvbiIsIHNlc3Npb24sICJjbGFzcy1jYWNoZSIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3Avc2Vzc2lvbi9TZXNzaW9uT3BQcm9jZXNzb3IuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3Avc2Vzc2lvbi9TZXNzaW9uT3BQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2NmQ5NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL3Nlc3Npb24vU2Vzc2lvbk9wUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NzkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbjsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5Hcm9vdnlDb21waWxlckdyZW1saW5QbHVnaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSmF2YVRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkZhaWx1cmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLkJ5dGVjb2RlSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyYXBoTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLk9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRlZFVzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5GcmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlN0YXRlS2V5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLkFic3RyYWN0RXZhbE9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLk9wUHJvY2Vzc29yRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuTWV0cmljTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLlRyYXZlcnNlckl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVmVyc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNsb3NlYWJsZUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuVGVtcG9yYXJ5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5UaHJvd2luZ0NvbnN1bWVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwotaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2NyaXB0LlNpbXBsZUJpbmRpbmdzOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlVuZGVjbGFyZWRUaHJvd2FibGVFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmVUYXNrOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOwotCi1pbXBvcnQgc3RhdGljIGNvbS5jb2RhaGFsZS5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5Lm5hbWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcC5UWF9DT01NSVQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JhcGhPcC5UWF9ST0xMQkFDSzsKLQotLyoqCi0gKiBTaW1wbGUge0BsaW5rIE9wUHJvY2Vzc29yfSBpbXBsZW1lbnRhdGlvbiB0aGF0IGhhbmRsZXMge0Bjb2RlIFNjcmlwdEVuZ2luZX0gc2NyaXB0IGV2YWx1YXRpb24gaW4gdGhlIGNvbnRleHQgb2YKLSAqIGEgc2Vzc2lvbi4gTm90ZSB0aGF0IHRoaXMgcHJvY2Vzc29yIHdpbGwgIGFsc28gdGFrZSBhICJjbG9zZSIgb3AgdG8ga2lsbCB0aGUgc2Vzc2lvbiBhbmQgcm9sbGJhY2sgYW55IGluY29tcGxldGUgdHJhbnNhY3Rpb25zLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFNlc3Npb25PcFByb2Nlc3NvciBleHRlbmRzIEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RNYXBwZXIgbWFwcGVyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgYXVkaXRMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmVtbGluU2VydmVyLkFVRElUX0xPR0dFUl9OQU1FKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCaW5kaW5ncyBFTVBUWV9CSU5ESU5HUyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFNlc3Npb25PcFByb2Nlc3Nvci5jbGFzcyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BfUFJPQ0VTU09SX05BTUUgPSAic2Vzc2lvbiI7Ci0KLSAgICAvKioKLSAgICAgKiBTY3JpcHQgZW5naW5lcyBhcmUgZXZhbHVhdGVkIGluIGEgcGVyIHNlc3Npb24gY29udGV4dCB3aGVyZSBpbXBvcnRzL3NjcmlwdHMgYXJlIGlzb2xhdGVkIHBlciBzZXNzaW9uLgotICAgICAqLwotICAgIHByb3RlY3RlZCBzdGF0aWMgQ29uY3VycmVudEhhc2hNYXA8U3RyaW5nLCBTZXNzaW9uPiBzZXNzaW9ucyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDw+KCk7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBNZXRyaWNNYW5hZ2VyLklOU1RBTkNFLmdldEdhdWdlKHNlc3Npb25zOjpzaXplLCBuYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJzZXNzaW9ucyIpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIGhvdyBsb25nIGEgc2Vzc2lvbiB3aWxsIGJlIGF2YWlsYWJsZSBiZWZvcmUgaXQgdGltZXMgb3V0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19TRVNTSU9OX1RJTUVPVVQgPSAic2Vzc2lvblRpbWVvdXQiOwotCi0gICAgLyoqCi0gICAgICogQ29uZmlndXJhdGlvbiBzZXR0aW5nIGZvciBob3cgbG9uZyB0byB3YWl0IGluIG1pbGxpc2Vjb25kcyBmb3IgZWFjaCBjb25maWd1cmVkIGdyYXBoIHRvIGNsb3NlIGFueSBvcGVuCi0gICAgICogdHJhbnNhY3Rpb25zIHdoZW4gdGhlIHNlc3Npb24gaXMga2lsbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19QRVJfR1JBUEhfQ0xPU0VfVElNRU9VVCA9ICJwZXJHcmFwaENsb3NlVGltZW91dCI7Ci0KLSAgICAvKioKLSAgICAgKiBDb25maWd1cmF0aW9uIHNldHRpbmcgdGhhdCBiZWhhdmVzIGFzIGFuIG92ZXJyaWRlIHRvIHRoZSBnbG9iYWwgc2NyaXB0IGVuZ2luZSBzZXR0aW5nIG9mIHRoZSBzYW1lIG5hbWUgdGhhdCBpcwotICAgICAqIHByb3ZpZGVkIHRvIHRoZSB7QGxpbmsgR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2lufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfR0xPQkFMX0ZVTkNUSU9OX0NBQ0hFX0VOQUJMRUQgPSAiZ2xvYmFsRnVuY3Rpb25DYWNoZUVuYWJsZWQiOwotCi0gICAgLyoqCi0gICAgICogRGVmYXVsdCB0aW1lb3V0IGZvciBhIHNlc3Npb24gaXMgZWlnaHQgaG91cnMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIERFRkFVTFRfU0VTU0lPTl9USU1FT1VUID0gMjg4MDAwMDA7Ci0KLSAgICAvKioKLSAgICAgKiBEZWZhdWx0IGFtb3VudCBvZiB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzIGZvciBlYWNoIGNvbmZpZ3VyZWQgZ3JhcGggdG8gY2xvc2UgYW55IG9wZW4gdHJhbnNhY3Rpb25zIHdoZW4KLSAgICAgKiB0aGUgc2Vzc2lvbiBpcyBraWxsZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIERFRkFVTFRfUEVSX0dSQVBIX0NMT1NFX1RJTUVPVVQgPSAxMDAwMDsKLQotICAgIHN0YXRpYyBmaW5hbCBTZXR0aW5ncy5Qcm9jZXNzb3JTZXR0aW5ncyBERUZBVUxUX1NFVFRJTkdTID0gbmV3IFNldHRpbmdzLlByb2Nlc3NvclNldHRpbmdzKCk7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBERUZBVUxUX1NFVFRJTkdTLmNsYXNzTmFtZSA9IFNlc3Npb25PcFByb2Nlc3Nvci5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCk7Ci0gICAgICAgIERFRkFVTFRfU0VUVElOR1MuY29uZmlnID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIHB1dChDT05GSUdfU0VTU0lPTl9USU1FT1VULCBERUZBVUxUX1NFU1NJT05fVElNRU9VVCk7Ci0gICAgICAgICAgICBwdXQoQ09ORklHX1BFUl9HUkFQSF9DTE9TRV9USU1FT1VULCBERUZBVUxUX1BFUl9HUkFQSF9DTE9TRV9USU1FT1VUKTsKLSAgICAgICAgICAgIHB1dChDT05GSUdfTUFYX1BBUkFNRVRFUlMsIERFRkFVTFRfTUFYX1BBUkFNRVRFUlMpOwotICAgICAgICAgICAgcHV0KENPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRCwgdHJ1ZSk7Ci0gICAgICAgIH19OwotICAgIH0KLQotICAgIC8vIERldGVybWluZXMgd2hldGhlciB0byBjbG9zZSB0aGUgc2Vzc2lvbiBhZnRlciBhIHN1Y2Nlc3NmdWwgQ09NTUlUL1JPTExCQUNLLiBTZXQgZHVyaW5nIGluaXQoKS4KLSAgICBwcml2YXRlIGJvb2xlYW4gY2xvc2VTZXNzaW9uUG9zdEdyYXBoT3A7Ci0KLSAgICBwdWJsaWMgU2Vzc2lvbk9wUHJvY2Vzc29yKCkgewotICAgICAgICBzdXBlcihmYWxzZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gT1BfUFJPQ0VTU09SX05BTUU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdChmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICB0aGlzLm1heFBhcmFtZXRlcnMgPSAoaW50KSBzZXR0aW5ncy5vcHRpb25hbFByb2Nlc3NvcihTZXNzaW9uT3BQcm9jZXNzb3IuY2xhc3MpLm9yRWxzZShERUZBVUxUX1NFVFRJTkdTKS5jb25maWcuCi0gICAgICAgICAgICAgICAgZ2V0T3JEZWZhdWx0KENPTkZJR19NQVhfUEFSQU1FVEVSUywgREVGQVVMVF9NQVhfUEFSQU1FVEVSUyk7Ci0gICAgICAgIHRoaXMuY2xvc2VTZXNzaW9uUG9zdEdyYXBoT3AgPSBzZXR0aW5ncy5jbG9zZVNlc3Npb25Qb3N0R3JhcGhPcDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPbGRlciB2ZXJzaW9ucyBvZiBzZXNzaW9uLWJhc2VkIHJlcXVlc3RzIGFjY2VwdGVkIGEgImNsb3NlIiBvcGVyYXRvciBpbiBhZGRpdGlvbiB0byAiZXZhbCIuIFRoaXMgZmVhdHVyZQotICAgICAqIGVmZmVjdGl2ZWx5IGFjdHMgYXMgYSBkby1ub3RoaW5nIGZvciAzLjUuMCB0byBhbGxvdyBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVycyB0byBjb25uZWN0LiBBdCBzb21lIHBvaW50Ci0gICAgICogdGhpcyBtYXkgYmUgcmVtb3ZlZCBjb21wbGV0ZWx5LiBOb3RlIHRoYXQgY2xvc2luZyB0aGUgY2hhbm5lbCBraWxscyB0aGUgc2Vzc2lvbiBub3cuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9wdGlvbmFsPFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4+IHNlbGVjdE90aGVyKGZpbmFsIENvbnRleHQgY3R4KSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IGN0eC5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotCi0gICAgICAgIC8vIGRlcHJlY2F0ZWQgdGhlICJjbG9zZSIgbWVzc2FnZSBhdCAzLjMuMTEgLSBsZWZ0IHRoaXMgY2hlY2sgZm9yIHRoZSAiY2xvc2UiIHRva2VuIHNvIHRoYXQgaWYgb2xkZXIgdmVyc2lvbnMKLSAgICAgICAgLy8gb2YgdGhlIGRyaXZlciBjb25uZWN0IHRoZXkgd29uJ3QgZ2V0IGFuIGVycm9yLiBiYXNpY2FsbHkganVzdCB3cml0ZXMgYmFjayBhIE5PX0NPTlRFTlQKLSAgICAgICAgLy8gZm9yIHRoZSBpbW1lZGlhdGUgdGVybSBpbiAzLjUuMCBhbmQgdGhlbiBmb3Igc29tZSBmdXR1cmUgdmVyc2lvbiByZW1vdmUgc3VwcG9ydCBmb3IgdGhlIG1lc3NhZ2UgY29tcGxldGVseQotICAgICAgICAvLyBhbmQgdGh1cyBkaXNhbGxvdyBvbGRlciBkcml2ZXIgdmVyc2lvbnMgZnJvbSBjb25uZWN0aW5nIGF0IGFsbC4KLSAgICAgICAgaWYgKHJlcXVlc3RNZXNzYWdlLmdldE9wKCkuZXF1YWxzKFRva2Vucy5PUFNfQ0xPU0UpKSB7Ci0gICAgICAgICAgICAvLyB0aGlzIG11c3QgYmUgYW4gaW4tc2Vzc2lvbiByZXF1ZXN0Ci0gICAgICAgICAgICBpZiAoIXJlcXVlc3RNZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19TRVNTSU9OKS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KCJBIG1lc3NhZ2Ugd2l0aCBhbiBbJXNdIG9wIGNvZGUgcmVxdWlyZXMgYSBbJXNdIGFyZ3VtZW50IiwgVG9rZW5zLk9QU19DTE9TRSwgVG9rZW5zLkFSR1NfU0VTU0lPTik7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKG1zZywgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHJlcXVlc3RNZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZihyaGMgLT4gewotICAgICAgICAgICAgICAgIC8vIHNlbmQgYmFjayBhIGNvbmZpcm1hdGlvbiBvZiB0aGUgY2xvc2UKLSAgICAgICAgICAgICAgICByaGMud3JpdGVBbmRGbHVzaChSZXNwb25zZU1lc3NhZ2UuYnVpbGQocmVxdWVzdE1lc3NhZ2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuTk9fQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0TWVzc2FnZS5nZXRPcCgpLmVxdWFscyhUb2tlbnMuT1BTX0JZVEVDT0RFKSkgewotICAgICAgICAgICAgdmFsaWRhdGVUcmF2ZXJzYWxTb3VyY2VBbGlhcyhjdHgsIHJlcXVlc3RNZXNzYWdlLCB2YWxpZGF0ZVRyYXZlcnNhbFJlcXVlc3QocmVxdWVzdE1lc3NhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbC5vZih0aGlzOjppdGVyYXRlQnl0ZWNvZGVUcmF2ZXJzYWwpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmVtcHR5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHZhbGlkYXRlVHJhdmVyc2FsU291cmNlQWxpYXMoZmluYWwgQ29udGV4dCBjdHgsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1lc3NhZ2UsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcykgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZUJpbmRpbmdGb3JBbGlhcyA9IGFsaWFzZXMudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgIGlmICghY3R4LmdldEdyYXBoTWFuYWdlcigpLmdldFRyYXZlcnNhbFNvdXJjZU5hbWVzKCkuY29udGFpbnModHJhdmVyc2FsU291cmNlQmluZGluZ0ZvckFsaWFzKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIlRoZSB0cmF2ZXJzYWwgc291cmNlIFslc10gZm9yIGFsaWFzIFslc10gaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlci4iLCB0cmF2ZXJzYWxTb3VyY2VCaW5kaW5nRm9yQWxpYXMsIFRva2Vucy5WQUxfVFJBVkVSU0FMX1NPVVJDRV9BTElBUyk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiB2YWxpZGF0ZVRyYXZlcnNhbFJlcXVlc3QoZmluYWwgUmVxdWVzdE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKCFtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19HUkVNTElOKS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQuIiwgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfR1JFTUxJTik7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEFsaWFzZXMobWVzc2FnZSkuZ2V0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgT3B0aW9uYWw8TWFwPFN0cmluZywgU3RyaW5nPj4gdmFsaWRhdGVkQWxpYXNlcyhmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBPcHRpb25hbDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBhbGlhc2VzID0gbWVzc2FnZS5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgIGlmICghYWxpYXNlcy5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQuIiwgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFsaWFzZXMuZ2V0KCkuc2l6ZSgpICE9IDEgfHwgIWFsaWFzZXMuZ2V0KCkuY29udGFpbnNLZXkoVG9rZW5zLlZBTF9UUkFWRVJTQUxfU09VUkNFX0FMSUFTKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyB0aGUgWyVzXSBhcmd1bWVudCB0byBiZSBhIE1hcCBjb250YWluaW5nIG9uZSBhbGlhcyBhc3NpZ25tZW50IG5hbWVkICclcycuIiwKLSAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfQUxJQVNFUywgVG9rZW5zLlZBTF9UUkFWRVJTQUxfU09VUkNFX0FMSUFTKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBPcFByb2Nlc3NvckV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYWxpYXNlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVGhyb3dpbmdDb25zdW1lcjxDb250ZXh0PiBnZXRFdmFsT3AoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzOjpldmFsT3A7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIE9wdGlvbmFsPFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4+IHZhbGlkYXRlRXZhbE1lc3NhZ2UoZmluYWwgUmVxdWVzdE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIudmFsaWRhdGVFdmFsTWVzc2FnZShtZXNzYWdlKTsKLQotICAgICAgICBpZiAoIW1lc3NhZ2Uub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX1NFU1NJT04pLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgiQSBtZXNzYWdlIHdpdGggYW4gWyVzXSBvcCBjb2RlIHJlcXVpcmVzIGEgWyVzXSBhcmd1bWVudCIsIFRva2Vucy5PUFNfRVZBTCwgVG9rZW5zLkFSR1NfU0VTU0lPTik7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsLmVtcHR5KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICBzZXNzaW9ucy52YWx1ZXMoKS5mb3JFYWNoKHNlc3Npb24gLT4gc2Vzc2lvbi5tYW51YWxLaWxsKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgZXZhbE9wKGZpbmFsIENvbnRleHQgY29udGV4dCkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY29udGV4dC5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBmaW5hbCBTZXNzaW9uIHNlc3Npb24gPSBnZXRTZXNzaW9uKGNvbnRleHQsIG1zZyk7Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgdGhlIHNlc3Npb24gaXMgc3RpbGwgYWNjZXB0aW5nIHJlcXVlc3RzIC0gaWYgbm90IGJsb2NrIGZ1cnRoZXIgcmVxdWVzdHMKLSAgICAgICAgaWYgKCFzZXNzaW9uLmFjY2VwdGluZ1JlcXVlc3RzKCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZXNzaW9uQ2xvc2VkTWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIlNlc3Npb24gJXMgaXMgbm8gbG9uZ2VyIGFjY2VwdGluZyByZXF1ZXN0cyBhcyBpdCBoYXMgYmVlbiBjbG9zZWQiLAotICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLmdldFNlc3Npb25JZCgpKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2Uoc2Vzc2lvbkNsb3NlZE1lc3NhZ2UpLmNyZWF0ZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKHNlc3Npb25DbG9zZWRNZXNzYWdlLCByZXNwb25zZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBpZiB0aGUgc2Vzc2lvbiBpcyBib3VuZCB0byB0aGlzIGNoYW5uZWwsIHRodXMgb25lIGNsaWVudCBwZXIgc2Vzc2lvbgotICAgICAgICBpZiAoIXNlc3Npb24uaXNCb3VuZFRvKGNvbnRleHQuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNlc3Npb25DbG9zZWRNZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiU2Vzc2lvbiAlcyBpcyBub3QgYm91bmQgdG8gdGhlIGNvbm5lY3RpbmcgY2xpZW50IiwKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5nZXRTZXNzaW9uSWQoKSk7Ci0gICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKHNlc3Npb25DbG9zZWRNZXNzYWdlKS5jcmVhdGUoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBPcFByb2Nlc3NvckV4Y2VwdGlvbihzZXNzaW9uQ2xvc2VkTWVzc2FnZSwgcmVzcG9uc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGxhY2UgdGhlIHNlc3Npb24gb24gdGhlIGNoYW5uZWwgY29udGV4dCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGR1cmluZyBzZXJpYWxpemF0aW9uLiAgaW4gdGhpcyB3YXkKLSAgICAgICAgLy8gdGhlIHNlcmlhbGl6YXRpb24gY2FuIG9jY3VyIG9uIHRoZSBzYW1lIHRocmVhZCB1c2VkIHRvIGV4ZWN1dGUgdGhlIGdyZW1saW4gd2l0aGluIHRoZSBzZXNzaW9uLiAgdGhpcwotICAgICAgICAvLyBpcyBpbXBvcnRhbnQgZ2l2ZW4gdGhlIHRocmVhZGxvY2FsIG5hdHVyZSBvZiBHcmFwaCBpbXBsZW1lbnRhdGlvbiB0cmFuc2FjdGlvbnMuCi0gICAgICAgIGNvbnRleHQuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuU0VTU0lPTikuc2V0KHNlc3Npb24pOwotCi0gICAgICAgIGV2YWxPcEludGVybmFsKGNvbnRleHQsIHNlc3Npb246OmdldEdyZW1saW5FeGVjdXRvciwgZ2V0QmluZGluZ01ha2VyKHNlc3Npb24pLmFwcGx5KGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFeGFtaW5lcyB0aGUge0BsaW5rIFJlcXVlc3RNZXNzYWdlfSBhbmQgZXh0cmFjdHMgdGhlIHNlc3Npb24gdG9rZW4uIFRoZSBzZXNzaW9uIGlzIHRoZW4gZWl0aGVyIGZvdW5kIG9yIGEgbmV3Ci0gICAgICogb25lIGlzIGNyZWF0ZWQuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBTZXNzaW9uIGdldFNlc3Npb24oZmluYWwgQ29udGV4dCBjb250ZXh0LCBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNlc3Npb25JZCA9IChTdHJpbmcpIG1zZy5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX1NFU1NJT04pOwotCi0gICAgICAgIGxvZ2dlci5kZWJ1ZygiSW4tc2Vzc2lvbiByZXF1ZXN0IHt9IGZvciBldmFsIGZvciBzZXNzaW9uIHt9IGluIHRocmVhZCB7fSIsCi0gICAgICAgICAgICAgICAgbXNnLmdldFJlcXVlc3RJZCgpLCBzZXNzaW9uSWQsIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLQotICAgICAgICBmaW5hbCBTZXNzaW9uIHNlc3Npb24gPSBzZXNzaW9ucy5jb21wdXRlSWZBYnNlbnQoc2Vzc2lvbklkLCBrIC0+IG5ldyBTZXNzaW9uKGssIGNvbnRleHQsIHNlc3Npb25zKSk7Ci0gICAgICAgIHNlc3Npb24udG91Y2goKTsKLSAgICAgICAgcmV0dXJuIHNlc3Npb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSB1c2VmdWwgbWV0aG9kIGZvciB0aG9zZSBleHRlbmRpbmcgdGhpcyBjbGFzcywgd2hlcmUgdGhlIG1lYW5zIGZvciBiaW5kaW5nIGNvbnN0cnVjdGlvbiBjYW4gYmUgc3VwcGxpZWQKLSAgICAgKiB0byB0aGlzIGNsYXNzLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIHtAbGluayAjZXZhbE9wKENvbnRleHQpfSB0byBjcmVhdGUgdGhlIGZpbmFsIGFyZ3VtZW50IHRvCi0gICAgICoge0BsaW5rIEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yI2V2YWxPcEludGVybmFsKENvbnRleHQsIFN1cHBsaWVyLCBCaW5kaW5nU3VwcGxpZXIpfS4KLSAgICAgKiBJbiB0aGlzIHdheSBhbiBleHRlbmRpbmcgY2xhc3MgY2FuIHVzZSB0aGUgZGVmYXVsdCB7QGxpbmsgQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IuQmluZGluZ1N1cHBsaWVyfQotICAgICAqIHdoaWNoIGNhcnJpZXMgYSBsb3Qgb2YgcmUtdXNhYmxlIGZ1bmN0aW9uYWxpdHkgb3IgcHJvdmlkZSBhIG5ldyBvbmUgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIGFwcHJvYWNoLgotICAgICAqLwotICAgIHByb3RlY3RlZCBGdW5jdGlvbjxDb250ZXh0LCBCaW5kaW5nU3VwcGxpZXI+IGdldEJpbmRpbmdNYWtlcihmaW5hbCBTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQgLT4gKCkgLT4gewotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY29udGV4dC5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBzZXNzaW9uLmdldEJpbmRpbmdzKCk7Ci0KLSAgICAgICAgICAgIC8vIGFsaWFzIGFueSBnbG9iYWwgYmluZGluZ3MgdG8gYSBkaWZmZXJlbnQgdmFyaWFibGUKLSAgICAgICAgICAgIGlmIChtc2cuZ2V0QXJncygpLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0FMSUFTRVMpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gKE1hcDxTdHJpbmcsIFN0cmluZz4pIG1zZy5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0FMSUFTRVMpOwotICAgICAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZyxTdHJpbmc+IGFsaWFzS3YgOiBhbGlhc2VzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNoZWNrIGlmIHRoZSBhbGlhcyByZWZlcnMgdG8gYSBHcmFwaCBpbnN0YW5jZQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IGNvbnRleHQuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0R3JhcGgoYWxpYXNLdi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gZ3JhcGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzLnB1dChhbGlhc0t2LmdldEtleSgpLCBncmFwaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgYWxpYXMgd2Fzbid0IGZvdW5kIGFzIGEgR3JhcGggdGhlbiBwZXJoYXBzIGl0IGlzIGEgVHJhdmVyc2FsU291cmNlIC0gaXQgbmVlZHMgdG8gYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nCi0gICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbFNvdXJjZSB0cyA9IGNvbnRleHQuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0VHJhdmVyc2FsU291cmNlKGFsaWFzS3YuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSB0cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzLnB1dChhbGlhc0t2LmdldEtleSgpLCB0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB2YWxpZGF0aW9uIGlzIGltcG9ydGFudCB0byBjYWxscyB0byBHcmFwaE1hbmFnZXIuY29tbWl0KCkgYW5kIHJvbGxiYWNrKCkgYXMgdGhleSBib3RoCi0gICAgICAgICAgICAgICAgICAgIC8vIGV4cGVjdCB0aGF0IHRoZSBhbGlhc2VzIHN1cHBsaWVkIGFyZSB2YWxpZAotICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXJyb3IgPSBTdHJpbmcuZm9ybWF0KCJDb3VsZCBub3QgYWxpYXMgWyVzXSB0byBbJXNdIGFzIFslc10gbm90IGluIHRoZSBHcmFwaCBvciBUcmF2ZXJzYWxTb3VyY2UgZ2xvYmFsIGJpbmRpbmdzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNLdi5nZXRLZXkoKSwgYWxpYXNLdi5nZXRWYWx1ZSgpLCBhbGlhc0t2LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKGVycm9yLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKGVycm9yKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGFkZCBhbnkgYmluZGluZ3MgdG8gb3ZlcnJpZGUgYW55IG90aGVyIHN1cHBsaWVkCi0gICAgICAgICAgICBPcHRpb25hbC5vZk51bGxhYmxlKChNYXA8U3RyaW5nLCBPYmplY3Q+KSBtc2cuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19CSU5ESU5HUykpLmlmUHJlc2VudChiaW5kaW5nczo6cHV0QWxsKTsKLSAgICAgICAgICAgIHJldHVybiBiaW5kaW5nczsKLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaXRlcmF0ZUJ5dGVjb2RlVHJhdmVyc2FsKGZpbmFsIENvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IGNvbnRleHQuZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKLSAgICAgICAgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MgPSBjb250ZXh0LmdldFNldHRpbmdzKCk7Ci0gICAgICAgIGxvZ2dlci5kZWJ1ZygiVHJhdmVyc2FsIHJlcXVlc3Qge30gZm9yIGluIHRocmVhZCB7fSIsIG1zZy5nZXRSZXF1ZXN0SWQoKSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIC8vIHJpZ2h0IG5vdyB0aGUgVHJhdmVyc2FsT3BQcm9jZXNzb3IgY2FuIHRha2UgYSBkaXJlY3QgR3JhcGhTT04gcmVwcmVzZW50YXRpb24gb2YgQnl0ZWNvZGUgb3IgZGlyZWN0bHkgdGFrZQotICAgICAgICAvLyBkZXNlcmlhbGl6ZWQgQnl0ZWNvZGUgb2JqZWN0LgotICAgICAgICBmaW5hbCBPYmplY3QgYnl0ZWNvZGVPYmogPSBtc2cuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19HUkVNTElOKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBieXRlY29kZU9iaiBpbnN0YW5jZW9mIEJ5dGVjb2RlID8gKEJ5dGVjb2RlKSBieXRlY29kZU9iaiA6Ci0gICAgICAgICAgICAgICAgbWFwcGVyLnJlYWRWYWx1ZShieXRlY29kZU9iai50b1N0cmluZygpLCBCeXRlY29kZS5jbGFzcyk7Ci0KLSAgICAgICAgLy8gZWFybGllciB2YWxpZGF0aW9uIGluIHNlbGVjdGlvbiBvZiB0aGlzIG9wIG1ldGhvZCBzaG91bGQgZnJlZSB1cyB0byBjYXN0IHRoaXMgd2l0aG91dCB3b3JyeQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSAoTWFwPFN0cmluZywgU3RyaW5nPikgbXNnLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19BTElBU0VTKS5nZXQoKTsKLQotICAgICAgICAvLyB0aW1lb3V0IG92ZXJyaWRlIC0gaGFuZGxlIGJvdGggZGVwcmVjYXRlZCBhbmQgbmV3bHkgbmFtZWQgY29uZmlndXJhdGlvbi4gZWFybGllciBsb2dpYyBzaG91bGQgcHJldmVudAotICAgICAgICAvLyBib3RoIGNvbmZpZ3VyYXRpb25zIGZyb20gYmVpbmcgc3VibWl0dGVkIGF0IHRoZSBzYW1lIHRpbWUKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhcmdzID0gbXNnLmdldEFyZ3MoKTsKLSAgICAgICAgZmluYWwgbG9uZyBzZXRvID0gYXJncy5jb250YWluc0tleShUb2tlbnMuQVJHU19FVkFMX1RJTUVPVVQpID8KLSAgICAgICAgICAgICAgICAoKE51bWJlcikgYXJncy5nZXQoVG9rZW5zLkFSR1NfRVZBTF9USU1FT1VUKSkubG9uZ1ZhbHVlKCkgOiBjb250ZXh0LmdldFNldHRpbmdzKCkuZ2V0RXZhbHVhdGlvblRpbWVvdXQoKTsKLQotICAgICAgICBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyID0gY29udGV4dC5nZXRHcmFwaE1hbmFnZXIoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZU5hbWUgPSBhbGlhc2VzLmVudHJ5U2V0KCkuaXRlcmF0b3IoKS5uZXh0KCkuZ2V0VmFsdWUoKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaE1hbmFnZXIuZ2V0VHJhdmVyc2FsU291cmNlKHRyYXZlcnNhbFNvdXJjZU5hbWUpOwotCi0gICAgICAgIGZpbmFsIFNlc3Npb24gc2Vzc2lvbiA9IGdldFNlc3Npb24oY29udGV4dCwgbXNnKTsKLQotICAgICAgICAvLyBoYW5kbGUgYnl0ZWNvZGUgYmFzZWQgZ3JhcGggb3BlcmF0aW9ucyBsaWtlIGNvbW1pdC9yb2xsYmFjayBjb21tYW5kcwotICAgICAgICBpZiAoQnl0ZWNvZGVIZWxwZXIuaXNHcmFwaE9wZXJhdGlvbihieXRlY29kZSkpIHsKLSAgICAgICAgICAgIGhhbmRsZUdyYXBoT3BlcmF0aW9uKGJ5dGVjb2RlLCBnLmdldEdyYXBoKCksIGNvbnRleHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYXZlcnNhbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPFN0cmluZz4gbGFtYmRhTGFuZ3VhZ2UgPSBCeXRlY29kZUhlbHBlci5nZXRMYW1iZGFMYW5ndWFnZShieXRlY29kZSk7Ci0gICAgICAgICAgICBpZiAoIWxhbWJkYUxhbmd1YWdlLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIHRyYXZlcnNhbCA9IEphdmFUcmFuc2xhdG9yLm9mKGcpLnRyYW5zbGF0ZShieXRlY29kZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHJhdmVyc2FsID0gc2Vzc2lvbi5nZXRHcmVtbGluRXhlY3V0b3IoKS5ldmFsKGJ5dGVjb2RlLCBFTVBUWV9CSU5ESU5HUywgbGFtYmRhTGFuZ3VhZ2UuZ2V0KCksIHRyYXZlcnNhbFNvdXJjZU5hbWUpOwotICAgICAgICB9IGNhdGNoIChTY3JpcHRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVHJhdmVyc2FsIGNvbnRhaW5zIGEgbGFtYmRhIHRoYXQgY2Fubm90IGJlIGNvbXBpbGVkIiwgZXgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKCJUcmF2ZXJzYWwgY29udGFpbnMgYSBsYW1iZGEgdGhhdCBjYW5ub3QgYmUgY29tcGlsZWQiLAotICAgICAgICAgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShleC5nZXRNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbihleCkuY3JlYXRlKCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ291bGQgbm90IGRlc2VyaWFsaXplIHRoZSBUcmF2ZXJzYWwgaW5zdGFuY2UiLCBleCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24oIkNvdWxkIG5vdCBkZXNlcmlhbGl6ZSB0aGUgVHJhdmVyc2FsIGluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1NFUklBTElaQVRJT04pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXguZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oZXgpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzZXR0aW5ncy5lbmFibGVBdWRpdExvZykgewotICAgICAgICAgICAgQXV0aGVudGljYXRlZFVzZXIgdXNlciA9IGNvbnRleHQuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuQVVUSEVOVElDQVRFRF9VU0VSKS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChudWxsID09IHVzZXIpIHsgICAgLy8gVGhpcyBpcyBleHBlY3RlZCB3aGVuIHVzaW5nIHRoZSBBbGxvd0FsbEF1dGhlbnRpY2F0b3IKLSAgICAgICAgICAgICAgICB1c2VyID0gQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgYWRkcmVzcyA9IGNvbnRleHQuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpLnJlbW90ZUFkZHJlc3MoKS50b1N0cmluZygpOwotICAgICAgICAgICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgiLyIpICYmIGFkZHJlc3MubGVuZ3RoKCkgPiAxKSBhZGRyZXNzID0gYWRkcmVzcy5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICBhdWRpdExvZ2dlci5pbmZvKCJVc2VyIHt9IHdpdGggYWRkcmVzcyB7fSByZXF1ZXN0ZWQ6IHt9IiwgdXNlci5nZXROYW1lKCksIGFkZHJlc3MsIGJ5dGVjb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRvZG86IHRpbWVyIG1hdHRlcj8/PwotICAgICAgICAvLyBmaW5hbCBUaW1lci5Db250ZXh0IHRpbWVyQ29udGV4dCA9IHRyYXZlcnNhbE9wVGltZXIudGltZSgpOwotCi0gICAgICAgIGZpbmFsIEZ1dHVyZVRhc2s8Vm9pZD4gZXZhbEZ1dHVyZSA9IG5ldyBGdXR1cmVUYXNrPD4oKCkgLT4gewotICAgICAgICAgICAgY29udGV4dC5zZXRTdGFydGVkUmVzcG9uc2UoKTsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gZy5nZXRHcmFwaCgpOwotCi0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGJlZm9yZVByb2Nlc3NpbmcoZ3JhcGgsIGNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY29tcGlsZSB0aGUgdHJhdmVyc2FsIC0gd2l0aG91dCBpdCBnZXRFbmRTdGVwKCkgaGFzIG5vdGhpbmcgaW4gaXQKLSAgICAgICAgICAgICAgICAgICAgdHJhdmVyc2FsLmFwcGx5U3RyYXRlZ2llcygpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVJdGVyYXRvcihjb250ZXh0LCBuZXcgVHJhdmVyc2VySXRlcmF0b3IodHJhdmVyc2FsKSwgZ3JhcGgpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICBUaHJvd2FibGUgdCA9IGV4OwotICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBVbmRlY2xhcmVkVGhyb3dhYmxlRXhjZXB0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q2F1c2UoKTsKLQotICAgICAgICAgICAgICAgICAgICBDbG9zZWFibGVJdGVyYXRvci5jbG9zZUl0ZXJhdG9yKHRyYXZlcnNhbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW55IGV4Y2VwdGlvbiBpbiB0aGUgY2hhaW4gaXMgVGVtcG9yYXJ5RXhjZXB0aW9uIG9yIEZhaWx1cmUgdGhlbiB3ZSBzaG91bGQgcmVzcG9uZCB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyByaWdodCBlcnJvciBjb2RlIHNvIHRoYXQgdGhlIGNsaWVudCBrbm93cyB0byByZXRyeQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBPcHRpb25hbDxUaHJvd2FibGU+IHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbiA9IGRldGVybWluZUlmU3BlY2lhbEV4Y2VwdGlvbihleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24uaXNQcmVzZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBzcGVjaWFsID0gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgc3BlY2lhbFJlc3BvbnNlTXNnID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2Uoc3BlY2lhbC5nZXRNZXNzYWdlKCkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oc3BlY2lhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIFRlbXBvcmFyeUV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxSZXNwb25zZU1zZy5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVEVNUE9SQVJZKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIEZhaWx1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGYWlsdXJlIGZhaWx1cmUgPSAoRmFpbHVyZSkgc3BlY2lhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsUmVzcG9uc2VNc2cuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0ZBSUxfU1RFUCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGUoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRkFJTF9TVEVQX01FU1NBR0UsIGZhaWx1cmUuZm9ybWF0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKHNwZWNpYWxSZXNwb25zZU1zZy5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIEludGVycnVwdGVkRXhjZXB0aW9uIHx8IHQgaW5zdGFuY2VvZiBUcmF2ZXJzYWxJbnRlcnJ1cHRlZEV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIkEgdGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdHJhdmVyc2FsIGV2YWx1YXRpb24gb2YgWyVzXSAtIGNvbnNpZGVyIGluY3JlYXNpbmcgdGhlIGxpbWl0IGdpdmVuIHRvIGV2YWx1YXRpb25UaW1lb3V0IiwgbXNnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbihleCkuY3JlYXRlKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiRXhjZXB0aW9uIHByb2Nlc3NpbmcgYSBUcmF2ZXJzYWwgb24gaXRlcmF0aW9uIGZvciByZXF1ZXN0IFslc10uIiwgbXNnLmdldFJlcXVlc3RJZCgpKSwgZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXguZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKGV4KS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb25FcnJvcihncmFwaCwgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgICAgICBvbkVycm9yKGdyYXBoLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAvLyBpZiBhbnkgZXhjZXB0aW9uIGluIHRoZSBjaGFpbiBpcyBUZW1wb3JhcnlFeGNlcHRpb24gb3IgRmFpbHVyZSB0aGVuIHdlIHNob3VsZCByZXNwb25kIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgLy8gcmlnaHQgZXJyb3IgY29kZSBzbyB0aGF0IHRoZSBjbGllbnQga25vd3MgdG8gcmV0cnkKLSAgICAgICAgICAgICAgICBmaW5hbCBPcHRpb25hbDxUaHJvd2FibGU+IHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbiA9IGRldGVybWluZUlmU3BlY2lhbEV4Y2VwdGlvbih0KTsKLSAgICAgICAgICAgICAgICBpZiAocG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBzcGVjaWFsID0gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlciBzcGVjaWFsUmVzcG9uc2VNc2cgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlKHNwZWNpYWwuZ2V0TWVzc2FnZSgpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oc3BlY2lhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsIGluc3RhbmNlb2YgVGVtcG9yYXJ5RXhjZXB0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsUmVzcG9uc2VNc2cuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RFTVBPUkFSWSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIEZhaWx1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZhaWx1cmUgZmFpbHVyZSA9IChGYWlsdXJlKSBzcGVjaWFsOwotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbFJlc3BvbnNlTXNnLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9GQUlMX1NURVApLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGUoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRkFJTF9TVEVQX01FU1NBR0UsIGZhaWx1cmUuZm9ybWF0KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVBbmRGbHVzaChzcGVjaWFsUmVzcG9uc2VNc2cuY3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIkV4Y2VwdGlvbiBwcm9jZXNzaW5nIGEgVHJhdmVyc2FsIG9uIHJlcXVlc3QgWyVzXS4iLCBtc2cuZ2V0UmVxdWVzdElkKCkpLCB0KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSh0LmdldE1lc3NhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHQpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBFcnJvcikgewotICAgICAgICAgICAgICAgICAgICAvL1JlLXRocm93IGFueSBlcnJvcnMgdG8gYmUgaGFuZGxlZCBieSBhbmQgc2V0IGFzIHRoZSByZXN1bHQgb2YgZXZhbEZ1dHVyZQotICAgICAgICAgICAgICAgICAgICB0aHJvdyB0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgLy8gdG9kbzogdGltZXIgbWF0dGVyPz8/Ci0gICAgICAgICAgICAgICAgLy90aW1lckNvbnRleHQuc3RvcCgpOwotCi0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IHRoaXMgcXVlcnkgbWF5IGhhdmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0aW1lb3V0RnV0dXJlIHdhcyBjcmVhdGVkLAotICAgICAgICAgICAgICAgIC8vIHRob3VnaCB0aGlzIGlzIHZlcnkgdW5saWtlbHkuIFRoaXMgaXMgaGFuZGxlZCBpbiB0aGUgc2V0dG9yLCBpZiB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZ3JhYmJlZC4KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBwYXNzZWQgdGhpcyBwb2ludCBhbmQgdGhlIHNldHRlciBoYXNuJ3QgYmVlbiBjYWxsZWQsIGl0IHdpbGwgY2FuY2VsIHRoZSB0aW1lb3V0RnV0dXJlIGluc2lkZQotICAgICAgICAgICAgICAgIC8vIHRoZSBzZXR0ZXIgdG8gY29tcGVuc2F0ZS4KLSAgICAgICAgICAgICAgICBmaW5hbCBTY2hlZHVsZWRGdXR1cmU8Pz4gdGltZW91dEZ1dHVyZSA9IGNvbnRleHQuZ2V0VGltZW91dEV4ZWN1dG9yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gdGltZW91dEZ1dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgdGltZW91dEZ1dHVyZS5jYW5jZWwodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLQotICAgICAgICBzdWJtaXRUb0dyZW1saW5FeGVjdXRvcihjb250ZXh0LCBzZXRvLCBzZXNzaW9uLCBldmFsRnV0dXJlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHN1Ym1pdFRvR3JlbWxpbkV4ZWN1dG9yKGZpbmFsIENvbnRleHQgY29udGV4dCwgZmluYWwgbG9uZyBzZXRvLCBmaW5hbCBTZXNzaW9uIHNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGdXR1cmVUYXNrPFZvaWQ+IGV2YWxGdXR1cmUpIHsKLSAgICAgICAgZmluYWwgRnV0dXJlPD8+IGV4ZWN1dGlvbkZ1dHVyZSA9IHNlc3Npb24uZ2V0R3JlbWxpbkV4ZWN1dG9yKCkuZ2V0RXhlY3V0b3JTZXJ2aWNlKCkuc3VibWl0KGV2YWxGdXR1cmUpOwotICAgICAgICBpZiAoc2V0byA+IDApIHsKLSAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgdGltZW91dCBpbiB0aGUgdGhyZWFkIHBvb2wgZm9yIGZ1dHVyZSBleGVjdXRpb24KLSAgICAgICAgICAgIGNvbnRleHQuc2V0VGltZW91dEV4ZWN1dG9yKGNvbnRleHQuZ2V0U2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKCkuc2NoZWR1bGUoKCkgLT4gewotICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkZ1dHVyZS5jYW5jZWwodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmdldFN0YXJ0ZWRSZXNwb25zZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2VuZFRpbWVvdXRSZXNwb25zZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIHNldG8sIFRpbWVVbml0Lk1JTExJU0VDT05EUykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYge0BsaW5rIEJ5dGVjb2RlfSBpcyBkZXRlY3RlZCB0byBjb250YWluIGEgImdyYXBoIG9wZXJhdGlvbiIgdGhlbiBpdCBnZXRzIHByb2Nlc3NlZCBieSB0aGlzIG1ldGhvZC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVHcmFwaE9wZXJhdGlvbihmaW5hbCBCeXRlY29kZSBieXRlY29kZSwgZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbnRleHQgY29udGV4dCkgewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBjb250ZXh0LmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGZpbmFsIFNlc3Npb24gc2Vzc2lvbiA9IGdldFNlc3Npb24oY29udGV4dCwgbXNnKTsKLSAgICAgICAgaWYgKGdyYXBoLmZlYXR1cmVzKCkuZ3JhcGgoKS5zdXBwb3J0c1RyYW5zYWN0aW9ucygpKSB7Ci0gICAgICAgICAgICBpZiAoVFhfQ09NTUlULmVxdWFscyhieXRlY29kZSkgfHwgVFhfUk9MTEJBQ0suZXF1YWxzKGJ5dGVjb2RlKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gY29tbWl0ID0gVFhfQ09NTUlULmVxdWFscyhieXRlY29kZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBubyB0aW1lb3V0IG9uIGEgY29tbWl0L3JvbGxiYWNrCi0gICAgICAgICAgICAgICAgc3VibWl0VG9HcmVtbGluRXhlY3V0b3IoY29udGV4dCwgMCwgc2Vzc2lvbiwgbmV3IEZ1dHVyZVRhc2s8PigoKSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JhcGgudHgoKS5pc09wZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21taXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaC50eCgpLnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyaXRlIGJhY2sgYSBuby1vcCBmb3Igc3VjY2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gZ2VuZXJhdGVTdGF0dXNBdHRyaWJ1dGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpLCBtc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZS5OT19DT05URU5ULCBDb2xsZWN0aW9ucy5lbXB0eUl0ZXJhdG9yKCksIGNvbnRleHQuZ2V0U2V0dGluZ3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLk5PX0NPTlRFTlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbG9zZVNlc3Npb25Qb3N0R3JhcGhPcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgZm9yY2UgdG8gdHJ1ZSBwcmV2ZW50cyBkZWFkbG9jayB3aGVuIHRoaXMgdGhyZWFkIGF0dGVtcHRzIHRvIGRlc3Ryb3kgdGhlIHNlc3Npb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgc2FmZSBzaW5jZSBlaXRoZXIgYSBjb21taXQgb3Igcm9sbGJhY2sganVzdCBmaW5pc2hlZCBzbyB0aGUgdHJhbnNhY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGRuJ3QgYmUgb3Blbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLm1hbnVhbEtpbGwodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZ3JhcGgsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgYW55IGV4Y2VwdGlvbiBpbiB0aGUgY2hhaW4gaXMgVGVtcG9yYXJ5RXhjZXB0aW9uIG9yIEZhaWx1cmUgdGhlbiB3ZSBzaG91bGQgcmVzcG9uZCB3aXRoIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgZXJyb3IgY29kZSBzbyB0aGF0IHRoZSBjbGllbnQga25vd3MgdG8gcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPFRocm93YWJsZT4gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uID0gZGV0ZXJtaW5lSWZTcGVjaWFsRXhjZXB0aW9uKHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbi5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBzcGVjaWFsID0gcG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmdldCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZS5CdWlsZGVyIHNwZWNpYWxSZXNwb25zZU1zZyA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZShzcGVjaWFsLmdldE1lc3NhZ2UoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oc3BlY2lhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWNpYWwgaW5zdGFuY2VvZiBUZW1wb3JhcnlFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbFJlc3BvbnNlTXNnLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9URU1QT1JBUlkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIEZhaWx1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRmFpbHVyZSBmYWlsdXJlID0gKEZhaWx1cmUpIHNwZWNpYWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxSZXNwb25zZU1zZy5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRkFJTF9TVEVQKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNBdHRyaWJ1dGUoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRkFJTF9TVEVQX01FU1NBR0UsIGZhaWx1cmUuZm9ybWF0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goc3BlY2lhbFJlc3BvbnNlTXNnLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiRXhjZXB0aW9uIHByb2Nlc3NpbmcgYSBUcmF2ZXJzYWwgb24gcmVxdWVzdCBbJXNdIHRvICVzIHRoZSB0cmFuc2FjdGlvbi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmdldFJlcXVlc3RJZCgpLCBjb21taXQgPyAiY29tbWl0IiA6ICJyb2xsYmFjayIpLCB0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UodC5nZXRNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHQpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNsb3NlU2Vzc2lvblBvc3RHcmFwaE9wICYmIHNob3VsZE1hbmFnZVRyYW5zYWN0aW9uc0ZvclJlcXVlc3QoY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXN0cm95IHRoZSBzZXNzaW9uIGFmdGVyIGEgc3VjY2Vzc2Z1bCByb2xsYmFjayBkdWUgdG8gZXJyb3IuIFBsYWNlZCBoZXJlIHJhdGhlciB0aGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBmaW5hbGx5IGJsb2NrIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gZW5kIHRoZSBzZXNzaW9uIGlmIG5vIGNvbW1pdC9yb2xsYmFjayBzdWNjZWVkZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi5tYW51YWxLaWxsKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9SZS10aHJvdyBhbnkgZXJyb3JzIHRvIGJlIGhhbmRsZWQgYnkgYW5kIHNldCBhcyB0aGUgcmVzdWx0IHRoZSBGdXR1cmVUYXNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KAotICAgICAgICAgICAgICAgICAgICAgICAgIkJ5dGVjb2RlIGluIHJlcXVlc3QgaXMgbm90IGEgcmVjb2duaXplZCBncmFwaCBvcGVyYXRpb246ICVzIiwgYnl0ZWNvZGUudG9TdHJpbmcoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyb3cgR3JhcGguRXhjZXB0aW9ucy50cmFuc2FjdGlvbnNOb3RTdXBwb3J0ZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGJlZm9yZVByb2Nlc3NpbmcoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbnRleHQgY3R4KSB7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QgPSBzaG91bGRNYW5hZ2VUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0KGN0eCk7Ci0gICAgICAgIGlmIChtYW5hZ2VkVHJhbnNhY3Rpb25zRm9yUmVxdWVzdCAmJiBncmFwaC5mZWF0dXJlcygpLmdyYXBoKCkuc3VwcG9ydHNUcmFuc2FjdGlvbnMoKSAmJiBncmFwaC50eCgpLmlzT3BlbigpKSBncmFwaC50eCgpLnJvbGxiYWNrKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgb25FcnJvcihmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgQ29udGV4dCBjdHgpIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBtYW5hZ2VkVHJhbnNhY3Rpb25zRm9yUmVxdWVzdCA9IHNob3VsZE1hbmFnZVRyYW5zYWN0aW9uc0ZvclJlcXVlc3QoY3R4KTsKLSAgICAgICAgaWYgKG1hbmFnZWRUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0ICYmIGdyYXBoLmZlYXR1cmVzKCkuZ3JhcGgoKS5zdXBwb3J0c1RyYW5zYWN0aW9ucygpICYmIGdyYXBoLnR4KCkuaXNPcGVuKCkpIGdyYXBoLnR4KCkucm9sbGJhY2soKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBvblRyYXZlcnNhbFN1Y2Nlc3MoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbnRleHQgY3R4KSB7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbWFuYWdlZFRyYW5zYWN0aW9uc0ZvclJlcXVlc3QgPSBzaG91bGRNYW5hZ2VUcmFuc2FjdGlvbnNGb3JSZXF1ZXN0KGN0eCk7Ci0gICAgICAgIGlmIChtYW5hZ2VkVHJhbnNhY3Rpb25zRm9yUmVxdWVzdCAmJiBncmFwaC5mZWF0dXJlcygpLmdyYXBoKCkuc3VwcG9ydHNUcmFuc2FjdGlvbnMoKSAmJiBncmFwaC50eCgpLmlzT3BlbigpKSBncmFwaC50eCgpLmNvbW1pdCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUl0ZXJhdG9yKGZpbmFsIENvbnRleHQgY29udGV4dCwgZmluYWwgSXRlcmF0b3IgaXR0eSwgZmluYWwgR3JhcGggZ3JhcGgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBuZXR0eUNvbnRleHQgPSBjb250ZXh0LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBjb250ZXh0LmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzID0gY29udGV4dC5nZXRTZXR0aW5ncygpOwotICAgICAgICBmaW5hbCBNZXNzYWdlU2VyaWFsaXplciBzZXJpYWxpemVyID0gbmV0dHlDb250ZXh0LmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LlNFUklBTElaRVIpLmdldCgpOwotICAgICAgICBmaW5hbCBib29sZWFuIHVzZUJpbmFyeSA9IG5ldHR5Q29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5VU0VfQklOQVJZKS5nZXQoKTsKLQotICAgICAgICAvLyB1c2VkIHRvIGxpbWl0IHdhcm5pbmdzIGZvciB3aGVuIG5ldHR5IGZpbGxzIHRoZSBidWZmZXIgYW5kIGhpdHMgdGhlIGhpZ2ggd2F0ZXJtYXJrIC0gcHJldmVudHMKLSAgICAgICAgLy8gb3Zlci1sb2dnaW5nIG9mIHRoZSBzYW1lIG1lc3NhZ2UuCi0gICAgICAgIGxvbmcgbGFzdFdhcm5pbmdUaW1lID0gMDsKLSAgICAgICAgaW50IHdhcm5Db3VudGVyID0gMDsKLQotICAgICAgICAvLyB3ZSBoYXZlIGFuIGVtcHR5IGl0ZXJhdG9yIC0gaGFwcGVucyBvbiBzdHVmZiBsaWtlOiBnLlYoKS5pdGVyYXRlKCkKLSAgICAgICAgaWYgKCFpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gZ2VuZXJhdGVTdGF0dXNBdHRyaWJ1dGVzKG5ldHR5Q29udGV4dCwgbXNnLCBSZXNwb25zZVN0YXR1c0NvZGUuTk9fQ09OVEVOVCwgaXR0eSwgc2V0dGluZ3MpOwotCi0gICAgICAgICAgICAvLyBhcyB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gaXRlcmF0ZSBpZiB3ZSBhcmUgdHJhbnNhY3Rpb24gbWFuYWdlZCB0aGVuIHdlIHNob3VsZCBleGVjdXRlIGEKLSAgICAgICAgICAgIC8vIGNvbW1pdCBoZXJlIGJlZm9yZSB3ZSBzZW5kIGJhY2sgYSBOT19DT05URU5UIHdoaWNoIGltcGxpZXMgc3VjY2VzcwotICAgICAgICAgICAgb25UcmF2ZXJzYWxTdWNjZXNzKGdyYXBoLCBjb250ZXh0KTsKLSAgICAgICAgICAgIGNvbnRleHQud3JpdGVBbmRGbHVzaChSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuTk9fQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBiYXRjaCBzaXplIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSByZXF1ZXN0Ci0gICAgICAgIGZpbmFsIGludCByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgPSAoSW50ZWdlcikgbXNnLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19CQVRDSF9TSVpFKQotICAgICAgICAgICAgICAgIC5vckVsc2Uoc2V0dGluZ3MucmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKTsKLSAgICAgICAgTGlzdDxPYmplY3Q+IGFnZ3JlZ2F0ZSA9IG5ldyBBcnJheUxpc3Q8PihyZXN1bHRJdGVyYXRpb25CYXRjaFNpemUpOwotCi0gICAgICAgIC8vIHVzZSBhbiBleHRlcm5hbCBjb250cm9sIHRvIG1hbmFnZSB0aGUgbG9vcCBhcyBvcHBvc2VkIHRvIGp1c3QgY2hlY2tpbmcgaGFzTmV4dCgpIGluIHRoZSB3aGlsZS4gIHRoaXMKLSAgICAgICAgLy8gcHJldmVudCBzaXR1YXRpb25zIHdoZXJlIGF1dG8gdHJhbnNhY3Rpb25zIGNyZWF0ZSBhIG5ldyB0cmFuc2FjdGlvbiBhZnRlciBjYWxscyB0byBjb21taXQoKSB3aXRoaW5nCi0gICAgICAgIC8vIHRoZSBsb29wIG9uIGNhbGxzIHRvIGhhc05leHQoKS4KLSAgICAgICAgYm9vbGVhbiBoYXNNb3JlID0gaXR0eS5oYXNOZXh0KCk7Ci0KLSAgICAgICAgd2hpbGUgKGhhc01vcmUpIHsKLSAgICAgICAgICAgIGlmIChUaHJlYWQuaW50ZXJydXB0ZWQoKSkgdGhyb3cgbmV3IEludGVycnVwdGVkRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIC8vIGNoZWNrIGlmIGFuIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGZvcmNlIGZsdXNoIHRoZSBhZ2dyZWdhdGVkIHJlc3VsdHMgYmVmb3JlIHRoZSBpdGVyYXRpb24gYmF0Y2gKLSAgICAgICAgICAgIC8vIHNpemUgaXMgcmVhY2hlZC4KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZm9yY2VGbHVzaCA9IGlzRm9yY2VGbHVzaGVkKG5ldHR5Q29udGV4dCwgbXNnLCBpdHR5KTsKLQotICAgICAgICAgICAgLy8gaGF2ZSB0byBjaGVjayB0aGUgYWdncmVnYXRlIHNpemUgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBjaGFubmVsIGlzIG5vdCB3cml0ZWFibGUgKGJlbG93KQotICAgICAgICAgICAgLy8gc28gaXRlcmF0aW5nIG5leHQoKSBpZiB0aGUgbWVzc2FnZSBpcyBub3Qgd3JpdHRlbiBhbmQgZmx1c2hlZCB3b3VsZCBidW1wIHRoZSBhZ2dyZWdhdGUgc2l6ZSBiZXlvbmQKLSAgICAgICAgICAgIC8vIHRoZSBleHBlY3RlZCByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUuICBUb3RhbCBzZXJpYWxpemF0aW9uIHRpbWUgZm9yIHRoZSByZXNwb25zZSByZW1haW5zIGluCi0gICAgICAgICAgICAvLyBlZmZlY3Qgc28gaWYgdGhlIGNsaWVudCBpcyAic2xvdyIgaXQgbWF5IHNpbXBseSB0aW1lb3V0LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIHRoZXJlIGlzIGEgbmVlZCB0byBjaGVjayBoYXNOZXh0KCkgb24gdGhlIGl0ZXJhdG9yIGJlY2F1c2UgaWYgdGhlIGNoYW5uZWwgaXMgbm90IHdyaXRlYWJsZSB0aGUKLSAgICAgICAgICAgIC8vIHByZXZpb3VzIHBhc3MgdGhyb3VnaCB0aGUgd2hpbGUgbG9vcCB3aWxsIGhhdmUgbmV4dCgpJ2QgdGhlIGl0ZXJhdG9yIGFuZCBpZiBpdCBpcyAiZG9uZSIgdGhlbiBhCi0gICAgICAgICAgICAvLyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uIHdpbGwgcmFpc2UgaXRzIGhlYWQuIGFsc28gbmVlZCBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QKLSAgICAgICAgICAgIC8vIHJlcXVpcmUgYSBmb3JjZWQgZmx1c2ggd2hpY2ggY2FuIGJlIGZvcmNlZCBieSBzdWItY2xhc3Nlcy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyB0aGlzIGNvdWxkIGJlIHBsYWNlZCBpbnNpZGUgdGhlIGlzV3JpdGVhYmxlKCkgcG9ydGlvbiBvZiB0aGUgaWYtdGhlbiBiZWxvdyBidXQgaXQgc2VlbXMgYmV0dGVyIHRvCi0gICAgICAgICAgICAvLyBhbGxvdyBpdGVyYXRpb24gdG8gY29udGludWUgaW50byBhIGJhdGNoIGlmIHRoYXQgaXMgcG9zc2libGUgcmF0aGVyIHRoYW4ganVzdCBkb2luZyBub3RoaW5nIGF0IGFsbAotICAgICAgICAgICAgLy8gd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNsaWVudCB0byBjYXRjaCB1cAotICAgICAgICAgICAgaWYgKGFnZ3JlZ2F0ZS5zaXplKCkgPCByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgJiYgaXR0eS5oYXNOZXh0KCkgJiYgIWZvcmNlRmx1c2gpIGFnZ3JlZ2F0ZS5hZGQoaXR0eS5uZXh0KCkpOwotCi0gICAgICAgICAgICAvLyBEb24ndCBrZWVwIGV4ZWN1dG9yIGJ1c3kgaWYgY2xpZW50IGhhcyBhbHJlYWR5IGdpdmVuIHVwOyB0aGVyZSBpcyBubyB3YXkgdG8gY2F0Y2ggdXAgaWYgdGhlIGNoYW5uZWwgaXMKLSAgICAgICAgICAgIC8vIG5vdCBhY3RpdmUsIGFuZCBoZW5jZSB3ZSBzaG91bGQgYnJlYWsgdGhlIGxvb3AuCi0gICAgICAgICAgICBpZiAoIW5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNBY3RpdmUoKSkgewotICAgICAgICAgICAgICAgIG9uRXJyb3IoZ3JhcGgsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzZW5kIGJhY2sgYSBwYWdlIG9mIHJlc3VsdHMgaWYgYmF0Y2ggc2l6ZSBpcyBtZXQgb3IgaWYgaXQncyB0aGUgZW5kIG9mIHRoZSByZXN1bHRzIGJlaW5nIGl0ZXJhdGVkLgotICAgICAgICAgICAgLy8gYWxzbyBjaGVjayB3cml0ZWFiaWxpdHkgb2YgdGhlIGNoYW5uZWwgdG8gcHJldmVudCBPT01FIGZvciBzbG93IGNsaWVudHMuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gY2xpZW50cyBtaWdodCBkZWNpZGUgdG8gY2xvc2UgdGhlIE5ldHR5IGNoYW5uZWwgdG8gdGhlIHNlcnZlciB3aXRoIGEgQ2xvc2VXZWJzb2NrZXRGcmFtZSBhZnRlciBlcnJvcnMKLSAgICAgICAgICAgIC8vIGxpa2UgQ29ycnVwdGVkRnJhbWVFeGNlcHRpb24uIE9uIHRoZSBzZXJ2ZXIsIGFsdGhvdWdoIHRoZSBjaGFubmVsIGdldHMgY2xvc2VkLCB0aGVyZSBtaWdodCBiZSBzb21lCi0gICAgICAgICAgICAvLyBleGVjdXRvciB0aHJlYWRzIHdhaXRpbmcgZm9yIHdhdGVybWFyayB0byBjbGVhciB3aGljaCB3aWxsIG5vdCBjbGVhciBpbiB0aGVzZSBjYXNlcyBzaW5jZSBjbGllbnQgaGFzCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGdpdmVuIHVwIG9uIHRoZXNlIHJlcXVlc3RzLiBUaGlzIGxlYWRzIHRvIHRoZXNlIGV4ZWN1dG9ycyB3YWl0aW5nIGZvciB0aGUgY2xpZW50IHRvIGNvbnN1bWUKLSAgICAgICAgICAgIC8vIHJlc3VsdHMgdGlsbCB0aGUgdGltZW91dC4gY2hlY2tpbmcgZm9yIGlzQWN0aXZlKCkgc2hvdWxkIGhlbHAgcHJldmVudCB0aGF0LgotICAgICAgICAgICAgaWYgKG5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNBY3RpdmUoKSAmJiBuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmlzV3JpdGFibGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChmb3JjZUZsdXNoIHx8IGFnZ3JlZ2F0ZS5zaXplKCkgPT0gcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplIHx8ICFpdHR5Lmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZVN0YXR1c0NvZGUgY29kZSA9IGl0dHkuaGFzTmV4dCgpID8gUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCA6IFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIHNlcmlhbGl6ZSBoZXJlIGJlY2F1c2UgaW4gc2Vzc2lvbmxlc3MgcmVxdWVzdHMgdGhlIHNlcmlhbGl6YXRpb24gbXVzdCBvY2N1ciBpbiB0aGUgc2FtZQotICAgICAgICAgICAgICAgICAgICAvLyB0aHJlYWQgYXMgdGhlIGV2YWwuICBhcyBldmFsIG9jY3VycyBpbiB0aGUgR3JlbWxpbkV4ZWN1dG9yIHRoZXJlJ3Mgbm8gd2F5IHRvIGdldCBiYWNrIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyB0aHJlYWQgdGhhdCBwcm9jZXNzZWQgdGhlIGV2YWwgb2YgdGhlIHNjcmlwdCBzbywgd2UgaGF2ZSB0byBwdXNoIHNlcmlhbGl6YXRpb24gZG93biBpbnRvIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtZXRhZGF0YSA9IGdlbmVyYXRlUmVzdWx0TWV0YURhdGEobmV0dHlDb250ZXh0LCBtc2csIGNvZGUsIGl0dHksIHNldHRpbmdzKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBzdGF0dXNBdHRyYiA9IGdlbmVyYXRlU3RhdHVzQXR0cmlidXRlcyhuZXR0eUNvbnRleHQsIG1zZywgY29kZSwgaXR0eSwgc2V0dGluZ3MpOwotICAgICAgICAgICAgICAgICAgICBGcmFtZSBmcmFtZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IG1ha2VGcmFtZShjb250ZXh0LCBtc2csIHNlcmlhbGl6ZXIsIHVzZUJpbmFyeSwgYWdncmVnYXRlLCBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSwgc3RhdHVzQXR0cmIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgZnJhbWUgbWF5IHVzZSBhIEJ5dGVidWYgd2hpY2ggaXMgYSBjb3VudGFibGUgcmVsZWFzZSAtIGlmIGl0IGRvZXMgbm90IGdldCB3cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb3duc3RyZWFtIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSAhPSBudWxsKSBmcmFtZS50cnlSZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyBoYW5kbGVkIGluIG1ha2VGcmFtZSgpIC0gc2VyaWFsaXphdGlvbiBlcnJvciBnZXRzIHdyaXR0ZW4gYmFjayB0byBkcml2ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoYXQgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZ3JhcGgsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyB0cmFjayB3aGV0aGVyIHRoZXJlIGlzIGFueXRoaW5nIGxlZnQgaW4gdGhlIGl0ZXJhdG9yIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgYWNjZXNzZWQgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvdWxkIGJlIGNsb3NlZCAtIGluIHRoYXQgY2FzZSBhIGNhbGwgdG8gaGFzTmV4dCgpIGNvdWxkIG9wZW4gYSBuZXcgdHJhbnNhY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdW5pbnRlbnRpb25hbGx5Ci0gICAgICAgICAgICAgICAgICAgIGhhc01vcmUgPSBpdHR5Lmhhc05leHQoKTsKLQotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBuZWVkIHRvIHJlc2V0IHRoZSBhZ2dyZWdhdGlvbiBsaXN0IGlmIHRoZXJlJ3MgbW9yZSBzdHVmZiB0byB3cml0ZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc01vcmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdncmVnYXRlID0gbmV3IEFycmF5TGlzdDw+KHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gYW5kIHNlcmlhbGl6YXRpb24gYXJlIGJvdGggY29tcGxldGUgd2hpY2ggbWVhbnMgdGhpcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHkuIG5vdGUgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9ycyBpbnRlcm5hbCB0byBzY3JpcHQgZXZhbCBvciB0aW1lb3V0IHdpbGwgcm9sbGJhY2sgZ2l2ZW4gR3JlbWxpblNlcnZlcidzIGdsb2JhbCBjb25maWd1cmF0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbCBlcnJvcnMgd2lsbCBnZXQgcm9sbGVkIGJhY2sgYmVsb3cgYmVjYXVzZSB0aGUgZXhjZXB0aW9ucyBhcmVuJ3QgdGhyb3duIGluIHRob3NlIGNhc2VzIHRvIGJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2F1Z2h0IGJ5IHRoZSBHcmVtbGluRXhlY3V0b3IgZm9yIGdsb2JhbCByb2xsYmFjayBsb2dpYy4gdGhpcyBvbmx5IG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBtb3JlIGl0ZW1zIHRvIGl0ZXJhdGUgYW5kIHNlcmlhbGl6YXRpb24gaXMgY29tcGxldGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblRyYXZlcnNhbFN1Y2Nlc3MoZ3JhcGgsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgZnJhbWUgbWF5IHVzZSBhIEJ5dGVidWYgd2hpY2ggaXMgYSBjb3VudGFibGUgcmVsZWFzZSAtIGlmIGl0IGRvZXMgbm90IGdldCB3cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb3duc3RyZWFtIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSAhPSBudWxsKSBmcmFtZS50cnlSZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTW9yZSkgaXRlcmF0ZUNvbXBsZXRlKG5ldHR5Q29udGV4dCwgbXNnLCBpdHR5KTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmx1c2ggaXMgY2FsbGVkIGFmdGVyIHRoZSBjb21taXQgaGFzIHBvdGVudGlhbGx5IG9jY3VycmVkLiAgaW4gdGhpcyB3YXksIGlmIGEgY29tbWl0IHdhcwotICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlZCB0aGVuIGl0IHdpbGwgYmUgMTAwJSBjb21wbGV0ZSBiZWZvcmUgdGhlIGNsaWVudCByZWNlaXZlcyBpdC4gdGhlICJmcmFtZSIgYXQgdGhpcyBwb2ludAotICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgaGF2ZSBjb21wbGV0ZWx5IGRldGFjaGVkIG9iamVjdHMgZnJvbSB0aGUgdHJhbnNhY3Rpb24gKGkuZS4gc2VyaWFsaXphdGlvbiBoYXMgb2NjdXJyZWQpCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIGEgbmV3IG9uZSBzaG91bGQgbm90IGJlIG9wZW5lZCBvbiB0aGUgZmx1c2ggZG93biB0aGUgbmV0dHkgcGlwZWxpbmUKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKGNvZGUsIGZyYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotICAgICAgICAgICAgICAgIC8vIGV4cG9uZW50aWFsIGRlbGF5IGJldHdlZW4gd2FybmluZ3MuIGRvbid0IGtlZXAgdHJpZ2dlcmluZyB0aGlzIHdhcm5pbmcgb3ZlciBhbmQgb3ZlciBhZ2FpbiBmb3IgdGhlCi0gICAgICAgICAgICAgICAgLy8gc2FtZSByZXF1ZXN0LiB0b3RhbFBlbmRpbmdXcml0ZUJ5dGVzIGlzIHZvbGF0aWxlIHNvIGl0IGlzIHBvc3NpYmxlIHRoYXQgYnkgdGhlIHRpbWUgdGhpcyB3YXJuaW5nCi0gICAgICAgICAgICAgICAgLy8gaGl0cyB0aGUgbG9nIHRoZSBsb3cgd2F0ZXJtYXJrIG1heSBoYXZlIGJlZW4gaGl0Ci0gICAgICAgICAgICAgICAgbG9uZyBpbnRlcnZhbCA9IChsb25nKSBNYXRoLnBvdygyLCB3YXJuQ291bnRlcikgKiAxMDAwOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSAtIGxhc3RXYXJuaW5nVGltZSA+PSBpbnRlcnZhbCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBDaGFubmVsIGNoID0gY29udGV4dC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKS5jaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJXYXJuaW5nIHt9OiBPdXRib3VuZCBidWZmZXIgc2l6ZT17fSwgcGF1c2luZyByZXNwb25zZSB3cml0aW5nIGFzIHdyaXRlQnVmZmVySGlnaFdhdGVyTWFyayBleGNlZWRlZCBvbiByZXF1ZXN0IHt9IGZvciBjaGFubmVsIHt9IC0gd3JpdGluZyB3aWxsIGNvbnRpbnVlIG9uY2UgY2xpZW50IGhhcyBjYXVnaHQgdXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5Db3VudGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLnVuc2FmZSgpLm91dGJvdW5kQnVmZmVyKCkudG90YWxQZW5kaW5nV3JpdGVCeXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5nZXRSZXF1ZXN0SWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC5pZCgpKTsKLQotICAgICAgICAgICAgICAgICAgICBsYXN0V2FybmluZ1RpbWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgICAgICAgICAgICAgd2FybkNvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgY2xpZW50IGlzIGxhZ2dpbmcgd2UgY2FuIGhvbGQgaGVyZSBmb3IgYSBwZXJpb2Qgb2YgdGltZSBmb3IgdGhlIGNsaWVudCB0byBjYXRjaCB1cC4KLSAgICAgICAgICAgICAgICAvLyB0aGlzIGlzbid0IGJsb2NraW5nIHRoZSBJTyB0aHJlYWQgLSBqdXN0IGEgd29ya2VyLgotICAgICAgICAgICAgICAgIFRpbWVVbml0Lk1JTExJU0VDT05EUy5zbGVlcChXUklURV9QQVVTRV9USU1FX01TKTsKLSAgICAgICAgICAgICAgICB3cml0ZVBhdXNlc01ldGVyLm1hcmsoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3Avc3RhbmRhcmQvU3RhbmRhcmRPcFByb2Nlc3Nvci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC9zdGFuZGFyZC9TdGFuZGFyZE9wUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNmUzYjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC9zdGFuZGFyZC9TdGFuZGFyZE9wUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc3RhbmRhcmQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5PcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5BYnN0cmFjdEV2YWxPcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5PcFByb2Nlc3NvckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuZnVuY3Rpb24uVGhyb3dpbmdDb25zdW1lcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwotaW1wb3J0IGphdmF4LnNjcmlwdC5TaW1wbGVCaW5kaW5nczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOwotCi0vKioKLSAqIFNpbXBsZSB7QGxpbmsgT3BQcm9jZXNzb3J9IGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyB7QGNvZGUgU2NyaXB0RW5naW5lfSBzY3JpcHQgZXZhbHVhdGlvbiBvdXRzaWRlIHRoZSBjb250ZXh0Ci0gKiBvZiBhIHNlc3Npb24uCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgU3RhbmRhcmRPcFByb2Nlc3NvciBleHRlbmRzIEFic3RyYWN0RXZhbE9wUHJvY2Vzc29yIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoU3RhbmRhcmRPcFByb2Nlc3Nvci5jbGFzcyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BfUFJPQ0VTU09SX05BTUUgPSAiIjsKLQotICAgIHByb3RlY3RlZCBmaW5hbCBGdW5jdGlvbjxDb250ZXh0LCBCaW5kaW5nU3VwcGxpZXI+IGJpbmRpbmdNYWtlcjsKLQotICAgIHN0YXRpYyBmaW5hbCBTZXR0aW5ncy5Qcm9jZXNzb3JTZXR0aW5ncyBERUZBVUxUX1NFVFRJTkdTID0gbmV3IFNldHRpbmdzLlByb2Nlc3NvclNldHRpbmdzKCk7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBERUZBVUxUX1NFVFRJTkdTLmNsYXNzTmFtZSA9IFN0YW5kYXJkT3BQcm9jZXNzb3IuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpOwotICAgICAgICBERUZBVUxUX1NFVFRJTkdTLmNvbmZpZyA9IG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoQ09ORklHX01BWF9QQVJBTUVURVJTLCBERUZBVUxUX01BWF9QQVJBTUVURVJTKTsKLSAgICAgICAgfX07Ci0gICAgfQotCi0gICAgcHVibGljIFN0YW5kYXJkT3BQcm9jZXNzb3IoKSB7Ci0gICAgICAgIHN1cGVyKHRydWUpOwotICAgICAgICBiaW5kaW5nTWFrZXIgPSBnZXRCaW5kaW5nTWFrZXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBPUF9QUk9DRVNTT1JfTkFNRTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBpbml0KGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7Ci0gICAgICAgIHRoaXMubWF4UGFyYW1ldGVycyA9IChpbnQpIHNldHRpbmdzLm9wdGlvbmFsUHJvY2Vzc29yKFN0YW5kYXJkT3BQcm9jZXNzb3IuY2xhc3MpLm9yRWxzZShERUZBVUxUX1NFVFRJTkdTKS5jb25maWcuCi0gICAgICAgICAgICAgICAgZ2V0T3JEZWZhdWx0KENPTkZJR19NQVhfUEFSQU1FVEVSUywgREVGQVVMVF9NQVhfUEFSQU1FVEVSUyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4gZ2V0RXZhbE9wKCkgewotICAgICAgICByZXR1cm4gdGhpczo6ZXZhbE9wOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPcHRpb25hbDxUaHJvd2luZ0NvbnN1bWVyPENvbnRleHQ+PiBzZWxlY3RPdGhlcihmaW5hbCBDb250ZXh0IGN0eCkgIHRocm93cyBPcFByb2Nlc3NvckV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBPcHRpb25hbC5lbXB0eSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGRvIG5vdGhpbmcgPSBubyByZXNvdXJjZXMgdG8gcmVsZWFzZQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBldmFsT3AoZmluYWwgQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb24gewotICAgICAgICBpZiAobG9nZ2VyLmlzRGVidWdFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IGNvbnRleHQuZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiU2Vzc2lvbmxlc3MgcmVxdWVzdCB7fSBmb3IgZXZhbCBpbiB0aHJlYWQge30iLCBtc2cuZ2V0UmVxdWVzdElkKCksIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGV2YWxPcEludGVybmFsKGNvbnRleHQsIGNvbnRleHQ6OmdldEdyZW1saW5FeGVjdXRvciwgYmluZGluZ01ha2VyLmFwcGx5KGNvbnRleHQpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHVzZWZ1bCBtZXRob2QgZm9yIHRob3NlIGV4dGVuZGluZyB0aGlzIGNsYXNzLCB3aGVyZSB0aGUgbWVhbnMgZm9yIGJpbmRpbmcgY29uc3RydWN0aW9uIGNhbiBiZSBzdXBwbGllZAotICAgICAqIHRvIHRoaXMgY2xhc3MuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4ge0BsaW5rICNldmFsT3AoQ29udGV4dCl9IHRvIGNyZWF0ZSB0aGUgZmluYWwgYXJndW1lbnQgdG8KLSAgICAgKiB7QGxpbmsgQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IjZXZhbE9wSW50ZXJuYWwoQ29udGV4dCwgU3VwcGxpZXIsIEJpbmRpbmdTdXBwbGllcil9LgotICAgICAqIEluIHRoaXMgd2F5IGFuIGV4dGVuZGluZyBjbGFzcyBjYW4gdXNlIHRoZSBkZWZhdWx0IHtAbGluayBBYnN0cmFjdEV2YWxPcFByb2Nlc3Nvci5CaW5kaW5nU3VwcGxpZXJ9Ci0gICAgICogd2hpY2ggY2FycmllcyBhIGxvdCBvZiByZS11c2FibGUgZnVuY3Rpb25hbGl0eSBvciBwcm92aWRlIGEgbmV3IG9uZSB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgYXBwcm9hY2guCi0gICAgICovCi0gICAgcHJvdGVjdGVkIEZ1bmN0aW9uPENvbnRleHQsIEJpbmRpbmdTdXBwbGllcj4gZ2V0QmluZGluZ01ha2VyKCkgewotICAgICAgICByZXR1cm4gY29udGV4dCAtPiAoKSAtPiB7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBjb250ZXh0LmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotCi0gICAgICAgICAgICAvLyBhbGlhcyBhbnkgZ2xvYmFsIGJpbmRpbmdzIHRvIGEgZGlmZmVyZW50IHZhcmlhYmxlLgotICAgICAgICAgICAgaWYgKG1zZy5nZXRBcmdzKCkuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfQUxJQVNFUykpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSAoTWFwPFN0cmluZywgU3RyaW5nPikgbXNnLmdldEFyZ3MoKS5nZXQoVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLFN0cmluZz4gYWxpYXNLdiA6IGFsaWFzZXMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhlIGFsaWFzIHJlZmVycyB0byBhIEdyYXBoIGluc3RhbmNlCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gY29udGV4dC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRHcmFwaChhbGlhc0t2LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSBncmFwaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHV0KGFsaWFzS3YuZ2V0S2V5KCksIGdyYXBoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBhbGlhcyB3YXNuJ3QgZm91bmQgYXMgYSBHcmFwaCB0aGVuIHBlcmhhcHMgaXQgaXMgYSBUcmF2ZXJzYWxTb3VyY2UgLSBpdCBuZWVkcyB0byBiZQotICAgICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVHJhdmVyc2FsU291cmNlIHRzID0gY29udGV4dC5nZXRHcmFwaE1hbmFnZXIoKS5nZXRUcmF2ZXJzYWxTb3VyY2UoYWxpYXNLdi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IHRzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MucHV0KGFsaWFzS3YuZ2V0S2V5KCksIHRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHZhbGlkYXRpb24gaXMgaW1wb3J0YW50IHRvIGNhbGxzIHRvIEdyYXBoTWFuYWdlci5jb21taXQoKSBhbmQgcm9sbGJhY2soKSBhcyB0aGV5IGJvdGgKLSAgICAgICAgICAgICAgICAgICAgLy8gZXhwZWN0IHRoYXQgdGhlIGFsaWFzZXMgc3VwcGxpZWQgYXJlIHZhbGlkCi0gICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvciA9IFN0cmluZy5mb3JtYXQoIkNvdWxkIG5vdCBhbGlhcyBbJXNdIHRvIFslc10gYXMgWyVzXSBub3QgaW4gdGhlIEdyYXBoIG9yIFRyYXZlcnNhbFNvdXJjZSBnbG9iYWwgYmluZGluZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhc0t2LmdldEtleSgpLCBhbGlhc0t2LmdldFZhbHVlKCksIGFsaWFzS3YuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24oZXJyb3IsIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UoZXJyb3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gdGhlcmUncyBubyBiaW5kaW5ncyBzbyBkZXRlcm1pbmUgaWYgdGhhdCdzIG9rIHdpdGggR3JlbWxpbiBTZXJ2ZXIKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5nZXRTZXR0aW5ncygpLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXJyb3IgPSAiR3JlbWxpbiBTZXJ2ZXIgaXMgY29uZmlndXJlZCB3aXRoIHN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCBhcyAndHJ1ZScgLSB0aGUgJ2FsaWFzZXMnIGFyZ3VtZW50cyBtdXN0IGJlIHByb3ZpZGVkIjsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKGVycm9yLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UoZXJyb3IpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGFkZCBhbnkgYmluZGluZ3MgdG8gb3ZlcnJpZGUgYW55IG90aGVyIHN1cHBsaWVkCi0gICAgICAgICAgICBPcHRpb25hbC5vZk51bGxhYmxlKChNYXA8U3RyaW5nLCBPYmplY3Q+KSBtc2cuZ2V0QXJncygpLmdldChUb2tlbnMuQVJHU19CSU5ESU5HUykpLmlmUHJlc2VudChiaW5kaW5nczo6cHV0QWxsKTsKLSAgICAgICAgICAgIHJldHVybiBiaW5kaW5nczsKLSAgICAgICAgfTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL3RyYXZlcnNhbC9UcmF2ZXJzYWxPcFByb2Nlc3Nvci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9vcC90cmF2ZXJzYWwvVHJhdmVyc2FsT3BQcm9jZXNzb3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDc4ODkxYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL3RyYXZlcnNhbC9UcmF2ZXJzYWxPcFByb2Nlc3Nvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnRyYXZlcnNhbDsKLQotaW1wb3J0IGNvbS5jb2RhaGFsZS5tZXRyaWNzLlRpbWVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbDsKLWltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxFeGNlcHRpb247Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5KYXZhVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuRmFpbHVyZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuQnl0ZWNvZGVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEludGVycnVwdGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuR3JhcGhNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyZW1saW5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuT3BQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdGVkVXNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkZyYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuU3RhdGVLZXk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3AuQWJzdHJhY3RPcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5PcFByb2Nlc3NvckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLk1ldHJpY01hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbC5UcmF2ZXJzZXJJdGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkNsb3NlYWJsZUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuVGVtcG9yYXJ5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5UaHJvd2luZ0NvbnN1bWVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZheC5zY3JpcHQuQmluZGluZ3M7Ci1pbXBvcnQgamF2YXguc2NyaXB0LlNjcmlwdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC5zY3JpcHQuU2ltcGxlQmluZGluZ3M7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlVGFzazsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5SZWplY3RlZEV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRGdXR1cmU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmNvZGFoYWxlLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkubmFtZTsKLQotLyoqCi0gKiBTaW1wbGUge0BsaW5rIE9wUHJvY2Vzc29yfSBpbXBsZW1lbnRhdGlvbiB0aGF0IGl0ZXJhdGVzIHJlbW90ZWx5IHN1Ym1pdHRlZCBzZXJpYWxpemVkIHtAbGluayBUcmF2ZXJzYWx9IG9iamVjdHMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgVHJhdmVyc2FsT3BQcm9jZXNzb3IgZXh0ZW5kcyBBYnN0cmFjdE9wUHJvY2Vzc29yIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoVHJhdmVyc2FsT3BQcm9jZXNzb3IuY2xhc3MpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBhdWRpdExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKEdyZW1saW5TZXJ2ZXIuQVVESVRfTE9HR0VSX05BTUUpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QX1BST0NFU1NPUl9OQU1FID0gInRyYXZlcnNhbCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBUaW1lciB0cmF2ZXJzYWxPcFRpbWVyID0gTWV0cmljTWFuYWdlci5JTlNUQU5DRS5nZXRUaW1lcihuYW1lKEdyZW1saW5TZXJ2ZXIuY2xhc3MsICJvcCIsICJ0cmF2ZXJzYWwiKSk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCaW5kaW5ncyBFTVBUWV9CSU5ESU5HUyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotCi0gICAgcHVibGljIFRyYXZlcnNhbE9wUHJvY2Vzc29yKCkgewotICAgICAgICBzdXBlcihmYWxzZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gT1BfUFJPQ0VTU09SX05BTUU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gZG8gbm90aGluZyA9IG5vIHJlc291cmNlcyB0byByZWxlYXNlCi0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4gc2VsZWN0KGZpbmFsIENvbnRleHQgY29udGV4dCkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbWVzc2FnZSA9IGNvbnRleHQuZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKLSAgICAgICAgbG9nZ2VyLmRlYnVnKCJTZWxlY3RpbmcgcHJvY2Vzc29yIGZvciBSZXF1ZXN0TWVzc2FnZSB7fSIsIG1lc3NhZ2UpOwotCi0gICAgICAgIGZpbmFsIFRocm93aW5nQ29uc3VtZXI8Q29udGV4dD4gb3A7Ci0gICAgICAgIHN3aXRjaCAobWVzc2FnZS5nZXRPcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRva2Vucy5PUFNfQllURUNPREU6Ci0gICAgICAgICAgICAgICAgdmFsaWRhdGVUcmF2ZXJzYWxTb3VyY2VBbGlhcyhjb250ZXh0LCBtZXNzYWdlLCB2YWxpZGF0ZVRyYXZlcnNhbFJlcXVlc3QobWVzc2FnZSkpOwotICAgICAgICAgICAgICAgIG9wID0gdGhpczo6aXRlcmF0ZUJ5dGVjb2RlVHJhdmVyc2FsOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUb2tlbnMuT1BTX0lOVkFMSUQ6Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZ0ludmFsaWQgPSBTdHJpbmcuZm9ybWF0KCJNZXNzYWdlIGNvdWxkIG5vdCBiZSBwYXJzZWQuICBDaGVjayB0aGUgZm9ybWF0IG9mIHRoZSByZXF1ZXN0LiBbJXNdIiwgbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKG1zZ0ludmFsaWQsIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX01BTEZPUk1FRF9SRVFVRVNUKS5zdGF0dXNNZXNzYWdlKG1zZ0ludmFsaWQpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZ0RlZmF1bHQgPSBTdHJpbmcuZm9ybWF0KCJNZXNzYWdlIHdpdGggb3AgY29kZSBbJXNdIGlzIG5vdCByZWNvZ25pemVkLiIsIG1lc3NhZ2UuZ2V0T3AoKSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKG1zZ0RlZmF1bHQsIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX01BTEZPUk1FRF9SRVFVRVNUKS5zdGF0dXNNZXNzYWdlKG1zZ0RlZmF1bHQpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHZhbGlkYXRlVHJhdmVyc2FsU291cmNlQWxpYXMoZmluYWwgQ29udGV4dCBjdHgsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1lc3NhZ2UsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcykgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHRyYXZlcnNhbFNvdXJjZUJpbmRpbmdGb3JBbGlhcyA9IGFsaWFzZXMudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgIGlmICghY3R4LmdldEdyYXBoTWFuYWdlcigpLmdldFRyYXZlcnNhbFNvdXJjZU5hbWVzKCkuY29udGFpbnModHJhdmVyc2FsU291cmNlQmluZGluZ0ZvckFsaWFzKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIlRoZSB0cmF2ZXJzYWwgc291cmNlIFslc10gZm9yIGFsaWFzIFslc10gaXMgbm90IGNvbmZpZ3VyZWQgb24gdGhlIHNlcnZlci4iLCB0cmF2ZXJzYWxTb3VyY2VCaW5kaW5nRm9yQWxpYXMsIFRva2Vucy5WQUxfVFJBVkVSU0FMX1NPVVJDRV9BTElBUyk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiB2YWxpZGF0ZVRyYXZlcnNhbFJlcXVlc3QoZmluYWwgUmVxdWVzdE1lc3NhZ2UgbWVzc2FnZSkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKCFtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19HUkVNTElOKS5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQuIiwgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfR1JFTUxJTik7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWF0Y2hlcyBmdW5jdGlvbmFsaXR5IGluIHRoZSBVbmlmaWVkSGFuZGxlcgotICAgICAgICBpZiAoIShtZXNzYWdlLm9wdGlvbmFsQXJncyhUb2tlbnMuQVJHU19HUkVNTElOKS5nZXQoKSBpbnN0YW5jZW9mIEJ5dGVjb2RlKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQgdGhhdCBpcyBvZiB0eXBlICVzLiIsCi0gICAgICAgICAgICAgICAgICAgIFRva2Vucy5PUFNfQllURUNPREUsIFRva2Vucy5BUkdTX0dSRU1MSU4sIEJ5dGVjb2RlLmNsYXNzLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEFsaWFzZXMobWVzc2FnZSkuZ2V0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgT3B0aW9uYWw8TWFwPFN0cmluZywgU3RyaW5nPj4gdmFsaWRhdGVkQWxpYXNlcyhmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtZXNzYWdlKSB0aHJvd3MgT3BQcm9jZXNzb3JFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBPcHRpb25hbDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBhbGlhc2VzID0gbWVzc2FnZS5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgIGlmICghYWxpYXNlcy5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyBhIFslc10gYXJndW1lbnQuIiwgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfQUxJQVNFUyk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24obXNnLCBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobWVzc2FnZSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKS5zdGF0dXNNZXNzYWdlKG1zZykuY3JlYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFsaWFzZXMuZ2V0KCkuc2l6ZSgpICE9IDEgfHwgIWFsaWFzZXMuZ2V0KCkuY29udGFpbnNLZXkoVG9rZW5zLlZBTF9UUkFWRVJTQUxfU09VUkNFX0FMSUFTKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IFN0cmluZy5mb3JtYXQoIkEgbWVzc2FnZSB3aXRoIFslc10gb3AgY29kZSByZXF1aXJlcyB0aGUgWyVzXSBhcmd1bWVudCB0byBiZSBhIE1hcCBjb250YWluaW5nIG9uZSBhbGlhcyBhc3NpZ25tZW50IG5hbWVkICclcycuIiwKLSAgICAgICAgICAgICAgICAgICAgVG9rZW5zLk9QU19CWVRFQ09ERSwgVG9rZW5zLkFSR1NfQUxJQVNFUywgVG9rZW5zLlZBTF9UUkFWRVJTQUxfU09VUkNFX0FMSUFTKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBPcFByb2Nlc3NvckV4Y2VwdGlvbihtc2csIFJlc3BvbnNlTWVzc2FnZS5idWlsZChtZXNzYWdlKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMpLnN0YXR1c01lc3NhZ2UobXNnKS5jcmVhdGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYWxpYXNlczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaXRlcmF0ZUJ5dGVjb2RlVHJhdmVyc2FsKGZpbmFsIENvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IGNvbnRleHQuZ2V0UmVxdWVzdE1lc3NhZ2UoKTsKLSAgICAgICAgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MgPSBjb250ZXh0LmdldFNldHRpbmdzKCk7Ci0gICAgICAgIGxvZ2dlci5kZWJ1ZygiVHJhdmVyc2FsIHJlcXVlc3Qge30gZm9yIGluIHRocmVhZCB7fSIsIG1zZy5nZXRSZXF1ZXN0SWQoKSwgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkpOwotCi0gICAgICAgIC8vIHZhbGlkYXRlVHJhdmVyc2FsUmVxdWVzdCgpIGVuc3VyZXMgdGhhdCB0aGlzIGlzIG9mIHR5cGUgQnl0ZWNvZGUKLSAgICAgICAgZmluYWwgT2JqZWN0IGJ5dGVjb2RlT2JqID0gbXNnLmdldEFyZ3MoKS5nZXQoVG9rZW5zLkFSR1NfR1JFTUxJTik7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlID0gKEJ5dGVjb2RlKSBieXRlY29kZU9iajsKLQotICAgICAgICAvLyBlYXJsaWVyIHZhbGlkYXRpb24gaW4gc2VsZWN0aW9uIG9mIHRoaXMgb3AgbWV0aG9kIHNob3VsZCBmcmVlIHVzIHRvIGNhc3QgdGhpcyB3aXRob3V0IHdvcnJ5Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gYWxpYXNlcyA9IChNYXA8U3RyaW5nLCBTdHJpbmc+KSBtc2cub3B0aW9uYWxBcmdzKFRva2Vucy5BUkdTX0FMSUFTRVMpLmdldCgpOwotCi0gICAgICAgIC8vIHRpbWVvdXQgb3ZlcnJpZGUgLSBoYW5kbGUgYm90aCBkZXByZWNhdGVkIGFuZCBuZXdseSBuYW1lZCBjb25maWd1cmF0aW9uLiBlYXJsaWVyIGxvZ2ljIHNob3VsZCBwcmV2ZW50Ci0gICAgICAgIC8vIGJvdGggY29uZmlndXJhdGlvbnMgZnJvbSBiZWluZyBzdWJtaXR0ZWQgYXQgdGhlIHNhbWUgdGltZQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGFyZ3MgPSBtc2cuZ2V0QXJncygpOwotICAgICAgICBmaW5hbCBsb25nIHNldG8gPSBhcmdzLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0VWQUxfVElNRU9VVCkgPwotICAgICAgICAgICAgICAgICgoTnVtYmVyKSBhcmdzLmdldChUb2tlbnMuQVJHU19FVkFMX1RJTUVPVVQpKS5sb25nVmFsdWUoKSA6IGNvbnRleHQuZ2V0U2V0dGluZ3MoKS5nZXRFdmFsdWF0aW9uVGltZW91dCgpOwotCi0gICAgICAgIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXIgPSBjb250ZXh0LmdldEdyYXBoTWFuYWdlcigpOwotICAgICAgICBmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlTmFtZSA9IGFsaWFzZXMuZW50cnlTZXQoKS5pdGVyYXRvcigpLm5leHQoKS5nZXRWYWx1ZSgpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoTWFuYWdlci5nZXRUcmF2ZXJzYWxTb3VyY2UodHJhdmVyc2FsU291cmNlTmFtZSk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYXZlcnNhbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIE9wdGlvbmFsPFN0cmluZz4gbGFtYmRhTGFuZ3VhZ2UgPSBCeXRlY29kZUhlbHBlci5nZXRMYW1iZGFMYW5ndWFnZShieXRlY29kZSk7Ci0gICAgICAgICAgICBpZiAoIWxhbWJkYUxhbmd1YWdlLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgICAgIHRyYXZlcnNhbCA9IEphdmFUcmFuc2xhdG9yLm9mKGcpLnRyYW5zbGF0ZShieXRlY29kZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHJhdmVyc2FsID0gY29udGV4dC5nZXRHcmVtbGluRXhlY3V0b3IoKS5ldmFsKGJ5dGVjb2RlLCBFTVBUWV9CSU5ESU5HUywgbGFtYmRhTGFuZ3VhZ2UuZ2V0KCksIHRyYXZlcnNhbFNvdXJjZU5hbWUpOwotICAgICAgICB9IGNhdGNoIChTY3JpcHRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVHJhdmVyc2FsIGNvbnRhaW5zIGEgbGFtYmRhIHRoYXQgY2Fubm90IGJlIGNvbXBpbGVkIiwgZXgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IE9wUHJvY2Vzc29yRXhjZXB0aW9uKCJUcmF2ZXJzYWwgY29udGFpbnMgYSBsYW1iZGEgdGhhdCBjYW5ub3QgYmUgY29tcGlsZWQiLAotICAgICAgICAgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShleC5nZXRNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbihleCkuY3JlYXRlKCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiQ291bGQgbm90IGRlc2VyaWFsaXplIHRoZSBUcmF2ZXJzYWwgaW5zdGFuY2UiLCBleCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BQcm9jZXNzb3JFeGNlcHRpb24oIkNvdWxkIG5vdCBkZXNlcmlhbGl6ZSB0aGUgVHJhdmVyc2FsIGluc3RhbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1NFUklBTElaQVRJT04pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoZXguZ2V0TWVzc2FnZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVFeGNlcHRpb24oZXgpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2V0dGluZ3MuZW5hYmxlQXVkaXRMb2cpIHsKLSAgICAgICAgICAgIEF1dGhlbnRpY2F0ZWRVc2VyIHVzZXIgPSBjb250ZXh0LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpLmNoYW5uZWwoKS5hdHRyKFN0YXRlS2V5LkFVVEhFTlRJQ0FURURfVVNFUikuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAobnVsbCA9PSB1c2VyKSB7ICAgIC8vIFRoaXMgaXMgZXhwZWN0ZWQgd2hlbiB1c2luZyB0aGUgQWxsb3dBbGxBdXRoZW50aWNhdG9yCi0gICAgICAgICAgICAgICAgdXNlciA9IEF1dGhlbnRpY2F0ZWRVc2VyLkFOT05ZTU9VU19VU0VSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGFkZHJlc3MgPSBjb250ZXh0LmdldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpLmNoYW5uZWwoKS5yZW1vdGVBZGRyZXNzKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGlmIChhZGRyZXNzLnN0YXJ0c1dpdGgoIi8iKSAmJiBhZGRyZXNzLmxlbmd0aCgpID4gMSkgYWRkcmVzcyA9IGFkZHJlc3Muc3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgYXVkaXRMb2dnZXIuaW5mbygiVXNlciB7fSB3aXRoIGFkZHJlc3Mge30gcmVxdWVzdGVkOiB7fSIsIHVzZXIuZ2V0TmFtZSgpLCBhZGRyZXNzLCBieXRlY29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBUaW1lci5Db250ZXh0IHRpbWVyQ29udGV4dCA9IHRyYXZlcnNhbE9wVGltZXIudGltZSgpOwotICAgICAgICBmaW5hbCBGdXR1cmVUYXNrPFZvaWQ+IGV2YWxGdXR1cmUgPSBuZXcgRnV0dXJlVGFzazw+KCgpIC0+IHsKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U3RhcnRlZFJlc3BvbnNlKCk7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IGcuZ2V0R3JhcGgoKTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBiZWZvcmVQcm9jZXNzaW5nKGdyYXBoLCBjb250ZXh0KTsKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbXBpbGUgdGhlIHRyYXZlcnNhbCAtIHdpdGhvdXQgaXQgZ2V0RW5kU3RlcCgpIGhhcyBub3RoaW5nIGluIGl0Ci0gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNhbC5hcHBseVN0cmF0ZWdpZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlSXRlcmF0b3IoY29udGV4dCwgbmV3IFRyYXZlcnNlckl0ZXJhdG9yKHRyYXZlcnNhbCksIGdyYXBoKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgVGhyb3dhYmxlIHQgPSBleDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgVW5kZWNsYXJlZFRocm93YWJsZUV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0LmdldENhdXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ2xvc2VhYmxlSXRlcmF0b3IuY2xvc2VJdGVyYXRvcih0cmF2ZXJzYWwpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGlmIGFueSBleGNlcHRpb24gaW4gdGhlIGNoYWluIGlzIFRlbXBvcmFyeUV4Y2VwdGlvbiBvciBGYWlsdXJlIHRoZW4gd2Ugc2hvdWxkIHJlc3BvbmQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHQgZXJyb3IgY29kZSBzbyB0aGF0IHRoZSBjbGllbnQga25vd3MgdG8gcmV0cnkKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8VGhyb3dhYmxlPiBwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24gPSBkZXRlcm1pbmVJZlNwZWNpYWxFeGNlcHRpb24oZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9zc2libGVTcGVjaWFsRXhjZXB0aW9uLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgc3BlY2lhbCA9IHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbi5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZS5CdWlsZGVyIHNwZWNpYWxSZXNwb25zZU1zZyA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlKHNwZWNpYWwuZ2V0TWVzc2FnZSgpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHNwZWNpYWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWNpYWwgaW5zdGFuY2VvZiBUZW1wb3JhcnlFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsUmVzcG9uc2VNc2cuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RFTVBPUkFSWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNpYWwgaW5zdGFuY2VvZiBGYWlsdXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgRmFpbHVyZSBmYWlsdXJlID0gKEZhaWx1cmUpIHNwZWNpYWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbFJlc3BvbnNlTXNnLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9GQUlMX1NURVApLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXR0cmlidXRlKFRva2Vucy5TVEFUVVNfQVRUUklCVVRFX0ZBSUxfU1RFUF9NRVNTQUdFLCBmYWlsdXJlLmZvcm1hdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVBbmRGbHVzaChzcGVjaWFsUmVzcG9uc2VNc2cuY3JlYXRlKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB8fCB0IGluc3RhbmNlb2YgVHJhdmVyc2FsSW50ZXJydXB0ZWRFeGNlcHRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlci5vblF1ZXJ5RXJyb3IobXNnLCB0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJBIHRpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHRyYXZlcnNhbCBldmFsdWF0aW9uIG9mIFslc10gLSBjb25zaWRlciBpbmNyZWFzaW5nIHRoZSBsaW1pdCBnaXZlbiB0byBldmFsdWF0aW9uVGltZW91dCIsIG1zZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKGV4KS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJFeGNlcHRpb24gcHJvY2Vzc2luZyBhIFRyYXZlcnNhbCBvbiBpdGVyYXRpb24gZm9yIHJlcXVlc3QgWyVzXS4iLCBtc2cuZ2V0UmVxdWVzdElkKCkpLCBleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKGV4LmdldE1lc3NhZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKGV4KS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb25FcnJvcihncmFwaCwgY29udGV4dCwgZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7Ci0gICAgICAgICAgICAgICAgb25FcnJvcihncmFwaCwgY29udGV4dCwgdCk7Ci0gICAgICAgICAgICAgICAgLy8gaWYgYW55IGV4Y2VwdGlvbiBpbiB0aGUgY2hhaW4gaXMgVGVtcG9yYXJ5RXhjZXB0aW9uIG9yIEZhaWx1cmUgdGhlbiB3ZSBzaG91bGQgcmVzcG9uZCB3aXRoIHRoZQotICAgICAgICAgICAgICAgIC8vIHJpZ2h0IGVycm9yIGNvZGUgc28gdGhhdCB0aGUgY2xpZW50IGtub3dzIHRvIHJldHJ5Ci0gICAgICAgICAgICAgICAgZmluYWwgT3B0aW9uYWw8VGhyb3dhYmxlPiBwb3NzaWJsZVNwZWNpYWxFeGNlcHRpb24gPSBkZXRlcm1pbmVJZlNwZWNpYWxFeGNlcHRpb24odCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbi5pc1ByZXNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgc3BlY2lhbCA9IHBvc3NpYmxlU3BlY2lhbEV4Y2VwdGlvbi5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgc3BlY2lhbFJlc3BvbnNlTXNnID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWVzc2FnZShzcGVjaWFsLmdldE1lc3NhZ2UoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXR0cmlidXRlRXhjZXB0aW9uKHNwZWNpYWwpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbCBpbnN0YW5jZW9mIFRlbXBvcmFyeUV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbFJlc3BvbnNlTXNnLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9URU1QT1JBUlkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNpYWwgaW5zdGFuY2VvZiBGYWlsdXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBGYWlsdXJlIGZhaWx1cmUgPSAoRmFpbHVyZSkgc3BlY2lhbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxSZXNwb25zZU1zZy5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRkFJTF9TVEVQKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQXR0cmlidXRlKFRva2Vucy5TVEFUVVNfQVRUUklCVVRFX0ZBSUxfU1RFUF9NRVNTQUdFLCBmYWlsdXJlLmZvcm1hdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goc3BlY2lhbFJlc3BvbnNlTXNnLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJFeGNlcHRpb24gcHJvY2Vzc2luZyBhIFRyYXZlcnNhbCBvbiByZXF1ZXN0IFslc10uIiwgbXNnLmdldFJlcXVlc3RJZCgpKSwgdCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVBbmRGbHVzaChSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UodC5nZXRNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbih0KS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vUmUtdGhyb3cgYW55IGVycm9ycyB0byBiZSBoYW5kbGVkIGJ5IGFuZCBzZXQgYXMgdGhlIHJlc3VsdCBvZiBldmFsRnV0dXJlCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICB0aW1lckNvbnRleHQuc3RvcCgpOwotCi0gICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IHRoaXMgcXVlcnkgbWF5IGhhdmUgZmluaXNoZWQgYmVmb3JlIHRoZSB0aW1lb3V0RnV0dXJlIHdhcyBjcmVhdGVkLAotICAgICAgICAgICAgICAgIC8vIHRob3VnaCB0aGlzIGlzIHZlcnkgdW5saWtlbHkuIFRoaXMgaXMgaGFuZGxlZCBpbiB0aGUgc2V0dG9yLCBpZiB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZ3JhYmJlZC4KLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBwYXNzZWQgdGhpcyBwb2ludCBhbmQgdGhlIHNldHRlciBoYXNuJ3QgYmVlbiBjYWxsZWQsIGl0IHdpbGwgY2FuY2VsIHRoZSB0aW1lb3V0RnV0dXJlIGluc2lkZQotICAgICAgICAgICAgICAgIC8vIHRoZSBzZXR0ZXIgdG8gY29tcGVuc2F0ZS4KLSAgICAgICAgICAgICAgICBmaW5hbCBTY2hlZHVsZWRGdXR1cmU8Pz4gdGltZW91dEZ1dHVyZSA9IGNvbnRleHQuZ2V0VGltZW91dEV4ZWN1dG9yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gdGltZW91dEZ1dHVyZSkKLSAgICAgICAgICAgICAgICAgICAgdGltZW91dEZ1dHVyZS5jYW5jZWwodHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgRnV0dXJlPD8+IGV4ZWN1dGlvbkZ1dHVyZSA9IGNvbnRleHQuZ2V0R3JlbWxpbkV4ZWN1dG9yKCkuZ2V0RXhlY3V0b3JTZXJ2aWNlKCkuc3VibWl0KGV2YWxGdXR1cmUpOwotICAgICAgICAgICAgaWYgKHNldG8gPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgYSB0aW1lb3V0IGluIHRoZSB0aHJlYWQgcG9vbCBmb3IgZnV0dXJlIGV4ZWN1dGlvbgotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VGltZW91dEV4ZWN1dG9yKGNvbnRleHQuZ2V0U2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlKCkuc2NoZWR1bGUoKCkgLT4gewotICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25GdXR1cmUuY2FuY2VsKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQuZ2V0U3RhcnRlZFJlc3BvbnNlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2VuZFRpbWVvdXRSZXNwb25zZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSwgc2V0bywgVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFJlamVjdGVkRXhlY3V0aW9uRXhjZXB0aW9uIHJlZSkgewotICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlRPT19NQU5ZX1JFUVVFU1RTKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgiUmF0ZSBsaW1pdGluZyIpLmNyZWF0ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGJlZm9yZVByb2Nlc3NpbmcoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbnRleHQgY3R4KSB7Ci0gICAgICBmaW5hbCBHcmFwaE1hbmFnZXIgZ3JhcGhNYW5hZ2VyID0gY3R4LmdldEdyYXBoTWFuYWdlcigpOwotICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY3R4LmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICBncmFwaE1hbmFnZXIuYmVmb3JlUXVlcnlTdGFydChtc2cpOwotICAgICAgICBpZiAoZ3JhcGguZmVhdHVyZXMoKS5ncmFwaCgpLnN1cHBvcnRzVHJhbnNhY3Rpb25zKCkgJiYgZ3JhcGgudHgoKS5pc09wZW4oKSkgZ3JhcGgudHgoKS5yb2xsYmFjaygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIG9uRXJyb3IoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbnRleHQgY3R4LCBUaHJvd2FibGUgZXJyb3IpIHsKLSAgICAgICAgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlciA9IGN0eC5nZXRHcmFwaE1hbmFnZXIoKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY3R4LmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGdyYXBoTWFuYWdlci5vblF1ZXJ5RXJyb3IobXNnLCBlcnJvcik7IAotICAgICAgICBpZiAoZ3JhcGguZmVhdHVyZXMoKS5ncmFwaCgpLnN1cHBvcnRzVHJhbnNhY3Rpb25zKCkgJiYgZ3JhcGgudHgoKS5pc09wZW4oKSkgZ3JhcGgudHgoKS5yb2xsYmFjaygpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIG9uVHJhdmVyc2FsU3VjY2VzcyhmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgQ29udGV4dCBjdHgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhNYW5hZ2VyIGdyYXBoTWFuYWdlciA9IGN0eC5nZXRHcmFwaE1hbmFnZXIoKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY3R4LmdldFJlcXVlc3RNZXNzYWdlKCk7Ci0gICAgICAgIGdyYXBoTWFuYWdlci5vblF1ZXJ5U3VjY2Vzcyhtc2cpOwotICAgICAgICBpZiAoZ3JhcGguZmVhdHVyZXMoKS5ncmFwaCgpLnN1cHBvcnRzVHJhbnNhY3Rpb25zKCkgJiYgZ3JhcGgudHgoKS5pc09wZW4oKSkgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVJdGVyYXRvcihmaW5hbCBDb250ZXh0IGNvbnRleHQsIGZpbmFsIEl0ZXJhdG9yIGl0dHksIGZpbmFsIEdyYXBoIGdyYXBoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgbmV0dHlDb250ZXh0ID0gY29udGV4dC5nZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gY29udGV4dC5nZXRSZXF1ZXN0TWVzc2FnZSgpOwotICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IGNvbnRleHQuZ2V0U2V0dGluZ3MoKTsKLSAgICAgICAgZmluYWwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplciA9IG5ldHR5Q29udGV4dC5jaGFubmVsKCkuYXR0cihTdGF0ZUtleS5TRVJJQUxJWkVSKS5nZXQoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VCaW5hcnkgPSBuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmF0dHIoU3RhdGVLZXkuVVNFX0JJTkFSWSkuZ2V0KCk7Ci0KLSAgICAgICAgLy8gdXNlZCB0byBsaW1pdCB3YXJuaW5ncyBmb3Igd2hlbiBuZXR0eSBmaWxscyB0aGUgYnVmZmVyIGFuZCBoaXRzIHRoZSBoaWdoIHdhdGVybWFyayAtIHByZXZlbnRzCi0gICAgICAgIC8vIG92ZXItbG9nZ2luZyBvZiB0aGUgc2FtZSBtZXNzYWdlLgotICAgICAgICBsb25nIGxhc3RXYXJuaW5nVGltZSA9IDA7Ci0gICAgICAgIGludCB3YXJuQ291bnRlciA9IDA7Ci0KLSAgICAgICAgLy8gd2UgaGF2ZSBhbiBlbXB0eSBpdGVyYXRvciAtIGhhcHBlbnMgb24gc3R1ZmYgbGlrZTogZy5WKCkuaXRlcmF0ZSgpCi0gICAgICAgIGlmICghaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXR0cmlidXRlcyA9IGdlbmVyYXRlU3RhdHVzQXR0cmlidXRlcyhuZXR0eUNvbnRleHQsIG1zZywgUmVzcG9uc2VTdGF0dXNDb2RlLk5PX0NPTlRFTlQsIGl0dHksIHNldHRpbmdzKTsKLQotICAgICAgICAgICAgLy8gYXMgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGl0ZXJhdGUgaWYgd2UgYXJlIHRyYW5zYWN0aW9uIG1hbmFnZWQgdGhlbiB3ZSBzaG91bGQgZXhlY3V0ZSBhCi0gICAgICAgICAgICAvLyBjb21taXQgaGVyZSBiZWZvcmUgd2Ugc2VuZCBiYWNrIGEgTk9fQ09OVEVOVCB3aGljaCBpbXBsaWVzIHN1Y2Nlc3MKLSAgICAgICAgICAgIG9uVHJhdmVyc2FsU3VjY2VzcyhncmFwaCwgY29udGV4dCk7Ci0gICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykKLSAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLk5PX0NPTlRFTlQpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0aGUgYmF0Y2ggc2l6ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgcmVxdWVzdAotICAgICAgICBmaW5hbCBpbnQgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplID0gKEludGVnZXIpIG1zZy5vcHRpb25hbEFyZ3MoVG9rZW5zLkFSR1NfQkFUQ0hfU0laRSkKLSAgICAgICAgICAgICAgICAub3JFbHNlKHNldHRpbmdzLnJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZSk7Ci0gICAgICAgIExpc3Q8T2JqZWN0PiBhZ2dyZWdhdGUgPSBuZXcgQXJyYXlMaXN0PD4ocmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplKTsKLQotICAgICAgICAvLyB1c2UgYW4gZXh0ZXJuYWwgY29udHJvbCB0byBtYW5hZ2UgdGhlIGxvb3AgYXMgb3Bwb3NlZCB0byBqdXN0IGNoZWNraW5nIGhhc05leHQoKSBpbiB0aGUgd2hpbGUuICB0aGlzCi0gICAgICAgIC8vIHByZXZlbnQgc2l0dWF0aW9ucyB3aGVyZSBhdXRvIHRyYW5zYWN0aW9ucyBjcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gYWZ0ZXIgY2FsbHMgdG8gY29tbWl0KCkgd2l0aGluZwotICAgICAgICAvLyB0aGUgbG9vcCBvbiBjYWxscyB0byBoYXNOZXh0KCkuCi0gICAgICAgIGJvb2xlYW4gaGFzTW9yZSA9IGl0dHkuaGFzTmV4dCgpOwotCi0gICAgICAgIHdoaWxlIChoYXNNb3JlKSB7Ci0gICAgICAgICAgICBpZiAoVGhyZWFkLmludGVycnVwdGVkKCkpIHRocm93IG5ldyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICAvLyBjaGVjayBpZiBhbiBpbXBsZW1lbnRhdGlvbiBuZWVkcyB0byBmb3JjZSBmbHVzaCB0aGUgYWdncmVnYXRlZCByZXN1bHRzIGJlZm9yZSB0aGUgaXRlcmF0aW9uIGJhdGNoCi0gICAgICAgICAgICAvLyBzaXplIGlzIHJlYWNoZWQuCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlRmx1c2ggPSBpc0ZvcmNlRmx1c2hlZChuZXR0eUNvbnRleHQsIG1zZywgaXR0eSk7Ci0KLSAgICAgICAgICAgIC8vIGhhdmUgdG8gY2hlY2sgdGhlIGFnZ3JlZ2F0ZSBzaXplIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgY2hhbm5lbCBpcyBub3Qgd3JpdGVhYmxlIChiZWxvdykKLSAgICAgICAgICAgIC8vIHNvIGl0ZXJhdGluZyBuZXh0KCkgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IHdyaXR0ZW4gYW5kIGZsdXNoZWQgd291bGQgYnVtcCB0aGUgYWdncmVnYXRlIHNpemUgYmV5b25kCi0gICAgICAgICAgICAvLyB0aGUgZXhwZWN0ZWQgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplLiAgVG90YWwgc2VyaWFsaXphdGlvbiB0aW1lIGZvciB0aGUgcmVzcG9uc2UgcmVtYWlucyBpbgotICAgICAgICAgICAgLy8gZWZmZWN0IHNvIGlmIHRoZSBjbGllbnQgaXMgInNsb3ciIGl0IG1heSBzaW1wbHkgdGltZW91dC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyB0aGVyZSBpcyBhIG5lZWQgdG8gY2hlY2sgaGFzTmV4dCgpIG9uIHRoZSBpdGVyYXRvciBiZWNhdXNlIGlmIHRoZSBjaGFubmVsIGlzIG5vdCB3cml0ZWFibGUgdGhlCi0gICAgICAgICAgICAvLyBwcmV2aW91cyBwYXNzIHRocm91Z2ggdGhlIHdoaWxlIGxvb3Agd2lsbCBoYXZlIG5leHQoKSdkIHRoZSBpdGVyYXRvciBhbmQgaWYgaXQgaXMgImRvbmUiIHRoZW4gYQotICAgICAgICAgICAgLy8gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbiB3aWxsIHJhaXNlIGl0cyBoZWFkLiBhbHNvIG5lZWQgYSBjaGVjayB0byBlbnN1cmUgdGhhdCB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0Ci0gICAgICAgICAgICAvLyByZXF1aXJlIGEgZm9yY2VkIGZsdXNoIHdoaWNoIGNhbiBiZSBmb3JjZWQgYnkgc3ViLWNsYXNzZXMuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gdGhpcyBjb3VsZCBiZSBwbGFjZWQgaW5zaWRlIHRoZSBpc1dyaXRlYWJsZSgpIHBvcnRpb24gb2YgdGhlIGlmLXRoZW4gYmVsb3cgYnV0IGl0IHNlZW1zIGJldHRlciB0bwotICAgICAgICAgICAgLy8gYWxsb3cgaXRlcmF0aW9uIHRvIGNvbnRpbnVlIGludG8gYSBiYXRjaCBpZiB0aGF0IGlzIHBvc3NpYmxlIHJhdGhlciB0aGFuIGp1c3QgZG9pbmcgbm90aGluZyBhdCBhbGwKLSAgICAgICAgICAgIC8vIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBjbGllbnQgdG8gY2F0Y2ggdXAKLSAgICAgICAgICAgIGlmIChhZ2dyZWdhdGUuc2l6ZSgpIDwgcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplICYmIGl0dHkuaGFzTmV4dCgpICYmICFmb3JjZUZsdXNoKSBhZ2dyZWdhdGUuYWRkKGl0dHkubmV4dCgpKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3Qga2VlcCBleGVjdXRvciBidXN5IGlmIGNsaWVudCBoYXMgYWxyZWFkeSBnaXZlbiB1cDsgdGhlcmUgaXMgbm8gd2F5IHRvIGNhdGNoIHVwIGlmIHRoZSBjaGFubmVsIGlzCi0gICAgICAgICAgICAvLyBub3QgYWN0aXZlLCBhbmQgaGVuY2Ugd2Ugc2hvdWxkIGJyZWFrIHRoZSBsb29wLgotICAgICAgICAgICAgaWYgKCFuZXR0eUNvbnRleHQuY2hhbm5lbCgpLmlzQWN0aXZlKCkpIHsKLSAgICAgICAgICAgICAgICBvbkVycm9yKGdyYXBoLCBjb250ZXh0LCBuZXcgQ2hhbm5lbEV4Y2VwdGlvbigiQ2hhbm5lbCBpcyBub3QgYWN0aXZlIC0gY2Fubm90IHdyaXRlIGFueSBtb3JlIHJlc3VsdHMiKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHNlbmQgYmFjayBhIHBhZ2Ugb2YgcmVzdWx0cyBpZiBiYXRjaCBzaXplIGlzIG1ldCBvciBpZiBpdCdzIHRoZSBlbmQgb2YgdGhlIHJlc3VsdHMgYmVpbmcgaXRlcmF0ZWQuCi0gICAgICAgICAgICAvLyBhbHNvIGNoZWNrIHdyaXRlYWJpbGl0eSBvZiB0aGUgY2hhbm5lbCB0byBwcmV2ZW50IE9PTUUgZm9yIHNsb3cgY2xpZW50cy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBjbGllbnRzIG1pZ2h0IGRlY2lkZSB0byBjbG9zZSB0aGUgTmV0dHkgY2hhbm5lbCB0byB0aGUgc2VydmVyIHdpdGggYSBDbG9zZVdlYnNvY2tldEZyYW1lIGFmdGVyIGVycm9ycwotICAgICAgICAgICAgLy8gbGlrZSBDb3JydXB0ZWRGcmFtZUV4Y2VwdGlvbi4gT24gdGhlIHNlcnZlciwgYWx0aG91Z2ggdGhlIGNoYW5uZWwgZ2V0cyBjbG9zZWQsIHRoZXJlIG1pZ2h0IGJlIHNvbWUKLSAgICAgICAgICAgIC8vIGV4ZWN1dG9yIHRocmVhZHMgd2FpdGluZyBmb3Igd2F0ZXJtYXJrIHRvIGNsZWFyIHdoaWNoIHdpbGwgbm90IGNsZWFyIGluIHRoZXNlIGNhc2VzIHNpbmNlIGNsaWVudCBoYXMKLSAgICAgICAgICAgIC8vIGFscmVhZHkgZ2l2ZW4gdXAgb24gdGhlc2UgcmVxdWVzdHMuIFRoaXMgbGVhZHMgdG8gdGhlc2UgZXhlY3V0b3JzIHdhaXRpbmcgZm9yIHRoZSBjbGllbnQgdG8gY29uc3VtZQotICAgICAgICAgICAgLy8gcmVzdWx0cyB0aWxsIHRoZSB0aW1lb3V0LiBjaGVja2luZyBmb3IgaXNBY3RpdmUoKSBzaG91bGQgaGVscCBwcmV2ZW50IHRoYXQuCi0gICAgICAgICAgICBpZiAobmV0dHlDb250ZXh0LmNoYW5uZWwoKS5pc0FjdGl2ZSgpICYmIG5ldHR5Q29udGV4dC5jaGFubmVsKCkuaXNXcml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmNlRmx1c2ggfHwgYWdncmVnYXRlLnNpemUoKSA9PSByZXN1bHRJdGVyYXRpb25CYXRjaFNpemUgfHwgIWl0dHkuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlID0gaXR0eS5oYXNOZXh0KCkgPyBSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5UIDogUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1M7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2VyaWFsaXplIGhlcmUgYmVjYXVzZSBpbiBzZXNzaW9ubGVzcyByZXF1ZXN0cyB0aGUgc2VyaWFsaXphdGlvbiBtdXN0IG9jY3VyIGluIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIHRocmVhZCBhcyB0aGUgZXZhbC4gIGFzIGV2YWwgb2NjdXJzIGluIHRoZSBHcmVtbGluRXhlY3V0b3IgdGhlcmUncyBubyB3YXkgdG8gZ2V0IGJhY2sgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRocmVhZCB0aGF0IHByb2Nlc3NlZCB0aGUgZXZhbCBvZiB0aGUgc2NyaXB0IHNvLCB3ZSBoYXZlIHRvIHB1c2ggc2VyaWFsaXphdGlvbiBkb3duIGludG8gdGhhdAotICAgICAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGFkYXRhID0gZ2VuZXJhdGVSZXN1bHRNZXRhRGF0YShuZXR0eUNvbnRleHQsIG1zZywgY29kZSwgaXR0eSwgc2V0dGluZ3MpOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHN0YXR1c0F0dHJiID0gZ2VuZXJhdGVTdGF0dXNBdHRyaWJ1dGVzKG5ldHR5Q29udGV4dCwgbXNnLCBjb2RlLCBpdHR5LCBzZXR0aW5ncyk7Ci0gICAgICAgICAgICAgICAgICAgIEZyYW1lIGZyYW1lID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lID0gbWFrZUZyYW1lKGNvbnRleHQsIG1zZywgc2VyaWFsaXplciwgdXNlQmluYXJ5LCBhZ2dyZWdhdGUsIGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YSwgc3RhdHVzQXR0cmIpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgZnJhbWUgbWF5IHVzZSBhIEJ5dGVidWYgd2hpY2ggaXMgYSBjb3VudGFibGUgcmVsZWFzZSAtIGlmIGl0IGRvZXMgbm90IGdldCB3cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb3duc3RyZWFtIGl0IG5lZWRzIHRvIGJlIHJlbGVhc2VkIGhlcmUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSAhPSBudWxsKSBmcmFtZS50cnlSZWxlYXNlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2VwdGlvbiBpcyBoYW5kbGVkIGluIG1ha2VGcmFtZSgpIC0gc2VyaWFsaXphdGlvbiBlcnJvciBnZXRzIHdyaXR0ZW4gYmFjayB0byBkcml2ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoYXQgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZ3JhcGgsIGNvbnRleHQsIGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyBsZWZ0IGluIHRoZSBpdGVyYXRvciBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlIGFjY2Vzc2VkIGFmdGVyCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb3VsZCBiZSBjbG9zZWQgLSBpbiB0aGF0IGNhc2UgYSBjYWxsIHRvIGhhc05leHQoKSBjb3VsZCBvcGVuIGEgbmV3IHRyYW5zYWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHVuaW50ZW50aW9uYWxseQotICAgICAgICAgICAgICAgICAgICBoYXNNb3JlID0gaXR0eS5oYXNOZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgbmVlZCB0byByZXNldCB0aGUgYWdncmVnYXRpb24gbGlzdCBpZiB0aGVyZSdzIG1vcmUgc3R1ZmYgdG8gd3JpdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZSA9IG5ldyBBcnJheUxpc3Q8PihyZXN1bHRJdGVyYXRpb25CYXRjaFNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGFuZCBzZXJpYWxpemF0aW9uIGFyZSBib3RoIGNvbXBsZXRlIHdoaWNoIG1lYW5zIHRoaXMgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LiBub3RlIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvcnMgaW50ZXJuYWwgdG8gc2NyaXB0IGV2YWwgb3IgdGltZW91dCB3aWxsIHJvbGxiYWNrIGdpdmVuIEdyZW1saW5TZXJ2ZXIncyBnbG9iYWwgY29uZmlndXJhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgZXJyb3JzIHdpbGwgZ2V0IHJvbGxlZCBiYWNrIGJlbG93IGJlY2F1c2UgdGhlIGV4Y2VwdGlvbnMgYXJlbid0IHRocm93biBpbiB0aG9zZSBjYXNlcyB0byBiZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdWdodCBieSB0aGUgR3JlbWxpbkV4ZWN1dG9yIGZvciBnbG9iYWwgcm9sbGJhY2sgbG9naWMuIHRoaXMgb25seSBuZWVkcyB0byBiZSBjb21taXR0ZWQgaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBhcmUgbm8gbW9yZSBpdGVtcyB0byBpdGVyYXRlIGFuZCBzZXJpYWxpemF0aW9uIGlzIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25UcmF2ZXJzYWxTdWNjZXNzKGdyYXBoLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGZyYW1lIG1heSB1c2UgYSBCeXRlYnVmIHdoaWNoIGlzIGEgY291bnRhYmxlIHJlbGVhc2UgLSBpZiBpdCBkb2VzIG5vdCBnZXQgd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG93bnN0cmVhbSBpdCBuZWVkcyB0byBiZSByZWxlYXNlZCBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWUgIT0gbnVsbCkgZnJhbWUudHJ5UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc01vcmUpIGl0ZXJhdGVDb21wbGV0ZShuZXR0eUNvbnRleHQsIG1zZywgaXR0eSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZsdXNoIGlzIGNhbGxlZCBhZnRlciB0aGUgY29tbWl0IGhhcyBwb3RlbnRpYWxseSBvY2N1cnJlZC4gIGluIHRoaXMgd2F5LCBpZiBhIGNvbW1pdCB3YXMKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgdGhlbiBpdCB3aWxsIGJlIDEwMCUgY29tcGxldGUgYmVmb3JlIHRoZSBjbGllbnQgcmVjZWl2ZXMgaXQuIHRoZSAiZnJhbWUiIGF0IHRoaXMgcG9pbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGhhdmUgY29tcGxldGVseSBkZXRhY2hlZCBvYmplY3RzIGZyb20gdGhlIHRyYW5zYWN0aW9uIChpLmUuIHNlcmlhbGl6YXRpb24gaGFzIG9jY3VycmVkKQotICAgICAgICAgICAgICAgICAgICAvLyBzbyBhIG5ldyBvbmUgc2hvdWxkIG5vdCBiZSBvcGVuZWQgb24gdGhlIGZsdXNoIGRvd24gdGhlIG5ldHR5IHBpcGVsaW5lCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQud3JpdGVBbmRGbHVzaChjb2RlLCBmcmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBleHBvbmVudGlhbCBkZWxheSBiZXR3ZWVuIHdhcm5pbmdzLiBkb24ndCBrZWVwIHRyaWdnZXJpbmcgdGhpcyB3YXJuaW5nIG92ZXIgYW5kIG92ZXIgYWdhaW4gZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIHNhbWUgcmVxdWVzdC4gdG90YWxQZW5kaW5nV3JpdGVCeXRlcyBpcyB2b2xhdGlsZSBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IGJ5IHRoZSB0aW1lIHRoaXMgd2FybmluZwotICAgICAgICAgICAgICAgIC8vIGhpdHMgdGhlIGxvZyB0aGUgbG93IHdhdGVybWFyayBtYXkgaGF2ZSBiZWVuIGhpdAotICAgICAgICAgICAgICAgIGxvbmcgaW50ZXJ2YWwgPSAobG9uZykgTWF0aC5wb3coMiwgd2FybkNvdW50ZXIpICogMTAwMDsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFRpbWUgLSBsYXN0V2FybmluZ1RpbWUgPj0gaW50ZXJ2YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQ2hhbm5lbCBjaCA9IGNvbnRleHQuZ2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCkuY2hhbm5lbCgpOwotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiV2FybmluZyB7fTogT3V0Ym91bmQgYnVmZmVyIHNpemU9e30sIHBhdXNpbmcgcmVzcG9uc2Ugd3JpdGluZyBhcyB3cml0ZUJ1ZmZlckhpZ2hXYXRlck1hcmsgZXhjZWVkZWQgb24gcmVxdWVzdCB7fSBmb3IgY2hhbm5lbCB7fSAtIHdyaXRpbmcgd2lsbCBjb250aW51ZSBvbmNlIGNsaWVudCBoYXMgY2F1Z2h0IHVwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuQ291bnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC51bnNhZmUoKS5vdXRib3VuZEJ1ZmZlcigpLnRvdGFsUGVuZGluZ1dyaXRlQnl0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuZ2V0UmVxdWVzdElkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2guaWQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbGFzdFdhcm5pbmdUaW1lID0gY3VycmVudFRpbWU7Ci0gICAgICAgICAgICAgICAgICAgIHdhcm5Db3VudGVyKys7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGNsaWVudCBpcyBsYWdnaW5nIHdlIGNhbiBob2xkIGhlcmUgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBjbGllbnQgdG8gY2F0Y2ggdXAuCi0gICAgICAgICAgICAgICAgLy8gdGhpcyBpc24ndCBibG9ja2luZyB0aGUgSU8gdGhyZWFkIC0ganVzdCBhIHdvcmtlci4KLSAgICAgICAgICAgICAgICBUaW1lVW5pdC5NSUxMSVNFQ09ORFMuc2xlZXAoV1JJVEVfUEFVU0VfVElNRV9NUyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVQYXVzZXNNZXRlci5tYXJrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvR3JlbWxpbkVycm9yLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvR3JlbWxpbkVycm9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxNDQzOAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvdXRpbC9HcmVtbGluRXJyb3IuamF2YQpAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbDsKKworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS5ncmFtbWFyLkdyZW1saW5QYXJzZXJFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5GYWlsdXJlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5FeGNlcHRpb25IZWxwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKKworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogRXhjZXB0aW9uIHV0aWxpdHkgY2xhc3MgdGhhdCBnZW5lcmF0ZXMgZXhjZXB0aW9ucyBpbiB0aGUgZm9ybSBleHBlY3RlZCBpbiBhIHtAY29kZSBSZXNwb25zZVN0YXR1c30gZm9yIGRpZmZlcmVudAorICogaXNzdWVzIHRoYXQgdGhlIHNlcnZlciBjYW4gZW5jb3VudGVyLgorICovCitwdWJsaWMgY2xhc3MgR3JlbWxpbkVycm9yIHsKKyAgICBwcml2YXRlIGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBjb2RlOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZXhjZXB0aW9uOworCisgICAgcHJpdmF0ZSBHcmVtbGluRXJyb3IoSHR0cFJlc3BvbnNlU3RhdHVzIGNvZGUsIFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgZXhjZXB0aW9uKSB7CisgICAgICAgIHRoaXMuY29kZSA9IGNvZGU7CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgICAgIHRoaXMuZXhjZXB0aW9uID0gZXhjZXB0aW9uOworICAgIH0KKworICAgIHB1YmxpYyBIdHRwUmVzcG9uc2VTdGF0dXMgZ2V0Q29kZSgpIHsKKyAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKCkgeworICAgICAgICByZXR1cm4gbWVzc2FnZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEV4Y2VwdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICAvLyAtLS0tLS0tLS0tLS0gcmVxdWVzdCB2YWxpZGF0aW9uIGVycm9ycworCisgICAgLy8gc2NyaXB0IHR5cGUgZXJyb3JzCisgICAgcHVibGljIHN0YXRpYyBHcmVtbGluRXJyb3IgaW52YWxpZEdyZW1saW5UeXBlKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlICkgeworICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIk1lc3NhZ2UgY291bGQgbm90IGJlIHBhcnNlZC4gQ2hlY2sgdGhlIGZvcm1hdCBvZiB0aGUgcmVxdWVzdC4gWyVzXSIsCisgICAgICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2UpOworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsIG1lc3NhZ2UsICJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIC8vIHNjcmlwdCBlcnJvcnMKKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciBiaW5kaW5nKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIlRoZSBtZXNzYWdlIGlzIHVzaW5nIG9uZSBvciBtb3JlIGludmFsaWQgYmluZGluZyBrZXlzIC0gdGhleSBtdXN0IGJlIG9mIHR5cGUgU3RyaW5nIGFuZCBjYW5ub3QgYmUgbnVsbCIpOworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsIG1lc3NhZ2UsICJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIGJpbmRpbmcoZmluYWwgU2V0PFN0cmluZz4gYmFkQmluZGluZ3MpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJUaGUgbWVzc2FnZSBzdXBwbGllcyBvbmUgb3IgbW9yZSBpbnZhbGlkIHBhcmFtZXRlcnMga2V5IG9mIFslc10gLSB0aGVzZSBhcmUgcmVzZXJ2ZWQgbmFtZXMuIiwKKyAgICAgICAgICAgICAgICBiYWRCaW5kaW5ncyk7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgbWVzc2FnZSwgIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBHcmVtbGluRXJyb3IgYmluZGluZyhmaW5hbCBpbnQgYmluZGluZ3NDb3VudCwgZmluYWwgaW50IGFsbG93ZWRTaXplKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiVGhlIG1lc3NhZ2UgY29udGFpbnMgJXMgYmluZGluZ3Mgd2hpY2ggaXMgbW9yZSB0aGFuIGlzIGFsbG93ZWQgYnkgdGhlIHNlcnZlciAlcyBjb25maWd1cmF0aW9uIiwKKyAgICAgICAgICAgICAgICBiaW5kaW5nc0NvdW50LCBhbGxvd2VkU2l6ZSk7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgbWVzc2FnZSwgIkludmFsaWRSZXF1ZXN0RXhjZXB0aW9uIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBHcmVtbGluRXJyb3IgYmluZGluZyhmaW5hbCBTdHJpbmcgYWxpYXNlZCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoIkNvdWxkIG5vdCBhbGlhcyBbJXNdIHRvIFslc10gYXMgWyVzXSBub3QgaW4gdGhlIEdyYXBoIG9yIFRyYXZlcnNhbFNvdXJjZSBnbG9iYWwgYmluZGluZ3MiLAorICAgICAgICAgICAgICAgIFRva2Vucy5BUkdTX0csIGFsaWFzZWQsIGFsaWFzZWQpOworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsIG1lc3NhZ2UsICJJbnZhbGlkUmVxdWVzdEV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIHBhcnNpbmcoZmluYWwgR3JlbWxpblBhcnNlckV4Y2VwdGlvbiBlcnJvcikgeworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsIGVycm9yLmdldE1lc3NhZ2UoKSwgIk1hbGZvcm1lZFF1ZXJ5RXhjZXB0aW9uIik7CisgICAgfQorCisgICAgLy8gZXhlY3V0aW9uIGVycm9ycworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIHRpbWVvdXQoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiQSB0aW1lb3V0IG9jY3VycmVkIGR1cmluZyB0cmF2ZXJzYWwgZXZhbHVhdGlvbiBvZiBbJXNdIC0gY29uc2lkZXIgaW5jcmVhc2luZyB0aGUgbGltaXQgZ2l2ZW4gdG8gZXZhbHVhdGlvblRpbWVvdXQiLAorICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluRXJyb3IoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgbWVzc2FnZSwgIlNlcnZlclRpbWVvdXRFeGNlZWRlZEV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIHRpbWVkSW50ZXJydXB0VGltZW91dCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluRXJyb3IoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwKKyAgICAgICAgICAgICAgICAiVGltZW91dCBkdXJpbmcgc2NyaXB0IGV2YWx1YXRpb24gdHJpZ2dlcmVkIGJ5IFRpbWVkSW50ZXJydXB0Q3VzdG9taXplclByb3ZpZGVyIiwKKyAgICAgICAgICAgICAgICAiU2VydmVyVGltZW91dEV4Y2VlZGVkRXhjZXB0aW9uIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBHcmVtbGluRXJyb3IgcmF0ZUxpbWl0aW5nKCkgeworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuVE9PX01BTllfUkVRVUVTVFMsCisgICAgICAgICAgICAgICAgIlRvbyBtYW55IHJlcXVlc3RzIGhhdmUgYmVlbiBzZW50IGluIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUuIiwgIlRvb01hbnlSZXF1ZXN0c0V4Y2VwdGlvbiIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIHNlcmlhbGl6YXRpb24oRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgiRXJyb3IgZHVyaW5nIHNlcmlhbGl6YXRpb246ICVzIiwgRXhjZXB0aW9uSGVscGVyLmdldE1lc3NhZ2VGcm9tRXhjZXB0aW9uT3JDYXVzZShleCkpOworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlLCAiU2VydmVyU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIHdyb25nU2VyaWFsaXplcihFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJFcnJvciBkdXJpbmcgc2VyaWFsaXphdGlvbjogJXMiLCBFeGNlcHRpb25IZWxwZXIuZ2V0TWVzc2FnZUZyb21FeGNlcHRpb25PckNhdXNlKGV4KSk7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsIG1lc3NhZ2UsICJTZXJ2ZXJTZXJpYWxpemF0aW9uRXhjZXB0aW9uIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBHcmVtbGluRXJyb3IgbG9uZ0ZyYW1lKFRocm93YWJsZSB0KSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gdC5nZXRNZXNzYWdlKCkgKyAiIC0gaW5jcmVhc2UgdGhlIG1heFJlcXVlc3RDb250ZW50TGVuZ3RoIjsKKyAgICAgICAgLy8gdG9kbzogUmVzcG9uc2VFbnRpdHlUb29MYXJnZUV4Y2VwdGlvbj8gISEhCisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5SRVFVRVNUX0VOVElUWV9UT09fTEFSR0UsIG1lc3NhZ2UsICJSZXF1ZXN0RW50aXR5VG9vTGFyZ2VFeGNlcHRpb24iKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciBsb25nUmVxdWVzdChmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSApIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KCJUaGUgR3JlbWxpbiBzdGF0ZW1lbnQgdGhhdCB3YXMgc3VibWl0dGVkIGV4Y2VlZHMgdGhlIG1heGltdW0gY29tcGlsYXRpb24gc2l6ZSBhbGxvd2VkIGJ5IHRoZSBKVk0sIHBsZWFzZSBzcGxpdCBpdCBpbnRvIG11bHRpcGxlIHNtYWxsZXIgc3RhdGVtZW50cyAtICVzIiwgcmVxdWVzdE1lc3NhZ2UudHJpbU1lc3NhZ2UoMTAyMSkpOworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFLCBtZXNzYWdlLCAiUmVxdWVzdEVudGl0eVRvb0xhcmdlRXhjZXB0aW9uIik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBHcmVtbGluRXJyb3IgdGVtcG9yYXJ5KGZpbmFsIFRocm93YWJsZSB0KSB7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsIHQuZ2V0TWVzc2FnZSgpLCAiU2VydmVyRXZhbHVhdGlvbkV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIGZhaWxTdGVwKGZpbmFsIEZhaWx1cmUgZmFpbHVyZSkgeworICAgICAgICAvLyB0b2RvOiBkb3VibGUgY2hlY2sgbWVzc2FnZQorICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLAorICAgICAgICAgICAgICAgIGZhaWx1cmUuZ2V0TWVzc2FnZSgpLCAiU2VydmVyRmFpbFN0ZXBFeGNlcHRpb24iKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciBnZW5lcmFsKGZpbmFsIFRocm93YWJsZSB0KSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gKHQuZ2V0TWVzc2FnZSgpID09IG51bGwpID8gdC50b1N0cmluZygpIDogdC5nZXRNZXNzYWdlKCk7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsIG1lc3NhZ2UsICJTZXJ2ZXJFcnJvckV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZXJyb3IgZm9yIHdoZW4gYSB0cmFuc2FjdGlvbiBpcyBub3QgZm91bmQgb24gdGhlIHNlcnZlci4KKyAgICAgKiBUaGlzIHR5cGljYWxseSBvY2N1cnMgd2hlbjoKKyAgICAgKiA8dWw+CisgICAgICogICA8bGk+VGhlIHRyYW5zYWN0aW9uIElEIHdhcyBuZXZlciByZWdpc3RlcmVkIChjbGllbnQgZGlkbid0IGNhbGwgYmVnaW4pPC9saT4KKyAgICAgKiAgIDxsaT5UaGUgdHJhbnNhY3Rpb24gdGltZWQgb3V0IGFuZCB3YXMgYXV0b21hdGljYWxseSByb2xsZWQgYmFjazwvbGk+CisgICAgICogICA8bGk+VGhlIHRyYW5zYWN0aW9uIHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjazwvbGk+CisgICAgICogPC91bD4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbklkIFRoZSB0cmFuc2FjdGlvbiBJRCB0aGF0IHdhcyBub3QgZm91bmQKKyAgICAgKiBAcmV0dXJuIEEgR3JlbWxpbkVycm9yIHdpdGggYXBwcm9wcmlhdGUgbWVzc2FnZSBhbmQgc3RhdHVzIGNvZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciB0cmFuc2FjdGlvbk5vdEZvdW5kKGZpbmFsIFN0cmluZyB0cmFuc2FjdGlvbklkKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICJUcmFuc2FjdGlvbiBub3QgZm91bmQ6ICVzLiBUaGUgdHJhbnNhY3Rpb24gbWF5IGhhdmUgdGltZWQgb3V0LCBhbHJlYWR5IGJlZW4gY29tbWl0dGVkL3JvbGxlZCBiYWNrLCAiICsKKyAgICAgICAgICAgICJvciB3YXMgbmV2ZXIgc3RhcnRlZC4gQ2FsbCBnLnR4KCkuYmVnaW4oKSB0byBzdGFydCBhIG5ldyB0cmFuc2FjdGlvbi4iLCB0cmFuc2FjdGlvbklkKTsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluRXJyb3IoSHR0cFJlc3BvbnNlU3RhdHVzLk5PVF9GT1VORCwgbWVzc2FnZSwgIlRyYW5zYWN0aW9uRXhjZXB0aW9uIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBlcnJvciBmb3Igd2hlbiBjb21taXQgb3Igcm9sbGJhY2sgaXMgc2VudCB3aXRob3V0IGEgdHJhbnNhY3Rpb24gSUQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgR3JlbWxpbkVycm9yIHdpdGggYXBwcm9wcmlhdGUgbWVzc2FnZSBhbmQgc3RhdHVzIGNvZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciB0cmFuc2FjdGlvbmFsQ29udHJvbFJlcXVpcmVzVHJhbnNhY3Rpb24oKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gImcudHgoKS5jb21taXQoKSBhbmQgZy50eCgpLnJvbGxiYWNrKCkgYXJlIG9ubHkgYWxsb3dlZCBpbiB0cmFuc2FjdGlvbmFsIHJlcXVlc3RzLiI7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgbWVzc2FnZSwgIlRyYW5zYWN0aW9uRXhjZXB0aW9uIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBlcnJvciBmb3Igd2hlbiBhIGJlZ2luIHJlcXVlc3QgaXMgc2VudCB3aXRoIGEgdXNlci1zdXBwbGllZCB0cmFuc2FjdGlvbiBJRC4KKyAgICAgKiBUaGUgc2VydmVyIGdlbmVyYXRlcyB0cmFuc2FjdGlvbiBJRHM7IGNsaWVudHMgc2hvdWxkIG5vdCBwcm92aWRlIHRoZW0gb24gYmVnaW4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgR3JlbWxpbkVycm9yIHdpdGggYXBwcm9wcmlhdGUgbWVzc2FnZSBhbmQgc3RhdHVzIGNvZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciBiZWdpbkhhc1RyYW5zYWN0aW9uSWQoKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gIkJlZ2luIHRyYW5zYWN0aW9uIHJlcXVlc3QgY2Fubm90IGhhdmUgYSB1c2VyLXN1cHBsaWVkIHRyYW5zYWN0aW9uSWQiOworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsIG1lc3NhZ2UsICJUcmFuc2FjdGlvbkV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZXJyb3IgZm9yIHdoZW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb25zIGlzIGV4Y2VlZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIGV4Y2VlZGVkRXJyb3JNZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlIGNvbnRhaW5pbmcgYSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRyYW5zYWN0aW9ucworICAgICAqIEByZXR1cm4gQSBHcmVtbGluRXJyb3Igd2l0aCBhcHByb3ByaWF0ZSBtZXNzYWdlIGFuZCBzdGF0dXMgY29kZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIG1heFRyYW5zYWN0aW9uc0V4Y2VlZGVkKFN0cmluZyBleGNlZWRlZEVycm9yTWVzc2FnZSkgeworICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IGV4Y2VlZGVkRXJyb3JNZXNzYWdlICsKKyAgICAgICAgICAgICAgICAiIFRoZSBzZXJ2ZXIgaGFzIHJlYWNoZWQgaXRzIHRyYW5zYWN0aW9uIGxpbWl0LiAiICsKKyAgICAgICAgICAgICAgICAiUGxlYXNlIHdhaXQgZm9yIGV4aXN0aW5nIHRyYW5zYWN0aW9ucyB0byBjb21wbGV0ZSBvciBpbmNyZWFzZSB0aGUgc2VydmVyJ3MgbWF4Q29uY3VycmVudFRyYW5zYWN0aW9ucyBzZXR0aW5nLiI7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5TRVJWSUNFX1VOQVZBSUxBQkxFLCBtZXNzYWdlLCAiVHJhbnNhY3Rpb25FeGNlcHRpb24iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGVycm9yIGZvciB3aGVuIGEgdHJhbnNhY3Rpb24gb3BlcmF0aW9uIHRpbWVzIG91dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbklkIFRoZSB0cmFuc2FjdGlvbiBJRCB0aGF0IHRpbWVkIG91dAorICAgICAqIEBwYXJhbSBvcGVyYXRpb24gVGhlIG9wZXJhdGlvbiB0aGF0IHRpbWVkIG91dCAoZS5nLiwgImNvbW1pdCIsICJyb2xsYmFjayIsICJleGVjdXRlIikKKyAgICAgKiBAcmV0dXJuIEEgR3JlbWxpbkVycm9yIHdpdGggYXBwcm9wcmlhdGUgbWVzc2FnZSBhbmQgc3RhdHVzIGNvZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciB0cmFuc2FjdGlvblRpbWVvdXQoZmluYWwgU3RyaW5nIHRyYW5zYWN0aW9uSWQsIGZpbmFsIFN0cmluZyBvcGVyYXRpb24pIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgIlRyYW5zYWN0aW9uICVzIHRpbWVkIG91dCBkdXJpbmcgJXMgb3BlcmF0aW9uLiBUaGUgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2suICIgKworICAgICAgICAgICAgIkNvbnNpZGVyIGluY3JlYXNpbmcgdGhlIHRyYW5zYWN0aW9uIHRpbWVvdXQgb3IgYnJlYWtpbmcgdGhlIG9wZXJhdGlvbiBpbnRvIHNtYWxsZXIgcGFydHMuIiwKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQsIG9wZXJhdGlvbik7CisgICAgICAgIHJldHVybiBuZXcgR3JlbWxpbkVycm9yKEh0dHBSZXNwb25zZVN0YXR1cy5HQVRFV0FZX1RJTUVPVVQsIG1lc3NhZ2UsICJUcmFuc2FjdGlvbkV4Y2VwdGlvbiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYW4gZXJyb3IgZm9yIHdoZW4gdGhlIHJlcXVlc3RlZCBncmFwaCBkb2VzIG5vdCBzdXBwb3J0IHRyYW5zYWN0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1b2UgVGhlIGV4Y2VwdGlvbiBzdGF0aW5nIHRoYXQgdHJhbnNhY3Rpb25zIGFyZW4ndCBzdXBwb3J0ZWQKKyAgICAgKiBAcmV0dXJuIEEgR3JlbWxpbkVycm9yIHdpdGggYXBwcm9wcmlhdGUgbWVzc2FnZSBhbmQgc3RhdHVzIGNvZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEdyZW1saW5FcnJvciB0cmFuc2FjdGlvbk5vdFN1cHBvcnRlZChmaW5hbCBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiB1b2UpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluRXJyb3IoSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNULCB1b2UuZ2V0TWVzc2FnZSgpLCAiVHJhbnNhY3Rpb25FeGNlcHRpb24iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGVycm9yIGZvciB3aGVuIHRoZSB0cmFuc2FjdGlvbiBjb3VsZG4ndCBiZWdpbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlIChsaWtlbHkgZnJvbSBhIFRyYW5zYWN0aW9uRXhjZXB0aW9uKQorICAgICAqIEByZXR1cm4gQSBHcmVtbGluRXJyb3Igd2l0aCBhcHByb3ByaWF0ZSBtZXNzYWdlIGFuZCBzdGF0dXMgY29kZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgR3JlbWxpbkVycm9yIHRyYW5zYWN0aW9uVW5hYmxlVG9TdGFydChmaW5hbCBTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5FcnJvcihIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBtZXNzYWdlLCAiVHJhbnNhY3Rpb25FeGNlcHRpb24iKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvU2VydmVyR3JlbWxpbkV4ZWN1dG9yLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvU2VydmVyR3JlbWxpbkV4ZWN1dG9yLmphdmEKaW5kZXggOTdhMmM4ZS4uZGNlNWZiOSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci91dGlsL1NlcnZlckdyZW1saW5FeGVjdXRvci5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvdXRpbC9TZXJ2ZXJHcmVtbGluRXhlY3V0b3IuamF2YQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyYXBoTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuVHJhbnNhY3Rpb25NYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CkBAIC02NSw2ICs2Niw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFNlcnZlckdyZW1saW5FeGVjdXRvci5jbGFzcyk7CiAKICAgICBwcml2YXRlIGZpbmFsIEdyYXBoTWFuYWdlciBncmFwaE1hbmFnZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBUcmFuc2FjdGlvbk1hbmFnZXIgdHJhbnNhY3Rpb25NYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3M7CiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PExpZmVDeWNsZUhvb2s+IGhvb2tzOwogCkBAIC0xOTcsNiArMTk5LDE0IEBACiAgICAgICAgICAgICAgICAgLmZpbHRlcihrdiAtPiBrdi5nZXRWYWx1ZSgpIGluc3RhbmNlb2YgTGlmZUN5Y2xlSG9vaykKICAgICAgICAgICAgICAgICAubWFwKGt2IC0+IChMaWZlQ3ljbGVIb29rKSBrdi5nZXRWYWx1ZSgpKQogICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCisgICAgICAgIHRyYW5zYWN0aW9uTWFuYWdlciA9IG5ldyBUcmFuc2FjdGlvbk1hbmFnZXIoCisgICAgICAgICAgICAgICAgc2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlLAorICAgICAgICAgICAgICAgIGdyYXBoTWFuYWdlciwKKyAgICAgICAgICAgICAgICBzZXR0aW5ncy50cmFuc2FjdGlvblRpbWVvdXQsCisgICAgICAgICAgICAgICAgc2V0dGluZ3MubWF4Q29uY3VycmVudFRyYW5zYWN0aW9ucywKKyAgICAgICAgICAgICAgICBzZXR0aW5ncy5wZXJHcmFwaENsb3NlVGltZW91dAorICAgICAgICApOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWdpc3Rlck1ldHJpY3MoZmluYWwgU3RyaW5nIGVuZ2luZU5hbWUpIHsKQEAgLTIzNiw2ICsyNDYsMTAgQEAKICAgICAgICAgcmV0dXJuIGdyYXBoTWFuYWdlcjsKICAgICB9CiAKKyAgICBwdWJsaWMgVHJhbnNhY3Rpb25NYW5hZ2VyIGdldFRyYW5zYWN0aW9uTWFuYWdlcigpIHsKKyAgICAgICAgcmV0dXJuIHRyYW5zYWN0aW9uTWFuYWdlcjsKKyAgICB9CisKICAgICBwdWJsaWMgU2V0dGluZ3MgZ2V0U2V0dGluZ3MoKSB7CiAgICAgICAgIHJldHVybiBzZXR0aW5nczsKICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvVGV4dFBsYWluTWVzc2FnZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvdXRpbC9UZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplci5qYXZhCmluZGV4IGQ3ZTg5NTUuLjk1NzAzNGUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvdXRpbC9UZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvdXRpbC9UZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplci5qYXZhCkBAIC0yMCwxMSArMjAsMTEgQEAKIAogaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CiBpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5NZXNzYWdlVGV4dFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplcjsKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwpAQCAtMzQsNyArMzQsNyBAQAogICogQSBoaWdobHkgdXNlLWNhc2Ugc3BlY2lmaWMgc2VyaWFsaXplciB0aGF0IG9ubHkgaGFzIGNvbnRleHQgZm9yIEhUVFAgd2hlcmUgcmVzdWx0cyBzaW1wbHkgbmVlZCB0byBiZSBjb252ZXJ0ZWQKICAqIHRvIHN0cmluZyBpbiBhIGxpbmUgYnkgbGluZSBmYXNoaW9uIGZvciB0ZXh0IGJhc2VkIHJldHVybnMuCiAgKi8KLXB1YmxpYyBjbGFzcyBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplciBpbXBsZW1lbnRzIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjxGdW5jdGlvbjxPYmplY3QsIFN0cmluZz4+IHsKK3B1YmxpYyBjbGFzcyBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplciBleHRlbmRzIEFic3RyYWN0TWVzc2FnZVNlcmlhbGl6ZXI8RnVuY3Rpb248T2JqZWN0LCBTdHJpbmc+PiB7CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgRnVuY3Rpb248T2JqZWN0LCBTdHJpbmc+IGdldE1hcHBlcigpIHsKQEAgLTQyLDI2ICs0Miw0OSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlQnVmIHNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHBheWxvYWQgPSBzZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlTWVzc2FnZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIocGF5bG9hZC5sZW5ndGgoKSk7Ci0gICAgICAgIGVuY29kZWRNZXNzYWdlLndyaXRlQ2hhclNlcXVlbmNlKHBheWxvYWQsIENoYXJzZXRVdGlsLlVURl84KTsKLQotICAgICAgICByZXR1cm4gZW5jb2RlZE1lc3NhZ2U7CisgICAgcHVibGljIEJ5dGVCdWYgc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgeworICAgICAgICByZXR1cm4gKHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgPT0gSHR0cFJlc3BvbnNlU3RhdHVzLk9LKQorICAgICAgICAgICAgICAgID8gY29udmVydFN0cmluZ0RhdGEocmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmdldERhdGEoKSwgZmFsc2UsIGFsbG9jYXRvcikKKyAgICAgICAgICAgICAgICA6IGNvbnZlcnRFcnJvclN0cmluZyhyZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCBhbGxvY2F0b3IpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlQnVmIHNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJ0ZXh0L3BsYWluIGRvZXMgbm90IHByb2R1Y2UgYmluYXJ5Iik7CisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVIZWFkZXIoUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdEYXRhKHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCksIGZhbHNlLCBhbGxvY2F0b3IpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZVJlcXVlc3QoZmluYWwgQnl0ZUJ1ZiBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgQnl0ZUJ1ZiB3cml0ZUNodW5rKE9iamVjdCBhZ2dyZWdhdGUsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB7CisgICAgICAgIHJldHVybiBjb252ZXJ0U3RyaW5nRGF0YSgoTGlzdDxPYmplY3Q+KSBhZ2dyZWdhdGUsIHRydWUsIGFsbG9jYXRvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVGb290ZXIoUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmdEYXRhKHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCksIHRydWUsIGFsbG9jYXRvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVFcnJvckZvb3RlcihSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgeworICAgICAgICByZXR1cm4gY29udmVydEVycm9yU3RyaW5nKFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKyByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCBhbGxvY2F0b3IpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgcmVhZENodW5rKEJ5dGVCdWYgYnl0ZUJ1ZiwgYm9vbGVhbiBpc0ZpcnN0Q2h1bmspIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJ0ZXh0L3BsYWluIGRvZXMgbm90IGhhdmUgZGVzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucyIpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVSZXNwb25zZShmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgIHB1YmxpYyBCeXRlQnVmIHNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJ0ZXh0L3BsYWluIGRvZXMgbm90IHByb2R1Y2UgYmluYXJ5Iik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplQmluYXJ5UmVxdWVzdChmaW5hbCBCeXRlQnVmIG1zZykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oInRleHQvcGxhaW4gZG9lcyBub3QgaGF2ZSBkZXNlcmlhbGl6YXRpb24gZnVuY3Rpb25zIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGZpbmFsIEJ5dGVCdWYgbXNnKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigidGV4dC9wbGFpbiBkb2VzIG5vdCBoYXZlIGRlc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMiKTsKICAgICB9CiAKQEAgLTcwLDMzICs5MywyNyBAQAogICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHsgInRleHQvcGxhaW4iIH07CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBzZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgcHJpdmF0ZSBCeXRlQnVmIGNvbnZlcnRTdHJpbmdEYXRhKGZpbmFsIExpc3Q8T2JqZWN0PiBkYXRhLCBmaW5hbCBib29sZWFuIGFkZFN0YXJ0aW5nU2VwYXJhdG9yLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgewogICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKIAorICAgICAgICBpZiAoYWRkU3RhcnRpbmdTZXBhcmF0b3IpIHNiLmFwcGVuZChTeXN0ZW0ubGluZVNlcGFyYXRvcigpKTsKICAgICAgICAgLy8gdGhpcyBzaG91bGQgb25seSBzZXJpYWxpemUgc3VjY2VzcyBjb25kaXRpb25zIHNvIGFsbCBzaG91bGQgaGF2ZSBkYXRhIGluIExpc3QgZm9ybQotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gZGF0YSA9IChMaXN0PE9iamVjdD4pIHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCk7CiAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCBkYXRhLnNpemUoKTsgaXggKyspIHsKICAgICAgICAgICAgIHNiLmFwcGVuZCgiPT0+Iik7CiAgICAgICAgICAgICBzYi5hcHBlbmQoZGF0YS5nZXQoaXgpKTsKICAgICAgICAgICAgIGlmIChpeCA8IGRhdGEuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIoc2IubGVuZ3RoKCkpOworICAgICAgICBlbmNvZGVkTWVzc2FnZS53cml0ZUNoYXJTZXF1ZW5jZShzYi50b1N0cmluZygpLCBDaGFyc2V0VXRpbC5VVEZfOCk7CisKKyAgICAgICAgcmV0dXJuIGVuY29kZWRNZXNzYWdlOwogICAgIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oInRleHQvcGxhaW4gZG9lcyBub3QgaGF2ZSBhbnkgbmVlZCB0byBzZXJpYWxpemUgcmVxdWVzdHMiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVSZXF1ZXN0KGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJ0ZXh0L3BsYWluIGRvZXMgbm90IGhhdmUgZGVzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucyIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVSZXNwb25zZShmaW5hbCBTdHJpbmcgbXNnKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigidGV4dC9wbGFpbiBkb2VzIG5vdCBoYXZlIGRlc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMiKTsKKyAgICBwcml2YXRlIEJ5dGVCdWYgY29udmVydEVycm9yU3RyaW5nKGZpbmFsIFN0cmluZyBlcnJvciwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIoZXJyb3IubGVuZ3RoKCkpOworICAgICAgICBlbmNvZGVkTWVzc2FnZS53cml0ZUNoYXJTZXF1ZW5jZShlcnJvciwgQ2hhcnNldFV0aWwuVVRGXzgpOworICAgICAgICByZXR1cm4gZW5jb2RlZE1lc3NhZ2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLk9wUHJvY2Vzc29yIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLk9wUHJvY2Vzc29yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjFiZjEwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5PcFByb2Nlc3NvcgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc3RhbmRhcmQuU3RhbmRhcmRPcFByb2Nlc3Nvcgotb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc2Vzc2lvbi5TZXNzaW9uT3BQcm9jZXNzb3IKLW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnRyYXZlcnNhbC5UcmF2ZXJzYWxPcFByb2Nlc3NvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy9tYWluL3N0YXRpYy9MSUNFTlNFIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKaW5kZXggMjgzM2FmNC4uYTQyYTNjZiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL21haW4vc3RhdGljL0xJQ0VOU0UKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiBUaGUgQXBhY2hlIFRpbmtlclBvcCBwcm9qZWN0IGJ1bmRsZXMgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIHVuZGVyIHRoZSBCU0QgTGljZW5zZToKIAotICAgICBBbnRscjQgKG9yZy5hbnRscjphbnRscjQtcnVudGltZTo0LjkuMSAtIGh0dHBzOi8vd3d3LmFudGxyLm9yZykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2FudGxyNAorICAgICBBbnRscjQgKG9yZy5hbnRscjphbnRscjQtcnVudGltZTo0LjEzLjIgLSBodHRwczovL3d3dy5hbnRsci5vcmcpIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9hbnRscjQKICAgICAgSkxpbmUgKGpsaW5lOmpsaW5lOjIuMTQuNiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9qbGluZS9qbGluZTIpIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9qbGluZTIKICAgICAgS3J5byAoY29tLmVzb3Rlcmljc29mdHdhcmU6a3J5by1zaGFkZWQ6My4wLjMgLSBodHRwczovL2dpdGh1Yi5jb20vRXNvdGVyaWNTb2Z0d2FyZS9rcnlvKQogICAgICAgIC0gc2hhZGVkIGluIGdyZW1saW4tc2hhZGVkIHRvIG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5rcnlvCkBAIC0yMjMsOCArMjIzLDcgQEAKIAogVGhlIEFwYWNoZSBUaW5rZXJQb3AgcHJvamVjdCBidW5kbGVzIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyB1bmRlciB0aGUgTUlUIExpY2Vuc2U6CiAKLSAgICAgSkNMIDEuMS4xIGltcGxlbWVudGVkIG92ZXIgU0xGNEogKG9yZy5zbGY0ajpqY2wtb3Zlci1zbGY0ajoxLjcuMjUgLSBodHRwOi8vd3d3LnNsZjRqLm9yZykgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL3NsZjRqCi0gICAgIFNMRjRKIEFQSSBNb2R1bGUgKG9yZy5zbGY0ajpzbGY0ai1hcGk6MS43LjI1IC0gaHR0cDovL3d3dy5zbGY0ai5vcmcpIC0gZm9yIGRldGFpbHMsIHNlZSBsaWNlbnNlcy9zbGY0agorICAgICBTTEY0SiBBUEkgTW9kdWxlIChvcmcuc2xmNGo6c2xmNGotYXBpOjIuMC4xNiAtIGh0dHA6Ly93d3cuc2xmNGoub3JnKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvc2xmNGoKICAgICAgRm91bmRhdGlvbiBzdHlsZXNoZWV0IGZvciBDb2RlUmF5IChodHRwOi8vZm91bmRhdGlvbi56dXJiLmNvbSkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2ZvdW5kYXRpb24KICAgICAgbm9ybWFsaXplLmNzcyAyLjEuMiAoaHR0cDovL25lY29sYXMuZ2l0aHViLmlvL25vcm1hbGl6ZS5jc3MvKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvbm9ybWFsaXplCiAKQEAgLTIzOCw1ICsyMzcsNSBAQAogCiBUaGUgQXBhY2hlIFRpbmtlclBvcCBwcm9qZWN0IGJ1bmRsZXMgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIHVuZGVyIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDEuMDoKIAotICAgICBsb2diYWNrLWNvcmUgKGNoLnFvcy5sb2diYWNrOmxvZ2JhY2stY29yZToxLjIuMTMgLSBodHRwczovL2xvZ2JhY2sucW9zLmNoKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvbG9nYmFjawotICAgICBsb2diYWNrLWNsYXNzaWMgKGNoLnFvcy5sb2diYWNrOmxvZ2JhY2stY2xhc3NpYzoxLjIuMTMgLSBodHRwczovL2xvZ2JhY2sucW9zLmNoKSAtIGZvciBkZXRhaWxzLCBzZWUgbGljZW5zZXMvbG9nYmFjawpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgbG9nYmFjay1jb3JlIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNvcmU6MS4zLjE1IC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKKyAgICAgbG9nYmFjay1jbGFzc2ljIChjaC5xb3MubG9nYmFjazpsb2diYWNrLWNsYXNzaWM6MS4zLjE1IC0gaHR0cHM6Ly9sb2diYWNrLnFvcy5jaCkgLSBmb3IgZGV0YWlscywgc2VlIGxpY2Vuc2VzL2xvZ2JhY2sKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsaWVudENvbm5lY3Rpb25JbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL0NsaWVudENvbm5lY3Rpb25JbnRlZ3JhdGVUZXN0LmphdmEKaW5kZXggNDI0NzJjNi4uYmE0OGJmNiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9DbGllbnRDb25uZWN0aW9uSW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvQ2xpZW50Q29ubmVjdGlvbkludGVncmF0ZVRlc3QuamF2YQpAQCAtMjAsMjEgKzIwLDIxIEBACiAKIGltcG9ydCBjaC5xb3MubG9nYmFjay5jbGFzc2ljLkxldmVsOwogaW1wb3J0IGNoLnFvcy5sb2diYWNrLmNsYXNzaWMuTG9nZ2VyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuQ29ycnVwdGVkRnJhbWVFeGNlcHRpb247CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5Ub29Mb25nRnJhbWVFeGNlcHRpb247CiBpbXBvcnQgbmwuYWx0aW5kYWcubG9nLkxvZ0NhcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Db25uZWN0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5BYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuVGVzdENsaWVudEZhY3Rvcnk7CiBpbXBvcnQgb3JnLmhhbWNyZXN0LmNvcmUuSXM7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SZXF1ZXN0OwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKQEAgLTUxLDcgKzUxLDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNMb25nOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5TdXBwbGllcjsKIGltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkludFN0cmVhbTsKIAogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLmlzOwpAQCAtNjUsNyArNjQsOCBAQAogcHVibGljIGNsYXNzIENsaWVudENvbm5lY3Rpb25JbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIExvZ0NhcHRvciBsb2dDYXB0b3I7Ci0gICAgcHJpdmF0ZSBMZXZlbCBwcmV2aW91c0xldmVsOworICAgIHByaXZhdGUgTGV2ZWwgcHJldmlvdXNDb25uZWN0aW9uTGV2ZWw7CisgICAgcHJpdmF0ZSBMZXZlbCBwcmV2aW91c0Nvbm5lY3Rpb25Qb29sTGV2ZWw7CiAKICAgICBAQmVmb3JlQ2xhc3MKICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0dXBMb2dDYXB0b3IoKSB7CkBAIC04MCw4ICs4MCwxMSBAQAogICAgIEBCZWZvcmUKICAgICBwdWJsaWMgdm9pZCBzZXR1cEZvckVhY2hUZXN0KCkgewogICAgICAgICBmaW5hbCBMb2dnZXIgbGMgPSAoTG9nZ2VyKSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihDb25uZWN0aW9uLmNsYXNzKTsKLSAgICAgICAgcHJldmlvdXNMZXZlbCA9IGxjLmdldExldmVsKCk7CisgICAgICAgIHByZXZpb3VzQ29ubmVjdGlvbkxldmVsID0gbGMuZ2V0TGV2ZWwoKTsKICAgICAgICAgbGMuc2V0TGV2ZWwoTGV2ZWwuREVCVUcpOworICAgICAgICBmaW5hbCBMb2dnZXIgbGNwID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQ29ubmVjdGlvblBvb2wuY2xhc3MpOworICAgICAgICBwcmV2aW91c0Nvbm5lY3Rpb25Qb29sTGV2ZWwgPSBsY3AuZ2V0TGV2ZWwoKTsKKyAgICAgICAgbGNwLnNldExldmVsKExldmVsLkRFQlVHKTsKIAogICAgICAgICBsb2dDYXB0b3IuY2xlYXJMb2dzKCk7CiAgICAgfQpAQCAtODksNyArOTIsOSBAQAogICAgIEBBZnRlcgogICAgIHB1YmxpYyB2b2lkIGFmdGVyRWFjaFRlc3QoKSB7CiAgICAgICAgIGZpbmFsIExvZ2dlciBsYyA9IChMb2dnZXIpIExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKENvbm5lY3Rpb24uY2xhc3MpOwotICAgICAgICBsYy5zZXRMZXZlbChwcmV2aW91c0xldmVsKTsKKyAgICAgICAgbGMuc2V0TGV2ZWwocHJldmlvdXNDb25uZWN0aW9uTGV2ZWwpOworICAgICAgICBmaW5hbCBMb2dnZXIgbGNwID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQ29ubmVjdGlvblBvb2wuY2xhc3MpOworICAgICAgICBsY3Auc2V0TGV2ZWwocHJldmlvdXNDb25uZWN0aW9uUG9vbExldmVsKTsKICAgICB9CiAKICAgICAvKioKQEAgLTk3LDI0ICsxMDIsMjIgQEAKICAgICAgKi8KICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZENsb3NlQ29ubmVjdGlvbkRlYWREdWVUb1VuUmVjb3ZlcmFibGVFcnJvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBTZXQgYSBsb3cgdmFsdWUgb2YgbWF4Q29udGVudExlbmd0aCB0byBpbnRlbnRpb25hbGx5IHRyaWdnZXIgQ29ycnVwdGVkRnJhbWVFeGNlcHRpb24KKyAgICAgICAgLy8gU2V0IGEgbG93IHZhbHVlIG9mIG1heFJlc3BvbnNlQ29udGVudExlbmd0aCB0byBpbnRlbnRpb25hbGx5IHRyaWdnZXIgQ29ycnVwdGVkRnJhbWVFeGNlcHRpb24KICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1YxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXhDb250ZW50TGVuZ3RoKDY0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoKDY0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIEFkZCB0aGUgdGVzdCBkYXRhIHNvIHRoYXQgdGhlIGcuVigpIHJlc3BvbnNlIGNvdWxkIGV4Y2VlZCBtYXhDb250ZW50TGVuZ3RoCisgICAgICAgICAgICAvLyBBZGQgdGhlIHRlc3QgZGF0YSBzbyB0aGF0IHRoZSBnLlYoKSByZXNwb25zZSBjb3VsZCBleGNlZWQgbWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoCiAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxKS5yZXBlYXQoX18uYWRkVigpKS50aW1lcygyMCkuY291bnQoKSIpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLlYoKS5mb2xkKCkiKS5hbGwoKS5nZXQoKTsKIAogICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KHJlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBDb3JydXB0ZWRGcmFtZUV4Y2VwdGlvbiwgaXModHJ1ZSkpOworICAgICAgICAgICAgICAgIGFzc2VydFRoYXQocmUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIFRvb0xvbmdGcmFtZUV4Y2VwdGlvbiwgaXModHJ1ZSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyB3aXRob3V0IHRoaXMgd2FpdCB0aGlzIHRlc3QgaXMgZmFpbGluZyByYW5kb21seSBvbiBkb2NrZXIvdHJhdmlzIHdpdGggQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbgpAQCAtMTQ0LDcgKzE0Nyw2IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmFsYW5jZUNvbmN1cnJlbnRSZXF1ZXN0c0Fjcm9zc0Nvbm5lY3Rpb25zKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgaW50IGNvbm5Qb29sU2l6ZSA9IDE2OwogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZShjb25uUG9vbFNpemUpCiAgICAgICAgICAgICAgICAgLm1heENvbm5lY3Rpb25Qb29sU2l6ZShjb25uUG9vbFNpemUpCiAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwpAQCAtMTUyLDggKzE1NCw3IEBACiAgICAgICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvclNlcnZpY2VGb3JUZXN0aW5nID0gY2x1c3Rlci5leGVjdXRvcigpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIHJlcXVlc3QgPSBjbGllbnQuYnVpbGRNZXNzYWdlKFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkpCi0gICAgICAgICAgICAgICAgICAgIC5hZGQoVG9rZW5zLkFSR1NfR1JFTUxJTiwgIlRocmVhZC5zbGVlcCg1MDAwKSIpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciByZXF1ZXN0ID0gY2xpZW50LmJ1aWxkTWVzc2FnZShSZXF1ZXN0TWVzc2FnZS5idWlsZCgiVGhyZWFkLnNsZWVwKDUwMDApIikpOwogICAgICAgICAgICAgZmluYWwgQ2FsbGFibGU8Q29ubmVjdGlvbj4gc2VuZFF1ZXJ5Q2FsbGFibGUgPSAoKSAtPiBjbGllbnQuY2hvb3NlQ29ubmVjdGlvbihyZXF1ZXN0LmNyZWF0ZSgpKTsKICAgICAgICAgICAgIGZpbmFsIExpc3Q8Q2FsbGFibGU8Q29ubmVjdGlvbj4+IGxpc3RPZlRhc2tzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbm5Qb29sU2l6ZTsgaSsrKSB7CkBAIC0xODgsMjIgKzE4OSwxNyBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgb3ZlckxpbWl0T3BlcmF0aW9uc1Nob3VsZERlbGVnYXRlVG9TaW5nbGVOZXdDb25uZWN0aW9uKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRDcmVhdGVOZXdIdHRwQ29ubmVjdGlvblBlclJlcXVlc3RBc05lZWRlZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIGludCBvcGVyYXRpb25zID0gNjsKLSAgICAgICAgZmluYWwgaW50IHVzYWdlUGVyQ29ubmVjdGlvbiA9IDM7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAubWluQ29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLm1heENvbm5lY3Rpb25Qb29sU2l6ZShvcGVyYXRpb25zIC8gdXNhZ2VQZXJDb25uZWN0aW9uKQotICAgICAgICAgICAgICAgIC5taW5TaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oMSkKLSAgICAgICAgICAgICAgICAubWF4U2ltdWx0YW5lb3VzVXNhZ2VQZXJDb25uZWN0aW9uKHVzYWdlUGVyQ29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKG9wZXJhdGlvbnMpCiAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogICAgICAgICBjbGllbnQuaW5pdCgpOwogICAgICAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3JTZXJ2aWNlRm9yVGVzdGluZyA9IGNsdXN0ZXIuZXhlY3V0b3IoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciByZXF1ZXN0ID0gY2xpZW50LmJ1aWxkTWVzc2FnZShSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpKQotICAgICAgICAgICAgICAgICAgICAuYWRkKFRva2Vucy5BUkdTX0dSRU1MSU4sICJUaHJlYWQuc2xlZXAoNTAwMCkiKTsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgcmVxdWVzdCA9IGNsaWVudC5idWlsZE1lc3NhZ2UoUmVxdWVzdE1lc3NhZ2UuYnVpbGQoIlRocmVhZC5zbGVlcCg1MDAwKSIpKTsKICAgICAgICAgICAgIGZpbmFsIENhbGxhYmxlPENvbm5lY3Rpb24+IHNlbmRRdWVyeUNhbGxhYmxlID0gKCkgLT4gY2xpZW50LmNob29zZUNvbm5lY3Rpb24ocmVxdWVzdC5jcmVhdGUoKSk7CiAgICAgICAgICAgICBmaW5hbCBMaXN0PENhbGxhYmxlPENvbm5lY3Rpb24+PiBsaXN0T2ZUYXNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcGVyYXRpb25zOyBpKyspIHsKQEAgLTIyNyw5ICsyMjMsOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY29ubmVjdGlvbkJvcnJvd0NvdW50LnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMob3BlcmF0aW9ucywgY29ubmVjdGlvbkJvcnJvd0NvdW50LnNpemUoKSk7CiAgICAgICAgICAgICBmb3IgKGludCBmaW5hbEJvcnJvd0NvdW50IDogY29ubmVjdGlvbkJvcnJvd0NvdW50LnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHVzYWdlUGVyQ29ubmVjdGlvbiwgZmluYWxCb3Jyb3dDb3VudCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGZpbmFsQm9ycm93Q291bnQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0yNDUsNyArMjQxLDcgQEAKICAgICAgKi8KICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Y2NlZWRXaXRoSml0dGVyeUNvbm5lY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkubWF4Q29ubmVjdGlvblBvb2xTaXplKDQpLgorICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgxMjgpLgogICAgICAgICAgICAgICAgIHJlY29ubmVjdEludGVydmFsKDEwMDApLgogICAgICAgICAgICAgICAgIG1heFdhaXRGb3JDb25uZWN0aW9uKDQwMDApLnZhbGlkYXRpb25SZXF1ZXN0KCJnLmluamVjdCgpIikuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudC5DbHVzdGVyZWRDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CkBAIC0yNTcsNyArMjUzLDcgQEAKICAgICAgICAgY2xpZW50Lmhvc3RDb25uZWN0aW9uUG9vbHMuZm9yRWFjaCgoaCwgcG9vbCkgLT4gcG9vbC5jb25uZWN0aW9uRmFjdG9yeSA9IGNvbm5lY3Rpb25GYWN0b3J5KTsKIAogICAgICAgICAvLyBnZXQgYW4gaW5pdGlhbCBjb25uZWN0aW9uIHdoaWNoIG1hcmtzIHRoZSBob3N0IGFzIGF2YWlsYWJsZQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOwogCiAgICAgICAgIC8vIG5ldHdvcmsgaXMgZ29ubmEgZ2V0IGZpc2h5IC0gQ29ubmVjdGlvblBvb2wgc2hvdWxkIHRyeSB0byBncm93IGR1cmluZyB0aGUgd29ya2xvYWQgYmVsb3cgYW5kIHdoZW4gaXQKICAgICAgICAgLy8gZG9lcyBzb21lIGNvbm5lY3Rpb25zIHdpbGwgZmFpbCB0byBjcmVhdGUgaW4gdGhlIGJhY2tncm91bmQgd2hpY2ggc2hvdWxkIGxvZyBzb21lIGVycm9ycyBidXQgbm90IHRhbmsKQEAgLTI3Miw3ICsyNjgsNyBAQAogICAgICAgICBuZXcgVGhyZWFkKCgpIC0+IHsKICAgICAgICAgICAgIEludFN0cmVhbS5yYW5nZSgwLCByZXF1ZXN0cykuZm9yRWFjaChpIC0+IHsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0QXN5bmMoIjEgKyAiICsgaSk7CisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zdWJtaXRBc3luYyhTdHJpbmcuZm9ybWF0KCJnLmluamVjdCglZCkiLCAxK2kpKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gd2UgY291bGQgY2F0Y2ggYSBUaW1lb3V0RXhjZXB0aW9uIGhlcmUgaW4gc29tZSBjYXNlcyBpZiB0aGUgaml0dGVycyBjYXVzZSBhIGJvcnJvdyBvZiBhCiAgICAgICAgICAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24gdG8gdGFrZSB0b28gbG9uZy4gc3VibWl0QXN5bmMoKSB3aWxsIHdyYXAgaW4gYSBSdW50aW1lRXhjZXB0aW9uLiBjYW4ndCBhc3NlcnQKQEAgLTMwMSw2OCArMjk3LDczIEBACiAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBBZGRlZCBmb3IgVElOS0VSUE9QLTMxODEgLSB0aGlzIHNjZW5hcmlvIHdvdWxkIGhhdmUgcHJldmlvdXNseSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24gcG9vbCBhbmQgbGVmdCB1cyB3aXRoCi0gICAgICoge0BsaW5rIE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbn0ganVzdCBiZWNhdXNlIGEgc2luZ2xlIGNvbm5lY3Rpb24gZmFpbGVkIG9uIHtAbGluayBDbGllbnR9IGluaXRpYWxpemF0aW9uIHdoaWxlCi0gICAgICogb3RoZXJzIHN1Y2NlZWRlZC4KLSAgICAgKi8KICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Y2NlZWRXaXRoU2luZ2xlQ29ubmVjdGlvbkZhaWx1cmVPbkluaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gc2V0IHRoZSBtaW4gY29ubmVjdGlvbiBwb29sIHNpemUgdG8gNCBzbyB0aGF0IHRoZXkgYWxsIGdldCBjcmVhdGVkIG9uIGluaXQgYXMgdGhhdCdzIHRoZSBhcmVhIHdlIHdhbnQgdG8KLSAgICAgICAgLy8gdGVzdCBob3N0IGF2YWlsYWJpbGl0eSBiZWhhdmlvcgotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSg0KS5tYXhDb25uZWN0aW9uUG9vbFNpemUoNCkuCi0gICAgICAgICAgICAgICAgcmVjb25uZWN0SW50ZXJ2YWwoMTAwMCkuCi0gICAgICAgICAgICAgICAgbWF4V2FpdEZvckNvbm5lY3Rpb24oNDAwMCkudmFsaWRhdGlvblJlcXVlc3QoImcuaW5qZWN0KCkiKS5jcmVhdGUoKTsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRDbG9zZUlkbGVDb25uZWN0aW9uc0FuZFJlY3JlYXRlTmV3Q29ubmVjdGlvbnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgICAgICBpbnQgaWRsZU1pbGxpcyA9IDMwMDA7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuaWRsZUNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzKGlkbGVNaWxsaXMpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQuQ2x1c3RlcmVkQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIC8vIHdlIGxldCAzIGNvbm5lY3Rpb25zIHN1Y2NlZWQgYnV0IHRoZW4gZmFpbCBvbiB0aGUgNHRoCi0gICAgICAgIGZpbmFsIFNpbmdsZUZhaWxDb25uZWN0aW9uRmFjdG9yeSBjb25uZWN0aW9uRmFjdG9yeSA9IG5ldyBTaW5nbGVGYWlsQ29ubmVjdGlvbkZhY3RvcnkoMyk7Ci0gICAgICAgIGNsaWVudC5jb25uZWN0aW9uRmFjdG9yeVN1cHBsaWVyID0gKCkgLT4gY29ubmVjdGlvbkZhY3Rvcnk7Ci0KLSAgICAgICAgLy8gcHJpb3IgdG8gMy43LjUsIHdlIHdvdWxkIGhhdmUgc2VlbiB0aGlzIHBvcCBhbiBleGNlcHRpb24gYW5kIGNsb3NlIHRoZSBwb29sIHdpdGggZXJyb3IgbGlrZToKLSAgICAgICAgLy8gQ291bGQgbm90IGluaXRpYWxpemUgNCAobWluUG9vbFNpemUpIGNvbm5lY3Rpb25zIGluIHBvb2wuIFN1Y2Nlc3NmdWwgY29ubmVjdGlvbnM9My4gQ2xvc2luZyB0aGUgY29ubmVjdGlvbiBwb29sLgotICAgICAgICAvLyB3aGljaCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlIGJlY2F1c2UgMyBwcmlvciBjb25uZWN0aW9uIHdlcmUgZ29vZC4gcGVyaGFwcyB0aGlzIGZvdXJ0aCBvbmUganVzdCBoYWQgYQotICAgICAgICAvLyB2ZXJ5IHRlbXBvcmFyeSBuZXR3b3JrIGlzc3VlLiB0aGUgb3RoZXIgMyBjb3VsZCB0ZWNobmljYWxseSBzdGlsbCBiZSBzZXJ2aWNlYWJsZS4gdGhlIDR0aCBzaG91bGRuJ3QgZW5kCi0gICAgICAgIC8vIGNvbm5lY3Rpdml0eSBhbmQgYXNzdW1lIHRoZSBob3N0IGlzIGRlYWQgYXMgdWx0aW1hdGVseSBjbG9zaW5nIHRoZSBwb29sIGF0IHRoaXMgcG9pbnQgaW4gaW5pdCB3aWxsIGVuZCBpbgotICAgICAgICAvLyBOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24uCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFN0YXJ0aW5nIGF0IDMuNy41LCB3ZSBjYW4gYWxsb3cgYSBiaXQgbW9yZSBmYWlsdXJlIGhlcmUgYmVmb3JlIGtpbGxpbmcgdGhlIHBvb2wgZm9yIGp1c3QgYSBzaW5nbGUgY29ubmVjdGlvbgotICAgICAgICAvLyBmYWlsdXJlLiB3ZSBtaWdodCBiZSBiZWxvdyBtaW4gcG9vbCBzaXplIGF0IGluaXQgYnV0IHdlIGxvZyB0aGF0IHdhcm5pbmcgYW5kIGV4cGVjdCBmYXN0IHJlY292ZXJ5IGZyb20gdGhlCi0gICAgICAgIC8vIGRyaXZlciBpbiB0aGUgYmVzdCBjYXNlIGFuZCBpbiB0aGUgd29yc3QgY2FzZSwgbm9ybWFsIHByb2Nlc3NlcyBvZiByZWNvbm5lY3Qga2ljayBpbiBhbmQgc3RhYmlsaXplLgogICAgICAgICBjbGllbnQuaW5pdCgpOworICAgICAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3JTZXJ2aWNlRm9yVGVzdGluZyA9IGNsdXN0ZXIuZXhlY3V0b3IoKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY29ubmVjdGlvbkZhY3RvcnkuZ2V0Q29ubmVjdGlvbnNDcmVhdGVkKCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gY3JlYXRlIG9yIHJldXNlIHNvbWUgY29ubmVjdGlvbnMKKyAgICAgICAgICAgIGNob29zZUNvbm5lY3Rpb25zKDMsIGNsaWVudCwgZXhlY3V0b3JTZXJ2aWNlRm9yVGVzdGluZyk7CiAKLSAgICAgICAgLy8gbG9hZCB1cCBhIGhlbGxhIHRvbiBvZiByZXF1ZXN0cwotICAgICAgICBmaW5hbCBpbnQgcmVxdWVzdHMgPSAxMDAwOwotICAgICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaChyZXF1ZXN0cyk7Ci0gICAgICAgIGZpbmFsIEF0b21pY0Jvb2xlYW4gaGFkRmFpbCA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKKyAgICAgICAgICAgIC8vIHNpbXVsYXRlIGRvd250aW1lIHdoZXJlIHRoZXJlIGlzIG5vIHRyYWZmaWMgc28gdGhhdCBhbGwgY29ubmVjdGlvbnMgYmVjb21lIGlkbGUKKyAgICAgICAgICAgIFRpbWVVbml0Lk1JTExJU0VDT05EUy5zbGVlcChpZGxlTWlsbGlzICogMyk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY2xpZW50Lmhvc3RDb25uZWN0aW9uUG9vbHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIC8vIGFsbCBjb25uZWN0aW9ucyBzaG91bGQgaGF2ZSBiZWVuIGNsb3NlZCBkdWUgdG8gaWRsZSB0aW1lb3V0CisgICAgICAgICAgICBhc3NlcnRUcnVlKGNsaWVudC5ob3N0Q29ubmVjdGlvblBvb2xzLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpLmdldFBvb2xJbmZvKCkuY29udGFpbnMoIm5vIGNvbm5lY3Rpb25zIGluIHBvb2wiKSk7CiAKLSAgICAgICAgbmV3IFRocmVhZCgoKSAtPiB7Ci0gICAgICAgICAgICBJbnRTdHJlYW0ucmFuZ2UoMCwgcmVxdWVzdHMpLmZvckVhY2goaSAtPiB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50LnN1Ym1pdEFzeW5jKCIxICsgIiArIGkpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZCBjYXRjaCBhIFRpbWVvdXRFeGNlcHRpb24gaGVyZSBpbiBzb21lIGNhc2VzIGlmIHRoZSBqaXR0ZXJzIGNhdXNlIGEgYm9ycm93IG9mIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdGlvbiB0byB0YWtlIHRvbyBsb25nLiBzdWJtaXRBc3luYygpIHdpbGwgd3JhcCBpbiBhIFJ1bnRpbWVFeGNlcHRpb24uIGNhbid0IGFzc2VydAotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGNvbmRpdGlvbiBpbnNpZGUgdGhpcyB0aHJlYWQgb3IgdGhlIHRlc3QgbG9ja3MgdXAKLSAgICAgICAgICAgICAgICAgICAgaGFkRmFpbC5jb21wYXJlQW5kU2V0KGZhbHNlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICBsYXRjaC5jb3VudERvd24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSwgIndvcmtlci1zaG91bGRTdWNjZWVkV2l0aFNpbmdsZUNvbm5lY3Rpb25GYWlsdXJlT25Jbml0Iikuc3RhcnQoKTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSBvciByZXVzZSBzb21lIG1vcmUgY29ubmVjdGlvbnMKKyAgICAgICAgICAgIGNob29zZUNvbm5lY3Rpb25zKDQsIGNsaWVudCwgZXhlY3V0b3JTZXJ2aWNlRm9yVGVzdGluZyk7CiAKLSAgICAgICAgLy8gd2FpdCBmb3IgcmVxdWVzdHMgdG8gY29tcGxldGUKLSAgICAgICAgYXNzZXJ0VHJ1ZShsYXRjaC5hd2FpdCgzMDAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBleGVjdXRvclNlcnZpY2VGb3JUZXN0aW5nLnNodXRkb3duKCk7CisgICAgICAgICAgICBjbGllbnQuY2xvc2UoKTsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAvLyB3ZSBjYW4gc2VuZCBzb21lIHJlcXVlc3RzIGJlY2F1c2Ugd2UgaGF2ZSAzIGNyZWF0ZWQgY29ubmVjdGlvbnMKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dFcnJvcldpdGhIZWxwZnVsTWVzc2FnZVdoZW5JZGxlVGltZW91dFJlYWNoZWRCZWZvcmVSZXNwb25zZVJlY2VpdmVkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IGlkbGVNaWxsaXMgPSAxMDAwOworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpCisgICAgICAgICAgICAgICAgLmlkbGVDb25uZWN0aW9uVGltZW91dE1pbGxpcyhpZGxlTWlsbGlzKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKyAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOwogCi0gICAgICAgIC8vIG5vdCBleHBlY3RpbmcgYW55IGZhaWx1cmVzCi0gICAgICAgIGFzc2VydFRoYXQoaGFkRmFpbC5nZXQoKSwgaXMoZmFsc2UpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIlRocmVhZC5zbGVlcCgiICsgaWRsZU1pbGxpcyAqIDMgKyAiKSIsIHJvKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGZhaWwoIkV4cGVjdGVkIGV4Y2VwdGlvbiBkdWUgdG8gaWRsZSB0aW1lb3V0Iik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJJZGxlIHRpbWVvdXQgb2NjdXJyZWQgYmVmb3JlIHJlc3BvbnNlIGNvdWxkIGJlIHJlY2VpdmVkIGZyb20gc2VydmVyIC0gY29uc2lkZXIgaW5jcmVhc2luZyBpZGxlQ29ubmVjdGlvblRpbWVvdXQiKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbGllbnQuY2xvc2UoKTsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaG9vc2VDb25uZWN0aW9ucyhpbnQgb3BlcmF0aW9ucywgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvclNlcnZpY2VGb3JUZXN0aW5nKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIHJlcXVlc3QgPSBjbGllbnQuYnVpbGRNZXNzYWdlKFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLmluamVjdCgxKSIpKTsKKyAgICAgICAgZmluYWwgQ2FsbGFibGU8Q29ubmVjdGlvbj4gc2VuZFF1ZXJ5Q2FsbGFibGUgPSAoKSAtPiBjbGllbnQuY2hvb3NlQ29ubmVjdGlvbihyZXF1ZXN0LmNyZWF0ZSgpKTsKKyAgICAgICAgZmluYWwgTGlzdDxDYWxsYWJsZTxDb25uZWN0aW9uPj4gbGlzdE9mVGFza3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcGVyYXRpb25zOyBpKyspIHsKKyAgICAgICAgICAgIGxpc3RPZlRhc2tzLmFkZChzZW5kUXVlcnlDYWxsYWJsZSk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBMaXN0PEZ1dHVyZTxDb25uZWN0aW9uPj4gZXhlY3V0b3JTdWJtaXRGdXR1cmVzID0gZXhlY3V0b3JTZXJ2aWNlRm9yVGVzdGluZy5pbnZva2VBbGwobGlzdE9mVGFza3MpOworICAgICAgICBleGVjdXRvclN1Ym1pdEZ1dHVyZXMucGFyYWxsZWxTdHJlYW0oKS5tYXAoZnV0IC0+IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1dC5nZXQoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIHwgRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkuZm9yRWFjaChBc3NlcnQ6OmFzc2VydE5vdE51bGwpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzk2LDM1ICszOTcsNCBAQAogICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25GYWN0b3J5LnN1cGVyLmNyZWF0ZShwb29sKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIC8qKgotICAgICAqIEludHJvZHVjZXMgYSBmYWlsdXJlIGFmdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHtAbGluayBDb25uZWN0aW9ufSBpbnN0YW5jZSBhcmUgY3JlYXRlZCBmb3IgdGhlCi0gICAgICoge0BsaW5rIENvbm5lY3Rpb25Qb29sfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNpbmdsZUZhaWxDb25uZWN0aW9uRmFjdG9yeSBpbXBsZW1lbnRzIENvbm5lY3Rpb25GYWN0b3J5IHsKLQotICAgICAgICBwcml2YXRlIGludCBjb25uZWN0aW9uc0NyZWF0ZWQgPSAwOwotICAgICAgICBwcml2YXRlIGludCBmYWlsQWZ0ZXI7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBmYWlsZWRPbmNlID0gZmFsc2U7Ci0KLSAgICAgICAgcHVibGljIFNpbmdsZUZhaWxDb25uZWN0aW9uRmFjdG9yeShmaW5hbCBpbnQgZmFpbEFmdGVyKSB7Ci0gICAgICAgICAgICB0aGlzLmZhaWxBZnRlciA9IGZhaWxBZnRlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0Q29ubmVjdGlvbnNDcmVhdGVkKCkgewotICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb25zQ3JlYXRlZDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgQ29ubmVjdGlvbiBjcmVhdGUoZmluYWwgQ29ubmVjdGlvblBvb2wgcG9vbCkgewotICAgICAgICAgICAgaWYgKCFmYWlsZWRPbmNlICYmIGNvbm5lY3Rpb25zQ3JlYXRlZCA9PSBmYWlsQWZ0ZXIpIHsKLSAgICAgICAgICAgICAgICBmYWlsZWRPbmNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdGlvbkV4Y2VwdGlvbihwb29sLmhvc3QuZ2V0SG9zdFVyaSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNTTEhhbmRzaGFrZUV4Y2VwdGlvbigiV2UgYmlnIG1hZCBvbiBwdXJwb3NlIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29ubmVjdGlvbnNDcmVhdGVkKys7Ci0KLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uRmFjdG9yeS5zdXBlci5jcmVhdGUocG9vbCk7Ci0gICAgICAgIH0KLSAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9BYnN0cmFjdFJlbW90ZUdyYXBoUHJvdmlkZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0Fic3RyYWN0UmVtb3RlR3JhcGhQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzM4NTFmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0Fic3RyYWN0UmVtb3RlR3JhcGhQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uQWJzdHJhY3RHcmFwaFByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuQ29tcHV0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlJlbW90ZUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkdyZW1saW5TZXJ2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2VydmVyVGVzdEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5UZXN0Q2xpZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnByb2Nlc3MuY29tcHV0ZXIuVGlua2VyR3JhcGhDb21wdXRlcjsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5TdXBwbGllcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLlJlbW90ZUNvbm5lY3Rpb24uR1JFTUxJTl9SRU1PVEU7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvZmlsZVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyBmb3IgcHJvZmlsZSgpIGFyZSBub3Qgc3VwcG9ydGVkIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkxhbWJkYVN0ZXBUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkRlZHVwVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfYm90aF9uYW1lX29yZGVyX2J5WGFfYlhfZGVkdXBfdmFsdWUiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk9yZGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfbmFtZV9vcmRlcl9ieVhhMV9iMVhfYnlYYjJfYTJYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5PcmRlclRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX29yZGVyX2J5WG5hbWVfYTFfYjFYX2J5WG5hbWVfYjJfYTJYX25hbWUiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TYWNrVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX3dpdGhTYWNrWG1hcF9fbWFwX2Nsb25lWF9WX291dF9vdXRfc2Fja1htYXBfYV9uYW1lWF9zYWNrIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl93aXRoU2lkZUVmZmVjdFhzZ1hfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlN1YmdyYXBoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1Zfd2l0aFNpZGVFZmZlY3RYc2dYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF9zdWJncmFwaFhzZ1hfb3V0VlhfdGltZXNYNVhfbmFtZV9kZWR1cCIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlN1YmdyYXBoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX3dpdGhTaWRlRWZmZWN0WHNnWF9WX2hhc1huYW1lX2RhbmllbFhvdXRfY2FwWHNnWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5PcmRlcmFiaWxpdHlUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0X29yZGVyX3dpdGhfdW5rbm93bl90eXBlIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5qZWN0IGEgZ2VuZXJpYyBKYXZhIE9iamVjdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSZW1vdGVHcmFwaFByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RHcmFwaFByb3ZpZGVyIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgQVZBSUxBQkxFX1BST0NFU1NPUlMgPSBSdW50aW1lLmdldFJ1bnRpbWUoKS5hdmFpbGFibGVQcm9jZXNzb3JzKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0PENsYXNzPiBJTVBMRU1FTlRBVElPTiA9IG5ldyBIYXNoU2V0PENsYXNzPigpIHt7Ci0gICAgICAgIGFkZChSZW1vdGVHcmFwaC5jbGFzcyk7Ci0gICAgfX07Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBHcmVtbGluU2VydmVyIHNlcnZlcjsKLSAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFJlbW90ZUdyYXBoPiByZW1vdGVDYWNoZSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIENsdXN0ZXIgY2x1c3RlcjsKLSAgICBwcml2YXRlIGZpbmFsIENsaWVudCBjbGllbnQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIHVzZUNvbXB1dGVyOwotCi0KLSAgICBwdWJsaWMgQWJzdHJhY3RSZW1vdGVHcmFwaFByb3ZpZGVyKGZpbmFsIENsdXN0ZXIgY2x1c3RlcikgewotICAgICAgICB0aGlzKGNsdXN0ZXIsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQWJzdHJhY3RSZW1vdGVHcmFwaFByb3ZpZGVyKGZpbmFsIENsdXN0ZXIgY2x1c3RlciwgZmluYWwgYm9vbGVhbiB1c2VDb21wdXRlcikgewotICAgICAgICB0aGlzLmNsdXN0ZXIgPSBjbHVzdGVyOwotICAgICAgICB0aGlzLmNsaWVudCA9IHRoaXMuY2x1c3Rlci5jb25uZWN0KCk7Ci0gICAgICAgIHRoaXMudXNlQ29tcHV0ZXIgPSB1c2VDb21wdXRlcjsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHN0YXJ0U2VydmVyKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgc3RvcFNlcnZlcigpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaCBvcGVuVGVzdEdyYXBoKGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlnKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzZXJ2ZXJHcmFwaE5hbWUgPSBjb25maWcuZ2V0U3RyaW5nKERyaXZlclJlbW90ZUNvbm5lY3Rpb24uR1JFTUxJTl9SRU1PVEVfRFJJVkVSX1NPVVJDRU5BTUUpOwotICAgICAgICByZXR1cm4gcmVtb3RlQ2FjaGUuY29tcHV0ZUlmQWJzZW50KHNlcnZlckdyYXBoTmFtZSwKLSAgICAgICAgICAgICAgICBrIC0+IFJlbW90ZUdyYXBoLm9wZW4obmV3IERyaXZlclJlbW90ZUNvbm5lY3Rpb24oY2x1c3RlciwgY29uZmlnKSwgY29uZmlnKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QmFzZUNvbmZpZ3VyYXRpb24oZmluYWwgU3RyaW5nIGdyYXBoTmFtZSwgQ2xhc3M8Pz4gdGVzdCwgZmluYWwgU3RyaW5nIHRlc3RNZXRob2ROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExvYWRHcmFwaFdpdGguR3JhcGhEYXRhIGxvYWRHcmFwaFdpdGgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNlcnZlckdyYXBoTmFtZSA9IGdldFNlcnZlckdyYXBoTmFtZShsb2FkR3JhcGhXaXRoKTsKLQotICAgICAgICBmaW5hbCBTdXBwbGllcjxHcmFwaD4gZ3JhcGhHZXR0ZXIgPSAoKSAtPiBzZXJ2ZXIuZ2V0U2VydmVyR3JlbWxpbkV4ZWN1dG9yKCkuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0R3JhcGgoc2VydmVyR3JhcGhOYW1lKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoR3JhcGguR1JBUEgsIFJlbW90ZUdyYXBoLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBwdXQoUmVtb3RlQ29ubmVjdGlvbi5HUkVNTElOX1JFTU9URV9DT05ORUNUSU9OX0NMQVNTLCBEcml2ZXJSZW1vdGVDb25uZWN0aW9uLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBwdXQoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi5HUkVNTElOX1JFTU9URV9EUklWRVJfU09VUkNFTkFNRSwgImciICsgc2VydmVyR3JhcGhOYW1lKTsKLSAgICAgICAgICAgIHB1dCgiY2x1c3RlckNvbmZpZ3VyYXRpb24ucG9ydCIsIFRlc3RDbGllbnRGYWN0b3J5LlBPUlQpOwotICAgICAgICAgICAgcHV0KCJjbHVzdGVyQ29uZmlndXJhdGlvbi5ob3N0cyIsICJsb2NhbGhvc3QiKTsKLSAgICAgICAgICAgIHB1dChHUkVNTElOX1JFTU9URSArICJhdHRhY2htZW50IiwgZ3JhcGhHZXR0ZXIpOwotICAgICAgICB9fTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbGVhcihmaW5hbCBHcmFwaCBncmFwaCwgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gZG9lc24ndCBib3RoZXIgdG8gY2xlYXIgZ3JhdGVmdWwvc2luayBiZWNhdXNlIGkgZG9uJ3QgYmVsaWV2ZSB0aGF0IGV2ZXIgZ2V0cyBtdXRhdGVkIC0gcmVhZC1vbmx5Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoImNsYXNzaWMuY2xlYXIoKTttb2Rlcm4uY2xlYXIoKTtjcmV3LmNsZWFyKCk7Z3JhcGguY2xlYXIoKTsiICsKLSAgICAgICAgICAgICAgICAiVGlua2VyRmFjdG9yeS5nZW5lcmF0ZUNsYXNzaWMoY2xhc3NpYyk7IiArCi0gICAgICAgICAgICAgICAgIlRpbmtlckZhY3RvcnkuZ2VuZXJhdGVNb2Rlcm4obW9kZXJuKTsiICsKLSAgICAgICAgICAgICAgICAiVGlua2VyRmFjdG9yeS5nZW5lcmF0ZVRoZUNyZXcoY3Jldyk7bnVsbCIpLmFsbCgpLmdldCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGxvYWRHcmFwaERhdGEoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIExvYWRHcmFwaFdpdGggbG9hZEdyYXBoV2l0aCwgZmluYWwgQ2xhc3MgdGVzdENsYXNzLCBmaW5hbCBTdHJpbmcgdGVzdE5hbWUpIHsKLSAgICAgICAgLy8gc2VydmVyIGFscmVhZHkgbG9hZHMgd2l0aCB0aGUgYWxsIHRoZSBncmFwaCBpbnN0YW5jZXMgZm9yIExvYWRHcmFwaFdpdGgKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0PENsYXNzPiBnZXRJbXBsZW1lbnRhdGlvbnMoKSB7Ci0gICAgICAgIHJldHVybiBJTVBMRU1FTlRBVElPTjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgdHJhdmVyc2FsKGZpbmFsIEdyYXBoIGdyYXBoKSB7Ci0gICAgICAgIGFzc2VydCBncmFwaCBpbnN0YW5jZW9mIFJlbW90ZUdyYXBoOwotCi0gICAgICAgIC8vIGVuc3VyZSB0aGF0IHRyYXZlcnNhbCBpcyBjcmVhdGVkIHVzaW5nIHdpdGhSZW1vdGUoKSByYXRoZXIgdGhhbiBqdXN0IHVzaW5nIFJlbW90ZUdyYXBoLiB3aXRoUmVtb3RlKCkgaXMKLSAgICAgICAgLy8gdGhlIGFwcHJvcHJpYXRlIHdheSBmb3IgdXNlcnMgdG8gY3JlYXRlIGEgcmVtb3RlIHRyYXZlcnNhbC4gUmVtb3RlR3JhcGggaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgdXNlcnMKLSAgICAgICAgLy8gY29uY2VybnMgYW5kIHdpbGwgYmUgbGlrZWx5IHJlbGVnYXRlZCB0byB0aGUgdGVzdCBtb2R1bGUgc28gdGhhdCBPcHRPdXQgY2FuIGNvbnRpbnVlIHRvIHdvcmsgYW5kIHdlIGNhbgotICAgICAgICAvLyBmdWxsIGV4ZWN1dGUgdGhlIHByb2Nlc3MgdGVzdHMuIHdlIHNob3VsZCBiZSBhYmxlIHRvIGNsZWFuIHRoaXMgdXAgY29uc2lkZXJhYmx5IHdoZW4gUmVtb3RlR3JhcGggY2FuIGJlCi0gICAgICAgIC8vIG1vdmVkIHdpdGggYnJlYWtpbmcgY2hhbmdlLgotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUoKChSZW1vdGVHcmFwaCkgZ3JhcGgpLmdldENvbm5lY3Rpb24oKSk7Ci0KLSAgICAgICAgaWYgKHVzZUNvbXB1dGVyKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgc3RhdGUgPSBUZXN0SGVscGVyLlJBTkRPTS5uZXh0SW50KDMpOwotICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGcud2l0aENvbXB1dGVyKCk7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZy53aXRoQ29tcHV0ZXIoQ29tcHV0ZXIuY29tcHV0ZShUaW5rZXJHcmFwaENvbXB1dGVyLmNsYXNzKSk7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZy53aXRoQ29tcHV0ZXIoQ29tcHV0ZXIuY29tcHV0ZShUaW5rZXJHcmFwaENvbXB1dGVyLmNsYXNzKS53b3JrZXJzKFRlc3RIZWxwZXIuUkFORE9NLm5leHRJbnQoQVZBSUxBQkxFX1BST0NFU1NPUlMpICsgMSkpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRoaXMgc3RhdGUgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkOiAiICsgc3RhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGc7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBDbHVzdGVyLkJ1aWxkZXIgY3JlYXRlQ2x1c3RlckJ1aWxkZXIoZmluYWwgU2VyaWFsaXplcnMgc2VyaWFsaXplcikgewotICAgICAgICAvLyBtYXRjaCB0aGUgY29udGVudCBsZW5ndGggaW4gdGhlIHNlcnZlciB5YW1sCi0gICAgICAgIHJldHVybiBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLm1heENvbnRlbnRMZW5ndGgoMTAwMDAwMCkuc2VyaWFsaXplcihzZXJpYWxpemVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc3RhcnRTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgSW5wdXRTdHJlYW0gc3RyZWFtID0gR3JlbWxpblNlcnZlci5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKCJncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sIik7Ci0gICAgICAgIGZpbmFsIFNldHRpbmdzIHNldHRpbmdzID0gU2V0dGluZ3MucmVhZChzdHJlYW0pOwotICAgICAgICBTZXJ2ZXJUZXN0SGVscGVyLnJld3JpdGVQYXRoc0luR3JlbWxpblNlcnZlclNldHRpbmdzKHNldHRpbmdzKTsKLQotICAgICAgICBzZXR0aW5ncy5tYXhDb250ZW50TGVuZ3RoID0gMTAyNDAwMDsKLSAgICAgICAgc2V0dGluZ3MubWF4Q2h1bmtTaXplID0gMTAyNDAwMDsKLQotICAgICAgICBzZXJ2ZXIgPSBuZXcgR3JlbWxpblNlcnZlcihzZXR0aW5ncyk7Ci0KLSAgICAgICAgc2VydmVyLnN0YXJ0KCkuZ2V0KDEwMCwgVGltZVVuaXQuU0VDT05EUyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHN0b3BTZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc2VydmVyLnN0b3AoKS5nZXQoMTAwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLSAgICAgICAgc2VydmVyID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U2VydmVyR3JhcGhOYW1lKGZpbmFsIExvYWRHcmFwaFdpdGguR3JhcGhEYXRhIGxvYWRHcmFwaFdpdGgpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNlcnZlckdyYXBoTmFtZTsKLQotICAgICAgICBpZiAobnVsbCA9PSBsb2FkR3JhcGhXaXRoKSByZXR1cm4gImdyYXBoIjsKLQotICAgICAgICBzd2l0Y2ggKGxvYWRHcmFwaFdpdGgpIHsKLSAgICAgICAgICAgIGNhc2UgQ0xBU1NJQzoKLSAgICAgICAgICAgICAgICBzZXJ2ZXJHcmFwaE5hbWUgPSAiY2xhc3NpYyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1PREVSTjoKLSAgICAgICAgICAgICAgICBzZXJ2ZXJHcmFwaE5hbWUgPSAibW9kZXJuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgR1JBVEVGVUw6Ci0gICAgICAgICAgICAgICAgc2VydmVyR3JhcGhOYW1lID0gImdyYXRlZnVsIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1JFVzoKLSAgICAgICAgICAgICAgICBzZXJ2ZXJHcmFwaE5hbWUgPSAiY3JldyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNJTks6Ci0gICAgICAgICAgICAgICAgc2VydmVyR3JhcGhOYW1lID0gInNpbmsiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBzZXJ2ZXJHcmFwaE5hbWUgPSAiZ3JhcGgiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzZXJ2ZXJHcmFwaE5hbWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlHcm9vdnlSZW1vdGVGZWF0dXJlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlHcm9vdnlSZW1vdGVGZWF0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZGM3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeUdyb292eVJlbW90ZUZlYXR1cmVUZXN0LmphdmEKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlOworCitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuQWJzdHJhY3RNb2R1bGU7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuR3VpY2U7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuU3RhZ2U7CitpbXBvcnQgaW8uY3VjdW1iZXIuZ3VpY2UuQ3VjdW1iZXJNb2R1bGVzOworaW1wb3J0IGlvLmN1Y3VtYmVyLmp1bml0LkN1Y3VtYmVyOworaW1wb3J0IGlvLmN1Y3VtYmVyLmp1bml0LkN1Y3VtYmVyT3B0aW9uczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLkFic3RyYWN0R3VpY2VGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMuV29ybGQ7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworCitAUnVuV2l0aChDdWN1bWJlci5jbGFzcykKK0BDdWN1bWJlck9wdGlvbnMoCisgICAgICAgIHRhZ3MgPSAibm90IEBHcmFwaENvbXB1dGVyT25seSBhbmQgbm90IEBBbGxvd051bGxQcm9wZXJ0eVZhbHVlcyIsCisgICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAorICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3JhcGhCaW5hcnlHcm9vdnlSZW1vdGVGZWF0dXJlVGVzdC5SZW1vdGVHdWljZUZhY3RvcnkuY2xhc3MsCisgICAgICAgIGZlYXR1cmVzID0geyAiY2xhc3NwYXRoOi9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMiIH0sCisgICAgICAgIHBsdWdpbiA9IHsicHJvZ3Jlc3MiLCAianVuaXQ6dGFyZ2V0L2N1Y3VtYmVyLnhtbCJ9KQorcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5R3Jvb3Z5UmVtb3RlRmVhdHVyZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEZlYXR1cmVUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJlbW90ZUd1aWNlRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0R3VpY2VGYWN0b3J5IHsKKyAgICAgICAgcHVibGljIFJlbW90ZUd1aWNlRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHN1cGVyKEd1aWNlLmNyZWF0ZUluamVjdG9yKFN0YWdlLlBST0RVQ1RJT04sIEN1Y3VtYmVyTW9kdWxlcy5jcmVhdGVTY2VuYXJpb01vZHVsZSgpLCBuZXcgU2VydmljZU1vZHVsZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBBYnN0cmFjdE1vZHVsZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmUoKSB7CisgICAgICAgICAgICBiaW5kKFdvcmxkLmNsYXNzKS50byhSZW1vdGVXb3JsZC5HcmFwaEJpbmFyeUdyb292eVJlbW90ZVdvcmxkLmNsYXNzKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoQmluYXJ5R3Jvb3Z5UmVtb3RlUGFyYW1ldGVyaXplZEZlYXR1cmVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeUdyb292eVJlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjM4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeUdyb292eVJlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKKworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkFic3RyYWN0TW9kdWxlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0Lkd1aWNlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlN0YWdlOworaW1wb3J0IGlvLmN1Y3VtYmVyLmd1aWNlLkN1Y3VtYmVyTW9kdWxlczsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlcjsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlck9wdGlvbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5BYnN0cmFjdEd1aWNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLldvcmxkOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKKworQFJ1bldpdGgoQ3VjdW1iZXIuY2xhc3MpCitAQ3VjdW1iZXJPcHRpb25zKAorICAgICAgICB0YWdzID0gIm5vdCBAR3JhcGhDb21wdXRlck9ubHkgYW5kIG5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMgYW5kIG5vdCBAR3JlbWxpbkdyb292eU5vdFN1cHBvcnRlZCIsCisgICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAorICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3JhcGhCaW5hcnlHcm9vdnlSZW1vdGVQYXJhbWV0ZXJpemVkRmVhdHVyZVRlc3QuUmVtb3RlR3VpY2VGYWN0b3J5LmNsYXNzLAorICAgICAgICBmZWF0dXJlcyA9IHsgImNsYXNzcGF0aDovb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzIiB9LAorICAgICAgICBwbHVnaW4gPSB7InByb2dyZXNzIiwgImp1bml0OnRhcmdldC9jdWN1bWJlci54bWwifSkKK3B1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeUdyb292eVJlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdCBleHRlbmRzIEFic3RyYWN0RmVhdHVyZVRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVtb3RlR3VpY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RHdWljZUZhY3RvcnkgeworICAgICAgICBwdWJsaWMgUmVtb3RlR3VpY2VGYWN0b3J5KCkgeworICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VydmljZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0TW9kdWxlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgIGJpbmQoV29ybGQuY2xhc3MpLnRvKFJlbW90ZVdvcmxkLkdyYXBoQmluYXJ5R3Jvb3Z5UGFyYW1ldGVyaXplZFJlbW90ZVdvcmxkLmNsYXNzKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoQmluYXJ5TGFuZ0J1bGtlZFJlbW90ZUZlYXR1cmVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeUxhbmdCdWxrZWRSZW1vdGVGZWF0dXJlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTdkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeUxhbmdCdWxrZWRSZW1vdGVGZWF0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKKworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkFic3RyYWN0TW9kdWxlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0Lkd1aWNlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlN0YWdlOworaW1wb3J0IGlvLmN1Y3VtYmVyLmd1aWNlLkN1Y3VtYmVyTW9kdWxlczsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlcjsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlck9wdGlvbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5BYnN0cmFjdEd1aWNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLldvcmxkOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKKworQFJ1bldpdGgoQ3VjdW1iZXIuY2xhc3MpCitAQ3VjdW1iZXJPcHRpb25zKAorICAgICAgICB0YWdzID0gIm5vdCBAR3JhcGhDb21wdXRlck9ubHkgYW5kIG5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMiLAorICAgICAgICBnbHVlID0geyAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcyIgfSwKKyAgICAgICAgb2JqZWN0RmFjdG9yeSA9IEdyYXBoQmluYXJ5TGFuZ0J1bGtlZFJlbW90ZUZlYXR1cmVUZXN0LlJlbW90ZUd1aWNlRmFjdG9yeS5jbGFzcywKKyAgICAgICAgZmVhdHVyZXMgPSB7ICJjbGFzc3BhdGg6L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcyIgfSwKKyAgICAgICAgcGx1Z2luID0geyJwcm9ncmVzcyIsICJqdW5pdDp0YXJnZXQvY3VjdW1iZXIueG1sIn0pCitwdWJsaWMgY2xhc3MgR3JhcGhCaW5hcnlMYW5nQnVsa2VkUmVtb3RlRmVhdHVyZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEZlYXR1cmVUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJlbW90ZUd1aWNlRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0R3VpY2VGYWN0b3J5IHsKKyAgICAgICAgcHVibGljIFJlbW90ZUd1aWNlRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHN1cGVyKEd1aWNlLmNyZWF0ZUluamVjdG9yKFN0YWdlLlBST0RVQ1RJT04sIEN1Y3VtYmVyTW9kdWxlcy5jcmVhdGVTY2VuYXJpb01vZHVsZSgpLCBuZXcgU2VydmljZU1vZHVsZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBBYnN0cmFjdE1vZHVsZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmUoKSB7CisgICAgICAgICAgICBiaW5kKFdvcmxkLmNsYXNzKS50byhSZW1vdGVXb3JsZC5HcmFwaEJpbmFyeUxhbmdCdWxrZWRSZW1vdGVXb3JsZC5jbGFzcyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeUxhbmdSZW1vdGVGZWF0dXJlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlMYW5nUmVtb3RlRmVhdHVyZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYwMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlMYW5nUmVtb3RlRmVhdHVyZVRlc3QuamF2YQpAQCAtMCwwICsxLDUxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGU7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5BYnN0cmFjdE1vZHVsZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5HdWljZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5TdGFnZTsKK2ltcG9ydCBpby5jdWN1bWJlci5ndWljZS5DdWN1bWJlck1vZHVsZXM7CitpbXBvcnQgaW8uY3VjdW1iZXIuanVuaXQuQ3VjdW1iZXI7CitpbXBvcnQgaW8uY3VjdW1iZXIuanVuaXQuQ3VjdW1iZXJPcHRpb25zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMuQWJzdHJhY3RHdWljZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5Xb3JsZDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CisKK0BSdW5XaXRoKEN1Y3VtYmVyLmNsYXNzKQorQEN1Y3VtYmVyT3B0aW9ucygKKyAgICAgICAgdGFncyA9ICJub3QgQEdyYXBoQ29tcHV0ZXJPbmx5IGFuZCBub3QgQEFsbG93TnVsbFByb3BlcnR5VmFsdWVzIGFuZCBub3QgQFN0ZXBTdWJncmFwaCIsIC8vIFRJTktFUlBPUC0zMTU0CisgICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAorICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3JhcGhCaW5hcnlMYW5nUmVtb3RlRmVhdHVyZVRlc3QuUmVtb3RlR3VpY2VGYWN0b3J5LmNsYXNzLAorICAgICAgICBmZWF0dXJlcyA9IHsgImNsYXNzcGF0aDovb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzIiB9LAorICAgICAgICBwbHVnaW4gPSB7InByb2dyZXNzIiwgImp1bml0OnRhcmdldC9jdWN1bWJlci54bWwifSkKK3B1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeUxhbmdSZW1vdGVGZWF0dXJlVGVzdCBleHRlbmRzIEFic3RyYWN0RmVhdHVyZVRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVtb3RlR3VpY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RHdWljZUZhY3RvcnkgeworICAgICAgICBwdWJsaWMgUmVtb3RlR3VpY2VGYWN0b3J5KCkgeworICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VydmljZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0TW9kdWxlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgIGJpbmQoV29ybGQuY2xhc3MpLnRvKFJlbW90ZVdvcmxkLkdyYXBoQmluYXJ5TGFuZ1JlbW90ZVdvcmxkLmNsYXNzKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoQmluYXJ5TGFuZ1JlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlMYW5nUmVtb3RlUGFyYW1ldGVyaXplZEZlYXR1cmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlNmNmYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoQmluYXJ5TGFuZ1JlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKKworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkFic3RyYWN0TW9kdWxlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0Lkd1aWNlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlN0YWdlOworaW1wb3J0IGlvLmN1Y3VtYmVyLmd1aWNlLkN1Y3VtYmVyTW9kdWxlczsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlcjsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlck9wdGlvbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5BYnN0cmFjdEd1aWNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLldvcmxkOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKKworQFJ1bldpdGgoQ3VjdW1iZXIuY2xhc3MpCitAQ3VjdW1iZXJPcHRpb25zKAorICAgICAgICB0YWdzID0gIm5vdCBAR3JhcGhDb21wdXRlck9ubHkgYW5kIG5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMiLAorICAgICAgICBnbHVlID0geyAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcyIgfSwKKyAgICAgICAgb2JqZWN0RmFjdG9yeSA9IEdyYXBoQmluYXJ5TGFuZ1JlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5SZW1vdGVHdWljZUZhY3RvcnkuY2xhc3MsCisgICAgICAgIGZlYXR1cmVzID0geyAiY2xhc3NwYXRoOi9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMiIH0sCisgICAgICAgIHBsdWdpbiA9IHsicHJvZ3Jlc3MiLCAianVuaXQ6dGFyZ2V0L2N1Y3VtYmVyLnhtbCJ9KQorcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5TGFuZ1JlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdCBleHRlbmRzIEFic3RyYWN0RmVhdHVyZVRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVtb3RlR3VpY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RHdWljZUZhY3RvcnkgeworICAgICAgICBwdWJsaWMgUmVtb3RlR3VpY2VGYWN0b3J5KCkgeworICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VydmljZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0TW9kdWxlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgIGJpbmQoV29ybGQuY2xhc3MpLnRvKFJlbW90ZVdvcmxkLkdyYXBoQmluYXJ5TGFuZ1BhcmFtZXRlcml6ZWRSZW1vdGVXb3JsZC5jbGFzcyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUZlYXR1cmVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUZlYXR1cmVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMGEyOTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlSZW1vdGVGZWF0dXJlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlOwotCi1pbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuQWJzdHJhY3RNb2R1bGU7Ci1pbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuR3VpY2U7Ci1pbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuU3RhZ2U7Ci1pbXBvcnQgaW8uY3VjdW1iZXIuZ3VpY2UuQ3VjdW1iZXJNb2R1bGVzOwotaW1wb3J0IGlvLmN1Y3VtYmVyLmp1bml0LkN1Y3VtYmVyOwotaW1wb3J0IGlvLmN1Y3VtYmVyLmp1bml0LkN1Y3VtYmVyT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLkFic3RyYWN0R3VpY2VGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMuV29ybGQ7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1AUnVuV2l0aChDdWN1bWJlci5jbGFzcykKLUBDdWN1bWJlck9wdGlvbnMoCi0gICAgICAgIHRhZ3MgPSAibm90IEBHcmFwaENvbXB1dGVyT25seSBhbmQgbm90IEBBbGxvd051bGxQcm9wZXJ0eVZhbHVlcyIsCi0gICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAotICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3JhcGhCaW5hcnlSZW1vdGVGZWF0dXJlVGVzdC5SZW1vdGVHdWljZUZhY3RvcnkuY2xhc3MsCi0gICAgICAgIGZlYXR1cmVzID0geyAiY2xhc3NwYXRoOi9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMiIH0sCi0gICAgICAgIHBsdWdpbiA9IHsicHJvZ3Jlc3MiLCAianVuaXQ6dGFyZ2V0L2N1Y3VtYmVyLnhtbCJ9KQotcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5UmVtb3RlRmVhdHVyZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEZlYXR1cmVUZXN0IHsKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJlbW90ZUd1aWNlRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0R3VpY2VGYWN0b3J5IHsKLSAgICAgICAgcHVibGljIFJlbW90ZUd1aWNlRmFjdG9yeSgpIHsKLSAgICAgICAgICAgIHN1cGVyKEd1aWNlLmNyZWF0ZUluamVjdG9yKFN0YWdlLlBST0RVQ1RJT04sIEN1Y3VtYmVyTW9kdWxlcy5jcmVhdGVTY2VuYXJpb01vZHVsZSgpLCBuZXcgU2VydmljZU1vZHVsZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBBYnN0cmFjdE1vZHVsZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmUoKSB7Ci0gICAgICAgICAgICBiaW5kKFdvcmxkLmNsYXNzKS50byhSZW1vdGVXb3JsZC5HcmFwaEJpbmFyeVJlbW90ZVdvcmxkLmNsYXNzKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoQmluYXJ5UmVtb3RlR3JhcGhDb21wdXRlclByb3ZpZGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoQ29tcHV0ZXJQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM0ZmM0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoQmluYXJ5UmVtb3RlR3JhcGhDb21wdXRlclByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnByb2Nlc3MuY29tcHV0ZXIuVGlua2VyR3JhcGhDb21wdXRlcjsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5BZGRFZGdlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBhZGRFZGdlKCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLkNob29zZVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3RYMVhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLkNob29zZVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3RYMlhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9WWHNvZnR3YXJlWF9hZGRJbkVYdXNlc19wWCIsCi0gICAgICAgIHJlYXNvbiA9ICJNaWQtdHJhdmVyc2FsIFYoKS9FKCkgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9oYXNYbmFtZV9HYXJjaWFYX2luWHN1bmdCeVhfYXNYc29uZ1hfVl9oYXNYbmFtZV9XaWxsaWVfRGl4b25YX2luWHdyaXR0ZW5CeVhfd2hlcmVYZXFYc29uZ1hYX25hbWUiLAotICAgICAgICByZWFzb24gPSAiTWlkLXRyYXZlcnNhbCBWKCkvRSgpIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1Zfb3V0WGtub3dzWF9WX25hbWUiLAotICAgICAgICByZWFzb24gPSAiTWlkLXRyYXZlcnNhbCBWKCkvRSgpIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZYMVhfVl92YWx1ZXNYbmFtZVgiLAotICAgICAgICByZWFzb24gPSAiTWlkLXRyYXZlcnNhbCBWKCkvRSgpIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkVkZ2VUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiTWlkLXRyYXZlcnNhbCBWKCkvRSgpIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5JbmplY3RUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiVGhlIGluamVjdCgpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX3dpdGhTYWNrWDFYX2luamVjdFgxWF9yZXBlYXRYc2Fja1hzdW1YX2J5WGNvbnN0YW50WDFYWFhfdGltZXNYNVhfZW1pdF9tYXRoWHNpbl9fWF9ieVhzYWNrWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1pblRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX2Zvb19pbmplY3RYOTk5OTk5OTk5OVhfbWluIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guT3B0aW9uYWxUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVlgxWF9vcHRpb25hbFhhZGRWWGRvZ1hYX2xhYmVsIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBhZGRWKCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlNpbXBsZVBhdGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NpbXBsZVBhdGhfYnlYbGFiZWxYX2Zyb21YYlhfdG9YY1hfcGF0aF9ieVhuYW1lWCIsCi0gICAgICAgIHJlYXNvbiA9ICJJdCBpcyBub3QgcG9zc2libGUgdG8gYWNjZXNzIG1vcmUgdGhhbiBhIHBhdGggZWxlbWVudCdzIGlkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlZlcnRleFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX2hhc0xhYmVsWHBlcnNvblhfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJNaWQtdHJhdmVyc2FsIFYoKS9FKCkgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WX291dF9iYXJyaWVyX3NhY2siLAotICAgICAgICByZWFzb24gPSAiT25lIGJ1bGsgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dEVYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYX2luVlhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjayIsCi0gICAgICAgIHJlYXNvbiA9ICJPbmUgYnVsayBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBvbiBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9wZXJ0aWVzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFhnX1ZYMVhfcHJvcGVydGllc1huYW1lWF9uZXh0WF92YWx1ZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlN1bVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3RYbnVsbF8xMF81X251bGxYX3N1bSIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlN1bVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3RYbGlzdFhudWxsXzEwXzVfbnVsbFhYX3N1bVhsb2NhbFgiLAotICAgICAgICByZWFzb24gPSAiVGhlIGluamVjdCgpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NZWFuVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFhsaXN0WG51bGxfMTBfMjBfbnVsbFhYX21lYW5YbG9jYWxYIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU2VsZWN0VGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX3dpdGhTaWRlRWZmZWN0WGtfbnVsbFhfaW5qZWN0WHhYX3NlbGVjdFhrWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lYW5UZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0WG51bGxfMTBfMjBfbnVsbFhfbWVhbiIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlYWRUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiVGhlIGlvKCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGdlbmVyYWxseSBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Xcml0ZVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW8oKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgZ2VuZXJhbGx5IGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkhhc1Rlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX2hhc1hrX3dpdGhpblhjWFhfdmFsdWVzWGtYIiwKLSAgICAgICAgcmVhc29uID0gIlJlcXVpcmVzIHNvbWUgdGVzdCBkYXRhIGluaXRpYWxpemF0aW9uIHdpdGggYWRkVigpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5IYXNUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJYWCIsCi0gICAgICAgIHJlYXNvbiA9ICJSZXF1aXJlcyBzb21lIHRlc3QgZGF0YSBpbml0aWFsaXphdGlvbiB3aXRoIGFkZFYoKSIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuSGFzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfaGFzWG5hbWVfcmVnZXhYVGlua2VyVW5pY29kZVhYIiwKLSAgICAgICAgcmVhc29uID0gIlJlcXVpcmVzIHNvbWUgdGVzdCBkYXRhIGluaXRpYWxpemF0aW9uIHdpdGggYWRkVigpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QYXRoVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFgxX251bGxfbnVsbFhfcGF0aCIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlBhdGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0WDFfbnVsbF9udWxsWF9wYXRoX2RlZHVwIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGhQcm92aWRlci5EZXNjcmlwdG9yKGNvbXB1dGVyID0gVGlua2VyR3JhcGhDb21wdXRlci5jbGFzcykKLXB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeVJlbW90ZUdyYXBoQ29tcHV0ZXJQcm92aWRlciBleHRlbmRzIEFic3RyYWN0UmVtb3RlR3JhcGhQcm92aWRlciB7Ci0KLSAgICBwdWJsaWMgR3JhcGhCaW5hcnlSZW1vdGVHcmFwaENvbXB1dGVyUHJvdmlkZXIoKSB7Ci0gICAgICAgIHN1cGVyKGNyZWF0ZUNsdXN0ZXJCdWlsZGVyKFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1YxKS5jcmVhdGUoKSwgdHJ1ZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhCaW5hcnlSZW1vdGVHcmFwaFByb3ZpZGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2MGY0Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXplcnM7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgR3JhcGhCaW5hcnlSZW1vdGVHcmFwaFByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RSZW1vdGVHcmFwaFByb3ZpZGVyIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7Ci0gICAgcHVibGljIEdyYXBoQmluYXJ5UmVtb3RlR3JhcGhQcm92aWRlcigpIHsKLSAgICAgICAgc3VwZXIoY3JlYXRlQ2x1c3RlckJ1aWxkZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpLmNyZWF0ZSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaFNPTkxhbmdSZW1vdGVGZWF0dXJlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05MYW5nUmVtb3RlRmVhdHVyZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWMzMmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05MYW5nUmVtb3RlRmVhdHVyZVRlc3QuamF2YQpAQCAtMCwwICsxLDUxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGU7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5BYnN0cmFjdE1vZHVsZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5HdWljZTsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5TdGFnZTsKK2ltcG9ydCBpby5jdWN1bWJlci5ndWljZS5DdWN1bWJlck1vZHVsZXM7CitpbXBvcnQgaW8uY3VjdW1iZXIuanVuaXQuQ3VjdW1iZXI7CitpbXBvcnQgaW8uY3VjdW1iZXIuanVuaXQuQ3VjdW1iZXJPcHRpb25zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMuQWJzdHJhY3RHdWljZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5Xb3JsZDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CisKK0BSdW5XaXRoKEN1Y3VtYmVyLmNsYXNzKQorQEN1Y3VtYmVyT3B0aW9ucygKKyAgICAgICAgdGFncyA9ICJub3QgQEdyYXBoQ29tcHV0ZXJPbmx5IGFuZCBub3QgQEFsbG93TnVsbFByb3BlcnR5VmFsdWVzIGFuZCBub3QgQFN0ZXBTdWJncmFwaCIsCisgICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAorICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3JhcGhTT05MYW5nUmVtb3RlRmVhdHVyZVRlc3QuUmVtb3RlR3VpY2VGYWN0b3J5LmNsYXNzLAorICAgICAgICBmZWF0dXJlcyA9IHsgImNsYXNzcGF0aDovb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzIiB9LAorICAgICAgICBwbHVnaW4gPSB7InByb2dyZXNzIiwgImp1bml0OnRhcmdldC9jdWN1bWJlci54bWwifSkKK3B1YmxpYyBjbGFzcyBHcmFwaFNPTkxhbmdSZW1vdGVGZWF0dXJlVGVzdCBleHRlbmRzIEFic3RyYWN0RmVhdHVyZVRlc3QgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVtb3RlR3VpY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RHdWljZUZhY3RvcnkgeworICAgICAgICBwdWJsaWMgUmVtb3RlR3VpY2VGYWN0b3J5KCkgeworICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VydmljZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0TW9kdWxlIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgICAgIGJpbmQoV29ybGQuY2xhc3MpLnRvKFJlbW90ZVdvcmxkLkdyYXBoU09OTGFuZ1JlbW90ZVdvcmxkLmNsYXNzKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoU09OTGFuZ1JlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05MYW5nUmVtb3RlUGFyYW1ldGVyaXplZEZlYXR1cmVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmMjEwOQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoU09OTGFuZ1JlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKKworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkFic3RyYWN0TW9kdWxlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0Lkd1aWNlOworaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlN0YWdlOworaW1wb3J0IGlvLmN1Y3VtYmVyLmd1aWNlLkN1Y3VtYmVyTW9kdWxlczsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlcjsKK2ltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlck9wdGlvbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5BYnN0cmFjdEd1aWNlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLldvcmxkOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKKworQFJ1bldpdGgoQ3VjdW1iZXIuY2xhc3MpCitAQ3VjdW1iZXJPcHRpb25zKAorICAgICAgICB0YWdzID0gIm5vdCBAR3JhcGhDb21wdXRlck9ubHkgYW5kIG5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMgYW5kIG5vdCBAU3RlcFN1YmdyYXBoIiwKKyAgICAgICAgZ2x1ZSA9IHsgIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMiIH0sCisgICAgICAgIG9iamVjdEZhY3RvcnkgPSBHcmFwaFNPTkxhbmdSZW1vdGVQYXJhbWV0ZXJpemVkRmVhdHVyZVRlc3QuUmVtb3RlR3VpY2VGYWN0b3J5LmNsYXNzLAorICAgICAgICBmZWF0dXJlcyA9IHsgImNsYXNzcGF0aDovb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzIiB9LAorICAgICAgICBwbHVnaW4gPSB7InByb2dyZXNzIiwgImp1bml0OnRhcmdldC9jdWN1bWJlci54bWwifSkKK3B1YmxpYyBjbGFzcyBHcmFwaFNPTkxhbmdSZW1vdGVQYXJhbWV0ZXJpemVkRmVhdHVyZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEZlYXR1cmVUZXN0IHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJlbW90ZUd1aWNlRmFjdG9yeSBleHRlbmRzIEFic3RyYWN0R3VpY2VGYWN0b3J5IHsKKyAgICAgICAgcHVibGljIFJlbW90ZUd1aWNlRmFjdG9yeSgpIHsKKyAgICAgICAgICAgIHN1cGVyKEd1aWNlLmNyZWF0ZUluamVjdG9yKFN0YWdlLlBST0RVQ1RJT04sIEN1Y3VtYmVyTW9kdWxlcy5jcmVhdGVTY2VuYXJpb01vZHVsZSgpLCBuZXcgU2VydmljZU1vZHVsZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBBYnN0cmFjdE1vZHVsZSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmUoKSB7CisgICAgICAgICAgICBiaW5kKFdvcmxkLmNsYXNzKS50byhSZW1vdGVXb3JsZC5HcmFwaFNPTkxhbmdQYXJhbWV0ZXJpemVkUmVtb3RlV29ybGQuY2xhc3MpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05SZW1vdGVGZWF0dXJlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05SZW1vdGVGZWF0dXJlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDk2OTVhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoU09OUmVtb3RlRmVhdHVyZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKLQotaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkFic3RyYWN0TW9kdWxlOwotaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0Lkd1aWNlOwotaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LlN0YWdlOwotaW1wb3J0IGlvLmN1Y3VtYmVyLmd1aWNlLkN1Y3VtYmVyTW9kdWxlczsKLWltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlcjsKLWltcG9ydCBpby5jdWN1bWJlci5qdW5pdC5DdWN1bWJlck9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5BYnN0cmFjdEd1aWNlRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLldvcmxkOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotQFJ1bldpdGgoQ3VjdW1iZXIuY2xhc3MpCi1AQ3VjdW1iZXJPcHRpb25zKAotICAgICAgICB0YWdzID0gIm5vdCBAR3JhcGhDb21wdXRlck9ubHkgYW5kIG5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMgYW5kIG5vdCBAU3RlcFN1YmdyYXBoIiwgLy8gVElOS0VSUE9QLTMxNTQKLSAgICAgICAgZ2x1ZSA9IHsgIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMiIH0sCi0gICAgICAgIG9iamVjdEZhY3RvcnkgPSBHcmFwaFNPTlJlbW90ZUZlYXR1cmVUZXN0LlJlbW90ZUd1aWNlRmFjdG9yeS5jbGFzcywKLSAgICAgICAgZmVhdHVyZXMgPSB7ICJjbGFzc3BhdGg6L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcyIgfSwKLSAgICAgICAgcGx1Z2luID0geyJwcm9ncmVzcyIsICJqdW5pdDp0YXJnZXQvY3VjdW1iZXIueG1sIn0pCi1wdWJsaWMgY2xhc3MgR3JhcGhTT05SZW1vdGVGZWF0dXJlVGVzdCBleHRlbmRzIEFic3RyYWN0RmVhdHVyZVRlc3QgewotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVtb3RlR3VpY2VGYWN0b3J5IGV4dGVuZHMgQWJzdHJhY3RHdWljZUZhY3RvcnkgewotICAgICAgICBwdWJsaWMgUmVtb3RlR3VpY2VGYWN0b3J5KCkgewotICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VydmljZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0TW9kdWxlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZSgpIHsKLSAgICAgICAgICAgIGJpbmQoV29ybGQuY2xhc3MpLnRvKFJlbW90ZVdvcmxkLkdyYXBoU09OUmVtb3RlV29ybGQuY2xhc3MpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05SZW1vdGVHcmFwaENvbXB1dGVyUHJvdmlkZXIuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL0dyYXBoU09OUmVtb3RlR3JhcGhDb21wdXRlclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMjA5MzMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05SZW1vdGVHcmFwaENvbXB1dGVyUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGgucHJvY2Vzcy5jb21wdXRlci5UaW5rZXJHcmFwaENvbXB1dGVyOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkFkZEVkZ2VUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiVGhlIGFkZEVkZ2UoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guQ2hvb3NlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFgxWF9jaG9vc2VYaXNYMVhfX2NvbnN0YW50WDEwWGZvbGRfX2ZvbGRYIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guQ2hvb3NlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFgyWF9jaG9vc2VYaXNYMVhfX2NvbnN0YW50WDEwWGZvbGRfX2ZvbGRYIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX1ZYc29mdHdhcmVYX2FkZEluRVh1c2VzX3BYIiwKLSAgICAgICAgcmVhc29uID0gIk1pZC10cmF2ZXJzYWwgVigpL0UoKSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBvbiBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5HcmFwaFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX2hhc1huYW1lX0dhcmNpYVhfaW5Yc3VuZ0J5WF9hc1hzb25nWF9WX2hhc1huYW1lX1dpbGxpZV9EaXhvblhfaW5Yd3JpdHRlbkJ5WF93aGVyZVhlcVhzb25nWFhfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJNaWQtdHJhdmVyc2FsIFYoKS9FKCkgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9vdXRYa25vd3NYX1ZfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJNaWQtdHJhdmVyc2FsIFYoKS9FKCkgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVlgxWF9WX3ZhbHVlc1huYW1lWCIsCi0gICAgICAgIHJlYXNvbiA9ICJNaWQtdHJhdmVyc2FsIFYoKS9FKCkgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRWRnZVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJNaWQtdHJhdmVyc2FsIFYoKS9FKCkgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkluamVjdFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNhY2tYMVhfaW5qZWN0WDFYX3JlcGVhdFhzYWNrWHN1bVhfYnlYY29uc3RhbnRYMVhYWF90aW1lc1g1WF9lbWl0X21hdGhYc2luX19YX2J5WHNhY2tYIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWluVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfZm9vX2luamVjdFg5OTk5OTk5OTk5WF9taW4iLAotICAgICAgICByZWFzb24gPSAiVGhlIGluamVjdCgpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5PcHRpb25hbFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WWDFYX29wdGlvbmFsWGFkZFZYZG9nWFhfbGFiZWwiLAotICAgICAgICByZWFzb24gPSAiVGhlIGFkZFYoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuU2ltcGxlUGF0aFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2ltcGxlUGF0aF9ieVhsYWJlbFhfZnJvbVhiWF90b1hjWF9wYXRoX2J5WG5hbWVYIiwKLSAgICAgICAgcmVhc29uID0gIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBhY2Nlc3MgbW9yZSB0aGFuIGEgcGF0aCBlbGVtZW50J3MgaWQgb24gR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVmVydGV4VGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9uYW1lIiwKLSAgICAgICAgcmVhc29uID0gIk1pZC10cmF2ZXJzYWwgVigpL0UoKSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBvbiBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2Fja1Rlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1Zfb3V0X2JhcnJpZXJfc2FjayIsCi0gICAgICAgIHJlYXNvbiA9ICJPbmUgYnVsayBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBvbiBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2Fja1Rlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfYmFycmllclhub3JtU2Fja1hfaW5WWF9pblhrbm93c1hfYmFycmllcl9zYWNrIiwKLSAgICAgICAgcmVhc29uID0gIk9uZSBidWxrIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIG9uIEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb3BlcnRpZXNUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0WGdfVlgxWF9wcm9wZXJ0aWVzWG5hbWVYX25leHRYX3ZhbHVlIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU3VtVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFhudWxsXzEwXzVfbnVsbFhfc3VtIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU3VtVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFhsaXN0WG51bGxfMTBfNV9udWxsWFhfc3VtWGxvY2FsWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW5qZWN0KCkgc3RlcCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lYW5UZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0WGxpc3RYbnVsbF8xMF8yMF9udWxsWFhfbWVhblhsb2NhbFgiLAotICAgICAgICByZWFzb24gPSAiVGhlIGluamVjdCgpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NZWFuVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2luamVjdFhudWxsXzEwXzIwX251bGxYX21lYW4iLAotICAgICAgICByZWFzb24gPSAiVGhlIGluamVjdCgpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TZWxlY3RUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNpZGVFZmZlY3RYa19udWxsWF9pbmplY3RYeFhfc2VsZWN0WGtYIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUmVhZFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUaGUgaW8oKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgZ2VuZXJhbGx5IGJ5IEdyYXBoQ29tcHV0ZXIiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbygpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBnZW5lcmFsbHkgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuSGFzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfaGFzWGtfd2l0aGluWGNYWF92YWx1ZXNYa1giLAotICAgICAgICByZWFzb24gPSAiUmVxdWlyZXMgc29tZSB0ZXN0IGRhdGEgaW5pdGlhbGl6YXRpb24gd2l0aCBhZGRWKCkiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkhhc1Rlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclhYIiwKLSAgICAgICAgcmVhc29uID0gIlJlcXVpcmVzIHNvbWUgdGVzdCBkYXRhIGluaXRpYWxpemF0aW9uIHdpdGggYWRkVigpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5IYXNUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJVbmljb2RlWFgiLAotICAgICAgICByZWFzb24gPSAiUmVxdWlyZXMgc29tZSB0ZXN0IGRhdGEgaW5pdGlhbGl6YXRpb24gd2l0aCBhZGRWKCkiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlBhdGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0WDFfbnVsbF9udWxsWF9wYXRoIiwKLSAgICAgICAgcmVhc29uID0gIlRoZSBpbmplY3QoKSBzdGVwIGlzIG5vdCBzdXBwb3J0ZWQgYnkgR3JhcGhDb21wdXRlciIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUGF0aFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3RYMV9udWxsX251bGxYX3BhdGhfZGVkdXAiLAotICAgICAgICByZWFzb24gPSAiVGhlIGluamVjdCgpIHN0ZXAgaXMgbm90IHN1cHBvcnRlZCBieSBHcmFwaENvbXB1dGVyIikKLUBHcmFwaFByb3ZpZGVyLkRlc2NyaXB0b3IoY29tcHV0ZXIgPSBUaW5rZXJHcmFwaENvbXB1dGVyLmNsYXNzKQotcHVibGljIGNsYXNzIEdyYXBoU09OUmVtb3RlR3JhcGhDb21wdXRlclByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RSZW1vdGVHcmFwaFByb3ZpZGVyIHsKLSAgICBwdWJsaWMgR3JhcGhTT05SZW1vdGVHcmFwaENvbXB1dGVyUHJvdmlkZXIoKSB7Ci0gICAgICAgIHN1cGVyKGNyZWF0ZUNsdXN0ZXJCdWlsZGVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKS5jcmVhdGUoKSwgdHJ1ZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvR3JhcGhTT05SZW1vdGVHcmFwaFByb3ZpZGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaFNPTlJlbW90ZUdyYXBoUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmOGZlYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9HcmFwaFNPTlJlbW90ZUdyYXBoUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXplcnM7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgR3JhcGhTT05SZW1vdGVHcmFwaFByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RSZW1vdGVHcmFwaFByb3ZpZGVyIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7Ci0gICAgcHVibGljIEdyYXBoU09OUmVtb3RlR3JhcGhQcm92aWRlcigpIHsKLSAgICAgICAgc3VwZXIoY3JlYXRlQ2x1c3RlckJ1aWxkZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjMpLmNyZWF0ZSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9SZW1vdGVXb3JsZC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9yZW1vdGUvUmVtb3RlV29ybGQuamF2YQppbmRleCAyNjFjNThhLi40MmJjOWI1IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL3JlbW90ZS9SZW1vdGVXb3JsZC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvcmVtb3RlL1JlbW90ZVdvcmxkLmphdmEKQEAgLTIzLDEzICsyMywxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMuV29ybGQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkNvbXB1dGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlRlc3RDbGllbnRGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGgucHJvY2Vzcy5jb21wdXRlci5UaW5rZXJHcmFwaENvbXB1dGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXplcnM7CiBpbXBvcnQgb3JnLmp1bml0LkFzc3VtcHRpb25WaW9sYXRlZEV4Y2VwdGlvbjsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKQEAgLTY5LDcgKzY5LDcgQEAKIAogICAgICAgICBpZiAobnVsbCA9PSBncmFwaERhdGEpIHsKICAgICAgICAgICAgIHRyeSB7IC8vIENsZWFyIGRhdGEgYmVmb3JlIHJ1biBiZWNhdXNlIHRlc3RzIGFyZSBhbGxvd2VkIHRvIG1vZGlmeSBkYXRhIGZvciB0aGUgZW1wdHkgZ3JhcGguCi0gICAgICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZ3JhcGguY2xlYXIoKTsiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLlYoKS5kcm9wKCk7IikuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgfQpAQCAtMTY5LDI1ICsxNjksOTAgQEAKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoQmluYXJ5UmVtb3RlV29ybGQgZXh0ZW5kcyBSZW1vdGVXb3JsZCB7Ci0gICAgICAgIHB1YmxpYyBHcmFwaEJpbmFyeVJlbW90ZVdvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WMSkpOyB9CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaEJpbmFyeUxhbmdSZW1vdGVXb3JsZCBleHRlbmRzIFJlbW90ZVdvcmxkIHsKKyAgICAgICAgcHVibGljIEdyYXBoQmluYXJ5TGFuZ1JlbW90ZVdvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNCkpOyB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBzdXBlci5nZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShncmFwaERhdGEpOworICAgICAgICAgICAgIHJldHVybiBnLndpdGgoImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaEJpbmFyeUxhbmdQYXJhbWV0ZXJpemVkUmVtb3RlV29ybGQgZXh0ZW5kcyBHcmFwaEJpbmFyeUxhbmdSZW1vdGVXb3JsZCB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiB1c2VQYXJhbWV0ZXJzTGl0ZXJhbGx5KCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaEJpbmFyeUxhbmdCdWxrZWRSZW1vdGVXb3JsZCBleHRlbmRzIFJlbW90ZVdvcmxkIHsKKyAgICAgICAgcHVibGljIEdyYXBoQmluYXJ5TGFuZ0J1bGtlZFJlbW90ZVdvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNCkpOyB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBzdXBlci5nZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShncmFwaERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGcud2l0aCgibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1sYW5nIikud2l0aCgiYnVsa2VkIiwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoQmluYXJ5R3Jvb3Z5UmVtb3RlV29ybGQgZXh0ZW5kcyBSZW1vdGVXb3JsZCB7CisgICAgICAgIHB1YmxpYyBHcmFwaEJpbmFyeUdyb292eVJlbW90ZVdvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNCkpOyB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBzdXBlci5nZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShncmFwaERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGcud2l0aCgibGFuZ3VhZ2UiLCAiZ3Jvb3Z5LXRlc3QiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgR3JhcGhCaW5hcnlHcm9vdnlQYXJhbWV0ZXJpemVkUmVtb3RlV29ybGQgZXh0ZW5kcyBHcmFwaEJpbmFyeUdyb292eVJlbW90ZVdvcmxkIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHVzZVBhcmFtZXRlcnNMaXRlcmFsbHkoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaEJpbmFyeVJlbW90ZUNvbXB1dGVyV29ybGQgZXh0ZW5kcyBSZW1vdGVDb21wdXRlcldvcmxkIHsKLSAgICAgICAgcHVibGljIEdyYXBoQmluYXJ5UmVtb3RlQ29tcHV0ZXJXb3JsZCgpIHsgc3VwZXIoY3JlYXRlVGVzdENsdXN0ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpKTsgfQorICAgICAgICBwdWJsaWMgR3JhcGhCaW5hcnlSZW1vdGVDb21wdXRlcldvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNCkpOyB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBzdXBlci5nZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShncmFwaERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGcud2l0aCgibGFuZ3VhZ2UiLCAiZ3Jvb3Z5LXRlc3QiKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoU09OUmVtb3RlV29ybGQgZXh0ZW5kcyBSZW1vdGVXb3JsZCB7Ci0gICAgICAgIHB1YmxpYyBHcmFwaFNPTlJlbW90ZVdvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMykpOyB9CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaFNPTkxhbmdSZW1vdGVXb3JsZCBleHRlbmRzIFJlbW90ZVdvcmxkIHsKKyAgICAgICAgcHVibGljIEdyYXBoU09OTGFuZ1JlbW90ZVdvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSFNPTl9WNCkpOyB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBzdXBlci5nZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShncmFwaERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGcud2l0aCgibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1sYW5nIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEdyYXBoU09OTGFuZ1BhcmFtZXRlcml6ZWRSZW1vdGVXb3JsZCBleHRlbmRzIEdyYXBoU09OTGFuZ1JlbW90ZVdvcmxkIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIHVzZVBhcmFtZXRlcnNMaXRlcmFsbHkoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBHcmFwaFNPTlJlbW90ZUNvbXB1dGVyV29ybGQgZXh0ZW5kcyBSZW1vdGVDb21wdXRlcldvcmxkIHsKLSAgICAgICAgcHVibGljIEdyYXBoU09OUmVtb3RlQ29tcHV0ZXJXb3JsZCgpIHsgc3VwZXIoY3JlYXRlVGVzdENsdXN0ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjMpKTsgfQorICAgICAgICBwdWJsaWMgR3JhcGhTT05SZW1vdGVDb21wdXRlcldvcmxkKCkgeyBzdXBlcihjcmVhdGVUZXN0Q2x1c3RlcihTZXJpYWxpemVycy5HUkFQSFNPTl9WNCkpOyB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBzdXBlci5nZXRHcmFwaFRyYXZlcnNhbFNvdXJjZShncmFwaERhdGEpOworICAgICAgICAgICAgcmV0dXJuIGcud2l0aCgibGFuZ3VhZ2UiLCAiZ3Jvb3Z5LXRlc3QiKTsKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyZW1saW5Hcm9vdnlTY3JpcHRUZXN0RW5naW5lLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9HcmVtbGluR3Jvb3Z5U2NyaXB0VGVzdEVuZ2luZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNTJhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZ3Jvb3Z5L2pzcjIyMy9HcmVtbGluR3Jvb3Z5U2NyaXB0VGVzdEVuZ2luZS5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMzsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRFbmdpbmVGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubGFuZ3VhZ2UudHJhbnNsYXRvci5HcmVtbGluVHJhbnNsYXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLnRyYW5zbGF0b3IuVHJhbnNsYXRvcjsKKworaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRDb250ZXh0OworaW1wb3J0IGphdmF4LnNjcmlwdC5TY3JpcHRFeGNlcHRpb247CisKKy8qKgorICogRGVzaWduZWQgdG8gYmUgdXNlZCBpbiB0ZXN0cy4KKyAqIENvbnZlcnRzIGluY29taW5nIHNjcmlwdCBmcm9tIGdyZW1saW4tbGFuZyB0byBncmVtbGluLWdyb292eSBjb21wYXRpYmxlIGZvcm0gYW5kIGV4ZWN1dGVzIHdpdGgKKyAqIHtAY29kZSBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lfS4KKyAqLworCitwdWJsaWMgY2xhc3MgR3JlbWxpbkdyb292eVNjcmlwdFRlc3RFbmdpbmUgZXh0ZW5kcyBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lIHsKKworICAgIHB1YmxpYyBHcmVtbGluR3Jvb3Z5U2NyaXB0VGVzdEVuZ2luZSgpIHsKKworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBHcmVtbGluU2NyaXB0RW5naW5lRmFjdG9yeSBnZXRGYWN0b3J5KCkgeworICAgICAgICByZXR1cm4gbmV3IEdyZW1saW5Hcm9vdnlTY3JpcHRUZXN0RW5naW5lRmFjdG9yeSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBPYmplY3QgZXZhbChmaW5hbCBTdHJpbmcgc2NyaXB0LCBmaW5hbCBTY3JpcHRDb250ZXh0IGNvbnRleHQpIHRocm93cyBTY3JpcHRFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgdHJhbnNsYXRlZFNjcmlwdCA9IEdyZW1saW5UcmFuc2xhdG9yLnRyYW5zbGF0ZShzY3JpcHQsIFRyYW5zbGF0b3IuR1JPT1ZZKS5nZXRUcmFuc2xhdGVkKCk7CisgICAgICAgIHJldHVybiBzdXBlci5ldmFsKHRyYW5zbGF0ZWRTY3JpcHQsIGNvbnRleHQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyZW1saW5Hcm9vdnlTY3JpcHRUZXN0RW5naW5lRmFjdG9yeS5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2dyb292eS9qc3IyMjMvR3JlbWxpbkdyb292eVNjcmlwdFRlc3RFbmdpbmVGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjNzNmZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9ncm9vdnkvanNyMjIzL0dyZW1saW5Hcm9vdnlTY3JpcHRUZXN0RW5naW5lRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMzsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkFic3RyYWN0R3JlbWxpblNjcmlwdEVuZ2luZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZTsKKworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK3B1YmxpYyBjbGFzcyBHcmVtbGluR3Jvb3Z5U2NyaXB0VGVzdEVuZ2luZUZhY3RvcnkgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TY3JpcHRFbmdpbmVGYWN0b3J5IHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOR0lORV9OQU1FID0gImdyb292eS10ZXN0IjsKKworICAgIHB1YmxpYyBHcmVtbGluR3Jvb3Z5U2NyaXB0VGVzdEVuZ2luZUZhY3RvcnkoKSB7CisgICAgICAgIHN1cGVyKEVOR0lORV9OQU1FLCBFTkdJTkVfTkFNRSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgic2NyaXB0IiksIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInBsYWluIikpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBHcmVtbGluU2NyaXB0RW5naW5lIGdldFNjcmlwdEVuZ2luZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmVtbGluR3Jvb3Z5U2NyaXB0VGVzdEVuZ2luZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWV0aG9kQ2FsbFN5bnRheChmaW5hbCBTdHJpbmcgb2JqLCBmaW5hbCBTdHJpbmcgbSwgZmluYWwgU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRPdXRwdXRTdGF0ZW1lbnQoZmluYWwgU3RyaW5nIHRvRGlzcGxheSkgeworICAgICAgICByZXR1cm4gInByaW50bG4gIiArIHRvRGlzcGxheTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvR3JhcGhCaW5hcnlSZW1vdGVHcmFwaFByb2Nlc3NDb21wdXRlclRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjM3OTc3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhCaW5hcnlSZW1vdGVHcmFwaENvbXB1dGVyUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NDb21wdXRlclN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlJlbW90ZUdyYXBoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKFByb2Nlc3NDb21wdXRlclN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IEdyYXBoQmluYXJ5UmVtb3RlR3JhcGhDb21wdXRlclByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IFJlbW90ZUdyYXBoLmNsYXNzKQotcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5UmVtb3RlR3JhcGhQcm9jZXNzQ29tcHV0ZXJUZXN0IHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvR3JhcGhCaW5hcnlSZW1vdGVHcmFwaFByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjE0Y2M2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaEJpbmFyeVJlbW90ZUdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkdyYXBoQmluYXJ5UmVtb3RlR3JhcGhQcm92aWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc1N0YW5kYXJkU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUmVtb3RlR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoUHJvY2Vzc1N0YW5kYXJkU3VpdGUuY2xhc3MpCi1AR3JhcGhQcm92aWRlckNsYXNzKHByb3ZpZGVyID0gR3JhcGhCaW5hcnlSZW1vdGVHcmFwaFByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IFJlbW90ZUdyYXBoLmNsYXNzKQotcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5UmVtb3RlR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0IHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvR3JhcGhTT05SZW1vdGVHcmFwaFByb2Nlc3NDb21wdXRlclRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaFNPTlJlbW90ZUdyYXBoUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2YxNzBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaFNPTlJlbW90ZUdyYXBoUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhTT05SZW1vdGVHcmFwaENvbXB1dGVyUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NDb21wdXRlclN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlJlbW90ZUdyYXBoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKFByb2Nlc3NDb21wdXRlclN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IEdyYXBoU09OUmVtb3RlR3JhcGhDb21wdXRlclByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IFJlbW90ZUdyYXBoLmNsYXNzKQotcHVibGljIGNsYXNzIEdyYXBoU09OUmVtb3RlR3JhcGhQcm9jZXNzQ29tcHV0ZXJUZXN0IHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9yZW1vdGUvR3JhcGhTT05SZW1vdGVHcmFwaFByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaFNPTlJlbW90ZUdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2U4YjVmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3JlbW90ZS9HcmFwaFNPTlJlbW90ZUdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkdyYXBoU09OUmVtb3RlR3JhcGhQcm92aWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc1N0YW5kYXJkU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUmVtb3RlR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoUHJvY2Vzc1N0YW5kYXJkU3VpdGUuY2xhc3MpCi1AR3JhcGhQcm92aWRlckNsYXNzKHByb3ZpZGVyID0gR3JhcGhTT05SZW1vdGVHcmFwaFByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IFJlbW90ZUdyYXBoLmNsYXNzKQotcHVibGljIGNsYXNzIEdyYXBoU09OUmVtb3RlR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0IHsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0Fic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9BYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QuamF2YQppbmRleCA3OTRlNTE2Li5iOGZjNjY0IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0Fic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0LmphdmEKQEAgLTE4LDkgKzE4LDYgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuVW5pZmllZENoYW5uZWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuVW5pZmllZENoYW5uZWxpemVySW50ZWdyYXRlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5PcExvYWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLlNlcnZlckdyZW1saW5FeGVjdXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5BYnN0cmFjdFRpbmtlckdyYXBoOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKQEAgLTEwNSwxMCArMTAyLDYgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzIG9TZXR0aW5ncyA9IG92ZXJyaWRlU2V0dGluZ3Moc2V0dGluZ3MpOwogCi0gICAgICAgICAgICBpZiAoc2hvdWxkVGVzdFVuaWZpZWQoKSkgewotICAgICAgICAgICAgICAgIG9TZXR0aW5ncy5jaGFubmVsaXplciA9IFVuaWZpZWRDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIFNlcnZlclRlc3RIZWxwZXIucmV3cml0ZVBhdGhzSW5HcmVtbGluU2VydmVyU2V0dGluZ3Mob1NldHRpbmdzKTsKICAgICAgICAgICAgIGlmIChHUkVNTElOX1NFUlZFUl9FUE9MTCkgewogICAgICAgICAgICAgICAgIG9TZXR0aW5ncy51c2VFcG9sbEV2ZW50TG9vcCA9IHRydWU7CkBAIC0xMzEsMTAgKzEyNCw2IEBACiAgICAgICAgICAgICBvdmVycmlkZGVuU2V0dGluZ3MudXNlRXBvbGxFdmVudExvb3AgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNob3VsZFRlc3RVbmlmaWVkKCkpIHsKLSAgICAgICAgICAgIG92ZXJyaWRkZW5TZXR0aW5ncy5jaGFubmVsaXplciA9IFVuaWZpZWRDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgIH0KLQogICAgICAgICB0aGlzLnNlcnZlciA9IG5ldyBHcmVtbGluU2VydmVyKG92ZXJyaWRkZW5TZXR0aW5ncyk7CiAKICAgICAgICAgcmV0dXJuIHNlcnZlci5zdGFydCgpOwpAQCAtMTU1LDE1ICsxNDQsNiBAQAogICAgICAgICBpZiAoc2VydmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIHNlcnZlci5zdG9wKCkuam9pbigpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gcmVzZXQgdGhlIE9wTG9hZGVyIHByb2Nlc3NvcnMgc28gdGhhdCB0aGV5IGNhbiBnZXQgcmVjb25maWd1cmVkIG9uIHN0YXJ0dXAgLSBTZXR0aW5ncyBtYXkgaGF2ZSBjaGFuZ2VkCi0gICAgICAgIC8vIGJldHdlZW4gdGVzdHMKLSAgICAgICAgT3BMb2FkZXIucmVzZXQoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1VzaW5nVW5pZmllZENoYW5uZWxpemVyKCkgewotICAgICAgICByZXR1cm4gc2VydmVyLmdldFNlcnZlckdyZW1saW5FeGVjdXRvcigpLgotICAgICAgICAgICAgICAgIGdldFNldHRpbmdzKCkuY2hhbm5lbGl6ZXIuZXF1YWxzKFVuaWZpZWRDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZWxldGVEaXJlY3RvcnkoZmluYWwgRmlsZSBkaXJlY3RvcnkpIHsKQEAgLTE4NywxMSArMTY3LDQgQEAKICAgICAgICAgbG9nZ2VyLmluZm8oIlJ1bm5pbmcgdHJhbnNhY3Rpb25hbCB0ZXN0cyB1c2luZyBUaW5rZXJUcmFuc2FjdGlvbkdyYXBoIik7CiAgICAgICAgIHNldHRpbmdzLmdyYXBocy5wdXQoImdyYXBoIiwgImNvbmYvdGlua2VydHJhbnNhY3Rpb25ncmFwaC1lbXB0eS5wcm9wZXJ0aWVzIik7CiAgICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZFRlc3RVbmlmaWVkKCkgewotICAgICAgICAvLyBpZ25vcmUgYWxsIHRlc3RzIGluIHRoZSBVbmlmaWVkQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0IHBhY2thZ2UgYXMgdGhleSBhcmUgYWxyZWFkeSByaWdnZWQgdG8gdGVzdAotICAgICAgICAvLyBvdmVyIHRoZSB2YXJpb3VzIGNoYW5uZWxpemVyIGltcGxlbWVudGF0aW9ucwotICAgICAgICByZXR1cm4gQm9vbGVhbi5wYXJzZUJvb2xlYW4oU3lzdGVtLmdldFByb3BlcnR5KCJ0ZXN0VW5pZmllZCIsICJmYWxzZSIpKSAmJgotICAgICAgICAgICAgICAgICF0aGlzLmdldENsYXNzKCkuZ2V0UGFja2FnZSgpLmVxdWFscyhVbmlmaWVkQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0LmNsYXNzLmdldFBhY2thZ2UoKSk7Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9BYnN0cmFjdFNlc3Npb25UeEludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQWJzdHJhY3RTZXNzaW9uVHhJbnRlZ3JhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNGE3ZTIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9BYnN0cmFjdFNlc3Npb25UeEludGVncmF0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwNyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXF1ZXN0T3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVHJhbnNhY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotLyoqCi0gKiBBYnN0cmFjdCB0ZXN0IGNsYXNzIHRoYXQgaG9sZHMgdGVzdHMgZm9yIHRoZSBncmVtbGluLWRyaXZlciBhbmQgYnl0ZWNvZGUgc2Vzc2lvbnMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZXNzaW9uVHhJbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKLQotICAgIHB1YmxpYyBzdGF0aWMgTG9uZyBERUZBVUxUX1RFU1RfU0VTU0lPTl9USU1FT1VUID0gMzAwMEw7Ci0KLSAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgQ2x1c3RlciBjcmVhdGVDbHVzdGVyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDb25maWd1cmUgc3BlY2lmaWMgR3JlbWxpbiBTZXJ2ZXIgc2V0dGluZ3MgZm9yIHNwZWNpZmljIHRlc3RzLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXR0aW5ncyBvdmVycmlkZVNldHRpbmdzKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lT2ZUZXN0ID0gbmFtZS5nZXRNZXRob2ROYW1lKCk7Ci0KLSAgICAgICAgc2V0dGluZ3MuZ3JhcGhzLnB1dCgiZ3JhcGgiLCAiY29uZi90aW5rZXJ0cmFuc2FjdGlvbmdyYXBoLWVtcHR5LnByb3BlcnRpZXMiKTsKLQotICAgICAgICBzd2l0Y2ggKG5hbWVPZlRlc3QpIHsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZFRpbWVvdXRUeEJ5dGVjb2RlIjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5wcm9jZXNzb3JzLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBPcFByb2Nlc3NvciBzZXR0aW5nCi0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MgcHJvY2Vzc29yU2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5ncy5jbGFzc05hbWUgPSBTZXNzaW9uT3BQcm9jZXNzb3IuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NvclNldHRpbmdzLmNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5ncy5jb25maWcucHV0KFNlc3Npb25PcFByb2Nlc3Nvci5DT05GSUdfU0VTU0lPTl9USU1FT1VULCBERUZBVUxUX1RFU1RfU0VTU0lPTl9USU1FT1VUKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5wcm9jZXNzb3JzLmFkZChwcm9jZXNzb3JTZXR0aW5ncyk7Ci0KLSAgICAgICAgICAgICAgICAvLyBVbmlmaWVkIHNldHRpbmcKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXNzaW9uTGlmZXRpbWVUaW1lb3V0ID0gREVGQVVMVF9URVNUX1NFU1NJT05fVElNRU9VVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzZXR0aW5nczsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBJZ25vcmUoIlRJTktFUlBPUC0yODMyIikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUaW1lb3V0VHhCeXRlY29kZSgpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IGNyZWF0ZUNsdXN0ZXIoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0KLSAgICAgICAgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4ID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5hZGRFKCJsaW5rIikuaXRlcmF0ZSgpOwotICAgICAgICBndHgudHgoKS5jb21taXQoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGd0eCA9IGcudHgoKS5iZWdpbigpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIGd0eC5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBndHguRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAgICAgLy8gd2FpdCBsb25nIGVub3VnaCBmb3IgdGhlIHNlc3Npb24gdG8gZGllCi0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoNDAwMCk7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgc2hvdWxkIGZhaWwgd2l0aCBhIGRlYWQgc2Vzc2lvbgotICAgICAgICAgICAgZ3R4LlYoKS5jb3VudCgpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGZhaWwoIlNlc3Npb24gaXMgZGVhZCAtIGEgbmV3IG9uZSBzaG91bGQgbm90IHJlb3BlbiB0byBzZXJ2ZSB0aGlzIHJlcXVlc3QiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbW1pdFR4Qnl0ZWNvZGVJblNlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBjcmVhdGVDbHVzdGVyKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotCi0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IGcudHgoKS5iZWdpbigpOwotICAgICAgICBhc3NlcnRUaGF0KGd0eC50eCgpLmlzT3BlbigpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZ3R4LmFkZFYoInBlcnNvbiIpLml0ZXJhdGUoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIChsb25nKSBndHguVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICAvLyBvdXRzaWRlIHRoZSBzZXNzaW9uIHdlIHNob3VsZCBiZSBhdCB6ZXJvCi0gICAgICAgIGFzc2VydEVxdWFscygwLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgIGd0eC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRUaGF0KGd0eC50eCgpLmlzT3BlbigpLCBpcyhmYWxzZSkpOwotCi0gICAgICAgIC8vIHNlc3Npb25sZXNzIGNvbm5lY3Rpb25zIHNob3VsZCBzdGlsbCBiZSBnb29kIC0gY2xvc2UoKSBzaG91bGQgbm90IGFmZmVjdCB0aGF0Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgIC8vIGJ1dCB0aGUgc3Bhd25lZCBndHggc2hvdWxkIGJlIGRlYWQKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGd0eC5hZGRWKCJzb2Z0d2FyZSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIGZhaWxlZCBzaW5jZSB3ZSBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiQ2xpZW50IGlzIGNsb3NlZCIsIHJvb3QuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbW1pdFR4Qnl0ZWNvZGVJblNlc3Npb25XaXRoRXhwbGljaXRUcmFuc2FjdGlvbk9iamVjdCgpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IGNyZWF0ZUNsdXN0ZXIoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0gICAgICAgIGZpbmFsIFRyYW5zYWN0aW9uIHR4ID0gZy50eCgpOwotICAgICAgICBhc3NlcnRUaGF0KHR4LmlzT3BlbigpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4ID0gdHguYmVnaW4oKTsKLSAgICAgICAgZ3R4LmFkZFYoInBlcnNvbiIpLml0ZXJhdGUoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIChsb25nKSBndHguVigpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgdHguY29tbWl0KCk7Ci0gICAgICAgIGFzc2VydFRoYXQodHguaXNPcGVuKCksIGlzKGZhbHNlKSk7Ci0KLSAgICAgICAgLy8gc2Vzc2lvbmxlc3MgY29ubmVjdGlvbnMgc2hvdWxkIHN0aWxsIGJlIGdvb2QgLSBjbG9zZSgpIHNob3VsZCBub3QgYWZmZWN0IHRoYXQKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUm9sbGJhY2tUeEJ5dGVjb2RlSW5TZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gY3JlYXRlQ2x1c3RlcigpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSBnLnR4KCkuYmVnaW4oKTsKLSAgICAgICAgYXNzZXJ0VGhhdChndHgudHgoKS5pc09wZW4oKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5pdGVyYXRlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZ3R4LlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGd0eC50eCgpLnJvbGxiYWNrKCk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ3R4LnR4KCkuaXNPcGVuKCksIGlzKGZhbHNlKSk7Ci0KLSAgICAgICAgLy8gc2Vzc2lvbmxlc3MgY29ubmVjdGlvbnMgc2hvdWxkIHN0aWxsIGJlIGdvb2QgLSBjbG9zZSgpIHNob3VsZCBub3QgYWZmZWN0IHRoYXQKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0KLSAgICAgICAgLy8gYnV0IHRoZSBzcGF3bmVkIGd0eCBzaG91bGQgYmUgZGVhZAotICAgICAgICB0cnkgewotICAgICAgICAgICAgZ3R4LmFkZFYoInNvZnR3YXJlIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgZmFpbGVkIHNpbmNlIHdlIGNvbW1pdHRlZCB0aGUgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJDbGllbnQgaXMgY2xvc2VkIiwgcm9vdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29tbWl0VHhCeXRlY29kZUluU2Vzc2lvbk9uQ2xvc2VPZkd0eCgpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IGNyZWF0ZUNsdXN0ZXIoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4ID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ3R4LnR4KCkuaXNPcGVuKCksIGlzKHRydWUpKTsKLQotICAgICAgICBndHguYWRkVigicGVyc29uIikuaXRlcmF0ZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKGxvbmcpIGd0eC5WKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBndHguY2xvc2UoKTsKLSAgICAgICAgYXNzZXJ0VGhhdChndHgudHgoKS5pc09wZW4oKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAvLyBzZXNzaW9ubGVzcyBjb25uZWN0aW9ucyBzaG91bGQgc3RpbGwgYmUgZ29vZCAtIGNsb3NlKCkgc2hvdWxkIG5vdCBhZmZlY3QgdGhhdAotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKGxvbmcpIGcuVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICAvLyBidXQgdGhlIHNwYXduZWQgZ3R4IHNob3VsZCBiZSBkZWFkCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBndHguYWRkVigic29mdHdhcmUiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSBmYWlsZWQgc2luY2Ugd2UgY29tbWl0dGVkIHRoZSB0cmFuc2FjdGlvbiIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkNsaWVudCBpcyBjbG9zZWQiLCByb290LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb21taXRUeEJ5dGVjb2RlSW5TZXNzaW9uT25DbG9zZVR4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gY3JlYXRlQ2x1c3RlcigpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSBnLnR4KCkuYmVnaW4oKTsKLSAgICAgICAgYXNzZXJ0VGhhdChndHgudHgoKS5pc09wZW4oKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5pdGVyYXRlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZ3R4LlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGd0eC5jbG9zZSgpOwotICAgICAgICBhc3NlcnRUaGF0KGd0eC50eCgpLmlzT3BlbigpLCBpcyhmYWxzZSkpOwotCi0gICAgICAgIC8vIHNlc3Npb25sZXNzIGNvbm5lY3Rpb25zIHNob3VsZCBzdGlsbCBiZSBnb29kIC0gY2xvc2UoKSBzaG91bGQgbm90IGFmZmVjdCB0aGF0Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgIC8vIGJ1dCB0aGUgc3Bhd25lZCBndHggc2hvdWxkIGJlIGRlYWQKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGd0eC5hZGRWKCJzb2Z0d2FyZSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIGZhaWxlZCBzaW5jZSB3ZSBjb21taXR0ZWQgdGhlIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiQ2xpZW50IGlzIGNsb3NlZCIsIHJvb3QuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE9wZW5BbmRDbG9zZU9ic2NlbmVBbW91bnRPZlNlc3Npb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gY3JlYXRlQ2x1c3RlcigpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICAvLyBuZWVkIHRvIG9wZW4gc2lnbmlmaWNhbnRseSBtb3JlIHNlc3Npb25zIHRoYXQgd2UgaGF2ZSB0aHJlYWRzIGluIGdyZW1saW5Qb29sLiBpZiB3ZSBnbyB0b28gb2JzY2VuZSBvbgotICAgICAgICAvLyBPcFByb2Nlc3NvciB0aGlzIHRlc3Qgd2lsbCB0YWtlIHRvbyBsb25nCi0gICAgICAgIGZpbmFsIGludCBudW1iZXJPZlNlc3Npb25zID0gaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpID8gMTAwMCA6IDEwMDsKLSAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IG51bWJlck9mU2Vzc2lvbnM7IGl4ICsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBUcmFuc2FjdGlvbiB0eCA9IGcudHgoKTsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IHR4LmJlZ2luKCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGd0eC5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgicGlkIiwgaXggKyAiYSIpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdjIgPSBndHguYWRkVigicGVyc29uIikucHJvcGVydHkoInBpZCIsIGl4ICsgImIiKS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgZ3R4LmFkZEUoImtub3dzIikuZnJvbSh2MSkudG8odjIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgICAgICB0eC5jb21taXQoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIHR4LnJvbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCBleHBlY3QgYW55IGZhaWx1cmVzIik7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGFzc2VydFRoYXQodHguaXNPcGVuKCksIGlzKGZhbHNlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZXNzaW9ubGVzcyBjb25uZWN0aW9ucyBzaG91bGQgc3RpbGwgYmUgZ29vZCAtIGNsb3NlKCkgc2hvdWxkIG5vdCBhZmZlY3QgdGhhdAotICAgICAgICBhc3NlcnRFcXVhbHMobnVtYmVyT2ZTZXNzaW9ucyAqIDIsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhudW1iZXJPZlNlc3Npb25zLCAobG9uZykgZy5FKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbW1pdFR4Qnl0ZWNvZGVJblNlc3Npb25SZXVzaW5nR3R4QWNyb3NzVGhyZWFkcygpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgICAgIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBzZXJ2aWNlID0gRXhlY3V0b3JzLm5ld0ZpeGVkVGhyZWFkUG9vbCgyKTsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBjcmVhdGVDbHVzdGVyKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotCi0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IGcudHgoKS5iZWdpbigpOwotICAgICAgICBhc3NlcnRUaGF0KGd0eC50eCgpLmlzT3BlbigpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgaW50IHZlcnRpY2VzVG9BZGQgPSA2NDsKLSAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IHZlcnRpY2VzVG9BZGQ7IGl4KyspIHsKLSAgICAgICAgICAgIHNlcnZpY2Uuc3VibWl0KCgpIC0+IGd0eC5hZGRWKCJwZXJzb24iKS5pdGVyYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2VydmljZS5zaHV0ZG93bigpOwotICAgICAgICBzZXJ2aWNlLmF3YWl0VGVybWluYXRpb24oOTAwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0KLSAgICAgICAgLy8gb3V0c2lkZSB0aGUgc2Vzc2lvbiB3ZSBzaG91bGQgYmUgYXQgemVybwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgKGxvbmcpIGcuVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHModmVydGljZXNUb0FkZCwgKGxvbmcpIGd0eC5WKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBndHgudHgoKS5jb21taXQoKTsKLSAgICAgICAgYXNzZXJ0VGhhdChndHgudHgoKS5pc09wZW4oKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAvLyBzZXNzaW9ubGVzcyBjb25uZWN0aW9ucyBzaG91bGQgc3RpbGwgYmUgZ29vZCAtIGNsb3NlKCkgc2hvdWxkIG5vdCBhZmZlY3QgdGhhdAotICAgICAgICBhc3NlcnRFcXVhbHModmVydGljZXNUb0FkZCwgKGxvbmcpIGcuVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTcGF3bk11bHRpcGxlVHJhdmVyc2FsU291cmNlSW5TYW1lVHJhbnNhY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBjcmVhdGVDbHVzdGVyKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotCi0gICAgICAgIGZpbmFsIFRyYW5zYWN0aW9uIHR4MSA9IGcudHgoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4MWEgPSB0eDEuYmVnaW4oKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4MWIgPSB0eDEuYmVnaW4oKTsKLSAgICAgICAgZmluYWwgVHJhbnNhY3Rpb24gdHgyID0gZy50eCgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgyID0gdHgyLmJlZ2luKCk7Ci0KLSAgICAgICAgZ3R4MWEuYWRkVigicGVyc29uIikuaXRlcmF0ZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKGxvbmcpIGd0eDFhLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZ3R4MWIuVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICAvLyBvdXRzaWRlIHRoZSBzZXNzaW9uIHdlIHNob3VsZCBiZSBhdCB6ZXJvCi0gICAgICAgIGFzc2VydEVxdWFscygwLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgKGxvbmcpIGd0eDIuVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICAvLyBlaXRoZXIgY2FuIGNvbW1pdCB0byBlbmQgdGhlIHRyYW5zYWN0aW9uCi0gICAgICAgIGd0eDFiLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ3R4MWEudHgoKS5pc09wZW4oKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChndHgxYi50eCgpLmlzT3BlbigpLCBpcyhmYWxzZSkpOwotCi0gICAgICAgIC8vIHNlc3Npb25sZXNzIGNvbm5lY3Rpb25zIHNob3VsZCBzdGlsbCBiZSBnb29kIC0gY2xvc2UoKSBzaG91bGQgbm90IGFmZmVjdCB0aGF0Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgIC8vIGJ1dCB0aGUgc3Bhd25lZCBndHggc2hvdWxkIGJlIGRlYWQKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGd0eDFhLmFkZFYoInNvZnR3YXJlIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgZmFpbGVkIHNpbmNlIHdlIGNvbW1pdHRlZCB0aGUgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJDbGllbnQgaXMgY2xvc2VkIiwgcm9vdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGd0eDFiLmFkZFYoInNvZnR3YXJlIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgZmFpbGVkIHNpbmNlIHdlIGNvbW1pdHRlZCB0aGUgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJDbGllbnQgaXMgY2xvc2VkIiwgcm9vdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ29tbWl0Um9sbGJhY2tJblNjcmlwdFVzaW5nR3JlbWxpbkxhbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQuU2Vzc2lvblNldHRpbmdzIHNlc3Npb25TZXR0aW5ncyA9IENsaWVudC5TZXNzaW9uU2V0dGluZ3MuYnVpbGQoKS4KLSAgICAgICAgICAgICAgICBzZXNzaW9uSWQobmFtZS5nZXRNZXRob2ROYW1lKCkpLgotICAgICAgICAgICAgICAgIG1hbmFnZVRyYW5zYWN0aW9ucyhmYWxzZSkuCi0gICAgICAgICAgICAgICAgbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uKGZhbHNlKS4KLSAgICAgICAgICAgICAgICBjcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50LlNldHRpbmdzIGNsaWVudFNldHRpbmdzID0gQ2xpZW50LlNldHRpbmdzLmJ1aWxkKCkudXNlU2Vzc2lvbihzZXNzaW9uU2V0dGluZ3MpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBzZXNzaW9uID0gY2x1c3Rlci5jb25uZWN0KGNsaWVudFNldHRpbmdzKTsKLQotICAgICAgICAvLyB0aGlzIHRlc3QgbWl4ZXMgY2FsbHMgYWNyb3NzIHNjcmlwdGVuZ2luZXMgLSBwcm9iYWJseSBub3QgYSB1c2UgY2FzZSBidXQgaW50ZXJlc3RpbmcKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlc3Npb24uc3VibWl0KCJnLmFkZFYoJ3BlcnNvbicpIikuYWxsKCkuZ2V0KDEwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLSAgICAgICAgICAgIHNlc3Npb24uc3VibWl0KCJnLmFkZFYoJ3BlcnNvbicpIikuYWxsKCkuZ2V0KDEwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLQotICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiBzZXNzaW9uIGdyYXBoIHNob3VsZCBiZSBlbXB0eSBzdGlsbCBidXQgaW4gc2Vzc2lvbiB3ZSBzaG91bGQgaGF2ZSAyCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpLmFsbCgpLmdldCgxMCwgVGltZVVuaXQuU0VDT05EUykuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBzZXNzaW9uLnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpLmFsbCgpLmdldCgxMCwgVGltZVVuaXQuU0VDT05EUykuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICAgICAgLy8gY29tbWl0IHdoYXRzIHRoZXJlIHVzaW5nIGdyZW1saW4tbGFuZ3VhZ2UgYW5kIHRlc3QgYWdhaW4KLSAgICAgICAgICAgIHNlc3Npb24uc3VibWl0KCJnLnR4KCkuY29tbWl0KCkiLCBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWxhbmciKS5jcmVhdGUoKSkuYWxsKCkuZ2V0KDEwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLlYoKS5jb3VudCgpIikuYWxsKCkuZ2V0KDEwLCBUaW1lVW5pdC5TRUNPTkRTKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNlc3Npb24uc3VibWl0KCJnLlYoKS5jb3VudCgpIikuYWxsKCkuZ2V0KDEwLCBUaW1lVW5pdC5TRUNPTkRTKS5nZXQoMCkuZ2V0SW50KCkpOwotCi0gICAgICAgICAgICAvLyBhZGQgb25lIG1vcmUgaW4gc2Vzc2lvbiBhbmQgdGVzdAotICAgICAgICAgICAgc2Vzc2lvbi5zdWJtaXQoImcuYWRkVigncGVyc29uJykiKS5hbGwoKS5nZXQoMTAsIFRpbWVVbml0LlNFQ09ORFMpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImcuVigpLmNvdW50KCkiKS5hbGwoKS5nZXQoMTAsIFRpbWVVbml0LlNFQ09ORFMpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgc2Vzc2lvbi5zdWJtaXQoImcuVigpLmNvdW50KCkiKS5hbGwoKS5nZXQoMTAsIFRpbWVVbml0LlNFQ09ORFMpLmdldCgwKS5nZXRJbnQoKSk7Ci0KLSAgICAgICAgICAgIC8vIHJvbGxiYWNrIHRoZSBhZGRpdGlvbmFsIG9uZSBhbmQgdGVzdAotICAgICAgICAgICAgc2Vzc2lvbi5zdWJtaXQoImcudHgoKS5yb2xsYmFjaygpIiwgUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5sYW5ndWFnZSgiZ3JlbWxpbi1sYW5nIikuY3JlYXRlKCkpLmFsbCgpLmdldCgxMCwgVGltZVVuaXQuU0VDT05EUyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpLmFsbCgpLmdldCgxMCwgVGltZVVuaXQuU0VDT05EUykuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBzZXNzaW9uLnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpLmFsbCgpLmdldCgxMCwgVGltZVVuaXQuU0VDT05EUykuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQ2xpZW50V2l0aE9wdGlvbnNJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0NsaWVudFdpdGhPcHRpb25zSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IGZkYjk5OTAuLjIwNGJjNmEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQ2xpZW50V2l0aE9wdGlvbnNJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9DbGllbnRXaXRoT3B0aW9uc0ludGVncmF0ZVRlc3QuamF2YQpAQCAtNDMsMTggKzQzLDYgQEAKIHB1YmxpYyBjbGFzcyBDbGllbnRXaXRoT3B0aW9uc0ludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QgewogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUaW1lT3V0QWxpYXNlZENsaWVudFNlbmRpbmdCeXRlY29kZSgpIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKCJnZ3JhdGVmdWwiKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbGllbnQsICJnIikpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBnLndpdGgoImV2YWx1YXRpb25UaW1lb3V0IiwgMSkuVigpLmJvdGgoKS5ib3RoKCkuYm90aCgpOwotICAgICAgICBhc3NlcnRUaHJvd3MoRXhlY3V0aW9uRXhjZXB0aW9uLmNsYXNzLCAoKSAtPiB7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzID0gY2xpZW50LnN1Ym1pdCh0cmF2ZXJzYWwpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIHRpbWUgb3V0LiBSZXN1bHQ6ICIgKyByZXMpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVPdXRub25BbGlhc2VkQ2xpZW50U2VuZGluZ0J5dGVDb2RlKCkgewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0NvbnRleHRUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0NvbnRleHRUZXN0LmphdmEKaW5kZXggZjJmNGYxMy4uYmE1NTcyOCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9Db250ZXh0VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvQ29udGV4dFRlc3QuamF2YQpAQCAtMjAsMjggKzIwLDE1IEBACiAKIGltcG9ydCBpby5uZXR0eS5jaGFubmVsLkNoYW5uZWxIYW5kbGVyQ29udGV4dDsKIGltcG9ydCBubC5hbHRpbmRhZy5sb2cuTG9nQ2FwdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkZyYW1lOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5QYXJhbWV0ZXJpemVkOwogaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG87CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5CaUZ1bmN0aW9uOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIAotQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBDb250ZXh0VGVzdCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBMb2dDYXB0b3IgbG9nQ2FwdG9yOwpAQCAtNjEsMTMwICs0OCwxMyBAQAogICAgICAgICBsb2dDYXB0b3IuY2xlYXJMb2dzKCk7CiAgICAgfQogCi0gICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVyKHZhbHVlID0gMCkKLSAgICBwdWJsaWMgQmlGdW5jdGlvbjxDb250ZXh0LCBSZXNwb25zZVN0YXR1c0NvZGUsIFZvaWQ+IHdyaXRlSW52b2tlcjsKLQotICAgIHByaXZhdGUgZmluYWwgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGN0eCA9IE1vY2tpdG8ubW9jayhDaGFubmVsSGFuZGxlckNvbnRleHQuY2xhc3MpOwotICAgIHByaXZhdGUgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJ0ZXN0IikuY3JlYXRlKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygpOwotICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gbmV3IENvbnRleHQocmVxdWVzdCwgY3R4LCBzZXR0aW5ncywgbnVsbCwgbnVsbCwgbnVsbCk7Ci0KLSAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJzKG5hbWUgPSAiezB9IikKLSAgICBwdWJsaWMgc3RhdGljIEl0ZXJhYmxlPE9iamVjdFtdPiBkYXRhKCkgewotICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0W11bXSB7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXcgQmlGdW5jdGlvbjxDb250ZXh0LCBSZXNwb25zZVN0YXR1c0NvZGUsIFZvaWQ+KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgVm9pZCBhcHBseShmaW5hbCBDb250ZXh0IGNvbnRleHQsIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cml0ZUFuZEZsdXNoKGNvZGUsICJ0ZXN0TWVzc2FnZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ3cml0ZUFuZEZsdXNoKFJlc3BvbnNlU3RhdHVzQ29kZSwgT2JqZWN0KSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBCaUZ1bmN0aW9uPENvbnRleHQsIFJlc3BvbnNlU3RhdHVzQ29kZSwgVm9pZD4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBWb2lkIGFwcGx5KGZpbmFsIENvbnRleHQgY29udGV4dCwgZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyaXRlQW5kRmx1c2goUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQucmFuZG9tVVVJRCgpKS5jb2RlKGNvZGUpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAid3JpdGVBbmRGbHVzaChSZXNwb25zZU1lc3NhZ2UpIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQWxsb3dNdWx0aXBsZU5vbkZpbmFsUmVzcG9uc2VzKCkgewotICAgICAgICB3cml0ZUludm9rZXIuYXBwbHkoY29udGV4dCwgUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURSk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkud3JpdGUoTW9ja2l0by5hbnkoKSk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkuZmx1c2goKTsKLQotICAgICAgICB3cml0ZUludm9rZXIuYXBwbHkoY29udGV4dCwgUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygyKSkud3JpdGUoTW9ja2l0by5hbnkoKSk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygyKSkuZmx1c2goKTsKLQotICAgICAgICB3cml0ZUludm9rZXIuYXBwbHkoY29udGV4dCwgUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygzKSkud3JpdGUoTW9ja2l0by5hbnkoKSk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygzKSkuZmx1c2goKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEFsbG93QXRNb3N0T25lRmluYWxSZXNwb25zZSgpIHsKLSAgICAgICAgd3JpdGVJbnZva2VyLmFwcGx5KGNvbnRleHQsIFJlc3BvbnNlU3RhdHVzQ29kZS5BVVRIRU5USUNBVEUpOwotICAgICAgICBNb2NraXRvLnZlcmlmeShjdHgsIE1vY2tpdG8udGltZXMoMSkpLndyaXRlKE1vY2tpdG8uYW55KCkpOwotICAgICAgICBNb2NraXRvLnZlcmlmeShjdHgsIE1vY2tpdG8udGltZXMoMSkpLmZsdXNoKCk7Ci0KLSAgICAgICAgd3JpdGVJbnZva2VyLmFwcGx5KGNvbnRleHQsIFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTKTsKLSAgICAgICAgTW9ja2l0by52ZXJpZnkoY3R4LCBNb2NraXRvLnRpbWVzKDIpKS53cml0ZShNb2NraXRvLmFueSgpKTsKLSAgICAgICAgTW9ja2l0by52ZXJpZnkoY3R4LCBNb2NraXRvLnRpbWVzKDIpKS5mbHVzaCgpOwotCi0gICAgICAgIHdyaXRlSW52b2tlci5hcHBseShjb250ZXh0LCBSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQpOwotICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPgotICAgICAgICAgICAgICAgIG0ubWF0Y2hlcygiLioiICsgcmVxdWVzdC5nZXRSZXF1ZXN0SWQoKSArICIuKiIpKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPgotICAgICAgICAgICAgICAgIG0ubWF0Y2hlcygiLioiICsgUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUICsgIiQiKSksIGlzKHRydWUpKTsKLQotICAgICAgICAvLyBlbnN1cmUgdGhlcmUgd2VyZSBubyBvdGhlciB3cml0ZXMgdG8gdGhlIGNoYW5uZWwKLSAgICAgICAgTW9ja2l0by52ZXJpZnkoY3R4LCBNb2NraXRvLnRpbWVzKDIpKS53cml0ZShNb2NraXRvLmFueSgpKTsKLSAgICAgICAgTW9ja2l0by52ZXJpZnkoY3R4LCBNb2NraXRvLnRpbWVzKDIpKS5mbHVzaCgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90QWxsb3dOb25GaW5hbE1lc3NhZ2VzQWZ0ZXJGaW5hbFJlc3BvbnNlKCkgewotICAgICAgICB3cml0ZUludm9rZXIuYXBwbHkoY29udGV4dCwgUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VUKTsKLSAgICAgICAgTW9ja2l0by52ZXJpZnkoY3R4LCBNb2NraXRvLnRpbWVzKDEpKS53cml0ZShNb2NraXRvLmFueSgpKTsKLSAgICAgICAgTW9ja2l0by52ZXJpZnkoY3R4LCBNb2NraXRvLnRpbWVzKDEpKS5mbHVzaCgpOwotCi0gICAgICAgIHdyaXRlSW52b2tlci5hcHBseShjb250ZXh0LCBSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5UKTsKLSAgICAgICAgYXNzZXJ0VGhhdChsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4KLSAgICAgICAgICAgICAgICBtLm1hdGNoZXMoIi4qIiArIHJlcXVlc3QuZ2V0UmVxdWVzdElkKCkgKyAiLioiKSksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4KLSAgICAgICAgICAgICAgICBtLm1hdGNoZXMoIi4qIiArIFJlc3BvbnNlU3RhdHVzQ29kZS5QQVJUSUFMX0NPTlRFTlQgKyAiJCIpKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIC8vIGVuc3VyZSB0aGVyZSB3ZXJlIG5vIG90aGVyIHdyaXRlcyB0byB0aGUgY2hhbm5lbAotICAgICAgICBNb2NraXRvLnZlcmlmeShjdHgsIE1vY2tpdG8udGltZXMoMSkpLndyaXRlKE1vY2tpdG8uYW55KCkpOwotICAgICAgICBNb2NraXRvLnZlcmlmeShjdHgsIE1vY2tpdG8udGltZXMoMSkpLmZsdXNoKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWxlYXNlSWdub3JlZEZyYW1lcygpIHsKLSAgICAgICAgd3JpdGVJbnZva2VyLmFwcGx5KGNvbnRleHQsIFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVElNRU9VVCk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkud3JpdGUoTW9ja2l0by5hbnkoKSk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkuZmx1c2goKTsKLQotICAgICAgICBGcmFtZSBmcmFtZSA9IE1vY2tpdG8ubW9jayhGcmFtZS5jbGFzcyk7Ci0gICAgICAgIGNvbnRleHQud3JpdGVBbmRGbHVzaChSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgZnJhbWUpOwotCi0gICAgICAgIGFzc2VydFRoYXQobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+Ci0gICAgICAgICAgICAgICAgbS5tYXRjaGVzKCIuKiIgKyByZXF1ZXN0LmdldFJlcXVlc3RJZCgpICsgIi4qIikpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+Ci0gICAgICAgICAgICAgICAgbS5tYXRjaGVzKCIuKiIgKyBSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUyArICIkIikpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgLy8gZW5zdXJlIHRoZXJlIHdlcmUgbm8gb3RoZXIgd3JpdGVzIHRvIHRoZSBjaGFubmVsCi0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkud3JpdGUoTW9ja2l0by5hbnkoKSk7Ci0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkuZmx1c2goKTsKLQotICAgICAgICAvLyBlbnN1cmUgdGhlIGZyYW1lIHdhcyByZWxlYXNlZAotICAgICAgICBNb2NraXRvLnZlcmlmeShmcmFtZSwgTW9ja2l0by50aW1lcygxKSkudHJ5UmVsZWFzZSgpOwotICAgICAgICBNb2NraXRvLnZlcmlmeShjdHgsIE1vY2tpdG8udGltZXMoMSkpLmZsdXNoKCk7Ci0gICAgfQotCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRQYXJzZVBhcmFtZXRlcnNGcm9tU2NyaXB0UmVxdWVzdCgpCiAgICAgewogICAgICAgICBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4ID0gTW9ja2l0by5tb2NrKENoYW5uZWxIYW5kbGVyQ29udGV4dC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiZy53aXRoKCdldmFsdWF0aW9uVGltZW91dCcsIDEwMDApLndpdGgodHJ1ZSkud2l0aCgnbWF0ZXJpYWxpemVQcm9wZXJ0aWVzJywgJ3Rva2VucycpLlYoKS5vdXQoJ2tub3dzJykiKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9CisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcud2l0aCgnZXZhbHVhdGlvblRpbWVvdXQnLCAxMDAwKS53aXRoKHRydWUpLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKCkub3V0KCdrbm93cycpIikKKyAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygpOwogICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBuZXcgQ29udGV4dChyZXF1ZXN0LCBjdHgsIHNldHRpbmdzLCBudWxsLCBudWxsLCBudWxsKTsKIApAQCAtMTk2LDEwICs2Niw5IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkU2tpcEludmFsaWRNYXRlcmlhbGl6ZVByb3BlcnRpZXNQYXJhbWV0ZXJGcm9tU2NyaXB0UmVxdWVzdCgpCiAgICAgewogICAgICAgICBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4ID0gTW9ja2l0by5tb2NrKENoYW5uZWxIYW5kbGVyQ29udGV4dC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLAotICAgICAgICAgICAgICAgICAgICAgICAgImcud2l0aCgnZXZhbHVhdGlvblRpbWVvdXQnLCAxMDAwKS53aXRoKHRydWUpLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICdzb21lLWludmFsaWQtdmFsdWUnKS5WKCkub3V0KCdrbm93cycpIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPQorICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLndpdGgoJ2V2YWx1YXRpb25UaW1lb3V0JywgMTAwMCkud2l0aCh0cnVlKS53aXRoKCdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnLCAnc29tZS1pbnZhbGlkLXZhbHVlJykuVigpLm91dCgna25vd3MnKSIpCisgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKICAgICAgICAgZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MoKTsKICAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gbmV3IENvbnRleHQocmVxdWVzdCwgY3R4LCBzZXR0aW5ncywgbnVsbCwgbnVsbCwgbnVsbCk7CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpbkRyaXZlckludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpbkRyaXZlckludGVncmF0ZVRlc3QuamF2YQppbmRleCA1YWZlNDQyLi5jNGNmYTI2IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5Ecml2ZXJJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluRHJpdmVySW50ZWdyYXRlVGVzdC5qYXZhCkBAIC0xOSw1OCArMTksMzcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7CiAKIGltcG9ydCBjaC5xb3MubG9nYmFjay5jbGFzc2ljLkxldmVsOwotaW1wb3J0IGNoLnFvcy5sb2diYWNrLmNsYXNzaWMuTG9nZ2VyOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CiBpbXBvcnQgbmwuYWx0aW5kYWcubG9nLkxvZ0NhcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uTWFwcGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkV4Y2VwdGlvbkhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdFNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Db25uZWN0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLlJlc3BvbnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmhhbmRsZXIuV2ViU29ja2V0Q2xpZW50SGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5pbnRlcmNlcHRvci5QYXlsb2FkU2VyaWFsaXppbmdJbnRlcmNlcHRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5TY3JpcHRGaWxlR3JlbWxpblBsdWdpbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuT3BFeGVjdXRvckhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLlN0b3JhZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5FeGNlcHRpb25IZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRpbWVVdGlsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5GdW5jdGlvblV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uQXJndW1lbnRDYXB0b3I7Ci1pbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0bzsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAotaW1wb3J0IGphdmEuYXd0LkNvbG9yOworaW1wb3J0IGphdmEuYXd0Lio7CiBpbXBvcnQgamF2YS5uZXQuQ29ubmVjdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwpAQCAtODIsOSArNjEsNiBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVvdXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0ludGVnZXI7CkBAIC05MiwyMyArNjgsMTYgQEAKIGltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5JbnRTdHJlYW07CiAKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLmlzOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5BbGxPZi5hbGxPZjsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNJbnN0YW5jZU9mLmluc3RhbmNlT2Y7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLlN0cmluZ0NvbnRhaW5zLmNvbnRhaW5zU3RyaW5nOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5TdHJpbmdFbmRzV2l0aC5lbmRzV2l0aDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nU3RhcnRzV2l0aC5zdGFydHNXaXRoOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QubnVtYmVyLk9yZGVyaW5nQ29tcGFyaXNvbi5ncmVhdGVyVGhhbjsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lm51bWJlci5PcmRlcmluZ0NvbXBhcmlzb24ubGVzc1RoYW5PckVxdWFsVG87CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuaXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVyaWZ5OwogCiAvKioKICAqIEludGVncmF0aW9uIHRlc3RzIGZvciBncmVtbGluLWRyaXZlciBjb25maWd1cmF0aW9ucyBhbmQgc2V0dGluZ3MuCkBAIC0xMjEsNiArOTAsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIExvZ0NhcHRvciBsb2dDYXB0b3I7CiAgICAgcHJpdmF0ZSBMZXZlbCBwcmV2aW91c0xvZ0xldmVsOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVxdWVzdE9wdGlvbnMgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwTG9nQ2FwdG9yKCkgewogICAgICAgICBsb2dDYXB0b3IgPSBMb2dDYXB0b3IuZm9yUm9vdCgpOwpAQCAtMTMzLDMyICsxMDQsOSBAQAogCiAgICAgQEJlZm9yZQogICAgIHB1YmxpYyB2b2lkIHNldHVwRm9yRWFjaFRlc3QoKSB7Ci0gICAgICAgIGlmIChuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZEtlZXBBbGl2ZUZvcldlYlNvY2tldHMiKSB8fAotICAgICAgICAgICAgICAgIG5hbWUuZ2V0TWV0aG9kTmFtZSgpLmVxdWFscygic2hvdWxkS2VlcEFsaXZlRm9yV2ViU29ja2V0c1dpdGhOb0luRmxpZ2h0UmVxdWVzdHMiKSkgewotICAgICAgICAgICAgZmluYWwgTG9nZ2VyIHdlYlNvY2tldENsaWVudEhhbmRsZXJMb2dnZXIgPSAoTG9nZ2VyKSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihXZWJTb2NrZXRDbGllbnRIYW5kbGVyLmNsYXNzKTsKLSAgICAgICAgICAgIHByZXZpb3VzTG9nTGV2ZWwgPSB3ZWJTb2NrZXRDbGllbnRIYW5kbGVyTG9nZ2VyLmdldExldmVsKCk7Ci0gICAgICAgICAgICB3ZWJTb2NrZXRDbGllbnRIYW5kbGVyTG9nZ2VyLnNldExldmVsKExldmVsLkRFQlVHKTsKLSAgICAgICAgfSBlbHNlIGlmIChuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZEV2ZW50dWFsbHlTdWNjZWVkQWZ0ZXJNdWNoRmFpbHVyZSIpKSB7Ci0gICAgICAgICAgICBmaW5hbCBMb2dnZXIgb3BFeGVjdXRvckhhbmRsZXJMb2dnZXIgPSAoTG9nZ2VyKSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihPcEV4ZWN1dG9ySGFuZGxlci5jbGFzcyk7Ci0gICAgICAgICAgICBwcmV2aW91c0xvZ0xldmVsID0gb3BFeGVjdXRvckhhbmRsZXJMb2dnZXIuZ2V0TGV2ZWwoKTsKLSAgICAgICAgICAgIG9wRXhlY3V0b3JIYW5kbGVyTG9nZ2VyLnNldExldmVsKExldmVsLkVSUk9SKTsKLSAgICAgICAgfQotCiAgICAgICAgIGxvZ0NhcHRvci5jbGVhckxvZ3MoKTsKICAgICB9CiAKLSAgICBAQWZ0ZXIKLSAgICBwdWJsaWMgdm9pZCBhZnRlckVhY2hUZXN0KCkgewotICAgICAgICBpZiAobmFtZS5nZXRNZXRob2ROYW1lKCkuZXF1YWxzKCJzaG91bGRLZWVwQWxpdmVGb3JXZWJTb2NrZXRzIikgfHwKLSAgICAgICAgICAgICAgICBuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZEtlZXBBbGl2ZUZvcldlYlNvY2tldHNXaXRoTm9JbkZsaWdodFJlcXVlc3RzIikpIHsKLSAgICAgICAgICAgIGZpbmFsIExvZ2dlciB3ZWJTb2NrZXRDbGllbnRIYW5kbGVyTG9nZ2VyID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV2ViU29ja2V0Q2xpZW50SGFuZGxlci5jbGFzcyk7Ci0gICAgICAgICAgICB3ZWJTb2NrZXRDbGllbnRIYW5kbGVyTG9nZ2VyLnNldExldmVsKHByZXZpb3VzTG9nTGV2ZWwpOwotICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZ2V0TWV0aG9kTmFtZSgpLmVxdWFscygic2hvdWxkRXZlbnR1YWxseVN1Y2NlZWRBZnRlck11Y2hGYWlsdXJlIikpIHsKLSAgICAgICAgICAgIGZpbmFsIExvZ2dlciBvcEV4ZWN1dG9ySGFuZGxlckxvZ2dlciA9IChMb2dnZXIpIExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKE9wRXhlY3V0b3JIYW5kbGVyLmNsYXNzKTsKLSAgICAgICAgICAgIG9wRXhlY3V0b3JIYW5kbGVyTG9nZ2VyLnNldExldmVsKHByZXZpb3VzTG9nTGV2ZWwpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogQ29uZmlndXJlIHNwZWNpZmljIEdyZW1saW4gU2VydmVyIHNldHRpbmdzIGZvciBzcGVjaWZpYyB0ZXN0cy4KICAgICAgKi8KQEAgLTE3MSw3ICsxMTksNiBAQAogICAgICAgICAgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gSHR0cENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInNob3VsZEFsaWFzVHJhdmVyc2FsU291cmNlVmFyaWFibGVzIjoKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEFsaWFzVHJhdmVyc2FsU291cmNlVmFyaWFibGVzSW5TZXNzaW9uIjoKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcCA9IFN0b3JhZ2UudG9QYXRoKFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyZW1saW5Ecml2ZXJJbnRlZ3JhdGVUZXN0LmNsYXNzLApAQCAtMTkwLDEwICsxMzcsNyBAQAogICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLnN0cmVhbSgpLmZpbHRlcihzIC0+IHMuY2xhc3NOYW1lLmNvbnRhaW5zKCJHcnlvIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChzIC0+IHMuY29uZmlnLnB1dCgiY3VzdG9tIiwgY3VzdG9tKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRFeGVjdXRlU2NyaXB0SW5TZXNzaW9uT25UcmFuc2FjdGlvbmFsR3JhcGgiOgogICAgICAgICAgICAgY2FzZSAic2hvdWxkRXhlY3V0ZVNlc3Npb25sZXNzU2NyaXB0T25UcmFuc2FjdGlvbmFsR3JhcGgiOgotICAgICAgICAgICAgY2FzZSAic2hvdWxkRXhlY3V0ZVNjcmlwdEluU2Vzc2lvbk9uVHJhbnNhY3Rpb25hbFdpdGhNYW51YWxUcmFuc2FjdGlvbnNHcmFwaCI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRFeGVjdXRlSW5TZXNzaW9uQW5kU2Vzc2lvbmxlc3NXaXRob3V0T3BlbmluZ1RyYW5zYWN0aW9uIjoKICAgICAgICAgICAgIGNhc2UgInNob3VsZE1hbmFnZVRyYW5zYWN0aW9uc0luU2Vzc2lvbiI6CiAgICAgICAgICAgICAgICAgdXNlVGlua2VyVHJhbnNhY3Rpb25HcmFwaChzZXR0aW5ncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTgsNTMgKzE2MiwxMiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3ViZ3JhcGhXaXRoR3JhcGhTT05WM1NlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gdmFsaWRhdGluZyBzdWJncmFwaCgpIHNlcmlhbGl6YXRpb24gaGVyZSBiL2Mgd2UgZG9uJ3QgaGF2ZSBmZWF0dXJlIHRlc3RzIGZvciBpdCB5ZXQgaW4gZ2hlcmtpbgotICAgICAgICBmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIgPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpLmFkZFJlZ2lzdHJ5KFRpbmtlcklvUmVnaXN0cnlWMy5pbnN0YW5jZSgpKTsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzKGJ1aWxkZXIpOwotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoc2VyaWFsaXplcikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHIgPSBjbGllbnQuc3VibWl0KCJUaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpLnRyYXZlcnNhbCgpLkUoKS5oYXNMYWJlbCgna25vd3MnKS5zdWJncmFwaCgneCcpLmNhcCgneCcpIikuYWxsKCkuam9pbigpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHIuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSByLmdldCgwKS5nZXQoR3JhcGguY2xhc3MpOwotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhFbWJlZGRlZChncmFwaCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3ViZ3JhcGhXaXRoR3JhcGhCaW5hcnlWMVNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gdmFsaWRhdGluZyBzdWJncmFwaCgpIHNlcmlhbGl6YXRpb24gaGVyZSBiL2Mgd2UgZG9uJ3QgaGF2ZSBmZWF0dXJlIHRlc3RzIGZvciBpdCB5ZXQgaW4gZ2hlcmtpbgotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByID0gY2xpZW50LnN1Ym1pdCgiVGlua2VyRmFjdG9yeS5jcmVhdGVNb2Rlcm4oKS50cmF2ZXJzYWwoKS5FKCkuaGFzTGFiZWwoJ2tub3dzJykuc3ViZ3JhcGgoJ3gnKS5jYXAoJ3gnKSIpLmFsbCgpLmpvaW4oKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gci5nZXQoMCkuZ2V0KEdyYXBoLmNsYXNzKTsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoRW1iZWRkZWQoZ3JhcGgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEludGVyY2VwdFJlcXVlc3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIGludCByZXF1ZXN0c1RvTWFrZSA9IDMyOwogICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGh0dHBSZXF1ZXN0cyA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOwogCiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgY2hhbm5lbGl6ZXIoQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLmNsYXNzKS4KLSAgICAgICAgICAgICAgICByZXF1ZXN0SW50ZXJjZXB0b3IociAtPiB7CisgICAgICAgICAgICAgICAgYWRkSW50ZXJjZXB0b3IoImNvdW50ZXIiLCByIC0+IHsKICAgICAgICAgICAgICAgICAgICAgaHR0cFJlcXVlc3RzLmluY3JlbWVudEFuZEdldCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjsKICAgICAgICAgICAgICAgICB9KS5jcmVhdGUoKTsKQEAgLTI3Miw3ICsxNzUsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IHJlcXVlc3RzVG9NYWtlOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGl4ICsgMSwgY2xpZW50LnN1Ym1pdChpeCArICIrMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGl4ICsgMSwgY2xpZW50LnN1Ym1pdChTdHJpbmcuZm9ybWF0KCJnLmluamVjdCglZCkiLCBpeCsxKSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKQEAgLTI4MiwxNjcgKzE4NSwxNzQgQEAKICAgICB9CiAKICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJ1bkludGVyY2VwdG9yc0luT3JkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgQXRvbWljUmVmZXJlbmNlPE9iamVjdD4gYm9keSA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PigpOworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLgorICAgICAgICAgICAgICAgIGFkZEludGVyY2VwdG9yKCJmaXJzdCIsIHIgLT4geworICAgICAgICAgICAgICAgICAgICBib2R5LnNldChyLmdldEJvZHkoKSk7CisgICAgICAgICAgICAgICAgICAgIHIuc2V0Qm9keShudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICAgICAgICAgfSkuCisgICAgICAgICAgICAgICAgYWRkSW50ZXJjZXB0b3IoInNlY29uZCIsIHIgLT4geworICAgICAgICAgICAgICAgICAgICByLnNldEJvZHkoYm9keS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgICAgIH0pLmNyZWF0ZSgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aEdyYXBoU09OU2VyaWFsaXplcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZChuZXcgUGF5bG9hZFNlcmlhbGl6aW5nSW50ZXJjZXB0b3IobmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpKSkKKyAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5zaW1wbGVJbnN0YW5jZSgpKS5jcmVhdGUoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpCisgICAgICAgICAgICAgICAgICAgIC5hZGRHKCJnbW9kZXJuIikKKyAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlKCJncmVtbGluLWxhbmciKQorICAgICAgICAgICAgICAgICAgICAuYnVsa1Jlc3VsdHModHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNsaWVudC5zdWJtaXQoImcuVigpIiwgcm8pLmFsbCgpLmdldCgpLnNpemUoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFdvcmtXaXRoR3JhcGhTT05SZXF1ZXN0QW5kR3JhcGhCaW5hcnlSZXNwb25zZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZChuZXcgUGF5bG9hZFNlcmlhbGl6aW5nSW50ZXJjZXB0b3IobmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpKSkKKyAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5zaW1wbGVJbnN0YW5jZSgpKS5jcmVhdGUoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDMpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkV29ya1dpdGhHcmFwaEJpbmFyeVJlcXVlc3RBbmRHcmFwaFNPTlJlc3BvbnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKG5ldyBQYXlsb2FkU2VyaWFsaXppbmdJbnRlcmNlcHRvcihuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KCkpKQorICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1Y0LnNpbXBsZUluc3RhbmNlKCkpLmNyZWF0ZSgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoNSkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRJbnRlcmNlcHRSZXF1ZXN0c1dpdGhIYW5kc2hha2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgaW50IHJlcXVlc3RzVG9NYWtlID0gMzI7Ci0gICAgICAgIGZpbmFsIEF0b21pY0ludGVnZXIgd2Vic29ja2V0SGFuZHNoYWtlUmVxdWVzdHMgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKKyAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBoYW5kc2hha2VSZXF1ZXN0cyA9IG5ldyBBdG9taWNJbnRlZ2VyKDApOwogCiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgbWluQ29ubmVjdGlvblBvb2xTaXplKDEpLm1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICBoYW5kc2hha2VJbnRlcmNlcHRvcihyIC0+IHsKLSAgICAgICAgICAgIHdlYnNvY2tldEhhbmRzaGFrZVJlcXVlc3RzLmluY3JlbWVudEFuZEdldCgpOwotICAgICAgICAgICAgcmV0dXJuIHI7Ci0gICAgICAgIH0pLmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIG1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KKyAgICAgICAgICAgICAgICBhZGRJbnRlcmNlcHRvcigiY291bnRlciIsIHIgLT4geworICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2VSZXF1ZXN0cy5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICAgICAgICAgfSkuY3JlYXRlKCk7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKICAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCByZXF1ZXN0c1RvTWFrZTsgaXgrKykgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhpeCArIDEsIGNsaWVudC5zdWJtaXQoaXggKyAiKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHQgPSBjbGllbnQuc3VibWl0KFN0cmluZy5mb3JtYXQoImcuaW5qZWN0KCVkKSIsIGl4KzEpKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoaXggKyAxLCByZXN1bHQuZ2V0KDApLmdldEludCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIGFzc2VydEVxdWFscygxLCB3ZWJzb2NrZXRIYW5kc2hha2VSZXF1ZXN0cy5nZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0c1RvTWFrZSwgaGFuZHNoYWtlUmVxdWVzdHMuZ2V0KCkpOwogICAgIH0KIAorICAgIEBJZ25vcmUoIlJlYWRpbmcgZm9yIHN0cmVhbWluZyBHcmFwaFNPTiBpcyBub3Qgc3VwcG9ydGVkIikKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlcG9ydEVycm9yV2hlblJlcXVlc3RDYW50QmVTZXJpYWxpemVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMykuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WNCkuY3JlYXRlKCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCkuYWxpYXMoImciKTsKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgICAgICAgICBwYXJhbXMucHV0KCJyIiwgQ29sb3IuUkVEKTsKLSAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJyIiwgcGFyYW1zKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdChyKSIsIHBhcmFtcykuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGV4Y2VwdGlvbiBvdmVyIGJhZCBzZXJpYWxpemF0aW9uIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgaW5uZXIgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKICAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KGlubmVyLCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX1NFUklBTElaQVRJT04sICgoUmVzcG9uc2VFeGNlcHRpb24pIGlubmVyKS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKGV4LmdldE1lc3NhZ2UoKS5jb250YWlucygiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24gb2YgdGhpcyByZXF1ZXN0IikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBzaG91bGQgbm90IGRpZSBjb21wbGV0ZWx5IGp1c3QgYmVjYXVzZSB3ZSBoYWQgYSBiYWQgc2VyaWFsaXphdGlvbiBlcnJvci4gIHRoYXQga2luZCBvZiBzdHVmZiBoYXBwZW5zCiAgICAgICAgICAgICAvLyBmcm9tIHRpbWUgdG8gdGltZSwgZXNwZWNpYWxseSBpbiB0aGUgY29uc29sZSBpZiB5b3UncmUganVzdCBleHBsb3JpbmcuCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFByb2Nlc3NUcmF2ZXJzYWxJbnRlcnJ1cHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9jZXNzVHJhdmVyc2FsSW50ZXJydXB0aW9uKCkgewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMSkuc2lkZUVmZmVjdHtUaHJlYWQuc2xlZXAoNTAwMCl9IikuYWxsKCkuZ2V0KCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxKS5zaWRlRWZmZWN0e1RocmVhZC5zbGVlcCg1MDAwKX0iLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aW1lZCBvdXQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgZXguZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQsIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlNlcnZlclRpbWVvdXRFeGNlZWRlZEV4Y2VwdGlvbiIsIHJlLmdldFJlbW90ZUV4Y2VwdGlvbigpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUHJvY2Vzc0V2YWxJbnRlcnJ1cHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9jZXNzRXZhbEludGVycnVwdGlvbigpIHsKICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIlRocmVhZC5zbGVlcCg1MDAwKTsnZG9uZSciKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIlRocmVhZC5zbGVlcCg1MDAwKTsnZG9uZSciLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aW1lZCBvdXQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgZXguZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQsIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlNlcnZlclRpbWVvdXRFeGNlZWRlZEV4Y2VwdGlvbiIsIHJlLmdldFJlbW90ZUV4Y2VwdGlvbigpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkS2VlcEFsaXZlRm9yV2ViU29ja2V0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBrZWVwIHRoZSBjb25uZWN0aW9uIHBvb2wgc2l6ZSBhdCAxIHRvIHJlbW92ZSB0aGUgcG9zc2liaWxpdHkgb2YgbG90cyBvZiBjb25uZWN0aW9ucyB0cnlpbmcgdG8gcGluZyB3aGljaCB3aWxsCi0gICAgICAgIC8vIGNvbXBsaWNhdGUgdGhlIGFzc2VydGlvbiBsb2dpYwotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLgotICAgICAgICAgICAgICAgIG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uUG9vbFNpemUoMSkuCi0gICAgICAgICAgICAgICAga2VlcEFsaXZlSW50ZXJ2YWwoMTAwMikuY3JlYXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIGZpcmUgdXAgbG90cyBvZiByZXF1ZXN0cyBzbyBhcyB0byBzY2hlZHVsZS9kZXNjaGVkdWxlIGxvdHMgb2YgcGluZyBqb2JzCi0gICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgNTAwOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGRvbid0IHNlbmQgYW55IG1lc3NhZ2VzIGZvciBhIGJpdCBzbyB0aGF0IHRoZSBkcml2ZXIgcGluZ3MgaW4gdGhlIGJhY2tncm91bmQKLSAgICAgICAgICAgIFRocmVhZC5zbGVlcCgzMDAwKTsKLQotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIG5vIGJvbnVzIG1lc3NhZ2VzIHNvcnRhIGZpcmUgb2ZmIG9uY2Ugd2UgZ2V0IGJhY2sgdG8gc2VuZGluZyByZXF1ZXN0cwotICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IDUwMDsgaXgrKykgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGVyZSByZWFsbHkgc2hvdWxkbid0IGJlIG1vcmUgdGhhbiAzIG9mIHRoZXNlIHNlbnQuIHNob3VsZCBkZWZpbml0ZWx5IGJlIGF0IGxlYXN0IG9uZSB0aG91Z2gKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgbWVzc2FnZXMgPSBsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmZpbHRlcihtIC0+IG0uY29udGFpbnMoIlNlbmRpbmcgcGluZyBmcmFtZSB0byB0aGUgc2VydmVyIikpLmNvdW50KCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KG1lc3NhZ2VzLCBhbGxPZihncmVhdGVyVGhhbigwTCksIGxlc3NUaGFuT3JFcXVhbFRvKDNMKSkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRLZWVwQWxpdmVGb3JXZWJTb2NrZXRzV2l0aE5vSW5GbGlnaHRSZXF1ZXN0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBrZWVwIHRoZSBjb25uZWN0aW9uIHBvb2wgc2l6ZSBhdCAxIHRvIHJlbW92ZSB0aGUgcG9zc2liaWxpdHkgb2YgbG90cyBvZiBjb25uZWN0aW9ucyB0cnlpbmcgdG8gcGluZyB3aGljaCB3aWxsCi0gICAgICAgIC8vIGNvbXBsaWNhdGUgdGhlIGFzc2VydGlvbiBsb2dpYwotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLgotICAgICAgICAgICAgICAgIG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uUG9vbFNpemUoMSkuCi0gICAgICAgICAgICAgICAga2VlcEFsaXZlSW50ZXJ2YWwoMTAwMikuY3JlYXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIGZvcmNlZnVsbHkgaW5pdGlhbGl6ZSB0aGUgY2xpZW50IHRvIG1pbWljIGEgc2NlbmFyaW8gd2hlbiBjbGllbnQgaGFzIHNvbWUgYWN0aXZlIGNvbm5lY3Rpb24gd2l0aCBubwotICAgICAgICAgICAgLy8gaW4gZmxpZ2h0IHJlcXVlc3RzIG9uIHRoZW0uCi0gICAgICAgICAgICBjbGllbnQuaW5pdCgpOwotCi0gICAgICAgICAgICAvLyBkb24ndCBzZW5kIGFueSBtZXNzYWdlcyBmb3IgYSBiaXQgc28gdGhhdCB0aGUgZHJpdmVyIHBpbmdzIGluIHRoZSBiYWNrZ3JvdW5kCi0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoMzAwMCk7Ci0KLSAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBubyBib251cyBtZXNzYWdlcyBzb3J0YSBmaXJlIG9mZiBvbmNlIHdlIGdldCBiYWNrIHRvIHNlbmRpbmcgcmVxdWVzdHMKLSAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCA1MDA7IGl4KyspIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGhlcmUgcmVhbGx5IHNob3VsZG4ndCBiZSBtb3JlIHRoYW4gMyBvZiB0aGVzZSBzZW50LiBzaG91bGQgZGVmaW5pdGVseSBiZSBhdCBsZWFzdCBvbmUgdGhvdWdoCi0gICAgICAgICAgICBmaW5hbCBsb25nIG1lc3NhZ2VzID0gbG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5maWx0ZXIobSAtPiBtLmNvbnRhaW5zKCJTZW5kaW5nIHBpbmcgZnJhbWUgdG8gdGhlIHNlcnZlciIpKS5jb3VudCgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChtZXNzYWdlcywgYWxsT2YoZ3JlYXRlclRoYW4oMEwpLCBsZXNzVGhhbk9yRXF1YWxUbygzTCkpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRXZlbnR1YWxseVN1Y2NlZWRBZnRlckNoYW5uZWxMZXZlbEVycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkRXZlbnR1YWxseVN1Y2NlZWRBZnRlckNoYW5uZWxMZXZlbEVycm9yKCkgewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpCiAgICAgICAgICAgICAgICAgLnJlY29ubmVjdEludGVydmFsKDUwMCkKLSAgICAgICAgICAgICAgICAubWF4Q29udGVudExlbmd0aCg2NCkuY3JlYXRlKCk7CisgICAgICAgICAgICAgICAgLm1heFJlc3BvbnNlQ29udGVudExlbmd0aCgzMikuY3JlYXRlKCk7IC8vIFdhcm5pbmc6IGNvbXByZXNzaW9uIGNhbiBjaGFuZ2UgdGhlIGNvbnRlbnQgbGVuZ3RoLiBBZGp1c3QgYXMgbmVlZGVkLgogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZGVmIHggPSAnJzsoMC4uPDEwMjQpLmVhY2h7eCA9IHggKyAnJGl0J307eCIpLmFsbCgpLmdldCgpOworICAgICAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KCd4JykucmVwZWF0KGNvbmNhdCgneCcpKS50aW1lcyg1MTIpIikuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgZmFpbCgiUmVxdWVzdCBzaG91bGQgaGF2ZSBmYWlsZWQgYmVjYXVzZSBpdCBleGNlZWRlZCB0aGUgbWF4IGNvbnRlbnQgbGVuZ3RoIGFsbG93ZWQiKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIk1heCBmcmFtZSBsZW5ndGggb2YgNjQgaGFzIGJlZW4gZXhjZWVkZWQuIikpOworICAgICAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJSZXNwb25zZSBlbnRpdHkgdG9vIGxhcmdlIikpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKIAogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwpAQCAtNDUwLDcgKzM2MCw3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFdmVudHVhbGx5U3VjY2VlZEFmdGVyTXVjaEZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRFdmVudHVhbGx5U3VjY2VlZEFmdGVyTXVjaEZhaWx1cmUoKSB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCkBAIC00NjYsNyArMzc2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CiAKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKQEAgLTQ4MSw3ICszOTEsNyBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgbm90IGhhdmUgZ29uZSB0aHJvdWdoIGJlY2F1c2UgdGhlIHNlcnZlciBpcyBub3QgcnVubmluZyIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaSkgewogICAgICAgICAgICAgYXNzZXJ0VGhhdChpLCBpbnN0YW5jZU9mKE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbi5jbGFzcykpOwpAQCAtNDk3LDcgKzQwNyw3IEBACiAgICAgICAgIGZvciAoaW50IGl4ID0gMzsgaXggPCAxMzsgaXgrKykgewogICAgICAgICAgICAgVGltZVVuaXQuU0VDT05EUy5zbGVlcChpeCk7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCByZXN1bHQgPSBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCByZXN1bHQgPSBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgewpAQCAtNTA5LDcgKzQxOSw3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFdmVudHVhbGx5U3VjY2VlZFdpdGhSb3VuZFJvYmluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkRXZlbnR1YWxseVN1Y2NlZWRXaXRoUm91bmRSb2JpbigpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIG5vR3JlbWxpblNlcnZlciA9ICI3NC4xMjUuMjI1LjE5IjsKICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5hZGRDb250YWN0UG9pbnQobm9HcmVtbGluU2VydmVyKS5jcmVhdGUoKTsKIApAQCAtNTE4LDExICs0MjgsMTEgQEAKICAgICAgICAgICAgIGNsaWVudC5pbml0KCk7CiAKICAgICAgICAgICAgIC8vIHRoZSBmaXJzdCBob3N0IGlzIGRlYWQgb24gaW5pdC4gIHJlcXVlc3Qgc2hvdWxkIHN1Y2NlZWQgb24gbG9jYWxob3N0Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CkBAIC01NjEsNiArNDcxLDcgQEAKICAgICAgICAgICAgIGZvciAoSW50ZWdlciBzaXplIDogc2l6ZXMpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHBhcmFtcyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgICAgICAgICBwYXJhbXMucHV0KCJzaXplIiwgc2l6ZSAtIDEpOworICAgICAgICAgICAgICAgIHBhcmFtcy5wdXQoImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5Iik7CiAgICAgICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KHNjcmlwdCwgcGFyYW1zKTsKIAogICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhzaXplLmludFZhbHVlKCksIHJlc3VsdHMuYWxsKCkuZ2V0KCkuc2l6ZSgpKTsKQEAgLTU3Nyw3ICs0ODgsNyBAQAogCiAgICAgICAgIHRyeSB7CiAKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiamF2YS5hd3QuQ29sb3IuUkVEIik7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImphdmEuYXd0LkNvbG9yLlJFRCIsIGdyb292eVJlcXVlc3RPcHRpb25zKTsKIAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXN1bHRzLmFsbCgpLmpvaW4oKTsKQEAgLTU4NSwxMiArNDk2LDEyIEBACiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgaW5uZXIgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKICAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KGlubmVyLCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfU0VSSUFMSVpBVElPTiwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBkaWUgY29tcGxldGVseSBqdXN0IGJlY2F1c2Ugd2UgaGFkIGEgYmFkIHNlcmlhbGl6YXRpb24gZXJyb3IuICB0aGF0IGtpbmQgb2Ygc3R1ZmYgaGFwcGVucwogICAgICAgICAgICAgLy8gZnJvbSB0aW1lIHRvIHRpbWUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnNvbGUgaWYgeW91J3JlIGp1c3QgZXhwbG9yaW5nLgotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CkBAIC02MDIsMjMgKzUxMywyMSBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiMS8wIik7CisgICAgICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxKS5tYXRoKCdfLzAnKSIpOwogICAgICAgICAgICAgICAgIHJlc3VsdHMuYWxsKCkuam9pbigpOwogICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24gb3ZlciBkaXZpc2lvbiBieSB6ZXJvIik7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgaW5uZXIgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKGlubmVyIGluc3RhbmNlb2YgUmVzcG9uc2VFeGNlcHRpb24pOwotICAgICAgICAgICAgICAgIGFzc2VydFRoYXQoaW5uZXIuZ2V0TWVzc2FnZSgpLCBlbmRzV2l0aCgiRGl2aXNpb24gYnkgemVybyIpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KGlubmVyLmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIkRpdmlzaW9uIGJ5IHplcm8iKSk7CiAKICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZXggPSAoUmVzcG9uc2VFeGNlcHRpb24pIGlubmVyOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiamF2YS5sYW5nLkFyaXRobWV0aWNFeGNlcHRpb24iLCByZXguZ2V0UmVtb3RlRXhjZXB0aW9uSGllcmFyY2h5KCkuZ2V0KCkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmV4LmdldFJlbW90ZUV4Y2VwdGlvbkhpZXJhcmNoeSgpLmdldCgpLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChyZXguZ2V0UmVtb3RlU3RhY2tUcmFjZSgpLmdldCgpLCBjb250YWluc1N0cmluZygiRGl2aXNpb24gYnkgemVybyIpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlNlcnZlckVycm9yRXhjZXB0aW9uIiwgcmV4LmdldFJlbW90ZUV4Y2VwdGlvbigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBkaWUgY29tcGxldGVseSBqdXN0IGJlY2F1c2Ugd2UgaGFkIGEgYmFkIHNlcmlhbGl6YXRpb24gZXJyb3IuICB0aGF0IGtpbmQgb2Ygc3R1ZmYgaGFwcGVucwogICAgICAgICAgICAgLy8gZnJvbSB0aW1lIHRvIHRpbWUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnNvbGUgaWYgeW91J3JlIGp1c3QgZXhwbG9yaW5nLgotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CkBAIC02MzAsOCArNTM5LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAotICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJzRml2ZSA9IGNsaWVudC5zdWJtaXQoIlRocmVhZC5zbGVlcCg1MDAwKTsnZml2ZSciKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByc1plcm8gPSBjbGllbnQuc3VibWl0KCInemVybyciKTsKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByc0ZpdmUgPSBjbGllbnQuc3VibWl0KCJUaHJlYWQuc2xlZXAoNTAwMCk7J2ZpdmUnIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpOworICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJzWmVybyA9IGNsaWVudC5zdWJtaXQoIid6ZXJvJyIsIGdyb292eVJlcXVlc3RPcHRpb25zKTsKIAogICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmVGaXZlID0gcnNGaXZlLmFsbCgpOwogICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmVaZXJvID0gcnNaZXJvLmFsbCgpOwpAQCAtNjUxLDQ5ICs1NjAsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogVGhpcyB0ZXN0IHZhbGlkYXRlcyB0aGF0IHRoZSBzZXNzaW9uIHJlcXVlc3RzIGFyZSBwcm9jZXNzZWQgaW4tb3JkZXIgb24gdGhlIHNlcnZlci4gVGhlIG9yZGVyIG9mIHJlc3VsdHMKLSAgICAgKiByZXR1cm5lZCB0byB0aGUgY2xpZW50IG1pZ2h0IGJlIGRpZmZlcmVudCB0aG91Z2ggc2luY2UgZWFjaCByZXN1bHQgaXMgaGFuZGxlZCBieSBhIGRpZmZlcmVudCBleGVjdXRvciB0aHJlYWQuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9jZXNzU2Vzc2lvblJlcXVlc3RzSW5PcmRlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IGZpcnN0ID0gY2xpZW50LnN1Ym1pdCgiVGhyZWFkLnNsZWVwKDUwMDApO2cuVigpLmZvbGQoKS5jb2FsZXNjZSh1bmZvbGQoKSwgX18uYWRkVigncGVyc29uJykpIik7Ci0gICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgc2Vjb25kID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpOwotCi0gICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZUZpcnN0ID0gZmlyc3QuYWxsKCk7Ci0gICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZVNlY29uZCA9IHNlY29uZC5hbGwoKTsKLQotICAgICAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goMik7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICAgICAgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0KLSAgICAgICAgICAgIGZ1dHVyZUZpcnN0LnRoZW5BY2NlcHRBc3luYyhyIC0+IHsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFkZChyLmdldCgwKS5nZXRWZXJ0ZXgoKS5sYWJlbCgpKTsKLSAgICAgICAgICAgICAgICBsYXRjaC5jb3VudERvd24oKTsKLSAgICAgICAgICAgIH0sIGV4ZWN1dG9yKTsKLQotICAgICAgICAgICAgZnV0dXJlU2Vjb25kLnRoZW5BY2NlcHRBc3luYyhyIC0+IHsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFkZChyLmdldCgwKS5nZXRMb25nKCkpOwotICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOwotICAgICAgICAgICAgfSwgZXhlY3V0b3IpOwotCi0gICAgICAgICAgICAvLyB3YWl0IGZvciBib3RoIHJlc3VsdHMKLSAgICAgICAgICAgIGxhdGNoLmF3YWl0KDMwMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotCi0gICAgICAgICAgICBhc3NlcnRUaGF0KCJTaG91bGQgY29udGFpbiAyIHJlc3VsdHMiLCByZXN1bHRzLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoIlRoZSBudW1lcmljIHJlc3VsdCBzaG91bGQgYmUgMSIsIHJlc3VsdHMuY29udGFpbnMoMUwpKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoIlRoZSBzdHJpbmcgcmVzdWx0IGNvbnRhaW4gbGFiZWwgcGVyc29uIiwgcmVzdWx0cy5jb250YWlucygicGVyc29uIikpOwotCi0gICAgICAgICAgICBleGVjdXRvci5zaHV0ZG93bigpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRXYWl0Rm9yQWxsUmVzdWx0c1RvQXJyaXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKQEAgLTcwMSw3ICs1NjcsNyBAQAogICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNoZWNrZWQgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiWzEsMiwzLDQsNSw2LDcsOCw5XSIpOworICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxLDIsMyw0LDUsNiw3LDgsOSkiKTsKICAgICAgICAgICAgIHdoaWxlICghcmVzdWx0cy5hbGxJdGVtc0F2YWlsYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHRzLmdldEF2YWlsYWJsZUl0ZW1Db3VudCgpIDwgMTApOwogICAgICAgICAgICAgICAgIGNoZWNrZWQuaW5jcmVtZW50QW5kR2V0KCk7CkBAIC03MTYsMTIgKzU4MiwxMiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3RyZWFtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkU3RyZWFtKCkgewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJbMSwyLDMsNCw1LDYsNyw4LDldIik7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5KSIpOwogICAgICAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CiAgICAgICAgICAgICByZXN1bHRzLnN0cmVhbSgpLm1hcChpIC0+IGkuZ2V0KEludGVnZXIuY2xhc3MpICogMikuZm9yRWFjaChpIC0+IGFzc2VydEVxdWFscyhjb3VudGVyLmluY3JlbWVudEFuZEdldCgpICogMiwgSW50ZWdlci5wYXJzZUludChpLnRvU3RyaW5nKCkpKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoOSwgY291bnRlci5nZXQoKSk7CkBAIC03MzUsMTIgKzYwMSwxMiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSXRlcmF0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHNob3VsZEl0ZXJhdGUoKSB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoIlsxLDIsMyw0LDUsNiw3LDgsOV0iKTsKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMSwyLDMsNCw1LDYsNyw4LDkpIik7CiAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxSZXN1bHQ+IGl0dHkgPSByZXN1bHRzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKICAgICAgICAgICAgIHdoaWxlIChpdHR5Lmhhc05leHQoKSkgewpAQCAtNzY0LDcgKzYzMCw3IEBACiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJbMSwyLDMsNCw1LDYsNyw4LDldIik7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5KSIpOwogICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBiYXRjaDEgPSByZXN1bHRzLnNvbWUoNSk7CiAgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGJhdGNoMiA9IHJlc3VsdHMuc29tZSg1KTsKICAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gYmF0Y2hOb3RoaW5nTGVmdCA9IHJlc3VsdHMuc29tZSg1KTsKQEAgLTc5NCw3ICs2NjAsNyBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiWzEsMiwzLDQsNSw2LDcsOCw5XSIpOworICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxLDIsMyw0LDUsNiw3LDgsOSkiKTsKICAgICAgICAgICAgIGZpbmFsIFJlc3VsdCBvbmUgPSByZXN1bHRzLm9uZSgpOwogICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBiYXRjaDEgPSByZXN1bHRzLnNvbWUoNCk7CiAgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGJhdGNoMiA9IHJlc3VsdHMuc29tZSg1KTsKQEAgLTg1MSw3ICs3MTcsNyBAQAogICAgICAgICAgICAgZmluYWwgQXRvbWljUmVmZXJlbmNlW10gcmVmcyA9IG5ldyBBdG9taWNSZWZlcmVuY2VbcmVxdWVzdHNdOwogICAgICAgICAgICAgSW50U3RyZWFtLnJhbmdlKDAsIHJlcXVlc3RzKS5mb3JFYWNoKGl4IC0+IHsKICAgICAgICAgICAgICAgICByZWZzW2l4XSA9IG5ldyBBdG9taWNSZWZlcmVuY2UoKTsKLSAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0QXN5bmMoIlRocmVhZC5zbGVlcCg1MDAwKTtbMSwyLDMsNCw1LDYsNyw4LDldIikudGhlbkFjY2VwdChycyAtPgorICAgICAgICAgICAgICAgIGNsaWVudC5zdWJtaXRBc3luYygiVGhyZWFkLnNsZWVwKDUwMDApO1sxLDIsMyw0LDUsNiw3LDgsOV0iLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykudGhlbkFjY2VwdChycyAtPgogICAgICAgICAgICAgICAgICAgICAgICAgcnMuYWxsKCkudGhlbkFjY2VwdChyZWZzW2l4XTo6c2V0KS50aGVuUnVuKGxhdGNoOjpjb3VudERvd24pKTsKICAgICAgICAgICAgIH0pOwogCkBAIC05MTQsMTAgKzc4MCwxMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNsaWVudDEuc3VibWl0KCIxKzEiKS5hbGwoKS5qb2luKCk7CisgICAgICAgICAgICAgICAgY2xpZW50MS5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuam9pbigpOwogICAgICAgICAgICAgICAgIGZhaWwoIkV4cGVjdGluZyBhbiBleGNlcHRpb24gYmVjYXVzZSB0aGUgc2VydmVyIGlzIHNodXQgZG93bi4iKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleC5nZXRDYXVzZSgpIGluc3RhbmNlb2YgVGltZW91dEV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChleC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJ3YWl0aW5nIGZvciBjb25uZWN0aW9uIikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY2x1c3Rlci5hdmFpbGFibGVIb3N0cygpLnNpemUoKSk7CkBAIC05MzIsNyArNzk5LDcgQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogICAgICAgICB0cnkgewogCi0gICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoIlRpbmtlckdyYXBoLm9wZW4oKS52YXJpYWJsZXMoKSIpOworICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJUaW5rZXJHcmFwaC5vcGVuKCkudmFyaWFibGVzKCkiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucyk7CiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hbGwoKS5qb2luKCk7CkBAIC05NDAsMTU0ICs4MDcsMjUgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBpbm5lciA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwogICAgICAgICAgICAgICAgIGFzc2VydFRydWUoaW5uZXIgaW5zdGFuY2VvZiBSZXNwb25zZUV4Y2VwdGlvbik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfU0VSSUFMSVpBVElPTiwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlNlcnZlclNlcmlhbGl6YXRpb25FeGNlcHRpb24iLCAoKFJlc3BvbnNlRXhjZXB0aW9uKSBpbm5lcikuZ2V0UmVtb3RlRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBzaG91bGQgbm90IGRpZSBjb21wbGV0ZWx5IGp1c3QgYmVjYXVzZSB3ZSBoYWQgYSBiYWQgc2VyaWFsaXphdGlvbiBlcnJvci4gIHRoYXQga2luZCBvZiBzdHVmZiBoYXBwZW5zCiAgICAgICAgICAgICAvLyBmcm9tIHRpbWUgdG8gdGltZSwgZXNwZWNpYWxseSBpbiB0aGUgY29uc29sZSBpZiB5b3UncmUganVzdCBleHBsb3JpbmcuCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvU3RyaW5nV2hlblJlcXVlc3RlZEdyYXBoQmluYXJ5VjEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtLnB1dCgic2VyaWFsaXplUmVzdWx0VG9TdHJpbmciLCB0cnVlKTsKLSAgICAgICAgZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCk7Ci0gICAgICAgIHNlcmlhbGl6ZXIuY29uZmlndXJlKG0sIG51bGwpOwotCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihzZXJpYWxpemVyKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRTZXQgPSBjbGllbnQuc3VibWl0KCJUaW5rZXJGYWN0b3J5LmNyZWF0ZUNsYXNzaWMoKSIpOwotICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IHJlc3VsdFNldC5hbGwoKS5qb2luKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCByZXN1bHRzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGlua2VyZ3JhcGhbdmVydGljZXM6NiBlZGdlczo2XSIsIHJlc3VsdHMuZ2V0KDApLmdldFN0cmluZygpKTsKLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aEdyYXBoU09OVjFTZXJpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMV9VTlRZUEVEKS5jcmVhdGUoKTsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aEdyYXBoQmluYXJ5VjRTZXJpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNCkuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHIgPSBjbGllbnQuc3VibWl0KCJUaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpLnRyYXZlcnNhbCgpLlYoMSkiKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgci5zaXplKCkpOwotCi0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG0gPSByLmdldCgwKS5nZXQoTWFwLmNsYXNzKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBtLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbS5nZXQoImlkIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCBtLmdldCgibGFiZWwiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInZlcnRleCIsIG0uZ2V0KCJ0eXBlIikpOwotCi0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHByb3BlcnRpZXMgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgbS5nZXQoInByb3BlcnRpZXMiKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBwcm9wZXJ0aWVzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBuYW1lcyA9IChMaXN0PE9iamVjdD4pIHByb3BlcnRpZXMuZ2V0KCJuYW1lIik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbmFtZXMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBuYW1lUHJvcGVydGllcyA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSBuYW1lcy5nZXQoMCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbmFtZVByb3BlcnRpZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBuYW1lUHJvcGVydGllcy5nZXQoImlkIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIG5hbWVQcm9wZXJ0aWVzLmdldCgidmFsdWUiKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBhZ2VzID0gKExpc3Q8T2JqZWN0PikgcHJvcGVydGllcy5nZXQoImFnZSIpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGFnZXMuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhZ2VQcm9wZXJ0aWVzID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIGFnZXMuZ2V0KDApOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGFnZVByb3BlcnRpZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBhZ2VQcm9wZXJ0aWVzLmdldCgiaWQiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjksIGFnZVByb3BlcnRpZXMuZ2V0KCJ2YWx1ZSIpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkV29ya1dpdGhHcmFwaFNPTlYyU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByID0gY2xpZW50LnN1Ym1pdCgiVGlua2VyRmFjdG9yeS5jcmVhdGVNb2Rlcm4oKS50cmF2ZXJzYWwoKS5WKDEpIikuYWxsKCkuam9pbigpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHIuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgVmVydGV4IHYgPSByLmdldCgwKS5nZXQoRGV0YWNoZWRWZXJ0ZXguY2xhc3MpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHYuaWQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHYubGFiZWwoKSk7Ci0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBJdGVyYXRvclV0aWxzLmNvdW50KHYucHJvcGVydGllcygpKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdi52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyOSwgSW50ZWdlci5wYXJzZUludCh2LnZhbHVlKCJhZ2UiKS50b1N0cmluZygpKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFdvcmtXaXRoR3JhcGhTT05FeHRlbmRlZFYyU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByID0gY2xpZW50LnN1Ym1pdCgiamF2YS50aW1lLkluc3RhbnQuRVBPQ0giKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgci5zaXplKCkpOwotCi0gICAgICAgICAgICBmaW5hbCBJbnN0YW50IHRoZW4gPSByLmdldCgwKS5nZXQoSW5zdGFudC5jbGFzcyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoSW5zdGFudC5FUE9DSCwgdGhlbik7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFdvcmtXaXRoR3JhcGhTT05WM1NlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gciA9IGNsaWVudC5zdWJtaXQoIlRpbmtlckZhY3RvcnkuY3JlYXRlTW9kZXJuKCkudHJhdmVyc2FsKCkuVigxKSIpLmFsbCgpLmpvaW4oKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gci5nZXQoMCkuZ2V0KERldGFjaGVkVmVydGV4LmNsYXNzKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCB2LmlkKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2LmxhYmVsKCkpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgSXRlcmF0b3JVdGlscy5jb3VudCh2LnByb3BlcnRpZXMoKSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHYudmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjksIEludGVnZXIucGFyc2VJbnQodi52YWx1ZSgiYWdlIikudG9TdHJpbmcoKSkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aEdyYXBoU09ORXh0ZW5kZWRWM1NlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gciA9IGNsaWVudC5zdWJtaXQoImphdmEudGltZS5JbnN0YW50LkVQT0NIIikuYWxsKCkuam9pbigpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHIuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgSW5zdGFudCB0aGVuID0gci5nZXQoMCkuZ2V0KEluc3RhbnQuY2xhc3MpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEluc3RhbnQuRVBPQ0gsIHRoZW4pOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aEdyYXBoQmluYXJ5VjFTZXJpYWxpemF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WMSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHIgPSBjbGllbnQuc3VibWl0KCJUaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpLnRyYXZlcnNhbCgpLlYoMSkiKS5hbGwoKS5qb2luKCk7CisgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gciA9IGNsaWVudC5zdWJtaXQoIlRpbmtlckZhY3RvcnkuY3JlYXRlTW9kZXJuKCkudHJhdmVyc2FsKCkuVigxKSIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5qb2luKCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgci5zaXplKCkpOwogCiAgICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IHIuZ2V0KDApLmdldChEZXRhY2hlZFZlcnRleC5jbGFzcyk7CkBAIC0xMTAwLDU3ICs4MzgsMzUgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbENsaWVudFNpZGVXaXRoVG9vTGFyZ2VBUmVzcG9uc2UoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkubWF4Q29udGVudExlbmd0aCgxKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5tYXhSZXNwb25zZUNvbnRlbnRMZW5ndGgoMSkuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZhdHR5ID0gSW50U3RyZWFtLnJhbmdlKDAsIDEwMCkubWFwVG9PYmooU3RyaW5nOjp2YWx1ZU9mKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygpKTsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIiciICsgZmF0dHkgKyAiJyIpLmFsbCgpLmdldCgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdChTdHJpbmcuZm9ybWF0KCJnLmluamVjdCgnJXMnKSIsIGZhdHR5KSkuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gcmUpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShyZSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHJvb3QuZ2V0TWVzc2FnZSgpLmVxdWFscygiTWF4IGZyYW1lIGxlbmd0aCBvZiAxIGhhcyBiZWVuIGV4Y2VlZGVkLiIpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocm9vdC5nZXRNZXNzYWdlKCkuY29udGFpbnMoIlJlc3BvbnNlIGVudGl0eSB0b28gbGFyZ2UiKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybk5pY2VNZXNzYWdlRnJvbU9wU2VsZWN0b3IoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgcHVibGljIHZvaWQgc2hvdWxkU3VjY2VlZENsaWVudFNpZGVXaXRoTGFyZ2VSZXNwb25zZUlmTWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoWmVybygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLm1heFJlc3BvbnNlQ29udGVudExlbmd0aCgwKS5jcmVhdGUoKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXAgbSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIG0ucHV0KG51bGwsICJhIG51bGwga2V5IHdpbGwgZm9yY2UgYSB0aHJvdyBvZiBPcFByb2Nlc3NvckV4Y2VwdGlvbiBpbiBtZXNzYWdlIHZhbGlkYXRpb24iKTsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIsIG0pLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UocmUpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJUaGUgW2V2YWxdIG1lc3NhZ2UgaXMgdXNpbmcgb25lIG9yIG1vcmUgaW52YWxpZCBiaW5kaW5nIGtleXMgLSB0aGV5IG11c3QgYmUgb2YgdHlwZSBTdHJpbmcgYW5kIGNhbm5vdCBiZSBudWxsIiwgcm9vdC5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZhdHR5ID0gSW50U3RyZWFtLnJhbmdlKDAsIDEwMDAwKS5tYXBUb09iaihTdHJpbmc6OnZhbHVlT2YpLmNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGZhdHR5LCBjbGllbnQuc3VibWl0KFN0cmluZy5mb3JtYXQoImcuaW5qZWN0KCclcycpIiwgZmF0dHkpKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFeGVjdXRlU2NyaXB0SW5TZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMSA9IGNsaWVudC5zdWJtaXQoInggPSBbMSwyLDMsNCw1LDYsNyw4LDldIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg5LCByZXN1bHRzMS5hbGwoKS5nZXQoKS5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMiA9IGNsaWVudC5zdWJtaXQoInhbMF0rMSIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0czIuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czMgPSBjbGllbnQuc3VibWl0KCJ4WzFdKzIiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHJlc3VsdHMzLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkTm90VGhyb3dOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwpAQCAtMTE2NCwxOSArODgwLDYgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEV2YWxJbkdyZW1saW5MYW5nKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWxhbmciKS5jcmVhdGUoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxMTEsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDExMSkiLCBybykub25lKCkuZ2V0SW50KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRFdmFsSW5HcmVtbGluTGFuZ1dpdGhQYXJhbWV0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwpAQCAtMTE5NSwxMjcgKzg5OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENsb3NlU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czEgPSBjbGllbnQuc3VibWl0KCJ4ID0gWzEsMiwzLDQsNSw2LDcsOCw5XSIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoOSwgcmVzdWx0czEuYWxsKCkuZ2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMyID0gY2xpZW50LnN1Ym1pdCgieFswXSsxIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHRzMi5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotCi0gICAgICAgIGNsaWVudC5jbG9zZSgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJ4WzBdKzEiKS5hbGwoKS5nZXQoKTsKLSAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBhbiBleGNlcHRpb24gYmVjYXVzZSB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LCBpbnN0YW5jZU9mKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFeGVjdXRlU2NyaXB0SW5TZXNzaW9uQXNzdW1pbmdEZWZhdWx0ZWRJbXBvcnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSk7Ci0KLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMxID0gY2xpZW50LnN1Ym1pdCgiVGlua2VyRmFjdG9yeS5jbGFzcy5uYW1lIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhUaW5rZXJGYWN0b3J5LmNsYXNzLmdldE5hbWUoKSwgcmVzdWx0czEuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFeGVjdXRlU2NyaXB0SW5TZXNzaW9uT25UcmFuc2FjdGlvbmFsR3JhcGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXhCZWZvcmVUeCA9IGNsaWVudC5zdWJtaXQoInY9Zy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwic3RlcGhlblwiKS5uZXh0KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmVydGV4QmVmb3JlVHgubGFiZWwoKSk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIG5hbWVWYWx1ZUZyb21WID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkudmFsdWVzKCduYW1lJykubmV4dCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN0ZXBoZW4iLCBuYW1lVmFsdWVGcm9tVik7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleEZyb21CaW5kaW5nID0gY2xpZW50LnN1Ym1pdCgidiIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXhGcm9tQmluZGluZy5sYWJlbCgpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gdmVydGV4QWZ0ZXJUeCA9IGNsaWVudC5zdWJtaXQoImcuVih2KS5wcm9wZXJ0eShcImNvbG9yXCIsXCJibHVlXCIpLml0ZXJhdGUoKTsgZy50eCgpLmNvbW1pdCgpOyBnLlYodikudmFsdWVNYXAoKS5ieSh1bmZvbGQoKSkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0KE1hcC5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3RlcGhlbiIsIHZlcnRleEFmdGVyVHguZ2V0KCJuYW1lIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImJsdWUiLCB2ZXJ0ZXhBZnRlclR4LmdldCgiY29sb3IiKSk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRXhlY3V0ZVNjcmlwdEluU2Vzc2lvbk9uVHJhbnNhY3Rpb25hbFdpdGhNYW51YWxUcmFuc2FjdGlvbnNHcmFwaCgpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBzZXNzaW9ubGVzc0NsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICBjbGllbnQuc3VibWl0KCJncmFwaC50eCgpLm9uUmVhZFdyaXRlKFRyYW5zYWN0aW9uLlJFQURfV1JJVEVfQkVIQVZJT1IuTUFOVUFMKTtudWxsIikuYWxsKCkuZ2V0KCk7Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoImdyYXBoLnR4KCkub3BlbigpIikuYWxsKCkuZ2V0KCk7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleEJlZm9yZVR4ID0gY2xpZW50LnN1Ym1pdCgidj1nLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKS5uZXh0KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmVydGV4QmVmb3JlVHgubGFiZWwoKSk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIG5hbWVWYWx1ZUZyb21WID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5uZXh0KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3RlcGhlbiIsIG5hbWVWYWx1ZUZyb21WKTsKLQotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4RnJvbUJpbmRpbmcgPSBjbGllbnQuc3VibWl0KCJ2IikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZlcnRleEZyb21CaW5kaW5nLmxhYmVsKCkpOwotCi0gICAgICAgIGNsaWVudC5zdWJtaXQoImcuVih2KS5wcm9wZXJ0eShcImNvbG9yXCIsXCJibHVlXCIpIikuYWxsKCkuZ2V0KCk7Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoImcudHgoKS5jb21taXQoKSIpLmFsbCgpLmdldCgpOwotCi0gICAgICAgIC8vIFJ1biBhIHNlc3Npb25sZXNzIHJlcXVlc3QgdG8gY2hhbmdlIHRyYW5zYWN0aW9uLnJlYWRXcml0ZUNvbnN1bWVyIGJhY2sgdG8gQVVUTwotICAgICAgICAvLyBUaGUgd2lsbCBtYWtlIHRoZSBuZXh0IGluIHNlc3Npb24gcmVxdWVzdCBmYWlsIGlmIGNvbnN1bWVycyBhcmVuJ3QgVGhyZWFkTG9jYWwKLSAgICAgICAgc2Vzc2lvbmxlc3NDbGllbnQuc3VibWl0KCJnLlYoKS5uZXh0KCkiKS5hbGwoKS5nZXQoKTsKLQotICAgICAgICBjbGllbnQuc3VibWl0KCJnLnR4KCkub3BlbigpIikuYWxsKCkuZ2V0KCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IHZlcnRleEFmdGVyVHggPSBjbGllbnQuc3VibWl0KCJnLlYoKS52YWx1ZU1hcCgpLmJ5KHVuZm9sZCgpKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXQoTWFwLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgdmVydGV4QWZ0ZXJUeC5nZXQoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiYmx1ZSIsIHZlcnRleEFmdGVyVHguZ2V0KCJjb2xvciIpKTsKLQotICAgICAgICBjbGllbnQuc3VibWl0KCJnLnR4KCkucm9sbGJhY2soKSIpLmFsbCgpLmdldCgpOwotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEV4ZWN1dGVJblNlc3Npb25BbmRTZXNzaW9ubGVzc1dpdGhvdXRPcGVuaW5nVHJhbnNhY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgc2Vzc2lvbkNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgc2Vzc2lvbmxlc3NDbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICAgICAgLy9vcGVuIHRyYW5zYWN0aW9uIGluIHNlc3Npb24sIHRoZW4gYWRkIHZlcnRleCBhbmQgY29tbWl0Ci0gICAgICAgICAgICBzZXNzaW9uQ2xpZW50LnN1Ym1pdCgiZy50eCgpLm9wZW4oKSIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleEJlZm9yZVR4ID0gc2Vzc2lvbkNsaWVudC5zdWJtaXQoInY9Zy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwic3RlcGhlblwiKS5uZXh0KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZlcnRleEJlZm9yZVR4LmxhYmVsKCkpOwotICAgICAgICAgICAgc2Vzc2lvbkNsaWVudC5zdWJtaXQoImcudHgoKS5jb21taXQoKSIpLmFsbCgpLmdldCgpOwotCi0gICAgICAgICAgICAvLyBjaGVjayB0aGF0IHNlc3Npb24gdHJhbnNhY3Rpb24gaXMgY2xvc2VkCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzT3BlbiA9IHNlc3Npb25DbGllbnQuc3VibWl0KCJnLnR4KCkuaXNPcGVuKCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0Qm9vbGVhbigpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiVHJhbnNhY3Rpb24gc2hvdWxkIGJlIGNsb3NlZCIsICFpc09wZW4pOwotCi0gICAgICAgICAgICAvL3J1biBhIHNlc3Npb25sZXNzIHJlYWQKLSAgICAgICAgICAgIHNlc3Npb25sZXNzQ2xpZW50LnN1Ym1pdCgiZy5WKCkiKS5hbGwoKS5nZXQoKTsKLQotICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCBzZXNzaW9uIHRyYW5zYWN0aW9uIGlzIHN0aWxsIGNsb3NlZAotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc09wZW5BZnRlclNlc3Npb25sZXNzID0gc2Vzc2lvbkNsaWVudC5zdWJtaXQoImcudHgoKS5pc09wZW4oKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRCb29sZWFuKCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJUcmFuc2FjdGlvbiBzaG91bGQgc3RpbCBiZSBjbG9zZWQiLCAhaXNPcGVuQWZ0ZXJTZXNzaW9ubGVzcyk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KKyAgICBASWdub3JlKCJTZXJ2ZXIgZG9lc24ndCBjdXJyZW50bHkgc3VwcG9ydCB0cmFuc2FjdGlvbnMuIikKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEV4ZWN1dGVTZXNzaW9ubGVzc1NjcmlwdE9uVHJhbnNhY3Rpb25hbEdyYXBoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKQEAgLTEzMjMsODkgKzkwNiwzNyBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgLy8gdGhpcyBsaW5lIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlc3RzIEdyYXBoVHJhdmVyc2FsIHdoaWNoIGhhcyBhIGNlcnRhaW4gdHJhbnNhY3Rpb25hbCBwYXRoCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXhSZXF1ZXN0MSA9IGNsaWVudC5zdWJtaXQoImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLFwic3RlcGhlblwiKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKKyAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleFJlcXVlc3QxID0gY2xpZW50LnN1Ym1pdCgiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsXCJzdGVwaGVuXCIpIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpCisgICAgICAgICAgICAgICAgLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKIAotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4UmVxdWVzdDIgPSBjbGllbnQuc3VibWl0KCJncmFwaC52ZXJ0aWNlcygpLm5leHQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKKyAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleFJlcXVlc3QyID0gY2xpZW50LnN1Ym1pdCgiZ3JhcGgudmVydGljZXMoKS5uZXh0KCkiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykKKyAgICAgICAgICAgICAgICAuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwogICAgICAgICBhc3NlcnRFcXVhbHModmVydGV4UmVxdWVzdDEuaWQoKSwgdmVydGV4UmVxdWVzdDIuaWQoKSk7CiAKICAgICAgICAgLy8gdGhpcyBsaW5lIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IHRlc3RzIHRoZSBvdGhlciB0cmFuc2FjdGlvbmFsIHBhdGgKLSAgICAgICAgY2xpZW50LnN1Ym1pdCgiZ3JhcGguYWRkVmVydGV4KFwibmFtZVwiLFwibWFya29cIikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7CisgICAgICAgIGNsaWVudC5zdWJtaXQoImdyYXBoLmFkZFZlcnRleChcIm5hbWVcIixcIm1hcmtvXCIpIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRMb25nKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKIAogICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFeGVjdXRlU2NyaXB0SW5TZXNzaW9uV2l0aEJpbmRpbmdzU2F2ZWRPblNlcnZlckJldHdlZW5SZXF1ZXN0cygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MxID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBiaW5kaW5nczEucHV0KCJhIiwgMTAwKTsKLSAgICAgICAgYmluZGluZ3MxLnB1dCgiYiIsIDIwMCk7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMSA9IGNsaWVudC5zdWJtaXQoInggPSBhICsgYiIsIGJpbmRpbmdzMSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzMDAsIHJlc3VsdHMxLm9uZSgpLmdldEludCgpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGJpbmRpbmdzMiA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgYmluZGluZ3MyLnB1dCgiYiIsIDEwMCk7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMiA9IGNsaWVudC5zdWJtaXQoInggKyBiICsgYSIsIGJpbmRpbmdzMik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1MDAsIHJlc3VsdHMyLm9uZSgpLmdldEludCgpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGJpbmRpbmdzMyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgYmluZGluZ3MzLnB1dCgieCIsIDEwMCk7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMyA9IGNsaWVudC5zdWJtaXQoInggKyBiICsgYSArIDEiLCBiaW5kaW5nczMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMzAxLCByZXN1bHRzMy5vbmUoKS5nZXRJbnQoKSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5nczQgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzNCA9IGNsaWVudC5zdWJtaXQoInggKyBiICsgYSArIDEiLCBiaW5kaW5nczQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMzAxLCByZXN1bHRzNC5vbmUoKS5nZXRJbnQoKSk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRXhlY3V0ZVNjcmlwdHNJbk11bHRpcGxlU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50MSA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSArICIxIik7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50MiA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSArICIyIik7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50MyA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSArICIzIik7Ci0KLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMTEgPSBjbGllbnQxLnN1Ym1pdCgieCA9IDEiKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMjEgPSBjbGllbnQyLnN1Ym1pdCgieCA9IDIiKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMzEgPSBjbGllbnQzLnN1Ym1pdCgieCA9IDMiKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZXN1bHRzMTEuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHRzMjEuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCByZXN1bHRzMzEuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMxMiA9IGNsaWVudDEuc3VibWl0KCJ4ICsgMTAwIik7Ci0gICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czIyID0gY2xpZW50Mi5zdWJtaXQoInggKiAyIik7Ci0gICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czMyID0gY2xpZW50My5zdWJtaXQoInggKiAxMCIpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMSwgcmVzdWx0czEyLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgcmVzdWx0czIyLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzAsIHJlc3VsdHMzMi5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RIYXZlS25vd2xlZGdlT2ZCaW5kaW5nc0JldHdlZW5SZXF1ZXN0c1doZW5TZXNzaW9ubGVzcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQxID0gY2x1c3Rlci5jb25uZWN0KCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQyID0gY2x1c3Rlci5jb25uZWN0KCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQzID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMxMSA9IGNsaWVudDEuc3VibWl0KCJ4ID0gMSIpOwotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czIxID0gY2xpZW50Mi5zdWJtaXQoInggPSAyIik7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzMzEgPSBjbGllbnQzLnN1Ym1pdCgieCA9IDMiKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMxMSA9IGNsaWVudDEuc3VibWl0KCJ4ID0gMSIsIGdyb292eVJlcXVlc3RPcHRpb25zKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMyMSA9IGNsaWVudDIuc3VibWl0KCJ4ID0gMiIsIGdyb292eVJlcXVlc3RPcHRpb25zKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMzMSA9IGNsaWVudDMuc3VibWl0KCJ4ID0gMyIsIGdyb292eVJlcXVlc3RPcHRpb25zKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdHMxMS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0czIxLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygzLCByZXN1bHRzMzEuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50MS5zdWJtaXQoIngiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudDEuc3VibWl0KCJ4IiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiVGhlIHZhcmlhYmxlICd4JyBzaG91bGQgbm90IGJlIHByZXNlbnQgb24gdGhlIG5ldyByZXF1ZXN0LiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CkBAIC0xNDE0LDcgKzk0NSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50Mi5zdWJtaXQoIngiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudDIuc3VibWl0KCJ4IiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiVGhlIHZhcmlhYmxlICd4JyBzaG91bGQgbm90IGJlIHByZXNlbnQgb24gdGhlIG5ldyByZXF1ZXN0LiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CkBAIC0xNDIzLDcgKzk1NCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50My5zdWJtaXQoIngiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudDMuc3VibWl0KCJ4IiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiVGhlIHZhcmlhYmxlICd4JyBzaG91bGQgbm90IGJlIHByZXNlbnQgb24gdGhlIG5ldyByZXF1ZXN0LiIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CkBAIC0xNDM3LDEwICs5NjgsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmVUaHJlYWRTYWZlVG9Vc2VPbmVDbGllbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS53b3JrZXJQb29sU2l6ZSgyKQotICAgICAgICAgICAgICAgIC5tYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKDY0KQotICAgICAgICAgICAgICAgIC5taW5JblByb2Nlc3NQZXJDb25uZWN0aW9uKDMyKQotICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoMTYpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSg4KS5jcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAubWF4Q29ubmVjdGlvblBvb2xTaXplKDE2KS5jcmVhdGUoKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIGZpbmFsIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiByZXN1bHRzID0gbmV3IENvbmN1cnJlbnRIYXNoTWFwPD4oKTsKQEAgLTE0NDksNyArOTc3LDcgQEAKICAgICAgICAgICAgIGZpbmFsIGludCBvdGhlck51bSA9IGl4OwogICAgICAgICAgICAgZmluYWwgVGhyZWFkIHQgPSBuZXcgVGhyZWFkKCgpLT57CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXQob3RoZXJOdW0sIGNsaWVudC5zdWJtaXQoIjEwMDArIiArIG90aGVyTnVtKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1dChvdGhlck51bSwgY2xpZW50LnN1Ym1pdChTdHJpbmcuZm9ybWF0KCJnLmluamVjdCglZCkiLCAxMDAwK290aGVyTnVtKSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTQ2OSwyNCArOTk3LDI2IEBACiAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICB9CiAKKyAgICBASWdub3JlKCJ1c2VkIHR4IikKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlcXVpcmVBbGlhc2VkR3JhcGhWYXJpYWJsZXNJblN0cmljdFRyYW5zYWN0aW9uTW9kZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIHN0cmljdCBtb2RlIGlzIG9uIGFuZCBubyBhbGlhc2luZyB3YXMgcGVyZm9ybWVkIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKICAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwogICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIHJvb3Q7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUywgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgQElnbm9yZSgic3RyaWN0IHRyYW5zYWN0aW9ucyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRBbGlhc0dyYXBoVmFyaWFibGVzSW5TdHJpY3RUcmFuc2FjdGlvbk1vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIApAQCAtMTQ5NCwxNiArMTAyNCwxOCBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuYWRkVmVydGV4KCduYW1lJywnc3RlcGhlbicpOyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuYWRkVmVydGV4KCduYW1lJywnc3RlcGhlbicpOyIsCisgICAgICAgICAgICAgICAgICAgIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0b3NzZWQgYW4gZXhjZXB0aW9uIGJlY2F1c2UgXCJnXCIgZG9lcyBub3QgaGF2ZSB0aGUgYWRkVmVydGV4IG1ldGhvZCB1bmRlciBkZWZhdWx0IGNvbmZpZyIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QsIGluc3RhbmNlT2YoUmVzcG9uc2VFeGNlcHRpb24uY2xhc3MpKTsKICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlRXhjZXB0aW9uIHJlID0gKFJlc3BvbnNlRXhjZXB0aW9uKSByb290OwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMsIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKIAogICAgICAgICAgICAgZmluYWwgQ2xpZW50IHJlYm91bmQgPSBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcygiZ3JhcGgiKTsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gcmVib3VuZC5zdWJtaXQoImcuYWRkVmVydGV4KFQubGFiZWwsJ3BlcnNvbicpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOworICAgICAgICAgICAgZmluYWwgVmVydGV4IHYgPSByZWJvdW5kLnN1Ym1pdCgiZy5hZGRWZXJ0ZXgoVC5sYWJlbCwncGVyc29uJykiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdi5sYWJlbCgpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKQEAgLTE1MTYsMTYgKzEwNDgsMTggQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmFkZFZlcnRleChsYWJlbCwncGVyc29uJywnbmFtZScsJ3N0ZXBoZW4nKTsiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmFkZFZlcnRleChsYWJlbCwncGVyc29uJywnbmFtZScsJ3N0ZXBoZW4nKTsiLAorICAgICAgICAgICAgICAgICAgICBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIFwiZ1wiIGRvZXMgbm90IGhhdmUgdGhlIGFkZFZlcnRleCBtZXRob2QgdW5kZXIgZGVmYXVsdCBjb25maWciKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwogICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7CiAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgcm9vdDsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0VWQUxVQVRJT04sIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CiAKICAgICAgICAgICAgIGZpbmFsIENsaWVudCByZWJvdW5kID0gY2x1c3Rlci5jb25uZWN0KCkuYWxpYXMoImdyYXBoIik7Ci0gICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IHJlYm91bmQuc3VibWl0KCJnLmFkZFZlcnRleChsYWJlbCwncGVyc29uJywnbmFtZScsJ2phc29uJykiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7CisgICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IHJlYm91bmQuc3VibWl0KCJnLmFkZFZlcnRleChsYWJlbCwncGVyc29uJywnbmFtZScsJ2phc29uJykiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgLmFsbCgpLmdldCgpLmdldCgwKS5nZXRWZXJ0ZXgoKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdi5sYWJlbCgpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKQEAgLTE1MzQsNyArMTA2OCw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEFsaWFzVHJhdmVyc2FsU291cmNlVmFyaWFibGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WMSkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNCkuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHRyeSB7CkBAIC0xNTQ0LDcgKzEwNzgsNyBAQAogICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7CiAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIHJvb3Q7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTiwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnRBbGlhc2VkID0gY2xpZW50LmFsaWFzKCJnMSIpOwpAQCAtMTU1NSwxNzUgKzEwODksMjYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQWxpYXNHcmFwaFZhcmlhYmxlc0luU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5hZGRWZXJ0ZXgoJ25hbWUnLCdzdGVwaGVuJyk7IikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIFwiZ1wiIGRvZXMgbm90IGhhdmUgdGhlIGFkZFZlcnRleCBtZXRob2QgdW5kZXIgZGVmYXVsdCBjb25maWciKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgcm9vdDsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0VWQUxVQVRJT04sIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIENsaWVudCBhbGlhc2VkID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKS5hbGlhcygiZ3JhcGgiKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiamFzb24iLCBhbGlhc2VkLnN1Ym1pdCgibj0namFzb24nIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gYWxpYXNlZC5zdWJtaXQoImcuYWRkVmVydGV4KCduYW1lJyxuKS52YWx1ZXMoJ25hbWUnKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiamFzb24iLCBuYW1lKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQWxpYXNUcmF2ZXJzYWxTb3VyY2VWYXJpYWJsZXNJblNlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1YxKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuYWRkVigpLnByb3BlcnR5KCduYW1lJywnc3RlcGhlbicpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIFwiZ1wiIGlzIHJlYWRvbmx5IGluIHRoaXMgY29udGV4dCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QsIGluc3RhbmNlT2YoUmVzcG9uc2VFeGNlcHRpb24uY2xhc3MpKTsKLSAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlRXhjZXB0aW9uIHJlID0gKFJlc3BvbnNlRXhjZXB0aW9uKSByb290OwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTiwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudEFsaWFzZWQgPSBjbGllbnQuYWxpYXMoImcxIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygiamFzb24iLCBjbGllbnRBbGlhc2VkLnN1Ym1pdCgibj0namFzb24nIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBjbGllbnRBbGlhc2VkLnN1Ym1pdCgiZy5hZGRWKCkucHJvcGVydHkoJ25hbWUnLG4pLnZhbHVlcygnbmFtZScpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImphc29uIiwgbmFtZSk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTWFuYWdlVHJhbnNhY3Rpb25zSW5TZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBzZXNzaW9uV2l0aE1hbmFnZWRUeCA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSArICItbWFuYWdlZCIsIHRydWUpOwotICAgICAgICBmaW5hbCBDbGllbnQgc2Vzc2lvbldpdGhvdXRNYW5hZ2VkVHggPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkgKyAiLW5vdC1tYW5hZ2VkIik7Ci0KLSAgICAgICAgLy8gdGhpcyBzaG91bGQgYXV0by1jb21taXQKLSAgICAgICAgc2Vzc2lvbldpdGhNYW5hZ2VkVHguc3VibWl0KCJ2ID0gZy5hZGRWKCkucHJvcGVydHkoJ25hbWUnLCdzdGVwaGVuJykubmV4dCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwotCi0gICAgICAgIC8vIHRoZSBvdGhlciBjbGllbnRzIHNob3VsZCBzZWUgdGhhdCBjaGFuZ2UgYmVjYXVzZSBvZiBhdXRvLWNvbW1pdAotICAgICAgICBhc3NlcnRUaGF0KGNsaWVudC5zdWJtaXQoImcuVigpLmhhcygnbmFtZScsJ3N0ZXBoZW4nKS5oYXNOZXh0KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0Qm9vbGVhbigpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoc2Vzc2lvbldpdGhvdXRNYW5hZ2VkVHguc3VibWl0KCJnLlYoKS5oYXMoJ25hbWUnLCdzdGVwaGVuJykuaGFzTmV4dCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEJvb2xlYW4oKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIC8vIHRoaXMgc2hvdWxkIE5PVCBhdXRvLWNvbW1pdAotICAgICAgICBmaW5hbCBWZXJ0ZXggdkRhbmllbCA9IHNlc3Npb25XaXRob3V0TWFuYWdlZFR4LnN1Ym1pdCgidiA9IGcuYWRkVigpLnByb3BlcnR5KCduYW1lJywnZGFuaWVsJykubmV4dCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwotCi0gICAgICAgIC8vIHRoZSBvdGhlciBjbGllbnRzIHNob3VsZCBOT1Qgc2VlIHRoYXQgY2hhbmdlIGJlY2F1c2Ugb2YgYXV0by1jb21taXQKLSAgICAgICAgYXNzZXJ0VGhhdChjbGllbnQuc3VibWl0KCJnLlYoKS5oYXMoJ25hbWUnLCdkYW5pZWwnKS5oYXNOZXh0KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0Qm9vbGVhbigpLCBpcyhmYWxzZSkpOwotICAgICAgICBhc3NlcnRUaGF0KHNlc3Npb25XaXRoTWFuYWdlZFR4LnN1Ym1pdCgiZy5WKCkuaGFzKCduYW1lJywnZGFuaWVsJykuaGFzTmV4dCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEJvb2xlYW4oKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAvLyBidXQgInYiIHNob3VsZCBzdGlsbCBiZSB0aGVyZQotICAgICAgICBmaW5hbCBWZXJ0ZXggdkRhbmllbEFnYWluID0gc2Vzc2lvbldpdGhvdXRNYW5hZ2VkVHguc3VibWl0KCJ2IikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleCgpOwotICAgICAgICBhc3NlcnRFcXVhbHModkRhbmllbC5pZCgpLCB2RGFuaWVsQWdhaW4uaWQoKSk7Ci0KLSAgICAgICAgLy8gbm93IGNvbW1pdCBtYW51YWxseQotICAgICAgICBzZXNzaW9uV2l0aG91dE1hbmFnZWRUeC5zdWJtaXQoImcudHgoKS5jb21taXQoKSIpLmFsbCgpLmdldCgpOwotCi0gICAgICAgIC8vIHNob3VsZCBiZSB0aGVyZSBmb3IgYWxsIG5vdwotICAgICAgICBhc3NlcnRUaGF0KGNsaWVudC5zdWJtaXQoImcuVigpLmhhcygnbmFtZScsJ2RhbmllbCcpLmhhc05leHQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRCb29sZWFuKCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChzZXNzaW9uV2l0aE1hbmFnZWRUeC5zdWJtaXQoImcuVigpLmhhcygnbmFtZScsJ2RhbmllbCcpLmhhc05leHQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRCb29sZWFuKCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChzZXNzaW9uV2l0aG91dE1hbmFnZWRUeC5zdWJtaXQoImcuVigpLmhhcygnbmFtZScsJ2RhbmllbCcpLmhhc05leHQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRCb29sZWFuKCksIGlzKHRydWUpKTsKLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9jZXNzU2Vzc2lvblJlcXVlc3RzSW5PcmRlckFmdGVyVGltZW91dCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIHRoaXMgY29uZmlndXJlcyB0aGUgY2xpZW50IHRvIGJlaGF2ZSBsaWtlIE9wUHJvY2Vzc29yIGZvciBVbmlmaWVkQ2hhbm5lbGl6ZXIKLSAgICAgICAgICAgIGZpbmFsIENsaWVudC5TZXNzaW9uU2V0dGluZ3Mgc2V0dGluZ3MgPSBDbGllbnQuU2Vzc2lvblNldHRpbmdzLmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZChuYW1lLmdldE1ldGhvZE5hbWUoKSkubWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uKHRydWUpLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChDbGllbnQuU2V0dGluZ3MuYnVpbGQoKS51c2VTZXNzaW9uKHNldHRpbmdzKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCA1MDsgaW5kZXgrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4gZmlyc3QgPSBjbGllbnQuc3VibWl0QXN5bmMoCi0gICAgICAgICAgICAgICAgICAgICAgICAiT2JqZWN0IG1vbjEgPSAnbW9uMSc7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bmNocm9uaXplZCAobW9uMSkge1xuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbW9uMS53YWl0KCk7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0gIik7Ci0KLSAgICAgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHNlY29uZCA9IGNsaWVudC5zdWJtaXRBc3luYygKLSAgICAgICAgICAgICAgICAgICAgICAgICJPYmplY3QgbW9uMiA9ICdtb24yJztcbiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3luY2hyb25pemVkIChtb24yKSB7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtb24yLndhaXQoKTtcbiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiB0aGlyZCA9IGNsaWVudC5zdWJtaXRBc3luYygKLSAgICAgICAgICAgICAgICAgICAgICAgICJPYmplY3QgbW9uMyA9ICdtb24zJztcbiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3luY2hyb25pemVkIChtb24zKSB7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBtb24zLndhaXQoKTtcbiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifSIpOwotCi0gICAgICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBmb3VydGggPSBjbGllbnQuc3VibWl0QXN5bmMoCi0gICAgICAgICAgICAgICAgICAgICAgICAiT2JqZWN0IG1vbjQgPSAnbW9uNCc7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bmNocm9uaXplZCAobW9uNCkge1xuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgbW9uNC53YWl0KCk7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn0iKTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlRmlyc3QgPSBmaXJzdC5nZXQoKS5hbGwoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZVNlY29uZCA9IHNlY29uZC5nZXQoKS5hbGwoKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGZ1dHVyZVRoaXJkID0gdGhpcmQuZ2V0KCkuYWxsKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmdXR1cmVGb3VydGggPSBmb3VydGguZ2V0KCkuYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnRGdXR1cmVUaW1lb3V0KGZ1dHVyZUZpcnN0KTsKLSAgICAgICAgICAgICAgICBhc3NlcnRGdXR1cmVUaW1lb3V0KGZ1dHVyZVNlY29uZCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RnV0dXJlVGltZW91dChmdXR1cmVUaGlyZCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RnV0dXJlVGltZW91dChmdXR1cmVGb3VydGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydEZ1dHVyZVRpbWVvdXQoZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBmKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGltZWQgb3V0Iik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVElNRU9VVCwgKChSZXNwb25zZUV4Y2VwdGlvbikgcm9vdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgYWxsT2Yoc3RhcnRzV2l0aCgiRXZhbHVhdGlvbiBleGNlZWRlZCIpLCBjb250YWluc1N0cmluZygiMjUwIG1zIikpKTsKLSAgICAgICAgfQotICAgIH0KLQorICAgIEBJZ25vcmUoInVzZWQgc2Vzc2lvbnMiKQogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQ2xvc2VBbGxDbGllbnRzT25DbG9zZU9mQ2x1c3RlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBzZXNzaW9ubGVzc09uZSA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICBmaW5hbCBDbGllbnQgc2Vzc2lvbiA9IGNsdXN0ZXIuY29ubmVjdCgic2Vzc2lvbiIpOwotICAgICAgICBmaW5hbCBDbGllbnQgc2Vzc2lvbmxlc3NUd28gPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IHNlc3Npb25sZXNzVGhyZWUgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IHNlc3Npb25sZXNzRm91ciA9IGNsdXN0ZXIuY29ubmVjdCgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50T25lID0gY2x1c3Rlci5jb25uZWN0KCk7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnRUd28gPSBjbHVzdGVyLmNvbm5lY3QoKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudFRocmVlID0gY2x1c3Rlci5jb25uZWN0KCk7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnRGb3VyID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNlc3Npb25sZXNzT25lLnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNlc3Npb24uc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2Vzc2lvbmxlc3NUd28uc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2Vzc2lvbmxlc3NUaHJlZS5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnRPbmUuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnRUd28uc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnRUaHJlZS5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKICAgICAgICAgLy8gZG9udCcgc2VuZCBhbnl0aGluZyBvbiB0aGUgNHRoIGNsaWVudAogCiAgICAgICAgIC8vIGNsb3NlIG9uZSBvZiB0aGVzZSBDbGllbnRzIGJlZm9yZSB0aGUgQ2x1c3RlcgotICAgICAgICBzZXNzaW9ubGVzc1RocmVlLmNsb3NlKCk7CisgICAgICAgIGNsaWVudFRocmVlLmNsb3NlKCk7CiAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgc2Vzc2lvbmxlc3NPbmUuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudE9uZS5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0b3NzZWQgYW4gZXhjZXB0aW9uIGJlY2F1c2UgY2x1c3RlciB3YXMgY2xvc2VkIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKQEAgLTE3MzIsNyArMTExNyw2IEBACiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgc2Vzc2lvbi5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIGNsdXN0ZXIgd2FzIGNsb3NlZCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CkBAIC0xNzQxLDcgKzExMjUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlc3Npb25sZXNzVHdvLnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCk7CisgICAgICAgICAgICBjbGllbnRUd28uc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIGNsdXN0ZXIgd2FzIGNsb3NlZCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CkBAIC0xNzUwLDcgKzExMzQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlc3Npb25sZXNzVGhyZWUuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudFRocmVlLnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKTsKICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRvc3NlZCBhbiBleGNlcHRpb24gYmVjYXVzZSBjbHVzdGVyIHdhcyBjbG9zZWQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwpAQCAtMTc1OSw3ICsxMTQzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzZXNzaW9ubGVzc0ZvdXIuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudEZvdXIuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIGNsdXN0ZXIgd2FzIGNsb3NlZCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CkBAIC0xNzY4LDEyNiArMTE1Miw0MSBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gYWxsb3cgY2FsbCB0byBjbG9zZSgpIGV2ZW4gdGhvdWdoIGNsb3NlZCB0aHJvdWdoIGNsdXN0ZXIKLSAgICAgICAgc2Vzc2lvbmxlc3NPbmUuY2xvc2UoKTsKLSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwotICAgICAgICBzZXNzaW9ubGVzc1R3by5jbG9zZSgpOworICAgICAgICBjbGllbnRPbmUuY2xvc2UoKTsKKyAgICAgICAgY2xpZW50VHdvLmNsb3NlKCk7CiAKICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VuZFVzZXJBZ2VudCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjMpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gTW9ja2l0by5zcHkoY2x1c3Rlci5jb25uZWN0KCkuYWxpYXMoImciKSk7Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoIiIsIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkudXNlckFnZW50KCJ0ZXN0IikuY3JlYXRlKCkpLmFsbCgpLmdldCgpOwotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0KLSAgICAgICAgZmluYWwgQXJndW1lbnRDYXB0b3I8UmVxdWVzdE1lc3NhZ2U+IHJlcXVlc3RNZXNzYWdlQ2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB2ZXJpZnkoY2xpZW50KS5zdWJtaXRBc3luYyhyZXF1ZXN0TWVzc2FnZUNhcHRvci5jYXB0dXJlKCkpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IHJlcXVlc3RNZXNzYWdlQ2FwdG9yLmdldFZhbHVlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIHJlcXVlc3RNZXNzYWdlLmdldEFyZ3MoKS5nZXQoVG9rZW5zLkFSR1NfVVNFUl9BR0VOVCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VuZFVzZXJBZ2VudEJ5dGVjb2RlKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjMpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gTW9ja2l0by5zcHkoY2x1c3Rlci5jb25uZWN0KCkuYWxpYXMoImciKSk7Ci0gICAgICAgIE1vY2tpdG8ud2hlbihjbGllbnQuYWxpYXMoImciKSkudGhlblJldHVybihjbGllbnQpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsaWVudCkpOwotICAgICAgICBnLndpdGgoVG9rZW5zLkFSR1NfVVNFUl9BR0VOVCwgInRlc3QiKS5WKCkuaXRlcmF0ZSgpOwotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0KLSAgICAgICAgZmluYWwgQXJndW1lbnRDYXB0b3I8UmVxdWVzdE9wdGlvbnM+IHJlcXVlc3RPcHRpb25zQ2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoUmVxdWVzdE9wdGlvbnMuY2xhc3MpOwotICAgICAgICB2ZXJpZnkoY2xpZW50KS5zdWJtaXRBc3luYyhNb2NraXRvLmFueShCeXRlY29kZS5jbGFzcyksIHJlcXVlc3RPcHRpb25zQ2FwdG9yLmNhcHR1cmUoKSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnNDYXB0b3IuZ2V0VmFsdWUoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgcmVxdWVzdE9wdGlvbnMuZ2V0VXNlckFnZW50KCkuZ2V0KCkpOwotCi0gICAgICAgIGZpbmFsIEFyZ3VtZW50Q2FwdG9yPFJlcXVlc3RNZXNzYWdlPiByZXF1ZXN0TWVzc2FnZUNhcHRvciA9IEFyZ3VtZW50Q2FwdG9yLmZvckNsYXNzKFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgdmVyaWZ5KGNsaWVudCkuc3VibWl0QXN5bmMocmVxdWVzdE1lc3NhZ2VDYXB0b3IuY2FwdHVyZSgpKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSByZXF1ZXN0TWVzc2FnZUNhcHRvci5nZXRWYWx1ZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCByZXF1ZXN0TWVzc2FnZS5nZXRBcmdzKCkuZ2V0T3JEZWZhdWx0KFRva2Vucy5BUkdTX1VTRVJfQUdFTlQsIG51bGwpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlbmRSZXF1ZXN0SWRCeXRlY29kZSgpIHsKLSAgICAgICAgZmluYWwgVVVJRCBvdmVycmlkZVJlcXVlc3RJZCA9IFVVSUQucmFuZG9tVVVJRCgpOwotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjMpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gTW9ja2l0by5zcHkoY2x1c3Rlci5jb25uZWN0KCkuYWxpYXMoImciKSk7Ci0gICAgICAgIE1vY2tpdG8ud2hlbihjbGllbnQuYWxpYXMoImciKSkudGhlblJldHVybihjbGllbnQpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsaWVudCkpOwotICAgICAgICBnLndpdGgoVG9rZW5zLlJFUVVFU1RfSUQsIG92ZXJyaWRlUmVxdWVzdElkKS5WKCkuaXRlcmF0ZSgpOwotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0KLSAgICAgICAgZmluYWwgQXJndW1lbnRDYXB0b3I8UmVxdWVzdE9wdGlvbnM+IHJlcXVlc3RPcHRpb25zQ2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoUmVxdWVzdE9wdGlvbnMuY2xhc3MpOwotICAgICAgICB2ZXJpZnkoY2xpZW50KS5zdWJtaXRBc3luYyhNb2NraXRvLmFueShCeXRlY29kZS5jbGFzcyksIHJlcXVlc3RPcHRpb25zQ2FwdG9yLmNhcHR1cmUoKSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdE9wdGlvbnNDYXB0b3IuZ2V0VmFsdWUoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXF1ZXN0T3B0aW9ucy5nZXRPdmVycmlkZVJlcXVlc3RJZCgpLmlzUHJlc2VudCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG92ZXJyaWRlUmVxdWVzdElkLCByZXF1ZXN0T3B0aW9ucy5nZXRPdmVycmlkZVJlcXVlc3RJZCgpLmdldCgpKTsKLQotICAgICAgICBmaW5hbCBBcmd1bWVudENhcHRvcjxSZXF1ZXN0TWVzc2FnZT4gcmVxdWVzdE1lc3NhZ2VDYXB0b3IgPSBBcmd1bWVudENhcHRvci5mb3JDbGFzcyhSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIHZlcmlmeShjbGllbnQpLnN1Ym1pdEFzeW5jKHJlcXVlc3RNZXNzYWdlQ2FwdG9yLmNhcHR1cmUoKSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlID0gcmVxdWVzdE1lc3NhZ2VDYXB0b3IuZ2V0VmFsdWUoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG92ZXJyaWRlUmVxdWVzdElkLCByZXF1ZXN0TWVzc2FnZS5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRDbHVzdGVyUmVhZEZpbGVGcm9tUmVzb3VyY2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IENsdXN0ZXIub3BlbihUZXN0Q2xpZW50RmFjdG9yeS5SRVNPVVJDRV9QQVRIKTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChjbHVzdGVyKTsKICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgIH0KIAotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90SGFuZ1doZW5TYW1lUmVxdWVzdElkSXNVc2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkubWF4Q29ubmVjdGlvblBvb2xTaXplKDEpLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3RJZCA9IFVVSUQucmFuZG9tVVVJRCgpOwotCi0gICAgICAgIGZpbmFsIEZ1dHVyZTxSZXN1bHRTZXQ+IHJlc3VsdDEgPSBjbGllbnQuc3VibWl0QXN5bmMoIlRocmVhZC5zbGVlcCgyMDAwKTsxMDAiLAotICAgICAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkub3ZlcnJpZGVSZXF1ZXN0SWQocmVxdWVzdElkKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgLy8gd2FpdCBmb3Igc29tZSBidXNpbmVzcyB0byBoYXBwZW4gb24gdGhlIHNlcnZlcgotICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIHJlLXVzZSB0aGUgaWQgYW5kIGZhaWwKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSs5NyIsIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkub3ZlcnJpZGVSZXF1ZXN0SWQocmVxdWVzdElkKS5jcmVhdGUoKSk7Ci0gICAgICAgICAgICBmYWlsKCJSZXF1ZXN0IHNob3VsZCBub3QgaGF2ZSBiZWVuIHNlbnQgZHVlIHRvIGR1cGxpY2F0ZSBpZCIpOwotICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgLy8gc2hvdWxkIGdldCBhIHJlamVjdGlvbiBoZXJlCi0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgc3RhcnRzV2l0aCgiVGhlcmUgaXMgYWxyZWFkeSBhIHJlcXVlc3QgcGVuZGluZyB3aXRoIGFuIGlkIG9mOiIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAsIHJlc3VsdDEuZ2V0KCkub25lKCkuZ2V0SW50KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogVGVzdHMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YWNrIHRyYWNlIGNvbnRhaW5zIGFuIGluZm9ybWF0aXZlIGNhdXNlIHdoZW4gdGhlIHJlcXVlc3QgdGltZXMgb3V0IGJlY2F1c2UgdGhlCiAgICAgICogY2xpZW50IHdhcyB1bmFibGUgdG8gZ2V0IGEgY29ubmVjdGlvbiBhbmQgdGhlIHBvb2wgaXMgYWxyZWFkeSBtYXhlZCBvdXQuCiAgICAgICovCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5DbGVhckV4Y2VwdGlvbkNhdXNlV2hlbkNsaWVudElzVG9vQnVzeUFuZENvbm5lY3Rpb25Qb29sSXNGdWxsKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IG1heFNpemUgPSAxOwogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKQogICAgICAgICAgICAgICAgIC5tYXhDb25uZWN0aW9uUG9vbFNpemUoMSkKICAgICAgICAgICAgICAgICAuY29ubmVjdGlvblNldHVwVGltZW91dE1pbGxpcygxMDApCiAgICAgICAgICAgICAgICAgLm1heFdhaXRGb3JDb25uZWN0aW9uKDE1MCkKLSAgICAgICAgICAgICAgICAubWluSW5Qcm9jZXNzUGVyQ29ubmVjdGlvbigwKQotICAgICAgICAgICAgICAgIC5tYXhJblByb2Nlc3NQZXJDb25uZWN0aW9uKDEpCi0gICAgICAgICAgICAgICAgLm1pblNpbXVsdGFuZW91c1VzYWdlUGVyQ29ubmVjdGlvbigwKQotICAgICAgICAgICAgICAgIC5tYXhTaW11bHRhbmVvdXNVc2FnZVBlckNvbm5lY3Rpb24oMSkKICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CiAKICAgICAgICAgZmluYWwgQ2xpZW50LkNsdXN0ZXJlZENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0QXN5bmMoIlRocmVhZC5zbGVlcCg1MDAwKTsiKTsKKyAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0QXN5bmMoIlRocmVhZC5zbGVlcCg1MDAwKTsiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucyk7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShlKTsKICAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJvb3QgaW5zdGFuY2VvZiBUaW1lb3V0RXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJvb3QuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKENsaWVudC5UT09fTUFOWV9JTl9GTElHSFRfUkVRVUVTVFMpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJvb3QuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKFN0cmluZy5mb3JtYXQoQ2xpZW50LlRPT19NQU5ZX0lOX0ZMSUdIVF9SRVFVRVNUUywgbWF4U2l6ZSwgbWF4U2l6ZSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xODk2LDE0ICsxMTk1LDE0IEBACiAKICAgICAvKioKICAgICAgKiBDbGllbnQgY3JlYXRlZCBvbiBhbiBpbml0aWFsbHkgZGVhZCBob3N0IHNob3VsZCBmYWlsIGluaXRpYWxseSwgYW5kIHJlY292ZXIgYWZ0ZXIgdGhlIGRlYWQgaG9zdCBoYXMgcmVzdGFydGVkCi0gICAgICogQHBhcmFtIHRlc3RDbHVzdGVyQ2xpZW50IC0gYm9vbGVhbiBmbGFnIHNldCB0byB0ZXN0IGNsdXN0ZXJlZCBjbGllbnQgaWYgdHJ1ZSBhbmQgc2Vzc2lvbmVkIGNsaWVudCBpZiBmYWxzZS4KICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdGVzdFNob3VsZEZhaWxPbkluaXRpYWxseURlYWRIb3N0KGZpbmFsIGJvb2xlYW4gdGVzdENsdXN0ZXJDbGllbnQpIHRocm93cyBFeGNlcHRpb24geworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbE9uSW5pdGlhbGx5RGVhZEhvc3RGb3JDbHVzdGVyQ2xpZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGxvZ2dlci5pbmZvKCJTdG9wcGluZyBzZXJ2ZXIuIik7CiAgICAgICAgIHRoaXMuc3RvcFNlcnZlcigpOwogCiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSB0ZXN0Q2x1c3RlckNsaWVudD8gY2x1c3Rlci5jb25uZWN0KCkgOiBjbHVzdGVyLmNvbm5lY3QoInNlc3Npb25DbGllbnQiKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyB0cnkgdG8gcmUtaXNzdWUgYSByZXF1ZXN0IG5vdyB0aGF0IHRoZSBzZXJ2ZXIgaXMgZG93bgpAQCAtMTkxNiwxNCArMTIxNSwxMSBAQAogICAgICAgICAgICAgYXNzZXJ0VGhhdChyZSwgaW5zdGFuY2VPZihOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24uY2xhc3MpKTsKIAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoMzAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgzMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwogICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCB0aHJvdyBleGNlcHRpb24gb24gdGhlIHJldHJ5Iik7CiAgICAgICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHJlMikgewotICAgICAgICAgICAgICAgIGlmIChjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQuU2Vzc2lvbmVkQ2xpZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRoYXQocmUyLmdldENhdXNlKCkuZ2V0Q2F1c2UoKSwgaW5zdGFuY2VPZihDb25uZWN0aW9uRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChyZTIuZ2V0Q2F1c2UoKS5nZXRDYXVzZSgpLmdldENhdXNlKCksIGluc3RhbmNlT2YoQ29ubmVjdEV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KHJlMi5nZXRDYXVzZSgpLmdldENhdXNlKCkuZ2V0Q2F1c2UoKSwgaW5zdGFuY2VPZihDb25uZWN0RXhjZXB0aW9uLmNsYXNzKSk7CisKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8KQEAgLTE5NDEsNyArMTIzNyw3IEBACiAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhTdHJpbmcuZm9ybWF0KCJDb25uZWN0aW5nIGRyaXZlciB0byBzZXJ2ZXIgLSBhdHRlbXB0ICMgJXMuICIsIDEgKyBpeCkpOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgzMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuZ2V0KDMwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZXN1bHRzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHRzLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb25uZWN0aW9uIHN1Y2Nlc3NmdWwuIik7CkBAIC0xOTU3LDE4ICsxMjUzLDggQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxPbkluaXRpYWxseURlYWRIb3N0Rm9yQ2x1c3RlckNsaWVudCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0ZXN0U2hvdWxkRmFpbE9uSW5pdGlhbGx5RGVhZEhvc3QodHJ1ZSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsT25Jbml0aWFsbHlEZWFkSG9zdEZvclNlc3Npb25DbGllbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdGVzdFNob3VsZEZhaWxPbkluaXRpYWxseURlYWRIb3N0KGZhbHNlKTsKLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVyblV1aWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcygiZyIpOwogICAgICAgICAgICAgTGlzdDxSZXN1bHQ+IHJldHVybmVkTGlzdCA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KFVVSUQoKSkiLCBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWxhbmciKS5jcmVhdGUoKSkuYWxsKCkuZ2V0KCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5Ecml2ZXJUcmFuc2FjdGlvbkludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpbkRyaXZlclRyYW5zYWN0aW9uSW50ZWdyYXRlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODg0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5Ecml2ZXJUcmFuc2FjdGlvbkludGVncmF0ZVRlc3QuamF2YQpAQCAtMCwwICsxLDYxNyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVtb3RlVHJhbnNhY3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cENoYW5uZWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlRyYW5zYWN0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nQ29udGFpbnMuY29udGFpbnNTdHJpbmc7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CisKKy8qKgorICogSW50ZWdyYXRpb24gdGVzdHMgZm9yIEhUVFAgcmVtb3RlIHRyYW5zYWN0aW9ucyB1c2luZyB0aGUgZHJpdmVyIEFQSSAoe0Bjb2RlIENsdXN0ZXIudHJhbnNhY3QoKX0pLgorICogCisgKiBUZXN0cyBleGVyY2lzZSB7QGxpbmsgUmVtb3RlVHJhbnNhY3Rpb259IGRpcmVjdGx5IHZpYSBpdHMge0Bjb2RlIHN1Ym1pdCgpfSBtZXRob2RzLgorICogCisgKiBTZXJ2ZXItc2lkZSB2ZXJpZmljYXRpb24gdGVzdHMgKHJhdyBIVFRQKSBhcmUgaW4ge0BsaW5rIEdyZW1saW5TZXJ2ZXJIdHRwVHJhbnNhY3Rpb25JbnRlZ3JhdGVUZXN0fS4KKyAqLworcHVibGljIGNsYXNzIEdyZW1saW5Ecml2ZXJUcmFuc2FjdGlvbkludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHVFggPSAiZ3R4IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0dFVF9XQUlUID0gNTAwMDsKKworICAgIHByaXZhdGUgQ2x1c3RlciBjbHVzdGVyOworCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIG9wZW5DbHVzdGVyKCkgeworICAgICAgICBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOworICAgIH0KKworICAgIEBBZnRlcgorICAgIHB1YmxpYyB2b2lkIGNsb3NlQ2x1c3RlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAoY2x1c3RlciAhPSBudWxsKSBjbHVzdGVyLmNsb3NlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFNldHRpbmdzIG92ZXJyaWRlU2V0dGluZ3MoZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKKyAgICAgICAgc2V0dGluZ3MuY2hhbm5lbGl6ZXIgPSBIdHRwQ2hhbm5lbGl6ZXIuY2xhc3MuZ2V0TmFtZSgpOworICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZU9mVGVzdCA9IG5hbWUuZ2V0TWV0aG9kTmFtZSgpOworICAgICAgICBzd2l0Y2ggKG5hbWVPZlRlc3QpIHsKKyAgICAgICAgICAgIGNhc2UgInNob3VsZEVuZm9yY2VNYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zIjoKKyAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInNob3VsZFRpbWVvdXRJZGxlVHJhbnNhY3Rpb24iOgorICAgICAgICAgICAgY2FzZSAic2hvdWxkVGltZW91dElkbGVUcmFuc2FjdGlvbldpdGhOb09wZXJhdGlvbnMiOgorICAgICAgICAgICAgY2FzZSAic2hvdWxkUmVqZWN0TGF0ZUNvbW1pdEFmdGVyVGltZW91dCI6CisgICAgICAgICAgICAgICAgc2V0dGluZ3MudHJhbnNhY3Rpb25UaW1lb3V0ID0gMTAwMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInNob3VsZFRpbWVvdXRPbmx5SWRsZVRyYW5zYWN0aW9uTm90QWN0aXZlT25lIjoKKyAgICAgICAgICAgICAgICBzZXR0aW5ncy50cmFuc2FjdGlvblRpbWVvdXQgPSAyMDAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXR0aW5nczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCZWdpbiBhIHRyYW5zYWN0aW9uLCBhZGQgYSB2ZXJ0ZXgsIHZlcmlmeSBpc29sYXRpb24sIGNvbW1pdCwgdmVyaWZ5IGlzT3BlbiB0cmFuc2l0aW9ucywgYW5kIHZlcmlmeSBkYXRhIHBlcnNpc3RzCisgICAgICogYWZ0ZXIgY29tbWl0LgorICAgICAqLworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ29tbWl0VHJhbnNhY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIC8vIGlzT3BlbiB0cnVlIGFmdGVyIGJlZ2luCisgICAgICAgIGFzc2VydFRydWUodHguaXNPcGVuKCkpOworCisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsJ2FsaWNlJykiKTsKKworICAgICAgICAvLyB1bmNvbW1pdHRlZCBkYXRhIG5vdCB2aXNpYmxlIG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uCisgICAgICAgIGFzc2VydEVxdWFscygwTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLmNvdW50KCkiKS5vbmUoKS5nZXRMb25nKCkpOworCisgICAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICAvLyBpc09wZW4gZmFsc2UgYWZ0ZXIgY29tbWl0CisgICAgICAgIGFzc2VydEZhbHNlKHR4LmlzT3BlbigpKTsKKyAgICAgICAgLy8gY29tbWl0dGVkIGRhdGEgdmlzaWJsZSB0byBub24tdHJhbnNhY3Rpb25hbCByZWFkcworICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIGNsaWVudC5zdWJtaXQoImcuVigpLmhhc0xhYmVsKCdwZXJzb24nKS5jb3VudCgpIikub25lKCkuZ2V0TG9uZygpKTsKKworICAgICAgICBjbGllbnQuY2xvc2UoKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJvbGxiYWNrVHJhbnNhY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIGFzc2VydFRydWUodHguaXNPcGVuKCkpOworCisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsJ2JvYicpIik7CisKKyAgICAgICAgdHgucm9sbGJhY2soKTsKKyAgICAgICAgLy8gaXNPcGVuIGZhbHNlIGFmdGVyIHJvbGxiYWNrCisgICAgICAgIGFzc2VydEZhbHNlKHR4LmlzT3BlbigpKTsKKyAgICAgICAgLy8gZGF0YSBkaXNjYXJkZWQgYWZ0ZXIgcm9sbGJhY2sKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDBMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuY291bnQoKSIpLm9uZSgpLmdldExvbmcoKSk7CisKKyAgICAgICAgY2xpZW50LmNsb3NlKCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTdXBwb3J0SW50cmFUcmFuc2FjdGlvbkNvbnNpc3RlbmN5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcyhHVFgpOworCisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworICAgICAgICB0eC5zdWJtaXQoImcuYWRkVigndGVzdCcpLnByb3BlcnR5KCduYW1lJywnQScpIik7CisgICAgICAgIC8vIHJlYWQteW91ci1vd24td3JpdGVzIOKAlCB2ZXJ0ZXggQSB2aXNpYmxlIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24KKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCB0eC5zdWJtaXQoImcuVigpLmhhc0xhYmVsKCd0ZXN0JykuY291bnQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRMb25nKCkpOworCisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCd0ZXN0JykucHJvcGVydHkoJ25hbWUnLCdCJykiKTsKKyAgICAgICAgdHguc3VibWl0KCJnLlYoKS5oYXMoJ25hbWUnLCdBJykuYWRkRSgna25vd3MnKS50byhWKCkuaGFzKCduYW1lJywnQicpKSIpOworCisgICAgICAgIC8vIHZlcmlmeSB0aGUgZnVsbCBzdWJncmFwaCBpcyB2aXNpYmxlIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24gYmVmb3JlIGNvbW1pdAorICAgICAgICBhc3NlcnRFcXVhbHMoMkwsIHR4LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3Rlc3QnKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxTCwgdHguc3VibWl0KCJnLlYoKS5vdXRFKCdrbm93cycpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKworICAgICAgICB0eC5jb21taXQoKTsKKworICAgICAgICAvLyB2ZXJ0aWNlcyBhbmQgZWRnZXMgcGVyc2lzdCBhZnRlciBjb21taXQKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDJMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgndGVzdCcpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBjbGllbnQuc3VibWl0KCJnLkUoKS5oYXNMYWJlbCgna25vd3MnKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRUaHJvd09uU3VibWl0QWZ0ZXJDb21taXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisKKyAgICAgICAgdHguc3VibWl0KCJnLmFkZFYoKSIpOworICAgICAgICB0eC5jb21taXQoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdHguc3VibWl0KCJnLlYoKS5jb3VudCgpIik7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gb24gc3VibWl0IGFmdGVyIGNvbW1pdCIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZXguZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiVHJhbnNhY3Rpb24gaXMgbm90IG9wZW4iKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRocm93T25TdWJtaXRBZnRlclJvbGxiYWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworCisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCkiKTsKKyAgICAgICAgdHgucm9sbGJhY2soKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdHguc3VibWl0KCJnLlYoKS5jb3VudCgpIik7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gb24gc3VibWl0IGFmdGVyIHJvbGxiYWNrIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgYXNzZXJ0VGhhdChleC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJUcmFuc2FjdGlvbiBpcyBub3Qgb3BlbiIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dPbkRvdWJsZUJlZ2luKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0eC5iZWdpbigpOworICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIG9uIHNlY29uZCBiZWdpbigpIik7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgYXNzZXJ0VGhhdChleC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJUcmFuc2FjdGlvbiBhbHJlYWR5IHN0YXJ0ZWQiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRocm93T25Db21taXRXaGVuTm90T3BlbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eCA9IGNsdXN0ZXIudHJhbnNhY3QoR1RYKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UodHguaXNPcGVuKCkpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0eC5jb21taXQoKTsKKyAgICAgICAgICAgIGZhaWwoIkV4cGVjdGVkIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBvbiBjb21taXQgd2hlbiBub3Qgb3BlbiIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZXguZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiVHJhbnNhY3Rpb24gaXMgbm90IG9wZW4iKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRocm93T25Sb2xsYmFja1doZW5Ob3RPcGVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICBhc3NlcnRGYWxzZSh0eC5pc09wZW4oKSk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4LnJvbGxiYWNrKCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gb24gcm9sbGJhY2sgd2hlbiBub3Qgb3BlbiIpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZXguZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiVHJhbnNhY3Rpb24gaXMgbm90IG9wZW4iKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybk51bGxUcmFuc2FjdGlvbklkQmVmb3JlQmVnaW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisKKyAgICAgICAgLy8gYmVmb3JlIGJlZ2luLCB0cmFuc2FjdGlvbklkIHNob3VsZCBiZSBudWxsCisgICAgICAgIGFzc2VydE51bGwodHguZ2V0VHJhbnNhY3Rpb25JZCgpKTsKKworICAgICAgICB0eC5iZWdpbigpOworICAgICAgICAvLyBhZnRlciBiZWdpbiwgdHJhbnNhY3Rpb25JZCBzaG91bGQgYmUgbm9uLW51bGwgYW5kIG5vbi1ibGFuaworICAgICAgICBhc3NlcnROb3ROdWxsKHR4LmdldFRyYW5zYWN0aW9uSWQoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKHR4LmdldFRyYW5zYWN0aW9uSWQoKS5pc0JsYW5rKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ29tbWl0T25DbG9zZUJ5RGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eDEgPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4MS5iZWdpbigpOworICAgICAgICB0eDEuc3VibWl0KCJnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnY2xvc2VfdGVzdCcpIik7CisgICAgICAgIC8vIGNsb3NlKCkgc2hvdWxkIHRyaWdnZXIgZGVmYXVsdCBDT01NSVQgYmVoYXZpb3IKKyAgICAgICAgdHgxLmNsb3NlKCk7CisgICAgICAgIGFzc2VydEZhbHNlKHR4MS5pc09wZW4oKSk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHgyID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eDIuYmVnaW4oKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCB0eDIuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuY291bnQoKSIpLm9uZSgpLmdldExvbmcoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSb2xsYmFja09uQ2xvc2VXaGVuQ29uZmlndXJlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eDEgPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4MS5vbkNsb3NlKFRyYW5zYWN0aW9uLkNMT1NFX0JFSEFWSU9SLlJPTExCQUNLKTsKKyAgICAgICAgdHgxLmJlZ2luKCk7CisgICAgICAgIHR4MS5zdWJtaXQoImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdyb2xsYmFja19jbG9zZV90ZXN0JykiKTsKKyAgICAgICAgdHgxLmNsb3NlKCk7CisgICAgICAgIGFzc2VydEZhbHNlKHR4MS5pc09wZW4oKSk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHgyID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eDIuYmVnaW4oKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDBMLCB0eDIuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuY291bnQoKSIpLm9uZSgpLmdldExvbmcoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSb2xsYmFja09wZW5UcmFuc2FjdGlvbnNPbkNsdXN0ZXJDbG9zZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eDEgPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4MS5iZWdpbigpOworICAgICAgICB0eDEuc3VibWl0KCJnLmFkZFYoJ2NsdXN0ZXItY2xvc2UnKSIpOworICAgICAgICB0eDEuc3VibWl0KCJnLmFkZFYoJ2NsdXN0ZXItY2xvc2UnKSIpOworCisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4MiA9IGNsdXN0ZXIudHJhbnNhY3QoR1RYKTsKKyAgICAgICAgdHgyLmJlZ2luKCk7CisgICAgICAgIHR4Mi5zdWJtaXQoImcuYWRkVignY2x1c3Rlci1jbG9zZScpIik7CisKKyAgICAgICAgLy8gY2xvc2UgY2x1c3RlciB3aXRob3V0IGNvbW1pdHRpbmcg4oCUIHNob3VsZCByb2xsYmFjayBvcGVuIHRyYW5zYWN0aW9ucworICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIGNsdXN0ZXIgPSBudWxsOworCisgICAgICAgIC8vIHJlY29ubmVjdCBhbmQgdmVyaWZ5IGRhdGEgd2FzIG5vdCBwZXJzaXN0ZWQKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyMiA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIGNsdXN0ZXIydHgxID0gY2x1c3RlcjIudHJhbnNhY3QoR1RYKTsKKyAgICAgICAgICAgIGNsdXN0ZXIydHgxLmJlZ2luKCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMEwsIGNsdXN0ZXIydHgxLnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEVuZm9yY2VNYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIGZpcnN0IHRyYW5zYWN0aW9uIGZpbGxzIHRoZSBzaW5nbGUgc2xvdAorICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eDEgPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4MS5iZWdpbigpOworCisgICAgICAgIC8vIHNlY29uZCB0cmFuc2FjdGlvbiBzaG91bGQgZmFpbAorICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHgyID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICAgICAgdHgyLmJlZ2luKCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBtYXggY29uY3VycmVudCB0cmFuc2FjdGlvbnMgZXhjZWVkZWQiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOworICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIk1heGltdW0gY29uY3VycmVudCB0cmFuc2FjdGlvbnMgZXhjZWVkZWQiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVvdXRJZGxlVHJhbnNhY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCd0aW1lb3V0X3Rlc3QnKSIpOworCisgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byB0aW1lb3V0CisgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwKTsKKworICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrIHNlcnZlci1zaWRlOyBhdHRlbXB0aW5nIHRvIGNvbW1pdCBzaG91bGQgZmFpbAorICAgICAgICB0cnkgeworICAgICAgICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gb24gY29tbWl0IGFmdGVyIHNlcnZlci1zaWRlIHRpbWVvdXQiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOworICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHZlcmlmeSBkYXRhIHdhcyBub3QgcGVyc2lzdGVkCisgICAgICAgIGFzc2VydEVxdWFscygwTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3RpbWVvdXRfdGVzdCcpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVvdXRJZGxlVHJhbnNhY3Rpb25XaXRoTm9PcGVyYXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworCisgICAgICAgIC8vIHdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byB0aW1lb3V0CisgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwKTsKKworICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIGNvbW1pdCBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZSBzZXJ2ZXIgcm9sbGVkIGJhY2sKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4LmNvbW1pdCgpOworICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uIG9uIGNvbW1pdCBhZnRlciBzZXJ2ZXItc2lkZSB0aW1lb3V0Iik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJUcmFuc2FjdGlvbiBub3QgZm91bmQiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVvdXRPbmx5SWRsZVRyYW5zYWN0aW9uTm90QWN0aXZlT25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcyhHVFgpOworCisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4QWN0aXZlID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eEFjdGl2ZS5iZWdpbigpOworICAgICAgICB0eEFjdGl2ZS5zdWJtaXQoImcuYWRkVignYWN0aXZlJykiKTsKKworICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eElkbGUgPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4SWRsZS5iZWdpbigpOworICAgICAgICB0eElkbGUuc3VibWl0KCJnLmFkZFYoJ2lkbGUnKSIpOworCisgICAgICAgIC8vIGtlZXAgdGhlIGFjdGl2ZSB0cmFuc2FjdGlvbiBhbGl2ZSBieSBzZW5kaW5nIHJlcXVlc3RzIGF0IGludGVydmFscyBzaG9ydGVyIHRoYW4gdGltZW91dAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDgwMCk7CisgICAgICAgICAgICB0eEFjdGl2ZS5zdWJtaXQoImcuVigpLmNvdW50KCkiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGJ5IG5vdyB0aGUgaWRsZSB0cmFuc2FjdGlvbiBzaG91bGQgaGF2ZSB0aW1lZCBvdXQgKDIwMDBtcyBlbGFwc2VkKQorICAgICAgICAvLyB0aGUgYWN0aXZlIHRyYW5zYWN0aW9uIHNob3VsZCBzdGlsbCBiZSBhbGl2ZQorICAgICAgICB0eEFjdGl2ZS5jb21taXQoKTsKKworICAgICAgICAvLyB2ZXJpZnkgYWN0aXZlIHRyYW5zYWN0aW9uJ3MgZGF0YSBwZXJzaXN0ZWQKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgnYWN0aXZlJykuY291bnQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRMb25nKCkpOworCisgICAgICAgIC8vIGlkbGUgdHJhbnNhY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiByb2xsZWQgYmFjayBieSB0aW1lb3V0CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0eElkbGUuY29tbWl0KCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gb24gY29tbWl0IG9mIHRpbWVkLW91dCBpZGxlIHRyYW5zYWN0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKCJUcmFuc2FjdGlvbiBub3QgZm91bmQiKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2ZXJpZnkgaWRsZSB0cmFuc2FjdGlvbidzIGRhdGEgd2FzIG5vdCBwZXJzaXN0ZWQKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDBMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgnaWRsZScpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlamVjdExhdGVDb21taXRBZnRlclRpbWVvdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsJ2xhdGVfY29tbWl0JykiKTsKKworICAgICAgICAvLyB3YWl0IGZvciB0aW1lb3V0CisgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwKTsKKworICAgICAgICAvLyBhdHRlbXB0IGNvbW1pdCDigJQgc2hvdWxkIGZhaWwgYmVjYXVzZSBzZXJ2ZXIgYWxyZWFkeSByb2xsZWQgYmFjaworICAgICAgICB0cnkgeworICAgICAgICAgICAgdHguY29tbWl0KCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gb24gbGF0ZSBjb21taXQgYWZ0ZXIgdGltZW91dCIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QuZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiVHJhbnNhY3Rpb24gbm90IGZvdW5kIikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmVyaWZ5IGRhdGEgd2FzIG5vdCBwZXJzaXN0ZWQKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDBMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykuY291bnQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRMb25nKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkSXNvbGF0ZUNvbmN1cnJlbnRUcmFuc2FjdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHgxID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eDEuYmVnaW4oKTsKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHgyID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eDIuYmVnaW4oKTsKKworICAgICAgICB0eDEuc3VibWl0KCJnLmFkZFYoJ3R4MScpIik7CisgICAgICAgIHR4Mi5zdWJtaXQoImcuYWRkVigndHgyJykiKTsKKworICAgICAgICAvLyB0eDEgc2hvdWxkIG5vdCBzZWUgdHgyJ3MgZGF0YSBhbmQgdmljZSB2ZXJzYQorICAgICAgICBhc3NlcnRFcXVhbHMoMEwsIHR4MS5zdWJtaXQoImcuVigpLmhhc0xhYmVsKCd0eDInKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwTCwgdHgyLnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3R4MScpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKworICAgICAgICB0eDEuY29tbWl0KCk7CisgICAgICAgIHR4Mi5jb21taXQoKTsKKworICAgICAgICAvLyBib3RoIHNob3VsZCBiZSB2aXNpYmxlIGFmdGVyIGNvbW1pdAorICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIGNsaWVudC5zdWJtaXQoImcuVigpLmhhc0xhYmVsKCd0eDEnKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3R4MicpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZE9wZW5BbmRDbG9zZU1hbnlUcmFuc2FjdGlvbnNTZXF1ZW50aWFsbHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisgICAgICAgIGZpbmFsIGxvbmcgbnVtYmVyT2ZUcmFuc2FjdGlvbnMgPSA1MDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlck9mVHJhbnNhY3Rpb25zOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCdzdHJlc3MnKSIpOworICAgICAgICAgICAgdHguY29tbWl0KCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBsb25nIGNvdW50ID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3N0cmVzcycpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpOworICAgICAgICBhc3NlcnRFcXVhbHMobnVtYmVyT2ZUcmFuc2FjdGlvbnMsIGNvdW50KTsKKworICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICAgICAgLy8gdGhpcyBzaG91bGQgYmUgMCwgYnV0IHRvIHByZXZlbnQgZmxha2luZXNzLCBtYWtlIGl0IGEgcmVhc29uYWJsZSBudW1iZXIgbGVzcyB0aGFuIG51bWJlck9mVHJhbnNhY3Rpb25zCisgICAgICAgIGFzc2VydFRydWUoc2VydmVyLmdldFNlcnZlckdyZW1saW5FeGVjdXRvcigpLmdldFRyYW5zYWN0aW9uTWFuYWdlcigpLmdldEFjdGl2ZVRyYW5zYWN0aW9uQ291bnQoKSA8IDM1KTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZElzb2xhdGVUcmFuc2FjdGlvbmFsQW5kTm9uVHJhbnNhY3Rpb25hbFJlcXVlc3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKS5hbGlhcyhHVFgpOworCisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworICAgICAgICB0eC5zdWJtaXQoImcuYWRkVigndHhfZGF0YScpIik7CisKKyAgICAgICAgLy8gbm9uLXRyYW5zYWN0aW9uYWwgcmVhZCBzaG91bGQgbm90IHNlZSB1bmNvbW1pdHRlZCB0eCBkYXRhCisgICAgICAgIGFzc2VydEVxdWFscygwTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3R4X2RhdGEnKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisKKyAgICAgICAgdHguY29tbWl0KCk7CisKKyAgICAgICAgLy8gbm93IHRoZSBkYXRhIHNob3VsZCBiZSB2aXNpYmxlCisgICAgICAgIGFzc2VydEVxdWFscygxTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3R4X2RhdGEnKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWplY3RCZWdpbk9uTm9uVHJhbnNhY3Rpb25hbEdyYXBoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdCgiZ2NsYXNzaWMiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gd2hlbiBiZWdpbm5pbmcgdHJhbnNhY3Rpb24gb24gbm9uLXRyYW5zYWN0aW9uYWwgZ3JhcGgiKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOworICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIkdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zIikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRUYXJnZXRDb3JyZWN0R3JhcGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworCisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworCisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCdyb3V0ZWQnKSIpOworICAgICAgICB0eC5jb21taXQoKTsKKworICAgICAgICAvLyB2ZXJ0ZXggc2hvdWxkIGV4aXN0IGluIHRoZSB0cmFuc2FjdGlvbmFsIGdyYXBoIChndHgpCisgICAgICAgIGFzc2VydEVxdWFscygxTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3JvdXRlZCcpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkuYWRkRyhHVFgpLmNyZWF0ZSgpKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0TG9uZygpKTsKKworICAgICAgICAvLyB2ZXJ0ZXggc2hvdWxkIE5PVCBleGlzdCBpbiB0aGUgY2xhc3NpYyBncmFwaCAoZ2NsYXNzaWMpCisgICAgICAgIGFzc2VydEVxdWFscygwTCwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3JvdXRlZCcpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgIFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkuYWRkRygiZ2NsYXNzaWMiKS5jcmVhdGUoKSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBdXRvQ29tbWl0Tm9uVHJhbnNhY3Rpb25hbFdyaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKyAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5hZGRWKCdhdXRvJykiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgnYXV0bycpLmNvdW50KCkiKS5vbmUoKS5nZXRMb25nKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVXNlUHJvdmlkZWRSZXF1ZXN0T3B0aW9ucygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCkuYWxpYXMoR1RYKTsKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIHJvID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS4KKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoIngiLCAidm93ZWxzIikuCisgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzKFRva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUykuCisgICAgICAgICAgICAgICAgY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gdHguc3VibWl0KCJnLmFkZFYoeCkucHJvcGVydHkoJ2EnLCAnYicpIiwgcm8pLgorICAgICAgICAgICAgICAgIGFsbCgpLgorICAgICAgICAgICAgICAgIGdldChNQVhfR0VUX1dBSVQsIFRpbWVVbml0Lk1JTExJU0VDT05EUykuCisgICAgICAgICAgICAgICAgZ2V0KDApLgorICAgICAgICAgICAgICAgIGdldFZlcnRleCgpOworICAgICAgICBhc3NlcnRGYWxzZSh2LnByb3BlcnRpZXMoKS5oYXNOZXh0KCkpOworICAgICAgICB0eC5jb21taXQoKTsKKworICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9CisgICAgICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzTGFiZWwoJ3Zvd2VscycpIikuYWxsKCkuZ2V0KE1BWF9HRVRfV0FJVCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCByZXN1bHRzLnNpemUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRVc2VQcm92aWRlZFBhcmFtZXRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisgICAgICAgIGZpbmFsIFJlbW90ZVRyYW5zYWN0aW9uIHR4ID0gY2x1c3Rlci50cmFuc2FjdChHVFgpOworICAgICAgICB0eC5iZWdpbigpOworICAgICAgICBmaW5hbCBNYXAgcGFyYW1zID0gbmV3IEhhc2hNYXAoKTsKKyAgICAgICAgcGFyYW1zLnB1dCgieCIsICJjb25zb25hbnRzIik7CisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKHgpIiwgcGFyYW1zKTsKKyAgICAgICAgdHguY29tbWl0KCk7CisKKyAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMgPQorICAgICAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuVigpLmhhc0xhYmVsKCdjb25zb25hbnRzJykiKS5hbGwoKS5nZXQoTUFYX0dFVF9XQUlULCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIHJlc3VsdHMuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZENsZWFuVXBPbkJlZ2luRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZW1vdGVUcmFuc2FjdGlvbiB0eCA9IGNsdXN0ZXIudHJhbnNhY3QoImdjbGFzc2ljIik7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBleGNlcHRpb24gb24gYmVnaW4gZm9yIG5vbi10cmFuc2FjdGlvbmFsIGdyYXBoIik7CisgICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZXguZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiRmFpbGVkIHRvIGJlZ2luIHRyYW5zYWN0aW9uIikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmVyaWZ5IGNsZWFudXA6IHRyYW5zYWN0aW9uIGlzIGNsb3NlZCBhbmQgaGFzIG5vIElECisgICAgICAgIGFzc2VydEZhbHNlKHR4LmlzT3BlbigpKTsKKyAgICAgICAgYXNzZXJ0TnVsbCh0eC5nZXRUcmFuc2FjdGlvbklkKCkpOworCisgICAgICAgIC8vIHNlY29uZCBiZWdpbiBzaG91bGQgZmFpbCDigJQgc3RhdGUgbW92ZWQgdG8gQ0xPU0VELCBub3QgYmFjayB0byBOT1RfU1RBUlRFRAorICAgICAgICB0cnkgeworICAgICAgICAgICAgdHguYmVnaW4oKTsKKyAgICAgICAgICAgIGZhaWwoIkV4cGVjdGVkIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBvbiBiZWdpbiBhZnRlciBmYWlsZWQgYmVnaW4iKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBhc3NlcnRUaGF0KGV4LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIlRyYW5zYWN0aW9uIGFscmVhZHkgc3RhcnRlZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkS2VlcFRyYW5zYWN0aW9uT3BlbkFmdGVyVHJhdmVyc2FsRXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpLmFsaWFzKEdUWCk7CisKKyAgICAgICAgZmluYWwgUmVtb3RlVHJhbnNhY3Rpb24gdHggPSBjbHVzdGVyLnRyYW5zYWN0KEdUWCk7CisgICAgICAgIHR4LmJlZ2luKCk7CisgICAgICAgIHR4LnN1Ym1pdCgiZy5hZGRWKCdnb29kX3ZlcnRleCcpIik7CisKKyAgICAgICAgLy8gc3VibWl0IGEgYmFkIHRyYXZlcnNhbCB0aGF0IHNob3VsZCBmYWlsCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0eC5zdWJtaXQoImcuVigpLmZhaWwoKSIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIC8vIGV4cGVjdGVkIGVycm9yIGZyb20gYmFkIHRyYXZlcnNhbAorICAgICAgICB9CisKKyAgICAgICAgLy8gdHJhbnNhY3Rpb24gc2hvdWxkIHN0aWxsIGJlIG9wZW4g4oCUIHJvbGxiYWNrIHNob3VsZCB3b3JrCisgICAgICAgIGFzc2VydFRydWUodHguaXNPcGVuKCkpOworICAgICAgICB0eC5yb2xsYmFjaygpOworCisgICAgICAgIGFzc2VydEZhbHNlKHR4LmlzT3BlbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDBMLCBjbGllbnQuc3VibWl0KCJnLlYoKS5oYXNMYWJlbCgnZ29vZF92ZXJ0ZXgnKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldExvbmcoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aERyaXZlclJlbW90ZUNvbm5lY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCBHVFgpKTsKKyAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4ID0gZy50eCgpLmJlZ2luKCk7CisgICAgICAgIGd0eC5hZGRWKCJ2YWwiKS5pdGVyYXRlKCk7CisgICAgICAgIGd0eC50eCgpLmNvbW1pdCgpOworCisgICAgICAgIGFzc2VydEVxdWFscygxTCwgZy5WKCkuaGFzTGFiZWwoInZhbCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5SZXN1bHRTZXRJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5SZXN1bHRTZXRJbnRlZ3JhdGVUZXN0LmphdmEKaW5kZXggYzJlMTdiNi4uZDczZDZjMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluUmVzdWx0U2V0SW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblJlc3VsdFNldEludGVncmF0ZVRlc3QuamF2YQpAQCAtMjAsMTEgKzIwLDEwIEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXF1ZXN0T3B0aW9uczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0U2V0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwpAQCAtMzksMTAgKzM4LDggQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOwotaW1wb3J0IG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnM7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CkBAIC01Myw5ICs1MCw3IEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKIAotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLmlzOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0luc3RhbmNlT2YuaW5zdGFuY2VPZjsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CkBAIC03MiwxMCArNjcsMTAgQEAKIAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7Ci0gICAgICAgIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPEdyYXBoQmluYXJ5TWFwcGVyPiBncmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCk7CisgICAgICAgIGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPEdyYXBoQmluYXJ5TWFwcGVyPiBncmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KCk7CiAKICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdW117Ci0gICAgICAgICAgICAgICAge1NlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1YxLCBncmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjF9CisgICAgICAgICAgICAgICAge1NlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LCBncmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjR9CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtOTcsODcgKzkyLDY4IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5SZXNwb25zZUF0dHJpYnV0ZXNWaWFOb0NvbnRlbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJbXSIpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYXR0ciA9IHJlc3VsdHMuc3RhdHVzQXR0cmlidXRlcygpLmdldCgyMDAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgICAgYXNzZXJ0VGhhdChhdHRyLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0hPU1QpLCBpcyh0cnVlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5SZXNwb25zZUF0dHJpYnV0ZXNWaWFTdWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZ21vZGVybi5WKCkiKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGF0dHIgPSByZXN1bHRzLnN0YXR1c0F0dHJpYnV0ZXMoKS5nZXQoMjAwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgICAgIGFzc2VydFRoYXQoYXR0ci5jb250YWluc0tleShUb2tlbnMuQVJHU19IT1NUKSwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlVmVydGV4UmVzdWx0RnJvbVRyYXZlcnNhbEJ1bGtlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBDbGllbnQgYWxpYXNlZCA9IGNsaWVudC5hbGlhcygiZ21vZGVybiIpOwotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0U2V0VW5yb2xsZWQgPSBhbGlhc2VkLnN1Ym1pdChnLlYoKS5ib3RoKCkuYmFycmllcigpLmJvdGgoKS5iYXJyaWVyKCkpOwotICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IHJlc3VsdFNldFVucm9sbGVkLmFsbCgpLmdldCgpOwotCi0gICAgICAgIGFzc2VydFRoYXQocmVzdWx0cy5nZXQoMCkuZ2V0T2JqZWN0KCksIENvcmVNYXRjaGVycy5pbnN0YW5jZU9mKFRyYXZlcnNlci5jbGFzcykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgcmVzdWx0cy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlTnVsbFJlc3VsdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImdtb2Rlcm4uVigpLmRyb3AoKS5pdGVyYXRlKCk7bnVsbCIpOworICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KG51bGwpIik7CiAgICAgICAgIGFzc2VydE51bGwocmVzdWx0cy5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0T2JqZWN0KCkpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlVm9pZFJlc3VsdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImdtb2Rlcm4uVigpLmRyb3AoKS5pdGVyYXRlKCkiKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLlYoKS5kcm9wKCkuaXRlcmF0ZSgpIik7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCByZXN1bHRzLmFsbCgpLmdldCgpLnNpemUoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVFbXB0eVJlc3VsdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImdtb2Rlcm4uVigxMDAsMTAwMCwxMDAwKSIpOworICAgICAgICBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5WKDEwMCwxMDAwLDEwMDApIiwgb3B0aW9ucyk7CiAgICAgICAgIGFzc2VydEVxdWFscygwLCByZXN1bHRzLmFsbCgpLmdldCgpLnNpemUoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVWZXJ0ZXhSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnbW9kZXJuLlYoMSkubmV4dCgpIik7CisgICAgICAgIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmFkZEcoImdtb2Rlcm4iKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLlYoMSkubmV4dCgpIiwgb3B0aW9ucyk7CiAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gcmVzdWx0cy5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0VmVydGV4KCk7CiAgICAgICAgIGFzc2VydFRoYXQodiwgaW5zdGFuY2VPZihEZXRhY2hlZFZlcnRleC5jbGFzcykpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlVmVydGV4UHJvcGVydHlSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnbW9kZXJuLlYoKS5wcm9wZXJ0aWVzKCduYW1lJykubmV4dCgpIik7CisgICAgICAgIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmFkZEcoImdtb2Rlcm4iKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLlYoKS5wcm9wZXJ0aWVzKCduYW1lJykubmV4dCgpIiwgb3B0aW9ucyk7CiAgICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5PFN0cmluZz4gdiA9IHJlc3VsdHMuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFZlcnRleFByb3BlcnR5KCk7CiAgICAgICAgIGFzc2VydFRoYXQodiwgaW5zdGFuY2VPZihEZXRhY2hlZFZlcnRleFByb3BlcnR5LmNsYXNzKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVFZGdlUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZ21vZGVybi5FKCkubmV4dCgpIik7CisgICAgICAgIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmFkZEcoImdtb2Rlcm4iKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLkUoKS5uZXh0KCkiLCBvcHRpb25zKTsKICAgICAgICAgZmluYWwgRWRnZSBlID0gcmVzdWx0cy5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0RWRnZSgpOwogICAgICAgICBhc3NlcnRUaGF0KGUsIGluc3RhbmNlT2YoRGV0YWNoZWRFZGdlLmNsYXNzKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVQcm9wZXJ0eVJlc3VsdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImdtb2Rlcm4uRSgpLnByb3BlcnRpZXMoJ3dlaWdodCcpLm5leHQoKSIpOworICAgICAgICBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5FKCkucHJvcGVydGllcygnd2VpZ2h0JykubmV4dCgpIiwgb3B0aW9ucyk7CiAgICAgICAgIGZpbmFsIFByb3BlcnR5PERvdWJsZT4gcCA9IHJlc3VsdHMuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFByb3BlcnR5KCk7CiAgICAgICAgIGFzc2VydFRoYXQocCwgaW5zdGFuY2VPZihSZWZlcmVuY2VQcm9wZXJ0eS5jbGFzcykpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlUGF0aFJlc3VsdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImdtb2Rlcm4uVigpLm91dCgpLnBhdGgoKSIpOworICAgICAgICBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkub3V0KCkucGF0aCgpIiwgb3B0aW9ucyk7CiAgICAgICAgIGZpbmFsIFBhdGggcCA9IHJlc3VsdHMuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFBhdGgoKTsKICAgICAgICAgYXNzZXJ0VGhhdChwLCBpbnN0YW5jZU9mKFBhdGguY2xhc3MpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZVRpbmtlckdyYXBoUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgibW9kZXJuIik7CisgICAgICAgIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoIm1vZGVybiIsIG9wdGlvbnMpOwogICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IHJlc3VsdHMuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldChUaW5rZXJHcmFwaC5jbGFzcyk7CiAKICAgICAgICAgLy8gdGVzdCBpcyAibG9zc3kgZm9yIGlkIiBiZWNhdXNlIFRpbmtlckdyYXBoIGlzIGNvbmZpZ3VyZWQgYnkgZGVmYXVsdCB0byB1c2UgdGhlIEFOWSBpZCBtYW5hZ2VyCkBAIC0xODgsNyArMTY0LDggQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlTWFwSXRlcmF0ZWRSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnbW9kZXJuLlYoKS5ncm91cENvdW50KCkuYnkoYm90aEUoKS5jb3VudCgpKSIpOworICAgICAgICBSZXF1ZXN0T3B0aW9ucyBvcHRpb25zID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KGJvdGhFKCkuY291bnQoKSkiLCBvcHRpb25zKTsKICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdExpc3QgPSByZXN1bHRzLmFsbCgpLmdldCgpOwogICAgICAgICBmaW5hbCBNYXAgbSA9IHJlc3VsdExpc3QuZ2V0KDApLmdldChIYXNoTWFwLmNsYXNzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG0uc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckF1ZGl0TG9nSW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyQXVkaXRMb2dJbnRlZ3JhdGVUZXN0LmphdmEKaW5kZXggODIzZWVmMC4uMGM4ZTA2NSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyQXVkaXRMb2dJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyQXVkaXRMb2dJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTE5LDggKzE5LDEwIEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyOwogCiBpbXBvcnQgbmwuYWx0aW5kYWcubG9nLkxvZ0NhcHRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuQ29uc3RzOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5DbG9zZWFibGVIdHRwUmVzcG9uc2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBHZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBQb3N0OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuU3RyaW5nRW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5DbG9zZWFibGVIdHRwQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5IdHRwQ2xpZW50czsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAudXRpbC5FbnRpdHlVdGlsczsKQEAgLTM0LDggKzM2LDkgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLktyYjVBdXRoZW50aWNhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguU2ltcGxlQXV0aGVudGljYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLkh0dHBDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlNhc2xBbmRIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Ub2tlbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJUb2tlbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwpAQCAtNDgsOCArNTEsOCBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuYXV0aC5BdXRoLmJhc2ljOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyLkFVRElUX0xPR0dFUl9OQU1FOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5HcmVtbGluU2VydmVyQXV0aEtyYjVJbnRlZ3JhdGVUZXN0LlRFU1RDT05TT0xFOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwpAQCAtMTQ3LDcgKzE1MCw3IEBACiAgICAgICAgICAgICAgICAgc2V0dGluZ3MuaG9zdCA9ICJsb2NhbGhvc3QiOwogICAgICAgICAgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gSHR0cENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRvciA9IFNpbXBsZUF1dGhlbnRpY2F0b3IuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRpb25IYW5kbGVyID0gSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzLmdldE5hbWUoKTsKICAgICAgICAgICAgICAgICBhdXRoQ29uZmlnLnB1dChTaW1wbGVBdXRoZW50aWNhdG9yLkNPTkZJR19DUkVERU5USUFMU19EQiwgImNvbmYvdGlua2VyZ3JhcGgtY3JlZGVudGlhbHMucHJvcGVydGllcyIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNjEsOSArMTY0LDkgQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjbGllbnQuc3VibWl0KCIxKzIiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNsaWVudC5zdWJtaXQoIjErMyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDMpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBjbGllbnQuc3VibWl0KCJnLmluamVjdCg0KSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTE3NSwxMSArMTc4LDExIEBACiAgICAgICAgIC8vIFdlYlNvY2tldENoYW5uZWxpemVyIGRvZXMgbm90IGFkZCBTYXNsQXV0aGVudGljYXRpb25IYW5kbGVyIGZvciBBbGxvd0FsbEF1dGhlbnRpY2F0b3IsCiAgICAgICAgIC8vIHNvIG5vIGF1dGhlbnRpY2F0ZWQgdXNlciBsb2cgbGluZSBhdmFpbGFibGUKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCsxIiwgQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKSkpKTsKKyAgICAgICAgICAgICAgICAiVXNlciAlcyB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCgyXFwpIiwgQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKSkpKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCsyIiwgQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKSkpKTsKKyAgICAgICAgICAgICAgICAiVXNlciAlcyB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCgzXFwpIiwgQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKSkpKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKFN0cmluZy5mb3JtYXQoCi0gICAgICAgICAgICAgICAgIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCszIiwgQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKSkpKTsKKyAgICAgICAgICAgICAgICAiVXNlciAlcyB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCg0XFwpIiwgQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKSkpKTsKICAgICB9CiAKICAgICBAVGVzdApAQCAtMTg3LDE0ICsxOTAsMTQgQEAKICAgICAgICAgZmluYWwgU3RyaW5nIHVzZXJuYW1lID0gInN0ZXBoZW4iOwogICAgICAgICBmaW5hbCBTdHJpbmcgcGFzc3dvcmQgPSAicGFzc3dvcmQiOwogCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKGtkY1NlcnZlci5ncmVtbGluSG9zdG5hbWUpLmNyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKGtkY1NlcnZlci5ncmVtbGluSG9zdG5hbWUpLmF1dGgoYmFzaWModXNlcm5hbWUsIHBhc3N3b3JkKSkuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgY2xpZW50LnN1Ym1pdCgiMSsyIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBjbGllbnQuc3VibWl0KCIxKzMiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGNsaWVudC5zdWJtaXQoIjErNCIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDMpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBjbGllbnQuc3VibWl0KCJnLmluamVjdCg0KSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoNSkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CkBAIC0yMDcsNDggKzIxMCwyNCBAQAogICAgICAgICBhc3NlcnRUcnVlKGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCiAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiVXNlciAlcyB3aXRoIGFkZHJlc3MgLis/IGF1dGhlbnRpY2F0ZWQgYnkgJXMiLCB1c2VybmFtZSwgc2ltcGxlQXV0aGVudGljYXRvck5hbWUpKSkpOwogICAgICAgICBhc3NlcnRUcnVlKGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogMVxcKzEiKSkpOworICAgICAgICAgICAgICAgICJVc2VyIHN0ZXBoZW4gd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IGcuaW5qZWN0XFwoMlxcKSIpKSk7CiAgICAgICAgIGFzc2VydFRydWUobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+IG0ubWF0Y2hlcygKLSAgICAgICAgICAgICAgICAiVXNlciBzdGVwaGVuIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAxXFwrMiIpKSk7CisgICAgICAgICAgICAgICAgIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCgzXFwpIikpKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgICJVc2VyIHN0ZXBoZW4gd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCszIikpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1ZGl0TG9nV2l0aEtyYjVBdXRoZW50aWNhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKGtkY1NlcnZlci5ncmVtbGluSG9zdG5hbWUpLmphYXNFbnRyeShURVNUQ09OU09MRSkucHJvdG9jb2woa2RjU2VydmVyLnNlcnZlclByaW5jaXBhbE5hbWUpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjbGllbnQuc3VibWl0KCIxKzIiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNsaWVudC5zdWJtaXQoIjErMyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB3YWl0IGZvciBsb2dnZXIgdG8gZmx1c2ggLSAoZG9uJ3QgdGhpbmsgdGhlcmUgaXMgYSB3YXkgdG8gZGV0ZWN0IHRoaXMpCi0gICAgICAgIHN0b3BTZXJ2ZXIoKTsKLSAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBhdXRoZW50aWNhdG9yTmFtZSA9IEtyYjVBdXRoZW50aWNhdG9yLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyBhdXRoZW50aWNhdGVkIGJ5ICVzIiwga2RjU2VydmVyLmNsaWVudFByaW5jaXBhbE5hbWUsIGF1dGhlbnRpY2F0b3JOYW1lKSkpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgICJVc2VyIGRyYW5reWUgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCsxIikpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgICJVc2VyIGRyYW5reWUgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCsyIikpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgICJVc2VyIGRyYW5reWUgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCszIikpKTsKKyAgICAgICAgICAgICAgICAiVXNlciBzdGVwaGVuIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiBnLmluamVjdFxcKDRcXCkiKSkpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkTm90QXVkaXRMb2dXaGVuRGlzYWJsZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuamFhc0VudHJ5KFRFU1RDT05TT0xFKS5wcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyB1c2VybmFtZSA9ICJzdGVwaGVuIjsKKyAgICAgICAgZmluYWwgU3RyaW5nIHBhc3N3b3JkID0gInBhc3N3b3JkIjsKKworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZChrZGNTZXJ2ZXIuZ3JlbWxpbkhvc3RuYW1lKS5hdXRoKGJhc2ljKHVzZXJuYW1lLCBwYXNzd29yZCkpLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjbGllbnQuc3VibWl0KCIxKzIiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNsaWVudC5zdWJtaXQoIjErMyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDMpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBjbGllbnQuc3VibWl0KCJnLmluamVjdCg0KSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTI1NywyOSArMjM2LDMwIEBACiAgICAgICAgIHN0b3BTZXJ2ZXIoKTsKICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwogCi0gICAgICAgIGZpbmFsIFN0cmluZyBhdXRoZW50aWNhdG9yTmFtZSA9IEtyYjVBdXRoZW50aWNhdG9yLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNpbXBsZUF1dGhlbnRpY2F0b3JOYW1lID0gU2ltcGxlQXV0aGVudGljYXRvci5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CiAgICAgICAgIGFzc2VydEZhbHNlKGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiVXNlciAlcyB3aXRoIGFkZHJlc3MgLis/IGF1dGhlbnRpY2F0ZWQgYnkgJXMiLCBrZGNTZXJ2ZXIuY2xpZW50UHJpbmNpcGFsTmFtZSwgYXV0aGVudGljYXRvck5hbWUpKSkpOworICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyBhdXRoZW50aWNhdGVkIGJ5ICVzIiwgdXNlcm5hbWUsIHNpbXBsZUF1dGhlbnRpY2F0b3JOYW1lKSkpKTsKICAgICAgICAgYXNzZXJ0RmFsc2UobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+IG0ubWF0Y2hlcygKLSAgICAgICAgICAgICAgICAiVXNlciBkcmFua3llIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAxXFwrMSIpKSk7CisgICAgICAgICAgICAgICAgIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCgyXFwpIikpKTsKICAgICAgICAgYXNzZXJ0RmFsc2UobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+IG0ubWF0Y2hlcygKLSAgICAgICAgICAgICAgICAiVXNlciBkcmFua3llIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAxXFwrMiIpKSk7CisgICAgICAgICAgICAgICAgIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCgzXFwpIikpKTsKICAgICAgICAgYXNzZXJ0RmFsc2UobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+IG0ubWF0Y2hlcygKLSAgICAgICAgICAgICAgICAiVXNlciBkcmFua3llIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAxXFwrMyIpKSk7CisgICAgICAgICAgICAgICAgIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogZy5pbmplY3RcXCg0XFwpIikpKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1ZGl0TG9nV2l0aEh0dHBUcmFuc3BvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPTItMSIpKTsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kZXIuZW5jb2RlVG9TdHJpbmcoInN0ZXBoZW46cGFzc3dvcmQiLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cFBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwUG9zdC5hZGRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kZXIuZW5jb2RlVG9TdHJpbmcoInN0ZXBoZW46cGFzc3dvcmQiLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgaHR0cFBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KDEpXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cFBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyB3YWl0IGZvciBsb2dnZXIgdG8gZmx1c2ggLSAoZG9uJ3QgdGhpbmsgdGhlcmUgaXMgYSB3YXkgdG8gZGV0ZWN0IHRoaXMpCkBAIC0yOTAsNyArMjcwLDcgQEAKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAogICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IGF1dGhlbnRpY2F0ZWQgYnkgJXMiLCBhdXRoZW50aWNhdG9yTmFtZSkpKSk7CiAgICAgICAgIGFzc2VydFRydWUobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+IG0ubWF0Y2hlcygKLSAgICAgICAgICAgICAgICAiVXNlciBzdGVwaGVuIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAyLTEiKSkpOworICAgICAgICAgICAgICAgICJVc2VyIHN0ZXBoZW4gd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IGcuaW5qZWN0XFwoMVxcKSIpKSk7CiAgICAgfQogCiAgICAgQFRlc3QKQEAgLTI5OCw3ICsyNzgsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgdXNlcm5hbWUgPSAic3RlcGhlbiI7CiAgICAgICAgIGZpbmFsIFN0cmluZyBwYXNzd29yZCA9ICJwYXNzd29yZCI7CiAKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuY3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuYXV0aChiYXNpYyh1c2VybmFtZSwgcGFzc3dvcmQpKS5jcmVhdGUoKTsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWwoKS4KICAgICAgICAgICAgICAgICB3aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlciwgImdtb2Rlcm4iKSk7CiAKQEAgLTMxNiw1NSArMjk2LDYgQEAKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAogICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyBhdXRoZW50aWNhdGVkIGJ5ICVzIiwgdXNlcm5hbWUsIGF1dGhlbnRpY2F0b3JOYW1lKSkpKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4KLSAgICAgICAgICAgICAgICBtLm1hdGNoZXMoIlVzZXIgLis/IHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiBcXFtcXFtdLCBcXFtWXFwoXFwpLCBjb3VudFxcKFxcKV1dIikpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1ZGl0TG9nVHdvQ2xpZW50c1dpdGhLcmI1QXV0aGVudGljYXRvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBjYWxsaW5nIGluaXQgdG8gbWFrZSBzdXJlIHRoZSBjbHVzdGVycyBnZXQgdGhlaXIgY29ubmVjdGlvbnMgcHJpbWVkIGluIGxvdyByZXNvdXJjZSBlbnZpcm9ubWVudHMgbGlrZSB0cmF2aXMKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuamFhc0VudHJ5KFRFU1RDT05TT0xFKS4KLSAgICAgICAgICAgICAgICBwcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgY2xpZW50LmluaXQoKTsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuamFhc0VudHJ5KFRFU1RDT05TT0xFMikuCi0gICAgICAgICAgICAgICAgcHJvdG9jb2woa2RjU2VydmVyLnNlcnZlclByaW5jaXBhbE5hbWUpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50MiA9IGNsdXN0ZXIyLmNvbm5lY3QoKTsKLSAgICAgICAgY2xpZW50Mi5pbml0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIyLCBjbGllbnQyLnN1Ym1pdCgiMTErMTEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoIjErMiIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjMsIGNsaWVudDIuc3VibWl0KCIxMSsxMiIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjQsIGNsaWVudDIuc3VibWl0KCIxMSsxMyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY2xpZW50LnN1Ym1pdCgiMSszIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIGNsdXN0ZXIyLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB3YWl0IGZvciBsb2dnZXIgdG8gZmx1c2ggLSAoZG9uJ3QgdGhpbmsgdGhlcmUgaXMgYSB3YXkgdG8gZGV0ZWN0IHRoaXMpCi0gICAgICAgIHN0b3BTZXJ2ZXIoKTsKLSAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBhdXRoZW50aWNhdG9yTmFtZSA9IEtyYjVBdXRoZW50aWNhdG9yLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIlVzZXIgJXMgd2l0aCBhZGRyZXNzIC4rPyBhdXRoZW50aWNhdGVkIGJ5ICVzIiwga2RjU2VydmVyLmNsaWVudFByaW5jaXBhbE5hbWUsIGF1dGhlbnRpY2F0b3JOYW1lKSkpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4KLSAgICAgICAgICAgICAgICBtLm1hdGNoZXMoIlVzZXIgZHJhbmt5ZSB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogMVxcKzEiKSkpOwotICAgICAgICBhc3NlcnRUcnVlKGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPgotICAgICAgICAgICAgICAgIG0ubWF0Y2hlcygiVXNlciBkcmFua3llIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAxXFwrMiIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+Ci0gICAgICAgICAgICAgICAgbS5tYXRjaGVzKCJVc2VyIGRyYW5reWUgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDFcXCszIikpKTsKLQotICAgICAgICBhc3NlcnRUcnVlKGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiVXNlciAlcyB3aXRoIGFkZHJlc3MgLis/IGF1dGhlbnRpY2F0ZWQgYnkgJXMiLCBrZGNTZXJ2ZXIuY2xpZW50UHJpbmNpcGFsTmFtZTIsIGF1dGhlbnRpY2F0b3JOYW1lKSkpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4KLSAgICAgICAgICAgICAgICBtLm1hdGNoZXMoIlVzZXIgZHJhbmt5ZTIgd2l0aCBhZGRyZXNzIC4rPyByZXF1ZXN0ZWQ6IDExXFwrMTEiKSkpOwotICAgICAgICBhc3NlcnRUcnVlKGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPgotICAgICAgICAgICAgICAgIG0ubWF0Y2hlcygiVXNlciBkcmFua3llMiB3aXRoIGFkZHJlc3MgLis/IHJlcXVlc3RlZDogMTFcXCsxMiIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+Ci0gICAgICAgICAgICAgICAgbS5tYXRjaGVzKCJVc2VyIGRyYW5reWUyIHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiAxMVxcKzEzIikpKTsKKyAgICAgICAgICAgICAgICBtLm1hdGNoZXMoIlVzZXIgLis/IHdpdGggYWRkcmVzcyAuKz8gcmVxdWVzdGVkOiBnLlZcXChcXCkuY291bnRcXChcXCkiKSkpOwogICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJBdXRoSW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyQXV0aEludGVncmF0ZVRlc3QuamF2YQppbmRleCAyZGY3ODYzLi44YzIwMGM1IDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJBdXRoSW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckF1dGhJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTIwLDM4ICsyMCwzMyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdFNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkh0dHBSZXF1ZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5SZXNwb25zZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5zaW1wbGUuV2ViU29ja2V0Q2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguU2ltcGxlQXV0aGVudGljYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlNhc2xBdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5FeGNlcHRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXplcnM7CiBpbXBvcnQgb3JnLmlldGYuamdzcy5HU1NFeGNlcHRpb247CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKLWltcG9ydCBqYXZhLnRpbWUuRHVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NDcmVkZW50aWFsc1Byb3ZpZGVyOworaW1wb3J0IHNvZnR3YXJlLmFtYXpvbi5hd3NzZGsuYXV0aC5jcmVkZW50aWFscy5Bd3NTZXNzaW9uQ3JlZGVudGlhbHM7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuYXV0aC5BdXRoLmJhc2ljOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5hdXRoLkF1dGguc2lndjQ7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuYWxsT2Y7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuY29udGFpbnNTdHJpbmc7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuc3RhcnRzV2l0aDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuQW55T2YuYW55T2Y7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by53aGVuOwogCiAvKioKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKQEAgLTY3LDcgKzYyLDcgQEAKICAgICAgICAgYXV0aFNldHRpbmdzLmF1dGhlbnRpY2F0b3IgPSBTaW1wbGVBdXRoZW50aWNhdG9yLmNsYXNzLmdldE5hbWUoKTsKIAogICAgICAgICAvLyB1c2UgYSBjcmVkZW50aWFscyBncmFwaCB3aXRoIHR3byB1c2VycyBpbiBpdDogc3RlcGhlbi9wYXNzd29yZCBhbmQgbWFya28vcmFpbmJvdy1kYXNoCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBhdXRoQ29uZmlnID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGF1dGhDb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIGF1dGhDb25maWcucHV0KFNpbXBsZUF1dGhlbnRpY2F0b3IuQ09ORklHX0NSRURFTlRJQUxTX0RCLCAiY29uZi90aW5rZXJncmFwaC1jcmVkZW50aWFscy5wcm9wZXJ0aWVzIik7CiAKICAgICAgICAgYXV0aFNldHRpbmdzLmNvbmZpZyA9IGF1dGhDb25maWc7CkBAIC03NSw2ICs3MCw5IEBACiAKICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWVPZlRlc3QgPSBuYW1lLmdldE1ldGhvZE5hbWUoKTsKICAgICAgICAgc3dpdGNoIChuYW1lT2ZUZXN0KSB7CisgICAgICAgICAgICBjYXNlICJzaG91bGRQYXNzU2lndjRUb1NlcnZlciI6CisgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXV0aGVudGljYXRpb24gPSBuZXcgU2V0dGluZ3MuQXV0aGVudGljYXRpb25TZXR0aW5ncygpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAic2hvdWxkQXV0aGVudGljYXRlT3ZlclNzbFdpdGhQbGFpblRleHQiOgogICAgICAgICAgICAgY2FzZSAic2hvdWxkRmFpbElmU3NsRW5hYmxlZE9uU2VydmVyQnV0Tm90Q2xpZW50IjoKICAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncy5Tc2xTZXR0aW5ncyBzc2xDb25maWcgPSBuZXcgU2V0dGluZ3MuU3NsU2V0dGluZ3MoKTsKQEAgLTg5LDE3ICs4Nyw0MyBAQAogICAgIH0KIAogICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUGFzc1NpZ3Y0VG9TZXJ2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQXdzQ3JlZGVudGlhbHNQcm92aWRlciBjcmVkZW50aWFsc1Byb3ZpZGVyID0gbW9jayhBd3NDcmVkZW50aWFsc1Byb3ZpZGVyLmNsYXNzKTsKKyAgICAgICAgZmluYWwgQXdzU2Vzc2lvbkNyZWRlbnRpYWxzIGNyZWRlbnRpYWxzID0gQXdzU2Vzc2lvbkNyZWRlbnRpYWxzLmNyZWF0ZSgiSSBhbSBBV1NBY2Nlc3NLZXlJZCIsICJJIGFtIEFXU1NlY3JldEtleSIsICJJIGFtIEFXU1Nlc3Npb25Ub2tlbiIpOworICAgICAgICB3aGVuKGNyZWRlbnRpYWxzUHJvdmlkZXIucmVzb2x2ZUNyZWRlbnRpYWxzKCkpLnRoZW5SZXR1cm4oY3JlZGVudGlhbHMpOworCisgICAgICAgIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxIdHRwUmVxdWVzdD4gaHR0cFJlcXVlc3QgPSBuZXcgQXRvbWljUmVmZXJlbmNlPD4oKTsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQorICAgICAgICAgICAgICAgIC5hdXRoKHNpZ3Y0KCJ1cy13ZXN0MiIsIGNyZWRlbnRpYWxzUHJvdmlkZXIsICJzZXJ2aWNlLW5hbWUiKSkKKyAgICAgICAgICAgICAgICAuYWRkSW50ZXJjZXB0b3IoImhlYWRlci1jaGVja2VyIiwgciAtPiB7CisgICAgICAgICAgICAgICAgICAgIGh0dHBSZXF1ZXN0LnNldChyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKyAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKTsKKworICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGhlYWRlcnMgPSBodHRwUmVxdWVzdC5nZXQoKS5oZWFkZXJzKCk7CisgICAgICAgIGFzc2VydE5vdE51bGwoaGVhZGVycy5nZXQoIlgtQW16LURhdGUiKSk7CisgICAgICAgIGFzc2VydFRoYXQoaGVhZGVycy5nZXQoIkF1dGhvcml6YXRpb24iKSwgc3RhcnRzV2l0aCgiQVdTNC1ITUFDLVNIQTI1NiBDcmVkZW50aWFsPUkgYW0gQVdTQWNjZXNzS2V5SWQiKSk7CisgICAgICAgIGFzc2VydFRoYXQoaGVhZGVycy5nZXQoIkF1dGhvcml6YXRpb24iKSwKKyAgICAgICAgICAgICAgICBhbGxPZihjb250YWluc1N0cmluZygiL3VzLXdlc3QyL3NlcnZpY2UtbmFtZS9hd3M0X3JlcXVlc3QiKSwgY29udGFpbnNTdHJpbmcoIlNpZ25hdHVyZT0iKSkpOworCisgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICB9CisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxJZlNzbEVuYWJsZWRPblNlcnZlckJ1dE5vdENsaWVudCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpOwogICAgICAgICAgICAgZmFpbCgiVGhpcyBzaG91bGQgbm90IHN1Y2NlZWQgYXMgdGhlIGNsaWVudCBkaWQgbm90IGVuYWJsZSBTU0wiKTsKLSAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoZXgsIGluc3RhbmNlT2YoTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uLmNsYXNzKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgYXNzZXJ0VGhhdChleCwgaW5zdGFuY2VPZihFeGVjdXRpb25FeGNlcHRpb24uY2xhc3MpKTsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QsIGluc3RhbmNlT2YoUnVudGltZUV4Y2VwdGlvbi5jbGFzcykpOworICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIlRoZSBzZXJ2ZXIgbWF5IGJlIGV4cGVjdGluZyBTU0wgdG8gYmUgZW5hYmxlZCIpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMTA3LDcgKzEzMSw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhlbnRpY2F0ZVdpdGhQbGFpblRleHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVkZW50aWFscygic3RlcGhlbiIsICJwYXNzd29yZCIpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmF1dGgoYmFzaWMoInN0ZXBoZW4iLCAicGFzc3dvcmQiKSkuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICBhc3NlcnRDb25uZWN0aW9uKGNsdXN0ZXIsIGNsaWVudCk7CkBAIC0xMTcsMjEgKzE0MSwyNCBAQAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhlbnRpY2F0ZU92ZXJTc2xXaXRoUGxhaW5UZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkKICAgICAgICAgICAgICAgICAuZW5hYmxlU3NsKHRydWUpLnNzbFNraXBDZXJ0VmFsaWRhdGlvbih0cnVlKQotICAgICAgICAgICAgICAgIC5jcmVkZW50aWFscygic3RlcGhlbiIsICJwYXNzd29yZCIpLmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIC5hdXRoKGJhc2ljKCJzdGVwaGVuIiwgInBhc3N3b3JkIikpLmNyZWF0ZSgpOworCiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAorICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpOworCiAgICAgICAgIGFzc2VydENvbm5lY3Rpb24oY2x1c3RlciwgY2xpZW50KTsKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxBdXRoZW50aWNhdGVXaXRoUGxhaW5UZXh0Tm9DcmVkZW50aWFscygpIHRocm93cyBFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxBdXRoZW50aWNhdGVXaXRoUGxhaW5UZXh0Tm9DcmVkZW50aWFscygpIHsKICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKTsKICAgICAgICAgICAgIGZhaWwoIlRoaXMgc2hvdWxkIG5vdCBzdWNjZWVkIGFzIHRoZSBjbGllbnQgZGlkIG5vdCBwcm92aWRlIGNyZWRlbnRpYWxzIik7Ci0gICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKIAogICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgeW91IG1pZ2h0IGdldCBlaXRoZXIgb2YgdGhlc2UKQEAgLTE0MiwxNiArMTY5LDE3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsQXV0aGVudGljYXRlV2l0aFBsYWluVGV4dEJhZFBhc3N3b3JkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlZGVudGlhbHMoInN0ZXBoZW4iLCAiYmFkIikuY3JlYXRlKCk7CisgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbEF1dGhlbnRpY2F0ZVdpdGhQbGFpblRleHRCYWRQYXNzd29yZCgpIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5hdXRoKGJhc2ljKCJzdGVwaGVuIiwgImJhZCIpKS5jcmVhdGUoKTsKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJUaGlzIHNob3VsZCBub3Qgc3VjY2VlZCBhcyB0aGUgY2xpZW50IGRpZCBub3QgcHJvdmlkZSB2YWxpZCBjcmVkZW50aWFscyIpOwotICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgeworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VFeGNlcHRpb24uY2xhc3MsIHJvb3QuZ2V0Q2xhc3MoKSk7CisgICAgICAgICAgICAvLyBzZXJ2ZXIgZG8gbm90IHNlbmQgZXJyb3IgbWVzc2FnZSBub3cKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiVXNlcm5hbWUgYW5kL29yIHBhc3N3b3JkIGFyZSBpbmNvcnJlY3QiLCByb290LmdldE1lc3NhZ2UoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CkBAIC0xNTksMTMgKzE4NywxMyBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbEF1dGhlbnRpY2F0ZVdpdGhQbGFpblRleHRCYWRVc2VybmFtZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJtYXJrbyIsICJwYXNzd29yZCIpLmNyZWF0ZSgpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxBdXRoZW50aWNhdGVXaXRoUGxhaW5UZXh0QmFkVXNlcm5hbWUoKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuYXV0aChiYXNpYygibWFya28iLCAicGFzc3dvcmQiKSkuY3JlYXRlKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCk7Ci0gICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VFeGNlcHRpb24uY2xhc3MsIHJvb3QuZ2V0Q2xhc3MoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlVzZXJuYW1lIGFuZC9vciBwYXNzd29yZCBhcmUgaW5jb3JyZWN0Iiwgcm9vdC5nZXRNZXNzYWdlKCkpOwpAQCAtMTc0LDEyNiArMjAyLDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxBdXRoZW50aWNhdGVXaXRoVW5BdXRoZW50aWNhdGVkUmVxdWVzdEFmdGVyTWF4RGVmZXJyYWJsZUR1cmF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoV2ViU29ja2V0Q2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKSB7Ci0gICAgICAgICAgICAvLyBGaXJzdCByZXF1ZXN0IHdpbGwgaW5pdGlhdGUgdGhlIGF1dGhlbnRpY2F0aW9uIGhhbmRzaGFrZQotICAgICAgICAgICAgLy8gU3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIGJlIGRlZmVycmVkCi0gICAgICAgICAgICBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3BvbnNlTWVzc2FnZT4+IGZ1dHVyZU9mUmVxdWVzdFdpdGhpbkF1dGhEdXJhdGlvbjEgID0gY2xpZW50LnN1Ym1pdEFzeW5jKCIiKTsKLSAgICAgICAgICAgIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gZnV0dXJlT2ZSZXF1ZXN0V2l0aGluQXV0aER1cmF0aW9uMiAgPSBjbGllbnQuc3VibWl0QXN5bmMoIiIpOwotICAgICAgICAgICAgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXNwb25zZU1lc3NhZ2U+PiBmdXR1cmVPZlJlcXVlc3RXaXRoaW5BdXRoRHVyYXRpb24zICA9IGNsaWVudC5zdWJtaXRBc3luYygiIik7Ci0KLSAgICAgICAgICAgIC8vIEFmdGVyIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGVmZXJyZWQgcmVxdWVzdCBkdXJhdGlvbiwKLSAgICAgICAgICAgIC8vIGFueSBub24tYXV0aGVudGljYXRlZCByZXF1ZXN0IHdpbGwgaW52YWxpZGF0ZSBhbGwgcmVxdWVzdHMgd2l0aCA0MjkgZXJyb3IKLSAgICAgICAgICAgIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gZnV0dXJlT2ZSZXF1ZXN0U3VibWl0dGVkVG9vTGF0ZSA9IENvbXBsZXRhYmxlRnV0dXJlLnJ1bkFzeW5jKCgpIC0+IHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoU2FzbEF1dGhlbnRpY2F0aW9uSGFuZGxlci5NQVhfUkVRVUVTVF9ERUZFUlJBQkxFX0RVUkFUSU9OLnBsdXMoRHVyYXRpb24ub2ZTZWNvbmRzKDEpKS50b01pbGxpcygpKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pLnRoZW5Db21wb3NlKChfXykgLT4gewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbGllbnQuc3VibWl0QXN5bmMoIiIpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZnV0dXJlT2ZSZXF1ZXN0V2l0aGluQXV0aER1cmF0aW9uMS5nZXQoKS5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGZ1dHVyZU9mUmVxdWVzdFdpdGhpbkF1dGhEdXJhdGlvbjIuZ2V0KCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBmdXR1cmVPZlJlcXVlc3RXaXRoaW5BdXRoRHVyYXRpb24zLmdldCgpLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZnV0dXJlT2ZSZXF1ZXN0U3VibWl0dGVkVG9vTGF0ZS5nZXQoKS5zaXplKCkpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURSwgZnV0dXJlT2ZSZXF1ZXN0V2l0aGluQXV0aER1cmF0aW9uMS5nZXQoKS5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuVU5BVVRIT1JJWkVELCBmdXR1cmVPZlJlcXVlc3RXaXRoaW5BdXRoRHVyYXRpb24xLmdldCgpLmdldCgxKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5VTkFVVEhPUklaRUQsIGZ1dHVyZU9mUmVxdWVzdFdpdGhpbkF1dGhEdXJhdGlvbjIuZ2V0KCkuZ2V0KDApLmdldFN0YXR1cygpLmdldENvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlVOQVVUSE9SSVpFRCwgZnV0dXJlT2ZSZXF1ZXN0V2l0aGluQXV0aER1cmF0aW9uMy5nZXQoKS5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuVU5BVVRIT1JJWkVELCBmdXR1cmVPZlJlcXVlc3RTdWJtaXR0ZWRUb29MYXRlLmdldCgpLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsQXV0aGVudGljYXRlV2l0aEluY29ycmVjdFBhcmFsbGVsUmVxdWVzdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChXZWJTb2NrZXRDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLQotICAgICAgICAgICAgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXNwb25zZU1lc3NhZ2U+PiBmaXJzdFJlcXVlc3QgPSBjbGllbnQuc3VibWl0QXN5bmMoIjEiKTsKLSAgICAgICAgICAgIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gc2Vjb25kUmVxdWVzdCAgPSBjbGllbnQuc3VibWl0QXN5bmMoIjIiKTsKLSAgICAgICAgICAgIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzcG9uc2VNZXNzYWdlPj4gdGhpcmRSZXF1ZXN0ICA9IGNsaWVudC5zdWJtaXRBc3luYygiMyIpOwotCi0gICAgICAgICAgICBUaHJlYWQuc2xlZXAoNTAwKTsKLQotICAgICAgICAgICAgLy8gc2VuZCBzb21lIGluY29ycmVjdCB2YWx1ZSBmb3IgdXNlcm5hbWUgcGFzc3dvcmQgd2hpY2ggc2hvdWxkIGNhdXNlIGFsbCByZXF1ZXN0cyB0byBmYWlsLgotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdEFzeW5jKFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfQVVUSEVOVElDQVRJT04pLmFkZEFyZyhUb2tlbnMuQVJHU19TQVNMLCAic29tZWluY29ycmVjdHZhbHVlIikuY3JlYXRlKCkpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZmlyc3RSZXF1ZXN0LmdldCgpLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2Vjb25kUmVxdWVzdC5nZXQoKS5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRoaXJkUmVxdWVzdC5nZXQoKS5zaXplKCkpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURSwgZmlyc3RSZXF1ZXN0LmdldCgpLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5VTkFVVEhPUklaRUQsIGZpcnN0UmVxdWVzdC5nZXQoKS5nZXQoMSkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuVU5BVVRIT1JJWkVELCBzZWNvbmRSZXF1ZXN0LmdldCgpLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5VTkFVVEhPUklaRUQsIHRoaXJkUmVxdWVzdC5nZXQoKS5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aGVudGljYXRlV2l0aFBsYWluVGV4dE92ZXJEZWZhdWx0SlNPTlNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OKQotICAgICAgICAgICAgICAgIC5jcmVkZW50aWFscygic3RlcGhlbiIsICJwYXNzd29yZCIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgYXNzZXJ0Q29ubmVjdGlvbihjbHVzdGVyLCBjbGllbnQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aGVudGljYXRlV2l0aFBsYWluVGV4dE92ZXJHcmFwaFNPTlYxU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjFfVU5UWVBFRCkKLSAgICAgICAgICAgICAgICAuY3JlZGVudGlhbHMoInN0ZXBoZW4iLCAicGFzc3dvcmQiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIGFzc2VydENvbm5lY3Rpb24oY2x1c3RlciwgY2xpZW50KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhlbnRpY2F0ZUFuZFdvcmtXaXRoVmFyaWFibGVzT3ZlckRlZmF1bHRKc29uU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT04pCi0gICAgICAgICAgICAgICAgLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gKFZlcnRleCkgY2xpZW50LnN1Ym1pdCgidj1ncmFwaC5hZGRWZXJ0ZXgoXCJuYW1lXCIsIFwic3RlcGhlblwiKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic3RlcGhlbiIsIHZlcnRleC52YWx1ZSgibmFtZSIpKTsKLQotICAgICAgICAgICAgZmluYWwgUHJvcGVydHkgdnBOYW1lID0gKFByb3BlcnR5KWNsaWVudC5zdWJtaXQoInYucHJvcGVydHkoJ25hbWUnKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic3RlcGhlbiIsIHZwTmFtZS52YWx1ZSgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aGVudGljYXRlQW5kV29ya1dpdGhWYXJpYWJsZXNPdmVyR3JhcGhTT05WMVNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YxX1VOVFlQRUQpCi0gICAgICAgICAgICAgICAgLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXAgdmVydGV4ID0gKE1hcCkgY2xpZW50LnN1Ym1pdCgidj1ncmFwaC5hZGRWZXJ0ZXgoJ25hbWUnLCAnc3RlcGhlbicpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldE9iamVjdCgpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxNYXA+PiBwcm9wZXJ0aWVzID0gKE1hcCkgdmVydGV4LmdldCgicHJvcGVydGllcyIpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgcHJvcGVydGllcy5nZXQoIm5hbWUiKS5nZXQoMCkuZ2V0KCJ2YWx1ZSIpKTsKLQotICAgICAgICAgICAgZmluYWwgTWFwIHZwTmFtZSA9IChNYXApY2xpZW50LnN1Ym1pdCgidi5wcm9wZXJ0eSgnbmFtZScpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldE9iamVjdCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgdnBOYW1lLmdldCgidmFsdWUiKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydENvbm5lY3Rpb24oZmluYWwgQ2x1c3RlciBjbHVzdGVyLCBmaW5hbCBDbGllbnQgY2xpZW50KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjbGllbnQuc3VibWl0KCIxKzIiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNsaWVudC5zdWJtaXQoIjErMyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDMpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBjbGllbnQuc3VibWl0KCJnLmluamVjdCg0KSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckF1dGhLcmI1SW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyQXV0aEtyYjVJbnRlZ3JhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YzdlNzMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyQXV0aEtyYjVJbnRlZ3JhdGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguS3JiNUF1dGhlbnRpY2F0b3I7Ci1pbXBvcnQgb3JnLmlldGYuamdzcy5HU1NFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VjdXJpdHkuYXV0aC5sb2dpbi5Mb2dpbkV4Y2VwdGlvbjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogQGF1dGhvciBNYXJjIGRlIExpZ25pZQotICovCi1wdWJsaWMgY2xhc3MgR3JlbWxpblNlcnZlckF1dGhLcmI1SW50ZWdyYXRlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgb3JnLnNsZjRqLkxvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmVtbGluU2VydmVyQXV0aEtyYjVJbnRlZ3JhdGVUZXN0LmNsYXNzKTsKLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVENPTlNPTEUgPSAiR3JlbWxpbkNvbnNvbGUiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVENPTlNPTEVfTk9UX0xPR0dFRF9JTiA9ICJVc2VyTm90TG9nZ2VkSW4iOwotCi0gICAgcHJpdmF0ZSBLZGNGaXh0dXJlIGtkY1NlcnZlcjsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm9qZWN0QmFzZURpciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiYmFzZWRpciIsICIuIik7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aENvbmZpZ05hbWUgPSBwcm9qZWN0QmFzZURpciArICIvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2dyZW1saW4tY29uc29sZS1qYWFzLmNvbmYiOwotICAgICAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJqYXZhLnNlY3VyaXR5LmF1dGgubG9naW4uY29uZmlnIiwgYXV0aENvbmZpZ05hbWUpOwotICAgICAgICAgICAga2RjU2VydmVyID0gbmV3IEtkY0ZpeHR1cmUocHJvamVjdEJhc2VEaXIpOwotICAgICAgICAgICAga2RjU2VydmVyLnNldFVwKCk7Ci0gICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpICB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3VwZXIuc2V0VXAoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBrZGNTZXJ2ZXIuY2xvc2UoKTsKLSAgICAgICAgU3lzdGVtLmNsZWFyUHJvcGVydHkoImphdmEuc2VjdXJpdHkuYXV0aC5sb2dpbi5jb25maWciKTsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25maWd1cmUgc3BlY2lmaWMgR3JlbWxpbiBTZXJ2ZXIgc2V0dGluZ3MgZm9yIHNwZWNpZmljIHRlc3RzLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXR0aW5ncyBvdmVycmlkZVNldHRpbmdzKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7Ci0gICAgICAgIHNldHRpbmdzLmhvc3QgPSBrZGNTZXJ2ZXIuZ3JlbWxpbkhvc3RuYW1lOwotICAgICAgICBmaW5hbCBTZXR0aW5ncy5Tc2xTZXR0aW5ncyBzc2xDb25maWcgPSBuZXcgU2V0dGluZ3MuU3NsU2V0dGluZ3MoKTsKLSAgICAgICAgc3NsQ29uZmlnLmVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgc2V0dGluZ3Muc3NsID0gc3NsQ29uZmlnOwotICAgICAgICBmaW5hbCBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzIGF1dGhTZXR0aW5ncyA9IG5ldyBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzKCk7Ci0gICAgICAgIHNldHRpbmdzLmF1dGhlbnRpY2F0aW9uID0gYXV0aFNldHRpbmdzOwotICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRvciA9IEtyYjVBdXRoZW50aWNhdG9yLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGF1dGhDb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGF1dGhDb25maWcucHV0KCJwcmluY2lwYWwiLCBrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsKTsKLSAgICAgICAgYXV0aENvbmZpZy5wdXQoImtleXRhYiIsIGtkY1NlcnZlci5zZXJ2aWNlS2V5dGFiRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5jb25maWcgPSBhdXRoQ29uZmlnOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lT2ZUZXN0ID0gbmFtZS5nZXRNZXRob2ROYW1lKCk7Ci0gICAgICAgIHN3aXRjaCAobmFtZU9mVGVzdCkgewotICAgICAgICAgICAgY2FzZSAic2hvdWxkQXV0aGVudGljYXRlV2l0aERlZmF1bHRzIjoKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEZhaWxXaXRob3V0Q2xpZW50SmFhc0VudHJ5IjoKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEZhaWxXaXRob3V0Q2xpZW50VGlja2V0Q2FjaGUiOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkRmFpbFdpdGhOb25leGlzdGVudFNlcnZlclByaW5jaXBhbCI6Ci0gICAgICAgICAgICAgICAgYXV0aENvbmZpZy5wdXQoInByaW5jaXBhbCIsICJuby1zZXJ2aWNlIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRGYWlsV2l0aEVtcHR5U2VydmVyS2V5dGFiIjoKLSAgICAgICAgICAgICAgICBmaW5hbCBGaWxlIGtleXRhYkZpbGUgPSBuZXcgRmlsZSgiLiIsICJuby1maWxlIik7Ci0gICAgICAgICAgICAgICAgYXV0aENvbmZpZy5wdXQoImtleXRhYiIsIGtleXRhYkZpbGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkRmFpbFdpdGhXcm9uZ1NlcnZlcktleXRhYiI6Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHByaW5jaXBhbCA9ICJuby1wcmluY2lwYWwvc29tZWhvc3RAVEVTVC5DT00iOwotICAgICAgICAgICAgICAgIHRyeSB7IGtkY1NlcnZlci5jcmVhdGVQcmluY2lwYWwocHJpbmNpcGFsKTsgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkNhbm5vdCBjcmVhdGUgcHJpbmNpcGFsIGluIG92ZXJyaWRlU2V0dGluZ3MoKTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXV0aENvbmZpZy5wdXQoInByaW5jaXBhbCIsIHByaW5jaXBhbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRBdXRoZW50aWNhdGVXaXRoU3NsIjoKLSAgICAgICAgICAgICAgICBzc2xDb25maWcuZW5hYmxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3NsQ29uZmlnLmtleVN0b3JlID0gSktTX1NFUlZFUl9LRVk7Ci0gICAgICAgICAgICAgICAgc3NsQ29uZmlnLmtleVN0b3JlUGFzc3dvcmQgPSBLRVlfUEFTUzsKLSAgICAgICAgICAgICAgICBzc2xDb25maWcua2V5U3RvcmVUeXBlID0gS0VZU1RPUkVfVFlQRV9KS1M7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRBdXRoZW50aWNhdGVXaXRoUW9wIjoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc2V0dGluZ3M7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBdXRoZW50aWNhdGVXaXRoRGVmYXVsdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuamFhc0VudHJ5KFRFU1RDT05TT0xFKQotICAgICAgICAgICAgICAgIC5wcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgYXNzZXJ0Q29ubmVjdGlvbihjbHVzdGVyLCBjbGllbnQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdpdGhvdXRDbGllbnRKYWFzRW50cnkoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKGtkY1NlcnZlci5ncmVtbGluSG9zdG5hbWUpCi0gICAgICAgICAgICAgICAgLnByb3RvY29sKGtkY1NlcnZlci5zZXJ2ZXJQcmluY2lwYWxOYW1lKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCk7Ci0gICAgICAgICAgICBmYWlsKCJUaGlzIHNob3VsZCBub3Qgc3VjY2VlZCBhcyB0aGUgY2xpZW50IGNvbmZpZyBkb2VzIG5vdCBjb250YWluIGEgSmFhc0VudHJ5Iik7Ci0gICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyb290IGluc3RhbmNlb2YgUmVzcG9uc2VFeGNlcHRpb24gfHwgcm9vdCBpbnN0YW5jZW9mIEdTU0V4Y2VwdGlvbik7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxXaXRob3V0Q2xpZW50VGlja2V0Q2FjaGUoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKGtkY1NlcnZlci5ncmVtbGluSG9zdG5hbWUpLmphYXNFbnRyeShURVNUQ09OU09MRV9OT1RfTE9HR0VEX0lOKQotICAgICAgICAgICAgICAgIC5wcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiVGhpcyBzaG91bGQgbm90IHN1Y2NlZWQgYXMgdGhlIGNsaWVudCBjb25maWcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHRpY2tldCBjYWNoZSIpOwotICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhMb2dpbkV4Y2VwdGlvbi5jbGFzcywgcm9vdC5nZXRDbGFzcygpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdpdGhOb25leGlzdGVudFNlcnZlclByaW5jaXBhbCgpIHsKLSAgICAgICAgYXNzZXJ0RmFpbGVkTG9naW4oKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxXaXRoRW1wdHlTZXJ2ZXJLZXl0YWIoKSB7Ci0gICAgICAgIGFzc2VydEZhaWxlZExvZ2luKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsV2l0aFdyb25nU2VydmVyS2V5dGFiKCkgewotICAgICAgICBhc3NlcnRGYWlsZWRMb2dpbigpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aGVudGljYXRlV2l0aFFvcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgb2xkUW9wID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZheC5zZWN1cml0eS5zYXNsLnFvcCIsICIiKTsKLSAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJqYXZheC5zZWN1cml0eS5zYXNsLnFvcCIsICJhdXRoLWNvbmYiKTsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuamFhc0VudHJ5KFRFU1RDT05TT0xFKQotICAgICAgICAgICAgICAgIC5wcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoIjErMiIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY2xpZW50LnN1Ym1pdCgiMSszIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiamF2YXguc2VjdXJpdHkuc2FzbC5xb3AiLCBvbGRRb3ApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBdXRoZW50aWNhdGVXaXRoU3NsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKGtkY1NlcnZlci5ncmVtbGluSG9zdG5hbWUpLmphYXNFbnRyeShURVNUQ09OU09MRSkuZW5hYmxlU3NsKHRydWUpLnNzbFNraXBDZXJ0VmFsaWRhdGlvbih0cnVlKQotICAgICAgICAgICAgICAgIC5wcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgYXNzZXJ0Q29ubmVjdGlvbihjbHVzdGVyLCBjbGllbnQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aGVudGljYXRlV2l0aFNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nR3JhcGhCaW5hcnlWMSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRBdXRoVmlhVG9TdHJpbmdXaXRoU3BlY2lmaWVkU2VyaWFsaXplcihuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFzc2VydEF1dGhWaWFUb1N0cmluZ1dpdGhTcGVjaWZpZWRTZXJpYWxpemVyKGZpbmFsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgY29uZmlnLnB1dCgic2VyaWFsaXplUmVzdWx0VG9TdHJpbmciLCB0cnVlKTsKLSAgICAgICAgc2VyaWFsaXplci5jb25maWd1cmUoY29uZmlnLCBudWxsKTsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoa2RjU2VydmVyLmdyZW1saW5Ib3N0bmFtZSkuamFhc0VudHJ5KFRFU1RDT05TT0xFKQotICAgICAgICAgICAgICAgIC5wcm90b2NvbChrZGNTZXJ2ZXIuc2VydmVyUHJpbmNpcGFsTmFtZSkuc2VyaWFsaXplcihzZXJpYWxpemVyKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICBhc3NlcnRDb25uZWN0aW9uKGNsdXN0ZXIsIGNsaWVudCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb25uZWN0aW9uKGZpbmFsIENsdXN0ZXIgY2x1c3RlciwgZmluYWwgQ2xpZW50IGNsaWVudCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBFeGVjdXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgY2xpZW50LnN1Ym1pdCgiMSsyIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBjbGllbnQuc3VibWl0KCIxKzMiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJpZXMgdG8gZm9yY2UgdGhlIGxvZ2dlciB0byBmbHVzaCBmdWxseSBvciBhdCBsZWFzdCB3YWl0IHVudGlsIGl0IGRvZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydEZhaWxlZExvZ2luKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZChrZGNTZXJ2ZXIuZ3JlbWxpbkhvc3RuYW1lKS5qYWFzRW50cnkoVEVTVENPTlNPTEUpCi0gICAgICAgICAgICAgICAgLnByb3RvY29sKGtkY1NlcnZlci5zZXJ2ZXJQcmluY2lwYWxOYW1lKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCk7Ci0gICAgICAgICAgICBmYWlsKCJUaGUga2VyYmVyb3MgY29uZmlnIGlzIGEgYnVzdCBzbyB0aGlzIHJlcXVlc3Qgc2hvdWxkIGZhaWwiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgZXguZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SLCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkF1dGhlbnRpY2F0b3IgaXMgbm90IHJlYWR5IHRvIGhhbmRsZSByZXF1ZXN0cyIsIHJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJBdXRoekludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckF1dGh6SW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IGU2YzdlODAuLmQ2OWZmNDQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckF1dGh6SW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckF1dGh6SW50ZWdyYXRlVGVzdC5qYXZhCkBAIC0xOSw0NSArMTksMzcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7CiAKIGltcG9ydCBubC5hbHRpbmRhZy5sb2cuTG9nQ2FwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5Db25zdHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkNsb3NlYWJsZUh0dHBSZXNwb25zZTsKLWltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuSHR0cEdldDsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuSHR0cFBvc3Q7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmVudGl0eS5TdHJpbmdFbnRpdHk7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuY2xpZW50LkNsb3NlYWJsZUh0dHBDbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuY2xpZW50Lkh0dHBDbGllbnRzOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC51dGlsLkVudGl0eVV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5SZXNwb25zZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BbGxvd0FsbEF1dGhlbnRpY2F0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5TaW1wbGVBdXRoZW50aWNhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGh6LkFsbG93TGlzdEF1dGhvcml6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlNhc2xBbmRIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5IdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2VuczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAotaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwogaW1wb3J0IGphdmEudXRpbC5CYXNlNjQ7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGlvbkV4Y2VwdGlvbjsKIAotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuYXV0aC5BdXRoLmJhc2ljOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwogCiAvKioKICAqIFJ1biB3aXRoOgpAQCAtNjYsNyArNTgsNiBAQAogICogQGF1dGhvciBNYXJjIGRlIExpZ25pZQogICovCiBwdWJsaWMgY2xhc3MgR3JlbWxpblNlcnZlckF1dGh6SW50ZWdyYXRlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9uZyBERUZBVUxUX0VWQUxVQVRJT05fVElNRU9VVCA9IDIwMDBMOwogICAgIHByaXZhdGUgc3RhdGljIExvZ0NhcHRvciBsb2dDYXB0b3I7CiAKICAgICBwcml2YXRlIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CkBAIC0xMTIsNDEgKzEwMywxOSBAQAogICAgICAgICBzZXR0aW5ncy5hdXRoZW50aWNhdGlvbiA9IGF1dGhTZXR0aW5nczsKICAgICAgICAgc2V0dGluZ3MuYXV0aG9yaXphdGlvbiA9IGF1dGh6U2V0dGluZ3M7CiAgICAgICAgIHNldHRpbmdzLmVuYWJsZUF1ZGl0TG9nID0gdHJ1ZTsKLSAgICAgICAgc2V0dGluZ3MuZXZhbHVhdGlvblRpbWVvdXQgPSBERUZBVUxUX0VWQUxVQVRJT05fVElNRU9VVDsKIAogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZU9mVGVzdCA9IG5hbWUuZ2V0TWV0aG9kTmFtZSgpOwotICAgICAgICBzd2l0Y2ggKG5hbWVPZlRlc3QpIHsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEZhaWxCeXRlY29kZVJlcXVlc3RXaXRoQWxsb3dBbGxBdXRoZW50aWNhdG9yIjoKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEZhaWxTdHJpbmdSZXF1ZXN0V2l0aEFsbG93QWxsQXV0aGVudGljYXRvciI6Ci0gICAgICAgICAgICAgICAgYXV0aFNldHRpbmdzLmF1dGhlbnRpY2F0b3IgPSBBbGxvd0FsbEF1dGhlbnRpY2F0b3IuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkQXV0aG9yaXplU2Vzc2lvbnNXaXRoV2Vic29ja2V0VHJhbnNwb3J0IjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5jaGFubmVsaXplciA9IFdlYlNvY2tldENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEF1dGhvcml6ZVdpdGhIdHRwVHJhbnNwb3J0IjoKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEZhaWxBdXRob3JpemVXaXRoSHR0cFRyYW5zcG9ydCI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRLZWVwQXV0aG9yaXppbmdXaXRoSHR0cFRyYW5zcG9ydCI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuY2hhbm5lbGl6ZXIgPSBIdHRwQ2hhbm5lbGl6ZXIuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEF1dGhvcml6ZVdpdGhBbGxvd0FsbEF1dGhlbnRpY2F0b3JBbmRIdHRwVHJhbnNwb3J0IjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5jaGFubmVsaXplciA9IEh0dHBDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgYXV0aFNldHRpbmdzLmF1dGhlbnRpY2F0b3IgPSBBbGxvd0FsbEF1dGhlbnRpY2F0b3IuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBhdXRoU2V0dGluZ3MuY29uZmlnID0gbnVsbDsKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZUh0dHAgPSBPYmplY3RzLnJlcXVpcmVOb25OdWxsKGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZSh5YW1sSHR0cE5hbWUpKS5nZXRGaWxlKCk7Ci0gICAgICAgICAgICAgICAgYXV0aHpTZXR0aW5ncy5jb25maWcucHV0KEFsbG93TGlzdEF1dGhvcml6ZXIuS0VZX0FVVEhPUklaQVRJT05fQUxMT1dMSVNULCBmaWxlSHR0cCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChuYW1lT2ZUZXN0LmVxdWFscygic2hvdWxkQXV0aG9yaXplV2l0aEh0dHBUcmFuc3BvcnQiKSkgeworICAgICAgICAgICAgYXV0aFNldHRpbmdzLmF1dGhlbnRpY2F0aW9uSGFuZGxlciA9IEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcy5nZXROYW1lKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNldHRpbmdzOwogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aG9yaXplQnl0ZWNvZGVSZXF1ZXN0KCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsKCkud2l0aFJlbW90ZSgKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBdXRob3JpemVHcmVtbGluTGFuZ1JlcXVlc3QoKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuYXV0aChiYXNpYygibWFya28iLCAicmFpbmJvdy1kYXNoIikpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbCgpLndpdGgoCiAgICAgICAgICAgICAgICAgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCAiZ21vZGVybiIpKTsKLQogICAgICAgICB0cnkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xNTUsMTg0ICsxMjQsMTcgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhvcml6ZUJ5dGVjb2RlUmVxdWVzdFdpdGhMYW1iZGEoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlZGVudGlhbHMoIm1hcmtvIiwgInJhaW5ib3ctZGFzaCIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUoCi0gICAgICAgICAgICAgICAgRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCAiZ2NsYXNzaWMiKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIChsb25nKSBnLlYoKS5tYXAoTGFtYmRhLmZ1bmN0aW9uKCJpdC5nZXQoKS52YWx1ZSgnbmFtZScpIikpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbEJ5dGVjb2RlUmVxdWVzdFdpdGhMYW1iZGEoKSB0aHJvd3MgRXhjZXB0aW9uewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsKCkud2l0aFJlbW90ZSgKLSAgICAgICAgICAgICAgICBEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIsICJnbW9kZXJuIikpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBnLlYoKS5tYXAoTGFtYmRhLmZ1bmN0aW9uKCJpdC5nZXQoKS52YWx1ZSgnbmFtZScpIikpLmNvdW50KCkubmV4dCgpOwotICAgICAgICAgICAgZmFpbCgiQXV0aG9yaXphdGlvbiBmb3IgYnl0ZWNvZGUgcmVxdWVzdCB3aXRoIGxhbWJkYSBzaG91bGQgZmFpbCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlRXhjZXB0aW9uIHJlID0gKFJlc3BvbnNlRXhjZXB0aW9uKSBleC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5VTkFVVEhPUklaRUQsIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiRmFpbGVkIHRvIGF1dGhvcml6ZTogVXNlciBub3QgYXV0aG9yaXplZCBmb3IgYnl0ZWNvZGUgcmVxdWVzdHMgb24gW2dtb2Rlcm5dIHVzaW5nIGxhbWJkYXMuIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgICAgLy8gd2FpdCBmb3IgbG9nZ2VyIHRvIGZsdXNoIC0gKGRvbid0IHRoaW5rIHRoZXJlIGlzIGEgd2F5IHRvIGRldGVjdCB0aGlzKQotICAgICAgICAgICAgc3RvcFNlcnZlcigpOwotICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotCi0gICAgICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICJVc2VyIHN0ZXBoZW4gd2l0aCBhZGRyZXNzIC4rPyBhdHRlbXB0ZWQgYW4gdW5hdXRob3JpemVkIHJlcXVlc3QgZm9yIGJ5dGVjb2RlIG9wZXJhdGlvbjogIiArCi0gICAgICAgICAgICAgICAgICAgICJcXFtcXFtdLCBcXFtWXFwoXFwpLCBtYXBcXChsYW1iZGFcXFtpdC5nZXRcXChcXCkudmFsdWVcXCgnbmFtZSdcXCldXFwpLCBjb3VudFxcKFxcKV1dIikpLCBpcyh0cnVlKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEtlZXBBdXRob3JpemluZ0J5dGVjb2RlUmVxdWVzdHMoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlZGVudGlhbHMoInN0ZXBoZW4iLCAicGFzc3dvcmQiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IEFub255bW91c1RyYXZlcnNhbFNvdXJjZS50cmF2ZXJzYWwoKS53aXRoUmVtb3RlKAotICAgICAgICAgICAgICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlciwgImdtb2Rlcm4iKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBnLlYoKS5tYXAoTGFtYmRhLmZ1bmN0aW9uKCJpdC5nZXQoKS52YWx1ZSgnbmFtZScpIikpLmNvdW50KCkubmV4dCgpOwotICAgICAgICAgICAgICAgIGZhaWwoIkF1dGhvcml6YXRpb24gZm9yIGJ5dGVjb2RlIHJlcXVlc3Qgd2l0aCBsYW1iZGEgc2hvdWxkIGZhaWwiKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlRXhjZXB0aW9uIHJlID0gKFJlc3BvbnNlRXhjZXB0aW9uKSBleC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuVU5BVVRIT1JJWkVELCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsZWQgdG8gYXV0aG9yaXplOiBVc2VyIG5vdCBhdXRob3JpemVkIGZvciBieXRlY29kZSByZXF1ZXN0cyBvbiBbZ21vZGVybl0gdXNpbmcgbGFtYmRhcy4iLCByZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhvcml6ZVN0cmluZ1JlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVkZW50aWFscygibWFya28iLCAicmFpbmJvdy1kYXNoIikuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuYXV0aChiYXNpYygibWFya28iLCAicmFpbmJvdy1kYXNoIikpLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNsaWVudC5zdWJtaXQoImdjbGFzc2ljLlYoKS5jb3VudCgpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBjbGllbnQuc3VibWl0KCJnbW9kZXJuLlYoKS5tYXB7aXQuZ2V0KCkudmFsdWUoJ25hbWUnKX0uY291bnQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxTdHJpbmdSZXF1ZXN0V2l0aEdyb292eVNjcmlwdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKyAgICAgICAgUmVxdWVzdE9wdGlvbnMgbW9kZXJuID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CisgICAgICAgIFJlcXVlc3RPcHRpb25zIGNsYXNzaWMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmFkZEcoImdjbGFzc2ljIikuY3JlYXRlKCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiQXV0aG9yaXphdGlvbiB3aXRob3V0IGF1dGhlbnRpY2F0aW9uIHNob3VsZCBmYWlsIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIGV4LmdldENhdXNlKCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlVOQVVUSE9SSVpFRCwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsZWQgdG8gYXV0aG9yaXplOiBVc2VyIG5vdCBhdXRob3JpemVkIGZvciBzdHJpbmctYmFzZWQgcmVxdWVzdHMuIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLQotICAgICAgICAgICAgLy8gd2FpdCBmb3IgbG9nZ2VyIHRvIGZsdXNoIC0gKGRvbid0IHRoaW5rIHRoZXJlIGlzIGEgd2F5IHRvIGRldGVjdCB0aGlzKQotICAgICAgICAgICAgc3RvcFNlcnZlcigpOwotICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotCi0gICAgICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgICAgICJVc2VyIHN0ZXBoZW4gd2l0aCBhZGRyZXNzIC4rPyBhdHRlbXB0ZWQgYW4gdW5hdXRob3JpemVkIHJlcXVlc3QgZm9yIGV2YWwgb3BlcmF0aW9uOiAxXFwrMSIpKSwgaXModHJ1ZSkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsU3RyaW5nUmVxdWVzdFdpdGhHcmVtbGluVHJhdmVyc2FsKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZ21vZGVybi5WKCkuY291bnQoKSIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiQXV0aG9yaXphdGlvbiB3aXRob3V0IGF1dGhlbnRpY2F0aW9uIHNob3VsZCBmYWlsIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIGV4LmdldENhdXNlKCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlVOQVVUSE9SSVpFRCwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsZWQgdG8gYXV0aG9yaXplOiBVc2VyIG5vdCBhdXRob3JpemVkIGZvciBzdHJpbmctYmFzZWQgcmVxdWVzdHMuIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aG9yaXplU2Vzc2lvbmVkU3RyaW5nUmVxdWVzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJtYXJrbyIsICJyYWluYm93LWRhc2giKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgic2Vzc2lvbjEiKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImEgPSA0OyAxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwLCBjbGllbnQuc3VibWl0KCJnY2xhc3NpYy5WKCkuY291bnQoKS5uZXh0KCkgKyBhIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBjbGllbnQuc3VibWl0KCJnbW9kZXJuLlYoKS5tYXB7aXQuZ2V0KCkudmFsdWUoJ25hbWUnKX0uY291bnQoKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBdXRob3JpemVTZXNzaW9uc1dpdGhXZWJzb2NrZXRUcmFuc3BvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVkZW50aWFscygibWFya28iLCAicmFpbmJvdy1kYXNoIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoInNlc3Npb24xIik7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJhID0gNDsgMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxMCwgY2xpZW50LnN1Ym1pdCgiZ2NsYXNzaWMuVigpLmNvdW50KCkubmV4dCgpICsgYSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY2xpZW50LnN1Ym1pdCgiZ21vZGVybi5WKCkubWFwe2l0LmdldCgpLnZhbHVlKCduYW1lJyl9LmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0gICAgICAgIAotICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgIkVuY291bnRlcmVkIGFuIGVycm9yIHRyeWluZyB0byBjbG9zZSBjb25uZWN0aW9uIG9uIHNlc3Npb24xIC4qIikpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbEJ5dGVjb2RlUmVxdWVzdFdpdGhBbGxvd0FsbEF1dGhlbnRpY2F0b3IoKSB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbCgpLndpdGhSZW1vdGUoCi0gICAgICAgICAgICAgICAgICAgIERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlciwgImdjbGFzc2ljIikpOwotICAgICAgICAgICAgZy5WKCkuY291bnQoKS5uZXh0KCk7Ci0gICAgICAgICAgICBmYWlsKCJBdXRob3JpemF0aW9uIHdpdGhvdXQgYXV0aGVudGljYXRpb24gc2hvdWxkIGZhaWwiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgZXguZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuVU5BVVRIT1JJWkVELCByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkZhaWxlZCB0byBhdXRob3JpemU6IFVzZXIgbm90IGF1dGhvcml6ZWQgZm9yIGJ5dGVjb2RlIHJlcXVlc3RzIG9uIFtnY2xhc3NpY10uIiwgcmUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFN0cmluZ1JlcXVlc3RXaXRoQWxsb3dBbGxBdXRoZW50aWNhdG9yKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiQXV0aG9yaXphdGlvbiB3aXRob3V0IGF1dGhlbnRpY2F0aW9uIHNob3VsZCBmYWlsIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIGV4LmdldENhdXNlKCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlVOQVVUSE9SSVpFRCwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJGYWlsZWQgdG8gYXV0aG9yaXplOiBVc2VyIG5vdCBhdXRob3JpemVkIGZvciBzdHJpbmctYmFzZWQgcmVxdWVzdHMuIiwgcmUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY2xpZW50LnN1Ym1pdCgiZy5WKCkuY291bnQoKSIsIGNsYXNzaWMpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY2xpZW50LnN1Ym1pdCgiZy5WKCkudmFsdWVzKCduYW1lJykuY291bnQoKSIsIG1vZGVybikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMzQxLDk3ICsxNDMsMTYgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhvcml6ZVdpdGhIdHRwVHJhbnNwb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj0yLTEiKSk7Ci0gICAgICAgIGh0dHBnZXQuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGVyLmVuY29kZVRvU3RyaW5nKCJtYXJrbzpyYWluYm93LWRhc2giLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cFBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwUG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSlcIn0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cFBvc3QuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGVyLmVuY29kZVRvU3RyaW5nKCJtYXJrbzpyYWluYm93LWRhc2giLmdldEJ5dGVzKCkpKTsKIAotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwZ2V0KSkgeworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwUG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwogICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsQXV0aG9yaXplV2l0aEh0dHBUcmFuc3BvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPTMtMSIpKTsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kZXIuZW5jb2RlVG9TdHJpbmcoInN0ZXBoZW46cGFzc3dvcmQiLmdldEJ5dGVzKCkpKTsKLQotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwZ2V0KSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gd2FpdCBmb3IgbG9nZ2VyIHRvIGZsdXNoIC0gKGRvbid0IHRoaW5rIHRoZXJlIGlzIGEgd2F5IHRvIGRldGVjdCB0aGlzKQotICAgICAgICBzdG9wU2VydmVyKCk7Ci0gICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKLQotICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCkuc3RyZWFtKCkuYW55TWF0Y2gobSAtPiBtLm1hdGNoZXMoCi0gICAgICAgICAgICAgICAgIlVzZXIgc3RlcGhlbiB3aXRoIGFkZHJlc3MgLis/IGF0dGVtcHRlZCBhbiB1bmF1dGhvcml6ZWQgaHR0cCByZXF1ZXN0OiAzLTEiKSksIGlzKHRydWUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEtlZXBBdXRob3JpemluZ1dpdGhIdHRwVHJhbnNwb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEh0dHBHZXQgaHR0cGdldDsKLSAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotCi0gICAgICAgIGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPTQtMSIpKTsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kZXIuZW5jb2RlVG9TdHJpbmcoIm1hcmtvOnJhaW5ib3ctZGFzaCIuZ2V0Qnl0ZXMoKSkpOwotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwZ2V0KSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7Ci0gICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj01LTEiKSk7Ci0gICAgICAgIGh0dHBnZXQuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGVyLmVuY29kZVRvU3RyaW5nKCJzdGVwaGVuOnBhc3N3b3JkIi5nZXRCeXRlcygpKSk7Ci0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPTYtMSIpKTsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kZXIuZW5jb2RlVG9TdHJpbmcoIm1hcmtvOnJhaW5ib3ctZGFzaCIuZ2V0Qnl0ZXMoKSkpOwotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwZ2V0KSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7Ci0gICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhvcml6ZVdpdGhBbGxvd0FsbEF1dGhlbnRpY2F0b3JBbmRIdHRwVHJhbnNwb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj03LTEiKSk7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXNwZWN0VGltZW91dFdpdGhBdXRoKCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWRlbnRpYWxzKCJzdGVwaGVuIiwgInBhc3N3b3JkIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBBbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsKCkud2l0aFJlbW90ZSgKLSAgICAgICAgICAgICAgICBEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIsICJnbW9kZXJuIikpOwotICAgICAgICBmaW5hbCBJbnN0YW50IGluc3RhbnQgPSBJbnN0YW50Lm5vdygpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZy53aXRoKCJldmFsdWF0aW9uVGltZW91dCIsIERFRkFVTFRfRVZBTFVBVElPTl9USU1FT1VUIC8gMjApLgotICAgICAgICAgICAgICAgICAgICBWKCkuCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdChfXy5ib3RoKCkpLgotICAgICAgICAgICAgICAgICAgICB1bnRpbChfXy5jb3VudCgpLmlzKDApKS4KLSAgICAgICAgICAgICAgICAgICAgdG9MaXN0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIENvbXBsZXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoSW5zdGFudC5ub3coKS50b0Vwb2NoTWlsbGkoKSAtIGluc3RhbnQudG9FcG9jaE1pbGxpKCkgPCBERUZBVUxUX0VWQUxVQVRJT05fVElNRU9VVCAvIDIpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckh0dHBJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJIdHRwSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IGM5M2FiZmEuLjdjZTAxZWEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckh0dHBJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVySHR0cEludGVncmF0ZVRlc3QuamF2YQpAQCAtMjAsNTYgKzIwLDc0IEBACiAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkNvbnN0czsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSGVhZGVyOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwRW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwSGVhZGVyczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoLlNpbXBsZUF1dGhlbnRpY2F0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5odHRwLkNvbnN0czsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFZlcnNpb247CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5jb25maWcuUmVxdWVzdENvbmZpZzsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuQ2xvc2VhYmxlSHR0cFJlc3BvbnNlOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwR2V0OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwUG9zdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY29ubi5Fb2ZTZW5zb3JJbnB1dFN0cmVhbTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LkJ5dGVBcnJheUVudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5Lkh0dHBFbnRpdHlXcmFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuU3RyaW5nRW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5DbG9zZWFibGVIdHRwQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5pbXBsLmNsaWVudC5IdHRwQ2xpZW50czsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5pby5DaHVua2VkSW5wdXRTdHJlYW07CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLnV0aWwuRW50aXR5VXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5TYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguU2ltcGxlQXV0aGVudGljYXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLkh0dHBDaGFubmVsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKK2ltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCitpbXBvcnQgamF2YXguc2NyaXB0LlNpbXBsZUJpbmRpbmdzOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKK2ltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWU7CiBpbXBvcnQgamF2YS51dGlsLkJhc2U2NDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5VVUlEOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cFJlcXVlc3RJZEhhbmRsZXIuUkVRVUVTVF9JRF9IRUFERVJfTkFNRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVM7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19BTEw7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlM7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuVElNRU9VVF9NUzsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJUb2tlbnMuVE9LRU5fREFUQTsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5TdHJpbmdDb250YWlucy5jb250YWluc1N0cmluZzsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nUmVndWxhckV4cHJlc3Npb24ubWF0Y2hlc1JlZ2V4OwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5TdHJpbmdTdGFydHNXaXRoLnN0YXJ0c1dpdGg7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAogLyoqCiAgKiBJbnRlZ3JhdGlvbiB0ZXN0cyBmb3Igc2VydmVyLXNpZGUgc2V0dGluZ3MgYW5kIHByb2Nlc3NpbmcuCkBAIC05MCw3ICsxMDgsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZU9mVGVzdCA9IG5hbWUuZ2V0TWV0aG9kTmFtZSgpOwogICAgICAgICBzd2l0Y2ggKG5hbWVPZlRlc3QpIHsKICAgICAgICAgICAgIGNhc2UgInNob3VsZDQxM09uUG9zdFdpdGhSZXN1bHRUb29MYXJnZSI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MubWF4Q29udGVudExlbmd0aCA9IDMxOworICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFJlcXVlc3RDb250ZW50TGVuZ3RoID0gMzE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RUcmFuc2FjdGlvbmFsR3JhcGgiOgogICAgICAgICAgICAgICAgIHVzZVRpbmtlclRyYW5zYWN0aW9uR3JhcGgoc2V0dGluZ3MpOwpAQCAtOTksNDYgKzExNywxMiBAQAogICAgICAgICAgICAgICAgIHVzZVRpbmtlclRyYW5zYWN0aW9uR3JhcGgoc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgIHNldHRpbmdzLnN0cmljdFRyYW5zYWN0aW9uTWFuYWdlbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RXaXRoR3JhcGhTT04xZDBBY2NlcHRIZWFkZXJEZWZhdWx0UmVzdWx0VG9Kc29uIjoKKyAgICAgICAgICAgIGNhc2UgInNob3VsZDIwME9uUE9TVFdpdGhHcmFwaFNPTjRkMEFjY2VwdEhlYWRlckRlZmF1bHRSZXN1bHRUb0pzb24iOgogICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzIHNlcmlhbGl6ZXJTZXR0aW5nc1YxID0gbmV3IFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJTZXR0aW5nc1YxLmNsYXNzTmFtZSA9IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmFkZChzZXJpYWxpemVyU2V0dGluZ3NWMSk7CisgICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzIHNlcmlhbGl6ZXJTZXR0aW5nc1Y0ID0gbmV3IFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncygpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJTZXR0aW5nc1Y0LmNsYXNzTmFtZSA9IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjQuY2xhc3MuZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmFkZChzZXJpYWxpemVyU2V0dGluZ3NWNCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RXaXRoR3JhcGhTT04yZDBBY2NlcHRIZWFkZXJEZWZhdWx0UmVzdWx0VG9Kc29uIjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXJpYWxpemVycy5jbGVhcigpOwotICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncyBzZXJpYWxpemVyU2V0dGluZ3NWMiA9IG5ldyBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVyU2V0dGluZ3NWMi5jbGFzc05hbWUgPSBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmFkZChzZXJpYWxpemVyU2V0dGluZ3NWMik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RXaXRoR3JhcGhTT04zZDBBY2NlcHRIZWFkZXJEZWZhdWx0UmVzdWx0VG9Kc29uIjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXJpYWxpemVycy5jbGVhcigpOwotICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncyBzZXJpYWxpemVyU2V0dGluZ3NWMyA9IG5ldyBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVyU2V0dGluZ3NWMy5jbGFzc05hbWUgPSBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmFkZChzZXJpYWxpemVyU2V0dGluZ3NWMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RXaXRoQW55R3JhcGhTT05BY2NlcHRIZWFkZXJEZWZhdWx0UmVzdWx0VG9Kc29uIjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXJpYWxpemVycy5jbGVhcigpOwotICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncyBzZXJpYWxpemVyU2V0dGluZ3NVbnR5cGVkVjEgPSBuZXcgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgc2VyaWFsaXplclNldHRpbmdzVW50eXBlZFYxLmNsYXNzTmFtZSA9IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmFkZChzZXJpYWxpemVyU2V0dGluZ3NVbnR5cGVkVjEpOwotICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncyBzZXJpYWxpemVyU2V0dGluZ3NUeXBlZFYxID0gbmV3IFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJTZXR0aW5nc1R5cGVkVjEuY2xhc3NOYW1lID0gR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXJpYWxpemVycy5hZGQoc2VyaWFsaXplclNldHRpbmdzVHlwZWRWMSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzIHNlcmlhbGl6ZXJTZXR0aW5nc1VudHlwZWRWMiA9IG5ldyBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVyU2V0dGluZ3NVbnR5cGVkVjIuY2xhc3NOYW1lID0gR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3Muc2VyaWFsaXplcnMuYWRkKHNlcmlhbGl6ZXJTZXR0aW5nc1VudHlwZWRWMik7Ci0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzIHNlcmlhbGl6ZXJTZXR0aW5nc1R5cGVkVjIgPSBuZXcgU2V0dGluZ3MuU2VyaWFsaXplclNldHRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgc2VyaWFsaXplclNldHRpbmdzVHlwZWRWMi5jbGFzc05hbWUgPSBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnNlcmlhbGl6ZXJzLmFkZChzZXJpYWxpemVyU2V0dGluZ3NUeXBlZFYyKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3Mgc2VyaWFsaXplclNldHRpbmdzVW50eXBlZFYzID0gbmV3IFNldHRpbmdzLlNlcmlhbGl6ZXJTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJTZXR0aW5nc1VudHlwZWRWMy5jbGFzc05hbWUgPSBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYzLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXJpYWxpemVycy5hZGQoc2VyaWFsaXplclNldHRpbmdzVW50eXBlZFYzKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3Mgc2VyaWFsaXplclNldHRpbmdzVHlwZWRWMyA9IG5ldyBTZXR0aW5ncy5TZXJpYWxpemVyU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVyU2V0dGluZ3NUeXBlZFYzLmNsYXNzTmFtZSA9IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMy5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3Muc2VyaWFsaXplcnMuYWRkKHNlcmlhbGl6ZXJTZXR0aW5nc1R5cGVkVjMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkNDAxT25HRVRXaXRoTm9BdXRob3JpemF0aW9uSGVhZGVyIjoKICAgICAgICAgICAgIGNhc2UgInNob3VsZDQwMU9uUE9TVFdpdGhOb0F1dGhvcml6YXRpb25IZWFkZXIiOgogICAgICAgICAgICAgY2FzZSAic2hvdWxkNDAxT25HRVRXaXRoQmFkQXV0aG9yaXphdGlvbkhlYWRlciI6CiAgICAgICAgICAgICBjYXNlICJzaG91bGQ0MDFPblBPU1RXaXRoQmFkQXV0aG9yaXphdGlvbkhlYWRlciI6CkBAIC0xNDYsMTcgKzEzMCwyNSBAQAogICAgICAgICAgICAgY2FzZSAic2hvdWxkNDAxT25QT1NUV2l0aEJhZEVuY29kZWRBdXRob3JpemF0aW9uSGVhZGVyIjoKICAgICAgICAgICAgIGNhc2UgInNob3VsZDQwMU9uR0VUV2l0aEludmFsaWRQYXNzd29yZEF1dGhvcml6YXRpb25IZWFkZXIiOgogICAgICAgICAgICAgY2FzZSAic2hvdWxkNDAxT25QT1NUV2l0aEludmFsaWRQYXNzd29yZEF1dGhvcml6YXRpb25IZWFkZXIiOgotICAgICAgICAgICAgY2FzZSAic2hvdWxkMjAwT25HRVRXaXRoQXV0aG9yaXphdGlvbkhlYWRlciI6CiAgICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RXaXRoQXV0aG9yaXphdGlvbkhlYWRlckV4cGxpY2l0SGFuZGxlclNldHRpbmciOgogICAgICAgICAgICAgICAgIGNvbmZpZ3VyZUZvckF1dGhlbnRpY2F0aW9uV2l0aEhhbmRsZXJDbGFzcyhzZXR0aW5ncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJzaG91bGQyMDBPblBPU1RXaXRoQXV0aG9yaXphdGlvbkhlYWRlciI6CiAgICAgICAgICAgICAgICAgY29uZmlndXJlRm9yQXV0aGVudGljYXRpb24oc2V0dGluZ3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkNTAwT25HRVRXaXRoRXZhbHVhdGlvblRpbWVvdXQiOgorICAgICAgICAgICAgY2FzZSAic2hvdWxkNTAwT25QT1NUV2l0aEV2YWx1YXRpb25UaW1lb3V0IjoKICAgICAgICAgICAgICAgICBzZXR0aW5ncy5ldmFsdWF0aW9uVGltZW91dCA9IDUwMDA7CiAgICAgICAgICAgICAgICAgc2V0dGluZ3MuZ3JlbWxpblBvb2wgPSAxOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAic2hvdWxkMjAwT25QT1NUV2l0aENodW5rZWRSZXNwb25zZSI6CisgICAgICAgICAgICBjYXNlICJzaG91bGRIYW5kbGVFcnJvcnNJbkZpcnN0Q2h1bmtQT1NUV2l0aENodW5rZWRSZXNwb25zZSI6CisgICAgICAgICAgICBjYXNlICJzaG91bGRIYW5kbGVFcnJvcnNJbkZpcnN0Q2h1bmtQT1NUV2l0aENodW5rZWRSZXNwb25zZVVzaW5nVGV4dFBsYWluIjoKKyAgICAgICAgICAgIGNhc2UgInNob3VsZEhhbmRsZUVycm9yc05vdEluRmlyc3RDaHVua1BPU1RXaXRoQ2h1bmtlZFJlc3BvbnNlIjoKKyAgICAgICAgICAgIGNhc2UgInNob3VsZEhhbmRsZUVycm9yc05vdEluRmlyc3RDaHVua1BPU1RXaXRoQ2h1bmtlZFJlc3BvbnNlVXNpbmdUZXh0UGxhaW4iOgorICAgICAgICAgICAgY2FzZSAic2hvdWxkMjAwT25QT1NUV2l0aENodW5rZWRSZXNwb25zZUdyYXBoQmluYXJ5IjoKKyAgICAgICAgICAgIGNhc2UgInNob3VsZDIwME9uUE9TVFdpdGhDaHVua2VkUmVzcG9uc2VVc2luZ1RleHRQbGFpbiI6CisgICAgICAgICAgICAgICAgc2V0dGluZ3MucmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplID0gMTY7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNldHRpbmdzOwogICAgIH0KQEAgLTE2NCw3ICsxNTYsNyBAQAogICAgIHByaXZhdGUgdm9pZCBjb25maWd1cmVGb3JBdXRoZW50aWNhdGlvbihmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewogICAgICAgICBmaW5hbCBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzIGF1dGhTZXR0aW5ncyA9IG5ldyBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzKCk7CiAgICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdG9yID0gU2ltcGxlQXV0aGVudGljYXRvci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgYXV0aFNldHRpbmdzLmF1dGhlbnRpY2F0aW9uSGFuZGxlciA9IEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcy5nZXROYW1lKCk7CiAKICAgICAgICAgLy8gdXNlIGEgY3JlZGVudGlhbHMgZ3JhcGggd2l0aCB0d28gdXNlcnMgaW4gaXQ6IHN0ZXBoZW4vcGFzc3dvcmQgYW5kIG1hcmtvL3JhaW5ib3ctZGFzaAogICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYXV0aENvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKQEAgLTE3OSw3ICsxNzEsNyBAQAogICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRvciA9IFNpbXBsZUF1dGhlbnRpY2F0b3IuY2xhc3MuZ2V0TmFtZSgpOwogCiAgICAgICAgIC8vQWRkIGJhc2ljIGF1dGggaGFuZGxlciB0byBtYWtlIHN1cmUgdGhlIHJlZmxlY3Rpb24gY29kZSBwYXRoIHdvcmtzLgotICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRpb25IYW5kbGVyID0gU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcy5nZXROYW1lKCk7CisgICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXIuY2xhc3MuZ2V0TmFtZSgpOwogCiAgICAgICAgIC8vIHVzZSBhIGNyZWRlbnRpYWxzIGdyYXBoIHdpdGggdHdvIHVzZXJzIGluIGl0OiBzdGVwaGVuL3Bhc3N3b3JkIGFuZCBtYXJrby9yYWluYm93LWRhc2gKICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGF1dGhDb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7CkBAIC0xOTUsNyArMTg3LDcgQEAKICAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwogICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICAgICAgIGZpbmFsIFN0cmluZyBiaWdQb3N0ID0gUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tKDMyKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIiIrIGJpZ1Bvc3QgKyAiXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6XCIxMFwifX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIiIrIFN0cmluZy5mb3JtYXQoImcuaW5qZWN0KCclcycpIiwgYmlnUG9zdCkgKyAiXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6XCIxMFwifX0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MTMsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwpAQCAtMjAzLDEyICsxOTUsMTQgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDQwMU9uR0VUV2l0aE5vQXV0aG9yaXphdGlvbkhlYWRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHNob3VsZDQwNU9uR0VUUmVxdWVzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyAvZ3JlbWxpbiBlbmRwb2ludCBvbmx5IGFsbG93cyBQT1NUIHJlcXVlc3QgZm9yIG5vdyB1bnRpbCBHRVQgaXMgaW1wbGVtZW50ZWQgdG8gcmV0dXJuIHN0YXR1cwogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Mi0xIikpOworICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwNSwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmNvbnRhaW5zSGVhZGVyKFJFUVVFU1RfSURfSEVBREVSX05BTUUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjE3LDI5ICsyMTEsMTggQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjItMVwifSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSlcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGQ0MDBPblBPU1RXaXRoTm9uVVVJRFJlcXVlc3RJZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKLSAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMi0xXCIsIFwicmVxdWVzdElkXCI6XCJub25zZW5zZVwifSIsIENvbnN0cy5VVEZfOCkpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmNvbnRhaW5zSGVhZGVyKFJFUVVFU1RfSURfSEVBREVSX05BTUUpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkNDAxT25HRVRXaXRoQmFkQXV0aG9yaXphdGlvbkhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Mi0xIikpOworICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWcuaW5qZWN0KDEpIikpOwogICAgICAgICBodHRwZ2V0LmFkZEhlYWRlcigiQXV0aG9yaXphdGlvbiIsICJub3QtYmFzZS02NC1lbmNvZGVkIik7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKQEAgLTI1Myw3ICsyMzYsNyBAQAogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIm5vdC1iYXNlLTY0LWVuY29kZWQiKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjItMVwifSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSlcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDEsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwpAQCAtMjYzLDcgKzI0Niw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGQ0MDFPbkdFVFdpdGhCYWRFbmNvZGVkQXV0aG9yaXphdGlvbkhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Mi0xIikpOworICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWcuaW5qZWN0KDEpIikpOwogICAgICAgICBodHRwZ2V0LmFkZEhlYWRlcigiQXV0aG9yaXphdGlvbiIsICJCYXNpYzogbm90LWJhc2UtNjQtZW5jb2RlZCIpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7CkBAIC0yNzcsNyArMjYwLDcgQEAKICAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwogICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQXV0aG9yaXphdGlvbiIsICJCYXNpYzogbm90LWJhc2UtNjQtZW5jb2RlZCIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMi0xXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdCgxKVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CkBAIC0yODcsNyArMjcwLDcgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZDQwMU9uR0VUV2l0aEludmFsaWRQYXNzd29yZEF1dGhvcml6YXRpb25IZWFkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPTItMSIpKTsKKyAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj1nLmluamVjdCgxKSIpKTsKICAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGVuY29kZXIuZW5jb2RlVG9TdHJpbmcoInN0ZXBoZW46bm90LW15LXBhc3N3b3JkIi5nZXRCeXRlcygpKSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKQEAgLTMwMSw3ICsyODQsNyBAQAogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGVyLmVuY29kZVRvU3RyaW5nKCJzdGVwaGVuOm5vdC1teS1wYXNzd29yZCIuZ2V0Qnl0ZXMoKSkpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMi0xXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdCgxKVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMSwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CkBAIC0zMDksMzQgKzI5MiwxOSBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25HRVRXaXRoQXV0aG9yaXphdGlvbkhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Mi0xIikpOwotICAgICAgICBodHRwZ2V0LmFkZEhlYWRlcigiQXV0aG9yaXphdGlvbiIsICJCYXNpYyAiICsgZW5jb2Rlci5lbmNvZGVUb1N0cmluZygic3RlcGhlbjpwYXNzd29yZCIuZ2V0Qnl0ZXMoKSkpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25QT1NUV2l0aEF1dGhvcml6YXRpb25IZWFkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGVyLmVuY29kZVRvU3RyaW5nKCJzdGVwaGVuOnBhc3N3b3JkIi5nZXRCeXRlcygpKSk7Ci0gICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCIyLTFcIn0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KDEpXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzQ2LDExMCArMzE0LDEzNiBAQAogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJBdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBlbmNvZGVyLmVuY29kZVRvU3RyaW5nKCJzdGVwaGVuOnBhc3N3b3JkIi5nZXRCeXRlcygpKSk7Ci0gICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCIyLTFcIn0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KDEpXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25HRVRXaXRoR3JlbWxpblF1ZXJ5U3RyaW5nQXJndW1lbnRXaXRoQmluZGluZ3NBbmRGdW5jdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uUE9TVFdpdGhHcmVtbGluUXVlcnlTdHJpbmdBcmd1bWVudFdpdGhCaW5kaW5nc0FuZEZ1bmN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj1hZGRJdFVwKEludGVnZXIucGFyc2VJbnQoeCksSW50ZWdlci5wYXJzZUludCh5KSkmYmluZGluZ3MueD0xMCZiaW5kaW5ncy55PTEwIikpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJhZGRJdFVwKEludGVnZXIucGFyc2VJbnQoeCksSW50ZWdlci5wYXJzZUludCh5KSlcIixcImxhbmd1YWdlXCI6XCJncmVtbGluLWdyb292eVwiLFwiYmluZGluZ3NcIjp7XCJ4XCI6XCIxMFwiLCBcInlcIjpcIjEwXCJ9fSIsIENvbnN0cy5VVEZfOCkpOwogCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25HRVRPdmVyR3JlbWxpbkxhbmdXaXRoR3JlbWxpblF1ZXJ5U3RyaW5nQXJndW1lbnRXaXRoSXRlcmF0b3JSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RPdmVyR3JlbWxpbkxhbmdXaXRoR3JlbWxpblF1ZXJ5U3RyaW5nQXJndW1lbnRXaXRoSXRlcmF0b3JSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWcuaW5qZWN0KDExMSkmbGFuZ3VhZ2U9Z3JlbWxpbi1sYW5nIikpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdCgxMTEpXCIsXCJsYW5ndWFnZVwiOlwiZ3JlbWxpbi1sYW5nXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTExLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDExMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uR0VUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50V2l0aEl0ZXJhdG9yUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj1nY2xhc3NpYy5WKCkiKSk7CisgICAgcHVibGljIHZvaWQgc2hvdWxkSGF2ZVNhbWVWZXJ0ZXhSZXN1bHRzV2l0aEdyZW1saW5MYW5nT3JHcmVtbGluR3Jvb3Z5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBncmVtbGluTGFuZ1Jlc3VsdDsKKyAgICAgICAgU3RyaW5nIGdyZW1saW5Hcm9vdnlSZXN1bHQ7CiAKLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLlYoKVwiLFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tbGFuZ1wiLFwiZ1wiOlwiZ21vZGVyblwifSIsIENvbnN0cy5VVEZfOCkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5zaXplKCkpOworICAgICAgICAgICAgZ3JlbWxpbkxhbmdSZXN1bHQgPSBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnRvU3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uR0VUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50V2l0aEl0ZXJhdG9yUmVzdWx0R3JhcGhCaW5hcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWdjbGFzc2ljLlYoKSIpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIG1pbWUgPSBTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WMTsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkFjY2VwdCIsIG1pbWUpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLlYoKVwiLFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCIsXCJnXCI6XCJnbW9kZXJuXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMobWltZSwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuSU5TVEFOQ0UpOwotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIG1zZyA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZSh0b0J5dGVCdWYocmVzcG9uc2UuZ2V0RW50aXR5KCkpKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBkYXRhID0gKExpc3Q8T2JqZWN0PikgbXNnLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBkYXRhLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKE9iamVjdCBvIDogZGF0YSkgewotICAgICAgICAgICAgICAgIGFzc2VydFRoYXQobywgaW5zdGFuY2VPZihWZXJ0ZXguY2xhc3MpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBncmVtbGluR3Jvb3Z5UmVzdWx0ID0gbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS50b1N0cmluZygpOwogICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGdyZW1saW5Hcm9vdnlSZXN1bHQsIGdyZW1saW5MYW5nUmVzdWx0KTsKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uR0VUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50V2l0aEl0ZXJhdG9yUmVzdWx0R3JhcGhCaW5hcnlUb1N0cmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Z2NsYXNzaWMuVigpIikpOwotICAgICAgICBmaW5hbCBTdHJpbmcgbWltZSA9IFNlclRva2Vucy5NSU1FX0dSQVBIQklOQVJZX1YxICsgIi1zdHJpbmdkIjsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkFjY2VwdCIsIG1pbWUpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEhhdmVCaW5kaW5nc0FmZmVjdExhdGVyUXVlcmllcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgZmlyc3RSZXN1bHQ7CisgICAgICAgIGZpbmFsIFN0cmluZyBzZWNvbmRSZXN1bHQ7CiAKLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuVigpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMobWltZSwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBmaXJzdFJlc3VsdCA9IG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkudG9TdHJpbmcoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5JTlNUQU5DRSk7Ci0gICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgbXNnID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlc3BvbnNlKHRvQnl0ZUJ1ZihyZXNwb25zZS5nZXRFbnRpdHkoKSkpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGRhdGEgPSAoTGlzdDxPYmplY3Q+KSBtc2cuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoT2JqZWN0IG8gOiBkYXRhKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChvLCBpbnN0YW5jZU9mKFN0cmluZy5jbGFzcykpOwotICAgICAgICAgICAgICAgIGFzc2VydFRoYXQoKFN0cmluZykgbywgbWF0Y2hlc1JlZ2V4KCJ2XFxbXFxkXFxdIikpOwotICAgICAgICAgICAgfQorICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5WKClcIixcImdcIjpcImdtb2Rlcm5cIn0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgIH0KKworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5WKClcIn0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBzZWNvbmRSZXN1bHQgPSBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRFcXVhbHMoZmlyc3RSZXN1bHQsIHNlY29uZFJlc3VsdCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoR3JlbWxpblF1ZXJ5U3RyaW5nQXJndW1lbnRXaXRoSXRlcmF0b3JSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLlYoKVwiLFwiZ1wiOlwiZ2NsYXNzaWNcIn0iLCBDb25zdHMuVVRGXzgpKTsKKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uR0VUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50V2l0aEl0ZXJhdG9yUmVzdWx0VGV4dFBsYWluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25QT1NUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50V2l0aEl0ZXJhdG9yUmVzdWx0VGV4dFBsYWluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj1nY2xhc3NpYy5WKCkiKSk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuVigpXCIsXCJnXCI6XCJnY2xhc3NpY1wifSIsIENvbnN0cy5VVEZfOCkpOwogICAgICAgICBmaW5hbCBTdHJpbmcgbWltZSA9ICJ0ZXh0L3BsYWluIjsKLSAgICAgICAgaHR0cGdldC5hZGRIZWFkZXIoIkFjY2VwdCIsIG1pbWUpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkFjY2VwdCIsIG1pbWUpOwogCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMobWltZSwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwpAQCAtNDYyLDk2ICs0NTYsMTggQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uR0VUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj0yLTEiKSk7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPbkdFVFdpdGhHcmVtbGluUXVlcnlTdHJpbmdBcmd1bWVudFJldHVybmluZ1ZlcnRleCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Z3JhcGguYWRkVmVydGV4KCduYW1lJywnc3RlcGhlbicpIikpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInN0ZXBoZW4iLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgicHJvcGVydGllcyIpLmdldCgibmFtZSIpLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUUpLmFzVGV4dCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25HRVRXaXRoR3JlbWxpblF1ZXJ5U3RyaW5nQXJndW1lbnRXaXRoQmluZGluZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPUludGVnZXIucGFyc2VJbnQoeCklMkJJbnRlZ2VyLnBhcnNlSW50KHkpJmJpbmRpbmdzLng9MTAmYmluZGluZ3MueT0xMCIpKTsKLQotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwZ2V0KSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7Ci0gICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGQ0MDBPbkdFVFdpdGhOb0dyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25HRVRXaXRoQW55QWNjZXB0SGVhZGVyRGVmYXVsdFJlc3VsdFRvSnNvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49Mi0xIikpOwotICAgICAgICBodHRwZ2V0LmFkZEhlYWRlcigiQWNjZXB0IiwgIiovKiIpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkNDAwT25HRVRXaXRoQmFkQWNjZXB0SGVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj0yLTEiKSk7Ci0gICAgICAgIGh0dHBnZXQuYWRkSGVhZGVyKCJBY2NlcHQiLCAiYXBwbGljYXRpb24vanNvbitzb21ldGhpbmctZWxzZS10aGF0LWRvZXMtbm90LWV4aXN0Iik7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cGdldCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoR3JlbWxpbkpzb25FbmRjb2RlZEJvZHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjItMVwifSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSlcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwogICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01NjIsMjAgKzQ3OCwxOSBAQAogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiamF2YS50aW1lLkluc3RhbnQuTUFYXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJqYXZhLnRpbWUuT2Zmc2V0RGF0ZVRpbWUuTUFYXCIsIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoSW5zdGFudC5NQVgsIEluc3RhbnQucGFyc2Uobm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc1RleHQoKSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKE9mZnNldERhdGVUaW1lLk1BWCwgT2Zmc2V0RGF0ZVRpbWUucGFyc2Uobm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNUZXh0KCkpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEBUZXN0CisgICAgLypAVGVzdCBkaXNhYmxlZCBmb3Igbm93IGFzIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lc24ndCBzdXBwb3J0IGltcGxpY2l0IHRyYW5zYWN0aW9ucy4KICAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RUcmFuc2FjdGlvbmFsR3JhcGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwpAQCAtNTg2LDcgKzUwMSw3IEBACiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBIdHRwR2V0IGh0dHBnZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWcuVigpLmNvdW50KCkiKSk7CkBAIC02MDAsMTAgKzUxNSwxMCBAQAogICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CisgICAgfSAqLwogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RUcmFuc2FjdGlvbmFsR3JhcGhJblN0cmljdE1vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTYxMSwxNCArNTI2LDE0IEBACiAgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKICAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwogICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7Ci0gICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnMS5hZGRWKClcIixcImFsaWFzZXNcIjp7XCJnMVwiOlwiZ1wifX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuYWRkVigpXCIsXCJnXCI6XCJnXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5zaXplKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MjcsMTQgKzU0MiwxNCBAQAogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZ2NsYXNzaWMuVigpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLlYoKVwiLFwiZ1wiOlwiZ2NsYXNzaWNcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwogICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnNpemUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY0MywxNCArNTU4LDE0IEBACiAgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKICAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwogICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7Ci0gICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpXCIsXCJsYW5ndWFnZVwiOlwiZ3JlbWxpbi1ncm9vdnlcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi9qc29uIiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwogICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgcmVzdWx0SnNvbiA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIGRhdGEgPSByZXN1bHRKc29uLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIik7CisgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBkYXRhID0gcmVzdWx0SnNvbi5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkYXRhLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnNpemUoKSk7CiAKICAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBkYXRhLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkVSVElDRVMpLnNpemUoKSk7CkBAIC02NjMsMTQgKzU3OCwxNiBAQAogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZzEuVigpXCIsXCJhbGlhc2VzXCI6e1wiZzFcIjpcImdjbGFzc2ljXCJ9fSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5WKClcIixcImdcIjpcImdjbGFzc2ljXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5zaXplKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEdyYXBoU09OVG9rZW5zLlZFUlRFWCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KEdyYXBoU09OVG9rZW5zLkxBQkVMKS5nZXQoMCkudGV4dFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02NzksMTQgKzU5NiwxNCBAQAogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwieCt5XCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6MTAsIFwieVwiOjEwfX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIngreVwiLCBcImJpbmRpbmdzXCI6e1wieFwiOjEwLCBcInlcIjoxMH0sIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02OTUsMTQgKzYxMiwxNCBAQAogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwieFwiLCBcImJpbmRpbmdzXCI6e1wieFwiOjEwfX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KHgpXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6MTB9LCBcImxhbmd1YWdlXCI6XCJncmVtbGluLWdyb292eVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzExLDE0ICs2MjgsMTQgQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcInhcIiwgXCJiaW5kaW5nc1wiOntcInhcIjoxMC41fX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KHgpXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6MTAuNX0sIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAuNWQsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxMC41ZCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzI3LDE0ICs2NDQsMTQgQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcInhcIiwgXCJiaW5kaW5nc1wiOntcInhcIjpcIjEwXCJ9fSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5WKDEpLm91dCh4KS52YWx1ZXMoJ25hbWUnKVwiLCBcImJpbmRpbmdzXCI6e1wieFwiOlwia25vd3NcIn0sIFwiZ1wiOlwiZ21vZGVyblwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxMCIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkudGV4dFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ2YWRhcyIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLnRleHRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzQzLDE0ICs2NjAsMTQgQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcInhcIiwgXCJiaW5kaW5nc1wiOntcInhcIjp0cnVlfX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KHgpXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6dHJ1ZX0sIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuYm9vbGVhblZhbHVlKCksIGlzKHRydWUpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQobm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuYm9vbGVhblZhbHVlKCksIGlzKHRydWUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzU5LDE0ICs2NzYsMTQgQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcInhcIiwgXCJiaW5kaW5nc1wiOntcInhcIjpudWxsfX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KHgpXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6bnVsbH0sIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuaXNOdWxsKCksIGlzKHRydWUpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQobm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuaXNOdWxsKCksIGlzKHRydWUpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzc1LDE3ICs2OTIsMTcgQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcInhcIiwgXCJiaW5kaW5nc1wiOntcInhcIjpbMSwyLDNdfX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KHgpLnVuZm9sZCgpXCIsIFwiYmluZGluZ3NcIjp7XCJ4XCI6WzEsMiwzXX0sIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pc0FycmF5KCksIGlzKHRydWUpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmludFZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgyKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQobm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pc0FycmF5KCksIGlzKHRydWUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgxKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgyKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzk0LDE1ICs3MTEsMTUgQEAKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcInhcIiwgXCJiaW5kaW5nc1wiOntcInhcIjp7XCJ5XCI6MX19fSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoeClcIiwgXCJiaW5kaW5nc1wiOntcInhcIjp7XCJ5XCI6MX19LCBcImxhbmd1YWdlXCI6XCJncmVtbGluLWdyb292eVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJnOk1hcCIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KCJAdHlwZSIpLmFzVGV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgxKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiZzpNYXAiLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoIkB0eXBlIikuYXNUZXh0KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgxKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODExLDcgKzcyOCw3IEBACiAgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKICAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwogICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7Ci0gICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJ4K3lcIiwgXCJiaW5kaW5nc1wiOjEwfX0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KHgsIHkpXCIsIFwiYmluZGluZ3NcIjoxMH0sIFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKQEAgLTgyMyw3ICs3NDAsNyBAQAogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWFkZmFkZmxpblwiOlwiMS0xXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtYWRmYWRmbGluXCI6XCJnLmluamVjdCgwKVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CkBAIC04MzYsNyArNzUzLDcgQEAKICAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwogICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQWNjZXB0IiwgImFwcGxpY2F0aW9uL2pzb24rc29tZXRoaW5nLWVsc2UtdGhhdC1kb2VzLW5vdC1leGlzdCIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMS0xXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdCgwKVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CkBAIC04NDksMTQgKzc2NiwxNCBAQAogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJBY2NlcHQiLCAiKi8qIik7Ci0gICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCIxLTFcIn0iLCBDb25zdHMuVVRGXzgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KDApXCJ9IiwgQ29uc3RzLlVURl84KSk7CiAKICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODY2LDE1OCArNzgzLDQ1IEBACiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKICAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiKi4qO3E9MC44LGFwcGxpY2F0aW9uL3hodG1sIik7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQWNjZXB0IiwgIiovKiIpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMS0xXCJ9IiwgQ29uc3RzLlVURl84KSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdCgwKVwifSIsIENvbnN0cy5VVEZfOCkpOwogCiAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNJbnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDUwME9uR0VUV2l0aEdyZW1saW5FdmFsRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHNob3VsZDUwME9uUE9TVFdpdGhHcmVtbGluRXZhbEZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwogICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CiAgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjEvMFwifSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMSkubWF0aCgnXy8wJylcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg1MDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7IC8vIFRlbXBvcmFyaWx5IDIwMCBPSy4KKyAgICAgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuY29udGFpbnNIZWFkZXIoUkVRVUVTVF9JRF9IRUFERVJfTkFNRSkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhLmxhbmcuQXJpdGhtZXRpY0V4Y2VwdGlvbiIsIG5vZGUuZ2V0KFRva2Vucy5TVEFUVVNfQVRUUklCVVRFX0VYQ0VQVElPTlMpLmdldCgwKS5hc1RleHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbm9kZS5nZXQoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfRVhDRVBUSU9OUykuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQobm9kZS5nZXQoVG9rZW5zLlNUQVRVU19BVFRSSUJVVEVfU1RBQ0tfVFJBQ0UpLmFzVGV4dCgpLCBjb250YWluc1N0cmluZygiRGl2aXNpb24gYnkgemVybyIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGl2aXNpb24gYnkgemVybyEiLCBub2RlLmdldCgic3RhdHVzIikuZ2V0KCJtZXNzYWdlIikuYXNUZXh0KCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoR3JhcGhTT04xZDBBY2NlcHRIZWFkZXJEZWZhdWx0UmVzdWx0VG9Kc29uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25QT1NUV2l0aEdyYXBoU09ONGQwQWNjZXB0SGVhZGVyRGVmYXVsdFJlc3VsdFRvSnNvbigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjEtMVwifSIsIENvbnN0cy5VVEZfOCkpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMClcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFNlclRva2Vucy5NSU1FX0pTT04sIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldCgwKS5hc0ludCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25QT1NUV2l0aEdyYXBoU09OMmQwQWNjZXB0SGVhZGVyRGVmYXVsdFJlc3VsdFRvSnNvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKLSAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjEtMVwifSIsIENvbnN0cy5VVEZfOCkpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoU2VyVG9rZW5zLk1JTUVfSlNPTiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KDApLmFzSW50KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoR3JhcGhTT04zZDBBY2NlcHRIZWFkZXJEZWZhdWx0UmVzdWx0VG9Kc29uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKLSAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwotICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMS0xXCJ9IiwgQ29uc3RzLlVURl84KSk7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhTZXJUb2tlbnMuTUlNRV9KU09OLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7Ci0gICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNJbnQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uUE9TVFdpdGhBbnlHcmFwaFNPTkFjY2VwdEhlYWRlckRlZmF1bHRSZXN1bHRUb0pzb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOwotICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdDEgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwotICAgICAgICBodHRwcG9zdDEuc2V0SGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgU2VyVG9rZW5zLk1JTUVfSlNPTik7Ci0gICAgICAgIGh0dHBwb3N0MS5zZXRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKLSAgICAgICAgaHR0cHBvc3QxLnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCIxLTFcIn0iLCBDb25zdHMuVVRGXzgpKTsKLQotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdDEpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhTZXJUb2tlbnMuTUlNRV9KU09OLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7Ci0gICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoMCkuYXNJbnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdDFVbnR5cGVkID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKLSAgICAgICAgaHR0cHBvc3QxVW50eXBlZC5zZXRIZWFkZXIoSHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKLSAgICAgICAgaHR0cHBvc3QxVW50eXBlZC5zZXRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMV9VTlRZUEVEKTsKLSAgICAgICAgaHR0cHBvc3QxVW50eXBlZC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMS0xXCJ9IiwgQ29uc3RzLlVURl84KSk7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QxVW50eXBlZCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1YxX1VOVFlQRUQsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldCgwKS5hc0ludCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0MiA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7Ci0gICAgICAgIGh0dHBwb3N0Mi5zZXRIZWFkZXIoSHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKLSAgICAgICAgaHR0cHBvc3QyLnNldEhlYWRlcihIdHRwSGVhZGVycy5BQ0NFUFQsIFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1YyKTsKLSAgICAgICAgaHR0cHBvc3QyLnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCIxLTFcIn0iLCBDb25zdHMuVVRGXzgpKTsKLQotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdDIpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMiwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmFzSW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QyVW50eXBlZCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7Ci0gICAgICAgIGh0dHBwb3N0MlVudHlwZWQuc2V0SGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgU2VyVG9rZW5zLk1JTUVfSlNPTik7Ci0gICAgICAgIGh0dHBwb3N0MlVudHlwZWQuc2V0SGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjJfVU5UWVBFRCk7Ci0gICAgICAgIGh0dHBwb3N0MlVudHlwZWQuc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcIjEtMVwifSIsIENvbnN0cy5VVEZfOCkpOwotCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0MlVudHlwZWQpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMl9VTlRZUEVELCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7Ci0gICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoMCkuYXNJbnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdDMgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwotICAgICAgICBodHRwcG9zdDMuc2V0SGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgU2VyVG9rZW5zLk1JTUVfSlNPTik7Ci0gICAgICAgIGh0dHBwb3N0My5zZXRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMyk7Ci0gICAgICAgIGh0dHBwb3N0My5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiMS0xXCJ9IiwgQ29uc3RzLlVURl84KSk7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QzKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjMsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKLSAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldCgiZGF0YSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0M1VudHlwZWQgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOwotICAgICAgICBodHRwcG9zdDNVbnR5cGVkLnNldEhlYWRlcihIdHRwSGVhZGVycy5DT05URU5UX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT04pOwotICAgICAgICBodHRwcG9zdDNVbnR5cGVkLnNldEhlYWRlcihIdHRwSGVhZGVycy5BQ0NFUFQsIFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1YzX1VOVFlQRUQpOwotICAgICAgICBodHRwcG9zdDNVbnR5cGVkLnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCIxLTFcIn0iLCBDb25zdHMuVVRGXzgpKTsKLQotICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdDNVbnR5cGVkKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjNfVU5UWVBFRCwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwotICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KDApLmFzSW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KDApLmFzSW50KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDI4LDMxICs4MzIsMzIgQEAKICAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImdcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg1MDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7IC8vIFRlbXBvcmFyaWx5IDIwMAogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFNlclRva2Vucy5NSU1FX0pTT04sIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKICAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KG5vZGUuZ2V0KCJtZXNzYWdlIikuYXNUZXh0KCksIHN0YXJ0c1dpdGgoIkNvdWxkIG5vdCBzZXJpYWxpemUgdGhlIHJlc3VsdCB3aXRoICIpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQobm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpLmFzVGV4dCgpLCBzdGFydHNXaXRoKCJFcnJvciBkdXJpbmcgc2VyaWFsaXphdGlvbjoiKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uR0VUV2l0aEdyZW1saW5RdWVyeVN0cmluZ0FyZ3VtZW50Q2FsbGluZ0RhdGV0aW1lRnVuY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoR3JlbWxpblF1ZXJ5U3RyaW5nQXJndW1lbnRDYWxsaW5nRGF0ZXRpbWVGdW5jdGlvbigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgIGZpbmFsIEh0dHBHZXQgaHR0cGdldCA9IG5ldyBIdHRwR2V0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygiP2dyZW1saW49ZGF0ZXRpbWUlMjglMjcyMDE4LTAzLTIyVDAwJTNBMzUlM0E0NC43NDElMkIxNjAwJTI3JTI5IikpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdChkYXRldGltZSgnMjAxOC0wMy0yMlQwMDozNTo0NC43NDErMTYwMCcpKVwifSIsIENvbnN0cy5VVEZfOCkpOwogCi0gICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgewogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFwcGxpY2F0aW9uL2pzb24iLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CiAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDE4LTAzLTIyVDAwOjM1OjQ0Ljc0MSsxNjowMCIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoImRhdGEiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkudGV4dFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDE4LTAzLTIyVDAwOjM1OjQ0Ljc0MSsxNjowMCIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLnRleHRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkNTAwT25HRVRXaXRoRXZhbHVhdGlvblRpbWVvdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gUmVsYXRlZCB0byBUSU5LRVJQT1AtMjc2OS4gVGhpcyBpcyBhIHNpbWlsYXIgdGVzdCB0byB0aG9zZSBmb3IgV2ViU29ja2V0Q2hhbm5lbGl6ZXIgYW5kIFVuaWZpZWRDaGFubmVsaXplci4KKyAgICBAVGVzdCh0aW1lb3V0ID0gMTAwMDApIC8vIEFkZCB0ZXN0IHRpbWVvdXQgdG8gcHJldmVudCBpbmNvcnJlY3QgdGltZW91dCBiZWhhdmlvciBmcm9tIHN0b3BwaW5nIHRlc3QgcnVuLgorICAgIHB1YmxpYyB2b2lkIHNob3VsZDUwME9uUE9TVFdpdGhFdmFsdWF0aW9uVGltZW91dCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBSZWxhdGVkIHRvIFRJTktFUlBPUC0yNzY5LiBUaGlzIGlzIGEgc2ltaWxhciB0ZXN0IHRvIHRoZSBvbmUgZm9yIHRoZSBXZWJTb2NrZXRDaGFubmVsaXplci4KICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBmaXJzdENsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKICAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBzZWNvbmRDbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CiAKQEAgLTEwNjMsMTggKzg2OCwyMCBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhpcyBxdWVyeSBoYXMgYSBjeWNsZSwgc28gaXQgcnVucyB1bnRpbCBpdCB0aW1lcyBvdXQuCi0gICAgICAgIGZpbmFsIEh0dHBHZXQgZmlyc3RHZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWcuVigpLnJlcGVhdChfXy5vdXQoKSkudW50aWwoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpLml0ZXJhdGUoKSIpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgZmlyc3RQb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgZmlyc3RQb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKS5pdGVyYXRlKClcIn0iLCBDb25zdHMuVVRGXzgpKTsKICAgICAgICAgLy8gQWRkIGEgc2hvcnRlciB0aW1lb3V0IHRvIHRoZSBzZWNvbmQgcXVlcnkgdG8gZW5zdXJlIHRoYXQgaXRzIHRpbWVvdXQgaXMgbGVzcyB0aGFuIHRoZSBmaXJzdCBxdWVyeSdzIHJ1bm5pbmcgdGltZS4KLSAgICAgICAgZmluYWwgSHR0cEdldCBzZWNvbmRHZXQgPSBuZXcgSHR0cEdldChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoIj9ncmVtbGluPWcud2l0aCgnZXZhbHVhdGlvblRpbWVvdXQnLDEwMDApLlYoKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKS5pdGVyYXRlKCkiKSk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IHNlY29uZFBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBzZWNvbmRQb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKS5pdGVyYXRlKClcIn0iLCBDb25zdHMuVVRGXzgpKTsKIAogICAgICAgICBmaW5hbCBDYWxsYWJsZTxJbnRlZ2VyPiBmaXJzdFF1ZXJ5V3JhcHBlciA9ICgpIC0+IHsKLSAgICAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gZmlyc3RDbGllbnQuZXhlY3V0ZShmaXJzdEdldCkpIHsKKyAgICAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gZmlyc3RDbGllbnQuZXhlY3V0ZShmaXJzdFBvc3QpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKICAgICAgICAgZmluYWwgQ2FsbGFibGU8SW50ZWdlcj4gc2Vjb25kUXVlcnlXcmFwcGVyID0gKCkgLT4gewotICAgICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBzZWNvbmRDbGllbnQuZXhlY3V0ZShzZWNvbmRHZXQpKSB7CisgICAgICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IHNlY29uZENsaWVudC5leGVjdXRlKHNlY29uZFBvc3QpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xMDg0LDE3ICs4OTEsNDIxIEBACiAgICAgICAgIGZpbmFsIEZ1dHVyZTxJbnRlZ2VyPiBzZWNvbmRHZXRSZXN1bHQgPSB0aHJlYWRQb29sLnNjaGVkdWxlKHNlY29uZFF1ZXJ5V3JhcHBlciwgMTUwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKIAogICAgICAgICAvLyBNYWtlIHN1cmUgYm90aCByZXF1ZXN0cyByZXR1cm4gYSByZXNwb25zZSBhbmQgZG9uJ3QgaGFuZy4KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgZmlyc3RHZXRSZXN1bHQuZ2V0KCkuaW50VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1MDAsIHNlY29uZEdldFJlc3VsdC5nZXQoKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgZmlyc3RHZXRSZXN1bHQuZ2V0KCkuaW50VmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHNlY29uZEdldFJlc3VsdC5nZXQoKS5pbnRWYWx1ZSgpKTsKIAogICAgICAgICB0aHJlYWRQb29sLnNodXRkb3duKCk7CiAgICAgfQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRXJyb3JXaGVuVHJ5aW5nVG9Db25uZWN0V2l0aEh0dHAxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgSHR0cEdldCBodHRwZ2V0ID0gbmV3IEh0dHBHZXQoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCI/Z3JlbWxpbj1nLmluamVjdCgxKSIpKTsKKyAgICAgICAgaHR0cGdldC5zZXRQcm90b2NvbFZlcnNpb24oSHR0cFZlcnNpb24uSFRUUF8xXzApOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBnZXQpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNTA1LCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25QT1NUV2l0aENodW5rZWRSZXNwb25zZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworICAgICAgICAvLyBjaHVuayBzaXplIGlzIDgsIHNvIHNob3VsZCBiZSAyIGNodW5rcworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMCwxLDIsMyw0LDUsNiw3LDgsOSwndGVuJywxMSwxMiwxMywxNCwxNSwnbmV3IGNodW5rJylcIn0iLCBDb25zdHMuVVRGXzgpKTsKKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5nZXRFbnRpdHkoKS5pc0NodW5rZWQoKSk7CisKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg4LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCg4KS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVuIiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMTApLnRleHRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibmV3IGNodW5rIiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMTYpLnRleHRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZmluYWwgSGVhZGVyW10gZm9vdGVycyA9IGdldFRyYWlsaW5nSGVhZGVycyhyZXNwb25zZSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZm9vdGVycy5sZW5ndGgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb2RlIiwgZm9vdGVyc1swXS5nZXROYW1lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDAiLCBmb290ZXJzWzBdLmdldFZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoQ2h1bmtlZFJlc3BvbnNlR3JhcGhCaW5hcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW4gPSAiZy5pbmplY3QoMCwxLDIsMyw0LDUsNiw3LDgsOSwndGVuJywxMSwxMiwxMywxNCwxNSwnbmV3IGNodW5rJykiOworICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBzZXJpYWxpemVkUmVxdWVzdCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KAorICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKGdyZW1saW4pLmNyZWF0ZSgpLCBuZXcgVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yKGZhbHNlKSk7CisKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcihIdHRwSGVhZGVycy5DT05URU5UX1RZUEUsIFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LmdldFZhbHVlKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoc2VyaWFsaXplZFJlcXVlc3QuYXJyYXkoKSkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmdldEVudGl0eSgpLmlzQ2h1bmtlZCgpKTsKKworICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IHNlcmlhbGl6ZXIucmVhZENodW5rKHRvQnl0ZUJ1ZihyZXNwb25zZS5nZXRFbnRpdHkoKSksIHRydWUpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDE3LCAoKExpc3QpcmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmdldERhdGEoKSkuc2l6ZSgpKTsKKworICAgICAgICAgICAgZmluYWwgSGVhZGVyW10gZm9vdGVycyA9IGdldFRyYWlsaW5nSGVhZGVycyhyZXNwb25zZSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZm9vdGVycy5sZW5ndGgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb2RlIiwgZm9vdGVyc1swXS5nZXROYW1lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyMDAiLCBmb290ZXJzWzBdLmdldFZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoRW1wdHlDaHVua2VkUmVzcG9uc2VHcmFwaEJpbmFyeSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbiA9ICJnLlYoKS5pdGVyYXRlKCkiOworICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBzZXJpYWxpemVkUmVxdWVzdCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KAorICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKGdyZW1saW4pLmNyZWF0ZSgpLCBuZXcgVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yKGZhbHNlKSk7CisKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcihIdHRwSGVhZGVycy5DT05URU5UX1RZUEUsIFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LmdldFZhbHVlKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoc2VyaWFsaXplZFJlcXVlc3QuYXJyYXkoKSkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmdldEVudGl0eSgpLmlzQ2h1bmtlZCgpKTsKKworICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IHNlcmlhbGl6ZXIucmVhZENodW5rKHRvQnl0ZUJ1ZihyZXNwb25zZS5nZXRFbnRpdHkoKSksIHRydWUpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsICgoTGlzdClyZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5zaXplKCkpOworCisgICAgICAgICAgICBmaW5hbCBIZWFkZXJbXSBmb290ZXJzID0gZ2V0VHJhaWxpbmdIZWFkZXJzKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBmb290ZXJzLmxlbmd0aCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNvZGUiLCBmb290ZXJzWzBdLmdldE5hbWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjIwMCIsIGZvb3RlcnNbMF0uZ2V0VmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZDIwME9uUE9TVFdpdGhDaHVua2VkUmVzcG9uc2VVc2luZ1RleHRQbGFpbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgInRleHQvcGxhaW4iKTsKKyAgICAgICAgLy8gY2h1bmsgc2l6ZSBpcyA4LCBzbyBzaG91bGQgYmUgMiBjaHVua3MKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuaW5qZWN0KDAsMSwyLDMsNCw1LDYsNyw4LDksJ3RlbicsMTEsMTIsMTMsMTQsMTUsJ25ldyBjaHVuaycpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuZ2V0RW50aXR5KCkuaXNDaHVua2VkKCkpOworCisgICAgICAgICAgICBTdHJpbmcgdGV4dFBsYWluUmVzcG9uc2UgPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHRleHRQbGFpblJlc3BvbnNlLnN0YXJ0c1dpdGgoIj09PjAiKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHRleHRQbGFpblJlc3BvbnNlLmVuZHNXaXRoKFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKyAiPT0+bmV3IGNodW5rIikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGQyMDBPblBPU1RXaXRoRW1wdHlDaHVua2VkUmVzcG9uc2VVc2luZ1RleHRQbGFpbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgInRleHQvcGxhaW4iKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoIntcImdyZW1saW5cIjpcImcuVigpLml0ZXJhdGUoKVwifSIsIENvbnN0cy5VVEZfOCkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmdldEVudGl0eSgpLmlzQ2h1bmtlZCgpKTsKKworICAgICAgICAgICAgU3RyaW5nIHRleHRQbGFpblJlc3BvbnNlID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLCB0ZXh0UGxhaW5SZXNwb25zZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUVycm9yc0luRmlyc3RDaHVua1BPU1RXaXRoQ2h1bmtlZFJlc3BvbnNlVXNpbmdUZXh0UGxhaW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcihIdHRwSGVhZGVycy5DT05URU5UX1RZUEUsICJhcHBsaWNhdGlvbi9qc29uIik7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcihIdHRwSGVhZGVycy5BQ0NFUFQsICJ0ZXh0L3BsYWluIik7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KCJ7XCJncmVtbGluXCI6XCJnLmluamVjdCgwLDEsMiwzLDQsNSw2LDcsOCw5LCd0ZW4nLDExLDEyLDEzLDE0LDE1LDE2KS5jb2FsZXNjZShpcyhsdCgwKSksZmFpbCgnc29tZSBlcnJvcicpKVwifSIsIENvbnN0cy5VVEZfOCkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmdldEVudGl0eSgpLmlzQ2h1bmtlZCgpKTsKKworICAgICAgICAgICAgU3RyaW5nIHRleHRQbGFpblJlc3BvbnNlID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXh0UGxhaW5SZXNwb25zZS5zdGFydHNXaXRoKCJzb21lIGVycm9yIikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVFcnJvcnNOb3RJbkZpcnN0Q2h1bmtQT1NUV2l0aENodW5rZWRSZXNwb25zZVVzaW5nVGV4dFBsYWluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFLCAiYXBwbGljYXRpb24vanNvbiIpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCAidGV4dC9wbGFpbiIpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNykuY29hbGVzY2UoaXMobHQoMTcpKSxmYWlsKCdzb21lIGVycm9yJykpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuZ2V0RW50aXR5KCkuaXNDaHVua2VkKCkpOworCisgICAgICAgICAgICBTdHJpbmcgdGV4dFBsYWluUmVzcG9uc2UgPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHRleHRQbGFpblJlc3BvbnNlLnN0YXJ0c1dpdGgoIj09PjAiKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHRleHRQbGFpblJlc3BvbnNlLmNvbnRhaW5zKCI9PT41IikpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXh0UGxhaW5SZXNwb25zZS5jb250YWlucygiPT0+MTUiKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHRleHRQbGFpblJlc3BvbnNlLmVuZHNXaXRoKFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKyAic29tZSBlcnJvciIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlRXJyb3JzSW5GaXJzdENodW5rUE9TVFdpdGhDaHVua2VkUmVzcG9uc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgLy8gZGVmYXVsdCBjaHVuayBzaXplIGlzIDE2LCBzbyBzaG91bGQgYmUgMiBjaHVua3MKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoCisgICAgICAgICAgICAgICAgIntcImdyZW1saW5cIjpcImcuaW5qZWN0KDAsMSwyLDMsNCw1LDYsNyw4LDksJ3RlbicsMTEsMTIsMTMsMTQsMTUsMTYpLmNvYWxlc2NlKGlzKGx0KDApKSxmYWlsKCdzb21lIGVycm9yJykpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuY29udGFpbnNIZWFkZXIoUkVRVUVTVF9JRF9IRUFERVJfTkFNRSkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5nZXRFbnRpdHkoKS5pc0NodW5rZWQoKSk7CisKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQobm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpLnRleHRWYWx1ZSgpLCBzdGFydHNXaXRoKCJzb21lIGVycm9yIikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgiY29kZSIpLmludFZhbHVlKCkpOworCisgICAgICAgICAgICBmaW5hbCBIZWFkZXJbXSBmb290ZXJzID0gZ2V0VHJhaWxpbmdIZWFkZXJzKHJlc3BvbnNlKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBmb290ZXJzLmxlbmd0aCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNvZGUiLCBmb290ZXJzWzBdLmdldE5hbWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjUwMCIsIGZvb3RlcnNbMF0uZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImV4Y2VwdGlvbiIsIGZvb3RlcnNbMV0uZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQoZm9vdGVyc1sxXS5nZXRWYWx1ZSgpLCBpcygiU2VydmVyRmFpbFN0ZXBFeGNlcHRpb24iKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhbmRsZUVycm9yc05vdEluRmlyc3RDaHVua1BPU1RXaXRoQ2h1bmtlZFJlc3BvbnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CisgICAgICAgIC8vIGNodW5rIHNpemUgaXMgMTYsIHNvIHNob3VsZCBiZSAyIGNodW5rcworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eSgKKyAgICAgICAgICAgICAgICAie1wiZ3JlbWxpblwiOlwiZy5pbmplY3QoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNykuY29hbGVzY2UoaXMobHQoMTcpKSxmYWlsKCdzb21lIGVycm9yJykpXCJ9IiwgQ29uc3RzLlVURl84KSk7CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuY29udGFpbnNIZWFkZXIoUkVRVUVTVF9JRF9IRUFERVJfTkFNRSkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5nZXRFbnRpdHkoKS5pc0NodW5rZWQoKSk7CisKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUaGF0KG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoIm1lc3NhZ2UiKS50ZXh0VmFsdWUoKSwgc3RhcnRzV2l0aCgic29tZSBlcnJvciIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1MDAsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoImNvZGUiKS5pbnRWYWx1ZSgpKTsKKworICAgICAgICAgICAgZmluYWwgSGVhZGVyW10gZm9vdGVycyA9IGdldFRyYWlsaW5nSGVhZGVycyhyZXNwb25zZSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZm9vdGVycy5sZW5ndGgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb2RlIiwgZm9vdGVyc1swXS5nZXROYW1lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI1MDAiLCBmb290ZXJzWzBdLmdldFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJleGNlcHRpb24iLCBmb290ZXJzWzFdLmdldE5hbWUoKSk7CisgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VGhhdChmb290ZXJzWzFdLmdldFZhbHVlKCksIGlzKCJTZXJ2ZXJGYWlsU3RlcEV4Y2VwdGlvbiIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgSGVhZGVyW10gZ2V0VHJhaWxpbmdIZWFkZXJzKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBOb1N1Y2hGaWVsZEV4Y2VwdGlvbiwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIElucHV0U3RyZWFtIGNvbnRlbnQgPSByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50KCk7CisgICAgICAgIGZpbmFsIEZpZWxkIGZpZWxkID0gY29udGVudC5nZXRDbGFzcygpLmdldERlY2xhcmVkRmllbGQoIndyYXBwZWRTdHJlYW0iKTsKKyAgICAgICAgZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKKyAgICAgICAgZmluYWwgRW9mU2Vuc29ySW5wdXRTdHJlYW0gc3RyZWFtID0gKEVvZlNlbnNvcklucHV0U3RyZWFtKSBmaWVsZC5nZXQoY29udGVudCk7CisgICAgICAgIGZpbmFsIEZpZWxkIGVvZlN0cmVhbUZpZWxkID0gc3RyZWFtLmdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZCgiZW9mV2F0Y2hlciIpOworICAgICAgICBlb2ZTdHJlYW1GaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOworICAgICAgICBmaW5hbCBIdHRwRW50aXR5V3JhcHBlciBlbnRpdHlQcm94eSA9IChIdHRwRW50aXR5V3JhcHBlcikgZW9mU3RyZWFtRmllbGQuZ2V0KHN0cmVhbSk7CisgICAgICAgIGZpbmFsIEVvZlNlbnNvcklucHV0U3RyZWFtIGlubmVyRW9mU3RyZWFtID0gKEVvZlNlbnNvcklucHV0U3RyZWFtKSBlbnRpdHlQcm94eS5nZXRDb250ZW50KCk7CisgICAgICAgIGZpbmFsIEZpZWxkIGVvZldyYXBwZWRTdHJlYW1GaWVsZCA9IGlubmVyRW9mU3RyZWFtLmdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZCgid3JhcHBlZFN0cmVhbSIpOworICAgICAgICBlb2ZXcmFwcGVkU3RyZWFtRmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsKKyAgICAgICAgcmV0dXJuICgoQ2h1bmtlZElucHV0U3RyZWFtKSBlb2ZXcmFwcGVkU3RyZWFtRmllbGQuZ2V0KGlubmVyRW9mU3RyZWFtKSkuZ2V0Rm9vdGVycygpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkMjAwT25QT1NUV2l0aEdyZW1saW5HcmFwaFNPTkVuZGNvZGVkQm9keUFuZERvdWJsZUJpbmRpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICBmaW5hbCBTaW1wbGVCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOworICAgICAgICBiaW5kaW5ncy5wdXQoIngiLCAxMC41ZCk7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgc2VyaWFsaXplZFJlcXVlc3QgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeSgKKyAgICAgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZy5pbmplY3QoeCkiKS5hZGRCaW5kaW5ncyhiaW5kaW5ncykuYWRkTGFuZ3VhZ2UoImdyZW1saW4tZ3Jvb3Z5IikuY3JlYXRlKCksCisgICAgICAgICAgICAgICAgbmV3IFVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcihmYWxzZSkpOworCisgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoc2VyaWFsaXplZFJlcXVlc3QuYXJyYXkoKSkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSwgcmVzcG9uc2UuZ2V0RW50aXR5KCkuZ2V0Q29udGVudFR5cGUoKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxMC41ZCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkNDAwT25QT1NUV2l0aEludmFsaWRSZXF1ZXN0QXJnc1doZW5JbnZhbGlkQmluZGluZ3NTdXBwbGllZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQgc2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQoKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBzZXJpYWxpemVkUmVxdWVzdCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KAorICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLlYoaWQpIikuYWRkQmluZGluZygiaWQiLCAiMSIpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgQnl0ZUFycmF5RW50aXR5KHNlcmlhbGl6ZWRSZXF1ZXN0LmFycmF5KCkpKTsKKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShub2RlLmdldCgic3RhdHVzIikuZ2V0KCJtZXNzYWdlIikuYXNUZXh0KCkuY29udGFpbnMoIlRoZSBtZXNzYWdlIHN1cHBsaWVzIG9uZSBvciBtb3JlIGludmFsaWQgcGFyYW1ldGVycyBrZXkiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEVycm9yT25HcmVtbGluRnJvbUFwcGxpY2F0aW9uSnNvblBvc3RSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW4gPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCkuVigpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpOworICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3RJZCA9IFVVSUQuZnJvbVN0cmluZygiMWU1NWM0OTUtMjJkNS00YTM5LTkzNGEtYTI3NDRiYTAxMGVmIik7CisgICAgICAgIGZpbmFsIFN0cmluZyBib2R5ID0gInsgXCJncmVtbGluXCI6IFwiIiArIGdyZW1saW4gKyAiXCIsIFwiZ1wiOiBcImdtb2Rlcm4iICsgIlwiLCBcImxhbmd1YWdlXCI6ICBcImdyZW1saW4tbGFuZ1wifSI7CisgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi9qc29uIik7CisgICAgICAgIGh0dHBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KGJvZHksIENvbnN0cy5VVEZfOCkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoIm1lc3NhZ2UiKS5hc1RleHQoKS5jb250YWlucygiRmFpbGVkIHRvIGludGVycHJldCBHcmVtbGluIHF1ZXJ5IikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRJZ25vcmVSZXF1ZXN0SWRJblBvc3RSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFVVSUQgcmVxdWVzdElkID0gVVVJRC5mcm9tU3RyaW5nKCIxZTU1YzQ5NS0yMmQ1LTRhMzktOTM0YS1hMjc0NGJhMDEwZWYiKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGJvZHkgPSAieyBcImdyZW1saW5cIjogXCIiICsgImcuVigpIiArICJcIiwgXCJyZXF1ZXN0SWRcIjogXCIiICsgcmVxdWVzdElkICsgIlwiLCBcImdcIjogXCJnbW9kZXJuIiArICJcIiwgXCJsYW5ndWFnZVwiOiAgXCJncmVtbGluLWxhbmdcIn0iOworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eShib2R5LCBDb25zdHMuVVRGXzgpKTsKKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5jb250YWluc0hlYWRlcihSRVFVRVNUX0lEX0hFQURFUl9OQU1FKSk7CisgICAgICAgICAgICBhc3NlcnROb3RFcXVhbHMocmVxdWVzdElkLCBVVUlELmZyb21TdHJpbmcocmVzcG9uc2UuZ2V0TGFzdEhlYWRlcihSRVFVRVNUX0lEX0hFQURFUl9OQU1FKS5nZXRWYWx1ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZDEwMG9uRXhwZWN0Q29udGludWVSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICBmaW5hbCBCeXRlQnVmIHNlcmlhbGl6ZWRSZXF1ZXN0ID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoCisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuVigpIikuYWRkRygiZ21vZGVybiIpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0Q29uZmlnKFJlcXVlc3RDb25maWcuY3VzdG9tKCkuc2V0RXhwZWN0Q29udGludWVFbmFibGVkKHRydWUpLmJ1aWxkKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoc2VyaWFsaXplZFJlcXVlc3QuYXJyYXkoKSkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5zaXplKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBY2NlcHRUaW1lb3V0SW5SZXF1ZXN0Qm9keSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgYm9keSA9ICJ7IFwiZ3JlbWxpblwiOiBcIiIgKyAiVGhyZWFkLnNsZWVwKDUwMDApIiArICJcIixcImxhbmd1YWdlXCI6XCJncmVtbGluLWdyb292eVwiLFwiIiArIFRJTUVPVVRfTVMgKyAiXCI6XCIxMDBcIn0iOworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eShib2R5LCBDb25zdHMuVVRGXzgpKTsKKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoanNvbi5jb250YWlucygidGltZW91dCBvY2N1cnJlZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQWNjZXB0TWF0ZXJpYWxpemVQcm9wZXJ0aWVzQWxsSW5SZXF1ZXN0Qm9keSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgYm9keSA9ICJ7IFwiZ3JlbWxpblwiOiBcIiIgKyAiZ21vZGVybi5WKCkubGltaXQoMSkiICsgIlwiLFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tZ3Jvb3Z5XCIsXCIiCisgICAgICAgICAgICAgICAgKyBBUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMgKyAiXCI6XCIiICsgTUFURVJJQUxJWkVfUFJPUEVSVElFU19BTEwgKyAiXCJ9IjsKKyAgICAgICAgZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBodHRwY2xpZW50ID0gSHR0cENsaWVudHMuY3JlYXRlRGVmYXVsdCgpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBodHRwcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGh0dHBwb3N0LmFkZEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBTdHJpbmdFbnRpdHkoYm9keSwgQ29uc3RzLlVURl84KSk7CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBodHRwY2xpZW50LmV4ZWN1dGUoaHR0cHBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoR3JhcGhTT05Ub2tlbnMuUFJPUEVSVElFUykpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBY2NlcHRNYXRlcmlhbGl6ZVByb3BlcnRpZXNUb2tlbnNJblJlcXVlc3RCb2R5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyBib2R5ID0gInsgXCJncmVtbGluXCI6IFwiIiArICJnbW9kZXJuLlYoKS5saW1pdCgxKSIgKyAiXCIsXCJsYW5ndWFnZVwiOlwiZ3JlbWxpbi1ncm9vdnlcIixcIiIKKyAgICAgICAgICAgICAgICArIEFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUyArICJcIjpcIiIgKyBNQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUyArICJcIn0iOworICAgICAgICBmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgICAgIGZpbmFsIEh0dHBQb3N0IGh0dHBwb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworICAgICAgICBodHRwcG9zdC5zZXRFbnRpdHkobmV3IFN0cmluZ0VudGl0eShib2R5LCBDb25zdHMuVVRGXzgpKTsKKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGh0dHBjbGllbnQuZXhlY3V0ZShodHRwcG9zdCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBhc3NlcnROdWxsKG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldChHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdENvbnRhaW5TdGF0dXNNZXNzYWdlT3JFeGNlcHRpb25XaXRoMjAwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICBmaW5hbCBCeXRlQnVmIHNlcmlhbGl6ZWRSZXF1ZXN0ID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoCisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuaW5qZWN0KDIpIikuY3JlYXRlKCksCisgICAgICAgICAgICAgICAgbmV3IFVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcihmYWxzZSkpOworCisgICAgICAgIGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgaHR0cGNsaWVudCA9IEh0dHBDbGllbnRzLmNyZWF0ZURlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgaHR0cHBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBodHRwcG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaHR0cHBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoc2VyaWFsaXplZFJlcXVlc3QuYXJyYXkoKSkpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gaHR0cGNsaWVudC5leGVjdXRlKGh0dHBwb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBhc3NlcnROdWxsKG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoIm1lc3NhZ2UiKSk7CisgICAgICAgICAgICBhc3NlcnROdWxsKG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoImV4Y2VwdGlvbiIpKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEJ5dGVCdWYgdG9CeXRlQnVmKGZpbmFsIEh0dHBFbnRpdHkgaHR0cEVudGl0eSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGFzQXJyYXkgPSBuZXcgYnl0ZVsoaW50KWh0dHBFbnRpdHkuZ2V0Q29udGVudExlbmd0aCgpXTsKLQotICAgICAgICBodHRwRW50aXR5LmdldENvbnRlbnQoKS5yZWFkKGFzQXJyYXkpOwotCisgICAgICAgIGZpbmFsIGJ5dGVbXSBhc0FycmF5ID0gRW50aXR5VXRpbHMudG9CeXRlQXJyYXkoaHR0cEVudGl0eSk7CiAgICAgICAgIHJldHVybiBVbnBvb2xlZC53cmFwcGVkQnVmZmVyKGFzQXJyYXkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckh0dHBUcmFuc2FjdGlvbkludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckh0dHBUcmFuc2FjdGlvbkludGVncmF0ZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDYxYmZhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVySHR0cFRyYW5zYWN0aW9uSW50ZWdyYXRlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNzUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuQ29uc3RzOworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwSGVhZGVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuQ2xvc2VhYmxlSHR0cFJlc3BvbnNlOworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwUG9zdDsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LkJ5dGVBcnJheUVudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LlN0cmluZ0VudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQuQ2xvc2VhYmxlSHR0cENsaWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQuSHR0cENsaWVudHM7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLnV0aWwuRW50aXR5VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5UcmFuc2FjdGlvbk1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Ub2tlbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5VVUlEOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zLlRPS0VOX0RBVEE7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zLlRPS0VOX1JFU1VMVDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworLyoqCisgKiBTZXJ2ZXItc2lkZSBpbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgSFRUUCB0cmFuc2FjdGlvbiBwcm90b2NvbC4KKyAqIAorICogVGhlc2UgdGVzdHMgYnlwYXNzIHRoZSBkcml2ZXIgZW50aXJlbHkgYW5kIHVzZSBhIHJhdyBBcGFjaGUgSFRUUCBjbGllbnQgdG8gaGl0IHRoZSBzZXJ2ZXIncyBIVFRQIGVuZHBvaW50IGRpcmVjdGx5LgorICogVGhpcyB2YWxpZGF0ZXMgdGhhdCB0aGUgc2VydmVyIHJldHVybnMgdGhlIGNvcnJlY3Qgc3RhdHVzIGNvZGVzIGFuZCBlcnJvciBtZXNzYWdlcyBpbmRlcGVuZGVudCBvZiBhbnkgY2xpZW50LXNpZGUKKyAqIGd1YXJkcy4KKyAqLworcHVibGljIGNsYXNzIEdyZW1saW5TZXJ2ZXJIdHRwVHJhbnNhY3Rpb25JbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBHVFggPSAiZ3R4IjsKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisgICAgcHJpdmF0ZSBDbG9zZWFibGVIdHRwQ2xpZW50IGNsaWVudDsKKworICAgIEBCZWZvcmUKKyAgICBwdWJsaWMgdm9pZCBjcmVhdGVIdHRwQ2xpZW50KCkgeworICAgICAgICBjbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7CisgICAgfQorCisgICAgQEFmdGVyCisgICAgcHVibGljIHZvaWQgY2xvc2VIdHRwQ2xpZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGNsaWVudC5jbG9zZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTZXR0aW5ncyBvdmVycmlkZVNldHRpbmdzKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7CisgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gSHR0cENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG5hbWVPZlRlc3QgPSBuYW1lLmdldE1ldGhvZE5hbWUoKTsKKyAgICAgICAgc3dpdGNoIChuYW1lT2ZUZXN0KSB7CisgICAgICAgICAgICBjYXNlICJzaG91bGRSZWplY3RSZXF1ZXN0V2hlbk1heENvbmN1cnJlbnRUcmFuc2FjdGlvbnNFeGNlZWRlZCI6CisgICAgICAgICAgICAgICAgc2V0dGluZ3MubWF4Q29uY3VycmVudFRyYW5zYWN0aW9ucyA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzaG91bGRUaW1lb3V0RnJlZVNsb3RVbmRlck1heENvbmN1cnJlbnRUcmFuc2FjdGlvbnMiOgorICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heENvbmN1cnJlbnRUcmFuc2FjdGlvbnMgPSAxOworICAgICAgICAgICAgICAgIHNldHRpbmdzLnRyYW5zYWN0aW9uVGltZW91dCA9IDEwMDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzaG91bGRUaW1lb3V0SWRsZVRyYW5zYWN0aW9uV2l0aE5vT3BlcmF0aW9ucyI6CisgICAgICAgICAgICAgICAgc2V0dGluZ3MudHJhbnNhY3Rpb25UaW1lb3V0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInNob3VsZFRpbWVvdXRBbmRSZWplY3RMYXRlQ29tbWl0IjoKKyAgICAgICAgICAgIGNhc2UgInNob3VsZFRyYWNrVHJhbnNhY3Rpb25Db3VudEFjY3VyYXRlbHkiOgorICAgICAgICAgICAgICAgIHNldHRpbmdzLnRyYW5zYWN0aW9uVGltZW91dCA9IDEwMDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJzaG91bGRSb2xsYmFja0FiYW5kb25lZFRyYW5zYWN0aW9uIjoKKyAgICAgICAgICAgICAgICBzZXR0aW5ncy50cmFuc2FjdGlvblRpbWVvdXQgPSAzMDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNldHRpbmdzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNlbmRzIGEgSlNPTiBQT1NUIHJlcXVlc3QgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlLiBDYWxsZXIgbXVzdCBjbG9zZSB0aGUgcmVzcG9uc2UuCisgICAgICovCisgICAgcHJpdmF0ZSBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcG9zdEpzb24oZmluYWwgQ2xvc2VhYmxlSHR0cENsaWVudCBjbGllbnQsIGZpbmFsIFN0cmluZyBqc29uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgcG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIHBvc3QuYWRkSGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpOworICAgICAgICBwb3N0LnNldEVudGl0eShuZXcgU3RyaW5nRW50aXR5KGpzb24sIENvbnN0cy5VVEZfOCkpOworICAgICAgICByZXR1cm4gY2xpZW50LmV4ZWN1dGUocG9zdCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZHMgYSBiZWdpbiB0cmFuc2FjdGlvbiByZXF1ZXN0IGZvciB0aGUgZ2l2ZW4gZ3JhcGggYWxpYXMgYW5kIHJldHVybnMgdGhlIHNlcnZlci1nZW5lcmF0ZWQgdHJhbnNhY3Rpb24gSUQuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgYmVnaW5UeChmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGNsaWVudCwgZmluYWwgU3RyaW5nIGdyYXBoQWxpYXMpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IHBvc3RKc29uKGNsaWVudCwKKyAgICAgICAgICAgICAgICAie1wiZ3JlbWxpblwiOlwiZy50eCgpLmJlZ2luKClcIixcImdcIjpcIiIgKyBncmFwaEFsaWFzICsgIlwifSIpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0eElkSGVhZGVyID0gcmVzcG9uc2UuZ2V0Rmlyc3RIZWFkZXIoVG9rZW5zLkhlYWRlcnMuVFJBTlNBQ1RJT05fSUQpLmdldFZhbHVlKCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IEVudGl0eVV0aWxzLnRvU3RyaW5nKHJlc3BvbnNlLmdldEVudGl0eSgpKTsKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdHhJZEJvZHkgPSBub2RlLmdldChUT0tFTl9SRVNVTFQpLgorICAgICAgICAgICAgICAgICAgICBnZXQoVE9LRU5fREFUQSkuCisgICAgICAgICAgICAgICAgICAgIGdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKS4KKyAgICAgICAgICAgICAgICAgICAgZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDEpLgorICAgICAgICAgICAgICAgICAgICBhc1RleHQoKTsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwodHhJZEhlYWRlcik7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHModHhJZEhlYWRlciwgdHhJZEJvZHkpOworICAgICAgICAgICAgcmV0dXJuIHR4SWRIZWFkZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kcyBhIHRyYXZlcnNhbCB3aXRoaW4gYW4gZXhpc3RpbmcgdHJhbnNhY3Rpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBDbG9zZWFibGVIdHRwUmVzcG9uc2Ugc3VibWl0SW5UeChmaW5hbCBDbG9zZWFibGVIdHRwQ2xpZW50IGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0eElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZ3JhcGhBbGlhcykKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcG9zdEpzb24oY2xpZW50LAorICAgICAgICAgICAgICAgICJ7XCJncmVtbGluXCI6XCIiICsgZ3JlbWxpbiArICJcIixcImdcIjpcIiIgKyBncmFwaEFsaWFzICsgIlwiLFwidHJhbnNhY3Rpb25JZFwiOlwiIiArIHR4SWQgKyAiXCJ9Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZHMgYSBjb21taXQgZm9yIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIGNvbW1pdFR4KGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0eElkLCBmaW5hbCBTdHJpbmcgZ3JhcGhBbGlhcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBwb3N0SnNvbihjbGllbnQsCisgICAgICAgICAgICAgICAgIntcImdyZW1saW5cIjpcImcudHgoKS5jb21taXQoKVwiLFwiZ1wiOlwiIiArIGdyYXBoQWxpYXMgKyAiXCIsXCJ0cmFuc2FjdGlvbklkXCI6XCIiICsgdHhJZCArICJcIn0iKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kcyBhIHJvbGxiYWNrIGZvciBhbiBleGlzdGluZyB0cmFuc2FjdGlvbi4KKyAgICAgKi8KKyAgICBwcml2YXRlIENsb3NlYWJsZUh0dHBSZXNwb25zZSByb2xsYmFja1R4KGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHR4SWQsIGZpbmFsIFN0cmluZyBncmFwaEFsaWFzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHBvc3RKc29uKGNsaWVudCwKKyAgICAgICAgICAgICAgICAie1wiZ3JlbWxpblwiOlwiZy50eCgpLnJvbGxiYWNrKClcIixcImdcIjpcIiIgKyBncmFwaEFsaWFzICsgIlwiLFwidHJhbnNhY3Rpb25JZFwiOlwiIiArIHR4SWQgKyAiXCJ9Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZHMgYSBub24tdHJhbnNhY3Rpb25hbCB0cmF2ZXJzYWwgKG5vIHRyYW5zYWN0aW9uSWQpLgorICAgICAqLworICAgIHByaXZhdGUgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHN1Ym1pdE5vblR4KGZpbmFsIENsb3NlYWJsZUh0dHBDbGllbnQgY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBTdHJpbmcgZ3JhcGhBbGlhcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBwb3N0SnNvbihjbGllbnQsCisgICAgICAgICAgICAgICAgIntcImdyZW1saW5cIjpcIiIgKyBncmVtbGluICsgIlwiLFwiZ1wiOlwiIiArIGdyYXBoQWxpYXMgKyAiXCJ9Iik7CisgICAgfQorCisgICAgLyoqCisgICAgICogRXh0cmFjdHMgdGhlIGludGVnZXIgY291bnQgZnJvbSBhIHR5cGljYWwgY291bnQoKSByZXNwb25zZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGludCBleHRyYWN0Q291bnQoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisgICAgICAgIHJldHVybiBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpCisgICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKQorICAgICAgICAgICAgICAgIC5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5pbnRWYWx1ZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEV4dHJhY3RzIHRoZSBzdGF0dXMgbWVzc2FnZSBmcm9tIHRoZSByZXNwb25zZSBib2R5J3Mgc3RhdHVzIGZpZWxkLgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGV4dHJhY3RTdGF0dXNNZXNzYWdlKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOworICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworICAgICAgICByZXR1cm4gbm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpLmFzVGV4dCgpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkTm90QmVnaW5UcmFuc2FjdGlvbldpdGhVc2VyUHJvdmlkZWRJZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgdHhJZCA9IGJlZ2luVHgoY2xpZW50LCBHVFgpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBwb3N0SnNvbihjbGllbnQsCisgICAgICAgICAgICAgICAgIntcImdyZW1saW5cIjpcImcudHgoKS5iZWdpbigpXCIsXCJnXCI6XCIiICsgR1RYICsgIlwiLFwidHJhbnNhY3Rpb25JZFwiOlwiIiArIHR4SWQgKyAiXCJ9IikpIHsKKyAgICAgICAgICAgIC8vIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBzdGlsbCBvcGVuIG9uIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgc2Vjb25kIHJlcXVlc3QgYXJyaXZlcywgdGhlcmUKKyAgICAgICAgICAgIC8vIG1heSBiZSB0d28gZGlmZmVyZW50IGVycm9ycyB0aGF0IHRoZSBzZXJ2ZXIgdGhyb3dzLgorICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkgPT0gNDA0IHx8IHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSA9PSA0MDApOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtc2cuY29udGFpbnMoIkJlZ2luIHRyYW5zYWN0aW9uIHJlcXVlc3QgY2Fubm90IGhhdmUgYSB1c2VyLXN1cHBsaWVkIHRyYW5zYWN0aW9uSWQiKSB8fAorICAgICAgICAgICAgICAgICAgICBtc2cuY29udGFpbnMoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuNDA0Rm9ySW52YWxpZENvbW1pdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBDYW4ndCBjb21taXQgb24gbm9uLWV4aXN0ZW50IHRyYW5zYWN0aW9uLgorICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gY29tbWl0VHgoY2xpZW50LCAiZmFrZUlkIiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwNCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBleHRyYWN0U3RhdHVzTWVzc2FnZShyKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUobXNnLmNvbnRhaW5zKCJUcmFuc2FjdGlvbiBub3QgZm91bmQiKSk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBTdHJpbmcgdHhJZCA9IGJlZ2luVHgoY2xpZW50LCBHVFgpOworCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZCwgImcuYWRkVigndGVzdCcpIiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gY29tbWl0VHgoY2xpZW50LCB0eElkLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gc3VibWl0IHRyYXZlcnNhbCBvbiBjb21taXR0ZWQgdHggLT4gNDA0CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZCwgImcuVigpLmNvdW50KCkiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDA0LCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtc2cuY29udGFpbnMoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNvbW1pdCBhZ2FpbiBvbiBjb21taXR0ZWQgdHggLT4gNDA0CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBjb21taXRUeChjbGllbnQsIHR4SWQsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDQsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gZXh0cmFjdFN0YXR1c01lc3NhZ2Uocik7CisgICAgICAgICAgICBhc3NlcnRUcnVlKG1zZy5jb250YWlucygiVHJhbnNhY3Rpb24gbm90IGZvdW5kIikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm40MDRGb3JJbnZhbGlkUm9sbGJhY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gQ2FuJ3Qgcm9sbGJhY2sgYSBub24tZXhpc3RlbnQgdHJhbnNhY3Rpb24uCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSByb2xsYmFja1R4KGNsaWVudCwgImZha2VJZCIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDQsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gZXh0cmFjdFN0YXR1c01lc3NhZ2Uocik7CisgICAgICAgICAgICBhc3NlcnRUcnVlKG1zZy5jb250YWlucygiVHJhbnNhY3Rpb24gbm90IGZvdW5kIikpOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgU3RyaW5nIHR4SWQgPSBiZWdpblR4KGNsaWVudCwgR1RYKTsKKworICAgICAgICAvLyBhZGQgYSB2ZXJ0ZXggYW5kIHJvbGxiYWNrCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZCwgImcuYWRkVigndGVzdCcpIiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfQorICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gcm9sbGJhY2tUeChjbGllbnQsIHR4SWQsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBzdWJtaXQgdHJhdmVyc2FsIG9uIHJvbGxlZC1iYWNrIHR4IC0+IDQwNAorICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gc3VibWl0SW5UeChjbGllbnQsIHR4SWQsICJnLlYoKS5jb3VudCgpIiwgR1RYKSkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwNCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUobXNnLmNvbnRhaW5zKCJUcmFuc2FjdGlvbiBub3QgZm91bmQiKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyByb2xsYmFjayBhZ2FpbiBvbiByb2xsZWQtYmFjayB0eCAtPiA0MDQKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHJvbGxiYWNrVHgoY2xpZW50LCB0eElkLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDA0LCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtc2cuY29udGFpbnMoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuVmFsaWRUcmFuc2FjdGlvbklkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIGJlZ2luIHJldHVybnMgYSB2YWxpZCB0cmFuc2FjdGlvbiBJRAorICAgICAgICBmaW5hbCBTdHJpbmcgdHhJZDEgPSBiZWdpblR4KGNsaWVudCwgR1RYKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCh0eElkMSk7CisgICAgICAgIGFzc2VydEZhbHNlKHR4SWQxLmlzQmxhbmsoKSk7CisKKyAgICAgICAgLy8gc2Vjb25kIGJlZ2luIHJldHVybnMgYSBkaWZmZXJlbnQgSUQKKyAgICAgICAgZmluYWwgU3RyaW5nIHR4SWQyID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisgICAgICAgIGFzc2VydE5vdE51bGwodHhJZDIpOworICAgICAgICBhc3NlcnRGYWxzZSh0eElkMi5pc0JsYW5rKCkpOworICAgICAgICBhc3NlcnROb3RFcXVhbHModHhJZDEsIHR4SWQyKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybjQwNEZvckludmFsaWRUcmFuc2FjdGlvbklkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyBmYWtlVHhJZCA9IFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCk7CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdEluVHgoY2xpZW50LCBmYWtlVHhJZCwgImcuVigpLmNvdW50KCkiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDA0LCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtc2cuY29udGFpbnMoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVqZWN0UmVxdWVzdFdoZW5NYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zRXhjZWVkZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gb3BlbiBvbmUgdHJhbnNhY3Rpb24gKGZpbGxzIHRoZSBsaW1pdCkKKyAgICAgICAgYmVnaW5UeChjbGllbnQsIEdUWCk7CisKKyAgICAgICAgLy8gdHJ5IHRvIG9wZW4gYW5vdGhlciAtLSBzaG91bGQgZmFpbCB3aXRoIDUwMyAoU0VSVklDRV9VTkFWQUlMQUJMRSkKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHBvc3RKc29uKGNsaWVudCwKKyAgICAgICAgICAgICAgICAie1wiZ3JlbWxpblwiOlwiZy50eCgpLmJlZ2luKClcIixcImdcIjpcIiIgKyBHVFggKyAiXCJ9IikpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1MDMsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gZXh0cmFjdFN0YXR1c01lc3NhZ2Uocik7CisgICAgICAgICAgICBhc3NlcnRUcnVlKG1zZy5jb250YWlucygiTWF4aW11bSBjb25jdXJyZW50IHRyYW5zYWN0aW9ucyBleGNlZWRlZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVqZWN0RW1wdHlUcmFuc2FjdGlvbklkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgImludmFsaWQiLCAiZy50eCgpLmJlZ2luKCkiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtc2cuY29udGFpbnMoIkJlZ2luIHRyYW5zYWN0aW9uIHJlcXVlc3QgY2Fubm90IGhhdmUgYSB1c2VyLXN1cHBsaWVkIHRyYW5zYWN0aW9uSWQiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVvdXRJZGxlVHJhbnNhY3Rpb25XaXRoTm9PcGVyYXRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisKKyAgICAgICAgLy8gd2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIHRpbWVvdXQgKGNvbmZpZ3VyZWQgYXQgMW1zKQorICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisKKyAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBnb25lCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZCwgImcuVigpLmNvdW50KCkiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDA0LCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9IGV4dHJhY3RTdGF0dXNNZXNzYWdlKHIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtc2cuY29udGFpbnMoIlRyYW5zYWN0aW9uIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVGltZW91dEFuZFJlamVjdExhdGVDb21taXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHR4SWQgPSBiZWdpblR4KGNsaWVudCwgR1RYKTsKKworICAgICAgICAvLyBhZGQgYSB2ZXJ0ZXgKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdEluVHgoY2xpZW50LCB0eElkLCAiZy5hZGRWKCd0aW1lb3V0X3Rlc3QnKSIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB3YWl0IGZvciB0aW1lb3V0IChjb25maWd1cmVkIGF0IDEwMDBtcykKKyAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDApOworCisgICAgICAgIC8vIGF0dGVtcHQgY29tbWl0IC0tIHNob3VsZCBmYWlsIHdpdGggNDA0CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBjb21taXRUeChjbGllbnQsIHR4SWQsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDQsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gZXh0cmFjdFN0YXR1c01lc3NhZ2Uocik7CisgICAgICAgICAgICBhc3NlcnRUcnVlKG1zZy5jb250YWlucygiVHJhbnNhY3Rpb24gbm90IGZvdW5kIikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gdmVyaWZ5IGRhdGEgd2FzIG5vdCBwZXJzaXN0ZWQKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdE5vblR4KGNsaWVudCwgImcuVigpLmhhc0xhYmVsKCd0aW1lb3V0X3Rlc3QnKS5jb3VudCgpIiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBleHRyYWN0Q291bnQocikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmFja1RyYW5zYWN0aW9uQ291bnRBY2N1cmF0ZWx5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFRyYW5zYWN0aW9uTWFuYWdlciB0eE1hbmFnZXIgPSBzZXJ2ZXIuZ2V0U2VydmVyR3JlbWxpbkV4ZWN1dG9yKCkuZ2V0VHJhbnNhY3Rpb25NYW5hZ2VyKCk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCB0eE1hbmFnZXIuZ2V0QWN0aXZlVHJhbnNhY3Rpb25Db3VudCgpKTsKKworICAgICAgICAvLyBvcGVuIDMgdHJhbnNhY3Rpb25zCisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkMSA9IGJlZ2luVHgoY2xpZW50LCBHVFgpOworICAgICAgICBmaW5hbCBTdHJpbmcgdHhJZDIgPSBiZWdpblR4KGNsaWVudCwgR1RYKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHR4SWQzID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHR4TWFuYWdlci5nZXRBY3RpdmVUcmFuc2FjdGlvbkNvdW50KCkpOworCisgICAgICAgIC8vIGNvbW1pdCBvbmUKKyAgICAgICAgY29tbWl0VHgoY2xpZW50LCB0eElkMSwgR1RYKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHR4TWFuYWdlci5nZXRBY3RpdmVUcmFuc2FjdGlvbkNvdW50KCkpOworCisgICAgICAgIC8vIHJvbGxiYWNrIG9uZQorICAgICAgICByb2xsYmFja1R4KGNsaWVudCwgdHhJZDIsIEdUWCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCB0eE1hbmFnZXIuZ2V0QWN0aXZlVHJhbnNhY3Rpb25Db3VudCgpKTsKKworICAgICAgICAvLyBsZXQgdGhlIHRoaXJkIG9uZSB0aW1lb3V0CisgICAgICAgIFRocmVhZC5zbGVlcCgxNTAwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHR4TWFuYWdlci5nZXRBY3RpdmVUcmFuc2FjdGlvbkNvdW50KCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkVGltZW91dEZyZWVTbG90VW5kZXJNYXhDb25jdXJyZW50VHJhbnNhY3Rpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFRyYW5zYWN0aW9uTWFuYWdlciB0bSA9IHNlcnZlci5nZXRTZXJ2ZXJHcmVtbGluRXhlY3V0b3IoKS5nZXRUcmFuc2FjdGlvbk1hbmFnZXIoKTsKKworICAgICAgICAvLyBmaWxsIHRoZSBzaW5nbGUgc2xvdAorICAgICAgICBiZWdpblR4KGNsaWVudCwgR1RYKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRtLmdldEFjdGl2ZVRyYW5zYWN0aW9uQ291bnQoKSk7CisKKyAgICAgICAgLy8gd2FpdCBmb3IgdGltZW91dCB0byByZWNsYWltIHRoZSBzbG90CisgICAgICAgIFRocmVhZC5zbGVlcCgyMDAwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHRtLmdldEFjdGl2ZVRyYW5zYWN0aW9uQ291bnQoKSk7CisKKyAgICAgICAgLy8gbm93IGEgbmV3IHRyYW5zYWN0aW9uIHNob3VsZCBzdWNjZWVkCisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisgICAgICAgIGFzc2VydE5vdE51bGwodHhJZCk7CisgICAgICAgIGFzc2VydEZhbHNlKHR4SWQuaXNCbGFuaygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybjQwNEZvckFsbE9wZXJhdGlvbnNPbkNsb3NlZFRyYW5zYWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkMSA9IGJlZ2luVHgoY2xpZW50LCBHVFgpOworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gc3VibWl0SW5UeChjbGllbnQsIHR4SWQxLCAiZy5hZGRWKCd0ZXN0MzgnKSIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IGNvbW1pdFR4KGNsaWVudCwgdHhJZDEsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyByb2xsYmFjay1hZnRlci1jb21taXQKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHJvbGxiYWNrVHgoY2xpZW50LCB0eElkMSwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwNCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfQorICAgICAgICAvLyB0cmF2ZXJzYWwtYWZ0ZXItY29tbWl0CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZDEsICJnLlYoKS5jb3VudCgpIiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwNCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkMiA9IGJlZ2luVHgoY2xpZW50LCBHVFgpOworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gc3VibWl0SW5UeChjbGllbnQsIHR4SWQyLCAiZy5hZGRWKCd0ZXN0MzhiJykiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICB9CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSByb2xsYmFja1R4KGNsaWVudCwgdHhJZDIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjb21taXQtYWZ0ZXItcm9sbGJhY2sKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IGNvbW1pdFR4KGNsaWVudCwgdHhJZDIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDQsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgLy8gdHJhdmVyc2FsLWFmdGVyLXJvbGxiYWNrCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHIgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZDIsICJnLlYoKS5jb3VudCgpIiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwNCwgci5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkTm90TGVha0RhdGFXaGVuVHJhdmVyc2FsUXVldWVkQmVoaW5kQ29tbWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisKKyAgICAgICAgLy8gYWRkIHZlcnRpY2VzIGFuZCBhbiBlZGdlIGluIHRoZSB0cmFuc2FjdGlvbgorICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gc3VibWl0SW5UeChjbGllbnQsIHR4SWQsICJnLmFkZFYoKS5wcm9wZXJ0eShULmlkLCAxKSIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdEluVHgoY2xpZW50LCB0eElkLCAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgMikiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmlyZSB0aHJlZSByZXF1ZXN0cyBjb25jdXJyZW50bHk6IGEgbG9uZyB0cmF2ZXJzYWwgdG8gb2NjdXB5IHRoZSBzZXJ2ZXIgZXhlY3V0b3IsIHRoZW4gYSBjb21taXQgdGhhdCBxdWV1ZXMKKyAgICAgICAgLy8gYmVoaW5kIGl0LCB0aGVuIGEgc2hvcnQgcXVlcnkgdGhhdCBxdWV1ZXMgYmVoaW5kIHRoZSBjb21taXQuIFRoZSBzaG9ydCBxdWVyeSBzaG91bGQgZmFpbCB3aXRoIDQwNCBiZWNhdXNlIHRoZQorICAgICAgICAvLyBjb21taXQgY2xvc2VzIHRoZSB0cmFuc2FjdGlvbiBmaXJzdC4KKyAgICAgICAgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld0ZpeGVkVGhyZWFkUG9vbCgzKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIEZ1dHVyZTxDbG9zZWFibGVIdHRwUmVzcG9uc2U+IGxvbmdGdXR1cmUgPSBleGVjdXRvci5zdWJtaXQoKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgc3VibWl0SW5UeChjbGllbnQsIHR4SWQsICJnLlYoKS5yZXBlYXQoYm90aCgpKS50aW1lcygxMDAwKSIsIEdUWCkpOworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDUwKTsKKworICAgICAgICAgICAgZmluYWwgRnV0dXJlPENsb3NlYWJsZUh0dHBSZXNwb25zZT4gY29tbWl0RnV0dXJlID0gZXhlY3V0b3Iuc3VibWl0KCgpIC0+CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdFR4KGNsaWVudCwgdHhJZCwgR1RYKSk7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoNTApOworCisgICAgICAgICAgICBmaW5hbCBGdXR1cmU8Q2xvc2VhYmxlSHR0cFJlc3BvbnNlPiBzaG9ydEZ1dHVyZSA9IGV4ZWN1dG9yLnN1Ym1pdCgoKSAtPgorICAgICAgICAgICAgICAgICAgICBzdWJtaXRJblR4KGNsaWVudCwgdHhJZCwgImcuVigpLmNvdW50KCkiLCBHVFgpKTsKKworICAgICAgICAgICAgLy8gY29sbGVjdCByZXNwb25zZXMKKyAgICAgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIGlnbm9yZWQgPSBsb25nRnV0dXJlLmdldCgzMCwgVGltZVVuaXQuU0VDT05EUykpIHsKKyAgICAgICAgICAgICAgICAvLyBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IHRoZSBsb25nIHRyYXZlcnNhbCByZXR1cm5zLCBvbmx5IHRoYXQgaXQgcmFuCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSBjb21taXRSZXNwID0gY29tbWl0RnV0dXJlLmdldCgzMCwgVGltZVVuaXQuU0VDT05EUykpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBjb21taXRSZXNwLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2Ugc2hvcnRSZXNwID0gc2hvcnRGdXR1cmUuZ2V0KDMwLCBUaW1lVW5pdC5TRUNPTkRTKSkgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0MDQsIHNob3J0UmVzcC5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gZXh0cmFjdFN0YXR1c01lc3NhZ2Uoc2hvcnRSZXNwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKG1zZy5jb250YWlucygiVHJhbnNhY3Rpb24gbm90IGZvdW5kIikpOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgZXhlY3V0b3Iuc2h1dGRvd25Ob3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUm9sbGJhY2tBYmFuZG9uZWRUcmFuc2FjdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgdHhJZDEgPSBiZWdpblR4KGNsaWVudCwgR1RYKTsKKyAgICAgICAgc3VibWl0SW5UeChjbGllbnQsIHR4SWQxLCAiZy5hZGRWKCkiLCBHVFgpOworCisgICAgICAgIC8vIHdhaXQgZm9yIHNlcnZlci1zaWRlIHRpbWVvdXQKKyAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOworCisgICAgICAgIC8vIHJlY29ubmVjdCBhbmQgdmVyaWZ5IGRhdGEgd2FzIG5vdCBwZXJzaXN0ZWQKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdE5vblR4KGNsaWVudCwgImcuVigpLmNvdW50KCkiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZXh0cmFjdENvdW50KHIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVqZWN0TWlzbWF0Y2hlZEdyYXBoQWxpYXNJblRyYW5zYWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisKKyAgICAgICAgLy8gc2VuZCBhIHJlcXVlc3Qgd2l0aCB0aGUgc2FtZSB0eElkIGJ1dCBhIGRpZmZlcmVudCBncmFwaCBhbGlhcworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByID0gc3VibWl0SW5UeChjbGllbnQsIHR4SWQsICJnLlYoKS5jb3VudCgpIiwgImdjbGFzc2ljIikpIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBzdGF0dXMgPSByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKCJFeHBlY3RlZCBlcnJvciBzdGF0dXMgZm9yIGFsaWFzIG1pc21hdGNoLCBnb3QgIiArIHN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID09IDQwMCB8fCBzdGF0dXMgPT0gNDA0IHx8IHN0YXR1cyA9PSA1MDApOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXF1aXJlR3JhcGhBbGlhc09uQmVnaW5SZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIGJlZ2luIHdpdGggbm8gZyBhbGlhcyAtLSBzaG91bGQgZGVmYXVsdCB0byAiZyIgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHRyYW5zYWN0aW9ucworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IHBvc3RKc29uKGNsaWVudCwKKyAgICAgICAgICAgICAgICAie1wiZ3JlbWxpblwiOlwiZy50eCgpLmJlZ2luKClcIn0iKSkgeworICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCBzdGF0dXMpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleHRyYWN0U3RhdHVzTWVzc2FnZShyZXNwb25zZSkuY29udGFpbnMoIkdyYXBoIGRvZXMgbm90IHN1cHBvcnQgdHJhbnNhY3Rpb25zIikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYmVnaW4gd2l0aCBhbiBpbnZhbGlkIGFsaWFzIC0tIHNob3VsZCBmYWlsCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gcG9zdEpzb24oY2xpZW50LAorICAgICAgICAgICAgICAgICJ7XCJncmVtbGluXCI6XCJnLnR4KCkuYmVnaW4oKVwiLFwiZ1wiOlwibm9uZXhpc3RlbnRcIn0iKSkgeworICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCBzdGF0dXMpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleHRyYWN0U3RhdHVzTWVzc2FnZShyZXNwb25zZSkuY29udGFpbnMoIkNvdWxkIG5vdCBhbGlhcyIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGJlZ2luIHdpdGggdmFsaWQgYWxpYXMgLS0gc2hvdWxkIHN1Y2NlZWQgKHBvc2l0aXZlIGNhc2UpCisgICAgICAgIGZpbmFsIFN0cmluZyB0eElkID0gYmVnaW5UeChjbGllbnQsIEdUWCk7CisgICAgICAgIGFzc2VydE5vdE51bGwodHhJZCk7CisgICAgICAgIGFzc2VydEZhbHNlKHR4SWQuaXNCbGFuaygpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlcXVpcmVUcmFuc2FjdGlvbklkT25Db21taXRBbmRSb2xsYmFjaygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBjb21taXQgd2l0aCBubyB0cmFuc2FjdGlvbklkIC0tIHRoaXMgaXMganVzdCAiZy50eCgpLmNvbW1pdCgpIiB3aXRoIG5vIHR4SWQsCisgICAgICAgIC8vIHdoaWNoIHRoZSBzZXJ2ZXIgdHJlYXRzIGFzIGEgYmVnaW4gKHNpbmNlIHRoZXJlJ3Mgbm8gdHhJZCkuIEJ1dCB0aGUgZ3JlbWxpbiBpcworICAgICAgICAvLyAiZy50eCgpLmNvbW1pdCgpIiBub3QgImcudHgoKS5iZWdpbigpIiwgc28gdGhlIHNlcnZlciBzaG91bGQgcm91dGUgdG8gY29tbWl0CisgICAgICAgIC8vIGhhbmRsaW5nIHdoaWNoIHJlcXVpcmVzIGEgdHhJZC4gVGhlIGV4YWN0IGJlaGF2aW9yIGRlcGVuZHMgb24gdGhlIHJvdXRpbmcgbG9naWMuCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gcG9zdEpzb24oY2xpZW50LAorICAgICAgICAgICAgICAgICJ7XCJncmVtbGluXCI6XCJnLnR4KCkuY29tbWl0KClcIixcImdcIjpcImd0eFwifSIpKSB7CisgICAgICAgICAgICAvLyB3aXRob3V0IGEgdHJhbnNhY3Rpb25JZCwgdGhpcyBzaG91bGQgbm90IHN1Y2NlZWQgYXMgYSBjb21taXQKKyAgICAgICAgICAgIGZpbmFsIGludCBzdGF0dXMgPSByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpOworICAgICAgICAgICAgLy8gdGhlIHNlcnZlciBtYXkgdHJlYXQgdGhpcyBhcyBhIG5vbi10cmFuc2FjdGlvbmFsIHJlcXVlc3Qgb3IgcmVqZWN0IGl0CisgICAgICAgICAgICAvLyBlaXRoZXIgd2F5IGl0IHNob3VsZCBub3QgYmUgYSBzdWNjZXNzZnVsIGNvbW1pdCBvZiBhIHRyYW5zYWN0aW9uCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCBzdGF0dXMpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleHRyYWN0U3RhdHVzTWVzc2FnZShyZXNwb25zZSkuY29udGFpbnMoIm9ubHkgYWxsb3dlZCBpbiB0cmFuc2FjdGlvbmFsIHJlcXVlc3RzIikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gcm9sbGJhY2sgd2l0aCBubyB0cmFuc2FjdGlvbklkIC0tIHNhbWUgbG9naWMKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBwb3N0SnNvbihjbGllbnQsCisgICAgICAgICAgICAgICAgIntcImdyZW1saW5cIjpcImcudHgoKS5yb2xsYmFjaygpXCIsXCJnXCI6XCJndHhcIn0iKSkgeworICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAwLCBzdGF0dXMpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleHRyYWN0U3RhdHVzTWVzc2FnZShyZXNwb25zZSkuY29udGFpbnMoIm9ubHkgYWxsb3dlZCBpbiB0cmFuc2FjdGlvbmFsIHJlcXVlc3RzIikpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWplY3RCZWdpbk9uTm9uVHJhbnNhY3Rpb25hbEdyYXBoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIGdjbGFzc2ljIGlzIGJhY2tlZCBieSBUaW5rZXJHcmFwaCAobm9uLXRyYW5zYWN0aW9uYWwpCisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gcG9zdEpzb24oY2xpZW50LAorICAgICAgICAgICAgICAgICJ7XCJncmVtbGluXCI6XCJnLnR4KCkuYmVnaW4oKVwiLFwiZ1wiOlwiZ2NsYXNzaWNcIn0iKSkgeworICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IHJlc3BvbnNlLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKCJFeHBlY3RlZCBlcnJvciBmb3Igbm9uLXRyYW5zYWN0aW9uYWwgZ3JhcGgsIGdvdCAiICsgc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPT0gNDAwIHx8IHN0YXR1cyA9PSA1MDApOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSb3VuZFRyaXBUcmFuc2FjdGlvbklkV2l0aEdyYXBoQmluYXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworCisgICAgICAgIC8vIGJlZ2luIHZpYSBHcmFwaEJpbmFyeQorICAgICAgICBmaW5hbCBCeXRlQnVmIGJlZ2luUmVxID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoCisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcudHgoKS5iZWdpbigpIikuYWRkRyhHVFgpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgYmVnaW5Qb3N0ID0gbmV3IEh0dHBQb3N0KFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVVSTFN0cmluZygpKTsKKyAgICAgICAgYmVnaW5Qb3N0LmFkZEhlYWRlcihIdHRwSGVhZGVycy5DT05URU5UX1RZUEUsIFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LmdldFZhbHVlKCkpOworICAgICAgICBiZWdpblBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGJlZ2luUG9zdC5zZXRFbnRpdHkobmV3IEJ5dGVBcnJheUVudGl0eShiZWdpblJlcS5hcnJheSgpKSk7CisKKyAgICAgICAgU3RyaW5nIHR4SWQ7CisgICAgICAgIHRyeSAoZmluYWwgQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gY2xpZW50LmV4ZWN1dGUoYmVnaW5Qb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2Ugcm0gPSBzZXJpYWxpemVyLnJlYWRDaHVuayh0b0J5dGVCdWYocmVzcG9uc2UuZ2V0RW50aXR5KCkpLCB0cnVlKTsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8Pz4gZGF0YSA9IHJtLmdldFJlc3VsdCgpLmdldERhdGEoKTsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoZGF0YSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKGRhdGEuc2l6ZSgpID4gMCk7CisgICAgICAgICAgICAvLyB0aGUgZGF0YSBzaG91bGQgY29udGFpbiBhIG1hcCB3aXRoIHRyYW5zYWN0aW9uSWQKKyAgICAgICAgICAgIGZpbmFsIE1hcDw/LCA/PiBtYXAgPSAoamF2YS51dGlsLk1hcDw/LCA/PikgZGF0YS5nZXQoMCk7CisgICAgICAgICAgICB0eElkID0gKFN0cmluZykgbWFwLmdldChUb2tlbnMuQVJHU19UUkFOU0FDVElPTl9JRCk7CisgICAgICAgICAgICBhc3NlcnROb3ROdWxsKHR4SWQpOworICAgICAgICAgICAgYXNzZXJ0RmFsc2UodHhJZC5pc0JsYW5rKCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gYWRkViB2aWEgR3JhcGhCaW5hcnkKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBhZGRWUmVxID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoCisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuYWRkVignYmluYXJ5X3Rlc3QnKSIpLmFkZEcoR1RYKS5hZGRUcmFuc2FjdGlvbklkKHR4SWQpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgYWRkVlBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBhZGRWUG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFLCBTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgYWRkVlBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGFkZFZQb3N0LnNldEVudGl0eShuZXcgQnl0ZUFycmF5RW50aXR5KGFkZFZSZXEuYXJyYXkoKSkpOworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGNsaWVudC5leGVjdXRlKGFkZFZQb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjb21taXQgdmlhIEdyYXBoQmluYXJ5CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgY29tbWl0UmVxID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoCisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcudHgoKS5jb21taXQoKSIpLmFkZEcoR1RYKS5hZGRUcmFuc2FjdGlvbklkKHR4SWQpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgY29tbWl0UG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGNvbW1pdFBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGNvbW1pdFBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGNvbW1pdFBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoY29tbWl0UmVxLmFycmF5KCkpKTsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBjbGllbnQuZXhlY3V0ZShjb21taXRQb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2ZXJpZnkgZGF0YSBwZXJzaXN0ZWQKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdE5vblR4KGNsaWVudCwgImcuVigpLmhhc0xhYmVsKCdiaW5hcnlfdGVzdCcpLmNvdW50KCkiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByLmdldFN0YXR1c0xpbmUoKS5nZXRTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGV4dHJhY3RDb3VudChyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmIHRvQnl0ZUJ1ZihmaW5hbCBvcmcuYXBhY2hlLmh0dHAuSHR0cEVudGl0eSBodHRwRW50aXR5KSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIGJ5dGVbXSBhc0FycmF5ID0gRW50aXR5VXRpbHMudG9CeXRlQXJyYXkoaHR0cEVudGl0eSk7CisgICAgICAgIHJldHVybiBVbnBvb2xlZC53cmFwcGVkQnVmZmVyKGFzQXJyYXkpOworICAgIH0KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJvdW5kVHJpcFRyYW5zYWN0aW9uSWRXaXRoR3JhcGhTT04oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0IHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KCk7CisKKyAgICAgICAgLy8gYmVnaW4gdmlhIEdyYXBoU09OCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmVnaW5SZXEgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeSgKKyAgICAgICAgICAgICAgICBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZy50eCgpLmJlZ2luKCkiKS5hZGRHKEdUWCkuY3JlYXRlKCksCisgICAgICAgICAgICAgICAgbmV3IFVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcihmYWxzZSkpOworICAgICAgICBmaW5hbCBIdHRwUG9zdCBiZWdpblBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBiZWdpblBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGJlZ2luUG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQUNDRVBULCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgYmVnaW5Qb3N0LnNldEVudGl0eShuZXcgQnl0ZUFycmF5RW50aXR5KGJlZ2luUmVxLmFycmF5KCkpKTsKKworICAgICAgICBTdHJpbmcgdHhJZDsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBjbGllbnQuZXhlY3V0ZShiZWdpblBvc3QpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpLCByZXNwb25zZS5nZXRFbnRpdHkoKS5nZXRDb250ZW50VHlwZSgpLmdldFZhbHVlKCkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworICAgICAgICAgICAgdHhJZCA9IG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkKKyAgICAgICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgwKQorICAgICAgICAgICAgICAgICAgICAuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDEpCisgICAgICAgICAgICAgICAgICAgIC5hc1RleHQoKTsKKworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCh0eElkKTsKKyAgICAgICAgICAgIGFzc2VydEZhbHNlKHR4SWQuaXNCbGFuaygpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGFkZFYgdmlhIEdyYXBoU09OCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYWRkVlJlcSA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KAorICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLmFkZFYoJ2dyYXBoc29uX3Rlc3QnKSIpLmFkZEcoR1RYKS5hZGRUcmFuc2FjdGlvbklkKHR4SWQpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgYWRkVlBvc3QgPSBuZXcgSHR0cFBvc3QoVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlVVJMU3RyaW5nKCkpOworICAgICAgICBhZGRWUG9zdC5hZGRIZWFkZXIoSHR0cEhlYWRlcnMuQ09OVEVOVF9UWVBFLCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgYWRkVlBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGFkZFZQb3N0LnNldEVudGl0eShuZXcgQnl0ZUFycmF5RW50aXR5KGFkZFZSZXEuYXJyYXkoKSkpOworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGNsaWVudC5leGVjdXRlKGFkZFZQb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBjb21taXQgdmlhIEdyYXBoU09OCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgY29tbWl0UmVxID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoCisgICAgICAgICAgICAgICAgUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcudHgoKS5jb21taXQoKSIpLmFkZEcoR1RYKS5hZGRUcmFuc2FjdGlvbklkKHR4SWQpLmNyZWF0ZSgpLAorICAgICAgICAgICAgICAgIG5ldyBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IoZmFsc2UpKTsKKyAgICAgICAgZmluYWwgSHR0cFBvc3QgY29tbWl0UG9zdCA9IG5ldyBIdHRwUG9zdChUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVVUkxTdHJpbmcoKSk7CisgICAgICAgIGNvbW1pdFBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkNPTlRFTlRfVFlQRSwgU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGNvbW1pdFBvc3QuYWRkSGVhZGVyKEh0dHBIZWFkZXJzLkFDQ0VQVCwgU2VyaWFsaXplcnMuR1JBUEhTT05fVjQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGNvbW1pdFBvc3Quc2V0RW50aXR5KG5ldyBCeXRlQXJyYXlFbnRpdHkoY29tbWl0UmVxLmFycmF5KCkpKTsKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBjbGllbnQuZXhlY3V0ZShjb21taXRQb3N0KSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyB2ZXJpZnkgZGF0YSBwZXJzaXN0ZWQKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgciA9IHN1Ym1pdE5vblR4KGNsaWVudCwgImcuVigpLmhhc0xhYmVsKCdncmFwaHNvbl90ZXN0JykuY291bnQoKSIsIEdUWCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIHIuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZXh0cmFjdENvdW50KHIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuVHJhbnNhY3Rpb25JZEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgYmVnaW5Kc29uID0gIntcImdyZW1saW5cIjpcImcudHgoKS5iZWdpbigpXCIsXCJnXCI6XCIiICsgR1RYICsgIlwifSI7CisgICAgICAgIFN0cmluZyB0eElkRnJvbUJlZ2luOworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IHBvc3RKc29uKGNsaWVudCwgYmVnaW5Kc29uKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisKKyAgICAgICAgICAgIC8vIGhlYWRlciBtdXN0IGJlIHByZXNlbnQKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwocmVzcG9uc2UuZ2V0Rmlyc3RIZWFkZXIoVG9rZW5zLkhlYWRlcnMuVFJBTlNBQ1RJT05fSUQpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0eElkRnJvbUhlYWRlciA9IHJlc3BvbnNlLmdldEZpcnN0SGVhZGVyKFRva2Vucy5IZWFkZXJzLlRSQU5TQUNUSU9OX0lEKS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbCh0eElkRnJvbUhlYWRlcik7CisgICAgICAgICAgICBhc3NlcnRGYWxzZSh0eElkRnJvbUhlYWRlci5pc0JsYW5rKCkpOworCisgICAgICAgICAgICAvLyBib2R5IG11c3QgY29udGFpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBJRAorICAgICAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7CisgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworICAgICAgICAgICAgdHhJZEZyb21CZWdpbiA9IG5vZGUuZ2V0KFRPS0VOX1JFU1VMVCkuZ2V0KFRPS0VOX0RBVEEpCisgICAgICAgICAgICAgICAgICAgIC5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMCkKKyAgICAgICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldCgxKQorICAgICAgICAgICAgICAgICAgICAuYXNUZXh0KCk7CisgICAgICAgICAgICBhc3NlcnROb3ROdWxsKHR4SWRGcm9tQmVnaW4pOworICAgICAgICAgICAgYXNzZXJ0RmFsc2UodHhJZEZyb21CZWdpbi5pc0JsYW5rKCkpOworCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIlRyYW5zYWN0aW9uIElEIGluIGhlYWRlciBhbmQgYm9keSBtdXN0IG1hdGNoIG9uIGJlZ2luIiwKKyAgICAgICAgICAgICAgICAgICAgdHhJZEZyb21IZWFkZXIsIHR4SWRGcm9tQmVnaW4pOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IChmaW5hbCBDbG9zZWFibGVIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBzdWJtaXRJblR4KGNsaWVudCwgdHhJZEZyb21CZWdpbiwgImcuYWRkVignZHVhbF90ZXN0JykiLCBHVFgpKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKKworICAgICAgICAgICAgLy8gQm9keSBkb2Vzbid0IGNvbnRhaW4gdGhlIFRyYW5zYWN0aW9uIElEIGZvciBUcmF2ZXJzYWxzIGluIHRyYW5zYWN0aW9ucy4KKyAgICAgICAgICAgIGFzc2VydEVxdWFscyh0eElkRnJvbUJlZ2luLCByZXNwb25zZS5nZXRGaXJzdEhlYWRlcihUb2tlbnMuSGVhZGVycy5UUkFOU0FDVElPTl9JRCkuZ2V0VmFsdWUoKSk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgKGZpbmFsIENsb3NlYWJsZUh0dHBSZXNwb25zZSByZXNwb25zZSA9IGNvbW1pdFR4KGNsaWVudCwgdHhJZEZyb21CZWdpbiwgR1RYKSkgeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSk7CisKKyAgICAgICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb25SZXNwb25zZSA9IG1hcHBlci5yZWFkVHJlZShFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSkpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHR4SWRGcm9tQ29tbWl0ID0ganNvblJlc3BvbnNlLmdldChUT0tFTl9SRVNVTFQpLmdldChUT0tFTl9EQVRBKQorICAgICAgICAgICAgICAgICAgICAuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KDApCisgICAgICAgICAgICAgICAgICAgIC5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoMSkKKyAgICAgICAgICAgICAgICAgICAgLmFzVGV4dCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHR4SWRGcm9tQmVnaW4sIHR4SWRGcm9tQ29tbWl0KTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJUcmFuc2FjdGlvbiBJRCBpbiBoZWFkZXIgbXVzdCBtYXRjaCBvbiBzdWJtaXQiLAorICAgICAgICAgICAgICAgICAgICB0eElkRnJvbUJlZ2luLCByZXNwb25zZS5nZXRGaXJzdEhlYWRlcihUb2tlbnMuSGVhZGVycy5UUkFOU0FDVElPTl9JRCkuZ2V0VmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJJbnRlZ3JhdGVUZXN0LmphdmEKaW5kZXggODYxZDA3Yy4uOWY1NmNiMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVySW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlckludGVncmF0ZVRlc3QuamF2YQpAQCAtMTgsNzggKzE4LDU3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXI7CiAKLWltcG9ydCBjaC5xb3MubG9nYmFjay5jbGFzc2ljLkxldmVsOwotaW1wb3J0IGNoLnFvcy5sb2diYWNrLmNsYXNzaWMuTG9nZ2VyOwogaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CiBpbXBvcnQgaW8ubmV0dHkudXRpbC5BdHRyaWJ1dGVLZXk7CiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgbmwuYWx0aW5kYWcubG9nLkxvZ0NhcHRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQmFzZUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlJhbmRvbVN0cmluZ1V0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlcXVlc3RPcHRpb25zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuSHR0cFRlc3RDaGFubmVsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLlRlc3RDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLlVuaWZpZWRDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLlVuaWZpZWRUZXN0Q2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5XZWJTb2NrZXRDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLldlYlNvY2tldFRlc3RDaGFubmVsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5jaGFubmVsLldzQW5kSHR0cFRlc3RDaGFubmVsaXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0U2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuZXhjZXB0aW9uLlJlc3BvbnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5zaW1wbGUuU2ltcGxlQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlVzZXJBZ2VudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuc2ltcGxlLlNpbXBsZUNsaWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5qc3IyMjMuR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5jdXN0b21pemVyLlNpbXBsZVNhbmRib3hFeHRlbnNpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuU2NyaXB0RmlsZUdyZW1saW5QbHVnaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5PcFNlbGVjdG9ySGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlVuaWZpZWRIYW5kbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlJlbW90ZUdyYXBoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLkFic3RyYWN0RXZhbE9wUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnN0YW5kYXJkLlN0YW5kYXJkT3BQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlci5Xc1VzZXJBZ2VudEhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUmVtb3RlR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7Ci1pbXBvcnQgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CiBpbXBvcnQgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuSWdub3JlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lb3V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwpAQCAtOTcsMjQgKzc2LDIxIEBACiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uSW50U3RyZWFtOwogCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnMuQVJHU19FVkFMX1RJTUVPVVQ7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZ3Jvb3Z5LmpzcjIyMy5Hcm9vdnlDb21waWxlckdyZW1saW5QbHVnaW4uQ29tcGlsYXRpb24uQ09NUElMRV9TVEFUSUM7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUuUmVtb3RlQ29ubmVjdGlvbi5HUkVNTElOX1JFTU9URTsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnJlbW90ZS5SZW1vdGVDb25uZWN0aW9uLkdSRU1MSU5fUkVNT1RFX0NPTk5FQ1RJT05fQ0xBU1M7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2Vucy5BUkdTX0VWQUxfVElNRU9VVDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5jb250YWluc1N0cmluZzsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuQWxsT2YuYWxsT2Y7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc05vdC5ub3Q7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLlN0cmluZ1N0YXJ0c1dpdGguc3RhcnRzV2l0aDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3N1bWUuYXNzdW1lVGhhdDsKIAogLyoqCiAgKiBJbnRlZ3JhdGlvbiB0ZXN0cyBmb3Igc2VydmVyLXNpZGUgc2V0dGluZ3MgYW5kIHByb2Nlc3NpbmcuCkBAIC0xMjMsNyArOTksNiBAQAogICovCiBwdWJsaWMgY2xhc3MgR3JlbWxpblNlcnZlckludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QgewogCi0gICAgcHJpdmF0ZSBMZXZlbCBwcmV2aW91c0xvZ0xldmVsOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIG9yZy5zbGY0ai5Mb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JlbWxpblNlcnZlckludGVncmF0ZVRlc3QuY2xhc3MpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBTdXBwbGllcjxHcmFwaD4gZ3JhcGhHZXR0ZXIgPSAoKSAtPiBzZXJ2ZXIuZ2V0U2VydmVyR3JlbWxpbkV4ZWN1dG9yKCkuZ2V0R3JhcGhNYW5hZ2VyKCkuZ2V0R3JhcGgoImdyYXBoIik7CkBAIC0xMzUsMTAgKzExMCwxMSBAQAogICAgICAgICBzZXRQcm9wZXJ0eSgiY2x1c3RlckNvbmZpZ3VyYXRpb24ucG9ydCIsIFRlc3RDbGllbnRGYWN0b3J5LlBPUlQpOwogICAgICAgICBzZXRQcm9wZXJ0eSgiY2x1c3RlckNvbmZpZ3VyYXRpb24uaG9zdHMiLCAibG9jYWxob3N0Iik7CiAgICAgfX07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBPT0xfU0laRV9GT1JfVElNRU9VVF9URVNUUyA9IDE7CiAKICAgICBwcml2YXRlIHN0YXRpYyBMb2dDYXB0b3IgbG9nQ2FwdG9yOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVxdWVzdE9wdGlvbnMgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworCiAgICAgQEJlZm9yZUNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwTG9nQ2FwdG9yKCkgewogICAgICAgICBsb2dDYXB0b3IgPSBMb2dDYXB0b3IuZm9yUm9vdCgpOwpAQCAtMTUxLDM0ICsxMjcsMTEgQEAKIAogICAgIEBCZWZvcmUKICAgICBwdWJsaWMgdm9pZCBzZXR1cEZvckVhY2hUZXN0KCkgewotCi0gICAgICAgIGlmIChuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZFBpbmdDaGFubmVsSWZDbGllbnREaWVzIikgfHwKLSAgICAgICAgICAgICAgICBuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZENsb3NlQ2hhbm5lbElmQ2xpZW50RG9lc250UmVzcG9uZCIpIHx8Ci0gICAgICAgICAgICAgICAgbmFtZS5nZXRNZXRob2ROYW1lKCkuZXF1YWxzKCJzaG91bGRDYXB0dXJlVXNlckFnZW50RnJvbUNsaWVudCIpKSB7Ci0gICAgICAgICAgICBmaW5hbCBMb2dnZXIgb3BTZWxlY3RvckhhbmRsZXJMb2dnZXIgPSAoTG9nZ2VyKSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihPcFNlbGVjdG9ySGFuZGxlci5jbGFzcyk7Ci0gICAgICAgICAgICBmaW5hbCBMb2dnZXIgdW5pZmllZEhhbmRsZXJMb2dnZXIgPSAoTG9nZ2VyKSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihVbmlmaWVkSGFuZGxlci5jbGFzcyk7Ci0gICAgICAgICAgICBmaW5hbCBMb2dnZXIgd3NVc2VyQWdlbnRIYW5kbGVyTG9nZ2VyID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV3NVc2VyQWdlbnRIYW5kbGVyLmNsYXNzKTsKLSAgICAgICAgICAgIHByZXZpb3VzTG9nTGV2ZWwgPSBvcFNlbGVjdG9ySGFuZGxlckxvZ2dlci5nZXRMZXZlbCgpOwotICAgICAgICAgICAgb3BTZWxlY3RvckhhbmRsZXJMb2dnZXIuc2V0TGV2ZWwoTGV2ZWwuSU5GTyk7Ci0gICAgICAgICAgICB1bmlmaWVkSGFuZGxlckxvZ2dlci5zZXRMZXZlbChMZXZlbC5JTkZPKTsKLSAgICAgICAgICAgIHdzVXNlckFnZW50SGFuZGxlckxvZ2dlci5zZXRMZXZlbChMZXZlbC5ERUJVRyk7Ci0gICAgICAgIH0KLQogICAgICAgICBsb2dDYXB0b3IuY2xlYXJMb2dzKCk7CiAgICAgfQogCiAgICAgQEFmdGVyCiAgICAgcHVibGljIHZvaWQgdGVhcmRvd25Gb3JFYWNoVGVzdCgpIHsKLSAgICAgICAgaWYgKG5hbWUuZ2V0TWV0aG9kTmFtZSgpLmVxdWFscygic2hvdWxkUGluZ0NoYW5uZWxJZkNsaWVudERpZXMiKSB8fAotICAgICAgICAgICAgICAgIG5hbWUuZ2V0TWV0aG9kTmFtZSgpLmVxdWFscygic2hvdWxkQ2xvc2VDaGFubmVsSWZDbGllbnREb2VzbnRSZXNwb25kIikgfHwKLSAgICAgICAgICAgICAgICBuYW1lLmdldE1ldGhvZE5hbWUoKS5lcXVhbHMoInNob3VsZENhcHR1cmVVc2VyQWdlbnRGcm9tQ2xpZW50IikpIHsKLSAgICAgICAgICAgIGZpbmFsIExvZ2dlciBvcFNlbGVjdG9ySGFuZGxlckxvZ2dlciA9IChMb2dnZXIpIExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKE9wU2VsZWN0b3JIYW5kbGVyLmNsYXNzKTsKLSAgICAgICAgICAgIG9wU2VsZWN0b3JIYW5kbGVyTG9nZ2VyLnNldExldmVsKHByZXZpb3VzTG9nTGV2ZWwpOwotICAgICAgICAgICAgZmluYWwgTG9nZ2VyIHVuaWZpZWRIYW5kbGVyTG9nZ2VyID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoVW5pZmllZEhhbmRsZXIuY2xhc3MpOwotICAgICAgICAgICAgdW5pZmllZEhhbmRsZXJMb2dnZXIuc2V0TGV2ZWwocHJldmlvdXNMb2dMZXZlbCk7Ci0gICAgICAgICAgICBmaW5hbCBMb2dnZXIgd3NVc2VyQWdlbnRIYW5kbGVyTG9nZ2VyID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoV3NVc2VyQWdlbnRIYW5kbGVyLmNsYXNzKTsKLSAgICAgICAgICAgIHdzVXNlckFnZW50SGFuZGxlckxvZ2dlci5zZXRMZXZlbChwcmV2aW91c0xvZ0xldmVsKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMTg5LDE4ICsxNDIsNyBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZU9mVGVzdCA9IG5hbWUuZ2V0TWV0aG9kTmFtZSgpOwogICAgICAgICBzd2l0Y2ggKG5hbWVPZlRlc3QpIHsKICAgICAgICAgICAgIGNhc2UgInNob3VsZFByb3ZpZGVCZXR0ZXJFeGNlcHRpb25Gb3JNZXRob2RDb2RlVG9vTGFyZ2UiOgotICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heENvbnRlbnRMZW5ndGggPSA0MDk2MDAwOwotCi0gICAgICAgICAgICAgICAgLy8gT3BQcm9jZXNzb3Igc2V0dGluZwotICAgICAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzLlByb2Nlc3NvclNldHRpbmdzIHByb2Nlc3NvclNldHRpbmdzQmlnID0gbmV3IFNldHRpbmdzLlByb2Nlc3NvclNldHRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc29yU2V0dGluZ3NCaWcuY2xhc3NOYW1lID0gU3RhbmRhcmRPcFByb2Nlc3Nvci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc29yU2V0dGluZ3NCaWcuY29uZmlnID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKSB7ewotICAgICAgICAgICAgICAgICAgICBwdXQoQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IuQ09ORklHX01BWF9QQVJBTUVURVJTLCBJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfX07Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MucHJvY2Vzc29ycy5jbGVhcigpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnByb2Nlc3NvcnMuYWRkKHByb2Nlc3NvclNldHRpbmdzQmlnKTsKLQotICAgICAgICAgICAgICAgIC8vIFVuaWZpZWQgc2V0dGluZworICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFJlcXVlc3RDb250ZW50TGVuZ3RoID0gNDA5NjAwMDsKICAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXhQYXJhbWV0ZXJzID0gSW50ZWdlci5NQVhfVkFMVUU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJzaG91bGRSZXNwZWN0SGlnaFdhdGVyTWFya1NldHRpbmdBbmRTdWNjZWVkIjoKQEAgLTIxMSw3ICsxNTMsNyBAQAogICAgICAgICAgICAgICAgIHNldHRpbmdzLmV2YWx1YXRpb25UaW1lb3V0ID0gMTAwMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInNob3VsZEJsb2NrUmVxdWVzdFdoZW5Ub29CaWciOgotICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heENvbnRlbnRMZW5ndGggPSAxMDI0OworICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFJlcXVlc3RDb250ZW50TGVuZ3RoID0gMTAyNDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInNob3VsZEJhdGNoUmVzdWx0c0J5VHdvcyI6CiAgICAgICAgICAgICBjYXNlICJzaG91bGRCYXRjaFJlc3VsdHNCeVR3b3NUb0RyaXZlciI6CkBAIC0yMjIsOSArMTY0LDYgQEAKICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHNjcmlwdCBiZWNhdXNlIGl0IGlzbid0IHVzZWQgaW4gdGhlIHRlc3QgYnV0IGFsc28gYmVjYXVzZSBpdCdzIG5vdCBDb21waWxlU3RhdGljIHJlYWR5CiAgICAgICAgICAgICAgICAgc2V0dGluZ3Muc2NyaXB0RW5naW5lcy5nZXQoImdyZW1saW4tZ3Jvb3Z5IikucGx1Z2lucy5yZW1vdmUoU2NyaXB0RmlsZUdyZW1saW5QbHVnaW4uY2xhc3MuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZFVzZUludGVycHJldGVyTW9kZSI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3Muc2NyaXB0RW5naW5lcy5nZXQoImdyZW1saW4tZ3Jvb3Z5IikucGx1Z2lucy5wdXQoR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luLmNsYXNzLmdldE5hbWUoKSwgZ2V0U2NyaXB0RW5naW5lQ29uZkZvckludGVycHJldGVyTW9kZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInNob3VsZFJlY2VpdmVGYWlsdXJlVGltZU91dE9uU2NyaXB0RXZhbE9mT3V0T2ZDb250cm9sTG9vcCI6CiAgICAgICAgICAgICAgICAgc2V0dGluZ3Muc2NyaXB0RW5naW5lcy5nZXQoImdyZW1saW4tZ3Jvb3Z5IikucGx1Z2lucy5wdXQoR3Jvb3Z5Q29tcGlsZXJHcmVtbGluUGx1Z2luLmNsYXNzLmdldE5hbWUoKSwgZ2V0U2NyaXB0RW5naW5lQ29uZkZvclRpbWVkSW50ZXJydXB0KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMzLDYyICsxNzIsMTggQEAKICAgICAgICAgICAgICAgICBzZXR0aW5ncy5zY3JpcHRFbmdpbmVzLmdldCgiZ3JlbWxpbi1ncm9vdnkiKS5jb25maWcgPSBnZXRTY3JpcHRFbmdpbmVDb25mRm9yQmFzZVNjcmlwdCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAic2hvdWxkUmV0dXJuSW52YWxpZFJlcXVlc3RBcmdzV2hlbkJpbmRpbmdDb3VudEV4Y2VlZHNBbGxvd2FibGUiOgotICAgICAgICAgICAgICAgIC8vIE9wUHJvY2Vzc29yIHNldHRpbmdzCi0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MgcHJvY2Vzc29yU2V0dGluZ3NTbWFsbCA9IG5ldyBTZXR0aW5ncy5Qcm9jZXNzb3JTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NvclNldHRpbmdzU21hbGwuY2xhc3NOYW1lID0gU3RhbmRhcmRPcFByb2Nlc3Nvci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc29yU2V0dGluZ3NTbWFsbC5jb25maWcgPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICAgICAgICAgIHB1dChBYnN0cmFjdEV2YWxPcFByb2Nlc3Nvci5DT05GSUdfTUFYX1BBUkFNRVRFUlMsIDEpOwotICAgICAgICAgICAgICAgIH19OwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnByb2Nlc3NvcnMuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5wcm9jZXNzb3JzLmFkZChwcm9jZXNzb3JTZXR0aW5nc1NtYWxsKTsKLQotICAgICAgICAgICAgICAgIC8vIFVuaWZpZWQgc2V0dGluZ3MKICAgICAgICAgICAgICAgICBzZXR0aW5ncy5tYXhQYXJhbWV0ZXJzID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInNob3VsZFRpbWVPdXRSZW1vdGVUcmF2ZXJzYWwiOgogICAgICAgICAgICAgICAgIHNldHRpbmdzLmV2YWx1YXRpb25UaW1lb3V0ID0gNTAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkUGluZ0NoYW5uZWxJZkNsaWVudERpZXMiOgotICAgICAgICAgICAgICAgIHNldHRpbmdzLmtlZXBBbGl2ZUludGVydmFsID0gMTAwMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZENsb3NlQ2hhbm5lbElmQ2xpZW50RG9lc250UmVzcG9uZCI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuaWRsZUNvbm5lY3Rpb25UaW1lb3V0ID0gMTAwMDsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgInNob3VsZEJsb3dUaGVXb3JrUXVldWVTaXplIjoKICAgICAgICAgICAgICAgICBzZXR0aW5ncy5ncmVtbGluUG9vbCA9IDE7CiAgICAgICAgICAgICAgICAgc2V0dGluZ3MubWF4V29ya1F1ZXVlU2l6ZSA9IDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRSZXNwb25kVG9UaW1lb3V0Q2FuY2VsbGVkV3NSZXF1ZXN0IjoKLSAgICAgICAgICAgIGNhc2UgInNob3VsZFJlc3BvbmRUb1RpbWVvdXRDYW5jZWxsZWRTZXNzaW9uUmVxdWVzdCI6Ci0gICAgICAgICAgICAgICAgdXNlVGlua2VyVHJhbnNhY3Rpb25HcmFwaChzZXR0aW5ncyk7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuZXZhbHVhdGlvblRpbWVvdXQgPSA1MDAwOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmdyZW1saW5Qb29sID0gUE9PTF9TSVpFX0ZPUl9USU1FT1VUX1RFU1RTOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gV2ViU29ja2V0Q2hhbm5lbGl6ZXIuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkUmVzcG9uZFRvVGltZW91dENhbmNlbGxlZFNpbmdsZVRhc2tVbmlmaWVkUmVxdWVzdCI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuZXZhbHVhdGlvblRpbWVvdXQgPSA1MDAwOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmdyZW1saW5Qb29sID0gUE9PTF9TSVpFX0ZPUl9USU1FT1VUX1RFU1RTOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gVW5pZmllZENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZFJlc3BvbmRUb1RpbWVvdXRDYW5jZWxsZWRNdWx0aVRhc2tVbmlmaWVkUmVxdWVzdCI6Ci0gICAgICAgICAgICAgICAgdXNlVGlua2VyVHJhbnNhY3Rpb25HcmFwaChzZXR0aW5ncyk7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuZXZhbHVhdGlvblRpbWVvdXQgPSAzMDAwMDsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5zZXNzaW9uTGlmZXRpbWVUaW1lb3V0ID0gNTAwMDsgLy8gVGhpcyBuZWVkcyB0byBiZSBzaG9ydGVyIGJlY2F1c2Ugb2YgdGhlIGRlbGF5IGluIHNjaGVkdWxpbmcgc2Vzc2lvbiB0YXNrLgotICAgICAgICAgICAgICAgIHNldHRpbmdzLmdyZW1saW5Qb29sID0gUE9PTF9TSVpFX0ZPUl9USU1FT1VUX1RFU1RTOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gVW5pZmllZENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZFN0b3JlVXNlckFnZW50SW5Db250ZXh0V2ViU29ja2V0IjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5jaGFubmVsaXplciA9IFdlYlNvY2tldFRlc3RDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJzaG91bGRTdG9yZVVzZXJBZ2VudEluQ29udGV4dEh0dHAiOgogICAgICAgICAgICAgICAgIHNldHRpbmdzLmNoYW5uZWxpemVyID0gSHR0cFRlc3RDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRTdG9yZVVzZXJBZ2VudEluQ29udGV4dFdzQW5kSHR0cCI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuY2hhbm5lbGl6ZXIgPSBXc0FuZEh0dHBUZXN0Q2hhbm5lbGl6ZXIuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkU3RvcmVVc2VyQWdlbnRJbkNvbnRleHRVbmlmaWVkIjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5jaGFubmVsaXplciA9IFVuaWZpZWRUZXN0Q2hhbm5lbGl6ZXIuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzI0LDYzICsyMTksMTYgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENhcHR1cmVVc2VyQWdlbnRGcm9tQ2xpZW50KCkgewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmVuYWJsZVVzZXJBZ2VudE9uQ29ubmVjdCh0cnVlKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICBjbGllbnQuc3VibWl0KCJ0ZXN0Iik7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgICIuKk5ldyBDb25uZWN0aW9uIG9uIGNoYW5uZWwgLiogd2l0aCB1c2VyIGFnZW50LiokIikpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3RvcmVVc2VyQWdlbnRJbkNvbnRleHRXZWJTb2NrZXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgICBzaG91bGRTdG9yZVVzZXJBZ2VudEluQ29udGV4dCgpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkU3RvcmVVc2VyQWdlbnRJbkNvbnRleHRIdHRwKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgc2hvdWxkU3RvcmVVc2VyQWdlbnRJbkh0dHBDb250ZXh0KCk7CiAgICAgfQogCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTdG9yZVVzZXJBZ2VudEluQ29udGV4dFdzQW5kSHR0cCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHNob3VsZFN0b3JlVXNlckFnZW50SW5Db250ZXh0KCk7Ci0gICAgICAgIHNob3VsZFN0b3JlVXNlckFnZW50SW5IdHRwQ29udGV4dCgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3RvcmVVc2VyQWdlbnRJbkNvbnRleHRVbmlmaWVkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgICAgc2hvdWxkU3RvcmVVc2VyQWdlbnRJbkNvbnRleHQoKTsKLSAgICAgICAgc2hvdWxkU3RvcmVVc2VyQWdlbnRJbkh0dHBDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNob3VsZFN0b3JlVXNlckFnZW50SW5Db250ZXh0KCkgewotICAgICAgICBpZihzZXJ2ZXIuZ2V0Q2hhbm5lbGl6ZXIoKSBpbnN0YW5jZW9mIFRlc3RDaGFubmVsaXplcikgewotICAgICAgICAgICAgVGVzdENoYW5uZWxpemVyIGNoYW5uZWxpemVyID0gKFRlc3RDaGFubmVsaXplcikgc2VydmVyLmdldENoYW5uZWxpemVyKCk7Ci0gICAgICAgICAgICBjaGFubmVsaXplci5yZXNldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0TnVsbChnZXRVc2VyQWdlbnRJZkF2YWlsYWJsZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuZW5hYmxlVXNlckFnZW50T25Db25uZWN0KHRydWUpLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJ0ZXN0Iik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoVXNlckFnZW50LlVTRVJfQUdFTlQsIGdldFVzZXJBZ2VudElmQXZhaWxhYmxlKCkpOwotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgidGVzdCIpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFVzZXJBZ2VudC5VU0VSX0FHRU5ULCBnZXRVc2VyQWdlbnRJZkF2YWlsYWJsZSgpKTsKLSAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpOwotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHJpdmF0ZSB2b2lkIHNob3VsZFN0b3JlVXNlckFnZW50SW5IdHRwQ29udGV4dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CiAgICAgICAgIGlmKHNlcnZlci5nZXRDaGFubmVsaXplcigpIGluc3RhbmNlb2YgVGVzdENoYW5uZWxpemVyKSB7CiAgICAgICAgICAgICBUZXN0Q2hhbm5lbGl6ZXIgY2hhbm5lbGl6ZXIgPSAoVGVzdENoYW5uZWxpemVyKSBzZXJ2ZXIuZ2V0Q2hhbm5lbGl6ZXIoKTsKICAgICAgICAgICAgIGNoYW5uZWxpemVyLnJlc2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7CiAgICAgICAgICAgICBhc3NlcnROdWxsKGdldFVzZXJBZ2VudElmQXZhaWxhYmxlKCkpOwogICAgICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgICAgICAuY2hhbm5lbGl6ZXIob3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLmNsYXNzKQogICAgICAgICAgICAgICAgICAgICAuZW5hYmxlVXNlckFnZW50T25Db25uZWN0KHRydWUpCiAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKICAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKQEAgLTQyNywxOCArMjc1LDE4IEBACiAKICAgICAgICAgLy8gbWF4V29ya1F1ZXVlU2l6ZT0xICYmIGdyZW1saW5Qb29sPTEKICAgICAgICAgLy8gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gb25lIHJlcXVlc3QgYXQgYSB0aW1lIHNlcmlhbGx5Ci0gICAgICAgIGFzc2VydEVxdWFscygidGVzdDEiLCBjbGllbnQuc3VibWl0KCIndGVzdDEnIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MiIsIGNsaWVudC5zdWJtaXQoIid0ZXN0MiciKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QzIiwgY2xpZW50LnN1Ym1pdCgiJ3Rlc3QzJyIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygidGVzdDEiLCBjbGllbnQuc3VibWl0KCIndGVzdDEnIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygidGVzdDIiLCBjbGllbnQuc3VibWl0KCIndGVzdDInIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygidGVzdDMiLCBjbGllbnQuc3VibWl0KCIndGVzdDMnIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKSk7CiAKICAgICAgICAgZmluYWwgQXRvbWljQm9vbGVhbiBlcnJvclRyaWdnZXJlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7Ci0gICAgICAgIGZpbmFsIFJlc3VsdFNldCByMSA9IGNsaWVudC5zdWJtaXRBc3luYygiVGhyZWFkLnNsZWVwKDEwMDApOyd0ZXN0NCciKS5nZXQoKTsKKyAgICAgICAgZmluYWwgUmVzdWx0U2V0IHIxID0gY2xpZW50LnN1Ym1pdEFzeW5jKCJUaHJlYWQuc2xlZXAoMTAwMCk7J3Rlc3Q0JyIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5nZXQoKTsKIAogICAgICAgICBmaW5hbCBMaXN0PENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4+IGJsb2NrZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCA1MTIgJiYgIWVycm9yVHJpZ2dlcmVkLmdldCgpOyBpeCsrKSB7Ci0gICAgICAgICAgICBibG9ja2Vycy5hZGQoY2xpZW50LnN1Ym1pdCgiJ3Rlc3QnIikuYWxsKCkuZXhjZXB0aW9uYWxseSh0IC0+IHsKKyAgICAgICAgICAgIGJsb2NrZXJzLmFkZChjbGllbnQuc3VibWl0KCIndGVzdCciLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuZXhjZXB0aW9uYWxseSh0IC0+IHsKICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZUV4Y2VwdGlvbiByZSA9IChSZXNwb25zZUV4Y2VwdGlvbikgdC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgICAgIGVycm9yVHJpZ2dlcmVkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIFJlc3BvbnNlU3RhdHVzQ29kZS5UT09fTUFOWV9SRVFVRVNUUyA9PSByZS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICAgICAgZXJyb3JUcmlnZ2VyZWQuY29tcGFyZUFuZFNldChmYWxzZSwgSHR0cFJlc3BvbnNlU3RhdHVzLlRPT19NQU5ZX1JFUVVFU1RTID09IHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0pKTsKICAgICAgICAgfQpAQCAtNDUwLDEyICsyOTgsMTMgQEAKICAgICAgICAgYmxvY2tlcnMuZm9yRWFjaChDb21wbGV0YWJsZUZ1dHVyZTo6am9pbik7CiAKICAgICAgICAgLy8gc2hvdWxkIGJlIGFjY2VwdGluZyB0ZXN0NiBub3cKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0NiIsIGNsaWVudC5zdWJtaXQoIid0ZXN0NiciKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3Q2IiwgY2xpZW50LnN1Ym1pdCgiJ3Rlc3Q2JyIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCkpOwogCiAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICB9CiAKICAgICBAVGVzdAorICAgIEBJZ25vcmUoIkxhbWJkYSBpcyBub3Qgc3VwcG9ydGVkIikKICAgICBwdWJsaWMgdm9pZCBzaG91bGRTY3JpcHRFdmFsdWF0aW9uRXJyb3JGb3JSZW1vdGVUcmF2ZXJzYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29uZik7CiAKQEAgLTQ2Niw3ICszMTUsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSB0ID0gZXguZ2V0Q2F1c2UoKTsKICAgICAgICAgICAgIGFzc2VydFRoYXQodCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTiwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gbWFrZSBhIGdyYXBoIHdpdGggYSBjeWNsZSBpbiBpdCB0byBmb3JjZSBhIGxvbmcgcnVuIHRyYXZlcnNhbApAQCAtNDc5LDQ4ICszMjgsMTQgQEAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdCA9IGV4LmdldENhdXNlKCk7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KHQsIGluc3RhbmNlT2YoUmVzcG9uc2VFeGNlcHRpb24uY2xhc3MpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQsICgoUmVzcG9uc2VFeGNlcHRpb24pIHQpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAoKFJlc3BvbnNlRXhjZXB0aW9uKSB0KS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBnLmNsb3NlKCk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDbG9zZUNoYW5uZWxJZkNsaWVudERvZXNudFJlc3BvbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpOwotICAgICAgICBjbGllbnQuc3VibWl0KCIxKzEiKTsKLQotICAgICAgICAvLyBzaW5jZSB3ZSBkbyBub3RoaW5nIGZvciAyIHNlY29uZHMgYW5kIHRoZSB0aW1lIGxpbWl0IGZvciB0aW1lb3V0IG9uIHRoZSBzZXJ2ZXIgaXMgMSBzZWNvbmQsIHRoZSBzZXJ2ZXIKLSAgICAgICAgLy8gd2lsbCBhdXRvY2xvc2UgdGhlIGNoYW5uZWwKLSAgICAgICAgVGhyZWFkLnNsZWVwKDIwMDApOwotCi0gICAgICAgIGFzc2VydFRoYXQobG9nQ2FwdG9yLmdldExvZ3MoKS5zdHJlYW0oKS5hbnlNYXRjaChtIC0+IG0ubWF0Y2hlcygKLSAgICAgICAgICAgICAgICAiLipDbG9zaW5nIGNoYW5uZWwgLSBjbGllbnQgaXMgZGlzY29ubmVjdGVkIGFmdGVyIGlkbGUgcGVyaW9kIG9mIC4qJCIpKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGNsaWVudC5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUGluZ0NoYW5uZWxJZkNsaWVudERpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5tYXhDb25uZWN0aW9uUG9vbFNpemUoMSkubWluQ29ubmVjdGlvblBvb2xTaXplKDEpLmtlZXBBbGl2ZUludGVydmFsKDApLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpOwotCi0gICAgICAgIC8vIHNpbmNlIHdlIGRvIG5vdGhpbmcgZm9yIDMgc2Vjb25kcyBhbmQgdGhlIHRpbWUgbGltaXQgZm9yIHBpbmcgaXMgMSBzZWNvbmQgd2Ugc2hvdWxkIGdldCAqYWJvdXQqIDMgcGluZ3MgLQotICAgICAgICAvLyBpIGRvbid0IHRoaW5rIHRoZSBhc3NlcnRpb24gbmVlZHMgdG8gYmUgdG9vIGFjY3VyYXRlLiBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlJ3MgYSBwaW5nIG1lc3NhZ2Ugb3V0Ci0gICAgICAgIC8vIHRoZXJlIHJlY29yZAotICAgICAgICBUaHJlYWQuc2xlZXAoMzAwMCk7Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotCi0gICAgICAgIC8vIHN0b3AgdGhlIHNlcnZlciB0byBiZSBzdXJlIHRoYXQgbG9ncyBmbHVzaAotICAgICAgICBzdG9wU2VydmVyKCk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpLmFueU1hdGNoKG0gLT4gbS5tYXRjaGVzKAotICAgICAgICAgICAgICAgICIuKkNoZWNraW5nIGNoYW5uZWwgLSBzZW5kaW5nIHBpbmcgdG8gY2xpZW50IGFmdGVyIGlkbGUgcGVyaW9kIG9mIC4qJCIpKSwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0CisgICAgQElnbm9yZSgiTGFtYmRhIGlzIG5vdCBzdXBwb3J0ZWQiKQogICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVPdXRSZW1vdGVUcmF2ZXJzYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29uZik7CiAKQEAgLTUzMSw3ICszNDYsNyBAQAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSB0ID0gZXguZ2V0Q2F1c2UoKTsKICAgICAgICAgICAgIGFzc2VydFRoYXQodCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVElNRU9VVCwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICgoUmVzcG9uc2VFeGNlcHRpb24pIHQpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIG1ha2UgYSBncmFwaCB3aXRoIGEgY3ljbGUgaW4gaXQgdG8gZm9yY2UgYSBsb25nIHJ1biB0cmF2ZXJzYWwKQEAgLTU0NCwxMyArMzU5LDE0IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBleC5nZXRDYXVzZSgpOwogICAgICAgICAgICAgYXNzZXJ0VGhhdCh0LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VULCAoKFJlc3BvbnNlRXhjZXB0aW9uKSB0KS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgZy5jbG9zZSgpOwogICAgIH0KIAogICAgIEBUZXN0CisgICAgQElnbm9yZSgiTGFtYmRhIGlzIG5vdCBzdXBwb3J0ZWQiKQogICAgIHB1YmxpYyB2b2lkIHNob3VsZFRpbWVPdXRSZW1vdGVUcmF2ZXJzYWxXaXRoUGVyUmVxdWVzdE9wdGlvbigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25mKTsKIApAQCAtNTYxLDcgKzM3Nyw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBleC5nZXRDYXVzZSgpOwogICAgICAgICAgICAgYXNzZXJ0VGhhdCh0LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VULCAoKFJlc3BvbnNlRXhjZXB0aW9uKSB0KS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gbWFrZSBhIGdyYXBoIHdpdGggYSBjeWNsZSBpbiBpdCB0byBmb3JjZSBhIGxvbmcgcnVuIHRyYXZlcnNhbApAQCAtNTc0LDcgKzM5MCw3IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBleC5nZXRDYXVzZSgpOwogICAgICAgICAgICAgYXNzZXJ0VGhhdCh0LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VULCAoKFJlc3BvbnNlRXhjZXB0aW9uKSB0KS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgZy5jbG9zZSgpOwpAQCAtNTgyLDExICszOTgsOCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9kdWNlUHJvcGVyRXhjZXB0aW9uT25UaW1lb3V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRoaXMgdGVzdCB3aWxsIG5vdCB3b3JrIHF1aXRlIHJpZ2h0IG9uIFVuaWZpZWRDaGFubmVsaXplcgotICAgICAgICBhc3N1bWVUaGF0KCJNdXN0IHVzZSBPcFByb2Nlc3NvciIsIGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSwgaXMoZmFsc2UpKTsKLQogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgIC8vIFJ1biBhIHNob3J0IHRlc3Qgc2NyaXB0IGEgZmV3IHRpbWVzIHdpdGggcHJvZ3Jlc3NpdmVseSBsb25nZXIgdGltZW91dHMuCkBAIC01OTQsNyArNDA3LDcgQEAKICAgICAgICAgLy8gTm90ZTogdGhlIHJhbmdlIG9mIHRpbWVvdXRzIGlzIGludGVuZGVkIHRvIGNvdmVyIHRoZSBjYXNlIHdoZW4gdGhlIHNjcmlwdCBmaW5pc2hlcyBhdCBhYm91dCB0aGUKICAgICAgICAgLy8gc2FtZSB0aW1lIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzLiBJbiB0aGlzIHNpdHVhdGlvbiBlaXRoZXIgYSB0aW1lb3V0IHJlc3BvbnNlIG9yIGEgc3VjY2Vzc2Z1bAogICAgICAgICAvLyByZXNwb25zZSBpcyBhY2NlcHRhYmxlLCBob3dldmVyIG5vIG90aGVyIHByb2Nlc3NpbmcgZXJyb3JzIHNob3VsZCBvY2N1ci4KLSAgICAgICAgLy8gTm90ZTogdGhlIHRpbWVvdXQgb2YgMzAgbXMgaXMgZ2VuZXJhbGx5IHN1ZmZpY2llbnQgZm9yIHJ1bm5pbmcgYSBzaW1wbGUgZ3Jvb3Z5IHNjcmlwdCwgc28gdXNpbmcgbG9uZ2VyCisgICAgICAgIC8vIE5vdGU6IHRoZSB0aW1lb3V0IG9mIDMwIG1zIGlzIGdlbmVyYWxseSBzdWZmaWNpZW50IGZvciBydW5uaW5nIGEgc2ltcGxlIHRyYXZlcnNhbCwgc28gdXNpbmcgbG9uZ2VyCiAgICAgICAgIC8vIHRpbWVvdXRzIGFyZSBub3QgbGlrZWx5IHRvIHJlc3VsdHMgaW4gYSBzdWNjZXNzL3RpbWVvdXQgcmVzcG9uc2UgY29sbGlzaW9uLCB3aGljaCBpcyB0aGUgcHVycG9zZQogICAgICAgICAvLyBvZiB0aGlzIHRlc3QuCiAgICAgICAgIC8vIE5vdGU6IHRoaXMgdGVzdCBtYXkgaGF2ZSBhIGZhbHNlIG5lZ2F0aXZlIHJlc3VsdCwgYnV0IGEgZmFpbHVyZSAgd291bGQgaW5kaWNhdGUgYSByZWFsIHByb2JsZW0uCkBAIC02MDMsMTIgKzQxNiwxMiBAQAogICAgICAgICAgICAgb3ZlcnJpZGVFdmFsdWF0aW9uVGltZW91dCh0aW1lb3V0KTsKIAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJ4ID0gMSArIDEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCk7CisgICAgICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCk7CiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdCA9IGV4LmdldENhdXNlKCk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdCgiVW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBzY3JpcHQgZXZhbHVhdGlvbiB0aW1lb3V0OiAiICsgdGltZW91dCwgdCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQsICgoUmVzcG9uc2VFeGNlcHRpb24pIHQpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTYyMCw1MyArNDMzLDkgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFVzZUJhc2VTY3JpcHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCi0gICAgICAgIGFzc2VydEVxdWFscygiaGVsbG8sIHN0ZXBoZW4iLCBjbGllbnQuc3VibWl0KCJoZWxsbygnc3RlcGhlbicpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRVc2VJbnRlcnByZXRlck1vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICBjbGllbnQuc3VibWl0KCJkZWYgc3VidHJhY3RBd2F5KHgseSl7eC15fTtbXSIpLmFsbCgpLmdldCgpOwotICAgICAgICBjbGllbnQuc3VibWl0KCJtdWx0aXBseUl0ID0geyB4LHkgLT4geCAqIHl9O1tdIikuYWxsKCkuZ2V0KCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoInggPSAxICsgMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjbGllbnQuc3VibWl0KCJpbnQgeSA9IHggKyAxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGNsaWVudC5zdWJtaXQoImRlZiB6ID0geCArIHkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBtID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtLnB1dCgieCIsIDEwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKC01LCBjbGllbnQuc3VibWl0KCJ6IC0geCIsIG0pLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxNSwgY2xpZW50LnN1Ym1pdCgiYWRkSXRVcCh4LHopIiwgbSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGNsaWVudC5zdWJtaXQoInN1YnRyYWN0QXdheSh4LHopIiwgbSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwLCBjbGllbnQuc3VibWl0KCJtdWx0aXBseUl0KHgseikiLCBtKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotCi0gICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdFVzZUludGVycHJldGVyTW9kZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIGNsaWVudC5zdWJtaXQoImRlZiBzdWJ0cmFjdEF3YXkoeCx5KXt4LXl9O1tdIikuYWxsKCkuZ2V0KCk7Ci0gICAgICAgIGNsaWVudC5zdWJtaXQoIm11bHRpcGx5SXQgPSB7IHgseSAtPiB4ICogeX07W10iKS5hbGwoKS5nZXQoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgieCA9IDEgKyAxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNsaWVudC5zdWJtaXQoInkgPSB4ICsgMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBjbGllbnQuc3VibWl0KCJ6ID0geCArIHkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBtID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtLnB1dCgieCIsIDEwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKC01LCBjbGllbnQuc3VibWl0KCJ6IC0geCIsIG0pLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxNSwgY2xpZW50LnN1Ym1pdCgiYWRkSXRVcCh4LHopIiwgbSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGNsaWVudC5zdWJtaXQoInN1YnRyYWN0QXdheSh4LHopIiwgbSkuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwLCBjbGllbnQuc3VibWl0KCJtdWx0aXBseUl0KHgseikiLCBtKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImhlbGxvLCBzdGVwaGVuIiwgY2xpZW50LnN1Ym1pdCgiaGVsbG8oJ3N0ZXBoZW4nKSIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCkpOwogCiAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICB9CkBAIC02NzYsMTEgKzQ0NSwxMSBAQAogICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7CiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCByZXR1cm4gIm5vdGhpbmciIC0gdGhlcmUgc2hvdWxkIGJlIG5vIGV4Y2VwdGlvbgotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiamF2YS5sYW5nLlN5c3RlbS5leGl0KDApIikuYWxsKCkuZ2V0KCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJqYXZhLmxhbmcuU3lzdGVtLmV4aXQoMCkiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJUaGUgYWJvdmUgc2hvdWxkIG5vdCBoYXZlIGV4ZWN1dGVkIGluIGFueSBzdWNjZXNzZnVsIHdheSBhcyBzYW5kYm94aW5nIGlzIGVuYWJsZWQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KGV4LmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiW1N0YXRpYyB0eXBlIGNoZWNraW5nXSAtIE5vdCBhdXRob3JpemVkIHRvIGNhbGwgdGhpcyBtZXRob2Q6IGphdmEubGFuZy5TeXN0ZW0jZXhpdChpbnQpIikpOwpAQCAtNjkwLDcgKzQ1OSw3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXNwZWN0SGlnaFdhdGVyTWFya1NldHRpbmdBbmRTdWNjZWVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVzcGVjdEhpZ2hXYXRlck1hcmtTZXR0aW5nQW5kU3VjY2VlZCgpIHsKICAgICAgICAgLy8gdGhlIGhpZ2h3YXRlcm1hcmsgc2hvdWxkIGdldCBleGNlZWRlZCBvbiB0aGUgc2VydmVyIGFuZCB0aHVzIHBhdXNlIHRoZSB3cml0ZXMsIGJ1dCBoYXZlIG5vIHByb2JsZW0gY2F0Y2hpbmcKICAgICAgICAgLy8gaXRzZWxmIHVwIC0gdGhpcyBpcyBhIHRyaWNreSB0ZXN0cyB0byBnZXQgcGFzc2luZyBvbiBhbGwgZW52aXJvbm1lbnRzIHNvIHRoaXMgYXNzdW1wdGlvbiB3aWxsIGRlbnkgdGhlCiAgICAgICAgIC8vIHRlc3QgZm9yIG1vc3QgY2FzZXMKQEAgLTcwMCwyMCArNDY5LDE3IEBACiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdENvdW50VG9HZW5lcmF0ZSA9IDMwMDsKLSAgICAgICAgICAgIGZpbmFsIGludCBiYXRjaFNpemUgPSAxOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZhdHR5ID0gUmFuZG9tU3RyaW5nVXRpbHMucmFuZG9tKDEyOCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZmF0dHlYID0gIlt4XSAqICIgKyByZXN1bHRDb3VudFRvR2VuZXJhdGU7CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVzdWx0Q291bnRUb0dlbmVyYXRlID0gMTAwMDsKKyAgICAgICAgICAgIGZpbmFsIGludCBiYXRjaFNpemUgPSAzOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZhdHR5ID0gSW50U3RyZWFtLnJhbmdlKDAsIDE3NSkubWFwVG9PYmooU3RyaW5nOjp2YWx1ZU9mKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluID0gU3RyaW5nLmZvcm1hdCgiZy5pbmplY3QoJyVzJykucmVwZWF0KGluamVjdCgnJXMnKS50aW1lcyglZCkpIiwgZmF0dHksIGZhdHR5LCByZXN1bHRDb3VudFRvR2VuZXJhdGUtMSk7CiAKICAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IHRoZSB0aHJlYWQgdG8gcHJvY2VlZCB1bnRpbCBhbGwgcmVzdWx0cyBhcmUgYWNjb3VudGVkIGZvcgogICAgICAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2gocmVzdWx0Q291bnRUb0dlbmVyYXRlKTsKICAgICAgICAgICAgIGZpbmFsIEF0b21pY0Jvb2xlYW4gZXhwZWN0ZWQgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7CiAgICAgICAgICAgICBmaW5hbCBBdG9taWNCb29sZWFuIGZhdWx0eSA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoQVJHU19FVkFMX1RJTUVPVVQsIDEwICogNjAgKiAxMDAwKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0JBVENIX1NJWkUsIGJhdGNoU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19CSU5ESU5HUywgbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKSB7eyBwdXQoIngiLCBmYXR0eSk7IH19KQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sIGZhdHR5WCkuY3JlYXRlKCk7CisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoZ3JlbWxpbikKKyAgICAgICAgICAgICAgICAgICAgLmFkZENodW5rU2l6ZShiYXRjaFNpemUpLmNyZWF0ZSgpOwogCiAgICAgICAgICAgICBjbGllbnQuc3VibWl0QXN5bmMocmVxdWVzdCkudGhlbkFjY2VwdEFzeW5jKHIgLT4gewogICAgICAgICAgICAgICAgIHIuc3RyZWFtKCkuZm9yRWFjaChpdGVtIC0+IHsKQEAgLTc0NCwyOCArNTEwLDE3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5JbnZhbGlkUmVxdWVzdEFyZ3NXaGVuR3JlbWxpbkFyZ0lzTm90U3VwcGxpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3VsdCA9IGNsaWVudC5zdWJtaXQocmVxdWVzdCkuZ2V0KDApOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLCBpcyhub3QoUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCkpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLCBSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuSW52YWxpZFJlcXVlc3RBcmdzV2hlbkludmFsaWRSZXNlcnZlZEJpbmRpbmdLZXlJc1VzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKKyAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlU2ltcGxlSHR0cENsaWVudCgpKSB7CiAgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGJpbmRpbmdzID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICAgICAgYmluZGluZ3MucHV0KFQuaWQuZ2V0QWNjZXNzb3IoKSwgIjEyMyIpOwotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiWzEsMiwzLDQsNSw2LDcsOCw5LDBdIikKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19CSU5ESU5HUywgYmluZGluZ3MpLmNyZWF0ZSgpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLmluamVjdCgxLDIsMyw0LDUsNiw3LDgsOSwwKSIpCisgICAgICAgICAgICAgICAgICAgIC5hZGRCaW5kaW5ncyhiaW5kaW5ncykuY3JlYXRlKCk7CiAgICAgICAgICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKICAgICAgICAgICAgIGZpbmFsIEF0b21pY0Jvb2xlYW4gcGFzcyA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKICAgICAgICAgICAgIGNsaWVudC5zdWJtaXQocmVxdWVzdCwgcmVzdWx0IC0+IHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpLmdldENvZGUoKSAhPSBSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhc3Muc2V0KFJlc3BvbnNlU3RhdHVzQ29kZS5SRVFVRVNUX0VSUk9SX0lOVkFMSURfUkVRVUVTVF9BUkdVTUVOVFMgPT0gcmVzdWx0LmdldFN0YXR1cygpLmdldENvZGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKEh0dHBSZXNwb25zZVN0YXR1cy5CQURfUkVRVUVTVCA9PSByZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhc3Muc2V0KHRydWUpOwogICAgICAgICAgICAgICAgICAgICBsYXRjaC5jb3VudERvd24oKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKQEAgLTc3NSwxNyArNTMwLDE2IEBACiAgICAgICAgICAgICBhc3NlcnRUaGF0KHBhc3MuZ2V0KCksIGlzKHRydWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKSB7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgewogICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgICAgIGJpbmRpbmdzLnB1dCgiaWQiLCAiMTIzIik7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJbMSwyLDMsNCw1LDYsNyw4LDksMF0iKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0JJTkRJTkdTLCBiaW5kaW5ncykuY3JlYXRlKCk7CisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5LDApIikKKyAgICAgICAgICAgICAgICAgICAgLmFkZEJpbmRpbmdzKGJpbmRpbmdzKS5jcmVhdGUoKTsKICAgICAgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwogICAgICAgICAgICAgZmluYWwgQXRvbWljQm9vbGVhbiBwYXNzID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgY2xpZW50LnN1Ym1pdChyZXF1ZXN0LCByZXN1bHQgLT4gewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpICE9IFJlc3BvbnNlU3RhdHVzQ29kZS5QQVJUSUFMX0NPTlRFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUyA9PSByZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNUID09IHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtNzk3LDQyICs1NTEsMTggQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybkludmFsaWRSZXF1ZXN0QXJnc1doZW5JbnZhbGlkVHlwZUJpbmRpbmdLZXlJc1VzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBiaW5kaW5ncy5wdXQoMSwgIjEyMyIpOwotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiWzEsMiwzLDQsNSw2LDcsOCw5LDBdIikKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19CSU5ESU5HUywgYmluZGluZ3MpLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgICAgICAgICBmaW5hbCBBdG9taWNCb29sZWFuIHBhc3MgPSBuZXcgQXRvbWljQm9vbGVhbihmYWxzZSk7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KHJlcXVlc3QsIHJlc3VsdCAtPiB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgIT0gUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCkgewotICAgICAgICAgICAgICAgICAgICBwYXNzLnNldChSZXNwb25zZVN0YXR1c0NvZGUuUkVRVUVTVF9FUlJPUl9JTlZBTElEX1JFUVVFU1RfQVJHVU1FTlRTID09IHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBsYXRjaC5jb3VudERvd24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgaWYgKCFsYXRjaC5hd2FpdCgzMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpKQotICAgICAgICAgICAgICAgIGZhaWwoIlJlcXVlc3Qgc2hvdWxkIGhhdmUgcmV0dXJuZWQgZXJyb3IsIGJ1dCBpbnN0ZWFkIHRpbWVkIG91dCIpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChwYXNzLmdldCgpLCBpcyh0cnVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVybkludmFsaWRSZXF1ZXN0QXJnc1doZW5CaW5kaW5nQ291bnRFeGNlZWRzQWxsb3dhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IGJpbmRpbmdzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgYmluZGluZ3MucHV0KCJ4IiwgMTIzKTsKLSAgICAgICAgICAgIGJpbmRpbmdzLnB1dCgieSIsIDEyMyk7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJ4K3kiKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0JJTkRJTkdTLCBiaW5kaW5ncykuY3JlYXRlKCk7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgeworICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGJpbmRpbmdzLnB1dCgieCIsIDEpOworICAgICAgICAgICAgYmluZGluZ3MucHV0KCJ5IiwgImtub3dzIik7CisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuVih4KS5vdXQoeSkudmFsdWVzKCduYW1lJykiKQorICAgICAgICAgICAgICAgICAgICAuYWRkQmluZGluZ3MoYmluZGluZ3MpLmFkZEcoImdtb2Rlcm4iKS5jcmVhdGUoKTsKICAgICAgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwogICAgICAgICAgICAgZmluYWwgQXRvbWljQm9vbGVhbiBwYXNzID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgY2xpZW50LnN1Ym1pdChyZXF1ZXN0LCByZXN1bHQgLT4gewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpICE9IFJlc3BvbnNlU3RhdHVzQ29kZS5QQVJUSUFMX0NPTlRFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUyA9PSByZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNUID09IHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtODQyLDE3ICs1NzIsMTYgQEAKICAgICAgICAgICAgIGFzc2VydFRoYXQocGFzcy5nZXQoKSwgaXModHJ1ZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBiaW5kaW5ncy5wdXQoIngiLCAxMjMpOwotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAieCsxMjMiKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0JJTkRJTkdTLCBiaW5kaW5ncykuY3JlYXRlKCk7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgeworICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgICAgIGJpbmRpbmdzLnB1dCgieCIsIDEpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLlYoeCkub3V0KCdrbm93cycpLnZhbHVlcygnbmFtZScpIikKKyAgICAgICAgICAgICAgICAgICAgLmFkZEJpbmRpbmdzKGJpbmRpbmdzKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CiAgICAgICAgICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKICAgICAgICAgICAgIGZpbmFsIEF0b21pY0Jvb2xlYW4gcGFzcyA9IG5ldyBBdG9taWNCb29sZWFuKGZhbHNlKTsKICAgICAgICAgICAgIGNsaWVudC5zdWJtaXQocmVxdWVzdCwgcmVzdWx0IC0+IHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmdldFN0YXR1cygpLmdldENvZGUoKSAhPSBSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhc3Muc2V0KFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTID09IHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgJiYgKCgoaW50KSAoKExpc3QpIHJlc3VsdC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLmdldCgwKSA9PSAyNDYpKSk7CisgICAgICAgICAgICAgICAgaWYgKEh0dHBSZXNwb25zZVN0YXR1cy5PSyA9PSByZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhc3Muc2V0KChyZXN1bHQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSkuZXF1YWxzKCJ2YWRhcyIpKTsKICAgICAgICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CkBAIC04NjUsMTcgKzU5NCwxNiBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5JbnZhbGlkUmVxdWVzdEFyZ3NXaGVuSW52YWxpZE51bGxCaW5kaW5nS2V5SXNVc2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKSB7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgewogICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgICAgIGJpbmRpbmdzLnB1dChudWxsLCAiMTIzIik7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJbMSwyLDMsNCw1LDYsNyw4LDksMF0iKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0JJTkRJTkdTLCBiaW5kaW5ncykuY3JlYXRlKCk7CisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5LDApIikKKyAgICAgICAgICAgICAgICAgICAgLmFkZEJpbmRpbmdzKGJpbmRpbmdzKS5jcmVhdGUoKTsKICAgICAgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwogICAgICAgICAgICAgZmluYWwgQXRvbWljQm9vbGVhbiBwYXNzID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgY2xpZW50LnN1Ym1pdChyZXF1ZXN0LCByZXN1bHQgLT4gewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpICE9IFJlc3BvbnNlU3RhdHVzQ29kZS5QQVJUSUFMX0NPTlRFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQoUmVzcG9uc2VTdGF0dXNDb2RlLlJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUyA9PSByZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNUID09IHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwpAQCAtODg5LDExMiArNjE3LDEwMyBAQAogICAgIEBUZXN0CiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgcHVibGljIHZvaWQgc2hvdWxkQmF0Y2hSZXN1bHRzQnlUd29zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRoaXMgdGVzdCB3aWxsIG5vdCB3b3JrIHF1aXRlIHJpZ2h0IG9uIFVuaWZpZWRDaGFubmVsaXplciwgYnV0IHNlZW1zIHRvIG9ubHkgYmUgYSBwcm9ibGVtIGluIFRyYXZpcwotICAgICAgICBhc3N1bWVUaGF0KCJNdXN0IHVzZSBPcFByb2Nlc3NvciIsIGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVXZWJTb2NrZXRDbGllbnQoKSkgewotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiWzAsMSwyLDMsNCw1LDYsNyw4LDldIikuY3JlYXRlKCk7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgeworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLmluamVjdCgwLDEsMiwzLDQsNSw2LDcsOCw5KSIpLmNyZWF0ZSgpOwogCiAgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gbXNncyA9IGNsaWVudC5zdWJtaXQocmVxdWVzdCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgY2xpZW50LnN1Ym1pdChyZXF1ZXN0KS5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsICgoTGlzdDxJbnRlZ2VyPikgbXNncy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKChMaXN0PEludGVnZXI+KSBtc2dzLmdldCgwKS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLmdldCgxKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCAoKExpc3Q8SW50ZWdlcj4pIG1zZ3MuZ2V0KDEpLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApLmludFZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsICgoTGlzdDxJbnRlZ2VyPikgbXNncy5nZXQoMSkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMSkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgKChMaXN0PEludGVnZXI+KSBtc2dzLmdldCgyKS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLmdldCgwKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCAoKExpc3Q8SW50ZWdlcj4pIG1zZ3MuZ2V0KDIpLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDEpLmludFZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsICgoTGlzdDxJbnRlZ2VyPikgbXNncy5nZXQoMykuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNywgKChMaXN0PEludGVnZXI+KSBtc2dzLmdldCgzKS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLmdldCgxKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg4LCAoKExpc3Q8SW50ZWdlcj4pIG1zZ3MuZ2V0KDQpLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApLmludFZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDksICgoTGlzdDxJbnRlZ2VyPikgbXNncy5nZXQoNCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMSkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgKGludCkgbXNncy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKGludCkgbXNncy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKGludCkgbXNncy5nZXQoMSkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgKGludCkgbXNncy5nZXQoMSkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgKGludCkgbXNncy5nZXQoMikuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgKGludCkgbXNncy5nZXQoMikuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNiwgKGludCkgbXNncy5nZXQoMykuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNywgKGludCkgbXNncy5nZXQoMykuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoOCwgKGludCkgbXNncy5nZXQoNCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoOSwgKGludCkgbXNncy5nZXQoNCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgxKSk7CisgICAgICAgICAgICBmb3IgKFJlc3BvbnNlTWVzc2FnZSByZXNwIDogbXNncy5zdWJMaXN0KDUsIG1zZ3Muc2l6ZSgpKSkgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCByZXNwLmdldFJlc3VsdCgpLmdldERhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0vLyAgICBAVGVzdAotLy8gICAgcHVibGljIHZvaWQgc2hvdWxkQmF0Y2hSZXN1bHRzQnlUd29zV2l0aERyaXZlcigpIHRocm93cyBFeGNlcHRpb24gewotLy8gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7Ci0vLyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotLy8KLS8vICAgICAgICB0cnkgewotLy8gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3VsdD4gcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoIlswLDEsMiwzLDQsNSw2LDcsOCw5XSIpLmFsbCgpLmpvaW4oKTsKLS8vICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IHJlc3VsdHMuc2l6ZSgpOyBpeCsrKSB7Ci0vLyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoaXgsIHJlc3VsdHMuZ2V0KGl4KS5nZXRJbnQoKSk7Ci0vLyAgICAgICAgICAgIH0KLS8vICAgICAgICB9IGZpbmFsbHkgewotLy8gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0vLyAgICAgICAgfQotLy8gICAgfQotCiAgICAgQFRlc3QKLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRCYXRjaFJlc3VsdHNCeU9uZXNCeU92ZXJyaWRpbmdGcm9tQ2xpZW50U2lkZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVXZWJTb2NrZXRDbGllbnQoKSkgewotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiWzAsMSwyLDMsNCw1LDYsNyw4LDldIikKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19CQVRDSF9TSVpFLCAxKS5jcmVhdGUoKTsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRCYXRjaFJlc3VsdHNCeVR3b3NXaXRoRHJpdmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IG1zZ3MgPSBjbGllbnQuc3VibWl0KHJlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwLCBtc2dzLnNpemUoKSk7Ci0gICAgICAgICAgICBJbnRTdHJlYW0ucmFuZ2VDbG9zZWQoMCwgOSkuZm9yRWFjaChpIC0+IGFzc2VydEVxdWFscyhpLCAoKExpc3Q8SW50ZWdlcj4pIG1zZ3MuZ2V0KGkpLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApLmludFZhbHVlKCkpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMCwxLDIsMyw0LDUsNiw3LDgsOSkiKS5hbGwoKS5qb2luKCk7CisgICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgcmVzdWx0cy5zaXplKCk7IGl4KyspIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoaXgsIHJlc3VsdHMuZ2V0KGl4KS5nZXRJbnQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdFRocm93Tm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVXZWJTb2NrZXRDbGllbnQoKSl7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSl7CiAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCByZXR1cm4gIm5vdGhpbmciIC0gdGhlcmUgc2hvdWxkIGJlIG5vIGV4Y2VwdGlvbgogICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQoImcuVigpLmhhcygnbmFtZScsJ2thZGZqYWxkamZsYScpIik7Ci0gICAgICAgICAgICBhc3NlcnROdWxsKHJlc3BvbnNlcy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoKChMaXN0KSByZXNwb25zZXMuZ2V0KDApLmdldFJlc3VsdCgpLmdldERhdGEoKSkuaXNFbXB0eSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0CiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVjZWl2ZUZhaWx1cmVUaW1lT3V0T25TY3JpcHRFdmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKXsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzcG9uc2VNZXNzYWdlPiByZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KCJUaHJlYWQuc2xlZXAoMzAwMCk7J3NvbWUtc3R1ZmYtdGhhdC1zaG91bGQgbm90IHJldHVybiciKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIGFsbE9mKHN0YXJ0c1dpdGgoIkV2YWx1YXRpb24gZXhjZWVkZWQiKSwgY29udGFpbnNTdHJpbmcoIjEwMDAgbXMiKSkpOworICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVTaW1wbGVIdHRwQ2xpZW50KCkpeworICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQoCisgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJUaHJlYWQuc2xlZXAoMzAwMCk7J3NvbWUtc3R1ZmYtdGhhdC1zaG91bGQgbm90IHJldHVybiciKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRMYW5ndWFnZSgiZ3JlbWxpbi1ncm9vdnkiKS5jcmVhdGUoKQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZXMuZ2V0KDApLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKS5jb250YWlucygidGltZW91dCBvY2N1cnJlZCIpKTsKIAogICAgICAgICAgICAgLy8gdmFsaWRhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgc2VuZCBtZXNzYWdlcyB0byB0aGUgc2VydmVyCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKChMaXN0PEludGVnZXI+KSBjbGllbnQuc3VibWl0KCIxKzEiKS5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKChJbnRlZ2VyKSAoY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkpLmludFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWNlaXZlRmFpbHVyZVRpbWVPdXRPbkV2YWxVc2luZ092ZXJyaWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZXZhbCIpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfRVZBTF9USU1FT1VULCAxMDBMKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJUaHJlYWQuc2xlZXAoMzAwMCk7J3NvbWUtc3R1ZmYtdGhhdC1zaG91bGQgbm90IHJldHVybiciKQorICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVTaW1wbGVIdHRwQ2xpZW50KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJUaHJlYWQuc2xlZXAoMzAwMCk7J3NvbWUtc3R1ZmYtdGhhdC1zaG91bGQgbm90IHJldHVybiciKQorICAgICAgICAgICAgICAgICAgICAuYWRkVGltZW91dE1pbGxpcygxMDBMKQorICAgICAgICAgICAgICAgICAgICAuYWRkTGFuZ3VhZ2UoImdyZW1saW4tZ3Jvb3Z5IikKICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwogICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQobXNnKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIGFsbE9mKHN0YXJ0c1dpdGgoIkV2YWx1YXRpb24gZXhjZWVkZWQiKSwgY29udGFpbnNTdHJpbmcoIjEwMCBtcyIpKSk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCBjb250YWluc1N0cmluZygiQSB0aW1lb3V0IG9jY3VycmVkIGR1cmluZyB0cmF2ZXJzYWwgZXZhbHVhdGlvbiIpKTsKIAogICAgICAgICAgICAgLy8gdmFsaWRhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgc2VuZCBtZXNzYWdlcyB0byB0aGUgc2VydmVyCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKChMaXN0PEludGVnZXI+KSBjbGllbnQuc3VibWl0KCIxKzEiKS5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKChJbnRlZ2VyKSAoY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkpLmludFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWNlaXZlRmFpbHVyZVRpbWVPdXRPblNjcmlwdEV2YWxPZk91dE9mQ29udHJvbExvb3AoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpeworICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVTaW1wbGVIdHRwQ2xpZW50KCkpewogICAgICAgICAgICAgLy8gdGltZW91dCBjb25maWd1cmVkIGZvciAxIHNlY29uZCBzbyB0aGUgdGltZWQgaW50ZXJydXB0IHNob3VsZCB0cmlnZ2VyIHByaW9yIHRvIHRoZQogICAgICAgICAgICAgLy8gZXZhbHVhdGlvblRpbWVvdXQgd2hpY2ggaXMgYXQgMzAgc2Vjb25kcyBieSBkZWZhdWx0Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gcmVzcG9uc2VzID0gY2xpZW50LnN1Ym1pdCgid2hpbGUodHJ1ZSl7fSIpOworICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQoCisgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJ3aGlsZSh0cnVlKXt9IikuYWRkTGFuZ3VhZ2UoImdyZW1saW4tZ3Jvb3Z5IikuY3JlYXRlKCkKKyAgICAgICAgICAgICk7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCBzdGFydHNXaXRoKCJUaW1lb3V0IGR1cmluZyBzY3JpcHQgZXZhbHVhdGlvbiB0cmlnZ2VyZWQgYnkgVGltZWRJbnRlcnJ1cHRDdXN0b21pemVyUHJvdmlkZXIiKSk7CiAKICAgICAgICAgICAgIC8vIHZhbGlkYXRlIHRoYXQgd2UgY2FuIHN0aWxsIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHNlcnZlcgotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsICgoTGlzdDxJbnRlZ2VyPikgY2xpZW50LnN1Ym1pdCgiMSsxIikuZ2V0KDApLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApLmludFZhbHVlKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsICgoSW50ZWdlcikgKGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuZ2V0KDApLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0CiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgcHVibGljIHZvaWQgc2hvdWxkTG9hZEluaXRTY3JpcHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsICgoTGlzdDxJbnRlZ2VyPikgY2xpZW50LnN1Ym1pdCgiYWRkSXRVcCgxLDEpIikuZ2V0KDApLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApLmludFZhbHVlKCkpOworICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVTaW1wbGVIdHRwQ2xpZW50KCkpeworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsICgoSW50ZWdlcikgKGNsaWVudC5zdWJtaXQoCisgICAgICAgICAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJhZGRJdFVwKDEsMSkiKS5hZGRMYW5ndWFnZSgiZ3JlbWxpbi1ncm9vdnkiKS5jcmVhdGUoKQorICAgICAgICAgICAgKS5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkpLmludFZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDAzLDE2ICs3MjIsMTggQEAKICAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImFkZEl0VXAoMSwxKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY2xpZW50LnN1Ym1pdCgiZGVmIHN1YnRyYWN0KHgseSl7eC15fTtzdWJ0cmFjdCgxLDEpIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBjbGllbnQuc3VibWl0KCJzdWJ0cmFjdCgxLDEpIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJhZGRJdFVwKDEsMSkiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCBjbGllbnQuc3VibWl0KCJkZWYgc3VidHJhY3QoeCx5KXt4LXl9O3N1YnRyYWN0KDEsMSkiLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCBjbGllbnQuc3VibWl0KCJzdWJ0cmFjdCgxLDEpIiwgZ3Jvb3Z5UmVxdWVzdE9wdGlvbnMpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOwogCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGJpbmRpbmdzLnB1dChHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lLktFWV9SRUZFUkVOQ0VfVFlQRSwgR3JlbWxpbkdyb292eVNjcmlwdEVuZ2luZS5SRUZFUkVOQ0VfVFlQRV9QSEFOVE9NKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNsaWVudC5zdWJtaXQoImRlZiBtdWx0aXBseSh4LHkpe3gqeX07bXVsdGlwbHkoMiwyKSIsIGJpbmRpbmdzKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgUmVxdWVzdE9wdGlvbnMgb3B0aW9ucyA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuYWRkUGFyYW1ldGVyKEdyZW1saW5Hcm9vdnlTY3JpcHRFbmdpbmUuS0VZX1JFRkVSRU5DRV9UWVBFLCBHcmVtbGluR3Jvb3Z5U2NyaXB0RW5naW5lLlJFRkVSRU5DRV9UWVBFX1BIQU5UT00pCisgICAgICAgICAgICAgICAgLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY2xpZW50LnN1Ym1pdCgiZGVmIG11bHRpcGx5KHgseSl7eCp5fTttdWx0aXBseSgyLDIpIiwgb3B0aW9ucykuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIm11bHRpcGx5KDIsMikiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgibXVsdGlwbHkoMiwyKSIsIGdyb292eVJlcXVlc3RPcHRpb25zKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBzaW5jZSByZWZlcmVuY2UgaXMgcGhhbnRvbS4iKTsKICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBpZ25vcmVkKSB7CiAKQEAgLTEwMjEsMjUgKzc0Miw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlY2VpdmVGYWlsdXJlT25CYWRHcmFwaFNPTlNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJjbGFzcyBDIHsgZGVmIEMgZ2V0Qygpe3JldHVybiB0aGlzfX07IG5ldyBDKCkiKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgICAgICBmYWlsKCJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UocmUpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgQ29yZU1hdGNoZXJzLnN0YXJ0c1dpdGgoIkVycm9yIGR1cmluZyBzZXJpYWxpemF0aW9uOiBEaXJlY3Qgc2VsZi1yZWZlcmVuY2UgbGVhZGluZyB0byBjeWNsZSAodGhyb3VnaCByZWZlcmVuY2UgY2hhaW46IikpOwotCi0gICAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGF0IHdlIGNhbiBzdGlsbCBzZW5kIG1lc3NhZ2VzIHRvIHRoZSBzZXJ2ZXIKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJUaHJvd2FibGVSZXN1bHRPZk1ldGhvZENhbGxJZ25vcmVkIikKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZEJsb2NrUmVxdWVzdFdoZW5Ub29CaWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEwNDgsNyArNzUwLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZhdHR5ID0gSW50U3RyZWFtLnJhbmdlKDAsIDEwMjQpLm1hcFRvT2JqKFN0cmluZzo6dmFsdWVPZikuY29sbGVjdChDb2xsZWN0b3JzLmpvaW5pbmcoKSk7Ci0gICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxSZXN1bHRTZXQ+IHJlc3VsdCA9IGNsaWVudC5zdWJtaXRBc3luYygiJyIgKyBmYXR0eSArICInOyd0ZXN0JyIpOworICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiByZXN1bHQgPSBjbGllbnQuc3VibWl0QXN5bmMoU3RyaW5nLmZvcm1hdCgiZy5pbmplY3QoJyVzJykuY29uc3RhbnQoJ3Rlc3QnKSIsIGZhdHR5KSk7CiAgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0U2V0ID0gcmVzdWx0LmdldCgxMDAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKICAgICAgICAgICAgIHJlc3VsdFNldC5hbGwoKS5nZXQoMTAwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiIpOwpAQCAtMTA2MCwxMiArNzYyLDEyIEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiByZSkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKHJlKTsKIAotICAgICAgICAgICAgLy8gd2VudCB3aXRoIHR3byBwb3NzaWJsZSBlcnJvciBtZXNzYWdlcyBoZXJlIGFzIGkgdGhpbmsgdGhhdCB0aGVyZSBpcyBzb21lIGVpdGhlciBub24tZGV0ZXJtaW5pc3RpYwotICAgICAgICAgICAgLy8gYmVoYXZpb3IgYXJvdW5kIHRoZSBlcnJvciBtZXNzYWdlIG9yIGl0J3MgZW52aXJvbm1lbnRhbGx5IGRlcGVuZGVudCAoZS5nLiBkaWZmZXJlbnQgamRrLCB2ZXJzaW9ucywgZXRjKQotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgTWF0Y2hlcnMuYW55T2YoaXMoIkNvbm5lY3Rpb24gdG8gc2VydmVyIGlzIG5vIGxvbmdlciBhY3RpdmUiKSwgaXMoIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciIpKSk7CisgICAgICAgICAgICAvLyB0aGUgc2VydmVyIHNlbmRzIGJhY2sgYSA0MTMgUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlIG5vdyBpbiBIVFRQIHNvIGRldGVjdCB0aGF0IHJhdGhlciB0aGFuIHRoZQorICAgICAgICAgICAgLy8gdW5kZXJseWluZyBjb25uZWN0aW9uIGNsb3NpbmcgZHVlIHRvIGVycm9yLgorICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgTWF0Y2hlcnMuYW55T2YoaXMoIlJlcXVlc3QgRW50aXR5IFRvbyBMYXJnZSIpKSk7CiAKICAgICAgICAgICAgIC8vIHZhbGlkYXRlIHRoYXQgd2UgY2FuIHN0aWxsIHNlbmQgbWVzc2FnZXMgdG8gdGhlIHNlcnZlcgotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTEwNzcsMTQgKzc3OSwxNCBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgLy8gZW5zdXJlIHRoYXQgY29ubmVjdGlvbiB0byBzZXJ2ZXIgaXMgZ29vZAotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOwogCiAgICAgICAgIC8vIGtpbGwgdGhlIHNlcnZlciB3aGljaCB3aWxsIG1ha2UgdGhlIGNsaWVudCBtYXJrIHRoZSBob3N0IGFzIHVuYXZhaWxhYmxlCiAgICAgICAgIHRoaXMuc3RvcFNlcnZlcigpOwogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyB0cnkgdG8gcmUtaXNzdWUgYSByZXF1ZXN0IG5vdyB0aGF0IHRoZSBzZXJ2ZXIgaXMgZG93bgotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZyIpLmFsbCgpLmpvaW4oKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuam9pbigpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4iKTsKICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiByZSkgewogICAgICAgICAgICAgLy8gQ2xpZW50IHdvdWxkIGhhdmUgbm8gYWN0aXZlIGNvbm5lY3Rpb25zIHRvIHRoZSBob3N0LCBoZW5jZSBpdCB3b3VsZCBlbmNvdW50ZXIgYSB0aW1lb3V0CkBAIC0xMTA3LDcgKzgwOSw3IEBACiAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IG5lZWQgdG8gc3VjY2VlZCBhdCByZWNvbm5lY3Qgb25lIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTGlzdDxSZXN1bHQ+IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5qb2luKCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5qb2luKCk7CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZXN1bHRzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHRzLmdldCgwKS5nZXRJbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEyMyw0MiArODI1LDY2IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEhhdmVQYXJ0aWFsQ29udGVudFdpdGhPbmVSZXN1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgIjEwIikuY3JlYXRlKCk7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgeworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLmluamVjdCgxMCkiKS5jcmVhdGUoKTsKICAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzcG9uc2VNZXNzYWdlPiByZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KHJlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlc3BvbnNlcy5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTLCByZXNwb25zZXMuZ2V0KDApLmdldFN0YXR1cygpLmdldENvZGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVQYXJ0aWFsQ29udGVudFdpdGhMb25nUmVzdWx0c0NvbGxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgIm5ldyBTdHJpbmdbMTAwXSIpLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQocmVxdWVzdCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3BvbnNlcy5zaXplKCksIE1hdGNoZXJzLmdyZWF0ZXJUaGFuKDEpKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3I8UmVzcG9uc2VNZXNzYWdlPiBpdCA9IHJlc3BvbnNlcy5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkgewotICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBtc2cgPSBpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGV4cGVjdGVkID0gaXQuaGFzTmV4dCgpID8gUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCA6IFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgbXNnLmdldFN0YXR1cygpLmdldENvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAsIHJlc3BvbnNlcy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSk7CisgICAgICAgICAgICBmb3IgKFJlc3BvbnNlTWVzc2FnZSByZXNwIDogcmVzcG9uc2VzLnN1Ykxpc3QoMSwgcmVzcG9uc2VzLnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgcmVzcC5nZXRSZXN1bHQoKS5nZXREYXRhKCkuc2l6ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdpdGhCYWRTY3JpcHRFdmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVdlYlNvY2tldENsaWVudCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJuZXcgU3RyaW5nKCkuZG9Ob3RoaW5nQXRBbGxCZWNhdXNlVGhpcyBpcyBhIHN5bnRheCBlcnJvciIpLmNyZWF0ZSgpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVQYXJ0aWFsQ29udGVudFdpdGhMb25nUmVzdWx0c0NvbGxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IChTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlU2ltcGxlSHR0cENsaWVudCgpKSB7CisgICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnLmluamVjdCgwKS5yZXBlYXQodW5pb24oaWRlbnRpdHkoKSwgaWRlbnRpdHkoKSkpLnRpbWVzKDcpIikuY3JlYXRlKCk7CiAgICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gcmVzcG9uc2VzID0gY2xpZW50LnN1Ym1pdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0VWQUxVQVRJT04sIHJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZXNwb25zZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzcG9uc2VzLnNpemUoKSwgTWF0Y2hlcnMuZ3JlYXRlclRoYW4oMSkpOworCisgICAgICAgICAgICAvLyBmaXJzdCBtZXNzYWdlIGhhdmUgbm8gc3RhdHVzCisgICAgICAgICAgICBhc3NlcnROdWxsKHJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkpOworICAgICAgICAgICAgLy8gZmlyc3QgbWVzc2FnZSBjb250YWlucyBkYXRhCisgICAgICAgICAgICBhc3NlcnRGYWxzZShyZXNwb25zZXMuZ2V0KDApLmdldFJlc3VsdCgpLmdldERhdGEoKS5pc0VtcHR5KCkpOworICAgICAgICAgICAgLy8gc2Vjb25kIG9uZSBjb250YWlucyBsYXN0IHBpZWNlIG9mIGRhdGEKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuT0ssIHJlc3BvbnNlcy5nZXQoMSkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgICAgIC8vIHNlY29uZCBtZXNzYWdlIGNvbnRhaW5zIGRhdGEKKyAgICAgICAgICAgIGFzc2VydEZhbHNlKHJlc3BvbnNlcy5nZXQoMSkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmlzRW1wdHkoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxXaXRoQmFkU2NyaXB0RXZhbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVTaW1wbGVIdHRwQ2xpZW50KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZQorICAgICAgICAgICAgICAgICAgICAuYnVpbGQoIm5ldyBTdHJpbmcoKS5kb05vdGhpbmdBdEFsbEJlY2F1c2VUaGlzIGlzIGEgc3ludGF4IGVycm9yIikKKyAgICAgICAgICAgICAgICAgICAgLmFkZExhbmd1YWdlKCJncmVtbGluLWdyb292eSIpCisgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzcG9uc2VNZXNzYWdlPiByZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KHJlcXVlc3QpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsIHJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgICAgIGZvciAoUmVzcG9uc2VNZXNzYWdlIHJlc3AgOiByZXNwb25zZXMuc3ViTGlzdCgxLCByZXNwb25zZXMuc2l6ZSgpKSkgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCByZXNwLmdldFJlc3VsdCgpLmdldERhdGEoKS5zaXplKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsV2l0aE1hbGZvcm1lZFF1ZXJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSkgeworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlCisgICAgICAgICAgICAgICAgICAgIC5idWlsZCgiZy5pbmplY3QoMSwgMiwgZy5WKCkpIikKKyAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQocmVxdWVzdCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLkJBRF9SRVFVRVNULCByZXNwb25zZXMuZ2V0KDApLmdldFN0YXR1cygpLmdldENvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIk1hbGZvcm1lZFF1ZXJ5RXhjZXB0aW9uIiwgcmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICBmb3IgKFJlc3BvbnNlTWVzc2FnZSByZXNwIDogcmVzcG9uc2VzLnN1Ykxpc3QoMSwgcmVzcG9uc2VzLnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgcmVzcC5nZXRSZXN1bHQoKS5nZXREYXRhKCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgQElnbm9yZSgiTGFtYmRhIGlzIG5vdCBzdXBwb3J0ZWQiKQogICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1cHBvcnRMYW1iZGFzVXNpbmdXaXRoUmVtb3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbmYpOwogICAgICAgICBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJhZ2UiLCAyMCkuaXRlcmF0ZSgpOwpAQCAtMTE2OCw2ICs4OTQsNyBAQAogICAgIH0KIAogICAgIEBUZXN0CisgICAgQElnbm9yZSgiTGFtYmRhIGlzIG5vdCBzdXBwb3J0ZWQiKQogICAgIHB1YmxpYyB2b2lkIHNob3VsZERvTm9uQmxvY2tpbmdQcm9taXNlV2l0aFJlbW90ZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShjb25mKTsKICAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgiYWdlIiwgMjApLnByb21pc2UoVHJhdmVyc2FsOjppdGVyYXRlKS5qb2luKCk7CkBAIC0xMTk0LDIzICs5MjEsMjMgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFByb3ZpZGVCZXR0ZXJFeGNlcHRpb25Gb3JNZXRob2RDb2RlVG9vTGFyZ2UoKSB7CiAgICAgICAgIGZpbmFsIGludCBudW1iZXJPZlBhcmFtZXRlcnMgPSA2MDAwOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gYiA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgUmVxdWVzdE9wdGlvbnMuQnVpbGRlciBvcHRpb25zQnVpbGRlciA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkubGFuZ3VhZ2UoImdyZW1saW4tZ3Jvb3Z5Iik7CiAKLSAgICAgICAgLy8gZ2VuZXJhdGUgYSBzY3JpcHQgd2l0aCBhIHRvbiBvZiBiaW5kaW5ncyB1c2FnZSB0byBnZW5lcmF0ZSBhICJjb2RlIHRvbyBsYXJnZSIgZXhjZXB0aW9uCisgICAgICAgIC8vIGdlbmVyYXRlIGEgc2NyaXB0IHdpdGggYSB0b24gb2YgcGFyYW1ldGVyIHVzYWdlIHRvIGdlbmVyYXRlIGEgImNvZGUgdG9vIGxhcmdlIiBleGNlcHRpb24KICAgICAgICAgU3RyaW5nIHNjcmlwdCA9ICJ4ID0gMCI7CiAgICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCBudW1iZXJPZlBhcmFtZXRlcnM7IGl4KyspIHsKICAgICAgICAgICAgIGlmIChpeCA+IDAgJiYgaXggJSAxMDAgPT0gMCkgewogICAgICAgICAgICAgICAgIHNjcmlwdCA9IHNjcmlwdCArICI7IiArIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkgKyAieCA9IHgiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2NyaXB0ID0gc2NyaXB0ICsgIiArIHgiICsgaXg7Ci0gICAgICAgICAgICBiLnB1dCgieCIgKyBpeCwgaXgpOworICAgICAgICAgICAgb3B0aW9uc0J1aWxkZXIuYWRkUGFyYW1ldGVyKCJ4IiArIGl4LCBpeCk7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLm1heENvbnRlbnRMZW5ndGgoNDA5NjAwMCkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkubWF4UmVzcG9uc2VDb250ZW50TGVuZ3RoKDQwOTYwMDApLmNyZWF0ZSgpOwogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoc2NyaXB0LCBiKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoc2NyaXB0LCBvcHRpb25zQnVpbGRlci5jcmVhdGUoKSkuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0YW5rZWQgb3V0IGJlY2F1c2Ugb2YgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdXNlZCBhbmQgc2l6ZSBvZiB0aGUgY29tcGlsZSBzY3JpcHQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KGV4LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIlRoZSBHcmVtbGluIHN0YXRlbWVudCB0aGF0IHdhcyBzdWJtaXR0ZWQgZXhjZWVkcyB0aGUgbWF4aW11bSBjb21waWxhdGlvbiBzaXplIGFsbG93ZWQgYnkgdGhlIEpWTSIpKTsKQEAgLTEyMjUsMTI5ICs5NTIsMjMgQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmFkZFYoJ3BlcnNvbicpLnNpZGVFZmZlY3R7dGhyb3cgbmV3IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuRGVmYXVsdFRlbXBvcmFyeUV4Y2VwdGlvbigndHJ5IGFnYWluIScpfSIpLmFsbCgpLmdldCgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5hZGRWKCdwZXJzb24nKS5zaWRlRWZmZWN0e3Rocm93IG5ldyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci51dGlsLkRlZmF1bHRUZW1wb3JhcnlFeGNlcHRpb24oJ3RyeSBhZ2FpbiEnKX0iLCBncm9vdnlSZXF1ZXN0T3B0aW9ucykuYWxsKCkuZ2V0KCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0YW5rZWQgc2luY2Ugd2UgdGhyZXcgYW4gZXhjZXB0aW9uIG91dCBtYW51YWxseSIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSB0ID0gZXguZ2V0Q2F1c2UoKTsKICAgICAgICAgICAgIGFzc2VydFRoYXQodCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0cnkgYWdhaW4hIiwgdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVEVNUE9SQVJZLCAoKFJlc3BvbnNlRXhjZXB0aW9uKSB0KS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmVwcm9kdWNlciBmb3IgVElOS0VSUE9QLTI3Njkgd2l0aCByZXF1ZXN0IHNlbnQgdG8gV2ViU29ja2V0Q2hhbm5lbGl6ZXIuCi0gICAgICovCi0gICAgQFRlc3QodGltZW91dCA9IDE4MDAwMCkgLy8gQWRkIHRpbWVvdXQgaW4gY2FzZSB0aGUgdGVzdCBoYW5ncy4KLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXNwb25kVG9UaW1lb3V0Q2FuY2VsbGVkV3NSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbmYpOwotICAgICAgICBydW5UaW1lb3V0VGVzdChnKTsKLSAgICAgICAgZy5jbG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcHJvZHVjZXIgZm9yIFRJTktFUlBPUC0yNzY5IHdpdGggcmVxdWVzdCBoYXZpbmcgYSBTZXNzaW9uIElEIHNlbnQgdG8gV2ViU29ja2V0Q2hhbm5lbGl6ZXIuCi0gICAgICovCi0gICAgQFRlc3QodGltZW91dCA9IDE4MDAwMCkgLy8gQWRkIHRpbWVvdXQgaW4gY2FzZSB0aGUgdGVzdCBoYW5ncy4KLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXNwb25kVG9UaW1lb3V0Q2FuY2VsbGVkU2Vzc2lvblJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gRG9uJ3QgdGVzdCB3aXRoIFVuaWZpZWRDaGFubmVsaXplciBzaW5jZSB3ZSBvbmx5IHdhbnQgdG8gdGVzdCB0aGUgY2FzZSB3aGVyZSBhIHRhc2sgaXMgY2FuY2VsbGVkIGJlZm9yZQotICAgICAgICAvLyBydW5uaW5nIHdoaWNoIGlzIGhhbmRsZWQgYnkgc2hvdWxkUmVzcG9uZFRvVGltZW91dENhbmNlbGxlZE11bHRpVGFza1VuaWZpZWRSZXF1ZXN0LgotICAgICAgICBhc3N1bWVUaGF0KCJNdXN0IHVzZSBPcFByb2Nlc3NvciIsIGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4ID0gZy50eCgpLmJlZ2luKCk7Ci0KLSAgICAgICAgcnVuVGltZW91dFRlc3QoZ3R4KTsKLQotICAgICAgICBndHgudHgoKS5jb21taXQoKTsKLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcHJvZHVjZXIgZm9yIFRJTktFUlBPUC0yNzY5IHdpdGggcmVxdWVzdCBzZW50IHRvIFVuaWZpZWRDaGFubmVsaXplci4KLSAgICAgKi8KLSAgICBAVGVzdCh0aW1lb3V0ID0gMTgwMDAwKSAvLyBBZGQgdGltZW91dCBpbiBjYXNlIHRoZSB0ZXN0IGhhbmdzLgotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlc3BvbmRUb1RpbWVvdXRDYW5jZWxsZWRTaW5nbGVUYXNrVW5pZmllZFJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoY29uZik7Ci0gICAgICAgIHJ1blRpbWVvdXRUZXN0KGcpOwotICAgICAgICBnLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVwcm9kdWNlciBmb3IgVElOS0VSUE9QLTI3Njkgd2l0aCByZXF1ZXN0IGhhdmluZyBhIFNlc3Npb24gSUQgc2VudCB0byBVbmlmaWVkQ2hhbm5lbGl6ZXIuCi0gICAgICovCi0gICAgQFRlc3QodGltZW91dCA9IDE4MDAwMCkgLy8gQWRkIHRpbWVvdXQgaW4gY2FzZSB0aGUgdGVzdCBoYW5ncy4KLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXNwb25kVG9UaW1lb3V0Q2FuY2VsbGVkTXVsdGlUYXNrVW5pZmllZFJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGd0eCA9IGcudHgoKS5iZWdpbigpOwotCi0gICAgICAgIGcuYWRkVigicGVyc29uIikuYXMoInAiKS5hZGRFKCJzZWxmIikudG8oInAiKS5pdGVyYXRlKCk7Ci0KLSAgICAgICAgLy8gTnVtYmVyIG9mIHRocmVhZHMvdGFza3MgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgZ3JlbWxpblBvb2wgc2V0IGluIG92ZXJyaWRlU2V0dGluZ3MoKS4KLSAgICAgICAgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIHRocmVhZFBvb2wgPSBFeGVjdXRvcnMubmV3U2NoZWR1bGVkVGhyZWFkUG9vbCgyKTsKLSAgICAgICAgLy8gVXNlIGEgcmVxdWVzdCB3aXRob3V0IHNlc3Npb24gdG8gZmlsbCB0aGUgcXVldWUgc2luY2Ugd2Ugd2FudCB0byB0ZXN0IGNhbmNlbCBvbiBmaXJzdCBzZXNzaW9uIHJlcXVlc3QuCi0gICAgICAgIGZpbmFsIEZ1dHVyZTw/PiBmaXJzdFJlc3VsdCA9IHRocmVhZFBvb2wuc3VibWl0KCgpIC0+IGcuVigpLnJlcGVhdChfXy5vdXQoKSkudW50aWwoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpLml0ZXJhdGUoKSk7Ci0gICAgICAgIC8vIERlbGF5IHRoaXMgcmVxdWVzdCBzbGlnaHRseSBhcyB3ZSB3YW50IHRvIHRlc3QgdGhhdCB0aGUgTXVsdGlUYXNrU2Vzc2lvbiBpcyBwcm9wZXJseSByZXR1cm5pbmcgYW4gZXJyb3Igd2hlbiBpdCBpcyBjYW5jZWxsZWQuCi0gICAgICAgIGZpbmFsIEZ1dHVyZTw/PiBzZWNvbmRSZXN1bHQgPSB0aHJlYWRQb29sLnNjaGVkdWxlKCgpIC0+IGd0eC5WKCkucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5vdXRFKCkuY291bnQoKS5pcygwKSkuaXRlcmF0ZSgpLCA1MDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaXJzdFJlc3VsdC5nZXQoKTsKLSAgICAgICAgICAgIGZhaWwoIlRoaXMgdHJhdmVyc2FsIHNob3VsZCBoYXZlIHRpbWVkIG91dCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSB0ID0gZXguZ2V0Q2F1c2UoKS5nZXRDYXVzZSgpOyAvLyBHZXQgdGhlIG5lc3RlZCBSZXNwb25zZUV4Y2VwdGlvbi4KLSAgICAgICAgICAgIGFzc2VydFRoYXQodCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVElNRU9VVCwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNlY29uZFJlc3VsdC5nZXQoKTsKLSAgICAgICAgICAgIGZhaWwoIlRoaXMgdHJhdmVyc2FsIHNob3VsZCBoYXZlIHRpbWVkIG91dCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSB0ID0gZXguZ2V0Q2F1c2UoKS5nZXRDYXVzZSgpOyAvLyBHZXQgdGhlIG5lc3RlZCBSZXNwb25zZUV4Y2VwdGlvbi4KLSAgICAgICAgICAgIGFzc2VydFRoYXQodCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfVElNRU9VVCwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhyZWFkUG9vbC5zaHV0ZG93bigpOwotICAgICAgICBndHgudHgoKS5yb2xsYmFjaygpOwotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJ1blRpbWVvdXRUZXN0KEdyYXBoVHJhdmVyc2FsU291cmNlIGcpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBtYWtlIGEgZ3JhcGggd2l0aCBhIGN5Y2xlIGluIGl0IHRvIGZvcmNlIGEgbG9uZyBydW4gdHJhdmVyc2FsCi0gICAgICAgIGcuYWRkVigicGVyc29uIikuYXMoInAiKS5hZGRFKCJzZWxmIikudG8oInAiKS5pdGVyYXRlKCk7Ci0KLSAgICAgICAgLy8gTnVtYmVyIG9mIHRocmVhZHMvdGFza3MgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgZ3JlbWxpblBvb2wgc2V0IGluIG92ZXJyaWRlU2V0dGluZ3MoKS4KLSAgICAgICAgZmluYWwgaW50IG51bVRhc2tzTmVlZGVkVG9PdmVybG9hZFBvb2wgPSBQT09MX1NJWkVfRk9SX1RJTUVPVVRfVEVTVFMgKyAyOwotICAgICAgICBmaW5hbCBFeGVjdXRvclNlcnZpY2UgdGhyZWFkUG9vbCA9IEV4ZWN1dG9ycy5uZXdGaXhlZFRocmVhZFBvb2wobnVtVGFza3NOZWVkZWRUb092ZXJsb2FkUG9vbCk7Ci0gICAgICAgIC8vIHRlc3QgInVuZW5kaW5nIiB0cmF2ZXJzYWxzCi0gICAgICAgIGZpbmFsIExpc3Q8RnV0dXJlPD8+PiByZXN1bHRzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGFza3NOZWVkZWRUb092ZXJsb2FkUG9vbDsgaSsrKSB7Ci0gICAgICAgICAgICByZXN1bHRzLmFkZCh0aHJlYWRQb29sLnN1Ym1pdCgoKSAtPiBnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKS5pdGVyYXRlKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoZmluYWwgRnV0dXJlPD8+IHJlc3VsdCA6IHJlc3VsdHMpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmdldCgpOwotICAgICAgICAgICAgICAgIGZhaWwoIlRoaXMgdHJhdmVyc2FsIHNob3VsZCBoYXZlIHRpbWVkIG91dCIpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBleC5nZXRDYXVzZSgpLmdldENhdXNlKCk7IC8vIEdldCB0aGUgbmVzdGVkIFJlc3BvbnNlRXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIGFzc2VydFRoYXQodCwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX1RJTUVPVVQsICgoUmVzcG9uc2VFeGNlcHRpb24pIHQpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRocmVhZFBvb2wuc2h1dGRvd24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXByb2R1Y2VyIGZvciBUSU5LRVJQT1AtMjc2NSB3aGVuIHJ1biB1c2luZyB0aGUgVW5pZmllZENoYW5uZWxpemVyLgorICAgICAqIFJlcHJvZHVjZXIgZm9yIFRJTktFUlBPUC0yNzY1LgogICAgICAqLwogICAgIEBUZXN0CisgICAgQElnbm9yZSgiTGFtYmRhIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gc2VyaWFsaXphdGlvbiIpCiAgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlTXVsdGlwbGVMYW1iZGFUcmFuc2xhdGlvbnNJblBhcmFsbGVsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKGNvbmYpOwogCkBAIC0xMzc3LDggKzk5OCw4IEBACiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBleC5nZXRDYXVzZSgpOwogICAgICAgICAgICAgYXNzZXJ0VGhhdCh0LCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1ha2UgaXQgc3RvcCIsIHQuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SX0ZBSUxfU1RFUCwgKChSZXNwb25zZUV4Y2VwdGlvbikgdCkuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgYXNzZXJ0VGhhdCh0LmdldE1lc3NhZ2UoKSwgc3RhcnRzV2l0aCgibWFrZSBpdCBzdG9wIikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICgoUmVzcG9uc2VFeGNlcHRpb24pIHQpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQwNCw2ICsxMDI1LDU0IEBACiAgICAgICAgIGFzc2VydEZhbHNlKHIyX3Rva2Vucy5wcm9wZXJ0aWVzKCkuaGFzTmV4dCgpKTsKICAgICB9CiAKKwlAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEJ1bGtSZXN1bHRzV2l0aENsdXN0ZXJPcHRpb25zKCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmJ1bGtSZXN1bHRzKHRydWUpLmNyZWF0ZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7CisgICAgICAgICAgICBmaW5hbCBMaXN0IHJlc3VsdEJ1bGtlZCA9IGcud2l0aCgibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1sYW5nIikuaW5qZWN0KDEsIDIsIDMsIDIsIDEpLnRvTGlzdCgpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjbHVzdGVyLmlzQnVsa1Jlc3VsdHNFbmFibGVkKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlc3VsdEJ1bGtlZC5zaXplKCkpOworCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IGl0c2VsZiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IGJ1bGtpbmcgdGhyb3VnaCB0aGUgd2lyZQorICAgICAgICAgICAgZmluYWwgTGlzdCByZXN1bHQgPSBnLndpdGgoImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpLndpdGgoImJ1bGtSZXN1bHRzIiwgZmFsc2UpLmluamVjdCgxLCAyLCAzLCAyLCAxKS50b0xpc3QoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCByZXN1bHQuc2l6ZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjbHVzdGVyLmlzQnVsa1Jlc3VsdHNFbmFibGVkKCkpOworCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IGl0c2VsZiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IGJ1bGtpbmcgdGhyb3VnaCB0aGUgd2lyZQorICAgICAgICAgICAgZmluYWwgTGlzdCByZXN1bHRCdWxrZWQyID0gZy53aXRoKCJsYW5ndWFnZSIsICJncmVtbGluLWxhbmciKS53aXRoKCJidWxrUmVzdWx0cyIsIHRydWUpLmluamVjdCgxLCAyLCAzLCAyLCAxKS50b0xpc3QoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCByZXN1bHRCdWxrZWQyLnNpemUoKSk7CisKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQnVsa1Jlc3VsdHNXaXRoUmVxdWVzdE9wdGlvbnMoKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aChEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKKyAgICAgICAgICAgIGZpbmFsIExpc3QgcmVzdWx0ID0gZy5pbmplY3QoMSwgMiwgMywgMiwgMSkudG9MaXN0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRGYWxzZShjbHVzdGVyLmlzQnVsa1Jlc3VsdHNFbmFibGVkKCkpOworCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IGl0c2VsZiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IGJ1bGtpbmcgdGhyb3VnaCB0aGUgd2lyZQorICAgICAgICAgICAgZmluYWwgTGlzdCByZXN1bHRCdWxrZWQgPSBnLndpdGgoImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpLndpdGgoImJ1bGtSZXN1bHRzIiwgdHJ1ZSkuaW5qZWN0KDEsIDIsIDMsIDIsIDEpLnRvTGlzdCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHJlc3VsdEJ1bGtlZC5zaXplKCkpOworCisgICAgICAgICAgICBhc3NlcnRGYWxzZShjbHVzdGVyLmlzQnVsa1Jlc3VsdHNFbmFibGVkKCkpOworCisgICAgICAgICAgICAvLyB0aGUgcmVzdWx0IGl0c2VsZiBzaG91bGQgbm90IGJlIGFmZmVjdGVkIGJ5IGJ1bGtpbmcgdGhyb3VnaCB0aGUgd2lyZQorICAgICAgICAgICAgZmluYWwgTGlzdCByZXN1bHQyID0gZy53aXRoKCJsYW5ndWFnZSIsICJncmVtbGluLWxhbmciKS53aXRoKCJidWxrUmVzdWx0cyIsIGZhbHNlKS5pbmplY3QoMSwgMiwgMywgMiwgMSkudG9MaXN0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgcmVzdWx0Mi5zaXplKCkpOworCisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFBhcnNlRmxvYXRMaXRlcmFsV2l0aG91dFN1ZmZpeERlcGVuZGluZ09uTGFuZ3VhZ2UoKSB7CiAgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJTZXJpYWxpemF0aW9uSW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyU2VyaWFsaXphdGlvbkludGVncmF0ZVRlc3QuamF2YQppbmRleCA5NzkzZTAzLi4zMDBiMWUxIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJTZXJpYWxpemF0aW9uSW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlclNlcmlhbGl6YXRpb25JbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlcXVlc3RPcHRpb25zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5Ecml2ZXJSZW1vdGVDb25uZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKQEAgLTMxLDkgKzMyLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMzsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTU4LDYgKzU3LDEwIEBACiAgICAgcHJpdmF0ZSBDbGllbnQgY2xpZW50ID0gbnVsbDsKICAgICBwcml2YXRlIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBudWxsOwogCisgICAgcHJpdmF0ZSBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBnbW9kZXJuID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5hZGRHKCJnbW9kZXJuIikuY3JlYXRlKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBnY3JldyA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkuYWRkRygiZ2NyZXciKS5jcmVhdGUoKTsKKworCiAgICAgcHVibGljIEdyZW1saW5TZXJ2ZXJTZXJpYWxpemF0aW9uSW50ZWdyYXRlVGVzdChBYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIpIHsKICAgICAgICAgdGhpcy5zZXJpYWxpemVyID0gc2VyaWFsaXplcjsKICAgICB9CkBAIC02NSw5ICs2OCw3IEBACiAgICAgQFBhcmFtZXRlcml6ZWQuUGFyYW1ldGVycyhuYW1lID0gInswfSIpCiAgICAgcHVibGljIHN0YXRpYyBDb2xsZWN0aW9uIHNlcmlhbGl6ZXJzKCkgewogICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0W11bXXsKLSAgICAgICAgICAgICAgICB7bmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpfSwKLSAgICAgICAgICAgICAgICB7bmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMygpfSwKLSAgICAgICAgICAgICAgICB7bmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMigpfQorICAgICAgICAgICAgICAgIHtuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KCl9CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtOTAsMTQgKzkxLDE0IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplVmVydGV4UHJvcGVydGllc0ZvclNjcmlwdHMoKSB7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSBjbGllbnQuc3VibWl0KCJnbW9kZXJuLlYoMSkiKS5vbmUoKS5nZXRWZXJ0ZXgoKTsKKyAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IGNsaWVudC5zdWJtaXQoImcuVigxKSIsIGdtb2Rlcm4pLm9uZSgpLmdldFZlcnRleCgpOwogCiAgICAgICAgIGFzc2VydFZlcnRleFdpdGhQcm9wZXJ0aWVzKHZlcnRleCk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRTa2lwVmVydGV4UHJvcGVydGllc0ZvclNjcmlwdHMoKSB7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSBjbGllbnQuc3VibWl0KCJnbW9kZXJuLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKDEpIikub25lKCkuZ2V0VmVydGV4KCk7CisgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSBjbGllbnQuc3VibWl0KCJnLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKDEpIiwgZ21vZGVybikub25lKCkuZ2V0VmVydGV4KCk7CiAKICAgICAgICAgYXNzZXJ0VmVydGV4V2l0aG91dFByb3BlcnRpZXModmVydGV4KTsKICAgICB9CkBAIC0xMTgsMTQgKzExOSwxNCBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZUVkZ2VQcm9wZXJ0aWVzRm9yU2NyaXB0cygpIHsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gY2xpZW50LnN1Ym1pdCgiZ21vZGVybi5FKDcpIikub25lKCkuZ2V0RWRnZSgpOworICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSBjbGllbnQuc3VibWl0KCJnLkUoNykiLCBnbW9kZXJuKS5vbmUoKS5nZXRFZGdlKCk7CiAKICAgICAgICAgYXNzZXJ0RWRnZVdpdGhQcm9wZXJ0aWVzKGVkZ2UpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkU2tpcEVkZ2VQcm9wZXJ0aWVzRm9yU2NyaXB0cygpIHsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gY2xpZW50LnN1Ym1pdCgiZ21vZGVybi53aXRoKCdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnLCAndG9rZW5zJykuRSg3KSIpLm9uZSgpLmdldEVkZ2UoKTsKKyAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gY2xpZW50LnN1Ym1pdCgiZy53aXRoKCdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnLCAndG9rZW5zJykuRSg3KSIsIGdtb2Rlcm4pLm9uZSgpLmdldEVkZ2UoKTsKIAogICAgICAgICBhc3NlcnRFZGdlV2l0aG91dFByb3BlcnRpZXMoZWRnZSk7CiAgICAgfQpAQCAtMTQ2LDE0ICsxNDcsMTQgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVWZXJ0ZXhQcm9wZXJ0eVByb3BlcnRpZXNGb3JTY3JpcHRzKCkgewotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gY2xpZW50LnN1Ym1pdCgiZ2NyZXcuVig3KSIpLm9uZSgpLmdldFZlcnRleCgpOworICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gY2xpZW50LnN1Ym1pdCgiZy5WKDcpIiwgZ2NyZXcpLm9uZSgpLmdldFZlcnRleCgpOwogCiAgICAgICAgIGFzc2VydFZlcnRleFdpdGhWZXJ0ZXhQcm9wZXJ0aWVzKHZlcnRleCk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRTa2lwVmVydGV4UHJvcGVydHlQcm9wZXJ0aWVzRm9yU2NyaXB0cygpIHsKLSAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IGNsaWVudC5zdWJtaXQoImdjcmV3LndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKDcpIikub25lKCkuZ2V0VmVydGV4KCk7CisgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSBjbGllbnQuc3VibWl0KCJnLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsICd0b2tlbnMnKS5WKDcpIiwgZ2NyZXcpLm9uZSgpLmdldFZlcnRleCgpOwogCiAgICAgICAgIGFzc2VydFZlcnRleFdpdGhvdXRWZXJ0ZXhQcm9wZXJ0aWVzKHZlcnRleCk7CiAgICAgfQpAQCAtMTc0LDEzICsxNzUsMTMgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVQYXRoUHJvcGVydGllc0ZvclNjcmlwdHMoKSB7Ci0gICAgICAgIGZpbmFsIFBhdGggcCA9IGNsaWVudC5zdWJtaXQoImdtb2Rlcm4uVigpLmhhcygnbmFtZScsJ21hcmtvJykub3V0RSgpLmluVigpLmhhc0xhYmVsKCdzb2Z0d2FyZScpLnBhdGgoKSIpLm9uZSgpLmdldFBhdGgoKTsKKyAgICAgICAgZmluYWwgUGF0aCBwID0gY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzKCduYW1lJywnbWFya28nKS5vdXRFKCkuaW5WKCkuaGFzTGFiZWwoJ3NvZnR3YXJlJykucGF0aCgpIiwgZ21vZGVybikub25lKCkuZ2V0UGF0aCgpOwogICAgICAgICBhc3NlcnRQYXRoRWxlbWVudHNXaXRoUHJvcGVydGllcyhwKTsKICAgICB9CiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplUGF0aFByb3BlcnRpZXNGb3JTY3JpcHRzV2l0aFRva2VucygpIHsKLSAgICAgICAgZmluYWwgUGF0aCBwID0gY2xpZW50LnN1Ym1pdCgiZ21vZGVybi53aXRoKCdtYXRlcmlhbGl6ZVByb3BlcnRpZXMnLCd0b2tlbnMnKS5WKCkuaGFzKCduYW1lJywnbWFya28nKS5vdXRFKCkuaW5WKCkuaGFzTGFiZWwoJ3NvZnR3YXJlJykucGF0aCgpIikub25lKCkuZ2V0UGF0aCgpOworICAgICAgICBmaW5hbCBQYXRoIHAgPSBjbGllbnQuc3VibWl0KCJnLndpdGgoJ21hdGVyaWFsaXplUHJvcGVydGllcycsJ3Rva2VucycpLlYoKS5oYXMoJ25hbWUnLCdtYXJrbycpLm91dEUoKS5pblYoKS5oYXNMYWJlbCgnc29mdHdhcmUnKS5wYXRoKCkiLCBnbW9kZXJuKS5vbmUoKS5nZXRQYXRoKCk7CiAgICAgICAgIGFzc2VydFBhdGhFbGVtZW50c1dpdGhvdXRQcm9wZXJ0aWVzKHApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyU2Vzc2lvbkludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlclNlc3Npb25JbnRlZ3JhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMThlMTUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyU2Vzc2lvbkludGVncmF0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyMiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKLQotaW1wb3J0IGNoLnFvcy5sb2diYWNrLmNsYXNzaWMuTGV2ZWw7Ci1pbXBvcnQgY2gucW9zLmxvZ2JhY2suY2xhc3NpYy5Mb2dnZXI7Ci1pbXBvcnQgbmwuYWx0aW5kYWcubG9nLkxvZ0NhcHRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXN1bHRTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5zaW1wbGUuU2ltcGxlQ2xpZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWwuVW5pZmllZENoYW5uZWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLm9wLnNlc3Npb24uU2Vzc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbXBsZXRhYmxlRnV0dXJlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uSW50U3RyZWFtOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pbnN0YW5jZU9mOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0l0ZXJhYmxlQ29udGFpbmluZy5oYXNJdGVtOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5TdHJpbmdTdGFydHNXaXRoLnN0YXJ0c1dpdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3N1bWUuYXNzdW1lVGhhdDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBHcmVtbGluU2VydmVyU2Vzc2lvbkludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIExvZ0NhcHRvciBsb2dDYXB0b3I7Ci0gICAgcHJpdmF0ZSBMZXZlbCBvcmlnaW5hbExldmVsOwotCi0gICAgQEJlZm9yZUNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldHVwTG9nQ2FwdG9yKCkgewotICAgICAgICBsb2dDYXB0b3IgPSBMb2dDYXB0b3IuZm9yUm9vdCgpOwotICAgIH0KLQotICAgIEBBZnRlckNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duQWZ0ZXJDbGFzcygpIHsKLSAgICAgICAgbG9nQ2FwdG9yLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIHNldHVwRm9yRWFjaFRlc3QoKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lT2ZUZXN0ID0gbmFtZS5nZXRNZXRob2ROYW1lKCk7Ci0gICAgICAgIHN3aXRjaCAobmFtZU9mVGVzdCkgewotICAgICAgICAgICAgY2FzZSAic2hvdWxkQ2xvc2VTZXNzaW9uT25jZU9uUmVxdWVzdCI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRIYXZlVGhlU2Vzc2lvblRpbWVvdXQiOgotICAgICAgICAgICAgY2FzZSAic2hvdWxkQ2xvc2VTZXNzaW9uT25DbGllbnRDbG9zZSI6Ci0gICAgICAgICAgICAgICAgZmluYWwgTG9nZ2VyIHNlc3Npb25Mb2dnZXIgPSAoTG9nZ2VyKSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihTZXNzaW9uLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBvcmlnaW5hbExldmVsID0gc2Vzc2lvbkxvZ2dlci5nZXRMZXZlbCgpOwotICAgICAgICAgICAgICAgIHNlc3Npb25Mb2dnZXIuc2V0TGV2ZWwoTGV2ZWwuREVCVUcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9nQ2FwdG9yLmNsZWFyTG9ncygpOwotICAgIH0KLQotICAgIEBBZnRlcgotICAgIHB1YmxpYyB2b2lkIHRlYXJkb3duRm9yRWFjaFRlc3QoKSB7Ci0gICAgICAgIGZpbmFsIExvZ2dlciBzZXNzaW9uTG9nZ2VyID0gKExvZ2dlcikgTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoU2Vzc2lvbi5jbGFzcyk7Ci0gICAgICAgIHNlc3Npb25Mb2dnZXIuc2V0TGV2ZWwob3JpZ2luYWxMZXZlbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uZmlndXJlIHNwZWNpZmljIEdyZW1saW4gU2VydmVyIHNldHRpbmdzIGZvciBzcGVjaWZpYyB0ZXN0cy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0dGluZ3Mgb3ZlcnJpZGVTZXR0aW5ncyhmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZU9mVGVzdCA9IG5hbWUuZ2V0TWV0aG9kTmFtZSgpOwotICAgICAgICBzd2l0Y2ggKG5hbWVPZlRlc3QpIHsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZEhhdmVUaGVTZXNzaW9uVGltZW91dCI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRDbG9zZVNlc3Npb25PbmNlT25SZXF1ZXN0IjoKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5wcm9jZXNzb3JzLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBPcFByb2Nlc3NvciBzZXR0aW5nCi0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MgcHJvY2Vzc29yU2V0dGluZ3MgPSBuZXcgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MoKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5ncy5jbGFzc05hbWUgPSBTZXNzaW9uT3BQcm9jZXNzb3IuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NvclNldHRpbmdzLmNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5ncy5jb25maWcucHV0KFNlc3Npb25PcFByb2Nlc3Nvci5DT05GSUdfU0VTU0lPTl9USU1FT1VULCAzMDAwTCk7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MucHJvY2Vzc29ycy5hZGQocHJvY2Vzc29yU2V0dGluZ3MpOwotCi0gICAgICAgICAgICAgICAgLy8gVW5pZmllZCBzZXR0aW5nCi0gICAgICAgICAgICAgICAgc2V0dGluZ3Muc2Vzc2lvbkxpZmV0aW1lVGltZW91dCA9IDMwMDBMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkQmxvd1RoZVNlc3Npb25RdWV1ZVNpemUiOgotICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFNlc3Npb25UYXNrUXVldWVTaXplID0gMTsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZENsb3NlU2Vzc2lvbk9uQ2xpZW50Q2xvc2UiOgotICAgICAgICAgICAgY2FzZSAic2hvdWxkQ2xvc2VTZXNzaW9uT25DbGllbnRDbG9zZVdpdGhTdGF0ZU1haW50YWluZWRCZXR3ZWVuRXhjZXB0aW9ucyI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRFeGVjdXRlSW5TZXNzaW9uQW5kU2Vzc2lvbmxlc3NXaXRob3V0T3BlbmluZ1RyYW5zYWN0aW9uV2l0aFNpbmdsZUNsaWVudCI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRFeGVjdXRlSW5TZXNzaW9uV2l0aFRyYW5zYWN0aW9uTWFuYWdlbWVudCI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRSb2xsYmFja09uRXZhbEV4Y2VwdGlvbkZvck1hbmFnZWRUcmFuc2FjdGlvbiI6Ci0gICAgICAgICAgICBjYXNlICJzaG91bGROb3RFeGVjdXRlUXVldWVkUmVxdWVzdHNJZk9uZUluRnJvbnRPZkl0RmFpbHMiOgotICAgICAgICAgICAgICAgIHVzZVRpbmtlclRyYW5zYWN0aW9uR3JhcGgoc2V0dGluZ3MpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAic2hvdWxkRW5zdXJlU2Vzc2lvbkJpbmRpbmdzQXJlVGhyZWFkU2FmZSI6Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MudGhyZWFkUG9vbFdvcmtlciA9IDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJzaG91bGRVc2VHbG9iYWxGdW5jdGlvbkNhY2hlIjoKLSAgICAgICAgICAgICAgICAvLyBPcFByb2Nlc3NvciBzZXR0aW5ncyBhcmUgZ29vZCBieSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgLy8gVW5pZmllZEhhbmRsZXIgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy51c2VDb21tb25FbmdpbmVGb3JTZXNzaW9ucyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnVzZUdsb2JhbEZ1bmN0aW9uQ2FjaGVGb3JTZXNzaW9ucyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInNob3VsZE5vdFVzZUdsb2JhbEZ1bmN0aW9uQ2FjaGUiOgotICAgICAgICAgICAgICAgIHNldHRpbmdzLnByb2Nlc3NvcnMuY2xlYXIoKTsKLQotICAgICAgICAgICAgICAgIC8vIE9wUHJvY2Vzc29yIHNldHRpbmdzCi0gICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3MuUHJvY2Vzc29yU2V0dGluZ3MgcHJvY2Vzc29yU2V0dGluZ3NGb3JEaXNhYmxlRnVuY3Rpb25DYWNoZSA9IG5ldyBTZXR0aW5ncy5Qcm9jZXNzb3JTZXR0aW5ncygpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NvclNldHRpbmdzRm9yRGlzYWJsZUZ1bmN0aW9uQ2FjaGUuY2xhc3NOYW1lID0gU2Vzc2lvbk9wUHJvY2Vzc29yLmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5nc0ZvckRpc2FibGVGdW5jdGlvbkNhY2hlLmNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzb3JTZXR0aW5nc0ZvckRpc2FibGVGdW5jdGlvbkNhY2hlLmNvbmZpZy5wdXQoU2Vzc2lvbk9wUHJvY2Vzc29yLkNPTkZJR19HTE9CQUxfRlVOQ1RJT05fQ0FDSEVfRU5BQkxFRCwgZmFsc2UpOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnByb2Nlc3NvcnMuYWRkKHByb2Nlc3NvclNldHRpbmdzRm9yRGlzYWJsZUZ1bmN0aW9uQ2FjaGUpOwotCi0gICAgICAgICAgICAgICAgLy8gVW5pZmllZEhhbmRsZXIgc2V0dGluZ3MKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy51c2VDb21tb25FbmdpbmVGb3JTZXNzaW9ucyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLnVzZUdsb2JhbEZ1bmN0aW9uQ2FjaGVGb3JTZXNzaW9ucyA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2V0dGluZ3M7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRCbG93VGhlU2Vzc2lvblF1ZXVlU2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IHNlc3Npb24gPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotCi0gICAgICAgIC8vIG1heFNlc3Npb25RdWV1ZVNpemU9MQotICAgICAgICAvLyB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgc2VyaWFsbHkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MSIsIHNlc3Npb24uc3VibWl0KCIndGVzdDEnIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MiIsIHNlc3Npb24uc3VibWl0KCIndGVzdDInIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0MyIsIHNlc3Npb24uc3VibWl0KCIndGVzdDMnIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldFN0cmluZygpKTsKLQotICAgICAgICBmaW5hbCBBdG9taWNCb29sZWFuIGVycm9yVHJpZ2dlcmVkID0gbmV3IEF0b21pY0Jvb2xlYW4oKTsKLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHIxID0gc2Vzc2lvbi5zdWJtaXRBc3luYygiVGhyZWFkLnNsZWVwKDEwMDApOyd0ZXN0NCciKS5nZXQoKTsKLQotICAgICAgICBmaW5hbCBMaXN0PENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4+IGJsb2NrZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCA1MTIgJiYgIWVycm9yVHJpZ2dlcmVkLmdldCgpOyBpeCsrKSB7Ci0gICAgICAgICAgICBibG9ja2Vycy5hZGQoc2Vzc2lvbi5zdWJtaXQoIid0ZXN0JyIpLmFsbCgpLmV4Y2VwdGlvbmFsbHkodCAtPiB7Ci0gICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIHQuZ2V0Q2F1c2UoKTsKLSAgICAgICAgICAgICAgICBlcnJvclRyaWdnZXJlZC5jb21wYXJlQW5kU2V0KGZhbHNlLCBSZXNwb25zZVN0YXR1c0NvZGUuVE9PX01BTllfUkVRVUVTVFMgPT0gcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfSkpOwotCi0gICAgICAgICAgICAvLyBsb3cgcmVzb3VyY2UgZW52aXJvbm1lbnRzIGxpa2UgdHJhdmlzIG1pZ2h0IG5lZWQgYSBicmVhawotICAgICAgICAgICAgaWYgKGl4ICUgMzIgPT0gMCkgVGhyZWFkLnNsZWVwKDUwMCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB3YWl0IGZvciB0aGUgYmxvY2thZ2UgdG8gY2xlYXIgZm9yIHN1cmUKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0NCIsIHIxLmFsbCgpLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKSk7Ci0gICAgICAgIGJsb2NrZXJzLmZvckVhY2goQ29tcGxldGFibGVGdXR1cmU6OmpvaW4pOwotCi0gICAgICAgIGFzc2VydFRoYXQoZXJyb3JUcmlnZ2VyZWQuZ2V0KCksIGlzKHRydWUpKTsKLQotICAgICAgICAvLyBzaG91bGQgYmUgYWNjZXB0aW5nIHRlc3Q2IG5vdwotICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3Q2Iiwgc2Vzc2lvbi5zdWJtaXQoIid0ZXN0NiciKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0U3RyaW5nKCkpOwotCi0gICAgICAgIHNlc3Npb24uY2xvc2UoKTsKLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90RXhlY3V0ZVF1ZXVlZFJlcXVlc3RzSWZPbmVJbkZyb250T2ZJdEZhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc3VtZVRoYXQoaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgc2Vzc2lvbiA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSk7Ci0gICAgICAgIGZpbmFsIExpc3Q8Q29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0Pj4gZnV0dXJlc0FmdGVyRmFpbHVyZSA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIC8vIHNob3J0LCBzd2VldCBhbmQgc3VjY2Vzc2Z1bCAtIGJ1dCB3aWxsIHJvbGxiYWNrIGFmdGVyIGNsb3NlCi0gICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZmlyc3QgPSBzZXNzaW9uLnN1Ym1pdCgiZy5hZGRWKCdwZXJzb24nKS5pdGVyYXRlKCk7MSIpLmFsbCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZmlyc3QuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICAvLyBsZWF2ZSBlbm91Z2ggdGltZSBmb3IgdGhlIHJlc3VsdHMgdG8gcXVldWUgYmVoaW5kIHRoaXMKLSAgICAgICAgZmluYWwgaW50IGZvbGxvd09uUmVxdWVzdENvdW50ID0gODsKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBzZWNvbmQgPSBzZXNzaW9uLnN1Ym1pdEFzeW5jKCJnLmFkZFYoJ3BlcnNvbicpLnNpZGVFZmZlY3R7VGhyZWFkLnNsZWVwKDYwMDAwKX0iKTsKLQotICAgICAgICAvLyB0aGVzZSByZXF1ZXN0cyB3aWxsIHF1ZXVlCi0gICAgICAgIGZvciAoaW50IGl4ID0gMDsgaXggPCBmb2xsb3dPblJlcXVlc3RDb3VudDsgaXggKyspIHsKLSAgICAgICAgICAgIGZ1dHVyZXNBZnRlckZhaWx1cmUuYWRkKHNlc3Npb24uc3VibWl0QXN5bmMoImcuYWRkVignc29mdHdhcmUnKSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNsb3NlIHRoZSBzZXNzaW9uIHdoaWNoIHdpbGwgaW50ZXJydXB0ICJzZWNvbmQiIHJlcXVlc3QgYW5kIGZsdXNoIHRoZSBxdWV1ZSBvZiByZXF1ZXN0cyBiZWhpbmQgaXQKLSAgICAgICAgc2Vzc2lvbi5jbG9zZSgpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzZWNvbmQuam9pbigpLmFsbCgpLmpvaW4oKTsKLSAgICAgICAgICAgIGZhaWwoInNob3VsZCBoYXZlIGJlZW4gaW50ZXJydXB0ZWQgYnkgY2hhbm5lbCBjbG9zZSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiQ29ubmVjdGlvbiB0byBzZXJ2ZXIgaXMgbm8gbG9uZ2VyIGFjdGl2ZSIsIGV4LmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEF0b21pY0ludGVnZXIgZmFpbHMgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAgICAgZnV0dXJlc0FmdGVyRmFpbHVyZS5mb3JFYWNoKGYgLT4gewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmLmpvaW4oKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgICAgICAgICAgZmFpbCgic2hvdWxkIGhhdmUgYmVlbiBpbnRlcnJ1cHRlZCBieSBjaGFubmVsIGNsb3NlIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkNvbm5lY3Rpb24gdG8gc2VydmVyIGlzIG5vIGxvbmdlciBhY3RpdmUiLCBleC5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgZmFpbHMuaW5jcmVtZW50QW5kR2V0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIC8vIGFsbCBhcmUgZmFpbHVyZXMKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZvbGxvd09uUmVxdWVzdENvdW50LCBmYWlscy5nZXQoKSk7Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgdGhlIHJvbGxiYWNrCi0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGNsaWVudC5zdWJtaXQoImcuVigpLmNvdW50KCkiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDbG9zZVNlc3Npb25PbkNsaWVudENsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyMSA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudDEgPSBjbHVzdGVyMS5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLSAgICAgICAgY2xpZW50MS5zdWJtaXQoInggPSAxIikuYWxsKCkuam9pbigpOwotICAgICAgICBjbGllbnQxLnN1Ym1pdCgiZ3JhcGguYWRkVmVydGV4KCkiKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgIGNsaWVudDEuY2xvc2UoKTsKLSAgICAgICAgY2x1c3RlcjEuY2xvc2UoKTsKLQotICAgICAgICAvLyB0aGUgZm9sbG93aW5nIHNlc3Npb24gY2xvc2UgbG9nIG1lc3NhZ2UgaXMgbm8gbG9uZ2VyIHJlbGV2YW50IGFzCi0gICAgICAgIGlmIChpc1VzaW5nVW5pZmllZENoYW5uZWxpemVyKCkpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoKChVbmlmaWVkQ2hhbm5lbGl6ZXIpIHNlcnZlci5nZXRDaGFubmVsaXplcigpKS5nZXRVbmlmaWVkSGFuZGxlcigpLmlzQWN0aXZlU2Vzc2lvbihuYW1lLmdldE1ldGhvZE5hbWUoKSksIGlzKGZhbHNlKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGxvZ0NhcHRvci5nZXRMb2dzKCksIGhhc0l0ZW0oIlNraXBwZWQgYXR0ZW1wdCB0byBjbG9zZSBvcGVuIGdyYXBoIHRyYW5zYWN0aW9ucyBvbiBzaG91bGRDbG9zZVNlc3Npb25PbkNsaWVudENsb3NlIC0gY2xvc2Ugd2FzIGZvcmNlZCIpKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQobG9nQ2FwdG9yLmdldExvZ3MoKSwgaGFzSXRlbSgiU2Vzc2lvbiBzaG91bGRDbG9zZVNlc3Npb25PbkNsaWVudENsb3NlIGNsb3NlZCIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRyeSB0byByZWNvbm5lY3QgdG8gdGhhdCBzZXNzaW9uIGFuZCBtYWtlIHN1cmUgbm8gc3RhdGUgaXMgdGhlcmUKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyUmVjb25uZWN0ID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50UmVjb25uZWN0ID0gY2x1c3RlclJlY29ubmVjdC5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICAvLyBzaG91bGQgZ2V0IGFuIGVycm9yIGJlY2F1c2UgIngiIGlzIG5vdCBkZWZpbmVkIGFzIHRoaXMgaXMgYSBuZXcgc2Vzc2lvbgotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50UmVjb25uZWN0LnN1Ym1pdCgieT0xMDAiKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgICAgICBjbGllbnRSZWNvbm5lY3Quc3VibWl0KCJ4IikuYWxsKCkuam9pbigpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bCBhcyAneCcgd2FzIG9ubHkgZGVmaW5lZCBpbiB0aGUgb2xkIHNlc3Npb24iKTsKLSAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QuZ2V0TWVzc2FnZSgpLCBzdGFydHNXaXRoKCJObyBzdWNoIHByb3BlcnR5IikpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdGhlIGNvbW1pdCBmcm9tIGNsaWVudDEgc2hvdWxkIG5vdCBoYXZlIGdvbmUgdGhyb3VnaCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gZGF0YSBwcmVzZW50LgotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY2xpZW50UmVjb25uZWN0LnN1Ym1pdCgiZ3JhcGgudHJhdmVyc2FsKCkuVigpLmNvdW50KCkiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICAvLyBtdXN0IHR1cm4gb24gbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uIGZvciB1bmlmaWVkIGNoYW5uZWxpemVyCi0gICAgICAgIGlmICghaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwLCBjbGllbnRSZWNvbm5lY3Quc3VibWl0KCJ5IikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbHVzdGVyUmVjb25uZWN0LmNsb3NlKCk7Ci0KLSAgICAgICAgaWYgKGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsICgoVW5pZmllZENoYW5uZWxpemVyKSBzZXJ2ZXIuZ2V0Q2hhbm5lbGl6ZXIoKSkuZ2V0VW5pZmllZEhhbmRsZXIoKS5nZXRBY3RpdmVTZXNzaW9uQ291bnQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENsb3NlU2Vzc2lvbk9uQ2xpZW50Q2xvc2VXaXRoU3RhdGVNYWludGFpbmVkQmV0d2VlbkV4Y2VwdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lVGhhdCgiTXVzdCB1c2UgVW5pZmllZENoYW5uZWxpemVyIiwgaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpLCBpcyh0cnVlKSk7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyMSA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudDEgPSBjbHVzdGVyMS5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLSAgICAgICAgY2xpZW50MS5zdWJtaXQoInggPSAxIikuYWxsKCkuam9pbigpOwotICAgICAgICBjbGllbnQxLnN1Ym1pdCgiZ3JhcGguYWRkVmVydGV4KCkiKS5hbGwoKS5qb2luKCk7Ci0gICAgICAgIGNsaWVudDEuY2xvc2UoKTsKLSAgICAgICAgY2x1c3RlcjEuY2xvc2UoKTsKLQotICAgICAgICBhc3NlcnRUaGF0KCgoVW5pZmllZENoYW5uZWxpemVyKSBzZXJ2ZXIuZ2V0Q2hhbm5lbGl6ZXIoKSkuZ2V0VW5pZmllZEhhbmRsZXIoKS5pc0FjdGl2ZVNlc3Npb24obmFtZS5nZXRNZXRob2ROYW1lKCkpLCBpcyhmYWxzZSkpOwotCi0gICAgICAgIC8vIHRyeSB0byByZWNvbm5lY3QgdG8gdGhhdCBzZXNzaW9uIGFuZCBtYWtlIHN1cmUgbm8gc3RhdGUgaXMgdGhlcmUKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyUmVjb25uZWN0ID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotCi0gICAgICAgIC8vIHRoaXMgY29uZmlndXJlcyB0aGUgY2xpZW50IHRvIGJlaGF2ZSBsaWtlIE9wUHJvY2Vzc29yIGZvciBVbmlmaWVkQ2hhbm5lbGl6ZXIKLSAgICAgICAgZmluYWwgQ2xpZW50LlNlc3Npb25TZXR0aW5ncyBzZXR0aW5ncyA9IENsaWVudC5TZXNzaW9uU2V0dGluZ3MuYnVpbGQoKS4KLSAgICAgICAgICAgICAgICBzZXNzaW9uSWQobmFtZS5nZXRNZXRob2ROYW1lKCkpLm1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbih0cnVlKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudFJlY29ubmVjdCA9IGNsdXN0ZXJSZWNvbm5lY3QuY29ubmVjdChDbGllbnQuU2V0dGluZ3MuYnVpbGQoKS51c2VTZXNzaW9uKHNldHRpbmdzKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgLy8gc2hvdWxkIGdldCBhbiBlcnJvciBiZWNhdXNlICJ4IiBpcyBub3QgZGVmaW5lZCBhcyB0aGlzIGlzIGEgbmV3IHNlc3Npb24KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudFJlY29ubmVjdC5zdWJtaXQoInk9MTAwIikuYWxsKCkuam9pbigpOwotICAgICAgICAgICAgY2xpZW50UmVjb25uZWN0LnN1Ym1pdCgieCIpLmFsbCgpLmpvaW4oKTsKLSAgICAgICAgICAgIGZhaWwoIlNob3VsZCBub3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwgYXMgJ3gnIHdhcyBvbmx5IGRlZmluZWQgaW4gdGhlIG9sZCBzZXNzaW9uIik7Ci0gICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgc3RhcnRzV2l0aCgiTm8gc3VjaCBwcm9wZXJ0eSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBjb21taXQgZnJvbSBjbGllbnQxIHNob3VsZCBub3QgaGF2ZSBnb25lIHRocm91Z2ggc28gdGhlcmUgc2hvdWxkIGJlIG5vIGRhdGEgcHJlc2VudC4KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGNsaWVudFJlY29ubmVjdC5zdWJtaXQoImdyYXBoLnRyYXZlcnNhbCgpLlYoKS5jb3VudCgpIikuYWxsKCkuam9pbigpLmdldCgwKS5nZXRJbnQoKSk7Ci0KLSAgICAgICAgLy8gc2luY2UgbWFpbnRhaW5TdGF0ZUFmdGVyRXhjZXB0aW9uIGlzIGVuYWJsZWQgdGhlIFVuaWZpZWRDaGFubmVsaXplciB3b3JrcyBsaWtlIE9wUHJvY2Vzc29yCi0gICAgICAgIGFzc2VydEVxdWFscygxMDAsIGNsaWVudFJlY29ubmVjdC5zdWJtaXQoInkiKS5hbGwoKS5qb2luKCkuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICBjbHVzdGVyUmVjb25uZWN0LmNsb3NlKCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsICgoVW5pZmllZENoYW5uZWxpemVyKSBzZXJ2ZXIuZ2V0Q2hhbm5lbGl6ZXIoKSkuZ2V0VW5pZmllZEhhbmRsZXIoKS5nZXRBY3RpdmVTZXNzaW9uQ291bnQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRVc2VHbG9iYWxGdW5jdGlvbkNhY2hlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IHNlc3Npb24gPSBjbHVzdGVyLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHNlc3Npb24uc3VibWl0KCJkZWYgc3VtSXRVcCh4LHkpe3greX07c3VtSXRVcCgxLDIpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHNlc3Npb24uc3VibWl0KCJzdW1JdFVwKDEsMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJzdW1JdFVwKDEsMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCk7Ci0gICAgICAgICAgICBmYWlsKCJHbG9iYWwgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgY2FjaGVkIHNvIHRoZSBjYWxsIHRvIHN1bUl0VXAoKSBzaG91bGQgZmFpbCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QuZ2V0TWVzc2FnZSgpLCBzdGFydHNXaXRoKCJObyBzaWduYXR1cmUgb2YgbWV0aG9kIikpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RVc2VHbG9iYWxGdW5jdGlvbkNhY2hlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdChuYW1lLmdldE1ldGhvZE5hbWUoKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjbGllbnQuc3VibWl0KCJkZWYgc3VtSXRVcCh4LHkpe3greX07c3VtSXRVcCgxLDIpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICB0aHJvdyBleDsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJzdW1JdFVwKDEsMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCk7Ci0gICAgICAgICAgICBmYWlsKCJHbG9iYWwgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgY2FjaGVkIHNvIHRoZSBjYWxsIHRvIGFkZEl0VXAoKSBzaG91bGQgZmFpbCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QuZ2V0TWVzc2FnZSgpLCBzdGFydHNXaXRoKCJObyBzaWduYXR1cmUgb2YgbWV0aG9kIikpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBbGxvd01vcmVUaGFuT25lQ2xpZW50UGVyU2Vzc2lvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIxID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50MSA9IGNsdXN0ZXIxLmNvbm5lY3QobmFtZS5nZXRNZXRob2ROYW1lKCkpOwotICAgICAgICBjbGllbnQxLnN1Ym1pdCgiMSsxIikuYWxsKCkuam9pbigpOwotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQuU2Vzc2lvblNldHRpbmdzIHNlc3Npb25TZXR0aW5ncyA9IENsaWVudC5TZXNzaW9uU2V0dGluZ3MuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5zZXNzaW9uSWQobmFtZS5nZXRNZXRob2ROYW1lKCkpCi0gICAgICAgICAgICAgICAgLmZvcmNlQ2xvc2VkKHRydWUpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50MiA9IGNsdXN0ZXIyLmNvbm5lY3QoQ2xpZW50LlNldHRpbmdzLmJ1aWxkKCkudXNlU2Vzc2lvbihzZXNzaW9uU2V0dGluZ3MpLmNyZWF0ZSgpKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50Mi5zdWJtaXQoIjIrMiIpLmFsbCgpLmpvaW4oKTsKLSAgICAgICAgICAgIGZhaWwoIkNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBjbGllbnQgY29ubmVjdGluZyB0byB0aGUgc2FtZSBzZXNzaW9uIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiU2Vzc2lvbiBzaG91bGROb3RBbGxvd01vcmVUaGFuT25lQ2xpZW50UGVyU2Vzc2lvbiBpcyBub3QgYm91bmQgdG8gdGhlIGNvbm5lY3RpbmcgY2xpZW50Iiwgcm9vdC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2x1c3RlcjEuY2xvc2UoKTsKLSAgICAgICAgY2x1c3RlcjIuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJvbGxiYWNrT25FdmFsRXhjZXB0aW9uRm9yTWFuYWdlZFRyYW5zYWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQuU2Vzc2lvblNldHRpbmdzIHNlc3Npb25TZXR0aW5ncyA9IENsaWVudC5TZXNzaW9uU2V0dGluZ3MuYnVpbGQoKS4KLSAgICAgICAgICAgICAgICBzZXNzaW9uSWQobmFtZS5nZXRNZXRob2ROYW1lKCkpLgotICAgICAgICAgICAgICAgIG1hbmFnZVRyYW5zYWN0aW9ucyh0cnVlKS4KLSAgICAgICAgICAgICAgICBtYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24oZmFsc2UpLgotICAgICAgICAgICAgICAgIGNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQuU2V0dGluZ3MgY2xpZW50U2V0dGluZ3MgPSBDbGllbnQuU2V0dGluZ3MuYnVpbGQoKS51c2VTZXNzaW9uKHNlc3Npb25TZXR0aW5ncykuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoY2xpZW50U2V0dGluZ3MpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJncmFwaC5hZGRWZXJ0ZXgoKTsgdGhyb3cgbmV3IEV4Y2VwdGlvbignbm8gd29ya3knKSIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdG9zc2VkIHRoZSBtYW51YWxseSBnZW5lcmF0ZWQgZXhjZXB0aW9uIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibm8gd29ya3kiLCByb290LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8ganVzdCBmb3JjZSBhIGNvbW1pdCBoZXJlIG9mICJzb21ldGhpbmciIHRvIGVuc3VyZSB0aGUgcm9sbGJhY2sgb2YgdGhlIHByZXZpb3VzIHJlcXVlc3QKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImdyYXBoLmFkZFZlcnRleCgpOyBncmFwaC50eCgpLmNvbW1pdCgpIikuYWxsKCkuZ2V0KDEwLCBUaW1lVW5pdC5TRUNPTkRTKTsKLQotICAgICAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGlzIG1hbmFnZWQgc28gYSByb2xsYmFjayBzaG91bGQgaGF2ZSBleGVjdXRlZAotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNsaWVudC5zdWJtaXQoImcuVigpLmNvdW50KCkiKS5hbGwoKS5nZXQoMTAsIFRpbWVVbml0LlNFQ09ORFMpLmdldCgwKS5nZXRJbnQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENsb3NlU2Vzc2lvbk9uY2VPblJlcXVlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3Rvcnkub3BlbigpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czEgPSBjbGllbnQuc3VibWl0KCJ4ID0gWzEsMiwzLDQsNSw2LDcsOCw5XSIpOwotICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKLSAgICAgICAgcmVzdWx0czEuc3RyZWFtKCkubWFwKGkgLT4gaS5nZXQoSW50ZWdlci5jbGFzcykgKiAyKS5mb3JFYWNoKGkgLT4gYXNzZXJ0RXF1YWxzKGNvdW50ZXIuaW5jcmVtZW50QW5kR2V0KCkgKiAyLCBJbnRlZ2VyLnBhcnNlSW50KGkudG9TdHJpbmcoKSkpKTsKLQotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czIgPSBjbGllbnQuc3VibWl0KCJ4WzBdKzEiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3VsdHMyLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7Ci0KLSAgICAgICAgLy8gZXhwbGljaXRseSBjbG9zZSB0aGUgc2Vzc2lvbgotICAgICAgICBjbGllbnQuY2xvc2UoKTsKLQotICAgICAgICAvLyB3YWl0IHBhc3QgYXV0b21hdGljIHNlc3Npb24gZXhwaXJhdGlvbgotICAgICAgICBUaHJlYWQuc2xlZXAoMzUwMCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5hbCBzZXNzaW9uIHNob3VsZCBiZSBkZWFkIHNvIHRoaXMgY2FsbCB3aWxsIG9wZW4gYSBuZXcgc2Vzc2lvbiB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0IGZhaWwKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHN0YXRlIGlzIG5vdyBnb25lIC0geCBpcyBhbiBpbnZhbGlkIHByb3BlcnR5Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCJ4WzFdKzIiKS5hbGwoKS5nZXQoKTsKLSAgICAgICAgICAgIGZhaWwoIlNlc3Npb24gc2hvdWxkIGJlIGRlYWQiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LCBpbnN0YW5jZU9mKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSkgewotICAgICAgICAgICAgYXNzZXJ0VGhhdCgoKFVuaWZpZWRDaGFubmVsaXplcikgc2VydmVyLmdldENoYW5uZWxpemVyKCkpLmdldFVuaWZpZWRIYW5kbGVyKCkuaXNBY3RpdmVTZXNzaW9uKG5hbWUuZ2V0TWV0aG9kTmFtZSgpKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpCi0gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobXNnIC0+IG1zZy5lcXVhbHMoIlNlc3Npb24gc2hvdWxkQ2xvc2VTZXNzaW9uT25jZU9uUmVxdWVzdCBjbG9zZWQiKSkuY291bnQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVUaGVTZXNzaW9uVGltZW91dCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudC5TZXNzaW9uU2V0dGluZ3Mgc2V0dGluZ3MgPSBDbGllbnQuU2Vzc2lvblNldHRpbmdzLmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgc2Vzc2lvbklkKG5hbWUuZ2V0TWV0aG9kTmFtZSgpKS5tYWludGFpblN0YXRlQWZ0ZXJFeGNlcHRpb24odHJ1ZSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENsaWVudCBzZXNzaW9uID0gY2x1c3Rlci5jb25uZWN0KENsaWVudC5TZXR0aW5ncy5idWlsZCgpLnVzZVNlc3Npb24oc2V0dGluZ3MpLmNyZWF0ZSgpKTsKLQotICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0czEgPSBzZXNzaW9uLnN1Ym1pdCgieCA9IFsxLDIsMyw0LDUsNiw3LDgsOV0iKTsKLSAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7Ci0gICAgICAgIHJlc3VsdHMxLnN0cmVhbSgpLm1hcChpIC0+IGkuZ2V0KEludGVnZXIuY2xhc3MpICogMikuZm9yRWFjaChpIC0+IGFzc2VydEVxdWFscyhjb3VudGVyLmluY3JlbWVudEFuZEdldCgpICogMiwgSW50ZWdlci5wYXJzZUludChpLnRvU3RyaW5nKCkpKSk7Ci0KLSAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMyID0gc2Vzc2lvbi5zdWJtaXQoInhbMF0rMSIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0czIuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKLQotICAgICAgICAvLyBzZXNzaW9uIHRpbWVzIG91dCBpbiAzIHNlY29uZHMgYnV0IHNsb3cgZW52aXJvbm1lbnRzIGxpa2UgdHJhdmlzIG1pZ2h0IG5vdCBiZSBzbyBleGFjdGluZyBpbiB0aGUKLSAgICAgICAgLy8gc2h1dGRvd24gcHJvY2VzcyBzbyBiZSBwYXRpZW50Ci0gICAgICAgIGlmIChpc1VzaW5nVW5pZmllZENoYW5uZWxpemVyKCkpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gc2Vzc2lvbkFsaXZlID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAoaW50IGl4ID0gMTsgaXggPCAxMTsgaXgrKykgewotICAgICAgICAgICAgICAgIHNlc3Npb25BbGl2ZSA9ICgoVW5pZmllZENoYW5uZWxpemVyKSBzZXJ2ZXIuZ2V0Q2hhbm5lbGl6ZXIoKSkuZ2V0VW5pZmllZEhhbmRsZXIoKS5pc0FjdGl2ZVNlc3Npb24obmFtZS5nZXRNZXRob2ROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbkFsaXZlKSBicmVhazsKLSAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoaXggKiA1MDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnRUaGF0KHNlc3Npb25BbGl2ZSwgaXMoZmFsc2UpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRocmVhZC5zbGVlcCg1MDAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgc2Vzc2lvbiBzaG91bGQgYmUgZGVhZCBzbyB0aGlzIGNhbGwgd2lsbCBvcGVuIGEgbmV3IHNlc3Npb24gd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dCBmYWlsCi0gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBzdGF0ZSBpcyBub3cgZ29uZSAtIHggaXMgYW4gaW52YWxpZCBwcm9wZXJ0eS4KLSAgICAgICAgICAgIHNlc3Npb24uc3VibWl0KCJ4WzFdKzIiKS5hbGwoKS5nZXQoKTsKLSAgICAgICAgICAgIGZhaWwoIlNlc3Npb24gc2hvdWxkIGJlIGRlYWQiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgY2F1c2UgPSBleC5nZXRDYXVzZSgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChjYXVzZSwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTiwgKChSZXNwb25zZUV4Y2VwdGlvbikgY2F1c2UpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKLQotICAgICAgICAgICAgLy8gdmFsaWRhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgc2VuZCBtZXNzYWdlcyB0byB0aGUgc2VydmVyCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2Vzc2lvbi5zdWJtaXQoIjErMSIpLmFsbCgpLmpvaW4oKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSkgewotICAgICAgICAgICAgYXNzZXJ0VGhhdCgoKFVuaWZpZWRDaGFubmVsaXplcikgc2VydmVyLmdldENoYW5uZWxpemVyKCkpLmdldFVuaWZpZWRIYW5kbGVyKCkuaXNBY3RpdmVTZXNzaW9uKG5hbWUuZ2V0TWV0aG9kTmFtZSgpKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIHRoZXJlIHdpbGwgYmUgb25lIGZvciB0aGUgdGltZW91dCBhbmQgYSBzZWNvbmQgZm9yIGNsb3NpbmcgdGhlIGNsdXN0ZXIKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBsb2dDYXB0b3IuZ2V0TG9ncygpLnN0cmVhbSgpCi0gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIobXNnIC0+IG1zZy5lcXVhbHMoIlNlc3Npb24gc2hvdWxkSGF2ZVRoZVNlc3Npb25UaW1lb3V0IGNsb3NlZCIpKS5jb3VudCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRW5zdXJlU2Vzc2lvbkJpbmRpbmdzQXJlVGhyZWFkU2FmZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLgotICAgICAgICAgICAgICAgIG1pbkluUHJvY2Vzc1BlckNvbm5lY3Rpb24oMTYpLm1heEluUHJvY2Vzc1BlckNvbm5lY3Rpb24oNjQpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiYT0xMDA7Yj0xMDAwO2M9MTAwMDA7bnVsbCIpLmFsbCgpLmdldCgpOwotICAgICAgICAgICAgZmluYWwgaW50IHJlcXVlc3RzID0gMTAwMDA7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PENvbXBsZXRhYmxlRnV0dXJlPFJlc3VsdFNldD4+IGZ1dHVyZXMgPSBuZXcgQXJyYXlMaXN0PD4ocmVxdWVzdHMpOwotICAgICAgICAgICAgSW50U3RyZWFtLnJhbmdlKDAsIHJlcXVlc3RzKS5mb3JFYWNoKGkgLT4gewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1dHVyZXMuYWRkKGNsaWVudC5zdWJtaXRBc3luYygiYStiK2MiKSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3RzLCBmdXR1cmVzLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgICAgIGZvciAoQ29tcGxldGFibGVGdXR1cmU8UmVzdWx0U2V0PiBmIDogZnV0dXJlcykgewotICAgICAgICAgICAgICAgIGZpbmFsIFJlc3VsdCByID0gZi5nZXQoKS5hbGwoKS5nZXQoMzAwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUykuZ2V0KDApOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxMTEwMCwgci5nZXRJbnQoKSk7Ci0gICAgICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMocmVxdWVzdHMsIGNvdW50ZXIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGZhaWwoZXguZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkRXhlY3V0ZUluU2Vzc2lvbkFuZFNlc3Npb25sZXNzV2l0aG91dE9wZW5pbmdUcmFuc2FjdGlvbldpdGhTaW5nbGVDbGllbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICB0cnkgKGZpbmFsIFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVXZWJTb2NrZXRDbGllbnQoKSkgewotCi0gICAgICAgICAgICAvL29wZW4gYSB0cmFuc2FjdGlvbiwgY3JlYXRlIGEgdmVydGV4LCBjb21taXQKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG9wZW5SZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAucHJvY2Vzc29yKCJzZXNzaW9uIikKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19TRVNTSU9OLCBuYW1lLmdldE1ldGhvZE5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiZ3JhcGgudHgoKS5vcGVuKCkiKQotICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gb3BlblJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQob3BlblJlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG9wZW5SZXNwb25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgb3BlblJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgYWRkUmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLnByb2Nlc3Nvcigic2Vzc2lvbiIpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfU0VTU0lPTiwgbmFtZS5nZXRNZXRob2ROYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgInY9Z3JhcGguYWRkVmVydGV4KFwibmFtZVwiLFwic3RlcGhlblwiKSIpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzcG9uc2VNZXNzYWdlPiBhZGRSZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KGFkZFJlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGFkZFJlc3BvbnNlcy5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTLCBhZGRSZXNwb25zZXMuZ2V0KDApLmdldFN0YXR1cygpLmdldENvZGUoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGNvbW1pdFJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInNlc3Npb24iKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX1NFU1NJT04sIG5hbWUuZ2V0TWV0aG9kTmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJncmFwaC50eCgpLmNvbW1pdCgpIikKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IGNvbW1pdFJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQoY29tbWl0UmVxdWVzdCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29tbWl0UmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MsIGNvbW1pdFJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQuCi0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBjaGVja1JlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInNlc3Npb24iKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX1NFU1NJT04sIG5hbWUuZ2V0TWV0aG9kTmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJncmFwaC50eCgpLmlzT3BlbigpIikKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IGNoZWNrUmVzcG9uc2VzID0gY2xpZW50LnN1Ym1pdChjaGVja1JlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNoZWNrUmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MsIGNoZWNrUmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdCgoKExpc3Q8Qm9vbGVhbj4pIGNoZWNrUmVzcG9uc2VzLmdldCgwKS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLmdldCgwKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAgICAgLy9sZXRzIHJ1biBhIHNlc3Npb25sZXNzIHJlYWQKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHNlc3Npb25sZXNzUmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiZ3JhcGgudHJhdmVyc2FsKCkuVigpIikKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IHNlc3Npb25sZXNzUmVzcG9uc2VzID0gY2xpZW50LnN1Ym1pdChzZXNzaW9ubGVzc1JlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNlc3Npb25sZXNzUmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MsIHNlc3Npb25sZXNzUmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIGNsb3NlZC4KLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGNoZWNrQWdhaW5SZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAucHJvY2Vzc29yKCJzZXNzaW9uIikKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19TRVNTSU9OLCBuYW1lLmdldE1ldGhvZE5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiZ3JhcGgudHgoKS5pc09wZW4oKSIpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzcG9uc2VNZXNzYWdlPiBjaGVja0FnYWluc3RSZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KGNoZWNrQWdhaW5SZXF1ZXN0KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjaGVja0FnYWluc3RSZXNwb25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgY2hlY2tBZ2FpbnN0UmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdCgoKExpc3Q8Qm9vbGVhbj4pIGNoZWNrQWdhaW5zdFJlc3BvbnNlcy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEV4ZWN1dGVJblNlc3Npb25XaXRoVHJhbnNhY3Rpb25NYW5hZ2VtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgdHJ5IChmaW5hbCBTaW1wbGVDbGllbnQgY2xpZW50ID0gVGVzdENsaWVudEZhY3RvcnkuY3JlYXRlV2ViU29ja2V0Q2xpZW50KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGFkZFJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInNlc3Npb24iKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX1NFU1NJT04sIG5hbWUuZ2V0TWV0aG9kTmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJ2PWdyYXBoLmFkZFZlcnRleChcIm5hbWVcIixcInN0ZXBoZW5cIikiKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX01BTkFHRV9UUkFOU0FDVElPTiwgdHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IGFkZFJlc3BvbnNlcyA9IGNsaWVudC5zdWJtaXQoYWRkUmVxdWVzdCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgYWRkUmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MsIGFkZFJlc3BvbnNlcy5nZXQoMCkuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBjbG9zZWQuCi0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBjaGVja1JlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInNlc3Npb24iKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX1NFU1NJT04sIG5hbWUuZ2V0TWV0aG9kTmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJncmFwaC50eCgpLmlzT3BlbigpIikKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNwb25zZU1lc3NhZ2U+IGNoZWNrUmVzcG9uc2VzID0gY2xpZW50LnN1Ym1pdChjaGVja1JlcXVlc3QpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNoZWNrUmVzcG9uc2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MsIGNoZWNrUmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdCgoKExpc3Q8Qm9vbGVhbj4pIGNoZWNrUmVzcG9uc2VzLmdldCgwKS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLmdldCgwKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICAgICAgLy8gbGV0cyBydW4gYSBzZXNzaW9ubGVzcyByZWFkIGFuZCB2YWxpZGF0ZSB0aGF0IHRoZSB0cmFuc2FjdGlvbiB3YXMgbWFuYWdlZAotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2Ugc2Vzc2lvbmxlc3NSZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJncmFwaC50cmF2ZXJzYWwoKS5WKCkudmFsdWVzKCduYW1lJykiKQotICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gc2Vzc2lvbmxlc3NSZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KHNlc3Npb25sZXNzUmVxdWVzdCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2Vzc2lvbmxlc3NSZXNwb25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgc2Vzc2lvbmxlc3NSZXNwb25zZXMuZ2V0KDApLmdldFN0YXR1cygpLmdldENvZGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInN0ZXBoZW4iLCAoKExpc3Q8U3RyaW5nPikgc2Vzc2lvbmxlc3NSZXNwb25zZXMuZ2V0KDApLmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApKTsKLQotICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzZXNzaW9uIGlzIGludGFjdAotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZ2V0UmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfRVZBTCkKLSAgICAgICAgICAgICAgICAgICAgLnByb2Nlc3Nvcigic2Vzc2lvbiIpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfU0VTU0lPTiwgbmFtZS5nZXRNZXRob2ROYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgInYudmFsdWVzKFwibmFtZVwiKSIpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfTUFOQUdFX1RSQU5TQUNUSU9OLCB0cnVlKQotICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFJlc3BvbnNlTWVzc2FnZT4gZ2V0UmVzcG9uc2VzID0gY2xpZW50LnN1Ym1pdChnZXRSZXF1ZXN0KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRSZXNwb25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgZ2V0UmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgKChMaXN0PFN0cmluZz4pIGdldFJlc3BvbnNlcy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCkpOwotCi0gICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHN0aWxsIGNsb3NlZC4KLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGNoZWNrQWdhaW5SZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKQotICAgICAgICAgICAgICAgICAgICAucHJvY2Vzc29yKCJzZXNzaW9uIikKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19TRVNTSU9OLCBuYW1lLmdldE1ldGhvZE5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiZ3JhcGgudHgoKS5pc09wZW4oKSIpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzcG9uc2VNZXNzYWdlPiBjaGVja0FnYWluc3RSZXNwb25zZXMgPSBjbGllbnQuc3VibWl0KGNoZWNrQWdhaW5SZXF1ZXN0KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjaGVja0FnYWluc3RSZXNwb25zZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgY2hlY2tBZ2FpbnN0UmVzcG9uc2VzLmdldCgwKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdCgoKExpc3Q8Qm9vbGVhbj4pIGNoZWNrQWdhaW5zdFJlc3BvbnNlcy5nZXQoMCkuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5nZXQoMCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXByb2R1Y2VyIGZvciBUSU5LRVJQT1AtMjc1MQotICAgICAqLwotICAgIEBUZXN0KHRpbWVvdXQ9MzAwMDApCi0gICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dFeGNlcHRpb25PblRyYW5zYWN0aW9uVW5zdXBwb3J0ZWRHcmFwaCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSBnLnR4KCkuYmVnaW4oKTsKLSAgICAgICAgYXNzZXJ0VGhhdChndHgudHgoKS5pc09wZW4oKSwgaXModHJ1ZSkpOwotCi0gICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5pdGVyYXRlKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZ3R4LlYoKS5jb3VudCgpLm5leHQoKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIC8vIFdpdGhvdXQgTmVvNGogcGx1Z2luIHRoaXMgc2hvdWxkIGZhaWwgb24gZ3JlbWxpbi1zZXJ2ZXIKLSAgICAgICAgICAgIGd0eC50eCgpLmNvbW1pdCgpOwotICAgICAgICAgICAgZmFpbCgiY29tbWl0IHNob3VsZCB0aHJvdyBleGNlcHRpb24gb24gbm9uLXRyYW5zYWN0aW9uIHN1cHBvcnRlZCBncmFwaCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKGV4KTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiR3JhcGggZG9lcyBub3Qgc3VwcG9ydCB0cmFuc2FjdGlvbnMiLCByb290LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyU3NsSW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2VydmVyU3NsSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IDZmMDlhMWYuLjM5ODZiYjQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlcnZlclNzbEludGVncmF0ZVRlc3QuamF2YQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXJ2ZXJTc2xJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTE4LDIwICsxOCwxOCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyOwogCitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKIGltcG9ydCBpby5uZXR0eS5oYW5kbGVyLnNzbC5DbGllbnRBdXRoOwogaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuc3NsLlNzbENvbnRleHQ7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsQ29udGV4dEJ1aWxkZXI7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wuU3NsUHJvdmlkZXI7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wudXRpbC5JbnNlY3VyZVRydXN0TWFuYWdlckZhY3Rvcnk7CiBpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5zc2wudXRpbC5TZWxmU2lnbmVkQ2VydGlmaWNhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuc2ltcGxlLlNpbXBsZUNsaWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuRXhjZXB0aW9uSGVscGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsaWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbHVzdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLmV4Y2VwdGlvbi5Ob0hvc3RBdmFpbGFibGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5zaW1wbGUuU2ltcGxlQ2xpZW50OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5FeGNlcHRpb25IZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCiBpbXBvcnQgamF2YXgubmV0LnNzbC5TU0xFeGNlcHRpb247CkBAIC00Myw3ICs0MSwxMCBAQAogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5jb250YWluc1N0cmluZzsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXNJbnN0YW5jZU9mLmluc3RhbmNlT2Y7CkBAIC01MSw2ICs1Miw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKIAogcHVibGljIGNsYXNzIEdyZW1saW5TZXJ2ZXJTc2xJbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JlbWxpblNlcnZlclNzbEludGVncmF0ZVRlc3QuY2xhc3MpOwogCiAgICAgLyoqCiAgICAgICogQ29uZmlndXJlIHNwZWNpZmljIEdyZW1saW4gU2VydmVyIHNldHRpbmdzIGZvciBzcGVjaWZpYyB0ZXN0cy4KQEAgLTE1Niw3ICsxNTgsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyB0aGlzIHNob3VsZCByZXR1cm4gIm5vdGhpbmciIC0gdGhlcmUgc2hvdWxkIGJlIG5vIGV4Y2VwdGlvbgotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY2xpZW50LnN1Ym1pdCgiJ3Rlc3QnIikub25lKCkuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoJ3Rlc3QnKSIpLm9uZSgpLmdldFN0cmluZygpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMTY0LDE5ICsxNjYsMTggQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkRW5hYmxlV2ViU29ja2V0U3NsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSAoU2ltcGxlQ2xpZW50IGNsaWVudCA9IFRlc3RDbGllbnRGYWN0b3J5LmNyZWF0ZVNTTFdlYlNvY2tldENsaWVudCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IGJpbmRpbmdzID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICB0cnkgKFNpbXBsZUNsaWVudCBjbGllbnQgPSBUZXN0Q2xpZW50RmFjdG9yeS5jcmVhdGVTU0xTaW1wbGVIdHRwQ2xpZW50KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgICAgICBiaW5kaW5ncy5wdXQoIngiLCAxMjMpOwogICAgICAgICAgICAgYmluZGluZ3MucHV0KCJ5IiwgMTIzKTsKLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0VWQUwpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgIngreSIpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfQklORElOR1MsIGJpbmRpbmdzKS5jcmVhdGUoKTsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgieCt5IikKKyAgICAgICAgICAgICAgICAgICAgLmFkZEJpbmRpbmdzKGJpbmRpbmdzKS5hZGRMYW5ndWFnZSgiZ3JlbWxpbi1ncm9vdnkiKS5jcmVhdGUoKTsKICAgICAgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwogICAgICAgICAgICAgZmluYWwgQXRvbWljQm9vbGVhbiBwYXNzID0gbmV3IEF0b21pY0Jvb2xlYW4oZmFsc2UpOwogICAgICAgICAgICAgY2xpZW50LnN1Ym1pdChyZXF1ZXN0LCByZXN1bHQgLT4gewogICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQuZ2V0U3RhdHVzKCkpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpICE9IFJlc3BvbnNlU3RhdHVzQ29kZS5QQVJUSUFMX0NPTlRFTlQpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MgPT0gcmVzdWx0LmdldFN0YXR1cygpLmdldENvZGUoKSAmJgorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpICE9IEh0dHBSZXNwb25zZVN0YXR1cy5QQVJUSUFMX0NPTlRFTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFzcy5zZXQoSHR0cFJlc3BvbnNlU3RhdHVzLk9LID09IHJlc3VsdC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpbnQpICgoTGlzdCkgcmVzdWx0LmdldFJlc3VsdCgpLmdldERhdGEoKSkuZ2V0KDApID09IDI0NikpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7CkBAIC0yMDAsNyArMjAxLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgcmV0dXJuICJub3RoaW5nIiAtIHRoZXJlIHNob3VsZCBiZSBubyBleGNlcHRpb24KLSAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIGNsaWVudC5zdWJtaXQoIid0ZXN0JyIpLm9uZSgpLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KCd0ZXN0JykiKS5vbmUoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTIxMiwxMiArMjEzLDEyIEBACiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiJ3Rlc3QnIikub25lKCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgndGVzdCcpIikub25lKCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2Ugc3NsIGlzIGVuYWJsZWQgb24gdGhlIHNlcnZlciBidXQgbm90IG9uIGNsaWVudCIpOwogICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiB4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHgsIGluc3RhbmNlT2YoTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uLmNsYXNzKSk7CiAgICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoeCk7CiAgICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QsIGluc3RhbmNlT2YoUnVudGltZUV4Y2VwdGlvbi5jbGFzcykpOworICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIlRoZSBzZXJ2ZXIgbWF5IGJlIGV4cGVjdGluZyBTU0wgdG8gYmUgZW5hYmxlZCIpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMjMwLDcgKzIzMSw3IEBACiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY2xpZW50LnN1Ym1pdCgiJ3Rlc3QnIikub25lKCkuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoJ3Rlc3QnKSIpLm9uZSgpLmdldFN0cmluZygpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMjQzLDcgKzI0NCw3IEBACiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY2xpZW50LnN1Ym1pdCgiJ3Rlc3QnIikub25lKCkuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoJ3Rlc3QnKSIpLm9uZSgpLmdldFN0cmluZygpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMjU2LDEyICsyNTcsMTAgQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCIndGVzdCciKS5vbmUoKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KCd0ZXN0JykiKS5vbmUoKTsKICAgICAgICAgICAgIGZhaWwoIlNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSBzc2wgY2xpZW50IGF1dGggaXMgZW5hYmxlZCBvbiB0aGUgc2VydmVyIGJ1dCBjbGllbnQgZG9lcyBub3QgaGF2ZSBhIGNlcnQiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHgpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoeCwgaW5zdGFuY2VPZihOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24uY2xhc3MpKTsKLSAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZSh4KTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdCwgaW5zdGFuY2VPZihTU0xFeGNlcHRpb24uY2xhc3MpKTsKKyAgICAgICAgICAgIGFzc2VydFNzbEV4Y2VwdGlvbih4LCAiYmFkX2NlcnRpZmljYXRlIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTI3NCwxMiArMjczLDEwIEBACiAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiJ3Rlc3QnIikub25lKCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgndGVzdCcpIikub25lKCk7CiAgICAgICAgICAgICBmYWlsKCJTaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2Ugc3NsIGNsaWVudCBhdXRoIGlzIGVuYWJsZWQgb24gdGhlIHNlcnZlciBidXQgZG9lcyBub3QgdHJ1c3QgY2xpZW50J3MgY2VydCIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24geCkgewotICAgICAgICAgICAgYXNzZXJ0VGhhdCh4LCBpbnN0YW5jZU9mKE5vSG9zdEF2YWlsYWJsZUV4Y2VwdGlvbi5jbGFzcykpOwotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKHgpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChyb290LCBpbnN0YW5jZU9mKFNTTEV4Y2VwdGlvbi5jbGFzcykpOworICAgICAgICAgICAgYXNzZXJ0U3NsRXhjZXB0aW9uKHgsICJiYWRfY2VydGlmaWNhdGUiKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMjkyLDEyICsyODksMTAgQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCIndGVzdCciKS5vbmUoKTsKKyAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KCd0ZXN0JykiKS5vbmUoKTsKICAgICAgICAgICAgIGZhaWwoIlNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSBzc2wgY2xpZW50IHJlcXVpcmVzIFRMU3YxLjIgd2hlcmVhcyBzZXJ2ZXIgc3VwcG9ydHMgb25seSBUTFN2MS4xIik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiB4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHgsIGluc3RhbmNlT2YoTm9Ib3N0QXZhaWxhYmxlRXhjZXB0aW9uLmNsYXNzKSk7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgcm9vdCA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoeCk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHJvb3QsIGluc3RhbmNlT2YoU1NMRXhjZXB0aW9uLmNsYXNzKSk7CisgICAgICAgICAgICBhc3NlcnRTc2xFeGNlcHRpb24oeCAsInByb3RvY29sX3ZlcnNpb24iKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMzEwLDEwICszMDUsOSBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zdWJtaXQoIid0ZXN0JyIpLm9uZSgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoJ3Rlc3QnKSIpLm9uZSgpOwogICAgICAgICAgICAgZmFpbCgiU2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHNzbCBjbGllbnQgcmVxdWlyZXMgVExTdjEuMiB3aGVyZWFzIHNlcnZlciBzdXBwb3J0cyBvbmx5IFRMU3YxLjEiKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHgpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoeCwgaW5zdGFuY2VPZihOb0hvc3RBdmFpbGFibGVFeGNlcHRpb24uY2xhc3MpKTsKICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSByb290ID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZSh4KTsKICAgICAgICAgICAgIGFzc2VydFRoYXQocm9vdCwgaW5zdGFuY2VPZihTU0xFeGNlcHRpb24uY2xhc3MpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTMzMCw3ICszMjQsNyBAQAogICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIGNsaWVudC5zdWJtaXQoIid0ZXN0JyIpLm9uZSgpLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KCd0ZXN0JykiKS5vbmUoKS5nZXRTdHJpbmcoKSk7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTM0Miw5ICszMzYsMTYgQEAKICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudDIgPSBjbHVzdGVyMi5jb25uZWN0KCk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIGNsaWVudDIuc3VibWl0KCIndGVzdCciKS5vbmUoKS5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBjbGllbnQyLnN1Ym1pdCgiZy5pbmplY3QoJ3Rlc3QnKSIpLm9uZSgpLmdldFN0cmluZygpKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsdXN0ZXIyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFNzbEV4Y2VwdGlvbihFeGNlcHRpb24geCwgU3RyaW5nIGV4cGVjdGVkU3Vic3RyaW5nKSB7CisgICAgICAgIGxvZ2dlci53YXJuKCJFeGNlcHRpb24gY2F1Z2h0OiB7fSIsIHguZ2V0TWVzc2FnZSgpLCB4KTsKKyAgICAgICAgZmluYWwgVGhyb3dhYmxlIHJvb3QgPSBFeGNlcHRpb25IZWxwZXIuZ2V0Um9vdENhdXNlKHgpOworICAgICAgICBhc3NlcnRUaGF0KHJvb3QsIGluc3RhbmNlT2YoU1NMRXhjZXB0aW9uLmNsYXNzKSk7CisgICAgICAgIGFzc2VydFRoYXQocm9vdC5nZXRNZXNzYWdlKCksIGNvbnRhaW5zU3RyaW5nKGV4cGVjdGVkU3Vic3RyaW5nKSk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2Vzc2lvblJldXNlVHhJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXNzaW9uUmV1c2VUeEludGVncmF0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdjYzkwNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0dyZW1saW5TZXNzaW9uUmV1c2VUeEludGVncmF0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKLQotaW1wb3J0IG5sLmFsdGluZGFnLmxvZy5Mb2dDYXB0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuRHJpdmVyUmVtb3RlQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Bbm9ueW1vdXNUcmF2ZXJzYWxTb3VyY2UudHJhdmVyc2FsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3N1bWUuYXNzdW1lRmFsc2U7Ci0KLS8qKgotICogSW50ZWdyYXRpb24gdGVzdHMgZm9yIGdyZW1saW4tZHJpdmVyIGFuZCBieXRlY29kZSBzZXNzaW9ucyB3aGVyZSB0aGUgdW5kZXJseWluZyBjb25uZWN0aW9uIGNhbiBiZSByZS11c2VkIGZvcgotICogbXVsdGlwbGUgc2Vzc2lvbnMuIFRoZSBzZXJ2ZXIgaXMgY29uZmlndXJlZCB3aXRoICJjbG9zZVNlc3Npb25Qb3N0R3JhcGhPcCIgc2V0IHRvIFRydWUuCi0gKi8KLXB1YmxpYyBjbGFzcyBHcmVtbGluU2Vzc2lvblJldXNlVHhJbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RTZXNzaW9uVHhJbnRlZ3JhdGVUZXN0IHsKLQotICAgIHB1YmxpYyBzdGF0aWMgUGF0dGVybiBDSEFOTkVMX0lEX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIlNlc3Npb25lZENoaWxkQ2xpZW50IGNob29zaW5nLipcXHtjaGFubmVsPSguKilcXH0iKTsKLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBDbHVzdGVyIGNyZWF0ZUNsdXN0ZXIoKSB7Ci0gICAgICAgIHJldHVybiBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLnJldXNlQ29ubmVjdGlvbnNGb3JTZXNzaW9ucyh0cnVlKS5jcmVhdGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25maWd1cmUgc3BlY2lmaWMgR3JlbWxpbiBTZXJ2ZXIgc2V0dGluZ3MgZm9yIHNwZWNpZmljIHRlc3RzLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTZXR0aW5ncyBvdmVycmlkZVNldHRpbmdzKGZpbmFsIFNldHRpbmdzIHNldHRpbmdzKSB7Ci0gICAgICAgIHN1cGVyLm92ZXJyaWRlU2V0dGluZ3Moc2V0dGluZ3MpOwotCi0gICAgICAgIC8vIFRoaXMgc2V0dGluZyBhbGxvd3MgY29ubmVjdGlvbiByZS11c2Ugb24gdGhlIHNlcnZlciBzaWRlLgotICAgICAgICBzZXR0aW5ncy5jbG9zZVNlc3Npb25Qb3N0R3JhcGhPcCA9IHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIHNldHRpbmdzOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQ2xlYW51cFJlc291cmNlc0FmdGVyU3VjY2Vzc2Z1bENvbW1pdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVGYWxzZSgiVGVzdCBub3Qgc3VwcG9ydGVkIG9uIGRlcHJlY2F0ZWQgVW5pZmllZENoYW5uZWxpemVyIiwgaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpKTsKLQotICAgICAgICBmaW5hbCBMb2dDYXB0b3IgbG9nQ2FwdG9yID0gTG9nQ2FwdG9yLmZvclJvb3QoKTsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gY3JlYXRlQ2x1c3RlcigpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbG9nQ2FwdG9yLnNldExvZ0xldmVsVG9EZWJ1ZygpOwotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSBnLnR4KCkuYmVnaW4oKTsKLSAgICAgICAgICAgIGd0eC5hZGRWKCJwZXJzb24iKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBndHgudHgoKS5jb21taXQoKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZSAic2Vzc2lvbnMiIGFyZSBjbG9zZWQuCi0gICAgICAgICAgICBhc3NlcnRDbGllbnRBbmRTZXJ2ZXJTZXNzaW9uUmVzb3VyY2VzQ2xvc2VkKGxvZ0NhcHRvci5nZXRMb2dzKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXNldExvZ0NhcHRvcihsb2dDYXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDbGVhbnVwUmVzb3VyY2VzQWZ0ZXJTdWNjZXNzZnVsUm9sbGJhY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lRmFsc2UoIlRlc3Qgbm90IHN1cHBvcnRlZCBvbiBkZXByZWNhdGVkIFVuaWZpZWRDaGFubmVsaXplciIsIGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSk7Ci0KLSAgICAgICAgZmluYWwgTG9nQ2FwdG9yIGxvZ0NhcHRvciA9IExvZ0NhcHRvci5mb3JSb290KCk7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IGNyZWF0ZUNsdXN0ZXIoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxvZ0NhcHRvci5zZXRMb2dMZXZlbFRvRGVidWcoKTsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgKGxvbmcpIGcuVigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4ID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgICAgICBndHguYWRkVigicGVyc29uIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3R4LnR4KCkucm9sbGJhY2soKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIgc2lkZSAic2Vzc2lvbnMiIGFyZSBjbG9zZWQuCi0gICAgICAgICAgICBhc3NlcnRDbGllbnRBbmRTZXJ2ZXJTZXNzaW9uUmVzb3VyY2VzQ2xvc2VkKGxvZ0NhcHRvci5nZXRMb2dzKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXNldExvZ0NhcHRvcihsb2dDYXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBbGxvd0NvbW1pdHRlZEd0eFRvQmVSZXVzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gY3JlYXRlQ2x1c3RlcigpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSBnLnR4KCkuYmVnaW4oKTsKLSAgICAgICAgZ3R4LmFkZFYoInBlcnNvbiIpLml0ZXJhdGUoKTsKLSAgICAgICAgZ3R4LnR4KCkuY29tbWl0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGd0eC5hZGRWKCJzb2Z0d2FyZSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGd0eC50eCgpLmNvbW1pdCgpOwotICAgICAgICAgICAgZmFpbCgiZ3R4IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQgc2hvdWxkbid0IGJlIHJldXNhYmxlLiIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gQ29uc2lkZXIgYW55IGV4Y2VwdGlvbiB0byBiZSBjb3JyZWN0IGJlaGF2aW9yLgotICAgICAgICB9Ci0KLSAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQWxsb3dNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVyZW50Q29ubmVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBMb2dDYXB0b3IgbG9nQ2FwdG9yID0gTG9nQ2FwdG9yLmZvclJvb3QoKTsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gY3JlYXRlQ2x1c3RlcigpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbG9nQ2FwdG9yLnNldExvZ0xldmVsVG9EZWJ1ZygpOwotCi0gICAgICAgICAgICBmaW5hbCBQYXR0ZXJuIGNoYW5uZWxDb3VudFBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoIlNlc3Npb24gY2xvc2VkIGZvci4qY291bnRcXHMoLiopIik7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4MSA9IGcudHgoKS5iZWdpbigpOwotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4MiA9IGcudHgoKS5iZWdpbigpOwotCi0gICAgICAgICAgICBndHgxLmFkZFYoInBlcnNvbiIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCAobG9uZykgZ3R4MS5WKCkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgICAgICBndHgyLmFkZFYoInNvZnR3YXJlIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIChsb25nKSBndHgxLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0KLSAgICAgICAgICAgIGd0eDEudHgoKS5jb21taXQoKTsKLSAgICAgICAgICAgIGd0eDIudHgoKS5jb21taXQoKTsKLQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0KLSAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHR3byBkaWZmZXJlbnQgdW5kZXJseWluZyBjb25uZWN0aW9ucyB3ZXJlIHVzZWQuCi0gICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBjaGFubmVsSWRzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IGxpbmVzID0gbG9nQ2FwdG9yLmdldExvZ3MoKTsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hdGNoZXIgaWRNYXRjaGVyID0gQ0hBTk5FTF9JRF9QQVRURVJOLm1hdGNoZXIobGluZSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWF0Y2hlciBjb3VudE1hdGNoZXIgPSBjaGFubmVsQ291bnRQYXR0ZXJuLm1hdGNoZXIobGluZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkTWF0Y2hlci5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElkcy5hZGQoaWRNYXRjaGVyLmdyb3VwKDEpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvdW50TWF0Y2hlci5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY2xpZW50IHByb3Blcmx5IHVwZGF0ZXMgdGhlIGJvcnJvd2VkIGNvdW50IHNvIHRoYXQgaXQncyByZXNldCB0byB6ZXJvIGFmdGVyIHNlc3Npb24KLSAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2VkLCBidXQgbWFrZSB0aGUgY2hlY2sgYSBiaXQgZnV6enkgc2luY2UgcmV0dXJuaW5nIGlzIGFzeW5jIGFuZCBzbyBpdCBtYXkgbm90IGhpdCAwIGluIHRpbWUKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShJbnRlZ2VyLnBhcnNlSW50KGNvdW50TWF0Y2hlci5ncm91cCgxKSkgPCAyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjaGFubmVsSWRzLnNpemUoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXNldExvZ0NhcHRvcihsb2dDYXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBbGxvd011bHRpcGxlVHJhbnNhY3Rpb25zT25TYW1lQ29ubmVjdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVGYWxzZSgiVGVzdCBub3Qgc3VwcG9ydGVkIG9uIGRlcHJlY2F0ZWQgVW5pZmllZENoYW5uZWxpemVyIiwgaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpKTsKLSAgICAgICAgZmluYWwgTG9nQ2FwdG9yIGxvZ0NhcHRvciA9IExvZ0NhcHRvci5mb3JSb290KCk7Ci0gICAgICAgIC8vIENsdXN0ZXIgc2V0dXAgdGhhdCBoYXMgYSBzaW5nbGUgY29ubmVjdGlvbiBzbyBzaW11bHRhbmVvdXMgdHJhbnNhY3Rpb25zIG11c3Qgc2hhcmUgaXQuCi0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LgotICAgICAgICAgICAgICAgIGJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zKHRydWUpLgotICAgICAgICAgICAgICAgIG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uUG9vbFNpemUoMSkuCi0gICAgICAgICAgICAgICAgY3JlYXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBsb2dDYXB0b3Iuc2V0TG9nTGV2ZWxUb0RlYnVnKCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotCi0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgxID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgyID0gZy50eCgpLmJlZ2luKCk7Ci0KLSAgICAgICAgICAgIGd0eDEuYWRkVigicGVyc29uIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3R4Mi5hZGRWKCJzb2Z0d2FyZSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGd0eDEuYWRkVigicGxhY2UiKS5pdGVyYXRlKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCAobG9uZykgZy5WKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICAgICAgZ3R4MS50eCgpLmNvbW1pdCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRDbGllbnRBbmRTZXJ2ZXJTZXNzaW9uUmVzb3VyY2VzQ2xvc2VkKGxvZ0NhcHRvci5nZXRMb2dzKCkpOwotCi0gICAgICAgICAgICBndHgyLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgKGxvbmcpIGcuVigpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydENsaWVudEFuZFNlcnZlclNlc3Npb25SZXNvdXJjZXNDbG9zZWQobG9nQ2FwdG9yLmdldExvZ3MoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXNldExvZ0NhcHRvcihsb2dDYXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXVzZVNhbWVDb25uZWN0aW9uRm9yU3Vic2VxdWVudFRyYW5zYWN0aW9uQWZ0ZXJDb21taXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzdW1lRmFsc2UoIlRlc3Qgbm90IHN1cHBvcnRlZCBvbiBkZXByZWNhdGVkIFVuaWZpZWRDaGFubmVsaXplciIsIGlzVXNpbmdVbmlmaWVkQ2hhbm5lbGl6ZXIoKSk7Ci0gICAgICAgIGZpbmFsIExvZ0NhcHRvciBsb2dDYXB0b3IgPSBMb2dDYXB0b3IuZm9yUm9vdCgpOwotICAgICAgICAvLyBDbHVzdGVyIHNldHVwIHdpdGggc2luZ2xlIGNvbm5lY3Rpb24gdG8gZW5zdXJlIHRoYXQgdHJhbnNhY3Rpb24gc3RhdGUgaXNuJ3Qgc2hhcmVkIGV2ZW4gdGhvdWdoIGNvbm5lY3Rpb24KLSAgICAgICAgLy8gaXMgcmV1c2VkLgotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLgotICAgICAgICAgICAgICAgIG1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICBtYXhDb25uZWN0aW9uUG9vbFNpemUoMSkuCi0gICAgICAgICAgICAgICAgcmV1c2VDb25uZWN0aW9uc0ZvclNlc3Npb25zKHRydWUpLgotICAgICAgICAgICAgICAgIGNyZWF0ZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbG9nQ2FwdG9yLnNldExvZ0xldmVsVG9EZWJ1ZygpOwotCi0gICAgICAgICAgICBTdHJpbmcgY2hhbm5lbElkID0gIiI7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKLQotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ3R4MSA9IGcudHgoKS5iZWdpbigpOwotICAgICAgICAgICAgZ3R4MS5hZGRWKCJwZXJzb24xIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3R4MS50eCgpLmNvbW1pdCgpOwotCi0gICAgICAgICAgICBMaXN0PFN0cmluZz4gbGluZXMgPSBsb2dDYXB0b3IuZ2V0TG9ncygpOwotICAgICAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcgbGluZSA6IGxpbmVzKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWF0Y2hlciBpZE1hdGNoZXIgPSBDSEFOTkVMX0lEX1BBVFRFUk4ubWF0Y2hlcihsaW5lKTsKLSAgICAgICAgICAgICAgICBpZiAoaWRNYXRjaGVyLmZpbmQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjaGFubmVsSWQgdXNlZCBmb3IgdGhpcyB0cmFuc2FjdGlvbiBmb3IgY29tcGFyaXNvbiB3aXRoIHRoZSBzdWJzZXF1ZW50IG9uZS4KLSAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElkID0gaWRNYXRjaGVyLmdyb3VwKDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydENsaWVudEFuZFNlcnZlclNlc3Npb25SZXNvdXJjZXNDbG9zZWQobGluZXMpOwotCi0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgyID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgICAgICBndHgyLmFkZFYoInBlcnNvbjIiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBndHgyLnR4KCkuY29tbWl0KCk7Ci0KLSAgICAgICAgICAgIGxpbmVzID0gbG9nQ2FwdG9yLmdldExvZ3MoKTsKLSAgICAgICAgICAgIGZvciAoZmluYWwgU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hdGNoZXIgaWRNYXRjaGVyID0gQ0hBTk5FTF9JRF9QQVRURVJOLm1hdGNoZXIobGluZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkTWF0Y2hlci5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgc2FtZSBjb25uZWN0aW9uIHdhcyB1c2VkIGZvciBib3RoIHRyYW5zYWN0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNoYW5uZWxJZCwgaWRNYXRjaGVyLmdyb3VwKDEpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnRDbGllbnRBbmRTZXJ2ZXJTZXNzaW9uUmVzb3VyY2VzQ2xvc2VkKGxpbmVzKTsKLQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXNldExvZ0NhcHRvcihsb2dDYXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXVzZVNhbWVDb25uZWN0aW9uRm9yU3Vic2VxdWVudFRyYW5zYWN0aW9uQWZ0ZXJSb2xsYmFjaygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVGYWxzZSgiVGVzdCBub3Qgc3VwcG9ydGVkIG9uIGRlcHJlY2F0ZWQgVW5pZmllZENoYW5uZWxpemVyIiwgaXNVc2luZ1VuaWZpZWRDaGFubmVsaXplcigpKTsKLSAgICAgICAgZmluYWwgTG9nQ2FwdG9yIGxvZ0NhcHRvciA9IExvZ0NhcHRvci5mb3JSb290KCk7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgbWluQ29ubmVjdGlvblBvb2xTaXplKDEpLgotICAgICAgICAgICAgICAgIG1heENvbm5lY3Rpb25Qb29sU2l6ZSgxKS4KLSAgICAgICAgICAgICAgICByZXVzZUNvbm5lY3Rpb25zRm9yU2Vzc2lvbnModHJ1ZSkuCi0gICAgICAgICAgICAgICAgY3JlYXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBsb2dDYXB0b3Iuc2V0TG9nTGV2ZWxUb0RlYnVnKCk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBjaGFubmVsSWQgPSAiIjsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotCi0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgxID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgICAgICBndHgxLmFkZFYoInBlcnNvbjEiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBndHgxLnR4KCkucm9sbGJhY2soKTsKLQotICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGxpbmVzID0gbG9nQ2FwdG9yLmdldExvZ3MoKTsKLSAgICAgICAgICAgIGZvciAoZmluYWwgU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hdGNoZXIgaWRNYXRjaGVyID0gQ0hBTk5FTF9JRF9QQVRURVJOLm1hdGNoZXIobGluZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkTWF0Y2hlci5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhbm5lbElkID0gaWRNYXRjaGVyLmdyb3VwKDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydENsaWVudEFuZFNlcnZlclNlc3Npb25SZXNvdXJjZXNDbG9zZWQobGluZXMpOwotCi0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHgyID0gZy50eCgpLmJlZ2luKCk7Ci0gICAgICAgICAgICBndHgyLmFkZFYoInBlcnNvbjIiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBndHgyLnR4KCkuY29tbWl0KCk7Ci0KLSAgICAgICAgICAgIGxpbmVzID0gbG9nQ2FwdG9yLmdldExvZ3MoKTsKLSAgICAgICAgICAgIGZvciAoZmluYWwgU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hdGNoZXIgaWRNYXRjaGVyID0gQ0hBTk5FTF9JRF9QQVRURVJOLm1hdGNoZXIobGluZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlkTWF0Y2hlci5maW5kKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNoYW5uZWxJZCwgaWRNYXRjaGVyLmdyb3VwKDEpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnRDbGllbnRBbmRTZXJ2ZXJTZXNzaW9uUmVzb3VyY2VzQ2xvc2VkKGxpbmVzKTsKLQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIChsb25nKSBnLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXNldExvZ0NhcHRvcihsb2dDYXB0b3IpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTmVlZGVkIHRvIHByZXZlbnQgb3RoZXIgbG9uZyBydW5uaW5nIHRlc3RzIHRoYXQgZG9uJ3QgcmVxdWlyZSB0aGUgTG9nQ2FwdG9yIGZyb20gYWNjaWRlbnRhbGx5IGxvZ2dpbmcuCi0gICAgcHJpdmF0ZSB2b2lkIHJlc2V0TG9nQ2FwdG9yKGZpbmFsIExvZ0NhcHRvciBsb2dDYXB0b3IpIHsKLSAgICAgICAgbG9nQ2FwdG9yLnJlc2V0TG9nTGV2ZWwoKTsKLSAgICAgICAgbG9nQ2FwdG9yLmNsZWFyTG9ncygpOwotICAgICAgICBsb2dDYXB0b3IuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Q2xpZW50QW5kU2VydmVyU2Vzc2lvblJlc291cmNlc0Nsb3NlZChmaW5hbCBMaXN0PFN0cmluZz4gbG9nTGluZXMpIHsKLSAgICAgICAgYm9vbGVhbiBjbGllbnRTZXNzaW9uQ2xvc2VkID0gZmFsc2U7Ci0gICAgICAgIGJvb2xlYW4gc2VydmVyU2Vzc2lvbkNsb3NlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGZpbmFsIFN0cmluZyBsaW5lIDogbG9nTGluZXMpIHsKLSAgICAgICAgICAgIGlmIChsaW5lLm1hdGNoZXMoIlNlc3Npb24uKmNsb3NlZCQiKSkgewotICAgICAgICAgICAgICAgIHNlcnZlclNlc3Npb25DbG9zZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lLm1hdGNoZXMoIlNlc3Npb24gY2xvc2VkIGZvciBDb25uZWN0aW9uLioiKSkgewotICAgICAgICAgICAgICAgIGNsaWVudFNlc3Npb25DbG9zZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFRydWUoY2xpZW50U2Vzc2lvbkNsb3NlZCk7Ci0gICAgICAgIGFzc2VydFRydWUoc2VydmVyU2Vzc2lvbkNsb3NlZCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2Vzc2lvblR4SW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9HcmVtbGluU2Vzc2lvblR4SW50ZWdyYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGM1OWU4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvR3JlbWxpblNlc3Npb25UeEludGVncmF0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKLQotLyoqCi0gKiBJbnRlZ3JhdGlvbiB0ZXN0cyBmb3IgZ3JlbWxpbi1kcml2ZXIgYW5kIGJ5dGVjb2RlIHNlc3Npb25zLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEdyZW1saW5TZXNzaW9uVHhJbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RTZXNzaW9uVHhJbnRlZ3JhdGVUZXN0IHsKLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBDbHVzdGVyIGNyZWF0ZUNsdXN0ZXIoKSB7Ci0gICAgICAgIHJldHVybiBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvSHR0cERyaXZlckludGVncmF0ZVRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvSHR0cERyaXZlckludGVncmF0ZVRlc3QuamF2YQppbmRleCA4OTg0OWQ0Li5mNjQ1MmFiIDEwMDY0NAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL0h0dHBEcml2ZXJJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9IdHRwRHJpdmVySW50ZWdyYXRlVGVzdC5qYXZhCkBAIC0xOCwyMyArMTgsNDUgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKIAotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuRW5jb2RlckV4Y2VwdGlvbjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5leGNlcHRpb24uRXhjZXB0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2hhbm5lbGl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVxdWVzdE9wdGlvbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuUmVzdWx0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLlJlc3VsdFNldDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5leGNlcHRpb24uUmVzcG9uc2VFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIucmVtb3RlLkRyaXZlclJlbW90ZUNvbm5lY3Rpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5NZXJnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbC5IdHRwQ2hhbm5lbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVHJhbnNhY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemVyczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuQ29sbGVjdGlvblV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkV4Y2VwdGlvbkhlbHBlcjsKK2ltcG9ydCBvcmcuanVuaXQuSWdub3JlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29tcGxldGFibGVGdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOworCiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkubGlzdDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5jb250YWluc1N0cmluZzsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5pczsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVycy5zdGFydHNXaXRoOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5BbGxPZi5hbGxPZjsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nQ29udGFpbnMuY29udGFpbnNTdHJpbmc7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKIAogcHVibGljIGNsYXNzIEh0dHBEcml2ZXJJbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKQEAgLTQ2LDMwICs2OCwxMiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0U2NyaXB0V2l0aEdyYXBoU09OKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuY2hhbm5lbGl6ZXIoQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLmNsYXNzKQotICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IGV4OwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRTdWJtaXRTY3JpcHRXaXRoR3JhcGhCaW5hcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoIjErMSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICAvLyBkZWZhdWx0IGNodW5rIHNpemUgaXMgNjQKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgwLDAsMCwwLDApIikuYWxsKCkuZ2V0KCkuc2l6ZSgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBleDsKICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTc4LDEzICs4Miw0NCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0Qnl0ZWNvZGVXaXRoR3JhcGhTT04oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhTT05fVjMpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxXaGVuTmVlZGVkKCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aFJlbW90ZShEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIHJvID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5sYW5ndWFnZSgiZ3JlbWxpbi1sYW5nIikuY3JlYXRlKCk7CisgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxKS5mYWlsKCdHb29kIGJ5ZSwgd29ybGQhJykiLCBybykuYWxsKCkuZ2V0KCk7CisgICAgICAgICAgICBmYWlsKCJzaG91bGQgdGhyb3cgZXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIGlubmVyID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CisgICAgICAgICAgICBhc3NlcnRUaGF0KGlubmVyLCBpbnN0YW5jZU9mKFJlc3BvbnNlRXhjZXB0aW9uLmNsYXNzKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoZXguZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJHb29kIGJ5ZSwgd29ybGQhIikpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVPYmplY3RCaWdnZXJUaGVuOGtiKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBybyA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkubGFuZ3VhZ2UoImdyZW1saW4tZ3Jvb3Z5IikuY3JlYXRlKCk7CisgICAgICAgICAgICBmaW5hbCBMaXN0IHIgPSBjbGllbnQuc3VibWl0KCJbXCIgXCIucmVwZWF0KDIwMDAwMCksIFwiIFwiLnJlcGVhdCgxMDAwMDApXSIsIHJvKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAwMDAsICgoUmVzdWx0KSByLmdldCgwKSkuZ2V0U3RyaW5nKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDAwMCwgKChSZXN1bHQpIHIuZ2V0KDEpKS5nZXRTdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Ym1pdFRyYXZlcnNhbFdpdGhHcmFwaEJpbmFyeSgpIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdCA9IGcuaW5qZWN0KCIyIikudG9MaXN0KCkuZ2V0KDApOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgcmVzdWx0KTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CkBAIC05NSwzMyArMTMwLDEyIEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRFcnJvckZvckJ5dGVjb2RlV2l0aFVudHlwZWRHcmFwaFNPTigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLmNoYW5uZWxpemVyKENoYW5uZWxpemVyLkh0dHBDaGFubmVsaXplci5jbGFzcykKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSFNPTl9WMl9VTlRZUEVEKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTdWJtaXRHcmVtbGluV2l0aENvbGxlY3Rpb25Bc0FyZ3VtZW50KCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0gICAgICAgICAgICBnLmluamVjdCgiMiIpLnRvTGlzdCgpOwotICAgICAgICAgICAgZmFpbCgiRXhjZXB0aW9uIGV4cGVjdGVkIik7Ci0gICAgICAgIH0gY2F0Y2ggKEVuY29kZXJFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoZXguZ2V0TWVzc2FnZSgpLCBhbGxPZihjb250YWluc1N0cmluZygiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24gb2YgdGhpcyByZXF1ZXN0IiksCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zU3RyaW5nKCJpdCBjb3VsZCBub3QgYmUgc2VudCB0byB0aGUgc2VydmVyIC0gUmVhc29uOiBvbmx5IEdyYXBoU09OMyBhbmQgR3JhcGhCaW5hcnkgcmVjb21tZW5kZWQgZm9yIHNlcmlhbGl6YXRpb24gb2YgQnl0ZWNvZGUgcmVxdWVzdHMsIGJ1dCB1c2VkIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uIikpKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0Qnl0ZWNvZGVXaXRoR3JhcGhCaW5hcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0ID0gZy5pbmplY3QoIjIiKS50b0xpc3QoKS5nZXQoMCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjIiLCByZXN1bHQpOworICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7CisgICAgICAgICAgICBmaW5hbCBMaXN0PD8+IHJlc3VsdCA9IGcuaW5qZWN0KEFycmF5cy5hc0xpc3QoInRlc3QiLCAyTCwgbnVsbCkpLnRvTGlzdCgpLmdldCgwKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0LCBpcyhBcnJheXMuYXNMaXN0KCJ0ZXN0IiwgMkwsIG51bGwpKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xMzAsMTcgKzE0NCwyMSBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0TXVsdGlwbGVSZXF1ZXN0c092ZXJTaW5nbGVDb25uZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuY2hhbm5lbGl6ZXIoQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLmNsYXNzKQotICAgICAgICAgICAgICAgIC5taW5Db25uZWN0aW9uUG9vbFNpemUoMSkubWF4Q29ubmVjdGlvblBvb2xTaXplKDEpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Ym1pdEdyZW1saW5XaXRoTWVyZ2VWKCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgZm9yIChpbnQgaXggPSAwOyBpeCA8IDEwMDsgaXgrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhpeCwgZy5pbmplY3QoaXgpLnRvTGlzdCgpLmdldCgwKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOworICAgICAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpCisgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eShsaXN0LCAiYWdlIiwgMjkpCisgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eShsaXN0LCAiYWdlIiwgMzEpCisgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eShsaXN0LCAiYWdlIiwgMzIpCisgICAgICAgICAgICAgICAgICAgIC5pdGVyYXRlKCk7CisKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgcmVzdWx0ID0gZy5tZXJnZVYoQ29sbGVjdGlvblV0aWwuYXNNYXAoIm5hbWUiLCAibWFya28iKSkKKyAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBDb2xsZWN0aW9uVXRpbC5hc01hcCgiYWdlIiwgMzMpLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zaW5nbGUpCisgICAgICAgICAgICAgICAgICAgIC5jb3VudCgpCisgICAgICAgICAgICAgICAgICAgIC5uZXh0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIHJlc3VsdCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xNDksMTcgKzE2NywxMiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VibWl0TXVsdGlwbGVSZXF1ZXN0c092ZXJNdWx0aUNvbm5lY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MpCi0gICAgICAgICAgICAgICAgLm1pbkNvbm5lY3Rpb25Qb29sU2l6ZSgxKS5tYXhDb25uZWN0aW9uUG9vbFNpemUoOCkKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WMSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgcHVibGljIHZvaWQgc2hvdWxkSGFuZGxlSW5maW5pdHkoKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgMTAwOyBpeCsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGl4LCBnLmluamVjdChpeCkudG9MaXN0KCkuZ2V0KDApLmludFZhbHVlKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyKSkud2l0aCgibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1sYW5nIik7CisgICAgICAgICAgICBmaW5hbCBkb3VibGUgcmVzdWx0ID0gZy5pbmplY3QoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmVxKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkpLnRvTGlzdCgpLmdldCgwKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhyZXN1bHQsIERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSwgMC4wMSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgdGhyb3cgZXg7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0xNjgsNzIgKzE4MSw0MTAgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxUb1VzZVNlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Ym1pdE11bHRpcGxlUXVlcmllc1dpdGhTYW1lQ29ubmVjdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCJzaG91bGRGYWlsVG9Vc2VTZXNzaW9uIik7Ci0gICAgICAgICAgICBjbGllbnQuc3VibWl0KCIxKzEiKS5hbGwoKS5nZXQoKTsKLSAgICAgICAgICAgIGZhaWwoIkNhbid0IHVzZSBzZXNzaW9uIHdpdGggSFRUUCIpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IGNsaWVudC5zdWJtaXQoIlRocmVhZC5zbGVlcCgxMDAwKTsxIiwgcm8pLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZXN1bHQpOworCisgICAgICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIHJlc3VsdDIgPSBuZXcgQXRvbWljSW50ZWdlcigtMSk7CisgICAgICAgICAgICBmaW5hbCBUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZCgoKSAtPiB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Mi5zZXQoY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIHwgRXhlY3V0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgICAgIHRocmVhZC5qb2luKCk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHQyLmdldCgpKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHJvd2FibGUgdCA9IEV4Y2VwdGlvblV0aWxzLmdldFJvb3RDYXVzZShleCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkNhbm5vdCB1c2Ugc2Vzc2lvbnMgb3IgdHgoKSB3aXRoIEh0dHBDaGFubmVsaXplciIsIHQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIHRocm93IGV4OwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsVG9Vc2VUeCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLmNoYW5uZWxpemVyKENoYW5uZWxpemVyLkh0dHBDaGFubmVsaXplci5jbGFzcykKLSAgICAgICAgICAgICAgICAuc2VyaWFsaXplcihTZXJpYWxpemVycy5HUkFQSEJJTkFSWV9WMSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVFcnJvcldpdGhHcmFwaEJpbmFyeSgpIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSB0cmF2ZXJzYWwoKS53aXRoUmVtb3RlKERyaXZlclJlbW90ZUNvbm5lY3Rpb24udXNpbmcoY2x1c3RlcikpOwotICAgICAgICAgICAgZmluYWwgVHJhbnNhY3Rpb24gdHggPSBnLnR4KCk7Ci0gICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBndHggPSB0eC5iZWdpbigpOwotICAgICAgICAgICAgZ3R4LmluamVjdCgiMSIpLnRvTGlzdCgpOwotICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgdXNlIHR4KCkgd2l0aCBIVFRQIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIHQgPSBFeGNlcHRpb25VdGlscy5nZXRSb290Q2F1c2UoZXgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJDYW5ub3QgdXNlIHNlc3Npb25zIG9yIHR4KCkgd2l0aCBIdHRwQ2hhbm5lbGl6ZXIiLCB0LmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplRXJyb3JXaXRoR3JhcGhCaW5hcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5jaGFubmVsaXplcihDaGFubmVsaXplci5IdHRwQ2hhbm5lbGl6ZXIuY2xhc3MpCi0gICAgICAgICAgICAgICAgLnNlcmlhbGl6ZXIoU2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjEpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCAiZG9lc05vdEV4aXN0IikpOworICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGgoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCAiZG9lc05vdEV4aXN0IikpOwogICAgICAgICAgICAgZy5WKCkubmV4dCgpOwogICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uIHRvIGJlIHRocm93bi4iKTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnQgZXguZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJDb3VsZCBub3QgcmViaW5kIik7CisgICAgICAgICAgICBhc3NlcnQgZXguZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJDb3VsZCBub3QgYWxpYXMgW2ddIHRvIFtkb2VzTm90RXhpc3RdIGFzIFtkb2VzTm90RXhpc3RdIG5vdCBpbiB0aGUgR3JhcGggb3IgVHJhdmVyc2FsU291cmNlIGdsb2JhbCBiaW5kaW5ncyIpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZUVycm9yV2l0aEdyYXBoU09OKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuY2hhbm5lbGl6ZXIoQ2hhbm5lbGl6ZXIuSHR0cENoYW5uZWxpemVyLmNsYXNzKQotICAgICAgICAgICAgICAgIC5zZXJpYWxpemVyKFNlcmlhbGl6ZXJzLkdSQVBIU09OX1YzKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXBvcnRFcnJvcldoZW5SZXF1ZXN0Q2FudEJlU2VyaWFsaXplZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IHRyYXZlcnNhbCgpLndpdGhSZW1vdGUoRHJpdmVyUmVtb3RlQ29ubmVjdGlvbi51c2luZyhjbHVzdGVyLCAiZG9lc05vdEV4aXN0IikpOwotICAgICAgICAgICAgZy5WKCkubmV4dCgpOwotICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgZXhjZXB0aW9uIHRvIGJlIHRocm93bi4iKTsKKyAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBSZXF1ZXN0T3B0aW9ucyBybyA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZSgiZ3JlbWxpbi1ncm9vdnkiKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFkZFBhcmFtZXRlcigiciIsIENvbG9yLlJFRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBjbGllbnQuc3VibWl0KCJyIiwgcm8pLmFsbCgpLmdldCgpOworICAgICAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24gb3ZlciBiYWQgc2VyaWFsaXphdGlvbiIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIGlubmVyID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChpbm5lciwgaW5zdGFuY2VPZihSZXNwb25zZUV4Y2VwdGlvbi5jbGFzcykpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuQkFEX1JFUVVFU1QsICgoUmVzcG9uc2VFeGNlcHRpb24pIGlubmVyKS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleC5nZXRNZXNzYWdlKCkuY29udGFpbnMoIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBzZXJpYWxpemF0aW9uIG9mIHRoaXMgcmVxdWVzdCIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBkaWUgY29tcGxldGVseSBqdXN0IGJlY2F1c2Ugd2UgaGFkIGEgYmFkIHNlcmlhbGl6YXRpb24gZXJyb3IuICB0aGF0IGtpbmQgb2Ygc3R1ZmYgaGFwcGVucworICAgICAgICAgICAgLy8gZnJvbSB0aW1lIHRvIHRpbWUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnNvbGUgaWYgeW91J3JlIGp1c3QgZXhwbG9yaW5nLgorICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBJZ25vcmUoIm5vdCBpbXBsZW1lbnRlZCBpbiBkcml2ZXIiKQorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUHJvY2Vzc1RyYXZlcnNhbEludGVycnVwdGlvbigpIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMSkuc2lkZUVmZmVjdHtUaHJlYWQuc2xlZXAoNTAwMCl9Iiwgcm8pLmFsbCgpLmdldCgpOworICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGltZWQgb3V0Iik7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgYXNzZXJ0IGV4LmdldE1lc3NhZ2UoKS5jb250YWlucygiQ291bGQgbm90IHJlYmluZCIpOworICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VFeGNlcHRpb24gcmUgPSAoUmVzcG9uc2VFeGNlcHRpb24pIGV4LmdldENhdXNlKCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgcmUuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQElnbm9yZSgibm90IGltcGxlbWVudGVkIGluIGRyaXZlciIpCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9jZXNzRXZhbEludGVycnVwdGlvbigpIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworICAgICAgICAgICAgY2xpZW50LnN1Ym1pdCgiVGhyZWFkLnNsZWVwKDUwMDApOydkb25lJyIsIHJvKS5hbGwoKS5nZXQoKTsKKyAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRpbWVkIG91dCIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlRXhjZXB0aW9uIHJlID0gKFJlc3BvbnNlRXhjZXB0aW9uKSBleC5nZXRDYXVzZSgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsIHJlLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdpdGhCYWRDbGllbnRTaWRlU2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisKKyAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImphdmEuYXd0LkNvbG9yLlJFRCIsIHJvKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFsbCgpLmpvaW4oKTsKKyAgICAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gZXhjZXB0aW9uIG92ZXIgYmFkIHNlcmlhbGl6YXRpb24iKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBpbm5lciA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOworICAgICAgICAgICAgICAgIGFzc2VydFRoYXQoaW5uZXIsIGluc3RhbmNlT2YoUmVzcG9uc2VFeGNlcHRpb24uY2xhc3MpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUiwgKChSZXNwb25zZUV4Y2VwdGlvbikgaW5uZXIpLmdldFJlc3BvbnNlU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBkaWUgY29tcGxldGVseSBqdXN0IGJlY2F1c2Ugd2UgaGFkIGEgYmFkIHNlcmlhbGl6YXRpb24gZXJyb3IuICB0aGF0IGtpbmQgb2Ygc3R1ZmYgaGFwcGVucworICAgICAgICAgICAgLy8gZnJvbSB0aW1lIHRvIHRpbWUsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnNvbGUgaWYgeW91J3JlIGp1c3QgZXhwbG9yaW5nLgorICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDIpIikuYWxsKCkuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdpdGhTY3JpcHRFeGVjdXRpb25FeGNlcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMSkubWF0aCgnXy8wJykiKTsKKyAgICAgICAgICAgICAgICByZXN1bHRzLmFsbCgpLmpvaW4oKTsKKyAgICAgICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSB0aHJvd24gZXhjZXB0aW9uIG92ZXIgZGl2aXNpb24gYnkgemVybyIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgZmluYWwgVGhyb3dhYmxlIGlubmVyID0gRXhjZXB0aW9uSGVscGVyLmdldFJvb3RDYXVzZShleCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpbm5lciBpbnN0YW5jZW9mIFJlc3BvbnNlRXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KGlubmVyLmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIkRpdmlzaW9uIGJ5IHplcm8iKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IsICgoUmVzcG9uc2VFeGNlcHRpb24pIGlubmVyKS5nZXRSZXNwb25zZVN0YXR1c0NvZGUoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHNob3VsZCBub3QgZGllIGNvbXBsZXRlbHkganVzdCBiZWNhdXNlIHdlIGhhZCBhIGJhZCBzZXJpYWxpemF0aW9uIGVycm9yLiAgdGhhdCBraW5kIG9mIHN0dWZmIGhhcHBlbnMKKyAgICAgICAgICAgIC8vIGZyb20gdGltZSB0byB0aW1lLCBlc3BlY2lhbGx5IGluIHRoZSBjb25zb2xlIGlmIHlvdSdyZSBqdXN0IGV4cGxvcmluZy4KKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgyKSIpLmFsbCgpLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFByb2Nlc3NSZXF1ZXN0c091dE9mT3JkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgUmVxdWVzdE9wdGlvbnMgcm8gPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLmxhbmd1YWdlKCJncmVtbGluLWdyb292eSIpLmNyZWF0ZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworCisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcnNGaXZlID0gY2xpZW50LnN1Ym1pdCgiVGhyZWFkLnNsZWVwKDUwMDApOydmaXZlJyIsIHJvKTsKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByc1plcm8gPSBjbGllbnQuc3VibWl0KCInemVybyciLCBybyk7CisKKyAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlRml2ZSA9IHJzRml2ZS5hbGwoKTsKKyAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gZnV0dXJlWmVybyA9IHJzWmVyby5hbGwoKTsKKworICAgICAgICAgICAgYXNzZXJ0RmFsc2UoZnV0dXJlRml2ZS5pc0RvbmUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInplcm8iLCBmdXR1cmVaZXJvLmdldCgpLmdldCgwKS5nZXRTdHJpbmcoKSk7CisKKyAgICAgICAgICAgIGFzc2VydEZhbHNlKGZ1dHVyZUZpdmUuaXNEb25lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJmaXZlIiwgZnV0dXJlRml2ZS5nZXQoMTAsIFRpbWVVbml0LlNFQ09ORFMpLmdldCgwKS5nZXRTdHJpbmcoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFdhaXRGb3JBbGxSZXN1bHRzVG9BcnJpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKworICAgICAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBjaGVja2VkID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5KSIpOworICAgICAgICAgICAgd2hpbGUgKCFyZXN1bHRzLmFsbEl0ZW1zQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3VsdHMuZ2V0QXZhaWxhYmxlSXRlbUNvdW50KCkgPCAxMCk7CisgICAgICAgICAgICAgICAgY2hlY2tlZC5pbmNyZW1lbnRBbmRHZXQoKTsKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjaGVja2VkLmdldCgpID4gMCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoOSwgcmVzdWx0cy5nZXRBdmFpbGFibGVJdGVtQ291bnQoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFN0cmVhbSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMSwyLDMsNCw1LDYsNyw4LDkpIik7CisgICAgICAgICAgICBmaW5hbCBBdG9taWNJbnRlZ2VyIGNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigwKTsKKyAgICAgICAgICAgIHJlc3VsdHMuc3RyZWFtKCkubWFwKGkgLT4gaS5nZXQoSW50ZWdlci5jbGFzcykgKiAyKS5mb3JFYWNoKGkgLT4gYXNzZXJ0RXF1YWxzKGNvdW50ZXIuaW5jcmVtZW50QW5kR2V0KCkgKiAyLCBJbnRlZ2VyLnBhcnNlSW50KGkudG9TdHJpbmcoKSkpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg5LCBjb3VudGVyLmdldCgpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0cy5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyh0cnVlKSk7CisKKyAgICAgICAgICAgIC8vIGNhbnQgc3RyZWFtIGl0IGFnYWluCisgICAgICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdHMuc3RyZWFtKCkuaXRlcmF0b3IoKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEl0ZXJhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHRTZXQgcmVzdWx0cyA9IGNsaWVudC5zdWJtaXQoImcuaW5qZWN0KDEsMiwzLDQsNSw2LDcsOCw5KSIpOworICAgICAgICAgICAgZmluYWwgSXRlcmF0b3I8UmVzdWx0PiBpdHR5ID0gcmVzdWx0cy5pdGVyYXRvcigpOworICAgICAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBjb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CisgICAgICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBjb3VudGVyLmluY3JlbWVudEFuZEdldCgpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb3VudGVyLmdldCgpLCBpdHR5Lm5leHQoKS5nZXRJbnQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg5LCBjb3VudGVyLmdldCgpKTsKKyAgICAgICAgICAgIGFzc2VydFRoYXQocmVzdWx0cy5hbGxJdGVtc0F2YWlsYWJsZSgpLCBpcyh0cnVlKSk7CisKKyAgICAgICAgICAgIC8vIGNhbid0IHN0cmVhbSBpdCBhZ2FpbgorICAgICAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRzLml0ZXJhdG9yKCkuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRTb21lVGhlblNvbWVNb3JlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgUmVzdWx0U2V0IHJlc3VsdHMgPSBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxLDIsMyw0LDUsNiw3LDgsOSkiKTsKKyAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gYmF0Y2gxID0gcmVzdWx0cy5zb21lKDUpOworICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBiYXRjaDIgPSByZXN1bHRzLnNvbWUoNSk7CisgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGJhdGNoTm90aGluZ0xlZnQgPSByZXN1bHRzLnNvbWUoNSk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCBiYXRjaDEuZ2V0KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBiYXRjaDEuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBiYXRjaDEuZ2V0KCkuZ2V0KDEpLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBiYXRjaDEuZ2V0KCkuZ2V0KDIpLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBiYXRjaDEuZ2V0KCkuZ2V0KDMpLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCBiYXRjaDEuZ2V0KCkuZ2V0KDQpLmdldEludCgpKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGJhdGNoMi5nZXQoKS5zaXplKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGJhdGNoMi5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIGJhdGNoMi5nZXQoKS5nZXQoMSkuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDgsIGJhdGNoMi5nZXQoKS5nZXQoMikuZ2V0SW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDksIGJhdGNoMi5nZXQoKS5nZXQoMykuZ2V0SW50KCkpOworCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgYmF0Y2hOb3RoaW5nTGVmdC5nZXQoKS5zaXplKCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRPbmVUaGVuU29tZVRoZW5Tb21lTW9yZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMSwyLDMsNCw1LDYsNyw4LDkpIik7CisgICAgICAgICAgICBmaW5hbCBSZXN1bHQgb25lID0gcmVzdWx0cy5vbmUoKTsKKyAgICAgICAgICAgIGZpbmFsIENvbXBsZXRhYmxlRnV0dXJlPExpc3Q8UmVzdWx0Pj4gYmF0Y2gxID0gcmVzdWx0cy5zb21lKDQpOworICAgICAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8TGlzdDxSZXN1bHQ+PiBiYXRjaDIgPSByZXN1bHRzLnNvbWUoNSk7CisgICAgICAgICAgICBmaW5hbCBDb21wbGV0YWJsZUZ1dHVyZTxMaXN0PFJlc3VsdD4+IGJhdGNoTm90aGluZ0xlZnQgPSByZXN1bHRzLnNvbWUoNSk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBvbmUuZ2V0SW50KCkpOworCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgYmF0Y2gxLmdldCgpLnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgYmF0Y2gxLmdldCgpLmdldCgwKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgYmF0Y2gxLmdldCgpLmdldCgxKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgYmF0Y2gxLmdldCgpLmdldCgyKS5nZXRJbnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgYmF0Y2gxLmdldCgpLmdldCgzKS5nZXRJbnQoKSk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBiYXRjaDIuZ2V0KCkuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBiYXRjaDIuZ2V0KCkuZ2V0KDApLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg3LCBiYXRjaDIuZ2V0KCkuZ2V0KDEpLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg4LCBiYXRjaDIuZ2V0KCkuZ2V0KDIpLmdldEludCgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg5LCBiYXRjaDIuZ2V0KCkuZ2V0KDMpLmdldEludCgpKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGJhdGNoTm90aGluZ0xlZnQuZ2V0KCkuc2l6ZSgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ2xvc2VXaXRoU2VydmVyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2x1c3Rlci5jb25uZWN0KCkuaW5pdCgpOworCisgICAgICAgICAgICBzdG9wU2VydmVyKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEZhaWxXaXRoQmFkU2VydmVyU2lkZVNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQ2x1c3RlciBjbHVzdGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKS5jcmVhdGUoKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGNsaWVudCA9IGNsdXN0ZXIuY29ubmVjdCgpOworICAgICAgICBmaW5hbCBSZXF1ZXN0T3B0aW9ucyBybyA9IFJlcXVlc3RPcHRpb25zLmJ1aWxkKCkubGFuZ3VhZ2UoImdyZW1saW4tZ3Jvb3Z5IikuY3JlYXRlKCk7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIGZpbmFsIFJlc3VsdFNldCByZXN1bHRzID0gY2xpZW50LnN1Ym1pdCgiVGlua2VyR3JhcGgub3BlbigpLnZhcmlhYmxlcygpIiwgcm8pOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlc3VsdHMuYWxsKCkuam9pbigpOworICAgICAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFRocm93YWJsZSBpbm5lciA9IEV4Y2VwdGlvbkhlbHBlci5nZXRSb290Q2F1c2UoZXgpOworICAgICAgICAgICAgICAgIGFzc2VydFRydWUoaW5uZXIgaW5zdGFuY2VvZiBSZXNwb25zZUV4Y2VwdGlvbik7CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChpbm5lci5nZXRNZXNzYWdlKCksIHN0YXJ0c1dpdGgoIkVycm9yIGR1cmluZyBzZXJpYWxpemF0aW9uIikpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SLCAoKFJlc3BvbnNlRXhjZXB0aW9uKSBpbm5lcikuZ2V0UmVzcG9uc2VTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBzaG91bGQgbm90IGRpZSBjb21wbGV0ZWx5IGp1c3QgYmVjYXVzZSB3ZSBoYWQgYSBiYWQgc2VyaWFsaXphdGlvbiBlcnJvci4gIHRoYXQga2luZCBvZiBzdHVmZiBoYXBwZW5zCisgICAgICAgICAgICAvLyBmcm9tIHRpbWUgdG8gdGltZSwgZXNwZWNpYWxseSBpbiB0aGUgY29uc29sZSBpZiB5b3UncmUganVzdCBleHBsb3JpbmcuCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY2xpZW50LnN1Ym1pdCgiZy5pbmplY3QoMikiKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RUaHJvd05vU3VjaEVsZW1lbnRFeGNlcHRpb24oKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIENsaWVudCBjbGllbnQgPSBjbHVzdGVyLmNvbm5lY3QoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQgcmV0dXJuICJub3RoaW5nIiAtIHRoZXJlIHNob3VsZCBiZSBubyBleGNlcHRpb24KKyAgICAgICAgICAgIGFzc2VydE51bGwoY2xpZW50LnN1Ym1pdCgiZy5WKCkuaGFzKCduYW1lJywna2FkZmphbGRqZmxhJykiKS5vbmUoKSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFN1Ym1pdFRyYXZlcnNhbEluR3JlbWxpbkxhbmcoKSB7CisgICAgICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCkuY3JlYXRlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gdHJhdmVyc2FsKCkud2l0aChEcml2ZXJSZW1vdGVDb25uZWN0aW9uLnVzaW5nKGNsdXN0ZXIpKTsKKworICAgICAgICAgICAgZmluYWwgTGlzdCByZXN1bHQgPSBnLndpdGgoImxhbmd1YWdlIiwgImdyZW1saW4tbGFuZyIpLmluamVjdChudWxsLCBudWxsKS5pbmplY3QobnVsbCwgbnVsbCkudG9MaXN0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgdGhyb3cgZXg7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjbHVzdGVyLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEV2YWxJbkdyZW1saW5MYW5nKCkgeworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIHJvID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5sYW5ndWFnZSgiZ3JlbWxpbi1sYW5nIikuY3JlYXRlKCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTExLCBjbGllbnQuc3VibWl0KCJnLmluamVjdCgxMTEpIiwgcm8pLm9uZSgpLmdldEludCgpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNsdXN0ZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRXZhbEluR3JlbWxpbkxhbmdXaXRoUGFyYW1ldGVycygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbHVzdGVyIGNsdXN0ZXIgPSBUZXN0Q2xpZW50RmFjdG9yeS5idWlsZCgpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KCk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIHJvID0gUmVxdWVzdE9wdGlvbnMuYnVpbGQoKS5sYW5ndWFnZSgiZ3JlbWxpbi1sYW5nIikuCisgICAgICAgICAgICAgICAgICAgIGFkZEcoImdtb2Rlcm4iKS4KKyAgICAgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKCJ4IiwgMSkuCisgICAgICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcigieSIsICJrbm93cyIpLgorICAgICAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoInoiLCAiY3JlYXRlZCIpLgorICAgICAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoImxvdyIsIDEpLgorICAgICAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoImhpZ2giLCAzKS5jcmVhdGUoKTsKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzdWx0PiBsID0gY2xpZW50LnN1Ym1pdCgiZy5WKHgpLm91dCh5LCB6KS52YWx1ZXMoJ25hbWUnKS5yYW5nZShsb3csIGhpZ2gpIiwgcm8pLmFsbCgpLmdldCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGwuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIGwuZ2V0KDApLmdldFN0cmluZygpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibG9wIiwgbC5nZXQoMSkuZ2V0U3RyaW5nKCkpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2x1c3Rlci5jbG9zZSgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL1Rlc3RDbGllbnRGYWN0b3J5LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL1Rlc3RDbGllbnRGYWN0b3J5LmphdmEKaW5kZXggZjllMDUyOS4uOGMzMWU0MSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9UZXN0Q2xpZW50RmFjdG9yeS5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvVGVzdENsaWVudEZhY3RvcnkuamF2YQpAQCAtMTksNyArMTksOCBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlcjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLkNsdXN0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuc2ltcGxlLldlYlNvY2tldENsaWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXF1ZXN0SW50ZXJjZXB0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuc2ltcGxlLlNpbXBsZUh0dHBDbGllbnQ7CiAKIGltcG9ydCBqYXZhLm5ldC5VUkk7CiAKQEAgLTI5LDggKzMwLDggQEAKIHB1YmxpYyBmaW5hbCBjbGFzcyBUZXN0Q2xpZW50RmFjdG9yeSB7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQT1JUID0gNDU5NDA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgV0VCU09DS0VUX1VSSSA9IFVSSS5jcmVhdGUoIndzOi8vbG9jYWxob3N0OiIgKyBQT1JUICsgIi9ncmVtbGluIik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBVUkkgU1NMX1dFQlNPQ0tFVF9VUkkgPSBVUkkuY3JlYXRlKCJ3c3M6Ly9sb2NhbGhvc3Q6IiArIFBPUlQgKyAiL2dyZW1saW4iKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBIVFRQX1VSSSA9IFVSSS5jcmVhdGUoImh0dHA6Ly9sb2NhbGhvc3Q6IiArIFBPUlQgKyAiL2dyZW1saW4iKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVSSSBTU0xfSFRUUF9VUkkgPSBVUkkuY3JlYXRlKCJodHRwczovL2xvY2FsaG9zdDoiICsgUE9SVCArICIvZ3JlbWxpbiIpOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFAgPSAiaHR0cDovL2xvY2FsaG9zdDoiICsgUE9SVDsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRV9QQVRIID0gImNvbmYvcmVtb3RlLW9iamVjdHMueWFtbCI7CiAKQEAgLTQyLDE2ICs0MywyMCBAQAogICAgICAgICByZXR1cm4gQ2x1c3Rlci5idWlsZChhZGRyZXNzKS5wb3J0KFBPUlQpOwogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgQ2x1c3Rlci5CdWlsZGVyIGJ1aWxkKGZpbmFsIFJlcXVlc3RJbnRlcmNlcHRvciBzZXJpYWxpemluZ0ludGVyY2VwdG9yKSB7CisgICAgICAgIHJldHVybiBDbHVzdGVyLmJ1aWxkKHNlcmlhbGl6aW5nSW50ZXJjZXB0b3IpLnBvcnQoUE9SVCk7CisgICAgfQorCiAgICAgcHVibGljIHN0YXRpYyBDbHVzdGVyIG9wZW4oKSB7CiAgICAgICAgIHJldHVybiBidWlsZCgpLmNyZWF0ZSgpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgV2ViU29ja2V0Q2xpZW50IGNyZWF0ZVdlYlNvY2tldENsaWVudCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJTb2NrZXRDbGllbnQoV0VCU09DS0VUX1VSSSk7CisgICAgcHVibGljIHN0YXRpYyBTaW1wbGVIdHRwQ2xpZW50IGNyZWF0ZVNpbXBsZUh0dHBDbGllbnQoKSB7CisgICAgICAgIHJldHVybiBuZXcgU2ltcGxlSHR0cENsaWVudChIVFRQX1VSSSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBXZWJTb2NrZXRDbGllbnQgY3JlYXRlU1NMV2ViU29ja2V0Q2xpZW50KCkgewotICAgICAgICByZXR1cm4gbmV3IFdlYlNvY2tldENsaWVudChTU0xfV0VCU09DS0VUX1VSSSk7CisgICAgcHVibGljIHN0YXRpYyBTaW1wbGVIdHRwQ2xpZW50IGNyZWF0ZVNTTFNpbXBsZUh0dHBDbGllbnQoKSB7CisgICAgICAgIHJldHVybiBuZXcgU2ltcGxlSHR0cENsaWVudChTU0xfSFRUUF9VUkkpOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNyZWF0ZVVSTFN0cmluZygpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvYXV0aHovQWxsb3dMaXN0QXV0aG9yaXplci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BbGxvd0xpc3RBdXRob3JpemVyLmphdmEKaW5kZXggZjMyMTJkZC4uMjM2YjM2NSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BbGxvd0xpc3RBdXRob3JpemVyLmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BbGxvd0xpc3RBdXRob3JpemVyLmphdmEKQEAgLTE4LDE1ICsxOCwxMSBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGh6OwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5CeXRlY29kZUhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5ncy5BdXRob3JpemF0aW9uU2V0dGluZ3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5BdXRoZW50aWNhdGVkVXNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKQEAgLTM3LDkgKzMzLDkgQEAKIAogCiAvKioKLSAqIEF1dGhvcml6ZXMgYSB1c2VyIHBlciByZXF1ZXN0LCBiYXNlZCBvbiBhIGxpc3QgdGhhdCBncmFudHMgYWNjZXNzIHRvIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IGluc3RhbmNlcyBmb3IKLSAqIGJ5dGVjb2RlIHJlcXVlc3RzIGFuZCB0byBncmVtbGluIHNlcnZlcidzIHNhbmRib3ggZm9yIHN0cmluZyByZXF1ZXN0cyBhbmQgbGFtYmRhcy4gVGhlIHtAbGluawotICogQXV0aG9yaXphdGlvblNldHRpbmdzfS5jb25maWcgbXVzdCBoYXZlIGFuIGF1dGhvcml6YXRpb25BbGxvd0xpc3QgZW50cnkgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiBhIFlBTUwgZmlsZS4KKyAqIEF1dGhvcml6ZXMgYSB1c2VyIHBlciByZXF1ZXN0LCBiYXNlZCBvbiBhIGxpc3QgdGhhdCBncmFudHMgYWNjZXNzIHRvIHtAbGluayBUcmF2ZXJzYWxTb3VyY2V9IGluc3RhbmNlcworICogdG8gZ3JlbWxpbiBzZXJ2ZXIncyBzYW5kYm94IGZvciBzdHJpbmcgcmVxdWVzdHMgYW5kIGxhbWJkYXMuIFRoZSB7QGxpbmsgQXV0aG9yaXphdGlvblNldHRpbmdzfS5jb25maWcgbXVzdCBoYXZlCisgKiBhbiBhdXRob3JpemF0aW9uQWxsb3dMaXN0IGVudHJ5IHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBZQU1MIGZpbGUuCiAgKiBUaGlzIGF1dGhvcml6ZXIgaXMgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMgb25seS4gSXQgZG9lcyBub3Qgc2NhbGUgd2VsbCBpbiB0aGUgbnVtYmVyIG9mIHVzZXJzIHJlZ2FyZGluZwogICogbWVtb3J5IHVzYWdlIGFuZCBhZG1pbmlzdHJhdGl2ZSBidXJkZW4uCiAgKgpAQCAtNDgsOCArNDQsNyBAQAogcHVibGljIGNsYXNzIEFsbG93TGlzdEF1dGhvcml6ZXIgaW1wbGVtZW50cyBBdXRob3JpemVyIHsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBTkRCT1ggPSAic2FuZGJveCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVKRUNUX0JZVEVDT0RFID0gIlVzZXIgbm90IGF1dGhvcml6ZWQgZm9yIGJ5dGVjb2RlIHJlcXVlc3RzIG9uICVzIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUpFQ1RfTEFNQkRBID0gImxhbWJkYXMiOworCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVKRUNUX01VVEFURSA9ICJ0aGUgUmVhZE9ubHlTdHJhdGVneSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVKRUNUX09MQVAgPSAidGhlIFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5IjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUpFQ1RfU1VCR1JBUEggPSAidGhlIFN1YmdyYXBoU3RyYXRlZ3kiOwpAQCAtOTEsNjMgKzg2LDExIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgYSB1c2VyIGlzIGF1dGhvcml6ZWQgdG8gaGF2ZSBhIGdyZW1saW4gYnl0ZWNvZGUgcmVxdWVzdCBmcm9tIGEgY2xpZW50IGFuc3dlcmVkIGFuZCByYWlzZXMgYW4KLSAgICAgKiB7QGxpbmsgQXV0aG9yaXphdGlvbkV4Y2VwdGlvbn0gaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuIEZvciBhIHJlcXVlc3QgdG8gYmUgYXV0aG9yaXplZCwgdGhlIHVzZXIgbXVzdCBlaXRoZXIKLSAgICAgKiBoYXZlIGEgZ3JhbnQgZm9yIHRoZSByZXF1ZXN0ZWQge0BsaW5rIFRyYXZlcnNhbFNvdXJjZX0sIHdpdGhvdXQgdXNpbmcgbGFtYmRhcywgbXV0YXRpbmcgc3RlcHMgb3IgT0xBUCwgb3IgaGF2ZSBhCi0gICAgICogc2FuZGJveCBncmFudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB1c2VyIHtAbGluayBBdXRoZW50aWNhdGVkVXNlcn0gdGhhdCBuZWVkcyBhdXRob3JpemF0aW9uLgotICAgICAqIEBwYXJhbSBieXRlY29kZSBUaGUgZ3JlbWxpbiB7QGxpbmsgQnl0ZWNvZGV9IHJlcXVlc3QgdG8gYXV0aG9yaXplIHRoZSB1c2VyIGZvci4KLSAgICAgKiBAcGFyYW0gYWxpYXNlcyBBIHtAbGluayBNYXB9IHdpdGggYSBzaW5nbGUga2V5L3ZhbHVlIHBhaXIgdGhhdCBtYXBzIHRoZSBuYW1lIG9mIHRoZSB7QGxpbmsgVHJhdmVyc2FsU291cmNlfSBpbiB0aGUKLSAgICAgKiAgICAgICAgICAgICAgICB7QGxpbmsgQnl0ZWNvZGV9IHJlcXVlc3QgdG8gbmFtZSBvZiBvbmUgY29uZmlndXJlZCBpbiBHcmVtbGluIFNlcnZlci4KLSAgICAgKiBAcmV0dXJuIFRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB7QGxpbmsgQnl0ZWNvZGV9IHRvIGJlIHVzZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnl0ZWNvZGUgYXV0aG9yaXplKGZpbmFsIEF1dGhlbnRpY2F0ZWRVc2VyIHVzZXIsIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlLCBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMpIHRocm93cyBBdXRob3JpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gdXNlcm5hbWVzID0gbmV3IEhhc2hTZXQ8PigpOwotCi0gICAgICAgIGZvciAoZmluYWwgU3RyaW5nIHJlc291cmNlOiBhbGlhc2VzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICB1c2VybmFtZXMuYWRkQWxsKHVzZXJuYW1lc0J5VHJhdmVyc2FsU291cmNlLmdldChyZXNvdXJjZSkpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlckhhc1RyYXZlcnNhbFNvdXJjZUdyYW50ID0gdXNlcm5hbWVzLmNvbnRhaW5zKHVzZXIuZ2V0TmFtZSgpKSB8fCB1c2VybmFtZXMuY29udGFpbnMoQXV0aGVudGljYXRlZFVzZXIuQU5PTllNT1VTX1VTRVJOQU1FKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VySGFzU2FuZGJveEdyYW50ID0gdXNlcm5hbWVzU2FuZGJveC5jb250YWlucyh1c2VyLmdldE5hbWUoKSkgfHwgdXNlcm5hbWVzU2FuZGJveC5jb250YWlucyhBdXRoZW50aWNhdGVkVXNlci5BTk9OWU1PVVNfVVNFUk5BTUUpOwotICAgICAgICBmaW5hbCBib29sZWFuIHJ1bnNMYW1iZGEgPSBCeXRlY29kZUhlbHBlci5nZXRMYW1iZGFMYW5ndWFnZShieXRlY29kZSkuaXNQcmVzZW50KCk7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gdG91Y2hlc1JlYWRPbmx5U3RyYXRlZ3kgPSBieXRlY29kZS50b1N0cmluZygpLmNvbnRhaW5zKFJlYWRPbmx5U3RyYXRlZ3kuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB0b3VjaGVzT0xBUFJlc3RyaWN0aW9uID0gYnl0ZWNvZGUudG9TdHJpbmcoKS5jb250YWlucyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpOwotICAgICAgICAvLyBUaGlzIGVsZW1lbnQgYmVjb21lcyBvYnNvbGV0ZSBhZnRlciByZXNvbHZpbmcgVElOS0VSUE9QLTI0NzMgZm9yIGFsbG93aW5nIG9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgZWFjaCB0cmF2ZXJzYWwgc3RyYXRlZ3kuCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gdG91Y2hlc1N1YmdyYXBoU3RyYXRlZ3kgPSBieXRlY29kZS50b1N0cmluZygpLmNvbnRhaW5zKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKTsKLQotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gcmVqZWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBpZiAocnVuc0xhbWJkYSkgewotICAgICAgICAgICAgcmVqZWN0aW9ucy5hZGQoUkVKRUNUX0xBTUJEQSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRvdWNoZXNSZWFkT25seVN0cmF0ZWd5KSB7Ci0gICAgICAgICAgICByZWplY3Rpb25zLmFkZChSRUpFQ1RfTVVUQVRFKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodG91Y2hlc09MQVBSZXN0cmljdGlvbikgewotICAgICAgICAgICAgcmVqZWN0aW9ucy5hZGQoUkVKRUNUX09MQVApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0b3VjaGVzU3ViZ3JhcGhTdHJhdGVneSkgewotICAgICAgICAgICAgcmVqZWN0aW9ucy5hZGQoUkVKRUNUX1NVQkdSQVBIKTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgcmVqZWN0TWVzc2FnZSA9IFJFSkVDVF9CWVRFQ09ERTsKLSAgICAgICAgaWYgKHJlamVjdGlvbnMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgcmVqZWN0TWVzc2FnZSArPSAiIHVzaW5nICIgKyBTdHJpbmcuam9pbigiLCAiLCByZWplY3Rpb25zKTsKLSAgICAgICAgfQotICAgICAgICByZWplY3RNZXNzYWdlICs9ICIuIjsKLQotICAgICAgICBpZiAoICghdXNlckhhc1RyYXZlcnNhbFNvdXJjZUdyYW50IHx8IHJ1bnNMYW1iZGEgfHwgdG91Y2hlc09MQVBSZXN0cmljdGlvbiB8fCB0b3VjaGVzUmVhZE9ubHlTdHJhdGVneSB8fCB0b3VjaGVzU3ViZ3JhcGhTdHJhdGVneSkgJiYgIXVzZXJIYXNTYW5kYm94R3JhbnQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQocmVqZWN0TWVzc2FnZSwgYWxpYXNlcy52YWx1ZXMoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBieXRlY29kZTsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBDaGVja3Mgd2hldGhlciBhIHVzZXIgaXMgYXV0aG9yaXplZCB0byBoYXZlIGEgc2NyaXB0IHJlcXVlc3QgZnJvbSBhIGdyZW1saW4gY2xpZW50IGFuc3dlcmVkIGFuZCByYWlzZXMgYW4KICAgICAgKiB7QGxpbmsgQXV0aG9yaXphdGlvbkV4Y2VwdGlvbn0gaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuCiAgICAgICoKICAgICAgKiBAcGFyYW0gdXNlciB7QGxpbmsgQXV0aGVudGljYXRlZFVzZXJ9IHRoYXQgbmVlZHMgYXV0aG9yaXphdGlvbi4KLSAgICAgKiBAcGFyYW0gbXNnIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0gaW4gd2hpY2ggdGhlIHtAbGluayBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zfS5BUkdTX0dSRU1MSU4gYXJndW1lbnQgY2FuIGNvbnRhaW4gYW4gYXJiaXRyYXJ5IHN1Y2Nlc3Npb24gb2Ygc2NyaXB0IHN0YXRlbWVudHMuCisgICAgICogQHBhcmFtIG1zZyB7QGxpbmsgUmVxdWVzdE1lc3NhZ2V9IGluIHdoaWNoIHRoZSB7QGxpbmsgVG9rZW5zfS5BUkdTX0dSRU1MSU4gYXJndW1lbnQgY2FuIGNvbnRhaW4gYW4gYXJiaXRyYXJ5IHN1Y2Nlc3Npb24gb2Ygc2NyaXB0IHN0YXRlbWVudHMuCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYXV0aG9yaXplKGZpbmFsIEF1dGhlbnRpY2F0ZWRVc2VyIHVzZXIsIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb24gewogICAgICAgICBpZiAoIXVzZXJuYW1lc1NhbmRib3guY29udGFpbnModXNlci5nZXROYW1lKCkpKSB7CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2F1dGh6L0F1dGhvcml6ZXJUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2F1dGh6L0F1dGhvcml6ZXJUZXN0LmphdmEKaW5kZXggOWY5MmFhNC4uNjNhOGIzMSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9hdXRoei9BdXRob3JpemVyVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvYXV0aHovQXV0aG9yaXplclRlc3QuamF2YQpAQCAtMTgsMTcgKzE4LDEzIEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aHo7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RyYXRlZ3kudmVyaWZpY2F0aW9uLlZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguQXV0aGVudGljYXRlZFVzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwogaW1wb3J0IG9yZy5qdW5pdC5SdWxlOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpAQCAtNDEsMTEgKzM3LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7CiAKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aHouQWxsb3dMaXN0QXV0aG9yaXplci5SRUpFQ1RfQllURUNPREU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGh6LkFsbG93TGlzdEF1dGhvcml6ZXIuUkVKRUNUX0xBTUJEQTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aHouQWxsb3dMaXN0QXV0aG9yaXplci5SRUpFQ1RfTVVUQVRFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoei5BbGxvd0xpc3RBdXRob3JpemVyLlJFSkVDVF9PTEFQOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5hdXRoei5BbGxvd0xpc3RBdXRob3JpemVyLlJFSkVDVF9TVUJHUkFQSDsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aHouQWxsb3dMaXN0QXV0aG9yaXplci5SRUpFQ1RfU1RSSU5HOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwpAQCAtNTksMTQgKzUwLDcgQEAKICAqLwogcHVibGljIGNsYXNzIEF1dGhvcml6ZXJUZXN0IHsKIAotICAgIGZpbmFsIFN0cmluZyBCWVRFQ09ERSA9ICJieXRlY29kZSI7Ci0gICAgZmluYWwgU3RyaW5nIEJZVEVDT0RFX0xBTUJEQSA9ICJieXRlY29kZS1sYW1iZGEiOwotICAgIGZpbmFsIFN0cmluZyBCWVRFQ09ERV9NVVRBVEUgPSAiYnl0ZWNvZGUtbXV0YXRlIjsKLSAgICBmaW5hbCBTdHJpbmcgQllURUNPREVfT0xBUCA9ICJieXRlY29kZS1PTEFQIjsKLSAgICBmaW5hbCBTdHJpbmcgQllURUNPREVfU1VCR1JBUEggPSAiYnl0ZWNvZGUtc3ViZ3JhcGgiOwotCiAgICAgQWxsb3dMaXN0QXV0aG9yaXplciBhdXRob3JpemVyOwotICAgIFN1YmdyYXBoVHJhdmVyc2FscyBzdWJncmFwaFRyYXZlcnNhbHM7CiAKICAgICBAUnVsZQogICAgIHB1YmxpYyBUZXN0TmFtZSBuYW1lID0gbmV3IFRlc3ROYW1lKCk7CkBAIC04MiwxMDkgKzY2LDYgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhvcml6ZUJ5dGVjb2RlUmVxdWVzdCgpIHRocm93cyBBdXRob3JpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2NsYXNzaWMiLCBCWVRFQ09ERSk7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoInVzZXJtb2Rlcm4iLCAiZ21vZGVybiIsIEJZVEVDT0RFKTsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnbW9kZXJuIiwgQllURUNPREUpOwotICAgICAgICBwb3NpdGl2ZUJ5dGVjb2RlKCJ1c2VyY2xhc3NpYyIsICJnY3JldyIsIEJZVEVDT0RFKTsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgidXNlcm1vZGVybiIsICJnY3JldyIsIEJZVEVDT0RFKTsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnY3JldyIsIEJZVEVDT0RFKTsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2dyYXRlZnVsIiwgQllURUNPREUpOwotICAgICAgICBwb3NpdGl2ZUJ5dGVjb2RlKCJ1c2Vyc2luayIsICJnZ3JhdGVmdWwiLCBCWVRFQ09ERSk7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoImFueXVzZXIiLCAiZ2dyYXRlZnVsIiwgQllURUNPREUpOwotICAgICAgICBwb3NpdGl2ZUJ5dGVjb2RlKCJ1c2Vyc2FuZGJveCIsICJnY2xhc3NpYyIsIEJZVEVDT0RFKTsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgibWFya28iLCAiZ2NyZXciLCBCWVRFQ09ERSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBdXRob3JpemVCeXRlY29kZVJlcXVlc3QoKSB7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJzaW5rIiwgImdjbGFzc2ljIiwgQllURUNPREUpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2Vyc2luayIsICJnbW9kZXJuIiwgQllURUNPREUpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2Vyc2luayIsICJnY3JldyIsIEJZVEVDT0RFKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgiYW55dXNlciIsICJnY2xhc3NpYyIsIEJZVEVDT0RFKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgiYW55dXNlciIsICJnbW9kZXJuIiwgQllURUNPREUpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJhbnl1c2VyIiwgImdjcmV3IiwgQllURUNPREUpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aG9yaXplTGFtYmRhQnl0ZWNvZGVSZXF1ZXN0KCkgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb24gewotICAgICAgICBwb3NpdGl2ZUJ5dGVjb2RlKCJ1c2Vyc2FuZGJveCIsICJnY2xhc3NpYyIsIEJZVEVDT0RFX0xBTUJEQSk7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoIm1hcmtvIiwgImdjcmV3IiwgQllURUNPREVfTEFNQkRBKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEF1dGhvcml6ZUxhbWJkYUJ5dGVjb2RlUmVxdWVzdCgpIHsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2NsYXNzaWMiLCBCWVRFQ09ERV9MQU1CREEpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VybW9kZXJuIiwgImdtb2Rlcm4iLCBCWVRFQ09ERV9MQU1CREEpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJzdGVwaGVuIiwgImdtb2Rlcm4iLCBCWVRFQ09ERV9MQU1CREEpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VyY2xhc3NpYyIsICJnY3JldyIsIEJZVEVDT0RFX0xBTUJEQSk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJtb2Rlcm4iLCAiZ2NyZXciLCBCWVRFQ09ERV9MQU1CREEpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJzdGVwaGVuIiwgImdjcmV3IiwgQllURUNPREVfTEFNQkRBKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfTEFNQkRBKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcnNpbmsiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfTEFNQkRBKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgiYW55dXNlciIsICJnZ3JhdGVmdWwiLCBCWVRFQ09ERV9MQU1CREEpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aG9yaXplTXV0YXRpbmdCeXRlY29kZVJlcXVlc3QoKSB0aHJvd3MgQXV0aG9yaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoInVzZXJzYW5kYm94IiwgImdjbGFzc2ljIiwgQllURUNPREVfTVVUQVRFKTsKLSAgICAgICAgcG9zaXRpdmVCeXRlY29kZSgibWFya28iLCAiZ2NyZXciLCBCWVRFQ09ERV9NVVRBVEUpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90QXV0aG9yaXplTXV0YXRpbmdCeXRlY29kZVJlcXVlc3QoKSB7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJjbGFzc2ljIiwgImdjbGFzc2ljIiwgQllURUNPREVfTVVUQVRFKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcm1vZGVybiIsICJnbW9kZXJuIiwgQllURUNPREVfTVVUQVRFKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnbW9kZXJuIiwgQllURUNPREVfTVVUQVRFKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2NyZXciLCBCWVRFQ09ERV9NVVRBVEUpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VybW9kZXJuIiwgImdjcmV3IiwgQllURUNPREVfTVVUQVRFKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnY3JldyIsIEJZVEVDT0RFX01VVEFURSk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJjbGFzc2ljIiwgImdncmF0ZWZ1bCIsIEJZVEVDT0RFX01VVEFURSk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJzaW5rIiwgImdncmF0ZWZ1bCIsIEJZVEVDT0RFX01VVEFURSk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoImFueXVzZXIiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfTVVUQVRFKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEF1dGhvcml6ZU9MQVBCeXRlY29kZVJlcXVlc3QoKSB0aHJvd3MgQXV0aG9yaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoInVzZXJzYW5kYm94IiwgImdjbGFzc2ljIiwgQllURUNPREVfT0xBUCk7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoIm1hcmtvIiwgImdjcmV3IiwgQllURUNPREVfT0xBUCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBdXRob3JpemVPTEFQQnl0ZWNvZGVSZXF1ZXN0KCkgewotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VyY2xhc3NpYyIsICJnY2xhc3NpYyIsIEJZVEVDT0RFX09MQVApOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VybW9kZXJuIiwgImdtb2Rlcm4iLCBCWVRFQ09ERV9PTEFQKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnbW9kZXJuIiwgQllURUNPREVfT0xBUCk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJjbGFzc2ljIiwgImdjcmV3IiwgQllURUNPREVfT0xBUCk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJtb2Rlcm4iLCAiZ2NyZXciLCBCWVRFQ09ERV9PTEFQKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnY3JldyIsIEJZVEVDT0RFX09MQVApOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VyY2xhc3NpYyIsICJnZ3JhdGVmdWwiLCBCWVRFQ09ERV9PTEFQKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcnNpbmsiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfT0xBUCk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoImFueXVzZXIiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfT0xBUCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBdXRob3JpemVTdWJncmFwaFN0cmF0ZWd5Qnl0ZWNvZGVSZXF1ZXN0KCkgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb24gewotICAgICAgICBzdWJncmFwaFRyYXZlcnNhbHMgPSBuZXcgU3ViZ3JhcGhUcmF2ZXJzYWxzKCk7Ci0gICAgICAgIHBvc2l0aXZlQnl0ZWNvZGUoInVzZXJzYW5kYm94IiwgImdjbGFzc2ljIiwgQllURUNPREVfU1VCR1JBUEgpOwotICAgICAgICBwb3NpdGl2ZUJ5dGVjb2RlKCJtYXJrbyIsICJnY3JldyIsIEJZVEVDT0RFX1NVQkdSQVBIKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEF1dGhvcml6ZVN1YmdyYXBoU3RyYXRlZ3lCeXRlY29kZVJlcXVlc3QoKSB7Ci0gICAgICAgIHN1YmdyYXBoVHJhdmVyc2FscyA9IG5ldyBTdWJncmFwaFRyYXZlcnNhbHMoKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2NsYXNzaWMiLCBCWVRFQ09ERV9TVUJHUkFQSCk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoInVzZXJtb2Rlcm4iLCAiZ21vZGVybiIsIEJZVEVDT0RFX1NVQkdSQVBIKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnbW9kZXJuIiwgQllURUNPREVfU1VCR1JBUEgpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2VyY2xhc3NpYyIsICJnY3JldyIsIEJZVEVDT0RFX1NVQkdSQVBIKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcm1vZGVybiIsICJnY3JldyIsIEJZVEVDT0RFX1NVQkdSQVBIKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgic3RlcGhlbiIsICJnY3JldyIsIEJZVEVDT0RFX1NVQkdSQVBIKTsKLSAgICAgICAgbmVnYXRpdmVCeXRlY29kZSgidXNlcmNsYXNzaWMiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfU1VCR1JBUEgpOwotICAgICAgICBuZWdhdGl2ZUJ5dGVjb2RlKCJ1c2Vyc2luayIsICJnZ3JhdGVmdWwiLCBCWVRFQ09ERV9TVUJHUkFQSCk7Ci0gICAgICAgIG5lZ2F0aXZlQnl0ZWNvZGUoImFueXVzZXIiLCAiZ2dyYXRlZnVsIiwgQllURUNPREVfU1VCR1JBUEgpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQXV0aG9yaXplU3RyaW5nUmVxdWVzdCgpIHRocm93cyBBdXRob3JpemF0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgYXV0aG9yaXplci5hdXRob3JpemUobmV3IEF1dGhlbnRpY2F0ZWRVc2VyKCJ1c2Vyc2FuZGJveCIpLCBidWlsZFJlcXVlc3RNZXNzYWdlKCJnY2xhc3NpYyIpKTsKICAgICAgICAgYXV0aG9yaXplci5hdXRob3JpemUobmV3IEF1dGhlbnRpY2F0ZWRVc2VyKCJtYXJrbyIpLCBidWlsZFJlcXVlc3RNZXNzYWdlKCJnY3JldyIpKTsKQEAgLTE5OSw0NyArODAsNiBAQAogICAgICAgICBuZWdhdGl2ZVN0cmluZygiYW55dXNlciIsICJnZ3JhdGVmdWwiKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcG9zaXRpdmVCeXRlY29kZShmaW5hbCBTdHJpbmcgdXNlcm5hbWUsIGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UsIGZpbmFsIFN0cmluZyByZXF1ZXN0VHlwZSkgdGhyb3dzIEF1dGhvcml6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGFsaWFzZXMucHV0KCJnIiwgdHJhdmVyc2FsU291cmNlKTsKLSAgICAgICAgYXV0aG9yaXplci5hdXRob3JpemUobmV3IEF1dGhlbnRpY2F0ZWRVc2VyKHVzZXJuYW1lKSwgYnl0ZWNvZGVSZXF1ZXN0KHJlcXVlc3RUeXBlKSwgYWxpYXNlcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5lZ2F0aXZlQnl0ZWNvZGUoZmluYWwgU3RyaW5nIHVzZXJuYW1lLCBmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBTdHJpbmcgcmVxdWVzdFR5cGUpIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBhbGlhc2VzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBhbGlhc2VzLnB1dCgiZyIsIHRyYXZlcnNhbFNvdXJjZSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlOwotICAgICAgICBzd2l0Y2ggKHJlcXVlc3RUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIEJZVEVDT0RFOiAgICAgICAgICAgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoUkVKRUNUX0JZVEVDT0RFICsgIi4iLCAiWyIgKyB0cmF2ZXJzYWxTb3VyY2UgKyAiXSIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQllURUNPREVfTEFNQkRBOiAgICBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdChSRUpFQ1RfQllURUNPREUgKyAiIHVzaW5nICIgKyBSRUpFQ1RfTEFNQkRBICsgIi4iLCAiWyIgKyB0cmF2ZXJzYWxTb3VyY2UgKyAiXSIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQllURUNPREVfTVVUQVRFOiAgICBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdChSRUpFQ1RfQllURUNPREUgKyAiIHVzaW5nICIgKyBSRUpFQ1RfTVVUQVRFICsgIi4iLCAiWyIgKyB0cmF2ZXJzYWxTb3VyY2UgKyAiXSIpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQllURUNPREVfT0xBUDogICAgICBtZXNzYWdlID0gU3RyaW5nLmZvcm1hdChSRUpFQ1RfQllURUNPREUgKyAiIHVzaW5nICIgKyBSRUpFQ1RfT0xBUCArICIuIiwgIlsiICsgdHJhdmVyc2FsU291cmNlICsgIl0iKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJZVEVDT0RFX1NVQkdSQVBIOiAgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQoUkVKRUNUX0JZVEVDT0RFICsgIiB1c2luZyAiICsgUkVKRUNUX1NVQkdSQVBIICsgIi4iLCAiWyIgKyB0cmF2ZXJzYWxTb3VyY2UgKyAiXSIpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICB0cnkgewotICAgICAgICAgICAgYXV0aG9yaXplci5hdXRob3JpemUobmV3IEF1dGhlbnRpY2F0ZWRVc2VyKHVzZXJuYW1lKSwgYnl0ZWNvZGVSZXF1ZXN0KHJlcXVlc3RUeXBlKSwgYWxpYXNlcyk7Ci0gICAgICAgICAgICBmYWlsKCJUZXN0IGNvZGUgZGlkIG5vdCBmYWlsIHdoaWxlIGl0IHNob3VsZCBoYXZlIGZhaWxlZCEiKTsKLSAgICAgICAgfSBjYXRjaChBdXRob3JpemF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhtZXNzYWdlLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEJ5dGVjb2RlIGJ5dGVjb2RlUmVxdWVzdChmaW5hbCBTdHJpbmcgcmVxdWVzdFR5cGUpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IFRpbmtlckdyYXBoLm9wZW4oKS50cmF2ZXJzYWwoKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGU7Ci0KLSAgICAgICAgc3dpdGNoIChyZXF1ZXN0VHlwZSkgewotICAgICAgICAgICAgY2FzZSBCWVRFQ09ERTogICAgICAgICAgIGJ5dGVjb2RlID0gZy5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCWVRFQ09ERV9MQU1CREE6ICAgIGJ5dGVjb2RlID0gZy5WKCkubWFwKExhbWJkYS5mdW5jdGlvbigiaXQuZ2V0KCkiKSkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBCWVRFQ09ERV9NVVRBVEU6ICAgIGJ5dGVjb2RlID0gZy53aXRob3V0U3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5LmNsYXNzKS5WKCkuYWRkVigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQllURUNPREVfT0xBUDogICAgICBieXRlY29kZSA9IGcud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kuY2xhc3MpLndpdGhDb21wdXRlcigpLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEJZVEVDT0RFX1NVQkdSQVBIOiAgYnl0ZWNvZGUgPSBzdWJncmFwaFRyYXZlcnNhbHMuZ2V0KCk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBieXRlY29kZTsKLSAgICB9Ci0KICAgICBwcml2YXRlIHZvaWQgbmVnYXRpdmVTdHJpbmcoZmluYWwgU3RyaW5nIHVzZXJuYW1lLCBmaW5hbCBTdHJpbmcgdHJhdmVyc2FsU291cmNlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBhdXRob3JpemVyLmF1dGhvcml6ZShuZXcgQXV0aGVudGljYXRlZFVzZXIodXNlcm5hbWUpLCBidWlsZFJlcXVlc3RNZXNzYWdlKHRyYXZlcnNhbFNvdXJjZSkpOwpAQCAtMjUxLDI3ICs5MSwyNyBAQAogCiAgICAgcHJpdmF0ZSBSZXF1ZXN0TWVzc2FnZSBidWlsZFJlcXVlc3RNZXNzYWdlKGZpbmFsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHNjcmlwdCA9IFN0cmluZy5mb3JtYXQoIjErMTsgJXMuVigpLm1hcHtpdC5nZXQoKX0iLCB0cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICByZXR1cm4gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19FVkFMKS5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgc2NyaXB0KS5jcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKHNjcmlwdCkuY3JlYXRlKCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3ViZ3JhcGhUcmF2ZXJzYWxzIGltcGxlbWVudHMgU3VwcGxpZXI8Qnl0ZWNvZGU+IHsKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdWJncmFwaFRyYXZlcnNhbHMgaW1wbGVtZW50cyBTdXBwbGllcjxHcmVtbGluTGFuZz4gewogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gVGlua2VyR3JhcGgub3BlbigpLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBJdGVyYXRvcjxCeXRlY29kZT4gbXV0YXRpbmdCeXRlY29kZXMgPSBBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIGcud2l0aG91dFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5jbGFzcykuVigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgIGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmJvdGhFKCkpLmNyZWF0ZSgpKS5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgZy53aXRob3V0U3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNsYXNzKS5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uYm90aEUoKSkuY3JlYXRlKCkpLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgICAgICAgICBnLndpdGhvdXRTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgICAgICAgICBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5ib3RoRSgpKS5jcmVhdGUoKSkuVigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgIGcud2l0aG91dFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5jbGFzcykuVigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLAotICAgICAgICAgICAgICAgIGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmJvdGhFKCkpLmNyZWF0ZSgpKS5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgZy53aXRob3V0U3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNsYXNzKS5WKCkuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksCi0gICAgICAgICAgICAgICAgZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uYm90aEUoKSkuY3JlYXRlKCkpLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgICAgICAgICBnLndpdGhvdXRTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwKLSAgICAgICAgICAgICAgICBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5ib3RoRSgpKS5jcmVhdGUoKSkuVigpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpCisgICAgICAgIGZpbmFsIEl0ZXJhdG9yPEdyZW1saW5MYW5nPiBtdXRhdGluZ0J5dGVjb2RlcyA9IEFycmF5cy5hc0xpc3QoCisgICAgICAgICAgICAgICAgZy53aXRob3V0U3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNsYXNzKS5WKCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCksCisgICAgICAgICAgICAgICAgZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uYm90aEUoKSkuY3JlYXRlKCkpLlYoKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICBnLndpdGhvdXRTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpLlYoKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5ib3RoRSgpKS5jcmVhdGUoKSkuVigpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIGcud2l0aG91dFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5jbGFzcykuVigpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmJvdGhFKCkpLmNyZWF0ZSgpKS5WKCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCksCisgICAgICAgICAgICAgICAgZy53aXRob3V0U3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNsYXNzKS5WKCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCksCisgICAgICAgICAgICAgICAgZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uYm90aEUoKSkuY3JlYXRlKCkpLlYoKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICBnLndpdGhvdXRTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MpLlYoKS5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKSwKKyAgICAgICAgICAgICAgICBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5ib3RoRSgpKS5jcmVhdGUoKSkuVigpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIGcud2l0aG91dFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5jbGFzcykuVigpLmFzQWRtaW4oKS5nZXRHcmVtbGluTGFuZygpLAorICAgICAgICAgICAgICAgIGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmJvdGhFKCkpLmNyZWF0ZSgpKS5WKCkuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCkKICAgICAgICAgKS5pdGVyYXRvcigpOwogCi0gICAgICAgIHB1YmxpYyBCeXRlY29kZSBnZXQoKSB7CisgICAgICAgIHB1YmxpYyBHcmVtbGluTGFuZyBnZXQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbXV0YXRpbmdCeXRlY29kZXMubmV4dCgpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL0Fic3RyYWN0R3JlbWxpblNlcnZlckNoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL0Fic3RyYWN0R3JlbWxpblNlcnZlckNoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IDI3YWJjNWIuLmMzZmVhN2MgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9BYnN0cmFjdEdyZW1saW5TZXJ2ZXJDaGFubmVsaXplckludGVncmF0ZVRlc3QuamF2YQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvQWJzdHJhY3RHcmVtbGluU2VydmVyQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKIAogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jb25uLnNzbC5Ob29wSG9zdG5hbWVWZXJpZmllcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5BdXRoUHJvcGVydGllczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5BYnN0cmFjdEdyZW1saW5TZXJ2ZXJJbnRlZ3JhdGlvblRlc3Q7CkBAIC0zOSw2ICszOCw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuY2xpZW50LkNsb3NlYWJsZUh0dHBDbGllbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmltcGwuY29ubi5Qb29saW5nSHR0cENsaWVudENvbm5lY3Rpb25NYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC51dGlsLkVudGl0eVV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTQ4LDcgKzQ4LDYgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5BdXRoUHJvcGVydGllcy5Qcm9wZXJ0eTsKIAogYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RHcmVtbGluU2VydmVyQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKIApAQCAtNTYsMTEgKzU1LDcgQEAKICAgICBwcml2YXRlIGZpbmFsIEJhc2U2NC5FbmNvZGVyIGVuY29kZXIgPSBCYXNlNjQuZ2V0VXJsRW5jb2RlcigpOwogCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUCA9ICJodHRwIjsKLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBXUyA9ICJ3cyI7CiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUFMgPSAiaHR0cHMiOwotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFdTUyA9ICJ3c3MiOwotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFdTX0FORF9IVFRQID0gIndzQW5kSHR0cCI7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgV1NTX0FORF9IVFRQUyA9ICJ3c3NBbmRIdHRwcyI7CiAKICAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFByb3RvY29sKCk7CiAgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRTZWN1cmVQcm90b2NvbCgpOwpAQCAtMTA4LDcgKzEwMyw3IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENvbWJpbmVkVGVzdENsaWVudCBjbGllbnQgPSAgbmV3IENvbWJpbmVkVGVzdENsaWVudChnZXRQcm90b2NvbCgpKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0KCIyKzIiLCA0KTsKKyAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0KCJnLmluamVjdCg0KSIsIDQpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xpZW50LmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTExOCw3ICsxMTMsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFdvcmtXaXRoU1NMKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIENvbWJpbmVkVGVzdENsaWVudCBjbGllbnQgPSAgbmV3IENvbWJpbmVkVGVzdENsaWVudChnZXRTZWN1cmVQcm90b2NvbCgpKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0KCIyKzIiLCA0KTsKKyAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0KCJnLmluamVjdCg0KSIsIDQpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgY2xpZW50LmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTEyOCwxNCArMTIzLDE0IEBACiAgICAgcHVibGljIHZvaWQgc2hvdWxkV29ya1dpdGhBdXRoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIENvbWJpbmVkVGVzdENsaWVudCBjbGllbnQgPSAgbmV3IENvbWJpbmVkVGVzdENsaWVudChnZXRQcm90b2NvbCgpKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0VW5hdXRob3JpemVkKCIyKzIiLCAic3RlcGhlbiIsICJub3RwYXNzd29yZCIpOworICAgICAgICAgICAgY2xpZW50LnNlbmRBbmRBc3NlcnRVbmF1dGhvcml6ZWQoImcuaW5qZWN0KDQpIiwgInN0ZXBoZW4iLCAibm90cGFzc3dvcmQiKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpOwogICAgICAgICB9CiAKICAgICAgICAgY2xpZW50ID0gbmV3IENvbWJpbmVkVGVzdENsaWVudChnZXRQcm90b2NvbCgpKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0KCIyKzIiLCA0LCAic3RlcGhlbiIsICJwYXNzd29yZCIpOworICAgICAgICAgICAgY2xpZW50LnNlbmRBbmRBc3NlcnQoImcuaW5qZWN0KDQpIiwgNCwgInN0ZXBoZW4iLCAicGFzc3dvcmQiKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpOwogICAgICAgICB9CkBAIC0xNDMsNyArMTM4LDcgQEAKICAgICAgICAgY2xpZW50ID0gbmV3IENvbWJpbmVkVGVzdENsaWVudChnZXRQcm90b2NvbCgpKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIEV4cGVjdCBleGNlcHRpb24gd2hlbiB0cnkgYWdhaW4gaWYgdGhlIHNlcnZlciBwaXBlbGluZSBpcyBjb3JyZWN0Ci0gICAgICAgICAgICBjbGllbnQuc2VuZEFuZEFzc2VydFVuYXV0aG9yaXplZCgiMisyIiwgInN0ZXBoZW4iLCAibm90cGFzc3dvcmQiKTsKKyAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0VW5hdXRob3JpemVkKCJnLmluamVjdCg0KSIsICJzdGVwaGVuIiwgIm5vdHBhc3N3b3JkIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbGllbnQuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMTUzLDE0ICsxNDgsMTQgQEAKICAgICBwdWJsaWMgdm9pZCBzaG91bGRXb3JrV2l0aFNTTEFuZEF1dGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgQ29tYmluZWRUZXN0Q2xpZW50IGNsaWVudCA9ICBuZXcgQ29tYmluZWRUZXN0Q2xpZW50KGdldFNlY3VyZVByb3RvY29sKCkpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgY2xpZW50LnNlbmRBbmRBc3NlcnRVbmF1dGhvcml6ZWQoIjIrMiIsICJzdGVwaGVuIiwgImluY29ycmVjdC1wYXNzd29yZCIpOworICAgICAgICAgICAgY2xpZW50LnNlbmRBbmRBc3NlcnRVbmF1dGhvcml6ZWQoImcuaW5qZWN0KDQpIiwgInN0ZXBoZW4iLCAiaW5jb3JyZWN0LXBhc3N3b3JkIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbGllbnQuY2xvc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIGNsaWVudCA9IG5ldyBDb21iaW5lZFRlc3RDbGllbnQoZ2V0U2VjdXJlUHJvdG9jb2woKSk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjbGllbnQuc2VuZEFuZEFzc2VydCgiMisyIiwgNCwgInN0ZXBoZW4iLCAicGFzc3dvcmQiKTsKKyAgICAgICAgICAgIGNsaWVudC5zZW5kQW5kQXNzZXJ0KCJnLmluamVjdCg0KSIsIDQsICJzdGVwaGVuIiwgInBhc3N3b3JkIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbGllbnQuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMTY4LDcgKzE2Myw3IEBACiAgICAgICAgIGNsaWVudCA9IG5ldyBDb21iaW5lZFRlc3RDbGllbnQoZ2V0U2VjdXJlUHJvdG9jb2woKSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBFeHBlY3QgZXhjZXB0aW9uIHdoZW4gdHJ5IGFnYWluIGlmIHRoZSBzZXJ2ZXIgcGlwZWxpbmUgaXMgY29ycmVjdAotICAgICAgICAgICAgY2xpZW50LnNlbmRBbmRBc3NlcnRVbmF1dGhvcml6ZWQoIjIrMiIsICJzdGVwaGVuIiwgImluY29ycmVjdC1wYXNzd29yZCIpOworICAgICAgICAgICAgY2xpZW50LnNlbmRBbmRBc3NlcnRVbmF1dGhvcml6ZWQoImcuaW5qZWN0KDQpIiwgInN0ZXBoZW4iLCAiaW5jb3JyZWN0LXBhc3N3b3JkIik7CiAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICBjbGllbnQuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMTc2LDkgKzE3MSw2IEBACiAKICAgICBwdWJsaWMgY2xhc3MgQ29tYmluZWRUZXN0Q2xpZW50IHsKICAgICAgICAgcHJpdmF0ZSBDbG9zZWFibGVIdHRwQ2xpZW50IGh0dHBDbGllbnQgPSBudWxsOwotICAgICAgICBwcml2YXRlIENsdXN0ZXIgd3NDbHVzdGVyID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBDbHVzdGVyLkJ1aWxkZXIgd3NCdWlsZGVyID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBDbGllbnQgd3NDbGllbnQgPSBudWxsOwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gc2VjdXJlID0gZmFsc2U7CiAKIApAQCAtMTkxLDIyICsxODMsNiBAQAogICAgICAgICAgICAgICAgICAgICBodHRwQ2xpZW50ID0gY3JlYXRlU3NsSHR0cENsaWVudCgpOwogICAgICAgICAgICAgICAgICAgICBzZWN1cmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdTOgotICAgICAgICAgICAgICAgICAgICB0aGlzLndzQnVpbGRlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1NTOgotICAgICAgICAgICAgICAgICAgICB0aGlzLndzQnVpbGRlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNlY3VyZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgV1NfQU5EX0hUVFA6Ci0gICAgICAgICAgICAgICAgICAgIGh0dHBDbGllbnQgPSBIdHRwQ2xpZW50cy5jcmVhdGVEZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMud3NCdWlsZGVyID0gVGVzdENsaWVudEZhY3RvcnkuYnVpbGQoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXU1NfQU5EX0hUVFBTOgotICAgICAgICAgICAgICAgICAgICBodHRwQ2xpZW50ID0gY3JlYXRlU3NsSHR0cENsaWVudCgpOwotICAgICAgICAgICAgICAgICAgICBzZWN1cmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB0aGlzLndzQnVpbGRlciA9IFRlc3RDbGllbnRGYWN0b3J5LmJ1aWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTIzNiw5ICsyMTIsNiBAQAogICAgICAgICAgICAgaWYgKGh0dHBDbGllbnQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGh0dHBDbGllbnQuY2xvc2UoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3c0NsdXN0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHdzQ2x1c3Rlci5jbG9zZSgpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgc2VuZEFuZEFzc2VydFVuYXV0aG9yaXplZChmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgU3RyaW5nIHVzZXJuYW1lLCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMjQ4LDE1ICsyMjEsNiBAQAogICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDAxLCByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod3NCdWlsZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzZXRXc0NsaWVudCh1c2VybmFtZSwgcGFzc3dvcmQpOwotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHdzQ2xpZW50LnN1Ym1pdChncmVtbGluKS5hbGwoKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCBhdXRob3JpemUgb24gaW5jb3JyZWN0IGF1dGggY3JlZHMiKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiVXNlcm5hbWUgYW5kL29yIHBhc3N3b3JkIGFyZSBpbmNvcnJlY3QiLCBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBzZW5kQW5kQXNzZXJ0KGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBPYmplY3QgcmVzdWx0LCBmaW5hbCBTdHJpbmcgdXNlcm5hbWUsIGZpbmFsIFN0cmluZyBwYXNzd29yZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0yNjcsMjcgKzIzMSw5IEBACiAgICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXBwbGljYXRpb24vanNvbiIsIHJlc3BvbnNlLmdldEVudGl0eSgpLmdldENvbnRlbnRUeXBlKCkuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gRW50aXR5VXRpbHMudG9TdHJpbmcocmVzcG9uc2UuZ2V0RW50aXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMocmVzdWx0LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KCJkYXRhIikuZ2V0KCJAdmFsdWUiKS5nZXQoMCkuZ2V0KCJAdmFsdWUiKS5pbnRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3VsdCwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSkuZ2V0KCJAdmFsdWUiKS5nZXQoMCkuZ2V0KCJAdmFsdWUiKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod3NCdWlsZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzZXRXc0NsaWVudCh1c2VybmFtZSwgcGFzc3dvcmQpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhyZXN1bHQsIHdzQ2xpZW50LnN1Ym1pdChncmVtbGluKS5hbGwoKS5nZXQoKS5nZXQoMCkuZ2V0SW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHNldFdzQ2xpZW50KGZpbmFsIFN0cmluZyB1c2VybmFtZSwgZmluYWwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICAgICAgICBpZiAodXNlcm5hbWUgIT0gbnVsbCAmJiBwYXNzd29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQXV0aFByb3BlcnRpZXMgYXV0aFByb3BzID0gbmV3IEF1dGhQcm9wZXJ0aWVzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFByb3BlcnR5LlVTRVJOQU1FLCB1c2VybmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoKFByb3BlcnR5LlBBU1NXT1JELCBwYXNzd29yZCk7Ci0KLSAgICAgICAgICAgICAgICB3c0NsdXN0ZXIgPSB3c0J1aWxkZXIuZW5hYmxlU3NsKHNlY3VyZSkuc3NsU2tpcENlcnRWYWxpZGF0aW9uKHRydWUpLmF1dGhQcm9wZXJ0aWVzKGF1dGhQcm9wcykuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgd3NDbGllbnQgPSB3c0NsdXN0ZXIuY29ubmVjdCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3c0NsdXN0ZXIgPSB3c0J1aWxkZXIuZW5hYmxlU3NsKHNlY3VyZSkuc3NsU2tpcENlcnRWYWxpZGF0aW9uKHRydWUpLmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIHdzQ2xpZW50ID0gd3NDbHVzdGVyLmNvbm5lY3QoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgSHR0cFBvc3QgY3JlYXRlUG9zdChmaW5hbCBTdHJpbmcgZ3JlbWxpbiwgZmluYWwgU3RyaW5nIHVzZXJuYW1lLCBmaW5hbCBTdHJpbmcgcGFzc3dvcmQpIHsKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9IdHRwQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvSHR0cENoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IDI1ODlhZjYuLjc0OTI3MmIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9IdHRwQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL0h0dHBDaGFubmVsaXplckludGVncmF0ZVRlc3QuamF2YQpAQCAtMjIsNyArMjIsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguU2ltcGxlQXV0aGVudGljYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLkh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIGltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwogCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIGZpbmFsIFNldHRpbmdzLkF1dGhlbnRpY2F0aW9uU2V0dGluZ3MgYXV0aFNldHRpbmdzID0gbmV3IFNldHRpbmdzLkF1dGhlbnRpY2F0aW9uU2V0dGluZ3MoKTsKICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGF1dGhDb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdG9yID0gU2ltcGxlQXV0aGVudGljYXRvci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdGlvbkhhbmRsZXIgPSBTYXNsQW5kSHR0cEJhc2ljQXV0aGVudGljYXRpb25IYW5kbGVyLmNsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgYXV0aFNldHRpbmdzLmF1dGhlbnRpY2F0aW9uSGFuZGxlciA9IEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcy5nZXROYW1lKCk7CiAgICAgICAgIGF1dGhDb25maWcucHV0KFNpbXBsZUF1dGhlbnRpY2F0b3IuQ09ORklHX0NSRURFTlRJQUxTX0RCLCAiY29uZi90aW5rZXJncmFwaC1jcmVkZW50aWFscy5wcm9wZXJ0aWVzIik7CiAgICAgICAgIGF1dGhTZXR0aW5ncy5jb25maWcgPSBhdXRoQ29uZmlnOwogCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvVW5pZmllZENoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1VuaWZpZWRDaGFubmVsaXplckludGVncmF0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZlOTMzZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvVW5pZmllZENoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguU2ltcGxlQXV0aGVudGljYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlNhc2xBbmRIdHRwQmFzaWNBdXRoZW50aWNhdGlvbkhhbmRsZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1wdWJsaWMgY2xhc3MgVW5pZmllZENoYW5uZWxpemVySW50ZWdyYXRlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblNlcnZlckNoYW5uZWxpemVySW50ZWdyYXRlVGVzdCB7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb3RvY29sKCkgewotICAgICAgICByZXR1cm4gV1NfQU5EX0hUVFA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRTZWN1cmVQcm90b2NvbCgpIHsKLSAgICAgICAgcmV0dXJuIFdTU19BTkRfSFRUUFM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRDaGFubmVsaXplcigpIHsKLSAgICAgICAgcmV0dXJuIFVuaWZpZWRDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldHRpbmdzLkF1dGhlbnRpY2F0aW9uU2V0dGluZ3MgZ2V0QXV0aFNldHRpbmdzKCkgewotICAgICAgICBmaW5hbCBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzIGF1dGhTZXR0aW5ncyA9IG5ldyBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBhdXRoQ29uZmlnID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRvciA9IFNpbXBsZUF1dGhlbnRpY2F0b3IuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRpb25IYW5kbGVyID0gU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgIGF1dGhDb25maWcucHV0KFNpbXBsZUF1dGhlbnRpY2F0b3IuQ09ORklHX0NSRURFTlRJQUxTX0RCLCAiY29uZi90aW5rZXJncmFwaC1jcmVkZW50aWFscy5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5jb25maWcgPSBhdXRoQ29uZmlnOwotCi0gICAgICAgIHJldHVybiBhdXRoU2V0dGluZ3M7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvVW5pZmllZFRlc3RDaGFubmVsaXplci5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1VuaWZpZWRUZXN0Q2hhbm5lbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQyZGRjYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvVW5pZmllZFRlc3RDaGFubmVsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwotCi0vKioKLSAqIEEgd3JhcHBlciBhcm91bmQgVW5pZmllZENoYW5uZWxpemVyIHdoaWNoIHNhdmVzIGFuZCBleHBvc2VzIHRoZSBDaGFubmVsSGFuZGxlckNvbnRleHQgZm9yIHRlc3RpbmcgcHVycG9zZXMKLSAqLwotcHVibGljIGNsYXNzIFVuaWZpZWRUZXN0Q2hhbm5lbGl6ZXIgZXh0ZW5kcyBVbmlmaWVkQ2hhbm5lbGl6ZXIgaW1wbGVtZW50cyBUZXN0Q2hhbm5lbGl6ZXIgewotCi0gICAgZmluYWwgQ29udGV4dEhhbmRsZXIgY29udGV4dEhhbmRsZXI7Ci0KLSAgICBwdWJsaWMgVW5pZmllZFRlc3RDaGFubmVsaXplcigpIHsKLSAgICAgICAgY29udGV4dEhhbmRsZXIgPSBuZXcgQ29udGV4dEhhbmRsZXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjb25maWd1cmUoZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0gICAgICAgIHN1cGVyLmNvbmZpZ3VyZShwaXBlbGluZSk7Ci0gICAgICAgIHBpcGVsaW5lLmFkZEZpcnN0KGNvbnRleHRIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGdldE1vc3RSZWNlbnRDaGFubmVsSGFuZGxlckNvbnRleHQoKSB7Ci0gICAgICAgIHJldHVybiBjb250ZXh0SGFuZGxlci5nZXRNb3N0UmVjZW50Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKSB7Ci0gICAgICAgIGNvbnRleHRIYW5kbGVyLnJlc2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1dlYlNvY2tldENoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1dlYlNvY2tldENoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDIzMjk1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvY2hhbm5lbC9XZWJTb2NrZXRDaGFubmVsaXplckludGVncmF0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmNoYW5uZWw7Ci0KLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmF1dGguU2ltcGxlQXV0aGVudGljYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLXB1YmxpYyBjbGFzcyBXZWJTb2NrZXRDaGFubmVsaXplckludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJDaGFubmVsaXplckludGVncmF0ZVRlc3QgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKLSAgICAgICAgcmV0dXJuIFdTOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlUHJvdG9jb2woKSB7Ci0gICAgICAgIHJldHVybiBXU1M7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRDaGFubmVsaXplcigpIHsKLSAgICAgICAgcmV0dXJuIFdlYlNvY2tldENoYW5uZWxpemVyLmNsYXNzLmdldE5hbWUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0dGluZ3MuQXV0aGVudGljYXRpb25TZXR0aW5ncyBnZXRBdXRoU2V0dGluZ3MoKSB7Ci0gICAgICAgIGZpbmFsIFNldHRpbmdzLkF1dGhlbnRpY2F0aW9uU2V0dGluZ3MgYXV0aFNldHRpbmdzID0gbmV3IFNldHRpbmdzLkF1dGhlbnRpY2F0aW9uU2V0dGluZ3MoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGF1dGhDb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5hdXRoZW50aWNhdG9yID0gU2ltcGxlQXV0aGVudGljYXRvci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgIGF1dGhDb25maWcucHV0KFNpbXBsZUF1dGhlbnRpY2F0b3IuQ09ORklHX0NSRURFTlRJQUxTX0RCLCAiY29uZi90aW5rZXJncmFwaC1jcmVkZW50aWFscy5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5jb25maWcgPSBhdXRoQ29uZmlnOwotCi0gICAgICAgIHJldHVybiBhdXRoU2V0dGluZ3M7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV2ViU29ja2V0VGVzdENoYW5uZWxpemVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV2ViU29ja2V0VGVzdENoYW5uZWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZTY0M2EuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1dlYlNvY2tldFRlc3RDaGFubmVsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwotCi0vKioKLSAqIEEgd3JhcHBlciBhcm91bmQgV2ViU29ja2V0Q2hhbm5lbGl6ZXIgd2hpY2ggc2F2ZXMgYW5kIGV4cG9zZXMgdGhlIENoYW5uZWxIYW5kbGVyQ29udGV4dCBmb3IgdGVzdGluZyBwdXJwb3NlcwotICovCi1wdWJsaWMgY2xhc3MgV2ViU29ja2V0VGVzdENoYW5uZWxpemVyIGV4dGVuZHMgV2ViU29ja2V0Q2hhbm5lbGl6ZXIgaW1wbGVtZW50cyBUZXN0Q2hhbm5lbGl6ZXIgewotCi0gICAgZmluYWwgQ29udGV4dEhhbmRsZXIgY29udGV4dEhhbmRsZXI7Ci0KLSAgICBwdWJsaWMgV2ViU29ja2V0VGVzdENoYW5uZWxpemVyKCkgewotICAgICAgICBjb250ZXh0SGFuZGxlciA9IG5ldyBDb250ZXh0SGFuZGxlcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBDaGFubmVsUGlwZWxpbmUgcGlwZWxpbmUpIHsKLSAgICAgICAgc3VwZXIuY29uZmlndXJlKHBpcGVsaW5lKTsKLSAgICAgICAgcGlwZWxpbmUuYWRkRmlyc3QoY29udGV4dEhhbmRsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBDaGFubmVsSGFuZGxlckNvbnRleHQgZ2V0TW9zdFJlY2VudENoYW5uZWxIYW5kbGVyQ29udGV4dCgpIHsKLSAgICAgICAgcmV0dXJuIGNvbnRleHRIYW5kbGVyLmdldE1vc3RSZWNlbnRDaGFubmVsSGFuZGxlckNvbnRleHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNldENoYW5uZWxIYW5kbGVyQ29udGV4dCgpIHsKLSAgICAgICAgY29udGV4dEhhbmRsZXIucmVzZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV3NBbmRIdHRwQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV3NBbmRIdHRwQ2hhbm5lbGl6ZXJJbnRlZ3JhdGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2M2QyMTMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1dzQW5kSHR0cENoYW5uZWxpemVySW50ZWdyYXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKLQotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuYXV0aC5TaW1wbGVBdXRoZW50aWNhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLXB1YmxpYyBjbGFzcyBXc0FuZEh0dHBDaGFubmVsaXplckludGVncmF0ZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5TZXJ2ZXJDaGFubmVsaXplckludGVncmF0ZVRlc3QgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm90b2NvbCgpIHsKLSAgICAgICAgcmV0dXJuIFdTX0FORF9IVFRQOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VjdXJlUHJvdG9jb2woKSB7Ci0gICAgICAgIHJldHVybiBXU1NfQU5EX0hUVFBTOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhbm5lbGl6ZXIoKSB7Ci0gICAgICAgIHJldHVybiBXc0FuZEh0dHBDaGFubmVsaXplci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldHRpbmdzLkF1dGhlbnRpY2F0aW9uU2V0dGluZ3MgZ2V0QXV0aFNldHRpbmdzKCkgewotICAgICAgICBmaW5hbCBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzIGF1dGhTZXR0aW5ncyA9IG5ldyBTZXR0aW5ncy5BdXRoZW50aWNhdGlvblNldHRpbmdzKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBhdXRoQ29uZmlnID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRvciA9IFNpbXBsZUF1dGhlbnRpY2F0b3IuY2xhc3MuZ2V0TmFtZSgpOwotICAgICAgICBhdXRoU2V0dGluZ3MuYXV0aGVudGljYXRpb25IYW5kbGVyID0gU2FzbEFuZEh0dHBCYXNpY0F1dGhlbnRpY2F0aW9uSGFuZGxlci5jbGFzcy5nZXROYW1lKCk7Ci0gICAgICAgIGF1dGhDb25maWcucHV0KFNpbXBsZUF1dGhlbnRpY2F0b3IuQ09ORklHX0NSRURFTlRJQUxTX0RCLCAiY29uZi90aW5rZXJncmFwaC1jcmVkZW50aWFscy5wcm9wZXJ0aWVzIik7Ci0gICAgICAgIGF1dGhTZXR0aW5ncy5jb25maWcgPSBhdXRoQ29uZmlnOwotCi0gICAgICAgIHJldHVybiBhdXRoU2V0dGluZ3M7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV3NBbmRIdHRwVGVzdENoYW5uZWxpemVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2NoYW5uZWwvV3NBbmRIdHRwVGVzdENoYW5uZWxpemVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OGY2ZjMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9jaGFubmVsL1dzQW5kSHR0cFRlc3RDaGFubmVsaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuY2hhbm5lbDsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwotCi0vKioKLSAqIEEgd3JhcHBlciBhcm91bmQgVW5pZmllZENoYW5uZWxpemVyIHdoaWNoIHNhdmVzIGFuZCBleHBvc2VzIHRoZSBDaGFubmVsSGFuZGxlckNvbnRleHQgZm9yIHRlc3RpbmcgcHVycG9zZXMKLSAqLwotcHVibGljIGNsYXNzIFdzQW5kSHR0cFRlc3RDaGFubmVsaXplciBleHRlbmRzIFdzQW5kSHR0cENoYW5uZWxpemVyIGltcGxlbWVudHMgVGVzdENoYW5uZWxpemVyIHsKLQotICAgIGZpbmFsIENvbnRleHRIYW5kbGVyIGNvbnRleHRIYW5kbGVyOwotCi0gICAgcHVibGljIFdzQW5kSHR0cFRlc3RDaGFubmVsaXplcigpIHsKLSAgICAgICAgY29udGV4dEhhbmRsZXIgPSBuZXcgQ29udGV4dEhhbmRsZXIoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjb25maWd1cmUoZmluYWwgQ2hhbm5lbFBpcGVsaW5lIHBpcGVsaW5lKSB7Ci0gICAgICAgIHN1cGVyLmNvbmZpZ3VyZShwaXBlbGluZSk7Ci0gICAgICAgIHBpcGVsaW5lLmFkZEZpcnN0KGNvbnRleHRIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2hhbm5lbEhhbmRsZXJDb250ZXh0IGdldE1vc3RSZWNlbnRDaGFubmVsSGFuZGxlckNvbnRleHQoKSB7Ci0gICAgICAgIHJldHVybiBjb250ZXh0SGFuZGxlci5nZXRNb3N0UmVjZW50Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzZXRDaGFubmVsSGFuZGxlckNvbnRleHQoKSB7Ci0gICAgICAgIGNvbnRleHRIYW5kbGVyLnJlc2V0Q2hhbm5lbEhhbmRsZXJDb250ZXh0KCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXJUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4Y2M5NAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwQ29udGVudENvbXByZXNzaW9uSGFuZGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmVXRpbDsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5lbWJlZGRlZC5FbWJlZGRlZENoYW5uZWw7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRGdWxsSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0SHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRIdHRwSGVhZGVyczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRGVmYXVsdEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cENvbnRlbnQ7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJzOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2U7CitpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLkluZmxhdGVyOworCitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZC5FTVBUWV9CVUZGRVI7CitpbXBvcnQgc3RhdGljIGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9FTkNPRElORzsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJWYWx1ZXMuREVGTEFURTsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1cy5PSzsKK2ltcG9ydCBzdGF0aWMgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBWZXJzaW9uLkhUVFBfMV8xOworaW1wb3J0IHN0YXRpYyBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuTGFzdEh0dHBDb250ZW50LkVNUFRZX0xBU1RfQ09OVEVOVDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworcHVibGljIGNsYXNzIEh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyVGVzdCB7CisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RDb21wcmVzc0lmUmVzcG9uc2VEb2VzTm90Q29udGFpbkNvbnRlbnRFbmNvZGluZygpIHsKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIgY29tcHJlc3Npb25IYW5kbGVyID0gbmV3IEh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoY29tcHJlc3Npb25IYW5kbGVyKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBjb250ZW50ID0gdGVzdENoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgY29udGVudC53cml0ZUNoYXJTZXF1ZW5jZSgiYWJjIiwgQ2hhcnNldFV0aWwuVVRGXzgpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBPSywgY29udGVudCwgaGVhZGVycywgaGVhZGVycyk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVPdXRib3VuZChyZXNwb25zZSk7CisKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBhY3R1YWxSZXNwb25zZSA9IHRlc3RDaGFubmVsLnJlYWRPdXRib3VuZCgpOworCisgICAgICAgIGFzc2VydEZhbHNlKGFjdHVhbFJlc3BvbnNlLmhlYWRlcnMoKS5jb250YWlucyhDT05URU5UX0VOQ09ESU5HKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiYWJjIiwgYWN0dWFsUmVzcG9uc2UuY29udGVudCgpLnRvU3RyaW5nKENoYXJzZXRVdGlsLlVURl84KSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRDb21wcmVzc0lmUmVzcG9uc2VEb2VzQ29udGFpbkNvbnRlbnRFbmNvZGluZygpIHsKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIgY29tcHJlc3Npb25IYW5kbGVyID0gbmV3IEh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoY29tcHJlc3Npb25IYW5kbGVyKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBjb250ZW50ID0gdGVzdENoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgY29udGVudC53cml0ZUNoYXJTZXF1ZW5jZSgiYWFhIiwgQ2hhcnNldFV0aWwuVVRGXzgpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSByZXNwb25zZSA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXNwb25zZShIVFRQXzFfMSwgT0ssIGNvbnRlbnQsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVPdXRib3VuZChyZXNwb25zZSk7CisKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBhY3R1YWxSZXNwb25zZSA9IHRlc3RDaGFubmVsLnJlYWRPdXRib3VuZCgpOworICAgICAgICBhc3NlcnRUcnVlKGFjdHVhbFJlc3BvbnNlLmhlYWRlcnMoKS5jb250YWlucyhDT05URU5UX0VOQ09ESU5HKSk7CisKKyAgICAgICAgZmluYWwgYnl0ZVtdIGNvbnRlbnRCeXRlcyA9IG5ldyBieXRlW2FjdHVhbFJlc3BvbnNlLmNvbnRlbnQoKS5yZWFkYWJsZUJ5dGVzKCldOworICAgICAgICBhY3R1YWxSZXNwb25zZS5jb250ZW50KCkucmVhZEJ5dGVzKGNvbnRlbnRCeXRlcyk7CisgICAgICAgIGFzc2VydEFycmF5RXF1YWxzKG5ldyBieXRlW10gezB4NzgsIChieXRlKSAweDljLCAweDRiLCAweDRjLCAweDRjLCAweDQsIDB4MCwgMHgyLCAweDQ5LCAweDEsIDB4MjR9LCBjb250ZW50Qnl0ZXMpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ29tcHJlc3NMYXJnZUNodW5rKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIGludCBsYXJnZUFycmF5U2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CisgICAgICAgIGJ5dGVbXSBsYXJnZUFycmF5ID0gbmV3IGJ5dGVbbGFyZ2VBcnJheVNpemVdOworICAgICAgICBBcnJheXMuZmlsbChsYXJnZUFycmF5LCAoYnl0ZSkgMHg2NSk7CisKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIgY29tcHJlc3Npb25IYW5kbGVyID0gbmV3IEh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoY29tcHJlc3Npb25IYW5kbGVyKTsKKyAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgaGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKS5hZGQoQ09OVEVOVF9FTkNPRElORywgREVGTEFURSk7CisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2Ugb3V0Ym91bmQgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2UoSFRUUF8xXzEsIE9LLCBVbnBvb2xlZC53cmFwcGVkQnVmZmVyKGxhcmdlQXJyYXkpLCBoZWFkZXJzLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlT3V0Ym91bmQob3V0Ym91bmQpOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSB0ZXN0Q2hhbm5lbC5yZWFkT3V0Ym91bmQoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5oZWFkZXJzKCkuY29udGFpbnMoQ09OVEVOVF9FTkNPRElORykpOworICAgICAgICBmaW5hbCBieXRlW10gY29udGVudEJ5dGVzID0gbmV3IGJ5dGVbcmVzcG9uc2UuY29udGVudCgpLnJlYWRhYmxlQnl0ZXMoKV07CisgICAgICAgIHJlc3BvbnNlLmNvbnRlbnQoKS5yZWFkQnl0ZXMoY29udGVudEJ5dGVzKTsKKyAgICAgICAgcmVzcG9uc2UucmVsZWFzZSgpOworCisgICAgICAgIGZpbmFsIEluZmxhdGVyIGRlY29tcHJlc3NvciA9IG5ldyBJbmZsYXRlcigpOworICAgICAgICBkZWNvbXByZXNzb3Iuc2V0SW5wdXQoY29udGVudEJ5dGVzKTsKKyAgICAgICAgZmluYWwgYnl0ZVtdIGluZmxhdGVkQnl0ZXMgPSBuZXcgYnl0ZVtsYXJnZUFycmF5U2l6ZV07CisgICAgICAgIGRlY29tcHJlc3Nvci5pbmZsYXRlKGluZmxhdGVkQnl0ZXMpOworCisgICAgICAgIGFzc2VydFRydWUoZGVjb21wcmVzc29yLmZpbmlzaGVkKCkpOworICAgICAgICBkZWNvbXByZXNzb3IuZW5kKCk7CisKKyAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMobGFyZ2VBcnJheSwgaW5mbGF0ZWRCeXRlcyk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRDb21wcmVzc0NvbnRlbnRJbk11bHRpcGxlQ2h1bmtzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyIGNvbXByZXNzaW9uSGFuZGxlciA9IG5ldyBIdHRwQ29udGVudENvbXByZXNzaW9uSGFuZGxlcigpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKGNvbXByZXNzaW9uSGFuZGxlcik7CisKKyAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgaGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKS5hZGQoQ09OVEVOVF9FTkNPRElORywgREVGTEFURSk7CisgICAgICAgIGZpbmFsIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IG5ldyBEZWZhdWx0SHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBPSywgaGVhZGVycyk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBmaXJzdENodW5rID0gdGVzdENoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgZmlyc3RDaHVuay53cml0ZUNoYXJTZXF1ZW5jZSgiYWFhIiwgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgc2Vjb25kQ2h1bmsgPSB0ZXN0Q2hhbm5lbC5hbGxvYygpLmJ1ZmZlcigpOworICAgICAgICBzZWNvbmRDaHVuay53cml0ZUNoYXJTZXF1ZW5jZSgiYmJiIiwgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgdGhpcmRDaHVuayA9IHRlc3RDaGFubmVsLmFsbG9jKCkuYnVmZmVyKCk7CisgICAgICAgIHRoaXJkQ2h1bmsud3JpdGVDaGFyU2VxdWVuY2UoImNjYyIsIENoYXJzZXRVdGlsLlVURl84KTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZU91dGJvdW5kKHJlc3BvbnNlKTsKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVPdXRib3VuZChuZXcgRGVmYXVsdEh0dHBDb250ZW50KGZpcnN0Q2h1bmspKTsKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVPdXRib3VuZChuZXcgRGVmYXVsdEh0dHBDb250ZW50KHNlY29uZENodW5rKSk7CisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlT3V0Ym91bmQobmV3IERlZmF1bHRIdHRwQ29udGVudCh0aGlyZENodW5rKSk7CisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlT3V0Ym91bmQoRU1QVFlfTEFTVF9DT05URU5UKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoNSwgdGVzdENoYW5uZWwub3V0Ym91bmRNZXNzYWdlcygpLnNpemUoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwucmVhZE91dGJvdW5kKCk7IC8vIERpc2NhcmQgSHR0cFJlc3BvbnNlLgorCisgICAgICAgIEluZmxhdGVyIGRlY29tcHJlc3NvciA9IG5ldyBJbmZsYXRlcigpOworICAgICAgICBmaW5hbCBMaXN0PGJ5dGVbXT4gZGVjb21wcmVzc2VkQ2h1bmtzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgIEh0dHBDb250ZW50IGNvbnRlbnQgPSB0ZXN0Q2hhbm5lbC5yZWFkT3V0Ym91bmQoKTsKKyAgICAgICAgICAgIGRlY29tcHJlc3Nvci5zZXRJbnB1dChCeXRlQnVmVXRpbC5nZXRCeXRlcyhjb250ZW50LmNvbnRlbnQoKSkpOworICAgICAgICAgICAgYnl0ZVtdIGluZmxhdGVkQnl0ZXMgPSBuZXcgYnl0ZVszXTsKKyAgICAgICAgICAgIGRlY29tcHJlc3Nvci5pbmZsYXRlKGluZmxhdGVkQnl0ZXMpOworICAgICAgICAgICAgZGVjb21wcmVzc2VkQ2h1bmtzLmFkZChpbmZsYXRlZEJ5dGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydEVxdWFscygiYWFhIiwgbmV3IFN0cmluZyhkZWNvbXByZXNzZWRDaHVua3MuZ2V0KDApLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisgICAgICAgIGFzc2VydEVxdWFscygiYmJiIiwgbmV3IFN0cmluZyhkZWNvbXByZXNzZWRDaHVua3MuZ2V0KDEpLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisgICAgICAgIGFzc2VydEVxdWFscygiY2NjIiwgbmV3IFN0cmluZyhkZWNvbXByZXNzZWRDaHVua3MuZ2V0KDIpLCBTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVFbXB0eUZyYW1lQ29tcHJlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIgY29tcHJlc3Npb25IYW5kbGVyID0gbmV3IEh0dHBDb250ZW50Q29tcHJlc3Npb25IYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoY29tcHJlc3Npb25IYW5kbGVyKTsKKyAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgaGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKS5hZGQoQ09OVEVOVF9FTkNPRElORywgREVGTEFURSk7CisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVzcG9uc2Ugb3V0ID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlc3BvbnNlKEhUVFBfMV8xLCBPSywgRU1QVFlfQlVGRkVSLCBoZWFkZXJzLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlT3V0Ym91bmQob3V0KTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gdGVzdENoYW5uZWwucmVhZE91dGJvdW5kKCk7CisgICAgICAgIGFzc2VydFRydWUocmVzcG9uc2UuaGVhZGVycygpLmNvbnRhaW5zKENPTlRFTlRfRU5DT0RJTkcpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS5jb250ZW50KCkucmVhZGFibGVCeXRlcygpID4gMCk7CisgICAgICAgIC8vIFJlYWxseSBqdXN0IHRlc3RpbmcgdG8gbWFrZSBzdXJlIG5vIGV4Y2VwdGlvbnMgb2NjdXIuCisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVVbmNvbXByZXNzYWJsZUNodW5rKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIGludCBhcnJheVNpemUgPSAxMjg7CisgICAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbYXJyYXlTaXplXTsKKyAgICAgICAgbmV3IFJhbmRvbSgpLm5leHRCeXRlcyhkYXRhKTsKKworICAgICAgICBmaW5hbCBIdHRwQ29udGVudENvbXByZXNzaW9uSGFuZGxlciBjb21wcmVzc2lvbkhhbmRsZXIgPSBuZXcgSHR0cENvbnRlbnRDb21wcmVzc2lvbkhhbmRsZXIoKTsKKyAgICAgICAgZmluYWwgRW1iZWRkZWRDaGFubmVsIHRlc3RDaGFubmVsID0gbmV3IEVtYmVkZGVkQ2hhbm5lbChjb21wcmVzc2lvbkhhbmRsZXIpOworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpLmFkZChDT05URU5UX0VOQ09ESU5HLCBERUZMQVRFKTsKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBvdXRib3VuZCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXNwb25zZShIVFRQXzFfMSwgT0ssIFVucG9vbGVkLndyYXBwZWRCdWZmZXIoZGF0YSksIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVPdXRib3VuZChvdXRib3VuZCk7CisKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSByZXNwb25zZSA9IHRlc3RDaGFubmVsLnJlYWRPdXRib3VuZCgpOworICAgICAgICBhc3NlcnRUcnVlKHJlc3BvbnNlLmhlYWRlcnMoKS5jb250YWlucyhDT05URU5UX0VOQ09ESU5HKSk7CisgICAgICAgIGZpbmFsIGJ5dGVbXSBjb250ZW50Qnl0ZXMgPSBuZXcgYnl0ZVtyZXNwb25zZS5jb250ZW50KCkucmVhZGFibGVCeXRlcygpXTsKKyAgICAgICAgcmVzcG9uc2UuY29udGVudCgpLnJlYWRCeXRlcyhjb250ZW50Qnl0ZXMpOworICAgICAgICByZXNwb25zZS5yZWxlYXNlKCk7CisKKyAgICAgICAgZmluYWwgSW5mbGF0ZXIgZGVjb21wcmVzc29yID0gbmV3IEluZmxhdGVyKCk7CisgICAgICAgIGRlY29tcHJlc3Nvci5zZXRJbnB1dChjb250ZW50Qnl0ZXMpOworICAgICAgICBieXRlW10gaW5mbGF0ZWRCeXRlcyA9IG5ldyBieXRlW2FycmF5U2l6ZV07CisgICAgICAgIGRlY29tcHJlc3Nvci5pbmZsYXRlKGluZmxhdGVkQnl0ZXMpOworCisgICAgICAgIGFzc2VydFRydWUoZGVjb21wcmVzc29yLmZpbmlzaGVkKCkpOworICAgICAgICBkZWNvbXByZXNzb3IuZW5kKCk7CisKKyAgICAgICAgYXNzZXJ0QXJyYXlFcXVhbHMoZGF0YSwgaW5mbGF0ZWRCeXRlcyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBIYW5kbGVyVXRpbFRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwSGFuZGxlclV0aWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2Nzk4OGMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBIYW5kbGVyVXRpbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOwotCi1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRGdWxsSHR0cFJlcXVlc3Q7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRIdHRwSGVhZGVyczsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXM7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJzOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwTWV0aG9kOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwVmVyc2lvbjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuUXVlcnlTdHJpbmdFbmNvZGVyOwotaW1wb3J0IGlvLm5ldHR5LnV0aWwuQ2hhcnNldFV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJUb2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLnNhbWVQcm9wZXJ0eVZhbHVlc0FzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi1wdWJsaWMgY2xhc3MgSHR0cEhhbmRsZXJVdGlsVGVzdCB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOwotICAgIHByaXZhdGUgZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIGdyYXBoQmluYXJ5U2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICBwdWJsaWMgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzIGdyYXBoU09OU2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoKTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdoZW5JbmNvcnJlY3RTZXJpYWxpemVyVXNlZCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKFRva2Vucy5PUFNfQllURUNPREUpCi0gICAgICAgICAgICAgICAgLnByb2Nlc3NvcigidHJhdmVyc2FsIikKLSAgICAgICAgICAgICAgICAub3ZlcnJpZGVSZXF1ZXN0SWQoVVVJRC5yYW5kb21VVUlEKCkpCi0gICAgICAgICAgICAgICAgLmFkZEFyZyhUb2tlbnMuQVJHU19HUkVNTElOLCAiZy5WKCkiKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLQotICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IGdyYXBoU09OU2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkocmVxdWVzdCwgYWxsb2NhdG9yKTsKLQotICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOwotICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WMSk7Ci0KLSAgICAgICAgZmluYWwgRnVsbEh0dHBSZXF1ZXN0IGh0dHBSZXF1ZXN0ID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlcXVlc3QoSHR0cFZlcnNpb24uSFRUUF8xXzEsIEh0dHBNZXRob2QuUE9TVCwgInNvbWUgdXJpIiwKLSAgICAgICAgICAgICAgICBidWZmZXIsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXJzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBzZXJpYWxpemVycy5wdXQoU2VyVG9rZW5zLk1JTUVfR1JBUEhCSU5BUllfVjEsIGdyYXBoQmluYXJ5U2VyaWFsaXplcik7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEh0dHBIYW5kbGVyVXRpbC5nZXRSZXF1ZXN0TWVzc2FnZUZyb21IdHRwUmVxdWVzdChodHRwUmVxdWVzdCwgc2VyaWFsaXplcnMpOwotICAgICAgICAgICAgZmFpbCgiU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiBleHBlY3RlZCIpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiTWltZSB0eXBlIG1pc21hdGNoLiBWYWx1ZSBpbiBjb250ZW50LXR5cGUgaGVhZGVyIGlzIG5vdCBlcXVhbCBwYXlsb2FkIGhlYWRlci4iLCBleC5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb3JyZWN0bHlEZXNlcmlhbGl6ZVJlcXVlc3RNZXNzYWdlKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoVG9rZW5zLk9QU19CWVRFQ09ERSkKLSAgICAgICAgICAgICAgICAucHJvY2Vzc29yKCJ0cmF2ZXJzYWwiKQotICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChVVUlELnJhbmRvbVVVSUQoKSkKLSAgICAgICAgICAgICAgICAuYWRkQXJnKFRva2Vucy5BUkdTX0dSRU1MSU4sICJnLlYoKSIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gZ3JhcGhCaW5hcnlTZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShyZXF1ZXN0LCBhbGxvY2F0b3IpOwotCi0gICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCk7Ci0gICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUsIFNlclRva2Vucy5NSU1FX0dSQVBIQklOQVJZX1YxKTsKLQotICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5QT1NULCAic29tZSB1cmkiLAotICAgICAgICAgICAgICAgIGJ1ZmZlciwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHNlcmlhbGl6ZXJzLnB1dChTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WMSwgZ3JhcGhCaW5hcnlTZXJpYWxpemVyKTsKLQotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBIdHRwSGFuZGxlclV0aWwuZ2V0UmVxdWVzdE1lc3NhZ2VGcm9tSHR0cFJlcXVlc3QoaHR0cFJlcXVlc3QsIHNlcmlhbGl6ZXJzKTsKLSAgICAgICAgYXNzZXJ0VGhhdChyZXF1ZXN0LCBzYW1lUHJvcGVydHlWYWx1ZXNBcyhkZXNlcmlhbGl6ZWQpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvcnJlY3RseURlc2VyaWFsaXplR3JlbWxpbkZyb21Qb3N0UmVxdWVzdCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW4gPSAiZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpIjsKLSAgICAgICAgZmluYWwgVVVJRCByZXF1ZXN0SWQgPSBVVUlELnJhbmRvbVVVSUQoKTsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBhbGxvY2F0b3IuYnVmZmVyKCk7Ci0gICAgICAgIGJ1ZmZlci53cml0ZUNoYXJTZXF1ZW5jZSgieyBcImdyZW1saW5cIjogXCIiICsgZ3JlbWxpbiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiXCIsIFwicmVxdWVzdElkXCI6IFwiIiArIHJlcXVlc3RJZCArCi0gICAgICAgICAgICAgICAgICAgICAgICAiXCIsIFwibGFuZ3VhZ2VcIjogIFwiZ3JlbWxpbi1ncm9vdnlcIn0iLAotICAgICAgICAgICAgICAgIENoYXJzZXRVdGlsLlVURl84KTsKLQotICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOwotICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKLQotICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5QT1NULCAic29tZSB1cmkiLAotICAgICAgICAgICAgICAgIGJ1ZmZlciwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHNlcmlhbGl6ZXJzLnB1dChTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WMSwgZ3JhcGhCaW5hcnlTZXJpYWxpemVyKTsKLQotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBIdHRwSGFuZGxlclV0aWwuZ2V0UmVxdWVzdE1lc3NhZ2VGcm9tSHR0cFJlcXVlc3QoaHR0cFJlcXVlc3QsIHNlcmlhbGl6ZXJzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGdyZW1saW4sIGRlc2VyaWFsaXplZC5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3RJZCwgZGVzZXJpYWxpemVkLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJncmVtbGluLWdyb292eSIsIGRlc2VyaWFsaXplZC5nZXRBcmcoVG9rZW5zLkFSR1NfTEFOR1VBR0UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvcnJlY3RseURlc2VyaWFsaXplR3JlbWxpbkZyb21HZXRSZXF1ZXN0KCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbiA9ICJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykiOwotICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3RJZCA9IFVVSUQucmFuZG9tVVVJRCgpOwotICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IGFsbG9jYXRvci5idWZmZXIoKTsKLQotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gaGVhZGVyT3B0aW9ucyA9IEFycmF5cy5hc0xpc3QoIiIsIG51bGwsIFNlclRva2Vucy5NSU1FX0pTT04sICJzb21lIGludmFsaWQgdmFsdWUiKTsKLQotICAgICAgICBmb3IgKGZpbmFsIFN0cmluZyBjb250ZW50VHlwZVZhbHVlIDogaGVhZGVyT3B0aW9ucykgewotICAgICAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgaGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKTsKLSAgICAgICAgICAgIGlmIChjb250ZW50VHlwZVZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBjb250ZW50VHlwZVZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgUXVlcnlTdHJpbmdFbmNvZGVyIGVuY29kZXIgPSBuZXcgUXVlcnlTdHJpbmdFbmNvZGVyKCIvIik7Ci0gICAgICAgICAgICBlbmNvZGVyLmFkZFBhcmFtKCJncmVtbGluIiwgZ3JlbWxpbik7Ci0gICAgICAgICAgICBlbmNvZGVyLmFkZFBhcmFtKCJyZXF1ZXN0SWQiLCByZXF1ZXN0SWQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBlbmNvZGVyLmFkZFBhcmFtKCJsYW5ndWFnZSIsICJncmVtbGluLWdyb292eSIpOwotCi0gICAgICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5HRVQsCi0gICAgICAgICAgICAgICAgICAgIGVuY29kZXIudG9TdHJpbmcoKSwgYnVmZmVyLCBoZWFkZXJzLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkpOwotCi0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBNZXNzYWdlU2VyaWFsaXplcjw/Pj4gc2VyaWFsaXplcnMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBzZXJpYWxpemVycy5wdXQoU2VyVG9rZW5zLk1JTUVfR1JBUEhCSU5BUllfVjEsIGdyYXBoQmluYXJ5U2VyaWFsaXplcik7Ci0KLSAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplZCA9IEh0dHBIYW5kbGVyVXRpbC5nZXRSZXF1ZXN0TWVzc2FnZUZyb21IdHRwUmVxdWVzdChodHRwUmVxdWVzdCwgc2VyaWFsaXplcnMpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGdyZW1saW4sIGRlc2VyaWFsaXplZC5nZXRBcmdzKCkuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0SWQsIGRlc2VyaWFsaXplZC5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImdyZW1saW4tZ3Jvb3Z5IiwgZGVzZXJpYWxpemVkLmdldEFyZyhUb2tlbnMuQVJHU19MQU5HVUFHRSkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBSZXF1ZXN0SWRIYW5kbGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBSZXF1ZXN0SWRIYW5kbGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Y2NmNmIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL2hhbmRsZXIvSHR0cFJlcXVlc3RJZEhhbmRsZXJUZXN0LmphdmEKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuaGFuZGxlcjsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuZW1iZWRkZWQuRW1iZWRkZWRDaGFubmVsOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0RnVsbEh0dHBSZXF1ZXN0OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5EZWZhdWx0RnVsbEh0dHBSZXNwb25zZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5GdWxsSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwTWV0aG9kOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVxdWVzdDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBTZXJ2ZXJDb2RlYzsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFZlcnNpb247CitpbXBvcnQgaW8ubmV0dHkudXRpbC5DaGFyc2V0VXRpbDsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5VVUlEOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuSHR0cFJlcXVlc3RJZEhhbmRsZXIuUkVRVUVTVF9JRF9IRUFERVJfTkFNRTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitwdWJsaWMgY2xhc3MgSHR0cFJlcXVlc3RJZEhhbmRsZXJUZXN0IHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFByb3ZpZGVSZXF1ZXN0SWRUb0ZvbGxvd2luZ0hhbmRsZXJzKCkgeworICAgICAgICBmaW5hbCBIdHRwUmVxdWVzdElkSGFuZGxlciBodHRwUmVxdWVzdElkSGFuZGxlciA9IG5ldyBIdHRwUmVxdWVzdElkSGFuZGxlcigpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKG5ldyBIdHRwU2VydmVyQ29kZWMoKSwgaHR0cFJlcXVlc3RJZEhhbmRsZXIpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gdGVzdENoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLndyaXRlQ2hhclNlcXVlbmNlKCJhYmMiLCBDaGFyc2V0VXRpbC5VVEZfOCk7CisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIvZ3JlbWxpbiIsIGJ1ZmZlcik7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdENoYW5uZWwuZmluaXNoKCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpIGluc3RhbmNlb2YgSHR0cFJlcXVlc3QpOworICAgICAgICBhc3NlcnRUcnVlKHRlc3RDaGFubmVsLmF0dHIoU3RhdGVLZXkuUkVRVUVTVF9JRCkgIT0gbnVsbCk7CisKKyAgICAgICAgYnVmZmVyLnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEluamVjdFJlcXVlc3RJZEhlYWRlclRvT3V0Z29pbmdXcml0ZXMoKSB7CisgICAgICAgIGZpbmFsIEh0dHBSZXF1ZXN0SWRIYW5kbGVyIGh0dHBSZXF1ZXN0SWRIYW5kbGVyID0gbmV3IEh0dHBSZXF1ZXN0SWRIYW5kbGVyKCk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0U2VydmVyQ2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwoaHR0cFJlcXVlc3RJZEhhbmRsZXIpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gdGVzdFNlcnZlckNoYW5uZWwuYWxsb2MoKS5idWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLndyaXRlQ2hhclNlcXVlbmNlKCJhYmMiLCBDaGFyc2V0VXRpbC5VVEZfOCk7CisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIvZ3JlbWxpbiIsIGJ1ZmZlcik7CisKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXNwb25zZSBodHRwUmVzcG9uc2UgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVzcG9uc2UoSHR0cFZlcnNpb24uSFRUUF8xXzEsIEh0dHBSZXNwb25zZVN0YXR1cy5PSyk7CisKKyAgICAgICAgdGVzdFNlcnZlckNoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdFNlcnZlckNoYW5uZWwud3JpdGVPdXRib3VuZChodHRwUmVzcG9uc2UpOworICAgICAgICBmaW5hbCBIdHRwUmVzcG9uc2UgdXBkYXRlZFJlc3BvbnNlID0gdGVzdFNlcnZlckNoYW5uZWwucmVhZE91dGJvdW5kKCk7CisKKyAgICAgICAgdGVzdFNlcnZlckNoYW5uZWwuZmluaXNoKCk7CisgICAgICAgIGFzc2VydFRydWUodXBkYXRlZFJlc3BvbnNlLmhlYWRlcnMoKS5jb250YWlucyhSRVFVRVNUX0lEX0hFQURFUl9OQU1FKSk7CisgICAgICAgIFVVSUQuZnJvbVN0cmluZyh1cGRhdGVkUmVzcG9uc2UuaGVhZGVycygpLmdldChSRVFVRVNUX0lEX0hFQURFUl9OQU1FKSk7CisKKyAgICAgICAgaHR0cFJlcXVlc3QucmVsZWFzZSgpOworICAgICAgICBodHRwUmVzcG9uc2UucmVsZWFzZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyVGVzdC5qYXZhIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9oYW5kbGVyL0h0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NjY5OAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvaGFuZGxlci9IdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5lbWJlZGRlZC5FbWJlZGRlZENoYW5uZWw7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRGdWxsSHR0cFJlcXVlc3Q7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkRlZmF1bHRIdHRwSGVhZGVyczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuRnVsbEh0dHBSZXF1ZXN0OworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyTmFtZXM7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBIZWFkZXJzOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwTWV0aG9kOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwT2JqZWN0QWdncmVnYXRvcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFNlcnZlckNvZGVjOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwVmVyc2lvbjsKK2ltcG9ydCBpby5uZXR0eS51dGlsLkNoYXJzZXRVdGlsOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyVG9rZW5zOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6ZXJzOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuc2FtZVByb3BlcnR5VmFsdWVzQXM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworcHVibGljIGNsYXNzIEh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXJUZXN0IHsKKworICAgIHByaXZhdGUgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IgPSBCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7CisgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgZ3JhcGhCaW5hcnlTZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgIHB1YmxpYyBmaW5hbCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQgZ3JhcGhTT05TZXJpYWxpemVyID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPFN0cmluZywgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4+IHNlcmlhbGl6ZXJzID0gbmV3IEhhc2hNYXA8PigpOworICAgIHN0YXRpYyB7CisgICAgICAgIHNlcmlhbGl6ZXJzLnB1dChTZXJpYWxpemVycy5HUkFQSFNPTl9WNF9VTlRZUEVELmdldFZhbHVlKCksIFNlcmlhbGl6ZXJzLkdSQVBIU09OX1Y0X1VOVFlQRUQuc2ltcGxlSW5zdGFuY2UoKSk7CisgICAgICAgIHNlcmlhbGl6ZXJzLnB1dCgiYXBwbGljYXRpb24vanNvbiIsIFNlcmlhbGl6ZXJzLkdSQVBIU09OX1Y0X1VOVFlQRUQuc2ltcGxlSW5zdGFuY2UoKSk7CisgICAgICAgIHNlcmlhbGl6ZXJzLnB1dChTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5nZXRWYWx1ZSgpLCBTZXJpYWxpemVycy5HUkFQSFNPTl9WNC5zaW1wbGVJbnN0YW5jZSgpKTsKKyAgICAgICAgc2VyaWFsaXplcnMucHV0KFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LmdldFZhbHVlKCksIFNlcmlhbGl6ZXJzLkdSQVBIQklOQVJZX1Y0LnNpbXBsZUluc3RhbmNlKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRmFpbFdoZW5JbmNvcnJlY3RTZXJpYWxpemVyVXNlZCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZy5WKCkiKS5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IGdyYXBoU09OU2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkocmVxdWVzdCwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOworICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WNCk7CisKKyAgICAgICAgZmluYWwgRnVsbEh0dHBSZXF1ZXN0IGh0dHBSZXF1ZXN0ID0gbmV3IERlZmF1bHRGdWxsSHR0cFJlcXVlc3QoSHR0cFZlcnNpb24uSFRUUF8xXzEsIEh0dHBNZXRob2QuUE9TVCwgInNvbWUgdXJpIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdENoYW5uZWwuZmluaXNoKCk7CisKKyAgICAgICAgYXNzZXJ0TnVsbCh0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpKTsKKworICAgICAgICBCeXRlQnVmIG91dCA9IHRlc3RDaGFubmVsLnJlYWRPdXRib3VuZCgpOworICAgICAgICBhc3NlcnRUcnVlKG91dC50b1N0cmluZyhDaGFyc2V0VXRpbC5VVEZfOCkuY29udGFpbnMoIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSByZXF1ZXN0IHVzaW5nIikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ29ycmVjdGx5RGVzZXJpYWxpemVSZXF1ZXN0TWVzc2FnZSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZy5WKCkiKS5hZGRMYW5ndWFnZSgiZ3JlbWxpbi1sYW5nIikuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBncmFwaEJpbmFyeVNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KHJlcXVlc3QsIGFsbG9jYXRvcik7CisKKyAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgaGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKTsKKyAgICAgICAgaGVhZGVycy5hZGQoSHR0cEhlYWRlck5hbWVzLkNPTlRFTlRfVFlQRSwgU2VyVG9rZW5zLk1JTUVfR1JBUEhCSU5BUllfVjQpOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICJzb21lIHVyaSIsCisgICAgICAgICAgICAgICAgYnVmZmVyLCBoZWFkZXJzLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChodHRwUmVxdWVzdCk7CisgICAgICAgIHRlc3RDaGFubmVsLmZpbmlzaCgpOworCisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGRlY29kZWRSZXF1ZXN0TWVzc2FnZSA9IHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCk7CisgICAgICAgIGFzc2VydFRoYXQocmVxdWVzdC5nZXRGaWVsZHMoKSwgc2FtZVByb3BlcnR5VmFsdWVzQXMoZGVjb2RlZFJlcXVlc3RNZXNzYWdlLmdldEZpZWxkcygpKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0LmdldEdyZW1saW4oKSwgZGVjb2RlZFJlcXVlc3RNZXNzYWdlLmdldEdyZW1saW4oKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRDb3JyZWN0bHlEZXNlcmlhbGl6ZUdyZW1saW5Gcm9tUG9zdFJlcXVlc3QoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXIgcmVxdWVzdE1lc3NhZ2VEZWNvZGVyID0gbmV3IEh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXIoc2VyaWFsaXplcnMpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKG5ldyBIdHRwU2VydmVyQ29kZWMoKSwgbmV3IEh0dHBPYmplY3RBZ2dyZWdhdG9yKEludGVnZXIuTUFYX1ZBTFVFKSwgcmVxdWVzdE1lc3NhZ2VEZWNvZGVyKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgZ3JlbWxpbiA9ICJnLlYoKS5oYXNMYWJlbCgncGVyc29uJykiOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IGFsbG9jYXRvci5idWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLndyaXRlQ2hhclNlcXVlbmNlKCJ7IFwiZ3JlbWxpblwiOiBcIiIgKyBncmVtbGluICsKKyAgICAgICAgICAgICAgICAgICAgICAgICJcIiwgXCJsYW5ndWFnZVwiOiAgXCJncmVtbGluLWdyb292eVwifSIsCisgICAgICAgICAgICAgICAgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCk7CisgICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT04pOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICJzb21lIHVyaSIsCisgICAgICAgICAgICAgICAgYnVmZmVyLCBoZWFkZXJzLCBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCkpOworCisgICAgICAgIHRlc3RDaGFubmVsLndyaXRlSW5ib3VuZChodHRwUmVxdWVzdCk7CisgICAgICAgIHRlc3RDaGFubmVsLmZpbmlzaCgpOworCisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGRlY29kZWRSZXF1ZXN0TWVzc2FnZSA9IHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhncmVtbGluLCBkZWNvZGVkUmVxdWVzdE1lc3NhZ2UuZ2V0R3JlbWxpbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJncmVtbGluLWdyb292eSIsIGRlY29kZWRSZXF1ZXN0TWVzc2FnZS5nZXRGaWVsZChUb2tlbnMuQVJHU19MQU5HVUFHRSkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkQ29ycmVjdGx5RGVzZXJpYWxpemVHcmVtbGluRnJvbVBvc3RSZXF1ZXN0V2l0aEFsbFNjcmlwdEZpZWxkc1NldCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluID0gImcuVih4KSI7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gYWxsb2NhdG9yLmJ1ZmZlcigpOworICAgICAgICBidWZmZXIud3JpdGVDaGFyU2VxdWVuY2UoInsgXCJncmVtbGluXCI6IFwiIiArIGdyZW1saW4gKworICAgICAgICAgICAgICAgICAgICAgICAgIlwiLCBcImJpbmRpbmdzXCI6e1wieFwiOlwiMlwifSIgKworICAgICAgICAgICAgICAgICAgICAgICAgIiwgXCJsYW5ndWFnZVwiOiAgXCJncmVtbGluLWdyb292eVwifSIsCisgICAgICAgICAgICAgICAgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCk7CisgICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT04pOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIiLAorICAgICAgICAgICAgICAgIGJ1ZmZlciwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQoaHR0cFJlcXVlc3QpOworICAgICAgICB0ZXN0Q2hhbm5lbC5maW5pc2goKTsKKworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBkZWNvZGVkUmVxdWVzdE1lc3NhZ2UgPSB0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoZ3JlbWxpbiwgZGVjb2RlZFJlcXVlc3RNZXNzYWdlLmdldEdyZW1saW4oKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiZ3JlbWxpbi1ncm9vdnkiLCBkZWNvZGVkUmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGQoVG9rZW5zLkFSR1NfTEFOR1VBR0UpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgKChNYXApZGVjb2RlZFJlcXVlc3RNZXNzYWdlLmdldEZpZWxkKFRva2Vucy5BUkdTX0JJTkRJTkdTKSkuZ2V0KCJ4IikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkRXJyb3JPbkJhZFJlcXVlc3RXaXRoTWFsZm9ybWVkSnNvbigpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluID0gImcuVih4KSI7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gYWxsb2NhdG9yLmJ1ZmZlcigpOworICAgICAgICBidWZmZXIud3JpdGVDaGFyU2VxdWVuY2UoInsgXCJncmVtbGluXCI6IFwiIiArIGdyZW1saW4gKworICAgICAgICAgICAgICAgICAgICAgICAgIlwiIFwibGFuZ3VhZ2VcIjogIFwiZ3JlbWxpbi1ncm9vdnlcIn0iLAorICAgICAgICAgICAgICAgIENoYXJzZXRVdGlsLlVURl84KTsKKworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOworICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5QT1NULCAiIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdENoYW5uZWwuZmluaXNoKCk7CisKKyAgICAgICAgYXNzZXJ0TnVsbCh0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpKTsKKworICAgICAgICBCeXRlQnVmIG91dCA9IHRlc3RDaGFubmVsLnJlYWRPdXRib3VuZCgpOworICAgICAgICBhc3NlcnRUcnVlKG91dC50b1N0cmluZyhDaGFyc2V0VXRpbC5VVEZfOCkuY29udGFpbnMoImJvZHkgY291bGQgbm90IGJlIHBhcnNlZCIpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZElnbm9yZUludmFsaWRSZXF1ZXN0TWVzc2FnZVBhcmFtZXRlcigpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBncmVtbGluID0gImcuVih4KSI7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gYWxsb2NhdG9yLmJ1ZmZlcigpOworICAgICAgICAvLyBsYW5ndWFnZSBjb250YWlucyBhIHR5cG8gaGVyZSBhcyBsbmd1YWdlCisgICAgICAgIGJ1ZmZlci53cml0ZUNoYXJTZXF1ZW5jZSgieyBcImdyZW1saW5cIjogXCIiICsgZ3JlbWxpbiArCisgICAgICAgICAgICAgICAgICAgICAgICAiXCIsIFwibG5ndWFnZVwiOiAgXCJhYmNcIn0iLAorICAgICAgICAgICAgICAgIENoYXJzZXRVdGlsLlVURl84KTsKKworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOworICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5QT1NULCAiIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdENoYW5uZWwuZmluaXNoKCk7CisKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZGVjb2RlZFJlcXVlc3RNZXNzYWdlID0gdGVzdENoYW5uZWwucmVhZEluYm91bmQoKTsKKyAgICAgICAgYXNzZXJ0Tm90RXF1YWxzKCJhYmMiLCBkZWNvZGVkUmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGQoVG9rZW5zLkFSR1NfTEFOR1VBR0UpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEVycm9yT25CYWRSZXF1ZXN0V2l0aE5vUGFyYW1ldGVyKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBIdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyIHJlcXVlc3RNZXNzYWdlRGVjb2RlciA9IG5ldyBIdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyKHNlcmlhbGl6ZXJzKTsKKyAgICAgICAgZmluYWwgRW1iZWRkZWRDaGFubmVsIHRlc3RDaGFubmVsID0gbmV3IEVtYmVkZGVkQ2hhbm5lbChuZXcgSHR0cFNlcnZlckNvZGVjKCksIG5ldyBIdHRwT2JqZWN0QWdncmVnYXRvcihJbnRlZ2VyLk1BWF9WQUxVRSksIHJlcXVlc3RNZXNzYWdlRGVjb2Rlcik7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBhbGxvY2F0b3IuYnVmZmVyKCk7CisgICAgICAgIGJ1ZmZlci53cml0ZUNoYXJTZXF1ZW5jZSgieyB9IiwgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCk7CisgICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT04pOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIiLAorICAgICAgICAgICAgICAgIGJ1ZmZlciwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQoaHR0cFJlcXVlc3QpOworICAgICAgICB0ZXN0Q2hhbm5lbC5maW5pc2goKTsKKworICAgICAgICBhc3NlcnROdWxsKHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCkpOworCisgICAgICAgIEJ5dGVCdWYgb3V0ID0gdGVzdENoYW5uZWwucmVhZE91dGJvdW5kKCk7CisgICAgICAgIGFzc2VydFRydWUob3V0LnRvU3RyaW5nKENoYXJzZXRVdGlsLlVURl84KS5jb250YWlucygibm8gZ3JlbWxpbiBzY3JpcHQgc3VwcGxpZWQiKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBdHRlbXB0VG9QYXJzZVJlcXVlc3RXaXRoTm9uc2Vuc2VDb250ZW50VHlwZSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gYWxsb2NhdG9yLmJ1ZmZlcigpOworICAgICAgICBidWZmZXIud3JpdGVDaGFyU2VxdWVuY2UoIntcImdyZW1saW5cIjpcImcuVigpXCJ9IiwgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCk7CisgICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUsICJzb21lLW5vbmV4aXN0ZW50LXNlcmlhbGl6ZXIiKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5QT1NULCAiIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdENoYW5uZWwuZmluaXNoKCk7CisKKyAgICAgICAgUmVxdWVzdE1lc3NhZ2UgZGVjb2RlZFJlcXVlc3QgPSB0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpOworICAgICAgICBhc3NlcnROb3ROdWxsKGRlY29kZWRSZXF1ZXN0KTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEVycm9yV2l0aE5vbmV4aXN0ZW50QWNjZXB0SGVhZGVyKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBIdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyIHJlcXVlc3RNZXNzYWdlRGVjb2RlciA9IG5ldyBIdHRwUmVxdWVzdE1lc3NhZ2VEZWNvZGVyKHNlcmlhbGl6ZXJzKTsKKyAgICAgICAgZmluYWwgRW1iZWRkZWRDaGFubmVsIHRlc3RDaGFubmVsID0gbmV3IEVtYmVkZGVkQ2hhbm5lbChuZXcgSHR0cFNlcnZlckNvZGVjKCksIG5ldyBIdHRwT2JqZWN0QWdncmVnYXRvcihJbnRlZ2VyLk1BWF9WQUxVRSksIHJlcXVlc3RNZXNzYWdlRGVjb2Rlcik7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBhbGxvY2F0b3IuYnVmZmVyKCk7CisgICAgICAgIGJ1ZmZlci53cml0ZUNoYXJTZXF1ZW5jZSgie1wiZ3JlbWxpblwiOlwiZy5WKClcIn0iLCBDaGFyc2V0VXRpbC5VVEZfOCk7CisKKyAgICAgICAgZmluYWwgSHR0cEhlYWRlcnMgaGVhZGVycyA9IG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKTsKKyAgICAgICAgaGVhZGVycy5hZGQoSHR0cEhlYWRlck5hbWVzLkFDQ0VQVCwgInNvbWUtbm9uZXhpc3RlbnQtc2VyaWFsaXplciIpOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIiLAorICAgICAgICAgICAgICAgIGJ1ZmZlciwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQoaHR0cFJlcXVlc3QpOworICAgICAgICB0ZXN0Q2hhbm5lbC5maW5pc2goKTsKKworICAgICAgICBhc3NlcnROdWxsKHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCkpOworCisgICAgICAgIEJ5dGVCdWYgcmVzcG9uc2UgPSB0ZXN0Q2hhbm5lbC5yZWFkT3V0Ym91bmQoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShyZXNwb25zZS50b1N0cmluZyhDaGFyc2V0VXRpbC5VVEZfOCkuY29udGFpbnMoIm5vIHNlcmlhbGl6ZXIgZm9yIHJlcXVlc3RlZCBBY2NlcHQgaGVhZGVyIikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkTm90QWRkSW52YWxpZEZpZWxkVG9SZXF1ZXN0TWVzc2FnZSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlciByZXF1ZXN0TWVzc2FnZURlY29kZXIgPSBuZXcgSHR0cFJlcXVlc3RNZXNzYWdlRGVjb2RlcihzZXJpYWxpemVycyk7CisgICAgICAgIGZpbmFsIEVtYmVkZGVkQ2hhbm5lbCB0ZXN0Q2hhbm5lbCA9IG5ldyBFbWJlZGRlZENoYW5uZWwobmV3IEh0dHBTZXJ2ZXJDb2RlYygpLCBuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoSW50ZWdlci5NQVhfVkFMVUUpLCByZXF1ZXN0TWVzc2FnZURlY29kZXIpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gYWxsb2NhdG9yLmJ1ZmZlcigpOworICAgICAgICBidWZmZXIud3JpdGVDaGFyU2VxdWVuY2UoIntcImdyZW1saW5cIjpcImcuVigpXCIsXCJub25maWVsZFwiOlwic2hvdWxkbnRnZXRhZGRlZFwifSIsIENoYXJzZXRVdGlsLlVURl84KTsKKworICAgICAgICBmaW5hbCBIdHRwSGVhZGVycyBoZWFkZXJzID0gbmV3IERlZmF1bHRIdHRwSGVhZGVycygpOworICAgICAgICBoZWFkZXJzLmFkZChIdHRwSGVhZGVyTmFtZXMuQ09OVEVOVF9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OKTsKKworICAgICAgICBmaW5hbCBGdWxsSHR0cFJlcXVlc3QgaHR0cFJlcXVlc3QgPSBuZXcgRGVmYXVsdEZ1bGxIdHRwUmVxdWVzdChIdHRwVmVyc2lvbi5IVFRQXzFfMSwgSHR0cE1ldGhvZC5QT1NULCAiIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIGhlYWRlcnMsIG5ldyBEZWZhdWx0SHR0cEhlYWRlcnMoKSk7CisKKyAgICAgICAgdGVzdENoYW5uZWwud3JpdGVJbmJvdW5kKGh0dHBSZXF1ZXN0KTsKKyAgICAgICAgdGVzdENoYW5uZWwuZmluaXNoKCk7CisKKyAgICAgICAgUmVxdWVzdE1lc3NhZ2UgZGVjb2RlZFJlcXVlc3QgPSB0ZXN0Q2hhbm5lbC5yZWFkSW5ib3VuZCgpOworICAgICAgICBhc3NlcnROdWxsKGRlY29kZWRSZXF1ZXN0LmdldEZpZWxkKCJub25maWVsZCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJnLlYoKSIsIGRlY29kZWRSZXF1ZXN0LmdldEdyZW1saW4oKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRBZGRWYWxpZEZpZWxkc1RvUmVxdWVzdE1lc3NhZ2UoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXIgcmVxdWVzdE1lc3NhZ2VEZWNvZGVyID0gbmV3IEh0dHBSZXF1ZXN0TWVzc2FnZURlY29kZXIoc2VyaWFsaXplcnMpOworICAgICAgICBmaW5hbCBFbWJlZGRlZENoYW5uZWwgdGVzdENoYW5uZWwgPSBuZXcgRW1iZWRkZWRDaGFubmVsKG5ldyBIdHRwU2VydmVyQ29kZWMoKSwgbmV3IEh0dHBPYmplY3RBZ2dyZWdhdG9yKEludGVnZXIuTUFYX1ZBTFVFKSwgcmVxdWVzdE1lc3NhZ2VEZWNvZGVyKTsKKworICAgICAgICBmaW5hbCBVVUlEIHJpZCA9IFVVSUQucmFuZG9tVVVJRCgpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IGFsbG9jYXRvci5idWZmZXIoKTsKKyAgICAgICAgYnVmZmVyLndyaXRlQ2hhclNlcXVlbmNlKCJ7XCJncmVtbGluXCI6XCJnLlYoKS5saW1pdCgyKVwiLFwiYmF0Y2hTaXplXCI6XCIxMFwiLFwibGFuZ3VhZ2VcIjpcImdyZW1saW4tbGFuZ1wiLCIgKworICAgICAgICAgICAgICAgICJcImdcIjpcImdtb2Rlcm5cIixcImJpbmRpbmdzXCI6e1wieFwiOlwiMVwifSxcInRpbWVvdXRNc1wiOlwiMTJcIiwiICsKKyAgICAgICAgICAgICAgICAiXCJtYXRlcmlhbGl6ZVByb3BlcnRpZXNcIjpcIiIgKyBUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMgKyAiXCJ9IiwgQ2hhcnNldFV0aWwuVVRGXzgpOworCisgICAgICAgIGZpbmFsIEh0dHBIZWFkZXJzIGhlYWRlcnMgPSBuZXcgRGVmYXVsdEh0dHBIZWFkZXJzKCk7CisgICAgICAgIGhlYWRlcnMuYWRkKEh0dHBIZWFkZXJOYW1lcy5DT05URU5UX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT04pOworCisgICAgICAgIGZpbmFsIEZ1bGxIdHRwUmVxdWVzdCBodHRwUmVxdWVzdCA9IG5ldyBEZWZhdWx0RnVsbEh0dHBSZXF1ZXN0KEh0dHBWZXJzaW9uLkhUVFBfMV8xLCBIdHRwTWV0aG9kLlBPU1QsICIiLAorICAgICAgICAgICAgICAgIGJ1ZmZlciwgaGVhZGVycywgbmV3IERlZmF1bHRIdHRwSGVhZGVycygpKTsKKworICAgICAgICB0ZXN0Q2hhbm5lbC53cml0ZUluYm91bmQoaHR0cFJlcXVlc3QpOworICAgICAgICB0ZXN0Q2hhbm5lbC5maW5pc2goKTsKKworICAgICAgICBSZXF1ZXN0TWVzc2FnZSBkZWNvZGVkUmVxdWVzdCA9IHRlc3RDaGFubmVsLnJlYWRJbmJvdW5kKCk7CisgICAgICAgIGFzc2VydEVxdWFscygiZy5WKCkubGltaXQoMikiLCBkZWNvZGVkUmVxdWVzdC5nZXRHcmVtbGluKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMTAsIChpbnQpIGRlY29kZWRSZXF1ZXN0LmdldEZpZWxkKFRva2Vucy5BUkdTX0JBVENIX1NJWkUpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJncmVtbGluLWxhbmciLCBkZWNvZGVkUmVxdWVzdC5nZXRGaWVsZChUb2tlbnMuQVJHU19MQU5HVUFHRSkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImdtb2Rlcm4iLCBkZWNvZGVkUmVxdWVzdC5nZXRGaWVsZChUb2tlbnMuQVJHU19HKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMSIsICgoTWFwKSBkZWNvZGVkUmVxdWVzdC5nZXRGaWVsZChUb2tlbnMuQVJHU19CSU5ESU5HUykpLmdldCgieCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsICgoTWFwKSBkZWNvZGVkUmVxdWVzdC5nZXRGaWVsZChUb2tlbnMuQVJHU19CSU5ESU5HUykpLnNpemUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxMiwgKGxvbmcpIGRlY29kZWRSZXF1ZXN0LmdldEZpZWxkKFRva2Vucy5USU1FT1VUX01TKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19UT0tFTlMsIGRlY29kZWRSZXF1ZXN0LmdldEZpZWxkKFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL25vdGlmaWNhdGlvbnMvR3JhcGhNYW5hZ2VyTm90aWZpY2F0aW9uc1Rlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvbm90aWZpY2F0aW9ucy9HcmFwaE1hbmFnZXJOb3RpZmljYXRpb25zVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDMyMzE2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvbm90aWZpY2F0aW9ucy9HcmFwaE1hbmFnZXJOb3RpZmljYXRpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIubm90aWZpY2F0aW9uczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5DbGllbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuQ2x1c3RlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5SZXF1ZXN0T3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkFic3RyYWN0R3JlbWxpblNlcnZlckludGVncmF0aW9uVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5TZXR0aW5nczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5UZXN0Q2xpZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLQotcHVibGljIGNsYXNzIEdyYXBoTWFuYWdlck5vdGlmaWNhdGlvbnNUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IHsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFNldHRpbmdzIG92ZXJyaWRlU2V0dGluZ3MoZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICBzZXR0aW5ncy5ncmFwaE1hbmFnZXIgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIubm90aWZpY2F0aW9ucy5Qcm92aWRlckdyYXBoTWFuYWdlckhlbHBlciI7Ci0gICAgcmV0dXJuIHNldHRpbmdzOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgc2NyaXB0U3VjY2Vzc1Nob3VsZE5vdGlmeUdyYXBoTWFuYWdlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gVGVzdEhlbHBlci5SQU5ET007Ci0gICAgZmluYWwgVVVJRCByZXF1ZXN0SUQgPSBuZXcgVVVJRChyYW5kb20ubmV4dExvbmcoKSwgcmFuZG9tLm5leHRMb25nKCkpOwotICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLm92ZXJyaWRlUmVxdWVzdElkKHJlcXVlc3RJRCkuY3JlYXRlKCk7Ci0KLSAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gIjErMSI7Ci0gICAgY2xpZW50LnN1Ym1pdChzY3JpcHQsIG9wdGlvbnMpLmFsbCgpLmdldCgpLmdldCgwKTsKLQotICAgIGZpbmFsIFByb3ZpZGVyR3JhcGhNYW5hZ2VySGVscGVyIGdyYXBoTWFuYWdlciA9IChQcm92aWRlckdyYXBoTWFuYWdlckhlbHBlcikgc2VydmVyLmdldFNlcnZlckdyZW1saW5FeGVjdXRvcigpCi0gICAgICAgIC5nZXRHcmFwaE1hbmFnZXIoKTsKLSAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3RBcmdzID0gZ3JhcGhNYW5hZ2VyLmdldEJlZm9yZVF1ZXJ5U3RhcnRUcmFja2luZyhyZXF1ZXN0SUQudG9TdHJpbmcoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKHNjcmlwdCwgcmVxdWVzdEFyZ3MuZ2V0KFRva2Vucy5BUkdTX0dSRU1MSU4pKTsKLSAgICBhc3NlcnRUaGF0KGdyYXBoTWFuYWdlci5kaWRSZXF1ZXN0U3VjY2VlZChyZXF1ZXN0SUQudG9TdHJpbmcoKSksIGlzKHRydWUpKTsKLSAgICBhc3NlcnRUaGF0KGdyYXBoTWFuYWdlci5kaWRSZXF1ZXN0RmFpbChyZXF1ZXN0SUQudG9TdHJpbmcoKSksIGlzKGZhbHNlKSk7Ci0gICAgY2x1c3Rlci5jbG9zZSgpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgc2NyaXB0RmFpbHVyZVNob3VsZE5vdGlmeUdyYXBoTWFuYWdlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIGZpbmFsIENsdXN0ZXIgY2x1c3RlciA9IFRlc3RDbGllbnRGYWN0b3J5Lm9wZW4oKTsKLSAgICBmaW5hbCBDbGllbnQgY2xpZW50ID0gY2x1c3Rlci5jb25uZWN0KG5hbWUuZ2V0TWV0aG9kTmFtZSgpKTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gVGVzdEhlbHBlci5SQU5ET007Ci0gICAgZmluYWwgVVVJRCByZXF1ZXN0SUQgPSBuZXcgVVVJRChyYW5kb20ubmV4dExvbmcoKSwgcmFuZG9tLm5leHRMb25nKCkpOwotICAgIGZpbmFsIFJlcXVlc3RPcHRpb25zIG9wdGlvbnMgPSBSZXF1ZXN0T3B0aW9ucy5idWlsZCgpLm92ZXJyaWRlUmVxdWVzdElkKHJlcXVlc3RJRCkuY3JlYXRlKCk7Ci0KLSAgICBmaW5hbCBTdHJpbmcgc2NyaXB0ID0gIngiOwotICAgIHRyeSB7Ci0gICAgICBjbGllbnQuc3VibWl0KHNjcmlwdCwgb3B0aW9ucykuYWxsKCkuZ2V0KCkuZ2V0KDApOwotICAgICAgZmFpbCgiVGhpcyBzY3JpcHQgc2hvdWxkIGZhaWwgc2luY2UgdGhlIHZhcmlhYmxlIHggaXMgbm90IGRlZmluZWQiKTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgLy8KLSAgICB9Ci0KLSAgICBmaW5hbCBQcm92aWRlckdyYXBoTWFuYWdlckhlbHBlciBncmFwaE1hbmFnZXIgPSAoUHJvdmlkZXJHcmFwaE1hbmFnZXJIZWxwZXIpIHNlcnZlci5nZXRTZXJ2ZXJHcmVtbGluRXhlY3V0b3IoKQotICAgICAgICAuZ2V0R3JhcGhNYW5hZ2VyKCk7Ci0gICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0QXJncyA9IGdyYXBoTWFuYWdlci5nZXRCZWZvcmVRdWVyeVN0YXJ0VHJhY2tpbmcocmVxdWVzdElELnRvU3RyaW5nKCkpOwotICAgIGFzc2VydEVxdWFscyhzY3JpcHQsIHJlcXVlc3RBcmdzLmdldChUb2tlbnMuQVJHU19HUkVNTElOKSk7Ci0gICAgYXNzZXJ0VGhhdChncmFwaE1hbmFnZXIuZGlkUmVxdWVzdFN1Y2NlZWQocmVxdWVzdElELnRvU3RyaW5nKCkpLCBpcyhmYWxzZSkpOwotICAgIGFzc2VydFRoYXQoZ3JhcGhNYW5hZ2VyLmRpZFJlcXVlc3RGYWlsKHJlcXVlc3RJRC50b1N0cmluZygpKSwgaXModHJ1ZSkpOwotICAgIGNsdXN0ZXIuY2xvc2UoKTsKLSAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9ub3RpZmljYXRpb25zL1Byb3ZpZGVyR3JhcGhNYW5hZ2VySGVscGVyLmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL25vdGlmaWNhdGlvbnMvUHJvdmlkZXJHcmFwaE1hbmFnZXJIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3YWFhNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL25vdGlmaWNhdGlvbnMvUHJvdmlkZXJHcmFwaE1hbmFnZXJIZWxwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIubm90aWZpY2F0aW9uczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLlNldHRpbmdzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLnV0aWwuRGVmYXVsdEdyYXBoTWFuYWdlcjsKLQotcHVibGljIGNsYXNzIFByb3ZpZGVyR3JhcGhNYW5hZ2VySGVscGVyIGV4dGVuZHMgRGVmYXVsdEdyYXBoTWFuYWdlciB7Ci0KLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBiZWZvcmVRdWVyeVN0YXJ0VHJhY2tpbmc7Ci0KLSAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gb25RdWVyeVN1Y2Nlc3NDb3VudDsKLQotICBwcml2YXRlIExpc3Q8U3RyaW5nPiBvblF1ZXJ5RXJyb3JDb3VudDsKLQotICBwdWJsaWMgUHJvdmlkZXJHcmFwaE1hbmFnZXJIZWxwZXIoZmluYWwgU2V0dGluZ3Mgc2V0dGluZ3MpIHsKLSAgICBzdXBlcihzZXR0aW5ncyk7Ci0gICAgdGhpcy5iZWZvcmVRdWVyeVN0YXJ0VHJhY2tpbmcgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE9iamVjdD4+KCk7Ci0gICAgdGhpcy5vblF1ZXJ5U3VjY2Vzc0NvdW50ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgdGhpcy5vblF1ZXJ5RXJyb3JDb3VudCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICB9Ci0gCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBiZWZvcmVRdWVyeVN0YXJ0KGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgewotICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXJncyA9IG1zZy5nZXRBcmdzKCk7Ci0gICAgZmluYWwgU3RyaW5nIHJlcXVlc3RJRCA9IG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpOwotICAgIHRoaXMuYmVmb3JlUXVlcnlTdGFydFRyYWNraW5nLnB1dChyZXF1ZXN0SUQsIGFyZ3MpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUXVlcnlTdWNjZXNzKGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZykgewotICAgIGZpbmFsIFN0cmluZyByZXF1ZXN0SUQgPSBtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKTsKLSAgICB0aGlzLm9uUXVlcnlTdWNjZXNzQ291bnQuYWRkKHJlcXVlc3RJRCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25RdWVyeUVycm9yKGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZywgZmluYWwgVGhyb3dhYmxlIGUpIHsKLSAgICBmaW5hbCBTdHJpbmcgcmVxdWVzdElEID0gbXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCk7Ci0gICAgdGhpcy5vblF1ZXJ5RXJyb3JDb3VudC5hZGQocmVxdWVzdElEKTsKLSAgfQotCi0gIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEJlZm9yZVF1ZXJ5U3RhcnRUcmFja2luZyhmaW5hbCBTdHJpbmcgcmVxdWVzdElEKSB7Ci0gICAgcmV0dXJuIHRoaXMuYmVmb3JlUXVlcnlTdGFydFRyYWNraW5nLmdldChyZXF1ZXN0SUQpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZGlkUmVxdWVzdFN1Y2NlZWQoZmluYWwgU3RyaW5nIHJlcXVlc3RJRCkgewotICAgIHJldHVybiB0aGlzLm9uUXVlcnlTdWNjZXNzQ291bnQuY29udGFpbnMocmVxdWVzdElEKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGRpZFJlcXVlc3RGYWlsKGZpbmFsIFN0cmluZyByZXF1ZXN0SUQpIHsKLSAgICByZXR1cm4gdGhpcy5vblF1ZXJ5RXJyb3JDb3VudC5jb250YWlucyhyZXF1ZXN0SUQpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3JUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL0Fic3RyYWN0RXZhbE9wUHJvY2Vzc29yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDZlNWRiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcDsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEhhbmRsZXJDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5lbmdpbmUuR3JlbWxpbkV4ZWN1dG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuU2V0dGluZ3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIub3Auc3RhbmRhcmQuU3RhbmRhcmRPcFByb2Nlc3NvcjsKLWltcG9ydCBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5tb2NraXRvLkFyZ3VtZW50Q2FwdG9yOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG87Ci0KLWltcG9ydCBqYXZheC5zY3JpcHQuU2ltcGxlQmluZGluZ3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db21wbGV0YWJsZUZ1dHVyZTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnlTdHJpbmc7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdEV2YWxPcFByb2Nlc3NvclRlc3QgewotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBldmFsT3BJbnRlcm5hbFNob3VsZEhhbmRsZUFsbEV2YWx1YXRpb25FeGNlcHRpb25zKCkgdGhyb3dzIE9wUHJvY2Vzc29yRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQWJzdHJhY3RFdmFsT3BQcm9jZXNzb3IgcHJvY2Vzc29yID0gbmV3IFN0YW5kYXJkT3BQcm9jZXNzb3IoKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJ0ZXN0IikuCi0gICAgICAgICAgICAgICAgYWRkQXJnKFRva2Vucy5BUkdTX0xBTkdVQUdFLCAiZ3JlbWxpbi1ncm9vdnkiKS4KLSAgICAgICAgICAgICAgICBhZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgIjErMSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTZXR0aW5ncyBzZXR0aW5ncyA9IG5ldyBTZXR0aW5ncygpOwotICAgICAgICBmaW5hbCBDaGFubmVsSGFuZGxlckNvbnRleHQgY3R4ID0gTW9ja2l0by5tb2NrKENoYW5uZWxIYW5kbGVyQ29udGV4dC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEFyZ3VtZW50Q2FwdG9yPFJlc3BvbnNlTWVzc2FnZT4gcmVzcG9uc2VDYXB0b3IgPSBBcmd1bWVudENhcHRvci5mb3JDbGFzcyhSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOwotCi0gICAgICAgIGZpbmFsIEdyZW1saW5FeGVjdXRvciBncmVtbGluRXhlY3V0b3IgPSBNb2NraXRvLm1vY2soR3JlbWxpbkV4ZWN1dG9yLmNsYXNzKTsKLSAgICAgICAgZmluYWwgQ29tcGxldGFibGVGdXR1cmU8T2JqZWN0PiBleEZ1dCA9IG5ldyBDb21wbGV0YWJsZUZ1dHVyZTw+KCk7Ci0gICAgICAgIE1vY2tpdG8ud2hlbihncmVtbGluRXhlY3V0b3IuZXZhbChhbnlTdHJpbmcoKSwgYW55U3RyaW5nKCksIE1vY2tpdG8uYW55KCksIE1vY2tpdG8uPEdyZW1saW5FeGVjdXRvci5MaWZlQ3ljbGU+YW55KCkpKQotICAgICAgICAgICAgICAgIC50aGVuUmV0dXJuKGV4RnV0KTsKLSAgICAgICAgZXhGdXQuY29tcGxldGVFeGNlcHRpb25hbGx5KG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInRlc3QtZXhjZXB0aW9uIikpOwotCi0gICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dHNweSA9IE1vY2tpdG8uc3B5KG5ldyBDb250ZXh0KHJlcXVlc3QsIGN0eCwgc2V0dGluZ3MsIG51bGwsIGdyZW1saW5FeGVjdXRvciwgbnVsbCkpOwotCi0gICAgICAgIHByb2Nlc3Nvci5ldmFsT3BJbnRlcm5hbChjb250ZXh0c3B5LCBjb250ZXh0c3B5OjpnZXRHcmVtbGluRXhlY3V0b3IsIFNpbXBsZUJpbmRpbmdzOjpuZXcpOwotCi0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGNvbnRleHRzcHksIE1vY2tpdG8udGltZXMoMSkpLndyaXRlQW5kRmx1c2gocmVzcG9uc2VDYXB0b3IuY2FwdHVyZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1JfRVZBTFVBVElPTiwgcmVzcG9uc2VDYXB0b3IuZ2V0VmFsdWUoKS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVxdWVzdC5nZXRSZXF1ZXN0SWQoKSwgcmVzcG9uc2VDYXB0b3IuZ2V0VmFsdWUoKS5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQocmVzcG9uc2VDYXB0b3IuZ2V0VmFsdWUoKS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIENvcmVNYXRjaGVycy5jb250YWluc1N0cmluZygidGVzdC1leGNlcHRpb24iKSk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvQWJzdHJhY3RPcFByb2Nlc3NvclRlc3QuamF2YSBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvb3AvQWJzdHJhY3RPcFByb2Nlc3NvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkNjc5My4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL29wL0Fic3RyYWN0T3BQcm9jZXNzb3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQ29udGV4dDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcubW9ja2l0by5Bcmd1bWVudENhcHRvcjsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdE9wUHJvY2Vzc29yVGVzdCB7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIG1ha2VGcmFtZU1ldGhvZFRlc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJ0ZXN0IikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIENvbnRleHQgY3R4ID0gTW9ja2l0by5tb2NrKENvbnRleHQuY2xhc3MpOwotCi0gICAgICAgIGZpbmFsIEFyZ3VtZW50Q2FwdG9yPFJlc3BvbnNlTWVzc2FnZT4gcmVzcG9uc2VDYXB0b3IgPSBBcmd1bWVudENhcHRvci5mb3JDbGFzcyhSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBJbmR1Y2UgYSBOdWxsUG9pbnRlckV4Y2VwdGlvbiB0byB2YWxpZGF0ZSBlcnJvciByZXNwb25zZSBtZXNzYWdlIHdyaXRpbmcKLSAgICAgICAgICAgIEFic3RyYWN0T3BQcm9jZXNzb3IubWFrZUZyYW1lKGN0eCwgcmVxdWVzdCwgbnVsbCwgdHJ1ZSwgbnVsbCwgUmVzcG9uc2VTdGF0dXNDb2RlLlBBUlRJQUxfQ09OVEVOVCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBmYWlsKCJFeHBlY3RlZCBhIE51bGxQb2ludGVyRXhjZXB0aW9uIik7Ci0gICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGV4cGVjdGVkKSB7Ci0gICAgICAgICAgICAvLyBub3AKLSAgICAgICAgfQotCi0gICAgICAgIE1vY2tpdG8udmVyaWZ5KGN0eCwgTW9ja2l0by50aW1lcygxKSkud3JpdGVBbmRGbHVzaChyZXNwb25zZUNhcHRvci5jYXB0dXJlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9TRVJJQUxJWkFUSU9OLCByZXNwb25zZUNhcHRvci5nZXRWYWx1ZSgpLmdldFN0YXR1cygpLmdldENvZGUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0LmdldFJlcXVlc3RJZCgpLCByZXNwb25zZUNhcHRvci5nZXRWYWx1ZSgpLmdldFJlcXVlc3RJZCgpKTsKLSAgICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvVGV4dFBsYWluTWVzc2FnZVNlcmlhbGl6ZXJUZXN0LmphdmEgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc2VydmVyL3V0aWwvVGV4dFBsYWluTWVzc2FnZVNlcmlhbGl6ZXJUZXN0LmphdmEKaW5kZXggODgyZWUyZC4uODdiNDhhYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci91dGlsL1RleHRQbGFpbk1lc3NhZ2VTZXJpYWxpemVyVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvdXRpbC9UZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplclRlc3QuamF2YQpAQCAtMTgsMzEgKzE4LDMzIEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIudXRpbDsKIAoraW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwogaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IGlvLm5ldHR5LnV0aWwuQ2hhcnNldFV0aWw7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFZlcnRleDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiAKIHB1YmxpYyBjbGFzcyBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplclRlc3QgewotCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRQcm9kdWNlUGxhaW5UZXh0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIG1zZyA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELnJhbmRvbVVVSUQoKSkuCisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBtc2cgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKS4KKyAgICAgICAgICAgICAgICBjb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykuCiAgICAgICAgICAgICAgICAgcmVzdWx0KEFycmF5cy5hc0xpc3QoMSwgbmV3IERldGFjaGVkVmVydGV4KDEwMCwgInBlcnNvbiIsIG0pLCBqYXZhLmF3dC5Db2xvci5SRUQpKS5jcmVhdGUoKTsKIAogICAgICAgICBmaW5hbCBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplciBtZXNzYWdlU2VyaWFsaXplciA9IG5ldyBUZXh0UGxhaW5NZXNzYWdlU2VyaWFsaXplcigpOwotICAgICAgICBmaW5hbCBTdHJpbmcgb3V0cHV0ID0gbWVzc2FnZVNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhtc2csIEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVCk7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgb3V0cHV0ID0gbWVzc2FnZVNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShtc2csIEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBleHAgPSAiPT0+MSIgKyBTeXN0ZW0ubGluZVNlcGFyYXRvcigpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICI9PT52WzEwMF0iICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiPT0+amF2YS5hd3QuQ29sb3Jbcj0yNTUsZz0wLGI9MF0iOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwLCBvdXRwdXQpOworICAgICAgICAgICAgICAgICI9PT52WzEwMF0iICsgU3lzdGVtLmxpbmVTZXBhcmF0b3IoKSArCisgICAgICAgICAgICAgICAgIj09PmphdmEuYXd0LkNvbG9yW3I9MjU1LGc9MCxiPTBdIjsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cCwgb3V0cHV0LnRvU3RyaW5nKENoYXJzZXRVdGlsLlVURl84KSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL2lvLmN1Y3VtYmVyLmNvcmUuYmFja2VuZC5PYmplY3RGYWN0b3J5IGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL2lvLmN1Y3VtYmVyLmNvcmUuYmFja2VuZC5PYmplY3RGYWN0b3J5CmluZGV4IDAyMzM1MDEuLjQwOWM3ZGMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9pby5jdWN1bWJlci5jb3JlLmJhY2tlbmQuT2JqZWN0RmFjdG9yeQorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvaW8uY3VjdW1iZXIuY29yZS5iYWNrZW5kLk9iamVjdEZhY3RvcnkKQEAgLTEsNCArMSw5IEBACi1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhCaW5hcnlSZW1vdGVGZWF0dXJlVGVzdCRSZW1vdGVHdWljZUZhY3RvcnkKK29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5HcmFwaEJpbmFyeUxhbmdSZW1vdGVGZWF0dXJlVGVzdCRSZW1vdGVHdWljZUZhY3RvcnkKK29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5HcmFwaEJpbmFyeUxhbmdSZW1vdGVQYXJhbWV0ZXJpemVkRmVhdHVyZVRlc3QkUmVtb3RlR3VpY2VGYWN0b3J5CitvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhCaW5hcnlMYW5nQnVsa2VkUmVtb3RlRmVhdHVyZVRlc3QkUmVtb3RlR3VpY2VGYWN0b3J5CitvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhCaW5hcnlHcm9vdnlSZW1vdGVGZWF0dXJlVGVzdCRSZW1vdGVHdWljZUZhY3RvcnkKK29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5HcmFwaEJpbmFyeUdyb292eVJlbW90ZVBhcmFtZXRlcml6ZWRGZWF0dXJlVGVzdCRSZW1vdGVHdWljZUZhY3RvcnkKIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5HcmFwaEJpbmFyeVJlbW90ZUNvbXB1dGVyRmVhdHVyZVRlc3QkUmVtb3RlR3VpY2VGYWN0b3J5Ci1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhTT05SZW1vdGVGZWF0dXJlVGVzdCRSZW1vdGVHdWljZUZhY3RvcnkKK29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5HcmFwaFNPTkxhbmdSZW1vdGVGZWF0dXJlVGVzdCRSZW1vdGVHdWljZUZhY3RvcnkKK29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyLnJlbW90ZS5HcmFwaFNPTkxhbmdSZW1vdGVQYXJhbWV0ZXJpemVkRmVhdHVyZVRlc3QkUmVtb3RlR3VpY2VGYWN0b3J5CiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5yZW1vdGUuR3JhcGhTT05SZW1vdGVDb21wdXRlckZlYXR1cmVUZXN0JFJlbW90ZUd1aWNlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRFbmdpbmVGYWN0b3J5IGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5TY3JpcHRFbmdpbmVGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTBlZTAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZUZhY3RvcnkKQEAgLTAsMCArMSBAQAorb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5ncm9vdnkuanNyMjIzLkdyZW1saW5Hcm9vdnlTY3JpcHRUZXN0RW5naW5lRmFjdG9yeQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9jb25mL3JlbW90ZS1vYmplY3RzLnlhbWwgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvY29uZi9yZW1vdGUtb2JqZWN0cy55YW1sCmluZGV4IGY5MDQzZjAuLmEwZjMzMTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9jb25mL3JlbW90ZS1vYmplY3RzLnlhbWwKKysrIGIvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbmYvcmVtb3RlLW9iamVjdHMueWFtbApAQCAtMjksNCArMjksNCBAQAogCiBob3N0czogW2xvY2FsaG9zdF0KIHBvcnQ6IDQ1OTQwCi1zZXJpYWxpemVyOiB7ICBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitzZXJpYWxpemVyOiB7ICBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0IH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbCBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCmluZGV4IGIxMTU0MjcuLjY0N2Y5NjcgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCkBAIC0yMCwxNiArMjAsMTIgQEAKICAgICAgICAgICAgIDxwYXR0ZXJuPlslcF0gJUMgLSAlbSVuPC9wYXR0ZXJuPgogICAgICAgICA8L2VuY29kZXI+CiAgICAgPC9hcHBlbmRlcj4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLmhhbmRsZXIuTXVsdGlUYXNrU2Vzc2lvbiIgbGV2ZWw9IkVSUk9SIi8+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5BYnN0cmFjdEV2YWxPcFByb2Nlc3NvciIgbGV2ZWw9IkVSUk9SIi8+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC50cmF2ZXJzYWwuVHJhdmVyc2FsT3BQcm9jZXNzb3IiIGxldmVsPSJFUlJPUiIvPgogICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIuQWJzdHJhY3RHcmVtbGluU2VydmVySW50ZWdyYXRpb25UZXN0IiBsZXZlbD0iSU5GTyIvPgogICAgIDxsb2dnZXIgbmFtZT0iYXVkaXQub3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zZXJ2ZXIiIGxldmVsPSJJTkZPIi8+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5oYW5kbGVyLlNpbmdsZVRhc2tTZXNzaW9uIiBsZXZlbD0iRVJST1IiLz4KICAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc2VydmVyLkFic3RyYWN0Q2hhbm5lbGl6ZXIiIGxldmVsPSJFUlJPUiIvPgogICAgIDwhLS0gdGhpcyBsb2dnZXIgaXMgbm9pc3kgYW5kIHdlIGRvbid0IGFzc2VydCBhbnl0aGluZyBhbmQgdGhlIGVycm9yIGlzIGFscmVhZHkgdHJhY2tlZCBvbiB0aGUgc2VydmVyIHNvIHdlIGNhbgogICAgICAgICAgdHJpbSB0aGUgbG9ncyBhIGJpdCB3aXRoIHRoaXMuIC0tPgotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5kcml2ZXIuSGFuZGxlciRHcmVtbGluUmVzcG9uc2VIYW5kbGVyIiBsZXZlbD0iT0ZGIi8+CisgICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmRyaXZlci5oYW5kbGVyLkdyZW1saW5SZXNwb25zZUhhbmRsZXIiIGxldmVsPSJPRkYiLz4KICAgICA8cm9vdCBsZXZlbD0iV0FSTiI+CiAgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJzdGRvdXQiLz4KICAgICA8L3Jvb3Q+CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zZXJ2ZXIvZ3JlbWxpbi1zZXJ2ZXItaW50ZWdyYXRpb24ueWFtbCBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sCmluZGV4IDE1OTA0ODkuLjEzYTFjNmYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sCisrKyBiL2dyZW1saW4tc2VydmVyL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NlcnZlci9ncmVtbGluLXNlcnZlci1pbnRlZ3JhdGlvbi55YW1sCkBAIC01MCwxNCArNTAsMTMgQEAKICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEdyZW1saW5QbHVnaW46IHtjbGFzc0ltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aF0sIG1ldGhvZEltcG9ydHM6IFtqYXZhLmxhbmcuTWF0aCMqXX0sCiAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5TY3JpcHRGaWxlR3JlbWxpblBsdWdpbjoge2ZpbGVzOiBbc2NyaXB0cy9nZW5lcmF0ZS1hbGwuZ3Jvb3Z5XX19fX0KIHNlcmlhbGl6ZXJzOgorICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCwgY29uZmlnOiB7IGlvUmVnaXN0cmllczogW29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWM10gfX0KICAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjNdIH19CiAgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyLCBjb25maWc6IHsgaW9SZWdpc3RyaWVzOiBbb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYyXSB9fQogICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEsIGNvbmZpZzogeyBpb1JlZ2lzdHJpZXM6IFtvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjFdIH19CisgIC0geyBjbGFzc05hbWU6IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0IH0KICAgLSB7IGNsYXNzTmFtZTogb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgfQogICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSwgY29uZmlnOiB7IHNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nOiB0cnVlIH19Ci1wcm9jZXNzb3JzOgotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zZXNzaW9uLlNlc3Npb25PcFByb2Nlc3NvciwgY29uZmlnOiB7IHNlc3Npb25UaW1lb3V0OiAyODgwMDAwMCB9fQotICAtIHsgY2xhc3NOYW1lOiBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNlcnZlci5vcC5zdGFuZGFyZC5TdGFuZGFyZE9wUHJvY2Vzc29yLCBjb25maWc6IHt9fQogbWV0cmljczogewogICBzbGY0alJlcG9ydGVyOiB7ZW5hYmxlZDogdHJ1ZSwgaW50ZXJ2YWw6IDE4MDAwMH19CiBncmVtbGluUG9vbDogOApAQCAtNjcsNyArNjYsNyBAQAogbWF4SW5pdGlhbExpbmVMZW5ndGg6IDQwOTYKIG1heEhlYWRlclNpemU6IDgxOTIKIG1heENodW5rU2l6ZTogODE5MgotbWF4Q29udGVudExlbmd0aDogMTA0ODU3NjAKK21heFJlcXVlc3RDb250ZW50TGVuZ3RoOiAxMDQ4NTc2MAogbWF4QWNjdW11bGF0aW9uQnVmZmVyQ29tcG9uZW50czogMTAyNAogcmVzdWx0SXRlcmF0aW9uQmF0Y2hTaXplOiA2NAogd3JpdGVCdWZmZXJMb3dXYXRlck1hcms6IDMyNzY4CmRpZmYgLS1naXQgYS9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9zY3JpcHRzL25lbzRqLWVtcHR5LnByb3BlcnRpZXMgYi9ncmVtbGluLXNlcnZlci9zcmMvdGVzdC9zY3JpcHRzL25lbzRqLWVtcHR5LnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNGM5M2IuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi1zZXJ2ZXIvc3JjL3Rlc3Qvc2NyaXB0cy9uZW80ai1lbXB0eS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jIFRoaXMgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBOZW80ai4gIE5vdGUgdGhhdAotIyBUaW5rZXJQb3AgZG9lcyBub3QgaW5jbHVkZSBOZW80aiBkZXBlbmRlbmNpZXMgaW4gaXRzCi0jIGRpc3RyaWJ1dGlvbnMuICBUbyB1c2UgdGhpcyBmaWxlLCBwbGVhc2UgZW5zdXJlIHRoYXQgTmVvNGoKLSMgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQgaW50byBHcmVtbGluIFNlcnZlcidzIHBhdGgKLSMgd2l0aDoKLSMKLSMgZ3JlbWxpbi1zZXJ2ZXIuc2ggLWkgb3JnLmFwYWNoZS50aW5rZXJwb3AgbmVvNGotZ3JlbWxpbiAzLnkuegotIwotIyBOb3RlIHRoYXQgdW5sZXNzIHVuZGVyIGEgY29tbWVyY2lhbCBhZ3JlZW1lbnQgd2l0aCBOZW80aiwgSW5jLiwKLSMgTmVvNGogaXMgbGljZW5zZWQgQUdQTC4KLQotCi1ncmVtbGluLmdyYXBoPW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGgKLWdyZW1saW4ubmVvNGouZGlyZWN0b3J5PS90bXAvbmVvNGoKLWdyZW1saW4ubmVvNGouY29uZi5ub2RlX2F1dG9faW5kZXhpbmc9dHJ1ZQotZ3JlbWxpbi5uZW80ai5jb25mLnJlbGF0aW9uc2hpcF9hdXRvX2luZGV4aW5nPXRydWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXNoYWRlZC9wb20ueG1sIGIvZ3JlbWxpbi1zaGFkZWQvcG9tLnhtbAppbmRleCBjMGZiZTlhLi4wNDM4YWQ2IDEwMDY0NAotLS0gYS9ncmVtbGluLXNoYWRlZC9wb20ueG1sCisrKyBiL2dyZW1saW4tc2hhZGVkL3BvbS54bWwKQEAgLTIwLDcgKzIwLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1zaGFkZWQ8L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGluIFNoYWRlZDwvbmFtZT4KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9idWlsZC9nZW5lcmF0ZS10cmFuc2xhdG9yLWRhdGEuZ3Jvb3Z5IGIvZ3JlbWxpbi10ZXN0L2J1aWxkL2dlbmVyYXRlLXRyYW5zbGF0b3ItZGF0YS5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjODgxYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9idWlsZC9nZW5lcmF0ZS10cmFuc2xhdG9yLWRhdGEuZ3Jvb3Z5CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitpbXBvcnQgZ3Jvb3Z5Lmpzb24uSnNvbkJ1aWxkZXIKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmNvcnB1cy5GZWF0dXJlUmVhZGVyCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yLkdyZW1saW5UcmFuc2xhdG9yCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5sYW5ndWFnZS50cmFuc2xhdG9yLlRyYW5zbGF0b3IKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLnRyYW5zbGF0b3IuVHJhbnNsYXRvckV4Y2VwdGlvbgorCitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRocworCisvLyBmaWxlIGlzIG92ZXJ3cml0dGVuIG9uIGVhY2ggZ2VuZXJhdGlvbgorZGVmIG91dHB1dEZpbGUgPSBuZXcgRmlsZSgiJHtwcm9qZWN0QmFzZURpcn0vZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvdHJhbnNsYXRpb25zLmpzb24iKQorCisvLyBhc3N1bWVzIGdsb2JhbGx5IHVuaXF1ZSBzY2VuYXJpbyBuYW1lcyBmb3Iga2V5cyB3aXRoIGxpc3Qgb2YgR3JlbWxpbiB0cmF2ZXJzYWxzIGFzIHRoZXkgYXBwZWFyCitkZWYgZ3JlbWxpbnMgPSBGZWF0dXJlUmVhZGVyLnBhcnNlR3JvdXBlZChQYXRocy5nZXQoIiR7cHJvamVjdEJhc2VEaXJ9IiwgImdyZW1saW4tdGVzdCIsICJzcmMiLCAibWFpbiIsICJyZXNvdXJjZXMiLCAib3JnIiwgImFwYWNoZSIsICJ0aW5rZXJwb3AiLCAiZ3JlbWxpbiIsICJ0ZXN0IiwgImZlYXR1cmVzIikudG9TdHJpbmcoKSkKKworZGVmIHNjZW5hcmlvcyA9IGdyZW1saW5zLmNvbGxlY3QgeyBzY2VuYXJpb05hbWUsIHRyYXZlcnNhbHMgLT4KKyAgICBkZWYgdHJhbnNsYXRlZFRyYXZlcnNhbHMgPSB0cmF2ZXJzYWxzLmNvbGxlY3QgeyBvcmlnaW5hbCAtPgorICAgICAgICBkZWYgZW50cnkgPSBbb3JpZ2luYWw6IG9yaWdpbmFsXQorICAgICAgICBUcmFuc2xhdG9yLnZhbHVlcygpLmVhY2ggeyB0cmFuc2xhdG9yIC0+CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRlZiBsYW5ndWFnZSA9IHRyYW5zbGF0b3IubmFtZSgpLnRvTG93ZXJDYXNlKCkKKyAgICAgICAgICAgICAgICBlbnRyeVtsYW5ndWFnZV0gPSBHcmVtbGluVHJhbnNsYXRvci50cmFuc2xhdGUob3JpZ2luYWwsIHRyYW5zbGF0b3IpLmdldFRyYW5zbGF0ZWQoKQorICAgICAgICAgICAgfSBjYXRjaCAoVHJhbnNsYXRvckV4Y2VwdGlvbiBpZ25vcmVkKSB7CisgICAgICAgICAgICAgICAgLy8gZW50cnlbbGFuZ3VhZ2VdIHN0YXlzIHVuZGVmaW5lZC9udWxsCisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgeworICAgICAgICAgICAgICAgIC8vIGVudHJ5W2xhbmd1YWdlXSBzdGF5cyB1bmRlZmluZWQvbnVsbAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBlbnRyeQorICAgIH0KKworICAgIHJldHVybiBbc2NlbmFyaW86IHNjZW5hcmlvTmFtZSwgdHJhdmVyc2FsczogdHJhbnNsYXRlZFRyYXZlcnNhbHNdCit9CisKK2RlZiBqc29uID0gbmV3IEpzb25CdWlsZGVyKHNjZW5hcmlvcykKK291dHB1dEZpbGUud2l0aFdyaXRlcignVVRGLTgnKSB7IHdyaXRlciAtPgorICAgIHdyaXRlci53cml0ZShqc29uLnRvUHJldHR5U3RyaW5nKCkpCit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3QvcG9tLnhtbCBiL2dyZW1saW4tdGVzdC9wb20ueG1sCmluZGV4IGI2MTRiN2YuLjYyYWQ4OGMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9wb20ueG1sCisrKyBiL2dyZW1saW4tdGVzdC9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tdGVzdDwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gVGVzdDwvbmFtZT4KQEAgLTc2LDcgKzc2LDYgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmluamVjdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1aWNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtndWljZS52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC04OCw2ICs4NywxNyBAQAogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5rZXJieTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmtlcmItc2ltcGxla2RjPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtrZXJieS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy53aWxkZmx5LmNvbW1vbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+d2lsZGZseS1jb21tb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcud2lsZGZseS5jb21tb248L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53aWxkZmx5LWNvbW1vbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS40LkZpbmFsPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPGJ1aWxkPgpAQCAtMTA3LDYgKzExNyw1NiBAQAogICAgICAgICA8L3Rlc3RSZXNvdXJjZXM+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuZ21hdmVucGx1czwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nbWF2ZW5wbHVzLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLmxvZ2JhY2s8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5sb2diYWNrLWNsYXNzaWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2xvZ2JhY2sudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eS1hbGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ3Jvb3Z5PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3Jvb3Z5LWpzb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLXRyYW5zbGF0b3ItZGF0YTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5leGVjdXRlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5wcm9qZWN0QmFzZURpcjwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYmFzZWRpcn0vLi4vPC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+JHtwcm9qZWN0LmJhc2VkaXJ9L2J1aWxkL2dlbmVyYXRlLXRyYW5zbGF0b3ItZGF0YS5ncm9vdnk8L3NjcmlwdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NjcmlwdHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPC9wbHVnaW4+CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL0Fic3RyYWN0R3JhcGhQcm92aWRlci5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9BYnN0cmFjdEdyYXBoUHJvdmlkZXIuamF2YQppbmRleCBlZjQ1ZTFjLi44NzcyN2U3IDEwMDY0NAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL0Fic3RyYWN0R3JhcGhQcm92aWRlci5qYXZhCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vQWJzdHJhY3RHcmFwaFByb3ZpZGVyLmphdmEKQEAgLTQ3LDggKzQ3LDcgQEAKICAgICAvKioKICAgICAgKiBQcm92aWRlcyBhIGJhc2ljIGNvbmZpZ3VyYXRpb24gZm9yIGEgcGFydGljdWxhciB7QGxpbmsgR3JhcGh9IGluc3RhbmNlIGFuZCB1c2VzIHRoZSB7QGNvZGUgZ3JhcGhOYW1lfSB0byBlbnN1cmUKICAgICAgKiB0aGF0IHRoZSBpbnN0YW5jZSBpcyB1bmlxdWUuICBJdCBpcyB1cCB0byB0aGUgR3JlbWxpbiBpbXBsZW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgaG93IGJlc3QgdG8gdXNlIHRoZQotICAgICAqIHtAY29kZSBncmFwaE5hbWV9IHRvIGVuc3VyZSB1bmlxdWVuZXNzLiAgRm9yIGV4YW1wbGUsIE5lbzRqLCBtaWdodCB1c2UgdGhlIHtAY29kZSBncmFwaE5hbWV9IG1pZ2h0IGJlIHVzZWQgdG8KLSAgICAgKiBjcmVhdGUgYSBkaWZmZXJlbnQgc3ViLWRpcmVjdG9yeSB3aGVyZSB0aGUgZ3JhcGggaXMgc3RvcmVkLgorICAgICAqIHtAY29kZSBncmFwaE5hbWV9IHRvIGVuc3VyZSB1bmlxdWVuZXNzLgogICAgICAqIDxwLz4KICAgICAgKiBUaGUgQHtjb2RlIHRlc3R9IGFuZCBAe2NvZGUgdGVzdE1ldGhvZE5hbWV9IGNhbiBiZSB1c2VkIHRvIGFsdGVyIGdyYXBoIGNvbmZpZ3VyYXRpb25zIGZvciBzcGVjaWZpYyB0ZXN0cy4KICAgICAgKiBGb3IgZXhhbXBsZSwgYSBncmFwaCB0aGF0IGhhcyBzdXBwb3J0IGZvciBkaWZmZXJlbnQgdHJhbnNhY3Rpb24gaXNvbGF0aW9uIGxldmVscyBtaWdodCBvbmx5IHN1cHBvcnQgYSBmZWF0dXJlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2ZlYXR1cmVzL1N0ZXBEZWZpbml0aW9uLmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2ZlYXR1cmVzL1N0ZXBEZWZpbml0aW9uLmphdmEKaW5kZXggZGMwNzBmNy4uMDk5ODc5OSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9mZWF0dXJlcy9TdGVwRGVmaW5pdGlvbi5qYXZhCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZmVhdHVyZXMvU3RlcERlZmluaXRpb24uamF2YQpAQCAtNDUsNiArNDUsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRGlyZWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKQEAgLTY1LDYgKzY2LDI3IEBACiBpbXBvcnQgb3JnLmphdmF0dXBsZXMuVHJpcGxldDsKIGltcG9ydCBvcmcuanVuaXQuQXNzdW1wdGlvblZpb2xhdGVkRXhjZXB0aW9uOwogCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOworaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CitpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkZ1bmN0aW9uOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLmNvbW1vbnMudGV4dC5TdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVKYXZhOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAuZXE7CkBAIC04MCwyNSArMTAyLDYgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CiAKLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KIEBTY2VuYXJpb1Njb3BlZAogcHVibGljIGZpbmFsIGNsYXNzIFN0ZXBEZWZpbml0aW9uIHsKIApAQCAtMTA2LDYgKzEwOSw3IEBACiAKICAgICBwcml2YXRlIFdvcmxkIHdvcmxkOwogICAgIHByaXZhdGUgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZzsKKyAgICBwcml2YXRlIEZpbGUgdGVtcFdvcmtpbmdEaXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHN0cmluZ1BhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHNpZGVFZmZlY3RzID0gbmV3IEhhc2hNYXA8PigpOwogICAgIHByaXZhdGUgVHJhdmVyc2FsIHRyYXZlcnNhbDsKQEAgLTEzNSw2ICsxMzksMTIgQEAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsaXN0SXRlbXMgPSBpdGVtcy5zdHJlYW0oKS5tYXAoU3RyaW5nOjp0cmltKS5tYXAoeCAtPiBjb252ZXJ0VG9TdHJpbmcoeCkpLmNvbGxlY3QoQ29sbGVjdG9ycy5qb2luaW5nKCIsIikpOwogICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQoIlslc10iLCBsaXN0SXRlbXMpOwogICAgICAgICB9KSk7CisgICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCJzXFxbXFxdIiksIHMgLT4gInt9IikpOworICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgic1xcWyguKilcXF0iKSwgcyAtPiB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBpdGVtcyA9IHMuc3BsaXQoIiwiKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZXRJdGVtcyA9IFN0cmVhbS5vZihpdGVtcykubWFwKFN0cmluZzo6dHJpbSkubWFwKHggLT4gY29udmVydFRvU3RyaW5nKHgpKS5jb2xsZWN0KENvbGxlY3RvcnMuam9pbmluZygiLCIpKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KCJ7JXN9Iiwgc2V0SXRlbXMpOworICAgICAgICB9KSk7CiAgICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCJzXFxbXFxdIiksIHMgLT4gU3RyaW5nLmZvcm1hdCgie30iKSkpOwogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgic1xcWyguKilcXF0iKSwgcyAtPiB7CiAgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gaXRlbXMgPSBzcGxpdEJ5RWxlbWVudChzKTsKQEAgLTE1NywxMSArMTY3LDYgQEAKIAogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgidlxcWyguKylcXF1cXC5pZCIpLCBzIC0+IHdvcmxkLmNvbnZlcnRJZFRvU2NyaXB0KGcuVigpLmhhcygibmFtZSIsIHMpLmlkKCkubmV4dCgpLCBWZXJ0ZXguY2xhc3MpKSk7CiAgICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCJ2XFxbKC4rKVxcXVxcLnNpZCIpLCBzIC0+IHdvcmxkLmNvbnZlcnRJZFRvU2NyaXB0KGcuVigpLmhhcygibmFtZSIsIHMpLmlkKCkubmV4dCgpLCBWZXJ0ZXguY2xhc3MpKSk7Ci0gICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCJ2XFxbKC4rKVxcXSIpLCBzIC0+IHsKLSAgICAgICAgICAgIGZpbmFsIEl0ZXJhdG9yPE9iamVjdD4gaXR0eSA9IGcuVigpLmhhcygibmFtZSIsIHMpLmlkKCk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgibmV3IFZlcnRleCglcyxcIiVzXCIpIiwgaXR0eS5oYXNOZXh0KCkgPwotICAgICAgICAgICAgICAgICAgICB3b3JsZC5jb252ZXJ0SWRUb1NjcmlwdChpdHR5Lm5leHQoKSwgVmVydGV4LmNsYXNzKSA6IHMsIFZlcnRleC5ERUZBVUxUX0xBQkVMKTsKLSAgICAgICAgfSkpOwogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgiZVxcWyguKylcXF1cXC5pZCIpLCBzIC0+IHdvcmxkLmNvbnZlcnRJZFRvU2NyaXB0KGdldEVkZ2VJZChnLCBzKSwgRWRnZS5jbGFzcykpKTsKICAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoImVcXFsoLispXFxdXFwuc2lkIiksIHMgLT4gd29ybGQuY29udmVydElkVG9TY3JpcHQoZ2V0RWRnZUlkKGcsIHMpLCBFZGdlLmNsYXNzKSkpOwogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgidFxcWyguKilcXF0iKSwgcyAtPiBTdHJpbmcuZm9ybWF0KCJULiVzIiwgcykpKTsKQEAgLTE3MCwxNSArMTc1LDYgQEAKICAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoIihudWxsKSIpLCBzIC0+ICJudWxsIikpOwogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgiKHRydWUpIiksIHMgLT4gInRydWUiKSk7CiAgICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCIoZmFsc2UpIiksIHMgLT4gImZhbHNlIikpOwotCi0gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgZm9yY2UgaWdub3JlIGNvbmRpdGlvbnMgYXMgdGhleSBjYW5ub3QgYmUgcGFyc2VkIGJ5IHRoZSBncmFtbWFyIGF0IHRoaXMgdGltZS4gdGhlIGdyYW1tYXIgd2lsbAotICAgICAgICAvLyBuZWVkIHRvIGJlIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGVtIG9yIHBlcmhhcHMgdGhlc2UgdGVzdHMgc3RheSByZWxlZ2F0ZWQgdG8gdGhlIEpWTSBpbiBzb21lIHdheQotICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgiZVxcWyguKylcXF0iKSwgcyAtPiB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzdW1wdGlvblZpb2xhdGVkRXhjZXB0aW9uKCJUaGlzIHRlc3QgdXNlcyBhIEVkZ2UgYXMgYSBwYXJhbWV0ZXIgd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSBncmVtbGluLWxhbmd1YWdlIik7Ci0gICAgICAgIH0pKTsKLSAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoInBcXFsoLiopXFxdIiksIHMgLT4gewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc3VtcHRpb25WaW9sYXRlZEV4Y2VwdGlvbigiVGhpcyB0ZXN0IHVzZXMgYSBQYXRoIGFzIGEgcGFyYW1ldGVyIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZ3JlbWxpbi1sYW5ndWFnZSIpOwotICAgICAgICB9KSk7CiAgICAgfX07CiAKICAgICBwcml2YXRlIExpc3Q8UGFpcjxQYXR0ZXJuLCBGdW5jdGlvbjxTdHJpbmcsT2JqZWN0Pj4+IG9iamVjdE1hdGNoZXJDb252ZXJ0ZXJzID0gbmV3IEFycmF5TGlzdDxQYWlyPFBhdHRlcm4sIEZ1bmN0aW9uPFN0cmluZyxPYmplY3Q+Pj4oKSB7ewpAQCAtMTkzLDEzICsxODksMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSkpOwogCi0gICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCJsXFxbXFxdIiksIHMgLT4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpKTsKKyAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoImxcXFtcXF0iKSwgcyAtPiBuZXcgQXJyYXlMaXN0PD4oKSkpOwogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgibFxcWyguKilcXF0iKSwgcyAtPiB7CiAgICAgICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gaXRlbXMgPSBzcGxpdEJ5RWxlbWVudChzKTsKICAgICAgICAgICAgIHJldHVybiBpdGVtcy5zdHJlYW0oKS5tYXAoU3RyaW5nOjp0cmltKS5tYXAoeCAtPiBjb252ZXJ0VG9PYmplY3QoeCkpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CiAgICAgICAgIH0pKTsKIAotICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgic1xcW1xcXSIpLCBzIC0+IENvbGxlY3Rpb25zLmVtcHR5U2V0KCkpKTsKKyAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoInNcXFtcXF0iKSwgcyAtPiBuZXcgSGFzaFNldDw+KCkpKTsKICAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoInNcXFsoLiopXFxdIiksIHMgLT4gewogICAgICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IGl0ZW1zID0gc3BsaXRCeUVsZW1lbnQocyk7CiAgICAgICAgICAgICByZXR1cm4gaXRlbXMuc3RyZWFtKCkubWFwKFN0cmluZzo6dHJpbSkubWFwKHggLT4gY29udmVydFRvT2JqZWN0KHgpKS5jb2xsZWN0KENvbGxlY3RvcnMudG9TZXQoKSk7CkBAIC0yMDgsMTAgKzIwNCwxMyBAQAogICAgICAgICAvLyByZXR1cm4gdGhlIHN0cmluZyB2YWx1ZXMgYXMgaXMsIHVzZWQgdG8gd3JhcCByZXN1bHRzIHRoYXQgbWF5IGNvbnRhaW4gb3RoZXIgcmVnZXggcGF0dGVybnMKICAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoInN0clxcWyguKilcXF0iKSwgU3RyaW5nOjp2YWx1ZU9mKSk7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogVE9ETyBGSVhNRSBBZGQgc2FtZSBzdXBwb3J0IGZvciBvdGhlciBsYW5ndWFnZXMgKGpzLCBweXRob24sIC5uZXQpCi0gICAgICAgICAqLwogICAgICAgICBhZGQoUGFpci53aXRoKFBhdHRlcm4uY29tcGlsZSgidnBcXFsoLispXFxdIiksIHMgLT4gZ2V0VmVydGV4UHJvcGVydHkoZywgcykpKTsKKyAgICAgICAgYWRkKFBhaXIud2l0aChQYXR0ZXJuLmNvbXBpbGUoInByb3BcXFsoLispXFxdIiksIHMgLT4geworICAgICAgICAgICAgZmluYWwgaW50IGNvbW1hSWR4ID0gcy5pbmRleE9mKCIsIik7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcga2V5ID0gcy5zdWJzdHJpbmcoMCwgY29tbWFJZHgpOworICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlID0gY29udmVydFRvT2JqZWN0KHMuc3Vic3RyaW5nKGNvbW1hSWR4ICsgMSkpOworICAgICAgICAgICAgcmV0dXJuIFBhaXIud2l0aChrZXksIHZhbHVlKTsKKyAgICAgICAgfSkpOwogCiAgICAgICAgIGFkZChQYWlyLndpdGgoUGF0dGVybi5jb21waWxlKCJwXFxbKC4qKVxcXSIpLCBzIC0+IHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGl0ZW1zID0gcy5zcGxpdCgiLCIpOwpAQCAtMzAyLDEyICszMDEsMzIgQEAKIAogICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJlc3VsdCA9IG51bGw7CiAgICAgICAgIGlmIChlcnJvciAhPSBudWxsKSBlcnJvciA9IG51bGw7CisKKyAgICAgICAgdGVtcFdvcmtpbmdEaXIgPSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXIubWFrZVRlc3REYXRhUGF0aChTdGVwRGVmaW5pdGlvbi5jbGFzcywgInRlbXAiLCBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpKTsKKyAgICAgICAgaWYgKCF0ZW1wV29ya2luZ0Rpci5leGlzdHMoKSkgdGVtcFdvcmtpbmdEaXIubWtkaXJzKCk7CiAgICAgfQogCiAgICAgQEFmdGVyCiAgICAgcHVibGljIHZvaWQgYWZ0ZXJFYWNoU2NlbmFyaW8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgd29ybGQuYWZ0ZXJFYWNoU2NlbmFyaW8oKTsKICAgICAgICAgaWYgKGcgIT0gbnVsbCkgZy5jbG9zZSgpOworCisgICAgICAgIGlmICh0ZW1wV29ya2luZ0RpciAhPSBudWxsICYmIHRlbXBXb3JraW5nRGlyLmV4aXN0cygpKSB7CisgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnkodGVtcFdvcmtpbmdEaXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZWxldGVEaXJlY3RvcnkoZmluYWwgRmlsZSBkaXJlY3RvcnkpIHsKKyAgICAgICAgaWYgKGRpcmVjdG9yeS5leGlzdHMoKSkgeworICAgICAgICAgICAgZm9yIChGaWxlIGZpbGUgOiBkaXJlY3RvcnkubGlzdEZpbGVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZURpcmVjdG9yeShmaWxlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmaWxlLmRlbGV0ZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdG9yeS5kZWxldGUoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBHaXZlbigidGhlIHt3b3JkfSBncmFwaCIpCkBAIC0zOTMsNiArNDEyLDcgQEAKIAogICAgICAgICAvLyBza2lwIHRoZSBoZWFkZXIgaW4gdGhlIGRhdGFUYWJsZQogICAgICAgICBmaW5hbCBPYmplY3RbXSBleHBlY3RlZCA9IGRhdGFUYWJsZS5hc0xpc3QoKS5zdHJlYW0oKS5za2lwKDEpLm1hcCh0aGlzOjpjb252ZXJ0VG9PYmplY3QpLnRvQXJyYXkoKTsKKwogICAgICAgICBhc3NlcnRUaGF0KGFjdHVhbCwgY29udGFpbnNJbkFueU9yZGVyKGV4cGVjdGVkKSk7CiAgICAgfQogCkBAIC01NjksNiArNTg5LDEzIEBACiAgICAgICAgIGVycm9yID0gbnVsbDsKICAgICB9CiAKKyAgICBAVGhlbigidGhlIGZpbGUge3N0cmluZ30gc2hvdWxkIGV4aXN0IikKKyAgICBwdWJsaWMgdm9pZCB0aGVGaWxlWFNob3VsZEV4aXN0KGZpbmFsIFN0cmluZyBmaWxlTmFtZSkgeworICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZSh0ZW1wV29ya2luZ0RpciwgZmlsZU5hbWUpOworICAgICAgICBhc3NlcnRUaGF0KGZpbGUuZXhpc3RzKCksIENvcmVNYXRjaGVycy5pcyh0cnVlKSk7CisgICAgICAgIGFzc2VydFRoYXQoZmlsZS5sZW5ndGgoKSA+IDAsIENvcmVNYXRjaGVycy5pcyh0cnVlKSk7CisgICAgfQorCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgQEdpdmVuKCJhbiB1bnN1cHBvcnRlZCB0ZXN0IikKQEAgLTYxNCw2ICs2NDEsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlua2VkSGFzaE1hcCgpIHt7CiAgICAgICAgICAgICAgICAgICAgIHB1dCgoKE1hcC5FbnRyeTw/LCA/PikgbykuZ2V0S2V5KCksICgoTWFwLkVudHJ5PD8sID8+KSBvKS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICB9fTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobyBpbnN0YW5jZW9mIFByb3BlcnR5ICYmICEobyBpbnN0YW5jZW9mIFZlcnRleFByb3BlcnR5KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBQYWlyLndpdGgoKChQcm9wZXJ0eSkgbykua2V5KCksICgoUHJvcGVydHkpIG8pLnZhbHVlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAgICAgIH0KQEAgLTc3Myw4ICs4MDIsMTcgQEAKICAgICAgICAgZmluYWwgTWF0Y2hlciBtYXRjaGVyID0gaW9QYXR0ZXJuLm1hdGNoZXIoZG9jU3RyaW5nKTsKICAgICAgICAgaWYgKCEgbWF0Y2hlci5tYXRjaGVzKCkpIHsgcmV0dXJuIGRvY1N0cmluZzsgfQogICAgICAgICBmaW5hbCBTdHJpbmcgcmVsUGF0aCA9IG1hdGNoZXIuZ3JvdXAoMSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBhYnNQYXRoID0gd29ybGQuY2hhbmdlUGF0aFRvRGF0YUZpbGUocmVsUGF0aCk7Ci0gICAgICAgIHJldHVybiBkb2NTdHJpbmcucmVwbGFjZShyZWxQYXRoLCBlc2NhcGVKYXZhKGFic1BhdGgpKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcgYWJzUGF0aDsKKyAgICAgICAgaWYgKG5ldyBGaWxlKCJkYXRhLyIgKyByZWxQYXRoKS5leGlzdHMoKSkgeworICAgICAgICAgICAgYWJzUGF0aCA9IHdvcmxkLmNoYW5nZVBhdGhUb0RhdGFGaWxlKHJlbFBhdGgpOworICAgICAgICB9IGVsc2UgaWYgKG5ldyBGaWxlKHRlbXBXb3JraW5nRGlyLCByZWxQYXRoKS5leGlzdHMoKSB8fCBkb2NTdHJpbmcuY29udGFpbnMoIi53cml0ZSgpIikpIHsKKyAgICAgICAgICAgIGFic1BhdGggPSBuZXcgRmlsZSh0ZW1wV29ya2luZ0RpciwgcmVsUGF0aCkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhYnNQYXRoID0gd29ybGQuY2hhbmdlUGF0aFRvRGF0YUZpbGUocmVsUGF0aCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZG9jU3RyaW5nLnJlcGxhY2UocmVsUGF0aCwgZXNjYXBlSmF2YShhYnNQYXRoLnJlcGxhY2UoJ1xcJywgJy8nKSkpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIERpcmVjdGlvbiBnZXREaXJlY3Rpb24oZmluYWwgU3RyaW5nIGRpcmVjdGlvbikgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9mZWF0dXJlcy9UZXN0RmlsZXMuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZmVhdHVyZXMvVGVzdEZpbGVzLmphdmEKaW5kZXggZmYyYzhkMy4uZGRmNjdhNSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9mZWF0dXJlcy9UZXN0RmlsZXMuamF2YQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2ZlYXR1cmVzL1Rlc3RGaWxlcy5qYXZhCkBAIC02Nyw3ICs2Nyw2IEBACiAKICAgICAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBzY3JpcHRSZXNvdXJjZXMgPSBBcnJheXMuYXNMaXN0KAogICAgICAgICAgICAgICAgICAgICAidGlua2VycG9wLWNsYXNzaWMudHh0IiwKLSAgICAgICAgICAgICAgICAgICAgInNjcmlwdC1pbnB1dC5ncm9vdnkiLAogICAgICAgICAgICAgICAgICAgICAic2NyaXB0LW91dHB1dC5ncm9vdnkiLAogICAgICAgICAgICAgICAgICAgICAiZ3JhdGVmdWwtZGVhZC50eHQiLAogICAgICAgICAgICAgICAgICAgICAic2NyaXB0LWlucHV0LWdyYXRlZnVsLWRlYWQuZ3Jvb3Z5IiwKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZmVhdHVyZXMvV29ybGQuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZmVhdHVyZXMvV29ybGQuamF2YQppbmRleCA0NWNhMTU2Li4wZTQxYjg3IDEwMDY0NAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2ZlYXR1cmVzL1dvcmxkLmphdmEKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9mZWF0dXJlcy9Xb3JsZC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICogcG9pbnQgdG8gZmlsdGVyaW5nIGF3YXkgdGVzdHMgdXNpbmcgdGhlICJ0YWdzIiBhcmd1bWVudCBmb3Ige0BsaW5rIEN1Y3VtYmVyT3B0aW9uc30uCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JBUEhDT01QVVRFUl9UQUdfRklMVEVSID0KLSAgICAgICAgICAgICJub3QgQFN0ZXBEcm9wIGFuZCBub3QgQFN0ZXBWIGFuZCBub3QgQFN0ZXBFIGFuZCBub3QgQFN0ZXBJbmRleCBhbmQgbm90IEBTdGVwSW5qZWN0IGFuZCAiICsKKyAgICAgICAgICAgICJub3QgQFN0ZXBEcm9wIGFuZCBub3QgQFN0ZXBWIGFuZCBub3QgQFN0ZXBFIGFuZCBub3QgQFN0ZXBJbmRleCBhbmQgbm90IEBTdGVwSW5qZWN0IGFuZCBub3QgQFN0ZXBXcml0ZSBhbmQgIiArCiAgICAgICAgICAgICAibm90IEBTdGVwU3ViZ3JhcGggYW5kIG5vdCBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbk1pZEVOb3RTdXBwb3J0ZWQgYW5kICIgKwogICAgICAgICAgICAgIm5vdCBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbk9uZUJ1bGsgYW5kIG5vdCBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5Tm90U3VwcG9ydGVkIGFuZCAiICsKICAgICAgICAgICAgICJub3QgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25NaWRWTm90U3VwcG9ydGVkIGFuZCBub3QgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25FbGVtZW50U3VwcG9ydGVkIGFuZCAiICsKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0JpbmRpbmdzU2NyaXB0RW5naW5lVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvQmluZGluZ3NTY3JpcHRFbmdpbmVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZDk2YjUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvQmluZGluZ3NTY3JpcHRFbmdpbmVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uU3RvcmFnZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmF4LnNjcmlwdC5CaW5kaW5nczsKLWltcG9ydCBqYXZheC5zY3JpcHQuU2NyaXB0Q29udGV4dDsKLWltcG9ydCBqYXZheC5zY3JpcHQuU2NyaXB0RXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnNjcmlwdC5TaW1wbGVCaW5kaW5nczsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluU2NyaXB0RW5naW5lU3VpdGUuRU5HSU5FX1RPX1RFU1Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc3VtZS5hc3N1bWVUaGF0OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdzU2NyaXB0RW5naW5lVGVzdCB7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEluY2x1ZGVHbG9iYWxCaW5kaW5ncygpIHRocm93cyBTY3JpcHRFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlciBtYW5hZ2VyID0gbmV3IERlZmF1bHRHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlcigpOwotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIGIucHV0KCJ4IiwgMSk7Ci0gICAgICAgIGIucHV0KCJ5IiwgMik7Ci0KLSAgICAgICAgbWFuYWdlci5hZGRQbHVnaW4oQmluZGluZ3NHcmVtbGluUGx1Z2luLmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgYmluZGluZ3MoYikuY3JlYXRlKCkpOwotCi0gICAgICAgIGZpbmFsIEdyZW1saW5TY3JpcHRFbmdpbmUgZW5naW5lID0gbWFuYWdlci5nZXRFbmdpbmVCeU5hbWUoRU5HSU5FX1RPX1RFU1QpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZW5naW5lLmV2YWwoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBlbmdpbmUuZXZhbCgieSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlbW92ZUdsb2JhbEJpbmRpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIERlZmF1bHRHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlciBtYW5hZ2VyID0gbmV3IERlZmF1bHRHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlcigpOwotICAgICAgICBtYW5hZ2VyLnB1dCgieCIsIDEwMCk7Ci0KLSAgICAgICAgZmluYWwgR3JlbWxpblNjcmlwdEVuZ2luZSBlbmdpbmUxID0gbWFuYWdlci5nZXRFbmdpbmVCeU5hbWUoRU5HSU5FX1RPX1RFU1QpOwotICAgICAgICBhc3NlcnRUaGF0KGVuZ2luZTEuZ2V0QmluZGluZ3MoU2NyaXB0Q29udGV4dC5HTE9CQUxfU0NPUEUpLnNpemUoKSwgaXMoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAxLCAoaW50KSBlbmdpbmUxLmV2YWwoIngrMSIpKTsKLQotICAgICAgICBtYW5hZ2VyLmdldEJpbmRpbmdzKCkucmVtb3ZlKCJ4Iik7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5TY3JpcHRFbmdpbmUgZW5naW5lMiA9IG1hbmFnZXIuZ2V0RW5naW5lQnlOYW1lKEVOR0lORV9UT19URVNUKTsKLSAgICAgICAgYXNzZXJ0VGhhdChlbmdpbmUyLmdldEJpbmRpbmdzKFNjcmlwdENvbnRleHQuR0xPQkFMX1NDT1BFKS5zaXplKCksIGlzKDApKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEFkZExhenlHbG9iYWxCaW5kaW5nc1ZpYVBsdWdpbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBiaW5kaW5ncy5wdXQoIngiLCAxMDApOwotICAgICAgICBmaW5hbCBCaW5kaW5nc0dyZW1saW5QbHVnaW4gcGx1Z2luID0gbmV3IEJpbmRpbmdzR3JlbWxpblBsdWdpbigoKSAtPiBiaW5kaW5ncyk7Ci0KLSAgICAgICAgZmluYWwgRGVmYXVsdEdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyIG1hbmFnZXIgPSBuZXcgRGVmYXVsdEdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyKCk7Ci0gICAgICAgIG1hbmFnZXIuYWRkUGx1Z2luKHBsdWdpbik7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5TY3JpcHRFbmdpbmUgZW5naW5lID0gbWFuYWdlci5nZXRFbmdpbmVCeU5hbWUoRU5HSU5FX1RPX1RFU1QpOwotICAgICAgICBhc3NlcnRUaGF0KGVuZ2luZS5nZXRCaW5kaW5ncyhTY3JpcHRDb250ZXh0LkdMT0JBTF9TQ09QRSkuc2l6ZSgpLCBpcygxKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDEsIChpbnQpIGVuZ2luZS5ldmFsKCJ4KzEiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFeHRyYWN0R2xvYmFsQmluZGluZ3NBZnRlclNjcmlwdEV4ZWN1dGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3N1bWVUaGF0KCJPbmx5IHdvcmtzIHdpdGggZ3JlbWxpbi1ncm9vdnkiLCBFTkdJTkVfVE9fVEVTVCwgaXMoImdyZW1saW4tZ3Jvb3Z5IikpOwotICAgICAgICBmaW5hbCBHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlciBtYW5hZ2VyID0gbmV3IERlZmF1bHRHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlcigpOwotCi0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGIxID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIGIxLnB1dCgieCIsIDEpOwotICAgICAgICBiMS5wdXQoInkiLCAyKTsKLSAgICAgICAgbWFuYWdlci5hZGRQbHVnaW4oQmluZGluZ3NHcmVtbGluUGx1Z2luLmJ1aWxkKCkuYmluZGluZ3MoYjEpLmNyZWF0ZSgpKTsKLQotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiMiA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBiMi5wdXQoIngiLCAxMDApOwotICAgICAgICBiMi5wdXQoInkiLCAyMDApOwotICAgICAgICBtYW5hZ2VyLmFkZFBsdWdpbihCaW5kaW5nc0dyZW1saW5QbHVnaW4uYnVpbGQoKS5iaW5kaW5ncyhiMikuY3JlYXRlKCkpOwotCi0gICAgICAgIGZpbmFsIEZpbGUgc2NyaXB0RmlsZSA9IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZShCaW5kaW5nc1NjcmlwdEVuZ2luZVRlc3QuY2xhc3MsICJiaW5kaW5ncy1pbml0Lmdyb292eSIsICIuZ3Jvb3Z5Iik7Ci0gICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBmaWxlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmaWxlcy5hZGQoU3RvcmFnZS50b1BhdGgoc2NyaXB0RmlsZSkpOwotICAgICAgICBtYW5hZ2VyLmFkZFBsdWdpbihTY3JpcHRGaWxlR3JlbWxpblBsdWdpbi5idWlsZCgpLmZpbGVzKGZpbGVzKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgZmluYWwgR3JlbWxpblNjcmlwdEVuZ2luZSBlbmdpbmUgPSBtYW5hZ2VyLmdldEVuZ2luZUJ5TmFtZShFTkdJTkVfVE9fVEVTVCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDAsIGVuZ2luZS5ldmFsKCJ4IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBlbmdpbmUuZXZhbCgieSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMCwgZW5naW5lLmV2YWwoInoiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2MDAsIGVuZ2luZS5ldmFsKCJhZGRJdFVwKHosIGFkZEl0VXAoeCx5KSkiKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMCwgZW5naW5lLmdldEJpbmRpbmdzKFNjcmlwdENvbnRleHQuR0xPQkFMX1NDT1BFKS5nZXQoInoiKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZW5naW5lLmdldEJpbmRpbmdzKFNjcmlwdENvbnRleHQuRU5HSU5FX1NDT1BFKS5jb250YWluc0tleSgieiIpLCBpcyhmYWxzZSkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0dyZW1saW5FbmFibGVkU2NyaXB0RW5naW5lVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpbkVuYWJsZWRTY3JpcHRFbmdpbmVUZXN0LmphdmEKaW5kZXggYzAzOTk2My4uZmZlMGQ4ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpbkVuYWJsZWRTY3JpcHRFbmdpbmVUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpbkVuYWJsZWRTY3JpcHRFbmdpbmVUZXN0LmphdmEKQEAgLTI2LDE4ICsyNiwxNCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLmZ1bmN0aW9uLkxhbWJkYTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAotaW1wb3J0IGphdmF4LnNjcmlwdC5CaW5kaW5nczsKLWltcG9ydCBqYXZheC5zY3JpcHQuU2ltcGxlQmluZGluZ3M7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZVN1aXRlLkVOR0lORV9UT19URVNUOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3N1bWUuYXNzdW1lVGhhdDsKQEAgLTUyLDkyICs0OCw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXIgbWFuYWdlciA9IG5ldyBEZWZhdWx0R3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXIoKTsKIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRXZhbEJ5dGVjb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5TY3JpcHRFbmdpbmUgc2NyaXB0RW5naW5lID0gbWFuYWdlci5nZXRFbmdpbmVCeU5hbWUoRU5HSU5FX1RPX1RFU1QpOwotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotCi0gICAgICAgIC8vIHB1cnBvc2VmdWxseSB1c2UgIngiIHRvIG1hdGNoIHRoZSBuYW1lIG9mIHRoZSB0cmF2ZXJzYWwgc291cmNlIGJpbmRpbmcgZm9yICJ4IiBiZWxvdyBhbmQKLSAgICAgICAgLy8gdGh1cyB0ZXN0cyB0aGUgYWxpYXMgYWRkZWQgZm9yICJ4IgotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbCB0ID0gZ2V0VHJhdmVyc2FsV2l0aExhbWJkYShnKTsKLQotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBiaW5kaW5ncy5wdXQoIngiLCBnKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgZXZhbGQgPSBzY3JpcHRFbmdpbmUuZXZhbCh0LmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLCBiaW5kaW5ncywgIngiKTsKLQotICAgICAgICBhc3NlcnRUcmF2ZXJzYWxzKHQsIGV2YWxkKTsKLQotICAgICAgICBhc3NlcnRUaGF0KG1hbmFnZXIuZ2V0QmluZGluZ3MoKS5jb250YWluc0tleShHcmVtbGluU2NyaXB0RW5naW5lLkhJRERFTl9HKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBbGxvd0J5dGVjb2RlRXZhbFdpdGhBbGlhc0luQmluZGluZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JlbWxpblNjcmlwdEVuZ2luZSBzY3JpcHRFbmdpbmUgPSBtYW5hZ2VyLmdldEVuZ2luZUJ5TmFtZShFTkdJTkVfVE9fVEVTVCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gRW1wdHlHcmFwaC5pbnN0YW5jZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0KLSAgICAgICAgLy8gcHVycG9zZWZ1bGx5IHVzZSAieCIgdG8gbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIHRyYXZlcnNhbCBzb3VyY2UgYmluZGluZyBmb3IgIngiIGJlbG93IGFuZAotICAgICAgICAvLyB0aHVzIHRlc3RzIHRoZSBhbGlhcyBhZGRlZCBmb3IgIngiCi0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsIHQgPSBnZXRUcmF2ZXJzYWxXaXRoTGFtYmRhKGcpOwotCi0gICAgICAgIGZpbmFsIEJpbmRpbmdzIGJpbmRpbmdzID0gbmV3IFNpbXBsZUJpbmRpbmdzKCk7Ci0gICAgICAgIGJpbmRpbmdzLnB1dCgieCIsIGcpOwotICAgICAgICBiaW5kaW5ncy5wdXQoR3JlbWxpblNjcmlwdEVuZ2luZS5ISURERU5fRywgZyk7Ci0KLSAgICAgICAgc2NyaXB0RW5naW5lLmV2YWwodC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwgYmluZGluZ3MsICJ4Iik7Ci0gICAgfQotCi0gICAgQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90QWxsb3dCeXRlY29kZUV2YWxXaXRoQWxpYXNBc1RyYXZlcnNhbFNvdXJjZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmVtbGluU2NyaXB0RW5naW5lIHNjcmlwdEVuZ2luZSA9IG1hbmFnZXIuZ2V0RW5naW5lQnlOYW1lKEVOR0lORV9UT19URVNUKTsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBFbXB0eUdyYXBoLmluc3RhbmNlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaC50cmF2ZXJzYWwoKTsKLQotICAgICAgICAvLyBwdXJwb3NlZnVsbHkgdXNlICJ4IiB0byBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgdHJhdmVyc2FsIHNvdXJjZSBiaW5kaW5nIGZvciAieCIgYmVsb3cgYW5kCi0gICAgICAgIC8vIHRodXMgdGVzdHMgdGhlIGFsaWFzIGFkZGVkIGZvciAieCIKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwgdCA9IGdldFRyYXZlcnNhbFdpdGhMYW1iZGEoZyk7Ci0KLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgYmluZGluZ3MucHV0KCJ4IiwgZyk7Ci0KLSAgICAgICAgc2NyaXB0RW5naW5lLmV2YWwodC5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwgYmluZGluZ3MsIEdyZW1saW5TY3JpcHRFbmdpbmUuSElEREVOX0cpOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEFsbG93Qnl0ZWNvZGVFdmFsV2l0aE1pc3NpbmdCaW5kaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyZW1saW5TY3JpcHRFbmdpbmUgc2NyaXB0RW5naW5lID0gbWFuYWdlci5nZXRFbmdpbmVCeU5hbWUoRU5HSU5FX1RPX1RFU1QpOwotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IEVtcHR5R3JhcGguaW5zdGFuY2UoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotCi0gICAgICAgIC8vIHB1cnBvc2VmdWxseSB1c2UgIngiIHRvIG1hdGNoIHRoZSBuYW1lIG9mIHRoZSB0cmF2ZXJzYWwgc291cmNlIGJpbmRpbmcgZm9yICJ4IiBiZWxvdyBhbmQKLSAgICAgICAgLy8gdGh1cyB0ZXN0cyB0aGUgYWxpYXMgYWRkZWQgZm9yICJ4IgotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbCB0ID0gZ2V0VHJhdmVyc2FsV2l0aExhbWJkYShnKTsKLQotICAgICAgICBmaW5hbCBCaW5kaW5ncyBiaW5kaW5ncyA9IG5ldyBTaW1wbGVCaW5kaW5ncygpOwotICAgICAgICBiaW5kaW5ncy5wdXQoInoiLCBnKTsKLQotICAgICAgICBzY3JpcHRFbmdpbmUuZXZhbCh0LmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLCBiaW5kaW5ncywgIngiKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RBbGxvd0J5dGVjb2RlRXZhbFdpdGhJbnZhbGlkQmluZGluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmVtbGluU2NyaXB0RW5naW5lIHNjcmlwdEVuZ2luZSA9IG1hbmFnZXIuZ2V0RW5naW5lQnlOYW1lKEVOR0lORV9UT19URVNUKTsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBFbXB0eUdyYXBoLmluc3RhbmNlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaC50cmF2ZXJzYWwoKTsKLQotICAgICAgICAvLyBwdXJwb3NlZnVsbHkgdXNlICJ4IiB0byBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgdHJhdmVyc2FsIHNvdXJjZSBiaW5kaW5nIGZvciAieCIgYmVsb3cgYW5kCi0gICAgICAgIC8vIHRodXMgdGVzdHMgdGhlIGFsaWFzIGFkZGVkIGZvciAieCIKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwgdCA9IGdldFRyYXZlcnNhbFdpdGhMYW1iZGEoZyk7Ci0KLSAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBuZXcgU2ltcGxlQmluZGluZ3MoKTsKLSAgICAgICAgYmluZGluZ3MucHV0KCJ6IiwgZyk7Ci0gICAgICAgIGJpbmRpbmdzLnB1dCgieCIsICJpbnZhbGlkLWJpbmRpbmctZm9yLXgtZ2l2ZW4teC1zaG91bGQtYmUtdHJhdmVyc2FsLXNvdXJjZSIpOwotCi0gICAgICAgIHNjcmlwdEVuZ2luZS5ldmFsKHQuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksIGJpbmRpbmdzLCAieCIpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkR2V0RW5naW5lQnlOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIEdyZW1saW5TY3JpcHRFbmdpbmUgc2NyaXB0RW5naW5lID0gbWFuYWdlci5nZXRFbmdpbmVCeU5hbWUoRU5HSU5FX1RPX1RFU1QpOwogICAgICAgICBhc3NlcnRFcXVhbHMoRU5HSU5FX1RPX1RFU1QsIHNjcmlwdEVuZ2luZS5nZXRGYWN0b3J5KCkuZ2V0RW5naW5lTmFtZSgpKTsKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL0dyZW1saW5TY3JpcHRFbmdpbmVTdWl0ZS5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpblNjcmlwdEVuZ2luZVN1aXRlLmphdmEKaW5kZXggOGE5Nzc1Yy4uYzJjMDQ2MyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpblNjcmlwdEVuZ2luZVN1aXRlLmphdmEKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvR3JlbWxpblNjcmlwdEVuZ2luZVN1aXRlLmphdmEKQEAgLTI5LDcgKzI5LDYgQEAKICAgICBzdGF0aWMgU3RyaW5nIEVOR0lORV9UT19URVNUOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3M8Pz5bXSBhbGxUZXN0cyA9IG5ldyBDbGFzczw/PltdewotICAgICAgICAgICAgQmluZGluZ3NTY3JpcHRFbmdpbmVUZXN0LmNsYXNzLAogICAgICAgICAgICAgQ2FjaGVkR3JlbWxpblNjcmlwdEVuZ2luZU1hbmFnZXJUZXN0LmNsYXNzLAogICAgICAgICAgICAgR3JlbWxpbkVuYWJsZWRTY3JpcHRFbmdpbmVUZXN0LmNsYXNzLAogICAgICAgICAgICAgU2NyaXB0RW5naW5lTGFtYmRhVGVzdC5jbGFzcyB9OwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvTW9ja0dyZW1saW5TY3JpcHRFbmdpbmUuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vanNyMjIzL01vY2tHcmVtbGluU2NyaXB0RW5naW5lLmphdmEKaW5kZXggYjg2NDMyOS4uMTBlYWVjNCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9qc3IyMjMvTW9ja0dyZW1saW5TY3JpcHRFbmdpbmUuamF2YQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2pzcjIyMy9Nb2NrR3JlbWxpblNjcmlwdEVuZ2luZS5qYXZhCkBAIC0xOCw3ICsxOCw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjM7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuR3JlbWxpbkxhbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7CiAKIGltcG9ydCBqYXZheC5zY3JpcHQuQWJzdHJhY3RTY3JpcHRFbmdpbmU7CkBAIC01MSwxMSArNTEsNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUcmF2ZXJzYWwuQWRtaW4gZXZhbChCeXRlY29kZSBieXRlY29kZSwgQmluZGluZ3MgYmluZGluZ3MsIFN0cmluZyB0cmF2ZXJzYWxTb3VyY2UpIHRocm93cyBTY3JpcHRFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQmluZGluZ3MgY3JlYXRlQmluZGluZ3MoKSB7CiAgICAgICAgIHJldHVybiBuZXcgU2ltcGxlQmluZGluZ3MoKTsKICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc0NvbXB1dGVyU3VpdGUuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzQ29tcHV0ZXJTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA4N2I4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzQ29tcHV0ZXJTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2VzczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uQWJzdHJhY3RHcmVtbGluU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkdyYXBoQ29tcHV0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkdyYXBoQ29tcHV0ZXJUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5jbG9uZS5DbG9uZVZlcnRleFByb2dyYW1UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5yYW5raW5nLnBhZ2VyYW5rLlBhZ2VSYW5rVmVydGV4UHJvZ3JhbVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnNlYXJjaC5wYXRoLlNob3J0ZXN0UGF0aFZlcnRleFByb2dyYW1UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsSW50ZXJydXB0aW9uQ29tcHV0ZXJUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5Db21wbGV4VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuTGFtYmRhU3RlcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5CcmFuY2hUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guQ2hvb3NlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLkxvY2FsVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLk9wdGlvbmFsVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLlJlcGVhdFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5VbmlvblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5BbmRUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuQ29pblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5DeWNsaWNQYXRoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkRlZHVwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkZpbHRlclRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5IYXNUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuSXNUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuT3JUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuUmFuZ2VUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuU2FtcGxlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlNpbXBsZVBhdGhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuVGFpbFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5XaGVyZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5BZGRFZGdlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvYWxlc2NlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvbm5lY3RlZENvbXBvbmVudFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db25zdGFudFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db3VudFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5FbGVtZW50TWFwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkZsYXRNYXBUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRm9sZFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5HcmFwaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Mb29wc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXBUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0aFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWVhblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NaW5UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUGFnZVJhbmtUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUGF0aFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QZWVyUHJlc3N1cmVUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvZmlsZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9ncmFtVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb2plY3RUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvcGVydGllc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5SZWFkVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlNob3J0ZXN0UGF0aFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TZWxlY3RUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU3VtVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlVuZm9sZFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5WYWx1ZU1hcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5WZXJ0ZXhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuV3JpdGVUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkFnZ3JlZ2F0ZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuRXhwbGFpblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuR3JvdXBDb3VudFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuR3JvdXBUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkluamVjdFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2Fja1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2lkZUVmZmVjdENhcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2lkZUVmZmVjdFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlRyZWVUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TZWVkU3RyYXRlZ3lQcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneVByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5UcmFuc2xhdGlvblN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uRWFybHlMaW1pdFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3lQcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuU3RydWN0dXJlU3RhbmRhcmRTdWl0ZTsKLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5tb2RlbC5Jbml0aWFsaXphdGlvbkVycm9yOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLm1vZGVsLlJ1bm5lckJ1aWxkZXI7Ci0KLS8qKgotICogVGhlIHtAY29kZSBQcm9jZXNzQ29tcHV0ZXJTdWl0ZX0gaXMgYSBKVW5pdCB0ZXN0IHJ1bm5lciB0aGF0IGV4ZWN1dGVzIHRoZSBHcmVtbGluIFRlc3QgU3VpdGUgb3ZlciBhCi0gKiB7QGxpbmsgR3JhcGh9IGltcGxlbWVudGF0aW9uLiAgVGhpcyB0ZXN0IHN1aXRlIGNvdmVycyB0cmF2ZXJzYWwgb3BlcmF0aW9ucyBhcm91bmQge0BsaW5rIEdyYXBoQ29tcHV0ZXJ9IGFuZCBzaG91bGQKLSAqIGJlIGltcGxlbWVudGVkIGJ5IHByb3ZpZGVycyB0byB2YWxpZGF0ZSB0aGF0IHRoZWlyIGltcGxlbWVudGF0aW9ucyBhcmUgY29tcGxpYW50IHdpdGggdGhhdCBHcmVtbGluIGxhbmd1YWdlLgotICogSW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIHRoaXMgdGVzdCBzdWl0ZSBzaG91bGQgcmV0dXJuIHtAY29kZSB0cnVlfSBmb3IKLSAqIHtAbGluayBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzI3N1cHBvcnRzQ29tcHV0ZXIoKX0uCi0gKiA8cC8+Ci0gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdXNhZ2Ugb2YgdGhpcyBzdWl0ZSwgcGxlYXNlIHNlZSB7QGxpbmsgU3RydWN0dXJlU3RhbmRhcmRTdWl0ZX0uCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgcHJlZmVyIHRoZSBHaGVya2luIHRlc3Qgc3VpdGUgZm9yIHZhbGlkYXRpbmcgR3JlbWxpbiBiZWhhdmlvciBhbmQgdGhlCi0gKiB7QGxpbmsgUHJvY2Vzc0VtYmVkZGVkQ29tcHV0ZXJTdWl0ZX0gZm9yIEpWTSBzcGVjaWZpYyB0ZXN0cy4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBjbGFzcyBQcm9jZXNzQ29tcHV0ZXJTdWl0ZSBleHRlbmRzIEFic3RyYWN0R3JlbWxpblN1aXRlIHsKLQotICAgIC8qKgotICAgICAqIFRoaXMgbGlzdCBvZiB0ZXN0cyBpbiB0aGUgc3VpdGUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFzIHBhcnQgb2YgdGhpcyBzdWl0ZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzczw/PltdIGFsbFRlc3RzID0gbmV3IENsYXNzPD8+W117Ci0KLSAgICAgICAgICAgIC8vIGNvbXB1dGVyLCB2ZXJ0ZXggcHJvZ3JhbSwgYW5kIG1hcC9yZWR1Y2Ugc2VtYW50aWNzCi0gICAgICAgICAgICBHcmFwaENvbXB1dGVyVGVzdC5jbGFzcywKLQotICAgICAgICAgICAgTGFtYmRhU3RlcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLQotICAgICAgICAgICAgLy8gYnJhbmNoCi0gICAgICAgICAgICBCcmFuY2hUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBDaG9vc2VUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBPcHRpb25hbFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIExvY2FsVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUmVwZWF0VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgVW5pb25UZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIGZpbHRlcgotICAgICAgICAgICAgQW5kVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgQ29pblRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEN5Y2xpY1BhdGhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBEZWR1cFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEZpbHRlclRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEhhc1Rlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIElzVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgT3JUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBSYW5nZVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFNhbXBsZVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFNpbXBsZVBhdGhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBUYWlsVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgV2hlcmVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIG1hcAotICAgICAgICAgICAgQ29hbGVzY2VUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBDb25uZWN0ZWRDb21wb25lbnRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBDb25zdGFudFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIENvdW50VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgRWxlbWVudE1hcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEZsYXRNYXBUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBGb2xkVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgR3JhcGhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBMb29wc1Rlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1hcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1hdGNoVGVzdC5Db3VudE1hdGNoVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1hdGNoVGVzdC5HcmVlZHlNYXRjaFRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBNYXRoVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgTWF4VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgTWVhblRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1pblRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFN1bVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE9yZGVyVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUGFnZVJhbmtUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBQYXRoVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUGVlclByZXNzdXJlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUHJvZmlsZVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFByb2plY3RUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBQcm9ncmFtVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUHJvcGVydGllc1Rlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFJlYWRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTaG9ydGVzdFBhdGhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTZWxlY3RUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBVbmZvbGRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBWYWx1ZU1hcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFZlcnRleFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFdyaXRlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotCi0gICAgICAgICAgICAvLyBzaWRlRWZmZWN0Ci0gICAgICAgICAgICBBZGRFZGdlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgQWdncmVnYXRlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgRXhwbGFpblRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEdyb3VwVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgR3JvdXBDb3VudFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEluamVjdFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFByb2ZpbGVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTYWNrVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgU2lkZUVmZmVjdENhcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFNpZGVFZmZlY3RUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTdWJncmFwaFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFRyZWVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIGNvbXBsaWFuY2UKLSAgICAgICAgICAgIENvbXBsZXhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBUcmF2ZXJzYWxJbnRlcnJ1cHRpb25Db21wdXRlclRlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIGFsZ29yaXRobXMKLSAgICAgICAgICAgIFBhZ2VSYW5rVmVydGV4UHJvZ3JhbVRlc3QuY2xhc3MsCi0gICAgICAgICAgICBTaG9ydGVzdFBhdGhWZXJ0ZXhQcm9ncmFtVGVzdC5jbGFzcywKLSAgICAgICAgICAgIENsb25lVmVydGV4UHJvZ3JhbVRlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIGNyZWF0aW9ucwotICAgICAgICAgICAgVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmNsYXNzLAotCi0gICAgICAgICAgICAvLyBkZWNvcmF0aW9ucwotICAgICAgICAgICAgUmVhZE9ubHlTdHJhdGVneVByb2Nlc3NUZXN0LmNsYXNzLAotICAgICAgICAgICAgU2VlZFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBTdWJncmFwaFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbnMKLSAgICAgICAgICAgIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBFYXJseUxpbWl0U3RyYXRlZ3lQcm9jZXNzVGVzdC5jbGFzcwotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBBIGxpc3Qgb2YgdGhlIG1pbmltdW0gc2V0IG9mIGJhc2UgdGVzdHMgdGhhdCBHcmVtbGluIGZsYXZvcnMgc2hvdWxkIGltcGxlbWVudCB0byBiZSBjb21wbGlhbnQgd2l0aCBHcmVtbGluLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzPD8+W10gdGVzdHNUb0VuZm9yY2UgPSBuZXcgQ2xhc3M8Pz5bXXsKLSAgICAgICAgICAgIExhbWJkYVN0ZXBUZXN0LmNsYXNzLAotCi0gICAgICAgICAgICAvLyBicmFuY2gKLSAgICAgICAgICAgIEJyYW5jaFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBDaG9vc2VUZXN0LmNsYXNzLAotICAgICAgICAgICAgT3B0aW9uYWxUZXN0LmNsYXNzLAotICAgICAgICAgICAgTG9jYWxUZXN0LmNsYXNzLAotICAgICAgICAgICAgUmVwZWF0VGVzdC5jbGFzcywKLSAgICAgICAgICAgIFVuaW9uVGVzdC5jbGFzcywKLQotICAgICAgICAgICAgLy8gZmlsdGVyCi0gICAgICAgICAgICBBbmRUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ29pblRlc3QuY2xhc3MsCi0gICAgICAgICAgICBDeWNsaWNQYXRoVGVzdC5jbGFzcywKLSAgICAgICAgICAgIERlZHVwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEZpbHRlclRlc3QuY2xhc3MsCi0gICAgICAgICAgICBIYXNUZXN0LmNsYXNzLAotICAgICAgICAgICAgSXNUZXN0LmNsYXNzLAotICAgICAgICAgICAgT3JUZXN0LmNsYXNzLAotICAgICAgICAgICAgUmFuZ2VUZXN0LmNsYXNzLAotICAgICAgICAgICAgU2FtcGxlVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFNpbXBsZVBhdGhUZXN0LmNsYXNzLAotICAgICAgICAgICAgVGFpbFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBXaGVyZVRlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIG1hcAotICAgICAgICAgICAgQ29hbGVzY2VUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ29uc3RhbnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ291bnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgRmxhdE1hcFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBFbGVtZW50TWFwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEZvbGRUZXN0LmNsYXNzLAotICAgICAgICAgICAgTWF0Y2hUZXN0LmNsYXNzLAotICAgICAgICAgICAgTWF0aFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBNYXBUZXN0LmNsYXNzLAotICAgICAgICAgICAgTWF4VGVzdC5jbGFzcywKLSAgICAgICAgICAgIE1lYW5UZXN0LmNsYXNzLAotICAgICAgICAgICAgTWluVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFN1bVRlc3QuY2xhc3MsCi0gICAgICAgICAgICBNYXRjaFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBPcmRlclRlc3QuY2xhc3MsCi0gICAgICAgICAgICBQYWdlUmFua1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICAvLyBQZWVyUHJlc3N1cmVUZXN0LmNsYXNzLAotICAgICAgICAgICAgUGF0aFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBQcm9maWxlVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFByb2plY3RUZXN0LmNsYXNzLAotICAgICAgICAgICAgUHJvZ3JhbVRlc3QuY2xhc3MsCi0gICAgICAgICAgICBQcm9wZXJ0aWVzVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFNob3J0ZXN0UGF0aFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBTZWxlY3RUZXN0LmNsYXNzLAotICAgICAgICAgICAgVW5mb2xkVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFZhbHVlTWFwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFZlcnRleFRlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIHNpZGVFZmZlY3QKLSAgICAgICAgICAgIEFkZEVkZ2VUZXN0LmNsYXNzLAotICAgICAgICAgICAgQWdncmVnYXRlVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEdyb3VwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEdyb3VwQ291bnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgSW5qZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgIFNhY2tUZXN0LmNsYXNzLAotICAgICAgICAgICAgU2lkZUVmZmVjdENhcFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBTaWRlRWZmZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgIFN1YmdyYXBoVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFRyZWVUZXN0LmNsYXNzCi0gICAgfTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCBieSBKVW5pdCBhbmQgd2lsbCBydW4gdGhpcyBzdWl0ZSB3aXRoIGl0cyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlCi0gICAgICoge0Bjb2RlIHRlc3RzVG9FbmZvcmNlfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgUHJvY2Vzc0NvbXB1dGVyU3VpdGUoZmluYWwgQ2xhc3M8Pz4ga2xhc3MsIGZpbmFsIFJ1bm5lckJ1aWxkZXIgYnVpbGRlcikgdGhyb3dzIEluaXRpYWxpemF0aW9uRXJyb3IgewotICAgICAgICBzdXBlcihrbGFzcywgYnVpbGRlciwgYWxsVGVzdHMsIGFsbFRlc3RzLCBmYWxzZSwgVHJhdmVyc2FsRW5naW5lLlR5cGUuQ09NUFVURVIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgY29uc3RydWN0b3IgaXMgdXNlZCBieSBHcmVtbGluIGZsYXZvciBpbXBsZW1lbnRlcnMgd2hvIHN1cHBseSB0aGVpciBvd24gaW1wbGVtZW50YXRpb25zIG9mIHRoZQotICAgICAqIHtAY29kZSB0ZXN0c1RvRW5mb3JjZX0uCi0gICAgICovCi0gICAgcHVibGljIFByb2Nlc3NDb21wdXRlclN1aXRlKGZpbmFsIENsYXNzPD8+IGtsYXNzLCBmaW5hbCBSdW5uZXJCdWlsZGVyIGJ1aWxkZXIsIGZpbmFsIENsYXNzPD8+W10gdGVzdHNUb0V4ZWN1dGUpIHRocm93cyBJbml0aWFsaXphdGlvbkVycm9yIHsKLSAgICAgICAgc3VwZXIoa2xhc3MsIGJ1aWxkZXIsIHRlc3RzVG9FeGVjdXRlLCB0ZXN0c1RvRW5mb3JjZSwgdHJ1ZSwgVHJhdmVyc2FsRW5naW5lLlR5cGUuQ09NUFVURVIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzRW1iZWRkZWRDb21wdXRlclN1aXRlLmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc0VtYmVkZGVkQ29tcHV0ZXJTdWl0ZS5qYXZhCmluZGV4IGI2OGRhYzkuLjg4NmViODggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzRW1iZWRkZWRDb21wdXRlclN1aXRlLmphdmEKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL1Byb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGUuamF2YQpAQCAtMjUsMTcgKzI1LDExIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnNlYXJjaC5wYXRoLlNob3J0ZXN0UGF0aFZlcnRleFByb2dyYW1UZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsRW5naW5lOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsSW50ZXJydXB0aW9uQ29tcHV0ZXJUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5Db21wbGV4VGVzdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuTGFtYmRhU3RlcFRlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb2dyYW1UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuV3JpdGVUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkV4cGxhaW5UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNpZGVFZmZlY3RUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlN1YmdyYXBoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5UcmVlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkVhcmx5TGltaXRTdHJhdGVneVByb2Nlc3NUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CkBAIC00Myw5ICszNyw5IEBACiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuUnVubmVyQnVpbGRlcjsKIAogLyoqCi0gKiBUaGUge0Bjb2RlIFByb2Nlc3NMaW1pdGVkQ29tcHV0ZXJTdWl0ZX0gaXMgYSBzZXQgb2YgdGVzdHMgdGhhdCBwcm92aWRlcnMgbWF5IGltcGxlbWVudCBpbiBhZGRpdGlvbiB0byB0aGUgc3RhbmRhcmQKLSAqICAqIEdoZXJraW4gZmVhdHVyZSB0ZXN0cy4gVGhlc2UgdGVzdHMgYXJlIG9ubHkgcmVsZXZhbnQgZm9yIGVtYmVkZGVkIHVzZSBjYXNlcyBjb3ZlcmluZyBmZWF0dXJlcyBsaWtlIGxhbWJkYXMgb3Igb3RoZXIKLSAqICAqIGNhcGFiaWxpdGllcyB0aGF0IGNhbiBvbmx5IHdvcmsgd2hlbiBydW5uaW5nIEdyZW1saW4gaW4gdGhlIHNhbWUgSlZNIGFzIHRoZSB7QGxpbmsgR3JhcGh9IGluc3RhbmNlLgorICogVGhlIHtAY29kZSBQcm9jZXNzRW1iZWRkZWRDb21wdXRlclN1aXRlfSBpcyBhIHNldCBvZiB0ZXN0cyB0aGF0IHByb3ZpZGVycyBtYXkgaW1wbGVtZW50IGluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZAorICogR2hlcmtpbiBmZWF0dXJlIHRlc3RzLiBUaGVzZSB0ZXN0cyBhcmUgb25seSByZWxldmFudCBmb3IgZW1iZWRkZWQgdXNlIGNhc2VzIGNvdmVyaW5nIGZlYXR1cmVzIGxpa2UgbGFtYmRhcyBvciBvdGhlcgorICogY2FwYWJpbGl0aWVzIHRoYXQgY2FuIG9ubHkgd29yayB3aGVuIHJ1bm5pbmcgR3JlbWxpbiBpbiB0aGUgc2FtZSBKVk0gYXMgdGhlIHtAbGluayBHcmFwaH0gaW5zdGFuY2UuCiAgKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCkBAIC02MCw3ICs1NCw2IEBACiAgICAgICAgICAgICBNYXRjaFRlc3QuR3JlZWR5TWF0Y2hUcmF2ZXJzYWxzLmNsYXNzLAogICAgICAgICAgICAgUHJvZmlsZVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKICAgICAgICAgICAgIFByb2dyYW1UZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBXcml0ZVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKICAgICAgICAgICAgIEV4cGxhaW5UZXN0LlRyYXZlcnNhbHMuY2xhc3MsCiAgICAgICAgICAgICBMYW1iZGFTdGVwVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAogCkBAIC03Miw5ICs2NSw2IEBACiAgICAgICAgICAgICBTaG9ydGVzdFBhdGhWZXJ0ZXhQcm9ncmFtVGVzdC5jbGFzcywKICAgICAgICAgICAgIENsb25lVmVydGV4UHJvZ3JhbVRlc3QuY2xhc3MsCiAKLSAgICAgICAgICAgIC8vIGNyZWF0aW9ucwotICAgICAgICAgICAgVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmNsYXNzLAotCiAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb25zCiAgICAgICAgICAgICBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVByb2Nlc3NUZXN0LmNsYXNzLAogICAgICAgICAgICAgRWFybHlMaW1pdFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlLmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc0VtYmVkZGVkU3RhbmRhcmRTdWl0ZS5qYXZhCmluZGV4IGVjMWZmMzQuLjQ5MjYyNDAgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlLmphdmEKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL1Byb2Nlc3NFbWJlZGRlZFN0YW5kYXJkU3VpdGUuamF2YQpAQCAtMjMsMTYgKzIzLDExIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxFbmdpbmU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5MYW1iZGFTdGVwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuQ29tcGFyYWJpbGl0eVNlbWFudGljc1Rlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5FeHBsYWluVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdWJncmFwaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuVHJlZVRlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkVsZW1lbnRJZFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkVhcmx5TGltaXRTdHJhdGVneVByb2Nlc3NUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CkBAIC01NywxNiArNTIsMTIgQEAKICAgICAgICAgICAgIE1hdGNoVGVzdC5Db3VudE1hdGNoVHJhdmVyc2Fscy5jbGFzcywKICAgICAgICAgICAgIE1hdGNoVGVzdC5HcmVlZHlNYXRjaFRyYXZlcnNhbHMuY2xhc3MsCiAgICAgICAgICAgICBQcm9maWxlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgV3JpdGVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCiAgICAgICAgICAgICBFeHBsYWluVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAogCiAgICAgICAgICAgICAvLyBjb21wbGlhbmNlCiAgICAgICAgICAgICBDb3JlVHJhdmVyc2FsVGVzdC5jbGFzcywKICAgICAgICAgICAgIFRyYXZlcnNhbEludGVycnVwdGlvblRlc3QuY2xhc3MsCiAKLSAgICAgICAgICAgIC8vIGNyZWF0aW9ucwotICAgICAgICAgICAgVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmNsYXNzLAotCiAgICAgICAgICAgICAvLyBkZWNvcmF0aW9ucwogICAgICAgICAgICAgRWxlbWVudElkU3RyYXRlZ3lQcm9jZXNzVGVzdC5jbGFzcywKICAgICAgICAgICAgIEV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdC5jbGFzcywKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzTGltaXRlZENvbXB1dGVyU3VpdGUuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzTGltaXRlZENvbXB1dGVyU3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZlMzMwOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc0xpbWl0ZWRDb21wdXRlclN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3M7Ci0KLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5tb2RlbC5Jbml0aWFsaXphdGlvbkVycm9yOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLm1vZGVsLlJ1bm5lckJ1aWxkZXI7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICogQGRlcHJlY2F0ZWQgQXMgb2YgcmVsZWFzZSAzLjguMCwgcmVwbGFjZWQgYnkge0BsaW5rIFByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGV9LgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGNsYXNzIFByb2Nlc3NMaW1pdGVkQ29tcHV0ZXJTdWl0ZSBleHRlbmRzIFByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGUgewotCi0gICAgcHVibGljIFByb2Nlc3NMaW1pdGVkQ29tcHV0ZXJTdWl0ZShmaW5hbCBDbGFzczw/PiBrbGFzcywgZmluYWwgUnVubmVyQnVpbGRlciBidWlsZGVyKSB0aHJvd3MgSW5pdGlhbGl6YXRpb25FcnJvciB7Ci0gICAgICAgIHN1cGVyKGtsYXNzLCBidWlsZGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUHJvY2Vzc0xpbWl0ZWRDb21wdXRlclN1aXRlKGZpbmFsIENsYXNzPD8+IGtsYXNzLCBmaW5hbCBSdW5uZXJCdWlsZGVyIGJ1aWxkZXIsIGZpbmFsIENsYXNzPD8+W10gdGVzdHNUb0V4ZWN1dGUpIHRocm93cyBJbml0aWFsaXphdGlvbkVycm9yIHsKLSAgICAgICAgc3VwZXIoa2xhc3MsIGJ1aWxkZXIsIHRlc3RzVG9FeGVjdXRlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlLmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNmRjODQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL1Byb2Nlc3NMaW1pdGVkU3RhbmRhcmRTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzOwotCi1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuSW5pdGlhbGl6YXRpb25FcnJvcjsKLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5tb2RlbC5SdW5uZXJCdWlsZGVyOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqIEBkZXByZWNhdGVkIEFzIG9mIHJlbGVhc2UgMy44LjAsIHJlcGxhY2VkIGJ5IHtAbGluayBQcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlfS4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBjbGFzcyBQcm9jZXNzTGltaXRlZFN0YW5kYXJkU3VpdGUgZXh0ZW5kcyBQcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlIHsKLSAgICBwdWJsaWMgUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlKGZpbmFsIENsYXNzPD8+IGtsYXNzLCBmaW5hbCBSdW5uZXJCdWlsZGVyIGJ1aWxkZXIpIHRocm93cyBJbml0aWFsaXphdGlvbkVycm9yIHsKLSAgICAgICAgc3VwZXIoa2xhc3MsIGJ1aWxkZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBQcm9jZXNzTGltaXRlZFN0YW5kYXJkU3VpdGUoZmluYWwgQ2xhc3M8Pz4ga2xhc3MsIGZpbmFsIFJ1bm5lckJ1aWxkZXIgYnVpbGRlciwgZmluYWwgQ2xhc3M8Pz5bXSB0ZXN0c1RvRXhlY3V0ZSkgdGhyb3dzIEluaXRpYWxpemF0aW9uRXJyb3IgewotICAgICAgICBzdXBlcihrbGFzcywgYnVpbGRlciwgdGVzdHNUb0V4ZWN1dGUpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvUHJvY2Vzc1N0YW5kYXJkU3VpdGUuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzU3RhbmRhcmRTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmI2YzgwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9Qcm9jZXNzU3RhbmRhcmRTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzA1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2VzczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uQWJzdHJhY3RHcmVtbGluU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db3JlVHJhdmVyc2FsVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEludGVycnVwdGlvblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkNvbXBsZXhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5MYW1iZGFTdGVwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuT3JkZXJhYmlsaXR5VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuQ29tcGFyYWJpbGl0eVNlbWFudGljc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5CcmFuY2hUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guQ2hvb3NlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLkxvY2FsVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLk9wdGlvbmFsVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLlJlcGVhdFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5VbmlvblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5BbmRUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuQ29pblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5DeWNsaWNQYXRoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkRlZHVwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkRyb3BUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRmlsdGVyVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkhhc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5Jc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5PclRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5SYW5nZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5TYW1wbGVUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuU2ltcGxlUGF0aFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5UYWlsVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLldoZXJlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkFkZEVkZ2VUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQWRkVmVydGV4VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvYWxlc2NlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvbnN0YW50VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvdW50VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkVsZW1lbnRNYXBUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRmxhdE1hcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Gb2xkVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkluZGV4VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkxvb3BzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1heFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NZWFuVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lcmdlRWRnZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NZXJnZVZlcnRleFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NaW5UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUGF0aFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb2plY3RUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvcGVydGllc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5SZWFkVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlNlbGVjdFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TdW1UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuVW5mb2xkVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlZhbHVlTWFwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlZlcnRleFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Xcml0ZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuQWdncmVnYXRlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5FeHBsYWluVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5Hcm91cENvdW50VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5Hcm91cFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuSW5qZWN0VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TYWNrVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TaWRlRWZmZWN0Q2FwVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TaWRlRWZmZWN0VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdWJncmFwaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuVHJlZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkVsZW1lbnRJZFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uUGFydGl0aW9uU3RyYXRlZ3lQcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU2VlZFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlN1YmdyYXBoU3RyYXRlZ3lQcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkVhcmx5TGltaXRTdHJhdGVneVByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5UHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uUmVhZE9ubHlTdHJhdGVneVByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlN0cnVjdHVyZVN0YW5kYXJkU3VpdGU7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuSW5pdGlhbGl6YXRpb25FcnJvcjsKLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5tb2RlbC5SdW5uZXJCdWlsZGVyOwotCi0vKioKLSAqIFRoZSB7QGNvZGUgUHJvY2Vzc1N0YW5kYXJkU3VpdGV9IGlzIGEgSlVuaXQgdGVzdCBydW5uZXIgdGhhdCBleGVjdXRlcyB0aGUgR3JlbWxpbiBUZXN0IFN1aXRlIG92ZXIgYQotICoge0BsaW5rIEdyYXBofSBpbXBsZW1lbnRhdGlvbi4gIFRoaXMgdGVzdCBzdWl0ZSBjb3ZlcnMgdHJhdmVyc2FsIG9wZXJhdGlvbnMgYW5kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBwcm92aWRlcnMKLSAqIHRvIHZhbGlkYXRlIHRoYXQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFyZSBjb21wbGlhbnQgd2l0aCB0aGUgR3JlbWxpbiBsYW5ndWFnZS4KLSAqIDxwLz4KLSAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB1c2FnZSBvZiB0aGlzIHN1aXRlLCBwbGVhc2Ugc2VlIHtAbGluayBTdHJ1Y3R1cmVTdGFuZGFyZFN1aXRlfS4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAZGVwcmVjYXRlZCBBcyBvZiByZWxlYXNlIDMuOC4wLCBwcmVmZXIgdGhlIEdoZXJraW4gdGVzdCBzdWl0ZSBmb3IgdmFsaWRhdGluZyBHcmVtbGluIGJlaGF2aW9yIGFuZCB0aGUKLSAqIHtAbGluayBQcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlfSBmb3IgSlZNIHNwZWNpZmljIHRlc3RzLgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGNsYXNzIFByb2Nlc3NTdGFuZGFyZFN1aXRlIGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU3VpdGUgewotCi0gICAgLyoqCi0gICAgICogVGhpcyBsaXN0IG9mIHRlc3RzIGluIHRoZSBzdWl0ZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYXMgcGFydCBvZiB0aGlzIHN1aXRlLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENsYXNzPD8+W10gYWxsVGVzdHMgPSBuZXcgQ2xhc3M8Pz5bXXsKLQotICAgICAgICAgICAgTGFtYmRhU3RlcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLQotICAgICAgICAgICAgLy8gYnJhbmNoCi0gICAgICAgICAgICBCcmFuY2hUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBDaG9vc2VUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBPcHRpb25hbFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIExvY2FsVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUmVwZWF0VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgVW5pb25UZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIGZpbHRlcgotICAgICAgICAgICAgQW5kVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgQ29pblRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEN5Y2xpY1BhdGhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBEZWR1cFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIERyb3BUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBGaWx0ZXJUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBIYXNUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBJc1Rlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE9yVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUmFuZ2VUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTYW1wbGVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTaW1wbGVQYXRoVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgVGFpbFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFdoZXJlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotCi0gICAgICAgICAgICAvLyBtYXAKLSAgICAgICAgICAgIEFkZEVkZ2VUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBBZGRWZXJ0ZXhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBDb2FsZXNjZVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIENvbnN0YW50VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgQ291bnRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBFbGVtZW50TWFwVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgRmxhdE1hcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIEZvbGRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBHcmFwaFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIExvb3BzVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgSW5kZXhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBNYXBUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBNYXRjaFRlc3QuQ291bnRNYXRjaFRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBNYXRjaFRlc3QuR3JlZWR5TWF0Y2hUcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgTWF0aFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1heFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1lYW5UZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBNZXJnZUVkZ2VUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBNZXJnZVZlcnRleFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE1pblRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFN1bVRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIE9yZGVyVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUGF0aFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFByb2ZpbGVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBQcm9qZWN0VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgUHJvcGVydGllc1Rlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFJlYWRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTZWxlY3RUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBWZXJ0ZXhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBVbmZvbGRUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBWYWx1ZU1hcFRlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFdyaXRlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotCi0gICAgICAgICAgICAvLyBzaWRlRWZmZWN0Ci0gICAgICAgICAgICBBZ2dyZWdhdGVUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBFeHBsYWluVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgR3JvdXBUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBHcm91cENvdW50VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgSW5qZWN0VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgU2Fja1Rlc3QuVHJhdmVyc2Fscy5jbGFzcywKLSAgICAgICAgICAgIFNpZGVFZmZlY3RDYXBUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBTaWRlRWZmZWN0VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgU3ViZ3JhcGhUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBUcmVlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotCi0gICAgICAgICAgICAvLyBjb21wbGlhbmNlCi0gICAgICAgICAgICBDb21wbGV4VGVzdC5UcmF2ZXJzYWxzLmNsYXNzLAotICAgICAgICAgICAgQ29yZVRyYXZlcnNhbFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBUcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0LmNsYXNzLAotCi0gICAgICAgICAgICAvLyBjcmVhdGlvbnMKLSAgICAgICAgICAgIFRyYW5zbGF0aW9uU3RyYXRlZ3lQcm9jZXNzVGVzdC5jbGFzcywKLQotICAgICAgICAgICAgLy8gZGVjb3JhdGlvbnMKLSAgICAgICAgICAgIEVsZW1lbnRJZFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBFdmVudFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBSZWFkT25seVN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBQYXJ0aXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmNsYXNzLAotICAgICAgICAgICAgU2VlZFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBTdWJncmFwaFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbnMKLSAgICAgICAgICAgIEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICBFYXJseUxpbWl0U3RyYXRlZ3lQcm9jZXNzVGVzdC5jbGFzcywKLQotICAgICAgICAgICAgLy8gc2VtYW50aWNzCi0gICAgICAgICAgICBPcmRlcmFiaWxpdHlUZXN0LlRyYXZlcnNhbHMuY2xhc3MsCi0gICAgICAgICAgICBDb21wYXJhYmlsaXR5U2VtYW50aWNzVGVzdC5jbGFzcywKLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogQSBsaXN0IG9mIHRoZSBtaW5pbXVtIHNldCBvZiBiYXNlIHRlc3RzIHRoYXQgR3JlbWxpbiBmbGF2b3JzIHNob3VsZCBpbXBsZW1lbnQgdG8gYmUgY29tcGxpYW50IHdpdGggR3JlbWxpbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzczw/PltdIHRlc3RzVG9FbmZvcmNlID0gbmV3IENsYXNzPD8+W117Ci0gICAgICAgICAgICBMYW1iZGFTdGVwVGVzdC5jbGFzcywKLQotICAgICAgICAgICAgLy8gYnJhbmNoCi0gICAgICAgICAgICBCcmFuY2hUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ2hvb3NlVGVzdC5jbGFzcywKLSAgICAgICAgICAgIE9wdGlvbmFsVGVzdC5jbGFzcywKLSAgICAgICAgICAgIExvY2FsVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFJlcGVhdFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBVbmlvblRlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIGZpbHRlcgotICAgICAgICAgICAgQW5kVGVzdC5jbGFzcywKLSAgICAgICAgICAgIENvaW5UZXN0LmNsYXNzLAotICAgICAgICAgICAgQ3ljbGljUGF0aFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBEZWR1cFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBEcm9wVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEZpbHRlclRlc3QuY2xhc3MsCi0gICAgICAgICAgICBIYXNUZXN0LmNsYXNzLAotICAgICAgICAgICAgSXNUZXN0LmNsYXNzLAotICAgICAgICAgICAgT3JUZXN0LmNsYXNzLAotICAgICAgICAgICAgUmFuZ2VUZXN0LmNsYXNzLAotICAgICAgICAgICAgU2FtcGxlVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFNpbXBsZVBhdGhUZXN0LmNsYXNzLAotICAgICAgICAgICAgVGFpbFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBXaGVyZVRlc3QuY2xhc3MsCi0KLSAgICAgICAgICAgIC8vIG1hcAotICAgICAgICAgICAgQWRkRWRnZVRlc3QuY2xhc3MsCi0gICAgICAgICAgICBBZGRWZXJ0ZXhUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ29hbGVzY2VUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ29uc3RhbnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgQ291bnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgRWxlbWVudE1hcFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBGbGF0TWFwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEZvbGRUZXN0LmNsYXNzLAotICAgICAgICAgICAgTG9vcHNUZXN0LmNsYXNzLAotICAgICAgICAgICAgSW5kZXhUZXN0LmNsYXNzLAotICAgICAgICAgICAgTWFwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIE1hdGNoVGVzdC5jbGFzcywKLSAgICAgICAgICAgIE1hdGhUZXN0LmNsYXNzLAotICAgICAgICAgICAgTWF4VGVzdC5jbGFzcywKLSAgICAgICAgICAgIE1lYW5UZXN0LmNsYXNzLAotICAgICAgICAgICAgTWluVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFN1bVRlc3QuY2xhc3MsCi0gICAgICAgICAgICBPcmRlclRlc3QuY2xhc3MsCi0gICAgICAgICAgICBQYXRoVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFByb3BlcnRpZXNUZXN0LmNsYXNzLAotICAgICAgICAgICAgUHJvZmlsZVRlc3QuY2xhc3MsCi0gICAgICAgICAgICBQcm9qZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgIFNlbGVjdFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBWZXJ0ZXhUZXN0LmNsYXNzLAotICAgICAgICAgICAgVW5mb2xkVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFZhbHVlTWFwVGVzdC5jbGFzcywKLQotICAgICAgICAgICAgLy8gc2lkZUVmZmVjdAotICAgICAgICAgICAgQWdncmVnYXRlVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEdyb3VwVGVzdC5jbGFzcywKLSAgICAgICAgICAgIEdyb3VwQ291bnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgSW5qZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgIFNhY2tUZXN0LmNsYXNzLAotICAgICAgICAgICAgU2lkZUVmZmVjdENhcFRlc3QuY2xhc3MsCi0gICAgICAgICAgICBTaWRlRWZmZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgIFN1YmdyYXBoVGVzdC5jbGFzcywKLSAgICAgICAgICAgIFRyZWVUZXN0LmNsYXNzLAotICAgIH07Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgYnkgSlVuaXQgYW5kIHdpbGwgcnVuIHRoaXMgc3VpdGUgd2l0aCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZQotICAgICAqIHtAY29kZSB0ZXN0c1RvRW5mb3JjZX0uCi0gICAgICovCi0gICAgcHVibGljIFByb2Nlc3NTdGFuZGFyZFN1aXRlKGZpbmFsIENsYXNzPD8+IGtsYXNzLCBmaW5hbCBSdW5uZXJCdWlsZGVyIGJ1aWxkZXIpIHRocm93cyBJbml0aWFsaXphdGlvbkVycm9yIHsKLSAgICAgICAgc3VwZXIoa2xhc3MsIGJ1aWxkZXIsIGFsbFRlc3RzLCB0ZXN0c1RvRW5mb3JjZSwgZmFsc2UsIFRyYXZlcnNhbEVuZ2luZS5UeXBlLlNUQU5EQVJEKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgYnkgR3JlbWxpbiBmbGF2b3IgaW1wbGVtZW50ZXJzIHdobyBzdXBwbHkgdGhlaXIgb3duIGltcGxlbWVudGF0aW9ucyBvZiB0aGUKLSAgICAgKiB7QGNvZGUgdGVzdHNUb0VuZm9yY2V9LgotICAgICAqLwotICAgIHB1YmxpYyBQcm9jZXNzU3RhbmRhcmRTdWl0ZShmaW5hbCBDbGFzczw/PiBrbGFzcywgZmluYWwgUnVubmVyQnVpbGRlciBidWlsZGVyLCBmaW5hbCBDbGFzczw/PltdIHRlc3RzVG9FeGVjdXRlKSB0aHJvd3MgSW5pdGlhbGl6YXRpb25FcnJvciB7Ci0gICAgICAgIHN1cGVyKGtsYXNzLCBidWlsZGVyLCB0ZXN0c1RvRXhlY3V0ZSwgdGVzdHNUb0VuZm9yY2UsIHRydWUsIFRyYXZlcnNhbEVuZ2luZS5UeXBlLlNUQU5EQVJEKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0NvcmVUcmF2ZXJzYWxUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL0NvcmVUcmF2ZXJzYWxUZXN0LmphdmEKaW5kZXggZWUxMGVmOC4uNTk4YjM3NCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9Db3JlVHJhdmVyc2FsVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvQ29yZVRyYXZlcnNhbFRlc3QuamF2YQpAQCAtNDYsMTEgKzQ2LDExIEBACiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQW5vbnltb3VzVHJhdmVyc2FsU291cmNlLnRyYXZlcnNhbDsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW5qZWN0OwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLkZFQVRVUkVfVFJBTlNBQ1RJT05TOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nU3RhcnRzV2l0aC5zdGFydHNXaXRoOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwogCkBAIC0xMDYsNyArMTA2LDYgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKS48QnVsa1NldD5nZXQoIngiKS5zaXplKCkpOwogICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKS48QnVsa1NldD5nZXQoIngiKS5jb250YWlucygicmlwcGxlIikpOwogICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKS48QnVsa1NldD5nZXQoIngiKS5jb250YWlucygibG9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoVHJhdmVyc2FsLlN5bWJvbHMuZGlzY2FyZCwgdHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmdldFN0ZXBJbnN0cnVjdGlvbnMoKS5nZXQodHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpLmdldFN0ZXBJbnN0cnVjdGlvbnMoKS5zaXplKCktMSkuZ2V0T3BlcmF0b3IoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9Db21wYXJhYmlsaXR5U2VtYW50aWNzVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL0NvbXBhcmFiaWxpdHlTZW1hbnRpY3NUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZDY3MWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL0NvbXBhcmFiaWxpdHlTZW1hbnRpY3NUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkJpRnVuY3Rpb247Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYW5kOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ubm90OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vcjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18udW5pb247Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLndoZXJlOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzOwotCi0vKioKLSAqIEBhdXRob3IgTWlrZSBQZXJzb25pY2sgKGh0dHA6Ly9naXRodWIuY29tL21pa2VwZXJzb25pY2spCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGNsYXNzIENvbXBhcmFiaWxpdHlTZW1hbnRpY3NUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgLyoqCi0gICAgICogTmFOIGNvbXBhcmlzb25zIGFsd2F5cyBwcm9kdWNlIFVOREVGIGNvbXBhcmlzb24sIHdoaWNoIGJ5IGRlZmluaXRpb24gcmVzdWx0cyBpbiBGQUxTRS4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoRmVhdHVyZXMuRkVBVFVSRV9PUkRFUkFCSUxJVFlfU0VNQU5USUNTKQotICAgIHB1YmxpYyB2b2lkIHRlc3RDb21wYXJlTmFOKCkgewotICAgICAgICAvLyBOYU4gdnMuIE5hTgotICAgICAgICAvLyBQLmVxCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5lcShEb3VibGUuTmFOKSkpOwotICAgICAgICAvLyBQLm5lcQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5uZXEoRG91YmxlLk5hTikpKTsKLSAgICAgICAgLy8gUC5sdAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAubHQoRG91YmxlLk5hTikpKTsKLSAgICAgICAgLy8gUC5sdGUKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmx0ZShEb3VibGUuTmFOKSkpOwotICAgICAgICAvLyBQLmd0Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5ndChEb3VibGUuTmFOKSkpOwotICAgICAgICAvLyBQLmd0ZQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAuZ3RlKERvdWJsZS5OYU4pKSk7Ci0KLSAgICAgICAgLy8gbm9uLU5hTiB2cy4gTmFOCi0gICAgICAgIC8vIFAuZXEKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxLjBkKS5pcyhQLmVxKERvdWJsZS5OYU4pKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5lcSgxLjBkKSkpOwotICAgICAgICAvLyBQLm5lcQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMS4wZCkuaXMoUC5uZXEoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAubmVxKDEuMGQpKSk7Ci0gICAgICAgIC8vIFAubHQKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxLjBkKS5pcyhQLmx0KERvdWJsZS5OYU4pKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5sdCgxLjBkKSkpOwotICAgICAgICAvLyBQLmx0ZQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEuMGQpLmlzKFAubHRlKERvdWJsZS5OYU4pKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5sdGUoMS4wZCkpKTsKLSAgICAgICAgLy8gUC5ndAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEuMGQpLmlzKFAuZ3QoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmd0KDEuMGQpKSk7Ci0gICAgICAgIC8vIFAuZ3RlCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmd0ZSgxLjBkKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE51bGwgY29tcGFyaXNvbnMuIE51bGwgaXMgY29uc2lkZXJlZCB0byBiZSBhIGRpc3RpbmN0IHR5cGUsIHRodXMgd2lsbCBwcm9kdWNlIEVSUk9SIGZvciBjb21wYXJpc29uIGFnYWluc3QKLSAgICAgKiBub24tbnVsbCwganVzdCBsaWtlIGFueSBjcm9zcy10eXBlIGNvbXBhcmlzb24uIE51bGwgaXMgPT0gbnVsbCBhbmQgaXMgIT0gdG8gYW55IG5vbi1udWxsIChleGNlcHQgZm9yIE5hTiwgd2hpY2gKLSAgICAgKiBpcyBhbHdheXMgVU5ERUYvRVJST1IpLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgcHVibGljIHZvaWQgdGVzdENvbXBhcmVOdWxsKCkgewotICAgICAgICAvLyBudWxsIHZzLiBudWxsCi0gICAgICAgIC8vIFAuZXEKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KG51bGwpLmlzKFAuZXEobnVsbCkpKTsKLSAgICAgICAgLy8gUC5uZXEKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChudWxsKS5pcyhQLm5lcShudWxsKSkpOwotICAgICAgICAvLyBQLmx0Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QobnVsbCkuaXMoUC5sdChudWxsKSkpOwotICAgICAgICAvLyBQLmx0ZQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QobnVsbCkuaXMoUC5sdGUobnVsbCkpKTsKLSAgICAgICAgLy8gUC5ndAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3QobnVsbCkpKTsKLSAgICAgICAgLy8gUC5ndGUKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKG51bGwpKSk7Ci0KLSAgICAgICAgLy8gbm9uLW51bGwgdnMuIG51bGwKLSAgICAgICAgLy8gUC5lcQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEuMGQpLmlzKFAuZXEobnVsbCkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChudWxsKS5pcyhQLmVxKDEuMGQpKSk7Ci0gICAgICAgIC8vIFAubmVxCi0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxLjBkKS5pcyhQLm5lcShudWxsKSkpOwotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoMS4wZCkpKTsKLSAgICAgICAgLy8gUC5sdAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEuMGQpLmlzKFAubHQobnVsbCkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChudWxsKS5pcyhQLmx0KDEuMGQpKSk7Ci0gICAgICAgIC8vIFAubHRlCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMS4wZCkuaXMoUC5sdGUobnVsbCkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChudWxsKS5pcyhQLmx0ZSgxLjBkKSkpOwotICAgICAgICAvLyBQLmd0Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMS4wZCkuaXMoUC5ndChudWxsKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3QoMS4wZCkpKTsKLSAgICAgICAgLy8gUC5ndGUKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxLjBkKS5pcyhQLmd0ZShudWxsKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKDEuMGQpKSk7Ci0KLSAgICAgICAgLy8gTmFOIHZzIG51bGwKLSAgICAgICAgLy8gUC5lcQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KG51bGwpLmlzKFAuZXEoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmVxKG51bGwpKSk7Ci0gICAgICAgIC8vIFAubmVxCi0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdChudWxsKS5pcyhQLm5lcShEb3VibGUuTmFOKSkpOwotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5uZXEobnVsbCkpKTsKLSAgICAgICAgLy8gUC5sdAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KG51bGwpLmlzKFAubHQoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmx0KG51bGwpKSk7Ci0gICAgICAgIC8vIFAubHRlCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QobnVsbCkuaXMoUC5sdGUoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmx0ZShudWxsKSkpOwotICAgICAgICAvLyBQLmd0Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QobnVsbCkuaXMoUC5ndChEb3VibGUuTmFOKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAuZ3QobnVsbCkpKTsKLSAgICAgICAgLy8gUC5ndGUKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdChudWxsKS5pcyhQLmd0ZShEb3VibGUuTmFOKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAuZ3RlKG51bGwpKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyaXNvbnMgYWNyb3NzIHR5cGUgZmFtaWxpZXMuIEZBTFNFIGZvciBQLmVxLCBUUlVFIGZvciBQLm5lcSwgYW5kIFVOREVGIHdpdGggYmluYXJ5Ci0gICAgICogcmVkdWN0aW9uIHRvIEZBTFNFIGZvciBQLmx0L2x0ZS9ndC9ndGUuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZUFjcm9zc1R5cGVzKCkgewotICAgICAgICAvLyBQLmVxCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoImZvbyIpLmlzKFAuZXEoMS4wZCkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxLjBkKS5pcyhQLmVxKCJmb28iKSkpOwotICAgICAgICAvLyBQLm5lcQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoImZvbyIpLmlzKFAubmVxKDEuMGQpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxLjBkKS5pcyhQLm5lcSgiZm9vIikpKTsKLSAgICAgICAgLy8gUC5sdAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KCJmb28iKS5pcyhQLmx0KDEuMGQpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMS4wZCkuaXMoUC5sdCgiZm9vIikpKTsKLSAgICAgICAgLy8gUC5sdGUKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgiZm9vIikuaXMoUC5sdGUoMS4wZCkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxLjBkKS5pcyhQLmx0ZSgiZm9vIikpKTsKLSAgICAgICAgLy8gUC5ndAotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KCJmb28iKS5pcyhQLmd0KDEuMGQpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMS4wZCkuaXMoUC5ndCgiZm9vIikpKTsKLSAgICAgICAgLy8gUC5ndGUKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgiZm9vIikuaXMoUC5ndGUoMS4wZCkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxLjBkKS5pcyhQLmd0ZSgiZm9vIikpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPdmVyIGEgdGVybmFyeSBiaW5hcnkgc2VtYW50aWNzLCB0aGUgQU5EIHByZWRpY2F0ZSBldmFsdWF0ZXMgdG8gVFJVRSBvbmx5IGlmIGJvdGggYXJndW1lbnRzIGFyZSBUUlVFLiBBTkQgd2lsbAotICAgICAqIHByb3BvZ2F0ZSBFUlJPUiB2YWx1ZXMgdW5sZXNzIHRoZSBvdGhlciBhcmd1bWVudCBldmFsdXRlcyB0byBGQUxTRSwgc2luY2UgRkFMU0UgJiYgWCA9PiBGQUxTRS4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoRmVhdHVyZXMuRkVBVFVSRV9PUkRFUkFCSUxJVFlfU0VNQU5USUNTKQotICAgIHB1YmxpYyB2b2lkIHRlc3RBbmQoKSB7Ci0gICAgICAgIGZpbmFsIFAgVFJVRSA9IFAuZXEoMSk7Ci0gICAgICAgIGZpbmFsIFAgRkFMU0UgPSBQLmd0KDEpOwotICAgICAgICBmaW5hbCBQIEVSUk9SID0gUC5sdChEb3VibGUuTmFOKTsKLQotICAgICAgICAvLyBUUlVFLCBUUlVFIC0+IFRSVUUKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KDEpLmFuZChpcyhUUlVFKSxpcyhUUlVFKSkpOwotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkuaXMoVFJVRS5hbmQoVFJVRSkpKTsKLSAgICAgICAgLy8gVFJVRSwgRkFMU0UgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5hbmQoaXMoVFJVRSksaXMoRkFMU0UpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuaXMoVFJVRS5hbmQoRkFMU0UpKSk7Ci0gICAgICAgIC8vIFRSVUUsIEVSUk9SIC0+IEVSUk9SIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuYW5kKGlzKFRSVUUpLGlzKEVSUk9SKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmlzKFRSVUUuYW5kKEVSUk9SKSkpOwotCi0gICAgICAgIC8vIEZBTFNFLCBUUlVFIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuYW5kKGlzKEZBTFNFKSxpcyhUUlVFKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmlzKEZBTFNFLmFuZChUUlVFKSkpOwotICAgICAgICAvLyBGQUxTRSwgRkFMU0UgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5hbmQoaXMoRkFMU0UpLGlzKEZBTFNFKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmlzKEZBTFNFLmFuZChGQUxTRSkpKTsKLSAgICAgICAgLy8gRkFMU0UsIEVSUk9SIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuYW5kKGlzKEZBTFNFKSxpcyhFUlJPUikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5pcyhGQUxTRS5hbmQoRVJST1IpKSk7Ci0KLSAgICAgICAgLy8gRVJST1IsIFRSVUUgLT4gRVJST1IgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5hbmQoaXMoRVJST1IpLGlzKFRSVUUpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuaXMoRVJST1IuYW5kKFRSVUUpKSk7Ci0gICAgICAgIC8vIEVSUk9SLCBGQUxTRSAtPiBGQUxTRQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmFuZChpcyhFUlJPUiksaXMoRkFMU0UpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuaXMoRVJST1IuYW5kKEZBTFNFKSkpOwotICAgICAgICAvLyBFUlJPUiwgRVJST1IgLT4gRVJST1IgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5hbmQoaXMoRVJST1IpLGlzKEVSUk9SKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmlzKEVSUk9SLmFuZChFUlJPUikpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBCZWluZyBzeW1ldHJpY2FsbHkgZGVmaW5lZCB0byBBTkQsIE9SIG9ubHkgcmV0dXJucyBGQUxTRSBpbiB0aGUgY2FzZSB0aGF0IGJvdGggYXJndW1lbnRzIGV2YWx1dGUgdG8gRkFMU0UuCi0gICAgICogSW4gY2FzZXMgd2hlcmUgb25lIGFyZ3VtZW50IGlzIEZBTFNFIGFuZCB0aGUgb3RoZXIgRVJST1IsIE9SIHByb3BvZ2F0ZXMgdGhlIEVSUk9SLiBXaGVuZXZlciBvbmUgYXJndW1lbnQKLSAgICAgKiBpcyBUUlVFLCBPUiByZXR1cm5zIFRSVUUgc2luY2UgVFJVRSB8fCBYID0+IFRSVUUuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBwdWJsaWMgdm9pZCB0ZXN0T3IoKSB7Ci0gICAgICAgIGZpbmFsIFAgVFJVRSA9IFAuZXEoMSk7Ci0gICAgICAgIGZpbmFsIFAgRkFMU0UgPSBQLmd0KDEpOwotICAgICAgICBmaW5hbCBQIEVSUk9SID0gUC5sdChEb3VibGUuTmFOKTsKLQotICAgICAgICAvLyBUUlVFLCBUUlVFIC0+IFRSVUUKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KDEpLm9yKGlzKFRSVUUpLGlzKFRSVUUpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5pcyhUUlVFLm9yKFRSVUUpKSk7Ci0gICAgICAgIC8vIFRSVUUsIEZBTFNFIC0+IFRSVUUKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KDEpLm9yKGlzKFRSVUUpLGlzKEZBTFNFKSkpOwotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkuaXMoVFJVRS5vcihGQUxTRSkpKTsKLSAgICAgICAgLy8gVFJVRSwgRVJST1IgLT4gVFJVRQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkub3IoaXMoVFJVRSksaXMoRVJST1IpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5pcyhUUlVFLm9yKEVSUk9SKSkpOwotCi0gICAgICAgIC8vIEZBTFNFLCBUUlVFIC0+IFRSVUUKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KDEpLm9yKGlzKEZBTFNFKSxpcyhUUlVFKSkpOwotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkuaXMoRkFMU0Uub3IoVFJVRSkpKTsKLSAgICAgICAgLy8gRkFMU0UsIEZBTFNFIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkub3IoaXMoRkFMU0UpLGlzKEZBTFNFKSkpOwotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmlzKEZBTFNFLm9yKEZBTFNFKSkpOwotICAgICAgICAvLyBGQUxTRSwgRVJST1IgLT4gRVJST1IgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5vcihpcyhGQUxTRSksaXMoRVJST1IpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuaXMoRkFMU0Uub3IoRVJST1IpKSk7Ci0KLSAgICAgICAgLy8gRVJST1IsIFRSVUUgLT4gVFJVRQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkub3IoaXMoRVJST1IpLGlzKFRSVUUpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5pcyhFUlJPUi5vcihUUlVFKSkpOwotICAgICAgICAvLyBFUlJPUiwgRkFMU0UgLT4gRVJST1IgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5vcihpcyhFUlJPUiksaXMoRkFMU0UpKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuaXMoRVJST1Iub3IoRkFMU0UpKSk7Ci0gICAgICAgIC8vIEVSUk9SLCBFUlJPUiAtPiBFUlJPUiAtPiBGQUxTRQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLm9yKGlzKEVSUk9SKSxpcyhFUlJPUikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5pcyhFUlJPUi5vcihFUlJPUikpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgTk9UIHByZWRpY2F0ZSBpbnZlcnRzIFRSVUUgYW5kIEZBTFNFIGJ1dCBtYWludGFpbnMgRVJST1IgdmFsdWVzLiBGb3IgRVJST1IsIHdlIGNhbiBuZWl0aGVyIHByb3ZlCi0gICAgICogbm9yIGRpc3Byb3ZlIHRoZSB2YWx1ZSBleHByZXNzaW9uIGFuZCBoZW5jZSBzdGljayB3aXRoIEVSUk9SLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgcHVibGljIHZvaWQgdGVzdE5vdCgpIHsKLSAgICAgICAgZmluYWwgUCBUUlVFID0gUC5lcSgxKTsKLSAgICAgICAgZmluYWwgUCBGQUxTRSA9IFAuZ3QoMSk7Ci0gICAgICAgIGZpbmFsIFAgRVJST1IgPSBQLmx0KERvdWJsZS5OYU4pOwotCi0gICAgICAgIC8vIFRSVUUgLT4gRkFMU0UKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5ub3QoaXMoVFJVRSkpKTsKLSAgICAgICAgLy8gRkFMU0UgLT4gVFJVRQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkubm90KGlzKEZBTFNFKSkpOwotICAgICAgICAvLyBFUlJPUiAtPiBGQUxTRSAtPiBUUlVFCi0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5ub3QoaXMoRVJST1IpKSk7Ci0KLSAgICAgICAgLy8gQmluYXJ5IHJlZHVjdGlvbiB3aXRoIE5hTgotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmlzKFAuZXEoRG91YmxlLk5hTikpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KDEpLmlzKFAubmVxKERvdWJsZS5OYU4pKSk7Ci0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5ub3QoaXMoUC5lcShEb3VibGUuTmFOKSkpKTsKLSAgICAgICAgY2hlY2tIYXNOZXh0KGZhbHNlLCBnLmluamVjdCgxKS5ub3Qobm90KGlzKFAuZXEoRG91YmxlLk5hTikpKSkpOwotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkud2hlcmUoX18uaW5qZWN0KDEpLm5vdChpcyhFUlJPUikpKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVybmFyeSBYT1Igc2VtYW50aWNzLgotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgcHVibGljIHZvaWQgdGVzdFhvcigpIHsKLSAgICAgICAgZmluYWwgUCBUUlVFID0gUC5lcSgxKTsKLSAgICAgICAgZmluYWwgUCBGQUxTRSA9IFAuZ3QoMSk7Ci0gICAgICAgIGZpbmFsIFAgRVJST1IgPSBQLmx0KERvdWJsZS5OYU4pOwotCi0gICAgICAgIGZpbmFsIEJpRnVuY3Rpb248UCxQLCBHcmFwaFRyYXZlcnNhbD4geG9yID0gKEEsIEIpIC0+IG9yKGFuZChpcyhBKSxub3QoaXMoQikpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kKGlzKEIpLG5vdChpcyhBKSkpKTsKLQotICAgICAgICAvLyBUUlVFLCBUUlVFIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuZmlsdGVyKHhvci5hcHBseShUUlVFLCBUUlVFKSkpOwotICAgICAgICAvLyBUUlVFLCBGQUxTRSAtPiBUUlVFCi0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5maWx0ZXIoeG9yLmFwcGx5KFRSVUUsIEZBTFNFKSkpOwotICAgICAgICAvLyBUUlVFLCBFUlJPUiAtPiBUUlVFLCBGQUxTRSAtPiBUUlVFCi0gICAgICAgIGNoZWNrSGFzTmV4dCh0cnVlLCBnLmluamVjdCgxKS5maWx0ZXIoeG9yLmFwcGx5KFRSVUUsIEVSUk9SKSkpOwotCi0gICAgICAgIC8vIEZBTFNFLCBUUlVFIC0+IFRSVUUKLSAgICAgICAgY2hlY2tIYXNOZXh0KHRydWUsIGcuaW5qZWN0KDEpLmZpbHRlcih4b3IuYXBwbHkoRkFMU0UsIFRSVUUpKSk7Ci0gICAgICAgIC8vIEZBTFNFLCBGQUxTRSAtPiBGQUxTRQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmZpbHRlcih4b3IuYXBwbHkoRkFMU0UsIEZBTFNFKSkpOwotICAgICAgICAvLyBGQUxTRSwgRVJST1IgLT4gRkFMU0UsIEZBTFNFIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuZmlsdGVyKHhvci5hcHBseShGQUxTRSwgRVJST1IpKSk7Ci0KLSAgICAgICAgLy8gRVJST1IsIFRSVUUgLT4gRkFMU0UsIFRSVUUgLT4gVFJVRQotICAgICAgICBjaGVja0hhc05leHQodHJ1ZSwgZy5pbmplY3QoMSkuZmlsdGVyKHhvci5hcHBseShFUlJPUiwgVFJVRSkpKTsKLSAgICAgICAgLy8gRVJST1IsIEZBTFNFIC0+IEZBTFNFLCBGQUxTRSAtPiBGQUxTRQotICAgICAgICBjaGVja0hhc05leHQoZmFsc2UsIGcuaW5qZWN0KDEpLmZpbHRlcih4b3IuYXBwbHkoRVJST1IsIEZBTFNFKSkpOwotICAgICAgICAvLyBFUlJPUiwgRVJST1IgLT4gRkFMU0UsIEZBTFNFIC0+IEZBTFNFCi0gICAgICAgIGNoZWNrSGFzTmV4dChmYWxzZSwgZy5pbmplY3QoMSkuZmlsdGVyKHhvci5hcHBseShFUlJPUiwgRVJST1IpKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL0NvbXBsZXhUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvQ29tcGxleFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRhMTc5YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvQ29tcGxleFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3MSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLklnbm9yZUVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb24uQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbGxlY3Rpb25zLmVtcHR5TGlzdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5lcTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLmd0ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLmx0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAubmVxOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBvcC5hbGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUG9wLmZpcnN0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBvcC5sYXN0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlLmxvY2FsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5hZ2dyZWdhdGU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJyYW5jaDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uY29uc3RhbnQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmNvdW50OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ncm91cDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ucHJvamVjdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uc2VsZWN0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy51bmZvbGQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnZhbHVlczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ud2hlcmU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbi5rZXlzOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Db2x1bW4udmFsdWVzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIERhbmllbCBLdXBwaXR6IChodHRwOi8vZ3JlbWxpbi5ndXJ1KQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb21wbGV4VGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldENsYXNzaWNSZWNvbW1lbmRhdGlvbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE9iamVjdD4+Pj4gZ2V0Q293b3JrZXJTdW1tYXJ5KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTWFwPFN0cmluZywgT2JqZWN0Pj4+PiBnZXRDb3dvcmtlclN1bW1hcnlPTFRQKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxPYmplY3Q+PiBnZXRBbGxTaG9ydGVzdFBhdGhzKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+Pj4gZ2V0UGxheWxpc3RQYXRocygpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4+IGdldEFnZUNvbW1lbnRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgdGhlIHJlc3VsdCBvZiBib3RoIGNvd29ya2VyU3VtbWFyeSB0ZXN0cywgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gbG9vayBhcyBmb2xsb3dzOgotICAgICAqIDxwPgotICAgICAqIG1hcmtvPXtwZXRlcj17bnVtQ29DcmVhdGVkPTEsIGNvQ3JlYXRlZD1bbG9wXX0sIGpvc2g9e251bUNvQ3JlYXRlZD0xLCBjb0NyZWF0ZWQ9W2xvcF19fQotICAgICAqIGpvc2g9e3BldGVyPXtudW1Db0NyZWF0ZWQ9MSwgY29DcmVhdGVkPVtsb3BdfSwgbWFya289e251bUNvQ3JlYXRlZD0xLCBjb0NyZWF0ZWQ9W2xvcF19fQotICAgICAqIHBldGVyPXtqb3NoPXtudW1Db0NyZWF0ZWQ9MSwgY29DcmVhdGVkPVtsb3BdfSwgbWFya289e251bUNvQ3JlYXRlZD0xLCBjb0NyZWF0ZWQ9W2xvcF19fQotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tDb3dvcmtlclN1bW1hcnkoZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTWFwPFN0cmluZywgT2JqZWN0Pj4+IHN1bW1hcnkpIHsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChzdW1tYXJ5KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHN1bW1hcnkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzdW1tYXJ5LmNvbnRhaW5zS2V5KCJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzdW1tYXJ5LmNvbnRhaW5zS2V5KCJqb3NoIikpOwotICAgICAgICBhc3NlcnRUcnVlKHN1bW1hcnkuY29udGFpbnNLZXkoInBldGVyIikpOwotICAgICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxTdHJpbmcsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE9iamVjdD4+PiBlbnRyeSA6IHN1bW1hcnkuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGVudHJ5LmdldFZhbHVlKCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZW50cnkuZ2V0S2V5KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlICJtYXJrbyI6Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUoZW50cnkuZ2V0VmFsdWUoKS5jb250YWluc0tleSgiam9zaCIpICYmIGVudHJ5LmdldFZhbHVlKCkuY29udGFpbnNLZXkoInBldGVyIikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJqb3NoIjoKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlbnRyeS5nZXRWYWx1ZSgpLmNvbnRhaW5zS2V5KCJwZXRlciIpICYmIGVudHJ5LmdldFZhbHVlKCkuY29udGFpbnNLZXkoIm1hcmtvIikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJwZXRlciI6Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUoZW50cnkuZ2V0VmFsdWUoKS5jb250YWluc0tleSgibWFya28iKSAmJiBlbnRyeS5nZXRWYWx1ZSgpLmNvbnRhaW5zS2V5KCJqb3NoIikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtIDogZW50cnkuZ2V0VmFsdWUoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGFzc2VydFRydWUobS5jb250YWluc0tleSgibnVtQ29DcmVhdGVkIikpOwotICAgICAgICAgICAgICAgIGFzc2VydFRydWUobS5jb250YWluc0tleSgiY29DcmVhdGVkIikpOwotICAgICAgICAgICAgICAgIGFzc2VydFRydWUobS5nZXQoIm51bUNvQ3JlYXRlZCIpIGluc3RhbmNlb2YgTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKG0uZ2V0KCJjb0NyZWF0ZWQiKSBpbnN0YW5jZW9mIENvbGxlY3Rpb24pOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCAoKE51bWJlcikgbS5nZXQoIm51bUNvQ3JlYXRlZCIpKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKChDb2xsZWN0aW9uKSBtLmdldCgiY29DcmVhdGVkIikpLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCAoKENvbGxlY3Rpb24pIG0uZ2V0KCJjb0NyZWF0ZWQiKSkuaXRlcmF0b3IoKS5uZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGNsYXNzaWNSZWNvbW1lbmRhdGlvbigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRDbGFzc2ljUmVjb21tZW5kYXRpb24oKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJMRVQgSVQgR1JPVyIsICJVTkNMRSBKT0hOUyBCQU5EIiwgIkkgS05PVyBZT1UgUklERVIiLCAiU0hJUCBPRiBGT09MUyIsICJHT09EIExPVklORyIpLCB0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4odHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpLjxCdWxrU2V0PE1hcDxTdHJpbmcsIE9iamVjdD4+PmdldCgibSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGxpc3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiTEVUIElUIEdST1ciLCBsaXN0LmdldCgwKS5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyNzYsIGxpc3QuZ2V0KDApLmdldCgieSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIxTCwgbGlzdC5nZXQoMCkuZ2V0KCJ6IikpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHMoIlVOQ0xFIEpPSE5TIEJBTkQiLCBsaXN0LmdldCgxKS5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzMzIsIGxpc3QuZ2V0KDEpLmdldCgieSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwTCwgbGlzdC5nZXQoMSkuZ2V0KCJ6IikpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHMoIkkgS05PVyBZT1UgUklERVIiLCBsaXN0LmdldCgyKS5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1NTAsIGxpc3QuZ2V0KDIpLmdldCgieSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIwTCwgbGlzdC5nZXQoMikuZ2V0KCJ6IikpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHMoIlNISVAgT0YgRk9PTFMiLCBsaXN0LmdldCgzKS5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMjUsIGxpc3QuZ2V0KDMpLmdldCgieSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDE4TCwgbGlzdC5nZXQoMykuZ2V0KCJ6IikpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRFcXVhbHMoIkdPT0QgTE9WSU5HIiwgbGlzdC5nZXQoNCkuZ2V0KCJ4IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNDI4LCBsaXN0LmdldCg0KS5nZXQoInkiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxOEwsIGxpc3QuZ2V0KDQpLmdldCgieiIpKTsKLSAgICAgICAgLy8KLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJtIiwgQnVsa1NldC5jbGFzcywgInN0YXNoIiwgQnVsa1NldC5jbGFzcyk7Ci0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBjb3dvcmtlclN1bW1hcnkoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE9iamVjdD4+Pj4gdHJhdmVyc2FsID0gZ2V0Q293b3JrZXJTdW1tYXJ5KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBjaGVja0Nvd29ya2VyU3VtbWFyeSh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQElnbm9yZUVuZ2luZShUcmF2ZXJzYWxFbmdpbmUuVHlwZS5DT01QVVRFUikgLy8gbm8gbWlkLXRyYXZlcnNhbCBWKCkgaW4gY29tcHV0ZXIgbW9kZSArIHN0YXItZ3JhcGggbGltaXRhdGlvbnMKLSAgICBwdWJsaWMgdm9pZCBjb3dvcmtlclN1bW1hcnlPTFRQKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBPYmplY3Q+Pj4+IHRyYXZlcnNhbCA9IGdldENvd29ya2VyU3VtbWFyeU9MVFAoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGNoZWNrQ293b3JrZXJTdW1tYXJ5KHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBhbGxTaG9ydGVzdFBhdGhzKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldEFsbFNob3J0ZXN0UGF0aHMoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBtYXJrbyA9IGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibWFya28iKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IHZhZGFzID0gY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJ2YWRhcyIpOwotICAgICAgICBmaW5hbCBPYmplY3QgbG9wID0gY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJsb3AiKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IGpvc2ggPSBjb252ZXJ0VG9WZXJ0ZXhJZChncmFwaCwgImpvc2giKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IHJpcHBsZSA9IGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAicmlwcGxlIik7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBwZXRlciA9IGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAicGV0ZXIiKTsKLSAgICAgICAgZmluYWwgTGlzdDxMaXN0PE9iamVjdD4+IGFsbFNob3J0ZXN0UGF0aHMgPSBBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3Qoam9zaCwgbG9wKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KGpvc2gsIG1hcmtvKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KGpvc2gsIHJpcHBsZSksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChqb3NoLCBtYXJrbywgdmFkYXMpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3Qoam9zaCwgbG9wLCBwZXRlciksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChsb3AsIG1hcmtvKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KGxvcCwgcGV0ZXIpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobG9wLCBqb3NoKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KGxvcCwgam9zaCwgcmlwcGxlKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KGxvcCwgbWFya28sIHZhZGFzKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KG1hcmtvLCBsb3ApLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobWFya28sIGpvc2gpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobWFya28sIHZhZGFzKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KG1hcmtvLCBqb3NoLCByaXBwbGUpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobWFya28sIGxvcCwgcGV0ZXIpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QocGV0ZXIsIGxvcCksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChwZXRlciwgbG9wLCBtYXJrbyksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChwZXRlciwgbG9wLCBqb3NoKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KHBldGVyLCBsb3AsIGpvc2gsIHJpcHBsZSksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChwZXRlciwgbG9wLCBtYXJrbywgdmFkYXMpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QocmlwcGxlLCBqb3NoKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KHJpcHBsZSwgam9zaCwgbG9wKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KHJpcHBsZSwgam9zaCwgbWFya28pLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QocmlwcGxlLCBqb3NoLCBtYXJrbywgdmFkYXMpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QocmlwcGxlLCBqb3NoLCBsb3AsIHBldGVyKSwKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KHZhZGFzLCBtYXJrbyksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCh2YWRhcywgbWFya28sIGpvc2gpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QodmFkYXMsIG1hcmtvLCBsb3ApLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QodmFkYXMsIG1hcmtvLCBqb3NoLCByaXBwbGUpLAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QodmFkYXMsIG1hcmtvLCBsb3AsIHBldGVyKQotICAgICAgICApOwotICAgICAgICBjaGVja1Jlc3VsdHMoYWxsU2hvcnRlc3RQYXRocywgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIHBsYXlsaXN0UGF0aHMoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4+IHRyYXZlcnNhbCA9IGdldFBsYXlsaXN0UGF0aHMoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJhcnRpc3RzIikuY29udGFpbnMoIkJvYl9EeWxhbiIpKTsKLSAgICAgICAgYm9vbGVhbiBoYXNKb2hubnlDYXNoID0gZmFsc2U7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgaWYgKG1hcC5nZXQoImFydGlzdHMiKS5jb250YWlucygiSm9obm55X0Nhc2giKSkKLSAgICAgICAgICAgICAgICBoYXNKb2hubnlDYXNoID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRUcnVlKGhhc0pvaG5ueUNhc2gpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoImFydGlzdHMiKS5jb250YWlucygiR3JhdGVmdWxfRGVhZCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBhZ2VDb21tZW50cygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+Pj4gdHJhdmVyc2FsID0gZ2V0QWdlQ29tbWVudHMoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgibWFya28iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuZ2V0KCJtYXJrbyIpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmdldCgibWFya28iKS5jb250YWlucygiYWxtb3N0IG9sZCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJtYXJrbyIpLmNvbnRhaW5zKCJ5b3VuZ2VyIHRoYW4gcGV0ZXIiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJ2YWRhcyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5nZXQoInZhZGFzIikuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJ2YWRhcyIpLmNvbnRhaW5zKCJwcmV0dHkgeW91bmciKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmdldCgidmFkYXMiKS5jb250YWlucygieW91bmdlciB0aGFuIHBldGVyIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIG1hcC5nZXQoImpvc2giKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoImpvc2giKS5jb250YWlucygieW91bmdlciB0aGFuIHBldGVyIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoImpvc2giKS5jb250YWlucygicHJldHR5IG9sZCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJqb3NoIikuY29udGFpbnMoImxvb2tzIGxpa2Ugam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoInBldGVyIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwLmdldCgicGV0ZXIiKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoInBldGVyIikuY29udGFpbnMoInByZXR0eSBvbGQiKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgQ29tcGxleFRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRDbGFzc2ljUmVjb21tZW5kYXRpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIkRBUksgU1RBUiIpLmFzKCJhIikub3V0KCJmb2xsb3dlZEJ5IikuYWdncmVnYXRlKCJzdGFzaCIpLgotICAgICAgICAgICAgICAgICAgICBpbigiZm9sbG93ZWRCeSIpLndoZXJlKG5lcSgiYSIpLmFuZChQLm5vdChQLndpdGhpbigic3Rhc2giKSkpKS4KLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBDb3VudCgpLgotICAgICAgICAgICAgICAgICAgICB1bmZvbGQoKS4KLSAgICAgICAgICAgICAgICAgICAgcHJvamVjdCgieCIsICJ5IiwgInoiKS4KLSAgICAgICAgICAgICAgICAgICAgYnkoc2VsZWN0KGtleXMpLnZhbHVlcygibmFtZSIpKS4KLSAgICAgICAgICAgICAgICAgICAgYnkoc2VsZWN0KGtleXMpLnZhbHVlcygicGVyZm9ybWFuY2VzIikpLgotICAgICAgICAgICAgICAgICAgICBieShzZWxlY3QodmFsdWVzKSkuCi0gICAgICAgICAgICAgICAgICAgIG9yZGVyKCkuCi0gICAgICAgICAgICAgICAgICAgIGJ5KHNlbGVjdCgieiIpLCBPcmRlci5kZXNjKS4KLSAgICAgICAgICAgICAgICAgICAgYnkoc2VsZWN0KCJ5IiksIE9yZGVyLmFzYykuCi0gICAgICAgICAgICAgICAgICAgIGxpbWl0KDUpLmxvY2FsKGFnZ3JlZ2F0ZSgibSIpKS5zZWxlY3QoIngiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTWFwPFN0cmluZywgT2JqZWN0Pj4+PiBnZXRDb3dvcmtlclN1bW1hcnkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZpbHRlcihvdXRFKCJjcmVhdGVkIikpLmFnZ3JlZ2F0ZSgicCIpLmFzKCJwMSIpLnZhbHVlcygibmFtZSIpLmFzKCJwMW4iKQotICAgICAgICAgICAgICAgICAgICAuc2VsZWN0KCJwIikudW5mb2xkKCkud2hlcmUobmVxKCJwMSIpKS5hcygicDIiKS52YWx1ZXMoIm5hbWUiKS5hcygicDJuIikuc2VsZWN0KCJwMiIpCi0gICAgICAgICAgICAgICAgICAgIC5vdXQoImNyZWF0ZWQiKS5jaG9vc2UoaW4oImNyZWF0ZWQiKS53aGVyZShlcSgicDEiKSksIHZhbHVlcygibmFtZSIpLCBjb25zdGFudChlbXB0eUxpc3QoKSkpCi0gICAgICAgICAgICAgICAgICAgIC48U3RyaW5nLCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBPYmplY3Q+Pj5ncm91cCgpLmJ5KHNlbGVjdCgicDFuIikpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5KGdyb3VwKCkuYnkoc2VsZWN0KCJwMm4iKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSh1bmZvbGQoKS5mb2xkKCkucHJvamVjdCgibnVtQ29DcmVhdGVkIiwgImNvQ3JlYXRlZCIpLmJ5KGNvdW50KGxvY2FsKSkuYnkoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBPYmplY3Q+Pj4+IGdldENvd29ya2VyU3VtbWFyeU9MVFAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZpbHRlcihvdXRFKCJjcmVhdGVkIikpLmFzKCJwMSIpCi0gICAgICAgICAgICAgICAgICAgIC5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLndoZXJlKG5lcSgicDEiKSkuZmlsdGVyKG91dEUoImNyZWF0ZWQiKSkuYXMoInAyIikKLSAgICAgICAgICAgICAgICAgICAgLm1hcChvdXQoImNyZWF0ZWQiKS53aGVyZShpbigiY3JlYXRlZCIpLmFzKCJwMSIpKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpCi0gICAgICAgICAgICAgICAgICAgIC48U3RyaW5nLCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBPYmplY3Q+Pj5ncm91cCgpLmJ5KHNlbGVjdCgicDEiKS5ieSgibmFtZSIpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBieShncm91cCgpLmJ5KHNlbGVjdCgicDIiKS5ieSgibmFtZSIpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5KHByb2plY3QoIm51bUNvQ3JlYXRlZCIsICJjb0NyZWF0ZWQiKS5ieShjb3VudChsb2NhbCkpLmJ5KCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxPYmplY3Q+PiBnZXRBbGxTaG9ydGVzdFBhdGhzKCkgewotICAgICAgICAgICAgLy8gVE9ETzogcmVtb3ZlIC53aXRob3V0U3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5LmNsYXNzKQotICAgICAgICAgICAgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneS5jbGFzcywgUGF0aFJldHJhY3Rpb25TdHJhdGVneS5jbGFzcykuCi0gICAgICAgICAgICAgICAgICAgIFYoKS5hcygidiIpLmJvdGgoKS5hcygidiIpLgotICAgICAgICAgICAgICAgICAgICBwcm9qZWN0KCJzcmMiLCAidGd0IiwgInAiKS4KLSAgICAgICAgICAgICAgICAgICAgICBieShzZWxlY3QoZmlyc3QsICJ2IikpLgotICAgICAgICAgICAgICAgICAgICAgIGJ5KHNlbGVjdChsYXN0LCAidiIpKS4KLSAgICAgICAgICAgICAgICAgICAgICBieShzZWxlY3QoYWxsLCAidiIpKS5hcygidHJpcGxlIikuCi0gICAgICAgICAgICAgICAgICAgIGdyb3VwKCJ4IikuCi0gICAgICAgICAgICAgICAgICAgICAgYnkoc2VsZWN0KCJzcmMiLCAidGd0IikpLgotICAgICAgICAgICAgICAgICAgICAgIGJ5KHNlbGVjdCgicCIpLmZvbGQoKSkuc2VsZWN0KCJ0Z3QiKS5iYXJyaWVyKCkuCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdChib3RoKCkuYXMoInYiKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0KCJzcmMiLCAidGd0IiwgInAiKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5KHNlbGVjdChmaXJzdCwgInYiKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieShzZWxlY3QobGFzdCwgInYiKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieShzZWxlY3QoYWxsLCAidiIpKS5hcygidCIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzZWxlY3QoYWxsLCAicCIpLmNvdW50KGxvY2FsKS5hcygibCIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QobGFzdCwgInQiKS5zZWxlY3QoYWxsLCAicCIpLmRlZHVwKGxvY2FsKS5jb3VudChsb2NhbCkud2hlcmUoZXEoImwiKSkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChsYXN0LCAidCIpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdChzZWxlY3QoYWxsLCAicCIpLmFzKCJwIikuY291bnQobG9jYWwpLmFzKCJsIikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdChhbGwsICJ4IikudW5mb2xkKCkuZmlsdGVyKHNlbGVjdChrZXlzKS53aGVyZShlcSgidCIpKS5ieShzZWxlY3QoInNyYyIsICJ0Z3QiKSkpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2VsZWN0KHZhbHVlcykudW5mb2xkKCkub3IoY291bnQobG9jYWwpLndoZXJlKGx0KCJsIikpLCB3aGVyZShlcSgicCIpKSkpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJyaWVyKCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAoIngiKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5KHNlbGVjdCgic3JjIiwgInRndCIpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5KHNlbGVjdChhbGwsICJwIikuZm9sZCgpKS5zZWxlY3QoInRndCIpLmJhcnJpZXIoKSkuCi0gICAgICAgICAgICAgICAgICAgIGNhcCgieCIpLnNlbGVjdCh2YWx1ZXMpLnVuZm9sZCgpLnVuZm9sZCgpLm1hcCh1bmZvbGQoKS5pZCgpLmZvbGQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4+IGdldFBsYXlsaXN0UGF0aHMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgIkJvYl9EeWxhbiIpLmluKCJzdW5nQnkiKS5hcygiYSIpLgotICAgICAgICAgICAgICAgICAgICByZXBlYXQob3V0KCkub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5zaW1wbGVQYXRoKCkuZnJvbSgiYSIpKS4KLSAgICAgICAgICAgICAgICAgICAgdW50aWwob3V0KCJ3cml0dGVuQnkiKS5oYXMoIm5hbWUiLCAiSm9obm55X0Nhc2giKSkubGltaXQoMSkuYXMoImIiKS4KLSAgICAgICAgICAgICAgICAgICAgcmVwZWF0KG91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoImMiKS5zaW1wbGVQYXRoKCkuZnJvbSgiYiIpLnRvKCJjIikpLgotICAgICAgICAgICAgICAgICAgICB1bnRpbChvdXQoInN1bmdCeSIpLmhhcygibmFtZSIsICJHcmF0ZWZ1bF9EZWFkIikpLmxpbWl0KDEpLgotICAgICAgICAgICAgICAgICAgICBwYXRoKCkuZnJvbSgiYSIpLnVuZm9sZCgpLgotICAgICAgICAgICAgICAgICAgICA8TGlzdDxTdHJpbmc+PnByb2plY3QoInNvbmciLCAiYXJ0aXN0cyIpLgotICAgICAgICAgICAgICAgICAgICBieSgibmFtZSIpLgotICAgICAgICAgICAgICAgICAgICBieShfXy5jb2FsZXNjZShvdXQoInN1bmdCeSIsICJ3cml0dGVuQnkiKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpLCBjb25zdGFudCgiVW5rbm93biIpKS5mb2xkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+PiBnZXRBZ2VDb21tZW50cygpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikKLSAgICAgICAgICAgICAgICAgICAgLjxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gZ3JvdXAoKQotICAgICAgICAgICAgICAgICAgICAgICAgLmJ5KCJuYW1lIikKLSAgICAgICAgICAgICAgICAgICAgICAgIC5ieShicmFuY2godmFsdWVzKCJhZ2UiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9wdGlvbigyOSwgY29uc3RhbnQoImFsbW9zdCBvbGQiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihfXy5pcygzMiksIGNvbnN0YW50KCJsb29rcyBsaWtlIGpvc2giKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihsdCgyOSksIGNvbnN0YW50KCJwcmV0dHkgeW91bmciKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihsdCgzNSksIGNvbnN0YW50KCJ5b3VuZ2VyIHRoYW4gcGV0ZXIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihndGUoMzApLCBjb25zdGFudCgicHJldHR5IG9sZCIpKS5mb2xkKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9PcmRlcmFiaWxpdHlUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvT3JkZXJhYmlsaXR5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjNiNDhjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9PcmRlcmFiaWxpdHlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MjUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuQ29sbGVjdGlvblV0aWw7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5WZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzOwotCi1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBPcmRlcmFiaWxpdHlUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHJpdmF0ZSBpbnRlcmZhY2UgQ29uc3RhbnRzIHsKLSAgICAgICAgVVVJRCB1dWlkID0gVVVJRC5yYW5kb21VVUlEKCk7Ci0gICAgICAgIE9mZnNldERhdGVUaW1lIGRhdGUgPSBPZmZzZXREYXRlVGltZS5ub3coWm9uZU9mZnNldC5VVEMpOwotICAgICAgICBMaXN0IGxpc3QxID0gQXJyYXlzLmFzTGlzdCgxLCAyLCAzKTsKLSAgICAgICAgTGlzdCBsaXN0MiA9IEFycmF5cy5hc0xpc3QoMSwgMiwgMywgNCk7Ci0gICAgICAgIFNldCBzZXQxID0gQ29sbGVjdGlvblV0aWwuYXNTZXQobGlzdDEpOwotICAgICAgICBTZXQgc2V0MiA9IENvbGxlY3Rpb25VdGlsLmFzU2V0KGxpc3QyKTsKLSAgICAgICAgTWFwIG1hcDEgPSBDb2xsZWN0aW9uVXRpbC5hc01hcCgxLCAxMSwgMiwgMjIsIDMsIGZhbHNlLCA0LCA0NCk7Ci0gICAgICAgIE1hcCBtYXAyID0gQ29sbGVjdGlvblV0aWwuYXNNYXAoMSwgMTEsIDIsIDIyLCAzMyk7Ci0KLSAgICAgICAgT2JqZWN0W10gdW5vcmRlcmVkID0geyBtYXAyLCAxLCBtYXAxLCAiZm9vIiwgbnVsbCwgbGlzdDEsIGRhdGUsIHNldDEsIGxpc3QyLCB0cnVlLCB1dWlkLCAiYmFyIiwgMi4wLCBmYWxzZSwgc2V0MiB9OwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfdmFsdWVzX29yZGVyKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PiBnZXRfZ19WX3Byb3BlcnRpZXNfb3JkZXIoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgT2JqZWN0PiBnZXRfZ19FX3Byb3BlcnRpZXNfb3JkZXJfdmFsdWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgT2JqZWN0PiBnZXRfZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1hfdmFsdWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LCBPYmplY3Q+IGdldF9nX2luamVjdF9vcmRlcigpOwotCi0gICAgLy8gb3JkZXIgYXNjIGJ5IHZlcnRleDogdlszXSwgdls1XQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3V0X291dF9vcmRlcl9ieVhhc2NYKCk7Ci0KLSAgICAvLyBvcmRlciBhc2MgYnkgdmVydGV4IGluIHBhdGg6IHZbM10sIHZbNV0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWCgpOwotCi0gICAgLy8gb3JkZXIgYXNjIGJ5IGVkZ2U6IGVbMTBdLCB2W2UxMV0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9vdXRfb3V0RV9vcmRlcl9ieVhhc2NYKCk7Ci0KLSAgICAvLyBvcmRlciBhc2MgYnkgZWRnZSBpbiBwYXRoOiBlWzEwXSwgZVsxMV0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9vdXRfb3V0RV9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYKCk7Ci0KLSAgICAvLyBvcmRlciBhc2MgYnkgdmVydGV4IGFuZCB0aGVuIHZlcnRleCBwcm9wZXJ0eSBpZCBpbiBwYXRoLgotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1Zfb3V0X291dF9wcm9wZXJ0aWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYYXNjWF9zZWxlY3RYaGVhZFhfdmFsdWUoKTsKLQotICAgIC8vIG9yZGVyIGFzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IHZhbHVlIGluIHBhdGguCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9vdXRfb3V0X3ZhbHVlc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYKCk7Ci0KLSAgICAvLyBvcmRlciBkZXNjIGJ5IHZlcnRleDogdlszXSwgdls1XQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3V0X291dF9vcmRlcl9ieVhkZXNjWCgpOwotCi0gICAgLy8gb3JkZXIgZGVzYyBieSB2ZXJ0ZXggaW4gcGF0aDogdlszXSwgdls1XQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3V0X291dF9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWCgpOwotCi0gICAgLy8gb3JkZXIgZGVzYyBieSBlZGdlOiBlWzEwXSwgdltlMTFdCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1Zfb3V0X291dEVfb3JkZXJfYnlYZGVzY1goKTsKLQotICAgIC8vIG9yZGVyIGRlc2MgYnkgZWRnZSBpbiBwYXRoOiBlWzEwXSwgZVsxMV0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9vdXRfb3V0RV9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWCgpOwotCi0gICAgLy8gb3JkZXIgZGVzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IGlkIGluIHBhdGguCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFhfdmFsdWUoKTsKLQotICAgIC8vIG9yZGVyIGRlc2MgYnkgdmVydGV4IGFuZCB0aGVuIHZlcnRleCBwcm9wZXJ0eSB2YWx1ZSBpbiBwYXRoLgotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1Zfb3V0X291dF92YWx1ZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFgoKTsKLQotICAgIC8qKgotICAgICAqIE9yZGVyIGJ5IHByb3BlcnR5IHZhbHVlIChtaXhlZCB0eXBlcykuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlc19vcmRlcigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlc19vcmRlcigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIDI3LCAyOSwgMzIsIDM1LCAiamF2YSIsICJqYXZhIiwgImpvc2giLCAibG9wIiwgIm1hcmtvIiwgInBldGVyIiwgInJpcHBsZSIsICJ2YWRhcyIKLSAgICAgICAgKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPcmRlciBieSB2ZXJ0ZXggcHJvcGVydHkgKG9yZGVycyBieSBpZCkuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gVmVydGV4UHJvcGVydHlGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wcm9wZXJ0aWVzX29yZGVyKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX29yZGVyKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4UHJvcGVydHkoIm1hcmtvIiwgIm5hbWUiLCAibWFya28iKSwgICAgLy8gdnBpZCA9IDAKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXhQcm9wZXJ0eSgibWFya28iLCAiYWdlIiwgMjkpLCAgICAgICAgICAvLyB2cGlkID0gMQotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleFByb3BlcnR5KCJ2YWRhcyIsICJuYW1lIiwgInZhZGFzIiksICAgIC8vIHZwaWQgPSAyCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4UHJvcGVydHkoInZhZGFzIiwgImFnZSIsIDI3KSwgICAgICAgICAgLy8gdnBpZCA9IDMKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXhQcm9wZXJ0eSgibG9wIiwgIm5hbWUiLCAibG9wIiksICAgICAgICAvLyB2cGlkID0gNAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleFByb3BlcnR5KCJsb3AiLCAibGFuZyIsICJqYXZhIiksICAgICAgIC8vIHZwaWQgPSA1Ci0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4UHJvcGVydHkoImpvc2giLCAibmFtZSIsICJqb3NoIiksICAgICAgLy8gdnBpZCA9IDYKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXhQcm9wZXJ0eSgiam9zaCIsICJhZ2UiLCAzMiksICAgICAgICAgICAvLyB2cGlkID0gNwotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleFByb3BlcnR5KCJyaXBwbGUiLCAibmFtZSIsICJyaXBwbGUiKSwgIC8vIHZwaWQgPSA4Ci0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4UHJvcGVydHkoInJpcHBsZSIsICJsYW5nIiwgImphdmEiKSwgICAgLy8gdnBpZCA9IDkKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXhQcm9wZXJ0eSgicGV0ZXIiLCAibmFtZSIsICJwZXRlciIpLCAgICAvLyB2cGlkID0gMTAKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXhQcm9wZXJ0eSgicGV0ZXIiLCAiYWdlIiwgMzUpICAgICAgICAgICAvLyB2cGlkID0gMTEKLSAgICAgICAgKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPcmRlciBieSBlZGdlIHByb3BlcnR5IChvcmRlcnMgYnkga2V5LCB0aGVuIHZhbHVlKS4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEVkZ2VGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX0VfcHJvcGVydGllc19vcmRlcl92YWx1ZSgpIHsKLSAgICAgICAgZmluYWwgQXRvbWljSW50ZWdlciBhID0gbmV3IEF0b21pY0ludGVnZXIoKTsKLSAgICAgICAgZy5FKCkuZm9yRWFjaFJlbWFpbmluZyhlIC0+IGcuRShlLmlkKCkpLnByb3BlcnR5KCJhIiwgYS5nZXRBbmRJbmNyZW1lbnQoKSkuaXRlcmF0ZSgpKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgYXNjID0gZ2V0X2dfRV9wcm9wZXJ0aWVzX29yZGVyX3ZhbHVlKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybShhc2MpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgMC4yLCAwLjQsIDAuNCwgMC41LCAxLjAsIDEuMAotICAgICAgICApLCBhc2MpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbCBkZXNjID0gZ2V0X2dfRV9wcm9wZXJ0aWVzX29yZGVyX2J5WGRlc2NYX3ZhbHVlKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybShkZXNjKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIDEuMCwgMS4wLCAwLjUsIDAuNCwgMC40LCAwLjIsIDUsIDQsIDMsIDIsIDEsIDAKLSAgICAgICAgKSwgZGVzYyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTWl4ZWQgdHlwZSB2YWx1ZXMgaW5jbHVkaW5nIGxpc3QsIHNldCwgbWFwLCB1dWlkLCBkYXRlLCBib29sZWFuLCBudW1lcmljLCBzdHJpbmcsIG51bGwuCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdF9vcmRlcigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX2luamVjdF9vcmRlcigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsCi0gICAgICAgICAgICAgICAgMSwgMi4wLAotICAgICAgICAgICAgICAgIENvbnN0YW50cy5kYXRlLAotICAgICAgICAgICAgICAgICJiYXIiLCAiZm9vIiwKLSAgICAgICAgICAgICAgICBDb25zdGFudHMudXVpZCwKLSAgICAgICAgICAgICAgICBDb25zdGFudHMuc2V0MSwgQ29uc3RhbnRzLnNldDIsCi0gICAgICAgICAgICAgICAgQ29uc3RhbnRzLmxpc3QxLCBDb25zdGFudHMubGlzdDIsCi0gICAgICAgICAgICAgICAgQ29uc3RhbnRzLm1hcDEsIENvbnN0YW50cy5tYXAyCi0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTW9yZSBtaXhlZCB0eXBlIHZhbHVlcyBpbmNsdWRpbmcgYSBKYXZhIE9iamVjdCAodW5rbm93biB0eXBlKS4KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoRmVhdHVyZXMuRkVBVFVSRV9PUkRFUkFCSUxJVFlfU0VNQU5USUNTKQotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0X29yZGVyX3dpdGhfdW5rbm93bl90eXBlKCkgewotICAgICAgICBmaW5hbCBPYmplY3QgdW5rbm93biA9IG5ldyBPYmplY3QoKTsKLSAgICAgICAgZmluYWwgT2JqZWN0W10gdW5vcmRlcmVkID0gbmV3IE9iamVjdFtDb25zdGFudHMudW5vcmRlcmVkLmxlbmd0aCsxXTsKLSAgICAgICAgdW5vcmRlcmVkWzBdID0gdW5rbm93bjsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShDb25zdGFudHMudW5vcmRlcmVkLCAwLCB1bm9yZGVyZWQsIDEsIENvbnN0YW50cy51bm9yZGVyZWQubGVuZ3RoKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZy5pbmplY3QodW5vcmRlcmVkKS5vcmRlcigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsCi0gICAgICAgICAgICAgICAgMSwgMi4wLAotICAgICAgICAgICAgICAgIENvbnN0YW50cy5kYXRlLAotICAgICAgICAgICAgICAgICJiYXIiLCAiZm9vIiwKLSAgICAgICAgICAgICAgICBDb25zdGFudHMudXVpZCwKLSAgICAgICAgICAgICAgICBDb25zdGFudHMuc2V0MSwgQ29uc3RhbnRzLnNldDIsCi0gICAgICAgICAgICAgICAgQ29uc3RhbnRzLmxpc3QxLCBDb25zdGFudHMubGlzdDIsCi0gICAgICAgICAgICAgICAgQ29uc3RhbnRzLm1hcDEsIENvbnN0YW50cy5tYXAyLAotICAgICAgICAgICAgICAgIHVua25vd24KLSAgICAgICAgKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPcmRlciBhc2MgYnkgdmVydGV4OiB2WzNdLCB2WzVdCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfb3JkZXJfYnlYYXNjWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF9vcmRlcl9ieVhhc2NYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4KCJsb3AiKSwgICAgICAgICAvLyB2aWQgPSAzCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4KCJyaXBwbGUiKSAgICAgICAvLyB2aWQgPSA1Ci0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgYXNjIGJ5IHZlcnRleCBpbiBwYXRoOiB2WzNdLCB2WzVdCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4KCJsb3AiKSwgICAgICAgICAvLyB2aWQgPSAzCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4KCJyaXBwbGUiKSAgICAgICAvLyB2aWQgPSA1Ci0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgYXNjIGJ5IGVkZ2U6IGVbMTBdLCB2W2UxMV0KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEVkZ2VGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfb3V0RV9vcmRlcl9ieVhhc2NYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRfb3V0RV9vcmRlcl9ieVhhc2NYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgY29udmVydFRvRWRnZSgiam9zaCIsICJjcmVhdGVkIiwgInJpcHBsZSIpLCAgICAgIC8vIGVpZCA9IDEwCi0gICAgICAgICAgICAgICAgY29udmVydFRvRWRnZSgiam9zaCIsICJjcmVhdGVkIiwgImxvcCIpICAgICAgICAgIC8vIGVpZCA9IDExCi0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgYXNjIGJ5IGVkZ2UgaW4gcGF0aDogZVsxMF0sIGVbMTFdCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBFZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBFZGdlRmVhdHVyZXMuRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dEVfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dEVfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb0VkZ2UoImpvc2giLCAiY3JlYXRlZCIsICJyaXBwbGUiKSwgICAgICAvLyBlaWQgPSAxMAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb0VkZ2UoImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKSAgICAgICAgICAvLyBlaWQgPSAxMQotICAgICAgICApLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9yZGVyIGFzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IGlkIGluIHBhdGguCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gVmVydGV4UHJvcGVydHlGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWF92YWx1ZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF9wcm9wZXJ0aWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYYXNjWF9zZWxlY3RYaGVhZFhfdmFsdWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3JkZXJlZFJlc3VsdHMoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAibG9wIiwgICAgICAvLyB2aWQgPSAzLCB2cGlkID0gNAotICAgICAgICAgICAgICAgICJqYXZhIiwgICAgIC8vIHZpZCA9IDMsIHZwaWQgPSA1Ci0gICAgICAgICAgICAgICAgInJpcHBsZSIsICAgLy8gdmlkID0gNSwgdnBpZCA9IDgKLSAgICAgICAgICAgICAgICAiamF2YSIgICAgICAvLyB2aWQgPSA1LCB2cGlkID0gOQotICAgICAgICApLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9yZGVyIGFzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IHZhbHVlIGluIHBhdGguCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfdmFsdWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYYXNjWF9zZWxlY3RYaGVhZFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9vdXRfdmFsdWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYYXNjWF9zZWxlY3RYaGVhZFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3JkZXJlZFJlc3VsdHMoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAiamF2YSIsICAgICAvLyB2aWQgPSAzLCB2YWwgPSAiamF2YSIKLSAgICAgICAgICAgICAgICAibG9wIiwgICAgICAvLyB2aWQgPSAzLCB2YWwgPSAibG9wIgotICAgICAgICAgICAgICAgICJqYXZhIiwgICAgIC8vIHZpZCA9IDUsIHZhbCA9ICJqYXZhIgotICAgICAgICAgICAgICAgICJyaXBwbGUiICAgIC8vIHZpZCA9IDUsIHZhbCA9ICJyaXBwbGUiCi0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgZGVzYyBieSB2ZXJ0ZXg6IHZbNV0sIHZbM10KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IFZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dF9vcmRlcl9ieVhkZXNjWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF9vcmRlcl9ieVhkZXNjWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleCgicmlwcGxlIiksICAgICAvLyB2aWQgPSA1Ci0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4KCJsb3AiKSAgICAgICAgIC8vIHZpZCA9IDMKLSAgICAgICAgKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBPcmRlciBkZXNjIGJ5IHZlcnRleCBpbiBwYXRoOiB2WzVdLCB2WzNdCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3JkZXJlZFJlc3VsdHMoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXgoInJpcHBsZSIpLCAgICAgLy8gdmlkID0gNQotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleCgibG9wIikgICAgICAgICAvLyB2aWQgPSAzCi0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgZGVzYyBieSBlZGdlOiBlWzExXSwgdltlMTBdCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBFZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBFZGdlRmVhdHVyZXMuRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dEVfb3JkZXJfYnlYZGVzY1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9vdXRFX29yZGVyX2J5WGRlc2NYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgY29udmVydFRvRWRnZSgiam9zaCIsICJjcmVhdGVkIiwgImxvcCIpLCAgICAgICAgLy8gZWlkID0gMTEKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9FZGdlKCJqb3NoIiwgImNyZWF0ZWQiLCAicmlwcGxlIikgICAgICAvLyBlaWQgPSAxMAotICAgICAgICApLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9yZGVyIGRlc2MgYnkgZWRnZSBpbiBwYXRoOiBlWzExXSwgZVsxMF0KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaEZlYXR1cmVzLkZFQVRVUkVfT1JERVJBQklMSVRZX1NFTUFOVElDUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEVkZ2VGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfb3V0RV9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsIHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dEVfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3JkZXJlZFJlc3VsdHMoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9FZGdlKCJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIiksICAgICAgICAvLyBlaWQgPSAxMQotICAgICAgICAgICAgICAgIGNvbnZlcnRUb0VkZ2UoImpvc2giLCAiY3JlYXRlZCIsICJyaXBwbGUiKSAgICAgIC8vIGVpZCA9IDEwCi0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgZGVzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IGlkIGluIHBhdGguCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gVmVydGV4UHJvcGVydHlGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFhfdmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9vdXRfcHJvcGVydGllc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWF92YWx1ZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgICJqYXZhIiwgICAgIC8vIHZpZCA9IDUsIHZwaWQgPSA5Ci0gICAgICAgICAgICAgICAgInJpcHBsZSIsICAgLy8gdmlkID0gNSwgdnBpZCA9IDgKLSAgICAgICAgICAgICAgICAiamF2YSIsICAgICAvLyB2aWQgPSAzLCB2cGlkID0gNQotICAgICAgICAgICAgICAgICJsb3AiICAgICAgIC8vIHZpZCA9IDMsIHZwaWQgPSA0Ci0gICAgICAgICksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3JkZXIgZGVzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IHZhbHVlIGluIHBhdGguCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGhGZWF0dXJlcy5GRUFUVVJFX09SREVSQUJJTElUWV9TRU1BTlRJQ1MpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBWZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IFZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfdmFsdWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRfb3V0X3ZhbHVlc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgICJyaXBwbGUiLCAgIC8vIHZpZCA9IDUsIHZhbCA9ICJyaXBwbGUiCi0gICAgICAgICAgICAgICAgImphdmEiLCAgICAgLy8gdmlkID0gNSwgdmFsID0gImphdmEiCi0gICAgICAgICAgICAgICAgImxvcCIsICAgICAgLy8gdmlkID0gMywgdmFsID0gImxvcCIKLSAgICAgICAgICAgICAgICAiamF2YSIgICAgICAvLyB2aWQgPSAzLCB2YWwgPSAiamF2YSIKLSAgICAgICAgKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBPcmRlcmFiaWxpdHlUZXN0IGltcGxlbWVudHMgQ29uc3RhbnRzIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl92YWx1ZXNfb3JkZXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCkub3JkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PiBnZXRfZ19WX3Byb3BlcnRpZXNfb3JkZXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBPYmplY3Q+IGdldF9nX0VfcHJvcGVydGllc19vcmRlcl92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgT2JqZWN0PiBnZXRfZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1hfdmFsdWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykudmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPE9iamVjdCwgT2JqZWN0PiBnZXRfZ19pbmplY3Rfb3JkZXIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QodW5vcmRlcmVkKS5vcmRlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb3JkZXIgYXNjIGJ5IHZlcnRleDogdlszXSwgdls1XQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9vdXRfb3V0X29yZGVyX2J5WGFzY1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5hc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb3JkZXIgYXNjIGJ5IHZlcnRleCBpbiBwYXRoOiB2WzNdLCB2WzVdCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KCJoZWFkIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBvcmRlciBhc2MgYnkgZWRnZTogZVsxMF0sIHZbZTExXQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1Zfb3V0X291dEVfb3JkZXJfYnlYYXNjWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vdXRFKCkub3JkZXIoKS5ieShPcmRlci5hc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb3JkZXIgYXNjIGJ5IGVkZ2UgaW4gcGF0aDogZVsxMF0sIGVbMTFdCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9vdXRfb3V0RV9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm91dEUoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KCJoZWFkIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBvcmRlciBhc2MgYnkgdmVydGV4IGFuZCB0aGVuIHZlcnRleCBwcm9wZXJ0eSBpZCBpbiBwYXRoLgotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdCgiaGVhZCIpLnZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBvcmRlciBhc2MgYnkgdmVydGV4IGFuZCB0aGVuIHZlcnRleCBwcm9wZXJ0eSB2YWx1ZSBpbiBwYXRoLgotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9vdXRfb3V0X3ZhbHVlc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoImhlYWQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG9yZGVyIGRlc2MgYnkgdmVydGV4OiB2WzVdLCB2WzNdCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX291dF9vdXRfb3JkZXJfYnlYZGVzY1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5kZXNjKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG9yZGVyIGRlc2MgYnkgdmVydGV4IGluIHBhdGg6IHZbNV0sIHZbM10KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3V0X291dF9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdCgiaGVhZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb3JkZXIgZGVzYyBieSBlZGdlOiBlWzExXSwgdltlMTBdCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9vdXRfb3V0RV9vcmRlcl9ieVhkZXNjWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vdXRFKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG9yZGVyIGRlc2MgYnkgZWRnZSBpbiBwYXRoOiBlWzExXSwgZVsxMF0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX291dF9vdXRFX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm91dEUoKS5hcygiaGVhZCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdCgiaGVhZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb3JkZXIgZGVzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IGlkIGluIHBhdGguCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX291dF9vdXRfcHJvcGVydGllc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGRlc2NYX3NlbGVjdFhoZWFkWF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoImhlYWQiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoImhlYWQiKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb3JkZXIgZGVzYyBieSB2ZXJ0ZXggYW5kIHRoZW4gdmVydGV4IHByb3BlcnR5IHZhbHVlIGluIHBhdGguCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX291dF9vdXRfdmFsdWVzX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKCJoZWFkIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KCJoZWFkIik7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvQnJhbmNoVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9CcmFuY2hUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMjc1M2YuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9CcmFuY2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAuZ3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5sdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLm5lcTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmNvbnN0YW50OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhc0xhYmVsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pZGVudGl0eTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmxhYmVsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy52YWx1ZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGljay5hbnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGljay5ub25lOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCcmFuY2hUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX2JyYW5jaFhsYWJlbF9pc1hwZXJzb25YX2NvdW50WF9vcHRpb25YMV9fYWdlWF9vcHRpb25YMF9fbGFuZ1hfb3B0aW9uWDBfX25hbWVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX2JyYW5jaFhsYWJlbF9pc1hwZXJzb25YX2NvdW50WF9vcHRpb25YMV9fYWdlWF9vcHRpb25YMF9fbGFuZ1hfb3B0aW9uWDBfX25hbWVYX29wdGlvblhhbnlfX2xhYmVsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9icmFuY2hYYWdlWF9vcHRpb25YbHRYMzBYX195b3VuZ1hfb3B0aW9uWGd0WDMwWF9fb2xkWF9vcHRpb25Ybm9uZV9fb25fdGhlX2VkZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX2JyYW5jaFhpZGVudGl0eVhfb3B0aW9uWGhhc0xhYmVsWHNvZnR3YXJlWF9faW5YY3JlYXRlZFhfbmFtZV9vcmRlcl9mb2xkWF9vcHRpb25YaGFzWG5hbWVfdmFkYXNYX19hZ2VYX29wdGlvblhuZXFYMTIzWF9fYm90aEVfY291bnRYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYnJhbmNoWGxhYmVsX2lzWHBlcnNvblhfY291bnRYX29wdGlvblgxX19hZ2VYX29wdGlvblgwX19sYW5nWF9vcHRpb25YMF9fbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImphdmEiLCAiamF2YSIsICJsb3AiLCAicmlwcGxlIiwgMjksIDI3LCAzMiwgMzUpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWF9vcHRpb25YYW55X19sYWJlbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWF9vcHRpb25YYW55X19sYWJlbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqYXZhIiwgImphdmEiLCAibG9wIiwgInJpcHBsZSIsIDI5LCAyNywgMzIsIDM1LCAicGVyc29uIiwgInBlcnNvbiIsICJwZXJzb24iLCAicGVyc29uIiwgInNvZnR3YXJlIiwgInNvZnR3YXJlIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2JyYW5jaFhhZ2VYX29wdGlvblhsdFgzMFhfX3lvdW5nWF9vcHRpb25YZ3RYMzBYX19vbGRYX29wdGlvblhub25lX19vbl90aGVfZWRnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9icmFuY2hYYWdlWF9vcHRpb25YbHRYMzBYX195b3VuZ1hfb3B0aW9uWGd0WDMwWF9fb2xkWF9vcHRpb25Ybm9uZV9fb25fdGhlX2VkZ2VYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgieW91bmciLCAieW91bmciLCAib2xkIiwgIm9sZCIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9icmFuY2hYaWRlbnRpdHlYX29wdGlvblhoYXNMYWJlbFhzb2Z0d2FyZVhfX2luWGNyZWF0ZWRYX25hbWVfb3JkZXJfZm9sZFhfb3B0aW9uWGhhc1huYW1lX3ZhZGFzWF9fYWdlWF9vcHRpb25YbmVxWDEyM1hfX2JvdGhFX2NvdW50WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JyYW5jaFhpZGVudGl0eVhfb3B0aW9uWGhhc0xhYmVsWHNvZnR3YXJlWF9faW5YY3JlYXRlZFhfbmFtZV9vcmRlcl9mb2xkWF9vcHRpb25YaGFzWG5hbWVfdmFkYXNYX19hZ2VYX29wdGlvblhuZXFYMTIzWF9fYm90aEVfY291bnRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdChBcnJheXMuYXNMaXN0KCJqb3NoIiwgImpvc2giLCAibWFya28iLCAicGV0ZXIiKSwgMjcsIDEyTCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgQnJhbmNoVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfYnJhbmNoWGxhYmVsX2lzWHBlcnNvblhfY291bnRYX29wdGlvblgxX19hZ2VYX29wdGlvblgwX19sYW5nWF9vcHRpb25YMF9fbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYnJhbmNoKGxhYmVsKCkuaXMoInBlcnNvbiIpLmNvdW50KCkpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oMUwsIHZhbHVlcygiYWdlIikpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oMEwsIHZhbHVlcygibGFuZyIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKDBMLCB2YWx1ZXMoIm5hbWUiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWF9vcHRpb25YYW55X19sYWJlbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYnJhbmNoKGxhYmVsKCkuaXMoInBlcnNvbiIpLmNvdW50KCkpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oMUwsIHZhbHVlcygiYWdlIikpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oMEwsIHZhbHVlcygibGFuZyIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKDBMLCB2YWx1ZXMoIm5hbWUiKSkKLSAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihhbnksIGxhYmVsKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfYnJhbmNoWGFnZVhfb3B0aW9uWGx0WDMwWF9feW91bmdYX29wdGlvblhndFgzMFhfX29sZFhfb3B0aW9uWG5vbmVfX29uX3RoZV9lZGdlWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikKLSAgICAgICAgICAgICAgICAgICAgLmJyYW5jaCh2YWx1ZXMoImFnZSIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKGx0KDMwKSwgY29uc3RhbnQoInlvdW5nIikpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oZ3QoMzApLCBjb25zdGFudCgib2xkIikpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24obm9uZSwgY29uc3RhbnQoIm9uIHRoZSBlZGdlIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfYnJhbmNoWGlkZW50aXR5WF9vcHRpb25YaGFzTGFiZWxYc29mdHdhcmVYX19pblhjcmVhdGVkWF9uYW1lX29yZGVyX2ZvbGRYX29wdGlvblhoYXNYbmFtZV92YWRhc1hfX2FnZVhfb3B0aW9uWG5lcVgxMjNYX19ib3RoRV9jb3VudFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYnJhbmNoKGlkZW50aXR5KCkpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oaGFzTGFiZWwoInNvZnR3YXJlIiksIGluKCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5mb2xkKCkpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oaGFzKCJuYW1lIiwidmFkYXMiKSwgdmFsdWVzKCJhZ2UiKSkKLSAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihuZXEoMTIzKSwgYm90aEUoKS5jb3VudCgpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvYnJhbmNoL0Nob29zZVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvQ2hvb3NlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjdkOGMwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvQ2hvb3NlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2g7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QaWNrOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLk1hcEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhc0xhYmVsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pZGVudGl0eTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ubGFiZWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18udmFsdWVzOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgSm9zaHVhIFNoaW5hdmllciAoaHR0cDovL2ZvcnR5dHdvLm5ldCkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2hvb3NlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfY2hvb3NlWG91dF9jb3VudFhfb3B0aW9uWDJMX25hbWVYX29wdGlvblgzTF9hZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2FuZF9vdXRYY3JlYXRlZFhfX291dFhrbm93c1hfX2lkZW50aXR5WF9uYW1lKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2Nob29zZVhsYWJlbFhfb3B0aW9uWGJsYWhfX291dFhrbm93c1hYX29wdGlvblhibGVlcF9fb3V0WGNyZWF0ZWRYWF9vcHRpb25Ybm9uZV9faWRlbnRpdHlYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfY2hvb3NlWG91dFhrbm93c1hfY291bnRfaXNYZ3RYMFhYX19vdXRYa25vd3NYWF9uYW1lKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHAxWF9jaG9vc2VYb3V0RVhrbm93c1hfX291dFhrbm93c1hYX2FzWHAyWF9zZWxlY3RYcDFfcDJYX2J5WG5hbWVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYYWdlWF9fb3B0aW9uWDI3TF9fY29uc3RhbnRYeW91bmdYWF9vcHRpb25Ybm9uZV9fY29uc3RhbnRYb2xkWFhfZ3JvdXBDb3VudCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBMaXN0PEludGVnZXI+PiBnZXRfZ19pbmplY3RYMVhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBMaXN0PEludGVnZXI+PiBnZXRfZ19pbmplY3RYMlhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2Nob29zZVhvdXRfY291bnRYX29wdGlvblgyTF9uYW1lWF9vcHRpb25YM0xfYWdlWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2Nob29zZVhvdXRfY291bnRYX29wdGlvblgyTF9uYW1lWF9vcHRpb25YM0xfYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTG9uZz4gY291bnRzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBPYmplY3QgbiA9ICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgTWFwSGVscGVyLmluY3IoY291bnRzLCBuIGluc3RhbmNlb2YgVmVydGV4ID8gVmVydGV4LmNsYXNzIDogbi50b1N0cmluZygpLCAxTCk7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNvdW50cy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDEpLCBjb3VudHMuZ2V0KCIyOSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxKSwgY291bnRzLmdldCgiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZig0KSwgY291bnRzLmdldChWZXJ0ZXguY2xhc3MpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfYW5kX291dFhjcmVhdGVkWF9fb3V0WGtub3dzWF9faWRlbnRpdHlYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF9hbmRfb3V0WGNyZWF0ZWRYX19vdXRYa25vd3NYX19pZGVudGl0eVhfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImxvcCIsICJyaXBwbGUiLCAiam9zaCIsICJ2YWRhcyIsICJ2YWRhcyIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jaG9vc2VYbGFiZWxYX29wdGlvblhibGFoX19vdXRYa25vd3NYWF9vcHRpb25YYmxlZXBfX291dFhjcmVhdGVkWFhfb3B0aW9uWG5vbmVfX2lkZW50aXR5WF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY2hvb3NlWGxhYmVsWF9vcHRpb25YYmxhaF9fb3V0WGtub3dzWFhfb3B0aW9uWGJsZWVwX19vdXRYY3JlYXRlZFhYX29wdGlvblhub25lX19pZGVudGl0eVhfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgInZhZGFzIiwgInBldGVyIiwgImpvc2giLCAibG9wIiwgInJpcHBsZSIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jaG9vc2VYb3V0WGtub3dzWF9jb3VudF9pc1hndFgwWFhfX291dFhrbm93c1hYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9jaG9vc2VYb3V0WGtub3dzWF9jb3VudF9pc1hndFgwWFhfX291dFhrbm93c1hYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJ2YWRhcyIsICJqb3NoIiwgInZhZGFzIiwgImpvc2giLCAicGV0ZXIiLCAibG9wIiwgInJpcHBsZSIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHAxWF9jaG9vc2VYb3V0RVhrbm93c1hfX291dFhrbm93c1hYX2FzWHAyWF9zZWxlY3RYcDFfcDJYX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcDFYX2Nob29zZVhvdXRFWGtub3dzWF9fb3V0WGtub3dzWFhfYXNYcDJYX3NlbGVjdFhwMV9wMlhfYnlYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhtYWtlTWFwTGlzdCgyLAotICAgICAgICAgICAgICAgICJwMSIsICJtYXJrbyIsICJwMiIsICJ2YWRhcyIsCi0gICAgICAgICAgICAgICAgInAxIiwgIm1hcmtvIiwgInAyIiwgImpvc2giLAotICAgICAgICAgICAgICAgICJwMSIsICJ2YWRhcyIsICJwMiIsICJ2YWRhcyIsCi0gICAgICAgICAgICAgICAgInAxIiwgImpvc2giLCAicDIiLCAiam9zaCIsCi0gICAgICAgICAgICAgICAgInAxIiwgInBldGVyIiwgInAyIiwgInBldGVyIgotICAgICAgICApLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhhZ2VYX19vcHRpb25YMjdMX19jb25zdGFudFh5b3VuZ1hYX29wdGlvblhub25lX19jb25zdGFudFhvbGRYWF9ncm91cENvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhhZ2VYX19vcHRpb25YMjdMX19jb25zdGFudFh5b3VuZ1hYX29wdGlvblhub25lX19jb25zdGFudFhvbGRYWF9ncm91cENvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBleHBlY3RlZCA9IG5ldyBIYXNoTWFwPD4oMik7Ci0gICAgICAgIGV4cGVjdGVkLnB1dCgieW91bmciLCAxTCk7Ci0gICAgICAgIGV4cGVjdGVkLnB1dCgib2xkIiwgM0wpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBjaGVja01hcChleHBlY3RlZCwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgZ19pbmplY3RYMVhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEludGVnZXIsIExpc3Q8SW50ZWdlcj4+IHRyYXZlcnNhbCA9IGdldF9nX2luamVjdFgxWF9jaG9vc2VYaXNYMVhfX2NvbnN0YW50WDEwWGZvbGRfX2ZvbGRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0IGV4cGVjdGVkID0gbmV3IEFycmF5TGlzdCgpIHt7IGFkZCgxMCk7fX07Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WDJYX2Nob29zZVhpc1gxWF9fY29uc3RhbnRYMTBYZm9sZF9fZm9sZFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBMaXN0PEludGVnZXI+PiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYMlhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdCBleHBlY3RlZCA9IG5ldyBBcnJheUxpc3QoKSB7eyBhZGQoMik7fX07Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBDaG9vc2VUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9jaG9vc2VYb3V0X2NvdW50WF9vcHRpb25YMkxfbmFtZVhfb3B0aW9uWDNMX2FnZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY2hvb3NlKG91dCgpLmNvdW50KCkpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oMkwsIHZhbHVlcygibmFtZSIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKDNMLCB2YWx1ZXMoImFnZSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2FuZF9vdXRYY3JlYXRlZFhfX291dFhrbm93c1hfX2lkZW50aXR5WF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmNob29zZShoYXNMYWJlbCgicGVyc29uIikuYW5kKCkub3V0KCJjcmVhdGVkIiksIG91dCgia25vd3MiKSwgaWRlbnRpdHkoKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9jaG9vc2VYbGFiZWxYX29wdGlvblhibGFoX19vdXRYa25vd3NYWF9vcHRpb25YYmxlZXBfX291dFhjcmVhdGVkWFhfb3B0aW9uWG5vbmVfX2lkZW50aXR5WF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmNob29zZShsYWJlbCgpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKCJibGFoIiwgb3V0KCJrbm93cyIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKCJibGVlcCIsIG91dCgiY3JlYXRlZCIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKFBpY2subm9uZSwgaWRlbnRpdHkoKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9jaG9vc2VYb3V0WGtub3dzWF9jb3VudF9pc1hndFgwWFhfX291dFhrbm93c1hYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY2hvb3NlKG91dCgia25vd3MiKS5jb3VudCgpLmlzKFAuZ3QoMCkpLCBvdXQoImtub3dzIikpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcDFYX2Nob29zZVhvdXRFWGtub3dzWF9fb3V0WGtub3dzWFhfYXNYcDJYX3NlbGVjdFhwMV9wMlhfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFzKCJwMSIpLmNob29zZShvdXRFKCJrbm93cyIpLCBvdXQoImtub3dzIikpLmFzKCJwMiIpLjxTdHJpbmc+c2VsZWN0KCJwMSIsICJwMiIpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGFnZVhfX29wdGlvblgyN0xfX2NvbnN0YW50WHlvdW5nWFhfb3B0aW9uWG5vbmVfX2NvbnN0YW50WG9sZFhYX2dyb3VwQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmNob29zZSh2YWx1ZXMoImFnZSIpKQotICAgICAgICAgICAgICAgICAgICAub3B0aW9uKDI3TCwgX18uY29uc3RhbnQoInlvdW5nIikpCi0gICAgICAgICAgICAgICAgICAgIC5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgib2xkIikpCi0gICAgICAgICAgICAgICAgICAgIC5ncm91cENvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBMaXN0PEludGVnZXI+PiBnZXRfZ19pbmplY3RYMVhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdCgxKS5jaG9vc2UoX18uaXMoMSksIF9fLmNvbnN0YW50KDEwKS5mb2xkKCksIF9fLmZvbGQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBMaXN0PEludGVnZXI+PiBnZXRfZ19pbmplY3RYMlhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdCgyKS5jaG9vc2UoX18uaXMoMSksIF9fLmNvbnN0YW50KDEwKS5mb2xkKCksIF9fLmZvbGQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9Mb2NhbFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvTG9jYWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDIwZjkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9Mb2NhbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5hczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluRTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5wcm9wZXJ0aWVzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTG9jYWxUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9sb2NhbFhwcm9wZXJ0aWVzWGxvY2F0aW9uWF9vcmRlcl9ieVh2YWx1ZVhfbGltaXRYMlhYX3ZhbHVlKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9oYXNYbGFiZWxfcGVyc29uWF9hc1hhWF9sb2NhbFhvdXRYY3JlYXRlZFhfYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5WGlkWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfbG9jYWxYb3V0RV9jb3VudFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfbGltaXRYMVhYX2luVl9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfbG9jYWxYYm90aEVYY3JlYXRlZFhfbGltaXRYMVhYX290aGVyVl9uYW1lKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRVgxX2NyZWF0ZWRYX2xpbWl0WDFYWChmaW5hbCBPYmplY3QgdjRJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRVhrbm93c19jcmVhdGVkWF9saW1pdFgxWFgoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFhfb3RoZXJWX25hbWUoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgyWFhfb3RoZXJWX25hbWUoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9sb2NhbFhpbkVYa25vd3NYX2xpbWl0WDJYWF9vdXRWX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2xvY2FsWG1hdGNoWHByb2plY3RfX2NyZWF0ZWRfcGVyc29uX19wZXJzb25fbmFtZV9uYW1lWF9zZWxlY3RYbmFtZV9wcm9qZWN0WF9ieV9ieVhuYW1lWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChDUkVXKQotICAgIHB1YmxpYyB2b2lkIGdfVl9sb2NhbFhwcm9wZXJ0aWVzWGxvY2F0aW9uWF9vcmRlcl9ieVh2YWx1ZVhfbGltaXRYMlhYX3ZhbHVlKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbG9jYWxYcHJvcGVydGllc1hsb2NhdGlvblhfb3JkZXJfYnlYdmFsdWVYX2xpbWl0WDJYWF92YWx1ZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImJydXNzZWxzIiwgInNhbiBkaWVnbyIsICJjZW50cmV2aWxsZSIsICJkdWxsZXMiLCAiYmFsdGltb3JlIiwgImJyZW1lbiIsICJhYWNoZW4iLCAia2Fpc2Vyc2xhdXRlcm4iKSwgdHJhdmVyc2FsKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbGFiZWxfcGVyc29uWF9hc1hhWF9sb2NhbFhvdXRYY3JlYXRlZFhfYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5WGlkWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbGFiZWxfcGVyc29uWF9hc1hhWF9sb2NhbFhvdXRYY3JlYXRlZFhfYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5WGlkWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICAgICAgaWYgKG1hcC5nZXQoImEiKS5lcXVhbHMoIm1hcmtvIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoImxvcCIpLCBtYXAuZ2V0KCJiIikpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXAuZ2V0KCJhIikuZXF1YWxzKCJqb3NoIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKS5lcXVhbHMobWFwLmdldCgiYiIpKSB8fCBjb252ZXJ0VG9WZXJ0ZXhJZCgicmlwcGxlIikuZXF1YWxzKG1hcC5nZXQoImIiKSkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXAuZ2V0KCJhIikuZXF1YWxzKCJwZXRlciIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSwgbWFwLmdldCgiYiIpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZmFpbCgiVGhlIGZvbGxvd2luZyBtYXAgc2hvdWxkIG5vdCBoYXZlIGJlZW4gcmV0dXJuZWQ6ICIgKyBtYXApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbG9jYWxYb3V0RV9jb3VudFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbG9jYWxYb3V0RV9jb3VudFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDNsLCAwbCwgMGwsIDBsLCAxbCwgMmwpLCB0cmF2ZXJzYWwpOwotCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDRYX2xvY2FsWGJvdGhFWGtub3dzX2NyZWF0ZWRYX2xpbWl0WDFYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRVhrbm93c19jcmVhdGVkWF9saW1pdFgxWFgoY29udmVydFRvVmVydGV4SWQoImpvc2giKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRUcnVlKGVkZ2UubGFiZWwoKS5lcXVhbHMoImNyZWF0ZWQiKSB8fCBlZGdlLmxhYmVsKCkuZXF1YWxzKCJrbm93cyIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShlZGdlLnZhbHVlKCJ3ZWlnaHQiKS5lcXVhbHMoMS4wZCkgfHwgZWRnZS52YWx1ZSgid2VpZ2h0IikuZXF1YWxzKDAuNGQpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDRYX2xvY2FsWGJvdGhFX2xpbWl0WDFYWF9vdGhlclZfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDRYX2xvY2FsWGJvdGhFX2xpbWl0WDFYWF9vdGhlclZfbmFtZShjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobmFtZS5lcXVhbHMoIm1hcmtvIikgfHwgbmFtZS5lcXVhbHMoInJpcHBsZSIpIHx8IG5hbWUuZXF1YWxzKCJsb3AiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgyWFhfb3RoZXJWX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgyWFhfb3RoZXJWX25hbWUoY29udmVydFRvVmVydGV4SWQoImpvc2giKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG5hbWUuZXF1YWxzKCJtYXJrbyIpIHx8IG5hbWUuZXF1YWxzKCJyaXBwbGUiKSB8fCBuYW1lLmVxdWFscygibG9wIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbG9jYWxYaW5FWGtub3dzWF9saW1pdFgyWFhfb3V0Vl9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbG9jYWxYaW5FWGtub3dzWF9saW1pdFgyWFhfb3V0Vl9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHModHJhdmVyc2FsLm5leHQoKSwgIm1hcmtvIik7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYNFhfbG9jYWxYYm90aEVYMV9jcmVhdGVkWF9saW1pdFgxWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZYNFhfbG9jYWxYYm90aEVYMV9jcmVhdGVkWF9saW1pdFgxWFgoY29udmVydFRvVmVydGV4SWQoImpvc2giKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImNyZWF0ZWQiLCBlZGdlLmxhYmVsKCkpOwotICAgICAgICBhc3NlcnRUcnVlKGVkZ2UudmFsdWUoIndlaWdodCIpLmVxdWFscygxLjBkKSB8fCBlZGdlLnZhbHVlKCJ3ZWlnaHQiKS5lcXVhbHMoMC40ZCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfbGltaXRYMVhYX2luVl9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfbGltaXRYMVhYX2luVl9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lLmVxdWFscygidmFkYXMiKSB8fCBuYW1lLmVxdWFscygiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2xvY2FsWGJvdGhFWGNyZWF0ZWRYX2xpbWl0WDFYWF9vdGhlclZfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2xvY2FsWGJvdGhFWGNyZWF0ZWRYX2xpbWl0WDFYWF9vdGhlclZfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lLmVxdWFscygibWFya28iKSB8fCBuYW1lLmVxdWFscygibG9wIikgfHwgbmFtZS5lcXVhbHMoImpvc2giKSB8fCBuYW1lLmVxdWFscygicmlwcGxlIikgfHwgbmFtZS5lcXVhbHMoInBldGVyIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbG9jYWxYbWF0Y2hYcHJvamVjdF9fY3JlYXRlZF9wZXJzb25fX3BlcnNvbl9uYW1lX25hbWVYX3NlbGVjdFhuYW1lX3Byb2plY3RYX2J5X2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2xvY2FsWG1hdGNoWHByb2plY3RfX2NyZWF0ZWRfcGVyc29uX19wZXJzb25fbmFtZV9uYW1lWF9zZWxlY3RYbmFtZV9wcm9qZWN0WF9ieV9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgIm5hbWUiLCAibWFya28iLCAicHJvamVjdCIsICJsb3AiLAotICAgICAgICAgICAgICAgICJuYW1lIiwgImpvc2giLCAicHJvamVjdCIsICJsb3AiLAotICAgICAgICAgICAgICAgICJuYW1lIiwgInBldGVyIiwgInByb2plY3QiLCAibG9wIiwKLSAgICAgICAgICAgICAgICAibmFtZSIsICJqb3NoIiwgInByb2plY3QiLCAicmlwcGxlIiksIHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIExvY2FsVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfbG9jYWxYcHJvcGVydGllc1hsb2NhdGlvblhfb3JkZXJfYnlYdmFsdWVYX2xpbWl0WDJYWF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5sb2NhbChwcm9wZXJ0aWVzKCJsb2NhdGlvbiIpLm9yZGVyKCkuYnkoVC52YWx1ZSwgT3JkZXIuYXNjKS5yYW5nZSgwLCAyKSkudmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9oYXNYbGFiZWxfcGVyc29uWF9hc1hhWF9sb2NhbFhvdXRYY3JlYXRlZFhfYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5WGlkWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoVC5sYWJlbCwgInBlcnNvbiIpLmFzKCJhIikubG9jYWwob3V0KCJjcmVhdGVkIikuYXMoImIiKSkuc2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpLmJ5KFQuaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2xvY2FsWG91dEVfY291bnRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmxvY2FsKG91dEUoKS5jb3VudCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2xvY2FsWG91dEVYa25vd3NYX2xpbWl0WDFYWF9pblZfbmFtZShmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5sb2NhbChvdXRFKCJrbm93cyIpLmxpbWl0KDEpKS5pblYoKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2xvY2FsWGJvdGhFWGNyZWF0ZWRYX2xpbWl0WDFYWF9vdGhlclZfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5sb2NhbChib3RoRSgiY3JlYXRlZCIpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRVgxX2NyZWF0ZWRYX2xpbWl0WDFYWChmaW5hbCBPYmplY3QgdjRJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2NElkKS5sb2NhbChib3RoRSgiY3JlYXRlZCIpLmxpbWl0KDEpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRVhrbm93c19jcmVhdGVkWF9saW1pdFgxWFgoZmluYWwgT2JqZWN0IHY0SWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjRJZCkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFhfb3RoZXJWX25hbWUoZmluYWwgT2JqZWN0IHY0SWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjRJZCkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkub3RoZXJWKCkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgyWFhfb3RoZXJWX25hbWUoZmluYWwgT2JqZWN0IHY0SWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjRJZCkubG9jYWwoYm90aEUoKS5saW1pdCgyKSkub3RoZXJWKCkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9sb2NhbFhpbkVYa25vd3NYX2xpbWl0WDJYWF9vdXRWX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkubG9jYWwoaW5FKCJrbm93cyIpLmxpbWl0KDIpKS5vdXRWKCkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfbG9jYWxYbWF0Y2hYcHJvamVjdF9fY3JlYXRlZF9wZXJzb25fX3BlcnNvbl9uYW1lX25hbWVYX3NlbGVjdFhuYW1lX3Byb2plY3RYX2J5X2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmxvY2FsKF9fLm1hdGNoKAotICAgICAgICAgICAgICAgICAgICBhcygicHJvamVjdCIpLmluKCJjcmVhdGVkIikuYXMoInBlcnNvbiIpLAotICAgICAgICAgICAgICAgICAgICBhcygicGVyc29uIikudmFsdWVzKCJuYW1lIikuYXMoIm5hbWUiKSkpCi0gICAgICAgICAgICAgICAgICAgIC48U3RyaW5nPnNlbGVjdCgibmFtZSIsICJwcm9qZWN0IikuYnkoKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9PcHRpb25hbFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvT3B0aW9uYWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhYjI2MjQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9PcHRpb25hbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlByZWRpY2F0ZTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYWRkVjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIFBpZXRlciBNYXJ0aW4KLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgT3B0aW9uYWxUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgyWF9vcHRpb25hbFhvdXRYa25vd3NYWChPYmplY3QgdjJJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDJYX29wdGlvbmFsWGluWGtub3dzWFgoT2JqZWN0IHYySWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9vcHRpb25hbFhvdXRYa25vd3NYX29wdGlvbmFsWG91dFhjcmVhdGVkWFhYX3BhdGgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX29wdGlvbmFsWG91dF9vcHRpb25hbFhvdXRYWF9wYXRoKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX29wdGlvbmFsWGFkZFZYZG9nWFhfbGFiZWwoT2JqZWN0IHYxSWQpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDJYX29wdGlvbmFsWG91dFhrbm93c1hYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMlhfb3B0aW9uYWxYb3V0WGtub3dzWFgoY29udmVydFRvVmVydGV4SWQodGhpcy5ncmFwaCwgInZhZGFzIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAidmFkYXMiKSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDJYX29wdGlvbmFsWGluWGtub3dzWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgyWF9vcHRpb25hbFhpblhrbm93c1hYKGNvbnZlcnRUb1ZlcnRleElkKHRoaXMuZ3JhcGgsICJ2YWRhcyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgIm1hcmtvIiksIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX29wdGlvbmFsWG91dFhrbm93c1hfb3B0aW9uYWxYb3V0WGNyZWF0ZWRYWFhfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX29wdGlvbmFsWG91dFhrbm93c1hfb3B0aW9uYWxYb3V0WGNyZWF0ZWRYWFhfcGF0aCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgTGlzdDxQYXRoPiBwYXRocyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIHBhdGhzLnNpemUoKSk7Ci0gICAgICAgIExpc3Q8UHJlZGljYXRlPFBhdGg+PiBwYXRoc1RvQXNzZXJ0ID0gQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBwIC0+IHAuc2l6ZSgpID09IDIgJiYgcC5nZXQoMCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAibWFya28iKSkgJiYgcC5nZXQoMSkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAidmFkYXMiKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAzICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgIm1hcmtvIikpICYmIHAuZ2V0KDEpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImpvc2giKSkgJiYgcC5nZXQoMikuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAicmlwcGxlIikpLAotICAgICAgICAgICAgICAgIHAgLT4gcC5zaXplKCkgPT0gMyAmJiBwLmdldCgwKS5lcXVhbHMoY29udmVydFRvVmVydGV4KHRoaXMuZ3JhcGgsICJtYXJrbyIpKSAmJiBwLmdldCgxKS5lcXVhbHMoY29udmVydFRvVmVydGV4KHRoaXMuZ3JhcGgsICJqb3NoIikpICYmIHAuZ2V0KDIpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImxvcCIpKSwKLSAgICAgICAgICAgICAgICBwIC0+IHAuc2l6ZSgpID09IDEgJiYgcC5nZXQoMCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAidmFkYXMiKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAxICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImpvc2giKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAxICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgInBldGVyIikpCi0gICAgICAgICk7Ci0gICAgICAgIGZvciAoUHJlZGljYXRlPFBhdGg+IHBhdGhQcmVkaWNhdGUgOiBwYXRoc1RvQXNzZXJ0KSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxQYXRoPiBwYXRoID0gcGF0aHMuc3RyZWFtKCkuZmlsdGVyKHBhdGhQcmVkaWNhdGUpLmZpbmRBbnkoKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUocGF0aC5pc1ByZXNlbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHBhdGhzLnJlbW92ZShwYXRoLmdldCgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShwYXRocy5pc0VtcHR5KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vcHRpb25hbFhvdXRfb3B0aW9uYWxYb3V0WFhfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vcHRpb25hbFhvdXRfb3B0aW9uYWxYb3V0WFhfcGF0aCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgTGlzdDxQYXRoPiBwYXRocyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwLCBwYXRocy5zaXplKCkpOwotICAgICAgICBMaXN0PFByZWRpY2F0ZTxQYXRoPj4gcGF0aHNUb0Fzc2VydCA9IEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAyICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgIm1hcmtvIikpICYmIHAuZ2V0KDEpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImxvcCIpKSwKLSAgICAgICAgICAgICAgICBwIC0+IHAuc2l6ZSgpID09IDIgJiYgcC5nZXQoMCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAibWFya28iKSkgJiYgcC5nZXQoMSkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAidmFkYXMiKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAzICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgIm1hcmtvIikpICYmIHAuZ2V0KDEpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImpvc2giKSkgJiYgcC5nZXQoMikuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAibG9wIikpLAotICAgICAgICAgICAgICAgIHAgLT4gcC5zaXplKCkgPT0gMyAmJiBwLmdldCgwKS5lcXVhbHMoY29udmVydFRvVmVydGV4KHRoaXMuZ3JhcGgsICJtYXJrbyIpKSAmJiBwLmdldCgxKS5lcXVhbHMoY29udmVydFRvVmVydGV4KHRoaXMuZ3JhcGgsICJqb3NoIikpICYmIHAuZ2V0KDIpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgInJpcHBsZSIpKSwKLSAgICAgICAgICAgICAgICBwIC0+IHAuc2l6ZSgpID09IDEgJiYgcC5nZXQoMCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAidmFkYXMiKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAxICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImxvcCIpKSwKLSAgICAgICAgICAgICAgICBwIC0+IHAuc2l6ZSgpID09IDIgJiYgcC5nZXQoMCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAiam9zaCIpKSAmJiBwLmdldCgxKS5lcXVhbHMoY29udmVydFRvVmVydGV4KHRoaXMuZ3JhcGgsICJsb3AiKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAyICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImpvc2giKSkgJiYgcC5nZXQoMSkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleCh0aGlzLmdyYXBoLCAicmlwcGxlIikpLAotICAgICAgICAgICAgICAgIHAgLT4gcC5zaXplKCkgPT0gMSAmJiBwLmdldCgwKS5lcXVhbHMoY29udmVydFRvVmVydGV4KHRoaXMuZ3JhcGgsICJyaXBwbGUiKSksCi0gICAgICAgICAgICAgICAgcCAtPiBwLnNpemUoKSA9PSAyICYmIHAuZ2V0KDApLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgInBldGVyIikpICYmIHAuZ2V0KDEpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgodGhpcy5ncmFwaCwgImxvcCIpKQotICAgICAgICApOwotICAgICAgICBmb3IgKFByZWRpY2F0ZTxQYXRoPiBwYXRoUHJlZGljYXRlIDogcGF0aHNUb0Fzc2VydCkgewotICAgICAgICAgICAgT3B0aW9uYWw8UGF0aD4gcGF0aCA9IHBhdGhzLnN0cmVhbSgpLmZpbHRlcihwYXRoUHJlZGljYXRlKS5maW5kQW55KCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHBhdGguaXNQcmVzZW50KCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShwYXRocy5yZW1vdmUocGF0aC5nZXQoKSkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFRydWUocGF0aHMuaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX29wdGlvbmFsWGFkZFZYZG9nWFhfbGFiZWwoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vcHRpb25hbFhhZGRWWGRvZ1hYX2xhYmVsKGNvbnZlcnRUb1ZlcnRleElkKHRoaXMuZ3JhcGgsICJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJkb2ciKSwgdHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDdMLCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgT3B0aW9uYWxUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgyWF9vcHRpb25hbFhvdXRYa25vd3NYWChmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MklkKS5vcHRpb25hbChvdXQoImtub3dzIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMlhfb3B0aW9uYWxYaW5Ya25vd3NYWChmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MklkKS5vcHRpb25hbChpbigia25vd3MiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9vcHRpb25hbFhvdXRYa25vd3NYX29wdGlvbmFsWG91dFhjcmVhdGVkWFhYX3BhdGgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm9wdGlvbmFsKG91dCgia25vd3MiKS5vcHRpb25hbChvdXQoImNyZWF0ZWQiKSkpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9vcHRpb25hbFhvdXRfb3B0aW9uYWxYb3V0WFhfcGF0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vcHRpb25hbChvdXQoKS5vcHRpb25hbChvdXQoKSkpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX29wdGlvbmFsWGFkZFZYZG9nWFhfbGFiZWwoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3B0aW9uYWwoYWRkVigiZG9nIikpLmxhYmVsKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvYnJhbmNoL1JlcGVhdFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvUmVwZWF0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODgyNTI0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9icmFuY2gvUmVwZWF0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2g7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5NYXBIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUmVwZWF0VW5yb2xsU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5DUkVXOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5TSU5LOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ib3RoOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ncm91cENvdW50OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5sb29wczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29sbGVjdGlvbi5Jc0luLm9uZU9mOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvbGxlY3Rpb24uSXNJdGVyYWJsZUNvbnRhaW5pbmdJbk9yZGVyLmNvbnRhaW5zOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0VxdWFsLmVxdWFsVG87Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuQW55T2YuYW55T2Y7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJlcGVhdFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICAvLyBETy9XSElMRQotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfZW1pdF9wYXRoKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX3JlcGVhdFhpblhfdGltZXNYMlhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1gyWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfcmVwZWF0WG91dEVfaW5WWF90aW1lc1gyWF9wYXRoX2J5X25hbWVfYnlfbGFiZWwoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfZW1pdCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWGxvb3BfbmFtZV9sb29wWF9yZXBlYXRYaW5YX3RpbWVzWDVYX3BhdGhfYnlfbmFtZSgpOwotCi0gICAgLy8gV0hJTEUvRE8KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfdGltZXNYMlhfcmVwZWF0WG91dFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9lbWl0X3RpbWVzWDJYX3JlcGVhdFhvdXRYX3BhdGgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2VtaXRfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9lbWl0WGhhc1hsYWJlbF9wZXJzb25YWF9yZXBlYXRYb3V0WF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIC8vIFNJREUtRUZGRUNUUwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX3JlcGVhdFhncm91cENvdW50WG1YX2J5WG5hbWVYX291dFhfdGltZXNYMlhfY2FwWG1YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPEludGVnZXIsIExvbmc+PiBnZXRfZ19WWDFYX3JlcGVhdFhncm91cENvdW50WG1YX2J5WGxvb3BzWF9vdXRYX3RpbWVzWDNYX2NhcFhtWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICAvLwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IGdldF9nX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDEwWF9hc1hhWF9vdXRfYXNYYlhfc2VsZWN0WGFfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfcmVwZWF0WG91dFhfdW50aWxYb3V0RV9jb3VudF9pc1gwWFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfcmVwZWF0WG91dEVfaW5WX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3JpcHBsZVhYX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYKCk7Ci0KLSAgICAvLyBORVNURUQgTE9PUAotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfcmVwZWF0WG91dF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVfZGVzY1hYX3RpbWVzWDFYWF90aW1lc1gxWF9saW1pdFgxWF9wYXRoX2J5WG5hbWVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9yZXBlYXRYb3V0WGtub3dzWFhfdW50aWxYcmVwZWF0WG91dFhjcmVhdGVkWFhfZW1pdFhoYXNYbmFtZV9sb3BYWFhfcGF0aF9ieVhuYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3VudGlsWGNvbnN0YW50WHRydWVYWF9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDNYX3JlcGVhdFhib3RoWF9jcmVhdGVkWFhfdW50aWxYbG9vcHNfaXNfNDBYWGVtaXRfcmVwZWF0WGluX2tub3dzWFhfZW1pdF9sb29wc1hpc1gxWGRlZHVwX3ZhbHVlcyhmaW5hbCBPYmplY3QgdjNJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX3JlcGVhdFhyZXBlYXRYdW5pb25Yb3V0X3VzZXNfb3V0X3RyYXZlcnNlc1hYX3doZXJlWGxvb3BzX2lzWDBYX3RpbWVzWDFYX3RpbWVYMlhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICAvLyBOQU1FRCBMT09QCi0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3JlcGVhdFhhX291dFhrbm93c19yZXBlYXRYYl9vdXRYY3JlYXRlZFhfZmlsdGVyWGxvb3BzX2lzWDBYWF9lbWl0X2xhbmcoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfZW1pdF9yZXBlYXRYYV9vdXRYa25vd3NfZmlsdGVyWGxvb3BzX2lzWDBYWF9sYW5nKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDZYX3JlcGVhdFhhX2JvdGhYY3JlYXRlZFhfc2ltcGxlUGF0aFhfZW1pdFhyZXBlYXRYYl9ib3RoWGtub3dzWFhfdW50aWxYbG9vcHNYYlhfYXNYYl93aGVyZVhsb29wc1hhWF9hc1hiWF9oYXNYbmFtZV92YWRhc1hYX2RlZHVwX25hbWUoZmluYWwgT2JqZWN0IHY2SWQpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX2VtaXRfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgTGlzdDxUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPj4gdHJhdmVyc2FscyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICB0cmF2ZXJzYWxzLmFkZChnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX2VtaXRfcGF0aCgpKTsKLSAgICAgICAgdHJhdmVyc2Fscy5mb3JFYWNoKHRyYXZlcnNhbCAtPiB7Ci0gICAgICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxJbnRlZ2VyLCBMb25nPiBwYXRoTGVuZ3RocyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgICAgIE1hcEhlbHBlci5pbmNyKHBhdGhMZW5ndGhzLCB0cmF2ZXJzYWwubmV4dCgpLnNpemUoKSwgMWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHBhdGhMZW5ndGhzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoOCwgY291bnRlcik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoNiksIHBhdGhMZW5ndGhzLmdldCgyKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMiksIHBhdGhMZW5ndGhzLmdldCgzKSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9yZXBlYXRYaW5YX3RpbWVzWDJYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9yZXBlYXRYaW5YX3RpbWVzWDJYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJtYXJrbyIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJsb3AiKSB8fCB2ZXJ0ZXgudmFsdWUoIm5hbWUiKS5lcXVhbHMoInJpcHBsZSIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYb3V0RV9pblZYX3RpbWVzWDJYX3BhdGhfYnlfbmFtZV9ieV9sYWJlbCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYb3V0RV9pblZYX3RpbWVzWDJYX3BhdGhfYnlfbmFtZV9ieV9sYWJlbCgpOwotCi0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBQYXRoIHAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHAuZ2V0KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygia25vd3MiLCBwLmdldCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBwLmdldCgyKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNyZWF0ZWQiLCBwLmdldCgzKSk7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHAuZ2V0KDQpLCBvbmVPZigicmlwcGxlIiwgImxvcCIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9lbWl0KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfZW1pdCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBNYXBIZWxwZXIuaW5jcihtYXAsIHZlcnRleC52YWx1ZSgibmFtZSIpLCAxbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJqb3NoIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgibG9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMSksIG1hcC5nZXQoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMSksIG1hcC5nZXQoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZygyKSwgbWFwLmdldCgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoNCksIG1hcC5nZXQoImxvcCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdGltZXNYMlhfcmVwZWF0WG91dFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3RpbWVzWDJYX3JlcGVhdFhvdXRYX25hbWUoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImxvcCIsICJyaXBwbGUiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZW1pdF90aW1lc1gyWF9yZXBlYXRYb3V0WF9wYXRoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2VtaXRfdGltZXNYMlhfcmVwZWF0WG91dFhfcGF0aCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0UGF0aCh0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9lbWl0X3JlcGVhdFhvdXRYX3RpbWVzWDJYX3BhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZW1pdF9yZXBlYXRYb3V0WF90aW1lc1gyWF9wYXRoKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRQYXRoKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRQYXRoKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCkgewotICAgICAgICBpbnQgcGF0aDEgPSAwOwotICAgICAgICBpbnQgcGF0aDIgPSAwOwotICAgICAgICBpbnQgcGF0aDMgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXRoLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgcGF0aDErKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGF0aC5zaXplKCkgPT0gMikgewotICAgICAgICAgICAgICAgIHBhdGgyKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGguc2l6ZSgpID09IDMpIHsKLSAgICAgICAgICAgICAgICBwYXRoMysrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmYWlsKCJPbmx5IHBhdGggbGVuZ3RocyBvZiAxLCAyLCBvciAzIHNob3VsZCBiZSBzZWVuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIHBhdGgxKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIHBhdGgyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHBhdGgzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKFNJTkspCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hsb29wX25hbWVfbG9vcFhfcmVwZWF0WGluWF90aW1lc1g1WF9wYXRoX2J5X25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGxvb3BfbmFtZV9sb29wWF9yZXBlYXRYaW5YX3RpbWVzWDVYX3BhdGhfYnlfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0VGhhdChwYXRoLCBjb250YWlucygibG9vcCIsICJsb29wIiwgImxvb3AiLCAibG9vcCIsICJsb29wIiwgImxvb3AiKSk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfZW1pdFhoYXNYbGFiZWxfcGVyc29uWFhfcmVwZWF0WG91dFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX2VtaXRYaGFzWGxhYmVsX3BlcnNvblhYX3JlcGVhdFhvdXRYX25hbWUoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgImpvc2giLCAidmFkYXMiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WGdyb3VwQ291bnRYbVhfYnlYbmFtZVhfb3V0WF90aW1lc1gyWF9jYXBYbVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhncm91cENvdW50WG1YX2J5WG5hbWVYX291dFhfdGltZXNYMlhfY2FwWG1YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgLy9bcmlwcGxlOjIsIHBldGVyOjEsIHZhZGFzOjIsIGpvc2g6MiwgbG9wOjQsIG1hcmtvOjFdCi0gICAgICAgIGFzc2VydEVxdWFscyg2LCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBtYXAuZ2V0KCJtYXJrbyIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJsLCBtYXAuZ2V0KCJ2YWRhcyIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJsLCBtYXAuZ2V0KCJqb3NoIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNGwsIG1hcC5nZXQoImxvcCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJsLCBtYXAuZ2V0KCJyaXBwbGUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxbCwgbWFwLmdldCgicGV0ZXIiKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhib3RoWF90aW1lc1gxMFhfYXNYYVhfb3V0X2FzWGJYX3NlbGVjdFhhX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBWZXJ0ZXg+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1gxMFhfYXNYYVhfb3V0X2FzWGJYX3NlbGVjdFhhX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBWZXJ0ZXg+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoImEiKSBpbnN0YW5jZW9mIFZlcnRleCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoImIiKSBpbnN0YW5jZW9mIFZlcnRleCk7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShjb3VudGVyID4gMCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3JlcGVhdFhvdXRYX3VudGlsWG91dEVfY291bnRfaXNYMFhYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9yZXBlYXRYb3V0WF91bnRpbFhvdXRFX2NvdW50X2lzWDBYWF9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJsb3AiLCAibG9wIiwgInJpcHBsZSIsICJ2YWRhcyIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9yZXBlYXRYZ3JvdXBDb3VudFhtWF9ieVhsb29wc1hfb3V0WF90aW1lc1gzWF9jYXBYbVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxJbnRlZ2VyLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9yZXBlYXRYZ3JvdXBDb3VudFhtWF9ieVhsb29wc1hfb3V0WF90aW1lc1gzWF9jYXBYbVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPEludGVnZXIsIExvbmc+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgbWFwLnNpemUoKSk7Ci0gICAgICAgIC8vIHswPTEsIDE9MywgMj0yfQotICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIG1hcC5nZXQoMCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoM0wsIG1hcC5nZXQoMSkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMkwsIG1hcC5nZXQoMikubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbmFtZV9tYXJrb1hfcmVwZWF0WG91dEVfaW5WX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3JpcHBsZVhYX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9yZXBlYXRYb3V0RV9pblZfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhfcGF0aF9ieVhuYW1lWF9ieVhsYWJlbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFBhdGggcGF0aCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgcGF0aC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgcGF0aC5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgcGF0aC5nZXQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBwYXRoLmdldCgyKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiY3JlYXRlZCIsIHBhdGguZ2V0KDMpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJyaXBwbGUiLCBwYXRoLmdldCg0KSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhvdXRfcmVwZWF0WG91dF9vcmRlcl9ieVhuYW1lX2Rlc2NYWF90aW1lc1gxWFhfdGltZXNYMVhfbGltaXRYMVhfcGF0aF9ieVhuYW1lWCgpIHsKLSAgICAgICAgLy8gVGhpcyB0cmF2ZXJzYWwgZ2V0cyBvcHRpbWlzZWQgYnkgdGhlIFJlcGVhdFVucm9sbFN0cmF0ZWd5Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbF91bnJvbGxlZCA9IGdldF9nX1ZfcmVwZWF0WG91dF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVfZGVzY1hYX3RpbWVzWDFYWF90aW1lc1gxWF9saW1pdFgxWF9wYXRoX2J5WG5hbWVYKCk7Ci0gICAgICAgIGZpbmFsIFBhdGggcGF0aE9yaWdpbmFsID0gdHJhdmVyc2FsX3Vucm9sbGVkLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsX3Vucm9sbGVkLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBwYXRoT3JpZ2luYWwuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHBhdGhPcmlnaW5hbC5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBwYXRoT3JpZ2luYWwuZ2V0KDEpKTsKLQotICAgICAgICAvLyBjb3VsZCBiZSBsb3Agb3IgcmlwcGxlIGRlcGVuZGluZyBvbiB3aGF0IHRoZSBncmFwaCBjaG9vc2VzIHRvIHRyYXZlcnNlIGZpcnN0Ci0gICAgICAgIGFzc2VydFRoYXQocGF0aE9yaWdpbmFsLmdldCgyKSwgYW55T2YoZXF1YWxUbygicmlwcGxlIiksIGVxdWFsVG8oImxvcCIpKSk7Ci0KLSAgICAgICAgZyA9IGcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuY2xhc3MpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WG91dF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVfZGVzY1hYX3RpbWVzWDFYWF90aW1lc1gxWF9saW1pdFgxWF9wYXRoX2J5WG5hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHBhdGguc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHBhdGguZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgcGF0aC5nZXQoMSkpOwotCi0gICAgICAgIC8vIGNvdWxkIGJlIGxvcCBvciByaXBwbGUgZGVwZW5kaW5nIG9uIHdoYXQgdGhlIGdyYXBoIGNob29zZXMgdG8gdHJhdmVyc2UgZmlyc3QKLSAgICAgICAgYXNzZXJ0VGhhdChwYXRoLmdldCgyKSwgYW55T2YoZXF1YWxUbygicmlwcGxlIiksIGVxdWFsVG8oImxvcCIpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhvdXRYa25vd3NYWF91bnRpbFhyZXBlYXRYb3V0WGNyZWF0ZWRYWF9lbWl0WGhhc1huYW1lX2xvcFhYWF9wYXRoX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhvdXRYa25vd3NYWF91bnRpbFhyZXBlYXRYb3V0WGNyZWF0ZWRYWF9lbWl0WGhhc1huYW1lX2xvcFhYWF9wYXRoX2J5WG5hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHBhdGguc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHBhdGguZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgcGF0aC5nZXQoMSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WHJlcGVhdFhvdXRfY3JlYXRlZFhYX3VudGlsWGhhc1huYW1lX3JpcHBsZVhYWGVtaXRfbGFuZygpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgU3RyaW5nIGxhbmcgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMobGFuZywgImphdmEiKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3VudGlsWGNvbnN0YW50WHRydWVYWF9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdW50aWxYY29uc3RhbnRYdHJ1ZVhYX3JlcGVhdFhyZXBlYXRYb3V0X2NyZWF0ZWRYWF91bnRpbFhoYXNYbmFtZV9yaXBwbGVYWFhlbWl0X2xhbmcoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIFN0cmluZyBsYW5nID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGxhbmcsICJqYXZhIik7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGxhbmcgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMobGFuZywgImphdmEiKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDNYX3JlcGVhdFhib3RoWF9jcmVhdGVkWFhfdW50aWxYbG9vcHNfaXNfNDBYWGVtaXRfcmVwZWF0WGluX2tub3dzWFhfZW1pdF9sb29wc1hpc1gxWGRlZHVwX3ZhbHVlcygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDNYX3JlcGVhdFhib3RoWF9jcmVhdGVkWFhfdW50aWxYbG9vcHNfaXNfNDBYWGVtaXRfcmVwZWF0WGluX2tub3dzWFhfZW1pdF9sb29wc1hpc1gxWGRlZHVwX3ZhbHVlcyhjb252ZXJ0VG9WZXJ0ZXhJZCgibG9wIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImpvc2giLCAicmlwcGxlIiwgImxvcCIpLCB0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKENSRVcpCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3JlcGVhdFhyZXBlYXRYdW5pb25Yb3V0X3VzZXNfb3V0X3RyYXZlcnNlc1hYX3doZXJlWGxvb3BzX2lzWDBYX3RpbWVzWDFYX3RpbWVYMlhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3JlcGVhdFhyZXBlYXRYdW5pb25Yb3V0X3VzZXNfb3V0X3RyYXZlcnNlc1hYX3doZXJlWGxvb3BzX2lzWDBYX3RpbWVzWDFYX3RpbWVYMlhfbmFtZShjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBTdHJpbmcgbmFtZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuYW1lLCAidGlua2VyZ3JhcGgiKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYYV9vdXRYa25vd3NfcmVwZWF0WGJfb3V0WGNyZWF0ZWRYX2ZpbHRlclhsb29wc19pc1gwWFhfZW1pdF9sYW5nKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WGFfb3V0WGtub3dzX3JlcGVhdFhiX291dFhjcmVhdGVkWF9maWx0ZXJYbG9vcHNfaXNYMFhYX2VtaXRfbGFuZygpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgU3RyaW5nIGxhbmcgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMobGFuZywgImphdmEiKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgbGFuZyA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhsYW5nLCAiamF2YSIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZW1pdF9yZXBlYXRYYV9vdXRYa25vd3NfZmlsdGVyWGxvb3BzX2lzWDBYWF9sYW5nKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZW1pdF9yZXBlYXRYYV9vdXRYa25vd3NfZmlsdGVyWGxvb3BzX2lzWDBYWF9sYW5nKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBTdHJpbmcgbGFuZyA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhsYW5nLCAiamF2YSIpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBsYW5nID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGxhbmcsICJqYXZhIik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlg2WF9yZXBlYXRYYV9ib3RoWGNyZWF0ZWRYX3NpbXBsZVBhdGhYX2VtaXRYcmVwZWF0WGJfYm90aFhrbm93c1hYX3VudGlsWGxvb3BzWGJYX2FzWGJfd2hlcmVYbG9vcHNYYVhfYXNYYlhfaGFzWG5hbWVfdmFkYXNYWF9kZWR1cF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYNlhfcmVwZWF0WGFfYm90aFhjcmVhdGVkWF9zaW1wbGVQYXRoWF9lbWl0WHJlcGVhdFhiX2JvdGhYa25vd3NYWF91bnRpbFhsb29wc1hiWF9hc1hiX3doZXJlWGxvb3BzWGFYX2FzWGJYX2hhc1huYW1lX3ZhZGFzWFhfZGVkdXBfbmFtZShjb252ZXJ0VG9WZXJ0ZXhJZCgicGV0ZXIiKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBTdHJpbmcgbmFtZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuYW1lLCAiam9zaCIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBSZXBlYXRUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfZW1pdF9wYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChvdXQoKSkudGltZXMoMikuZW1pdCgpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX3JlcGVhdFhpblhfdGltZXNYMlhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQob3V0KCkpLnRpbWVzKDIpLnJlcGVhdChpbigpKS50aW1lcygyKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChvdXQoKSkudGltZXMoMik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfcmVwZWF0WG91dEVfaW5WWF90aW1lc1gyWF9wYXRoX2J5X25hbWVfYnlfbGFiZWwoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucmVwZWF0KG91dEUoKS5pblYoKSkudGltZXMoMikucGF0aCgpLmJ5KCJuYW1lIikuYnkoVC5sYWJlbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9lbWl0KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChvdXQoKSkudGltZXMoMikuZW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfdGltZXNYMlhfcmVwZWF0WG91dFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS50aW1lcygyKS5yZXBlYXQob3V0KCkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2VtaXRfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5lbWl0KCkucmVwZWF0KG91dCgpKS50aW1lcygyKS5wYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfZW1pdF90aW1lc1gyWF9yZXBlYXRYb3V0WF9wYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmVtaXQoKS50aW1lcygyKS5yZXBlYXQob3V0KCkpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2VtaXRYaGFzWGxhYmVsX3BlcnNvblhYX3JlcGVhdFhvdXRYX25hbWUoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuZW1pdChoYXMoVC5sYWJlbCwgInBlcnNvbiIpKS5yZXBlYXQob3V0KCkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9yZXBlYXRYZ3JvdXBDb3VudFhtWF9ieVhuYW1lWF9vdXRYX3RpbWVzWDJYX2NhcFhtWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQoZ3JvdXBDb3VudCgibSIpLmJ5KCJuYW1lIikub3V0KCkpLnRpbWVzKDIpLmNhcCgibSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBWZXJ0ZXg+PiBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1gxMFhfYXNYYVhfb3V0X2FzWGJYX3NlbGVjdFhhX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChib3RoKCkpLnRpbWVzKDEwKS5hcygiYSIpLm91dCgpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX3JlcGVhdFhvdXRYX3VudGlsWG91dEVfY291bnRfaXNYMFhYX25hbWUoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkucmVwZWF0KG91dCgpKS51bnRpbChvdXRFKCkuY291bnQoKS5pcygwKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxJbnRlZ2VyLCBMb25nPj4gZ2V0X2dfVlgxWF9yZXBlYXRYZ3JvdXBDb3VudFhtWF9ieVhsb29wc1hfb3V0WF90aW1lc1gzWF9jYXBYbVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkucmVwZWF0KGdyb3VwQ291bnQoIm0iKS5ieShsb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKCJtIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3JlcGVhdFhvdXRFX2luVl9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9yaXBwbGVYWF9wYXRoX2J5WG5hbWVYX2J5WGxhYmVsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5yZXBlYXQob3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKSkudW50aWwoaGFzKCJuYW1lIiwgInJpcHBsZSIpKS5wYXRoKCkuYnkoIm5hbWUiKS5ieShULmxhYmVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9oYXNYbG9vcF9uYW1lX2xvb3BYX3JlcGVhdFhpblhfdGltZXNYNVhfcGF0aF9ieV9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibG9vcHMiLCJuYW1lIiwibG9vcCIpLnJlcGVhdChfXy5pbigpKS50aW1lcyg1KS5wYXRoKCkuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9yZXBlYXRYb3V0X3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZV9kZXNjWFhfdGltZXNYMVhYX3RpbWVzWDFYX2xpbWl0WDFYX3BhdGhfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICAvLyBOQiBXZSBuZWVkIHRvIHByZXZlbnQgdGhlIFJlcGVhdFVucm9sbFN0cmF0ZWd5IGZyb20gYXBwbHlpbmcgdG8gcHJvcGVybHkgZXhlcmNpc2UgdGhpcyB0ZXN0IGFzIHRoaXMgdHJhdmVyc2FsIGNhbiBiZSBzaW1wbGlmaWVkCi0gICAgICAgICAgICByZXR1cm4gZy5WKCkucmVwZWF0KG91dCgpLnJlcGVhdChvdXQoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuZGVzYykpLnRpbWVzKDEpKS50aW1lcygxKS5saW1pdCgxKS5wYXRoKCkuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9yZXBlYXRYb3V0WGtub3dzWFhfdW50aWxYcmVwZWF0WG91dFhjcmVhdGVkWFhfZW1pdFhoYXNYbmFtZV9sb3BYWFhfcGF0aF9ieVhuYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQob3V0KCJrbm93cyIpKS51bnRpbChfXy5yZXBlYXQob3V0KCJjcmVhdGVkIikpLmVtaXQoX18uaGFzKCJuYW1lIiwgImxvcCIpKSkucGF0aCgpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChfXy5yZXBlYXQob3V0KCJjcmVhdGVkIikpLnVudGlsKF9fLmhhcygibmFtZSIsICJyaXBwbGUiKSkpLmVtaXQoKS52YWx1ZXMoImxhbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3VudGlsWGNvbnN0YW50WHRydWVYWF9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnVudGlsKF9fLmNvbnN0YW50KHRydWUpKS5yZXBlYXQoX18ucmVwZWF0KG91dCgiY3JlYXRlZCIpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicmlwcGxlIikpKS5lbWl0KCkudmFsdWVzKCJsYW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgzWF9yZXBlYXRYYm90aFhfY3JlYXRlZFhYX3VudGlsWGxvb3BzX2lzXzQwWFhlbWl0X3JlcGVhdFhpbl9rbm93c1hYX2VtaXRfbG9vcHNYaXNYMVhkZWR1cF92YWx1ZXMoZmluYWwgT2JqZWN0IHYzSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjNJZCkucmVwZWF0KF9fLmJvdGgoImNyZWF0ZWQiKSkudW50aWwobG9vcHMoKS5pcyg0MCkpLmVtaXQoX18ucmVwZWF0KF9fLmluKCJrbm93cyIpKS5lbWl0KGxvb3BzKCkuaXMoMSkpKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfcmVwZWF0WGFfb3V0WGtub3dzX3JlcGVhdFhiX291dFhjcmVhdGVkWF9maWx0ZXJYbG9vcHNfaXNYMFhYX2VtaXRfbGFuZygpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQoImEiLCBvdXQoImtub3dzIikucmVwZWF0KCJiIiwgb3V0KCJjcmVhdGVkIikuZmlsdGVyKGxvb3BzKCJhIikuaXMoMCkpKS5lbWl0KCkpLmVtaXQoKS52YWx1ZXMoImxhbmciKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2VtaXRfcmVwZWF0WGFfb3V0WGtub3dzX2ZpbHRlclhsb29wc19pc1gwWFhfbGFuZygpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5lbWl0KCkucmVwZWF0KCJhIiwgb3V0KCJrbm93cyIpLmZpbHRlcihsb29wcygiYSIpLmlzKDApKSkudmFsdWVzKCJsYW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlg2WF9yZXBlYXRYYV9ib3RoWGNyZWF0ZWRYX3NpbXBsZVBhdGhYX2VtaXRYcmVwZWF0WGJfYm90aFhrbm93c1hYX3VudGlsWGxvb3BzWGJYX2FzWGJfd2hlcmVYbG9vcHNYYVhfYXNYYlhfaGFzWG5hbWVfdmFkYXNYWF9kZWR1cF9uYW1lKGZpbmFsIE9iamVjdCB2NklkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHY2SWQpLnJlcGVhdCgiYSIsIGJvdGgoImNyZWF0ZWQiKS5zaW1wbGVQYXRoKCkpLmVtaXQoX18ucmVwZWF0KCJiIiwgX18uYm90aCgia25vd3MiKSkudW50aWwobG9vcHMoImIiKS5hcygiYiIpLndoZXJlKGxvb3BzKCJhIikuYXMoImIiKSkpLmhhcygibmFtZSIsICJ2YWRhcyIpKS5kZWR1cCgpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfcmVwZWF0WHJlcGVhdFh1bmlvblhvdXRfdXNlc19vdXRfdHJhdmVyc2VzWFhfd2hlcmVYbG9vcHNfaXNYMFhfdGltZXNYMVhfdGltZVgyWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLnJlcGVhdChfXy5yZXBlYXQoX18udW5pb24ob3V0KCJ1c2VzIiksIG91dCgidHJhdmVyc2VzIikpLndoZXJlKF9fLmxvb3BzKCkuaXMoMCkpKS50aW1lcygxKSkudGltZXMoMikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvYnJhbmNoL1VuaW9uVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2JyYW5jaC9VbmlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ2ZDU3Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvYnJhbmNoL1VuaW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2g7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5jb3VudDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluRTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ubGFiZWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ucmVwZWF0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy51bmlvbjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFVuaW9uVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfdW5pb25Yb3V0X19pblhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF91bmlvblhyZXBlYXRYb3V0WF90aW1lc1gyWF9fb3V0WF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfY2hvb3NlWGxhYmVsX2lzX3BlcnNvbl9fdW5pb25YX19vdXRfbGFuZ19fb3V0X25hbWVYX19pbl9sYWJlbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9jaG9vc2VYbGFiZWxfaXNfcGVyc29uX191bmlvblhfX291dF9sYW5nX19vdXRfbmFtZVhfX2luX2xhYmVsWF9ncm91cENvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfdW5pb25YcmVwZWF0WHVuaW9uWG91dFhjcmVhdGVkWF9faW5YY3JlYXRlZFhYX3RpbWVzWDJYX19yZXBlYXRYdW5pb25YaW5YY3JlYXRlZFhfX291dFhjcmVhdGVkWFhfdGltZXNYMlhYX2xhYmVsX2dyb3VwQ291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZYMV8yWF91bmlvblhvdXRFX2NvdW50X19pbkVfY291bnRfX291dEVfd2VpZ2h0X3N1bVgoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZYMV8yWF9sb2NhbFh1bmlvblhvdXRFX2NvdW50X19pbkVfY291bnRfX291dEVfd2VpZ2h0X3N1bVhYKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WWDFfMlhfbG9jYWxYdW5pb25YY291bnRYWChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3VuaW9uWG91dF9faW5YX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl91bmlvblhvdXRfX2luWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMobmV3IEhhc2hNYXA8U3RyaW5nLCBMb25nPigpIHt7Ci0gICAgICAgICAgICBwdXQoIm1hcmtvIiwgM2wpOwotICAgICAgICAgICAgcHV0KCJsb3AiLCAzbCk7Ci0gICAgICAgICAgICBwdXQoInBldGVyIiwgMWwpOwotICAgICAgICAgICAgcHV0KCJyaXBwbGUiLCAxbCk7Ci0gICAgICAgICAgICBwdXQoImpvc2giLCAzbCk7Ci0gICAgICAgICAgICBwdXQoInZhZGFzIiwgMWwpOwotICAgICAgICB9fSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdW5pb25YcmVwZWF0WG91dFhfdGltZXNYMlhfX291dFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3VuaW9uWHJlcGVhdFhvdXRYX3RpbWVzWDJYX19vdXRYX25hbWUoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG5ldyBIYXNoTWFwPFN0cmluZywgTG9uZz4oKSB7ewotICAgICAgICAgICAgcHV0KCJsb3AiLCAybCk7Ci0gICAgICAgICAgICBwdXQoInJpcHBsZSIsIDFsKTsKLSAgICAgICAgICAgIHB1dCgiam9zaCIsIDFsKTsKLSAgICAgICAgICAgIHB1dCgidmFkYXMiLCAxbCk7Ci0gICAgICAgIH19LCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jaG9vc2VYbGFiZWxfaXNfcGVyc29uX191bmlvblhfX291dF9sYW5nX19vdXRfbmFtZVhfX2luX2xhYmVsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2Nob29zZVhsYWJlbF9pc19wZXJzb25fX3VuaW9uWF9fb3V0X2xhbmdfX291dF9uYW1lWF9faW5fbGFiZWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMobmV3IEhhc2hNYXA8U3RyaW5nLCBMb25nPigpIHt7Ci0gICAgICAgICAgICBwdXQoImxvcCIsIDNsKTsKLSAgICAgICAgICAgIHB1dCgicmlwcGxlIiwgMWwpOwotICAgICAgICAgICAgcHV0KCJqYXZhIiwgNGwpOwotICAgICAgICAgICAgcHV0KCJqb3NoIiwgMWwpOwotICAgICAgICAgICAgcHV0KCJ2YWRhcyIsIDFsKTsKLSAgICAgICAgICAgIHB1dCgicGVyc29uIiwgNGwpOwotICAgICAgICB9fSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfY2hvb3NlWGxhYmVsX2lzX3BlcnNvbl9fdW5pb25YX19vdXRfbGFuZ19fb3V0X25hbWVYX19pbl9sYWJlbFhfZ3JvdXBDb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY2hvb3NlWGxhYmVsX2lzX3BlcnNvbl9fdW5pb25YX19vdXRfbGFuZ19fb3V0X25hbWVYX19pbl9sYWJlbFhfZ3JvdXBDb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gZ3JvdXBDb3VudCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoM2wsIGdyb3VwQ291bnQuZ2V0KCJsb3AiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxbCwgZ3JvdXBDb3VudC5nZXQoInJpcHBsZSIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDRsLCBncm91cENvdW50LmdldCgiamF2YSIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBncm91cENvdW50LmdldCgiam9zaCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBncm91cENvdW50LmdldCgidmFkYXMiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0bCwgZ3JvdXBDb3VudC5nZXQoInBlcnNvbiIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGdyb3VwQ291bnQuc2l6ZSgpKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl91bmlvblhyZXBlYXRYdW5pb25Yb3V0WGNyZWF0ZWRYX19pblhjcmVhdGVkWFhfdGltZXNYMlhfX3JlcGVhdFh1bmlvblhpblhjcmVhdGVkWF9fb3V0WGNyZWF0ZWRYWF90aW1lc1gyWFhfbGFiZWxfZ3JvdXBDb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdW5pb25YcmVwZWF0WHVuaW9uWG91dFhjcmVhdGVkWF9faW5YY3JlYXRlZFhYX3RpbWVzWDJYX19yZXBlYXRYdW5pb25YaW5YY3JlYXRlZFhfX291dFhjcmVhdGVkWFhfdGltZXNYMlhYX2xhYmVsX2dyb3VwQ291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IGdyb3VwQ291bnQgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEybCwgZ3JvdXBDb3VudC5nZXQoInNvZnR3YXJlIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMjBsLCBncm91cENvdW50LmdldCgicGVyc29uIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ3JvdXBDb3VudC5zaXplKCkpOwotCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFfMlhfbG9jYWxYdW5pb25Yb3V0RV9jb3VudF9faW5FX2NvdW50X19vdXRFX3dlaWdodF9zdW1YWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFfMlhfbG9jYWxYdW5pb25Yb3V0RV9jb3VudF9faW5FX2NvdW50X19vdXRFX3dlaWdodF9zdW1YWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoM0wsIDBMLCAxLjksIDBMLCAxTCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFfMlhfbG9jYWxYdW5pb25YY291bnRYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFfMlhfbG9jYWxYdW5pb25YY291bnRYWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMUwsIDFMKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMV8yWF91bmlvblhvdXRFX2NvdW50X19pbkVfY291bnRfX291dEVfd2VpZ2h0X3N1bVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxXzJYX3VuaW9uWG91dEVfY291bnRfX2luRV9jb3VudF9fb3V0RV93ZWlnaHRfc3VtWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoM2wsIDEuOWQsIDFsKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBVbmlvblRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3VuaW9uWG91dF9faW5YX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudW5pb24ob3V0KCksIGluKCkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfdW5pb25YcmVwZWF0WG91dFhfdGltZXNYMlhfX291dFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS51bmlvbihyZXBlYXQob3V0KCkpLnRpbWVzKDIpLCBvdXQoKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9jaG9vc2VYbGFiZWxfaXNfcGVyc29uX191bmlvblhfX291dF9sYW5nX19vdXRfbmFtZVhfX2luX2xhYmVsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5jaG9vc2UobGFiZWwoKS5pcygicGVyc29uIiksIHVuaW9uKG91dCgpLnZhbHVlcygibGFuZyIpLCBvdXQoKS52YWx1ZXMoIm5hbWUiKSksIGluKCkubGFiZWwoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX2Nob29zZVhsYWJlbF9pc19wZXJzb25fX3VuaW9uWF9fb3V0X2xhbmdfX291dF9uYW1lWF9faW5fbGFiZWxYX2dyb3VwQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKFRyYXZlcnNhbCkgZy5WKCkuY2hvb3NlKGxhYmVsKCkuaXMoInBlcnNvbiIpLCB1bmlvbihvdXQoKS52YWx1ZXMoImxhbmciKSwgb3V0KCkudmFsdWVzKCJuYW1lIikpLCBpbigpLmxhYmVsKCkpLmdyb3VwQ291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfdW5pb25YcmVwZWF0WHVuaW9uWG91dFhjcmVhdGVkWF9faW5YY3JlYXRlZFhYX3RpbWVzWDJYX19yZXBlYXRYdW5pb25YaW5YY3JlYXRlZFhfX291dFhjcmVhdGVkWFhfdGltZXNYMlhYX2xhYmVsX2dyb3VwQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKFRyYXZlcnNhbCkgZy5WKCkudW5pb24oCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdCh1bmlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQoImNyZWF0ZWQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbigiY3JlYXRlZCIpKSkudGltZXMoMiksCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdCh1bmlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbigiY3JlYXRlZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCgiY3JlYXRlZCIpKSkudGltZXMoMikpLmxhYmVsKCkuZ3JvdXBDb3VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZYMV8yWF91bmlvblhvdXRFX2NvdW50X19pbkVfY291bnRfX291dEVfd2VpZ2h0X3N1bVgoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQsIHYySWQpLnVuaW9uKG91dEUoKS5jb3VudCgpLCBpbkUoKS5jb3VudCgpLCAoVHJhdmVyc2FsKSBvdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVlgxXzJYX2xvY2FsWHVuaW9uWG91dEVfY291bnRfX2luRV9jb3VudF9fb3V0RV93ZWlnaHRfc3VtWFgoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQsIHYySWQpLmxvY2FsKHVuaW9uKG91dEUoKS5jb3VudCgpLCBpbkUoKS5jb3VudCgpLCAoVHJhdmVyc2FsKSBvdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZYMV8yWF9sb2NhbFh1bmlvblhjb3VudFhYKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkLCB2MklkKS5sb2NhbCh1bmlvbigoVHJhdmVyc2FsKSBjb3VudCgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0FuZFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQW5kVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWY0MjczLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQW5kVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uc2VsZWN0OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBbmRUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9hbmRYaGFzWGFnZV9ndF8yN1hfX291dEVfY291bnRfZ3RlXzJYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYW5kWG91dEVfX2hhc1hsYWJlbF9wZXJzb25YX2FuZF9oYXNYYWdlX2d0ZV8zMlhYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hbmRfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGFYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYYVhfYW5kWHNlbGVjdFhhWF9zZWxlY3RYYVhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9hbmRfaGFzWG5hbWVfbWFya29YX2FuZF9oYXNYbmFtZV9tYXJrb1goKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hbmRYaGFzWGFnZV9ndF8yN1hfX291dEVfY291bnRfZ3RlXzJYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hbmRYaGFzWGFnZV9ndF8yN1hfX291dEVfY291bnRfZ3RlXzJYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FuZFhvdXRFX19oYXNYbGFiZWxfcGVyc29uWF9hbmRfaGFzWGFnZV9ndGVfMzJYWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYW5kWG91dEVfX2hhc1hsYWJlbF9wZXJzb25YX2FuZF9oYXNYYWdlX2d0ZV8zMlhYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiwgInBldGVyIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dFhrbm93c1hfYW5kX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hhWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hbmRfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGFYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9hbmRYc2VsZWN0WGFYX3NlbGVjdFhhWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9hbmRYc2VsZWN0WGFYX3NlbGVjdFhhWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiBhY3R1YWwgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBhY3R1YWwuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbWFya29YX2FuZF9oYXNYbmFtZV9tYXJrb1hfYW5kX2hhc1huYW1lX21hcmtvWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9hbmRfaGFzWG5hbWVfbWFya29YX2FuZF9oYXNYbmFtZV9tYXJrb1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIEFuZFRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FuZFhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndGVfMlhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hbmQoaGFzKCJhZ2UiLCBQLmd0KDI3KSksIG91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDJsKSkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYW5kWG91dEVfX2hhc1hsYWJlbF9wZXJzb25YX2FuZF9oYXNYYWdlX2d0ZV8zMlhYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYW5kKG91dEUoKSwgaGFzKFQubGFiZWwsICJwZXJzb24iKS5hbmQoKS5oYXMoImFnZSIsIFAuZ3RlKDMyKSkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hbmRfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGFYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImtub3dzIikuYW5kKCkub3V0KCJjcmVhdGVkIikuaW4oImNyZWF0ZWQiKS5hcygiYSIpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYYVhfYW5kWHNlbGVjdFhhWF9zZWxlY3RYYVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikuYW5kKHNlbGVjdCgiYSIpLCBzZWxlY3QoImEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfYW5kX2hhc1huYW1lX21hcmtvWF9hbmRfaGFzWG5hbWVfbWFya29YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmFuZCgpLmhhcygibmFtZSIsICJtYXJrbyIpLmFuZCgpLmhhcygibmFtZSIsICJtYXJrbyIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Db2luVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Db2luVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjdjOTcyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQ29pblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29pblRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2NvaW5YMVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfY29pblgwWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2NvaW5YMVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9jb2luWDFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2NvaW5YMFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9jb2luWDBYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBDb2luVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2NvaW5YMVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY29pbigxLjBkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2NvaW5YMFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY29pbigwLjBkKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQ3ljbGljUGF0aFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvQ3ljbGljUGF0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk0NzkzZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0N5Y2xpY1BhdGhUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ3ljbGljUGF0aFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9jeWNsaWNQYXRoKGZpbmFsIE9iamVjdCB2MSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aF9wYXRoKGZpbmFsIE9iamVjdCB2MSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfaW5YY3JlYXRlZFhfYXNYY1hfY3ljbGljUGF0aF9mcm9tWGFYX3RvWGJYX3BhdGgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9jeWNsaWNQYXRoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2N5Y2xpY1BhdGgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdmVydGV4LjxTdHJpbmc+dmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2N5Y2xpY1BhdGhfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aF9wYXRoKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFBhdGggcGF0aCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRGYWxzZShwYXRoLmlzU2ltcGxlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9jeWNsaWNQYXRoX2Zyb21YYVhfdG9YYlhfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfaW5YY3JlYXRlZFhfYXNYY1hfY3ljbGljUGF0aF9mcm9tWGFYX3RvWGJYX3BhdGgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgQ3ljbGljUGF0aFRlc3QgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoImNyZWF0ZWQiKS5pbigiY3JlYXRlZCIpLmN5Y2xpY1BhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aF9wYXRoKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dCgiY3JlYXRlZCIpLmluKCJjcmVhdGVkIikuY3ljbGljUGF0aCgpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfaW5YY3JlYXRlZFhfYXNYY1hfY3ljbGljUGF0aF9mcm9tWGFYX3RvWGJYX3BhdGgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLmluKCJjcmVhdGVkIikuYXMoImMiKS5jeWNsaWNQYXRoKCkuZnJvbSgiYSIpLnRvKCJiIikucGF0aCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9EZWR1cFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRGVkdXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkY2Y2YmMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9EZWR1cFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLklnbm9yZUVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ib3RoOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ib3RoRTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uZGVkdXA7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnNlbGVjdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uLnZhbHVlczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICogQGF1dGhvciBEYW5pZWwgS3VwcGl0eiAoaHR0cDovL2dyZW1saW4uZ3VydSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRGVkdXBUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2RlZHVwX25hbWUoKTsKLSAgICAKLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX29yZGVyX2J5WG5hbWVfZGVzY1hfYmFycmllcl9kZWR1cF9hZ2VfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2hhc1hsYWJlbF9zb2Z0d2FyZVhfZGVkdXBfYnlYbGFuZ1hfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2JvdGhfbmFtZV9kZWR1cCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9ib3RoX2JvdGhfZGVkdXAoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYm90aF9ib3RoX2RlZHVwX2J5WGxhYmVsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8RG91YmxlPj4+IGdldF9nX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9kZWR1cF9mb2xkWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IGdldF9nX1ZfYXNYYVhfYm90aF9hc1hiWF9kZWR1cFhhX2JYX2J5WGxhYmVsWF9zZWxlY3RYYV9iWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX2luWGNyZWF0ZWRYX2FzWGNYX2RlZHVwWGFfYlhfcGF0aCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vdXRFX2FzWGVYX2luVl9hc1h2WF9zZWxlY3RYZVhfb3JkZXJfYnlYd2VpZ2h0X2FzY1hfc2VsZWN0WHZYX3ZhbHVlc1huYW1lWF9kZWR1cCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2JvdGhfZGVkdXBfYnlYb3V0RV9jb3VudFhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vdXRfaW5fdmFsdWVzWG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1Zfb3V0X2FzWHhYX2luX2FzWHlYX3NlbGVjdFh4X3lYX2J5WG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxfeF95WF91bmZvbGQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RlZHVwKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgQ29sbGVjdGlvbjxTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX3JlcGVhdFhib3RoWF90aW1lc1gzWF9lbWl0X25hbWVfYXNYYlhfZ3JvdXBfYnlYc2VsZWN0WGFYWF9ieVhzZWxlY3RYYlhfZGVkdXBfb3JkZXJfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RlZHVwKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9yZXBlYXRYZGVkdXBYX3RpbWVzWDJYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2JvdGhfZ3JvdXBfYnlfYnlYb3V0X2RlZHVwX2ZvbGRYX3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX3ZhbHVlc1huYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9jb3VudCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9ib3RoX3Byb3BlcnRpZXNfcHJvcGVydGllc19kZWR1cF9jb3VudCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9kZWR1cFhsb2NhbFhfdW5mb2xkKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfaW5fdmFsdWVzWG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9pbl92YWx1ZXNYbmFtZVhfZm9sZF9kZWR1cFhsb2NhbFhfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAiam9zaCIsICJwZXRlciIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfYXNYeFhfaW5fYXNYeVhfc2VsZWN0WHhfeVhfYnlYbmFtZVhfZm9sZF9kZWR1cFhsb2NhbF94X3lYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRfYXNYeFhfaW5fYXNYeVhfc2VsZWN0WHhfeVhfYnlYbmFtZVhfZm9sZF9kZWR1cFhsb2NhbF94X3lYX3VuZm9sZCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgIngiLCAibG9wIiwgInkiLCAibWFya28iLAotICAgICAgICAgICAgICAgICJ4IiwgImxvcCIsICJ5IiwgImpvc2giLAotICAgICAgICAgICAgICAgICJ4IiwgImxvcCIsICJ5IiwgInBldGVyIiwKLSAgICAgICAgICAgICAgICAieCIsICJ2YWRhcyIsICJ5IiwgIm1hcmtvIiwKLSAgICAgICAgICAgICAgICAieCIsICJqb3NoIiwgInkiLCAibWFya28iLAotICAgICAgICAgICAgICAgICJ4IiwgInJpcHBsZSIsICJ5IiwgImpvc2giKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9kZWR1cF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aF9kZWR1cF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBuYW1lcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoImxvcCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJwZXRlciIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQElnbm9yZUVuZ2luZShUcmF2ZXJzYWxFbmdpbmUuVHlwZS5DT01QVVRFUikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3JkZXJfYnlYbmFtZV9kZXNjWF9iYXJyaWVyX2RlZHVwX2FnZV9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3JkZXJfYnlYbmFtZV9kZXNjWF9iYXJyaWVyX2RlZHVwX2FnZV9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBuYW1lcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoInBldGVyIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9oYXNYbGFiZWxfc29mdHdhcmVYX2RlZHVwX2J5WGxhbmdYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ib3RoX2hhc1hsYWJlbF9zb2Z0d2FyZVhfZGVkdXBfYnlYbGFuZ1hfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygibG9wIikgfHwgbmFtZXMuY29udGFpbnMoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AtMjUyOQotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBJZ25vcmVFbmdpbmUoVHJhdmVyc2FsRW5naW5lLlR5cGUuQ09NUFVURVIpCi0gICAgcHVibGljIHZvaWQgZ19WX2JvdGhfZ3JvdXBfYnlfYnlYb3V0X2RlZHVwX2ZvbGRYX3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX3ZhbHVlc1huYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfZ3JvdXBfYnlfYnlYb3V0X2RlZHVwX2ZvbGRYX3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX3ZhbHVlc1huYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCBuYW1lcy5nZXQoMCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9uYW1lX29yZGVyX2J5WGFfYlhfZGVkdXBfdmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgbmFtZXMuZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCBuYW1lcy5nZXQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgbmFtZXMuZ2V0KDIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXRlciIsIG5hbWVzLmdldCgzKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicmlwcGxlIiwgbmFtZXMuZ2V0KDQpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ2YWRhcyIsIG5hbWVzLmdldCg1KSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ib3RoX2JvdGhfbmFtZV9kZWR1cCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfYm90aF9uYW1lX2RlZHVwKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAidmFkYXMiLCAiam9zaCIsICJwZXRlciIsICJsb3AiLCAicmlwcGxlIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2JvdGhfYm90aF9kZWR1cCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfYm90aF9kZWR1cCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpLAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSwKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJwZXRlciIpLAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImxvcCIpLAotICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInJpcHBsZSIpKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9ib3RoX2RlZHVwX2J5WGxhYmVsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfYm90aF9kZWR1cF9ieVhsYWJlbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiB2ZXJ0aWNlcyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV93ZWlnaHRfZGVkdXBfZm9sZFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8RG91YmxlPj4+IHRyYXZlcnNhbCA9Ci0gICAgICAgICAgICAgICAgZ2V0X2dfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X2RlZHVwX2ZvbGRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PERvdWJsZT4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBtYXAuZ2V0KCJzb2Z0d2FyZSIpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBtYXAuZ2V0KCJwZXJzb24iKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoInNvZnR3YXJlIikuY29udGFpbnMoMC4yKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmdldCgic29mdHdhcmUiKS5jb250YWlucygwLjQpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJzb2Z0d2FyZSIpLmNvbnRhaW5zKDEuMCkpOwotICAgICAgICAvLwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoInBlcnNvbiIpLmNvbnRhaW5zKDAuMikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoInBlcnNvbiIpLmNvbnRhaW5zKDAuNCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoInBlcnNvbiIpLmNvbnRhaW5zKDAuNSkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoInBlcnNvbiIpLmNvbnRhaW5zKDEuMCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9ib3RoX2FzWGJYX2RlZHVwWGFfYlhfYnlYbGFiZWxYX3NlbGVjdFhhX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBWZXJ0ZXg+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX2JvdGhfYXNYYlhfZGVkdXBYYV9iWF9ieVhsYWJlbFhfc2VsZWN0WGFfYlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBwZXJzb25QZXJzb25Db3VudGVyID0gMDsKLSAgICAgICAgaW50IHBlcnNvblNvZnR3YXJlQ291bnRlciA9IDA7Ci0gICAgICAgIGludCBzb2Z0d2FyZVBlcnNvbkNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgVmVydGV4PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICAgICAgaWYgKG1hcC5nZXQoImEiKS5sYWJlbCgpLmVxdWFscygicGVyc29uIikgJiYgbWFwLmdldCgiYiIpLmxhYmVsKCkuZXF1YWxzKCJwZXJzb24iKSkKLSAgICAgICAgICAgICAgICBwZXJzb25QZXJzb25Db3VudGVyKys7Ci0gICAgICAgICAgICBlbHNlIGlmIChtYXAuZ2V0KCJhIikubGFiZWwoKS5lcXVhbHMoInBlcnNvbiIpICYmIG1hcC5nZXQoImIiKS5sYWJlbCgpLmVxdWFscygic29mdHdhcmUiKSkKLSAgICAgICAgICAgICAgICBwZXJzb25Tb2Z0d2FyZUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1hcC5nZXQoImEiKS5sYWJlbCgpLmVxdWFscygic29mdHdhcmUiKSAmJiBtYXAuZ2V0KCJiIikubGFiZWwoKS5lcXVhbHMoInBlcnNvbiIpKQotICAgICAgICAgICAgICAgIHNvZnR3YXJlUGVyc29uQ291bnRlcisrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhaWwoIkJhZCByZXN1bHQgdHlwZTogIiArIG1hcCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHBlcnNvblBlcnNvbkNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcGVyc29uU29mdHdhcmVDb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNvZnR3YXJlUGVyc29uQ291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9kZWR1cFhhX2JYX3BhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX2luWGNyZWF0ZWRYX2FzWGNYX2RlZHVwWGFfYlhfcGF0aCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8TGlzdDxWZXJ0ZXg+PiByZXN1bHRzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBwYXRoLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHJlc3VsdHMuYWRkKEFycmF5cy5hc0xpc3QocGF0aC5nZXQoImEiKSwgcGF0aC5nZXQoImIiKSkpKTsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCByZXN1bHRzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfYXNYZVhfaW5WX2FzWHZYX3NlbGVjdFhlWF9vcmRlcl9ieVh3ZWlnaHRfYXNjWF9zZWxlY3RYdlhfdmFsdWVzWG5hbWVYX2RlZHVwKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0RV9hc1hlWF9pblZfYXNYdlhfc2VsZWN0WGVYX29yZGVyX2J5WHdlaWdodF9hc2NYX3NlbGVjdFh2WF92YWx1ZXNYbmFtZVhfZGVkdXAoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lcyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG5hbWVzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJsb3AiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2JvdGhfYm90aF9kZWR1cF9ieVhvdXRFX2NvdW50WF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aF9ib3RoX2RlZHVwX2J5WG91dEVfY291bnRYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lcyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG5hbWVzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoInBldGVyIikpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJtYXJrbyIpKTsKLSAgICAgICAgLy8gdGhlIDR0aCBpcyB2YWRhcywgcmlwcGxlLCBvciBsb3AKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG5ldyBIYXNoU2V0PD4obmFtZXMpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RlZHVwKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RlZHVwKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgxTCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX3JlcGVhdFhib3RoWF90aW1lc1gzWF9lbWl0X25hbWVfYXNYYlhfZ3JvdXBfYnlYc2VsZWN0WGFYWF9ieVhzZWxlY3RYYlhfZGVkdXBfb3JkZXJfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2RlZHVwKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBDb2xsZWN0aW9uPFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX2VtaXRfbmFtZV9hc1hiWF9ncm91cF9ieVhzZWxlY3RYYVhYX2J5WHNlbGVjdFhiWF9kZWR1cF9vcmRlcl9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXAoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiB2ZXJ0aWNlcyA9IG5ldyBBcnJheUxpc3Q8Pih0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCB2ZXJ0aWNlcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCB2ZXJ0aWNlcy5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIHZlcnRpY2VzLmdldCgxKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB2ZXJ0aWNlcy5nZXQoMikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBldGVyIiwgdmVydGljZXMuZ2V0KDMpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJyaXBwbGUiLCB2ZXJ0aWNlcy5nZXQoNCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInZhZGFzIiwgdmVydGljZXMuZ2V0KDUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WGRlZHVwWF90aW1lc1gyWF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYZGVkdXBYX3RpbWVzWDJYX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMEwsIHRyYXZlcnNhbC5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNEwsIHRyYXZlcnNhbC5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50KCkgewotICAgICAgICAvLyB2ZXJ0ZXggcHJvcGVydGllcyBiZWhhdmUgbGlrZSBFbGVtZW50IHdpdGggdGhlaXIgZGVkdXAoKSBzbyAxMiBpcyB0aGUgcmlnaHQgbnVtYmVyIHRoZXJlCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTJMLCB0cmF2ZXJzYWwubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChDUkVXKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ib3RoX3Byb3BlcnRpZXNfcHJvcGVydGllc19kZWR1cF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ib3RoX3Byb3BlcnRpZXNfcHJvcGVydGllc19kZWR1cF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIxTCwgdHJhdmVyc2FsLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF92YWx1ZXNYYWdlWF9kZWR1cFhsb2NhbFhfdW5mb2xkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfZGVkdXBYbG9jYWxYX3VuZm9sZChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgRGVkdXBUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3V0X2luX3ZhbHVlc1huYW1lWF9mb2xkX2RlZHVwWGxvY2FsWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkuaW4oKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX291dF9hc1h4WF9pbl9hc1h5WF9zZWxlY3RYeF95WF9ieVhuYW1lWF9mb2xkX2RlZHVwWGxvY2FsX3hfeVhfdW5mb2xkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLmFzKCJ4IikuaW4oKS5hcygieSIpLnNlbGVjdCgieCIsICJ5IikuYnkoIm5hbWUiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwsICJ4IiwgInkiKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2JvdGhfZGVkdXBfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX29yZGVyX2J5WG5hbWVfZGVzY1hfYmFycmllcl9kZWR1cF9hZ2VfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIiwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYm90aF9oYXNYbGFiZWxfc29mdHdhcmVYX2RlZHVwX2J5WGxhbmdYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYm90aCgpLmhhcyhULmxhYmVsLCAic29mdHdhcmUiKS5kZWR1cCgpLmJ5KCJsYW5nIikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuPFN0cmluZz5wcm9wZXJ0aWVzKCJuYW1lIikub3JkZXIoKS5ieSgoYSwgYikgLT4gYS52YWx1ZSgpLmNvbXBhcmVUbyhiLnZhbHVlKCkpKS5kZWR1cCgpLnZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2JvdGhfbmFtZV9kZWR1cCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuYm90aCgpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikuZGVkdXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2JvdGhfYm90aF9kZWR1cCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9ib3RoX2JvdGhfZGVkdXBfYnlYbGFiZWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShULmxhYmVsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTGlzdDxEb3VibGU+Pj4gZ2V0X2dfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X2RlZHVwX2ZvbGRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxTdHJpbmcsIExpc3Q8RG91YmxlPj5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KGJvdGhFKCkudmFsdWVzKCJ3ZWlnaHQiKS5kZWR1cCgpLmZvbGQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IGdldF9nX1ZfYXNYYVhfYm90aF9hc1hiWF9kZWR1cFhhX2JYX2J5WGxhYmVsWF9zZWxlY3RYYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLmJvdGgoKS5hcygiYiIpLmRlZHVwKCJhIiwgImIiKS5ieShULmxhYmVsKS5zZWxlY3QoImEiLCAiYiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9kZWR1cFhhX2JYX3BhdGgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLmluKCJjcmVhdGVkIikuYXMoImMiKS5kZWR1cCgiYSIsICJiIikucGF0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3V0RV9hc1hlWF9pblZfYXNYdlhfc2VsZWN0WGVYX29yZGVyX2J5WHdlaWdodF9hc2NYX3NlbGVjdFh2WF92YWx1ZXNYbmFtZVhfZGVkdXAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLmFzKCJlIikuaW5WKCkuYXMoInYiKS5zZWxlY3QoImUiKS5vcmRlcigpLmJ5KCJ3ZWlnaHQiLCBPcmRlci5hc2MpLnNlbGVjdCgidiIpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikuZGVkdXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2JvdGhfYm90aF9kZWR1cF9ieVhvdXRFX2NvdW50WF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuZ3JvdXBDb3VudCgpLnNlbGVjdCh2YWx1ZXMpLjxMb25nPnVuZm9sZCgpLmRlZHVwKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIENvbGxlY3Rpb248U3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9yZXBlYXRYYm90aFhfdGltZXNYM1hfZW1pdF9uYW1lX2FzWGJYX2dyb3VwX2J5WHNlbGVjdFhhWFhfYnlYc2VsZWN0WGJYX2RlZHVwX29yZGVyX2ZvbGRYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9kZWR1cCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLnJlcGVhdChib3RoKCkpLnRpbWVzKDMpLmVtaXQoKS52YWx1ZXMoIm5hbWUiKS5hcygiYiIpLmdyb3VwKCkuYnkoc2VsZWN0KCJhIikpLmJ5KHNlbGVjdCgiYiIpLmRlZHVwKCkub3JkZXIoKS5mb2xkKCkpLnNlbGVjdCh2YWx1ZXMpLjxDb2xsZWN0aW9uPFN0cmluZz4+dW5mb2xkKCkuZGVkdXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9yZXBlYXRYZGVkdXBYX3RpbWVzWDJYX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChkZWR1cCgpKS50aW1lcygyKS5jb3VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYm90aF9ncm91cF9ieV9ieVhvdXRfZGVkdXBfZm9sZFhfdW5mb2xkX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vdXRfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhfdmFsdWVzWG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGgoKS4KLSAgICAgICAgICAgICAgICAgICAgZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmRlZHVwKCkuZm9sZCgpKS4KLSAgICAgICAgICAgICAgICAgICAgdW5mb2xkKCkuCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdChDb2x1bW4udmFsdWVzKS4KLSAgICAgICAgICAgICAgICAgICAgdW5mb2xkKCkuCi0gICAgICAgICAgICAgICAgICAgIG91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKS5saW1pdCgxKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9ib3RoX3Byb3BlcnRpZXNfZGVkdXBfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfYm90aF9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNfZGVkdXBfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfZGVkdXBYbG9jYWxYX3VuZm9sZChmaW5hbCBPYmplY3QgdmlkMSkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLmRlZHVwKFNjb3BlLmxvY2FsKS51bmZvbGQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRHJvcFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvRHJvcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjMmQwNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0Ryb3BUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uQWJzdHJhY3RHcmVtbGluVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRHJvcFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5UZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfZHJvcCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1Zfb3V0RV9kcm9wKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4UHJvcGVydHk+IGdldF9nX1ZfcHJvcGVydGllc19kcm9wKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX1ZfcHJvcGVydGllc19wcm9wZXJ0aWVzWHN0YXJ0VGltZVhfZHJvcCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gZ2V0X2dfRV9wcm9wZXJ0aWVzWHdlaWdodFhfZHJvcCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfUkVNT1ZFX1ZFUlRJQ0VTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9kcm9wKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZHJvcCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KGcuRSgpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9SRU1PVkVfRURHRVMpCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfZHJvcCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRFX2Ryb3AoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX1JFTU9WRV9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcHJvcGVydGllc19kcm9wKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXhQcm9wZXJ0eT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX2Ryb3AoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgICAgICBnLlYoKS5mb3JFYWNoUmVtYWluaW5nKHZlcnRleCAtPiBhc3NlcnRFcXVhbHMoMCwgSXRlcmF0b3JVdGlscy5jb3VudCh2ZXJ0ZXgucHJvcGVydGllcygpKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfUkVNT1ZFX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfRV9wcm9wZXJ0aWVzWHdlaWdodFhfZHJvcCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19FX3Byb3BlcnRpZXNYd2VpZ2h0WF9kcm9wKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgZy5FKCkuZm9yRWFjaFJlbWFpbmluZyhlZGdlIC0+IGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KGVkZ2UucHJvcGVydGllcygpKSkpOwotICAgIH0KLQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChDUkVXKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfUkVNT1ZFX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNYc3RhcnRUaW1lWF9kcm9wKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNYc3RhcnRUaW1lWF9kcm9wKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgZy5WKCkuZm9yRWFjaFJlbWFpbmluZyh2ZXJ0ZXggLT4gYXNzZXJ0RXF1YWxzKDAsIEl0ZXJhdG9yVXRpbHMuY291bnQoSXRlcmF0b3JVdGlscy5mbGF0TWFwKHZlcnRleC5wcm9wZXJ0aWVzKCJsb2NhdGlvbiIpLCB2cCAtPiB2cC5wcm9wZXJ0aWVzKCJzdGFydFRpbWUiKSkpKSk7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBEcm9wVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfZHJvcCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5kcm9wKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1Zfb3V0RV9kcm9wKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dEUoKS5kcm9wKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleFByb3BlcnR5PiBnZXRfZ19WX3Byb3BlcnRpZXNfZHJvcCgpIHsKLSAgICAgICAgICAgIHJldHVybiAoVHJhdmVyc2FsKSBnLlYoKS5wcm9wZXJ0aWVzKCkuZHJvcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX0VfcHJvcGVydGllc1h3ZWlnaHRYX2Ryb3AoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkucHJvcGVydGllcygid2VpZ2h0IikuZHJvcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gZ2V0X2dfVl9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNYc3RhcnRUaW1lWF9kcm9wKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCJzdGFydFRpbWUiKS5kcm9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9GaWx0ZXJUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0ZpbHRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlZDE2OS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0ZpbHRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmNvbnN0YW50OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIEZpbHRlclRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2ZpbHRlclhpc1gwWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfZmlsdGVyWGNvbnN0YW50WDBYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19FX2ZpbHRlclhpc1gwWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9maWx0ZXJYY29uc3RhbnRYMFhYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZmlsdGVyWGlzWDBYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2ZpbHRlclhpc1gwWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZmlsdGVyWGNvbnN0YW50WDBYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2ZpbHRlclhjb25zdGFudFgwWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PFZlcnRleD4gdmVydGljZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICB2ZXJ0aWNlcy5hZGQodHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgdmVydGljZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19FX2ZpbHRlclhpc1gwWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FX2ZpbHRlclhpc1gwWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VfZmlsdGVyWGNvbnN0YW50WDBYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX0VfZmlsdGVyWGNvbnN0YW50WDBYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8RWRnZT4gZWRnZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBlZGdlcy5hZGQodHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgZWRnZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgRmlsdGVyVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfZmlsdGVyWGlzWDBYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5maWx0ZXIoaXMoMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfZmlsdGVyWGNvbnN0YW50WDBYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5maWx0ZXIoY29uc3RhbnQoMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9maWx0ZXJYaXNYMFhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuRSgpLmZpbHRlcihpcygwKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19FX2ZpbHRlclhjb25zdGFudFgwWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkuZmlsdGVyKGNvbnN0YW50KDApKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvSGFzVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9IYXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmY2E4OGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9IYXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmhhbWNyZXN0LkNvcmVNYXRjaGVyczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuQ29yZU1hdGNoZXJzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSGFzVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfaGFzWGtleVgoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIFN0cmluZyBrZXkpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9oYXNYbmFtZV9tYXJrb1goZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWG5hbWVfYmxhaFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWGJsYWhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1hudWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbnVsbF90ZXN0bnVsbGtleVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9oYXNYbnVsbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzTGFiZWxYbnVsbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzTGFiZWxYbnVsbF9wZXJzb25YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX2hhc1hhZ2VfZ3RfMzBYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYdjFYX2hhc1hhZ2VfZ3RfMzBYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X2hhc1hpZF9sdF8zWChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYzSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRfaGFzSWRYMlgoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X2hhc0lkWDJfM1goZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkLCBmaW5hbCBPYmplY3QgdjNJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dF9oYXNJZFgyXzNYX2luTGlzdChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQsIGZpbmFsIE9iamVjdCB2M0lkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzSWRYMl8zWChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNJZFgyXzNYX2luTGlzdChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYYWdlX2d0XzMwWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl93aGVyZVhhZ2VfaXNYZ3RfMzBYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl93aGVyZVhsYWJlbF9pc1hzb2Z0d2FyZVhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYN1hfaGFzTGFiZWxYa25vd3NYKGZpbmFsIE9iamVjdCBlN0lkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9oYXNMYWJlbFhrbm93c1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9oYXNMYWJlbFhudWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiBnZXRfZ19WX3Byb3BlcnRpZXNfaGFzTGFiZWxYbnVsbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRVgxMVhfb3V0Vl9vdXRFX2hhc1hpZF8xMFgoZmluYWwgT2JqZWN0IGUxMUlkLCBmaW5hbCBPYmplY3QgZThJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VfaGFzTGFiZWxYdXNlc190cmF2ZXJzZXNYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvbl9zb2Z0d2FyZV9ibGFoWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9hZ2UoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0RV9oYXNYd2VpZ2h0X2luc2lkZV8wXzA2WF9pblYoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbG9jYXRpb25YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2luX2hhc0lkWG5lcVgxWFgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2hhc1hhZ2Vfbm90WGx0ZVgxMFhfYW5kWG5vdFhiZXR3ZWVuWDExXzIwWFhYWF9hbmRYbHRYMjlYX29yWGVxWDM1WFhYWF9uYW1lKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9ib3RoX3Byb3BlcnRpZXNfZGVkdXBfaGFzS2V5WGFnZVhfdmFsdWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2JvdGhfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYYWdlWF9oYXNWYWx1ZVhndFgzMFhYX3ZhbHVlKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2JvdGhFX3Byb3BlcnRpZXNfZGVkdXBfaGFzS2V5WHdlaWdodFhfdmFsdWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYd2VpZ2h0WF9oYXNWYWx1ZVhsdFgwZDNYWF92YWx1ZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNOb3RYYWdlWF9uYW1lKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc0lkWDFYX2hhc0lkWDJYKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfaGFzTGFiZWxYc29mdHdhcmVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNJZFhlbXB0eVhfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2hhc0lkWHdpdGhpblhlbXB0eVhYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNJZFh3aXRob3V0WGVtcHR5WFhfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX25vdFhoYXNJZFh3aXRoaW5YZW1wdHlYWFhfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2hhc1hhZ2Vfd2l0aGluWDI3WF9jb3VudCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfaGFzWGFnZV93aXRoaW5YMjdfMjlYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNYYWdlX3dpdGhvdXRYMjdYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNYYWdlX3dpdGhvdXRYMjdfMjlYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX2NvbnRhaW5pbmdYYXJrWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWG5hbWVfc3RhcnRpbmdXaXRoWG1hclhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX2VuZGluZ1dpdGhYYXNYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9ub3RfY29udGFpbmluZ1hhcmtYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9ub3Rfc3RhcnRpbmdXaXRoWG1hclhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX25vdF9lbmRpbmdXaXRoWGFzWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWG5hbWVfcmVnZXhYck1hclhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX25vdFJlZ2V4WHJNYXJYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJVbmljb2RlWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX2NvbnRhaW5pbmdYb1hfYW5kWGx0WG1YWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWG5hbWVfZ3RYbVhfYW5kWGNvbnRhaW5pbmdYb1hYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYcF9uZXFYdlhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2hhc1hrX3dpdGhpblhjWFhfdmFsdWVzWGtYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX1ZfcHJvcGVydGllc19oYXNLZXlYbnVsbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX2FnZVhfdmFsdWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbF9udWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCBEb3VibGU+IGdldF9nX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbF93ZWlnaHRYX3ZhbHVlKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX1ZfcHJvcGVydGllc19oYXNWYWx1ZVhudWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiBnZXRfZ19WX3Byb3BlcnRpZXNfaGFzVmFsdWVYbnVsbF9udWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxfam9zaFhfdmFsdWUoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9oYXNYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9oYXNYa2V5WChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgIm5hbWUiKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB0cmF2ZXJzYWwubmV4dCgpLjxTdHJpbmc+dmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9oYXNYY2lyY3VtZmVyZW5jZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9oYXNYa2V5WChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgImNpcmN1bWZlcmVuY2UiKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9oYXNYbmFtZV9tYXJrb1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9oYXNYbmFtZV9tYXJrb1goY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHRyYXZlcnNhbC5uZXh0KCkuPFN0cmluZz52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDJYX2hhc1huYW1lX21hcmtvWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX2hhc1huYW1lX21hcmtvWChjb252ZXJ0VG9WZXJ0ZXhJZCgidmFkYXMiKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbWFya29YKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdHJhdmVyc2FsLm5leHQoKS48U3RyaW5nPnZhbHVlKCJuYW1lIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfYmxhaFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9ibGFoWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hhZ2VfZ3RfMzBYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGFnZV9ndF8zMFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiBsaXN0ID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbGlzdC5zaXplKCkpOwotICAgICAgICBmb3IgKGZpbmFsIEVsZW1lbnQgdiA6IGxpc3QpIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUodi48SW50ZWdlcj52YWx1ZSgiYWdlIikgPiAzMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZV9pc1hndF8zMFhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfd2hlcmVYYWdlX2lzWGd0XzMwWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiBsaXN0ID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbGlzdC5zaXplKCkpOwotICAgICAgICBmb3IgKGZpbmFsIEVsZW1lbnQgdiA6IGxpc3QpIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUodi48SW50ZWdlcj52YWx1ZSgiYWdlIikgPiAzMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGxhYmVsX2lzWHNvZnR3YXJlWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl93aGVyZVhsYWJlbF9pc1hzb2Z0d2FyZVhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFZlcnRleD4gbGlzdCA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGxpc3Quc2l6ZSgpKTsKLSAgICAgICAgZm9yIChmaW5hbCBFbGVtZW50IHYgOiBsaXN0KSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNvZnR3YXJlIiwgdi5sYWJlbCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9oYXNYYWdlX2d0XzMwWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWxNYXJrbyA9IGdldF9nX1ZYMVhfaGFzWGFnZV9ndF8zMFgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsTWFya28pOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWxNYXJrby5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlg0WF9oYXNYYWdlX2d0XzMwWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWxKb3NoID0gZ2V0X2dfVlgxWF9oYXNYYWdlX2d0XzMwWChjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbEpvc2gpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbEpvc2guaGFzTmV4dCgpKTsKLSAgICAgICAgdHJhdmVyc2FsSm9zaC5pdGVyYXRlKCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWHYxWF9oYXNYYWdlX2d0XzMwWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWxNYXJrbyA9IGdldF9nX1ZYdjFYX2hhc1hhZ2VfZ3RfMzBYKGNvbnZlcnRUb1ZlcnRleChncmFwaCwibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWxNYXJrbyk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbE1hcmtvLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWHY0WF9oYXNYYWdlX2d0XzMwWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWxKb3NoID0gZ2V0X2dfVlh2MVhfaGFzWGFnZV9ndF8zMFgoY29udmVydFRvVmVydGV4KGdyYXBoLCJqb3NoIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsSm9zaCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsSm9zaC5oYXNOZXh0KCkpOwotICAgICAgICB0cmF2ZXJzYWxKb3NoLml0ZXJhdGUoKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0X2hhc1hpZF8yWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dF9oYXNJZFgyWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRWYWRhc0FzT25seVZhbHVlUmV0dXJuZWQodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9OVU1FUklDX0lEUykKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0X2hhc1hpZF9sdF8zWCgpIHsKLSAgICAgICAgLy8gY2FuIG9ubHkgZXhlY3V0ZSB0aGlzIG9uIGdyYXBocyB3aXRoIHVzZXIgc3VwcGxpZWQgaWRzIHNvIHRoYXQgd2UgY2FuIGJlIGFzc3VyZWQgb2YgdGhlIGx0IG9wLiBpdAotICAgICAgICAvLyBzb3J0IG9mIGFzc3VtZXMgdGhhdCBpZHMgaW5jcmVtZW50LCBidXQgdGhlcmUncyBubyBmZWF0dXJlIGNoZWNrIGZvciB0aGF0LiAgZ3JhcGhzIHRoYXQgZG9uJ3Qgd29yayB0aGlzCi0gICAgICAgIC8vIHdheSB3aXRoIG51bWVyaWMgaWRzIG1heSBuZWVkIHRvIG9wdG91dAotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0X2hhc1hpZF9sdF8zWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoImxvcCIpKTsKLSAgICAgICAgYXNzZXJ0VmFkYXNBc09ubHlWYWx1ZVJldHVybmVkKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFBc1N0cmluZ1hfb3V0X2hhc1hpZF8yQXNTdHJpbmdYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0X2hhc0lkWDJYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLnRvU3RyaW5nKCksIGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpLnRvU3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRWYWRhc0FzT25seVZhbHVlUmV0dXJuZWQodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0VmFkYXNBc09ubHlWYWx1ZVJldHVybmVkKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpLCB0cmF2ZXJzYWwubmV4dCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dF9oYXNYaWRfMl8zWCgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGlkMiA9IGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpOwotICAgICAgICBmaW5hbCBPYmplY3QgaWQzID0gY29udmVydFRvVmVydGV4SWQoImxvcCIpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0X2hhc0lkWDJfM1goY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGlkMiwgaWQzKTsKLSAgICAgICAgYXNzZXJ0X2dfaGFzXzJpZChpZDIsIGlkMywgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0X2hhc1hpZF8yQXNTdHJpbmdfM0FzU3RyaW5nWCgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGlkMiA9IGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpOwotICAgICAgICBmaW5hbCBPYmplY3QgaWQzID0gY29udmVydFRvVmVydGV4SWQoImxvcCIpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0X2hhc0lkWDJfM1goY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGlkMi50b1N0cmluZygpLCBpZDMudG9TdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydF9nX2hhc18yaWQoaWQyLCBpZDMsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dF9oYXNYaWRfMl8zWF9pbkxpc3QoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBpZDIgPSBjb252ZXJ0VG9WZXJ0ZXhJZCgidmFkYXMiKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IGlkMyA9IGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dF9oYXNJZFgyXzNYX2luTGlzdChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgaWQyLCBpZDMpOwotICAgICAgICBhc3NlcnRfZ19oYXNfMmlkKGlkMiwgaWQzLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYaWRfMV8yWCgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGlkMSA9IGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpOwotICAgICAgICBmaW5hbCBPYmplY3QgaWQyID0gY29udmVydFRvVmVydGV4SWQoInZhZGFzIik7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNJZFgyXzNYKGlkMSwgaWQyKTsKLSAgICAgICAgYXNzZXJ0X2dfaGFzXzJpZChpZDEsIGlkMiwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGlkXzFfMlhfaW5MaXN0KCkgewotICAgICAgICBmaW5hbCBPYmplY3QgaWQxID0gY29udmVydFRvVmVydGV4SWQoIm1hcmtvIik7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBpZDIgPSBjb252ZXJ0VG9WZXJ0ZXhJZCgidmFkYXMiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0lkWDJfM1hfaW5MaXN0KGlkMSwgaWQyKTsKLSAgICAgICAgYXNzZXJ0X2dfaGFzXzJpZChpZDEsIGlkMiwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICAvLyBhc3NlcnRzIHRoYXQgdGhlIHRyYXZlcnNhbCByZXR1cm5zIHR3byBpZHMKLSAgICBwcm90ZWN0ZWQgdm9pZCBhc3NlcnRfZ19oYXNfMmlkKE9iamVjdCBpZDEsIE9iamVjdCBpZDIsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5uZXh0KCkuaWQoKSwgQ29yZU1hdGNoZXJzLmFueU9mKGlzKGlkMSksIGlzKGlkMikpKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwubmV4dCgpLmlkKCksIENvcmVNYXRjaGVycy5hbnlPZihpcyhpZDEpLCBpcyhpZDIpKSk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGJsYWhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGJsYWhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hudWxsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hudWxsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbnVsbF90ZXN0bnVsbGtleVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbnVsbF90ZXN0bnVsbGtleVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VfaGFzWG51bGxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfRV9oYXNYbnVsbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhudWxsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhudWxsX3BlcnNvblgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhudWxsX3BlcnNvblgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiB2ZXJ0aWNlcyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQodmVydGljZXMuc3RyZWFtKCkuYWxsTWF0Y2godiAtPiB2LmxhYmVsKCkuZXF1YWxzKCJwZXJzb24iKSksIGlzKHRydWUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VYN1hfaGFzTGFiZWxYa25vd3NYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfRVg3WF9oYXNMYWJlbFhrbm93c1goY29udmVydFRvRWRnZUlkKCJtYXJrbyIsICJrbm93cyIsICJ2YWRhcyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygia25vd3MiLCB0cmF2ZXJzYWwubmV4dCgpLmxhYmVsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VfaGFzTGFiZWxYa25vd3NYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfRV9oYXNMYWJlbFhrbm93c1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygia25vd3MiLCB0cmF2ZXJzYWwubmV4dCgpLmxhYmVsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VfaGFzTGFiZWxYbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FX2hhc0xhYmVsWG51bGxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Byb3BlcnRpZXNfaGFzTGFiZWxYbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsID8gZXh0ZW5kcyBQcm9wZXJ0eT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0xhYmVsWG51bGxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChDUkVXKQotICAgIHB1YmxpYyB2b2lkIGdfRV9oYXNMYWJlbFh1c2VzX3RyYXZlcnNlc1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FX2hhc0xhYmVsWHVzZXNfdHJhdmVyc2VzWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxhYmVsID0gdHJhdmVyc2FsLm5leHQoKS5sYWJlbCgpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShsYWJlbC5lcXVhbHMoInVzZXMiKSB8fCBsYWJlbC5lcXVhbHMoInRyYXZlcnNlcyIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoOSwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChDUkVXKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25fc29mdHdhcmVfYmxhaFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25fc29mdHdhcmVfYmxhaFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbCA9IHRyYXZlcnNhbC5uZXh0KCkubGFiZWwoKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobGFiZWwuZXF1YWxzKCJzb2Z0d2FyZSIpIHx8IGxhYmVsLmVxdWFscygicGVyc29uIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9hZ2UoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9hZ2UoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyOSwgdHJhdmVyc2FsLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dEVfaGFzWHdlaWdodF9pbnNpZGVfMF8wNlhfaW5WKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RV9oYXNYd2VpZ2h0X2luc2lkZV8wXzA2WF9pblYoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXgudmFsdWUoIm5hbWUiKS5lcXVhbHMoInZhZGFzIikgfHwgdmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJsb3AiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19FWDExWF9vdXRWX291dEVfaGFzWGlkXzEwWCgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGVkZ2VJZDExID0gY29udmVydFRvRWRnZUlkKCJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIik7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBlZGdlSWQxMCA9IGNvbnZlcnRUb0VkZ2VJZCgiam9zaCIsICJjcmVhdGVkIiwgInJpcHBsZSIpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfRVgxMVhfb3V0Vl9vdXRFX2hhc1hpZF8xMFgoZWRnZUlkMTEsIGVkZ2VJZDEwKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydF9nX0VYMTFYKGVkZ2VJZDEwLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRVgxMVhfb3V0Vl9vdXRFX2hhc1hpZF8xMEFzU3RyaW5nWCgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGVkZ2VJZDExID0gY29udmVydFRvRWRnZUlkKCJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIik7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBlZGdlSWQxMCA9IGNvbnZlcnRUb0VkZ2VJZCgiam9zaCIsICJjcmVhdGVkIiwgInJpcHBsZSIpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfRVgxMVhfb3V0Vl9vdXRFX2hhc1hpZF8xMFgoZWRnZUlkMTEudG9TdHJpbmcoKSwgZWRnZUlkMTAudG9TdHJpbmcoKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRfZ19FWDExWChlZGdlSWQxMCwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKENSRVcpCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hsb2NhdGlvblgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbG9jYXRpb25YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJzdGVwaGVuIiksIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImRhbmllbCIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXR0aGlhcyIpKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYcGVyc29uWF9oYXNYYWdlX25vdFhsdGVYMTBYX2FuZFhub3RYYmV0d2VlblgxMV8yMFhYWFhfYW5kWGx0WDI5WF9vclhlcVgzNVhYWFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfaGFzWGFnZV9ub3RYbHRlWDEwWF9hbmRYbm90WGJldHdlZW5YMTFfMjBYWFhYX2FuZFhsdFgyOVhfb3JYZXFYMzVYWFhYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJwZXRlciIsICJ2YWRhcyIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9pbl9oYXNJZFhuZXFYMVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaW5faGFzSWRYbmVxWDFYWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygiam9zaCIpIHx8IHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygicGV0ZXIiKSk7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydF9nX0VYMTFYKGZpbmFsIE9iamVjdCBlZGdlSWQsIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlZGdlSWQsIGUuaWQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ib3RoX2RlZHVwX3Byb3BlcnRpZXNfaGFzS2V5WGFnZVhfdmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVhhZ2VYX3ZhbHVlKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOSwgMjcsIDMyLCAzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2JvdGhfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYYWdlWF9oYXNWYWx1ZVhndFgzMFhYX3ZhbHVlKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYYWdlWF9oYXNWYWx1ZVhndFgzMFhYX3ZhbHVlKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgzMiwgMzUpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVh3ZWlnaHRYX3ZhbHVlKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYd2VpZ2h0WF92YWx1ZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMC41LCAxLjAsIDAuNCwgMC4yKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYd2VpZ2h0WF9oYXNWYWx1ZVhsdFgwZDNYWF92YWx1ZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhFX3Byb3BlcnRpZXNfZGVkdXBfaGFzS2V5WHdlaWdodFhfaGFzVmFsdWVYbHRYMGQzWFhfdmFsdWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDAuMiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aAotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNOb3RYYWdlWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTm90WGFnZVhfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImxvcCIsICJyaXBwbGUiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzSWRYMVhfaGFzSWRYMlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNJZFgxWF9oYXNJZFgyWCgKLSAgICAgICAgICAgICAgICBjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoInZhZGFzIikKLSAgICAgICAgKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX2hhc0xhYmVsWHNvZnR3YXJlWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfaGFzTGFiZWxYc29mdHdhcmVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzSWRYZW1wdHlYX2NvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0lkWGVtcHR5WF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDBMLCB0cmF2ZXJzYWwubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzSWRYd2l0aGluWGVtcHR5WFhfY291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzSWRYd2l0aGluWGVtcHR5WFhfY291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwTCwgdHJhdmVyc2FsLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0lkWHdpdGhvdXRYZW1wdHlYWF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNJZFh3aXRob3V0WGVtcHR5WFhfY291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2TCwgdHJhdmVyc2FsLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX25vdFhoYXNJZFh3aXRoaW5YZW1wdHlYWFhfY291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfbm90WGhhc0lkWHdpdGhpblhlbXB0eVhYWF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCB0cmF2ZXJzYWwubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZV93aXRoaW5YMjdYX2NvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hhZ2Vfd2l0aGluWDI3WF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCB0cmF2ZXJzYWwubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZV93aXRoaW5YMjdfMjlYX2NvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hhZ2Vfd2l0aGluWDI3XzI5WF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJMLCB0cmF2ZXJzYWwubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZV93aXRob3V0WDI3WF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlX3dpdGhvdXRYMjdYX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoM0wsIHRyYXZlcnNhbC5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYYWdlX3dpdGhvdXRYMjdfMjlYX2NvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hhZ2Vfd2l0aG91dFgyN18yOVhfY291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyTCwgdHJhdmVyc2FsLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX2NvbnRhaW5pbmdYYXJrWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9jb250YWluaW5nWGFya1hYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKS5lcXVhbHMoIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfc3RhcnRpbmdXaXRoWG1hclhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfc3RhcnRpbmdXaXRoWG1hclhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKS5lcXVhbHMoIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfZW5kaW5nV2l0aFhhc1hYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfZW5kaW5nV2l0aFhhc1hYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKS5lcXVhbHMoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbm90X2NvbnRhaW5pbmdYYXJrWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9ub3RfY29udGFpbmluZ1hhcmtYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBhc3NlcnROb3RFcXVhbHMoIm1hcmtvIiwgdHJhdmVyc2FsLm5leHQoKS52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX25vdF9zdGFydGluZ1dpdGhYbWFyWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9ub3Rfc3RhcnRpbmdXaXRoWG1hclhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBhc3NlcnROb3RFcXVhbHMoIm1hcmtvIiwgdHJhdmVyc2FsLm5leHQoKS52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX25vdF9lbmRpbmdXaXRoWGFzWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9ub3RfZW5kaW5nV2l0aFhhc1hYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBhc3NlcnROb3RFcXVhbHMoInZhZGFzIiwgdHJhdmVyc2FsLm5leHQoKS52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX3JlZ2V4WHJNYXJYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX3JlZ2V4WHJNYXJYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKS5lcXVhbHMoIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbm90UmVnZXhYck1hclhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfbm90UmVnZXhYck1hclhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotCi0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGFzc2VydE5vdEVxdWFscygibWFya28iLCB0cmF2ZXJzYWwubmV4dCgpLnZhbHVlKCJuYW1lIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclhYKCkgewotICAgICAgICBnLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiQXBhY2hlIFRpbmtlclBvcMKpIikuaXRlcmF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5uZXh0KCkuZXF1YWxzKCJBcGFjaGUgVGlua2VyUG9wwqkiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfcmVnZXhYVGlua2VyVW5pY29kZVhYKCkgewotICAgICAgICBnLmFkZFYoInNvZnR3YXJlIikucHJvcGVydHkoIm5hbWUiLCAiQXBhY2hlIFRpbmtlclBvcMKpIikuaXRlcmF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJVbmljb2RlWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0KLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwubmV4dCgpLmVxdWFscygiQXBhY2hlIFRpbmtlclBvcMKpIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWHBlcnNvbl9uYW1lX2NvbnRhaW5pbmdYb1hfYW5kWGx0WG1YWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfY29udGFpbmluZ1hvWF9hbmRYbHRYbVhYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwubmV4dCgpLnZhbHVlKCJuYW1lIikuZXF1YWxzKCJqb3NoIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfZ3RYbVhfYW5kWGNvbnRhaW5pbmdYb1hYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX2d0WG1YX2FuZFhjb250YWluaW5nWG9YWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLm5leHQoKS52YWx1ZSgibmFtZSIpLmVxdWFscygibWFya28iKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYcF9uZXFYdlhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWHBfbmVxWHZYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGtfd2l0aGluWGNYWF92YWx1ZXNYa1goKSB7Ci0gICAgICAgIGcuYWRkVigpLnByb3BlcnR5KCJrIiwgIui9ieazqCIpLgotICAgICAgICAgICAgICAgIGFkZFYoKS5wcm9wZXJ0eSgiayIsICLinKYiKS4KLSAgICAgICAgICAgICAgICBhZGRWKCkucHJvcGVydHkoImsiLCAi4pmgIikuCi0gICAgICAgICAgICAgICAgYWRkVigpLnByb3BlcnR5KCJrIiwgIkEiKS5pdGVyYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hrX3dpdGhpblhjWFhfdmFsdWVzWGtYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgi6L2J5rOoIiwgIuKcpiIsICLimaAiKSwgdHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfYWdlWF92YWx1ZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX2FnZVhfdmFsdWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI3LCAyOSwgMzIsIDM1KSwgdHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRV9wcm9wZXJ0aWVzX2hhc0tleVhudWxsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19FX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19FX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfRV9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX251bGxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19FX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfd2VpZ2h0WF92YWx1ZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfRV9wcm9wZXJ0aWVzX2hhc0tleVhudWxsX3dlaWdodFhfdmFsdWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDAuNSwgMS4wLCAxLjAsIDAuNCwgMC40LCAwLjIpLCB0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcHJvcGVydGllc19oYXNWYWx1ZVhudWxsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcHJvcGVydGllc19oYXNWYWx1ZVhudWxsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxfbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3Byb3BlcnRpZXNfaGFzVmFsdWVYbnVsbF9udWxsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxfam9zaFhfdmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxfam9zaFhfdmFsdWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgSGFzVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYMTFYX291dFZfb3V0RV9oYXNYaWRfMTBYKGZpbmFsIE9iamVjdCBlMTFJZCwgZmluYWwgT2JqZWN0IGUxMElkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKGUxMUlkKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlMTBJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9oYXNYa2V5WChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgU3RyaW5nIGtleSkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5oYXMoa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX2hhc1huYW1lX21hcmtvWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5oYXMoIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX21hcmtvWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX2JsYWhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJibGFoIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYYmxhaFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJibGFoIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWG51bGxfdGVzdG51bGxrZXlYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygoU3RyaW5nKSBudWxsLCAidGVzdC1udWxsLWtleSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9oYXNYbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkuaGFzKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzTGFiZWxYbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNMYWJlbFhudWxsX3BlcnNvblgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwobnVsbCwgInBlcnNvbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc0xhYmVsWG51bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNMYWJlbChudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX2hhc1hhZ2VfZ3RfMzBYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmhhcygiYWdlIiwgUC5ndCgzMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYdjFYX2hhc1hhZ2VfZ3RfMzBYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmhhcygiYWdlIiwgUC5ndCgzMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X2hhc1hpZF9sdF8zWChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYzSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCkuaGFzKFQuaWQsIFAubHQodjNJZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X2hhc0lkWDJYKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5oYXNJZCh2MklkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dF9oYXNJZFgyXzNYKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCwgZmluYWwgT2JqZWN0IHYzSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCkuaGFzSWQodjJJZCwgdjNJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRfaGFzSWRYMl8zWF9pbkxpc3QoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkLCBmaW5hbCBPYmplY3QgdjNJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5oYXNJZChBcnJheXMuYXNMaXN0KHYySWQsIHYzSWQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc0lkWDJfM1goZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzSWQodjFJZCwgdjJJZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNJZFgyXzNYX2luTGlzdChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNJZChBcnJheXMuYXNMaXN0KHYxSWQsIHYySWQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1hhZ2VfZ3RfMzBYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC5ndCgzMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfd2hlcmVYYWdlX2lzWGd0XzMwWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkud2hlcmUoX18udmFsdWVzKCJhZ2UiKS5pcyhQLmd0KDMwKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfd2hlcmVYbGFiZWxfaXNYc29mdHdhcmVYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKCJzb2Z0d2FyZSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYN1hfaGFzTGFiZWxYa25vd3NYKGZpbmFsIE9iamVjdCBlN0lkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKGU3SWQpLmhhc0xhYmVsKCJrbm93cyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9oYXNMYWJlbFhrbm93c1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkuaGFzTGFiZWwoImtub3dzIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19FX2hhc0xhYmVsWG51bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuRSgpLmhhc0xhYmVsKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRV9oYXNMYWJlbFh1c2VzX3RyYXZlcnNlc1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkuaGFzTGFiZWwoInVzZXMiLCAidHJhdmVyc2VzIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25fc29mdHdhcmVfYmxhaFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIsICJzb2Z0d2FyZSIsICJibGFoIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9hZ2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpLnZhbHVlcygiYWdlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRFX2hhc1h3ZWlnaHRfaW5zaWRlXzBfMDZYX2luVihmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXRFKCkuaGFzKCJ3ZWlnaHQiLCBQLmluc2lkZSgwLjBkLCAwLjZkKSkuaW5WKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbG9jYXRpb25YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibG9jYXRpb24iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2luX2hhc0lkWG5lcVgxWFgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5pbigpLmhhc0lkKFAubmVxKHYxSWQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfaGFzWGFnZV9ub3RYbHRlWDEwWF9hbmRYbm90WGJldHdlZW5YMTFfMjBYWFhYX2FuZFhsdFgyOVhfb3JYZXFYMzVYWFhYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmhhcygiYWdlIiwgUC5ub3QoUC5sdGUoMTApLmFuZChQLm5vdChQLmJldHdlZW4oMTEsIDIwKSkpKS5hbmQoUC5sdCgyOSkub3IoUC5lcSgzNSkpKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVhhZ2VYX3ZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoImFnZSIpLnZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVhhZ2VYX2hhc1ZhbHVlWGd0WDMwWFhfdmFsdWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgiYWdlIikuaGFzVmFsdWUoUC5ndCgzMCkpLnZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVh3ZWlnaHRYX3ZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KCJ3ZWlnaHQiKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYd2VpZ2h0WF9oYXNWYWx1ZVhsdFgwZDNYWF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleSgid2VpZ2h0IikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzTm90WGFnZVhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNOb3QoImFnZSIpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+ICBnZXRfZ19WX2hhc0lkWDFYX2hhc0lkWDJYKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0lkKHYxSWQpLmhhc0lkKHYySWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9oYXNMYWJlbFhzb2Z0d2FyZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2hhc0lkWGVtcHR5WF9jb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNJZChDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNJZFh3aXRoaW5YZW1wdHlYWF9jb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNJZChQLndpdGhpbihDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfaGFzSWRYd2l0aG91dFhlbXB0eVhYX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0lkKFAud2l0aG91dChDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1Zfbm90WGhhc0lkWHdpdGhpblhlbXB0eVhYWF9jb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ub3QoX18uaGFzSWQoUC53aXRoaW4oQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpKSkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNYYWdlX3dpdGhpblgyN1hfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiLCBQLndpdGhpbigyNykpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfaGFzWGFnZV93aXRoaW5YMjdfMjlYX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRoaW4oMjcsIDI5KSkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNYYWdlX3dpdGhvdXRYMjdYX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRob3V0KDI3KSkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNYYWdlX3dpdGhvdXRYMjdfMjlYX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIiwgUC53aXRob3V0KDI3LCAyOSkpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9jb250YWluaW5nWGFya1hYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLmNvbnRhaW5pbmcoImFyayIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX3N0YXJ0aW5nV2l0aFhtYXJYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5zdGFydGluZ1dpdGgoIm1hciIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX2VuZGluZ1dpdGhYYXNYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5lbmRpbmdXaXRoKCJhcyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX25vdF9jb250YWluaW5nWGFya1hYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLm5vdENvbnRhaW5pbmcoImFyayIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX25vdF9zdGFydGluZ1dpdGhYbWFyWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAubm90U3RhcnRpbmdXaXRoKCJtYXIiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9ub3RfZW5kaW5nV2l0aFhhc1hYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLm5vdEVuZGluZ1dpdGgoImFzIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX2NvbnRhaW5pbmdYb1hfYW5kWGx0WG1YWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwgVGV4dFAuY29udGFpbmluZygibyIpLmFuZChQLmx0KCJtIikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX2d0WG1YX2FuZFhjb250YWluaW5nWG9YWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgUC5ndCgibSIpLmFuZChUZXh0UC5jb250YWluaW5nKCJvIikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1hwX25lcVh2WFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJwIiwgUC5uZXEoInYiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNYa193aXRoaW5YY1hYX3ZhbHVlc1hrWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoImsiLCBQLndpdGhpbigi6L2J5rOoIiwgIuKcpiIsICLimaAiKSkudmFsdWVzKCJrIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiBnZXRfZ19WX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiBnZXRfZ19WX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfYWdlWF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsICJhZ2UiKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsID8gZXh0ZW5kcyBQcm9wZXJ0eTxPYmplY3Q+PiBnZXRfZ19FX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRG91YmxlPiBnZXRfZ19FX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfd2VpZ2h0WF92YWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsICJ3ZWlnaHQiKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCA/IGV4dGVuZHMgUHJvcGVydHk8T2JqZWN0Pj4gZ2V0X2dfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgPyBleHRlbmRzIFByb3BlcnR5PE9iamVjdD4+IGdldF9nX1ZfcHJvcGVydGllc19oYXNWYWx1ZVhudWxsX251bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfcHJvcGVydGllc19oYXNWYWx1ZVhudWxsX2pvc2hYX3ZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCAiam9zaCIpLnZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9yZWdleFhyTWFyWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAucmVnZXgoIl5tYXIiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYbmFtZV9ub3RSZWdleFhyTWFyWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgVGV4dFAubm90UmVnZXgoIl5tYXIiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCBUZXh0UC5yZWdleCgiVGlua2VyIikpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzWG5hbWVfcmVnZXhYVGlua2VyVW5pY29kZVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsIFRleHRQLnJlZ2V4KCJUaW5rZXIuKlx1MDBBOSIpKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0lzVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9Jc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRiOWE3YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL0lzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi0vKioKLSAqIEBhdXRob3IgRGFuaWVsIEt1cHBpdHogKGh0dHA6Ly9ncmVtbGluLmd1cnUpCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIElzVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX3ZhbHVlc1hhZ2VYX2lzWDMyWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfdmFsdWVzWGFnZVhfaXNYbHRlXzMwWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfdmFsdWVzWGFnZVhfaXNYZ3RlXzI5WF9pc1hsdF8zNFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfd2hlcmVYaW5YY3JlYXRlZFhfY291bnRfaXNYMVhYX3ZhbHVlc1huYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl93aGVyZVhpblhjcmVhdGVkWF9jb3VudF9pc1hndGVfMlhYX3ZhbHVlc1huYW1lWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlc1hhZ2VYX2lzWDMyWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZXNYYWdlWF9pc1gzMlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMzIpLCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlc1hhZ2VYX2lzWGx0ZV8zMFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVzWGFnZVhfaXNYbHRlXzMwWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMjcsIDI5KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVzWGFnZVhfaXNYZ3RlXzI5WF9pc1hsdF8zNFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVzWGFnZVhfaXNYZ3RlXzI5WF9pc1hsdF8zNFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI5LCAzMiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3doZXJlWGluWGNyZWF0ZWRYX2NvdW50X2lzWDFYWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl93aGVyZVhpblhjcmVhdGVkWF9jb3VudF9pc1gxWFhfdmFsdWVzWG5hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInJpcHBsZSIsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfd2hlcmVYaW5YY3JlYXRlZFhfY291bnRfaXNYZ3RlXzJYWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl93aGVyZVhpblhjcmVhdGVkWF9jb3VudF9pc1hndGVfMlhYX3ZhbHVlc1huYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgSXNUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX3ZhbHVlc1hhZ2VYX2lzWDMyWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48SW50ZWdlcj52YWx1ZXMoImFnZSIpLmlzKDMyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl92YWx1ZXNYYWdlWF9pc1hsdGVfMzBYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxJbnRlZ2VyPnZhbHVlcygiYWdlIikuaXMoUC5sdGUoMzApKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl92YWx1ZXNYYWdlWF9pc1hndGVfMjlYX2lzWGx0XzM0WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48SW50ZWdlcj52YWx1ZXMoImFnZSIpLmlzKFAuZ3RlKDI5KSkuaXMoUC5sdCgzNCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfd2hlcmVYaW5YY3JlYXRlZFhfY291bnRfaXNYMVhYX3ZhbHVlc1huYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS53aGVyZShpbigiY3JlYXRlZCIpLmNvdW50KCkuaXMoMSkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfd2hlcmVYaW5YY3JlYXRlZFhfY291bnRfaXNYZ3RlXzJYWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkud2hlcmUoaW4oImNyZWF0ZWQiKS5jb3VudCgpLmlzKFAuZ3RlKDJsKSkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvT3JUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL09yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjM0ODYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvT3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uc2VsZWN0OwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgT3JUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vclhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndGVfMlhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vclhvdXRFWGtub3dzWF9faGFzWGxhYmVsX3NvZnR3YXJlWF9vcl9oYXNYYWdlX2d0ZV8zNVhYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYYVhfb3JYc2VsZWN0WGFYX3NlbGVjdFhhWFgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vclhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndGVfMlhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX29yWGhhc1hhZ2VfZ3RfMjdYX19vdXRFX2NvdW50X2d0ZV8yWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAiam9zaCIsICJwZXRlciIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vclhvdXRFWGtub3dzWF9faGFzWGxhYmVsX3NvZnR3YXJlWF9vcl9oYXNYYWdlX2d0ZV8zNVhYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vclhvdXRFWGtub3dzWF9faGFzWGxhYmVsX3NvZnR3YXJlWF9vcl9oYXNYYWdlX2d0ZV8zNVhYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJyaXBwbGUiLCAibG9wIiwgInBldGVyIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX29yWHNlbGVjdFhhWF9zZWxlY3RYYVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3JYc2VsZWN0WGFYX3NlbGVjdFhhWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiBhY3R1YWwgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBhY3R1YWwuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBPclRlc3QgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vclhoYXNYYWdlX2d0XzI3WF9fb3V0RV9jb3VudF9ndGVfMlhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vcihoYXMoImFnZSIsIFAuZ3QoMjcpKSwgb3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMmwpKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vclhvdXRFWGtub3dzWF9faGFzWGxhYmVsX3NvZnR3YXJlWF9vcl9oYXNYYWdlX2d0ZV8zNVhYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3Iob3V0RSgia25vd3MiKSwgaGFzKFQubGFiZWwsICJzb2Z0d2FyZSIpLm9yKCkuaGFzKCJhZ2UiLCBQLmd0ZSgzNSkpKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2FzWGFYX29yWHNlbGVjdFhhWF9zZWxlY3RYYVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3Ioc2VsZWN0KCJhIiksIHNlbGVjdCgiYSIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvUmFuZ2VUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL1JhbmdlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWRlMWU1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvUmFuZ2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NjQgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUG9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlLmxvY2FsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ib3RoOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy51bmZvbGQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFJhbmdlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X2xpbWl0WDJYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfbG9jYWxYb3V0RV9saW1pdFgxWF9pblZYX2xpbWl0WDNYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhrbm93c1hfb3V0RVhjcmVhdGVkWF9yYW5nZVgwXzFYX2luVihmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhrbm93c1hfb3V0WGNyZWF0ZWRYX3JhbmdlWDBfMVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfcmFuZ2VYMV8zWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhjcmVhdGVkWF9pbkVYY3JlYXRlZFhfcmFuZ2VYMV8zWF9vdXRWKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3JhbmdlWDVfMTFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX2luX2FzWGFYX2luX2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX2xpbWl0WGxvY2FsXzJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FzWGFYX2luX2FzWGFYX2luX2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8U3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3JhbmdlWGxvY2FsXzFfM1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3JhbmdlWGxvY2FsXzRfNVhfdW5mb2xkKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfcmFuZ2VYbG9jYWxfMV8zWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfMlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3ZhbHVlc1huYW1lWF9za2lwWDFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlWF9za2lwWDFYX3ZhbHVlc1huYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8RG91YmxlPj4gZ2V0X2dfVl9vdXRFX3ZhbHVlc1h3ZWlnaHRYX2ZvbGRfb3JkZXJYbG9jYWxYX3NraXBYbG9jYWxfMlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfcmFuZ2VYbG9jYWxfMjBfMzBYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRfbGltaXRYMlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRfbGltaXRYMlgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2xvY2FsWG91dEVfbGltaXRYMVhfaW5WWF9saW1pdFgzWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2xvY2FsWG91dEVfbGltaXRYMVhfaW5WWF9saW1pdFgzWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dFhrbm93c1hfb3V0RVhjcmVhdGVkWF9yYW5nZVgwXzFYX2luVigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dFhrbm93c1hfb3V0RVhjcmVhdGVkWF9yYW5nZVgwXzFYX2luVihjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobmFtZS5lcXVhbHMoImxvcCIpIHx8IG5hbWUuZXF1YWxzKCJyaXBwbGUiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRYa25vd3NYX291dFhjcmVhdGVkWF9yYW5nZVgwXzFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0WGtub3dzWF9vdXRYY3JlYXRlZFhfcmFuZ2VYMF8xWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobmFtZS5lcXVhbHMoImxvcCIpIHx8IG5hbWUuZXF1YWxzKCJyaXBwbGUiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfcmFuZ2VYMV8zWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9yYW5nZVgxXzNYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gdHJhdmVyc2FsLm5leHQoKS52YWx1ZSgibmFtZSIpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lLmVxdWFscygibWFya28iKSB8fCBuYW1lLmVxdWFscygiam9zaCIpIHx8IG5hbWUuZXF1YWxzKCJwZXRlciIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dFhjcmVhdGVkWF9pbkVYY3JlYXRlZFhfcmFuZ2VYMV8zWF9vdXRWKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0WGNyZWF0ZWRYX2luRVhjcmVhdGVkWF9yYW5nZVgxXzNYX291dFYoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSB0cmF2ZXJzYWwubmV4dCgpLnZhbHVlKCJuYW1lIik7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG5hbWUuZXF1YWxzKCJtYXJrbyIpIHx8IG5hbWUuZXF1YWxzKCJqb3NoIikgfHwgbmFtZS5lcXVhbHMoInBldGVyIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3JhbmdlWDVfMTFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3JhbmdlWDVfMTFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogbGltaXQgc3RlcCwgU2NvcGUubG9jYWwsICZndDsxIGl0ZW0gcmVxdWVzdGVkLCBMaXN0Jmx0O1N0cmluZyZndDsgaW5wdXQsIExpc3QmbHQ7U3RyaW5nJmd0OyBvdXRwdXQKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfaW5fYXNYYVhfaW5fYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfbGltaXRYbG9jYWxfMlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8U3RyaW5nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9pbl9hc1hhWF9pbl9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9saW1pdFhsb2NhbF8yWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgU2V0PExpc3Q8U3RyaW5nPj4gZXhwZWN0ZWQgPQotICAgICAgICAgICAgICAgIG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KCJyaXBwbGUiLCAiam9zaCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgibG9wIiwgImpvc2giKSkpOwotICAgICAgICBmaW5hbCBTZXQ8TGlzdDxTdHJpbmc+PiBhY3R1YWwgPSBuZXcgSGFzaFNldCh0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IGxpbWl0IHN0ZXAsIFNjb3BlLmxvY2FsLCAxIGl0ZW0gcmVxdWVzdGVkLCBMaXN0IGlucHV0LCBTdHJpbmcgb3V0cHV0Ci0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX2luX2FzWGFYX2luX2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX2luX2FzWGFYX2luX2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gZXhwZWN0ZWQgPSBuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoInJpcHBsZSIsICJsb3AiKSk7Ci0gICAgICAgIGZpbmFsIFNldDxMaXN0PFN0cmluZz4+IGFjdHVhbCA9IG5ldyBIYXNoU2V0KHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogcmFuZ2Ugc3RlcCwgU2NvcGUubG9jYWwsICZndDsxIGl0ZW0gcmVxdWVzdGVkLCBMaXN0Jmx0O1N0cmluZyZndDsgaW5wdXQsIExpc3QmbHQ7U3RyaW5nJmd0OyBvdXRwdXQKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9yYW5nZVhsb2NhbF8xXzNYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9yYW5nZVhsb2NhbF8xXzNYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8TGlzdDxTdHJpbmc+PiBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgbmV3IEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgiam9zaCIsICJyaXBwbGUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoImpvc2giLCAibG9wIikpKTsKLSAgICAgICAgZmluYWwgU2V0PExpc3Q8U3RyaW5nPj4gYWN0dWFsID0gbmV3IEhhc2hTZXQodHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBhY3R1YWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNjZW5hcmlvOiByYW5nZSBzdGVwLCBTY29wZS5sb2NhbCwgMSBpdGVtIHJlcXVlc3RlZCwgTGlzdCBpbnB1dCwgU3RyaW5nIG91dHB1dAotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHMgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgcyk7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNjZW5hcmlvOiByYW5nZSBzdGVwLCBTY29wZS5sb2NhbCwgMSBpdGVtIHJlcXVlc3RlZCwgTGlzdCBpbnB1dCwgbm8gaXRlbXMgc2VsZWN0ZWQsIHN0b3AgdHJhdmVyc2FsCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfcmFuZ2VYbG9jYWxfNF81WF91bmZvbGQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3JhbmdlWGxvY2FsXzRfNVhfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQXJyYXlzLmFzTGlzdCgpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNjZW5hcmlvOiBsaW1pdCBzdGVwLCBTY29wZS5sb2NhbCwgJmd0OzEgaXRlbSByZXF1ZXN0ZWQsIE1hcCBpbnB1dCwgTWFwIG91dHB1dAotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX2luX2FzWGJYX2luX2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfbGltaXRYbG9jYWxfMlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFNldDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBleHBlY3RlZCA9IG5ldyBIYXNoU2V0PD4obWFrZU1hcExpc3QoMiwKLSAgICAgICAgICAgICAgICAiYSIsICJyaXBwbGUiLCAiYiIsICJqb3NoIiwKLSAgICAgICAgICAgICAgICAiYSIsICJsb3AiLCAiYiIsICJqb3NoIikpOwotICAgICAgICBmaW5hbCBTZXQ8TWFwPFN0cmluZywgU3RyaW5nPj4gYWN0dWFsID0gbmV3IEhhc2hTZXQ8Pih0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IGxpbWl0IHN0ZXAsIFNjb3BlLmxvY2FsLCAxIGl0ZW0gcmVxdWVzdGVkLCBNYXAgaW5wdXQsIE1hcCBvdXRwdXQKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfaW5fYXNYYlhfaW5fYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9saW1pdFhsb2NhbF8xWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8TWFwPFN0cmluZywgU3RyaW5nPj4gZXhwZWN0ZWQgPSBuZXcgSGFzaFNldDw+KG1ha2VNYXBMaXN0KDEsCi0gICAgICAgICAgICAgICAgImEiLCAicmlwcGxlIiwKLSAgICAgICAgICAgICAgICAiYSIsICJsb3AiKSk7Ci0gICAgICAgIGZpbmFsIFNldDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBhY3R1YWwgPSBuZXcgSGFzaFNldDw+KHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogcmFuZ2Ugc3RlcCwgU2NvcGUubG9jYWwsICZndDsxIGl0ZW0gcmVxdWVzdGVkLCBNYXAgaW5wdXQsIE1hcCBvdXRwdXQKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfM1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfM1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFNldDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBleHBlY3RlZCA9IG5ldyBIYXNoU2V0PD4obWFrZU1hcExpc3QoMiwKLSAgICAgICAgICAgICAgICAiYiIsICJqb3NoIiwgImMiLCAicmlwcGxlIiwKLSAgICAgICAgICAgICAgICAiYiIsICJqb3NoIiwgImMiLCAibG9wIikpOwotICAgICAgICBmaW5hbCBTZXQ8TWFwPFN0cmluZywgU3RyaW5nPj4gYWN0dWFsID0gbmV3IEhhc2hTZXQ8Pih0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IHJhbmdlIHN0ZXAsIFNjb3BlLmxvY2FsLCAxIGl0ZW0gcmVxdWVzdGVkLCBNYXAgaW5wdXQsIE1hcCBvdXRwdXQKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfMlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfMlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIC8vIFNpbmNlIGJvdGggb2YgdGhlIHR1cGxlcyBhcmUgaWRlbnRpY2FsLCB3ZSBjb3VudCB0aGVtLgotICAgICAgICBmaW5hbCBTZXQ8TWFwPFN0cmluZywgU3RyaW5nPj4gZXhwZWN0ZWQgPSBuZXcgSGFzaFNldDw+KG1ha2VNYXBMaXN0KDEsICJiIiwgImpvc2giKSk7Ci0gICAgICAgIGZpbmFsIFNldDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBhY3R1YWwgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFjdHVhbC5hZGQobWFwKTsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3ZhbHVlc1huYW1lWF9za2lwWDFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3ZhbHVlc1huYW1lWF9za2lwWDFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAiam9zaCIsICJwZXRlciIpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVhfc2tpcFgxWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVhfc2tpcFgxWF92YWx1ZXNYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJqb3NoIiwgInBldGVyIiksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfdmFsdWVzWHdlaWdodFhfZm9sZF9vcmRlclhsb2NhbFhfc2tpcFhsb2NhbF8yWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxEb3VibGU+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dEVfdmFsdWVzWHdlaWdodFhfZm9sZF9vcmRlclhsb2NhbFhfc2tpcFhsb2NhbF8yWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3QoMC40LCAwLjUsIDEuMCwgMS4wKSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF92YWx1ZXNYYWdlWF9yYW5nZVhsb2NhbF8yMF8zMFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9yYW5nZVhsb2NhbF8yMF8zMFgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMjkpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFJhbmdlVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dF9saW1pdFgyWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5saW1pdCgyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2xvY2FsWG91dEVfbGltaXRYMVhfaW5WWF9saW1pdFgzWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5sb2NhbChvdXRFKCkubGltaXQoMSkpLmluVigpLmxpbWl0KDMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0WGtub3dzWF9vdXRFWGNyZWF0ZWRYX3JhbmdlWDBfMVhfaW5WKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dCgia25vd3MiKS5vdXRFKCJjcmVhdGVkIikucmFuZ2UoMCwgMSkuaW5WKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRYa25vd3NYX291dFhjcmVhdGVkWF9yYW5nZVgwXzFYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dCgia25vd3MiKS5vdXQoImNyZWF0ZWQiKS5yYW5nZSgwLCAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9yYW5nZVgxXzNYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dCgiY3JlYXRlZCIpLmluKCJjcmVhdGVkIikucmFuZ2UoMSwgMyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5FWGNyZWF0ZWRYX3JhbmdlWDFfM1hfb3V0VihmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoImNyZWF0ZWQiKS5pbkUoImNyZWF0ZWQiKS5yYW5nZSgxLCAzKS5vdXRWKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9yZXBlYXRYYm90aFhfdGltZXNYM1hfcmFuZ2VYNV8xMVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucmVwZWF0KGJvdGgoKSkudGltZXMoMykucmFuZ2UoNSwgMTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfaW5fYXNYYVhfaW5fYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfbGltaXRYbG9jYWxfMlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5pbigpLmFzKCJhIikuaW4oKS5hcygiYSIpLjxMaXN0PFN0cmluZz4+c2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieSh1bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLmxpbWl0KGxvY2FsLCAyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FzWGFYX2luX2FzWGFYX2luX2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLmluKCkuYXMoImEiKS5pbigpLmFzKCJhIikuPExpc3Q8U3RyaW5nPj5zZWxlY3QoUG9wLm1peGVkLCAiYSIpLmJ5KHVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkubGltaXQobG9jYWwsIDEpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9yYW5nZVhsb2NhbF8xXzNYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLjxMaXN0PFN0cmluZz4+c2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieSh1bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnJhbmdlKGxvY2FsLCAxLCAzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfcmFuZ2VYbG9jYWxfMV8yWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLm91dCgpLmFzKCJhIikuPExpc3Q8U3RyaW5nPj5zZWxlY3QoUG9wLm1peGVkLCAiYSIpLmJ5KHVuZm9sZCgpLnZhbHVlcygibmFtZSIpLmZvbGQoKSkucmFuZ2UobG9jYWwsIDEsIDIpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF9yYW5nZVhsb2NhbF80XzVYX3VuZm9sZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJhIikub3V0KCkuYXMoImEiKS48TGlzdDxTdHJpbmc+PnNlbGVjdChQb3AubWl4ZWQsICJhIikuYnkodW5mb2xkKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKS5yYW5nZShsb2NhbCwgNCwgNSkudW5mb2xkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfaW5fYXNYYlhfaW5fYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9saW1pdFhsb2NhbF8yWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLmluKCkuYXMoImIiKS5pbigpLmFzKCJjIikuPE1hcDxTdHJpbmcsIFN0cmluZz4+c2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikubGltaXQobG9jYWwsIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX2luX2FzWGJYX2luX2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfbGltaXRYbG9jYWxfMVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5pbigpLmFzKCJiIikuaW4oKS5hcygiYyIpLjxNYXA8U3RyaW5nLCBTdHJpbmc+PnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgibmFtZSIpLmxpbWl0KGxvY2FsLCAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfcmFuZ2VYbG9jYWxfMV8zWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikub3V0KCkuYXMoImMiKS48TWFwPFN0cmluZywgU3RyaW5nPj5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS5yYW5nZShsb2NhbCwgMSwgMyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfMlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuPE1hcDxTdHJpbmcsIFN0cmluZz4+c2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikucmFuZ2UobG9jYWwsIDEsIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3ZhbHVlc1huYW1lWF9za2lwWDFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKS48U3RyaW5nPnZhbHVlcygibmFtZSIpLnNraXAoMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVhfc2tpcFgxWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm9yZGVyKCkuYnkoImFnZSIpLnNraXAoMSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8RG91YmxlPj4gZ2V0X2dfVl9vdXRFX3ZhbHVlc1h3ZWlnaHRYX2ZvbGRfb3JkZXJYbG9jYWxYX3NraXBYbG9jYWxfMlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZm9sZCgpLm9yZGVyKGxvY2FsKS5za2lwKGxvY2FsLCAyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX3JhbmdlWGxvY2FsXzIwXzMwWChmaW5hbCBPYmplY3QgdmlkMSkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLnJhbmdlKFNjb3BlLmxvY2FsLCAyMCwgMzApOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9TYW1wbGVUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL1NhbXBsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVmNGQ5ZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL1NhbXBsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5Qcm9kdWN0aXZlQnlTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNhbXBsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0Vfc2FtcGxlWDFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0Vfc2FtcGxlWDJYX2J5WHdlaWdodFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX2xvY2FsWG91dEVfc2FtcGxlWDFYX2J5WHdlaWdodFhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgQ29sbGVjdGlvbjxEb3VibGU+Pj4gZ2V0X2dfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X3NhbXBsZVgyWF9mb2xkWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248RG91YmxlPj4+IGdldF9nX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9mb2xkX3NhbXBsZVhsb2NhbF81WFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfc2FtcGxlWGxvY2FsXzVYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRV9zYW1wbGVYMVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FX3NhbXBsZVgxWCgpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0Vfc2FtcGxlWDJYX2J5WHdlaWdodFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FX3NhbXBsZVgyWF9ieVh3ZWlnaHRYKCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9sb2NhbFhvdXRFX3NhbXBsZVgxWF9ieVh3ZWlnaHRYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9sb2NhbFhvdXRFX3NhbXBsZVgxWF9ieVh3ZWlnaHRYWCgpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV93ZWlnaHRfc2FtcGxlWDJYX2ZvbGRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBDb2xsZWN0aW9uPERvdWJsZT4+PiB0cmF2ZXJzYWwgPQotICAgICAgICAgICAgICAgIGdldF9nX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9zYW1wbGVYMlhfZm9sZFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248RG91YmxlPj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5nZXQoInNvZnR3YXJlIikuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5nZXQoInBlcnNvbiIpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV93ZWlnaHRfZm9sZF9zYW1wbGVYbG9jYWxfNVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBDb2xsZWN0aW9uPERvdWJsZT4+PiB0cmF2ZXJzYWwgPQotICAgICAgICAgICAgICAgIGdldF9nX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9mb2xkX3NhbXBsZVhsb2NhbF81WFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248RG91YmxlPj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcC5nZXQoInNvZnR3YXJlIikuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIG1hcC5nZXQoInBlcnNvbiIpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3ZhbHVlc1hhZ2VYX3NhbXBsZVhsb2NhbF81WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX3NhbXBsZVhsb2NhbF81WChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgU2FtcGxlVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0Vfc2FtcGxlWDFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuRSgpLnNhbXBsZSgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0Vfc2FtcGxlWDJYX2J5WHdlaWdodFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKCkuc2FtcGxlKDIpLmJ5KCJ3ZWlnaHQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9sb2NhbFhvdXRFX3NhbXBsZVgxWF9ieVh3ZWlnaHRYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5sb2NhbChvdXRFKCkuc2FtcGxlKDEpLmJ5KCJ3ZWlnaHQiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248RG91YmxlPj4+IGdldF9nX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9zYW1wbGVYMlhfZm9sZFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPFN0cmluZywgQ29sbGVjdGlvbjxEb3VibGU+Pmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLnNhbXBsZSgyKS5mb2xkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBDb2xsZWN0aW9uPERvdWJsZT4+PiBnZXRfZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV93ZWlnaHRfZm9sZF9zYW1wbGVYbG9jYWxfNVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aG91dFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuY2xhc3MpLlYoKS48U3RyaW5nLCBDb2xsZWN0aW9uPERvdWJsZT4+Z3JvdXAoKS5ieShULmxhYmVsKS5ieShib3RoRSgpLnZhbHVlcygid2VpZ2h0IikuZm9sZCgpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfc2FtcGxlWGxvY2FsXzVYKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuc2FtcGxlKFNjb3BlLmxvY2FsLDUpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvU2ltcGxlUGF0aFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvU2ltcGxlUGF0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhOTQ3OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvZmlsdGVyL1NpbXBsZVBhdGhUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5NdXRhYmxlUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2ltcGxlUGF0aFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9zaW1wbGVQYXRoKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3RpbWVzWDNYX3BhdGgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2ltcGxlUGF0aF9ieVhsYWJlbFhfZnJvbVhiWF90b1hjWF9wYXRoX2J5WG5hbWVYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3NpbXBsZVBhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfc2ltcGxlUGF0aChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJqb3NoIikgfHwgdmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJwZXRlciIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF90aW1lc1gzWF9wYXRoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3RpbWVzWDNYX3BhdGgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLm5leHQoKS5pc1NpbXBsZSgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMTgsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zaW1wbGVQYXRoX2J5WGxhYmVsWF9mcm9tWGJYX3RvWGNYX3BhdGhfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zaW1wbGVQYXRoX2J5WGxhYmVsWF9mcm9tWGJYX3RvWGNYX3BhdGhfYnlYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIE11dGFibGVQYXRoLm1ha2UoKS5leHRlbmQoIm1hcmtvIiwgQ29sbGVjdGlvbnMuc2luZ2xldG9uKCJhIikpLmV4dGVuZCgiam9zaCIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbigiYiIpKS5leHRlbmQoInJpcHBsZSIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbigiYyIpKSwKLSAgICAgICAgICAgICAgICBNdXRhYmxlUGF0aC5tYWtlKCkuZXh0ZW5kKCJtYXJrbyIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbigiYSIpKS5leHRlbmQoImpvc2giLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24oImIiKSkuZXh0ZW5kKCJsb3AiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24oImMiKSkpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFNpbXBsZVBhdGhUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3NpbXBsZVBhdGgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCJjcmVhdGVkIikuaW4oImNyZWF0ZWQiKS5zaW1wbGVQYXRoKCk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF90aW1lc1gzWF9wYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChib3RoKCkuc2ltcGxlUGF0aCgpKS50aW1lcygzKS5wYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zaW1wbGVQYXRoX2J5WGxhYmVsWF9mcm9tWGJYX3RvWGNYX3BhdGhfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuc2ltcGxlUGF0aCgpLmJ5KFQubGFiZWwpLmZyb20oImIiKS50bygiYyIpLnBhdGgoKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9UYWlsVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9UYWlsVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkxOGNiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvVGFpbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Qb3A7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlLmdsb2JhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZS5sb2NhbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmxpbWl0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy51bmZvbGQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi0vKioKLSAqIE9yaWdpbmFsIHNwZWM6IGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLTY3MAotICoKLSAqIEBhdXRob3IgTWF0dCBGcmFudHogKGh0dHA6Ly9naXRodWIuY29tL21oZnJhbnR6KQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUYWlsVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYZ2xvYmFsXzJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsWDJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsWDdYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1gzWF90YWlsWDdYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9yZXBlYXRYaW5fb3V0WF90aW1lc1gzWF90YWlsWDdYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbF8yWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxfMVhfdW5mb2xkKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbFhfdW5mb2xkKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WGxpbWl0WGxvY2FsXzBYWF90YWlsWGxvY2FsXzFYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3RhaWxYbG9jYWxfMlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX3RhaWxYbG9jYWxfNVgoZmluYWwgT2JqZWN0IHZpZDEpOwotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IEdsb2JhbCBzY29wZQotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFhnbG9iYWxfMlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFhnbG9iYWxfMlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KCJyaXBwbGUiLCAidmFkYXMiKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogRGVmYXVsdCBzY29wZSBpcyBnbG9iYWwKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYMlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFgyWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3QoInJpcHBsZSIsICJ2YWRhcyIpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNjZW5hcmlvOiBEZWZhdWx0IGlzIGdsb2JhbCwgTj0xCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWwoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KCJ2YWRhcyIpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNjZW5hcmlvOiBHbG9iYWwgc2NvcGUsIG5vdCBlbm91Z2ggZWxlbWVudHMKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYN1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFg3WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEFycmF5cy5hc0xpc3QoImpvc2giLCAibG9wIiwgIm1hcmtvIiwgInBldGVyIiwgInJpcHBsZSIsICJ2YWRhcyIpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNjZW5hcmlvOiBHbG9iYWwgc2NvcGUsIHVzaW5nIHJlcGVhdCAoQlVMSykKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3RhaWxYN1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYYm90aFhfdGltZXNYM1hfdGFpbFg3WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNywgY291bnRlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IEdsb2JhbCBzY29wZSwgdXNpbmcgcmVwZWF0IChleGNlc3MgQlVMSykKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WGluX291dFhfdGltZXNYM1hfdGFpbFg3WF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYaW5fb3V0WF90aW1lc1gzWF90YWlsWDdYX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCg3TCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IExvY2FsIHNjb3BlLCBMaXN0IGlucHV0LCBOJmd0OzEKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF90YWlsWGxvY2FsXzJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF90YWlsWGxvY2FsXzJYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8TGlzdDxTdHJpbmc+PiBleHBlY3RlZCA9Ci0gICAgICAgICAgICAgICAgbmV3IEhhc2hTZXQoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoImpvc2giLCAicmlwcGxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KCJqb3NoIiwgImxvcCIpKSk7Ci0gICAgICAgIGZpbmFsIFNldDxMaXN0PFN0cmluZz4+IGFjdHVhbCA9IG5ldyBIYXNoU2V0KHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogTG9jYWwgc2NvcGUsIExpc3QgaW5wdXQsIE49MQotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxfMVhfdW5mb2xkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF90YWlsWGxvY2FsXzFYX3VuZm9sZCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gZXhwZWN0ZWQgPSBuZXcgSGFzaFNldChBcnJheXMuYXNMaXN0KCJyaXBwbGUiLCAibG9wIikpOwotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBhY3R1YWwgPSBuZXcgSGFzaFNldCh0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IExvY2FsIHNjb3BlLCBMaXN0IGlucHV0LCBkZWZhdWx0IE49MQotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbFhfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBleHBlY3RlZCA9IG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoInJpcHBsZSIsICJsb3AiKSk7Ci0gICAgICAgIGZpbmFsIFNldDxTdHJpbmc+IGFjdHVhbCA9IG5ldyBIYXNoU2V0KHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogTG9jYWwgc2NvcGUsIExpc3QgaW5wdXQsIE49MSwgZW1wdHkgaW5wdXQKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYbGltaXRYbG9jYWxfMFhYX3RhaWxYbG9jYWxfMVhfdW5mb2xkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYbGltaXRYbG9jYWxfMFhYX3RhaWxYbG9jYWxfMVhfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBleHBlY3RlZCA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIGZpbmFsIFNldDxTdHJpbmc+IGFjdHVhbCA9IG5ldyBIYXNoU2V0KHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogTG9jYWwgc2NvcGUsIE1hcCBpbnB1dCwgTiZndDsxCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8TWFwPFN0cmluZywgU3RyaW5nPj4gZXhwZWN0ZWQgPSBuZXcgSGFzaFNldChtYWtlTWFwTGlzdCgyLAotICAgICAgICAgICAgICAgICJiIiwgImpvc2giLCAiYyIsICJyaXBwbGUiLAotICAgICAgICAgICAgICAgICJiIiwgImpvc2giLCAiYyIsICJsb3AiKSk7Ci0gICAgICAgIGZpbmFsIFNldDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBhY3R1YWwgPSBuZXcgSGFzaFNldCh0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2NlbmFyaW86IExvY2FsIHNjb3BlLCBNYXAgaW5wdXQsIE49MQotICAgICAqLwotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfdGFpbFhsb2NhbF8xWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfdGFpbFhsb2NhbF8xWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgU2V0PE1hcDxTdHJpbmcsIFN0cmluZz4+IGV4cGVjdGVkID0gbmV3IEhhc2hTZXQobWFrZU1hcExpc3QoMSwKLSAgICAgICAgICAgICAgICAiYyIsICJyaXBwbGUiLAotICAgICAgICAgICAgICAgICJjIiwgImxvcCIpKTsKLSAgICAgICAgZmluYWwgU2V0PE1hcDxTdHJpbmcsIFN0cmluZz4+IGFjdHVhbCA9IG5ldyBIYXNoU2V0KHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgYWN0dWFsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTY2VuYXJpbzogTG9jYWwgc2NvcGUsIHNpbmdsZSBpdGVtCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3ZhbHVlc1hhZ2VYX3RhaWxYbG9jYWxfNVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF90YWlsWGxvY2FsXzVYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI5KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBUYWlsVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYZ2xvYmFsXzJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKGdsb2JhbCwgMik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFgyWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48U3RyaW5nPnZhbHVlcygibmFtZSIpLm9yZGVyKCkudGFpbCgyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikub3JkZXIoKS50YWlsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFg3WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48U3RyaW5nPnZhbHVlcygibmFtZSIpLm9yZGVyKCkudGFpbCg3KTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1gzWF90YWlsWDdYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChib3RoKCkpLnRpbWVzKDMpLnRhaWwoNyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfcmVwZWF0WGluX291dFhfdGltZXNYM1hfdGFpbFg3WF9jb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQoaW4oKS5vdXQoKSkudGltZXMoMykudGFpbCg3KS5jb3VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF90YWlsWGxvY2FsXzJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLjxMaXN0PFN0cmluZz4+c2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieSh1bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnRhaWwobG9jYWwsIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWF90YWlsWGxvY2FsXzFYX3VuZm9sZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJhIikub3V0KCkuYXMoImEiKS48U3RyaW5nPnNlbGVjdChQb3AubWl4ZWQsICJhIikuYnkodW5mb2xkKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpKS50YWlsKGxvY2FsLCAxKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WG1peGVkX2FYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbFhfdW5mb2xkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLjxTdHJpbmc+c2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieSh1bmZvbGQoKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpLnRhaWwobG9jYWwpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYbGltaXRYbG9jYWxfMFhYX3RhaWxYbG9jYWxfMVhfdW5mb2xkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImEiKS5vdXQoKS5hcygiYSIpLjxTdHJpbmc+c2VsZWN0KFBvcC5taXhlZCwgImEiKS5ieShsaW1pdChsb2NhbCwgMCkpLnRhaWwobG9jYWwsIDEpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS5vdXQoKS5hcygiYyIpLjxTdHJpbmc+c2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIikudGFpbChsb2NhbCwgMik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3RhaWxYbG9jYWxfMVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLm91dCgpLmFzKCJjIikuPFN0cmluZz5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKS50YWlsKGxvY2FsLCAxKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX3RhaWxYbG9jYWxfNVgoZmluYWwgT2JqZWN0IHZpZDEpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS50YWlsKFNjb3BlLmxvY2FsLDUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9XaGVyZVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9maWx0ZXIvV2hlcmVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2M2VkNTIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL2ZpbHRlci9XaGVyZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLmVxOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAuZ3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5sdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLm5lcTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLm5vdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLndpdGhpbjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLndpdGhvdXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmFuZDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pbjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ubm90OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vcjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdoZXJlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIC8vLyB3aGVyZShsb2NhbCkKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2hhc1hhZ2VYX2FzWGFYX291dF9pbl9oYXNYYWdlWF9hc1hiWF9zZWxlY3RYYV9iWF93aGVyZVhhX2VxWGJYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfbmVxWGJYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGJfaGFzWG5hbWVfbWFya29YWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfb3V0WGtub3dzWF9iWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfd2hlcmVYYXNYYVhfbmFtZV9pc1hqb3NoWFhfaW5YY3JlYXRlZFhfbmFtZSgpOwotCi0gICAgLy8vIHdoZXJlKGdsb2JhbCkKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfam9zaF9wZXRlclhfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfbmFtZV93aGVyZVh3aXRoaW5YYVhYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFfbmVxWGJYWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWF92YWx1ZXNYYWdlX25hbWVYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIC8vIGV4Y2VwdC9yZXRhaW4gZnVuY3Rpb25hbGl0eQotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYZXFYYVhYX25hbWUoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X2FnZ3JlZ2F0ZVh4WF9vdXRfd2hlcmVYbm90WHdpdGhpblhhWFhYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfZ3JhcGhfdmVydGljZXNYMlhYX1ZYMVhfb3V0X3doZXJlWG5lcVhhWFgoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WWDFYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF93aGVyZVh3aXRob3V0WGVYWF9hZ2dyZWdhdGVYZVhfb3RoZXJWWF9lbWl0X3BhdGgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgLy8gaGFzTm90IGZ1bmN0aW9uYWxpdHkKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfd2hlcmVYbm90WG91dFhjcmVhdGVkWFhYX25hbWUoKTsKLQotICAgIC8vIGNvbXBsZXggYW5kL29yIGZ1bmN0aW9uYWxpdHkKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF93aGVyZVhhbmRYYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9fb3JYYXNYYlhfb3V0WGNyZWF0ZWRYX2hhc1huYW1lX3JpcHBsZVhfX2FzWGJYX2luWGtub3dzWF9jb3VudF9pc1hub3RYZXFYMFhYWFhYX3NlbGVjdFhhX2JYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFuZFhhc1hiWF9pbl9fbm90WGFzWGFYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWFhfc2VsZWN0WGFfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9ib3RoWGtub3dzWF9ib3RoWGtub3dzWF9hc1hkWF93aGVyZVhjX19ub3RYZXFYYVhfb3JYZXFYZFhYWFhfc2VsZWN0WGFfYl9jX2RYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYaW5fY291bnRfaXNYZXFYM1hYX29yX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfaGFzWGxhYmVsX3BlcnNvblhYWF9zZWxlY3RYYV9iWCgpOwotCi0gICAgLy8gbXVsdGktbGFiZWxzCi0KLSAgICAvL3B1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF93aGVyZVhhc1hhX19iWF9vdXRYY3JlYXRlZFhfaGFzWG5hbWVfX3JpcHBsZVhfbmFtZSgpOwotCi0gICAgLy8gd2hlcmUoKS1ieQotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFfZ3RYYlhYX2J5WGFnZVhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX3doZXJlWGFfZ3RYYlhfb3JYZXFYYlhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYd2VpZ2h0WF9zZWxlY3RYYV9jWF9ieVhuYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYXNYY1hfaW5YY3JlYXRlZFhfYXNYZFhfd2hlcmVYYV9sdFhiWF9vclhndFhjWFhfYW5kWG5lcVhkWFhYX2J5WGFnZVhfYnlYd2VpZ2h0WF9ieVhpblhjcmVhdGVkWF92YWx1ZXNYYWdlWF9taW5YX3NlbGVjdFhhX2NfZFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfYXNYYVhfb3V0X2hhc1hhZ2VYX3doZXJlWGd0WGFYWF9ieVhhZ2VYX25hbWUoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgzWF9hc1hhWF9pbl9vdXRfYXNYYlhfd2hlcmVYYV9lcVhiWFhfYnlYYWdlWF9uYW1lKGZpbmFsIE9iamVjdCB2M0lkKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYV9lcVhiWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfZXFYYlhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiYSIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJiIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG1hcC5nZXQoImEiKSwgbWFwLmdldCgiYiIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYV9uZXFYYlhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hhZ2VYX2FzWGFYX291dF9pbl9oYXNYYWdlWF9hc1hiWF9zZWxlY3RYYV9iWF93aGVyZVhhX25lcVhiWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJhIikpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoImIiKSk7Ci0gICAgICAgICAgICBhc3NlcnROb3RFcXVhbHMobWFwLmdldCgiYSIpLCBtYXAuZ2V0KCJiIikpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgoKFZlcnRleCkgbWFwLmdldCgiYSIpKS5pZCgpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKChWZXJ0ZXgpIG1hcC5nZXQoImEiKSkuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoInBldGVyIikpIHx8Ci0gICAgICAgICAgICAgICAgICAgICgoVmVydGV4KSBtYXAuZ2V0KCJhIikpLmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoKChWZXJ0ZXgpIG1hcC5nZXQoImIiKSkuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpIHx8Ci0gICAgICAgICAgICAgICAgICAgICgoVmVydGV4KSBtYXAuZ2V0KCJiIikpLmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJwZXRlciIpKSB8fAotICAgICAgICAgICAgICAgICAgICAoKFZlcnRleCkgbWFwLmdldCgiYiIpKS5pZCgpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGJfaGFzWG5hbWVfbWFya29YWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYl9oYXNYbmFtZV9tYXJrb1hYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGludCBtYXJrb0NvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoImEiKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiYiIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgKChWZXJ0ZXgpIG1hcC5nZXQoImIiKSkuaWQoKSk7Ci0gICAgICAgICAgICBpZiAoKChWZXJ0ZXgpIG1hcC5nZXQoImEiKSkuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpKQotICAgICAgICAgICAgICAgIG1hcmtvQ291bnRlcisrOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFzc2VydFRydWUoKChWZXJ0ZXgpIG1hcC5nZXQoImEiKSkuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkgfHwgKChWZXJ0ZXgpIG1hcC5nZXQoImEiKSkuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoInBldGVyIikpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgbWFya29Db3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfb3V0WGtub3dzWF9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYV9vdXRYa25vd3NYX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiYSIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJiIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLCAoKFZlcnRleCkgbWFwLmdldCgiYSIpKS5pZCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpLCAoKFZlcnRleCkgbWFwLmdldCgiYiIpKS5pZCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfd2hlcmVYYXNYYVhfbmFtZV9pc1hqb3NoWFhfaW5YY3JlYXRlZFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dFhjcmVhdGVkWF93aGVyZVhhc1hhWF9uYW1lX2lzWGpvc2hYWF9pblhjcmVhdGVkWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAiam9zaCIsICJwZXRlciIsICJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLy8vIHdoZXJlKGdsb2JhbCkKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNpZGVFZmZlY3RYYV9qb3NoX3BldGVyWF9WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9uYW1lX3doZXJlWHdpdGhpblhhWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYV9qb3NoX3BldGVyWF9WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9uYW1lX3doZXJlWHdpdGhpblhhWFgoY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiwgInBldGVyIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hiWF93aGVyZVhhX25lcVhiWFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hiWF93aGVyZVhhX25lcVhiWFhfbmFtZShjb252ZXJ0VG9WZXJ0ZXhJZChncmFwaCwgIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImpvc2giLCAicGV0ZXIiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWF92YWx1ZXNYYWdlX25hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWF92YWx1ZXNYYWdlX25hbWVYKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgiam9zaCIsIDMyKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICAvLy8gZXhjZXB0L3JldGFpbiBmdW5jdGlvbmFsaXR5Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWGVxWGFYWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWGVxWGFYWF9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF93aGVyZVhuZXFYYVhYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJwZXRlciIsICJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dF9hZ2dyZWdhdGVYeFhfb3V0X3doZXJlWG5vdFh3aXRoaW5YYVhYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dF9hZ2dyZWdhdGVYeFhfb3V0X3doZXJlWG5vdFh3aXRoaW5YYVhYWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInJpcHBsZSIsIHRyYXZlcnNhbC5uZXh0KCkuPFN0cmluZz52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2lkZUVmZmVjdFhhX2dfVlgyWFhfVlgxWF9vdXRfd2hlcmVYbmVxWGFYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2lkZUVmZmVjdFhhX2dyYXBoX3ZlcnRpY2VzWDJYWF9WWDFYX291dF93aGVyZVhuZXFYYVhYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsInZhZGFzIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8VmVydGV4PiB2ZXJ0aWNlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgdmVydGljZXMuYWRkKHZlcnRleCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygiam9zaCIpIHx8IHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygibG9wIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF93aGVyZVh3aXRob3V0WGVYWF9hZ2dyZWdhdGVYZVhfb3RoZXJWWF9lbWl0X3BhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3doZXJlWHdpdGhvdXRYZVhYX2FnZ3JlZ2F0ZVhlWF9vdGhlclZYX2VtaXRfcGF0aChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IHBhdGhzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgcGF0aHMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHBhdGhzLnN0cmVhbSgpLmZpbHRlcihwYXRoIC0+IHBhdGguc2l6ZSgpID09IDMpLmNvdW50KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcGF0aHMuc3RyZWFtKCkuZmlsdGVyKHBhdGggLT4gcGF0aC5zaXplKCkgPT0gNSkuY291bnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBwYXRocy5zdHJlYW0oKS5maWx0ZXIocGF0aCAtPiBwYXRoLnNpemUoKSA9PSA3KS5jb3VudCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgLy8gaGFzTm90IGZ1bmN0aW9uYWxpdHkKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl93aGVyZVhub3RYb3V0WGNyZWF0ZWRYWFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3doZXJlWG5vdFhvdXRYY3JlYXRlZFhYWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgidmFkYXMiLCAibG9wIiwgInJpcHBsZSIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIC8vIGNvbXBsZXggYW5kL29yIGZ1bmN0aW9uYWxpdHkKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYYW5kWGFzWGFYX291dFhrbm93c1hfYXNYYlhfX29yWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYX19hc1hiWF9pblhrbm93c1hfY291bnRfaXNYbm90WGVxWDBYWFhYWF9zZWxlY3RYYV9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYYW5kWGFzWGFYX291dFhrbm93c1hfYXNYYlhfX29yWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYX19hc1hiWF9pblhrbm93c1hfY291bnRfaXNYbm90WGVxWDBYWFhYWF9zZWxlY3RYYV9iWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgImEiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpLCAiYiIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSwKLSAgICAgICAgICAgICAgICAiYSIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIiksICJiIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAidmFkYXMiKSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgInZhZGFzIiwgImpvc2giKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFuZFhhc1hiWF9pbl9fbm90WGFzWGFYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWFhfc2VsZWN0WGFfYlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFuZFhhc1hiWF9pbl9fbm90WGFzWGFYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWFhfc2VsZWN0WGFfYlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhtYWtlTWFwTGlzdCgyLAotICAgICAgICAgICAgICAgICJhIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwgImIiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJsb3AiKSwKLSAgICAgICAgICAgICAgICAiYSIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInBldGVyIiksICJiIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfaW5YY3JlYXRlZFhfYXNYY1hfYm90aFhrbm93c1hfYm90aFhrbm93c1hfYXNYZFhfd2hlcmVYY19fbm90WGVxWGFYX29yWGVxWGRYWFhYX3NlbGVjdFhhX2JfY19kWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfaW5YY3JlYXRlZFhfYXNYY1hfYm90aFhrbm93c1hfYm90aFhrbm93c1hfYXNYZFhfd2hlcmVYY19fbm90WGVxWGFYX29yWGVxWGRYWFhYX3NlbGVjdFhhX2JfY19kWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDQsCi0gICAgICAgICAgICAgICAgImEiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpLCAiYiIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImxvcCIpLCAiYyIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSwgImQiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpLAotICAgICAgICAgICAgICAgICJhIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAicGV0ZXIiKSwgImIiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJsb3AiKSwgImMiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIiksICJkIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAidmFkYXMiKSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dF9hc1hiWF93aGVyZVhpbl9jb3VudF9pc1hlcVgzWFhfb3Jfd2hlcmVYb3V0WGNyZWF0ZWRYX2FuZF9oYXNYbGFiZWxfcGVyc29uWFhYX3NlbGVjdFhhX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF93aGVyZVhpbl9jb3VudF9pc1hlcVgzWFhfb3Jfd2hlcmVYb3V0WGNyZWF0ZWRYX2FuZF9oYXNYbGFiZWxfcGVyc29uWFhYX3NlbGVjdFhhX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMobWFrZU1hcExpc3QoMiwKLSAgICAgICAgICAgICAgICAiYSIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIiksICJiIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAiam9zaCIpLAotICAgICAgICAgICAgICAgICJhIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwgImIiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJsb3AiKSwKLSAgICAgICAgICAgICAgICAiYSIsIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInBldGVyIiksICJiIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIiksCi0gICAgICAgICAgICAgICAgImEiLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIiksICJiIiwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYV9ndFhiWFhfYnlYYWdlWF9zZWxlY3RYYV9iWF9ieVhuYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYV9ndFhiWFhfYnlYYWdlWF9zZWxlY3RYYV9iWF9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgImEiLCAicGV0ZXIiLCAiYiIsICJqb3NoIiwKLSAgICAgICAgICAgICAgICAiYSIsICJwZXRlciIsICJiIiwgIm1hcmtvIiwKLSAgICAgICAgICAgICAgICAiYSIsICJqb3NoIiwgImIiLCAibWFya28iKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYXNYY1hfd2hlcmVYYV9ndFhiWF9vclhlcVhiWFhYX2J5WGFnZVhfYnlYd2VpZ2h0WF9ieVh3ZWlnaHRYX3NlbGVjdFhhX2NYX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX3doZXJlWGFfZ3RYYlhfb3JYZXFYYlhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYd2VpZ2h0WF9zZWxlY3RYYV9jWF9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgImEiLCAicGV0ZXIiLCAiYyIsICJsb3AiLAotICAgICAgICAgICAgICAgICJhIiwgImpvc2giLCAiYyIsICJsb3AiLAotICAgICAgICAgICAgICAgICJhIiwgImpvc2giLCAiYyIsICJyaXBwbGUiLAotICAgICAgICAgICAgICAgICJhIiwgIm1hcmtvIiwgImMiLCAibG9wIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX2luWGNyZWF0ZWRYX2FzWGRYX3doZXJlWGFfbHRYYlhfb3JYZ3RYY1hYX2FuZFhuZXFYZFhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYaW5YY3JlYXRlZFhfdmFsdWVzWGFnZVhfbWluWF9zZWxlY3RYYV9jX2RYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX2luWGNyZWF0ZWRYX2FzWGRYX3doZXJlWGFfbHRYYlhfb3JYZ3RYY1hYX2FuZFhuZXFYZFhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYaW5YY3JlYXRlZFhfdmFsdWVzWGFnZVhfbWluWF9zZWxlY3RYYV9jX2RYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMobWFrZU1hcExpc3QoMywKLSAgICAgICAgICAgICAgICAiYSIsICJwZXRlciIsICJjIiwgImxvcCIsICJkIiwgImpvc2giLAotICAgICAgICAgICAgICAgICJhIiwgInBldGVyIiwgImMiLCAibG9wIiwgImQiLCAibWFya28iLAotICAgICAgICAgICAgICAgICJhIiwgImpvc2giLCAiYyIsICJsb3AiLCAiZCIsICJtYXJrbyIsCi0gICAgICAgICAgICAgICAgImEiLCAiam9zaCIsICJjIiwgImxvcCIsICJkIiwgInBldGVyIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dF9oYXNYYWdlWF93aGVyZVhndFhhWFhfYnlYYWdlWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfb3V0X2hhc1hhZ2VYX3doZXJlWGd0WGFYWF9ieVhhZ2VYX25hbWUoY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYM1hfYXNYYVhfaW5fb3V0X2FzWGJYX3doZXJlWGFfZXFYYlhYX2J5WGFnZVhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDNYX2FzWGFYX2luX291dF9hc1hiWF93aGVyZVhhX2VxWGJYWF9ieVhhZ2VYX25hbWUoY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJsb3AiKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBXaGVyZVRlc3QgewotCi0gICAgICAgIC8vLyB3aGVyZShsb2NhbCkKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfZXFYYlhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIikuYXMoImEiKS5vdXQoKS5pbigpLmhhcygiYWdlIikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLndoZXJlKCJhIiwgZXEoImIiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfbmVxWGJYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoImFnZSIpLmFzKCJhIikub3V0KCkuaW4oKS5oYXMoImFnZSIpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS53aGVyZSgiYSIsIG5lcSgiYiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9oYXNYYWdlWF9hc1hhWF9vdXRfaW5faGFzWGFnZVhfYXNYYlhfc2VsZWN0WGFfYlhfd2hlcmVYYl9oYXNYbmFtZV9tYXJrb1hYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIikuYXMoImEiKS5vdXQoKS5pbigpLmhhcygiYWdlIikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLndoZXJlKGFzKCJiIikuaGFzKCJuYW1lIiwgIm1hcmtvIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2hhc1hhZ2VYX2FzWGFYX291dF9pbl9oYXNYYWdlWF9hc1hiWF9zZWxlY3RYYV9iWF93aGVyZVhhX291dFhrbm93c1hfYlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS5hcygiYSIpLm91dCgpLmluKCkuaGFzKCJhZ2UiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikud2hlcmUoYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfd2hlcmVYYXNYYVhfbmFtZV9pc1hqb3NoWFhfaW5YY3JlYXRlZFhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLndoZXJlKGFzKCJhIikudmFsdWVzKCJuYW1lIikuaXMoImpvc2giKSkuaW4oImNyZWF0ZWQiKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyB3aGVyZShnbG9iYWwpCi0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfam9zaF9wZXRlclhfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfbmFtZV93aGVyZVh3aXRoaW5YYVhYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIEFycmF5cy5hc0xpc3QoImpvc2giLCAicGV0ZXIiKSkuVih2MUlkKS5vdXQoImNyZWF0ZWQiKS5pbigiY3JlYXRlZCIpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikud2hlcmUoUC53aXRoaW4oImEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYV9uZXFYYlhYX25hbWUoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbigiY3JlYXRlZCIpLmFzKCJiIikud2hlcmUoImEiLCBuZXEoImIiKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYXNYYlhfb3V0WGNyZWF0ZWRYX2hhc1huYW1lX3JpcHBsZVhYX3ZhbHVlc1hhZ2VfbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbigiY3JlYXRlZCIpLmFzKCJiIikud2hlcmUoYXMoImIiKS5vdXQoImNyZWF0ZWQiKS5oYXMoIm5hbWUiLCAicmlwcGxlIikpLnZhbHVlcygiYWdlIiwgIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGV4Y2VwdC9yZXRhaW4gZnVuY3Rpb25hbGl0eQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF93aGVyZVhlcVhhWFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmluKCJjcmVhdGVkIikud2hlcmUoZXEoImEiKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW4oImNyZWF0ZWQiKS53aGVyZShuZXEoImEiKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRfYWdncmVnYXRlWHhYX291dF93aGVyZVhub3RYd2l0aGluWGFYWFgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCkuYWdncmVnYXRlKCJ4Iikub3V0KCkud2hlcmUobm90KHdpdGhpbigieCIpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYV9ncmFwaF92ZXJ0aWNlc1gyWFhfVlgxWF9vdXRfd2hlcmVYbmVxWGFYWChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYyKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsIHYyKS5WKHYxSWQpLm91dCgpLndoZXJlKG5lcSgiYSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9yZXBlYXRYYm90aEVYY3JlYXRlZFhfd2hlcmVYd2l0aG91dFhlWFhfYWdncmVnYXRlWGVYX290aGVyVlhfZW1pdF9wYXRoKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLnJlcGVhdChib3RoRSgiY3JlYXRlZCIpLndoZXJlKHdpdGhvdXQoImUiKSkuYWdncmVnYXRlKCJlIikub3RoZXJWKCkpLmVtaXQoKS5wYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBoYXNOb3QgZnVuY3Rpb25hbGl0eQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3doZXJlWG5vdFhvdXRYY3JlYXRlZFhYWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLndoZXJlKG5vdChvdXQoImNyZWF0ZWQiKSkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY29tcGxleCBhbmQvb3IgZnVuY3Rpb25hbGl0eQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYYW5kWGFzWGFYX291dFhrbm93c1hfYXNYYlhfX29yWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYX19hc1hiWF9pblhrbm93c1hfY291bnRfaXNYbm90WGVxWDBYWFhYWF9zZWxlY3RYYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikud2hlcmUoYW5kKGFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIiksIG9yKGFzKCJiIikub3V0KCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgInJpcHBsZSIpLCBhcygiYiIpLmluKCJrbm93cyIpLmNvdW50KCkuaXMobm90KGVxKDApKSkpKSkuc2VsZWN0KCJhIiwgImIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS53aGVyZShvdXQoImNyZWF0ZWQiKS5hbmQoKS5vdXQoImtub3dzIikub3IoKS5pbigia25vd3MiKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFuZFhhc1hiWF9pbl9fbm90WGFzWGFYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWFhfc2VsZWN0WGFfYlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLndoZXJlKGFuZChhcygiYiIpLmluKCksIG5vdChhcygiYSIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJyaXBwbGUiKSkpKS5zZWxlY3QoImEiLCAiYiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9ib3RoWGtub3dzWF9ib3RoWGtub3dzWF9hc1hkWF93aGVyZVhjX19ub3RYZXFYYVhfb3JYZXFYZFhYWFhfc2VsZWN0WGFfYl9jX2RYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5pbigiY3JlYXRlZCIpLmFzKCJjIikuYm90aCgia25vd3MiKS5ib3RoKCJrbm93cyIpLmFzKCJkIikud2hlcmUoImMiLCBQLm5vdChQLmVxKCJhIikub3IoUC5lcSgiZCIpKSkpLnNlbGVjdCgiYSIsICJiIiwgImMiLCAiZCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF93aGVyZVhpbl9jb3VudF9pc1hlcVgzWFhfb3Jfd2hlcmVYb3V0WGNyZWF0ZWRYX2FuZF9oYXNYbGFiZWxfcGVyc29uWFhYX3NlbGVjdFhhX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCkuYXMoImIiKS53aGVyZShhcygiYiIpLmluKCkuY291bnQoKS5pcyhlcSgzKSkub3IoKS53aGVyZShhcygiYiIpLm91dCgiY3JlYXRlZCIpLmFuZCgpLmFzKCJiIikuaGFzKFQubGFiZWwsICJwZXJzb24iKSkpLnNlbGVjdCgiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB3aGVyZSgpLWJ5Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hiWF93aGVyZVhhX2d0WGJYWF9ieVhhZ2VYX3NlbGVjdFhhX2JYX2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuaW4oImNyZWF0ZWQiKS5hcygiYiIpLndoZXJlKCJhIiwgZ3QoImIiKSkuYnkoImFnZSIpLjxTdHJpbmc+c2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dEVYY3JlYXRlZFhfYXNYYlhfaW5WX2FzWGNYX3doZXJlWGFfZ3RYYlhfb3JYZXFYYlhYWF9ieVhhZ2VYX2J5WHdlaWdodFhfYnlYd2VpZ2h0WF9zZWxlY3RYYV9jWF9ieVhuYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dEUoImNyZWF0ZWQiKS5hcygiYiIpLmluVigpLmFzKCJjIikud2hlcmUoImEiLCBndCgiYiIpLm9yKGVxKCJiIikpKS5ieSgiYWdlIikuYnkoIndlaWdodCIpLmJ5KCJ3ZWlnaHQiKS48U3RyaW5nPnNlbGVjdCgiYSIsICJjIikuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hc1hjWF9pblhjcmVhdGVkWF9hc1hkWF93aGVyZVhhX2x0WGJYX29yWGd0WGNYWF9hbmRYbmVxWGRYWFhfYnlYYWdlWF9ieVh3ZWlnaHRYX2J5WGluWGNyZWF0ZWRYX3ZhbHVlc1hhZ2VYX21pblhfc2VsZWN0WGFfY19kWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dEUoImNyZWF0ZWQiKS5hcygiYiIpLmluVigpLmFzKCJjIikuaW4oImNyZWF0ZWQiKS5hcygiZCIpLndoZXJlKCJhIiwgbHQoImIiKS5vcihndCgiYyIpKS5hbmQobmVxKCJkIikpKS5ieSgiYWdlIikuYnkoIndlaWdodCIpLmJ5KGluKCJjcmVhdGVkIikudmFsdWVzKCJhZ2UiKS5taW4oKSkuPFN0cmluZz5zZWxlY3QoImEiLCAiYyIsICJkIikuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2FzWGFYX291dF9oYXNYYWdlWF93aGVyZVhndFhhWFhfYnlYYWdlWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmFzKCJhIikub3V0KCkuaGFzKCJhZ2UiKS53aGVyZShndCgiYSIpKS5ieSgiYWdlIikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgzWF9hc1hhWF9pbl9vdXRfYXNYYlhfd2hlcmVYYV9lcVhiWFhfYnlYYWdlWF9uYW1lKGZpbmFsIE9iamVjdCB2M0lkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYzSWQpLmFzKCJhIikuaW4oKS5vdXQoKS5hcygiYiIpLndoZXJlKCJhIiwgZXEoImIiKSkuYnkoImFnZSIpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQWRkRWRnZVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQWRkRWRnZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmZjVhNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0FkZEVkZ2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uRmVhdHVyZVJlcXVpcmVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyLmRlc2M7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGUubG9jYWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLlY7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pbkU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnNlbGVjdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uLmtleXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbi52YWx1ZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkRWRnZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9hZGRFWGNyZWF0ZWRCeVhfdG9YYVhfcHJvcGVydHlYd2VpZ2h0XzJYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX291dEVfcHJvcGVydHlYd2VpZ2h0X251bGxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYeFhfYXNYYVhfc2VsZWN0WHhYX3VuZm9sZF9hZGRFWGV4aXN0c1dpdGhYX3RvWGFYX3Byb3BlcnR5WHRpbWVfbm93WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWG5lcVhhWFhfYXNYYlhfYWRkRVhjb2RldmVsb3BlclhfZnJvbVhhWF90b1hiWF9wcm9wZXJ0eVh5ZWFyXzIwMDlYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9hc1hhWF9pblhjcmVhdGVkWF9hZGRFWGNyZWF0ZWRCeVhfZnJvbVhhWF9wcm9wZXJ0eVh5ZWFyXzIwMDlYX3Byb3BlcnR5WGFjbF9wdWJsaWNYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfYWRkVl9hc1hmaXJzdFhfcmVwZWF0WGFkZEVYbmV4dFhfdG9YYWRkVlhfaW5WWF90aW1lc1g1WF9hZGRFWG5leHRYX3RvWHNlbGVjdFhmaXJzdFhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYl9iWF9WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzVYKGZpbmFsIFZlcnRleCBhLCBmaW5hbCBWZXJ0ZXggYik7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlhhWF9hZGRFWGtub3dzWF90b1hiWF9wcm9wZXJ0eVh3ZWlnaHRfMF8xWChmaW5hbCBWZXJ0ZXggYSwgZmluYWwgVmVydGV4IGIpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19hZGRFWGtub3dzWF9mcm9tWGFYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzFYKGZpbmFsIFZlcnRleCBhLCBmaW5hbCBWZXJ0ZXggYik7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYWRkRVhzZWxlY3RYYlhfbGFiZWxYX3RvWGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX2FkZEVYVl9vdXRFX2xhYmVsX2dyb3VwQ291bnRfb3JkZXJYbG9jYWxYX2J5WHZhbHVlc19kZXNjWF9zZWxlY3RYa2V5c1hfdW5mb2xkX2xpbWl0WDFYWF9mcm9tWFZfaGFzWG5hbWVfdmFkYXNYWF90b1hWX2hhc1huYW1lX2xvcFhYKCk7Ci0KLSAgICAvLy8vLy8vCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5GRUFUVVJFX0FERF9FREdFUykKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjcmVhdGVkQnkiLCBlZGdlLmxhYmVsKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIEl0ZXJhdG9yVXRpbHMuY291bnQoZWRnZS5wcm9wZXJ0aWVzKCkpKTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY291bnQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfQUREX0VER0VTKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYX3Byb3BlcnR5WHdlaWdodF8yWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYX3Byb3BlcnR5WHdlaWdodF8yWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiY3JlYXRlZEJ5IiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLjBkLCBnLkUoZWRnZSkuPERvdWJsZT52YWx1ZXMoIndlaWdodCIpLm5leHQoKSwgMC4wMDAwMWQpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuRShlZGdlKS5wcm9wZXJ0aWVzKCkuY291bnQoKS5uZXh0KCkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBjb3VudCsrOwotCi0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY291bnQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX05VTExfUFJPUEVSVFlfVkFMVUVTLCBzdXBwb3J0ZWQgPSBmYWxzZSkKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0RV9wcm9wZXJ0eVh3ZWlnaHRfbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0RV9wcm9wZXJ0eVh3ZWlnaHRfbnVsbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5mb3JFYWNoUmVtYWluaW5nKGUgLT4gYXNzZXJ0VGhhdChlLnByb3BlcnRpZXMoIndlaWdodCIpLmhhc05leHQoKSwgaXMoZmFsc2UpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVh4WF9hc1hhWF9zZWxlY3RYeFhfdW5mb2xkX2FkZEVYZXhpc3RzV2l0aFhfdG9YYVhfcHJvcGVydHlYdGltZV9ub3dYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZ3JlZ2F0ZVh4WF9hc1hhWF9zZWxlY3RYeFhfdW5mb2xkX2FkZEVYZXhpc3RzV2l0aFhfdG9YYVhfcHJvcGVydHlYdGltZV9ub3dYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZXhpc3RzV2l0aCIsIGVkZ2UubGFiZWwoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5vdyIsIGcuRShlZGdlKS52YWx1ZXMoInRpbWUiKS5uZXh0KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuRShlZGdlKS5wcm9wZXJ0aWVzKCkuY291bnQoKS5uZXh0KCkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzNiwgY291bnQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNDIsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5FKCkpKTsKLSAgICAgICAgZm9yIChmaW5hbCBWZXJ0ZXggdmVydGV4IDogSXRlcmF0b3JVdGlscy5saXN0KGcuVigpKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGcuVih2ZXJ0ZXgpLm91dCgiZXhpc3RzV2l0aCIpLmNvdW50KCkubmV4dCgpLmludFZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGcuVih2ZXJ0ZXgpLmluKCJleGlzdHNXaXRoIikuY291bnQoKS5uZXh0KCkuaW50VmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5GRUFUVVJFX0FERF9FREdFUykKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX3doZXJlWG5lcVhhWFhfYXNYYlhfYWRkRVhjb2RldmVsb3BlclhfZnJvbVhhWF90b1hiWF9wcm9wZXJ0eVh5ZWFyXzIwMDlYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF93aGVyZVhuZXFYYVhYX2FzWGJYX2FkZEVYY29kZXZlbG9wZXJYX2Zyb21YYVhfdG9YYlhfcHJvcGVydHlYeWVhcl8yMDA5WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNvZGV2ZWxvcGVyIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDA5LCBnLkUoZWRnZSkudmFsdWVzKCJ5ZWFyIikubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnLkUoZWRnZSkucHJvcGVydGllcygpLmNvdW50KCkubmV4dCgpLmludFZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCBnLkUoZWRnZSkuaW5WKCkubGFiZWwoKS5uZXh0KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCBnLkUoZWRnZSkub3V0VigpLmxhYmVsKCkubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKGcuRShlZGdlKS5pblYoKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkuZXF1YWxzKCJ2YWRhcyIpKTsKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKGcuRShlZGdlKS5vdXRWKCkudmFsdWVzKCJuYW1lIikubmV4dCgpLmVxdWFscygidmFkYXMiKSk7Ci0gICAgICAgICAgICBhc3NlcnRGYWxzZShnLkUoZWRnZSkuaW5WKCkubmV4dCgpLmVxdWFscyhnLkUoZWRnZSkub3V0VigpLm5leHQoKSkpOwotICAgICAgICAgICAgY291bnQrKzsKLQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMiwgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfQUREX0VER0VTKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNpZGVFZmZlY3RYYl9iWF9WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzVYKCkgewotICAgICAgICBmaW5hbCBWZXJ0ZXggYSA9IGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm5leHQoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IGIgPSBnLlYoKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5uZXh0KCk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYl9iWF9WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzVYKGEsIGIpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVkZ2Uub3V0VmVydGV4KCksIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWRnZS5pblZlcnRleCgpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJwZXRlciIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJrbm93cyIsIGVkZ2UubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLkUoZWRnZSkucHJvcGVydGllcygpLmNvdW50KCkubmV4dCgpLmludFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC41ZCwgZy5FKGVkZ2UpLjxEb3VibGU+dmFsdWVzKCJ3ZWlnaHQiKS5uZXh0KCksIDAuMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDdMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX2luWGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF9mcm9tWGFYX3Byb3BlcnR5WHllYXJfMjAwOVhfcHJvcGVydHlYYWNsX3B1YmxpY1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfaW5YY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX2Zyb21YYVhfcHJvcGVydHlYeWVhcl8yMDA5WF9wcm9wZXJ0eVhhY2xfcHVibGljWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNyZWF0ZWRCeSIsIGVkZ2UubGFiZWwoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwOSwgZy5FKGVkZ2UpLnZhbHVlcygieWVhciIpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInB1YmxpYyIsIGcuRShlZGdlKS52YWx1ZXMoImFjbCIpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5FKGVkZ2UpLnByb3BlcnRpZXMoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgZy5FKGVkZ2UpLmluVigpLmxhYmVsKCkubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCBnLkUoZWRnZSkub3V0VigpLmxhYmVsKCkubmV4dCgpKTsKLSAgICAgICAgICAgIGlmIChnLkUoZWRnZSkub3V0VigpLnZhbHVlcygibmFtZSIpLm5leHQoKS5lcXVhbHMoInJpcHBsZSIpKQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIGcuRShlZGdlKS5pblYoKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkpOwotICAgICAgICAgICAgY291bnQrKzsKLQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBjb3VudCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMCwgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIHB1YmxpYyB2b2lkIGdfYWRkVl9hc1hmaXJzdFhfcmVwZWF0WGFkZEVYbmV4dFhfdG9YYWRkVlhfaW5WWF90aW1lc1g1WF9hZGRFWG5leHRYX3RvWHNlbGVjdFhmaXJzdFhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19hZGRWX2FzWGZpcnN0WF9yZXBlYXRYYWRkRVhuZXh0WF90b1hhZGRWWF9pblZYX3RpbWVzWDVYX2FkZEVYbmV4dFhfdG9Yc2VsZWN0WGZpcnN0WFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibmV4dCIsIHRyYXZlcnNhbC5uZXh0KCkubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KDJMLCAyTCwgMkwsIDJMLCAyTCwgMkwpLCBnLlYoKS5tYXAoYm90aEUoKS5jb3VudCgpKS50b0xpc3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KDFMLCAxTCwgMUwsIDFMLCAxTCwgMUwpLCBnLlYoKS5tYXAoaW5FKCkuY291bnQoKSkudG9MaXN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQXJyYXlzLmFzTGlzdCgxTCwgMUwsIDFMLCAxTCwgMUwsIDFMKSwgZy5WKCkubWFwKG91dEUoKS5jb3VudCgpKS50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgZ19WWGFYX2FkZEVYa25vd3NYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzFYKCkgewotICAgICAgICBmaW5hbCBWZXJ0ZXggYSA9IGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm5leHQoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IGIgPSBnLlYoKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5uZXh0KCk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlhhWF9hZGRFWGtub3dzWF90b1hiWF9wcm9wZXJ0eVh3ZWlnaHRfMF8xWChhLCBiKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlZGdlLm91dFZlcnRleCgpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVkZ2UuaW5WZXJ0ZXgoKSwgY29udmVydFRvVmVydGV4KGdyYXBoLCAicGV0ZXIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygia25vd3MiLCBlZGdlLmxhYmVsKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgSXRlcmF0b3JVdGlscy5jb3VudChlZGdlLnByb3BlcnRpZXMoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC4xZCwgZWRnZS52YWx1ZSgid2VpZ2h0IiksIDAuMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDdMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgZ19hZGRFWGtub3dzWF9mcm9tWGFYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzFYKCkgewotICAgICAgICBmaW5hbCBWZXJ0ZXggYSA9IGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm5leHQoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IGIgPSBnLlYoKS5oYXMoIm5hbWUiLCAicGV0ZXIiKS5uZXh0KCk7Ci0KLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX2FkZEVYa25vd3NYX2Zyb21YYVhfdG9YYlhfcHJvcGVydHlYd2VpZ2h0XzBfMVgoYSwgYik7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWRnZS5vdXRWZXJ0ZXgoKSwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlZGdlLmluVmVydGV4KCksIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInBldGVyIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoZWRnZS5wcm9wZXJ0aWVzKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAuMWQsIGVkZ2UudmFsdWUoIndlaWdodCIpLCAwLjFkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg3TCwgZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfQUREX0VER0VTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbmFtZV9tYXJrb1hfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYWRkRVhzZWxlY3RYYlhfbGFiZWxYX3RvWGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hZGRFWHNlbGVjdFhiWF9sYWJlbFhfdG9YYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImNyZWF0ZWQiLCBlZGdlLmxhYmVsKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGVkZ2UuaW5WZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSwgZWRnZS5vdXRWZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg3TCwgZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfQUREX0VER0VTKQotICAgIHB1YmxpYyB2b2lkIGdfYWRkRVhWX291dEVfbGFiZWxfZ3JvdXBDb3VudF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzX2Rlc2NYX3NlbGVjdFhrZXlzWF91bmZvbGRfbGltaXRYMVhYX2Zyb21YVl9oYXNYbmFtZV92YWRhc1hYX3RvWFZfaGFzWG5hbWVfbG9wWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19hZGRFWFZfb3V0RV9sYWJlbF9ncm91cENvdW50X29yZGVyWGxvY2FsWF9ieVh2YWx1ZXNfZGVzY1hfc2VsZWN0WGtleXNYX3VuZm9sZF9saW1pdFgxWFhfZnJvbVhWX2hhc1huYW1lX3ZhZGFzWFhfdG9YVl9oYXNYbmFtZV9sb3BYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiY3JlYXRlZCIsIGVkZ2UubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgidmFkYXMiKSwgZWRnZS5vdXRWZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSwgZWRnZS5pblZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDdMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgQWRkRWRnZVRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYWRkRSgiY3JlYXRlZEJ5IikudG8oImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX3RvWGFYX3Byb3BlcnR5WHdlaWdodF8yWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5hcygiYSIpLm91dCgiY3JlYXRlZCIpLmFkZEUoImNyZWF0ZWRCeSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDIuMGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX291dEVfcHJvcGVydHlYd2VpZ2h0X251bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dEUoKS5wcm9wZXJ0eSgid2VpZ2h0IiwgbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfYWdncmVnYXRlWHhYX2FzWGFYX3NlbGVjdFh4WF91bmZvbGRfYWRkRVhleGlzdHNXaXRoWF90b1hhWF9wcm9wZXJ0eVh0aW1lX25vd1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJ4IikuYXMoImEiKS5zZWxlY3QoIngiKS51bmZvbGQoKS5hZGRFKCJleGlzdHNXaXRoIikudG8oImEiKS5wcm9wZXJ0eSgidGltZSIsICJub3ciKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9hc1hiWF9hZGRFWGNvZGV2ZWxvcGVyWF9mcm9tWGFYX3RvWGJYX3Byb3BlcnR5WHllYXJfMjAwOVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5pbigiY3JlYXRlZCIpLndoZXJlKFAubmVxKCJhIikpLmFzKCJiIikuYWRkRSgiY29kZXZlbG9wZXIiKS5mcm9tKCJhIikudG8oImIiKS5wcm9wZXJ0eSgieWVhciIsIDIwMDkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX2FzWGFYX2luWGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF9mcm9tWGFYX3Byb3BlcnR5WHllYXJfMjAwOVhfcHJvcGVydHlYYWNsX3B1YmxpY1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5pbigiY3JlYXRlZCIpLmFkZEUoImNyZWF0ZWRCeSIpLmZyb20oImEiKS5wcm9wZXJ0eSgieWVhciIsIDIwMDkpLnByb3BlcnR5KCJhY2wiLCAicHVibGljIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGJfYlhfVlhhWF9hZGRFWGtub3dzWF90b1hiWF9wcm9wZXJ0eVh3ZWlnaHRfMF81WChmaW5hbCBWZXJ0ZXggYSwgZmluYWwgVmVydGV4IGIpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJiIiwgYikuVihhKS5hZGRFKCJrbm93cyIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDAuNWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19hZGRWX2FzWGZpcnN0WF9yZXBlYXRYYWRkRVhuZXh0WF90b1hhZGRWWF9pblZYX3RpbWVzWDVYX2FkZEVYbmV4dFhfdG9Yc2VsZWN0WGZpcnN0WFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5hZGRWKCkuYXMoImZpcnN0IikucmVwZWF0KF9fLmFkZEUoIm5leHQiKS50byhfXy5hZGRWKCkpLmluVigpKS50aW1lcyg1KS5hZGRFKCJuZXh0IikudG8oc2VsZWN0KCJmaXJzdCIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlhhWF9hZGRFWGtub3dzWF90b1hiWF9wcm9wZXJ0eVh3ZWlnaHRfMF8xWChmaW5hbCBWZXJ0ZXggYSwgZmluYWwgVmVydGV4IGIpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoYSkuYWRkRSgia25vd3MiKS50byhiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4xZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19hZGRFWGtub3dzWF9mcm9tWGFYX3RvWGJYX3Byb3BlcnR5WHdlaWdodF8wXzFYKGZpbmFsIFZlcnRleCBhLCBmaW5hbCBWZXJ0ZXggYikgewotICAgICAgICAgICAgcmV0dXJuIGcuYWRkRSgia25vd3MiKS5mcm9tKGEpLnRvKGIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjFkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYWRkRVhzZWxlY3RYYlhfbGFiZWxYX3RvWGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJhIikub3V0RSgiY3JlYXRlZCIpLmFzKCJiIikuaW5WKCkuYWRkRShzZWxlY3QoImIiKS5sYWJlbCgpKS50bygiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfYWRkRVhWX291dEVfbGFiZWxfZ3JvdXBDb3VudF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzX2Rlc2NYX3NlbGVjdFhrZXlzWF91bmZvbGRfbGltaXRYMVhYX2Zyb21YVl9oYXNYbmFtZV92YWRhc1hYX3RvWFZfaGFzWG5hbWVfbG9wWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5hZGRFKFYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIobG9jYWwpLmJ5KHZhbHVlcywgZGVzYykuc2VsZWN0KGtleXMpLjxTdHJpbmc+dW5mb2xkKCkubGltaXQoMSkpLmZyb20oVigpLmhhcygibmFtZSIsICJ2YWRhcyIpKS50byhWKCkuaGFzKCJuYW1lIiwgImxvcCIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQWRkVmVydGV4VGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9BZGRWZXJ0ZXhUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxOTc3ODguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9BZGRWZXJ0ZXhUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uQWJzdHJhY3RHcmVtbGluVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLldpdGhPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5WOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5zZWxlY3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3N1bWUuYXNzdW1lVGhhdDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWRkVmVydGV4VGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblRlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlX3NlbGVjdFhhWF9ieVhhZ2VYWF9wcm9wZXJ0eVhuYW1lX3B1cHB5WChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhhZ2VfMFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX3N0ZXBoZW5YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvcGVydHlYbmFtZV9udWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfYWRkVl9wcm9wZXJ0eVhsYWJlbF9wZXJzb25YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1fc2luY2VfMjAxMFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnR5WGZyaWVuZFdlaWdodF9vdXRFWGtub3dzWF93ZWlnaHRfc3VtX19hY2xfcHJpdmF0ZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhuYW1lX21hdGVvWF9wcm9wZXJ0eVhuYW1lX2dhdGVvWF9wcm9wZXJ0eVhuYW1lX2NhdGVvWF9wcm9wZXJ0eVhhZ2VfNVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfdmFsdWVzWG5hbWVYWF9wcm9wZXJ0eVhuYW1lX2FuX2FuaW1hbFhfcHJvcGVydHlYdmFsdWVzWG5hbWVYX2xhYmVsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8U3RyaW5nPj4+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfdGVzdFhfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfcHJvcGVydHlYdGVtcF9zZWxlY3RYYVhYX3ZhbHVlTWFwWG5hbWVfdGVtcFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfbWFya29YX2FkZFZfcHJvcGVydHlYbmFtZV9zZWxlY3RYYVhYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX2FkZFZYVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydGllc1huYW1lWF9rZXlYX2xhYmVsKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ193aXRoU2lkZUVmZmVjdFhhX25hbWVYX2FkZFZfcHJvcGVydHlYc2VsZWN0WGFYX21hcmtvWF9uYW1lKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2FzWGJYX2FkZFZYc2VsZWN0WGFYX2xhYmVsWF9wcm9wZXJ0eVh0ZXN0X3NlbGVjdFhiWF9sYWJlbFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlX3NlbGVjdFhhWF9ieVhhZ2VYWF9wcm9wZXJ0eVhuYW1lX3B1cHB5WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhhZ2Vfc2VsZWN0WGFYX2J5WGFnZVhYX3Byb3BlcnR5WG5hbWVfcHVwcHlYKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJhbmltYWwiLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyOSwgdmVydGV4LjxJbnRlZ2VyPnZhbHVlKCJhZ2UiKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwdXBweSIsIHZlcnRleC48U3RyaW5nPnZhbHVlKCJuYW1lIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlXzBYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWRkVlhhbmltYWxYX3Byb3BlcnR5WGFnZV8wWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhbmltYWwiLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgdmVydGV4LjxJbnRlZ2VyPnZhbHVlKCJhZ2UiKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyLCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ19hZGRWX3Byb3BlcnR5WGxhYmVsX3BlcnNvblgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfYWRkVl9wcm9wZXJ0eVhsYWJlbF9wZXJzb25YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotCi0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZlcnRleC5sYWJlbCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfc3RlcGhlblgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfc3RlcGhlblgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCBzdGVwaGVuID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgc3RlcGhlbi5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgc3RlcGhlbi52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoc3RlcGhlbi5wcm9wZXJ0aWVzKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9OVUxMX1BST1BFUlRZX1ZBTFVFUywgc3VwcG9ydGVkID0gZmFsc2UpCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvcGVydHlYbmFtZV9udWxsWCgpIHsKLSAgICAgICAgLy8gd2hlbiBjYXJkaW5hbGl0eSBpcyBzaW5nbGUgdGhlbiB0aGUgdmVydGV4IHByb3BlcnR5IGlzIHJlbW92ZWQsIG90aGVyd2lzZSBpdCBpcyBpZ25vcmVkIGFzIHRoZSBncmFwaAotICAgICAgICAvLyBjYW4ndCBzdG9yZSBpdCBhbmQgaXQgd291bGRuJ3QgYmUgY2xlYXIgd2hpY2ggcHJvcGVydHkgaW4gdGhlIGxpc3Qvc2V0IHRvIHJlbW92ZQotICAgICAgICBmaW5hbCBib29sZWFuIHByZXNlbnQgPSBncmFwaC5mZWF0dXJlcygpLnZlcnRleCgpLmdldENhcmRpbmFsaXR5KCJuYW1lIikgPT0gVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuc2luZ2xlOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX3Byb3BlcnR5WG5hbWVfbnVsbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5mb3JFYWNoUmVtYWluaW5nKHYgLT4gYXNzZXJ0VGhhdCh2LnByb3BlcnRpZXMoIm5hbWUiKS5oYXNOZXh0KCksIGlzKCFwcmVzZW50KSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1YKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCBzdGVwaGVuID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgc3RlcGhlbi5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVubSIsIHN0ZXBoZW4udmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBJdGVyYXRvclV0aWxzLmNvdW50KHN0ZXBoZW4ucHJvcGVydGllcygpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg3LCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9NVUxUSV9QUk9QRVJUSUVTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1fc2luY2VfMjAxMFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCBzdGVwaGVuID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgc3RlcGhlbi5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVubSIsIHN0ZXBoZW4udmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMDEwLCBJbnRlZ2VyLnBhcnNlSW50KHN0ZXBoZW4ucHJvcGVydHkoIm5hbWUiKS52YWx1ZSgic2luY2UiKS50b1N0cmluZygpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBJdGVyYXRvclV0aWxzLmNvdW50KHN0ZXBoZW4ucHJvcGVydHkoIm5hbWUiKS5wcm9wZXJ0aWVzKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoc3RlcGhlbi5wcm9wZXJ0aWVzKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnR5WGZyaWVuZFdlaWdodF9vdXRFWGtub3dzWF93ZWlnaHRfc3VtX19hY2xfcHJpdmF0ZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfcHJvcGVydHlYZnJpZW5kV2VpZ2h0X291dEVYa25vd3NYX3dlaWdodF9zdW1fX2FjbF9wcml2YXRlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgVmVydGV4IG1hcmtvID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgbWFya28ubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBtYXJrby52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuNSwgbWFya28udmFsdWUoImZyaWVuZFdlaWdodCIpLCAwLjAxKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwcml2YXRlIiwgbWFya28ucHJvcGVydHkoImZyaWVuZFdlaWdodCIpLnZhbHVlKCJhY2wiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBJdGVyYXRvclV0aWxzLmNvdW50KG1hcmtvLnByb3BlcnRpZXMoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgSXRlcmF0b3JVdGlscy5jb3VudChtYXJrby5wcm9wZXJ0eSgiZnJpZW5kV2VpZ2h0IikucHJvcGVydGllcygpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9NVUxUSV9QUk9QRVJUSUVTKQotICAgIHB1YmxpYyB2b2lkIGdfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfbWF0ZW9YX3Byb3BlcnR5WG5hbWVfZ2F0ZW9YX3Byb3BlcnR5WG5hbWVfY2F0ZW9YX3Byb3BlcnR5WGFnZV81WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV9tYXRlb1hfcHJvcGVydHlYbmFtZV9nYXRlb1hfcHJvcGVydHlYbmFtZV9jYXRlb1hfcHJvcGVydHlYYWdlXzVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggbWF0ZW8gPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJhbmltYWwiLCBtYXRlby5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIEl0ZXJhdG9yVXRpbHMuY291bnQobWF0ZW8ucHJvcGVydGllcygibmFtZSIpKSk7Ci0gICAgICAgIG1hdGVvLnZhbHVlcygibmFtZSIpLmZvckVhY2hSZW1haW5pbmcobmFtZSAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG5hbWUuZXF1YWxzKCJtYXRlbyIpIHx8IG5hbWUuZXF1YWxzKCJjYXRlbyIpIHx8IG5hbWUuZXF1YWxzKCJnYXRlbyIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCAoKEludGVnZXIpIG1hdGVvLnZhbHVlKCJhZ2UiKSkuaW50VmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9NVUxUSV9QUk9QRVJUSUVTKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV92YWx1ZXNYbmFtZVhYX3Byb3BlcnR5WG5hbWVfYW5fYW5pbWFsWF9wcm9wZXJ0eVh2YWx1ZXNYbmFtZVhfbGFiZWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfdmFsdWVzWG5hbWVYWF9wcm9wZXJ0eVhuYW1lX2FuX2FuaW1hbFhfcHJvcGVydHlYdmFsdWVzWG5hbWVYX2xhYmVsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhbmltYWwiLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgSXRlcmF0b3JVdGlscy5jb3VudCh2ZXJ0ZXgucHJvcGVydGllcygibmFtZSIpKSk7Ci0gICAgICAgICAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBJdGVyYXRvclV0aWxzLmFzTGlzdCh2ZXJ0ZXgudmFsdWVzKCJuYW1lIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG5hbWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJhbiBhbmltYWwiKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJtYXJrbyIpIHx8IG5hbWVzLmNvbnRhaW5zKCJ2YWRhcyIpIHx8IG5hbWVzLmNvbnRhaW5zKCJqb3NoIikgfHwgbmFtZXMuY29udGFpbnMoImxvcCIpIHx8IG5hbWVzLmNvbnRhaW5zKCJyaXBwbGUiKSB8fCBuYW1lcy5jb250YWlucygicGV0ZXIiKSk7Ci0gICAgICAgICAgICBpZiAobmFtZXMuY29udGFpbnMoIm1hcmtvIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZlcnRleC52YWx1ZSgibWFya28iKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzLmNvbnRhaW5zKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgudmFsdWUoInZhZGFzIikpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lcy5jb250YWlucygiam9zaCIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgudmFsdWUoImpvc2giKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzLmNvbnRhaW5zKCJyaXBwbGUiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCB2ZXJ0ZXgudmFsdWUoInJpcHBsZSIpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZXMuY29udGFpbnMoImxvcCIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2Z0d2FyZSIsIHZlcnRleC52YWx1ZSgibG9wIikpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lcy5jb250YWlucygicGV0ZXIiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmVydGV4LnZhbHVlKCJwZXRlciIpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhpcyBzdGF0ZSBzaG91bGQgbm90IGhhdmUgYmVlbiByZWFjaGVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8vLwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNpZGVFZmZlY3RYYV90ZXN0WF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9wcm9wZXJ0eVh0ZW1wX3NlbGVjdFhhWFhfdmFsdWVNYXBYbmFtZV90ZW1wWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTGlzdDxTdHJpbmc+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYV90ZXN0WF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9wcm9wZXJ0eVh0ZW1wX3NlbGVjdFhhWFhfdmFsdWVNYXBYbmFtZV90ZW1wWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTGlzdDxTdHJpbmc+PiB2YWx1ZU1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVNYXAuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ0ZXN0IiksIHZhbHVlTWFwLmdldCgidGVtcCIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmFsdWVNYXAuZ2V0KCJuYW1lIikuZXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInJpcHBsZSIpKSB8fCB2YWx1ZU1hcC5nZXQoIm5hbWUiKS5lcXVhbHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgibG9wIikpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2lkZUVmZmVjdFhhX21hcmtvWF9hZGRWX3Byb3BlcnR5WG5hbWVfc2VsZWN0WGFYWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfbWFya29YX2FkZFZfcHJvcGVydHlYbmFtZV9zZWxlY3RYYVhYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTaWRlRWZmZWN0WGFfbmFtZVhfYWRkVl9wcm9wZXJ0eVhzZWxlY3RYYVhfbWFya29YX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYV9uYW1lWF9hZGRWX3Byb3BlcnR5WHNlbGVjdFhhWF9tYXJrb1hfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgcHVibGljIHZvaWQgZ19hZGRWWFZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnRpZXNYbmFtZVhfa2V5WF9sYWJlbCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19hZGRWWFZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnRpZXNYbmFtZVhfa2V5WF9sYWJlbCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9vdXRYY3JlYXRlZFhfYXNYYlhfYWRkVlhzZWxlY3RYYVhfbGFiZWxYX3Byb3BlcnR5WHRlc3Rfc2VsZWN0WGJYX2xhYmVsWF92YWx1ZU1hcF93aXRoWHRva2Vuc1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2FzWGJYX2FkZFZYc2VsZWN0WGFYX2xhYmVsWF9wcm9wZXJ0eVh0ZXN0X3NlbGVjdFhiWF9sYWJlbFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LE9iamVjdD4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIixtYXAuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2Z0d2FyZSIsKChMaXN0KW1hcC5nZXQoInRlc3QiKSkuZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsICgoTGlzdCltYXAuZ2V0KCJ0ZXN0IikpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBtYXAuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBBZGRWZXJ0ZXhUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlX3NlbGVjdFhhWF9ieVhhZ2VYWF9wcm9wZXJ0eVhuYW1lX3B1cHB5WChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5hcygiYSIpLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJhZ2UiLCBzZWxlY3QoImEiKS5ieSgiYWdlIikpLnByb3BlcnR5KCJuYW1lIiwgInB1cHB5Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlXzBYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJhZ2UiLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9zdGVwaGVuWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInN0ZXBoZW4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvcGVydHlYbmFtZV9udWxsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuc2luZ2xlLCAibmFtZSIsICJzdGVwaGVuIikucHJvcGVydHkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuc2luZ2xlLCAibmFtZSIsICJzdGVwaGVubSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubV9zaW5jZV8yMDEwWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbiIpLnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSwgIm5hbWUiLCAic3RlcGhlbm0iLCAic2luY2UiLCAyMDEwKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9wcm9wZXJ0eVhmcmllbmRXZWlnaHRfb3V0RVhrbm93c1hfd2VpZ2h0X3N1bV9fYWNsX3ByaXZhdGVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnByb3BlcnR5KCJmcmllbmRXZWlnaHQiLCBfXy5vdXRFKCJrbm93cyIpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCksICJhY2wiLCAicHJpdmF0ZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhuYW1lX21hdGVvWF9wcm9wZXJ0eVhuYW1lX2dhdGVvWF9wcm9wZXJ0eVhuYW1lX2NhdGVvWF9wcm9wZXJ0eVhhZ2VfNVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5hZGRWKCJhbmltYWwiKS5wcm9wZXJ0eSgibmFtZSIsICJtYXRlbyIpLnByb3BlcnR5KCJuYW1lIiwgImdhdGVvIikucHJvcGVydHkoIm5hbWUiLCAiY2F0ZW8iKS5wcm9wZXJ0eSgiYWdlIiwgNSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV92YWx1ZXNYbmFtZVhYX3Byb3BlcnR5WG5hbWVfYW5fYW5pbWFsWF9wcm9wZXJ0eVh2YWx1ZXNYbmFtZVhfbGFiZWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFkZFYoImFuaW1hbCIpLnByb3BlcnR5KCJuYW1lIiwgX18udmFsdWVzKCJuYW1lIikpLnByb3BlcnR5KCJuYW1lIiwgImFuIGFuaW1hbCIpLnByb3BlcnR5KF9fLnZhbHVlcygibmFtZSIpLCBfXy5sYWJlbCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTGlzdDxTdHJpbmc+Pj4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYYV90ZXN0WF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9wcm9wZXJ0eVh0ZW1wX3NlbGVjdFhhWFhfdmFsdWVNYXBYbmFtZV90ZW1wWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgInRlc3QiKS5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikucHJvcGVydHkoInRlbXAiLCBzZWxlY3QoImEiKSkudmFsdWVNYXAoIm5hbWUiLCAidGVtcCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfbWFya29YX2FkZFZfcHJvcGVydHlYbmFtZV9zZWxlY3RYYVhYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgiYSIsICJtYXJrbyIpLmFkZFYoKS5wcm9wZXJ0eSgibmFtZSIsIHNlbGVjdCgiYSIpKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ193aXRoU2lkZUVmZmVjdFhhX25hbWVYX2FkZFZfcHJvcGVydHlYc2VsZWN0WGFYX21hcmtvWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImEiLCAibmFtZSIpLmFkZFYoKS5wcm9wZXJ0eShzZWxlY3QoImEiKSwibWFya28iKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19hZGRWWFZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnRpZXNYbmFtZVhfa2V5WF9sYWJlbCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmFkZFYoVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnByb3BlcnRpZXMoIm5hbWUiKS5rZXkoKSkubGFiZWwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2FzWGJYX2FkZFZYc2VsZWN0WGFYX2xhYmVsWF9wcm9wZXJ0eVh0ZXN0X3NlbGVjdFhiWF9sYWJlbFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5hZGRWKHNlbGVjdCgiYSIpLmxhYmVsKCkpLnByb3BlcnR5KCJ0ZXN0Iiwgc2VsZWN0KCJiIikubGFiZWwoKSkudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2Vucyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfYWRkVl9wcm9wZXJ0eVhsYWJlbF9wZXJzb25YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsICJwZXJzb24iKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvYWxlc2NlVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Db2FsZXNjZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRjNjY3MS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvYWxlc2NlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5jb25zdGFudDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy52YWx1ZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBEYW5pZWwgS3VwcGl0eiAoaHR0cDovL2dyZW1saW4uZ3VydSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29hbGVzY2VUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9jb2FsZXNjZVhvdXRYZm9vWF9vdXRYYmFyWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfY29hbGVzY2VYb3V0WGtub3dzWF9vdXRYY3JlYXRlZFhYX3ZhbHVlc1huYW1lWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2NvYWxlc2NlWG91dFhjcmVhdGVkWF9vdXRYa25vd3NYWF92YWx1ZXNYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX2NvYWxlc2NlWG91dFhsaWtlc1hfb3V0WGtub3dzWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9ieVhuYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfY29hbGVzY2VYb3V0RVhrbm93c1hfb3V0RVhjcmVhdGVkWFhfb3RoZXJWX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX291dFhjcmVhdGVkWF9vcmRlcl9ieVhuYW1lWF9jb2FsZXNjZVhuYW1lX2NvbnN0YW50WHhYWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2NvYWxlc2NlWG91dFhmb29YX291dFhiYXJYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2NvYWxlc2NlWG91dFhmb29YX291dFhiYXJYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2NvYWxlc2NlWG91dFhrbm93c1hfb3V0WGNyZWF0ZWRYWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9jb2FsZXNjZVhvdXRYa25vd3NYX291dFhjcmVhdGVkWFhfdmFsdWVzWG5hbWVYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiwgInZhZGFzIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2NvYWxlc2NlWG91dFhjcmVhdGVkWF9vdXRYa25vd3NYWF92YWx1ZXNYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9jb2FsZXNjZVhvdXRYY3JlYXRlZFhfb3V0WGtub3dzWFhfdmFsdWVzWG5hbWVYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibG9wIiwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jb2FsZXNjZVhvdXRYbGlrZXNYX291dFhrbm93c1hfaW5YY3JlYXRlZFhYX2dyb3VwQ291bnRfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2NvYWxlc2NlWG91dFhsaWtlc1hfb3V0WGtub3dzWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gcmVzdWx0ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHJlc3VsdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKHJlc3VsdC5jb250YWluc0tleSgiam9zaCIpICYmIHJlc3VsdC5jb250YWluc0tleSgibG9wIikgJiYgcmVzdWx0LmNvbnRhaW5zS2V5KCJyaXBwbGUiKSAmJiByZXN1bHQuY29udGFpbnNLZXkoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIChsb25nKSByZXN1bHQuZ2V0KCJqb3NoIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMkwsIChsb25nKSByZXN1bHQuZ2V0KCJsb3AiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxTCwgKGxvbmcpIHJlc3VsdC5nZXQoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCAobG9uZykgcmVzdWx0LmdldCgidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jb2FsZXNjZVhvdXRFWGtub3dzWF9vdXRFWGNyZWF0ZWRYWF9vdGhlclZfcGF0aF9ieVhuYW1lWF9ieVhsYWJlbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY29hbGVzY2VYb3V0RVhrbm93c1hfb3V0RVhjcmVhdGVkWFhfb3RoZXJWX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBmaXJzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgSW50ZWdlcj4gbGFzdCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGZpcnN0LmNvbXB1dGUocGF0aC48U3RyaW5nPmdldCgwKSwgKGssIHYpIC0+IHYgIT0gbnVsbCA/IHYgKyAxIDogMSk7Ci0gICAgICAgICAgICBsYXN0LmNvbXB1dGUocGF0aC48U3RyaW5nPmdldCgyKSwgKGssIHYpIC0+IHYgIT0gbnVsbCA/IHYgKyAxIDogMSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgcGF0aC5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgocGF0aC48U3RyaW5nPmdldCgwKS5lcXVhbHMoIm1hcmtvIikgJiYgcGF0aC48U3RyaW5nPmdldCgxKS5lcXVhbHMoImtub3dzIikgJiYgcGF0aC48U3RyaW5nPmdldCgyKS5lcXVhbHMoInZhZGFzIikpCi0gICAgICAgICAgICAgICAgICAgIHx8IChwYXRoLjxTdHJpbmc+Z2V0KDApLmVxdWFscygibWFya28iKSAmJiBwYXRoLjxTdHJpbmc+Z2V0KDEpLmVxdWFscygia25vd3MiKSAmJiBwYXRoLjxTdHJpbmc+Z2V0KDIpLmVxdWFscygiam9zaCIpKQotICAgICAgICAgICAgICAgICAgICB8fCAocGF0aC48U3RyaW5nPmdldCgwKS5lcXVhbHMoImpvc2giKSAmJiBwYXRoLjxTdHJpbmc+Z2V0KDEpLmVxdWFscygiY3JlYXRlZCIpICYmIHBhdGguPFN0cmluZz5nZXQoMikuZXF1YWxzKCJsb3AiKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKHBhdGguPFN0cmluZz5nZXQoMCkuZXF1YWxzKCJqb3NoIikgJiYgcGF0aC48U3RyaW5nPmdldCgxKS5lcXVhbHMoImNyZWF0ZWQiKSAmJiBwYXRoLjxTdHJpbmc+Z2V0KDIpLmVxdWFscygicmlwcGxlIikpCi0gICAgICAgICAgICAgICAgICAgIHx8IChwYXRoLjxTdHJpbmc+Z2V0KDApLmVxdWFscygicGV0ZXIiKSAmJiBwYXRoLjxTdHJpbmc+Z2V0KDEpLmVxdWFscygiY3JlYXRlZCIpICYmIHBhdGguPFN0cmluZz5nZXQoMikuZXF1YWxzKCJsb3AiKSkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIChpbnQpIGZpcnN0LmdldCgibWFya28iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCAoaW50KSBmaXJzdC5nZXQoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAoaW50KSBmaXJzdC5nZXQoInBldGVyIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKGludCkgbGFzdC5nZXQoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAoaW50KSBsYXN0LmdldCgidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCAoaW50KSBsYXN0LmdldCgibG9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKGludCkgbGFzdC5nZXQoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dFhjcmVhdGVkWF9vcmRlcl9ieVhuYW1lWF9jb2FsZXNjZVhuYW1lX2NvbnN0YW50WHhYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dFhjcmVhdGVkWF9vcmRlcl9ieVhuYW1lWF9jb2FsZXNjZVhuYW1lX2NvbnN0YW50WHhYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImxvcCIsICJsb3AiLCAibG9wIiwgInJpcHBsZSIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIENvYWxlc2NlVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2NvYWxlc2NlWG91dFhmb29YX291dFhiYXJYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5jb2FsZXNjZShvdXQoImZvbyIpLCBvdXQoImJhciIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2NvYWxlc2NlWG91dFhrbm93c1hfb3V0WGNyZWF0ZWRYWF92YWx1ZXNYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuY29hbGVzY2Uob3V0KCJrbm93cyIpLCBvdXQoImNyZWF0ZWQiKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9jb2FsZXNjZVhvdXRYY3JlYXRlZFhfb3V0WGtub3dzWFhfdmFsdWVzWG5hbWVYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmNvYWxlc2NlKG91dCgiY3JlYXRlZCIpLCBvdXQoImtub3dzIikpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9jb2FsZXNjZVhvdXRYbGlrZXNYX291dFhrbm93c1hfaW5YY3JlYXRlZFhYX2dyb3VwQ291bnRfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY29hbGVzY2Uob3V0KCJsaWtlcyIpLCBvdXQoImtub3dzIiksIG91dCgiY3JlYXRlZCIpKS48U3RyaW5nPmdyb3VwQ291bnQoKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2NvYWxlc2NlWG91dEVYa25vd3NYX291dEVYY3JlYXRlZFhYX290aGVyVl9wYXRoX2J5WG5hbWVYX2J5WGxhYmVsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5jb2FsZXNjZShvdXRFKCJrbm93cyIpLCBvdXRFKCJjcmVhdGVkIikpLm90aGVyVigpLnBhdGgoKS5ieSgibmFtZSIpLmJ5KFQubGFiZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX29yZGVyX2J5WG5hbWVYX2NvYWxlc2NlWG5hbWVfY29uc3RhbnRYeFhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLm9yZGVyKCkuYnkoIm5hbWUiKS5jb2FsZXNjZSh2YWx1ZXMoIm5hbWUiKSwgY29uc3RhbnQoIngiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0Nvbm5lY3RlZENvbXBvbmVudFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29ubmVjdGVkQ29tcG9uZW50VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWZlZGRjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29ubmVjdGVkQ29tcG9uZW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLkNvbm5lY3RlZENvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbm5lY3RlZENvbXBvbmVudFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2Nvbm5lY3RlZENvbXBvbmVudF9oYXNYY29tcG9uZW50WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsT2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfY29ubmVjdGVkQ29tcG9uZW50X3Byb2plY3RfYnlYbmFtZVhfYnlYY29tcG9uZW50WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9kZWR1cF9jb25uZWN0ZWRDb21wb25lbnRfaGFzWGNvbXBvbmVudFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLE9iamVjdD4+IGdldF9nX1ZfY29ubmVjdGVkQ29tcG9uZW50X3dpdGhYZWRnZXNfYm90aEVYa25vd3NYWF93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNsdXN0ZXJYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudCh0cmF2ZXJzYWwpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZGVkdXBfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZGVkdXBfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgSXRlcmF0b3JVdGlscy5jb3VudCh0cmF2ZXJzYWwpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2Nvbm5lY3RlZENvbXBvbmVudF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNvbXBvbmVudFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfY29ubmVjdGVkQ29tcG9uZW50X3Byb2plY3RfYnlYbmFtZVhfYnlYY29tcG9uZW50WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotCi0gICAgICAgIFN0cmluZyBzb2Z0d2FyZUNvbXBvbmVudCA9IG51bGw7Ci0KLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBtID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gbS5nZXQoIm5hbWUiKS50b1N0cmluZygpOwotCi0gICAgICAgICAgICAvLyBzaW5jZSB0aGUgdHdvIHJldHVybmVkIHZhbHVlcyBhcmUgaW4gdGhlIHNhbWUgY29tcG9uZW50IGp1c3QgbmVlZCB0byBncmFiIHRoZSBmaXJzdCBvbmUgYW5kIHVzZSB0aGF0Ci0gICAgICAgICAgICAvLyBhcyBhIGNvbXBhcmlzb24gdG8gdGhlIG90aGVyCi0gICAgICAgICAgICBpZiAobnVsbCA9PSBzb2Z0d2FyZUNvbXBvbmVudCkKLSAgICAgICAgICAgICAgICBzb2Z0d2FyZUNvbXBvbmVudCA9IG0uZ2V0KCJjb21wb25lbnQiKS50b1N0cmluZygpOwotCi0gICAgICAgICAgICBhc3NlcnROb3ROdWxsKHNvZnR3YXJlQ29tcG9uZW50KTsKLQotICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAibG9wIjoKLSAgICAgICAgICAgICAgICBjYXNlICJyaXBwbGUiOgotICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhzb2Z0d2FyZUNvbXBvbmVudCwgbS5nZXQoImNvbXBvbmVudCIpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jb25uZWN0ZWRDb21wb25lbnRfd2l0aFhFREdFU19ib3RoRVhrbm93c1hYX3dpdGhYUFJPUEVSVFlfTkFNRV9jbHVzdGVyWF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNsdXN0ZXJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY29ubmVjdGVkQ29tcG9uZW50X3dpdGhYZWRnZXNfYm90aEVYa25vd3NYWF93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNsdXN0ZXJYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0KLSAgICAgICAgU3RyaW5nIHNvZnR3YXJlQ29tcG9uZW50ID0gbnVsbDsKLQotICAgICAgICAvLyBzb3J0IHRvIG1ha2Ugc3VyZSB0aGF0ICJwZXRlciIgaXMgYWx3YXlzIGxhc3QKLSAgICAgICAgZmluYWwgSXRlcmF0b3I8TWFwPFN0cmluZyxPYmplY3Q+PiBpdHR5ID0gdHJhdmVyc2FsLnRvTGlzdCgpLnN0cmVhbSgpLnNvcnRlZCgobzEsIG8yKSAtPiBvMS5nZXQoIm5hbWUiKS50b1N0cmluZygpLmVxdWFscygicGV0ZXIiKSA/IDEgOiAtMSkuaXRlcmF0b3IoKTsKLQotICAgICAgICB3aGlsZSAoaXR0eS5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBtID0gaXR0eS5uZXh0KCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IG0uZ2V0KCJuYW1lIikudG9TdHJpbmcoKTsKLQotICAgICAgICAgICAgLy8gc2luY2UgdGhlIHRocmVlIG9mIHRoZSByZXR1cm5lZCB2YWx1ZXMgYXJlIGluIHRoZSBzYW1lIGNvbXBvbmVudCBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgZmlyc3Qgb25lIGFuZAotICAgICAgICAgICAgLy8gdXNlIHRoYXQgYXMgYSBjb21wYXJpc29uIHRvIHRoZSBvdGhlcnMgYW5kIHRoZW4gZm9yIHRoZSBmb3VydGggcmV0dXJuZWQgaXRlbSAicGV0ZXIiIGp1c3QgbmVlZHMgdG8gbm90Ci0gICAgICAgICAgICAvLyBiZSBpbiB0aGUgc2FtZSBjb21wb25lbnQKLSAgICAgICAgICAgIGlmIChudWxsID09IHNvZnR3YXJlQ29tcG9uZW50KQotICAgICAgICAgICAgICAgIHNvZnR3YXJlQ29tcG9uZW50ID0gbS5nZXQoImNsdXN0ZXIiKS50b1N0cmluZygpOwotCi0gICAgICAgICAgICBhc3NlcnROb3ROdWxsKHNvZnR3YXJlQ29tcG9uZW50KTsKLQotICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAibWFya28iOgotICAgICAgICAgICAgICAgIGNhc2UgInZhZGFzIjoKLSAgICAgICAgICAgICAgICBjYXNlICJqb3NoIjoKLSAgICAgICAgICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoc29mdHdhcmVDb21wb25lbnQsIG0uZ2V0KCJjbHVzdGVyIikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJwZXRlciI6Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Tm90RXF1YWxzKHNvZnR3YXJlQ29tcG9uZW50LCBtLmdldCgiY2x1c3RlciIpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIENvbm5lY3RlZENvbXBvbmVudFRlc3QgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9jb25uZWN0ZWRDb21wb25lbnRfaGFzWGNvbXBvbmVudFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKENvbm5lY3RlZENvbXBvbmVudC5jb21wb25lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfZGVkdXBfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmRlZHVwKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKENvbm5lY3RlZENvbXBvbmVudC5jb21wb25lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLE9iamVjdD4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2Nvbm5lY3RlZENvbXBvbmVudF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNvbXBvbmVudFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuY29ubmVjdGVkQ29tcG9uZW50KCkucHJvamVjdCgibmFtZSIsImNvbXBvbmVudCIpLmJ5KCJuYW1lIikuYnkoQ29ubmVjdGVkQ29tcG9uZW50LmNvbXBvbmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLE9iamVjdD4+IGdldF9nX1ZfY29ubmVjdGVkQ29tcG9uZW50X3dpdGhYZWRnZXNfYm90aEVYa25vd3NYWF93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNsdXN0ZXJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5jb25uZWN0ZWRDb21wb25lbnQoKS53aXRoKENvbm5lY3RlZENvbXBvbmVudC5lZGdlcywgYm90aEUoImtub3dzIikpLndpdGgoQ29ubmVjdGVkQ29tcG9uZW50LnByb3BlcnR5TmFtZSwgImNsdXN0ZXIiKS5wcm9qZWN0KCJuYW1lIiwiY2x1c3RlciIpLmJ5KCJuYW1lIikuYnkoImNsdXN0ZXIiKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29uc3RhbnRUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvbnN0YW50VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmNiYjQxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ29uc3RhbnRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uY29uc3RhbnQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhc0xhYmVsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy52YWx1ZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5jb250YWluc0luQW55T3JkZXI7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQGF1dGhvciBNYXR0IEZyYW50eiAoaHR0cDovL2dpdGh1Yi5jb20vbWhmcmFudHopCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIENvbnN0YW50VGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2NvbnN0YW50WDEyM1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWb2lkPiBnZXRfZ19WX2NvbnN0YW50WG51bGxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1huYW1lWF9jb25zdGFudFhpbmh1bWFuWFgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9jb25zdGFudFgxMjNYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2NvbnN0YW50WDEyM1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KDEyMywgMTIzLCAxMjMsIDEyMywgMTIzLCAxMjMpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfY29uc3RhbnRYbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZvaWQ+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY29uc3RhbnRYbnVsbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhBcnJheXMuYXNMaXN0KG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIC8qKiBTY2VuYXJpbzogQW5vbnltb3VzIHRyYXZlcnNhbCB3aXRoaW4gY2hvb3NlICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1huYW1lWF9jb25zdGFudFhpbmh1bWFuWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF92YWx1ZXNYbmFtZVhfY29uc3RhbnRYaW5odW1hblhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC50b0xpc3QoKSwgY29udGFpbnNJbkFueU9yZGVyKCJtYXJrbyIsICJ2YWRhcyIsICJpbmh1bWFuIiwgImpvc2giLCAiaW5odW1hbiIsICJwZXRlciIpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBDb25zdGFudFRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9jb25zdGFudFgxMjNYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmNvbnN0YW50KDEyMyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZvaWQ+IGdldF9nX1ZfY29uc3RhbnRYbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY29uc3RhbnQobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF92YWx1ZXNYbmFtZVhfY29uc3RhbnRYaW5odW1hblhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmNob29zZShoYXNMYWJlbCgicGVyc29uIiksIHZhbHVlcygibmFtZSIpLCBjb25zdGFudCgiaW5odW1hbiIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ291bnRUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0NvdW50VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjMwM2YyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvQ291bnRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5HUkFURUZVTDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb3VudFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9jb3VudCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1Zfb3V0X2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9ib3RoX2JvdGhfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDNYX2NvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1g4WF9jb3VudCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYNVhfYXNYYVhfb3V0WHdyaXR0ZW5CeVhfYXNYYlhfc2VsZWN0WGFfYlhfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2hhc1hub1hfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2ZvbGRfY291bnRYbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3doZXJlWGluWGtub3dzWF9vdXRYY3JlYXRlZFhfY291bnRfaXNfMFhYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2NvdW50WGxvY2FsWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfY291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZyg2KSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfY291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoNiksIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ib3RoX2JvdGhfY291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aF9ib3RoX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMTQwNjkxNCksIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYb3V0WF90aW1lc1gzWF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1gzWF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDE0NDY1MDY2TCksIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYb3V0WF90aW1lc1g4WF9jb3VudCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1g4WF9jb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDI1MDUwMzc5NjE3NjczODBMKSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoR1JBVEVGVUwpCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDVYX2FzWGFYX291dFh3cml0dGVuQnlYX2FzWGJYX3NlbGVjdFhhX2JYX2NvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDVYX2FzWGFYX291dFh3cml0dGVuQnlYX2FzWGJYX3NlbGVjdFhhX2JYX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMjQzMDkxMzQwMjRMKSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbm9YX2NvdW50KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hub1hfY291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZygwKSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9mb2xkX2NvdW50WGxvY2FsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9mb2xkX2NvdW50WGxvY2FsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDYpLCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3doZXJlWGluWGtrbm93c1hfb3V0WGNyZWF0ZWRYX2NvdW50X2lzXzBYWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfd2hlcmVYaW5Ya25vd3NYX291dFhjcmVhdGVkWF9jb3VudF9pc18wWFhfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgImxvcCIsICJyaXBwbGUiLCAicGV0ZXIiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdmFsdWVzWGFnZVhfY291bnRYbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2NvdW50WGxvY2FsWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgxTCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgQ291bnRUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9vdXRfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9ib3RoX2JvdGhfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYm90aCgpLmJvdGgoKS5jb3VudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDNYX2NvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChvdXQoKSkudGltZXMoMykuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1g4WF9jb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQob3V0KCkpLnRpbWVzKDgpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYNVhfYXNYYVhfb3V0WHdyaXR0ZW5CeVhfYXNYYlhfc2VsZWN0WGFfYlhfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucmVwZWF0KG91dCgpKS50aW1lcyg1KS5hcygiYSIpLm91dCgid3JpdHRlbkJ5IikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpLmNvdW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfaGFzWG5vWF9jb3VudCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5vIikuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9mb2xkX2NvdW50WGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfd2hlcmVYaW5Ya25vd3NYX291dFhjcmVhdGVkWF9jb3VudF9pc18wWFhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS53aGVyZShpbigia25vd3MiKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLmlzKDApKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9jb3VudFhsb2NhbFgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkudmFsdWVzKCJhZ2UiKS5jb3VudChTY29wZS5sb2NhbCk7Ci0gICAgICAgIH07Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9FZGdlVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9FZGdlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWU3YWU4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRWRnZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuR1JBVEVGVUw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotLyoqCi0gKiBAYXV0aG9yIFZhbGVudHluIEthaGFtbHlrCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIEVkZ2VUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfRVgxMVgoZmluYWwgT2JqZWN0IGUxMUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRVgxMVhfRShmaW5hbCBPYmplY3QgZTExSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfRVhudWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBFZGdlPiBnZXRfZ19pbmplY3RYMVhfRVgxMV9udWxsWChmaW5hbCBPYmplY3QgZTExSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBFZGdlPiBnZXRfZ19pbmplY3RYMVhfY29hbGVzY2VYRVhfaGFzTGFiZWxYdGVzdHNYX2FkZEVYdGVzdHNYX2Zyb21fVl9oYXNYbmFtZVhfWGpvc2hYWF90b1hWX2hhc1huYW1lWF9YdmFkYXNYWFgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9FWDExWCgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGVkZ2VJZCA9IGNvbnZlcnRUb0VkZ2VJZCgiam9zaCIsICJjcmVhdGVkIiwgImxvcCIpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX0VYMTFYKGVkZ2VJZCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGVkZ2VzLmFkZCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgZWRnZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRVgxMVhfRSgpIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGVkZ2VJZCA9IGNvbnZlcnRUb0VkZ2VJZCgiam9zaCIsICJjcmVhdGVkIiwgImxvcCIpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfRVgxMVhfRShlZGdlSWQpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8RWRnZT4gZWRnZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBlZGdlcy5hZGQodHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGVkZ2VzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfRVhudWxsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9FWG51bGxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGVkZ2VzLmFkZCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZWRnZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WDFYX0VYMTFfbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBlZGdlSWQgPSBjb252ZXJ0VG9FZGdlSWQoImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEludGVnZXIsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX2luamVjdFgxWF9FWDExX251bGxYKGVkZ2VJZCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGVkZ2VzLmFkZCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZWRnZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WDFYX2NvYWxlc2NlWEVYX2hhc0xhYmVsWHRlc3RzWF9hZGRFWHRlc3RzWF9mcm9tX1ZfaGFzWG5hbWVYX1hqb3NoWFhfdG9YVl9oYXNYbmFtZVhfWHZhZGFzWFhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8SW50ZWdlciwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfaW5qZWN0WDFYX2NvYWxlc2NlWEVYX2hhc0xhYmVsWHRlc3RzWF9hZGRFWHRlc3RzWF9mcm9tX1ZfaGFzWG5hbWVYX1hqb3NoWFhfdG9YVl9oYXNYbmFtZVhfWHZhZGFzWFhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGVkZ2VzLmFkZCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZWRnZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIEVkZ2VUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfRVgxMVgoZmluYWwgT2JqZWN0IGUxMUlkKSB7IHJldHVybiBnLlYoKS5FKGUxMUlkKTsgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYMTFYX0UoZmluYWwgT2JqZWN0IGUxMUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKGUxMUlkKS5FKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfRVhudWxsWCgpIHsgcmV0dXJuIGcuVigpLkUobnVsbCk7IH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBFZGdlPiBnZXRfZ19pbmplY3RYMVhfRVgxMV9udWxsWChmaW5hbCBPYmplY3QgZTExSWQpIHsgcmV0dXJuIGcuaW5qZWN0KDEpLkUoZTExSWQsbnVsbCk7IH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBFZGdlPiBnZXRfZ19pbmplY3RYMVhfY29hbGVzY2VYRVhfaGFzTGFiZWxYdGVzdHNYX2FkZEVYdGVzdHNYX2Zyb21fVl9oYXNYbmFtZVhfWGpvc2hYWF90b1hWX2hhc1huYW1lWF9YdmFkYXNYWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QoMSkuY29hbGVzY2UoX18uRSgpLmhhc0xhYmVsKCJ0ZXN0cyIpLCBfXy5hZGRFKCJ0ZXN0cyIpLmZyb20oX18uVigpLmhhcygibmFtZSIsImpvc2giKSkudG8oX18uVigpLmhhcygibmFtZSIsInZhZGFzIikpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRWxlbWVudE1hcFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRWxlbWVudE1hcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY1Njk0Zi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0VsZW1lbnRNYXBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLldpdGhPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5ULmlkOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5ULmxhYmVsOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFbGVtZW50TWFwVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WX2VsZW1lbnRNYXAoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WX2VsZW1lbnRNYXBYbmFtZV9hZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIE1hcDxPYmplY3QsIE9iamVjdD4+IGdldF9nX0VYMTFYX2VsZW1lbnRNYXAoZmluYWwgT2JqZWN0IGUxMUlkKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9lbGVtZW50TWFwKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2VsZW1lbnRNYXAoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gdmFsdWVzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gKFN0cmluZykgdmFsdWVzLmdldCgibmFtZSIpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKCJtYXJrbyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDI5LCB2YWx1ZXMuZ2V0KCJhZ2UiKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KGxhYmVsKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJqb3NoIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzIsIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZhbHVlcy5nZXQobGFiZWwpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInBldGVyIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzUsIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZhbHVlcy5nZXQobGFiZWwpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInZhZGFzIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjcsIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZhbHVlcy5nZXQobGFiZWwpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImxvcCIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhIiwgdmFsdWVzLmdldCgibGFuZyIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNvZnR3YXJlIiwgdmFsdWVzLmdldChsYWJlbCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicmlwcGxlIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImphdmEiLCB2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCB2YWx1ZXMuZ2V0KGxhYmVsKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFjaCBoZXJlOiAiICsgdmFsdWVzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXNzZXJ0VGhhdCh2YWx1ZXMuY29udGFpbnNLZXkoVC5pZCksIGlzKHRydWUpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2VsZW1lbnRNYXBYbmFtZV9hZ2VYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2VsZW1lbnRNYXBYbmFtZV9hZ2VYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHZhbHVlcyA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIHZhbHVlcy5nZXQoIm5hbWUiKTsKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyOSwgdmFsdWVzLmdldCgiYWdlIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChsYWJlbCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImpvc2giKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzMiwgdmFsdWVzLmdldCgiYWdlIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChsYWJlbCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInBldGVyIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzUsIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZhbHVlcy5nZXQobGFiZWwpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDI3LCB2YWx1ZXMuZ2V0KCJhZ2UiKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KGxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygibG9wIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnROdWxsKHZhbHVlcy5nZXQoImxhbmciKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2Z0d2FyZSIsIHZhbHVlcy5nZXQobGFiZWwpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJyaXBwbGUiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydE51bGwodmFsdWVzLmdldCgibGFuZyIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNvZnR3YXJlIiwgdmFsdWVzLmdldChsYWJlbCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWNoIGhlcmU6ICIgKyB2YWx1ZXMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnRUaGF0KHZhbHVlcy5jb250YWluc0tleShULmlkKSwgaXModHJ1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VYMTFYX2VsZW1lbnRNYXAoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBlZGdlSWQgPSBjb252ZXJ0VG9FZGdlSWQoImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIE1hcDxPYmplY3QsT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfRVgxMVhfZWxlbWVudE1hcChlZGdlSWQpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LE9iamVjdD4gbSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBtLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjRkLCBtLmdldCgid2VpZ2h0IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImNyZWF0ZWQiLCBtLmdldChsYWJlbCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWRnZUlkLCBtLmdldChULmlkKSk7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHZKb3NoID0gY29udmVydFRvVmVydGV4KCJqb3NoIik7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2Sm9zaC5pZCgpLCAoKE1hcDxPYmplY3QsT2JqZWN0PikgbS5nZXQoRGlyZWN0aW9uLk9VVCkpLmdldChULmlkKSk7Ci0KLSAgICAgICAgaWYgKCFoYXNHcmFwaENvbXB1dGVyUmVxdWlyZW1lbnQoKSkKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyh2Sm9zaC5sYWJlbCgpLCAoKE1hcDxPYmplY3QsT2JqZWN0PikgbS5nZXQoRGlyZWN0aW9uLk9VVCkpLmdldChULmxhYmVsKSk7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHZMb3AgPSBjb252ZXJ0VG9WZXJ0ZXgoImxvcCIpOwotICAgICAgICBhc3NlcnRFcXVhbHModkxvcC5pZCgpLCAoKE1hcDxPYmplY3QsT2JqZWN0PikgbS5nZXQoRGlyZWN0aW9uLklOKSkuZ2V0KFQuaWQpKTsKLQotICAgICAgICBpZiAoIWhhc0dyYXBoQ29tcHV0ZXJSZXF1aXJlbWVudCgpKQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHZMb3AubGFiZWwoKSwgKChNYXA8T2JqZWN0LE9iamVjdD4pIG0uZ2V0KERpcmVjdGlvbi5JTikpLmdldChULmxhYmVsKSk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdCh0cmF2ZXJzYWwuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIEVsZW1lbnRNYXBUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WX2VsZW1lbnRNYXAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuZWxlbWVudE1hcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WX2VsZW1lbnRNYXBYbmFtZV9hZ2VYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmVsZW1lbnRNYXAoIm5hbWUiLCAiYWdlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19FWDExWF9lbGVtZW50TWFwKGZpbmFsIE9iamVjdCBlMTFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuRShlMTFJZCkuZWxlbWVudE1hcCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9GbGF0TWFwVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9GbGF0TWFwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTEwNzMxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRmxhdE1hcFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5zZWxlY3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRmxhdE1hcFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2FzWGFYX2ZsYXRNYXBYc2VsZWN0WGFYWCgpOwotCi0gICAgLyoqIFRJTktFUlBPUC03ODIgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfZmxhdE1hcFhzZWxlY3RYYVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfZmxhdE1hcFhzZWxlY3RYYVhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBGbGF0TWFwVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2FzWGFYX2ZsYXRNYXBYc2VsZWN0WGFYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLmZsYXRNYXAoc2VsZWN0KCJhIikpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Gb2xkVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Gb2xkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDAyOWIzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvRm9sZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQmluYXJ5T3BlcmF0b3I7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGb2xkVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFZlcnRleD4+IGdldF9nX1ZfZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9mb2xkX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdlX2ZvbGRYMF9wbHVzWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2ZvbGQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8VmVydGV4Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFZlcnRleD4gbGlzdCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBTZXQ8VmVydGV4PiB2ZXJ0aWNlcyA9IG5ldyBIYXNoU2V0PD4obGlzdCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCB2ZXJ0aWNlcy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9mb2xkX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2ZvbGRfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8VmVydGV4PiB2ZXJ0aWNlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2VzLmFkZCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCB2ZXJ0aWNlcy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2VfZm9sZFgwX3BsdXNYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZV9mb2xkWDBfcGx1c1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIEludGVnZXIgYWdlU3VtID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMTIzKSwgYWdlU3VtKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBGb2xkVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFZlcnRleD4+IGdldF9nX1ZfZm9sZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5mb2xkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9mb2xkX3VuZm9sZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5mb2xkKCkudW5mb2xkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdlX2ZvbGRYMF9wbHVzWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48SW50ZWdlcj52YWx1ZXMoImFnZSIpLmZvbGQoMCwgKEJpbmFyeU9wZXJhdG9yKSBPcGVyYXRvci5zdW0pOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9HcmFwaFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvR3JhcGhUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwYzJjMzUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9HcmFwaFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuSWdub3JlRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuR1JBVEVGVUw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JhcGhUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9WX3ZhbHVlc1huYW1lWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2hhc1huYW1lX0dhcmNpYVhfaW5Yc3VuZ0J5WF9hc1hzb25nWF9WX2hhc1huYW1lX1dpbGxpZV9EaXhvblhfaW5Yd3JpdHRlbkJ5WF93aGVyZVhlcVhzb25nWFhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9WWHNvZnR3YXJlWF9hZGRJbkVYdXNlc19wWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vdXRYa25vd3NYX1ZfbmFtZSgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX1ZfdmFsdWVzWG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfVl92YWx1ZXNYbmFtZVgoY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJ2YWRhcyIsICJsb3AiLCAiam9zaCIsICJyaXBwbGUiLCAicGV0ZXIiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbmFtZV9HYXJjaWFYX2luWHN1bmdCeVhfYXNYc29uZ1hfVl9oYXNYbmFtZV9XaWxsaWVfRGl4b25YX2luWHdyaXR0ZW5CeVhfd2hlcmVYZXFYc29uZ1hYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9HYXJjaWFYX2luWHN1bmdCeVhfYXNYc29uZ1hfVl9oYXNYbmFtZV9XaWxsaWVfRGl4b25YX2luWHdyaXR0ZW5CeVhfd2hlcmVYZXFYc29uZ1hYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJNWSBCQUJFIiwgIkhPT0NISUUgQ09PQ0hJRSBNQU4iKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5GRUFUVVJFX0FERF9FREdFUykKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9WWHNvZnR3YXJlWF9hZGRJbkVYdXNlc19wWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX1ZYc29mdHdhcmVYX2FkZEluRVh1c2VzX3BYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ1c2VzIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgZWRnZS5vdXRWZXJ0ZXgoKS5sYWJlbCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCBlZGdlLmluVmVydGV4KCkubGFiZWwoKSk7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDgsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRYa25vd3NYX1ZfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dFhrbm93c1hfVl9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAibWFya28iLCAiam9zaCIsICJqb3NoIiwgInZhZGFzIiwgInZhZGFzIiwgInBldGVyIiwgInBldGVyIiwgImxvcCIsICJsb3AiLCAicmlwcGxlIiwgInJpcHBsZSIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIEdyYXBoVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfVl92YWx1ZXNYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuVigpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3V0WGtub3dzWF9WX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCJrbm93cyIpLlYoKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2hhc1huYW1lX0dhcmNpYVhfaW5Yc3VuZ0J5WF9hc1hzb25nWF9WX2hhc1huYW1lX1dpbGxpZV9EaXhvblhfaW5Yd3JpdHRlbkJ5WF93aGVyZVhlcVhzb25nWFhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoImFydGlzdCIsICJuYW1lIiwgIkdhcmNpYSIpLmluKCJzdW5nQnkiKS5hcygic29uZyIpCi0gICAgICAgICAgICAgICAgICAgIC5WKCkuaGFzKCJhcnRpc3QiLCAibmFtZSIsICJXaWxsaWVfRGl4b24iKS5pbigid3JpdHRlbkJ5Iikud2hlcmUoUC5lcSgic29uZyIpKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX1ZYc29mdHdhcmVYX2FkZEluRVh1c2VzX3BYKCkgewotICAgICAgICAgICAgZmluYWwgTGlzdDxWZXJ0ZXg+IHNvZnR3YXJlID0gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudG9MaXN0KCk7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFzKCJwIikuVihzb2Z0d2FyZSkuYWRkRSgidXNlcyIpLmZyb20oInAiKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0luZGV4VGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9JbmRleFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzMTY5ZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0luZGV4VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLldpdGhPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnRhaWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBEYW5pZWwgS3VwcGl0eiAoaHR0cDovL2dyZW1saW4uZ3VydSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW5kZXhUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8T2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfaW5kZXhfdW5mb2xkKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPEludGVnZXIsIFZlcnRleD4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX29yZGVyX2J5WG5hbWVYX2luZGV4X3dpdGhYbWFwWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8T2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfbmFtZV9mb2xkX29yZGVyWGxvY2FsWF9pbmRleF91bmZvbGRfb3JkZXJfYnlYdGFpbFhsb2NhbF8xWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8SW50ZWdlciwgU3RyaW5nPj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfd2l0aFhtYXBYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2luZGV4X3VuZm9sZF91bmZvbGQoZmluYWwgT2JqZWN0IHZpZDEpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9pbmRleCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9pbmRleF91bmZvbGQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoY29udmVydFRvVmVydGV4KCJsb3AiKSwgMCksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChjb252ZXJ0VG9WZXJ0ZXgoInJpcHBsZSIpLCAwKQotICAgICAgICApLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfb3JkZXJfYnlYbmFtZVhfaW5kZXhfd2l0aFhtYXBYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8SW50ZWdlciwgVmVydGV4Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfb3JkZXJfYnlYbmFtZVhfaW5kZXhfd2l0aFhtYXBYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8SW50ZWdlciwgVmVydGV4PiBtYXAxID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICBmaW5hbCBNYXA8SW50ZWdlciwgVmVydGV4PiBtYXAyID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOwotICAgICAgICBtYXAxLnB1dCgwLCBjb252ZXJ0VG9WZXJ0ZXgoImxvcCIpKTsKLSAgICAgICAgbWFwMi5wdXQoMCwgY29udmVydFRvVmVydGV4KCJyaXBwbGUiKSk7Ci0gICAgICAgIGNoZWNrT3JkZXJlZFJlc3VsdHMoQXJyYXlzLmFzTGlzdChtYXAxLCBtYXAyKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfdW5mb2xkX29yZGVyX2J5WHRhaWxYbG9jYWxfMVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfdW5mb2xkX29yZGVyX2J5WHRhaWxYbG9jYWxfMVhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgibG9wIiwgMCksCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgicmlwcGxlIiwgMSkpLCB0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYX2luZGV4X3dpdGhYbWFwWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPEludGVnZXIsIFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYX2luZGV4X3dpdGhYbWFwWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPEludGVnZXIsIFN0cmluZz4gZXhwZWN0ZWQgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0gICAgICAgIGV4cGVjdGVkLnB1dCgwLCAiam9zaCIpOwotICAgICAgICBleHBlY3RlZC5wdXQoMSwgIm1hcmtvIik7Ci0gICAgICAgIGV4cGVjdGVkLnB1dCgyLCAicGV0ZXIiKTsKLSAgICAgICAgZXhwZWN0ZWQucHV0KDMsICJ2YWRhcyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdmFsdWVzWGFnZVhfaW5kZXhfdW5mb2xkX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2luZGV4X3VuZm9sZF91bmZvbGQoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMjksMCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgSW5kZXhUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8T2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfaW5kZXhfdW5mb2xkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLmluZGV4KCkudW5mb2xkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxJbnRlZ2VyLCBWZXJ0ZXg+PiBnZXRfZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9vcmRlcl9ieVhuYW1lWF9pbmRleF93aXRoWG1hcFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikub3JkZXIoKS5ieSgibmFtZSIpCi0gICAgICAgICAgICAgICAgICAgIC48TWFwPEludGVnZXIsIFZlcnRleD4+IGluZGV4KCkud2l0aChXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PE9iamVjdD4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfdW5mb2xkX29yZGVyX2J5WHRhaWxYbG9jYWxfMVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKQotICAgICAgICAgICAgICAgICAgICAuPExpc3Q8T2JqZWN0Pj4gdW5mb2xkKCkub3JkZXIoKS5ieSh0YWlsKFNjb3BlLmxvY2FsLCAxKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxJbnRlZ2VyLCBTdHJpbmc+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9mb2xkX29yZGVyWGxvY2FsWF9pbmRleF93aXRoWG1hcFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkKLSAgICAgICAgICAgICAgICAgICAgLjxNYXA8SW50ZWdlciwgU3RyaW5nPj4gaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9pbmRleF91bmZvbGRfdW5mb2xkKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuaW5kZXgoKS51bmZvbGQoKS51bmZvbGQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTG9vcHNUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL0xvb3BzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGNkNDhlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTG9vcHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIERhbmllbCBLdXBwaXR6IChodHRwOi8vZ3JlbWxpbi5ndXJ1KQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMb29wc1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICAvKgotICAgIGcuVigxKS5yZXBlYXQoYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoaGFzKCduYW1lJywgJ3BldGVyJykub3IoKS5sb29wcygpLmlzKDMpKS5oYXMoJ25hbWUnLCAncGV0ZXInKS5wYXRoKCkuYnkoJ25hbWUnKS4KLSAgICAgICAgICAgICAgICBmb3JFYWNoUmVtYWluaW5nKFN5c3RlbS5vdXQ6OnByaW50bG4pOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oJy0tJyk7Ci0gICAgICAgIGcuVih2MUlkKS5yZXBlYXQoYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoaGFzKCduYW1lJywgJ3BldGVyJykub3IoKS5sb29wcygpLmlzKDIpKS5oYXMoJ25hbWUnLCAncGV0ZXInKS5wYXRoKCkuYnkoJ25hbWUnKS4KLSAgICAgICAgICAgICAgICBmb3JFYWNoUmVtYWluaW5nKFN5c3RlbS5vdXQ6OnByaW50bG4pOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oJy0tJyk7Ci0gICAgICAgIGcuVih2MUlkKS5yZXBlYXQoYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoaGFzKCduYW1lJywgJ3BldGVyJykuYW5kKCkubG9vcHMoKS5pcygzKSkuaGFzKCduYW1lJywgJ3BldGVyJykucGF0aCgpLmJ5KCduYW1lJykuCi0gICAgICAgICAgICAgICAgZm9yRWFjaFJlbWFpbmluZyhTeXN0ZW0ub3V0OjpwcmludGxuKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCctLScpOwotICAgICAgICBnLlYoKS5lbWl0KGhhcygnbmFtZScsICdtYXJrbycpLm9yKCkubG9vcHMoKS5pcygyKSkucmVwZWF0KG91dCgpKS52YWx1ZXMoJ25hbWUnKS4KLSAgICAgICAgICAgICAgICBmb3JFYWNoUmVtYWluaW5nKFN5c3RlbS5vdXQ6OnByaW50bG4pOwotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3BldGVyWF9vcl9sb29wc19pc1gzWFhfaGFzWG5hbWVfcGV0ZXJYX3BhdGhfYnlYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcGV0ZXJYX29yX2xvb3BzX2lzWDJYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfYW5kX2xvb3BzX2lzWDNYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2VtaXRYaGFzWG5hbWVfbWFya29YX29yX2xvb3BzX2lzWDJYWF9yZXBlYXRYb3V0WF92YWx1ZXNYbmFtZVgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfb3JfbG9vcHNfaXNYM1hYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3BldGVyWF9vcl9sb29wc19pc1gzWFhfaGFzWG5hbWVfcGV0ZXJYX3BhdGhfYnlYbmFtZVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IHBhdGhzID0gMDsKLSAgICAgICAgYm9vbGVhbiBoYXMzID0gZmFsc2UsIGhhczQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFBhdGggcGF0aCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKHBhdGguc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgcGF0aC5nZXQoMCkpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIHBhdGguZ2V0KDEpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXRlciIsIHBhdGguZ2V0KDIpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzMyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHBhdGguZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgcGF0aC5nZXQoMSkpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIHBhdGguZ2V0KDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXRlciIsIHBhdGguZ2V0KDMpKTsKLSAgICAgICAgICAgICAgICAgICAgaGFzNCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aHMrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRUcnVlKGhhczMgJiYgaGFzNCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBwYXRocyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3BldGVyWF9vcl9sb29wc19pc1gyWFhfaGFzWG5hbWVfcGV0ZXJYX3BhdGhfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcGV0ZXJYX29yX2xvb3BzX2lzWDJYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgcGF0aC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgcGF0aC5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIHBhdGguZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXRlciIsIHBhdGguZ2V0KDIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3BldGVyWF9hbmRfbG9vcHNfaXNYM1hYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3BldGVyWF9hbmRfbG9vcHNfaXNYM1hYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIFBhdGggcGF0aCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBwYXRoLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBwYXRoLmdldCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIHBhdGguZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCBwYXRoLmdldCgyKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGV0ZXIiLCBwYXRoLmdldCgzKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9lbWl0WGhhc1huYW1lX21hcmtvWF9vcl9sb29wc19pc1gyWFhfcmVwZWF0WG91dFhfdmFsdWVzWG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZW1pdFhoYXNYbmFtZV9tYXJrb1hfb3JfbG9vcHNfaXNYMlhYX3JlcGVhdFhvdXRYX3ZhbHVlc1huYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgInJpcHBsZSIsICJsb3AiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBMb29wc1Rlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNYbmFtZV9wZXRlclhfb3JfbG9vcHNfaXNYM1hYX2hhc1huYW1lX3BldGVyWF9wYXRoX2J5WG5hbWVYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicGV0ZXIiKS5vcigpLmxvb3BzKCkuaXMoMykpLmhhcygibmFtZSIsICJwZXRlciIpLnBhdGgoKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WWDFYX3JlcGVhdFhib3RoX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3BldGVyWF9vcl9sb29wc19pc1gyWFhfaGFzWG5hbWVfcGV0ZXJYX3BhdGhfYnlYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygibmFtZSIsICJwZXRlciIpLm9yKCkubG9vcHMoKS5pcygyKSkuaGFzKCJuYW1lIiwgInBldGVyIikucGF0aCgpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcGV0ZXJYX2FuZF9sb29wc19pc1gzWFhfaGFzWG5hbWVfcGV0ZXJYX3BhdGhfYnlYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcygibmFtZSIsICJwZXRlciIpLmFuZCgpLmxvb3BzKCkuaXMoMykpLmhhcygibmFtZSIsICJwZXRlciIpLnBhdGgoKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfZW1pdFhoYXNYbmFtZV9tYXJrb1hfb3JfbG9vcHNfaXNYMlhYX3JlcGVhdFhvdXRYX3ZhbHVlc1huYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5lbWl0KF9fLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKCkubG9vcHMoKS5pcygyKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01hcFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWFwVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWU2MzE1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWFwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmNvbnN0YW50OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5zZWxlY3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBNYXBUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9tYXBYc2VsZWN0WGFYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9tYXBYY29uc3RhbnRYbnVsbFhYKCk7Ci0KLQotICAgIC8qKiBUSU5LRVJQT1AtNzgyICovCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX21hcFhzZWxlY3RYYVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbWFwWHNlbGVjdFhhWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9tYXBYY29uc3RhbnRYbnVsbFhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbWFwWGNvbnN0YW50WG51bGxYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgYXNzZXJ0TnVsbCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgTWFwVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfbWFwWHNlbGVjdFhhWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5tYXAoc2VsZWN0KCJhIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfbWFwWGNvbnN0YW50WG51bGxYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5tYXAoY29uc3RhbnQobnVsbCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NYXRjaFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWF0Y2hUZXN0LmphdmEKaW5kZXggY2RmNGQxMy4uZjAwZTg4NyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NYXRjaFRlc3QuamF2YQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01hdGNoVGVzdC5qYXZhCkBAIC00MywxMCArNDMsMTAgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5HUkFURUZVTDsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXIuZGVzYzsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLmVxOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAubmVxOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5hbmQ7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmFzOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5mYWlsOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pbkU7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm1hdGNoOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ub3Q7CkBAIC01OCw3ICs1OCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5lcTsKIAogLyoqCiAgKiBAYXV0aG9yIEpvc2h1YSBTaGluYXZpZXIgKGh0dHA6Ly9mb3J0eXR3by5uZXQpCkBAIC04MDEsNyArODAxLDcgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX21hdGNoWGFfd2hlcmVYYV9uZXFYY1hYX19hX2NyZWF0ZWRfYl9fb3JYYV9rbm93c192YWRhc19fYV8wa25vd3NfYW5kX2FfaGFzWGxhYmVsX3BlcnNvblhYX19iXzBjcmVhdGVkX2NfX2JfMGNyZWF0ZWRfY291bnRfaXNYZ3RYMVhYWF9zZWxlY3RYYV9iX2NYX2J5WGlkWCgpIHsKICAgICAgICAgICAgIHJldHVybiBnLlYoKS5tYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgd2hlcmUoImEiLCBQLm5lcSgiYyIpKSwKKyAgICAgICAgICAgICAgICAgICAgd2hlcmUoImEiLCBuZXEoImMiKSksCiAgICAgICAgICAgICAgICAgICAgIGFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKSwKICAgICAgICAgICAgICAgICAgICAgb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5vdXQoImtub3dzIikuaGFzKCJuYW1lIiwgInZhZGFzIiksCkBAIC04MjQsNyArODI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5pbigid3JpdHRlbkJ5IikuYXMoImIiKSwKICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYyIpLAogICAgICAgICAgICAgICAgICAgICBhcygiYyIpLm91dCgid3JpdHRlbkJ5IikuYXMoImQiKSwKLSAgICAgICAgICAgICAgICAgICAgd2hlcmUoImQiLCBQLm5lcSgiYSIpKSk7CisgICAgICAgICAgICAgICAgICAgIHdoZXJlKCJkIiwgbmVxKCJhIikpKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtODY1LDcgKzg2NSw3IEBACiAgICAgICAgICAgICByZXR1cm4gZy5WKCkubWF0Y2goCiAgICAgICAgICAgICAgICAgICAgIHdoZXJlKGFuZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLm91dCgiY3JlYXRlZCIpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5pbigiY3JlYXRlZCIpLmNvdW50KCkuaXMoZXEoMykpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5pbigiY3JlYXRlZCIpLmNvdW50KCkuaXMoUC5lcSgzKSkpKSwKICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5ib3RoKCkuYXMoImIiKSwKICAgICAgICAgICAgICAgICAgICAgd2hlcmUoYXMoImIiKS5pbigpKSk7CiAgICAgICAgIH0KQEAgLTkwNyw3ICs5MDcsNyBAQAogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX25vdFhtYXRjaFhhX2FnZV9iX19hX25hbWVfY1hfd2hlcmVYYl9lcVhjWFhfc2VsZWN0WGFYWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm5vdChtYXRjaChfXy5hcygiYSIpLnZhbHVlcygiYWdlIikuYXMoImIiKSwgX18uYXMoImEiKS52YWx1ZXMoIm5hbWUiKS5hcygiYyIpKS53aGVyZSgiYiIsIGVxKCJjIikpLnNlbGVjdCgiYSIpKS52YWx1ZXMoIm5hbWUiKTsKKyAgICAgICAgICAgIHJldHVybiBnLlYoKS5ub3QobWF0Y2goX18uYXMoImEiKS52YWx1ZXMoImFnZSIpLmFzKCJiIiksIF9fLmFzKCJhIikudmFsdWVzKCJuYW1lIikuYXMoImMiKSkud2hlcmUoImIiLCBQLmVxKCJjIikpLnNlbGVjdCgiYSIpKS52YWx1ZXMoIm5hbWUiKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NYXRoVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NYXRoVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGQwODhkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWF0aFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5CaUZ1bmN0aW9uOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9wZXJhdG9yLnN1bTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlci5kZXNjOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ib3RoRTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm1hdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnNhY2s7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnNlbGVjdDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIE1hdGhUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9vdXRFX21hdGhYMF9taW51c19pdFhfYnlYd2VpZ2h0WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9oYXNYYWdlWF92YWx1ZU1hcF9tYXRoWGl0X3BsdXNfaXRYYnlYc2VsZWN0WGFnZVhfdW5mb2xkWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9tYXRoWGFfcGx1c19iWF9ieVhhZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ193aXRoU2lkZUVmZmVjdFh4XzEwMFhfVl9hZ2VfbWF0aFhfX3BsdXNfeFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX21hdGhYYl9wbHVzX2FYX2J5WGluWGNyZWF0ZWRYX2NvdW50WF9ieVhhZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEludGVnZXIsIERvdWJsZT4gZ2V0X2dfd2l0aFNhY2tYMVhfaW5qZWN0WDFYX3JlcGVhdFhzYWNrWHN1bVhfYnlYY29uc3RhbnRYMVhYWF90aW1lc1g1WF9lbWl0X21hdGhYc2luX19YX2J5WHNhY2tYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3Byb2plY3RYYV9iX2NYX2J5WGJvdGhFX3dlaWdodF9zdW1YX2J5WGJvdGhFX2NvdW50WF9ieVhuYW1lWF9vcmRlcl9ieVhtYXRoWGFfZGl2X2JYX2Rlc2NYX3NlbGVjdFhjWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfbWF0aFgwX21pbnVzX2l0WF9ieVh3ZWlnaHRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0RV9tYXRoWDBfbWludXNfaXRYX2J5WHdlaWdodFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KC0wLjQsIC0wLjQsIC0wLjUsIC0xLjAsIC0xLjAsIC0wLjIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYYWdlWF92YWx1ZU1hcF9tYXRoWGl0X3BsdXNfaXRYYnlYc2VsZWN0WGFnZVhfdW5mb2xkWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF92YWx1ZU1hcF9tYXRoWGl0X3BsdXNfaXRYYnlYc2VsZWN0WGFnZVhfdW5mb2xkWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDY0LjAsIDU4LjAsIDU0LjAsIDcwLjApLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX21hdGhYYV9wbHVzX2JYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX21hdGhYYV9wbHVzX2JYX2J5WGFnZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDU2LjBkLCA2MS4wZCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2lkZUVmZmVjdFh4XzEwMFhfVl9hZ2VfbWF0aFhfX3BsdXNfeFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYeF8xMDBYX1ZfYWdlX21hdGhYX19wbHVzX3hYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgxMjkuMGQsIDEyNy4wZCwgMTMyLjBkLCAxMzUuMGQpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfbWF0aFhiX3BsdXNfYVhfYnlYaW5YY3JlYXRlZFhfY291bnRYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfbWF0aFhiX3BsdXNfYVhfYnlYaW5YY3JlYXRlZFhfY291bnRYX2J5WGFnZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDMyLjBkLCAzMy4wZCwgMzUuMGQsIDM4LjBkKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTYWNrWDFYX2luamVjdFgxWF9yZXBlYXRYc2Fja1hzdW1YX2J5WGNvbnN0YW50WDFYWFhfdGltZXNYNVhfZW1pdF9tYXRoWHNpbl9fWF9ieVhzYWNrWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEludGVnZXIsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNhY2tYMVhfaW5qZWN0WDFYX3JlcGVhdFhzYWNrWHN1bVhfYnlYY29uc3RhbnRYMVhYWF90aW1lc1g1WF9lbWl0X21hdGhYc2luX19YX2J5WHNhY2tYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC45MDkyOTc0MjY4MjU2ODE3ZCwgdHJhdmVyc2FsLm5leHQoKSwgMC4wMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC4xNDExMjAwMDgwNTk4NjcyZCwgdHJhdmVyc2FsLm5leHQoKSwgMC4wMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoLTAuNzU2ODAyNDk1MzA3OTI4MmQsIHRyYXZlcnNhbC5uZXh0KCksIDAuMDFkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKC0wLjk1ODkyNDI3NDY2MzEzODVkLCB0cmF2ZXJzYWwubmV4dCgpLCAwLjAxZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygtMC4yNzk0MTU0OTgxOTg5MjU4NmQsIHRyYXZlcnNhbC5uZXh0KCksIDAuMDFkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcHJvamVjdFhhX2JfY1hfYnlYYm90aEVfd2VpZ2h0X3N1bVhfYnlYYm90aEVfY291bnRYX2J5WG5hbWVYX29yZGVyX2J5WG1hdGhYYV9kaXZfYlhfZGVzY1hfc2VsZWN0WGNYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcHJvamVjdFhhX2JfY1hfYnlYYm90aEVfd2VpZ2h0X3N1bVhfYnlYYm90aEVfY291bnRYX2J5WG5hbWVYX29yZGVyX2J5WG1hdGhYYV9kaXZfYlhfZGVzY1hfc2VsZWN0WGNYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgicmlwcGxlIiwgImpvc2giLCAibWFya28iLCAidmFkYXMiLCAibG9wIiwgInBldGVyIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgTWF0aFRlc3QgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9vdXRFX21hdGhYMF9taW51c19pdFhfYnlYd2VpZ2h0WCgpIHsKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLTE5NzkgLSBzaG91bGQgd29yayBpbiBPTEFQCi0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLm1hdGgoIjAtXyIpLmJ5KCJ3ZWlnaHQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2hhc1hhZ2VYX3ZhbHVlTWFwX21hdGhYaXRfcGx1c19pdFhieVhzZWxlY3RYYWdlWF91bmZvbGRYWCgpIHsKLSAgICAgICAgICAgIC8vIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLTE5NzkgLSBzaG91bGQgd29yayBpbiBPTEFQCi0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS52YWx1ZU1hcCgpLm1hdGgoIl8rXyIpLmJ5KHNlbGVjdCgiYWdlIikudW5mb2xkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9tYXRoWGFfcGx1c19iWF9ieVhhZ2VYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikubWF0aCgiYSArIGIiKS5ieSgiYWdlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYeF8xMDBYX1ZfYWdlX21hdGhYX19wbHVzX3hYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoIngiLCAxMDApLlYoKS52YWx1ZXMoImFnZSIpLm1hdGgoIl8gKyB4Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfbWF0aFhiX3BsdXNfYVhfYnlYaW5YY3JlYXRlZFhfY291bnRYX2J5WGFnZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoImNyZWF0ZWQiKS5hcygiYiIpLm1hdGgoImIgKyBhIikuYnkoaW4oImNyZWF0ZWQiKS5jb3VudCgpKS5ieSgiYWdlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBEb3VibGU+IGdldF9nX3dpdGhTYWNrWDFYX2luamVjdFgxWF9yZXBlYXRYc2Fja1hzdW1YX2J5WGNvbnN0YW50WDFYWFhfdGltZXNYNVhfZW1pdF9tYXRoWHNpbl9fWF9ieVhzYWNrWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjaygoQmlGdW5jdGlvbikgc3VtKS5ieShfXy5jb25zdGFudCgxKSkpLnRpbWVzKDUpLmVtaXQoKS5tYXRoKCJzaW4gXyIpLmJ5KHNhY2soKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9wcm9qZWN0WGFfYl9jWF9ieVhib3RoRV93ZWlnaHRfc3VtWF9ieVhib3RoRV9jb3VudFhfYnlYbmFtZVhfb3JkZXJfYnlYbWF0aFhhX2Rpdl9iWF9kZXNjWF9zZWxlY3RYY1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucHJvamVjdCgiYSIsICJiIiwgImMiKS5ieShib3RoRSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLmJ5KGJvdGhFKCkuY291bnQoKSkuYnkoIm5hbWUiKS5vcmRlcigpLmJ5KG1hdGgoImEgLyBiIiksIGRlc2MpLnNlbGVjdCgiYyIpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWF4VGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NYXhUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NGVjYmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NYXhUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWF4VGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2FnZV9tYXgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2FnZV9mb2xkX21heFhsb2NhbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21heCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21heFhsb2NhbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWF4KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gZ2V0X2dfVl9mb29fbWF4KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gZ2V0X2dfVl9mb29fZm9sZF9tYXhYbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX25hbWVfbWF4KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX25hbWVfZm9sZF9tYXhYbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9yZXBlYXRYYm90aFhfdGltZXNYNVhfYWdlX21heCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tYXhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9tYXhYbG9jYWxYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2VfbWF4KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZV9tYXgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDM1KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdlX2ZvbGRfbWF4WGxvY2FsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2VfZm9sZF9tYXhYbG9jYWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWF4KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWF4KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9tYXhYbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9tYXhYbG9jYWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9tYXgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9tYXgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9mb29fbWF4KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2Zvb19tYXgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9mb29fZm9sZF9tYXhYbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2Zvb19mb2xkX21heFhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9uYW1lX21heCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX25hbWVfbWF4KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgidmFkYXMiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbmFtZV9mb2xkX21heFhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9uYW1lX2ZvbGRfbWF4WGxvY2FsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoInZhZGFzIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWF4KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWF4KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9ncm91cF9ieVhuYW1lWF9ieVhib3RoRV93ZWlnaHRfbWF4WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21heFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE51bWJlcj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMCwgbWFwLmdldCgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC40LCBtYXAuZ2V0KCJsb3AiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3ZhbHVlc1hhZ2VYX21heFhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfbWF4WGxvY2FsWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgTWF4VGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2FnZV9tYXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5tYXgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfbWF4WGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikubWF4KFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21heCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikudW5mb2xkKCkubWF4KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdlX2ZvbGRfbWF4WGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS5tYXgoU2NvcGUubG9jYWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWF4KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYWFhenp6IikuYnkoImFnZSIpLmNhcCgiYWFhenp6IikudW5mb2xkKCkubWF4KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IGdldF9nX1ZfZm9vX21heCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLm1heCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiBnZXRfZ19WX2Zvb19mb2xkX21heFhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX25hbWVfbWF4KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm1heCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfbmFtZV9mb2xkX21heFhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDVYX2FnZV9tYXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucmVwZWF0KGJvdGgoKSkudGltZXMoNSkudmFsdWVzKCJhZ2UiKS5tYXgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21heFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikuPFN0cmluZywgTnVtYmVyPmdyb3VwKCkuYnkoIm5hbWUiKS5ieShib3RoRSgpLnZhbHVlcygid2VpZ2h0IikubWF4KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX21heFhsb2NhbFgoZmluYWwgT2JqZWN0IHZpZDEpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodmlkMSkudmFsdWVzKCJhZ2UiKS5tYXgoU2NvcGUubG9jYWwpOwotICAgICAgICB9OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVhblRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVhblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE3ODdlMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01lYW5UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWVhblRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2FnZV9tZWFuKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2FnZV9mb2xkX21lYW5YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2Zvb19tZWFuKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2Zvb19mb2xkX21lYW5YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21lYW5YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX21lYW5YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWVhbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9tZWFuWGxvY2FsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21lYW4oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8SW50ZWdlciwgRG91YmxlPiBnZXRfZ19pbmplY3RYbnVsbF8xMF8yMF9udWxsWF9tZWFuKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPExpc3Q8SW50ZWdlcj4sIERvdWJsZT4gZ2V0X2dfaW5qZWN0WGxpc3RYbnVsbF8xMF8yMF9udWxsWFhfbWVhblhsb2NhbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfbWVhblhsb2NhbFgoZmluYWwgT2JqZWN0IHZpZDEpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZV9tZWFuKCkgewotICAgICAgICBmb3IgKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsIDogQXJyYXlzLmFzTGlzdChnZXRfZ19WX2FnZV9tZWFuKCksIGdldF9nX1ZfYWdlX2ZvbGRfbWVhblhsb2NhbFgoKSkpIHsKLSAgICAgICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICAgICAgZmluYWwgRG91YmxlIG1lYW4gPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMwLjc1LCBtZWFuLCAwLjA1KTsKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2Zvb19tZWFuKCkgewotICAgICAgICBmb3IgKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsIDogQXJyYXlzLmFzTGlzdChnZXRfZ19WX2Zvb19tZWFuKCksIGdldF9nX1ZfZm9vX2ZvbGRfbWVhblhsb2NhbFgoKSkpIHsKLSAgICAgICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfbWVhblhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9tZWFuWGxvY2FsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWVhbigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWVhbigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9ncm91cF9ieVhuYW1lWF9ieVhib3RoRV93ZWlnaHRfbWVhblgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tZWFuWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTnVtYmVyPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMS4wLCBtYXAuZ2V0KCJyaXBwbGUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjAgLyAzLCBtYXAuZ2V0KCJsb3AiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX21lYW5YbG9jYWxYKCkgewotICAgICAgICBmb3IgKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsIDogQXJyYXlzLmFzTGlzdChnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWVhbigpLCBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX21lYW5YbG9jYWxYKCkpKSB7Ci0gICAgICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgICAgIGZpbmFsIERvdWJsZSBtZWFuID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzMC43NSwgbWVhbiwgMC4wNSk7Ci0gICAgICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WG51bGxfMTBfMjBfbnVsbFhfbWVhbigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEludGVnZXIsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfaW5qZWN0WG51bGxfMTBfMjBfbnVsbFhfbWVhbigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgRG91YmxlIG1lYW4gPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTUuMDAsIG1lYW4sIDAuMDUpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFhsaXN0WG51bGxfMTBfMjBfbnVsbFhYX21lYW5YbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8TGlzdDxJbnRlZ2VyPiwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYbGlzdFhudWxsXzEwXzIwX251bGxYWF9tZWFuWGxvY2FsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgRG91YmxlIG1lYW4gPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTUuMDAsIG1lYW4sIDAuMDUpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdmFsdWVzWGFnZVhfbWVhblhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9tZWFuWGxvY2FsWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOS4wKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBNZWFuVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1ZfYWdlX21lYW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5tZWFuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9tZWFuWGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikubWVhbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21lYW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnVuZm9sZCgpLm1lYW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX2FnZV9mb2xkX21lYW5YbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZfZm9vX21lYW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5tZWFuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9mb29fZm9sZF9tZWFuWGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLmZvbGQoKS5tZWFuKFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21lYW5YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLjxTdHJpbmcsIE51bWJlcj5ncm91cCgpLmJ5KCJuYW1lIikuYnkoYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm1lYW4oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9tZWFuWGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikubWVhbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21lYW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1lYW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEludGVnZXIsIERvdWJsZT4gZ2V0X2dfaW5qZWN0WG51bGxfMTBfMjBfbnVsbFhfbWVhbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdChudWxsLCAxMCwgMjAsIG51bGwpLm1lYW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPExpc3Q8SW50ZWdlcj4sIERvdWJsZT4gZ2V0X2dfaW5qZWN0WGxpc3RYbnVsbF8xMF8yMF9udWxsWFhfbWVhblhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QoQXJyYXlzLmFzTGlzdChudWxsLCAxMCwgMjAsIG51bGwpKS5tZWFuKFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX21lYW5YbG9jYWxYKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikubWVhbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH07Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWVyZ2VFZGdlVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVkZ2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZDgwMGUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZUVkZ2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkFic3RyYWN0R3JlbWxpblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnRTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuTWVyZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5zZWxlY3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Db2xsZWN0aW9uVXRpbC5hc01hcDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nRW5kc1dpdGguZW5kc1dpdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIE1lcmdlRWRnZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5UZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX21lcmdlRVhsYWJlbF9zZWxmX3dlaWdodF8wNVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc193ZWlnaHRfMDVYX2V4aXN0cygpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9rbm93c1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxNYXA8T2JqZWN0LE9iamVjdD4sIEVkZ2U+IGdldF9nX2luamVjdFhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX21lcmdlRSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19tZXJnZUVfd2l0aF9vdXRWX2luVl9vcHRpb25zKCk7Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuU0lNUExFKQotICAgIHB1YmxpYyB2b2lkIGdfVl9tZXJnZUVYbGFiZWxfc2VsZl93ZWlnaHRfMDVYKCkgewotICAgICAgICBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgInN0ZXBoZW4iKS5pdGVyYXRlKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbWVyZ2VFWGxhYmVsX3NlbGZfd2VpZ2h0XzA1WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzZWxmIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAuNWQsIGVkZ2UuPERvdWJsZT52YWx1ZSgid2VpZ2h0IikuZG91YmxlVmFsdWUoKSwgMC4wMDAxZCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5TSU1QTEUpCi0gICAgcHVibGljIHZvaWQgZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWCgpIHsKLSAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCAxMDApLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuCi0gICAgICAgICAgICAgICAgYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgMTAxKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLml0ZXJhdGUoKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZWRnZS5vdXRWZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMSwgZWRnZS5pblZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5FKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuU0lNUExFKQotICAgIHB1YmxpYyB2b2lkIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc193ZWlnaHRfMDVYX2V4aXN0cygpIHsKLSAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCAxMDApLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS4KLSAgICAgICAgICAgICAgICBhZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCAxMDEpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS4KLSAgICAgICAgICAgICAgICBhZGRFKCJrbm93cyIpLmZyb20oImEiKS50bygiYiIpLml0ZXJhdGUoKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfd2VpZ2h0XzA1WF9leGlzdHMoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygia25vd3MiLCBlZGdlLmxhYmVsKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAwLCBlZGdlLm91dFZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAxLCBlZGdlLmluVmVydGV4KCkuaWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjVkLCBlZGdlLjxEb3VibGU+dmFsdWUoIndlaWdodCIpLmRvdWJsZVZhbHVlKCksIDAuMDAwMWQpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5FKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuU0lNUExFKQotICAgIHB1YmxpYyB2b2lkIGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgZmFpbGVkIGFzIHZlcnRpY2VzIGFyZSBub3QgY3JlYXRlZCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoZXguZ2V0TWVzc2FnZSgpLCBlbmRzV2l0aCgiVmVydGV4IGlkIGNvdWxkIG5vdCBiZSByZXNvbHZlZCBmcm9tIG1lcmdlRTogMTAwIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KGcuRSgpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlNJTVBMRSkKLSAgICBwdWJsaWMgdm9pZCBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzKCkgewotICAgICAgICBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFQuaWQsIDEwMCkucHJvcGVydHkoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLgotICAgICAgICAgICAgICAgIGFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFQuaWQsIDEwMSkucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5hcygiYiIpLgotICAgICAgICAgICAgICAgIGFkZEUoImtub3dzIikuZnJvbSgiYSIpLnRvKCJiIikuaXRlcmF0ZSgpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHMoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygia25vd3MiLCBlZGdlLmxhYmVsKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAwLCBlZGdlLm91dFZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTAxLCBlZGdlLmluVmVydGV4KCkuaWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiTiIsIGVkZ2UuPFN0cmluZz52YWx1ZSgiY3JlYXRlZCIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBJdGVyYXRvclV0aWxzLmNvdW50KGcuRSgpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlNJTVBMRSkKLSAgICBwdWJsaWMgdm9pZCBnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWQoKSB7Ci0gICAgICAgIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgMTAwKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLmFzKCJhIikuCi0gICAgICAgICAgICAgICAgYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgMTAxKS5wcm9wZXJ0eSgibmFtZSIsICJ2YWRhcyIpLmFzKCJiIikuCi0gICAgICAgICAgICAgICAgYWRkRSgia25vd3MiKS5mcm9tKCJhIikudG8oImIiKS5wcm9wZXJ0eSgiY3JlYXRlZCIsIlkiKS5pdGVyYXRlKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZWRnZS5vdXRWZXJ0ZXgoKS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMSwgZWRnZS5pblZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIk4iLCBlZGdlLjxTdHJpbmc+dmFsdWUoImNyZWF0ZWQiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgSXRlcmF0b3JVdGlscy5jb3VudChnLkUoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5TSU1QTEUpCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9rbm93c1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCgpIHsKLSAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCAxMDApLnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS4KLSAgICAgICAgICAgICAgICBhZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCAxMDEpLnByb3BlcnR5KCJuYW1lIiwgInZhZGFzIikuYXMoImIiKS4KLSAgICAgICAgICAgICAgICBhZGRFKCJrbm93cyIpLmZyb20oImEiKS50bygiYiIpLnByb3BlcnR5KCJjcmVhdGVkIiwiWSIpLgotICAgICAgICAgICAgICAgIGFkZEUoImtub3dzIikuZnJvbSgiYSIpLnRvKCJiIikuaXRlcmF0ZSgpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9rbm93c1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgSXRlcmF0b3JVdGlscy5jb3VudCh0cmF2ZXJzYWwpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5FKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5FKCkuaGFzTGFiZWwoImtub3dzIikuaGFzKCJjcmVhdGVkIiwgIk4iKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5TSU1QTEUpCi0gICAgcHVibGljIHZvaWQgZ19pbmplY3RYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUUoKSB7Ci0gICAgICAgIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoVC5pZCwgMTAwKS5wcm9wZXJ0eSgibmFtZSIsICJtYXJrbyIpLgotICAgICAgICAgICAgICAgIGFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFQuaWQsIDEwMSkucHJvcGVydHkoIm5hbWUiLCAidmFkYXMiKS5pdGVyYXRlKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxNYXA8T2JqZWN0LE9iamVjdD4sIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX2luamVjdFhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX21lcmdlRSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgSXRlcmF0b3JVdGlscy5jb3VudCh0cmF2ZXJzYWwpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5FKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKDEwMCkub3V0KCJrbm93cyIpLmhhc0lkKDEwMSkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuU0lNUExFKQotICAgIHB1YmxpYyB2b2lkIGdfbWVyZ2VFX3dpdGhfb3V0Vl9pblZfb3B0aW9ucygpIHsKLSAgICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eShULmlkLCAxKQotICAgICAgICAgLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KFQuaWQsIDIpCi0gICAgICAgICAuaXRlcmF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19tZXJnZUVfd2l0aF9vdXRWX2luVl9vcHRpb25zKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBJdGVyYXRvclV0aWxzLmNvdW50KHRyYXZlcnNhbCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoMSkub3V0KCJrbm93cyIpLmhhc0lkKDIpKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgTWVyZ2VFZGdlVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX21lcmdlRVhsYWJlbF9zZWxmX3dlaWdodF8wNVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoInYiKS5tZXJnZUUoYXNNYXAoVC5sYWJlbCwgInNlbGYiLCAid2VpZ2h0IiwgMC41ZCwgRGlyZWN0aW9uLk9VVCwgTWVyZ2Uub3V0ViwgRGlyZWN0aW9uLklOLCBNZXJnZS5pblYpKS5vcHRpb24oTWVyZ2Uub3V0Viwgc2VsZWN0KCJ2IikpLm9wdGlvbihNZXJnZS5pblYsIHNlbGVjdCgidiIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcubWVyZ2VFKGFzTWFwKFQubGFiZWwsICJrbm93cyIsIERpcmVjdGlvbi5JTiwgbmV3IFJlZmVyZW5jZVZlcnRleCgxMDEpLCBEaXJlY3Rpb24uT1VULCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNfd2VpZ2h0XzA1WF9leGlzdHMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5tZXJnZUUoYXNNYXAoVC5sYWJlbCwgImtub3dzIiwgRGlyZWN0aW9uLklOLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMSksIERpcmVjdGlvbi5PVVQsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMTAwKSwgIndlaWdodCIsIDAuNWQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5tZXJnZUUoYXNNYXAoVC5sYWJlbCwgImtub3dzIiwgRGlyZWN0aW9uLklOLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMSksIERpcmVjdGlvbi5PVVQsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMTAwKSkpLgotICAgICAgICAgICAgICAgICAgICBvcHRpb24oTWVyZ2Uub25DcmVhdGUsIGFzTWFwKFQubGFiZWwsICJrbm93cyIsIERpcmVjdGlvbi5JTiwgbmV3IFJlZmVyZW5jZVZlcnRleCgxMDEpLCBEaXJlY3Rpb24uT1VULCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMCksICJjcmVhdGVkIiwgIlkiKSkuCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbihNZXJnZS5vbk1hdGNoLCBhc01hcCgiY3JlYXRlZCIsICJOIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5tZXJnZUUoYXNNYXAoVC5sYWJlbCwgImtub3dzIiwgRGlyZWN0aW9uLklOLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMSksIERpcmVjdGlvbi5PVVQsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMTAwKSkpLgotICAgICAgICAgICAgICAgICAgICBvcHRpb24oTWVyZ2Uub25DcmVhdGUsIGFzTWFwKFQubGFiZWwsICJrbm93cyIsIERpcmVjdGlvbi5JTiwgbmV3IFJlZmVyZW5jZVZlcnRleCgxMDEpLCBEaXJlY3Rpb24uT1VULCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMCksICJjcmVhdGVkIiwgIlkiKSkuCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbihNZXJnZS5vbk1hdGNoLCBhc01hcCgiY3JlYXRlZCIsICJOIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLm1lcmdlRShhc01hcChULmxhYmVsLCAia25vd3MiLCBEaXJlY3Rpb24uSU4sIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMTAxKSwgRGlyZWN0aW9uLk9VVCwgbmV3IFJlZmVyZW5jZVZlcnRleCgxMDApKSkuCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgYXNNYXAoVC5sYWJlbCwgImtub3dzIiwgRGlyZWN0aW9uLklOLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMSksIERpcmVjdGlvbi5PVVQsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMTAwKSwgImNyZWF0ZWQiLCAiWSIpKS4KLSAgICAgICAgICAgICAgICAgICAgb3B0aW9uKE1lcmdlLm9uTWF0Y2gsIGFzTWFwKCJjcmVhdGVkIiwgIk4iKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvX1hfbWVyZ2VFWGxhYmVsX2tub3dzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwibmFtZSIsIm1hcmtvIikuCi0gICAgICAgICAgICAgICAgICAgICBtZXJnZUUoYXNNYXAoVC5sYWJlbCwgImtub3dzIikpLgotICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24oTWVyZ2Uub25DcmVhdGUsIGFzTWFwKFQubGFiZWwsICJrbm93cyIsIERpcmVjdGlvbi5JTiwgbmV3IFJlZmVyZW5jZVZlcnRleCgxMDEpLCBEaXJlY3Rpb24uT1VULCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMCksICJjcmVhdGVkIiwgIlkiKSkuCi0gICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbihNZXJnZS5vbk1hdGNoLCBhc01hcCgiY3JlYXRlZCIsICJOIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8TWFwPE9iamVjdCxPYmplY3Q+LCBFZGdlPiBnZXRfZ19pbmplY3RYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QoKE1hcDxPYmplY3QsT2JqZWN0PikgYXNNYXAoVC5sYWJlbCwgImtub3dzIiwgRGlyZWN0aW9uLklOLCBuZXcgUmVmZXJlbmNlVmVydGV4KDEwMSksIERpcmVjdGlvbi5PVVQsIG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMTAwKSkpLm1lcmdlRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSxFZGdlPiBnZXRfZ19tZXJnZUVfd2l0aF9vdXRWX2luVl9vcHRpb25zKCkgewotICAgICAgICAgICAgcmV0dXJuIGcubWVyZ2VFKGFzTWFwKFQubGFiZWwsICJrbm93cyIsIERpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFYsIERpcmVjdGlvbi5JTiwgTWVyZ2UuaW5WKSkKLSAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihNZXJnZS5vdXRWLCBhc01hcChULmlkLCAxKSkKLSAgICAgICAgICAgICAgICAgICAgLm9wdGlvbihNZXJnZS5pblYsIGFzTWFwKFQuaWQsIDIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01lcmdlVmVydGV4VGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9NZXJnZVZlcnRleFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZhMWNkNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01lcmdlVmVydGV4VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkFic3RyYWN0R3JlbWxpblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk1lcmdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLkNvbGxlY3Rpb25VdGlsLmFzTWFwOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLQotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTWVyZ2VWZXJ0ZXhUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8SW50ZWdlciwgVmVydGV4PiBnZXRfZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEludGVnZXIsIFZlcnRleD4gZ2V0X2dfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxPYmplY3QsIFZlcnRleD4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF93aXRoU2lkZUVmZmVjdFhtX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb24oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LCBWZXJ0ZXg+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhYX29wdGlvbigpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZlcnRleC5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgdmVydGV4LjxTdHJpbmc+dmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8SW50ZWdlciwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3RlcGhlbiIsIHZlcnRleC48U3RyaW5nPnZhbHVlKCJuYW1lIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB2ZXJ0ZXguPFN0cmluZz52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0gICAgfQotCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1BST1BFUlRZKQotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX2luamVjdFgwWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB2ZXJ0ZXguPFN0cmluZz52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9vcHRpb24oKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZlcnRleC5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdGVwaGVuIiwgdmVydGV4LjxTdHJpbmc+dmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxOSwgdmVydGV4LjxJbnRlZ2VyPnZhbHVlKCJhZ2UiKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg3LCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfb3B0aW9uWG9uTWF0Y2hfYWdlXzE5WF9vcHRpb24oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmVydGV4LmxhYmVsKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdmVydGV4LjxTdHJpbmc+dmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxOSwgdmVydGV4LjxJbnRlZ2VyPnZhbHVlKCJhZ2UiKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBJdGVyYXRvclV0aWxzLmNvdW50KGcuVigpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9QUk9QRVJUWSkKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfd2l0aFNpZGVFZmZlY3RYbV9sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWFhfb3B0aW9uKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8T2JqZWN0LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfd2l0aFNpZGVFZmZlY3RYbV9sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWFhfb3B0aW9uKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3RlcGhlbiIsIHZlcnRleC48U3RyaW5nPnZhbHVlKCJuYW1lIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTksIHZlcnRleC48SW50ZWdlcj52YWx1ZSgiYWdlIikuaW50VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgSXRlcmF0b3JVdGlscy5jb3VudChnLlYoKSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9BRERfUFJPUEVSVFkpCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF93aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9vcHRpb24oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfb3B0aW9uKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2ZXJ0ZXgubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB2ZXJ0ZXguPFN0cmluZz52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDE5LCB2ZXJ0ZXguPEludGVnZXI+dmFsdWUoImFnZSIpLmludFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIEl0ZXJhdG9yVXRpbHMuY291bnQoZy5WKCkpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBNZXJnZVZlcnRleFRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcubWVyZ2VWKGFzTWFwKFQubGFiZWwsICJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEludGVnZXIsIFZlcnRleD4gZ2V0X2dfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QoMCkubWVyZ2VWKGFzTWFwKFQubGFiZWwsICJwZXJzb24iLCAibmFtZSIsICJtYXJrbyIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEludGVnZXIsIFZlcnRleD4gZ2V0X2dfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdCgwKS5tZXJnZVYoYXNNYXAoVC5sYWJlbCwgInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcubWVyZ2VWKGFzTWFwKFQubGFiZWwsICJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLm1lcmdlVihhc01hcChULmxhYmVsLCAicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIGFzTWFwKFQubGFiZWwsICJwZXJzb24iLCAibmFtZSIsICJzdGVwaGVuIiwgImFnZSIsIDE5KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLm1lcmdlVihhc01hcChULmxhYmVsLCAicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIGFzTWFwKCJhZ2UiLCAxOSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LCBWZXJ0ZXg+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfd2l0aFNpZGVFZmZlY3RYbV9sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWFhfb3B0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImMiLCBhc01hcChULmxhYmVsLCAicGVyc29uIiwgIm5hbWUiLCAic3RlcGhlbiIpKS4KLSAgICAgICAgICAgICAgICAgICAgIHdpdGhTaWRlRWZmZWN0KCJtIiwgYXNNYXAoVC5sYWJlbCwgInBlcnNvbiIsICJuYW1lIiwgInN0ZXBoZW4iLCAiYWdlIiwgMTkpKS4KLSAgICAgICAgICAgICAgICAgICAgIG1lcmdlVihfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoIm0iKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxPYmplY3QsIFZlcnRleD4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfd2l0aFNpZGVFZmZlY3RYbV9hZ2VfMTlYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfb3B0aW9uKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImMiLCBhc01hcChULmxhYmVsLCAicGVyc29uIiwgIm5hbWUiLCAibWFya28iKSkuCi0gICAgICAgICAgICAgICAgICAgIHdpdGhTaWRlRWZmZWN0KCJtIiwgYXNNYXAoImFnZSIsIDE5KSkuCi0gICAgICAgICAgICAgICAgICAgIG1lcmdlVihfXy5zZWxlY3QoImMiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdCgibSIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL01pblRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWluVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmJjY2U5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvTWluVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIE1pblRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9hZ2VfbWluKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9hZ2VfZm9sZF9taW5YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfbWluWGxvY2FsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9taW4oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9taW5YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21pbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IGdldF9nX1ZfZm9vX21pbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IGdldF9nX1ZfZm9vX2ZvbGRfbWluWGxvY2FsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9uYW1lX21pbigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9uYW1lX2ZvbGRfbWluWGxvY2FsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDVYX2FnZV9taW4oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9ncm91cF9ieVhuYW1lWF9ieVhib3RoRV93ZWlnaHRfbWluWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IGdldF9nX1ZfZm9vX2luamVjdFg5OTk5OTk5OTk5WF9taW4oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX21pblhsb2NhbFgoZmluYWwgT2JqZWN0IHZpZDEpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZV9taW4oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdlX21pbigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMjcpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2VfZm9sZF9taW5YbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FnZV9mb2xkX21pblhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI3KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21pblhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21pblhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI3KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9taW4oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9taW4oKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI3KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZm9vX21pbigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9mb29fbWluKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZm9vX2ZvbGRfbWluWGxvY2FsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9mb29fZm9sZF9taW5YbG9jYWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbmFtZV9taW4oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9uYW1lX21pbigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImpvc2giKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21pblhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21pblhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21pbigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21pbigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX25hbWVfZm9sZF9taW5YbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbmFtZV9mb2xkX21pblhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWluKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWluKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyNyksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9ncm91cF9ieVhuYW1lWF9ieVhib3RoRV93ZWlnaHRfbWluWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21pblgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE51bWJlcj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMCwgbWFwLmdldCgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC4yLCBtYXAuZ2V0KCJsb3AiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2Zvb19pbmplY3RYOTk5OTk5OTk5OVhfbWluKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2Zvb19pbmplY3RYOTk5OTk5OTk5OVhfbWluKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoOTk5OTk5OTk5OUwsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdmFsdWVzWGFnZVhfbWluWGxvY2FsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9taW5YbG9jYWxYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI5KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBNaW5UZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdlX21pbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZXMoImFnZSIpLm1pbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9taW5YbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS5taW4oU2NvcGUubG9jYWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWluKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJmb28iKS5jYXAoImEiKS51bmZvbGQoKS5taW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVl9hZ2VfZm9sZF9taW5YbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIENvbXBhcmFibGU+IGdldF9nX1ZfZm9vX21pbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLm1pbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBDb21wYXJhYmxlPiBnZXRfZ19WX2Zvb19mb2xkX21pblhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJmb28iKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX25hbWVfbWluKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygibmFtZSIpLm1pbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfbmFtZV9mb2xkX21pblhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21pblhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLm1pbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9taW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImFnZSIpLmNhcCgiYSIpLnVuZm9sZCgpLm1pbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ19WX3JlcGVhdFhib3RoWF90aW1lc1g1WF9hZ2VfbWluKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChib3RoKCkpLnRpbWVzKDUpLnZhbHVlcygiYWdlIikubWluKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9taW5YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLjxTdHJpbmcsIE51bWJlcj5ncm91cCgpLmJ5KCJuYW1lIikuYnkoYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLm1pbigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgQ29tcGFyYWJsZT4gZ2V0X2dfVl9mb29faW5qZWN0WDk5OTk5OTk5OTlYX21pbigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZXMoImZvbyIpLmluamVjdCg5OTk5OTk5OTk5TCkubWluKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfbWluWGxvY2FsWChmaW5hbCBPYmplY3QgdmlkMSkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2aWQxKS52YWx1ZXMoImFnZSIpLm1pbihTY29wZS5sb2NhbCk7Ci0gICAgICAgIH07Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvT3JkZXJUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL09yZGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWQ1ZmJjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvT3JkZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MDYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5JZ25vcmVFbmdpbmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5HUkFURUZVTDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXIuZGVzYzsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaGFzOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXNMYWJlbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0RTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uLmtleXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIE9yZGVyVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfbmFtZV9vcmRlcigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9uYW1lX29yZGVyX2J5WGExX2IxWF9ieVhiMl9hMlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3JkZXJfYnlYbmFtZV9hc2NYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3JkZXJfYnlYbmFtZVhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9vdXRFX29yZGVyX2J5WHdlaWdodF9kZXNjWF93ZWlnaHQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3JkZXJfYnlYbmFtZV9hMV9iMVhfYnlYbmFtZV9iMl9hMlhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX29yZGVyX2J5WHNodWZmbGVYX3NlbGVjdFhhX2JYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX29yZGVyX2J5WG91dEVfY291bnRfZGVzY1hfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMaXN0PFZlcnRleD4+PiBnZXRfZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhuYW1lX29yZGVyX2J5WGRlc2NYX2ZvbGRYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxEb3VibGU+PiBnZXRfZ19WX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfb3JkZXJfYnlYc3VtWGxvY2FsWF9kZXNjWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfYXNYdlhfbWFwWGJvdGhFX3dlaWdodF9mb2xkWF9zdW1YbG9jYWxYX2FzWHNYX3NlbGVjdFh2X3NYX29yZGVyX2J5WHNlbGVjdFhzWF9kZXNjWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxWZXJ0ZXg+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfZm9sZF9vcmRlclhsb2NhbFhfYnlYYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9wcm9wZXJ0aWVzX29yZGVyX2J5WGtleV9kZXNjWF9rZXkoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWHNvbmdfbmFtZV9PSEJPWVhfb3V0WGZvbGxvd2VkQnlYX291dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX2J5WHNvbmdUeXBlX2Rlc2NYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbGltaXRYNVhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlX2Rlc2NYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzTGFiZWxYc29uZ1hfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2J5WG5hbWVYX3JhbmdlWDExMF8xMjBYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfZ3JvdXBfYnlYbmFtZVhfYnlYb3V0RV93ZWlnaHRfc3VtWF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcC5FbnRyeTxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9ncm91cF9ieVhuYW1lWF9ieVhvdXRFX3dlaWdodF9zdW1YX3VuZm9sZF9vcmRlcl9ieVh2YWx1ZXNfZGVzY1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXAuRW50cnk8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WWDFYX2VsZW1lbnRNYXBfb3JkZXJYbG9jYWxYX2J5WGtleXNfZGVzY1h1bmZvbGQoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9vcmRlcl9ieVhsYWJlbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3JkZXJfYnlYbGFiZWxfZGVzY1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfb3JkZXJYbG9jYWxYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9uYW1lX29yZGVyKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbmFtZV9vcmRlcigpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiwgImxvcCIsICJtYXJrbyIsICJwZXRlciIsICJyaXBwbGUiLCAidmFkYXMiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbmFtZV9vcmRlcl9ieVhhMV9iMVhfYnlYYjJfYTJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbmFtZV9vcmRlcl9ieVhhMV9iMVhfYnlYYjJfYTJYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgInZhZGFzIiwgInBldGVyIiwgInJpcHBsZSIsICJqb3NoIiwgImxvcCIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vcmRlcl9ieVhuYW1lX2FzY1hfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX29yZGVyX2J5WG5hbWVfYXNjWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoImpvc2giLCAibG9wIiwgIm1hcmtvIiwgInBldGVyIiwgInJpcHBsZSIsICJ2YWRhcyIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vcmRlcl9ieVhuYW1lWF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3JkZXJfYnlYbmFtZVhfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiwgImxvcCIsICJtYXJrbyIsICJwZXRlciIsICJyaXBwbGUiLCAidmFkYXMiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0RV9vcmRlcl9ieVh3ZWlnaHRfZGVzY1hfd2VpZ2h0KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0RV9vcmRlcl9ieVh3ZWlnaHRfZGVzY1hfd2VpZ2h0KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoMS4wZCwgMS4wZCwgMC41ZCwgMC40ZCwgMC40ZCwgMC4yZCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX29yZGVyX2J5WG5hbWVfYTFfYjFYX2J5WG5hbWVfYjJfYTJYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vcmRlcl9ieVhuYW1lX2ExX2IxWF9ieVhuYW1lX2IyX2EyWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgInZhZGFzIiwgInBldGVyIiwgInJpcHBsZSIsICJqb3NoIiwgImxvcCIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfb3JkZXJfYnlYc2h1ZmZsZVhfc2VsZWN0WGFfYlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX29yZGVyX2J5WHNodWZmbGVYX3NlbGVjdFhhX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGludCBtYXJrb0NvdW50ZXIgPSAwOwotICAgICAgICBpbnQgam9zaENvdW50ZXIgPSAwOwotICAgICAgICBpbnQgcGV0ZXJDb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIE1hcDxTdHJpbmcsIFZlcnRleD4gYmluZGluZ3MgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGJpbmRpbmdzLnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAoYmluZGluZ3MuZ2V0KCJhIikuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSwgYmluZGluZ3MuZ2V0KCJiIikuaWQoKSk7Ci0gICAgICAgICAgICAgICAgbWFya29Db3VudGVyKys7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJpbmRpbmdzLmdldCgiYSIpLmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgoYmluZGluZ3MuZ2V0KCJiIikpLmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSkgfHwgYmluZGluZ3MuZ2V0KCJiIikuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoInJpcHBsZSIpKSk7Ci0gICAgICAgICAgICAgICAgam9zaENvdW50ZXIrKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYmluZGluZ3MuZ2V0KCJhIikuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoInBldGVyIikpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSwgYmluZGluZ3MuZ2V0KCJiIikuaWQoKSk7Ci0gICAgICAgICAgICAgICAgcGV0ZXJDb3VudGVyKys7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZhaWwoIlRoaXMgc3RhdGUgc2hvdWxkIG5vdCBoYXZlIGJlZW4gcmVhY2hhYmxlIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcmtvQ291bnRlciArIGpvc2hDb3VudGVyICsgcGV0ZXJDb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1hcmtvQ291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBwZXRlckNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgam9zaENvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX29yZGVyX2J5WG91dEVfY291bnRfZGVzY1hfYnlYbmFtZVgoKSB7Ci0gICAgICAgIEFycmF5cy5hc0xpc3QoZ2V0X2dfVl9vcmRlcl9ieVhvdXRFX2NvdW50X2Rlc2NYX2J5WG5hbWVYKCkpLmZvckVhY2godHJhdmVyc2FsIC0+IHsKLSAgICAgICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxWZXJ0ZXg+IHZlcnRpY2VzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHZlcnRpY2VzLnNpemUoKSwgNik7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdmVydGljZXMuZ2V0KDApLnZhbHVlKCJuYW1lIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgdmVydGljZXMuZ2V0KDEpLnZhbHVlKCJuYW1lIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXRlciIsIHZlcnRpY2VzLmdldCgyKS52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGljZXMuZ2V0KDMpLnZhbHVlKCJuYW1lIikuZXF1YWxzKCJ2YWRhcyIpIHx8IHZlcnRpY2VzLmdldCgzKS52YWx1ZSgibmFtZSIpLmVxdWFscygicmlwcGxlIikgfHwgdmVydGljZXMuZ2V0KDMpLnZhbHVlKCJuYW1lIikuZXF1YWxzKCJsb3AiKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRpY2VzLmdldCg0KS52YWx1ZSgibmFtZSIpLmVxdWFscygidmFkYXMiKSB8fCB2ZXJ0aWNlcy5nZXQoNCkudmFsdWUoIm5hbWUiKS5lcXVhbHMoInJpcHBsZSIpIHx8IHZlcnRpY2VzLmdldCg0KS52YWx1ZSgibmFtZSIpLmVxdWFscygibG9wIikpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0aWNlcy5nZXQoNSkudmFsdWUoIm5hbWUiKS5lcXVhbHMoInZhZGFzIikgfHwgdmVydGljZXMuZ2V0KDUpLnZhbHVlKCJuYW1lIikuZXF1YWxzKCJyaXBwbGUiKSB8fCB2ZXJ0aWNlcy5nZXQoNSkudmFsdWUoIm5hbWUiKS5lcXVhbHMoImxvcCIpKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhuYW1lX29yZGVyX2J5WGRlc2NYX2ZvbGRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMaXN0PFZlcnRleD4+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhuYW1lX29yZGVyX2J5WGRlc2NYX2ZvbGRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFZlcnRleD4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIExpc3QgbGlzdCA9IG1hcC5nZXQoInNvZnR3YXJlIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBsaXN0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibG9wIiwgbGlzdC5nZXQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInJpcHBsZSIsIGxpc3QuZ2V0KDApKTsKLSAgICAgICAgbGlzdCA9IG1hcC5nZXQoInBlcnNvbiIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgbGlzdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBsaXN0LmdldCgzKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBsaXN0LmdldCgyKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicGV0ZXIiLCBsaXN0LmdldCgxKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidmFkYXMiLCBsaXN0LmdldCgwKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfb3JkZXJfYnlYc3VtWGxvY2FsWF9kZXNjWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxEb3VibGU+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfb3JkZXJfYnlYc3VtWGxvY2FsWF9kZXNjWCgpOwotICAgICAgICBmaW5hbCBMaXN0PExpc3Q8RG91YmxlPj4gbGlzdCA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGxpc3QuZ2V0KDApLnNpemUoKSwgMyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhsaXN0LmdldCgxKS5zaXplKCksIDMpOwotICAgICAgICAvL2Fzc2VydEVxdWFscyhsaXN0LmdldCgyKS5zaXplKCksMyk7ICAvLyB0aGV5IGJvdGggaGF2ZSB2YWx1ZSAxLjAgYW5kIHRodXMgY2FuJ3QgZ3VhcmFudGVlIGEgdGllIG9yZGVyCi0gICAgICAgIC8vYXNzZXJ0RXF1YWxzKGxpc3QuZ2V0KDMpLnNpemUoKSwxKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGxpc3QuZ2V0KDQpLnNpemUoKSwgMSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhsaXN0LmdldCg1KS5zaXplKCksIDEpOwotICAgICAgICAvLy8KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIuNGQsIGxpc3QuZ2V0KDApLnN0cmVhbSgpLnJlZHVjZSgwLjBkLCAoYSwgYikgLT4gYSArIGIpLCAwLjAxZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjlkLCBsaXN0LmdldCgxKS5zdHJlYW0oKS5yZWR1Y2UoMC4wZCwgKGEsIGIpIC0+IGEgKyBiKSwgMC4wMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMS4wZCwgbGlzdC5nZXQoMikuc3RyZWFtKCkucmVkdWNlKDAuMGQsIChhLCBiKSAtPiBhICsgYiksIDAuMDFkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMGQsIGxpc3QuZ2V0KDMpLnN0cmVhbSgpLnJlZHVjZSgwLjBkLCAoYSwgYikgLT4gYSArIGIpLCAwLjAxZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjVkLCBsaXN0LmdldCg0KS5zdHJlYW0oKS5yZWR1Y2UoMC4wZCwgKGEsIGIpIC0+IGEgKyBiKSwgMC4wMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC4yZCwgbGlzdC5nZXQoNSkuc3RyZWFtKCkucmVkdWNlKDAuMGQsIChhLCBiKSAtPiBhICsgYiksIDAuMDFkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYdlhfbWFwWGJvdGhFX3dlaWdodF9mb2xkWF9zdW1YbG9jYWxYX2FzWHNYX3NlbGVjdFh2X3NYX29yZGVyX2J5WHNlbGVjdFhzWF9kZXNjWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1h2WF9tYXBYYm90aEVfd2VpZ2h0X2ZvbGRYX3N1bVhsb2NhbFhfYXNYc1hfc2VsZWN0WHZfc1hfb3JkZXJfYnlYc2VsZWN0WHNYX2Rlc2NYKCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gbGlzdCA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSwgbGlzdC5nZXQoMCkuZ2V0KCJ2IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMi40ZCwgKERvdWJsZSkgbGlzdC5nZXQoMCkuZ2V0KCJzIiksIDAuMWQpOwotICAgICAgICAvLy8KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIiksIGxpc3QuZ2V0KDEpLmdldCgidiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuOWQsIChEb3VibGUpIGxpc3QuZ2V0KDEpLmdldCgicyIpLCAwLjFkKTsKLSAgICAgICAgLy8KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMGQsIChEb3VibGUpIGxpc3QuZ2V0KDIpLmdldCgicyIpLCAwLjFkKTsgICAvLyB0aGV5IGJvdGggaGF2ZSAxLjAgc28geW91IGNhbid0IHRlc3QgdGhlICJ2IiBhcygpLgotICAgICAgICBhc3NlcnRFcXVhbHMoMS4wZCwgKERvdWJsZSkgbGlzdC5nZXQoMykuZ2V0KCJzIiksIDAuMWQpOwotICAgICAgICAvLy8KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInZhZGFzIiksIGxpc3QuZ2V0KDQpLmdldCgidiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAuNWQsIChEb3VibGUpIGxpc3QuZ2V0KDQpLmdldCgicyIpLCAwLjFkKTsKLSAgICAgICAgLy8vCi0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJwZXRlciIpLCBsaXN0LmdldCg1KS5nZXQoInYiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjJkLCAoRG91YmxlKSBsaXN0LmdldCg1KS5nZXQoInMiKSwgMC4xZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoY29udmVydFRvVmVydGV4KGdyYXBoLCAidmFkYXMiKSwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwgY29udmVydFRvVmVydGV4KGdyYXBoLCAiam9zaCIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJwZXRlciIpKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3JYaGFzTGFiZWxYcGVyc29uWF9oYXNYc29mdHdhcmVfbmFtZV9sb3BYWF9vcmRlcl9ieVhhZ2VYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIiksIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInBldGVyIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8VmVydGV4Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGFnZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiBsaXN0ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInZhZGFzIiksIGxpc3QuZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIiksIGxpc3QuZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSwgbGlzdC5nZXQoMikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAicGV0ZXIiKSwgbGlzdC5nZXQoMykpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wcm9wZXJ0aWVzX29yZGVyX2J5WGtleV9kZXNjWF9rZXkoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wcm9wZXJ0aWVzX29yZGVyX2J5WGtleV9kZXNjWF9rZXkoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3JkZXJlZFJlc3VsdHMoQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAibmFtZSIsICJuYW1lIiwgIm5hbWUiLCAibmFtZSIsICJuYW1lIiwgIm5hbWUiLAotICAgICAgICAgICAgICAgICJsYW5nIiwgImxhbmciLAotICAgICAgICAgICAgICAgICJhZ2UiLCAiYWdlIiwgImFnZSIsICJhZ2UiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYc29uZ19uYW1lX09IQk9ZWF9vdXRYZm9sbG93ZWRCeVhfb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfYnlYc29uZ1R5cGVfZGVzY1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYc29uZ19uYW1lX09IQk9ZWF9vdXRYZm9sbG93ZWRCeVhfb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfYnlYc29uZ1R5cGVfZGVzY1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgU3RyaW5nIGxhc3RTb25nVHlwZSA9ICJhIjsKLSAgICAgICAgaW50IGxhc3RQZXJmb3JtYW5jZXMgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGN1cnJlbnRTb25nVHlwZSA9IHZlcnRleC52YWx1ZSgic29uZ1R5cGUiKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50UGVyZm9ybWFuY2VzID0gdmVydGV4LnZhbHVlKCJwZXJmb3JtYW5jZXMiKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoY3VycmVudFBlcmZvcm1hbmNlcyA9PSBsYXN0UGVyZm9ybWFuY2VzIHx8IGN1cnJlbnRQZXJmb3JtYW5jZXMgPiBsYXN0UGVyZm9ybWFuY2VzKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UGVyZm9ybWFuY2VzID09IGxhc3RQZXJmb3JtYW5jZXMpCi0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjdXJyZW50U29uZ1R5cGUuZXF1YWxzKGxhc3RTb25nVHlwZSkgfHwgY3VycmVudFNvbmdUeXBlLmNvbXBhcmVUbyhsYXN0U29uZ1R5cGUpIDwgMCk7Ci0gICAgICAgICAgICBsYXN0U29uZ1R5cGUgPSBjdXJyZW50U29uZ1R5cGU7Ci0gICAgICAgICAgICBsYXN0UGVyZm9ybWFuY2VzID0gY3VycmVudFBlcmZvcm1hbmNlczsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMTQ0LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZV9kZXNjWF9saW1pdFg1WF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYm90aF9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZV9kZXNjWF9saW1pdFg1WF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoInBldGVyIiwgImpvc2giLCAiam9zaCIsICJqb3NoIiwgIm1hcmtvIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBASWdub3JlRW5naW5lKFRyYXZlcnNhbEVuZ2luZS5UeXBlLlNUQU5EQVJEKSAvLyB2YWxpZGF0aW5nIHRoZSBpbnRlcm5hbCBzb3J0L2xpbWl0IHdvcmtzIGluIEdyYXBoQ29tcHV0ZXIKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbmFtZSgpOwotICAgICAgICB0cmF2ZXJzYWwuYXNBZG1pbigpLmFwcGx5U3RyYXRlZ2llcygpOwotICAgICAgICBpZiAoIVRyYXZlcnNhbEhlbHBlci5nZXRGaXJzdFN0ZXBPZkFzc2lnbmFibGVDbGFzcyhPcmRlckdsb2JhbFN0ZXAuY2xhc3MsIHRyYXZlcnNhbC5hc0FkbWluKCkpLmlzUHJlc2VudCgpKQotICAgICAgICAgICAgcmV0dXJuOyAvLyB0b3RhbCBoYWNrIHRvIGF2b2lkIHByb3ZpZGVycyB0aGF0IGRvbid0IGNvbXBpbGUgdG8gT3JkZXJHbG9iYWxTdGVwCi0gICAgICAgIFRyYXZlcnNhbEhlbHBlci5nZXRGaXJzdFN0ZXBPZkFzc2lnbmFibGVDbGFzcyhPcmRlckdsb2JhbFN0ZXAuY2xhc3MsIHRyYXZlcnNhbC5hc0FkbWluKCkpLmdldCgpLnNldExpbWl0KDEpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IHJlc3VsdHMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydFRydWUocmVzdWx0cy5zaXplKCkgPCA4KTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChHUkFURUZVTCkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYc29uZ1hfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2J5WG5hbWVYX3JhbmdlWDExMF8xMjBYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb25nWF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNfZGVzY1hfYnlYbmFtZVhfcmFuZ2VYMTEwXzEyMFhfbmFtZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tPcmRlcmVkUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgICJXQU5HIERBTkcgRE9PRExFIiwgIlRIRSBFTEVWRU4iLCAiV0FZIFRPIEdPIEhPTUUiLCAiRk9PTElTSCBIRUFSVCIsCi0gICAgICAgICAgICAgICAgIkdJTU1FIFNPTUUgTE9WSU5HIiwgIkRVUFJFRVMgRElBTU9ORCBCTFVFUyIsICJDT1JSSU5BIiwgIlBJQ0FTU08gTU9PTiIsCi0gICAgICAgICAgICAgICAgIktOT0NLSU5HIE9OIEhFQVZFTlMgRE9PUiIsICJNRU1QSElTIEJMVUVTIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHBlcnNvblhfZ3JvdXBfYnlYbmFtZVhfYnlYb3V0RV93ZWlnaHRfc3VtWF9vcmRlclhsb2NhbFhfYnlYdmFsdWVzWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfb3JkZXJYbG9jYWxYX2J5WHZhbHVlc1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE51bWJlcj4gbSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgbS5zaXplKCkpOwotICAgICAgICBmaW5hbCBJdGVyYXRvcjxNYXAuRW50cnk8U3RyaW5nLCBOdW1iZXI+PiBpdGVyYXRvciA9IG0uZW50cnlTZXQoKS5pdGVyYXRvcigpOwotICAgICAgICBNYXAuRW50cnk8U3RyaW5nLCBOdW1iZXI+IGVudHJ5ID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBldGVyIiwgZW50cnkuZ2V0S2V5KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC4yLCBlbnRyeS5nZXRWYWx1ZSgpLmRvdWJsZVZhbHVlKCksIDAuMDAwMSk7Ci0gICAgICAgIGVudHJ5ID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBlbnRyeS5nZXRLZXkoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjQsIGVudHJ5LmdldFZhbHVlKCkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKLSAgICAgICAgZW50cnkgPSBpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBlbnRyeS5nZXRLZXkoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjksIGVudHJ5LmdldFZhbHVlKCkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3JkZXJfYnlYbGFiZWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3JkZXJfYnlYbGFiZWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdi5sYWJlbCgpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCB2LmxhYmVsKCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfdW5mb2xkX29yZGVyX2J5WHZhbHVlc19kZXNjWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwLkVudHJ5PFN0cmluZywgTnVtYmVyPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfdW5mb2xkX29yZGVyX2J5WHZhbHVlc19kZXNjWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLQotICAgICAgICAvLyB0aGUgb2JqZWN0IHNob3VsZCBiZSBhIE1hcC5FbnRyeSwgYnV0IEdMVnMgZG9uJ3QgaGF2ZSB0aGF0IG9iamVjdCBzbyB0aGUgYXNzZXJ0aW9uIGlzIG1hZGUgYSBiaXQgbW9yZSBmcmllbmRseS4KLSAgICAgICAgT2JqZWN0IG8gPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBNYXAuRW50cnk8U3RyaW5nLCBOdW1iZXI+IGVudHJ5ID0gbyBpbnN0YW5jZW9mIE1hcC5FbnRyeSA/IChNYXAuRW50cnkpIG8gOiAoKE1hcDxTdHJpbmcsTnVtYmVyPikgbykuZW50cnlTZXQoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuOSwgZW50cnkuZ2V0VmFsdWUoKS5kb3VibGVWYWx1ZSgpLCAwLjAwMDEpOwotICAgICAgICBvID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgZW50cnkgPSBvIGluc3RhbmNlb2YgTWFwLkVudHJ5ID8gKE1hcC5FbnRyeSkgbyA6ICgoTWFwPFN0cmluZyxOdW1iZXI+KSBvKS5lbnRyeVNldCgpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBlbnRyeS5nZXRLZXkoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjQsIGVudHJ5LmdldFZhbHVlKCkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKLSAgICAgICAgbyA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGVudHJ5ID0gbyBpbnN0YW5jZW9mIE1hcC5FbnRyeSA/IChNYXAuRW50cnkpIG8gOiAoKE1hcDxTdHJpbmcsTnVtYmVyPikgbykuZW50cnlTZXQoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXRlciIsIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAuMiwgZW50cnkuZ2V0VmFsdWUoKS5kb3VibGVWYWx1ZSgpLCAwLjAwMDEpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3JkZXJfYnlYbGFiZWxfZGVzY1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vcmRlcl9ieVhsYWJlbF9kZXNjWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNvZnR3YXJlIiwgdi5sYWJlbCgpKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdi5sYWJlbCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfZWxlbWVudE1hcF9vcmRlclhsb2NhbFhfYnlYa2V5c19kZXNjWHVuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgPz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9lbGVtZW50TWFwX29yZGVyWGxvY2FsWF9ieVhrZXlzX2Rlc2NYdW5mb2xkKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotCi0gICAgICAgIGZpbmFsIE9iamVjdCBuYW1lID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgZ2V0S2V5KG5hbWUpKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IGxhYmVsID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFQubGFiZWwsIGdldEtleShsYWJlbCkpOwotICAgICAgICBmaW5hbCBPYmplY3QgaWQgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoVC5pZCwgZ2V0S2V5KGlkKSk7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBhZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImFnZSIsIGdldEtleShhZ2UpKTsKLQotICAgICAgICBhc3NlcnRUaGF0KHRyYXZlcnNhbC5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3ZhbHVlc1hhZ2VYX29yZGVyWGxvY2FsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX29yZGVyWGxvY2FsWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRLZXkoZmluYWwgT2JqZWN0IGt2KSB7Ci0gICAgICAgIC8vIHJlbW90ZXMgcmV0dXJuIExpbmtlZEhhc2hNYXAgYW5kIGVtYmVkZGVkIHJldHVybnMgTWFwLkVudHJ5IDovCi0gICAgICAgIGlmIChrdiBpbnN0YW5jZW9mIE1hcC5FbnRyeSkKLSAgICAgICAgICAgIHJldHVybiAoKE1hcC5FbnRyeSkga3YpLmdldEtleSgpOwotICAgICAgICBlbHNlIGlmIChrdiBpbnN0YW5jZW9mIE1hcCkKLSAgICAgICAgICAgIHJldHVybiAoKE1hcCkga3YpLmtleVNldCgpLml0ZXJhdG9yKCkubmV4dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZXR1cm5lZCB2YWx1ZSBzaG91bGQgYmUgYSBNYXAgb3IgTWFwLkVudHJ5IGJ1dCBnb3Q6ICIgKyBrdi5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgT3JkZXJUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9uYW1lX29yZGVyKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikub3JkZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX25hbWVfb3JkZXJfYnlYYTFfYjFYX2J5WGIyX2EyWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48U3RyaW5nPnZhbHVlcygibmFtZSIpLm9yZGVyKCkuYnkoKGEsIGIpIC0+IGEuc3Vic3RyaW5nKDEsIDIpLmNvbXBhcmVUbyhiLnN1YnN0cmluZygxLCAyKSkpLmJ5KChhLCBiKSAtPiBiLnN1YnN0cmluZygyLCAzKS5jb21wYXJlVG8oYS5zdWJzdHJpbmcoMiwgMykpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX29yZGVyX2J5WG5hbWVfYXNjWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoIm5hbWUiLCBPcmRlci5hc2MpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3JkZXJfYnlYbmFtZVhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9vdXRFX29yZGVyX2J5WHdlaWdodF9kZXNjWF93ZWlnaHQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoIndlaWdodCIsIGRlc2MpLnZhbHVlcygid2VpZ2h0Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vcmRlcl9ieVhuYW1lX2ExX2IxWF9ieVhuYW1lX2IyX2EyWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm9yZGVyKCkuCi0gICAgICAgICAgICAgICAgICAgIDxTdHJpbmc+YnkoIm5hbWUiLCAoYSwgYikgLT4gYS5zdWJzdHJpbmcoMSwgMikuY29tcGFyZVRvKGIuc3Vic3RyaW5nKDEsIDIpKSkuCi0gICAgICAgICAgICAgICAgICAgIDxTdHJpbmc+YnkoIm5hbWUiLCAoYSwgYikgLT4gYi5zdWJzdHJpbmcoMiwgMykuY29tcGFyZVRvKGEuc3Vic3RyaW5nKDIsIDMpKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IGdldF9nX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX29yZGVyX2J5WHNodWZmbGVYX3NlbGVjdFhhX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikub3V0KCJjcmVhdGVkIikuYXMoImIiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNlbGVjdCgiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9vcmRlcl9ieVhvdXRFX2NvdW50X2Rlc2NYX2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkob3V0RSgpLmNvdW50KCksIGRlc2MpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8VmVydGV4Pj4+IGdldF9nX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WG5hbWVfb3JkZXJfYnlYZGVzY1hfZm9sZFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPFN0cmluZywgTGlzdDxWZXJ0ZXg+Pmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShkZXNjKS5mb2xkKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PERvdWJsZT4+IGdldF9nX1ZfbWFwWGJvdGhFX3dlaWdodF9mb2xkWF9vcmRlcl9ieVhzdW1YbG9jYWxYX2Rlc2NYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm1hcChfXy5ib3RoRSgpLjxEb3VibGU+dmFsdWVzKCJ3ZWlnaHQiKS5mb2xkKCkpLm9yZGVyKCkuYnkoX18uc3VtKFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfYXNYdlhfbWFwWGJvdGhFX3dlaWdodF9mb2xkWF9zdW1YbG9jYWxYX2FzWHNYX3NlbGVjdFh2X3NYX29yZGVyX2J5WHNlbGVjdFhzWF9kZXNjWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygidiIpLm1hcChfXy5ib3RoRSgpLjxEb3VibGU+dmFsdWVzKCJ3ZWlnaHQiKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkuYXMoInMiKS5zZWxlY3QoInYiLCAicyIpLm9yZGVyKCkuYnkoX18uc2VsZWN0KCJzIiksIGRlc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX29yWGhhc0xhYmVsWHBlcnNvblhfaGFzWHNvZnR3YXJlX25hbWVfbG9wWFhfb3JkZXJfYnlYYWdlWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vcihoYXNMYWJlbCgicGVyc29uIiksIGhhcygic29mdHdhcmUiLCJuYW1lIiwibG9wIikpLm9yZGVyKCkuYnkoImFnZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFZlcnRleD4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9mb2xkX29yZGVyWGxvY2FsWF9ieVhhZ2VYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3Byb3BlcnRpZXNfb3JkZXJfYnlYa2V5X2Rlc2NYX2tleSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShULmtleSwgZGVzYykua2V5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYc29uZ19uYW1lX09IQk9ZWF9vdXRYZm9sbG93ZWRCeVhfb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfYnlYc29uZ1R5cGVfZGVzY1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJzb25nIiwgIm5hbWUiLCAiT0ggQk9ZIikub3V0KCJmb2xsb3dlZEJ5Iikub3V0KCJmb2xsb3dlZEJ5Iikub3JkZXIoKS5ieSgicGVyZm9ybWFuY2VzIikuYnkoInNvbmdUeXBlIiwgZGVzYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlX2Rlc2NYX2xpbWl0WDVYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYm90aCgpLmhhc0xhYmVsKCJwZXJzb24iKS5vcmRlcigpLmJ5KCJhZ2UiLCBkZXNjKS5saW1pdCg1KS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuaGFzTGFiZWwoInBlcnNvbiIpLm9yZGVyKCkuYnkoImFnZSIsIGRlc2MpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzTGFiZWxYc29uZ1hfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2J5WG5hbWVYX3JhbmdlWDExMF8xMjBYX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInNvbmciKS5vcmRlcigpLmJ5KCJwZXJmb3JtYW5jZXMiLCBkZXNjKS5ieSgibmFtZSIpLnJhbmdlKDExMCwgMTIwKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfb3JkZXJYbG9jYWxYX2J5WHZhbHVlc1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLjxTdHJpbmcsIE51bWJlcj5ncm91cCgpLmJ5KCJuYW1lIikuYnkob3V0RSgpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwLkVudHJ5PFN0cmluZywgTnVtYmVyPj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2dyb3VwX2J5WG5hbWVYX2J5WG91dEVfd2VpZ2h0X3N1bVhfdW5mb2xkX29yZGVyX2J5WHZhbHVlc19kZXNjWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuZ3JvdXAoKS5ieSgibmFtZSIpLmJ5KG91dEUoKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpKS48TWFwLkVudHJ5PFN0cmluZywgTnVtYmVyPj51bmZvbGQoKS5vcmRlcigpLmJ5KENvbHVtbi52YWx1ZXMsIGRlc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXAuRW50cnk8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WWDFYX2VsZW1lbnRNYXBfb3JkZXJYbG9jYWxYX2J5WGtleXNfZGVzY1h1bmZvbGQoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShrZXlzLCBkZXNjKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1Zfb3JkZXJfYnlYbGFiZWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm9yZGVyKCkuYnkoX18ubGFiZWwoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9vcmRlcl9ieVhsYWJlbF9kZXNjWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vcmRlcigpLmJ5KF9fLmxhYmVsKCksIE9yZGVyLmRlc2MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfb3JkZXJYbG9jYWxYKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikub3JkZXIoU2NvcGUubG9jYWwpOwotICAgICAgICB9OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUGFnZVJhbmtUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1BhZ2VSYW5rVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWE5NDU1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUGFnZVJhbmtUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnJhbmtpbmcucGFnZXJhbmsuUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuc3RlcC5tYXAuUGFnZVJhbms7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFBhZ2VSYW5rVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfcGFnZVJhbmtfaGFzWHBhZ2VSYW5rWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8T2JqZWN0Pj4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX3BhZ2VSYW5rX3dpdGhYZWRnZXNfYm90aEVYX3dpdGhYcHJvcGVydHlOYW1lX3Byb2plY3RSYW5rWHdpdGhYdGltZXNfMFhfdmFsdWVNYXBYbmFtZV9wcm9qZWN0UmFua1goKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfcGFnZVJhbmtfb3JkZXJfYnlYcGFnZVJhbmtfZGVzY1hfYnlYbmFtZVhfbmFtZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9wYWdlUmFua19vcmRlcl9ieVhwYWdlUmFua19kZXNjWF9uYW1lX2xpbWl0WDJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9wYWdlUmFua193aXRoWGVkZ2VzX291dEVYa25vd3NYWF93aXRoWHByb3BlcnR5TmFtZV9mcmllbmRSYW5rWF9wcm9qZWN0X2J5WG5hbWVYX2J5WHZhbHVlc1hmcmllbmRSYW5rWF9tYXRoWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9wYWdlUmFua193aXRoWHByb3BlcnR5TmFtZV9wYWdlUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYcGFnZVJhbmtYX21hdGhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9wYWdlUmFua193aXRoWHByb3BlcnR5TmFtZV9wYWdlUmFua1hfYXNYYVhfb3V0WGtub3dzWF9wYWdlUmFua19hc1hiWF9zZWxlY3RYYV9iWF9ieV9ieVhtYXRoWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8T2JqZWN0Pj4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2hhc1huYW1lX3JpcHBsZVhfcGFnZVJhbmtYMVhfd2l0aFhlZGdlc19pbkVYY3JlYXRlZFhYX3dpdGhYdGltZXNfMVhfd2l0aFhwcm9wZXJ0eU5hbWVfcHJpb3JzWF9pblhjcmVhdGVkWF91bmlvblhib3RoX19pZGVudGl0eVhfdmFsdWVNYXBYbmFtZV9wcmlvcnNYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTGlzdDxWZXJ0ZXg+Pj4gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfZ3JvdXBYbVhfYnlYbGFiZWxYX3BhZ2VSYW5rWDFYX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWFhfd2l0aFhlZGdlc19pbkVYWF93aXRoWHRpbWVzXzFYX2luWGNyZWF0ZWRYX2dyb3VwWG1YX2J5WHBhZ2VSYW5rWF9jYXBYbVgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wYWdlUmFua19oYXNYcGFnZVJhbmtYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcGFnZVJhbmtfaGFzWHBhZ2VSYW5rWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIEl0ZXJhdG9yVXRpbHMuY291bnQodHJhdmVyc2FsKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dFhjcmVhdGVkWF9wYWdlUmFua193aXRoWGVkZ2VzX2JvdGhFWF93aXRoWHByb3BlcnR5TmFtZV9wcm9qZWN0UmFua1h3aXRoWHRpbWVzXzBYX3ZhbHVlTWFwWG5hbWVfcHJvamVjdFJhbmtYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0PE9iamVjdD4+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dFhjcmVhdGVkWF9wYWdlUmFua193aXRoWGVkZ2VzX2JvdGhFWF93aXRoWHByb3BlcnR5TmFtZV9wcm9qZWN0UmFua1h3aXRoWHRpbWVzXzBYX3ZhbHVlTWFwWG5hbWVfcHJvamVjdFJhbmtYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PE1hcDxPYmplY3QsIExpc3Q8T2JqZWN0Pj4+IHJlc3VsdCA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHJlc3VsdC5zaXplKCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBEb3VibGU+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgcmVzdWx0LmZvckVhY2gobSAtPiBtYXAucHV0KChTdHJpbmcpIG0uZ2V0KCJuYW1lIikuZ2V0KDApLCAoRG91YmxlKSBtLmdldCgicHJvamVjdFJhbmsiKS5nZXQoMCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgibG9wIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoImxvcCIpID4gbWFwLmdldCgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMy4wZCwgbWFwLmdldCgibG9wIiksIDAuMDAxZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjBkLCBtYXAuZ2V0KCJyaXBwbGUiKSwgMC4wMDFkKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3BhZ2VSYW5rX29yZGVyX2J5WHBhZ2VSYW5rX2Rlc2NYX2J5WG5hbWVYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9wYWdlUmFua19vcmRlcl9ieVhwYWdlUmFua19kZXNjWF9ieVhuYW1lWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBuYW1lcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIG5hbWVzLmdldCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicmlwcGxlIiwgbmFtZXMuZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJqb3NoIiwgbmFtZXMuZ2V0KDIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ2YWRhcyIsIG5hbWVzLmdldCgzKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBuYW1lcy5nZXQoNCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInBldGVyIiwgbmFtZXMuZ2V0KDUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcGFnZVJhbmtfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfd2l0aFhwcm9wZXJ0eU5hbWVfZnJpZW5kUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYZnJpZW5kUmFua1hfbWF0aFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcGFnZVJhbmtfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfd2l0aFhwcm9wZXJ0eU5hbWVfZnJpZW5kUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYZnJpZW5kUmFua1hfbWF0aFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gKFN0cmluZykgbWFwLmdldCgibmFtZSIpOwotICAgICAgICAgICAgZmluYWwgRG91YmxlIGZyaWVuZFJhbmsgPSAoRG91YmxlKSBtYXAuZ2V0KCJmcmllbmRSYW5rIik7Ci0gICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoImxvcCIpIHx8IG5hbWUuZXF1YWxzKCJyaXBwbGUiKSB8fCBuYW1lLmVxdWFscygicGV0ZXIiKSB8fCBuYW1lLmVxdWFscygibWFya28iKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTUuMCwgZnJpZW5kUmFuaywgMC4wMSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIxLjAsIGZyaWVuZFJhbmssIDAuMDEpOwotCi0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wYWdlUmFua19vcmRlcl9ieVhwYWdlUmFua19kZXNjWF9uYW1lX2xpbWl0WDJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcGFnZVJhbmtfb3JkZXJfYnlYcGFnZVJhbmtfZGVzY1hfbmFtZV9saW1pdFgyWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCBuYW1lcy5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInJpcHBsZSIsIG5hbWVzLmdldCgxKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHBlcnNvblhfcGFnZVJhbmtfd2l0aFhwcm9wZXJ0eU5hbWVfcGFnZVJhbmtYX3Byb2plY3RfYnlYbmFtZVhfYnlYdmFsdWVzWHBhZ2VSYW5rWF9tYXRoWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWF9wcm9qZWN0X2J5WG5hbWVYX2J5WHZhbHVlc1hwYWdlUmFua1hfbWF0aFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gKFN0cmluZykgbWFwLmdldCgibmFtZSIpOwotICAgICAgICAgICAgZmluYWwgRG91YmxlIHBhZ2VSYW5rID0gKERvdWJsZSkgbWFwLmdldCgicGFnZVJhbmsiKTsKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSB8fCBuYW1lLmVxdWFscygicGV0ZXIiKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNDYuMCwgcGFnZVJhbmssIDAuMDEpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg1OS4wLCBwYWdlUmFuaywgMC4wMSk7Ci0KLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWF9hc1hhWF9vdXRYa25vd3NYX3BhZ2VSYW5rX2FzWGJYX3NlbGVjdFhhX2JYX2J5X2J5WG1hdGhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWF9hc1hhWF9vdXRYa25vd3NYX3BhZ2VSYW5rX2FzWGJYX3NlbGVjdFhhX2JYX2J5X2J5WG1hdGhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBWZXJ0ZXggdmVydGV4ID0gKFZlcnRleCkgbWFwLmdldCgiYSIpOwotICAgICAgICAgICAgZG91YmxlIHBhZ2VSYW5rID0gKERvdWJsZSkgbWFwLmdldCgiYiIpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLCB2ZXJ0ZXguaWQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHBhZ2VSYW5rID4gMC4xMGQpOwotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2hhc1huYW1lX3JpcHBsZVhfcGFnZVJhbmtYMVhfd2l0aFhlZGdlc19pbkVYY3JlYXRlZFhYX3dpdGhYdGltZXNfMVhfd2l0aFhwcm9wZXJ0eU5hbWVfcHJpb3JzWF9pblhjcmVhdGVkWF91bmlvblhib3RoX19pZGVudGl0eVhfdmFsdWVNYXBYbmFtZV9wcmlvcnNYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0PE9iamVjdD4+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9oYXNYbmFtZV9yaXBwbGVYX3BhZ2VSYW5rWDFYX3dpdGhYZWRnZXNfaW5FWGNyZWF0ZWRYWF93aXRoWHRpbWVzXzFYX3dpdGhYcHJvcGVydHlOYW1lX3ByaW9yc1hfaW5YY3JlYXRlZFhfdW5pb25YYm90aF9faWRlbnRpdHlYX3ZhbHVlTWFwWG5hbWVfcHJpb3JzWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTGlzdDxPYmplY3Q+PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSBtYXAuZ2V0KCJuYW1lIikuZ2V0KDApOwotICAgICAgICAgICAgZG91YmxlIHBhZ2VSYW5rID0gKERvdWJsZSkgbWFwLmdldCgicHJpb3JzIikuZ2V0KDApOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG5hbWUuZXF1YWxzKCJqb3NoIikgPyAxLjBkIDogMC4wZCwgcGFnZVJhbmssIDAuMDAwMWQpOwotICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKCJwZXRlciIpIHx8IG5hbWUuZXF1YWxzKCJ2YWRhcyIpKQotICAgICAgICAgICAgICAgIGZhaWwoIlBldGVyIG9yIFZhZGFzIHNob3VsZCBub3QgaGF2ZSBiZWVuIGFjY2Vzc2VkIik7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRYY3JlYXRlZFhfZ3JvdXBYbVhfYnlYbGFiZWxYX3BhZ2VSYW5rWDFYX3dpdGhYUFJPUEVSVFlfTkFNRV9wYWdlUmFua1hYX3dpdGhYRURHRVNfaW5FWFhfd2l0aFhUSU1FU18xWF9pblhjcmVhdGVkWF9ncm91cFhtWF9ieVhwYWdlUmFua1hfY2FwWG1YKCkgewotICAgICAgICAvLyBbezIuMD1bdls0XSwgdls0XSwgdls0XSwgdls0XV0sIDEuMD1bdls2XSwgdls2XSwgdls2XSwgdlsxXSwgdlsxXSwgdlsxXV0sIHNvZnR3YXJlPVt2WzVdLCB2WzNdLCB2WzNdLCB2WzNdXX1dCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8VmVydGV4Pj4+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwWG1YX2J5WGxhYmVsWF9wYWdlUmFua1gxWF93aXRoWHByb3BlcnR5TmFtZV9wYWdlUmFua1hYX3dpdGhYZWRnZXNfaW5FWFhfd2l0aFh0aW1lc18xWF9pblhjcmVhdGVkWF9ncm91cFhtWF9ieVhwYWdlUmFua1hfY2FwWG1YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBMaXN0PFZlcnRleD4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJzb2Z0d2FyZSIpKTsKLSAgICAgICAgbWFwLmZvckVhY2goKGssIHYpIC0+IHsKLSAgICAgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICghay5lcXVhbHMoInNvZnR3YXJlIikgJiYgdi5zaXplKCkgPT0gNCkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLjBkLCAoKE51bWJlcikgaykuZG91YmxlVmFsdWUoKSwgMC4wMWQpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCB2LnN0cmVhbSgpLmZpbHRlcih2ZXJ0ZXggLT4gdmVydGV4LmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAiam9zaCIpKSkuY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2LnNpemUoKSA9PSA2KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMGQsICgoTnVtYmVyKSBrKS5kb3VibGVWYWx1ZSgpLCAwLjAxZCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHYuc3RyZWFtKCkuZmlsdGVyKHZlcnRleCAtPiB2ZXJ0ZXguaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJwZXRlciIpKSkuY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHYuc3RyZWFtKCkuZmlsdGVyKHZlcnRleCAtPiB2ZXJ0ZXguaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJtYXJrbyIpKSkuY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmICh2LnNpemUoKSA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2Z0d2FyZSIsIGspOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCB2LnN0cmVhbSgpLmZpbHRlcih2ZXJ0ZXggLT4gdmVydGV4LmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibG9wIikpKS5jb3VudCgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdi5zdHJlYW0oKS5maWx0ZXIodmVydGV4IC0+IHZlcnRleC5pZCgpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZChncmFwaCwgInJpcHBsZSIpKSkuY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgICAgIGZhaWwoIlRoZXJlIGFyZSB0b28gbWFueSBrZXkvdmFsdWVzOiAiICsgayArICItLSIgKyB2KTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgUGFnZVJhbmtUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9wYWdlUmFua19oYXNYcGFnZVJhbmtYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkuaGFzKFBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5QQUdFX1JBTkspOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0PE9iamVjdD4+PiBnZXRfZ19WX291dFhjcmVhdGVkWF9wYWdlUmFua193aXRoWGVkZ2VzX2JvdGhFWF93aXRoWHByb3BlcnR5TmFtZV9wcm9qZWN0UmFua1h3aXRoWHRpbWVzXzBYX3ZhbHVlTWFwWG5hbWVfcHJvamVjdFJhbmtYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLnBhZ2VSYW5rKCkud2l0aChQYWdlUmFuay5lZGdlcywgX18uYm90aEUoKSkud2l0aChQYWdlUmFuay5wcm9wZXJ0eU5hbWUsICJwcm9qZWN0UmFuayIpLndpdGgoUGFnZVJhbmsudGltZXMsIDApLnZhbHVlTWFwKCJuYW1lIiwgInByb2plY3RSYW5rIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfcGFnZVJhbmtfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfd2l0aFhwcm9wZXJ0eU5hbWVfZnJpZW5kUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYZnJpZW5kUmFua1hfbWF0aFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucGFnZVJhbmsoKS53aXRoKFBhZ2VSYW5rLmVkZ2VzLCBfXy5vdXRFKCJrbm93cyIpKS53aXRoKFBhZ2VSYW5rLnByb3BlcnR5TmFtZSwgImZyaWVuZFJhbmsiKS5wcm9qZWN0KCJuYW1lIiwgImZyaWVuZFJhbmsiKS5ieSgibmFtZSIpLmJ5KF9fLnZhbHVlcygiZnJpZW5kUmFuayIpLm1hdGgoImNlaWwoXyAqIDEwMCkiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9wYWdlUmFua19vcmRlcl9ieVhwYWdlUmFua19kZXNjWF9ieVhuYW1lWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShQYWdlUmFua1ZlcnRleFByb2dyYW0uUEFHRV9SQU5LLCBPcmRlci5kZXNjKS5ieSgibmFtZSIpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfcGFnZVJhbmtfb3JkZXJfYnlYcGFnZVJhbmtfZGVzY1hfbmFtZV9saW1pdFgyWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoUGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLlBBR0VfUkFOSywgT3JkZXIuZGVzYykuPFN0cmluZz52YWx1ZXMoIm5hbWUiKS5saW1pdCgyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWF9wcm9qZWN0X2J5WG5hbWVYX2J5WHZhbHVlc1hwYWdlUmFua1hfbWF0aFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLnBhZ2VSYW5rKCkud2l0aChQYWdlUmFuay5wcm9wZXJ0eU5hbWUsICJwYWdlUmFuayIpLnByb2plY3QoIm5hbWUiLCAicGFnZVJhbmsiKS5ieSgibmFtZSIpLmJ5KF9fLnZhbHVlcygicGFnZVJhbmsiKS5tYXRoKCJjZWlsKF8gKiAxMDApIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWF9hc1hhWF9vdXRYa25vd3NYX3BhZ2VSYW5rX2FzWGJYX3NlbGVjdFhhX2JYX2J5X2J5WG1hdGhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnBhZ2VSYW5rKCkud2l0aChQYWdlUmFuay5wcm9wZXJ0eU5hbWUsICJwYWdlUmFuayIpLmFzKCJhIikub3V0KCJrbm93cyIpLnZhbHVlcygicGFnZVJhbmsiKS5hcygiYiIpLnNlbGVjdCgiYSIsICJiIikuYnkoKS5ieShfXy5tYXRoKCJjZWlsKF8gKiAxMDApIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0PE9iamVjdD4+PiBnZXRfZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9oYXNYbmFtZV9yaXBwbGVYX3BhZ2VSYW5rWDFYX3dpdGhYZWRnZXNfaW5FWGNyZWF0ZWRYWF93aXRoWHRpbWVzXzFYX3dpdGhYcHJvcGVydHlOYW1lX3ByaW9yc1hfaW5YY3JlYXRlZFhfdW5pb25YYm90aF9faWRlbnRpdHlYX3ZhbHVlTWFwWG5hbWVfcHJpb3JzWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5oYXMoIm5hbWUiLCAicmlwcGxlIikucGFnZVJhbmsoMS4wKS53aXRoKFBhZ2VSYW5rLmVkZ2VzLCBfXy5pbkUoImNyZWF0ZWQiKSkud2l0aChQYWdlUmFuay50aW1lcywgMSkud2l0aChQYWdlUmFuay5wcm9wZXJ0eU5hbWUsICJwcmlvcnMiKS5pbigiY3JlYXRlZCIpLnVuaW9uKF9fLmJvdGgoKSwgX18uaWRlbnRpdHkoKSkudmFsdWVNYXAoIm5hbWUiLCAicHJpb3JzIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8VmVydGV4Pj4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwWG1YX2J5WGxhYmVsWF9wYWdlUmFua1gxWF93aXRoWHByb3BlcnR5TmFtZV9wYWdlUmFua1hYX3dpdGhYZWRnZXNfaW5FWFhfd2l0aFh0aW1lc18xWF9pblhjcmVhdGVkWF9ncm91cFhtWF9ieVhwYWdlUmFua1hfY2FwWG1YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwKCJtIikuYnkoVC5sYWJlbCkucGFnZVJhbmsoMS4wKS53aXRoKFBhZ2VSYW5rLnByb3BlcnR5TmFtZSwgInBhZ2VSYW5rIikud2l0aChQYWdlUmFuay5lZGdlcywgX18uaW5FKCkpLndpdGgoUGFnZVJhbmsudGltZXMsIDEpLmluKCJjcmVhdGVkIikuZ3JvdXAoIm0iKS5ieSgicGFnZVJhbmsiKS5jYXAoIm0iKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUGF0aFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUGF0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU4N2JjOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1BhdGhUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5NdXRhYmxlUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFBhdGhUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZYMVhfbmFtZV9wYXRoKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WWDFYX291dF9wYXRoX2J5WGFnZVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWF9ieVhuYW1lWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9wYXRoX2J5X2J5WG5hbWVYX2J5WGxhbmdYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfYnlYYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfYXNYYVhfaGFzWG5hbWVfbWFya29YX2FzWGJYX2hhc1hhZ2VfMjlYX2FzWGNYX3BhdGgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WWDFYX291dEVYY3JlYXRlZFhfaW5WX2luRV9vdXRWX3BhdGgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9wYXRoX2Zyb21YYlhfdG9YY1hfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8SW50ZWdlciwgUGF0aD4gZ2V0X2dfaW5qZWN0WDFfbnVsbF9udWxsWF9wYXRoKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEludGVnZXIsIFBhdGg+IGdldF9nX2luamVjdFgxX251bGxfbnVsbFhfcGF0aF9kZWR1cCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX25hbWVfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9uYW1lX3BhdGgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBwYXRoLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgKChWZXJ0ZXgpIHBhdGguZ2V0KDApKS48U3RyaW5nPmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgcGF0aC48U3RyaW5nPmdldCgxKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRfcGF0aF9ieVhhZ2VYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dF9wYXRoX2J5WGFnZVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8T2JqZWN0PiBhZ2VzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMjkpLCBwYXRoLjxJbnRlZ2VyPmdldCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHBhdGguZ2V0KDEpID09IG51bGwgfHwgcGF0aC5nZXQoMSkuZXF1YWxzKDI3KSB8fCBwYXRoLmdldCgxKS5lcXVhbHMoMzIpKTsKLSAgICAgICAgICAgIGFnZXMuYWRkKHBhdGguZ2V0KDEpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBhZ2VzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dF9wYXRoX2J5WGFnZVhfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWF9ieVhuYW1lWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxTdHJpbmc+IG5hbWVzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMjkpLCBwYXRoLjxJbnRlZ2VyPmdldCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHBhdGguZ2V0KDEpLmVxdWFscygiam9zaCIpIHx8IHBhdGguZ2V0KDEpLmVxdWFscygidmFkYXMiKSB8fCBwYXRoLmdldCgxKS5lcXVhbHMoImxvcCIpKTsKLSAgICAgICAgICAgIG5hbWVzLmFkZChwYXRoLmdldCgxKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgbmFtZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aF9ieVhpdFhfYnlYbmFtZVhfYnlYbGFuZ1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aF9ieV9ieVhuYW1lWF9ieVhsYW5nWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBwYXRoLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4ICgibWFya28iKSwgcGF0aC48VmVydGV4PmdldCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImpvc2giLCBwYXRoLjxTdHJpbmc+Z2V0KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiamF2YSIsIHBhdGguPFN0cmluZz5nZXQoMikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2J5WGFnZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFBhdGggcGF0aCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgcGF0aC5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHBhdGguPFN0cmluZz5nZXQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigzMiksIHBhdGguPEludGVnZXI+Z2V0KDEpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUocGF0aC5nZXQoMikuZXF1YWxzKCJsb3AiKSB8fCBwYXRoLmdldCgyKS5lcXVhbHMoInJpcHBsZSIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9oYXNYYWdlXzI5WF9hc1hjWF9wYXRoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9oYXNYYWdlXzI5WF9hc1hjWF9wYXRoKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHBhdGguc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShwYXRoLmhhc0xhYmVsKCJhIikpOwotICAgICAgICBhc3NlcnRUcnVlKHBhdGguaGFzTGFiZWwoImIiKSk7Ci0gICAgICAgIGFzc2VydFRydWUocGF0aC5oYXNMYWJlbCgiYyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHBhdGgubGFiZWxzKCkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHBhdGgubGFiZWxzKCkuZ2V0KDApLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dEVYY3JlYXRlZFhfaW5WX2luRV9vdXRWX3BhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RVhjcmVhdGVkWF9pblZfaW5FX291dFZfcGF0aChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IHBhdGhzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgcGF0aHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChmaW5hbCBQYXRoIHBhdGggOiBwYXRocykgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIHBhdGguc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgKChWZXJ0ZXgpIHBhdGguZ2V0KDApKS5pZCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9FZGdlSWQoIm1hcmtvIiwgImNyZWF0ZWQiLCAibG9wIiksICgoRWRnZSkgcGF0aC5nZXQoMSkpLmlkKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSwgKChWZXJ0ZXgpIHBhdGguZ2V0KDIpKS5pZCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiY3JlYXRlZCIsICgoRWRnZSkgcGF0aC5nZXQoMykpLmxhYmVsKCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpLmVxdWFscygoKFZlcnRleCkgcGF0aC5nZXQoNCkpLmlkKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleElkKCJwZXRlciIpLmVxdWFscygoKFZlcnRleCkgcGF0aC5nZXQoNCkpLmlkKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLmVxdWFscygoKFZlcnRleCkgcGF0aC5nZXQoNCkpLmlkKCkpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9wYXRoX2Zyb21YYlhfdG9YY1hfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9wYXRoX2Zyb21YYlhfdG9YY1hfYnlYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIE11dGFibGVQYXRoLm1ha2UoKS5leHRlbmQoImpvc2giLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24oImIiKSkuZXh0ZW5kKCJsb3AiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24oImMiKSksCi0gICAgICAgICAgICAgICAgTXV0YWJsZVBhdGgubWFrZSgpLmV4dGVuZCgiam9zaCIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbigiYiIpKS5leHRlbmQoInJpcHBsZSIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbigiYyIpKSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19pbmplY3RYMV9udWxsX251bGxYX3BhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYMV9udWxsX251bGxYX3BhdGgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIE11dGFibGVQYXRoLm1ha2UoKS5leHRlbmQoMSwgQ29sbGVjdGlvbnMuZW1wdHlTZXQoKSksCi0gICAgICAgICAgICAgICAgTXV0YWJsZVBhdGgubWFrZSgpLmV4dGVuZChudWxsLCBDb2xsZWN0aW9ucy5lbXB0eVNldCgpKSwKLSAgICAgICAgICAgICAgICBNdXRhYmxlUGF0aC5tYWtlKCkuZXh0ZW5kKG51bGwsIENvbGxlY3Rpb25zLmVtcHR5U2V0KCkpKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFgxX251bGxfbnVsbFhfcGF0aF9kZWR1cCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEludGVnZXIsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX2luamVjdFgxX251bGxfbnVsbFhfcGF0aF9kZWR1cCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoCi0gICAgICAgICAgICAgICAgTXV0YWJsZVBhdGgubWFrZSgpLmV4dGVuZCgxLCBDb2xsZWN0aW9ucy5lbXB0eVNldCgpKSwKLSAgICAgICAgICAgICAgICBNdXRhYmxlUGF0aC5tYWtlKCkuZXh0ZW5kKG51bGwsIENvbGxlY3Rpb25zLmVtcHR5U2V0KCkpKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBQYXRoVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9uYW1lX3BhdGgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkudmFsdWVzKCJuYW1lIikucGF0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WWDFYX291dF9wYXRoX2J5WGFnZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCkucGF0aCgpLmJ5KCJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVlgxWF9vdXRfcGF0aF9ieVhhZ2VYX2J5WG5hbWVYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dCgpLnBhdGgoKS5ieSgiYWdlIikuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9wYXRoX2J5X2J5WG5hbWVYX2J5WGxhbmdYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChvdXQoKSkudGltZXMoMikucGF0aCgpLmJ5KCkuYnkoIm5hbWUiKS5ieSgibGFuZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9ieVhhZ2VYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfYXNYYlhfaGFzWGFnZV8yOVhfYXNYY1hfcGF0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJiIikuaGFzKCJhZ2UiLCAyOSkuYXMoImMiKS5wYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZYMVhfb3V0RVhjcmVhdGVkWF9pblZfaW5FX291dFZfcGF0aChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXRFKCJjcmVhdGVkIikuaW5WKCkuaW5FKCkub3V0VigpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3BhdGhfZnJvbVhiWF90b1hjWF9ieVhuYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgpLmFzKCJiIikub3V0KCkuYXMoImMiKS5wYXRoKCkuZnJvbSgiYiIpLnRvKCJjIikuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEludGVnZXIsIFBhdGg+IGdldF9nX2luamVjdFgxX251bGxfbnVsbFhfcGF0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdCgxLCBudWxsLCBudWxsKS5wYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBQYXRoPiBnZXRfZ19pbmplY3RYMV9udWxsX251bGxYX3BhdGhfZGVkdXAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpLmRlZHVwKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9QZWVyUHJlc3N1cmVUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1BlZXJQcmVzc3VyZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI4YWZkMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1BlZXJQcmVzc3VyZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5UZXN0SGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLmNsdXN0ZXJpbmcucGVlcnByZXNzdXJlLlBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW07Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdGVwLm1hcC5QYWdlUmFuazsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlBlZXJQcmVzc3VyZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQZWVyUHJlc3N1cmVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9wZWVyUHJlc3N1cmVfaGFzWGNsdXN0ZXJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTnVtYmVyPj4gZ2V0X2dfVl9wZWVyUHJlc3N1cmVfd2l0aFhwcm9wZXJ0eU5hbWVfY2x1c3Rlclhfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfcGFnZVJhbmtYMVhfd2l0aFhwcm9wZXJ0eU5hbWVfcmFua1hfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfd2l0aFh0aW1lc18yWF9ncm91cF9ieVhjbHVzdGVyWF9ieVhyYW5rX3N1bVhfbGltaXRYMTAwWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8T2JqZWN0Pj4+IGdldF9nX1ZfaGFzWG5hbWVfcmlwcGxlWF9pblhjcmVhdGVkWF9wZWVyUHJlc3N1cmVfd2l0aFhlZGdlc19vdXRFWF93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF9yZXBlYXRYdW5pb25YaWRlbnRpdHlfX2JvdGhYX3RpbWVzWDJYX2RlZHVwX3ZhbHVlTWFwWG5hbWVfY2x1c3RlclgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9wZWVyUHJlc3N1cmVfaGFzWGNsdXN0ZXJYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcGVlclByZXNzdXJlX2hhc1hjbHVzdGVyWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIEl0ZXJhdG9yVXRpbHMuY291bnQodHJhdmVyc2FsKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3BlZXJQcmVzc3VyZV93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF93aXRoWGVkZ2VzX291dEVYa25vd3NYWF9wYWdlUmFua1gxWF93aXRoWHByb3BlcnR5TmFtZV9yYW5rWF93aXRoWGVkZ2VzX291dEVYa25vd3NYWF93aXRoWHRpbWVzXzJYX2dyb3VwX2J5WGNsdXN0ZXJYX2J5WHJhbmtfc3VtWF9saW1pdFgxMDBYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBOdW1iZXI+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3BlZXJQcmVzc3VyZV93aXRoWHByb3BlcnR5TmFtZV9jbHVzdGVyWF93aXRoWGVkZ2VzX291dEVYa25vd3NYWF9wYWdlUmFua1gxWF93aXRoWHByb3BlcnR5TmFtZV9yYW5rWF93aXRoWGVkZ2VzX291dEVYa25vd3NYWF93aXRoWHRpbWVzXzJYX2dyb3VwX2J5WGNsdXN0ZXJYX2J5WHJhbmtfc3VtWF9saW1pdFgxMDBYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBOdW1iZXI+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjU4M2QsIChkb3VibGUpIG1hcC5nZXQoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpLCAwLjAwMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC4xMzhkLCAoZG91YmxlKSBtYXAuZ2V0KGNvbnZlcnRUb1ZlcnRleElkKCJsb3AiKSksIDAuMDAxZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjEzOGQsIChkb3VibGUpIG1hcC5nZXQoY29udmVydFRvVmVydGV4SWQoInJpcHBsZSIpKSwgMC4wMDFkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAuMTM4ZCwgKGRvdWJsZSkgbWFwLmdldChjb252ZXJ0VG9WZXJ0ZXhJZCgicGV0ZXIiKSksIDAuMDAxZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX3JpcHBsZVhfaW5YY3JlYXRlZFhfcGVlclByZXNzdXJlX3dpdGhYZWRnZXNfb3V0RVhfd2l0aFhwcm9wZXJ0eU5hbWVfY2x1c3RlclhfcmVwZWF0WHVuaW9uWGlkZW50aXR5X19ib3RoWF90aW1lc1gyWF9kZWR1cF92YWx1ZU1hcFhuYW1lX2NsdXN0ZXJYKCkgewotICAgICAgICBUZXN0SGVscGVyLmFzc3VtZU5vbkRldGVybWluaXN0aWMoKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTGlzdDxPYmplY3Q+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9yaXBwbGVYX2luWGNyZWF0ZWRYX3BlZXJQcmVzc3VyZV93aXRoWGVkZ2VzX291dEVYX3dpdGhYcHJvcGVydHlOYW1lX2NsdXN0ZXJYX3JlcGVhdFh1bmlvblhpZGVudGl0eV9fYm90aFhfdGltZXNYMlhfZGVkdXBfdmFsdWVNYXBYbmFtZV9jbHVzdGVyWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxNYXA8T2JqZWN0LCBMaXN0PE9iamVjdD4+PiByZXN1bHRzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgcmVzdWx0cy5zaXplKCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNsdXN0ZXJzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXN1bHRzLmZvckVhY2gobSAtPiBjbHVzdGVycy5wdXQoKFN0cmluZykgbS5nZXQoIm5hbWUiKS5nZXQoMCksIG0uZ2V0KCJjbHVzdGVyIikuZ2V0KDApKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHRzLmdldCgwKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY2x1c3RlcnMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNsdXN0ZXJzLmdldCgiam9zaCIpLCBjbHVzdGVycy5nZXQoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNsdXN0ZXJzLmdldCgiam9zaCIpLCBjbHVzdGVycy5nZXQoImxvcCIpKTsKLSAgICAgICAgZmluYWwgU2V0PE9iamVjdD4gaWRzID0gbmV3IEhhc2hTZXQ8PihjbHVzdGVycy52YWx1ZXMoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBpZHMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShpZHMuY29udGFpbnMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShpZHMuY29udGFpbnMoY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShpZHMuY29udGFpbnMoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkpOwotICAgICAgICBhc3NlcnRUcnVlKGlkcy5jb250YWlucyhjb252ZXJ0VG9WZXJ0ZXhJZCgicGV0ZXIiKSkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFBlZXJQcmVzc3VyZVRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX3BlZXJQcmVzc3VyZV9oYXNYY2x1c3RlclgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucGVlclByZXNzdXJlKCkuaGFzKFBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW0uQ0xVU1RFUik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE51bWJlcj4+IGdldF9nX1ZfcGVlclByZXNzdXJlX3dpdGhYcHJvcGVydHlOYW1lX2NsdXN0ZXJYX3dpdGhYZWRnZXNfb3V0RVhrbm93c1hYX3BhZ2VSYW5rWDFYX3dpdGhYcHJvcGVydHlOYW1lX3JhbmtYX3dpdGhYZWRnZXNfb3V0RVhrbm93c1hYX3dpdGhYdGltZXNfMlhfZ3JvdXBfYnlYY2x1c3RlclhfYnlYcmFua19zdW1YX2xpbWl0WDEwMFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkucGVlclByZXNzdXJlKCkud2l0aChQZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lLCAiY2x1c3RlciIpLndpdGgoUGVlclByZXNzdXJlLmVkZ2VzLCBfXy5vdXRFKCJrbm93cyIpKS5wYWdlUmFuaygxLjBkKS53aXRoKFBhZ2VSYW5rLnByb3BlcnR5TmFtZSwgInJhbmsiKS53aXRoKFBhZ2VSYW5rLmVkZ2VzLCBfXy5vdXRFKCJrbm93cyIpKS53aXRoKFBhZ2VSYW5rLnRpbWVzLCAxKS48T2JqZWN0LCBOdW1iZXI+Z3JvdXAoKS5ieSgiY2x1c3RlciIpLmJ5KF9fLnZhbHVlcygicmFuayIpLnN1bSgpKS5saW1pdCgxMDApOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0PE9iamVjdD4+PiBnZXRfZ19WX2hhc1huYW1lX3JpcHBsZVhfaW5YY3JlYXRlZFhfcGVlclByZXNzdXJlX3dpdGhYZWRnZXNfb3V0RVhfd2l0aFhwcm9wZXJ0eU5hbWVfY2x1c3RlclhfcmVwZWF0WHVuaW9uWGlkZW50aXR5X19ib3RoWF90aW1lc1gyWF9kZWR1cF92YWx1ZU1hcFhuYW1lX2NsdXN0ZXJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJyaXBwbGUiKS5pbigiY3JlYXRlZCIpLnBlZXJQcmVzc3VyZSgpLndpdGgoUGVlclByZXNzdXJlLmVkZ2VzLF9fLm91dEUoKSkud2l0aChQZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lLCAiY2x1c3RlciIpLnJlcGVhdChfXy51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5ib3RoKCkpKS50aW1lcygyKS5kZWR1cCgpLnZhbHVlTWFwKCJuYW1lIiwgImNsdXN0ZXIiKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1Byb2plY3RUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1Byb2plY3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYjZhZjUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Qcm9qZWN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQcm9qZWN0VGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvamVjdFhhX2JYX2J5WG91dEVfY291bnRYX2J5WGFnZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX3Byb2plY3RYYV9iWF9ieVhpbkVfY291bnRYX2J5WGFnZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX3Byb2plY3RYYV9iWF9ieVhuYW1lWF9ieVhpblhjcmVhdGVkWF9jb3VudFhfb3JkZXJfYnlYc2VsZWN0WGJYX19kZXNjWF9zZWxlY3RYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3ZhbHVlTWFwX3Byb2plY3RYeFhfYnlYc2VsZWN0WG5hbWVYWCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvamVjdFhhX2JYX2J5WG91dEVfY291bnRYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9wcm9qZWN0WGFfYlhfYnlYb3V0RV9jb3VudFhfYnlYYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgImEiLCAzTCwgImIiLCAyOSwKLSAgICAgICAgICAgICAgICAiYSIsIDBMLCAiYiIsIDI3LAotICAgICAgICAgICAgICAgICJhIiwgMkwsICJiIiwgMzIsCi0gICAgICAgICAgICAgICAgImEiLCAxTCwgImIiLCAzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Byb2plY3RYYV9iWF9ieVhpbkVfY291bnRYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcHJvamVjdFhhX2JYX2J5WGluRV9jb3VudFhfYnlYYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIE51bWJlcj4+IGEgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgYS5hZGQobmV3IEhhc2hNYXA8U3RyaW5nLE51bWJlcj4oKSB7ewotICAgICAgICAgICAgcHV0KCJhIiwgM0wpOwotICAgICAgICB9fSk7Ci0gICAgICAgIGEuYWRkKG5ldyBIYXNoTWFwPFN0cmluZyxOdW1iZXI+KCkge3sKLSAgICAgICAgICAgIHB1dCgiYSIsIDFMKTsKLSAgICAgICAgfX0pOwotICAgICAgICBhLmFkZChuZXcgSGFzaE1hcDxTdHJpbmcsTnVtYmVyPigpIHt7Ci0gICAgICAgICAgICBwdXQoImEiLCAwTCk7Ci0gICAgICAgICAgICBwdXQoImIiLCAyOSk7Ci0gICAgICAgIH19KTsKLSAgICAgICAgYS5hZGQobmV3IEhhc2hNYXA8U3RyaW5nLE51bWJlcj4oKSB7ewotICAgICAgICAgICAgcHV0KCJhIiwgMUwpOwotICAgICAgICAgICAgcHV0KCJiIiwgMjcpOwotICAgICAgICB9fSk7Ci0gICAgICAgIGEuYWRkKG5ldyBIYXNoTWFwPFN0cmluZyxOdW1iZXI+KCkge3sKLSAgICAgICAgICAgIHB1dCgiYSIsIDFMKTsKLSAgICAgICAgICAgIHB1dCgiYiIsIDMyKTsKLSAgICAgICAgfX0pOwotICAgICAgICBhLmFkZChuZXcgSGFzaE1hcDxTdHJpbmcsTnVtYmVyPigpIHt7Ci0gICAgICAgICAgICBwdXQoImEiLCAwTCk7Ci0gICAgICAgICAgICBwdXQoImIiLCAzNSk7Ci0gICAgICAgIH19KTsKLQotICAgICAgICBjaGVja1Jlc3VsdHMoYSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0WGNyZWF0ZWRYX3Byb2plY3RYYV9iWF9ieVhuYW1lWF9ieVhpblhjcmVhdGVkWF9jb3VudFhfb3JkZXJfYnlYc2VsZWN0WGJYX19kZXNjWF9zZWxlY3RYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfcHJvamVjdFhhX2JYX2J5WG5hbWVYX2J5WGluWGNyZWF0ZWRYX2NvdW50WF9vcmRlcl9ieVhzZWxlY3RYYlhfX2Rlc2NYX3NlbGVjdFhhWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCBuYW1lcy5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIG5hbWVzLmdldCgxKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibG9wIiwgbmFtZXMuZ2V0KDIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJyaXBwbGUiLCBuYW1lcy5nZXQoMykpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl92YWx1ZU1hcF9wcm9qZWN0WHhYX2J5WHNlbGVjdFhuYW1lWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVNYXBfcHJvamVjdFh4WF9ieVhzZWxlY3RYbmFtZVhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMobWFrZU1hcExpc3QoMSwKLSAgICAgICAgICAgICAgICAieCIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoIm1hcmtvIiksCi0gICAgICAgICAgICAgICAgIngiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJ2YWRhcyIpLAotICAgICAgICAgICAgICAgICJ4IiwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgibG9wIiksCi0gICAgICAgICAgICAgICAgIngiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJqb3NoIiksCi0gICAgICAgICAgICAgICAgIngiLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJyaXBwbGUiKSwKLSAgICAgICAgICAgICAgICAieCIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoInBldGVyIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFByb2plY3RUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9wcm9qZWN0WGFfYlhfYnlYb3V0RV9jb3VudFhfYnlYYWdlWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgicGVyc29uIikuPE51bWJlcj5wcm9qZWN0KCJhIiwgImIiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoImFnZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX3Byb2plY3RYYV9iWF9ieVhpbkVfY291bnRYX2J5WGFnZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPE51bWJlcj5wcm9qZWN0KCJhIiwgImIiKS5ieShfXy5pbkUoKS5jb3VudCgpKS5ieSgiYWdlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfcHJvamVjdFhhX2JYX2J5WG5hbWVYX2J5WGluWGNyZWF0ZWRYX2NvdW50WF9vcmRlcl9ieVhzZWxlY3RYYlhfX2Rlc2NYX3NlbGVjdFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS5wcm9qZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpLmJ5KF9fLmluKCJjcmVhdGVkIikuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoImIiKSwgT3JkZXIuZGVzYykuc2VsZWN0KCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfdmFsdWVNYXBfcHJvamVjdFh4WF9ieVhzZWxlY3RYbmFtZVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkucHJvamVjdCgieCIpLmJ5KF9fLnNlbGVjdCgibmFtZSIpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUHJvcGVydGllc1Rlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvUHJvcGVydGllc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjNTU2OS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1Byb3BlcnRpZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFByb3BlcnRpZXNUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWG5hbWVfYWdlWF92YWx1ZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWGFnZV9uYW1lWF92YWx1ZSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRYX3ZhbHVlKGZpbmFsIE9iamVjdCBuYW1lSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleFByb3BlcnR5PFN0cmluZz4+IGdldF9nX1ZfaGFzWGFnZVhfcHJvcGVydGllc1huYW1lWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXhQcm9wZXJ0eTxTdHJpbmc+LCBTdHJpbmc+IGdldF9nX2luamVjdFhnX1ZYMVhfcHJvcGVydGllc1huYW1lWF9uZXh0WF92YWx1ZShmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZVhfcHJvcGVydGllc1huYW1lX2FnZVhfdmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWG5hbWVfYWdlWF92YWx1ZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgMjksICJ2YWRhcyIsIDI3LCAiam9zaCIsIDMyLCAicGV0ZXIiLCAzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYYWdlX25hbWVYX3ZhbHVlKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGFnZVhfcHJvcGVydGllc1hhZ2VfbmFtZVhfdmFsdWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsIDI5LCAidmFkYXMiLCAyNywgImpvc2giLCAzMiwgInBldGVyIiwgMzUpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRYX3ZhbHVlKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGFnZVhfcHJvcGVydGllc19oYXNYaWRfbmFtZUlkWF92YWx1ZShjb252ZXJ0VG9WZXJ0ZXhQcm9wZXJ0eUlkKCJtYXJrbyIsICJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KCJtYXJrbyIpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRBc1N0cmluZ1hfdmFsdWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRYX3ZhbHVlKGNvbnZlcnRUb1ZlcnRleFByb3BlcnR5SWQoIm1hcmtvIiwgIm5hbWUiKS5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgibWFya28iKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZVhfcHJvcGVydGllc1huYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4UHJvcGVydHk8U3RyaW5nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWG5hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBrZXlzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiB2YWx1ZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIGZpbmFsIFNldDxPYmplY3Q+IGlkcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgVmVydGV4UHJvcGVydHk8U3RyaW5nPiB2ZXJ0ZXhQcm9wZXJ0eSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBrZXlzLmFkZCh2ZXJ0ZXhQcm9wZXJ0eS5rZXkoKSk7Ci0gICAgICAgICAgICB2YWx1ZXMuYWRkKHZlcnRleFByb3BlcnR5LnZhbHVlKCkpOwotICAgICAgICAgICAgaWRzLmFkZCh2ZXJ0ZXhQcm9wZXJ0eS5pZCgpKTsKLSAgICAgICAgICAgIE9iamVjdCBpZCA9IHZlcnRleFByb3BlcnR5LmlkKCk7Ci0gICAgICAgICAgICBpZCA9IGlkIGluc3RhbmNlb2YgTnVtYmVyID8gKChOdW1iZXIpIGlkKS5sb25nVmFsdWUoKSA6IGlkOwotICAgICAgICAgICAgT2JqZWN0IG90aGVySWQgPSBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsIHZlcnRleFByb3BlcnR5LnZhbHVlKCkpLnByb3BlcnR5KCJuYW1lIikuaWQoKTsKLSAgICAgICAgICAgIG90aGVySWQgPSBvdGhlcklkIGluc3RhbmNlb2YgTnVtYmVyID8gKChOdW1iZXIpIG90aGVySWQpLmxvbmdWYWx1ZSgpIDogb3RoZXJJZDsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhvdGhlcklkLCBpZCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCB2ZXJ0ZXhQcm9wZXJ0eS5rZXkoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCB2ZXJ0ZXhQcm9wZXJ0eS52YWx1ZSgpKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCksIHZlcnRleFByb3BlcnR5LnZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgdmVydGV4UHJvcGVydHkudmFsdWUoKSkudmFsdWUoIm5hbWUiKSwgdmVydGV4UHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwga2V5cy5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKGtleXMuY29udGFpbnMoIm5hbWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh2YWx1ZXMuY29udGFpbnMoIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRUcnVlKHZhbHVlcy5jb250YWlucygidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydFRydWUodmFsdWVzLmNvbnRhaW5zKCJqb3NoIikpOwotICAgICAgICBhc3NlcnRUcnVlKHZhbHVlcy5jb250YWlucygicGV0ZXIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBpZHMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFhnX1ZYMVhfcHJvcGVydGllc1huYW1lWF9uZXh0WF92YWx1ZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleFByb3BlcnR5PFN0cmluZz4sIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfaW5qZWN0WGdfVlgxWF9wcm9wZXJ0aWVzWG5hbWVYX25leHRYX3ZhbHVlKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgibWFya28iKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBQcm9wZXJ0aWVzVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYbmFtZV9hZ2VYX3ZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIikucHJvcGVydGllcygibmFtZSIsICJhZ2UiKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfaGFzWGFnZVhfcHJvcGVydGllc1hhZ2VfbmFtZVhfdmFsdWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJhZ2UiKS5wcm9wZXJ0aWVzKCJhZ2UiLCAibmFtZSIpLnZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRYX3ZhbHVlKGZpbmFsIE9iamVjdCBuYW1lSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoImFnZSIpLnByb3BlcnRpZXMoKS5oYXMoVC5pZCwgbmFtZUlkKS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXhQcm9wZXJ0eTxTdHJpbmc+PiBnZXRfZ19WX2hhc1hhZ2VYX3Byb3BlcnRpZXNYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gKFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleFByb3BlcnR5PFN0cmluZz4+KSBnLlYoKS5oYXMoImFnZSIpLjxTdHJpbmc+cHJvcGVydGllcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4UHJvcGVydHk8U3RyaW5nPiwgU3RyaW5nPiBnZXRfZ19pbmplY3RYZ19WWDFYX3Byb3BlcnRpZXNYbmFtZVhfbmV4dFhfdmFsdWUoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLjxWZXJ0ZXhQcm9wZXJ0eTxTdHJpbmc+PmluamVjdCgoVmVydGV4UHJvcGVydHkpIGcuVih2MUlkKS5wcm9wZXJ0aWVzKCJuYW1lIikubmV4dCgpKS52YWx1ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1JlYWRUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1JlYWRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYmU0MGIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9SZWFkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5SZW1vdGVHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLklPOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLklvVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaG1sLkdyYXBoTUxSZXNvdXJjZUFjY2VzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlJlc291cmNlQWNjZXNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW8uR3J5b1Jlc291cmNlQWNjZXNzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBSZWFkVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZFhrcnlvWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZF93aXRoWHJlYWRlcl9ncnlvWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZFhqc29uWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaHNvblgoZmluYWwgU3RyaW5nIGZpbGVUb1JlYWQpICB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IGdldF9nX2lvX3JlYWRYeG1sWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaG1sWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5GRUFUVVJFX0lPX1JFQUQpCi0gICAgcHVibGljIHZvaWQgZ19pb19yZWFkWGtyeW9YKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVUb1JlYWQgPSBUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGVGcm9tUmVzb3VyY2UoUmVhZFRlc3QuY2xhc3MsIEdyeW9SZXNvdXJjZUFjY2Vzcy5jbGFzcywgInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5byIsICIiKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19pb19yZWFkWGtyeW9YKGZpbGVUb1JlYWQpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgdHJhdmVyc2FsLml0ZXJhdGUoKTsKLQotICAgICAgICBpZiAoZ3JhcGggaW5zdGFuY2VvZiBSZW1vdGVHcmFwaCkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElvVGVzdC5hc3NlcnRNb2Rlcm5HcmFwaChncmFwaCwgZmFsc2UsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLkZFQVRVUkVfSU9fUkVBRCkKLSAgICBwdWJsaWMgdm9pZCBnX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3J5b1goKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCA9IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZShSZWFkVGVzdC5jbGFzcywgR3J5b1Jlc291cmNlQWNjZXNzLmNsYXNzLCAidGlua2VycG9wLW1vZGVybi12My5rcnlvIiwgIiIpLmdldEFic29sdXRlUGF0aCgpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3J5b1goZmlsZVRvUmVhZCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICB0cmF2ZXJzYWwuaXRlcmF0ZSgpOwotCi0gICAgICAgIGlmIChncmFwaCBpbnN0YW5jZW9mIFJlbW90ZUdyYXBoKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2TCwgZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW9UZXN0LmFzc2VydE1vZGVybkdyYXBoKGdyYXBoLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuRkVBVFVSRV9JT19SRUFEKQotICAgIHB1YmxpYyB2b2lkIGdfaW9fcmVhZFhqc29uWCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBmaWxlVG9SZWFkID0gVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlRnJvbVJlc291cmNlKFJlYWRUZXN0LmNsYXNzLCBHcmFwaFNPTlJlc291cmNlQWNjZXNzLmNsYXNzLCAidGlua2VycG9wLW1vZGVybi12My5qc29uIiwgIiIpLmdldEFic29sdXRlUGF0aCgpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX2lvX3JlYWRYanNvblgoZmlsZVRvUmVhZCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICB0cmF2ZXJzYWwuaXRlcmF0ZSgpOwotCi0gICAgICAgIGlmIChncmFwaCBpbnN0YW5jZW9mIFJlbW90ZUdyYXBoKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2TCwgZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW9UZXN0LmFzc2VydE1vZGVybkdyYXBoKGdyYXBoLCBmYWxzZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuRkVBVFVSRV9JT19SRUFEKQotICAgIHB1YmxpYyB2b2lkIGdfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaHNvblgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCA9IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZShSZWFkVGVzdC5jbGFzcywgR3JhcGhTT05SZXNvdXJjZUFjY2Vzcy5jbGFzcywgInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvbiIsICIiKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19pb19yZWFkX3dpdGhYcmVhZGVyX2dyYXBoc29uWChmaWxlVG9SZWFkKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5pdGVyYXRlKCk7Ci0KLSAgICAgICAgaWYgKGdyYXBoIGluc3RhbmNlb2YgUmVtb3RlR3JhcGgpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2TCwgZy5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJb1Rlc3QuYXNzZXJ0TW9kZXJuR3JhcGgoZ3JhcGgsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5GRUFUVVJFX0lPX1JFQUQpCi0gICAgcHVibGljIHZvaWQgZ19pb19yZWFkWHhtbFgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCA9IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZShSZWFkVGVzdC5jbGFzcywgR3JhcGhNTFJlc291cmNlQWNjZXNzLmNsYXNzLCAidGlua2VycG9wLW1vZGVybi54bWwiLCAiIikuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZSgnXFwnLCAnLycpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfaW9fcmVhZFh4bWxYKGZpbGVUb1JlYWQpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgdHJhdmVyc2FsLml0ZXJhdGUoKTsKLQotICAgICAgICBpZiAoZ3JhcGggaW5zdGFuY2VvZiBSZW1vdGVHcmFwaCkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoNkwsIGcuRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElvVGVzdC5hc3NlcnRNb2Rlcm5HcmFwaChncmFwaCwgZmFsc2UsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLkZFQVRVUkVfSU9fUkVBRCkKLSAgICBwdWJsaWMgdm9pZCBnX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3JhcGhtbFgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCA9IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZUZyb21SZXNvdXJjZShSZWFkVGVzdC5jbGFzcywgR3JhcGhNTFJlc291cmNlQWNjZXNzLmNsYXNzLCAidGlua2VycG9wLW1vZGVybi54bWwiLCAiIikuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZSgnXFwnLCAnLycpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaG1sWChmaWxlVG9SZWFkKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5pdGVyYXRlKCk7Ci0KLSAgICAgICAgaWYgKGdyYXBoIGluc3RhbmNlb2YgUmVtb3RlR3JhcGgpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2TCwgZy5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDZMLCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJb1Rlc3QuYXNzZXJ0TW9kZXJuR3JhcGgoZ3JhcGgsIGZhbHNlLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFJlYWRUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZFhrcnlvWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHJldHVybiBnLmlvKGZpbGVUb1JlYWQpLnJlYWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IGdldF9nX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3J5b1goZmluYWwgU3RyaW5nIGZpbGVUb1JlYWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbyhmaWxlVG9SZWFkKS53aXRoKElPLnJlYWRlciwgSU8uZ3J5bykucmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZFhqc29uWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHJldHVybiBnLmlvKGZpbGVUb1JlYWQpLnJlYWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IGdldF9nX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3JhcGhzb25YKGZpbmFsIFN0cmluZyBmaWxlVG9SZWFkKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGcuaW8oZmlsZVRvUmVhZCkud2l0aChJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZFh4bWxYKGZpbmFsIFN0cmluZyBmaWxlVG9SZWFkKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGcuaW8oZmlsZVRvUmVhZCkucmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaG1sWChmaW5hbCBTdHJpbmcgZmlsZVRvUmVhZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHJldHVybiBnLmlvKGZpbGVUb1JlYWQpLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaG1sKS5yZWFkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1NlbGVjdFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvU2VsZWN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjUzYzk4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvU2VsZWN0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIzMSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBvcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlLmxvY2FsOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5hczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaWRlbnRpdHk7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbi5rZXlzOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Db2x1bW4udmFsdWVzOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAYXV0aG9yIERhbmllbCBLdXBwaXR6IChodHRwOi8vZ3JlbWxpbi5ndXJ1KQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTZWxlY3RUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFZlcnRleD4+IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYV9iWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhWF9ieVhuYW1lWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dF9hZ2dyZWdhdGVYeFhfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX25hbWVfb3JkZXJfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVhfYnlfWGl0WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzWG5hbWVfZ3JlbWxpblhfaW5FWHVzZXNYX29yZGVyX2J5WHNraWxsX2FzY1hfYXNYYVhfb3V0Vl9hc1hiWF9zZWxlY3RYYV9iWF9ieVhza2lsbFhfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9sYWJlbF9ncm91cENvdW50X2FzWHhYX3NlbGVjdFh4WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9tYXBYYm90aEVfbGFiZWxfZ3JvdXBDb3VudFhfYXNYclhfc2VsZWN0WHBfclgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfY2hvb3NlWG91dEVfY291bnRfaXNYMFhfX2FzWGFYX19hc1hiWFhfY2hvb3NlWHNlbGVjdFhhWF9fc2VsZWN0WGFYX19zZWxlY3RYYlhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2dyb3VwWGFYX2J5WGNvbnN0YW50WGFYWF9ieVhuYW1lWF9zZWxlY3RYYVhfc2VsZWN0WGFYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX2FzWGFYX2dyb3VwWG1YX2J5X2J5WGJvdGhFX2NvdW50WF9iYXJyaWVyX3NlbGVjdFhtWF9zZWxlY3RYc2VsZWN0WGFYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hc1hhWF9ncm91cFhtWF9ieV9ieVhib3RoRV9jb3VudFhfYmFycmllcl9zZWxlY3RYbVhfc2VsZWN0WHNlbGVjdFhhWFhfYnlYbWF0aFhfcGx1c19YWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8VmVydGV4Pj4gZ2V0X2dfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGFYX3NlbGVjdFhhbGxfY29uc3RhbnRYYVhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9zZWxlY3RYYVhfY291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WGFnZVgoKTsKLQotICAgIC8vIGJlbG93IGFyZSBvcmlnaW5hbCBiYWNrKCktdGVzdHMKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfYXNYaGVyZVhfb3V0X3NlbGVjdFhoZXJlWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVgoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlg0WF9vdXRfYXNYaGVyZVhfaGFzWGxhbmdfamF2YVhfc2VsZWN0WGhlcmVYX25hbWUoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZYMVhfb3V0RV9hc1hoZXJlWF9pblZfaGFzWG5hbWVfdmFkYXNYX3NlbGVjdFhoZXJlWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9oYXNYd2VpZ2h0XzFYX2FzWGhlcmVYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZYMVhfb3V0RVhrbm93c1hfYXNYaGVyZVhfaGFzWHdlaWdodF8xWF9pblZfaGFzWG5hbWVfam9zaFhfc2VsZWN0WGhlcmVYKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WWDFYX291dEVYa25vd3NYX2FzWGhlcmVYX2hhc1h3ZWlnaHRfMVhfYXNYZmFrZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX2FzWGhlcmVYb3V0X25hbWVfc2VsZWN0WGhlcmVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX3VuaW9uWGFzWHByb2plY3RYX2luWGNyZWF0ZWRYX2hhc1huYW1lX21hcmtvWF9zZWxlY3RYcHJvamVjdFhfX2FzWHByb2plY3RYX2luWGNyZWF0ZWRYX2luWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hfc2VsZWN0WHByb2plY3RYWF9ncm91cENvdW50X2J5WG5hbWVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfYXNYYlhfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieV9ieVhuYW1lWF9ieVhhZ2VYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfYXNYbmFtZVhfYXNYbGFuZ3VhZ2VYX2FzWGNyZWF0b3JzWF9zZWxlY3RYbmFtZV9sYW5ndWFnZV9jcmVhdG9yc1hfYnlYbmFtZVhfYnlYbGFuZ1hfYnlYaW5YY3JlYXRlZFhfbmFtZV9mb2xkX29yZGVyWGxvY2FsWFgoKTsKLQotICAgIC8vIFRJTktFUlBPUC02MTk6IHNlbGVjdCBzaG91bGQgbm90IHRocm93Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX3NlbGVjdFhhWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1Zfc2VsZWN0WGFfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfdmFsdWVNYXBfc2VsZWN0WGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYYV9iWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9zZWxlY3RYZmlyc3RfYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3NlbGVjdFhmaXJzdF9hX2JYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1ZfdmFsdWVNYXBfc2VsZWN0WGZpcnN0X2FfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1Zfc2VsZWN0WGxhc3RfYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3NlbGVjdFhsYXN0X2FfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfdmFsdWVNYXBfc2VsZWN0WGxhc3RfYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhsYXN0X2FfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1Zfc2VsZWN0WGFsbF9hWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX1Zfc2VsZWN0WGFsbF9hX2JYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhhbGxfYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhhbGxfYV9iWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9hc1hhWF9yZXBlYXRYb3V0X2FzWGFYWF90aW1lc1gyWF9zZWxlY3RYZmlyc3RfYVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9hc1hhWF9yZXBlYXRYb3V0X2FzWGFYWF90aW1lc1gyWF9zZWxlY3RYbGFzdF9hWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIE9iamVjdD4gZ2V0X2dfRVgxMVhfcHJvcGVydGllc1h3ZWlnaHRYX2FzWGFYX3NlbGVjdFhhWF9ieVhrZXlYKGZpbmFsIE9iamVjdCBlMTFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIE9iamVjdD4gZ2V0X2dfRVgxMVhfcHJvcGVydGllc1h3ZWlnaHRYX2FzWGFYX3NlbGVjdFhhWF9ieVh2YWx1ZVgoZmluYWwgT2JqZWN0IGUxMUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8U3RyaW5nLCBPYmplY3Q+IGdldF9nX3dpdGhTaWRlRWZmZWN0WGtfbnVsbFhfaW5qZWN0WHhYX3NlbGVjdFhrWCgpOwotCi0gICAgLy8gd2hlbiBsYWJlbHMgZG9uJ3QgZXhpc3QKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfdW50aWxYb3V0X291dFhfcmVwZWF0WGluX2FzWGFYWF9zZWxlY3RYYVhfYnlYdGFpbFhsb2NhbFhfbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWF9pbl9hc1hiWFhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYYVhfd2hlcmVYb3V0WGtub3dzWFhfc2VsZWN0WGFYKCk7Ci0KLSAgICAvLyBzZWxlY3QgY29sdW1uIHRlc3RzCi0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF91bmZvbGRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3NlbGVjdFhrZXlzWF91bmZvbGQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF91bmZvbGRfc2VsZWN0WGtleXNYX3VuZm9sZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIENvbGxlY3Rpb248U2V0PFN0cmluZz4+PiBnZXRfZ19WX2FzWGFfYlhfb3V0X2FzWGNYX3BhdGhfc2VsZWN0WGtleXNYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX2xvY2FsWHNlbGVjdFhhX2JYX2J5WG5hbWVYWCgpOwotCi0gICAgLy8gdHJpZ2dlcnMgbGFiZWxsZWQgcGF0aCByZXF1aXJlbWVudHMKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9iYXJyaWVyX2FzWGFYX291dFhrbm93c19zZWxlY3RYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9lbGVtZW50TWFwWG5hbWVYX2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVhfc2VsZWN0WG5hbWVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2NvdW50X2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9wYXRoX2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVhfdW5mb2xkKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYV9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgVmVydGV4Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhX2JYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFZlcnRleD4gYmluZGluZ3MgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGJpbmRpbmdzLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIChiaW5kaW5ncy5nZXQoImEiKSkuaWQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKChiaW5kaW5ncy5nZXQoImIiKSkuaWQoKS5lcXVhbHMoY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpIHx8IGJpbmRpbmdzLmdldCgiYiIpLmlkKCkuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGJpbmRpbmdzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBiaW5kaW5ncy5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGJpbmRpbmdzLmdldCgiYSIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoYmluZGluZ3MuZ2V0KCJiIikuZXF1YWxzKCJqb3NoIikgfHwgYmluZGluZ3MuZ2V0KCJiIikuZXF1YWxzKCJ2YWRhcyIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIHZlcnRleC5pZCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFYX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYVhfYnlYbmFtZVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfb3V0X2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dF9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uQSh0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRfYWdncmVnYXRlWHhYX2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dF9hZ2dyZWdhdGVYeFhfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkEodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Q29tbW9uQShmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgZmluYWwgTGlzdDxNYXA8U3RyaW5nLCBTdHJpbmc+PiBleHBlY3RlZCA9IG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgImEiLCAibWFya28iLCAiYiIsICJsb3AiLAotICAgICAgICAgICAgICAgICJhIiwgIm1hcmtvIiwgImIiLCAidmFkYXMiLAotICAgICAgICAgICAgICAgICJhIiwgIm1hcmtvIiwgImIiLCAiam9zaCIsCi0gICAgICAgICAgICAgICAgImEiLCAiam9zaCIsICJiIiwgInJpcHBsZSIsCi0gICAgICAgICAgICAgICAgImEiLCAiam9zaCIsICJiIiwgImxvcCIsCi0gICAgICAgICAgICAgICAgImEiLCAicGV0ZXIiLCAiYiIsICJsb3AiKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKGV4cGVjdGVkLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9uYW1lX29yZGVyX2FzWGJYX3NlbGVjdFhhX2JYX2J5WG5hbWVYX2J5X1hpdFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfbmFtZV9vcmRlcl9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWF9ieV9YaXRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIFN0cmluZz4+IGV4cGVjdGVkID0gbWFrZU1hcExpc3QoMiwKLSAgICAgICAgICAgICAgICAiYSIsICJtYXJrbyIsICJiIiwgIm1hcmtvIiwKLSAgICAgICAgICAgICAgICAiYSIsICJ2YWRhcyIsICJiIiwgInZhZGFzIiwKLSAgICAgICAgICAgICAgICAiYSIsICJqb3NoIiwgImIiLCAiam9zaCIsCi0gICAgICAgICAgICAgICAgImEiLCAicmlwcGxlIiwgImIiLCAicmlwcGxlIiwKLSAgICAgICAgICAgICAgICAiYSIsICJsb3AiLCAiYiIsICJsb3AiLAotICAgICAgICAgICAgICAgICJhIiwgInBldGVyIiwgImIiLCAicGV0ZXIiKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKGV4cGVjdGVkLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoQ1JFVykKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfZ3JlbWxpblhfaW5FWHVzZXNYX29yZGVyX2J5WHNraWxsX2FzY1hfYXNYYVhfb3V0Vl9hc1hiWF9zZWxlY3RYYV9iWF9ieVhza2lsbFhfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfZ3JlbWxpblhfaW5FWHVzZXNYX29yZGVyX2J5WHNraWxsX2FzY1hfYXNYYVhfb3V0Vl9hc1hiWF9zZWxlY3RYYV9iWF9ieVhza2lsbFhfYnlYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gZXhwZWN0ZWQgPSBtYWtlTWFwTGlzdCgyLAotICAgICAgICAgICAgICAgICJhIiwgMywgImIiLCAibWF0dGhpYXMiLAotICAgICAgICAgICAgICAgICJhIiwgNCwgImIiLCAibWFya28iLAotICAgICAgICAgICAgICAgICJhIiwgNSwgImIiLCAic3RlcGhlbiIsCi0gICAgICAgICAgICAgICAgImEiLCA1LCAiYiIsICJkYW5pZWwiKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKGV4cGVjdGVkLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9sYWJlbF9ncm91cENvdW50X2FzWHhYX3NlbGVjdFh4WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbGFiZWxfZ3JvdXBDb3VudF9hc1h4WF9zZWxlY3RYeFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IG1hcDEgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwMS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcDEuY29udGFpbnNLZXkoInBlcnNvbiIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAxLmNvbnRhaW5zS2V5KCJzb2Z0d2FyZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcDEuZ2V0KCJzb2Z0d2FyZSIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcDEuZ2V0KCJwZXJzb24iKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX21hcFhib3RoRV9sYWJlbF9ncm91cENvdW50WF9hc1hyWF9zZWxlY3RYcF9yWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX21hcFhib3RoRV9sYWJlbF9ncm91cENvdW50WF9hc1hyWF9zZWxlY3RYcF9yWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgU2V0PE9iamVjdD4gcGVyc29ucyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgicCIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJyIikpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShwZXJzb25zLmFkZChtYXAuZ2V0KCJwIikpKTsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IHJlbGF0aW9ucyA9IChNYXA8U3RyaW5nLCBMb25nPikgbWFwLmdldCgiciIpOwotICAgICAgICAgICAgaWYgKG1hcC5nZXQoInAiKS5lcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSkpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVsYXRpb25zLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlbGF0aW9ucy5nZXQoImNyZWF0ZWQiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlbGF0aW9ucy5nZXQoImtub3dzIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChtYXAuZ2V0KCJwIikuZXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInZhZGFzIikpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlbGF0aW9ucy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZWxhdGlvbnMuZ2V0KCJrbm93cyIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwLmdldCgicCIpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIikpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlbGF0aW9ucy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCByZWxhdGlvbnMuZ2V0KCJjcmVhdGVkIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZWxhdGlvbnMuZ2V0KCJrbm93cyIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwLmdldCgicCIpLmVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJwZXRlciIpKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCByZWxhdGlvbnMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVsYXRpb25zLmdldCgiY3JlYXRlZCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5rbm93biB2ZXJ0ZXggcmVzdWx0OiAiICsgbWFwLmdldCgicCIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHBlcnNvbnMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfY2hvb3NlWG91dEVfY291bnRfaXNYMFhfX2FzWGFYX19hc1hiWFhfY2hvb3NlWHNlbGVjdFhhWF9fc2VsZWN0WGFYX19zZWxlY3RYYlhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY2hvb3NlWG91dEVfY291bnRfaXNYMFhfX2FzWGFYX19hc1hiWFhfY2hvb3NlWHNlbGVjdFhhWF9fc2VsZWN0WGFYX19zZWxlY3RYYlhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGludCB4Q291bnRlciA9IDA7Ci0gICAgICAgIGludCB5Q291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGlmICh2ZXJ0ZXguZXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInZhZGFzIikpIHx8IHZlcnRleC5lcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIikpIHx8IHZlcnRleC5lcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAicmlwcGxlIikpKQotICAgICAgICAgICAgICAgIHhDb3VudGVyKys7Ci0gICAgICAgICAgICBlbHNlIGlmICh2ZXJ0ZXguZXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpIHx8IHZlcnRleC5lcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAiam9zaCIpKSB8fCB2ZXJ0ZXguZXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInBldGVyIikpKQotICAgICAgICAgICAgICAgIHlDb3VudGVyKys7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmFpbCgiVGhpcyBzdGF0ZSBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQiKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCB5Q291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCB4Q291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2dyb3VwWGFYX2J5WGNvbnN0YW50WGFYWF9ieVhuYW1lWF9zZWxlY3RYYVhfc2VsZWN0WGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfZ3JvdXBYYVhfYnlYY29uc3RhbnRYYVhYX2J5WG5hbWVYX3NlbGVjdFhhWF9zZWxlY3RYYVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfZ3JvdXBYbVhfYnlfYnlYYm90aEVfY291bnRYX2JhcnJpZXJfc2VsZWN0WG1YX3NlbGVjdFhzZWxlY3RYYVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX2dyb3VwWG1YX2J5X2J5WGJvdGhFX2NvdW50WF9iYXJyaWVyX3NlbGVjdFhtWF9zZWxlY3RYc2VsZWN0WGFYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoM0wsIDFMLCAzTCwgM0wsIDFMLCAxTCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX2dyb3VwWG1YX2J5X2J5WGJvdGhFX2NvdW50WF9iYXJyaWVyX3NlbGVjdFhtWF9zZWxlY3RYc2VsZWN0WGFYWF9ieVhtYXRoWF9wbHVzX1hYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfZ3JvdXBYbVhfYnlfYnlYYm90aEVfY291bnRYX2JhcnJpZXJfc2VsZWN0WG1YX3NlbGVjdFhzZWxlY3RYYVhYX2J5WG1hdGhYX3BsdXNfWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDZELCAyRCwgNkQsIDZELCAyRCwgMkQpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGFYX3NlbGVjdFhhbGxfY29uc3RhbnRYYVhYKCkgewotICAgICAgICBmaW5hbCBWZXJ0ZXggbWFya28gPSBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdmFkYXMgPSBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggam9zaCA9IGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxWZXJ0ZXg+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dFhrbm93c1hfYXNYYVhfc2VsZWN0WGFsbF9jb25zdGFudFhhWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KEFycmF5cy5hc0xpc3QobWFya28sIHZhZGFzKSwgQXJyYXlzLmFzTGlzdChtYXJrbywgam9zaCkpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9zZWxlY3RYYVhfY291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2VsZWN0WGFYX2NvdW50KCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMEwsIHRyYXZlcnNhbC5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIC8vIGJlbG93IGFyZSBvcmlnaW5hbCBiYWNrKCktdGVzdHMKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9hc1hoZXJlWF9vdXRfc2VsZWN0WGhlcmVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYaGVyZVhfb3V0X3NlbGVjdFhoZXJlWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdHJhdmVyc2FsLm5leHQoKS48U3RyaW5nPnZhbHVlKCJuYW1lIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudGVyKTsKLSAgICB9Ci0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlg0WF9vdXRfYXNYaGVyZVhfaGFzWGxhbmdfamF2YVhfc2VsZWN0WGhlcmVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYNFhfb3V0X2FzWGhlcmVYX2hhc1hsYW5nX2phdmFYX3NlbGVjdFhoZXJlWChjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhIiwgdmVydGV4LjxTdHJpbmc+dmFsdWUoImxhbmciKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygicmlwcGxlIikgfHwgdmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJsb3AiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRFX2FzWGhlcmVYX2luVl9oYXNYbmFtZV92YWRhc1hfc2VsZWN0WGhlcmVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dEVfYXNYaGVyZVhfaW5WX2hhc1huYW1lX3ZhZGFzWF9zZWxlY3RYaGVyZVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJrbm93cyIsIGVkZ2UubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgidmFkYXMiKSwgZWRnZS5pblZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGVkZ2Uub3V0VmVydGV4KCkuaWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLjVkLCBlZGdlLjxEb3VibGU+dmFsdWUoIndlaWdodCIpLCAwLjAwMDFkKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVhfbmFtZShjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBuYW1lcy5hZGQodHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJsb3AiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dEVYa25vd3NYX2hhc1h3ZWlnaHRfMVhfYXNYaGVyZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9oYXNYd2VpZ2h0XzFYX2FzWGhlcmVYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uQih0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRFWGtub3dzWF9hc1hoZXJlWF9oYXNYd2VpZ2h0XzFYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RVhrbm93c1hfYXNYaGVyZVhfaGFzWHdlaWdodF8xWF9pblZfaGFzWG5hbWVfam9zaFhfc2VsZWN0WGhlcmVYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkIodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0RVhrbm93c1hfYXNYaGVyZVhfaGFzWHdlaWdodF8xWF9hc1hmYWtlWF9pblZfaGFzWG5hbWVfam9zaFhfc2VsZWN0WGhlcmVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dEVYa25vd3NYX2FzWGhlcmVYX2hhc1h3ZWlnaHRfMVhfYXNYZmFrZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRDb21tb25CKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb21tb25CKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCkgewotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBFZGdlIGVkZ2UgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgZWRnZS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMGQsIGVkZ2UuPERvdWJsZT52YWx1ZSgid2VpZ2h0IiksIDAuMDAwMDFkKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hoZXJlWG91dF9uYW1lX3NlbGVjdFhoZXJlWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGhlcmVYb3V0X25hbWVfc2VsZWN0WGhlcmVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBzdXBlci5jaGVja1Jlc3VsdHMobmV3IEhhc2hNYXA8VmVydGV4LCBMb25nPigpIHt7Ci0gICAgICAgICAgICBwdXQoY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwgM2wpOwotICAgICAgICAgICAgcHV0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSwgMmwpOwotICAgICAgICAgICAgcHV0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInBldGVyIiksIDFsKTsKLSAgICAgICAgfX0sIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dFhjcmVhdGVkWF91bmlvblhhc1hwcm9qZWN0WF9pblhjcmVhdGVkWF9oYXNYbmFtZV9tYXJrb1hfc2VsZWN0WHByb2plY3RYX19hc1hwcm9qZWN0WF9pblhjcmVhdGVkWF9pblhrbm93c1hfaGFzWG5hbWVfbWFya29YX3NlbGVjdFhwcm9qZWN0WFhfZ3JvdXBDb3VudF9ieVhuYW1lWCgpIHsKLSAgICAgICAgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX3VuaW9uWGFzWHByb2plY3RYX2luWGNyZWF0ZWRYX2hhc1huYW1lX21hcmtvWF9zZWxlY3RYcHJvamVjdFhfX2FzWHByb2plY3RYX2luWGNyZWF0ZWRYX2luWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hfc2VsZWN0WHByb2plY3RYWF9ncm91cENvdW50X2J5WG5hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMWwsIG1hcC5nZXQoInJpcHBsZSIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZsLCBtYXAuZ2V0KCJsb3AiKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5X2J5WG5hbWVYX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfaGFzWG5hbWVfbWFya29YX2FzWGJYX2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlfYnlYbmFtZVhfYnlYYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhnLlYoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpLm5leHQoKSwgbWFwLmdldCgiYSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIG1hcC5nZXQoImIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyOSwgbWFwLmdldCgiYyIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9hc1huYW1lWF9hc1hsYW5ndWFnZVhfYXNYY3JlYXRvcnNYX3NlbGVjdFhuYW1lX2xhbmd1YWdlX2NyZWF0b3JzWF9ieVhuYW1lWF9ieVhsYW5nWF9ieVhpblhjcmVhdGVkWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfYXNYbmFtZVhfYXNYbGFuZ3VhZ2VYX2FzWGNyZWF0b3JzWF9zZWxlY3RYbmFtZV9sYW5ndWFnZV9jcmVhdG9yc1hfYnlYbmFtZVhfYnlYbGFuZ1hfYnlYaW5YY3JlYXRlZFhfbmFtZV9mb2xkX29yZGVyWGxvY2FsWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIG1hcC5zaXplKCkpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IGNyZWF0b3JzID0gKExpc3Q8U3RyaW5nPikgbWFwLmdldCgiY3JlYXRvcnMiKTsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNMb3AgPSAibG9wIi5lcXVhbHMobWFwLmdldCgibmFtZSIpKSAmJiAiamF2YSIuZXF1YWxzKG1hcC5nZXQoImxhbmd1YWdlIikpICYmCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0b3JzLnNpemUoKSA9PSAzICYmIGNyZWF0b3JzLmdldCgwKS5lcXVhbHMoImpvc2giKSAmJiBjcmVhdG9ycy5nZXQoMSkuZXF1YWxzKCJtYXJrbyIpICYmIGNyZWF0b3JzLmdldCgyKS5lcXVhbHMoInBldGVyIik7Ci0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGlzUmlwcGxlID0gInJpcHBsZSIuZXF1YWxzKG1hcC5nZXQoIm5hbWUiKSkgJiYgImphdmEiLmVxdWFscyhtYXAuZ2V0KCJsYW5ndWFnZSIpKSAmJgotICAgICAgICAgICAgICAgICAgICBjcmVhdG9ycy5zaXplKCkgPT0gMSAmJiBjcmVhdG9ycy5nZXQoMCkuZXF1YWxzKCJqb3NoIik7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGlzTG9wIF4gaXNSaXBwbGUpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIC8vIFRJTktFUlBPUC02MTk6IHNlbGVjdCBzaG91bGQgbm90IHRocm93Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfc2VsZWN0WGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2VsZWN0WGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3NlbGVjdFhhX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3NlbGVjdFhhX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlTWFwX3NlbGVjdFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhhWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl92YWx1ZU1hcF9zZWxlY3RYYV9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYYV9iWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9zZWxlY3RYZmlyc3RfYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zZWxlY3RYZmlyc3RfYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfc2VsZWN0WGZpcnN0X2FfYlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2VsZWN0WGZpcnN0X2FfYlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVNYXBfc2VsZWN0WGZpcnN0X2FYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVNYXBfc2VsZWN0WGZpcnN0X2FYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3NlbGVjdFhsYXN0X2FYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2VsZWN0WGxhc3RfYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfc2VsZWN0WGxhc3RfYV9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zZWxlY3RYbGFzdF9hX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlTWFwX3NlbGVjdFhsYXN0X2FYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVNYXBfc2VsZWN0WGxhc3RfYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVNYXBfc2VsZWN0WGxhc3RfYV9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYbGFzdF9hX2JYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3NlbGVjdFhhbGxfYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zZWxlY3RYYWxsX2FYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIHRyYXZlcnNhbC50b0xpc3QoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3NlbGVjdFhhbGxfYV9iWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zZWxlY3RYYWxsX2FfYlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVNYXBfc2VsZWN0WGFsbF9hWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhhbGxfYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSwgdHJhdmVyc2FsLnRvTGlzdCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVNYXBfc2VsZWN0WGFsbF9hX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhhbGxfYV9iWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpLCB0cmF2ZXJzYWwudG9MaXN0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRVgxMVhfcHJvcGVydGllc1h3ZWlnaHRYX2FzWGFYX3NlbGVjdFhhWF9ieVhrZXlYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19FWDExWF9wcm9wZXJ0aWVzWHdlaWdodFhfYXNYYVhfc2VsZWN0WGFYX2J5WGtleVgoY29udmVydFRvRWRnZUlkKCJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3ZWlnaHQiLCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VYMTFYX3Byb3BlcnRpZXNYd2VpZ2h0WF9hc1hhWF9zZWxlY3RYYVhfYnlYdmFsdWVYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19FWDExWF9wcm9wZXJ0aWVzWHdlaWdodFhfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlWChjb252ZXJ0VG9FZGdlSWQoImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMC40ZCwgKGRvdWJsZSkgdHJhdmVyc2FsLm5leHQoKSwgMC4wMDAxZCk7Ci0gICAgfQotCi0gICAgLy8gd2hlbiBsYWJlbHMgZG9uJ3QgZXhpc3QKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl91bnRpbFhvdXRfb3V0WF9yZXBlYXRYaW5fYXNYYVhYX3NlbGVjdFhhWF9ieVh0YWlsWGxvY2FsWF9uYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWFhfc2VsZWN0WGFYX2J5WHRhaWxYbG9jYWxYX25hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHModGhpcy48U3RyaW5nLCBMb25nPm1ha2VNYXBMaXN0KDEsICJtYXJrbyIsIDVsKS5nZXQoMCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWF9pbl9hc1hiWFhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdW50aWxYb3V0X291dFhfcmVwZWF0WGluX2FzWGFYX2luX2FzWGJYWF9zZWxlY3RYYV9iWF9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHQgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIHJlc3VsdC5nZXQoImEiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCByZXN1bHQuZ2V0KCJiIikpOwotICAgICAgICByZXN1bHQgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIHJlc3VsdC5nZXQoImEiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCByZXN1bHQuZ2V0KCJiIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYXNYYVhfd2hlcmVYb3V0WGtub3dzWFhfc2VsZWN0WGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYXNYYVhfd2hlcmVYb3V0WGtub3dzWFhfc2VsZWN0WGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIC8vLy8vLwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WGtleXNYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WGtleXNYX3VuZm9sZCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMC4yLCAwLjQsIDAuNSwgMS4wKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF91bmZvbGRfc2VsZWN0WGtleXNYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfdW5mb2xkX3NlbGVjdFhrZXlzWF91bmZvbGQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDAuMiwgMC40LCAwLjUsIDEuMCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgxbCwgMWwsIDJsLCAybCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfdW5mb2xkX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDFsLCAxbCwgMmwsIDJsKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0RV93ZWlnaHRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDJsLCAybCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFfYlhfb3V0X2FzWGNYX3BhdGhfc2VsZWN0WGtleXNYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBDb2xsZWN0aW9uPFNldDxTdHJpbmc+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hc1hhX2JYX291dF9hc1hjWF9wYXRoX3NlbGVjdFhrZXlzWCgpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBmaW5hbCBMaXN0PFNldDxTdHJpbmc+PiBzZXQgPSAoTGlzdCkgdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoc2V0LmdldCgwKS5jb250YWlucygiYSIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoc2V0LmdldCgwKS5jb250YWlucygiYiIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBzZXQuZ2V0KDApLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHNldC5nZXQoMSkuY29udGFpbnMoImMiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2V0LmdldCgxKS5zaXplKCkpOwotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FzWGFYX291dFhrbm93c1hfYXNYYlhfbG9jYWxYc2VsZWN0WGFfYlhfYnlYbmFtZVhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX291dFhrbm93c1hfYXNYYlhfbG9jYWxYc2VsZWN0WGFfYlhfYnlYbmFtZVhYKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgaWYgKG1hcC5nZXQoImIiKS5lcXVhbHMoImpvc2giKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIG1hcC5nZXQoImEiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInZhZGFzIiwgdHJhdmVyc2FsLm5leHQoKS5nZXQoImIiKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgbWFwLmdldCgiYSIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiam9zaCIsIHRyYXZlcnNhbC5uZXh0KCkuZ2V0KCJiIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGZpcnN0X2FYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGZpcnN0X2FYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX2FzWGFYX3JlcGVhdFhvdXRfYXNYYVhYX3RpbWVzWDJYX3NlbGVjdFhsYXN0X2FYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGxhc3RfYVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJyaXBwbGUiKSwgY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2JhcnJpZXJfYXNYYVhfb3V0WGtub3dzX3NlbGVjdFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfYmFycmllcl9hc1hhWF9vdXRYa25vd3Nfc2VsZWN0WGFYKCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIiksIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2VsZW1lbnRNYXBYbmFtZVhfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWF9zZWxlY3RYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2VsZW1lbnRNYXBYbmFtZVhfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWF9zZWxlY3RYbmFtZVgoKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgIm1hcmtvIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfY291bnRfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2NvdW50X2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVgoKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMUwsIDFMKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9wYXRoX2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVhfdW5mb2xkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9wYXRoX2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVhfdW5mb2xkKCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIiksIGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hc1hhWF9zZWxlY3RYYVhfYnlYYWdlWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2FzWGFYX3NlbGVjdFhhWF9ieVhhZ2VYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgyOSwgMjcsIDMyLCAzNSksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTaWRlRWZmZWN0WGtfbnVsbFhfaW5qZWN0WHhYX3NlbGVjdFhrWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFN0cmluZywgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2lkZUVmZmVjdFhrX251bGxYX2luamVjdFh4WF9zZWxlY3RYa1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydE51bGwodHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQodHJhdmVyc2FsLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBTZWxlY3RUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBWZXJ0ZXg+PiBnZXRfZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFfYlgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKS5zZWxlY3QoImEiLCAiYiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuYXMoImEiKS5vdXQoImtub3dzIikuYXMoImIiKS48U3RyaW5nPnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmFzKCJhIikub3V0KCJrbm93cyIpLmFzKCJiIikuc2VsZWN0KCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhWF9ieVhuYW1lWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLjxTdHJpbmc+c2VsZWN0KCJhIikuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hcygiYiIpLjxTdHJpbmc+c2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX291dF9hZ2dyZWdhdGVYeFhfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5vdXQoKS5hZ2dyZWdhdGUoIngiKS5hcygiYiIpLjxTdHJpbmc+c2VsZWN0KCJhIiwgImIiKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2FzWGFYX25hbWVfb3JkZXJfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVhfYnlfWGl0WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLnZhbHVlcygibmFtZSIpLm9yZGVyKCkuYXMoImIiKS48U3RyaW5nPnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKS5ieSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2hhc1huYW1lX2dyZW1saW5YX2luRVh1c2VzWF9vcmRlcl9ieVhza2lsbF9hc2NYX2FzWGFYX291dFZfYXNYYlhfc2VsZWN0WGFfYlhfYnlYc2tpbGxYX2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJncmVtbGluIikuaW5FKCJ1c2VzIikub3JkZXIoKS5ieSgic2tpbGwiLCBPcmRlci5hc2MpLmFzKCJhIikub3V0VigpLmFzKCJiIikuc2VsZWN0KCJhIiwgImIiKS5ieSgic2tpbGwiKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9sYWJlbF9ncm91cENvdW50X2FzWHhYX3NlbGVjdFh4WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5sYWJlbCgpLmdyb3VwQ291bnQoKS5hcygieCIpLnNlbGVjdCgieCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfbWFwWGJvdGhFX2xhYmVsX2dyb3VwQ291bnRYX2FzWHJYX3NlbGVjdFhwX3JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5hcygicCIpLm1hcChfXy5ib3RoRSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpKS5hcygiciIpLnNlbGVjdCgicCIsICJyIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9jaG9vc2VYb3V0RV9jb3VudF9pc1gwWF9fYXNYYVhfX2FzWGJYWF9jaG9vc2VYc2VsZWN0WGFYX19zZWxlY3RYYVhfX3NlbGVjdFhiWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpLmlzKDBMKSwgX18uYXMoImEiKSwgX18uYXMoImIiKSkuY2hvb3NlKF9fLnNlbGVjdCgiYSIpLCBfXy5zZWxlY3QoImEiKSwgX18uc2VsZWN0KCJiIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfZ3JvdXBYYVhfYnlYY29uc3RhbnRYYVhYX2J5WG5hbWVYX3NlbGVjdFhhWF9zZWxlY3RYYVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuZ3JvdXAoImEiKS5ieShfXy5jb25zdGFudCgiYSIpKS5ieShfXy52YWx1ZXMoIm5hbWUiKSkKLSAgICAgICAgICAgICAgICAgICAgLmJhcnJpZXIoKSAvLyBUT0RPOiB0aGlzIGJhcnJpZXIoKSBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeQotICAgICAgICAgICAgICAgICAgICAuc2VsZWN0KCJhIikuc2VsZWN0KCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfYXNYYVhfZ3JvdXBYbVhfYnlfYnlYYm90aEVfY291bnRYX2JhcnJpZXJfc2VsZWN0WG1YX3NlbGVjdFhzZWxlY3RYYVhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikuZ3JvdXAoIm0iKS5ieSgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdCgibSIpLnNlbGVjdChfXy5zZWxlY3QoImEiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9hc1hhWF9ncm91cFhtWF9ieV9ieVhib3RoRV9jb3VudFhfYmFycmllcl9zZWxlY3RYbVhfc2VsZWN0WHNlbGVjdFhhWFhfYnlYbWF0aFhfcGx1c19YWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLmdyb3VwKCJtIikuYnkoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJhcnJpZXIoKS5zZWxlY3QoIm0iKS48RG91YmxlPnNlbGVjdChfXy5zZWxlY3QoImEiKSkuYnkoX18ubWF0aCgiXytfIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFZlcnRleD4+IGdldF9nX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hhWF9zZWxlY3RYYWxsX2NvbnN0YW50WGFYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYSIpLnNlbGVjdChQb3AuYWxsLCAoVHJhdmVyc2FsKSBfXy5jb25zdGFudCgiYSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9zZWxlY3RYYVhfY291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2VsZWN0KCJhIikuY291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGJlbG93IGFyZSBvcmlnaW5hbCBiYWNrKCktdGVzdHMKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9hc1hoZXJlWF9vdXRfc2VsZWN0WGhlcmVYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmFzKCJoZXJlIikub3V0KCkuc2VsZWN0KCJoZXJlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlg0WF9vdXRfYXNYaGVyZVhfaGFzWGxhbmdfamF2YVhfc2VsZWN0WGhlcmVYKGZpbmFsIE9iamVjdCB2NElkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHY0SWQpLm91dCgpLmFzKCJoZXJlIikuaGFzKCJsYW5nIiwgImphdmEiKS5zZWxlY3QoImhlcmUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVhfbmFtZShmaW5hbCBPYmplY3QgdjRJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2NElkKS5vdXQoKS5hcygiaGVyZSIpLmhhcygibGFuZyIsICJqYXZhIikuc2VsZWN0KCJoZXJlIikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZYMVhfb3V0RV9hc1hoZXJlWF9pblZfaGFzWG5hbWVfdmFkYXNYX3NlbGVjdFhoZXJlWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXRFKCkuYXMoImhlcmUiKS5pblYoKS5oYXMoIm5hbWUiLCAidmFkYXMiKS5zZWxlY3QoImhlcmUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9oYXNYd2VpZ2h0XzFYX2FzWGhlcmVYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0RSgia25vd3MiKS5oYXMoIndlaWdodCIsIDEuMGQpLmFzKCJoZXJlIikuaW5WKCkuaGFzKCJuYW1lIiwgImpvc2giKS5zZWxlY3QoImhlcmUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9hc1hoZXJlWF9oYXNYd2VpZ2h0XzFYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0RSgia25vd3MiKS5hcygiaGVyZSIpLmhhcygid2VpZ2h0IiwgMS4wZCkuaW5WKCkuaGFzKCJuYW1lIiwgImpvc2giKS48RWRnZT5zZWxlY3QoImhlcmUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9hc1hoZXJlWF9oYXNYd2VpZ2h0XzFYX2FzWGZha2VYX2luVl9oYXNYbmFtZV9qb3NoWF9zZWxlY3RYaGVyZVgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0RSgia25vd3MiKS5hcygiaGVyZSIpLmhhcygid2VpZ2h0IiwgMS4wZCkuYXMoImZha2UiKS5pblYoKS5oYXMoIm5hbWUiLCAiam9zaCIpLjxFZGdlPnNlbGVjdCgiaGVyZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZfYXNYaGVyZVhvdXRfbmFtZV9zZWxlY3RYaGVyZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImhlcmUiKS5vdXQoKS52YWx1ZXMoIm5hbWUiKS5zZWxlY3QoImhlcmUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX3VuaW9uWGFzWHByb2plY3RYX2luWGNyZWF0ZWRYX2hhc1huYW1lX21hcmtvWF9zZWxlY3RYcHJvamVjdFhfX2FzWHByb2plY3RYX2luWGNyZWF0ZWRYX2luWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hfc2VsZWN0WHByb2plY3RYWF9ncm91cENvdW50X2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIChUcmF2ZXJzYWwpIGcuVigpLm91dCgiY3JlYXRlZCIpCi0gICAgICAgICAgICAgICAgICAgIC51bmlvbihhcygicHJvamVjdCIpLmluKCJjcmVhdGVkIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuc2VsZWN0KCJwcm9qZWN0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMoInByb2plY3QiKS5pbigiY3JlYXRlZCIpLmluKCJrbm93cyIpLmhhcygibmFtZSIsICJtYXJrbyIpLnNlbGVjdCgicHJvamVjdCIpKS5ncm91cENvdW50KCkuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfYXNYYlhfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieV9ieVhuYW1lWF9ieVhhZ2VYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFzKCJhIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImIiKS5hcygiYyIpLnNlbGVjdCgiYSIsICJiIiwgImMiKS5ieSgpLmJ5KCJuYW1lIikuYnkoImFnZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9hc1huYW1lWF9hc1hsYW5ndWFnZVhfYXNYY3JlYXRvcnNYX3NlbGVjdFhuYW1lX2xhbmd1YWdlX2NyZWF0b3JzWF9ieVhuYW1lWF9ieVhsYW5nWF9ieVhpblhjcmVhdGVkWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29mdHdhcmUiKS5hcygibmFtZSIpLmFzKCJsYW5ndWFnZSIpLmFzKCJjcmVhdG9ycyIpLnNlbGVjdCgibmFtZSIsICJsYW5ndWFnZSIsICJjcmVhdG9ycyIpLmJ5KCJuYW1lIikuYnkoImxhbmciKS4KLSAgICAgICAgICAgICAgICAgICAgYnkoX18uaW4oImNyZWF0ZWQiKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkub3JkZXIobG9jYWwpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRJTktFUlBPUC02MTk6IHNlbGVjdCBzaG91bGQgbm90IHRocm93Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1Zfc2VsZWN0WGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnNlbGVjdCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3NlbGVjdFhhX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnNlbGVjdCgiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdCgiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9zZWxlY3RYZmlyc3RfYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl9zZWxlY3RYZmlyc3RfYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCAiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYZmlyc3RfYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmZpcnN0LCAiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgImEiLCAiYiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1Zfc2VsZWN0WGxhc3RfYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCAiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3NlbGVjdFhsYXN0X2FfYlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCAiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYbGFzdF9hWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcF9zZWxlY3RYbGFzdF9hX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCAiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl9zZWxlY3RYYWxsX2FYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnNlbGVjdChQb3AuYWxsLCAiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3NlbGVjdFhhbGxfYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5zZWxlY3QoUG9wLmFsbCwgImEiLCAiYiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfdmFsdWVNYXBfc2VsZWN0WGFsbF9hWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCAiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19WX3ZhbHVlTWFwX3NlbGVjdFhhbGxfYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCAiYSIsICJiIik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB3aGVuIGxhYmVscyBkb24ndCBleGlzdAotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWFhfc2VsZWN0WGFYX2J5WHRhaWxYbG9jYWxYX25hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcygiYSIpKS48U3RyaW5nPnNlbGVjdCgiYSIpLmJ5KF9fLnRhaWwobG9jYWwpLnZhbHVlcygibmFtZSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl91bnRpbFhvdXRfb3V0WF9yZXBlYXRYaW5fYXNYYVhfaW5fYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcygiYSIpLmluKCkuYXMoImIiKSkuPFN0cmluZz5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9hc1hhWF93aGVyZVhvdXRYa25vd3NYWF9zZWxlY3RYYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS53aGVyZShfXy5vdXQoImtub3dzIikpLjxWZXJ0ZXg+c2VsZWN0KCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBPYmplY3Q+IGdldF9nX0VYMTFYX3Byb3BlcnRpZXNYd2VpZ2h0WF9hc1hhWF9zZWxlY3RYYVhfYnlYa2V5WChmaW5hbCBPYmplY3QgZTExSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLkUoZTExSWQpLnByb3BlcnRpZXMoIndlaWdodCIpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoVC5rZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgT2JqZWN0PiBnZXRfZ19FWDExWF9wcm9wZXJ0aWVzWHdlaWdodFhfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlWChmaW5hbCBPYmplY3QgZTExSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLkUoZTExSWQpLnByb3BlcnRpZXMoIndlaWdodCIpLmFzKCJhIikuc2VsZWN0KCJhIikuYnkoVC52YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZWxlY3QgY29sdW1ucyB0ZXN0Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmdyb3VwQ291bnQoKS5zZWxlY3QodmFsdWVzKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3VuZm9sZF9zZWxlY3RYdmFsdWVzWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdCh2YWx1ZXMpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dEUoKS52YWx1ZXMoIndlaWdodCIpLmdyb3VwQ291bnQoKS5zZWxlY3QodmFsdWVzKS51bmZvbGQoKS5ncm91cENvdW50KCkuc2VsZWN0KHZhbHVlcykudW5mb2xkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3NlbGVjdFhrZXlzWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnNlbGVjdChrZXlzKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfdW5mb2xkX3NlbGVjdFhrZXlzWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0RSgpLnZhbHVlcygid2VpZ2h0IikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChrZXlzKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgQ29sbGVjdGlvbjxTZXQ8U3RyaW5nPj4+IGdldF9nX1ZfYXNYYV9iWF9vdXRfYXNYY1hfcGF0aF9zZWxlY3RYa2V5c1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiLCAiYiIpLm91dCgpLmFzKCJjIikucGF0aCgpLnNlbGVjdChrZXlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgU3RyaW5nPj4gZ2V0X2dfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX2xvY2FsWHNlbGVjdFhhX2JYX2J5WG5hbWVYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hcygiYSIpLm91dCgia25vd3MiKS5hcygiYiIpLmxvY2FsKF9fLjxWZXJ0ZXgsIFN0cmluZz5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGZpcnN0X2FYKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLmFzKCJhIikucmVwZWF0KF9fLm91dCgpLmFzKCJhIikpLnRpbWVzKDIpLnNlbGVjdChQb3AuZmlyc3QsICJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9hc1hhWF9yZXBlYXRYb3V0X2FzWGFYWF90aW1lc1gyWF9zZWxlY3RYbGFzdF9hWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5hcygiYSIpLnJlcGVhdChfXy5vdXQoKS5hcygiYSIpKS50aW1lcygyKS5zZWxlY3QoUG9wLmxhc3QsICJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2JhcnJpZXJfYXNYYVhfb3V0WGtub3dzX3NlbGVjdFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsIm5hbWUiLCJtYXJrbyIpLmJhcnJpZXIoKS5hcygiYSIpLm91dCgia25vd3MiKS5zZWxlY3QoImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfZWxlbWVudE1hcFhuYW1lWF9hc1hhWF91bmlvblhpZGVudGl0eV9pZGVudGl0eVhfc2VsZWN0WGFYX3NlbGVjdFhuYW1lWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsIm5hbWUiLCJtYXJrbyIpLmVsZW1lbnRNYXAoIm5hbWUiKS5hcygiYSIpLnVuaW9uKGlkZW50aXR5KCksaWRlbnRpdHkoKSkuc2VsZWN0KCJhIikuc2VsZWN0KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExvbmc+IGdldF9nX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9jb3VudF9hc1hhWF91bmlvblhpZGVudGl0eV9pZGVudGl0eVhfc2VsZWN0WGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwibmFtZSIsIm1hcmtvIikuY291bnQoKS5hcygiYSIpLnVuaW9uKGlkZW50aXR5KCksaWRlbnRpdHkoKSkuc2VsZWN0KCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3BhdGhfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwibWFya28iKS5wYXRoKCkuYXMoImEiKS51bmlvbihpZGVudGl0eSgpLGlkZW50aXR5KCkpLnNlbGVjdCgiYSIpLnVuZm9sZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WGFnZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5ieSgiYWdlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxTdHJpbmcsIE9iamVjdD4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYa19udWxsWF9pbmplY3RYeFhfc2VsZWN0WGtYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNpZGVFZmZlY3QoImsiLG51bGwpLmluamVjdCgieCIpLnNlbGVjdCgiayIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9TaG9ydGVzdFBhdGhUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1Nob3J0ZXN0UGF0aFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzUxOTExZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1Nob3J0ZXN0UGF0aFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnNlYXJjaC5wYXRoLlNob3J0ZXN0UGF0aFRlc3RIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuR1JBVEVGVUw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuc2VhcmNoLnBhdGguU2hvcnRlc3RQYXRoVmVydGV4UHJvZ3JhbVRlc3QuQUxMX1NIT1JURVNUX1BBVEhTOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlNob3J0ZXN0UGF0aC4qOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi0vKioKLSAqIEBhdXRob3IgRGFuaWVsIEt1cHBpdHogKGh0dHA6Ly9ncmVtbGluLmd1cnUpCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFNob3J0ZXN0UGF0aFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwcml2YXRlIFNob3J0ZXN0UGF0aFRlc3RIZWxwZXIgaGVscGVyOwotCi0gICAgQEJlZm9yZQotICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemVIZWxwZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5oZWxwZXIgPSBuZXcgU2hvcnRlc3RQYXRoVGVzdEhlbHBlcih0aGlzLCBnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9zaG9ydGVzdFBhdGgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2JvdGhfZGVkdXBfc2hvcnRlc3RQYXRoKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1Zfc2hvcnRlc3RQYXRoX2RpcmVjdGlvblhJTlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX3Nob3J0ZXN0UGF0aF9lZGdlc1hvdXRFWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1Zfc2hvcnRlc3RQYXRoX2VkZ2VzSW5jbHVkZWRfZWRnZXNYb3V0RVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfbWFya29YWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1Zfc2hvcnRlc3RQYXRoX3RhcmdldFh2YWx1ZXNYbmFtZVhfaXNYbWFya29YWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzTGFiZWxYc29mdHdhcmVYWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfam9zaFhYX2Rpc3RhbmNlWHdlaWdodFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2hhc1huYW1lX2RhbmllbFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYbmFtZV9zdGVwaGVuWFhfZWRnZXNYYm90aEVYdXNlc1hYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9oYXNYc29uZ19uYW1lX01JR0hUX0FTX1dFTExYX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWHNvbmdfbmFtZV9NQVlCRV9ZT1VfS05PV19IT1dfSV9GRUVMWFhfZWRnZXNYb3V0RVhmb2xsb3dlZEJ5WFhfZGlzdGFuY2VYd2VpZ2h0WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF9tYXhEaXN0YW5jZVgxWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfdmFkYXNYX3Nob3J0ZXN0UGF0aF9kaXN0YW5jZVh3ZWlnaHRYX21heERpc3RhbmNlWDFfM1goKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9zaG9ydGVzdFBhdGgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2hvcnRlc3RQYXRoKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IGV4cGVjdGVkID0gQXJyYXlzLnN0cmVhbShBTExfU0hPUlRFU1RfUEFUSFMpLm1hcChoZWxwZXI6Om1ha2VQYXRoKQotICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoZXhwZWN0ZWQsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2JvdGhfZGVkdXBfc2hvcnRlc3RQYXRoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfZGVkdXBfc2hvcnRlc3RQYXRoKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IGV4cGVjdGVkID0gQXJyYXlzLnN0cmVhbShBTExfU0hPUlRFU1RfUEFUSFMpLm1hcChoZWxwZXI6Om1ha2VQYXRoKQotICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoZXhwZWN0ZWQsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Nob3J0ZXN0UGF0aF9lZGdlc0luY2x1ZGVkKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3Nob3J0ZXN0UGF0aF9lZGdlc0luY2x1ZGVkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IGV4cGVjdGVkID0gQXJyYXlzLnN0cmVhbShBTExfU0hPUlRFU1RfUEFUSFMpLm1hcChwIC0+IGhlbHBlci5tYWtlUGF0aCh0cnVlLCBwKSkKLSAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKGV4cGVjdGVkLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9zaG9ydGVzdFBhdGhfZGlyZWN0aW9uWElOWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfZGlyZWN0aW9uWElOWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxQYXRoPiBleHBlY3RlZCA9IEFycmF5cy5zdHJlYW0oQUxMX1NIT1JURVNUX1BBVEhTKQotICAgICAgICAgICAgICAgIC5maWx0ZXIocCAtPiAocFswXS5lcXVhbHMoIm1hcmtvIikgJiYgcC5sZW5ndGggPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwWzBdLmVxdWFscygidmFkYXMiKSAmJiBBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJ2YWRhcyIpLmNvbnRhaW5zKHBbcC5sZW5ndGggLSAxXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAocFswXS5lcXVhbHMoImxvcCIpICYmIEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgImxvcCIsICJqb3NoIiwgInBldGVyIikuY29udGFpbnMocFtwLmxlbmd0aCAtIDFdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwWzBdLmVxdWFscygiam9zaCIpICYmIEFycmF5cy5hc0xpc3QoIm1hcmtvIiwgImpvc2giKS5jb250YWlucyhwW3AubGVuZ3RoIC0gMV0pKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBbMF0uZXF1YWxzKCJyaXBwbGUiKSAmJiBBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJqb3NoIiwgInJpcHBsZSIpLmNvbnRhaW5zKHBbcC5sZW5ndGggLSAxXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAocFswXS5lcXVhbHMoInBldGVyIikgJiYgcC5sZW5ndGggPT0gMSkpCi0gICAgICAgICAgICAgICAgLm1hcChoZWxwZXI6Om1ha2VQYXRoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoZXhwZWN0ZWQsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Nob3J0ZXN0UGF0aF9lZGdlc1hvdXRFWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfZWRnZXNYb3V0RVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3V0RGlyZWN0ZWRQYXRocyhmYWxzZSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfc2hvcnRlc3RQYXRoX2VkZ2VzSW5jbHVkZWRfZWRnZXNYb3V0RVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2hvcnRlc3RQYXRoX2VkZ2VzSW5jbHVkZWRfZWRnZXNYb3V0RVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrT3V0RGlyZWN0ZWRQYXRocyh0cnVlLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaGVja091dERpcmVjdGVkUGF0aHMoZmluYWwgYm9vbGVhbiBpbmNsdWRlRWRnZXMsIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCkgewotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IGV4cGVjdGVkID0gQXJyYXlzLnN0cmVhbShBTExfU0hPUlRFU1RfUEFUSFMpCi0gICAgICAgICAgICAgICAgLmZpbHRlcihwIC0+IChwWzBdLmVxdWFscygibWFya28iKSAmJiAhcFtwLmxlbmd0aCAtIDFdLmVxdWFscygicGV0ZXIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwWzBdLmVxdWFscygidmFkYXMiKSAmJiBwLmxlbmd0aCA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBbMF0uZXF1YWxzKCJsb3AiKSAmJiBwLmxlbmd0aCA9PSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBbMF0uZXF1YWxzKCJqb3NoIikgJiYgQXJyYXlzLmFzTGlzdCgibG9wIiwgImpvc2giLCAicmlwcGxlIikuY29udGFpbnMocFtwLmxlbmd0aCAtIDFdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwWzBdLmVxdWFscygicmlwcGxlIikgJiYgcC5sZW5ndGggPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwWzBdLmVxdWFscygicGV0ZXIiKSAmJiBBcnJheXMuYXNMaXN0KCJsb3AiLCAicGV0ZXIiKS5jb250YWlucyhwW3AubGVuZ3RoIC0gMV0pKSkKLSAgICAgICAgICAgICAgICAubWFwKG5hbWVzIC0+IGhlbHBlci5tYWtlUGF0aChpbmNsdWRlRWRnZXMsIG5hbWVzKSkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKGV4cGVjdGVkLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8UGF0aD4gZXhwZWN0ZWQgPSBBcnJheXMuc3RyZWFtKEFMTF9TSE9SVEVTVF9QQVRIUykKLSAgICAgICAgICAgICAgICAuZmlsdGVyKHAgLT4gcFswXS5lcXVhbHMoIm1hcmtvIikpLm1hcChoZWxwZXI6Om1ha2VQYXRoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoZXhwZWN0ZWQsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfbWFya29YWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX21hcmtvWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUGF0aHNUb01hcmtvKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYdmFsdWVzWG5hbWVYX2lzWG1hcmtvWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfc2hvcnRlc3RQYXRoX3RhcmdldFh2YWx1ZXNYbmFtZVhfaXNYbWFya29YWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tQYXRoc1RvTWFya28odHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tQYXRoc1RvTWFya28oZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIGZpbmFsIExpc3Q8UGF0aD4gZXhwZWN0ZWQgPSBBcnJheXMuc3RyZWFtKEFMTF9TSE9SVEVTVF9QQVRIUykKLSAgICAgICAgICAgICAgICAuZmlsdGVyKHAgLT4gcFtwLmxlbmd0aCAtIDFdLmVxdWFscygibWFya28iKSkubWFwKGhlbHBlcjo6bWFrZVBhdGgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhleHBlY3RlZCwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzTGFiZWxYc29mdHdhcmVYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNMYWJlbFhzb2Z0d2FyZVhYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IGV4cGVjdGVkID0gQXJyYXlzLnN0cmVhbShBTExfU0hPUlRFU1RfUEFUSFMpCi0gICAgICAgICAgICAgICAgLmZpbHRlcihwIC0+Ci0gICAgICAgICAgICAgICAgICAgICAgICBwWzBdLmVxdWFscygibWFya28iKSAmJiBBcnJheXMuYXNMaXN0KCJsb3AiLCAicmlwcGxlIikuY29udGFpbnMocFtwLmxlbmd0aCAtIDFdKSkKLSAgICAgICAgICAgICAgICAubWFwKGhlbHBlcjo6bWFrZVBhdGgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhleHBlY3RlZCwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfam9zaFhYX2Rpc3RhbmNlWHdlaWdodFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfam9zaFhYX2Rpc3RhbmNlWHdlaWdodFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhoZWxwZXIubWFrZVBhdGgoIm1hcmtvIiwgImxvcCIsICJqb3NoIiksIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKENSRVcpCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1huYW1lX2RhbmllbFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYbmFtZV9zdGVwaGVuWFhfZWRnZXNYYm90aEVYdXNlc1hYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX2RhbmllbFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYbmFtZV9zdGVwaGVuWFhfZWRnZXNYYm90aEVYdXNlc1hYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFBhdGg+IGV4cGVjdGVkID0gQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBoZWxwZXIubWFrZVBhdGgoImRhbmllbCIsICJncmVtbGluIiwgInN0ZXBoZW4iKSwKLSAgICAgICAgICAgICAgICBoZWxwZXIubWFrZVBhdGgoImRhbmllbCIsICJ0aW5rZXJncmFwaCIsICJzdGVwaGVuIikpOwotICAgICAgICBjaGVja1Jlc3VsdHMoZXhwZWN0ZWQsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChHUkFURUZVTCkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWHNvbmdfbmFtZV9NSUdIVF9BU19XRUxMWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1hzb25nX25hbWVfTUFZQkVfWU9VX0tOT1dfSE9XX0lfRkVFTFhYX2VkZ2VzWG91dEVYZm9sbG93ZWRCeVhYX2Rpc3RhbmNlWHdlaWdodFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWHNvbmdfbmFtZV9NSUdIVF9BU19XRUxMWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1hzb25nX25hbWVfTUFZQkVfWU9VX0tOT1dfSE9XX0lfRkVFTFhYX2VkZ2VzWG91dEVYZm9sbG93ZWRCeVhYX2Rpc3RhbmNlWHdlaWdodFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8UGF0aD4gZXhwZWN0ZWQgPSBBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIGhlbHBlci5tYWtlUGF0aCgiTUlHSFQgQVMgV0VMTCIsICJEUlVNUyIsICJNQVlCRSBZT1UgS05PVyBIT1cgSSBGRUVMIiksCi0gICAgICAgICAgICAgICAgaGVscGVyLm1ha2VQYXRoKCJNSUdIVCBBUyBXRUxMIiwgIlNISVAgT0YgRk9PTFMiLCAiTUFZQkUgWU9VIEtOT1cgSE9XIEkgRkVFTCIpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKGV4cGVjdGVkLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoX21heERpc3RhbmNlWDFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGhfbWF4RGlzdGFuY2VYMVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8UGF0aD4gZXhwZWN0ZWQgPSBBcnJheXMuc3RyZWFtKEFMTF9TSE9SVEVTVF9QQVRIUykKLSAgICAgICAgICAgICAgICAuZmlsdGVyKHAgLT4gcFswXS5lcXVhbHMoIm1hcmtvIikgJiYgcC5sZW5ndGggPD0gMikubWFwKGhlbHBlcjo6bWFrZVBhdGgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhleHBlY3RlZCwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWG5hbWVfdmFkYXNYX3Nob3J0ZXN0UGF0aF9kaXN0YW5jZVh3ZWlnaHRYX21heERpc3RhbmNlWDFfM1goKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWG5hbWVfdmFkYXNYX3Nob3J0ZXN0UGF0aF9kaXN0YW5jZVh3ZWlnaHRYX21heERpc3RhbmNlWDFfM1goKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8UGF0aD4gZXhwZWN0ZWQgPSBTdHJlYW0uY29uY2F0KEFycmF5cy5zdHJlYW0oQUxMX1NIT1JURVNUX1BBVEhTKQotICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihwIC0+IHBbMF0uZXF1YWxzKCJ2YWRhcyIpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoInZhZGFzIiwgIm1hcmtvIiwgImxvcCIsICJwZXRlciIpLmNvbnRhaW5zKHBbcC5sZW5ndGggLSAxXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGhlbHBlcjo6bWFrZVBhdGgpLAotICAgICAgICAgICAgICAgIFN0cmVhbS5vZihoZWxwZXIubWFrZVBhdGgoInZhZGFzIiwgIm1hcmtvIiwgImxvcCIsICJqb3NoIikpKQotICAgICAgICAgICAgICAgIC5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoZXhwZWN0ZWQsIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgU2hvcnRlc3RQYXRoVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX3Nob3J0ZXN0UGF0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9ib3RoX2RlZHVwX3Nob3J0ZXN0UGF0aCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuZGVkdXAoKS5zaG9ydGVzdFBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKGluY2x1ZGVFZGdlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1Zfc2hvcnRlc3RQYXRoX2RpcmVjdGlvblhJTlgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChlZGdlcywgRGlyZWN0aW9uLklOKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfZWRnZXNYb3V0RVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChlZGdlcywgX18ub3V0RSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZF9lZGdlc1hvdXRFWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKGluY2x1ZGVFZGdlcykud2l0aChlZGdlcywgX18ub3V0RSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gZ2V0X2dfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnNob3J0ZXN0UGF0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfbWFya29YWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKHRhcmdldCwgX18uaGFzKCJuYW1lIiwgIm1hcmtvIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX3Nob3J0ZXN0UGF0aF90YXJnZXRYdmFsdWVzWG5hbWVYX2lzWG1hcmtvWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aCh0YXJnZXQsIF9fLjxWZXJ0ZXgsIFN0cmluZz52YWx1ZXMoIm5hbWUiKS5pcygibWFya28iKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzTGFiZWxYc29mdHdhcmVYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5zaG9ydGVzdFBhdGgoKS53aXRoKHRhcmdldCwgX18uaGFzTGFiZWwoInNvZnR3YXJlIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX2pvc2hYWF9kaXN0YW5jZVh3ZWlnaHRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnNob3J0ZXN0UGF0aCgpCi0gICAgICAgICAgICAgICAgICAgIC53aXRoKHRhcmdldCwgX18uaGFzKCJuYW1lIiwiam9zaCIpKQotICAgICAgICAgICAgICAgICAgICAud2l0aChkaXN0YW5jZSwgIndlaWdodCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2hhc1huYW1lX2RhbmllbFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYbmFtZV9zdGVwaGVuWFhfZWRnZXNYYm90aEVYdXNlc1hYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygibmFtZSIsICJkYW5pZWwiKS5zaG9ydGVzdFBhdGgoKQotICAgICAgICAgICAgICAgICAgICAud2l0aCh0YXJnZXQsIF9fLmhhcygibmFtZSIsInN0ZXBoZW4iKSkKLSAgICAgICAgICAgICAgICAgICAgLndpdGgoZWRnZXMsIF9fLmJvdGhFKCJ1c2VzIikpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX2hhc1hzb25nX25hbWVfTUlHSFRfQVNfV0VMTFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYc29uZ19uYW1lX01BWUJFX1lPVV9LTk9XX0hPV19JX0ZFRUxYWF9lZGdlc1hvdXRFWGZvbGxvd2VkQnlYWF9kaXN0YW5jZVh3ZWlnaHRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygic29uZyIsICJuYW1lIiwgIk1JR0hUIEFTIFdFTEwiKQotICAgICAgICAgICAgICAgICAgICAuc2hvcnRlc3RQYXRoKCkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCh0YXJnZXQsIF9fLmhhcygic29uZyIsICJuYW1lIiwgIk1BWUJFIFlPVSBLTk9XIEhPVyBJIEZFRUwiKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aChlZGdlcywgX18ub3V0RSgiZm9sbG93ZWRCeSIpKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoKGRpc3RhbmNlLCAid2VpZ2h0Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aF9tYXhEaXN0YW5jZVgxWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5zaG9ydGVzdFBhdGgoKQotICAgICAgICAgICAgICAgICAgICAud2l0aChtYXhEaXN0YW5jZSwgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1ZfaGFzWG5hbWVfdmFkYXNYX3Nob3J0ZXN0UGF0aF9kaXN0YW5jZVh3ZWlnaHRYX21heERpc3RhbmNlWDFfM1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJuYW1lIiwgInZhZGFzIikuc2hvcnRlc3RQYXRoKCkKLSAgICAgICAgICAgICAgICAgICAgLndpdGgoZGlzdGFuY2UsICJ3ZWlnaHQiKQotICAgICAgICAgICAgICAgICAgICAud2l0aChtYXhEaXN0YW5jZSwgMS4zKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1N1bVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvU3VtVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2RhYjI4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvU3VtVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBEYW5pZWwgS3VwcGl0eiAoaHR0cDovL2dyZW1saW4uZ3VydSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3VtVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZfYWdlX3N1bSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9zdW1YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX3N1bVhsb2NhbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9zdW0oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8SW50ZWdlciwgTnVtYmVyPiBnZXRfZ19pbmplY3RYbnVsbF8xMF81X251bGxYX3N1bSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxMaXN0PEludGVnZXI+LCBOdW1iZXI+IGdldF9nX2luamVjdFhsaXN0WG51bGxfMTBfNV9udWxsWFhfc3VtWGxvY2FsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX3N1bSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9hZ2VfZm9sZF9zdW1YbG9jYWxYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2Zvb19zdW0oKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZfZm9vX2ZvbGRfc3VtWGxvY2FsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9zdW1YKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9zdW1YbG9jYWxYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2Vfc3VtKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdlX3N1bSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTnVtYmVyIHN1bSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMjMsIHN1bS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFhudWxsXzEwXzVfbnVsbFhfc3VtKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8SW50ZWdlciwgTnVtYmVyPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYbnVsbF8xMF81X251bGxYX3N1bSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTnVtYmVyIHN1bSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxNSwgc3VtLmludFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WGxpc3RYbnVsbF8xMF81X251bGxYWF9zdW1YbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8TGlzdDxJbnRlZ2VyPiwgTnVtYmVyPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYbGlzdFhudWxsXzEwXzVfbnVsbFhYX3N1bVhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE51bWJlciBzdW0gPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTUsIHN1bS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX3N1bVhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9zdW1YbG9jYWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBOdW1iZXIgc3VtID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyMywgc3VtLmludFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9zdW0oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX3N1bSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTnVtYmVyIHN1bSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMjMsIHN1bS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX3N1bVhsb2NhbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9zdW1YbG9jYWxYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9zdW0oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX3N1bSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTs7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2VfZm9sZF9zdW1YbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdlX2ZvbGRfc3VtWGxvY2FsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTnVtYmVyIHN1bSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMjMsIHN1bS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2Zvb19zdW0oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9mb29fc3VtKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZm9vX2ZvbGRfc3VtWGxvY2FsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2Zvb19mb2xkX3N1bVhsb2NhbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X3N1bVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9zdW1YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBOdW1iZXI+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLjAsIG1hcC5nZXQoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEuMCwgbWFwLmdldCgibG9wIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF92YWx1ZXNYYWdlWF9zdW1YbG9jYWxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX3N1bVhsb2NhbFgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMjkpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFN1bVRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2FnZV9zdW0oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJhZ2UiKS5zdW0oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEludGVnZXIsIE51bWJlcj4gZ2V0X2dfaW5qZWN0WG51bGxfMTBfNV9udWxsWF9zdW0oKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QobnVsbCwgMTAsIDUsIG51bGwpLnN1bSgpOwotICAgICAgICB9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPExpc3Q8SW50ZWdlcj4sIE51bWJlcj4gZ2V0X2dfaW5qZWN0WGxpc3RYbnVsbF8xMF81X251bGxYWF9zdW1YbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuaW5qZWN0KEFycmF5cy5hc0xpc3QobnVsbCwgMTAsIDUsIG51bGwpKS5zdW0oU2NvcGUubG9jYWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBOdW1iZXI+IGdldF9nX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfc3VtWGxvY2FsWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiYWdlIikuY2FwKCJhIikuc3VtKFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfc3VtKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgiYSIpLmJ5KCJhZ2UiKS5jYXAoImEiKS51bmZvbGQoKS5zdW0oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTnVtYmVyPiBnZXRfZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX3N1bVhsb2NhbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuYWdncmVnYXRlKCJhIikuYnkoImZvbyIpLmNhcCgiYSIpLnN1bShTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX3N1bSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoImEiKS5ieSgiZm9vIikuY2FwKCJhIikudW5mb2xkKCkuc3VtKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9hZ2VfZm9sZF9zdW1YbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygiYWdlIikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9mb29fc3VtKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikuc3VtKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE51bWJlcj4gZ2V0X2dfVl9mb29fZm9sZF9zdW1YbG9jYWxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlcygiZm9vIikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9zdW1YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb2Z0d2FyZSIpLjxTdHJpbmcsIE51bWJlcj5ncm91cCgpLmJ5KCJuYW1lIikuYnkoYm90aEUoKS52YWx1ZXMoIndlaWdodCIpLnN1bSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgSW50ZWdlcj4gZ2V0X2dfVlgxWF92YWx1ZXNYYWdlWF9zdW1YbG9jYWxYKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuc3VtKFNjb3BlLmxvY2FsKTsKLSAgICAgICAgfTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1VuZm9sZFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvVW5mb2xkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDYwY2Q5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvVW5mb2xkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaGFzSWQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbmZvbGRUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfbG9jYWxYb3V0RV9mb2xkWF91bmZvbGQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzSWRYNlhYX3BhdGhfYnlYbmFtZVhfdW5mb2xkKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjZJZCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfbG9jYWxYb3V0RV9mb2xkWF91bmZvbGQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZfbG9jYWxYb3V0RV9mb2xkWF91bmZvbGQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PEVkZ2U+IGVkZ2VzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZWRnZXMuYWRkKHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGVkZ2VzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNJZFg2WFhfcGF0aF9ieVhuYW1lWF91bmZvbGQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNJZFg2WFhfcGF0aF9ieVhuYW1lWF91bmZvbGQoCi0gICAgICAgICAgICAgICAgY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGNvbnZlcnRUb1ZlcnRleElkKCJwZXRlciIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJsb3AiLCAicGV0ZXIiLCAibWFya28iLCAiam9zaCIsICJsb3AiLCAicGV0ZXIiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBVbmZvbGRUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfbG9jYWxYb3V0RV9mb2xkWF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkubG9jYWwob3V0RSgpLmZvbGQoKSkudW5mb2xkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNJZFg2WFhfcGF0aF9ieVhuYW1lWF91bmZvbGQoT2JqZWN0IHYxSWQsIE9iamVjdCB2NklkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLnJlcGVhdChib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChoYXNJZCh2NklkKSkucGF0aCgpLmJ5KCJuYW1lIikudW5mb2xkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1ZhbHVlTWFwVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9WYWx1ZU1hcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRjNjgxYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1ZhbHVlTWFwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDE4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5XaXRoT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5DUkVXOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmNvbnRhaW5zU3RyaW5nOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVC5pZDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVC5sYWJlbDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nRW5kc1dpdGguZW5kc1dpdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFZhbHVlTWFwVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0Pj4gZ2V0X2dfVl92YWx1ZU1hcCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE9iamVjdD4+IGdldF9nX1ZfdmFsdWVNYXBYdHJ1ZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q+PiBnZXRfZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE9iamVjdD4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9maWx0ZXJYb3V0RVhjcmVhdGVkWFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcFh0cnVlX25hbWVfYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE9iamVjdD4+IGdldF9nX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE9iamVjdD4+IGdldF9nX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zX2xhYmVsc1hfYnlYdW5mb2xkWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE9iamVjdD4+IGdldF9nX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zX2lkc1hfYnlYdW5mb2xkWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8U3RyaW5nPj4+IGdldF9nX1ZYMVhfb3V0WGNyZWF0ZWRYX3ZhbHVlTWFwKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WWDFYX3ZhbHVlTWFwWG5hbWVfbG9jYXRpb25YX2J5WHVuZm9sZFhfYnkoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlTWFwKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMaXN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZU1hcCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTGlzdD4gdmFsdWVzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gKFN0cmluZykgdmFsdWVzLmdldCgibmFtZSIpLmdldCgwKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyOSwgdmFsdWVzLmdldCgiYWdlIikuZ2V0KDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImpvc2giKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzMiwgdmFsdWVzLmdldCgiYWdlIikuZ2V0KDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInBldGVyIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzUsIHZhbHVlcy5nZXQoImFnZSIpLmdldCgwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDI3LCB2YWx1ZXMuZ2V0KCJhZ2UiKS5nZXQoMCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygibG9wIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImphdmEiLCB2YWx1ZXMuZ2V0KCJsYW5nIikuZ2V0KDApKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInJpcHBsZSIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJqYXZhIiwgdmFsdWVzLmdldCgibGFuZyIpLmdldCgwKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkl0IGlzIG5vdCBwb3NzaWJsZSB0byByZWFjaCBoZXJlOiAiICsgdmFsdWVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgY291bnRlcik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWCgpIHsKLSAgICAgICAgZm9yIChmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiB0cmF2ZXJzYWwgOgotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoZ2V0X2dfVl92YWx1ZU1hcFh0cnVlWCgpLCBnZXRfZ19WX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWCgpKSkgewotICAgICAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHZhbHVlcyA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSAoKExpc3QpIHZhbHVlcy5nZXQoIm5hbWUiKSkuZ2V0KDApOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KHZhbHVlcy5jb250YWluc0tleShULmlkKSwgaXModHJ1ZSkpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjksICgoTGlzdCkgdmFsdWVzLmdldCgiYWdlIikpLmdldCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygiam9zaCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzMiwgKChMaXN0KSB2YWx1ZXMuZ2V0KCJhZ2UiKSkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJwZXRlciIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzNSwgKChMaXN0KSB2YWx1ZXMuZ2V0KCJhZ2UiKSkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyNywgKChMaXN0KSB2YWx1ZXMuZ2V0KCJhZ2UiKSkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJsb3AiKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImphdmEiLCAoKExpc3QpIHZhbHVlcy5nZXQoImxhbmciKSkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2Z0d2FyZSIsIHZhbHVlcy5nZXQoVC5sYWJlbCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInJpcHBsZSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygiamF2YSIsICgoTGlzdCkgdmFsdWVzLmdldCgibGFuZyIpKS5nZXQoMCkpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNvZnR3YXJlIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWNoIGhlcmU6ICIgKyB2YWx1ZXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl92YWx1ZU1hcFhuYW1lX2FnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTGlzdD4gdmFsdWVzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gKFN0cmluZykgdmFsdWVzLmdldCgibmFtZSIpLmdldCgwKTsKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyOSwgdmFsdWVzLmdldCgiYWdlIikuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJqb3NoIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzIsIHZhbHVlcy5nZXQoImFnZSIpLmdldCgwKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicGV0ZXIiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzNSwgdmFsdWVzLmdldCgiYWdlIikuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDI3LCB2YWx1ZXMuZ2V0KCJhZ2UiKS5nZXQoMCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImxvcCIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0TnVsbCh2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoInJpcHBsZSIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0TnVsbCh2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWNoIGhlcmU6ICIgKyB2YWx1ZXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zWCgpIHsKLSAgICAgICAgZm9yIChmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiB0cmF2ZXJzYWwgOgotICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QoZ2V0X2dfVl92YWx1ZU1hcFh0cnVlX25hbWVfYWdlWCgpLCBnZXRfZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWF93aXRoWHRva2Vuc1goKSkpIHsKLSAgICAgICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiB2YWx1ZXMgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gKFN0cmluZykgKChMaXN0KSB2YWx1ZXMuZ2V0KCJuYW1lIikpLmdldCgwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KHZhbHVlcy5jb250YWluc0tleShULmlkKSwgaXModHJ1ZSkpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyOSwgKChMaXN0KSB2YWx1ZXMuZ2V0KCJhZ2UiKSkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJqb3NoIikpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzIsICgoTGlzdCkgdmFsdWVzLmdldCgiYWdlIikpLmdldCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicGV0ZXIiKSkgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzNSwgKChMaXN0KSB2YWx1ZXMuZ2V0KCJhZ2UiKSkuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDI3LCAoKExpc3QpIHZhbHVlcy5nZXQoImFnZSIpKS5nZXQoMCkpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZhbHVlcy5nZXQoVC5sYWJlbCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoImxvcCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0TnVsbCh2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNvZnR3YXJlIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicmlwcGxlIikpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnROdWxsKHZhbHVlcy5nZXQoImxhbmciKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJdCBpcyBub3QgcG9zc2libGUgdG8gcmVhY2ggaGVyZTogIiArIHZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWF93aXRoWHRva2Vuc19sYWJlbHNYX2J5WHVuZm9sZFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIE9iamVjdD4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zX2xhYmVsc1hfYnlYdW5mb2xkWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiB2YWx1ZXMgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSAoU3RyaW5nKSB2YWx1ZXMuZ2V0KCJuYW1lIik7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KHZhbHVlcy5jb250YWluc0tleShULmlkKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgICAgIGlmIChuYW1lLmVxdWFscygibWFya28iKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjksIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInBlcnNvbiIsIHZhbHVlcy5nZXQoVC5sYWJlbCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygiam9zaCIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzMiwgdmFsdWVzLmdldCgiYWdlIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJwZXRlciIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzNSwgdmFsdWVzLmdldCgiYWdlIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyNywgdmFsdWVzLmdldCgiYWdlIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgdmFsdWVzLmdldChULmxhYmVsKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJsb3AiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnROdWxsKHZhbHVlcy5nZXQoImxhbmciKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb2Z0d2FyZSIsIHZhbHVlcy5nZXQoVC5sYWJlbCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicmlwcGxlIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0TnVsbCh2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygic29mdHdhcmUiLCB2YWx1ZXMuZ2V0KFQubGFiZWwpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWNoIGhlcmU6ICIgKyB2YWx1ZXMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zX2lkc1hfYnlYdW5mb2xkWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl92YWx1ZU1hcFhuYW1lX2FnZVhfd2l0aFh0b2tlbnNfaWRzWF9ieVh1bmZvbGRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IHZhbHVlcyA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IChTdHJpbmcpIHZhbHVlcy5nZXQoIm5hbWUiKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQodmFsdWVzLmNvbnRhaW5zS2V5KFQubGFiZWwpLCBpcyhmYWxzZSkpOwotICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKCJtYXJrbyIpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyOSwgdmFsdWVzLmdldCgiYWdlIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSwgdmFsdWVzLmdldChULmlkKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuZXF1YWxzKCJqb3NoIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMyLCB2YWx1ZXMuZ2V0KCJhZ2UiKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIiksIHZhbHVlcy5nZXQoVC5pZCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicGV0ZXIiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzUsIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoInBldGVyIiksIHZhbHVlcy5nZXQoVC5pZCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygidmFkYXMiKSkgewotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjcsIHZhbHVlcy5nZXQoImFnZSIpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4SWQoInZhZGFzIiksIHZhbHVlcy5nZXQoVC5pZCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygibG9wIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0TnVsbCh2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgibG9wIiksIHZhbHVlcy5nZXQoVC5pZCkpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscygicmlwcGxlIikpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0TnVsbCh2YWx1ZXMuZ2V0KCJsYW5nIikpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZCgicmlwcGxlIiksIHZhbHVlcy5nZXQoVC5pZCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJdCBpcyBub3QgcG9zc2libGUgdG8gcmVhY2ggaGVyZTogIiArIHZhbHVlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRYY3JlYXRlZFhfdmFsdWVNYXAoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q8U3RyaW5nPj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0WGNyZWF0ZWRYX3ZhbHVlTWFwKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIExpc3Q8U3RyaW5nPj4gdmFsdWVzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibG9wIiwgdmFsdWVzLmdldCgibmFtZSIpLmdldCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiamF2YSIsIHZhbHVlcy5nZXQoImxhbmciKS5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVElOS0VSUE9QLTE0ODMKLSAgICAgKi8KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYcGVyc29uWF9maWx0ZXJYb3V0RVhjcmVhdGVkWFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYKCkgewotICAgIAlmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LE1hcDxPYmplY3QsT2JqZWN0Pj4gZ3QgPSBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfZmlsdGVyWG91dEVYY3JlYXRlZFhYX3ZhbHVlTWFwX3dpdGhYdG9rZW5zWCgpOwotICAgIAlpbnQgY250ID0gMDsKLSAgICAJd2hpbGUoZ3QuaGFzTmV4dCgpKXsKLSAgICAJCWZpbmFsIE1hcDxPYmplY3QsT2JqZWN0PiBtID0gZ3QubmV4dCgpOwotICAgIAkJYXNzZXJ0VHJ1ZShtLnNpemUoKSA+IDApOwotICAgIAkJZm9yIChPYmplY3QgbyA6IG0ua2V5U2V0KCkpewotICAgIAkJCWFzc2VydE5vdE51bGwobS5nZXQobykpOwotICAgIAkJfQotICAgIAkJYXNzZXJ0VHJ1ZShtLmNvbnRhaW5zS2V5KGlkKSk7Ci0gICAgCQlhc3NlcnRUcnVlKG0uY29udGFpbnNLZXkobGFiZWwpKTsKLSAgICAJCWFzc2VydEVxdWFscygicGVyc29uIixtLmdldChsYWJlbCkpOwotICAgIAkJY250Kys7Ci0gICAgCX0KLSAgICAJLy8gY2hlY2sgd2UgaGFkIHJlc3VsdHMKLSAgICAJYXNzZXJ0VHJ1ZShjbnQgPiAwKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKENSRVcpCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX3ZhbHVlTWFwWG5hbWVfbG9jYXRpb25YX2J5WHVuZm9sZFhfYnkoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LE1hcDxPYmplY3QsT2JqZWN0Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF92YWx1ZU1hcFhuYW1lX2xvY2F0aW9uWF9ieVh1bmZvbGRYX2J5KGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgICAgICBmYWlsKCJTaG91bGQgaGF2ZSBmYWlsZWQgYXMgbXVsdGlwbGUgYnkoKSBub3QgYWxsb3dlZCBmb3IgdmFsdWVNYXAiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGV4LmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoInZhbHVlTWFwKCkvcHJvcGVydHlNYXAoKSBzdGVwIGNhbiBvbmx5IGhhdmUgb25lIGJ5IG1vZHVsYXRvciIpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFZhbHVlTWFwVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTGlzdD4+IGdldF9nX1ZfdmFsdWVNYXAoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVNYXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcFh0cnVlWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCh0cnVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcF93aXRoWHRva2Vuc1goKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2Vucyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExpc3Q+PiBnZXRfZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCgibmFtZSIsICJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcFh0cnVlX25hbWVfYWdlWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS52YWx1ZU1hcCh0cnVlLCAibmFtZSIsICJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcFhuYW1lX2FnZVhfd2l0aFh0b2tlbnNYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcFhuYW1lX2FnZVhfd2l0aFh0b2tlbnNfbGFiZWxzWF9ieVh1bmZvbGRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5sYWJlbHMpLmJ5KF9fLnVuZm9sZCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl92YWx1ZU1hcFhuYW1lX2FnZVhfd2l0aFh0b2tlbnNfaWRzWF9ieVh1bmZvbGRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnZhbHVlTWFwKCJuYW1lIiwgImFnZSIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5pZHMpLmJ5KF9fLnVuZm9sZCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTGlzdDxTdHJpbmc+Pj4gZ2V0X2dfVlgxWF9vdXRYY3JlYXRlZFhfdmFsdWVNYXAoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCJjcmVhdGVkIikudmFsdWVNYXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgT2JqZWN0Pj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2ZpbHRlclhvdXRFWGNyZWF0ZWRYWF92YWx1ZU1hcF93aXRoWHRva2Vuc1goKSB7Ci0gICAgICAgIAlyZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmZpbHRlcihfXy5vdXRFKCJjcmVhdGVkIikpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBPYmplY3Q+PiBnZXRfZ19WWDFYX3ZhbHVlTWFwWG5hbWVfbG9jYXRpb25YX2J5WHVuZm9sZFhfYnkoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkudmFsdWVNYXAoIm5hbWUiLCJsb2NhdGlvbiIpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1ZlcnRleFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvVmVydGV4VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTE0NmEwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9tYXAvVmVydGV4VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuSWdub3JlRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuU0lOSzsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmNvbnRhaW5zSW5BbnlPcmRlcjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqIEBhdXRob3IgRGFuaWVsIEt1cHBpdHogKGh0dHA6Ly9ncmVtbGluLmd1cnUpCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFZlcnRleFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWGxpc3RYdjFfdjJfdjNYWF9uYW1lKGZpbmFsIFZlcnRleCB2MSwgZmluYWwgVmVydGV4IHYyLCBmaW5hbCBWZXJ0ZXggdjMpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlhsaXN0WDFfMl8zWFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQsIGZpbmFsIE9iamVjdCB2M0lkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1YoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYdjFYX291dChmaW5hbCBWZXJ0ZXggdjEpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXQoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgyWF9pbihmaW5hbCBPYmplY3QgdjJJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDRYX2JvdGgoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19FKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYZTExWChmaW5hbCBFZGdlIGUxMSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYMTFYKGZpbmFsIE9iamVjdCBlMTFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYbGlzdFhlN19lMTFYWChmaW5hbCBFZGdlIGU3LCBmaW5hbCBFZGdlIGUxMSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYZTdfZTExWChmaW5hbCBFZGdlIGU3LCBmaW5hbCBFZGdlIGUxMSk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlgxWF9vdXRFKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WWDJYX2luRShmaW5hbCBPYmplY3QgdjJJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9ib3RoRShmaW5hbCBPYmplY3QgdjRJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9ib3RoRVhjcmVhdGVkWChmaW5hbCBPYmplY3QgdjRJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dEVfaW5WKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMlhfaW5FX291dFYoZmluYWwgT2JqZWN0IHYySWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9vdXRFX2hhc1h3ZWlnaHRfMVhfb3V0VigpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vdXRfb3V0RV9pblZfaW5FX2luVl9ib3RoX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZYMVhfb3V0RVhrbm93c1hfYm90aFZfbmFtZShmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dFhrbm93c1goZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRYa25vd3NfY3JlYXRlZFgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9pblYoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzX2NyZWF0ZWRYX2luVihmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX291dF9vdXQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0X291dF9vdXQoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9vdXRfbmFtZShmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dEVfb3RoZXJWKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYNFhfYm90aEVfb3RoZXJWKGZpbmFsIE9iamVjdCB2NElkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYNFhfYm90aEVfaGFzWHdlaWdodF9sdF8xWF9vdGhlclYoZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF90b19YT1VUX2tub3dzWChmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFfMl8zXzRYX25hbWUoZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIE9iamVjdCB2MklkLCBmaW5hbCBPYmplY3QgdjNJZCwgZmluYWwgT2JqZWN0IHY0SWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WX2hhc0xhYmVsWGxvb3BzWF9ib3RoRVhzZWxmWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNMYWJlbFhsb29wc1hfYm90aFhzZWxmWCgpOwotCi0gICAgLy8gR1JBUEggVkVSVEVYL0VER0UKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlhsaXN0WDFfMl8zWFhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWGxpc3RYMV8yXzNYWF9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKGdyYXBoLCAibWFya28iKSwgY29udmVydFRvVmVydGV4SWQoZ3JhcGgsICJ2YWRhcyIpLCBjb252ZXJ0VG9WZXJ0ZXhJZChncmFwaCwgImxvcCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJ2YWRhcyIsICJsb3AiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYbGlzdFh2MV92Ml92M1hYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVlhsaXN0WHYxX3YyX3YzWFhfbmFtZShjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpLCBjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJsb3AiKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAidmFkYXMiLCAibG9wIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgLy8gVkVSVEVYIEFESkFDRU5DWQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1YoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PFZlcnRleD4gdmVydGljZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICB2ZXJ0aWNlcy5hZGQodHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0KGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0X2dfdjFfb3V0KHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWHYxWF9vdXQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlh2MVhfb3V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRfZ192MV9vdXQodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0X2dfdjFfb3V0KGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxWZXJ0ZXg+IHZlcnRpY2VzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICB2ZXJ0aWNlcy5hZGQodmVydGV4KTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJ2YWRhcyIpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygiam9zaCIpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygibG9wIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDJYX2luKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMlhfaW4oY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRfZ192Ml9pbih0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRfZ192Ml9pbihmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCkgewotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHRyYXZlcnNhbC5uZXh0KCkudmFsdWUoIm5hbWUiKSwgIm1hcmtvIik7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlg0WF9ib3RoKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYNFhfYm90aChjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PFZlcnRleD4gdmVydGljZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBWZXJ0ZXggdmVydGV4ID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIHZlcnRpY2VzLmFkZCh2ZXJ0ZXgpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXgudmFsdWUoIm5hbWUiKS5lcXVhbHMoIm1hcmtvIikgfHwKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJyaXBwbGUiKSB8fAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgudmFsdWUoIm5hbWUiKS5lcXVhbHMoImxvcCIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCB2ZXJ0aWNlcy5zaXplKCkpOwotICAgIH0KLQotICAgIC8vIEVER0UgQURKQUNFTkNZCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0UoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGVkZ2VzLmFkZCh0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgZWRnZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50ZXIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRVgxMVgoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBlZGdlSWQgPSBjb252ZXJ0VG9FZGdlSWQoImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX0VYMTFYKGVkZ2VJZCk7Ci0gICAgICAgIGFzc2VydF9nX0VYMTFYKGVkZ2VJZCwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VYZTExWCgpIHsKLSAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gY29udmVydFRvRWRnZShncmFwaCwgImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX0VYZTExWChlZGdlKTsKLSAgICAgICAgYXNzZXJ0X2dfRVgxMVgoZWRnZS5pZCgpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfRVhlN19lMTFYKCkgewotICAgICAgICBmaW5hbCBFZGdlIGU3ID0gY29udmVydFRvRWRnZShncmFwaCwgIm1hcmtvIiwgImtub3dzIiwgInZhZGFzIik7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZTExID0gY29udmVydFRvRWRnZShncmFwaCwgImpvc2giLCAiY3JlYXRlZCIsICJsb3AiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX0VYZTdfZTExWChlNyxlMTEpOwotCi0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PEVkZ2U+IGxpc3QgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBsaXN0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQobGlzdCwgY29udGFpbnNJbkFueU9yZGVyKGU3LCBlMTEpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX0VYbGlzdFhlN19lMTFYWCgpIHsKLSAgICAgICAgZmluYWwgRWRnZSBlNyA9IGNvbnZlcnRUb0VkZ2UoZ3JhcGgsICJtYXJrbyIsICJrbm93cyIsICJ2YWRhcyIpOwotICAgICAgICBmaW5hbCBFZGdlIGUxMSA9IGNvbnZlcnRUb0VkZ2UoZ3JhcGgsICJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIik7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FWGxpc3RYZTdfZTExWFgoZTcsZTExKTsKLQotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTGlzdDxFZGdlPiBsaXN0ID0gdHJhdmVyc2FsLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbGlzdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUaGF0KGxpc3QsIGNvbnRhaW5zSW5BbnlPcmRlcihlNywgZTExKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19FWDExQXNTdHJpbmdYKCkgewotICAgICAgICBmaW5hbCBPYmplY3QgZWRnZUlkID0gY29udmVydFRvRWRnZUlkKCJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIik7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiB0cmF2ZXJzYWwgPSBnZXRfZ19FWDExWChlZGdlSWQudG9TdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydF9nX0VYMTFYKGVkZ2VJZCwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0X2dfRVgxMVgoZmluYWwgT2JqZWN0IGVkZ2VJZCwgZmluYWwgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IHRyYXZlcnNhbCkgewotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgZmluYWwgRWRnZSBlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVkZ2VJZCwgZS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dEUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RShjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBlZGdlcy5hZGQoZWRnZSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGVkZ2UubGFiZWwoKS5lcXVhbHMoImtub3dzIikgfHwgZWRnZS5sYWJlbCgpLmVxdWFscygiY3JlYXRlZCIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBlZGdlcy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgyWF9pbkUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMlhfaW5FKGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyh0cmF2ZXJzYWwubmV4dCgpLmxhYmVsKCksICJrbm93cyIpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYNFhfYm90aEVYY3JlYXRlZFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZYNFhfYm90aEVYY3JlYXRlZFgoY29udmVydFRvVmVydGV4SWQoImpvc2giKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxFZGdlPiBlZGdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIEVkZ2UgZWRnZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBlZGdlcy5hZGQoZWRnZSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGVkZ2UubGFiZWwoKS5lcXVhbHMoImNyZWF0ZWQiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoZWRnZS5vdXRWZXJ0ZXgoKS5pZCgpLCBjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBlZGdlcy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlg0WF9ib3RoRSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlg0WF9ib3RoRShjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PEVkZ2U+IGVkZ2VzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgRWRnZSBlZGdlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgICAgIGVkZ2VzLmFkZChlZGdlKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoZWRnZS5sYWJlbCgpLmVxdWFscygia25vd3MiKSB8fCBlZGdlLmxhYmVsKCkuZXF1YWxzKCJjcmVhdGVkIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGVkZ2VzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgLy8gRURHRS9WRVJURVggQURKQUNFTkNZCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0RV9pblYoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRFX2luVihjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHRoaXMuYXNzZXJ0X2dfdjFfb3V0KHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDJYX2luRV9vdXRWKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMlhfaW5FX291dFYoY29udmVydFRvVmVydGV4SWQoInZhZGFzIikpOwotICAgICAgICB0aGlzLmFzc2VydF9nX3YyX2luKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dEVfaGFzWHdlaWdodF8xWF9vdXRWKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0RV9oYXNYd2VpZ2h0XzFYX291dFYoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgSW50ZWdlcj4gY291bnRzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgT2JqZWN0IGlkID0gdHJhdmVyc2FsLm5leHQoKS5pZCgpOwotICAgICAgICAgICAgZmluYWwgaW50IHByZXZpb3VzQ291bnQgPSBjb3VudHMuZ2V0T3JEZWZhdWx0KGlkLCAwKTsKLSAgICAgICAgICAgIGNvdW50cy5wdXQoaWQsIHByZXZpb3VzQ291bnQgKyAxKTsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY291bnRzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb3VudHMuZ2V0KGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvdW50cy5nZXQoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW50VmFsdWUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dEVfaW5WX2luRV9pblZfYm90aF9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dEVfaW5WX2luRV9pblZfYm90aF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIEludGVnZXI+IGNvdW50cyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgZmluYWwgaW50IHByZXZpb3VzQ291bnQgPSBjb3VudHMuZ2V0T3JEZWZhdWx0KGtleSwgMCk7Ci0gICAgICAgICAgICBjb3VudHMucHV0KGtleSwgcHJldmlvdXNDb3VudCArIDEpOwotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudHMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGNvdW50cy5nZXQoImpvc2giKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNvdW50cy5nZXQoIm1hcmtvIikuaW50VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudHMuZ2V0KCJwZXRlciIpLmludFZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxMCwgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRFWGtub3dzWF9ib3RoVl9uYW1lKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RVhrbm93c1hfYm90aFZfbmFtZShjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBuYW1lcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygidmFkYXMiKSk7Ci0gICAgICAgIG5hbWVzLnJlbW92ZSgibWFya28iKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIG5hbWVzLnNpemUoKSk7Ci0gICAgICAgIG5hbWVzLnJlbW92ZSgibWFya28iKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG5hbWVzLnNpemUoKSk7Ci0gICAgICAgIG5hbWVzLnJlbW92ZSgiam9zaCIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgbmFtZXMucmVtb3ZlKCJ2YWRhcyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbmFtZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0RV9vdGhlclYoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRFX290aGVyVihjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBpbnQgY291bnRlciA9IDA7Ci0gICAgICAgIGZpbmFsIFNldDxWZXJ0ZXg+IHZlcnRpY2VzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgZmluYWwgVmVydGV4IHZlcnRleCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICB2ZXJ0aWNlcy5hZGQodmVydGV4KTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJ2YWRhcyIpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygiam9zaCIpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygibG9wIikpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudGVyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDRYX2JvdGhFX290aGVyVigpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDRYX2JvdGhFX290aGVyVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8VmVydGV4PiB2ZXJ0aWNlcyA9IHRyYXZlcnNhbC50b0xpc3QoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHZlcnRpY2VzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUodmVydGljZXMuc3RyZWFtKCkuYW55TWF0Y2godiAtPiB2LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJtYXJrbyIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUodmVydGljZXMuc3RyZWFtKCkuYW55TWF0Y2godiAtPiB2LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJyaXBwbGUiKSkpOwotICAgICAgICBhc3NlcnRUcnVlKHZlcnRpY2VzLnN0cmVhbSgpLmFueU1hdGNoKHYgLT4gdi52YWx1ZSgibmFtZSIpLmVxdWFscygibG9wIikpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDRYX2JvdGhFX2hhc1h3ZWlnaHRfbHRfMVhfb3RoZXJWKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYNFhfYm90aEVfaGFzWHdlaWdodF9sdF8xWF9vdGhlclYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBMaXN0PFZlcnRleD4gdmVydGljZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCB2ZXJ0aWNlcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModmVydGljZXMuZ2V0KDApLnZhbHVlKCJuYW1lIiksICJsb3AiKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgLy8gVkVSVEVYIEVER0UgTEFCRUwgQURKQUNFTkNZCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0WGtub3dzWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dFhrbm93c1goY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBhc3NlcnRfZ192MV9vdXRYa25vd3NYKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFBc1N0cmluZ1hfb3V0WGtub3dzWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dFhrbm93c1goY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydF9nX3YxX291dFhrbm93c1godHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0X2dfdjFfb3V0WGtub3dzWChmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCkgewotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8VmVydGV4PiB2ZXJ0aWNlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgdmVydGljZXMuYWRkKHZlcnRleCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygidmFkYXMiKSB8fAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXgudmFsdWUoIm5hbWUiKS5lcXVhbHMoImpvc2giKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmVydGljZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0WGtub3dzX2NyZWF0ZWRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0WGtub3dzX2NyZWF0ZWRYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgdGhpcy5hc3NlcnRfZ192MV9vdXQodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0RVhrbm93c1hfaW5WKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RVhrbm93c1hfaW5WKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgdGhpcy5hc3NlcnRfZ192MV9vdXRYa25vd3NYKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dEVYa25vd3NfY3JlYXRlZFhfaW5WKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfb3V0RVhrbm93c19jcmVhdGVkWF9pblYoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICB0aGlzLmFzc2VydF9nX3YxX291dCh0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfb3V0KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICBmaW5hbCBTZXQ8VmVydGV4PiB2ZXJ0aWNlcyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgdmVydGljZXMuYWRkKHZlcnRleCk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC52YWx1ZSgibmFtZSIpLmVxdWFscygibG9wIikgfHwKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4LnZhbHVlKCJuYW1lIikuZXF1YWxzKCJyaXBwbGUiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmVydGljZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0X291dF9vdXQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRfb3V0X291dChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIC8vIFBST1BFUlRZIFRFU1RJTkcKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dF9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gbmFtZXMgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBuYW1lcy5hZGQobmFtZSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG5hbWUuZXF1YWxzKCJ2YWRhcyIpIHx8Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUuZXF1YWxzKCJqb3NoIikgfHwKLSAgICAgICAgICAgICAgICAgICAgbmFtZS5lcXVhbHMoImxvcCIpKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY291bnRlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBuYW1lcy5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF90b19YT1VUX2tub3dzWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3RvX1hPVVRfa25vd3NYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gMDsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSB2ZXJ0ZXgudmFsdWUoIm5hbWUiKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobmFtZS5lcXVhbHMoInZhZGFzIikgfHwgbmFtZS5lcXVhbHMoImpvc2giKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvdW50ZXIpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfUkVNT1ZFX1ZFUlRJQ0VTKQotICAgIEBJZ25vcmVFbmdpbmUoVHJhdmVyc2FsRW5naW5lLlR5cGUuQ09NUFVURVIpCi0gICAgcHVibGljIHZvaWQgZ19WWDFfMl8zXzRYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCB2TG9wID0gY29udmVydFRvVmVydGV4SWQoImxvcCIpOwotICAgICAgICBnLlYodkxvcCkuZHJvcCgpLml0ZXJhdGUoKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFfMl8zXzRYX25hbWUoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpLCB2TG9wLCBjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJ2YWRhcyIsICJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhwZXJzb25YX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJsb3AiLCAibG9wIiwgImxvcCIsICJsb3AiLCAicmlwcGxlIiwgInJpcHBsZSIsICJyaXBwbGUiLCAicmlwcGxlIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChTSU5LKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNMYWJlbFhsb29wc1hfYm90aEVYc2VsZlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYbG9vcHNYX2JvdGhFWHNlbGZYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotCi0gICAgICAgIExpc3Q8RWRnZT4gZWRnZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBlZGdlcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWRnZXMuZ2V0KDApLCBlZGdlcy5nZXQoMSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoU0lOSykKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYbG9vcHNYX2JvdGhYc2VsZlgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhsb29wc1hfYm90aFhzZWxmWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLQotICAgICAgICBMaXN0PFZlcnRleD4gdmVydGljZXMgPSB0cmF2ZXJzYWwudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCB2ZXJ0aWNlcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModmVydGljZXMuZ2V0KDApLCB2ZXJ0aWNlcy5nZXQoMSkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFZlcnRleFRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWGxpc3RYdjFfdjJfdjNYWF9uYW1lKGZpbmFsIFZlcnRleCB2MSwgZmluYWwgVmVydGV4IHYyLCBmaW5hbCBWZXJ0ZXggdjMpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoQXJyYXlzLmFzTGlzdCh2MSwgdjIsIHYzKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlhsaXN0WDFfMl8zWFhfbmFtZShmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHYySWQsIGZpbmFsIE9iamVjdCB2M0lkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKEFycmF5cy5hc0xpc3QodjFJZCwgdjJJZCwgdjNJZCkpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1YoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlh2MVhfb3V0KGZpbmFsIFZlcnRleCB2MSkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MSkub3V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXQoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgyWF9pbihmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MklkKS5pbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYNFhfYm90aChmaW5hbCBPYmplY3QgdjRJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2NElkKS5ib3RoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxFZGdlLCBFZGdlPiBnZXRfZ19FKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WWDFYX291dEUoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0RSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WWDJYX2luRShmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MklkKS5pbkUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRWRnZT4gZ2V0X2dfVlg0WF9ib3RoRShmaW5hbCBPYmplY3QgdjRJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2NElkKS5ib3RoRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBFZGdlPiBnZXRfZ19WWDRYX2JvdGhFWGNyZWF0ZWRYKGZpbmFsIE9iamVjdCB2NElkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHY0SWQpLmJvdGhFKCJjcmVhdGVkIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRFX2luVihmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXRFKCkuaW5WKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgyWF9pbkVfb3V0VihmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MklkKS5pbkUoKS5vdXRWKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9vdXRFX2hhc1h3ZWlnaHRfMVhfb3V0VigpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXRFKCkuaGFzKCJ3ZWlnaHQiLCAxLjBkKS5vdXRWKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9vdXRfb3V0RV9pblZfaW5FX2luVl9ib3RoX25hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0RSgpLmluVigpLmluRSgpLmluVigpLmJvdGgoKS52YWx1ZXMoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX291dEVYa25vd3NYX2JvdGhWX25hbWUoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0RSgia25vd3MiKS5ib3RoVigpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfb3V0WGtub3dzWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoImtub3dzIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRYa25vd3NfY3JlYXRlZFgoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0KCJrbm93cyIsICJjcmVhdGVkIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRFWGtub3dzWF9pblYoZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkub3V0RSgia25vd3MiKS5pblYoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dEVYa25vd3NfY3JlYXRlZFhfaW5WKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dEUoImtub3dzIiwgImNyZWF0ZWQiKS5pblYoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDFYX291dEVfb3RoZXJWKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dEUoKS5vdGhlclYoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WWDRYX2JvdGhFX290aGVyVihmaW5hbCBPYmplY3QgdjRJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2NElkKS5ib3RoRSgpLm90aGVyVigpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYNFhfYm90aEVfaGFzWHdlaWdodF9sdF8xWF9vdGhlclYoT2JqZWN0IHY0SWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjRJZCkuYm90aEUoKS5oYXMoIndlaWdodCIsIFAubHQoMWQpKS5vdGhlclYoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVmVydGV4PiBnZXRfZ19WX291dF9vdXQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVlgxWF9vdXRfb3V0X291dChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5vdXQoKS5vdXQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX291dF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQpLm91dCgpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX1ZYMVhfdG9fWE9VVF9rbm93c1goZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkudG8oRGlyZWN0aW9uLk9VVCwgImtub3dzIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxXzJfM180WF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCwgZmluYWwgT2JqZWN0IHYzSWQsIGZpbmFsIE9iamVjdCB2NElkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHYxSWQsIHYySWQsIHYzSWQsIHY0SWQpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRVgxMVgoZmluYWwgT2JqZWN0IGUxMUlkKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKGUxMUlkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPEVkZ2UsIEVkZ2U+IGdldF9nX0VYZTExWChmaW5hbCBFZGdlIGUxMSkgewotICAgICAgICAgICAgcmV0dXJuIGcuRShlMTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRVhsaXN0WGU3X2UxMVhYKGZpbmFsIEVkZ2UgZTcsIGZpbmFsIEVkZ2UgZTExKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKEFycmF5cy5hc0xpc3QoZTcsIGUxMSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8RWRnZSwgRWRnZT4gZ2V0X2dfRVhlN19lMTFYKGZpbmFsIEVkZ2UgZTcsIGZpbmFsIEVkZ2UgZTExKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5FKGU3LCBlMTEpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9uYW1lKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5WKCkuaGFzTGFiZWwoInNvZnR3YXJlIikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEVkZ2U+IGdldF9nX1ZfaGFzTGFiZWxYbG9vcHNYX2JvdGhFWHNlbGZYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJsb29wcyIpLmJvdGhFKCJzZWxmIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfVl9oYXNMYWJlbFhsb29wc1hfYm90aFhzZWxmWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgibG9vcHMiKS5ib3RoKCJzZWxmIik7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1dyaXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL21hcC9Xcml0ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjYTQ1Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvbWFwL1dyaXRlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXA7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5UZXN0SGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5JTzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIFdyaXRlVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fd3JpdGVYa3J5b1goZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlKSAgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiBnZXRfZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncnlvWChmaW5hbCBTdHJpbmcgZmlsZVRvV3JpdGUpICB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IGdldF9nX2lvX3dyaXRlWGpzb25YKGZpbmFsIFN0cmluZyBmaWxlVG9Xcml0ZSkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhzb25YKGZpbmFsIFN0cmluZyBmaWxlVG9Xcml0ZSkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fd3JpdGVYeG1sWChmaW5hbCBTdHJpbmcgZmlsZVRvV3JpdGUpICB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IGdldF9nX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBobWxYKGZpbmFsIFN0cmluZyBmaWxlVG9Xcml0ZSkgIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuRkVBVFVSRV9JT19XUklURSkKLSAgICBwdWJsaWMgdm9pZCBnX2lvX3dyaXRlWGtyeW9YKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlID0gVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlKFdyaXRlVGVzdC5jbGFzcywgInRpbmtlcnBvcC1tb2Rlcm4tdjMiLCAiLmtyeW8iKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLSAgICAgICAgZmluYWwgRmlsZSBmID0gbmV3IEZpbGUoZmlsZVRvV3JpdGUpOwotICAgICAgICBhc3NlcnRUaGF0KGYubGVuZ3RoKCkgPT0gMCwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19pb193cml0ZVhrcnlvWChmaWxlVG9Xcml0ZSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICB0cmF2ZXJzYWwuaXRlcmF0ZSgpOwotCi0gICAgICAgIGFzc2VydFRoYXQoZi5sZW5ndGgoKSA+IDAsIGlzKHRydWUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLkZFQVRVUkVfSU9fV1JJVEUpCi0gICAgcHVibGljIHZvaWQgZ19pb193cml0ZV93aXRoWHdyaXRlX2dyeW9YKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlID0gVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlKFdyaXRlVGVzdC5jbGFzcywgInRpbmtlcnBvcC1tb2Rlcm4tdjMiLCAiLmtyeW8iKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLSAgICAgICAgZmluYWwgRmlsZSBmID0gbmV3IEZpbGUoZmlsZVRvV3JpdGUpOwotICAgICAgICBhc3NlcnRUaGF0KGYubGVuZ3RoKCkgPT0gMCwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncnlvWChmaWxlVG9Xcml0ZSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICB0cmF2ZXJzYWwuaXRlcmF0ZSgpOwotCi0gICAgICAgIGFzc2VydFRoYXQoZi5sZW5ndGgoKSA+IDAsIGlzKHRydWUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLkZFQVRVUkVfSU9fV1JJVEUpCi0gICAgcHVibGljIHZvaWQgZ19pb193cml0ZVhqc29uWCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBmaWxlVG9Xcml0ZSA9IFRlc3RIZWxwZXIuZ2VuZXJhdGVUZW1wRmlsZShXcml0ZVRlc3QuY2xhc3MsInRpbmtlcnBvcC1tb2Rlcm4tdjMiLCAiLmpzb24iKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLSAgICAgICAgZmluYWwgRmlsZSBmID0gbmV3IEZpbGUoZmlsZVRvV3JpdGUpOwotICAgICAgICBhc3NlcnRUaGF0KGYubGVuZ3RoKCkgPT0gMCwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19pb193cml0ZVhqc29uWChmaWxlVG9Xcml0ZSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICB0cmF2ZXJzYWwuaXRlcmF0ZSgpOwotCi0gICAgICAgIGFzc2VydFRoYXQoZi5sZW5ndGgoKSA+IDAsIGlzKHRydWUpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5HcmFwaEZlYXR1cmVzLkZFQVRVUkVfSU9fV1JJVEUpCi0gICAgcHVibGljIHZvaWQgZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncmFwaHNvblgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZVRvV3JpdGUgPSBUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGUoV3JpdGVUZXN0LmNsYXNzLCJ0aW5rZXJwb3AtbW9kZXJuLXYzIiwgIi5qc29uIikuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgICAgIGZpbmFsIEZpbGUgZiA9IG5ldyBGaWxlKGZpbGVUb1dyaXRlKTsKLSAgICAgICAgYXNzZXJ0VGhhdChmLmxlbmd0aCgpID09IDAsIGlzKHRydWUpKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhzb25YKGZpbGVUb1dyaXRlKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5pdGVyYXRlKCk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChmLmxlbmd0aCgpID4gMCwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuRkVBVFVSRV9JT19XUklURSkKLSAgICBwdWJsaWMgdm9pZCBnX2lvX3dyaXRlWHhtbFgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgZmlsZVRvV3JpdGUgPSBUZXN0SGVscGVyLmdlbmVyYXRlVGVtcEZpbGUoV3JpdGVUZXN0LmNsYXNzLCJ0aW5rZXJwb3AtbW9kZXJuIiwgIi54bWwiKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlKCdcXCcsICcvJyk7Ci0KLSAgICAgICAgZmluYWwgRmlsZSBmID0gbmV3IEZpbGUoZmlsZVRvV3JpdGUpOwotICAgICAgICBhc3NlcnRUaGF0KGYubGVuZ3RoKCkgPT0gMCwgaXModHJ1ZSkpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19pb193cml0ZVh4bWxYKGZpbGVUb1dyaXRlKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5pdGVyYXRlKCk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChmLmxlbmd0aCgpID4gMCwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuR3JhcGhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkdyYXBoRmVhdHVyZXMuRkVBVFVSRV9JT19XUklURSkKLSAgICBwdWJsaWMgdm9pZCBnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBobWxYKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlID0gVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlKFdyaXRlVGVzdC5jbGFzcywidGlua2VycG9wLW1vZGVybiIsICIueG1sIikuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgICAgIGZpbmFsIEZpbGUgZiA9IG5ldyBGaWxlKGZpbGVUb1dyaXRlKTsKLSAgICAgICAgYXNzZXJ0VGhhdChmLmxlbmd0aCgpID09IDAsIGlzKHRydWUpKTsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gdHJhdmVyc2FsID0gZ2V0X2dfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhtbFgoZmlsZVRvV3JpdGUpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0VGhhdChmLmxlbmd0aCgpID4gMCwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFdyaXRlVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPE9iamVjdCxPYmplY3Q+IGdldF9nX2lvX3dyaXRlWGtyeW9YKGZpbmFsIFN0cmluZyBmaWxlVG9Xcml0ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHJldHVybiBnLmlvKGZpbGVUb1dyaXRlKS53cml0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3J5b1goZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGcuaW8oZmlsZVRvV3JpdGUpLndpdGgoSU8ud3JpdGVyLCBJTy5ncnlvKS53cml0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fd3JpdGVYanNvblgoZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGcuaW8oZmlsZVRvV3JpdGUpLndyaXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiBnZXRfZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncmFwaHNvblgoZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGcuaW8oZmlsZVRvV3JpdGUpLndpdGgoSU8ud3JpdGVyLCBJTy5ncmFwaHNvbikud3JpdGUoKTsKLSAgICAgICAgfQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxPYmplY3QsT2JqZWN0PiBnZXRfZ19pb193cml0ZVh4bWxYKGZpbmFsIFN0cmluZyBmaWxlVG9Xcml0ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHJldHVybiBnLmlvKGZpbGVUb1dyaXRlKS53cml0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8T2JqZWN0LE9iamVjdD4gZ2V0X2dfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhtbFgoZmluYWwgU3RyaW5nIGZpbGVUb1dyaXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgcmV0dXJuIGcuaW8oZmlsZVRvV3JpdGUpLndpdGgoSU8ud3JpdGVyLCBJTy5ncmFwaG1sKS53cml0ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvQWdncmVnYXRlVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvQWdncmVnYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjA5YWNmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0FnZ3JlZ2F0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLk1hcEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5pbkU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm91dEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMubm90OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29sbGVjdGlvbi5Jc0l0ZXJhYmxlQ29udGFpbmluZ0luQW55T3JkZXIuY29udGFpbnNJbkFueU9yZGVyOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc3VtZS5hc3N1bWVUaGF0OwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBZ2dyZWdhdGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8SW50ZWdlcj4+IGdldF9nX1ZfYWdncmVnYXRlWHhYX2J5WHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhYX2NhcFh4WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8VmVydGV4Pj4gZ2V0X2dfVl9hZ2dyZWdhdGVYeFhfYnlYb3V0X29yZGVyX2J5WG5hbWVYWF9jYXBYeFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IGdldF9nX1ZfbmFtZV9hZ2dyZWdhdGVYeFhfY2FwWHhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxTdHJpbmc+PiBnZXRfZ19WX2FnZ3JlZ2F0ZVh4WF9ieVhuYW1lWF9jYXBYeFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBQYXRoPiBnZXRfZ19WX291dF9hZ2dyZWdhdGVYYVhfcGF0aCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIENvbGxlY3Rpb248SW50ZWdlcj4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9hZ2dyZWdhdGVYeFhfYnlYYWdlWF9jYXBYeFhfYXNYeVhfc2VsZWN0WHlYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVYbmFtZVhfYWdncmVnYXRlWHhYX2NhcFh4WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTGlzdDxTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX25hbWVfYWdncmVnYXRlWHhYX2NhcFh4WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGNoZWNrTGlzdE9mTmFtZXMobmFtZXMpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2dyZWdhdGVYeFhfYnlYbmFtZVhfY2FwWHhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFN0cmluZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdncmVnYXRlWHhYX2J5WG5hbWVYX2NhcFh4WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxTdHJpbmc+IG5hbWVzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGNoZWNrTGlzdE9mTmFtZXMobmFtZXMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaGVja0xpc3RPZk5hbWVzKENvbGxlY3Rpb248U3RyaW5nPiBuYW1lcykgewotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbmFtZXMuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShuYW1lcy5jb250YWlucygibWFya28iKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoImpvc2giKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoInBldGVyIikpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJsb3AiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobmFtZXMuY29udGFpbnMoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRUcnVlKG5hbWVzLmNvbnRhaW5zKCJyaXBwbGUiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9hZ2dyZWdhdGVYYVhfcGF0aCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgUGF0aD4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRfYWdncmVnYXRlWGFYX3BhdGgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IGZpcnN0U3RlcENvdW50cyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gc2Vjb25kU3RlcENvdW50cyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgd2hpbGUgKHRyYXZlcnNhbC5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGZpcnN0ID0gcGF0aC5nZXQoMCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZWNvbmQgPSBwYXRoLmdldCgxKS50b1N0cmluZygpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChmaXJzdCwgbm90KHNlY29uZCkpOwotICAgICAgICAgICAgTWFwSGVscGVyLmluY3IoZmlyc3RTdGVwQ291bnRzLCBmaXJzdCwgMWwpOwotICAgICAgICAgICAgTWFwSGVscGVyLmluY3Ioc2Vjb25kU3RlcENvdW50cywgc2Vjb25kLCAxbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGNvdW50KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGZpcnN0U3RlcENvdW50cy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgc2Vjb25kU3RlcENvdW50cy5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKGZpcnN0U3RlcENvdW50cy52YWx1ZXMoKS5jb250YWlucygzbCkpOwotICAgICAgICBhc3NlcnRUcnVlKGZpcnN0U3RlcENvdW50cy52YWx1ZXMoKS5jb250YWlucygybCkpOwotICAgICAgICBhc3NlcnRUcnVlKGZpcnN0U3RlcENvdW50cy52YWx1ZXMoKS5jb250YWlucygxbCkpOwotICAgICAgICBhc3NlcnRUcnVlKHNlY29uZFN0ZXBDb3VudHMudmFsdWVzKCkuY29udGFpbnMoM2wpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzZWNvbmRTdGVwQ291bnRzLnZhbHVlcygpLmNvbnRhaW5zKDFsKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc0xhYmVsWHBlcnNvblhfYWdncmVnYXRlWHhYX2J5WGFnZVhfY2FwWHhYX2FzWHlYX3NlbGVjdFh5WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgQ29sbGVjdGlvbjxJbnRlZ2VyPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2FnZ3JlZ2F0ZVh4WF9ieVhhZ2VYX2NhcFh4WF9hc1h5WF9zZWxlY3RYeVgoKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxJbnRlZ2VyPiBhZ2VzID0gdHJhdmVyc2FsLm5leHQoKTsKLQotICAgICAgICAvLyBpbiAzLjMueCBhIEJ1bGtTZXQgd2lsbCBjb2VyY2UgdG8gTGlzdCB1bmRlciBHcmFwaFNPTgotICAgICAgICBhc3N1bWVUaGF0KGFnZXMgaW5zdGFuY2VvZiBCdWxrU2V0LCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBhZ2VzLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoYWdlcy5jb250YWlucygyOSkpOwotICAgICAgICBhc3NlcnRUcnVlKGFnZXMuY29udGFpbnMoMjcpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShhZ2VzLmNvbnRhaW5zKDMyKSk7Ci0gICAgICAgIGFzc2VydFRydWUoYWdlcy5jb250YWlucygzNSkpOwotICAgICAgICBmaW5hbCBCdWxrU2V0PEludGVnZXI+IGJ1bGtTZXQgPSBuZXcgQnVsa1NldDw+KCk7Ci0gICAgICAgIGJ1bGtTZXQuYWRkKDI5KTsKLSAgICAgICAgYnVsa1NldC5hZGQoMjcpOwotICAgICAgICBidWxrU2V0LmFkZCgzMik7Ci0gICAgICAgIGJ1bGtTZXQuYWRkKDM1KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGJ1bGtTZXQsIGFnZXMpOyAvLyBlbnN1cmUgYnVsayBzZXQgZXF1YWxpdHkKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2FnZ3JlZ2F0ZVh4WF9ieVh2YWx1ZXNYYWdlWF9pc1hndFgyOVhYWF9jYXBYeFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8SW50ZWdlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfYWdncmVnYXRlWHhYX2J5WHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhYX2NhcFh4WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxJbnRlZ2VyPiBhZ2VzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoYWdlcywgY29udGFpbnNJbkFueU9yZGVyKDMyLCAzNSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9hZ2dyZWdhdGVYeFhfYnlYb3V0X29yZGVyX2J5WG5hbWVYWF9jYXBYeFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8VmVydGV4Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9hZ2dyZWdhdGVYeFhfYnlYb3V0X29yZGVyX2J5WG5hbWVYWF9jYXBYeFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIENvbGxlY3Rpb248VmVydGV4PiBhZ2VzID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoYWdlcywgY29udGFpbnNJbkFueU9yZGVyKGNvbnZlcnRUb1ZlcnRleCgibG9wIiksIGNvbnZlcnRUb1ZlcnRleCgiam9zaCIpLCBjb252ZXJ0VG9WZXJ0ZXgoImxvcCIpKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUcmF2ZXJzYWxzIGV4dGVuZHMgQWdncmVnYXRlVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBMaXN0PFZlcnRleD4+IGdldF9nX1ZfYWdncmVnYXRlWHhYX2J5WG91dF9vcmRlcl9ieVhuYW1lWFhfY2FwWHhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoIm5hbWUiKSkuY2FwKCJ4Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8SW50ZWdlcj4+IGdldF9nX1ZfYWdncmVnYXRlWHhYX2J5WHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhYX2NhcFh4WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5hZ2dyZWdhdGUoIngiKS5ieShfXy52YWx1ZXMoImFnZSIpLmlzKFAuZ3QoMjkpKSkuY2FwKCJ4Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8U3RyaW5nPj4gZ2V0X2dfVl9uYW1lX2FnZ3JlZ2F0ZVh4WF9jYXBYeFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuYWdncmVnYXRlKCJ4IikuY2FwKCJ4Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIExpc3Q8U3RyaW5nPj4gZ2V0X2dfVl9hZ2dyZWdhdGVYeFhfYnlYbmFtZVhfY2FwWHhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJuYW1lIikuY2FwKCJ4Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFBhdGg+IGdldF9nX1Zfb3V0X2FnZ3JlZ2F0ZVhhWF9wYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLmFnZ3JlZ2F0ZSgiYSIpLnBhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgQ29sbGVjdGlvbjxJbnRlZ2VyPj4gZ2V0X2dfVl9oYXNMYWJlbFhwZXJzb25YX2FnZ3JlZ2F0ZVh4WF9ieVhhZ2VYX2NhcFh4WF9hc1h5WF9zZWxlY3RYeVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFnZ3JlZ2F0ZSgieCIpLmJ5KCJhZ2UiKS5jYXAoIngiKS5hcygieSIpLnNlbGVjdCgieSIpOwotICAgICAgICB9Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9Hcm91cENvdW50VGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvR3JvdXBDb3VudFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUwYjRjYS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9Hcm91cENvdW50VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5ndDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmluOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnJlcGVhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgR3JvdXBDb3VudFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9jYXBYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfbmFtZV9ncm91cENvdW50KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFZlcnRleCwgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYeFhfY2FwWHhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudFhhWF9jYXBYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMb25nPj4gZ2V0X2dfVl9oYXNYbm9YX2dyb3VwQ291bnQoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMb25nPj4gZ2V0X2dfVl9oYXNYbm9YX2dyb3VwQ291bnRYYVhfY2FwWGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfcmVwZWF0WG91dF9ncm91cENvdW50WGFYX2J5WG5hbWVYWF90aW1lc1gyWF9jYXBYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl91bmlvblhyZXBlYXRYb3V0WF90aW1lc1gyWF9ncm91cENvdW50WG1YX2J5WGxhbmdYWF9fcmVwZWF0WGluWF90aW1lc1gyWF9ncm91cENvdW50WG1YX2J5WG5hbWVYWF9jYXBYbVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8TG9uZywgTG9uZz4+IGdldF9nX1ZfZ3JvdXBDb3VudF9ieVhib3RoRV9jb3VudFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiBnZXRfZ19WX3VuaW9uWG91dFhrbm93c1hfX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfc3VtKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFZlcnRleCwgTG9uZz4+IGdldF9nX1ZfYm90aF9sb2NhbFhncm91cENvdW50WGFYWF9vdXRfY2FwWGFYX3NlbGVjdFhrZXlzWF91bmZvbGRfYm90aF9sb2NhbFhncm91cENvdW50WGFYWF9jYXBYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX1ZfYm90aF9ncm91cENvdW50WGFYX2J5WGxhYmVsWF9hc1hiWF9iYXJyaWVyX3doZXJlWHNlbGVjdFhhWF9zZWxlY3RYc29mdHdhcmVYX2lzWGd0WDJYWFhfc2VsZWN0WGJYX25hbWUoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMb25nPj4gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2JvdGhYa25vd3NYX2dyb3VwQ291bnRfYnlYdmFsdWVzWG5hbWVYX2ZvbGRYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRfYnlYbmFtZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dFhjcmVhdGVkWF9ncm91cENvdW50X2J5WG5hbWVYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRDb21tb25BKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYYVhfYnlYbmFtZVhfY2FwWGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkEodHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb21tb25BKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1hcC5zaXplKCksIDIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDNsKSwgbWFwLmdldCgibG9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDFsKSwgbWFwLmdldCgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYeFhfY2FwWHhYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8VmVydGV4LCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFh4WF9jYXBYeFgoKTsKLSAgICAgICAgZmluYWwgT2JqZWN0IGxvcElkID0gY29udmVydFRvVmVydGV4SWQoImxvcCIpOwotICAgICAgICBmaW5hbCBPYmplY3QgcmlwcGxlSWQgPSBjb252ZXJ0VG9WZXJ0ZXhJZCgicmlwcGxlIik7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8VmVydGV4LCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMobWFwLnNpemUoKSwgMik7Ci0gICAgICAgIGJvb2xlYW4gaGFzTG9wID0gZmFsc2UsIGhhc1JpcHBsZSA9IGZhbHNlLCBoYXNTb21ldGhpbmdFbHNlID0gZmFsc2U7Ci0gICAgICAgIGZvciAoZmluYWwgTWFwLkVudHJ5PFZlcnRleCwgTG9uZz4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgZmluYWwgT2JqZWN0IGlkID0gZW50cnkuZ2V0S2V5KCkuaWQoKTsKLSAgICAgICAgICAgIGlmIChsb3BJZC5lcXVhbHMoaWQpKSB7Ci0gICAgICAgICAgICAgICAgaGFzTG9wID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDNsKSwgZW50cnkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJpcHBsZUlkLmVxdWFscyhpZCkpIHsKLSAgICAgICAgICAgICAgICBoYXNSaXBwbGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YoMWwpLCBlbnRyeS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGFzU29tZXRoaW5nRWxzZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShoYXNMb3ApOwotICAgICAgICBhc3NlcnRUcnVlKGhhc1JpcHBsZSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKGhhc1NvbWV0aGluZ0Vsc2UpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJ4IiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dFhjcmVhdGVkWF9uYW1lX2dyb3VwQ291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dFhjcmVhdGVkWF9uYW1lX2dyb3VwQ291bnQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkIodHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRYY3JlYXRlZFhfbmFtZV9ncm91cENvdW50WGFYX2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudFhhWF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkIodHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb21tb25CKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1hcC5zaXplKCksIDIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoM2wsIG1hcC5nZXQoImxvcCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBtYXAuZ2V0KCJyaXBwbGUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYbm9YX2dyb3VwQ291bnQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hub1hfZ3JvdXBDb3VudCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uQyh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hub1hfZ3JvdXBDb3VudFhhWF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hub1hfZ3JvdXBDb3VudFhhWF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkModHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb21tb25DKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxPYmplY3QsIExvbmc+PiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTG9uZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfcmVwZWF0WG91dF9ncm91cENvdW50WGFYX2J5WG5hbWVYWF90aW1lc1gyWF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3JlcGVhdFhvdXRfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWFhfdGltZXNYMlhfY2FwWGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNGwsIG1hcC5nZXQoImxvcCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJsLCBtYXAuZ2V0KCJyaXBwbGUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxbCwgbWFwLmdldCgiam9zaCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBtYXAuZ2V0KCJ2YWRhcyIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3VuaW9uWHJlcGVhdFhvdXRYX3RpbWVzWDJYX2dyb3VwQ291bnRYbVhfYnlYbGFuZ1hYX19yZXBlYXRYaW5YX3RpbWVzWDJYX2dyb3VwQ291bnRYbVhfYnlYbmFtZVhYX2NhcFhtWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdW5pb25YcmVwZWF0WG91dFhfdGltZXNYMlhfZ3JvdXBDb3VudFhtWF9ieVhsYW5nWFhfX3JlcGVhdFhpblhfdGltZXNYMlhfZ3JvdXBDb3VudFhtWF9ieVhuYW1lWFhfY2FwWG1YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLmdldCgibWFya28iKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuZ2V0KCJqYXZhIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSwgIm0iLCBIYXNoTWFwLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZ3JvdXBDb3VudF9ieVhib3RoRV9jb3VudFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxMb25nLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cENvdW50X2J5WGJvdGhFX2NvdW50WCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tNYXAobmV3IEhhc2hNYXA8TG9uZywgTG9uZz4oKSB7ewotICAgICAgICAgICAgcHV0KDFsLCAzbCk7Ci0gICAgICAgICAgICBwdXQoM2wsIDNsKTsKLSAgICAgICAgfX0sIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3VuaW9uWG91dFhrbm93c1hfX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfc3VtKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBMb25nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3VuaW9uWG91dFhrbm93c1hfX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfc3VtKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTJsLCB0cmF2ZXJzYWwubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfYm90aF9sb2NhbFhncm91cENvdW50WGFYWF9vdXRfY2FwWGFYX3NlbGVjdFhrZXlzWF91bmZvbGRfYm90aF9sb2NhbFhncm91cENvdW50WGFYWF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxWZXJ0ZXgsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfb3V0X2NhcFhhWF9zZWxlY3RYa2V5c1hfdW5mb2xkX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfY2FwWGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICAvLyAgW3t2WzFdPTYsIHZbMl09MiwgdlszXT02LCB2WzRdPTYsIHZbNV09Miwgdls2XT0yfV0KLSAgICAgICAgZmluYWwgTWFwPFZlcnRleCwgTG9uZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2LCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZsLCBtYXAuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJsLCBtYXAuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInZhZGFzIikpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZsLCBtYXAuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImxvcCIpKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2bCwgbWFwLmdldChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIikpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDJsLCBtYXAuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInJpcHBsZSIpKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2bCwgbWFwLmdldChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpLCAiYSIsIEhhc2hNYXAuY2xhc3MpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ib3RoX2dyb3VwQ291bnRYYVhfYnlYbGFiZWxYX2FzWGJYX2JhcnJpZXJfd2hlcmVYc2VsZWN0WGFYX3NlbGVjdFhzb2Z0d2FyZVhfaXNYZ3RYMlhYWF9zZWxlY3RYYlhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2JvdGhfZ3JvdXBDb3VudFhhWF9ieVhsYWJlbFhfYXNYYlhfYmFycmllcl93aGVyZVhzZWxlY3RYYVhfc2VsZWN0WHNvZnR3YXJlWF9pc1hndFgyWFhYX3NlbGVjdFhiWF9uYW1lKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibG9wIiwgImxvcCIsICJsb3AiLCAicGV0ZXIiLCAibWFya28iLCAibWFya28iLCAibWFya28iLCAicmlwcGxlIiwgInZhZGFzIiwgImpvc2giLCAiam9zaCIsICJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpLCAiYSIsIEhhc2hNYXAuY2xhc3MpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2JvdGhYa25vd3NYX2dyb3VwQ291bnRfYnlYdmFsdWVzWG5hbWVYX2ZvbGRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfYm90aFhrbm93c1hfZ3JvdXBDb3VudF9ieVh2YWx1ZXNYbmFtZVhfZm9sZFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsTG9uZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBtYXAuZ2V0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoImpvc2giKSkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIG1hcC5nZXQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgidmFkYXMiKSkubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIEdyb3VwQ291bnRUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX291dFhjcmVhdGVkWF9ncm91cENvdW50X2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLjxTdHJpbmc+Z3JvdXBDb3VudCgpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX291dFhjcmVhdGVkWF9ncm91cENvdW50WGFYX2J5WG5hbWVYX2NhcFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5vdXQoImNyZWF0ZWQiKS48U3RyaW5nPmdyb3VwQ291bnQoImEiKS5ieSgibmFtZSIpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9vdXRYY3JlYXRlZFhfbmFtZV9ncm91cENvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLnZhbHVlcygibmFtZSIpLmdyb3VwQ291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFZlcnRleCwgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYeFhfY2FwWHhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgiY3JlYXRlZCIpLmdyb3VwQ291bnQoIngiKS5jYXAoIngiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudFhhWF9jYXBYYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCJjcmVhdGVkIikudmFsdWVzKCJuYW1lIikuZ3JvdXBDb3VudCgiYSIpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMb25nPj4gZ2V0X2dfVl9oYXNYbm9YX2dyb3VwQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJubyIpLmdyb3VwQ291bnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPE9iamVjdCwgTG9uZz4+IGdldF9nX1ZfaGFzWG5vWF9ncm91cENvdW50WGFYX2NhcFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXMoIm5vIikuZ3JvdXBDb3VudCgiYSIpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9yZXBlYXRYb3V0X2dyb3VwQ291bnRYYVhfYnlYbmFtZVhYX3RpbWVzWDJYX2NhcFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQob3V0KCkuZ3JvdXBDb3VudCgiYSIpLmJ5KCJuYW1lIikpLnRpbWVzKDIpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl91bmlvblhyZXBlYXRYb3V0WF90aW1lc1gyWF9ncm91cENvdW50WG1YX2J5WGxhbmdYWF9fcmVwZWF0WGluWF90aW1lc1gyWF9ncm91cENvdW50WG1YX2J5WG5hbWVYWF9jYXBYbVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudW5pb24oCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdChvdXQoKSkudGltZXMoMikuZ3JvdXBDb3VudCgibSIpLmJ5KCJsYW5nIiksCi0gICAgICAgICAgICAgICAgICAgIHJlcGVhdChpbigpKS50aW1lcygyKS5ncm91cENvdW50KCJtIikuYnkoIm5hbWUiKSkuY2FwKCJtIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxMb25nLCBMb25nPj4gZ2V0X2dfVl9ncm91cENvdW50X2J5WGJvdGhFX2NvdW50WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48TG9uZz5ncm91cENvdW50KCkuYnkoYm90aEUoKS5jb3VudCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTG9uZz4gZ2V0X2dfVl91bmlvblhvdXRYa25vd3NYX19vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhYX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX3N1bSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS51bmlvbihvdXQoImtub3dzIiksIG91dCgiY3JlYXRlZCIpLmluKCJjcmVhdGVkIikpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuc3VtKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxWZXJ0ZXgsIExvbmc+PiBnZXRfZ19WX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfb3V0X2NhcFhhWF9zZWxlY3RYa2V5c1hfdW5mb2xkX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfY2FwWGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KCJhIikpLm91dCgpLmNhcCgiYSIpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkuYm90aCgpLmxvY2FsKF9fLmdyb3VwQ291bnQoImEiKSkuY2FwKCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl9ib3RoX2dyb3VwQ291bnRYYVhfYnlYbGFiZWxYX2FzWGJYX2JhcnJpZXJfd2hlcmVYc2VsZWN0WGFYX3NlbGVjdFhzb2Z0d2FyZVhfaXNYZ3RYMlhYWF9zZWxlY3RYYlhfbmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ib3RoKCkuZ3JvdXBDb3VudCgiYSIpLmJ5KFQubGFiZWwpLmFzKCJiIikuYmFycmllcigpLndoZXJlKF9fLnNlbGVjdCgiYSIpLnNlbGVjdCgic29mdHdhcmUiKS5pcyhndCgyKSkpLnNlbGVjdCgiYiIpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8T2JqZWN0LCBMb25nPj4gZ2V0X2dfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2JvdGhYa25vd3NYX2dyb3VwQ291bnRfYnlYdmFsdWVzWG5hbWVYX2ZvbGRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygicGVyc29uIiwgIm5hbWUiLCAibWFya28iKS5ib3RoKCJrbm93cyIpLmdyb3VwQ291bnQoKS5ieShfXy52YWx1ZXMoIm5hbWUiKS5mb2xkKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0dyb3VwVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvR3JvdXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNTY0YjEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvR3JvdXBUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MzAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5HUkFURUZVTDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5jb3VudDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy52YWx1ZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKEdyZW1saW5Qcm9jZXNzUnVubmVyLmNsYXNzKQotcHVibGljIGFic3RyYWN0IGNsYXNzIEdyb3VwVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBDb2xsZWN0aW9uPFZlcnRleD4+PiBnZXRfZ19WX2dyb3VwX2J5WG5hbWVYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPEludGVnZXIsIENvbGxlY3Rpb248VmVydGV4Pj4+IGdldF9nX1ZfZ3JvdXBfYnlYYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248VmVydGV4Pj4+IGdldF9nX1ZfZ3JvdXBfYnlYbmFtZVhfYnkoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBDb2xsZWN0aW9uPFZlcnRleD4+PiBnZXRfZ19WX2dyb3VwWGFYX2J5WG5hbWVYX2NhcFhhWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248U3RyaW5nPj4+IGdldF9nX1ZfaGFzWGxhbmdYX2dyb3VwWGFYX2J5WGxhbmdYX2J5WG5hbWVYX291dF9jYXBYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9oYXNYbGFuZ1hfZ3JvdXBfYnlYbGFuZ1hfYnlYY291bnRYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfcmVwZWF0WG91dF9ncm91cFhhWF9ieVhuYW1lWF9ieVhjb3VudFhfdGltZXNYMlhfY2FwWGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPExvbmcsIENvbGxlY3Rpb248U3RyaW5nPj4+IGdldF9nX1ZfZ3JvdXBfYnlYb3V0RV9jb3VudFhfYnlYbmFtZVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2dyb3VwWGFYX2J5WGxhYmVsWF9ieVhvdXRFX3dlaWdodF9zdW1YX2NhcFhhWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX3JlcGVhdFhib3RoWGZvbGxvd2VkQnlYWF90aW1lc1gyWF9ncm91cF9ieVhzb25nVHlwZVhfYnlYY291bnRYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwWGFYX2J5WHNvbmdUeXBlWF9ieVhjb3VudFhfY2FwWGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX291dF9ncm91cF9ieVhsYWJlbFhfc2VsZWN0WHBlcnNvblhfdW5mb2xkX291dFhjcmVhdGVkWF9uYW1lX2xpbWl0WDJYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTG9uZz4+PiBnZXRfZ19WX2hhc0xhYmVsWHNvbmdYX2dyb3VwX2J5WG5hbWVYX2J5WHByb3BlcnRpZXNfZ3JvdXBDb3VudF9ieVhsYWJlbFhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTG9uZz4+PiBnZXRfZ19WX2hhc0xhYmVsWHNvbmdYX2dyb3VwWGFYX2J5WG5hbWVYX2J5WHByb3BlcnRpZXNfZ3JvdXBDb3VudF9ieVhsYWJlbFhYX291dF9jYXBYYVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8T2JqZWN0LCBPYmplY3Q+Pj4gZ2V0X2dfVl9yZXBlYXRYdW5pb25Yb3V0WGtub3dzWF9ncm91cFhhWF9ieVhhZ2VYX19vdXRYY3JlYXRlZFhfZ3JvdXBYYlhfYnlYbmFtZVhfYnlYY291bnRYWF9ncm91cFhhWF9ieVhuYW1lWFhfdGltZXNYMlhfY2FwWGFfYlgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8TG9uZywgTWFwPFN0cmluZywgTGlzdDxWZXJ0ZXg+Pj4+IGdldF9nX1ZfZ3JvdXBfYnlYYm90aEVfY291bnRYX2J5WGdyb3VwX2J5WGxhYmVsWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBOdW1iZXI+Pj4gZ2V0X2dfVl9vdXRYZm9sbG93ZWRCeVhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGJvdGhFX2dyb3VwX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiBnZXRfZ19WX2dyb3VwWG1YX2J5WG5hbWVYX2J5WGluWGtub3dzWF9uYW1lWF9jYXBYbVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV9ncm91cFhhWF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhfd2VpZ2h0X3N1bVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMaXN0PE9iamVjdD4+PiBnZXRfZ193aXRoU2lkZUVmZmVjdFhhX19tYXJrb182NjZfbm9vbmVfYmxhaFhfVl9ncm91cFhhWF9ieVhuYW1lWF9ieVhvdXRFX2xhYmVsX2ZvbGRYX2NhcFhhWChmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PE9iamVjdD4+IG0pOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9vdXRYY3JlYXRlZFhfZ3JvdXBfYnlYbmFtZVhfYnlYc2VsZWN0WHBYX3ZhbHVlc1hhZ2VYX3N1bVgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gZ2V0X2dfVl9ncm91cF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfZ3JvdXBYbVhfYnlYbGFiZWxYX2J5WGxhYmVsX2NvdW50WF9jYXBYbVgoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ncm91cF9ieVhuYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgQ29sbGVjdGlvbjxWZXJ0ZXg+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cF9ieVhuYW1lWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uQSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwX2J5WGFnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxJbnRlZ2VyLCBDb2xsZWN0aW9uPFZlcnRleD4+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2dyb3VwX2J5WGFnZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPEludGVnZXIsIENvbGxlY3Rpb248VmVydGV4Pj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcC5zaXplKCkpOwotICAgICAgICBtYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZXMpIC0+IHsKLSAgICAgICAgICAgIGlmIChudWxsID09IGtleSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHZhbHVlcy5zaXplKCkpOwotICAgICAgICB9KTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0KLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ncm91cF9ieVhuYW1lWF9ieSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgQ29sbGVjdGlvbjxWZXJ0ZXg+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cF9ieVhuYW1lWF9ieSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uQSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwWGFYX2J5WG5hbWVYX2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgQ29sbGVjdGlvbjxWZXJ0ZXg+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cFhhWF9ieVhuYW1lWF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkEodHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydENvbW1vbkEoZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgQ29sbGVjdGlvbjxWZXJ0ZXg+Pj4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248VmVydGV4Pj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIG1hcC5zaXplKCkpOwotICAgICAgICBtYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZXMpIC0+IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCB2YWx1ZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXhJZChrZXkpLCB2YWx1ZXMuaXRlcmF0b3IoKS5uZXh0KCkuaWQoKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGxhbmdYX2dyb3VwWGFYX2J5WGxhbmdYX2J5WG5hbWVYX291dF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248U3RyaW5nPj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzWGxhbmdYX2dyb3VwWGFYX2J5WGxhbmdYX2J5WG5hbWVYX291dF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248U3RyaW5nPj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoImphdmEiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuZ2V0KCJqYXZhIikuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJqYXZhIikuY29udGFpbnMoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KCJqYXZhIikuY29udGFpbnMoImxvcCIpKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2hhc1hsYW5nWF9ncm91cF9ieVhsYW5nWF9ieVhjb3VudFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc1hsYW5nWF9ncm91cF9ieVhsYW5nWF9ieVhjb3VudFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoImphdmEiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YoMiksIG1hcC5nZXQoImphdmEiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhvdXRfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYY291bnRYX3RpbWVzWDJYX2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WG91dF9ncm91cFhhWF9ieVhuYW1lWF9ieVhjb3VudFhfdGltZXNYMlhfY2FwWGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YoMSksIG1hcC5nZXQoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxKSwgbWFwLmdldCgiam9zaCIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoImxvcCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZig0KSwgbWFwLmdldCgibG9wIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDIpLCBtYXAuZ2V0KCJyaXBwbGUiKSk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpLCAiYSIsIEhhc2hNYXAuY2xhc3MpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ncm91cF9ieVhvdXRFX2NvdW50WF9ieVhuYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPExvbmcsIENvbGxlY3Rpb248U3RyaW5nPj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZ3JvdXBfYnlYb3V0RV9jb3VudFhfYnlYbmFtZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxMb25nLCBDb2xsZWN0aW9uPFN0cmluZz4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNCwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KDBsKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KDFsKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KDJsKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KDNsKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBtYXAuZ2V0KDBsKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwLmdldCgxbCkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1hcC5nZXQoMmwpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtYXAuZ2V0KDNsKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoMGwpLmNvbnRhaW5zKCJsb3AiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmdldCgwbCkuY29udGFpbnMoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuZ2V0KDBsKS5jb250YWlucygidmFkYXMiKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmdldCgxbCkuY29udGFpbnMoInBldGVyIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoMmwpLmNvbnRhaW5zKCJqb3NoIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5nZXQoM2wpLmNvbnRhaW5zKCJtYXJrbyIpKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ncm91cFhhWF9ieVhsYWJlbFhfYnlYb3V0RV93ZWlnaHRfc3VtWF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfZ3JvdXBYYVhfYnlYbGFiZWxYX2J5WG91dEVfd2VpZ2h0X3N1bVhfY2FwWGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBOdW1iZXI+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLjVkLCAoZG91YmxlKSBtYXAuZ2V0KCJwZXJzb24iKSwgMC4wMWQpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSwgImEiLCBIYXNoTWFwLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYYm90aFhmb2xsb3dlZEJ5WFhfdGltZXNYMlhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGNvdW50WCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwX2J5WHNvbmdUeXBlWF9ieVhjb3VudFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrTWFwKG5ldyBIYXNoTWFwPFN0cmluZywgTG9uZz4oKSB7ewotICAgICAgICAgICAgcHV0KCJvcmlnaW5hbCIsIDc3MTMxN2wpOwotICAgICAgICAgICAgcHV0KCIiLCAxNjA5NjhsKTsKLSAgICAgICAgICAgIHB1dCgiY292ZXIiLCAzNjg1NzlsKTsKLSAgICAgICAgfX0sIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoR1JBVEVGVUwpCi0gICAgcHVibGljIHZvaWQgZ19WX3JlcGVhdFhib3RoWGZvbGxvd2VkQnlYWF90aW1lc1gyWF9ncm91cFhhWF9ieVhzb25nVHlwZVhfYnlYY291bnRYX2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwWGFYX2J5WHNvbmdUeXBlWF9ieVhjb3VudFhfY2FwWGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja01hcChuZXcgSGFzaE1hcDxTdHJpbmcsIExvbmc+KCkge3sKLSAgICAgICAgICAgIHB1dCgib3JpZ2luYWwiLCA3NzEzMTdsKTsKLSAgICAgICAgICAgIHB1dCgiIiwgMTYwOTY4bCk7Ci0gICAgICAgICAgICBwdXQoImNvdmVyIiwgMzY4NTc5bCk7Ci0gICAgICAgIH19LCB0cmF2ZXJzYWwubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpLCAiYSIsIEhhc2hNYXAuY2xhc3MpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfZ3JvdXBfYnlYbGFiZWxYX3NlbGVjdFhwZXJzb25YX3VuZm9sZF9vdXRYY3JlYXRlZFhfbmFtZV9saW1pdFgyWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9ncm91cF9ieVhsYWJlbFhfc2VsZWN0WHBlcnNvblhfdW5mb2xkX291dFhjcmVhdGVkWF9uYW1lX2xpbWl0WDJYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgicmlwcGxlIiwgImxvcCIpLCB0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChHUkFURUZVTCkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIExvbmc+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNMYWJlbFhzb25nWF9ncm91cF9ieVhuYW1lWF9ieVhwcm9wZXJ0aWVzX2dyb3VwQ291bnRfYnlYbGFiZWxYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTG9uZz4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1ODQsIG1hcC5zaXplKCkpOwotICAgICAgICBmb3IgKGZpbmFsIE1hcC5FbnRyeTxTdHJpbmcsIE1hcDxTdHJpbmcsIExvbmc+PiBlbnRyeSA6IG1hcC5lbnRyeVNldCgpKSB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoZW50cnkuZ2V0S2V5KCkudG9VcHBlckNhc2UoKSwgZW50cnkuZ2V0S2V5KCkpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gY291bnRNYXAgPSBlbnRyeS5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNvdW50TWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMWwsIGNvdW50TWFwLmdldCgibmFtZSIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxbCwgY291bnRNYXAuZ2V0KCJzb25nVHlwZSIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxbCwgY291bnRNYXAuZ2V0KCJwZXJmb3JtYW5jZXMiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChHUkFURUZVTCkKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFhfb3V0X2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTG9uZz4+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2hhc0xhYmVsWHNvbmdYX2dyb3VwWGFYX2J5WG5hbWVYX2J5WHByb3BlcnRpZXNfZ3JvdXBDb3VudF9ieVhsYWJlbFhYX291dF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIExvbmc+PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNTg0LCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChmaW5hbCBNYXAuRW50cnk8U3RyaW5nLCBNYXA8U3RyaW5nLCBMb25nPj4gZW50cnkgOiBtYXAuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGVudHJ5LmdldEtleSgpLnRvVXBwZXJDYXNlKCksIGVudHJ5LmdldEtleSgpKTsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IGNvdW50TWFwID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjb3VudE1hcC5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBjb3VudE1hcC5nZXQoIm5hbWUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMWwsIGNvdW50TWFwLmdldCgic29uZ1R5cGUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMWwsIGNvdW50TWFwLmdldCgicGVyZm9ybWFuY2VzIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9yZXBlYXRYdW5pb25Yb3V0WGtub3dzWF9ncm91cFhhWF9ieVhhZ2VYX19vdXRYY3JlYXRlZFhfZ3JvdXBYYlhfYnlYbmFtZVhfYnlYY291bnRYWF9ncm91cFhhWF9ieVhuYW1lWFhfdGltZXNYMlhfY2FwWGFfYlgoKSB7Ci0gICAgICAgIC8vW3thPXszMj1bdls0XV0sIHJpcHBsZT1bdls1XSwgdls1XV0sIHZhZGFzPVt2WzJdXSwgMjc9W3ZbMl1dLCBqb3NoPVt2WzRdXSwgbG9wPVt2WzNdLCB2WzNdLCB2WzNdLCB2WzNdXX0sIGI9e3JpcHBsZT0yLCBsb3A9NH19XQotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8T2JqZWN0LCBPYmplY3Q+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9yZXBlYXRYdW5pb25Yb3V0WGtub3dzWF9ncm91cFhhWF9ieVhhZ2VYX19vdXRYY3JlYXRlZFhfZ3JvdXBYYlhfYnlYbmFtZVhfYnlYY291bnRYWF9ncm91cFhhWF9ieVhuYW1lWFhfdGltZXNYMlhfY2FwWGFfYlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxPYmplY3QsIE9iamVjdD4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJhIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiYiIpKTsKLSAgICAgICAgLy8KLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgTGlzdDxWZXJ0ZXg+PiBtYXBBID0gKE1hcCkgbWFwLmdldCgiYSIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbWFwQS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwQS5nZXQoMzIpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIiksIG1hcEEuZ2V0KDMyKS5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwQS5nZXQoMjcpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpLCBtYXBBLmdldCgyNykuZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcEEuZ2V0KCJyaXBwbGUiKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAicmlwcGxlIiksIG1hcEEuZ2V0KCJyaXBwbGUiKS5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAicmlwcGxlIiksIG1hcEEuZ2V0KCJyaXBwbGUiKS5nZXQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwQS5nZXQoInZhZGFzIikuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInZhZGFzIiksIG1hcEEuZ2V0KCJ2YWRhcyIpLmdldCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBtYXBBLmdldCgiam9zaCIpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIiksIG1hcEEuZ2V0KCJqb3NoIikuZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIG1hcEEuZ2V0KCJsb3AiKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIiksIG1hcEEuZ2V0KCJsb3AiKS5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIiksIG1hcEEuZ2V0KCJsb3AiKS5nZXQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIiksIG1hcEEuZ2V0KCJsb3AiKS5nZXQoMikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoY29udmVydFRvVmVydGV4KGdyYXBoLCAibG9wIiksIG1hcEEuZ2V0KCJsb3AiKS5nZXQoMykpOwotICAgICAgICAvLwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXBCID0gKE1hcCkgbWFwLmdldCgiYiIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwQi5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMmwsIG1hcEIuZ2V0KCJyaXBwbGUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0bCwgbWFwQi5nZXQoImxvcCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgLy8KLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcywgImIiLCBIYXNoTWFwLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZ3JvdXBfYnlYYm90aEVfY291bnRYX2J5WGdyb3VwX2J5WGxhYmVsWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxMb25nLCBNYXA8U3RyaW5nLCBMaXN0PFZlcnRleD4+Pj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cF9ieVhib3RoRV9jb3VudFhfYnlYZ3JvdXBfYnlYbGFiZWxYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPExvbmcsIE1hcDxTdHJpbmcsIExpc3Q8VmVydGV4Pj4+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KDFsKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KDNsKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8VmVydGV4Pj4gc3VibWFwID0gbWFwLmdldCgxbCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzdWJtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzdWJtYXAuY29udGFpbnNLZXkoInNvZnR3YXJlIikpOwotICAgICAgICBhc3NlcnRUcnVlKHN1Ym1hcC5jb250YWluc0tleSgicGVyc29uIikpOwotICAgICAgICBMaXN0PFZlcnRleD4gbGlzdCA9IHN1Ym1hcC5nZXQoInNvZnR3YXJlIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBsaXN0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJyaXBwbGUiKSwgbGlzdC5nZXQoMCkpOwotICAgICAgICBsaXN0ID0gc3VibWFwLmdldCgicGVyc29uIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBsaXN0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobGlzdC5jb250YWlucyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJ2YWRhcyIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUobGlzdC5jb250YWlucyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJwZXRlciIpKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIHN1Ym1hcCA9IG1hcC5nZXQoM2wpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc3VibWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoc3VibWFwLmNvbnRhaW5zS2V5KCJzb2Z0d2FyZSIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShzdWJtYXAuY29udGFpbnNLZXkoInBlcnNvbiIpKTsKLSAgICAgICAgbGlzdCA9IHN1Ym1hcC5nZXQoInNvZnR3YXJlIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBsaXN0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJsb3AiKSwgbGlzdC5nZXQoMCkpOwotICAgICAgICBsaXN0ID0gc3VibWFwLmdldCgicGVyc29uIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBsaXN0LnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobGlzdC5jb250YWlucyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUobGlzdC5jb250YWlucyhjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJqb3NoIikpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRYZm9sbG93ZWRCeVhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGJvdGhFX2dyb3VwX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE51bWJlcj4+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dFhmb2xsb3dlZEJ5WF9ncm91cF9ieVhzb25nVHlwZVhfYnlYYm90aEVfZ3JvdXBfYnlYbGFiZWxYX2J5WHdlaWdodF9zdW1YWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTnVtYmVyPj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoIiIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoIm9yaWdpbmFsIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiY292ZXIiKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIE1hcDxTdHJpbmcsIE51bWJlcj4gc3ViTWFwID0gbWFwLmdldCgiIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzdWJNYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDE3OTM1MCwgc3ViTWFwLmdldCgiZm9sbG93ZWRCeSIpLmludFZhbHVlKCkpOwotICAgICAgICAvLwotICAgICAgICBzdWJNYXAgPSBtYXAuZ2V0KCJvcmlnaW5hbCIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc3ViTWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyMTg1NjEzLCBzdWJNYXAuZ2V0KCJmb2xsb3dlZEJ5IikuaW50VmFsdWUoKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIHN1Yk1hcCA9IG1hcC5nZXQoImNvdmVyIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzdWJNYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDc3Nzk4Miwgc3ViTWFwLmdldCgiZm9sbG93ZWRCeSIpLmludFZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ncm91cFhtWF9ieVhuYW1lWF9ieVhpblhrbm93c1hfbmFtZVhfY2FwWG1YKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBTdHJpbmc+PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX2dyb3VwWG1YX2J5WG5hbWVYX2J5WGluWGtub3dzWF9uYW1lWF9jYXBYbVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBtYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIG1hcC5nZXQoInZhZGFzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgbWFwLmdldCgiam9zaCIpKTsKLQotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSwgIm0iLCBIYXNoTWFwLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX2dyb3VwWGFYX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWF93ZWlnaHRfc3VtWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTnVtYmVyPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfZ3JvdXBYYVhfYnlYbGFiZWxYX2J5WHdlaWdodF9zdW1YX3dlaWdodF9zdW1YKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBOdW1iZXI+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLjBkLCBtYXAuZ2V0KCJzb2Z0d2FyZSIpLmRvdWJsZVZhbHVlKCksIDAuMDFkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUuMGQsIG1hcC5nZXQoInBlcnNvbiIpLmRvdWJsZVZhbHVlKCksIDAuMDFkKTsKLSAgICAgICAgY2hlY2tTaWRlRWZmZWN0cyh0cmF2ZXJzYWwuYXNBZG1pbigpLmdldFNpZGVFZmZlY3RzKCksICJhIiwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE51bWJlcj4gc2lkZUVmZmVjdCA9IHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKS5nZXQoImEiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNpZGVFZmZlY3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQuMGQsIHNpZGVFZmZlY3QuZ2V0KCJjcmVhdGVkIikuZG91YmxlVmFsdWUoKSwgMC4wMWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMy4wZCwgc2lkZUVmZmVjdC5nZXQoImtub3dzIikuZG91YmxlVmFsdWUoKSwgMC4wMWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNpZGVFZmZlY3RYYV9fbWFya29fNjY2X25vb25lX2JsYWhYX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYb3V0RV9sYWJlbF9mb2xkWF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8T2JqZWN0Pj4gbSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbS5wdXQoIm1hcmtvIiwgbmV3IEFycmF5TGlzdDw+KENvbGxlY3Rpb25zLnNpbmdsZXRvbig2NjYpKSk7Ci0gICAgICAgIG0ucHV0KCJub29uZSIsIG5ldyBBcnJheUxpc3Q8PihDb2xsZWN0aW9ucy5zaW5nbGV0b24oImJsYWgiKSkpOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExpc3Q8T2JqZWN0Pj4+IHRyYXZlcnNhbCA9IGdldF9nX3dpdGhTaWRlRWZmZWN0WGFfX21hcmtvXzY2Nl9ub29uZV9ibGFoWF9WX2dyb3VwWGFYX2J5WG5hbWVYX2J5WG91dEVfbGFiZWxfZm9sZFhfY2FwWGFYKG0pOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxPYmplY3Q+PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNywgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oImJsYWgiKSwgbmV3IEhhc2hTZXQ8PihtYXAuZ2V0KCJub29uZSIpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoImNyZWF0ZWQiLCAia25vd3MiLCA2NjYpKSwgbmV3IEhhc2hTZXQ8PihtYXAuZ2V0KCJtYXJrbyIpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oImNyZWF0ZWQiKSwgbmV3IEhhc2hTZXQ8PihtYXAuZ2V0KCJqb3NoIikpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbigiY3JlYXRlZCIpLCBuZXcgSGFzaFNldDw+KG1hcC5nZXQoInBldGVyIikpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLmVtcHR5U2V0KCksIG5ldyBIYXNoU2V0PD4obWFwLmdldCgidmFkYXMiKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlTZXQoKSwgbmV3IEhhc2hTZXQ8PihtYXAuZ2V0KCJsb3AiKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuZW1wdHlTZXQoKSwgbmV3IEhhc2hTZXQ8PihtYXAuZ2V0KCJyaXBwbGUiKSkpOwotICAgICAgICBjaGVja1NpZGVFZmZlY3RzKHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKSwgImEiLCBIYXNoTWFwLmNsYXNzKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9vdXRYY3JlYXRlZFhfZ3JvdXBfYnlYbmFtZVhfYnlYc2VsZWN0WHBYX3ZhbHVlc1hhZ2VYX3N1bVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE51bWJlcj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9vdXRYY3JlYXRlZFhfZ3JvdXBfYnlYbmFtZVhfYnlYc2VsZWN0WHBYX3ZhbHVlc1hhZ2VYX3N1bVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE51bWJlcj4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgicmlwcGxlIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgibG9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMzIsIG1hcC5nZXQoInJpcHBsZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDk2LCBtYXAuZ2V0KCJsb3AiKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9ncm91cF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBMb25nPiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJwZXJzb24iKSk7Ci0gICAgICAgIGFzc2VydFRydWUobWFwLmNvbnRhaW5zS2V5KCJzb2Z0d2FyZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDRMLCBtYXAuZ2V0KCJwZXJzb24iKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyTCwgbWFwLmdldCgic29mdHdhcmUiKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2dyb3VwWG1YX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFhfY2FwWG1YKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9ncm91cFhtWF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYX2NhcFhtWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTG9uZz4gbWFwID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgicGVyc29uIikpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgic29mdHdhcmUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0TCwgbWFwLmdldCgicGVyc29uIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMkwsIG1hcC5nZXQoInNvZnR3YXJlIikubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIEdyb3VwVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBDb2xsZWN0aW9uPFZlcnRleD4+PiBnZXRfZ19WX2dyb3VwX2J5WG5hbWVYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxTdHJpbmcsIENvbGxlY3Rpb248VmVydGV4Pj5ncm91cCgpLmJ5KCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxJbnRlZ2VyLCBDb2xsZWN0aW9uPFZlcnRleD4+PiBnZXRfZ19WX2dyb3VwX2J5WGFnZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPEludGVnZXIsIENvbGxlY3Rpb248VmVydGV4Pj5ncm91cCgpLmJ5KCJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgQ29sbGVjdGlvbjxWZXJ0ZXg+Pj4gZ2V0X2dfVl9ncm91cF9ieVhuYW1lWF9ieSgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48U3RyaW5nLCBDb2xsZWN0aW9uPFZlcnRleD4+Z3JvdXAoKS5ieSgibmFtZSIpLmJ5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248VmVydGV4Pj4+IGdldF9nX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfY2FwWGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLjxTdHJpbmcsIENvbGxlY3Rpb248VmVydGV4Pj5ncm91cCgiYSIpLmJ5KCJuYW1lIikuY2FwKCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIENvbGxlY3Rpb248U3RyaW5nPj4+IGdldF9nX1ZfaGFzWGxhbmdYX2dyb3VwWGFYX2J5WGxhbmdYX2J5WG5hbWVYX291dF9jYXBYYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJsYW5nIikuZ3JvdXAoImEiKS5ieSgibGFuZyIpLmJ5KCJuYW1lIikub3V0KCkuY2FwKCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX2hhc1hsYW5nWF9ncm91cF9ieVhsYW5nWF9ieVhjb3VudFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJsYW5nIikuPFN0cmluZywgTG9uZz5ncm91cCgpLmJ5KCJsYW5nIikuYnkoY291bnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX3JlcGVhdFhvdXRfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYY291bnRYX3RpbWVzWDJYX2NhcFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5yZXBlYXQob3V0KCkuZ3JvdXAoImEiKS5ieSgibmFtZSIpLmJ5KGNvdW50KCkpKS50aW1lcygyKS5jYXAoImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPExvbmcsIENvbGxlY3Rpb248U3RyaW5nPj4+IGdldF9nX1ZfZ3JvdXBfYnlYb3V0RV9jb3VudFhfYnlYbmFtZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPExvbmcsIENvbGxlY3Rpb248U3RyaW5nPj5ncm91cCgpLmJ5KG91dEUoKS5jb3VudCgpKS5ieSgibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2dyb3VwWGFYX2J5WGxhYmVsWF9ieVhvdXRFX3dlaWdodF9zdW1YX2NhcFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS48U3RyaW5nLCBEb3VibGU+Z3JvdXAoImEiKS5ieShULmxhYmVsKS5ieShvdXRFKCkudmFsdWVzKCJ3ZWlnaHQiKS5zdW0oKSkuY2FwKCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX3JlcGVhdFhib3RoWGZvbGxvd2VkQnlYWF90aW1lc1gyWF9ncm91cF9ieVhzb25nVHlwZVhfYnlYY291bnRYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChib3RoKCJmb2xsb3dlZEJ5IikpLnRpbWVzKDIpLjxTdHJpbmcsIExvbmc+Z3JvdXAoKS5ieSgic29uZ1R5cGUiKS5ieShjb3VudCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwWGFYX2J5WHNvbmdUeXBlWF9ieVhjb3VudFhfY2FwWGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChib3RoKCJmb2xsb3dlZEJ5IikpLnRpbWVzKDIpLjxTdHJpbmcsIExvbmc+Z3JvdXAoImEiKS5ieSgic29uZ1R5cGUiKS5ieShjb3VudCgpKS5jYXAoImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX291dF9ncm91cF9ieVhsYWJlbFhfc2VsZWN0WHBlcnNvblhfdW5mb2xkX291dFhjcmVhdGVkWF9uYW1lX2xpbWl0WDJYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLjxTdHJpbmcsIFZlcnRleD5ncm91cCgpLmJ5KFQubGFiZWwpLnNlbGVjdCgicGVyc29uIikudW5mb2xkKCkub3V0KCJjcmVhdGVkIikuPFN0cmluZz52YWx1ZXMoIm5hbWUiKS5saW1pdCgyKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTG9uZz4+PiBnZXRfZ19WX2hhc0xhYmVsWHNvbmdYX2dyb3VwX2J5WG5hbWVYX2J5WHByb3BlcnRpZXNfZ3JvdXBDb3VudF9ieVhsYWJlbFhYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJzb25nIikuPFN0cmluZywgTWFwPFN0cmluZywgTG9uZz4+Z3JvdXAoKS5ieSgibmFtZSIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBMb25nPj4+IGdldF9nX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFhfb3V0X2NhcFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5oYXNMYWJlbCgic29uZyIpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKS5vdXQoKS5jYXAoImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPE9iamVjdCwgT2JqZWN0Pj4+IGdldF9nX1ZfcmVwZWF0WHVuaW9uWG91dFhrbm93c1hfZ3JvdXBYYVhfYnlYYWdlWF9fb3V0WGNyZWF0ZWRYX2dyb3VwWGJYX2J5WG5hbWVYX2J5WGNvdW50WFhfZ3JvdXBYYVhfYnlYbmFtZVhYX3RpbWVzWDJYX2NhcFhhX2JYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLnJlcGVhdChfXy51bmlvbihfXy5vdXQoImtub3dzIikuZ3JvdXAoImEiKS5ieSgiYWdlIiksIF9fLm91dCgiY3JlYXRlZCIpLmdyb3VwKCJiIikuYnkoIm5hbWUiKS5ieShjb3VudCgpKSkuZ3JvdXAoImEiKS5ieSgibmFtZSIpKS50aW1lcygyKS5jYXAoImEiLCAiYiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8TG9uZywgTWFwPFN0cmluZywgTGlzdDxWZXJ0ZXg+Pj4+IGdldF9nX1ZfZ3JvdXBfYnlYYm90aEVfY291bnRYX2J5WGdyb3VwX2J5WGxhYmVsWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPExvbmcsIE1hcDxTdHJpbmcsIExpc3Q8VmVydGV4Pj4+Z3JvdXAoKS5ieShib3RoRSgpLmNvdW50KCkpLmJ5KF9fLmdyb3VwKCkuYnkoVC5sYWJlbCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBOdW1iZXI+Pj4gZ2V0X2dfVl9vdXRYZm9sbG93ZWRCeVhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGJvdGhFX2dyb3VwX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCJmb2xsb3dlZEJ5IikuPFN0cmluZywgTWFwPFN0cmluZywgTnVtYmVyPj5ncm91cCgpLmJ5KCJzb25nVHlwZSIpLmJ5KGJvdGhFKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieSh2YWx1ZXMoIndlaWdodCIpLnN1bSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIFN0cmluZz4+IGdldF9nX1ZfZ3JvdXBYbVhfYnlYbmFtZVhfYnlYaW5Ya25vd3NYX25hbWVYX2NhcFhtWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5ncm91cCgibSIpLmJ5KCJuYW1lIikuYnkoX18uaW4oImtub3dzIikudmFsdWVzKCJuYW1lIikpLmNhcCgibSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV9ncm91cFhhWF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhfd2VpZ2h0X3N1bVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPFN0cmluZywgTnVtYmVyPmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoYm90aEUoKS5ncm91cCgiYSIpLmJ5KFQubGFiZWwpLmJ5KHZhbHVlcygid2VpZ2h0Iikuc3VtKCkpLnZhbHVlcygid2VpZ2h0Iikuc3VtKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMaXN0PE9iamVjdD4+PiBnZXRfZ193aXRoU2lkZUVmZmVjdFhhX19tYXJrb182NjZfbm9vbmVfYmxhaFhfVl9ncm91cFhhWF9ieVhuYW1lWF9ieVhvdXRFX2xhYmVsX2ZvbGRYX2NhcFhhWChmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PE9iamVjdD4+IG0pIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJhIiwgbSkuVigpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5ieShvdXRFKCkubGFiZWwoKS5mb2xkKCkpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBOdW1iZXI+PiBnZXRfZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfb3V0WGNyZWF0ZWRYX2dyb3VwX2J5WG5hbWVYX2J5WHNlbGVjdFhwWF92YWx1ZXNYYWdlWF9zdW1YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5hcygicCIpLm91dCgiY3JlYXRlZCIpLjxTdHJpbmcsIE51bWJlcj5ncm91cCgpLmJ5KCJuYW1lIikuYnkoX18uc2VsZWN0KCJwIikudmFsdWVzKCJhZ2UiKS5zdW0oKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkuPFN0cmluZywgTG9uZz5ncm91cCgpLmJ5KF9fLmxhYmVsKCkpLmJ5KF9fLmxhYmVsKCkuY291bnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIExvbmc+PiBnZXRfZ19WX2dyb3VwWG1YX2J5WGxhYmVsWF9ieVhsYWJlbF9jb3VudFhfY2FwWG1YKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmdyb3VwKCJtIikuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoIm0iKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0luamVjdFRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0luamVjdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFiODhiNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9JbmplY3RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5NYXBIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBJbmplY3RUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9vdXRfaW5qZWN0WHYyWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WWDFYX2luamVjdFhnX1ZYNFhYX291dF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjRJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPEludGVnZXIsIEludGVnZXI+IGdldF9nX2luamVjdFhudWxsXzFfM19udWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiBnZXRfZ19pbmplY3RYbnVsbF9udWxsWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiBnZXRfZ19pbmplY3RYbnVsbFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8SW50ZWdlciwgSW50ZWdlcj4gZ2V0X2dfaW5qZWN0KCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdFhudWxsX251bGxYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0WG51bGxYKGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0KGZpbmFsIE9iamVjdCB2aWQxKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8SW50ZWdlciwgTWFwPFN0cmluZywgT2JqZWN0Pj4gZ2V0X2dfaW5qZWN0WDEwXzIwX251bGxfMjBfMTBfMTBYX2dyb3VwQ291bnRYeFhfZGVkdXBfYXNYeVhfcHJvamVjdFhhX2JYX2J5X2J5WHNlbGVjdFh4WF9zZWxlY3RYc2VsZWN0WHlYWFgoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8TWFwPFN0cmluZyxPYmplY3Q+LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19pbmplY3RYbmFtZV9tYXJrb19hZ2VfbnVsbFhfc2VsZWN0WG5hbWVfYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiBnZXRfZ19pbmplY3RYbnVsbF8xXzNfbnVsbFhfYXNYYVhfc2VsZWN0WGFYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfb3V0X2luamVjdFh2MlhfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX291dF9pbmplY3RYdjJYX25hbWUoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIiksIGNvbnZlcnRUb1ZlcnRleElkKCJ2YWRhcyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIExvbmc+IGNvdW50ZXIgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHdoaWxlICh0cmF2ZXJzYWwuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBNYXBIZWxwZXIuaW5jcihjb3VudGVyLCB0cmF2ZXJzYWwubmV4dCgpLCAxbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNvdW50ZXIuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBjb3VudGVyLmdldCgiam9zaCIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBjb3VudGVyLmdldCgibG9wIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMmwsIGNvdW50ZXIuZ2V0KCJ2YWRhcyIpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFhudWxsXzFfM19udWxsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEludGVnZXIsIEludGVnZXI+IHRyYXZlcnNhbCA9IGdldF9nX2luamVjdFhudWxsXzFfM19udWxsWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QobnVsbCwgMSwgMywgbnVsbCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFhudWxsX251bGxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8SW50ZWdlciwgSW50ZWdlcj4gdHJhdmVyc2FsID0gZ2V0X2dfaW5qZWN0WG51bGxfbnVsbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KG51bGwsIG51bGwpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgZ19pbmplY3RYbnVsbFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYbnVsbFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KG51bGwpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgZ19pbmplY3QoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3QoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF92YWx1ZXNYYWdlWF9pbmplY3RYbnVsbF9udWxsWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdFhudWxsX251bGxYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI5LCBudWxsLCBudWxsKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0WG51bGxYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0WG51bGxYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI5LCBudWxsKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0KCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0KGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDI5KSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WDEwXzIwX251bGxfMjBfMTBfMTBYX2dyb3VwQ291bnRYeFhfZGVkdXBfYXNYeVhfcHJvamVjdFhhX2JYX2J5X2J5WHNlbGVjdFh4WF9zZWxlY3RYc2VsZWN0WHlYWFgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYMTBfMjBfbnVsbF8yMF8xMF8xMFhfZ3JvdXBDb3VudFh4WF9kZWR1cF9hc1h5WF9wcm9qZWN0WGFfYlhfYnlfYnlYc2VsZWN0WHhYX3NlbGVjdFhzZWxlY3RYeVhYWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsCi0gICAgICAgICAgICAgICAgImEiLCAxMCwgImIiLCAzTCwKLSAgICAgICAgICAgICAgICAgICAgImEiLCAyMCwgImIiLCAyTCwKLSAgICAgICAgICAgICAgICAgICAgImEiLCBudWxsLCAiYiIsIDFMKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIGdfaW5qZWN0WG5hbWVfbWFya29fYWdlX251bGxYX3NlbGVjdFhuYW1lX2FnZVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxNYXA8U3RyaW5nLCBPYmplY3Q+LCBNYXA8U3RyaW5nLCBPYmplY3Q+PiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYbmFtZV9tYXJrb19hZ2VfbnVsbFhfc2VsZWN0WG5hbWVfYWdlWCgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKG1ha2VNYXBMaXN0KDIsICJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIG51bGwpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9pbmplY3RYZ19WWDRYWF9vdXRfbmFtZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ19WWDFYX2luamVjdFhnX1ZYNFhYX291dF9uYW1lKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLCBjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJyaXBwbGUiLCAibG9wIiwgImxvcCIsICJ2YWRhcyIsICJqb3NoIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBnX2luamVjdFhudWxsXzFfM19udWxsWF9hc1hhWF9zZWxlY3RYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ19pbmplY3RYbnVsbF8xXzNfbnVsbFhfYXNYYVhfc2VsZWN0WGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdChudWxsLCAxLCAzLCBudWxsKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBJbmplY3RUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9vdXRfaW5qZWN0WHYyWF9uYW1lKGZpbmFsIE9iamVjdCB2MUlkLCBmaW5hbCBPYmplY3QgdjJJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5pbmplY3QoZy5WKHYySWQpLm5leHQoKSkudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVlgxWF9pbmplY3RYZ19WWDRYWF9vdXRfbmFtZShmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgT2JqZWN0IHY0SWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYodjFJZCkuaW5qZWN0KGcuVih2NElkKS5uZXh0KCkpLm91dCgpLnZhbHVlcygibmFtZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8SW50ZWdlciwgSW50ZWdlcj4gZ2V0X2dfaW5qZWN0WG51bGxfMV8zX251bGxYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8SW50ZWdlciwgSW50ZWdlcj4gZ2V0X2dfaW5qZWN0WG51bGxfbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QobnVsbCwgbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiBnZXRfZ19pbmplY3RYbnVsbFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBJbnRlZ2VyPiBnZXRfZ19pbmplY3QoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5pbmplY3QoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdFhudWxsX251bGxYKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuaW5qZWN0KG51bGwsIG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0WG51bGxYKGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuaW5qZWN0KG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IGdldF9nX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0KGZpbmFsIE9iamVjdCB2aWQxKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKHZpZDEpLnZhbHVlcygiYWdlIikuaW5qZWN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxJbnRlZ2VyLCBNYXA8U3RyaW5nLCBPYmplY3Q+PiBnZXRfZ19pbmplY3RYMTBfMjBfbnVsbF8yMF8xMF8xMFhfZ3JvdXBDb3VudFh4WF9kZWR1cF9hc1h5WF9wcm9qZWN0WGFfYlhfYnlfYnlYc2VsZWN0WHhYX3NlbGVjdFhzZWxlY3RYeVhYWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdCgxMCwyMCxudWxsLDIwLDEwLDEwKS5ncm91cENvdW50KCJ4IikuCi0gICAgICAgICAgICAgICAgICAgICBkZWR1cCgpLmFzKCJ5IikuCi0gICAgICAgICAgICAgICAgICAgICBwcm9qZWN0KCJhIiwiYiIpLgotICAgICAgICAgICAgICAgICAgICAgICBieSgpLgotICAgICAgICAgICAgICAgICAgICAgICBieShfXy5zZWxlY3QoIngiKS5zZWxlY3QoX18uc2VsZWN0KCJ5IikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPE1hcDxTdHJpbmcsIE9iamVjdD4sIE1hcDxTdHJpbmcsIE9iamVjdD4+IGdldF9nX2luamVjdFhuYW1lX21hcmtvX2FnZV9udWxsWF9zZWxlY3RYbmFtZV9hZ2VYKCkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IG0gPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgICAgICBtLnB1dCgibmFtZSIsICJtYXJrbyIpOwotICAgICAgICAgICAgbS5wdXQoImFnZSIsIG51bGwpOwotICAgICAgICAgICAgcmV0dXJuIGcuaW5qZWN0KG0pLnNlbGVjdCgibmFtZSIsImFnZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8SW50ZWdlciwgSW50ZWdlcj4gZ2V0X2dfaW5qZWN0WG51bGxfMV8zX251bGxYX2FzWGFYX3NlbGVjdFhhWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLmluamVjdChudWxsLCAxLCAzLCBudWxsKS5hcygiYSIpLnNlbGVjdCgiYSIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvU2Fja1Rlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L1NhY2tUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ODM2MzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvU2Fja1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3BlcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcGVyYXRvci5zdW07Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2Fja0Z1bmN0aW9ucy5CYXJyaWVyLm5vcm1TYWNrOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5jb25zdGFudDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTYWNrVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX3dpdGhTYWNrWGhlbGxvWF9WX291dEVfc2Fja1hhc3NpZ25YX2J5WGxhYmVsWF9pblZfc2FjaygpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfd2l0aFNhY2tYMFhfVl9vdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVl9zYWNrX3N1bSgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfd2l0aFNhY2tYMFhfVl9yZXBlYXRYb3V0RV9zYWNrWHN1bVhfYnlYd2VpZ2h0WF9pblZYX3RpbWVzWDJYX3NhY2soKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA+IGdldF9nX3dpdGhTYWNrWG1hcF9fbWFwX2Nsb25lWF9WX291dF9vdXRfc2Fja1htYXBfYV9uYW1lWF9zYWNrKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ193aXRoU2Fja1gxX3N1bVhfVlgxWF9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrKGZpbmFsIE9iamVjdCB2MUlkKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiBnZXRfZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1Zfb3V0X2JhcnJpZXJfc2FjaygpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dEVYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYX2luVlhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjayhmaW5hbCBPYmplY3QgdjFJZCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgQmlnRGVjaW1hbD4gZ2V0X2dfd2l0aFNhY2tYQmlnSW50ZWdlcl9URU5fcG93WDEwMDBYX2Fzc2lnblhfVl9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ193aXRoU2Fja1gyWF9WX3NhY2tYZGl2WF9ieVhjb25zdGFudFg0XzBYWF9zYWNrKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTYWNrWGhlbGxvWF9WX291dEVfc2Fja1hhc3NpZ25YX2J5WGxhYmVsWF9pblZfc2FjaygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2Fja1hoZWxsb1hfVl9vdXRFX3NhY2tYYXNzaWduWF9ieVhsYWJlbFhfaW5WX3NhY2soKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImtub3dzIiwgImtub3dzIiwgImNyZWF0ZWQiLCAiY3JlYXRlZCIsICJjcmVhdGVkIiwgImNyZWF0ZWQiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTYWNrWDBYX1Zfb3V0RV9zYWNrWHN1bVhfYnlYd2VpZ2h0WF9pblZfc2Fja19zdW0oKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNhY2tYMFhfVl9vdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVl9zYWNrX3N1bSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMuNWQsIHRyYXZlcnNhbC5uZXh0KCksIDAuMDAwMDFkKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2Fja1gwWF9WX3JlcGVhdFhvdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVlhfdGltZXNYMlhfc2FjaygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2Fja1gwWF9WX3JlcGVhdFhvdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVlhfdGltZXNYMlhfc2FjaygpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMi4wZCwgMS40ZCksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2Fja1htYXBfX21hcF9jbG9uZVhfVl9vdXRfb3V0X3NhY2tYbWFwX2FfbmFtZVhfc2FjaygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgTWFwPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2Fja1htYXBfX21hcF9jbG9uZVhfVl9vdXRfb3V0X3NhY2tYbWFwX2FfbmFtZVhfc2FjaygpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgaW50IGNvdW50ZXIgPSAwOwotICAgICAgICB3aGlsZSAodHJhdmVyc2FsLmhhc05leHQoKSkgewotICAgICAgICAgICAgZmluYWwgTWFwIG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbWFwLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiYSIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUobWFwLmdldCgiYSIpLmVxdWFscygicmlwcGxlIikgfHwgbWFwLmdldCgiYSIpLmVxdWFscygibG9wIikpOwotICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dFhrbm93c1hfYmFycmllclhub3JtU2Fja1hYX2luWGtub3dzWF9iYXJyaWVyX3NhY2soKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gdHJhdmVyc2FsID0gZ2V0X2dfd2l0aFNhY2tYMV9zdW1YX1ZYMVhfbG9jYWxYb3V0WGtub3dzWF9iYXJyaWVyWG5vcm1TYWNrWFhfaW5Ya25vd3NYX2JhcnJpZXJfc2Fjayhjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgxLjBkLCAxLjBkKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX3dpdGhCdWxrWGZhbHNlWF93aXRoU2Fja1gxX3N1bVhfVl9vdXRfYmFycmllcl9zYWNrKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBJbnRlZ2VyPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1Zfb3V0X2JhcnJpZXJfc2FjaygpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMSwgMSwgMSwgMyksIHRyYXZlcnNhbCk7IC8vIGpvc2gsIHZhZGFzLCByaXBwbGUsIGxvcAotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dEVYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYX2luVlhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjaygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoQnVsa1hmYWxzZVhfd2l0aFNhY2tYMV9zdW1YX1ZYMVhfbG9jYWxYb3V0RVhrbm93c1hfYmFycmllclhub3JtU2Fja1hfaW5WWF9pblhrbm93c1hfYmFycmllcl9zYWNrKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KDEuMGQpLCB0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNhY2tYQmlnSW50ZWdlcl9URU5fcG93WDEwMDBYX2Fzc2lnblhfVl9sb2NhbFhvdXRYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYWF9pblhrbm93c1hfYmFycmllcl9zYWNrKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBCaWdEZWNpbWFsPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2Fja1hCaWdJbnRlZ2VyX1RFTl9wb3dYMTAwMFhfYXNzaWduWF9WX2xvY2FsWG91dFhrbm93c1hfYmFycmllclhub3JtU2Fja1hYX2luWGtub3dzWF9iYXJyaWVyX3NhY2soKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGZpbmFsIEJpZ0RlY2ltYWwgaGFsZiA9IEJpZ0RlY2ltYWwuT05FLmRpdmlkZShCaWdEZWNpbWFsLk9ORS5hZGQoQmlnRGVjaW1hbC5PTkUpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGhhbGYsIHRyYXZlcnNhbC5uZXh0KCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoaGFsZiwgdHJhdmVyc2FsLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNhY2tYMlhfVl9zYWNrWGRpdlhfYnlYY29uc3RhbnRYNF8wWFhfc2FjaygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiB0cmF2ZXJzYWwgPSBnZXRfZ193aXRoU2Fja1gyWF9WX3NhY2tYZGl2WF9ieVhjb25zdGFudFg0XzBYWF9zYWNrKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBkb3VibGUgZXhwZWN0ZWQgPSAyLjAgLyA0LjA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCAoKE51bWJlcikgdHJhdmVyc2FsLm5leHQoKSkuZG91YmxlVmFsdWUoKSwgMC4wMDAxKTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBTYWNrVGVzdCB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IGdldF9nX3dpdGhTYWNrWGhlbGxvWF9WX291dEVfc2Fja1hhc3NpZ25YX2J5WGxhYmVsWF9pblZfc2FjaygpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTYWNrKCJoZWxsbyIpLlYoKS5vdXRFKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KFQubGFiZWwpLmluVigpLnNhY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ193aXRoU2Fja1gwWF9WX291dEVfc2Fja1hzdW1YX2J5WHdlaWdodFhfaW5WX3NhY2tfc3VtKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNhY2soMC4wZCkuVigpLm91dEUoKS5zYWNrKHN1bSkuYnkoIndlaWdodCIpLmluVigpLnNhY2soKS5zdW0oKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ193aXRoU2Fja1gwWF9WX3JlcGVhdFhvdXRFX3NhY2tYc3VtWF9ieVh3ZWlnaHRYX2luVlhfdGltZXNYMlhfc2FjaygpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTYWNrKDAuMGQpLlYoKS5yZXBlYXQob3V0RSgpLnNhY2soc3VtKS5ieSgid2VpZ2h0IikuaW5WKCkpLnRpbWVzKDIpLnNhY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPiBnZXRfZ193aXRoU2Fja1htYXBfX21hcF9jbG9uZVhfVl9vdXRfb3V0X3NhY2tYbWFwX2FfbmFtZVhfc2FjaygpIHsKLSAgICAgICAgICAgIHJldHVybiBnLjxIYXNoTWFwPndpdGhTYWNrKEhhc2hNYXA6Om5ldywgbSAtPiAoSGFzaE1hcCkgbS5jbG9uZSgpKS5WKCkub3V0KCkub3V0KCkuPE1hcCwgVmVydGV4PnNhY2soKG1hcCwgdmVydGV4KSAtPiB7Ci0gICAgICAgICAgICAgICAgbWFwLnB1dCgiYSIsIHZlcnRleC52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFwOwotICAgICAgICAgICAgfSkuc2FjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBEb3VibGU+IGdldF9nX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dFhrbm93c1hfYmFycmllclhub3JtU2Fja1hYX2luWGtub3dzWF9iYXJyaWVyX3NhY2soZmluYWwgT2JqZWN0IHYxSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTYWNrKDEuMGQsIHN1bSkuVih2MUlkKS5sb2NhbChvdXQoImtub3dzIikuYmFycmllcihub3JtU2FjaykpLmluKCJrbm93cyIpLmJhcnJpZXIoKS5zYWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIEludGVnZXI+IGdldF9nX3dpdGhCdWxrWGZhbHNlWF93aXRoU2Fja1gxX3N1bVhfVl9vdXRfYmFycmllcl9zYWNrKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aEJ1bGsoZmFsc2UpLndpdGhTYWNrKDEsIHN1bSkuVigpLm91dCgpLmJhcnJpZXIoKS5zYWNrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIERvdWJsZT4gZ2V0X2dfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WWDFYX2xvY2FsWG91dEVYa25vd3NYX2JhcnJpZXJYbm9ybVNhY2tYX2luVlhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjayhmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aEJ1bGsoZmFsc2UpLndpdGhTYWNrKDEuMGQsIHN1bSkuVih2MUlkKS5sb2NhbChvdXRFKCJrbm93cyIpLmJhcnJpZXIobm9ybVNhY2spLmluVigpKS5pbigia25vd3MiKS5iYXJyaWVyKCkuc2FjaygpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBCaWdEZWNpbWFsPiBnZXRfZ193aXRoU2Fja1hCaWdJbnRlZ2VyX1RFTl9wb3dYMTAwMFhfYXNzaWduWF9WX2xvY2FsWG91dFhrbm93c1hfYmFycmllclhub3JtU2Fja1hYX2luWGtub3dzWF9iYXJyaWVyX3NhY2soKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy53aXRoU2FjayhCaWdJbnRlZ2VyLlRFTi5wb3coMTAwMCksIE9wZXJhdG9yLmFzc2lnbikuVigpLmxvY2FsKG91dCgia25vd3MiKS5iYXJyaWVyKG5vcm1TYWNrKSkuaW4oImtub3dzIikuYmFycmllcigpLnNhY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgRG91YmxlPiBnZXRfZ193aXRoU2Fja1gyWF9WX3NhY2tYZGl2WF9ieVhjb25zdGFudFg0XzBYWF9zYWNrKCkgewotICAgICAgICAgICAgcmV0dXJuIGcud2l0aFNhY2soMikuVigpLnNhY2soT3BlcmF0b3IuZGl2KS5ieShjb25zdGFudCg0LjApKS5zYWNrKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9TaWRlRWZmZWN0Q2FwVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvU2lkZUVmZmVjdENhcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkYjc0Ni4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9TaWRlRWZmZWN0Q2FwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5HcmVtbGluUHJvY2Vzc1J1bm5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnZhbHVlczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTaWRlRWZmZWN0Q2FwVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfaGFzWGFnZVhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9vdXRfY2FwWGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTWFwPE9iamVjdCwgTG9uZz4+PiBnZXRfZ19WX2Nob29zZVhsYWJlbF9wZXJzb25fX2FnZV9ncm91cENvdW50WGFYX19uYW1lX2dyb3VwQ291bnRYYlhYX2NhcFhhX2JYKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfaGFzWGFnZVhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9vdXRfY2FwWGFYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMb25nPj4gdHJhdmVyc2FsID0gZ2V0X2dfVl9oYXNYYWdlWF9ncm91cENvdW50WGFYX2J5WG5hbWVYX291dF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIExvbmc+IG1hcCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobWFwLmdldCgibWFya28iKSwgbmV3IExvbmcoMWwpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1hcC5nZXQoInZhZGFzIiksIG5ldyBMb25nKDFsKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtYXAuZ2V0KCJwZXRlciIpLCBuZXcgTG9uZygxbCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobWFwLmdldCgiam9zaCIpLCBuZXcgTG9uZygxbCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobWFwLnNpemUoKSwgNCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX2Nob29zZVhsYWJlbF9wZXJzb25fX2FnZV9ncm91cENvdW50WGFYX19uYW1lX2dyb3VwQ291bnRYYlhYX2NhcFhhX2JYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBNYXA8T2JqZWN0LCBMb25nPj4+IHRyYXZlcnNhbCA9IGdldF9nX1ZfY2hvb3NlWGxhYmVsX3BlcnNvbl9fYWdlX2dyb3VwQ291bnRYYVhfX25hbWVfZ3JvdXBDb3VudFhiWFhfY2FwWGFfYlgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxPYmplY3QsIExvbmc+PiBtYXAgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKG1hcC5jb250YWluc0tleSgiYSIpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShtYXAuY29udGFpbnNLZXkoImIiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBtYXAuZ2V0KCJhIikuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG1hcC5nZXQoImIiKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMWwsIG1hcC5nZXQoImEiKS5nZXQoMjcpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBtYXAuZ2V0KCJhIikuZ2V0KDI5KS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxbCwgbWFwLmdldCgiYSIpLmdldCgzMikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMWwsIG1hcC5nZXQoImEiKS5nZXQoMzUpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFsLCBtYXAuZ2V0KCJiIikuZ2V0KCJyaXBwbGUiKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxbCwgbWFwLmdldCgiYiIpLmdldCgibG9wIikubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBTaWRlRWZmZWN0Q2FwVGVzdCB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgTWFwPFN0cmluZywgTG9uZz4+IGdldF9nX1ZfaGFzWGFnZVhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9vdXRfY2FwWGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLmhhcygiYWdlIikuZ3JvdXBDb3VudCgiYSIpLmJ5KCJuYW1lIikub3V0KCkuY2FwKCJhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE1hcDxTdHJpbmcsIE1hcDxPYmplY3QsIExvbmc+Pj4gZ2V0X2dfVl9jaG9vc2VYbGFiZWxfcGVyc29uX19hZ2VfZ3JvdXBDb3VudFhhWF9fbmFtZV9ncm91cENvdW50WGJYWF9jYXBYYV9iWCgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLlYoKS5jaG9vc2UoaGFzKFQubGFiZWwsICJwZXJzb24iKSwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzKCJhZ2UiKS5ncm91cENvdW50KCJhIiksCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlcygibmFtZSIpLmdyb3VwQ291bnQoImIiKSkuY2FwKCJhIiwgImIiKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L1NpZGVFZmZlY3RUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9TaWRlRWZmZWN0VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDQyMjgzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L1NpZGVFZmZlY3RUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5JZ25vcmVFbmdpbmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxFbmdpbmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk47Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmFnZ3JlZ2F0ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2lkZUVmZmVjdFRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX3ZhbHVlc1huYW1lWF9zaWRlRWZmZWN0WGlkZW50aXR5WCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfc2lkZUVmZmVjdFhpZGVudGl0eV9zdWJzdHJpbmdYMVhYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ193aXRoU2lkZUVmZmVjdFh4X3NldFhfVl9ib3RoX2JvdGhfc2lkZUVmZmVjdFhfbG9jYWxYX2FnZ3JlZ2F0ZVh4WF9ieVhuYW1lWFhfY2FwWHhYX3VuZm9sZCgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQElnbm9yZUVuZ2luZShUcmF2ZXJzYWxFbmdpbmUuVHlwZS5DT01QVVRFUikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVzWG5hbWVYX3NpZGVFZmZlY3RYaWRlbnRpdHlYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBPYmplY3Q+IHRyYXZlcnNhbCA9IGdldF9nX1ZfdmFsdWVzWG5hbWVYX3NpZGVFZmZlY3RYaWRlbnRpdHlYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgiam9zaCIsICJwZXRlciIsICJyaXBwbGUiLCAibWFya28iLCAidmFkYXMiLCAibG9wIiksIHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQElnbm9yZUVuZ2luZShUcmF2ZXJzYWxFbmdpbmUuVHlwZS5DT01QVVRFUikKLSAgICBwdWJsaWMgdm9pZCBnX1ZfdmFsdWVzWG5hbWVYX3NpZGVFZmZlY3RYaWRlbnRpdHlfc3Vic3RyaW5nWDFYWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3ZhbHVlc1huYW1lWF9zaWRlRWZmZWN0WGlkZW50aXR5X3N1YnN0cmluZ1gxWFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJqb3NoIiwgInBldGVyIiwgInJpcHBsZSIsICJtYXJrbyIsICJ2YWRhcyIsICJsb3AiKSwgdHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBASWdub3JlRW5naW5lKFRyYXZlcnNhbEVuZ2luZS5UeXBlLkNPTVBVVEVSKQotICAgIHB1YmxpYyB2b2lkIGdfd2l0aFNpZGVFZmZlY3RYeF9zZXRYX1ZfYm90aF9ib3RoX3NpZGVFZmZlY3RYc3RvcmVYeFhfYnlYbmFtZVhYX2NhcFh4WF91bmZvbGQoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gdHJhdmVyc2FsID0gIGdldF9nX3dpdGhTaWRlRWZmZWN0WHhfc2V0WF9WX2JvdGhfYm90aF9zaWRlRWZmZWN0WF9sb2NhbFhfYWdncmVnYXRlWHhYX2J5WG5hbWVYWF9jYXBYeFhfdW5mb2xkKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgiam9zaCIsICJwZXRlciIsICJyaXBwbGUiLCAibWFya28iLCAidmFkYXMiLCAibG9wIiksIHRyYXZlcnNhbCk7Ci0gICAgICAgIGNoZWNrU2lkZUVmZmVjdHModHJhdmVyc2FsLmFzQWRtaW4oKS5nZXRTaWRlRWZmZWN0cygpLCAieCIsIEhhc2hTZXQuY2xhc3MpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFNpZGVFZmZlY3RUZXN0IHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIE9iamVjdD4gZ2V0X2dfVl92YWx1ZXNYbmFtZVhfc2lkZUVmZmVjdFhpZGVudGl0eVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuc2lkZUVmZmVjdChfXy5pZGVudGl0eSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgT2JqZWN0PiBnZXRfZ19WX3ZhbHVlc1huYW1lWF9zaWRlRWZmZWN0WGlkZW50aXR5X3N1YnN0cmluZ1gxWFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkudmFsdWVzKCJuYW1lIikuc2lkZUVmZmVjdChfXy5pZGVudGl0eSgpLnN1YnN0cmluZygxKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYeF9zZXRYX1ZfYm90aF9ib3RoX3NpZGVFZmZlY3RYX2xvY2FsWF9hZ2dyZWdhdGVYeFhfYnlYbmFtZVhYX2NhcFh4WF91bmZvbGQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgieCIsbmV3IEhhc2hTZXQ8PigpKS5WKCkuYm90aCgpLmJvdGgoKS5zaWRlRWZmZWN0KF9fLmxvY2FsKGFnZ3JlZ2F0ZSgieCIpLmJ5KCJuYW1lIikpKS5jYXAoIngiKS51bmZvbGQoKTsKLSAgICAgICAgfQotCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvU3ViZ3JhcGhUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9TdWJncmFwaFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMzZDcwOC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9TdWJncmFwaFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uRmVhdHVyZVJlcXVpcmVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNSRVc7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmJvdGhFOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoLkZlYXR1cmVzLkVsZW1lbnRGZWF0dXJlcy5GRUFUVVJFX1VTRVJfU1VQUExJRURfSURTOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX0FERF9WRVJUSUNFUzsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmNvbnRhaW5zOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3ViZ3JhcGhUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBHcmFwaD4gZ2V0X2dfVl93aXRoU2lkZUVmZmVjdFhzZ1hfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWChmaW5hbCBPYmplY3QgdjFJZCwgZmluYWwgR3JhcGggc3ViZ3JhcGgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFN0cmluZz4gZ2V0X2dfVl93aXRoU2lkZUVmZmVjdFhzZ1hfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3N1YmdyYXBoWHNnWF9vdXRWWF90aW1lc1g1WF9uYW1lX2RlZHVwKGZpbmFsIEdyYXBoIHN1YmdyYXBoKTsKLQotICAgIHB1YmxpYyBhYnN0cmFjdCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IGdldF9nX3dpdGhTaWRlRWZmZWN0WHNnWF9WX2hhc1huYW1lX2RhbmllbFhfb3V0RV9zdWJncmFwaFhzZ1hfaW5WKGZpbmFsIEdyYXBoIHN1YmdyYXBoKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBGRUFUVVJFX0FERF9WRVJUSUNFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEZFQVRVUkVfQUREX0VER0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBGRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBwdWJsaWMgdm9pZCBnX1Zfd2l0aFNpZGVFZmZlY3RYc2dYX291dEVYa25vd3NYX3N1YmdyYXBoWHNnWF9uYW1lX2NhcFhzZ1goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWcgPSBncmFwaFByb3ZpZGVyLm5ld0dyYXBoQ29uZmlndXJhdGlvbigic3ViZ3JhcGgiLCB0aGlzLmdldENsYXNzKCksIG5hbWUuZ2V0TWV0aG9kTmFtZSgpLCBNT0RFUk4pOwotICAgICAgICBncmFwaFByb3ZpZGVyLmNsZWFyKGNvbmZpZyk7Ci0gICAgICAgIEdyYXBoIHN1YmdyYXBoID0gZ3JhcGhQcm92aWRlci5vcGVuVGVzdEdyYXBoKGNvbmZpZyk7Ci0gICAgICAgIC8vLy8vCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIEdyYXBoPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX3dpdGhTaWRlRWZmZWN0WHNnWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpLCBzdWJncmFwaCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBzdWJncmFwaCA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydFZlcnRleEVkZ2VDb3VudHMoc3ViZ3JhcGgsIDMsIDIpOwotICAgICAgICBzdWJncmFwaC5lZGdlcygpLmZvckVhY2hSZW1haW5pbmcoZSAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImtub3dzIiwgZS5sYWJlbCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLkUoZSkub3V0VigpLnZhbHVlcygibmFtZSIpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMobmV3IEludGVnZXIoMjkpLCBnLkUoZSkub3V0VigpLjxJbnRlZ2VyPnZhbHVlcygiYWdlIikubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicGVyc29uIiwgZy5FKGUpLm91dFYoKS5sYWJlbCgpLm5leHQoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gZy5FKGUpLmluVigpLjxTdHJpbmc+dmFsdWVzKCJuYW1lIikubmV4dCgpOwotICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKCJ2YWRhcyIpKQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygwLjVkLCBnLkUoZSkuPERvdWJsZT52YWx1ZXMoIndlaWdodCIpLm5leHQoKSwgMC4wMDAxZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChuYW1lLmVxdWFscygiam9zaCIpKQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLjBkLCBnLkUoZSkuPERvdWJsZT52YWx1ZXMoIndlaWdodCIpLm5leHQoKSwgMC4wMDAxZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmFpbCgiVGhlcmUncyBhIHZlcnRleCBwcmVzZW50IHRoYXQgc2hvdWxkIG5vdCBiZSBpbiB0aGUgc3ViZ3JhcGgiKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGdyYXBoUHJvdmlkZXIuY2xlYXIoc3ViZ3JhcGgsIGNvbmZpZyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEZFQVRVUkVfQUREX1ZFUlRJQ0VTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gRkVBVFVSRV9BRERfRURHRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBGRUFUVVJFX1VTRVJfU1VQUExJRURfSURTKQotICAgIHB1YmxpYyB2b2lkIGdfVl93aXRoU2lkZUVmZmVjdFhzZ1hfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3N1YmdyYXBoWHNnWF9vdXRWWF90aW1lc1g1WF9uYW1lX2RlZHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ3JhcGhQcm92aWRlci5uZXdHcmFwaENvbmZpZ3VyYXRpb24oInN1YmdyYXBoIiwgdGhpcy5nZXRDbGFzcygpLCBuYW1lLmdldE1ldGhvZE5hbWUoKSwgTU9ERVJOKTsKLSAgICAgICAgZ3JhcGhQcm92aWRlci5jbGVhcihjb25maWcpOwotICAgICAgICBHcmFwaCBzdWJncmFwaCA9IGdyYXBoUHJvdmlkZXIub3BlblRlc3RHcmFwaChjb25maWcpOwotICAgICAgICAvLy8vLwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBTdHJpbmc+IHRyYXZlcnNhbCA9IGdldF9nX1Zfd2l0aFNpZGVFZmZlY3RYc2dYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF9zdWJncmFwaFhzZ1hfb3V0VlhfdGltZXNYNVhfbmFtZV9kZWR1cChzdWJncmFwaCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgibWFya28iLCAiam9zaCIsICJwZXRlciIpLCB0cmF2ZXJzYWwpOwotICAgICAgICBzdWJncmFwaCA9IHRyYXZlcnNhbC5hc0FkbWluKCkuZ2V0U2lkZUVmZmVjdHMoKS48R3JhcGg+Z2V0KCJzZyIpOwotICAgICAgICBhc3NlcnRWZXJ0ZXhFZGdlQ291bnRzKHN1YmdyYXBoLCA1LCA0KTsKLQotICAgICAgICBncmFwaFByb3ZpZGVyLmNsZWFyKHN1YmdyYXBoLCBjb25maWcpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoQ1JFVykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gRkVBVFVSRV9BRERfVkVSVElDRVMpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBGRUFUVVJFX0FERF9FREdFUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gRkVBVFVSRV9VU0VSX1NVUFBMSUVEX0lEUykKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEZFQVRVUkVfVVNFUl9TVVBQTElFRF9JRFMpCi0gICAgcHVibGljIHZvaWQgZ193aXRoU2lkZUVmZmVjdFhzZ1hfVl9oYXNYbmFtZV9kYW5pZWxYb3V0X2NhcFhzZ1goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWcgPSBncmFwaFByb3ZpZGVyLm5ld0dyYXBoQ29uZmlndXJhdGlvbigic3ViZ3JhcGgiLCB0aGlzLmdldENsYXNzKCksIG5hbWUuZ2V0TWV0aG9kTmFtZSgpLCBDUkVXKTsKLSAgICAgICAgZ3JhcGhQcm92aWRlci5jbGVhcihjb25maWcpOwotICAgICAgICBmaW5hbCBHcmFwaCBzdWJncmFwaCA9IGdyYXBoUHJvdmlkZXIub3BlblRlc3RHcmFwaChjb25maWcpOwotICAgICAgICAvLy8vLwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBWZXJ0ZXg+IHRyYXZlcnNhbCA9IGdldF9nX3dpdGhTaWRlRWZmZWN0WHNnWF9WX2hhc1huYW1lX2RhbmllbFhfb3V0RV9zdWJncmFwaFhzZ1hfaW5WKHN1YmdyYXBoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIHRyYXZlcnNhbC5pdGVyYXRlKCk7Ci0gICAgICAgIGFzc2VydFZlcnRleEVkZ2VDb3VudHMoc3ViZ3JhcGgsIDMsIDIpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBsb2NhdGlvbnMgPSBzdWJncmFwaC50cmF2ZXJzYWwoKS5WKCkuaGFzKCJuYW1lIiwgImRhbmllbCIpLjxTdHJpbmc+dmFsdWVzKCJsb2NhdGlvbiIpLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRUaGF0KGxvY2F0aW9ucywgY29udGFpbnMoInNwcmVtYmVyZyIsICJrYWlzZXJzbGF1dGVybiIsICJhYWNoZW4iKSk7Ci0KLSAgICAgICAgZ3JhcGhQcm92aWRlci5jbGVhcihzdWJncmFwaCwgY29uZmlnKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYXZlcnNhbHMgZXh0ZW5kcyBTdWJncmFwaFRlc3QgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgR3JhcGg+IGdldF9nX1Zfd2l0aFNpZGVFZmZlY3RYc2dYX291dEVYa25vd3NYX3N1YmdyYXBoWHNnWF9uYW1lX2NhcFhzZ1goZmluYWwgT2JqZWN0IHYxSWQsIGZpbmFsIEdyYXBoIHN1YmdyYXBoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy53aXRoU2lkZUVmZmVjdCgic2ciLCAoKSAtPiBzdWJncmFwaCkuVih2MUlkKS5vdXRFKCJrbm93cyIpLnN1YmdyYXBoKCJzZyIpLnZhbHVlcygibmFtZSIpLmNhcCgic2ciKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgU3RyaW5nPiBnZXRfZ19WX3dpdGhTaWRlRWZmZWN0WHNnWF9yZXBlYXRYYm90aEVYY3JlYXRlZFhfc3ViZ3JhcGhYc2dYX291dFZYX3RpbWVzWDVYX25hbWVfZGVkdXAoZmluYWwgR3JhcGggc3ViZ3JhcGgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJzZyIsICgpIC0+IHN1YmdyYXBoKS5WKCkucmVwZWF0KGJvdGhFKCJjcmVhdGVkIikuc3ViZ3JhcGgoInNnIikub3V0VigpKS50aW1lcyg1KS48U3RyaW5nPnZhbHVlcygibmFtZSIpLmRlZHVwKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gZ2V0X2dfd2l0aFNpZGVFZmZlY3RYc2dYX1ZfaGFzWG5hbWVfZGFuaWVsWF9vdXRFX3N1YmdyYXBoWHNnWF9pblYoZmluYWwgR3JhcGggc3ViZ3JhcGgpIHsKLSAgICAgICAgICAgIHJldHVybiBnLndpdGhTaWRlRWZmZWN0KCJzZyIsICgpIC0+IHN1YmdyYXBoKS5WKCkuaGFzKCJuYW1lIiwiZGFuaWVsIikub3V0RSgpLnN1YmdyYXBoKCJzZyIpLmluVigpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvVHJlZVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L1RyZWVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNGI2MzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvVHJlZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVHJlZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gZ2V0X2dfVl9vdXRfb3V0X3RyZWVfYnlYaWRYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gZ2V0X2dfVl9vdXRfb3V0X3RyZWVYYVhfYnlYaWRYX2NhcFhhWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IGdldF9nX1Zfb3V0X291dF90cmVlKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gZ2V0X2dfVl9vdXRfb3V0X3RyZWVYYVhfY2FwWGFYKCk7Ci0KLSAgICBwdWJsaWMgYWJzdHJhY3QgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gZ2V0X2dfVlgxWF9vdXRfb3V0X3RyZWVfYnlYbmFtZVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IGdldF9nX1Zfb3V0X3RyZWVfYnlYYWdlWCgpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IGdldF9nX1ZYMVhfb3V0X291dF90cmVlWGFYX2J5WG5hbWVYX2JvdGhfYm90aF9jYXBYYVgoZmluYWwgT2JqZWN0IHYxSWQpOwotCi0gICAgcHVibGljIGFic3RyYWN0IFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IGdldF9nX1Zfb3V0X291dF9vdXRfdHJlZSgpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WWDFYX291dF9vdXRfdHJlZV9ieVhuYW1lWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRfb3V0X3RyZWVfYnlYbmFtZVgoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uQSh0cmF2ZXJzYWwpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfdHJlZV9ieVhhZ2VYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF90cmVlX2J5WGFnZVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0KLSAgICAgICAgZmluYWwgVHJlZSB0cmVlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCB0cmVlLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUodHJlZS5jb250YWluc0tleSgyOSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgKChNYXApIHRyZWUuZ2V0KDI5KSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgoKE1hcCkgdHJlZS5nZXQoMjkpKS5jb250YWluc0tleSgzMikpOwotICAgICAgICBhc3NlcnRUcnVlKCgoTWFwKSB0cmVlLmdldCgyOSkpLmNvbnRhaW5zS2V5KDI3KSk7Ci0gICAgICAgIGFzc2VydFRydWUodHJlZS5jb250YWluc0tleSgzNSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgKChNYXApIHRyZWUuZ2V0KDM1KSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmVlLmNvbnRhaW5zS2V5KDMyKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCAoKE1hcCkgdHJlZS5nZXQoMzIpKS5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbmFtZVhfYm90aF9ib3RoX2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gdHJhdmVyc2FsID0gZ2V0X2dfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbmFtZVhfYm90aF9ib3RoX2NhcFhhWChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRDb21tb25BKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRDb21tb25BKGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IHRyYXZlcnNhbCkgewotICAgICAgICBmaW5hbCBUcmVlIHRyZWUgPSB0cmF2ZXJzYWwubmV4dCgpOwotICAgICAgICBhc3NlcnRGYWxzZSh0cmF2ZXJzYWwuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRyZWUuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmVlLmNvbnRhaW5zS2V5KCJtYXJrbyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsICgoTWFwKSB0cmVlLmdldCgibWFya28iKSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgoKE1hcCkgdHJlZS5nZXQoIm1hcmtvIikpLmNvbnRhaW5zS2V5KCJqb3NoIikpOwotICAgICAgICBhc3NlcnRUcnVlKCgoTWFwKSAoKE1hcCkgdHJlZS5nZXQoIm1hcmtvIikpLmdldCgiam9zaCIpKS5jb250YWluc0tleSgibG9wIikpOwotICAgICAgICBhc3NlcnRUcnVlKCgoTWFwKSAoKE1hcCkgdHJlZS5nZXQoIm1hcmtvIikpLmdldCgiam9zaCIpKS5jb250YWluc0tleSgicmlwcGxlIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIGdfVl9vdXRfb3V0X3RyZWVfYnlYaWRYKCkgewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiB0cmF2ZXJzYWwgPSBnZXRfZ19WX291dF9vdXRfdHJlZV9ieVhpZFgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkIodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dF90cmVlWGFYX2J5WGlkWF9jYXBYYVgoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF90cmVlWGFYX2J5WGlkWF9jYXBYYVgoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkIodHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Q29tbW9uQihUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiB0cmF2ZXJzYWwpIHsKLSAgICAgICAgZmluYWwgVHJlZSB0cmVlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodHJhdmVyc2FsLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCB0cmVlLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydFRydWUodHJlZS5jb250YWluc0tleShjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKChNYXApIHRyZWUuZ2V0KGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgoKE1hcCkgdHJlZS5nZXQoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpKS5jb250YWluc0tleShjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUoKChNYXApICgoTWFwKSB0cmVlLmdldChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSkpLmdldChjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKSkuY29udGFpbnNLZXkoY29udmVydFRvVmVydGV4SWQoImxvcCIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUoKChNYXApICgoTWFwKSB0cmVlLmdldChjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSkpLmdldChjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKSkuY29udGFpbnNLZXkoY29udmVydFRvVmVydGV4SWQoInJpcHBsZSIpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfdHJlZSgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRfb3V0X3RyZWUoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHRyYXZlcnNhbCk7Ci0gICAgICAgIGFzc2VydENvbW1vbkModHJhdmVyc2FsKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBnX1Zfb3V0X291dF90cmVlWGFYX2NhcFhhWCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gdHJhdmVyc2FsID0gZ2V0X2dfVl9vdXRfb3V0X3RyZWVYYVhfY2FwWGFYKCk7Ci0gICAgICAgIHByaW50VHJhdmVyc2FsRm9ybSh0cmF2ZXJzYWwpOwotICAgICAgICBhc3NlcnRDb21tb25DKHRyYXZlcnNhbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydENvbW1vbkMoVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIGZpbmFsIFRyZWUgdHJlZSA9IHRyYXZlcnNhbC5uZXh0KCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdHJlZS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKHRyZWUuY29udGFpbnNLZXkoY29udmVydFRvVmVydGV4KGdyYXBoLCAibWFya28iKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgKChNYXApIHRyZWUuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgIm1hcmtvIikpKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKCgoTWFwKSB0cmVlLmdldChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpKSkuY29udGFpbnNLZXkoY29udmVydFRvVmVydGV4KGdyYXBoLCAiam9zaCIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUoKChNYXApICgoTWFwKSB0cmVlLmdldChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpKSkuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSkpLmNvbnRhaW5zS2V5KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImxvcCIpKSk7Ci0gICAgICAgIGFzc2VydFRydWUoKChNYXApICgoTWFwKSB0cmVlLmdldChjb252ZXJ0VG9WZXJ0ZXgoZ3JhcGgsICJtYXJrbyIpKSkuZ2V0KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgImpvc2giKSkpLmNvbnRhaW5zS2V5KGNvbnZlcnRUb1ZlcnRleChncmFwaCwgInJpcHBsZSIpKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgZ19WX291dF9vdXRfb3V0X3RyZWUoKSB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFRyZWU+IHRyYXZlcnNhbCA9IGdldF9nX1Zfb3V0X291dF9vdXRfdHJlZSgpOwotICAgICAgICBwcmludFRyYXZlcnNhbEZvcm0odHJhdmVyc2FsKTsKLSAgICAgICAgZmluYWwgVHJlZSB0cmVlID0gdHJhdmVyc2FsLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmVlLmlzRW1wdHkoKSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHRyYXZlcnNhbC5oYXNOZXh0KCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVHJhdmVyc2FscyBleHRlbmRzIFRyZWVUZXN0IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiBnZXRfZ19WWDFYX291dF9vdXRfdHJlZV9ieVhuYW1lWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoIm5hbWUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiBnZXRfZ19WX291dF90cmVlX2J5WGFnZVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkudHJlZSgpLmJ5KCJhZ2UiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gZ2V0X2dfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbmFtZVhfYm90aF9ib3RoX2NhcFhhWChmaW5hbCBPYmplY3QgdjFJZCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVih2MUlkKS5vdXQoKS5vdXQoKS50cmVlKCJhIikuYnkoIm5hbWUiKS5ib3RoKCkuYm90aCgpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiBnZXRfZ19WX291dF9vdXRfdHJlZV9ieVhpZFgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkudHJlZSgpLmJ5KFQuaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiBnZXRfZ19WX291dF9vdXRfdHJlZVhhWF9ieVhpZFhfY2FwWGFYKCkgewotICAgICAgICAgICAgcmV0dXJuIGcuVigpLm91dCgpLm91dCgpLnRyZWUoImEiKS5ieShULmlkKS5jYXAoImEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVHJhdmVyc2FsPFZlcnRleCwgVHJlZT4gZ2V0X2dfVl9vdXRfb3V0X3RyZWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkudHJlZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiBnZXRfZ19WX291dF9vdXRfdHJlZVhhWF9jYXBYYVgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkudHJlZSgiYSIpLmNhcCgiYSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBUcmF2ZXJzYWw8VmVydGV4LCBUcmVlPiBnZXRfZ19WX291dF9vdXRfb3V0X3RyZWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZy5WKCkub3V0KCkub3V0KCkub3V0KCkudHJlZSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1BhcnRpdGlvblN0cmF0ZWd5UHJvY2Vzc1Rlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9QYXJ0aXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MWMyMWYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1BhcnRpdGlvblN0cmF0ZWd5UHJvY2Vzc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUxOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuTWFwQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudFNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb24uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLlY7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5Db3JlTWF0Y2hlcnMuaXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5jb250YWluc0luQW55T3JkZXI7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzSW5zdGFuY2VPZi5pbnN0YW5jZU9mOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5TdHJpbmdTdGFydHNXaXRoLnN0YXJ0c1dpdGg7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBQYXJ0aXRpb25TdHJhdGVneVByb2Nlc3NUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBwYXJ0aXRpb24gPSAiZ3JlbWxpbi5wYXJ0aXRpb25HcmFwaFN0cmF0ZWd5LnBhcnRpdGlvbiI7Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuU0lNUExFKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZFBhcnRpdGlvbldpdGhBYnN0cmFjdExhbWJkYUNoaWxkVHJhdmVyc2FsKCkgewotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneSA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3kpLmFkZFYoInRlc3RWIikucHJvcGVydHkoInByb3AxIiwgInRoaW5nIikuYWRkRSgic2VsZiIpLmluVigpLm5leHQoKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKHYpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneSkuVigpCi0gICAgICAgICAgICAgICAgLmhhc0xhYmVsKCJ0ZXN0ViIpCi0gICAgICAgICAgICAgICAgLnByb2plY3QoImlkIiwgInByb3AxIikKLSAgICAgICAgICAgICAgICAuYnkoVC5pZCkKLSAgICAgICAgICAgICAgICAuYnkoInByb3AxIikubmV4dCgpLmdldCgicHJvcDEiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlZFUlRJQ0VTX09OTFkpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkQXBwZW5kUGFydGl0aW9uVG9WZXJ0ZXgoKSB7Ci0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5ID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQSIpLnJlYWRQYXJ0aXRpb25zKCJBIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneSkuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAidGhpbmciKS5uZXh0KCk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbCh2KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGluZyIsIGcuVih2KS52YWx1ZXMoImFueSIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuVih2KS52YWx1ZXMocGFydGl0aW9uKS5uZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5WRVJUSUNFU19PTkxZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBcHBlbmRQYXJ0aXRpb25Ub1ZlcnRleFByb3BlcnR5KCkgewotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneSA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnLndpdGhTdHJhdGVnaWVzKHBhcnRpdGlvblN0cmF0ZWd5KS5hZGRWKCkucHJvcGVydHkoImFueSIsICJ0aGluZyIpLm5leHQoKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKHYpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy5WKHYpLnZhbHVlcygiYW55IikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJBIiwgZy5WKHYpLnZhbHVlcyhwYXJ0aXRpb24pLm5leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlZFUlRJQ0VTX09OTFkpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfTUVUQV9QUk9QRVJUSUVTKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01VTFRJX1BST1BFUlRJRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkQXBwZW5kUGFydGl0aW9uVG9WZXJ0ZXhQcm9wZXJ0eU92ZXJNdWx0aVByb3BlcnR5KCkgewotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneSA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnLndpdGhTdHJhdGVnaWVzKHBhcnRpdGlvblN0cmF0ZWd5KS5hZGRWKCkucHJvcGVydHkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkubGlzdCwgImFueSIsICJ0aGluZyIpCi0gICAgICAgICAgICAgICAgLnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5Lmxpc3QsICJhbnkiLCAibW9yZSIpLm5leHQoKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKHYpOwotICAgICAgICBhc3NlcnRUaGF0KChMaXN0PFN0cmluZz4pIEl0ZXJhdG9yVXRpbHMuYXNMaXN0KGcuVih2KS5wcm9wZXJ0aWVzKCJhbnkiKSkuc3RyZWFtKCkubWFwKHAgLT4gKChWZXJ0ZXhQcm9wZXJ0eSkgcCkudmFsdWUoKSkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKSwgY29udGFpbnNJbkFueU9yZGVyKCJ0aGluZyIsICJtb3JlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkEiLCB2LnByb3BlcnR5KHBhcnRpdGlvbikudmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoKExpc3Q8U3RyaW5nPikgSXRlcmF0b3JVdGlscy5hc0xpc3QoZy5WKHYpLnByb3BlcnRpZXMoImFueSIpKS5zdHJlYW0oKS5tYXAocCAtPiAoKFZlcnRleFByb3BlcnR5KSBwKS52YWx1ZShwYXJ0aXRpb24pKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpLCBjb250YWluc0luQW55T3JkZXIoIkEiLCAiQSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuVkVSVElDRVNfT05MWSkKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9NRVRBX1BST1BFUlRJRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90QXBwZW5kUGFydGl0aW9uVG9WZXJ0ZXhQcm9wZXJ0eSgpIHsKLSAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgcGFydGl0aW9uU3RyYXRlZ3kgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLmluY2x1ZGVNZXRhUHJvcGVydGllcyhmYWxzZSkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3kpLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgInRoaW5nIikubmV4dCgpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwodik7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhpbmciLCBnLlYodikudmFsdWVzKCJhbnkiKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkEiLCBnLlYodikudmFsdWVzKHBhcnRpdGlvbikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnLlYodikucHJvcGVydGllcygiYW55IikucHJvcGVydGllcygpLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5WRVJUSUNFU19PTkxZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBcHBlbmRQYXJ0aXRpb25Ub0FsbFZlcnRleFByb3BlcnRpZXMoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGdPdmVyQSA9IGcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5pbmNsdWRlTWV0YVByb3BlcnRpZXModHJ1ZSkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnT3ZlckIgPSBnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJCIikucmVhZFBhcnRpdGlvbnMoIkIiKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ092ZXJBQiA9IGcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5pbmNsdWRlTWV0YVByb3BlcnRpZXModHJ1ZSkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkIiKS5yZWFkUGFydGl0aW9ucygiQiIsIkEiKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnT3ZlckEuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAidGhpbmciKS5wcm9wZXJ0eSgic29tZSIsICJ0aGluZyIpLm5leHQoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IGxhYmVsbGVkViA9IGdPdmVyQS5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsICJ0aGluZyIpLnByb3BlcnR5KCJ0aGF0IiwgInRoaW5nIikubmV4dCgpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwodik7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhpbmciLCBnLlYodikudmFsdWVzKCJhbnkiKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoVmVydGV4LkRFRkFVTFRfTEFCRUwsIGcuVih2KS5sYWJlbCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuVih2KS52YWx1ZXMocGFydGl0aW9uKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkEiLCBnLlYodikucHJvcGVydGllcygiYW55IikudmFsdWVzKHBhcnRpdGlvbikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGluZyIsIGcuVih2KS52YWx1ZXMoInNvbWUiKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkEiLCBnLlYodikucHJvcGVydGllcygic29tZSIpLnZhbHVlcyhwYXJ0aXRpb24pLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChsYWJlbGxlZFYpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy5WKGxhYmVsbGVkVikudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJwZXJzb24iLCBnLlYobGFiZWxsZWRWKS5sYWJlbCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuVihsYWJlbGxlZFYpLnZhbHVlcyhwYXJ0aXRpb24pLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuVihsYWJlbGxlZFYpLnByb3BlcnRpZXMoIm5hbWUiKS52YWx1ZXMocGFydGl0aW9uKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy5WKGxhYmVsbGVkVikudmFsdWVzKCJ0aGF0IikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJBIiwgZy5WKGxhYmVsbGVkVikucHJvcGVydGllcygidGhhdCIpLnZhbHVlcyhwYXJ0aXRpb24pLm5leHQoKSk7Ci0KLSAgICAgICAgZ092ZXJBQi5WKHYpLnByb3BlcnR5KCJ0aGF0IiwgInRoaW5nIikuaXRlcmF0ZSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy5WKHYpLnZhbHVlcygidGhhdCIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQiIsIGcuVih2KS5wcm9wZXJ0aWVzKCJ0aGF0IikudmFsdWVzKHBhcnRpdGlvbikubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQUIuVih2KS5wcm9wZXJ0aWVzKCJhbnkiKS5oYXNOZXh0KCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckFCLlYodikucHJvcGVydGllcygidGhhdCIpLmhhc05leHQoKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQS5WKHYpLnByb3BlcnRpZXMoInRoYXQiKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBLlYodikucHJvcGVydGllcygiYW55IikuaGFzTmV4dCgpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJCLlYodikucHJvcGVydGllcygiYW55IikuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQi5WKHYpLnByb3BlcnRpZXMoInRoYXQiKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBQi5WKHYpLnByb3BlcnRpZXMoInBhcnRpdGlvbktleSIpLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQUIuVih2KS52YWx1ZXMoImFueSIpLmhhc05leHQoKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQUIuVih2KS52YWx1ZXMoInRoYXQiKS5oYXNOZXh0KCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckEuVih2KS52YWx1ZXMoInRoYXQiKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBLlYodikudmFsdWVzKCJhbnkiKS5oYXNOZXh0KCksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckIuVih2KS52YWx1ZXMoImFueSIpLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckIuVih2KS52YWx1ZXMoInRoYXQiKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBQi5WKHYpLnZhbHVlcygicGFydGl0aW9uS2V5IikuaGFzTmV4dCgpLCBpcyhmYWxzZSkpOwotCi0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBQi5WKHYpLnByb3BlcnR5TWFwKCkubmV4dCgpLmNvbnRhaW5zS2V5KCJhbnkiKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQUIuVih2KS5wcm9wZXJ0eU1hcCgpLm5leHQoKS5jb250YWluc0tleSgidGhhdCIpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBLlYodikucHJvcGVydHlNYXAoKS5uZXh0KCkuY29udGFpbnNLZXkoInRoYXQiKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckEuVih2KS5wcm9wZXJ0eU1hcCgpLm5leHQoKS5jb250YWluc0tleSgiYW55IiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckIuVih2KS5wcm9wZXJ0eU1hcCgpLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckIuVih2KS5wcm9wZXJ0eU1hcCgpLmhhc05leHQoKSwgaXMoZmFsc2UpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckFCLlYodikucHJvcGVydHlNYXAoKS5uZXh0KCkuY29udGFpbnNLZXkocGFydGl0aW9uKSwgaXMoZmFsc2UpKTsKLQotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQUIuVih2KS52YWx1ZU1hcCgpLm5leHQoKS5jb250YWluc0tleSgiYW55IiksIGlzKHRydWUpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChnT3ZlckFCLlYodikudmFsdWVNYXAoKS5uZXh0KCkuY29udGFpbnNLZXkoInRoYXQiKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRUaGF0KGdPdmVyQS5WKHYpLnZhbHVlTWFwKCkubmV4dCgpLmNvbnRhaW5zS2V5KCJ0aGF0IiksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBLlYodikudmFsdWVNYXAoKS5uZXh0KCkuY29udGFpbnNLZXkoImFueSIpLCBpcyh0cnVlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJCLlYodikudmFsdWVNYXAoKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJCLlYodikudmFsdWVNYXAoKS5oYXNOZXh0KCksIGlzKGZhbHNlKSk7Ci0gICAgICAgIGFzc2VydFRoYXQoZ092ZXJBQi5WKHYpLnZhbHVlTWFwKCkubmV4dCgpLmNvbnRhaW5zS2V5KHBhcnRpdGlvbiksIGlzKGZhbHNlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlZFUlRJQ0VTX09OTFkpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfTUVUQV9QUk9QRVJUSUVTKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhpZGVQYXJ0aXRpb25LZXlGb3JWYWx1ZXMoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGdPdmVyQSA9IGcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5pbmNsdWRlTWV0YVByb3BlcnRpZXModHJ1ZSkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnT3ZlckEuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAidGhpbmciKS5uZXh0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGdPdmVyQS5WKHYpLnZhbHVlcyhwYXJ0aXRpb24pLm5leHQoKTsKLSAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGV4LmdldE1lc3NhZ2UoKSwgc3RhcnRzV2l0aCgiQ2Fubm90IGV4cGxpY2l0bHkgcmVxdWVzdCB0aGUgcGFydGl0aW9uS2V5IGluIHRoZSB0cmF2ZXJzYWwiKSk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5WRVJUSUNFU19PTkxZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIaWRlUGFydGl0aW9uS2V5Rm9yVmFsdWVzV2l0aEVtcHR5S2V5cygpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ092ZXJBID0gZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLmluY2x1ZGVNZXRhUHJvcGVydGllcyh0cnVlKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQSIpLnJlYWRQYXJ0aXRpb25zKCJBIikuY3JlYXRlKCkpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGdPdmVyQS5hZGRWKCkucHJvcGVydHkoImFueSIsICJ0aGluZyIpLm5leHQoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIChsb25nKSBnT3ZlckEuVih2KS52YWx1ZXMoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhpbmciLCBnT3ZlckEuVih2KS52YWx1ZXMoKS5uZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5WRVJUSUNFU19PTkxZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIaWRlUGFydGl0aW9uS2V5Rm9yUHJvcGVydGllcygpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ092ZXJBID0gZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLmluY2x1ZGVNZXRhUHJvcGVydGllcyh0cnVlKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQSIpLnJlYWRQYXJ0aXRpb25zKCJBIikuY3JlYXRlKCkpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGdPdmVyQS5hZGRWKCkucHJvcGVydHkoImFueSIsICJ0aGluZyIpLm5leHQoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgZ092ZXJBLlYodikucHJvcGVydGllcyhwYXJ0aXRpb24pLm5leHQoKTsKLSAgICAgICAgICAgIGZhaWwoIlNob3VsZCBoYXZlIHRocm93biBleGNlcHRpb24iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGV4LmdldE1lc3NhZ2UoKSwgc3RhcnRzV2l0aCgiQ2Fubm90IGV4cGxpY2l0bHkgcmVxdWVzdCB0aGUgcGFydGl0aW9uS2V5IGluIHRoZSB0cmF2ZXJzYWwiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuVkVSVElDRVNfT05MWSkKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9NRVRBX1BST1BFUlRJRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkSGlkZVBhcnRpdGlvbktleUZvclByb3BlcnRpZXNXaXRoRW1wdHlLZXlzKCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnT3ZlckEgPSBnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKSk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZ092ZXJBLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgInRoaW5nIikubmV4dCgpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxTCwgKGxvbmcpIGdPdmVyQS5WKHYpLnByb3BlcnRpZXMoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhpbmciLCBnT3ZlckEuVih2KS5wcm9wZXJ0aWVzKCkudmFsdWUoKS5uZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmNsYXNzKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuVkVSVElDRVNfT05MWSkKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuRkVBVFVSRV9NRVRBX1BST1BFUlRJRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkSGlkZVBhcnRpdGlvbktleUZvclByb3BlcnR5TWFwKCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnT3ZlckEgPSBnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKSk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZ092ZXJBLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgInRoaW5nIikubmV4dCgpOwotCi0gICAgICAgIGdPdmVyQS5WKHYpLnByb3BlcnR5TWFwKHBhcnRpdGlvbikubmV4dCgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5WRVJUSUNFU19PTkxZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIaWRlUGFydGl0aW9uS2V5Rm9yUHJvcGVydHlNYXBXaXRoRW1wdHlLZXlzKCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnT3ZlckEgPSBnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAuaW5jbHVkZU1ldGFQcm9wZXJ0aWVzKHRydWUpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKSk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZ092ZXJBLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgInRoaW5nIikubmV4dCgpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxTCwgKGxvbmcpIGdPdmVyQS5WKHYpLnByb3BlcnR5TWFwKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgKChMaXN0PFZlcnRleFByb3BlcnR5PikgZ092ZXJBLlYodikucHJvcGVydHlNYXAoKS5uZXh0KCkuZ2V0KCJhbnkiKSkuZ2V0KDApLnZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5WRVJUSUNFU19PTkxZKQotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuVmVydGV4RmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5GRUFUVVJFX01FVEFfUFJPUEVSVElFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRIaWRlUGFydGl0aW9uS2V5Rm9yVmFsdWVNYXAoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGdPdmVyQSA9IGcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5pbmNsdWRlTWV0YVByb3BlcnRpZXModHJ1ZSkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnT3ZlckEuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAidGhpbmciKS5uZXh0KCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGdPdmVyQS5WKHYpLnZhbHVlTWFwKHBhcnRpdGlvbikubmV4dCgpOwotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIGV4Y2VwdGlvbiIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlZFUlRJQ0VTX09OTFkpCi0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5WZXJ0ZXhGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLlZlcnRleEZlYXR1cmVzLkZFQVRVUkVfTUVUQV9QUk9QRVJUSUVTKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhpZGVQYXJ0aXRpb25LZXlGb3JWYWx1ZU1hcFdpdGhFbXB0eUtleXMoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGdPdmVyQSA9IGcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5pbmNsdWRlTWV0YVByb3BlcnRpZXModHJ1ZSkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnT3ZlckEuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAidGhpbmciKS5uZXh0KCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCAobG9uZykgZ092ZXJBLlYodikudmFsdWVNYXAoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhpbmciLCAoKExpc3QpIGdPdmVyQS5WKHYpLnZhbHVlTWFwKCkubmV4dCgpLmdldCgiYW55IikpLmdldCgwKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50U2V0KEZlYXR1cmVSZXF1aXJlbWVudFNldC5QYWNrYWdlLlNJTVBMRSkKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRBcHBlbmRQYXJ0aXRpb25Ub0VkZ2UoKSB7Ci0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5ID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQSIpLnJlYWRQYXJ0aXRpb25zKCJBIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZSA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3kpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdjEgPSBzb3VyY2UuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAidGhpbmciKS5uZXh0KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IHNvdXJjZS5hZGRWKCkucHJvcGVydHkoInNvbWUiLCAidGhpbmciKS5uZXh0KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZTEgPSBzb3VyY2UuVih2MSkuYWRkRSgiY29ubmVjdHNUbyIpLmZyb20odjIpLnByb3BlcnR5KCJldmVyeSIsICJ0aGluZyIpLm5leHQoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlMiA9IHNvdXJjZS5hZGRFKCJyZWxhdGVzVG8iKS5mcm9tKHYyKS50byh2MSkucHJvcGVydHkoImV2ZXJ5IiwgInRoaW5nIikubmV4dCgpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwodjEpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy5WKHYxKS52YWx1ZXMoImFueSIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuVih2MikudmFsdWVzKHBhcnRpdGlvbikubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKHYyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGluZyIsIGcuVih2MikudmFsdWVzKCJzb21lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJBIiwgZy5WKHYyKS52YWx1ZXMocGFydGl0aW9uKS5uZXh0KCkpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoZTEpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaW5nIiwgZy5FKGUxKS52YWx1ZXMoImV2ZXJ5IikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb25uZWN0c1RvIiwgZTEubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuRShlMSkudmFsdWVzKHBhcnRpdGlvbikubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGUyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGluZyIsIGcuRShlMikudmFsdWVzKCJldmVyeSIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygicmVsYXRlc1RvIiwgZTIubGFiZWwoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiQSIsIGcuRShlMikudmFsdWVzKHBhcnRpdGlvbikubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuVkVSVElDRVNfT05MWSkKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRXcml0ZVZlcnRpY2VzVG9NdWx0aXBsZVBhcnRpdGlvbnMoKSB7Ci0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5QUEgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc291cmNlQUEgPSBnLndpdGhTdHJhdGVnaWVzKHBhcnRpdGlvblN0cmF0ZWd5QUEpOwotCi0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5QkEgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJCIikucmVhZFBhcnRpdGlvbnMoIkEiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc291cmNlQkEgPSBnLndpdGhTdHJhdGVnaWVzKHBhcnRpdGlvblN0cmF0ZWd5QkEpOwotCi0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5QkIgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJCIikucmVhZFBhcnRpdGlvbnMoIkIiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc291cmNlQkIgPSBnLndpdGhTdHJhdGVnaWVzKHBhcnRpdGlvblN0cmF0ZWd5QkIpOwotCi0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5QkFCID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQiIpLnJlYWRQYXJ0aXRpb25zKCJBIiwgIkIiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc291cmNlQkFCID0gZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneUJBQik7Ci0KLQotICAgICAgICBmaW5hbCBWZXJ0ZXggdkEgPSBzb3VyY2VBQS5hZGRWKCkucHJvcGVydHkoImFueSIsICJhIikubmV4dCgpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdkIgPSBzb3VyY2VCQS5hZGRWKCkucHJvcGVydHkoImFueSIsICJiIikubmV4dCgpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwodkEpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImEiLCBnLlYodkEpLnZhbHVlcygiYW55IikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJBIiwgZy5WKHZBKS52YWx1ZXMocGFydGl0aW9uKS5uZXh0KCkpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwodkIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImIiLCBnLlYodkIpLnZhbHVlcygiYW55IikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJCIiwgZy5WKHZCKS52YWx1ZXMocGFydGl0aW9uKS5uZXh0KCkpOwotCi0gICAgICAgIHNvdXJjZUJBLlYoKS5mb3JFYWNoUmVtYWluaW5nKHYgLT4gYXNzZXJ0RXF1YWxzKCJhIiwgZy5WKHYpLnZhbHVlcygiYW55IikubmV4dCgpKSk7Ci0gICAgICAgIHNvdXJjZUJCLlYoKS5mb3JFYWNoUmVtYWluaW5nKHYgLT4gYXNzZXJ0RXF1YWxzKCJiIiwgZy5WKHYpLnZhbHVlcygiYW55IikubmV4dCgpKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDIpLCBzb3VyY2VCQUIuVigpLmNvdW50KCkubmV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnRTZXQoRmVhdHVyZVJlcXVpcmVtZW50U2V0LlBhY2thZ2UuVkVSVElDRVNfT05MWSkKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUaHJvd0V4Y2VwdGlvbk9uVkluRGlmZmVyZW50UGFydGl0aW9uKCkgewotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneUFBID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQSIpLnJlYWRQYXJ0aXRpb25zKCJBIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZUFBID0gZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneUFBKTsKLQotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneUEgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJBIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZUEgPSBnLndpdGhTdHJhdGVnaWVzKHBhcnRpdGlvblN0cmF0ZWd5QSk7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHZBID0gc291cmNlQUEuYWRkVigpLnByb3BlcnR5KCJhbnkiLCAiYSIpLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHZBLmlkKCksIHNvdXJjZUFBLlYodkEuaWQoKSkuaWQoKS5uZXh0KCkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzb3VyY2VBLlYodkEuaWQoKSkubmV4dCgpOwotICAgICAgICAgICAgZmFpbCgiVmVydGV4IHNob3VsZCBub3QgYmUgaW4gdGhpcyBwYXJ0aXRpb24iKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUaGF0KGV4LCBpbnN0YW5jZU9mKE5vU3VjaEVsZW1lbnRFeGNlcHRpb24uY2xhc3MpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5TSU1QTEUpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dFeGNlcHRpb25PbkVJbkRpZmZlcmVudFBhcnRpdGlvbigpIHsKLSAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgcGFydGl0aW9uU3RyYXRlZ3lBQSA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzb3VyY2VBQSA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3lBQSk7Ci0KLSAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgcGFydGl0aW9uU3RyYXRlZ3lBID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzb3VyY2VBID0gZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneUEpOwotCi0gICAgICAgIGZpbmFsIFZlcnRleCB2QSA9IHNvdXJjZUFBLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgImEiKS5uZXh0KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZSA9IHNvdXJjZUFBLndpdGhTaWRlRWZmZWN0KCJ2QSIsIHZBKS5WKHZBLmlkKCkpLmFkZEUoImtub3dzIikudG8oInZBIikubmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZS5pZCgpLCBnLkUoZS5pZCgpKS5pZCgpLm5leHQoKSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNvdXJjZUEuRShlLmlkKCkpLm5leHQoKTsKLSAgICAgICAgICAgIGZhaWwoIkVkZ2Ugc2hvdWxkIG5vdCBiZSBpbiB0aGlzIHBhcnRpdGlvbiIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhOb1N1Y2hFbGVtZW50RXhjZXB0aW9uLmNsYXNzLCBleC5nZXRDbGFzcygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudFNldChGZWF0dXJlUmVxdWlyZW1lbnRTZXQuUGFja2FnZS5TSU1QTEUpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkV3JpdGVUb011bHRpcGxlUGFydGl0aW9ucygpIHsKLSAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgcGFydGl0aW9uU3RyYXRlZ3lBQSA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkEiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzb3VyY2VBQSA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3lBQSk7Ci0KLSAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgcGFydGl0aW9uU3RyYXRlZ3lCQSA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkIiKS5yZWFkUGFydGl0aW9ucygiQSIpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzb3VyY2VCQSA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3lCQSk7Ci0KLSAgICAgICAgZmluYWwgUGFydGl0aW9uU3RyYXRlZ3kgcGFydGl0aW9uU3RyYXRlZ3lDQUIgPSBQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpCi0gICAgICAgICAgICAgICAgLnBhcnRpdGlvbktleShwYXJ0aXRpb24pLndyaXRlUGFydGl0aW9uKCJDIikucmVhZFBhcnRpdGlvbnMoIkEiLCJCIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZUNBQiA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3lDQUIpOwotCi0gICAgICAgIGZpbmFsIFBhcnRpdGlvblN0cmF0ZWd5IHBhcnRpdGlvblN0cmF0ZWd5QyA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkMiKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc291cmNlQyA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3lDKTsKLQotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneUNBID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQyIpLnJlYWRQYXJ0aXRpb25zKCJBIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZUNBID0gZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneUNBKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzb3VyY2VDQUJDID0gZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5jcmVhdGUobmV3IE1hcENvbmZpZ3VyYXRpb24obmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKLQotICAgICAgICAgICAgcHV0KFBhcnRpdGlvblN0cmF0ZWd5LldSSVRFX1BBUlRJVElPTiwgIkMiKTsKLSAgICAgICAgICAgIHB1dChQYXJ0aXRpb25TdHJhdGVneS5QQVJUSVRJT05fS0VZLCBwYXJ0aXRpb24pOwotICAgICAgICAgICAgcHV0KFBhcnRpdGlvblN0cmF0ZWd5LlJFQURfUEFSVElUSU9OUywgQXJyYXlzLmFzTGlzdCgiQSIsICJCIiwgIkMiKSk7Ci0gICAgICAgIH19KSkpOwotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneUNDID0gUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKQotICAgICAgICAgICAgICAgIC5wYXJ0aXRpb25LZXkocGFydGl0aW9uKS53cml0ZVBhcnRpdGlvbigiQyIpLnJlYWRQYXJ0aXRpb25zKCJDIikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZUNDID0gZy53aXRoU3RyYXRlZ2llcyhwYXJ0aXRpb25TdHJhdGVneUNDKTsKLQotICAgICAgICBmaW5hbCBQYXJ0aXRpb25TdHJhdGVneSBwYXJ0aXRpb25TdHJhdGVneUNCQyA9IFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAucGFydGl0aW9uS2V5KHBhcnRpdGlvbikud3JpdGVQYXJ0aXRpb24oIkMiKS5yZWFkUGFydGl0aW9ucyhBcnJheXMuYXNMaXN0KCJCIiwgIkMiKSkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNvdXJjZUNCQyA9IGcud2l0aFN0cmF0ZWdpZXMocGFydGl0aW9uU3RyYXRlZ3lDQkMpOwotCi0gICAgICAgIGZpbmFsIFZlcnRleCB2QSA9IHNvdXJjZUFBLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgImEiKS5uZXh0KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2QUEgPSBzb3VyY2VBQS5hZGRWKCkucHJvcGVydHkoImFueSIsICJhYSIpLm5leHQoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlQXRvQUEgPSBzb3VyY2VBQS53aXRoU2lkZUVmZmVjdCgidkFBIiwgdkFBKS5WKHZBLmlkKCkpLmFkZEUoImFUT2EiKS50bygidkFBIikubmV4dCgpOwotCi0gICAgICAgIGZpbmFsIFZlcnRleCB2QiA9IHNvdXJjZUJBLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgImIiKS5uZXh0KCk7Ci0gICAgICAgIHNvdXJjZUJBLndpdGhTaWRlRWZmZWN0KCJ2QiIsIHZCKS5WKHZBLmlkKCkpLmFkZEUoImFUT2IiKS50bygidkIiKS5uZXh0KCk7Ci0KLSAgICAgICAgZmluYWwgVmVydGV4IHZDID0gc291cmNlQ0FCLmFkZFYoKS5wcm9wZXJ0eSgiYW55IiwgImMiKS5uZXh0KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZUJ0b3ZDID0gc291cmNlQ0FCLndpdGhTaWRlRWZmZWN0KCJ2QyIsIHZDKS5WKHZCLmlkKCkpLmFkZEUoImJUT2MiKS50bygidkMiKS5uZXh0KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZUF0b3ZDID0gc291cmNlQ0FCLndpdGhTaWRlRWZmZWN0KCJ2QyIsIHZDKS5WKHZBLmlkKCkpLmFkZEUoImFUT2MiKS50bygidkMiKS5uZXh0KCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIEl0ZXJhdG9yVXRpbHMuY291bnQoc291cmNlQy5WKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIEl0ZXJhdG9yVXRpbHMuY291bnQoc291cmNlQy5FKCkpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMiksIHNvdXJjZUNBLlYoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZygxKSwgc291cmNlQ0EuRSgpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDEpLCBzb3VyY2VDQS5WKHZBLmlkKCkpLm91dEUoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlQXRvQUEuaWQoKSwgc291cmNlQ0EuVih2QS5pZCgpKS5vdXRFKCkubmV4dCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMSksIHNvdXJjZUNBLlYodkEuaWQoKSkub3V0KCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModkFBLmlkKCksIHNvdXJjZUNBLlYodkEuaWQoKSkub3V0KCkubmV4dCgpLmlkKCkpOwotCi0gICAgICAgIGZpbmFsIFZlcnRleCB2QTEgPSBzb3VyY2VDQS5WKHZBLmlkKCkpLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDEpLCBzb3VyY2VDQS5WKHZBMSkub3V0RSgpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVBdG9BQS5pZCgpLCBzb3VyY2VDQS5WKHZBMSkub3V0RSgpLm5leHQoKS5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDEpLCBzb3VyY2VDQS5WKHZBMSkub3V0KCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModkFBLmlkKCksIHNvdXJjZUNBLlYodkExKS5vdXQoKS5uZXh0KCkuaWQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDMpLCBzb3VyY2VDQUIuVigpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDIpLCBzb3VyY2VDQUIuRSgpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoNCksIHNvdXJjZUNBQkMuVigpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb25nKDQpLCBzb3VyY2VDQUJDLkUoKS5jb3VudCgpLm5leHQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoc291cmNlQ0MuVigpKSk7Ci0gICAgICAgIC8vIHR3byBlZGdlcyBhcmUgaW4gdGhlICJDIiBwYXJ0aXRpb24sIGJ1dCBvbmUgZWFjaCBvZiB0aGVpciBpbmNpZGVudCB2ZXJ0aWNlcyBhcmUgbm90Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBJdGVyYXRvclV0aWxzLmNvdW50KHNvdXJjZUNDLkUoKSkpOwotCi0gICAgICAgIC8vIHR3byBlZGdlcyBhcmUgaW4gdGhlICJDIiBwYXJ0aXRpb24sIGJ1dCBvbmUgZWFjaCBvZiB0aGVpciBpbmNpZGVudCB2ZXJ0aWNlcyBhcmUgbm90Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZygyKSwgc291cmNlQ0MuVih2Qy5pZCgpKS5pbkUoKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZygwKSwgc291cmNlQ0MuVih2Qy5pZCgpKS5pbigpLmNvdW50KCkubmV4dCgpKTsKLQotICAgICAgICAvLyBleGNsdWRlZCB2ZXJ0aWNlczsgdkEgaXMgbm90IGluIHtCLEN9Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9uZygyKSwgc291cmNlQ0JDLlYodkMuaWQoKSkuaW5FKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvbmcoMSksIHNvdXJjZUNCQy5WKHZDLmlkKCkpLmluKCkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModkMuaWQoKSwgc291cmNlQ0JDLkUoZUJ0b3ZDLmlkKCkpLmluVigpLmlkKCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHZCLmlkKCksIHNvdXJjZUNCQy5FKGVCdG92Qy5pZCgpKS5vdXRWKCkuaWQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModkMuaWQoKSwgc291cmNlQ0JDLkUoZUF0b3ZDLmlkKCkpLmluVigpLmlkKCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2Uoc291cmNlQ0JDLkUoZUF0b3ZDLmlkKCkpLm91dFYoKS5oYXNOZXh0KCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9TZWVkU3RyYXRlZ3lQcm9jZXNzVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1NlZWRTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYTY4MGMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1NlZWRTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5BYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuR3JlbWxpblByb2Nlc3NSdW5uZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlN1cHBsaWVyOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuR1JBVEVGVUw7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyLnNodWZmbGU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGUubG9jYWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi1AUnVuV2l0aChHcmVtbGluUHJvY2Vzc1J1bm5lci5jbGFzcykKLXB1YmxpYyBjbGFzcyBTZWVkU3RyYXRlZ3lQcm9jZXNzVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblByb2Nlc3NUZXN0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZWVkU3RyYXRlZ3kgc2VlZFN0cmF0ZWd5ID0gU2VlZFN0cmF0ZWd5LmJ1aWxkKCkuc2VlZCgxMjM0TCkuY3JlYXRlKCk7Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZWVkQ29pbigpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ1NlZWRlZCA9IGNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gbmFtZXMgPSBnU2VlZGVkLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikuY29pbigwLjMxKS5vcmRlcigpLnRvTGlzdCgpOwotICAgICAgICByZXBlYXRBc3NlcnQoKCkgLT4gewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG5hbWVzLCBnU2VlZGVkLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikuY29pbigwLjMxKS5vcmRlcigpLnRvTGlzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZWVkR2xvYmFsT3JkZXJTaHVmZmxlKCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnU2VlZGVkID0gY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBuYW1lcyA9IGdTZWVkZWQuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZXMoIm5hbWUiKS5vcmRlcigpLmJ5KHNodWZmbGUpLnRvTGlzdCgpOwotICAgICAgICByZXBlYXRBc3NlcnQoKCkgLT4gewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG5hbWVzLCBnU2VlZGVkLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikub3JkZXIoKS5ieShzaHVmZmxlKS50b0xpc3QoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VlZExvY2FsT3JkZXJTaHVmZmxlKCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnU2VlZGVkID0gY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiBuYW1lcyA9IGdTZWVkZWQuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZXMoIm5hbWUiKS5mb2xkKCkub3JkZXIobG9jYWwpLmJ5KHNodWZmbGUpLm5leHQoKTsKLSAgICAgICAgcmVwZWF0QXNzZXJ0KCgpIC0+IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhuYW1lcywgZ1NlZWRlZC5WKCkub3JkZXIoKS5ieSgibmFtZSIpLnZhbHVlcygibmFtZSIpLmZvbGQoKS5vcmRlcihsb2NhbCkuYnkoc2h1ZmZsZSkubmV4dCgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlZWRHbG9iYWxTYW1wbGUoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGdTZWVkZWQgPSBjcmVhdGUoKTsKLSAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IG5hbWVzID0gZ1NlZWRlZC5WKCkub3JkZXIoKS5ieSgibmFtZSIpLnZhbHVlcygibmFtZSIpLnNhbXBsZSgyMCkudG9MaXN0KCk7Ci0gICAgICAgIHJlcGVhdEFzc2VydCgoKSAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMobmFtZXMsIGdTZWVkZWQuVigpLm9yZGVyKCkuYnkoIm5hbWUiKS52YWx1ZXMoIm5hbWUiKS5zYW1wbGUoMjApLnRvTGlzdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKEdSQVRFRlVMKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlZWRMb2NhbFNhbXBsZSgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ1NlZWRlZCA9IGNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gbmFtZXMgPSBnU2VlZGVkLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikuZm9sZCgpLnNhbXBsZShsb2NhbCwyMCkubmV4dCgpOwotICAgICAgICByZXBlYXRBc3NlcnQoKCkgLT4gewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG5hbWVzLCBnU2VlZGVkLlYoKS5vcmRlcigpLmJ5KCJuYW1lIikudmFsdWVzKCJuYW1lIikuZm9sZCgpLnNhbXBsZShsb2NhbCwyMCkubmV4dCgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcmVwZWF0QXNzZXJ0KGZpbmFsIFN1cHBsaWVyPFZvaWQ+IGFzc2VydGlvbikgewotICAgICAgICBmb3IgKGludCBpeCA9IDA7IGl4IDwgMTI4OyBpeCsrKSB7Ci0gICAgICAgICAgICBhc3NlcnRpb24uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEdyYXBoVHJhdmVyc2FsU291cmNlIGNyZWF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIGcud2l0aFN0cmF0ZWdpZXMoc2VlZFN0cmF0ZWd5KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vU3ViZ3JhcGhTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vU3ViZ3JhcGhTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmMzc0YmIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1N1YmdyYXBoU3RyYXRlZ3lQcm9jZXNzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTc2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5NYXBDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLlByb2R1Y3RpdmVCeVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlJlbW90ZUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuVHJhdmVyc2FsRmlsdGVyU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JbmxpbmVGaWx0ZXJTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX0xQX09fUF9TX1NFX1NMX1RyYXZlcnNlckdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnRyYXZlcnNlci5CX09fVHJhdmVyc2VyR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuQ2xvc2VhYmxlSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eVZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZVZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5oYW1jcmVzdC5NYXRjaGVyczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLk5vU3VjaEVsZW1lbnRFeGNlcHRpb247Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5DUkVXOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTjsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uYm90aEU7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmNvbnN0YW50OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmhhc05vdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ub3V0OwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5vdXRFOwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jc0NvbGxlY3Rpb25Db250YWluaW5nLmhhc0l0ZW1zOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc3VtZS5hc3N1bWVUaGF0OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgU3ViZ3JhcGhTdHJhdGVneVByb2Nlc3NUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkRmlsdGVyVmVydGV4Q3JpdGVyaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsID8+IHZlcnRleENyaXRlcmlvbiA9IGhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc2cgPSBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyh2ZXJ0ZXhDcml0ZXJpb24pLmNyZWF0ZSgpKTsKLQotICAgICAgICAvLyB0aHJlZSB2ZXJ0aWNlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHN1YmdyYXBoCi0gICAgICAgIGFzc2VydEVxdWFscyg2LCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBzZy5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIG9ubHkgdHdvIGVkZ2VzIGFyZSBwcmVzZW50LCBldmVuIHRob3VnaCBlZGdlcyBhcmUgbm90IGV4cGxpY2l0bHkgZXhjbHVkZWQKLSAgICAgICAgLy8gKGVkZ2VzIHJlcXVpcmUgdGhlaXIgaW5jaWRlbnQgdmVydGljZXMpCi0gICAgICAgIGFzc2VydEVxdWFscyg2LCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIGZyb20gdmVydGV4Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXRFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXRFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0KCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aCgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aCgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyB3aXRoIGxhYmVsCi0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXRFKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXRFKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0KCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW5FKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW5FKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbigia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aCgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gd2l0aCBsYWJlbCBhbmQgYnJhbmNoIGZhY3RvcgotCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwob3V0RSgiY3JlYXRlZCIpLmxpbWl0KDEpKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKG91dEUoImNyZWF0ZWQiKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKG91dEUoImNyZWF0ZWQiKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5sb2NhbChvdXRFKCJjcmVhdGVkIikubGltaXQoMSkpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5sb2NhbChib3RoRSgiY3JlYXRlZCIpLmxpbWl0KDEpKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCJjcmVhdGVkIikubGltaXQoMSkpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyBmcm9tIGVkZ2UKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5FKGNvbnZlcnRUb0VkZ2VJZCgiam9zaCIsICJjcmVhdGVkIiwgImxvcCIpKS5ib3RoVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLkUoY29udmVydFRvRWRnZUlkKCJqb3NoIiwgImNyZWF0ZWQiLCAibG9wIikpLmJvdGhWKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLkUoY29udmVydFRvRWRnZUlkKCJwZXRlciIsICJjcmVhdGVkIiwgImxvcCIpKS5ib3RoVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNnLkUoY29udmVydFRvRWRnZUlkKCJwZXRlciIsICJjcmVhdGVkIiwgImxvcCIpKS5uZXh0KCk7Ci0gICAgICAgICAgICBmYWlsKCJFZGdlIDEyIHNob3VsZCBub3QgYmUgaW4gdGhlIGdyYXBoIGJlY2F1c2UgcGV0ZXIgaXMgbm90IGEgdmVydGV4Iik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShleCBpbnN0YW5jZW9mIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuRShjb252ZXJ0VG9FZGdlSWQoIm1hcmtvIiwgImtub3dzIiwgInZhZGFzIikpLmJvdGhWKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgc2cuRShjb252ZXJ0VG9FZGdlSWQoIm1hcmtvIiwgImtub3dzIiwgInZhZGFzIikpLm5leHQoKTsKLSAgICAgICAgICAgIGZhaWwoIkVkZ2UgNyBzaG91bGQgbm90IGJlIGluIHRoZSBncmFwaCBiZWNhdXNlIG1hcmtvIGlzIG5vdCBhIHZlcnRleCIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUoZXggaW5zdGFuY2VvZiBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZpbHRlckVkZ2VDcml0ZXJpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPEVkZ2UsID8+IGVkZ2VDcml0ZXJpb24gPSBfXy5vcigKLSAgICAgICAgICAgICAgICBoYXMoIndlaWdodCIsIDEuMGQpLmhhc0xhYmVsKCJrbm93cyIpLCAvLyA4Ci0gICAgICAgICAgICAgICAgaGFzKCJ3ZWlnaHQiLCAwLjRkKS5oYXNMYWJlbCgiY3JlYXRlZCIpLm91dFYoKS5oYXMoIm5hbWUiLCAibWFya28iKSwgLy8gOQotICAgICAgICAgICAgICAgIGhhcygid2VpZ2h0IiwgMS4wZCkuaGFzTGFiZWwoImNyZWF0ZWQiKSAvLyAxMAotICAgICAgICApOwotCi0gICAgICAgIGZpbmFsIFN1YmdyYXBoU3RyYXRlZ3kgc3RyYXRlZ3kgPSBTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuZWRnZXMoZWRnZUNyaXRlcmlvbikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNnID0gZy53aXRoU3RyYXRlZ2llcyhzdHJhdGVneSk7Ci0KLSAgICAgICAgLy8gYWxsIHZlcnRpY2VzIGFyZSBoZXJlCi0gICAgICAgIGFzc2VydEVxdWFscyg2LCBnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbCB0ID0gc2cuVigpOwotICAgICAgICB0Lmhhc05leHQoKTsKLSAgICAgICAgcHJpbnRUcmF2ZXJzYWxGb3JtKHQpOwotICAgICAgICBDbG9zZWFibGVJdGVyYXRvci5jbG9zZUl0ZXJhdG9yKHQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgc2cuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyBvbmx5IHRoZSBnaXZlbiBlZGdlcyBhcmUgaW5jbHVkZWQKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGcuRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHNnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSkub3V0RSgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKS5vdXRFKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyB3cmFwcGVkIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdGFrZXMgaW50byBhY2NvdW50IHRoZSBlZGdlcyBpdCBtdXN0IHBhc3MgdGhyb3VnaAotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKS5vdXQoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgibWFya28iKSkub3V0KCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyBmcm9tIHZlcnRleAotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0RSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0RSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXQoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIHdpdGggbGFiZWwKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0KCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbkUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbkUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW4oImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyB3aXRoIGJyYW5jaCBmYWN0b3IKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxpbWl0KDEpLmxvY2FsKGJvdGhFKCkubGltaXQoMSkpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubGltaXQoMSkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxpbWl0KDEpLmxvY2FsKGJvdGhFKCkubGltaXQoMSkpLmluVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubGltaXQoMSkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkuaW5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCJrbm93cyIsICJjcmVhdGVkIikubGltaXQoMSkpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCJrbm93cyIsICJjcmVhdGVkIikubGltaXQoMSkpLmluVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkuaW5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIGZyb20gZWRnZQotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLkUoY29udmVydFRvRWRnZUlkKCJtYXJrbyIsICJrbm93cyIsICJqb3NoIikpLmJvdGhWKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuRShjb252ZXJ0VG9FZGdlSWQoIm1hcmtvIiwgImtub3dzIiwgImpvc2giKSkuYm90aFYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGcuRShjb252ZXJ0VG9FZGdlSWQoIm1hcmtvIiwgImtub3dzIiwgImpvc2giKSkub3V0VigpLm91dEUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5FKGNvbnZlcnRUb0VkZ2VJZCgibWFya28iLCAia25vd3MiLCAiam9zaCIpKS5vdXRWKCkub3V0RSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGaWx0ZXJDb21wbGV4VmVydGV4Q3JpdGVyaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJ2YWRhcyIsICJqb3NoIiksIGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLjxWZXJ0ZXg+aW4oImtub3dzIikuaGFzKCJuYW1lIiwgIm1hcmtvIikpLmNyZWF0ZSgpKS4KLSAgICAgICAgICAgICAgICBWKCkudmFsdWVzKCJuYW1lIikpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgidmFkYXMiLCAiam9zaCIsICJsb3AiKSwgZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uPFZlcnRleD5pbigpLmhhcygibmFtZSIsICJtYXJrbyIpKS5jcmVhdGUoKSkuCi0gICAgICAgICAgICAgICAgVigpLnZhbHVlcygibmFtZSIpKTsKLQotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgidmFkYXMiLCAiam9zaCIpLCBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy48VmVydGV4PmluKCJrbm93cyIpLndoZXJlKG91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSkpLmNyZWF0ZSgpKS4KLSAgICAgICAgICAgICAgICBWKCkudmFsdWVzKCJuYW1lIikpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgidmFkYXMiLCAiam9zaCIsICJsb3AiKSwgZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uPFZlcnRleD5pbigpLndoZXJlKGhhcygibmFtZSIsICJtYXJrbyIpLm91dCgiY3JlYXRlZCIpLmhhcygibmFtZSIsICJsb3AiKSkpLmNyZWF0ZSgpKS4KLSAgICAgICAgICAgICAgICBWKCkudmFsdWVzKCJuYW1lIikpOwotCi0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJtYXJrbyIsICJ2YWRhcyIsICJqb3NoIiwgImxvcCIpLCBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5vcihib3RoKCkuaGFzKCJuYW1lIiwgIm1hcmtvIiksIGhhcygibmFtZSIsICJtYXJrbyIpKSkuY3JlYXRlKCkpLgotICAgICAgICAgICAgICAgIFYoKS53aGVyZShib3RoRSgpLmNvdW50KCkuaXMoUC5uZXEoMCkpKS52YWx1ZXMoIm5hbWUiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkRmlsdGVyTWl4ZWRDcml0ZXJpYUJ1dE5vdENoZWNrQWRqYWNlbnRWZXJ0aWNlcygpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgPz4gdmVydGV4Q3JpdGVyaW9uID0gaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKTsKLQotICAgICAgICAvLyA5IGlzbid0IHByZXNlbnQgYmVjYXVzZSBtYXJrbyBpcyBub3QgaW4gdGhlIHZlcnRleCBsaXN0Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxFZGdlLCA/PiBlZGdlQ3JpdGVyaW9uID0gX18ub3IoCi0gICAgICAgICAgICAgICAgaGFzKCJ3ZWlnaHQiLCAwLjRkKS5oYXNMYWJlbCgiY3JlYXRlZCIpLCAvLyAxMQotICAgICAgICAgICAgICAgIGhhcygid2VpZ2h0IiwgMS4wZCkuaGFzTGFiZWwoImNyZWF0ZWQiKSAvLyAxMAotICAgICAgICApOwotCi0gICAgICAgIGZpbmFsIFN1YmdyYXBoU3RyYXRlZ3kgc3RyYXRlZ3kgPSBTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuCi0gICAgICAgICAgICAgICAgY2hlY2tBZGphY2VudFZlcnRpY2VzKGZhbHNlKS4KLSAgICAgICAgICAgICAgICBlZGdlcyhlZGdlQ3JpdGVyaW9uKS52ZXJ0aWNlcyh2ZXJ0ZXhDcml0ZXJpb24pLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzZyA9IGcud2l0aFN0cmF0ZWdpZXMoc3RyYXRlZ3kpOwotCi0gICAgICAgIC8vIHRocmVlIHZlcnRpY2VzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc3ViZ3JhcGgKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGcuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHNnLlYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gdGhyZWUgZWRnZXMgYXJlIGV4cGxpY2l0bHkgaW5jbHVkZWQgYXMgd2UgaWdub3JlIGNoZWNraW5nIG9mIGFkamFjZW50IHZlcnRpY2VzCi0gICAgICAgIGFzc2VydEVxdWFscyg2LCBnLkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBzZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIGZyb20gdmVydGV4Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXRFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXRFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0KCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbkUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW4oKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygzLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gbWFya28gbm90IHByZXNlbnQgZGlyZWN0bHkgYmVjYXVzZSBvZiB2ZXJ0ZXhDcml0ZXJpb24gLSBvbmx5IGFjY2Vzc2libGUgdmlhIHZlcnRpY2VzIGluIHRoZSBzdWJncmFwaAotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJtYXJrbyIpKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gd2l0aCBsYWJlbAotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0RSgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0RSgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aCgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aCgiY3JlYXRlZCIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluRSgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluRSgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW4oImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbigia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aCgia25vd3MiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIHdpdGggYnJhbmNoIGZhY3RvcgotCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5sb2NhbChib3RoRSgpLmxpbWl0KDEpKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkuaW5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5sb2NhbChib3RoRSgpLmxpbWl0KDEpKS5pblYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5sb2NhbChib3RoRSgia25vd3MiLCAiY3JlYXRlZCIpLmxpbWl0KDEpKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkuaW5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5sb2NhbChib3RoRSgia25vd3MiLCAiY3JlYXRlZCIpLmxpbWl0KDEpKS5pblYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgLy8gZnJvbSBlZGdlCi0KLSAgICAgICAgLy8gbWFya28gaXMgbm90IGFjY2Vzc2libGUgZnJvbSB0aGUgZWRnZQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5FKGNvbnZlcnRUb0VkZ2VJZCgibWFya28iLCAiY3JlYXRlZCIsICJsb3AiKSkuYm90aFYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBzZy5FKGNvbnZlcnRUb0VkZ2VJZCgibWFya28iLCAiY3JlYXRlZCIsICJsb3AiKSkuYm90aFYoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgfQotCi0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGaWx0ZXJNaXhlZENyaXRlcmlhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsID8+IHZlcnRleENyaXRlcmlvbiA9IGhhcygibmFtZSIsIFAud2l0aGluKCJqb3NoIiwgImxvcCIsICJyaXBwbGUiKSk7Ci0KLSAgICAgICAgLy8gOSBpc24ndCBwcmVzZW50IGJlY2F1c2UgbWFya28gaXMgbm90IGluIHRoZSB2ZXJ0ZXggbGlzdAotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgPz4gZWRnZUNyaXRlcmlvbiA9IF9fLm9yKAotICAgICAgICAgICAgICAgIGhhcygid2VpZ2h0IiwgMC40ZCkuaGFzTGFiZWwoImNyZWF0ZWQiKSwgLy8gMTEKLSAgICAgICAgICAgICAgICBoYXMoIndlaWdodCIsIDEuMGQpLmhhc0xhYmVsKCJjcmVhdGVkIikgLy8gMTAKLSAgICAgICAgKTsKLQotICAgICAgICBmaW5hbCBTdWJncmFwaFN0cmF0ZWd5IHN0cmF0ZWd5ID0gU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKGVkZ2VDcml0ZXJpb24pLnZlcnRpY2VzKHZlcnRleENyaXRlcmlvbikuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNnID0gZy53aXRoU3RyYXRlZ2llcyhzdHJhdGVneSk7Ci0KLSAgICAgICAgLy8gdGhyZWUgdmVydGljZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBzdWJncmFwaAotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgZy5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgc2cuVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyB0aHJlZSBlZGdlcyBhcmUgZXhwbGljaXRseSBpbmNsdWRlZCwgYnV0IG9uZSBpcyBtaXNzaW5nIGl0cyBvdXQtdmVydGV4IGR1ZSB0byB0aGUgdmVydGV4IGNyaXRlcmlvbgotICAgICAgICBhc3NlcnRFcXVhbHMoNiwgZy5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyBmcm9tIHZlcnRleAotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0RSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0RSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXQoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dCgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW5FKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoRSgpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIHdpdGggbGFiZWwKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLm91dEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkub3V0KCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5vdXQoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCJjcmVhdGVkIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBzZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImNyZWF0ZWQiKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGcuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbkUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5pbkUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmluKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuaW4oImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGhFKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkuYm90aEUoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmJvdGgoImtub3dzIikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgc2cuVihjb252ZXJ0VG9WZXJ0ZXhJZCgiam9zaCIpKS5ib3RoKCJrbm93cyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLQotICAgICAgICAvLyB3aXRoIGJyYW5jaCBmYWN0b3IKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCkubGltaXQoMSkpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCkubGltaXQoMSkpLmluVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoKS5saW1pdCgxKSkuaW5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCJrbm93cyIsICJjcmVhdGVkIikubGltaXQoMSkpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZy5WKGNvbnZlcnRUb1ZlcnRleElkKCJqb3NoIikpLmxvY2FsKGJvdGhFKCJrbm93cyIsICJjcmVhdGVkIikubGltaXQoMSkpLmluVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHNnLlYoY29udmVydFRvVmVydGV4SWQoImpvc2giKSkubG9jYWwoYm90aEUoImtub3dzIiwgImNyZWF0ZWQiKS5saW1pdCgxKSkuaW5WKCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIC8vIGZyb20gZWRnZQotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBnLkUoY29udmVydFRvRWRnZUlkKCJtYXJrbyIsICJjcmVhdGVkIiwgImxvcCIpKS5ib3RoVigpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNnLkUoY29udmVydFRvRWRnZUlkKCJtYXJrbyIsICJjcmVhdGVkIiwgImxvcCIpKS5uZXh0KCk7Ci0gICAgICAgICAgICBmYWlsKCJFZGdlIDkgc2hvdWxkIG5vdCBiZSBpbiB0aGUgZ3JhcGggYmVjYXVzZSBtYXJrbyBpcyBub3QgYSB2ZXJ0ZXgiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGV4IGluc3RhbmNlb2YgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKE1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGaWx0ZXJWZXJ0ZXhDcml0ZXJpb25BbmRLZWVwTGFiZWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRoaXMgd2lsbCBleGNsdWRlICJwZXRlciIKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgPz4gdmVydGV4Q3JpdGVyaW9uID0gaGFzKCJuYW1lIiwgUC53aXRoaW4oInJpcHBsZSIsICJqb3NoIiwgIm1hcmtvIikpOwotCi0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIHNnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXModmVydGV4Q3JpdGVyaW9uKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDksIGcuVigpLmFzKCJhIikub3V0KCkuaW4oKS5hcygiYiIpLmRlZHVwKCJhIiwgImIiKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHNnLlYoKS5hcygiYSIpLm91dCgpLmluKCkuYXMoImIiKS5kZWR1cCgiYSIsICJiIikuY291bnQoKS5uZXh0KCkuaW50VmFsdWUoKSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGxpc3QgPSBzZy5WKCkuYXMoImEiKS5vdXQoKS5pbigpLmFzKCJiIikuZGVkdXAoImEiLCAiYiIpLnZhbHVlcygibmFtZSIpLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnRUaGF0KGxpc3QsIGhhc0l0ZW1zKCJtYXJrbyIsICJqb3NoIikpOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gTm9TdWNoRWxlbWVudEV4Y2VwdGlvbi5jbGFzcykKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkR2V0RXhjbHVkZWRWZXJ0ZXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsPFZlcnRleCwgPz4gdmVydGV4Q3JpdGVyaW9uID0gaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKTsKLQotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBzZyA9IGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKHZlcnRleENyaXRlcmlvbikuY3JlYXRlKCkpOwotCi0gICAgICAgIHNnLlYoY29udmVydFRvVmVydGV4SWQoIm1hcmtvIikpLm5leHQoKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24uY2xhc3MpCi0gICAgQExvYWRHcmFwaFdpdGgoTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEdldEV4Y2x1ZGVkRWRnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUcmF2ZXJzYWw8RWRnZSwgPz4gZWRnZUNyaXRlcmlvbiA9IF9fLm9yKAotICAgICAgICAgICAgICAgIGhhcygid2VpZ2h0IiwgMS4wZCkuaGFzTGFiZWwoImtub3dzIiksIC8vIDgKLSAgICAgICAgICAgICAgICBoYXMoIndlaWdodCIsIDAuNGQpLmhhc0xhYmVsKCJjcmVhdGVkIikub3V0VigpLmhhcygibmFtZSIsICJtYXJrbyIpLCAvLyA5Ci0gICAgICAgICAgICAgICAgaGFzKCJ3ZWlnaHQiLCAxLjBkKS5oYXNMYWJlbCgiY3JlYXRlZCIpIC8vIDEwCi0gICAgICAgICk7Ci0KLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc2cgPSBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhlZGdlQ3JpdGVyaW9uKS5jcmVhdGUoKSk7Ci0KLSAgICAgICAgc2cuRShzZy5FKGNvbnZlcnRUb0VkZ2VJZCgibWFya28iLCAia25vd3MiLCAidmFkYXMiKSkubmV4dCgpKS5uZXh0KCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChDUkVXKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEZpbHRlclZlcnRleFByb3BlcnRpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgR3JhcGhUcmF2ZXJzYWxTb3VyY2Ugc2cgPSBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuY3JlYXRlKG5ldyBNYXBDb25maWd1cmF0aW9uKG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoU3ViZ3JhcGhTdHJhdGVneS5WRVJURVhfUFJPUEVSVElFUywgaGFzKCJzdGFydFRpbWUiLCBQLmd0KDIwMDUpKSk7Ci0gICAgICAgIH19KSkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgicHVyY2VsbHZpbGxlIiwgImJhbHRpbW9yZSIsICJvYWtsYW5kIiwgInNlYXR0bGUiLCAiYWFjaGVuIiksIHNnLlYoKS5wcm9wZXJ0aWVzKCJsb2NhdGlvbiIpLnZhbHVlKCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgicHVyY2VsbHZpbGxlIiwgImJhbHRpbW9yZSIsICJvYWtsYW5kIiwgInNlYXR0bGUiLCAiYWFjaGVuIiksIHNnLlYoKS52YWx1ZXMoImxvY2F0aW9uIikpOwotICAgICAgICBpZiAoc2cuZ2V0U3RyYXRlZ2llcygpLmdldFN0cmF0ZWd5KElubGluZUZpbHRlclN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKFRyYXZlcnNhbEhlbHBlci5oYXNTdGVwT2ZBc3NpZ25hYmxlQ2xhc3NSZWN1cnNpdmVseShUcmF2ZXJzYWxGaWx0ZXJTdGVwLmNsYXNzLCBzZy5WKCkucHJvcGVydGllcygibG9jYXRpb24iKS52YWx1ZSgpLml0ZXJhdGUoKS5hc0FkbWluKCkpKTsKLSAgICAgICAgLy8gY2hlY2sgdG8gbWFrZSBzdXJlIGVkZ2UgcHJvcGVydGllcyBhcmUgbm90IGFuYWx5emVkCi0gICAgICAgIHNnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGV4UHJvcGVydGllcyhoYXMoInN0YXJ0VGltZSIsIFAuZ3QoMjAwNSkpKS5jcmVhdGUoKSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJwdXJjZWxsdmlsbGUiLCAiYmFsdGltb3JlIiwgIm9ha2xhbmQiLCAic2VhdHRsZSIsICJhYWNoZW4iKSwgc2cuVigpLmFzKCJhIikucHJvcGVydGllcygibG9jYXRpb24iKS5hcygiYiIpLnNlbGVjdCgiYSIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KCJiIikudmFsdWUoKS5kZWR1cCgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoInB1cmNlbGx2aWxsZSIsICJiYWx0aW1vcmUiLCAib2FrbGFuZCIsICJzZWF0dGxlIiwgImFhY2hlbiIpLCBzZy5WKCkuYXMoImEiKS52YWx1ZXMoImxvY2F0aW9uIikuYXMoImIiKS5zZWxlY3QoImEiKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdCgiYiIpLmRlZHVwKCkpOwotICAgICAgICBpZiAoc2cuZ2V0U3RyYXRlZ2llcygpLmdldFN0cmF0ZWd5KElubGluZUZpbHRlclN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKFRyYXZlcnNhbEhlbHBlci5oYXNTdGVwT2ZBc3NpZ25hYmxlQ2xhc3NSZWN1cnNpdmVseShUcmF2ZXJzYWxGaWx0ZXJTdGVwLmNsYXNzLCBzZy5WKCkuYXMoImEiKS52YWx1ZXMoImxvY2F0aW9uIikuYXMoImIiKS5zZWxlY3QoImEiKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdCgiYiIpLmRlZHVwKCkuaXRlcmF0ZSgpLmFzQWRtaW4oKSkpOwotICAgICAgICAvLwotICAgICAgICBzZyA9IGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKGhhcygibmFtZSIsIFAubmVxKCJzdGVwaGVuIikpKS52ZXJ0ZXhQcm9wZXJ0aWVzKGhhcygic3RhcnRUaW1lIiwgUC5ndCgyMDA1KSkpLmNyZWF0ZSgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImJhbHRpbW9yZSIsICJvYWtsYW5kIiwgInNlYXR0bGUiLCAiYWFjaGVuIiksIHNnLlYoKS5wcm9wZXJ0aWVzKCJsb2NhdGlvbiIpLnZhbHVlKCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgiYmFsdGltb3JlIiwgIm9ha2xhbmQiLCAic2VhdHRsZSIsICJhYWNoZW4iKSwgc2cuVigpLnZhbHVlcygibG9jYXRpb24iKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIHNnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoaGFzKCJuYW1lIiwgUC5ub3QoUC53aXRoaW4oInN0ZXBoZW4iLCAiZGFuaWVsIikpKSkudmVydGV4UHJvcGVydGllcyhoYXMoInN0YXJ0VGltZSIsIFAuZ3QoMjAwNSkpKS5jcmVhdGUoKSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KCJiYWx0aW1vcmUiLCAib2FrbGFuZCIsICJzZWF0dGxlIiksIHNnLlYoKS5wcm9wZXJ0aWVzKCJsb2NhdGlvbiIpLnZhbHVlKCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgiYmFsdGltb3JlIiwgIm9ha2xhbmQiLCAic2VhdHRsZSIpLCBzZy5WKCkudmFsdWVzKCJsb2NhdGlvbiIpKTsKLSAgICAgICAgLy8KLSAgICAgICAgc2cgPSBnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhoYXMoIm5hbWUiLCBQLmVxKCJtYXR0aGlhcyIpKSkudmVydGV4UHJvcGVydGllcyhoYXMoInN0YXJ0VGltZSIsIFAuZ3RlKDIwMTQpKSkuY3JlYXRlKCkpOwotICAgICAgICBjaGVja1Jlc3VsdHMobWFrZU1hcExpc3QoMSwgInNlYXR0bGUiLCAxTCksIHNnLlYoKS5ncm91cENvdW50KCkuYnkoImxvY2F0aW9uIikpOwotICAgICAgICAvLwotICAgICAgICBzZyA9IGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKGhhcygibG9jYXRpb24iKSkudmVydGV4UHJvcGVydGllcyhoYXNOb3QoImVuZFRpbWUiKSkuY3JlYXRlKCkpOwotICAgICAgICBjaGVja09yZGVyZWRSZXN1bHRzKEFycmF5cy5hc0xpc3QoImFhY2hlbiIsICJwdXJjZWxsdmlsbGUiLCAic2FudGEgZmUiLCAic2VhdHRsZSIpLCBzZy5WKCkub3JkZXIoKS5ieSgibG9jYXRpb24iLCBPcmRlci5hc2MpLnZhbHVlcygibG9jYXRpb24iKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIHNnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNyZWF0ZShuZXcgTWFwQ29uZmlndXJhdGlvbihuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KFN1YmdyYXBoU3RyYXRlZ3kuVkVSVElDRVMsIGhhcygibG9jYXRpb24iKSk7Ci0gICAgICAgICAgICBwdXQoU3ViZ3JhcGhTdHJhdGVneS5WRVJURVhfUFJPUEVSVElFUywgaGFzTm90KCJlbmRUaW1lIikpOwotICAgICAgICB9fSkpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImFhY2hlbiIsICJwdXJjZWxsdmlsbGUiLCAic2FudGEgZmUiLCAic2VhdHRsZSIpLCBzZy5WKCkudmFsdWVNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnVuZm9sZCgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImFhY2hlbiIsICJwdXJjZWxsdmlsbGUiLCAic2FudGEgZmUiLCAic2VhdHRsZSIpLCBzZy5WKCkucHJvcGVydHlNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnVuZm9sZCgpLnZhbHVlKCkpOwotICAgICAgICAvLwotICAgICAgICBzZyA9IGcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLjxFZGdlPmhhc0xhYmVsKCJ1c2VzIikuaGFzKCJza2lsbCIsIDUpKS5jcmVhdGUoKSk7Ci0gICAgICAgIGNoZWNrUmVzdWx0cyhBcnJheXMuYXNMaXN0KDUsIDUsIDUpLCBzZy5WKCkub3V0RSgpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoNSwgNSwgNSksIHNnLlYoKS5vdXRFKCkucHJvcGVydHlNYXAoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkudmFsdWUoKSk7Ci0gICAgICAgIC8vCi0gICAgICAgIHNnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGV4UHJvcGVydGllcyhoYXNOb3QoInNraWxsIikpLmNyZWF0ZSgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMywgMywgMywgNCwgNCwgNSwgNSwgNSksIHNnLlYoKS5vdXRFKCJ1c2VzIikudmFsdWVzKCJza2lsbCIpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoMywgMywgMywgNCwgNCwgNSwgNSwgNSksIHNnLlYoKS5hcygiYSIpLnByb3BlcnRpZXMoKS5zZWxlY3QoImEiKS5kZWR1cCgpLm91dEUoKS52YWx1ZXMoInNraWxsIikpOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgzLCAzLCAzLCA0LCA0LCA1LCA1LCA1KSwgc2cuVigpLmFzKCJhIikucHJvcGVydGllcygpLnNlbGVjdCgiYSIpLmRlZHVwKCkub3V0RSgpLnByb3BlcnRpZXMoInNraWxsIikuYXMoImIiKS5pZGVudGl0eSgpLnNlbGVjdCgiYiIpLmJ5KF9fLnZhbHVlKCkpKTsKLSAgICAgICAgLy8KLQotICAgICAgICAvLyB0ZXN0aW5nIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGtleSBzcGVjaWZpZWQgaXMgbm90IHByZXNlbnQgZm9yIHRoZSB2ZXJ0aWNlcyAtIFRJTktFUlBPUC0yOTIwIHVzZSBvZgotICAgICAgICAvLyBjb25zdGFudCh0cnVlKSBoZXJlIGlzIHNvcnRhIHdlaXJkIGJlY2F1c2UgYSBUcmF2ZXJzYWw8PyxWZXJ0ZXhQcm9wZXJ0eT4gaXMgZXhwZWN0ZWQsIGJ1dCBub3QgcmVhbGx5Ci0gICAgICAgIHNnID0gZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmNyZWF0ZShuZXcgTWFwQ29uZmlndXJhdGlvbihuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KFN1YmdyYXBoU3RyYXRlZ3kuVkVSVEVYX1BST1BFUlRJRVMsIGNvbnN0YW50KHRydWUpKTsKLSAgICAgICAgfX0pKSk7Ci0gICAgICAgIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gbCA9IHNnLlYoKS5wcm9qZWN0KCJleGFtcGxlIikuYnkoImV4YW1wbGUiKS50b0xpc3QoKTsKLSAgICAgICAgbC5mb3JFYWNoKG1hcCAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbWFwLnNpemUoKSk7Ci0gICAgICAgIH0pOwotICAgICAgICBjaGVja1Jlc3VsdHMoQXJyYXlzLmFzTGlzdCgiYWFjaGVuIiwiYmFsdGltb3JlIiwiYnJlbWVuIiwiYnJ1c3NlbHMiLCJjZW50cmV2aWxsZSIsImR1bGxlcyIsImthaXNlcnNsYXV0ZXJuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJvYWtsYW5kIiwicHVyY2VsbHZpbGxlIiwic2FuIGRpZWdvIiwic2FudGEgY3J1eiIsInNhbnRhIGZlIiwic2VhdHRsZSIsInNwcmVtYmVyZyIpLAotICAgICAgICAgICAgICAgIHNnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5LmNsYXNzKS5WKCkudmFsdWVNYXAoImxvY2F0aW9uIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnVuZm9sZCgpKTsKLSAgICAgICAgY2hlY2tSZXN1bHRzKEFycmF5cy5hc0xpc3QoImFhY2hlbiIsImJhbHRpbW9yZSIsImJyZW1lbiIsImJydXNzZWxzIiwiY2VudHJldmlsbGUiLCJkdWxsZXMiLCJrYWlzZXJzbGF1dGVybiIsCi0gICAgICAgICAgICAgICAgIm9ha2xhbmQiLCJwdXJjZWxsdmlsbGUiLCJzYW4gZGllZ28iLCJzYW50YSBjcnV6Iiwic2FudGEgZmUiLCJzZWF0dGxlIiwic3ByZW1iZXJnIiksCi0gICAgICAgICAgICAgICAgc2cuVigpLnZhbHVlTWFwKCJsb2NhdGlvbiIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkR2VuZXJhdGVDb3JyZWN0VHJhdmVyc2VycygpIHRocm93cyBFeGNlcHRpb24gewotCi0gICAgICAgIGFzc3VtZVRoYXQoZ3JhcGgsIE1hdGNoZXJzLm5vdChNYXRjaGVycy5pbnN0YW5jZU9mKFJlbW90ZUdyYXBoLmNsYXNzKSkpOwotCi0gICAgICAgIEdyYXBoVHJhdmVyc2FsU291cmNlIHNnOwotICAgICAgICBHcmFwaFRyYXZlcnNhbC5BZG1pbiB0cmF2ZXJzYWw7Ci0gICAgICAgIFN1YmdyYXBoU3RyYXRlZ3kgc3RyYXRlZ3k7Ci0KLSAgICAgICAgc3RyYXRlZ3kgPSBTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoaGFzKCJuYW1lIiwgUC53aXRoaW4oImpvc2giLCAibG9wIiwgInJpcHBsZSIpKSkuY3JlYXRlKCk7Ci0gICAgICAgIHNnID0gZy53aXRoU3RyYXRlZ2llcyhzdHJhdGVneSk7Ci0KLSAgICAgICAgdHJhdmVyc2FsID0gc2cuVigpLm91dEUoKS5pdGVyYXRlKCkuYXNBZG1pbigpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEJfT19UcmF2ZXJzZXJHZW5lcmF0b3IpOwotICAgICAgICB0cmF2ZXJzYWwgPSBzZy5WKCkub3V0RSgpLmluVigpLml0ZXJhdGUoKS5hc0FkbWluKCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmdldFRyYXZlcnNlckdlbmVyYXRvcigpIGluc3RhbmNlb2YgQl9PX1RyYXZlcnNlckdlbmVyYXRvcik7Ci0gICAgICAgIHRyYXZlcnNhbCA9IHNnLlYoKS5vdXQoKS5pdGVyYXRlKCkuYXNBZG1pbigpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEJfT19UcmF2ZXJzZXJHZW5lcmF0b3IpOwotCi0gICAgICAgIHRyYXZlcnNhbCA9IHNnLlYoKS5ib3RoRSgpLml0ZXJhdGUoKS5hc0FkbWluKCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmdldFRyYXZlcnNlckdlbmVyYXRvcigpIGluc3RhbmNlb2YgQl9MUF9PX1BfU19TRV9TTF9UcmF2ZXJzZXJHZW5lcmF0b3IpOwotICAgICAgICB0cmF2ZXJzYWwgPSBzZy5WKCkuYm90aEUoKS5vdGhlclYoKS5pdGVyYXRlKCkuYXNBZG1pbigpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEJfTFBfT19QX1NfU0VfU0xfVHJhdmVyc2VyR2VuZXJhdG9yKTsKLSAgICAgICAgdHJhdmVyc2FsID0gc2cuVigpLmJvdGgoKS5pdGVyYXRlKCkuYXNBZG1pbigpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEJfT19UcmF2ZXJzZXJHZW5lcmF0b3IpOwotCi0gICAgICAgIHRyYXZlcnNhbCA9IHNnLlYoKS5mbGF0TWFwKGJvdGhFKCkpLml0ZXJhdGUoKS5hc0FkbWluKCk7Ci0gICAgICAgIGFzc2VydFRydWUodHJhdmVyc2FsLmdldFRyYXZlcnNlckdlbmVyYXRvcigpIGluc3RhbmNlb2YgQl9MUF9PX1BfU19TRV9TTF9UcmF2ZXJzZXJHZW5lcmF0b3IpOwotICAgICAgICB0cmF2ZXJzYWwgPSBzZy5WKCkuZmxhdE1hcChib3RoRSgpLm90aGVyVigpKS5pdGVyYXRlKCkuYXNBZG1pbigpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEJfTFBfT19QX1NfU0VfU0xfVHJhdmVyc2VyR2VuZXJhdG9yKTsKLSAgICAgICAgdHJhdmVyc2FsID0gc2cuVigpLmZsYXRNYXAoYm90aCgpKS5pdGVyYXRlKCkuYXNBZG1pbigpOwotICAgICAgICBhc3NlcnRUcnVlKHRyYXZlcnNhbC5nZXRUcmF2ZXJzZXJHZW5lcmF0b3IoKSBpbnN0YW5jZW9mIEJfT19UcmF2ZXJzZXJHZW5lcmF0b3IpOwotCi0gICAgICAgIHN0cmF0ZWd5ID0gU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmZpbHRlcihfXy5zaW1wbGVQYXRoKCkpKS5jcmVhdGUoKTsKLSAgICAgICAgc2cgPSBnLndpdGhTdHJhdGVnaWVzKHN0cmF0ZWd5KTsKLQotICAgICAgICB0cmF2ZXJzYWwgPSBzZy5WKCkub3V0KCkuaXRlcmF0ZSgpLmFzQWRtaW4oKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSh0cmF2ZXJzYWwuZ2V0VHJhdmVyc2VyR2VuZXJhdG9yKCkgaW5zdGFuY2VvZiBCX0xQX09fUF9TX1NFX1NMX1RyYXZlcnNlckdlbmVyYXRvcik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1RyYW5zbGF0aW9uU3RyYXRlZ3kuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvZGVjb3JhdGlvbi9UcmFuc2xhdGlvblN0cmF0ZWd5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ODQyYzUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1RyYW5zbGF0aW9uU3RyYXRlZ3kuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblNjcmlwdEVuZ2luZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5TaW5nbGVHcmVtbGluU2NyaXB0RW5naW5lTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLlByb2dyYW1WZXJ0ZXhQcm9ncmFtU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVmVydGV4UHJvZ3JhbVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uUmVtb3RlU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuRW1wdHlTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5WZXJpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKLQotaW1wb3J0IGphdmF4LnNjcmlwdC5CaW5kaW5nczsKLWltcG9ydCBqYXZheC5zY3JpcHQuU2NyaXB0Q29udGV4dDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBUcmFuc2xhdGlvblN0cmF0ZWd5IGV4dGVuZHMgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneTxUcmF2ZXJzYWxTdHJhdGVneS5EZWNvcmF0aW9uU3RyYXRlZ3k+IGltcGxlbWVudHMgVHJhdmVyc2FsU3RyYXRlZ3kuRGVjb3JhdGlvblN0cmF0ZWd5IHsKLQotICAgIHByaXZhdGUgZmluYWwgVHJhdmVyc2FsU291cmNlIHRyYXZlcnNhbFNvdXJjZTsKLSAgICBwcml2YXRlIGZpbmFsIFRyYW5zbGF0b3IgdHJhbnNsYXRvcjsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYXNzZXJ0Qnl0ZWNvZGU7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8Q2xhc3M8PyBleHRlbmRzIERlY29yYXRpb25TdHJhdGVneT4+IFBPU1RTID0gbmV3IEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgQ29ubmVjdGl2ZVN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgRWxlbWVudElkU3RyYXRlZ3kuY2xhc3MsCi0gICAgICAgICAgICBFdmVudFN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kuY2xhc3MsCi0gICAgICAgICAgICBQYXJ0aXRpb25TdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgIFJlcXVpcmVtZW50c1N0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgU2Fja1N0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgU2VlZFN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgU2lkZUVmZmVjdFN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgU3ViZ3JhcGhTdHJhdGVneS5jbGFzcywKLSAgICAgICAgICAgIFJlbW90ZVN0cmF0ZWd5LmNsYXNzLAotICAgICAgICAgICAgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LmNsYXNzKSk7Ci0KLSAgICBwdWJsaWMgVHJhbnNsYXRpb25TdHJhdGVneShmaW5hbCBUcmF2ZXJzYWxTb3VyY2UgdHJhdmVyc2FsU291cmNlLCBmaW5hbCBUcmFuc2xhdG9yIHRyYW5zbGF0b3IsIGZpbmFsIGJvb2xlYW4gYXNzZXJ0Qnl0ZWNvZGUpIHsKLSAgICAgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2UgPSB0cmF2ZXJzYWxTb3VyY2U7Ci0gICAgICAgIHRoaXMudHJhbnNsYXRvciA9IHRyYW5zbGF0b3I7Ci0gICAgICAgIHRoaXMuYXNzZXJ0Qnl0ZWNvZGUgPSBhc3NlcnRCeXRlY29kZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhcHBseShmaW5hbCBUcmF2ZXJzYWwuQWRtaW48PywgPz4gdHJhdmVyc2FsKSB7Ci0gICAgICAgIGlmICghKHRyYXZlcnNhbC5pc1Jvb3QoKSkgfHwgdHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjw/LCA/PiB0cmFuc2xhdGVkVHJhdmVyc2FsOwotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IHJlbW92ZVRyYW5zbGF0aW9uU3RyYXRlZ3koaW5zZXJ0QmluZGluZ3NGb3JUZXN0aW5nKHRyYXZlcnNhbC5nZXRCeXRlY29kZSgpKSk7Ci0KLSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICBpZiAodGhpcy50cmFuc2xhdG9yIGluc3RhbmNlb2YgVHJhbnNsYXRvci5TdGVwVHJhbnNsYXRvcikgewotICAgICAgICAgICAgLy8gcmVmbGVjdGlvbiBiYXNlZCB0cmFuc2xhdGlvbgotICAgICAgICAgICAgdHJhbnNsYXRlZFRyYXZlcnNhbCA9IChUcmF2ZXJzYWwuQWRtaW48PywgPz4pIHRoaXMudHJhbnNsYXRvci50cmFuc2xhdGUoYnl0ZWNvZGUpOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHJhbnNsYXRvciBpbnN0YW5jZW9mIFRyYW5zbGF0b3IuU2NyaXB0VHJhbnNsYXRvcikgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAvLyBzY3JpcHQgYmFzZWQgdHJhbnNsYXRpb24KLSAgICAgICAgICAgICAgICBmaW5hbCBHcmVtbGluU2NyaXB0RW5naW5lIHNjcmlwdEVuZ2luZSA9IFNpbmdsZUdyZW1saW5TY3JpcHRFbmdpbmVNYW5hZ2VyLmdldCh0aGlzLnRyYW5zbGF0b3IuZ2V0VGFyZ2V0TGFuZ3VhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgQmluZGluZ3MgYmluZGluZ3MgPSBzY3JpcHRFbmdpbmUuY3JlYXRlQmluZGluZ3MoKTsKLSAgICAgICAgICAgICAgICBiaW5kaW5ncy5wdXRBbGwoc2NyaXB0RW5naW5lLmdldENvbnRleHQoKS5nZXRCaW5kaW5ncyhTY3JpcHRDb250ZXh0LkVOR0lORV9TQ09QRSkpOwotICAgICAgICAgICAgICAgIGJpbmRpbmdzLnB1dCh0aGlzLnRyYW5zbGF0b3IuZ2V0VHJhdmVyc2FsU291cmNlKCkudG9TdHJpbmcoKSwgdGhpcy50cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRUcmF2ZXJzYWwgPSAoVHJhdmVyc2FsLkFkbWluPD8sID8+KSBzY3JpcHRFbmdpbmUuZXZhbChieXRlY29kZSwgYmluZGluZ3MsIHRoaXMudHJhbnNsYXRvci5nZXRUcmF2ZXJzYWxTb3VyY2UoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUcmFuc2xhdGlvblN0cmF0ZWd5IGRvZXMgbm90IGtub3cgaG93IHRvIHByb2Nlc3MgdGhlIHByb3ZpZGVkIHRyYW5zbGF0b3IgdHlwZTogIiArIHRoaXMudHJhbnNsYXRvci5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8vLy8vLy8vLy8vLy8vLwotICAgICAgICBhc3NlcnQgIXRyYW5zbGF0ZWRUcmF2ZXJzYWwuaXNMb2NrZWQoKTsKLSAgICAgICAgYXNzZXJ0ICF0cmF2ZXJzYWwuaXNMb2NrZWQoKTsKLSAgICAgICAgdHJhdmVyc2FsLnNldFNpZGVFZmZlY3RzKHRyYW5zbGF0ZWRUcmF2ZXJzYWwuZ2V0U2lkZUVmZmVjdHMoKSk7Ci0gICAgICAgIFRyYXZlcnNhbEhlbHBlci5yZW1vdmVBbGxTdGVwcyh0cmF2ZXJzYWwpOwotICAgICAgICBUcmF2ZXJzYWxIZWxwZXIucmVtb3ZlVG9UcmF2ZXJzYWwoKFN0ZXApIHRyYW5zbGF0ZWRUcmF2ZXJzYWwuZ2V0U3RhcnRTdGVwKCksIEVtcHR5U3RlcC5pbnN0YW5jZSgpLCB0cmF2ZXJzYWwpOwotICAgICAgICAvLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAgICAgLy8gdGhpcyB0ZXN0cyB0byBlbnN1cmUgdGhhdCB0aGUgYnl0ZWNvZGUgYmVpbmcgdHJhbnNsYXRlZCBpcyB0aGUgc2FtZSBhcyB0aGUgYnl0ZWNvZGUgb2YgdGhlIGdlbmVyYXRlZAotICAgICAgICAvLyB0cmF2ZXJzYWwuIHdlIG1pZ2h0IG5vdCBkbyB0aGlzIHNvbWV0aW1lcyBpbiB0ZXN0aW5nIGlmIGxhbWJkYXMgYXJlIHByZXNlbnQgYnV0IHN0aWxsIHdhbnQgdG8gdXNlCi0gICAgICAgIC8vIFRyYW5zbGF0aW9uU3RyYXRlZ3kKLSAgICAgICAgaWYgKGFzc2VydEJ5dGVjb2RlKQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlbW92ZVRyYW5zbGF0aW9uU3RyYXRlZ3kodHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpLCB0cmFuc2xhdGVkVHJhdmVyc2FsLmdldEJ5dGVjb2RlKCkpOwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldDxDbGFzczw/IGV4dGVuZHMgRGVjb3JhdGlvblN0cmF0ZWd5Pj4gYXBwbHlQb3N0KCkgewotICAgICAgICByZXR1cm4gUE9TVFM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQnl0ZWNvZGUgcmVtb3ZlVHJhbnNsYXRpb25TdHJhdGVneShmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICBpZiAoYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIGJ5dGVjb2RlLmdldFNvdXJjZUluc3RydWN0aW9ucygpLnJlbW92ZSgwKTsKLSAgICAgICAgcmV0dXJuIGJ5dGVjb2RlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ5dGVjb2RlIGluc2VydEJpbmRpbmdzRm9yVGVzdGluZyhmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICBmaW5hbCBCeXRlY29kZSBuZXdCeXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICBmb3IgKGZpbmFsIEJ5dGVjb2RlLkluc3RydWN0aW9uIGluc3RydWN0aW9uIDogYnl0ZWNvZGUuZ2V0U291cmNlSW5zdHJ1Y3Rpb25zKCkpIHsKLSAgICAgICAgICAgIG5ld0J5dGVjb2RlLmFkZFNvdXJjZShpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpLCBpbnN0cnVjdGlvbi5nZXRBcmd1bWVudHMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChmaW5hbCBCeXRlY29kZS5JbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA6IGJ5dGVjb2RlLmdldFN0ZXBJbnN0cnVjdGlvbnMoKSkgewotICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gYXJncyA9IGluc3RydWN0aW9uLmdldEFyZ3VtZW50cygpOwotICAgICAgICAgICAgZmluYWwgT2JqZWN0W10gbmV3QXJncyA9IG5ldyBPYmplY3RbYXJncy5sZW5ndGhdOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJnc1tpXSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBuZXdBcmdzW2ldID0gbnVsbDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmdzW2ldLmVxdWFscygia25vd3MiKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3QXJnc1tpXSA9IG5ldyBCeXRlY29kZS5CaW5kaW5nPD4oImEiLCAia25vd3MiKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhcmdzW2ldLmVxdWFscygiY3JlYXRlZCIpKQotICAgICAgICAgICAgICAgICAgICBuZXdBcmdzW2ldID0gbmV3IEJ5dGVjb2RlLkJpbmRpbmc8PigiYiIsICJjcmVhdGVkIik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJnc1tpXS5lcXVhbHMoMTApKQotICAgICAgICAgICAgICAgICAgICBuZXdBcmdzW2ldID0gbmV3IEJ5dGVjb2RlLkJpbmRpbmc8PigiYyIsIDEwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5ld0FyZ3NbaV0gPSBhcmdzW2ldOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbmV3Qnl0ZWNvZGUuYWRkU3RlcChpbnN0cnVjdGlvbi5nZXRPcGVyYXRvcigpLCBuZXdBcmdzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3Qnl0ZWNvZGU7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L2RlY29yYXRpb24vVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzOTkyNmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9kZWNvcmF0aW9uL1RyYW5zbGF0aW9uU3RyYXRlZ3lQcm9jZXNzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLkdyZW1saW5Qcm9jZXNzUnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoR3JlbWxpblByb2Nlc3NSdW5uZXIuY2xhc3MpCi1wdWJsaWMgY2xhc3MgVHJhbnNsYXRpb25TdHJhdGVneVByb2Nlc3NUZXN0IGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihUcmFuc2xhdGlvblN0cmF0ZWd5UHJvY2Vzc1Rlc3QuY2xhc3MpOwotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChNT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90SGF2ZUFub255bW91c1RyYXZlcnNhbE1peHVwcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBpZiAoIWcuZ2V0U3RyYXRlZ2llcygpLmdldFN0cmF0ZWd5KFRyYW5zbGF0aW9uU3RyYXRlZ3kuY2xhc3MpLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICBsb2dnZXIuZGVidWcoIk5vICIgKyBUcmFuc2xhdGlvblN0cmF0ZWd5LmNsYXNzLmdldFNpbXBsZU5hbWUoKSArICIgaXMgcmVnaXN0ZXJlZCBhbmQgdGh1cywgc2tpcHBpbmcgdGVzdC4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGEgPSBnOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBiID0gZy53aXRob3V0U3RyYXRlZ2llcyhUcmFuc2xhdGlvblN0cmF0ZWd5LmNsYXNzKTsKLQotICAgICAgICBhc3NlcnQgYS5nZXRTdHJhdGVnaWVzKCkuZ2V0U3RyYXRlZ3koVHJhbnNsYXRpb25TdHJhdGVneS5jbGFzcykuaXNQcmVzZW50KCk7Ci0gICAgICAgIGFzc2VydCAhYi5nZXRTdHJhdGVnaWVzKCkuZ2V0U3RyYXRlZ3koVHJhbnNsYXRpb25TdHJhdGVneS5jbGFzcykuaXNQcmVzZW50KCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDZsLCBhLlYoKS5vdXQoKS5jb3VudCgpLm5leHQoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg2bCwgYi5WKCkub3V0KCkuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydCBhLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShUcmFuc2xhdGlvblN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKTsKLSAgICAgICAgYXNzZXJ0ICFiLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShUcmFuc2xhdGlvblN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMmwsIGEuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMmwsIGIuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuY291bnQoKS5uZXh0KCkubG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgIGFzc2VydCBhLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShUcmFuc2xhdGlvblN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKTsKLSAgICAgICAgYXNzZXJ0ICFiLmdldFN0cmF0ZWdpZXMoKS5nZXRTdHJhdGVneShUcmFuc2xhdGlvblN0cmF0ZWd5LmNsYXNzKS5pc1ByZXNlbnQoKTsKLQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vRWFybHlMaW1pdFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL0Vhcmx5TGltaXRTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKaW5kZXggOWZhZTQwYy4uMmYyZTI1MiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vRWFybHlMaW1pdFN0cmF0ZWd5UHJvY2Vzc1Rlc3QuamF2YQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9FYXJseUxpbWl0U3RyYXRlZ3lQcm9jZXNzVGVzdC5qYXZhCkBAIC0yOCw2ICsyOCw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbE1ldHJpY3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogCkBAIC00OSw2ICs1MCw3IEBACiAgICAgQFRlc3QKICAgICBATG9hZEdyYXBoV2l0aChHUkFURUZVTCkKICAgICBASWdub3JlRW5naW5lKFRyYXZlcnNhbEVuZ2luZS5UeXBlLkNPTVBVVEVSKQorICAgIEBJZ25vcmUgLy8gdG9kbzogcmUtZW5hYmxlIGFmdGVyIHRyYXZlcnNhbCBtZXRyaWNzIHNlcmlhbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQKICAgICBwdWJsaWMgdm9pZCBzaG91bGRIYW5kbGVSYW5nZVN0ZXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWw8VmVydGV4LCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+PiB0ID0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvdmVyaWZpY2F0aW9uL1JlYWRPbmx5U3RyYXRlZ3lQcm9jZXNzVGVzdC5qYXZhIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVhZE9ubHlTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NDg0YTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS92ZXJpZmljYXRpb24vUmVhZE9ubHlTdHJhdGVneVByb2Nlc3NUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS52ZXJpZmljYXRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkZlYXR1cmVSZXF1aXJlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuQWJzdHJhY3RHcmVtbGluUHJvY2Vzc1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUmVtb3RlR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuU3RyaW5nQ29udGFpbnMuY29udGFpbnNTdHJpbmc7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWFkT25seVN0cmF0ZWd5UHJvY2Vzc1Rlc3QgZXh0ZW5kcyBBYnN0cmFjdEdyZW1saW5Qcm9jZXNzVGVzdCB7Ci0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmF2ZXJzZVYoKSB7Ci0gICAgICAgIGFzc2VydFRyYXZlcnNhbChjcmVhdGUoKS5WKCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYXZlcnNlVl9vdXQoKSB7Ci0gICAgICAgIGFzc2VydFRyYXZlcnNhbChjcmVhdGUoKS5WKCkub3V0KCksIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFRyYXZlcnNlVl9pbigpIHsKLSAgICAgICAgYXNzZXJ0VHJhdmVyc2FsKGNyZWF0ZSgpLlYoKS5pbigpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUcmF2ZXJzZVZfaW5faW4oKSB7Ci0gICAgICAgIGFzc2VydFRyYXZlcnNhbChjcmVhdGUoKS5WKCkuaW4oKSwgZmFsc2UpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhdmVyc2VFKCkgewotICAgICAgICBhc3NlcnRUcmF2ZXJzYWwoY3JlYXRlKCkuRSgpLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5GRUFUVVJFX0FERF9FREdFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RUcmF2ZXJzZVZfb3V0X2FkZEluRSgpIHsKLSAgICAgICAgYXNzZXJ0VHJhdmVyc2FsKGNyZWF0ZSgpLlYoKS5hcygiYSIpLm91dCgpLmFkZEUoInRlc3QiKS5mcm9tKCJhIiksIHRydWUpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90VHJhdmVyc2VWX291dF9hZGRPdXRFKCkgewotICAgICAgICBhc3NlcnRUcmF2ZXJzYWwoY3JlYXRlKCkuVigpLmFzKCJhIikub3V0KCkuYWRkRSgidGVzdCIpLnRvKCJhIiksIHRydWUpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90VHJhdmVyc2VWX0luX2FkZEluRSgpIHsKLSAgICAgICAgYXNzZXJ0VHJhdmVyc2FsKGNyZWF0ZSgpLlYoKS5hcygiYSIpLmluKCkuYWRkRSgidGVzdCIpLmZyb20oImEiKSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBARmVhdHVyZVJlcXVpcmVtZW50KGZlYXR1cmVDbGFzcyA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5jbGFzcywgZmVhdHVyZSA9IEdyYXBoLkZlYXR1cmVzLkVkZ2VGZWF0dXJlcy5GRUFUVVJFX0FERF9FREdFUykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RUcmF2ZXJzZVZfSW5fYWRkT3V0RSgpIHsKLSAgICAgICAgYXNzZXJ0VHJhdmVyc2FsKGNyZWF0ZSgpLlYoKS5hcygiYSIpLmluKCkuYWRkRSgidGVzdCIpLnRvKCJhIiksIHRydWUpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQEZlYXR1cmVSZXF1aXJlbWVudChmZWF0dXJlQ2xhc3MgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuY2xhc3MsIGZlYXR1cmUgPSBHcmFwaC5GZWF0dXJlcy5FZGdlRmVhdHVyZXMuRkVBVFVSRV9BRERfRURHRVMpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkTm90VHJhdmVyc2VWX0luX2FkZEVYSU5YKCkgewotICAgICAgICBhc3NlcnRUcmF2ZXJzYWwoY3JlYXRlKCkuVigpLmFzKCJhIikuaW4oKS5hZGRFKCJ0ZXN0IikuZnJvbSgiYSIpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBGZWF0dXJlUmVxdWlyZW1lbnQoZmVhdHVyZUNsYXNzID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLmNsYXNzLCBmZWF0dXJlID0gR3JhcGguRmVhdHVyZXMuRWRnZUZlYXR1cmVzLkZFQVRVUkVfQUREX0VER0VTKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdFRyYXZlcnNlVl9Jbl9hZGRFWE9VVFgoKSB7Ci0gICAgICAgIGFzc2VydFRyYXZlcnNhbChjcmVhdGUoKS5WKCkuYXMoImEiKS5pbigpLmFkZEUoInRlc3QiKS50bygiYSIpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEdyYXBoVHJhdmVyc2FsU291cmNlIGNyZWF0ZSgpIHsKLSAgICAgICAgcmV0dXJuIGdyYXBoUHJvdmlkZXIudHJhdmVyc2FsKGdyYXBoLCBSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRUcmF2ZXJzYWwoZmluYWwgVHJhdmVyc2FsIHQsIGZpbmFsIGJvb2xlYW4gZXhwZWN0TXV0YXRpbmdTdGVwKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBub3Qgc3VyZSB3aHkgaSBuZWVkIGEgc3BlY2lhbCBob29rIGhlcmUgZm9yIFJlbW90ZUdyYXBoLiBJdCBvbmx5IHRyaWdnZXJzIHRoZXNlIGV4Y2VwdGlvbnMgb24gYQotICAgICAgICAgICAgLy8gY2FsbCB0byBoYXNOZXh0KCkgYW5kIG5vdCBvbiBhcHBseVN0cmF0ZWdpZXMoKQotICAgICAgICAgICAgaWYgKGdyYXBoIGluc3RhbmNlb2YgUmVtb3RlR3JhcGgpCi0gICAgICAgICAgICAgICAgdC5oYXNOZXh0KCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdC5hc0FkbWluKCkuYXBwbHlTdHJhdGVnaWVzKCk7Ci0KLSAgICAgICAgICAgIGlmIChleHBlY3RNdXRhdGluZ1N0ZXApIGZhaWwoIlRoZSBzdHJhdGVneSBzaG91bGQgaGF2ZSBmb3VuZCBhIG11dGF0aW5nIHN0ZXAuIik7Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBpc2UpIHsKLSAgICAgICAgICAgIGlmICghZXhwZWN0TXV0YXRpbmdTdGVwKQotICAgICAgICAgICAgICAgIGZhaWwoIlRoZSB0cmF2ZXJzYWwgc2hvdWxkIG5vdCBoYXZlIGZhaWxlZCBhcyB0aGVyZSBpcyBubyBtdXRhdGluZyBzdGVwLiIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJhdmVyc2FsVmVyaWZpY2F0aW9uU3RyYXRlZ3kgZmFpbHMgYmVmb3JlIHRoaXMgYXMgbXV0YXRpbmcgb3BlcmF0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gT0xBUAotICAgICAgICAgICAgICAgIGlmICghKGlzZSBpbnN0YW5jZW9mIFZlcmlmaWNhdGlvbkV4Y2VwdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRoYXQoaXNlLmdldE1lc3NhZ2UoKSwgY29udGFpbnNTdHJpbmcoIlRoZSBwcm92aWRlZCB0cmF2ZXJzYWwgaGFzIGEgbXV0YXRpbmcgc3RlcCBhbmQgdGh1cyBpcyBub3QgcmVhZCBvbmx5IikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvRWRnZVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL0VkZ2VUZXN0LmphdmEKaW5kZXggN2JlMzAzOC4uZmFlOTMwYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvRWRnZVRlc3QuamF2YQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9FZGdlVGVzdC5qYXZhCkBAIC0yOTUsOCArMjk1LDYgQEAKICAgICAgICAgICAgICAgICB2MS5hZGRFZGdlKCJ3YWxrcyIsIHYyLCAibG9jYXRpb24iLCAicml2ZXIiKTsKICAgICAgICAgICAgICAgICBlZGdlLnJlbW92ZSgpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAvL2Fzc2VydEVxdWFscyg4LCB2MS5vdXRFKCkuY291bnQoKS5uZXh0KCkuaW50VmFsdWUoKSk7ICBUT0RPOiBOZW80aiBpcyBub3QgaGFwcHkKLSAgICAgICAgICAgIC8vYXNzZXJ0RXF1YWxzKDgsIHYyLm91dEUoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKICAgICAgICAgICAgIHYxLmVkZ2VzKERpcmVjdGlvbi5CT1RIKS5mb3JFYWNoUmVtYWluaW5nKEVkZ2U6OnJlbW92ZSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgSXRlcmF0b3JVdGlscy5jb3VudCh2MS5lZGdlcyhEaXJlY3Rpb24uQk9USCkpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KHYyLmVkZ2VzKERpcmVjdGlvbi5CT1RIKSkpOwpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvUmVtb3RlR3JhcGguamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL1JlbW90ZUdyYXBoLmphdmEKaW5kZXggNTY0MmYwOS4uMDEyMWRlMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvUmVtb3RlR3JhcGguamF2YQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9SZW1vdGVHcmFwaC5qYXZhCkBAIC00MCwxNiArNDAsOCBAQAogICoKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKICAqLwotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfU1RBTkRBUkQpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19DT01QVVRFUikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TaG9ydGVzdFBhdGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9USU5LRVJQT1AtMTk3NiIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ29ubmVjdGVkQ29tcG9uZW50VGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gImh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QLTE5NzYiKQorQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfRU1CRURERURfU1RBTkRBUkQpCitAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9DT01QVVRFUikKIEBHcmFwaC5PcHRPdXQoCiAgICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db3JlVHJhdmVyc2FsVGVzdCIsCiAgICAgICAgIG1ldGhvZCA9ICIqIiwKQEAgLTY3LDEwICs1OSw2IEBACiAgICAgICAgIG1ldGhvZCA9ICIqIiwKICAgICAgICAgcmVhc29uID0gIlJlbW90ZUdyYXBoIGRvZXMgbm90IHN1cHBvcnQgRXZlbnRTdHJhdGVneSBhdCB0aGlzIHRpbWUgLSBzb21lIG9mIGl0cyBtZW1iZXJzIGFyZSBub3Qgc2VyaWFsaXphYmxlIikKIEBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlBhcnRpdGlvblN0cmF0ZWd5UHJvY2Vzc1Rlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJSZW1vdGVHcmFwaCBkb2VzIG5vdCBzdXBwb3J0IFBhcnRpdGlvblN0cmF0ZWd5IGF0IHRoaXMgdGltZSIpCi1AR3JhcGguT3B0T3V0KAogICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5yYW5raW5nLnBhZ2VyYW5rLlBhZ2VSYW5rVmVydGV4UHJvZ3JhbVRlc3QiLAogICAgICAgICBtZXRob2QgPSAiKiIsCiAgICAgICAgIHJlYXNvbiA9ICJSZW1vdGVHcmFwaCBkb2VzIG5vdCBzdXBwb3J0IGRpcmVjdCBHcmFwaC5jb21wdXRlKCkgYWNjZXNzIikKQEAgLTk0LDE0ICs4Miw2IEBACiAgICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxJbnRlcnJ1cHRpb25Db21wdXRlclRlc3QiLAogICAgICAgICBtZXRob2QgPSAiKiIsCiAgICAgICAgIHJlYXNvbiA9ICJUaGUgaW50ZXJydXB0aW9uIG1vZGVsIGluIHRoZSB0ZXN0IGNhbid0IGd1YXJhbnRlZSBpbnRlcnJ1cHRpb24gYXQgdGhlIHJpZ2h0IHRpbWUgd2l0aCBSZW1vdGVHcmFwaC4iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuQ29tcGxleFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiY2xhc3NpY1JlY29tbWVuZGF0aW9uIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3QgYXNzZXJ0cyB0cmF2ZXJzYWwgc2lkZS1lZmZlY3RzIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHJlbW90ZSB0cmF2ZXJzYWxzLiIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0Lkdyb3VwVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX2dyb3VwWGFYX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWF93ZWlnaHRfc3VtWCIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0IGFzc2VydHMgdHJhdmVyc2FsIHNpZGUtZWZmZWN0cyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSByZW1vdGUgdHJhdmVyc2Fscy4iKQogcHVibGljIGNsYXNzIFJlbW90ZUdyYXBoIGltcGxlbWVudHMgR3JhcGggewogCiAgICAgcHJpdmF0ZSBmaW5hbCBSZW1vdGVDb25uZWN0aW9uIGNvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVJlc291cmNlQWNjZXNzLmphdmEgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeVJlc291cmNlQWNjZXNzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3YTJjOQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L0dyYXBoQmluYXJ5UmVzb3VyY2VBY2Nlc3MuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaGJpbmFyeTsKKworcHVibGljIGNsYXNzIEdyYXBoQmluYXJ5UmVzb3VyY2VBY2Nlc3MgeworfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvdHJhbnNsYXRpb25zLmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbGFuZ3VhZ2UvdHJhbnNsYXRvci90cmFuc2xhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWRmMmNmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2xhbmd1YWdlL3RyYW5zbGF0b3IvdHJhbnNsYXRpb25zLmpzb24KQEAgLTAsMCArMSw0NDE2NyBAQAorWworICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5icmFuY2goX18ubGFiZWwoKS5pcyhcInBlcnNvblwiKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcImxhbmdcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5icmFuY2goX18ubGFiZWwoKS5pcyhcInBlcnNvblwiKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcImxhbmdcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5icmFuY2goX18ubGFiZWwoKS5pcyhzdHJpbmcwKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhzdHJpbmcyKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5CcmFuY2g8b2JqZWN0PihfXy5MYWJlbCgpLklzKFwicGVyc29uXCIpLkNvdW50KCkpLk9wdGlvbih4eDEsIF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oeHgyLCBfXy5WYWx1ZXM8b2JqZWN0PihcImxhbmdcIikpLk9wdGlvbih4eDIsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5CcmFuY2goZ3JlbWxpbmdvLlRfXy5MYWJlbCgpLklzKFwicGVyc29uXCIpLkNvdW50KCkpLk9wdGlvbih4eDEsIGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oeHgyLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcImxhbmdcIikpLk9wdGlvbih4eDIsIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5icmFuY2goX18ubGFiZWwoKS5pc18oJ3BlcnNvbicpLmNvdW50KCkpLm9wdGlvbih4eDEsIF9fLnZhbHVlcygnYWdlJykpLm9wdGlvbih4eDIsIF9fLnZhbHVlcygnbGFuZycpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoJ25hbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9icmFuY2hYbGFiZWxfaXNYcGVyc29uWF9jb3VudFhfb3B0aW9uWDFfX2FnZVhfb3B0aW9uWDBfX2xhbmdYX29wdGlvblgwX19uYW1lWF9vcHRpb25YYW55X19sYWJlbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5hbnksIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5hbnksIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJyYW5jaChfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpLmNvdW50KCkpLm9wdGlvbih4eDEsIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwibGFuZ1wiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2suYW55LCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoc3RyaW5nMCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoc3RyaW5nMikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhzdHJpbmczKSkub3B0aW9uKFBpY2suYW55LCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5CcmFuY2g8b2JqZWN0PihfXy5MYWJlbCgpLklzKFwicGVyc29uXCIpLkNvdW50KCkpLk9wdGlvbih4eDEsIF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oeHgyLCBfXy5WYWx1ZXM8b2JqZWN0PihcImxhbmdcIikpLk9wdGlvbih4eDIsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuT3B0aW9uKFBpY2suQW55LCBfXy5MYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJyYW5jaChncmVtbGluZ28uVF9fLkxhYmVsKCkuSXMoXCJwZXJzb25cIikuQ291bnQoKSkuT3B0aW9uKHh4MSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbih4eDIsIGdyZW1saW5nby5UX18uVmFsdWVzKFwibGFuZ1wiKSkuT3B0aW9uKHh4MiwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suQW55LCBncmVtbGluZ28uVF9fLkxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJyYW5jaChfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpLmNvdW50KCkpLm9wdGlvbih4eDEsIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwibGFuZ1wiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2suYW55LCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJsYW5nXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5hbnksIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5icmFuY2goX18ubGFiZWwoKS5pcyhcInBlcnNvblwiKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcImxhbmdcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLmFueSwgX18ubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYnJhbmNoKF9fLmxhYmVsKCkuaXNfKCdwZXJzb24nKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoJ2FnZScpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoJ2xhbmcnKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKCduYW1lJykpLm9wdGlvbihQaWNrLmFueV8sIF9fLmxhYmVsKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYnJhbmNoWGFnZVhfb3B0aW9uWGx0WDMwWF9feW91bmdYX29wdGlvblhndFgzMFhfX29sZFhfb3B0aW9uWG5vbmVfX29uX3RoZV9lZGdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5icmFuY2goX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5sdCgzMCksIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQLmd0KDMwKSwgX18uY29uc3RhbnQoXCJvbGRcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwib24gdGhlIGVkZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYnJhbmNoKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAubHQoMzApLCBfXy5jb25zdGFudChcInlvdW5nXCIpKS5vcHRpb24oUC5ndCgzMCksIF9fLmNvbnN0YW50KFwib2xkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcIm9uIHRoZSBlZGdlXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5icmFuY2goX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5sdCgzMCksIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQLmd0KDMwKSwgX18uY29uc3RhbnQoXCJvbGRcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwib24gdGhlIGVkZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5icmFuY2goX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUC5sdChudW1iZXIwKSwgX18uY29uc3RhbnQoc3RyaW5nMikpLm9wdGlvbihQLmd0KG51bWJlcjApLCBfXy5jb25zdGFudChzdHJpbmczKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoc3RyaW5nNCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkJyYW5jaDxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUC5MdCgzMCksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJ5b3VuZ1wiKSkuT3B0aW9uKFAuR3QoMzApLCBfXy5Db25zdGFudDxvYmplY3Q+KFwib2xkXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5Db25zdGFudDxvYmplY3Q+KFwib24gdGhlIGVkZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQnJhbmNoKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlAuTHQoMzApLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwieW91bmdcIikpLk9wdGlvbihncmVtbGluZ28uUC5HdCgzMCksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJvbGRcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwib24gdGhlIGVkZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJyYW5jaChfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmx0KDMwKSwgX18uY29uc3RhbnQoXCJ5b3VuZ1wiKSkub3B0aW9uKFAuZ3QoMzApLCBfXy5jb25zdGFudChcIm9sZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJvbiB0aGUgZWRnZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJyYW5jaChfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmx0KDMwKSwgX18uY29uc3RhbnQoXCJ5b3VuZ1wiKSkub3B0aW9uKFAuZ3QoMzApLCBfXy5jb25zdGFudChcIm9sZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJvbiB0aGUgZWRnZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJyYW5jaChfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmx0KDMwKSwgX18uY29uc3RhbnQoXCJ5b3VuZ1wiKSkub3B0aW9uKFAuZ3QoMzApLCBfXy5jb25zdGFudChcIm9sZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJvbiB0aGUgZWRnZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5icmFuY2goX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAubHQoMzApLCBfXy5jb25zdGFudCgneW91bmcnKSkub3B0aW9uKFAuZ3QoMzApLCBfXy5jb25zdGFudCgnb2xkJykpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCdvbiB0aGUgZWRnZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JyYW5jaFhpZGVudGl0eVhfb3B0aW9uWGhhc0xhYmVsWHNvZnR3YXJlWF9faW5YY3JlYXRlZFhfbmFtZV9vcmRlcl9mb2xkWF9vcHRpb25YaGFzWG5hbWVfdmFkYXNYX19hZ2VYX29wdGlvblhuZXFYMTIzWF9fYm90aEVfY291bnRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJyYW5jaChfXy5pZGVudGl0eSgpKS5vcHRpb24oX18uaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkpLm9wdGlvbihfXy5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5uZXEoMTIzKSwgX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJyYW5jaChfXy5pZGVudGl0eSgpKS5vcHRpb24oX18uaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkpLm9wdGlvbihfXy5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAubmVxKDEyMyksIF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKSkub3B0aW9uKF9fLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5uZXEoMTIzKSwgX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNMYWJlbChzdHJpbmcwKSwgX18uaW4oc3RyaW5nMSkudmFsdWVzKHN0cmluZzIpLm9yZGVyKCkuZm9sZCgpKS5vcHRpb24oX18uaGFzKHN0cmluZzIsIHN0cmluZzMpLCBfXy52YWx1ZXMoc3RyaW5nNCkpLm9wdGlvbihQLm5lcShudW1iZXIwKSwgX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5CcmFuY2g8b2JqZWN0PihfXy5JZGVudGl0eSgpKS5PcHRpb24oX18uSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uSW4oXCJjcmVhdGVkXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKSkuT3B0aW9uKF9fLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLk5lcSgxMjMpLCBfXy5Cb3RoRSgpLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQnJhbmNoKGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuT3B0aW9uKGdyZW1saW5nby5UX18uSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgZ3JlbWxpbmdvLlRfXy5JbihcImNyZWF0ZWRcIikuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKSkuT3B0aW9uKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QLk5lcSgxMjMpLCBncmVtbGluZ28uVF9fLkJvdGhFKCkuQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKSkub3B0aW9uKF9fLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5uZXEoMTIzKSwgX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKSkub3B0aW9uKF9fLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5uZXEoMTIzKSwgX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5pbl8oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkpLm9wdGlvbihfXy5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAubmVxKDEyMyksIF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYnJhbmNoKF9fLmlkZW50aXR5KCkpLm9wdGlvbihfXy5oYXNfbGFiZWwoJ3NvZnR3YXJlJyksIF9fLmluXygnY3JlYXRlZCcpLnZhbHVlcygnbmFtZScpLm9yZGVyKCkuZm9sZCgpKS5vcHRpb24oX18uaGFzKCduYW1lJywgJ3ZhZGFzJyksIF9fLnZhbHVlcygnYWdlJykpLm9wdGlvbihQLm5lcSgxMjMpLCBfXy5ib3RoX2UoKS5jb3VudCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhvdXRfY291bnRYX29wdGlvblgyTF9uYW1lWF9vcHRpb25YM0xfYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwiYWdlXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKHN0cmluZzApKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLk91dCgpLkNvdW50KCkpLk9wdGlvbih4eDEsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuT3B0aW9uKHh4MiwgX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uT3V0KCkuQ291bnQoKSkuT3B0aW9uKHh4MSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKS5PcHRpb24oeHgyLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLm91dCgpLmNvdW50KCkpLm9wdGlvbih4eDEsIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwiYWdlXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKCduYW1lJykpLm9wdGlvbih4eDIsIF9fLnZhbHVlcygnYWdlJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWG91dF9jb3VudFhfb3B0aW9uWDJMX25hbWVYX29wdGlvblgzTF9hZ2VYX29wdGlvblhub25lX2Rpc2NhcmRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oeHgyLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoc3RyaW5nMCkpLm9wdGlvbih4eDIsIF9fLnZhbHVlcyhzdHJpbmcxKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihfXy5PdXQoKS5Db3VudCgpKS5PcHRpb24oeHgxLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLk9wdGlvbih4eDIsIF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5EaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uT3V0KCkuQ291bnQoKSkuT3B0aW9uKHh4MSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKS5PcHRpb24oeHgyLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QaWNrLk5vbmUsIGdyZW1saW5nby5UX18uRGlzY2FyZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KCkuY291bnQoKSkub3B0aW9uKHh4MSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShfXy5vdXQoKS5jb3VudCgpKS5vcHRpb24oeHgxLCBfXy52YWx1ZXMoJ25hbWUnKSkub3B0aW9uKHh4MiwgX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2FuZF9vdXRYY3JlYXRlZFhfX291dFhrbm93c1hfaWRlbnRpdHlYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLmFuZCgpLm91dChcImNyZWF0ZWRcIiksX18ub3V0KFwia25vd3NcIiksX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChcInBlcnNvblwiKS5hbmQoKS5vdXQoXCJjcmVhdGVkXCIpLCBfXy5vdXQoXCJrbm93c1wiKSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuYW5kKCkub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIiksIF9fLmlkZW50aXR5KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChzdHJpbmcwKS5hbmQoKS5vdXQoc3RyaW5nMSksIF9fLm91dChzdHJpbmcyKSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLkhhc0xhYmVsKFwicGVyc29uXCIpLkFuZCgpLk91dChcImNyZWF0ZWRcIiksIF9fLk91dChcImtub3dzXCIpLCBfXy5JZGVudGl0eSgpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5IYXNMYWJlbChcInBlcnNvblwiKS5BbmQoKS5PdXQoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpLCBncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLmFuZCgpLm91dChcImNyZWF0ZWRcIiksIF9fLm91dChcImtub3dzXCIpLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuYW5kKCkub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIiksIF9fLmlkZW50aXR5KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChcInBlcnNvblwiKS5hbmQoKS5vdXQoXCJjcmVhdGVkXCIpLCBfXy5vdXQoXCJrbm93c1wiKSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoX18uaGFzX2xhYmVsKCdwZXJzb24nKS5hbmRfKCkub3V0KCdjcmVhdGVkJyksIF9fLm91dCgna25vd3MnKSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF9hbmRfb3V0WGNyZWF0ZWRYX291dFhrbm93c1hfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuYW5kKCkub3V0KFwiY3JlYXRlZFwiKSxfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChcInBlcnNvblwiKS5hbmQoKS5vdXQoXCJjcmVhdGVkXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuYW5kKCkub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChzdHJpbmcwKS5hbmQoKS5vdXQoc3RyaW5nMSksIF9fLm91dChzdHJpbmcyKSkudmFsdWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLkhhc0xhYmVsKFwicGVyc29uXCIpLkFuZCgpLk91dChcImNyZWF0ZWRcIiksIF9fLk91dChcImtub3dzXCIpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5IYXNMYWJlbChcInBlcnNvblwiKS5BbmQoKS5PdXQoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChcInBlcnNvblwiKS5hbmQoKS5vdXQoXCJjcmVhdGVkXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLmFuZCgpLm91dChcImNyZWF0ZWRcIiksIF9fLm91dChcImtub3dzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuYW5kKCkub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLmhhc19sYWJlbCgncGVyc29uJykuYW5kXygpLm91dCgnY3JlYXRlZCcpLCBfXy5vdXQoJ2tub3dzJykpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWGxhYmVsWF9vcHRpb25YYmxhaF9fb3V0WGtub3dzWFhfb3B0aW9uWGJsZWVwX19vdXRYY3JlYXRlZFhYX29wdGlvblhub25lX19pZGVudGl0eVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoX18ubGFiZWwoKSkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18ubGFiZWwoKSkub3B0aW9uKHN0cmluZzAsIF9fLm91dChzdHJpbmcxKSkub3B0aW9uKHN0cmluZzIsIF9fLm91dChzdHJpbmczKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLkxhYmVsKCkpLk9wdGlvbihcImJsYWhcIiwgX18uT3V0KFwia25vd3NcIikpLk9wdGlvbihcImJsZWVwXCIsIF9fLk91dChcImNyZWF0ZWRcIikpLk9wdGlvbihQaWNrLk5vbmUsIF9fLklkZW50aXR5KCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVF9fLkxhYmVsKCkpLk9wdGlvbihcImJsYWhcIiwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKSkuT3B0aW9uKFwiYmxlZXBcIiwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5JZGVudGl0eSgpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy5sYWJlbCgpKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18ubGFiZWwoKSkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbihcImJsYWhcIiwgX18ub3V0KFwia25vd3NcIikpLm9wdGlvbihcImJsZWVwXCIsIF9fLm91dChcImNyZWF0ZWRcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbignYmxhaCcsIF9fLm91dCgna25vd3MnKSkub3B0aW9uKCdibGVlcCcsIF9fLm91dCgnY3JlYXRlZCcpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhUbGFiZWxYX29wdGlvblhwZXJzb25fX291dFhrbm93c1hfbmFtZVhfb3B0aW9uWGJsZWVwX2NvbnN0YW50WGJsZWVwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihcInBlcnNvblwiLCBfXy5vdXQoXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5jb25zdGFudChcImJsZWVwXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oXCJwZXJzb25cIiwgX18ub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18uY29uc3RhbnQoXCJibGVlcFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihcInBlcnNvblwiLCBfXy5vdXQoXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5jb25zdGFudChcImJsZWVwXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihzdHJpbmcwLCBfXy5vdXQoc3RyaW5nMSkudmFsdWVzKHN0cmluZzIpKS5vcHRpb24oc3RyaW5nMywgX18uY29uc3RhbnQoc3RyaW5nMykpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KFQuTGFiZWwpLk9wdGlvbihcInBlcnNvblwiLCBfXy5PdXQoXCJrbm93c1wiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLk9wdGlvbihcImJsZWVwXCIsIF9fLkNvbnN0YW50PG9iamVjdD4oXCJibGVlcFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlQuTGFiZWwpLk9wdGlvbihcInBlcnNvblwiLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpLlZhbHVlcyhcIm5hbWVcIikpLk9wdGlvbihcImJsZWVwXCIsIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJibGVlcFwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihcInBlcnNvblwiLCBfXy5vdXQoXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5jb25zdGFudChcImJsZWVwXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihcInBlcnNvblwiLCBfXy5vdXQoXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5jb25zdGFudChcImJsZWVwXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihcInBlcnNvblwiLCBfXy5vdXQoXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5jb25zdGFudChcImJsZWVwXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKCdwZXJzb24nLCBfXy5vdXQoJ2tub3dzJykudmFsdWVzKCduYW1lJykpLm9wdGlvbignYmxlZXAnLCBfXy5jb25zdGFudCgnYmxlZXAnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYVGxhYmVsWF9vcHRpb25YYmxhaF9fb3V0WGtub3dzWFhfb3B0aW9uWGJsZWVwX19vdXRYY3JlYXRlZFhYX29wdGlvblhub25lX19pZGVudGl0eVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKHN0cmluZzAsIF9fLm91dChzdHJpbmcxKSkub3B0aW9uKHN0cmluZzIsIF9fLm91dChzdHJpbmczKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KFQuTGFiZWwpLk9wdGlvbihcImJsYWhcIiwgX18uT3V0KFwia25vd3NcIikpLk9wdGlvbihcImJsZWVwXCIsIF9fLk91dChcImNyZWF0ZWRcIikpLk9wdGlvbihQaWNrLk5vbmUsIF9fLklkZW50aXR5KCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVC5MYWJlbCkuT3B0aW9uKFwiYmxhaFwiLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpKS5PcHRpb24oXCJibGVlcFwiLCBncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKFQubGFiZWwpLm9wdGlvbihcImJsYWhcIiwgX18ub3V0KFwia25vd3NcIikpLm9wdGlvbihcImJsZWVwXCIsIF9fLm91dChcImNyZWF0ZWRcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKCdibGFoJywgX18ub3V0KCdrbm93cycpKS5vcHRpb24oJ2JsZWVwJywgX18ub3V0KCdjcmVhdGVkJykpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWFRsYWJlbFhfb3B0aW9uWGJsYWhfX291dFhrbm93c1hYX29wdGlvblhibGVlcF9fb3V0WGNyZWF0ZWRYWF9vcHRpb25Ybm9uZV9kaXNjYXJkWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oXCJibGFoXCIsIF9fLm91dChcImtub3dzXCIpKS5vcHRpb24oXCJibGVlcFwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oc3RyaW5nMCwgX18ub3V0KHN0cmluZzEpKS5vcHRpb24oc3RyaW5nMiwgX18ub3V0KHN0cmluZzMpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpLnZhbHVlcyhzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihULkxhYmVsKS5PcHRpb24oXCJibGFoXCIsIF9fLk91dChcImtub3dzXCIpKS5PcHRpb24oXCJibGVlcFwiLCBfXy5PdXQoXCJjcmVhdGVkXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5EaXNjYXJkKCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVC5MYWJlbCkuT3B0aW9uKFwiYmxhaFwiLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpKS5PcHRpb24oXCJibGVlcFwiLCBncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLkRpc2NhcmQoKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoVC5sYWJlbCkub3B0aW9uKFwiYmxhaFwiLCBfXy5vdXQoXCJrbm93c1wiKSkub3B0aW9uKFwiYmxlZXBcIiwgX18ub3V0KFwiY3JlYXRlZFwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShULmxhYmVsKS5vcHRpb24oJ2JsYWgnLCBfXy5vdXQoJ2tub3dzJykpLm9wdGlvbignYmxlZXAnLCBfXy5vdXQoJ2NyZWF0ZWQnKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhvdXRYa25vd3NYX2NvdW50X2lzWGd0WDBYWF9fb3V0WGtub3dzWFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KFwia25vd3NcIikuY291bnQoKS5pcyhQLmd0KDApKSxfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5vdXQoXCJrbm93c1wiKS5jb3VudCgpLmlzKFAuZ3QoMCkpLCBfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KFwia25vd3NcIikuY291bnQoKS5pcyhQLmd0KDApKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5vdXQoc3RyaW5nMCkuY291bnQoKS5pcyhQLmd0KG51bWJlcjApKSwgX18ub3V0KHN0cmluZzApKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uT3V0KFwia25vd3NcIikuQ291bnQoKS5JcyhQLkd0KDApKSwgX18uT3V0KFwia25vd3NcIikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpLkNvdW50KCkuSXMoZ3JlbWxpbmdvLlAuR3QoMCkpLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy5vdXQoXCJrbm93c1wiKS5jb3VudCgpLmlzKFAuZ3QoMCkpLCBfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLm91dChcImtub3dzXCIpLmNvdW50KCkuaXMoUC5ndCgwKSksIF9fLm91dChcImtub3dzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0KFwia25vd3NcIikuY291bnQoKS5pcyhQLmd0KDApKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLm91dCgna25vd3MnKS5jb3VudCgpLmlzXyhQLmd0KDApKSwgX18ub3V0KCdrbm93cycpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcDFYX2Nob29zZVhvdXRFWGtub3dzWF9fb3V0WGtub3dzWFhfYXNYcDJYX3NlbGVjdFhwMV9wMlhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwMVwiKS5jaG9vc2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkuYXMoXCJwMlwiKS5zZWxlY3QoXCJwMVwiLCBcInAyXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicDFcIikuY2hvb3NlKF9fLm91dEUoXCJrbm93c1wiKSwgX18ub3V0KFwia25vd3NcIikpLmFzKFwicDJcIikuc2VsZWN0KFwicDFcIiwgXCJwMlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwMVwiKS5jaG9vc2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkuYXMoXCJwMlwiKS5zZWxlY3QoXCJwMVwiLCBcInAyXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuYXMoc3RyaW5nMSkuY2hvb3NlKF9fLm91dEUoc3RyaW5nMiksIF9fLm91dChzdHJpbmcyKSkuYXMoc3RyaW5nMykuc2VsZWN0KHN0cmluZzEsIHN0cmluZzMpLmJ5KHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkFzKFwicDFcIikuQ2hvb3NlPG9iamVjdD4oX18uT3V0RShcImtub3dzXCIpLCBfXy5PdXQoXCJrbm93c1wiKSkuQXMoXCJwMlwiKS5TZWxlY3Q8b2JqZWN0PihcInAxXCIsIFwicDJcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQXMoXCJwMVwiKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5PdXRFKFwia25vd3NcIiksIGdyZW1saW5nby5UX18uT3V0KFwia25vd3NcIikpLkFzKFwicDJcIikuU2VsZWN0KFwicDFcIiwgXCJwMlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwMVwiKS5jaG9vc2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkuYXMoXCJwMlwiKS5zZWxlY3QoXCJwMVwiLCBcInAyXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwMVwiKS5jaG9vc2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkuYXMoXCJwMlwiKS5zZWxlY3QoXCJwMVwiLCBcInAyXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwMVwiKS5jaG9vc2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkuYXMoXCJwMlwiKS5zZWxlY3QoXCJwMVwiLCBcInAyXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmFzXygncDEnKS5jaG9vc2UoX18ub3V0X2UoJ2tub3dzJyksIF9fLm91dCgna25vd3MnKSkuYXNfKCdwMicpLnNlbGVjdCgncDEnLCAncDInKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYYWdlWF9fb3B0aW9uWDI3TF9fY29uc3RhbnRYeW91bmdYWF9vcHRpb25Ybm9uZV9fY29uc3RhbnRYb2xkWFhfZ3JvdXBDb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgxLCBfXy5jb25zdGFudChcInlvdW5nXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcIm9sZFwiKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoXCJ5b3VuZ1wiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJvbGRcIikpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oeHgxLCBfXy5jb25zdGFudChcInlvdW5nXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcIm9sZFwiKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oeHgxLCBfXy5jb25zdGFudChzdHJpbmcyKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoc3RyaW5nMykpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSkuT3B0aW9uKHh4MSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInlvdW5nXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5Db25zdGFudDxvYmplY3Q+KFwib2xkXCIpKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkNob29zZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkuT3B0aW9uKHh4MSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInlvdW5nXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm9sZFwiKSkuR3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbih4eDEsIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwib2xkXCIpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbih4eDEsIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwib2xkXCIpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbih4eDEsIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwib2xkXCIpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoJ3lvdW5nJykpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCdvbGQnKSkuZ3JvdXBfY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMVhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxaSkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwaSkuZm9sZCgpLCBfXy5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWkpLmNob29zZShfXy5pcyh4eDEpLCBfXy5jb25zdGFudCgxMGkpLmZvbGQoKSwgX18uZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxaSkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwaSkuZm9sZCgpLCBfXy5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChpbnRlZ2VyMCkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KGludGVnZXIxKS5mb2xkKCksIF9fLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxKS5DaG9vc2U8b2JqZWN0PihfXy5Jcyh4eDEpLCBfXy5Db25zdGFudDxvYmplY3Q+KDEwKS5Gb2xkKCksIF9fLkZvbGQ8b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDMyKDEpKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5Jcyh4eDEpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KGludDMyKDEwKSkuRm9sZCgpLCBncmVtbGluZ28uVF9fLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWkpLmNob29zZShfXy5pcyh4eDEpLCBfXy5jb25zdGFudCgxMGkpLmZvbGQoKSwgX18uZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMSkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwKS5mb2xkKCksIF9fLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmNob29zZShfXy5pcyh4eDEpLCBfXy5jb25zdGFudCgxMCkuZm9sZCgpLCBfXy5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmNob29zZShfXy5pc18oeHgxKSwgX18uY29uc3RhbnQoMTApLmZvbGQoKSwgX18uZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMlhfY2hvb3NlWGlzWDFYX19jb25zdGFudFgxMFhmb2xkX19mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgyaSkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwaSkuZm9sZCgpLCBfXy5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMmkpLmNob29zZShfXy5pcyh4eDEpLCBfXy5jb25zdGFudCgxMGkpLmZvbGQoKSwgX18uZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgyaSkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwaSkuZm9sZCgpLCBfXy5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChpbnRlZ2VyMCkuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KGludGVnZXIxKS5mb2xkKCksIF9fLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigyKS5DaG9vc2U8b2JqZWN0PihfXy5Jcyh4eDEpLCBfXy5Db25zdGFudDxvYmplY3Q+KDEwKS5Gb2xkKCksIF9fLkZvbGQ8b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDMyKDIpKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5Jcyh4eDEpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KGludDMyKDEwKSkuRm9sZCgpLCBncmVtbGluZ28uVF9fLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMmkpLmNob29zZShfXy5pcyh4eDEpLCBfXy5jb25zdGFudCgxMGkpLmZvbGQoKSwgX18uZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMikuY2hvb3NlKF9fLmlzKHh4MSksIF9fLmNvbnN0YW50KDEwKS5mb2xkKCksIF9fLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDIpLmNob29zZShfXy5pcyh4eDEpLCBfXy5jb25zdGFudCgxMCkuZm9sZCgpLCBfXy5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDIpLmNob29zZShfXy5pc18oeHgxKSwgX18uY29uc3RhbnQoMTApLmZvbGQoKSwgX18uZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9jb25zdGFudFh4WFhfb3B0aW9uWGJldHdlZW5YMjBfMzBYX2NvbnN0YW50WHlYWF9vcHRpb25Ybm9uZV9jb25zdGFudFh6WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy5jb25zdGFudChcInhcIikpLm9wdGlvbihQLmJldHdlZW4oMjAsIDMwKSwgX18uY29uc3RhbnQoXCJ5XCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy5jb25zdGFudChcInhcIikpLm9wdGlvbihQLmJldHdlZW4oMjAsIDMwKSwgX18uY29uc3RhbnQoXCJ5XCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18uY29uc3RhbnQoXCJ4XCIpKS5vcHRpb24oUC5iZXR3ZWVuKDIwLCAzMCksIF9fLmNvbnN0YW50KFwieVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJ6XCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcxKSkub3B0aW9uKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSwgX18uY29uc3RhbnQoc3RyaW5nMikpLm9wdGlvbihQLmJldHdlZW4obnVtYmVyMiwgbnVtYmVyMSksIF9fLmNvbnN0YW50KHN0cmluZzMpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkJldHdlZW4oMjYsIDMwKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInhcIikpLk9wdGlvbihQLkJldHdlZW4oMjAsIDMwKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInlcIikpLk9wdGlvbihQaWNrLk5vbmUsIF9fLkNvbnN0YW50PG9iamVjdD4oXCJ6XCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkNob29zZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QLkJldHdlZW4oMjYsIDMwKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInhcIikpLk9wdGlvbihncmVtbGluZ28uUC5CZXR3ZWVuKDIwLCAzMCksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJ5XCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18uY29uc3RhbnQoXCJ4XCIpKS5vcHRpb24oUC5iZXR3ZWVuKDIwLCAzMCksIF9fLmNvbnN0YW50KFwieVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJ6XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy5jb25zdGFudChcInhcIikpLm9wdGlvbihQLmJldHdlZW4oMjAsIDMwKSwgX18uY29uc3RhbnQoXCJ5XCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLmNvbnN0YW50KFwieFwiKSkub3B0aW9uKFAuYmV0d2VlbigyMCwgMzApLCBfXy5jb25zdGFudChcInlcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwielwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy5jb25zdGFudCgneCcpKS5vcHRpb24oUC5iZXR3ZWVuKDIwLCAzMCksIF9fLmNvbnN0YW50KCd5JykpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KCd6JykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX29yWGd0WDM0WFhfY29uc3RhbnRYeFhYX29wdGlvblhndFgzNFhfY29uc3RhbnRYeVhYX29wdGlvblhub25lX2NvbnN0YW50WHpYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCkub3IoUC5ndCgzNCkpLCBfXy5jb25zdGFudChcInhcIikpLm9wdGlvbihQLmd0KDM0KSwgX18uY29uc3RhbnQoXCJ5XCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLm9yKFAuZ3QoMzQpKSwgX18uY29uc3RhbnQoXCJ4XCIpKS5vcHRpb24oUC5ndCgzNCksIF9fLmNvbnN0YW50KFwieVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJ6XCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCkub3IoUC5ndCgzNCkpLCBfXy5jb25zdGFudChcInhcIikpLm9wdGlvbihQLmd0KDM0KSwgX18uY29uc3RhbnQoXCJ5XCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUC5iZXR3ZWVuKG51bWJlcjAsIG51bWJlcjEpLm9yKFAuZ3QobnVtYmVyMikpLCBfXy5jb25zdGFudChzdHJpbmcyKSkub3B0aW9uKFAuZ3QobnVtYmVyMiksIF9fLmNvbnN0YW50KHN0cmluZzMpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkJldHdlZW4oMjYsIDMwKS5PcihQLkd0KDM0KSksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJ4XCIpKS5PcHRpb24oUC5HdCgzNCksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJ5XCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5Db25zdGFudDxvYmplY3Q+KFwielwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbihncmVtbGluZ28uUC5CZXR3ZWVuKDI2LCAzMCkuT3IoZ3JlbWxpbmdvLlAuR3QoMzQpKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInhcIikpLk9wdGlvbihncmVtbGluZ28uUC5HdCgzNCksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJ5XCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInpcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKS5vcihQLmd0KDM0KSksIF9fLmNvbnN0YW50KFwieFwiKSkub3B0aW9uKFAuZ3QoMzQpLCBfXy5jb25zdGFudChcInlcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwielwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKS5vcihQLmd0KDM0KSksIF9fLmNvbnN0YW50KFwieFwiKSkub3B0aW9uKFAuZ3QoMzQpLCBfXy5jb25zdGFudChcInlcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwielwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKS5vcihQLmd0KDM0KSksIF9fLmNvbnN0YW50KFwieFwiKSkub3B0aW9uKFAuZ3QoMzQpLCBfXy5jb25zdGFudChcInlcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwielwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLm9yXyhQLmd0KDM0KSksIF9fLmNvbnN0YW50KCd4JykpLm9wdGlvbihQLmd0KDM0KSwgX18uY29uc3RhbnQoJ3knKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoJ3onKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lWF9vcHRpb25Ybm9uZV9uYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUC5iZXR3ZWVuKG51bWJlcjAsIG51bWJlcjEpLCBfXy52YWx1ZXMoc3RyaW5nMikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkJldHdlZW4oMjYsIDMwKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlAuQmV0d2VlbigyNiwgMzApLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoJ25hbWUnKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWGhhc0xhYmVsWHBlcnNvblhfbG9jYWxYY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVfZm9sZFhfb3B0aW9uWG5vbmVfbmFtZV9mb2xkWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcxKSkub3B0aW9uKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSwgX18udmFsdWVzKHN0cmluZzIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKHN0cmluZzIpLmZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsPG9iamVjdD4oX18uQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkJldHdlZW4oMjYsIDMwKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbihncmVtbGluZ28uUC5CZXR3ZWVuKDI2LCAzMCksIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmxvY2FsKF9fLmNob29zZShfXy52YWx1ZXMoJ2FnZScpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCduYW1lJykuZm9sZCgpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYaGFzTGFiZWxYcGVyc29uWF9tYXBYY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVfZm9sZFhfb3B0aW9uWG5vbmVfbmFtZV9mb2xkWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubWFwKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkubWFwKF9fLmNob29zZShfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbihQLmJldHdlZW4obnVtYmVyMCwgbnVtYmVyMSksIF9fLnZhbHVlcyhzdHJpbmcyKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhzdHJpbmcyKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5NYXA8b2JqZWN0PihfXy5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSkuT3B0aW9uKFAuQmV0d2VlbigyNiwgMzApLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKS5PcHRpb24oUGljay5Ob25lLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5NYXAoZ3JlbWxpbmdvLlRfXy5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbihncmVtbGluZ28uUC5CZXR3ZWVuKDI2LCAzMCksIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubWFwKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm1hcChfXy5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLm1hcChfXy5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3VuaW9uWFZfVlhoYXNMYWJlbFhwZXJzb25YX2JhcnJpZXJfbG9jYWxYY2hvb3NlWGFnZVhfb3B0aW9uWGJldHdlZW5YMjZfMzBYX25hbWVfZm9sZFhfb3B0aW9uWG5vbmVfbmFtZV9mb2xkWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzTGFiZWwoXCJwZXJzb25cIikuYmFycmllcigpLmxvY2FsKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNMYWJlbChcInBlcnNvblwiKS5iYXJyaWVyKCkubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNMYWJlbChcInBlcnNvblwiKS5iYXJyaWVyKCkubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzTGFiZWwoc3RyaW5nMCkuYmFycmllcigpLmxvY2FsKF9fLmNob29zZShfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbihQLmJldHdlZW4obnVtYmVyMCwgbnVtYmVyMSksIF9fLnZhbHVlcyhzdHJpbmcyKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhzdHJpbmcyKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlVuaW9uPG9iamVjdD4oX18uVigpLCBfXy5WKCkpLkhhc0xhYmVsKFwicGVyc29uXCIpLkJhcnJpZXIoKS5Mb2NhbDxvYmplY3Q+KF9fLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUC5CZXR3ZWVuKDI2LCAzMCksIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpLk9wdGlvbihQaWNrLk5vbmUsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVW5pb24oZ3JlbWxpbmdvLlRfXy5WKCksIGdyZW1saW5nby5UX18uVigpKS5IYXNMYWJlbChcInBlcnNvblwiKS5CYXJyaWVyKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbihncmVtbGluZ28uUC5CZXR3ZWVuKDI2LCAzMCksIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzTGFiZWwoXCJwZXJzb25cIikuYmFycmllcigpLmxvY2FsKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcudW5pb24oX18uVigpLCBfXy5WKCkpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJhcnJpZXIoKS5sb2NhbChfXy5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNMYWJlbChcInBlcnNvblwiKS5iYXJyaWVyKCkubG9jYWwoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmJhcnJpZXIoKS5sb2NhbChfXy5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3VuaW9uWFZfVlhoYXNMYWJlbFhwZXJzb25YX2JhcnJpZXJfbWFwWGNob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lX2ZvbGRYX29wdGlvblhub25lX25hbWVfZm9sZFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oX18uVigpLCBfXy5WKCkpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJhcnJpZXIoKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcudW5pb24oX18uVigpLCBfXy5WKCkpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJhcnJpZXIoKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNMYWJlbChcInBlcnNvblwiKS5iYXJyaWVyKCkubWFwKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uVigpLCBfXy5WKCkpLmhhc0xhYmVsKHN0cmluZzApLmJhcnJpZXIoKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcxKSkub3B0aW9uKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSwgX18udmFsdWVzKHN0cmluZzIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKHN0cmluZzIpLmZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVW5pb248b2JqZWN0PihfXy5WKCksIF9fLlYoKSkuSGFzTGFiZWwoXCJwZXJzb25cIikuQmFycmllcigpLk1hcDxvYmplY3Q+KF9fLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUC5CZXR3ZWVuKDI2LCAzMCksIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpLk9wdGlvbihQaWNrLk5vbmUsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVW5pb24oZ3JlbWxpbmdvLlRfXy5WKCksIGdyZW1saW5nby5UX18uVigpKS5IYXNMYWJlbChcInBlcnNvblwiKS5CYXJyaWVyKCkuTWFwKGdyZW1saW5nby5UX18uQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlAuQmV0d2VlbigyNiwgMzApLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18uVigpLCBfXy5WKCkpLmhhc0xhYmVsKFwicGVyc29uXCIpLmJhcnJpZXIoKS5tYXAoX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzTGFiZWwoXCJwZXJzb25cIikuYmFycmllcigpLm1hcChfXy5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLlYoKSwgX18uVigpKS5oYXNMYWJlbChcInBlcnNvblwiKS5iYXJyaWVyKCkubWFwKF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy5WKCksIF9fLlYoKSkuaGFzX2xhYmVsKCdwZXJzb24nKS5iYXJyaWVyKCkubWFwKF9fLmNob29zZShfXy52YWx1ZXMoJ2FnZScpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygnbmFtZScpLmZvbGQoKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCduYW1lJykuZm9sZCgpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZVhfb3B0aW9uWG5vbmVfbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcwKSkub3B0aW9uKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSwgX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUC5CZXR3ZWVuKDI2LCAzMCksIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QLkJldHdlZW4oMjYsIDMwKSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoJ2FnZScpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygnbmFtZScpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoJ25hbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYYWdlWF9vcHRpb25YYmV0d2VlblgyNl8zMFhfbmFtZVhfb3B0aW9uWG5vbmVfbmFtZVhfb3B0aW9uWHVucHJvZHVjdGl2ZV9sYWJlbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcwKSkub3B0aW9uKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSwgX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18ubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkJldHdlZW4oMjYsIDMwKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLk9wdGlvbihQaWNrLlVucHJvZHVjdGl2ZSwgX18uTGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbihncmVtbGluZ28uUC5CZXR3ZWVuKDI2LCAzMCksIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QaWNrLk5vbmUsIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QaWNrLlVucHJvZHVjdGl2ZSwgZ3JlbWxpbmdvLlRfXy5MYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18ubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoJ2FnZScpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygnbmFtZScpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoJ25hbWUnKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lWF9vcHRpb25Ybm9uZV9uYW1lWF9vcHRpb25Ybm9uZV9pZGVudGl0eVhfb3B0aW9uWG5vbmVfZmFpbFhfb3B0aW9uWHVucHJvZHVjdGl2ZV9pZGVudGl0eVhfb3B0aW9uWHVucHJvZHVjdGl2ZV9sYWJlbFhfb3B0aW9uWG5vbmVfZmFpbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS5vcHRpb24oUGljay5ub25lLCBfXy5mYWlsKCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18ubGFiZWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5pZGVudGl0eSgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmZhaWwoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmZhaWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmZhaWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcwKSkub3B0aW9uKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSwgX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmZhaWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSkuT3B0aW9uKFAuQmV0d2VlbigyNiwgMzApLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLk9wdGlvbihQaWNrLk5vbmUsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uSWRlbnRpdHkoKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uRmFpbCgpKS5PcHRpb24oUGljay5VbnByb2R1Y3RpdmUsIF9fLkxhYmVsKCkpLk9wdGlvbihQaWNrLlVucHJvZHVjdGl2ZSwgX18uSWRlbnRpdHkoKSkuT3B0aW9uKFBpY2suVW5wcm9kdWN0aXZlLCBfXy5GYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlAuQmV0d2VlbigyNiwgMzApLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLkZhaWwoKSkuT3B0aW9uKGdyZW1saW5nby5QaWNrLlVucHJvZHVjdGl2ZSwgZ3JlbWxpbmdvLlRfXy5MYWJlbCgpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suVW5wcm9kdWN0aXZlLCBncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLk9wdGlvbihncmVtbGluZ28uUGljay5VbnByb2R1Y3RpdmUsIGdyZW1saW5nby5UX18uRmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmZhaWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5sYWJlbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmlkZW50aXR5KCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5pZGVudGl0eSgpKS5vcHRpb24oUGljay5ub25lLCBfXy5mYWlsKCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18ubGFiZWwoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5pZGVudGl0eSgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmZhaWwoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkub3B0aW9uKFBpY2subm9uZSwgX18uZmFpbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmxhYmVsKCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uaWRlbnRpdHkoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5mYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoJ2FnZScpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcygnbmFtZScpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoJ25hbWUnKSkub3B0aW9uKFBpY2subm9uZSwgX18uaWRlbnRpdHkoKSkub3B0aW9uKFBpY2subm9uZSwgX18uZmFpbCgpKS5vcHRpb24oUGljay51bnByb2R1Y3RpdmUsIF9fLmxhYmVsKCkpLm9wdGlvbihQaWNrLnVucHJvZHVjdGl2ZSwgX18uaWRlbnRpdHkoKSkub3B0aW9uKFBpY2sudW5wcm9kdWN0aXZlLCBfXy5mYWlsKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWGFnZV9uYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzApLCBfXy52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygnYWdlJyksIF9fLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhhZ2VYX29wdGlvblhiZXR3ZWVuWDI2XzMwWF9uYW1lWF9vcHRpb25Ybm9uZV9kaXNjYXJkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzApKS5vcHRpb24oUC5iZXR3ZWVuKG51bWJlcjAsIG51bWJlcjEpLCBfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkJldHdlZW4oMjYsIDMwKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5EaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlAuQmV0d2VlbigyNiwgMzApLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLkRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5kaXNjYXJkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5iZXR3ZWVuKDI2LCAzMCksIF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmRpc2NhcmQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmJldHdlZW4oMjYsIDMwKSwgX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFAuYmV0d2VlbigyNiwgMzApLCBfXy52YWx1ZXMoJ25hbWUnKSkub3B0aW9uKFBpY2subm9uZSwgX18uZGlzY2FyZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhuYW1lWF9vcHRpb25YbmVxWHlYX2FnZVhfb3B0aW9uWG5vbmVfY29uc3RhbnRYeFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUC5uZXEoXCJ5XCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFAubmVxKFwieVwiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInhcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUC5uZXEoXCJ5XCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoc3RyaW5nMCkpLm9wdGlvbihQLm5lcShzdHJpbmcxKSwgX18udmFsdWVzKHN0cmluZzIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChzdHJpbmczKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKS5PcHRpb24oUC5OZXEoXCJ5XCIpLCBfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInhcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QLk5lcShcInlcIiksIGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInhcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUC5uZXEoXCJ5XCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUC5uZXEoXCJ5XCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUC5uZXEoXCJ5XCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygnbmFtZScpKS5vcHRpb24oUC5uZXEoJ3knKSwgX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoJ3gnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2Nob29zZVhvdXRYY3JlYXRlZFhfY291bnRfaXNYZXFYMFhYX19jb25zdGFudFhkaWRudF9jcmVhdGVYX19jb25zdGFudFhjcmVhdGVkWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLm91dChcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDApKSxfXy5jb25zdGFudChcImRpZG50X2NyZWF0ZVwiKSxfXy5jb25zdGFudChcImNyZWF0ZWRcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLm91dChcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDApKSwgX18uY29uc3RhbnQoXCJkaWRudF9jcmVhdGVcIiksIF9fLmNvbnN0YW50KFwiY3JlYXRlZFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLm91dChcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDApKSwgX18uY29uc3RhbnQoXCJkaWRudF9jcmVhdGVcIiksIF9fLmNvbnN0YW50KFwiY3JlYXRlZFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmNob29zZShfXy5vdXQoc3RyaW5nMSkuY291bnQoKS5pcyhQLmVxKG51bWJlcjApKSwgX18uY29uc3RhbnQoc3RyaW5nMiksIF9fLmNvbnN0YW50KHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5DaG9vc2U8b2JqZWN0PihfXy5PdXQoXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoUC5FcSgwKSksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJkaWRudF9jcmVhdGVcIiksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJjcmVhdGVkXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkNob29zZShncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikuQ291bnQoKS5JcyhncmVtbGluZ28uUC5FcSgwKSksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJkaWRudF9jcmVhdGVcIiksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJjcmVhdGVkXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18ub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZXEoMCkpLCBfXy5jb25zdGFudChcImRpZG50X2NyZWF0ZVwiKSwgX18uY29uc3RhbnQoXCJjcmVhdGVkXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLm91dChcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDApKSwgX18uY29uc3RhbnQoXCJkaWRudF9jcmVhdGVcIiksIF9fLmNvbnN0YW50KFwiY3JlYXRlZFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoUC5lcSgwKSksIF9fLmNvbnN0YW50KFwiZGlkbnRfY3JlYXRlXCIpLCBfXy5jb25zdGFudChcImNyZWF0ZWRcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuY2hvb3NlKF9fLm91dCgnY3JlYXRlZCcpLmNvdW50KCkuaXNfKFAuZXEoMCkpLCBfXy5jb25zdGFudCgnZGlkbnRfY3JlYXRlJyksIF9fLmNvbnN0YW50KCdjcmVhdGVkJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYdmFsdWVzWGFnZVhfaXNYZ3RYMzBYWF9fdmFsdWVzWGFnZVhfX2NvbnN0YW50WDMwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDMwKSksX18udmFsdWVzKFwiYWdlXCIpLF9fLmNvbnN0YW50KDMwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMzApKSwgX18udmFsdWVzKFwiYWdlXCIpLCBfXy5jb25zdGFudCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgzMCkpLCBfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLmNvbnN0YW50KDMwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmNob29zZShfXy52YWx1ZXMoc3RyaW5nMSkuaXMoUC5ndChudW1iZXIwKSksIF9fLnZhbHVlcyhzdHJpbmcxKSwgX18uY29uc3RhbnQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuR3QoMzApKSwgX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIiksIF9fLkNvbnN0YW50PG9iamVjdD4oMzApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkNob29zZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5HdCgzMCkpLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgzMCkpLCBfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLmNvbnN0YW50KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgzMCkpLCBfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLmNvbnN0YW50KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgzMCkpLCBfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLmNvbnN0YW50KDMwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKS5pc18oUC5ndCgzMCkpLCBfXy52YWx1ZXMoJ2FnZScpLCBfXy5jb25zdGFudCgzMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYdmFsdWVzWGFnZVhfaXNYZ3RYMjlYWF9hbmRfdmFsdWVzWGFnZVhfaXNYbHRYMzVYWF9fdmFsdWVzWG5hbWVYX19jb25zdGFudFhvdGhlclhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLmFuZCgpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0KDM1KSksX18udmFsdWVzKFwibmFtZVwiKSxfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLmFuZCgpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0KDM1KSksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLmFuZCgpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0KDM1KSksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzEpLmlzKFAuZ3QobnVtYmVyMCkpLmFuZCgpLnZhbHVlcyhzdHJpbmcxKS5pcyhQLmx0KG51bWJlcjEpKSwgX18udmFsdWVzKHN0cmluZzIpLCBfXy5jb25zdGFudChzdHJpbmczKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5HdCgyOSkpLkFuZCgpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuTHQoMzUpKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLCBfXy5Db25zdGFudDxvYmplY3Q+KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLkd0KDI5KSkuQW5kKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLkx0KDM1KSksIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMjkpKS5hbmQoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5sdCgzNSkpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSkuYW5kKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAubHQoMzUpKSwgX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLmFuZCgpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0KDM1KSksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuY2hvb3NlKF9fLnZhbHVlcygnYWdlJykuaXNfKFAuZ3QoMjkpKS5hbmRfKCkudmFsdWVzKCdhZ2UnKS5pc18oUC5sdCgzNSkpLCBfXy52YWx1ZXMoJ25hbWUnKSwgX18uY29uc3RhbnQoJ290aGVyJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWGhhc1huYW1lX3ZhZGFzWF9fdmFsdWVzWG5hbWVYX192YWx1ZXNYYWdlWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSxfXy52YWx1ZXMoXCJuYW1lXCIpLF9fLnZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLnZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5oYXMoc3RyaW5nMCwgc3RyaW5nMSksIF9fLnZhbHVlcyhzdHJpbmcwKSwgX18udmFsdWVzKHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihfXy5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSwgX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIiksIGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShfXy5oYXMoJ25hbWUnLCAndmFkYXMnKSwgX18udmFsdWVzKCduYW1lJyksIF9fLnZhbHVlcygnYWdlJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYb3V0WGNyZWF0ZWRYX2NvdW50WF9vcHRpb25YMF9fY29uc3RhbnRYbm9uZVhYX29wdGlvblgxX19jb25zdGFudFhvbmVYWF9vcHRpb25YMl9fY29uc3RhbnRYbWFueVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoXCJvbmVcIikpLm9wdGlvbih4eDIsIF9fLmNvbnN0YW50KFwibWFueVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18ub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpKS5vcHRpb24oeHgwLCBfXy5jb25zdGFudChcIm5vbmVcIikpLm9wdGlvbih4eDEsIF9fLmNvbnN0YW50KFwib25lXCIpKS5vcHRpb24oeHgyLCBfXy5jb25zdGFudChcIm1hbnlcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoXCJvbmVcIikpLm9wdGlvbih4eDIsIF9fLmNvbnN0YW50KFwibWFueVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmNob29zZShfXy5vdXQoc3RyaW5nMSkuY291bnQoKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoc3RyaW5nMikpLm9wdGlvbih4eDEsIF9fLmNvbnN0YW50KHN0cmluZzMpKS5vcHRpb24oeHgyLCBfXy5jb25zdGFudChzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlPG9iamVjdD4oX18uT3V0KFwiY3JlYXRlZFwiKS5Db3VudCgpKS5PcHRpb24oeHgwLCBfXy5Db25zdGFudDxvYmplY3Q+KFwibm9uZVwiKSkuT3B0aW9uKHh4MSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm9uZVwiKSkuT3B0aW9uKHh4MiwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm1hbnlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlKGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKS5Db3VudCgpKS5PcHRpb24oeHgwLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwibm9uZVwiKSkuT3B0aW9uKHh4MSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm9uZVwiKSkuT3B0aW9uKHh4MiwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm1hbnlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoXCJvbmVcIikpLm9wdGlvbih4eDIsIF9fLmNvbnN0YW50KFwibWFueVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoXCJvbmVcIikpLm9wdGlvbih4eDIsIF9fLmNvbnN0YW50KFwibWFueVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoXCJvbmVcIikpLm9wdGlvbih4eDIsIF9fLmNvbnN0YW50KFwibWFueVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18ub3V0KCdjcmVhdGVkJykuY291bnQoKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoJ25vbmUnKSkub3B0aW9uKHh4MSwgX18uY29uc3RhbnQoJ29uZScpKS5vcHRpb24oeHgyLCBfXy5jb25zdGFudCgnbWFueScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWGxvY2FsWG91dFhrbm93c1hfY291bnRYX19vcHRpb25YMF9fY29uc3RhbnRYbm9GcmllbmRzWFhfX29wdGlvblhub25lX19jb25zdGFudFhoYXNGcmllbmRzWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5jb3VudCgpKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoXCJub0ZyaWVuZHNcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwiaGFzRnJpZW5kc1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18ubG9jYWwoX18ub3V0KFwia25vd3NcIikuY291bnQoKSkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9GcmllbmRzXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcImhhc0ZyaWVuZHNcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5jb3VudCgpKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoXCJub0ZyaWVuZHNcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwiaGFzRnJpZW5kc1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmNob29zZShfXy5sb2NhbChfXy5vdXQoc3RyaW5nMSkuY291bnQoKSkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KHN0cmluZzIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChzdHJpbmczKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlPG9iamVjdD4oX18uTG9jYWw8b2JqZWN0PihfXy5PdXQoXCJrbm93c1wiKS5Db3VudCgpKSkuT3B0aW9uKHh4MCwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm5vRnJpZW5kc1wiKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcImhhc0ZyaWVuZHNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlKGdyZW1saW5nby5UX18uTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKS5Db3VudCgpKSkuT3B0aW9uKHh4MCwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm5vRnJpZW5kc1wiKSkuT3B0aW9uKGdyZW1saW5nby5QaWNrLk5vbmUsIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJoYXNGcmllbmRzXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18ubG9jYWwoX18ub3V0KFwia25vd3NcIikuY291bnQoKSkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9GcmllbmRzXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcImhhc0ZyaWVuZHNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18ubG9jYWwoX18ub3V0KFwia25vd3NcIikuY291bnQoKSkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9GcmllbmRzXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcImhhc0ZyaWVuZHNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18ubG9jYWwoX18ub3V0KFwia25vd3NcIikuY291bnQoKSkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9GcmllbmRzXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcImhhc0ZyaWVuZHNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuY2hvb3NlKF9fLmxvY2FsKF9fLm91dCgna25vd3MnKS5jb3VudCgpKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoJ25vRnJpZW5kcycpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgnaGFzRnJpZW5kcycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhvdXRFX2NvdW50WF9vcHRpb25YMF9fY29uc3RhbnRYbm9uZVhYX29wdGlvblhub25lX19jb25zdGFudFhzb21lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpKS5vcHRpb24oeHgwLCBfXy5jb25zdGFudChcIm5vbmVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwic29tZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJzb21lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJzb21lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpKS5vcHRpb24oeHgwLCBfXy5jb25zdGFudChzdHJpbmcwKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLk91dEUoKS5Db3VudCgpKS5PcHRpb24oeHgwLCBfXy5Db25zdGFudDxvYmplY3Q+KFwibm9uZVwiKSkuT3B0aW9uKFBpY2suTm9uZSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInNvbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uT3V0RSgpLkNvdW50KCkpLk9wdGlvbih4eDAsIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJub25lXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInNvbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy5vdXRFKCkuY291bnQoKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoXCJub25lXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInNvbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkpLm9wdGlvbih4eDAsIF9fLmNvbnN0YW50KFwibm9uZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJzb21lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpKS5vcHRpb24oeHgwLCBfXy5jb25zdGFudChcIm5vbmVcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwic29tZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLm91dF9lKCkuY291bnQoKSkub3B0aW9uKHh4MCwgX18uY29uc3RhbnQoJ25vbmUnKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoJ3NvbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYbGFiZWxYX29wdGlvblhwZXJzb25fX2Nob29zZVhhZ2VYX29wdGlvblhQX2x0XzMwX19jb25zdGFudFh5b3VuZ1hYX29wdGlvblhQX2d0ZV8zMF9fY29uc3RhbnRYb2xkWFhYX29wdGlvblhzb2Z0d2FyZV9fY29uc3RhbnRYcHJvZ3JhbVhYX29wdGlvblhub25lX19jb25zdGFudFh1bmtub3duWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbihcInBlcnNvblwiLCBfXy5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5sdCgzMCksIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQLmd0ZSgzMCksIF9fLmNvbnN0YW50KFwib2xkXCIpKSkub3B0aW9uKFwic29mdHdhcmVcIiwgX18uY29uc3RhbnQoXCJwcm9ncmFtXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInVua25vd25cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbihcInBlcnNvblwiLCBfXy5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5sdCgzMCksIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQLmd0ZSgzMCksIF9fLmNvbnN0YW50KFwib2xkXCIpKSkub3B0aW9uKFwic29mdHdhcmVcIiwgX18uY29uc3RhbnQoXCJwcm9ncmFtXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInVua25vd25cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpKS5vcHRpb24oXCJwZXJzb25cIiwgX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAubHQoMzApLCBfXy5jb25zdGFudChcInlvdW5nXCIpKS5vcHRpb24oUC5ndGUoMzApLCBfXy5jb25zdGFudChcIm9sZFwiKSkpLm9wdGlvbihcInNvZnR3YXJlXCIsIF9fLmNvbnN0YW50KFwicHJvZ3JhbVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJ1bmtub3duXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbihzdHJpbmcwLCBfXy5jaG9vc2UoX18udmFsdWVzKHN0cmluZzEpKS5vcHRpb24oUC5sdChudW1iZXIwKSwgX18uY29uc3RhbnQoc3RyaW5nMikpLm9wdGlvbihQLmd0ZShudW1iZXIwKSwgX18uY29uc3RhbnQoc3RyaW5nMykpKS5vcHRpb24oc3RyaW5nNCwgX18uY29uc3RhbnQoc3RyaW5nNSkpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KHN0cmluZzYpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihfXy5MYWJlbCgpKS5PcHRpb24oXCJwZXJzb25cIiwgX18uQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikpLk9wdGlvbihQLkx0KDMwKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInlvdW5nXCIpKS5PcHRpb24oUC5HdGUoMzApLCBfXy5Db25zdGFudDxvYmplY3Q+KFwib2xkXCIpKSkuT3B0aW9uKFwic29mdHdhcmVcIiwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInByb2dyYW1cIikpLk9wdGlvbihQaWNrLk5vbmUsIF9fLkNvbnN0YW50PG9iamVjdD4oXCJ1bmtub3duXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVF9fLkxhYmVsKCkpLk9wdGlvbihcInBlcnNvblwiLCBncmVtbGluZ28uVF9fLkNob29zZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QLkx0KDMwKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInlvdW5nXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlAuR3RlKDMwKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm9sZFwiKSkpLk9wdGlvbihcInNvZnR3YXJlXCIsIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJwcm9ncmFtXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInVua25vd25cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy5sYWJlbCgpKS5vcHRpb24oXCJwZXJzb25cIiwgX18uY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFAubHQoMzApLCBfXy5jb25zdGFudChcInlvdW5nXCIpKS5vcHRpb24oUC5ndGUoMzApLCBfXy5jb25zdGFudChcIm9sZFwiKSkpLm9wdGlvbihcInNvZnR3YXJlXCIsIF9fLmNvbnN0YW50KFwicHJvZ3JhbVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18uY29uc3RhbnQoXCJ1bmtub3duXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbihcInBlcnNvblwiLCBfXy5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUC5sdCgzMCksIF9fLmNvbnN0YW50KFwieW91bmdcIikpLm9wdGlvbihQLmd0ZSgzMCksIF9fLmNvbnN0YW50KFwib2xkXCIpKSkub3B0aW9uKFwic29mdHdhcmVcIiwgX18uY29uc3RhbnQoXCJwcm9ncmFtXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudChcInVua25vd25cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18ubGFiZWwoKSkub3B0aW9uKFwicGVyc29uXCIsIF9fLmNob29zZShfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQLmx0KDMwKSwgX18uY29uc3RhbnQoXCJ5b3VuZ1wiKSkub3B0aW9uKFAuZ3RlKDMwKSwgX18uY29uc3RhbnQoXCJvbGRcIikpKS5vcHRpb24oXCJzb2Z0d2FyZVwiLCBfXy5jb25zdGFudChcInByb2dyYW1cIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLmNvbnN0YW50KFwidW5rbm93blwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkpLm9wdGlvbigncGVyc29uJywgX18uY2hvb3NlKF9fLnZhbHVlcygnYWdlJykpLm9wdGlvbihQLmx0KDMwKSwgX18uY29uc3RhbnQoJ3lvdW5nJykpLm9wdGlvbihQLmd0ZSgzMCksIF9fLmNvbnN0YW50KCdvbGQnKSkpLm9wdGlvbignc29mdHdhcmUnLCBfXy5jb25zdGFudCgncHJvZ3JhbScpKS5vcHRpb24oUGljay5ub25lLCBfXy5jb25zdGFudCgndW5rbm93bicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhoYXNYbmFtZV92YWRhc1hfX3ZhbHVlc1huYW1lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSxfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKHN0cmluZzAsIHN0cmluZzEpLCBfXy52YWx1ZXMoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNob29zZShfXy5oYXMoJ25hbWUnLCAndmFkYXMnKSwgX18udmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9hZ2VfY2hvb3NlWFBfZXFYMjlYX2NvbnN0YW50WG1hdGNoZWRYX2NvbnN0YW50WG90aGVyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmNob29zZShQLmVxKDI5KSxfXy5jb25zdGFudChcIm1hdGNoZWRcIiksX18uY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudChcIm1hdGNoZWRcIiksIF9fLmNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5jaG9vc2UoUC5lcSgyOSksIF9fLmNvbnN0YW50KFwibWF0Y2hlZFwiKSwgX18uY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5jaG9vc2UoUC5lcShudW1iZXIwKSwgX18uY29uc3RhbnQoc3RyaW5nMiksIF9fLmNvbnN0YW50KHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5DaG9vc2U8b2JqZWN0PihQLkVxKDI5KSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm1hdGNoZWRcIiksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXMoXCJhZ2VcIikuQ2hvb3NlKGdyZW1saW5nby5QLkVxKDI5KSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm1hdGNoZWRcIiksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmNob29zZShQLmVxKDI5KSwgX18uY29uc3RhbnQoXCJtYXRjaGVkXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmNob29zZShQLmVxKDI5KSwgX18uY29uc3RhbnQoXCJtYXRjaGVkXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmNob29zZShQLmVxKDI5KSwgX18uY29uc3RhbnQoXCJtYXRjaGVkXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnYWdlJykuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudCgnbWF0Y2hlZCcpLCBfXy5jb25zdGFudCgnb3RoZXInKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2FnZV9jaG9vc2VYUF9lcVgyOVhfY29uc3RhbnRYbWF0Y2hlZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmNob29zZShQLmVxKDI5KSxfXy5jb25zdGFudChcIm1hdGNoZWRcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmNob29zZShQLmVxKDI5KSwgX18uY29uc3RhbnQoXCJtYXRjaGVkXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudChcIm1hdGNoZWRcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuY2hvb3NlKFAuZXEobnVtYmVyMCksIF9fLmNvbnN0YW50KHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5DaG9vc2U8b2JqZWN0PihQLkVxKDI5KSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm1hdGNoZWRcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwiYWdlXCIpLkNob29zZShncmVtbGluZ28uUC5FcSgyOSksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJtYXRjaGVkXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudChcIm1hdGNoZWRcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudChcIm1hdGNoZWRcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuY2hvb3NlKFAuZXEoMjkpLCBfXy5jb25zdGFudChcIm1hdGNoZWRcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCdhZ2UnKS5jaG9vc2UoUC5lcSgyOSksIF9fLmNvbnN0YW50KCdtYXRjaGVkJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9jaG9vc2VYX3ZhbHVlc1huYW1lWF9vcHRpb24xWF9pc1htYXJrb1hfdmFsdWVzWGFnZVhYX29wdGlvbjJYbm9uZV92YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZSh2YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oaXMoXCJtYXJrb1wiKSwgdmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCB2YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oX18uaXMoXCJtYXJrb1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKF9fLmlzKFwibWFya29cIiksIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmNob29zZShfXy52YWx1ZXMoc3RyaW5nMSkpLm9wdGlvbihfXy5pcyhzdHJpbmcyKSwgX18udmFsdWVzKHN0cmluZzMpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkNob29zZTxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuT3B0aW9uKF9fLklzKFwibWFya29cIiksIF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuT3B0aW9uKGdyZW1saW5nby5UX18uSXMoXCJtYXJrb1wiKSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpLk9wdGlvbihncmVtbGluZ28uUGljay5Ob25lLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oX18uaXMoXCJtYXJrb1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihfXy5pcyhcIm1hcmtvXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKF9fLmlzKFwibWFya29cIiksIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jaG9vc2UoX18udmFsdWVzKCduYW1lJykpLm9wdGlvbihfXy5pc18oJ21hcmtvJyksIF9fLnZhbHVlcygnYWdlJykpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfY2hvb3NlWF92YWx1ZXNYbmFtZVhfb3B0aW9uMVhfUGVxWG1hcmtvWF92YWx1ZXNYYWdlWFhfb3B0aW9uMlhub25lX3ZhbHVlc1huYW1lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKHZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQLmVxKFwibWFya29cIiksIHZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFBpY2subm9uZSwgdmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFAuZXEoXCJtYXJrb1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFAuZXEoXCJtYXJrb1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcxKSkub3B0aW9uKFAuZXEoc3RyaW5nMiksIF9fLnZhbHVlcyhzdHJpbmczKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5DaG9vc2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLk9wdGlvbihQLkVxKFwibWFya29cIiksIF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpKS5PcHRpb24oUGljay5Ob25lLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ2hvb3NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuT3B0aW9uKGdyZW1saW5nby5QLkVxKFwibWFya29cIiksIGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpKS5PcHRpb24oZ3JlbWxpbmdvLlBpY2suTm9uZSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jaG9vc2UoX18udmFsdWVzKFwibmFtZVwiKSkub3B0aW9uKFAuZXEoXCJtYXJrb1wiKSwgX18udmFsdWVzKFwiYWdlXCIpKS5vcHRpb24oUGljay5ub25lLCBfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY2hvb3NlKF9fLnZhbHVlcyhcIm5hbWVcIikpLm9wdGlvbihQLmVxKFwibWFya29cIiksIF9fLnZhbHVlcyhcImFnZVwiKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNob29zZShfXy52YWx1ZXMoXCJuYW1lXCIpKS5vcHRpb24oUC5lcShcIm1hcmtvXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikpLm9wdGlvbihQaWNrLm5vbmUsIF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuY2hvb3NlKF9fLnZhbHVlcygnbmFtZScpKS5vcHRpb24oUC5lcSgnbWFya28nKSwgX18udmFsdWVzKCdhZ2UnKSkub3B0aW9uKFBpY2subm9uZSwgX18udmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYcHJvcGVydGllc1hsb2NhdGlvblhfb3JkZXJfYnlYdmFsdWVYX2xpbWl0WDJYWF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlKDAsIDIpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18ucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLm9yZGVyKCkuYnkoVC52YWx1ZSwgT3JkZXIuYXNjKS5yYW5nZSgwLCAyKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5sb2NhbChfXy5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlKDAsIDIpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5wcm9wZXJ0aWVzKHN0cmluZzApLm9yZGVyKCkuYnkoVC52YWx1ZSwgT3JkZXIuYXNjKS5yYW5nZShudW1iZXIwLCBudW1iZXIxKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLlByb3BlcnRpZXM8b2JqZWN0PihcImxvY2F0aW9uXCIpLk9yZGVyKCkuQnkoVC5WYWx1ZSwgT3JkZXIuQXNjKS5SYW5nZTxvYmplY3Q+KDAsIDIpKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLlByb3BlcnRpZXMoXCJsb2NhdGlvblwiKS5PcmRlcigpLkJ5KGdyZW1saW5nby5ULlZhbHVlLCBncmVtbGluZ28uT3JkZXIuQXNjKS5SYW5nZSgwLCAyKSkuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlKDAsIDIpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlKDAsIDIpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlKDAsIDIpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLnByb3BlcnRpZXMoJ2xvY2F0aW9uJykub3JkZXIoKS5ieShULnZhbHVlLCBPcmRlci5hc2MpLnJhbmdlXygwLCAyKSkudmFsdWUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hsYWJlbF9wZXJzb25YX2FzWGFYX2xvY2FsWG91dFhjcmVhdGVkWF9hc1hiWFhfc2VsZWN0WGFfYlhfYnlYbmFtZVhfYnlYaWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKS5hcyhcImFcIikubG9jYWwoX18ub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKS5hcyhcImFcIikubG9jYWwoX18ub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikuYXMoXCJhXCIpLmxvY2FsKF9fLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhULmxhYmVsLCBzdHJpbmcwKS5hcyhzdHJpbmcxKS5sb2NhbChfXy5vdXQoc3RyaW5nMikuYXMoc3RyaW5nMykpLnNlbGVjdChzdHJpbmcxLCBzdHJpbmczKS5ieShzdHJpbmc0KS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoVC5MYWJlbCwgXCJwZXJzb25cIikuQXMoXCJhXCIpLkxvY2FsPG9iamVjdD4oX18uT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIikpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikuQnkoXCJuYW1lXCIpLkJ5KFQuSWQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKGdyZW1saW5nby5ULkxhYmVsLCBcInBlcnNvblwiKS5BcyhcImFcIikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKSkuU2VsZWN0KFwiYVwiLCBcImJcIikuQnkoXCJuYW1lXCIpLkJ5KGdyZW1saW5nby5ULklkKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikuYXMoXCJhXCIpLmxvY2FsKF9fLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKS5hcyhcImFcIikubG9jYWwoX18ub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpLmFzKFwiYVwiKS5sb2NhbChfXy5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcyhULmxhYmVsLCAncGVyc29uJykuYXNfKCdhJykubG9jYWwoX18ub3V0KCdjcmVhdGVkJykuYXNfKCdiJykpLnNlbGVjdCgnYScsICdiJykuYnkoJ25hbWUnKS5ieShULmlkXykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhvdXRFX2NvdW50WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18ub3V0RSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5PdXRFKCkuQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18ub3V0RSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLm91dF9lKCkuY291bnQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9sb2NhbFhvdXRFWGtub3dzWF9saW1pdFgxWFhfaW5WX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmxvY2FsKF9fLm91dEUoXCJrbm93c1wiKS5saW1pdCgxKSkuaW5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5sb2NhbChfXy5vdXRFKFwia25vd3NcIikubGltaXQoMSkpLmluVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmxvY2FsKF9fLm91dEUoXCJrbm93c1wiKS5saW1pdCgxKSkuaW5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmxvY2FsKF9fLm91dEUoc3RyaW5nMCkubGltaXQobnVtYmVyMCkpLmluVigpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuTG9jYWw8b2JqZWN0PihfXy5PdXRFKFwia25vd3NcIikuTGltaXQ8b2JqZWN0PigxKSkuSW5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkxvY2FsKGdyZW1saW5nby5UX18uT3V0RShcImtub3dzXCIpLkxpbWl0KDEpKS5JblYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5sb2NhbChfXy5vdXRFKFwia25vd3NcIikubGltaXQoMSkpLmluVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5sb2NhbChfXy5vdXRFKFwia25vd3NcIikubGltaXQoMSkpLmluVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5sb2NhbChfXy5vdXRFKFwia25vd3NcIikubGltaXQoMSkpLmluVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmxvY2FsKF9fLm91dF9lKCdrbm93cycpLmxpbWl0KDEpKS5pbl92KCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhib3RoRVhjcmVhdGVkWF9saW1pdFgxWFhfb3RoZXJWX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwoX18uYm90aEUoXCJjcmVhdGVkXCIpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18uYm90aEUoXCJjcmVhdGVkXCIpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmJvdGhFKFwiY3JlYXRlZFwiKS5saW1pdCgxKSkub3RoZXJWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18uYm90aEUoc3RyaW5nMCkubGltaXQobnVtYmVyMCkpLm90aGVyVigpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkJvdGhFKFwiY3JlYXRlZFwiKS5MaW1pdDxvYmplY3Q+KDEpKS5PdGhlclYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkJvdGhFKFwiY3JlYXRlZFwiKS5MaW1pdCgxKSkuT3RoZXJWKCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5ib3RoRShcImNyZWF0ZWRcIikubGltaXQoMSkpLm90aGVyVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmJvdGhFKFwiY3JlYXRlZFwiKS5saW1pdCgxKSkub3RoZXJWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYm90aEUoXCJjcmVhdGVkXCIpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLmJvdGhfZSgnY3JlYXRlZCcpLmxpbWl0KDEpKS5vdGhlcl92KCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlg0WF9sb2NhbFhib3RoRVgxX2NyZWF0ZWRYX2xpbWl0WDFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoXCJjcmVhdGVkXCIpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRShcImNyZWF0ZWRcIikubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRShcImNyZWF0ZWRcIikubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoc3RyaW5nMCkubGltaXQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Mb2NhbDxvYmplY3Q+KF9fLkJvdGhFKFwiY3JlYXRlZFwiKS5MaW1pdDxvYmplY3Q+KDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ0KS5Mb2NhbChncmVtbGluZ28uVF9fLkJvdGhFKFwiY3JlYXRlZFwiKS5MaW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKFwiY3JlYXRlZFwiKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRShcImNyZWF0ZWRcIikubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoXCJjcmVhdGVkXCIpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aF9lKCdjcmVhdGVkJykubGltaXQoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNFhfbG9jYWxYYm90aEVYa25vd3NfY3JlYXRlZFhfbGltaXRYMVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRShcImtub3dzXCIsIFwiY3JlYXRlZFwiKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRShcImtub3dzXCIsIFwiY3JlYXRlZFwiKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRShzdHJpbmcwLCBzdHJpbmcxKS5saW1pdChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLkxvY2FsPG9iamVjdD4oX18uQm90aEUoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikuTGltaXQ8b2JqZWN0PigxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5Cb3RoRShcImtub3dzXCIsIFwiY3JlYXRlZFwiKS5MaW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKFwia25vd3NcIiwgXCJjcmVhdGVkXCIpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKFwia25vd3NcIiwgXCJjcmVhdGVkXCIpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKFwia25vd3NcIiwgXCJjcmVhdGVkXCIpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aF9lKCdrbm93cycsICdjcmVhdGVkJykubGltaXQoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNFhfbG9jYWxYYm90aEVfbGltaXRYMVhYX290aGVyVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMSkpLm90aGVyVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMSkpLm90aGVyVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KG51bWJlcjApKS5vdGhlclYoKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLkxvY2FsPG9iamVjdD4oX18uQm90aEUoKS5MaW1pdDxvYmplY3Q+KDEpKS5PdGhlclYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkxpbWl0KDEpKS5PdGhlclYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKS5vdGhlclYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkub3RoZXJWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMSkpLm90aGVyVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhfZSgpLmxpbWl0KDEpKS5vdGhlcl92KCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgyWFhfb3RoZXJWX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMikpLm90aGVyVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgyKSkub3RoZXJWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgyKSkub3RoZXJWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQobnVtYmVyMCkpLm90aGVyVigpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuTG9jYWw8b2JqZWN0PihfXy5Cb3RoRSgpLkxpbWl0PG9iamVjdD4oMikpLk90aGVyVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ0KS5Mb2NhbChncmVtbGluZ28uVF9fLkJvdGhFKCkuTGltaXQoMikpLk90aGVyVigpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMikpLm90aGVyVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDIpKS5vdGhlclYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgyKSkub3RoZXJWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkubG9jYWwoX18uYm90aF9lKCkubGltaXQoMikpLm90aGVyX3YoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xvY2FsWGluRVhrbm93c1hfbGltaXRYMlhYX291dFZfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5pbkUoXCJrbm93c1wiKS5saW1pdCgyKSkub3V0VigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5pbkUoXCJrbm93c1wiKS5saW1pdCgyKSkub3V0VigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uaW5FKFwia25vd3NcIikubGltaXQoMikpLm91dFYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5pbkUoc3RyaW5nMCkubGltaXQobnVtYmVyMCkpLm91dFYoKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5JbkUoXCJrbm93c1wiKS5MaW1pdDxvYmplY3Q+KDIpKS5PdXRWKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5JbkUoXCJrbm93c1wiKS5MaW1pdCgyKSkuT3V0VigpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uaW5FKFwia25vd3NcIikubGltaXQoMikpLm91dFYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5pbkUoXCJrbm93c1wiKS5saW1pdCgyKSkub3V0VigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxvY2FsKF9fLmluRShcImtub3dzXCIpLmxpbWl0KDIpKS5vdXRWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5pbl9lKCdrbm93cycpLmxpbWl0KDIpKS5vdXRfdigpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYbWF0Y2hYcHJvamVjdF9fY3JlYXRlZF9wZXJzb25fX3BlcnNvbl9uYW1lX25hbWVYX3NlbGVjdFhuYW1lX3Byb2plY3RYX2J5X2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKF9fLm1hdGNoKF9fLmFzKFwicHJvamVjdFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJwZXJzb25cIiksX18uYXMoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcIm5hbWVcIikpKS5zZWxlY3QoXCJuYW1lXCIsIFwicHJvamVjdFwiKS5ieSgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLm1hdGNoKF9fLmFzKFwicHJvamVjdFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJwZXJzb25cIiksIF9fLmFzKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJuYW1lXCIpKSkuc2VsZWN0KFwibmFtZVwiLCBcInByb2plY3RcIikuYnkoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXMoXCJwcm9qZWN0XCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcInBlcnNvblwiKSwgX18uYXMoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcIm5hbWVcIikpKS5zZWxlY3QoXCJuYW1lXCIsIFwicHJvamVjdFwiKS5ieSgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXMoc3RyaW5nMCkuaW4oc3RyaW5nMSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzIpLnZhbHVlcyhzdHJpbmczKS5hcyhzdHJpbmczKSkpLnNlbGVjdChzdHJpbmczLCBzdHJpbmcwKS5ieSgpLmJ5KHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uTWF0Y2g8b2JqZWN0PihfXy5BcyhcInByb2plY3RcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwicGVyc29uXCIpLCBfXy5BcyhcInBlcnNvblwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQXMoXCJuYW1lXCIpKSkuU2VsZWN0PG9iamVjdD4oXCJuYW1lXCIsIFwicHJvamVjdFwiKS5CeSgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcInByb2plY3RcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwicGVyc29uXCIpLCBncmVtbGluZ28uVF9fLkFzKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJuYW1lXCIpKSkuU2VsZWN0KFwibmFtZVwiLCBcInByb2plY3RcIikuQnkoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXMoXCJwcm9qZWN0XCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcInBlcnNvblwiKSwgX18uYXMoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcIm5hbWVcIikpKS5zZWxlY3QoXCJuYW1lXCIsIFwicHJvamVjdFwiKS5ieSgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXMoXCJwcm9qZWN0XCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcInBlcnNvblwiKSwgX18uYXMoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcIm5hbWVcIikpKS5zZWxlY3QoXCJuYW1lXCIsIFwicHJvamVjdFwiKS5ieSgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXMoXCJwcm9qZWN0XCIpLmluXyhcImNyZWF0ZWRcIikuYXMoXCJwZXJzb25cIiksIF9fLmFzKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJuYW1lXCIpKSkuc2VsZWN0KFwibmFtZVwiLCBcInByb2plY3RcIikuYnkoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18ubWF0Y2goX18uYXNfKCdwcm9qZWN0JykuaW5fKCdjcmVhdGVkJykuYXNfKCdwZXJzb24nKSwgX18uYXNfKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS5hc18oJ25hbWUnKSkpLnNlbGVjdCgnbmFtZScsICdwcm9qZWN0JykuYnkoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaW5fYmFycmllcl9sb2NhbFhjb3VudFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaW4oKS5iYXJyaWVyKCkubG9jYWwoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5pbigpLmJhcnJpZXIoKS5sb2NhbChfXy5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5pbigpLmJhcnJpZXIoKS5sb2NhbChfXy5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaW4oKS5iYXJyaWVyKCkubG9jYWwoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSW4oKS5CYXJyaWVyKCkuTG9jYWw8b2JqZWN0PihfXy5Db3VudCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkluKCkuQmFycmllcigpLkxvY2FsKGdyZW1saW5nby5UX18uQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaW4oKS5iYXJyaWVyKCkubG9jYWwoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmluKCkuYmFycmllcigpLmxvY2FsKF9fLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5pbl8oKS5iYXJyaWVyKCkubG9jYWwoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaW5fKCkuYmFycmllcigpLmxvY2FsKF9fLmNvdW50KCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYb3V0X2luX3NpbXBsZVBhdGhYX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW4oKS5zaW1wbGVQYXRoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLm91dCgpLmluKCkuc2ltcGxlUGF0aCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW4oKS5zaW1wbGVQYXRoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW4oKS5zaW1wbGVQYXRoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLk91dCgpLkluKCkuU2ltcGxlUGF0aCgpKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLk91dCgpLkluKCkuU2ltcGxlUGF0aCgpKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW4oKS5zaW1wbGVQYXRoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW4oKS5zaW1wbGVQYXRoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW5fKCkuc2ltcGxlUGF0aCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18ub3V0KCkuaW5fKCkuc2ltcGxlX3BhdGgoKSkucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDBMWF9WX2luX2JhcnJpZXJfbG9jYWxYc2Fja1hzdW1YX2J5WGFnZVhYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygwTCkuVigpLmluKCkuYmFycmllcigpLmxvY2FsKF9fLnNhY2soc3VtKS5ieShcImFnZVwiKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygwbCkuVigpLmluKCkuYmFycmllcigpLmxvY2FsKF9fLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcImFnZVwiKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMGwpLlYoKS5pbigpLmJhcnJpZXIoKS5sb2NhbChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJhZ2VcIikpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2Fjayhsb25nMCkuVigpLmluKCkuYmFycmllcigpLmxvY2FsKF9fLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShzdHJpbmcwKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soMGwpLlYoKS5JbigpLkJhcnJpZXIoKS5Mb2NhbDxvYmplY3Q+KF9fLlNhY2soT3BlcmF0b3IuU3VtKS5CeShcImFnZVwiKSkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGludDY0KDApKS5WKCkuSW4oKS5CYXJyaWVyKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5TdW0pLkJ5KFwiYWdlXCIpKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygwbCkuVigpLmluKCkuYmFycmllcigpLmxvY2FsKF9fLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcImFnZVwiKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKDBsKS5WKCkuaW4oKS5iYXJyaWVyKCkubG9jYWwoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiYWdlXCIpKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNhY2soMCkuVigpLmluXygpLmJhcnJpZXIoKS5sb2NhbChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJhZ2VcIikpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2Fjayhsb25nKDApKS5WKCkuaW5fKCkuYmFycmllcigpLmxvY2FsKF9fLnNhY2soT3BlcmF0b3Iuc3VtXykuYnkoJ2FnZScpKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhvdXRfbG9jYWxYY291bnRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5vdXQoKS5sb2NhbChfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5vdXQoKS5sb2NhbChfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkubG9jYWwoX18uY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5vdXQoKS5sb2NhbChfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5PdXQoKS5Mb2NhbDxvYmplY3Q+KF9fLkNvdW50KCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uT3V0KCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5Db3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18ub3V0KCkubG9jYWwoX18uY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5vdXQoKS5sb2NhbChfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxvY2FsKF9fLm91dCgpLmxvY2FsKF9fLmNvdW50KCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5vdXQoKS5sb2NhbChfXy5jb3VudCgpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl91bmlvblhvdXRFX2NvdW50X2xvY2FsWGluRV9jb3VudFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChpbkUoKS5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS51bmlvbihfXy5vdXRFKCkuY291bnQoKSwgX18ubG9jYWwoX18uaW5FKCkuY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbkUoKS5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbkUoKS5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVW5pb248b2JqZWN0PihfXy5PdXRFKCkuQ291bnQoKSwgX18uTG9jYWw8b2JqZWN0PihfXy5JbkUoKS5Db3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5VbmlvbihncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLCBncmVtbGluZ28uVF9fLkxvY2FsKGdyZW1saW5nby5UX18uSW5FKCkuQ291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbkUoKS5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbkUoKS5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbkUoKS5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudW5pb24oX18ub3V0X2UoKS5jb3VudCgpLCBfXy5sb2NhbChfXy5pbl9lKCkuY291bnQoKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMlhfb3B0aW9uYWxYb3V0WGtub3dzWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDIpLm9wdGlvbmFsKF9fLm91dChcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLm9wdGlvbmFsKF9fLm91dChcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDIpLm9wdGlvbmFsKF9fLm91dChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLk9wdGlvbmFsPG9iamVjdD4oX18uT3V0KFwia25vd3NcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLk9wdGlvbmFsKGdyZW1saW5nby5UX18uT3V0KFwia25vd3NcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLm9wdGlvbmFsKF9fLm91dCgna25vd3MnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgyWF9vcHRpb25hbFhpblhrbm93c1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5vcHRpb25hbChfXy5pbihcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5vcHRpb25hbChfXy5pbihcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikub3B0aW9uYWwoX18uaW4oXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5vcHRpb25hbChfXy5pbihzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLk9wdGlvbmFsPG9iamVjdD4oX18uSW4oXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuT3B0aW9uYWwoZ3JlbWxpbmdvLlRfXy5JbihcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMikub3B0aW9uYWwoX18uaW4oXCJrbm93c1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5vcHRpb25hbChfXy5pbihcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDIpLm9wdGlvbmFsKF9fLmluXyhcImtub3dzXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikub3B0aW9uYWwoX18uaW5fKCdrbm93cycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfb3B0aW9uYWxYb3V0WGtub3dzWF9vcHRpb25hbFhvdXRYY3JlYXRlZFhYWF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9wdGlvbmFsKF9fLm91dChcImtub3dzXCIpLm9wdGlvbmFsKF9fLm91dChcImNyZWF0ZWRcIikpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKS5vcHRpb25hbChfXy5vdXQoXCJjcmVhdGVkXCIpKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9wdGlvbmFsKF9fLm91dChcImtub3dzXCIpLm9wdGlvbmFsKF9fLm91dChcImNyZWF0ZWRcIikpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLm9wdGlvbmFsKF9fLm91dChzdHJpbmcxKS5vcHRpb25hbChfXy5vdXQoc3RyaW5nMikpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuT3B0aW9uYWw8b2JqZWN0PihfXy5PdXQoXCJrbm93c1wiKS5PcHRpb25hbDxvYmplY3Q+KF9fLk91dChcImNyZWF0ZWRcIikpKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5PcHRpb25hbChncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpLk9wdGlvbmFsKGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKSkpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKS5vcHRpb25hbChfXy5vdXQoXCJjcmVhdGVkXCIpKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKS5vcHRpb25hbChfXy5vdXQoXCJjcmVhdGVkXCIpKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcHRpb25hbChfXy5vdXQoXCJrbm93c1wiKS5vcHRpb25hbChfXy5vdXQoXCJjcmVhdGVkXCIpKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykub3B0aW9uYWwoX18ub3V0KCdrbm93cycpLm9wdGlvbmFsKF9fLm91dCgnY3JlYXRlZCcpKSkucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3B0aW9uYWxYb3V0X29wdGlvbmFsWG91dFhYX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3B0aW9uYWwoX18ub3V0KCkub3B0aW9uYWwoX18ub3V0KCkpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vcHRpb25hbChfXy5vdXQoKS5vcHRpb25hbChfXy5vdXQoKSkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcHRpb25hbChfXy5vdXQoKS5vcHRpb25hbChfXy5vdXQoKSkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3B0aW9uYWwoX18ub3V0KCkub3B0aW9uYWwoX18ub3V0KCkpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3B0aW9uYWw8b2JqZWN0PihfXy5PdXQoKS5PcHRpb25hbDxvYmplY3Q+KF9fLk91dCgpKSkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3B0aW9uYWwoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcHRpb25hbChncmVtbGluZ28uVF9fLk91dCgpKSkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm9wdGlvbmFsKF9fLm91dCgpLm9wdGlvbmFsKF9fLm91dCgpKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vcHRpb25hbChfXy5vdXQoKS5vcHRpb25hbChfXy5vdXQoKSkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3B0aW9uYWwoX18ub3V0KCkub3B0aW9uYWwoX18ub3V0KCkpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3B0aW9uYWwoX18ub3V0KCkub3B0aW9uYWwoX18ub3V0KCkpKS5wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vcHRpb25hbFhhZGRWWGRvZ1hYX2xhYmVsIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3B0aW9uYWwoX18uYWRkVihcImRvZ1wiKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vcHRpb25hbChfXy5hZGRWKFwiZG9nXCIpKS5sYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vcHRpb25hbChfXy5hZGRWKFwiZG9nXCIpKS5sYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3B0aW9uYWwoX18uYWRkVihzdHJpbmcwKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3B0aW9uYWw8b2JqZWN0PihfXy5BZGRWKChzdHJpbmcpIFwiZG9nXCIpKS5MYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk9wdGlvbmFsKGdyZW1saW5nby5UX18uQWRkVihcImRvZ1wiKSkuTGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3B0aW9uYWwoX18uYWRkVihcImRvZ1wiKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm9wdGlvbmFsKF9fLmFkZFYoXCJkb2dcIikpLmxhYmVsKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vcHRpb25hbChfXy5hZGRWKFwiZG9nXCIpKS5sYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vcHRpb25hbChfXy5hZGRfdignZG9nJykpLmxhYmVsKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYb3V0WF90aW1lc1gyWF9lbWl0X3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZW1pdCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIwKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoMikuRW1pdCgpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5UaW1lcygyKS5FbWl0KCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZW1pdCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmVtaXQoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcmVwZWF0WGluWF90aW1lc1gyWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucmVwZWF0KF9fLmluKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnJlcGVhdChfXy5pbigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucmVwZWF0KF9fLmluKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkucmVwZWF0KF9fLmluKCkpLnRpbWVzKG51bWJlcjApLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpLlJlcGVhdChfXy5JbigpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMikuUmVwZWF0KGdyZW1saW5nby5UX18uSW4oKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnJlcGVhdChfXy5pbigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnJlcGVhdChfXy5pbigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnJlcGVhdChfXy5pbl8oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnJlcGVhdChfXy5pbl8oKSkudGltZXMoMikudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYb3V0RV9pblZYX3RpbWVzWDJYX3BhdGhfYnlfbmFtZV9ieV9sYWJlbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0RSgpLmluVigpKS50aW1lcygyKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLm91dEUoKS5pblYoKSkudGltZXMoMikucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0RSgpLmluVigpKS50aW1lcygyKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0RSgpLmluVigpKS50aW1lcyhudW1iZXIwKS5wYXRoKCkuYnkoc3RyaW5nMCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLk91dEUoKS5JblYoKSkuVGltZXMoMikuUGF0aCgpLkJ5KFwibmFtZVwiKS5CeShULkxhYmVsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dEUoKS5JblYoKSkuVGltZXMoMikuUGF0aCgpLkJ5KFwibmFtZVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLm91dEUoKS5pblYoKSkudGltZXMoMikucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLm91dEUoKS5pblYoKSkudGltZXMoMikucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dEUoKS5pblYoKSkudGltZXMoMikucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18ub3V0X2UoKS5pbl92KCkpLnRpbWVzKDIpLnBhdGgoKS5ieSgnbmFtZScpLmJ5KFQubGFiZWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDJYX2VtaXQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIwKS5lbWl0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLk91dCgpKS5UaW1lcygyKS5FbWl0KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMikuRW1pdCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZW1pdCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5lbWl0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF90aW1lc1gyWF9yZXBlYXRYb3V0WF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS50aW1lcygyKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS50aW1lcygyKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS50aW1lcyhudW1iZXIwKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuVGltZXMoMikuUmVwZWF0KF9fLk91dCgpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuVGltZXMoMikuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2VtaXRfdGltZXNYMlhfcmVwZWF0WG91dFhfcGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5lbWl0KCkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5lbWl0KCkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZW1pdCgpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5lbWl0KCkudGltZXMobnVtYmVyMCkucmVwZWF0KF9fLm91dCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRW1pdCgpLlRpbWVzKDIpLlJlcGVhdChfXy5PdXQoKSkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRW1pdCgpLlRpbWVzKDIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZW1pdCgpLnRpbWVzKDIpLnJlcGVhdChfXy5vdXQoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbWl0KCkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmVtaXQoKS50aW1lcygyKS5yZXBlYXQoX18ub3V0KCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5lbWl0KCkudGltZXMoMikucmVwZWF0KF9fLm91dCgpKS5wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9lbWl0X3JlcGVhdFhvdXRYX3RpbWVzWDJYX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkVtaXQoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVtaXQoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMikuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfZW1pdFhoYXNYbGFiZWxfcGVyc29uWFhfcmVwZWF0WG91dFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuZW1pdChfXy5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5lbWl0KF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5lbWl0KF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuZW1pdChfXy5oYXMoVC5sYWJlbCwgc3RyaW5nMCkpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5FbWl0KF9fLkhhcyhULkxhYmVsLCBcInBlcnNvblwiKSkuUmVwZWF0KF9fLk91dCgpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuRW1pdChncmVtbGluZ28uVF9fLkhhcyhncmVtbGluZ28uVC5MYWJlbCwgXCJwZXJzb25cIikpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5lbWl0KF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuZW1pdChfXy5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmVtaXQoX18uaGFzKFQubGFiZWwsIFwicGVyc29uXCIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmVtaXQoX18uaGFzKFQubGFiZWwsICdwZXJzb24nKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhncm91cENvdW50WG1YX2J5WG5hbWVYX291dFhfdGltZXNYMlhfY2FwWG1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikub3V0KCkpLnRpbWVzKDIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18uZ3JvdXBDb3VudChcIm1cIikuYnkoXCJuYW1lXCIpLm91dCgpKS50aW1lcygyKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikub3V0KCkpLnRpbWVzKDIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KHN0cmluZzApLmJ5KHN0cmluZzEpLm91dCgpKS50aW1lcyhudW1iZXIwKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLkdyb3VwQ291bnQoXCJtXCIpLkJ5KFwibmFtZVwiKS5PdXQoKSkuVGltZXMoMikuQ2FwPG9iamVjdD4oXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uR3JvdXBDb3VudChcIm1cIikuQnkoXCJuYW1lXCIpLk91dCgpKS5UaW1lcygyKS5DYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikub3V0KCkpLnRpbWVzKDIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikub3V0KCkpLnRpbWVzKDIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikub3V0KCkpLnRpbWVzKDIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmdyb3VwX2NvdW50KCdtJykuYnkoJ25hbWUnKS5vdXQoKSkudGltZXMoMikuY2FwKCdtJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9yZXBlYXRYZ3JvdXBDb3VudFhtWF9ieVhsb29wc1hfb3V0WF90aW1lc1gzWF9jYXBYbVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShfXy5sb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5yZXBlYXQoX18uZ3JvdXBDb3VudChcIm1cIikuYnkoX18ubG9vcHMoKSkub3V0KCkpLnRpbWVzKDMpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShfXy5sb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ncm91cENvdW50KHN0cmluZzApLmJ5KF9fLmxvb3BzKCkpLm91dCgpKS50aW1lcyhudW1iZXIwKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlJlcGVhdChfXy5Hcm91cENvdW50KFwibVwiKS5CeShfXy5Mb29wcygpKS5PdXQoKSkuVGltZXMoMykuQ2FwPG9iamVjdD4oXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlJlcGVhdChncmVtbGluZ28uVF9fLkdyb3VwQ291bnQoXCJtXCIpLkJ5KGdyZW1saW5nby5UX18uTG9vcHMoKSkuT3V0KCkpLlRpbWVzKDMpLkNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShfXy5sb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShfXy5sb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ncm91cENvdW50KFwibVwiKS5ieShfXy5sb29wcygpKS5vdXQoKSkudGltZXMoMykuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmdyb3VwX2NvdW50KCdtJykuYnkoX18ubG9vcHMoKSkub3V0KCkpLnRpbWVzKDMpLmNhcCgnbScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDEwWF9hc1hhWF9vdXRfYXNYYlhfc2VsZWN0WGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMTApLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDEwKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMTApLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMobnVtYmVyMCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLkJvdGgoKSkuVGltZXMoMTApLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aCgpKS5UaW1lcygxMCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5TZWxlY3QoXCJhXCIsIFwiYlwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDEwKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDEwKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDEwKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMTApLmFzXygnYScpLm91dCgpLmFzXygnYicpLnNlbGVjdCgnYScsICdiJykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3JlcGVhdFhvdXRYX3VudGlsWG91dEVfY291bnRfaXNYMFhYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5vdXQoKSkudW50aWwoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5vdXRFKCkuY291bnQoKS5pcygwKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5vdXRFKCkuY291bnQoKS5pcygwKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5vdXQoKSkudW50aWwoX18ub3V0RSgpLmNvdW50KCkuaXMobnVtYmVyMCkpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuUmVwZWF0KF9fLk91dCgpKS5VbnRpbChfXy5PdXRFKCkuQ291bnQoKS5JcygwKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5VbnRpbChncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLklzKDApKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5yZXBlYXQoX18ub3V0KCkpLnVudGlsKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLm91dCgpKS51bnRpbChfXy5vdXRFKCkuY291bnQoKS5pcygwKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5vdXQoKSkudW50aWwoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5vdXQoKSkudW50aWwoX18ub3V0X2UoKS5jb3VudCgpLmlzXygwKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9tYXJrb1hfcmVwZWF0WG91dEVfaW5WX3NpbXBsZVBhdGhYX3VudGlsWGhhc1huYW1lX3JpcHBsZVhYX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikucmVwZWF0KF9fLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5yZXBlYXQoX18ub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKHN0cmluZzAsIHN0cmluZzIpKS5wYXRoKCkuYnkoc3RyaW5nMCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlJlcGVhdChfXy5PdXRFKCkuSW5WKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChfXy5IYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKS5QYXRoKCkuQnkoXCJuYW1lXCIpLkJ5KFQuTGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dEUoKS5JblYoKS5TaW1wbGVQYXRoKCkpLlVudGlsKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkuUGF0aCgpLkJ5KFwibmFtZVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnJlcGVhdChfXy5vdXRFKCkuaW5WKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikucmVwZWF0KF9fLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5yZXBlYXQoX18ub3V0X2UoKS5pbl92KCkuc2ltcGxlX3BhdGgoKSkudW50aWwoX18uaGFzKCduYW1lJywgJ3JpcHBsZScpKS5wYXRoKCkuYnkoJ25hbWUnKS5ieShULmxhYmVsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hsb29wX25hbWVfbG9vcFhfcmVwZWF0WGluWF90aW1lc1g1WF9wYXRoX2J5X25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibG9vcHNcIixcIm5hbWVcIixcImxvb3BcIikucmVwZWF0KF9fLmluKCkpLnRpbWVzKDUpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJsb29wc1wiLCBcIm5hbWVcIiwgXCJsb29wXCIpLnJlcGVhdChfXy5pbigpKS50aW1lcyg1KS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImxvb3BzXCIsIFwibmFtZVwiLCBcImxvb3BcIikucmVwZWF0KF9fLmluKCkpLnRpbWVzKDUpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5yZXBlYXQoX18uaW4oKSkudGltZXMobnVtYmVyMCkucGF0aCgpLmJ5KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImxvb3BzXCIsIFwibmFtZVwiLCBcImxvb3BcIikuUmVwZWF0KF9fLkluKCkpLlRpbWVzKDUpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJsb29wc1wiLCBcIm5hbWVcIiwgXCJsb29wXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLkluKCkpLlRpbWVzKDUpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibG9vcHNcIiwgXCJuYW1lXCIsIFwibG9vcFwiKS5yZXBlYXQoX18uaW4oKSkudGltZXMoNSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibG9vcHNcIiwgXCJuYW1lXCIsIFwibG9vcFwiKS5yZXBlYXQoX18uaW4oKSkudGltZXMoNSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibG9vcHNcIiwgXCJuYW1lXCIsIFwibG9vcFwiKS5yZXBlYXQoX18uaW5fKCkpLnRpbWVzKDUpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdsb29wcycsICduYW1lJywgJ2xvb3AnKS5yZXBlYXQoX18uaW5fKCkpLnRpbWVzKDUpLnBhdGgoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WG91dF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVfZGVzY1hYX3RpbWVzWDFYWF90aW1lc1gxWF9saW1pdFgxWF9wYXRoX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIixkZXNjKSkudGltZXMoMSkpLnRpbWVzKDEpLmxpbWl0KDEpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpKS50aW1lcygxKSkudGltZXMoMSkubGltaXQoMSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpKS50aW1lcygxKSkudGltZXMoMSkubGltaXQoMSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzAsIE9yZGVyLmRlc2MpKS50aW1lcyhudW1iZXIwKSkudGltZXMobnVtYmVyMCkubGltaXQobnVtYmVyMCkucGF0aCgpLmJ5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5PdXQoKS5SZXBlYXQoX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIiwgT3JkZXIuRGVzYykpLlRpbWVzKDEpKS5UaW1lcygxKS5MaW1pdDxvYmplY3Q+KDEpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBncmVtbGluZ28uT3JkZXIuRGVzYykpLlRpbWVzKDEpKS5UaW1lcygxKS5MaW1pdCgxKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5vdXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIiwgT3JkZXIuZGVzYykpLnRpbWVzKDEpKS50aW1lcygxKS5saW1pdCgxKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpKS50aW1lcygxKSkudGltZXMoMSkubGltaXQoMSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKSkudGltZXMoMSkpLnRpbWVzKDEpLmxpbWl0KDEpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJywgT3JkZXIuZGVzYykpLnRpbWVzKDEpKS50aW1lcygxKS5saW1pdCgxKS5wYXRoKCkuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhvdXRYa25vd3NYWF91bnRpbFhyZXBlYXRYb3V0WGNyZWF0ZWRYWF9lbWl0WGhhc1huYW1lX2xvcFhYWF9wYXRoX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5vdXQoXCJrbm93c1wiKSkudW50aWwoX18ucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLmVtaXQoX18uaGFzKFwibmFtZVwiLCBcImxvcFwiKSkpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KFwia25vd3NcIikpLnVudGlsKF9fLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS5lbWl0KF9fLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoXCJrbm93c1wiKSkudW50aWwoX18ucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLmVtaXQoX18uaGFzKFwibmFtZVwiLCBcImxvcFwiKSkpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5vdXQoc3RyaW5nMCkpLnVudGlsKF9fLnJlcGVhdChfXy5vdXQoc3RyaW5nMSkpLmVtaXQoX18uaGFzKHN0cmluZzIsIHN0cmluZzMpKSkucGF0aCgpLmJ5KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5PdXQoXCJrbm93c1wiKSkuVW50aWwoX18uUmVwZWF0KF9fLk91dChcImNyZWF0ZWRcIikpLkVtaXQoX18uSGFzKFwibmFtZVwiLCBcImxvcFwiKSkpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKSkuVW50aWwoZ3JlbWxpbmdvLlRfXy5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpKS5FbWl0KGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcImxvcFwiKSkpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLm91dChcImtub3dzXCIpKS51bnRpbChfXy5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkuZW1pdChfXy5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLm91dChcImtub3dzXCIpKS51bnRpbChfXy5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkuZW1pdChfXy5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dChcImtub3dzXCIpKS51bnRpbChfXy5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkuZW1pdChfXy5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCdrbm93cycpKS51bnRpbChfXy5yZXBlYXQoX18ub3V0KCdjcmVhdGVkJykpLmVtaXQoX18uaGFzKCduYW1lJywgJ2xvcCcpKSkucGF0aCgpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpLmVtaXQoKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KHN0cmluZzApKS51bnRpbChfXy5oYXMoc3RyaW5nMSwgc3RyaW5nMikpKS5lbWl0KCkudmFsdWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5SZXBlYXQoX18uT3V0KFwiY3JlYXRlZFwiKSkuVW50aWwoX18uSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpLkVtaXQoKS5WYWx1ZXM8b2JqZWN0PihcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpKS5VbnRpbChncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpKS5FbWl0KCkuVmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18ucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpLmVtaXQoKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KCdjcmVhdGVkJykpLnVudGlsKF9fLmhhcygnbmFtZScsICdyaXBwbGUnKSkpLmVtaXQoKS52YWx1ZXMoJ2xhbmcnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3VudGlsWGNvbnN0YW50WHRydWVYWF9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnVudGlsKF9fLmNvbnN0YW50KHRydWUpKS5yZXBlYXQoX18ucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnVudGlsKF9fLmNvbnN0YW50KHRydWUpKS5yZXBlYXQoX18ucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS51bnRpbChfXy5jb25zdGFudCh0cnVlKSkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVudGlsKF9fLmNvbnN0YW50KGJvb2xlYW4wKSkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoc3RyaW5nMCkpLnVudGlsKF9fLmhhcyhzdHJpbmcxLCBzdHJpbmcyKSkpLmVtaXQoKS52YWx1ZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVW50aWwoX18uQ29uc3RhbnQ8b2JqZWN0Pih0cnVlKSkuUmVwZWF0KF9fLlJlcGVhdChfXy5PdXQoXCJjcmVhdGVkXCIpKS5VbnRpbChfXy5IYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkuRW1pdCgpLlZhbHVlczxvYmplY3Q+KFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlVudGlsKGdyZW1saW5nby5UX18uQ29uc3RhbnQodHJ1ZSkpLlJlcGVhdChncmVtbGluZ28uVF9fLlJlcGVhdChncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikpLlVudGlsKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpLkVtaXQoKS5WYWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVudGlsKF9fLmNvbnN0YW50KHRydWUpKS5yZXBlYXQoX18ucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudW50aWwoX18uY29uc3RhbnQodHJ1ZSkpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpLmVtaXQoKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS51bnRpbChfXy5jb25zdGFudCh0cnVlKSkucmVwZWF0KF9fLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudW50aWwoX18uY29uc3RhbnQoVHJ1ZSkpLnJlcGVhdChfXy5yZXBlYXQoX18ub3V0KCdjcmVhdGVkJykpLnVudGlsKF9fLmhhcygnbmFtZScsICdyaXBwbGUnKSkpLmVtaXQoKS52YWx1ZXMoJ2xhbmcnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2VtaXRfcmVwZWF0WGFfb3V0WGtub3dzX2ZpbHRlclhsb29wc19pc1gwWFhfbGFuZyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KFwiYVwiLCBfXy5vdXQoXCJrbm93c1wiKS5maWx0ZXIoX18ubG9vcHMoXCJhXCIpLmlzKDApKSkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmVtaXQoKS5yZXBlYXQoXCJhXCIsIF9fLm91dChcImtub3dzXCIpLmZpbHRlcihfXy5sb29wcyhcImFcIikuaXMoMCkpKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmVtaXQoKS5yZXBlYXQoXCJhXCIsIF9fLm91dChcImtub3dzXCIpLmZpbHRlcihfXy5sb29wcyhcImFcIikuaXMoMCkpKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KHN0cmluZzAsIF9fLm91dChzdHJpbmcxKS5maWx0ZXIoX18ubG9vcHMoc3RyaW5nMCkuaXMobnVtYmVyMCkpKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRW1pdCgpLlJlcGVhdChcImFcIiwgX18uT3V0KFwia25vd3NcIikuRmlsdGVyKF9fLkxvb3BzKFwiYVwiKS5JcygwKSkpLlZhbHVlczxvYmplY3Q+KFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVtaXQoKS5SZXBlYXQoXCJhXCIsIGdyZW1saW5nby5UX18uT3V0KFwia25vd3NcIikuRmlsdGVyKGdyZW1saW5nby5UX18uTG9vcHMoXCJhXCIpLklzKDApKSkuVmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KFwiYVwiLCBfXy5vdXQoXCJrbm93c1wiKS5maWx0ZXIoX18ubG9vcHMoXCJhXCIpLmlzKDApKSkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChcImFcIiwgX18ub3V0KFwia25vd3NcIikuZmlsdGVyKF9fLmxvb3BzKFwiYVwiKS5pcygwKSkpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmVtaXQoKS5yZXBlYXQoXCJhXCIsIF9fLm91dChcImtub3dzXCIpLmZpbHRlcihfXy5sb29wcyhcImFcIikuaXMoMCkpKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmVtaXQoKS5yZXBlYXQoJ2EnLCBfXy5vdXQoJ2tub3dzJykuZmlsdGVyXyhfXy5sb29wcygnYScpLmlzXygwKSkpLnZhbHVlcygnbGFuZycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYM1hfcmVwZWF0WGJvdGhYX2NyZWF0ZWRYWF91bnRpbFhsb29wc19pc180MFhYZW1pdF9yZXBlYXRYaW5fa25vd3NYWF9lbWl0X2xvb3BzWGlzWDFYZGVkdXBfdmFsdWVzIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmxvb3BzKCkuaXMoNDApKS5lbWl0KF9fLnJlcGVhdChfXy5pbihcImtub3dzXCIpKS5lbWl0KF9fLmxvb3BzKCkuaXMoMSkpKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMykucmVwZWF0KF9fLmJvdGgoXCJjcmVhdGVkXCIpKS51bnRpbChfXy5sb29wcygpLmlzKDQwKSkuZW1pdChfXy5yZXBlYXQoX18uaW4oXCJrbm93c1wiKSkuZW1pdChfXy5sb29wcygpLmlzKDEpKSkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmxvb3BzKCkuaXMoNDApKS5lbWl0KF9fLnJlcGVhdChfXy5pbihcImtub3dzXCIpKS5lbWl0KF9fLmxvb3BzKCkuaXMoMSkpKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aChzdHJpbmcwKSkudW50aWwoX18ubG9vcHMoKS5pcyhudW1iZXIwKSkuZW1pdChfXy5yZXBlYXQoX18uaW4oc3RyaW5nMSkpLmVtaXQoX18ubG9vcHMoKS5pcyhudW1iZXIxKSkpLmRlZHVwKCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5SZXBlYXQoX18uQm90aChcImNyZWF0ZWRcIikpLlVudGlsKF9fLkxvb3BzKCkuSXMoNDApKS5FbWl0KF9fLlJlcGVhdChfXy5JbihcImtub3dzXCIpKS5FbWl0KF9fLkxvb3BzKCkuSXMoMSkpKS5EZWR1cCgpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQzKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKFwiY3JlYXRlZFwiKSkuVW50aWwoZ3JlbWxpbmdvLlRfXy5Mb29wcygpLklzKDQwKSkuRW1pdChncmVtbGluZ28uVF9fLlJlcGVhdChncmVtbGluZ28uVF9fLkluKFwia25vd3NcIikpLkVtaXQoZ3JlbWxpbmdvLlRfXy5Mb29wcygpLklzKDEpKSkuRGVkdXAoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmxvb3BzKCkuaXMoNDApKS5lbWl0KF9fLnJlcGVhdChfXy5pbihcImtub3dzXCIpKS5lbWl0KF9fLmxvb3BzKCkuaXMoMSkpKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmxvb3BzKCkuaXMoNDApKS5lbWl0KF9fLnJlcGVhdChfXy5pbihcImtub3dzXCIpKS5lbWl0KF9fLmxvb3BzKCkuaXMoMSkpKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aChcImNyZWF0ZWRcIikpLnVudGlsKF9fLmxvb3BzKCkuaXMoNDApKS5lbWl0KF9fLnJlcGVhdChfXy5pbl8oXCJrbm93c1wiKSkuZW1pdChfXy5sb29wcygpLmlzKDEpKSkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQzKS5yZXBlYXQoX18uYm90aCgnY3JlYXRlZCcpKS51bnRpbChfXy5sb29wcygpLmlzXyg0MCkpLmVtaXQoX18ucmVwZWF0KF9fLmluXygna25vd3MnKSkuZW1pdChfXy5sb29wcygpLmlzXygxKSkpLmRlZHVwKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9yZXBlYXRYcmVwZWF0WHVuaW9uWG91dF91c2VzX291dF90cmF2ZXJzZXNYWF93aGVyZVhsb29wc19pc1gwWF90aW1lc1gxWF90aW1lWDJYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KFwidXNlc1wiKSwgX18ub3V0KFwidHJhdmVyc2VzXCIpKS53aGVyZShfXy5sb29wcygpLmlzKDApKSkudGltZXMoMSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJ1c2VzXCIpLCBfXy5vdXQoXCJ0cmF2ZXJzZXNcIikpLndoZXJlKF9fLmxvb3BzKCkuaXMoMCkpKS50aW1lcygxKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJ1c2VzXCIpLCBfXy5vdXQoXCJ0cmF2ZXJzZXNcIikpLndoZXJlKF9fLmxvb3BzKCkuaXMoMCkpKS50aW1lcygxKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KHN0cmluZzApLCBfXy5vdXQoc3RyaW5nMSkpLndoZXJlKF9fLmxvb3BzKCkuaXMobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKSkudGltZXMobnVtYmVyMikudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5SZXBlYXQoX18uUmVwZWF0KF9fLlVuaW9uPG9iamVjdD4oX18uT3V0KFwidXNlc1wiKSwgX18uT3V0KFwidHJhdmVyc2VzXCIpKS5XaGVyZShfXy5Mb29wcygpLklzKDApKSkuVGltZXMoMSkpLlRpbWVzKDIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLk91dChcInVzZXNcIiksIGdyZW1saW5nby5UX18uT3V0KFwidHJhdmVyc2VzXCIpKS5XaGVyZShncmVtbGluZ28uVF9fLkxvb3BzKCkuSXMoMCkpKS5UaW1lcygxKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJ1c2VzXCIpLCBfXy5vdXQoXCJ0cmF2ZXJzZXNcIikpLndoZXJlKF9fLmxvb3BzKCkuaXMoMCkpKS50aW1lcygxKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KFwidXNlc1wiKSwgX18ub3V0KFwidHJhdmVyc2VzXCIpKS53aGVyZShfXy5sb29wcygpLmlzKDApKSkudGltZXMoMSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5yZXBlYXQoX18ucmVwZWF0KF9fLnVuaW9uKF9fLm91dChcInVzZXNcIiksIF9fLm91dChcInRyYXZlcnNlc1wiKSkud2hlcmUoX18ubG9vcHMoKS5pcygwKSkpLnRpbWVzKDEpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5yZXBlYXQoX18ucmVwZWF0KF9fLnVuaW9uKF9fLm91dCgndXNlcycpLCBfXy5vdXQoJ3RyYXZlcnNlcycpKS53aGVyZShfXy5sb29wcygpLmlzXygwKSkpLnRpbWVzKDEpKS50aW1lcygyKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhhX291dFhrbm93c19yZXBlYXRYYl9vdXRYY3JlYXRlZFhfZmlsdGVyWGxvb3BzX2lzWDBYWF9lbWl0X2xhbmciLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KFwiYVwiLCBfXy5vdXQoXCJrbm93c1wiKS5yZXBlYXQoXCJiXCIsIF9fLm91dChcImNyZWF0ZWRcIikuZmlsdGVyKF9fLmxvb3BzKFwiYVwiKS5pcygwKSkpLmVtaXQoKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoXCJhXCIsIF9fLm91dChcImtub3dzXCIpLnJlcGVhdChcImJcIiwgX18ub3V0KFwiY3JlYXRlZFwiKS5maWx0ZXIoX18ubG9vcHMoXCJhXCIpLmlzKDApKSkuZW1pdCgpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoXCJhXCIsIF9fLm91dChcImtub3dzXCIpLnJlcGVhdChcImJcIiwgX18ub3V0KFwiY3JlYXRlZFwiKS5maWx0ZXIoX18ubG9vcHMoXCJhXCIpLmlzKDApKSkuZW1pdCgpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KHN0cmluZzAsIF9fLm91dChzdHJpbmcxKS5yZXBlYXQoc3RyaW5nMiwgX18ub3V0KHN0cmluZzMpLmZpbHRlcihfXy5sb29wcyhzdHJpbmcwKS5pcyhudW1iZXIwKSkpLmVtaXQoKSkuZW1pdCgpLnZhbHVlcyhzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoXCJhXCIsIF9fLk91dChcImtub3dzXCIpLlJlcGVhdChcImJcIiwgX18uT3V0KFwiY3JlYXRlZFwiKS5GaWx0ZXIoX18uTG9vcHMoXCJhXCIpLklzKDApKSkuRW1pdCgpKS5FbWl0KCkuVmFsdWVzPG9iamVjdD4oXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KFwiYVwiLCBncmVtbGluZ28uVF9fLk91dChcImtub3dzXCIpLlJlcGVhdChcImJcIiwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpLkZpbHRlcihncmVtbGluZ28uVF9fLkxvb3BzKFwiYVwiKS5JcygwKSkpLkVtaXQoKSkuRW1pdCgpLlZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KFwiYVwiLCBfXy5vdXQoXCJrbm93c1wiKS5yZXBlYXQoXCJiXCIsIF9fLm91dChcImNyZWF0ZWRcIikuZmlsdGVyKF9fLmxvb3BzKFwiYVwiKS5pcygwKSkpLmVtaXQoKSkuZW1pdCgpLnZhbHVlcyhcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChcImFcIiwgX18ub3V0KFwia25vd3NcIikucmVwZWF0KFwiYlwiLCBfXy5vdXQoXCJjcmVhdGVkXCIpLmZpbHRlcihfXy5sb29wcyhcImFcIikuaXMoMCkpKS5lbWl0KCkpLmVtaXQoKS52YWx1ZXMoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoXCJhXCIsIF9fLm91dChcImtub3dzXCIpLnJlcGVhdChcImJcIiwgX18ub3V0KFwiY3JlYXRlZFwiKS5maWx0ZXIoX18ubG9vcHMoXCJhXCIpLmlzKDApKSkuZW1pdCgpKS5lbWl0KCkudmFsdWVzKFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoJ2EnLCBfXy5vdXQoJ2tub3dzJykucmVwZWF0KCdiJywgX18ub3V0KCdjcmVhdGVkJykuZmlsdGVyXyhfXy5sb29wcygnYScpLmlzXygwKSkpLmVtaXQoKSkuZW1pdCgpLnZhbHVlcygnbGFuZycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNlhfcmVwZWF0WGFfYm90aFhjcmVhdGVkWF9zaW1wbGVQYXRoWF9lbWl0WHJlcGVhdFhiX2JvdGhYa25vd3NYWF91bnRpbFhsb29wc1hiWF9hc1hiX3doZXJlWGxvb3BzWGFYX2FzWGJYX2hhc1huYW1lX3ZhZGFzWFhfZGVkdXBfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikucmVwZWF0KFwiYVwiLCBfXy5ib3RoKFwiY3JlYXRlZFwiKS5zaW1wbGVQYXRoKCkpLmVtaXQoX18ucmVwZWF0KFwiYlwiLCBfXy5ib3RoKFwia25vd3NcIikpLnVudGlsKF9fLmxvb3BzKFwiYlwiKS5hcyhcImJcIikud2hlcmUoX18ubG9vcHMoXCJhXCIpLmFzKFwiYlwiKSkpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLnJlcGVhdChcImFcIiwgX18uYm90aChcImNyZWF0ZWRcIikuc2ltcGxlUGF0aCgpKS5lbWl0KF9fLnJlcGVhdChcImJcIiwgX18uYm90aChcImtub3dzXCIpKS51bnRpbChfXy5sb29wcyhcImJcIikuYXMoXCJiXCIpLndoZXJlKF9fLmxvb3BzKFwiYVwiKS5hcyhcImJcIikpKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNikucmVwZWF0KFwiYVwiLCBfXy5ib3RoKFwiY3JlYXRlZFwiKS5zaW1wbGVQYXRoKCkpLmVtaXQoX18ucmVwZWF0KFwiYlwiLCBfXy5ib3RoKFwia25vd3NcIikpLnVudGlsKF9fLmxvb3BzKFwiYlwiKS5hcyhcImJcIikud2hlcmUoX18ubG9vcHMoXCJhXCIpLmFzKFwiYlwiKSkpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikucmVwZWF0KHN0cmluZzAsIF9fLmJvdGgoc3RyaW5nMSkuc2ltcGxlUGF0aCgpKS5lbWl0KF9fLnJlcGVhdChzdHJpbmcyLCBfXy5ib3RoKHN0cmluZzMpKS51bnRpbChfXy5sb29wcyhzdHJpbmcyKS5hcyhzdHJpbmcyKS53aGVyZShfXy5sb29wcyhzdHJpbmcwKS5hcyhzdHJpbmcyKSkpLmhhcyhzdHJpbmc0LCBzdHJpbmc1KSkuZGVkdXAoKS52YWx1ZXMoc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLlJlcGVhdChcImFcIiwgX18uQm90aChcImNyZWF0ZWRcIikuU2ltcGxlUGF0aCgpKS5FbWl0KF9fLlJlcGVhdChcImJcIiwgX18uQm90aChcImtub3dzXCIpKS5VbnRpbChfXy5Mb29wcyhcImJcIikuQXMoXCJiXCIpLldoZXJlKF9fLkxvb3BzKFwiYVwiKS5BcyhcImJcIikpKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLkRlZHVwKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLlJlcGVhdChcImFcIiwgZ3JlbWxpbmdvLlRfXy5Cb3RoKFwiY3JlYXRlZFwiKS5TaW1wbGVQYXRoKCkpLkVtaXQoZ3JlbWxpbmdvLlRfXy5SZXBlYXQoXCJiXCIsIGdyZW1saW5nby5UX18uQm90aChcImtub3dzXCIpKS5VbnRpbChncmVtbGluZ28uVF9fLkxvb3BzKFwiYlwiKS5BcyhcImJcIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Mb29wcyhcImFcIikuQXMoXCJiXCIpKSkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5EZWR1cCgpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLnJlcGVhdChcImFcIiwgX18uYm90aChcImNyZWF0ZWRcIikuc2ltcGxlUGF0aCgpKS5lbWl0KF9fLnJlcGVhdChcImJcIiwgX18uYm90aChcImtub3dzXCIpKS51bnRpbChfXy5sb29wcyhcImJcIikuYXMoXCJiXCIpLndoZXJlKF9fLmxvb3BzKFwiYVwiKS5hcyhcImJcIikpKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLnJlcGVhdChcImFcIiwgX18uYm90aChcImNyZWF0ZWRcIikuc2ltcGxlUGF0aCgpKS5lbWl0KF9fLnJlcGVhdChcImJcIiwgX18uYm90aChcImtub3dzXCIpKS51bnRpbChfXy5sb29wcyhcImJcIikuYXMoXCJiXCIpLndoZXJlKF9fLmxvb3BzKFwiYVwiKS5hcyhcImJcIikpKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLnJlcGVhdChcImFcIiwgX18uYm90aChcImNyZWF0ZWRcIikuc2ltcGxlUGF0aCgpKS5lbWl0KF9fLnJlcGVhdChcImJcIiwgX18uYm90aChcImtub3dzXCIpKS51bnRpbChfXy5sb29wcyhcImJcIikuYXMoXCJiXCIpLndoZXJlKF9fLmxvb3BzKFwiYVwiKS5hcyhcImJcIikpKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikucmVwZWF0KCdhJywgX18uYm90aCgnY3JlYXRlZCcpLnNpbXBsZV9wYXRoKCkpLmVtaXQoX18ucmVwZWF0KCdiJywgX18uYm90aCgna25vd3MnKSkudW50aWwoX18ubG9vcHMoJ2InKS5hc18oJ2InKS53aGVyZShfXy5sb29wcygnYScpLmFzXygnYicpKSkuaGFzKCduYW1lJywgJ3ZhZGFzJykpLmRlZHVwKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9lbWl0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5lbWl0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5FbWl0KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5FbWl0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZW1pdCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbWl0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmVtaXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5lbWl0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl91bnRpbFhpZGVudGl0eVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudW50aWwoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS51bnRpbChfXy5pZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS51bnRpbChfXy5pZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudW50aWwoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVW50aWwoX18uSWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5VbnRpbChncmVtbGluZ28uVF9fLklkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVudGlsKF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS51bnRpbChfXy5pZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudW50aWwoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudW50aWwoX18uaWRlbnRpdHkoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl90aW1lc1g1WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS50aW1lcyg1KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnRpbWVzKDUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnRpbWVzKDUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5UaW1lcyg1KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlRpbWVzKDUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnRpbWVzKDUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS50aW1lcyg1KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudGltZXMoNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudGltZXMoNSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3JlcGVhdFhvdXRYY3JlYXRlZFhYX3RpbWVzWDFYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5yZXBlYXQoX18ub3V0KHN0cmluZzMpKS50aW1lcyhudW1iZXIwKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlJlcGVhdChfXy5PdXQoXCJjcmVhdGVkXCIpKS5UaW1lcygxKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKSkuVGltZXMoMSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5yZXBlYXQoX18ub3V0KCdjcmVhdGVkJykpLnRpbWVzKDEpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9yZXBlYXRYb3V0WGNyZWF0ZWRYWF90aW1lc1gwWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikucmVwZWF0KG91dChcImNyZWF0ZWRcIikpLnRpbWVzKDApLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnRpbWVzKDApLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS50aW1lcygwKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucmVwZWF0KF9fLm91dChzdHJpbmczKSkudGltZXMobnVtYmVyMCkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5SZXBlYXQoX18uT3V0KFwiY3JlYXRlZFwiKSkuVGltZXMoMCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikpLlRpbWVzKDApLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS50aW1lcygwKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnRpbWVzKDApLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudGltZXMoMCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykucmVwZWF0KF9fLm91dCgnY3JlYXRlZCcpKS50aW1lcygwKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfdGltZXNYMVhfcmVwZWF0WG91dFhjcmVhdGVkWFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnRpbWVzKDEpLnJlcGVhdChvdXQoXCJjcmVhdGVkXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnRpbWVzKDEpLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS50aW1lcygxKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnRpbWVzKG51bWJlcjApLnJlcGVhdChfXy5vdXQoc3RyaW5nMykpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuVGltZXMoMSkuUmVwZWF0KF9fLk91dChcImNyZWF0ZWRcIikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5UaW1lcygxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS50aW1lcygxKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnRpbWVzKDEpLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikudGltZXMoMSkucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnRpbWVzKDEpLnJlcGVhdChfXy5vdXQoJ2NyZWF0ZWQnKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX3RpbWVzWDBYX3JlcGVhdFhvdXRYY3JlYXRlZFhYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS50aW1lcygwKS5yZXBlYXQob3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS50aW1lcygwKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikudGltZXMoMCkucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS50aW1lcyhudW1iZXIwKS5yZXBlYXQoX18ub3V0KHN0cmluZzMpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlRpbWVzKDApLlJlcGVhdChfXy5PdXQoXCJjcmVhdGVkXCIpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuVGltZXMoMCkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikudGltZXMoMCkucmVwZWF0KF9fLm91dChcImNyZWF0ZWRcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS50aW1lcygwKS5yZXBlYXQoX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnRpbWVzKDApLnJlcGVhdChfXy5vdXQoXCJjcmVhdGVkXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS50aW1lcygwKS5yZXBlYXQoX18ub3V0KCdjcmVhdGVkJykpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGJvdGhfaGFzWG5vdF9wcm9kdWN0aXZlWFhfdGltZXNYM1hfY29uc3RhbnRYMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJub3RcIiwgXCJwcm9kdWN0aXZlXCIpKS50aW1lcygzKS5jb25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKFwibm90XCIsIFwicHJvZHVjdGl2ZVwiKSkudGltZXMoMykuY29uc3RhbnQoMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJub3RcIiwgXCJwcm9kdWN0aXZlXCIpKS50aW1lcygzKS5jb25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkpLnRpbWVzKG51bWJlcjApLmNvbnN0YW50KG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5Cb3RoKCkuSGFzKFwibm90XCIsIFwicHJvZHVjdGl2ZVwiKSkuVGltZXMoMykuQ29uc3RhbnQ8b2JqZWN0PigxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5IYXMoXCJub3RcIiwgXCJwcm9kdWN0aXZlXCIpKS5UaW1lcygzKS5Db25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcyhcIm5vdFwiLCBcInByb2R1Y3RpdmVcIikpLnRpbWVzKDMpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcyhcIm5vdFwiLCBcInByb2R1Y3RpdmVcIikpLnRpbWVzKDMpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcyhcIm5vdFwiLCBcInByb2R1Y3RpdmVcIikpLnRpbWVzKDMpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKCdub3QnLCAncHJvZHVjdGl2ZScpKS50aW1lcygzKS5jb25zdGFudCgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hub3RfcHJvZHVjdGl2ZVhfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX2NvbnN0YW50WDFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5vdFwiLCBcInByb2R1Y3RpdmVcIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuY29uc3RhbnQoMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJub3RcIiwgXCJwcm9kdWN0aXZlXCIpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5vdFwiLCBcInByb2R1Y3RpdmVcIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuY29uc3RhbnQoMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyhudW1iZXIwKS5jb25zdGFudChudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJub3RcIiwgXCJwcm9kdWN0aXZlXCIpLlJlcGVhdChfXy5Cb3RoKCkpLlRpbWVzKDMpLkNvbnN0YW50PG9iamVjdD4oMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJub3RcIiwgXCJwcm9kdWN0aXZlXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKSkuVGltZXMoMykuQ29uc3RhbnQoMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibm90XCIsIFwicHJvZHVjdGl2ZVwiKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5jb25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibm90XCIsIFwicHJvZHVjdGl2ZVwiKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5jb25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibm90XCIsIFwicHJvZHVjdGl2ZVwiKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5jb25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25vdCcsICdwcm9kdWN0aXZlJykucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuY29uc3RhbnQoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxXzJfM1hfcmVwZWF0WGJvdGhfYmFycmllclhfZW1pdF90aW1lc1gyWF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxLCB2aWQyLCB2aWQzKS5yZXBlYXQoX18uYm90aCgpLmJhcnJpZXIoKSkuZW1pdCgpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxLCB2aWQyLCB2aWQzKS5yZXBlYXQoX18uYm90aCgpLmJhcnJpZXIoKSkuZW1pdCgpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMykucmVwZWF0KF9fLmJvdGgoKS5iYXJyaWVyKCkpLmVtaXQoKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxLCB2aWQyLCB2aWQzKS5yZXBlYXQoX18uYm90aCgpLmJhcnJpZXIoKSkuZW1pdCgpLnRpbWVzKG51bWJlcjApLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMykuUmVwZWF0KF9fLkJvdGgoKS5CYXJyaWVyKCkpLkVtaXQoKS5UaW1lcygyKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMykuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aCgpLkJhcnJpZXIoKSkuRW1pdCgpLlRpbWVzKDIpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMykucmVwZWF0KF9fLmJvdGgoKS5iYXJyaWVyKCkpLmVtaXQoKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxLCB2aWQyLCB2aWQzKS5yZXBlYXQoX18uYm90aCgpLmJhcnJpZXIoKSkuZW1pdCgpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEsIHZpZDIsIHZpZDMpLnJlcGVhdChfXy5ib3RoKCkuYmFycmllcigpKS5lbWl0KCkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxLCB2aWQyLCB2aWQzKS5yZXBlYXQoX18uYm90aCgpLmJhcnJpZXIoKSkuZW1pdCgpLnRpbWVzKDIpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX29yZGVyX2J5WG5hbWVfZGVzY1hfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aF9vcmRlcl9ieVhuYW1lX2Rlc2NYWF90aW1lc1gyWF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm9yZGVyKCkuYnkoc3RyaW5nMCwgT3JkZXIuZGVzYykucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkub3JkZXIoKS5ieShzdHJpbmcwLCBPcmRlci5kZXNjKSkudGltZXMobnVtYmVyMCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIsIE9yZGVyLkRlc2MpLlJlcGVhdChfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIsIE9yZGVyLkRlc2MpKS5UaW1lcygyKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBncmVtbGluZ28uT3JkZXIuRGVzYykuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aCgpLlNpbXBsZVBhdGgoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBncmVtbGluZ28uT3JkZXIuRGVzYykpLlRpbWVzKDIpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yZGVyKCkuYnkoJ25hbWUnLCBPcmRlci5kZXNjKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZV9wYXRoKCkub3JkZXIoKS5ieSgnbmFtZScsIE9yZGVyLmRlc2MpKS50aW1lcygyKS5wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYYm90aF9yZXBlYXRYb3JkZXJfYnlYbmFtZVhYX3RpbWVzWDFYWF90aW1lc1gxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnJlcGVhdChfXy5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5yZXBlYXQoX18ub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDEpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnJlcGVhdChfXy5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnJlcGVhdChfXy5vcmRlcigpLmJ5KHN0cmluZzApKS50aW1lcyhudW1iZXIwKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLkJvdGgoKS5SZXBlYXQoX18uT3JkZXIoKS5CeShcIm5hbWVcIikpLlRpbWVzKDEpKS5UaW1lcygxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PcmRlcigpLkJ5KFwibmFtZVwiKSkuVGltZXMoMSkpLlRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkucmVwZWF0KF9fLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygxKSkudGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkucmVwZWF0KF9fLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygxKSkudGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkucmVwZWF0KF9fLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygxKSkudGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5yZXBlYXQoX18ub3JkZXIoKS5ieSgnbmFtZScpKS50aW1lcygxKSkudGltZXMoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vcmRlcl9ieVhuYW1lX2Rlc2NYX3JlcGVhdFhsb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhYWF90aW1lc1gxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vcmRlcigpLmJ5KHN0cmluZzAsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3JkZXIoKS5CeShcIm5hbWVcIiwgT3JkZXIuRGVzYykuUmVwZWF0KF9fLkxvY2FsPG9iamVjdD4oX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpKS5UaW1lcygxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIsIGdyZW1saW5nby5PcmRlci5EZXNjKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Mb2NhbChncmVtbGluZ28uVF9fLk91dCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpKSkuVGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIiwgT3JkZXIuZGVzYykucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vcmRlcigpLmJ5KCduYW1lJywgT3JkZXIuZGVzYykucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKSkpLnRpbWVzKDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3JkZXJfYnlYbmFtZVhfcmVwZWF0WGxvY2FsWGJvdGhfc2ltcGxlUGF0aF9vcmRlcl9ieVhuYW1lWFhYX3RpbWVzWDJYX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikucmVwZWF0KF9fLmxvY2FsKF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yZXBlYXQoX18ubG9jYWwoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yZXBlYXQoX18ubG9jYWwoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3JkZXIoKS5ieShzdHJpbmcwKS5yZXBlYXQoX18ubG9jYWwoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KHN0cmluZzApKSkudGltZXMobnVtYmVyMCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLlJlcGVhdChfXy5Mb2NhbDxvYmplY3Q+KF9fLkJvdGgoKS5TaW1wbGVQYXRoKCkuT3JkZXIoKS5CeShcIm5hbWVcIikpKS5UaW1lcygyKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Mb2NhbChncmVtbGluZ28uVF9fLkJvdGgoKS5TaW1wbGVQYXRoKCkuT3JkZXIoKS5CeShcIm5hbWVcIikpKS5UaW1lcygyKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikucmVwZWF0KF9fLmxvY2FsKF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygyKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnJlcGVhdChfXy5sb2NhbChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yZXBlYXQoX18ubG9jYWwoX18uYm90aCgpLnNpbXBsZVBhdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vcmRlcigpLmJ5KCduYW1lJykucmVwZWF0KF9fLmxvY2FsKF9fLmJvdGgoKS5zaW1wbGVfcGF0aCgpLm9yZGVyKCkuYnkoJ25hbWUnKSkpLnRpbWVzKDIpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFh1bmlvblhvdXRYa25vd3NYX29yZGVyX2J5WG5hbWVYX2luWGNyZWF0ZWRYX29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLm91dChcImtub3dzXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLCBfXy5pbihcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJrbm93c1wiKS5vcmRlcigpLmJ5KFwibmFtZVwiKSwgX18uaW4oXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLm91dChcImtub3dzXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLCBfXy5pbihcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLm91dChzdHJpbmcwKS5vcmRlcigpLmJ5KHN0cmluZzEpLCBfXy5pbihzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzEpKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLlVuaW9uPG9iamVjdD4oX18uT3V0KFwia25vd3NcIikuT3JkZXIoKS5CeShcIm5hbWVcIiksIF9fLkluKFwiY3JlYXRlZFwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkpLlRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uVW5pb24oZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKS5PcmRlcigpLkJ5KFwibmFtZVwiKSwgZ3JlbWxpbmdvLlRfXy5JbihcImNyZWF0ZWRcIikuT3JkZXIoKS5CeShcIm5hbWVcIikpKS5UaW1lcygxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18ub3V0KFwia25vd3NcIikub3JkZXIoKS5ieShcIm5hbWVcIiksIF9fLmluKFwiY3JlYXRlZFwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18ub3V0KFwia25vd3NcIikub3JkZXIoKS5ieShcIm5hbWVcIiksIF9fLmluKFwiY3JlYXRlZFwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18ub3V0KFwia25vd3NcIikub3JkZXIoKS5ieShcIm5hbWVcIiksIF9fLmluXyhcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18ub3V0KCdrbm93cycpLm9yZGVyKCkuYnkoJ25hbWUnKSwgX18uaW5fKCdjcmVhdGVkJykub3JkZXIoKS5ieSgnbmFtZScpKSkudGltZXMoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYYWRkVl9wcm9wZXJ0eVhnZW5lcmF0ZWRfdHJ1ZVhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLnByb3BlcnR5KFwibm90R2VuZXJhdGVkXCIsIFwidHJ1ZVwiKS5hZGRWKCkucHJvcGVydHkoXCJub3RHZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJub3RHZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5vdEdlbmVyYXRlZFwiLCBcInRydWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJub3RHZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5vdEdlbmVyYXRlZFwiLCBcInRydWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzEpLmFkZFYoKS5wcm9wZXJ0eShzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShcIm5vdEdlbmVyYXRlZFwiLCBcInRydWVcIikuQWRkVigpLlByb3BlcnR5KFwibm90R2VuZXJhdGVkXCIsIFwidHJ1ZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVigpLlByb3BlcnR5KFwibm90R2VuZXJhdGVkXCIsIFwidHJ1ZVwiKS5BZGRWKCkuUHJvcGVydHkoXCJub3RHZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigpLnByb3BlcnR5KFwibm90R2VuZXJhdGVkXCIsIFwidHJ1ZVwiKS5hZGRWKCkucHJvcGVydHkoXCJub3RHZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5vdEdlbmVyYXRlZFwiLCBcInRydWVcIikuYWRkVigpLnByb3BlcnR5KFwibm90R2VuZXJhdGVkXCIsIFwidHJ1ZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJub3RHZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5vdEdlbmVyYXRlZFwiLCBcInRydWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLnByb3BlcnR5KCdub3RHZW5lcmF0ZWQnLCAndHJ1ZScpLmFkZF92KCkucHJvcGVydHkoJ25vdEdlbmVyYXRlZCcsICd0cnVlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYWRkVigpLnByb3BlcnR5KFwiZ2VuZXJhdGVkXCIsIFwidHJ1ZVwiKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18uYWRkVigpLnByb3BlcnR5KFwiZ2VuZXJhdGVkXCIsIFwidHJ1ZVwiKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmFkZFYoKS5wcm9wZXJ0eShcImdlbmVyYXRlZFwiLCBcInRydWVcIikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYWRkVigpLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzEpKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uQWRkVigpLlByb3BlcnR5KFwiZ2VuZXJhdGVkXCIsIFwidHJ1ZVwiKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5BZGRWKCkuUHJvcGVydHkoXCJnZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uYWRkVigpLnByb3BlcnR5KFwiZ2VuZXJhdGVkXCIsIFwidHJ1ZVwiKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5hZGRWKCkucHJvcGVydHkoXCJnZW5lcmF0ZWRcIiwgXCJ0cnVlXCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLmFkZFYoKS5wcm9wZXJ0eShcImdlbmVyYXRlZFwiLCBcInRydWVcIikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5hZGRfdigpLnByb3BlcnR5KCdnZW5lcmF0ZWQnLCAndHJ1ZScpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5vdEdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5vdEdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJub3RHZW5lcmF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJub3RHZW5lcmF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJub3RHZW5lcmF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibm90R2VuZXJhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJub3RHZW5lcmF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5vdEdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25vdEdlbmVyYXRlZCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiZ2VuZXJhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiZ2VuZXJhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJnZW5lcmF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImdlbmVyYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiZ2VuZXJhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnZ2VuZXJhdGVkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYZGVkdXBfYm90aFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkuYm90aCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpLmJvdGgoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkuYm90aCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkuYm90aCgpKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uRGVkdXAoKS5Cb3RoKCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uRGVkdXAoKS5Cb3RoKCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpLmJvdGgoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpLmJvdGgoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpLmJvdGgoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkuYm90aCgpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhhZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX3NlbGVjdFh4WF9saW1pdFgxWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLmFnZ3JlZ2F0ZShcInhcIikpLnRpbWVzKDIpLnNlbGVjdChcInhcIikubGltaXQoMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKFwieFwiKSkudGltZXMoMikuc2VsZWN0KFwieFwiKS5saW1pdCgxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKFwieFwiKSkudGltZXMoMikuc2VsZWN0KFwieFwiKS5saW1pdCgxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkudGltZXMobnVtYmVyMCkuc2VsZWN0KHN0cmluZzApLmxpbWl0KG51bWJlcjEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5TZWxlY3Q8b2JqZWN0PihcInhcIikuTGltaXQ8b2JqZWN0PigxKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwieFwiKSkuVGltZXMoMikuU2VsZWN0KFwieFwiKS5MaW1pdCgxKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKFwieFwiKSkudGltZXMoMikuc2VsZWN0KFwieFwiKS5saW1pdCgxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmFnZ3JlZ2F0ZShcInhcIikpLnRpbWVzKDIpLnNlbGVjdChcInhcIikubGltaXQoMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoXCJ4XCIpKS50aW1lcygyKS5zZWxlY3QoXCJ4XCIpLmxpbWl0KDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuc2VsZWN0KCd4JykubGltaXQoMSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYc3RyWF9yZXBlYXRYc3BsaXRYYWJjWF9jb25qb2luWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcInN0clwiLCBcImFiYWJjY3phYmFiY2NcIikuYWRkVigpLnByb3BlcnR5KFwic3RyXCIsIFwiYWJjeWFiY1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KFwic3RyXCIsIFwiYWJhYmNjemFiYWJjY1wiKS5hZGRWKCkucHJvcGVydHkoXCJzdHJcIiwgXCJhYmN5YWJjXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVigpLnByb3BlcnR5KFwic3RyXCIsIFwiYWJhYmNjemFiYWJjY1wiKS5hZGRWKCkucHJvcGVydHkoXCJzdHJcIiwgXCJhYmN5YWJjXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShzdHJpbmcwLCBzdHJpbmcxKS5hZGRWKCkucHJvcGVydHkoc3RyaW5nMCwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuUHJvcGVydHkoXCJzdHJcIiwgXCJhYmFiY2N6YWJhYmNjXCIpLkFkZFYoKS5Qcm9wZXJ0eShcInN0clwiLCBcImFiY3lhYmNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShcInN0clwiLCBcImFiYWJjY3phYmFiY2NcIikuQWRkVigpLlByb3BlcnR5KFwic3RyXCIsIFwiYWJjeWFiY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcInN0clwiLCBcImFiYWJjY3phYmFiY2NcIikuYWRkVigpLnByb3BlcnR5KFwic3RyXCIsIFwiYWJjeWFiY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJzdHJcIiwgXCJhYmFiY2N6YWJhYmNjXCIpLmFkZFYoKS5wcm9wZXJ0eShcInN0clwiLCBcImFiY3lhYmNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLnByb3BlcnR5KFwic3RyXCIsIFwiYWJhYmNjemFiYWJjY1wiKS5hZGRWKCkucHJvcGVydHkoXCJzdHJcIiwgXCJhYmN5YWJjXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5wcm9wZXJ0eSgnc3RyJywgJ2FiYWJjY3phYmFiY2MnKS5hZGRfdigpLnByb3BlcnR5KCdzdHInLCAnYWJjeWFiYycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwic3RyXCIpLnJlcGVhdChfXy5zcGxpdChcImFiY1wiKS5jb25qb2luKFwiXCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcInN0clwiKS5yZXBlYXQoX18uc3BsaXQoXCJhYmNcIikuY29uam9pbihcIlwiKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwic3RyXCIpLnJlcGVhdChfXy5zcGxpdChcImFiY1wiKS5jb25qb2luKFwiXCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnJlcGVhdChfXy5zcGxpdChzdHJpbmcxKS5jb25qb2luKHN0cmluZzIpKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcInN0clwiKS5SZXBlYXQoX18uU3BsaXQoXCJhYmNcIikuQ29uam9pbigoc3RyaW5nKSBcIlwiKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJzdHJcIikuUmVwZWF0KGdyZW1saW5nby5UX18uU3BsaXQoXCJhYmNcIikuQ29uam9pbihcIlwiKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwic3RyXCIpLnJlcGVhdChfXy5zcGxpdChcImFiY1wiKS5jb25qb2luKFwiXCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwic3RyXCIpLnJlcGVhdChfXy5zcGxpdChcImFiY1wiKS5jb25qb2luKFwiXCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwic3RyXCIpLnJlcGVhdChfXy5zcGxpdChcImFiY1wiKS5jb25qb2luKFwiXCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3N0cicpLnJlcGVhdChfXy5zcGxpdCgnYWJjJykuY29uam9pbignJykpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDBYX1ZfcmVwZWF0WHNhY2tYc3VtWF9ieVhhZ2VYX3doZXJlWHNhY2tfaXNYbHRYNTlYWFhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMEwpLlYoKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiYWdlXCIpLndoZXJlKF9fLnNhY2soKS5pcyhQLmx0KDU5KSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMGwpLlYoKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiYWdlXCIpLndoZXJlKF9fLnNhY2soKS5pcyhQLmx0KDU5KSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKDBsKS5WKCkucmVwZWF0KF9fLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcImFnZVwiKS53aGVyZShfXy5zYWNrKCkuaXMoUC5sdCg1OSkpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2sobG9uZzApLlYoKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KHN0cmluZzApLndoZXJlKF9fLnNhY2soKS5pcyhQLmx0KG51bWJlcjApKSkpLnRpbWVzKG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soMGwpLlYoKS5SZXBlYXQoX18uU2FjayhPcGVyYXRvci5TdW0pLkJ5KFwiYWdlXCIpLldoZXJlKF9fLlNhY2s8b2JqZWN0PigpLklzKFAuTHQoNTkpKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQ2NCgwKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLlN1bSkuQnkoXCJhZ2VcIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5TYWNrKCkuSXMoZ3JlbWxpbmdvLlAuTHQoNTkpKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soMGwpLlYoKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiYWdlXCIpLndoZXJlKF9fLnNhY2soKS5pcyhQLmx0KDU5KSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjaygwbCkuVigpLnJlcGVhdChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJhZ2VcIikud2hlcmUoX18uc2FjaygpLmlzKFAubHQoNTkpKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDApLlYoKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwiYWdlXCIpLndoZXJlKF9fLnNhY2soKS5pcyhQLmx0KDU5KSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2Fjayhsb25nKDApKS5WKCkucmVwZWF0KF9fLnNhY2soT3BlcmF0b3Iuc3VtXykuYnkoJ2FnZScpLndoZXJlKF9fLnNhY2soKS5pc18oUC5sdCg1OSkpKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYaW5qZWN0WHlYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoaW5qZWN0KCd5JykpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLmluamVjdCgneScpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uaW5qZWN0KCd5JykpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uaW5qZWN0KHN0cmluZzApKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uSW5qZWN0KFwieVwiKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5JbmplY3QoXCJ5XCIpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uaW5qZWN0KCd5JykpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18uaW5qZWN0KFwieVwiKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5pbmplY3QoXCJ5XCIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uaW5qZWN0KCd5JykpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WHVuaW9uWGNvbnN0YW50WHlYX2xpbWl0WDFYX2lkZW50aXR5WFhfdGltZXNYM1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KHVuaW9uKGNvbnN0YW50KCd5JykubGltaXQoMSksaWRlbnRpdHkoKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLmNvbnN0YW50KCd5JykubGltaXQoMSksIF9fLmlkZW50aXR5KCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18uY29uc3RhbnQoJ3knKS5saW1pdCgxKSwgX18uaWRlbnRpdHkoKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18uY29uc3RhbnQoc3RyaW5nMCkubGltaXQobnVtYmVyMCksIF9fLmlkZW50aXR5KCkpKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uVW5pb248b2JqZWN0PihfXy5Db25zdGFudDxvYmplY3Q+KFwieVwiKS5MaW1pdDxvYmplY3Q+KDEpLCBfXy5JZGVudGl0eSgpKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLkNvbnN0YW50KFwieVwiKS5MaW1pdCgxKSwgZ3JlbWxpbmdvLlRfXy5JZGVudGl0eSgpKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLmNvbnN0YW50KCd5JykubGltaXQoMSksIF9fLmlkZW50aXR5KCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLmNvbnN0YW50KFwieVwiKS5saW1pdCgxKSwgX18uaWRlbnRpdHkoKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18udW5pb24oX18uY29uc3RhbnQoXCJ5XCIpLmxpbWl0KDEpLCBfXy5pZGVudGl0eSgpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLnVuaW9uKF9fLmNvbnN0YW50KCd5JykubGltaXQoMSksIF9fLmlkZW50aXR5KCkpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDNYX3JlcGVhdFhvdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF90YWlsWDJYWF90aW1lc1gxWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMikpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgyKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgyKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApLnRhaWwobnVtYmVyMCkpLnRpbWVzKG51bWJlcjEpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMykuUmVwZWF0KF9fLk91dCgpLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIikuVGFpbDxvYmplY3Q+KDIpKS5UaW1lcygxKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiKS5UYWlsKDIpKS5UaW1lcygxKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDIpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgyKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMikpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCdwZXJmb3JtYW5jZXMnKS50YWlsKDIpKS50aW1lcygxKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDNYX3JlcGVhdFhvdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF90YWlsWDJYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgyKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgyKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApLnRhaWwobnVtYmVyMCkpLnRpbWVzKG51bWJlcjApLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMykuUmVwZWF0KF9fLk91dCgpLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIikuVGFpbDxvYmplY3Q+KDIpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiKS5UYWlsKDIpKS5UaW1lcygyKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDIpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgyKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCdwZXJmb3JtYW5jZXMnKS50YWlsKDIpKS50aW1lcygyKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDJYX3JlcGVhdFhvdXRfbG9jYWxYb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF90YWlsWDFYWFhfdGltZXNYMVhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDEpKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDEpKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgxKSkpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShzdHJpbmcwKS50YWlsKG51bWJlcjApKSkudGltZXMobnVtYmVyMCkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5SZXBlYXQoX18uT3V0KCkuTG9jYWw8b2JqZWN0PihfXy5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlRhaWw8b2JqZWN0PigxKSkpLlRpbWVzKDEpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQyKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5Mb2NhbChncmVtbGluZ28uVF9fLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIikuVGFpbCgxKSkpLlRpbWVzKDEpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLnJlcGVhdChfXy5vdXQoKS5sb2NhbChfXy5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMSkpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgxKSkpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDEpKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoJ3BlcmZvcm1hbmNlcycpLnRhaWwoMSkpKS50aW1lcygxKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDI1MFhfcmVwZWF0WG91dF9sb2NhbFhvcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3RhaWxYMVhYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDI1MCkucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgxKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMjUwKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDEpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMjUwKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDEpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDI1MCkucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoc3RyaW5nMCkudGFpbChudW1iZXIwKSkpLnRpbWVzKG51bWJlcjEpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMjUwKS5SZXBlYXQoX18uT3V0KCkuTG9jYWw8b2JqZWN0PihfXy5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlRhaWw8b2JqZWN0PigxKSkpLlRpbWVzKDIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQyNTApLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpLkxvY2FsKGdyZW1saW5nby5UX18uT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiKS5UYWlsKDEpKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMjUwKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18ub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDEpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDI1MCkucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgxKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyNTApLnJlcGVhdChfXy5vdXQoKS5sb2NhbChfXy5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMSkpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQyNTApLnJlcGVhdChfXy5vdXQoKS5sb2NhbChfXy5vcmRlcigpLmJ5KCdwZXJmb3JtYW5jZXMnKS50YWlsKDEpKSkudGltZXMoMikudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgzWF9yZXBlYXRYb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfdGFpbFgzWF9saW1pdFgxWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDMpLmxpbWl0KDEpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMykubGltaXQoMSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMykubGltaXQoMSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcwKS50YWlsKG51bWJlcjApLmxpbWl0KG51bWJlcjEpKS50aW1lcyhudW1iZXIyKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDMpLlJlcGVhdChfXy5PdXQoKS5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlRhaWw8b2JqZWN0PigzKS5MaW1pdDxvYmplY3Q+KDEpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiKS5UYWlsKDMpLkxpbWl0KDEpKS5UaW1lcygyKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS50YWlsKDMpLmxpbWl0KDEpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikudGFpbCgzKS5saW1pdCgxKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnRhaWwoMykubGltaXQoMSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCdwZXJmb3JtYW5jZXMnKS50YWlsKDMpLmxpbWl0KDEpKS50aW1lcygyKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDNYX3JlcGVhdFhvdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2xpbWl0WDVYX3RhaWxYMVhYX3RpbWVzWDJYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIiwgT3JkZXIuZGVzYykubGltaXQoNSkudGFpbCgxKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiLCBPcmRlci5kZXNjKS5saW1pdCg1KS50YWlsKDEpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiLCBPcmRlci5kZXNjKS5saW1pdCg1KS50YWlsKDEpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMCwgT3JkZXIuZGVzYykubGltaXQobnVtYmVyMCkudGFpbChudW1iZXIxKSkudGltZXMobnVtYmVyMikudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5SZXBlYXQoX18uT3V0KCkuT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiLCBPcmRlci5EZXNjKS5MaW1pdDxvYmplY3Q+KDUpLlRhaWw8b2JqZWN0PigxKSkuVGltZXMoMikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIiwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkxpbWl0KDUpLlRhaWwoMSkpLlRpbWVzKDIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIsIE9yZGVyLmRlc2MpLmxpbWl0KDUpLnRhaWwoMSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiLCBPcmRlci5kZXNjKS5saW1pdCg1KS50YWlsKDEpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIiwgT3JkZXIuZGVzYykubGltaXQoNSkudGFpbCgxKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoJ3BlcmZvcm1hbmNlcycsIE9yZGVyLmRlc2MpLmxpbWl0KDUpLnRhaWwoMSkpLnRpbWVzKDIpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYM1hfcmVwZWF0WG91dEVfb3JkZXJfYnlYd2VpZ2h0WF90YWlsWDJYX2luVlhfdGltZXNYMlhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIikudGFpbCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIikudGFpbCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIpLnRhaWwoMikuaW5WKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoc3RyaW5nMCkudGFpbChudW1iZXIwKS5pblYoKSkudGltZXMobnVtYmVyMCkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5SZXBlYXQoX18uT3V0RSgpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIikuVGFpbDxvYmplY3Q+KDIpLkluVigpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0RSgpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIikuVGFpbCgyKS5JblYoKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIpLnRhaWwoMikuaW5WKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIikudGFpbCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXRFKCkub3JkZXIoKS5ieShcIndlaWdodFwiKS50YWlsKDIpLmluVigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0X2UoKS5vcmRlcigpLmJ5KCd3ZWlnaHQnKS50YWlsKDIpLmluX3YoKSkudGltZXMoMikudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgzWF9yZXBlYXRYb3V0RV9vcmRlcl9ieVh3ZWlnaHRfZGVzY1hfbGltaXRYMlhfaW5WWF90aW1lc1gyWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXRFKCkub3JkZXIoKS5ieShcIndlaWdodFwiLCBPcmRlci5kZXNjKS5saW1pdCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykubGltaXQoMikuaW5WKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXRFKCkub3JkZXIoKS5ieShcIndlaWdodFwiLCBPcmRlci5kZXNjKS5saW1pdCgyKS5pblYoKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXRFKCkub3JkZXIoKS5ieShzdHJpbmcwLCBPcmRlci5kZXNjKS5saW1pdChudW1iZXIwKS5pblYoKSkudGltZXMobnVtYmVyMCkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5SZXBlYXQoX18uT3V0RSgpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIiwgT3JkZXIuRGVzYykuTGltaXQ8b2JqZWN0PigyKS5JblYoKSkuVGltZXMoMikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dEUoKS5PcmRlcigpLkJ5KFwid2VpZ2h0XCIsIGdyZW1saW5nby5PcmRlci5EZXNjKS5MaW1pdCgyKS5JblYoKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmRlc2MpLmxpbWl0KDIpLmluVigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmRlc2MpLmxpbWl0KDIpLmluVigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykucmVwZWF0KF9fLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmRlc2MpLmxpbWl0KDIpLmluVigpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0X2UoKS5vcmRlcigpLmJ5KCd3ZWlnaHQnLCBPcmRlci5kZXNjKS5saW1pdCgyKS5pbl92KCkpLnRpbWVzKDIpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZW1pdF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApKS50aW1lcyhudW1iZXIwKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRW1pdCgpLlJlcGVhdChfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkuVGltZXMoMikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRW1pdCgpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpKS5UaW1lcygyKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykpLnRpbWVzKDIpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYZW1pdF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKF9fLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18uZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcwKSkudGltZXMobnVtYmVyMCkudmFsdWVzKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkVtaXQoKS5SZXBlYXQoX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpLlRpbWVzKDIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkVtaXQoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uZW1pdCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmVtaXQoKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKSkudGltZXMoMikudmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZW1pdF9yZXBlYXRYbG9jYWxYb3V0X29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcwKSkpLnRpbWVzKG51bWJlcjApLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5FbWl0KCkuUmVwZWF0KF9fLkxvY2FsPG9iamVjdD4oX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5FbWl0KCkuUmVwZWF0KGdyZW1saW5nby5UX18uTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkpLlRpbWVzKDIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKSkpLnRpbWVzKDIpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYZW1pdF9yZXBlYXRYbG9jYWxYb3V0X29yZGVyX2J5WG5hbWVYWFhfdGltZXNYMlhfdmFsdWVzWG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uZW1pdCgpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMCkpKS50aW1lcyhudW1iZXIwKS52YWx1ZXMoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uRW1pdCgpLlJlcGVhdChfXy5Mb2NhbDxvYmplY3Q+KF9fLk91dCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpKSkuVGltZXMoMikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uRW1pdCgpLlJlcGVhdChncmVtbGluZ28uVF9fLkxvY2FsKGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpKS5UaW1lcygyKS5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5lbWl0KCkucmVwZWF0KF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmVtaXQoKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uZW1pdCgpLnJlcGVhdChfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLmVtaXQoKS5yZXBlYXQoX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpKSkudGltZXMoMikudmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZW1pdFhoYXNMYWJlbFhwZXJzb25YWF9yZXBlYXRYb3V0X29yZGVyX2J5WG5hbWVYWF90aW1lc1gyWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZW1pdChfXy5oYXNMYWJlbChcInBlcnNvblwiKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZW1pdChfXy5oYXNMYWJlbChcInBlcnNvblwiKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmVtaXQoX18uaGFzTGFiZWwoXCJwZXJzb25cIikpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZW1pdChfXy5oYXNMYWJlbChzdHJpbmcwKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMSkpLnRpbWVzKG51bWJlcjApLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5FbWl0KF9fLkhhc0xhYmVsKFwicGVyc29uXCIpKS5SZXBlYXQoX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpLlRpbWVzKDIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVtaXQoZ3JlbWxpbmdvLlRfXy5IYXNMYWJlbChcInBlcnNvblwiKSkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpLlRpbWVzKDIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZW1pdChfXy5oYXNMYWJlbChcInBlcnNvblwiKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS50aW1lcygyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbWl0KF9fLmhhc0xhYmVsKFwicGVyc29uXCIpKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmVtaXQoX18uaGFzTGFiZWwoXCJwZXJzb25cIikpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5lbWl0KF9fLmhhc19sYWJlbCgncGVyc29uJykpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykpLnRpbWVzKDIpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdW50aWxYbG9vcHNfaXNYMlhYX3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZVhYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudW50aWwoX18ubG9vcHMoKS5pcygyKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS51bnRpbChfXy5sb29wcygpLmlzKG51bWJlcjApKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcwKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlVudGlsKF9fLkxvb3BzKCkuSXMoMikpLlJlcGVhdChfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVW50aWwoZ3JlbWxpbmdvLlRfXy5Mb29wcygpLklzKDIpKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudW50aWwoX18ubG9vcHMoKS5pcygyKSkucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnVudGlsKF9fLmxvb3BzKCkuaXNfKDIpKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2VtaXRfcmVwZWF0WGRlZHVwWF90aW1lc1gxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkVtaXQoKS5SZXBlYXQoX18uRGVkdXAoKSkuVGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5FbWl0KCkuUmVwZWF0KGdyZW1saW5nby5UX18uRGVkdXAoKSkuVGltZXMoMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZW1pdCgpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZW1pdF9yZXBlYXRYZGVkdXBYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRW1pdCgpLlJlcGVhdChfXy5EZWR1cCgpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVtaXQoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5EZWR1cCgpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5lbWl0KCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmVtaXQoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfdW5pb25YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLnVuaW9uKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLnVuaW9uKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy51bmlvbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLnVuaW9uKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5VbmlvbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlVuaW9uKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy51bmlvbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLnVuaW9uKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcudW5pb24oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLnVuaW9uKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfdW5pb25YVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oX18uVigpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy51bmlvbihfXy5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy51bmlvbihfXy5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uVigpLnZhbHVlcyhzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5VbmlvbjxvYmplY3Q+KF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5VbmlvbihncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLnVuaW9uKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy51bmlvbihfXy5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcudW5pb24oX18uVigpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcudW5pb24oX18uVigpLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblhWWHYxWF9WWDRYWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oX18uVih2aWQxKSwgX18uVih2aWQ0KSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcudW5pb24oX18uVih2aWQxKSwgX18uVih2aWQ0KSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLnVuaW9uKF9fLlYodmlkMSksIF9fLlYodmlkNCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uVih2aWQxKSwgX18uVih2aWQ0KSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVW5pb248b2JqZWN0PihfXy5WKHZpZDEpLCBfXy5WKHZpZDQpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlVuaW9uKGdyZW1saW5nby5UX18uVih2aWQxKSwgZ3JlbWxpbmdvLlRfXy5WKHZpZDQpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18uVih2aWQxKSwgX18uVih2aWQ0KSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy51bmlvbihfXy5WKHZpZDEpLCBfXy5WKHZpZDQpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLlYodmlkMSksIF9fLlYodmlkNCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy5WKHZpZDEpLCBfXy5WKHZpZDQpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblhWX2hhc0xhYmVsWHNvZnR3YXJlWF9WX2hhc0xhYmVsWHBlcnNvblhYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy51bmlvbihfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uVigpLmhhc0xhYmVsKFwicGVyc29uXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy51bmlvbihfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uVigpLmhhc0xhYmVsKFwicGVyc29uXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcudW5pb24oX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIiksIF9fLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy51bmlvbihfXy5WKCkuaGFzTGFiZWwoc3RyaW5nMCksIF9fLlYoKS5oYXNMYWJlbChzdHJpbmcxKSkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVW5pb248b2JqZWN0PihfXy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uVigpLkhhc0xhYmVsKFwicGVyc29uXCIpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlVuaW9uKGdyZW1saW5nby5UX18uVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIiksIGdyZW1saW5nby5UX18uVigpLkhhc0xhYmVsKFwicGVyc29uXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIiksIF9fLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy51bmlvbihfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uVigpLmhhc0xhYmVsKFwicGVyc29uXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLCBfXy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfdW5pb25YVl9vdXRfb3V0X1ZfaGFzTGFiZWxYc29mdHdhcmVYWF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlVuaW9uPG9iamVjdD4oX18uVigpLk91dCgpLk91dCgpLCBfXy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5VbmlvbihncmVtbGluZ28uVF9fLlYoKS5PdXQoKS5PdXQoKSwgZ3JlbWxpbmdvLlRfXy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLnVuaW9uKF9fLlYoKS5vdXQoKS5vdXQoKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblhWX291dF9vdXRfVl9oYXNMYWJlbFhzb2Z0d2FyZVhYX3BhdGhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChzdHJpbmcwKSkucGF0aCgpLmJ5KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVW5pb248b2JqZWN0PihfXy5WKCkuT3V0KCkuT3V0KCksIF9fLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5VbmlvbihncmVtbGluZ28uVF9fLlYoKS5PdXQoKS5PdXQoKSwgZ3JlbWxpbmdvLlRfXy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkuUGF0aCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLnVuaW9uKF9fLlYoKS5vdXQoKS5vdXQoKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy51bmlvbihfXy5WKCkub3V0KCkub3V0KCksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcudW5pb24oX18uVigpLm91dCgpLm91dCgpLCBfXy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpKS5wYXRoKCkuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblh1bmlvblhWX291dF9vdXRYX1ZfaGFzTGFiZWxYc29mdHdhcmVYWF9wYXRoX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLnVuaW9uKF9fLnVuaW9uKF9fLlYoKS5vdXQoKS5vdXQoKSksIF9fLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKHN0cmluZzApKS5wYXRoKCkuYnkoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5VbmlvbjxvYmplY3Q+KF9fLlVuaW9uPG9iamVjdD4oX18uVigpLk91dCgpLk91dCgpKSwgX18uVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlVuaW9uKGdyZW1saW5nby5UX18uVW5pb24oZ3JlbWxpbmdvLlRfXy5WKCkuT3V0KCkuT3V0KCkpLCBncmVtbGluZ28uVF9fLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcudW5pb24oX18udW5pb24oX18uVigpLm91dCgpLm91dCgpKSwgX18uVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy51bmlvbihfXy5WKCkub3V0KCkub3V0KCkpLCBfXy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpKS5wYXRoKCkuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblhpbmplY3RYMVhfaW5qZWN0WDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oX18uaW5qZWN0KDEpLCBfXy5pbmplY3QoMikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy51bmlvbihfXy5pbmplY3QoMSksIF9fLmluamVjdCgyKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy51bmlvbihfXy5pbmplY3QoMSksIF9fLmluamVjdCgyKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uaW5qZWN0KG51bWJlcjApLCBfXy5pbmplY3QobnVtYmVyMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVW5pb248b2JqZWN0PihfXy5JbmplY3QoMSksIF9fLkluamVjdCgyKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlVuaW9uKGdyZW1saW5nby5UX18uSW5qZWN0KDEpLCBncmVtbGluZ28uVF9fLkluamVjdCgyKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy51bmlvbihfXy5pbmplY3QoMSksIF9fLmluamVjdCgyKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcudW5pb24oX18uaW5qZWN0KDEpLCBfXy5pbmplY3QoMikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLmluamVjdCgxKSwgX18uaW5qZWN0KDIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLnVuaW9uKF9fLmluamVjdCgxKSwgX18uaW5qZWN0KDIpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3VuaW9uWGNvbnN0YW50WDFYX2NvbnN0YW50WDJYX2NvbnN0YW50WDNYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikudW5pb24oY29uc3RhbnQoMWkpLCBjb25zdGFudCgyaSksIGNvbnN0YW50KDNpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikudW5pb24oX18uY29uc3RhbnQoMWkpLCBfXy5jb25zdGFudCgyaSksIF9fLmNvbnN0YW50KDNpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLnVuaW9uKF9fLmNvbnN0YW50KDFpKSwgX18uY29uc3RhbnQoMmkpLCBfXy5jb25zdGFudCgzaSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikudW5pb24oX18uY29uc3RhbnQoaW50ZWdlcjApLCBfXy5jb25zdGFudChpbnRlZ2VyMSksIF9fLmNvbnN0YW50KGludGVnZXIyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLlVuaW9uPG9iamVjdD4oX18uQ29uc3RhbnQ8b2JqZWN0PigxKSwgX18uQ29uc3RhbnQ8b2JqZWN0PigyKSwgX18uQ29uc3RhbnQ8b2JqZWN0PigzKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuVW5pb24oZ3JlbWxpbmdvLlRfXy5Db25zdGFudChpbnQzMigxKSksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoaW50MzIoMikpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KGludDMyKDMpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLnVuaW9uKF9fLmNvbnN0YW50KDFpKSwgX18uY29uc3RhbnQoMmkpLCBfXy5jb25zdGFudCgzaSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikudW5pb24oX18uY29uc3RhbnQoMSksIF9fLmNvbnN0YW50KDIpLCBfXy5jb25zdGFudCgzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS51bmlvbihfXy5jb25zdGFudCgxKSwgX18uY29uc3RhbnQoMiksIF9fLmNvbnN0YW50KDMpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikudW5pb24oX18uY29uc3RhbnQoMSksIF9fLmNvbnN0YW50KDIpLCBfXy5jb25zdGFudCgzKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl91bmlvblhvdXRfX2luWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5pbigpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudW5pb24oX18ub3V0KCksIF9fLmluKCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudW5pb24oX18ub3V0KCksIF9fLmluKCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5pbigpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVW5pb248b2JqZWN0PihfXy5PdXQoKSwgX18uSW4oKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVW5pb24oZ3JlbWxpbmdvLlRfXy5PdXQoKSwgZ3JlbWxpbmdvLlRfXy5JbigpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5pbigpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS51bmlvbihfXy5vdXQoKSwgX18uaW4oKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudW5pb24oX18ub3V0KCksIF9fLmluXygpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5pbl8oKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF91bmlvblhyZXBlYXRYb3V0WF90aW1lc1gyWF9fb3V0WF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLCBfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLCBfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSwgX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKG51bWJlcjApLCBfXy5vdXQoKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5VbmlvbjxvYmplY3Q+KF9fLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoMiksIF9fLk91dCgpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuVW5pb24oZ3JlbWxpbmdvLlRfXy5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMiksIGdyZW1saW5nby5UX18uT3V0KCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLnVuaW9uKF9fLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMiksIF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSwgX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLCBfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSwgX18ub3V0KCkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2hvb3NlWGxhYmVsX2lzX3BlcnNvbl9fdW5pb25YX19vdXRfbGFuZ19fb3V0X25hbWVYX19pbl9sYWJlbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhcImxhbmdcIiksIF9fLm91dCgpLnZhbHVlcyhcIm5hbWVcIikpLCBfXy5pbigpLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhcImxhbmdcIiksIF9fLm91dCgpLnZhbHVlcyhcIm5hbWVcIikpLCBfXy5pbigpLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpLCBfXy51bmlvbihfXy5vdXQoKS52YWx1ZXMoXCJsYW5nXCIpLCBfXy5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpKSwgX18uaW4oKS5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoc3RyaW5nMCksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhzdHJpbmcxKSwgX18ub3V0KCkudmFsdWVzKHN0cmluZzIpKSwgX18uaW4oKS5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihfXy5MYWJlbCgpLklzKFwicGVyc29uXCIpLCBfXy5VbmlvbjxvYmplY3Q+KF9fLk91dCgpLlZhbHVlczxvYmplY3Q+KFwibGFuZ1wiKSwgX18uT3V0KCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSwgX18uSW4oKS5MYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNob29zZShncmVtbGluZ28uVF9fLkxhYmVsKCkuSXMoXCJwZXJzb25cIiksIGdyZW1saW5nby5UX18uVW5pb24oZ3JlbWxpbmdvLlRfXy5PdXQoKS5WYWx1ZXMoXCJsYW5nXCIpLCBncmVtbGluZ28uVF9fLk91dCgpLlZhbHVlcyhcIm5hbWVcIikpLCBncmVtbGluZ28uVF9fLkluKCkuTGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhcImxhbmdcIiksIF9fLm91dCgpLnZhbHVlcyhcIm5hbWVcIikpLCBfXy5pbigpLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18ubGFiZWwoKS5pcyhcInBlcnNvblwiKSwgX18udW5pb24oX18ub3V0KCkudmFsdWVzKFwibGFuZ1wiKSwgX18ub3V0KCkudmFsdWVzKFwibmFtZVwiKSksIF9fLmluKCkubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpLCBfXy51bmlvbihfXy5vdXQoKS52YWx1ZXMoXCJsYW5nXCIpLCBfXy5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpKSwgX18uaW5fKCkubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXNfKCdwZXJzb24nKSwgX18udW5pb24oX18ub3V0KCkudmFsdWVzKCdsYW5nJyksIF9fLm91dCgpLnZhbHVlcygnbmFtZScpKSwgX18uaW5fKCkubGFiZWwoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYbGFiZWxfaXNfcGVyc29uX191bmlvblhfX291dF9sYW5nX19vdXRfbmFtZVhfX2luX2xhYmVsWF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpLCBfXy51bmlvbihfXy5vdXQoKS52YWx1ZXMoXCJsYW5nXCIpLCBfXy5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpKSwgX18uaW4oKS5sYWJlbCgpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18ubGFiZWwoKS5pcyhcInBlcnNvblwiKSwgX18udW5pb24oX18ub3V0KCkudmFsdWVzKFwibGFuZ1wiKSwgX18ub3V0KCkudmFsdWVzKFwibmFtZVwiKSksIF9fLmluKCkubGFiZWwoKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpLCBfXy51bmlvbihfXy5vdXQoKS52YWx1ZXMoXCJsYW5nXCIpLCBfXy5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpKSwgX18uaW4oKS5sYWJlbCgpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5sYWJlbCgpLmlzKHN0cmluZzApLCBfXy51bmlvbihfXy5vdXQoKS52YWx1ZXMoc3RyaW5nMSksIF9fLm91dCgpLnZhbHVlcyhzdHJpbmcyKSksIF9fLmluKCkubGFiZWwoKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLkxhYmVsKCkuSXMoXCJwZXJzb25cIiksIF9fLlVuaW9uPG9iamVjdD4oX18uT3V0KCkuVmFsdWVzPG9iamVjdD4oXCJsYW5nXCIpLCBfXy5PdXQoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLCBfXy5JbigpLkxhYmVsKCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uTGFiZWwoKS5JcyhcInBlcnNvblwiKSwgZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLk91dCgpLlZhbHVlcyhcImxhbmdcIiksIGdyZW1saW5nby5UX18uT3V0KCkuVmFsdWVzKFwibmFtZVwiKSksIGdyZW1saW5nby5UX18uSW4oKS5MYWJlbCgpKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhcImxhbmdcIiksIF9fLm91dCgpLnZhbHVlcyhcIm5hbWVcIikpLCBfXy5pbigpLmxhYmVsKCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhcImxhbmdcIiksIF9fLm91dCgpLnZhbHVlcyhcIm5hbWVcIikpLCBfXy5pbigpLmxhYmVsKCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIiksIF9fLnVuaW9uKF9fLm91dCgpLnZhbHVlcyhcImxhbmdcIiksIF9fLm91dCgpLnZhbHVlcyhcIm5hbWVcIikpLCBfXy5pbl8oKS5sYWJlbCgpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLmxhYmVsKCkuaXNfKCdwZXJzb24nKSwgX18udW5pb24oX18ub3V0KCkudmFsdWVzKCdsYW5nJyksIF9fLm91dCgpLnZhbHVlcygnbmFtZScpKSwgX18uaW5fKCkubGFiZWwoKSkuZ3JvdXBfY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3VuaW9uWHJlcGVhdFh1bmlvblhvdXRYY3JlYXRlZFhfX2luWGNyZWF0ZWRYWF90aW1lc1gyWF9fcmVwZWF0WHVuaW9uWGluWGNyZWF0ZWRYX19vdXRYY3JlYXRlZFhYX3RpbWVzWDJYWF9sYWJlbF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJjcmVhdGVkXCIpLF9fLmluKFwiY3JlYXRlZFwiKSkpLnRpbWVzKDIpLF9fLnJlcGVhdChfXy51bmlvbihfXy5pbihcImNyZWF0ZWRcIiksX18ub3V0KFwiY3JlYXRlZFwiKSkpLnRpbWVzKDIpKS5sYWJlbCgpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJjcmVhdGVkXCIpLCBfXy5pbihcImNyZWF0ZWRcIikpKS50aW1lcygyKSwgX18ucmVwZWF0KF9fLnVuaW9uKF9fLmluKFwiY3JlYXRlZFwiKSwgX18ub3V0KFwiY3JlYXRlZFwiKSkpLnRpbWVzKDIpKS5sYWJlbCgpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS51bmlvbihfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KFwiY3JlYXRlZFwiKSwgX18uaW4oXCJjcmVhdGVkXCIpKSkudGltZXMoMiksIF9fLnJlcGVhdChfXy51bmlvbihfXy5pbihcImNyZWF0ZWRcIiksIF9fLm91dChcImNyZWF0ZWRcIikpKS50aW1lcygyKSkubGFiZWwoKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoc3RyaW5nMCksIF9fLmluKHN0cmluZzApKSkudGltZXMobnVtYmVyMCksIF9fLnJlcGVhdChfXy51bmlvbihfXy5pbihzdHJpbmcwKSwgX18ub3V0KHN0cmluZzApKSkudGltZXMobnVtYmVyMCkpLmxhYmVsKCkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlVuaW9uPG9iamVjdD4oX18uUmVwZWF0KF9fLlVuaW9uPG9iamVjdD4oX18uT3V0KFwiY3JlYXRlZFwiKSwgX18uSW4oXCJjcmVhdGVkXCIpKSkuVGltZXMoMiksIF9fLlJlcGVhdChfXy5VbmlvbjxvYmplY3Q+KF9fLkluKFwiY3JlYXRlZFwiKSwgX18uT3V0KFwiY3JlYXRlZFwiKSkpLlRpbWVzKDIpKS5MYWJlbCgpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVW5pb24oZ3JlbWxpbmdvLlRfXy5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSW4oXCJjcmVhdGVkXCIpKSkuVGltZXMoMiksIGdyZW1saW5nby5UX18uUmVwZWF0KGdyZW1saW5nby5UX18uVW5pb24oZ3JlbWxpbmdvLlRfXy5JbihcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKSkpLlRpbWVzKDIpKS5MYWJlbCgpLkdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS51bmlvbihfXy5yZXBlYXQoX18udW5pb24oX18ub3V0KFwiY3JlYXRlZFwiKSwgX18uaW4oXCJjcmVhdGVkXCIpKSkudGltZXMoMiksIF9fLnJlcGVhdChfXy51bmlvbihfXy5pbihcImNyZWF0ZWRcIiksIF9fLm91dChcImNyZWF0ZWRcIikpKS50aW1lcygyKSkubGFiZWwoKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJjcmVhdGVkXCIpLCBfXy5pbihcImNyZWF0ZWRcIikpKS50aW1lcygyKSwgX18ucmVwZWF0KF9fLnVuaW9uKF9fLmluKFwiY3JlYXRlZFwiKSwgX18ub3V0KFwiY3JlYXRlZFwiKSkpLnRpbWVzKDIpKS5sYWJlbCgpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudW5pb24oX18ucmVwZWF0KF9fLnVuaW9uKF9fLm91dChcImNyZWF0ZWRcIiksIF9fLmluXyhcImNyZWF0ZWRcIikpKS50aW1lcygyKSwgX18ucmVwZWF0KF9fLnVuaW9uKF9fLmluXyhcImNyZWF0ZWRcIiksIF9fLm91dChcImNyZWF0ZWRcIikpKS50aW1lcygyKSkubGFiZWwoKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudW5pb24oX18ucmVwZWF0KF9fLnVuaW9uKF9fLm91dCgnY3JlYXRlZCcpLCBfXy5pbl8oJ2NyZWF0ZWQnKSkpLnRpbWVzKDIpLCBfXy5yZXBlYXQoX18udW5pb24oX18uaW5fKCdjcmVhdGVkJyksIF9fLm91dCgnY3JlYXRlZCcpKSkudGltZXMoMikpLmxhYmVsKCkuZ3JvdXBfY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFfMlhfdW5pb25Yb3V0RV9jb3VudF9faW5FX2NvdW50X19vdXRFX3dlaWdodF9zdW1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxLCB2aWQyKS51bmlvbihfXy5vdXRFKCkuY291bnQoKSwgX18uaW5FKCkuY291bnQoKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSwgdmlkMikudW5pb24oX18ub3V0RSgpLmNvdW50KCksIF9fLmluRSgpLmNvdW50KCksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxLCB2aWQyKS51bmlvbihfXy5vdXRFKCkuY291bnQoKSwgX18uaW5FKCkuY291bnQoKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxLCB2aWQyKS51bmlvbihfXy5vdXRFKCkuY291bnQoKSwgX18uaW5FKCkuY291bnQoKSwgX18ub3V0RSgpLnZhbHVlcyhzdHJpbmcwKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEsIHZpZDIpLlVuaW9uPG9iamVjdD4oX18uT3V0RSgpLkNvdW50KCksIF9fLkluRSgpLkNvdW50KCksIF9fLk91dEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5TdW08b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxLCB2aWQyKS5VbmlvbihncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLCBncmVtbGluZ28uVF9fLkluRSgpLkNvdW50KCksIGdyZW1saW5nby5UX18uT3V0RSgpLlZhbHVlcyhcIndlaWdodFwiKS5TdW0oKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEsIHZpZDIpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEsIHZpZDIpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEsIHZpZDIpLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSwgdmlkMikudW5pb24oX18ub3V0X2UoKS5jb3VudCgpLCBfXy5pbl9lKCkuY291bnQoKSwgX18ub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxXzJYX2xvY2FsWHVuaW9uWG91dEVfY291bnRfX2luRV9jb3VudF9fb3V0RV93ZWlnaHRfc3VtWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEsIHZpZDIpLmxvY2FsKF9fLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18ub3V0RSgpLmNvdW50KCksIF9fLmluRSgpLmNvdW50KCksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18ub3V0RSgpLmNvdW50KCksIF9fLmluRSgpLmNvdW50KCksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEsIHZpZDIpLmxvY2FsKF9fLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKHN0cmluZzApLnN1bSgpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEsIHZpZDIpLkxvY2FsPG9iamVjdD4oX18uVW5pb248b2JqZWN0PihfXy5PdXRFKCkuQ291bnQoKSwgX18uSW5FKCkuQ291bnQoKSwgX18uT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLlN1bTxvYmplY3Q+KCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxLCB2aWQyKS5Mb2NhbChncmVtbGluZ28uVF9fLlVuaW9uKGdyZW1saW5nby5UX18uT3V0RSgpLkNvdW50KCksIGdyZW1saW5nby5UX18uSW5FKCkuQ291bnQoKSwgZ3JlbWxpbmdvLlRfXy5PdXRFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLlN1bSgpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEsIHZpZDIpLmxvY2FsKF9fLnVuaW9uKF9fLm91dEUoKS5jb3VudCgpLCBfXy5pbkUoKS5jb3VudCgpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxLCB2aWQyKS5sb2NhbChfXy51bmlvbihfXy5vdXRFKCkuY291bnQoKSwgX18uaW5FKCkuY291bnQoKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18ub3V0RSgpLmNvdW50KCksIF9fLmluRSgpLmNvdW50KCksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18ub3V0X2UoKS5jb3VudCgpLCBfXy5pbl9lKCkuY291bnQoKSwgX18ub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMV8yWF9sb2NhbFh1bmlvblhjb3VudFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxLCB2aWQyKS5sb2NhbChfXy51bmlvbihfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18uY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxLCB2aWQyKS5sb2NhbChfXy51bmlvbihfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxLCB2aWQyKS5sb2NhbChfXy51bmlvbihfXy5jb3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEsIHZpZDIpLkxvY2FsPG9iamVjdD4oX18uVW5pb248b2JqZWN0PihfXy5Db3VudCgpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSwgdmlkMikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLkNvdW50KCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18uY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18uY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSwgdmlkMikubG9jYWwoX18udW5pb24oX18uY291bnQoKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxLCB2aWQyKS5sb2NhbChfXy51bmlvbihfXy5jb3VudCgpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfdW5pb25YYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYWxpY2VYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX2JvYlhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfY2hyaXNYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy51bmlvbihfXy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2hyaXNcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLnVuaW9uKF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIiksIF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLCBfXy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNocmlzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcudW5pb24oX18uYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSwgX18uYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIiksIF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2hyaXNcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKSwgX18uYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSwgX18uYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVW5pb248b2JqZWN0PihfXy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLCBfXy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSwgX18uQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJjaHJpc1wiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5VbmlvbihncmVtbGluZ28uVF9fLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIiksIGdyZW1saW5nby5UX18uQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIiksIGdyZW1saW5nby5UX18uQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJjaHJpc1wiKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLnVuaW9uKF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIiksIF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLCBfXy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNocmlzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLnVuaW9uKF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIiksIF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLCBfXy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNocmlzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIiksIF9fLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLCBfXy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNocmlzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcudW5pb24oX18uYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJyksIF9fLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKSwgX18uYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2NocmlzJykpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYX2hhc0xhYmVsWHBlcnNvblhfdW5pb25YX3doZXJlWF9vdXRfY291bnRfaXNYZ3RYMlhYWF92YWx1ZXNYYWdlWF9ub3RYX3doZXJlWF9ib3RoRV9jb3VudF9pc1hndDJYWFhfdmFsdXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnVuaW9uKHdoZXJlKG91dEUoKS5jb3VudCgpLmlzKFAuZ3QoMikpKS52YWx1ZXMoXCJhZ2VcIiksX18ubm90KHdoZXJlKG91dEUoKS5jb3VudCgpLmlzKFAuZ3QoMikpKSkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS51bmlvbihfXy53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0KDIpKSkudmFsdWVzKFwiYWdlXCIpLCBfXy5ub3QoX18ud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndCgyKSkpKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS51bmlvbihfXy53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0KDIpKSkudmFsdWVzKFwiYWdlXCIpLCBfXy5ub3QoX18ud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndCgyKSkpKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudW5pb24oX18ud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndChudW1iZXIwKSkpLnZhbHVlcyhzdHJpbmcxKSwgX18ubm90KF9fLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3QobnVtYmVyMCkpKSkudmFsdWVzKHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5VbmlvbjxvYmplY3Q+KF9fLldoZXJlKF9fLk91dEUoKS5Db3VudCgpLklzKFAuR3QoMikpKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSwgX18uTm90KF9fLldoZXJlKF9fLk91dEUoKS5Db3VudCgpLklzKFAuR3QoMikpKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlVuaW9uKGdyZW1saW5nby5UX18uV2hlcmUoZ3JlbWxpbmdvLlRfXy5PdXRFKCkuQ291bnQoKS5JcyhncmVtbGluZ28uUC5HdCgyKSkpLlZhbHVlcyhcImFnZVwiKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5XaGVyZShncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLklzKGdyZW1saW5nby5QLkd0KDIpKSkpLlZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnVuaW9uKF9fLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3QoMikpKS52YWx1ZXMoXCJhZ2VcIiksIF9fLm5vdChfXy53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0KDIpKSkpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS51bmlvbihfXy53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0KDIpKSkudmFsdWVzKFwiYWdlXCIpLCBfXy5ub3QoX18ud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndCgyKSkpKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudW5pb24oX18ud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndCgyKSkpLnZhbHVlcyhcImFnZVwiKSwgX18ubm90KF9fLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3QoMikpKSkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS51bmlvbihfXy53aGVyZShfXy5vdXRfZSgpLmNvdW50KCkuaXNfKFAuZ3QoMikpKS52YWx1ZXMoJ2FnZScpLCBfXy5ub3RfKF9fLndoZXJlKF9fLm91dF9lKCkuY291bnQoKS5pc18oUC5ndCgyKSkpKS52YWx1ZXMoJ25hbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTIzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTIzKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEyMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDEyMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDEyMykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMjMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEyMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTIzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEyMykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0RlY2ltYWwpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0RlY2ltYWwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQmlnRGVjaW1hbCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaWdEZWNpbWFsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0RFQ0lNQUwpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWF0aFhhZGRYMF81WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWF0aChcIl8gKyAwLjVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLm1hdGgoXCJfICsgMC41XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWF0aChcIl8gKyAwLjVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWF0aChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuTWF0aChcIl8gKyAwLjVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJpZ0RlY2ltYWwpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQmlnRGVjaW1hbCkpLk1hdGgoXCJfICsgMC41XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWF0aChcIl8gKyAwLjVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWF0aChcIl8gKyAwLjVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5iaWdEZWNpbWFsKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkubWF0aChcIl8gKyAwLjVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXNfKFAudHlwZV9vZihHVHlwZS5CSUdERUNJTUFMKSkubWF0aCgnXyArIDAuNScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9pc1hndFgwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCA1KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkuaXMoUC5ndCgwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLmlzKFAuZ3QoMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkuaXMoUC5ndCgwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkuaXMoUC5ndChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLklzKFAuR3QoMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CaWdEZWNpbWFsKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJpZ0RlY2ltYWwpKS5JcyhncmVtbGluZ28uUC5HdCgwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5pcyhQLmd0KDApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5pcyhQLmd0KDApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5pcyhQLmd0KDApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0RFQ0lNQUwpKS5pc18oUC5ndCgwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3N1bVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA0KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMikuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMykuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA0KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDIpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDMpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAzKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA0KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMikuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMykuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgNCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0RlY2ltYWwpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0RlY2ltYWwpKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CaWdEZWNpbWFsKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJpZ0RlY2ltYWwpKS5TdW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnaW50JykuYXNfbnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQklHREVDSU1BTCkpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0RFQ0lNQUxYX2lzWHR5cGVPZlhHVHlwZV9CSUdERUNJTUFMWFhfbWluWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgNSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA1KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDUpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJpZ0RlY2ltYWwpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQmlnRGVjaW1hbCkpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5iaWdEZWNpbWFsKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXNfKFAudHlwZV9vZihHVHlwZS5CSUdERUNJTUFMKSkubWluXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9tYXhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNykuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNykuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDcpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDE0KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA3KS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxNCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMjEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA3KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxNCkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMjEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNykuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA3KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxNCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDcpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDE0KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCA3KS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAxNCkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMjEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CaWdEZWNpbWFsKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdEZWNpbWFsKSkuTWF4PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQmlnRGVjaW1hbCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaWdEZWNpbWFsKSkuTWF4KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0RlY2ltYWwpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0RlY2ltYWwpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0RFQ0lNQUwpKS5tYXhfKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdERUNJTUFMWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDEwWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDYpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDYpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA2KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDYpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDYpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDYpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgNikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm11bHRpcGxpZWRcIikuYnkoaWRlbnRpdHkoKSkuYnkobWF0aChcIl8gKiAxMFwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm11bHRpcGxpZWRcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChcIl8gKiAxMFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJtdWx0aXBsaWVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMTBcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnByb2plY3Qoc3RyaW5nMSwgc3RyaW5nMikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChzdHJpbmczKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLlByb2plY3Q8b2JqZWN0PihcIm9yaWdpbmFsXCIsIFwibXVsdGlwbGllZFwiKS5CeShfXy5JZGVudGl0eSgpKS5CeShfXy5NYXRoKFwiXyAqIDEwXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQmlnRGVjaW1hbCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaWdEZWNpbWFsKSkuUHJvamVjdChcIm9yaWdpbmFsXCIsIFwibXVsdGlwbGllZFwiKS5CeShncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLkJ5KGdyZW1saW5nby5UX18uTWF0aChcIl8gKiAxMFwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJtdWx0aXBsaWVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMTBcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHREVDSU1BTCkuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm11bHRpcGxpZWRcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChcIl8gKiAxMFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5iaWdEZWNpbWFsKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwibXVsdGlwbGllZFwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKFwiXyAqIDEwXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0RFQ0lNQUwpKS5wcm9qZWN0KCdvcmlnaW5hbCcsICdtdWx0aXBsaWVkJykuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgnXyAqIDEwJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg5OVhfYXNOdW1iZXJYR1R5cGVfQklHREVDSU1BTFhfaXNYdHlwZU9mWEdUeXBlX0JJR0RFQ0lNQUxYWF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDk5KS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoOTkpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoOTkpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pig5OSkuQXNOdW1iZXIoR1R5cGUuQmlnRGVjaW1hbCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoOTkpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CaWdEZWNpbWFsKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJpZ0RlY2ltYWwpKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoOTkpLmFzTnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0RFQ0lNQUwpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDk5KS5hc051bWJlcihHVHlwZS5CSUdERUNJTUFMKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCg5OSkuYXNOdW1iZXIoR1R5cGUuYmlnRGVjaW1hbCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnRGVjaW1hbCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCg5OSkuYXNfbnVtYmVyKEdUeXBlLkJJR0RFQ0lNQUwpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQklHREVDSU1BTCkpLmdyb3VwX2NvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfQklHREVDSU1BTFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQklHREVDSU1BTCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuQmlnRGVjaW1hbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQmlnRGVjaW1hbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdERUNJTUFMKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5iaWdEZWNpbWFsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0RFQ0lNQUwpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNDU2KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNDU2KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQ1NikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDQ1NikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDQ1NikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA0NTYpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQ1NikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNDU2KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDQ1NikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CaWdJbnQpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQmlnSW50KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdJTlQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQklHSU5UKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9tYXRoWG11bFgxMDAwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTAwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTAwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTAwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMTAwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLm1hdGgoXCJfICogMTAwMFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLm1hdGgoXCJfICogMTAwMFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5tYXRoKFwiXyAqIDEwMDBcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLm1hdGgoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuQmlnSW50KS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKS5NYXRoKFwiXyAqIDEwMDBcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJpZ0ludCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaWdJbnQpKS5NYXRoKFwiXyAqIDEwMDBcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkubWF0aChcIl8gKiAxMDAwXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5tYXRoKFwiXyAqIDEwMDBcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLm1hdGgoXCJfICogMTAwMFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdJTlQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQklHSU5UKSkubWF0aCgnXyAqIDEwMDAnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX2lzWGVxWDQyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA0MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA0MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA0MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDQyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDQyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLmlzKFAuZXEoNDIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLmlzKFAuZXEoNDIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5pcyhQLmVxKDQyKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLmlzKFAuZXEobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuSXMoUC5FcSg0MikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CaWdJbnQpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQmlnSW50KSkuSXMoZ3JlbWxpbmdvLlAuRXEoNDIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5pcyhQLmVxKDQyKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLmlzKFAuZXEoNDIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkuaXMoUC5lcSg0MikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnaW50JykuYXNfbnVtYmVyKEdUeXBlLkJJR0lOVCkuaXNfKFAudHlwZV9vZihHVHlwZS5CSUdJTlQpKS5pc18oUC5lcSg0MikpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfc3VtWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTApLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDIwKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDEwKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyMCkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMzApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAxMCkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMjApLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDMwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQmlnSW50KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJpZ0ludCkpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuQklHSU5UKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0lOVCkpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX0JJR0lOVFhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYX21pblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDUpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDE1KS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDUpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDE1KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyNSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDE1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDUpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDE1KS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAyNSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJpZ0ludCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaWdJbnQpKS5NaW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpLmlzKFAudHlwZU9mKEdUeXBlLmJpZ0ludCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnaW50JykuYXNfbnVtYmVyKEdUeXBlLkJJR0lOVCkuaXNfKFAudHlwZV9vZihHVHlwZS5CSUdJTlQpKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9tYXhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTAwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMDApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMwMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjAwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMDApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTAwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMDApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMwMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMDApLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDIwMCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMzAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTAwKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyMDApLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDMwMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzAwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzAwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEwMCkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMjAwKS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAzMDApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuQmlnSW50KS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CaWdJbnQpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQmlnSW50KSkuTWF4KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CSUdJTlQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQklHSU5UKSkubWF4XygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWF9pc1h0eXBlT2ZYR1R5cGVfQklHSU5UWFhfcHJvamVjdF9ieVhpZGVudGl0eVhfYnlYbWF0aFhhZGRYOTk5WFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCA1MCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJhZGRlZFwiKS5ieShpZGVudGl0eSgpKS5ieShtYXRoKFwiXyArIDk5OVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJhZGRlZFwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKFwiXyArIDk5OVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwiYWRkZWRcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChcIl8gKyA5OTlcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5wcm9qZWN0KHN0cmluZzEsIHN0cmluZzIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoc3RyaW5nMykpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLkJpZ0ludCkuSXMoUC5UeXBlT2YoR1R5cGUuQmlnSW50KSkuUHJvamVjdDxvYmplY3Q+KFwib3JpZ2luYWxcIiwgXCJhZGRlZFwiKS5CeShfXy5JZGVudGl0eSgpKS5CeShfXy5NYXRoKFwiXyArIDk5OVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJpZ0ludCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaWdJbnQpKS5Qcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJhZGRlZFwiKS5CeShncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLkJ5KGdyZW1saW5nby5UX18uTWF0aChcIl8gKyA5OTlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcImFkZGVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICsgOTk5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwiYWRkZWRcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChcIl8gKyA5OTlcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuYmlnSW50KS5pcyhQLnR5cGVPZihHVHlwZS5iaWdJbnQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJhZGRlZFwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKFwiXyArIDk5OVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuQklHSU5UKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0lOVCkpLnByb2plY3QoJ29yaWdpbmFsJywgJ2FkZGVkJykuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgnXyArIDk5OScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYNzc3WF9hc051bWJlclhHVHlwZV9CSUdJTlRYX2lzWHR5cGVPZlhHVHlwZV9CSUdJTlRYWF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDc3NykuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCg3NzcpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDc3NykuYXNOdW1iZXIoR1R5cGUuQklHSU5UKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oNzc3KS5Bc051bWJlcihHVHlwZS5CaWdJbnQpLklzKFAuVHlwZU9mKEdUeXBlLkJpZ0ludCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNzc3KS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQmlnSW50KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJpZ0ludCkpLkdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCg3NzcpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCg3NzcpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCg3NzcpLmFzTnVtYmVyKEdUeXBlLmJpZ0ludCkuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDc3NykuYXNfbnVtYmVyKEdUeXBlLkJJR0lOVCkuaXNfKFAudHlwZV9vZihHVHlwZS5CSUdJTlQpKS5ncm91cF9jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JJR0lOVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQklHSU5UKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5CaWdJbnQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJpZ0ludCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSUdJTlQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkJJR0lOVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuYmlnSW50KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLkJJR0lOVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgNSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CeXRlKS5JcyhQLlR5cGVPZihHVHlwZS5CeXRlKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJ5dGUpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQnl0ZSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuQllURSkuaXNfKFAudHlwZV9vZihHVHlwZS5CWVRFKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX21hdGhYYWRkWDIwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkubWF0aChcIl8gKyAyMFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkubWF0aChcIl8gKyAyMFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLm1hdGgoXCJfICsgMjBcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkubWF0aChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CeXRlKS5JcyhQLlR5cGVPZihHVHlwZS5CeXRlKSkuTWF0aChcIl8gKyAyMFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQnl0ZSkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CeXRlKSkuTWF0aChcIl8gKyAyMFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLm1hdGgoXCJfICsgMjBcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkubWF0aChcIl8gKyAyMFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpLmlzKFAudHlwZU9mKEdUeXBlLmJ5dGUpKS5tYXRoKFwiXyArIDIwXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnaW50JykuYXNfbnVtYmVyKEdUeXBlLkJZVEUpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQllURSkpLm1hdGgoJ18gKyAyMCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9pc1hsdFgxMFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDcpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCA3KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDcpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDcpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgNykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmlzKFAubHQoMTApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuaXMoUC5sdCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuaXMoUC5sdCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmlzKFAubHQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5JcyhQLkx0KDEwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJ5dGUpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQnl0ZSkpLklzKGdyZW1saW5nby5QLkx0KDEwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5pcyhQLmx0KDEwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuaXMoUC5sdCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLmlzKFAubHQoMTApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CWVRFKS5pc18oUC50eXBlX29mKEdUeXBlLkJZVEUpKS5pc18oUC5sdCgxMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfQllURVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWF9zdW1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMikuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMikuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMikuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDEpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDIpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDMpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CeXRlKS5JcyhQLlR5cGVPZihHVHlwZS5CeXRlKSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQnl0ZSkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CeXRlKSkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpLmlzKFAudHlwZU9mKEdUeXBlLmJ5dGUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CWVRFKS5pc18oUC50eXBlX29mKEdUeXBlLkJZVEUpKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WG1hdGhYbXVsWDJYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA4KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgOCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA4KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgOCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgOCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgOCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgOCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCA4KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwiZG91YmxlZFwiKS5ieShpZGVudGl0eSgpKS5ieShtYXRoKFwiXyAqIDJcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJkb3VibGVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJkb3VibGVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkucHJvamVjdChzdHJpbmcxLCBzdHJpbmcyKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5CeXRlKS5JcyhQLlR5cGVPZihHVHlwZS5CeXRlKSkuUHJvamVjdDxvYmplY3Q+KFwib3JpZ2luYWxcIiwgXCJkb3VibGVkXCIpLkJ5KF9fLklkZW50aXR5KCkpLkJ5KF9fLk1hdGgoXCJfICogMlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJpbnRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJ5dGUpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQnl0ZSkpLlByb2plY3QoXCJvcmlnaW5hbFwiLCBcImRvdWJsZWRcIikuQnkoZ3JlbWxpbmdvLlRfXy5JZGVudGl0eSgpKS5CeShncmVtbGluZ28uVF9fLk1hdGgoXCJfICogMlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJkb3VibGVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwiZG91YmxlZFwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKFwiXyAqIDJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcImRvdWJsZWRcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChcIl8gKiAyXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5CWVRFKS5pc18oUC50eXBlX29mKEdUeXBlLkJZVEUpKS5wcm9qZWN0KCdvcmlnaW5hbCcsICdkb3VibGVkJykuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgnXyAqIDInKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9CWVRFWF9pc1h0eXBlT2ZYR1R5cGVfQllURVhYX2Nob29zZVhpc1hlcVgxMlhYX2NvbnN0YW50WHR3ZWx2ZVhfY29uc3RhbnRYb3RoZXJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDEyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMTIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5jaG9vc2UoX18uaXMoUC5lcSgxMikpLCBjb25zdGFudChcInR3ZWx2ZVwiKSwgY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmNob29zZShfXy5pcyhQLmVxKDEyKSksIF9fLmNvbnN0YW50KFwidHdlbHZlXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmNob29zZShfXy5pcyhQLmVxKDEyKSksIF9fLmNvbnN0YW50KFwidHdlbHZlXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5jaG9vc2UoX18uaXMoUC5lcShudW1iZXIwKSksIF9fLmNvbnN0YW50KHN0cmluZzEpLCBfXy5jb25zdGFudChzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuQnl0ZSkuSXMoUC5UeXBlT2YoR1R5cGUuQnl0ZSkpLkNob29zZTxvYmplY3Q+KF9fLklzKFAuRXEoMTIpKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInR3ZWx2ZVwiKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImludFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQnl0ZSkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CeXRlKSkuQ2hvb3NlKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMTIpKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInR3ZWx2ZVwiKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmNob29zZShfXy5pcyhQLmVxKDEyKSksIF9fLmNvbnN0YW50KFwidHdlbHZlXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKS5jaG9vc2UoX18uaXMoUC5lcSgxMikpLCBfXy5jb25zdGFudChcInR3ZWx2ZVwiKSwgX18uY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5ieXRlKS5pcyhQLnR5cGVPZihHVHlwZS5ieXRlKSkuY2hvb3NlKF9fLmlzKFAuZXEoMTIpKSwgX18uY29uc3RhbnQoXCJ0d2VsdmVcIiksIF9fLmNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnaW50JykuYXNfbnVtYmVyKEdUeXBlLkJZVEUpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQllURSkpLmNob29zZShfXy5pc18oUC5lcSgxMikpLCBfXy5jb25zdGFudCgndHdlbHZlJyksIF9fLmNvbnN0YW50KCdvdGhlcicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMTVYX2FzTnVtYmVyWEdUeXBlX0JZVEVYX2lzWHR5cGVPZlhHVHlwZV9CWVRFWFhfZ3JvdXBDb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxNSkuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDE1KS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDE1KS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMTUpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDE1KS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQnl0ZSkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CeXRlKSkuR3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDE1KS5hc051bWJlcihHVHlwZS5CWVRFKS5pcyhQLnR5cGVPZihHVHlwZS5CWVRFKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxNSkuYXNOdW1iZXIoR1R5cGUuQllURSkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMTUpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpLmlzKFAudHlwZU9mKEdUeXBlLmJ5dGUpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMTUpLmFzX251bWJlcihHVHlwZS5CWVRFKS5pc18oUC50eXBlX29mKEdUeXBlLkJZVEUpKS5ncm91cF9jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JZVEVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkJZVEUpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkJ5dGUpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJ5dGUpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQllURSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuYnl0ZSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5CWVRFKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBvZmZzZXRkYXRldGltZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImV2ZW50XCIpLlByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJldmVudFwiKS5Qcm9wZXJ0eShcImRhdGV0aW1lXCIsIHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2V2ZW50JykucHJvcGVydHkoJ2RhdGV0aW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZGF0ZXRpbWVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRhdGV0aW1lXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZGF0ZXRpbWUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRBVEVUSU1FKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGRhdGVBZGRYRFRfZGF5WDFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgb2Zmc2V0ZGF0ZXRpbWUwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJldmVudFwiKS5Qcm9wZXJ0eShcImRhdGV0aW1lXCIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZXZlbnRcIikuUHJvcGVydHkoXCJkYXRldGltZVwiLCB0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdldmVudCcpLnByb3BlcnR5KCdkYXRldGltZScsIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMDA6MDArMDA6MDAnKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm5leHREYXlcIikuYnkoaWRlbnRpdHkoKSkuYnkoZGF0ZUFkZChEVC5kYXksIDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwibmV4dERheVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5kYXRlQWRkKERULmRheSwgMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwibmV4dERheVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5kYXRlQWRkKERULmRheSwgMSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5wcm9qZWN0KHN0cmluZzEsIHN0cmluZzIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmRhdGVBZGQoRFQuZGF5LCBudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJkYXRldGltZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLlByb2plY3Q8b2JqZWN0PihcIm9yaWdpbmFsXCIsIFwibmV4dERheVwiKS5CeShfXy5JZGVudGl0eSgpKS5CeShfXy5EYXRlQWRkKERULkRheSwgMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZGF0ZXRpbWVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5EYXRlVGltZSkpLlByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm5leHREYXlcIikuQnkoZ3JlbWxpbmdvLlRfXy5JZGVudGl0eSgpKS5CeShncmVtbGluZ28uVF9fLkRhdGVBZGQoZ3JlbWxpbmdvLkRULkRheSwgMSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwibmV4dERheVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5kYXRlQWRkKERULmRheSwgMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm5leHREYXlcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uZGF0ZUFkZChEVC5kYXksIDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJuZXh0RGF5XCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmRhdGVBZGQoRFQuZGF5LCAxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdkYXRldGltZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuREFURVRJTUUpKS5wcm9qZWN0KCdvcmlnaW5hbCcsICduZXh0RGF5JykuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uZGF0ZV9hZGQoRFQuZGF5LCAxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2RhdGVEaWZmWGRhdGV0aW1lWDIwMjNfMDhfMTBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgb2Zmc2V0ZGF0ZXRpbWUwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJldmVudFwiKS5Qcm9wZXJ0eShcImRhdGV0aW1lXCIsIERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZXZlbnRcIikuUHJvcGVydHkoXCJkYXRldGltZVwiLCB0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdldmVudCcpLnByb3BlcnR5KCdkYXRldGltZScsIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMDA6MDArMDA6MDAnKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmRhdGVEaWZmKGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDozMFpcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5kYXRlRGlmZihkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MzBaXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmRhdGVEaWZmKGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDozMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5kYXRlRGlmZihvZmZzZXRkYXRldGltZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZGF0ZXRpbWVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5EYXRlRGlmZihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDhUMDA6MDA6MzBaXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRhdGV0aW1lXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKS5EYXRlRGlmZih0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMzAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5kYXRlRGlmZihkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MzBaXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5kYXRlRGlmZihPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDhUMDA6MDA6MzBaXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKS5kYXRlRGlmZihuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMDozMFonKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdkYXRldGltZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuREFURVRJTUUpKS5kYXRlX2RpZmYoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMDozMCswMDowMCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hkYXRldGltZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFhfd2hlcmVYaXNYZ3RYZGF0ZXRpbWVYMjAyMF8wMV8wMVhYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBkYXRldGltZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDEyOjM0OjU2WlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBkYXRldGltZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG9mZnNldGRhdGV0aW1lMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZXZlbnRcIikuUHJvcGVydHkoXCJkYXRldGltZVwiLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImV2ZW50XCIpLlByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgdGltZS5EYXRlKDIwMjMsIDgsIDgsIDEyLCAzNCwgNTYsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBkYXRldGltZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZXZlbnRcIikucHJvcGVydHkoXCJkYXRldGltZVwiLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQxMjozNDo1NlonKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZXZlbnQnKS5wcm9wZXJ0eSgnZGF0ZXRpbWUnLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDEyOjM0OjU2KzAwOjAwJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS53aGVyZShfXy5pcyhQLmd0KGRhdGV0aW1lKFwiMjAyMC0wMS0wMVQwMDowMDowMFpcIikpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLndoZXJlKF9fLmlzKFAuZ3QoZGF0ZXRpbWUoXCIyMDIwLTAxLTAxVDAwOjAwOjAwWlwiKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLndoZXJlKF9fLmlzKFAuZ3QoZGF0ZXRpbWUoXCIyMDIwLTAxLTAxVDAwOjAwOjAwWlwiKSkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkud2hlcmUoX18uaXMoUC5ndChvZmZzZXRkYXRldGltZTApKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJkYXRldGltZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLldoZXJlKF9fLklzKFAuR3QoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIwLTAxLTAxVDAwOjAwWlwiKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRhdGV0aW1lXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKS5XaGVyZShncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KHRpbWUuRGF0ZSgyMDIwLCAxLCAxLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS53aGVyZShfXy5pcyhQLmd0KGRhdGV0aW1lKFwiMjAyMC0wMS0wMVQwMDowMDowMFpcIikpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkud2hlcmUoX18uaXMoUC5ndChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjAtMDEtMDFUMDA6MDBaXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpLndoZXJlKF9fLmlzKFAuZ3QobmV3IERhdGUoJzIwMjAtMDEtMDFUMDA6MDBaJykpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdkYXRldGltZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuREFURVRJTUUpKS53aGVyZShfXy5pc18oUC5ndChkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIwLTAxLTAxVDAwOjAwKzAwOjAwJykpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2Nob29zZVhpc1hlcVhkYXRldGltZVgyMDIzXzA4XzA4WFhYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBvZmZzZXRkYXRldGltZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImV2ZW50XCIpLlByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJldmVudFwiKS5Qcm9wZXJ0eShcImRhdGV0aW1lXCIsIHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2V2ZW50JykucHJvcGVydHkoJ2RhdGV0aW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkuY2hvb3NlKF9fLmlzKFAuZXEoZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkpLCBjb25zdGFudChcIm1hdGNoXCIpLCBjb25zdGFudChcIm5vTWF0Y2hcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5jaG9vc2UoX18uaXMoUC5lcShkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKSksIF9fLmNvbnN0YW50KFwibWF0Y2hcIiksIF9fLmNvbnN0YW50KFwibm9NYXRjaFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5jaG9vc2UoX18uaXMoUC5lcShkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKSksIF9fLmNvbnN0YW50KFwibWF0Y2hcIiksIF9fLmNvbnN0YW50KFwibm9NYXRjaFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmNob29zZShfXy5pcyhQLmVxKG9mZnNldGRhdGV0aW1lMCkpLCBfXy5jb25zdGFudChzdHJpbmcxKSwgX18uY29uc3RhbnQoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZGF0ZXRpbWVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5DaG9vc2U8b2JqZWN0PihfXy5JcyhQLkVxKERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm1hdGNoXCIpLCBfXy5Db25zdGFudDxvYmplY3Q+KFwibm9NYXRjaFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJkYXRldGltZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkuQ2hvb3NlKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEodGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwibWF0Y2hcIiksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmNob29zZShfXy5pcyhQLmVxKGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpKSwgX18uY29uc3RhbnQoXCJtYXRjaFwiKSwgX18uY29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5jaG9vc2UoX18uaXMoUC5lcShPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDhUMDA6MDBaXCIpKSksIF9fLmNvbnN0YW50KFwibWF0Y2hcIiksIF9fLmNvbnN0YW50KFwibm9NYXRjaFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkuY2hvb3NlKF9fLmlzKFAuZXEobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpKSwgX18uY29uc3RhbnQoXCJtYXRjaFwiKSwgX18uY29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2RhdGV0aW1lJykuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmNob29zZShfXy5pc18oUC5lcShkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpKSwgX18uY29uc3RhbnQoJ21hdGNoJyksIF9fLmNvbnN0YW50KCdub01hdGNoJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGRhdGV0aW1lWF9pc1h0eXBlT2ZYR1R5cGVfREFURVRJTUVYWF9sb2NhbFhhZ2dyZWdhdGVYYVhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJldmVudFwiKS5wcm9wZXJ0eShcImRhdGV0aW1lXCIsIGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQwMDowMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBvZmZzZXRkYXRldGltZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImV2ZW50XCIpLlByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJldmVudFwiKS5Qcm9wZXJ0eShcImRhdGV0aW1lXCIsIHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImV2ZW50XCIpLnByb3BlcnR5KFwiZGF0ZXRpbWVcIiwgbmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2V2ZW50JykucHJvcGVydHkoJ2RhdGV0aW1lJywgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZGF0ZXRpbWVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRhdGV0aW1lXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRGF0ZVRpbWUpKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZGF0ZXRpbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJkYXRldGltZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImRhdGV0aW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2RhdGV0aW1lJykuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2FnZ3JlZ2F0ZVhhWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDAwOjAwOjAwWlwiKSkuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDhUMDA6MDBaXCIpKS5JcyhQLlR5cGVPZihHVHlwZS5EYXRlVGltZSkpLkFnZ3JlZ2F0ZShcImFcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDgsIDgsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5EYXRlVGltZSkpLkFnZ3JlZ2F0ZShcImFcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChkYXRldGltZShcIjIwMjMtMDgtMDhUMDA6MDA6MDBaXCIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKS5pcyhQLnR5cGVPZihHVHlwZS5kYXRldGltZSkpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpLmlzXyhQLnR5cGVfb2YoR1R5cGUuREFURVRJTUUpKS5hZ2dyZWdhdGUoJ2EnKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2dyb3VwQ291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoXCIyMDIzLTA4LTA4VDEyOjM0OjU2WlwiKSkuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChkYXRldGltZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChkYXRldGltZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0wOC0wOFQxMjozNDo1NlpcIikpLklzKFAuVHlwZU9mKEdUeXBlLkRhdGVUaW1lKSkuR3JvdXBDb3VudDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh0aW1lLkRhdGUoMjAyMywgOCwgOCwgMTIsIDM0LCA1NiwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkuR3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KGRhdGV0aW1lKFwiMjAyMy0wOC0wOFQxMjozNDo1NlpcIikpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDhUMTI6MzQ6NTZaXCIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDhUMTI6MzQ6NTZaJykpLmlzKFAudHlwZU9mKEdUeXBlLmRhdGV0aW1lKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMTI6MzQ6NTYrMDA6MDAnKSkuaXNfKFAudHlwZV9vZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwX2NvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjVkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMS41ZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjVkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMS41ZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjVkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjVkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMS41KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImRvdWJsZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRvdWJsZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdkb3VibGUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRPVUJMRSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VfdmFsdWVzWHdlaWdodFhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLnZhbHVlcyhcIndlaWdodFwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLnZhbHVlcyhcIndlaWdodFwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlZhbHVlcyhcIndlaWdodFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnZhbHVlcyhcIndlaWdodFwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkudmFsdWVzKFwid2VpZ2h0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkudmFsdWVzKCd3ZWlnaHQnKS5pc18oUC50eXBlX29mKEdUeXBlLkRPVUJMRSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21hdGhYY2VpbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjdkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi43ZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjdkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMi43ZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDIuNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjdkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjdkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjcpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMi43KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXRoKCdjZWlsIF8nKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXRoKCdjZWlsIF8nKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkubWF0aCgnY2VpbCBfJykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXRoKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZG91YmxlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLk1hdGgoXCJjZWlsIF9cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJkb3VibGVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5Eb3VibGUpKS5NYXRoKFwiY2VpbCBfXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXRoKCdjZWlsIF8nKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1hdGgoXCJjZWlsIF9cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5tYXRoKFwiY2VpbCBfXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZG91YmxlJykuaXNfKFAudHlwZV9vZihHVHlwZS5ET1VCTEUpKS5tYXRoKCdjZWlsIF8nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9pc1hndFgxXzBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDAuOGQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjhkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDAuOGQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgZG91YmxlMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDAuOGQpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDEuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAwLjgpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDEuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjhkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjhkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjgpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdkb3VibGUnLCAwLjgpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDEuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLmlzKFAuZ3QoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuaXMoUC5ndChkb3VibGUwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJkb3VibGVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuSXMoUC5HdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJkb3VibGVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5Eb3VibGUpKS5JcyhncmVtbGluZ28uUC5HdCgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5pcyhQLmd0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpLmlzKFAuZ3QoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdkb3VibGUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRPVUJMRSkpLmlzXyhQLmd0KDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX3N1bVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjVkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjVkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAzLjVkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMS41ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi41ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMy41ZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjVkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjVkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAzLjVkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgZG91YmxlMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBkb3VibGUyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDEuNWQpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDIuNWQpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDMuNWQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAxLjUpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDIuNSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMy41KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuNWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuNWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDMuNWQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuNWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuNWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDMuNWQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi41KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAzLjUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMS41KS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdkb3VibGUnLCAyLjUpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDMuNSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJkb3VibGVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRvdWJsZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdkb3VibGUnKS5pc18oUC50eXBlX29mKEdUeXBlLkRPVUJMRSkpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hkb3VibGVYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9taW5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC41ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC45ZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDAuMWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDAuNWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDAuOWQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC41ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC45ZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBkb3VibGUwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgZG91YmxlMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAwLjFkKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAwLjVkKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAwLjlkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMC4xKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAwLjUpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDAuOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjVkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjlkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjVkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjlkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAwLjEpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDAuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMC45KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDAuMSkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMC41KS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdkb3VibGUnLCAwLjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZG91YmxlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJkb3VibGVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5Eb3VibGUpKS5NaW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmRvdWJsZSkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZG91YmxlJykuaXNfKFAudHlwZV9vZihHVHlwZS5ET1VCTEUpKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfbWF4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuMWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDMuN2QpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuOWQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAzLjdkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjlkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuMWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDMuN2QpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuOWQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgZG91YmxlMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBkb3VibGUxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMi4xZCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMy43ZCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMS45ZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDIuMSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMy43KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAxLjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMy43ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMS45ZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMy43ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMS45ZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi4xKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAzLjcpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdkb3VibGUnLCAyLjEpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDMuNykuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMS45KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImRvdWJsZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZG91YmxlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRG91YmxlKSkuTWF4KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2RvdWJsZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuRE9VQkxFKSkubWF4XygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGRvdWJsZVhfaXNYdHlwZU9mWEdUeXBlX0RPVUJMRVhYX21lYW5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgNC4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgNi4xZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuMWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDQuMWQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDYuMWQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgNC4xZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgNi4xZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBkb3VibGUwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgZG91YmxlMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAyLjFkKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCA0LjFkKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCA2LjFkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMi4xKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCA0LjEpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDYuMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCA0LjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCA2LjFkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCA0LjFkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCA2LjFkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjEpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDQuMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgNi4xKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDIuMSkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgNC4xKS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdkb3VibGUnLCA2LjEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZG91YmxlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImRvdWJsZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5Eb3VibGUpKS5NZWFuPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImRvdWJsZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkpLk1lYW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZG91YmxlJykuaXNfKFAudHlwZV9vZihHVHlwZS5ET1VCTEUpKS5tZWFuKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZG91YmxlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFhfb3JkZXJfYnlYYXNjWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDMuMmQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuOGQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuNWQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAzLjJkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjhkKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAyLjVkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDMuMmQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDEuOGQpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuNWQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgZG91YmxlMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBkb3VibGUxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGRvdWJsZTIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMy4yZCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMS44ZCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMi41ZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZG91YmxlXCIsIDMuMikuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJkb3VibGVcIiwgMS44KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImRvdWJsZVwiLCAyLjUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMy4yZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMS44ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi41ZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMy4yZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMS44ZCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMi41ZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJkb3VibGVcIiwgMy4yKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImRvdWJsZVwiLCAxLjgpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZG91YmxlXCIsIDIuNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdkb3VibGUnLCAzLjIpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2RvdWJsZScsIDEuOCkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZG91YmxlJywgMi41KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5vcmRlcigpLmJ5KGFzYykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkub3JkZXIoKS5ieShPcmRlci5hc2MpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImRvdWJsZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJkb3VibGVcIikuSXMoUC5UeXBlT2YoR1R5cGUuRG91YmxlKSkuT3JkZXIoKS5CeShPcmRlci5Bc2MpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZG91YmxlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRG91YmxlKSkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuQXNjKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkub3JkZXIoKS5ieShPcmRlci5hc2MpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkub3JkZXIoKS5ieShPcmRlci5hc2MpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJkb3VibGVcIikuaXMoUC50eXBlT2YoR1R5cGUuZG91YmxlKSkub3JkZXIoKS5ieShPcmRlci5hc2MpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZG91YmxlJykuaXNfKFAudHlwZV9vZihHVHlwZS5ET1VCTEUpKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDVfNWRYX2lzWHR5cGVPZlhHVHlwZV9ET1VCTEVYWF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDUuNWQpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDUuNWQpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg1LjVkKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDUuNWQpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNS41KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkpLkdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCg1LjVkKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDUuNWQpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNS41KS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoNS41KS5pc18oUC50eXBlX29mKEdUeXBlLkRPVUJMRSkpLmdyb3VwX2NvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfRE9VQkxFWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5ET1VCTEUpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkRvdWJsZSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRG91YmxlKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRPVUJMRSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuRE9VQkxFKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5kb3VibGUpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuRE9VQkxFKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAyLjUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZmxvYXRcIiwgMi41KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAyLjUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAyLjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMi41KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdmbG9hdCcsIDIuNSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJmbG9hdFwiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImZsb2F0XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5GbG9hdCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5GbG9hdCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdmbG9hdCcpLmFzX251bWJlcihHVHlwZS5GTE9BVCkuaXNfKFAudHlwZV9vZihHVHlwZS5GTE9BVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9tYXRoWG11bFgyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2Zsb2F0JywgMy4wKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLm1hdGgoXCJfICogMlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLm1hdGgoXCJfICogMlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5tYXRoKFwiXyAqIDJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5tYXRoKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZmxvYXRcIikuQXNOdW1iZXIoR1R5cGUuRmxvYXQpLklzKFAuVHlwZU9mKEdUeXBlLkZsb2F0KSkuTWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZmxvYXRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KSkuTWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLm1hdGgoXCJfICogMlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkubWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS5tYXRoKFwiXyAqIDJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdmbG9hdCcpLmFzX251bWJlcihHVHlwZS5GTE9BVCkuaXNfKFAudHlwZV9vZihHVHlwZS5GTE9BVCkpLm1hdGgoJ18gKiAyJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX2lzWGVxWDFfNVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZmxvYXRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdmbG9hdCcsIDEuNSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5pcyhQLmVxKDEuNSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuaXMoUC5lcSgxLjUpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5pcyhQLmVxKDEuNSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuaXMoUC5lcShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJmbG9hdFwiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5JcyhQLkVxKDEuNSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZmxvYXRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KSkuSXMoZ3JlbWxpbmdvLlAuRXEoMS41KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuaXMoUC5lcSgxLjUpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuaXMoUC5lcSgxLjUpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuZmxvYXQpLmlzKFAudHlwZU9mKEdUeXBlLmZsb2F0KSkuaXMoUC5lcSgxLjUpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2Zsb2F0JykuYXNfbnVtYmVyKEdUeXBlLkZMT0FUKS5pc18oUC50eXBlX29mKEdUeXBlLkZMT0FUKSkuaXNfKFAuZXEoMS41KSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYZmxvYXRYX2lzWHR5cGVPZlhHVHlwZV9GTE9BVFhYX3N1bVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAyLjUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMi41KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAyLjUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiZmxvYXRcIiwgMS41KS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAyLjUpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMS41KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMS41KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMS41KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDIuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZmxvYXQnLCAxLjUpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2Zsb2F0JywgMi41KS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdmbG9hdCcsIDMuMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJmbG9hdFwiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZmxvYXRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KSkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2Zsb2F0JykuYXNfbnVtYmVyKEdUeXBlLkZMT0FUKS5pc18oUC50eXBlX29mKEdUeXBlLkZMT0FUKSkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9wcm9qZWN0X2J5WGlkZW50aXR5WF9ieVhtYXRoWG11bFgxMFhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgNC41KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCA0LjUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCA0LjUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDQuNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiZmxvYXRcIiwgNC41KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgNC41KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDQuNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCA0LjUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZmxvYXQnLCA0LjUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwibXVsdGlwbGllZFwiKS5ieShpZGVudGl0eSgpKS5ieShtYXRoKFwiXyAqIDEwXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcIm11bHRpcGxpZWRcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChcIl8gKiAxMFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwibXVsdGlwbGllZFwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5tYXRoKFwiXyAqIDEwXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLnByb2plY3Qoc3RyaW5nMSwgc3RyaW5nMikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aChzdHJpbmczKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJmbG9hdFwiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5Qcm9qZWN0PG9iamVjdD4oXCJvcmlnaW5hbFwiLCBcIm11bHRpcGxpZWRcIikuQnkoX18uSWRlbnRpdHkoKSkuQnkoX18uTWF0aChcIl8gKiAxMFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJmbG9hdFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuRmxvYXQpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRmxvYXQpKS5Qcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJtdWx0aXBsaWVkXCIpLkJ5KGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuQnkoZ3JlbWxpbmdvLlRfXy5NYXRoKFwiXyAqIDEwXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJtdWx0aXBsaWVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMTBcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJtdWx0aXBsaWVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMTBcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJtdWx0aXBsaWVkXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLm1hdGgoXCJfICogMTBcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZmxvYXQnKS5hc19udW1iZXIoR1R5cGUuRkxPQVQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuRkxPQVQpKS5wcm9qZWN0KCdvcmlnaW5hbCcsICdtdWx0aXBsaWVkJykuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18ubWF0aCgnXyAqIDEwJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF93aGVyZVhpc1hndFgxXzBYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDAuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDAuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAwLjUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDAuNSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDAuNSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAwLjUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDAuNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMC41KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdmbG9hdCcsIDAuNSkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnZmxvYXQnLCAxLjUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkud2hlcmUoX18uaXMoUC5ndCgxLjApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS53aGVyZShfXy5pcyhQLmd0KDEuMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS53aGVyZShfXy5pcyhQLmd0KDEuMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLndoZXJlKF9fLmlzKFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImZsb2F0XCIpLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLldoZXJlKF9fLklzKFAuR3QoMS4wKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZmxvYXRcIikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkZsb2F0KSkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxLjApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkud2hlcmUoX18uaXMoUC5ndCgxLjApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLndoZXJlKF9fLmlzKFAuZ3QoMS4wKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS53aGVyZShfXy5pcyhQLmd0KDEuMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2Zsb2F0JykuYXNfbnVtYmVyKEdUeXBlLkZMT0FUKS5pc18oUC50eXBlX29mKEdUeXBlLkZMT0FUKSkud2hlcmUoX18uaXNfKFAuZ3QoMS4wKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGZsb2F0WF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWF9jaG9vc2VYaXNYZXFYM18wWFhfY29uc3RhbnRYdGhyZWVYX2NvbnN0YW50WG90aGVyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImZsb2F0XCIsIDMuMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJmbG9hdFwiLCAzLjApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiZmxvYXRcIiwgMy4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2Zsb2F0JywgMy4wKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLmNob29zZShfXy5pcyhQLmVxKDMuMCkpLCBjb25zdGFudChcInRocmVlXCIpLCBjb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLmNob29zZShfXy5pcyhQLmVxKDMuMCkpLCBfXy5jb25zdGFudChcInRocmVlXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5jaG9vc2UoX18uaXMoUC5lcSgzLjApKSwgX18uY29uc3RhbnQoXCJ0aHJlZVwiKSwgX18uY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5jaG9vc2UoX18uaXMoUC5lcShudW1iZXIwKSksIF9fLmNvbnN0YW50KHN0cmluZzEpLCBfXy5jb25zdGFudChzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJmbG9hdFwiKS5Bc051bWJlcihHVHlwZS5GbG9hdCkuSXMoUC5UeXBlT2YoR1R5cGUuRmxvYXQpKS5DaG9vc2U8b2JqZWN0PihfXy5JcyhQLkVxKDMuMCkpLCBfXy5Db25zdGFudDxvYmplY3Q+KFwidGhyZWVcIiksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJmbG9hdFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuRmxvYXQpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRmxvYXQpKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgzLjApKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInRocmVlXCIpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImZsb2F0XCIpLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLmNob29zZShfXy5pcyhQLmVxKDMuMCkpLCBfXy5jb25zdGFudChcInRocmVlXCIpLCBfXy5jb25zdGFudChcIm90aGVyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZmxvYXRcIikuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuY2hvb3NlKF9fLmlzKFAuZXEoMy4wKSksIF9fLmNvbnN0YW50KFwidGhyZWVcIiksIF9fLmNvbnN0YW50KFwib3RoZXJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJmbG9hdFwiKS5hc051bWJlcihHVHlwZS5mbG9hdCkuaXMoUC50eXBlT2YoR1R5cGUuZmxvYXQpKS5jaG9vc2UoX18uaXMoUC5lcSgzLjApKSwgX18uY29uc3RhbnQoXCJ0aHJlZVwiKSwgX18uY29uc3RhbnQoXCJvdGhlclwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdmbG9hdCcpLmFzX251bWJlcihHVHlwZS5GTE9BVCkuaXNfKFAudHlwZV9vZihHVHlwZS5GTE9BVCkpLmNob29zZShfXy5pc18oUC5lcSgzLjApKSwgX18uY29uc3RhbnQoJ3RocmVlJyksIF9fLmNvbnN0YW50KCdvdGhlcicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMl8wZlhfaXNYdHlwZU9mWEdUeXBlX0ZMT0FUWFhfZ3JvdXBDb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgyLjApLmFzTnVtYmVyKEdUeXBlLkZMT0FUKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDIuMCkuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDIuMCkuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigyLjApLkFzTnVtYmVyKEdUeXBlLkZsb2F0KS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMi4wKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuRmxvYXQpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRmxvYXQpKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMi4wKS5hc051bWJlcihHVHlwZS5GTE9BVCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDIuMCkuYXNOdW1iZXIoR1R5cGUuRkxPQVQpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgyLjApLmFzTnVtYmVyKEdUeXBlLmZsb2F0KS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgyLjApLmFzX251bWJlcihHVHlwZS5GTE9BVCkuaXNfKFAudHlwZV9vZihHVHlwZS5GTE9BVCkpLmdyb3VwX2NvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfRkxPQVRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5GTE9BVCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5GbG9hdCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuRmxvYXQpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuRkxPQVQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkZMT0FUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5mbG9hdCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5GTE9BVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5JbnQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkludCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLklOVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZV90eXBlT2ZYR1R5cGVfSU5UWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5JTlQpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBQLnR5cGVPZihHVHlwZS5JTlQpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIsIFAuVHlwZU9mKEdUeXBlLkludCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkludCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5JTlQpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC50eXBlT2YoR1R5cGUuaW50KSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScsIFAudHlwZV9vZihHVHlwZS5JTlQpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3doZXJlWHZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLldoZXJlKF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkludCkpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkludCkpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLklOVCkpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9tYXRoWGluY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiLCBcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tYXRoKFwiXyArIDFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIsIFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1hdGgoXCJfICsgMVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIsIFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1hdGgoXCJfICsgMVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzAsIHN0cmluZzEpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1hdGgoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIsIFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkludCkpLk1hdGgoXCJfICsgMVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIiwgXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5JbnQpKS5NYXRoKFwiXyArIDFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiLCBcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tYXRoKFwiXyArIDFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIiwgXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWF0aChcIl8gKyAxXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIsIFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLm1hdGgoXCJfICsgMVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnLCAnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5JTlQpKS5tYXRoKCdfICsgMScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX3N1bVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkludCkpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5JbnQpKS5TdW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5JTlQpKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfbWluWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuSW50KSkuTWluPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkludCkpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkubWluKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLklOVCkpLm1pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9JTlRYWF9tYXhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5JbnQpKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuSW50KSkuTWF4KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuSU5UKSkubWF4XygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX21lYW5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuSW50KSkuTWVhbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5JbnQpKS5NZWFuKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuSU5UKSkubWVhbigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX29yZGVyX2J5WGRlc2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5vcmRlcigpLmJ5KGRlc2MpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkludCkpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5JbnQpKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5EZXNjKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5pbnQpKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5JTlQpKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0lOVFhYX2dyb3VwQ291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLklOVCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5JbnQpKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkludCkpLkdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuaW50KSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5JTlQpKS5ncm91cF9jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxpc3QpKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLmlzXyhQLnR5cGVfb2YoR1R5cGUuTElTVCkpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuTGlzdCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLkxJU1QpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxpc3RcIiwgbmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBcImJcIiwgXCJjXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibGlzdFwiLCBbXWludGVyZmFjZXt9e1wiYVwiLCBcImJcIiwgXCJjXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJiXCIpOyBhZGQoXCJjXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdsaXN0JywgWydhJywgJ2InLCAnYyddKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJsaXN0XCIpLklzKFAuVHlwZU9mKEdUeXBlLkxpc3QpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImxpc3RcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5MaXN0KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xpc3QnKS5pc18oUC50eXBlX29mKEdUeXBlLkxJU1QpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hsaXN0X3R5cGVPZlhHVHlwZV9MSVNUWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDNdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDNdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJsaXN0XCIsIFsxLCAyLCAzXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLlByb3BlcnR5KFwibGlzdFwiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5Qcm9wZXJ0eShcImxpc3RcIiwgW11pbnRlcmZhY2V7fXsxLCAyLCAzfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwibGlzdFwiLCBbMSwgMiwgM10pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJsaXN0XCIsIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwibGlzdFwiLCBbMSwgMiwgM10pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbmFtZScsICd0ZXN0JykucHJvcGVydHkoJ2xpc3QnLCBbMSwgMiwgM10pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibGlzdFwiLCBQLnR5cGVPZihHVHlwZS5MSVNUKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImxpc3RcIiwgUC50eXBlT2YoR1R5cGUuTElTVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibGlzdFwiLCBQLnR5cGVPZihHVHlwZS5MSVNUKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAudHlwZU9mKEdUeXBlLkxJU1QpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibGlzdFwiLCBQLlR5cGVPZihHVHlwZS5MaXN0KSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibGlzdFwiLCBncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxpc3QpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImxpc3RcIiwgUC50eXBlT2YoR1R5cGUuTElTVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImxpc3RcIiwgUC50eXBlT2YoR1R5cGUuTElTVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImxpc3RcIiwgUC50eXBlT2YoR1R5cGUubGlzdCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdsaXN0JywgUC50eXBlX29mKEdUeXBlLkxJU1QpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJ4XCIsIFwieVwiLCBcInpcIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgW1wieFwiLCBcInlcIiwgXCJ6XCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJ4XCIsIFwieVwiLCBcInpcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJsaXN0XCIsIG5ldyBMaXN0PG9iamVjdD4geyBcInhcIiwgXCJ5XCIsIFwielwiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxpc3RcIiwgW11pbnRlcmZhY2V7fXtcInhcIiwgXCJ5XCIsIFwielwifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgW1wieFwiLCBcInlcIiwgXCJ6XCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwieFwiKTsgYWRkKFwieVwiKTsgYWRkKFwielwiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJ4XCIsIFwieVwiLCBcInpcIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbGlzdCcsIFsneCcsICd5JywgJ3onXSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibGlzdFwiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImxpc3RcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5MaXN0KSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xpc3QnKS5pc18oUC50eXBlX29mKEdUeXBlLkxJU1QpKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX2NvdW50WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbMSwgMiwgMywgNCwgNV0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDMsIDQsIDVdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbMSwgMiwgMywgNCwgNV0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJsaXN0XCIsIG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzLCA0LCA1IH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxpc3RcIiwgW11pbnRlcmZhY2V7fXsxLCAyLCAzLCA0LCA1fSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDMsIDQsIDVdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IGFkZCgzKTsgYWRkKDQpOyBhZGQoNSk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDMsIDQsIDVdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2xpc3QnLCBbMSwgMiwgMywgNCwgNV0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuY291bnQobG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJsaXN0XCIpLklzKFAuVHlwZU9mKEdUeXBlLkxpc3QpKS5Db3VudChTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJsaXN0XCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuTGlzdCkpLkNvdW50KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xpc3QnKS5pc18oUC50eXBlX29mKEdUeXBlLkxJU1QpKS5jb3VudChTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF91bmZvbGRfcmFuZ2VYMV8zWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJmaXJzdFwiLCBcInNlY29uZFwiLCBcInRoaXJkXCIsIFwiZm91cnRoXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFtcImZpcnN0XCIsIFwic2Vjb25kXCIsIFwidGhpcmRcIiwgXCJmb3VydGhcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFtcImZpcnN0XCIsIFwic2Vjb25kXCIsIFwidGhpcmRcIiwgXCJmb3VydGhcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJsaXN0XCIsIG5ldyBMaXN0PG9iamVjdD4geyBcImZpcnN0XCIsIFwic2Vjb25kXCIsIFwidGhpcmRcIiwgXCJmb3VydGhcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJsaXN0XCIsIFtdaW50ZXJmYWNle317XCJmaXJzdFwiLCBcInNlY29uZFwiLCBcInRoaXJkXCIsIFwiZm91cnRoXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJmaXJzdFwiLCBcInNlY29uZFwiLCBcInRoaXJkXCIsIFwiZm91cnRoXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZmlyc3RcIik7IGFkZChcInNlY29uZFwiKTsgYWRkKFwidGhpcmRcIik7IGFkZChcImZvdXJ0aFwiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJmaXJzdFwiLCBcInNlY29uZFwiLCBcInRoaXJkXCIsIFwiZm91cnRoXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2xpc3QnLCBbJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcsICdmb3VydGgnXSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS51bmZvbGQoKS5yYW5nZSgxLCAzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpLnJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpLnJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpLnJhbmdlKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibGlzdFwiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuVW5mb2xkPG9iamVjdD4oKS5SYW5nZTxvYmplY3Q+KDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibGlzdFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxpc3QpKS5VbmZvbGQoKS5SYW5nZSgxLCAzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS51bmZvbGQoKS5yYW5nZSgxLCAzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkudW5mb2xkKCkucmFuZ2UoMSwgMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUubGlzdCkpLnVuZm9sZCgpLnJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbGlzdCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuTElTVCkpLnVuZm9sZCgpLnJhbmdlXygxLCAzKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hsaXN0WF9pc1h0eXBlT2ZYR1R5cGVfTElTVFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGNvdW50WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJhcHBsZVwiLCBcImJhbmFuYVwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJhcHBsZVwiLCBcImJhbmFuYVwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgW1wiYXBwbGVcIiwgXCJiYW5hbmFcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJsaXN0XCIsIG5ldyBMaXN0PG9iamVjdD4geyBcImFwcGxlXCIsIFwiYmFuYW5hXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibGlzdFwiLCBbXWludGVyZmFjZXt9e1wiYXBwbGVcIiwgXCJiYW5hbmFcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFtcImFwcGxlXCIsIFwiYmFuYW5hXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYXBwbGVcIik7IGFkZChcImJhbmFuYVwiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibGlzdFwiLCBbXCJhcHBsZVwiLCBcImJhbmFuYVwiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdsaXN0JywgWydhcHBsZScsICdiYW5hbmEnXSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJzaXplXCIpLmJ5KGlkZW50aXR5KCkpLmJ5KGNvdW50KGxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJzaXplXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwic2l6ZVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnByb2plY3Qoc3RyaW5nMSwgc3RyaW5nMikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImxpc3RcIikuSXMoUC5UeXBlT2YoR1R5cGUuTGlzdCkpLlByb2plY3Q8b2JqZWN0PihcIm9yaWdpbmFsXCIsIFwic2l6ZVwiKS5CeShfXy5JZGVudGl0eSgpKS5CeShfXy5Db3VudChTY29wZS5Mb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibGlzdFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxpc3QpKS5Qcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJzaXplXCIpLkJ5KGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuQnkoZ3JlbWxpbmdvLlRfXy5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJsaXN0XCIpLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJzaXplXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcInNpemVcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwic2l6ZVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbGlzdCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuTElTVCkpLnByb2plY3QoJ29yaWdpbmFsJywgJ3NpemUnKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGxpc3RYX2lzWHR5cGVPZlhHVHlwZV9MSVNUWFhfd2hlcmVYY291bnRYbG9jYWxYX2lzWGd0WDJYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzFdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDNdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFsxXSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIFsxLCAyLCAzXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzFdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDNdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGxpc3QwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGxpc3QxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwibGlzdFwiLCBuZXcgTGlzdDxvYmplY3Q+IHsgMSB9KS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxpc3RcIiwgbmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibGlzdFwiLCBbXWludGVyZmFjZXt9ezF9KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxpc3RcIiwgW11pbnRlcmZhY2V7fXsxLCAyLCAzfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzFdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDNdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyB9fSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsaXN0XCIsIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzFdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxpc3RcIiwgWzEsIDIsIDNdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2xpc3QnLCBbMV0pLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2xpc3QnLCBbMSwgMiwgM10pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkud2hlcmUoY291bnQobG9jYWwpLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImxpc3RcIikuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLndoZXJlKF9fLmNvdW50KFNjb3BlLmxvY2FsKS5pcyhQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5ndChudW1iZXIwKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibGlzdFwiKS5JcyhQLlR5cGVPZihHVHlwZS5MaXN0KSkuV2hlcmUoX18uQ291bnQoU2NvcGUuTG9jYWwpLklzKFAuR3QoMikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImxpc3RcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5MaXN0KSkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpLklzKGdyZW1saW5nby5QLkd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibGlzdFwiKS5pcyhQLnR5cGVPZihHVHlwZS5saXN0KSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xpc3QnKS5pc18oUC50eXBlX29mKEdUeXBlLkxJU1QpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXNfKFAuZ3QoMikpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbGlzdFhfaXNYdHlwZU9mWEdUeXBlX0xJU1RYWF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcInRlc3RcIl0pLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJ0ZXN0XCJdKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcInRlc3RcIl0pLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5pcyhQLnR5cGVPZihHVHlwZS5MSVNUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwidGVzdFwiIH0pLklzKFAuVHlwZU9mKEdUeXBlLkxpc3QpKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJ0ZXN0XCJ9KS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxpc3QpKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1widGVzdFwiXSkuaXMoUC50eXBlT2YoR1R5cGUuTElTVCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwidGVzdFwiKTsgfX0pLmlzKFAudHlwZU9mKEdUeXBlLkxJU1QpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcInRlc3RcIl0pLmlzKFAudHlwZU9mKEdUeXBlLmxpc3QpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWyd0ZXN0J10pLmlzXyhQLnR5cGVfb2YoR1R5cGUuTElTVCkpLmdyb3VwX2NvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxTCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbG9uZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJsb25nXCIsIDFsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJsb25nXCIsIGludDY0KDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDFsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdsb25nJywgbG9uZygxKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibG9uZ1wiKS5JcyhQLlR5cGVPZihHVHlwZS5Mb25nKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJsb25nXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuTG9uZykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdsb25nJykuaXNfKFAudHlwZV9vZihHVHlwZS5MT05HKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbG9uZ190eXBlT2ZYR1R5cGVfTE9OR1hYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJsb25nXCIsIDFMKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbG9uZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5Qcm9wZXJ0eShcImxvbmdcIiwgMWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLlByb3BlcnR5KFwibG9uZ1wiLCBpbnQ2NCgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJsb25nXCIsIDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbmFtZScsICd0ZXN0JykucHJvcGVydHkoJ2xvbmcnLCBsb25nKDEpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImxvbmdcIiwgUC50eXBlT2YoR1R5cGUuTE9ORykpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJsb25nXCIsIFAudHlwZU9mKEdUeXBlLkxPTkcpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImxvbmdcIiwgUC50eXBlT2YoR1R5cGUuTE9ORykpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBQLnR5cGVPZihHVHlwZS5MT05HKSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImxvbmdcIiwgUC5UeXBlT2YoR1R5cGUuTG9uZykpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImxvbmdcIiwgZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5Mb25nKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJsb25nXCIsIFAudHlwZU9mKEdUeXBlLkxPTkcpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJsb25nXCIsIFAudHlwZU9mKEdUeXBlLkxPTkcpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJsb25nXCIsIFAudHlwZU9mKEdUeXBlLmxvbmcpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbG9uZycsIFAudHlwZV9vZihHVHlwZS5MT05HKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9tYXRoWG11bFgyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgNUwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgNWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDVsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGxvbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwibG9uZ1wiLCA1bCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibG9uZ1wiLCBpbnQ2NCg1KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgNWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCA1bCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbG9uZycsIGxvbmcoNSkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpLm1hdGgoXCJfICogMlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5tYXRoKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibG9uZ1wiKS5JcyhQLlR5cGVPZihHVHlwZS5Mb25nKSkuTWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibG9uZ1wiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxvbmcpKS5NYXRoKFwiXyAqIDJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubWF0aChcIl8gKiAyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5tYXRoKFwiXyAqIDJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUubG9uZykpLm1hdGgoXCJfICogMlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xvbmcnKS5pc18oUC50eXBlX29mKEdUeXBlLkxPTkcpKS5tYXRoKCdfICogMicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfaXNYZ3RYNVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDEwTCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxMGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDEwbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBsb25nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxvbmdcIiwgMTBsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJsb25nXCIsIGludDY0KDEwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMTBsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMTBsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMTApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbG9uZycsIGxvbmcoMTApKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpLmlzKFAuZ3QoNUwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpLmlzKFAuZ3QoNWwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5pcyhQLmd0KDVsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkuaXMoUC5ndChsb25nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibG9uZ1wiKS5JcyhQLlR5cGVPZihHVHlwZS5Mb25nKSkuSXMoUC5HdCg1bCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibG9uZ1wiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxvbmcpKS5JcyhncmVtbGluZ28uUC5HdChpbnQ2NCg1KSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpLmlzKFAuZ3QoNWwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkuaXMoUC5ndCg1bCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLmxvbmcpKS5pcyhQLmd0KDUpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xvbmcnKS5pc18oUC50eXBlX29mKEdUeXBlLkxPTkcpKS5pc18oUC5ndChsb25nKDUpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbG9uZ1hfaXNYdHlwZU9mWEdUeXBlX0xPTkdYWF9zdW1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDFMKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMkwpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAzTCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxbCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDJsKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgM2wpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDFsKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMmwpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAzbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBsb25nMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBsb25nMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBsb25nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxvbmdcIiwgMWwpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwibG9uZ1wiLCAybCkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJsb25nXCIsIDNsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJsb25nXCIsIGludDY0KDEpKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImxvbmdcIiwgaW50NjQoMikpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibG9uZ1wiLCBpbnQ2NCgzKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMWwpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAybCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDNsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMWwpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAybCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDNsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDIpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2xvbmcnLCBsb25nKDEpKS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdsb25nJywgbG9uZygyKSkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbG9uZycsIGxvbmcoMykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImxvbmdcIikuSXMoUC5UeXBlT2YoR1R5cGUuTG9uZykpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJsb25nXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuTG9uZykpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJsb25nXCIpLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdsb25nJykuaXNfKFAudHlwZV9vZihHVHlwZS5MT05HKSkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGxvbmdYX2lzWHR5cGVPZlhHVHlwZV9MT05HWFhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMTAwTCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxMDBsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxMDBsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIGxvbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwibG9uZ1wiLCAxMDBsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJsb25nXCIsIGludDY0KDEwMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJsb25nXCIsIDEwMGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibG9uZ1wiLCAxMDBsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImxvbmdcIiwgMTAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2xvbmcnLCBsb25nKDEwMCkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImxvbmdcIikuaXMoUC50eXBlT2YoR1R5cGUuTE9ORykpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkxPTkcpKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMSkpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImxvbmdcIikuSXMoUC5UeXBlT2YoR1R5cGUuTG9uZykpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibG9uZ1wiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkxvbmcpKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5MT05HKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibG9uZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5sb25nKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2xvbmcnKS5pc18oUC50eXBlX29mKEdUeXBlLkxPTkcpKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlTWFwX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZU1hcCgpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZU1hcCgpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVNYXAoKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZU1hcCgpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuSXMoUC5UeXBlT2YoR1R5cGUuTWFwKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlTWFwKCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5NYXApKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlTWFwKCkuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVNYXAoKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZU1hcCgpLmlzKFAudHlwZU9mKEdUeXBlLm1hcCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZV9tYXAoKS5pc18oUC50eXBlX29mKEdUeXBlLk1BUCkpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cENvdW50X2J5WGxhYmVsWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cENvdW50KCkuYnkobGFiZWwpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KFQuTGFiZWwpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXBDb3VudCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLk1hcCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXBfY291bnQoKS5ieShULmxhYmVsKS5pc18oUC50eXBlX29mKEdUeXBlLk1BUCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX01BUFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5NYXApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLk1hcCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLk1BUCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG1hcFhfaXNYdHlwZU9mWEdUeXBlX01BUFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wia2V5MVwiOiBcIjFcIiwgXCJrZXkyXCI6IFwiMlwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImtleTFcIjpcIjFcIiwgXCJrZXkyXCI6XCIyXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImtleTFcIjpcIjFcIiwgXCJrZXkyXCI6XCIyXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwia2V5MVwiLCBcIjFcIiB9LCB7IFwia2V5MlwiLCBcIjJcIiB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibWFwXCIsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImtleTFcIjogXCIxXCIsIFwia2V5MlwiOiBcIjJcIiB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImtleTFcIjpcIjFcIiwgXCJrZXkyXCI6XCIyXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJrZXkxXCIsIFwiMVwiKTsgcHV0KFwia2V5MlwiLCBcIjJcIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBuZXcgTWFwKFtbXCJrZXkxXCIsIFwiMVwiXSwgW1wia2V5MlwiLCBcIjJcIl1dKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdtYXAnLCB7ICdrZXkxJzogJzEnLCAna2V5Mic6ICcyJyB9KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm1hcFwiKS5JcyhQLlR5cGVPZihHVHlwZS5NYXApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm1hcFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLk1hcCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdtYXAnKS5pc18oUC50eXBlX29mKEdUeXBlLk1BUCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG1hcF90eXBlT2ZYR1R5cGVfTUFQWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJhXCI6IDEsIFwiYlwiOiAyXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjEsIFwiYlwiOjJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjEsIFwiYlwiOjJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5Qcm9wZXJ0eShcIm1hcFwiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJhXCIsIDEgfSwgeyBcImJcIiwgMiB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikuUHJvcGVydHkoXCJtYXBcIiwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYVwiOiAxLCBcImJcIjogMiB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjEsIFwiYlwiOjJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwibWFwXCIsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFcIiwgMSk7IHB1dChcImJcIiwgMik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwibWFwXCIsIG5ldyBNYXAoW1tcImFcIiwgMV0sIFtcImJcIiwgMl1dKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCduYW1lJywgJ3Rlc3QnKS5wcm9wZXJ0eSgnbWFwJywgeyAnYSc6IDEsICdiJzogMiB9KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm1hcFwiLCBQLnR5cGVPZihHVHlwZS5NQVApKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibWFwXCIsIFAudHlwZU9mKEdUeXBlLk1BUCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibWFwXCIsIFAudHlwZU9mKEdUeXBlLk1BUCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBQLnR5cGVPZihHVHlwZS5NQVApKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibWFwXCIsIFAuVHlwZU9mKEdUeXBlLk1hcCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm1hcFwiLCBncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLk1hcCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibWFwXCIsIFAudHlwZU9mKEdUeXBlLk1BUCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm1hcFwiLCBQLnR5cGVPZihHVHlwZS5NQVApKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJtYXBcIiwgUC50eXBlT2YoR1R5cGUubWFwKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ21hcCcsIFAudHlwZV9vZihHVHlwZS5NQVApKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9jb3VudFhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJhXCI6IDEsIFwiYlwiOiAyLCBcImNcIjogM10pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJhXCI6MSwgXCJiXCI6MiwgXCJjXCI6M10pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjEsIFwiYlwiOjIsIFwiY1wiOjNdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwiYVwiLCAxIH0sIHsgXCJiXCIsIDIgfSwgeyBcImNcIiwgMyB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibWFwXCIsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImFcIjogMSwgXCJiXCI6IDIsIFwiY1wiOiAzIH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjEsIFwiYlwiOjIsIFwiY1wiOjNdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhXCIsIDEpOyBwdXQoXCJiXCIsIDIpOyBwdXQoXCJjXCIsIDMpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgbmV3IE1hcChbW1wiYVwiLCAxXSwgW1wiYlwiLCAyXSwgW1wiY1wiLCAzXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ21hcCcsIHsgJ2EnOiAxLCAnYic6IDIsICdjJzogMyB9KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS5jb3VudChsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJtYXBcIikuSXMoUC5UeXBlT2YoR1R5cGUuTWFwKSkuQ291bnQoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibWFwXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuTWFwKSkuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbWFwJykuaXNfKFAudHlwZV9vZihHVHlwZS5NQVApKS5jb3VudChTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFhfc2VsZWN0WHZhbHVlc1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJjaXR5XCI6IFwiTllDXCIsIFwiY291bnRyeVwiOiBcIlVTQVwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImNpdHlcIjpcIk5ZQ1wiLCBcImNvdW50cnlcIjpcIlVTQVwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJjaXR5XCI6XCJOWUNcIiwgXCJjb3VudHJ5XCI6XCJVU0FcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcIm1hcFwiLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJjaXR5XCIsIFwiTllDXCIgfSwgeyBcImNvdW50cnlcIiwgXCJVU0FcIiB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibWFwXCIsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImNpdHlcIjogXCJOWUNcIiwgXCJjb3VudHJ5XCI6IFwiVVNBXCIgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJjaXR5XCI6XCJOWUNcIiwgXCJjb3VudHJ5XCI6XCJVU0FcIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImNpdHlcIiwgXCJOWUNcIik7IHB1dChcImNvdW50cnlcIiwgXCJVU0FcIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBuZXcgTWFwKFtbXCJjaXR5XCIsIFwiTllDXCJdLCBbXCJjb3VudHJ5XCIsIFwiVVNBXCJdXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbWFwJywgeyAnY2l0eSc6ICdOWUMnLCAnY291bnRyeSc6ICdVU0EnIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLnNlbGVjdCh2YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibWFwXCIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibWFwXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuTWFwKSkuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbWFwJykuaXNfKFAudHlwZV9vZihHVHlwZS5NQVApKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbWFwWF9pc1h0eXBlT2ZYR1R5cGVfTUFQWFhfd2hlcmVYX2NvdW50WGxvY2FsWF9pc1hndFgxWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wic2luZ2xlXCI6IFwidmFsdWVcIl0pLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImtleTFcIjogXCIxXCIsIFwia2V5MlwiOiBcIjJcIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJzaW5nbGVcIjpcInZhbHVlXCJdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJrZXkxXCI6XCIxXCIsIFwia2V5MlwiOlwiMlwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJzaW5nbGVcIjpcInZhbHVlXCJdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJrZXkxXCI6XCIxXCIsIFwia2V5MlwiOlwiMlwiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBtYXAwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwic2luZ2xlXCIsIFwidmFsdWVcIiB9fSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwia2V5MVwiLCBcIjFcIiB9LCB7IFwia2V5MlwiLCBcIjJcIiB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwibWFwXCIsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcInNpbmdsZVwiOiBcInZhbHVlXCIgfSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wia2V5MVwiOiBcIjFcIiwgXCJrZXkyXCI6IFwiMlwiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wic2luZ2xlXCI6XCJ2YWx1ZVwiXSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wia2V5MVwiOlwiMVwiLCBcImtleTJcIjpcIjJcIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcInNpbmdsZVwiLCBcInZhbHVlXCIpOyB9fSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwia2V5MVwiLCBcIjFcIik7IHB1dChcImtleTJcIiwgXCIyXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgbmV3IE1hcChbW1wic2luZ2xlXCIsIFwidmFsdWVcIl1dKSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgbmV3IE1hcChbW1wia2V5MVwiLCBcIjFcIl0sIFtcImtleTJcIiwgXCIyXCJdXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnbWFwJywgeyAnc2luZ2xlJzogJ3ZhbHVlJyB9KS5hZGRfdignZGF0YScpLnByb3BlcnR5KCdtYXAnLCB7ICdrZXkxJzogJzEnLCAna2V5Mic6ICcyJyB9KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS53aGVyZShjb3VudChsb2NhbCkuaXMoUC5ndCgxKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLndoZXJlKF9fLmNvdW50KFNjb3BlLmxvY2FsKS5pcyhQLmd0KDEpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLndoZXJlKF9fLmNvdW50KFNjb3BlLmxvY2FsKS5pcyhQLmd0KDEpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5NQVApKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5ndChudW1iZXIwKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibWFwXCIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLldoZXJlKF9fLkNvdW50KFNjb3BlLkxvY2FsKS5JcyhQLkd0KDEpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJtYXBcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5NYXApKS5XaGVyZShncmVtbGluZ28uVF9fLkNvdW50KGdyZW1saW5nby5TY29wZS5Mb2NhbCkuSXMoZ3JlbWxpbmdvLlAuR3QoMSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZ3QoMSkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLndoZXJlKF9fLmNvdW50KFNjb3BlLmxvY2FsKS5pcyhQLmd0KDEpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm1hcFwiKS5pcyhQLnR5cGVPZihHVHlwZS5tYXApKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5ndCgxKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbWFwJykuaXNfKFAudHlwZV9vZihHVHlwZS5NQVApKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXNfKFAuZ3QoMSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1htYXBYX2lzWHR5cGVPZlhHVHlwZV9NQVBYWF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImFcIjogMV0pLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImJcIjogMiwgXCJjXCI6IDNdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjFdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJiXCI6MiwgXCJjXCI6M10pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYVwiOjFdKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBbXCJiXCI6MiwgXCJjXCI6M10pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbWFwMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwibWFwXCIsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFcIiwgMSB9fSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwiYlwiLCAyIH0sIHsgXCJjXCIsIDMgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcIm1hcFwiLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhXCI6IDEgfSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJtYXBcIiwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYlwiOiAyLCBcImNcIjogMyB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIFtcImFcIjoxXSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgW1wiYlwiOjIsIFwiY1wiOjNdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm1hcFwiLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhXCIsIDEpOyB9fSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiYlwiLCAyKTsgcHV0KFwiY1wiLCAzKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibWFwXCIsIG5ldyBNYXAoW1tcImFcIiwgMV1dKSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJtYXBcIiwgbmV3IE1hcChbW1wiYlwiLCAyXSwgW1wiY1wiLCAzXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ21hcCcsIHsgJ2EnOiAxIH0pLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ21hcCcsIHsgJ2InOiAyLCAnYyc6IDMgfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibWFwXCIpLmlzKFAudHlwZU9mKEdUeXBlLk1BUCkpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibWFwXCIpLklzKFAuVHlwZU9mKEdUeXBlLk1hcCkpLkZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm1hcFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLk1hcCkpLkZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUuTUFQKSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJtYXBcIikuaXMoUC50eXBlT2YoR1R5cGUubWFwKSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbWFwJykuaXNfKFAudHlwZV9vZihHVHlwZS5NQVApKS5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZVhuYW1lWF9hZ2dyZWdhdGVYeFhfY2FwWHhYX2lzWHR5cGVPZlhHVHlwZV9TRVRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYWdncmVnYXRlKFwieFwiKS5jYXAoXCJ4XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmNhcChcInhcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmNhcChcInhcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hZ2dyZWdhdGUoc3RyaW5nMSkuY2FwKHN0cmluZzEpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5BZ2dyZWdhdGUoXCJ4XCIpLkNhcDxvYmplY3Q+KFwieFwiKS5JcyhQLlR5cGVPZihHVHlwZS5TZXQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuQWdncmVnYXRlKFwieFwiKS5DYXAoXCJ4XCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmNhcChcInhcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYWdncmVnYXRlKFwieFwiKS5jYXAoXCJ4XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFnZ3JlZ2F0ZShcInhcIikuY2FwKFwieFwiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKS5jYXAoJ3gnKS5pc18oUC50eXBlX29mKEdUeXBlLlNFVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5TZXQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlNldCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLlNFVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBfc2VsZWN0WGtleXNYX2RlZHVwX2lzWHR5cGVPZlhHVHlwZV9TRVRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChrZXlzKS5kZWR1cCgpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpLmRlZHVwKCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpLmRlZHVwKCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi5rZXlzKS5kZWR1cCgpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5LZXlzKS5EZWR1cCgpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5LZXlzKS5EZWR1cCgpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpLmRlZHVwKCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi5rZXlzKS5kZWR1cCgpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4ua2V5cykuZGVkdXAoKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoKS5zZWxlY3QoQ29sdW1uLmtleXMpLmRlZHVwKCkuaXNfKFAudHlwZV9vZihHVHlwZS5TRVQpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHtcImFcIiwgXCJiXCIsIFwiY1wifSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHtcImFcIiwgXCJiXCIsIFwiY1wifSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7XCJhXCIsIFwiYlwiLCBcImNcIn0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc2V0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcInNldFwiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgXCJhXCIsIFwiYlwiLCBcImNcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJzZXRcIiwgZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIiwgXCJiXCIsIFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0gYXMgU2V0KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCBuZXcgSGFzaFNldDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgYWRkKFwiY1wiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIG5ldyBTZXQoW1wiYVwiLCBcImJcIiwgXCJjXCJdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdzZXQnLCB7J2EnLCAnYicsICdjJ30pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwic2V0XCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwic2V0XCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3NldCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0VUKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYc2V0X3R5cGVPZlhHVHlwZV9TRVRYWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwic2V0XCIsIHsxLCAyLCAzfSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJzZXRcIiwgezEsIDIsIDN9KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJzZXRcIiwgezEsIDIsIDN9KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHNldDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5Qcm9wZXJ0eShcInNldFwiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgMSwgMiwgMyB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5Qcm9wZXJ0eShcInNldFwiLCBncmVtbGluZ28uTmV3U2ltcGxlU2V0KDEsIDIsIDMpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJzZXRcIiwgWzEsIDIsIDNdIGFzIFNldCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcInNldFwiLCBuZXcgSGFzaFNldDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IGFkZCgzKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJzZXRcIiwgbmV3IFNldChbMSwgMiwgM10pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ25hbWUnLCAndGVzdCcpLnByb3BlcnR5KCdzZXQnLCB7MSwgMiwgM30pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwic2V0XCIsIFAudHlwZU9mKEdUeXBlLlNFVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJzZXRcIiwgUC50eXBlT2YoR1R5cGUuU0VUKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJzZXRcIiwgUC50eXBlT2YoR1R5cGUuU0VUKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAudHlwZU9mKEdUeXBlLlNFVCkpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJzZXRcIiwgUC5UeXBlT2YoR1R5cGUuU2V0KSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwic2V0XCIsIGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJzZXRcIiwgUC50eXBlT2YoR1R5cGUuU0VUKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwic2V0XCIsIFAudHlwZU9mKEdUeXBlLlNFVCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInNldFwiLCBQLnR5cGVPZihHVHlwZS5zZXQpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnc2V0JywgUC50eXBlX29mKEdUeXBlLlNFVCkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHtcInhcIiwgXCJ5XCIsIFwielwifSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHtcInhcIiwgXCJ5XCIsIFwielwifSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7XCJ4XCIsIFwieVwiLCBcInpcIn0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc2V0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcInNldFwiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgXCJ4XCIsIFwieVwiLCBcInpcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJzZXRcIiwgZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcInhcIiwgXCJ5XCIsIFwielwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCBbXCJ4XCIsIFwieVwiLCBcInpcIl0gYXMgU2V0KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCBuZXcgSGFzaFNldDxPYmplY3Q+KCkge3sgYWRkKFwieFwiKTsgYWRkKFwieVwiKTsgYWRkKFwielwiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIG5ldyBTZXQoW1wieFwiLCBcInlcIiwgXCJ6XCJdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdzZXQnLCB7J3gnLCAneScsICd6J30pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwic2V0XCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJzZXRcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TZXQpKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnc2V0JykuaXNfKFAudHlwZV9vZihHVHlwZS5TRVQpKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hzZXRYX2lzWHR5cGVPZlhHVHlwZV9TRVRYWF9jb3VudFhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7MSwgMiwgMywgNCwgNX0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7MSwgMiwgMywgNCwgNX0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgezEsIDIsIDMsIDQsIDV9KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHNldDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJzZXRcIiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDIsIDMsIDQsIDUgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwic2V0XCIsIGdyZW1saW5nby5OZXdTaW1wbGVTZXQoMSwgMiwgMywgNCwgNSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgWzEsIDIsIDMsIDQsIDVdIGFzIFNldCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgbmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IGFkZCg0KTsgYWRkKDUpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgbmV3IFNldChbMSwgMiwgMywgNCwgNV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ3NldCcsIHsxLCAyLCAzLCA0LCA1fSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuY291bnQobG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwic2V0XCIpLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLkNvdW50KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcInNldFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlNldCkpLkNvdW50KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLnNldCkpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3NldCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0VUKSkuY291bnQoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX3doZXJlWGNvdW50WGxvY2FsWF9pc1hlcVgzWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgezEsIDJ9KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7MSwgMiwgM30pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7MSwgMn0pLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHsxLCAyLCAzfSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCB7MSwgMn0pLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHsxLCAyLCAzfSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzZXQwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHNldDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJzZXRcIiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDIgfSkuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJzZXRcIiwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDIsIDMgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwic2V0XCIsIGdyZW1saW5nby5OZXdTaW1wbGVTZXQoMSwgMikpLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwic2V0XCIsIGdyZW1saW5nby5OZXdTaW1wbGVTZXQoMSwgMiwgMykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgWzEsIDJdIGFzIFNldCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgWzEsIDIsIDNdIGFzIFNldCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgbmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyB9fSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgbmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInNldFwiLCBuZXcgU2V0KFsxLCAyXSkpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIG5ldyBTZXQoWzEsIDIsIDNdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdzZXQnLCB7MSwgMn0pLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ3NldCcsIHsxLCAyLCAzfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkud2hlcmUoY291bnQobG9jYWwpLmlzKFAuZXEoMykpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5lcSgzKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5lcSgzKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZXEobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcInNldFwiKS5JcyhQLlR5cGVPZihHVHlwZS5TZXQpKS5XaGVyZShfXy5Db3VudChTY29wZS5Mb2NhbCkuSXMoUC5FcSgzKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwic2V0XCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpLklzKGdyZW1saW5nby5QLkVxKDMpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLndoZXJlKF9fLmNvdW50KFNjb3BlLmxvY2FsKS5pcyhQLmVxKDMpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKS53aGVyZShfXy5jb3VudChTY29wZS5sb2NhbCkuaXMoUC5lcSgzKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuc2V0KSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzKFAuZXEoMykpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3NldCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0VUKSkud2hlcmUoX18uY291bnQoU2NvcGUubG9jYWwpLmlzXyhQLmVxKDMpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYc2V0WF9pc1h0eXBlT2ZYR1R5cGVfU0VUWFhfdW5mb2xkX2xpbWl0WDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwge1wiZmlyc3RcIiwgXCJzZWNvbmRcIiwgXCJ0aGlyZFwiLCBcImZvdXJ0aFwifSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIHtcImZpcnN0XCIsIFwic2Vjb25kXCIsIFwidGhpcmRcIiwgXCJmb3VydGhcIn0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwge1wiZmlyc3RcIiwgXCJzZWNvbmRcIiwgXCJ0aGlyZFwiLCBcImZvdXJ0aFwifSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzZXQwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwic2V0XCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyBcImZpcnN0XCIsIFwic2Vjb25kXCIsIFwidGhpcmRcIiwgXCJmb3VydGhcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJzZXRcIiwgZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImZpcnN0XCIsIFwic2Vjb25kXCIsIFwidGhpcmRcIiwgXCJmb3VydGhcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgW1wiZmlyc3RcIiwgXCJzZWNvbmRcIiwgXCJ0aGlyZFwiLCBcImZvdXJ0aFwiXSBhcyBTZXQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwic2V0XCIsIG5ldyBIYXNoU2V0PE9iamVjdD4oKSB7eyBhZGQoXCJmaXJzdFwiKTsgYWRkKFwic2Vjb25kXCIpOyBhZGQoXCJ0aGlyZFwiKTsgYWRkKFwiZm91cnRoXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJzZXRcIiwgbmV3IFNldChbXCJmaXJzdFwiLCBcInNlY29uZFwiLCBcInRoaXJkXCIsIFwiZm91cnRoXCJdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdzZXQnLCB7J2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcsICdmb3VydGgnfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkudW5mb2xkKCkubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkudW5mb2xkKCkubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLnVuZm9sZCgpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkudW5mb2xkKCkubGltaXQobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJzZXRcIikuSXMoUC5UeXBlT2YoR1R5cGUuU2V0KSkuVW5mb2xkPG9iamVjdD4oKS5MaW1pdDxvYmplY3Q+KDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwic2V0XCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkuVW5mb2xkKCkuTGltaXQoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwic2V0XCIpLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLnVuZm9sZCgpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJzZXRcIikuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkudW5mb2xkKCkubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcInNldFwiKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKS51bmZvbGQoKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3NldCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0VUKSkudW5mb2xkKCkubGltaXQoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WHNldFhfaXNYdHlwZU9mWEdUeXBlX1NFVFhYX2dyb3VwQ291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3Qoe1widGVzdFwifSkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3Qoe1widGVzdFwifSkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KHtcInRlc3RcIn0pLmlzKFAudHlwZU9mKEdUeXBlLlNFVCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc2V0MCkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IEhhc2hTZXQ8b2JqZWN0PiB7IFwidGVzdFwiIH0pLklzKFAuVHlwZU9mKEdUeXBlLlNldCkpLkdyb3VwQ291bnQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcInRlc3RcIikpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU2V0KSkuR3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcInRlc3RcIl0gYXMgU2V0KS5pcyhQLnR5cGVPZihHVHlwZS5TRVQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBIYXNoU2V0PE9iamVjdD4oKSB7eyBhZGQoXCJ0ZXN0XCIpOyB9fSkuaXMoUC50eXBlT2YoR1R5cGUuU0VUKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChuZXcgU2V0KFtcInRlc3RcIl0pKS5pcyhQLnR5cGVPZihHVHlwZS5zZXQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3Qoeyd0ZXN0J30pLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0VUKSkuZ3JvdXBfY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTAwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMDApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAxMDApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiaW50XCIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TaG9ydCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuU0hPUlQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0hPUlQpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hpbnRYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWF9pc1h0eXBlT2ZYR1R5cGVfU0hPUlRYWF9tYXRoWG11bFgxMFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCA1MCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuU0hPUlQpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkubWF0aChcIl8gKiAxMFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXRoKFwiXyAqIDEwXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXRoKFwiXyAqIDEwXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoR1R5cGUuU0hPUlQpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkubWF0aChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5TaG9ydCkuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKS5NYXRoKFwiXyAqIDEwXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TaG9ydCkpLk1hdGgoXCJfICogMTBcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLm1hdGgoXCJfICogMTBcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXRoKFwiXyAqIDEwXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkubWF0aChcIl8gKiAxMFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5TSE9SVCkuaXNfKFAudHlwZV9vZihHVHlwZS5TSE9SVCkpLm1hdGgoJ18gKiAxMCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGludFhfYXNOdW1iZXJYR1R5cGVfU0hPUlRYX2lzWHR5cGVPZlhHVHlwZV9TSE9SVFhYX2lzWGJldHdlZW5YMjBfMzBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDI1KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMjUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLmlzKFAuYmV0d2VlbigyMCwgMzApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5pcyhQLmJldHdlZW4oMjAsIDMwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLmlzKFAuYmV0d2VlbigyMCwgMzApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLmlzKFAuYmV0d2VlbihudW1iZXIwLCBudW1iZXIxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJpbnRcIikuQXNOdW1iZXIoR1R5cGUuU2hvcnQpLklzKFAuVHlwZU9mKEdUeXBlLlNob3J0KSkuSXMoUC5CZXR3ZWVuKDIwLCAzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TaG9ydCkpLklzKGdyZW1saW5nby5QLkJldHdlZW4oMjAsIDMwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLmlzKFAuYmV0d2VlbigyMCwgMzApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLmlzKFAuYmV0d2VlbigyMCwgMzApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLnNob3J0KS5pcyhQLnR5cGVPZihHVHlwZS5zaG9ydCkpLmlzKFAuYmV0d2VlbigyMCwgMzApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ludCcpLmFzX251bWJlcihHVHlwZS5TSE9SVCkuaXNfKFAudHlwZV9vZihHVHlwZS5TSE9SVCkpLmlzXyhQLmJldHdlZW4oMjAsIDMwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWluWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDMwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDEwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyMCkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTApLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDIwKS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDEwKS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyMCkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMzApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTApLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDIwKS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAxMCkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMjApLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDMwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuU0hPUlQpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkubWluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5TaG9ydCkuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKS5NaW48b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TaG9ydCkpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkubWluKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuU0hPUlQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0hPUlQpKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYaW50WF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfbWF4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDE1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAxNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMjUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDM1KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDE1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAyNSkuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBudW1iZXIxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMTUpLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDI1KS5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAzNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwiaW50XCIsIDE1KS5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcImludFwiLCAyNSkuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJpbnRcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzNSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJpbnRcIiwgMTUpLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwiaW50XCIsIDI1KS5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcImludFwiLCAzNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCdpbnQnLCAxNSkuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgnaW50JywgMjUpLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ2ludCcsIDM1KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuU0hPUlQpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImludFwiKS5Bc051bWJlcihHVHlwZS5TaG9ydCkuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiaW50XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TaG9ydCkpLk1heCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImludFwiKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiaW50XCIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJpbnRcIikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkubWF4KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdpbnQnKS5hc19udW1iZXIoR1R5cGUuU0hPUlQpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0hPUlQpKS5tYXhfKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDQyWF9hc051bWJlclhHVHlwZV9TSE9SVFhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFhfc3RvcmVYYVhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDQyKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDQyKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg0MikuYXNOdW1iZXIoR1R5cGUuU0hPUlQpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oNDIpLkFzTnVtYmVyKEdUeXBlLlNob3J0KS5JcyhQLlR5cGVPZihHVHlwZS5TaG9ydCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNDIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TaG9ydCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDQyKS5hc051bWJlcihHVHlwZS5TSE9SVCkuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoNDIpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCg0MikuYXNOdW1iZXIoR1R5cGUuc2hvcnQpLmlzKFAudHlwZU9mKEdUeXBlLnNob3J0KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoNDIpLmFzX251bWJlcihHVHlwZS5TSE9SVCkuaXNfKFAudHlwZV9vZihHVHlwZS5TSE9SVCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1NIT1JUWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU0hPUlQpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuU2hvcnQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlNob3J0KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNIT1JUKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TSE9SVCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuc2hvcnQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU0hPUlQpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwidXVpZFwiLCBHdWlkLlBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJ1dWlkXCIsIHV1aWQuTXVzdFBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCB1dWlkLnBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ3V1aWQnLCB1dWlkLlVVSUQoJ2Y0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OScpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJ1dWlkXCIpLklzKFAuVHlwZU9mKEdUeXBlLlVVSUQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcInV1aWRcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3V1aWQnKS5pc18oUC50eXBlX29mKEdUeXBlLlVVSUQpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1h1dWlkX3R5cGVPZlhHVHlwZV9VVUlEWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikuUHJvcGVydHkoXCJ1dWlkXCIsIEd1aWQuUGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLlByb3BlcnR5KFwidXVpZFwiLCB1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ0ZXN0XCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInRlc3RcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQuZnJvbVN0cmluZyhcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwidGVzdFwiKS5wcm9wZXJ0eShcInV1aWRcIiwgdXVpZC5wYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCduYW1lJywgJ3Rlc3QnKS5wcm9wZXJ0eSgndXVpZCcsIHV1aWQuVVVJRCgnZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5JykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwidXVpZFwiLCBQLnR5cGVPZihHVHlwZS5VVUlEKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInV1aWRcIiwgUC50eXBlT2YoR1R5cGUuVVVJRCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwidXVpZFwiLCBQLnR5cGVPZihHVHlwZS5VVUlEKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAudHlwZU9mKEdUeXBlLlVVSUQpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwidXVpZFwiLCBQLlR5cGVPZihHVHlwZS5VVUlEKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwidXVpZFwiLCBncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlVVSUQpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInV1aWRcIiwgUC50eXBlT2YoR1R5cGUuVVVJRCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInV1aWRcIiwgUC50eXBlT2YoR1R5cGUuVVVJRCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInV1aWRcIiwgUC50eXBlT2YoR1R5cGUudXVpZCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCd1dWlkJywgUC50eXBlX29mKEdUeXBlLlVVSUQpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX3Byb2plY3RfYnlYaWRlbnRpdHlYX2J5WGNvbnN0YW50WHV1aWRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcInV1aWRcIiwgR3VpZC5QYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwidXVpZFwiLCB1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgdXVpZC5wYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCd1dWlkJywgdXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJ0eXBlXCIpLmJ5KGlkZW50aXR5KCkpLmJ5KGNvbnN0YW50KFwidXVpZFwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJ0eXBlXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmNvbnN0YW50KFwidXVpZFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwidHlwZVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5jb25zdGFudChcInV1aWRcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLnByb2plY3Qoc3RyaW5nMSwgc3RyaW5nMikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uY29uc3RhbnQoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwidXVpZFwiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuUHJvamVjdDxvYmplY3Q+KFwib3JpZ2luYWxcIiwgXCJ0eXBlXCIpLkJ5KF9fLklkZW50aXR5KCkpLkJ5KF9fLkNvbnN0YW50PG9iamVjdD4oXCJ1dWlkXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcInV1aWRcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5VVUlEKSkuUHJvamVjdChcIm9yaWdpbmFsXCIsIFwidHlwZVwiKS5CeShncmVtbGluZ28uVF9fLklkZW50aXR5KCkpLkJ5KGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJ1dWlkXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5wcm9qZWN0KFwib3JpZ2luYWxcIiwgXCJ0eXBlXCIpLmJ5KF9fLmlkZW50aXR5KCkpLmJ5KF9fLmNvbnN0YW50KFwidXVpZFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLnByb2plY3QoXCJvcmlnaW5hbFwiLCBcInR5cGVcIikuYnkoX18uaWRlbnRpdHkoKSkuYnkoX18uY29uc3RhbnQoXCJ1dWlkXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkucHJvamVjdChcIm9yaWdpbmFsXCIsIFwidHlwZVwiKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5jb25zdGFudChcInV1aWRcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygndXVpZCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuVVVJRCkpLnByb2plY3QoJ29yaWdpbmFsJywgJ3R5cGUnKS5ieShfXy5pZGVudGl0eSgpKS5ieShfXy5jb25zdGFudCgndXVpZCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX3doZXJlWGlzWGVxWHV1aWRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcInV1aWRcIiwgR3VpZC5QYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwidXVpZFwiLCB1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgdXVpZC5wYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCd1dWlkJywgdXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS53aGVyZShfXy5pcyhQLmVxKFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS53aGVyZShfXy5pcyhQLmVxKFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkud2hlcmUoX18uaXMoUC5lcShVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLndoZXJlKF9fLmlzKFAuZXEoc3RyaW5nMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcInV1aWRcIikuSXMoUC5UeXBlT2YoR1R5cGUuVVVJRCkpLldoZXJlKF9fLklzKFAuRXEoR3VpZC5QYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcInV1aWRcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5VVUlEKSkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSh1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS53aGVyZShfXy5pcyhQLmVxKFVVSUQuZnJvbVN0cmluZyhcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkud2hlcmUoX18uaXMoUC5lcShVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUudXVpZCkpLndoZXJlKF9fLmlzKFAuZXEodXVpZC5wYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3V1aWQnKS5pc18oUC50eXBlX29mKEdUeXBlLlVVSUQpKS53aGVyZShfXy5pc18oUC5lcSh1dWlkLlVVSUQoJ2Y0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OScpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWHV1aWRYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFhfY2hvb3NlWGlzWGVxWHV1aWRYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJkYXRhXCIpLlByb3BlcnR5KFwidXVpZFwiLCBHdWlkLlBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImRhdGFcIikuUHJvcGVydHkoXCJ1dWlkXCIsIHV1aWQuTXVzdFBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCB1dWlkLnBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdkYXRhJykucHJvcGVydHkoJ3V1aWQnLCB1dWlkLlVVSUQoJ2Y0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OScpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmNob29zZShfXy5pcyhQLmVxKFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSwgY29uc3RhbnQoXCJtYXRjaFwiKSwgY29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmNob29zZShfXy5pcyhQLmVxKFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSwgX18uY29uc3RhbnQoXCJtYXRjaFwiKSwgX18uY29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5jaG9vc2UoX18uaXMoUC5lcShVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSksIF9fLmNvbnN0YW50KFwibWF0Y2hcIiksIF9fLmNvbnN0YW50KFwibm9NYXRjaFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkuY2hvb3NlKF9fLmlzKFAuZXEoc3RyaW5nMSkpLCBfXy5jb25zdGFudChzdHJpbmcyKSwgX18uY29uc3RhbnQoc3RyaW5nMykpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwidXVpZFwiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuQ2hvb3NlPG9iamVjdD4oX18uSXMoUC5FcShHdWlkLlBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJtYXRjaFwiKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihcIm5vTWF0Y2hcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwidXVpZFwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlVVSUQpKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSh1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwibWF0Y2hcIiksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5jaG9vc2UoX18uaXMoUC5lcShVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSwgX18uY29uc3RhbnQoXCJtYXRjaFwiKSwgX18uY29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkuY2hvb3NlKF9fLmlzKFAuZXEoVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSksIF9fLmNvbnN0YW50KFwibWF0Y2hcIiksIF9fLmNvbnN0YW50KFwibm9NYXRjaFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUudXVpZCkpLmNob29zZShfXy5pcyhQLmVxKHV1aWQucGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpKSwgX18uY29uc3RhbnQoXCJtYXRjaFwiKSwgX18uY29uc3RhbnQoXCJub01hdGNoXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ3V1aWQnKS5pc18oUC50eXBlX29mKEdUeXBlLlVVSUQpKS5jaG9vc2UoX18uaXNfKFAuZXEodXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkpLCBfXy5jb25zdGFudCgnbWF0Y2gnKSwgX18uY29uc3RhbnQoJ25vTWF0Y2gnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYdXVpZFhfaXNYdHlwZU9mWEdUeXBlX1VVSURYWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiZGF0YVwiKS5Qcm9wZXJ0eShcInV1aWRcIiwgR3VpZC5QYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJkYXRhXCIpLlByb3BlcnR5KFwidXVpZFwiLCB1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgdXVpZC5wYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZGF0YScpLnByb3BlcnR5KCd1dWlkJywgdXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwidXVpZFwiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJ1dWlkXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuVVVJRCkpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygndXVpZCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuVVVJRCkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1h1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX2FnZ3JlZ2F0ZVhhWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiZGF0YVwiKS5wcm9wZXJ0eShcInV1aWRcIiwgVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJkYXRhXCIpLnByb3BlcnR5KFwidXVpZFwiLCBVVUlEKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcImRhdGFcIikuUHJvcGVydHkoXCJ1dWlkXCIsIEd1aWQuUGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZGF0YVwiKS5Qcm9wZXJ0eShcInV1aWRcIiwgdXVpZC5NdXN0UGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQuZnJvbVN0cmluZyhcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIFVVSUQuZnJvbVN0cmluZyhcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcImRhdGFcIikucHJvcGVydHkoXCJ1dWlkXCIsIHV1aWQucGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2RhdGEnKS5wcm9wZXJ0eSgndXVpZCcsIHV1aWQuVVVJRCgnZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5JykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5hZ2dyZWdhdGUoc3RyaW5nMSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwidXVpZFwiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkuQWdncmVnYXRlKFwiYVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJ1dWlkXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuVVVJRCkpLkFnZ3JlZ2F0ZShcImFcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJ1dWlkXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcInV1aWRcIikuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwidXVpZFwiKS5pcyhQLnR5cGVPZihHVHlwZS51dWlkKSkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygndXVpZCcpLmlzXyhQLnR5cGVfb2YoR1R5cGUuVVVJRCkpLmFnZ3JlZ2F0ZSgnYScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFh1dWlkWF9pc1h0eXBlT2ZYR1R5cGVfVVVJRFhYX2dyb3VwQ291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuVVVJRCkpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KEd1aWQuUGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpLklzKFAuVHlwZU9mKEdUeXBlLlVVSUQpKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KHV1aWQuTXVzdFBhcnNlKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlVVSUQpKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChVVUlELmZyb21TdHJpbmcoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KHV1aWQucGFyc2UoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QodXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkuaXNfKFAudHlwZV9vZihHVHlwZS5VVUlEKSkuZ3JvdXBfY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYVVVJRFg0N2FmMTBiXzU4Y2NfNDM3Ml9hNTY3XzBmMDJiMmYzZDQ3OVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFVVSUQoXCJmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzlcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoVVVJRChcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oR3VpZC5QYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh1dWlkLk11c3RQYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoVVVJRC5mcm9tU3RyaW5nKFwiZjQ3YWYxMGItNThjYy00MzcyLWE1NjctMGYwMmIyZjNkNDc5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QodXVpZC5wYXJzZShcImY0N2FmMTBiLTU4Y2MtNDM3Mi1hNTY3LTBmMDJiMmYzZDQ3OVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QodXVpZC5VVUlEKCdmNDdhZjEwYi01OGNjLTQzNzItYTU2Ny0wZjAyYjJmM2Q0NzknKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WFVVSURYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoVVVJRCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFVVSUQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoVVVJRCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihHdWlkLk5ld0d1aWQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh1dWlkLk5ldygpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChVVUlELnJhbmRvbVVVSUQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFVVSUQucmFuZG9tVVVJRCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QodXVpZC52NCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCh1dWlkLnV1aWQ0KCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdncmVnYXRlWHhYX2J5WG5hbWVYX2J5WGFnZVhfY2FwWHhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5ieShzdHJpbmcyKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwieFwiKS5CeShcIm5hbWVcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWdncmVnYXRlKFwieFwiKS5CeShcIm5hbWVcIikuQnkoXCJhZ2VcIikuQ2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgneCcpLmJ5KCduYW1lJykuYnkoJ2FnZScpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYYWdncmVnYXRlWHhYX2J5WG5hbWVYWF9ieVhhZ2VYX2NhcFh4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuYnkoc3RyaW5nMikpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJuYW1lXCIpLkJ5KFwiYWdlXCIpKS5DYXA8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJuYW1lXCIpLkJ5KFwiYWdlXCIpKS5DYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCd4JykuYnkoJ25hbWUnKS5ieSgnYWdlJykpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfYWxsWGd0WDMyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFsbChQLmd0KDMyKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYWxsKFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYWxsKFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFsbChQLmd0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5BbGwoUC5HdCgzMikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkFsbChncmVtbGluZ28uUC5HdCgzMikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5hbGwoUC5ndCgzMikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYWxsKFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFsbChQLmd0KDMyKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5hbGxfKFAuZ3QoMzIpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX3doZXJlWGlzWFBfZ3RYMzNYWFhfZm9sZF9hbGxYZ3RYMzNYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkuYWxsKFAuZ3QoMzMpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS53aGVyZShfXy5pcyhQLmd0KDMzKSkpLmZvbGQoKS5hbGwoUC5ndCgzMykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS53aGVyZShfXy5pcyhQLmd0KDMzKSkpLmZvbGQoKS5hbGwoUC5ndCgzMykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkud2hlcmUoX18uaXMoUC5ndChudW1iZXIwKSkpLmZvbGQoKS5hbGwoUC5ndChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuV2hlcmUoX18uSXMoUC5HdCgzMykpKS5Gb2xkKCkuQWxsKFAuR3QoMzMpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5XaGVyZShncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDMzKSkpLkZvbGQoKS5BbGwoZ3JlbWxpbmdvLlAuR3QoMzMpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkuYWxsKFAuZ3QoMzMpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLndoZXJlKF9fLmlzKFAuZ3QoMzMpKSkuZm9sZCgpLmFsbChQLmd0KDMzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS53aGVyZShfXy5pcyhQLmd0KDMzKSkpLmZvbGQoKS5hbGwoUC5ndCgzMykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykud2hlcmUoX18uaXNfKFAuZ3QoMzMpKSkuZm9sZCgpLmFsbF8oUC5ndCgzMykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbGxYZ3RYMTBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShkZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMTApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGwoUC5ndCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGwoUC5ndCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYykuRm9sZCgpLkFsbChQLkd0KDEwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuRm9sZCgpLkFsbChncmVtbGluZ28uUC5HdCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGwoUC5ndCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMTApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFsbChQLmd0KDEwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGxfKFAuZ3QoMTApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfYWxsWGd0WDMwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoZGVzYykuZm9sZCgpLmFsbChQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFsbChQLmd0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLkZvbGQoKS5BbGwoUC5HdCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkZvbGQoKS5BbGwoZ3JlbWxpbmdvLlAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsKFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFsbChQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbGwoUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYWxsXyhQLmd0KDMwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFiY19iY2RYX2FsbFhlcVhiY2RYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJhYmNcIixcImJjZFwiXSkuYWxsKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5hbGwoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5hbGwoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5hbGwoUC5lcShzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhYmNcIiwgXCJiY2RcIiB9KS5BbGwoUC5FcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYWJjXCIsIFwiYmNkXCJ9KS5BbGwoZ3JlbWxpbmdvLlAuRXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFiY1wiLCBcImJjZFwiXSkuYWxsKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhYmNcIik7IGFkZChcImJjZFwiKTsgfX0pLmFsbChQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5hbGwoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhYmMnLCAnYmNkJ10pLmFsbF8oUC5lcSgnYmNkJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhiY2RfYmNkWF9hbGxYZXFYYmNkWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYmNkXCIsXCJiY2RcIl0pLmFsbChQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImJjZFwiLCBcImJjZFwiXSkuYWxsKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImJjZFwiLCBcImJjZFwiXSkuYWxsKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuYWxsKFAuZXEoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYmNkXCIsIFwiYmNkXCIgfSkuQWxsKFAuRXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImJjZFwiLCBcImJjZFwifSkuQWxsKGdyZW1saW5nby5QLkVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCJiY2RcIiwgXCJiY2RcIl0pLmFsbChQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYmNkXCIpOyBhZGQoXCJiY2RcIik7IH19KS5hbGwoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImJjZFwiLCBcImJjZFwiXSkuYWxsKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnYmNkJywgJ2JjZCddKS5hbGxfKFAuZXEoJ2JjZCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbF9hYmNYX2FsbFhUZXh0UF9zdGFydGluZ1dpdGhYYVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtudWxsLFwiYWJjXCJdKS5hbGwoVGV4dFAuc3RhcnRpbmdXaXRoKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbbnVsbCwgXCJhYmNcIl0pLmFsbChUZXh0UC5zdGFydGluZ1dpdGgoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbbnVsbCwgXCJhYmNcIl0pLmFsbChUZXh0UC5zdGFydGluZ1dpdGgoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmFsbChUZXh0UC5zdGFydGluZ1dpdGgoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IG51bGwsIFwiYWJjXCIgfSkuQWxsKFRleHRQLlN0YXJ0aW5nV2l0aChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIFwiYWJjXCJ9KS5BbGwoZ3JlbWxpbmdvLlRleHRQLlN0YXJ0aW5nV2l0aChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtudWxsLCBcImFiY1wiXSkuYWxsKFRleHRQLnN0YXJ0aW5nV2l0aChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobnVsbCk7IGFkZChcImFiY1wiKTsgfX0pLmFsbChUZXh0UC5zdGFydGluZ1dpdGgoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIFwiYWJjXCJdKS5hbGwoVGV4dFAuc3RhcnRpbmdXaXRoKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoW05vbmUsICdhYmMnXSkuYWxsXyhUZXh0UC5zdGFydGluZ193aXRoKCdhJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1XzhfMTBfMTBfN1hfYWxsWGd0ZVg3WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzUsOCwxMF0sWzEwLDddKS5hbGwoUC5ndGUoNykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkuYWxsKFAuZ3RlKDcpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5hbGwoUC5ndGUoNykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCwgbGlzdDEpLmFsbChQLmd0ZShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgNSwgOCwgMTAgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDEwLCA3IH0pLkFsbChQLkd0ZSg3KSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezUsIDgsIDEwfSwgW11pbnRlcmZhY2V7fXsxMCwgN30pLkFsbChncmVtbGluZ28uUC5HdGUoNykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFs1LCA4LCAxMF0sIFsxMCwgN10pLmFsbChQLmd0ZSg3KSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCg1KTsgYWRkKDgpOyBhZGQoMTApOyB9fSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEwKTsgYWRkKDcpOyB9fSkuYWxsKFAuZ3RlKDcpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkuYWxsKFAuZ3RlKDcpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5hbGxfKFAuZ3RlKDcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbFhfYWxsWGVxWG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5hbGwoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5hbGwoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuYWxsKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5hbGwoUC5lcShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5BbGwoUC5FcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLkFsbChncmVtbGluZ28uUC5FcShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5hbGwoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmFsbChQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuYWxsKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmFsbF8oUC5lcShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDdYX2FsbFhlcVg3WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoNykuYWxsKFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoNykuYWxsKFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDcpLmFsbChQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYWxsKFAuZXEobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oNykuQWxsKFAuRXEoNykpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNykuQWxsKGdyZW1saW5nby5QLkVxKDcpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCg3KS5hbGwoUC5lcSg3KSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDcpLmFsbChQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNykuYWxsKFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDcpLmFsbF8oUC5lcSg3KSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxfbnVsbFhfYWxsWGVxWG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbbnVsbCxudWxsXSkuYWxsKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5hbGwoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5hbGwoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5hbGwoUC5lcShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgbnVsbCB9KS5BbGwoUC5FcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e25pbCwgbmlsfSkuQWxsKGdyZW1saW5nby5QLkVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkuYWxsKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobnVsbCk7IGFkZChudWxsKTsgfX0pLmFsbChQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5hbGwoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoW05vbmUsIE5vbmVdKS5hbGxfKFAuZXEoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9hbGxYZXFYM1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFszLFwidGhyZWVcIl0pLmFsbChQLmVxKDMpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5hbGwoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLmFsbChQLmVxKDMpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmFsbChQLmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuQWxsKFAuRXEoMykpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCBcInRocmVlXCJ9KS5BbGwoZ3JlbWxpbmdvLlAuRXEoMykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5hbGwoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgzKTsgYWRkKFwidGhyZWVcIik7IH19KS5hbGwoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5hbGwoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzMsICd0aHJlZSddKS5hbGxfKFAuZXEoMykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYW5kWGhhc1hhZ2VfZ3RfMjdYX19vdXRFX2NvdW50X2d0ZV8yWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFuZChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpLCBfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0ZSgyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hbmQoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMjcpKSwgX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFuZChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpLCBfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0ZSgyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFuZChfXy5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKG51bWJlcjEpKSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFuZChfXy5IYXMoXCJhZ2VcIiwgUC5HdCgyNykpLCBfXy5PdXRFKCkuQ291bnQoKS5JcyhQLkd0ZSgyKSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFuZChncmVtbGluZ28uVF9fLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgyNykpLCBncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLklzKGdyZW1saW5nby5QLkd0ZSgyKSkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYW5kKF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYW5kKF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYW5kKF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hbmRfKF9fLmhhcygnYWdlJywgUC5ndCgyNykpLCBfXy5vdXRfZSgpLmNvdW50KCkuaXNfKFAuZ3RlKDIpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hbmRYb3V0RV9faGFzWGxhYmVsX3BlcnNvblhfYW5kX2hhc1hhZ2VfZ3RlXzMyWFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hbmQoX18ub3V0RSgpLCBfXy5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikuYW5kKCkuaGFzKFwiYWdlXCIsIFAuZ3RlKDMyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hbmQoX18ub3V0RSgpLCBfXy5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikuYW5kKCkuaGFzKFwiYWdlXCIsIFAuZ3RlKDMyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYW5kKF9fLm91dEUoKSwgX18uaGFzKFQubGFiZWwsIFwicGVyc29uXCIpLmFuZCgpLmhhcyhcImFnZVwiLCBQLmd0ZSgzMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hbmQoX18ub3V0RSgpLCBfXy5oYXMoVC5sYWJlbCwgc3RyaW5nMCkuYW5kKCkuaGFzKHN0cmluZzEsIFAuZ3RlKG51bWJlcjApKSkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFuZChfXy5PdXRFKCksIF9fLkhhcyhULkxhYmVsLCBcInBlcnNvblwiKS5BbmQoKS5IYXMoXCJhZ2VcIiwgUC5HdGUoMzIpKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQW5kKGdyZW1saW5nby5UX18uT3V0RSgpLCBncmVtbGluZ28uVF9fLkhhcyhncmVtbGluZ28uVC5MYWJlbCwgXCJwZXJzb25cIikuQW5kKCkuSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLkd0ZSgzMikpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFuZChfXy5vdXRFKCksIF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKS5hbmQoKS5oYXMoXCJhZ2VcIiwgUC5ndGUoMzIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYW5kKF9fLm91dEUoKSwgX18uaGFzKFQubGFiZWwsIFwicGVyc29uXCIpLmFuZCgpLmhhcyhcImFnZVwiLCBQLmd0ZSgzMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hbmQoX18ub3V0RSgpLCBfXy5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikuYW5kKCkuaGFzKFwiYWdlXCIsIFAuZ3RlKDMyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYW5kXyhfXy5vdXRfZSgpLCBfXy5oYXMoVC5sYWJlbCwgJ3BlcnNvbicpLmFuZF8oKS5oYXMoJ2FnZScsIFAuZ3RlKDMyKSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0WGtub3dzWF9hbmRfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGFYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFuZCgpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFuZCgpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hbmQoKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFuZCgpLm91dChzdHJpbmcyKS5pbihzdHJpbmcyKS5hcyhzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFuZCgpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQW5kKCkuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJhXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFuZCgpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYW5kKCkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hbmQoKS5vdXQoXCJjcmVhdGVkXCIpLmluXyhcImNyZWF0ZWRcIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCdrbm93cycpLmFuZF8oKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS5hc18oJ2EnKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX2FuZFhzZWxlY3RYYVhfc2VsZWN0WGFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikuYW5kKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLmFuZChfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikuYW5kKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5hbmQoX18uc2VsZWN0KHN0cmluZzApLCBfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5BbmQoX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLCBfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLkFuZChncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIiksIGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLmFuZChfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLmFuZChfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLmFuZChfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5hbmRfKF9fLnNlbGVjdCgnYScpLCBfXy5zZWxlY3QoJ2EnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9tYXJrb1hfYW5kX2hhc1huYW1lX21hcmtvWF9hbmRfaGFzWG5hbWVfbWFya29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hbmQoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYW5kKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFuZCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hbmQoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFuZCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hbmQoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5hbmQoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuYW5kKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5BbmQoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuQW5kKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLkFuZCgpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5BbmQoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFuZCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hbmQoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hbmQoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYW5kKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYW5kKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFuZCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5hbmRfKCkuaGFzKCduYW1lJywgJ21hcmtvJykuYW5kXygpLmhhcygnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfYW55WGd0WDMyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFueShQLmd0KDMyKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYW55KFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYW55KFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFueShQLmd0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5BbnkoUC5HdCgzMikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkFueShncmVtbGluZ28uUC5HdCgzMikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5hbnkoUC5ndCgzMikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYW55KFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFueShQLmd0KDMyKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5hbnlfKFAuZ3QoMzIpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfYW55WGVxWDI5WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoZGVzYykuZm9sZCgpLmFueShQLmVxKDI5KSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55KFAuZXEoMjkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55KFAuZXEoMjkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLkZvbGQoKS5BbnkoUC5FcSgyOSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkZvbGQoKS5BbnkoZ3JlbWxpbmdvLlAuRXEoMjkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55KFAuZXEoMjkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmVxKDI5KSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5lcSgyOSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55XyhQLmVxKDI5KSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2FueVhndFgxMFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KGRlc2MpLmZvbGQoKS5hbnkoUC5ndCgxMCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmd0KDEwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmd0KDEwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5Gb2xkKCkuQW55KFAuR3QoMTApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5EZXNjKS5Gb2xkKCkuQW55KGdyZW1saW5nby5QLkd0KDEwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmd0KDEwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55KFAuZ3QoMTApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueV8oUC5ndCgxMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9hbnlYZ3RYNDJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShkZXNjKS5mb2xkKCkuYW55KFAuZ3QoNDIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndCg0MikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndCg0MikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55KFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYykuRm9sZCgpLkFueShQLkd0KDQyKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuRm9sZCgpLkFueShncmVtbGluZ28uUC5HdCg0MikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnkoUC5ndCg0MikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuYW55KFAuZ3QoNDIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmFueShQLmd0KDQyKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5hbnlfKFAuZ3QoNDIpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYYWJjX2NkZVhfYW55WGVxWGJjZFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFiY1wiLFwiY2RlXCJdKS5hbnkoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhYmNcIiwgXCJjZGVcIl0pLmFueShQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhYmNcIiwgXCJjZGVcIl0pLmFueShQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmFueShQLmVxKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFiY1wiLCBcImNkZVwiIH0pLkFueShQLkVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhYmNcIiwgXCJjZGVcIn0pLkFueShncmVtbGluZ28uUC5FcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiY2RlXCJdKS5hbnkoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFiY1wiKTsgYWRkKFwiY2RlXCIpOyB9fSkuYW55KFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJhYmNcIiwgXCJjZGVcIl0pLmFueShQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2FiYycsICdjZGUnXSkuYW55XyhQLmVxKCdiY2QnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFiY19iY2RYX2FueVhlcVhiY2RYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJhYmNcIixcImJjZFwiXSkuYW55KFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5hbnkoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5hbnkoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5hbnkoUC5lcShzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhYmNcIiwgXCJiY2RcIiB9KS5BbnkoUC5FcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYWJjXCIsIFwiYmNkXCJ9KS5BbnkoZ3JlbWxpbmdvLlAuRXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFiY1wiLCBcImJjZFwiXSkuYW55KFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhYmNcIik7IGFkZChcImJjZFwiKTsgfX0pLmFueShQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5hbnkoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhYmMnLCAnYmNkJ10pLmFueV8oUC5lcSgnYmNkJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsX2FiY1hfYW55WFRleHRQX3N0YXJ0aW5nV2l0aFhhWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW251bGwsXCJhYmNcIl0pLmFueShUZXh0UC5zdGFydGluZ1dpdGgoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtudWxsLCBcImFiY1wiXSkuYW55KFRleHRQLnN0YXJ0aW5nV2l0aChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtudWxsLCBcImFiY1wiXSkuYW55KFRleHRQLnN0YXJ0aW5nV2l0aChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuYW55KFRleHRQLnN0YXJ0aW5nV2l0aChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgXCJhYmNcIiB9KS5BbnkoVGV4dFAuU3RhcnRpbmdXaXRoKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e25pbCwgXCJhYmNcIn0pLkFueShncmVtbGluZ28uVGV4dFAuU3RhcnRpbmdXaXRoKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW251bGwsIFwiYWJjXCJdKS5hbnkoVGV4dFAuc3RhcnRpbmdXaXRoKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChudWxsKTsgYWRkKFwiYWJjXCIpOyB9fSkuYW55KFRleHRQLnN0YXJ0aW5nV2l0aChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbbnVsbCwgXCJhYmNcIl0pLmFueShUZXh0UC5zdGFydGluZ1dpdGgoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbTm9uZSwgJ2FiYyddKS5hbnlfKFRleHRQLnN0YXJ0aW5nX3dpdGgoJ2EnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDVfOF8xMF8xMF83WF9hbnlYZXFYN1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFs1LDgsMTBdLFsxMCw3XSkuYW55KFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkuYW55KFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFs1LCA4LCAxMF0sIFsxMCwgN10pLmFueShQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDAsIGxpc3QxKS5hbnkoUC5lcShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgNSwgOCwgMTAgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDEwLCA3IH0pLkFueShQLkVxKDcpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317NSwgOCwgMTB9LCBbXWludGVyZmFjZXt9ezEwLCA3fSkuQW55KGdyZW1saW5nby5QLkVxKDcpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5hbnkoUC5lcSg3KSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCg1KTsgYWRkKDgpOyBhZGQoMTApOyB9fSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEwKTsgYWRkKDcpOyB9fSkuYW55KFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5hbnkoUC5lcSg3KSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkuYW55XyhQLmVxKDcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbFhfYW55WGVxWG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5hbnkoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5hbnkoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuYW55KFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5hbnkoUC5lcShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5BbnkoUC5FcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLkFueShncmVtbGluZ28uUC5FcShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5hbnkoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmFueShQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuYW55KFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmFueV8oUC5lcShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDdYX2FueVhlcVg3WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoNykuYW55KFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoNykuYW55KFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDcpLmFueShQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYW55KFAuZXEobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oNykuQW55KFAuRXEoNykpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNykuQW55KGdyZW1saW5nby5QLkVxKDcpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCg3KS5hbnkoUC5lcSg3KSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDcpLmFueShQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNykuYW55KFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDcpLmFueV8oUC5lcSg3KSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxfbnVsbFhfYW55WGVxWG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbbnVsbCxudWxsXSkuYW55KFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5hbnkoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5hbnkoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5hbnkoUC5lcShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgbnVsbCB9KS5BbnkoUC5FcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e25pbCwgbmlsfSkuQW55KGdyZW1saW5nby5QLkVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkuYW55KFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobnVsbCk7IGFkZChudWxsKTsgfX0pLmFueShQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5hbnkoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoW05vbmUsIE5vbmVdKS5hbnlfKFAuZXEoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9hbnlYZXFYM1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFszLFwidGhyZWVcIl0pLmFueShQLmVxKDMpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5hbnkoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLmFueShQLmVxKDMpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmFueShQLmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuQW55KFAuRXEoMykpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCBcInRocmVlXCJ9KS5BbnkoZ3JlbWxpbmdvLlAuRXEoMykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5hbnkoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgzKTsgYWRkKFwidGhyZWVcIik7IH19KS5hbnkoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5hbnkoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzMsICd0aHJlZSddKS5hbnlfKFAuZXEoMykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY29pblgxXzBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNvaW4oMS4wKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNvaW4oMS4wKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jb2luKDEuMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNvaW4obnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ29pbigxLjApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ29pbigxLjApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNvaW4oMS4wKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY29pbigxLjApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jb2luKDEuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY29pbigxLjApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY29pblgxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jb2luKDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY29pbigxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jb2luKDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jb2luKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNvaW4oMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Db2luKDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNvaW4oMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNvaW4oMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNvaW4oMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY29pbigxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2NvaW5YMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY29pbigwLjApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY29pbigwLjApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNvaW4oMC4wKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY29pbihudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Db2luKDAuMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Db2luKDAuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY29pbigwLjApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jb2luKDAuMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNvaW4oMC4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jb2luKDAuMCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU2VlZFN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVYX2NvaW5YNTBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneShzZWVkOiA5OTk5OTkpKS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuY29pbigwLjUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTk5KSkuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmNvaW4oMC41KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDo5OTk5OTkpKS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuY29pbigwLjUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDpudW1iZXIwKSkuVigpLm9yZGVyKCkuYnkoc3RyaW5nMCkuY29pbihudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDogOTk5OTk5KSkuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkNvaW4oMC41KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlNlZWRTdHJhdGVneShncmVtbGluZ28uU2VlZFN0cmF0ZWd5Q29uZmlne1NlZWQ6IDk5OTk5OX0pKS5WKCkuT3JkZXIoKS5CeShcIm5hbWVcIikuQ29pbigwLjUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneShzZWVkOjk5OTk5OSkpLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5jb2luKDAuNSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5LmJ1aWxkKCkuc2VlZCg5OTk5OTkpLmNyZWF0ZSgpKS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuY29pbigwLjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDk5OTk5OX0pKS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuY29pbigwLjUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFNlZWRTdHJhdGVneShzZWVkPTk5OTk5OSkpLlYoKS5vcmRlcigpLmJ5KCduYW1lJykuY29pbigwLjUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2N5Y2xpY1BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmN5Y2xpY1BhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5jeWNsaWNQYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmN5Y2xpY1BhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dChzdHJpbmcwKS5pbihzdHJpbmcwKS5jeWNsaWNQYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLkN5Y2xpY1BhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5DeWNsaWNQYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmN5Y2xpY1BhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmN5Y2xpY1BhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS5jeWNsaWNQYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgnY3JlYXRlZCcpLmluXygnY3JlYXRlZCcpLmN5Y2xpY19wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9ib3RoX2JvdGhfY3ljbGljUGF0aF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5ib3RoKCkuYm90aCgpLmN5Y2xpY1BhdGgoKS5ieSgnYWdlJykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYm90aCgpLmJvdGgoKS5jeWNsaWNQYXRoKCkuYnkoJ2FnZScpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5ib3RoKCkuYm90aCgpLmN5Y2xpY1BhdGgoKS5ieSgnYWdlJykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5ib3RoKCkuYm90aCgpLmN5Y2xpY1BhdGgoKS5ieShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQm90aCgpLkJvdGgoKS5DeWNsaWNQYXRoKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQm90aCgpLkJvdGgoKS5DeWNsaWNQYXRoKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmJvdGgoKS5ib3RoKCkuY3ljbGljUGF0aCgpLmJ5KCdhZ2UnKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmJvdGgoKS5ib3RoKCkuY3ljbGljUGF0aCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYm90aCgpLmJvdGgoKS5jeWNsaWNQYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmJvdGgoKS5ib3RoKCkuY3ljbGljX3BhdGgoKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfY3ljbGljUGF0aF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5jeWNsaWNQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoc3RyaW5nMCkuaW4oc3RyaW5nMCkuY3ljbGljUGF0aCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuQ3ljbGljUGF0aCgpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5DeWNsaWNQYXRoKCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5jeWNsaWNQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuY3ljbGljUGF0aCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS5jeWNsaWNQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS5jeWNsaWNfcGF0aCgpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9pblhjcmVhdGVkWF9hc1hjWF9jeWNsaWNQYXRoX2Zyb21YYVhfdG9YYlhfcGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikuY3ljbGljUGF0aCgpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikuY3ljbGljUGF0aCgpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJjXCIpLmN5Y2xpY1BhdGgoKS5mcm9tKFwiYVwiKS50byhcImJcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLmluKHN0cmluZzEpLmFzKHN0cmluZzMpLmN5Y2xpY1BhdGgoKS5mcm9tKHN0cmluZzApLnRvKHN0cmluZzIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5BcyhcImNcIikuQ3ljbGljUGF0aCgpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5BcyhcImNcIikuQ3ljbGljUGF0aCgpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJjXCIpLmN5Y2xpY1BhdGgoKS5mcm9tKFwiYVwiKS50byhcImJcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikuY3ljbGljUGF0aCgpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5fKFwiY3JlYXRlZFwiKS5hcyhcImNcIikuY3ljbGljUGF0aCgpLmZyb21fKFwiYVwiKS50byhcImJcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKS5pbl8oJ2NyZWF0ZWQnKS5hc18oJ2MnKS5jeWNsaWNfcGF0aCgpLmZyb21fKCdhJykudG8oJ2InKS5wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDBYX1ZfYm90aF9jb2FsZXNjZVhoYXNYbmFtZV9tYXJrb1hfYm90aF9jb25zdGFudFgwWFhfY3ljbGljUGF0aF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDApLlYoKS5ib3RoKCkuY29hbGVzY2UoaGFzKCduYW1lJywnbWFya28nKS5ib3RoKCksY29uc3RhbnQoMCkpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcygnbmFtZScsICdtYXJrbycpLmJvdGgoKSwgX18uY29uc3RhbnQoMCkpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMCkuVigpLmJvdGgoKS5jb2FsZXNjZShfXy5oYXMoJ25hbWUnLCAnbWFya28nKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5jeWNsaWNQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5ib3RoKCksIF9fLmNvbnN0YW50KG51bWJlcjApKS5jeWNsaWNQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMCkuVigpLkJvdGgoKS5Db2FsZXNjZTxvYmplY3Q+KF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5Cb3RoKCksIF9fLkNvbnN0YW50PG9iamVjdD4oMCkpLkN5Y2xpY1BhdGgoKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgwKS5WKCkuQm90aCgpLkNvYWxlc2NlKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLkJvdGgoKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudCgwKSkuQ3ljbGljUGF0aCgpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcygnbmFtZScsICdtYXJrbycpLmJvdGgoKSwgX18uY29uc3RhbnQoMCkpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLlYoKS5ib3RoKCkuY29hbGVzY2UoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmJvdGgoKSwgX18uY29uc3RhbnQoMCkpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDApLlYoKS5ib3RoKCkuY29hbGVzY2UoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmJvdGgoKSwgX18uY29uc3RhbnQoMCkpLmN5Y2xpY1BhdGgoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMCkuVigpLmJvdGgoKS5jb2FsZXNjZShfXy5oYXMoJ25hbWUnLCAnbWFya28nKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5jeWNsaWNfcGF0aCgpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9pbl92YWx1ZXNYbmFtZVhfZm9sZF9kZWR1cFhsb2NhbFhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLmluKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkuaW4oKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkuaW4oKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLmluKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuSW4oKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLkRlZHVwKFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuSW4oKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5EZWR1cChncmVtbGluZ28uU2NvcGUuTG9jYWwpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLmluKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5pbigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkuaW5fKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLmluXygpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfaW5fdmFsdWVzWG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm1hcChfXy5pbigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5tYXAoX18uaW4oKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm1hcChfXy5pbigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm1hcChfXy5pbigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5NYXA8b2JqZWN0PihfXy5JbigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuRGVkdXAoU2NvcGUuTG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk1hcChncmVtbGluZ28uVF9fLkluKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkuRGVkdXAoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkubWFwKF9fLmluKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkubWFwKF9fLmluKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkubWFwKF9fLmluXygpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkubWFwKF9fLmluXygpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X2FzWHhYX2luX2FzWHlYX3NlbGVjdFh4X3lYX2J5WG5hbWVYX2ZvbGRfZGVkdXBYbG9jYWxfeF95WF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkuYXMoXCJ4XCIpLmluKCkuYXMoXCJ5XCIpLnNlbGVjdChcInhcIiwgXCJ5XCIpLmJ5KFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwsIFwieFwiLCBcInlcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5hcyhcInhcIikuaW4oKS5hcyhcInlcIikuc2VsZWN0KFwieFwiLCBcInlcIikuYnkoXCJuYW1lXCIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCwgXCJ4XCIsIFwieVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5hcyhcInhcIikuaW4oKS5hcyhcInlcIikuc2VsZWN0KFwieFwiLCBcInlcIikuYnkoXCJuYW1lXCIpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCwgXCJ4XCIsIFwieVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkuYXMoc3RyaW5nMCkuaW4oKS5hcyhzdHJpbmcxKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMSkuYnkoc3RyaW5nMikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsLCBzdHJpbmcwLCBzdHJpbmcxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5BcyhcInhcIikuSW4oKS5BcyhcInlcIikuU2VsZWN0PG9iamVjdD4oXCJ4XCIsIFwieVwiKS5CeShcIm5hbWVcIikuRm9sZCgpLkRlZHVwKFNjb3BlLkxvY2FsLCBcInhcIiwgXCJ5XCIpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5BcyhcInhcIikuSW4oKS5BcyhcInlcIikuU2VsZWN0KFwieFwiLCBcInlcIikuQnkoXCJuYW1lXCIpLkZvbGQoKS5EZWR1cChncmVtbGluZ28uU2NvcGUuTG9jYWwsIFwieFwiLCBcInlcIikuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkuYXMoXCJ4XCIpLmluKCkuYXMoXCJ5XCIpLnNlbGVjdChcInhcIiwgXCJ5XCIpLmJ5KFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwsIFwieFwiLCBcInlcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLmFzKFwieFwiKS5pbigpLmFzKFwieVwiKS5zZWxlY3QoXCJ4XCIsIFwieVwiKS5ieShcIm5hbWVcIikuZm9sZCgpLmRlZHVwKFNjb3BlLmxvY2FsLCBcInhcIiwgXCJ5XCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5hcyhcInhcIikuaW5fKCkuYXMoXCJ5XCIpLnNlbGVjdChcInhcIiwgXCJ5XCIpLmJ5KFwibmFtZVwiKS5mb2xkKCkuZGVkdXAoU2NvcGUubG9jYWwsIFwieFwiLCBcInlcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkuYXNfKCd4JykuaW5fKCkuYXNfKCd5Jykuc2VsZWN0KCd4JywgJ3knKS5ieSgnbmFtZScpLmZvbGQoKS5kZWR1cChTY29wZS5sb2NhbCwgJ3gnLCAneScpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9kZWR1cF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Cb3RoKCkuRGVkdXAoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuRGVkdXAoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLmRlZHVwKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ib3RoX2hhc1hsYWJlbF9zb2Z0d2FyZVhfZGVkdXBfYnlYbGFuZ1hfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikuZGVkdXAoKS5ieShcImxhbmdcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgXCJzb2Z0d2FyZVwiKS5kZWR1cCgpLmJ5KFwibGFuZ1wiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgXCJzb2Z0d2FyZVwiKS5kZWR1cCgpLmJ5KFwibGFuZ1wiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIHN0cmluZzApLmRlZHVwKCkuYnkoc3RyaW5nMSkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5IYXMoVC5MYWJlbCwgXCJzb2Z0d2FyZVwiKS5EZWR1cCgpLkJ5KFwibGFuZ1wiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuSGFzKGdyZW1saW5nby5ULkxhYmVsLCBcInNvZnR3YXJlXCIpLkRlZHVwKCkuQnkoXCJsYW5nXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLmhhcyhULmxhYmVsLCBcInNvZnR3YXJlXCIpLmRlZHVwKCkuYnkoXCJsYW5nXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgXCJzb2Z0d2FyZVwiKS5kZWR1cCgpLmJ5KFwibGFuZ1wiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikuZGVkdXAoKS5ieShcImxhbmdcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsICdzb2Z0d2FyZScpLmRlZHVwKCkuYnkoJ2xhbmcnKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JvdGhfYm90aF9uYW1lX2RlZHVwIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5ib3RoKCkudmFsdWVzKHN0cmluZzApLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkJvdGgoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJvdGgoKS5Cb3RoKCkuVmFsdWVzKFwibmFtZVwiKS5EZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLmJvdGgoKS52YWx1ZXMoJ25hbWUnKS5kZWR1cCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9ib3RoX2RlZHVwIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Cb3RoKCkuQm90aCgpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuQm90aCgpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ib3RoX2JvdGhfZGVkdXBfYnlYbGFiZWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Cb3RoKCkuQm90aCgpLkRlZHVwKCkuQnkoVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuQm90aCgpLkRlZHVwKCkuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KFQubGFiZWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX3dlaWdodF9kZWR1cF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmRlZHVwKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmRlZHVwKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5kZWR1cCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKHN0cmluZzApLmRlZHVwKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoVC5MYWJlbCkuQnkoX18uQm90aEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5EZWR1cCgpLk9yZGVyKCkuQnkoT3JkZXIuQXNjKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQnkoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLlZhbHVlcyhcIndlaWdodFwiKS5EZWR1cCgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkFzYykuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmRlZHVwKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZGVkdXAoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5kZWR1cCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aF9lKCkudmFsdWVzKCd3ZWlnaHQnKS5kZWR1cCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfYm90aF9hc1hiWF9kZWR1cFhhX2JYX2J5WGxhYmVsWF9zZWxlY3RYYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKS5kZWR1cChcImFcIiwgXCJiXCIpLmJ5KFQubGFiZWwpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS5ieShULmxhYmVsKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKS5kZWR1cChcImFcIiwgXCJiXCIpLmJ5KFQubGFiZWwpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5ib3RoKCkuYXMoc3RyaW5nMSkuZGVkdXAoc3RyaW5nMCwgc3RyaW5nMSkuYnkoVC5sYWJlbCkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLkRlZHVwKFwiYVwiLCBcImJcIikuQnkoVC5MYWJlbCkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLkRlZHVwKFwiYVwiLCBcImJcIikuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpLlNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoVC5sYWJlbCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoVC5sYWJlbCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoVC5sYWJlbCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykuYm90aCgpLmFzXygnYicpLmRlZHVwKCdhJywgJ2InKS5ieShULmxhYmVsKS5zZWxlY3QoJ2EnLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX2luX2FzWGNYX2RlZHVwWGFfYlhfcGF0aF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKS5hcyhcImJcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImNhcm9sXCIpLmFzKFwiY1wiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLmFkZEUoXCJsaWtlc1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2Fyb2xcIikuYXMoXCJjXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5hZGRFKFwibGlrZXNcIikuZnJvbShcImFcIikudG8oXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2Fyb2xcIikuYXMoXCJjXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5hZGRFKFwibGlrZXNcIikuZnJvbShcImFcIikudG8oXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYXMoc3RyaW5nMykuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5hcyhzdHJpbmc1KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLmFzKHN0cmluZzcpLmFkZEUoc3RyaW5nOCkuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5hZGRFKHN0cmluZzkpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nNSkuYWRkRShzdHJpbmc5KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzcpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiY2Fyb2xcIikuQXMoXCJjXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImxpa2VzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwibGlrZXNcIikuRnJvbShcImFcIikuVG8oXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJjYXJvbFwiKS5BcyhcImNcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5BZGRFKFwibGlrZXNcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLkFkZEUoXCJsaWtlc1wiKS5Gcm9tKFwiYVwiKS5UbyhcImNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjYXJvbFwiKS5hcyhcImNcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5hZGRFKFwibGlrZXNcIikuZnJvbShcImFcIikudG8oXCJiXCIpLmFkZEUoXCJsaWtlc1wiKS5mcm9tKFwiYVwiKS50byhcImNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2Fyb2xcIikuYXMoXCJjXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5hZGRFKFwibGlrZXNcIikuZnJvbShcImFcIikudG8oXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNhcm9sXCIpLmFzKFwiY1wiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5hZGRFKFwibGlrZXNcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5hZGRFKFwibGlrZXNcIikuZnJvbV8oXCJhXCIpLnRvKFwiY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5hc18oJ2InKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnY2Fyb2wnKS5hc18oJ2MnKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykuYWRkX2UoJ2xpa2VzJykuZnJvbV8oJ2EnKS50bygnYicpLmFkZF9lKCdsaWtlcycpLmZyb21fKCdhJykudG8oJ2MnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikuaW4oKS5hcyhcImNcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5kZWR1cChcImFcIiwgXCJiXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5kZWR1cChcImFcIiwgXCJiXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzEpLmluKCkuYXMoc3RyaW5nMikuZGVkdXAoc3RyaW5nMCwgc3RyaW5nMSkucGF0aCgpLmJ5KHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuSW4oKS5BcyhcImNcIikuRGVkdXAoXCJhXCIsIFwiYlwiKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5JbigpLkFzKFwiY1wiKS5EZWR1cChcImFcIiwgXCJiXCIpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5kZWR1cChcImFcIiwgXCJiXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikuaW4oKS5hcyhcImNcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLmluXygpLmFzKFwiY1wiKS5kZWR1cChcImFcIiwgXCJiXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdiJykuaW5fKCkuYXNfKCdjJykuZGVkdXAoJ2EnLCAnYicpLnBhdGgoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0RV9hc1hlWF9pblZfYXNYdlhfc2VsZWN0WGVYX29yZGVyX2J5WHdlaWdodF9hc2NYX3NlbGVjdFh2WF92YWx1ZXNYbmFtZVhfZGVkdXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RSgpLmFzKFwiZVwiKS5pblYoKS5hcyhcInZcIikuc2VsZWN0KFwiZVwiKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmFzYykuc2VsZWN0KFwidlwiKS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXRFKCkuYXMoXCJlXCIpLmluVigpLmFzKFwidlwiKS5zZWxlY3QoXCJlXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuYXNjKS5zZWxlY3QoXCJ2XCIpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXRFKCkuYXMoXCJlXCIpLmluVigpLmFzKFwidlwiKS5zZWxlY3QoXCJlXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuYXNjKS5zZWxlY3QoXCJ2XCIpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RSgpLmFzKHN0cmluZzApLmluVigpLmFzKHN0cmluZzEpLnNlbGVjdChzdHJpbmcwKS5vcmRlcigpLmJ5KHN0cmluZzIsIE9yZGVyLmFzYykuc2VsZWN0KHN0cmluZzEpLnZhbHVlcyhzdHJpbmczKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dEUoKS5BcyhcImVcIikuSW5WKCkuQXMoXCJ2XCIpLlNlbGVjdDxvYmplY3Q+KFwiZVwiKS5PcmRlcigpLkJ5KFwid2VpZ2h0XCIsIE9yZGVyLkFzYykuU2VsZWN0PG9iamVjdD4oXCJ2XCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5EZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0RSgpLkFzKFwiZVwiKS5JblYoKS5BcyhcInZcIikuU2VsZWN0KFwiZVwiKS5PcmRlcigpLkJ5KFwid2VpZ2h0XCIsIGdyZW1saW5nby5PcmRlci5Bc2MpLlNlbGVjdChcInZcIikuVmFsdWVzKFwibmFtZVwiKS5EZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS5hcyhcImVcIikuaW5WKCkuYXMoXCJ2XCIpLnNlbGVjdChcImVcIikub3JkZXIoKS5ieShcIndlaWdodFwiLCBPcmRlci5hc2MpLnNlbGVjdChcInZcIikudmFsdWVzKFwibmFtZVwiKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXRFKCkuYXMoXCJlXCIpLmluVigpLmFzKFwidlwiKS5zZWxlY3QoXCJlXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuYXNjKS5zZWxlY3QoXCJ2XCIpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0RSgpLmFzKFwiZVwiKS5pblYoKS5hcyhcInZcIikuc2VsZWN0KFwiZVwiKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmFzYykuc2VsZWN0KFwidlwiKS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS5hc18oJ2UnKS5pbl92KCkuYXNfKCd2Jykuc2VsZWN0KCdlJykub3JkZXIoKS5ieSgnd2VpZ2h0JywgT3JkZXIuYXNjKS5zZWxlY3QoJ3YnKS52YWx1ZXMoJ25hbWUnKS5kZWR1cCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9ib3RoX2RlZHVwX2J5WG91dEVfY291bnRYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkJvdGgoKS5EZWR1cCgpLkJ5KF9fLk91dEUoKS5Db3VudCgpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuQm90aCgpLkRlZHVwKCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXRFKCkuQ291bnQoKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmRlZHVwKCkuYnkoX18ub3V0RSgpLmNvdW50KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5kZWR1cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5ib3RoKCkuZGVkdXAoKS5ieShfXy5vdXRfZSgpLmNvdW50KCkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBDb3VudF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwQ291bnQoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ncm91cF9jb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX2VtaXRfbmFtZV9hc1hiWF9ncm91cF9ieVhzZWxlY3RYYVhYX2J5WHNlbGVjdFhiWF9kZWR1cF9vcmRlcl9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGVkdXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLmVtaXQoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYlwiKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcImFcIikpLmJ5KF9fLnNlbGVjdChcImJcIikuZGVkdXAoKS5vcmRlcigpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuZW1pdCgpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwiYVwiKSkuYnkoX18uc2VsZWN0KFwiYlwiKS5kZWR1cCgpLm9yZGVyKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuZW1pdCgpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwiYVwiKSkuYnkoX18uc2VsZWN0KFwiYlwiKS5kZWR1cCgpLm9yZGVyKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMobnVtYmVyMCkuZW1pdCgpLnZhbHVlcyhzdHJpbmcxKS5hcyhzdHJpbmcyKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChzdHJpbmcwKSkuYnkoX18uc2VsZWN0KHN0cmluZzIpLmRlZHVwKCkub3JkZXIoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5SZXBlYXQoX18uQm90aCgpKS5UaW1lcygzKS5FbWl0KCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwiYlwiKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwiYlwiKS5EZWR1cCgpLk9yZGVyKCkuRm9sZCgpKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aCgpKS5UaW1lcygzKS5FbWl0KCkuVmFsdWVzKFwibmFtZVwiKS5BcyhcImJcIikuR3JvdXAoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwiYlwiKS5EZWR1cCgpLk9yZGVyKCkuRm9sZCgpKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLmVtaXQoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYlwiKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcImFcIikpLmJ5KF9fLnNlbGVjdChcImJcIikuZGVkdXAoKS5vcmRlcigpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5lbWl0KCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImJcIikuZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJhXCIpKS5ieShfXy5zZWxlY3QoXCJiXCIpLmRlZHVwKCkub3JkZXIoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykuZW1pdCgpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwiYVwiKSkuYnkoX18uc2VsZWN0KFwiYlwiKS5kZWR1cCgpLm9yZGVyKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5lbWl0KCkudmFsdWVzKCduYW1lJykuYXNfKCdiJykuZ3JvdXAoKS5ieShfXy5zZWxlY3QoJ2EnKSkuYnkoX18uc2VsZWN0KCdiJykuZGVkdXAoKS5vcmRlcigpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRlZHVwKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYZGVkdXBYX3RpbWVzWDJYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygyKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcyhudW1iZXIwKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5EZWR1cCgpKS5UaW1lcygyKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uRGVkdXAoKSkuVGltZXMoMikuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uZGVkdXAoKSkudGltZXMoMikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmRlZHVwKCkpLnRpbWVzKDIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygyKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5kZWR1cCgpKS50aW1lcygyKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9ncm91cF9ieV9ieVhvdXRfZGVkdXBfZm9sZFhfdW5mb2xkX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vdXRfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkuZGVkdXAoKS5mb2xkKCkpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5kZWR1cCgpLmZvbGQoKSkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5kZWR1cCgpLmZvbGQoKSkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkuZGVkdXAoKS5mb2xkKCkpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjApLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Cb3RoKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoKS5CeShfXy5PdXQoKS5EZWR1cCgpLkZvbGQoKSkuVW5mb2xkPG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLk91dCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0PG9iamVjdD4oMSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLkdyb3VwKCkuQnkoKS5CeShncmVtbGluZ28uVF9fLk91dCgpLkRlZHVwKCkuRm9sZCgpKS5VbmZvbGQoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLk91dCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0KDEpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5kZWR1cCgpLmZvbGQoKSkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkuZGVkdXAoKS5mb2xkKCkpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmRlZHVwKCkuZm9sZCgpKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmRlZHVwKCkuZm9sZCgpKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aEUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5EZWR1cCgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoRSgpLlByb3BlcnRpZXMoKS5EZWR1cCgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoX2UoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5EZWR1cCgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuUHJvcGVydGllcygpLkRlZHVwKCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNfZGVkdXBfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5EZWR1cCgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuUHJvcGVydGllcygpLlByb3BlcnRpZXMoKS5EZWR1cCgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vcmRlcl9ieVhuYW1lX2Rlc2NYX2JhcnJpZXJfZGVkdXBfYWdlX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIixkZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIiwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vcmRlcigpLmJ5KHN0cmluZzAsIE9yZGVyLmRlc2MpLmJhcnJpZXIoKS5kZWR1cCgpLmJ5KHN0cmluZzEpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBPcmRlci5EZXNjKS5CYXJyaWVyKCkuRGVkdXAoKS5CeShcImFnZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBncmVtbGluZ28uT3JkZXIuRGVzYykuQmFycmllcigpLkRlZHVwKCkuQnkoXCJhZ2VcIikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yZGVyKCkuYnkoJ25hbWUnLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieSgnYWdlJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1Zfb3JkZXJfYnlYbmFtZV9kZXNjWF9iYXJyaWVyX2RlZHVwX2FnZV9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLGRlc2MpLmJhcnJpZXIoKS5kZWR1cCgpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIiwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIiwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoc3RyaW5nMCwgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoc3RyaW5nMSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBPcmRlci5EZXNjKS5CYXJyaWVyKCkuRGVkdXAoKS5CeShcImFnZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuT3JkZXIoKS5CeShcIm5hbWVcIiwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkJhcnJpZXIoKS5EZWR1cCgpLkJ5KFwiYWdlXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLmJhcnJpZXIoKS5kZWR1cCgpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmRlc2MpLmJhcnJpZXIoKS5kZWR1cCgpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5kZXNjKS5iYXJyaWVyKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5vcmRlcigpLmJ5KCduYW1lJywgT3JkZXIuZGVzYykuYmFycmllcigpLmRlZHVwKCkuYnkoJ2FnZScpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9kZWR1cF9hZ2VfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmRlZHVwKCkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieShzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkRlZHVwKCkuQnkoXCJhZ2VcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLkRlZHVwKCkuQnkoXCJhZ2VcIikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLmJ5KCdhZ2UnKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2FzWGFYX2JvdGhfYXNYYlhfYm90aF9hc1hjWF9kZWR1cFhhX2JYX2FnZV9zZWxlY3RYYV9iX2NYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikuZGVkdXAoXCJhXCIsXCJiXCIpLmJ5KFwiYWdlXCIpLnNlbGVjdChcImFcIixcImJcIixcImNcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS5ieShcImFnZVwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKS5ib3RoKCkuYXMoXCJjXCIpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoXCJhZ2VcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLmJvdGgoKS5hcyhzdHJpbmcxKS5ib3RoKCkuYXMoc3RyaW5nMikuZGVkdXAoc3RyaW5nMCwgc3RyaW5nMSkuYnkoc3RyaW5nMykuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmJ5KHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5BcyhcImFcIikuQm90aCgpLkFzKFwiYlwiKS5Cb3RoKCkuQXMoXCJjXCIpLkRlZHVwKFwiYVwiLCBcImJcIikuQnkoXCJhZ2VcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLkJvdGgoKS5BcyhcImNcIikuRGVkdXAoXCJhXCIsIFwiYlwiKS5CeShcImFnZVwiKS5TZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKS5ib3RoKCkuYXMoXCJjXCIpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoXCJhZ2VcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS5ieShcImFnZVwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIikuYm90aCgpLmFzKFwiY1wiKS5kZWR1cChcImFcIiwgXCJiXCIpLmJ5KFwiYWdlXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmFzXygnYScpLmJvdGgoKS5hc18oJ2InKS5ib3RoKCkuYXNfKCdjJykuZGVkdXAoJ2EnLCAnYicpLmJ5KCdhZ2UnKS5zZWxlY3QoJ2EnLCAnYicsICdjJykuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlc1hhZ2VYX2RlZHVwWGxvY2FsWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnZhbHVlcyhzdHJpbmcwKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkRlZHVwKFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlZhbHVlcyhcImFnZVwiKS5EZWR1cChncmVtbGluZ28uU2NvcGUuTG9jYWwpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5kZWR1cChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnZhbHVlcygnYWdlJykuZGVkdXAoU2NvcGUubG9jYWwpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19kZWR1cF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnam9zaCcpLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnam9zaCcpLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywnam9zaCcpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoc3RyaW5nMCkuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuRGVkdXAoKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcyhcIm5hbWVcIikuRGVkdXAoKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmRlZHVwKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuZGVkdXAoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5kZWR1cCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygnbmFtZScpLmRlZHVwKCkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb3BlcnRpZXNfZGVkdXBfYnlYdmFsdWVYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdqb3NoJykuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdqb3NoJykuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCdqb3NoJykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkVigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLmFkZFYoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuZGVkdXAoKS5ieSh2YWx1ZSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmRlZHVwKCkuYnkoVC52YWx1ZSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5kZWR1cCgpLmJ5KFQudmFsdWUpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoc3RyaW5nMCkuZGVkdXAoKS5ieShULnZhbHVlKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuRGVkdXAoKS5CeShULlZhbHVlKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcyhcIm5hbWVcIikuRGVkdXAoKS5CeShncmVtbGluZ28uVC5WYWx1ZSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5kZWR1cCgpLmJ5KFQudmFsdWUpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmRlZHVwKCkuYnkoVC52YWx1ZSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuZGVkdXAoKS5ieShULnZhbHVlKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoJ25hbWUnKS5kZWR1cCgpLmJ5KFQudmFsdWUpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ib3RoX2hhc1hsYWJlbF9zb2Z0d2FyZVhfZGVkdXBfYnlYbGFuZ1hfYnlYbmFtZVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikuZGVkdXAoKS5ieShcImxhbmdcIikuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikuZGVkdXAoKS5ieShcImxhbmdcIikuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLmhhcyhULmxhYmVsLCBcInNvZnR3YXJlXCIpLmRlZHVwKCkuYnkoXCJsYW5nXCIpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIHN0cmluZzApLmRlZHVwKCkuYnkoc3RyaW5nMSkuYnkoc3RyaW5nMikudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5IYXMoVC5MYWJlbCwgXCJzb2Z0d2FyZVwiKS5EZWR1cCgpLkJ5KFwibGFuZ1wiKS5CeShcIm5hbWVcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLkhhcyhncmVtbGluZ28uVC5MYWJlbCwgXCJzb2Z0d2FyZVwiKS5EZWR1cCgpLkJ5KFwibGFuZ1wiKS5CeShcIm5hbWVcIikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkuaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikuZGVkdXAoKS5ieShcImxhbmdcIikuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgXCJzb2Z0d2FyZVwiKS5kZWR1cCgpLmJ5KFwibGFuZ1wiKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLmhhcyhULmxhYmVsLCBcInNvZnR3YXJlXCIpLmRlZHVwKCkuYnkoXCJsYW5nXCIpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5oYXMoVC5sYWJlbCwgJ3NvZnR3YXJlJykuZGVkdXAoKS5ieSgnbGFuZycpLmJ5KCduYW1lJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jb3VudF9kaXNjYXJkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNvdW50KCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY291bnQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY291bnQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNvdW50KCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNvdW50KCkuRGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ291bnQoKS5EaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY291bnQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNvdW50KCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jb3VudCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jb3VudCgpLmRpc2NhcmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfZGlzY2FyZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuRGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuRGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5kaXNjYXJkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRYY3JlYXRlZFhfZGlzY2FyZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHN0cmluZzApLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5EaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5EaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCdjcmVhdGVkJykuZGlzY2FyZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZGlzY2FyZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZGlzY2FyZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZGlzY2FyZF9kaXNjYXJkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmRpc2NhcmQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5kaXNjYXJkKCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmRpc2NhcmQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmRpc2NhcmQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRGlzY2FyZCgpLkRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkRpc2NhcmQoKS5EaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZGlzY2FyZCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZGlzY2FyZCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZGlzY2FyZCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5kaXNjYXJkKCkuZGlzY2FyZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZGlzY2FyZF9mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRGlzY2FyZCgpLkZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkRpc2NhcmQoKS5Gb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZGlzY2FyZCgpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZGlzY2FyZCgpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZGlzY2FyZCgpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZGlzY2FyZF9mb2xkX2Rpc2NhcmQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZGlzY2FyZCgpLmZvbGQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZGlzY2FyZCgpLmZvbGQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRGlzY2FyZCgpLkZvbGQoKS5EaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5EaXNjYXJkKCkuRm9sZCgpLkRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmRpc2NhcmQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZGlzY2FyZCgpLmZvbGQoKS5kaXNjYXJkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkuZGlzY2FyZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkuZGlzY2FyZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZGlzY2FyZF9mb2xkX2NvbnN0YW50WDFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkuY29uc3RhbnQoMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkuY29uc3RhbnQoMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkuY29uc3RhbnQobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRGlzY2FyZCgpLkZvbGQoKS5Db25zdGFudDxvYmplY3Q+KDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRGlzY2FyZCgpLkZvbGQoKS5Db25zdGFudCgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5kaXNjYXJkKCkuZm9sZCgpLmNvbnN0YW50KDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmRpc2NhcmQoKS5mb2xkKCkuY29uc3RhbnQoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9qZWN0WHhYX2J5WGNvYWxlc2NlWGFnZV9pc1hndFgyOVhYX2Rpc2NhcmRYWF9zZWxlY3RYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvamVjdChcInhcIikuYnkoX18uY29hbGVzY2UoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMjkpKSwgX18uZGlzY2FyZCgpKSkuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb2plY3QoXCJ4XCIpLmJ5KF9fLmNvYWxlc2NlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSksIF9fLmRpc2NhcmQoKSkpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvamVjdChcInhcIikuYnkoX18uY29hbGVzY2UoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMjkpKSwgX18uZGlzY2FyZCgpKSkuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvamVjdChzdHJpbmcwKS5ieShfXy5jb2FsZXNjZShfXy52YWx1ZXMoc3RyaW5nMSkuaXMoUC5ndChudW1iZXIwKSksIF9fLmRpc2NhcmQoKSkpLnNlbGVjdChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9qZWN0PG9iamVjdD4oXCJ4XCIpLkJ5KF9fLkNvYWxlc2NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5HdCgyOSkpLCBfXy5EaXNjYXJkKCkpKS5TZWxlY3Q8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9qZWN0KFwieFwiKS5CeShncmVtbGluZ28uVF9fLkNvYWxlc2NlKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLkd0KDI5KSksIGdyZW1saW5nby5UX18uRGlzY2FyZCgpKSkuU2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9qZWN0KFwieFwiKS5ieShfXy5jb2FsZXNjZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLCBfXy5kaXNjYXJkKCkpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9qZWN0KFwieFwiKS5ieShfXy5jb2FsZXNjZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLCBfXy5kaXNjYXJkKCkpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9qZWN0KFwieFwiKS5ieShfXy5jb2FsZXNjZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpLCBfXy5kaXNjYXJkKCkpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb2plY3QoJ3gnKS5ieShfXy5jb2FsZXNjZShfXy52YWx1ZXMoJ2FnZScpLmlzXyhQLmd0KDI5KSksIF9fLmRpc2NhcmQoKSkpLnNlbGVjdCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZHJvcCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKCkuYXMoXCJhXCIpLmFkZFYoKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoKS5hcyhzdHJpbmcwKS5hZGRWKCkuYXMoc3RyaW5nMSkuYWRkRShzdHJpbmcyKS50byhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKS5BcyhcImFcIikuQWRkVigpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuVG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuQXMoXCJhXCIpLkFkZFYoKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLlRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5hc18oJ2EnKS5hZGRfdigpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLnRvKCdhJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZHJvcCgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0RV9kcm9wIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLmFzKFwiYVwiKS5hZGRWKCkuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS50byhcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoKS5hcyhcImFcIikuYWRkVigpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVigpLmFzKFwiYVwiKS5hZGRWKCkuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS50byhcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLmFzKHN0cmluZzApLmFkZFYoKS5hcyhzdHJpbmcxKS5hZGRFKHN0cmluZzIpLnRvKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLkFzKFwiYVwiKS5BZGRWKCkuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5UbyhcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5BcyhcImFcIikuQWRkVigpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuVG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigpLmFzKFwiYVwiKS5hZGRWKCkuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS50byhcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLmFzKFwiYVwiKS5hZGRWKCkuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS50byhcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLmFzKFwiYVwiKS5hZGRWKCkuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS50byhcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLmFzXygnYScpLmFkZF92KCkuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykudG8oJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dEUoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXRFKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dEUoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dEUoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0RSgpLkRyb3AoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5Ecm9wKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0RSgpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0RSgpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0RSgpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXRfZSgpLmRyb3AoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb3BlcnRpZXNfZHJvcCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKCkucHJvcGVydHkoc3RyaW5nMCwgc3RyaW5nMSkuYWRkVigpLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BZGRWKCkuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQWRkVigpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFkZF92KCkucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnByb3BlcnRpZXMoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuRHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcygpLkRyb3AoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5kcm9wKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRV9wcm9wZXJ0aWVzWHdlaWdodFhfZHJvcCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkucHJvcGVydGllcyhzdHJpbmcwKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuUHJvcGVydGllczxvYmplY3Q+KFwid2VpZ2h0XCIpLkRyb3AoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuRHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygnd2VpZ2h0JykuZHJvcCgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuUHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19wcm9wZXJ0aWVzWHN0YXJ0VGltZVhfZHJvcCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwibnlcIiwgXCJzdGFydFRpbWVcIiwgMjAxNCwgXCJlbmRUaW1lXCIsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwidmFcIiwgXCJzdGFydFRpbWVcIiwgMjAxNCwgXCJlbmRUaW1lXCIsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJueVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwibnlcIiwgXCJzdGFydFRpbWVcIiwgMjAxNCwgXCJlbmRUaW1lXCIsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcInZhXCIsIFwic3RhcnRUaW1lXCIsIDIwMTQsIFwiZW5kVGltZVwiLCAyMDE2KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwibnlcIiwgXCJzdGFydFRpbWVcIiwgMjAxNikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJueVwiLCBcInN0YXJ0VGltZVwiLCAyMDE0LCBcImVuZFRpbWVcIiwgMjAxNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcInZhXCIsIFwic3RhcnRUaW1lXCIsIDIwMTYpLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwidmFcIiwgXCJzdGFydFRpbWVcIiwgMjAxNCwgXCJlbmRUaW1lXCIsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJueVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKCkucHJvcGVydHkoc3RyaW5nMCwgc3RyaW5nMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgbnVtYmVyMCwgc3RyaW5nNSwgbnVtYmVyMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgc3RyaW5nMiwgc3RyaW5nNiwgc3RyaW5nNCwgbnVtYmVyMSkuYWRkVigpLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzcpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzIsIHN0cmluZzYsIHN0cmluZzQsIG51bWJlcjAsIHN0cmluZzUsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImxvY2F0aW9uXCIsIFwibnlcIiwgXCJzdGFydFRpbWVcIiwgMjAxNCwgXCJlbmRUaW1lXCIsIDIwMTYpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KS5BZGRWKCkuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJsb2NhdGlvblwiLCBcInZhXCIsIFwic3RhcnRUaW1lXCIsIDIwMTQsIFwiZW5kVGltZVwiLCAyMDE2KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImxvY2F0aW9uXCIsIFwibnlcIiwgXCJzdGFydFRpbWVcIiwgMjAxNikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwibG9jYXRpb25cIiwgXCJueVwiLCBcInN0YXJ0VGltZVwiLCAyMDE0LCBcImVuZFRpbWVcIiwgMjAxNikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KS5BZGRWKCkuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE0LCBcImVuZFRpbWVcIiwgMjAxNikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwibG9jYXRpb25cIiwgXCJueVwiLCBcInN0YXJ0VGltZVwiLCAyMDE2KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcIm55XCIsIFwic3RhcnRUaW1lXCIsIDIwMTQsIFwiZW5kVGltZVwiLCAyMDE2KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwidmFcIiwgXCJzdGFydFRpbWVcIiwgMjAxNikuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE0LCBcImVuZFRpbWVcIiwgMjAxNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcIm55XCIsIFwic3RhcnRUaW1lXCIsIDIwMTYpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcIm55XCIsIFwic3RhcnRUaW1lXCIsIDIwMTQsIFwiZW5kVGltZVwiLCAyMDE2KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwidmFcIiwgXCJzdGFydFRpbWVcIiwgMjAxNikuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE0LCBcImVuZFRpbWVcIiwgMjAxNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcIm55XCIsIFwic3RhcnRUaW1lXCIsIDIwMTYpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcIm55XCIsIFwic3RhcnRUaW1lXCIsIDIwMTQsIFwiZW5kVGltZVwiLCAyMDE2KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImxvY2F0aW9uXCIsIFwidmFcIiwgXCJzdGFydFRpbWVcIiwgMjAxNikuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibG9jYXRpb25cIiwgXCJ2YVwiLCBcInN0YXJ0VGltZVwiLCAyMDE0LCBcImVuZFRpbWVcIiwgMjAxNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJsb2NhdGlvblwiLCBcIm55XCIsIFwic3RhcnRUaW1lXCIsIDIwMTYpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0XywgJ2xvY2F0aW9uJywgJ255JywgJ3N0YXJ0VGltZScsIDIwMTQsICdlbmRUaW1lJywgMjAxNikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdsb2NhdGlvbicsICd2YScsICdzdGFydFRpbWUnLCAyMDE2KS5hZGRfdigpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdsb2NhdGlvbicsICd2YScsICdzdGFydFRpbWUnLCAyMDE0LCAnZW5kVGltZScsIDIwMTYpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3RfLCAnbG9jYXRpb24nLCAnbnknLCAnc3RhcnRUaW1lJywgMjAxNikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhcInN0YXJ0VGltZVwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhcInN0YXJ0VGltZVwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoXCJzdGFydFRpbWVcIikuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhzdHJpbmcwKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuUHJvcGVydGllczxvYmplY3Q+KFwic3RhcnRUaW1lXCIpLkRyb3AoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5Qcm9wZXJ0aWVzKFwic3RhcnRUaW1lXCIpLkRyb3AoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhcInN0YXJ0VGltZVwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKFwic3RhcnRUaW1lXCIpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoXCJzdGFydFRpbWVcIikuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCdzdGFydFRpbWUnKS5kcm9wKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLlByb3BlcnRpZXM8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcygpLlByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhcInN0YXJ0VGltZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKFwic3RhcnRUaW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKFwic3RhcnRUaW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5Qcm9wZXJ0aWVzPG9iamVjdD4oXCJzdGFydFRpbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKCkuUHJvcGVydGllcyhcInN0YXJ0VGltZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcyhcInN0YXJ0VGltZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLnByb3BlcnRpZXMoXCJzdGFydFRpbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKFwic3RhcnRUaW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCdzdGFydFRpbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZpbHRlclhpc1gwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZmlsdGVyKF9fLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZpbHRlcihfXy5pcygwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZmlsdGVyKF9fLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZmlsdGVyKF9fLmlzKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5GaWx0ZXIoX18uSXMoMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRmlsdGVyKGdyZW1saW5nby5UX18uSXMoMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZpbHRlcihfXy5pcygwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZpbHRlcihfXy5pcygwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZpbHRlcihfXy5pcygwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZmlsdGVyXyhfXy5pc18oMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZmlsdGVyWGNvbnN0YW50WDBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZmlsdGVyKF9fLmNvbnN0YW50KDApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZpbHRlcihfXy5Db25zdGFudDxvYmplY3Q+KDApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZpbHRlcihncmVtbGluZ28uVF9fLkNvbnN0YW50KDApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZpbHRlcl8oX18uY29uc3RhbnQoMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZmlsdGVyWGhhc1hsYW5nX2phdmFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5maWx0ZXIoX18uaGFzKFwibGFuZ1wiLFwiamF2YVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5maWx0ZXIoX18uaGFzKFwibGFuZ1wiLCBcImphdmFcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZpbHRlcihfXy5oYXMoXCJsYW5nXCIsIFwiamF2YVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZpbHRlcihfXy5oYXMoc3RyaW5nMCwgc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZpbHRlcihfXy5IYXMoXCJsYW5nXCIsIFwiamF2YVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5IYXMoXCJsYW5nXCIsIFwiamF2YVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcImxhbmdcIiwgXCJqYXZhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcImxhbmdcIiwgXCJqYXZhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcImxhbmdcIiwgXCJqYXZhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5maWx0ZXJfKF9fLmhhcygnbGFuZycsICdqYXZhJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfZmlsdGVyWGhhc1hhZ2VfZ3RYMzBYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmZpbHRlcihfXy5oYXMoXCJhZ2VcIixQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmZpbHRlcihfXy5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuZmlsdGVyKF9fLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkZpbHRlcihfXy5IYXMoXCJhZ2VcIiwgUC5HdCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuR3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmZpbHRlcihfXy5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmZpbHRlcihfXy5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmZpbHRlcihfXy5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuZmlsdGVyXyhfXy5oYXMoJ2FnZScsIFAuZ3QoMzApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgyWF9maWx0ZXJYaGFzWGFnZV9ndFgzMFhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikuZmlsdGVyKF9fLmhhcyhcImFnZVwiLFAuZ3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQyKS5maWx0ZXIoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5maWx0ZXIoX18uaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMikuRmlsdGVyKF9fLkhhcyhcImFnZVwiLCBQLkd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkZpbHRlcihncmVtbGluZ28uVF9fLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMikuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQyKS5maWx0ZXJfKF9fLmhhcygnYWdlJywgUC5ndCgzMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dF9maWx0ZXJYaGFzWGFnZV9ndFgzMFhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkuZmlsdGVyKF9fLmhhcyhcImFnZVwiLFAuZ3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5maWx0ZXIoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5maWx0ZXIoX18uaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkuRmlsdGVyKF9fLkhhcyhcImFnZVwiLCBQLkd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLkZpbHRlcihncmVtbGluZ28uVF9fLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KCkuZmlsdGVyKF9fLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5maWx0ZXJfKF9fLmhhcygnYWdlJywgUC5ndCgzMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZpbHRlclhoYXNYbmFtZV9zdGFydGluZ1dpdGhYbV9vcl9wWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIiwgVGV4dFAuc3RhcnRpbmdXaXRoKFwibVwiKS5vcihUZXh0UC5zdGFydGluZ1dpdGgoXCJwXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIiwgVGV4dFAuc3RhcnRpbmdXaXRoKFwibVwiKS5vcihUZXh0UC5zdGFydGluZ1dpdGgoXCJwXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZpbHRlcihfXy5oYXMoXCJuYW1lXCIsIFRleHRQLnN0YXJ0aW5nV2l0aChcIm1cIikub3IoVGV4dFAuc3RhcnRpbmdXaXRoKFwicFwiKSkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhzdHJpbmcwLCBUZXh0UC5zdGFydGluZ1dpdGgoc3RyaW5nMSkub3IoVGV4dFAuc3RhcnRpbmdXaXRoKHN0cmluZzIpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZpbHRlcihfXy5IYXMoXCJuYW1lXCIsIFRleHRQLlN0YXJ0aW5nV2l0aChcIm1cIikuT3IoVGV4dFAuU3RhcnRpbmdXaXRoKFwicFwiKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZpbHRlcihncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLlN0YXJ0aW5nV2l0aChcIm1cIikuT3IoZ3JlbWxpbmdvLlRleHRQLlN0YXJ0aW5nV2l0aChcInBcIikpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIiwgVGV4dFAuc3RhcnRpbmdXaXRoKFwibVwiKS5vcihUZXh0UC5zdGFydGluZ1dpdGgoXCJwXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5maWx0ZXIoX18uaGFzKFwibmFtZVwiLCBUZXh0UC5zdGFydGluZ1dpdGgoXCJtXCIpLm9yKFRleHRQLnN0YXJ0aW5nV2l0aChcInBcIikpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZpbHRlcihfXy5oYXMoXCJuYW1lXCIsIFRleHRQLnN0YXJ0aW5nV2l0aChcIm1cIikub3IoVGV4dFAuc3RhcnRpbmdXaXRoKFwicFwiKSkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5maWx0ZXJfKF9fLmhhcygnbmFtZScsIFRleHRQLnN0YXJ0aW5nX3dpdGgoJ20nKS5vcl8oVGV4dFAuc3RhcnRpbmdfd2l0aCgncCcpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VfZmlsdGVyWGlzWDBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5maWx0ZXIoX18uaXMoMCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuZmlsdGVyKF9fLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5maWx0ZXIoX18uaXMoMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5maWx0ZXIoX18uaXMobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkZpbHRlcihfXy5JcygwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5JcygwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuZmlsdGVyKF9fLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuZmlsdGVyKF9fLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuZmlsdGVyKF9fLmlzKDApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5maWx0ZXJfKF9fLmlzXygwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRV9maWx0ZXJYY29uc3RhbnRYMFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmZpbHRlcihfXy5jb25zdGFudCgwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5maWx0ZXIoX18uY29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmZpbHRlcihfXy5jb25zdGFudCgwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmZpbHRlcihfXy5jb25zdGFudChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuRmlsdGVyKF9fLkNvbnN0YW50PG9iamVjdD4oMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuRmlsdGVyKGdyZW1saW5nby5UX18uQ29uc3RhbnQoMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmZpbHRlcihfXy5jb25zdGFudCgwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmZpbHRlcihfXy5jb25zdGFudCgwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmZpbHRlcihfXy5jb25zdGFudCgwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuZmlsdGVyXyhfXy5jb25zdGFudCgwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9oYXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmhhcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmhhcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSGFzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5IYXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmhhcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmhhcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfaGFzWGNpcmN1bWZlcmVuY2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5oYXMoXCJjaXJjdW1mZXJlbmNlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmhhcyhcImNpcmN1bWZlcmVuY2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmhhcyhcImNpcmN1bWZlcmVuY2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5oYXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkhhcyhcImNpcmN1bWZlcmVuY2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuSGFzKFwiY2lyY3VtZmVyZW5jZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaGFzKFwiY2lyY3VtZmVyZW5jZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmhhcyhcImNpcmN1bWZlcmVuY2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5oYXMoXCJjaXJjdW1mZXJlbmNlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5oYXMoJ2NpcmN1bWZlcmVuY2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2hhc1huYW1lX21hcmtvWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmhhcygnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfaGFzWG5hbWVfbWFya292YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5oYXMoc3RyaW5nMCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSGFzKFwibmFtZVwiLCAob2JqZWN0KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkhhcyhcIm5hbWVcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5oYXMoJ25hbWUnLCB4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMlhfaGFzWG5hbWVfbWFya29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuaGFzKCduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9tYXJrb1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfYmxhaFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmxhaFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmxhaFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmxhaFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnYmxhaCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZV9ndF8zMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiLCBQLkd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgUC5ndCgzMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfaGFzWGFnZV9ndF8zMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSGFzKFwiYWdlXCIsIFAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5oYXMoJ2FnZScsIFAuZ3QoMzApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hwZXJzb252YXJfYWdlX2d0XzMwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoeHgxLCBcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoeHgxLCBcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKHh4MSwgXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoeHgxLCBzdHJpbmcwLCBQLmd0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoKHN0cmluZykgeHgxLCBcImFnZVwiLCBQLkd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoeHgxLCBcImFnZVwiLCBncmVtbGluZ28uUC5HdCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyh4eDEsIFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKHh4MSwgXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoeHgxLCBcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKHh4MSwgJ2FnZScsIFAuZ3QoMzApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDRYX2hhc1hhZ2VfZ3RfMzBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLkhhcyhcImFnZVwiLCBQLkd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLkd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuaGFzKCdhZ2UnLCBQLmd0KDMwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlh2MVhfaGFzWGFnZV9ndF8zMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSGFzKFwiYWdlXCIsIFAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5oYXMoJ2FnZScsIFAuZ3QoMzApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWHY0WF9oYXNYYWdlX2d0XzMwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5IYXMoXCJhZ2VcIiwgUC5HdCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmhhcygnYWdlJywgUC5ndCgzMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X2hhc1hpZF8yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQyKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikuaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5IYXMoXCJhZ2VcIiwgUC5HdCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5oYXMoXCJhZ2VcIiwgUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikuaGFzKFwiYWdlXCIsIFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDIpLmhhcyhcImFnZVwiLCBQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLmhhcygnYWdlJywgUC5ndCgzMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGJsYWhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwiYmxhaFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYmxhaCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9hZ2UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnZhbHVlcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnZhbHVlcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnZhbHVlcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuVmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnZhbHVlcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfbWFya292YXJYX2FnZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIHh4MSkudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCB4eDEpLnZhbHVlcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIHh4MSkudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgeHgxKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCAob2JqZWN0KSB4eDEpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCB4eDEpLlZhbHVlcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIHh4MSkudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIHh4MSkudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIHh4MSkudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCB4eDEpLnZhbHVlcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29udmFyX25hbWVfbWFya29YX2FnZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoeHgxLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoeHgxLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKHh4MSwgXCJuYW1lXCIsIFwibWFya29cIikudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoeHgxLCBzdHJpbmcwLCBzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKChzdHJpbmcpIHh4MSwgXCJuYW1lXCIsIFwibWFya29cIikuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoeHgxLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5WYWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKHh4MSwgXCJuYW1lXCIsIFwibWFya29cIikudmFsdWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoeHgxLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyh4eDEsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnZhbHVlcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoeHgxLCAnbmFtZScsICdtYXJrbycpLnZhbHVlcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRFX2hhc1h3ZWlnaHRfaW5zaWRlXzBfMDZYX2luViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RSgpLmhhcyhcIndlaWdodFwiLCBQLmluc2lkZSgwLjAsIDAuNikpLmluVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5pbnNpZGUoMC4wLCAwLjYpKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RSgpLmhhcyhcIndlaWdodFwiLCBQLmluc2lkZSgwLjAsIDAuNikpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RSgpLmhhcyhzdHJpbmcwLCBQLmluc2lkZShudW1iZXIwLCBudW1iZXIxKSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoKS5IYXMoXCJ3ZWlnaHRcIiwgUC5JbnNpZGUoMC4wLCAwLjYpKS5JblYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKCkuSGFzKFwid2VpZ2h0XCIsIGdyZW1saW5nby5QLkluc2lkZSgwLjAsIDAuNikpLkluVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIFAuaW5zaWRlKDAuMCwgMC42KSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIFAuaW5zaWRlKDAuMCwgMC42KSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIFAuaW5zaWRlKDAuMCwgMC42KSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCkuaGFzKCd3ZWlnaHQnLCBQLmluc2lkZSgwLjAsIDAuNikpLmluX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FWDExWF9vdXRWX291dEVfaGFzWGlkXzEwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRShlaWQxMSkub3V0VigpLm91dEUoKS5oYXMoVC5pZCwgZWlkMTApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShlaWQxMSkub3V0VigpLm91dEUoKS5oYXMoVC5pZCwgZWlkMTApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoZWlkMTEpLk91dFYoKS5PdXRFKCkuSGFzKFQuSWQsIChvYmplY3QpIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRShlaWQxMSkuT3V0VigpLk91dEUoKS5IYXMoZ3JlbWxpbmdvLlQuSWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDExKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlaWQxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRShlaWQxMSkub3V0VigpLm91dEUoKS5oYXMoVC5pZCwgZWlkMTApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRShlaWQxMSkub3V0X3YoKS5vdXRfZSgpLmhhcyhULmlkXywgZWlkMTApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYMTFYX291dFZfb3V0RV9oYXNYaWRfMTBBc1N0cmluZ1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKGVpZDExKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlaWQxMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKGVpZDExKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlaWQxMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKGVpZDExKS5PdXRWKCkuT3V0RSgpLkhhcyhULklkLCAob2JqZWN0KSBlaWQxMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoZWlkMTEpLk91dFYoKS5PdXRFKCkuSGFzKGdyZW1saW5nby5ULklkLCBlaWQxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDExKS5vdXRWKCkub3V0RSgpLmhhcyhULmlkLCBlaWQxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRShlaWQxMSkub3V0VigpLm91dEUoKS5oYXMoVC5pZCwgZWlkMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoZWlkMTEpLm91dFYoKS5vdXRFKCkuaGFzKFQuaWQsIGVpZDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkMTEpLm91dF92KCkub3V0X2UoKS5oYXMoVC5pZF8sIGVpZDEwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hsb2NhdGlvblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJsb2NhdGlvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJsb2NhdGlvblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJsb2NhdGlvblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2xvY2F0aW9uJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYYWdlX3dpdGhpblgyN1hfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiLCBQLndpdGhpbigyNykpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAud2l0aGluKG51bWJlcjApKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiLCBQLldpdGhpbigyNykpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKDI3KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRoaW4oMjcpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRoaW4oMjcpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRoaW4oMjcpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgUC53aXRoaW4oMjcpKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZV93aXRoaW5YMjdfbnVsbFhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LG51bGwpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCBudWxsKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRoaW4oMjcsIG51bGwpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgUC53aXRoaW4obnVtYmVyMCwgb2JqZWN0MCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIsIFAuV2l0aGluKDI3LCBudWxsKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oMjcsIG5pbCkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCBudWxsKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCBudWxsKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCBudWxsKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScsIFAud2l0aGluKDI3LCBOb25lKSkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hhZ2Vfd2l0aGluWDI3XzI5WF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRoaW4oMjcsMjkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCAyOSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCAyOSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBQLndpdGhpbihudW1iZXIwLCBudW1iZXIxKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgUC5XaXRoaW4oMjcsIDI5KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oMjcsIDI5KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRoaW4oMjcsIDI5KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aGluKDI3LCAyOSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiLCBQLndpdGhpbigyNywgMjkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgUC53aXRoaW4oMjcsIDI5KSkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hhZ2Vfd2l0aG91dFgyN1hfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aG91dCgyNykpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRob3V0KDI3KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRob3V0KDI3KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAud2l0aG91dChudW1iZXIwKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgUC5XaXRob3V0KDI3KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5XaXRob3V0KDI3KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRob3V0KDI3KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aG91dCgyNykpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiLCBQLndpdGhvdXQoMjcpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgUC53aXRob3V0KDI3KSkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hhZ2Vfd2l0aG91dFgyN18yOVhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aG91dCgyNywyOSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRob3V0KDI3LCAyOSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aG91dCgyNywgMjkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgUC53aXRob3V0KG51bWJlcjAsIG51bWJlcjEpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiLCBQLldpdGhvdXQoMjcsIDI5KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5XaXRob3V0KDI3LCAyOSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAud2l0aG91dCgyNywgMjkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC53aXRob3V0KDI3LCAyOSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiLCBQLndpdGhvdXQoMjcsIDI5KSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScsIFAud2l0aG91dCgyNywgMjkpKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9hZ2Vfd2l0aGluWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgUC53aXRoaW4oKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgUC53aXRoaW4oKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aGluKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgUC53aXRoaW4oKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAuV2l0aGluKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIGdyZW1saW5nby5QLldpdGhpbigpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgUC53aXRoaW4oKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBQLndpdGhpbigpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aGluKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ2FnZScsIFAud2l0aGluKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9hZ2Vfd2l0aG91dFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aG91dCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBQLndpdGhvdXQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aG91dCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIFAud2l0aG91dCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgUC5XaXRob3V0KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIGdyZW1saW5nby5QLldpdGhvdXQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aG91dCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aG91dCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAud2l0aG91dCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICdhZ2UnLCBQLndpdGhvdXQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9jb250YWluaW5nWGFya1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAuY29udGFpbmluZyhcImFya1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLmNvbnRhaW5pbmcoXCJhcmtcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAuY29udGFpbmluZyhcImFya1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBUZXh0UC5jb250YWluaW5nKHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFRleHRQLkNvbnRhaW5pbmcoXCJhcmtcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBncmVtbGluZ28uVGV4dFAuQ29udGFpbmluZyhcImFya1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5jb250YWluaW5nKFwiYXJrXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5jb250YWluaW5nKFwiYXJrXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5jb250YWluaW5nKFwiYXJrXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCBUZXh0UC5jb250YWluaW5nKCdhcmsnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9zdGFydGluZ1dpdGhYbWFyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5zdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5zdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAuc3RhcnRpbmdXaXRoKFwibWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFRleHRQLnN0YXJ0aW5nV2l0aChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBUZXh0UC5TdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBncmVtbGluZ28uVGV4dFAuU3RhcnRpbmdXaXRoKFwibWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLnN0YXJ0aW5nV2l0aChcIm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAuc3RhcnRpbmdXaXRoKFwibWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5zdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsIFRleHRQLnN0YXJ0aW5nX3dpdGgoJ21hcicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX2VuZGluZ1dpdGhYYXNYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLmVuZGluZ1dpdGgoXCJhc1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLmVuZGluZ1dpdGgoXCJhc1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5lbmRpbmdXaXRoKFwiYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgVGV4dFAuZW5kaW5nV2l0aChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBUZXh0UC5FbmRpbmdXaXRoKFwiYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBncmVtbGluZ28uVGV4dFAuRW5kaW5nV2l0aChcImFzXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLmVuZGluZ1dpdGgoXCJhc1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAuZW5kaW5nV2l0aChcImFzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5lbmRpbmdXaXRoKFwiYXNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsIFRleHRQLmVuZGluZ193aXRoKCdhcycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hwZXJzb25fbmFtZV9jb250YWluaW5nWG9YX2FuZFhsdFhtWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgVGV4dFAuY29udGFpbmluZyhcIm9cIikuYW5kKFAubHQoXCJtXCIpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpLmFuZChQLmx0KFwibVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgVGV4dFAuY29udGFpbmluZyhcIm9cIikuYW5kKFAubHQoXCJtXCIpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBUZXh0UC5jb250YWluaW5nKHN0cmluZzIpLmFuZChQLmx0KHN0cmluZzMpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBUZXh0UC5Db250YWluaW5nKFwib1wiKS5BbmQoUC5MdChcIm1cIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLkNvbnRhaW5pbmcoXCJvXCIpLkFuZChncmVtbGluZ28uUC5MdChcIm1cIikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpLmFuZChQLmx0KFwibVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpLmFuZChQLmx0KFwibVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpLmFuZChQLmx0KFwibVwiKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCBUZXh0UC5jb250YWluaW5nKCdvJykuYW5kXyhQLmx0KCdtJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX2d0WG1YX2FuZFhjb250YWluaW5nWG9YWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBQLmd0KFwibVwiKS5hbmQoVGV4dFAuY29udGFpbmluZyhcIm9cIikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC5ndChcIm1cIikuYW5kKFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBQLmd0KFwibVwiKS5hbmQoVGV4dFAuY29udGFpbmluZyhcIm9cIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAuZ3Qoc3RyaW5nMSkuYW5kKFRleHRQLmNvbnRhaW5pbmcoc3RyaW5nMikpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFAuR3QoXCJtXCIpLkFuZChUZXh0UC5Db250YWluaW5nKFwib1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5HdChcIm1cIikuQW5kKGdyZW1saW5nby5UZXh0UC5Db250YWluaW5nKFwib1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC5ndChcIm1cIikuYW5kKFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC5ndChcIm1cIikuYW5kKFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC5ndChcIm1cIikuYW5kKFRleHRQLmNvbnRhaW5pbmcoXCJvXCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgUC5ndCgnbScpLmFuZF8oVGV4dFAuY29udGFpbmluZygnbycpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9ub3RfY29udGFpbmluZ1hhcmtYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdENvbnRhaW5pbmcoXCJhcmtcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RDb250YWluaW5nKFwiYXJrXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdENvbnRhaW5pbmcoXCJhcmtcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgVGV4dFAubm90Q29udGFpbmluZyhzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBUZXh0UC5Ob3RDb250YWluaW5nKFwiYXJrXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLk5vdENvbnRhaW5pbmcoXCJhcmtcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90Q29udGFpbmluZyhcImFya1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90Q29udGFpbmluZyhcImFya1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90Q29udGFpbmluZyhcImFya1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgVGV4dFAubm90X2NvbnRhaW5pbmcoJ2FyaycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX25vdF9zdGFydGluZ1dpdGhYbWFyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90U3RhcnRpbmdXaXRoKFwibWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBUZXh0UC5Ob3RTdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBncmVtbGluZ28uVGV4dFAuTm90U3RhcnRpbmdXaXRoKFwibWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChcIm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90U3RhcnRpbmdXaXRoKFwibWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoXCJtYXJcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsIFRleHRQLm5vdF9zdGFydGluZ193aXRoKCdtYXInKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9ub3RfZW5kaW5nV2l0aFhhc1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90RW5kaW5nV2l0aChcImFzXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90RW5kaW5nV2l0aChcImFzXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdEVuZGluZ1dpdGgoXCJhc1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBUZXh0UC5ub3RFbmRpbmdXaXRoKHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFRleHRQLk5vdEVuZGluZ1dpdGgoXCJhc1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5UZXh0UC5Ob3RFbmRpbmdXaXRoKFwiYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90RW5kaW5nV2l0aChcImFzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RFbmRpbmdXaXRoKFwiYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdEVuZGluZ1dpdGgoXCJhc1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgVGV4dFAubm90X2VuZGluZ193aXRoKCdhcycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX3JlZ2V4WHJNYXJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLnJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLnJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5yZWdleChcIl5tYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgVGV4dFAucmVnZXgoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgVGV4dFAuUmVnZXgoXCJebWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLlJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5yZWdleChcIl5tYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLnJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJebWFyXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCBUZXh0UC5yZWdleCgnXm1hcicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX25vdFJlZ2V4WHJNYXJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RSZWdleChcIl5tYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgVGV4dFAubm90UmVnZXgoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgVGV4dFAuTm90UmVnZXgoXCJebWFyXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLk5vdFJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RSZWdleChcIl5tYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFJlZ2V4KFwiXm1hclwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90UmVnZXgoXCJebWFyXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCBUZXh0UC5ub3RfcmVnZXgoJ15tYXInKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9yZWdleFhUaW5rZXJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJBcGFjaGUgVGlua2VyUG9wXHUwMGE5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJBcGFjaGUgVGlua2VyUG9wXHUwMGE5XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkFwYWNoZSBUaW5rZXJQb3BcdTAwYTlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ0FwYWNoZSBUaW5rZXJQb3BcdTAwYTknKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLnJlZ2V4KFwiVGlua2VyXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBUZXh0UC5yZWdleChzdHJpbmcxKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgVGV4dFAuUmVnZXgoXCJUaW5rZXJcIikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLlJlZ2V4KFwiVGlua2VyXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgVGV4dFAucmVnZXgoJ1RpbmtlcicpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX3JlZ2V4WFRpbmtlclVuaWNvZGVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJBcGFjaGUgVGlua2VyUG9wXHUwMGE5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJBcGFjaGUgVGlua2VyUG9wXHUwMGE5XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkFwYWNoZSBUaW5rZXJQb3BcdTAwYTlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiQXBhY2hlIFRpbmtlclBvcFx1MDBhOVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ0FwYWNoZSBUaW5rZXJQb3BcdTAwYTknKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXIuKlxcdTAwQTlcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFRleHRQLnJlZ2V4KFwiVGlua2VyLipcXHUwMEE5XCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXIuKlxcdTAwQTlcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBUZXh0UC5yZWdleChzdHJpbmcxKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgVGV4dFAuUmVnZXgoXCJUaW5rZXIuKlxcdTAwQTlcIikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlRleHRQLlJlZ2V4KFwiVGlua2VyLipcXHUwMEE5XCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXIuKlxcdTAwQTlcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXIuKlxcdTAwQTlcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgVGV4dFAucmVnZXgoXCJUaW5rZXIuKlxcdTAwQTlcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgVGV4dFAucmVnZXgoJ1Rpbmtlci4qXFx1MDBBOScpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hwX25lcVh2WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicFwiLCBQLm5lcShcInZcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicFwiLCBQLm5lcShcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBcIiwgUC5uZXEoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIFAubmVxKHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwXCIsIFAuTmVxKFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwXCIsIGdyZW1saW5nby5QLk5lcShcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBcIiwgUC5uZXEoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicFwiLCBQLm5lcShcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwXCIsIFAubmVxKFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwJywgUC5uZXEoJ3YnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYYWdlX2d0WDE4WF9hbmRYbHRYMzBYWG9yWGd0eDM1WFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLm9yKFAuZ3QoMzUpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC5ndCgxOCkuYW5kKFAubHQoMzApKS5vcihQLmd0KDM1KSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLm9yKFAuZ3QoMzUpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApLmFuZChQLmx0KG51bWJlcjEpKS5vcihQLmd0KG51bWJlcjIpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIsIFAuR3QoMTgpLkFuZChQLkx0KDMwKSkuT3IoUC5HdCgzNSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgxOCkuQW5kKGdyZW1saW5nby5QLkx0KDMwKSkuT3IoZ3JlbWxpbmdvLlAuR3QoMzUpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMTgpLmFuZChQLmx0KDMwKSkub3IoUC5ndCgzNSkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMTgpLmFuZChQLmx0KDMwKSkub3IoUC5ndCgzNSkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMTgpLmFuZChQLmx0KDMwKSkub3IoUC5ndCgzNSkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScsIFAuZ3QoMTgpLmFuZF8oUC5sdCgzMCkpLm9yXyhQLmd0KDM1KSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZV9ndFgxOFhfYW5kWGx0WDMwWFhvclhsdHgzNVhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC5ndCgxOCkuYW5kKFAubHQoMzApKS5hbmQoUC5sdCgzNSkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLmFuZChQLmx0KDM1KSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLmFuZChQLmx0KDM1KSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKS5hbmQoUC5sdChudW1iZXIxKSkuYW5kKFAubHQobnVtYmVyMikpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgUC5HdCgxOCkuQW5kKFAuTHQoMzApKS5BbmQoUC5MdCgzNSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgxOCkuQW5kKGdyZW1saW5nby5QLkx0KDMwKSkuQW5kKGdyZW1saW5nby5QLkx0KDM1KSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImFnZVwiLCBQLmd0KDE4KS5hbmQoUC5sdCgzMCkpLmFuZChQLmx0KDM1KSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgUC5ndCgxOCkuYW5kKFAubHQoMzApKS5hbmQoUC5sdCgzNSkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMTgpLmFuZChQLmx0KDMwKSkuYW5kKFAubHQoMzUpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdhZ2UnLCBQLmd0KDE4KS5hbmRfKFAubHQoMzApKS5hbmRfKFAubHQoMzUpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYa193aXRoaW5YY1hYX3ZhbHVlc1hrWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJcdThmNDlcdTZjZThcIikuYWRkVigpLnByb3BlcnR5KFwia1wiLCBcIlx1MjcyNlwiKS5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiXHUyNjYwXCIpLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJBXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiXHU4ZjQ5XHU2Y2U4XCIpLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJcdTI3MjZcIikuYWRkVigpLnByb3BlcnR5KFwia1wiLCBcIlx1MjY2MFwiKS5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiQVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJcdThmNDlcdTZjZThcIikuYWRkVigpLnByb3BlcnR5KFwia1wiLCBcIlx1MjcyNlwiKS5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiXHUyNjYwXCIpLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJBXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShzdHJpbmcwLCBzdHJpbmcxKS5hZGRWKCkucHJvcGVydHkoc3RyaW5nMCwgc3RyaW5nMikuYWRkVigpLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzMpLmFkZFYoKS5wcm9wZXJ0eShzdHJpbmcwLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShcImtcIiwgXCJcdThmNDlcdTZjZThcIikuQWRkVigpLlByb3BlcnR5KFwia1wiLCBcIlx1MjcyNlwiKS5BZGRWKCkuUHJvcGVydHkoXCJrXCIsIFwiXHUyNjYwXCIpLkFkZFYoKS5Qcm9wZXJ0eShcImtcIiwgXCJBXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkoXCJrXCIsIFwiXHU4ZjQ5XHU2Y2U4XCIpLkFkZFYoKS5Qcm9wZXJ0eShcImtcIiwgXCJcdTI3MjZcIikuQWRkVigpLlByb3BlcnR5KFwia1wiLCBcIlx1MjY2MFwiKS5BZGRWKCkuUHJvcGVydHkoXCJrXCIsIFwiQVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJcdThmNDlcdTZjZThcIikuYWRkVigpLnByb3BlcnR5KFwia1wiLCBcIlx1MjcyNlwiKS5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiXHUyNjYwXCIpLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJBXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJcdThmNDlcdTZjZThcIikuYWRkVigpLnByb3BlcnR5KFwia1wiLCBcIlx1MjcyNlwiKS5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiXHUyNjYwXCIpLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJBXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJcdThmNDlcdTZjZThcIikuYWRkVigpLnByb3BlcnR5KFwia1wiLCBcIlx1MjcyNlwiKS5hZGRWKCkucHJvcGVydHkoXCJrXCIsIFwiXHUyNjYwXCIpLmFkZFYoKS5wcm9wZXJ0eShcImtcIiwgXCJBXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5wcm9wZXJ0eSgnaycsICdcdThmNDlcdTZjZTgnKS5hZGRfdigpLnByb3BlcnR5KCdrJywgJ1x1MjcyNicpLmFkZF92KCkucHJvcGVydHkoJ2snLCAnXHUyNjYwJykuYWRkX3YoKS5wcm9wZXJ0eSgnaycsICdBJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJrXCIsIFAud2l0aGluKFwiXHU4ZjQ5XHU2Y2U4XCIsIFwiXHUyNzI2XCIsIFwiXHUyNjYwXCIpKS52YWx1ZXMoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwia1wiLCBQLndpdGhpbihcIlx1OGY0OVx1NmNlOFwiLCBcIlx1MjcyNlwiLCBcIlx1MjY2MFwiKSkudmFsdWVzKFwia1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJrXCIsIFAud2l0aGluKFwiXHU4ZjQ5XHU2Y2U4XCIsIFwiXHUyNzI2XCIsIFwiXHUyNjYwXCIpKS52YWx1ZXMoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJrXCIsIFAuV2l0aGluKFwiXHU4ZjQ5XHU2Y2U4XCIsIFwiXHUyNzI2XCIsIFwiXHUyNjYwXCIpKS5WYWx1ZXM8b2JqZWN0PihcImtcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJrXCIsIGdyZW1saW5nby5QLldpdGhpbihcIlx1OGY0OVx1NmNlOFwiLCBcIlx1MjcyNlwiLCBcIlx1MjY2MFwiKSkuVmFsdWVzKFwia1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJrXCIsIFAud2l0aGluKFwiXHU4ZjQ5XHU2Y2U4XCIsIFwiXHUyNzI2XCIsIFwiXHUyNjYwXCIpKS52YWx1ZXMoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJrXCIsIFAud2l0aGluKFwiXHU4ZjQ5XHU2Y2U4XCIsIFwiXHUyNzI2XCIsIFwiXHUyNjYwXCIpKS52YWx1ZXMoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJrXCIsIFAud2l0aGluKFwiXHU4ZjQ5XHU2Y2U4XCIsIFwiXHUyNzI2XCIsIFwiXHUyNjYwXCIpKS52YWx1ZXMoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnaycsIFAud2l0aGluKCdcdThmNDlcdTZjZTgnLCAnXHUyNzI2JywgJ1x1MjY2MCcpKS52YWx1ZXMoJ2snKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbnVsbF90ZXN0bnVsbGtleVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKG51bGwsIFwidGVzdC1udWxsLWtleVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhudWxsLCBcInRlc3QtbnVsbC1rZXlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKG51bGwsIFwidGVzdC1udWxsLWtleVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcygoc3RyaW5nKSBudWxsLCBcInRlc3QtbnVsbC1rZXlcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMobmlsLCBcInRlc3QtbnVsbC1rZXlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKG51bGwsIFwidGVzdC1udWxsLWtleVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKG51bGwsIFwidGVzdC1udWxsLWtleVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKG51bGwsIFwidGVzdC1udWxsLWtleVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoTm9uZSwgJ3Rlc3QtbnVsbC1rZXknKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX2hhc1hudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXMobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXMobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXMobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhcyhudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXMoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbGFiZWxfcGVyc29uWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFQuTGFiZWwsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKGdyZW1saW5nby5ULkxhYmVsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcyhULmxhYmVsLCAncGVyc29uJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbGFiZWxfZXFYcGVyc29uWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFQubGFiZWwsIGVxKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhULmxhYmVsLCBQLmVxKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgUC5lcShcInBlcnNvblwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhULmxhYmVsLCBQLmVxKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoVC5MYWJlbCwgUC5FcShcInBlcnNvblwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoZ3JlbWxpbmdvLlQuTGFiZWwsIGdyZW1saW5nby5QLkVxKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgUC5lcShcInBlcnNvblwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhULmxhYmVsLCBQLmVxKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFQubGFiZWwsIFAuZXEoXCJwZXJzb25cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcyhULmxhYmVsLCBQLmVxKCdwZXJzb24nKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCAob2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYZW1wdHlYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKHh4MSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0lkKHh4MSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNJZCh4eDEpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKHh4MSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNJZCh4eDEpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNJZCh4eDEpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQoeHgxKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNJZCh4eDEpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0lkKHh4MSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQoeHgxKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYd2l0aGluWGVtcHR5WFhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzSWQoUC53aXRoaW4oW10pKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzSWQoUC53aXRoaW4oW10pKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0lkKFAud2l0aGluKFtdKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzSWQoUC53aXRoaW4obGlzdDApKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKFAuV2l0aGluKG5ldyBMaXN0PG9iamVjdD4geyAgfSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNJZChncmVtbGluZ28uUC5XaXRoaW4oW11pbnRlcmZhY2V7fXt9KSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNJZChQLndpdGhpbihbXSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0lkKFAud2l0aGluKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7ICB9fSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0lkKFAud2l0aGluKFtdKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQoUC53aXRoaW4oW10pKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYd2l0aG91dFhlbXB0eVhYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKFAud2l0aG91dChbXSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNJZChQLndpdGhvdXQoW10pKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0lkKFAud2l0aG91dChbXSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKFAud2l0aG91dChsaXN0MCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzSWQoUC5XaXRob3V0KG5ldyBMaXN0PG9iamVjdD4geyAgfSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNJZChncmVtbGluZ28uUC5XaXRob3V0KFtdaW50ZXJmYWNle317fSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQoUC53aXRob3V0KFtdKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzSWQoUC53aXRob3V0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7ICB9fSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0lkKFAud2l0aG91dChbXSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2lkKFAud2l0aG91dChbXSkpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ub3RYaGFzSWRYd2l0aGluWGVtcHR5WFhYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm5vdChfXy5oYXNJZChQLndpdGhpbihbXSkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubm90KF9fLmhhc0lkKFAud2l0aGluKFtdKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubm90KF9fLmhhc0lkKFAud2l0aGluKFtdKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm5vdChfXy5oYXNJZChQLndpdGhpbihsaXN0MCkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk5vdChfXy5IYXNJZChQLldpdGhpbihuZXcgTGlzdDxvYmplY3Q+IHsgIH0pKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk5vdChncmVtbGluZ28uVF9fLkhhc0lkKGdyZW1saW5nby5QLldpdGhpbihbXWludGVyZmFjZXt9e30pKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ub3QoX18uaGFzSWQoUC53aXRoaW4oW10pKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubm90KF9fLmhhc0lkKFAud2l0aGluKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7ICB9fSkpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ub3QoX18uaGFzSWQoUC53aXRoaW4oW10pKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ub3RfKF9fLmhhc19pZChQLndpdGhpbihbXSkpKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzSWQobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNJZChudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNJZChudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzSWQob2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzSWQobnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNJZChuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0lkKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNJZChudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzSWQobnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2lkKE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYZXFYbnVsbFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzSWQoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzSWQoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKFAuZXEob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKFAuRXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzSWQoZ3JlbWxpbmdvLlAuRXEobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0lkKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNJZChQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQoUC5lcShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNJZFgyX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKHZpZDIsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzSWQodmlkMiwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNJZCh2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0lkKHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19pZCh2aWQyLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0lkWG1hcmtvdmFyX3ZhZGFzdmFyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzSWQodmlkMSwgdmlkMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2lkKHZpZDEsIHZpZDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYbWFya292YXJfdmFkYXN2YXJfcGV0ZXJ2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzSWQodmlkMSwgdmlkMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzSWQodmlkMSwgdmlkMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzSWQodmlkMSwgdmlkMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQodmlkMSwgdmlkMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQodmlkMSwgdmlkMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNJZFgyQXNTdHJpbmdfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNJZCh2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNJZCh2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzSWQodmlkMiwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzSWQodmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNJZCh2aWQyLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0lkKHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNJZCh2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzSWQodmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2lkKHZpZDIsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzSWRYMUFzU3RyaW5nXzJBc1N0cmluZ19udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyLCBvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNJZCh2aWQxLCB2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0lkKHZpZDEsIHZpZDIsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQodmlkMSwgdmlkMiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQodmlkMSwgdmlkMiwgTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNJZFhudWxsXzJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKG51bGwsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzSWQobnVsbCwgdmlkMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzSWQobnVsbCwgdmlkMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKG9iamVjdDAsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKG51bGwsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzSWQobmlsLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNJZChudWxsLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzSWQobnVsbCwgdmlkMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0lkKG51bGwsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19pZChOb25lLCB2aWQyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0lkWDFYX2hhc0lkWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKHZpZDEpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzSWQodmlkMSkuaGFzSWQodmlkMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzSWQodmlkMSkuaGFzSWQodmlkMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKHZpZDEpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKHZpZDEpLkhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzSWQodmlkMSkuSGFzSWQodmlkMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQodmlkMSkuaGFzSWQodmlkMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0lkKHZpZDEpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNJZCh2aWQxKS5oYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQodmlkMSkuaGFzX2lkKHZpZDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaW5faGFzSWRYbmVxWDFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5pbigpLmhhc0lkKFAubmVxKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaW4oKS5oYXNJZChQLm5lcSh4eDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5pbigpLmhhc0lkKFAubmVxKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5pbigpLmhhc0lkKFAubmVxKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkluKCkuSGFzSWQoUC5OZXEoeHgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5JbigpLkhhc0lkKGdyZW1saW5nby5QLk5lcSh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5pbigpLmhhc0lkKFAubmVxKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5pbigpLmhhc0lkKFAubmVxKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5pbl8oKS5oYXNJZChQLm5lcSh4eDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5pbl8oKS5oYXNfaWQoUC5uZXEoeHgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfaGFzSWRYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5oYXNfaWQodmlkMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfaGFzWGlkXzJfM1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIsIHZpZDMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIsIHZpZDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIsIHZpZDMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIsIHZpZDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5oYXNfaWQodmlkMiwgdmlkMykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfaGFzWGlkXzJBc1N0cmluZ18zQXNTdHJpbmdYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkuSGFzSWQodmlkMiwgdmlkMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkuSGFzSWQodmlkMiwgdmlkMykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIsIHZpZDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMiwgdmlkMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyLCB2aWQzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkuaGFzX2lkKHZpZDIsIHZpZDMpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMUFzU3RyaW5nWF9vdXRfaGFzWGlkXzJBc1N0cmluZ1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkuaGFzSWQodmlkMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh2aWQyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHZpZDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5oYXNfaWQodmlkMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfaGFzWGlkXzJfM1hfaW5MaXN0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5IYXNJZCh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLkhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLmhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5oYXNJZCh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KCkuaGFzSWQoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkuaGFzX2lkKHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYaWRfMV8yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0lkKHZpZDEsIHZpZDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzSWQodmlkMSwgdmlkMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2lkKHZpZDEsIHZpZDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGlkXzFfMlhfaW5MaXN0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNJZCh4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzSWQoeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0lkKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzSWQoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzSWQoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQoeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JvdGhfZGVkdXBfcHJvcGVydGllc19oYXNLZXlYYWdlWF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KHN0cmluZzApLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLlByb3BlcnRpZXM8b2JqZWN0PigpLkRlZHVwKCkuSGFzS2V5KFwiYWdlXCIpLlZhbHVlPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJvdGgoKS5Qcm9wZXJ0aWVzKCkuRGVkdXAoKS5IYXNLZXkoXCJhZ2VcIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJhZ2VcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNfa2V5KCdhZ2UnKS52YWx1ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVhhZ2VYX2hhc1ZhbHVlWGd0WDMwWFhfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJhZ2VcIikuaGFzVmFsdWUoUC5ndCgzMCkpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShzdHJpbmcwKS5oYXNWYWx1ZShQLmd0KG51bWJlcjApKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5EZWR1cCgpLkhhc0tleShcImFnZVwiKS5IYXNWYWx1ZShQLkd0KDMwKSkuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLlByb3BlcnRpZXMoKS5EZWR1cCgpLkhhc0tleShcImFnZVwiKS5IYXNWYWx1ZShncmVtbGluZ28uUC5HdCgzMCkpLlZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzX2tleSgnYWdlJykuaGFzX3ZhbHVlKFAuZ3QoMzApKS52YWx1ZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJhZ2VcIikuaGFzVmFsdWUoUC5ndCgzMCkpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShzdHJpbmcwKS5oYXNWYWx1ZShQLmd0KG51bWJlcjApKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5EZWR1cCgpLkhhc0tleShcImFnZVwiKS5IYXNWYWx1ZShQLkd0KDMwKSkuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLlByb3BlcnRpZXMoKS5EZWR1cCgpLkhhc0tleShcImFnZVwiKS5IYXNWYWx1ZShncmVtbGluZ28uUC5HdCgzMCkpLlZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcImFnZVwiKS5oYXNWYWx1ZShQLmd0KDMwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzX2tleSgnYWdlJykuaGFzX3ZhbHVlKFAuZ3QoMzApKS52YWx1ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aEVfcHJvcGVydGllc19kZWR1cF9oYXNLZXlYd2VpZ2h0WF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJ3ZWlnaHRcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShzdHJpbmcwKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGhFKCkuUHJvcGVydGllczxvYmplY3Q+KCkuRGVkdXAoKS5IYXNLZXkoXCJ3ZWlnaHRcIikuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aEUoKS5Qcm9wZXJ0aWVzKCkuRGVkdXAoKS5IYXNLZXkoXCJ3ZWlnaHRcIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGhfZSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc19rZXkoJ3dlaWdodCcpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ib3RoRV9wcm9wZXJ0aWVzX2RlZHVwX2hhc0tleVh3ZWlnaHRYX2hhc1ZhbHVlWGx0WDBkM1hYX3ZhbHVlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwid2VpZ2h0XCIpLmhhc1ZhbHVlKFAubHQoMC4zKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwid2VpZ2h0XCIpLmhhc1ZhbHVlKFAubHQoMC4zKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS5oYXNWYWx1ZShQLmx0KDAuMykpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KHN0cmluZzApLmhhc1ZhbHVlKFAubHQobnVtYmVyMCkpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aEUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5EZWR1cCgpLkhhc0tleShcIndlaWdodFwiKS5IYXNWYWx1ZShQLkx0KDAuMykpLlZhbHVlPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJvdGhFKCkuUHJvcGVydGllcygpLkRlZHVwKCkuSGFzS2V5KFwid2VpZ2h0XCIpLkhhc1ZhbHVlKGdyZW1saW5nby5QLkx0KDAuMykpLlZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJ3ZWlnaHRcIikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS5oYXNWYWx1ZShQLmx0KDAuMykpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwid2VpZ2h0XCIpLmhhc1ZhbHVlKFAubHQoMC4zKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoX2UoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNfa2V5KCd3ZWlnaHQnKS5oYXNfdmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJ3ZWlnaHRcIikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJ3ZWlnaHRcIikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwid2VpZ2h0XCIpLmhhc1ZhbHVlKFAubHQoMC4zKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoc3RyaW5nMCkuaGFzVmFsdWUoUC5sdChudW1iZXIwKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Cb3RoRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpLkRlZHVwKCkuSGFzS2V5KFwid2VpZ2h0XCIpLkhhc1ZhbHVlKFAuTHQoMC4zKSkuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aEUoKS5Qcm9wZXJ0aWVzKCkuRGVkdXAoKS5IYXNLZXkoXCJ3ZWlnaHRcIikuSGFzVmFsdWUoZ3JlbWxpbmdvLlAuTHQoMC4zKSkuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoRSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc0tleShcIndlaWdodFwiKS5oYXNWYWx1ZShQLmx0KDAuMykpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGhFKCkucHJvcGVydGllcygpLmRlZHVwKCkuaGFzS2V5KFwid2VpZ2h0XCIpLmhhc1ZhbHVlKFAubHQoMC4zKSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aEUoKS5wcm9wZXJ0aWVzKCkuZGVkdXAoKS5oYXNLZXkoXCJ3ZWlnaHRcIikuaGFzVmFsdWUoUC5sdCgwLjMpKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGhfZSgpLnByb3BlcnRpZXMoKS5kZWR1cCgpLmhhc19rZXkoJ3dlaWdodCcpLmhhc192YWx1ZShQLmx0KDAuMykpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9wZXJ0aWVzX2hhc0tleVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLkhhc0tleSgoc3RyaW5nKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5IYXNLZXkobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNfa2V5KE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19oYXNLZXlYbnVsbF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNLZXkoc3RyaW5nMCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuSGFzS2V5KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcygpLkhhc0tleShuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzX2tleShOb25lLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfYWdlWF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBcImFnZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KHN0cmluZzAsIHN0cmluZzEpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuSGFzS2V5KG51bGwsIFwiYWdlXCIpLlZhbHVlPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5IYXNLZXkobmlsLCBcImFnZVwiKS5WYWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCwgXCJhZ2VcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBcImFnZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygpLmhhc19rZXkoTm9uZSwgJ2FnZScpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRV9wcm9wZXJ0aWVzX2hhc0tleVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpLkhhc0tleSgoc3RyaW5nKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoKS5IYXNLZXkobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLnByb3BlcnRpZXMoKS5oYXNfa2V5KE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VfcHJvcGVydGllc19oYXNLZXlYbnVsbF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnByb3BlcnRpZXMoKS5oYXNLZXkoc3RyaW5nMCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCkuSGFzS2V5KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuUHJvcGVydGllcygpLkhhc0tleShuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzX2tleShOb25lLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNfaGFzS2V5WG51bGxfd2VpZ2h0WF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIFwid2VpZ2h0XCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIFwid2VpZ2h0XCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KHN0cmluZzAsIHN0cmluZzEpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCkuSGFzS2V5KG51bGwsIFwid2VpZ2h0XCIpLlZhbHVlPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoKS5IYXNLZXkobmlsLCBcIndlaWdodFwiKS5WYWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoKS5oYXNLZXkobnVsbCwgXCJ3ZWlnaHRcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcygpLmhhc0tleShudWxsLCBcIndlaWdodFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkuaGFzS2V5KG51bGwsIFwid2VpZ2h0XCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygpLmhhc19rZXkoTm9uZSwgJ3dlaWdodCcpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRVg3WF9oYXNMYWJlbFhrbm93c1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKGVpZDcpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkNykuaGFzTGFiZWwoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoZWlkNykuaGFzTGFiZWwoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKGVpZDcpLmhhc0xhYmVsKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShlaWQ3KS5IYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKGVpZDcpLkhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDcpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRShlaWQ3KS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoZWlkNykuaGFzTGFiZWwoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkNykuaGFzX2xhYmVsKCdrbm93cycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VfaGFzTGFiZWxYa25vd3NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VfaGFzTGFiZWxYdXNlc190cmF2ZXJzZXNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwidXNlc1wiLCBcInRyYXZlcnNlc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwidXNlc1wiLCBcInRyYXZlcnNlc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcInVzZXNcIiwgXCJ0cmF2ZXJzZXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwidXNlc1wiLCBcInRyYXZlcnNlc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwidXNlc1wiLCBcInRyYXZlcnNlc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcInVzZXNcIiwgXCJ0cmF2ZXJzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwidXNlc1wiLCBcInRyYXZlcnNlc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJ1c2VzXCIsIFwidHJhdmVyc2VzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgndXNlcycsICd0cmF2ZXJzZXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvbl9zb2Z0d2FyZV9ibGFoWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiLFwic29mdHdhcmVcIiwgXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIiwgXCJzb2Z0d2FyZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIiwgXCJzb2Z0d2FyZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIsIFwic29mdHdhcmVcIiwgXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIiwgXCJzb2Z0d2FyZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIiwgXCJzb2Z0d2FyZVwiLCBcImJsYWhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIsIFwic29mdHdhcmVcIiwgXCJibGFoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiLCBcInNvZnR3YXJlXCIsIFwiYmxhaFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicsICdzb2Z0d2FyZScsICdibGFoJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25fc29mdHdhcmV2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIseHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiLCAoc3RyaW5nKSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJywgeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfaGFzTGFiZWxYc29mdHdhcmVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmhhc0xhYmVsKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb252YXJYX2hhc0xhYmVsWHNvZnR3YXJlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbCh4eDEpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbCh4eDEpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoeHgxKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbCh4eDEpLmhhc0xhYmVsKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKChzdHJpbmcpIHh4MSkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKHh4MSkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbCh4eDEpLmhhc0xhYmVsKFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKHh4MSkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoeHgxKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCh4eDEpLmhhc19sYWJlbCgnc29mdHdhcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvbnZhcl9zb2Z0d2FyZXZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoeHgxLHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbCh4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbCh4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoKHN0cmluZykgeHgxLCAoc3RyaW5nKSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbCh4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKHh4MSwgeHgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfaGFzWGFnZV9ub3RYbHRlWDEwWF9hbmRYbm90WGJldHdlZW5YMTFfMjBYWFhYX2FuZFhsdFgyOVhfb3JYZXFYMzVYWFhYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuaGFzKFwiYWdlXCIsIFAubm90KFAubHRlKDEwKS5hbmQoUC5ub3QoUC5iZXR3ZWVuKDExLCAyMCkpKSkuYW5kKFAubHQoMjkpLm9yKFAuZXEoMzUpKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5oYXMoXCJhZ2VcIiwgUC5ub3QoUC5sdGUoMTApLmFuZChQLm5vdChQLmJldHdlZW4oMTEsIDIwKSkpKS5hbmQoUC5sdCgyOSkub3IoUC5lcSgzNSkpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5oYXMoXCJhZ2VcIiwgUC5ub3QoUC5sdGUoMTApLmFuZChQLm5vdChQLmJldHdlZW4oMTEsIDIwKSkpKS5hbmQoUC5sdCgyOSkub3IoUC5lcSgzNSkpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIFAubm90KFAubHRlKG51bWJlcjApLmFuZChQLm5vdChQLmJldHdlZW4obnVtYmVyMSwgbnVtYmVyMikpKSkuYW5kKFAubHQobnVtYmVyMykub3IoUC5lcShudW1iZXI0KSkpKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuSGFzKFwiYWdlXCIsIFAuTm90KFAuTHRlKDEwKS5BbmQoUC5Ob3QoUC5CZXR3ZWVuKDExLCAyMCkpKSkuQW5kKFAuTHQoMjkpLk9yKFAuRXEoMzUpKSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5Ob3QoZ3JlbWxpbmdvLlAuTHRlKDEwKS5BbmQoZ3JlbWxpbmdvLlAuTm90KGdyZW1saW5nby5QLkJldHdlZW4oMTEsIDIwKSkpKS5BbmQoZ3JlbWxpbmdvLlAuTHQoMjkpLk9yKGdyZW1saW5nby5QLkVxKDM1KSkpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmhhcyhcImFnZVwiLCBQLm5vdChQLmx0ZSgxMCkuYW5kKFAubm90KFAuYmV0d2VlbigxMSwgMjApKSkpLmFuZChQLmx0KDI5KS5vcihQLmVxKDM1KSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5oYXMoXCJhZ2VcIiwgUC5ub3QoUC5sdGUoMTApLmFuZChQLm5vdChQLmJldHdlZW4oMTEsIDIwKSkpKS5hbmQoUC5sdCgyOSkub3IoUC5lcSgzNSkpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuaGFzKFwiYWdlXCIsIFAubm90KFAubHRlKDEwKS5hbmQoUC5ub3QoUC5iZXR3ZWVuKDExLCAyMCkpKSkuYW5kKFAubHQoMjkpLm9yKFAuZXEoMzUpKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5oYXMoJ2FnZScsIFAubm90XyhQLmx0ZSgxMCkuYW5kXyhQLm5vdF8oUC5iZXR3ZWVuKDExLCAyMCkpKSkuYW5kXyhQLmx0KDI5KS5vcl8oUC5lcSgzNSkpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbCgoc3RyaW5nKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbGFiZWxfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFQubGFiZWwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFQubGFiZWwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhULmxhYmVsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKFQubGFiZWwsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhULkxhYmVsLCAob2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhncmVtbGluZ28uVC5MYWJlbCwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoVC5sYWJlbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhULmxhYmVsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFQubGFiZWwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcyhULmxhYmVsLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWG51bGxfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoKHN0cmluZykgbnVsbCwgKHN0cmluZykgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoKFN0cmluZykgbnVsbCwgKFN0cmluZykgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoTm9uZSwgTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhudWxsX3BlcnNvblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwobnVsbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChudWxsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChudWxsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoKHN0cmluZykgbnVsbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChuaWwsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKChTdHJpbmcpIG51bGwsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChudWxsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwobnVsbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKE5vbmUsICdwZXJzb24nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX2hhc0xhYmVsWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKChzdHJpbmcpIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbChOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX2hhc1hsYWJlbF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXMoVC5sYWJlbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXMoVC5sYWJlbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzKFQubGFiZWwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXMoVC5sYWJlbCwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzKFQuTGFiZWwsIChvYmplY3QpIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzKGdyZW1saW5nby5ULkxhYmVsLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhcyhULmxhYmVsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzKFQubGFiZWwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXMoVC5sYWJlbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzKFQubGFiZWwsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19oYXNMYWJlbFhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzTGFiZWwoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuSGFzTGFiZWwoKHN0cmluZykgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKCkuSGFzTGFiZWwobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzTGFiZWwobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNMYWJlbChudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc0xhYmVsKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNfbGFiZWwoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNOb3RYYWdlWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc05vdChcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTm90KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTm90KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc05vdChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTm90KFwiYWdlXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc05vdChcImFnZVwiKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc05vdChcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNOb3QoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTm90KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX25vdCgnYWdlJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9wZXJ0aWVzX2hhc1ZhbHVlWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5IYXNWYWx1ZSgob2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5IYXNWYWx1ZShuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc1ZhbHVlKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygpLmhhc192YWx1ZShOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb3BlcnRpZXNfaGFzVmFsdWVYbnVsbF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCxudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShvYmplY3QwLCBvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5IYXNWYWx1ZShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5IYXNWYWx1ZShuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc1ZhbHVlKG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzX3ZhbHVlKE5vbmUsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19oYXNWYWx1ZVhudWxsX2pvc2hYX3ZhbHVlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBcImpvc2hcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBcImpvc2hcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCwgXCJqb3NoXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShvYmplY3QwLCBzdHJpbmcwKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLkhhc1ZhbHVlKG51bGwsIFwiam9zaFwiKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKCkuSGFzVmFsdWUobmlsLCBcImpvc2hcIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuaGFzVmFsdWUobnVsbCwgXCJqb3NoXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNWYWx1ZShudWxsLCBcImpvc2hcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcygpLmhhc1ZhbHVlKG51bGwsIFwiam9zaFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5oYXNfdmFsdWUoTm9uZSwgJ2pvc2gnKS52YWx1ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYMzJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcygzMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcygzMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcygzMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoMzIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcygzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcygzMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcygzMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oMzIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYMzJ2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyh4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1hsdGVfMzBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSgzMCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAubHRlKDMwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAubHRlKDMwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLmx0ZShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5MdGUoMzApKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5MdGUoMzApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5sdGUoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAubHRlKDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSgzMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAubHRlKDMwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1hsdGVfMzB2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSh4eDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSh4eDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5sdGUoeHgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLmx0ZSh4eDEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLkx0ZSh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5MdGUoeHgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAubHRlKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5sdGUoeHgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSh4eDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLmx0ZSh4eDEpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWGd0ZV8yOVhfaXNYbHRfMzRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0ZSgyOSkpLmlzKFAubHQoMzQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0ZSgyOSkpLmlzKFAubHQoMzQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndGUoMjkpKS5pcyhQLmx0KDM0KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLmd0ZShudW1iZXIwKSkuaXMoUC5sdChudW1iZXIxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5HdGUoMjkpKS5JcyhQLkx0KDM0KSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuR3RlKDI5KSkuSXMoZ3JlbWxpbmdvLlAuTHQoMzQpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndGUoMjkpKS5pcyhQLmx0KDM0KSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0ZSgyOSkpLmlzKFAubHQoMzQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3RlKDI5KSkuaXMoUC5sdCgzNCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAuZ3RlKDI5KSkuaXNfKFAubHQoMzQpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWGd0ZV8yOXZhYXJYX2lzWGx0XzM0dmFyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndGUoeHgxKSkuaXMoUC5sdCh4eDIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0ZSh4eDEpKS5pcyhQLmx0KHh4MikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0ZSh4eDEpKS5pcyhQLmx0KHh4MikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC5ndGUoeHgxKSkuaXMoUC5sdCh4eDIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLkd0ZSh4eDEpKS5JcyhQLkx0KHh4MikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLkd0ZSh4eDEpKS5JcyhncmVtbGluZ28uUC5MdCh4eDIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndGUoeHgxKSkuaXMoUC5sdCh4eDIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3RlKHh4MSkpLmlzKFAubHQoeHgyKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0ZSh4eDEpKS5pcyhQLmx0KHh4MikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAuZ3RlKHh4MSkpLmlzXyhQLmx0KHh4MikpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYaW5YY3JlYXRlZFhfY291bnRfaXNYMVhYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS53aGVyZShfXy5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcygxKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKDEpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKDEpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS53aGVyZShfXy5pbihzdHJpbmcwKS5jb3VudCgpLmlzKG51bWJlcjApKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uSW4oXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoMSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLldoZXJlKGdyZW1saW5nby5UX18uSW4oXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoMSkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkud2hlcmUoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoMSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKDEpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy5pbl8oXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoMSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18uaW5fKCdjcmVhdGVkJykuY291bnQoKS5pc18oMSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYaW5YY3JlYXRlZFhfY291bnRfaXNYZ3RlXzJYWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkud2hlcmUoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkud2hlcmUoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkud2hlcmUoX18uaW4oc3RyaW5nMCkuY291bnQoKS5pcyhQLmd0ZShudW1iZXIwKSkpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5XaGVyZShfXy5JbihcImNyZWF0ZWRcIikuQ291bnQoKS5JcyhQLkd0ZSgyKSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLldoZXJlKGdyZW1saW5nby5UX18uSW4oXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoZ3JlbWxpbmdvLlAuR3RlKDIpKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS53aGVyZShfXy5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmd0ZSgyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkud2hlcmUoX18uaW5fKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS53aGVyZShfXy5pbl8oJ2NyZWF0ZWQnKS5jb3VudCgpLmlzXyhQLmd0ZSgyKSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfbm9uZVhndFgzMlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5ub25lKFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5ub25lKFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubm9uZShQLmd0KDMyKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5ub25lKFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk5vbmUoUC5HdCgzMikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk5vbmUoZ3JlbWxpbmdvLlAuR3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubm9uZShQLmd0KDMyKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5ub25lKFAuZ3QoMzIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm5vbmUoUC5ndCgzMikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykubm9uZShQLmd0KDMyKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF93aGVyZVhpc1hQX2d0WDMzWFhYX2ZvbGRfbm9uZVhsdGVYMzNYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkubm9uZShQLmx0ZSgzMykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLndoZXJlKF9fLmlzKFAuZ3QoMzMpKSkuZm9sZCgpLm5vbmUoUC5sdGUoMzMpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkubm9uZShQLmx0ZSgzMykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkud2hlcmUoX18uaXMoUC5ndChudW1iZXIwKSkpLmZvbGQoKS5ub25lKFAubHRlKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5XaGVyZShfXy5JcyhQLkd0KDMzKSkpLkZvbGQoKS5Ob25lKFAuTHRlKDMzKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgzMykpKS5Gb2xkKCkuTm9uZShncmVtbGluZ28uUC5MdGUoMzMpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkubm9uZShQLmx0ZSgzMykpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkubm9uZShQLmx0ZSgzMykpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikud2hlcmUoX18uaXMoUC5ndCgzMykpKS5mb2xkKCkubm9uZShQLmx0ZSgzMykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykud2hlcmUoX18uaXNfKFAuZ3QoMzMpKSkuZm9sZCgpLm5vbmUoUC5sdGUoMzMpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGRlc2NYX2ZvbGRfbm9uZVhsdFgxMFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KGRlc2MpLmZvbGQoKS5ub25lKFAubHQoMTApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAubHQoMTApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkubm9uZShQLmx0KDEwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAubHQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYykuRm9sZCgpLk5vbmUoUC5MdCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkZvbGQoKS5Ob25lKGdyZW1saW5nby5QLkx0KDEwKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5sdCgxMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkubm9uZShQLmx0KDEwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAubHQoMTApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5sdCgxMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfYnlYZGVzY1hfZm9sZF9ub25lWGd0WDMwWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoZGVzYykuZm9sZCgpLm5vbmUoUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5ndChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5Gb2xkKCkuTm9uZShQLkd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuRm9sZCgpLk5vbmUoZ3JlbWxpbmdvLlAuR3QoMzApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkubm9uZShQLmd0KDMwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5ub25lKFAuZ3QoMzApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLm5vbmUoUC5ndCgzMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkubm9uZShQLmd0KDMwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFiY19iY2RYX25vbmVYZXFYYmNkWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYWJjXCIsXCJiY2RcIl0pLm5vbmUoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhYmNcIiwgXCJiY2RcIl0pLm5vbmUoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5ub25lKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkubm9uZShQLmVxKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFiY1wiLCBcImJjZFwiIH0pLk5vbmUoUC5FcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYWJjXCIsIFwiYmNkXCJ9KS5Ob25lKGdyZW1saW5nby5QLkVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCJhYmNcIiwgXCJiY2RcIl0pLm5vbmUoUC5lcShcImJjZFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFiY1wiKTsgYWRkKFwiYmNkXCIpOyB9fSkubm9uZShQLmVxKFwiYmNkXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYWJjXCIsIFwiYmNkXCJdKS5ub25lKFAuZXEoXCJiY2RcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnYWJjJywgJ2JjZCddKS5ub25lKFAuZXEoJ2JjZCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYYmNkX2JjZFhfbm9uZVhlcVhhYmNYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJiY2RcIixcImJjZFwiXSkubm9uZShQLmVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImJjZFwiLCBcImJjZFwiXSkubm9uZShQLmVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJiY2RcIiwgXCJiY2RcIl0pLm5vbmUoUC5lcShcImFiY1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5ub25lKFAuZXEoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYmNkXCIsIFwiYmNkXCIgfSkuTm9uZShQLkVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJiY2RcIiwgXCJiY2RcIn0pLk5vbmUoZ3JlbWxpbmdvLlAuRXEoXCJhYmNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImJjZFwiLCBcImJjZFwiXSkubm9uZShQLmVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYmNkXCIpOyBhZGQoXCJiY2RcIik7IH19KS5ub25lKFAuZXEoXCJhYmNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJiY2RcIiwgXCJiY2RcIl0pLm5vbmUoUC5lcShcImFiY1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydiY2QnLCAnYmNkJ10pLm5vbmUoUC5lcSgnYWJjJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsX2JjZFhfbm9uZVhQX2VxWGFiY1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtudWxsLFwiYmNkXCJdKS5ub25lKFAuZXEoXCJhYmNcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIFwiYmNkXCJdKS5ub25lKFAuZXEoXCJhYmNcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtudWxsLCBcImJjZFwiXSkubm9uZShQLmVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLm5vbmUoUC5lcShzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgXCJiY2RcIiB9KS5Ob25lKFAuRXEoXCJhYmNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIFwiYmNkXCJ9KS5Ob25lKGdyZW1saW5nby5QLkVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbbnVsbCwgXCJiY2RcIl0pLm5vbmUoUC5lcShcImFiY1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChudWxsKTsgYWRkKFwiYmNkXCIpOyB9fSkubm9uZShQLmVxKFwiYWJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIFwiYmNkXCJdKS5ub25lKFAuZXEoXCJhYmNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFtOb25lLCAnYmNkJ10pLm5vbmUoUC5lcSgnYWJjJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1XzhfMTBfMTBfN1hfbm9uZVhsdFg3WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzUsOCwxMF0sWzEwLDddKS5ub25lKFAubHQoNykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkubm9uZShQLmx0KDcpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5ub25lKFAubHQoNykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCwgbGlzdDEpLm5vbmUoUC5sdChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgNSwgOCwgMTAgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDEwLCA3IH0pLk5vbmUoUC5MdCg3KSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezUsIDgsIDEwfSwgW11pbnRlcmZhY2V7fXsxMCwgN30pLk5vbmUoZ3JlbWxpbmdvLlAuTHQoNykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFs1LCA4LCAxMF0sIFsxMCwgN10pLm5vbmUoUC5sdCg3KSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCg1KTsgYWRkKDgpOyBhZGQoMTApOyB9fSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEwKTsgYWRkKDcpOyB9fSkubm9uZShQLmx0KDcpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzUsIDgsIDEwXSwgWzEwLCA3XSkubm9uZShQLmx0KDcpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbNSwgOCwgMTBdLCBbMTAsIDddKS5ub25lKFAubHQoNykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsWF9ub25lWGVxWG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkubm9uZShQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5ub25lKFAuZXEob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuTm9uZShQLkVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuTm9uZShncmVtbGluZ28uUC5FcShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLm5vbmUoUC5lcShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDdYX25vbmVYZXFYN1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDcpLm5vbmUoUC5lcSg3KSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCg3KS5ub25lKFAuZXEoNykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDcpLm5vbmUoUC5lcSg3KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLm5vbmUoUC5lcShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pig3KS5Ob25lKFAuRXEoNykpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNykuTm9uZShncmVtbGluZ28uUC5FcSg3KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoNykubm9uZShQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoNykubm9uZShQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNykubm9uZShQLmVxKDcpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCg3KS5ub25lKFAuZXEoNykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsXzFfZW1wdHlYX25vbmVYZXFYbnVsbFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtudWxsLDFdLFtdKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIDFdLCBbXSkubm9uZShQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbbnVsbCwgMV0sIFtdKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCwgbGlzdDEpLm5vbmUoUC5lcShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgMSB9LCBuZXcgTGlzdDxvYmplY3Q+IHsgIH0pLk5vbmUoUC5FcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e25pbCwgMX0sIFtdaW50ZXJmYWNle317fSkuTm9uZShncmVtbGluZ28uUC5FcShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbbnVsbCwgMV0sIFtdKS5ub25lKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobnVsbCk7IGFkZCgxKTsgfX0sIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7ICB9fSkubm9uZShQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIDFdLCBbXSkubm9uZShQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbTm9uZSwgMV0sIFtdKS5ub25lKFAuZXEoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsX251bGxYX25vbmVYbm90WG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbbnVsbCxudWxsXSkubm9uZShQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbbnVsbCwgbnVsbF0pLm5vbmUoUC5uZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkubm9uZShQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5ub25lKFAubmVxKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBudWxsLCBudWxsIH0pLk5vbmUoUC5OZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIG5pbH0pLk5vbmUoZ3JlbWxpbmdvLlAuTmVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkubm9uZShQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChudWxsKTsgYWRkKG51bGwpOyB9fSkubm9uZShQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkubm9uZShQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoW05vbmUsIE5vbmVdKS5ub25lKFAubmVxKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYM190aHJlZVhfbm9uZVhlcVgzWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzNpLFwidGhyZWVcIl0pLm5vbmUoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbM2ksIFwidGhyZWVcIl0pLm5vbmUoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzNpLCBcInRocmVlXCJdKS5ub25lKFAuZXEoMykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkubm9uZShQLmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuTm9uZShQLkVxKDMpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317aW50MzIoMyksIFwidGhyZWVcIn0pLk5vbmUoZ3JlbWxpbmdvLlAuRXEoMykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFszaSwgXCJ0aHJlZVwiXSkubm9uZShQLmVxKDMpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoXCJ0aHJlZVwiKTsgfX0pLm5vbmUoUC5lcSgzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5ub25lKFAuZXEoMykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFszLCAndGhyZWUnXSkubm9uZShQLmVxKDMpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX25vdFhoYXNYYWdlX2d0XzI3WFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ub3QoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMjcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ub3QoX18uaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTm90KF9fLkhhcyhcImFnZVwiLCBQLkd0KDI3KSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk5vdChncmVtbGluZ28uVF9fLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgyNykpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ub3QoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMjcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubm90KF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubm90XyhfXy5oYXMoJ2FnZScsIFAuZ3QoMjcpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ub3RYbm90WGhhc1hhZ2VfZ3RfMjdYWFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ub3QoX18ubm90KF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubm90KF9fLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ub3QoX18ubm90KF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ub3QoX18ubm90KF9fLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSkpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Ob3QoX18uTm90KF9fLkhhcyhcImFnZVwiLCBQLkd0KDI3KSkpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Ob3QoZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuR3QoMjcpKSkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubm90KF9fLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubm90KF9fLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubm90KF9fLm5vdChfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ub3RfKF9fLm5vdF8oX18uaGFzKCdhZ2UnLCBQLmd0KDI3KSkpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX25vdFhoYXNYbmFtZV9ndF8yN1hYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubm90KF9fLmhhcyhcIm5hbWVcIiwgUC5ndCgyNykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubm90KF9fLmhhcyhcIm5hbWVcIiwgUC5ndCgyNykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm5vdChfXy5oYXMoXCJuYW1lXCIsIFAuZ3QoMjcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubm90KF9fLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk5vdChfXy5IYXMoXCJuYW1lXCIsIFAuR3QoMjcpKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTm90KGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5HdCgyNykpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm5vdChfXy5oYXMoXCJuYW1lXCIsIFAuZ3QoMjcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubm90KF9fLmhhcyhcIm5hbWVcIiwgUC5ndCgyNykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ub3QoX18uaGFzKFwibmFtZVwiLCBQLmd0KDI3KSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubm90XyhfXy5oYXMoJ25hbWUnLCBQLmd0KDI3KSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3JYaGFzWGFnZV9ndF8yN1hfX291dEVfY291bnRfZ3RlXzJYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3IoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMjcpKSwgX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3IoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMjcpKSwgX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yKF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3IoX18uaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpLCBfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0ZShudW1iZXIxKSkpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PcihfXy5IYXMoXCJhZ2VcIiwgUC5HdCgyNykpLCBfXy5PdXRFKCkuQ291bnQoKS5JcyhQLkd0ZSgyKSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk9yKGdyZW1saW5nby5UX18uSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLkd0KDI3KSksIGdyZW1saW5nby5UX18uT3V0RSgpLkNvdW50KCkuSXMoZ3JlbWxpbmdvLlAuR3RlKDIpKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcihfXy5oYXMoXCJhZ2VcIiwgUC5ndCgyNykpLCBfXy5vdXRFKCkuY291bnQoKS5pcyhQLmd0ZSgyKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm9yKF9fLmhhcyhcImFnZVwiLCBQLmd0KDI3KSksIF9fLm91dEUoKS5jb3VudCgpLmlzKFAuZ3RlKDIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3IoX18uaGFzKFwiYWdlXCIsIFAuZ3QoMjcpKSwgX18ub3V0RSgpLmNvdW50KCkuaXMoUC5ndGUoMikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yXyhfXy5oYXMoJ2FnZScsIFAuZ3QoMjcpKSwgX18ub3V0X2UoKS5jb3VudCgpLmlzXyhQLmd0ZSgyKSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3JYb3V0RVhrbm93c1hfX2hhc1hsYWJlbF9zb2Z0d2FyZVhfb3JfaGFzWGFnZV9ndGVfMzVYWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm9yKF9fLm91dEUoXCJrbm93c1wiKSwgX18uaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikub3IoKS5oYXMoXCJhZ2VcIiwgUC5ndGUoMzUpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm9yKF9fLm91dEUoXCJrbm93c1wiKSwgX18uaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikub3IoKS5oYXMoXCJhZ2VcIiwgUC5ndGUoMzUpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcihfXy5vdXRFKFwia25vd3NcIiksIF9fLmhhcyhULmxhYmVsLCBcInNvZnR3YXJlXCIpLm9yKCkuaGFzKFwiYWdlXCIsIFAuZ3RlKDM1KSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm9yKF9fLm91dEUoc3RyaW5nMCksIF9fLmhhcyhULmxhYmVsLCBzdHJpbmcxKS5vcigpLmhhcyhzdHJpbmcyLCBQLmd0ZShudW1iZXIwKSkpLnZhbHVlcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PcihfXy5PdXRFKFwia25vd3NcIiksIF9fLkhhcyhULkxhYmVsLCBcInNvZnR3YXJlXCIpLk9yKCkuSGFzKFwiYWdlXCIsIFAuR3RlKDM1KSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk9yKGdyZW1saW5nby5UX18uT3V0RShcImtub3dzXCIpLCBncmVtbGluZ28uVF9fLkhhcyhncmVtbGluZ28uVC5MYWJlbCwgXCJzb2Z0d2FyZVwiKS5PcigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdGUoMzUpKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcihfXy5vdXRFKFwia25vd3NcIiksIF9fLmhhcyhULmxhYmVsLCBcInNvZnR3YXJlXCIpLm9yKCkuaGFzKFwiYWdlXCIsIFAuZ3RlKDM1KSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm9yKF9fLm91dEUoXCJrbm93c1wiKSwgX18uaGFzKFQubGFiZWwsIFwic29mdHdhcmVcIikub3IoKS5oYXMoXCJhZ2VcIiwgUC5ndGUoMzUpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3IoX18ub3V0RShcImtub3dzXCIpLCBfXy5oYXMoVC5sYWJlbCwgXCJzb2Z0d2FyZVwiKS5vcigpLmhhcyhcImFnZVwiLCBQLmd0ZSgzNSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yXyhfXy5vdXRfZSgna25vd3MnKSwgX18uaGFzKFQubGFiZWwsICdzb2Z0d2FyZScpLm9yXygpLmhhcygnYWdlJywgUC5ndGUoMzUpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vclhzZWxlY3RYYVhfc2VsZWN0WGFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3IoX18uc2VsZWN0KFwiYVwiKSwgX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3IoX18uc2VsZWN0KFwiYVwiKSwgX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm9yKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vcihfXy5zZWxlY3Qoc3RyaW5nMCksIF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk9yKF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSwgX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PcihncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIiksIGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm9yKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3IoX18uc2VsZWN0KFwiYVwiKSwgX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vcihfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vcl8oX18uc2VsZWN0KCdhJyksIF9fLnNlbGVjdCgnYScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dF9saW1pdFgyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dCgpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KCkubGltaXQobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLkxpbWl0PG9iamVjdD4oMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkuTGltaXQoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfbGltaXRYMnZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpLmxpbWl0KHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpLmxpbWl0KHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLkxpbWl0PG9iamVjdD4oKGxvbmcpIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkuTGltaXQoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkubGltaXQoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dCgpLmxpbWl0KHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKS5saW1pdCh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5saW1pdCh4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYb3V0RV9saW1pdFgxWF9pblZYX2xpbWl0WDNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5saW1pdCgxKSkuaW5WKCkubGltaXQoMykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkubGltaXQoMSkpLmluVigpLmxpbWl0KDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5saW1pdCgxKSkuaW5WKCkubGltaXQoMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5saW1pdChudW1iZXIwKSkuaW5WKCkubGltaXQobnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5PdXRFKCkuTGltaXQ8b2JqZWN0PigxKSkuSW5WKCkuTGltaXQ8b2JqZWN0PigzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uT3V0RSgpLkxpbWl0KDEpKS5JblYoKS5MaW1pdCgzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkubGltaXQoMSkpLmluVigpLmxpbWl0KDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkubGltaXQoMSkpLmluVigpLmxpbWl0KDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkubGltaXQoMSkpLmluVigpLmxpbWl0KDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLm91dF9lKCkubGltaXQoMSkpLmluX3YoKS5saW1pdCgzKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dFhrbm93c1hfb3V0RVhjcmVhdGVkWF9yYW5nZVgwXzFYX2luViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikub3V0RShcImNyZWF0ZWRcIikucmFuZ2UoMCwgMSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikub3V0RShcImNyZWF0ZWRcIikucmFuZ2UoMCwgMSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLm91dEUoXCJjcmVhdGVkXCIpLnJhbmdlKDAsIDEpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHN0cmluZzApLm91dEUoc3RyaW5nMSkucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIpLk91dEUoXCJjcmVhdGVkXCIpLlJhbmdlPG9iamVjdD4oMCwgMSkuSW5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KFwia25vd3NcIikuT3V0RShcImNyZWF0ZWRcIikuUmFuZ2UoMCwgMSkuSW5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLm91dEUoXCJjcmVhdGVkXCIpLnJhbmdlKDAsIDEpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikub3V0RShcImNyZWF0ZWRcIikucmFuZ2UoMCwgMSkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5vdXRFKFwiY3JlYXRlZFwiKS5yYW5nZSgwLCAxKS5pblYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCdrbm93cycpLm91dF9lKCdjcmVhdGVkJykucmFuZ2VfKDAsIDEpLmluX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dFhrbm93c1hfb3V0WGNyZWF0ZWRYX3JhbmdlWDBfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLm91dChcImNyZWF0ZWRcIikucmFuZ2UoMCwgMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikub3V0KFwiY3JlYXRlZFwiKS5yYW5nZSgwLCAxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikub3V0KFwiY3JlYXRlZFwiKS5yYW5nZSgwLCAxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dChzdHJpbmcwKS5vdXQoc3RyaW5nMSkucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIpLk91dChcImNyZWF0ZWRcIikuUmFuZ2U8b2JqZWN0PigwLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJrbm93c1wiKS5PdXQoXCJjcmVhdGVkXCIpLlJhbmdlKDAsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5vdXQoXCJjcmVhdGVkXCIpLnJhbmdlKDAsIDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikub3V0KFwiY3JlYXRlZFwiKS5yYW5nZSgwLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLm91dChcImNyZWF0ZWRcIikucmFuZ2UoMCwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgna25vd3MnKS5vdXQoJ2NyZWF0ZWQnKS5yYW5nZV8oMCwgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfcmFuZ2VYMV8zWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikucmFuZ2UoMSwgMykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikucmFuZ2UoMSwgMykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHN0cmluZzApLmluKHN0cmluZzApLnJhbmdlKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5SYW5nZTxvYmplY3Q+KDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLlJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5yYW5nZSgxLCAzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbl8oXCJjcmVhdGVkXCIpLnJhbmdlKDEsIDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS5yYW5nZV8oMSwgMykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfcmFuZ2VYMXZhcl8zdmFyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikucmFuZ2UoeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnJhbmdlKHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikucmFuZ2UoeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHN0cmluZzApLmluKHN0cmluZzApLnJhbmdlKHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuUmFuZ2U8b2JqZWN0PigobG9uZykgeHgxLCAobG9uZykgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5SYW5nZSh4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnJhbmdlKHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnJhbmdlKHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS5yYW5nZSh4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgnY3JlYXRlZCcpLmluXygnY3JlYXRlZCcpLnJhbmdlXyh4eDEsIHh4MikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRYY3JlYXRlZFhfaW5FWGNyZWF0ZWRYX3JhbmdlWDFfM1hfb3V0ViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbkUoXCJjcmVhdGVkXCIpLnJhbmdlKDEsIDMpLm91dFYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluRShcImNyZWF0ZWRcIikucmFuZ2UoMSwgMykub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluRShcImNyZWF0ZWRcIikucmFuZ2UoMSwgMykub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHN0cmluZzApLmluRShzdHJpbmcwKS5yYW5nZShudW1iZXIwLCBudW1iZXIxKS5vdXRWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImNyZWF0ZWRcIikuSW5FKFwiY3JlYXRlZFwiKS5SYW5nZTxvYmplY3Q+KDEsIDMpLk91dFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJjcmVhdGVkXCIpLkluRShcImNyZWF0ZWRcIikuUmFuZ2UoMSwgMykuT3V0VigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluRShcImNyZWF0ZWRcIikucmFuZ2UoMSwgMykub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbkUoXCJjcmVhdGVkXCIpLnJhbmdlKDEsIDMpLm91dFYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW5FKFwiY3JlYXRlZFwiKS5yYW5nZSgxLCAzKS5vdXRWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgnY3JlYXRlZCcpLmluX2UoJ2NyZWF0ZWQnKS5yYW5nZV8oMSwgMykub3V0X3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhib3RoWF90aW1lc1gzWF9yYW5nZVg1XzExWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5yYW5nZSg1LCAxMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5yYW5nZSg1LCAxMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykucmFuZ2UoNSwgMTEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyhudW1iZXIwKS5yYW5nZShudW1iZXIxLCBudW1iZXIyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uQm90aCgpKS5UaW1lcygzKS5SYW5nZTxvYmplY3Q+KDUsIDExKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKSkuVGltZXMoMykuUmFuZ2UoNSwgMTEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLnJhbmdlKDUsIDExKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykucmFuZ2UoNSwgMTEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS5yYW5nZSg1LCAxMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykucmFuZ2VfKDUsIDExKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX2luX2FzWGJYX2luX2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfbGltaXRYbG9jYWxfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmluKCkuYXMoXCJiXCIpLmluKCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIixcImJcIixcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikuaW4oKS5hcyhcImJcIikuaW4oKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5saW1pdChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLmluKCkuYXMoc3RyaW5nMSkuaW4oKS5hcyhzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuYnkoc3RyaW5nMykubGltaXQoU2NvcGUubG9jYWwsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5JbigpLkFzKFwiYlwiKS5JbigpLkFzKFwiY1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuSW4oKS5BcyhcImJcIikuSW4oKS5BcyhcImNcIikuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5MaW1pdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLmluKCkuYXMoXCJiXCIpLmluKCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikubGltaXQoU2NvcGUubG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikuaW5fKCkuYXMoXCJiXCIpLmluXygpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5pbl8oKS5hc18oJ2InKS5pbl8oKS5hc18oJ2MnKS5zZWxlY3QoJ2EnLCAnYicsICdjJykuYnkoJ25hbWUnKS5saW1pdChTY29wZS5sb2NhbCwgMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9pbl9hc1hiWF9pbl9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX2xpbWl0WGxvY2FsXzJ2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsXCJiXCIsXCJjXCIpLmJ5KFwibmFtZVwiKS5saW1pdChTY29wZS5sb2NhbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5pbigpLmFzKHN0cmluZzEpLmluKCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmJ5KHN0cmluZzMpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5JbigpLkFzKFwiYlwiKS5JbigpLkFzKFwiY1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgKGxvbmcpIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuSW4oKS5BcyhcImJcIikuSW4oKS5BcyhcImNcIikuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5MaW1pdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLmluKCkuYXMoXCJiXCIpLmluKCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikubGltaXQoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikuaW5fKCkuYXMoXCJiXCIpLmluXygpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLmluXygpLmFzXygnYicpLmluXygpLmFzXygnYycpLnNlbGVjdCgnYScsICdiJywgJ2MnKS5ieSgnbmFtZScpLmxpbWl0KFNjb3BlLmxvY2FsLCB4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfaW5fYXNYYlhfaW5fYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9saW1pdFhsb2NhbF8xWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikuaW4oKS5hcyhcImJcIikuaW4oKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLFwiYlwiLFwiY1wiKS5ieShcIm5hbWVcIikubGltaXQoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLmluKCkuYXMoXCJiXCIpLmluKCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikubGltaXQoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKS5pbigpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkuaW4oKS5hcyhzdHJpbmcxKS5pbigpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5ieShzdHJpbmczKS5saW1pdChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLkluKCkuQXMoXCJiXCIpLkluKCkuQXMoXCJjXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5JbigpLkFzKFwiYlwiKS5JbigpLkFzKFwiY1wiKS5TZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoXCJuYW1lXCIpLkxpbWl0KGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLmluKCkuYXMoXCJiXCIpLmluKCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikubGltaXQoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikuaW4oKS5hcyhcImJcIikuaW4oKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5pbl8oKS5hcyhcImJcIikuaW5fKCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikubGltaXQoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLmluXygpLmFzXygnYicpLmluXygpLmFzXygnYycpLnNlbGVjdCgnYScsICdiJywgJ2MnKS5ieSgnbmFtZScpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF9yYW5nZVhsb2NhbF8xXzNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIixcImJcIixcImNcIikuYnkoXCJuYW1lXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcxKS5vdXQoKS5hcyhzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuYnkoc3RyaW5nMykucmFuZ2UoU2NvcGUubG9jYWwsIG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuT3V0KCkuQXMoXCJjXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuT3V0KCkuQXMoXCJjXCIpLlNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuUmFuZ2UoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxLCAzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYicpLm91dCgpLmFzXygnYycpLnNlbGVjdCgnYScsICdiJywgJ2MnKS5ieSgnbmFtZScpLnJhbmdlXyhTY29wZS5sb2NhbCwgMSwgMykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfcmFuZ2VYbG9jYWxfMXZhcl8zdmFyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsXCJiXCIsXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkub3V0KCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmJ5KHN0cmluZzMpLnJhbmdlKFNjb3BlLmxvY2FsLCB4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5PdXQoKS5BcyhcImNcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoXCJuYW1lXCIpLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIChsb25nKSB4eDEsIChsb25nKSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5PdXQoKS5BcyhcImNcIikuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5SYW5nZShncmVtbGluZ28uU2NvcGUuTG9jYWwsIHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCB4eDEsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIHh4MSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgeHgxLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYicpLm91dCgpLmFzXygnYycpLnNlbGVjdCgnYScsICdiJywgJ2MnKS5ieSgnbmFtZScpLnJhbmdlXyhTY29wZS5sb2NhbCwgeHgxLCB4eDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3JhbmdlWGxvY2FsXzFfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLFwiYlwiLFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzEpLm91dCgpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5ieShzdHJpbmczKS5yYW5nZShTY29wZS5sb2NhbCwgbnVtYmVyMCwgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5PdXQoKS5BcyhcImNcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoXCJuYW1lXCIpLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5PdXQoKS5BcyhcImNcIikuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5SYW5nZShncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdiJykub3V0KCkuYXNfKCdjJykuc2VsZWN0KCdhJywgJ2InLCAnYycpLmJ5KCduYW1lJykucmFuZ2VfKFNjb3BlLmxvY2FsLCAxLCAyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfb3JkZXJfYnlYYWdlWF9za2lwWDFYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpLnNraXAoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5vcmRlcigpLmJ5KHN0cmluZzEpLnNraXAobnVtYmVyMCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLk9yZGVyKCkuQnkoXCJhZ2VcIikuU2tpcDxvYmplY3Q+KDEpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLk9yZGVyKCkuQnkoXCJhZ2VcIikuU2tpcCgxKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpLnNraXAoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiKS5za2lwKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5vcmRlcigpLmJ5KCdhZ2UnKS5za2lwKDEpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3NraXBYMXZhclhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCh4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpLnNraXAoeHgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCh4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLm9yZGVyKCkuYnkoc3RyaW5nMSkuc2tpcCh4eDEpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5PcmRlcigpLkJ5KFwiYWdlXCIpLlNraXA8b2JqZWN0PigobG9uZykgeHgxKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5PcmRlcigpLkJ5KFwiYWdlXCIpLlNraXAoeHgxKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCh4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCh4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikuc2tpcCh4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5vcmRlcigpLmJ5KCdhZ2UnKS5za2lwKHh4MSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkWF9yYW5nZVhsb2NhbF82XzdYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5yYW5nZShTY29wZS5sb2NhbCwgNiwgNykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb2xkKCkucmFuZ2UoU2NvcGUubG9jYWwsIDYsIDcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZvbGQoKS5yYW5nZShTY29wZS5sb2NhbCwgNiwgNykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5yYW5nZShTY29wZS5sb2NhbCwgbnVtYmVyMCwgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRm9sZCgpLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDYsIDcpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRm9sZCgpLlJhbmdlKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgNiwgNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZm9sZCgpLnJhbmdlKFNjb3BlLmxvY2FsLCA2LCA3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLnJhbmdlKFNjb3BlLmxvY2FsLCA2LCA3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpLnJhbmdlKFNjb3BlLmxvY2FsLCA2LCA3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkucmFuZ2VfKFNjb3BlLmxvY2FsLCA2LCA3KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dEVfdmFsdWVzWHdlaWdodFhfZm9sZF9vcmRlclhsb2NhbFhfc2tpcFhsb2NhbF8yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLkZvbGQoKS5PcmRlcihTY29wZS5Mb2NhbCkuU2tpcDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuRm9sZCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuU2tpcChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5za2lwKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRFX3ZhbHVlc1h3ZWlnaHRYX2ZvbGRfb3JkZXJYbG9jYWxYX3NraXBYbG9jYWxfMnZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLkZvbGQoKS5PcmRlcihTY29wZS5Mb2NhbCkuU2tpcDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAobG9uZykgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuRm9sZCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuU2tpcChncmVtbGluZ28uU2NvcGUuTG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLnNraXAoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5za2lwKFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuc2tpcChTY29wZS5sb2NhbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXRfZSgpLnZhbHVlcygnd2VpZ2h0JykuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5za2lwKFNjb3BlLmxvY2FsLCB4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VYX3ZhbHVlc1huYW1lWF9za2lwWDFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKS5za2lwKDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnNraXAoMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnNraXAoMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLm9yZGVyKCkuYnkoc3RyaW5nMSkudmFsdWVzKHN0cmluZzIpLnNraXAobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuT3JkZXIoKS5CeShcImFnZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuU2tpcDxvYmplY3Q+KDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuT3JkZXIoKS5CeShcImFnZVwiKS5WYWx1ZXMoXCJuYW1lXCIpLlNraXAoMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnNraXAoMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKS5za2lwKDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikuc2tpcCgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLm9yZGVyKCkuYnkoJ2FnZScpLnZhbHVlcygnbmFtZScpLnNraXAoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF92YWx1ZXNYYWdlWF9yYW5nZVhsb2NhbF8yMF8zMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMjAsIDMwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikucmFuZ2UoU2NvcGUubG9jYWwsIDIwLCAzMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMjAsIDMwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnZhbHVlcyhzdHJpbmcwKS5yYW5nZShTY29wZS5sb2NhbCwgbnVtYmVyMCwgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDIwLCAzMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuVmFsdWVzKFwiYWdlXCIpLlJhbmdlKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMjAsIDMwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAyMCwgMzApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAyMCwgMzApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAyMCwgMzApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS52YWx1ZXMoJ2FnZScpLnJhbmdlXyhTY29wZS5sb2NhbCwgMjAsIDMwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hcFhpbl9oYXNJZFgxWFhfbGltaXRYMlhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hcChfXy5pbigpLmhhc0lkKHZpZDEpKS5saW1pdCgyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWFwKF9fLmluKCkuaGFzSWQodmlkMSkpLmxpbWl0KDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWFwKF9fLmluKCkuaGFzSWQodmlkMSkpLmxpbWl0KDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hcChfXy5pbigpLmhhc0lkKHZpZDEpKS5saW1pdChudW1iZXIwKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWFwPG9iamVjdD4oX18uSW4oKS5IYXNJZCh2aWQxKSkuTGltaXQ8b2JqZWN0PigyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXAoZ3JlbWxpbmdvLlRfXy5JbigpLkhhc0lkKHZpZDEpKS5MaW1pdCgyKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hcChfXy5pbigpLmhhc0lkKHZpZDEpKS5saW1pdCgyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXAoX18uaW4oKS5oYXNJZCh2aWQxKSkubGltaXQoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWFwKF9fLmluXygpLmhhc0lkKHZpZDEpKS5saW1pdCgyKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hcChfXy5pbl8oKS5oYXNfaWQodmlkMSkpLmxpbWl0KDIpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmFuZ2VYMl8xWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yYW5nZSgyLCAxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJhbmdlKDIsIDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJhbmdlKDIsIDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yYW5nZShudW1iZXIwLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SYW5nZTxvYmplY3Q+KDIsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmFuZ2UoMiwgMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmFuZ2UoMiwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJhbmdlKDIsIDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yYW5nZSgyLCAxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yYW5nZV8oMiwgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yYW5nZVgzXzJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJhbmdlKDMsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmFuZ2UoMywgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmFuZ2UoMywgMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJhbmdlKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJhbmdlPG9iamVjdD4oMywgMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SYW5nZSgzLCAyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yYW5nZSgzLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmFuZ2UoMywgMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJhbmdlKDMsIDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJhbmdlXygzLCAyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbGlzdFgxXzJfM1hYX3JhbmdlWGxvY2FsXzFfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMiwgM10pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMiwgM10pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnJhbmdlKFNjb3BlLmxvY2FsLCBudW1iZXIwLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzIH0pLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzfSkuUmFuZ2UoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMiwgM10pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IGFkZCgzKTsgfX0pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5yYW5nZV8oU2NvcGUubG9jYWwsIDEsIDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhsaXN0WDFfMl8zWFhfbGltaXRYbG9jYWxfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMiwgM10pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMiwgM10pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmxpbWl0KFNjb3BlLmxvY2FsLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzIH0pLkxpbWl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzfSkuTGltaXQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMiwgM10pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IGFkZCgzKTsgfX0pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGxpc3RYMV8yXzNYX2xpbWl0WGxvY2FsXzFYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgM10pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxLCAyLCAzXSkubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxLCAyLCAzXSkubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkubGltaXQoU2NvcGUubG9jYWwsIG51bWJlcjApLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMgfSkuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317MSwgMiwgM30pLkxpbWl0KGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAyLCAzXSkubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAyLCAzXSkubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzJfM180XzVYX2xpbWl0WGxvY2FsXzFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDQsIDVdKS5saW1pdChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMl0sIFszLCA0LCA1XSkubGltaXQoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDQsIDVdKS5saW1pdChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwLCBsaXN0MSkubGltaXQoU2NvcGUubG9jYWwsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDMsIDQsIDUgfSkuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezEsIDJ9LCBbXWludGVyZmFjZXt9ezMsIDQsIDV9KS5MaW1pdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDQsIDVdKS5saW1pdChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyB9fSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoNCk7IGFkZCg1KTsgfX0pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDJdLCBbMywgNCwgNV0pLmxpbWl0KFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMl0sIFszLCA0LCA1XSkubGltaXQoU2NvcGUubG9jYWwsIDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzJfM180XzVfNlhfcmFuZ2VYbG9jYWxfMV8yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzEsIDIsIDNdLCBbNCwgNSwgNl0pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCwgbGlzdDEpLnJhbmdlKFNjb3BlLmxvY2FsLCBudW1iZXIwLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzIH0sIG5ldyBMaXN0PG9iamVjdD4geyA0LCA1LCA2IH0pLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzfSwgW11pbnRlcmZhY2V7fXs0LCA1LCA2fSkuUmFuZ2UoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgYWRkKDMpOyB9fSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDQpOyBhZGQoNSk7IGFkZCg2KTsgfX0pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDIsIDNdLCBbNCwgNSwgNl0pLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkucmFuZ2VfKFNjb3BlLmxvY2FsLCAxLCAyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDVYX3JlcGVhdFhsaW1pdFgxWF9pblhfdGltZXNYMlhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5yZXBlYXQobGltaXQoMSkuaW4oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQobnVtYmVyMCkuaW4oKSkudGltZXMobnVtYmVyMSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ1KS5SZXBlYXQoX18uTGltaXQ8b2JqZWN0PigxKS5JbigpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNSkuUmVwZWF0KGdyZW1saW5nby5UX18uTGltaXQoMSkuSW4oKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluXygpKS50aW1lcygyKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDVYX3JlcGVhdFhsaW1pdFgxWF9pblhfdW50aWxYbG9vcHNYaXNYMlhYWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDUpLnJlcGVhdChsaW1pdCgxKS5pbigpKS51bnRpbChsb29wcygpLmlzKDIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbigpKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdChudW1iZXIwKS5pbigpKS51bnRpbChfXy5sb29wcygpLmlzKG51bWJlcjEpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLlJlcGVhdChfXy5MaW1pdDxvYmplY3Q+KDEpLkluKCkpLlVudGlsKF9fLkxvb3BzKCkuSXMoMikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ1KS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5MaW1pdCgxKS5JbigpKS5VbnRpbChncmVtbGluZ28uVF9fLkxvb3BzKCkuSXMoMikpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbigpKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudW50aWwoX18ubG9vcHMoKS5pc18oMikpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNVhfbGltaXRYMVhfaW5fbGltaXRYMVhfaW5fdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5saW1pdCgxKS5pbigpLmxpbWl0KDEpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ1KS5saW1pdCgxKS5pbigpLmxpbWl0KDEpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNSkubGltaXQoMSkuaW4oKS5saW1pdCgxKS5pbigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5saW1pdChudW1iZXIwKS5pbigpLmxpbWl0KG51bWJlcjApLmluKCkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ1KS5MaW1pdDxvYmplY3Q+KDEpLkluKCkuTGltaXQ8b2JqZWN0PigxKS5JbigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ1KS5MaW1pdCgxKS5JbigpLkxpbWl0KDEpLkluKCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNSkubGltaXQoMSkuaW4oKS5saW1pdCgxKS5pbigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5saW1pdCgxKS5pbigpLmxpbWl0KDEpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDUpLmxpbWl0KDEpLmluXygpLmxpbWl0KDEpLmluXygpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLmxpbWl0KDEpLmluXygpLmxpbWl0KDEpLmluXygpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luWF90aW1lc1gxWF9yZXBlYXRYbGltaXRYMVhfaW5YX3RpbWVzWDFYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNSkucmVwZWF0KGxpbWl0KDEpLmluKCkpLnRpbWVzKDEpLnJlcGVhdChsaW1pdCgxKS5pbigpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbigpKS50aW1lcygxKS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkpLnRpbWVzKDEpLnJlcGVhdChfXy5saW1pdCgxKS5pbigpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KG51bWJlcjApLmluKCkpLnRpbWVzKG51bWJlcjApLnJlcGVhdChfXy5saW1pdChudW1iZXIwKS5pbigpKS50aW1lcyhudW1iZXIwKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLlJlcGVhdChfXy5MaW1pdDxvYmplY3Q+KDEpLkluKCkpLlRpbWVzKDEpLlJlcGVhdChfXy5MaW1pdDxvYmplY3Q+KDEpLkluKCkpLlRpbWVzKDEpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ1KS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5MaW1pdCgxKS5JbigpKS5UaW1lcygxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5MaW1pdCgxKS5JbigpKS5UaW1lcygxKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKSkudGltZXMoMSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKSkudGltZXMoMSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnRpbWVzKDEpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluXygpKS50aW1lcygxKS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkpLnRpbWVzKDEpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNVhfcmVwZWF0WGxpbWl0WDFYX2luX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfY2FwWHhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5yZXBlYXQobGltaXQoMSkuaW4oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkuYWdncmVnYXRlKCd4JykpLnRpbWVzKDIpLmNhcCgneCcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQobnVtYmVyMCkuaW4oKS5hZ2dyZWdhdGUoc3RyaW5nMCkpLnRpbWVzKG51bWJlcjEpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNSkuUmVwZWF0KF9fLkxpbWl0PG9iamVjdD4oMSkuSW4oKS5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5DYXA8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNSkuUmVwZWF0KGdyZW1saW5nby5UX18uTGltaXQoMSkuSW4oKS5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5DYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKS5hZ2dyZWdhdGUoXCJ4XCIpKS50aW1lcygyKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluXygpLmFnZ3JlZ2F0ZShcInhcIikpLnRpbWVzKDIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbl8oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlg1WF9yZXBlYXRYcmFuZ2VYMF8xWF9pblhfdGltZXNYMlhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5yZXBlYXQocmFuZ2UoMCwgMSkuaW4oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkuaW4oKSkudGltZXMobnVtYmVyMikudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ1KS5SZXBlYXQoX18uUmFuZ2U8b2JqZWN0PigwLCAxKS5JbigpKS5UaW1lcygyKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNSkuUmVwZWF0KGdyZW1saW5nby5UX18uUmFuZ2UoMCwgMSkuSW4oKSkuVGltZXMoMikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluKCkpLnRpbWVzKDIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbl8oKSkudGltZXMoMikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlXygwLCAxKS5pbl8oKSkudGltZXMoMikudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlg1WF9yZXBlYXRYcmFuZ2VYMF8xWF9pblhfdW50aWxYbG9vcHNYaXNYMlhYWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDUpLnJlcGVhdChyYW5nZSgwLCAxKS5pbigpKS51bnRpbChsb29wcygpLmlzKDIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbigpKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZShudW1iZXIwLCBudW1iZXIxKS5pbigpKS51bnRpbChfXy5sb29wcygpLmlzKG51bWJlcjIpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLlJlcGVhdChfXy5SYW5nZTxvYmplY3Q+KDAsIDEpLkluKCkpLlVudGlsKF9fLkxvb3BzKCkuSXMoMikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ1KS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5SYW5nZSgwLCAxKS5JbigpKS5VbnRpbChncmVtbGluZ28uVF9fLkxvb3BzKCkuSXMoMikpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbigpKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW5fKCkpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZV8oMCwgMSkuaW5fKCkpLnVudGlsKF9fLmxvb3BzKCkuaXNfKDIpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDVYX3JhbmdlWDBfMVhfaW5fcmFuZ2VYMF8xWF9pbl92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDUpLnJhbmdlKDAsIDEpLmluKCkucmFuZ2UoMCwgMSkuaW4oKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLnJhbmdlKDAsIDEpLmluKCkucmFuZ2UoMCwgMSkuaW4oKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5yYW5nZSgwLCAxKS5pbigpLnJhbmdlKDAsIDEpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDUpLnJhbmdlKG51bWJlcjAsIG51bWJlcjEpLmluKCkucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkuaW4oKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLlJhbmdlPG9iamVjdD4oMCwgMSkuSW4oKS5SYW5nZTxvYmplY3Q+KDAsIDEpLkluKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLlJhbmdlKDAsIDEpLkluKCkuUmFuZ2UoMCwgMSkuSW4oKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5yYW5nZSgwLCAxKS5pbigpLnJhbmdlKDAsIDEpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLnJhbmdlKDAsIDEpLmluKCkucmFuZ2UoMCwgMSkuaW4oKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkucmFuZ2UoMCwgMSkuaW5fKCkucmFuZ2UoMCwgMSkuaW5fKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkucmFuZ2VfKDAsIDEpLmluXygpLnJhbmdlXygwLCAxKS5pbl8oKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDVYX3JlcGVhdFhyYW5nZVgwXzFYX2luX3JlcGVhdFhyYW5nZVgwXzFYX2luWF90aW1lc1gxWFhfdGltZXNYMVhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5yZXBlYXQocmFuZ2UoMCwgMSkuaW4oKS5yZXBlYXQocmFuZ2UoMCwgMSkuaW4oKSkudGltZXMoMSkpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluKCkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluKCkpLnRpbWVzKDEpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKSkudGltZXMoMSkpLnRpbWVzKDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkuaW4oKS5yZXBlYXQoX18ucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkuaW4oKSkudGltZXMobnVtYmVyMSkpLnRpbWVzKG51bWJlcjEpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNSkuUmVwZWF0KF9fLlJhbmdlPG9iamVjdD4oMCwgMSkuSW4oKS5SZXBlYXQoX18uUmFuZ2U8b2JqZWN0PigwLCAxKS5JbigpKS5UaW1lcygxKSkuVGltZXMoMSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLlJlcGVhdChncmVtbGluZ28uVF9fLlJhbmdlKDAsIDEpLkluKCkuUmVwZWF0KGdyZW1saW5nby5UX18uUmFuZ2UoMCwgMSkuSW4oKSkuVGltZXMoMSkpLlRpbWVzKDEpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbigpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbigpKS50aW1lcygxKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbigpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbigpKS50aW1lcygxKSkudGltZXMoMSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZSgwLCAxKS5pbl8oKS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW5fKCkpLnRpbWVzKDEpKS50aW1lcygxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2VfKDAsIDEpLmluXygpLnJlcGVhdChfXy5yYW5nZV8oMCwgMSkuaW5fKCkpLnRpbWVzKDEpKS50aW1lcygxKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDVYX3JlcGVhdFhyYW5nZVgwXzFYX2luX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfY2FwWHhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5yZXBlYXQocmFuZ2UoMCwgMSkuaW4oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluKCkuYWdncmVnYXRlKCd4JykpLnRpbWVzKDIpLmNhcCgneCcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UobnVtYmVyMCwgbnVtYmVyMSkuaW4oKS5hZ2dyZWdhdGUoc3RyaW5nMCkpLnRpbWVzKG51bWJlcjIpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNSkuUmVwZWF0KF9fLlJhbmdlPG9iamVjdD4oMCwgMSkuSW4oKS5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5DYXA8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNSkuUmVwZWF0KGdyZW1saW5nby5UX18uUmFuZ2UoMCwgMSkuSW4oKS5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5DYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikuY2FwKCd4JykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5yZXBlYXQoX18ucmFuZ2UoMCwgMSkuaW4oKS5hZ2dyZWdhdGUoXCJ4XCIpKS50aW1lcygyKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkucmVwZWF0KF9fLnJhbmdlKDAsIDEpLmluXygpLmFnZ3JlZ2F0ZShcInhcIikpLnRpbWVzKDIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLnJlcGVhdChfXy5yYW5nZV8oMCwgMSkuaW5fKCkuYWdncmVnYXRlKCd4JykpLnRpbWVzKDIpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWEVhcmx5TGltaXRTdHJhdGVneVhfVlg1WF9yZXBlYXRYbGltaXRYMVhfaW5fbGltaXRYMVhfbGltaXRYMVhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKHZpZDUpLnJlcGVhdChsaW1pdCgxKS5pbigpLmxpbWl0KDEpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbigpLmxpbWl0KDEpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW4oKS5saW1pdCgxKS5saW1pdCgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKHZpZDUpLnJlcGVhdChfXy5saW1pdChudW1iZXIwKS5pbigpLmxpbWl0KG51bWJlcjApLmxpbWl0KG51bWJlcjApKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihFYXJseUxpbWl0U3RyYXRlZ3kpKS5WKHZpZDUpLlJlcGVhdChfXy5MaW1pdDxvYmplY3Q+KDEpLkluKCkuTGltaXQ8b2JqZWN0PigxKS5MaW1pdDxvYmplY3Q+KDEpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkVhcmx5TGltaXRTdHJhdGVneSgpKS5WKHZpZDUpLlJlcGVhdChncmVtbGluZ28uVF9fLkxpbWl0KDEpLkluKCkuTGltaXQoMSkuTGltaXQoMSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKHZpZDUpLnJlcGVhdChfXy5saW1pdCgxKS5pbigpLmxpbWl0KDEpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kuY2xhc3MpLlYodmlkNSkucmVwZWF0KF9fLmxpbWl0KDEpLmluKCkubGltaXQoMSkubGltaXQoMSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkubGltaXQoMSkubGltaXQoMSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVih2aWQ1KS5yZXBlYXQoX18ubGltaXQoMSkuaW5fKCkubGltaXQoMSkubGltaXQoMSkpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WG91dF93aGVyZVhoYXNYbmFtZVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQob3V0KCkud2hlcmUoaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5vdXQoKS53aGVyZShfXy5oYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKS53aGVyZShfXy5oYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkud2hlcmUoX18uaGFzKHN0cmluZzApLm9yZGVyKCkuYnkoc3RyaW5nMSkubGltaXQobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uT3V0KCkuV2hlcmUoX18uSGFzKFwibmFtZVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDEpKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5XaGVyZShncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQoMSkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkud2hlcmUoX18uaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLndoZXJlKF9fLmhhcyhcIm5hbWVcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLndoZXJlKF9fLmhhcyhcIm5hbWVcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkud2hlcmUoX18uaGFzKCduYW1lJykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWF9vdXRfd2hlcmVYaGFzWG5hbWVYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS53aGVyZShoYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkub3V0KCkud2hlcmUoaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkud2hlcmUoX18uaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLm91dCgpLndoZXJlKF9fLmhhcyhcIm5hbWVcIikub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS53aGVyZShfXy5oYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkub3V0KCkud2hlcmUoX18uaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS53aGVyZShfXy5oYXMoc3RyaW5nMCkub3JkZXIoKS5ieShzdHJpbmcxKS5saW1pdChudW1iZXIwKSkub3V0KCkud2hlcmUoX18uaGFzKHN0cmluZzApLm9yZGVyKCkuYnkoc3RyaW5nMSkubGltaXQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLldoZXJlKF9fLkhhcyhcIm5hbWVcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PigxKSkuT3V0KCkuV2hlcmUoX18uSGFzKFwibmFtZVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLldoZXJlKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdCgxKSkuT3V0KCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS53aGVyZShfXy5oYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkub3V0KCkud2hlcmUoX18uaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS53aGVyZShfXy5oYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpKS5vdXQoKS53aGVyZShfXy5oYXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkud2hlcmUoX18uaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgxKSkub3V0KCkud2hlcmUoX18uaGFzKFwibmFtZVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkud2hlcmUoX18uaGFzKCduYW1lJykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKS5vdXQoKS53aGVyZShfXy5oYXMoJ25hbWUnKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVYSkFNWFhfcmVwZWF0WG91dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKCduYW1lJywnSkFNJykucmVwZWF0KG91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSkFNJykucmVwZWF0KF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKCduYW1lJywgJ0pBTScpLnJlcGVhdChfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkucmVwZWF0KF9fLm91dChzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjApKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiSkFNXCIpLlJlcGVhdChfXy5PdXQoXCJmb2xsb3dlZEJ5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0PG9iamVjdD4oMikpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIkpBTVwiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoXCJmb2xsb3dlZEJ5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0KDIpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSkFNJykucmVwZWF0KF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJKQU1cIikucmVwZWF0KF9fLm91dChcImZvbGxvd2VkQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiSkFNXCIpLnJlcGVhdChfXy5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSkFNJykucmVwZWF0KF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZVhKQU1YWF9vdXRYZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMlhfb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcygnbmFtZScsJ0pBTScpLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKS5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSkFNJykub3V0KCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSkFNJykub3V0KCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjApLm91dChzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJKQU1cIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDIpLk91dChcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PigyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJKQU1cIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdCgyKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcygnbmFtZScsICdKQU0nKS5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikub3V0KCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiSkFNXCIpLm91dChcImZvbGxvd2VkQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMikub3V0KFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkpBTVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpLm91dChcImZvbGxvd2VkQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ0pBTScpLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKS5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZVhEUlVNU1hYX3JlcGVhdFhpblhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhuYW1lWF9yYW5nZVgxXzRYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoJ25hbWUnLCdEUlVNUycpLnJlcGVhdChpbignZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5yYW5nZSgxLDQpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcygnbmFtZScsICdEUlVNUycpLnJlcGVhdChfXy5pbignZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5yYW5nZSgxLCA0KSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKCduYW1lJywgJ0RSVU1TJykucmVwZWF0KF9fLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnJlcGVhdChfXy5pbihzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzApLnJhbmdlKG51bWJlcjAsIG51bWJlcjEpKS50aW1lcyhudW1iZXIyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiRFJVTVNcIikuUmVwZWF0KF9fLkluKFwiZm9sbG93ZWRCeVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5SYW5nZTxvYmplY3Q+KDEsIDQpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJEUlVNU1wiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5JbihcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuUmFuZ2UoMSwgNCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcygnbmFtZScsICdEUlVNUycpLnJlcGVhdChfXy5pbignZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5yYW5nZSgxLCA0KSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJEUlVNU1wiKS5yZXBlYXQoX18uaW4oXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnJhbmdlKDEsIDQpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRSVU1TXCIpLnJlcGVhdChfXy5pbl8oXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnJhbmdlKDEsIDQpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnRFJVTVMnKS5yZXBlYXQoX18uaW5fKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlXygxLCA0KSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZVhEUlVNU1hYX2luWGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX3JhbmdlWDFfNFhfaW5YZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfcmFuZ2VYMV80WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoJ25hbWUnLCdEUlVNUycpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsNCkuaW4oJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykucmFuZ2UoMSw0KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcygnbmFtZScsICdEUlVNUycpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcygnbmFtZScsICdEUlVNUycpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuaW4oc3RyaW5nMikub3JkZXIoKS5ieShzdHJpbmcwKS5yYW5nZShudW1iZXIwLCBudW1iZXIxKS5pbihzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzApLnJhbmdlKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJEUlVNU1wiKS5JbihcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuUmFuZ2U8b2JqZWN0PigxLCA0KS5JbihcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuUmFuZ2U8b2JqZWN0PigxLCA0KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJEUlVNU1wiKS5JbihcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuUmFuZ2UoMSwgNCkuSW4oXCJmb2xsb3dlZEJ5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLlJhbmdlKDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcygnbmFtZScsICdEUlVNUycpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpLmluKCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLnJhbmdlKDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiRFJVTVNcIikuaW4oXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnJhbmdlKDEsIDQpLmluKFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yYW5nZSgxLCA0KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRSVU1TXCIpLmluXyhcImZvbGxvd2VkQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikucmFuZ2UoMSwgNCkuaW5fKFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yYW5nZSgxLCA0KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnRFJVTVMnKS5pbl8oJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykucmFuZ2VfKDEsIDQpLmluXygnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5yYW5nZV8oMSwgNCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYdmFsdWVzWGFnZVhfaXNYbHRlWDMwWFhfb3V0X29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYX291dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKHZhbHVlcygnYWdlJykuaXMobHRlKDMwKSksb3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpLG91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKS5pcyhQLmx0ZSgzMCkpLCBfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSksIF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygnYWdlJykuaXMoUC5sdGUoMzApKSwgX18ub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpLCBfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKHN0cmluZzApLmlzKFAubHRlKG51bWJlcjApKSwgX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcxKS5saW1pdChudW1iZXIxKSwgX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcxKS5saW1pdChudW1iZXIyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5MdGUoMzApKSwgX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PigxKSwgX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PigyKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuTHRlKDMwKSksIGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQoMSksIGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQoMikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoJ2FnZScpLmlzKFAubHRlKDMwKSksIF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSwgX18ub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSgzMCkpLCBfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgxKSwgX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAubHRlKDMwKSksIF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpLCBfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgyKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygnYWdlJykuaXNfKFAubHRlKDMwKSksIF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSwgX18ub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVh2YWx1ZXNYYWdlWF9pc1hsdGVYMzBYWF9sb2NhbFhvdXRfb3JkZXJfYnlYbmFtZVhfbGltaXRYMVhYX2xvY2FsWG91dF9vcmRlcl9ieVhuYW1lWF9saW1pdFgyWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNob29zZSh2YWx1ZXMoJ2FnZScpLmlzKGx0ZSgzMCkpLGxvY2FsKG91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSksbG9jYWwob3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKS5pcyhQLmx0ZSgzMCkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKCdhZ2UnKS5pcyhQLmx0ZSgzMCkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhzdHJpbmcwKS5pcyhQLmx0ZShudW1iZXIwKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMSkubGltaXQobnVtYmVyMSkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzEpLmxpbWl0KG51bWJlcjIpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5MdGUoMzApKSwgX18uTG9jYWw8b2JqZWN0PihfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDEpKSwgX18uTG9jYWw8b2JqZWN0PihfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuTHRlKDMwKSksIGdyZW1saW5nby5UX18uTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdCgxKSksIGdyZW1saW5nby5UX18uTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNob29zZShfXy52YWx1ZXMoJ2FnZScpLmlzKFAubHRlKDMwKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAubHRlKDMwKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpKSwgX18ubG9jYWwoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmx0ZSgzMCkpLCBfXy5sb2NhbChfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgxKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY2hvb3NlKF9fLnZhbHVlcygnYWdlJykuaXNfKFAubHRlKDMwKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSksIF9fLmxvY2FsKF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVYSEVZX0JPX0RJRERMRVlYWF91bmlvblhvdXRYZm9sbG93ZWRCeVhfb3JkZXJfYnlYbmFtZVhfbGltaXRYMlhfb3V0WHN1bmdCeVhfb3JkZXJfYnlYbmFtZVhfYnlYbmFtZVhfbGltaXRYMVhYX3VuaW9uWG91dFhmb2xsb3dlZEJ5WF9vcmRlcl9saW1pdFgyWF9vdXRYc3VuZ0J5WF9vcmRlcl9ieVhuYW1lWF9saW1pdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKCduYW1lJywnSEVZIEJPIERJRERMRVknKS51bmlvbihvdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMiksb3V0KCdzdW5nQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLnVuaW9uKG91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSxvdXQoJ3N1bmdCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSEVZIEJPIERJRERMRVknKS51bmlvbihfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMiksIF9fLm91dCgnc3VuZ0J5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKS51bmlvbihfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMiksIF9fLm91dCgnc3VuZ0J5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSEVZIEJPIERJRERMRVknKS51bmlvbihfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMiksIF9fLm91dCgnc3VuZ0J5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKS51bmlvbihfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMiksIF9fLm91dCgnc3VuZ0J5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnVuaW9uKF9fLm91dChzdHJpbmcyKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjApLCBfXy5vdXQoc3RyaW5nMykub3JkZXIoKS5ieShzdHJpbmcwKS5saW1pdChudW1iZXIxKSkudW5pb24oX18ub3V0KHN0cmluZzIpLm9yZGVyKCkuYnkoc3RyaW5nMCkubGltaXQobnVtYmVyMCksIF9fLm91dChzdHJpbmczKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiSEVZIEJPIERJRERMRVlcIikuVW5pb248b2JqZWN0PihfXy5PdXQoXCJmb2xsb3dlZEJ5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0PG9iamVjdD4oMiksIF9fLk91dChcInN1bmdCeVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDEpKS5VbmlvbjxvYmplY3Q+KF9fLk91dChcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PigyKSwgX18uT3V0KFwic3VuZ0J5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0PG9iamVjdD4oMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIkhFWSBCTyBESURETEVZXCIpLlVuaW9uKGdyZW1saW5nby5UX18uT3V0KFwiZm9sbG93ZWRCeVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdCgyKSwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJzdW5nQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQoMSkpLlVuaW9uKGdyZW1saW5nby5UX18uT3V0KFwiZm9sbG93ZWRCeVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5MaW1pdCgyKSwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJzdW5nQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcygnbmFtZScsICdIRVkgQk8gRElERExFWScpLnVuaW9uKF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSwgX18ub3V0KCdzdW5nQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLnVuaW9uKF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSwgX18ub3V0KCdzdW5nQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiSEVZIEJPIERJRERMRVlcIikudW5pb24oX18ub3V0KFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgyKSwgX18ub3V0KFwic3VuZ0J5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpKS51bmlvbihfXy5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpLCBfXy5vdXQoXCJzdW5nQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiSEVZIEJPIERJRERMRVlcIikudW5pb24oX18ub3V0KFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5saW1pdCgyKSwgX18ub3V0KFwic3VuZ0J5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDEpKS51bmlvbihfXy5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpLCBfXy5vdXQoXCJzdW5nQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdIRVkgQk8gRElERExFWScpLnVuaW9uKF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSwgX18ub3V0KCdzdW5nQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpLnVuaW9uKF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSwgX18ub3V0KCdzdW5nQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVYSEVZX0JPX0RJRERMRVlYWF9yZXBlYXRYdW5pb25Yb3V0WGZvbGxvd2VkQnlYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDJYX291dFhzdW5nQnlYX29yZGVyX2J5WG5hbWVYX2xpbWl0WDFYWFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKCduYW1lJywnSEVZIEJPIERJRERMRVknKS5yZXBlYXQodW5pb24ob3V0KCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpLG91dCgnc3VuZ0J5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSEVZIEJPIERJRERMRVknKS5yZXBlYXQoX18udW5pb24oX18ub3V0KCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpLCBfXy5vdXQoJ3N1bmdCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcygnbmFtZScsICdIRVkgQk8gRElERExFWScpLnJlcGVhdChfXy51bmlvbihfXy5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMiksIF9fLm91dCgnc3VuZ0J5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDEpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5yZXBlYXQoX18udW5pb24oX18ub3V0KHN0cmluZzIpLm9yZGVyKCkuYnkoc3RyaW5nMCkubGltaXQobnVtYmVyMCksIF9fLm91dChzdHJpbmczKS5vcmRlcigpLmJ5KHN0cmluZzApLmxpbWl0KG51bWJlcjEpKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIkhFWSBCTyBESURETEVZXCIpLlJlcGVhdChfXy5VbmlvbjxvYmplY3Q+KF9fLk91dChcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQ8b2JqZWN0PigyKSwgX18uT3V0KFwic3VuZ0J5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0PG9iamVjdD4oMSkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJIRVkgQk8gRElERExFWVwiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLk91dChcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuTGltaXQoMiksIGdyZW1saW5nby5UX18uT3V0KFwic3VuZ0J5XCIpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkxpbWl0KDEpKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKCduYW1lJywgJ0hFWSBCTyBESURETEVZJykucmVwZWF0KF9fLnVuaW9uKF9fLm91dCgnZm9sbG93ZWRCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgyKSwgX18ub3V0KCdzdW5nQnknKS5vcmRlcigpLmJ5KCduYW1lJykubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkhFWSBCTyBESURETEVZXCIpLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpLCBfXy5vdXQoXCJzdW5nQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkhFWSBCTyBESURETEVZXCIpLnJlcGVhdChfXy51bmlvbihfXy5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmxpbWl0KDIpLCBfXy5vdXQoXCJzdW5nQnlcIikub3JkZXIoKS5ieShcIm5hbWVcIikubGltaXQoMSkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnSEVZIEJPIERJRERMRVknKS5yZXBlYXQoX18udW5pb24oX18ub3V0KCdmb2xsb3dlZEJ5Jykub3JkZXIoKS5ieSgnbmFtZScpLmxpbWl0KDIpLCBfXy5vdXQoJ3N1bmdCeScpLm9yZGVyKCkuYnkoJ25hbWUnKS5saW1pdCgxKSkpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2FtcGxlWDFYX2J5WGFnZVhfYnlYVF9pZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnNhbXBsZSgxKS5ieShcImFnZVwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2FtcGxlKG51bWJlcjApLmJ5KHN0cmluZzApLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlNhbXBsZSgxKS5CeShcImFnZVwiKS5CeShULklkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlNhbXBsZSgxKS5CeShcImFnZVwiKS5CeShncmVtbGluZ28uVC5JZCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zYW1wbGUoMSkuYnkoXCJhZ2VcIikuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNhbXBsZSgxKS5ieShcImFnZVwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zYW1wbGUoMSkuYnkoJ2FnZScpLmJ5KFQuaWRfKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3NhbXBsZVgxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5zYW1wbGUoMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5zYW1wbGUoMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuc2FtcGxlKDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5zYW1wbGUobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuU2FtcGxlKDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuU2FtcGxlKDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnNhbXBsZSgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuc2FtcGxlKDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5zYW1wbGUoMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuc2FtcGxlKDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0Vfc2FtcGxlWDJYX2J5WHdlaWdodFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuc2FtcGxlKDIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuc2FtcGxlKDIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnNhbXBsZSgyKS5ieShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuc2FtcGxlKG51bWJlcjApLmJ5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlNhbXBsZSgyKS5CeShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlNhbXBsZSgyKS5CeShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5zYW1wbGUoMikuYnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnNhbXBsZSgyKS5ieShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuc2FtcGxlKDIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLnNhbXBsZSgyKS5ieSgnd2VpZ2h0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhvdXRFX3NhbXBsZVgxWF9ieVh3ZWlnaHRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuc2FtcGxlKDEpLmJ5KFwid2VpZ2h0XCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5zYW1wbGUoMSkuYnkoXCJ3ZWlnaHRcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5zYW1wbGUoMSkuYnkoXCJ3ZWlnaHRcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuc2FtcGxlKG51bWJlcjApLmJ5KHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLk91dEUoKS5TYW1wbGUoMSkuQnkoXCJ3ZWlnaHRcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXRFKCkuU2FtcGxlKDEpLkJ5KFwid2VpZ2h0XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuc2FtcGxlKDEpLmJ5KFwid2VpZ2h0XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18ub3V0RSgpLnNhbXBsZSgxKS5ieShcIndlaWdodFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5zYW1wbGUoMSkuYnkoXCJ3ZWlnaHRcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLm91dF9lKCkuc2FtcGxlKDEpLmJ5KCd3ZWlnaHQnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU2VlZFN0cmF0ZWd5WF9WX2dyb3VwX2J5WGxhYmVsWF9ieVhib3RoRV93ZWlnaHRfb3JkZXJfc2FtcGxlWDJYX2ZvbGRYdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneShzZWVkOiA5OTk5OTkpKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLnNhbXBsZSgyKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTk5KSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikub3JkZXIoKS5zYW1wbGUoMikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDo5OTk5OTkpKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLnNhbXBsZSgyKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDpudW1iZXIwKSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS5zYW1wbGUobnVtYmVyMSkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDogOTk5OTk5KSkuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFQuTGFiZWwpLkJ5KF9fLkJvdGhFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuT3JkZXIoKS5TYW1wbGUoMikuRm9sZCgpKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU2VlZFN0cmF0ZWd5KGdyZW1saW5nby5TZWVkU3RyYXRlZ3lDb25maWd7U2VlZDogOTk5OTk5fSkpLlYoKS5Hcm91cCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLk9yZGVyKCkuU2FtcGxlKDIpLkZvbGQoKSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTk5KSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikub3JkZXIoKS5zYW1wbGUoMikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kuYnVpbGQoKS5zZWVkKDk5OTk5OSkuY3JlYXRlKCkpLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm9yZGVyKCkuc2FtcGxlKDIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneSh7c2VlZDogOTk5OTk5fSkpLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm9yZGVyKCkuc2FtcGxlKDIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KHNlZWQ9OTk5OTk5KSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aF9lKCkudmFsdWVzKCd3ZWlnaHQnKS5vcmRlcigpLnNhbXBsZSgyKS5mb2xkKCkpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9ncm91cF9ieVhsYWJlbFhfYnlYYm90aEVfd2VpZ2h0X29yZGVyX2ZvbGRfc2FtcGxlWGxvY2FsXzVYWHVuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDogOTk5OTk5KSkuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikub3JkZXIoKS5mb2xkKCkuc2FtcGxlKFNjb3BlLmxvY2FsLCA1KSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDo5OTk5OTkpKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmZvbGQoKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDo5OTk5OTkpKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmZvbGQoKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6bnVtYmVyMCkpLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpLnNhbXBsZShTY29wZS5sb2NhbCwgbnVtYmVyMSkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneShzZWVkOiA5OTk5OTkpKS5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoVC5MYWJlbCkuQnkoX18uQm90aEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5PcmRlcigpLkZvbGQoKS5TYW1wbGUoU2NvcGUuTG9jYWwsIDUpKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU2VlZFN0cmF0ZWd5KGdyZW1saW5nby5TZWVkU3RyYXRlZ3lDb25maWd7U2VlZDogOTk5OTk5fSkpLlYoKS5Hcm91cCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLk9yZGVyKCkuRm9sZCgpLlNhbXBsZShncmVtbGluZ28uU2NvcGUuTG9jYWwsIDUpKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDo5OTk5OTkpKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmZvbGQoKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kuYnVpbGQoKS5zZWVkKDk5OTk5OSkuY3JlYXRlKCkpLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm9yZGVyKCkuZm9sZCgpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDk5OTk5OX0pKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmZvbGQoKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3koc2VlZD05OTk5OTkpKS5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoX2UoKS52YWx1ZXMoJ3dlaWdodCcpLm9yZGVyKCkuZm9sZCgpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFNlZWRTdHJhdGVneVhfVl9vcmRlcl9ieVhsYWJlbF9kZXNjWF9zYW1wbGVYMVhfYnlYYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDogOTk5OTk5KSkuVigpLm9yZGVyKCkuYnkoVC5sYWJlbCwgT3JkZXIuZGVzYykuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTk5KSkuVigpLm9yZGVyKCkuYnkoVC5sYWJlbCwgT3JkZXIuZGVzYykuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneShzZWVkOjk5OTk5OSkpLlYoKS5vcmRlcigpLmJ5KFQubGFiZWwsIE9yZGVyLmRlc2MpLnNhbXBsZSgxKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6bnVtYmVyMCkpLlYoKS5vcmRlcigpLmJ5KFQubGFiZWwsIE9yZGVyLmRlc2MpLnNhbXBsZShudW1iZXIxKS5ieShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koc2VlZDogOTk5OTk5KSkuVigpLk9yZGVyKCkuQnkoVC5MYWJlbCwgT3JkZXIuRGVzYykuU2FtcGxlKDEpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU2VlZFN0cmF0ZWd5KGdyZW1saW5nby5TZWVkU3RyYXRlZ3lDb25maWd7U2VlZDogOTk5OTk5fSkpLlYoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5ULkxhYmVsLCBncmVtbGluZ28uT3JkZXIuRGVzYykuU2FtcGxlKDEpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFNlZWRTdHJhdGVneShzZWVkOjk5OTk5OSkpLlYoKS5vcmRlcigpLmJ5KFQubGFiZWwsIE9yZGVyLmRlc2MpLnNhbXBsZSgxKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kuYnVpbGQoKS5zZWVkKDk5OTk5OSkuY3JlYXRlKCkpLlYoKS5vcmRlcigpLmJ5KFQubGFiZWwsIE9yZGVyLmRlc2MpLnNhbXBsZSgxKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHtzZWVkOiA5OTk5OTl9KSkuVigpLm9yZGVyKCkuYnkoVC5sYWJlbCwgT3JkZXIuZGVzYykuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFNlZWRTdHJhdGVneShzZWVkPTk5OTk5OSkpLlYoKS5vcmRlcigpLmJ5KFQubGFiZWwsIE9yZGVyLmRlc2MpLnNhbXBsZSgxKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF92YWx1ZXNYYWdlWF9zYW1wbGVYbG9jYWxfNVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuc2FtcGxlKFNjb3BlLmxvY2FsLCA1KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnZhbHVlcyhzdHJpbmcwKS5zYW1wbGUoU2NvcGUubG9jYWwsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5TYW1wbGUoU2NvcGUuTG9jYWwsIDUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlZhbHVlcyhcImFnZVwiKS5TYW1wbGUoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCA1KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuc2FtcGxlKFNjb3BlLmxvY2FsLCA1KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5zYW1wbGUoU2NvcGUubG9jYWwsIDUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS52YWx1ZXMoJ2FnZScpLnNhbXBsZShTY29wZS5sb2NhbCwgNSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYc2FtcGxlWDJYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoc2FtcGxlKDIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5zYW1wbGUoMikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5zYW1wbGUoMikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uc2FtcGxlKG51bWJlcjApKS50aW1lcyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uU2FtcGxlKDIpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLlNhbXBsZSgyKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLnNhbXBsZSgyKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5zYW1wbGUoMikpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uc2FtcGxlKDIpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uc2FtcGxlKDIpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NhbXBsZVgyWF9zYW1wbGVYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2FtcGxlKDIpLnNhbXBsZSgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNhbXBsZSgyKS5zYW1wbGUoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuc2FtcGxlKDIpLnNhbXBsZSgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2FtcGxlKG51bWJlcjApLnNhbXBsZShudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TYW1wbGUoMikuU2FtcGxlKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2FtcGxlKDIpLlNhbXBsZSgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zYW1wbGUoMikuc2FtcGxlKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zYW1wbGUoMikuc2FtcGxlKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zYW1wbGUoMikuc2FtcGxlKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNhbXBsZSgyKS5zYW1wbGUoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVjNfcmVwZWF0WG91dF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX3NhbXBsZVgyWF9hZ2dyZWdhdGVYeFhYX3VudGlsWGxvb3BzX2lzWDJYWF9jYXBYeFhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS5zYW1wbGUoMikuYWdncmVnYXRlKCd4JykpLnVudGlsKF9fLmxvb3BzKCkuaXMoMikpLmNhcCgneCcpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoJ3gnKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkuY2FwKCd4JykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoJ3gnKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkuY2FwKCd4JykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShzdHJpbmcwKS5zYW1wbGUobnVtYmVyMCkuYWdncmVnYXRlKHN0cmluZzEpKS51bnRpbChfXy5sb29wcygpLmlzKG51bWJlcjApKS5jYXAoc3RyaW5nMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDMpLlJlcGVhdChfXy5PdXQoKS5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlNhbXBsZSgyKS5BZ2dyZWdhdGUoXCJ4XCIpKS5VbnRpbChfXy5Mb29wcygpLklzKDIpKS5DYXA8b2JqZWN0PihcInhcIikuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQzKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlNhbXBsZSgyKS5BZ2dyZWdhdGUoXCJ4XCIpKS5VbnRpbChncmVtbGluZ28uVF9fLkxvb3BzKCkuSXMoMikpLkNhcChcInhcIikuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoJ3gnKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkuY2FwKCd4JykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS5zYW1wbGUoMikuYWdncmVnYXRlKFwieFwiKSkudW50aWwoX18ubG9vcHMoKS5pcygyKSkuY2FwKFwieFwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoXCJ4XCIpKS51bnRpbChfXy5sb29wcygpLmlzKDIpKS5jYXAoXCJ4XCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQzKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieSgncGVyZm9ybWFuY2VzJykuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpKS51bnRpbChfXy5sb29wcygpLmlzXygyKSkuY2FwKCd4JykudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVjNfb3V0X29yZGVyX2J5WHBlcmZvcm1hbmNlc1hfc2FtcGxlWDJYX2FnZ3JlZ2F0ZVh4WF9vdXRfb3JkZXJfYnlYcGVyZm9ybWFuY2VzWF9zYW1wbGVYMlhfYWdncmVnYXRlWHhYX2NhcFh4WF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLmNhcCgneCcpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLmNhcCgneCcpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoJ3gnKS5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoJ3gnKS5jYXAoJ3gnKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDMpLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMCkuc2FtcGxlKG51bWJlcjApLmFnZ3JlZ2F0ZShzdHJpbmcxKS5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApLnNhbXBsZShudW1iZXIwKS5hZ2dyZWdhdGUoc3RyaW5nMSkuY2FwKHN0cmluZzEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5PdXQoKS5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlNhbXBsZSgyKS5BZ2dyZWdhdGUoXCJ4XCIpLk91dCgpLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIikuU2FtcGxlKDIpLkFnZ3JlZ2F0ZShcInhcIikuQ2FwPG9iamVjdD4oXCJ4XCIpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuT3V0KCkuT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiKS5TYW1wbGUoMikuQWdncmVnYXRlKFwieFwiKS5PdXQoKS5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIpLlNhbXBsZSgyKS5BZ2dyZWdhdGUoXCJ4XCIpLkNhcChcInhcIikuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLmNhcCgneCcpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykub3V0KCkub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS5zYW1wbGUoMikuYWdncmVnYXRlKFwieFwiKS5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoXCJ4XCIpLmNhcChcInhcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQzKS5vdXQoKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoXCJ4XCIpLm91dCgpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuc2FtcGxlKDIpLmFnZ3JlZ2F0ZShcInhcIikuY2FwKFwieFwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykub3V0KCkub3JkZXIoKS5ieSgncGVyZm9ybWFuY2VzJykuc2FtcGxlKDIpLmFnZ3JlZ2F0ZSgneCcpLm91dCgpLm9yZGVyKCkuYnkoJ3BlcmZvcm1hbmNlcycpLnNhbXBsZSgyKS5hZ2dyZWdhdGUoJ3gnKS5jYXAoJ3gnKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9zaW1wbGVQYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5zaW1wbGVQYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuc2ltcGxlUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5zaW1wbGVQYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoc3RyaW5nMCkuaW4oc3RyaW5nMCkuc2ltcGxlUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5TaW1wbGVQYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuU2ltcGxlUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5zaW1wbGVQYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5zaW1wbGVQYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLmluXyhcImNyZWF0ZWRcIikuc2ltcGxlUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS5zaW1wbGVfcGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdGltZXNYM1hfcGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDMpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMykucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudGltZXMobnVtYmVyMCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5UaW1lcygzKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5UaW1lcygzKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDMpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDMpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnRpbWVzKDMpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZV9wYXRoKCkpLnRpbWVzKDMpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2ltcGxlUGF0aF9ieVhsYWJlbFhfZnJvbVhiWF90b1hjWF9wYXRoX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5ieShULmxhYmVsKS5mcm9tKFwiYlwiKS50byhcImNcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5ieShULmxhYmVsKS5mcm9tKFwiYlwiKS50byhcImNcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zaW1wbGVQYXRoKCkuYnkoVC5sYWJlbCkuZnJvbShcImJcIikudG8oXCJjXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzEpLm91dCgpLmFzKHN0cmluZzIpLnNpbXBsZVBhdGgoKS5ieShULmxhYmVsKS5mcm9tKHN0cmluZzEpLnRvKHN0cmluZzIpLnBhdGgoKS5ieShzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5TaW1wbGVQYXRoKCkuQnkoVC5MYWJlbCkuRnJvbShcImJcIikuVG8oXCJjXCIpLlBhdGgoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5TaW1wbGVQYXRoKCkuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpLkZyb20oXCJiXCIpLlRvKFwiY1wiKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5ieShULmxhYmVsKS5mcm9tKFwiYlwiKS50byhcImNcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2ltcGxlUGF0aCgpLmJ5KFQubGFiZWwpLmZyb20oXCJiXCIpLnRvKFwiY1wiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zaW1wbGVQYXRoKCkuYnkoVC5sYWJlbCkuZnJvbV8oXCJiXCIpLnRvKFwiY1wiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYicpLm91dCgpLmFzXygnYycpLnNpbXBsZV9wYXRoKCkuYnkoVC5sYWJlbCkuZnJvbV8oJ2InKS50bygnYycpLnBhdGgoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgwWF9WX2JvdGhfY29hbGVzY2VYaGFzWG5hbWVfbWFya29YX2JvdGhfY29uc3RhbnRYMFhYX3NpbXBsZVBhdGhfcGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKGhhcygnbmFtZScsJ21hcmtvJykuYm90aCgpLGNvbnN0YW50KDApKS5zaW1wbGVQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMCkuVigpLmJvdGgoKS5jb2FsZXNjZShfXy5oYXMoJ25hbWUnLCAnbWFya28nKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5zaW1wbGVQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDApLlYoKS5ib3RoKCkuY29hbGVzY2UoX18uaGFzKCduYW1lJywgJ21hcmtvJykuYm90aCgpLCBfXy5jb25zdGFudCgwKSkuc2ltcGxlUGF0aCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuVigpLmJvdGgoKS5jb2FsZXNjZShfXy5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuYm90aCgpLCBfXy5jb25zdGFudChudW1iZXIwKSkuc2ltcGxlUGF0aCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDApLlYoKS5Cb3RoKCkuQ29hbGVzY2U8b2JqZWN0PihfXy5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuQm90aCgpLCBfXy5Db25zdGFudDxvYmplY3Q+KDApKS5TaW1wbGVQYXRoKCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMCkuVigpLkJvdGgoKS5Db2FsZXNjZShncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5Cb3RoKCksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoMCkpLlNpbXBsZVBhdGgoKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMCkuVigpLmJvdGgoKS5jb2FsZXNjZShfXy5oYXMoJ25hbWUnLCAnbWFya28nKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5zaW1wbGVQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5zaW1wbGVQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgwKS5WKCkuYm90aCgpLmNvYWxlc2NlKF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5ib3RoKCksIF9fLmNvbnN0YW50KDApKS5zaW1wbGVQYXRoKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDApLlYoKS5ib3RoKCkuY29hbGVzY2UoX18uaGFzKCduYW1lJywgJ21hcmtvJykuYm90aCgpLCBfXy5jb25zdGFudCgwKSkuc2ltcGxlX3BhdGgoKS5wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ib3RoX2FzWGFYX2JvdGhfYXNYYlhfc2ltcGxlUGF0aF9wYXRoX2J5WGFnZVhfX2Zyb21YYVhfdG9YYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLmFzKCdhJykuYm90aCgpLmFzKCdiJykuc2ltcGxlUGF0aCgpLnBhdGgoKS5ieSgnYWdlJykuZnJvbSgnYScpLnRvKCdiJykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ib3RoKCkuYXMoJ2EnKS5ib3RoKCkuYXMoJ2InKS5zaW1wbGVQYXRoKCkucGF0aCgpLmJ5KCdhZ2UnKS5mcm9tKCdhJykudG8oJ2InKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkuYXMoJ2EnKS5ib3RoKCkuYXMoJ2InKS5zaW1wbGVQYXRoKCkucGF0aCgpLmJ5KCdhZ2UnKS5mcm9tKCdhJykudG8oJ2InKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLmFzKHN0cmluZzApLmJvdGgoKS5hcyhzdHJpbmcxKS5zaW1wbGVQYXRoKCkucGF0aCgpLmJ5KHN0cmluZzIpLmZyb20oc3RyaW5nMCkudG8oc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLlNpbXBsZVBhdGgoKS5QYXRoKCkuQnkoXCJhZ2VcIikuRnJvbShcImFcIikuVG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLlNpbXBsZVBhdGgoKS5QYXRoKCkuQnkoXCJhZ2VcIikuRnJvbShcImFcIikuVG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS5hcygnYScpLmJvdGgoKS5hcygnYicpLnNpbXBsZVBhdGgoKS5wYXRoKCkuYnkoJ2FnZScpLmZyb20oJ2EnKS50bygnYicpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkuYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIikuc2ltcGxlUGF0aCgpLnBhdGgoKS5ieShcImFnZVwiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGgoKS5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKS5zaW1wbGVQYXRoKCkucGF0aCgpLmJ5KFwiYWdlXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLmFzXygnYScpLmJvdGgoKS5hc18oJ2InKS5zaW1wbGVfcGF0aCgpLnBhdGgoKS5ieSgnYWdlJykuZnJvbV8oJ2EnKS50bygnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYZ2xvYmFsXzJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbChTY29wZS5nbG9iYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLnRhaWwoU2NvcGUuZ2xvYmFsLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5UYWlsPG9iamVjdD4oU2NvcGUuR2xvYmFsLCAyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuT3JkZXIoKS5UYWlsKGdyZW1saW5nby5TY29wZS5HbG9iYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbCwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS50YWlsKFNjb3BlLmdsb2JhbF8sIDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX3RhaWxYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLnRhaWwoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkudGFpbChudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5UYWlsPG9iamVjdD4oMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuVGFpbCgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLnRhaWwoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLm9yZGVyKCkudGFpbCgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl90YWlsWDJ2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCh4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLnRhaWwoeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5UYWlsPG9iamVjdD4oKGxvbmcpIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuVGFpbCh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS50YWlsKHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLnRhaWwoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS50YWlsKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuVGFpbDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuVGFpbCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS50YWlsKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfdGFpbFg3WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKDcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKDcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS50YWlsKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLlRhaWw8b2JqZWN0Pig3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuT3JkZXIoKS5UYWlsKDcpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS50YWlsKDcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLnRhaWwoNykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS50YWlsKDcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDNYX3RhaWxYN1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KGJvdGgoKSkudGltZXMoMykudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDMpLnRhaWwoNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMobnVtYmVyMCkudGFpbChudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uQm90aCgpKS5UaW1lcygzKS5UYWlsPG9iamVjdD4oNykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkpLlRpbWVzKDMpLlRhaWwoNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoMykudGFpbCg3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcygzKS50YWlsKDcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGluX291dFhfdGltZXNYM1hfdGFpbFg3WF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uaW4oKS5vdXQoKSkudGltZXMoMykudGFpbCg3KS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLmluKCkub3V0KCkpLnRpbWVzKDMpLnRhaWwoNykuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uaW4oKS5vdXQoKSkudGltZXMoMykudGFpbCg3KS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uaW4oKS5vdXQoKSkudGltZXMobnVtYmVyMCkudGFpbChudW1iZXIxKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5JbigpLk91dCgpKS5UaW1lcygzKS5UYWlsPG9iamVjdD4oNykuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkluKCkuT3V0KCkpLlRpbWVzKDMpLlRhaWwoNykuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uaW4oKS5vdXQoKSkudGltZXMoMykudGFpbCg3KS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18uaW4oKS5vdXQoKSkudGltZXMoMykudGFpbCg3KS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uaW5fKCkub3V0KCkpLnRpbWVzKDMpLnRhaWwoNykuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uaW5fKCkub3V0KCkpLnRpbWVzKDMpLnRhaWwoNykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WGFYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbF8xWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMCkuc2VsZWN0KHN0cmluZzApLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwsIG51bWJlcjApLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5CeShfXy5VbmZvbGQ8b2JqZWN0PigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLlNlbGVjdChcImFcIikuQnkoZ3JlbWxpbmdvLlRfXy5VbmZvbGQoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykuc2VsZWN0KCdhJykuYnkoX18udW5mb2xkKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WGFYX2J5WHVuZm9sZF92YWx1ZXNYbmFtZVhfZm9sZFhfdGFpbFhsb2NhbFhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLnNlbGVjdChzdHJpbmcwKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoX18uVW5mb2xkPG9iamVjdD4oKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5TZWxlY3QoXCJhXCIpLkJ5KGdyZW1saW5nby5UX18uVW5mb2xkKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpLlRhaWwoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYScpLm91dCgpLmFzXygnYScpLnNlbGVjdCgnYScpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYlhfb3V0X2FzWGNYX3NlbGVjdFhhX2JfY1hfYnlYbmFtZVhfdGFpbFhsb2NhbF8yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsXCJiXCIsXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkub3V0KCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmJ5KHN0cmluZzMpLnRhaWwoU2NvcGUubG9jYWwsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuT3V0KCkuQXMoXCJjXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5PdXQoKS5BcyhcImNcIikuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKS5vdXQoKS5hc18oJ2MnKS5zZWxlY3QoJ2EnLCAnYicsICdjJykuYnkoJ25hbWUnKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hc1hiWF9vdXRfYXNYY1hfc2VsZWN0WGFfYl9jWF9ieVhuYW1lWF90YWlsWGxvY2FsXzJ2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIixcImJcIixcImNcIikuYnkoXCJuYW1lXCIpLnRhaWwoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLnRhaWwoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcxKS5vdXQoKS5hcyhzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuYnkoc3RyaW5nMykudGFpbChTY29wZS5sb2NhbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAobG9uZykgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuT3V0KCkuQXMoXCJjXCIpLlNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLnRhaWwoU2NvcGUubG9jYWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKS5vdXQoKS5hc18oJ2MnKS5zZWxlY3QoJ2EnLCAnYicsICdjJykuYnkoJ25hbWUnKS50YWlsKFNjb3BlLmxvY2FsLCB4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5WG5hbWVYX3RhaWxYbG9jYWxfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikuc2VsZWN0KFwiYVwiLFwiYlwiLFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoXCJuYW1lXCIpLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzEpLm91dCgpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5ieShzdHJpbmczKS50YWlsKFNjb3BlLmxvY2FsLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuT3V0KCkuQXMoXCJjXCIpLlNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShcIm5hbWVcIikuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdiJykub3V0KCkuYXNfKCdjJykuc2VsZWN0KCdhJywgJ2InLCAnYycpLmJ5KCduYW1lJykudGFpbChTY29wZS5sb2NhbCwgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxfMVhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLnNlbGVjdChQb3AubWl4ZWQsIHN0cmluZzApLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwsIG51bWJlcjApLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFBvcC5NaXhlZCwgXCJhXCIpLkJ5KF9fLlVuZm9sZDxvYmplY3Q+KCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTWl4ZWQsIFwiYVwiKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5zZWxlY3QoUG9wLm1peGVkLCAnYScpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcwKS5zZWxlY3QoUG9wLm1peGVkLCBzdHJpbmcwKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihQb3AuTWl4ZWQsIFwiYVwiKS5CeShfXy5VbmZvbGQ8b2JqZWN0PigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLk1peGVkLCBcImFcIikuQnkoZ3JlbWxpbmdvLlRfXy5VbmZvbGQoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykuc2VsZWN0KFBvcC5taXhlZCwgJ2EnKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYbGltaXRYbG9jYWxfMFhYX3RhaWxYbG9jYWxfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLmxpbWl0KFNjb3BlLmxvY2FsLCAwKSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18ubGltaXQoU2NvcGUubG9jYWwsIDApKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18ubGltaXQoU2NvcGUubG9jYWwsIDApKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMCkuc2VsZWN0KFBvcC5taXhlZCwgc3RyaW5nMCkuYnkoX18ubGltaXQoU2NvcGUubG9jYWwsIG51bWJlcjApKS50YWlsKFNjb3BlLmxvY2FsLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihQb3AuTWl4ZWQsIFwiYVwiKS5CeShfXy5MaW1pdDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAwKSkuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLk1peGVkLCBcImFcIikuQnkoZ3JlbWxpbmdvLlRfXy5MaW1pdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDApKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLmxpbWl0KFNjb3BlLmxvY2FsLCAwKSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy5saW1pdChTY29wZS5sb2NhbCwgMCkpLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18ubGltaXQoU2NvcGUubG9jYWwsIDApKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5zZWxlY3QoUG9wLm1peGVkLCAnYScpLmJ5KF9fLmxpbWl0KFNjb3BlLmxvY2FsLCAwKSkudGFpbChTY29wZS5sb2NhbCwgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYVhfb3V0X2FzWGFYX3NlbGVjdFhtaXhlZF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYX3RhaWxYbG9jYWxfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMCkuc2VsZWN0KFBvcC5taXhlZCwgc3RyaW5nMCkuYnkoX18udW5mb2xkKCkudmFsdWVzKHN0cmluZzEpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oUG9wLk1peGVkLCBcImFcIikuQnkoX18uVW5mb2xkPG9iamVjdD4oKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTWl4ZWQsIFwiYVwiKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2EnKS5zZWxlY3QoUG9wLm1peGVkLCAnYScpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkudGFpbChTY29wZS5sb2NhbCwgMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF92YWx1ZXNYYWdlWF90YWlsWGxvY2FsXzVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikudGFpbChTY29wZS5sb2NhbCwgNTApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS50YWlsKFNjb3BlLmxvY2FsLCA1MCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS50YWlsKFNjb3BlLmxvY2FsLCA1MCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS52YWx1ZXMoc3RyaW5nMCkudGFpbChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCwgNTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlZhbHVlcyhcImFnZVwiKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgNTApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikudGFpbChTY29wZS5sb2NhbCwgNTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLnRhaWwoU2NvcGUubG9jYWwsIDUwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS50YWlsKFNjb3BlLmxvY2FsLCA1MCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnZhbHVlcygnYWdlJykudGFpbChTY29wZS5sb2NhbCwgNTApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhsaXN0WDFfMl8zWFhfdGFpbFhsb2NhbF8xWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgM10pLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMiwgM10pLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkudGFpbChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMyB9KS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzfSkuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyLCAzXSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMiwgM10pLnRhaWwoU2NvcGUubG9jYWwsIDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfdmFsdWVNYXBYbmFtZVhfdGFpbFhsb2NhbF8xWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkudmFsdWVNYXAoXCJuYW1lXCIpLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnZhbHVlTWFwKFwibmFtZVwiKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkudmFsdWVNYXAoXCJuYW1lXCIpLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkudmFsdWVNYXAoc3RyaW5nMCkudGFpbChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcIm5hbWVcIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5WYWx1ZU1hcChcIm5hbWVcIikuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS52YWx1ZU1hcChcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS52YWx1ZU1hcChcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS52YWx1ZU1hcChcIm5hbWVcIikudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnZhbHVlX21hcCgnbmFtZScpLnRhaWwoU2NvcGUubG9jYWwsIDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzJfM1hfdGFpbFhsb2NhbF8xWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxLCAyLCAzXSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnRhaWwoU2NvcGUubG9jYWwsIG51bWJlcjApLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMgfSkuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzfSkuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyLCAzXSkudGFpbChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19KS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDIsIDNdKS50YWlsKFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMiwgM10pLnRhaWwoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzJfM180XzVfNlhfdGFpbFhsb2NhbF8xWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDIsIDNdLCBbNCwgNSwgNl0pLnRhaWwoU2NvcGUubG9jYWwsIDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCwgbGlzdDEpLnRhaWwoU2NvcGUubG9jYWwsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDQsIDUsIDYgfSkuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317MSwgMiwgM30sIFtdaW50ZXJmYWNle317NCwgNSwgNn0pLlRhaWwoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19LCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoNCk7IGFkZCg1KTsgYWRkKDYpOyB9fSkudGFpbChTY29wZS5sb2NhbCwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAyLCAzXSwgWzQsIDUsIDZdKS50YWlsKFNjb3BlLmxvY2FsLCAxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMiwgM10sIFs0LCA1LCA2XSkudGFpbChTY29wZS5sb2NhbCwgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFfMl8zXzRfNVhfdGFpbFhsb2NhbF8yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgMywgNCwgNV0pLnRhaWwoU2NvcGUubG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzEsIDIsIDMsIDQsIDVdKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMiwgMywgNCwgNV0pLnRhaWwoU2NvcGUubG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkudGFpbChTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiwgMywgNCwgNSB9KS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyLCAzLCA0LCA1fSkuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyLCAzLCA0LCA1XSkudGFpbChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IGFkZCg0KTsgYWRkKDUpOyB9fSkudGFpbChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAyLCAzLCA0LCA1XSkudGFpbChTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDIsIDMsIDQsIDVdKS50YWlsKFNjb3BlLmxvY2FsLCAyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9pc1h0eXBlT2ZYR1R5cGVfU1RSSU5HWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5TdHJpbmcpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TdHJpbmcpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU1RSSU5HKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWGphdmFfbGFuZ19TdHJpbmdYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKFwiU3RyaW5nXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoXCJTdHJpbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoXCJTdHJpbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2Yoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5JcyhQLlR5cGVPZihcIlN0cmluZ1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihcIlN0cmluZ1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihcIlN0cmluZ1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoXCJTdHJpbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKFwiU3RyaW5nXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5pc18oUC50eXBlX29mKCdTdHJpbmcnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV90eXBlT2ZYR1R5cGVfU1RSSU5HWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBQLlR5cGVPZihHVHlwZS5TdHJpbmcpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU3RyaW5nKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsIFAudHlwZV9vZihHVHlwZS5TVFJJTkcpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX29yWGhhc1huYW1lX3R5cGVPZlhHVHlwZV9TVFJJTkdYWF9faGFzWGFnZV90eXBlT2ZYR1R5cGVfSU5UWFhYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vcihfXy5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoXCJhZ2VcIiwgUC50eXBlT2YoR1R5cGUuSU5UKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vcihfXy5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoXCJhZ2VcIiwgUC50eXBlT2YoR1R5cGUuSU5UKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3IoX18uaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSwgX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vcihfXy5oYXMoc3RyaW5nMCwgUC50eXBlT2YoR1R5cGUuU1RSSU5HKSksIF9fLmhhcyhzdHJpbmcxLCBQLnR5cGVPZihHVHlwZS5JTlQpKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yKF9fLkhhcyhcIm5hbWVcIiwgUC5UeXBlT2YoR1R5cGUuU3RyaW5nKSksIF9fLkhhcyhcImFnZVwiLCBQLlR5cGVPZihHVHlwZS5JbnQpKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU3RyaW5nKSksIGdyZW1saW5nby5UX18uSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuSW50KSkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3IoX18uaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSwgX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vcihfXy5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoXCJhZ2VcIiwgUC50eXBlT2YoR1R5cGUuSU5UKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm9yKF9fLmhhcyhcIm5hbWVcIiwgUC50eXBlT2YoR1R5cGUuc3RyaW5nKSksIF9fLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5pbnQpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vcl8oX18uaGFzKCduYW1lJywgUC50eXBlX29mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoJ2FnZScsIFAudHlwZV9vZihHVHlwZS5JTlQpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hbmRYaGFzWG5hbWVfdHlwZU9mWEdUeXBlX1NUUklOR1hYX19oYXNYYWdlX3R5cGVPZlhHVHlwZV9JTlRYWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFuZChfXy5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoXCJhZ2VcIiwgUC50eXBlT2YoR1R5cGUuSU5UKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hbmQoX18uaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSwgX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFuZChfXy5oYXMoXCJuYW1lXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoXCJhZ2VcIiwgUC50eXBlT2YoR1R5cGUuSU5UKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFuZChfXy5oYXMoc3RyaW5nMCwgUC50eXBlT2YoR1R5cGUuU1RSSU5HKSksIF9fLmhhcyhzdHJpbmcxLCBQLnR5cGVPZihHVHlwZS5JTlQpKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFuZChfXy5IYXMoXCJuYW1lXCIsIFAuVHlwZU9mKEdUeXBlLlN0cmluZykpLCBfXy5IYXMoXCJhZ2VcIiwgUC5UeXBlT2YoR1R5cGUuSW50KSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFuZChncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TdHJpbmcpKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5JbnQpKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hbmQoX18uaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSwgX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hbmQoX18uaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSwgX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLklOVCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hbmQoX18uaGFzKFwibmFtZVwiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSwgX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLmludCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFuZF8oX18uaGFzKCduYW1lJywgUC50eXBlX29mKEdUeXBlLlNUUklORykpLCBfXy5oYXMoJ2FnZScsIFAudHlwZV9vZihHVHlwZS5JTlQpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ub3RYaGFzWGFnZV90eXBlT2ZYR1R5cGVfU1RSSU5HWFhYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ub3QoX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubm90KF9fLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ub3QoX18uaGFzKFwiYWdlXCIsIFAudHlwZU9mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ub3QoX18uaGFzKHN0cmluZzAsIFAudHlwZU9mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTm90KF9fLkhhcyhcImFnZVwiLCBQLlR5cGVPZihHVHlwZS5TdHJpbmcpKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTm90KGdyZW1saW5nby5UX18uSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU3RyaW5nKSkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubm90KF9fLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubm90KF9fLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubm90KF9fLmhhcyhcImFnZVwiLCBQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ub3RfKF9fLmhhcygnYWdlJywgUC50eXBlX29mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWG5vdFh0eXBlT2ZYR1R5cGVfU1RSSU5HWFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLm5vdChQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLm5vdChQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLm5vdChQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5Ob3QoUC5UeXBlT2YoR1R5cGUuU3RyaW5nKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLk5vdChncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlN0cmluZykpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuc3RyaW5nKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAubm90XyhQLnR5cGVfb2YoR1R5cGUuU1RSSU5HKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX2lzWHR5cGVPZlhzdHJpbmdTdHJpbmdYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKFwiU3RyaW5nXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoXCJTdHJpbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoXCJTdHJpbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2Yoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5JcyhQLlR5cGVPZihcIlN0cmluZ1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihcIlN0cmluZ1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihcIlN0cmluZ1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoXCJTdHJpbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKFwiU3RyaW5nXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5pc18oUC50eXBlX29mKCdTdHJpbmcnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vclh2YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfSU5UWFhfX3ZhbHVlc1huYW1lWF9pc1h0eXBlT2ZYR1R5cGVfU1RSSU5HWFhYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm9yKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSwgX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm9yKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSwgX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcihfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSksIF9fLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm9yKF9fLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSwgX18udmFsdWVzKHN0cmluZzEpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yKF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkludCkpLCBfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuSXMoUC5UeXBlT2YoR1R5cGUuU3RyaW5nKSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcihncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkludCkpLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TdHJpbmcpKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcihfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuSU5UKSksIF9fLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm9yKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5JTlQpKSwgX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3IoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmludCkpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yXyhfXy52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuSU5UKSksIF9fLnZhbHVlcygnbmFtZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU1RSSU5HKSkpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl93aGVyZVh2YWx1ZXNYbmFtZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWF92YWx1ZXNYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcIm5hbWVcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLklzKFAuVHlwZU9mKEdUeXBlLlN0cmluZykpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5TdHJpbmcpKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFAudHlwZU9mKEdUeXBlLnN0cmluZykpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLndoZXJlKF9fLnZhbHVlcygnbmFtZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU1RSSU5HKSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX1NUUklOR1hYWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuU3RyaW5nKSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlN0cmluZykpKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5TVFJJTkcpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuc3RyaW5nKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLlNUUklORykpKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYbm90WHZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9TVFJJTkdYWFhYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS53aGVyZShfXy5ub3QoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLm5vdChfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLndoZXJlKF9fLm5vdChfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS53aGVyZShfXy5ub3QoX18udmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLldoZXJlKF9fLk5vdChfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5TdHJpbmcpKSkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLldoZXJlKGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuU3RyaW5nKSkpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLndoZXJlKF9fLm5vdChfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuU1RSSU5HKSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS53aGVyZShfXy5ub3QoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlNUUklORykpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkud2hlcmUoX18ubm90KF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5zdHJpbmcpKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18ubm90XyhfXy52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuU1RSSU5HKSkpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9OVUxMWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLk5VTEwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5OVUxMKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLk5VTEwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLk5VTEwpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5OdWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5OdWxsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLk5VTEwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLk5VTEwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLm51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuTlVMTCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0JPT0xFQU5YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQk9PTEVBTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkJPT0xFQU4pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQk9PTEVBTikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuQk9PTEVBTikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkJvb2xlYW4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJvb2xlYW4pKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQk9PTEVBTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQk9PTEVBTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuYm9vbGVhbikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5CT09MRUFOKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfQ0hBUlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5DSEFSKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQ0hBUikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5DSEFSKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5DSEFSKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuQ2hhcikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuQ2hhcikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5DSEFSKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5DSEFSKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5jaGFyKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLkNIQVIpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9CSU5BUllYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQklOQVJZKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQklOQVJZKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkJJTkFSWSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuQklOQVJZKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuQmluYXJ5KSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5CaW5hcnkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuQklOQVJZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5CSU5BUlkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmJpbmFyeSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5CSU5BUlkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9VVUlEWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5VVUlEKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlVVSUQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLnV1aWQpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuVVVJRCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0RBVEVUSU1FWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuRGF0ZVRpbWUpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkRhdGVUaW1lKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRBVEVUSU1FKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuZGF0ZXRpbWUpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuREFURVRJTUUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9EVVJBVElPTlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EVVJBVElPTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRVUkFUSU9OKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkRVUkFUSU9OKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5EVVJBVElPTikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuVHlwZU9mKEdUeXBlLkR1cmF0aW9uKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5EdXJhdGlvbikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5EVVJBVElPTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuRFVSQVRJT04pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLmR1cmF0aW9uKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLkRVUkFUSU9OKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYbm9uX3JlZ2lzdGVyZWRfTmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihcIm5vbi1yZWdpc3RlcmVkLU5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKFwibm9uLXJlZ2lzdGVyZWQtTmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKFwibm9uLXJlZ2lzdGVyZWQtTmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoXCJub24tcmVnaXN0ZXJlZC1OYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoXCJub24tcmVnaXN0ZXJlZC1OYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoXCJub24tcmVnaXN0ZXJlZC1OYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKFwibm9uLXJlZ2lzdGVyZWQtTmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihcIm5vbi1yZWdpc3RlcmVkLU5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZignbm9uLXJlZ2lzdGVyZWQtTmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYdHJ1ZVhfaXNYdHlwZU9mWEdUeXBlX0JPT0xFQU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KHRydWUpLmlzKFAudHlwZU9mKEdUeXBlLkJPT0xFQU4pKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KHRydWUpLmlzKFAudHlwZU9mKEdUeXBlLkJPT0xFQU4pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCh0cnVlKS5pcyhQLnR5cGVPZihHVHlwZS5CT09MRUFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGJvb2xlYW4wKS5pcyhQLnR5cGVPZihHVHlwZS5CT09MRUFOKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pih0cnVlKS5JcyhQLlR5cGVPZihHVHlwZS5Cb29sZWFuKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh0cnVlKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkJvb2xlYW4pKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCh0cnVlKS5pcyhQLnR5cGVPZihHVHlwZS5CT09MRUFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KHRydWUpLmlzKFAudHlwZU9mKEdUeXBlLkJPT0xFQU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QodHJ1ZSkuaXMoUC50eXBlT2YoR1R5cGUuYm9vbGVhbikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFRydWUpLmlzXyhQLnR5cGVfb2YoR1R5cGUuQk9PTEVBTikpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcGF0aF9pc1h0eXBlT2ZYR1R5cGVfUEFUSFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5wYXRoKCkuaXMoUC50eXBlT2YoR1R5cGUuUEFUSCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5QYXRoKCkuSXMoUC5UeXBlT2YoR1R5cGUuUGF0aCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwibmFtZVwiKS5QYXRoKCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5QYXRoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5wYXRoKCkuaXMoUC50eXBlT2YoR1R5cGUuUEFUSCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLnBhdGgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnbmFtZScpLnBhdGgoKS5pc18oUC50eXBlX29mKEdUeXBlLlBBVEgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9wYXRoX2lzWHR5cGVPZlhHVHlwZV9QQVRIWFhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLlBhdGgoKS5JcyhQLlR5cGVPZihHVHlwZS5QYXRoKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlBhdGgoKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlBhdGgpKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuaXMoUC50eXBlT2YoR1R5cGUucGF0aCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkucGF0aCgpLmlzXyhQLnR5cGVfb2YoR1R5cGUuUEFUSCkpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9tYXJrb1hfb3V0X291dF9wYXRoX2lzWHR5cGVPZlhHVHlwZV9QQVRIWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dCgpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dCgpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dCgpLk91dCgpLlBhdGgoKS5JcyhQLlR5cGVPZihHVHlwZS5QYXRoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3V0KCkuT3V0KCkuUGF0aCgpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuUGF0aCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoKS5vdXQoKS5wYXRoKCkuaXMoUC50eXBlT2YoR1R5cGUuUEFUSCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkub3V0KCkucGF0aCgpLmlzKFAudHlwZU9mKEdUeXBlLlBBVEgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dCgpLm91dCgpLnBhdGgoKS5pcyhQLnR5cGVPZihHVHlwZS5wYXRoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykub3V0KCkub3V0KCkucGF0aCgpLmlzXyhQLnR5cGVfb2YoR1R5cGUuUEFUSCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X3RyZWVfaXNYdHlwZU9mWEdUeXBlX1RSRUVYWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkudHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dCgpLnRyZWUoKS5pcyhQLnR5cGVPZihHVHlwZS5UUkVFKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkudHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkub3V0KCkudHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoKS5UcmVlPG9iamVjdD4oKS5JcyhQLlR5cGVPZihHVHlwZS5UcmVlKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoKS5UcmVlKCkuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5UcmVlKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkudHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkudHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KCkudHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLnRyZWUpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdtYXJrbycpLm91dCgpLnRyZWUoKS5pc18oUC50eXBlX29mKEdUeXBlLlRSRUUpKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYdHJlZV9pc1h0eXBlT2ZYR1R5cGVfVFJFRVhYWF92YWx1ZXNfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS53aGVyZShfXy50cmVlKCkuaXMoUC50eXBlT2YoR1R5cGUuVFJFRSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkud2hlcmUoX18udHJlZSgpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS53aGVyZShfXy50cmVlKCkuaXMoUC50eXBlT2YoR1R5cGUuVFJFRSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS53aGVyZShfXy50cmVlKCkuaXMoUC50eXBlT2YoR1R5cGUuVFJFRSkpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uVHJlZTxvYmplY3Q+KCkuSXMoUC5UeXBlT2YoR1R5cGUuVHJlZSkpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLlRyZWUoKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLlRyZWUpKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS53aGVyZShfXy50cmVlKCkuaXMoUC50eXBlT2YoR1R5cGUuVFJFRSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS53aGVyZShfXy50cmVlKCkuaXMoUC50eXBlT2YoR1R5cGUuVFJFRSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy50cmVlKCkuaXMoUC50eXBlT2YoR1R5cGUudHJlZSkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLndoZXJlKF9fLnRyZWUoKS5pc18oUC50eXBlX29mKEdUeXBlLlRSRUUpKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYX2lzWHR5cGVPZlhHVHlwZV9HUkFQSFhYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXRFKFwia25vd3NcIikuc3ViZ3JhcGgoXCJzZ1wiKS5jYXAoXCJzZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5HUkFQSCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dEUoc3RyaW5nMCkuc3ViZ3JhcGgoc3RyaW5nMSkuY2FwKHN0cmluZzEpLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXRFKFwia25vd3NcIikuU3ViZ3JhcGgoXCJzZ1wiKS5DYXA8b2JqZWN0PihcInNnXCIpLklzKFAuVHlwZU9mKEdUeXBlLkdyYXBoKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoXCJrbm93c1wiKS5TdWJncmFwaChcInNnXCIpLkNhcChcInNnXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuR3JhcGgpKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0RShcImtub3dzXCIpLnN1YmdyYXBoKFwic2dcIikuY2FwKFwic2dcIikuaXMoUC50eXBlT2YoR1R5cGUuR1JBUEgpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKFwia25vd3NcIikuc3ViZ3JhcGgoXCJzZ1wiKS5jYXAoXCJzZ1wiKS5pcyhQLnR5cGVPZihHVHlwZS5ncmFwaCkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoJ2tub3dzJykuc3ViZ3JhcGgoJ3NnJykuY2FwKCdzZycpLmlzXyhQLnR5cGVfb2YoR1R5cGUuR1JBUEgpKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWF9pc1hfbm90WHR5cGVPZlhHVHlwZV9HUkFQSFhYWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXRFKFwia25vd3NcIikuc3ViZ3JhcGgoXCJzZ1wiKS5jYXAoXCJzZ1wiKS5pcyhub3QoUC50eXBlT2YoR1R5cGUuR1JBUEgpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAubm90KFAudHlwZU9mKEdUeXBlLkdSQVBIKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RShcImtub3dzXCIpLnN1YmdyYXBoKFwic2dcIikuY2FwKFwic2dcIikuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuR1JBUEgpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RShzdHJpbmcwKS5zdWJncmFwaChzdHJpbmcxKS5jYXAoc3RyaW5nMSkuaXMoUC5ub3QoUC50eXBlT2YoR1R5cGUuR1JBUEgpKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXRFKFwia25vd3NcIikuU3ViZ3JhcGgoXCJzZ1wiKS5DYXA8b2JqZWN0PihcInNnXCIpLklzKFAuTm90KFAuVHlwZU9mKEdUeXBlLkdyYXBoKSkpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXRFKFwia25vd3NcIikuU3ViZ3JhcGgoXCJzZ1wiKS5DYXAoXCJzZ1wiKS5JcyhncmVtbGluZ28uUC5Ob3QoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5HcmFwaCkpKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAubm90KFAudHlwZU9mKEdUeXBlLkdSQVBIKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAubm90KFAudHlwZU9mKEdUeXBlLkdSQVBIKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpLmlzKFAubm90KFAudHlwZU9mKEdUeXBlLmdyYXBoKSkpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoJ2tub3dzJykuc3ViZ3JhcGgoJ3NnJykuY2FwKCdzZycpLmlzXyhQLm5vdF8oUC50eXBlX29mKEdUeXBlLkdSQVBIKSkpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9pc1h0eXBlT2ZYR1R5cGVfUEFUSFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuUEFUSCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuUGF0aCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLklzKGdyZW1saW5nby5QLlR5cGVPZihncmVtbGluZ28uR1R5cGUuUGF0aCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5QQVRIKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5wYXRoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pc18oUC50eXBlX29mKEdUeXBlLlBBVEgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9UUkVFWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5UUkVFKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLlR5cGVPZihHVHlwZS5UcmVlKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5UcmVlKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlRSRUUpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLnRyZWUpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuVFJFRSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfaXNYdHlwZU9mWEdUeXBlX0dSQVBIWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuR1JBUEgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuR1JBUEgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuR3JhcGgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5UeXBlT2YoZ3JlbWxpbmdvLkdUeXBlLkdyYXBoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLkdSQVBIKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5HUkFQSCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuZ3JhcGgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmlzXyhQLnR5cGVfb2YoR1R5cGUuR1JBUEgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2lzWHR5cGVPZlhHVHlwZV9WUFJPUEVSVFlYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuVlBST1BFUlRZKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuVlBST1BFUlRZKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLlZQUk9QRVJUWSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaXMoUC50eXBlT2YoR1R5cGUuVlBST1BFUlRZKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSXMoUC5UeXBlT2YoR1R5cGUuVlByb3BlcnR5KSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuVHlwZU9mKGdyZW1saW5nby5HVHlwZS5WUHJvcGVydHkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaXMoUC50eXBlT2YoR1R5cGUuVlBST1BFUlRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pcyhQLnR5cGVPZihHVHlwZS5WUFJPUEVSVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmlzKFAudHlwZU9mKEdUeXBlLnZwcm9wZXJ0eSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuaXNfKFAudHlwZV9vZihHVHlwZS5WUFJPUEVSVFkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hhZ2VYX2FzWGFYX291dF9pbl9oYXNYYWdlWF9hc1hiWF9zZWxlY3RYYV9iWF93aGVyZVhhX2VxWGJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLmFzKFwiYVwiKS5vdXQoKS5pbigpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoXCJhXCIsIFAuZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCkuYXMoc3RyaW5nMSkub3V0KCkuaW4oKS5oYXMoc3RyaW5nMCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzEsIHN0cmluZzIpLndoZXJlKHN0cmluZzEsIFAuZXEoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiKS5BcyhcImFcIikuT3V0KCkuSW4oKS5IYXMoXCJhZ2VcIikuQXMoXCJiXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikuV2hlcmUoXCJhXCIsIFAuRXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiKS5BcyhcImFcIikuT3V0KCkuSW4oKS5IYXMoXCJhZ2VcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLldoZXJlKFwiYVwiLCBncmVtbGluZ28uUC5FcShcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW5fKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJykuYXNfKCdhJykub3V0KCkuaW5fKCkuaGFzKCdhZ2UnKS5hc18oJ2InKS5zZWxlY3QoJ2EnLCAnYicpLndoZXJlKCdhJywgUC5lcSgnYicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hhZ2VYX2FzWGFYX291dF9pbl9oYXNYYWdlWF9hc1hiWF9zZWxlY3RYYV9iWF93aGVyZVhhX25lcVhiWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLmFzKFwiYVwiKS5vdXQoKS5pbigpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoXCJhXCIsIFAubmVxKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5uZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5uZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApLmFzKHN0cmluZzEpLm91dCgpLmluKCkuaGFzKHN0cmluZzApLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcxLCBzdHJpbmcyKS53aGVyZShzdHJpbmcxLCBQLm5lcShzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIpLkFzKFwiYVwiKS5PdXQoKS5JbigpLkhhcyhcImFnZVwiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5XaGVyZShcImFcIiwgUC5OZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiKS5BcyhcImFcIikuT3V0KCkuSW4oKS5IYXMoXCJhZ2VcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLldoZXJlKFwiYVwiLCBncmVtbGluZ28uUC5OZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5uZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLmFzKFwiYVwiKS5vdXQoKS5pbigpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoXCJhXCIsIFAubmVxKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW5fKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShcImFcIiwgUC5uZXEoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScpLmFzXygnYScpLm91dCgpLmluXygpLmhhcygnYWdlJykuYXNfKCdiJykuc2VsZWN0KCdhJywgJ2InKS53aGVyZSgnYScsIFAubmVxKCdiJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGJfaGFzWG5hbWVfbWFya29YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShfXy5hcyhcImJcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCkuYXMoc3RyaW5nMSkub3V0KCkuaW4oKS5oYXMoc3RyaW5nMCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzEsIHN0cmluZzIpLndoZXJlKF9fLmFzKHN0cmluZzIpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIpLkFzKFwiYVwiKS5PdXQoKS5JbigpLkhhcyhcImFnZVwiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5XaGVyZShfXy5BcyhcImJcIikuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiKS5BcyhcImFcIikuT3V0KCkuSW4oKS5IYXMoXCJhZ2VcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLmFzKFwiYVwiKS5vdXQoKS5pbigpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoX18uYXMoXCJiXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluXygpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoX18uYXMoXCJiXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdhZ2UnKS5hc18oJ2EnKS5vdXQoKS5pbl8oKS5oYXMoJ2FnZScpLmFzXygnYicpLnNlbGVjdCgnYScsICdiJykud2hlcmUoX18uYXNfKCdiJykuaGFzKCduYW1lJywgJ21hcmtvJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZVhfYXNYYVhfb3V0X2luX2hhc1hhZ2VYX2FzWGJYX3NlbGVjdFhhX2JYX3doZXJlWGFfb3V0WGtub3dzWF9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluKCkuaGFzKFwiYWdlXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS53aGVyZShfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCkuYXMoc3RyaW5nMSkub3V0KCkuaW4oKS5oYXMoc3RyaW5nMCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzEsIHN0cmluZzIpLndoZXJlKF9fLmFzKHN0cmluZzEpLm91dChzdHJpbmczKS5hcyhzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIpLkFzKFwiYVwiKS5PdXQoKS5JbigpLkhhcyhcImFnZVwiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5XaGVyZShfXy5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiKS5BcyhcImFcIikuT3V0KCkuSW4oKS5IYXMoXCJhZ2VcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLmFzKFwiYVwiKS5vdXQoKS5pbigpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiKS5hcyhcImFcIikub3V0KCkuaW4oKS5oYXMoXCJhZ2VcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLndoZXJlKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuYXMoXCJhXCIpLm91dCgpLmluXygpLmhhcyhcImFnZVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikud2hlcmUoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdhZ2UnKS5hc18oJ2EnKS5vdXQoKS5pbl8oKS5oYXMoJ2FnZScpLmFzXygnYicpLnNlbGVjdCgnYScsICdiJykud2hlcmUoX18uYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dFhjcmVhdGVkWF93aGVyZVhhc1hhWF9uYW1lX2lzWGpvc2hYWF9pblhjcmVhdGVkWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLndoZXJlKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFwiam9zaFwiKSkuaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS53aGVyZShfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5pcyhcImpvc2hcIikpLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLndoZXJlKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmlzKFwiam9zaFwiKSkuaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS53aGVyZShfXy5hcyhzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMikuaXMoc3RyaW5nMykpLmluKHN0cmluZzEpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5XaGVyZShfXy5BcyhcImFcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLklzKFwiam9zaFwiKSkuSW4oXCJjcmVhdGVkXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLlZhbHVlcyhcIm5hbWVcIikuSXMoXCJqb3NoXCIpKS5JbihcImNyZWF0ZWRcIikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS53aGVyZShfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5pcyhcImpvc2hcIikpLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS53aGVyZShfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5pcyhcImpvc2hcIikpLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS53aGVyZShfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5pcyhcImpvc2hcIikpLmluXyhcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS53aGVyZShfXy5hc18oJ2EnKS52YWx1ZXMoJ25hbWUnKS5pc18oJ2pvc2gnKSkuaW5fKCdjcmVhdGVkJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV9qb3NoX3BldGVyWF9WWDFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9uYW1lX3doZXJlWHdpdGhpblhhWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgW1wiam9zaFwiLFwicGV0ZXJcIl0pLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS53aGVyZShQLndpdGhpbihcImFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgW1wiam9zaFwiLCBcInBldGVyXCJdKS5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikud2hlcmUoUC53aXRoaW4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbXCJqb3NoXCIsIFwicGV0ZXJcIl0pLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS53aGVyZShQLndpdGhpbihcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIGxpc3QwKS5WKHZpZDEpLm91dChzdHJpbmcxKS5pbihzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikud2hlcmUoUC53aXRoaW4oc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBMaXN0PG9iamVjdD4geyBcImpvc2hcIiwgXCJwZXRlclwiIH0pLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLldoZXJlKFAuV2l0aGluKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBbXWludGVyZmFjZXt9e1wiam9zaFwiLCBcInBldGVyXCJ9KS5WKHZpZDEpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLlZhbHVlcyhcIm5hbWVcIikuV2hlcmUoZ3JlbWxpbmdvLlAuV2l0aGluKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgW1wiam9zaFwiLCBcInBldGVyXCJdKS5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikud2hlcmUoUC53aXRoaW4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiam9zaFwiKTsgYWRkKFwicGV0ZXJcIik7IH19KS5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikud2hlcmUoUC53aXRoaW4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgW1wiam9zaFwiLCBcInBldGVyXCJdKS5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLndoZXJlKFAud2l0aGluKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgWydqb3NoJywgJ3BldGVyJ10pLlYodmlkMSkub3V0KCdjcmVhdGVkJykuaW5fKCdjcmVhdGVkJykudmFsdWVzKCduYW1lJykud2hlcmUoUC53aXRoaW4oJ2EnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfYXNYYlhfd2hlcmVYYV9uZXFYYlhYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAubmVxKFwiYlwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLm5lcShcImJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAubmVxKFwiYlwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5pbihzdHJpbmcxKS5hcyhzdHJpbmcyKS53aGVyZShzdHJpbmcwLCBQLm5lcShzdHJpbmcyKSkudmFsdWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJiXCIpLldoZXJlKFwiYVwiLCBQLk5lcShcImJcIikpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJiXCIpLldoZXJlKFwiYVwiLCBncmVtbGluZ28uUC5OZXEoXCJiXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLm5lcShcImJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLm5lcShcImJcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbl8oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5uZXEoXCJiXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS5hc18oJ2InKS53aGVyZSgnYScsIFAubmVxKCdiJykpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYX2FzWGJYX3doZXJlWGFzWGJYX291dFhjcmVhdGVkWF9oYXNYbmFtZV9yaXBwbGVYWF92YWx1ZXNYYWdlX25hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpLnZhbHVlcyhcImFnZVwiLCBcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKS52YWx1ZXMoXCJhZ2VcIiwgXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpLnZhbHVlcyhcImFnZVwiLCBcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuaW4oc3RyaW5nMSkuYXMoc3RyaW5nMikud2hlcmUoX18uYXMoc3RyaW5nMikub3V0KHN0cmluZzEpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSkudmFsdWVzKHN0cmluZzUsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJiXCIpLldoZXJlKF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIsIFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJiXCIpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkuVmFsdWVzKFwiYWdlXCIsIFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKS52YWx1ZXMoXCJhZ2VcIiwgXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKS52YWx1ZXMoXCJhZ2VcIiwgXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkudmFsdWVzKFwiYWdlXCIsIFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuYXNfKCdhJykub3V0KCdjcmVhdGVkJykuaW5fKCdjcmVhdGVkJykuYXNfKCdiJykud2hlcmUoX18uYXNfKCdiJykub3V0KCdjcmVhdGVkJykuaGFzKCduYW1lJywgJ3JpcHBsZScpKS52YWx1ZXMoJ2FnZScsICduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYZXFYYVhYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLmVxKFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikud2hlcmUoUC5lcShcImFcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLmVxKFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5pbihzdHJpbmcxKS53aGVyZShQLmVxKHN0cmluZzApKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5XaGVyZShQLkVxKFwiYVwiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5XaGVyZShncmVtbGluZ28uUC5FcShcImFcIikpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLmVxKFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLmVxKFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluXyhcImNyZWF0ZWRcIikud2hlcmUoUC5lcShcImFcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmluXygnY3JlYXRlZCcpLndoZXJlKFAuZXEoJ2EnKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9hc1hhWF9vdXRYY3JlYXRlZFhfaW5YY3JlYXRlZFhfd2hlcmVYbmVxWGFYWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikud2hlcmUoUC5uZXEoXCJhXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLm5lcShcImFcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLm5lcShcImFcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuaW4oc3RyaW5nMSkud2hlcmUoUC5uZXEoc3RyaW5nMCkpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLldoZXJlKFAuTmVxKFwiYVwiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKS5XaGVyZShncmVtbGluZ28uUC5OZXEoXCJhXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikud2hlcmUoUC5uZXEoXCJhXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLndoZXJlKFAubmVxKFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluXyhcImNyZWF0ZWRcIikud2hlcmUoUC5uZXEoXCJhXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKS53aGVyZShQLm5lcSgnYScpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dF9hZ2dyZWdhdGVYeFhfb3V0X3doZXJlWG5vdFh3aXRoaW5YYVhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkuYWdncmVnYXRlKFwieFwiKS5vdXQoKS53aGVyZShQLm5vdChQLndpdGhpbihcInhcIikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLm91dCgpLndoZXJlKFAubm90KFAud2l0aGluKFwieFwiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLm91dCgpLndoZXJlKFAubm90KFAud2l0aGluKFwieFwiKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KCkuYWdncmVnYXRlKHN0cmluZzApLm91dCgpLndoZXJlKFAubm90KFAud2l0aGluKHN0cmluZzApKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLkFnZ3JlZ2F0ZShcInhcIikuT3V0KCkuV2hlcmUoUC5Ob3QoUC5XaXRoaW4oXCJ4XCIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkuQWdncmVnYXRlKFwieFwiKS5PdXQoKS5XaGVyZShncmVtbGluZ28uUC5Ob3QoZ3JlbWxpbmdvLlAuV2l0aGluKFwieFwiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLm91dCgpLndoZXJlKFAubm90KFAud2l0aGluKFwieFwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkuYWdncmVnYXRlKFwieFwiKS5vdXQoKS53aGVyZShQLm5vdChQLndpdGhpbihcInhcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLmFnZ3JlZ2F0ZShcInhcIikub3V0KCkud2hlcmUoUC5ub3QoUC53aXRoaW4oXCJ4XCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgpLmFnZ3JlZ2F0ZSgneCcpLm91dCgpLndoZXJlKFAubm90XyhQLndpdGhpbigneCcpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV9nX1ZYMlhYX1ZYMVhfb3V0X3doZXJlWG5lcVhhWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpLndoZXJlKGlkKCkud2hlcmUoUC5uZXEoXCJhXCIpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkud2hlcmUoX18uaWQoKS53aGVyZShQLm5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KCkud2hlcmUoX18uaWQoKS53aGVyZShQLm5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpLndoZXJlKF9fLmlkKCkud2hlcmUoUC5uZXEoc3RyaW5nMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkuV2hlcmUoX18uSWQoKS5XaGVyZShQLk5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5XaGVyZShncmVtbGluZ28uVF9fLklkKCkuV2hlcmUoZ3JlbWxpbmdvLlAuTmVxKFwiYVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoKS53aGVyZShfXy5pZCgpLndoZXJlKFAubmVxKFwiYVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkud2hlcmUoX18uaWQoKS53aGVyZShQLm5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLndoZXJlKF9fLmlkKCkud2hlcmUoUC5uZXEoXCJhXCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgpLndoZXJlKF9fLmlkXygpLndoZXJlKFAubmVxKCdhJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3JlcGVhdFhib3RoRVhjcmVhdGVkWF93aGVyZVh3aXRob3V0WGVYWF9hZ2dyZWdhdGVYZVhfb3RoZXJWWF9lbWl0X3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoRShcImNyZWF0ZWRcIikud2hlcmUoUC53aXRob3V0KFwiZVwiKSkuYWdncmVnYXRlKFwiZVwiKS5vdGhlclYoKSkuZW1pdCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aEUoXCJjcmVhdGVkXCIpLndoZXJlKFAud2l0aG91dChcImVcIikpLmFnZ3JlZ2F0ZShcImVcIikub3RoZXJWKCkpLmVtaXQoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoRShcImNyZWF0ZWRcIikud2hlcmUoUC53aXRob3V0KFwiZVwiKSkuYWdncmVnYXRlKFwiZVwiKS5vdGhlclYoKSkuZW1pdCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoRShzdHJpbmcwKS53aGVyZShQLndpdGhvdXQoc3RyaW5nMSkpLmFnZ3JlZ2F0ZShzdHJpbmcxKS5vdGhlclYoKSkuZW1pdCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuUmVwZWF0KF9fLkJvdGhFKFwiY3JlYXRlZFwiKS5XaGVyZShQLldpdGhvdXQoXCJlXCIpKS5BZ2dyZWdhdGUoXCJlXCIpLk90aGVyVigpKS5FbWl0KCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGhFKFwiY3JlYXRlZFwiKS5XaGVyZShncmVtbGluZ28uUC5XaXRob3V0KFwiZVwiKSkuQWdncmVnYXRlKFwiZVwiKS5PdGhlclYoKSkuRW1pdCgpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGhFKFwiY3JlYXRlZFwiKS53aGVyZShQLndpdGhvdXQoXCJlXCIpKS5hZ2dyZWdhdGUoXCJlXCIpLm90aGVyVigpKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGhFKFwiY3JlYXRlZFwiKS53aGVyZShQLndpdGhvdXQoXCJlXCIpKS5hZ2dyZWdhdGUoXCJlXCIpLm90aGVyVigpKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGhFKFwiY3JlYXRlZFwiKS53aGVyZShQLndpdGhvdXQoXCJlXCIpKS5hZ2dyZWdhdGUoXCJlXCIpLm90aGVyVigpKS5lbWl0KCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aF9lKCdjcmVhdGVkJykud2hlcmUoUC53aXRob3V0KCdlJykpLmFnZ3JlZ2F0ZSgnZScpLm90aGVyX3YoKSkuZW1pdCgpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3doZXJlWG5vdFhvdXRYY3JlYXRlZFhYWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLndoZXJlKF9fLm5vdChfXy5vdXQoXCJjcmVhdGVkXCIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLm5vdChfXy5vdXQoXCJjcmVhdGVkXCIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS53aGVyZShfXy5ub3QoX18ub3V0KFwiY3JlYXRlZFwiKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLndoZXJlKF9fLm5vdChfXy5vdXQoc3RyaW5nMCkpKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uTm90KF9fLk91dChcImNyZWF0ZWRcIikpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLndoZXJlKF9fLm5vdChfXy5vdXQoXCJjcmVhdGVkXCIpKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkud2hlcmUoX18ubm90KF9fLm91dChcImNyZWF0ZWRcIikpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy5ub3QoX18ub3V0KFwiY3JlYXRlZFwiKSkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18ubm90XyhfXy5vdXQoJ2NyZWF0ZWQnKSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX3doZXJlWGFuZFhhc1hhWF9vdXRYa25vd3NYX2FzWGJYX19vclhhc1hiWF9vdXRYY3JlYXRlZFhfaGFzWG5hbWVfcmlwcGxlWF9fYXNYYlhfaW5Ya25vd3NYX2NvdW50X2lzWG5vdFhlcVgwWFhYWFhfc2VsZWN0WGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS53aGVyZShfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18ub3IoX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSwgX18uYXMoXCJiXCIpLmluKFwia25vd3NcIikuY291bnQoKS5pcyhQLm5vdChQLmVxKDApKSkpKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLndoZXJlKF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLCBfXy5hcyhcImJcIikuaW4oXCJrbm93c1wiKS5jb3VudCgpLmlzKFAubm90KFAuZXEoMCkpKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLndoZXJlKF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLCBfXy5hcyhcImJcIikuaW4oXCJrbm93c1wiKS5jb3VudCgpLmlzKFAubm90KFAuZXEoMCkpKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkud2hlcmUoX18uYW5kKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcyKS5hcyhzdHJpbmcxKSwgX18ub3IoX18uYXMoc3RyaW5nMSkub3V0KHN0cmluZzMpLmhhcyhzdHJpbmc0LCBzdHJpbmc1KSwgX18uYXMoc3RyaW5nMSkuaW4oc3RyaW5nMikuY291bnQoKS5pcyhQLm5vdChQLmVxKG51bWJlcjApKSkpKSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuV2hlcmUoX18uQW5kKF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIF9fLk9yKF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIiksIF9fLkFzKFwiYlwiKS5JbihcImtub3dzXCIpLkNvdW50KCkuSXMoUC5Ob3QoUC5FcSgwKSkpKSkpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLldoZXJlKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKFwia25vd3NcIikuQ291bnQoKS5JcyhncmVtbGluZ28uUC5Ob3QoZ3JlbWxpbmdvLlAuRXEoMCkpKSkpKS5TZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLndoZXJlKF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLCBfXy5hcyhcImJcIikuaW4oXCJrbm93c1wiKS5jb3VudCgpLmlzKFAubm90KFAuZXEoMCkpKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS53aGVyZShfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18ub3IoX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSwgX18uYXMoXCJiXCIpLmluKFwia25vd3NcIikuY291bnQoKS5pcyhQLm5vdChQLmVxKDApKSkpKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikud2hlcmUoX18uYW5kKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLm9yKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIiksIF9fLmFzKFwiYlwiKS5pbl8oXCJrbm93c1wiKS5jb3VudCgpLmlzKFAubm90KFAuZXEoMCkpKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKS53aGVyZShfXy5hbmRfKF9fLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKSwgX18ub3JfKF9fLmFzXygnYicpLm91dCgnY3JlYXRlZCcpLmhhcygnbmFtZScsICdyaXBwbGUnKSwgX18uYXNfKCdiJykuaW5fKCdrbm93cycpLmNvdW50KCkuaXNfKFAubm90XyhQLmVxKDApKSkpKSkuc2VsZWN0KCdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfb3V0WGtub3dzWF9vcl9pblhrbm93c1hYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS53aGVyZShfXy5vdXQoXCJjcmVhdGVkXCIpLmFuZCgpLm91dChcImtub3dzXCIpLm9yKCkuaW4oXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLm91dChcImNyZWF0ZWRcIikuYW5kKCkub3V0KFwia25vd3NcIikub3IoKS5pbihcImtub3dzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLndoZXJlKF9fLm91dChcImNyZWF0ZWRcIikuYW5kKCkub3V0KFwia25vd3NcIikub3IoKS5pbihcImtub3dzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS53aGVyZShfXy5vdXQoc3RyaW5nMCkuYW5kKCkub3V0KHN0cmluZzEpLm9yKCkuaW4oc3RyaW5nMSkpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5XaGVyZShfXy5PdXQoXCJjcmVhdGVkXCIpLkFuZCgpLk91dChcImtub3dzXCIpLk9yKCkuSW4oXCJrbm93c1wiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpLkFuZCgpLk91dChcImtub3dzXCIpLk9yKCkuSW4oXCJrbm93c1wiKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS53aGVyZShfXy5vdXQoXCJjcmVhdGVkXCIpLmFuZCgpLm91dChcImtub3dzXCIpLm9yKCkuaW4oXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkud2hlcmUoX18ub3V0KFwiY3JlYXRlZFwiKS5hbmQoKS5vdXQoXCJrbm93c1wiKS5vcigpLmluKFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLndoZXJlKF9fLm91dChcImNyZWF0ZWRcIikuYW5kKCkub3V0KFwia25vd3NcIikub3IoKS5pbl8oXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS53aGVyZShfXy5vdXQoJ2NyZWF0ZWQnKS5hbmRfKCkub3V0KCdrbm93cycpLm9yXygpLmluXygna25vd3MnKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRYY3JlYXRlZFhfYXNYYlhfd2hlcmVYYW5kWGFzWGJYX2luX19ub3RYYXNYYVhfb3V0WGNyZWF0ZWRYX2hhc1huYW1lX3JpcHBsZVhYWF9zZWxlY3RYYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoX18uYW5kKF9fLmFzKFwiYlwiKS5pbigpLCBfXy5ub3QoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShfXy5hbmQoX18uYXMoXCJiXCIpLmluKCksIF9fLm5vdChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShfXy5hbmQoX18uYXMoXCJiXCIpLmluKCksIF9fLm5vdChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpKSkpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMikud2hlcmUoX18uYW5kKF9fLmFzKHN0cmluZzIpLmluKCksIF9fLm5vdChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuaGFzKHN0cmluZzMsIHN0cmluZzQpKSkpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIikuV2hlcmUoX18uQW5kKF9fLkFzKFwiYlwiKS5JbigpLCBfXy5Ob3QoX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLldoZXJlKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKCksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpKS5TZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoX18uYW5kKF9fLmFzKFwiYlwiKS5pbigpLCBfXy5ub3QoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKF9fLmFuZChfXy5hcyhcImJcIikuaW4oKSwgX18ubm90KF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikpKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShfXy5hbmQoX18uYXMoXCJiXCIpLmluXygpLCBfXy5ub3QoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKS53aGVyZShfXy5hbmRfKF9fLmFzXygnYicpLmluXygpLCBfXy5ub3RfKF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmhhcygnbmFtZScsICdyaXBwbGUnKSkpKS5zZWxlY3QoJ2EnLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0WGNyZWF0ZWRYX2FzWGJYX2luWGNyZWF0ZWRYX2FzWGNYX2JvdGhYa25vd3NYX2JvdGhYa25vd3NYX2FzWGRYX3doZXJlWGNfX25vdFhlcVhhWF9vclhlcVhkWFhYWF9zZWxlY3RYYV9iX2NfZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikuYm90aChcImtub3dzXCIpLmJvdGgoXCJrbm93c1wiKS5hcyhcImRcIikud2hlcmUoXCJjXCIsIFAubm90KFAuZXEoXCJhXCIpLm9yKFAuZXEoXCJkXCIpKSkpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKS5ib3RoKFwia25vd3NcIikuYm90aChcImtub3dzXCIpLmFzKFwiZFwiKS53aGVyZShcImNcIiwgUC5ub3QoUC5lcShcImFcIikub3IoUC5lcShcImRcIikpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKS5ib3RoKFwia25vd3NcIikuYm90aChcImtub3dzXCIpLmFzKFwiZFwiKS53aGVyZShcImNcIiwgUC5ub3QoUC5lcShcImFcIikub3IoUC5lcShcImRcIikpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLmluKHN0cmluZzEpLmFzKHN0cmluZzMpLmJvdGgoc3RyaW5nNCkuYm90aChzdHJpbmc0KS5hcyhzdHJpbmc1KS53aGVyZShzdHJpbmczLCBQLm5vdChQLmVxKHN0cmluZzApLm9yKFAuZXEoc3RyaW5nNSkpKSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJjXCIpLkJvdGgoXCJrbm93c1wiKS5Cb3RoKFwia25vd3NcIikuQXMoXCJkXCIpLldoZXJlKFwiY1wiLCBQLk5vdChQLkVxKFwiYVwiKS5PcihQLkVxKFwiZFwiKSkpKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiY1wiKS5Cb3RoKFwia25vd3NcIikuQm90aChcImtub3dzXCIpLkFzKFwiZFwiKS5XaGVyZShcImNcIiwgZ3JlbWxpbmdvLlAuTm90KGdyZW1saW5nby5QLkVxKFwiYVwiKS5PcihncmVtbGluZ28uUC5FcShcImRcIikpKSkuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKS5ib3RoKFwia25vd3NcIikuYm90aChcImtub3dzXCIpLmFzKFwiZFwiKS53aGVyZShcImNcIiwgUC5ub3QoUC5lcShcImFcIikub3IoUC5lcShcImRcIikpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikuYm90aChcImtub3dzXCIpLmJvdGgoXCJrbm93c1wiKS5hcyhcImRcIikud2hlcmUoXCJjXCIsIFAubm90KFAuZXEoXCJhXCIpLm9yKFAuZXEoXCJkXCIpKSkpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pbl8oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKS5ib3RoKFwia25vd3NcIikuYm90aChcImtub3dzXCIpLmFzKFwiZFwiKS53aGVyZShcImNcIiwgUC5ub3QoUC5lcShcImFcIikub3IoUC5lcShcImRcIikpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKS5pbl8oJ2NyZWF0ZWQnKS5hc18oJ2MnKS5ib3RoKCdrbm93cycpLmJvdGgoJ2tub3dzJykuYXNfKCdkJykud2hlcmUoJ2MnLCBQLm5vdF8oUC5lcSgnYScpLm9yXyhQLmVxKCdkJykpKSkuc2VsZWN0KCdhJywgJ2InLCAnYycsICdkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYlhfd2hlcmVYaW5fY291bnRfaXNYZXFYM1hYX29yX3doZXJlWG91dFhjcmVhdGVkWF9hbmRfaGFzWGxhYmVsX3BlcnNvblhYWF9zZWxlY3RYYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5pbigpLmNvdW50KCkuaXMoUC5lcSgzKSkub3IoKS53aGVyZShfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hbmQoKS5hcyhcImJcIikuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5pbigpLmNvdW50KCkuaXMoUC5lcSgzKSkub3IoKS53aGVyZShfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hbmQoKS5hcyhcImJcIikuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS53aGVyZShfXy5hcyhcImJcIikuaW4oKS5jb3VudCgpLmlzKFAuZXEoMykpLm9yKCkud2hlcmUoX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYW5kKCkuYXMoXCJiXCIpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSkpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcxKS53aGVyZShfXy5hcyhzdHJpbmcxKS5pbigpLmNvdW50KCkuaXMoUC5lcShudW1iZXIwKSkub3IoKS53aGVyZShfXy5hcyhzdHJpbmcxKS5vdXQoc3RyaW5nMikuYW5kKCkuYXMoc3RyaW5nMSkuaGFzKFQubGFiZWwsIHN0cmluZzMpKSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuV2hlcmUoX18uQXMoXCJiXCIpLkluKCkuQ291bnQoKS5JcyhQLkVxKDMpKS5PcigpLldoZXJlKF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkFuZCgpLkFzKFwiYlwiKS5IYXMoVC5MYWJlbCwgXCJwZXJzb25cIikpKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5XaGVyZShncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5JbigpLkNvdW50KCkuSXMoZ3JlbWxpbmdvLlAuRXEoMykpLk9yKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5BcyhcImJcIikuT3V0KFwiY3JlYXRlZFwiKS5BbmQoKS5BcyhcImJcIikuSGFzKGdyZW1saW5nby5ULkxhYmVsLCBcInBlcnNvblwiKSkpLlNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikud2hlcmUoX18uYXMoXCJiXCIpLmluKCkuY291bnQoKS5pcyhQLmVxKDMpKS5vcigpLndoZXJlKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFuZCgpLmFzKFwiYlwiKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS53aGVyZShfXy5hcyhcImJcIikuaW4oKS5jb3VudCgpLmlzKFAuZXEoMykpLm9yKCkud2hlcmUoX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYW5kKCkuYXMoXCJiXCIpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSkpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLndoZXJlKF9fLmFzKFwiYlwiKS5pbl8oKS5jb3VudCgpLmlzKFAuZXEoMykpLm9yKCkud2hlcmUoX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYW5kKCkuYXMoXCJiXCIpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSkpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYicpLndoZXJlKF9fLmFzXygnYicpLmluXygpLmNvdW50KCkuaXNfKFAuZXEoMykpLm9yXygpLndoZXJlKF9fLmFzXygnYicpLm91dCgnY3JlYXRlZCcpLmFuZF8oKS5hc18oJ2InKS5oYXMoVC5sYWJlbCwgJ3BlcnNvbicpKSkuc2VsZWN0KCdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF9hc1hiWF93aGVyZVhhX2d0WGJYWF9ieVhhZ2VYX3NlbGVjdFhhX2JYX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAuZ3QoXCJiXCIpKS5ieShcImFnZVwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmd0KFwiYlwiKSkuYnkoXCJhZ2VcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAuZ3QoXCJiXCIpKS5ieShcImFnZVwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5pbihzdHJpbmcxKS5hcyhzdHJpbmcyKS53aGVyZShzdHJpbmcwLCBQLmd0KHN0cmluZzIpKS5ieShzdHJpbmczKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMikuYnkoc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5XaGVyZShcImFcIiwgUC5HdChcImJcIikpLkJ5KFwiYWdlXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5XaGVyZShcImFcIiwgZ3JlbWxpbmdvLlAuR3QoXCJiXCIpKS5CeShcImFnZVwiKS5TZWxlY3QoXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5ndChcImJcIikpLmJ5KFwiYWdlXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5ndChcImJcIikpLmJ5KFwiYWdlXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAuZ3QoXCJiXCIpKS5ieShcImFnZVwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCdjcmVhdGVkJykuaW5fKCdjcmVhdGVkJykuYXNfKCdiJykud2hlcmUoJ2EnLCBQLmd0KCdiJykpLmJ5KCdhZ2UnKS5zZWxlY3QoJ2EnLCAnYicpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hc1hjWF93aGVyZVhhX2d0WGJYX29yWGVxWGJYWFhfYnlYYWdlWF9ieVh3ZWlnaHRYX2J5WHdlaWdodFhfc2VsZWN0WGFfY1hfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hcyhcImNcIikud2hlcmUoXCJhXCIsIFAuZ3QoXCJiXCIpLm9yKFAuZXEoXCJiXCIpKSkuYnkoXCJhZ2VcIikuYnkoXCJ3ZWlnaHRcIikuYnkoXCJ3ZWlnaHRcIikuc2VsZWN0KFwiYVwiLCBcImNcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hcyhcImNcIikud2hlcmUoXCJhXCIsIFAuZ3QoXCJiXCIpLm9yKFAuZXEoXCJiXCIpKSkuYnkoXCJhZ2VcIikuYnkoXCJ3ZWlnaHRcIikuYnkoXCJ3ZWlnaHRcIikuc2VsZWN0KFwiYVwiLCBcImNcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYXMoXCJjXCIpLndoZXJlKFwiYVwiLCBQLmd0KFwiYlwiKS5vcihQLmVxKFwiYlwiKSkpLmJ5KFwiYWdlXCIpLmJ5KFwid2VpZ2h0XCIpLmJ5KFwid2VpZ2h0XCIpLnNlbGVjdChcImFcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0RShzdHJpbmcxKS5hcyhzdHJpbmcyKS5pblYoKS5hcyhzdHJpbmczKS53aGVyZShzdHJpbmcwLCBQLmd0KHN0cmluZzIpLm9yKFAuZXEoc3RyaW5nMikpKS5ieShzdHJpbmc0KS5ieShzdHJpbmc1KS5ieShzdHJpbmc1KS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMykuYnkoc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dEUoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5JblYoKS5BcyhcImNcIikuV2hlcmUoXCJhXCIsIFAuR3QoXCJiXCIpLk9yKFAuRXEoXCJiXCIpKSkuQnkoXCJhZ2VcIikuQnkoXCJ3ZWlnaHRcIikuQnkoXCJ3ZWlnaHRcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiY1wiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0RShcImNyZWF0ZWRcIikuQXMoXCJiXCIpLkluVigpLkFzKFwiY1wiKS5XaGVyZShcImFcIiwgZ3JlbWxpbmdvLlAuR3QoXCJiXCIpLk9yKGdyZW1saW5nby5QLkVxKFwiYlwiKSkpLkJ5KFwiYWdlXCIpLkJ5KFwid2VpZ2h0XCIpLkJ5KFwid2VpZ2h0XCIpLlNlbGVjdChcImFcIiwgXCJjXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0RShcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluVigpLmFzKFwiY1wiKS53aGVyZShcImFcIiwgUC5ndChcImJcIikub3IoUC5lcShcImJcIikpKS5ieShcImFnZVwiKS5ieShcIndlaWdodFwiKS5ieShcIndlaWdodFwiKS5zZWxlY3QoXCJhXCIsIFwiY1wiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYXMoXCJjXCIpLndoZXJlKFwiYVwiLCBQLmd0KFwiYlwiKS5vcihQLmVxKFwiYlwiKSkpLmJ5KFwiYWdlXCIpLmJ5KFwid2VpZ2h0XCIpLmJ5KFwid2VpZ2h0XCIpLnNlbGVjdChcImFcIiwgXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hcyhcImNcIikud2hlcmUoXCJhXCIsIFAuZ3QoXCJiXCIpLm9yKFAuZXEoXCJiXCIpKSkuYnkoXCJhZ2VcIikuYnkoXCJ3ZWlnaHRcIikuYnkoXCJ3ZWlnaHRcIikuc2VsZWN0KFwiYVwiLCBcImNcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dF9lKCdjcmVhdGVkJykuYXNfKCdiJykuaW5fdigpLmFzXygnYycpLndoZXJlKCdhJywgUC5ndCgnYicpLm9yXyhQLmVxKCdiJykpKS5ieSgnYWdlJykuYnkoJ3dlaWdodCcpLmJ5KCd3ZWlnaHQnKS5zZWxlY3QoJ2EnLCAnYycpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRFWGNyZWF0ZWRYX2FzWGJYX2luVl9hc1hjWF9pblhjcmVhdGVkWF9hc1hkWF93aGVyZVhhX2x0WGJYX29yWGd0WGNYWF9hbmRYbmVxWGRYWFhfYnlYYWdlWF9ieVh3ZWlnaHRYX2J5WGluWGNyZWF0ZWRYX3ZhbHVlc1hhZ2VYX21pblhfc2VsZWN0WGFfY19kWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0RShcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluVigpLmFzKFwiY1wiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJkXCIpLndoZXJlKFwiYVwiLCBQLmx0KFwiYlwiKS5vcihQLmd0KFwiY1wiKSkuYW5kKFAubmVxKFwiZFwiKSkpLmJ5KFwiYWdlXCIpLmJ5KFwid2VpZ2h0XCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJhZ2VcIikubWluKCkpLnNlbGVjdChcImFcIiwgXCJjXCIsIFwiZFwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0RShcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluVigpLmFzKFwiY1wiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJkXCIpLndoZXJlKFwiYVwiLCBQLmx0KFwiYlwiKS5vcihQLmd0KFwiY1wiKSkuYW5kKFAubmVxKFwiZFwiKSkpLmJ5KFwiYWdlXCIpLmJ5KFwid2VpZ2h0XCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJhZ2VcIikubWluKCkpLnNlbGVjdChcImFcIiwgXCJjXCIsIFwiZFwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hcyhcImNcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiZFwiKS53aGVyZShcImFcIiwgUC5sdChcImJcIikub3IoUC5ndChcImNcIikpLmFuZChQLm5lcShcImRcIikpKS5ieShcImFnZVwiKS5ieShcIndlaWdodFwiKS5ieShfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwiYWdlXCIpLm1pbigpKS5zZWxlY3QoXCJhXCIsIFwiY1wiLCBcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXRFKHN0cmluZzEpLmFzKHN0cmluZzIpLmluVigpLmFzKHN0cmluZzMpLmluKHN0cmluZzEpLmFzKHN0cmluZzQpLndoZXJlKHN0cmluZzAsIFAubHQoc3RyaW5nMikub3IoUC5ndChzdHJpbmczKSkuYW5kKFAubmVxKHN0cmluZzQpKSkuYnkoc3RyaW5nNSkuYnkoc3RyaW5nNikuYnkoX18uaW4oc3RyaW5nMSkudmFsdWVzKHN0cmluZzUpLm1pbigpKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMywgc3RyaW5nNCkuYnkoc3RyaW5nNykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dEUoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5JblYoKS5BcyhcImNcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiZFwiKS5XaGVyZShcImFcIiwgUC5MdChcImJcIikuT3IoUC5HdChcImNcIikpLkFuZChQLk5lcShcImRcIikpKS5CeShcImFnZVwiKS5CeShcIndlaWdodFwiKS5CeShfXy5JbihcImNyZWF0ZWRcIikuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuTWluPG9iamVjdD4oKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiY1wiLCBcImRcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dEUoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5JblYoKS5BcyhcImNcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiZFwiKS5XaGVyZShcImFcIiwgZ3JlbWxpbmdvLlAuTHQoXCJiXCIpLk9yKGdyZW1saW5nby5QLkd0KFwiY1wiKSkuQW5kKGdyZW1saW5nby5QLk5lcShcImRcIikpKS5CeShcImFnZVwiKS5CeShcIndlaWdodFwiKS5CeShncmVtbGluZ28uVF9fLkluKFwiY3JlYXRlZFwiKS5WYWx1ZXMoXCJhZ2VcIikuTWluKCkpLlNlbGVjdChcImFcIiwgXCJjXCIsIFwiZFwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hcyhcImNcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiZFwiKS53aGVyZShcImFcIiwgUC5sdChcImJcIikub3IoUC5ndChcImNcIikpLmFuZChQLm5lcShcImRcIikpKS5ieShcImFnZVwiKS5ieShcIndlaWdodFwiKS5ieShfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwiYWdlXCIpLm1pbigpKS5zZWxlY3QoXCJhXCIsIFwiY1wiLCBcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0RShcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmluVigpLmFzKFwiY1wiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJkXCIpLndoZXJlKFwiYVwiLCBQLmx0KFwiYlwiKS5vcihQLmd0KFwiY1wiKSkuYW5kKFAubmVxKFwiZFwiKSkpLmJ5KFwiYWdlXCIpLmJ5KFwid2VpZ2h0XCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJhZ2VcIikubWluKCkpLnNlbGVjdChcImFcIiwgXCJjXCIsIFwiZFwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYXMoXCJjXCIpLmluXyhcImNyZWF0ZWRcIikuYXMoXCJkXCIpLndoZXJlKFwiYVwiLCBQLmx0KFwiYlwiKS5vcihQLmd0KFwiY1wiKSkuYW5kKFAubmVxKFwiZFwiKSkpLmJ5KFwiYWdlXCIpLmJ5KFwid2VpZ2h0XCIpLmJ5KF9fLmluXyhcImNyZWF0ZWRcIikudmFsdWVzKFwiYWdlXCIpLm1pbigpKS5zZWxlY3QoXCJhXCIsIFwiY1wiLCBcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dF9lKCdjcmVhdGVkJykuYXNfKCdiJykuaW5fdigpLmFzXygnYycpLmluXygnY3JlYXRlZCcpLmFzXygnZCcpLndoZXJlKCdhJywgUC5sdCgnYicpLm9yXyhQLmd0KCdjJykpLmFuZF8oUC5uZXEoJ2QnKSkpLmJ5KCdhZ2UnKS5ieSgnd2VpZ2h0JykuYnkoX18uaW5fKCdjcmVhdGVkJykudmFsdWVzKCdhZ2UnKS5taW5fKCkpLnNlbGVjdCgnYScsICdjJywgJ2QnKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfb3V0X2hhc1hhZ2VYX3doZXJlWGd0WGFYWF9ieVhhZ2VYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoKS5oYXMoXCJhZ2VcIikud2hlcmUoUC5ndChcImFcIikpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dCgpLmhhcyhcImFnZVwiKS53aGVyZShQLmd0KFwiYVwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dCgpLmhhcyhcImFnZVwiKS53aGVyZShQLmd0KFwiYVwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dCgpLmhhcyhzdHJpbmcxKS53aGVyZShQLmd0KHN0cmluZzApKS5ieShzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoKS5IYXMoXCJhZ2VcIikuV2hlcmUoUC5HdChcImFcIikpLkJ5KFwiYWdlXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KCkuSGFzKFwiYWdlXCIpLldoZXJlKGdyZW1saW5nby5QLkd0KFwiYVwiKSkuQnkoXCJhZ2VcIikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dCgpLmhhcyhcImFnZVwiKS53aGVyZShQLmd0KFwiYVwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoKS5oYXMoXCJhZ2VcIikud2hlcmUoUC5ndChcImFcIikpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KCkuaGFzKFwiYWdlXCIpLndoZXJlKFAuZ3QoXCJhXCIpKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoKS5oYXMoJ2FnZScpLndoZXJlKFAuZ3QoJ2EnKSkuYnkoJ2FnZScpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYM1hfYXNYYVhfaW5fb3V0X2FzWGJYX3doZXJlWGFfZXFYYlhYX2J5WGFnZVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMykuYXMoXCJhXCIpLmluKCkub3V0KCkuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5hcyhcImFcIikuaW4oKS5vdXQoKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAuZXEoXCJiXCIpKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5hcyhcImFcIikuaW4oKS5vdXQoKS5hcyhcImJcIikud2hlcmUoXCJhXCIsIFAuZXEoXCJiXCIpKS5ieShcImFnZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMykuYXMoc3RyaW5nMCkuaW4oKS5vdXQoKS5hcyhzdHJpbmcxKS53aGVyZShzdHJpbmcwLCBQLmVxKHN0cmluZzEpKS5ieShzdHJpbmcyKS52YWx1ZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDMpLkFzKFwiYVwiKS5JbigpLk91dCgpLkFzKFwiYlwiKS5XaGVyZShcImFcIiwgUC5FcShcImJcIikpLkJ5KFwiYWdlXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQzKS5BcyhcImFcIikuSW4oKS5PdXQoKS5BcyhcImJcIikuV2hlcmUoXCJhXCIsIGdyZW1saW5nby5QLkVxKFwiYlwiKSkuQnkoXCJhZ2VcIikuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMykuYXMoXCJhXCIpLmluKCkub3V0KCkuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDMpLmFzKFwiYVwiKS5pbigpLm91dCgpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQzKS5hcyhcImFcIikuaW5fKCkub3V0KCkuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykuYXNfKCdhJykuaW5fKCkub3V0KCkuYXNfKCdiJykud2hlcmUoJ2EnLCBQLmVxKCdiJykpLmJ5KCdhZ2UnKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVlgzWF9hc1hhWF9pbl9vdXRfYXNYYlhfd2hlcmVYYV9lcVhiWFhfYnlYYWdlWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYodmlkMykuYXMoXCJhXCIpLmluKCkub3V0KCkuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYodmlkMykuYXMoXCJhXCIpLmluKCkub3V0KCkuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKHZpZDMpLmFzKFwiYVwiKS5pbigpLm91dCgpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYodmlkMykuYXMoc3RyaW5nMCkuaW4oKS5vdXQoKS5hcyhzdHJpbmcxKS53aGVyZShzdHJpbmcwLCBQLmVxKHN0cmluZzEpKS5ieShzdHJpbmcyKS52YWx1ZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVih2aWQzKS5BcyhcImFcIikuSW4oKS5PdXQoKS5BcyhcImJcIikuV2hlcmUoXCJhXCIsIFAuRXEoXCJiXCIpKS5CeShcImFnZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKHZpZDMpLkFzKFwiYVwiKS5JbigpLk91dCgpLkFzKFwiYlwiKS5XaGVyZShcImFcIiwgZ3JlbWxpbmdvLlAuRXEoXCJiXCIpKS5CeShcImFnZVwiKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYodmlkMykuYXMoXCJhXCIpLmluKCkub3V0KCkuYXMoXCJiXCIpLndoZXJlKFwiYVwiLCBQLmVxKFwiYlwiKSkuYnkoXCJhZ2VcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKHZpZDMpLmFzKFwiYVwiKS5pbigpLm91dCgpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYodmlkMykuYXMoXCJhXCIpLmluXygpLm91dCgpLmFzKFwiYlwiKS53aGVyZShcImFcIiwgUC5lcShcImJcIikpLmJ5KFwiYWdlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVih2aWQzKS5hc18oJ2EnKS5pbl8oKS5vdXQoKS5hc18oJ2InKS53aGVyZSgnYScsIFAuZXEoJ2InKSkuYnkoJ2FnZScpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYblhfd2hlcmVYb3JYaGFzTGFiZWxYc29mdHdhcmVYX2hhc0xhYmVsWHBlcnNvblhYWF9zZWxlY3RYblhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJuXCIpLndoZXJlKF9fLm9yKF9fLmhhc0xhYmVsKFwic29mdHdhcmVcIiksIF9fLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuc2VsZWN0KFwiblwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcIm5cIikud2hlcmUoX18ub3IoX18uaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uaGFzTGFiZWwoXCJwZXJzb25cIikpKS5zZWxlY3QoXCJuXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcIm5cIikud2hlcmUoX18ub3IoX18uaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uaGFzTGFiZWwoXCJwZXJzb25cIikpKS5zZWxlY3QoXCJuXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkud2hlcmUoX18ub3IoX18uaGFzTGFiZWwoc3RyaW5nMSksIF9fLmhhc0xhYmVsKHN0cmluZzIpKSkuc2VsZWN0KHN0cmluZzApLmJ5KHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiblwiKS5XaGVyZShfXy5PcihfXy5IYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5IYXNMYWJlbChcInBlcnNvblwiKSkpLlNlbGVjdDxvYmplY3Q+KFwiblwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcIm5cIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhc0xhYmVsKFwic29mdHdhcmVcIiksIGdyZW1saW5nby5UX18uSGFzTGFiZWwoXCJwZXJzb25cIikpKS5TZWxlY3QoXCJuXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcIm5cIikud2hlcmUoX18ub3IoX18uaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uaGFzTGFiZWwoXCJwZXJzb25cIikpKS5zZWxlY3QoXCJuXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJuXCIpLndoZXJlKF9fLm9yKF9fLmhhc0xhYmVsKFwic29mdHdhcmVcIiksIF9fLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuc2VsZWN0KFwiblwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiblwiKS53aGVyZShfXy5vcihfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5oYXNMYWJlbChcInBlcnNvblwiKSkpLnNlbGVjdChcIm5cIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnbicpLndoZXJlKF9fLm9yXyhfXy5oYXNfbGFiZWwoJ3NvZnR3YXJlJyksIF9fLmhhc19sYWJlbCgncGVyc29uJykpKS5zZWxlY3QoJ24nKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYblhfd2hlcmVYb3JYc2VsZWN0WG5YX2hhc0xhYmVsWHNvZnR3YXJlWF9zZWxlY3RYblhfaGFzTGFiZWxYcGVyc29uWFhYX3NlbGVjdFhuWF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcIm5cIikud2hlcmUoX18ub3IoX18uc2VsZWN0KFwiblwiKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5zZWxlY3QoXCJuXCIpLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuc2VsZWN0KFwiblwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcIm5cIikud2hlcmUoX18ub3IoX18uc2VsZWN0KFwiblwiKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5zZWxlY3QoXCJuXCIpLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuc2VsZWN0KFwiblwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJuXCIpLndoZXJlKF9fLm9yKF9fLnNlbGVjdChcIm5cIikuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uc2VsZWN0KFwiblwiKS5oYXNMYWJlbChcInBlcnNvblwiKSkpLnNlbGVjdChcIm5cIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS53aGVyZShfXy5vcihfXy5zZWxlY3Qoc3RyaW5nMCkuaGFzTGFiZWwoc3RyaW5nMSksIF9fLnNlbGVjdChzdHJpbmcwKS5oYXNMYWJlbChzdHJpbmcyKSkpLnNlbGVjdChzdHJpbmcwKS5ieShzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcIm5cIikuV2hlcmUoX18uT3IoX18uU2VsZWN0PG9iamVjdD4oXCJuXCIpLkhhc0xhYmVsKFwic29mdHdhcmVcIiksIF9fLlNlbGVjdDxvYmplY3Q+KFwiblwiKS5IYXNMYWJlbChcInBlcnNvblwiKSkpLlNlbGVjdDxvYmplY3Q+KFwiblwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcIm5cIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLlNlbGVjdChcIm5cIikuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJuXCIpLkhhc0xhYmVsKFwicGVyc29uXCIpKSkuU2VsZWN0KFwiblwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJuXCIpLndoZXJlKF9fLm9yKF9fLnNlbGVjdChcIm5cIikuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSwgX18uc2VsZWN0KFwiblwiKS5oYXNMYWJlbChcInBlcnNvblwiKSkpLnNlbGVjdChcIm5cIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcIm5cIikud2hlcmUoX18ub3IoX18uc2VsZWN0KFwiblwiKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLCBfXy5zZWxlY3QoXCJuXCIpLmhhc0xhYmVsKFwicGVyc29uXCIpKSkuc2VsZWN0KFwiblwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiblwiKS53aGVyZShfXy5vcihfXy5zZWxlY3QoXCJuXCIpLmhhc0xhYmVsKFwic29mdHdhcmVcIiksIF9fLnNlbGVjdChcIm5cIikuaGFzTGFiZWwoXCJwZXJzb25cIikpKS5zZWxlY3QoXCJuXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ24nKS53aGVyZShfXy5vcl8oX18uc2VsZWN0KCduJykuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLCBfXy5zZWxlY3QoJ24nKS5oYXNfbGFiZWwoJ3BlcnNvbicpKSkuc2VsZWN0KCduJykuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYeFhfd2hlcmVYaW5FWGtub3dzWF9jb3VudF9pc1hndGVYMVhYWF9zZWxlY3RYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJ4XCIpLndoZXJlKF9fLmluRShcImtub3dzXCIpLmNvdW50KCkuaXMoUC5ndGUoMSkpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJ4XCIpLndoZXJlKF9fLmluRShcImtub3dzXCIpLmNvdW50KCkuaXMoUC5ndGUoMSkpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwieFwiKS53aGVyZShfXy5pbkUoXCJrbm93c1wiKS5jb3VudCgpLmlzKFAuZ3RlKDEpKSkuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuYXMoc3RyaW5nMSkud2hlcmUoX18uaW5FKHN0cmluZzIpLmNvdW50KCkuaXMoUC5ndGUobnVtYmVyMCkpKS5zZWxlY3Qoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQXMoXCJ4XCIpLldoZXJlKF9fLkluRShcImtub3dzXCIpLkNvdW50KCkuSXMoUC5HdGUoMSkpKS5TZWxlY3Q8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcInhcIikuV2hlcmUoZ3JlbWxpbmdvLlRfXy5JbkUoXCJrbm93c1wiKS5Db3VudCgpLklzKGdyZW1saW5nby5QLkd0ZSgxKSkpLlNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJ4XCIpLndoZXJlKF9fLmluRShcImtub3dzXCIpLmNvdW50KCkuaXMoUC5ndGUoMSkpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInhcIikud2hlcmUoX18uaW5FKFwia25vd3NcIikuY291bnQoKS5pcyhQLmd0ZSgxKSkpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwieFwiKS53aGVyZShfXy5pbkUoXCJrbm93c1wiKS5jb3VudCgpLmlzKFAuZ3RlKDEpKSkuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmFzXygneCcpLndoZXJlKF9fLmluX2UoJ2tub3dzJykuY291bnQoKS5pc18oUC5ndGUoMSkpKS5zZWxlY3QoJ3gnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ2V0X2dfVl93aGVyZVhhZ2VfaXNYZ3RfMzBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS53aGVyZSh2YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoc3RyaW5nMCkuaXMoUC5ndChudW1iZXIwKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLldoZXJlKF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuR3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLlZhbHVlcyhcImFnZVwiKS5JcyhncmVtbGluZ28uUC5HdCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgzMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMzApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDMwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLndoZXJlKF9fLnZhbHVlcygnYWdlJykuaXNfKFAuZ3QoMzApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl93aGVyZVhsYWJlbF9pc1hzb2Z0d2FyZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLndoZXJlKGxhYmVsKCkuaXMoJ3NvZnR3YXJlJykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pcygnc29mdHdhcmUnKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pcygnc29mdHdhcmUnKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLndoZXJlKF9fLmxhYmVsKCkuaXMoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLldoZXJlKF9fLkxhYmVsKCkuSXMoXCJzb2Z0d2FyZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLkxhYmVsKCkuSXMoXCJzb2Z0d2FyZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pcygnc29mdHdhcmUnKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLndoZXJlKF9fLmxhYmVsKCkuaXMoXCJzb2Z0d2FyZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLndoZXJlKF9fLmxhYmVsKCkuaXMoXCJzb2Z0d2FyZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pc18oJ3NvZnR3YXJlJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYbGFiZWxfaXNYcGVyc29uWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkud2hlcmUobGFiZWwoKS5pcyhcInBlcnNvblwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pcyhzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uTGFiZWwoKS5JcyhcInBlcnNvblwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLkxhYmVsKCkuSXMoXCJwZXJzb25cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLndoZXJlKF9fLmxhYmVsKCkuaXMoXCJwZXJzb25cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS53aGVyZShfXy5sYWJlbCgpLmlzKFwicGVyc29uXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pcyhcInBlcnNvblwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18ubGFiZWwoKS5pc18oJ3BlcnNvbicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneS5jbGFzcykuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3kpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneVhfVl9vdXRfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpLm91dCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpLm91dCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLk91dCgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5BZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkuT3V0KCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLm91dCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3koKSkuVigpLm91dCgpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYQWRqYWNlbnRUb0luY2lkZW50U3RyYXRlZ3lYX1Zfd2hlcmVYb3V0WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0KCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpLndoZXJlKF9fLm91dCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0KCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KCkpLlYoKS5XaGVyZShfXy5PdXQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5BZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5PdXQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSkuVigpLndoZXJlKF9fLm91dCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkud2hlcmUoX18ub3V0KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBBZGphY2VudFRvSW5jaWRlbnRTdHJhdGVneSgpKS5WKCkud2hlcmUoX18ub3V0KCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKEFkamFjZW50VG9JbmNpZGVudFN0cmF0ZWd5KCkpLlYoKS53aGVyZShfXy5vdXQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneVhfVl9vcmRlcl9ieVh2YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSkuVigpLm9yZGVyKCkuYnkodmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoX18udmFsdWVzKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KCkpLlYoKS5PcmRlcigpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KCkpLlYoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5vcmRlcigpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KCkpLlYoKS5vcmRlcigpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3koKSkuVigpLm9yZGVyKCkuYnkoX18udmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3lYX1Zfb3JkZXJfYnlYdmFsdWVzWG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KHZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEJ5TW9kdWxhdG9yT3B0aW1pemF0aW9uU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KF9fLnZhbHVlcyhzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoQnlNb2R1bGF0b3JPcHRpbWl6YXRpb25TdHJhdGVneSkpLlYoKS5PcmRlcigpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5CeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KCkpLlYoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5LmNsYXNzKS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShfXy52YWx1ZXMoJ25hbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkNvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KCkpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hCeU1vZHVsYXRvck9wdGltaXphdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5Db21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlckZpbmFsaXphdGlvblN0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29tcHV0ZXJGaW5hbGl6YXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKENvbXB1dGVyRmluYWxpemF0aW9uU3RyYXRlZ3kpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkNvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvbXB1dGVyVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY2xhc3MpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb21wdXRlclZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoQ29tcHV0ZXJWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWENvbm5lY3RpdmVTdHJhdGVneVN0cmF0ZWd5WF9WX2hhc1huYW1lX21hcmtvWF9vcl93aGVyZVhpblhrbm93c1hfaGFzWG5hbWVfbWFya29YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLm9yKCkud2hlcmUoaW4oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vcigpLndoZXJlKF9fLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vcigpLndoZXJlKF9fLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhDb25uZWN0aXZlU3RyYXRlZ3kpLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkub3IoKS53aGVyZShfXy5pbihzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IENvbm5lY3RpdmVTdHJhdGVneSgpKS5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk9yKCkuV2hlcmUoX18uSW4oXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uQ29ubmVjdGl2ZVN0cmF0ZWd5KCkpLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3IoKS5XaGVyZShncmVtbGluZ28uVF9fLkluKFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vcigpLndoZXJlKF9fLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhDb25uZWN0aXZlU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vcigpLndoZXJlKF9fLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgQ29ubmVjdGl2ZVN0cmF0ZWd5KCkpLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3IoKS53aGVyZShfXy5pbl8oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSgpKS5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykub3JfKCkud2hlcmUoX18uaW5fKCdrbm93cycpLmhhcygnbmFtZScsICdtYXJrbycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hDb25uZWN0aXZlU3RyYXRlZ3lYX1ZfaGFzWG5hbWVfbWFya29YX29yX3doZXJlWGluWGtub3dzWF9oYXNYbmFtZV9tYXJrb1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29ubmVjdGl2ZVN0cmF0ZWd5KS5WKCkuaGFzKFwibmFtZVwiLFwibWFya29cIikub3IoKS53aGVyZShpbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29ubmVjdGl2ZVN0cmF0ZWd5KS5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm9yKCkud2hlcmUoX18uaW4oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29ubmVjdGl2ZVN0cmF0ZWd5KS5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm9yKCkud2hlcmUoX18uaW4oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5vcigpLndoZXJlKF9fLmluKHN0cmluZzIpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoQ29ubmVjdGl2ZVN0cmF0ZWd5KSkuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PcigpLldoZXJlKF9fLkluKFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkNvbm5lY3RpdmVTdHJhdGVneSgpKS5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk9yKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5JbihcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb25uZWN0aXZlU3RyYXRlZ3kpLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3IoKS53aGVyZShfXy5pbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ29ubmVjdGl2ZVN0cmF0ZWd5LmNsYXNzKS5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm9yKCkud2hlcmUoX18uaW4oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvbm5lY3RpdmVTdHJhdGVneSkuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vcigpLndoZXJlKF9fLmluXyhcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoQ29ubmVjdGl2ZVN0cmF0ZWd5KS5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykub3JfKCkud2hlcmUoX18uaW5fKCdrbm93cycpLmhhcygnbmFtZScsICdtYXJrbycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hDb3VudFN0cmF0ZWd5WF9WX3doZXJlWG91dEVfY291bnRfaXNYMFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoQ291bnRTdHJhdGVneSkuVigpLndoZXJlKG91dEUoKS5jb3VudCgpLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoQ291bnRTdHJhdGVneSkuVigpLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoQ291bnRTdHJhdGVneSkuVigpLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBDb3VudFN0cmF0ZWd5KCkpLlYoKS5XaGVyZShfXy5PdXRFKCkuQ291bnQoKS5JcygwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Db3VudFN0cmF0ZWd5KCkpLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLklzKDApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoQ291bnRTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBDb3VudFN0cmF0ZWd5KCkpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoQ291bnRTdHJhdGVneSgpKS5WKCkud2hlcmUoX18ub3V0X2UoKS5jb3VudCgpLmlzXygwKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYQ291bnRTdHJhdGVneVhfVl93aGVyZVhvdXRFX2NvdW50X2lzWDBYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShvdXRFKCkuY291bnQoKS5pcygwKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb3VudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcyhudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoQ291bnRTdHJhdGVneSkpLlYoKS5XaGVyZShfXy5PdXRFKCkuQ291bnQoKS5JcygwKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5Db3VudFN0cmF0ZWd5KCkpLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLklzKDApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRFKCkuY291bnQoKS5pcygwKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoQ291bnRTdHJhdGVneS5jbGFzcykuVigpLndoZXJlKF9fLm91dEUoKS5jb3VudCgpLmlzKDApKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhDb3VudFN0cmF0ZWd5KS5WKCkud2hlcmUoX18ub3V0RSgpLmNvdW50KCkuaXMoMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKENvdW50U3RyYXRlZ3kpLlYoKS53aGVyZShfXy5vdXRfZSgpLmNvdW50KCkuaXNfKDApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hFYXJseUxpbWl0U3RyYXRlZ3lYX1Zfb3V0X29yZGVyX2J5WG5hbWVYX3ZhbHVlTWFwX2xpbWl0WDNYX3NlbGVjdFhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdChcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdChcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykudmFsdWVNYXAoKS5saW1pdCgzKS5zZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMCkudmFsdWVNYXAoKS5saW1pdChudW1iZXIwKS5zZWxlY3Qoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgRWFybHlMaW1pdFN0cmF0ZWd5KCkpLlYoKS5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5MaW1pdDxvYmplY3Q+KDMpLlNlbGVjdDxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkVhcmx5TGltaXRTdHJhdGVneSgpKS5WKCkuT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikuVmFsdWVNYXAoKS5MaW1pdCgzKS5TZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLnZhbHVlTWFwKCkubGltaXQoMykuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnZhbHVlTWFwKCkubGltaXQoMykuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgRWFybHlMaW1pdFN0cmF0ZWd5KCkpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdChcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KCkpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykudmFsdWVfbWFwKCkubGltaXQoMykuc2VsZWN0KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYRWFybHlMaW1pdFN0cmF0ZWd5WF9WX291dF9vcmRlcl9ieVhuYW1lWF92YWx1ZU1hcF9saW1pdFgzWF9zZWxlY3RYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykudmFsdWVNYXAoKS5saW1pdCgzKS5zZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykudmFsdWVNYXAoKS5saW1pdCgzKS5zZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLnZhbHVlTWFwKCkubGltaXQoMykuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KHN0cmluZzApLnZhbHVlTWFwKCkubGltaXQobnVtYmVyMCkuc2VsZWN0KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKEVhcmx5TGltaXRTdHJhdGVneSkpLlYoKS5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5MaW1pdDxvYmplY3Q+KDMpLlNlbGVjdDxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkVhcmx5TGltaXRTdHJhdGVneSgpKS5WKCkuT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikuVmFsdWVNYXAoKS5MaW1pdCgzKS5TZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5ieSgnbmFtZScpLnZhbHVlTWFwKCkubGltaXQoMykuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFYXJseUxpbWl0U3RyYXRlZ3kuY2xhc3MpLlYoKS5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS52YWx1ZU1hcCgpLmxpbWl0KDMpLnNlbGVjdChcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWFybHlMaW1pdFN0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikudmFsdWVNYXAoKS5saW1pdCgzKS5zZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKEVhcmx5TGltaXRTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKS52YWx1ZV9tYXAoKS5saW1pdCgzKS5zZWxlY3QoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl90cnVlX2xvZ1dhcm5pbmdfZmFsc2VYWF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246IHRydWUsIGxvZ1dhcm5pbmc6IGZhbHNlKSkuVigpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlLCBsb2dXYXJuaW5nOmZhbHNlKSkuVigpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246dHJ1ZSwgbG9nV2FybmluZzpmYWxzZSkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjpib29sZWFuMCwgbG9nV2FybmluZzpib29sZWFuMSkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSwgbG9nV2FybmluZzogZmFsc2UpKS5WKCkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5FZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneShncmVtbGluZ28uRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3lDb25maWd7VGhyb3dFeGNlcHRpb246IHRydWUsIExvZ1dhcm5pbmc6IGZhbHNlfSkpLlYoKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlLCBsb2dXYXJuaW5nOmZhbHNlKSkuVigpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LmJ1aWxkKCkudGhyb3dFeGNlcHRpb24odHJ1ZSkubG9nV2FybmluZyhmYWxzZSkuY3JlYXRlKCkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3koe3Rocm93RXhjZXB0aW9uOiB0cnVlLCBsb2dXYXJuaW5nOiBmYWxzZX0pKS5WKCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dfZXhjZXB0aW9uPVRydWUsIGxvZ193YXJuaW5nPUZhbHNlKSkuVigpLm91dCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX2ZhbHNlX2xvZ1dhcm5pbmdfZmFsc2VYWF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246IGZhbHNlLCBsb2dXYXJuaW5nOiBmYWxzZSkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246ZmFsc2UsIGxvZ1dhcm5pbmc6ZmFsc2UpKS5WKCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjpmYWxzZSwgbG9nV2FybmluZzpmYWxzZSkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjpib29sZWFuMCwgbG9nV2FybmluZzpib29sZWFuMCkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogZmFsc2UsIGxvZ1dhcm5pbmc6IGZhbHNlKSkuVigpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLkVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5Q29uZmlne1Rocm93RXhjZXB0aW9uOiBmYWxzZSwgTG9nV2FybmluZzogZmFsc2V9KSkuVigpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KHRocm93RXhjZXB0aW9uOmZhbHNlLCBsb2dXYXJuaW5nOmZhbHNlKSkuVigpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5LmJ1aWxkKCkudGhyb3dFeGNlcHRpb24oZmFsc2UpLmxvZ1dhcm5pbmcoZmFsc2UpLmNyZWF0ZSgpKS5WKCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KHt0aHJvd0V4Y2VwdGlvbjogZmFsc2UsIGxvZ1dhcm5pbmc6IGZhbHNlfSkpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd19leGNlcHRpb249RmFsc2UsIGxvZ193YXJuaW5nPUZhbHNlKSkuVigpLm91dCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSkpLlYoKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWRnZUxhYmVsVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY2xhc3MpLlYoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFZGdlTGFiZWxWZXJpZmljYXRpb25TdHJhdGVneSkuVigpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKEVkZ2VMYWJlbFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkub3V0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYRWxlbWVudElkU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhFbGVtZW50SWRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhFbGVtZW50SWRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhFbGVtZW50SWRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IEVsZW1lbnRJZFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkVsZW1lbnRJZFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKEVsZW1lbnRJZFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBFbGVtZW50SWRTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3koKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWEVsZW1lbnRJZFN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEVsZW1lbnRJZFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihFbGVtZW50SWRTdHJhdGVneSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkVsZW1lbnRJZFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEVsZW1lbnRJZFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRWxlbWVudElkU3RyYXRlZ3kuY2xhc3MpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhFbGVtZW50SWRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKEVsZW1lbnRJZFN0cmF0ZWd5KS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYRmlsdGVyUmFua2luZ1N0cmF0ZWd5WF9WX291dF9vcmRlcl9kZWR1cCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKEZpbHRlclJhbmtpbmdTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKEZpbHRlclJhbmtpbmdTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBGaWx0ZXJSYW5raW5nU3RyYXRlZ3koKSkuVigpLk91dCgpLk9yZGVyKCkuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkZpbHRlclJhbmtpbmdTdHJhdGVneSgpKS5WKCkuT3V0KCkuT3JkZXIoKS5EZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKEZpbHRlclJhbmtpbmdTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBGaWx0ZXJSYW5raW5nU3RyYXRlZ3koKSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3koKSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hGaWx0ZXJSYW5raW5nU3RyYXRlZ3lYX1Zfb3V0X29yZGVyX2RlZHVwIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3kpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKEZpbHRlclJhbmtpbmdTdHJhdGVneSkpLlYoKS5PdXQoKS5PcmRlcigpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5GaWx0ZXJSYW5raW5nU3RyYXRlZ3koKSkuVigpLk91dCgpLk9yZGVyKCkuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEZpbHRlclJhbmtpbmdTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhGaWx0ZXJSYW5raW5nU3RyYXRlZ3kuY2xhc3MpLlYoKS5vdXQoKS5vcmRlcigpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoRmlsdGVyUmFua2luZ1N0cmF0ZWd5KS5WKCkub3V0KCkub3JkZXIoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKEZpbHRlclJhbmtpbmdTdHJhdGVneSkuVigpLm91dCgpLm9yZGVyKCkuZGVkdXAoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hHcmFwaEZpbHRlclN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoR3JhcGhGaWx0ZXJTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoR3JhcGhGaWx0ZXJTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IEdyYXBoRmlsdGVyU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uR3JhcGhGaWx0ZXJTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoR3JhcGhGaWx0ZXJTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEdyYXBoRmlsdGVyU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKEdyYXBoRmlsdGVyU3RyYXRlZ3koKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWEdyYXBoRmlsdGVyU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEdyYXBoRmlsdGVyU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEdyYXBoRmlsdGVyU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoR3JhcGhGaWx0ZXJTdHJhdGVneSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkdyYXBoRmlsdGVyU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoR3JhcGhGaWx0ZXJTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEdyYXBoRmlsdGVyU3RyYXRlZ3kuY2xhc3MpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhHcmFwaEZpbHRlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoR3JhcGhGaWx0ZXJTdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5WERldGFjaGVkRmFjdG9yeVhYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneShoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5OiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRGYWN0b3J5XCIpKS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZFRyYXZlcnNlckZhY3Rvcnk6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeVwiKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koaGFsdGVkVHJhdmVyc2VyRmFjdG9yeTpcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRGYWN0b3J5XCIpKS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koaGFsdGVkVHJhdmVyc2VyRmFjdG9yeTpzdHJpbmcwKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZFRyYXZlcnNlckZhY3Rvcnk6IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEZhY3RvcnlcIikpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGdyZW1saW5nby5IYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneUNvbmZpZ3tIYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5OiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRGYWN0b3J5XCJ9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZFRyYXZlcnNlckZhY3Rvcnk6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeVwiKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5LmJ1aWxkKCkuaGFsdGVkVHJhdmVyc2VyRmFjdG9yeShcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRGYWN0b3J5XCIpLmNyZWF0ZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KHtoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5OiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRGYWN0b3J5XCJ9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZF90cmF2ZXJzZXJfZmFjdG9yeT0nb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZEZhY3RvcnknKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5WFJlZmVyZW5jZUZhY3RvcnlYWF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koaGFsdGVkVHJhdmVyc2VyRmFjdG9yeTogXCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VGYWN0b3J5XCIpKS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZFRyYXZlcnNlckZhY3Rvcnk6XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VGYWN0b3J5XCIpKS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneShoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5Olwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlRmFjdG9yeVwiKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGhhbHRlZFRyYXZlcnNlckZhY3Rvcnk6c3RyaW5nMCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneShoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5OiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3RvcnlcIikpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KGdyZW1saW5nby5IYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneUNvbmZpZ3tIYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5OiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3RvcnlcIn0pKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koaGFsdGVkVHJhdmVyc2VyRmFjdG9yeTpcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3RvcnlcIikpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneS5idWlsZCgpLmhhbHRlZFRyYXZlcnNlckZhY3RvcnkoXCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VGYWN0b3J5XCIpLmNyZWF0ZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KHtoYWx0ZWRUcmF2ZXJzZXJGYWN0b3J5OiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZUZhY3RvcnlcIn0pKS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3koaGFsdGVkX3RyYXZlcnNlcl9mYWN0b3J5PSdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VGYWN0b3J5JykpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5IYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEhhbHRlZFRyYXZlcnNlclN0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoSGFsdGVkVHJhdmVyc2VyU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhIYWx0ZWRUcmF2ZXJzZXJTdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5WF9WX2lkZW50aXR5X291dCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kpLlYoKS5pZGVudGl0eSgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kpLlYoKS5pZGVudGl0eSgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBJZGVudGl0eVJlbW92YWxTdHJhdGVneSgpKS5WKCkuSWRlbnRpdHkoKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLklkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KCkpLlYoKS5JZGVudGl0eSgpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kpLlYoKS5pZGVudGl0eSgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5pZGVudGl0eSgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBJZGVudGl0eVJlbW92YWxTdHJhdGVneSgpKS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhJZGVudGl0eVJlbW92YWxTdHJhdGVneSgpKS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hJZGVudGl0eVJlbW92YWxTdHJhdGVneVhfVl9pZGVudGl0eV9vdXQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJZGVudGl0eVJlbW92YWxTdHJhdGVneSkuVigpLmlkZW50aXR5KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJZGVudGl0eVJlbW92YWxTdHJhdGVneSkuVigpLmlkZW50aXR5KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kpKS5WKCkuSWRlbnRpdHkoKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLklkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5KCkpLlYoKS5JZGVudGl0eSgpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kpLlYoKS5pZGVudGl0eSgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKElkZW50aXR5UmVtb3ZhbFN0cmF0ZWd5LmNsYXNzKS5WKCkuaWRlbnRpdHkoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJZGVudGl0eVJlbW92YWxTdHJhdGVneSkuVigpLmlkZW50aXR5KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoSWRlbnRpdHlSZW1vdmFsU3RyYXRlZ3kpLlYoKS5pZGVudGl0eSgpLm91dCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5WF9WX291dEVfaW5WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kpLlYoKS5vdXRFKCkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KS5WKCkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kpLlYoKS5vdXRFKCkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3kpLlYoKS5vdXRFKCkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgSW5jaWRlbnRUb0FkamFjZW50U3RyYXRlZ3koKSkuVigpLk91dEUoKS5JblYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpLlYoKS5PdXRFKCkuSW5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSgpKS5WKCkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpLlYoKS5vdXRfZSgpLmluX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneVhfVl9vdXRFX2luViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KS5WKCkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KS5WKCkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KS5WKCkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKEluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KSkuVigpLk91dEUoKS5JblYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkluY2lkZW50VG9BZGphY2VudFN0cmF0ZWd5KCkpLlYoKS5PdXRFKCkuSW5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneS5jbGFzcykuVigpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhJbmNpZGVudFRvQWRqYWNlbnRTdHJhdGVneSkuVigpLm91dF9lKCkuaW5fdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWElubGluZUZpbHRlclN0cmF0ZWd5WF9WX2ZpbHRlclhoYXNYbmFtZV9tYXJrb1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3kpLlYoKS5maWx0ZXIoaGFzKFwibmFtZVwiLFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSkuVigpLmZpbHRlcihfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3kpLlYoKS5maWx0ZXIoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSkuVigpLmZpbHRlcihfXy5oYXMoc3RyaW5nMCwgc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IElubGluZUZpbHRlclN0cmF0ZWd5KCkpLlYoKS5GaWx0ZXIoX18uSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLklubGluZUZpbHRlclN0cmF0ZWd5KCkpLlYoKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3kpLlYoKS5maWx0ZXIoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IElubGluZUZpbHRlclN0cmF0ZWd5KCkpLlYoKS5maWx0ZXIoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSgpKS5WKCkuZmlsdGVyXyhfXy5oYXMoJ25hbWUnLCAnbWFya28nKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYSW5saW5lRmlsdGVyU3RyYXRlZ3lYX1ZfZmlsdGVyWGhhc1huYW1lX21hcmtvWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSkuVigpLmZpbHRlcihoYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKElubGluZUZpbHRlclN0cmF0ZWd5KS5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSkuVigpLmZpbHRlcihfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKElubGluZUZpbHRlclN0cmF0ZWd5KS5WKCkuZmlsdGVyKF9fLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoSW5saW5lRmlsdGVyU3RyYXRlZ3kpKS5WKCkuRmlsdGVyKF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5JbmxpbmVGaWx0ZXJTdHJhdGVneSgpKS5WKCkuRmlsdGVyKGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKElubGluZUZpbHRlclN0cmF0ZWd5KS5WKCkuZmlsdGVyKF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoSW5saW5lRmlsdGVyU3RyYXRlZ3kuY2xhc3MpLlYoKS5maWx0ZXIoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhJbmxpbmVGaWx0ZXJTdHJhdGVneSkuVigpLmZpbHRlcihfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKElubGluZUZpbHRlclN0cmF0ZWd5KS5WKCkuZmlsdGVyXyhfXy5oYXMoJ25hbWUnLCAnbWFya28nKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkxhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KCkpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5MYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhMYW1iZGFSZXN0cmljdGlvblN0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGFtYmRhUmVzdHJpY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKExhbWJkYVJlc3RyaWN0aW9uU3RyYXRlZ3kpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hMYXp5QmFycmllclN0cmF0ZWd5WF9WX291dF9ib3RoRV9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkub3V0KCkuYm90aEUoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgTGF6eUJhcnJpZXJTdHJhdGVneSgpKS5WKCkuT3V0KCkuQm90aEUoKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uTGF6eUJhcnJpZXJTdHJhdGVneSgpKS5WKCkuT3V0KCkuQm90aEUoKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IExhenlCYXJyaWVyU3RyYXRlZ3koKSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KCkpLlYoKS5vdXQoKS5ib3RoX2UoKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWExhenlCYXJyaWVyU3RyYXRlZ3lYX1Zfb3V0X2JvdGhFX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneSkuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihMYXp5QmFycmllclN0cmF0ZWd5KSkuVigpLk91dCgpLkJvdGhFKCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLkxhenlCYXJyaWVyU3RyYXRlZ3koKSkuVigpLk91dCgpLkJvdGhFKCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5vdXQoKS5ib3RoRSgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneS5jbGFzcykuVigpLm91dCgpLmJvdGhFKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkub3V0KCkuYm90aEUoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5vdXQoKS5ib3RoX2UoKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lYbWF0Y2hBbGdvcml0aG1fQ291bnRNYXRjaEFsZ29yaXRobVhYX1ZfbWF0Y2hYYV9rbm93c19iX19hX2NyZWF0ZWRfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KG1hdGNoQWxnb3JpdGhtOiBcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwJENvdW50TWF0Y2hBbGdvcml0aG1cIikpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hBbGdvcml0aG06XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRDb3VudE1hdGNoQWxnb3JpdGhtXCIpKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hBbGdvcml0aG06XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRDb3VudE1hdGNoQWxnb3JpdGhtXCIpKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KG1hdGNoQWxnb3JpdGhtOnN0cmluZzApKS5WKCkubWF0Y2goX18uYXMoc3RyaW5nMSkub3V0KHN0cmluZzIpLmFzKHN0cmluZzMpLCBfXy5hcyhzdHJpbmcxKS5vdXQoc3RyaW5nNCkuYXMoc3RyaW5nNSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hBbGdvcml0aG06IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkQ291bnRNYXRjaEFsZ29yaXRobVwiKSkuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3koZ3JlbWxpbmdvLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lDb25maWd7TWF0Y2hBbGdvcml0aG06IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkQ291bnRNYXRjaEFsZ29yaXRobVwifSkpLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KG1hdGNoQWxnb3JpdGhtOlwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXBcXCRDb3VudE1hdGNoQWxnb3JpdGhtXCIpKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5LmJ1aWxkKCkubWF0Y2hBbGdvcml0aG0oXCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRDb3VudE1hdGNoQWxnb3JpdGhtXCIpLmNyZWF0ZSgpKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSh7bWF0Y2hBbGdvcml0aG06IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkQ291bnRNYXRjaEFsZ29yaXRobVwifSkpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hfYWxnb3JpdGhtPSdvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRDb3VudE1hdGNoQWxnb3JpdGhtJykpLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJyksIF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFzXygnYycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hNYXRjaEFsZ29yaXRobVN0cmF0ZWd5WG1hdGNoQWxnb3JpdGhtX0dyZWVkeU1hdGNoQWxnb3JpdGhtWFhfVl9tYXRjaFhhX2tub3dzX2JfX2FfY3JlYXRlZF9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hBbGdvcml0aG06IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkR3JlZWR5TWF0Y2hBbGdvcml0aG1cIikpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hBbGdvcml0aG06XCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRHcmVlZHlNYXRjaEFsZ29yaXRobVwiKSkuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KG1hdGNoQWxnb3JpdGhtOlwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkR3JlZWR5TWF0Y2hBbGdvcml0aG1cIikpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kobWF0Y2hBbGdvcml0aG06c3RyaW5nMCkpLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcxKS5vdXQoc3RyaW5nMikuYXMoc3RyaW5nMyksIF9fLmFzKHN0cmluZzEpLm91dChzdHJpbmc0KS5hcyhzdHJpbmc1KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hBbGdvcml0aG1TdHJhdGVneShtYXRjaEFsZ29yaXRobTogXCJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoU3RlcCRHcmVlZHlNYXRjaEFsZ29yaXRobVwiKSkuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3koZ3JlbWxpbmdvLk1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lDb25maWd7TWF0Y2hBbGdvcml0aG06IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkR3JlZWR5TWF0Y2hBbGdvcml0aG1cIn0pKS5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hBbGdvcml0aG1TdHJhdGVneShtYXRjaEFsZ29yaXRobTpcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwXFwkR3JlZWR5TWF0Y2hBbGdvcml0aG1cIikpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kuYnVpbGQoKS5tYXRjaEFsZ29yaXRobShcIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hTdGVwJEdyZWVkeU1hdGNoQWxnb3JpdGhtXCIpLmNyZWF0ZSgpKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hBbGdvcml0aG1TdHJhdGVneSh7bWF0Y2hBbGdvcml0aG06IFwib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkR3JlZWR5TWF0Y2hBbGdvcml0aG1cIn0pKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KG1hdGNoX2FsZ29yaXRobT0nb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFN0ZXAkR3JlZWR5TWF0Y2hBbGdvcml0aG0nKSkuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKSwgX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuYXNfKCdjJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3lYX1ZfbWF0Y2hYYV9rbm93c19iX19hX2NyZWF0ZWRfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSxfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNYXRjaEFsZ29yaXRobVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzApLm91dChzdHJpbmczKS5hcyhzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoTWF0Y2hBbGdvcml0aG1TdHJhdGVneSkpLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5NYXRjaEFsZ29yaXRobVN0cmF0ZWd5KCkpLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kuY2xhc3MpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKE1hdGNoQWxnb3JpdGhtU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJyksIF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFzXygnYycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5WF9WX21hdGNoWGFfY3JlYXRlZF9sb3BfYl9fYl8wY3JlYXRlZF8yOV9jWF93aGVyZVhjX3JlcGVhdFhvdXRYX3RpbWVzWDJYWF9zZWxlY3RYYV9iX2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSkuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuYXMoXCJiXCIpLF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmhhcyhzdHJpbmcyLCBzdHJpbmczKS5hcyhzdHJpbmc0KSwgX18uYXMoc3RyaW5nNCkuaW4oc3RyaW5nMSkuaGFzKHN0cmluZzUsIG51bWJlcjApLmFzKHN0cmluZzYpKS53aGVyZShfXy5hcyhzdHJpbmc2KS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKG51bWJlcjEpKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nNCwgc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSgpKS5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5IYXMoXCJuYW1lXCIsIFwibG9wXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5IYXMoXCJhZ2VcIiwgMjkpLkFzKFwiY1wiKSkuV2hlcmUoX18uQXMoXCJjXCIpLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoMikpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSgpKS5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5IYXMoXCJuYW1lXCIsIFwibG9wXCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImJcIikuSW4oXCJjcmVhdGVkXCIpLkhhcyhcImFnZVwiLCAyOSkuQXMoXCJjXCIpKS5XaGVyZShncmVtbGluZ28uVF9fLkFzKFwiY1wiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMikpLlNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSgpKS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbl8oXCJjcmVhdGVkXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpKS53aGVyZShfXy5hcyhcImNcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3koKSkuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmhhcygnbmFtZScsICdsb3AnKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaW5fKCdjcmVhdGVkJykuaGFzKCdhZ2UnLCAyOSkuYXNfKCdjJykpLndoZXJlKF9fLmFzXygnYycpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdCgnYScsICdiJywgJ2MnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5WF9WX21hdGNoWGFfY3JlYXRlZF9sb3BfYl9fYl8wY3JlYXRlZF8yOV9jWF93aGVyZVhjX3JlcGVhdFhvdXRYX3RpbWVzWDJYWF9zZWxlY3RYYV9iX2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSkuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuYXMoXCJiXCIpLF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmhhcyhzdHJpbmcyLCBzdHJpbmczKS5hcyhzdHJpbmc0KSwgX18uYXMoc3RyaW5nNCkuaW4oc3RyaW5nMSkuaGFzKHN0cmluZzUsIG51bWJlcjApLmFzKHN0cmluZzYpKS53aGVyZShfXy5hcyhzdHJpbmc2KS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKG51bWJlcjEpKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nNCwgc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSkpLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikuQXMoXCJiXCIpLCBfXy5BcyhcImJcIikuSW4oXCJjcmVhdGVkXCIpLkhhcyhcImFnZVwiLCAyOSkuQXMoXCJjXCIpKS5XaGVyZShfXy5BcyhcImNcIikuUmVwZWF0KF9fLk91dCgpKS5UaW1lcygyKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5NYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KCkpLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuSGFzKFwiYWdlXCIsIDI5KS5BcyhcImNcIikpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJjXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5UaW1lcygyKSkuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoTWF0Y2hQcmVkaWNhdGVTdHJhdGVneSkuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpKS53aGVyZShfXy5hcyhcImNcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kuY2xhc3MpLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSkud2hlcmUoX18uYXMoXCJjXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNYXRjaFByZWRpY2F0ZVN0cmF0ZWd5KS5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbl8oXCJjcmVhdGVkXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpKS53aGVyZShfXy5hcyhcImNcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKE1hdGNoUHJlZGljYXRlU3RyYXRlZ3kpLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5oYXMoJ25hbWUnLCAnbG9wJykuYXNfKCdiJyksIF9fLmFzXygnYicpLmluXygnY3JlYXRlZCcpLmhhcygnYWdlJywgMjkpLmFzXygnYycpKS53aGVyZShfXy5hc18oJ2MnKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoJ2EnLCAnYicsICdjJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLk1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5NZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhNZXNzYWdlUGFzc2luZ1JlZHVjdGlvblN0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoTWVzc2FnZVBhc3NpbmdSZWR1Y3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKE1lc3NhZ2VQYXNzaW5nUmVkdWN0aW9uU3RyYXRlZ3kpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nvd29ya2VyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkuYWdncmVnYXRlKFwicFwiKS5hcyhcInAxXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMW5cIikuc2VsZWN0KFwicFwiKS51bmZvbGQoKS53aGVyZShuZXEoXCJwMVwiKSkuYXMoXCJwMlwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwicDJuXCIpLnNlbGVjdChcInAyXCIpLm91dChcImNyZWF0ZWRcIikuY2hvb3NlKF9fLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLmVxKFwicDFcIikpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChbXSkpLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwicDFuXCIpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAyblwiKSkuYnkoX18udW5mb2xkKCkuZm9sZCgpLnByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuYnkoX18uY291bnQobG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLmFnZ3JlZ2F0ZShcInBcIikuYXMoXCJwMVwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwicDFuXCIpLnNlbGVjdChcInBcIikudW5mb2xkKCkud2hlcmUoUC5uZXEoXCJwMVwiKSkuYXMoXCJwMlwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwicDJuXCIpLnNlbGVjdChcInAyXCIpLm91dChcImNyZWF0ZWRcIikuY2hvb3NlKF9fLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLmVxKFwicDFcIikpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChbXSkpLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwicDFuXCIpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAyblwiKSkuYnkoX18udW5mb2xkKCkuZm9sZCgpLnByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hZ2dyZWdhdGUoXCJwXCIpLmFzKFwicDFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAxblwiKS5zZWxlY3QoXCJwXCIpLnVuZm9sZCgpLndoZXJlKFAubmVxKFwicDFcIikpLmFzKFwicDJcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAyblwiKS5zZWxlY3QoXCJwMlwiKS5vdXQoXCJjcmVhdGVkXCIpLmNob29zZShfXy5pbihcImNyZWF0ZWRcIikud2hlcmUoUC5lcShcInAxXCIpKSwgX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoW10pKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAxblwiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMm5cIikpLmJ5KF9fLnVuZm9sZCgpLmZvbGQoKS5wcm9qZWN0KFwibnVtQ29DcmVhdGVkXCIsIFwiY29DcmVhdGVkXCIpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkuYnkoKSkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5maWx0ZXIoX18ub3V0RShzdHJpbmcxKSkuYWdncmVnYXRlKHN0cmluZzIpLmFzKHN0cmluZzMpLnZhbHVlcyhzdHJpbmc0KS5hcyhzdHJpbmc1KS5zZWxlY3Qoc3RyaW5nMikudW5mb2xkKCkud2hlcmUoUC5uZXEoc3RyaW5nMykpLmFzKHN0cmluZzYpLnZhbHVlcyhzdHJpbmc0KS5hcyhzdHJpbmc3KS5zZWxlY3Qoc3RyaW5nNikub3V0KHN0cmluZzEpLmNob29zZShfXy5pbihzdHJpbmcxKS53aGVyZShQLmVxKHN0cmluZzMpKSwgX18udmFsdWVzKHN0cmluZzQpLCBfXy5jb25zdGFudChsaXN0MCkpLmdyb3VwKCkuYnkoX18uc2VsZWN0KHN0cmluZzUpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdChzdHJpbmc3KSkuYnkoX18udW5mb2xkKCkuZm9sZCgpLnByb2plY3Qoc3RyaW5nOCwgc3RyaW5nOSkuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuRmlsdGVyKF9fLk91dEUoXCJjcmVhdGVkXCIpKS5BZ2dyZWdhdGUoXCJwXCIpLkFzKFwicDFcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwicDFuXCIpLlNlbGVjdDxvYmplY3Q+KFwicFwiKS5VbmZvbGQ8b2JqZWN0PigpLldoZXJlKFAuTmVxKFwicDFcIikpLkFzKFwicDJcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwicDJuXCIpLlNlbGVjdDxvYmplY3Q+KFwicDJcIikuT3V0KFwiY3JlYXRlZFwiKS5DaG9vc2U8b2JqZWN0PihfXy5JbihcImNyZWF0ZWRcIikuV2hlcmUoUC5FcShcInAxXCIpKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLCBfXy5Db25zdGFudDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAgfSkpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwicDFuXCIpKS5CeShfXy5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInAyblwiKSkuQnkoX18uVW5mb2xkPG9iamVjdD4oKS5Gb2xkKCkuUHJvamVjdDxvYmplY3Q+KFwibnVtQ29DcmVhdGVkXCIsIFwiY29DcmVhdGVkXCIpLkJ5KF9fLkNvdW50KFNjb3BlLkxvY2FsKSkuQnkoKSkpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5PdXRFKFwiY3JlYXRlZFwiKSkuQWdncmVnYXRlKFwicFwiKS5BcyhcInAxXCIpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJwMW5cIikuU2VsZWN0KFwicFwiKS5VbmZvbGQoKS5XaGVyZShncmVtbGluZ28uUC5OZXEoXCJwMVwiKSkuQXMoXCJwMlwiKS5WYWx1ZXMoXCJuYW1lXCIpLkFzKFwicDJuXCIpLlNlbGVjdChcInAyXCIpLk91dChcImNyZWF0ZWRcIikuQ2hvb3NlKGdyZW1saW5nby5UX18uSW4oXCJjcmVhdGVkXCIpLldoZXJlKGdyZW1saW5nby5QLkVxKFwicDFcIikpLCBncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIiksIGdyZW1saW5nby5UX18uQ29uc3RhbnQoW11pbnRlcmZhY2V7fXt9KSkuR3JvdXAoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInAxblwiKSkuQnkoZ3JlbWxpbmdvLlRfXy5Hcm91cCgpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwicDJuXCIpKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpLkZvbGQoKS5Qcm9qZWN0KFwibnVtQ29DcmVhdGVkXCIsIFwiY29DcmVhdGVkXCIpLkJ5KGdyZW1saW5nby5UX18uQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSkuQnkoKSkpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkuYWdncmVnYXRlKFwicFwiKS5hcyhcInAxXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMW5cIikuc2VsZWN0KFwicFwiKS51bmZvbGQoKS53aGVyZShQLm5lcShcInAxXCIpKS5hcyhcInAyXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMm5cIikuc2VsZWN0KFwicDJcIikub3V0KFwiY3JlYXRlZFwiKS5jaG9vc2UoX18uaW4oXCJjcmVhdGVkXCIpLndoZXJlKFAuZXEoXCJwMVwiKSksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFtdKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMW5cIikpLmJ5KF9fLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwicDJuXCIpKS5ieShfXy51bmZvbGQoKS5mb2xkKCkucHJvamVjdChcIm51bUNvQ3JlYXRlZFwiLCBcImNvQ3JlYXRlZFwiKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpLmJ5KCkpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hZ2dyZWdhdGUoXCJwXCIpLmFzKFwicDFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAxblwiKS5zZWxlY3QoXCJwXCIpLnVuZm9sZCgpLndoZXJlKFAubmVxKFwicDFcIikpLmFzKFwicDJcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAyblwiKS5zZWxlY3QoXCJwMlwiKS5vdXQoXCJjcmVhdGVkXCIpLmNob29zZShfXy5pbihcImNyZWF0ZWRcIikud2hlcmUoUC5lcShcInAxXCIpKSwgX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgIH19KSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMW5cIikpLmJ5KF9fLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwicDJuXCIpKS5ieShfXy51bmZvbGQoKS5mb2xkKCkucHJvamVjdChcIm51bUNvQ3JlYXRlZFwiLCBcImNvQ3JlYXRlZFwiKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpLmJ5KCkpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hZ2dyZWdhdGUoXCJwXCIpLmFzKFwicDFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAxblwiKS5zZWxlY3QoXCJwXCIpLnVuZm9sZCgpLndoZXJlKFAubmVxKFwicDFcIikpLmFzKFwicDJcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAyblwiKS5zZWxlY3QoXCJwMlwiKS5vdXQoXCJjcmVhdGVkXCIpLmNob29zZShfXy5pbl8oXCJjcmVhdGVkXCIpLndoZXJlKFAuZXEoXCJwMVwiKSksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFtdKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMW5cIikpLmJ5KF9fLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwicDJuXCIpKS5ieShfXy51bmZvbGQoKS5mb2xkKCkucHJvamVjdChcIm51bUNvQ3JlYXRlZFwiLCBcImNvQ3JlYXRlZFwiKS5ieShfXy5jb3VudChTY29wZS5sb2NhbCkpLmJ5KCkpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmZpbHRlcl8oX18ub3V0X2UoJ2NyZWF0ZWQnKSkuYWdncmVnYXRlKCdwJykuYXNfKCdwMScpLnZhbHVlcygnbmFtZScpLmFzXygncDFuJykuc2VsZWN0KCdwJykudW5mb2xkKCkud2hlcmUoUC5uZXEoJ3AxJykpLmFzXygncDInKS52YWx1ZXMoJ25hbWUnKS5hc18oJ3AybicpLnNlbGVjdCgncDInKS5vdXQoJ2NyZWF0ZWQnKS5jaG9vc2UoX18uaW5fKCdjcmVhdGVkJykud2hlcmUoUC5lcSgncDEnKSksIF9fLnZhbHVlcygnbmFtZScpLCBfXy5jb25zdGFudChbXSkpLmdyb3VwKCkuYnkoX18uc2VsZWN0KCdwMW4nKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoJ3AybicpKS5ieShfXy51bmZvbGQoKS5mb2xkKCkucHJvamVjdCgnbnVtQ29DcmVhdGVkJywgJ2NvQ3JlYXRlZCcpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkuYnkoKSkpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY293b3JrZXJfd2l0aF9taWRWIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkuYXMoXCJwMVwiKS5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikud2hlcmUoUC5uZXEoXCJwMVwiKSkuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hcyhcInAyXCIpLm1hcChfXy5vdXQoXCJjcmVhdGVkXCIpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5hcyhcInAxXCIpKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMVwiKS5ieShcIm5hbWVcIikpLmJ5KF9fLmdyb3VwKCkuYnkoc2VsZWN0KFwicDJcIikuYnkoXCJuYW1lXCIpKS5ieShfXy5wcm9qZWN0KFwibnVtQ29DcmVhdGVkXCIsIFwiY29DcmVhdGVkXCIpLmJ5KF9fLmNvdW50KGxvY2FsKSkuYnkoKSkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hcyhcInAxXCIpLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS53aGVyZShQLm5lcShcInAxXCIpKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLmFzKFwicDJcIikubWFwKF9fLm91dChcImNyZWF0ZWRcIikud2hlcmUoX18uaW4oXCJjcmVhdGVkXCIpLmFzKFwicDFcIikpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAxXCIpLmJ5KFwibmFtZVwiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMlwiKS5ieShcIm5hbWVcIikpLmJ5KF9fLnByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hcyhcInAxXCIpLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS53aGVyZShQLm5lcShcInAxXCIpKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLmFzKFwicDJcIikubWFwKF9fLm91dChcImNyZWF0ZWRcIikud2hlcmUoX18uaW4oXCJjcmVhdGVkXCIpLmFzKFwicDFcIikpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAxXCIpLmJ5KFwibmFtZVwiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMlwiKS5ieShcIm5hbWVcIikpLmJ5KF9fLnByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmZpbHRlcihfXy5vdXRFKHN0cmluZzEpKS5hcyhzdHJpbmcyKS5WKCkuaGFzTGFiZWwoc3RyaW5nMCkud2hlcmUoUC5uZXEoc3RyaW5nMikpLmZpbHRlcihfXy5vdXRFKHN0cmluZzEpKS5hcyhzdHJpbmczKS5tYXAoX18ub3V0KHN0cmluZzEpLndoZXJlKF9fLmluKHN0cmluZzEpLmFzKHN0cmluZzIpKS52YWx1ZXMoc3RyaW5nNCkuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChzdHJpbmcyKS5ieShzdHJpbmc0KSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3Qoc3RyaW5nMykuYnkoc3RyaW5nNCkpLmJ5KF9fLnByb2plY3Qoc3RyaW5nNSwgc3RyaW5nNikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuRmlsdGVyKF9fLk91dEUoXCJjcmVhdGVkXCIpKS5BcyhcInAxXCIpLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5XaGVyZShQLk5lcShcInAxXCIpKS5GaWx0ZXIoX18uT3V0RShcImNyZWF0ZWRcIikpLkFzKFwicDJcIikuTWFwPG9iamVjdD4oX18uT3V0KFwiY3JlYXRlZFwiKS5XaGVyZShfXy5JbihcImNyZWF0ZWRcIikuQXMoXCJwMVwiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJwMVwiKS5CeShcIm5hbWVcIikpLkJ5KF9fLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwicDJcIikuQnkoXCJuYW1lXCIpKS5CeShfXy5Qcm9qZWN0PG9iamVjdD4oXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuQnkoX18uQ291bnQoU2NvcGUuTG9jYWwpKS5CeSgpKSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkZpbHRlcihncmVtbGluZ28uVF9fLk91dEUoXCJjcmVhdGVkXCIpKS5BcyhcInAxXCIpLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5XaGVyZShncmVtbGluZ28uUC5OZXEoXCJwMVwiKSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3V0RShcImNyZWF0ZWRcIikpLkFzKFwicDJcIikuTWFwKGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKS5XaGVyZShncmVtbGluZ28uVF9fLkluKFwiY3JlYXRlZFwiKS5BcyhcInAxXCIpKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkuR3JvdXAoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInAxXCIpLkJ5KFwibmFtZVwiKSkuQnkoZ3JlbWxpbmdvLlRfXy5Hcm91cCgpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwicDJcIikuQnkoXCJuYW1lXCIpKS5CeShncmVtbGluZ28uVF9fLlByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuQnkoZ3JlbWxpbmdvLlRfXy5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpKS5CeSgpKSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hcyhcInAxXCIpLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS53aGVyZShQLm5lcShcInAxXCIpKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLmFzKFwicDJcIikubWFwKF9fLm91dChcImNyZWF0ZWRcIikud2hlcmUoX18uaW4oXCJjcmVhdGVkXCIpLmFzKFwicDFcIikpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAxXCIpLmJ5KFwibmFtZVwiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMlwiKS5ieShcIm5hbWVcIikpLmJ5KF9fLnByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkuYXMoXCJwMVwiKS5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikud2hlcmUoUC5uZXEoXCJwMVwiKSkuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS5hcyhcInAyXCIpLm1hcChfXy5vdXQoXCJjcmVhdGVkXCIpLndoZXJlKF9fLmluKFwiY3JlYXRlZFwiKS5hcyhcInAxXCIpKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkuZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMVwiKS5ieShcIm5hbWVcIikpLmJ5KF9fLmdyb3VwKCkuYnkoX18uc2VsZWN0KFwicDJcIikuYnkoXCJuYW1lXCIpKS5ieShfXy5wcm9qZWN0KFwibnVtQ29DcmVhdGVkXCIsIFwiY29DcmVhdGVkXCIpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSkuYnkoKSkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLmFzKFwicDFcIikuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLndoZXJlKFAubmVxKFwicDFcIikpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkuYXMoXCJwMlwiKS5tYXAoX18ub3V0KFwiY3JlYXRlZFwiKS53aGVyZShfXy5pbl8oXCJjcmVhdGVkXCIpLmFzKFwicDFcIikpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdChcInAxXCIpLmJ5KFwibmFtZVwiKSkuYnkoX18uZ3JvdXAoKS5ieShfXy5zZWxlY3QoXCJwMlwiKS5ieShcIm5hbWVcIikpLmJ5KF9fLnByb2plY3QoXCJudW1Db0NyZWF0ZWRcIiwgXCJjb0NyZWF0ZWRcIikuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5maWx0ZXJfKF9fLm91dF9lKCdjcmVhdGVkJykpLmFzXygncDEnKS5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS53aGVyZShQLm5lcSgncDEnKSkuZmlsdGVyXyhfXy5vdXRfZSgnY3JlYXRlZCcpKS5hc18oJ3AyJykubWFwKF9fLm91dCgnY3JlYXRlZCcpLndoZXJlKF9fLmluXygnY3JlYXRlZCcpLmFzXygncDEnKSkudmFsdWVzKCduYW1lJykuZm9sZCgpKS5ncm91cCgpLmJ5KF9fLnNlbGVjdCgncDEnKS5ieSgnbmFtZScpKS5ieShfXy5ncm91cCgpLmJ5KF9fLnNlbGVjdCgncDInKS5ieSgnbmFtZScpKS5ieShfXy5wcm9qZWN0KCdudW1Db0NyZWF0ZWQnLCAnY29DcmVhdGVkJykuYnkoX18uY291bnQoU2NvcGUubG9jYWwpKS5ieSgpKSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgT3B0aW9uc1N0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLk9wdGlvbnNTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYT3B0aW9uc1N0cmF0ZWd5WG15VmFyX215VmFsdWVYWF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KG15VmFyOiBcIm15VmFsdWVcIikpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KG15VmFyOlwibXlWYWx1ZVwiKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KG15VmFyOlwibXlWYWx1ZVwiKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKE9wdGlvbnNTdHJhdGVneShteVZhcjpzdHJpbmcwKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneShuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4ge3tcIm15VmFyXCIsXCJteVZhbHVlXCJ9LH0pKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5PcHRpb25zU3RyYXRlZ3kobWFwW3N0cmluZ11pbnRlcmZhY2V7fXtcIm15VmFyXCI6IFwibXlWYWx1ZVwifSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBPcHRpb25zU3RyYXRlZ3kobXlWYXI6XCJteVZhbHVlXCIpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5LmJ1aWxkKCkubXlWYXIoXCJteVZhbHVlXCIpLmNyZWF0ZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IE9wdGlvbnNTdHJhdGVneSh7bXlWYXI6IFwibXlWYWx1ZVwifSkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kobXlfdmFyPSdteVZhbHVlJykpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hPcHRpb25zU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhPcHRpb25zU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihPcHRpb25zU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5PcHRpb25zU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoT3B0aW9uc1N0cmF0ZWd5KS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYT3JkZXJMaW1pdFN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgT3JkZXJMaW1pdFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLk9yZGVyTGltaXRTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhPcmRlckxpbWl0U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhPcmRlckxpbWl0U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBPcmRlckxpbWl0U3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYT3JkZXJMaW1pdFN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoT3JkZXJMaW1pdFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoT3JkZXJMaW1pdFN0cmF0ZWd5KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uT3JkZXJMaW1pdFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneS5jbGFzcykuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKE9yZGVyTGltaXRTdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIil9KSkuVigpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkucGFydGl0aW9uS2V5KFwiX3BhcnRpdGlvblwiKS53cml0ZVBhcnRpdGlvbihcImFcIikucmVhZFBhcnRpdGlvbnMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgfX0pLmNyZWF0ZSgpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl19KSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnXSkpLlYoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYV9iWFhfVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiLCBcImJcIl0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIiwgXCJiXCJdKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiLCBcImJcIl0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIsIFwiYlwiIH0pKS5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJhXCIsIFwiYlwiKX0pKS5WKCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCIsIFwiYlwiXSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkucGFydGl0aW9uS2V5KFwiX3BhcnRpdGlvblwiKS53cml0ZVBhcnRpdGlvbihcImFcIikucmVhZFBhcnRpdGlvbnMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgfX0pLmNyZWF0ZSgpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIiwgXCJiXCJdfSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJywgJ2InXSkpLlYoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfY1hYX1ZfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzYpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImNcIl0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImNcIl0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJjXCJdKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLlYoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiY1wiIH0pKS5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJjXCIpfSkpLlYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImNcIl0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImNcIik7IH19KS5jcmVhdGUoKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJjXCJdfSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydjJ10pKS5WKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX2JvdGhFX3dlaWdodCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTApLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmc1KS50byhzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXSkpLlYoKS5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5WKCkuYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLmJvdGhFKCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImFcIiB9KSkuVigpLkJvdGhFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIil9KSkuVigpLkJvdGhFKCkuVmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5WKCkuYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyB9fSkuY3JlYXRlKCkpLlYoKS5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl19KSkuVigpLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJ10pKS5WKCkuYm90aF9lKCkudmFsdWVzKCd3ZWlnaHQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfYm90aEVfd2VpZ2h0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwyLjBkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc2KS5hcyhzdHJpbmc1KS5hZGRFKHN0cmluZzcpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nOCwgZG91YmxlMCkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzUpLnRvKHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdrbm93cycpLmZyb21fKCdiJykudG8oJ2EnKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ3dlaWdodCcsIDIuMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJiXCJdKSkuVigpLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYlwiXSkpLlYoKS5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJiXCJdKSkuVigpLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6c3RyaW5nMCwgd3JpdGVQYXJ0aXRpb246c3RyaW5nMSwgcmVhZFBhcnRpdGlvbnM6bGlzdDApKS5WKCkuYm90aEUoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiYlwiIH0pKS5WKCkuQm90aEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYlwiKX0pKS5WKCkuQm90aEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYlwiXSkpLlYoKS5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImJcIik7IH19KS5jcmVhdGUoKSkuVigpLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYlwiXX0pKS5WKCkuYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2InXSkpLlYoKS5ib3RoX2UoKS52YWx1ZXMoJ3dlaWdodCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hX2JYWF9WX2JvdGhFX2RlZHVwX3dlaWdodCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTApLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmc1KS50byhzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiLCBcImJcIl0pKS5WKCkuYm90aEUoKS5kZWR1cCgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIiwgXCJiXCJdKSkuVigpLmJvdGhFKCkuZGVkdXAoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiLCBcImJcIl0pKS5WKCkuYm90aEUoKS5kZWR1cCgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLmJvdGhFKCkuZGVkdXAoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiYVwiLCBcImJcIiB9KSkuVigpLkJvdGhFKCkuRGVkdXAoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYVwiLCBcImJcIil9KSkuVigpLkJvdGhFKCkuRGVkdXAoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiLCBcImJcIl0pKS5WKCkuYm90aEUoKS5kZWR1cCgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImJcIik7IH19KS5jcmVhdGUoKSkuVigpLmJvdGhFKCkuZGVkdXAoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCIsIFwiYlwiXX0pKS5WKCkuYm90aEUoKS5kZWR1cCgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYScsICdiJ10pKS5WKCkuYm90aF9lKCkuZGVkdXAoKS52YWx1ZXMoJ3dlaWdodCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9jWFhfVl9ib3RoRV93ZWlnaHQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDIuMGQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzYpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUwKS5hZGRFKHN0cmluZzcpLmZyb20oc3RyaW5nNSkudG8oc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nOCwgZG91YmxlMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2InKS50bygnYScpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMi4wKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImNcIl0pKS5WKCkuYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJjXCJdKSkuVigpLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImNcIl0pKS5WKCkuYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLlYoKS5ib3RoRSgpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJjXCIgfSkpLlYoKS5Cb3RoRSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJjXCIpfSkpLlYoKS5Cb3RoRSgpLlZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJjXCJdKSkuVigpLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkucGFydGl0aW9uS2V5KFwiX3BhcnRpdGlvblwiKS53cml0ZVBhcnRpdGlvbihcImFcIikucmVhZFBhcnRpdGlvbnMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiY1wiKTsgfX0pLmNyZWF0ZSgpKS5WKCkuYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJjXCJdfSkpLlYoKS5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYyddKSkuVigpLmJvdGhfZSgpLnZhbHVlcygnd2VpZ2h0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9WX2JvdGhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTApLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmc1KS50byhzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXSkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLmJvdGgoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiYVwiIH0pKS5WKCkuQm90aCgpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYVwiKX0pKS5WKCkuQm90aCgpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IH19KS5jcmVhdGUoKSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXX0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnXSkpLlYoKS5ib3RoKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2JYWF9WX2JvdGhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTApLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmc1KS50byhzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYlwiXSkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImJcIl0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYlwiXSkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLmJvdGgoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiYlwiIH0pKS5WKCkuQm90aCgpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYlwiKX0pKS5WKCkuQm90aCgpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYlwiXSkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImJcIik7IH19KS5jcmVhdGUoKSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYlwiXX0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2InXSkpLlYoKS5ib3RoKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1ZfYm90aF9kZWR1cF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwyLjBkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc2KS5hcyhzdHJpbmc1KS5hZGRFKHN0cmluZzcpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nOCwgZG91YmxlMCkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzUpLnRvKHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdrbm93cycpLmZyb21fKCdiJykudG8oJ2EnKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ3dlaWdodCcsIDIuMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCIsIFwiYlwiXSkpLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiLCBcImJcIl0pKS5WKCkuYm90aCgpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCIsIFwiYlwiXSkpLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6c3RyaW5nMCwgd3JpdGVQYXJ0aXRpb246c3RyaW5nMSwgcmVhZFBhcnRpdGlvbnM6bGlzdDApKS5WKCkuYm90aCgpLmRlZHVwKCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImFcIiwgXCJiXCIgfSkpLlYoKS5Cb3RoKCkuRGVkdXAoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIiwgXCJiXCIpfSkpLlYoKS5Cb3RoKCkuRGVkdXAoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIiwgXCJiXCJdKSkuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJiXCIpOyB9fSkuY3JlYXRlKCkpLlYoKS5ib3RoKCkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiLCBcImJcIl19KSkuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnLCAnYiddKSkuVigpLmJvdGgoKS5kZWR1cCgpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9jWFhfVl9ib3RoX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDIuMGQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzYpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUwKS5hZGRFKHN0cmluZzcpLmZyb20oc3RyaW5nNSkudG8oc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nOCwgZG91YmxlMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2InKS50bygnYScpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMi4wKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImNcIl0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJjXCJdKSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImNcIl0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLlYoKS5ib3RoKCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImNcIiB9KSkuVigpLkJvdGgoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImNcIil9KSkuVigpLkJvdGgoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImNcIl0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJjXCIpOyB9fSkuY3JlYXRlKCkpLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImNcIl19KSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydjJ10pKS5WKCkuYm90aCgpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfVl9vdXRfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTApLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmc1KS50byhzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXSkpLlYoKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5WKCkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLm91dCgpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLlYoKS5PdXQoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIil9KSkuVigpLk91dCgpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLlYoKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkucGFydGl0aW9uS2V5KFwiX3BhcnRpdGlvblwiKS53cml0ZVBhcnRpdGlvbihcImFcIikucmVhZFBhcnRpdGlvbnMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgfX0pLmNyZWF0ZSgpKS5WKCkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl19KSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnXSkpLlYoKS5vdXQoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYlhYX1ZfaW5fbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTApLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmc1KS50byhzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYm9iJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYlwiXSkpLlYoKS5pbigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJiXCJdKSkuVigpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJiXCJdKSkuVigpLmluKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuVigpLmluKCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImJcIiB9KSkuVigpLkluKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJiXCIpfSkpLlYoKS5JbigpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYlwiXSkpLlYoKS5pbigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJiXCIpOyB9fSkuY3JlYXRlKCkpLlYoKS5pbigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJiXCJdfSkpLlYoKS5pbl8oKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydiJ10pKS5WKCkuaW5fKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FfYlhYX1Zfb3V0X25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDIuMGQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzYpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmc4LCBkb3VibGUwKS5hZGRFKHN0cmluZzcpLmZyb20oc3RyaW5nNSkudG8oc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nOCwgZG91YmxlMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2InKS50bygnYScpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMi4wKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIiwgXCJiXCJdKSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCIsIFwiYlwiXSkpLlYoKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIiwgXCJiXCJdKSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLlYoKS5vdXQoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiYVwiLCBcImJcIiB9KSkuVigpLk91dCgpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYVwiLCBcImJcIil9KSkuVigpLk91dCgpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiLCBcImJcIl0pKS5WKCkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImJcIik7IH19KS5jcmVhdGUoKSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCIsIFwiYlwiXX0pKS5WKCkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYScsICdiJ10pKS5WKCkub3V0KCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2NYWF9WX291dF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwyLjBkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc2KS5hcyhzdHJpbmc1KS5hZGRFKHN0cmluZzcpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nOCwgZG91YmxlMCkuYWRkRShzdHJpbmc3KS5mcm9tKHN0cmluZzUpLnRvKHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzgsIGRvdWJsZTEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYlwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAyLjApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdrbm93cycpLmZyb21fKCdiJykudG8oJ2EnKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ3dlaWdodCcsIDIuMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJjXCJdKSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJjXCJdKSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiY1wiXSkpLlYoKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6c3RyaW5nMCwgd3JpdGVQYXJ0aXRpb246c3RyaW5nMSwgcmVhZFBhcnRpdGlvbnM6bGlzdDApKS5WKCkub3V0KCkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImNcIiB9KSkuVigpLk91dCgpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiY1wiKX0pKS5WKCkuT3V0KCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJjXCJdKSkuVigpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJjXCIpOyB9fSkuY3JlYXRlKCkpLlYoKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiY1wiXX0pKS5WKCkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYyddKSkuVigpLm91dCgpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfYWxpY2VYX2FkZFhzZWxmWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCJdKSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLmFkZFYoc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkuYWRkRShzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIil9KSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IH19KS5jcmVhdGUoKSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl19KSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYSddKSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYWRkX2UoJ3NlbGYnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLmhhcygnX3BhcnRpdGlvbicsICdhJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXMoXCJfcGFydGl0aW9uXCIsXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzKCdfcGFydGl0aW9uJywgJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFh6ZXJvWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9hbGljZVhfYWRkWHNlbGZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl0pKS5pbmplY3QoMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmluamVjdCgwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5pbmplY3QoMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuaW5qZWN0KG51bWJlcjApLmFkZFYoc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkuYWRkRShzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLkluamVjdDxvYmplY3Q+KDApLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIil9KSkuSW5qZWN0KDApLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmluamVjdCgwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkucGFydGl0aW9uS2V5KFwiX3BhcnRpdGlvblwiKS53cml0ZVBhcnRpdGlvbihcImFcIikucmVhZFBhcnRpdGlvbnMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgfX0pLmNyZWF0ZSgpKS5pbmplY3QoMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl19KSkuaW5qZWN0KDApLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnXSkpLmluamVjdCgwKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hZGRfZSgnc2VsZicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykuaGFzKCdfcGFydGl0aW9uJywgJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhcyhcIl9wYXJ0aXRpb25cIixcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXMoJ19wYXJ0aXRpb24nLCAnYScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfbWVyZ2VWIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl0pKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJhXCIpfSkpLk1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IH19KS5jcmVhdGUoKSkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCJdfSkpLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJ10pKS5tZXJnZV92KHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIixcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnYWxpY2UnKS5oYXMoJ19wYXJ0aXRpb24nLCAnYScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFBhcnRpdGlvblN0cmF0ZWd5WHdyaXRlX2FfcmVhZF9hWFhfaW5qZWN0WDBYX21lcmdlViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCJdKSkuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmluamVjdCgwKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6c3RyaW5nMCwgd3JpdGVQYXJ0aXRpb246c3RyaW5nMSwgcmVhZFBhcnRpdGlvbnM6bGlzdDApKS5pbmplY3QobnVtYmVyMCkubWVyZ2VWKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImFcIiB9KSkuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneShncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3lDb25maWd7UGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgV3JpdGVQYXJ0aXRpb246IFwiYVwiLCBSZWFkUGFydGl0aW9uczogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFcIil9KSkuSW5qZWN0KDApLk1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5pbmplY3QoMCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyB9fSkuY3JlYXRlKCkpLmluamVjdCgwKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3koe3BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl19KSkuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJ10pKS5pbmplY3QoMCkubWVyZ2Vfdih4eDEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykuaGFzKCdfcGFydGl0aW9uJywgJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX21lcmdlRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl0pKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLm1lcmdlRShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJhXCIpfSkpLk1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IH19KS5jcmVhdGUoKSkubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHtwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBbXCJhXCJdfSkpLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJ10pKS5tZXJnZV9lKHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXMoXCJrbm93c1wiLFwiX3BhcnRpdGlvblwiLFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXMoXCJrbm93c1wiLCBcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzKCdrbm93cycsICdfcGFydGl0aW9uJywgJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX2luamVjdFgwWG1lcmdlRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2EnKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl0pKS5pbmplY3QoMCkubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkuaW5qZWN0KDApLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5pbmplY3QoMCkubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLmluamVjdChudW1iZXIwKS5tZXJnZUUobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogbmV3IEhhc2hTZXQ8c3RyaW5nPiB7IFwiYVwiIH0pKS5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5KGdyZW1saW5nby5QYXJ0aXRpb25TdHJhdGVneUNvbmZpZ3tQYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCBXcml0ZVBhcnRpdGlvbjogXCJhXCIsIFJlYWRQYXJ0aXRpb25zOiBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYVwiKX0pKS5JbmplY3QoMCkuTWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLmluamVjdCgwKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IH19KS5jcmVhdGUoKSkuaW5qZWN0KDApLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXX0pKS5pbmplY3QoMCkubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnXSkpLmluamVjdCgwKS5tZXJnZV9lKHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXMoXCJrbm93c1wiLFwiX3BhcnRpdGlvblwiLFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXMoXCJrbm93c1wiLCBcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzKCdrbm93cycsICdfcGFydGl0aW9uJywgJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXJ0aXRpb25TdHJhdGVneVh3cml0ZV9hX3JlYWRfYVhYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9hbGljZVhfb3B0aW9uWG9uTWF0Y2hfbmFtZV9ib2JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImFcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJhXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ19wYXJ0aXRpb24nLCAnYScpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXSkpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6IFwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjogXCJhXCIsIHJlYWRQYXJ0aXRpb25zOiBuZXcgSGFzaFNldDxzdHJpbmc+IHsgXCJhXCIgfSkpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJhXCIpfSkpLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kuYnVpbGQoKS5wYXJ0aXRpb25LZXkoXCJfcGFydGl0aW9uXCIpLndyaXRlUGFydGl0aW9uKFwiYVwiKS5yZWFkUGFydGl0aW9ucyhuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyB9fSkuY3JlYXRlKCkpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXX0pKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25fa2V5PSdfcGFydGl0aW9uJywgd3JpdGVfcGFydGl0aW9uPSdhJywgcmVhZF9wYXJ0aXRpb25zPVsnYSddKSkubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYm9iXCIpLmhhcyhcIl9wYXJ0aXRpb25cIixcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYm9iXCIpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJib2JcIikuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImJvYlwiKS5IYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJib2JcIikuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImJvYlwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImJvYlwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImJvYlwiKS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2JvYicpLmhhcygnX3BhcnRpdGlvbicsICdhJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9tZXJnZVZfb3B0aW9uWG9uQ3JlYXRlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnX3BhcnRpdGlvbicsICdiJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IFtcImFcIl0pKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpzdHJpbmcwLCB3cml0ZVBhcnRpdGlvbjpzdHJpbmcxLCByZWFkUGFydGl0aW9uczpsaXN0MCkpLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImFcIiB9KSkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJhXCIpfSkpLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OlwiX3BhcnRpdGlvblwiLCB3cml0ZVBhcnRpdGlvbjpcImFcIiwgcmVhZFBhcnRpdGlvbnM6W1wiYVwiXSkpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXJ0aXRpb25TdHJhdGVneS5idWlsZCgpLnBhcnRpdGlvbktleShcIl9wYXJ0aXRpb25cIikud3JpdGVQYXJ0aXRpb24oXCJhXCIpLnJlYWRQYXJ0aXRpb25zKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IH19KS5jcmVhdGUoKSkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXX0pKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uX2tleT0nX3BhcnRpdGlvbicsIHdyaXRlX3BhcnRpdGlvbj0nYScsIHJlYWRfcGFydGl0aW9ucz1bJ2EnXSkpLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsMzUpLmhhcyhcIl9wYXJ0aXRpb25cIixcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDM1KS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDM1KS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLmhhcyhzdHJpbmcyLCBudW1iZXIwKS5oYXMoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcImFnZVwiLCAzNSkuSGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIsIDM1KS5IYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDM1KS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCAzNSkuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgMzUpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdhbGljZScpLmhhcygnYWdlJywgMzUpLmhhcygnX3BhcnRpdGlvbicsICdhJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUGFydGl0aW9uU3RyYXRlZ3lYd3JpdGVfYV9yZWFkX2FYWF9pbmplY3RYMFhfX21lcmdlVl9vcHRpb25Yb25DcmVhdGVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIixcImJcIikucHJvcGVydHkoXCJuYW1lXCIsXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJfcGFydGl0aW9uXCIsIFwiYlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiX3BhcnRpdGlvblwiLCBcImJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIl9wYXJ0aXRpb25cIiwgXCJiXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdfcGFydGl0aW9uJywgJ2InKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXSkpLmluamVjdCgwKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneShwYXJ0aXRpb25LZXk6XCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOlwiYVwiLCByZWFkUGFydGl0aW9uczpbXCJhXCJdKSkuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUGFydGl0aW9uU3RyYXRlZ3kocGFydGl0aW9uS2V5OnN0cmluZzAsIHdyaXRlUGFydGl0aW9uOnN0cmluZzEsIHJlYWRQYXJ0aXRpb25zOmxpc3QwKSkuaW5qZWN0KG51bWJlcjApLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIHdyaXRlUGFydGl0aW9uOiBcImFcIiwgcmVhZFBhcnRpdGlvbnM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImFcIiB9KSkuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGFydGl0aW9uU3RyYXRlZ3koZ3JlbWxpbmdvLlBhcnRpdGlvblN0cmF0ZWd5Q29uZmlne1BhcnRpdGlvbktleTogXCJfcGFydGl0aW9uXCIsIFdyaXRlUGFydGl0aW9uOiBcImFcIiwgUmVhZFBhcnRpdGlvbnM6IGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJhXCIpfSkpLkluamVjdCgwKS5NZXJnZVYoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbktleTpcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246XCJhXCIsIHJlYWRQYXJ0aXRpb25zOltcImFcIl0pKS5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5LmJ1aWxkKCkucGFydGl0aW9uS2V5KFwiX3BhcnRpdGlvblwiKS53cml0ZVBhcnRpdGlvbihcImFcIikucmVhZFBhcnRpdGlvbnMobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgfX0pLmNyZWF0ZSgpKS5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQYXJ0aXRpb25TdHJhdGVneSh7cGFydGl0aW9uS2V5OiBcIl9wYXJ0aXRpb25cIiwgd3JpdGVQYXJ0aXRpb246IFwiYVwiLCByZWFkUGFydGl0aW9uczogW1wiYVwiXX0pKS5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhcnRpdGlvblN0cmF0ZWd5KHBhcnRpdGlvbl9rZXk9J19wYXJ0aXRpb24nLCB3cml0ZV9wYXJ0aXRpb249J2EnLCByZWFkX3BhcnRpdGlvbnM9WydhJ10pKS5pbmplY3QoMCkubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwzNSkuaGFzKFwiX3BhcnRpdGlvblwiLFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgMzUpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgMzUpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuaGFzKHN0cmluZzIsIG51bWJlcjApLmhhcyhzdHJpbmczLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIsIDM1KS5IYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIiwgMzUpLkhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgMzUpLmhhcyhcIl9wYXJ0aXRpb25cIiwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDM1KS5oYXMoXCJfcGFydGl0aW9uXCIsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCAzNSkuaGFzKFwiX3BhcnRpdGlvblwiLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ2FsaWNlJykuaGFzKCdhZ2UnLCAzNSkuaGFzKCdfcGFydGl0aW9uJywgJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXRoUHJvY2Vzc29yU3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlc1huYW1lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXRoUHJvY2Vzc29yU3RyYXRlZ3kpLlYoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieSh2YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXRoUHJvY2Vzc29yU3RyYXRlZ3kpLlYoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXRoUHJvY2Vzc29yU3RyYXRlZ3kpLlYoKS5hcyhzdHJpbmcwKS5zZWxlY3Qoc3RyaW5nMCkuYnkoX18udmFsdWVzKHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQYXRoUHJvY2Vzc29yU3RyYXRlZ3koKSkuVigpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhdGhQcm9jZXNzb3JTdHJhdGVneSgpKS5WKCkuQXMoXCJhXCIpLlNlbGVjdChcImFcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhdGhQcm9jZXNzb3JTdHJhdGVneSgpKS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KCkpLlYoKS5hc18oJ2EnKS5zZWxlY3QoJ2EnKS5ieShfXy52YWx1ZXMoJ25hbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUGF0aFByb2Nlc3NvclN0cmF0ZWd5WF9WX2FzWGFYX3NlbGVjdFhhWF9ieVh2YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkodmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KS5WKCkuYXMoc3RyaW5nMCkuc2VsZWN0KHN0cmluZzApLmJ5KF9fLnZhbHVlcyhzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUGF0aFByb2Nlc3NvclN0cmF0ZWd5KSkuVigpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhdGhQcm9jZXNzb3JTdHJhdGVneSgpKS5WKCkuQXMoXCJhXCIpLlNlbGVjdChcImFcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneS5jbGFzcykuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFBhdGhQcm9jZXNzb3JTdHJhdGVneSkuVigpLmFzXygnYScpLnNlbGVjdCgnYScpLmJ5KF9fLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQYXRoUmV0cmFjdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUGF0aFJldHJhY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUGF0aFJldHJhY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUGF0aFJldHJhY3Rpb25TdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUGF0aFJldHJhY3Rpb25TdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3koKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUGF0aFJldHJhY3Rpb25TdHJhdGVneSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlBhdGhSZXRyYWN0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoUGF0aFJldHJhY3Rpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFBhdGhSZXRyYWN0aW9uU3RyYXRlZ3kuY2xhc3MpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhQYXRoUmV0cmFjdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoUGF0aFJldHJhY3Rpb25TdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2hvcnRlc3RwYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwidlwiKS5ib3RoKCkuYXMoXCJ2XCIpLnByb2plY3QoXCJzcmNcIiwgXCJ0Z3RcIiwgXCJwXCIpLmJ5KF9fLnNlbGVjdChmaXJzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QobGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRyaXBsZVwiKS5ncm91cChcInhcIikuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5ieShfXy5zZWxlY3QoXCJwXCIpLmZvbGQoKSkuc2VsZWN0KFwidGd0XCIpLmJhcnJpZXIoKS5yZXBlYXQoX18uYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoZmlyc3QsIFwidlwiKSkuYnkoX18uc2VsZWN0KGxhc3QsIFwidlwiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsIFwidlwiKSkuYXMoXCJ0XCIpLmZpbHRlcihfXy5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmNvdW50KGxvY2FsKS5hcyhcImxcIikuc2VsZWN0KFBvcC5sYXN0LCBcInRcIikuc2VsZWN0KFBvcC5hbGwsIFwicFwiKS5kZWR1cChTY29wZS5sb2NhbCkuY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAuZXEoXCJsXCIpKSkud2hlcmUoXCJzcmNcIiwgUC5uZXEoXCJ0Z3RcIikpLnNlbGVjdChQb3AubGFzdCwgXCJ0XCIpLm5vdChfXy5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmFzKFwicFwiKS5jb3VudChsb2NhbCkuYXMoXCJsXCIpLnNlbGVjdChQb3AuYWxsLCBcInhcIikudW5mb2xkKCkuZmlsdGVyKHNlbGVjdChrZXlzKS53aGVyZShQLmVxKFwidFwiKSkuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdChcImxcIikpLCBfXy53aGVyZShQLmVxKFwicFwiKSkpKSkuYmFycmllcigpLmdyb3VwKFwieFwiKS5ieShfXy5zZWxlY3QoXCJzcmNcIiwgXCJ0Z3RcIikpLmJ5KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuZm9sZCgpKS5zZWxlY3QoXCJ0Z3RcIikuYmFycmllcigpKS5jYXAoXCJ4XCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKS5tYXAoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJ2XCIpLmJvdGgoKS5hcyhcInZcIikucHJvamVjdChcInNyY1wiLCBcInRndFwiLCBcInBcIikuYnkoX18uc2VsZWN0KFBvcC5maXJzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmxhc3QsIFwidlwiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsIFwidlwiKSkuYXMoXCJ0cmlwbGVcIikuZ3JvdXAoXCJ4XCIpLmJ5KF9fLnNlbGVjdChcInNyY1wiLCBcInRndFwiKSkuYnkoX18uc2VsZWN0KFwicFwiKS5mb2xkKCkpLnNlbGVjdChcInRndFwiKS5iYXJyaWVyKCkucmVwZWF0KF9fLmJvdGgoKS5hcyhcInZcIikucHJvamVjdChcInNyY1wiLCBcInRndFwiLCBcInBcIikuYnkoX18uc2VsZWN0KFBvcC5maXJzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmxhc3QsIFwidlwiKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsIFwidlwiKSkuYXMoXCJ0XCIpLmZpbHRlcihfXy5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcyhcImxcIikuc2VsZWN0KFBvcC5sYXN0LCBcInRcIikuc2VsZWN0KFBvcC5hbGwsIFwicFwiKS5kZWR1cChTY29wZS5sb2NhbCkuY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAuZXEoXCJsXCIpKSkud2hlcmUoXCJzcmNcIiwgUC5uZXEoXCJ0Z3RcIikpLnNlbGVjdChQb3AubGFzdCwgXCJ0XCIpLm5vdChfXy5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmFzKFwicFwiKS5jb3VudChTY29wZS5sb2NhbCkuYXMoXCJsXCIpLnNlbGVjdChQb3AuYWxsLCBcInhcIikudW5mb2xkKCkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4ua2V5cykud2hlcmUoUC5lcShcInRcIikpLmJ5KF9fLnNlbGVjdChcInNyY1wiLCBcInRndFwiKSkpLmZpbHRlcihfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3IoX18uY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAubHQoXCJsXCIpKSwgX18ud2hlcmUoUC5lcShcInBcIikpKSkpLmJhcnJpZXIoKS5ncm91cChcInhcIikuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmZvbGQoKSkuc2VsZWN0KFwidGd0XCIpLmJhcnJpZXIoKSkuY2FwKFwieFwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkudW5mb2xkKCkubWFwKF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcInZcIikuYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRyaXBsZVwiKS5ncm91cChcInhcIikuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5ieShfXy5zZWxlY3QoXCJwXCIpLmZvbGQoKSkuc2VsZWN0KFwidGd0XCIpLmJhcnJpZXIoKS5yZXBlYXQoX18uYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRcIikuZmlsdGVyKF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuY291bnQoU2NvcGUubG9jYWwpLmFzKFwibFwiKS5zZWxlY3QoUG9wLmxhc3QsIFwidFwiKS5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcShcImxcIikpKS53aGVyZShcInNyY1wiLCBQLm5lcShcInRndFwiKSkuc2VsZWN0KFBvcC5sYXN0LCBcInRcIikubm90KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuYXMoXCJwXCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcyhcImxcIikuc2VsZWN0KFBvcC5hbGwsIFwieFwiKS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKFwidFwiKSkuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdChcImxcIikpLCBfXy53aGVyZShQLmVxKFwicFwiKSkpKSkuYmFycmllcigpLmdyb3VwKFwieFwiKS5ieShfXy5zZWxlY3QoXCJzcmNcIiwgXCJ0Z3RcIikpLmJ5KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuZm9sZCgpKS5zZWxlY3QoXCJ0Z3RcIikuYmFycmllcigpKS5jYXAoXCJ4XCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKS5tYXAoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5ib3RoKCkuYXMoc3RyaW5nMCkucHJvamVjdChzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBzdHJpbmcwKSkuYnkoX18uc2VsZWN0KFBvcC5sYXN0LCBzdHJpbmcwKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsIHN0cmluZzApKS5hcyhzdHJpbmc0KS5ncm91cChzdHJpbmc1KS5ieShfXy5zZWxlY3Qoc3RyaW5nMSwgc3RyaW5nMikpLmJ5KF9fLnNlbGVjdChzdHJpbmczKS5mb2xkKCkpLnNlbGVjdChzdHJpbmcyKS5iYXJyaWVyKCkucmVwZWF0KF9fLmJvdGgoKS5hcyhzdHJpbmcwKS5wcm9qZWN0KHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpLmJ5KF9fLnNlbGVjdChQb3AuZmlyc3QsIHN0cmluZzApKS5ieShfXy5zZWxlY3QoUG9wLmxhc3QsIHN0cmluZzApKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMCkpLmFzKHN0cmluZzYpLmZpbHRlcihfXy5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMykuY291bnQoU2NvcGUubG9jYWwpLmFzKHN0cmluZzcpLnNlbGVjdChQb3AubGFzdCwgc3RyaW5nNikuc2VsZWN0KFBvcC5hbGwsIHN0cmluZzMpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcShzdHJpbmc3KSkpLndoZXJlKHN0cmluZzEsIFAubmVxKHN0cmluZzIpKS5zZWxlY3QoUG9wLmxhc3QsIHN0cmluZzYpLm5vdChfXy5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMykuYXMoc3RyaW5nMykuY291bnQoU2NvcGUubG9jYWwpLmFzKHN0cmluZzcpLnNlbGVjdChQb3AuYWxsLCBzdHJpbmc1KS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKHN0cmluZzYpKS5ieShfXy5zZWxlY3Qoc3RyaW5nMSwgc3RyaW5nMikpKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yKF9fLmNvdW50KFNjb3BlLmxvY2FsKS53aGVyZShQLmx0KHN0cmluZzcpKSwgX18ud2hlcmUoUC5lcShzdHJpbmczKSkpKSkuYmFycmllcigpLmdyb3VwKHN0cmluZzUpLmJ5KF9fLnNlbGVjdChzdHJpbmcxLCBzdHJpbmcyKSkuYnkoX18uc2VsZWN0KFBvcC5hbGwsIHN0cmluZzMpLmZvbGQoKSkuc2VsZWN0KHN0cmluZzIpLmJhcnJpZXIoKSkuY2FwKHN0cmluZzUpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKS5tYXAoX18udW5mb2xkKCkudmFsdWVzKHN0cmluZzgpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJ2XCIpLkJvdGgoKS5BcyhcInZcIikuUHJvamVjdDxvYmplY3Q+KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihQb3AuRmlyc3QsIFwidlwiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oUG9wLkxhc3QsIFwidlwiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJ2XCIpKS5BcyhcInRyaXBsZVwiKS5Hcm91cChcInhcIikuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJzcmNcIiwgXCJ0Z3RcIikpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwicFwiKS5Gb2xkKCkpLlNlbGVjdDxvYmplY3Q+KFwidGd0XCIpLkJhcnJpZXIoKS5SZXBlYXQoX18uQm90aCgpLkFzKFwidlwiKS5Qcm9qZWN0PG9iamVjdD4oXCJzcmNcIiwgXCJ0Z3RcIiwgXCJwXCIpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFBvcC5GaXJzdCwgXCJ2XCIpKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihQb3AuTGFzdCwgXCJ2XCIpKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihQb3AuQWxsLCBcInZcIikpLkFzKFwidFwiKS5GaWx0ZXIoX18uU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJwXCIpLkNvdW50KFNjb3BlLkxvY2FsKS5BcyhcImxcIikuU2VsZWN0PG9iamVjdD4oUG9wLkxhc3QsIFwidFwiKS5TZWxlY3Q8b2JqZWN0PihQb3AuQWxsLCBcInBcIikuRGVkdXAoU2NvcGUuTG9jYWwpLkNvdW50KFNjb3BlLkxvY2FsKS5XaGVyZShQLkVxKFwibFwiKSkpLldoZXJlKFwic3JjXCIsIFAuTmVxKFwidGd0XCIpKS5TZWxlY3Q8b2JqZWN0PihQb3AuTGFzdCwgXCJ0XCIpLk5vdChfXy5TZWxlY3Q8b2JqZWN0PihQb3AuQWxsLCBcInBcIikuQXMoXCJwXCIpLkNvdW50KFNjb3BlLkxvY2FsKS5BcyhcImxcIikuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJ4XCIpLlVuZm9sZDxvYmplY3Q+KCkuRmlsdGVyKF9fLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5LZXlzKS5XaGVyZShQLkVxKFwidFwiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJzcmNcIiwgXCJ0Z3RcIikpKS5GaWx0ZXIoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5PcihfXy5Db3VudChTY29wZS5Mb2NhbCkuV2hlcmUoUC5MdChcImxcIikpLCBfXy5XaGVyZShQLkVxKFwicFwiKSkpKSkuQmFycmllcigpLkdyb3VwKFwieFwiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInNyY1wiLCBcInRndFwiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJwXCIpLkZvbGQoKSkuU2VsZWN0PG9iamVjdD4oXCJ0Z3RcIikuQmFycmllcigpKS5DYXA8b2JqZWN0PihcInhcIikuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5VbmZvbGQ8b2JqZWN0PigpLk1hcDxvYmplY3Q+KF9fLlVuZm9sZDxvYmplY3Q+KCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuQm90aCgpLkFzKFwidlwiKS5Qcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uUG9wLkZpcnN0LCBcInZcIikpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgXCJ2XCIpKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJ2XCIpKS5BcyhcInRyaXBsZVwiKS5Hcm91cChcInhcIikuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJzcmNcIiwgXCJ0Z3RcIikpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwicFwiKS5Gb2xkKCkpLlNlbGVjdChcInRndFwiKS5CYXJyaWVyKCkuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aCgpLkFzKFwidlwiKS5Qcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uUG9wLkZpcnN0LCBcInZcIikpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgXCJ2XCIpKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJ2XCIpKS5BcyhcInRcIikuRmlsdGVyKGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Qb3AuQWxsLCBcInBcIikuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5BcyhcImxcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgXCJ0XCIpLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJwXCIpLkRlZHVwKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5XaGVyZShncmVtbGluZ28uUC5FcShcImxcIikpKS5XaGVyZShcInNyY1wiLCBncmVtbGluZ28uUC5OZXEoXCJ0Z3RcIikpLlNlbGVjdChncmVtbGluZ28uUG9wLkxhc3QsIFwidFwiKS5Ob3QoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5BbGwsIFwicFwiKS5BcyhcInBcIikuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5BcyhcImxcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuQWxsLCBcInhcIikuVW5mb2xkKCkuRmlsdGVyKGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uS2V5cykuV2hlcmUoZ3JlbWxpbmdvLlAuRXEoXCJ0XCIpKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInNyY1wiLCBcInRndFwiKSkpLkZpbHRlcihncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuT3IoZ3JlbWxpbmdvLlRfXy5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpLldoZXJlKGdyZW1saW5nby5QLkx0KFwibFwiKSksIGdyZW1saW5nby5UX18uV2hlcmUoZ3JlbWxpbmdvLlAuRXEoXCJwXCIpKSkpKS5CYXJyaWVyKCkuR3JvdXAoXCJ4XCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJwXCIpLkZvbGQoKSkuU2VsZWN0KFwidGd0XCIpLkJhcnJpZXIoKSkuQ2FwKFwieFwiKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLlVuZm9sZCgpLk1hcChncmVtbGluZ28uVF9fLlVuZm9sZCgpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikuYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRyaXBsZVwiKS5ncm91cChcInhcIikuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5ieShfXy5zZWxlY3QoXCJwXCIpLmZvbGQoKSkuc2VsZWN0KFwidGd0XCIpLmJhcnJpZXIoKS5yZXBlYXQoX18uYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRcIikuZmlsdGVyKF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuY291bnQoU2NvcGUubG9jYWwpLmFzKFwibFwiKS5zZWxlY3QoUG9wLmxhc3QsIFwidFwiKS5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcShcImxcIikpKS53aGVyZShcInNyY1wiLCBQLm5lcShcInRndFwiKSkuc2VsZWN0KFBvcC5sYXN0LCBcInRcIikubm90KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuYXMoXCJwXCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcyhcImxcIikuc2VsZWN0KFBvcC5hbGwsIFwieFwiKS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKFwidFwiKSkuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdChcImxcIikpLCBfXy53aGVyZShQLmVxKFwicFwiKSkpKSkuYmFycmllcigpLmdyb3VwKFwieFwiKS5ieShfXy5zZWxlY3QoXCJzcmNcIiwgXCJ0Z3RcIikpLmJ5KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuZm9sZCgpKS5zZWxlY3QoXCJ0Z3RcIikuYmFycmllcigpKS5jYXAoXCJ4XCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKS5tYXAoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcInZcIikuYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRyaXBsZVwiKS5ncm91cChcInhcIikuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5ieShfXy5zZWxlY3QoXCJwXCIpLmZvbGQoKSkuc2VsZWN0KFwidGd0XCIpLmJhcnJpZXIoKS5yZXBlYXQoX18uYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRcIikuZmlsdGVyKF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuY291bnQoU2NvcGUubG9jYWwpLmFzKFwibFwiKS5zZWxlY3QoUG9wLmxhc3QsIFwidFwiKS5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcShcImxcIikpKS53aGVyZShcInNyY1wiLCBQLm5lcShcInRndFwiKSkuc2VsZWN0KFBvcC5sYXN0LCBcInRcIikubm90KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuYXMoXCJwXCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcyhcImxcIikuc2VsZWN0KFBvcC5hbGwsIFwieFwiKS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKFwidFwiKSkuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdChcImxcIikpLCBfXy53aGVyZShQLmVxKFwicFwiKSkpKSkuYmFycmllcigpLmdyb3VwKFwieFwiKS5ieShfXy5zZWxlY3QoXCJzcmNcIiwgXCJ0Z3RcIikpLmJ5KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuZm9sZCgpKS5zZWxlY3QoXCJ0Z3RcIikuYmFycmllcigpKS5jYXAoXCJ4XCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKS5tYXAoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcInZcIikuYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRyaXBsZVwiKS5ncm91cChcInhcIikuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKS5ieShfXy5zZWxlY3QoXCJwXCIpLmZvbGQoKSkuc2VsZWN0KFwidGd0XCIpLmJhcnJpZXIoKS5yZXBlYXQoX18uYm90aCgpLmFzKFwidlwiKS5wcm9qZWN0KFwic3JjXCIsIFwidGd0XCIsIFwicFwiKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCBcInZcIikpLmJ5KF9fLnNlbGVjdChQb3AubGFzdCwgXCJ2XCIpKS5ieShfXy5zZWxlY3QoUG9wLmFsbCwgXCJ2XCIpKS5hcyhcInRcIikuZmlsdGVyKF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuY291bnQoU2NvcGUubG9jYWwpLmFzKFwibFwiKS5zZWxlY3QoUG9wLmxhc3QsIFwidFwiKS5zZWxlY3QoUG9wLmFsbCwgXCJwXCIpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcShcImxcIikpKS53aGVyZShcInNyY1wiLCBQLm5lcShcInRndFwiKSkuc2VsZWN0KFBvcC5sYXN0LCBcInRcIikubm90KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuYXMoXCJwXCIpLmNvdW50KFNjb3BlLmxvY2FsKS5hcyhcImxcIikuc2VsZWN0KFBvcC5hbGwsIFwieFwiKS51bmZvbGQoKS5maWx0ZXIoX18uc2VsZWN0KENvbHVtbi5rZXlzKS53aGVyZShQLmVxKFwidFwiKSkuYnkoX18uc2VsZWN0KFwic3JjXCIsIFwidGd0XCIpKSkuZmlsdGVyKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcihfXy5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5sdChcImxcIikpLCBfXy53aGVyZShQLmVxKFwicFwiKSkpKSkuYmFycmllcigpLmdyb3VwKFwieFwiKS5ieShfXy5zZWxlY3QoXCJzcmNcIiwgXCJ0Z3RcIikpLmJ5KF9fLnNlbGVjdChQb3AuYWxsLCBcInBcIikuZm9sZCgpKS5zZWxlY3QoXCJ0Z3RcIikuYmFycmllcigpKS5jYXAoXCJ4XCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS51bmZvbGQoKS5tYXAoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygndicpLmJvdGgoKS5hc18oJ3YnKS5wcm9qZWN0KCdzcmMnLCAndGd0JywgJ3AnKS5ieShfXy5zZWxlY3QoUG9wLmZpcnN0LCAndicpKS5ieShfXy5zZWxlY3QoUG9wLmxhc3QsICd2JykpLmJ5KF9fLnNlbGVjdChQb3AuYWxsXywgJ3YnKSkuYXNfKCd0cmlwbGUnKS5ncm91cCgneCcpLmJ5KF9fLnNlbGVjdCgnc3JjJywgJ3RndCcpKS5ieShfXy5zZWxlY3QoJ3AnKS5mb2xkKCkpLnNlbGVjdCgndGd0JykuYmFycmllcigpLnJlcGVhdChfXy5ib3RoKCkuYXNfKCd2JykucHJvamVjdCgnc3JjJywgJ3RndCcsICdwJykuYnkoX18uc2VsZWN0KFBvcC5maXJzdCwgJ3YnKSkuYnkoX18uc2VsZWN0KFBvcC5sYXN0LCAndicpKS5ieShfXy5zZWxlY3QoUG9wLmFsbF8sICd2JykpLmFzXygndCcpLmZpbHRlcl8oX18uc2VsZWN0KFBvcC5hbGxfLCAncCcpLmNvdW50KFNjb3BlLmxvY2FsKS5hc18oJ2wnKS5zZWxlY3QoUG9wLmxhc3QsICd0Jykuc2VsZWN0KFBvcC5hbGxfLCAncCcpLmRlZHVwKFNjb3BlLmxvY2FsKS5jb3VudChTY29wZS5sb2NhbCkud2hlcmUoUC5lcSgnbCcpKSkud2hlcmUoJ3NyYycsIFAubmVxKCd0Z3QnKSkuc2VsZWN0KFBvcC5sYXN0LCAndCcpLm5vdF8oX18uc2VsZWN0KFBvcC5hbGxfLCAncCcpLmFzXygncCcpLmNvdW50KFNjb3BlLmxvY2FsKS5hc18oJ2wnKS5zZWxlY3QoUG9wLmFsbF8sICd4JykudW5mb2xkKCkuZmlsdGVyXyhfXy5zZWxlY3QoQ29sdW1uLmtleXMpLndoZXJlKFAuZXEoJ3QnKSkuYnkoX18uc2VsZWN0KCdzcmMnLCAndGd0JykpKS5maWx0ZXJfKF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcl8oX18uY291bnQoU2NvcGUubG9jYWwpLndoZXJlKFAubHQoJ2wnKSksIF9fLndoZXJlKFAuZXEoJ3AnKSkpKSkuYmFycmllcigpLmdyb3VwKCd4JykuYnkoX18uc2VsZWN0KCdzcmMnLCAndGd0JykpLmJ5KF9fLnNlbGVjdChQb3AuYWxsXywgJ3AnKS5mb2xkKCkpLnNlbGVjdCgndGd0JykuYmFycmllcigpKS5jYXAoJ3gnKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkudW5mb2xkKCkubWFwKF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wbGF5bGlzdF9wYXRocyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFNlZWRTdHJhdGVneShzZWVkOiA5OTk5OSkpLlYoKS5oYXMoXCJuYW1lXCIsIFwiQm9iX0R5bGFuXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5zaW1wbGVQYXRoKCkuZnJvbShcImFcIikpLnVudGlsKF9fLm91dChcIndyaXR0ZW5CeVwiKS5oYXMoXCJuYW1lXCIsIFwiSm9obm55X0Nhc2hcIikpLmxpbWl0KDEpLmFzKFwiYlwiKS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5hcyhcImNcIikuc2ltcGxlUGF0aCgpLmZyb20oXCJiXCIpLnRvKFwiY1wiKSkudW50aWwoX18ub3V0KFwic3VuZ0J5XCIpLmhhcyhcIm5hbWVcIiwgXCJHcmF0ZWZ1bF9EZWFkXCIpKS5saW1pdCgxKS5wYXRoKCkuZnJvbShcImFcIikudW5mb2xkKCkucHJvamVjdChcInNvbmdcIiwgXCJhcnRpc3RzXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5jb2FsZXNjZShfXy5vdXQoXCJzdW5nQnlcIiwgXCJ3cml0dGVuQnlcIikuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpLF9fLmNvbnN0YW50KFwiVW5rbm93blwiKSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTkpKS5WKCkuaGFzKFwibmFtZVwiLCBcIkJvYl9EeWxhblwiKS5pbihcInN1bmdCeVwiKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb20oXCJhXCIpKS51bnRpbChfXy5vdXQoXCJ3cml0dGVuQnlcIikuaGFzKFwibmFtZVwiLCBcIkpvaG5ueV9DYXNoXCIpKS5saW1pdCgxKS5hcyhcImJcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5mcm9tKFwiYlwiKS50byhcImNcIikpLnVudGlsKF9fLm91dChcInN1bmdCeVwiKS5oYXMoXCJuYW1lXCIsIFwiR3JhdGVmdWxfRGVhZFwiKSkubGltaXQoMSkucGF0aCgpLmZyb20oXCJhXCIpLnVuZm9sZCgpLnByb2plY3QoXCJzb25nXCIsIFwiYXJ0aXN0c1wiKS5ieShcIm5hbWVcIikuYnkoX18uY29hbGVzY2UoX18ub3V0KFwic3VuZ0J5XCIsIFwid3JpdHRlbkJ5XCIpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJVbmtub3duXCIpKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTkpKS5WKCkuaGFzKFwibmFtZVwiLCBcIkJvYl9EeWxhblwiKS5pbihcInN1bmdCeVwiKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb20oXCJhXCIpKS51bnRpbChfXy5vdXQoXCJ3cml0dGVuQnlcIikuaGFzKFwibmFtZVwiLCBcIkpvaG5ueV9DYXNoXCIpKS5saW1pdCgxKS5hcyhcImJcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5mcm9tKFwiYlwiKS50byhcImNcIikpLnVudGlsKF9fLm91dChcInN1bmdCeVwiKS5oYXMoXCJuYW1lXCIsIFwiR3JhdGVmdWxfRGVhZFwiKSkubGltaXQoMSkucGF0aCgpLmZyb20oXCJhXCIpLnVuZm9sZCgpLnByb2plY3QoXCJzb25nXCIsIFwiYXJ0aXN0c1wiKS5ieShcIm5hbWVcIikuYnkoX18uY29hbGVzY2UoX18ub3V0KFwic3VuZ0J5XCIsIFwid3JpdHRlbkJ5XCIpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJVbmtub3duXCIpKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFNlZWRTdHJhdGVneShzZWVkOm51bWJlcjApKS5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLmluKHN0cmluZzIpLmFzKHN0cmluZzMpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNpbXBsZVBhdGgoKS5mcm9tKHN0cmluZzMpKS51bnRpbChfXy5vdXQoc3RyaW5nNCkuaGFzKHN0cmluZzAsIHN0cmluZzUpKS5saW1pdChudW1iZXIxKS5hcyhzdHJpbmc2KS5yZXBlYXQoX18ub3V0KCkub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5hcyhzdHJpbmc3KS5zaW1wbGVQYXRoKCkuZnJvbShzdHJpbmc2KS50byhzdHJpbmc3KSkudW50aWwoX18ub3V0KHN0cmluZzIpLmhhcyhzdHJpbmcwLCBzdHJpbmc4KSkubGltaXQobnVtYmVyMSkucGF0aCgpLmZyb20oc3RyaW5nMykudW5mb2xkKCkucHJvamVjdChzdHJpbmc5LCBzdHJpbmcxMCkuYnkoc3RyaW5nMCkuYnkoX18uY29hbGVzY2UoX18ub3V0KHN0cmluZzIsIHN0cmluZzQpLmRlZHVwKCkudmFsdWVzKHN0cmluZzApLCBfXy5jb25zdGFudChzdHJpbmcxMSkpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6IDk5OTk5KSkuVigpLkhhcyhcIm5hbWVcIiwgXCJCb2JfRHlsYW5cIikuSW4oXCJzdW5nQnlcIikuQXMoXCJhXCIpLlJlcGVhdChfXy5PdXQoKS5PcmRlcigpLkJ5KE9yZGVyLlNodWZmbGUpLlNpbXBsZVBhdGgoKS5Gcm9tKFwiYVwiKSkuVW50aWwoX18uT3V0KFwid3JpdHRlbkJ5XCIpLkhhcyhcIm5hbWVcIiwgXCJKb2hubnlfQ2FzaFwiKSkuTGltaXQ8b2JqZWN0PigxKS5BcyhcImJcIikuUmVwZWF0KF9fLk91dCgpLk9yZGVyKCkuQnkoT3JkZXIuU2h1ZmZsZSkuQXMoXCJjXCIpLlNpbXBsZVBhdGgoKS5Gcm9tKFwiYlwiKS5UbyhcImNcIikpLlVudGlsKF9fLk91dChcInN1bmdCeVwiKS5IYXMoXCJuYW1lXCIsIFwiR3JhdGVmdWxfRGVhZFwiKSkuTGltaXQ8b2JqZWN0PigxKS5QYXRoKCkuRnJvbShcImFcIikuVW5mb2xkPG9iamVjdD4oKS5Qcm9qZWN0PG9iamVjdD4oXCJzb25nXCIsIFwiYXJ0aXN0c1wiKS5CeShcIm5hbWVcIikuQnkoX18uQ29hbGVzY2U8b2JqZWN0PihfXy5PdXQoXCJzdW5nQnlcIiwgXCJ3cml0dGVuQnlcIikuRGVkdXAoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIiksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJVbmtub3duXCIpKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU2VlZFN0cmF0ZWd5KGdyZW1saW5nby5TZWVkU3RyYXRlZ3lDb25maWd7U2VlZDogOTk5OTl9KSkuVigpLkhhcyhcIm5hbWVcIiwgXCJCb2JfRHlsYW5cIikuSW4oXCJzdW5nQnlcIikuQXMoXCJhXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLlNodWZmbGUpLlNpbXBsZVBhdGgoKS5Gcm9tKFwiYVwiKSkuVW50aWwoZ3JlbWxpbmdvLlRfXy5PdXQoXCJ3cml0dGVuQnlcIikuSGFzKFwibmFtZVwiLCBcIkpvaG5ueV9DYXNoXCIpKS5MaW1pdCgxKS5BcyhcImJcIikuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuU2h1ZmZsZSkuQXMoXCJjXCIpLlNpbXBsZVBhdGgoKS5Gcm9tKFwiYlwiKS5UbyhcImNcIikpLlVudGlsKGdyZW1saW5nby5UX18uT3V0KFwic3VuZ0J5XCIpLkhhcyhcIm5hbWVcIiwgXCJHcmF0ZWZ1bF9EZWFkXCIpKS5MaW1pdCgxKS5QYXRoKCkuRnJvbShcImFcIikuVW5mb2xkKCkuUHJvamVjdChcInNvbmdcIiwgXCJhcnRpc3RzXCIpLkJ5KFwibmFtZVwiKS5CeShncmVtbGluZ28uVF9fLkNvYWxlc2NlKGdyZW1saW5nby5UX18uT3V0KFwic3VuZ0J5XCIsIFwid3JpdHRlbkJ5XCIpLkRlZHVwKCkuVmFsdWVzKFwibmFtZVwiKSwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcIlVua25vd25cIikpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU2VlZFN0cmF0ZWd5KHNlZWQ6OTk5OTkpKS5WKCkuaGFzKFwibmFtZVwiLCBcIkJvYl9EeWxhblwiKS5pbihcInN1bmdCeVwiKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb20oXCJhXCIpKS51bnRpbChfXy5vdXQoXCJ3cml0dGVuQnlcIikuaGFzKFwibmFtZVwiLCBcIkpvaG5ueV9DYXNoXCIpKS5saW1pdCgxKS5hcyhcImJcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5mcm9tKFwiYlwiKS50byhcImNcIikpLnVudGlsKF9fLm91dChcInN1bmdCeVwiKS5oYXMoXCJuYW1lXCIsIFwiR3JhdGVmdWxfRGVhZFwiKSkubGltaXQoMSkucGF0aCgpLmZyb20oXCJhXCIpLnVuZm9sZCgpLnByb2plY3QoXCJzb25nXCIsIFwiYXJ0aXN0c1wiKS5ieShcIm5hbWVcIikuYnkoX18uY29hbGVzY2UoX18ub3V0KFwic3VuZ0J5XCIsIFwid3JpdHRlbkJ5XCIpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJVbmtub3duXCIpKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFNlZWRTdHJhdGVneS5idWlsZCgpLnNlZWQoOTk5OTkpLmNyZWF0ZSgpKS5WKCkuaGFzKFwibmFtZVwiLCBcIkJvYl9EeWxhblwiKS5pbihcInN1bmdCeVwiKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb20oXCJhXCIpKS51bnRpbChfXy5vdXQoXCJ3cml0dGVuQnlcIikuaGFzKFwibmFtZVwiLCBcIkpvaG5ueV9DYXNoXCIpKS5saW1pdCgxKS5hcyhcImJcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXMoXCJjXCIpLnNpbXBsZVBhdGgoKS5mcm9tKFwiYlwiKS50byhcImNcIikpLnVudGlsKF9fLm91dChcInN1bmdCeVwiKS5oYXMoXCJuYW1lXCIsIFwiR3JhdGVmdWxfRGVhZFwiKSkubGltaXQoMSkucGF0aCgpLmZyb20oXCJhXCIpLnVuZm9sZCgpLnByb2plY3QoXCJzb25nXCIsIFwiYXJ0aXN0c1wiKS5ieShcIm5hbWVcIikuYnkoX18uY29hbGVzY2UoX18ub3V0KFwic3VuZ0J5XCIsIFwid3JpdHRlbkJ5XCIpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJVbmtub3duXCIpKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTZWVkU3RyYXRlZ3koe3NlZWQ6IDk5OTk5fSkpLlYoKS5oYXMoXCJuYW1lXCIsIFwiQm9iX0R5bGFuXCIpLmluXyhcInN1bmdCeVwiKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2ltcGxlUGF0aCgpLmZyb21fKFwiYVwiKSkudW50aWwoX18ub3V0KFwid3JpdHRlbkJ5XCIpLmhhcyhcIm5hbWVcIiwgXCJKb2hubnlfQ2FzaFwiKSkubGltaXQoMSkuYXMoXCJiXCIpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLmFzKFwiY1wiKS5zaW1wbGVQYXRoKCkuZnJvbV8oXCJiXCIpLnRvKFwiY1wiKSkudW50aWwoX18ub3V0KFwic3VuZ0J5XCIpLmhhcyhcIm5hbWVcIiwgXCJHcmF0ZWZ1bF9EZWFkXCIpKS5saW1pdCgxKS5wYXRoKCkuZnJvbV8oXCJhXCIpLnVuZm9sZCgpLnByb2plY3QoXCJzb25nXCIsIFwiYXJ0aXN0c1wiKS5ieShcIm5hbWVcIikuYnkoX18uY29hbGVzY2UoX18ub3V0KFwic3VuZ0J5XCIsIFwid3JpdHRlbkJ5XCIpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJVbmtub3duXCIpKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFNlZWRTdHJhdGVneShzZWVkPTk5OTk5KSkuVigpLmhhcygnbmFtZScsICdCb2JfRHlsYW4nKS5pbl8oJ3N1bmdCeScpLmFzXygnYScpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNpbXBsZV9wYXRoKCkuZnJvbV8oJ2EnKSkudW50aWwoX18ub3V0KCd3cml0dGVuQnknKS5oYXMoJ25hbWUnLCAnSm9obm55X0Nhc2gnKSkubGltaXQoMSkuYXNfKCdiJykucmVwZWF0KF9fLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuYXNfKCdjJykuc2ltcGxlX3BhdGgoKS5mcm9tXygnYicpLnRvKCdjJykpLnVudGlsKF9fLm91dCgnc3VuZ0J5JykuaGFzKCduYW1lJywgJ0dyYXRlZnVsX0RlYWQnKSkubGltaXQoMSkucGF0aCgpLmZyb21fKCdhJykudW5mb2xkKCkucHJvamVjdCgnc29uZycsICdhcnRpc3RzJykuYnkoJ25hbWUnKS5ieShfXy5jb2FsZXNjZShfXy5vdXQoJ3N1bmdCeScsICd3cml0dGVuQnknKS5kZWR1cCgpLnZhbHVlcygnbmFtZScpLCBfXy5jb25zdGFudCgnVW5rbm93bicpKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2dyb3VwX2J5WGFnZVhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoc3RyaW5nMCkuYnkoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwiYWdlXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5Hcm91cCgpLkJ5KFwiYWdlXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmdyb3VwKCkuYnkoJ2FnZScpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfZ3JvdXBfYnlYYWdlWF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieShzdHJpbmcwKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihQcm9kdWN0aXZlQnlTdHJhdGVneSkpLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShcImFnZVwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuR3JvdXAoKS5CeShcImFnZVwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5LmNsYXNzKS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoJ2FnZScpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZmlsZVN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZmlsZVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZmlsZVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZmlsZVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZmlsZVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2ZpbGVTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9maWxlU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9maWxlU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9maWxlU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUHJvZmlsZVN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUHJvZmlsZVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUHJvZmlsZVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUHJvZmlsZVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUHJvZmlsZVN0cmF0ZWd5KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZmlsZVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneS5jbGFzcykuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFByb2ZpbGVTdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZWFkT25seVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9vdXRYa25vd3NYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuVigpLm91dChcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkub3V0KHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5PdXQoXCJrbm93c1wiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5PdXQoXCJrbm93c1wiKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuVigpLm91dChcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5vdXQoJ2tub3dzJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfYWRkVlhwZXJzb25YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkVihcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkVihcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLmFkZFYoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkVihzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZWFkT25seVN0cmF0ZWd5KCkpLkFkZFYoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5hZGRWKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuYWRkVihcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5hZGRWKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuYWRkX3YoJ3BlcnNvbicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlYWRPbmx5U3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9mcm9tWFZYMVhYX3RvWFZYMlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkRShcImxpbmtcIikuZnJvbShfXy5WKHZpZDEpKS50byhfXy5WKHZpZDIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkRShcImxpbmtcIikuZnJvbShfXy5WKHZpZDEpKS50byhfXy5WKHZpZDIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLmFkZEUoXCJsaW5rXCIpLmZyb20oX18uVih2aWQxKSkudG8oX18uVih2aWQyKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuYWRkRShzdHJpbmcwKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuQWRkRSgoc3RyaW5nKSBcImxpbmtcIikuRnJvbShfXy5WKHZpZDEpKS5UbyhfXy5WKHZpZDIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlYWRPbmx5U3RyYXRlZ3koKSkuQWRkRShcImxpbmtcIikuRnJvbShncmVtbGluZ28uVF9fLlYodmlkMSkpLlRvKGdyZW1saW5nby5UX18uVih2aWQyKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5hZGRFKFwibGlua1wiKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkMikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuYWRkRShcImxpbmtcIikuZnJvbShfXy5WKHZpZDEpKS50byhfXy5WKHZpZDIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5hZGRFKFwibGlua1wiKS5mcm9tXyhfXy5WKHZpZDEpKS50byhfXy5WKHZpZDIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLmFkZF9lKCdsaW5rJykuZnJvbV8oX18uVih2aWQxKSkudG8oX18uVih2aWQyKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9hZGRWWHBlcnNvblhfZnJvbVhWWDFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKS5hZGRFKFwibGlua1wiKS5mcm9tKF9fLlYodmlkMSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkuYWRkRShcImxpbmtcIikuZnJvbShfXy5WKHZpZDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKS5hZGRFKFwibGlua1wiKS5mcm9tKF9fLlYodmlkMSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKS5hZGRFKHN0cmluZzApLmZyb20oX18uVih2aWQxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkuQWRkRSgoc3RyaW5nKSBcImxpbmtcIikuRnJvbShfXy5WKHZpZDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLkFkZEUoXCJsaW5rXCIpLkZyb20oZ3JlbWxpbmdvLlRfXy5WKHZpZDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLlYoKS5hZGRFKFwibGlua1wiKS5mcm9tKF9fLlYodmlkMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmFkZEUoXCJsaW5rXCIpLmZyb20oX18uVih2aWQxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLmFkZEUoXCJsaW5rXCIpLmZyb21fKF9fLlYodmlkMSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLmFkZF9lKCdsaW5rJykuZnJvbV8oX18uVih2aWQxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVhZE9ubHlTdHJhdGVneVhfVl9wcm9wZXJ0eVhuYW1lX2pvc2hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuVigpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuVigpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkucHJvcGVydHkoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVhZE9ubHlTdHJhdGVneSgpKS5WKCkuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KS5WKCkucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLlYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3koKSkuVigpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hSZWFkT25seVN0cmF0ZWd5WF9FX3Byb3BlcnR5WHdlaWdodF8wWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLkUoKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuRSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuRSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kpLkUoKS5wcm9wZXJ0eShzdHJpbmcwLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLkUoKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlYWRPbmx5U3RyYXRlZ3koKSkuRSgpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneSkuRSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlYWRPbmx5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuRSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWFkT25seVN0cmF0ZWd5KCkpLkUoKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZWFkT25seVN0cmF0ZWd5KCkpLkUoKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jbGFzc2ljX3JlY29tbWVuZGF0aW9uIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJEQVJLIFNUQVJcIikuYXMoXCJhXCIpLm91dChcImZvbGxvd2VkQnlcIikuYWdncmVnYXRlKFwic3Rhc2hcIikuaW4oXCJmb2xsb3dlZEJ5XCIpLndoZXJlKFAubmVxKFwiYVwiKS5hbmQoUC5ub3QoUC53aXRoaW4oXCJzdGFzaFwiKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdChcInhcIiwgXCJ5XCIsIFwielwiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwicGVyZm9ybWFuY2VzXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwielwiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KFwieVwiKSwgT3JkZXIuYXNjKS5saW1pdCg1KS5sb2NhbChhZ2dyZWdhdGUoXCJtXCIpKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRBUksgU1RBUlwiKS5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hZ2dyZWdhdGUoXCJzdGFzaFwiKS5pbihcImZvbGxvd2VkQnlcIikud2hlcmUoUC5uZXEoXCJhXCIpLmFuZChQLm5vdChQLndpdGhpbihcInN0YXNoXCIpKSkpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5wcm9qZWN0KFwieFwiLCBcInlcIiwgXCJ6XCIpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwibmFtZVwiKSkuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJwZXJmb3JtYW5jZXNcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJ6XCIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoXCJ5XCIpLCBPcmRlci5hc2MpLmxpbWl0KDUpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcIm1cIikpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRBUksgU1RBUlwiKS5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hZ2dyZWdhdGUoXCJzdGFzaFwiKS5pbihcImZvbGxvd2VkQnlcIikud2hlcmUoUC5uZXEoXCJhXCIpLmFuZChQLm5vdChQLndpdGhpbihcInN0YXNoXCIpKSkpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5wcm9qZWN0KFwieFwiLCBcInlcIiwgXCJ6XCIpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwibmFtZVwiKSkuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJwZXJmb3JtYW5jZXNcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJ6XCIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoXCJ5XCIpLCBPcmRlci5hc2MpLmxpbWl0KDUpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcIm1cIikpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5hcyhzdHJpbmcyKS5vdXQoc3RyaW5nMykuYWdncmVnYXRlKHN0cmluZzQpLmluKHN0cmluZzMpLndoZXJlKFAubmVxKHN0cmluZzIpLmFuZChQLm5vdChQLndpdGhpbihzdHJpbmc0KSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdChzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3KS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhzdHJpbmcwKSkuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoc3RyaW5nOCkpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3Qoc3RyaW5nNyksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChzdHJpbmc2KSwgT3JkZXIuYXNjKS5saW1pdChudW1iZXIwKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nOSkpLnNlbGVjdChzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLkFzKFwiYVwiKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLkFnZ3JlZ2F0ZShcInN0YXNoXCIpLkluKFwiZm9sbG93ZWRCeVwiKS5XaGVyZShQLk5lcShcImFcIikuQW5kKFAuTm90KFAuV2l0aGluKFwic3Rhc2hcIikpKSkuR3JvdXBDb3VudDxvYmplY3Q+KCkuVW5mb2xkPG9iamVjdD4oKS5Qcm9qZWN0PG9iamVjdD4oXCJ4XCIsIFwieVwiLCBcInpcIikuQnkoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlZhbHVlczxvYmplY3Q+KFwicGVyZm9ybWFuY2VzXCIpKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKSkuT3JkZXIoKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInpcIiksIE9yZGVyLkRlc2MpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwieVwiKSwgT3JkZXIuQXNjKS5MaW1pdDxvYmplY3Q+KDUpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwibVwiKSkuU2VsZWN0PG9iamVjdD4oXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIkRBUksgU1RBUlwiKS5BcyhcImFcIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5BZ2dyZWdhdGUoXCJzdGFzaFwiKS5JbihcImZvbGxvd2VkQnlcIikuV2hlcmUoZ3JlbWxpbmdvLlAuTmVxKFwiYVwiKS5BbmQoZ3JlbWxpbmdvLlAuTm90KGdyZW1saW5nby5QLldpdGhpbihcInN0YXNoXCIpKSkpLkdyb3VwQ291bnQoKS5VbmZvbGQoKS5Qcm9qZWN0KFwieFwiLCBcInlcIiwgXCJ6XCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uS2V5cykuVmFsdWVzKFwibmFtZVwiKSkuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5LZXlzKS5WYWx1ZXMoXCJwZXJmb3JtYW5jZXNcIikpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKSkuT3JkZXIoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInpcIiksIGdyZW1saW5nby5PcmRlci5EZXNjKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInlcIiksIGdyZW1saW5nby5PcmRlci5Bc2MpLkxpbWl0KDUpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwibVwiKSkuU2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLmFzKFwiYVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFnZ3JlZ2F0ZShcInN0YXNoXCIpLmluKFwiZm9sbG93ZWRCeVwiKS53aGVyZShQLm5lcShcImFcIikuYW5kKFAubm90KFAud2l0aGluKFwic3Rhc2hcIikpKSkuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnByb2plY3QoXCJ4XCIsIFwieVwiLCBcInpcIikuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInpcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInlcIiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKFwibVwiKSkuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRBUksgU1RBUlwiKS5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hZ2dyZWdhdGUoXCJzdGFzaFwiKS5pbihcImZvbGxvd2VkQnlcIikud2hlcmUoUC5uZXEoXCJhXCIpLmFuZChQLm5vdChQLndpdGhpbihcInN0YXNoXCIpKSkpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5wcm9qZWN0KFwieFwiLCBcInlcIiwgXCJ6XCIpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwibmFtZVwiKSkuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJwZXJmb3JtYW5jZXNcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJ6XCIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoXCJ5XCIpLCBPcmRlci5hc2MpLmxpbWl0KDUpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcIm1cIikpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJEQVJLIFNUQVJcIikuYXMoXCJhXCIpLm91dChcImZvbGxvd2VkQnlcIikuYWdncmVnYXRlKFwic3Rhc2hcIikuaW5fKFwiZm9sbG93ZWRCeVwiKS53aGVyZShQLm5lcShcImFcIikuYW5kKFAubm90KFAud2l0aGluKFwic3Rhc2hcIikpKSkuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnByb2plY3QoXCJ4XCIsIFwieVwiLCBcInpcIikuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInpcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInlcIiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKFwibVwiKSkuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnREFSSyBTVEFSJykuYXNfKCdhJykub3V0KCdmb2xsb3dlZEJ5JykuYWdncmVnYXRlKCdzdGFzaCcpLmluXygnZm9sbG93ZWRCeScpLndoZXJlKFAubmVxKCdhJykuYW5kXyhQLm5vdF8oUC53aXRoaW4oJ3N0YXNoJykpKSkuZ3JvdXBfY291bnQoKS51bmZvbGQoKS5wcm9qZWN0KCd4JywgJ3knLCAneicpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKCduYW1lJykpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKCdwZXJmb3JtYW5jZXMnKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdCgneicpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoJ3knKSwgT3JkZXIuYXNjKS5saW1pdCg1KS5sb2NhbChfXy5hZ2dyZWdhdGUoJ20nKSkuc2VsZWN0KCd4JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jbGFzc2ljX3JlY29tbWVuZGF0aW9uX3JhbmtlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLmFzKFwiYVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFnZ3JlZ2F0ZShcInN0YXNoXCIpLmluKFwiZm9sbG93ZWRCeVwiKS53aGVyZShQLm5lcShcImFcIikuYW5kKFAubm90KFAud2l0aGluKFwic3Rhc2hcIikpKSkuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnByb2plY3QoXCJ4XCIsIFwieVwiLCBcInpcIikuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInpcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInlcIiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoYWdncmVnYXRlKFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLmFzKFwiYVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFnZ3JlZ2F0ZShcInN0YXNoXCIpLmluKFwiZm9sbG93ZWRCeVwiKS53aGVyZShQLm5lcShcImFcIikuYW5kKFAubm90KFAud2l0aGluKFwic3Rhc2hcIikpKSkuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnByb2plY3QoXCJ4XCIsIFwieVwiLCBcInpcIikuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInpcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInlcIiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRBUksgU1RBUlwiKS5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hZ2dyZWdhdGUoXCJzdGFzaFwiKS5pbihcImZvbGxvd2VkQnlcIikud2hlcmUoUC5uZXEoXCJhXCIpLmFuZChQLm5vdChQLndpdGhpbihcInN0YXNoXCIpKSkpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5wcm9qZWN0KFwieFwiLCBcInlcIiwgXCJ6XCIpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwibmFtZVwiKSkuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJwZXJmb3JtYW5jZXNcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJ6XCIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoXCJ5XCIpLCBPcmRlci5hc2MpLmxpbWl0KDUpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuYXMoc3RyaW5nMikub3V0KHN0cmluZzMpLmFnZ3JlZ2F0ZShzdHJpbmc0KS5pbihzdHJpbmczKS53aGVyZShQLm5lcShzdHJpbmcyKS5hbmQoUC5ub3QoUC53aXRoaW4oc3RyaW5nNCkpKSkuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnByb2plY3Qoc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNykuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoc3RyaW5nMCkpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKHN0cmluZzgpKS5ieShfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykpLm9yZGVyKCkuYnkoX18uc2VsZWN0KHN0cmluZzcpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3Qoc3RyaW5nNiksIE9yZGVyLmFzYykubGltaXQobnVtYmVyMCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLkFzKFwiYVwiKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLkFnZ3JlZ2F0ZShcInN0YXNoXCIpLkluKFwiZm9sbG93ZWRCeVwiKS5XaGVyZShQLk5lcShcImFcIikuQW5kKFAuTm90KFAuV2l0aGluKFwic3Rhc2hcIikpKSkuR3JvdXBDb3VudDxvYmplY3Q+KCkuVW5mb2xkPG9iamVjdD4oKS5Qcm9qZWN0PG9iamVjdD4oXCJ4XCIsIFwieVwiLCBcInpcIikuQnkoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuQnkoX18uU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlZhbHVlczxvYmplY3Q+KFwicGVyZm9ybWFuY2VzXCIpKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKSkuT3JkZXIoKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInpcIiksIE9yZGVyLkRlc2MpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwieVwiKSwgT3JkZXIuQXNjKS5MaW1pdDxvYmplY3Q+KDUpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLkFzKFwiYVwiKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLkFnZ3JlZ2F0ZShcInN0YXNoXCIpLkluKFwiZm9sbG93ZWRCeVwiKS5XaGVyZShncmVtbGluZ28uUC5OZXEoXCJhXCIpLkFuZChncmVtbGluZ28uUC5Ob3QoZ3JlbWxpbmdvLlAuV2l0aGluKFwic3Rhc2hcIikpKSkuR3JvdXBDb3VudCgpLlVuZm9sZCgpLlByb2plY3QoXCJ4XCIsIFwieVwiLCBcInpcIikuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5LZXlzKS5WYWx1ZXMoXCJuYW1lXCIpKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLktleXMpLlZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKSkuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpKS5PcmRlcigpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwielwiKSwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwieVwiKSwgZ3JlbWxpbmdvLk9yZGVyLkFzYykuTGltaXQoNSkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiREFSSyBTVEFSXCIpLmFzKFwiYVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFnZ3JlZ2F0ZShcInN0YXNoXCIpLmluKFwiZm9sbG93ZWRCeVwiKS53aGVyZShQLm5lcShcImFcIikuYW5kKFAubm90KFAud2l0aGluKFwic3Rhc2hcIikpKSkuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnByb2plY3QoXCJ4XCIsIFwieVwiLCBcInpcIikuYnkoX18uc2VsZWN0KENvbHVtbi5rZXlzKS52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInpcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInlcIiksIE9yZGVyLmFzYykubGltaXQoNSkubG9jYWwoX18uYWdncmVnYXRlKFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJEQVJLIFNUQVJcIikuYXMoXCJhXCIpLm91dChcImZvbGxvd2VkQnlcIikuYWdncmVnYXRlKFwic3Rhc2hcIikuaW4oXCJmb2xsb3dlZEJ5XCIpLndoZXJlKFAubmVxKFwiYVwiKS5hbmQoUC5ub3QoUC53aXRoaW4oXCJzdGFzaFwiKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdChcInhcIiwgXCJ5XCIsIFwielwiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwicGVyZm9ybWFuY2VzXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwielwiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KFwieVwiKSwgT3JkZXIuYXNjKS5saW1pdCg1KS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIkRBUksgU1RBUlwiKS5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hZ2dyZWdhdGUoXCJzdGFzaFwiKS5pbl8oXCJmb2xsb3dlZEJ5XCIpLndoZXJlKFAubmVxKFwiYVwiKS5hbmQoUC5ub3QoUC53aXRoaW4oXCJzdGFzaFwiKSkpKS5ncm91cENvdW50KCkudW5mb2xkKCkucHJvamVjdChcInhcIiwgXCJ5XCIsIFwielwiKS5ieShfXy5zZWxlY3QoQ29sdW1uLmtleXMpLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKFwicGVyZm9ybWFuY2VzXCIpKS5ieShfXy5zZWxlY3QoQ29sdW1uLnZhbHVlcykpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwielwiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KFwieVwiKSwgT3JkZXIuYXNjKS5saW1pdCg1KS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnREFSSyBTVEFSJykuYXNfKCdhJykub3V0KCdmb2xsb3dlZEJ5JykuYWdncmVnYXRlKCdzdGFzaCcpLmluXygnZm9sbG93ZWRCeScpLndoZXJlKFAubmVxKCdhJykuYW5kXyhQLm5vdF8oUC53aXRoaW4oJ3N0YXNoJykpKSkuZ3JvdXBfY291bnQoKS51bmZvbGQoKS5wcm9qZWN0KCd4JywgJ3knLCAneicpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKCduYW1lJykpLmJ5KF9fLnNlbGVjdChDb2x1bW4ua2V5cykudmFsdWVzKCdwZXJmb3JtYW5jZXMnKSkuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdCgneicpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoJ3knKSwgT3JkZXIuYXNjKS5saW1pdCg1KS5sb2NhbChfXy5hZ2dyZWdhdGUoJ20nKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZWZlcmVuY2VFbGVtZW50U3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUmVmZXJlbmNlRWxlbWVudFN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneS5jbGFzcykuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFJlZmVyZW5jZUVsZW1lbnRTdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhvdXRYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQob3V0KCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WG91dFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChvdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpKS5WKCkuUmVwZWF0KF9fLk91dCgpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuY2xhc3MpLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGluWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KGluKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbigpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkpLnRpbWVzKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoX18uSW4oKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uSW4oKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbigpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkucmVwZWF0KF9fLmluKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYaW5YX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoaW4oKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW4oKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW4oKSkudGltZXMobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpKS5WKCkuUmVwZWF0KF9fLkluKCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkluKCkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW4oKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuY2xhc3MpLlYoKS5yZXBlYXQoX18uaW4oKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW5fKCkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluXygpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYb3V0X2hhc1huYW1lX25vdFN0YXJ0aW5nV2l0aFh6WFhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQob3V0KCkuaGFzKFwibmFtZVwiLCBub3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90U3RhcnRpbmdXaXRoKFwielwiKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18ub3V0KCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18ub3V0KCkuaGFzKHN0cmluZzAsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChzdHJpbmcxKSkpLnRpbWVzKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoX18uT3V0KCkuSGFzKFwibmFtZVwiLCBUZXh0UC5Ob3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuSGFzKFwibmFtZVwiLCBncmVtbGluZ28uVGV4dFAuTm90U3RhcnRpbmdXaXRoKFwielwiKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18ub3V0KCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChcInpcIikpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChcInpcIikpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLm91dCgpLmhhcygnbmFtZScsIFRleHRQLm5vdF9zdGFydGluZ193aXRoKCd6JykpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9yZXBlYXRYb3V0X2hhc1huYW1lX25vdFN0YXJ0aW5nV2l0aFh6WFhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQob3V0KCkuaGFzKFwibmFtZVwiLCBub3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLm91dCgpLmhhcyhcIm5hbWVcIiwgVGV4dFAubm90U3RhcnRpbmdXaXRoKFwielwiKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18ub3V0KCkuaGFzKFwibmFtZVwiLCBUZXh0UC5ub3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18ub3V0KCkuaGFzKHN0cmluZzAsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChzdHJpbmcxKSkpLnRpbWVzKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFJlcGVhdFVucm9sbFN0cmF0ZWd5KSkuVigpLlJlcGVhdChfXy5PdXQoKS5IYXMoXCJuYW1lXCIsIFRleHRQLk5vdFN0YXJ0aW5nV2l0aChcInpcIikpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5UZXh0UC5Ob3RTdGFydGluZ1dpdGgoXCJ6XCIpKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChcInpcIikpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneS5jbGFzcykuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChcInpcIikpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoXCJuYW1lXCIsIFRleHRQLm5vdFN0YXJ0aW5nV2l0aChcInpcIikpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5vdXQoKS5oYXMoJ25hbWUnLCBUZXh0UC5ub3Rfc3RhcnRpbmdfd2l0aCgneicpKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGluX2hhc1hhZ2VfZ3RYMjBYWFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChpbigpLmhhcyhcImFnZVwiLCBndCgyMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW4oKS5oYXMoXCJhZ2VcIiwgUC5ndCgyMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMjApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uaW4oKS5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKSkpLnRpbWVzKG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoX18uSW4oKS5IYXMoXCJhZ2VcIiwgUC5HdCgyMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5JbigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgyMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMjApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLnJlcGVhdChfXy5pbigpLmhhcyhcImFnZVwiLCBQLmd0KDIwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmluXygpLmhhcyhcImFnZVwiLCBQLmd0KDIwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uaW5fKCkuaGFzKCdhZ2UnLCBQLmd0KDIwKSkpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhpbl9oYXNYYWdlX2d0WDIwWFhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoaW4oKS5oYXMoXCJhZ2VcIiwgZ3QoMjApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMjApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbigpLmhhcyhcImFnZVwiLCBQLmd0KDIwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkuaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZXBlYXRVbnJvbGxTdHJhdGVneSkpLlYoKS5SZXBlYXQoX18uSW4oKS5IYXMoXCJhZ2VcIiwgUC5HdCgyMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5JbigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5HdCgyMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmluKCkuaGFzKFwiYWdlXCIsIFAuZ3QoMjApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuY2xhc3MpLlYoKS5yZXBlYXQoX18uaW4oKS5oYXMoXCJhZ2VcIiwgUC5ndCgyMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbl8oKS5oYXMoXCJhZ2VcIiwgUC5ndCgyMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5pbl8oKS5oYXMoJ2FnZScsIFAuZ3QoMjApKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KGJvdGgoKS5oYXMoXCJhZ2VcIiwgbHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKHN0cmluZzAsIFAubHQobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuUmVwZWF0KF9fLkJvdGgoKS5IYXMoXCJhZ2VcIiwgUC5MdCgzMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLkx0KDMwKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcyhcImFnZVwiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcyhcImFnZVwiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoJ2FnZScsIFAubHQoMzApKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KGJvdGgoKS5oYXMoXCJhZ2VcIiwgbHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKHN0cmluZzAsIFAubHQobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZXBlYXRVbnJvbGxTdHJhdGVneSkpLlYoKS5SZXBlYXQoX18uQm90aCgpLkhhcyhcImFnZVwiLCBQLkx0KDMwKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5IYXMoXCJhZ2VcIiwgZ3JlbWxpbmdvLlAuTHQoMzApKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKFwiYWdlXCIsIFAubHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuY2xhc3MpLlYoKS5yZXBlYXQoX18uYm90aCgpLmhhcyhcImFnZVwiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuaGFzKCdhZ2UnLCBQLmx0KDMwKSkpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoRV9vdGhlclZfaGFzWGFnZV9sdFgzMFhYWF90aW1lc1gyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KGJvdGhFKCkub3RoZXJWKCkuaGFzKFwiYWdlXCIsIGx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoRSgpLm90aGVyVigpLmhhcyhcImFnZVwiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aEUoKS5vdGhlclYoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoRSgpLm90aGVyVigpLmhhcyhzdHJpbmcwLCBQLmx0KG51bWJlcjApKSkudGltZXMobnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChfXy5Cb3RoRSgpLk90aGVyVigpLkhhcyhcImFnZVwiLCBQLkx0KDMwKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGhFKCkuT3RoZXJWKCkuSGFzKFwiYWdlXCIsIGdyZW1saW5nby5QLkx0KDMwKSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aEUoKS5vdGhlclYoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkucmVwZWF0KF9fLmJvdGhFKCkub3RoZXJWKCkuaGFzKFwiYWdlXCIsIFAubHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uYm90aEUoKS5vdGhlclYoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGhfZSgpLm90aGVyX3YoKS5oYXMoJ2FnZScsIFAubHQoMzApKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhFX290aGVyVl9oYXNYYWdlX2x0WDMwWFhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoYm90aEUoKS5vdGhlclYoKS5oYXMoXCJhZ2VcIiwgbHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhFKCkub3RoZXJWKCkuaGFzKFwiYWdlXCIsIFAubHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoRSgpLm90aGVyVigpLmhhcyhcImFnZVwiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhFKCkub3RoZXJWKCkuaGFzKHN0cmluZzAsIFAubHQobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZXBlYXRVbnJvbGxTdHJhdGVneSkpLlYoKS5SZXBlYXQoX18uQm90aEUoKS5PdGhlclYoKS5IYXMoXCJhZ2VcIiwgUC5MdCgzMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLk90aGVyVigpLkhhcyhcImFnZVwiLCBncmVtbGluZ28uUC5MdCgzMCkpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhFKCkub3RoZXJWKCkuaGFzKFwiYWdlXCIsIFAubHQoMzApKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuY2xhc3MpLlYoKS5yZXBlYXQoX18uYm90aEUoKS5vdGhlclYoKS5oYXMoXCJhZ2VcIiwgUC5sdCgzMCkpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoRSgpLm90aGVyVigpLmhhcyhcImFnZVwiLCBQLmx0KDMwKSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGhfZSgpLm90aGVyX3YoKS5oYXMoJ2FnZScsIFAubHQoMzApKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfbGltaXRYMVhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5saW1pdCgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KG51bWJlcjApKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuUmVwZWF0KF9fLkJvdGgoKS5MaW1pdDxvYmplY3Q+KDEpKS5UaW1lcygyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuTGltaXQoMSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5saW1pdCgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5saW1pdCgxKSkudGltZXMoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUmVwZWF0VW5yb2xsU3RyYXRlZ3lYX1ZfcmVwZWF0WGJvdGhfbGltaXRYMVhYX3RpbWVzWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkucmVwZWF0KF9fLmJvdGgoKS5saW1pdCgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KG51bWJlcjApKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZXBlYXRVbnJvbGxTdHJhdGVneSkpLlYoKS5SZXBlYXQoX18uQm90aCgpLkxpbWl0PG9iamVjdD4oMSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5MaW1pdCgxKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5LmNsYXNzKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5saW1pdCgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLmxpbWl0KDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkubGltaXQoMSkpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX29yZGVyX2J5WG5hbWVYX3JlcGVhdFhib3RoX29yZGVyX2J5WG5hbWVYX2FnZ3JlZ2F0ZVh4WFhfdGltZXNYMlhfbGltaXRYMTBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KCduYW1lJykucmVwZWF0KGJvdGgoKS5vcmRlcigpLmJ5KCduYW1lJykuYWdncmVnYXRlKCd4JykpLnRpbWVzKDIpLmxpbWl0KDEwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KCduYW1lJykucmVwZWF0KF9fLmJvdGgoKS5vcmRlcigpLmJ5KCduYW1lJykuYWdncmVnYXRlKCd4JykpLnRpbWVzKDIpLmxpbWl0KDEwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieSgnbmFtZScpLnJlcGVhdChfXy5ib3RoKCkub3JkZXIoKS5ieSgnbmFtZScpLmFnZ3JlZ2F0ZSgneCcpKS50aW1lcygyKS5saW1pdCgxMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KHN0cmluZzApLnJlcGVhdChfXy5ib3RoKCkub3JkZXIoKS5ieShzdHJpbmcwKS5hZ2dyZWdhdGUoc3RyaW5nMSkpLnRpbWVzKG51bWJlcjApLmxpbWl0KG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5SZXBlYXQoX18uQm90aCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkFnZ3JlZ2F0ZShcInhcIikpLlRpbWVzKDIpLkxpbWl0PG9iamVjdD4oMTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5MaW1pdCgxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmFnZ3JlZ2F0ZShcInhcIikpLnRpbWVzKDIpLmxpbWl0KDEwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnJlcGVhdChfXy5ib3RoKCkub3JkZXIoKS5ieShcIm5hbWVcIikuYWdncmVnYXRlKFwieFwiKSkudGltZXMoMikubGltaXQoMTApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KCkpLlYoKS5vcmRlcigpLmJ5KCduYW1lJykucmVwZWF0KF9fLmJvdGgoKS5vcmRlcigpLmJ5KCduYW1lJykuYWdncmVnYXRlKCd4JykpLnRpbWVzKDIpLmxpbWl0KDEwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hSZXBlYXRVbnJvbGxTdHJhdGVneVhfVl9vcmRlcl9ieVhuYW1lWF9yZXBlYXRYYm90aF9vcmRlcl9ieVhuYW1lWF9hZ2dyZWdhdGVYeFhYX3RpbWVzWDJYX2xpbWl0WDEwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieSgnbmFtZScpLnJlcGVhdChib3RoKCkub3JkZXIoKS5ieSgnbmFtZScpLmFnZ3JlZ2F0ZSgneCcpKS50aW1lcygyKS5saW1pdCgxMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieSgnbmFtZScpLnJlcGVhdChfXy5ib3RoKCkub3JkZXIoKS5ieSgnbmFtZScpLmFnZ3JlZ2F0ZSgneCcpKS50aW1lcygyKS5saW1pdCgxMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5KS5WKCkub3JkZXIoKS5ieShzdHJpbmcwKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoc3RyaW5nMCkuYWdncmVnYXRlKHN0cmluZzEpKS50aW1lcyhudW1iZXIwKS5saW1pdChudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZXBlYXRVbnJvbGxTdHJhdGVneSkpLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5SZXBlYXQoX18uQm90aCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLkFnZ3JlZ2F0ZShcInhcIikpLlRpbWVzKDIpLkxpbWl0PG9iamVjdD4oMTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5BZ2dyZWdhdGUoXCJ4XCIpKS5UaW1lcygyKS5MaW1pdCgxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlcGVhdFVucm9sbFN0cmF0ZWd5LmNsYXNzKS5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikucmVwZWF0KF9fLmJvdGgoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5hZ2dyZWdhdGUoXCJ4XCIpKS50aW1lcygyKS5saW1pdCgxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmFnZ3JlZ2F0ZShcInhcIikpLnRpbWVzKDIpLmxpbWl0KDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLm9yZGVyKCkuYnkoJ25hbWUnKS5yZXBlYXQoX18uYm90aCgpLm9yZGVyKCkuYnkoJ25hbWUnKS5hZ2dyZWdhdGUoJ3gnKSkudGltZXMoMikubGltaXQoMTApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX3NhbXBsZVgxWFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKG51bWJlcjApKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuUmVwZWF0KF9fLkJvdGgoKS5TYW1wbGUoMSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKS5TYW1wbGUoMSkpLlRpbWVzKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVwZWF0VW5yb2xsU3RyYXRlZ3koKSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkucmVwZWF0KF9fLmJvdGgoKS5zYW1wbGUoMSkpLnRpbWVzKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWFJlcGVhdFVucm9sbFN0cmF0ZWd5WF9WX3JlcGVhdFhib3RoX3NhbXBsZVgxWFhfdGltZXNYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVwZWF0VW5yb2xsU3RyYXRlZ3kpLlYoKS5yZXBlYXQoX18uYm90aCgpLnNhbXBsZSgxKSkudGltZXMoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKG51bWJlcjApKS50aW1lcyhudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihSZXBlYXRVbnJvbGxTdHJhdGVneSkpLlYoKS5SZXBlYXQoX18uQm90aCgpLlNhbXBsZSgxKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5SZXBlYXRVbnJvbGxTdHJhdGVneSgpKS5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aCgpLlNhbXBsZSgxKSkuVGltZXMoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneS5jbGFzcykuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXBlYXRVbnJvbGxTdHJhdGVneSkuVigpLnJlcGVhdChfXy5ib3RoKCkuc2FtcGxlKDEpKS50aW1lcygyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneVh0aHJvd0V4Y2VwdGlvbl90cnVlWFhfYWRkVlhwZXJzb25YX3Byb3BlcnR5WGlkXzEyM1hfcHJvcGVydHlYbmFtZV9tYXJrb1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjogdHJ1ZSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJpZFwiLCAxMjMpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlKSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImlkXCIsIDEyMykucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlKSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImlkXCIsIDEyMykucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246Ym9vbGVhbjApKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG51bWJlcjApLnByb3BlcnR5KHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KHRocm93RXhjZXB0aW9uOiB0cnVlKSkuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcImlkXCIsIDEyMykuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5SZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneShncmVtbGluZ28uUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lDb25maWd7VGhyb3dFeGNlcHRpb246IHRydWV9KSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcImlkXCIsIDEyMykuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246dHJ1ZSkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJpZFwiLCAxMjMpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5LmJ1aWxkKCkudGhyb3dFeGNlcHRpb24odHJ1ZSkuY3JlYXRlKCkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJpZFwiLCAxMjMpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh7dGhyb3dFeGNlcHRpb246IHRydWV9KSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImlkXCIsIDEyMykucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dfZXhjZXB0aW9uPVRydWUpKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ2lkJywgMTIzKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5WHRocm93RXhjZXB0aW9uX3RydWVYWF9hZGRWWHBlcnNvblhfcHJvcGVydHlYYWdlXzI5WF9wcm9wZXJ0eVhuYW1lX21hcmtvWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KHRocm93RXhjZXB0aW9uOiB0cnVlLCBrZXlzOiB7XCJhZ2VcIn0pKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246dHJ1ZSwga2V5czp7XCJhZ2VcIn0pKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KHRocm93RXhjZXB0aW9uOnRydWUsIGtleXM6e1wiYWdlXCJ9KSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246Ym9vbGVhbjAsIGtleXM6c2V0MCkpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkucHJvcGVydHkoc3RyaW5nMiwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dFeGNlcHRpb246IHRydWUsIGtleXM6IG5ldyBIYXNoU2V0PHN0cmluZz4geyBcImFnZVwiIH0pKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KGdyZW1saW5nby5SZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneUNvbmZpZ3tUaHJvd0V4Y2VwdGlvbjogdHJ1ZSwgS2V5czogZ3JlbWxpbmdvLk5ld1NpbXBsZVNldChcImFnZVwiKX0pKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSh0aHJvd0V4Y2VwdGlvbjp0cnVlLCBrZXlzOltcImFnZVwiXSBhcyBTZXQpKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneS5idWlsZCgpLnRocm93RXhjZXB0aW9uKHRydWUpLmtleXMobmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZChcImFnZVwiKTsgfX0pLmNyZWF0ZSgpKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3koe3Rocm93RXhjZXB0aW9uOiB0cnVlLCBrZXlzOiBuZXcgU2V0KFtcImFnZVwiXSl9KSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kodGhyb3dfZXhjZXB0aW9uPVRydWUsIGtleXM9eydhZ2UnfSkpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3lYX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhpZF8xMjNYX3Byb3BlcnR5WG5hbWVfbWFya29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJpZFwiLCAxMjMpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImlkXCIsIDEyMykucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImlkXCIsIDEyMykucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkucHJvcGVydHkoc3RyaW5nMiwgc3RyaW5nMykudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kpKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwiaWRcIiwgMTIzKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5WYWx1ZXM8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcImlkXCIsIDEyMykuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuVmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcImlkXCIsIDEyMykucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoUmVzZXJ2ZWRLZXlzVmVyaWZpY2F0aW9uU3RyYXRlZ3kuY2xhc3MpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJpZFwiLCAxMjMpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFJlc2VydmVkS2V5c1ZlcmlmaWNhdGlvblN0cmF0ZWd5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwiaWRcIiwgMTIzKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhSZXNlcnZlZEtleXNWZXJpZmljYXRpb25TdHJhdGVneSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCdpZCcsIDEyMykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS52YWx1ZXMoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hTZWVkU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aG91dFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhTZWVkU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihTZWVkU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5TZWVkU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRob3V0X3N0cmF0ZWdpZXMoU2VlZFN0cmF0ZWd5KS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRob3V0U3RyYXRlZ2llc1hTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aG91dFN0cmF0ZWdpZXModHlwZW9mKFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5TdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhTdGFuZGFyZFZlcmlmaWNhdGlvblN0cmF0ZWd5LmNsYXNzKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aG91dFN0cmF0ZWdpZXMoU3RhbmRhcmRWZXJpZmljYXRpb25TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFN0YW5kYXJkVmVyaWZpY2F0aW9uU3RyYXRlZ3kpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQVhYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpLmNyZWF0ZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQVhYX0UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpLmNyZWF0ZSgpKS5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQVhYX1ZYNFhfb3V0RSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVih2aWQ0KS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpKSkuVih2aWQ0KS5vdXRfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9pbkUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5JbkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5WKHZpZDQpLkluRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5WKHZpZDQpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLlYodmlkNCkuaW5fZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9vdXQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5WKHZpZDQpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLlYodmlkNCkub3V0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX2luIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkuaW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5pbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSkpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5JbigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpfSkpLlYodmlkNCkuSW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkuaW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpfSkpLlYodmlkNCkuaW5fKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpKSkuVih2aWQ0KS5pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQVhYX1ZYNFhfYm90aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpKSkuVih2aWQ0KS5ib3RoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEFYWF9WWDRYX2JvdGhFIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSkpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpfSkpLlYodmlkNCkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpfSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSkpKS5WKHZpZDQpLmJvdGhfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5Mb2NhbDxvYmplY3Q+KF9fLkJvdGhFKCkuTGltaXQ8b2JqZWN0PigxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSl9KSkuVih2aWQ0KS5Mb2NhbChncmVtbGluZ28uVF9fLkJvdGhFKCkuTGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aF9lKCkubGltaXQoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfRVgxMVhfYm90aFYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMSkuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5FKGVpZDExKS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5FKGVpZDExKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLkUoZWlkMTEpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhBWFhfRVgxMlhfYm90aFYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMikuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5FKGVpZDEyKS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5jcmVhdGUoKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKX0pKS5FKGVpZDEyKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSkpLkUoZWlkMTIpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzEpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nMikub3V0VigpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzIpKSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIikuT3V0VigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7RWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2tub3dzJyksIF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKS5vdXRfdigpLmhhcygnbmFtZScsICdtYXJrbycpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzEpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nMikub3V0VigpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIikuT3V0VigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7RWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2tub3dzJyksIF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKS5vdXRfdigpLmhhcygnbmFtZScsICdtYXJrbycpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfVlgxWF9vdXRFIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nMSksIF9fLmhhcyhzdHJpbmcwLCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmcyKS5vdXRWKCkuaGFzKHN0cmluZzMsIHN0cmluZzQpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nMikpKSkuVih2aWQxKS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLk91dEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7RWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQxKS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQxKS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgna25vd3MnKSwgX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLm91dF92KCkuaGFzKCduYW1lJywgJ21hcmtvJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDEpLm91dF9lKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDFYX291dCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzEpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nMikub3V0VigpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzIpKSkpLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwia25vd3NcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDEpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2tub3dzJyksIF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKS5vdXRfdigpLmhhcygnbmFtZScsICdtYXJrbycpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQxKS5vdXQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYMVhfb3V0WGNyZWF0ZWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkMSkub3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nMSksIF9fLmhhcyhzdHJpbmcwLCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmcyKS5vdXRWKCkuaGFzKHN0cmluZzMsIHN0cmluZzQpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nMikpKSkuVih2aWQxKS5vdXQoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLk91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwia25vd3NcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDEpLk91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDEpLm91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkMSkub3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDEpLm91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2tub3dzJyksIF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKS5vdXRfdigpLmhhcygnbmFtZScsICdtYXJrbycpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQxKS5vdXQoJ2tub3dzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dFhjcmVhdGVkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5vdXQoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzEpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nMikub3V0VigpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzIpKSkpLlYodmlkNCkub3V0KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwia25vd3NcIiksIF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5PdXQoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwia25vd3NcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLk91dChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLm91dChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLm91dChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgna25vd3MnKSwgX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLm91dF92KCkuaGFzKCduYW1lJywgJ21hcmtvJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLm91dCgnY3JlYXRlZCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfVlg0WF9vdXRFIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nMSksIF9fLmhhcyhzdHJpbmcwLCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmcyKS5vdXRWKCkuaGFzKHN0cmluZzMsIHN0cmluZzQpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nMikpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLk91dEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7RWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgna25vd3MnKSwgX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLm91dF92KCkuaGFzKCduYW1lJywgJ21hcmtvJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLm91dF9lKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX291dCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzEpLCBfXy5oYXMoc3RyaW5nMCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nMikub3V0VigpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwia25vd3NcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2tub3dzJyksIF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKS5vdXRfdigpLmhhcygnbmFtZScsICdtYXJrbycpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQ0KS5vdXQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQlhYX1ZYNFhfYm90aEUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmcwLCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmcxKSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzIpLm91dFYoKS5oYXMoc3RyaW5nMywgc3RyaW5nNCksIF9fLmhhcyhzdHJpbmcwLCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmcyKSkpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0VkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIikuT3V0VigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdrbm93cycpLCBfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJykub3V0X3YoKS5oYXMoJ25hbWUnLCAnbWFya28nKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkuYm90aF9lKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaEJYWF9WWDRYX2JvdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmcwLCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmcxKSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzIpLm91dFYoKS5oYXMoc3RyaW5nMywgc3RyaW5nNCksIF9fLmhhcyhzdHJpbmcwLCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmcyKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImtub3dzXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIikuT3V0VigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuQm90aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwia25vd3NcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLkJvdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2VkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdrbm93cycpLCBfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJykub3V0X3YoKS5oYXMoJ25hbWUnLCAnbWFya28nKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkuYm90aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhCWFhfVlg0WF9vdXRWX291dEUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJrbm93c1wiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ4KS5vdXRWKCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkOCkub3V0VigpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ4KS5vdXRWKCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmcwLCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmcxKSwgX18uaGFzKHN0cmluZzAsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzIpLm91dFYoKS5oYXMoc3RyaW5nMywgc3RyaW5nNCksIF9fLmhhcyhzdHJpbmcwLCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmcyKSkpKS5FKGVpZDgpLm91dFYoKS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDgpLk91dFYoKS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0VkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJrbm93c1wiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIikuT3V0VigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkOCkuT3V0VigpLk91dEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ4KS5vdXRWKCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImtub3dzXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLkUoZWlkOCkub3V0VigpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwia25vd3NcIiksIF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkOCkub3V0VigpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdrbm93cycpLCBfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJykub3V0X3YoKS5oYXMoJ25hbWUnLCAnbWFya28nKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLkUoZWlkOCkub3V0X3YoKS5vdXRfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5Ya25vd3NYX2hhc1huYW1lX21hcmtvWFhYX1ZfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5pbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaW4oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbihzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikpKS5WKCkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkluKFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSkuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSW4oXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIil9KSkuVigpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5pbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkuY3JlYXRlKCkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaW5fKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpfSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaW5fKCdrbm93cycpLmhhcygnbmFtZScsICdtYXJrbycpKSkuVigpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5faGFzWG5hbWVfbWFya29YWFhfVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmluKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmluKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmluKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpKSkuVigpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5JbigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkluKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpfSkpLlYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaW4oKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaW4oKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpLmNyZWF0ZSgpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmluXygpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKX0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmluXygpLmhhcygnbmFtZScsICdtYXJrbycpKSkuVigpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaW5Ya25vd3NYX3doZXJlWG91dFhjcmVhdGVkWF9oYXNYbmFtZV9sb3BYWFhYX1ZfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5pbihcImtub3dzXCIpLndoZXJlKF9fLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSkpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaW4oXCJrbm93c1wiKS53aGVyZShfXy5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbihcImtub3dzXCIpLndoZXJlKF9fLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSkpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbihzdHJpbmcwKS53aGVyZShfXy5vdXQoc3RyaW5nMSkuaGFzKHN0cmluZzIsIHN0cmluZzMpKSkpLlYoKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSW4oXCJrbm93c1wiKS5XaGVyZShfXy5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikpKSkuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSW4oXCJrbm93c1wiKS5XaGVyZShncmVtbGluZ28uVF9fLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKSl9KSkuVigpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5pbihcImtub3dzXCIpLndoZXJlKF9fLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSkpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaW4oXCJrbm93c1wiKS53aGVyZShfXy5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpKS5jcmVhdGUoKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5pbl8oXCJrbm93c1wiKS53aGVyZShfXy5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpfSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaW5fKCdrbm93cycpLndoZXJlKF9fLm91dCgnY3JlYXRlZCcpLmhhcygnbmFtZScsICdsb3AnKSkpKS5WKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19pbl9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2hhc1huYW1lX2xvcFhYWFhfVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmluKCkud2hlcmUoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSkpKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaW4oKS53aGVyZShfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaW4oKS53aGVyZShfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmluKCkud2hlcmUoX18uaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMykpKSkuVigpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5JbigpLldoZXJlKF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikpKSkuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSW4oKS5XaGVyZShncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikpfSkpLlYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaW4oKS53aGVyZShfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSkpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5pbigpLndoZXJlKF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpKS5jcmVhdGUoKSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5pbl8oKS53aGVyZShfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKX0pKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmluXygpLndoZXJlKF9fLmhhcygnbmFtZScsICdtYXJrbycpLm91dCgnY3JlYXRlZCcpLmhhcygnbmFtZScsICdsb3AnKSkpKS5WKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19vclhib3RoX2hhc1huYW1lX21hcmtvWF9oYXNYbmFtZV9tYXJrb1hYWFhfVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLm9yKF9fLmJvdGgoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpKS5WKCkud2hlcmUoX18uYm90aEUoKS5jb3VudCgpLmlzKFAubmVxKDApKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18ub3IoX18uYm90aCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSkpLlYoKS53aGVyZShfXy5ib3RoRSgpLmNvdW50KCkuaXMoUC5uZXEoMCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18ub3IoX18uYm90aCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSkpLlYoKS53aGVyZShfXy5ib3RoRSgpLmNvdW50KCkuaXMoUC5uZXEoMCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLm9yKF9fLmJvdGgoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSksIF9fLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSkpKS5WKCkud2hlcmUoX18uYm90aEUoKS5jb3VudCgpLmlzKFAubmVxKG51bWJlcjApKSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLk9yKF9fLkJvdGgoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpKS5WKCkuV2hlcmUoX18uQm90aEUoKS5Db3VudCgpLklzKFAuTmVxKDApKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkJvdGgoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIiksIGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKX0pKS5WKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkNvdW50KCkuSXMoZ3JlbWxpbmdvLlAuTmVxKDApKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLm9yKF9fLmJvdGgoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIiksIF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkpKS5WKCkud2hlcmUoX18uYm90aEUoKS5jb3VudCgpLmlzKFAubmVxKDApKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18ub3IoX18uYm90aCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSkuY3JlYXRlKCkpLlYoKS53aGVyZShfXy5ib3RoRSgpLmNvdW50KCkuaXMoUC5uZXEoMCkpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18ub3IoX18uYm90aCgpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSwgX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKX0pKS5WKCkud2hlcmUoX18uYm90aEUoKS5jb3VudCgpLmlzKFAubmVxKDApKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLm9yXyhfXy5ib3RoKCkuaGFzKCduYW1lJywgJ21hcmtvJyksIF9fLmhhcygnbmFtZScsICdtYXJrbycpKSkpLlYoKS53aGVyZShfXy5ib3RoX2UoKS5jb3VudCgpLmlzXyhQLm5lcSgwKSkpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9FIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1ZYNFhfb3V0RSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuT3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuT3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLm91dF9lKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX2luRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5JbkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLkluRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLmluX2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX1ZYNFhfb3V0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkub3V0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9WWDRYX2luIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuVih2aWQ0KS5pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuSW4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLkluKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuaW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5pbl8oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLmluXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9ib3RoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkuYm90aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9ib3RoRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLmJvdGhfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpLCBlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nNSksIF9fLmhhcyhzdHJpbmc0LCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmc1KSkpKS5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQobnVtYmVyMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuTG9jYWw8b2JqZWN0PihfXy5Cb3RoRSgpLkxpbWl0PG9iamVjdD4oMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoX2UoKS5saW1pdCgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaENYWF9FWDExWF9ib3RoViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDExKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDExKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMSkuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKGVpZDExKS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDExKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5FKGVpZDExKS5ib3RoX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoQ1hYX0VYMTJYX2JvdGhWIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDEyKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDEyKS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkMTIpLkJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKGVpZDEyKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLkUoZWlkMTIpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhDWFhfRVg5WF9ib3RoViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkOSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLkUoZWlkOSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLkJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuRShlaWQ5KS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkOSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5FKGVpZDkpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGljZXNfaGFzWG5hbWVfd2l0aGluWHJpcHBsZV9qb3NoX21hcmtvWFhYX1ZfYXNYYVhfb3V0X2luX2FzWGJYX2RlZHVwWGFfYlhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwicmlwcGxlXCIsIFwiam9zaFwiLCBcIm1hcmtvXCIpKSkpLlYoKS5hcyhcImFcIikub3V0KCkuaW4oKS5hcyhcImJcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwicmlwcGxlXCIsIFwiam9zaFwiLCBcIm1hcmtvXCIpKSkpLlYoKS5hcyhcImFcIikub3V0KCkuaW4oKS5hcyhcImJcIikuZGVkdXAoXCJhXCIsIFwiYlwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcInJpcHBsZVwiLCBcImpvc2hcIiwgXCJtYXJrb1wiKSkpKS5WKCkuYXMoXCJhXCIpLm91dCgpLmluKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpKSkuVigpLmFzKHN0cmluZzQpLm91dCgpLmluKCkuYXMoc3RyaW5nNSkuZGVkdXAoc3RyaW5nNCwgc3RyaW5nNSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJyaXBwbGVcIiwgXCJqb3NoXCIsIFwibWFya29cIikpKSkuVigpLkFzKFwiYVwiKS5PdXQoKS5JbigpLkFzKFwiYlwiKS5EZWR1cChcImFcIiwgXCJiXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJyaXBwbGVcIiwgXCJqb3NoXCIsIFwibWFya29cIikpfSkpLlYoKS5BcyhcImFcIikuT3V0KCkuSW4oKS5BcyhcImJcIikuRGVkdXAoXCJhXCIsIFwiYlwiKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcInJpcHBsZVwiLCBcImpvc2hcIiwgXCJtYXJrb1wiKSkpKS5WKCkuYXMoXCJhXCIpLm91dCgpLmluKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcInJpcHBsZVwiLCBcImpvc2hcIiwgXCJtYXJrb1wiKSkpLmNyZWF0ZSgpKS5WKCkuYXMoXCJhXCIpLm91dCgpLmluKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJyaXBwbGVcIiwgXCJqb3NoXCIsIFwibWFya29cIikpfSkpLlYoKS5hcyhcImFcIikub3V0KCkuaW5fKCkuYXMoXCJiXCIpLmRlZHVwKFwiYVwiLCBcImJcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdyaXBwbGUnLCAnam9zaCcsICdtYXJrbycpKSkpLlYoKS5hc18oJ2EnKS5vdXQoKS5pbl8oKS5hc18oJ2InKS5kZWR1cCgnYScsICdiJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0ZXhQcm9wZXJ0aWVzX2hhc1hzdGFydFRpbWVfZ3RYMjAwNVhYWFhfVl9wcm9wZXJ0aWVzWGxvY2F0aW9uWF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6IF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkpLlYoKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSkpKS5WKCkucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkpLlYoKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSkpLlYoKS5wcm9wZXJ0aWVzKHN0cmluZzEpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5IYXMoXCJzdGFydFRpbWVcIiwgUC5HdCgyMDA1KSkpKS5WKCkuUHJvcGVydGllczxvYmplY3Q+KFwibG9jYXRpb25cIikuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0ZXhQcm9wZXJ0aWVzOiBncmVtbGluZ28uVF9fLkhhcyhcInN0YXJ0VGltZVwiLCBncmVtbGluZ28uUC5HdCgyMDA1KSl9KSkuVigpLlByb3BlcnRpZXMoXCJsb2NhdGlvblwiKS5WYWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSkpKS5WKCkucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRleFByb3BlcnRpZXMoX18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKS5jcmVhdGUoKSkuVigpLnByb3BlcnRpZXMoXCJsb2NhdGlvblwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSl9KSkuVigpLnByb3BlcnRpZXMoXCJsb2NhdGlvblwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4X3Byb3BlcnRpZXM9X18uaGFzKCdzdGFydFRpbWUnLCBQLmd0KDIwMDUpKSkpLlYoKS5wcm9wZXJ0aWVzKCdsb2NhdGlvbicpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0ZXhQcm9wZXJ0aWVzX2hhc1hzdGFydFRpbWVfZ3RYMjAwNVhYWFhfVl92YWx1ZXNYbG9jYXRpb25YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczogX18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkpLlYoKS52YWx1ZXMoXCJsb2NhdGlvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKHN0cmluZzAsIFAuZ3QobnVtYmVyMCkpKSkuVigpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6IF9fLkhhcyhcInN0YXJ0VGltZVwiLCBQLkd0KDIwMDUpKSkpLlYoKS5WYWx1ZXM8b2JqZWN0PihcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tWZXJ0ZXhQcm9wZXJ0aWVzOiBncmVtbGluZ28uVF9fLkhhcyhcInN0YXJ0VGltZVwiLCBncmVtbGluZ28uUC5HdCgyMDA1KSl9KSkuVigpLlZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSkpKS5WKCkudmFsdWVzKFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRleFByb3BlcnRpZXMoX18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKS5jcmVhdGUoKSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSl9KSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4X3Byb3BlcnRpZXM9X18uaGFzKCdzdGFydFRpbWUnLCBQLmd0KDIwMDUpKSkpLlYoKS52YWx1ZXMoJ2xvY2F0aW9uJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0ZXhQcm9wZXJ0aWVzX2hhc1hzdGFydFRpbWVfZ3RYMjAwNVhYWFhfVl9hc1hhWF9wcm9wZXJ0aWVzWGxvY2F0aW9uWF9hc1hiWF9zZWxlY3RYYVhfb3V0RV9wcm9wZXJ0aWVzX3NlbGVjdFhiWF92YWx1ZV9kZWR1cCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6IF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkpLlYoKS5hcyhcImFcIikucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KFwiYlwiKS52YWx1ZSgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKSkuVigpLmFzKFwiYVwiKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikub3V0RSgpLnByb3BlcnRpZXMoKS5zZWxlY3QoXCJiXCIpLnZhbHVlKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKSkuVigpLmFzKFwiYVwiKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikub3V0RSgpLnByb3BlcnRpZXMoKS5zZWxlY3QoXCJiXCIpLnZhbHVlKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSkpLlYoKS5hcyhzdHJpbmcxKS5wcm9wZXJ0aWVzKHN0cmluZzIpLmFzKHN0cmluZzMpLnNlbGVjdChzdHJpbmcxKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdChzdHJpbmczKS52YWx1ZSgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5IYXMoXCJzdGFydFRpbWVcIiwgUC5HdCgyMDA1KSkpKS5WKCkuQXMoXCJhXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImxvY2F0aW9uXCIpLkFzKFwiYlwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuT3V0RSgpLlByb3BlcnRpZXM8b2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KFwiYlwiKS5WYWx1ZTxvYmplY3Q+KCkuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGV4UHJvcGVydGllczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJzdGFydFRpbWVcIiwgZ3JlbWxpbmdvLlAuR3QoMjAwNSkpfSkpLlYoKS5BcyhcImFcIikuUHJvcGVydGllcyhcImxvY2F0aW9uXCIpLkFzKFwiYlwiKS5TZWxlY3QoXCJhXCIpLk91dEUoKS5Qcm9wZXJ0aWVzKCkuU2VsZWN0KFwiYlwiKS5WYWx1ZSgpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkpLlYoKS5hcyhcImFcIikucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KFwiYlwiKS52YWx1ZSgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRleFByb3BlcnRpZXMoX18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKS5jcmVhdGUoKSkuVigpLmFzKFwiYVwiKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikub3V0RSgpLnByb3BlcnRpZXMoKS5zZWxlY3QoXCJiXCIpLnZhbHVlKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7dmVydGV4UHJvcGVydGllczogX18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpfSkpLlYoKS5hcyhcImFcIikucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KFwiYlwiKS52YWx1ZSgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhfcHJvcGVydGllcz1fXy5oYXMoJ3N0YXJ0VGltZScsIFAuZ3QoMjAwNSkpKSkuVigpLmFzXygnYScpLnByb3BlcnRpZXMoJ2xvY2F0aW9uJykuYXNfKCdiJykuc2VsZWN0KCdhJykub3V0X2UoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KCdiJykudmFsdWUoKS5kZWR1cCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfYXNYYVhfdmFsdWVzWGxvY2F0aW9uWF9hc1hiWF9zZWxlY3RYYVhfb3V0RV9wcm9wZXJ0aWVzX3NlbGVjdFhiWF9kZWR1cCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6IF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkpLlYoKS5hcyhcImFcIikudmFsdWVzKFwibG9jYXRpb25cIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikub3V0RSgpLnByb3BlcnRpZXMoKS5zZWxlY3QoXCJiXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKSkuVigpLmFzKFwiYVwiKS52YWx1ZXMoXCJsb2NhdGlvblwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdChcImJcIikuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKSkuVigpLmFzKFwiYVwiKS52YWx1ZXMoXCJsb2NhdGlvblwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiKS5vdXRFKCkucHJvcGVydGllcygpLnNlbGVjdChcImJcIikuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhzdHJpbmcwLCBQLmd0KG51bWJlcjApKSkpLlYoKS5hcyhzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikuYXMoc3RyaW5nMykuc2VsZWN0KHN0cmluZzEpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KHN0cmluZzMpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5IYXMoXCJzdGFydFRpbWVcIiwgUC5HdCgyMDA1KSkpKS5WKCkuQXMoXCJhXCIpLlZhbHVlczxvYmplY3Q+KFwibG9jYXRpb25cIikuQXMoXCJiXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5PdXRFKCkuUHJvcGVydGllczxvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oXCJiXCIpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRleFByb3BlcnRpZXM6IGdyZW1saW5nby5UX18uSGFzKFwic3RhcnRUaW1lXCIsIGdyZW1saW5nby5QLkd0KDIwMDUpKX0pKS5WKCkuQXMoXCJhXCIpLlZhbHVlcyhcImxvY2F0aW9uXCIpLkFzKFwiYlwiKS5TZWxlY3QoXCJhXCIpLk91dEUoKS5Qcm9wZXJ0aWVzKCkuU2VsZWN0KFwiYlwiKS5EZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSkpKS5WKCkuYXMoXCJhXCIpLnZhbHVlcyhcImxvY2F0aW9uXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KFwiYlwiKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0ZXhQcm9wZXJ0aWVzKF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkuY3JlYXRlKCkpLlYoKS5hcyhcImFcIikudmFsdWVzKFwibG9jYXRpb25cIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikub3V0RSgpLnByb3BlcnRpZXMoKS5zZWxlY3QoXCJiXCIpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRleFByb3BlcnRpZXM6IF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKX0pKS5WKCkuYXMoXCJhXCIpLnZhbHVlcyhcImxvY2F0aW9uXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLm91dEUoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KFwiYlwiKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4X3Byb3BlcnRpZXM9X18uaGFzKCdzdGFydFRpbWUnLCBQLmd0KDIwMDUpKSkpLlYoKS5hc18oJ2EnKS52YWx1ZXMoJ2xvY2F0aW9uJykuYXNfKCdiJykuc2VsZWN0KCdhJykub3V0X2UoKS5wcm9wZXJ0aWVzKCkuc2VsZWN0KCdiJykuZGVkdXAoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHZlcnRpY2VzX2hhc1huYW1lX25lcVhzdGVwaGVuWFhfdmVydGV4UHJvcGVydGllc19oYXNYc3RhcnRUaW1lX2d0WDIwMDVYWFhYX1ZfcHJvcGVydGllc1hsb2NhdGlvblhfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSksdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC5uZXEoXCJzdGVwaGVuXCIpKSkpLlYoKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSksIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC5uZXEoXCJzdGVwaGVuXCIpKSkpLlYoKS5wcm9wZXJ0aWVzKFwibG9jYXRpb25cIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAubmVxKFwic3RlcGhlblwiKSkpKS5WKCkucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKSksIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcxLCBQLm5lcShzdHJpbmcyKSkpKS5WKCkucHJvcGVydGllcyhzdHJpbmczKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczogX18uSGFzKFwic3RhcnRUaW1lXCIsIFAuR3QoMjAwNSkpLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLk5lcShcInN0ZXBoZW5cIikpKSkuVigpLlByb3BlcnRpZXM8b2JqZWN0PihcImxvY2F0aW9uXCIpLlZhbHVlPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7VmVydGV4UHJvcGVydGllczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJzdGFydFRpbWVcIiwgZ3JlbWxpbmdvLlAuR3QoMjAwNSkpLCBWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLk5lcShcInN0ZXBoZW5cIikpfSkpLlYoKS5Qcm9wZXJ0aWVzKFwibG9jYXRpb25cIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAubmVxKFwic3RlcGhlblwiKSkpKS5WKCkucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLnZlcnRleFByb3BlcnRpZXMoX18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAubmVxKFwic3RlcGhlblwiKSkpLmNyZWF0ZSgpKS5WKCkucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe3ZlcnRleFByb3BlcnRpZXM6IF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSwgdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC5uZXEoXCJzdGVwaGVuXCIpKX0pKS5WKCkucHJvcGVydGllcyhcImxvY2F0aW9uXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhfcHJvcGVydGllcz1fXy5oYXMoJ3N0YXJ0VGltZScsIFAuZ3QoMjAwNSkpLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLm5lcSgnc3RlcGhlbicpKSkpLlYoKS5wcm9wZXJ0aWVzKCdsb2NhdGlvbicpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVh2ZXJ0aWNlc19oYXNYbmFtZV9uZXFYc3RlcGhlblhYX3ZlcnRleFByb3BlcnRpZXNfaGFzWHN0YXJ0VGltZV9ndFgyMDA1WFhYWF9WX3ZhbHVlc1hsb2NhdGlvblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSksdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC5uZXEoXCJzdGVwaGVuXCIpKSkpLlYoKS52YWx1ZXMoXCJsb2NhdGlvblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSksIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC5uZXEoXCJzdGVwaGVuXCIpKSkpLlYoKS52YWx1ZXMoXCJsb2NhdGlvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHZlcnRleFByb3BlcnRpZXM6X18uaGFzKFwic3RhcnRUaW1lXCIsIFAuZ3QoMjAwNSkpLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAubmVxKFwic3RlcGhlblwiKSkpKS5WKCkudmFsdWVzKFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczpfXy5oYXMoc3RyaW5nMCwgUC5ndChudW1iZXIwKSksIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcxLCBQLm5lcShzdHJpbmcyKSkpKS5WKCkudmFsdWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4UHJvcGVydGllczogX18uSGFzKFwic3RhcnRUaW1lXCIsIFAuR3QoMjAwNSkpLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLk5lcShcInN0ZXBoZW5cIikpKSkuVigpLlZhbHVlczxvYmplY3Q+KFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne1ZlcnRleFByb3BlcnRpZXM6IGdyZW1saW5nby5UX18uSGFzKFwic3RhcnRUaW1lXCIsIGdyZW1saW5nby5QLkd0KDIwMDUpKSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5OZXEoXCJzdGVwaGVuXCIpKX0pKS5WKCkuVmFsdWVzKFwibG9jYXRpb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh2ZXJ0ZXhQcm9wZXJ0aWVzOl9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLm5lcShcInN0ZXBoZW5cIikpKSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0ZXhQcm9wZXJ0aWVzKF9fLmhhcyhcInN0YXJ0VGltZVwiLCBQLmd0KDIwMDUpKSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLm5lcShcInN0ZXBoZW5cIikpKS5jcmVhdGUoKSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHt2ZXJ0ZXhQcm9wZXJ0aWVzOiBfXy5oYXMoXCJzdGFydFRpbWVcIiwgUC5ndCgyMDA1KSksIHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAubmVxKFwic3RlcGhlblwiKSl9KSkuVigpLnZhbHVlcyhcImxvY2F0aW9uXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kodmVydGV4X3Byb3BlcnRpZXM9X18uaGFzKCdzdGFydFRpbWUnLCBQLmd0KDIwMDUpKSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC5uZXEoJ3N0ZXBoZW4nKSkpKS5WKCkudmFsdWVzKCdsb2NhdGlvbicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYZWRnZXNfaGFzTGFiZWxYdXNlc1hfaGFzWHNraWxsXzVYWFhfVl9vdXRFX3ZhbHVlTWFwX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5oYXNMYWJlbChcInVzZXNcIikuaGFzKFwic2tpbGxcIiwgNSkpKS5WKCkub3V0RSgpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5oYXNMYWJlbChcInVzZXNcIikuaGFzKFwic2tpbGxcIiwgNSkpKS5WKCkub3V0RSgpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18uaGFzTGFiZWwoXCJ1c2VzXCIpLmhhcyhcInNraWxsXCIsIDUpKSkuVigpLm91dEUoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgbnVtYmVyMCkpKS5WKCkub3V0RSgpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6IF9fLkhhc0xhYmVsKFwidXNlc1wiKS5IYXMoXCJza2lsbFwiLCA1KSkpLlYoKS5PdXRFKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7RWRnZXM6IGdyZW1saW5nby5UX18uSGFzTGFiZWwoXCJ1c2VzXCIpLkhhcyhcInNraWxsXCIsIDUpfSkpLlYoKS5PdXRFKCkuVmFsdWVNYXAoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM6X18uaGFzTGFiZWwoXCJ1c2VzXCIpLmhhcyhcInNraWxsXCIsIDUpKSkuVigpLm91dEUoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuZWRnZXMoX18uaGFzTGFiZWwoXCJ1c2VzXCIpLmhhcyhcInNraWxsXCIsIDUpKS5jcmVhdGUoKSkuVigpLm91dEUoKS52YWx1ZU1hcCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLmhhc0xhYmVsKFwidXNlc1wiKS5oYXMoXCJza2lsbFwiLCA1KX0pKS5WKCkub3V0RSgpLnZhbHVlTWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18uaGFzX2xhYmVsKCd1c2VzJykuaGFzKCdza2lsbCcsIDUpKSkuVigpLm91dF9lKCkudmFsdWVfbWFwKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpib29sZWFuMCwgdmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5jaGVja0FkamFjZW50VmVydGljZXMoZmFsc2UpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPUZhbHNlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpib29sZWFuMCwgdmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5jaGVja0FkamFjZW50VmVydGljZXMoZmFsc2UpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPUZhbHNlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYY2hlY2tBZGphY2VudFZlcnRpY2VzX3N1YmdyYXBoRFhYX0UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IHRydWUsdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczp0cnVlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczp0cnVlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6Ym9vbGVhbjAsIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczogdHJ1ZSwgdmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlLCBWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczp0cnVlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkuY2hlY2tBZGphY2VudFZlcnRpY2VzKHRydWUpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IHRydWUsIHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tfYWRqYWNlbnRfdmVydGljZXM9VHJ1ZSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1ZYNFhfb3V0RSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpib29sZWFuMCwgdmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIFZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5PdXRFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPUZhbHNlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQ0KS5vdXRfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9pbkUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6Ym9vbGVhbjAsIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5JbkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLkluRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShjaGVja19hZGphY2VudF92ZXJ0aWNlcz1GYWxzZSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkuaW5fZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9vdXQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6Ym9vbGVhbjAsIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShjaGVja19hZGphY2VudF92ZXJ0aWNlcz1GYWxzZSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkub3V0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9WWDRYX2luIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSx2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuaW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuaW4oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmJvb2xlYW4wLCB2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpLCBlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nNSksIF9fLmhhcyhzdHJpbmc0LCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmc1KSkpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5JbigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tDaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCBWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuSW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5pbl8oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPUZhbHNlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQ0KS5pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WHN1YmdyYXBoRFhYX1ZYNFhfYm90aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpib29sZWFuMCwgdmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIFZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPUZhbHNlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuVih2aWQ0KS5ib3RoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYU3ViZ3JhcGhTdHJhdGVneVhzdWJncmFwaERYWF9WWDRYX2JvdGhFIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSx2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmJvb2xlYW4wLCB2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpLCBlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nNSksIF9fLmhhcyhzdHJpbmc0LCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmc1KSkpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneShncmVtbGluZ28uU3ViZ3JhcGhTdHJhdGVneUNvbmZpZ3tDaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCBWZXJ0aWNlczogZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBFZGdlczogZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koe2NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tfYWRqYWNlbnRfdmVydGljZXM9RmFsc2UsIHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5WKHZpZDQpLmJvdGhfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfVlg0WF9sb2NhbFhib3RoRV9saW1pdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5sb2NhbChfXy5ib3RoRSgpLmxpbWl0KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6Ym9vbGVhbjAsIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdChudW1iZXIyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuVih2aWQ0KS5Mb2NhbDxvYmplY3Q+KF9fLkJvdGhFKCkuTGltaXQ8b2JqZWN0PigxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0NoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsIFZlcnRpY2VzOiBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIEVkZ2VzOiBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSl9KSkuVih2aWQ0KS5Mb2NhbChncmVtbGluZ28uVF9fLkJvdGhFKCkuTGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5WKHZpZDQpLmxvY2FsKF9fLmJvdGhFKCkubGltaXQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLlYodmlkNCkubG9jYWwoX18uYm90aEUoKS5saW1pdCgxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShjaGVja19hZGphY2VudF92ZXJ0aWNlcz1GYWxzZSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLlYodmlkNCkubG9jYWwoX18uYm90aF9lKCkubGltaXQoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfRVgxMVhfYm90aFYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6Ym9vbGVhbjAsIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMSkuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKGVpZDExKS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5FKGVpZDExKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkMTEpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShjaGVja19hZGphY2VudF92ZXJ0aWNlcz1GYWxzZSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLkUoZWlkMTEpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfRVgxMlhfYm90aFYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6Ym9vbGVhbjAsIHZlcnRpY2VzOl9fLmhhcyhzdHJpbmcwLCBQLndpdGhpbihzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5oYXNMYWJlbChzdHJpbmc1KSwgX18uaGFzKHN0cmluZzQsIG51bWJlcjEpLmhhc0xhYmVsKHN0cmluZzUpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uSGFzKFwibmFtZVwiLCBQLldpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18uT3IoX18uSGFzKFwid2VpZ2h0XCIsIDAuNCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5IYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQxMikuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKGVpZDEyKS5Cb3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmZhbHNlLCB2ZXJ0aWNlczpfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOl9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyhmYWxzZSkudmVydGljZXMoX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpKS5lZGdlcyhfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpLmNyZWF0ZSgpKS5FKGVpZDEyKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkMTIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneShjaGVja19hZGphY2VudF92ZXJ0aWNlcz1GYWxzZSwgdmVydGljZXM9X18uaGFzKCduYW1lJywgUC53aXRoaW4oJ2pvc2gnLCAnbG9wJywgJ3JpcHBsZScpKSwgZWRnZXM9X18ub3JfKF9fLmhhcygnd2VpZ2h0JywgMC40KS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSwgX18uaGFzKCd3ZWlnaHQnLCAxLjApLmhhc19sYWJlbCgnY3JlYXRlZCcpKSkpLkUoZWlkMTIpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYc3ViZ3JhcGhEWFhfRVg5WF9ib3RoViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczogZmFsc2UsdmVydGljZXM6IF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSxlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpmYWxzZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpib29sZWFuMCwgdmVydGljZXM6X18uaGFzKHN0cmluZzAsIFAud2l0aGluKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKSwgZWRnZXM6X18ub3IoX18uaGFzKHN0cmluZzQsIG51bWJlcjApLmhhc0xhYmVsKHN0cmluZzUpLCBfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMSkuaGFzTGFiZWwoc3RyaW5nNSkpKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgdmVydGljZXM6IF9fLkhhcyhcIm5hbWVcIiwgUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6IF9fLk9yKF9fLkhhcyhcIndlaWdodFwiLCAwLjQpLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkpLkUoZWlkOSkuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3koZ3JlbWxpbmdvLlN1YmdyYXBoU3RyYXRlZ3lDb25maWd7Q2hlY2tBZGphY2VudFZlcnRpY2VzOiBmYWxzZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKGVpZDkpLkJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6ZmFsc2UsIHZlcnRpY2VzOl9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgZWRnZXM6X18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5jaGVja0FkamFjZW50VmVydGljZXMoZmFsc2UpLnZlcnRpY2VzKF9fLmhhcyhcIm5hbWVcIiwgUC53aXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSkuZWRnZXMoX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKS5jcmVhdGUoKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KHtjaGVja0FkamFjZW50VmVydGljZXM6IGZhbHNlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkOSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPUZhbHNlLCB2ZXJ0aWNlcz1fXy5oYXMoJ25hbWUnLCBQLndpdGhpbignam9zaCcsICdsb3AnLCAncmlwcGxlJykpLCBlZGdlcz1fXy5vcl8oX18uaGFzKCd3ZWlnaHQnLCAwLjQpLmhhc19sYWJlbCgnY3JlYXRlZCcpLCBfXy5oYXMoJ3dlaWdodCcsIDEuMCkuaGFzX2xhYmVsKCdjcmVhdGVkJykpKSkuRShlaWQ5KS5ib3RoX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hTdWJncmFwaFN0cmF0ZWd5WGNoZWNrQWRqYWNlbnRWZXJ0aWNlc19zdWJncmFwaERYWF9FWDlYX2JvdGhWIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlLHZlcnRpY2VzOiBfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksZWRnZXM6IF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSxfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpKSkuRShlaWQ5KS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6dHJ1ZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6dHJ1ZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFN1YmdyYXBoU3RyYXRlZ3koY2hlY2tBZGphY2VudFZlcnRpY2VzOmJvb2xlYW4wLCB2ZXJ0aWNlczpfXy5oYXMoc3RyaW5nMCwgUC53aXRoaW4oc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykpLCBlZGdlczpfXy5vcihfXy5oYXMoc3RyaW5nNCwgbnVtYmVyMCkuaGFzTGFiZWwoc3RyaW5nNSksIF9fLmhhcyhzdHJpbmc0LCBudW1iZXIxKS5oYXNMYWJlbChzdHJpbmc1KSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6IHRydWUsIHZlcnRpY2VzOiBfXy5IYXMoXCJuYW1lXCIsIFAuV2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSksIGVkZ2VzOiBfXy5PcihfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLkhhcyhcIndlaWdodFwiLCAxLjApLkhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLkJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0NoZWNrQWRqYWNlbnRWZXJ0aWNlczogdHJ1ZSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJqb3NoXCIsIFwibG9wXCIsIFwicmlwcGxlXCIpKSwgRWRnZXM6IGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5IYXNMYWJlbChcImNyZWF0ZWRcIiksIGdyZW1saW5nby5UX18uSGFzKFwid2VpZ2h0XCIsIDEuMCkuSGFzTGFiZWwoXCJjcmVhdGVkXCIpKX0pKS5FKGVpZDkpLkJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShjaGVja0FkamFjZW50VmVydGljZXM6dHJ1ZSwgdmVydGljZXM6X18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczpfXy5vcihfXy5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5oYXNMYWJlbChcImNyZWF0ZWRcIiksIF9fLmhhcyhcIndlaWdodFwiLCAxLjApLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSkpKS5FKGVpZDkpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoU3ViZ3JhcGhTdHJhdGVneS5idWlsZCgpLmNoZWNrQWRqYWNlbnRWZXJ0aWNlcyh0cnVlKS52ZXJ0aWNlcyhfXy5oYXMoXCJuYW1lXCIsIFAud2l0aGluKFwiam9zaFwiLCBcImxvcFwiLCBcInJpcHBsZVwiKSkpLmVkZ2VzKF9fLm9yKF9fLmhhcyhcIndlaWdodFwiLCAwLjQpLmhhc0xhYmVsKFwiY3JlYXRlZFwiKSwgX18uaGFzKFwid2VpZ2h0XCIsIDEuMCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpKSkuY3JlYXRlKCkpLkUoZWlkOSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7Y2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlLCB2ZXJ0aWNlczogX18uaGFzKFwibmFtZVwiLCBQLndpdGhpbihcImpvc2hcIiwgXCJsb3BcIiwgXCJyaXBwbGVcIikpLCBlZGdlczogX18ub3IoX18uaGFzKFwid2VpZ2h0XCIsIDAuNCkuaGFzTGFiZWwoXCJjcmVhdGVkXCIpLCBfXy5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5oYXNMYWJlbChcImNyZWF0ZWRcIikpfSkpLkUoZWlkOSkuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5KGNoZWNrX2FkamFjZW50X3ZlcnRpY2VzPVRydWUsIHZlcnRpY2VzPV9fLmhhcygnbmFtZScsIFAud2l0aGluKCdqb3NoJywgJ2xvcCcsICdyaXBwbGUnKSksIGVkZ2VzPV9fLm9yXyhfXy5oYXMoJ3dlaWdodCcsIDAuNCkuaGFzX2xhYmVsKCdjcmVhdGVkJyksIF9fLmhhcygnd2VpZ2h0JywgMS4wKS5oYXNfbGFiZWwoJ2NyZWF0ZWQnKSkpKS5FKGVpZDkpLmJvdGhfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFN1YmdyYXBoU3RyYXRlZ3lYdXNlTWFwU3RlcHNJbkZpbHRlclhfRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5sYWJlbCgpLmlzKFAuZXEoXCJjcmVhdGVkXCIpKSx2ZXJ0aWNlczogX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLndpdGhpbihcImxvcFwiLFwiam9zaFwiKSksY2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneShlZGdlczpfXy5sYWJlbCgpLmlzKFAuZXEoXCJjcmVhdGVkXCIpKSwgdmVydGljZXM6X18udmFsdWVzKFwibmFtZVwiKS5pcyhQLndpdGhpbihcImxvcFwiLCBcImpvc2hcIikpLCBjaGVja0FkamFjZW50VmVydGljZXM6dHJ1ZSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLmxhYmVsKCkuaXMoUC5lcShcImNyZWF0ZWRcIikpLCB2ZXJ0aWNlczpfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFAud2l0aGluKFwibG9wXCIsIFwiam9zaFwiKSksIGNoZWNrQWRqYWNlbnRWZXJ0aWNlczp0cnVlKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLmxhYmVsKCkuaXMoUC5lcShzdHJpbmcwKSksIHZlcnRpY2VzOl9fLnZhbHVlcyhzdHJpbmcxKS5pcyhQLndpdGhpbihzdHJpbmcyLCBzdHJpbmczKSksIGNoZWNrQWRqYWNlbnRWZXJ0aWNlczpib29sZWFuMCkpLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOiBfXy5MYWJlbCgpLklzKFAuRXEoXCJjcmVhdGVkXCIpKSwgdmVydGljZXM6IF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5JcyhQLldpdGhpbihcImxvcFwiLCBcImpvc2hcIikpLCBjaGVja0FkamFjZW50VmVydGljZXM6IHRydWUpKS5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5KGdyZW1saW5nby5TdWJncmFwaFN0cmF0ZWd5Q29uZmlne0VkZ2VzOiBncmVtbGluZ28uVF9fLkxhYmVsKCkuSXMoZ3JlbWxpbmdvLlAuRXEoXCJjcmVhdGVkXCIpKSwgVmVydGljZXM6IGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5JcyhncmVtbGluZ28uUC5XaXRoaW4oXCJsb3BcIiwgXCJqb3NoXCIpKSwgQ2hlY2tBZGphY2VudFZlcnRpY2VzOiB0cnVlfSkpLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBTdWJncmFwaFN0cmF0ZWd5KGVkZ2VzOl9fLmxhYmVsKCkuaXMoUC5lcShcImNyZWF0ZWRcIikpLCB2ZXJ0aWNlczpfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFAud2l0aGluKFwibG9wXCIsIFwiam9zaFwiKSksIGNoZWNrQWRqYWNlbnRWZXJ0aWNlczp0cnVlKSkuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS5lZGdlcyhfXy5sYWJlbCgpLmlzKFAuZXEoXCJjcmVhdGVkXCIpKSkudmVydGljZXMoX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLndpdGhpbihcImxvcFwiLCBcImpvc2hcIikpKS5jaGVja0FkamFjZW50VmVydGljZXModHJ1ZSkuY3JlYXRlKCkpLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgU3ViZ3JhcGhTdHJhdGVneSh7ZWRnZXM6IF9fLmxhYmVsKCkuaXMoUC5lcShcImNyZWF0ZWRcIikpLCB2ZXJ0aWNlczogX18udmFsdWVzKFwibmFtZVwiKS5pcyhQLndpdGhpbihcImxvcFwiLCBcImpvc2hcIikpLCBjaGVja0FkamFjZW50VmVydGljZXM6IHRydWV9KSkuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFN1YmdyYXBoU3RyYXRlZ3koZWRnZXM9X18ubGFiZWwoKS5pc18oUC5lcSgnY3JlYXRlZCcpKSwgdmVydGljZXM9X18udmFsdWVzKCduYW1lJykuaXNfKFAud2l0aGluKCdsb3AnLCAnam9zaCcpKSwgY2hlY2tfYWRqYWNlbnRfdmVydGljZXM9VHJ1ZSkpLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneVhfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kpLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSkud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSkud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kpLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCkpLldpdGhvdXRTdHJhdGVnaWVzKHR5cGVvZihWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpKS5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5WZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSgpKS5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KS53aXRob3V0U3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneS5pbnN0YW5jZSgpKS53aXRob3V0U3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuY2xhc3MpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3koKSkud2l0aG91dF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5X1ZlcnRleFByb2dyYW1TdHJhdGVneVhfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LCBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3ksIFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3ksIFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LCBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSgpLCBuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCksIGdyZW1saW5nby5WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3ksIFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5Lmluc3RhbmNlKCksIFZlcnRleFByb2dyYW1TdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCksIG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCksIFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3lYX1YiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSkud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KS53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KS53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSkud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kpKS5XaXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aG91dFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KCkpLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5WZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVJlc3RyaWN0aW9uU3RyYXRlZ3kpLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5LmNsYXNzKS53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1SZXN0cmljdGlvblN0cmF0ZWd5KS53aXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhvdXRfc3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtUmVzdHJpY3Rpb25TdHJhdGVneSkud2l0aF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kpLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koKSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSgpKS5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aG91dFN0cmF0ZWdpZXNYVmVydGV4UHJvZ3JhbVN0cmF0ZWd5WF9WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aG91dFN0cmF0ZWdpZXMoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KS5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KSkuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRob3V0U3RyYXRlZ2llcyhncmVtbGluZ28uVmVydGV4UHJvZ3JhbVN0cmF0ZWd5KCkpLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneS5jbGFzcykuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKFZlcnRleFByb2dyYW1TdHJhdGVneSkuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFkZEUoXCJjcmVhdGVkQnlcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFkZEUoXCJjcmVhdGVkQnlcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hZGRFKHN0cmluZzIpLnRvKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZEJ5XCIpLlRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BZGRFKFwiY3JlYXRlZEJ5XCIpLlRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYWRkRShcImNyZWF0ZWRCeVwiKS50byhcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFkZEUoXCJjcmVhdGVkQnlcIikudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hZGRfZSgnY3JlYXRlZEJ5JykudG8oJ2EnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSW5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuSW5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5pbkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuaW5fZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfb3V0WGNyZWF0ZWRYX2FkZEVYY3JlYXRlZEJ5WF90b1hhWF9wcm9wZXJ0eVh3ZWlnaHRfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYWRkRShcImNyZWF0ZWRCeVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYWRkRShzdHJpbmcyKS50byhzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmczLCBkb3VibGUwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRCeVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQWRkRShcImNyZWF0ZWRCeVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYWRkRShcImNyZWF0ZWRCeVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFkZEUoXCJjcmVhdGVkQnlcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFkZF9lKCdjcmVhdGVkQnknKS50bygnYScpLnByb3BlcnR5KCd3ZWlnaHQnLCAyLjApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5ib3RoX2UoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5pbkUoKS5oYXMoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuaW5FKCkuaGFzKFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5pbkUoKS5oYXMoXCJ3ZWlnaHRcIiwgMi4wZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5pbkUoKS5oYXMoc3RyaW5nMCwgZG91YmxlMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkluRSgpLkhhcyhcIndlaWdodFwiLCAyLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5JbkUoKS5IYXMoXCJ3ZWlnaHRcIiwgMi4wKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaW5FKCkuaGFzKFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaW5FKCkuaGFzKFwid2VpZ2h0XCIsIDIuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuaW5FKCkuaGFzKFwid2VpZ2h0XCIsIDIuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmluX2UoKS5oYXMoJ3dlaWdodCcsIDIuMCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRFX3Byb3BlcnR5WHdlaWdodF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0RSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dEUoKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RSgpLnByb3BlcnR5KHN0cmluZzAsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dEUoKS5Qcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5Qcm9wZXJ0eShcIndlaWdodFwiLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0RSgpLnByb3BlcnR5KFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKCkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS5wcm9wZXJ0eSgnd2VpZ2h0JywgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PihcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5wcm9wZXJ0aWVzKCd3ZWlnaHQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVh4WF9hc1hhWF9zZWxlY3RYeFhfdW5mb2xkX2FkZEVYZXhpc3RzV2l0aFhfdG9YYVhfcHJvcGVydHlYdGltZV9ub3dYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJ4XCIpLnVuZm9sZCgpLmFkZEUoXCJleGlzdHNXaXRoXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJ4XCIpLnVuZm9sZCgpLmFkZEUoXCJleGlzdHNXaXRoXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5hcyhcImFcIikuc2VsZWN0KFwieFwiKS51bmZvbGQoKS5hZGRFKFwiZXhpc3RzV2l0aFwiKS50byhcImFcIikucHJvcGVydHkoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYXMoc3RyaW5nMSkuc2VsZWN0KHN0cmluZzApLnVuZm9sZCgpLmFkZEUoc3RyaW5nMikudG8oc3RyaW5nMSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwieFwiKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oXCJ4XCIpLlVuZm9sZDxvYmplY3Q+KCkuQWRkRSgoc3RyaW5nKSBcImV4aXN0c1dpdGhcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcInhcIikuQXMoXCJhXCIpLlNlbGVjdChcInhcIikuVW5mb2xkKCkuQWRkRShcImV4aXN0c1dpdGhcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJ4XCIpLnVuZm9sZCgpLmFkZEUoXCJleGlzdHNXaXRoXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYXMoXCJhXCIpLnNlbGVjdChcInhcIikudW5mb2xkKCkuYWRkRShcImV4aXN0c1dpdGhcIikudG8oXCJhXCIpLnByb3BlcnR5KFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5hcyhcImFcIikuc2VsZWN0KFwieFwiKS51bmZvbGQoKS5hZGRFKFwiZXhpc3RzV2l0aFwiKS50byhcImFcIikucHJvcGVydHkoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgneCcpLmFzXygnYScpLnNlbGVjdCgneCcpLnVuZm9sZCgpLmFkZF9lKCdleGlzdHNXaXRoJykudG8oJ2EnKS5wcm9wZXJ0eSgndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5JbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuaW5fZSgnZXhpc3RzV2l0aCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdleGlzdHNXaXRoJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIixcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmJvdGhFKFwiZXhpc3RzV2l0aFwiKS5oYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmJvdGhfZSgnZXhpc3RzV2l0aCcpLmhhcygndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQyKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5JbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLmluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikuaW5fZSgnZXhpc3RzV2l0aCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDIpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQyKS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDIpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikub3V0RShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLm91dF9lKCdleGlzdHNXaXRoJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIixcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLmJvdGhFKFwiZXhpc3RzV2l0aFwiKS5oYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLmJvdGhfZSgnZXhpc3RzV2l0aCcpLmhhcygndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMykuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMykuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5JbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLkluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLmluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykuaW5fZSgnZXhpc3RzV2l0aCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDMpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDMpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDMpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykub3V0RShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDMpLm91dF9lKCdleGlzdHNXaXRoJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMykuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIixcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMykuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDMpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDMpLmJvdGhFKFwiZXhpc3RzV2l0aFwiKS5oYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDMpLmJvdGhfZSgnZXhpc3RzV2l0aCcpLmhhcygndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5JbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuaW5fZSgnZXhpc3RzV2l0aCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDQpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDQpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkub3V0RShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLm91dF9lKCdleGlzdHNXaXRoJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIixcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDQpLmJvdGhFKFwiZXhpc3RzV2l0aFwiKS5oYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmJvdGhfZSgnZXhpc3RzV2l0aCcpLmhhcygndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDUpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ1KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDUpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNSkuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ1KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNSkuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ1KS5JbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLkluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDUpLmluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ1KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkuaW5fZSgnZXhpc3RzV2l0aCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDUpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDUpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkub3V0RShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLm91dF9lKCdleGlzdHNXaXRoJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNSkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIixcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ1KS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNSkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLmJvdGhFKFwiZXhpc3RzV2l0aFwiKS5oYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLmJvdGhfZSgnZXhpc3RzV2l0aCcpLmhhcygndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ2KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ2KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5JbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLkluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLmluRShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5pbkUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikuaW5FKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikuaW5fZSgnZXhpc3RzV2l0aCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ2KS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDYpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLk91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ2KS5vdXRFKFwiZXhpc3RzV2l0aFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLm91dEUoXCJleGlzdHNXaXRoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikub3V0RShcImV4aXN0c1dpdGhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDYpLm91dF9lKCdleGlzdHNXaXRoJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIixcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ2KS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNikuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLkJvdGhFKFwiZXhpc3RzV2l0aFwiKS5IYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ2KS5ib3RoRShcImV4aXN0c1dpdGhcIikuaGFzKFwidGltZVwiLCBcIm5vd1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLmJvdGhFKFwiZXhpc3RzV2l0aFwiKS5oYXMoXCJ0aW1lXCIsIFwibm93XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikuYm90aEUoXCJleGlzdHNXaXRoXCIpLmhhcyhcInRpbWVcIiwgXCJub3dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDYpLmJvdGhfZSgnZXhpc3RzV2l0aCcpLmhhcygndGltZScsICdub3cnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dFhjcmVhdGVkWF9pblhjcmVhdGVkWF93aGVyZVhuZXFYYVhYX2FzWGJYX2FkZEVYY29kZXZlbG9wZXJYX2Zyb21YYVhfdG9YYlhfcHJvcGVydHlYeWVhcl8yMDA5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLndoZXJlKFAubmVxKFwiYVwiKSkuYXMoXCJiXCIpLmFkZEUoXCJjb2RldmVsb3BlclwiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpLndoZXJlKFAubmVxKFwiYVwiKSkuYXMoXCJiXCIpLmFkZEUoXCJjb2RldmVsb3BlclwiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLm5lcShcImFcIikpLmFzKFwiYlwiKS5hZGRFKFwiY29kZXZlbG9wZXJcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmluKHN0cmluZzEpLndoZXJlKFAubmVxKHN0cmluZzApKS5hcyhzdHJpbmcyKS5hZGRFKHN0cmluZzMpLmZyb20oc3RyaW5nMCkudG8oc3RyaW5nMikucHJvcGVydHkoc3RyaW5nNCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLldoZXJlKFAuTmVxKFwiYVwiKSkuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJjb2RldmVsb3BlclwiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSW4oXCJjcmVhdGVkXCIpLldoZXJlKGdyZW1saW5nby5QLk5lcShcImFcIikpLkFzKFwiYlwiKS5BZGRFKFwiY29kZXZlbG9wZXJcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikud2hlcmUoUC5uZXEoXCJhXCIpKS5hcyhcImJcIikuYWRkRShcImNvZGV2ZWxvcGVyXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmluKFwiY3JlYXRlZFwiKS53aGVyZShQLm5lcShcImFcIikpLmFzKFwiYlwiKS5hZGRFKFwiY29kZXZlbG9wZXJcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaW5fKFwiY3JlYXRlZFwiKS53aGVyZShQLm5lcShcImFcIikpLmFzKFwiYlwiKS5hZGRFKFwiY29kZXZlbG9wZXJcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCdjcmVhdGVkJykuaW5fKCdjcmVhdGVkJykud2hlcmUoUC5uZXEoJ2EnKSkuYXNfKCdiJykuYWRkX2UoJ2NvZGV2ZWxvcGVyJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCd5ZWFyJywgMjAwOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmJvdGhfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5pbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmluRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuSW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5pbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuaW5fZSgnY29kZXZlbG9wZXInKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXRFKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdjb2RldmVsb3BlcicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLDIwMDkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYm90aEUoXCJjb2RldmVsb3BlclwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYm90aEUoc3RyaW5nMCkuaGFzKHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5Cb3RoRShcImNvZGV2ZWxvcGVyXCIpLkhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQm90aEUoXCJjb2RldmVsb3BlclwiKS5IYXMoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmJvdGhfZSgnY29kZXZlbG9wZXInKS5oYXMoJ3llYXInLCAyMDA5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmJvdGhfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5pbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDQpLmluRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuSW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuSW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkuaW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5pbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuaW5fZSgnY29kZXZlbG9wZXInKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkub3V0RShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5vdXRFKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5PdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuT3V0RShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLm91dF9lKCdjb2RldmVsb3BlcicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLDIwMDkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkuYm90aEUoXCJjb2RldmVsb3BlclwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuYm90aEUoc3RyaW5nMCkuaGFzKHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRShcImNvZGV2ZWxvcGVyXCIpLkhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuQm90aEUoXCJjb2RldmVsb3BlclwiKS5IYXMoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmJvdGhfZSgnY29kZXZlbG9wZXInKS5oYXMoJ3llYXInLCAyMDA5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuaW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNikuaW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5JbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ2KS5JbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNikuaW5FKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5pbkUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLmluRShcImNvZGV2ZWxvcGVyXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ2KS5pbl9lKCdjb2RldmVsb3BlcicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ2KS5vdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDYpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLk91dEUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ2KS5PdXRFKFwiY29kZXZlbG9wZXJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLm91dEUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLm91dEUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLm91dEUoXCJjb2RldmVsb3BlclwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikub3V0X2UoJ2NvZGV2ZWxvcGVyJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuYm90aEUoXCJjb2RldmVsb3BlclwiKS5oYXMoXCJ5ZWFyXCIsMjAwOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNikuYm90aEUoXCJjb2RldmVsb3BlclwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ2KS5ib3RoRShcImNvZGV2ZWxvcGVyXCIpLmhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLkJvdGhFKFwiY29kZXZlbG9wZXJcIikuSGFzKFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ2KS5Cb3RoRShcImNvZGV2ZWxvcGVyXCIpLkhhcyhcInllYXJcIiwgMjAwOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLmJvdGhFKFwiY29kZXZlbG9wZXJcIikuaGFzKFwieWVhclwiLCAyMDA5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikuYm90aF9lKCdjb2RldmVsb3BlcicpLmhhcygneWVhcicsIDIwMDkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfaW5YY3JlYXRlZFhfYWRkRVhjcmVhdGVkQnlYX2Zyb21YYVhfcHJvcGVydHlYeWVhcl8yMDA5WF9wcm9wZXJ0eVhhY2xfcHVibGljWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmluKFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLmZyb20oXCJhXCIpLnByb3BlcnR5KFwieWVhclwiLCAyMDA5KS5wcm9wZXJ0eShcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5pbihcImNyZWF0ZWRcIikuYWRkRShcImNyZWF0ZWRCeVwiKS5mcm9tKFwiYVwiKS5wcm9wZXJ0eShcInllYXJcIiwgMjAwOSkucHJvcGVydHkoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmluKFwiY3JlYXRlZFwiKS5hZGRFKFwiY3JlYXRlZEJ5XCIpLmZyb20oXCJhXCIpLnByb3BlcnR5KFwieWVhclwiLCAyMDA5KS5wcm9wZXJ0eShcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkuaW4oc3RyaW5nMSkuYWRkRShzdHJpbmcyKS5mcm9tKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KHN0cmluZzQsIHN0cmluZzUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5JbihcImNyZWF0ZWRcIikuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRCeVwiKS5Gcm9tKFwiYVwiKS5Qcm9wZXJ0eShcInllYXJcIiwgMjAwOSkuUHJvcGVydHkoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuSW4oXCJjcmVhdGVkXCIpLkFkZEUoXCJjcmVhdGVkQnlcIikuRnJvbShcImFcIikuUHJvcGVydHkoXCJ5ZWFyXCIsIDIwMDkpLlByb3BlcnR5KFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5pbihcImNyZWF0ZWRcIikuYWRkRShcImNyZWF0ZWRCeVwiKS5mcm9tKFwiYVwiKS5wcm9wZXJ0eShcInllYXJcIiwgMjAwOSkucHJvcGVydHkoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5pbihcImNyZWF0ZWRcIikuYWRkRShcImNyZWF0ZWRCeVwiKS5mcm9tKFwiYVwiKS5wcm9wZXJ0eShcInllYXJcIiwgMjAwOSkucHJvcGVydHkoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5pbl8oXCJjcmVhdGVkXCIpLmFkZEUoXCJjcmVhdGVkQnlcIikuZnJvbV8oXCJhXCIpLnByb3BlcnR5KFwieWVhclwiLCAyMDA5KS5wcm9wZXJ0eShcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5pbl8oJ2NyZWF0ZWQnKS5hZGRfZSgnY3JlYXRlZEJ5JykuZnJvbV8oJ2EnKS5wcm9wZXJ0eSgneWVhcicsIDIwMDkpLnByb3BlcnR5KCdhY2wnLCAncHVibGljJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmJvdGhfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmluRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5pbl9lKCdjcmVhdGVkQnknKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXRFKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoJ2NyZWF0ZWRCeScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYm90aEUoc3RyaW5nMCkuaGFzKHN0cmluZzEsIG51bWJlcjApLmhhcyhzdHJpbmcyLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQm90aEUoXCJjcmVhdGVkQnlcIikuSGFzKFwieWVhclwiLCAyMDA5KS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQm90aEUoXCJjcmVhdGVkQnlcIikuSGFzKFwieWVhclwiLCAyMDA5KS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuYm90aF9lKCdjcmVhdGVkQnknKS5oYXMoJ3llYXInLCAyMDA5KS5oYXMoJ2FjbCcsICdwdWJsaWMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMykuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQzKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMykuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMykuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQzKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQzKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDMpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDMpLmJvdGhfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQzKS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDMpLmluRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMykuSW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLkluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMykuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQzKS5pbl9lKCdjcmVhdGVkQnknKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5vdXRFKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQzKS5PdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDMpLk91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQzKS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMykub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykub3V0X2UoJ2NyZWF0ZWRCeScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDMpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMykuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMykuYm90aEUoc3RyaW5nMCkuaGFzKHN0cmluZzEsIG51bWJlcjApLmhhcyhzdHJpbmcyLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMykuQm90aEUoXCJjcmVhdGVkQnlcIikuSGFzKFwieWVhclwiLCAyMDA5KS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuQm90aEUoXCJjcmVhdGVkQnlcIikuSGFzKFwieWVhclwiLCAyMDA5KS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDMpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMykuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQzKS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMykuYm90aF9lKCdjcmVhdGVkQnknKS5oYXMoJ3llYXInLCAyMDA5KS5oYXMoJ2FjbCcsICdwdWJsaWMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5JbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuSW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmluX2UoJ2NyZWF0ZWRCeScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDQpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLk91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuT3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNCkub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDQpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ0KS5vdXRfZSgnY3JlYXRlZEJ5JykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgbnVtYmVyMCkuaGFzKHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRShcImNyZWF0ZWRCeVwiKS5IYXMoXCJ5ZWFyXCIsIDIwMDkpLkhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ0KS5Cb3RoRShcImNyZWF0ZWRCeVwiKS5IYXMoXCJ5ZWFyXCIsIDIwMDkpLkhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ0KS5ib3RoX2UoJ2NyZWF0ZWRCeScpLmhhcygneWVhcicsIDIwMDkpLmhhcygnYWNsJywgJ3B1YmxpYycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDUpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDUpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ1KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ1KS5ib3RoX2UoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNSkuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5pbkUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLkluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ1KS5JbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDUpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDUpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNSkuaW5fZSgnY3JlYXRlZEJ5JykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNSkub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ1KS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNSkub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNSkuT3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ1KS5PdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNSkub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDUpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLm91dF9lKCdjcmVhdGVkQnknKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ1KS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDUpLmJvdGhFKHN0cmluZzApLmhhcyhzdHJpbmcxLCBudW1iZXIwKS5oYXMoc3RyaW5nMiwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLkJvdGhFKFwiY3JlYXRlZEJ5XCIpLkhhcyhcInllYXJcIiwgMjAwOSkuSGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDUpLkJvdGhFKFwiY3JlYXRlZEJ5XCIpLkhhcyhcInllYXJcIiwgMjAwOSkuSGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ1KS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNSkuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDUpLmJvdGhfZSgnY3JlYXRlZEJ5JykuaGFzKCd5ZWFyJywgMjAwOSkuaGFzKCdhY2wnLCAncHVibGljJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNikuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ2KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDYpLmJvdGhfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDYpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ2KS5pbkUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDYpLmluRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNikuSW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLkluRShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNikuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNikuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikuaW5FKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ2KS5pbl9lKCdjcmVhdGVkQnknKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ2KS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5vdXRFKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5PdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLk91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLm91dEUoXCJjcmVhdGVkQnlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5vdXRFKFwiY3JlYXRlZEJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikub3V0RShcImNyZWF0ZWRCeVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikub3V0X2UoJ2NyZWF0ZWRCeScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDYpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNikuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikuYm90aEUoc3RyaW5nMCkuaGFzKHN0cmluZzEsIG51bWJlcjApLmhhcyhzdHJpbmcyLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNikuQm90aEUoXCJjcmVhdGVkQnlcIikuSGFzKFwieWVhclwiLCAyMDA5KS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNikuQm90aEUoXCJjcmVhdGVkQnlcIikuSGFzKFwieWVhclwiLCAyMDA5KS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLmJvdGhFKFwiY3JlYXRlZEJ5XCIpLmhhcyhcInllYXJcIiwgMjAwOSkuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNikuYm90aEUoXCJjcmVhdGVkQnlcIikuaGFzKFwieWVhclwiLCAyMDA5KS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ2KS5ib3RoRShcImNyZWF0ZWRCeVwiKS5oYXMoXCJ5ZWFyXCIsIDIwMDkpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikuYm90aF9lKCdjcmVhdGVkQnknKS5oYXMoJ3llYXInLCAyMDA5KS5oYXMoJ2FjbCcsICdwdWJsaWMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhiX2JYX1ZYYVhfYWRkRVhrbm93c1hfdG9YYlhfcHJvcGVydHlYd2VpZ2h0XzBfNVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hZGRFKFwia25vd3NcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNUQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFkZEUoXCJrbm93c1wiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFkZEUoXCJrbm93c1wiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hZGRFKHN0cmluZzApLnRvKHN0cmluZzEpLnByb3BlcnR5KHN0cmluZzIsIGRvdWJsZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFkZEUoXCJrbm93c1wiKS5UbyhcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYWRkRShcImtub3dzXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFkZEUoXCJrbm93c1wiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hZGRFKFwia25vd3NcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmFkZF9lKCdrbm93cycpLnRvKCdiJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmJvdGhfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5pbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmluRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuSW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuSW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuaW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5pbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuaW5fZSgna25vd3MnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXRFKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdrbm93cycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmJvdGhFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsMC41KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5ib3RoRShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwLjUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5ib3RoRShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwLjUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYm90aEUoc3RyaW5nMCkuaGFzKHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5Cb3RoRShcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAwLjUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkJvdGhFKFwia25vd3NcIikuSGFzKFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmJvdGhFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5ib3RoRShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwLjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYm90aEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMC41KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuYm90aF9lKCdrbm93cycpLmhhcygnd2VpZ2h0JywgMC41KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDYpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikuYm90aF9lKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuaW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNikuaW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikuaW5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ2KS5JbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ2KS5JbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNikuaW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ2KS5pbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLmluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ2KS5pbl9lKCdrbm93cycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ2KS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDYpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLk91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ2KS5PdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDYpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikub3V0X2UoJ2tub3dzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikuYm90aEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwwLjUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDYpLmJvdGhFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLmJvdGhFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ2KS5ib3RoRShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDYpLkJvdGhFKFwia25vd3NcIikuSGFzKFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNikuQm90aEUoXCJrbm93c1wiKS5IYXMoXCJ3ZWlnaHRcIiwgMC41KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNikuYm90aEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMC41KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDYpLmJvdGhFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDAuNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ2KS5ib3RoRShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwLjUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ2KS5ib3RoX2UoJ2tub3dzJykuaGFzKCd3ZWlnaHQnLCAwLjUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZFZfYXNYZmlyc3RYX3JlcGVhdFhhZGRFWG5leHRYX3RvWGFkZFZYX2luVlhfdGltZXNYNVhfYWRkRVhuZXh0WF90b1hzZWxlY3RYZmlyc3RYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5hcyhcImZpcnN0XCIpLnJlcGVhdChfXy5hZGRFKFwibmV4dFwiKS50byhfXy5hZGRWKCkpLmluVigpKS50aW1lcyg1KS5hZGRFKFwibmV4dFwiKS50byhfXy5zZWxlY3QoXCJmaXJzdFwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoKS5hcyhcImZpcnN0XCIpLnJlcGVhdChfXy5hZGRFKFwibmV4dFwiKS50byhfXy5hZGRWKCkpLmluVigpKS50aW1lcyg1KS5hZGRFKFwibmV4dFwiKS50byhfXy5zZWxlY3QoXCJmaXJzdFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkuYXMoXCJmaXJzdFwiKS5yZXBlYXQoX18uYWRkRShcIm5leHRcIikudG8oX18uYWRkVigpKS5pblYoKSkudGltZXMoNSkuYWRkRShcIm5leHRcIikudG8oX18uc2VsZWN0KFwiZmlyc3RcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoKS5hcyhzdHJpbmcwKS5yZXBlYXQoX18uYWRkRShzdHJpbmcxKS50byhfXy5hZGRWKCkpLmluVigpKS50aW1lcyhudW1iZXIwKS5hZGRFKHN0cmluZzEpLnRvKF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuQXMoXCJmaXJzdFwiKS5SZXBlYXQoX18uQWRkRSgoc3RyaW5nKSBcIm5leHRcIikuVG8oX18uQWRkVigpKS5JblYoKSkuVGltZXMoNSkuQWRkRSgoc3RyaW5nKSBcIm5leHRcIikuVG8oX18uU2VsZWN0PG9iamVjdD4oXCJmaXJzdFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5BcyhcImZpcnN0XCIpLlJlcGVhdChncmVtbGluZ28uVF9fLkFkZEUoXCJuZXh0XCIpLlRvKGdyZW1saW5nby5UX18uQWRkVigpKS5JblYoKSkuVGltZXMoNSkuQWRkRShcIm5leHRcIikuVG8oZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJmaXJzdFwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKCkuYXMoXCJmaXJzdFwiKS5yZXBlYXQoX18uYWRkRShcIm5leHRcIikudG8oX18uYWRkVigpKS5pblYoKSkudGltZXMoNSkuYWRkRShcIm5leHRcIikudG8oX18uc2VsZWN0KFwiZmlyc3RcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5hcyhcImZpcnN0XCIpLnJlcGVhdChfXy5hZGRFKFwibmV4dFwiKS50byhfXy5hZGRWKCkpLmluVigpKS50aW1lcyg1KS5hZGRFKFwibmV4dFwiKS50byhfXy5zZWxlY3QoXCJmaXJzdFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLmFzKFwiZmlyc3RcIikucmVwZWF0KF9fLmFkZEUoXCJuZXh0XCIpLnRvKF9fLmFkZFYoKSkuaW5WKCkpLnRpbWVzKDUpLmFkZEUoXCJuZXh0XCIpLnRvKF9fLnNlbGVjdChcImZpcnN0XCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCkuYXNfKCdmaXJzdCcpLnJlcGVhdChfXy5hZGRfZSgnbmV4dCcpLnRvKF9fLmFkZF92KCkpLmluX3YoKSkudGltZXMoNSkuYWRkX2UoJ25leHQnKS50byhfXy5zZWxlY3QoJ2ZpcnN0JykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJuZXh0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJuZXh0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwibmV4dFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJuZXh0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJuZXh0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwibmV4dFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJuZXh0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcIm5leHRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCduZXh0JykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5saW1pdCgxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubGltaXQoMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5saW1pdCgxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5saW1pdChudW1iZXIwKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxpbWl0PG9iamVjdD4oMSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxpbWl0KDEpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubGltaXQoMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubGltaXQoMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubGltaXQoMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5saW1pdCgxKS5ib3RoX2UoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxpbWl0KDEpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubGltaXQoMSkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubGltaXQoMSkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxpbWl0KG51bWJlcjApLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxpbWl0PG9iamVjdD4oMSkuSW5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5MaW1pdCgxKS5JbkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5saW1pdCgxKS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubGltaXQoMSkuaW5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxpbWl0KDEpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxpbWl0KDEpLmluX2UoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxpbWl0KDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxpbWl0KDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5saW1pdCgxKS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxpbWl0KG51bWJlcjApLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5MaW1pdDxvYmplY3Q+KDEpLk91dEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxpbWl0KDEpLk91dEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5saW1pdCgxKS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxpbWl0KDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubGltaXQoMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxpbWl0KDEpLm91dF9lKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9tYXJrb1hfYXNYYVhfb3V0RVhjcmVhdGVkWF9hc1hiWF9pblZfYWRkRVhzZWxlY3RYYlhfbGFiZWxYX3RvWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hZGRFKF9fLnNlbGVjdChcImJcIikubGFiZWwoKSkudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYWRkRShfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5pblYoKS5hZGRFKF9fLnNlbGVjdChcImJcIikubGFiZWwoKSkudG8oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuYXMoc3RyaW5nMikub3V0RShzdHJpbmczKS5hcyhzdHJpbmc0KS5pblYoKS5hZGRFKF9fLnNlbGVjdChzdHJpbmc0KS5sYWJlbCgpKS50byhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLk91dEUoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5JblYoKS5BZGRFKF9fLlNlbGVjdDxvYmplY3Q+KFwiYlwiKS5MYWJlbCgpKS5UbyhcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLk91dEUoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5JblYoKS5BZGRFKGdyZW1saW5nby5UX18uU2VsZWN0KFwiYlwiKS5MYWJlbCgpKS5UbyhcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYWRkRShfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYWRkRShfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5vdXRFKFwiY3JlYXRlZFwiKS5hcyhcImJcIikuaW5WKCkuYWRkRShfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnRvKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5vdXRfZSgnY3JlYXRlZCcpLmFzXygnYicpLmluX3YoKS5hZGRfZShfXy5zZWxlY3QoJ2InKS5sYWJlbCgpKS50bygnYScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5ib3RoX2UoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5pbkUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmluRShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmluRShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5pbkUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkluRShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuSW5FKFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuaW5FKFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmluRShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5pbkUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5pbl9lKCdjcmVhdGVkJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuaW4oXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIixcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5pbihcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuaW4oXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5pbihzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkluKFwiY3JlYXRlZFwiKS5IYXMoXCJuYW1lXCIsIFwibG9wXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkluKFwiY3JlYXRlZFwiKS5IYXMoXCJuYW1lXCIsIFwibG9wXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5pbihcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuaW5fKFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5pbl8oJ2NyZWF0ZWQnKS5oYXMoJ25hbWUnLCAnbG9wJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoJ2NyZWF0ZWQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRFWFZfb3V0RV9sYWJlbF9ncm91cENvdW50X29yZGVyWGxvY2FsWF9ieVh2YWx1ZXNfZGVzY1hfc2VsZWN0WGtleXNYX3VuZm9sZF9saW1pdFgxWFhfZnJvbVhWX2hhc1huYW1lX3ZhZGFzWFhfdG9YVl9oYXNYbmFtZV9sb3BYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRFKF9fLlYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkubGltaXQoMSkpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRFKF9fLlYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkubGltaXQoMSkpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkRShfXy5WKCkub3V0RSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmxpbWl0KDEpKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRFKF9fLlYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkubGltaXQobnVtYmVyMCkpLmZyb20oX18uVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSkudG8oX18uVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRFKF9fLlYoKS5PdXRFKCkuTGFiZWwoKS5Hcm91cENvdW50PG9iamVjdD4oKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoQ29sdW1uLlZhbHVlcywgT3JkZXIuRGVzYykuU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlVuZm9sZDxvYmplY3Q+KCkuTGltaXQ8b2JqZWN0PigxKSkuRnJvbShfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5UbyhfXy5WKCkuSGFzKFwibmFtZVwiLCBcImxvcFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZEUoZ3JlbWxpbmdvLlRfXy5WKCkuT3V0RSgpLkxhYmVsKCkuR3JvdXBDb3VudCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuQnkoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMsIGdyZW1saW5nby5PcmRlci5EZXNjKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5LZXlzKS5VbmZvbGQoKS5MaW1pdCgxKSkuRnJvbShncmVtbGluZ28uVF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLlRvKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkRShfXy5WKCkub3V0RSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmxpbWl0KDEpKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRFKF9fLlYoKS5vdXRFKCkubGFiZWwoKS5ncm91cENvdW50KCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkubGltaXQoMSkpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZEUoX18uVigpLm91dEUoKS5sYWJlbCgpLmdyb3VwQ291bnQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLnZhbHVlcywgT3JkZXIuZGVzYykuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKS5saW1pdCgxKSkuZnJvbV8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX2UoX18uVigpLm91dF9lKCkubGFiZWwoKS5ncm91cF9jb3VudCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmxpbWl0KDEpKS5mcm9tXyhfXy5WKCkuaGFzKCduYW1lJywgJ3ZhZGFzJykpLnRvKF9fLlYoKS5oYXMoJ25hbWUnLCAnbG9wJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQyKS5ib3RoX2UoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5pbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5pbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikuaW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5pbkUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLkluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5pbkUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLmluRShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuaW5FKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLmluX2UoJ2tub3dzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikub3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikub3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLm91dEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMikuT3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuT3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLm91dEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikub3V0RShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5vdXRFKFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikub3V0X2UoJ2NyZWF0ZWQnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIixcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQyKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDIpLm91dChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQyKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikub3V0KCdjcmVhdGVkJykuaGFzKCduYW1lJywgJ2xvcCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZEVYa25vd3NYX2Zyb21YVlh2aWQxWFhfdG9YVlh2aWQ2WFhfcHJvcGVydHlYd2VpZ2h0XzBfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkRShcImtub3dzXCIpLmZyb20oVih2aWQxKSkudG8oVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkRShcImtub3dzXCIpLmZyb20oX18uVih2aWQxKSkudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZEUoXCJrbm93c1wiKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkRShzdHJpbmcwKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KHN0cmluZzEsIHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShfXy5WKHZpZDEpKS5UbyhfXy5WKHZpZDYpKS5Qcm9wZXJ0eShcIndlaWdodFwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRFKFwia25vd3NcIikuRnJvbShncmVtbGluZ28uVF9fLlYodmlkMSkpLlRvKGdyZW1saW5nby5UX18uVih2aWQ2KSkuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZEUoXCJrbm93c1wiKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkRShcImtub3dzXCIpLmZyb20oX18uVih2aWQxKSkudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRFKFwia25vd3NcIikuZnJvbV8oX18uVih2aWQxKSkudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF9lKCdrbm93cycpLmZyb21fKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KCd3ZWlnaHQnLCB4eDEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoJ2tub3dzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcInBldGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgna25vd3MnKS5oYXMoJ25hbWUnLCAncGV0ZXInKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRFWGtub3dzdmFyWF9mcm9tWFZYdmlkMVhYX3RvWFZYdmlkNlhYX3Byb3BlcnR5WHdlaWdodF8wXzFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZEUoeHgxKS5mcm9tKFYodmlkMSkpLnRvKFYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZEUoeHgxKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRFKHh4MSkuZnJvbShfXy5WKHZpZDEpKS50byhfXy5WKHZpZDYpKS5wcm9wZXJ0eShcIndlaWdodFwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZEUoeHgxKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KHN0cmluZzAsIHh4MikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRFKChzdHJpbmcpIHh4MSkuRnJvbShfXy5WKHZpZDEpKS5UbyhfXy5WKHZpZDYpKS5Qcm9wZXJ0eShcIndlaWdodFwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRFKHh4MSkuRnJvbShncmVtbGluZ28uVF9fLlYodmlkMSkpLlRvKGdyZW1saW5nby5UX18uVih2aWQ2KSkuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZEUoeHgxKS5mcm9tKF9fLlYodmlkMSkpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkRSh4eDEpLmZyb20oX18uVih2aWQxKSkudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRFKHh4MSkuZnJvbV8oX18uVih2aWQxKSkudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF9lKHh4MSkuZnJvbV8oX18uVih2aWQxKSkudG8oX18uVih2aWQ2KSkucHJvcGVydHkoJ3dlaWdodCcsIHh4MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgna25vd3MnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCdrbm93cycpLmhhcygnbmFtZScsICdwZXRlcicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYYVhfYWRkRVhrbm93c1hfdG9YYlhfcHJvcGVydHlYd2VpZ2h0XzBfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hZGRFKFwia25vd3NcIikudG8oVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5hZGRFKFwia25vd3NcIikudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYWRkRShcImtub3dzXCIpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hZGRFKHN0cmluZzApLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KHN0cmluZzEsIHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5UbyhfXy5WKHZpZDYpKS5Qcm9wZXJ0eShcIndlaWdodFwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFkZEUoXCJrbm93c1wiKS5UbyhncmVtbGluZ28uVF9fLlYodmlkNikpLlByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmFkZEUoXCJrbm93c1wiKS50byhfXy5WKHZpZDYpKS5wcm9wZXJ0eShcIndlaWdodFwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYWRkRShcImtub3dzXCIpLnRvKF9fLlYodmlkNikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hZGRFKFwia25vd3NcIikudG8oX18uVih2aWQ2KSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuYWRkX2UoJ2tub3dzJykudG8oX18uVih2aWQ2KSkucHJvcGVydHkoJ3dlaWdodCcsIHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgna25vd3MnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCdrbm93cycpLmhhcygnbmFtZScsICdwZXRlcicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZEVYa25vd3NYcHJvcGVydHlYd2VpZ2h0X251bGxYZnJvbVhWX2hhc1huYW1lX21hcmtvWFhfdG9YVl9oYXNYbmFtZV92YWRhc1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKS5mcm9tKFYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSkudG8oVigpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIG51bGwpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRFKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIG9iamVjdDApLmZyb20oX18uVigpLmhhcyhzdHJpbmcyLCBzdHJpbmczKSkudG8oX18uVigpLmhhcyhzdHJpbmcyLCBzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkuRnJvbShfXy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS5UbyhfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkRShcImtub3dzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIG5pbCkuRnJvbShncmVtbGluZ28uVF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpLlRvKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkuZnJvbV8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfZSgna25vd3MnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgTm9uZSkuZnJvbV8oX18uVigpLmhhcygnbmFtZScsICdtYXJrbycpKS50byhfXy5WKCkuaGFzKCduYW1lJywgJ3ZhZGFzJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzKFwia25vd3NcIixcIndlaWdodFwiLG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXMoXCJrbm93c1wiLCBcIndlaWdodFwiLCAob2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXMoXCJrbm93c1wiLCBcIndlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXMoJ2tub3dzJywgJ3dlaWdodCcsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZEVYa25vd3N2YXJYcHJvcGVydHlYd2VpZ2h0X251bGxYZnJvbVhWX2hhc1huYW1lX21hcmtvWFhfdG9YVl9oYXNYbmFtZV92YWRhc1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZEUoeHgxKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKS5mcm9tKFYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSkudG8oVigpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkRSh4eDEpLnByb3BlcnR5KFwid2VpZ2h0XCIsIG51bGwpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRFKHh4MSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgbnVsbCkuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRFKHh4MSkucHJvcGVydHkoc3RyaW5nMCwgb2JqZWN0MCkuZnJvbShfXy5WKCkuaGFzKHN0cmluZzEsIHN0cmluZzIpKS50byhfXy5WKCkuaGFzKHN0cmluZzEsIHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZEUoKHN0cmluZykgeHgxKS5Qcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKS5Gcm9tKF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpLlRvKF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRFKHh4MSkuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgbmlsKS5Gcm9tKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkuVG8oZ3JlbWxpbmdvLlRfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZEUoeHgxKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZEUoeHgxKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZEUoeHgxKS5wcm9wZXJ0eShcIndlaWdodFwiLCBudWxsKS5mcm9tXyhfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF9lKHh4MSkucHJvcGVydHkoJ3dlaWdodCcsIE5vbmUpLmZyb21fKF9fLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKSkudG8oX18uVigpLmhhcygnbmFtZScsICd2YWRhcycpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhcyhcImtub3dzXCIsXCJ3ZWlnaHRcIixudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgKG9iamVjdCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXMoXCJrbm93c1wiLCBcIndlaWdodFwiLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXMoXCJrbm93c1wiLCBcIndlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzKCdrbm93cycsICd3ZWlnaHQnLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblhhZGRFWGtub3dzdmFyWHByb3BlcnR5WHdlaWdodF9udWxsWGZyb21YVl9oYXNYbmFtZV9tYXJrb1hYX3RvWFZfaGFzWG5hbWVfdmFkYXNYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcudW5pb24oYWRkRSh4eDEpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpKS50byhWKCkuaGFzKFwibmFtZVwiLFwidmFkYXNcIikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcudW5pb24oX18uYWRkRSh4eDEpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcudW5pb24oX18uYWRkRSh4eDEpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLnVuaW9uKF9fLmFkZEUoeHgxKS5wcm9wZXJ0eShzdHJpbmcwLCBudW1iZXIwKS5mcm9tKF9fLlYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikpLnRvKF9fLlYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMykpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlVuaW9uPG9iamVjdD4oX18uQWRkRSgoc3RyaW5nKSB4eDEpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLkZyb20oX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkuVG8oX18uVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5VbmlvbihncmVtbGluZ28uVF9fLkFkZEUoeHgxKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxKS5Gcm9tKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkuVG8oZ3JlbWxpbmdvLlRfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy51bmlvbihfXy5hZGRFKHh4MSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMSkuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcudW5pb24oX18uYWRkRSh4eDEpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLmFkZEUoeHgxKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxKS5mcm9tXyhfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy5hZGRfZSh4eDEpLnByb3BlcnR5KCd3ZWlnaHQnLCAxKS5mcm9tXyhfXy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykpLnRvKF9fLlYoKS5oYXMoJ25hbWUnLCAndmFkYXMnKSkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzKFwia25vd3NcIixcIndlaWdodFwiLCAxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXMoXCJrbm93c1wiLCBcIndlaWdodFwiLCAxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXMoXCJrbm93c1wiLCBcIndlaWdodFwiLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzKFwia25vd3NcIiwgXCJ3ZWlnaHRcIiwgMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhcyhcImtub3dzXCIsIFwid2VpZ2h0XCIsIDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhcygna25vd3MnLCAnd2VpZ2h0JywgMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfYWRkRVhlZGdlWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfd2l0aFhrZXlfdmFsdWVYX3ZhbHVlc1h3ZWlnaHRfa2V5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRFKFwiZWRnZVwiKS5mcm9tKFYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSkudG8oVigpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS52YWx1ZXMoXCJ3ZWlnaHRcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZEUoXCJlZGdlXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS53aXRoKFwia2V5XCIsIFwidmFsdWVcIikudmFsdWVzKFwid2VpZ2h0XCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkRShcImVkZ2VcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS52YWx1ZXMoXCJ3ZWlnaHRcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkRShzdHJpbmcwKS5mcm9tKF9fLlYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikpLnRvKF9fLlYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMykpLnByb3BlcnR5KHN0cmluZzQsIG51bWJlcjApLndpdGgoc3RyaW5nNSwgc3RyaW5nNikudmFsdWVzKHN0cmluZzQsIHN0cmluZzUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkRSgoc3RyaW5nKSBcImVkZ2VcIikuRnJvbShfXy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS5UbyhfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLldpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkRShcImVkZ2VcIikuRnJvbShncmVtbGluZ28uVF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpLlRvKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5XaXRoKFwia2V5XCIsIFwidmFsdWVcIikuVmFsdWVzKFwid2VpZ2h0XCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkRShcImVkZ2VcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS52YWx1ZXMoXCJ3ZWlnaHRcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkRShcImVkZ2VcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS52YWx1ZXMoXCJ3ZWlnaHRcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkRShcImVkZ2VcIikuZnJvbV8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS53aXRoXyhcImtleVwiLCBcInZhbHVlXCIpLnZhbHVlcyhcIndlaWdodFwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF9lKCdlZGdlJykuZnJvbV8oX18uVigpLmhhcygnbmFtZScsICdtYXJrbycpKS50byhfXy5WKCkuaGFzKCduYW1lJywgJ3ZhZGFzJykpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLndpdGhfKCdrZXknLCAndmFsdWUnKS52YWx1ZXMoJ3dlaWdodCcsICdrZXknKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRFWGtub3dzWF9mcm9tWFZfaGFzWG5hbWVfbWFya29YWF90b1hWX2hhc1huYW1lX3ZhZGFzWFhfcHJvcGVydHlYd2VpZ2h0XzBfNVhfYWRkRVhrbm93c1hfZnJvbVhWX2hhc1huYW1lX21hcmtvWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkRShcImtub3dzXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLFwidmFkYXNcIikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkRShcImtub3dzXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZEUoXCJrbm93c1wiKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkRShzdHJpbmcwKS5mcm9tKF9fLlYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikpLnRvKF9fLlYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMykpLnByb3BlcnR5KHN0cmluZzQsIG51bWJlcjApLmFkZEUoc3RyaW5nMCkuZnJvbShfXy5WKCkuaGFzKHN0cmluZzEsIHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpLlRvKF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZEUoXCJrbm93c1wiKS5Gcm9tKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkuVG8oZ3JlbWxpbmdvLlRfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRFKFwia25vd3NcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZEUoXCJrbm93c1wiKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkRShcImtub3dzXCIpLmZyb21fKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX2UoJ2tub3dzJykuZnJvbV8oX18uVigpLmhhcygnbmFtZScsICdtYXJrbycpKS50byhfXy5WKCkuaGFzKCduYW1lJywgJ3ZhZGFzJykpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKF9fLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9hZGRWWGFuaW1hbFhfcHJvcGVydHlYYWdlX3NlbGVjdFhhWF9ieVhhZ2VYWF9wcm9wZXJ0eVhuYW1lX3B1cHB5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikpLnByb3BlcnR5KFwibmFtZVwiLCBcInB1cHB5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikpLnByb3BlcnR5KFwibmFtZVwiLCBcInB1cHB5XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImFcIikuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcImFnZVwiLCBfXy5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwdXBweVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLmFkZFYoc3RyaW5nMSkucHJvcGVydHkoc3RyaW5nMiwgX18uc2VsZWN0KHN0cmluZzApLmJ5KHN0cmluZzIpKS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJhbmltYWxcIikuUHJvcGVydHkoXCJhZ2VcIiwgX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLkJ5KFwiYWdlXCIpKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwdXBweVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuQWRkVihcImFuaW1hbFwiKS5Qcm9wZXJ0eShcImFnZVwiLCBncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikuQnkoXCJhZ2VcIikpLlByb3BlcnR5KFwibmFtZVwiLCBcInB1cHB5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5hcyhcImFcIikuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcImFnZVwiLCBfXy5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwdXBweVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikpLnByb3BlcnR5KFwibmFtZVwiLCBcInB1cHB5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJhZ2VcIiwgX18uc2VsZWN0KFwiYVwiKS5ieShcImFnZVwiKSkucHJvcGVydHkoXCJuYW1lXCIsIFwicHVwcHlcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmFzXygnYScpLmFkZF92KCdhbmltYWwnKS5wcm9wZXJ0eSgnYWdlJywgX18uc2VsZWN0KCdhJykuYnkoJ2FnZScpKS5wcm9wZXJ0eSgnbmFtZScsICdwdXBweScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYW5pbWFsXCIsXCJhZ2VcIiwyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFuaW1hbFwiLCBcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwiYW5pbWFsXCIsIFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYW5pbWFsJywgJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FkZFZYYW5pbWFsWF9wcm9wZXJ0eVhhZ2VfMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwiYWdlXCIsIDApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWRkVigoc3RyaW5nKSBcImFuaW1hbFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFkZFYoXCJhbmltYWxcIikuUHJvcGVydHkoXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZGRfdignYW5pbWFsJykucHJvcGVydHkoJ2FnZScsIDApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYW5pbWFsXCIsXCJhZ2VcIiwwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFuaW1hbFwiLCBcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYW5pbWFsXCIsIFwiYWdlXCIsIDApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFuaW1hbFwiLCBcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FuaW1hbCcsICdhZ2UnLCAwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FkZFZYYW5pbWFsdmFyWF9wcm9wZXJ0eVhhZ2VfMHZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFkZFYoeHgxKS5wcm9wZXJ0eShcImFnZVwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWRkVih4eDEpLnByb3BlcnR5KFwiYWdlXCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWRkVih4eDEpLnByb3BlcnR5KFwiYWdlXCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFkZFYoeHgxKS5wcm9wZXJ0eShzdHJpbmcwLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFkZFYoKHN0cmluZykgeHgxKS5Qcm9wZXJ0eShcImFnZVwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWRkVih4eDEpLlByb3BlcnR5KFwiYWdlXCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWRkVih4eDEpLnByb3BlcnR5KFwiYWdlXCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFkZFYoeHgxKS5wcm9wZXJ0eShcImFnZVwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZGRWKHh4MSkucHJvcGVydHkoXCJhZ2VcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZGRfdih4eDEpLnByb3BlcnR5KCdhZ2UnLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYW5pbWFsXCIsXCJhZ2VcIiwwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFuaW1hbFwiLCBcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYW5pbWFsXCIsIFwiYWdlXCIsIDApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhbmltYWxcIiwgXCJhZ2VcIiwgMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFuaW1hbFwiLCBcImFnZVwiLCAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FuaW1hbCcsICdhZ2UnLCAwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9zdGVwaGVuWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdzdGVwaGVuJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWWHBlcnNvbnZhclhfcHJvcGVydHlYbmFtZV9zdGVwaGVudmFyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKHh4MSkucHJvcGVydHkoXCJuYW1lXCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHh4MSkucHJvcGVydHkoc3RyaW5nMCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgeHgxKS5Qcm9wZXJ0eShcIm5hbWVcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVih4eDEpLlByb3BlcnR5KFwibmFtZVwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKHh4MSkucHJvcGVydHkoXCJuYW1lXCIsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdih4eDEpLnByb3BlcnR5KCduYW1lJywgeHgyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9wcm9wZXJ0eVhuYW1lX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzEsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIChvYmplY3QpIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgJ25hbWUnLCBOb25lKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZFZYcGVyc29uWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVuWF9wcm9wZXJ0eVhzaW5nbGVfbmFtZV9zdGVwaGVubVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5TaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICduYW1lJywgJ3N0ZXBoZW4nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICduYW1lJywgJ3N0ZXBoZW5tJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdzdGVwaGVubScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnZXRfZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1fc2luY2VfMjAxMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiLCBcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgc3RyaW5nMSwgc3RyaW5nMywgc3RyaW5nNCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuU2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiLCBcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiLCBcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIiwgXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAnbmFtZScsICdzdGVwaGVuJykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAnbmFtZScsICdzdGVwaGVubScsICdzaW5jZScsIDIwMTApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdzdGVwaGVuJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbm0nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwic3RlcGhlbm1cIikucHJvcGVydGllcyhcIm5hbWVcIikuaGFzKFwic2luY2VcIiwyMDEwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXMoXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikucHJvcGVydGllcyhcIm5hbWVcIikuaGFzKFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0aWVzKHN0cmluZzEpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikuUHJvcGVydGllczxvYmplY3Q+KFwibmFtZVwiKS5IYXMoXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKS5Qcm9wZXJ0aWVzKFwibmFtZVwiKS5IYXMoXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIikucHJvcGVydGllcyhcIm5hbWVcIikuaGFzKFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXMoXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhcyhcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbm0nKS5wcm9wZXJ0aWVzKCduYW1lJykuaGFzKCdzaW5jZScsIDIwMTApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnR5WGZyaWVuZFdlaWdodF9vdXRFWGtub3dzWF93ZWlnaHRfc3VtX19hY2xfcHJpdmF0ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImZyaWVuZFdlaWdodFwiLCBfXy5vdXRFKFwia25vd3NcIikudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpLCBcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJmcmllbmRXZWlnaHRcIiwgX18ub3V0RShcImtub3dzXCIpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSwgXCJhY2xcIiwgXCJwcml2YXRlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImZyaWVuZFdlaWdodFwiLCBfXy5vdXRFKFwia25vd3NcIikudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpLCBcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5wcm9wZXJ0eShzdHJpbmcyLCBfXy5vdXRFKHN0cmluZzMpLnZhbHVlcyhzdHJpbmc0KS5zdW0oKSwgc3RyaW5nNSwgc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIF9fLk91dEUoXCJrbm93c1wiKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5TdW08b2JqZWN0PigpLCBcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJmcmllbmRXZWlnaHRcIiwgZ3JlbWxpbmdvLlRfXy5PdXRFKFwia25vd3NcIikuVmFsdWVzKFwid2VpZ2h0XCIpLlN1bSgpLCBcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIF9fLm91dEUoXCJrbm93c1wiKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCksIFwiYWNsXCIsIFwicHJpdmF0ZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIF9fLm91dEUoXCJrbm93c1wiKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCksIFwiYWNsXCIsIFwicHJpdmF0ZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIF9fLm91dEUoXCJrbm93c1wiKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCksIFwiYWNsXCIsIFwicHJpdmF0ZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnZnJpZW5kV2VpZ2h0JywgX18ub3V0X2UoJ2tub3dzJykudmFsdWVzKCd3ZWlnaHQnKS5zdW1fKCksICdhY2wnLCAncHJpdmF0ZScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJmcmllbmRXZWlnaHRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJmcmllbmRXZWlnaHRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiZnJpZW5kV2VpZ2h0XCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImZyaWVuZFdlaWdodFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImZyaWVuZFdlaWdodFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJmcmllbmRXZWlnaHRcIiwgMS41KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImZyaWVuZFdlaWdodFwiLCAxLjUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiZnJpZW5kV2VpZ2h0XCIsIDEuNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnZnJpZW5kV2VpZ2h0JywgMS41KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5oYXMoXCJhY2xcIixcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5oYXMoXCJhY2xcIiwgXCJwcml2YXRlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmhhcyhcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0aWVzKHN0cmluZzMpLmhhcyhzdHJpbmc0LCBzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydGllczxvYmplY3Q+KFwiZnJpZW5kV2VpZ2h0XCIpLkhhcyhcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5IYXMoXCJhY2xcIiwgXCJwcml2YXRlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmhhcyhcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmhhcyhcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmhhcyhcImFjbFwiLCBcInByaXZhdGVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2ZyaWVuZFdlaWdodCcpLmhhcygnYWNsJywgJ3ByaXZhdGUnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydGllcyhzdHJpbmczKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzPG9iamVjdD4oXCJmcmllbmRXZWlnaHRcIikuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykucHJvcGVydGllcygnZnJpZW5kV2VpZ2h0JykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWWGFuaW1hbFhfcHJvcGVydHlYbmFtZV9tYXRlb1hfcHJvcGVydHlYbmFtZV9nYXRlb1hfcHJvcGVydHlYbmFtZV9jYXRlb1hfcHJvcGVydHlYYWdlXzVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWF0ZW9cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiZ2F0ZW9cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2F0ZW9cIikucHJvcGVydHkoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWF0ZW9cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiZ2F0ZW9cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2F0ZW9cIikucHJvcGVydHkoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hdGVvXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImdhdGVvXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNhdGVvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nNSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwiYW5pbWFsXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hdGVvXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImdhdGVvXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImNhdGVvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiYW5pbWFsXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hdGVvXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImdhdGVvXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImNhdGVvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXRlb1wiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJnYXRlb1wiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjYXRlb1wiKS5wcm9wZXJ0eShcImFnZVwiLCA1KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hdGVvXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImdhdGVvXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNhdGVvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWF0ZW9cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiZ2F0ZW9cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2F0ZW9cIikucHJvcGVydHkoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignYW5pbWFsJykucHJvcGVydHkoJ25hbWUnLCAnbWF0ZW8nKS5wcm9wZXJ0eSgnbmFtZScsICdnYXRlbycpLnByb3BlcnR5KCduYW1lJywgJ2NhdGVvJykucHJvcGVydHkoJ2FnZScsIDUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLFwibWF0ZW9cIikuaGFzKFwibmFtZVwiLCBcImdhdGVvXCIpLmhhcyhcIm5hbWVcIiwgXCJjYXRlb1wiKS5oYXMoXCJhZ2VcIiw1KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXRlb1wiKS5oYXMoXCJuYW1lXCIsIFwiZ2F0ZW9cIikuaGFzKFwibmFtZVwiLCBcImNhdGVvXCIpLmhhcyhcImFnZVwiLCA1KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwibWF0ZW9cIikuaGFzKFwibmFtZVwiLCBcImdhdGVvXCIpLmhhcyhcIm5hbWVcIiwgXCJjYXRlb1wiKS5oYXMoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMSwgc3RyaW5nMykuaGFzKHN0cmluZzEsIHN0cmluZzQpLmhhcyhzdHJpbmc1LCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcImFuaW1hbFwiKS5IYXMoXCJuYW1lXCIsIFwibWF0ZW9cIikuSGFzKFwibmFtZVwiLCBcImdhdGVvXCIpLkhhcyhcIm5hbWVcIiwgXCJjYXRlb1wiKS5IYXMoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcImFuaW1hbFwiKS5IYXMoXCJuYW1lXCIsIFwibWF0ZW9cIikuSGFzKFwibmFtZVwiLCBcImdhdGVvXCIpLkhhcyhcIm5hbWVcIiwgXCJjYXRlb1wiKS5IYXMoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcIm1hdGVvXCIpLmhhcyhcIm5hbWVcIiwgXCJnYXRlb1wiKS5oYXMoXCJuYW1lXCIsIFwiY2F0ZW9cIikuaGFzKFwiYWdlXCIsIDUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwibWF0ZW9cIikuaGFzKFwibmFtZVwiLCBcImdhdGVvXCIpLmhhcyhcIm5hbWVcIiwgXCJjYXRlb1wiKS5oYXMoXCJhZ2VcIiwgNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXRlb1wiKS5oYXMoXCJuYW1lXCIsIFwiZ2F0ZW9cIikuaGFzKFwibmFtZVwiLCBcImNhdGVvXCIpLmhhcyhcImFnZVwiLCA1KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ2FuaW1hbCcpLmhhcygnbmFtZScsICdtYXRlbycpLmhhcygnbmFtZScsICdnYXRlbycpLmhhcygnbmFtZScsICdjYXRlbycpLmhhcygnYWdlJywgNSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV9tYXJrb1hfYWRkVl9wcm9wZXJ0eVhuYW1lX3NlbGVjdFhhWFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJtYXJrb1wiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIF9fLnNlbGVjdChcImFcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBcIm1hcmtvXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgX18uc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBcIm1hcmtvXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgX18uc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBzdHJpbmcxKS5hZGRWKCkucHJvcGVydHkoc3RyaW5nMiwgX18uc2VsZWN0KHN0cmluZzApKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgXCJtYXJrb1wiKS5BZGRWKCkuUHJvcGVydHkoXCJuYW1lXCIsIF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgXCJtYXJrb1wiKS5BZGRWKCkuUHJvcGVydHkoXCJuYW1lXCIsIGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBcIm1hcmtvXCIpLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgX18uc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJtYXJrb1wiKS5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIF9fLnNlbGVjdChcImFcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwibWFya29cIikuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBfXy5zZWxlY3QoXCJhXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsICdtYXJrbycpLmFkZF92KCkucHJvcGVydHkoJ25hbWUnLCBfXy5zZWxlY3QoJ2EnKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlblhfcHJvcGVydHlYc2luZ2xlX25hbWVfc3RlcGhlbm1fc2luY2VfMjAxMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiLCBcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgc3RyaW5nMSwgc3RyaW5nMywgc3RyaW5nNCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuU2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiLCBcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVubVwiLCBcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlbm1cIiwgXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcInN0ZXBoZW5tXCIsIFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAnbmFtZScsICdzdGVwaGVuJykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAnbmFtZScsICdzdGVwaGVubScsICdzaW5jZScsIDIwMTApIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdzdGVwaGVuJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVubVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnc3RlcGhlbm0nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcInN0ZXBoZW5tXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhcyhcInNpbmNlXCIsMjAxMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikucHJvcGVydGllcyhcIm5hbWVcIikuaGFzKFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhcyhcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkucHJvcGVydGllcyhzdHJpbmcwKS5oYXMoc3RyaW5nMiwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuSGFzKFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikuUHJvcGVydGllcyhcIm5hbWVcIikuSGFzKFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcInN0ZXBoZW5tXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhcyhcInNpbmNlXCIsIDIwMTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwic3RlcGhlbm1cIikucHJvcGVydGllcyhcIm5hbWVcIikuaGFzKFwic2luY2VcIiwgMjAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVubVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXMoXCJzaW5jZVwiLCAyMDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnc3RlcGhlbm0nKS5wcm9wZXJ0aWVzKCduYW1lJykuaGFzKCdzaW5jZScsIDIwMTApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWRkVlhhbmltYWxYX3Byb3BlcnR5WG5hbWVfdmFsdWVzWG5hbWVYWF9wcm9wZXJ0eVhuYW1lX2FuX2FuaW1hbFhfcHJvcGVydHlYdmFsdWVzWG5hbWVYX2xhYmVsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgX18udmFsdWVzKFwibmFtZVwiKSkucHJvcGVydHkoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLnByb3BlcnR5KF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgX18udmFsdWVzKFwibmFtZVwiKSkucHJvcGVydHkoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLnByb3BlcnR5KF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJuYW1lXCIsIF9fLnZhbHVlcyhcIm5hbWVcIikpLnByb3BlcnR5KFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5wcm9wZXJ0eShfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBfXy52YWx1ZXMoc3RyaW5nMSkpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KF9fLnZhbHVlcyhzdHJpbmcxKSwgX18ubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWRkVigoc3RyaW5nKSBcImFuaW1hbFwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuUHJvcGVydHkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLCBfXy5MYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFkZFYoXCJhbmltYWxcIikuUHJvcGVydHkoXCJuYW1lXCIsIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuUHJvcGVydHkoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLlByb3BlcnR5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSwgZ3JlbWxpbmdvLlRfXy5MYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZGRWKFwiYW5pbWFsXCIpLnByb3BlcnR5KFwibmFtZVwiLCBfXy52YWx1ZXMoXCJuYW1lXCIpKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikucHJvcGVydHkoX18udmFsdWVzKFwibmFtZVwiKSwgX18ubGFiZWwoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFkZFYoXCJhbmltYWxcIikucHJvcGVydHkoXCJuYW1lXCIsIF9fLnZhbHVlcyhcIm5hbWVcIikpLnByb3BlcnR5KFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5wcm9wZXJ0eShfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5sYWJlbCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWRkVihcImFuaW1hbFwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgX18udmFsdWVzKFwibmFtZVwiKSkucHJvcGVydHkoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLnByb3BlcnR5KF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmxhYmVsKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFkZF92KCdhbmltYWwnKS5wcm9wZXJ0eSgnbmFtZScsIF9fLnZhbHVlcygnbmFtZScpKS5wcm9wZXJ0eSgnbmFtZScsICdhbiBhbmltYWwnKS5wcm9wZXJ0eShfXy52YWx1ZXMoJ25hbWUnKSwgX18ubGFiZWwoKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJuYW1lXCIsXCJhbiBhbmltYWxcIikuaGFzKFwibWFya29cIixcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcIm1hcmtvXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcIm1hcmtvXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzEsIHN0cmluZzMpLmhhcyhzdHJpbmcyLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcImFuaW1hbFwiKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5IYXMoXCJtYXJrb1wiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwiYW5pbWFsXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLkhhcyhcIm1hcmtvXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcIm1hcmtvXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJtYXJrb1wiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwibWFya29cIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdhbmltYWwnKS5oYXMoJ25hbWUnLCAnbWFya28nKS5oYXMoJ25hbWUnLCAnYW4gYW5pbWFsJykuaGFzKCdtYXJrbycsICdwZXJzb24nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpLmhhcyhcIm5hbWVcIixcImFuIGFuaW1hbFwiKS5oYXMoXCJ2YWRhc1wiLFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwidmFkYXNcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwidmFkYXNcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMSwgc3RyaW5nMykuaGFzKHN0cmluZzIsIHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwiYW5pbWFsXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5IYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLkhhcyhcInZhZGFzXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJhbmltYWxcIikuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLkhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuSGFzKFwidmFkYXNcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwidmFkYXNcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcInZhZGFzXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJ2YWRhc1wiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ2FuaW1hbCcpLmhhcygnbmFtZScsICd2YWRhcycpLmhhcygnbmFtZScsICdhbiBhbmltYWwnKS5oYXMoJ3ZhZGFzJywgJ3BlcnNvbicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLFwibG9wXCIpLmhhcyhcIm5hbWVcIixcImFuIGFuaW1hbFwiKS5oYXMoXCJsb3BcIixcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcImxvcFwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJsb3BcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmcxLCBzdHJpbmczKS5oYXMoc3RyaW5nMiwgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJhbmltYWxcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKS5IYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLkhhcyhcImxvcFwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJhbmltYWxcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKS5IYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLkhhcyhcImxvcFwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJsb3BcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcImxvcFwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwibG9wXCIsIFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdhbmltYWwnKS5oYXMoJ25hbWUnLCAnbG9wJykuaGFzKCduYW1lJywgJ2FuIGFuaW1hbCcpLmhhcygnbG9wJywgJ3NvZnR3YXJlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsXCJqb3NoXCIpLmhhcyhcIm5hbWVcIixcImFuIGFuaW1hbFwiKS5oYXMoXCJqb3NoXCIsXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcImpvc2hcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcImpvc2hcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJqb3NoXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzEsIHN0cmluZzMpLmhhcyhzdHJpbmcyLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcImFuaW1hbFwiKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5IYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLkhhcyhcImpvc2hcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcImFuaW1hbFwiKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5IYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLkhhcyhcImpvc2hcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcImpvc2hcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJqb3NoXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcImpvc2hcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwiam9zaFwiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ2FuaW1hbCcpLmhhcygnbmFtZScsICdqb3NoJykuaGFzKCduYW1lJywgJ2FuIGFuaW1hbCcpLmhhcygnam9zaCcsICdwZXJzb24nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIixcInJpcHBsZVwiKS5oYXMoXCJuYW1lXCIsXCJhbiBhbmltYWxcIikuaGFzKFwicmlwcGxlXCIsXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJyaXBwbGVcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwicmlwcGxlXCIsIFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMSwgc3RyaW5nMykuaGFzKHN0cmluZzIsIHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwiYW5pbWFsXCIpLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuSGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5IYXMoXCJyaXBwbGVcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwiYW5pbWFsXCIpLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuSGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5IYXMoXCJyaXBwbGVcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwicmlwcGxlXCIsIFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJyaXBwbGVcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcInJpcHBsZVwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnYW5pbWFsJykuaGFzKCduYW1lJywgJ3JpcHBsZScpLmhhcygnbmFtZScsICdhbiBhbmltYWwnKS5oYXMoJ3JpcHBsZScsICdzb2Z0d2FyZScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLFwicGV0ZXJcIikuaGFzKFwibmFtZVwiLFwiYW4gYW5pbWFsXCIpLmhhcyhcInBldGVyXCIsXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJwZXRlclwiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJwZXRlclwiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmcxLCBzdHJpbmczKS5oYXMoc3RyaW5nMiwgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJhbmltYWxcIikuSGFzKFwibmFtZVwiLCBcInBldGVyXCIpLkhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuSGFzKFwicGV0ZXJcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcImFuaW1hbFwiKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuSGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5IYXMoXCJwZXRlclwiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcImFuaW1hbFwiKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuaGFzKFwibmFtZVwiLCBcImFuIGFuaW1hbFwiKS5oYXMoXCJwZXRlclwiLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJhbmltYWxcIikuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLmhhcyhcIm5hbWVcIiwgXCJhbiBhbmltYWxcIikuaGFzKFwicGV0ZXJcIiwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwiYW5pbWFsXCIpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5oYXMoXCJuYW1lXCIsIFwiYW4gYW5pbWFsXCIpLmhhcyhcInBldGVyXCIsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnYW5pbWFsJykuaGFzKCduYW1lJywgJ3BldGVyJykuaGFzKCduYW1lJywgJ2FuIGFuaW1hbCcpLmhhcygncGV0ZXInLCAncGVyc29uJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV90ZXN0WF9WX2hhc0xhYmVsWHNvZnR3YXJlWF9wcm9wZXJ0eVh0ZW1wX3NlbGVjdFhhWFhfdmFsdWVNYXBYbmFtZV90ZW1wWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJ0ZXN0XCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwidGVtcFwiLCBfXy5zZWxlY3QoXCJhXCIpKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJ0ZW1wXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJ0ZXN0XCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwidGVtcFwiLCBfXy5zZWxlY3QoXCJhXCIpKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJ0ZW1wXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwidGVzdFwiKS5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcInRlbXBcIiwgX18uc2VsZWN0KFwiYVwiKSkudmFsdWVNYXAoXCJuYW1lXCIsIFwidGVtcFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBzdHJpbmcxKS5WKCkuaGFzTGFiZWwoc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgX18uc2VsZWN0KHN0cmluZzApKS52YWx1ZU1hcChzdHJpbmc0LCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBcInRlc3RcIikuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJ0ZW1wXCIsIF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibmFtZVwiLCBcInRlbXBcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBcInRlc3RcIikuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJ0ZW1wXCIsIGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKSkuVmFsdWVNYXAoXCJuYW1lXCIsIFwidGVtcFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBcInRlc3RcIikuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJ0ZW1wXCIsIF9fLnNlbGVjdChcImFcIikpLnZhbHVlTWFwKFwibmFtZVwiLCBcInRlbXBcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwidGVzdFwiKS5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcInRlbXBcIiwgX18uc2VsZWN0KFwiYVwiKSkudmFsdWVNYXAoXCJuYW1lXCIsIFwidGVtcFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJ0ZXN0XCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwidGVtcFwiLCBfXy5zZWxlY3QoXCJhXCIpKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJ0ZW1wXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsICd0ZXN0JykuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS5wcm9wZXJ0eSgndGVtcCcsIF9fLnNlbGVjdCgnYScpKS52YWx1ZV9tYXAoJ25hbWUnLCAndGVtcCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfbmFtZVhfYWRkVl9wcm9wZXJ0eVhzZWxlY3RYYVhfbWFya29YX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwibmFtZVwiKS5hZGRWKCkucHJvcGVydHkoX18uc2VsZWN0KFwiYVwiKSwgXCJtYXJrb1wiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJuYW1lXCIpLmFkZFYoKS5wcm9wZXJ0eShfXy5zZWxlY3QoXCJhXCIpLCBcIm1hcmtvXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJuYW1lXCIpLmFkZFYoKS5wcm9wZXJ0eShfXy5zZWxlY3QoXCJhXCIpLCBcIm1hcmtvXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgc3RyaW5nMSkuYWRkVigpLnByb3BlcnR5KF9fLnNlbGVjdChzdHJpbmcwKSwgc3RyaW5nMikudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwibmFtZVwiKS5BZGRWKCkuUHJvcGVydHkoX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLCBcIm1hcmtvXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwibmFtZVwiKS5BZGRWKCkuUHJvcGVydHkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJhXCIpLCBcIm1hcmtvXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgXCJuYW1lXCIpLmFkZFYoKS5wcm9wZXJ0eShfXy5zZWxlY3QoXCJhXCIpLCBcIm1hcmtvXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFwibmFtZVwiKS5hZGRWKCkucHJvcGVydHkoX18uc2VsZWN0KFwiYVwiKSwgXCJtYXJrb1wiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBcIm5hbWVcIikuYWRkVigpLnByb3BlcnR5KF9fLnNlbGVjdChcImFcIiksIFwibWFya29cIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCAnbmFtZScpLmFkZF92KCkucHJvcGVydHkoX18uc2VsZWN0KCdhJyksICdtYXJrbycpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9oYXNYbmFtZV9tYXJrb1hfb3V0WGNyZWF0ZWRYX2FzWGJYX2FkZFZYc2VsZWN0WGFYX2xhYmVsWF9wcm9wZXJ0eVh0ZXN0X3NlbGVjdFhiWF9sYWJlbFhfdmFsdWVNYXBfd2l0aFh0b2tlbnNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmFkZFYoX18uc2VsZWN0KFwiYVwiKS5sYWJlbCgpKS5wcm9wZXJ0eShcInRlc3RcIiwgX18uc2VsZWN0KFwiYlwiKS5sYWJlbCgpKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuYWRkVihfXy5zZWxlY3QoXCJhXCIpLmxhYmVsKCkpLnByb3BlcnR5KFwidGVzdFwiLCBfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuYWRkVihfXy5zZWxlY3QoXCJhXCIpLmxhYmVsKCkpLnByb3BlcnR5KFwidGVzdFwiLCBfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikub3V0KHN0cmluZzMpLmFzKHN0cmluZzQpLmFkZFYoX18uc2VsZWN0KHN0cmluZzApLmxhYmVsKCkpLnByb3BlcnR5KHN0cmluZzUsIF9fLnNlbGVjdChzdHJpbmc0KS5sYWJlbCgpKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLkFkZFYoX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLkxhYmVsKCkpLlByb3BlcnR5KFwidGVzdFwiLCBfXy5TZWxlY3Q8b2JqZWN0PihcImJcIikuTGFiZWwoKSkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5BZGRWKGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKS5MYWJlbCgpKS5Qcm9wZXJ0eShcInRlc3RcIiwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJiXCIpLkxhYmVsKCkpLlZhbHVlTWFwKCkuV2l0aChncmVtbGluZ28uV2l0aE9wdGlvbnMuVG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLmFkZFYoX18uc2VsZWN0KFwiYVwiKS5sYWJlbCgpKS5wcm9wZXJ0eShcInRlc3RcIiwgX18uc2VsZWN0KFwiYlwiKS5sYWJlbCgpKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5hZGRWKF9fLnNlbGVjdChcImFcIikubGFiZWwoKSkucHJvcGVydHkoXCJ0ZXN0XCIsIF9fLnNlbGVjdChcImJcIikubGFiZWwoKSkudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2VucykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikuYWRkVihfXy5zZWxlY3QoXCJhXCIpLmxhYmVsKCkpLnByb3BlcnR5KFwidGVzdFwiLCBfXy5zZWxlY3QoXCJiXCIpLmxhYmVsKCkpLnZhbHVlTWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKS5hZGRfdihfXy5zZWxlY3QoJ2EnKS5sYWJlbCgpKS5wcm9wZXJ0eSgndGVzdCcsIF9fLnNlbGVjdCgnYicpLmxhYmVsKCkpLnZhbHVlX21hcCgpLndpdGhfKFdpdGhPcHRpb25zLnRva2VucykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcInRlc3RcIixcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwidGVzdFwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcInRlc3RcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcInRlc3RcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcInRlc3RcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJ0ZXN0XCIsIFwic29mdHdhcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcInRlc3RcIiwgXCJzb2Z0d2FyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwidGVzdFwiLCBcInNvZnR3YXJlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ3Rlc3QnLCAnc29mdHdhcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWWFZfaGFzWG5hbWVfbWFya29YX3Byb3BlcnRpZXNYbmFtZVhfa2V5WF9sYWJlbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcIm5hbWVcIikua2V5KCkpLmxhYmVsKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5rZXkoKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5rZXkoKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKF9fLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkucHJvcGVydGllcyhzdHJpbmcwKS5rZXkoKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzPG9iamVjdD4oXCJuYW1lXCIpLktleSgpKS5MYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwibmFtZVwiKS5LZXkoKSkuTGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoX18uVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5rZXkoKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcIm5hbWVcIikua2V5KCkpLmxhYmVsKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihfXy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmtleSgpKS5sYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoX18uVigpLmhhcygnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ25hbWUnKS5rZXkoKSkubGFiZWwoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWX3Byb3BlcnR5WGxhYmVsX3BlcnNvblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5sYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShULmxhYmVsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShULmxhYmVsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5sYWJlbCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuUHJvcGVydHkoVC5MYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShncmVtbGluZ28uVC5MYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5sYWJlbCwgXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShULmxhYmVsLCBcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCkucHJvcGVydHkoVC5sYWJlbCwgJ3BlcnNvbicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfYWRkVl9wcm9wZXJ0eVhsYWJlbF9wZXJzb252YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShULmxhYmVsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuUHJvcGVydHkoVC5MYWJlbCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVigpLlByb3BlcnR5KGdyZW1saW5nby5ULkxhYmVsLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLnByb3BlcnR5KFQubGFiZWwsIHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWX3Byb3BlcnR5WGlkXzFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLnByb3BlcnR5KFQuaWQsIDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLnByb3BlcnR5KFQuaWQsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLlByb3BlcnR5KFQuSWQsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkoZ3JlbWxpbmdvLlQuSWQsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigpLnByb3BlcnR5KFQuaWQsIDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShULmlkLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLnByb3BlcnR5KFQuaWRfLCAxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0lkKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0lkKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0lkKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0lkKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0lkKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0lkKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzSWQoXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19pZCgnMScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZFZfcHJvcGVydHlYaWR2YXJfMXZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KFQuaWQsIHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShULklkLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkoZ3JlbWxpbmdvLlQuSWQsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKCkucHJvcGVydHkoVC5pZCwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCkucHJvcGVydHkoVC5pZF8sIHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzSWQoXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNJZChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzSWQoXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNJZChcIjFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0lkKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfaWQoJzEnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWX3Byb3BlcnR5WG1hcFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoW1wibmFtZVwiOiBcImZvb1wiLCBcImFnZVwiOiA0MiBdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KFtcIm5hbWVcIjpcImZvb1wiLCBcImFnZVwiOjQyXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoW1wibmFtZVwiOlwiZm9vXCIsIFwiYWdlXCI6NDJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKCkucHJvcGVydHkobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuUHJvcGVydHkobmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwibmFtZVwiLCBcImZvb1wiIH0sIHsgXCJhZ2VcIiwgNDIgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcImZvb1wiLCBcImFnZVwiOiA0MiB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShbXCJuYW1lXCI6XCJmb29cIiwgXCJhZ2VcIjo0Ml0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJuYW1lXCIsIFwiZm9vXCIpOyBwdXQoXCJhZ2VcIiwgNDIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLnByb3BlcnR5KG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJmb29cIl0sIFtcImFnZVwiLCA0Ml1dKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLnByb3BlcnR5KHsgJ25hbWUnOiAnZm9vJywgJ2FnZSc6IDQyIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJmb29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnZm9vJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfYWRkVl9wcm9wZXJ0eVhzaW5nbGVfbWFwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFtcIm5hbWVcIjogXCJmb29cIiwgXCJhZ2VcIjogNDIgXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFtcIm5hbWVcIjpcImZvb1wiLCBcImFnZVwiOjQyXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBbXCJuYW1lXCI6XCJmb29cIiwgXCJhZ2VcIjo0Ml0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwibmFtZVwiLCBcImZvb1wiIH0sIHsgXCJhZ2VcIiwgNDIgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcImZvb1wiLCBcImFnZVwiOiA0MiB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFtcIm5hbWVcIjpcImZvb1wiLCBcImFnZVwiOjQyXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwibmFtZVwiLCBcImZvb1wiKTsgcHV0KFwiYWdlXCIsIDQyKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJmb29cIl0sIFtcImFnZVwiLCA0Ml1dKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgeyAnbmFtZSc6ICdmb28nLCAnYWdlJzogNDIgfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJmb29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJmb29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdmb28nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX2Zvb1hfcHJvcGVydHlYbmFtZV9zZXRYYmFyWF9hZ2VfNDNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcImZvb1wiKS5wcm9wZXJ0eShcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgc3RyaW5nMCwgc3RyaW5nMSkucHJvcGVydHkoc3RyaW5nMiwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCBcIm5hbWVcIiwgXCJmb29cIikuUHJvcGVydHkoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLlByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcImZvb1wiKS5wcm9wZXJ0eShcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJmb29cIikucHJvcGVydHkoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICduYW1lJywgJ2ZvbycpLnByb3BlcnR5KCdhZ2UnLCA0MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoJ25hbWUnLCdmb28nKS5wcm9wZXJ0eShbXCJuYW1lXCI6IENhcmRpbmFsaXR5LnNldChcImJhclwiKSwgXCJhZ2VcIjogNDMgXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnZm9vJykucHJvcGVydHkoW1wibmFtZVwiOkNhcmRpbmFsaXR5LnNldChcImJhclwiKSwgXCJhZ2VcIjo0M10pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcygnbmFtZScsICdmb28nKS5wcm9wZXJ0eShbXCJuYW1lXCI6Q2FyZGluYWxpdHkuc2V0KFwiYmFyXCIpLCBcImFnZVwiOjQzXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5wcm9wZXJ0eShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiZm9vXCIpLlByb3BlcnR5KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgQ2FyZGluYWxpdHlWYWx1ZS5TZXQoXCJiYXJcIikgfSwgeyBcImFnZVwiLCA0MyB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiZm9vXCIpLlByb3BlcnR5KG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm5hbWVcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2V0KFwiYmFyXCIpLCBcImFnZVwiOiA0MyB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnZm9vJykucHJvcGVydHkoW1wibmFtZVwiOkNhcmRpbmFsaXR5LnNldChcImJhclwiKSwgXCJhZ2VcIjo0M10pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgQ2FyZGluYWxpdHkuc2V0KFwiYmFyXCIpKTsgcHV0KFwiYWdlXCIsIDQzKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KG5ldyBNYXAoW1tcIm5hbWVcIiwgQ2FyZGluYWxpdHlWYWx1ZS5zZXQoXCJiYXJcIildLCBbXCJhZ2VcIiwgNDNdXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdmb28nKS5wcm9wZXJ0eSh7ICduYW1lJzogQ2FyZGluYWxpdHlWYWx1ZS5zZXRfKCdiYXInKSwgJ2FnZSc6IDQzIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJmb29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnZm9vJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmFyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiYmFyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImJhclwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmFyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmFyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYmFyXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdiYXInKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiLDQzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiLCA0MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDQzKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiLCA0MykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgNDMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImFnZVwiLCA0MykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiLCA0MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiLCA0MykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdhZ2UnLCA0MykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiw0MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgNDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfZm9vWF9wcm9wZXJ0eVhzZXRfbmFtZV9iYXJfYWdlX3NpbmdsZVg0M1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcImZvb1wiKS5wcm9wZXJ0eShcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgc3RyaW5nMCwgc3RyaW5nMSkucHJvcGVydHkoc3RyaW5nMiwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKCkuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2luZ2xlLCBcIm5hbWVcIiwgXCJmb29cIikuUHJvcGVydHkoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKCkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5LlNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLlByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwibmFtZVwiLCBcImZvb1wiKS5wcm9wZXJ0eShcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVigpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJuYW1lXCIsIFwiZm9vXCIpLnByb3BlcnR5KFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcIm5hbWVcIiwgXCJmb29cIikucHJvcGVydHkoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICduYW1lJywgJ2ZvbycpLnByb3BlcnR5KCdhZ2UnLCA0MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoJ25hbWUnLCdmb28nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIFtcIm5hbWVcIjpcImJhclwiLCBcImFnZVwiOiBDYXJkaW5hbGl0eS5zaW5nbGUoNDMpIF0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKCduYW1lJywgJ2ZvbycpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgW1wibmFtZVwiOlwiYmFyXCIsIFwiYWdlXCI6Q2FyZGluYWxpdHkuc2luZ2xlKDQzKV0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcygnbmFtZScsICdmb28nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIFtcIm5hbWVcIjpcImJhclwiLCBcImFnZVwiOkNhcmRpbmFsaXR5LnNpbmdsZSg0MyldKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgbWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImZvb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TZXQsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgXCJiYXJcIiB9LCB7IFwiYWdlXCIsIENhcmRpbmFsaXR5VmFsdWUuU2luZ2xlKDQzKSB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiZm9vXCIpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5TZXQsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm5hbWVcIjogXCJiYXJcIiwgXCJhZ2VcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2luZ2xlKDQzKSB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnZm9vJykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCBbXCJuYW1lXCI6XCJiYXJcIiwgXCJhZ2VcIjpDYXJkaW5hbGl0eS5zaW5nbGUoNDMpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJmb29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJuYW1lXCIsIFwiYmFyXCIpOyBwdXQoXCJhZ2VcIiwgQ2FyZGluYWxpdHkuc2luZ2xlKDQzKSk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImZvb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJiYXJcIl0sIFtcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSg0MyldXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdmb28nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXRfLCB7ICduYW1lJzogJ2JhcicsICdhZ2UnOiBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSg0MykgfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJmb29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJmb29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImZvb1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZm9vXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdmb28nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcImJhclwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImJhclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiYmFyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJiYXJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ2JhcicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsNDMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDQzKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgNDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIsIDQzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiLCA0MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDQzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDQzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDQzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScsIDQzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiLDQyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDQyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgNDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiLCA0MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdhZ2UnLCA0MikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfYWRkVl9wcm9wZXJ0eVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eShOb25lKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfYWRkVl9wcm9wZXJ0eVhlbXB0eVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFs6XSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoWzpdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoWzpdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFs6XSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkobmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KHsgIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZXMoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWX3Byb3BlcnR5WHNldF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJmb29cIikucHJvcGVydHkoc2V0LCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcImZvb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcImZvb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCBtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJmb29cIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2V0LCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcImZvb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuU2V0LCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcImZvb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zZXQsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJmb29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZm9vXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdignZm9vJykucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0XywgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcImZvb1wiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwiZm9vXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwiZm9vXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcImZvb1wiKS5WYWx1ZXM8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJmb29cIikuVmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJmb29cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwiZm9vXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcImZvb1wiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ2ZvbycpLnZhbHVlcygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZFZfcHJvcGVydHlYc2V0X2VtcHR5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJmb29cIikucHJvcGVydHkoc2V0LCBbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiZm9vXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgWzpdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJmb29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCBbOl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoQ2FyZGluYWxpdHkuc2V0LCBtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJmb29cIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuU2V0LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwiZm9vXCIpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5TZXQsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwiZm9vXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgWzpdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwiZm9vXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiZm9vXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldCwgbmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ2ZvbycpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNldF8sIHsgIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZXMoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWWHBlcnNvblhfcHJvcGVydHlYbmFtZV9qb3NoWF9wcm9wZXJ0eVhhZ2VfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcImFnZVwiLG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcImFnZVwiLCAob2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnYWdlJywgTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfYWRkVlhwZXJzb25YX3Byb3BlcnR5WG5hbWVfbWFya29YX3Byb3BlcnR5WGZyaWVuZFdlaWdodF9udWxsX2FjbF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJmcmllbmRXZWlnaHRcIiwgbnVsbCwgXCJhY2xcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJmcmllbmRXZWlnaHRcIiwgbnVsbCwgXCJhY2xcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIG51bGwsIFwiYWNsXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgb2JqZWN0MCwgc3RyaW5nNCwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIG51bGwsIFwiYWNsXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIG5pbCwgXCJhY2xcIiwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJmcmllbmRXZWlnaHRcIiwgbnVsbCwgXCJhY2xcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImZyaWVuZFdlaWdodFwiLCBudWxsLCBcImFjbFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiZnJpZW5kV2VpZ2h0XCIsIG51bGwsIFwiYWNsXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2ZyaWVuZFdlaWdodCcsIE5vbmUsICdhY2wnLCBOb25lKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiZnJpZW5kV2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImZyaWVuZFdlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiZnJpZW5kV2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJmcmllbmRXZWlnaHRcIiwgKG9iamVjdCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiZnJpZW5kV2VpZ2h0XCIsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImZyaWVuZFdlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImZyaWVuZFdlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImZyaWVuZFdlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdmcmllbmRXZWlnaHQnLCBOb25lKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5oYXMoXCJhY2xcIixudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmhhcyhcImFjbFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5oYXMoXCJhY2xcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0aWVzKHN0cmluZzMpLmhhcyhzdHJpbmc0LCBvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydGllczxvYmplY3Q+KFwiZnJpZW5kV2VpZ2h0XCIpLkhhcyhcImFjbFwiLCAob2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLkhhcyhcImFjbFwiLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmhhcyhcImFjbFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuaGFzKFwiYWNsXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5oYXMoXCJhY2xcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2ZyaWVuZFdlaWdodCcpLmhhcygnYWNsJywgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJmcmllbmRXZWlnaHRcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydGllczxvYmplY3Q+KFwiZnJpZW5kV2VpZ2h0XCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydGllcyhcImZyaWVuZFdlaWdodFwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiZnJpZW5kV2VpZ2h0XCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2ZyaWVuZFdlaWdodCcpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfYWxpY2VYX3Byb3BlcnR5WHNpbmdsZV9hZ2VfdW5pb25YYWdlX2NvbnN0YW50WDFYWF9zdW1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShzaW5nbGUsIFwiYWdlXCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwiYWdlXCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcImFnZVwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsIFwiYWdlXCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuU2luZ2xlLCBcImFnZVwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJhZ2VcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcImFnZVwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwiYWdlXCIsIDUwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgJ2FnZScsIDUwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxpY2VcIikucHJvcGVydHkoXCJhZ2VcIiwgX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBjb25zdGFudCgxKSkuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18uY29uc3RhbnQoMSkpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJhZ2VcIiwgX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5jb25zdGFudCgxKSkuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgX18udW5pb24oX18udmFsdWVzKHN0cmluZzMpLCBfXy5jb25zdGFudChudW1iZXIwKSkuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShcImFnZVwiLCBfXy5VbmlvbjxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLCBfXy5Db25zdGFudDxvYmplY3Q+KDEpKS5TdW08b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShcImFnZVwiLCBncmVtbGluZ28uVF9fLlVuaW9uKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KDEpKS5TdW0oKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18uY29uc3RhbnQoMSkpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18uY29uc3RhbnQoMSkpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYWdlXCIsIF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18uY29uc3RhbnQoMSkpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykucHJvcGVydHkoJ2FnZScsIF9fLnVuaW9uKF9fLnZhbHVlcygnYWdlJyksIF9fLmNvbnN0YW50KDEpKS5zdW1fKCkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJhZ2VcIiw1MCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCA1MCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIDUwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgNTApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ2FnZScsIDUwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwiYWdlXCIsNTEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIDUxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgNTEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIDUxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcImFnZVwiLCA1MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIDUxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIDUxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIDUxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICdhZ2UnLCA1MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9saW1pdFgzWF9hZGRWWHNvZnR3YXJlWF9hZ2dyZWdhdGVYYTFYX2J5WGxhYmVsWF9hZ2dyZWdhdGVYYTJYX2J5WGxhYmVsWF9jYXBYYTFfYTJYX3NlbGVjdFhhX2JYX2J5WHVuZm9sZFhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxpbWl0KDMpLmFkZFYoXCJzb2Z0d2FyZVwiKS5hZ2dyZWdhdGUoXCJhMVwiKS5ieShULmxhYmVsKS5hZ2dyZWdhdGUoXCJhMlwiKS5ieShULmxhYmVsKS5jYXAoXCJhMVwiLCBcImEyXCIpLnNlbGVjdChcImExXCIsXCJhMlwiKS5ieSh1bmZvbGQoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubGltaXQoMykuYWRkVihcInNvZnR3YXJlXCIpLmFnZ3JlZ2F0ZShcImExXCIpLmJ5KFQubGFiZWwpLmFnZ3JlZ2F0ZShcImEyXCIpLmJ5KFQubGFiZWwpLmNhcChcImExXCIsIFwiYTJcIikuc2VsZWN0KFwiYTFcIiwgXCJhMlwiKS5ieShfXy51bmZvbGQoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxpbWl0KDMpLmFkZFYoXCJzb2Z0d2FyZVwiKS5hZ2dyZWdhdGUoXCJhMVwiKS5ieShULmxhYmVsKS5hZ2dyZWdhdGUoXCJhMlwiKS5ieShULmxhYmVsKS5jYXAoXCJhMVwiLCBcImEyXCIpLnNlbGVjdChcImExXCIsIFwiYTJcIikuYnkoX18udW5mb2xkKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubGltaXQobnVtYmVyMCkuYWRkVihzdHJpbmcwKS5hZ2dyZWdhdGUoc3RyaW5nMSkuYnkoVC5sYWJlbCkuYWdncmVnYXRlKHN0cmluZzIpLmJ5KFQubGFiZWwpLmNhcChzdHJpbmcxLCBzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMSwgc3RyaW5nMikuYnkoX18udW5mb2xkKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5MaW1pdDxvYmplY3Q+KDMpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5BZ2dyZWdhdGUoXCJhMVwiKS5CeShULkxhYmVsKS5BZ2dyZWdhdGUoXCJhMlwiKS5CeShULkxhYmVsKS5DYXA8b2JqZWN0PihcImExXCIsIFwiYTJcIikuU2VsZWN0PG9iamVjdD4oXCJhMVwiLCBcImEyXCIpLkJ5KF9fLlVuZm9sZDxvYmplY3Q+KCkuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxpbWl0KDMpLkFkZFYoXCJzb2Z0d2FyZVwiKS5BZ2dyZWdhdGUoXCJhMVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQWdncmVnYXRlKFwiYTJcIikuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpLkNhcChcImExXCIsIFwiYTJcIikuU2VsZWN0KFwiYTFcIiwgXCJhMlwiKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubGltaXQoMykuYWRkVihcInNvZnR3YXJlXCIpLmFnZ3JlZ2F0ZShcImExXCIpLmJ5KFQubGFiZWwpLmFnZ3JlZ2F0ZShcImEyXCIpLmJ5KFQubGFiZWwpLmNhcChcImExXCIsIFwiYTJcIikuc2VsZWN0KFwiYTFcIiwgXCJhMlwiKS5ieShfXy51bmZvbGQoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5saW1pdCgzKS5hZGRWKFwic29mdHdhcmVcIikuYWdncmVnYXRlKFwiYTFcIikuYnkoVC5sYWJlbCkuYWdncmVnYXRlKFwiYTJcIikuYnkoVC5sYWJlbCkuY2FwKFwiYTFcIiwgXCJhMlwiKS5zZWxlY3QoXCJhMVwiLCBcImEyXCIpLmJ5KF9fLnVuZm9sZCgpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxpbWl0KDMpLmFkZFYoXCJzb2Z0d2FyZVwiKS5hZ2dyZWdhdGUoXCJhMVwiKS5ieShULmxhYmVsKS5hZ2dyZWdhdGUoXCJhMlwiKS5ieShULmxhYmVsKS5jYXAoXCJhMVwiLCBcImEyXCIpLnNlbGVjdChcImExXCIsIFwiYTJcIikuYnkoX18udW5mb2xkKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5saW1pdCgzKS5hZGRfdignc29mdHdhcmUnKS5hZ2dyZWdhdGUoJ2ExJykuYnkoVC5sYWJlbCkuYWdncmVnYXRlKCdhMicpLmJ5KFQubGFiZWwpLmNhcCgnYTEnLCAnYTInKS5zZWxlY3QoJ2ExJywgJ2EyJykuYnkoX18udW5mb2xkKCkuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19hZGRWX3Byb3BlcnR5WG5hbWVfbWFya29YX3dpdGhYa2V5X3ZhbHVlWF92YWx1ZXNYbmFtZV9rZXlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS52YWx1ZXMoXCJuYW1lXCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikud2l0aChcImtleVwiLCBcInZhbHVlXCIpLnZhbHVlcyhcIm5hbWVcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikud2l0aChcImtleVwiLCBcInZhbHVlXCIpLnZhbHVlcyhcIm5hbWVcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVigpLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzEpLndpdGgoc3RyaW5nMiwgc3RyaW5nMykudmFsdWVzKHN0cmluZzAsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLldpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5XaXRoKFwia2V5XCIsIFwidmFsdWVcIikuVmFsdWVzKFwibmFtZVwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS53aXRoKFwia2V5XCIsIFwidmFsdWVcIikudmFsdWVzKFwibmFtZVwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikud2l0aChcImtleVwiLCBcInZhbHVlXCIpLnZhbHVlcyhcIm5hbWVcIiwgXCJrZXlcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLndpdGhfKFwia2V5XCIsIFwidmFsdWVcIikudmFsdWVzKFwibmFtZVwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCkucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS53aXRoXygna2V5JywgJ3ZhbHVlJykudmFsdWVzKCduYW1lJywgJ2tleScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZFZfcHJvcGVydHlYbmFtZV9tYXJrb19zaW5jZV8yMDEwWF93aXRoWGtleV92YWx1ZVhfcHJvcGVydGllc1huYW1lWF92YWx1ZXNYc2luY2Vfa2V5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiLCBcInNpbmNlXCIsIDIwMTApLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS52YWx1ZXMoXCJzaW5jZVwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIsIFwic2luY2VcIiwgMjAxMCkud2l0aChcImtleVwiLCBcInZhbHVlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlcyhcInNpbmNlXCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIsIFwic2luY2VcIiwgMjAxMCkud2l0aChcImtleVwiLCBcInZhbHVlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlcyhcInNpbmNlXCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoKS5wcm9wZXJ0eShzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyLCBudW1iZXIwKS53aXRoKHN0cmluZzMsIHN0cmluZzQpLnByb3BlcnRpZXMoc3RyaW5nMCkudmFsdWVzKHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIsIFwic2luY2VcIiwgMjAxMCkuV2l0aChcImtleVwiLCBcInZhbHVlXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuVmFsdWVzPG9iamVjdD4oXCJzaW5jZVwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVigpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIsIFwic2luY2VcIiwgMjAxMCkuV2l0aChcImtleVwiLCBcInZhbHVlXCIpLlByb3BlcnRpZXMoXCJuYW1lXCIpLlZhbHVlcyhcInNpbmNlXCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVigpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIsIFwic2luY2VcIiwgMjAxMCkud2l0aChcImtleVwiLCBcInZhbHVlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlcyhcInNpbmNlXCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiLCBcInNpbmNlXCIsIDIwMTApLndpdGgoXCJrZXlcIiwgXCJ2YWx1ZVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS52YWx1ZXMoXCJzaW5jZVwiLCBcImtleVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKCkucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIiwgXCJzaW5jZVwiLCAyMDEwKS53aXRoXyhcImtleVwiLCBcInZhbHVlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlcyhcInNpbmNlXCIsIFwia2V5XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycsICdzaW5jZScsIDIwMTApLndpdGhfKCdrZXknLCAndmFsdWUnKS5wcm9wZXJ0aWVzKCduYW1lJykudmFsdWVzKCdzaW5jZScsICdrZXknKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMVhfYXNCb29sIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuQXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmFzX2Jvb2woKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYM18xNFhfYXNCb29sIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDMuMTQpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMy4xNCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMy4xNCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMy4xNCkuQXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgzLjE0KS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgzLjE0KS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMy4xNCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDMuMTQpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDMuMTQpLmFzX2Jvb2woKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbmVnXzFYX2FzQm9vbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgtMSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgtMSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoLTEpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KC0xKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KC0xKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgtMSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KC0xKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoLTEpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KC0xKS5hc19ib29sKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDBYX2FzQm9vbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgwKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDApLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMCkuQXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgwKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgwKS5hc19ib29sKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG5lZ18wWF9hc0Jvb2wiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoLTAuMCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgtMC4wKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgtMC4wKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigtMC4wKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KC0wLjApLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KC0wLjApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgtMC4wKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoLTAuMCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoLTAuMCkuYXNfYm9vbCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhOYU5YX2FzQm9vbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChOYU4pLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChOYU4pLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5OYU4oKSkuQXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoTmFOKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5OYU4pLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCduYW4nKSkuYXNfYm9vbCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhib29sX3RydWVYX2FzQm9vbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCh0cnVlKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KHRydWUpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KHRydWUpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChib29sZWFuMCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pih0cnVlKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KHRydWUpLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KHRydWUpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCh0cnVlKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QodHJ1ZSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoVHJ1ZSkuYXNfYm9vbCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhmYWxzZVhfYXNCb29sIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KGZhbHNlKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KGZhbHNlKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChmYWxzZSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGJvb2xlYW4wKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KGZhbHNlKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGZhbHNlKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChmYWxzZSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KGZhbHNlKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoZmFsc2UpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KEZhbHNlKS5hc19ib29sKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WHRydWVYX2FzQm9vbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgndHJ1ZScpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoJ3RydWUnKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgndHJ1ZScpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwidHJ1ZVwiKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwidHJ1ZVwiKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgndHJ1ZScpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcInRydWVcIikuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwidHJ1ZVwiKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgndHJ1ZScpLmFzX2Jvb2woKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbWl4ZWRfdHJ1ZVhfYXNCb29sIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KCd0UlVlJykuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgndFJVZScpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KCd0UlVlJykuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJ0UlVlXCIpLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJ0UlVlXCIpLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KCd0UlVlJykuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwidFJVZVwiKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJ0UlVlXCIpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCd0UlVlJykuYXNfYm9vbCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsWF9hc0Jvb2wiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuQXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5hc19ib29sKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGhlbGxvWF9hc0Jvb2wiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoJ2hlbGxvJykuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgnaGVsbG8nKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgnaGVsbG8nKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcImhlbGxvXCIpLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJoZWxsb1wiKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgnaGVsbG8nKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJoZWxsb1wiKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJoZWxsb1wiKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnaGVsbG8nKS5hc19ib29sKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFfMlhfYXNCb29sIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFsxLDJdKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxLCAyXSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDJdKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSkuQXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezEsIDJ9KS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMl0pLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgfX0pLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMl0pLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAyXSkuYXNfYm9vbCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYWF9sb2NhbFhfb3V0RV9jb3VudFhfYXNCb29sIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKG91dEUoKS5jb3VudCgpKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5jb3VudCgpKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5jb3VudCgpKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLk91dEUoKS5Db3VudCgpKS5Bc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uT3V0RSgpLkNvdW50KCkpLkFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5jb3VudCgpKS5hc0Jvb2woKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18ub3V0RSgpLmNvdW50KCkpLmFzQm9vbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuY291bnQoKSkuYXNCb29sKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18ub3V0X2UoKS5jb3VudCgpKS5hc19ib29sKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zYWNrWGFzc2lnblhfYnlYX2hhc0xhYmVsWHBlcnNvblhfY291bnRfYXNCb29sWF9zYWNrWGFuZFhfYnlYX291dEVfY291bnRfYXNCb29sWF9zYWNrX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2Fjayhhc3NpZ24pLmJ5KF9fLmhhc0xhYmVsKCdwZXJzb24nKS5jb3VudCgpLmFzQm9vbCgpKS5zYWNrKGFuZCkuYnkoX18ub3V0RSgpLmNvdW50KCkuYXNCb29sKCkpLnNhY2soKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoX18uaGFzTGFiZWwoJ3BlcnNvbicpLmNvdW50KCkuYXNCb29sKCkpLnNhY2soT3BlcmF0b3IuYW5kKS5ieShfXy5vdXRFKCkuY291bnQoKS5hc0Jvb2woKSkuc2FjaygpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoX18uaGFzTGFiZWwoJ3BlcnNvbicpLmNvdW50KCkuYXNCb29sKCkpLnNhY2soT3BlcmF0b3IuYW5kKS5ieShfXy5vdXRFKCkuY291bnQoKS5hc0Jvb2woKSkuc2FjaygpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KF9fLmhhc0xhYmVsKHN0cmluZzApLmNvdW50KCkuYXNCb29sKCkpLnNhY2soT3BlcmF0b3IuYW5kKS5ieShfXy5vdXRFKCkuY291bnQoKS5hc0Jvb2woKSkuc2FjaygpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TYWNrKE9wZXJhdG9yLkFzc2lnbikuQnkoX18uSGFzTGFiZWwoXCJwZXJzb25cIikuQ291bnQoKS5Bc0Jvb2woKSkuU2FjayhPcGVyYXRvci5BbmQpLkJ5KF9fLk91dEUoKS5Db3VudCgpLkFzQm9vbCgpKS5TYWNrPG9iamVjdD4oKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5Bc3NpZ24pLkJ5KGdyZW1saW5nby5UX18uSGFzTGFiZWwoXCJwZXJzb25cIikuQ291bnQoKS5Bc0Jvb2woKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuQW5kKS5CeShncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLkFzQm9vbCgpKS5TYWNrKCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShfXy5oYXNMYWJlbCgncGVyc29uJykuY291bnQoKS5hc0Jvb2woKSkuc2FjayhPcGVyYXRvci5hbmQpLmJ5KF9fLm91dEUoKS5jb3VudCgpLmFzQm9vbCgpKS5zYWNrKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuY291bnQoKS5hc0Jvb2woKSkuc2FjayhPcGVyYXRvci5hbmQpLmJ5KF9fLm91dEUoKS5jb3VudCgpLmFzQm9vbCgpKS5zYWNrKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoX18uaGFzTGFiZWwoXCJwZXJzb25cIikuY291bnQoKS5hc0Jvb2woKSkuc2FjayhPcGVyYXRvci5hbmQpLmJ5KF9fLm91dEUoKS5jb3VudCgpLmFzQm9vbCgpKS5zYWNrKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShfXy5oYXNfbGFiZWwoJ3BlcnNvbicpLmNvdW50KCkuYXNfYm9vbCgpKS5zYWNrKE9wZXJhdG9yLmFuZF8pLmJ5KF9fLm91dF9lKCkuY291bnQoKS5hc19ib29sKCkpLnNhY2soKS5wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WHN0clhfYXNEYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiMjAyMy0wOC0wMlQwMDowMDowMFpcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcIjIwMjMtMDgtMDJUMDA6MDA6MDBaXCIpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiMjAyMy0wOC0wMlQwMDowMDowMFpcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCIyMDIzLTA4LTAyVDAwOjAwOjAwWlwiKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiMjAyMy0wOC0wMlQwMDowMDowMFpcIikuQXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCIyMDIzLTA4LTAyVDAwOjAwOjAwWlwiKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCIyMDIzLTA4LTAyVDAwOjAwOjAwWlwiKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCIyMDIzLTA4LTAyVDAwOjAwOjAwWlwiKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnMjAyMy0wOC0wMlQwMDowMDowMFonKS5hc19kYXRlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WHN0cl9vZmZzZXRYX2FzRGF0ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcIjIwMjMtMDgtMDJUMDA6MDA6MDAtMDc6MDBcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcIjIwMjMtMDgtMDJUMDA6MDA6MDAtMDc6MDBcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCIyMDIzLTA4LTAyVDAwOjAwOjAwLTA3OjAwXCIpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiMjAyMy0wOC0wMlQwMDowMDowMC0wNzowMFwiKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiMjAyMy0wOC0wMlQwMDowMDowMC0wNzowMFwiKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcIjIwMjMtMDgtMDJUMDA6MDA6MDAtMDc6MDBcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiMjAyMy0wOC0wMlQwMDowMDowMC0wNzowMFwiKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCIyMDIzLTA4LTAyVDAwOjAwOjAwLTA3OjAwXCIpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCcyMDIzLTA4LTAyVDAwOjAwOjAwLTA3OjAwJykuYXNfZGF0ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxNjk0MDE3NzA3MDAwWF9hc0RhdGUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMTY5NDAxNzcwNzAwMCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxNjk0MDE3NzA3MDAwKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxNjk0MDE3NzA3MDAwKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxNjk0MDE3NzA3MDAwKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDE2OTQwMTc3MDcwMDApLkFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDE2OTQwMTc3MDcwMDApLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxNjk0MDE3NzA3MDAwKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMTY5NDAxNzcwNzAwMCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QobG9uZygxNjk0MDE3NzA3MDAwKSkuYXNfZGF0ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxNjk0MDE3NzA4MDAwTFhfYXNEYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDE2OTQwMTc3MDgwMDBMKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDE2OTQwMTc3MDgwMDBsKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxNjk0MDE3NzA4MDAwbCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxvbmcwKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDE2OTQwMTc3MDgwMDBsKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDY0KDE2OTQwMTc3MDgwMDApKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxNjk0MDE3NzA4MDAwbCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDE2OTQwMTc3MDgwMDBsKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMTY5NDAxNzcwODAwMCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QobG9uZygxNjk0MDE3NzA4MDAwKSkuYXNfZGF0ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxNjk0MDE3NzA5MDAwZFhfYXNEYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDE2OTQwMTc3MDkwMDAuMWQpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMTY5NDAxNzcwOTAwMC4xZCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMTY5NDAxNzcwOTAwMC4xZCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMTY5NDAxNzcwOTAwMC4xZCkuQXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxNjk0MDE3NzA5MDAwLjEpLkFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDE2OTQwMTc3MDkwMDAuMWQpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxNjk0MDE3NzA5MDAwLjFkKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMTY5NDAxNzcwOTAwMC4xKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxNjk0MDE3NzA5MDAwLjEpLmFzX2RhdGUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV8yWF9hc0RhdGUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsMl0pLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzEsIDJdKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMl0pLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiB9KS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317MSwgMn0pLkFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyXSkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyB9fSkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAyXSkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDJdKS5hc19kYXRlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxYX2FzRGF0ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLkFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmFzX2RhdGUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYaW52YWxpZHN0clhfYXNEYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KCdUaGlzIFN0cmluZyBpcyBub3QgYW4gSVNPIDg2MDEgRGF0ZScpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoJ1RoaXMgU3RyaW5nIGlzIG5vdCBhbiBJU08gODYwMSBEYXRlJykuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoJ1RoaXMgU3RyaW5nIGlzIG5vdCBhbiBJU08gODYwMSBEYXRlJykuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJUaGlzIFN0cmluZyBpcyBub3QgYW4gSVNPIDg2MDEgRGF0ZVwiKS5Bc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiVGhpcyBTdHJpbmcgaXMgbm90IGFuIElTTyA4NjAxIERhdGVcIikuQXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoJ1RoaXMgU3RyaW5nIGlzIG5vdCBhbiBJU08gODYwMSBEYXRlJykuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiVGhpcyBTdHJpbmcgaXMgbm90IGFuIElTTyA4NjAxIERhdGVcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiVGhpcyBTdHJpbmcgaXMgbm90IGFuIElTTyA4NjAxIERhdGVcIikuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ1RoaXMgU3RyaW5nIGlzIG5vdCBhbiBJU08gODYwMSBEYXRlJykuYXNfZGF0ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGJpcnRoZGF5WF9hc0RhdGVfYXNOdW1iZXJfYXNEYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMjAyMC0wOC0wMlwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE5ODgtMTItMTBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjIwMDItMDItMDFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJzdXp5XCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxOTY1LTEwLTMxXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIyMDIwLTA4LTAyXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9oblwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTk4OC0xMi0xMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjIwMDItMDItMDFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJzdXp5XCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxOTY1LTEwLTMxXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMjAyMC0wOC0wMlwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE5ODgtMTItMTBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIyMDAyLTAyLTAxXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTk2NS0xMC0zMVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc4KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzEwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjIwMjAtMDgtMDJcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxOTg4LTEyLTEwXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiY2hhcmxpZVwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMjAwMi0wMi0wMVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE5NjUtMTAtMzFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjIwMjAtMDgtMDJcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxOTg4LTEyLTEwXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiY2hhcmxpZVwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMjAwMi0wMi0wMVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE5NjUtMTAtMzFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIyMDIwLTA4LTAyXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9oblwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTk4OC0xMi0xMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjIwMDItMDItMDFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJzdXp5XCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxOTY1LTEwLTMxXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjIwMjAtMDgtMDJcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxOTg4LTEyLTEwXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2hhcmxpZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMjAwMi0wMi0wMVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE5NjUtMTAtMzFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMjAyMC0wOC0wMlwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE5ODgtMTItMTBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIyMDAyLTAyLTAxXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTk2NS0xMC0zMVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLnByb3BlcnR5KCdiaXJ0aGRheScsICcyMDIwLTA4LTAyJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvaG4nKS5wcm9wZXJ0eSgnYmlydGhkYXknLCAnMTk4OC0xMi0xMCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdjaGFybGllJykucHJvcGVydHkoJ2JpcnRoZGF5JywgJzIwMDItMDItMDEnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnc3V6eScpLnByb3BlcnR5KCdiaXJ0aGRheScsICcxOTY1LTEwLTMxJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc0RhdGUoKS5hc051bWJlcigpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNEYXRlKCkuYXNOdW1iZXIoKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc0RhdGUoKS5hc051bWJlcigpLmFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNEYXRlKCkuYXNOdW1iZXIoKS5hc0RhdGUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImJpcnRoZGF5XCIpLkFzRGF0ZSgpLkFzTnVtYmVyKCkuQXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJiaXJ0aGRheVwiKS5Bc0RhdGUoKS5Bc051bWJlcigpLkFzRGF0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImJpcnRoZGF5XCIpLmFzRGF0ZSgpLmFzTnVtYmVyKCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImJpcnRoZGF5XCIpLmFzRGF0ZSgpLmFzTnVtYmVyKCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImJpcnRoZGF5XCIpLmFzRGF0ZSgpLmFzTnVtYmVyKCkuYXNEYXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdiaXJ0aGRheScpLmFzX2RhdGUoKS5hc19udW1iZXIoKS5hc19kYXRlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDViWF9hc051bWJlciIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCg1YikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDViKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDViKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChieXRlMCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KChzYnl0ZSkgNSkuQXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDgoNSkpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoKGJ5dGUpNSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEJ5dGUoNSkpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDUpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoNSkuYXNfbnVtYmVyKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDVzWF9hc051bWJlciIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCg1cykuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDVzKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDVzKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzaG9ydDApLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pigoc2hvcnQpIDUpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChpbnQxNig1KSkuQXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgoc2hvcnQpNSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IFNob3J0KDUpKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCg1KS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDUpLmFzX251bWJlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1aVhfYXNOdW1iZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoNWkpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCg1aSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg1aSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoaW50ZWdlcjApLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pig1KS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50MzIoNSkpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoNWkpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDUpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDUpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoNSkuYXNfbnVtYmVyKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDVsWF9hc051bWJlciIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCg1bCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDVsKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDVsKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsb25nMCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDVsKS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50NjQoNSkpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoNWwpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDVsKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCg1KS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGxvbmcoNSkpLmFzX251bWJlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1blhfYXNOdW1iZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoNW4pLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCg1bikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg1bikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoYmlnaW50ZWdlcjApLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihCaWdJbnRlZ2VyLlBhcnNlKFwiNVwiKSkuQXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGdyZW1saW5nby5QYXJzZUJpZ0ludChcIjVcIikpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoNWcpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBCaWdJbnRlZ2VyKFwiNVwiKSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChiaWdpbnQoNSkpLmFzX251bWJlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1XzBYX2FzTnVtYmVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDUuMCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDUuMCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg1LjApLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pig1LjApLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCg1LjApLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoNS4wKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCg1LjApLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDUuMCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCg1LjApLmFzX251bWJlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1Xzc1ZlhfYXNOdW1iZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoNS43NWYpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCg1Ljc1ZikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg1Ljc1ZikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZmxvYXQwKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oNS43NWYpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChmbG9hdDMyKDUuNzUpKS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDUuNzVmKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCg1Ljc1ZikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNS43NSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCg1Ljc1KS5hc19udW1iZXIoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYNVhfYXNOdW1iZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCI1XCIpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcIjVcIikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcIjVcIikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiNVwiKS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCI1XCIpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCI1XCIpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiNVwiKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcIjVcIikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnNScpLmFzX251bWJlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFh0ZXN0WF9hc051bWJlciIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcInRlc3RcIikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwidGVzdFwiKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwidGVzdFwiKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJ0ZXN0XCIpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcInRlc3RcIikuQXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcInRlc3RcIikuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJ0ZXN0XCIpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwidGVzdFwiKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCd0ZXN0JykuYXNfbnVtYmVyKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WF8xXzJfM180WF9hc051bWJlciIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgMywgNF0pLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMiwgMywgNF0pLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDIsIDMsIDRdKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzLCA0IH0pLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezEsIDIsIDMsIDR9KS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyLCAzLCA0XSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IGFkZCgzKTsgYWRkKDQpOyB9fSkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDIsIDMsIDRdKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAyLCAzLCA0XSkuYXNfbnVtYmVyKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFfMl8zXzRYX3VuZm9sZF9hc051bWJlciIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwgMiwgMywgNF0pLnVuZm9sZCgpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMiwgMywgNF0pLnVuZm9sZCgpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDIsIDMsIDRdKS51bmZvbGQoKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkudW5mb2xkKCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzLCA0IH0pLlVuZm9sZDxvYmplY3Q+KCkuQXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317MSwgMiwgMywgNH0pLlVuZm9sZCgpLkFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzEsIDIsIDMsIDRdKS51bmZvbGQoKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgYWRkKDMpOyBhZGQoNCk7IH19KS51bmZvbGQoKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMiwgMywgNF0pLnVuZm9sZCgpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDIsIDMsIDRdKS51bmZvbGQoKS5hc19udW1iZXIoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYXzFfXzJfXzNfXzRfWF9hc051bWJlclhYX2ZvbGRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcIjFcIiwgMiwgXCIzXCIsIDQpLmFzTnVtYmVyKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCIxXCIsIDIsIFwiM1wiLCA0KS5hc051bWJlcigpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcIjFcIiwgMiwgXCIzXCIsIDQpLmFzTnVtYmVyKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBudW1iZXIwLCBzdHJpbmcxLCBudW1iZXIxKS5hc051bWJlcigpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiMVwiLCAyLCBcIjNcIiwgNCkuQXNOdW1iZXIoKS5Gb2xkKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcIjFcIiwgMiwgXCIzXCIsIDQpLkFzTnVtYmVyKCkuRm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwiMVwiLCAyLCBcIjNcIiwgNCkuYXNOdW1iZXIoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiMVwiLCAyLCBcIjNcIiwgNCkuYXNOdW1iZXIoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiMVwiLCAyLCBcIjNcIiwgNCkuYXNOdW1iZXIoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJzEnLCAyLCAnMycsIDQpLmFzX251bWJlcigpLmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYNV80M1hfYXNOdW1iZXJYR1R5cGVfSU5UWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCg1LjQzKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoNS40MykuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCg1LjQzKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oNS40MykuQXNOdW1iZXIoR1R5cGUuSW50KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDUuNDMpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5JbnQpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDUuNDMpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDUuNDMpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDUuNDMpLmFzTnVtYmVyKEdUeXBlLmludCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoNS40MykuYXNfbnVtYmVyKEdUeXBlLklOVCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDVfNjdYX2FzTnVtYmVyWEdUeXBlX0lOVFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoNS42NykuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDUuNjcpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoNS42NykuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDUuNjcpLkFzTnVtYmVyKEdUeXBlLkludCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCg1LjY3KS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuSW50KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCg1LjY3KS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCg1LjY3KS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCg1LjY3KS5hc051bWJlcihHVHlwZS5pbnQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDUuNjcpLmFzX251bWJlcihHVHlwZS5JTlQpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFg1WF9hc051bWJlclhHVHlwZV9MT05HWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCg1KS5hc051bWJlcihHVHlwZS5MT05HKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDUpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDUpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5MT05HKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDUpLkFzTnVtYmVyKEdUeXBlLkxvbmcpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoNSkuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkxvbmcpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDUpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCg1KS5hc051bWJlcihHVHlwZS5MT05HKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoNSkuYXNOdW1iZXIoR1R5cGUubG9uZykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoNSkuYXNfbnVtYmVyKEdUeXBlLkxPTkcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxMlhfYXNOdW1iZXJYR1R5cGVfQllURVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMTIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMTIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEyKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYXNOdW1iZXIoR1R5cGUuQllURSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxMikuQXNOdW1iZXIoR1R5cGUuQnl0ZSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxMikuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkJ5dGUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEyKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMTIpLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxMikuYXNOdW1iZXIoR1R5cGUuYnl0ZSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMTIpLmFzX251bWJlcihHVHlwZS5CWVRFKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMzI3NjhYX2FzTnVtYmVyWEdUeXBlX1NIT1JUWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgzMjc2OCkuYXNOdW1iZXIoR1R5cGUuU0hPUlQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgzMjc2OCkuYXNOdW1iZXIoR1R5cGUuU0hPUlQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5TSE9SVCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigzMjc2OCkuQXNOdW1iZXIoR1R5cGUuU2hvcnQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMzI3NjgpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5TaG9ydCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLlNIT1JUKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLnNob3J0KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgzMjc2OCkuYXNfbnVtYmVyKEdUeXBlLlNIT1JUKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMzAwWF9hc051bWJlclhHVHlwZV9CWVRFWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMzAwKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDMwMCkuQXNOdW1iZXIoR1R5cGUuQnl0ZSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgzMDApLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CeXRlKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgzMDApLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDMwMCkuYXNfbnVtYmVyKEdUeXBlLkJZVEUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzMjc2OFhfYXNOdW1iZXJYR1R5cGVfVmVydGV4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgzMjc2OCkuYXNOdW1iZXIoR1R5cGUuVkVSVEVYKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDMyNzY4KS5hc051bWJlcihHVHlwZS5WRVJURVgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDMyNzY4KS5hc051bWJlcihHVHlwZS5WRVJURVgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5hc051bWJlcihHVHlwZS5WRVJURVgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMzI3NjgpLkFzTnVtYmVyKEdUeXBlLlZlcnRleCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgzMjc2OCkuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLlZlcnRleCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMzI3NjgpLmFzTnVtYmVyKEdUeXBlLlZFUlRFWCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDMyNzY4KS5hc051bWJlcihHVHlwZS5WRVJURVgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgzMjc2OCkuYXNOdW1iZXIoR1R5cGUudmVydGV4KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgzMjc2OCkuYXNfbnVtYmVyKEdUeXBlLlZFUlRFWCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDVYX2FzTnVtYmVyWEdUeXBlX0JZVEVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiNVwiKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiNVwiKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcIjVcIikuYXNOdW1iZXIoR1R5cGUuQllURSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCI1XCIpLkFzTnVtYmVyKEdUeXBlLkJ5dGUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCI1XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CeXRlKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcIjVcIikuYXNOdW1iZXIoR1R5cGUuQllURSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiNVwiKS5hc051bWJlcihHVHlwZS5CWVRFKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCI1XCIpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCc1JykuYXNfbnVtYmVyKEdUeXBlLkJZVEUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzAwMFhfYXNOdW1iZXJYR1R5cGVfQklHSU5UWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcIjEsMDAwXCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcIjEsMDAwXCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCIxLDAwMFwiKS5hc051bWJlcihHVHlwZS5CSUdJTlQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwKS5hc051bWJlcihHVHlwZS5CSUdJTlQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCIxLDAwMFwiKS5Bc051bWJlcihHVHlwZS5CaWdJbnQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCIxLDAwMFwiKS5Bc051bWJlcihncmVtbGluZ28uR1R5cGUuQmlnSW50KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcIjEsMDAwXCIpLmFzTnVtYmVyKEdUeXBlLkJJR0lOVCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiMSwwMDBcIikuYXNOdW1iZXIoR1R5cGUuQklHSU5UKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCIxLDAwMFwiKS5hc051bWJlcihHVHlwZS5iaWdJbnQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCcxLDAwMCcpLmFzX251bWJlcihHVHlwZS5CSUdJTlQpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzJfM180XzB4NVhfYXNOdW1iZXJfc3VtX2FzTnVtYmVyWEdUeXBlX0JZVEVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMCwgMiwgMywgXCI0XCIsIFwiMHg1XCIpLmFzTnVtYmVyKCkuc3VtKCkuYXNOdW1iZXIoR1R5cGUuQllURSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLjAsIDIsIDMsIFwiNFwiLCBcIjB4NVwiKS5hc051bWJlcigpLnN1bSgpLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEuMCwgMiwgMywgXCI0XCIsIFwiMHg1XCIpLmFzTnVtYmVyKCkuc3VtKCkuYXNOdW1iZXIoR1R5cGUuQllURSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjAsIG51bWJlcjEsIG51bWJlcjIsIHN0cmluZzAsIHN0cmluZzEpLmFzTnVtYmVyKCkuc3VtKCkuYXNOdW1iZXIoR1R5cGUuQllURSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxLjAsIDIsIDMsIFwiNFwiLCBcIjB4NVwiKS5Bc051bWJlcigpLlN1bTxvYmplY3Q+KCkuQXNOdW1iZXIoR1R5cGUuQnl0ZSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjAsIDIsIDMsIFwiNFwiLCBcIjB4NVwiKS5Bc051bWJlcigpLlN1bSgpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5CeXRlKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjAsIDIsIDMsIFwiNFwiLCBcIjB4NVwiKS5hc051bWJlcigpLnN1bSgpLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxLjAsIDIsIDMsIFwiNFwiLCBcIjB4NVwiKS5hc051bWJlcigpLnN1bSgpLmFzTnVtYmVyKEdUeXBlLkJZVEUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLjAsIDIsIDMsIFwiNFwiLCBcIjB4NVwiKS5hc051bWJlcigpLnN1bSgpLmFzTnVtYmVyKEdUeXBlLmJ5dGUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEuMCwgMiwgMywgJzQnLCAnMHg1JykuYXNfbnVtYmVyKCkuc3VtXygpLmFzX251bWJlcihHVHlwZS5CWVRFKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbFhfYXNOdW1iZXJYR1R5cGVfSU5UWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuQXNOdW1iZXIoR1R5cGUuSW50KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkludCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuYXNOdW1iZXIoR1R5cGUuSU5UKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuYXNOdW1iZXIoR1R5cGUuaW50KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5hc19udW1iZXIoR1R5cGUuSU5UKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dFhrbm93c1hfYXNYYlhfbWF0aFhhX3BsdXNfYlhfYnlYYWdlWF9hc051bWJlclhHVHlwZV9JTlRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubWF0aChcImEgKyBiXCIpLmJ5KFwiYWdlXCIpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLm1hdGgoXCJhICsgYlwiKS5ieShcImFnZVwiKS5hc051bWJlcihHVHlwZS5JTlQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubWF0aChcImEgKyBiXCIpLmJ5KFwiYWdlXCIpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKS5tYXRoKHN0cmluZzMpLmJ5KHN0cmluZzQpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKS5NYXRoKFwiYSArIGJcIikuQnkoXCJhZ2VcIikuQXNOdW1iZXIoR1R5cGUuSW50KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIikuTWF0aChcImEgKyBiXCIpLkJ5KFwiYWdlXCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5JbnQpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubWF0aChcImEgKyBiXCIpLmJ5KFwiYWdlXCIpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubWF0aChcImEgKyBiXCIpLmJ5KFwiYWdlXCIpLmFzTnVtYmVyKEdUeXBlLklOVCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubWF0aChcImEgKyBiXCIpLmJ5KFwiYWdlXCIpLmFzTnVtYmVyKEdUeXBlLmludCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLm1hdGgoJ2EgKyBiJykuYnkoJ2FnZScpLmFzX251bWJlcihHVHlwZS5JTlQpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WHhfMTAwWF9WX2FnZV9tYXRoWF9fcGx1c194WF9hc051bWJlclhHVHlwZV9MT05HWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcInhcIiwgMTAwKS5WKCkudmFsdWVzKFwiYWdlXCIpLm1hdGgoXCJfICsgeFwiKS5hc051bWJlcihHVHlwZS5MT05HKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjApLlYoKS52YWx1ZXMoc3RyaW5nMSkubWF0aChzdHJpbmcyKS5hc051bWJlcihHVHlwZS5MT05HKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5NYXRoKFwiXyArIHhcIikuQXNOdW1iZXIoR1R5cGUuTG9uZykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS5WYWx1ZXMoXCJhZ2VcIikuTWF0aChcIl8gKyB4XCIpLkFzTnVtYmVyKGdyZW1saW5nby5HVHlwZS5Mb25nKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpLmFzTnVtYmVyKEdUeXBlLkxPTkcpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpLmFzTnVtYmVyKEdUeXBlLmxvbmcpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgneCcsIDEwMCkuVigpLnZhbHVlcygnYWdlJykubWF0aCgnXyArIHgnKS5hc19udW1iZXIoR1R5cGUuTE9ORykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9hc1N0cmluZ19hc051bWJlclhHVHlwZV9ET1VCTEVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5hc1N0cmluZygpLmFzTnVtYmVyKEdUeXBlLkRPVUJMRSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuYXNTdHJpbmcoKS5hc051bWJlcihHVHlwZS5ET1VCTEUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5hc1N0cmluZygpLmFzTnVtYmVyKEdUeXBlLkRPVUJMRSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hc1N0cmluZygpLmFzTnVtYmVyKEdUeXBlLkRPVUJMRSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuQXNTdHJpbmcoKS5Bc051bWJlcihHVHlwZS5Eb3VibGUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkFzU3RyaW5nKCkuQXNOdW1iZXIoZ3JlbWxpbmdvLkdUeXBlLkRvdWJsZSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuYXNOdW1iZXIoR1R5cGUuRE9VQkxFKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuYXNOdW1iZXIoR1R5cGUuRE9VQkxFKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuYXNOdW1iZXIoR1R5cGUuZG91YmxlKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmFzX3N0cmluZygpLmFzX251bWJlcihHVHlwZS5ET1VCTEUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGJpcnRoZGF5WF9hc051bWJlcl9hc0RhdGVfYXNOdW1iZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgNTk3NzE1MjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiY2hhcmxpZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIDEwMTI1MjE2MDAwMDApLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIC0xMzE1ODcyMDAwMDApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgNTk3NzE1MjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxMDEyNTIxNjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAtMTMxNTg3MjAwMDAwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxNTk2MzI2NDAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCA1OTc3MTUyMDAwMDApLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2hhcmxpZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIDEwMTI1MjE2MDAwMDApLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIC0xMzE1ODcyMDAwMDApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgNTk3NzE1MjAwMDAwKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxMDEyNTIxNjAwMDAwKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCAtMTMxNTg3MjAwMDAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIDE1OTYzMjY0MDAwMDApLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9oblwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIDU5NzcxNTIwMDAwMCkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTAxMjUyMTYwMDAwMCkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJzdXp5XCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgLTEzMTU4NzIwMDAwMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgNTk3NzE1MjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxMDEyNTIxNjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAtMTMxNTg3MjAwMDAwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgNTk3NzE1MjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxMDEyNTIxNjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAtMTMxNTg3MjAwMDAwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgNTk3NzE1MjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxMDEyNTIxNjAwMDAwKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAtMTMxNTg3MjAwMDAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLnByb3BlcnR5KCdiaXJ0aGRheScsIGxvbmcoMTU5NjMyNjQwMDAwMCkpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb2huJykucHJvcGVydHkoJ2JpcnRoZGF5JywgbG9uZyg1OTc3MTUyMDAwMDApKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnY2hhcmxpZScpLnByb3BlcnR5KCdiaXJ0aGRheScsIGxvbmcoMTAxMjUyMTYwMDAwMCkpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdzdXp5JykucHJvcGVydHkoJ2JpcnRoZGF5JywgbG9uZygtMTMxNTg3MjAwMDAwKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc051bWJlcigpLmFzRGF0ZSgpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc051bWJlcigpLmFzRGF0ZSgpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNOdW1iZXIoKS5hc0RhdGUoKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoKS5hc0RhdGUoKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYmlydGhkYXlcIikuQXNOdW1iZXIoKS5Bc0RhdGUoKS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYmlydGhkYXlcIikuQXNOdW1iZXIoKS5Bc0RhdGUoKS5Bc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImJpcnRoZGF5XCIpLmFzTnVtYmVyKCkuYXNEYXRlKCkuYXNOdW1iZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNOdW1iZXIoKS5hc0RhdGUoKS5hc051bWJlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc051bWJlcigpLmFzRGF0ZSgpLmFzTnVtYmVyKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdiaXJ0aGRheScpLmFzX251bWJlcigpLmFzX2RhdGUoKS5hc19udW1iZXIoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV8yWF9hc1N0cmluZyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxLCAyKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLCAyKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwLCBudW1iZXIxKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSwgMikuQXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEsIDIpLkFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLCAyKS5hc19zdHJpbmcoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV8yWF9hc1N0cmluZ1hsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEsIDIpLmFzU3RyaW5nKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCwgbnVtYmVyMSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSwgMikuQXNTdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLCAyKS5Bc1N0cmluZyhncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEsIDIpLmFzU3RyaW5nKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMSwgMikuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLCAyKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSwgMikuYXNfc3RyaW5nKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbGlzdF8xXzJYX2FzU3RyaW5nWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMSwyXSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzEsIDJdKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDJdKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMSwgMiB9KS5Bc1N0cmluZzxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317MSwgMn0pLkFzU3RyaW5nKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzEsIDJdKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyB9fSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMl0pLmFzU3RyaW5nKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMl0pLmFzX3N0cmluZyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFfbnVsbFhfYXNTdHJpbmciLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCwgMSkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwsIDEpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCwgMSkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCwgbnVtYmVyMCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwsIDEpLkFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwsIDEpLkFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCwgMSkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCwgMSkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCwgMSkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lLCAxKS5hc19zdHJpbmcoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV9udWxsWF9hc1N0cmluZ1hsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsbnVsbF0pLmFzU3RyaW5nKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxLCBudWxsXSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxLCBudWxsXSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIG51bGwgfSkuQXNTdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezEsIG5pbH0pLkFzU3RyaW5nKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzEsIG51bGxdKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKG51bGwpOyB9fSkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgbnVsbF0pLmFzU3RyaW5nKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgTm9uZV0pLmFzX3N0cmluZyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcFhuYW1lWF9hc1N0cmluZyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChzdHJpbmcwKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcIm5hbWVcIikuQXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKFwibmFtZVwiKS5Bc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCduYW1lJykuYXNfc3RyaW5nKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcFhuYW1lWF9vcmRlcl9mb2xkX2FzU3RyaW5nWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmFzU3RyaW5nKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChzdHJpbmcwKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Bc1N0cmluZzxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Bc1N0cmluZyhncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCduYW1lJykub3JkZXIoKS5mb2xkKCkuYXNfc3RyaW5nKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzU3RyaW5nIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc19zdHJpbmcoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfYXNTdHJpbmdYbG9jYWxYX29yZGVyWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpLm9yZGVyKGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuQXNTdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCkuT3JkZXIoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRm9sZCgpLkFzU3RyaW5nKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLmFzU3RyaW5nKFNjb3BlLmxvY2FsKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS5hc19zdHJpbmcoU2NvcGUubG9jYWwpLm9yZGVyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX2FzU3RyaW5nIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuQXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5hc19zdHJpbmcoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb3BlcnRpZXMiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvcGVydGllcygpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvcGVydGllcygpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KCkuQXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5Bc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcygpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygpLmFzX3N0cmluZygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZXNYYWdlWF9hc1N0cmluZyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5Bc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwiYWdlXCIpLkFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5hc1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikuYXNTdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnYWdlJykuYXNfc3RyaW5nKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1hhZ2VYX29yZGVyX2ZvbGRfYXNTdHJpbmdYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5vcmRlcigpLmZvbGQoKS5hc1N0cmluZyhTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuT3JkZXIoKS5Gb2xkKCkuQXNTdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXMoXCJhZ2VcIikuT3JkZXIoKS5Gb2xkKCkuQXNTdHJpbmcoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuYXNTdHJpbmcoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCdhZ2UnKS5vcmRlcigpLmZvbGQoKS5hc19zdHJpbmcoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZXNYYWdlWF9hc1N0cmluZ19jb25jYXRYX3llYXJzX29sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuY29uY2F0KFwiIHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcImFnZVwiKS5hc1N0cmluZygpLmNvbmNhdChcIiB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuY29uY2F0KFwiIHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLmFzU3RyaW5nKCkuY29uY2F0KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkFzU3RyaW5nKCkuQ29uY2F0KFwiIHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcImFnZVwiKS5Bc1N0cmluZygpLkNvbmNhdChcIiB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuY29uY2F0KFwiIHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuY29uY2F0KFwiIHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwiYWdlXCIpLmFzU3RyaW5nKCkuY29uY2F0KFwiIHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnYWdlJykuYXNfc3RyaW5nKCkuY29uY2F0KCcgeWVhcnMgb2xkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfY2FsbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmNhbGwoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmNhbGwoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuY2FsbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmNhbGwoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmNhbGwoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19jYWxsWGxpc3RYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcIi0tbGlzdFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbChcIi0tbGlzdFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmNhbGwoXCItLWxpc3RcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0Pigoc3RyaW5nKSBcIi0tbGlzdFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQ2FsbChcIi0tbGlzdFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmNhbGwoXCItLWxpc3RcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuY2FsbChcIi0tbGlzdFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwiLS1saXN0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuY2FsbCgnLS1saXN0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfY2FsbFhsaXN0WF93aXRoWHN0cmluZ19zdHJpbmdYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcIi0tbGlzdFwiKS53aXRoKFwic2VydmljZVwiLCBcInRpbmtlci5zZWFyY2hcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmNhbGwoXCItLWxpc3RcIikud2l0aChcInNlcnZpY2VcIiwgXCJ0aW5rZXIuc2VhcmNoXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbChcIi0tbGlzdFwiKS53aXRoKFwic2VydmljZVwiLCBcInRpbmtlci5zZWFyY2hcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwKS53aXRoKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQ2FsbDxvYmplY3Q+KChzdHJpbmcpIFwiLS1saXN0XCIpLldpdGgoXCJzZXJ2aWNlXCIsIFwidGlua2VyLnNlYXJjaFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQ2FsbChcIi0tbGlzdFwiKS5XaXRoKFwic2VydmljZVwiLCBcInRpbmtlci5zZWFyY2hcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGgoXCJzZXJ2aWNlXCIsIFwidGlua2VyLnNlYXJjaFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGgoXCJzZXJ2aWNlXCIsIFwidGlua2VyLnNlYXJjaFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGhfKFwic2VydmljZVwiLCBcInRpbmtlci5zZWFyY2hcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5jYWxsKCctLWxpc3QnKS53aXRoXygnc2VydmljZScsICd0aW5rZXIuc2VhcmNoJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfY2FsbFhsaXN0WF93aXRoWHN0cmluZ190cmF2ZXJzYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcIi0tbGlzdFwiKS53aXRoKFwic2VydmljZVwiLCBfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGgoXCJzZXJ2aWNlXCIsIF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGgoXCJzZXJ2aWNlXCIsIF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwKS53aXRoKHN0cmluZzEsIF9fLmNvbnN0YW50KHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0Pigoc3RyaW5nKSBcIi0tbGlzdFwiKS5XaXRoKFwic2VydmljZVwiLCBfXy5Db25zdGFudDxvYmplY3Q+KFwidGlua2VyLnNlYXJjaFwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkNhbGwoXCItLWxpc3RcIikuV2l0aChcInNlcnZpY2VcIiwgZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuY2FsbChcIi0tbGlzdFwiKS53aXRoKFwic2VydmljZVwiLCBfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmNhbGwoXCItLWxpc3RcIikud2l0aChcInNlcnZpY2VcIiwgX18uY29uc3RhbnQoXCJ0aW5rZXIuc2VhcmNoXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwiLS1saXN0XCIpLndpdGhfKFwic2VydmljZVwiLCBfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuY2FsbCgnLS1saXN0Jykud2l0aF8oJ3NlcnZpY2UnLCBfXy5jb25zdGFudCgndGlua2VyLnNlYXJjaCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19jYWxsWGxpc3RfbWFwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmNhbGwoXCItLWxpc3RcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbChcIi0tbGlzdFwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbChcIi0tbGlzdFwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmNhbGwoc3RyaW5nMCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0PihcIi0tbGlzdFwiLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKFwiLS1saXN0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwiLS1saXN0XCIsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuY2FsbChcIi0tbGlzdFwiLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmNhbGwoXCItLWxpc3RcIiwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmNhbGwoJy0tbGlzdCcsIHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfY2FsbFhsaXN0X3RyYXZlcnNhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5jYWxsKFwiLS1saXN0XCIsIF9fLnByb2plY3QoXCJzZXJ2aWNlXCIpLmJ5KF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5jYWxsKFwiLS1saXN0XCIsIF9fLnByb2plY3QoXCJzZXJ2aWNlXCIpLmJ5KF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbChcIi0tbGlzdFwiLCBfXy5wcm9qZWN0KFwic2VydmljZVwiKS5ieShfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5jYWxsKHN0cmluZzAsIF9fLnByb2plY3Qoc3RyaW5nMSkuYnkoX18uY29uc3RhbnQoc3RyaW5nMikpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0PihcIi0tbGlzdFwiLCAoSVRyYXZlcnNhbCkgX18uUHJvamVjdDxvYmplY3Q+KFwic2VydmljZVwiKS5CeShfXy5Db25zdGFudDxvYmplY3Q+KFwidGlua2VyLnNlYXJjaFwiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKFwiLS1saXN0XCIsIGdyZW1saW5nby5UX18uUHJvamVjdChcInNlcnZpY2VcIikuQnkoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmNhbGwoXCItLWxpc3RcIiwgX18ucHJvamVjdChcInNlcnZpY2VcIikuYnkoX18uY29uc3RhbnQoXCJ0aW5rZXIuc2VhcmNoXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuY2FsbChcIi0tbGlzdFwiLCBfXy5wcm9qZWN0KFwic2VydmljZVwiKS5ieShfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwiLS1saXN0XCIsIF9fLnByb2plY3QoXCJzZXJ2aWNlXCIpLmJ5KF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuY2FsbCgnLS1saXN0JywgX18ucHJvamVjdCgnc2VydmljZScpLmJ5KF9fLmNvbnN0YW50KCd0aW5rZXIuc2VhcmNoJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19jYWxsWGxpc3RfbWFwX3RyYXZlcnNhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5jYWxsKFwiLS1saXN0XCIsIHh4MSwgX18ucHJvamVjdChcInNlcnZpY2VcIikuYnkoX18uY29uc3RhbnQoXCJ0aW5rZXIuc2VhcmNoXCIpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmNhbGwoXCItLWxpc3RcIiwgeHgxLCBfXy5wcm9qZWN0KFwic2VydmljZVwiKS5ieShfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmNhbGwoXCItLWxpc3RcIiwgeHgxLCBfXy5wcm9qZWN0KFwic2VydmljZVwiKS5ieShfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5jYWxsKHN0cmluZzAsIHh4MSwgX18ucHJvamVjdChzdHJpbmcxKS5ieShfXy5jb25zdGFudChzdHJpbmcyKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQ2FsbDxvYmplY3Q+KFwiLS1saXN0XCIsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSwgKElUcmF2ZXJzYWwpIF9fLlByb2plY3Q8b2JqZWN0PihcInNlcnZpY2VcIikuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PihcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQ2FsbChcIi0tbGlzdFwiLCB4eDEsIGdyZW1saW5nby5UX18uUHJvamVjdChcInNlcnZpY2VcIikuQnkoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmNhbGwoXCItLWxpc3RcIiwgeHgxLCBfXy5wcm9qZWN0KFwic2VydmljZVwiKS5ieShfXy5jb25zdGFudChcInRpbmtlci5zZWFyY2hcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwiLS1saXN0XCIsIHh4MSwgX18ucHJvamVjdChcInNlcnZpY2VcIikuYnkoX18uY29uc3RhbnQoXCJ0aW5rZXIuc2VhcmNoXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuY2FsbChcIi0tbGlzdFwiLCB4eDEsIF9fLnByb2plY3QoXCJzZXJ2aWNlXCIpLmJ5KF9fLmNvbnN0YW50KFwidGlua2VyLnNlYXJjaFwiKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuY2FsbCgnLS1saXN0JywgeHgxLCBfXy5wcm9qZWN0KCdzZXJ2aWNlJykuYnkoX18uY29uc3RhbnQoJ3Rpbmtlci5zZWFyY2gnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2NhbGxYc2VhcmNoX21hcFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5jYWxsKHN0cmluZzAsIHh4MSkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQ2FsbDxvYmplY3Q+KFwidGlua2VyLnNlYXJjaFwiLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLkVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQ2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmNhbGwoJ3Rpbmtlci5zZWFyY2gnLCB4eDEpLmVsZW1lbnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19jYWxsWHNlYXJjaF90cmF2ZXJzYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgX18ucHJvamVjdChcInNlYXJjaFwiKS5ieShfXy5jb25zdGFudChcInZhZGFcIikpKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIsIF9fLnByb2plY3QoXCJzZWFyY2hcIikuYnkoX18uY29uc3RhbnQoXCJ2YWRhXCIpKSkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgX18ucHJvamVjdChcInNlYXJjaFwiKS5ieShfXy5jb25zdGFudChcInZhZGFcIikpKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwLCBfXy5wcm9qZWN0KHN0cmluZzEpLmJ5KF9fLmNvbnN0YW50KHN0cmluZzIpKSkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQ2FsbDxvYmplY3Q+KFwidGlua2VyLnNlYXJjaFwiLCAoSVRyYXZlcnNhbCkgX18uUHJvamVjdDxvYmplY3Q+KFwic2VhcmNoXCIpLkJ5KF9fLkNvbnN0YW50PG9iamVjdD4oXCJ2YWRhXCIpKSkuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKFwidGlua2VyLnNlYXJjaFwiLCBncmVtbGluZ28uVF9fLlByb2plY3QoXCJzZWFyY2hcIikuQnkoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInZhZGFcIikpKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCBfXy5wcm9qZWN0KFwic2VhcmNoXCIpLmJ5KF9fLmNvbnN0YW50KFwidmFkYVwiKSkpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCBfXy5wcm9qZWN0KFwic2VhcmNoXCIpLmJ5KF9fLmNvbnN0YW50KFwidmFkYVwiKSkpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCBfXy5wcm9qZWN0KFwic2VhcmNoXCIpLmJ5KF9fLmNvbnN0YW50KFwidmFkYVwiKSkpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmNhbGwoJ3Rpbmtlci5zZWFyY2gnLCBfXy5wcm9qZWN0KCdzZWFyY2gnKS5ieShfXy5jb25zdGFudCgndmFkYScpKSkuZWxlbWVudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2NhbGxYc2VhcmNoWF93aXRoWHN0cmluZ19zdHJpbmdYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIikud2l0aChcInNlYXJjaFwiLCBcInZhZGFcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiKS53aXRoKFwic2VhcmNoXCIsIFwidmFkYVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiKS53aXRoKFwic2VhcmNoXCIsIFwidmFkYVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwKS53aXRoKHN0cmluZzEsIHN0cmluZzIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0Pigoc3RyaW5nKSBcInRpbmtlci5zZWFyY2hcIikuV2l0aChcInNlYXJjaFwiLCBcInZhZGFcIikuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKFwidGlua2VyLnNlYXJjaFwiKS5XaXRoKFwic2VhcmNoXCIsIFwidmFkYVwiKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiKS53aXRoKFwic2VhcmNoXCIsIFwidmFkYVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIikud2l0aChcInNlYXJjaFwiLCBcInZhZGFcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIpLndpdGhfKFwic2VhcmNoXCIsIFwidmFkYVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5jYWxsKCd0aW5rZXIuc2VhcmNoJykud2l0aF8oJ3NlYXJjaCcsICd2YWRhJykuZWxlbWVudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2NhbGxYc2VhcmNoWF93aXRoWHN0cmluZ190cmF2ZXJzYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIikud2l0aChcInNlYXJjaFwiLCBfXy5jb25zdGFudChcInZhZGFcIikpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIikud2l0aChcInNlYXJjaFwiLCBfXy5jb25zdGFudChcInZhZGFcIikpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIpLndpdGgoXCJzZWFyY2hcIiwgX18uY29uc3RhbnQoXCJ2YWRhXCIpKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwKS53aXRoKHN0cmluZzEsIF9fLmNvbnN0YW50KHN0cmluZzIpKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5DYWxsPG9iamVjdD4oKHN0cmluZykgXCJ0aW5rZXIuc2VhcmNoXCIpLldpdGgoXCJzZWFyY2hcIiwgX18uQ29uc3RhbnQ8b2JqZWN0PihcInZhZGFcIikpLkVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQ2FsbChcInRpbmtlci5zZWFyY2hcIikuV2l0aChcInNlYXJjaFwiLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwidmFkYVwiKSkuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIikud2l0aChcInNlYXJjaFwiLCBfXy5jb25zdGFudChcInZhZGFcIikpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiKS53aXRoKFwic2VhcmNoXCIsIF9fLmNvbnN0YW50KFwidmFkYVwiKSkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIpLndpdGhfKFwic2VhcmNoXCIsIF9fLmNvbnN0YW50KFwidmFkYVwiKSkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuY2FsbCgndGlua2VyLnNlYXJjaCcpLndpdGhfKCdzZWFyY2gnLCBfXy5jb25zdGFudCgndmFkYScpKS5lbGVtZW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfY2FsbFhzZWFyY2hfbWFwWF93aXRoWHN0cmluZ19WZXJ0ZXhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIlZlcnRleFwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIsIHh4MSkud2l0aChcInR5cGVcIiwgXCJWZXJ0ZXhcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIlZlcnRleFwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwLCB4eDEpLndpdGgoc3RyaW5nMSwgc3RyaW5nMikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQ2FsbDxvYmplY3Q+KFwidGlua2VyLnNlYXJjaFwiLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLldpdGgoXCJ0eXBlXCIsIFwiVmVydGV4XCIpLkVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQ2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS5XaXRoKFwidHlwZVwiLCBcIlZlcnRleFwiKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLndpdGgoXCJ0eXBlXCIsIFwiVmVydGV4XCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLndpdGgoXCJ0eXBlXCIsIFwiVmVydGV4XCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLndpdGhfKFwidHlwZVwiLCBcIlZlcnRleFwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5jYWxsKCd0aW5rZXIuc2VhcmNoJywgeHgxKS53aXRoXygndHlwZScsICdWZXJ0ZXgnKS5lbGVtZW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfY2FsbFhzZWFyY2hfbWFwWF93aXRoWHN0cmluZ19FZGdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIsIHh4MSkud2l0aChcInR5cGVcIiwgXCJFZGdlXCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIkVkZ2VcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIkVkZ2VcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmNhbGwoc3RyaW5nMCwgeHgxKS53aXRoKHN0cmluZzEsIHN0cmluZzIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkNhbGw8b2JqZWN0PihcInRpbmtlci5zZWFyY2hcIiwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5XaXRoKFwidHlwZVwiLCBcIkVkZ2VcIikuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLldpdGgoXCJ0eXBlXCIsIFwiRWRnZVwiKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLndpdGgoXCJ0eXBlXCIsIFwiRWRnZVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIkVkZ2VcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIsIHh4MSkud2l0aF8oXCJ0eXBlXCIsIFwiRWRnZVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5jYWxsKCd0aW5rZXIuc2VhcmNoJywgeHgxKS53aXRoXygndHlwZScsICdFZGdlJykuZWxlbWVudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2NhbGxYc2VhcmNoX21hcFhfd2l0aFhzdHJpbmdfVmVydGV4UHJvcGVydHlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIlZlcnRleFByb3BlcnR5XCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIlZlcnRleFByb3BlcnR5XCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIsIHh4MSkud2l0aChcInR5cGVcIiwgXCJWZXJ0ZXhQcm9wZXJ0eVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuY2FsbChzdHJpbmcwLCB4eDEpLndpdGgoc3RyaW5nMSwgc3RyaW5nMikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQ2FsbDxvYmplY3Q+KFwidGlua2VyLnNlYXJjaFwiLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLldpdGgoXCJ0eXBlXCIsIFwiVmVydGV4UHJvcGVydHlcIikuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5DYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLldpdGgoXCJ0eXBlXCIsIFwiVmVydGV4UHJvcGVydHlcIikuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuY2FsbChcInRpbmtlci5zZWFyY2hcIiwgeHgxKS53aXRoKFwidHlwZVwiLCBcIlZlcnRleFByb3BlcnR5XCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5jYWxsKFwidGlua2VyLnNlYXJjaFwiLCB4eDEpLndpdGgoXCJ0eXBlXCIsIFwiVmVydGV4UHJvcGVydHlcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmNhbGwoXCJ0aW5rZXIuc2VhcmNoXCIsIHh4MSkud2l0aF8oXCJ0eXBlXCIsIFwiVmVydGV4UHJvcGVydHlcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuY2FsbCgndGlua2VyLnNlYXJjaCcsIHh4MSkud2l0aF8oJ3R5cGUnLCAnVmVydGV4UHJvcGVydHknKS5lbGVtZW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jYWxsWGRjWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5wcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLmJ5KHNlbGVjdChcInZcIikpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5wcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLmJ5KF9fLnNlbGVjdChcInZcIikpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5jYWxsKHN0cmluZzEpLnByb2plY3Qoc3RyaW5nMiwgc3RyaW5nMykuYnkoX18uc2VsZWN0KHN0cmluZzApKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwidlwiKS5DYWxsPG9iamVjdD4oKHN0cmluZykgXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikuUHJvamVjdDxvYmplY3Q+KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkuQnkoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwidlwiKS5DYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIpLlByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKS5CeSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwidlwiKS5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5wcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLmJ5KF9fLnNlbGVjdChcInZcIikpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCd2JykuY2FsbCgndGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5JykucHJvamVjdCgndmVydGV4JywgJ2RlZ3JlZScpLmJ5KF9fLnNlbGVjdCgndicpKS5ieSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfd2hlcmVYY2FsbFhkY1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLndoZXJlKGNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikuaXMoMykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkud2hlcmUoX18uY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5pcygzKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkud2hlcmUoX18uY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5pcygzKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLndoZXJlKF9fLmNhbGwoc3RyaW5nMCkuaXMobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLldoZXJlKF9fLkNhbGw8b2JqZWN0Pigoc3RyaW5nKSBcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5JcygzKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLkNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikuSXMoMykpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLndoZXJlKF9fLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikuaXMoMykpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS53aGVyZShfXy5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIpLmlzKDMpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkud2hlcmUoX18uY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5pcygzKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18uY2FsbCgndGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5JykuaXNfKDMpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2NhbGxYZGNYX3dpdGhYZGlyZWN0aW9uX09VVFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikud2l0aChcImRpcmVjdGlvblwiLCBPVVQpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwidlwiKS5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIpLndpdGgoXCJkaXJlY3Rpb25cIiwgRGlyZWN0aW9uLk9VVCkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwidlwiKS5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIpLndpdGgoXCJkaXJlY3Rpb25cIiwgRGlyZWN0aW9uLk9VVCkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5jYWxsKHN0cmluZzEpLndpdGgoc3RyaW5nMiwgRGlyZWN0aW9uLk9VVCkucHJvamVjdChzdHJpbmczLCBzdHJpbmc0KS5ieShfXy5zZWxlY3Qoc3RyaW5nMCkpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJ2XCIpLkNhbGw8b2JqZWN0Pigoc3RyaW5nKSBcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5XaXRoKFwiZGlyZWN0aW9uXCIsIERpcmVjdGlvbi5PdXQpLlByb2plY3Q8b2JqZWN0PihcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInZcIikpLkJ5KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuQ2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS5XaXRoKFwiZGlyZWN0aW9uXCIsIGdyZW1saW5nby5EaXJlY3Rpb24uT3V0KS5Qcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwidlwiKSkuQnkoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiKS53aXRoKFwiZGlyZWN0aW9uXCIsIERpcmVjdGlvbi5PVVQpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIikud2l0aChcImRpcmVjdGlvblwiLCBEaXJlY3Rpb24uT1VUKS5wcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLmJ5KF9fLnNlbGVjdChcInZcIikpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwidlwiKS5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIpLndpdGhfKFwiZGlyZWN0aW9uXCIsIERpcmVjdGlvbi5PVVQpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ3YnKS5jYWxsKCd0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHknKS53aXRoXygnZGlyZWN0aW9uJywgRGlyZWN0aW9uLk9VVCkucHJvamVjdCgndmVydGV4JywgJ2RlZ3JlZScpLmJ5KF9fLnNlbGVjdCgndicpKS5ieSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2FsbFhkY19tYXBYX3dpdGhYZGlyZWN0aW9uX09VVFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIiwgeHgxKS53aXRoKFwiZGlyZWN0aW9uXCIsIE9VVCkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShzZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIiwgeHgxKS53aXRoKFwiZGlyZWN0aW9uXCIsIERpcmVjdGlvbi5PVVQpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEpLndpdGgoXCJkaXJlY3Rpb25cIiwgRGlyZWN0aW9uLk9VVCkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5jYWxsKHN0cmluZzEsIHh4MSkud2l0aChzdHJpbmcyLCBEaXJlY3Rpb24uT1VUKS5wcm9qZWN0KHN0cmluZzMsIHN0cmluZzQpLmJ5KF9fLnNlbGVjdChzdHJpbmcwKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcInZcIikuQ2FsbDxvYmplY3Q+KFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuV2l0aChcImRpcmVjdGlvblwiLCBEaXJlY3Rpb24uT3V0KS5Qcm9qZWN0PG9iamVjdD4oXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJ2XCIpKS5CeSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJ2XCIpLkNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIiwgeHgxKS5XaXRoKFwiZGlyZWN0aW9uXCIsIGdyZW1saW5nby5EaXJlY3Rpb24uT3V0KS5Qcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwidlwiKSkuQnkoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEpLndpdGgoXCJkaXJlY3Rpb25cIiwgRGlyZWN0aW9uLk9VVCkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEpLndpdGgoXCJkaXJlY3Rpb25cIiwgRGlyZWN0aW9uLk9VVCkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEpLndpdGhfKFwiZGlyZWN0aW9uXCIsIERpcmVjdGlvbi5PVVQpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ3YnKS5jYWxsKCd0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHknLCB4eDEpLndpdGhfKCdkaXJlY3Rpb24nLCBEaXJlY3Rpb24uT1VUKS5wcm9qZWN0KCd2ZXJ0ZXgnLCAnZGVncmVlJykuYnkoX18uc2VsZWN0KCd2JykpLmJ5KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jYWxsWGRjX3RyYXZlcnNhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIiwgX18ucHJvamVjdChcImRpcmVjdGlvblwiKS5ieShfXy5jb25zdGFudChPVVQpKSkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShzZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIiwgX18ucHJvamVjdChcImRpcmVjdGlvblwiKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCBfXy5wcm9qZWN0KFwiZGlyZWN0aW9uXCIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5jYWxsKHN0cmluZzEsIF9fLnByb2plY3Qoc3RyaW5nMikuYnkoX18uY29uc3RhbnQoRGlyZWN0aW9uLk9VVCkpKS5wcm9qZWN0KHN0cmluZzMsIHN0cmluZzQpLmJ5KF9fLnNlbGVjdChzdHJpbmcwKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcInZcIikuQ2FsbDxvYmplY3Q+KFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIsIChJVHJhdmVyc2FsKSBfXy5Qcm9qZWN0PG9iamVjdD4oXCJkaXJlY3Rpb25cIikuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PihEaXJlY3Rpb24uT3V0KSkpLlByb2plY3Q8b2JqZWN0PihcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInZcIikpLkJ5KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuQ2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCBncmVtbGluZ28uVF9fLlByb2plY3QoXCJkaXJlY3Rpb25cIikuQnkoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChncmVtbGluZ28uRGlyZWN0aW9uLk91dCkpKS5Qcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwidlwiKSkuQnkoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCBfXy5wcm9qZWN0KFwiZGlyZWN0aW9uXCIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCBfXy5wcm9qZWN0KFwiZGlyZWN0aW9uXCIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCBfXy5wcm9qZWN0KFwiZGlyZWN0aW9uXCIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygndicpLmNhbGwoJ3Rpbmtlci5kZWdyZWUuY2VudHJhbGl0eScsIF9fLnByb2plY3QoJ2RpcmVjdGlvbicpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdCgndmVydGV4JywgJ2RlZ3JlZScpLmJ5KF9fLnNlbGVjdCgndicpKS5ieSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY2FsbFhkY19tYXBfdHJhdmVyc2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEsIF9fLnByb2plY3QoXCJkaXJlY3Rpb25cIikuYnkoX18uY29uc3RhbnQoT1VUKSkpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwidlwiKS5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIsIHh4MSwgX18ucHJvamVjdChcImRpcmVjdGlvblwiKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEsIF9fLnByb2plY3QoXCJkaXJlY3Rpb25cIikuYnkoX18uY29uc3RhbnQoRGlyZWN0aW9uLk9VVCkpKS5wcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLmJ5KF9fLnNlbGVjdChcInZcIikpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLmNhbGwoc3RyaW5nMSwgeHgxLCBfXy5wcm9qZWN0KHN0cmluZzIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdChzdHJpbmczLCBzdHJpbmc0KS5ieShfXy5zZWxlY3Qoc3RyaW5nMCkpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJ2XCIpLkNhbGw8b2JqZWN0PihcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEsIChJVHJhdmVyc2FsKSBfXy5Qcm9qZWN0PG9iamVjdD4oXCJkaXJlY3Rpb25cIikuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PihEaXJlY3Rpb24uT3V0KSkpLlByb2plY3Q8b2JqZWN0PihcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcInZcIikpLkJ5KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuQ2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEsIGdyZW1saW5nby5UX18uUHJvamVjdChcImRpcmVjdGlvblwiKS5CeShncmVtbGluZ28uVF9fLkNvbnN0YW50KGdyZW1saW5nby5EaXJlY3Rpb24uT3V0KSkpLlByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKS5CeSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwidlwiKS5jYWxsKFwidGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5XCIsIHh4MSwgX18ucHJvamVjdChcImRpcmVjdGlvblwiKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoXCJ2ZXJ0ZXhcIiwgXCJkZWdyZWVcIikuYnkoX18uc2VsZWN0KFwidlwiKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJ2XCIpLmNhbGwoXCJ0aW5rZXIuZGVncmVlLmNlbnRyYWxpdHlcIiwgeHgxLCBfXy5wcm9qZWN0KFwiZGlyZWN0aW9uXCIpLmJ5KF9fLmNvbnN0YW50KERpcmVjdGlvbi5PVVQpKSkucHJvamVjdChcInZlcnRleFwiLCBcImRlZ3JlZVwiKS5ieShfXy5zZWxlY3QoXCJ2XCIpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcInZcIikuY2FsbChcInRpbmtlci5kZWdyZWUuY2VudHJhbGl0eVwiLCB4eDEsIF9fLnByb2plY3QoXCJkaXJlY3Rpb25cIikuYnkoX18uY29uc3RhbnQoRGlyZWN0aW9uLk9VVCkpKS5wcm9qZWN0KFwidmVydGV4XCIsIFwiZGVncmVlXCIpLmJ5KF9fLnNlbGVjdChcInZcIikpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCd2JykuY2FsbCgndGlua2VyLmRlZ3JlZS5jZW50cmFsaXR5JywgeHgxLCBfXy5wcm9qZWN0KCdkaXJlY3Rpb24nKS5ieShfXy5jb25zdGFudChEaXJlY3Rpb24uT1VUKSkpLnByb2plY3QoJ3ZlcnRleCcsICdkZWdyZWUnKS5ieShfXy5zZWxlY3QoJ3YnKSkuYnkoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2NvYWxlc2NlWG91dFhmb29YX291dFhiYXJYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoXCJmb29cIiksIF9fLm91dChcImJhclwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoXCJmb29cIiksIF9fLm91dChcImJhclwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0KFwiZm9vXCIpLCBfXy5vdXQoXCJiYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoc3RyaW5nMCksIF9fLm91dChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ29hbGVzY2U8b2JqZWN0PihfXy5PdXQoXCJmb29cIiksIF9fLk91dChcImJhclwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Db2FsZXNjZShncmVtbGluZ28uVF9fLk91dChcImZvb1wiKSwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJiYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNvYWxlc2NlKF9fLm91dChcImZvb1wiKSwgX18ub3V0KFwiYmFyXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0KFwiZm9vXCIpLCBfXy5vdXQoXCJiYXJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoXCJmb29cIiksIF9fLm91dChcImJhclwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0KCdmb28nKSwgX18ub3V0KCdiYXInKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9jb2FsZXNjZVhvdXRYa25vd3NYX291dFhjcmVhdGVkWFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoXCJrbm93c1wiKSwgX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoXCJrbm93c1wiKSwgX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuY29hbGVzY2UoX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoc3RyaW5nMCksIF9fLm91dChzdHJpbmcxKSkudmFsdWVzKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5Db2FsZXNjZTxvYmplY3Q+KF9fLk91dChcImtub3dzXCIpLCBfXy5PdXQoXCJjcmVhdGVkXCIpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQ29hbGVzY2UoZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKSwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoXCJrbm93c1wiKSwgX18ub3V0KFwiY3JlYXRlZFwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmNvYWxlc2NlKF9fLm91dChcImtub3dzXCIpLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuY29hbGVzY2UoX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmNvYWxlc2NlKF9fLm91dCgna25vd3MnKSwgX18ub3V0KCdjcmVhdGVkJykpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfY29hbGVzY2VYb3V0WGNyZWF0ZWRYX291dFhrbm93c1hYX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuY29hbGVzY2UoX18ub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuY29hbGVzY2UoX18ub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmNvYWxlc2NlKF9fLm91dChcImNyZWF0ZWRcIiksIF9fLm91dChcImtub3dzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuY29hbGVzY2UoX18ub3V0KHN0cmluZzApLCBfXy5vdXQoc3RyaW5nMSkpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQ29hbGVzY2U8b2JqZWN0PihfXy5PdXQoXCJjcmVhdGVkXCIpLCBfXy5PdXQoXCJrbm93c1wiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkNvYWxlc2NlKGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKSwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuY29hbGVzY2UoX18ub3V0KFwiY3JlYXRlZFwiKSwgX18ub3V0KFwia25vd3NcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoXCJjcmVhdGVkXCIpLCBfXy5vdXQoXCJrbm93c1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmNvYWxlc2NlKF9fLm91dChcImNyZWF0ZWRcIiksIF9fLm91dChcImtub3dzXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5jb2FsZXNjZShfXy5vdXQoJ2NyZWF0ZWQnKSwgX18ub3V0KCdrbm93cycpKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2NvYWxlc2NlWG91dFhsaWtlc1hfb3V0WGtub3dzWF9pblhjcmVhdGVkWFhfZ3JvdXBDb3VudF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoXCJsaWtlc1wiKSwgX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoXCJsaWtlc1wiKSwgX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0KFwibGlrZXNcIiksIF9fLm91dChcImtub3dzXCIpLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoc3RyaW5nMCksIF9fLm91dChzdHJpbmcxKSwgX18ub3V0KHN0cmluZzIpKS5ncm91cENvdW50KCkuYnkoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ29hbGVzY2U8b2JqZWN0PihfXy5PdXQoXCJsaWtlc1wiKSwgX18uT3V0KFwia25vd3NcIiksIF9fLk91dChcImNyZWF0ZWRcIikpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNvYWxlc2NlKGdyZW1saW5nby5UX18uT3V0KFwibGlrZXNcIiksIGdyZW1saW5nby5UX18uT3V0KFwia25vd3NcIiksIGdyZW1saW5nby5UX18uT3V0KFwiY3JlYXRlZFwiKSkuR3JvdXBDb3VudCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXQoXCJsaWtlc1wiKSwgX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNvYWxlc2NlKF9fLm91dChcImxpa2VzXCIpLCBfXy5vdXQoXCJrbm93c1wiKSwgX18ub3V0KFwiY3JlYXRlZFwiKSkuZ3JvdXBDb3VudCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0KFwibGlrZXNcIiksIF9fLm91dChcImtub3dzXCIpLCBfXy5vdXQoXCJjcmVhdGVkXCIpKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNvYWxlc2NlKF9fLm91dCgnbGlrZXMnKSwgX18ub3V0KCdrbm93cycpLCBfXy5vdXQoJ2NyZWF0ZWQnKSkuZ3JvdXBfY291bnQoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY29hbGVzY2VYb3V0RVhrbm93c1hfb3V0RVhjcmVhdGVkWFhfb3RoZXJWX3BhdGhfYnlYbmFtZVhfYnlYbGFiZWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNvYWxlc2NlKF9fLm91dEUoXCJrbm93c1wiKSwgX18ub3V0RShcImNyZWF0ZWRcIikpLm90aGVyVigpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXRFKFwia25vd3NcIiksIF9fLm91dEUoXCJjcmVhdGVkXCIpKS5vdGhlclYoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNvYWxlc2NlKF9fLm91dEUoXCJrbm93c1wiKSwgX18ub3V0RShcImNyZWF0ZWRcIikpLm90aGVyVigpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNvYWxlc2NlKF9fLm91dEUoc3RyaW5nMCksIF9fLm91dEUoc3RyaW5nMSkpLm90aGVyVigpLnBhdGgoKS5ieShzdHJpbmcyKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Db2FsZXNjZTxvYmplY3Q+KF9fLk91dEUoXCJrbm93c1wiKSwgX18uT3V0RShcImNyZWF0ZWRcIikpLk90aGVyVigpLlBhdGgoKS5CeShcIm5hbWVcIikuQnkoVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Db2FsZXNjZShncmVtbGluZ28uVF9fLk91dEUoXCJrbm93c1wiKSwgZ3JlbWxpbmdvLlRfXy5PdXRFKFwiY3JlYXRlZFwiKSkuT3RoZXJWKCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXRFKFwiY3JlYXRlZFwiKSkub3RoZXJWKCkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXRFKFwiY3JlYXRlZFwiKSkub3RoZXJWKCkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY29hbGVzY2UoX18ub3V0RShcImtub3dzXCIpLCBfXy5vdXRFKFwiY3JlYXRlZFwiKSkub3RoZXJWKCkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jb2FsZXNjZShfXy5vdXRfZSgna25vd3MnKSwgX18ub3V0X2UoJ2NyZWF0ZWQnKSkub3RoZXJfdigpLnBhdGgoKS5ieSgnbmFtZScpLmJ5KFQubGFiZWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGNyZWF0ZWRYX29yZGVyX2J5WG5hbWVYX2NvYWxlc2NlWG5hbWVfY29uc3RhbnRYeFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dChcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIm5hbWVcIikuY29hbGVzY2UoX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJ4XCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dChcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIm5hbWVcIikuY29hbGVzY2UoX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJ4XCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmNvYWxlc2NlKF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5vcmRlcigpLmJ5KHN0cmluZzEpLmNvYWxlc2NlKF9fLnZhbHVlcyhzdHJpbmcxKSwgX18uY29uc3RhbnQoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dChcImNyZWF0ZWRcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuQ29hbGVzY2U8b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIiksIF9fLkNvbnN0YW50PG9iamVjdD4oXCJ4XCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dChcImNyZWF0ZWRcIikuT3JkZXIoKS5CeShcIm5hbWVcIikuQ29hbGVzY2UoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5jb2FsZXNjZShfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChcInhcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmNvYWxlc2NlKF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFwieFwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIm5hbWVcIikuY29hbGVzY2UoX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJ4XCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5vcmRlcigpLmJ5KCduYW1lJykuY29hbGVzY2UoX18udmFsdWVzKCduYW1lJyksIF9fLmNvbnN0YW50KCd4JykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsWF9jb21iaW5lWGluamVjdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuY29tYmluZShfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuY29tYmluZShfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLmNvbWJpbmUoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuY29tYmluZShfXy5pbmplY3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuQ29tYmluZShfXy5JbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5Db21iaW5lKGdyZW1saW5nby5UX18uSW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5jb21iaW5lKF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmNvbWJpbmUoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuY29tYmluZShfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmNvbWJpbmUoX18uaW5qZWN0KDEpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9jb21iaW5lWFZfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5jb21iaW5lKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5jb21iaW5lKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuY29tYmluZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmNvbWJpbmUoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkNvbWJpbmUoX18uVigpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkNvbWJpbmUoZ3JlbWxpbmdvLlRfXy5WKCkuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmNvbWJpbmUoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuY29tYmluZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5jb21iaW5lKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmNvbWJpbmUoX18uVigpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkX2NvbWJpbmVYY29uc3RhbnRYbnVsbFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkuY29tYmluZShfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuQ29tYmluZShfXy5Db25zdGFudDxvYmplY3Q+KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5Db21iaW5lKGdyZW1saW5nby5UX18uQ29uc3RhbnQobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5mb2xkKCkuY29tYmluZShfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkuY29tYmluZShfXy5jb25zdGFudChOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkX2NvbWJpbmVYVlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuQ29tYmluZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRm9sZCgpLkNvbWJpbmUoZ3JlbWxpbmdvLlRfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5jb21iaW5lKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9sZCgpLmNvbWJpbmUoX18uVigpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2NvbWJpbmVYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZSgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmNvbWJpbmUoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZSgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5jb21iaW5lKG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuQ29tYmluZSgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLkNvbWJpbmUoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZSgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZSgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZSgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkuY29tYmluZSgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2NvbWJpbmVYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZShudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmNvbWJpbmUobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZShudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5jb21iaW5lKG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuQ29tYmluZShudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLkNvbWJpbmUobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5jb21iaW5lKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5jb21iaW5lKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5jb21iaW5lKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5jb21iaW5lKE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX2NvbWJpbmVYVl92YWx1ZXNYbmFtZVhfZm9sZFhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKHN0cmluZzEpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkuQ29tYmluZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLkZvbGQoKS5Db21iaW5lKGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbm9uZXhpc3RhbnQnKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2NvbWJpbmVYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmNvbWJpbmUoX18uVigpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuQ29tYmluZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5Db21iaW5lKGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLkZvbGQoKSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKCdub25leGlzdGFudCcpLmZvbGQoKSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkX2NvbWJpbmVYVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShkZXNjKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLkZvbGQoKS5Db21iaW5lKF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuRm9sZCgpLkNvbWJpbmUoZ3JlbWxpbmdvLlRfXy5WKCkuVmFsdWVzKFwiYWdlXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmNvbWJpbmUoX18uVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkuY29tYmluZShfXy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpLmNvbWJpbmUoX18uVigpLnZhbHVlcygnYWdlJykub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X3BhdGhfYnlYdmFsdWVzWG5hbWVYX3RvVXBwZXJYX2NvbWJpbmVYTUFSS09YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieSh2YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuY29tYmluZShbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmNvbWJpbmUoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuY29tYmluZShbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoc3RyaW5nMCkudG9VcHBlcigpKS5jb21iaW5lKGxpc3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5QYXRoKCkuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlRvVXBwZXIoKSkuQ29tYmluZShuZXcgTGlzdDxvYmplY3Q+IHsgXCJNQVJLT1wiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuUGF0aCgpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5Ub1VwcGVyKCkpLkNvbWJpbmUoW11pbnRlcmZhY2V7fXtcIk1BUktPXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmNvbWJpbmUoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmNvbWJpbmUobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiTUFSS09cIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5jb21iaW5lKFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCduYW1lJykudG9fdXBwZXIoKSkuY29tYmluZShbJ01BUktPJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFh4eDFYX2NvbWJpbmVYVl92YWx1ZXNYbmFtZVhfZm9sZFhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkuY29tYmluZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcIm1hcmtvXCIgfSkuQ29tYmluZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJtYXJrb1wifSkuQ29tYmluZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmNvbWJpbmUoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwibWFya29cIik7IH19KS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydtYXJrbyddKS5jb21iaW5lKF9fLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9jb21iaW5lWHNlYXR0bGVfdmFuY291dmVyWF9vcmRlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QodmFsdWVzKS51bmZvbGQoKS5jb21iaW5lKFtcInNlYXR0bGVcIixcInZhbmNvdXZlclwiXSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuY29tYmluZShbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuY29tYmluZShbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKHN0cmluZzApLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5jb21iaW5lKGxpc3QwKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibG9jYXRpb25cIikuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5Db21iaW5lKG5ldyBMaXN0PG9iamVjdD4geyBcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIiB9KS5PcmRlcihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcImxvY2F0aW9uXCIpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuQ29tYmluZShbXWludGVyZmFjZXt9e1wic2VhdHRsZVwiLCBcInZhbmNvdXZlclwifSkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5jb21iaW5lKFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuY29tYmluZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJzZWF0dGxlXCIpOyBhZGQoXCJ2YW5jb3V2ZXJcIik7IH19KS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmNvbWJpbmUoW1wic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiXSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgnbG9jYXRpb24nKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuY29tYmluZShbJ3NlYXR0bGUnLCAndmFuY291dmVyJ10pLm9yZGVyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9jb21iaW5lWGVtcHR5X2xpc3RYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29tYmluZShbXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmNvbWJpbmUoW10pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29tYmluZShbXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShzdHJpbmcwKS5jb21iaW5lKGxpc3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLkNvbWJpbmUobmV3IExpc3Q8b2JqZWN0PiB7ICB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuQ29tYmluZShbXWludGVyZmFjZXt9e30pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29tYmluZShbXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29tYmluZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmNvbWJpbmUoW10pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgnbmFtZScpLmNvbWJpbmUoW10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfb3JkZXJfZm9sZF9jb21iaW5lWGNvbnN0YW50WDI3WF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuY29tYmluZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS5mb2xkKCkuY29tYmluZShfXy5jb25zdGFudChudW1iZXIwKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuRm9sZCgpLkNvbWJpbmUoX18uQ29uc3RhbnQ8b2JqZWN0PigyNykuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5PcmRlcigpLkZvbGQoKS5Db21iaW5lKGdyZW1saW5nby5UX18uQ29uc3RhbnQoMjcpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5jb21iaW5lKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuY29tYmluZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuZm9sZCgpLmNvbWJpbmUoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfY29tYmluZVhkYXZlX2tlbHZpblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5jb21iaW5lKFtcImRhdmVcIixcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmNvbWJpbmUoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5jb21iaW5lKFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoc3RyaW5nMCkuY29tYmluZShsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5Db21iaW5lKG5ldyBMaXN0PG9iamVjdD4geyBcImRhdmVcIiwgXCJrZWx2aW5cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuQ29tYmluZShbXWludGVyZmFjZXt9e1wiZGF2ZVwiLCBcImtlbHZpblwifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5jb21iaW5lKFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmNvbWJpbmUobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZGF2ZVwiKTsgYWRkKFwia2VsdmluXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29tYmluZShbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5jb21iaW5lKFsnZGF2ZScsICdrZWx2aW4nXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfbnVsbF9iWF9jb21iaW5lWGFfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5jb21iaW5lKFtcImFcIixcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmNvbWJpbmUoW1wiYVwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5jb21iaW5lKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmNvbWJpbmUobGlzdDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImJcIiB9KS5Db21iaW5lKG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgXCJjXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYVwiLCBuaWwsIFwiYlwifSkuQ29tYmluZShbXWludGVyZmFjZXt9e1wiYVwiLCBcImNcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5jb21iaW5lKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJiXCIpOyB9fSkuY29tYmluZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJjXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5jb21iaW5lKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5jb21iaW5lKFsnYScsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhX251bGxfYlhfY29tYmluZVhhX251bGxfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5jb21iaW5lKFtcImFcIixudWxsLFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuY29tYmluZShbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmNvbWJpbmUoW1wiYVwiLCBudWxsLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuY29tYmluZShsaXN0MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIG51bGwsIFwiYlwiIH0pLkNvbWJpbmUobmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImNcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJiXCJ9KS5Db21iaW5lKFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJjXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuY29tYmluZShbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmNvbWJpbmUobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJjXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5jb21iaW5lKFtcImFcIiwgbnVsbCwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5jb21iaW5lKFsnYScsIE5vbmUsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9jb21iaW5lWGZpdmVfdGhyZWVfN1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzMsXCJ0aHJlZVwiXSkuY29tYmluZShbXCJmaXZlXCIsXCJ0aHJlZVwiLDdpXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuY29tYmluZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuY29tYmluZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmNvbWJpbmUobGlzdDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDMsIFwidGhyZWVcIiB9KS5Db21iaW5lKG5ldyBMaXN0PG9iamVjdD4geyBcImZpdmVcIiwgXCJ0aHJlZVwiLCA3IH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCBcInRocmVlXCJ9KS5Db21iaW5lKFtdaW50ZXJmYWNle317XCJmaXZlXCIsIFwidGhyZWVcIiwgaW50MzIoNyl9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuY29tYmluZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoXCJ0aHJlZVwiKTsgfX0pLmNvbWJpbmUobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZml2ZVwiKTsgYWRkKFwidGhyZWVcIik7IGFkZCg3KTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuY29tYmluZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN10pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFszLCAndGhyZWUnXSkuY29tYmluZShbJ2ZpdmUnLCAndGhyZWUnLCA3XSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfYlhfY29uY2F0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEpLmNvbmNhdCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5Db25jYXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiYVwiLCBcImJcIikuQ29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCJhXCIsIFwiYlwiKS5jb25jYXQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJhXCIsIFwiYlwiKS5jb25jYXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJhXCIsIFwiYlwiKS5jb25jYXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnYScsICdiJykuY29uY2F0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfYlhfY29uY2F0X1hjWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdChcImNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdChcImNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJhXCIsIFwiYlwiKS5jb25jYXQoXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBzdHJpbmcxKS5jb25jYXQoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIpLkNvbmNhdChcImNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcImFcIiwgXCJiXCIpLkNvbmNhdChcImNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCJhXCIsIFwiYlwiKS5jb25jYXQoXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdChcImNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KFwiY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnYScsICdiJykuY29uY2F0KCdjJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfYlhfY29uY2F0X1hjX2RYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdChcImNcIiwgXCJkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEpLmNvbmNhdChzdHJpbmcyLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikuQ29uY2F0KFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcImFcIiwgXCJiXCIpLkNvbmNhdChcImNcIiwgXCJkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KFwiY1wiLCBcImRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2EnLCAnYicpLmNvbmNhdCgnYycsICdkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfYlhfY29uY2F0X1hpbmplY3RfY19kWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdChfXy5pbmplY3QoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KF9fLmluamVjdChcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KF9fLmluamVjdChcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBzdHJpbmcxKS5jb25jYXQoX18uaW5qZWN0KHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikuQ29uY2F0KF9fLkluamVjdChcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJhXCIsIFwiYlwiKS5Db25jYXQoZ3JlbWxpbmdvLlRfXy5JbmplY3QoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImFcIiwgXCJiXCIpLmNvbmNhdChfXy5pbmplY3QoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJhXCIsIFwiYlwiKS5jb25jYXQoX18uaW5qZWN0KFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiYVwiLCBcImJcIikuY29uY2F0KF9fLmluamVjdChcImNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdhJywgJ2InKS5jb25jYXQoX18uaW5qZWN0KCdjJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhWF9jb25jYXRfWGluamVjdF9MaXN0X2JfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJhXCIpLmNvbmNhdChfXy5pbmplY3QoW1wiYlwiLFwiY1wiXSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJhXCIpLmNvbmNhdChfXy5pbmplY3QoW1wiYlwiLCBcImNcIl0pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImFcIikuY29uY2F0KF9fLmluamVjdChbXCJiXCIsIFwiY1wiXSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwKS5jb25jYXQoX18uaW5qZWN0KGxpc3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcImFcIikuQ29uY2F0KF9fLkluamVjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJiXCIsIFwiY1wiIH0pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiYVwiKS5Db25jYXQoZ3JlbWxpbmdvLlRfXy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImJcIiwgXCJjXCJ9KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCJhXCIpLmNvbmNhdChfXy5pbmplY3QoW1wiYlwiLCBcImNcIl0pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJhXCIpLmNvbmNhdChfXy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYlwiKTsgYWRkKFwiY1wiKTsgfX0pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJhXCIpLmNvbmNhdChfXy5pbmplY3QoW1wiYlwiLCBcImNcIl0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnYScpLmNvbmNhdChfXy5pbmplY3QoWydiJywgJ2MnXSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhMaXN0WGFfYlhjWF9jb25jYXRfWGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixcImJcIl0sXCJjXCIpLmNvbmNhdChcImRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSwgXCJjXCIpLmNvbmNhdChcImRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0sIFwiY1wiKS5jb25jYXQoXCJkXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCwgc3RyaW5nMCkuY29uY2F0KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBcImJcIiB9LCBcImNcIikuQ29uY2F0KFwiZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIFwiYlwifSwgXCJjXCIpLkNvbmNhdChcImRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0sIFwiY1wiKS5jb25jYXQoXCJkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJiXCIpOyB9fSwgXCJjXCIpLmNvbmNhdChcImRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdLCBcImNcIikuY29uY2F0KFwiZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCAnYiddLCAnYycpLmNvbmNhdCgnZCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsWF9jb25jYXRfWGluamVjdFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuY29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5jb25jYXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5jb25jYXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuY29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5Db25jYXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuQ29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuY29uY2F0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmNvbmNhdCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5jb25jYXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5jb25jYXQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbF9hWF9jb25jYXRfWG51bGxfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCwgXCJhXCIpLmNvbmNhdChudWxsLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsLCBcImFcIikuY29uY2F0KG51bGwsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsLCBcImFcIikuY29uY2F0KG51bGwsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCwgc3RyaW5nMCkuY29uY2F0KHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCwgXCJhXCIpLkNvbmNhdChudWxsLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwsIFwiYVwiKS5Db25jYXQobmlsLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCwgXCJhXCIpLmNvbmNhdChudWxsLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwsIFwiYVwiKS5jb25jYXQobnVsbCwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsLCBcImFcIikuY29uY2F0KG51bGwsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lLCAnYScpLmNvbmNhdChOb25lLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhoZWxsb19oaVhfY29uY2F0WFZfdmFsdWVzX29yZGVyX2J5WG5hbWVYX3ZhbHVlc1huYW1lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJoZWxsb1wiLCBcImhpXCIpLmNvbmNhdChfXy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImhlbGxvXCIsIFwiaGlcIikuY29uY2F0KF9fLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImhlbGxvXCIsIFwiaGlcIikuY29uY2F0KF9fLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCwgc3RyaW5nMSkuY29uY2F0KF9fLlYoKS5vcmRlcigpLmJ5KHN0cmluZzIpLnZhbHVlcyhzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcImhlbGxvXCIsIFwiaGlcIikuQ29uY2F0KF9fLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJoZWxsb1wiLCBcImhpXCIpLkNvbmNhdChncmVtbGluZ28uVF9fLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImhlbGxvXCIsIFwiaGlcIikuY29uY2F0KF9fLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJoZWxsb1wiLCBcImhpXCIpLmNvbmNhdChfXy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiaGVsbG9cIiwgXCJoaVwiKS5jb25jYXQoX18uVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdoZWxsbycsICdoaScpLmNvbmNhdChfXy5WKCkub3JkZXIoKS5ieSgnbmFtZScpLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsX3ZhbHVlX2NvbmNhdF9YX1hfY29uY2F0X1hwZXJzb25YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KFwiIFwiKS5jb25jYXQoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChcIiBcIikuY29uY2F0KFwicGVyc29uXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KFwiIFwiKS5jb25jYXQoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5jb25jYXQoc3RyaW5nMikuY29uY2F0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Db25jYXQoXCIgXCIpLkNvbmNhdChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuQ29uY2F0KFwiIFwiKS5Db25jYXQoXCJwZXJzb25cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoXCIgXCIpLmNvbmNhdChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoXCIgXCIpLmNvbmNhdChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoXCIgXCIpLmNvbmNhdChcInBlcnNvblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnbmFtZScpLmNvbmNhdCgnICcpLmNvbmNhdCgncGVyc29uJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaGFzTGFiZWxYcGVyc29uWF92YWx1ZXNYbmFtZVhfYXNYYVhfY29uc3RhbnRYTXJYX2NvbmNhdFhzZWxlY3RYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uc3RhbnQoXCJNci5cIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uc3RhbnQoXCJNci5cIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbnN0YW50KFwiTXIuXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLmFzKHN0cmluZzIpLmNvbnN0YW50KHN0cmluZzMpLmNvbmNhdChfXy5zZWxlY3Qoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImFcIikuQ29uc3RhbnQ8b2JqZWN0PihcIk1yLlwiKS5Db25jYXQoX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJhXCIpLkNvbnN0YW50KFwiTXIuXCIpLkNvbmNhdChncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbnN0YW50KFwiTXIuXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uc3RhbnQoXCJNci5cIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25zdGFudChcIk1yLlwiKS5jb25jYXQoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS5hc18oJ2EnKS5jb25zdGFudCgnTXIuJykuY29uY2F0KF9fLnNlbGVjdCgnYScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19oYXNMYWJlbFhzb2Z0d2FyZVhfYXNYYVhfdmFsdWVzWG5hbWVYX2NvbmNhdFh1bnNlc1hfY29uY2F0WHNlbGVjdFhhWHZhbHVlc1hsYW5nWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChcIiB1c2VzIFwiKS5jb25jYXQoX18uc2VsZWN0KFwiYVwiKS52YWx1ZXMoXCJsYW5nXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KFwiIHVzZXMgXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcImxhbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KFwiIHVzZXMgXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcImxhbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5hcyhzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikuY29uY2F0KHN0cmluZzMpLmNvbmNhdChfXy5zZWxlY3Qoc3RyaW5nMSkudmFsdWVzKHN0cmluZzQpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLkFzKFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQ29uY2F0KFwiIHVzZXMgXCIpLkNvbmNhdChfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikuVmFsdWVzPG9iamVjdD4oXCJsYW5nXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuQXMoXCJhXCIpLlZhbHVlcyhcIm5hbWVcIikuQ29uY2F0KFwiIHVzZXMgXCIpLkNvbmNhdChncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikuVmFsdWVzKFwibGFuZ1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoXCIgdXNlcyBcIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikudmFsdWVzKFwibGFuZ1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KFwiIHVzZXMgXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcImxhbmdcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChcIiB1c2VzIFwiKS5jb25jYXQoX18uc2VsZWN0KFwiYVwiKS52YWx1ZXMoXCJsYW5nXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykuYXNfKCdhJykudmFsdWVzKCduYW1lJykuY29uY2F0KCcgdXNlcyAnKS5jb25jYXQoX18uc2VsZWN0KCdhJykudmFsdWVzKCdsYW5nJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0RV9hc1hhWF9WWDFYX3ZhbHVlc1huYW1lc1hfY29uY2F0WHNlbGVjdFhhWF9sYWJlbFhfY29uY2F0WHNlbGVjdFhhWF9pblZfdmFsdWVzWG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiYVwiKS5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KHNlbGVjdChcImFcIikubGFiZWwoKSkuY29uY2F0KHNlbGVjdChcImFcIikuaW5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiYVwiKS5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikubGFiZWwoKSkuY29uY2F0KF9fLnNlbGVjdChcImFcIikuaW5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImFcIikuVih2aWQxKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLmxhYmVsKCkpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLmluVigpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKHN0cmluZzApLlYodmlkMSkudmFsdWVzKHN0cmluZzEpLmNvbmNhdChfXy5zZWxlY3Qoc3RyaW5nMCkubGFiZWwoKSkuY29uY2F0KF9fLnNlbGVjdChzdHJpbmcwKS5pblYoKS52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKCkuQXMoXCJhXCIpLlYodmlkMSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkNvbmNhdChfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikuTGFiZWwoKSkuQ29uY2F0KF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5JblYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoKS5BcyhcImFcIikuVih2aWQxKS5WYWx1ZXMoXCJuYW1lXCIpLkNvbmNhdChncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikuTGFiZWwoKSkuQ29uY2F0KGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKS5JblYoKS5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiYVwiKS5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikubGFiZWwoKSkuY29uY2F0KF9fLnNlbGVjdChcImFcIikuaW5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKCkuYXMoXCJhXCIpLlYodmlkMSkudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoX18uc2VsZWN0KFwiYVwiKS5sYWJlbCgpKS5jb25jYXQoX18uc2VsZWN0KFwiYVwiKS5pblYoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImFcIikuVih2aWQxKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLmxhYmVsKCkpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLmluVigpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgpLmFzXygnYScpLlYodmlkMSkudmFsdWVzKCduYW1lJykuY29uY2F0KF9fLnNlbGVjdCgnYScpLmxhYmVsKCkpLmNvbmNhdChfXy5zZWxlY3QoJ2EnKS5pbl92KCkudmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0RV9hc1hhWF9WWDFYX3ZhbHVlc1huYW1lc1hfY29uY2F0WHNlbGVjdFhhWF9sYWJlbF9zZWxlY3RYYVhfaW5WX3ZhbHVlc1huYW1lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImFcIikuVih2aWQxKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChzZWxlY3QoXCJhXCIpLmxhYmVsKCksIHNlbGVjdChcImFcIikuaW5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiYVwiKS5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikubGFiZWwoKSwgX18uc2VsZWN0KFwiYVwiKS5pblYoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiYVwiKS5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikubGFiZWwoKSwgX18uc2VsZWN0KFwiYVwiKS5pblYoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhzdHJpbmcwKS5WKHZpZDEpLnZhbHVlcyhzdHJpbmcxKS5jb25jYXQoX18uc2VsZWN0KHN0cmluZzApLmxhYmVsKCksIF9fLnNlbGVjdChzdHJpbmcwKS5pblYoKS52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKCkuQXMoXCJhXCIpLlYodmlkMSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkNvbmNhdChfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikuTGFiZWwoKSwgX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLkluVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RSgpLkFzKFwiYVwiKS5WKHZpZDEpLlZhbHVlcyhcIm5hbWVcIikuQ29uY2F0KGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKS5MYWJlbCgpLCBncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikuSW5WKCkuVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImFcIikuVih2aWQxKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJhXCIpLmxhYmVsKCksIF9fLnNlbGVjdChcImFcIikuaW5WKCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKCkuYXMoXCJhXCIpLlYodmlkMSkudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoX18uc2VsZWN0KFwiYVwiKS5sYWJlbCgpLCBfXy5zZWxlY3QoXCJhXCIpLmluVigpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiYVwiKS5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImFcIikubGFiZWwoKSwgX18uc2VsZWN0KFwiYVwiKS5pblYoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoKS5hc18oJ2EnKS5WKHZpZDEpLnZhbHVlcygnbmFtZScpLmNvbmNhdChfXy5zZWxlY3QoJ2EnKS5sYWJlbCgpLCBfXy5zZWxlY3QoJ2EnKS5pbl92KCkudmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2FkZFZYY29uc3RhbnRYcHJlZml4X1hfY29uY2F0WFZYMVhfbGFiZWxYX2xhYmVsIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoY29uc3RhbnQoXCJwcmVmaXhfXCIpLmNvbmNhdChfXy5WKHZpZDEpLmxhYmVsKCkpKS5sYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKF9fLmNvbnN0YW50KFwicHJlZml4X1wiKS5jb25jYXQoX18uVih2aWQxKS5sYWJlbCgpKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoX18uY29uc3RhbnQoXCJwcmVmaXhfXCIpLmNvbmNhdChfXy5WKHZpZDEpLmxhYmVsKCkpKS5sYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoX18uY29uc3RhbnQoc3RyaW5nMCkuY29uY2F0KF9fLlYodmlkMSkubGFiZWwoKSkpLmxhYmVsKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKF9fLkNvbnN0YW50PG9iamVjdD4oXCJwcmVmaXhfXCIpLkNvbmNhdChfXy5WKHZpZDEpLkxhYmVsKCkpKS5MYWJlbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJwcmVmaXhfXCIpLkNvbmNhdChncmVtbGluZ28uVF9fLlYodmlkMSkuTGFiZWwoKSkpLkxhYmVsKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKF9fLmNvbnN0YW50KFwicHJlZml4X1wiKS5jb25jYXQoX18uVih2aWQxKS5sYWJlbCgpKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKF9fLmNvbnN0YW50KFwicHJlZml4X1wiKS5jb25jYXQoX18uVih2aWQxKS5sYWJlbCgpKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKF9fLmNvbnN0YW50KFwicHJlZml4X1wiKS5jb25jYXQoX18uVih2aWQxKS5sYWJlbCgpKSkubGFiZWwoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KF9fLmNvbnN0YW50KCdwcmVmaXhfJykuY29uY2F0KF9fLlYodmlkMSkubGFiZWwoKSkpLmxhYmVsKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxYX2NvbmpvaW5YMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuY29uam9pbihzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLkNvbmpvaW4oKHN0cmluZykgXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5Db25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmNvbmpvaW4oXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmNvbmpvaW4oJzEnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9jb25qb2luWDFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmpvaW4oXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5jb25qb2luKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Db25qb2luKChzdHJpbmcpIFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuQ29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5jb25qb2luKCcxJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRfY29uam9pblhfWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmNvbmpvaW4oXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmNvbmpvaW4oc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkuQ29uam9pbigoc3RyaW5nKSBcIjtcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJub25leGlzdGFudFwiKS5Gb2xkKCkuQ29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmNvbmpvaW4oXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25vbmV4aXN0YW50JykuZm9sZCgpLmNvbmpvaW4oJzsnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX2NvbmpvaW5YX1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKFwiX1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuY29uam9pbihcIl9cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKFwiX1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLkNvbmpvaW4oKHN0cmluZykgXCJfXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Db25qb2luKFwiX1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oXCJfXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oXCJfXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oXCJfXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oJ18nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2ZvbGRfY29uam9pblhzZW1pY29sb25YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuRm9sZCgpLkNvbmpvaW4oKHN0cmluZykgXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk9yZGVyKCkuRm9sZCgpLkNvbmpvaW4oXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuZm9sZCgpLmNvbmpvaW4oXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5mb2xkKCkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5vcmRlcigpLmZvbGQoKS5jb25qb2luKCc7JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfcGF0aF9ieVh2YWx1ZXNYbmFtZVhfdG9VcHBlclhfY29uam9pblhNQVJLT1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KHZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5jb25qb2luKFwiTUFSS09cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmNvbmpvaW4oXCJNQVJLT1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmNvbmpvaW4oXCJNQVJLT1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhzdHJpbmcwKS50b1VwcGVyKCkpLmNvbmpvaW4oc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuUGF0aCgpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Ub1VwcGVyKCkpLkNvbmpvaW4oKHN0cmluZykgXCJNQVJLT1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlBhdGgoKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuVG9VcHBlcigpKS5Db25qb2luKFwiTUFSS09cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5jb25qb2luKFwiTUFSS09cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuY29uam9pbihcIk1BUktPXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmNvbmpvaW4oXCJNQVJLT1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCduYW1lJykudG9fdXBwZXIoKSkuY29uam9pbignTUFSS08nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbWFya29YX2NvbmpvaW5YX1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmNvbmpvaW4oXCItXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmNvbmpvaW4oXCItXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5jb25qb2luKFwiLVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmNvbmpvaW4oc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJtYXJrb1wiIH0pLkNvbmpvaW4oKHN0cmluZykgXCItXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcIm1hcmtvXCJ9KS5Db25qb2luKFwiLVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkuY29uam9pbihcIi1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIm1hcmtvXCIpOyB9fSkuY29uam9pbihcIi1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5jb25qb2luKFwiLVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ21hcmtvJ10pLmNvbmpvaW4oJy0nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYX2NvbmpvaW5YMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QodmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmNvbmpvaW4oXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChzdHJpbmcwKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmNvbmpvaW4oc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibG9jYXRpb25cIikuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5PcmRlcihTY29wZS5Mb2NhbCkuQ29uam9pbigoc3RyaW5nKSBcIjFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcImxvY2F0aW9uXCIpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5Db25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuY29uam9pbihcIjFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5jb25qb2luKFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmNvbmpvaW4oXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgnbG9jYXRpb24nKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmNvbmpvaW4oJzEnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9jb25qb2luWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5jb25qb2luKFwiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5jb25qb2luKFwiXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29uam9pbihcIlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmNvbmpvaW4oc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5Db25qb2luKChzdHJpbmcpIFwiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5Db25qb2luKFwiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuY29uam9pbihcIlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5jb25qb2luKFwiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmNvbmpvaW4oXCJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCduYW1lJykuY29uam9pbignJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfbnVsbF9iWF9jb25qb2luWHh5elgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5jb25qb2luKFwieHl6XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmNvbmpvaW4oXCJ4eXpcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmNvbmpvaW4oXCJ4eXpcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5jb25qb2luKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImJcIiB9KS5Db25qb2luKChzdHJpbmcpIFwieHl6XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgbmlsLCBcImJcIn0pLkNvbmpvaW4oXCJ4eXpcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmNvbmpvaW4oXCJ4eXpcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmNvbmpvaW4oXCJ4eXpcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5jb25qb2luKFwieHl6XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnYScsIE5vbmUsICdiJ10pLmNvbmpvaW4oJ3h5eicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9jb25qb2luWF9YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFszaSxcInRocmVlXCJdKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFszaSwgXCJ0aHJlZVwiXSkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzNpLCBcInRocmVlXCJdKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmNvbmpvaW4oc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMywgXCJ0aHJlZVwiIH0pLkNvbmpvaW4oKHN0cmluZykgXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtpbnQzMigzKSwgXCJ0aHJlZVwifSkuQ29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzNpLCBcInRocmVlXCJdKS5jb25qb2luKFwiO1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoXCJ0aHJlZVwiKTsgfX0pLmNvbmpvaW4oXCI7XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuY29uam9pbihcIjtcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzMsICd0aHJlZSddKS5jb25qb2luKCc7JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxfYV9udWxsX2JYX2NvbmpvaW5YcGx1c1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW251bGwsXCJhXCIsbnVsbCxcImJcIl0pLmNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIFwiYVwiLCBudWxsLCBcImJcIl0pLmNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtudWxsLCBcImFcIiwgbnVsbCwgXCJiXCJdKS5jb25qb2luKFwiK1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmNvbmpvaW4oc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgXCJhXCIsIG51bGwsIFwiYlwiIH0pLkNvbmpvaW4oKHN0cmluZykgXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIFwiYVwiLCBuaWwsIFwiYlwifSkuQ29uam9pbihcIitcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW251bGwsIFwiYVwiLCBudWxsLCBcImJcIl0pLmNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobnVsbCk7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbbnVsbCwgXCJhXCIsIG51bGwsIFwiYlwiXSkuY29uam9pbihcIitcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoW05vbmUsICdhJywgTm9uZSwgJ2InXSkuY29uam9pbignKycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsX251bGxYX2NvbmpvaW5YcGx1c1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW251bGwsbnVsbF0pLmNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIG51bGxdKS5jb25qb2luKFwiK1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbbnVsbCwgbnVsbF0pLmNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuY29uam9pbihzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBudWxsLCBudWxsIH0pLkNvbmpvaW4oKHN0cmluZykgXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIG5pbH0pLkNvbmpvaW4oXCIrXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkuY29uam9pbihcIitcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChudWxsKTsgYWRkKG51bGwpOyB9fSkuY29uam9pbihcIitcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtudWxsLCBudWxsXSkuY29uam9pbihcIitcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoW05vbmUsIE5vbmVdKS5jb25qb2luKCcrJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jb25uZWN0ZWRDb21wb25lbnRfaGFzWGNvbXBvbmVudFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNvbm5lY3RlZENvbXBvbmVudCgpLkhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Db25uZWN0ZWRDb21wb25lbnQoKS5IYXMoXCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuY29ubmVjdGVkX2NvbXBvbmVudCgpLmhhcygnZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZGVkdXBfY29ubmVjdGVkQ29tcG9uZW50X2hhc1hjb21wb25lbnRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmRlZHVwKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmRlZHVwKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5kZWR1cCgpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmRlZHVwKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkRlZHVwKCkuQ29ubmVjdGVkQ29tcG9uZW50KCkuSGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkRlZHVwKCkuQ29ubmVjdGVkQ29tcG9uZW50KCkuSGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5kZWR1cCgpLmNvbm5lY3RlZENvbXBvbmVudCgpLmhhcyhcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmRlZHVwKCkuY29ubmVjdGVkQ29tcG9uZW50KCkuaGFzKFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZGVkdXAoKS5jb25uZWN0ZWRDb21wb25lbnQoKS5oYXMoXCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmRlZHVwKCkuY29ubmVjdGVkX2NvbXBvbmVudCgpLmhhcygnZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2Nvbm5lY3RlZENvbXBvbmVudF9wcm9qZWN0X2J5WG5hbWVYX2J5WGNvbXBvbmVudFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5jb25uZWN0ZWRDb21wb25lbnQoKS5wcm9qZWN0KFwibmFtZVwiLFwiY29tcG9uZW50XCIpLmJ5KFwibmFtZVwiKS5ieShcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvbm5lY3RlZENvbXBvbmVudCgpLnByb2plY3QoXCJuYW1lXCIsIFwiY29tcG9uZW50XCIpLmJ5KFwibmFtZVwiKS5ieShcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5jb25uZWN0ZWRDb21wb25lbnQoKS5wcm9qZWN0KFwibmFtZVwiLCBcImNvbXBvbmVudFwiKS5ieShcIm5hbWVcIikuYnkoXCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5jb25uZWN0ZWRDb21wb25lbnQoKS5wcm9qZWN0KHN0cmluZzEsIHN0cmluZzIpLmJ5KHN0cmluZzEpLmJ5KHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuQ29ubmVjdGVkQ29tcG9uZW50KCkuUHJvamVjdDxvYmplY3Q+KFwibmFtZVwiLCBcImNvbXBvbmVudFwiKS5CeShcIm5hbWVcIikuQnkoXCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5Db25uZWN0ZWRDb21wb25lbnQoKS5Qcm9qZWN0KFwibmFtZVwiLCBcImNvbXBvbmVudFwiKS5CeShcIm5hbWVcIikuQnkoXCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuY29ubmVjdGVkQ29tcG9uZW50KCkucHJvamVjdChcIm5hbWVcIiwgXCJjb21wb25lbnRcIikuYnkoXCJuYW1lXCIpLmJ5KFwiZ3JlbWxpbi5jb25uZWN0ZWRDb21wb25lbnRWZXJ0ZXhQcm9ncmFtLmNvbXBvbmVudFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5jb25uZWN0ZWRDb21wb25lbnQoKS5wcm9qZWN0KFwibmFtZVwiLCBcImNvbXBvbmVudFwiKS5ieShcIm5hbWVcIikuYnkoXCJncmVtbGluLmNvbm5lY3RlZENvbXBvbmVudFZlcnRleFByb2dyYW0uY29tcG9uZW50XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvbm5lY3RlZENvbXBvbmVudCgpLnByb2plY3QoXCJuYW1lXCIsIFwiY29tcG9uZW50XCIpLmJ5KFwibmFtZVwiKS5ieShcImdyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmNvbm5lY3RlZF9jb21wb25lbnQoKS5wcm9qZWN0KCduYW1lJywgJ2NvbXBvbmVudCcpLmJ5KCduYW1lJykuYnkoJ2dyZW1saW4uY29ubmVjdGVkQ29tcG9uZW50VmVydGV4UHJvZ3JhbS5jb21wb25lbnQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nvbm5lY3RlZENvbXBvbmVudF93aXRoWEVER0VTX2JvdGhFWGtub3dzWFhfd2l0aFhQUk9QRVJUWV9OQU1FX2NsdXN0ZXJYX3Byb2plY3RfYnlYbmFtZVhfYnlYY2x1c3RlclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY29ubmVjdGVkQ29tcG9uZW50KCkud2l0aChcIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LmVkZ2VzXCIsIF9fLmJvdGhFKFwia25vd3NcIikpLndpdGgoXCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnByb2plY3QoXCJuYW1lXCIsXCJjbHVzdGVyXCIpLmJ5KFwibmFtZVwiKS5ieShcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jb25uZWN0ZWRDb21wb25lbnQoKS53aXRoKFwifnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQuZWRnZXNcIiwgX18uYm90aEUoXCJrbm93c1wiKSkud2l0aChcIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LnByb3BlcnR5TmFtZVwiLCBcImNsdXN0ZXJcIikucHJvamVjdChcIm5hbWVcIiwgXCJjbHVzdGVyXCIpLmJ5KFwibmFtZVwiKS5ieShcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY29ubmVjdGVkQ29tcG9uZW50KCkud2l0aChcIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LmVkZ2VzXCIsIF9fLmJvdGhFKFwia25vd3NcIikpLndpdGgoXCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnByb2plY3QoXCJuYW1lXCIsIFwiY2x1c3RlclwiKS5ieShcIm5hbWVcIikuYnkoXCJjbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5jb25uZWN0ZWRDb21wb25lbnQoKS53aXRoKHN0cmluZzEsIF9fLmJvdGhFKHN0cmluZzIpKS53aXRoKHN0cmluZzMsIHN0cmluZzQpLnByb2plY3Qoc3RyaW5nNSwgc3RyaW5nNCkuYnkoc3RyaW5nNSkuYnkoc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQ29ubmVjdGVkQ29tcG9uZW50KCkuV2l0aChcIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LmVkZ2VzXCIsIF9fLkJvdGhFKFwia25vd3NcIikpLldpdGgoXCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLlByb2plY3Q8b2JqZWN0PihcIm5hbWVcIiwgXCJjbHVzdGVyXCIpLkJ5KFwibmFtZVwiKS5CeShcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5Db25uZWN0ZWRDb21wb25lbnQoKS5XaXRoKFwifnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQuZWRnZXNcIiwgZ3JlbWxpbmdvLlRfXy5Cb3RoRShcImtub3dzXCIpKS5XaXRoKFwifnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS5Qcm9qZWN0KFwibmFtZVwiLCBcImNsdXN0ZXJcIikuQnkoXCJuYW1lXCIpLkJ5KFwiY2x1c3RlclwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5jb25uZWN0ZWRDb21wb25lbnQoKS53aXRoKFwifnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQuZWRnZXNcIiwgX18uYm90aEUoXCJrbm93c1wiKSkud2l0aChcIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LnByb3BlcnR5TmFtZVwiLCBcImNsdXN0ZXJcIikucHJvamVjdChcIm5hbWVcIiwgXCJjbHVzdGVyXCIpLmJ5KFwibmFtZVwiKS5ieShcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmNvbm5lY3RlZENvbXBvbmVudCgpLndpdGgoXCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5lZGdlc1wiLCBfXy5ib3RoRShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS5wcm9qZWN0KFwibmFtZVwiLCBcImNsdXN0ZXJcIikuYnkoXCJuYW1lXCIpLmJ5KFwiY2x1c3RlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuY29ubmVjdGVkQ29tcG9uZW50KCkud2l0aF8oXCJ+dGlua2VycG9wLmNvbm5lY3RlZENvbXBvbmVudC5lZGdlc1wiLCBfXy5ib3RoRShcImtub3dzXCIpKS53aXRoXyhcIn50aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LnByb3BlcnR5TmFtZVwiLCBcImNsdXN0ZXJcIikucHJvamVjdChcIm5hbWVcIiwgXCJjbHVzdGVyXCIpLmJ5KFwibmFtZVwiKS5ieShcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5jb25uZWN0ZWRfY29tcG9uZW50KCkud2l0aF8oJ350aW5rZXJwb3AuY29ubmVjdGVkQ29tcG9uZW50LmVkZ2VzJywgX18uYm90aF9lKCdrbm93cycpKS53aXRoXygnfnRpbmtlcnBvcC5jb25uZWN0ZWRDb21wb25lbnQucHJvcGVydHlOYW1lJywgJ2NsdXN0ZXInKS5wcm9qZWN0KCduYW1lJywgJ2NsdXN0ZXInKS5ieSgnbmFtZScpLmJ5KCdjbHVzdGVyJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jb25zdGFudFgxMjNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmNvbnN0YW50KDEyMykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jb25zdGFudCgxMjMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNvbnN0YW50KDEyMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNvbnN0YW50KG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNvbnN0YW50PG9iamVjdD4oMTIzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNvbnN0YW50KDEyMykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY29uc3RhbnQoMTIzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY29uc3RhbnQoMTIzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY29uc3RhbnQoMTIzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jb25zdGFudCgxMjMpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY29uc3RhbnRYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY29uc3RhbnQobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jb25zdGFudChudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5jb25zdGFudChudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY29uc3RhbnQob2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ29uc3RhbnQ8b2JqZWN0PihudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkNvbnN0YW50KG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY29uc3RhbnQobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNvbnN0YW50KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jb25zdGFudChudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jb25zdGFudChOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhoYXNMYWJlbFhwZXJzb25YX3ZhbHVlc1huYW1lWF9jb25zdGFudFhpbmh1bWFuWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChcImluaHVtYW5cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChcImluaHVtYW5cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJpbmh1bWFuXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKHN0cmluZzApLCBfXy52YWx1ZXMoc3RyaW5nMSksIF9fLmNvbnN0YW50KHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5DaG9vc2U8b2JqZWN0PihfXy5IYXNMYWJlbChcInBlcnNvblwiKSwgX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLCBfXy5Db25zdGFudDxvYmplY3Q+KFwiaW5odW1hblwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5IYXNMYWJlbChcInBlcnNvblwiKSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwiaW5odW1hblwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLCBfXy5jb25zdGFudChcImluaHVtYW5cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzTGFiZWwoXCJwZXJzb25cIiksIF9fLnZhbHVlcyhcIm5hbWVcIiksIF9fLmNvbnN0YW50KFwiaW5odW1hblwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmNob29zZShfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18udmFsdWVzKFwibmFtZVwiKSwgX18uY29uc3RhbnQoXCJpbmh1bWFuXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoX18uaGFzX2xhYmVsKCdwZXJzb24nKSwgX18udmFsdWVzKCduYW1lJyksIF9fLmNvbnN0YW50KCdpbmh1bWFuJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ib3RoX2JvdGhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS5ib3RoKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5Cb3RoKCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJvdGgoKS5Cb3RoKCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkuYm90aCgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5ib3RoKCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLmJvdGgoKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5ib3RoKCkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfY291bnRYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRm9sZCgpLkNvdW50KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9sZCgpLmNvdW50KFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hub1hfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5vXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibm9cIikuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5vXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25vJykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3doZXJlWGluWGtrbm93c1hfb3V0WGNyZWF0ZWRYX2NvdW50X2lzXzBYWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLndoZXJlKF9fLmluKFwia25vd3NcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKDApKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkud2hlcmUoX18uaW4oXCJrbm93c1wiKS5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoMCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkud2hlcmUoX18uaW4oXCJrbm93c1wiKS5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoMCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLndoZXJlKF9fLmluKHN0cmluZzApLm91dChzdHJpbmcxKS5jb3VudCgpLmlzKG51bWJlcjApKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uSW4oXCJrbm93c1wiKS5PdXQoXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoMCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLldoZXJlKGdyZW1saW5nby5UX18uSW4oXCJrbm93c1wiKS5PdXQoXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoMCkpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkud2hlcmUoX18uaW4oXCJrbm93c1wiKS5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoMCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLndoZXJlKF9fLmluKFwia25vd3NcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKDApKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS53aGVyZShfXy5pbl8oXCJrbm93c1wiKS5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoMCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkud2hlcmUoX18uaW5fKCdrbm93cycpLm91dCgnY3JlYXRlZCcpLmNvdW50KCkuaXNfKDApKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDhYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoOCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoOCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDgpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoOCkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDgpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoOCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyg4KS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoOCkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhvdXRYX3RpbWVzWDVYX2FzWGFYX291dFh3cml0dGVuQnlYX2FzWGJYX3NlbGVjdFhhX2JYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoNSkuYXMoXCJhXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoNSkuYXMoXCJhXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDUpLmFzKFwiYVwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcyKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoNSkuQXMoXCJhXCIpLk91dChcIndyaXR0ZW5CeVwiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkpLlRpbWVzKDUpLkFzKFwiYVwiKS5PdXQoXCJ3cml0dGVuQnlcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyg1KS5hcyhcImFcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDUpLmFzKFwiYVwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoNSkuYXMoXCJhXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDUpLmFzXygnYScpLm91dCgnd3JpdHRlbkJ5JykuYXNfKCdiJykuc2VsZWN0KCdhJywgJ2InKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYM1hfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygzKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygzKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMykuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIwKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoMykuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5UaW1lcygzKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMykuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygzKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDMpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygzKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3JkZXJfYnlYbGFuZ1hfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3JkZXIoKS5ieShcImxhbmdcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm9yZGVyKCkuYnkoXCJsYW5nXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3JkZXIoKS5ieShcImxhbmdcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3JkZXIoKS5ieShzdHJpbmcwKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yZGVyKCkuQnkoXCJsYW5nXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibGFuZ1wiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm9yZGVyKCkuYnkoXCJsYW5nXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm9yZGVyKCkuYnkoXCJsYW5nXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm9yZGVyKCkuYnkoXCJsYW5nXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3JkZXIoKS5ieSgnbGFuZycpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRV9zYW1wbGVYMVhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuc2FtcGxlKDEpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5zYW1wbGUoMSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5zYW1wbGUoMSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuc2FtcGxlKG51bWJlcjApLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuU2FtcGxlKDEpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5TYW1wbGUoMSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5zYW1wbGUoMSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuc2FtcGxlKDEpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLnNhbXBsZSgxKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLnNhbXBsZSgxKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2FtcGxlWDFYX2J5WGFnZVhfY291bnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zYW1wbGUoMSkuYnkoXCJhZ2VcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zYW1wbGUoMSkuYnkoXCJhZ2VcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2FtcGxlKG51bWJlcjApLmJ5KHN0cmluZzApLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2FtcGxlKDEpLkJ5KFwiYWdlXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TYW1wbGUoMSkuQnkoXCJhZ2VcIikuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zYW1wbGUoMSkuYnkoXCJhZ2VcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2FtcGxlKDEpLmJ5KFwiYWdlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNhbXBsZSgxKS5ieShcImFnZVwiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNhbXBsZSgxKS5ieSgnYWdlJykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX29yZGVyX2J5WG5vWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm9yZGVyKCkuYnkoXCJub1wiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoXCJub1wiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vcmRlcigpLmJ5KHN0cmluZzApLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3JkZXIoKS5CeShcIm5vXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibm9cIikuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibm9cIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5vXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm9yZGVyKCkuYnkoXCJub1wiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yZGVyKCkuYnkoJ25vJykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwX2J5WGxhYmVsWF9jb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KGxhYmVsKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFQuTGFiZWwpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYbGFiZWxYX2NvdW50WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KGxhYmVsKS5jb3VudChsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoVC5MYWJlbCkuQ291bnQoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuY291bnQoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWERUX2hvdXJfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSkuZGF0ZUFkZChEVC5ob3VyLCAyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwLCBvZmZzZXRkYXRldGltZTEpLmRhdGVBZGQoRFQuaG91ciwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpKS5EYXRlQWRkKERULkhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDgsIDIsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSwgdGltZS5EYXRlKDIwMjMsIDgsIDIsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkuRGF0ZUFkZChncmVtbGluZ28uRFQuSG91ciwgMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpLCBPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJykpLmRhdGVBZGQoRFQuaG91ciwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMlQwMDowMCswMDowMCcpLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAyVDAwOjAwKzAwOjAwJykpLmRhdGVfYWRkKERULmhvdXIsIDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWGhvdXJfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKGhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSkuZGF0ZUFkZChEVC5ob3VyLCAyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwLCBvZmZzZXRkYXRldGltZTEpLmRhdGVBZGQoRFQuaG91ciwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpKS5EYXRlQWRkKERULkhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDgsIDIsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSwgdGltZS5EYXRlKDIwMjMsIDgsIDIsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkuRGF0ZUFkZChncmVtbGluZ28uRFQuSG91ciwgMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpLCBPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpKS5kYXRlQWRkKERULmhvdXIsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJykpLmRhdGVBZGQoRFQuaG91ciwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMlQwMDowMCswMDowMCcpLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAyVDAwOjAwKzAwOjAwJykpLmRhdGVfYWRkKERULmhvdXIsIDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWGhvdXJfMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKGhvdXIsIC0xKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSkuZGF0ZUFkZChEVC5ob3VyLCAtMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIC0xKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwLCBvZmZzZXRkYXRldGltZTEpLmRhdGVBZGQoRFQuaG91ciwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpKS5EYXRlQWRkKERULkhvdXIsIC0xKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KHRpbWUuRGF0ZSgyMDIzLCA4LCAyLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSksIHRpbWUuRGF0ZSgyMDIzLCA4LCAyLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpLkRhdGVBZGQoZ3JlbWxpbmdvLkRULkhvdXIsIC0xKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJykpLmRhdGVBZGQoRFQuaG91ciwgLTEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpLCBPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDgtMDJUMDA6MDBaXCIpKS5kYXRlQWRkKERULmhvdXIsIC0xKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlQWRkKERULmhvdXIsIC0xKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAyVDAwOjAwKzAwOjAwJyksIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDJUMDA6MDArMDA6MDAnKSkuZGF0ZV9hZGQoRFQuaG91ciwgLTEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhkYXRldGltZVhzdHJYWF9kYXRlQWRkWG1pbnV0ZV8xMFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKG1pbnV0ZSwgMTApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULm1pbnV0ZSwgMTApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSkuZGF0ZUFkZChEVC5taW51dGUsIDEwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwLCBvZmZzZXRkYXRldGltZTEpLmRhdGVBZGQoRFQubWludXRlLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0wOC0wMlQwMDowMFpcIiksIERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0wOC0wMlQwMDowMFpcIikpLkRhdGVBZGQoRFQuTWludXRlLCAxMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh0aW1lLkRhdGUoMjAyMywgOCwgMiwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpLCB0aW1lLkRhdGUoMjAyMywgOCwgMiwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKS5EYXRlQWRkKGdyZW1saW5nby5EVC5NaW51dGUsIDEwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJykpLmRhdGVBZGQoRFQubWludXRlLCAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wMlQwMDowMFpcIiksIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wMlQwMDowMFpcIikpLmRhdGVBZGQoRFQubWludXRlLCAxMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSkuZGF0ZUFkZChEVC5taW51dGUsIDEwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAyVDAwOjAwKzAwOjAwJyksIGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDJUMDA6MDArMDA6MDAnKSkuZGF0ZV9hZGQoRFQubWludXRlLCAxMCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGRhdGV0aW1lWHN0clhYX2RhdGVBZGRYc2Vjb25kXzIwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJykpLmRhdGVBZGQoc2Vjb25kLCAyMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJykpLmRhdGVBZGQoRFQuc2Vjb25kLCAyMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlQWRkKERULnNlY29uZCwgMjApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvZmZzZXRkYXRldGltZTAsIG9mZnNldGRhdGV0aW1lMSkuZGF0ZUFkZChEVC5zZWNvbmQsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSkuRGF0ZUFkZChEVC5TZWNvbmQsIDIwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KHRpbWUuRGF0ZSgyMDIzLCA4LCAyLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSksIHRpbWUuRGF0ZSgyMDIzLCA4LCAyLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpLkRhdGVBZGQoZ3JlbWxpbmdvLkRULlNlY29uZCwgMjApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSkuZGF0ZUFkZChEVC5zZWNvbmQsIDIwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSwgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSkuZGF0ZUFkZChEVC5zZWNvbmQsIDIwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDJUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpKS5kYXRlQWRkKERULnNlY29uZCwgMjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDJUMDA6MDArMDA6MDAnKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMlQwMDowMCswMDowMCcpKS5kYXRlX2FkZChEVC5zZWNvbmQsIDIwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYZGF0ZXRpbWVYc3RyWFhfZGF0ZUFkZFhkYXlfMTFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA5LTA2VDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOS0wNlQwMDowMDowMFonKSkuZGF0ZUFkZChkYXksIDExKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA5LTA2VDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOS0wNlQwMDowMDowMFonKSkuZGF0ZUFkZChEVC5kYXksIDExKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOS0wNlQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDktMDZUMDA6MDA6MDBaJykpLmRhdGVBZGQoRFQuZGF5LCAxMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9mZnNldGRhdGV0aW1lMCwgb2Zmc2V0ZGF0ZXRpbWUxKS5kYXRlQWRkKERULmRheSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDktMDZUMDA6MDBaXCIpLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDktMDZUMDA6MDBaXCIpKS5EYXRlQWRkKERULkRheSwgMTEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QodGltZS5EYXRlKDIwMjMsIDksIDYsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSwgdGltZS5EYXRlKDIwMjMsIDksIDYsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkuRGF0ZUFkZChncmVtbGluZ28uRFQuRGF5LCAxMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDktMDZUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA5LTA2VDAwOjAwOjAwWicpKS5kYXRlQWRkKERULmRheSwgMTEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDktMDZUMDA6MDBaXCIpLCBPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDktMDZUMDA6MDBaXCIpKS5kYXRlQWRkKERULmRheSwgMTEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChuZXcgRGF0ZSgnMjAyMy0wOS0wNlQwMDowMFonKSwgbmV3IERhdGUoJzIwMjMtMDktMDZUMDA6MDBaJykpLmRhdGVBZGQoRFQuZGF5LCAxMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOS0wNlQwMDowMCswMDowMCcpLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA5LTA2VDAwOjAwKzAwOjAwJykpLmRhdGVfYWRkKERULmRheSwgMTEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhkYXRldGltZVhzdHIxWFhfZGF0ZURpZmZYZGF0ZXRpbWVYc3RyMlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSkuZGF0ZURpZmYoZGF0ZXRpbWUoJzIwMjMtMDgtMDlUMDA6MDA6MDBaJykpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlRGlmZihkYXRldGltZSgnMjAyMy0wOC0wOVQwMDowMDowMFonKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTAyVDAwOjAwOjAwWicpKS5kYXRlRGlmZihkYXRldGltZSgnMjAyMy0wOC0wOVQwMDowMDowMFonKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9mZnNldGRhdGV0aW1lMCwgb2Zmc2V0ZGF0ZXRpbWUxKS5kYXRlRGlmZihvZmZzZXRkYXRldGltZTIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSkuRGF0ZURpZmYoRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA5VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh0aW1lLkRhdGUoMjAyMywgOCwgMiwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpLCB0aW1lLkRhdGUoMjAyMywgOCwgMiwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKS5EYXRlRGlmZih0aW1lLkRhdGUoMjAyMywgOCwgOSwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wMlQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDJUMDA6MDA6MDBaJykpLmRhdGVEaWZmKGRhdGV0aW1lKCcyMDIzLTA4LTA5VDAwOjAwOjAwWicpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSwgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTAyVDAwOjAwWlwiKSkuZGF0ZURpZmYoT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTA5VDAwOjAwWlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTAyVDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMlQwMDowMFonKSkuZGF0ZURpZmYobmV3IERhdGUoJzIwMjMtMDgtMDlUMDA6MDBaJykpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDJUMDA6MDArMDA6MDAnKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMlQwMDowMCswMDowMCcpKS5kYXRlX2RpZmYoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOVQwMDowMCswMDowMCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYZGF0ZXRpbWVYc3RyMVhYX2RhdGVEaWZmWGNvbnN0YW50WGRhdGV0aW1lWHN0cjJYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDhUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTA4VDAwOjAwOjAwWicpKS5kYXRlRGlmZihjb25zdGFudChkYXRldGltZSgnMjAyMy0wOC0wMVQwMDowMDowMFonKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDhUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTA4VDAwOjAwOjAwWicpKS5kYXRlRGlmZihfXy5jb25zdGFudChkYXRldGltZSgnMjAyMy0wOC0wMVQwMDowMDowMFonKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTA4VDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wOFQwMDowMDowMFonKSkuZGF0ZURpZmYoX18uY29uc3RhbnQoZGF0ZXRpbWUoJzIwMjMtMDgtMDFUMDA6MDA6MDBaJykpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2Zmc2V0ZGF0ZXRpbWUwLCBvZmZzZXRkYXRldGltZTEpLmRhdGVEaWZmKF9fLmNvbnN0YW50KG9mZnNldGRhdGV0aW1lMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkuRGF0ZURpZmYoX18uQ29uc3RhbnQ8b2JqZWN0PihEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDFUMDA6MDBaXCIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCh0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpLCB0aW1lLkRhdGUoMjAyMywgOCwgOCwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpKS5EYXRlRGlmZihncmVtbGluZ28uVF9fLkNvbnN0YW50KHRpbWUuRGF0ZSgyMDIzLCA4LCAxLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wOFQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDhUMDA6MDA6MDBaJykpLmRhdGVEaWZmKF9fLmNvbnN0YW50KGRhdGV0aW1lKCcyMDIzLTA4LTAxVDAwOjAwOjAwWicpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIiksIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpLmRhdGVEaWZmKF9fLmNvbnN0YW50KE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wMVQwMDowMFpcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IERhdGUoJzIwMjMtMDgtMDhUMDA6MDBaJyksIG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpKS5kYXRlRGlmZihfXy5jb25zdGFudChuZXcgRGF0ZSgnMjAyMy0wOC0wMVQwMDowMFonKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGRhdGV0aW1lLmRhdGV0aW1lLmZyb21pc29mb3JtYXQoJzIwMjMtMDgtMDhUMDA6MDArMDA6MDAnKSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpKS5kYXRlX2RpZmYoX18uY29uc3RhbnQoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMVQwMDowMCswMDowMCcpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGRhdGV0aW1lWHN0cjFYWF9kYXRlRGlmZlhpbmplY3RYZGF0ZXRpbWVYc3RyMlhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wOFQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDhUMDA6MDA6MDBaJykpLmRhdGVEaWZmKGluamVjdChkYXRldGltZSgnMjAyMy0xMC0xMVQwMDowMDowMFonKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMDgtMDhUMDA6MDA6MDBaJyksIERhdGVUaW1lKCcyMDIzLTA4LTA4VDAwOjAwOjAwWicpKS5kYXRlRGlmZihfXy5pbmplY3QoZGF0ZXRpbWUoJzIwMjMtMTAtMTFUMDA6MDA6MDBaJykpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChkYXRldGltZSgnMjAyMy0wOC0wOFQwMDowMDowMFonKSwgRGF0ZVRpbWUoJzIwMjMtMDgtMDhUMDA6MDA6MDBaJykpLmRhdGVEaWZmKF9fLmluamVjdChkYXRldGltZSgnMjAyMy0xMC0xMVQwMDowMDowMFonKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvZmZzZXRkYXRldGltZTAsIG9mZnNldGRhdGV0aW1lMSkuZGF0ZURpZmYoX18uaW5qZWN0KG9mZnNldGRhdGV0aW1lMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTA4VDAwOjAwWlwiKSkuRGF0ZURpZmYoX18uSW5qZWN0KERhdGVUaW1lT2Zmc2V0LlBhcnNlKFwiMjAyMy0xMC0xMVQwMDowMFpcIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSksIHRpbWUuRGF0ZSgyMDIzLCA4LCA4LCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSkpLkRhdGVEaWZmKGdyZW1saW5nby5UX18uSW5qZWN0KHRpbWUuRGF0ZSgyMDIzLCAxMCwgMTEsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTA4LTA4VDAwOjAwOjAwWicpLCBEYXRlVGltZSgnMjAyMy0wOC0wOFQwMDowMDowMFonKSkuZGF0ZURpZmYoX18uaW5qZWN0KGRhdGV0aW1lKCcyMDIzLTEwLTExVDAwOjAwOjAwWicpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIiksIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wOFQwMDowMFpcIikpLmRhdGVEaWZmKF9fLmluamVjdChPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMTAtMTFUMDA6MDBaXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTA4LTA4VDAwOjAwWicpLCBuZXcgRGF0ZSgnMjAyMy0wOC0wOFQwMDowMFonKSkuZGF0ZURpZmYoX18uaW5qZWN0KG5ldyBEYXRlKCcyMDIzLTEwLTExVDAwOjAwWicpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wOFQwMDowMCswMDowMCcpLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTA4VDAwOjAwKzAwOjAwJykpLmRhdGVfZGlmZihfXy5pbmplY3QoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0xMC0xMVQwMDowMCswMDowMCcpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYmlydGhkYXlYX2FzRGF0ZV9kYXRlRGlmZlhkYXRldGltZVgxOTcwMDEwMVQwMDAwWlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTU5NjMyNjQwMDAwMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjU5NzcxNTIwMDAwMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiY2hhcmxpZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTAxMjUyMTYwMDAwMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIi0xMzE1ODcyMDAwMDBcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE1OTYzMjY0MDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCI1OTc3MTUyMDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxMDEyNTIxNjAwMDAwXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiLTEzMTU4NzIwMDAwMFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE1OTYzMjY0MDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCI1OTc3MTUyMDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxMDEyNTIxNjAwMDAwXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiLTEzMTU4NzIwMDAwMFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmczLCBzdHJpbmc4KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIHN0cmluZzEwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE1OTYzMjY0MDAwMDBcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCI1OTc3MTUyMDAwMDBcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxMDEyNTIxNjAwMDAwXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiLTEzMTU4NzIwMDAwMFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTU5NjMyNjQwMDAwMFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjU5NzcxNTIwMDAwMFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikuUHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjEwMTI1MjE2MDAwMDBcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJzdXp5XCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCItMTMxNTg3MjAwMDAwXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTU5NjMyNjQwMDAwMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvaG5cIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjU5NzcxNTIwMDAwMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImNoYXJsaWVcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjEwMTI1MjE2MDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJzdXp5XCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCItMTMxNTg3MjAwMDAwXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIjE1OTYzMjY0MDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb2huXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCI1OTc3MTUyMDAwMDBcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJjaGFybGllXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxMDEyNTIxNjAwMDAwXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3V6eVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiLTEzMTU4NzIwMDAwMFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgXCIxNTk2MzI2NDAwMDAwXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9oblwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiNTk3NzE1MjAwMDAwXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiY2hhcmxpZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIFwiMTAxMjUyMTYwMDAwMFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN1enlcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCBcIi0xMzE1ODcyMDAwMDBcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5wcm9wZXJ0eSgnYmlydGhkYXknLCAnMTU5NjMyNjQwMDAwMCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb2huJykucHJvcGVydHkoJ2JpcnRoZGF5JywgJzU5NzcxNTIwMDAwMCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdjaGFybGllJykucHJvcGVydHkoJ2JpcnRoZGF5JywgJzEwMTI1MjE2MDAwMDAnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnc3V6eScpLnByb3BlcnR5KCdiaXJ0aGRheScsICctMTMxNTg3MjAwMDAwJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc051bWJlcigpLmFzRGF0ZSgpLmRhdGVEaWZmKGRhdGV0aW1lKFwiMTk3MC0wMS0wMVQwMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNOdW1iZXIoKS5hc0RhdGUoKS5kYXRlRGlmZihkYXRldGltZShcIjE5NzAtMDEtMDFUMDA6MDBaXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc051bWJlcigpLmFzRGF0ZSgpLmRhdGVEaWZmKGRhdGV0aW1lKFwiMTk3MC0wMS0wMVQwMDowMFpcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYXNOdW1iZXIoKS5hc0RhdGUoKS5kYXRlRGlmZihvZmZzZXRkYXRldGltZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYmlydGhkYXlcIikuQXNOdW1iZXIoKS5Bc0RhdGUoKS5EYXRlRGlmZihEYXRlVGltZU9mZnNldC5QYXJzZShcIjE5NzAtMDEtMDFUMDA6MDBaXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImJpcnRoZGF5XCIpLkFzTnVtYmVyKCkuQXNEYXRlKCkuRGF0ZURpZmYodGltZS5EYXRlKDE5NzAsIDEsIDEsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNOdW1iZXIoKS5hc0RhdGUoKS5kYXRlRGlmZihkYXRldGltZShcIjE5NzAtMDEtMDFUMDA6MDBaXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNOdW1iZXIoKS5hc0RhdGUoKS5kYXRlRGlmZihPZmZzZXREYXRlVGltZS5wYXJzZShcIjE5NzAtMDEtMDFUMDA6MDBaXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYmlydGhkYXlcIikuYXNOdW1iZXIoKS5hc0RhdGUoKS5kYXRlRGlmZihuZXcgRGF0ZSgnMTk3MC0wMS0wMVQwMDowMFonKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdiaXJ0aGRheScpLmFzX251bWJlcigpLmFzX2RhdGUoKS5kYXRlX2RpZmYoZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMTk3MC0wMS0wMVQwMDowMCswMDowMCcpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX2FsaWNlWF92YWx1ZXNYYmlydGhkYXlYX2FzRGF0ZV9kYXRlRGlmZlhjb25zdGFudFhudWxsWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxNTk2MzI2NDAwMDAwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxNTk2MzI2NDAwMDAwKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0eShcImJpcnRoZGF5XCIsIDE1OTYzMjY0MDAwMDApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLlByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnR5KFwiYmlydGhkYXlcIiwgMTU5NjMyNjQwMDAwMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0eShcImJpcnRoZGF5XCIsIDE1OTYzMjY0MDAwMDApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydHkoXCJiaXJ0aGRheVwiLCAxNTk2MzI2NDAwMDAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLnByb3BlcnR5KCdiaXJ0aGRheScsIGxvbmcoMTU5NjMyNjQwMDAwMCkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImFsaWNlXCIpLnZhbHVlcyhcImJpcnRoZGF5XCIpLmFzRGF0ZSgpLmRhdGVEaWZmKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJhbGljZVwiKS52YWx1ZXMoXCJiaXJ0aGRheVwiKS5hc0RhdGUoKS5kYXRlRGlmZihfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImFsaWNlXCIpLnZhbHVlcyhcImJpcnRoZGF5XCIpLmFzRGF0ZSgpLmRhdGVEaWZmKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnZhbHVlcyhzdHJpbmcyKS5hc0RhdGUoKS5kYXRlRGlmZihfXy5jb25zdGFudChvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImFsaWNlXCIpLlZhbHVlczxvYmplY3Q+KFwiYmlydGhkYXlcIikuQXNEYXRlKCkuRGF0ZURpZmYoX18uQ29uc3RhbnQ8b2JqZWN0PihudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikuVmFsdWVzKFwiYmlydGhkYXlcIikuQXNEYXRlKCkuRGF0ZURpZmYoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikudmFsdWVzKFwiYmlydGhkYXlcIikuYXNEYXRlKCkuZGF0ZURpZmYoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikudmFsdWVzKFwiYmlydGhkYXlcIikuYXNEYXRlKCkuZGF0ZURpZmYoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiYWxpY2VcIikudmFsdWVzKFwiYmlydGhkYXlcIikuYXNEYXRlKCkuZGF0ZURpZmYoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdhbGljZScpLnZhbHVlcygnYmlydGhkYXknKS5hc19kYXRlKCkuZGF0ZV9kaWZmKF9fLmNvbnN0YW50KE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbFhfZGlmZmVyZW5jZVhpbmplY3RYMVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmRpZmZlcmVuY2UoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmRpZmZlcmVuY2UoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5kaWZmZXJlbmNlKF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmRpZmZlcmVuY2UoX18uaW5qZWN0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLkRpZmZlcmVuY2UoX18uSW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuRGlmZmVyZW5jZShncmVtbGluZ28uVF9fLkluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuZGlmZmVyZW5jZShfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5kaWZmZXJlbmNlKF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmRpZmZlcmVuY2UoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5kaWZmZXJlbmNlKF9fLmluamVjdCgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZGlmZmVyZW5jZVhWX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZGlmZmVyZW5jZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZGlmZmVyZW5jZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmRpZmZlcmVuY2UoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5kaWZmZXJlbmNlKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5EaWZmZXJlbmNlKF9fLlYoKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5EaWZmZXJlbmNlKGdyZW1saW5nby5UX18uVigpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5kaWZmZXJlbmNlKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmRpZmZlcmVuY2UoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZGlmZmVyZW5jZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5kaWZmZXJlbmNlKF9fLlYoKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9sZF9kaWZmZXJlbmNlWGNvbnN0YW50WG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudChvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRm9sZCgpLkRpZmZlcmVuY2UoX18uQ29uc3RhbnQ8b2JqZWN0PihudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuRGlmZmVyZW5jZShncmVtbGluZ28uVF9fLkNvbnN0YW50KG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9sZF9kaWZmZXJlbmNlWFZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRm9sZCgpLkRpZmZlcmVuY2UoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5EaWZmZXJlbmNlKGdyZW1saW5nby5UX18uVigpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaWZmZXJlbmNlWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaWZmZXJlbmNlKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuZGlmZmVyZW5jZShudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLkRpZmZlcmVuY2UoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5EaWZmZXJlbmNlKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLmRpZmZlcmVuY2UoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaWZmZXJlbmNlWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaWZmZXJlbmNlKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuZGlmZmVyZW5jZShvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLkRpZmZlcmVuY2UobnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5EaWZmZXJlbmNlKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkuZGlmZmVyZW5jZShOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9kaWZmZXJlbmNlWFZfdmFsdWVzWG5hbWVYX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKHN0cmluZzEpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkuRGlmZmVyZW5jZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJub25leGlzdGFudFwiKS5Gb2xkKCkuRGlmZmVyZW5jZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25vbmV4aXN0YW50JykuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaWZmZXJlbmNlWFZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuRGlmZmVyZW5jZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkuRGlmZmVyZW5jZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJub25leGlzdGFudFwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygnbm9uZXhpc3RhbnQnKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfZm9sZF9kaWZmZXJlbmNlWFZfdmFsdWVzWGFnZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5Gb2xkKCkuRGlmZmVyZW5jZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5Gb2xkKCkuRGlmZmVyZW5jZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuZm9sZCgpLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcygnYWdlJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9kaWZmZXJlbmNlWE1BUktPWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkodmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmRpZmZlcmVuY2UoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5kaWZmZXJlbmNlKFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmRpZmZlcmVuY2UoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKHN0cmluZzApLnRvVXBwZXIoKSkuZGlmZmVyZW5jZShsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuUGF0aCgpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Ub1VwcGVyKCkpLkRpZmZlcmVuY2UobmV3IExpc3Q8b2JqZWN0PiB7IFwiTUFSS09cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlBhdGgoKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuVG9VcHBlcigpKS5EaWZmZXJlbmNlKFtdaW50ZXJmYWNle317XCJNQVJLT1wifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5kaWZmZXJlbmNlKFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5kaWZmZXJlbmNlKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIk1BUktPXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuZGlmZmVyZW5jZShbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcygnbmFtZScpLnRvX3VwcGVyKCkpLmRpZmZlcmVuY2UoWydNQVJLTyddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbWFya29YX2RpZmZlcmVuY2VYVl92YWx1ZXNYbmFtZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwibWFya29cIiB9KS5EaWZmZXJlbmNlKF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJtYXJrb1wifSkuRGlmZmVyZW5jZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmRpZmZlcmVuY2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwibWFya29cIik7IH19KS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydtYXJrbyddKS5kaWZmZXJlbmNlKF9fLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9kaWZmZXJlbmNlWHNlYXR0bGVfdmFuY291dmVyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdCh2YWx1ZXMpLnVuZm9sZCgpLmRpZmZlcmVuY2UoW1wic2VhdHRsZVwiLFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpZmZlcmVuY2UoW1wic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlmZmVyZW5jZShbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoc3RyaW5nMCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpZmZlcmVuY2UobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcImxvY2F0aW9uXCIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuRGlmZmVyZW5jZShuZXcgTGlzdDxvYmplY3Q+IHsgXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcImxvY2F0aW9uXCIpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuRGlmZmVyZW5jZShbXWludGVyZmFjZXt9e1wic2VhdHRsZVwiLCBcInZhbmNvdXZlclwifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlmZmVyZW5jZShbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlmZmVyZW5jZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJzZWF0dGxlXCIpOyBhZGQoXCJ2YW5jb3V2ZXJcIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlmZmVyZW5jZShbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoJ2xvY2F0aW9uJykuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpZmZlcmVuY2UoWydzZWF0dGxlJywgJ3ZhbmNvdXZlciddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaWZmZXJlbmNlWHJpcHBsZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtcInJpcHBsZVwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpZmZlcmVuY2UoW1wicmlwcGxlXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpZmZlcmVuY2UoW1wicmlwcGxlXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmRpZmZlcmVuY2UobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuRGlmZmVyZW5jZShuZXcgTGlzdDxvYmplY3Q+IHsgXCJyaXBwbGVcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuRGlmZmVyZW5jZShbXWludGVyZmFjZXt9e1wicmlwcGxlXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpZmZlcmVuY2UoW1wicmlwcGxlXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcInJpcHBsZVwiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpZmZlcmVuY2UoW1wicmlwcGxlXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5kaWZmZXJlbmNlKFsncmlwcGxlJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2RpZmZlcmVuY2VYZW1wdHlfbGlzdFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlmZmVyZW5jZShbXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmRpZmZlcmVuY2UobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuRGlmZmVyZW5jZShuZXcgTGlzdDxvYmplY3Q+IHsgIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5EaWZmZXJlbmNlKFtdaW50ZXJmYWNle317fSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7ICB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlmZmVyZW5jZShbXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCduYW1lJykuZGlmZmVyZW5jZShbXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9mb2xkX2RpZmZlcmVuY2VYY29uc3RhbnRYMjdYX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudChudW1iZXIwKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKS5EaWZmZXJlbmNlKF9fLkNvbnN0YW50PG9iamVjdD4oMjcpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpLkRpZmZlcmVuY2UoZ3JlbWxpbmdvLlRfXy5Db25zdGFudCgyNykuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuZGlmZmVyZW5jZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5kaWZmZXJlbmNlKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuZm9sZCgpLmRpZmZlcmVuY2UoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfZGlmZmVyZW5jZVhkYXZlX2tlbHZpblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtcImRhdmVcIixcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpZmZlcmVuY2UoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoc3RyaW5nMCkuZGlmZmVyZW5jZShsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5EaWZmZXJlbmNlKG5ldyBMaXN0PG9iamVjdD4geyBcImRhdmVcIiwgXCJrZWx2aW5cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuRGlmZmVyZW5jZShbXWludGVyZmFjZXt9e1wiZGF2ZVwiLCBcImtlbHZpblwifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaWZmZXJlbmNlKFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpZmZlcmVuY2UobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZGF2ZVwiKTsgYWRkKFwia2VsdmluXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlmZmVyZW5jZShbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5kaWZmZXJlbmNlKFsnZGF2ZScsICdrZWx2aW4nXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfbnVsbF9iWF9kaWZmZXJlbmNlWGFfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5kaWZmZXJlbmNlKFtcImFcIixcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmRpZmZlcmVuY2UoW1wiYVwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaWZmZXJlbmNlKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmRpZmZlcmVuY2UobGlzdDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImJcIiB9KS5EaWZmZXJlbmNlKG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgXCJjXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYVwiLCBuaWwsIFwiYlwifSkuRGlmZmVyZW5jZShbXWludGVyZmFjZXt9e1wiYVwiLCBcImNcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaWZmZXJlbmNlKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJiXCIpOyB9fSkuZGlmZmVyZW5jZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJjXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaWZmZXJlbmNlKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5kaWZmZXJlbmNlKFsnYScsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhX251bGxfYlhfZGlmZmVyZW5jZVhhX251bGxfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5kaWZmZXJlbmNlKFtcImFcIixudWxsLFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuZGlmZmVyZW5jZShbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmRpZmZlcmVuY2UoW1wiYVwiLCBudWxsLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuZGlmZmVyZW5jZShsaXN0MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIG51bGwsIFwiYlwiIH0pLkRpZmZlcmVuY2UobmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImNcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJiXCJ9KS5EaWZmZXJlbmNlKFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJjXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuZGlmZmVyZW5jZShbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmRpZmZlcmVuY2UobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJjXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaWZmZXJlbmNlKFtcImFcIiwgbnVsbCwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5kaWZmZXJlbmNlKFsnYScsIE5vbmUsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9kaWZmZXJlbmNlWGZpdmVfdGhyZWVfN1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzMsXCJ0aHJlZVwiXSkuZGlmZmVyZW5jZShbXCJmaXZlXCIsXCJ0aHJlZVwiLDdpXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuZGlmZmVyZW5jZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuZGlmZmVyZW5jZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmRpZmZlcmVuY2UobGlzdDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDMsIFwidGhyZWVcIiB9KS5EaWZmZXJlbmNlKG5ldyBMaXN0PG9iamVjdD4geyBcImZpdmVcIiwgXCJ0aHJlZVwiLCA3IH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCBcInRocmVlXCJ9KS5EaWZmZXJlbmNlKFtdaW50ZXJmYWNle317XCJmaXZlXCIsIFwidGhyZWVcIiwgaW50MzIoNyl9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuZGlmZmVyZW5jZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoXCJ0aHJlZVwiKTsgfX0pLmRpZmZlcmVuY2UobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZml2ZVwiKTsgYWRkKFwidGhyZWVcIik7IGFkZCg3KTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuZGlmZmVyZW5jZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN10pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFszLCAndGhyZWUnXSkuZGlmZmVyZW5jZShbJ2ZpdmUnLCAndGhyZWUnLCA3XSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxYX2Rpc2p1bmN0WGluamVjdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuZGlzanVuY3QoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmRpc2p1bmN0KF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuZGlzanVuY3QoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuZGlzanVuY3QoX18uaW5qZWN0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLkRpc2p1bmN0KF9fLkluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLkRpc2p1bmN0KGdyZW1saW5nby5UX18uSW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5kaXNqdW5jdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5kaXNqdW5jdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5kaXNqdW5jdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmRpc2p1bmN0KF9fLmluamVjdCgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZGlzanVuY3RYVl9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmRpc2p1bmN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5kaXNqdW5jdChfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmRpc2p1bmN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZGlzanVuY3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkRpc2p1bmN0KF9fLlYoKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5EaXNqdW5jdChncmVtbGluZ28uVF9fLlYoKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZGlzanVuY3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZGlzanVuY3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZGlzanVuY3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZGlzanVuY3QoX18uVigpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkX2Rpc2p1bmN0WGNvbnN0YW50WG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uY29uc3RhbnQob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvbGQoKS5EaXNqdW5jdChfXy5Db25zdGFudDxvYmplY3Q+KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5EaXNqdW5jdChncmVtbGluZ28uVF9fLkNvbnN0YW50KG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvbGQoKS5kaXNqdW5jdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS5kaXNqdW5jdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5kaXNqdW5jdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLmNvbnN0YW50KE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfZGlzanVuY3RYVlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRm9sZCgpLkRpc2p1bmN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuRGlzanVuY3QoZ3JlbWxpbmdvLlRfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5mb2xkKCkuZGlzanVuY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaXNqdW5jdFgyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaXNqdW5jdCgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpc2p1bmN0KDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpc2p1bmN0KDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmRpc2p1bmN0KG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuRGlzanVuY3QoMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5EaXNqdW5jdCgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaXNqdW5jdCgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlzanVuY3QoMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpc2p1bmN0KDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5kaXNqdW5jdCgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2Rpc2p1bmN0WG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpc2p1bmN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlzanVuY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlzanVuY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuZGlzanVuY3Qob2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKS5EaXNqdW5jdChudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLkRpc2p1bmN0KG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlzanVuY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpc2p1bmN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaXNqdW5jdChudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkuZGlzanVuY3QoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRfZGlzanVuY3RYVl92YWx1ZXNYbmFtZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKHN0cmluZzEpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkuRGlzanVuY3QoX18uVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibm9uZXhpc3RhbnRcIikuRm9sZCgpLkRpc2p1bmN0KGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbm9uZXhpc3RhbnQnKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZm9sZF9kaXNqdW5jdFhWX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKHN0cmluZzEpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKS5EaXNqdW5jdChfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJub25leGlzdGFudFwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkuRGlzanVuY3QoZ3JlbWxpbmdvLlRfXy5WKCkuVmFsdWVzKFwibm9uZXhpc3RhbnRcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKCdub25leGlzdGFudCcpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9mb2xkX2Rpc2p1bmN0WFZfdmFsdWVzWGFnZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuRm9sZCgpLkRpc2p1bmN0KF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkZvbGQoKS5EaXNqdW5jdChncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5kaXNqdW5jdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuZGlzanVuY3QoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuZm9sZCgpLmRpc2p1bmN0KF9fLlYoKS52YWx1ZXMoJ2FnZScpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfcGF0aF9ieVh2YWx1ZXNYbmFtZVhfdG9VcHBlclhfZGlzanVuY3RYTUFSS09YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieSh2YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuZGlzanVuY3QoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5kaXNqdW5jdChbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5kaXNqdW5jdChbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoc3RyaW5nMCkudG9VcHBlcigpKS5kaXNqdW5jdChsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuUGF0aCgpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Ub1VwcGVyKCkpLkRpc2p1bmN0KG5ldyBMaXN0PG9iamVjdD4geyBcIk1BUktPXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5QYXRoKCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLlRvVXBwZXIoKSkuRGlzanVuY3QoW11pbnRlcmZhY2V7fXtcIk1BUktPXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmRpc2p1bmN0KFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5kaXNqdW5jdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJNQVJLT1wiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmRpc2p1bmN0KFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCduYW1lJykudG9fdXBwZXIoKSkuZGlzanVuY3QoWydNQVJLTyddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfZGlzanVuY3RYc2VhdHRsZV92YW5jb3V2ZXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KHZhbHVlcykudW5mb2xkKCkuZGlzanVuY3QoW1wic2VhdHRsZVwiLFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpc2p1bmN0KFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpc2p1bmN0KFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChzdHJpbmcwKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlzanVuY3QobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcImxvY2F0aW9uXCIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuRGlzanVuY3QobmV3IExpc3Q8b2JqZWN0PiB7IFwic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoXCJsb2NhdGlvblwiKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLkRpc2p1bmN0KFtdaW50ZXJmYWNle317XCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5kaXNqdW5jdChbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlzanVuY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwic2VhdHRsZVwiKTsgYWRkKFwidmFuY291dmVyXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmRpc2p1bmN0KFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgnbG9jYXRpb24nKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZGlzanVuY3QoWydzZWF0dGxlJywgJ3ZhbmNvdXZlciddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaXNqdW5jdFhtYXJrb1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaXNqdW5jdChbXCJtYXJrb1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpc2p1bmN0KFtcIm1hcmtvXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpc2p1bmN0KFtcIm1hcmtvXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmRpc2p1bmN0KGxpc3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLkRpc2p1bmN0KG5ldyBMaXN0PG9iamVjdD4geyBcIm1hcmtvXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLkRpc2p1bmN0KFtdaW50ZXJmYWNle317XCJtYXJrb1wifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaXNqdW5jdChbXCJtYXJrb1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwibWFya29cIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaXNqdW5jdChbXCJtYXJrb1wiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCduYW1lJykuZGlzanVuY3QoWydtYXJrbyddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9kaXNqdW5jdFhzdGVwaGVuX21hcmtvWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpc2p1bmN0KFtcInN0ZXBoZW5cIixcIm1hcmtvXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QoW1wic3RlcGhlblwiLCBcIm1hcmtvXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpc2p1bmN0KFtcInN0ZXBoZW5cIiwgXCJtYXJrb1wiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShzdHJpbmcwKS5kaXNqdW5jdChsaXN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5EaXNqdW5jdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJzdGVwaGVuXCIsIFwibWFya29cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuRGlzanVuY3QoW11pbnRlcmZhY2V7fXtcInN0ZXBoZW5cIiwgXCJtYXJrb1wifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaXNqdW5jdChbXCJzdGVwaGVuXCIsIFwibWFya29cIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmRpc2p1bmN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcInN0ZXBoZW5cIik7IGFkZChcIm1hcmtvXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QoW1wic3RlcGhlblwiLCBcIm1hcmtvXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5kaXNqdW5jdChbJ3N0ZXBoZW4nLCAnbWFya28nXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfZGlzanVuY3RYZGF2ZV9rZWx2aW5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QoW1wiZGF2ZVwiLFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5kaXNqdW5jdChbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmRpc2p1bmN0KGxpc3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLkRpc2p1bmN0KG5ldyBMaXN0PG9iamVjdD4geyBcImRhdmVcIiwgXCJrZWx2aW5cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuRGlzanVuY3QoW11pbnRlcmZhY2V7fXtcImRhdmVcIiwgXCJrZWx2aW5cIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZGF2ZVwiKTsgYWRkKFwia2VsdmluXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuZGlzanVuY3QoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCduYW1lJykuZGlzanVuY3QoWydkYXZlJywgJ2tlbHZpbiddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYYV9udWxsX2JYX2Rpc2p1bmN0WGFfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5kaXNqdW5jdChbXCJhXCIsXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaXNqdW5jdChbXCJhXCIsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmRpc2p1bmN0KFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmRpc2p1bmN0KGxpc3QxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgbnVsbCwgXCJiXCIgfSkuRGlzanVuY3QobmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBcImNcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJiXCJ9KS5EaXNqdW5jdChbXWludGVyZmFjZXt9e1wiYVwiLCBcImNcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaXNqdW5jdChbXCJhXCIsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmRpc2p1bmN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImNcIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmRpc2p1bmN0KFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5kaXNqdW5jdChbJ2EnLCAnYyddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYYV9udWxsX2JYX2Rpc2p1bmN0WGFfbnVsbF9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJhXCIsbnVsbCxcImJcIl0pLmRpc2p1bmN0KFtcImFcIixudWxsLFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuZGlzanVuY3QoW1wiYVwiLCBudWxsLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaXNqdW5jdChbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5kaXNqdW5jdChsaXN0MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIG51bGwsIFwiYlwiIH0pLkRpc2p1bmN0KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgbnVsbCwgXCJjXCIgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYVwiLCBuaWwsIFwiYlwifSkuRGlzanVuY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgbmlsLCBcImNcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5kaXNqdW5jdChbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmRpc2p1bmN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiY1wiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuZGlzanVuY3QoW1wiYVwiLCBudWxsLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnYScsIE5vbmUsICdiJ10pLmRpc2p1bmN0KFsnYScsIE5vbmUsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9kaXNqdW5jdFhmaXZlX3RocmVlXzdYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFszaSxcInRocmVlXCJdKS5kaXNqdW5jdChbXCJmaXZlXCIsXCJ0aHJlZVwiLDdpXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbM2ksIFwidGhyZWVcIl0pLmRpc2p1bmN0KFtcImZpdmVcIiwgXCJ0aHJlZVwiLCA3aV0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFszaSwgXCJ0aHJlZVwiXSkuZGlzanVuY3QoW1wiZml2ZVwiLCBcInRocmVlXCIsIDdpXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5kaXNqdW5jdChsaXN0MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgMywgXCJ0aHJlZVwiIH0pLkRpc2p1bmN0KG5ldyBMaXN0PG9iamVjdD4geyBcImZpdmVcIiwgXCJ0aHJlZVwiLCA3IH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtpbnQzMigzKSwgXCJ0aHJlZVwifSkuRGlzanVuY3QoW11pbnRlcmZhY2V7fXtcImZpdmVcIiwgXCJ0aHJlZVwiLCBpbnQzMig3KX0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFszaSwgXCJ0aHJlZVwiXSkuZGlzanVuY3QoW1wiZml2ZVwiLCBcInRocmVlXCIsIDdpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgzKTsgYWRkKFwidGhyZWVcIik7IH19KS5kaXNqdW5jdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJmaXZlXCIpOyBhZGQoXCJ0aHJlZVwiKTsgYWRkKDcpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5kaXNqdW5jdChbXCJmaXZlXCIsIFwidGhyZWVcIiwgN10pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFszLCAndGhyZWUnXSkuZGlzanVuY3QoWydmaXZlJywgJ3RocmVlJywgN10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYMTFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkMTEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYMTFBc1N0cmluZ1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRShlaWQxMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRVhlaWQ3X2VpZDExWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoZWlkNyxlaWQxMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkNywgZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShlaWQ3LCBlaWQxMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRShlaWQ3LCBlaWQxMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKGVpZDcsIGVpZDExKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRShlaWQ3LCBlaWQxMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDcsIGVpZDExKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDcsIGVpZDExKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKGVpZDcsIGVpZDExKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkNywgZWlkMTEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYbGlzdFhlaWQ3X2VpZDExWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSh4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRShuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUobnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYbGlzdFhudWxsWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSh4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYMTFfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKGVpZDExLG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoZWlkMTEsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoZWlkMTEsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShlaWQxMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoZWlkMTEsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkMTEsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfRVgxMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5FKGVpZDExKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuRShlaWQxMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLkUoZWlkMTEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLkUoZWlkMTEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VYMTFYX0UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKGVpZDExKS5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkMTEpLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoZWlkMTEpLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKGVpZDExKS5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKGVpZDExKS5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoZWlkMTEpLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoZWlkMTEpLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDExKS5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRShlaWQxMSkuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRShlaWQxMSkuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfRVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5FKG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuRShudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5FKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5FKG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkUobnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5FKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuRShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuRShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuRShudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5FKE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfRVhsaXN0WG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLkUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5FKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuRSh4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxWF9FWDExX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEpLkUoZWlkMTEsbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxKS5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuRShlaWQxMSwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxKS5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkUoZWlkMTEsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMSkuRShlaWQxMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLkUoZWlkMTEsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5FKGVpZDExLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5FKGVpZDExLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMVhfY29hbGVzY2VYRVhfaGFzTGFiZWxYdGVzdHNYX2FkZEVYdGVzdHNYX2Zyb21fVl9oYXNYbmFtZVhfWGpvc2hYWF90b1hWX2hhc1huYW1lWF9YdmFkYXNYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5jb2FsZXNjZShFKCkuaGFzTGFiZWwoXCJ0ZXN0c1wiKSwgYWRkRShcInRlc3RzXCIpLmZyb20oVigpLmhhcyhcIm5hbWVcIixcImpvc2hcIikpLnRvKFYoKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuY29hbGVzY2UoX18uRSgpLmhhc0xhYmVsKFwidGVzdHNcIiksIF9fLmFkZEUoXCJ0ZXN0c1wiKS5mcm9tKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKSkudG8oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEpLmNvYWxlc2NlKF9fLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpLCBfXy5hZGRFKFwidGVzdHNcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuY29hbGVzY2UoX18uRSgpLmhhc0xhYmVsKHN0cmluZzApLCBfXy5hZGRFKHN0cmluZzApLmZyb20oX18uVigpLmhhcyhzdHJpbmcxLCBzdHJpbmcyKSkudG8oX18uVigpLmhhcyhzdHJpbmcxLCBzdHJpbmczKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuQ29hbGVzY2U8b2JqZWN0PihfXy5FKCkuSGFzTGFiZWwoXCJ0ZXN0c1wiKSwgX18uQWRkRSgoc3RyaW5nKSBcInRlc3RzXCIpLkZyb20oX18uVigpLkhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpKS5UbyhfXy5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5Db2FsZXNjZShncmVtbGluZ28uVF9fLkUoKS5IYXNMYWJlbChcInRlc3RzXCIpLCBncmVtbGluZ28uVF9fLkFkZEUoXCJ0ZXN0c1wiKS5Gcm9tKGdyZW1saW5nby5UX18uVigpLkhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpKS5UbyhncmVtbGluZ28uVF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxKS5jb2FsZXNjZShfXy5FKCkuaGFzTGFiZWwoXCJ0ZXN0c1wiKSwgX18uYWRkRShcInRlc3RzXCIpLmZyb20oX18uVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpKS50byhfXy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLmNvYWxlc2NlKF9fLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpLCBfXy5hZGRFKFwidGVzdHNcIikuZnJvbShfXy5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuY29hbGVzY2UoX18uRSgpLmhhc0xhYmVsKFwidGVzdHNcIiksIF9fLmFkZEUoXCJ0ZXN0c1wiKS5mcm9tXyhfXy5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikpLnRvKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5jb2FsZXNjZShfXy5FKCkuaGFzX2xhYmVsKCd0ZXN0cycpLCBfXy5hZGRfZSgndGVzdHMnKS5mcm9tXyhfXy5WKCkuaGFzKCduYW1lJywgJ2pvc2gnKSkudG8oX18uVigpLmhhcygnbmFtZScsICd2YWRhcycpKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJ0ZXN0c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcInRlc3RzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJ0ZXN0c1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcInRlc3RzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgndGVzdHMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVfaW5WIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXRFKCkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKCkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXRFKCkuaW5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoKS5JblYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKCkuSW5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoKS5pbl92KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgyWF9pbkVfb3V0ViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikuaW5FKCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLmluRSgpLm91dFYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikuaW5FKCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikuaW5FKCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5JbkUoKS5PdXRWKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuSW5FKCkuT3V0VigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5pbkUoKS5vdXRWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5pbkUoKS5vdXRWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5pbkUoKS5vdXRWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLmluX2UoKS5vdXRfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0RV9oYXNYd2VpZ2h0XzFYX291dFYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RSgpLmhhcyhcIndlaWdodFwiLDEuMCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0RSgpLmhhcyhcIndlaWdodFwiLCAxLjApLm91dFYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIDEuMCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXRFKCkuaGFzKHN0cmluZzAsIG51bWJlcjApLm91dFYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXRFKCkuSGFzKFwid2VpZ2h0XCIsIDEuMCkuT3V0VigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0RSgpLkhhcyhcIndlaWdodFwiLCAxLjApLk91dFYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIDEuMCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIDEuMCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIDEuMCkub3V0VigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dF9lKCkuaGFzKCd3ZWlnaHQnLCAxLjApLm91dF92KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRFX290aGVyViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKCkuT3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RSgpLk90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCkub3RoZXJfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNFhfYm90aEVfb3RoZXJWIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5ib3RoRSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmJvdGhFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLmJvdGhFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRSgpLk90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKCkuT3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmJvdGhFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoRSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuYm90aEUoKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuYm90aF9lKCkub3RoZXJfdigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNFhfYm90aEVfaGFzWHdlaWdodF9sdF8xWF9vdGhlclYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLmJvdGhFKCkuaGFzKFwid2VpZ2h0XCIsIFAubHQoMS4wKSkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkuYm90aEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5sdCgxLjApKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkuYm90aEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5sdCgxLjApKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDQpLmJvdGhFKCkuaGFzKHN0cmluZzAsIFAubHQobnVtYmVyMCkpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRSgpLkhhcyhcIndlaWdodFwiLCBQLkx0KDEuMCkpLk90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKCkuSGFzKFwid2VpZ2h0XCIsIGdyZW1saW5nby5QLkx0KDEuMCkpLk90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5ib3RoRSgpLmhhcyhcIndlaWdodFwiLCBQLmx0KDEuMCkpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkuYm90aEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5sdCgxLjApKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmJvdGhFKCkuaGFzKFwid2VpZ2h0XCIsIFAubHQoMS4wKSkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmJvdGhfZSgpLmhhcygnd2VpZ2h0JywgUC5sdCgxLjApKS5vdGhlcl92KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdldF9nX1ZYMVhfb3V0RV9vdGhlclYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKCkub3RoZXJWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoKS5vdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RSgpLk90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoKS5PdGhlclYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RSgpLm90aGVyVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgpLm90aGVyX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVYa25vd3NYX2luViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5pblYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpLkluVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiKS5JblYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgna25vd3MnKS5pbl92KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRFWGtub3dzX2NyZWF0ZWRYX2luViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIsXCJjcmVhdGVkXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikuaW5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikuaW5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXRFKHN0cmluZzAsIHN0cmluZzEpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIiwgXCJjcmVhdGVkXCIpLkluVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikuSW5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikuaW5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIiwgXCJjcmVhdGVkXCIpLmluVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIsIFwiY3JlYXRlZFwiKS5pblYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoJ2tub3dzJywgJ2NyZWF0ZWQnKS5pbl92KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRFWGtub3dzWF9ib3RoViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikuQm90aFYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmJvdGhWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYm90aFYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5ib3RoVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgna25vd3MnKS5ib3RoX3YoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVYa25vd3NYX2JvdGhWX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5ib3RoVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmJvdGhWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmJvdGhWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoc3RyaW5nMCkuYm90aFYoKS52YWx1ZXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiKS5Cb3RoVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikuQm90aFYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYm90aFYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmJvdGhWKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5ib3RoVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdrbm93cycpLmJvdGhfdigpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdG9FWG91dF9rbm93c3ZhclhfdmFsdWVzWHdlaWdodFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudG9FKERpcmVjdGlvbi5PVVQsIHh4MSkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudG9FKERpcmVjdGlvbi5PVVQsIHh4MSkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnRvRShEaXJlY3Rpb24uT1VULCB4eDEpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudG9FKERpcmVjdGlvbi5PVVQsIHh4MSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlRvRShEaXJlY3Rpb24uT3V0LCAoc3RyaW5nKSB4eDEpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVG9FKGdyZW1saW5nby5EaXJlY3Rpb24uT3V0LCB4eDEpLlZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS50b0UoRGlyZWN0aW9uLk9VVCwgeHgxKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnRvRShEaXJlY3Rpb24uT1VULCB4eDEpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudG9FKERpcmVjdGlvbi5PVVQsIHh4MSkudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnRvX2UoRGlyZWN0aW9uLk9VVCwgeHgxKS52YWx1ZXMoJ3dlaWdodCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfcHJvcGVydGllc19lbGVtZW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5FbGVtZW50KCkuTGltaXQ8b2JqZWN0PigxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQyKS5Qcm9wZXJ0aWVzKCkuRWxlbWVudCgpLkxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikucHJvcGVydGllcygpLmVsZW1lbnQoKS5saW1pdCgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDIpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9wZXJ0aWVzX2VsZW1lbnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKCkuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb3BlcnRpZXNYYWdlWF9lbGVtZW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoXCJhZ2VcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcyhcImFnZVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcyhcImFnZVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoc3RyaW5nMCkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpLkVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwiYWdlXCIpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcyhcImFnZVwiKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoXCJhZ2VcIikuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoJ2FnZScpLmVsZW1lbnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FWF9wcm9wZXJ0aWVzX2VsZW1lbnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShlaWQxMSkucHJvcGVydGllcygpLmVsZW1lbnQoKS5saW1pdCgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShlaWQxMSkuUHJvcGVydGllczxvYmplY3Q+KCkuRWxlbWVudCgpLkxpbWl0PG9iamVjdD4oMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoZWlkMTEpLlByb3BlcnRpZXMoKS5FbGVtZW50KCkuTGltaXQoMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRShlaWQxMSkucHJvcGVydGllcygpLmVsZW1lbnQoKS5saW1pdCgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkubGltaXQoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRV9wcm9wZXJ0aWVzX2VsZW1lbnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5Qcm9wZXJ0aWVzKCkuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygpLmVsZW1lbnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWHY3X3Byb3BlcnRpZXNfcHJvcGVydGllc19lbGVtZW50X2VsZW1lbnQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDcpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmVsZW1lbnQoKS5saW1pdCgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkubGltaXQoMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDcpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmVsZW1lbnQoKS5saW1pdCgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDcpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmVsZW1lbnQoKS5saW1pdChudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNykuUHJvcGVydGllczxvYmplY3Q+KCkuUHJvcGVydGllczxvYmplY3Q+KCkuRWxlbWVudCgpLkVsZW1lbnQoKS5MaW1pdDxvYmplY3Q+KDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDcpLlByb3BlcnRpZXMoKS5Qcm9wZXJ0aWVzKCkuRWxlbWVudCgpLkVsZW1lbnQoKS5MaW1pdCgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNykucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNykucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNykucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkuZWxlbWVudCgpLmxpbWl0KDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkubGltaXQoMSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9wZXJ0aWVzX3Byb3BlcnRpZXNfZWxlbWVudF9lbGVtZW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNykucHJvcGVydGllcygpLnByb3BlcnRpZXMoKS5lbGVtZW50KCkuZWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDcpLlByb3BlcnRpZXM8b2JqZWN0PigpLlByb3BlcnRpZXM8b2JqZWN0PigpLkVsZW1lbnQoKS5FbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNykuUHJvcGVydGllcygpLlByb3BlcnRpZXMoKS5FbGVtZW50KCkuRWxlbWVudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ3KS5wcm9wZXJ0aWVzKCkucHJvcGVydGllcygpLmVsZW1lbnQoKS5lbGVtZW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDcpLnByb3BlcnRpZXMoKS5wcm9wZXJ0aWVzKCkuZWxlbWVudCgpLmVsZW1lbnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2VsZW1lbnRNYXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmVsZW1lbnRNYXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkVsZW1lbnRNYXA8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmVsZW1lbnRNYXAoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5lbGVtZW50TWFwKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZWxlbWVudF9tYXAoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2VsZW1lbnRNYXBYbmFtZV9hZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVsZW1lbnRNYXAoXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZWxlbWVudE1hcChcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZWxlbWVudE1hcChcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVsZW1lbnRNYXAoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRWxlbWVudE1hcDxvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVsZW1lbnRNYXAoXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmVsZW1lbnRNYXAoXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbGVtZW50TWFwKFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZWxlbWVudE1hcChcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZWxlbWVudF9tYXAoJ25hbWUnLCAnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRVgxMVhfZWxlbWVudE1hcCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoZWlkMTEpLmVsZW1lbnRNYXAoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRShlaWQxMSkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShlaWQxMSkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoZWlkMTEpLmVsZW1lbnRNYXAoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoZWlkMTEpLkVsZW1lbnRNYXA8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKGVpZDExKS5FbGVtZW50TWFwKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDExKS5lbGVtZW50TWFwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRShlaWQxMSkuZWxlbWVudE1hcCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoZWlkMTEpLmVsZW1lbnRNYXAoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkMTEpLmVsZW1lbnRfbWFwKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9lbGVtZW50TWFwWG5hbWVfYWdlX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVsZW1lbnRNYXAoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZWxlbWVudE1hcChcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZWxlbWVudE1hcChcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVsZW1lbnRNYXAoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRWxlbWVudE1hcDxvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVsZW1lbnRNYXAoXCJuYW1lXCIsIFwiYWdlXCIsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZWxlbWVudE1hcChcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmVsZW1lbnRNYXAoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5lbGVtZW50TWFwKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5lbGVtZW50X21hcCgnbmFtZScsICdhZ2UnLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX2ZsYXRNYXBYc2VsZWN0WGFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikuZmxhdE1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5mbGF0TWFwKF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5mbGF0TWFwKF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5mbGF0TWFwKF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLkZsYXRNYXA8b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLkZsYXRNYXAoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikuZmxhdE1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLmZsYXRNYXAoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5mbGF0TWFwKF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLmZsYXRfbWFwKF9fLnNlbGVjdCgnYScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mbGF0TWFwWHNwbGl0WGFYX3VuZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mbGF0TWFwKHNwbGl0KFwiYVwiKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZsYXRNYXAoX18uc3BsaXQoXCJhXCIpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZsYXRNYXAoX18uc3BsaXQoXCJhXCIpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZsYXRNYXAoX18uc3BsaXQoc3RyaW5nMSkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5GbGF0TWFwPG9iamVjdD4oX18uU3BsaXQoXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5GbGF0TWFwKGdyZW1saW5nby5UX18uU3BsaXQoXCJhXCIpLlVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZsYXRNYXAoX18uc3BsaXQoXCJhXCIpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mbGF0TWFwKF9fLnNwbGl0KFwiYVwiKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZmxhdE1hcChfXy5zcGxpdChcImFcIikudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZsYXRfbWFwKF9fLnNwbGl0KCdhJykudW5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZmxhdE1hcFhvdXRfb3V0WF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZsYXRNYXAob3V0KCkub3V0KCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZsYXRNYXAoX18ub3V0KCkub3V0KCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mbGF0TWFwKF9fLm91dCgpLm91dCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZsYXRNYXAoX18ub3V0KCkub3V0KCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5GbGF0TWFwPG9iamVjdD4oX18uT3V0KCkuT3V0KCkpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZsYXRNYXAoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PdXQoKSkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZsYXRNYXAoX18ub3V0KCkub3V0KCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZmxhdE1hcChfXy5vdXQoKS5vdXQoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mbGF0TWFwKF9fLm91dCgpLm91dCgpKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZmxhdF9tYXAoX18ub3V0KCkub3V0KCkpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZV9mb2xkWDBfcGx1c1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoMCwgT3BlcmF0b3Iuc3VtKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKDAsIE9wZXJhdG9yLnN1bSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoMCwgT3BlcmF0b3Iuc3VtKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQobnVtYmVyMCwgT3BlcmF0b3Iuc3VtKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5Gb2xkPG9iamVjdD4oMCwgT3BlcmF0b3IuU3VtKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5Gb2xkKDAsIGdyZW1saW5nby5PcGVyYXRvci5TdW0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKDAsIE9wZXJhdG9yLnN1bSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKDAsIE9wZXJhdG9yLnN1bSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKDAsIE9wZXJhdG9yLnN1bSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5mb2xkKDAsIE9wZXJhdG9yLnN1bV8pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhMV9iMlhfZm9sZFhtX2FkZEFsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiOjFdLFtcImJcIjoyXSkuZm9sZChbOl0sIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCI6MV0sIFtcImJcIjoyXSkuZm9sZChbOl0sIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiOjFdLCBbXCJiXCI6Ml0pLmZvbGQoWzpdLCBPcGVyYXRvci5hZGRBbGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChtYXAwLCBtYXAxKS5mb2xkKG1hcDIsIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJhXCIsIDEgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImJcIiwgMiB9fSkuRm9sZDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSwgT3BlcmF0b3IuQWRkQWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImFcIjogMSB9LCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJiXCI6IDIgfSkuRm9sZChtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317IH0sIGdyZW1saW5nby5PcGVyYXRvci5BZGRBbGwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIjoxXSwgW1wiYlwiOjJdKS5mb2xkKFs6XSwgT3BlcmF0b3IuYWRkQWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiYVwiLCAxKTsgfX0sIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImJcIiwgMik7IH19KS5mb2xkKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7ICB9fSwgT3BlcmF0b3IuYWRkQWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IE1hcChbW1wiYVwiLCAxXV0pLCBuZXcgTWFwKFtbXCJiXCIsIDJdXSkpLmZvbGQobmV3IE1hcChbXSksIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoeyAnYSc6IDEgfSwgeyAnYic6IDIgfSkuZm9sZCh7ICB9LCBPcGVyYXRvci5hZGRfYWxsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYYTFfYjJfYjRYX2ZvbGRYbV9hZGRBbGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIjoxXSwgW1wiYlwiOjJdLCBbXCJiXCI6NF0pLmZvbGQoWzpdLCBPcGVyYXRvci5hZGRBbGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiOjFdLCBbXCJiXCI6Ml0sIFtcImJcIjo0XSkuZm9sZChbOl0sIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiOjFdLCBbXCJiXCI6Ml0sIFtcImJcIjo0XSkuZm9sZChbOl0sIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG1hcDAsIG1hcDEsIG1hcDIpLmZvbGQobWFwMywgT3BlcmF0b3IuYWRkQWxsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFcIiwgMSB9fSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwiYlwiLCAyIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJiXCIsIDQgfX0pLkZvbGQ8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30sIE9wZXJhdG9yLkFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhXCI6IDEgfSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYlwiOiAyIH0sIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImJcIjogNCB9KS5Gb2xkKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSwgZ3JlbWxpbmdvLk9wZXJhdG9yLkFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiOjFdLCBbXCJiXCI6Ml0sIFtcImJcIjo0XSkuZm9sZChbOl0sIE9wZXJhdG9yLmFkZEFsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFcIiwgMSk7IH19LCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJiXCIsIDIpOyB9fSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiYlwiLCA0KTsgfX0pLmZvbGQobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19LCBPcGVyYXRvci5hZGRBbGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChuZXcgTWFwKFtbXCJhXCIsIDFdXSksIG5ldyBNYXAoW1tcImJcIiwgMl1dKSwgbmV3IE1hcChbW1wiYlwiLCA0XV0pKS5mb2xkKG5ldyBNYXAoW10pLCBPcGVyYXRvci5hZGRBbGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KHsgJ2EnOiAxIH0sIHsgJ2InOiAyIH0sIHsgJ2InOiA0IH0pLmZvbGQoeyAgfSwgT3BlcmF0b3IuYWRkX2FsbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGxpc3QxX2xpc3QyWF9mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDRdKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMl0sIFszLCA0XSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDRdKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwLCBsaXN0MSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDMsIDQgfSkuRm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyfSwgW11pbnRlcmZhY2V7fXszLCA0fSkuRm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDRdKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyB9fSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoNCk7IH19KS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDRdKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDJdLCBbMywgNF0pLmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbGlzdDFfbGlzdDJfbGlzdDNYX2ZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDRdLCBbNSwgNl0pLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDAsIGxpc3QxLCBsaXN0MikuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDMsIDQgfSwgbmV3IExpc3Q8b2JqZWN0PiB7IDUsIDYgfSkuRm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyfSwgW11pbnRlcmZhY2V7fXszLCA0fSwgW11pbnRlcmZhY2V7fXs1LCA2fSkuRm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyXSwgWzMsIDRdLCBbNSwgNl0pLmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IH19LCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMyk7IGFkZCg0KTsgfX0sIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCg1KTsgYWRkKDYpOyB9fSkuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMl0sIFszLCA0XSwgWzUsIDZdKS5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDJdLCBbMywgNF0sIFs1LCA2XSkuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfZm9ybWF0WHN0clgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmZvcm1hdChcIkhlbGxvIHdvcmxkXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmZvcm1hdChcIkhlbGxvIHdvcmxkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5mb3JtYXQoXCJIZWxsbyB3b3JsZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLmZvcm1hdChzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuRm9ybWF0KFwiSGVsbG8gd29ybGRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuRm9ybWF0KFwiSGVsbG8gd29ybGRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmZvcm1hdChcIkhlbGxvIHdvcmxkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuZm9ybWF0KFwiSGVsbG8gd29ybGRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5mb3JtYXQoXCJIZWxsbyB3b3JsZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5mb3JtYXRfKCdIZWxsbyB3b3JsZCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9ybWF0WHN0clgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9ybWF0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvcm1hdF8oJyV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxWF9hc1hhZ2VYX1ZfZm9ybWF0WHN0clgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMSkuYXMoXCJhZ2VcIikuVigpLmZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEpLmFzKFwiYWdlXCIpLlYoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMSkuYXMoXCJhZ2VcIikuVigpLmZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuYXMoc3RyaW5nMCkuVigpLmZvcm1hdChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEpLkFzKFwiYWdlXCIpLlYoKS5Gb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5BcyhcImFnZVwiKS5WKCkuRm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLmFzKFwiYWdlXCIpLlYoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLmFzKFwiYWdlXCIpLlYoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmFzKFwiYWdlXCIpLlYoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuYXNfKCdhZ2UnKS5WKCkuZm9ybWF0XygnJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb3JtYXRYc3RyWF9ieVh2YWx1ZXNYbmFtZVhYX2J5WHZhbHVlc1hhZ2VYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb3JtYXQoXCIle199IGlzICV7X30geWVhcnMgb2xkXCIpLmJ5KHZhbHVlcyhcIm5hbWVcIikpLmJ5KHZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb3JtYXQoXCIle199IGlzICV7X30geWVhcnMgb2xkXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9ybWF0KFwiJXtffSBpcyAle199IHllYXJzIG9sZFwiKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb3JtYXQoc3RyaW5nMCkuYnkoX18udmFsdWVzKHN0cmluZzEpKS5ieShfXy52YWx1ZXMoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvcm1hdChcIiV7X30gaXMgJXtffSB5ZWFycyBvbGRcIikuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb3JtYXQoXCIle199IGlzICV7X30geWVhcnMgb2xkXCIpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvcm1hdChcIiV7X30gaXMgJXtffSB5ZWFycyBvbGRcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKSkuYnkoX18udmFsdWVzKFwiYWdlXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9ybWF0KFwiJXtffSBpcyAle199IHllYXJzIG9sZFwiKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mb3JtYXQoXCIle199IGlzICV7X30geWVhcnMgb2xkXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9ybWF0XygnJXtffSBpcyAle199IHllYXJzIG9sZCcpLmJ5KF9fLnZhbHVlcygnbmFtZScpKS5ieShfXy52YWx1ZXMoJ2FnZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfZm9ybWF0WHN0clhfYnlYY29uc3RhbnRYaGVsbG9YWF9ieVh2YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvcm1hdChcIiV7X30gJXtffSAle199XCIpLmJ5KGNvbnN0YW50KFwiaGVsbG9cIikpLmJ5KHZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZm9ybWF0KFwiJXtffSAle199ICV7X31cIikuYnkoX18uY29uc3RhbnQoXCJoZWxsb1wiKSkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZm9ybWF0KFwiJXtffSAle199ICV7X31cIikuYnkoX18uY29uc3RhbnQoXCJoZWxsb1wiKSkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmZvcm1hdChzdHJpbmcxKS5ieShfXy5jb25zdGFudChzdHJpbmcyKSkuYnkoX18udmFsdWVzKHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5Gb3JtYXQoXCIle199ICV7X30gJXtffVwiKS5CeShfXy5Db25zdGFudDxvYmplY3Q+KFwiaGVsbG9cIikpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5Gb3JtYXQoXCIle199ICV7X30gJXtffVwiKS5CeShncmVtbGluZ28uVF9fLkNvbnN0YW50KFwiaGVsbG9cIikpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZm9ybWF0KFwiJXtffSAle199ICV7X31cIikuYnkoX18uY29uc3RhbnQoXCJoZWxsb1wiKSkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvcm1hdChcIiV7X30gJXtffSAle199XCIpLmJ5KF9fLmNvbnN0YW50KFwiaGVsbG9cIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5mb3JtYXQoXCIle199ICV7X30gJXtffVwiKS5ieShfXy5jb25zdGFudChcImhlbGxvXCIpKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmZvcm1hdF8oJyV7X30gJXtffSAle199JykuYnkoX18uY29uc3RhbnQoJ2hlbGxvJykpLmJ5KF9fLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2Zvcm1hdFhzdHJYX2J5WGNvbnN0YW50WGhlbGxvWFhfYnlYdmFsdWVzWG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuZm9ybWF0KFwiJXtffVwiKS5ieShjb25zdGFudChcImhlbGxvXCIpKS5ieSh2YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5mb3JtYXQoXCIle199XCIpLmJ5KF9fLmNvbnN0YW50KFwiaGVsbG9cIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5mb3JtYXQoXCIle199XCIpLmJ5KF9fLmNvbnN0YW50KFwiaGVsbG9cIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuZm9ybWF0KHN0cmluZzApLmJ5KF9fLmNvbnN0YW50KHN0cmluZzEpKS5ieShfXy52YWx1ZXMoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5Gb3JtYXQoXCIle199XCIpLkJ5KF9fLkNvbnN0YW50PG9iamVjdD4oXCJoZWxsb1wiKSkuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5Gb3JtYXQoXCIle199XCIpLkJ5KGdyZW1saW5nby5UX18uQ29uc3RhbnQoXCJoZWxsb1wiKSkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuZm9ybWF0KFwiJXtffVwiKS5ieShfXy5jb25zdGFudChcImhlbGxvXCIpKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmZvcm1hdChcIiV7X31cIikuYnkoX18uY29uc3RhbnQoXCJoZWxsb1wiKSkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5mb3JtYXQoXCIle199XCIpLmJ5KF9fLmNvbnN0YW50KFwiaGVsbG9cIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5mb3JtYXRfKCcle199JykuYnkoX18uY29uc3RhbnQoJ2hlbGxvJykpLmJ5KF9fLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Zvcm1hdFhzdHJYX2J5WGJvdGhFX2NvdW50WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb3JtYXQoXCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zXCIpLmJ5KGJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mb3JtYXQoXCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zXCIpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9ybWF0KFwiJXtuYW1lfSBoYXMgJXtffSBjb25uZWN0aW9uc1wiKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb3JtYXQoc3RyaW5nMCkuYnkoX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb3JtYXQoXCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zXCIpLkJ5KF9fLkJvdGhFKCkuQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb3JtYXQoXCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zXCIpLkJ5KGdyZW1saW5nby5UX18uQm90aEUoKS5Db3VudCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb3JtYXQoXCIle25hbWV9IGhhcyAle199IGNvbm5lY3Rpb25zXCIpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvcm1hdChcIiV7bmFtZX0gaGFzICV7X30gY29ubmVjdGlvbnNcIikuYnkoX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9ybWF0KFwiJXtuYW1lfSBoYXMgJXtffSBjb25uZWN0aW9uc1wiKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvcm1hdF8oJyV7bmFtZX0gaGFzICV7X30gY29ubmVjdGlvbnMnKS5ieShfXy5ib3RoX2UoKS5jb3VudCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb2plY3RYbmFtZV9jb3VudFhfYnlYdmFsdWVzWG5hbWVYWF9ieVhib3RoRV9jb3VudFhfZm9ybWF0WHN0clgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvamVjdChcIm5hbWVcIixcImNvdW50XCIpLmJ5KHZhbHVlcyhcIm5hbWVcIikpLmJ5KGJvdGhFKCkuY291bnQoKSkuZm9ybWF0KFwiJXtuYW1lfSBoYXMgJXtjb3VudH0gY29ubmVjdGlvbnNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9qZWN0KFwibmFtZVwiLCBcImNvdW50XCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuZm9ybWF0KFwiJXtuYW1lfSBoYXMgJXtjb3VudH0gY29ubmVjdGlvbnNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvamVjdChcIm5hbWVcIiwgXCJjb3VudFwiKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmZvcm1hdChcIiV7bmFtZX0gaGFzICV7Y291bnR9IGNvbm5lY3Rpb25zXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9qZWN0KHN0cmluZzAsIHN0cmluZzEpLmJ5KF9fLnZhbHVlcyhzdHJpbmcwKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5mb3JtYXQoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvamVjdDxvYmplY3Q+KFwibmFtZVwiLCBcImNvdW50XCIpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuQnkoX18uQm90aEUoKS5Db3VudCgpKS5Gb3JtYXQoXCIle25hbWV9IGhhcyAle2NvdW50fSBjb25uZWN0aW9uc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb2plY3QoXCJuYW1lXCIsIFwiY291bnRcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuQ291bnQoKSkuRm9ybWF0KFwiJXtuYW1lfSBoYXMgJXtjb3VudH0gY29ubmVjdGlvbnNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvamVjdChcIm5hbWVcIiwgXCJjb3VudFwiKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmZvcm1hdChcIiV7bmFtZX0gaGFzICV7Y291bnR9IGNvbm5lY3Rpb25zXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9qZWN0KFwibmFtZVwiLCBcImNvdW50XCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuZm9ybWF0KFwiJXtuYW1lfSBoYXMgJXtjb3VudH0gY29ubmVjdGlvbnNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb2plY3QoXCJuYW1lXCIsIFwiY291bnRcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5mb3JtYXQoXCIle25hbWV9IGhhcyAle2NvdW50fSBjb25uZWN0aW9uc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9qZWN0KCduYW1lJywgJ2NvdW50JykuYnkoX18udmFsdWVzKCduYW1lJykpLmJ5KF9fLmJvdGhfZSgpLmNvdW50KCkpLmZvcm1hdF8oJyV7bmFtZX0gaGFzICV7Y291bnR9IGNvbm5lY3Rpb25zJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9lbGVtZW50TWFwX2Zvcm1hdFhzdHJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVsZW1lbnRNYXAoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5lbGVtZW50TWFwKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmVsZW1lbnRNYXAoKS5mb3JtYXQoXCIle25hbWV9IGlzICV7YWdlfSB5ZWFycyBvbGRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVsZW1lbnRNYXAoKS5mb3JtYXQoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRWxlbWVudE1hcDxvYmplY3Q+KCkuRm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRWxlbWVudE1hcCgpLkZvcm1hdChcIiV7bmFtZX0gaXMgJXthZ2V9IHllYXJzIG9sZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5lbGVtZW50TWFwKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbGVtZW50TWFwKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5lbGVtZW50TWFwKCkuZm9ybWF0KFwiJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmVsZW1lbnRfbWFwKCkuZm9ybWF0XygnJXtuYW1lfSBpcyAle2FnZX0geWVhcnMgb2xkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWGFYX3ZhbHVlc1huYW1lWF9hc1hwMVhfc2VsZWN0WGFYX2luWGtub3dzWF9mb3JtYXRYc3RyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAxXCIpLnNlbGVjdChcImFcIikuaW4oXCJrbm93c1wiKS5mb3JtYXQoXCIle3AxfSBrbm93cyAle25hbWV9XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMVwiKS5zZWxlY3QoXCJhXCIpLmluKFwia25vd3NcIikuZm9ybWF0KFwiJXtwMX0ga25vd3MgJXtuYW1lfVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcInAxXCIpLnNlbGVjdChcImFcIikuaW4oXCJrbm93c1wiKS5mb3JtYXQoXCIle3AxfSBrbm93cyAle25hbWV9XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5hcyhzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikuYXMoc3RyaW5nMykuc2VsZWN0KHN0cmluZzEpLmluKHN0cmluZzQpLmZvcm1hdChzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcImFcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwicDFcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpLkluKFwia25vd3NcIikuRm9ybWF0KFwiJXtwMX0ga25vd3MgJXtuYW1lfVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkFzKFwiYVwiKS5WYWx1ZXMoXCJuYW1lXCIpLkFzKFwicDFcIikuU2VsZWN0KFwiYVwiKS5JbihcImtub3dzXCIpLkZvcm1hdChcIiV7cDF9IGtub3dzICV7bmFtZX1cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMVwiKS5zZWxlY3QoXCJhXCIpLmluKFwia25vd3NcIikuZm9ybWF0KFwiJXtwMX0ga25vd3MgJXtuYW1lfVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMVwiKS5zZWxlY3QoXCJhXCIpLmluKFwia25vd3NcIikuZm9ybWF0KFwiJXtwMX0ga25vd3MgJXtuYW1lfVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJwMVwiKS5zZWxlY3QoXCJhXCIpLmluXyhcImtub3dzXCIpLmZvcm1hdChcIiV7cDF9IGtub3dzICV7bmFtZX1cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5hc18oJ2EnKS52YWx1ZXMoJ25hbWUnKS5hc18oJ3AxJykuc2VsZWN0KCdhJykuaW5fKCdrbm93cycpLmZvcm1hdF8oJyV7cDF9IGtub3dzICV7bmFtZX0nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWHNYX2xhYmVsX2FzWHN1YmplY3RYX3NlbGVjdFhzWF9vdXRFX2FzWHBYX2xhYmVsX2FzWHByZWRpY2F0ZVhfc2VsZWN0WHBYX2luVl9sYWJlbF9hc1hvYmplY3RYX2Zvcm1hdFhzdHJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwic1wiKS5sYWJlbCgpLmFzKFwic3ViamVjdFwiKS5zZWxlY3QoXCJzXCIpLm91dEUoKS5hcyhcInBcIikubGFiZWwoKS5hcyhcInByZWRpY2F0ZVwiKS5zZWxlY3QoXCJwXCIpLmluVigpLmxhYmVsKCkuYXMoXCJvYmplY3RcIikuZm9ybWF0KFwiJXtzdWJqZWN0fSAle3ByZWRpY2F0ZX0gJXtvYmplY3R9XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJzXCIpLmxhYmVsKCkuYXMoXCJzdWJqZWN0XCIpLnNlbGVjdChcInNcIikub3V0RSgpLmFzKFwicFwiKS5sYWJlbCgpLmFzKFwicHJlZGljYXRlXCIpLnNlbGVjdChcInBcIikuaW5WKCkubGFiZWwoKS5hcyhcIm9iamVjdFwiKS5mb3JtYXQoXCIle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH1cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJzXCIpLmxhYmVsKCkuYXMoXCJzdWJqZWN0XCIpLnNlbGVjdChcInNcIikub3V0RSgpLmFzKFwicFwiKS5sYWJlbCgpLmFzKFwicHJlZGljYXRlXCIpLnNlbGVjdChcInBcIikuaW5WKCkubGFiZWwoKS5hcyhcIm9iamVjdFwiKS5mb3JtYXQoXCIle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLmxhYmVsKCkuYXMoc3RyaW5nMSkuc2VsZWN0KHN0cmluZzApLm91dEUoKS5hcyhzdHJpbmcyKS5sYWJlbCgpLmFzKHN0cmluZzMpLnNlbGVjdChzdHJpbmcyKS5pblYoKS5sYWJlbCgpLmFzKHN0cmluZzQpLmZvcm1hdChzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcInNcIikuTGFiZWwoKS5BcyhcInN1YmplY3RcIikuU2VsZWN0PG9iamVjdD4oXCJzXCIpLk91dEUoKS5BcyhcInBcIikuTGFiZWwoKS5BcyhcInByZWRpY2F0ZVwiKS5TZWxlY3Q8b2JqZWN0PihcInBcIikuSW5WKCkuTGFiZWwoKS5BcyhcIm9iamVjdFwiKS5Gb3JtYXQoXCIle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH1cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInNcIikuTGFiZWwoKS5BcyhcInN1YmplY3RcIikuU2VsZWN0KFwic1wiKS5PdXRFKCkuQXMoXCJwXCIpLkxhYmVsKCkuQXMoXCJwcmVkaWNhdGVcIikuU2VsZWN0KFwicFwiKS5JblYoKS5MYWJlbCgpLkFzKFwib2JqZWN0XCIpLkZvcm1hdChcIiV7c3ViamVjdH0gJXtwcmVkaWNhdGV9ICV7b2JqZWN0fVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInNcIikubGFiZWwoKS5hcyhcInN1YmplY3RcIikuc2VsZWN0KFwic1wiKS5vdXRFKCkuYXMoXCJwXCIpLmxhYmVsKCkuYXMoXCJwcmVkaWNhdGVcIikuc2VsZWN0KFwicFwiKS5pblYoKS5sYWJlbCgpLmFzKFwib2JqZWN0XCIpLmZvcm1hdChcIiV7c3ViamVjdH0gJXtwcmVkaWNhdGV9ICV7b2JqZWN0fVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJzXCIpLmxhYmVsKCkuYXMoXCJzdWJqZWN0XCIpLnNlbGVjdChcInNcIikub3V0RSgpLmFzKFwicFwiKS5sYWJlbCgpLmFzKFwicHJlZGljYXRlXCIpLnNlbGVjdChcInBcIikuaW5WKCkubGFiZWwoKS5hcyhcIm9iamVjdFwiKS5mb3JtYXQoXCIle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwic1wiKS5sYWJlbCgpLmFzKFwic3ViamVjdFwiKS5zZWxlY3QoXCJzXCIpLm91dEUoKS5hcyhcInBcIikubGFiZWwoKS5hcyhcInByZWRpY2F0ZVwiKS5zZWxlY3QoXCJwXCIpLmluVigpLmxhYmVsKCkuYXMoXCJvYmplY3RcIikuZm9ybWF0KFwiJXtzdWJqZWN0fSAle3ByZWRpY2F0ZX0gJXtvYmplY3R9XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygncycpLmxhYmVsKCkuYXNfKCdzdWJqZWN0Jykuc2VsZWN0KCdzJykub3V0X2UoKS5hc18oJ3AnKS5sYWJlbCgpLmFzXygncHJlZGljYXRlJykuc2VsZWN0KCdwJykuaW5fdigpLmxhYmVsKCkuYXNfKCdvYmplY3QnKS5mb3JtYXRfKCcle3N1YmplY3R9ICV7cHJlZGljYXRlfSAle29iamVjdH0nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9pbmRleF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5pbmRleCgpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5pbmRleCgpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuaW5kZXgoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuaW5kZXgoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLkluZGV4PG9iamVjdD4oKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5JbmRleCgpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuaW5kZXgoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5pbmRleCgpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmluZGV4KCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmluZGV4KCkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfb3JkZXJfYnlYbmFtZVhfaW5kZXhfd2l0aFhtYXBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikub3JkZXIoKS5ieShcIm5hbWVcIikuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmluZGV4KCkud2l0aChXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikub3JkZXIoKS5ieShcIm5hbWVcIikuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLm9yZGVyKCkuYnkoc3RyaW5nMSkuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5JbmRleDxvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5JbmRleGVyLCBXaXRoT3B0aW9ucy5NYXApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5JbmRleCgpLldpdGgoZ3JlbWxpbmdvLldpdGhPcHRpb25zLkluZGV4ZXIsIGdyZW1saW5nby5XaXRoT3B0aW9ucy5NYXApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikub3JkZXIoKS5ieShcIm5hbWVcIikuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikub3JkZXIoKS5ieShcIm5hbWVcIikuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikub3JkZXIoKS5ieShcIm5hbWVcIikuaW5kZXgoKS53aXRoXyhXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS5vcmRlcigpLmJ5KCduYW1lJykuaW5kZXgoKS53aXRoXyhXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWVfZm9sZF9vcmRlclhsb2NhbFhfaW5kZXhfdW5mb2xkX29yZGVyX2J5WHRhaWxYbG9jYWxfMVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkudW5mb2xkKCkub3JkZXIoKS5ieShfXy50YWlsKFNjb3BlLmxvY2FsLCAxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLnVuZm9sZCgpLm9yZGVyKCkuYnkoX18udGFpbChTY29wZS5sb2NhbCwgMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkudW5mb2xkKCkub3JkZXIoKS5ieShfXy50YWlsKFNjb3BlLmxvY2FsLCAxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkudW5mb2xkKCkub3JkZXIoKS5ieShfXy50YWlsKFNjb3BlLmxvY2FsLCBudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLk9yZGVyKFNjb3BlLkxvY2FsKS5JbmRleDxvYmplY3Q+KCkuVW5mb2xkPG9iamVjdD4oKS5PcmRlcigpLkJ5KF9fLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkluZGV4KCkuVW5mb2xkKCkuT3JkZXIoKS5CeShncmVtbGluZ28uVF9fLlRhaWwoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKS51bmZvbGQoKS5vcmRlcigpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwsIDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKS51bmZvbGQoKS5vcmRlcigpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwsIDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKS51bmZvbGQoKS5vcmRlcigpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwsIDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykudmFsdWVzKCduYW1lJykuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLnVuZm9sZCgpLm9yZGVyKCkuYnkoX18udGFpbChTY29wZS5sb2NhbCwgMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYX2luZGV4X3dpdGhYbWFwWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKS53aXRoKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkud2l0aChXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLndpdGgoV2l0aE9wdGlvbnMuaW5kZXhlciwgV2l0aE9wdGlvbnMubWFwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLk9yZGVyKFNjb3BlLkxvY2FsKS5JbmRleDxvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5JbmRleGVyLCBXaXRoT3B0aW9ucy5NYXApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5JbmRleCgpLldpdGgoZ3JlbWxpbmdvLldpdGhPcHRpb25zLkluZGV4ZXIsIGdyZW1saW5nby5XaXRoT3B0aW9ucy5NYXApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLndpdGgoV2l0aE9wdGlvbnMuaW5kZXhlciwgV2l0aE9wdGlvbnMubWFwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmluZGV4KCkud2l0aChXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuaW5kZXgoKS53aXRoXyhXaXRoT3B0aW9ucy5pbmRleGVyLCBXaXRoT3B0aW9ucy5tYXApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCduYW1lJykuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5pbmRleCgpLndpdGhfKFdpdGhPcHRpb25zLmluZGV4ZXIsIFdpdGhPcHRpb25zLm1hcCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF92YWx1ZXNYYWdlWF9pbmRleF91bmZvbGRfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuaW5kZXgoKS51bmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuaW5kZXgoKS51bmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLmluZGV4KCkudW5mb2xkKCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS52YWx1ZXMoc3RyaW5nMCkuaW5kZXgoKS51bmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSW5kZXg8b2JqZWN0PigpLlVuZm9sZDxvYmplY3Q+KCkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5WYWx1ZXMoXCJhZ2VcIikuSW5kZXgoKS5VbmZvbGQoKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLmluZGV4KCkudW5mb2xkKCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuaW5kZXgoKS51bmZvbGQoKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5pbmRleCgpLnVuZm9sZCgpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS52YWx1ZXMoJ2FnZScpLmluZGV4KCkudW5mb2xkKCkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxYX2ludGVyc2VjdFhpbmplY3RYMVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmludGVyc2VjdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaW50ZXJzZWN0KF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaW50ZXJzZWN0KF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmludGVyc2VjdChfXy5pbmplY3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSW50ZXJzZWN0KF9fLkluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLkludGVyc2VjdChncmVtbGluZ28uVF9fLkluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuaW50ZXJzZWN0KF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmludGVyc2VjdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pbnRlcnNlY3QoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5pbnRlcnNlY3QoX18uaW5qZWN0KDEpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9pbnRlcnNlY3RYVl9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmludGVyc2VjdChfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaW50ZXJzZWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaW50ZXJzZWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaW50ZXJzZWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5JbnRlcnNlY3QoX18uVigpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkludGVyc2VjdChncmVtbGluZ28uVF9fLlYoKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuaW50ZXJzZWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmludGVyc2VjdChfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5pbnRlcnNlY3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuaW50ZXJzZWN0KF9fLlYoKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9sZF9pbnRlcnNlY3RYY29uc3RhbnRYbnVsbFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uY29uc3RhbnQob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvbGQoKS5JbnRlcnNlY3QoX18uQ29uc3RhbnQ8b2JqZWN0PihudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuSW50ZXJzZWN0KGdyZW1saW5nby5UX18uQ29uc3RhbnQobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfaW50ZXJzZWN0WFZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuSW50ZXJzZWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuSW50ZXJzZWN0KGdyZW1saW5nby5UX18uVigpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpLmludGVyc2VjdChfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2ludGVyc2VjdFgyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pbnRlcnNlY3QoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pbnRlcnNlY3QoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmludGVyc2VjdChudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLkludGVyc2VjdCgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLkludGVyc2VjdCgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pbnRlcnNlY3QoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmludGVyc2VjdCgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5pbnRlcnNlY3QoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfZm9sZF9pbnRlcnNlY3RYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmludGVyc2VjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5pbnRlcnNlY3Qob2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKS5JbnRlcnNlY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5JbnRlcnNlY3QobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pbnRlcnNlY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmludGVyc2VjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5pbnRlcnNlY3QoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRfaW50ZXJzZWN0WFZfdmFsdWVzWG5hbWVYX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5vbmV4aXN0YW50XCIpLkZvbGQoKS5JbnRlcnNlY3QoX18uVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibm9uZXhpc3RhbnRcIikuRm9sZCgpLkludGVyc2VjdChncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25vbmV4aXN0YW50JykuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX2ludGVyc2VjdFhWX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuSW50ZXJzZWN0KF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5vbmV4aXN0YW50XCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5JbnRlcnNlY3QoZ3JlbWxpbmdvLlRfXy5WKCkuVmFsdWVzKFwibm9uZXhpc3RhbnRcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcygnbm9uZXhpc3RhbnQnKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWGFnZVhfZm9sZF9pbnRlcnNlY3RYVl92YWx1ZXNYYWdlWF9mb2xkWF9vcmRlcl9sb2NhbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKS5JbnRlcnNlY3QoX18uVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKSkuT3JkZXIoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkZvbGQoKS5JbnRlcnNlY3QoZ3JlbWxpbmdvLlRfXy5WKCkuVmFsdWVzKFwiYWdlXCIpLkZvbGQoKSkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuZm9sZCgpLmludGVyc2VjdChfXy5WKCkudmFsdWVzKCdhZ2UnKS5mb2xkKCkpLm9yZGVyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9pbnRlcnNlY3RYTUFSS09YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieSh2YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuaW50ZXJzZWN0KFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuaW50ZXJzZWN0KFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmludGVyc2VjdChbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoc3RyaW5nMCkudG9VcHBlcigpKS5pbnRlcnNlY3QobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLlBhdGgoKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuVG9VcHBlcigpKS5JbnRlcnNlY3QobmV3IExpc3Q8b2JqZWN0PiB7IFwiTUFSS09cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlBhdGgoKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuVG9VcHBlcigpKS5JbnRlcnNlY3QoW11pbnRlcmZhY2V7fXtcIk1BUktPXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLmludGVyc2VjdChbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuaW50ZXJzZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIk1BUktPXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkuaW50ZXJzZWN0KFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKCduYW1lJykudG9fdXBwZXIoKSkuaW50ZXJzZWN0KFsnTUFSS08nXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG1hcmtvWF9pbnRlcnNlY3RYX19fVl92YWx1ZXNYbmFtZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmludGVyc2VjdChfXy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJtYXJrb1wiIH0pLkludGVyc2VjdChfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wibWFya29cIn0pLkludGVyc2VjdChncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJtYXJrb1wiKTsgfX0pLmludGVyc2VjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkuaW50ZXJzZWN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydtYXJrbyddKS5pbnRlcnNlY3QoX18uVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcFhsb2NhdGlvblhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2ludGVyc2VjdFhzZWF0dGxlX3ZhbmNvdXZlclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QodmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QoW1wic2VhdHRsZVwiLFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmludGVyc2VjdChbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QoW1wic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKHN0cmluZzApLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcImxvY2F0aW9uXCIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuSW50ZXJzZWN0KG5ldyBMaXN0PG9iamVjdD4geyBcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKFwibG9jYXRpb25cIikuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5JbnRlcnNlY3QoW11pbnRlcmZhY2V7fXtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmludGVyc2VjdChbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuaW50ZXJzZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcInNlYXR0bGVcIik7IGFkZChcInZhbmNvdXZlclwiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QoW1wic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCdsb2NhdGlvbicpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5pbnRlcnNlY3QoWydzZWF0dGxlJywgJ3ZhbmNvdXZlciddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfaW50ZXJzZWN0WF9fX2NvbnN0YW50WDI3WF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudChudW1iZXIwKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKS5JbnRlcnNlY3QoX18uQ29uc3RhbnQ8b2JqZWN0PigyNykuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5Gb2xkKCkuSW50ZXJzZWN0KGdyZW1saW5nby5UX18uQ29uc3RhbnQoMjcpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5pbnRlcnNlY3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuaW50ZXJzZWN0KF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLmludGVyc2VjdChfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmZvbGQoKS5pbnRlcnNlY3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfaW50ZXJzZWN0WGRhdmVfa2VsdmluWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmludGVyc2VjdChbXCJkYXZlXCIsXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5pbnRlcnNlY3QoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5pbnRlcnNlY3QoW1wiZGF2ZVwiLCBcImtlbHZpblwiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShzdHJpbmcwKS5pbnRlcnNlY3QobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuSW50ZXJzZWN0KG5ldyBMaXN0PG9iamVjdD4geyBcImRhdmVcIiwgXCJrZWx2aW5cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuSW50ZXJzZWN0KFtdaW50ZXJmYWNle317XCJkYXZlXCIsIFwia2VsdmluXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLmludGVyc2VjdChbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5pbnRlcnNlY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZGF2ZVwiKTsgYWRkKFwia2VsdmluXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuaW50ZXJzZWN0KFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgnbmFtZScpLmludGVyc2VjdChbJ2RhdmUnLCAna2VsdmluJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhX251bGxfYlhfaW50ZXJzZWN0WGFfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLG51bGwsXCJiXCJdKS5pbnRlcnNlY3QoW1wiYVwiLFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuaW50ZXJzZWN0KFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuaW50ZXJzZWN0KFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmludGVyc2VjdChsaXN0MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIG51bGwsIFwiYlwiIH0pLkludGVyc2VjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiY1wiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgbmlsLCBcImJcIn0pLkludGVyc2VjdChbXWludGVyZmFjZXt9e1wiYVwiLCBcImNcIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5pbnRlcnNlY3QoW1wiYVwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQobnVsbCk7IGFkZChcImJcIik7IH19KS5pbnRlcnNlY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiY1wiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuaW50ZXJzZWN0KFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5pbnRlcnNlY3QoWydhJywgJ2MnXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfbnVsbF9iWF9pbnRlcnNlY3RYYV9udWxsX2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixudWxsLFwiYlwiXSkuaW50ZXJzZWN0KFtcImFcIixudWxsLFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuaW50ZXJzZWN0KFtcImFcIiwgbnVsbCwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkuaW50ZXJzZWN0KFtcImFcIiwgbnVsbCwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmludGVyc2VjdChsaXN0MSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIG51bGwsIFwiYlwiIH0pLkludGVyc2VjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIG51bGwsIFwiY1wiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgbmlsLCBcImJcIn0pLkludGVyc2VjdChbXWludGVyZmFjZXt9e1wiYVwiLCBuaWwsIFwiY1wifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmludGVyc2VjdChbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLmludGVyc2VjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQobnVsbCk7IGFkZChcImNcIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLmludGVyc2VjdChbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhJywgTm9uZSwgJ2InXSkuaW50ZXJzZWN0KFsnYScsIE5vbmUsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9pbnRlcnNlY3RYZml2ZV90aHJlZV83WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMyxcInRocmVlXCJdKS5pbnRlcnNlY3QoW1wiZml2ZVwiLFwidGhyZWVcIiw3aV0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLmludGVyc2VjdChbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuaW50ZXJzZWN0KFtcImZpdmVcIiwgXCJ0aHJlZVwiLCA3aV0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuaW50ZXJzZWN0KGxpc3QxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuSW50ZXJzZWN0KG5ldyBMaXN0PG9iamVjdD4geyBcImZpdmVcIiwgXCJ0aHJlZVwiLCA3IH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCBcInRocmVlXCJ9KS5JbnRlcnNlY3QoW11pbnRlcmZhY2V7fXtcImZpdmVcIiwgXCJ0aHJlZVwiLCBpbnQzMig3KX0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5pbnRlcnNlY3QoW1wiZml2ZVwiLCBcInRocmVlXCIsIDdpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgzKTsgYWRkKFwidGhyZWVcIik7IH19KS5pbnRlcnNlY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZml2ZVwiKTsgYWRkKFwidGhyZWVcIik7IGFkZCg3KTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkuaW50ZXJzZWN0KFtcImZpdmVcIiwgXCJ0aHJlZVwiLCA3XSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzMsICd0aHJlZSddKS5pbnRlcnNlY3QoWydmaXZlJywgJ3RocmVlJywgN10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhfX2ZlYXR1cmVfX190ZXN0X19udWxsWF9sVHJpbSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcIiAgZmVhdHVyZVwiLCBcIiBvbmUgdGVzdFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiICBmZWF0dXJlXCIsIFwiIG9uZSB0ZXN0XCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiICBmZWF0dXJlXCIsIFwiIG9uZSB0ZXN0XCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBzdHJpbmcxLCBvYmplY3QwLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2LCBzdHJpbmc3KS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCIgIGZlYXR1cmVcIiwgXCIgb25lIHRlc3RcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLkxUcmltKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcIiAgZmVhdHVyZVwiLCBcIiBvbmUgdGVzdFwiLCBuaWwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS5MVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwiICBmZWF0dXJlXCIsIFwiIG9uZSB0ZXN0XCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcIiAgZmVhdHVyZVwiLCBcIiBvbmUgdGVzdFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmVcIiwgXCIgb25lIHRlc3RcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJyAgZmVhdHVyZScsICcgb25lIHRlc3QnLCBOb25lLCAnJywgJyAnLCAnXHUzMDAwYWJjJywgJ2FiY1x1MzAwMCcsICdcdTMwMDBhYmNcdTMwMDAnLCAnXHUzMDAwXHUzMDAwJykubF90cmltKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX2xUcmltWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJdKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJdKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiIH0pLkxUcmltPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBuaWwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwifSkuTFRyaW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJdKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIiAgZmVhdHVyZSAgXCIpOyBhZGQoXCIgb25lIHRlc3QgXCIpOyBhZGQobnVsbCk7IGFkZChcIlwiKTsgYWRkKFwiIFwiKTsgYWRkKFwiXHUzMDAwYWJjXCIpOyBhZGQoXCJhYmNcdTMwMDBcIik7IGFkZChcIlx1MzAwMGFiY1x1MzAwMFwiKTsgYWRkKFwiXHUzMDAwXHUzMDAwXCIpOyB9fSkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJdKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWycgIGZlYXR1cmUgICcsICcgb25lIHRlc3QgJywgTm9uZSwgJycsICcgJywgJ1x1MzAwMGFiYycsICdhYmNcdTMwMDAnLCAnXHUzMDAwYWJjXHUzMDAwJywgJ1x1MzAwMFx1MzAwMCddKS5sX3RyaW0oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhfX2ZlYXR1cmVfX1hfbFRyaW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmUgIFwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmUgIFwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiICBmZWF0dXJlICBcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCkubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiICBmZWF0dXJlICBcIikuTFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiICBmZWF0dXJlICBcIikuTFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcIiAgZmVhdHVyZSAgXCIpLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiICBmZWF0dXJlICBcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmUgIFwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCcgIGZlYXR1cmUgICcpLmxfdHJpbSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhMaXN0WGFfYlhYX2xUcmltIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixcImJcIl0pLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSkubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSkubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiYlwiIH0pLkxUcmltKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYVwiLCBcImJcIn0pLkxUcmltKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImJcIik7IH19KS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSkubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCAnYiddKS5sX3RyaW0oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYTGlzdFgxXzJYWF9sVHJpbVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsMl0pLmxUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxLCAyXSkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxLCAyXSkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSkuTFRyaW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezEsIDJ9KS5MVHJpbShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAyXSkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgfX0pLmxUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDJdKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDJdKS5sX3RyaW0oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX2xUcmltIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc4KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzEzKS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzE0KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTUpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTYpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzE3KS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUwKS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzEzKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTMpLnRvKHN0cmluZzE1KS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUyKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzE2KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJyBtYXJrbyAnKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnICB2YWRhcyAgJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnICBsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCAgJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICcgICByaXBwbGUgICAnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5MVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5MVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubFRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5sVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmxUcmltKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykubF90cmltKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfb3JkZXJfZm9sZF9sVHJpbVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzgpLnByb3BlcnR5KHN0cmluZzksIHN0cmluZzEwKS5hcyhzdHJpbmcxMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nMTMpLmFkZFYoc3RyaW5nNykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTQpLnByb3BlcnR5KHN0cmluZzksIHN0cmluZzEwKS5hcyhzdHJpbmcxNSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxNikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTcpLmFkZEUoc3RyaW5nMTgpLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTApLmFkZEUoc3RyaW5nMTgpLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nMTMpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUxKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMikuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTUpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUxKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzEzKS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTYpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnIG1hcmtvICcpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICcgIHZhZGFzICAnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICcgIGxvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoICAnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJyAgIHJpcHBsZSAgICcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmxUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmxUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpLmxUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkuTFRyaW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLkxUcmltKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5sVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkubFRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmxUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5vcmRlcigpLmZvbGQoKS5sX3RyaW0oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfbGVuZ3RoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3RcIiwgbnVsbCkubGVuZ3RoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0XCIsIG51bGwpLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3RcIiwgbnVsbCkubGVuZ3RoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEsIG9iamVjdDApLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJmZWF0dXJlXCIsIFwidGVzdFwiLCBudWxsKS5MZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3RcIiwgbmlsKS5MZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0XCIsIG51bGwpLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0XCIsIG51bGwpLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0XCIsIG51bGwpLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdmZWF0dXJlJywgJ3Rlc3QnLCBOb25lKS5sZW5ndGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYZmVhdHVyZV90ZXN0X251bGxYX2xlbmd0aFhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidGVzdFwiLCBudWxsKS5sZW5ndGgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidGVzdFwiLCBudWxsKS5sZW5ndGgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3RcIiwgbnVsbCkubGVuZ3RoKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCwgc3RyaW5nMSwgb2JqZWN0MCkubGVuZ3RoKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZmVhdHVyZVwiLCBcInRlc3RcIiwgbnVsbCkuTGVuZ3RoPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJmZWF0dXJlXCIsIFwidGVzdFwiLCBuaWwpLkxlbmd0aChncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3RcIiwgbnVsbCkubGVuZ3RoKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidGVzdFwiLCBudWxsKS5sZW5ndGgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0XCIsIG51bGwpLmxlbmd0aChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZlYXR1cmUnLCAndGVzdCcsIE5vbmUpLmxlbmd0aChTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WExpc3RYYV9iWFhfbGVuZ3RoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixcImJcIl0pLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBcImJcIiB9KS5MZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIFwiYlwifSkuTGVuZ3RoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJiXCIpOyB9fSkubGVuZ3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCAnYiddKS5sZW5ndGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9sZW5ndGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubGVuZ3RoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmxlbmd0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5MZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuTGVuZ3RoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5sZW5ndGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5sZW5ndGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX2xlbmd0aFhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5sZW5ndGgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5sZW5ndGgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkubGVuZ3RoKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpLmxlbmd0aChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLkxlbmd0aDxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkuTGVuZ3RoKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5sZW5ndGgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLmxlbmd0aChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkubGVuZ3RoKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5vcmRlcigpLmZvbGQoKS5sZW5ndGgoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcGV0ZXJYX29yX2xvb3BzX2lzWDNYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5vcigpLmxvb3BzKCkuaXMoMykpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikub3IoKS5sb29wcygpLmlzKDMpKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5vcigpLmxvb3BzKCkuaXMoMykpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5vcigpLmxvb3BzKCkuaXMobnVtYmVyMCkpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5wYXRoKCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlJlcGVhdChfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChfXy5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuT3IoKS5Mb29wcygpLklzKDMpKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuUGF0aCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5PcigpLkxvb3BzKCkuSXMoMykpLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLm9yKCkubG9vcHMoKS5pcygzKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLm9yKCkubG9vcHMoKS5pcygzKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLm9yKCkubG9vcHMoKS5pcygzKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlX3BhdGgoKSkudW50aWwoX18uaGFzKCduYW1lJywgJ3BldGVyJykub3JfKCkubG9vcHMoKS5pc18oMykpLmhhcygnbmFtZScsICdwZXRlcicpLnBhdGgoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcGV0ZXJYX29yX2xvb3BzX2lzWDJYWF9oYXNYbmFtZV9wZXRlclhfcGF0aF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5vcigpLmxvb3BzKCkuaXMoMikpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikub3IoKS5sb29wcygpLmlzKDIpKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5vcigpLmxvb3BzKCkuaXMoMikpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5vcigpLmxvb3BzKCkuaXMobnVtYmVyMCkpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5wYXRoKCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlJlcGVhdChfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChfXy5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuT3IoKS5Mb29wcygpLklzKDIpKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuUGF0aCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5PcigpLkxvb3BzKCkuSXMoMikpLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5QYXRoKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLm9yKCkubG9vcHMoKS5pcygyKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLm9yKCkubG9vcHMoKS5pcygyKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLm9yKCkubG9vcHMoKS5pcygyKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlX3BhdGgoKSkudW50aWwoX18uaGFzKCduYW1lJywgJ3BldGVyJykub3JfKCkubG9vcHMoKS5pc18oMikpLmhhcygnbmFtZScsICdwZXRlcicpLnBhdGgoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfcmVwZWF0WGJvdGhfc2ltcGxlUGF0aFhfdW50aWxYaGFzWG5hbWVfcGV0ZXJYX2FuZF9sb29wc19pc1gzWFhfaGFzWG5hbWVfcGV0ZXJYX3BhdGhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuYW5kKCkubG9vcHMoKS5pcygzKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5hbmQoKS5sb29wcygpLmlzKDMpKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5hbmQoKS5sb29wcygpLmlzKDMpKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuYW5kKCkubG9vcHMoKS5pcyhudW1iZXIwKSkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnBhdGgoKS5ieShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuUmVwZWF0KF9fLkJvdGgoKS5TaW1wbGVQYXRoKCkpLlVudGlsKF9fLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5BbmQoKS5Mb29wcygpLklzKDMpKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuUGF0aCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5BbmQoKS5Mb29wcygpLklzKDMpKS5IYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuUGF0aCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkucmVwZWF0KF9fLmJvdGgoKS5zaW1wbGVQYXRoKCkpLnVudGlsKF9fLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5hbmQoKS5sb29wcygpLmlzKDMpKS5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikucGF0aCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoXCJuYW1lXCIsIFwicGV0ZXJcIikuYW5kKCkubG9vcHMoKS5pcygzKSkuaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLnBhdGgoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzKFwibmFtZVwiLCBcInBldGVyXCIpLmFuZCgpLmxvb3BzKCkuaXMoMykpLmhhcyhcIm5hbWVcIiwgXCJwZXRlclwiKS5wYXRoKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZV9wYXRoKCkpLnVudGlsKF9fLmhhcygnbmFtZScsICdwZXRlcicpLmFuZF8oKS5sb29wcygpLmlzXygzKSkuaGFzKCduYW1lJywgJ3BldGVyJykucGF0aCgpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9lbWl0WGhhc1huYW1lX21hcmtvWF9vcl9sb29wc19pc1gyWFhfcmVwZWF0WG91dFhfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmVtaXQoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm9yKCkubG9vcHMoKS5pcygyKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZW1pdChfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3IoKS5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZW1pdChfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3IoKS5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmVtaXQoX18uaGFzKHN0cmluZzAsIHN0cmluZzEpLm9yKCkubG9vcHMoKS5pcyhudW1iZXIwKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRW1pdChfXy5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3IoKS5Mb29wcygpLklzKDIpKS5SZXBlYXQoX18uT3V0KCkpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkVtaXQoZ3JlbWxpbmdvLlRfXy5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3IoKS5Mb29wcygpLklzKDIpKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5lbWl0KF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vcigpLmxvb3BzKCkuaXMoMikpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZW1pdChfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3IoKS5sb29wcygpLmlzKDIpKS5yZXBlYXQoX18ub3V0KCkpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmVtaXQoX18uaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm9yKCkubG9vcHMoKS5pcygyKSkucmVwZWF0KF9fLm91dCgpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmVtaXQoX18uaGFzKCduYW1lJywgJ21hcmtvJykub3JfKCkubG9vcHMoKS5pc18oMikpLnJlcGVhdChfXy5vdXQoKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9tYXBYdmFsdWVzWG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkubWFwKF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkubWFwKF9fLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkubWFwKF9fLnZhbHVlcyhzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk1hcDxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuTWFwKGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkubWFwKF9fLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVfbGFiZWxfbWFwWGxlbmd0aFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoKS5sYWJlbCgpLm1hcChfXy5sZW5ndGgoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RSgpLmxhYmVsKCkubWFwKF9fLmxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RSgpLmxhYmVsKCkubWFwKF9fLmxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoKS5sYWJlbCgpLm1hcChfXy5sZW5ndGgoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoKS5MYWJlbCgpLk1hcDxvYmplY3Q+KF9fLkxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKCkuTGFiZWwoKS5NYXAoZ3JlbWxpbmdvLlRfXy5MZW5ndGgoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoKS5sYWJlbCgpLm1hcChfXy5sZW5ndGgoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKCkubGFiZWwoKS5tYXAoX18ubGVuZ3RoKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RSgpLmxhYmVsKCkubWFwKF9fLmxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoKS5sYWJlbCgpLm1hcChfXy5sZW5ndGgoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfbWFwWHZhbHVlc1huYW1lWFhfbWFwWGxlbmd0aFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKS5tYXAoX18ubGVuZ3RoKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKS5tYXAoX18ubGVuZ3RoKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5tYXAoX18udmFsdWVzKFwibmFtZVwiKSkubWFwKF9fLmxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpLm1hcChfXy52YWx1ZXMoc3RyaW5nMCkpLm1hcChfXy5sZW5ndGgoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLk1hcDxvYmplY3Q+KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuTWFwPG9iamVjdD4oX18uTGVuZ3RoKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLk1hcChncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpLk1hcChncmVtbGluZ28uVF9fLkxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkubWFwKF9fLnZhbHVlcyhcIm5hbWVcIikpLm1hcChfXy5sZW5ndGgoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5tYXAoX18udmFsdWVzKFwibmFtZVwiKSkubWFwKF9fLmxlbmd0aCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLm1hcChfXy52YWx1ZXMoXCJuYW1lXCIpKS5tYXAoX18ubGVuZ3RoKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5tYXAoX18udmFsdWVzKCduYW1lJykpLm1hcChfXy5sZW5ndGgoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFBhdGhfVl9hc1hhWF9vdXRfbWFwWHNlbGVjdFhhWF92YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFBhdGgoKS5WKCkuYXMoXCJhXCIpLm91dCgpLm1hcChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhcImFcIikub3V0KCkubWFwKF9fLnNlbGVjdChcImFcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhcImFcIikub3V0KCkubWFwKF9fLnNlbGVjdChcImFcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFBhdGgoKS5WKCkuYXMoc3RyaW5nMCkub3V0KCkubWFwKF9fLnNlbGVjdChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFBhdGgoKS5WKCkuQXMoXCJhXCIpLk91dCgpLk1hcDxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoUGF0aCgpLlYoKS5BcyhcImFcIikuT3V0KCkuTWFwKGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKS5WYWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhQYXRoKCkuVigpLmFzKFwiYVwiKS5vdXQoKS5tYXAoX18uc2VsZWN0KFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhcImFcIikub3V0KCkubWFwKF9fLnNlbGVjdChcImFcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFBhdGgoKS5WKCkuYXMoXCJhXCIpLm91dCgpLm1hcChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9wYXRoKCkuVigpLmFzXygnYScpLm91dCgpLm1hcChfXy5zZWxlY3QoJ2EnKS52YWx1ZXMoJ25hbWUnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFBhdGhfVl9hc1hhWF9vdXRfb3V0X2FzWGJYX21hcFhzZWxlY3RYYVhfdmFsdWVzWG5hbWVYX2NvbmNhdFhzZWxlY3RYYlhfdmFsdWVzWG5hbWVYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhcImFcIikub3V0KCkub3V0KCkuYXMoXCJiXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImJcIikudmFsdWVzKFwibmFtZVwiKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhcImFcIikub3V0KCkub3V0KCkuYXMoXCJiXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImJcIikudmFsdWVzKFwibmFtZVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFBhdGgoKS5WKCkuYXMoXCJhXCIpLm91dCgpLm91dCgpLmFzKFwiYlwiKS5tYXAoX18uc2VsZWN0KFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJiXCIpLnZhbHVlcyhcIm5hbWVcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhzdHJpbmcwKS5vdXQoKS5vdXQoKS5hcyhzdHJpbmcxKS5tYXAoX18uc2VsZWN0KHN0cmluZzApLnZhbHVlcyhzdHJpbmcyKS5jb25jYXQoX18uc2VsZWN0KHN0cmluZzEpLnZhbHVlcyhzdHJpbmcyKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFBhdGgoKS5WKCkuQXMoXCJhXCIpLk91dCgpLk91dCgpLkFzKFwiYlwiKS5NYXA8b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PihcImFcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkNvbmNhdChfXy5TZWxlY3Q8b2JqZWN0PihcImJcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhQYXRoKCkuVigpLkFzKFwiYVwiKS5PdXQoKS5PdXQoKS5BcyhcImJcIikuTWFwKGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKS5WYWx1ZXMoXCJuYW1lXCIpLkNvbmNhdChncmVtbGluZ28uVF9fLlNlbGVjdChcImJcIikuVmFsdWVzKFwibmFtZVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFBhdGgoKS5WKCkuYXMoXCJhXCIpLm91dCgpLm91dCgpLmFzKFwiYlwiKS5tYXAoX18uc2VsZWN0KFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmNvbmNhdChfXy5zZWxlY3QoXCJiXCIpLnZhbHVlcyhcIm5hbWVcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoUGF0aCgpLlYoKS5hcyhcImFcIikub3V0KCkub3V0KCkuYXMoXCJiXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuY29uY2F0KF9fLnNlbGVjdChcImJcIikudmFsdWVzKFwibmFtZVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhQYXRoKCkuVigpLmFzKFwiYVwiKS5vdXQoKS5vdXQoKS5hcyhcImJcIikubWFwKF9fLnNlbGVjdChcImFcIikudmFsdWVzKFwibmFtZVwiKS5jb25jYXQoX18uc2VsZWN0KFwiYlwiKS52YWx1ZXMoXCJuYW1lXCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3BhdGgoKS5WKCkuYXNfKCdhJykub3V0KCkub3V0KCkuYXNfKCdiJykubWFwKF9fLnNlbGVjdCgnYScpLnZhbHVlcygnbmFtZScpLmNvbmNhdChfXy5zZWxlY3QoJ2InKS52YWx1ZXMoJ25hbWUnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWFwWHNlbGVjdFhhWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5tYXAoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkubWFwKF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk1hcDxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuTWFwKGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm1hcChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5tYXAoX18uc2VsZWN0KCdhJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWFwWGNvbnN0YW50WG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXAoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWFwKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXAoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXAoX18uY29uc3RhbnQob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hcDxvYmplY3Q+KF9fLkNvbnN0YW50PG9iamVjdD4obnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWFwKGdyZW1saW5nby5UX18uQ29uc3RhbnQobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWFwKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWFwKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWFwKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXAoX18uY29uc3RhbnQoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBfbWF0Y2hYYV9zZWxlY3RYbmFtZVhfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5tYXRjaChfXy5hcyhcImFcIikuc2VsZWN0KFwibmFtZVwiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoKS5tYXRjaChfXy5hcyhcImFcIikuc2VsZWN0KFwibmFtZVwiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkubWF0Y2goX18uYXMoXCJhXCIpLnNlbGVjdChcIm5hbWVcIikuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5zZWxlY3Qoc3RyaW5nMSkuYXMoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5TZWxlY3QoXCJuYW1lXCIpLkFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVNYXAoKS5tYXRjaChfXy5hcyhcImFcIikuc2VsZWN0KFwibmFtZVwiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcCgpLm1hdGNoKF9fLmFzKFwiYVwiKS5zZWxlY3QoXCJuYW1lXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkubWF0Y2goX18uYXMoXCJhXCIpLnNlbGVjdChcIm5hbWVcIikuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoKS5tYXRjaChfXy5hc18oJ2EnKS5zZWxlY3QoJ25hbWUnKS5hc18oJ2InKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX291dF9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX291dF9iWF9zZWxlY3RYYl9pZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikpLnNlbGVjdChcImJcIikuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkpLnNlbGVjdChzdHJpbmcxKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikpLlNlbGVjdDxvYmplY3Q+KFwiYlwiKS5CeShULklkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKSkuU2VsZWN0KFwiYlwiKS5CeShncmVtbGluZ28uVC5JZCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKS5ieShULmlkKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKSkuc2VsZWN0KCdiJykuYnkoVC5pZF8pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9rbm93c19iX19iX2NyZWF0ZWRfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzIpLm91dChzdHJpbmczKS5hcyhzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLCBfXy5BcyhcImJcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJyksIF9fLmFzXygnYicpLm91dCgnY3JlYXRlZCcpLmFzXygnYycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGJfY3JlYXRlZF9jX19hX2tub3dzX2JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSxfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLCBfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmczKS5vdXQoc3RyaW5nNCkuYXMoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpLCBfXy5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdiJykub3V0KCdjcmVhdGVkJykuYXNfKCdjJyksIF9fLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX2NyZWF0ZWRfYl9fYl8wY3JlYXRlZF9jWF93aGVyZVhhX25lcV9jWF9zZWxlY3RYYV9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikpLndoZXJlKFwiYVwiLCBQLm5lcShcImNcIikpLnNlbGVjdChcImFcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkud2hlcmUoXCJhXCIsIFAubmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkud2hlcmUoXCJhXCIsIFAubmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKSwgX18uYXMoc3RyaW5nMikuaW4oc3RyaW5nMSkuYXMoc3RyaW5nMykpLndoZXJlKHN0cmluZzAsIFAubmVxKHN0cmluZzMpKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJjXCIpKS5XaGVyZShcImFcIiwgUC5OZXEoXCJjXCIpKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5BcyhcImNcIikpLldoZXJlKFwiYVwiLCBncmVtbGluZ28uUC5OZXEoXCJjXCIpKS5TZWxlY3QoXCJhXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS53aGVyZShcImFcIiwgUC5uZXEoXCJjXCIpKS5zZWxlY3QoXCJhXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkud2hlcmUoXCJhXCIsIFAubmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluXyhcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS53aGVyZShcImFcIiwgUC5uZXEoXCJjXCIpKS5zZWxlY3QoXCJhXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaW5fKCdjcmVhdGVkJykuYXNfKCdjJykpLndoZXJlKCdhJywgUC5uZXEoJ2MnKSkuc2VsZWN0KCdhJywgJ2MnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGRfMGtub3dzX2FfX2RfaGFzWG5hbWVfdmFkYXNYX19hX2tub3dzX2JfX2JfY3JlYXRlZF9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImRcIikuaW4oXCJrbm93c1wiKS5hcyhcImFcIiksX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSxfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImRcIikuaW4oXCJrbm93c1wiKS5hcyhcImFcIiksIF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJkXCIpLmluKFwia25vd3NcIikuYXMoXCJhXCIpLCBfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5pbihzdHJpbmcxKS5hcyhzdHJpbmcyKSwgX18uYXMoc3RyaW5nMCkuaGFzKHN0cmluZzMsIHN0cmluZzQpLCBfXy5hcyhzdHJpbmcyKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nNSksIF9fLmFzKHN0cmluZzUpLm91dChzdHJpbmc2KS5hcyhzdHJpbmc3KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImRcIikuSW4oXCJrbm93c1wiKS5BcyhcImFcIiksIF9fLkFzKFwiZFwiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiZFwiKS5JbihcImtub3dzXCIpLkFzKFwiYVwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImRcIikuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImRcIikuaW4oXCJrbm93c1wiKS5hcyhcImFcIiksIF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiZFwiKS5pbihcImtub3dzXCIpLmFzKFwiYVwiKSwgX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJkXCIpLmluXyhcImtub3dzXCIpLmFzKFwiYVwiKSwgX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2QnKS5pbl8oJ2tub3dzJykuYXNfKCdhJyksIF9fLmFzXygnZCcpLmhhcygnbmFtZScsICd2YWRhcycpLCBfXy5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJyksIF9fLmFzXygnYicpLm91dCgnY3JlYXRlZCcpLmFzXygnYycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfY3JlYXRlZF9sb3BfYl9fYl8wY3JlYXRlZF8yOV9jX19jX3doZXJlWHJlcGVhdFhvdXRYX3RpbWVzWDJYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKSxfXy5hcyhcImNcIikud2hlcmUoX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS53aGVyZShfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS53aGVyZShfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5oYXMoc3RyaW5nMiwgc3RyaW5nMykuYXMoc3RyaW5nNCksIF9fLmFzKHN0cmluZzQpLmluKHN0cmluZzEpLmhhcyhzdHJpbmc1LCBudW1iZXIwKS5hcyhzdHJpbmc2KSwgX18uYXMoc3RyaW5nNikud2hlcmUoX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuSGFzKFwiYWdlXCIsIDI5KS5BcyhcImNcIiksIF9fLkFzKFwiY1wiKS5XaGVyZShfXy5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuSGFzKFwiYWdlXCIsIDI5KS5BcyhcImNcIiksIGdyZW1saW5nby5UX18uQXMoXCJjXCIpLldoZXJlKGdyZW1saW5nby5UX18uUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkpLlRpbWVzKDIpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS53aGVyZShfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpLCBfXy5hcyhcImNcIikud2hlcmUoX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluXyhcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS53aGVyZShfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuaGFzKCduYW1lJywgJ2xvcCcpLmFzXygnYicpLCBfXy5hc18oJ2InKS5pbl8oJ2NyZWF0ZWQnKS5oYXMoJ2FnZScsIDI5KS5hc18oJ2MnKSwgX18uYXNfKCdjJykud2hlcmUoX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX21hdGNoWGFfb3V0X2NvdW50X2NfX2JfaW5fY291bnRfY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuY291bnQoKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5pbigpLmNvdW50KCkuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmNvdW50KCkuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikuaW4oKS5jb3VudCgpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuY291bnQoKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5pbigpLmNvdW50KCkuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KCkuY291bnQoKS5hcyhzdHJpbmcyKSwgX18uYXMoc3RyaW5nMSkuaW4oKS5jb3VudCgpLmFzKHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dCgpLkNvdW50KCkuQXMoXCJjXCIpLCBfXy5BcyhcImJcIikuSW4oKS5Db3VudCgpLkFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dCgpLkNvdW50KCkuQXMoXCJjXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5JbigpLkNvdW50KCkuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5jb3VudCgpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLmluKCkuY291bnQoKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5jb3VudCgpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLmluKCkuY291bnQoKS5hcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5jb3VudCgpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLmluXygpLmNvdW50KCkuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoKS5jb3VudCgpLmFzXygnYycpLCBfXy5hc18oJ2InKS5pbl8oKS5jb3VudCgpLmFzXygnYycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfX2Ffb3V0X2JfX25vdFhhX2NyZWF0ZWRfYlhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIiksX18ubm90KF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSwgX18ubm90KF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIiksIF9fLm5vdChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSksIF9fLm5vdChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMikuYXMoc3RyaW5nMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIiksIF9fLk5vdChfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLCBfXy5ub3QoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIiksIF9fLm5vdChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKSwgX18ubm90KF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgpLmFzXygnYicpLCBfXy5ub3RfKF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFzXygnYicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX2NyZWF0ZWRfbG9wX2JfX2JfMGNyZWF0ZWRfMjlfY1hfd2hlcmVYY19yZXBlYXRYb3V0WF90aW1lc1gyWFhfc2VsZWN0WGFfYl9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpKS53aGVyZShfXy5hcyhcImNcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5oYXMoc3RyaW5nMiwgc3RyaW5nMykuYXMoc3RyaW5nNCksIF9fLmFzKHN0cmluZzQpLmluKHN0cmluZzEpLmhhcyhzdHJpbmc1LCBudW1iZXIwKS5hcyhzdHJpbmc2KSkud2hlcmUoX18uYXMoc3RyaW5nNikucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIxKSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzQsIHN0cmluZzYpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuSGFzKFwiYWdlXCIsIDI5KS5BcyhcImNcIikpLldoZXJlKF9fLkFzKFwiY1wiKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5IYXMoXCJhZ2VcIiwgMjkpLkFzKFwiY1wiKSkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5BcyhcImNcIikuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkpLlRpbWVzKDIpKS5TZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpKS53aGVyZShfXy5hcyhcImNcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluXyhcImNyZWF0ZWRcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuaGFzKCduYW1lJywgJ2xvcCcpLmFzXygnYicpLCBfXy5hc18oJ2InKS5pbl8oJ2NyZWF0ZWQnKS5oYXMoJ2FnZScsIDI5KS5hc18oJ2MnKSkud2hlcmUoX18uYXNfKCdjJykucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKSkuc2VsZWN0KCdhJywgJ2InLCAnYycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dF9tYXRjaFhhXzBjcmVhdGVkX2JfX2JfMGtub3dzX2NYX3NlbGVjdFhjWF9vdXRYY3JlYXRlZFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikuaW4oXCJrbm93c1wiKS5hcyhcImNcIikpLnNlbGVjdChcImNcIikub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImtub3dzXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiY1wiKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImtub3dzXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiY1wiKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLm1hdGNoKF9fLmFzKHN0cmluZzApLmluKHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmcyKS5pbihzdHJpbmczKS5hcyhzdHJpbmc0KSkuc2VsZWN0KHN0cmluZzQpLm91dChzdHJpbmcxKS52YWx1ZXMoc3RyaW5nNSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJiXCIpLkluKFwia25vd3NcIikuQXMoXCJjXCIpKS5TZWxlY3Q8b2JqZWN0PihcImNcIikuT3V0KFwiY3JlYXRlZFwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5JbihcImtub3dzXCIpLkFzKFwiY1wiKSkuU2VsZWN0KFwiY1wiKS5PdXQoXCJjcmVhdGVkXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImtub3dzXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiY1wiKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJrbm93c1wiKS5hcyhcImNcIikpLnNlbGVjdChcImNcIikub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5tYXRjaChfXy5hcyhcImFcIikuaW5fKFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbl8oXCJrbm93c1wiKS5hcyhcImNcIikpLnNlbGVjdChcImNcIikub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLm1hdGNoKF9fLmFzXygnYScpLmluXygnY3JlYXRlZCcpLmFzXygnYicpLCBfXy5hc18oJ2InKS5pbl8oJ2tub3dzJykuYXNfKCdjJykpLnNlbGVjdCgnYycpLm91dCgnY3JlYXRlZCcpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9rbm93c19iX19iX2NyZWF0ZWRfY19fYV9jcmVhdGVkX2NYX2RlZHVwWGFfYl9jWF9zZWxlY3RYYVhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS5kZWR1cChcImFcIiwgXCJiXCIsIFwiY1wiKS5zZWxlY3QoXCJhXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS5kZWR1cChcImFcIiwgXCJiXCIsIFwiY1wiKS5zZWxlY3QoXCJhXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkuZGVkdXAoXCJhXCIsIFwiYlwiLCBcImNcIikuc2VsZWN0KFwiYVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKSwgX18uYXMoc3RyaW5nMikub3V0KHN0cmluZzMpLmFzKHN0cmluZzQpLCBfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMykuYXMoc3RyaW5nNCkpLmRlZHVwKHN0cmluZzAsIHN0cmluZzIsIHN0cmluZzQpLnNlbGVjdChzdHJpbmcwKS5ieShzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSwgX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKS5EZWR1cChcImFcIiwgXCJiXCIsIFwiY1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImNcIikpLkRlZHVwKFwiYVwiLCBcImJcIiwgXCJjXCIpLlNlbGVjdChcImFcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS5kZWR1cChcImFcIiwgXCJiXCIsIFwiY1wiKS5zZWxlY3QoXCJhXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIikpLmRlZHVwKFwiYVwiLCBcImJcIiwgXCJjXCIpLnNlbGVjdChcImFcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkuZGVkdXAoXCJhXCIsIFwiYlwiLCBcImNcIikuc2VsZWN0KFwiYVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLCBfXy5hc18oJ2InKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2MnKSwgX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuYXNfKCdjJykpLmRlZHVwKCdhJywgJ2InLCAnYycpLnNlbGVjdCgnYScpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX2NyZWF0ZWRfYl9fYV9yZXBlYXRYb3V0WF90aW1lc1gyWFhfc2VsZWN0WGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLF9fLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzApLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkuYXMoc3RyaW5nMikpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJhXCIpLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoMikuQXMoXCJiXCIpKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5UaW1lcygyKS5BcyhcImJcIikpLlNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuYXMoXCJiXCIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdjcmVhdGVkJykuYXNfKCdiJyksIF9fLmFzXygnYScpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuYXNfKCdiJykpLnNlbGVjdCgnYScsICdiJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ub3RYbWF0Y2hYYV9hZ2VfYl9fYV9uYW1lX2NYX3doZXJlWGJfZXFYY1hYX3NlbGVjdFhhWFhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ub3QoX18ubWF0Y2goX18uYXMoXCJhXCIpLnZhbHVlcyhcImFnZVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiY1wiKSkud2hlcmUoXCJiXCIsIFAuZXEoXCJjXCIpKS5zZWxlY3QoXCJhXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubm90KF9fLm1hdGNoKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJhZ2VcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImNcIikpLndoZXJlKFwiYlwiLCBQLmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ub3QoX18ubWF0Y2goX18uYXMoXCJhXCIpLnZhbHVlcyhcImFnZVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiY1wiKSkud2hlcmUoXCJiXCIsIFAuZXEoXCJjXCIpKS5zZWxlY3QoXCJhXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ub3QoX18ubWF0Y2goX18uYXMoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMykuYXMoc3RyaW5nNCkpLndoZXJlKHN0cmluZzIsIFAuZXEoc3RyaW5nNCkpLnNlbGVjdChzdHJpbmcwKSkudmFsdWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk5vdChfXy5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5BcyhcImJcIiksIF9fLkFzKFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQXMoXCJjXCIpKS5XaGVyZShcImJcIiwgUC5FcShcImNcIikpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTm90KGdyZW1saW5nby5UX18uTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuVmFsdWVzKFwiYWdlXCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuVmFsdWVzKFwibmFtZVwiKS5BcyhcImNcIikpLldoZXJlKFwiYlwiLCBncmVtbGluZ28uUC5FcShcImNcIikpLlNlbGVjdChcImFcIikpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubm90KF9fLm1hdGNoKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJhZ2VcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImNcIikpLndoZXJlKFwiYlwiLCBQLmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubm90KF9fLm1hdGNoKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJhZ2VcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImNcIikpLndoZXJlKFwiYlwiLCBQLmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubm90KF9fLm1hdGNoKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJhZ2VcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImNcIikpLndoZXJlKFwiYlwiLCBQLmVxKFwiY1wiKSkuc2VsZWN0KFwiYVwiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ub3RfKF9fLm1hdGNoKF9fLmFzXygnYScpLnZhbHVlcygnYWdlJykuYXNfKCdiJyksIF9fLmFzXygnYScpLnZhbHVlcygnbmFtZScpLmFzXygnYycpKS53aGVyZSgnYicsIFAuZXEoJ2MnKSkuc2VsZWN0KCdhJykpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9rbm93c19iX19hbmRYYV9jcmVhdGVkX2NfX2JfY3JlYXRlZF9jX19hbmRYYl9jcmVhdGVkX2NvdW50X2RfX2Ffa25vd3NfY291bnRfZFhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLF9fLmFuZChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmFzKFwiZFwiKSxfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuY291bnQoKS5hcyhcImRcIikpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFuZChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmFzKFwiZFwiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmNvdW50KCkuYXMoXCJkXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYW5kKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmNvdW50KCkuYXMoXCJkXCIpLCBfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuY291bnQoKS5hcyhcImRcIikpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKSwgX18uYW5kKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmczKS5hcyhzdHJpbmc0KSwgX18uYXMoc3RyaW5nMikub3V0KHN0cmluZzMpLmFzKHN0cmluZzQpLCBfXy5hbmQoX18uYXMoc3RyaW5nMikub3V0KHN0cmluZzMpLmNvdW50KCkuYXMoc3RyaW5nNSksIF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5jb3VudCgpLmFzKHN0cmluZzUpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgX18uQW5kKF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSwgX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpLCBfXy5BbmQoX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQ291bnQoKS5BcyhcImRcIiksIF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5Db3VudCgpLkFzKFwiZFwiKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImNcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5PdXQoXCJjcmVhdGVkXCIpLkNvdW50KCkuQXMoXCJkXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5Db3VudCgpLkFzKFwiZFwiKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFuZChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmFzKFwiZFwiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmNvdW50KCkuYXMoXCJkXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFuZChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmFzKFwiZFwiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmNvdW50KCkuYXMoXCJkXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFuZChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5jb3VudCgpLmFzKFwiZFwiKSwgX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmNvdW50KCkuYXMoXCJkXCIpKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKSwgX18uYW5kXyhfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2MnKSwgX18uYXNfKCdiJykub3V0KCdjcmVhdGVkJykuYXNfKCdjJyksIF9fLmFuZF8oX18uYXNfKCdiJykub3V0KCdjcmVhdGVkJykuY291bnQoKS5hc18oJ2QnKSwgX18uYXNfKCdhJykub3V0KCdrbm93cycpLmNvdW50KCkuYXNfKCdkJykpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX3doZXJlWGFfbmVxWGNYWF9fYV9jcmVhdGVkX2JfX29yWGFfa25vd3NfdmFkYXNfX2FfMGtub3dzX2FuZF9hX2hhc1hsYWJlbF9wZXJzb25YWF9fYl8wY3JlYXRlZF9jX19iXzBjcmVhdGVkX2NvdW50X2lzWGd0WDFYWFhfc2VsZWN0WGFfYl9jWF9ieVhpZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18ud2hlcmUoXCJhXCIsIFAubmVxKFwiY1wiKSksX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLF9fLm9yKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksX18uYXMoXCJhXCIpLmluKFwia25vd3NcIikuYW5kKCkuYXMoXCJhXCIpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSksX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIiksX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZ3QoMSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy53aGVyZShcImFcIiwgUC5uZXEoXCJjXCIpKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy5hcyhcImFcIikuaW4oXCJrbm93c1wiKS5hbmQoKS5hcyhcImFcIikuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmd0KDEpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLndoZXJlKFwiYVwiLCBQLm5lcShcImNcIikpLCBfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLm9yKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIiksIF9fLmFzKFwiYVwiKS5pbihcImtub3dzXCIpLmFuZCgpLmFzKFwiYVwiKS5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIikpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZ3QoMSkpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoVC5pZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLndoZXJlKHN0cmluZzAsIFAubmVxKHN0cmluZzEpKSwgX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzIpLmFzKHN0cmluZzMpLCBfXy5vcihfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nNCkuaGFzKHN0cmluZzUsIHN0cmluZzYpLCBfXy5hcyhzdHJpbmcwKS5pbihzdHJpbmc0KS5hbmQoKS5hcyhzdHJpbmcwKS5oYXMoVC5sYWJlbCwgc3RyaW5nNykpLCBfXy5hcyhzdHJpbmczKS5pbihzdHJpbmcyKS5hcyhzdHJpbmcxKSwgX18uYXMoc3RyaW5nMykuaW4oc3RyaW5nMikuY291bnQoKS5pcyhQLmd0KG51bWJlcjApKSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzMsIHN0cmluZzEpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uV2hlcmUoXCJhXCIsIFAuTmVxKFwiY1wiKSksIF9fLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKSwgX18uT3IoX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgX18uQXMoXCJhXCIpLkluKFwia25vd3NcIikuQW5kKCkuQXMoXCJhXCIpLkhhcyhULkxhYmVsLCBcInBlcnNvblwiKSksIF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJjXCIpLCBfXy5BcyhcImJcIikuSW4oXCJjcmVhdGVkXCIpLkNvdW50KCkuSXMoUC5HdCgxKSkpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KFQuSWQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5XaGVyZShcImFcIiwgZ3JlbWxpbmdvLlAuTmVxKFwiY1wiKSksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuSW4oXCJrbm93c1wiKS5BbmQoKS5BcyhcImFcIikuSGFzKGdyZW1saW5nby5ULkxhYmVsLCBcInBlcnNvblwiKSksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5BcyhcImNcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5Db3VudCgpLklzKGdyZW1saW5nby5QLkd0KDEpKSkuU2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLkJ5KGdyZW1saW5nby5ULklkKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy53aGVyZShcImFcIiwgUC5uZXEoXCJjXCIpKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy5hcyhcImFcIikuaW4oXCJrbm93c1wiKS5hbmQoKS5hcyhcImFcIikuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmd0KDEpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRjaChfXy53aGVyZShcImFcIiwgUC5uZXEoXCJjXCIpKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy5hcyhcImFcIikuaW4oXCJrbm93c1wiKS5hbmQoKS5hcyhcImFcIikuaGFzKFQubGFiZWwsIFwicGVyc29uXCIpKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmd0KDEpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy53aGVyZShcImFcIiwgUC5uZXEoXCJjXCIpKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5vcihfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLCBfXy5hcyhcImFcIikuaW5fKFwia25vd3NcIikuYW5kKCkuYXMoXCJhXCIpLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSksIF9fLmFzKFwiYlwiKS5pbl8oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLmluXyhcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmd0KDEpKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KFQuaWQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLndoZXJlKCdhJywgUC5uZXEoJ2MnKSksIF9fLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFzXygnYicpLCBfXy5vcl8oX18uYXNfKCdhJykub3V0KCdrbm93cycpLmhhcygnbmFtZScsICd2YWRhcycpLCBfXy5hc18oJ2EnKS5pbl8oJ2tub3dzJykuYW5kXygpLmFzXygnYScpLmhhcyhULmxhYmVsLCAncGVyc29uJykpLCBfXy5hc18oJ2InKS5pbl8oJ2NyZWF0ZWQnKS5hc18oJ2MnKSwgX18uYXNfKCdiJykuaW5fKCdjcmVhdGVkJykuY291bnQoKS5pc18oUC5ndCgxKSkpLnNlbGVjdCgnYScsICdiJywgJ2MnKS5ieShULmlkXykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX19hX2JvdGhfYl9fYl9ib3RoX2NYX2RlZHVwWGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIiksX18uYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikpLmRlZHVwKFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikpLmRlZHVwKFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5ib3RoKCkuYXMoXCJjXCIpKS5kZWR1cChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5ib3RoKCkuYXMoc3RyaW5nMSksIF9fLmFzKHN0cmluZzEpLmJvdGgoKS5hcyhzdHJpbmcyKSkuZGVkdXAoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuQm90aCgpLkFzKFwiYlwiKSwgX18uQXMoXCJiXCIpLkJvdGgoKS5BcyhcImNcIikpLkRlZHVwKFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5Cb3RoKCkuQXMoXCJjXCIpKS5EZWR1cChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuYm90aCgpLmFzKFwiY1wiKSkuZGVkdXAoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5ib3RoKCkuYXMoXCJjXCIpKS5kZWR1cChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikpLmRlZHVwKFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykuYm90aCgpLmFzXygnYicpLCBfXy5hc18oJ2InKS5ib3RoKCkuYXNfKCdjJykpLmRlZHVwKCdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfa25vd3NfYl9fYl9jcmVhdGVkX2xvcF9fYl9tYXRjaFhiX2NyZWF0ZWRfZF9fZF8wY3JlYXRlZF9jWF9zZWxlY3RYY1hfY1hfc2VsZWN0WGFfYl9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIiksX18uYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiZFwiKSxfXy5hcyhcImRcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiY1wiKS5hcyhcImNcIikpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIiksIF9fLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImRcIiksIF9fLmFzKFwiZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS5zZWxlY3QoXCJjXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIiksIF9fLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImRcIiksIF9fLmFzKFwiZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS5zZWxlY3QoXCJjXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzIpLm91dChzdHJpbmczKS5oYXMoc3RyaW5nNCwgc3RyaW5nNSksIF9fLmFzKHN0cmluZzIpLm1hdGNoKF9fLmFzKHN0cmluZzIpLm91dChzdHJpbmczKS5hcyhzdHJpbmc2KSwgX18uYXMoc3RyaW5nNikuaW4oc3RyaW5nMykuYXMoc3RyaW5nNykpLnNlbGVjdChzdHJpbmc3KS5hcyhzdHJpbmc3KSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzIsIHN0cmluZzcpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKSwgX18uQXMoXCJiXCIpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJkXCIpLCBfXy5BcyhcImRcIikuSW4oXCJjcmVhdGVkXCIpLkFzKFwiY1wiKSkuU2VsZWN0PG9iamVjdD4oXCJjXCIpLkFzKFwiY1wiKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcImxvcFwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImJcIikuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImJcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImRcIiksIGdyZW1saW5nby5UX18uQXMoXCJkXCIpLkluKFwiY3JlYXRlZFwiKS5BcyhcImNcIikpLlNlbGVjdChcImNcIikuQXMoXCJjXCIpKS5TZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcImxvcFwiKSwgX18uYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiZFwiKSwgX18uYXMoXCJkXCIpLmluKFwiY3JlYXRlZFwiKS5hcyhcImNcIikpLnNlbGVjdChcImNcIikuYXMoXCJjXCIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIiksIF9fLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImRcIiksIF9fLmFzKFwiZFwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJjXCIpKS5zZWxlY3QoXCJjXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikub3V0KFwiY3JlYXRlZFwiKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLCBfXy5hcyhcImJcIikubWF0Y2goX18uYXMoXCJiXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJkXCIpLCBfXy5hcyhcImRcIikuaW5fKFwiY3JlYXRlZFwiKS5hcyhcImNcIikpLnNlbGVjdChcImNcIikuYXMoXCJjXCIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLCBfXy5hc18oJ2InKS5vdXQoJ2NyZWF0ZWQnKS5oYXMoJ25hbWUnLCAnbG9wJyksIF9fLmFzXygnYicpLm1hdGNoKF9fLmFzXygnYicpLm91dCgnY3JlYXRlZCcpLmFzXygnZCcpLCBfXy5hc18oJ2QnKS5pbl8oJ2NyZWF0ZWQnKS5hc18oJ2MnKSkuc2VsZWN0KCdjJykuYXNfKCdjJykpLnNlbGVjdCgnYScsICdiJywgJ2MnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfa25vd3NfYl9fYV9jcmVhdGVkX2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMykuYXMoc3RyaW5nNCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJjXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiY1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLCBfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2MnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFh3aGVyZVhhbmRYYV9jcmVhdGVkX2JfX2JfMGNyZWF0ZWRfY291bnRfaXNYZXFYM1hYWFhfX2FfYm90aF9iX193aGVyZVhiX2luWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18ud2hlcmUoX18uYW5kKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoUC5lcSgzKSkpKSxfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSxfXy53aGVyZShfXy5hcyhcImJcIikuaW4oKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18ud2hlcmUoX18uYW5kKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpLmlzKFAuZXEoMykpKSksIF9fLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLCBfXy53aGVyZShfXy5hcyhcImJcIikuaW4oKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLndoZXJlKF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDMpKSkpLCBfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18ud2hlcmUoX18uYXMoXCJiXCIpLmluKCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18ud2hlcmUoX18uYW5kKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKSwgX18uYXMoc3RyaW5nMikuaW4oc3RyaW5nMSkuY291bnQoKS5pcyhQLmVxKG51bWJlcjApKSkpLCBfXy5hcyhzdHJpbmcwKS5ib3RoKCkuYXMoc3RyaW5nMiksIF9fLndoZXJlKF9fLmFzKHN0cmluZzIpLmluKCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLldoZXJlKF9fLkFuZChfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuQ291bnQoKS5JcyhQLkVxKDMpKSkpLCBfXy5BcyhcImFcIikuQm90aCgpLkFzKFwiYlwiKSwgX18uV2hlcmUoX18uQXMoXCJiXCIpLkluKCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uV2hlcmUoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKFwiY3JlYXRlZFwiKS5Db3VudCgpLklzKGdyZW1saW5nby5QLkVxKDMpKSkpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkluKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy53aGVyZShfXy5hbmQoX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkuaXMoUC5lcSgzKSkpKSwgX18uYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIiksIF9fLndoZXJlKF9fLmFzKFwiYlwiKS5pbigpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLndoZXJlKF9fLmFuZChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDMpKSkpLCBfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18ud2hlcmUoX18uYXMoXCJiXCIpLmluKCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18ud2hlcmUoX18uYW5kKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluXyhcImNyZWF0ZWRcIikuY291bnQoKS5pcyhQLmVxKDMpKSkpLCBfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18ud2hlcmUoX18uYXMoXCJiXCIpLmluXygpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18ud2hlcmUoX18uYW5kXyhfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaW5fKCdjcmVhdGVkJykuY291bnQoKS5pc18oUC5lcSgzKSkpKSwgX18uYXNfKCdhJykuYm90aCgpLmFzXygnYicpLCBfXy53aGVyZShfXy5hc18oJ2InKS5pbl8oKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9vdXRFWGNyZWF0ZWRYX29yZGVyX2J5WHdlaWdodF9kZXNjWF9saW1pdFgxWF9pblZfYl9fYl9oYXNYbGFuZ19qYXZhWFhfc2VsZWN0WGFfYlhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoXCJiXCIpLF9fLmFzKFwiYlwiKS5oYXMoXCJsYW5nXCIsIFwiamF2YVwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0RShcImNyZWF0ZWRcIikub3JkZXIoKS5ieShcIndlaWdodFwiLCBPcmRlci5kZXNjKS5saW1pdCgxKS5pblYoKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5oYXMoXCJsYW5nXCIsIFwiamF2YVwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXRFKHN0cmluZzEpLm9yZGVyKCkuYnkoc3RyaW5nMiwgT3JkZXIuZGVzYykubGltaXQobnVtYmVyMCkuaW5WKCkuYXMoc3RyaW5nMyksIF9fLmFzKHN0cmluZzMpLmhhcyhzdHJpbmc0LCBzdHJpbmc1KSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzMpLmJ5KHN0cmluZzYpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dEUoXCJjcmVhdGVkXCIpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIiwgT3JkZXIuRGVzYykuTGltaXQ8b2JqZWN0PigxKS5JblYoKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5IYXMoXCJsYW5nXCIsIFwiamF2YVwiKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXRFKFwiY3JlYXRlZFwiKS5PcmRlcigpLkJ5KFwid2VpZ2h0XCIsIGdyZW1saW5nby5PcmRlci5EZXNjKS5MaW1pdCgxKS5JblYoKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkhhcyhcImxhbmdcIiwgXCJqYXZhXCIpKS5TZWxlY3QoXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dEUoXCJjcmVhdGVkXCIpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykubGltaXQoMSkuaW5WKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXRfZSgnY3JlYXRlZCcpLm9yZGVyKCkuYnkoJ3dlaWdodCcsIE9yZGVyLmRlc2MpLmxpbWl0KDEpLmluX3YoKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaGFzKCdsYW5nJywgJ2phdmEnKSkuc2VsZWN0KCdhJywgJ2InKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9ib3RoX2JfX2JfYm90aF9jWF9kZWR1cFhhX2JYX2J5WGxhYmVsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikuYm90aCgpLmFzKFwiY1wiKSkuZGVkdXAoXCJhXCIsIFwiYlwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuYm90aCgpLmFzKFwiY1wiKSkuZGVkdXAoXCJhXCIsIFwiYlwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLmJvdGgoKS5hcyhzdHJpbmcxKSwgX18uYXMoc3RyaW5nMSkuYm90aCgpLmFzKHN0cmluZzIpKS5kZWR1cChzdHJpbmcwLCBzdHJpbmcxKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5Cb3RoKCkuQXMoXCJiXCIpLCBfXy5BcyhcImJcIikuQm90aCgpLkFzKFwiY1wiKSkuRGVkdXAoXCJhXCIsIFwiYlwiKS5CeShULkxhYmVsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLkJvdGgoKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLkJvdGgoKS5BcyhcImNcIikpLkRlZHVwKFwiYVwiLCBcImJcIikuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5ib3RoKCkuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuYm90aCgpLmFzKFwiY1wiKSkuZGVkdXAoXCJhXCIsIFwiYlwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmJvdGgoKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5ib3RoKCkuYXMoXCJjXCIpKS5kZWR1cChcImFcIiwgXCJiXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuYm90aCgpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmJvdGgoKS5hcyhcImNcIikpLmRlZHVwKFwiYVwiLCBcImJcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykuYm90aCgpLmFzXygnYicpLCBfXy5hc18oJ2InKS5ib3RoKCkuYXNfKCdjJykpLmRlZHVwKCdhJywgJ2InKS5ieShULmxhYmVsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfY3JlYXRlZF9iX19iXzBjcmVhdGVkX2FYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmcyKS5pbihzdHJpbmcxKS5hcyhzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIiksIF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5JbihcImNyZWF0ZWRcIikuQXMoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbihcImNyZWF0ZWRcIikuYXMoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oXCJjcmVhdGVkXCIpLmFzKFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluXyhcImNyZWF0ZWRcIikuYXMoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2NyZWF0ZWQnKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaW5fKCdjcmVhdGVkJykuYXNfKCdhJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX21hdGNoWGFfb3V0X2NvdW50X2NfX29yWGFfa25vd3NfYl9fYl9pbl9jb3VudF9jX19hbmRfX2NfaXNYZ3RYMlhYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuY291bnQoKS5hcyhcImNcIiksX18ub3IoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikuaW4oKS5jb3VudCgpLmFzKFwiY1wiKS5hbmQoKS5hcyhcImNcIikuaXMoUC5ndCgyKSkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmNvdW50KCkuYXMoXCJjXCIpLCBfXy5vcihfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW4oKS5jb3VudCgpLmFzKFwiY1wiKS5hbmQoKS5hcyhcImNcIikuaXMoUC5ndCgyKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5jb3VudCgpLmFzKFwiY1wiKSwgX18ub3IoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKCkuY291bnQoKS5hcyhcImNcIikuYW5kKCkuYXMoXCJjXCIpLmlzKFAuZ3QoMikpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzEpLm1hdGNoKF9fLmFzKHN0cmluZzApLm91dCgpLmNvdW50KCkuYXMoc3RyaW5nMiksIF9fLm9yKF9fLmFzKHN0cmluZzApLm91dChzdHJpbmczKS5hcyhzdHJpbmcxKSwgX18uYXMoc3RyaW5nMSkuaW4oKS5jb3VudCgpLmFzKHN0cmluZzIpLmFuZCgpLmFzKHN0cmluZzIpLmlzKFAuZ3QobnVtYmVyMCkpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5PdXQoKS5Db3VudCgpLkFzKFwiY1wiKSwgX18uT3IoX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgX18uQXMoXCJiXCIpLkluKCkuQ291bnQoKS5BcyhcImNcIikuQW5kKCkuQXMoXCJjXCIpLklzKFAuR3QoMikpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dCgpLkNvdW50KCkuQXMoXCJjXCIpLCBncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImJcIikuSW4oKS5Db3VudCgpLkFzKFwiY1wiKS5BbmQoKS5BcyhcImNcIikuSXMoZ3JlbWxpbmdvLlAuR3QoMikpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5tYXRjaChfXy5hcyhcImFcIikub3V0KCkuY291bnQoKS5hcyhcImNcIiksIF9fLm9yKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5pbigpLmNvdW50KCkuYXMoXCJjXCIpLmFuZCgpLmFzKFwiY1wiKS5pcyhQLmd0KDIpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoKS5jb3VudCgpLmFzKFwiY1wiKSwgX18ub3IoX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLmluKCkuY291bnQoKS5hcyhcImNcIikuYW5kKCkuYXMoXCJjXCIpLmlzKFAuZ3QoMikpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikubWF0Y2goX18uYXMoXCJhXCIpLm91dCgpLmNvdW50KCkuYXMoXCJjXCIpLCBfXy5vcihfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikuaW5fKCkuY291bnQoKS5hcyhcImNcIikuYW5kKCkuYXMoXCJjXCIpLmlzKFAuZ3QoMikpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdiJykubWF0Y2goX18uYXNfKCdhJykub3V0KCkuY291bnQoKS5hc18oJ2MnKSwgX18ub3JfKF9fLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKSwgX18uYXNfKCdiJykuaW5fKCkuY291bnQoKS5hc18oJ2MnKS5hbmRfKCkuYXNfKCdjJykuaXNfKFAuZ3QoMikpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX2tub3dzX2NvdW50X2JYX3NlbGVjdFhiWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuY291bnQoKS5hcyhcImJcIikpLnNlbGVjdChcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuY291bnQoKS5hcyhcImJcIikpLnNlbGVjdChcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmNvdW50KCkuYXMoXCJiXCIpKS5zZWxlY3QoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuY291bnQoKS5hcyhzdHJpbmcyKSkuc2VsZWN0KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkNvdW50KCkuQXMoXCJiXCIpKS5TZWxlY3Q8b2JqZWN0PihcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5Db3VudCgpLkFzKFwiYlwiKSkuU2VsZWN0KFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikuY291bnQoKS5hcyhcImJcIikpLnNlbGVjdChcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5jb3VudCgpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmNvdW50KCkuYXMoXCJiXCIpKS5zZWxlY3QoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgna25vd3MnKS5jb3VudCgpLmFzXygnYicpKS5zZWxlY3QoJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfMHN1bmdCeV9iX19hXzB3cml0dGVuQnlfY19fYl93cml0dGVuQnlfZF9fY19zdW5nQnlfZF9fZF9oYXNYbmFtZV9HYXJjaWFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImNcIiksX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksX18uYXMoXCJjXCIpLm91dChcInN1bmdCeVwiKS5hcyhcImRcIiksX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLmFzKFwiY1wiKS5vdXQoXCJzdW5nQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLmFzKFwiY1wiKS5vdXQoXCJzdW5nQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLmluKHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmcwKS5pbihzdHJpbmczKS5hcyhzdHJpbmc0KSwgX18uYXMoc3RyaW5nMikub3V0KHN0cmluZzMpLmFzKHN0cmluZzUpLCBfXy5hcyhzdHJpbmc0KS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nNSksIF9fLmFzKHN0cmluZzUpLmhhcyhzdHJpbmc2LCBzdHJpbmc3KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuSW4oXCJzdW5nQnlcIikuQXMoXCJiXCIpLCBfXy5BcyhcImFcIikuSW4oXCJ3cml0dGVuQnlcIikuQXMoXCJjXCIpLCBfXy5BcyhcImJcIikuT3V0KFwid3JpdHRlbkJ5XCIpLkFzKFwiZFwiKSwgX18uQXMoXCJjXCIpLk91dChcInN1bmdCeVwiKS5BcyhcImRcIiksIF9fLkFzKFwiZFwiKS5IYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1hdGNoKGdyZW1saW5nby5UX18uQXMoXCJhXCIpLkluKFwic3VuZ0J5XCIpLkFzKFwiYlwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuSW4oXCJ3cml0dGVuQnlcIikuQXMoXCJjXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYlwiKS5PdXQoXCJ3cml0dGVuQnlcIikuQXMoXCJkXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiY1wiKS5PdXQoXCJzdW5nQnlcIikuQXMoXCJkXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiZFwiKS5IYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW4oXCJ3cml0dGVuQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSwgX18uYXMoXCJjXCIpLm91dChcInN1bmdCeVwiKS5hcyhcImRcIiksIF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLmFzKFwiY1wiKS5vdXQoXCJzdW5nQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbl8oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW5fKFwid3JpdHRlbkJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLmFzKFwiY1wiKS5vdXQoXCJzdW5nQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykuaW5fKCdzdW5nQnknKS5hc18oJ2InKSwgX18uYXNfKCdhJykuaW5fKCd3cml0dGVuQnknKS5hc18oJ2MnKSwgX18uYXNfKCdiJykub3V0KCd3cml0dGVuQnknKS5hc18oJ2QnKSwgX18uYXNfKCdjJykub3V0KCdzdW5nQnknKS5hc18oJ2QnKSwgX18uYXNfKCdkJykuaGFzKCduYW1lJywgJ0dhcmNpYScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfaGFzWHNvbmdfbmFtZV9zdW5zaGluZVhfX2FfbWFwWDBmb2xsb3dlZEJ5X3dlaWdodF9tZWFuWF9iX19hXzBmb2xsb3dlZEJ5X2NfX2NfZmlsdGVyWHdlaWdodF93aGVyZVhndGVYYlhYWF9vdXRWX2RYX3NlbGVjdFhkWF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJIRVJFIENPTUVTIFNVTlNISU5FXCIpLF9fLmFzKFwiYVwiKS5tYXAoX18uaW5FKFwiZm9sbG93ZWRCeVwiKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWVhbigpKS5hcyhcImJcIiksX18uYXMoXCJhXCIpLmluRShcImZvbGxvd2VkQnlcIikuYXMoXCJjXCIpLF9fLmFzKFwiY1wiKS5maWx0ZXIoX18udmFsdWVzKFwid2VpZ2h0XCIpLndoZXJlKFAuZ3RlKFwiYlwiKSkpLm91dFYoKS5hcyhcImRcIikpLnNlbGVjdChcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiSEVSRSBDT01FUyBTVU5TSElORVwiKSwgX18uYXMoXCJhXCIpLm1hcChfXy5pbkUoXCJmb2xsb3dlZEJ5XCIpLnZhbHVlcyhcIndlaWdodFwiKS5tZWFuKCkpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluRShcImZvbGxvd2VkQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImNcIikuZmlsdGVyKF9fLnZhbHVlcyhcIndlaWdodFwiKS53aGVyZShQLmd0ZShcImJcIikpKS5vdXRWKCkuYXMoXCJkXCIpKS5zZWxlY3QoXCJkXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJIRVJFIENPTUVTIFNVTlNISU5FXCIpLCBfXy5hcyhcImFcIikubWFwKF9fLmluRShcImZvbGxvd2VkQnlcIikudmFsdWVzKFwid2VpZ2h0XCIpLm1lYW4oKSkuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW5FKFwiZm9sbG93ZWRCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS5maWx0ZXIoX18udmFsdWVzKFwid2VpZ2h0XCIpLndoZXJlKFAuZ3RlKFwiYlwiKSkpLm91dFYoKS5hcyhcImRcIikpLnNlbGVjdChcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMyksIF9fLmFzKHN0cmluZzApLm1hcChfXy5pbkUoc3RyaW5nNCkudmFsdWVzKHN0cmluZzUpLm1lYW4oKSkuYXMoc3RyaW5nNiksIF9fLmFzKHN0cmluZzApLmluRShzdHJpbmc0KS5hcyhzdHJpbmc3KSwgX18uYXMoc3RyaW5nNykuZmlsdGVyKF9fLnZhbHVlcyhzdHJpbmc1KS53aGVyZShQLmd0ZShzdHJpbmc2KSkpLm91dFYoKS5hcyhzdHJpbmc4KSkuc2VsZWN0KHN0cmluZzgpLmJ5KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLkhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiSEVSRSBDT01FUyBTVU5TSElORVwiKSwgX18uQXMoXCJhXCIpLk1hcDxvYmplY3Q+KF9fLkluRShcImZvbGxvd2VkQnlcIikuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuTWVhbjxvYmplY3Q+KCkpLkFzKFwiYlwiKSwgX18uQXMoXCJhXCIpLkluRShcImZvbGxvd2VkQnlcIikuQXMoXCJjXCIpLCBfXy5BcyhcImNcIikuRmlsdGVyKF9fLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLldoZXJlKFAuR3RlKFwiYlwiKSkpLk91dFYoKS5BcyhcImRcIikpLlNlbGVjdDxvYmplY3Q+KFwiZFwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5IYXMoXCJzb25nXCIsIFwibmFtZVwiLCBcIkhFUkUgQ09NRVMgU1VOU0hJTkVcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLk1hcChncmVtbGluZ28uVF9fLkluRShcImZvbGxvd2VkQnlcIikuVmFsdWVzKFwid2VpZ2h0XCIpLk1lYW4oKSkuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbkUoXCJmb2xsb3dlZEJ5XCIpLkFzKFwiY1wiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImNcIikuRmlsdGVyKGdyZW1saW5nby5UX18uVmFsdWVzKFwid2VpZ2h0XCIpLldoZXJlKGdyZW1saW5nby5QLkd0ZShcImJcIikpKS5PdXRWKCkuQXMoXCJkXCIpKS5TZWxlY3QoXCJkXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJIRVJFIENPTUVTIFNVTlNISU5FXCIpLCBfXy5hcyhcImFcIikubWFwKF9fLmluRShcImZvbGxvd2VkQnlcIikudmFsdWVzKFwid2VpZ2h0XCIpLm1lYW4oKSkuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW5FKFwiZm9sbG93ZWRCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS5maWx0ZXIoX18udmFsdWVzKFwid2VpZ2h0XCIpLndoZXJlKFAuZ3RlKFwiYlwiKSkpLm91dFYoKS5hcyhcImRcIikpLnNlbGVjdChcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJIRVJFIENPTUVTIFNVTlNISU5FXCIpLCBfXy5hcyhcImFcIikubWFwKF9fLmluRShcImZvbGxvd2VkQnlcIikudmFsdWVzKFwid2VpZ2h0XCIpLm1lYW4oKSkuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW5FKFwiZm9sbG93ZWRCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS5maWx0ZXIoX18udmFsdWVzKFwid2VpZ2h0XCIpLndoZXJlKFAuZ3RlKFwiYlwiKSkpLm91dFYoKS5hcyhcImRcIikpLnNlbGVjdChcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJIRVJFIENPTUVTIFNVTlNISU5FXCIpLCBfXy5hcyhcImFcIikubWFwKF9fLmluRShcImZvbGxvd2VkQnlcIikudmFsdWVzKFwid2VpZ2h0XCIpLm1lYW4oKSkuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW5FKFwiZm9sbG93ZWRCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS5maWx0ZXIoX18udmFsdWVzKFwid2VpZ2h0XCIpLndoZXJlKFAuZ3RlKFwiYlwiKSkpLm91dFYoKS5hcyhcImRcIikpLnNlbGVjdChcImRcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLmFzXygnYScpLmhhcygnc29uZycsICduYW1lJywgJ0hFUkUgQ09NRVMgU1VOU0hJTkUnKSwgX18uYXNfKCdhJykubWFwKF9fLmluX2UoJ2ZvbGxvd2VkQnknKS52YWx1ZXMoJ3dlaWdodCcpLm1lYW4oKSkuYXNfKCdiJyksIF9fLmFzXygnYScpLmluX2UoJ2ZvbGxvd2VkQnknKS5hc18oJ2MnKSwgX18uYXNfKCdjJykuZmlsdGVyXyhfXy52YWx1ZXMoJ3dlaWdodCcpLndoZXJlKFAuZ3RlKCdiJykpKS5vdXRfdigpLmFzXygnZCcpKS5zZWxlY3QoJ2QnKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV8wc3VuZ0J5X2JfX2FfMHN1bmdCeV9jX19iX3dyaXR0ZW5CeV9kX19jX3dyaXR0ZW5CeV9lX19kX2hhc1huYW1lX0dlb3JnZV9IYXJpc29uWF9fZV9oYXNYbmFtZV9Cb2JfTWFybGV5WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSxfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJjXCIpLF9fLmFzKFwiYlwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJkXCIpLF9fLmFzKFwiY1wiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJlXCIpLF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2VvcmdlX0hhcnJpc29uXCIpLF9fLmFzKFwiZVwiKS5oYXMoXCJuYW1lXCIsIFwiQm9iX01hcmxleVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSwgX18uYXMoXCJjXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImVcIiksIF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2VvcmdlX0hhcnJpc29uXCIpLCBfXy5hcyhcImVcIikuaGFzKFwibmFtZVwiLCBcIkJvYl9NYXJsZXlcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImNcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZVwiKSwgX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJHZW9yZ2VfSGFycmlzb25cIiksIF9fLmFzKFwiZVwiKS5oYXMoXCJuYW1lXCIsIFwiQm9iX01hcmxleVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1hdGNoKF9fLmFzKHN0cmluZzApLmluKHN0cmluZzEpLmFzKHN0cmluZzIpLCBfXy5hcyhzdHJpbmcwKS5pbihzdHJpbmcxKS5hcyhzdHJpbmczKSwgX18uYXMoc3RyaW5nMikub3V0KHN0cmluZzQpLmFzKHN0cmluZzUpLCBfXy5hcyhzdHJpbmczKS5vdXQoc3RyaW5nNCkuYXMoc3RyaW5nNiksIF9fLmFzKHN0cmluZzUpLmhhcyhzdHJpbmc3LCBzdHJpbmc4KSwgX18uYXMoc3RyaW5nNikuaGFzKHN0cmluZzcsIHN0cmluZzkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5JbihcInN1bmdCeVwiKS5BcyhcImJcIiksIF9fLkFzKFwiYVwiKS5JbihcInN1bmdCeVwiKS5BcyhcImNcIiksIF9fLkFzKFwiYlwiKS5PdXQoXCJ3cml0dGVuQnlcIikuQXMoXCJkXCIpLCBfXy5BcyhcImNcIikuT3V0KFwid3JpdHRlbkJ5XCIpLkFzKFwiZVwiKSwgX18uQXMoXCJkXCIpLkhhcyhcIm5hbWVcIiwgXCJHZW9yZ2VfSGFycmlzb25cIiksIF9fLkFzKFwiZVwiKS5IYXMoXCJuYW1lXCIsIFwiQm9iX01hcmxleVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbihcInN1bmdCeVwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLkluKFwic3VuZ0J5XCIpLkFzKFwiY1wiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImJcIikuT3V0KFwid3JpdHRlbkJ5XCIpLkFzKFwiZFwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImNcIikuT3V0KFwid3JpdHRlbkJ5XCIpLkFzKFwiZVwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImRcIikuSGFzKFwibmFtZVwiLCBcIkdlb3JnZV9IYXJyaXNvblwiKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImVcIikuSGFzKFwibmFtZVwiLCBcIkJvYl9NYXJsZXlcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImNcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZVwiKSwgX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJHZW9yZ2VfSGFycmlzb25cIiksIF9fLmFzKFwiZVwiKS5oYXMoXCJuYW1lXCIsIFwiQm9iX01hcmxleVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJkXCIpLCBfXy5hcyhcImNcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZVwiKSwgX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJHZW9yZ2VfSGFycmlzb25cIiksIF9fLmFzKFwiZVwiKS5oYXMoXCJuYW1lXCIsIFwiQm9iX01hcmxleVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbl8oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW5fKFwic3VuZ0J5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLmFzKFwiY1wiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJlXCIpLCBfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcIkdlb3JnZV9IYXJyaXNvblwiKSwgX18uYXMoXCJlXCIpLmhhcyhcIm5hbWVcIiwgXCJCb2JfTWFybGV5XCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5pbl8oJ3N1bmdCeScpLmFzXygnYicpLCBfXy5hc18oJ2EnKS5pbl8oJ3N1bmdCeScpLmFzXygnYycpLCBfXy5hc18oJ2InKS5vdXQoJ3dyaXR0ZW5CeScpLmFzXygnZCcpLCBfXy5hc18oJ2MnKS5vdXQoJ3dyaXR0ZW5CeScpLmFzXygnZScpLCBfXy5hc18oJ2QnKS5oYXMoJ25hbWUnLCAnR2VvcmdlX0hhcnJpc29uJyksIF9fLmFzXygnZScpLmhhcygnbmFtZScsICdCb2JfTWFybGV5JykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9oYXNYbmFtZV9HYXJjaWFYX19hXzB3cml0dGVuQnlfYl9fYV8wc3VuZ0J5X2JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpLF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImJcIiksX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSwgX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksIF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMiksIF9fLmFzKHN0cmluZzApLmluKHN0cmluZzMpLmFzKHN0cmluZzQpLCBfXy5hcyhzdHJpbmcwKS5pbihzdHJpbmc1KS5hcyhzdHJpbmc0KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuSGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSwgX18uQXMoXCJhXCIpLkluKFwid3JpdHRlbkJ5XCIpLkFzKFwiYlwiKSwgX18uQXMoXCJhXCIpLkluKFwic3VuZ0J5XCIpLkFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5IYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbihcIndyaXR0ZW5CeVwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLkluKFwic3VuZ0J5XCIpLkFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksIF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSwgX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpLCBfXy5hcyhcImFcIikuaW5fKFwid3JpdHRlbkJ5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluXyhcInN1bmdCeVwiKS5hcyhcImJcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLmFzXygnYScpLmhhcygnbmFtZScsICdHYXJjaWEnKSwgX18uYXNfKCdhJykuaW5fKCd3cml0dGVuQnknKS5hc18oJ2InKSwgX18uYXNfKCdhJykuaW5fKCdzdW5nQnknKS5hc18oJ2InKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb25nc1hfbWF0Y2hYYV9uYW1lX2JfX2FfcGVyZm9ybWFuY2VzX2NYX3NlbGVjdFhiX2NYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5tYXRjaChfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImJcIiksX18uYXMoXCJhXCIpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKS5hcyhcImNcIikpLnNlbGVjdChcImJcIiwgXCJjXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikubWF0Y2goX18uYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwicGVyZm9ybWFuY2VzXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiYlwiLCBcImNcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikubWF0Y2goX18uYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwicGVyZm9ybWFuY2VzXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiYlwiLCBcImNcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkubWF0Y2goX18uYXMoc3RyaW5nMSkudmFsdWVzKHN0cmluZzIpLmFzKHN0cmluZzMpLCBfXy5hcyhzdHJpbmcxKS52YWx1ZXMoc3RyaW5nNCkuYXMoc3RyaW5nNSkpLnNlbGVjdChzdHJpbmczLCBzdHJpbmc1KS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29uZ1wiKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQXMoXCJiXCIpLCBfXy5BcyhcImFcIikuVmFsdWVzPG9iamVjdD4oXCJwZXJmb3JtYW5jZXNcIikuQXMoXCJjXCIpKS5TZWxlY3Q8b2JqZWN0PihcImJcIiwgXCJjXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvbmdcIikuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuVmFsdWVzKFwibmFtZVwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJhXCIpLlZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKS5BcyhcImNcIikpLlNlbGVjdChcImJcIiwgXCJjXCIpLkNvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb25nXCIpLm1hdGNoKF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLnZhbHVlcyhcInBlcmZvcm1hbmNlc1wiKS5hcyhcImNcIikpLnNlbGVjdChcImJcIiwgXCJjXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5tYXRjaChfXy5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS52YWx1ZXMoXCJwZXJmb3JtYW5jZXNcIikuYXMoXCJjXCIpKS5zZWxlY3QoXCJiXCIsIFwiY1wiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikubWF0Y2goX18uYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikudmFsdWVzKFwicGVyZm9ybWFuY2VzXCIpLmFzKFwiY1wiKSkuc2VsZWN0KFwiYlwiLCBcImNcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvbmcnKS5tYXRjaChfXy5hc18oJ2EnKS52YWx1ZXMoJ25hbWUnKS5hc18oJ2InKSwgX18uYXNfKCdhJykudmFsdWVzKCdwZXJmb3JtYW5jZXMnKS5hc18oJ2MnKSkuc2VsZWN0KCdiJywgJ2MnKS5jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9mb2xsb3dlZEJ5X2NvdW50X2lzWGd0WDEwWFhfYl9fYV8wZm9sbG93ZWRCeV9jb3VudF9pc1hndFgxMFhYX2JYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmNvdW50KCkuaXMoUC5ndCgxMCkpLmFzKFwiYlwiKSxfXy5hcyhcImFcIikuaW4oXCJmb2xsb3dlZEJ5XCIpLmNvdW50KCkuaXMoUC5ndCgxMCkpLmFzKFwiYlwiKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmNvdW50KCkuaXMoUC5ndCgxMCkpLmFzKFwiYlwiKSwgX18uYXMoXCJhXCIpLmluKFwiZm9sbG93ZWRCeVwiKS5jb3VudCgpLmlzKFAuZ3QoMTApKS5hcyhcImJcIikpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImZvbGxvd2VkQnlcIikuY291bnQoKS5pcyhQLmd0KDEwKSkuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW4oXCJmb2xsb3dlZEJ5XCIpLmNvdW50KCkuaXMoUC5ndCgxMCkpLmFzKFwiYlwiKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmNvdW50KCkuaXMoUC5ndChudW1iZXIwKSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzApLmluKHN0cmluZzEpLmNvdW50KCkuaXMoUC5ndChudW1iZXIwKSkuYXMoc3RyaW5nMikpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWF0Y2g8b2JqZWN0PihfXy5BcyhcImFcIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5Db3VudCgpLklzKFAuR3QoMTApKS5BcyhcImJcIiksIF9fLkFzKFwiYVwiKS5JbihcImZvbGxvd2VkQnlcIikuQ291bnQoKS5JcyhQLkd0KDEwKSkuQXMoXCJiXCIpKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5Db3VudCgpLklzKGdyZW1saW5nby5QLkd0KDEwKSkuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbihcImZvbGxvd2VkQnlcIikuQ291bnQoKS5JcyhncmVtbGluZ28uUC5HdCgxMCkpLkFzKFwiYlwiKSkuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5jb3VudCgpLmlzKFAuZ3QoMTApKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcImZvbGxvd2VkQnlcIikuY291bnQoKS5pcyhQLmd0KDEwKSkuYXMoXCJiXCIpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5jb3VudCgpLmlzKFAuZ3QoMTApKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcImZvbGxvd2VkQnlcIikuY291bnQoKS5pcyhQLmd0KDEwKSkuYXMoXCJiXCIpKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5jb3VudCgpLmlzKFAuZ3QoMTApKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbl8oXCJmb2xsb3dlZEJ5XCIpLmNvdW50KCkuaXMoUC5ndCgxMCkpLmFzKFwiYlwiKSkuY291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5vdXQoJ2ZvbGxvd2VkQnknKS5jb3VudCgpLmlzXyhQLmd0KDEwKSkuYXNfKCdiJyksIF9fLmFzXygnYScpLmluXygnZm9sbG93ZWRCeScpLmNvdW50KCkuaXNfKFAuZ3QoMTApKS5hc18oJ2InKSkuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hdGNoWGFfMHN1bmdCeV9iX19hXzB3cml0dGVuQnlfY19fYl93cml0dGVuQnlfZFhfd2hlcmVYY19zdW5nQnlfZFhfd2hlcmVYZF9oYXNYbmFtZV9HYXJjaWFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImNcIiksX18uYXMoXCJiXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIikpLndoZXJlKF9fLmFzKFwiY1wiKS5vdXQoXCJzdW5nQnlcIikuYXMoXCJkXCIpKS53aGVyZShfXy5hcyhcImRcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW4oXCJ3cml0dGVuQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSkud2hlcmUoX18uYXMoXCJjXCIpLm91dChcInN1bmdCeVwiKS5hcyhcImRcIikpLndoZXJlKF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW4oXCJ3cml0dGVuQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSkud2hlcmUoX18uYXMoXCJjXCIpLm91dChcInN1bmdCeVwiKS5hcyhcImRcIikpLndoZXJlKF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0Y2goX18uYXMoc3RyaW5nMCkuaW4oc3RyaW5nMSkuYXMoc3RyaW5nMiksIF9fLmFzKHN0cmluZzApLmluKHN0cmluZzMpLmFzKHN0cmluZzQpLCBfXy5hcyhzdHJpbmcyKS5vdXQoc3RyaW5nMykuYXMoc3RyaW5nNSkpLndoZXJlKF9fLmFzKHN0cmluZzQpLm91dChzdHJpbmcxKS5hcyhzdHJpbmc1KSkud2hlcmUoX18uYXMoc3RyaW5nNSkuaGFzKHN0cmluZzYsIHN0cmluZzcpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5JbihcInN1bmdCeVwiKS5BcyhcImJcIiksIF9fLkFzKFwiYVwiKS5JbihcIndyaXR0ZW5CeVwiKS5BcyhcImNcIiksIF9fLkFzKFwiYlwiKS5PdXQoXCJ3cml0dGVuQnlcIikuQXMoXCJkXCIpKS5XaGVyZShfXy5BcyhcImNcIikuT3V0KFwic3VuZ0J5XCIpLkFzKFwiZFwiKSkuV2hlcmUoX18uQXMoXCJkXCIpLkhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0Y2goZ3JlbWxpbmdvLlRfXy5BcyhcImFcIikuSW4oXCJzdW5nQnlcIikuQXMoXCJiXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbihcIndyaXR0ZW5CeVwiKS5BcyhcImNcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcIndyaXR0ZW5CeVwiKS5BcyhcImRcIikpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJjXCIpLk91dChcInN1bmdCeVwiKS5BcyhcImRcIikpLldoZXJlKGdyZW1saW5nby5UX18uQXMoXCJkXCIpLkhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJkXCIpKS53aGVyZShfXy5hcyhcImNcIikub3V0KFwic3VuZ0J5XCIpLmFzKFwiZFwiKSkud2hlcmUoX18uYXMoXCJkXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImFcIikuaW4oXCJ3cml0dGVuQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSkud2hlcmUoX18uYXMoXCJjXCIpLm91dChcInN1bmdCeVwiKS5hcyhcImRcIikpLndoZXJlKF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmluXyhcInN1bmdCeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYVwiKS5pbl8oXCJ3cml0dGVuQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImJcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSkud2hlcmUoX18uYXMoXCJjXCIpLm91dChcInN1bmdCeVwiKS5hcyhcImRcIikpLndoZXJlKF9fLmFzKFwiZFwiKS5oYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tYXRjaChfXy5hc18oJ2EnKS5pbl8oJ3N1bmdCeScpLmFzXygnYicpLCBfXy5hc18oJ2EnKS5pbl8oJ3dyaXR0ZW5CeScpLmFzXygnYycpLCBfXy5hc18oJ2InKS5vdXQoJ3dyaXR0ZW5CeScpLmFzXygnZCcpKS53aGVyZShfXy5hc18oJ2MnKS5vdXQoJ3N1bmdCeScpLmFzXygnZCcpKS53aGVyZShfXy5hc18oJ2QnKS5oYXMoJ25hbWUnLCAnR2FyY2lhJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0Y2hYYV9oYXNYbmFtZV9HYXJjaWFYX19hXzB3cml0dGVuQnlfYl9fYl9mb2xsb3dlZEJ5X2NfX2Nfd3JpdHRlbkJ5X2RfX3doZXJlWGRfbmVxWGFYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiYlwiKSxfXy5hcyhcImJcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hcyhcImNcIiksX18uYXMoXCJjXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksX18ud2hlcmUoXCJkXCIsIFAubmVxKFwiYVwiKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksIF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJjXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLndoZXJlKFwiZFwiLCBQLm5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikuaGFzKFwibmFtZVwiLCBcIkdhcmNpYVwiKSwgX18uYXMoXCJhXCIpLmluKFwid3JpdHRlbkJ5XCIpLmFzKFwiYlwiKSwgX18uYXMoXCJiXCIpLm91dChcImZvbGxvd2VkQnlcIikuYXMoXCJjXCIpLCBfXy5hcyhcImNcIikub3V0KFwid3JpdHRlbkJ5XCIpLmFzKFwiZFwiKSwgX18ud2hlcmUoXCJkXCIsIFAubmVxKFwiYVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMiksIF9fLmFzKHN0cmluZzApLmluKHN0cmluZzMpLmFzKHN0cmluZzQpLCBfXy5hcyhzdHJpbmc0KS5vdXQoc3RyaW5nNSkuYXMoc3RyaW5nNiksIF9fLmFzKHN0cmluZzYpLm91dChzdHJpbmczKS5hcyhzdHJpbmc3KSwgX18ud2hlcmUoc3RyaW5nNywgUC5uZXEoc3RyaW5nMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRjaDxvYmplY3Q+KF9fLkFzKFwiYVwiKS5IYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpLCBfXy5BcyhcImFcIikuSW4oXCJ3cml0dGVuQnlcIikuQXMoXCJiXCIpLCBfXy5BcyhcImJcIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5BcyhcImNcIiksIF9fLkFzKFwiY1wiKS5PdXQoXCJ3cml0dGVuQnlcIikuQXMoXCJkXCIpLCBfXy5XaGVyZShcImRcIiwgUC5OZXEoXCJhXCIpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5IYXMoXCJuYW1lXCIsIFwiR2FyY2lhXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5JbihcIndyaXR0ZW5CeVwiKS5BcyhcImJcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpLk91dChcImZvbGxvd2VkQnlcIikuQXMoXCJjXCIpLCBncmVtbGluZ28uVF9fLkFzKFwiY1wiKS5PdXQoXCJ3cml0dGVuQnlcIikuQXMoXCJkXCIpLCBncmVtbGluZ28uVF9fLldoZXJlKFwiZFwiLCBncmVtbGluZ28uUC5OZXEoXCJhXCIpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksIF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJjXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLndoZXJlKFwiZFwiLCBQLm5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksIF9fLmFzKFwiYVwiKS5pbihcIndyaXR0ZW5CeVwiKS5hcyhcImJcIiksIF9fLmFzKFwiYlwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmFzKFwiY1wiKSwgX18uYXMoXCJjXCIpLm91dChcIndyaXR0ZW5CeVwiKS5hcyhcImRcIiksIF9fLndoZXJlKFwiZFwiLCBQLm5lcShcImFcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJHYXJjaWFcIiksIF9fLmFzKFwiYVwiKS5pbl8oXCJ3cml0dGVuQnlcIikuYXMoXCJiXCIpLCBfXy5hcyhcImJcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5hcyhcImNcIiksIF9fLmFzKFwiY1wiKS5vdXQoXCJ3cml0dGVuQnlcIikuYXMoXCJkXCIpLCBfXy53aGVyZShcImRcIiwgUC5uZXEoXCJhXCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWF0Y2goX18uYXNfKCdhJykuaGFzKCduYW1lJywgJ0dhcmNpYScpLCBfXy5hc18oJ2EnKS5pbl8oJ3dyaXR0ZW5CeScpLmFzXygnYicpLCBfXy5hc18oJ2InKS5vdXQoJ2ZvbGxvd2VkQnknKS5hc18oJ2MnKSwgX18uYXNfKCdjJykub3V0KCd3cml0dGVuQnknKS5hc18oJ2QnKSwgX18ud2hlcmUoJ2QnLCBQLm5lcSgnYScpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tYXRjaFhhX291dFhrbm93c1hfbmFtZV9iWF9pZGVudGl0eSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImJcIikpLmlkZW50aXR5KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImJcIikpLmlkZW50aXR5KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpKS5pZGVudGl0eSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5tYXRjaChfXy5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkudmFsdWVzKHN0cmluZzIpLmFzKHN0cmluZzMpKS5pZGVudGl0eSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1hdGNoPG9iamVjdD4oX18uQXMoXCJhXCIpLk91dChcImtub3dzXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImJcIikpLklkZW50aXR5KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NYXRjaChncmVtbGluZ28uVF9fLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5WYWx1ZXMoXCJuYW1lXCIpLkFzKFwiYlwiKSkuSWRlbnRpdHkoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRjaChfXy5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImJcIikpLmlkZW50aXR5KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hdGNoKF9fLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYlwiKSkuaWRlbnRpdHkoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWF0Y2goX18uYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJiXCIpKS5pZGVudGl0eSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGNoKF9fLmFzXygnYScpLm91dCgna25vd3MnKS52YWx1ZXMoJ25hbWUnKS5hc18oJ2InKSkuaWRlbnRpdHkoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dEVfbWF0aFgwX21pbnVzX2l0WF9ieVh3ZWlnaHRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dEUoKS5tYXRoKFwiMC1fXCIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0RSgpLm1hdGgoXCIwLV9cIikuYnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RSgpLm1hdGgoXCIwLV9cIikuYnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dEUoKS5tYXRoKHN0cmluZzApLmJ5KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dEUoKS5NYXRoKFwiMC1fXCIpLkJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0RSgpLk1hdGgoXCIwLV9cIikuQnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0RSgpLm1hdGgoXCIwLV9cIikuYnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dEUoKS5tYXRoKFwiMC1fXCIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKCkubWF0aChcIjAtX1wiKS5ieShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXRfZSgpLm1hdGgoJzAtXycpLmJ5KCd3ZWlnaHQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hhZ2VYX3ZhbHVlTWFwX21hdGhYaXRfcGx1c19pdFhieVhzZWxlY3RYYWdlWF91bmZvbGRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikudmFsdWVNYXAoKS5tYXRoKFwiXytfXCIpLmJ5KF9fLnNlbGVjdChcImFnZVwiKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikudmFsdWVNYXAoKS5tYXRoKFwiXytfXCIpLmJ5KF9fLnNlbGVjdChcImFnZVwiKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnZhbHVlTWFwKCkubWF0aChcIl8rX1wiKS5ieShfXy5zZWxlY3QoXCJhZ2VcIikudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCkudmFsdWVNYXAoKS5tYXRoKHN0cmluZzEpLmJ5KF9fLnNlbGVjdChzdHJpbmcwKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLk1hdGgoXCJfK19cIikuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJhZ2VcIikuVW5mb2xkPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIikuVmFsdWVNYXAoKS5NYXRoKFwiXytfXCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwiYWdlXCIpLlVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikudmFsdWVNYXAoKS5tYXRoKFwiXytfXCIpLmJ5KF9fLnNlbGVjdChcImFnZVwiKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiKS52YWx1ZU1hcCgpLm1hdGgoXCJfK19cIikuYnkoX18uc2VsZWN0KFwiYWdlXCIpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnZhbHVlTWFwKCkubWF0aChcIl8rX1wiKS5ieShfXy5zZWxlY3QoXCJhZ2VcIikudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJykudmFsdWVfbWFwKCkubWF0aCgnXytfJykuYnkoX18uc2VsZWN0KCdhZ2UnKS51bmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX21hdGhYYV9wbHVzX2JYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5tYXRoKFwiYSArIGJcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLm1hdGgoXCJhICsgYlwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLm1hdGgoXCJhICsgYlwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLm1hdGgoc3RyaW5nMykuYnkoc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKS5NYXRoKFwiYSArIGJcIikuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLk1hdGgoXCJhICsgYlwiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLm1hdGgoXCJhICsgYlwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5tYXRoKFwiYSArIGJcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubWF0aChcImEgKyBiXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKS5tYXRoKCdhICsgYicpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFh4XzEwMFhfVl9hZ2VfbWF0aFhfX3BsdXNfeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcInhcIiwgMTAwaSkuVigpLnZhbHVlcyhcImFnZVwiKS5tYXRoKFwiXyArIHhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDBpKS5WKCkudmFsdWVzKFwiYWdlXCIpLm1hdGgoXCJfICsgeFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDBpKS5WKCkudmFsdWVzKFwiYWdlXCIpLm1hdGgoXCJfICsgeFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBpbnRlZ2VyMCkuVigpLnZhbHVlcyhzdHJpbmcxKS5tYXRoKHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJ4XCIsIDEwMCkuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk1hdGgoXCJfICsgeFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJ4XCIsIGludDMyKDEwMCkpLlYoKS5WYWx1ZXMoXCJhZ2VcIikuTWF0aChcIl8gKyB4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJ4XCIsIDEwMGkpLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwieFwiLCAxMDApLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF0aChcIl8gKyB4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgneCcsIDEwMCkuVigpLnZhbHVlcygnYWdlJykubWF0aCgnXyArIHgnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9tYXRoWGJfcGx1c19hWF9ieVhpblhjcmVhdGVkWF9jb3VudFhfYnlYYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikubWF0aChcImIgKyBhXCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5tYXRoKFwiYiArIGFcIikuYnkoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5tYXRoKFwiYiArIGFcIikuYnkoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMikubWF0aChzdHJpbmczKS5ieShfXy5pbihzdHJpbmcxKS5jb3VudCgpKS5ieShzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwiY3JlYXRlZFwiKS5BcyhcImJcIikuTWF0aChcImIgKyBhXCIpLkJ5KF9fLkluKFwiY3JlYXRlZFwiKS5Db3VudCgpKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5NYXRoKFwiYiArIGFcIikuQnkoZ3JlbWxpbmdvLlRfXy5JbihcImNyZWF0ZWRcIikuQ291bnQoKSkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLm1hdGgoXCJiICsgYVwiKS5ieShfXy5pbihcImNyZWF0ZWRcIikuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5tYXRoKFwiYiArIGFcIikuYnkoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikubWF0aChcImIgKyBhXCIpLmJ5KF9fLmluXyhcImNyZWF0ZWRcIikuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCdjcmVhdGVkJykuYXNfKCdiJykubWF0aCgnYiArIGEnKS5ieShfXy5pbl8oJ2NyZWF0ZWQnKS5jb3VudCgpKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMVhfaW5qZWN0WDFYX3JlcGVhdFhzYWNrWHN1bVhfYnlYY29uc3RhbnRYMVhYWF90aW1lc1g1WF9lbWl0X21hdGhYc2luX19YX2J5WHNhY2tYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMSkuaW5qZWN0KDEpLnJlcGVhdChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoX18uY29uc3RhbnQoMSkpKS50aW1lcyg1KS5lbWl0KCkubWF0aChcInNpbiBfXCIpLmJ5KF9fLnNhY2soKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KF9fLmNvbnN0YW50KDEpKSkudGltZXMoNSkuZW1pdCgpLm1hdGgoXCJzaW4gX1wiKS5ieShfXy5zYWNrKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMSkuaW5qZWN0KDEpLnJlcGVhdChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoX18uY29uc3RhbnQoMSkpKS50aW1lcyg1KS5lbWl0KCkubWF0aChcInNpbiBfXCIpLmJ5KF9fLnNhY2soKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2sobnVtYmVyMCkuaW5qZWN0KG51bWJlcjApLnJlcGVhdChfXy5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoX18uY29uc3RhbnQobnVtYmVyMCkpKS50aW1lcyhudW1iZXIxKS5lbWl0KCkubWF0aChzdHJpbmcwKS5ieShfXy5zYWNrKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soMSkuSW5qZWN0PG9iamVjdD4oMSkuUmVwZWF0KF9fLlNhY2soT3BlcmF0b3IuU3VtKS5CeShfXy5Db25zdGFudDxvYmplY3Q+KDEpKSkuVGltZXMoNSkuRW1pdCgpLk1hdGgoXCJzaW4gX1wiKS5CeShfXy5TYWNrPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKDEpLkluamVjdCgxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5TdW0pLkJ5KGdyZW1saW5nby5UX18uQ29uc3RhbnQoMSkpKS5UaW1lcyg1KS5FbWl0KCkuTWF0aChcInNpbiBfXCIpLkJ5KGdyZW1saW5nby5UX18uU2FjaygpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KF9fLmNvbnN0YW50KDEpKSkudGltZXMoNSkuZW1pdCgpLm1hdGgoXCJzaW4gX1wiKS5ieShfXy5zYWNrKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KF9fLmNvbnN0YW50KDEpKSkudGltZXMoNSkuZW1pdCgpLm1hdGgoXCJzaW4gX1wiKS5ieShfXy5zYWNrKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW0pLmJ5KF9fLmNvbnN0YW50KDEpKSkudGltZXMoNSkuZW1pdCgpLm1hdGgoXCJzaW4gX1wiKS5ieShfXy5zYWNrKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDEpLmluamVjdCgxKS5yZXBlYXQoX18uc2FjayhPcGVyYXRvci5zdW1fKS5ieShfXy5jb25zdGFudCgxKSkpLnRpbWVzKDUpLmVtaXQoKS5tYXRoKCdzaW4gXycpLmJ5KF9fLnNhY2soKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9qZWN0WGFfYl9jWF9ieVhib3RoRV93ZWlnaHRfc3VtWF9ieVhib3RoRV9jb3VudFhfYnlYbmFtZVhfb3JkZXJfYnlYbWF0aFhhX2Rpdl9iWF9kZXNjWF9zZWxlY3RYY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvamVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5ieShcIm5hbWVcIikub3JkZXIoKS5ieShfXy5tYXRoKFwiYSAvIGJcIiksIE9yZGVyLmRlc2MpLnNlbGVjdChcImNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJ5KFwibmFtZVwiKS5vcmRlcigpLmJ5KF9fLm1hdGgoXCJhIC8gYlwiKSwgT3JkZXIuZGVzYykuc2VsZWN0KFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJ5KFwibmFtZVwiKS5vcmRlcigpLmJ5KF9fLm1hdGgoXCJhIC8gYlwiKSwgT3JkZXIuZGVzYykuc2VsZWN0KFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvamVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhzdHJpbmczKS5zdW0oKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5ieShzdHJpbmc0KS5vcmRlcigpLmJ5KF9fLm1hdGgoc3RyaW5nNSksIE9yZGVyLmRlc2MpLnNlbGVjdChzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9qZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoX18uQm90aEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5TdW08b2JqZWN0PigpKS5CeShfXy5Cb3RoRSgpLkNvdW50KCkpLkJ5KFwibmFtZVwiKS5PcmRlcigpLkJ5KF9fLk1hdGgoXCJhIC8gYlwiKSwgT3JkZXIuRGVzYykuU2VsZWN0PG9iamVjdD4oXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvamVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLlN1bSgpKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuQ291bnQoKSkuQnkoXCJuYW1lXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLlRfXy5NYXRoKFwiYSAvIGJcIiksIGdyZW1saW5nby5PcmRlci5EZXNjKS5TZWxlY3QoXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb2plY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYnkoXCJuYW1lXCIpLm9yZGVyKCkuYnkoX18ubWF0aChcImEgLyBiXCIpLCBPcmRlci5kZXNjKS5zZWxlY3QoXCJjXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIiwgXCJjXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJ5KFwibmFtZVwiKS5vcmRlcigpLmJ5KF9fLm1hdGgoXCJhIC8gYlwiKSwgT3JkZXIuZGVzYykuc2VsZWN0KFwiY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvamVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5ieShcIm5hbWVcIikub3JkZXIoKS5ieShfXy5tYXRoKFwiYSAvIGJcIiksIE9yZGVyLmRlc2MpLnNlbGVjdChcImNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvamVjdCgnYScsICdiJywgJ2MnKS5ieShfXy5ib3RoX2UoKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkuYnkoX18uYm90aF9lKCkuY291bnQoKSkuYnkoJ25hbWUnKS5vcmRlcigpLmJ5KF9fLm1hdGgoJ2EgLyBiJyksIE9yZGVyLmRlc2MpLnNlbGVjdCgnYycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWF0aFhpdF9wbHVzX2l0WGJ5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWF0aChcIl8rX1wiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hdGgoXCJfK19cIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWF0aChcIl8rX1wiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWF0aChzdHJpbmcwKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXRoKFwiXytfXCIpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWF0aChcIl8rX1wiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tYXRoKFwiXytfXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tYXRoKFwiXytfXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tYXRoKFwiXytfXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1hdGgoJ18rXycpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwX21hdGhYaXRfcGx1c19pdFhieVhzZWxlY3RYYWdlWF91bmZvbGRYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLm1hdGgoXCJfK19cIikuYnkoX18uc2VsZWN0KFwiYWdlXCIpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKCkubWF0aChcIl8rX1wiKS5ieShfXy5zZWxlY3QoXCJhZ2VcIikudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkubWF0aChcIl8rX1wiKS5ieShfXy5zZWxlY3QoXCJhZ2VcIikudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcCgpLm1hdGgoc3RyaW5nMCkuYnkoX18uc2VsZWN0KHN0cmluZzEpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5NYXRoKFwiXytfXCIpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwiYWdlXCIpLlVuZm9sZDxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5NYXRoKFwiXytfXCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwiYWdlXCIpLlVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcCgpLm1hdGgoXCJfK19cIikuYnkoX18uc2VsZWN0KFwiYWdlXCIpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoKS5tYXRoKFwiXytfXCIpLmJ5KF9fLnNlbGVjdChcImFnZVwiKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkubWF0aChcIl8rX1wiKS5ieShfXy5zZWxlY3QoXCJhZ2VcIikudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgpLm1hdGgoJ18rXycpLmJ5KF9fLnNlbGVjdCgnYWdlJykudW5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0RV9hc1hleHBlY3RlZFdlaWdodFhfbWF0aFhleHBlY3RlZFdlaWdodFBsdXNPbmVYYnlYd2VpZ2h0WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiZXhwZWN0ZWRXZWlnaHRcIikubWF0aChcImV4cGVjdGVkV2VpZ2h0ICsgMVwiKS5ieShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKCkuYXMoXCJleHBlY3RlZFdlaWdodFwiKS5tYXRoKFwiZXhwZWN0ZWRXZWlnaHQgKyAxXCIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKCkuYXMoXCJleHBlY3RlZFdlaWdodFwiKS5tYXRoKFwiZXhwZWN0ZWRXZWlnaHQgKyAxXCIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKHN0cmluZzApLm1hdGgoc3RyaW5nMSkuYnkoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoKS5BcyhcImV4cGVjdGVkV2VpZ2h0XCIpLk1hdGgoXCJleHBlY3RlZFdlaWdodCArIDFcIikuQnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RSgpLkFzKFwiZXhwZWN0ZWRXZWlnaHRcIikuTWF0aChcImV4cGVjdGVkV2VpZ2h0ICsgMVwiKS5CeShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiZXhwZWN0ZWRXZWlnaHRcIikubWF0aChcImV4cGVjdGVkV2VpZ2h0ICsgMVwiKS5ieShcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImV4cGVjdGVkV2VpZ2h0XCIpLm1hdGgoXCJleHBlY3RlZFdlaWdodCArIDFcIikuYnkoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKCkuYXMoXCJleHBlY3RlZFdlaWdodFwiKS5tYXRoKFwiZXhwZWN0ZWRXZWlnaHQgKyAxXCIpLmJ5KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgpLmFzXygnZXhwZWN0ZWRXZWlnaHQnKS5tYXRoKCdleHBlY3RlZFdlaWdodCArIDEnKS5ieSgnd2VpZ2h0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2VfbWF4IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk1heCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5tYXhfKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb29fbWF4IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImZvb1wiKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZm9vXCIpLk1heCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdmb28nKS5tYXhfKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9uYW1lX21heCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk1heDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLk1heCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykubWF4XygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdlX2ZvbGRfbWF4WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuRm9sZCgpLk1heDxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImFnZVwiKS5Gb2xkKCkuTWF4KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmZvbGQoKS5tYXhfKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF9tYXhYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5NYXg8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikuTWF4KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykubWF4XyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21heFhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikuTWF4PG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKS5NYXgoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKS5jYXAoJ2EnKS5tYXhfKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWF4IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLk1heCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpLnVuZm9sZCgpLm1heF8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21heCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5NYXg8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5NYXgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKS5jYXAoJ2EnKS51bmZvbGQoKS5tYXhfKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfbWF4WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXA8b2JqZWN0PihcImFcIikuTWF4PG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXAoXCJhXCIpLk1heChncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2ZvbycpLmNhcCgnYScpLm1heF8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9tYXhYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLk1heDxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcChcImFcIikuTWF4KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykubWF4XyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21heCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuTWF4PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5NYXgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdmb28nKS5jYXAoJ2EnKS51bmZvbGQoKS5tYXhfKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9tYXgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkudW5mb2xkKCkubWF4KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuTWF4PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcChcImFcIikuVW5mb2xkKCkuTWF4KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykudW5mb2xkKCkubWF4XygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9vX2ZvbGRfbWF4WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJmb29cIikuRm9sZCgpLk1heDxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImZvb1wiKS5Gb2xkKCkuTWF4KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ZvbycpLmZvbGQoKS5tYXhfKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX25hbWVfZm9sZF9tYXhYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLk1heDxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLk1heChncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLm1heF8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGJvdGhYX3RpbWVzWDVYX2FnZV9tYXgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSkudmFsdWVzKFwiYWdlXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSkudmFsdWVzKFwiYWdlXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpLnZhbHVlcyhcImFnZVwiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMobnVtYmVyMCkudmFsdWVzKHN0cmluZzApLm1heCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5Cb3RoKCkpLlRpbWVzKDUpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk1heDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkpLlRpbWVzKDUpLlZhbHVlcyhcImFnZVwiKS5NYXgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoXCJhZ2VcIikubWF4KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpLnZhbHVlcyhcImFnZVwiKS5tYXgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSkudmFsdWVzKFwiYWdlXCIpLm1heCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpLnZhbHVlcygnYWdlJykubWF4XygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9tYXhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWF4KCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5tYXgoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5tYXgoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKCkuYnkoc3RyaW5nMSkuYnkoX18uYm90aEUoKS52YWx1ZXMoc3RyaW5nMikubWF4KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoXCJuYW1lXCIpLkJ5KF9fLkJvdGhFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuTWF4PG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLkdyb3VwKCkuQnkoXCJuYW1lXCIpLkJ5KGdyZW1saW5nby5UX18uQm90aEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuTWF4KCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWF4KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm1heCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5tYXgoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmdyb3VwKCkuYnkoJ25hbWUnKS5ieShfXy5ib3RoX2UoKS52YWx1ZXMoJ3dlaWdodCcpLm1heF8oKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF92YWx1ZXNYYWdlWF9tYXhYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS52YWx1ZXMoc3RyaW5nMCkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuTWF4PG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlZhbHVlcyhcImFnZVwiKS5NYXgoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS52YWx1ZXMoJ2FnZScpLm1heF8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYdW5pb25YdmFsdWVzWGFnZVhfb3V0RV92YWx1ZXNYd2VpZ2h0WFhfZm9sZFhfbWF4WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbCh1bmlvbih2YWx1ZXMoXCJhZ2VcIiksIG91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikpLmZvbGQoKSkubWF4KGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoc3RyaW5nMCksIF9fLm91dEUoKS52YWx1ZXMoc3RyaW5nMSkpLmZvbGQoKSkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLlVuaW9uPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIiksIF9fLk91dEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKSkuRm9sZCgpKS5NYXg8b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLlVuaW9uKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLCBncmVtbGluZ28uVF9fLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikpLkZvbGQoKSkuTWF4KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLm1heChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5tYXgoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikpLmZvbGQoKSkubWF4KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoJ2FnZScpLCBfXy5vdXRfZSgpLnZhbHVlcygnd2VpZ2h0JykpLmZvbGQoKSkubWF4XyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2VfbWVhbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWVhbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk1lYW48b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk1lYW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWVhbigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykubWVhbigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9vX21lYW4iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImZvb1wiKS5NZWFuPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImZvb1wiKS5NZWFuKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ZvbycpLm1lYW4oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZV9mb2xkX21lYW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuRm9sZCgpLk1lYW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpLk1lYW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuZm9sZCgpLm1lYW4oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9vX2ZvbGRfbWVhblhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmZvbGQoKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmZvbGQoKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImZvb1wiKS5Gb2xkKCkuTWVhbjxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImZvb1wiKS5Gb2xkKCkuTWVhbihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdmb28nKS5mb2xkKCkubWVhbihTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21lYW5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWVhbigpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWVhbigpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm1lYW4oKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKCkuYnkoc3RyaW5nMSkuYnkoX18uYm90aEUoKS52YWx1ZXMoc3RyaW5nMikubWVhbigpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwibmFtZVwiKS5CeShfXy5Cb3RoRSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLk1lYW48b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuR3JvdXAoKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLlZhbHVlcyhcIndlaWdodFwiKS5NZWFuKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWVhbigpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5tZWFuKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm1lYW4oKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmdyb3VwKCkuYnkoJ25hbWUnKS5ieShfXy5ib3RoX2UoKS52YWx1ZXMoJ3dlaWdodCcpLm1lYW4oKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9tZWFuWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpLk1lYW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikuTWVhbihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpLm1lYW4oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX21lYW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5NZWFuPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKS5NZWFuKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykubWVhbihTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfdW5mb2xkX21lYW4iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5NZWFuPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5NZWFuKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykudW5mb2xkKCkubWVhbigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWVhbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuTWVhbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLk1lYW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKS5jYXAoJ2EnKS51bmZvbGQoKS5tZWFuKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9tZWFuWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLk1lYW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcChcImFcIikuTWVhbihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2ZvbycpLmNhcCgnYScpLm1lYW4oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX21lYW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5NZWFuPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5NZWFuKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykubWVhbihTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21lYW4iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5NZWFuPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5NZWFuKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykudW5mb2xkKCkubWVhbigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWVhbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuTWVhbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLk1lYW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdmb28nKS5jYXAoJ2EnKS51bmZvbGQoKS5tZWFuKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxfMTBfMjBfbnVsbFhfbWVhbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsLCAxMCwgMjAsIG51bGwpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwsIDEwLCAyMCwgbnVsbCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwsIDEwLCAyMCwgbnVsbCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwLCBudW1iZXIwLCBudW1iZXIxLCBvYmplY3QwKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsLCAxMCwgMjAsIG51bGwpLk1lYW48b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsLCAxMCwgMjAsIG5pbCkuTWVhbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwsIDEwLCAyMCwgbnVsbCkubWVhbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsLCAxMCwgMjAsIG51bGwpLm1lYW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCwgMTAsIDIwLCBudWxsKS5tZWFuKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSwgMTAsIDIwLCBOb25lKS5tZWFuKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGxpc3RYbnVsbF8xMF8yMF9udWxsWFhfbWVhblhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW251bGwsMTAsMjAsbnVsbF0pLm1lYW4obG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW251bGwsIDEwLCAyMCwgbnVsbF0pLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtudWxsLCAxMCwgMjAsIG51bGxdKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IG51bGwsIDEwLCAyMCwgbnVsbCB9KS5NZWFuPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIDEwLCAyMCwgbmlsfSkuTWVhbihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtudWxsLCAxMCwgMjAsIG51bGxdKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKG51bGwpOyBhZGQoMTApOyBhZGQoMjApOyBhZGQobnVsbCk7IH19KS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIDEwLCAyMCwgbnVsbF0pLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFtOb25lLCAxMCwgMjAsIE5vbmVdKS5tZWFuKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlc1hhZ2VYX21lYW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS52YWx1ZXMoc3RyaW5nMCkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk1lYW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuVmFsdWVzKFwiYWdlXCIpLk1lYW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS52YWx1ZXMoJ2FnZScpLm1lYW4oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYdW5pb25YdmFsdWVzWGFnZVhfb3V0RV92YWx1ZXNYd2VpZ2h0WFhfZm9sZFhfbWVhblhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwodW5pb24odmFsdWVzKFwiYWdlXCIpLCBvdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLm1lYW4obG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKHN0cmluZzApLCBfXy5vdXRFKCkudmFsdWVzKHN0cmluZzEpKS5mb2xkKCkpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uVW5pb248b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSwgX18uT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpKS5Gb2xkKCkpLk1lYW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLlVuaW9uKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLCBncmVtbGluZ28uVF9fLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikpLkZvbGQoKSkuTWVhbihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5tZWFuKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLm1lYW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikpLmZvbGQoKSkubWVhbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKCdhZ2UnKSwgX18ub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpKS5mb2xkKCkpLm1lYW4oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsWF9tZXJnZVhpbmplY3RYMVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLm1lcmdlKF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5tZXJnZShfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLm1lcmdlKF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLm1lcmdlKF9fLmluamVjdChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5NZXJnZShfXy5JbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5NZXJnZShncmVtbGluZ28uVF9fLkluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkubWVyZ2UoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkubWVyZ2UoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkubWVyZ2UoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5tZXJnZShfXy5pbmplY3QoMSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX21lcmdlWFZfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5tZXJnZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubWVyZ2UoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5tZXJnZShfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm1lcmdlKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5NZXJnZShfXy5WKCkuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuTWVyZ2UoZ3JlbWxpbmdvLlRfXy5WKCkuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm1lcmdlKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm1lcmdlKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm1lcmdlKF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLm1lcmdlKF9fLlYoKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9sZF9tZXJnZVhjb25zdGFudFhudWxsWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuTWVyZ2UoX18uQ29uc3RhbnQ8b2JqZWN0PihudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuTWVyZ2UoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudChOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkX21lcmdlWFZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvbGQoKS5NZXJnZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRm9sZCgpLk1lcmdlKGdyZW1saW5nby5UX18uVigpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZWxlbWVudE1hcF9tZXJnZVhjb25zdGFudFhhWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZWxlbWVudE1hcCgpLm1lcmdlKF9fLmNvbnN0YW50KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5lbGVtZW50TWFwKCkubWVyZ2UoX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5lbGVtZW50TWFwKCkubWVyZ2UoX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZWxlbWVudE1hcCgpLm1lcmdlKF9fLmNvbnN0YW50KHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5FbGVtZW50TWFwPG9iamVjdD4oKS5NZXJnZShfXy5Db25zdGFudDxvYmplY3Q+KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5FbGVtZW50TWFwKCkuTWVyZ2UoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmVsZW1lbnRNYXAoKS5tZXJnZShfXy5jb25zdGFudChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5lbGVtZW50TWFwKCkubWVyZ2UoX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZWxlbWVudE1hcCgpLm1lcmdlKF9fLmNvbnN0YW50KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZWxlbWVudF9tYXAoKS5tZXJnZShfXy5jb25zdGFudCgnYScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfbWVyZ2VYVl9hc1hhWF9wcm9qZWN0WGFYX2J5WG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpLmFzKFwiYVwiKS5wcm9qZWN0KFwiYVwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKF9fLlYoKS5hcyhcImFcIikucHJvamVjdChcImFcIikuYnkoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpLmFzKFwiYVwiKS5wcm9qZWN0KFwiYVwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpLmFzKHN0cmluZzApLnByb2plY3Qoc3RyaW5nMCkuYnkoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvbGQoKS5NZXJnZShfXy5WKCkuQXMoXCJhXCIpLlByb2plY3Q8b2JqZWN0PihcImFcIikuQnkoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5NZXJnZShncmVtbGluZ28uVF9fLlYoKS5BcyhcImFcIikuUHJvamVjdChcImFcIikuQnkoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpLmFzKFwiYVwiKS5wcm9qZWN0KFwiYVwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpLmFzKFwiYVwiKS5wcm9qZWN0KFwiYVwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoX18uVigpLmFzKFwiYVwiKS5wcm9qZWN0KFwiYVwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmZvbGQoKS5tZXJnZShfXy5WKCkuYXNfKCdhJykucHJvamVjdCgnYScpLmJ5KCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZm9sZF9tZXJnZVhrX3ZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5tZXJnZShbazpcInZcIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKFtrOlwidlwiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKFtrOlwidlwiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5tZXJnZShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuTWVyZ2UobmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwia1wiLCBcInZcIiB9fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuTWVyZ2UobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wia1wiOiBcInZcIiB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoW2s6XCJ2XCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLm1lcmdlKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImtcIiwgXCJ2XCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5tZXJnZShuZXcgTWFwKFtbXCJrXCIsIFwidlwiXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkubWVyZ2UoeyAnayc6ICd2JyB9KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX21lcmdlWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1lcmdlKDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWVyZ2UoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWVyZ2UoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkubWVyZ2UobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKS5NZXJnZSgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLk1lcmdlKDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1lcmdlKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tZXJnZSgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWVyZ2UoMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLm1lcmdlKDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfbWVyZ2VYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWVyZ2UobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tZXJnZShudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tZXJnZShudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5tZXJnZShvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLk1lcmdlKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkuTWVyZ2UobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tZXJnZShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWVyZ2UobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1lcmdlKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5tZXJnZShOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hub25leGlzdGFudFhfZm9sZF9tZXJnZVhWX3ZhbHVlc1huYW1lWF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5vbmV4aXN0YW50XCIpLkZvbGQoKS5NZXJnZShfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJub25leGlzdGFudFwiKS5Gb2xkKCkuTWVyZ2UoZ3JlbWxpbmdvLlRfXy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdub25leGlzdGFudCcpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX21lcmdlWFZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpLk1lcmdlKF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5vbmV4aXN0YW50XCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5NZXJnZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJub25leGlzdGFudFwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoJ25vbmV4aXN0YW50JykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfbWVyZ2VYVl92YWx1ZXNYYWdlWF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5Gb2xkKCkuTWVyZ2UoX18uVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpLk1lcmdlKGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcImFnZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tZXJnZShfXy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5mb2xkKCkubWVyZ2UoX18uVigpLnZhbHVlcygnYWdlJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9wYXRoX2J5WHZhbHVlc1huYW1lWF90b1VwcGVyWF9tZXJnZVhNQVJLT1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KHZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpKS5tZXJnZShbXCJNQVJLT1wiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLm1lcmdlKFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLm1lcmdlKFtcIk1BUktPXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KF9fLnZhbHVlcyhzdHJpbmcwKS50b1VwcGVyKCkpLm1lcmdlKGxpc3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5QYXRoKCkuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlRvVXBwZXIoKSkuTWVyZ2UobmV3IExpc3Q8b2JqZWN0PiB7IFwiTUFSS09cIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlBhdGgoKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuVG9VcHBlcigpKS5NZXJnZShbXWludGVyZmFjZXt9e1wiTUFSS09cIn0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkubWVyZ2UoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLm1lcmdlKG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIk1BUktPXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkubWVyZ2UoW1wiTUFSS09cIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoJ25hbWUnKS50b191cHBlcigpKS5tZXJnZShbJ01BUktPJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhtYXJrb1hfbWVyZ2VYVl92YWx1ZXNYbmFtZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkubWVyZ2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkubWVyZ2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLm1lcmdlKF9fLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcIm1hcmtvXCIgfSkuTWVyZ2UoX18uVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcIm1hcmtvXCJ9KS5NZXJnZShncmVtbGluZ28uVF9fLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIm1hcmtvXCIpOyB9fSkubWVyZ2UoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLm1lcmdlKF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydtYXJrbyddKS5tZXJnZShfXy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwWGxvY2F0aW9uWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfbWVyZ2VYc2VhdHRsZV92YW5jb3V2ZXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KHZhbHVlcykudW5mb2xkKCkubWVyZ2UoW1wic2VhdHRsZVwiLFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm1lcmdlKFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm1lcmdlKFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChzdHJpbmcwKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkubWVyZ2UobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcImxvY2F0aW9uXCIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuTWVyZ2UobmV3IExpc3Q8b2JqZWN0PiB7IFwic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoXCJsb2NhdGlvblwiKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLk1lcmdlKFtdaW50ZXJmYWNle317XCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJ9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5tZXJnZShbXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkubWVyZ2UobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwic2VhdHRsZVwiKTsgYWRkKFwidmFuY291dmVyXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm1lcmdlKFtcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgnbG9jYXRpb24nKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkubWVyZ2UoWydzZWF0dGxlJywgJ3ZhbmNvdXZlciddKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9tZXJnZVhlbXB0eV9saXN0WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLm1lcmdlKFtdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikubWVyZ2UoW10pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikubWVyZ2UoW10pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoc3RyaW5nMCkubWVyZ2UobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuTWVyZ2UobmV3IExpc3Q8b2JqZWN0PiB7ICB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuTWVyZ2UoW11pbnRlcmZhY2V7fXt9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLm1lcmdlKFtdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5tZXJnZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLm1lcmdlKFtdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5tZXJnZShbXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9mb2xkX21lcmdlWGNvbnN0YW50WDI3WF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KDI3KS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuZm9sZCgpLm1lcmdlKF9fLmNvbnN0YW50KG51bWJlcjApLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuRm9sZCgpLk1lcmdlKF9fLkNvbnN0YW50PG9iamVjdD4oMjcpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpLk1lcmdlKGdyZW1saW5nby5UX18uQ29uc3RhbnQoMjcpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmZvbGQoKS5tZXJnZShfXy5jb25zdGFudCgyNykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9tZXJnZVhkYXZlX2tlbHZpblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5tZXJnZShbXCJkYXZlXCIsXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5tZXJnZShbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLm1lcmdlKFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoc3RyaW5nMCkubWVyZ2UobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuTWVyZ2UobmV3IExpc3Q8b2JqZWN0PiB7IFwiZGF2ZVwiLCBcImtlbHZpblwiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5NZXJnZShbXWludGVyZmFjZXt9e1wiZGF2ZVwiLCBcImtlbHZpblwifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5tZXJnZShbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5tZXJnZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJkYXZlXCIpOyBhZGQoXCJrZWx2aW5cIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5tZXJnZShbXCJkYXZlXCIsIFwia2VsdmluXCJdKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5tZXJnZShbJ2RhdmUnLCAna2VsdmluJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhX251bGxfYlhfbWVyZ2VYYV9jWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJhXCIsbnVsbCxcImJcIl0pLm1lcmdlKFtcImFcIixcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLm1lcmdlKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkubWVyZ2UoW1wiYVwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkubWVyZ2UobGlzdDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImJcIiB9KS5NZXJnZShuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiY1wiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgbmlsLCBcImJcIn0pLk1lcmdlKFtdaW50ZXJmYWNle317XCJhXCIsIFwiY1wifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLm1lcmdlKFtcImFcIiwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJiXCIpOyB9fSkubWVyZ2UobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiY1wiKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkubWVyZ2UoW1wiYVwiLCBcImNcIl0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnYScsIE5vbmUsICdiJ10pLm1lcmdlKFsnYScsICdjJ10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhX251bGxfYlhfbWVyZ2VYYV9udWxsX2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixudWxsLFwiYlwiXSkubWVyZ2UoW1wiYVwiLG51bGwsXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5tZXJnZShbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLm1lcmdlKFtcImFcIiwgbnVsbCwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLm1lcmdlKGxpc3QxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgbnVsbCwgXCJiXCIgfSkuTWVyZ2UobmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImNcIiB9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJiXCJ9KS5NZXJnZShbXWludGVyZmFjZXt9e1wiYVwiLCBuaWwsIFwiY1wifSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLm1lcmdlKFtcImFcIiwgbnVsbCwgXCJjXCJdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJiXCIpOyB9fSkubWVyZ2UobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJjXCIpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5tZXJnZShbXCJhXCIsIG51bGwsIFwiY1wiXSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhJywgTm9uZSwgJ2InXSkubWVyZ2UoWydhJywgTm9uZSwgJ2MnXSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDNfdGhyZWVYX21lcmdlWGZpdmVfdGhyZWVfN1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzMsXCJ0aHJlZVwiXSkubWVyZ2UoW1wiZml2ZVwiLFwidGhyZWVcIiw3aV0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLm1lcmdlKFtcImZpdmVcIiwgXCJ0aHJlZVwiLCA3aV0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5tZXJnZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLm1lcmdlKGxpc3QxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuTWVyZ2UobmV3IExpc3Q8b2JqZWN0PiB7IFwiZml2ZVwiLCBcInRocmVlXCIsIDcgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9ezMsIFwidGhyZWVcIn0pLk1lcmdlKFtdaW50ZXJmYWNle317XCJmaXZlXCIsIFwidGhyZWVcIiwgaW50MzIoNyl9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMywgXCJ0aHJlZVwiXSkubWVyZ2UoW1wiZml2ZVwiLCBcInRocmVlXCIsIDdpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgzKTsgYWRkKFwidGhyZWVcIik7IH19KS5tZXJnZShuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJmaXZlXCIpOyBhZGQoXCJ0aHJlZVwiKTsgYWRkKDcpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5tZXJnZShbXCJmaXZlXCIsIFwidGhyZWVcIiwgN10pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFszLCAndGhyZWUnXSkubWVyZ2UoWydmaXZlJywgJ3RocmVlJywgN10pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYbmFtZVhfcHJvamVjdFhuYW1lWF9ieVhuYW1lWF9tZXJnZVhvdGhlcl9ibHVlcHJpbnRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwibmFtZVwiKS5wcm9qZWN0KFwibmFtZVwiKS5ieShcIm5hbWVcIikubWVyZ2UoW1wib3RoZXJcIjpcImJsdWVwcmludFwiXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcIm5hbWVcIikucHJvamVjdChcIm5hbWVcIikuYnkoXCJuYW1lXCIpLm1lcmdlKFtcIm90aGVyXCI6XCJibHVlcHJpbnRcIl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwibmFtZVwiKS5wcm9qZWN0KFwibmFtZVwiKS5ieShcIm5hbWVcIikubWVyZ2UoW1wib3RoZXJcIjpcImJsdWVwcmludFwiXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLnByb2plY3Qoc3RyaW5nMCkuYnkoc3RyaW5nMCkubWVyZ2UobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJuYW1lXCIpLlByb2plY3Q8b2JqZWN0PihcIm5hbWVcIikuQnkoXCJuYW1lXCIpLk1lcmdlKG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm90aGVyXCIsIFwiYmx1ZXByaW50XCIgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJuYW1lXCIpLlByb2plY3QoXCJuYW1lXCIpLkJ5KFwibmFtZVwiKS5NZXJnZShtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJvdGhlclwiOiBcImJsdWVwcmludFwiIH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwibmFtZVwiKS5wcm9qZWN0KFwibmFtZVwiKS5ieShcIm5hbWVcIikubWVyZ2UoW1wib3RoZXJcIjpcImJsdWVwcmludFwiXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwibmFtZVwiKS5wcm9qZWN0KFwibmFtZVwiKS5ieShcIm5hbWVcIikubWVyZ2UobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwib3RoZXJcIiwgXCJibHVlcHJpbnRcIik7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJuYW1lXCIpLnByb2plY3QoXCJuYW1lXCIpLmJ5KFwibmFtZVwiKS5tZXJnZShuZXcgTWFwKFtbXCJvdGhlclwiLCBcImJsdWVwcmludFwiXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ25hbWUnKS5wcm9qZWN0KCduYW1lJykuYnkoJ25hbWUnKS5tZXJnZSh7ICdvdGhlcic6ICdibHVlcHJpbnQnIH0pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfbWFya29YX2VsZW1lbnRNYXBfbWVyZ2VYVl9oYXNYbmFtZV9sb3BYX2VsZW1lbnRNYXBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLmVsZW1lbnRNYXAoKS5tZXJnZShfXy5WKCkuaGFzKFwibmFtZVwiLFwibG9wXCIpLmVsZW1lbnRNYXAoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuZWxlbWVudE1hcCgpLm1lcmdlKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmVsZW1lbnRNYXAoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmVsZW1lbnRNYXAoKS5tZXJnZShfXy5WKCkuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5lbGVtZW50TWFwKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuZWxlbWVudE1hcCgpLm1lcmdlKF9fLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMikuZWxlbWVudE1hcCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuRWxlbWVudE1hcDxvYmplY3Q+KCkuTWVyZ2UoX18uVigpLkhhcyhcIm5hbWVcIiwgXCJsb3BcIikuRWxlbWVudE1hcDxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLkVsZW1lbnRNYXAoKS5NZXJnZShncmVtbGluZ28uVF9fLlYoKS5IYXMoXCJuYW1lXCIsIFwibG9wXCIpLkVsZW1lbnRNYXAoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmVsZW1lbnRNYXAoKS5tZXJnZShfXy5WKCkuaGFzKFwibmFtZVwiLCBcImxvcFwiKS5lbGVtZW50TWFwKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuZWxlbWVudE1hcCgpLm1lcmdlKF9fLlYoKS5oYXMoXCJuYW1lXCIsIFwibG9wXCIpLmVsZW1lbnRNYXAoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5lbGVtZW50TWFwKCkubWVyZ2UoX18uVigpLmhhcyhcIm5hbWVcIiwgXCJsb3BcIikuZWxlbWVudE1hcCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5lbGVtZW50X21hcCgpLm1lcmdlKF9fLlYoKS5oYXMoJ25hbWUnLCAnbG9wJykuZWxlbWVudF9tYXAoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZUVYbGFiZWxfc2VsZlhfb3B0aW9uWG9uTWF0Y2hfZW1wdHlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hZGRFKHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFkZF9lKCdzZWxmJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCxbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFs6XSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFs6XSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFs6XSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHsgIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuUHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWVyZ2VFWGxhYmVsX3NlbGZYX29wdGlvblhvbk1hdGNoX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hZGRFKHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFkZF9lKCdzZWxmJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCxudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCAoTWFwKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5Qcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZUVYZW1wdHlYX29wdGlvblhvbkNyZWF0ZV9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLHNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwidlwiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLk9wdGlvbihNZXJnZS5PdXRWLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJ2XCIpKS5PcHRpb24oTWVyZ2UuSW5WLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwidlwiKS5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBuaWwpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCAoTWFwKSBudWxsKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ2XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygndicpLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCBOb25lKS5vcHRpb24oTWVyZ2Uub3V0X3YsIF9fLnNlbGVjdCgndicpKS5vcHRpb24oTWVyZ2UuaW5fdiwgX18uc2VsZWN0KCd2JykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWVyZ2VFX2lubGluZVhlbXB0eVhfb3B0aW9uWG9uQ3JlYXRlX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoW1QubGFiZWw6XCJzZWxmXCIsKE9VVCk6TWVyZ2Uub3V0ViwoSU4pOk1lcmdlLmluVl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSxudWxsKS5vcHRpb24oTWVyZ2Uub3V0VixzZWxlY3QoXCJ2XCIpKS5vcHRpb24oTWVyZ2UuaW5WLHNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRShbVC5sYWJlbDpcInNlbGZcIiwgKERpcmVjdGlvbi5PVVQpOk1lcmdlLm91dFYsIChEaXJlY3Rpb24uSU4pOk1lcmdlLmluVl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoW1QubGFiZWw6XCJzZWxmXCIsIChEaXJlY3Rpb24uT1VUKTpNZXJnZS5vdXRWLCAoRGlyZWN0aW9uLklOKTpNZXJnZS5pblZdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ2XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChzdHJpbmcwKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcInZcIikuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCBcInNlbGZcIiB9LCB7IERpcmVjdGlvbi5PdXQsIE1lcmdlLk91dFYgfSwgeyBEaXJlY3Rpb24uSW4sIE1lcmdlLkluViB9fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuTWVyZ2VFKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtncmVtbGluZ28uVC5MYWJlbDogXCJzZWxmXCIsIGdyZW1saW5nby5EaXJlY3Rpb24uT3V0OiBncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLkRpcmVjdGlvbi5JbjogZ3JlbWxpbmdvLk1lcmdlLkluViB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBuaWwpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKFtULmxhYmVsOlwic2VsZlwiLCAoRGlyZWN0aW9uLk9VVCk6TWVyZ2Uub3V0ViwgKERpcmVjdGlvbi5JTik6TWVyZ2UuaW5WXSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCAoTWFwKSBudWxsKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFQubGFiZWwsIFwic2VsZlwiKTsgcHV0KERpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFYpOyBwdXQoRGlyZWN0aW9uLklOLCBNZXJnZS5pblYpOyB9fSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUobmV3IE1hcChbW1QubGFiZWwsIFwic2VsZlwiXSwgW0RpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFZdLCBbRGlyZWN0aW9uLklOLCBNZXJnZS5pblZdXSkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygndicpLm1lcmdlX2UoeyBULmxhYmVsOiAnc2VsZicsIERpcmVjdGlvbi5PVVQ6IE1lcmdlLm91dF92LCBEaXJlY3Rpb24uSU46IE1lcmdlLmluX3YgfSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgTm9uZSkub3B0aW9uKE1lcmdlLm91dF92LCBfXy5zZWxlY3QoJ3YnKSkub3B0aW9uKE1lcmdlLmluX3YsIF9fLnNlbGVjdCgndicpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYZW1wdHlYX2V4aXN0cyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYWRkRShzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hZGRfZSgnc2VsZicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoWzpdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKFs6XSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoWzpdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoWzpdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUobmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh7ICB9KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYZW1wdHlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKFs6XSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRShbOl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKFs6XSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRShtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317IH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VFKFs6XSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7ICB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKG5ldyBNYXAoW10pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeyAgfSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZUVYZW1wdHlYX3R3b19leGlzdCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vdXRWLHNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwidlwiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PdXRWLCBncmVtbGluZ28uVF9fLlNlbGVjdChcInZcIikpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuSW5WLCBncmVtbGluZ28uVF9fLlNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCd2JykubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vdXRfdiwgX18uc2VsZWN0KCd2JykpLm9wdGlvbihNZXJnZS5pbl92LCBfXy5zZWxlY3QoJ3YnKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZUVfaW5saW5lWGVtcHR5WF90d29fZXhpc3QiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoW1QubGFiZWw6XCJzZWxmXCIsKE9VVCk6TWVyZ2Uub3V0ViwoSU4pOk1lcmdlLmluVl0pLm9wdGlvbihNZXJnZS5vdXRWLHNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKFtULmxhYmVsOlwic2VsZlwiLCAoRGlyZWN0aW9uLk9VVCk6TWVyZ2Uub3V0ViwgKERpcmVjdGlvbi5JTik6TWVyZ2UuaW5WXSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoW1QubGFiZWw6XCJzZWxmXCIsIChEaXJlY3Rpb24uT1VUKTpNZXJnZS5vdXRWLCAoRGlyZWN0aW9uLklOKTpNZXJnZS5pblZdKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwidlwiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsIFwic2VsZlwiIH0sIHsgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH19KS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuTWVyZ2VFKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtncmVtbGluZ28uVC5MYWJlbDogXCJzZWxmXCIsIGdyZW1saW5nby5EaXJlY3Rpb24uT3V0OiBncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLkRpcmVjdGlvbi5JbjogZ3JlbWxpbmdvLk1lcmdlLkluViB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk91dFYsIGdyZW1saW5nby5UX18uU2VsZWN0KFwidlwiKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5JblYsIGdyZW1saW5nby5UX18uU2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRShbVC5sYWJlbDpcInNlbGZcIiwgKERpcmVjdGlvbi5PVVQpOk1lcmdlLm91dFYsIChEaXJlY3Rpb24uSU4pOk1lcmdlLmluVl0pLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ2XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRShuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoVC5sYWJlbCwgXCJzZWxmXCIpOyBwdXQoRGlyZWN0aW9uLk9VVCwgTWVyZ2Uub3V0Vik7IHB1dChEaXJlY3Rpb24uSU4sIE1lcmdlLmluVik7IH19KS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUobmV3IE1hcChbW1QubGFiZWwsIFwic2VsZlwiXSwgW0RpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFZdLCBbRGlyZWN0aW9uLklOLCBNZXJnZS5pblZdXSkpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ2XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ3YnKS5tZXJnZV9lKHsgVC5sYWJlbDogJ3NlbGYnLCBEaXJlY3Rpb24uT1VUOiBNZXJnZS5vdXRfdiwgRGlyZWN0aW9uLklOOiBNZXJnZS5pbl92IH0pLm9wdGlvbihNZXJnZS5vdXRfdiwgX18uc2VsZWN0KCd2JykpLm9wdGlvbihNZXJnZS5pbl92LCBfXy5zZWxlY3QoJ3YnKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSgoTWFwKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZShOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYbnVsbHZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xpbWl0WDFYX21lcmdlRVhudWxsdmFyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5saW1pdCgxKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxpbWl0KDEpLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxpbWl0KDEpLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5saW1pdChudW1iZXIwKS5tZXJnZUUobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTGltaXQ8b2JqZWN0PigxKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxpbWl0KDEpLk1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxpbWl0KDEpLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5saW1pdCgxKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubGltaXQoMSkubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubGltaXQoMSkubWVyZ2VfZSh4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWVyZ2VFWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1lcmdlRShudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1lcmdlRShudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tZXJnZUUobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1lcmdlRShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5NZXJnZUUobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5tZXJnZUUoKE1hcCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1lcmdlRShudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWVyZ2VFKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1lcmdlX2UoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikub3V0KHN0cmluZzMpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCdwZXJzb24nLCAnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9tZXJnZUVYc2VsZWN0WGFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRShncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VFKF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRShfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV9lKF9fLnNlbGVjdCgnYScpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLm91dChzdHJpbmczKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykub3V0KCdrbm93cycpLmhhcygncGVyc29uJywgJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvMV9pbl92YWRhczFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLm91dChzdHJpbmczKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykub3V0KCdrbm93cycpLmhhcygncGVyc29uJywgJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzX3dlaWdodF8wNVhfZXhpc3RzIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXRFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsMC41KS5pblYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMC41KS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMC41KS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5vdXRFKHN0cmluZzMpLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5pblYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dEUoXCJrbm93c1wiKS5IYXMoXCJ3ZWlnaHRcIiwgMC41KS5JblYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuT3V0RShcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAwLjUpLkluVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0RShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwLjUpLmluVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMC41KS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXRFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDAuNSkuaW5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5vdXRfZSgna25vd3MnKS5oYXMoJ3dlaWdodCcsIDAuNSkuaW5fdigpLmhhcygncGVyc29uJywgJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLm91dChzdHJpbmczKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykub3V0KCdrbm93cycpLmhhcygncGVyc29uJywgJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzX3dlaWdodF8wNVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgzKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvX2luX3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0cyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYXMoc3RyaW5nMykuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5hcyhzdHJpbmc1KS5hZGRFKHN0cmluZzYpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nNSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUseHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCx4eDMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB4eDMpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdOJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdZJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIixcIk5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgna25vd3MnKS5oYXMoJ2NyZWF0ZWQnLCAnTicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvX1hfbWVyZ2VFWGxhYmVsX2tub3dzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIixcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc2KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ2NyZWF0ZWQnLCAnWScpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdZJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIixcIk5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgna25vd3MnKS5oYXMoJ2NyZWF0ZWQnLCAnTicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfaW5qZWN0WDFYX3NlbGVjdFhtWF9tZXJnZUUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5zZWxlY3QoXCJtXCIpLm1lcmdlRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuc2VsZWN0KFwibVwiKS5tZXJnZUUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5zZWxlY3QoXCJtXCIpLm1lcmdlRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5zZWxlY3Qoc3RyaW5nMCkubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxKS5TZWxlY3Q8b2JqZWN0PihcIm1cIikuTWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5TZWxlY3QoXCJtXCIpLk1lcmdlRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLnNlbGVjdChcIm1cIikubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLnNlbGVjdChcIm1cIikubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLnNlbGVjdChcIm1cIikubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuc2VsZWN0KCdtJykubWVyZ2VfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikub3V0KHN0cmluZzMpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCdwZXJzb24nLCAnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRVhsYWJlbF9rbm93c19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc2KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmc1KS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ2NyZWF0ZWQnLCAnWScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUseHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCx4eDMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB4eDMpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKS5pblYoKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikuaW5WKCkuaGFzKHN0cmluZzMsIHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikuSW5WKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5JblYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLmluVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ04nKS5pbl92KCkuaGFzKCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHNfdXBkYXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc2KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmc1KS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ2NyZWF0ZWQnLCAnWScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUseHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCx4eDMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB4eDMpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikub3V0VigpLmhhcyhzdHJpbmczLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLk91dFYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ04nKS5vdXRfdigpLmhhcygnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWRfb3ZlcnJpZGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc2KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmc1KS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImJcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2EnKS50bygnYicpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYicpLnRvKCdhJykucHJvcGVydHkoJ2NyZWF0ZWQnLCAnWScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUseHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCx4eDMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB4eDMpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRVhvdXRfdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9jcmVhdGVkX1lYX29wdGlvblhvbk1hdGNoX2NyZWF0ZWRfTlhfZXhpc3RzX3VwZGF0ZWRfZXJyb3IiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hZGRFKHN0cmluZzYpLmZyb20oc3RyaW5nNSkudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnY3JlYXRlZCcsICdZJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2InKS50bygnYScpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdZJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIixcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLm91dFYoKS5oYXMoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdOJykub3V0X3YoKS5oYXMoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX292ZXJyaWRlX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hZGRFKHN0cmluZzYpLmZyb20oc3RyaW5nNSkudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnY3JlYXRlZCcsICdZJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2InKS50bygnYScpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4Mikub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgzKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVYb3V0X3ZhZGFzWF9vcHRpb25Yb25DcmVhdGVfY3JlYXRlZF9ZWF9vcHRpb25Yb25NYXRjaF9jcmVhdGVkX05YX2V4aXN0c191cGRhdGVkX2R5bmFtaWNfb3ZlcnJpZGVfc2tldGNoaWx5X2FsbG93ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImJcIikudG8oXCJhXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hZGRFKHN0cmluZzYpLmZyb20oc3RyaW5nNSkudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJiXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJiXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwiY3JlYXRlZFwiLCBcIllcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYlwiKS50byhcImFcIikucHJvcGVydHkoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnY3JlYXRlZCcsICdZJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ2InKS50bygnYScpLnByb3BlcnR5KCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBzZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwic2lkZUVmZmVjdDFcIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBncmVtbGluZ28uVF9fLlNlbGVjdChcInNpZGVFZmZlY3QxXCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCBfXy5zZWxlY3QoJ3NpZGVFZmZlY3QxJykpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdZJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIixcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLm91dFYoKS5oYXMoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5PdXRWKCkuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikub3V0VigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5vdXRWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLm91dFYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdOJykub3V0X3YoKS5oYXMoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hwZXJzb25fbmFtZV9tYXJrb19YX21lcmdlRVhsYWJlbF9zZWxmX291dF92YWRhczFfaW5fdmFkYXMxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikubWVyZ2VFKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5NZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VFKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5tZXJnZV9lKHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcInNlbGZcIikuYm90aFYoKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwic2VsZlwiKS5ib3RoVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcInNlbGZcIikuYm90aFYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmJvdGhWKCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwic2VsZlwiKS5Cb3RoVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwic2VsZlwiKS5Cb3RoVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcInNlbGZcIikuYm90aFYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwic2VsZlwiKS5ib3RoVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJzZWxmXCIpLmJvdGhWKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgnc2VsZicpLmJvdGhfdigpLmhhcygnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFhfZXhpc3RzIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSxfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCxfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3Qoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJjXCIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIGdyZW1saW5nby5UX18uU2VsZWN0KFwiY1wiKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBncmVtbGluZ28uVF9fLlNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV9lKHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdjJykpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgX18uc2VsZWN0KCdtJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdOJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYY19jcmVhdGVkX1lYX3dpdGhTaWRlRWZmZWN0WG1fbWF0Y2hlZFhfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYXMoc3RyaW5nMykuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5hcyhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcwKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcImNcIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJjXCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCBfXy5zZWxlY3QoJ2MnKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zZWxlY3QoJ20nKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIixcIllcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgna25vd3MnKS5oYXMoJ2NyZWF0ZWQnLCAnWScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ04nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhjX2NyZWF0ZWRfWVhfd2l0aFNpZGVFZmZlY3RYbV9tYXRjaGVkWF9tZXJnZUVYbGFiZWxfa25vd3Nfb3V0X21hcmtvMV9pbl92YWRhczFYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5BcyhcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLmFzXygnYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3Qoc3RyaW5nMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJjXCIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIGdyZW1saW5nby5UX18uU2VsZWN0KFwiY1wiKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBncmVtbGluZ28uVF9fLlNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV9lKHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdjJykpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgX18uc2VsZWN0KCdtJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdOJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfYWxpYXNlZF9kaXJlY3Rpb24iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikub3V0KHN0cmluZzMpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCdwZXJzb24nLCAnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WG0xX2xhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc19tMl9sYWJlbF9zZWxmX291dF92YWRhc19pbl92YWRhc1hfdW5pb25Yc2VsZWN0WG0xWF9zZWxlY3RYbTJYWF9tZXJnZUUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLnVuaW9uKHNlbGVjdChcIm0xXCIpLCBzZWxlY3QoXCJtMlwiKSkubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLnVuaW9uKF9fLnNlbGVjdChcIm0xXCIpLCBfXy5zZWxlY3QoXCJtMlwiKSkubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy51bmlvbihfXy5zZWxlY3QoXCJtMVwiKSwgX18uc2VsZWN0KFwibTJcIikpLm1lcmdlRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLnVuaW9uKF9fLnNlbGVjdChzdHJpbmcwKSwgX18uc2VsZWN0KHN0cmluZzEpKS5tZXJnZUUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlVuaW9uPG9iamVjdD4oX18uU2VsZWN0PG9iamVjdD4oXCJtMVwiKSwgX18uU2VsZWN0PG9iamVjdD4oXCJtMlwiKSkuTWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlVuaW9uKGdyZW1saW5nby5UX18uU2VsZWN0KFwibTFcIiksIGdyZW1saW5nby5UX18uU2VsZWN0KFwibTJcIikpLk1lcmdlRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18uc2VsZWN0KFwibTFcIiksIF9fLnNlbGVjdChcIm0yXCIpKS5tZXJnZUUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy51bmlvbihfXy5zZWxlY3QoXCJtMVwiKSwgX18uc2VsZWN0KFwibTJcIikpLm1lcmdlRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLnNlbGVjdChcIm0xXCIpLCBfXy5zZWxlY3QoXCJtMlwiKSkubWVyZ2VFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy51bmlvbihfXy5zZWxlY3QoJ20xJyksIF9fLnNlbGVjdCgnbTInKSkubWVyZ2VfZSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikub3V0KHN0cmluZzMpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCdwZXJzb24nLCAnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJ2YWRhc1wiKS5vdXQoXCJzZWxmXCIpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikub3V0KFwic2VsZlwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLm91dChcInNlbGZcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikub3V0KHN0cmluZzMpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuT3V0KFwic2VsZlwiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuT3V0KFwic2VsZlwiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLm91dChcInNlbGZcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikub3V0KFwic2VsZlwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKS5vdXQoXCJzZWxmXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3ZhZGFzJykub3V0KCdzZWxmJykuaGFzKCdwZXJzb24nLCAnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGNfY3JlYXRlZF9ZWF93aXRoU2lkZUVmZmVjdFhtX21hdGNoZWRYX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYY1hYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydGllc1h3ZWlnaHRYX2Ryb3BYX3NlbGVjdFhtWFhfZXhpc3RzIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgZG91YmxlMCkuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkZyb20oXCJhXCIpLlRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5mcm9tXyhcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykuYXNfKCdiJykuYWRkX2UoJ2tub3dzJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuZnJvbV8oJ2EnKS50bygnYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuZHJvcCgpKS5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmRyb3AoKSkuc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuZHJvcCgpKS5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoc3RyaW5nMSkuZHJvcCgpKS5zZWxlY3Qoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJjXCIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNpZGVFZmZlY3QoX18uUHJvcGVydGllczxvYmplY3Q+KFwid2VpZ2h0XCIpLkRyb3AoKSkuU2VsZWN0PG9iamVjdD4oXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJjXCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIGdyZW1saW5nby5UX18uU2lkZUVmZmVjdChncmVtbGluZ28uVF9fLlByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuRHJvcCgpKS5TZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcIndlaWdodFwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcIndlaWdodFwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcIndlaWdodFwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIF9fLnNlbGVjdCgnYycpKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIF9fLnNpZGVfZWZmZWN0KF9fLnByb3BlcnRpZXMoJ3dlaWdodCcpLmRyb3AoKSkuc2VsZWN0KCdtJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJZXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIllcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiWVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbGFiZWwoJ2tub3dzJykuaGFzKCdjcmVhdGVkJywgJ1knKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzTGFiZWwoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnY3JlYXRlZCcsICdOJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgna25vd3MnKS5oYXMoJ3dlaWdodCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRV93aXRoX291dFZpblZfb3B0aW9uc19tYXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihvdXRWLCB4eDIpLm9wdGlvbihpblYsIHh4MykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vdXRWLCB4eDIpLm9wdGlvbihNZXJnZS5pblYsIHh4MykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgyKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub3V0ViwgbWFwMSkub3B0aW9uKE1lcmdlLmluViwgbWFwMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5PcHRpb24oTWVyZ2UuSW5WLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk91dFYsIHh4MikuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5JblYsIHh4MykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgyKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vdXRWLCB4eDIpLm9wdGlvbihNZXJnZS5pblYsIHh4MykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm91dFYsIHh4Mikub3B0aW9uKE1lcmdlLmluViwgeHgzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub3V0X3YsIHh4Mikub3B0aW9uKE1lcmdlLmluX3YsIHh4MykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX2lubGluZV93aXRoX291dFZpblZfb3B0aW9uc19tYXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRShbKE9VVCk6TWVyZ2Uub3V0ViwoSU4pOk1lcmdlLmluVixULmxhYmVsOlwia25vd3NcIl0pLm9wdGlvbihvdXRWLCB4eDEpLm9wdGlvbihpblYsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRShbKERpcmVjdGlvbi5PVVQpOk1lcmdlLm91dFYsIChEaXJlY3Rpb24uSU4pOk1lcmdlLmluViwgVC5sYWJlbDpcImtub3dzXCJdKS5vcHRpb24oTWVyZ2Uub3V0ViwgeHgxKS5vcHRpb24oTWVyZ2UuaW5WLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKFsoRGlyZWN0aW9uLk9VVCk6TWVyZ2Uub3V0ViwgKERpcmVjdGlvbi5JTik6TWVyZ2UuaW5WLCBULmxhYmVsOlwia25vd3NcIl0pLm9wdGlvbihNZXJnZS5vdXRWLCB4eDEpLm9wdGlvbihNZXJnZS5pblYsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vdXRWLCBtYXAxKS5vcHRpb24oTWVyZ2UuaW5WLCBtYXAyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH0sIHsgVC5MYWJlbCwgXCJrbm93c1wiIH19KS5PcHRpb24oTWVyZ2UuT3V0ViwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuSW5WLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e2dyZW1saW5nby5EaXJlY3Rpb24uT3V0OiBncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLkRpcmVjdGlvbi5JbjogZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlQuTGFiZWw6IFwia25vd3NcIiB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk91dFYsIHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5JblYsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoWyhEaXJlY3Rpb24uT1VUKTpNZXJnZS5vdXRWLCAoRGlyZWN0aW9uLklOKTpNZXJnZS5pblYsIFQubGFiZWw6XCJrbm93c1wiXSkub3B0aW9uKE1lcmdlLm91dFYsIHh4MSkub3B0aW9uKE1lcmdlLmluViwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KERpcmVjdGlvbi5PVVQsIE1lcmdlLm91dFYpOyBwdXQoRGlyZWN0aW9uLklOLCBNZXJnZS5pblYpOyBwdXQoVC5sYWJlbCwgXCJrbm93c1wiKTsgfX0pLm9wdGlvbihNZXJnZS5vdXRWLCB4eDEpLm9wdGlvbihNZXJnZS5pblYsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKG5ldyBNYXAoW1tEaXJlY3Rpb24uT1VULCBNZXJnZS5vdXRWXSwgW0RpcmVjdGlvbi5JTiwgTWVyZ2UuaW5WXSwgW1QubGFiZWwsIFwia25vd3NcIl1dKSkub3B0aW9uKE1lcmdlLm91dFYsIHh4MSkub3B0aW9uKE1lcmdlLmluViwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeyBEaXJlY3Rpb24uT1VUOiBNZXJnZS5vdXRfdiwgRGlyZWN0aW9uLklOOiBNZXJnZS5pbl92LCBULmxhYmVsOiAna25vd3MnIH0pLm9wdGlvbihNZXJnZS5vdXRfdiwgeHgxKS5vcHRpb24oTWVyZ2UuaW5fdiwgeHgyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkub3V0KHN0cmluZzIpLmhhcyhzdHJpbmcwLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdtYXJrbycpLm91dCgna25vd3MnKS5oYXMoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZUVfd2l0aF9vdXRWaW5WX29wdGlvbnNfc2VsZWN0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwieFwiKS5WKHZpZDIpLmFzKFwieVwiKS5tZXJnZUUoeHgxKS5vcHRpb24ob3V0Viwgc2VsZWN0KFwieFwiKSkub3B0aW9uKGluViwgc2VsZWN0KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJ4XCIpLlYodmlkMikuYXMoXCJ5XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ4XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ5XCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYXMoXCJ4XCIpLlYodmlkMikuYXMoXCJ5XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ4XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ5XCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLlYodmlkMikuYXMoc3RyaW5nMSkubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFzKFwieFwiKS5WKHZpZDIpLkFzKFwieVwiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwieFwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQXMoXCJ4XCIpLlYodmlkMikuQXMoXCJ5XCIpLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ4XCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ5XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJ4XCIpLlYodmlkMikuYXMoXCJ5XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ4XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ5XCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFzKFwieFwiKS5WKHZpZDIpLmFzKFwieVwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwieFwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hcyhcInhcIikuVih2aWQyKS5hcyhcInlcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInhcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInlcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ3gnKS5WKHZpZDIpLmFzXygneScpLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub3V0X3YsIF9fLnNlbGVjdCgneCcpKS5vcHRpb24oTWVyZ2UuaW5fdiwgX18uc2VsZWN0KCd5JykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5vdXQoc3RyaW5nMikuaGFzKHN0cmluZzAsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykub3V0KCdrbm93cycpLmhhcygnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRV9pbmxpbmVfd2l0aF9vdXRWaW5WX29wdGlvbnNfc2VsZWN0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwieFwiKS5WKHZpZDIpLmFzKFwieVwiKS5tZXJnZUUoWyhPVVQpOk1lcmdlLm91dFYsKElOKTpNZXJnZS5pblYsVC5sYWJlbDpcImtub3dzXCJdKS5vcHRpb24ob3V0Viwgc2VsZWN0KFwieFwiKSkub3B0aW9uKGluViwgc2VsZWN0KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJ4XCIpLlYodmlkMikuYXMoXCJ5XCIpLm1lcmdlRShbKERpcmVjdGlvbi5PVVQpOk1lcmdlLm91dFYsIChEaXJlY3Rpb24uSU4pOk1lcmdlLmluViwgVC5sYWJlbDpcImtub3dzXCJdKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwieFwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwieFwiKS5WKHZpZDIpLmFzKFwieVwiKS5tZXJnZUUoWyhEaXJlY3Rpb24uT1VUKTpNZXJnZS5vdXRWLCAoRGlyZWN0aW9uLklOKTpNZXJnZS5pblYsIFQubGFiZWw6XCJrbm93c1wiXSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInhcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInlcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYXMoc3RyaW5nMCkuVih2aWQyKS5hcyhzdHJpbmcxKS5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChzdHJpbmcwKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJ4XCIpLlYodmlkMikuQXMoXCJ5XCIpLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgRGlyZWN0aW9uLk91dCwgTWVyZ2UuT3V0ViB9LCB7IERpcmVjdGlvbi5JbiwgTWVyZ2UuSW5WIH0sIHsgVC5MYWJlbCwgXCJrbm93c1wiIH19KS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwieFwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQXMoXCJ4XCIpLlYodmlkMikuQXMoXCJ5XCIpLk1lcmdlRShtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317Z3JlbWxpbmdvLkRpcmVjdGlvbi5PdXQ6IGdyZW1saW5nby5NZXJnZS5PdXRWLCBncmVtbGluZ28uRGlyZWN0aW9uLkluOiBncmVtbGluZ28uTWVyZ2UuSW5WLCBncmVtbGluZ28uVC5MYWJlbDogXCJrbm93c1wiIH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ4XCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ5XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJ4XCIpLlYodmlkMikuYXMoXCJ5XCIpLm1lcmdlRShbKERpcmVjdGlvbi5PVVQpOk1lcmdlLm91dFYsIChEaXJlY3Rpb24uSU4pOk1lcmdlLmluViwgVC5sYWJlbDpcImtub3dzXCJdKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwieFwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcInhcIikuVih2aWQyKS5hcyhcInlcIikubWVyZ2VFKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChEaXJlY3Rpb24uT1VULCBNZXJnZS5vdXRWKTsgcHV0KERpcmVjdGlvbi5JTiwgTWVyZ2UuaW5WKTsgcHV0KFQubGFiZWwsIFwia25vd3NcIik7IH19KS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwieFwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwieVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hcyhcInhcIikuVih2aWQyKS5hcyhcInlcIikubWVyZ2VFKG5ldyBNYXAoW1tEaXJlY3Rpb24uT1VULCBNZXJnZS5vdXRWXSwgW0RpcmVjdGlvbi5JTiwgTWVyZ2UuaW5WXSwgW1QubGFiZWwsIFwia25vd3NcIl1dKSkub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInhcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInlcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ3gnKS5WKHZpZDIpLmFzXygneScpLm1lcmdlX2UoeyBEaXJlY3Rpb24uT1VUOiBNZXJnZS5vdXRfdiwgRGlyZWN0aW9uLklOOiBNZXJnZS5pbl92LCBULmxhYmVsOiAna25vd3MnIH0pLm9wdGlvbihNZXJnZS5vdXRfdiwgX18uc2VsZWN0KCd4JykpLm9wdGlvbihNZXJnZS5pbl92LCBfXy5zZWxlY3QoJ3knKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX3dpdGhfZWlkX3NwZWNpZmllZF9hbmRfaW5oZXJpdGFuY2VfMSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKG9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKFwiMjAxXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKFwiMjAxXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoXCIyMDFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKFwiMjAxXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgnMjAxJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX3dpdGhfZWlkX3NwZWNpZmllZF9hbmRfaW5oZXJpdGFuY2VfMiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKG9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKFwiMjAxXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKFwiMjAxXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoXCIyMDFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRShcIjIwMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKFwiMjAxXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgnMjAxJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX291dFZfb3ZlcnJpZGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKG9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0X3dpdGhTaWRlRWZmZWN0X21lcmdlRV9vdXRWX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKG9uQ3JlYXRlLCBzZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBncmVtbGluZ28uVF9fLlNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIF9fLnNlbGVjdCgnc2lkZUVmZmVjdDEnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX2luVl9vdmVycmlkZV9wcm9oaWJpdGVkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24ob25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VFX2luVl9keW5hbWljX292ZXJyaWRlX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihvbkNyZWF0ZSwgc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCBfXy5zZWxlY3QoJ3NpZGVFZmZlY3QxJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRV9sYWJlbF9vdmVycmlkZV9wcm9oaWJpdGVkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24ob25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX2xhYmVsX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKG9uQ3JlYXRlLCBzZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBncmVtbGluZ28uVF9fLlNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIF9fLnNlbGVjdCgnc2lkZUVmZmVjdDEnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFX2lkX292ZXJyaWRlX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihvbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlRShtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV9lKHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeHgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdF9tZXJnZUVfaWRfZHluYW1pY19vdmVycmlkZV9wcm9oaWJpdGVkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24ob25DcmVhdGUsIHNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIGdyZW1saW5nby5UX18uU2VsZWN0KFwic2lkZUVmZmVjdDFcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV9lKHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdzaWRlRWZmZWN0MScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZfbWVyZ2VFX2NvbWJpbmF0aW9uX25ld192ZXJ0aWNlcyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLmFzKFwib3V0VlwiKS5tZXJnZVYoeHgyKS5hcyhcImluVlwiKS5tZXJnZUUoeHgzKS5vcHRpb24ob3V0Viwgc2VsZWN0KFwib3V0VlwiKSkub3B0aW9uKGluViwgc2VsZWN0KFwiaW5WXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkuYXMoXCJvdXRWXCIpLm1lcmdlVih4eDIpLmFzKFwiaW5WXCIpLm1lcmdlRSh4eDMpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJvdXRWXCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJpblZcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkuYXMoXCJvdXRWXCIpLm1lcmdlVih4eDIpLmFzKFwiaW5WXCIpLm1lcmdlRSh4eDMpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJvdXRWXCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJpblZcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5hcyhzdHJpbmcwKS5tZXJnZVYobWFwMSkuYXMoc3RyaW5nMSkubWVyZ2VFKG1hcDIpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5BcyhcIm91dFZcIikuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikuQXMoXCJpblZcIikuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MykuT3B0aW9uKE1lcmdlLk91dFYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcIm91dFZcIikpLk9wdGlvbihNZXJnZS5JblYsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcImluVlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpLkFzKFwib3V0VlwiKS5NZXJnZVYoeHgyKS5BcyhcImluVlwiKS5NZXJnZUUoeHgzKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk91dFYsIGdyZW1saW5nby5UX18uU2VsZWN0KFwib3V0VlwiKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5JblYsIGdyZW1saW5nby5UX18uU2VsZWN0KFwiaW5WXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpLmFzKFwib3V0VlwiKS5tZXJnZVYoeHgyKS5hcyhcImluVlwiKS5tZXJnZUUoeHgzKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwib3V0VlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwiaW5WXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKS5hcyhcIm91dFZcIikubWVyZ2VWKHh4MikuYXMoXCJpblZcIikubWVyZ2VFKHh4Mykub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcIm91dFZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcImluVlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkuYXMoXCJvdXRWXCIpLm1lcmdlVih4eDIpLmFzKFwiaW5WXCIpLm1lcmdlRSh4eDMpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJvdXRWXCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJpblZcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpLmFzXygnb3V0VicpLm1lcmdlX3YoeHgyKS5hc18oJ2luVicpLm1lcmdlX2UoeHgzKS5vcHRpb24oTWVyZ2Uub3V0X3YsIF9fLnNlbGVjdCgnb3V0VicpKS5vcHRpb24oTWVyZ2UuaW5fdiwgX18uc2VsZWN0KCdpblYnKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXQoXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLm91dChzdHJpbmcyKS5oYXMoc3RyaW5nMCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXQoXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5vdXQoJ2tub3dzJykuaGFzKCduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWX21lcmdlRV9jb21iaW5hdGlvbl9leGlzdGluZ192ZXJ0aWNlcyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkuYXMoXCJvdXRWXCIpLm1lcmdlVih4eDIpLmFzKFwiaW5WXCIpLm1lcmdlRSh4eDMpLm9wdGlvbihvdXRWLCBzZWxlY3QoXCJvdXRWXCIpKS5vcHRpb24oaW5WLCBzZWxlY3QoXCJpblZcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKS5hcyhcIm91dFZcIikubWVyZ2VWKHh4MikuYXMoXCJpblZcIikubWVyZ2VFKHh4Mykub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcIm91dFZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcImluVlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKS5hcyhcIm91dFZcIikubWVyZ2VWKHh4MikuYXMoXCJpblZcIikubWVyZ2VFKHh4Mykub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcIm91dFZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcImluVlwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLmFzKHN0cmluZzApLm1lcmdlVihtYXAxKS5hcyhzdHJpbmcxKS5tZXJnZUUobWFwMikub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChzdHJpbmcwKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLkFzKFwib3V0VlwiKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5BcyhcImluVlwiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgzKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwib3V0VlwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwiaW5WXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkuQXMoXCJvdXRWXCIpLk1lcmdlVih4eDIpLkFzKFwiaW5WXCIpLk1lcmdlRSh4eDMpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJvdXRWXCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJpblZcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKHh4MSkuYXMoXCJvdXRWXCIpLm1lcmdlVih4eDIpLmFzKFwiaW5WXCIpLm1lcmdlRSh4eDMpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJvdXRWXCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJpblZcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpLmFzKFwib3V0VlwiKS5tZXJnZVYoeHgyKS5hcyhcImluVlwiKS5tZXJnZUUoeHgzKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwib3V0VlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwiaW5WXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKS5hcyhcIm91dFZcIikubWVyZ2VWKHh4MikuYXMoXCJpblZcIikubWVyZ2VFKHh4Mykub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcIm91dFZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcImluVlwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkuYXNfKCdvdXRWJykubWVyZ2Vfdih4eDIpLmFzXygnaW5WJykubWVyZ2VfZSh4eDMpLm9wdGlvbihNZXJnZS5vdXRfdiwgX18uc2VsZWN0KCdvdXRWJykpLm9wdGlvbihNZXJnZS5pbl92LCBfXy5zZWxlY3QoJ2luVicpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dChcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkub3V0KHN0cmluZzIpLmhhcyhzdHJpbmcwLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuT3V0KFwia25vd3NcIikuSGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dChcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikub3V0KFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdtYXJrbycpLm91dCgna25vd3MnKS5oYXMoJ25hbWUnLCAndmFkYXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWHZYX21lcmdlRVh4eDFYX29wdGlvblhNZXJnZV9vbk1hdGNoX3h4Mlhfb3B0aW9uWE1lcmdlX291dFZfc2VsZWN0WHZYWF9vcHRpb25YTWVyZ2VfaW5WX3NlbGVjdFh2WFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLHh4Mikub3B0aW9uKE1lcmdlLm91dFYsc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluVixzZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwidlwiKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KFwidlwiKSkub3B0aW9uKE1lcmdlLmluViwgX18uc2VsZWN0KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJ2XCIpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpLm9wdGlvbihNZXJnZS5vdXRWLCBfXy5zZWxlY3QoXCJ2XCIpKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKS5vcHRpb24oTWVyZ2Uub3V0ViwgX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2UuaW5WLCBfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwidlwiKS5NZXJnZUUoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKS5PcHRpb24oTWVyZ2UuT3V0ViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkuT3B0aW9uKE1lcmdlLkluViwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwidlwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCB4eDIpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT3V0ViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLkluViwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJ2XCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4Mikub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4Mikub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcInZcIikubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4Mikub3B0aW9uKE1lcmdlLm91dFYsIF9fLnNlbGVjdChcInZcIikpLm9wdGlvbihNZXJnZS5pblYsIF9fLnNlbGVjdChcInZcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygndicpLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHh4Mikub3B0aW9uKE1lcmdlLm91dF92LCBfXy5zZWxlY3QoJ3YnKSkub3B0aW9uKE1lcmdlLmluX3YsIF9fLnNlbGVjdCgndicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydHlYd2VpZ2h0XzBYWF9jb25zdGFudFhlbXB0eVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgbnVtYmVyMCkuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMSkuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb21fKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMSkuZnJvbV8oJ2EnKS50bygnYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMCkpLmNvbnN0YW50KFs6XSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMCkpLmNvbnN0YW50KFs6XSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApKS5jb25zdGFudChbOl0pKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KHN0cmluZzAsIG51bWJlcjApKS5jb25zdGFudChtYXAxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TaWRlRWZmZWN0KF9fLlByb3BlcnR5KFwid2VpZ2h0XCIsIDApKS5Db25zdGFudDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBncmVtbGluZ28uVF9fLlNpZGVFZmZlY3QoZ3JlbWxpbmdvLlRfXy5Qcm9wZXJ0eShcIndlaWdodFwiLCAwKSkuQ29uc3RhbnQobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMCkpLmNvbnN0YW50KFs6XSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0eShcIndlaWdodFwiLCAwKSkuY29uc3RhbnQobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApKS5jb25zdGFudChuZXcgTWFwKFtdKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIF9fLnNpZGVfZWZmZWN0KF9fLnByb3BlcnR5KCd3ZWlnaHQnLCAwKSkuY29uc3RhbnQoeyAgfSkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwwKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJ3ZWlnaHRcIiwgMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgna25vd3MnKS5oYXMoJ3dlaWdodCcsIDApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlRVhsYWJlbF9rbm93c19vdXRfbWFya29faW5fdmFkYXNYX29wdGlvblhvbk1hdGNoX3NpZGVFZmZlY3RYcHJvcGVydHlYd2VpZ2h0XzBYWF9jb25zdGFudFhlbXB0eVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb20oXCJhXCIpLnRvKFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgbnVtYmVyMCkuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMSkuZnJvbShcImFcIikudG8oXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxKS5mcm9tKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEpLmZyb21fKFwiYVwiKS50byhcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMSkuZnJvbV8oJ2EnKS50bygnYicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0eShcIndlaWdodFwiLCAwKSkuY29uc3RhbnQoWzpdKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApKS5jb25zdGFudChbOl0pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApKS5jb25zdGFudChbOl0pKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoc3RyaW5nMCwgbnVtYmVyMCkpLmNvbnN0YW50KG1hcDEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0eShcIndlaWdodFwiLCAwKSkuQ29uc3RhbnQ8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VFKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBncmVtbGluZ28uVF9fLlNpZGVFZmZlY3QoZ3JlbWxpbmdvLlRfXy5Qcm9wZXJ0eShcIndlaWdodFwiLCAwKSkuQ29uc3RhbnQobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0eShcIndlaWdodFwiLCAwKSkuY29uc3RhbnQoWzpdKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMCkpLmNvbnN0YW50KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7ICB9fSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KFwid2VpZ2h0XCIsIDApKS5jb25zdGFudChuZXcgTWFwKFtdKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgX18uc2lkZV9lZmZlY3QoX18ucHJvcGVydHkoJ3dlaWdodCcsIDApKS5jb25zdGFudCh7ICB9KSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwid2VpZ2h0XCIsIDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnd2VpZ2h0JywgMSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLDApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnd2VpZ2h0JywgMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCd3ZWlnaHQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ191bmlvblhzZWxlY3RYbWFwWF9zZWxlY3RYbWFwWF9jb25zdGFudFhjcmVhdGVkX05YWF9mb2xkX2FzWG1YX21lcmdlRVhzZWxlY3RYbVhfbGltaXRYbG9jYWxfMVhfdW5mb2xkWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YX3JhbmdlWGxvY2FsXzFfMlhfdW5mb2xkWF9vcHRpb25Yb25NYXRjaF9zZWxlY3RYbVhfdGFpbFhsb2NhbFhfdW5mb2xkWF90b19tYXRjaCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmcyKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNikucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmc5KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmcxMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTIpLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTApLmFkZEUoc3RyaW5nMTMpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMikudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzExKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ3JpcHBsZScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdwZXRlcicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy51bmlvbihzZWxlY3QoXCJtYXBcIiksIHNlbGVjdChcIm1hcFwiKSwgY29uc3RhbnQoW2NyZWF0ZWQ6IFwiTlwiXSkpLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VFKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcudW5pb24oX18uc2VsZWN0KFwibWFwXCIpLCBfXy5zZWxlY3QoXCJtYXBcIiksIF9fLmNvbnN0YW50KFtjcmVhdGVkOlwiTlwiXSkpLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VFKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy51bmlvbihfXy5zZWxlY3QoXCJtYXBcIiksIF9fLnNlbGVjdChcIm1hcFwiKSwgX18uY29uc3RhbnQoW2NyZWF0ZWQ6XCJOXCJdKSkuZm9sZCgpLmFzKFwibVwiKS5tZXJnZUUoX18uc2VsZWN0KFwibVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy51bmlvbihfXy5zZWxlY3Qoc3RyaW5nMCksIF9fLnNlbGVjdChzdHJpbmcwKSwgX18uY29uc3RhbnQobWFwMCkpLmZvbGQoKS5hcyhzdHJpbmcxKS5tZXJnZUUoX18uc2VsZWN0KHN0cmluZzEpLmxpbWl0KFNjb3BlLmxvY2FsLCBudW1iZXIwKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3Qoc3RyaW5nMSkucmFuZ2UoU2NvcGUubG9jYWwsIG51bWJlcjAsIG51bWJlcjEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KHN0cmluZzEpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlVuaW9uPG9iamVjdD4oX18uU2VsZWN0PG9iamVjdD4oXCJtYXBcIiksIF9fLlNlbGVjdDxvYmplY3Q+KFwibWFwXCIpLCBfXy5Db25zdGFudDxvYmplY3Q+KG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImNyZWF0ZWRcIiwgXCJOXCIgfX0pKS5Gb2xkKCkuQXMoXCJtXCIpLk1lcmdlRSgoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpLkxpbWl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwpLlVuZm9sZDxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5VbmlvbihncmVtbGluZ28uVF9fLlNlbGVjdChcIm1hcFwiKSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtYXBcIiksIGdyZW1saW5nby5UX18uQ29uc3RhbnQobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiY3JlYXRlZFwiOiBcIk5cIiB9KSkuRm9sZCgpLkFzKFwibVwiKS5NZXJnZUUoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtXCIpLkxpbWl0KGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSkuVW5mb2xkKCkpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKS5SYW5nZShncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEsIDIpLlVuZm9sZCgpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuVW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcudW5pb24oX18uc2VsZWN0KFwibWFwXCIpLCBfXy5zZWxlY3QoXCJtYXBcIiksIF9fLmNvbnN0YW50KFtjcmVhdGVkOlwiTlwiXSkpLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VFKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcudW5pb24oX18uc2VsZWN0KFwibWFwXCIpLCBfXy5zZWxlY3QoXCJtYXBcIiksIF9fLmNvbnN0YW50KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImNyZWF0ZWRcIiwgXCJOXCIpOyB9fSkpLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VFKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcudW5pb24oX18uc2VsZWN0KFwibWFwXCIpLCBfXy5zZWxlY3QoXCJtYXBcIiksIF9fLmNvbnN0YW50KG5ldyBNYXAoW1tcImNyZWF0ZWRcIiwgXCJOXCJdXSkpKS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlRShfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcudW5pb24oX18uc2VsZWN0KCdtYXAnKSwgX18uc2VsZWN0KCdtYXAnKSwgX18uY29uc3RhbnQoeyAnY3JlYXRlZCc6ICdOJyB9KSkuZm9sZCgpLmFzXygnbScpLm1lcmdlX2UoX18uc2VsZWN0KCdtJykubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCBfXy5zZWxlY3QoJ20nKS5yYW5nZV8oU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIF9fLnNlbGVjdCgnbScpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhcyhcImNyZWF0ZWRcIixcIk5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXMoJ2NyZWF0ZWQnLCAnTicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5vdXRFKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLFwiTlwiKS5pblYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5vdXRFKHN0cmluZzMpLmhhcyhzdHJpbmc0LCBzdHJpbmc1KS5pblYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dEUoXCJrbm93c1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5JblYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuT3V0RShcImtub3dzXCIpLkhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLkluVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0RShcImtub3dzXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpLmluVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXRFKFwia25vd3NcIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikuaW5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5vdXRfZSgna25vd3MnKS5oYXMoJ2NyZWF0ZWQnLCAnTicpLmluX3YoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfdW5pb25Yc2VsZWN0WG1hcFhfc2VsZWN0WG1hcFhfY29uc3RhbnRYY3JlYXRlZF9OWFhfZm9sZF9hc1htWF9tZXJnZUVYc2VsZWN0WG1YX2xpbWl0WGxvY2FsXzFYX3VuZm9sZFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YX3RhaWxYbG9jYWxYX3VuZm9sZFhfdG9fY3JlYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLnVuaW9uKHNlbGVjdChcIm1hcFwiKSwgc2VsZWN0KFwibWFwXCIpLCBjb25zdGFudChbY3JlYXRlZDpcIk5cIl0pKS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlRShfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLnVuaW9uKF9fLnNlbGVjdChcIm1hcFwiKSwgX18uc2VsZWN0KFwibWFwXCIpLCBfXy5jb25zdGFudChbY3JlYXRlZDpcIk5cIl0pKS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlRShfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcudW5pb24oX18uc2VsZWN0KFwibWFwXCIpLCBfXy5zZWxlY3QoXCJtYXBcIiksIF9fLmNvbnN0YW50KFtjcmVhdGVkOlwiTlwiXSkpLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VFKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcudW5pb24oX18uc2VsZWN0KHN0cmluZzApLCBfXy5zZWxlY3Qoc3RyaW5nMCksIF9fLmNvbnN0YW50KG1hcDApKS5mb2xkKCkuYXMoc3RyaW5nMSkubWVyZ2VFKF9fLnNlbGVjdChzdHJpbmcxKS5saW1pdChTY29wZS5sb2NhbCwgbnVtYmVyMCkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KHN0cmluZzEpLnJhbmdlKFNjb3BlLmxvY2FsLCBudW1iZXIwLCBudW1iZXIxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChzdHJpbmcxKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5VbmlvbjxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KFwibWFwXCIpLCBfXy5TZWxlY3Q8b2JqZWN0PihcIm1hcFwiKSwgX18uQ29uc3RhbnQ8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJjcmVhdGVkXCIsIFwiTlwiIH19KSkuRm9sZCgpLkFzKFwibVwiKS5NZXJnZUUoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKS5MaW1pdDxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcIm1cIikuUmFuZ2U8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSwgMikuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcIm1cIikuVGFpbDxvYmplY3Q+KFNjb3BlLkxvY2FsKS5VbmZvbGQ8b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVW5pb24oZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtYXBcIiksIGdyZW1saW5nby5UX18uU2VsZWN0KFwibWFwXCIpLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImNyZWF0ZWRcIjogXCJOXCIgfSkpLkZvbGQoKS5BcyhcIm1cIikuTWVyZ2VFKGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKS5MaW1pdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEpLlVuZm9sZCgpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBncmVtbGluZ28uVF9fLlNlbGVjdChcIm1cIikuUmFuZ2UoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQoKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBncmVtbGluZ28uVF9fLlNlbGVjdChcIm1cIikuVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwpLlVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLnVuaW9uKF9fLnNlbGVjdChcIm1hcFwiKSwgX18uc2VsZWN0KFwibWFwXCIpLCBfXy5jb25zdGFudChbY3JlYXRlZDpcIk5cIl0pKS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlRShfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLnVuaW9uKF9fLnNlbGVjdChcIm1hcFwiKSwgX18uc2VsZWN0KFwibWFwXCIpLCBfXy5jb25zdGFudChuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJjcmVhdGVkXCIsIFwiTlwiKTsgfX0pKS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlRShfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLnVuaW9uKF9fLnNlbGVjdChcIm1hcFwiKSwgX18uc2VsZWN0KFwibWFwXCIpLCBfXy5jb25zdGFudChuZXcgTWFwKFtbXCJjcmVhdGVkXCIsIFwiTlwiXV0pKSkuZm9sZCgpLmFzKFwibVwiKS5tZXJnZUUoX18uc2VsZWN0KFwibVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLnVuaW9uKF9fLnNlbGVjdCgnbWFwJyksIF9fLnNlbGVjdCgnbWFwJyksIF9fLmNvbnN0YW50KHsgJ2NyZWF0ZWQnOiAnTicgfSkpLmZvbGQoKS5hc18oJ20nKS5tZXJnZV9lKF9fLnNlbGVjdCgnbScpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdtJykucmFuZ2VfKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zZWxlY3QoJ20nKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNOb3QoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNOb3QoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNOb3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc05vdChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkuaGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5oYXNfbm90KCdjcmVhdGVkJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXNOb3QoXCJjcmVhdGVkXCIpLmluVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikub3V0RShcImtub3dzXCIpLmhhc05vdChcImNyZWF0ZWRcIikuaW5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5vdXRFKFwia25vd3NcIikuaGFzTm90KFwiY3JlYXRlZFwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5vdXRFKHN0cmluZzMpLmhhc05vdChzdHJpbmc0KS5pblYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLk91dEUoXCJrbm93c1wiKS5IYXNOb3QoXCJjcmVhdGVkXCIpLkluVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5PdXRFKFwia25vd3NcIikuSGFzTm90KFwiY3JlYXRlZFwiKS5JblYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXNOb3QoXCJjcmVhdGVkXCIpLmluVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXNOb3QoXCJjcmVhdGVkXCIpLmluVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm91dEUoXCJrbm93c1wiKS5oYXNOb3QoXCJjcmVhdGVkXCIpLmluVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykub3V0X2UoJ2tub3dzJykuaGFzX25vdCgnY3JlYXRlZCcpLmluX3YoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpLm91dEUoXCJzZWxmXCIpLmhhc05vdChcIndlaWdodFwiKS5pblYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLm91dEUoXCJzZWxmXCIpLmhhc05vdChcIndlaWdodFwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLm91dEUoXCJzZWxmXCIpLmhhc05vdChcIndlaWdodFwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5vdXRFKHN0cmluZzMpLmhhc05vdChzdHJpbmc0KS5pblYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLk91dEUoXCJzZWxmXCIpLkhhc05vdChcIndlaWdodFwiKS5JblYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuT3V0RShcInNlbGZcIikuSGFzTm90KFwid2VpZ2h0XCIpLkluVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikub3V0RShcInNlbGZcIikuaGFzTm90KFwid2VpZ2h0XCIpLmluVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLm91dEUoXCJzZWxmXCIpLmhhc05vdChcIndlaWdodFwiKS5pblYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKS5vdXRFKFwic2VsZlwiKS5oYXNOb3QoXCJ3ZWlnaHRcIikuaW5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAndmFkYXMnKS5vdXRfZSgnc2VsZicpLmhhc19ub3QoJ3dlaWdodCcpLmluX3YoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3ZhZGFzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfd2VpZ2h0X251bGxYX2FsbG93ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsMS4wZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYXMoc3RyaW5nMykuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5hcyhzdHJpbmc1KS5hZGRFKHN0cmluZzYpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nNywgZG91YmxlMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZUUobWFwMCkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VFKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlRSh4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfZSh4eDEpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIixudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKS5IYXMoXCJ3ZWlnaHRcIiwgKG9iamVjdCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnd2VpZ2h0JywgTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uTWF0Y2hfd2VpZ2h0X251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLDEuMGQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNSkuYWRkRShzdHJpbmc2KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzcsIGRvdWJsZTApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5hc18oJ2EnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VFKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VFKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlRSgoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZUUoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZUUoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX2UoeHgxKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHh4MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXNMYWJlbChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuSGFzTGFiZWwoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgna25vd3MnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApLmhhcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5IYXNMYWJlbChcImtub3dzXCIpLkhhcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwia25vd3NcIikuSGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLmhhc0xhYmVsKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5oYXNMYWJlbChcImtub3dzXCIpLmhhcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkuaGFzX2xhYmVsKCdrbm93cycpLmhhcygnd2VpZ2h0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWGVtcHR5WF9vcHRpb25Yb25NYXRjaF9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317IH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCAoTWFwKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiLDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZVZYZW1wdHlYX29wdGlvblhvbk1hdGNoX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCAoTWFwKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7ICB9fSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tZXJnZV92KHsgIH0pLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiLDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWG51bGxYX29wdGlvblhvbkNyZWF0ZV9sYWJlbF9udWxsX25hbWVfbWFya29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZVZYbnVsbFhfb3B0aW9uWG9uQ3JlYXRlX2xhYmVsX251bGxfbmFtZV9tYXJrb1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWVyZ2VWKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tZXJnZV92KHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX29wdGlvblhvbkNyZWF0ZV9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgKE1hcCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIE5vbmUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCAoTWFwKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tZXJnZV92KHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhudWxsWF9vcHRpb25Yb25DcmVhdGVfZW1wdHlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSxbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYobnVsbCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbOl0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgWzpdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihuaWwpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoKE1hcCkgbnVsbCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbOl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihudWxsKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7ICB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfdihOb25lKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB7ICB9KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21lcmdlVlhudWxsWF9vcHRpb25Yb25DcmVhdGVfZW1wdHlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1lcmdlVihudWxsKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsWzpdKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1lcmdlVihudWxsKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFs6XSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgWzpdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG51bGwpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1lcmdlVihuaWwpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubWVyZ2VWKChNYXApIG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgWzpdKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWVyZ2VWKG51bGwpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm1lcmdlX3YoTm9uZSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeyAgfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWGVtcHR5WF9ub19leGlzdGluZyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoWzpdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihuZXcgTWFwKFtdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgwWF9tZXJnZVZYZW1wdHlYX25vX2V4aXN0aW5nIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDApLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMCkubWVyZ2VWKFs6XSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMCkubWVyZ2VWKFs6XSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMCkuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMCkubWVyZ2VWKFs6XSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgwKS5tZXJnZVYobmV3IE1hcChbXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDApLm1lcmdlX3YoeyAgfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWGVtcHR5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoWzpdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihuZXcgTWFwKFtdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJywgMjkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWVyZ2VWWGVtcHR5WF90d29fZXhpc3QiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWVyZ2VWKFs6XSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWVyZ2VWKFs6XSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317IH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1lcmdlVihbOl0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubWVyZ2VWKG5ldyBNYXAoW10pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5tZXJnZV92KHsgIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJ2YWRhc1wiKS5oYXMoXCJhZ2VcIiwyNykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuaGFzKFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuaGFzKFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuSGFzKFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKS5IYXMoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJ2YWRhc1wiKS5oYXMoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwidmFkYXNcIikuaGFzKFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInZhZGFzXCIpLmhhcyhcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICd2YWRhcycpLmhhcygnYWdlJywgMjcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoKE1hcCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoTm9uZSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWG51bGx2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9tZXJnZVZYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWVyZ2VWKG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubWVyZ2VWKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm1lcmdlVihudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWVyZ2VWKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk1lcmdlVihuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1lcmdlVigoTWFwKSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubWVyZ2VWKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5tZXJnZVYobnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWVyZ2VfdihOb25lKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeHgxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeHgxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSx4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLkhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKS5oYXMoJ2FnZScsIDE5KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV8xOVhfb3B0aW9uIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gseHgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdhZ2UnLCAxOSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYY19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF93aXRoU2lkZUVmZmVjdFhtX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5fYWdlXzE5WF9tZXJnZVZYc2VsZWN0WGNYWF9vcHRpb25Yb25DcmVhdGVfc2VsZWN0WG1YWF9vcHRpb24iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYoX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwiY1wiKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKGdyZW1saW5nby5UX18uU2VsZWN0KFwiY1wiKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfdihfXy5zZWxlY3QoJ2MnKSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdtJykpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLkhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKS5oYXMoJ2FnZScsIDE5KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF93aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9vcHRpb24iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYoX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KHN0cmluZzEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJjXCIpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihncmVtbGluZ28uVF9fLlNlbGVjdChcImNcIikpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfdihfXy5zZWxlY3QoJ2MnKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zZWxlY3QoJ20nKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJywgMTkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb1hfcHJvcGVydHlYbmFtZV92YWRhc19hY2xfcHVibGljWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLFwidmFkYXNcIixcImFjbFwiLFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiLCBcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIsIFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5wcm9wZXJ0eShzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIsIFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiLCBcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIsIFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIsIFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIsIFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJywgJ2FjbCcsICdwdWJsaWMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhc1ZhbHVlKFwidmFkYXNcIikuaGFzKFwiYWNsXCIsXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInZhZGFzXCIpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInZhZGFzXCIpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvcGVydGllcyhzdHJpbmcwKS5oYXNWYWx1ZShzdHJpbmcxKS5oYXMoc3RyaW5nMiwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KFwibmFtZVwiKS5IYXNWYWx1ZShcInZhZGFzXCIpLkhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoXCJuYW1lXCIpLkhhc1ZhbHVlKFwidmFkYXNcIikuSGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhc1ZhbHVlKFwidmFkYXNcIikuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInZhZGFzXCIpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuaGFzVmFsdWUoXCJ2YWRhc1wiKS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygnbmFtZScpLmhhc192YWx1ZSgndmFkYXMnKS5oYXMoJ2FjbCcsICdwdWJsaWMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDApLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMCkuTWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgwKS5tZXJnZV92KHh4MSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5tZXJnZVYobWFwMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDApLk1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMCkubWVyZ2Vfdih4eDEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDBYX21lcmdlVlhsYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9vcHRpb25Yb25DcmVhdGVfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlbl9hZ2VfMTlYX29wdGlvbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUseHgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMCkuTWVyZ2VWKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDApLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLkhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKS5oYXMoJ2FnZScsIDE5KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMFhfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2VfMTlYX29wdGlvbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCx4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDApLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDApLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHh4MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJywgMTkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfc3RlcGhlblhfd2l0aFNpZGVFZmZlY3RYbV9sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuX2FnZV8xOVhfaW5qZWN0WDBYX21lcmdlVlhzZWxlY3RYY1hYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYbVhYX29wdGlvbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgwKS5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5tZXJnZVYoX18uc2VsZWN0KHN0cmluZzApKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwiY1wiKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDApLk1lcmdlVihncmVtbGluZ28uVF9fLlNlbGVjdChcImNcIikpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgwKS5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgwKS5tZXJnZV92KF9fLnNlbGVjdCgnYycpKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCBfXy5zZWxlY3QoJ20nKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbicpLmhhcygnYWdlJywgMTkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGNfbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9pbmplY3RYMFhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YWF9vcHRpb24iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMCkubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkubWVyZ2VWKF9fLnNlbGVjdChzdHJpbmcwKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigwKS5NZXJnZVYoKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwiY1wiKSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMCkuTWVyZ2VWKGdyZW1saW5nby5UX18uU2VsZWN0KFwiY1wiKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBncmVtbGluZ28uVF9fLlNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDApLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMCkubWVyZ2VfdihfXy5zZWxlY3QoJ2MnKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zZWxlY3QoJ20nKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJywgMTkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgwWF9tZXJnZVZYbGFiZWxfcGVyc29uX25hbWVfbWFya29YX3Byb3BlcnR5WG5hbWVfdmFkYXNfYWNsX3B1YmxpY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkucHJvcGVydHkoXCJuYW1lXCIsXCJ2YWRhc1wiLFwiYWNsXCIsXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiLCBcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiLCBcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkubWVyZ2VWKG1hcDApLnByb3BlcnR5KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMCkuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIiwgXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgwKS5NZXJnZVYoeHgxKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiLCBcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgwKS5tZXJnZVYoeHgxKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiLCBcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMCkubWVyZ2VWKHh4MSkucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIiwgXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDApLm1lcmdlVih4eDEpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIsIFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDApLm1lcmdlX3YoeHgxKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycsICdhY2wnLCAncHVibGljJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInZhZGFzXCIpLmhhcyhcImFjbFwiLFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuaGFzVmFsdWUoXCJ2YWRhc1wiKS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuaGFzVmFsdWUoXCJ2YWRhc1wiKS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoc3RyaW5nMCkuaGFzVmFsdWUoc3RyaW5nMSkuaGFzKHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuSGFzVmFsdWUoXCJ2YWRhc1wiKS5IYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKFwibmFtZVwiKS5IYXNWYWx1ZShcInZhZGFzXCIpLkhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInZhZGFzXCIpLmhhcyhcImFjbFwiLCBcInB1YmxpY1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuaGFzVmFsdWUoXCJ2YWRhc1wiKS5oYXMoXCJhY2xcIiwgXCJwdWJsaWNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhc1ZhbHVlKFwidmFkYXNcIikuaGFzKFwiYWNsXCIsIFwicHVibGljXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoJ25hbWUnKS5oYXNfdmFsdWUoJ3ZhZGFzJykuaGFzKCdhY2wnLCAncHVibGljJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGxhYmVsX3BlcnNvbl9uYW1lX21hcmtvX2xhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX21lcmdlVlhpZGVudGl0eVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwic3RlcGhlblwiXSkubWVyZ2VWKF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwic3RlcGhlblwiXSkubWVyZ2VWKF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJtYXJrb1wiXSwgW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcInN0ZXBoZW5cIl0pLm1lcmdlVihfXy5pZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobWFwMCwgbWFwMSkubWVyZ2VWKF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsIFwicGVyc29uXCIgfSwgeyBcIm5hbWVcIiwgXCJtYXJrb1wiIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgXCJwZXJzb25cIiB9LCB7IFwibmFtZVwiLCBcInN0ZXBoZW5cIiB9fSkuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5JZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtncmVtbGluZ28uVC5MYWJlbDogXCJwZXJzb25cIiwgXCJuYW1lXCI6IFwibWFya29cIiB9LCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317Z3JlbWxpbmdvLlQuTGFiZWw6IFwicGVyc29uXCIsIFwibmFtZVwiOiBcInN0ZXBoZW5cIiB9KS5NZXJnZVYoZ3JlbWxpbmdvLlRfXy5JZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwibWFya29cIl0sIFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJzdGVwaGVuXCJdKS5tZXJnZVYoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChULmxhYmVsLCBcInBlcnNvblwiKTsgcHV0KFwibmFtZVwiLCBcIm1hcmtvXCIpOyB9fSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFQubGFiZWwsIFwicGVyc29uXCIpOyBwdXQoXCJuYW1lXCIsIFwic3RlcGhlblwiKTsgfX0pLm1lcmdlVihfXy5pZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IE1hcChbW1QubGFiZWwsIFwicGVyc29uXCJdLCBbXCJuYW1lXCIsIFwibWFya29cIl1dKSwgbmV3IE1hcChbW1QubGFiZWwsIFwicGVyc29uXCJdLCBbXCJuYW1lXCIsIFwic3RlcGhlblwiXV0pKS5tZXJnZVYoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoeyBULmxhYmVsOiAncGVyc29uJywgJ25hbWUnOiAnbWFya28nIH0sIHsgVC5sYWJlbDogJ3BlcnNvbicsICduYW1lJzogJ3N0ZXBoZW4nIH0pLm1lcmdlX3YoX18uaWRlbnRpdHkoKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ3N0ZXBoZW4nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhsYWJlbF9wZXJzb25fbmFtZV9tYXJrb19sYWJlbF9wZXJzb25fbmFtZV9zdGVwaGVuWF9tZXJnZVYiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwic3RlcGhlblwiXSkubWVyZ2VWKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwibWFya29cIl0sIFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJzdGVwaGVuXCJdKS5tZXJnZVYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwibWFya29cIl0sIFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJzdGVwaGVuXCJdKS5tZXJnZVYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobWFwMCwgbWFwMSkubWVyZ2VWKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgXCJwZXJzb25cIiB9LCB7IFwibmFtZVwiLCBcIm1hcmtvXCIgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCBcInBlcnNvblwiIH0sIHsgXCJuYW1lXCIsIFwic3RlcGhlblwiIH19KS5NZXJnZVYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtncmVtbGluZ28uVC5MYWJlbDogXCJwZXJzb25cIiwgXCJuYW1lXCI6IFwibWFya29cIiB9LCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317Z3JlbWxpbmdvLlQuTGFiZWw6IFwicGVyc29uXCIsIFwibmFtZVwiOiBcInN0ZXBoZW5cIiB9KS5NZXJnZVYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwibWFya29cIl0sIFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJzdGVwaGVuXCJdKS5tZXJnZVYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFQubGFiZWwsIFwicGVyc29uXCIpOyBwdXQoXCJuYW1lXCIsIFwibWFya29cIik7IH19LCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoVC5sYWJlbCwgXCJwZXJzb25cIik7IHB1dChcIm5hbWVcIiwgXCJzdGVwaGVuXCIpOyB9fSkubWVyZ2VWKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBNYXAoW1tULmxhYmVsLCBcInBlcnNvblwiXSwgW1wibmFtZVwiLCBcIm1hcmtvXCJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCBcInBlcnNvblwiXSwgW1wibmFtZVwiLCBcInN0ZXBoZW5cIl1dKSkubWVyZ2VWKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoeyBULmxhYmVsOiAncGVyc29uJywgJ25hbWUnOiAnbWFya28nIH0sIHsgVC5sYWJlbDogJ3BlcnNvbicsICduYW1lJzogJ3N0ZXBoZW4nIH0pLm1lcmdlX3YoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWGxhYmVsX3BlcnNvbl9uYW1lX3N0ZXBoZW5YX3Byb3BlcnR5WGxpc3RfbmFtZV9zdGV2ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KGxpc3QsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJuYW1lXCIsIFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICduYW1lJywgJ3N0ZXBoZW4nKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCxcIm5hbWVcIixcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcIm5hbWVcIiwgXCJzdGV2ZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVih4eDEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwibmFtZVwiLCBcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwibmFtZVwiLCBcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJuYW1lXCIsIFwic3RldmVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcIm5hbWVcIiwgXCJzdGV2ZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcIm5hbWVcIiwgXCJzdGV2ZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcIm5hbWVcIiwgXCJzdGV2ZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeHgxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0XywgJ25hbWUnLCAnc3RldmUnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhc1ZhbHVlKFwic3RldmVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhc1ZhbHVlKFwic3RldmVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoc3RyaW5nMCkuaGFzVmFsdWUoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KFwibmFtZVwiKS5IYXNWYWx1ZShcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcyhcIm5hbWVcIikuSGFzVmFsdWUoXCJzdGV2ZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXZlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoJ25hbWUnKS5oYXNfdmFsdWUoJ3N0ZXZlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuaGFzVmFsdWUoXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKHN0cmluZzApLmhhc1ZhbHVlKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuSGFzVmFsdWUoXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcyhcIm5hbWVcIikuSGFzVmFsdWUoXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpLmhhc1ZhbHVlKFwic3RlcGhlblwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikuaGFzVmFsdWUoXCJzdGVwaGVuXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS5oYXNWYWx1ZShcInN0ZXBoZW5cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygnbmFtZScpLmhhc192YWx1ZSgnc3RlcGhlbicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvcGVydGllcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUHJvcGVydGllcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnByb3BlcnRpZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9wZXJ0aWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VYbGFiZWxfcGVyc29uX25hbWVfdmFkYXNYX29wdGlvblhvbk1hdGNoX2FnZV8zNVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3ZhZGFzJykucHJvcGVydHkoJ2FnZScsIDI3KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHh4MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwzNSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiLCAzNSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwiYWdlXCIsIDM1KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMzUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgMzUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbWFwWG1lcmdlWGxhYmVsX3BlcnNvbl9uYW1lX2pvc2hYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInN0ZXBoZW5cIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwic3RlcGhlblwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3N0ZXBoZW4nKS5wcm9wZXJ0eSgnYWdlJywgMjcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWFwKF9fLm1lcmdlVih4eDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hcChfXy5tZXJnZVYoeHgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWFwKF9fLm1lcmdlVih4eDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWFwKF9fLm1lcmdlVihtYXAwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTWFwPG9iamVjdD4oX18uTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWFwKGdyZW1saW5nby5UX18uTWVyZ2VWKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hcChfXy5tZXJnZVYoeHgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hcChfXy5tZXJnZVYoeHgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hcChfXy5tZXJnZVYoeHgxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWFwKF9fLm1lcmdlX3YoeHgxKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJqb3NoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImpvc2hcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJqb3NoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiam9zaFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2pvc2gnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhjX2xhYmVsX3BlcnNvbl9uYW1lX21hcmtvWF93aXRoU2lkZUVmZmVjdFhtX2FnZV8xOVhfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb24iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKFwiYWdlXCIpLmRyb3AoKSkuc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKFwiYWdlXCIpLmRyb3AoKSkuc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcImFnZVwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihfXy5zZWxlY3Qoc3RyaW5nMCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoc3RyaW5nMSkuZHJvcCgpKS5zZWxlY3Qoc3RyaW5nMikpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcImNcIikpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2lkZUVmZmVjdChfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oXCJhZ2VcIikuRHJvcCgpKS5TZWxlY3Q8b2JqZWN0PihcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJjXCIpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIGdyZW1saW5nby5UX18uU2lkZUVmZmVjdChncmVtbGluZ28uVF9fLlByb3BlcnRpZXMoXCJhZ2VcIikuRHJvcCgpKS5TZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihfXy5zZWxlY3QoXCJjXCIpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKFwiYWdlXCIpLmRyb3AoKSkuc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKF9fLnNlbGVjdChcImNcIikpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoXCJhZ2VcIikuZHJvcCgpKS5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoX18uc2VsZWN0KFwiY1wiKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcImFnZVwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2VfdihfXy5zZWxlY3QoJ2MnKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zaWRlX2VmZmVjdChfXy5wcm9wZXJ0aWVzKCdhZ2UnKS5kcm9wKCkpLnNlbGVjdCgnbScpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdhZ2UnLCAxOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5oYXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WG1fYWdlXzE5WF9WX2hhc1hwZXJzb25fbmFtZV9tYXJrb1hfbWVyZ2VWWHNlbGVjdFhjWFhfb3B0aW9uWG9uTWF0Y2hfc2lkZUVmZmVjdFhwcm9wZXJ0aWVzWGFnZVhfZHJvcFhfc2VsZWN0WG1YWF9vcHRpb24iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcImFnZVwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoXCJhZ2VcIikuZHJvcCgpKS5zZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcImFnZVwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zaWRlRWZmZWN0KF9fLnByb3BlcnRpZXMoc3RyaW5nMykuZHJvcCgpKS5zZWxlY3Qoc3RyaW5nNCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt9KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNpZGVFZmZlY3QoX18uUHJvcGVydGllczxvYmplY3Q+KFwiYWdlXCIpLkRyb3AoKSkuU2VsZWN0PG9iamVjdD4oXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIGdyZW1saW5nby5UX18uU2lkZUVmZmVjdChncmVtbGluZ28uVF9fLlByb3BlcnRpZXMoXCJhZ2VcIikuRHJvcCgpKS5TZWxlY3QoXCJtXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcImFnZVwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7ICB9fSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNpZGVFZmZlY3QoX18ucHJvcGVydGllcyhcImFnZVwiKS5kcm9wKCkpLnNlbGVjdChcIm1cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2lkZUVmZmVjdChfXy5wcm9wZXJ0aWVzKFwiYWdlXCIpLmRyb3AoKSkuc2VsZWN0KFwibVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLm1lcmdlX3YoeyAgfSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zaWRlX2VmZmVjdChfXy5wcm9wZXJ0aWVzKCdhZ2UnKS5kcm9wKCkpLnNlbGVjdCgnbScpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAxOSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMTkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDE5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdhZ2UnLCAxOSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVl9vbkNyZWF0ZV9pbmhlcml0YW5jZV9leGlzdGluZyIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWlrZVwiKS5wcm9wZXJ0eShULmlkLCBcIjFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWlrZVwiKS5wcm9wZXJ0eShULmlkLCBcIjFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1pa2VcIikucHJvcGVydHkoVC5pZCwgXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoVC5pZCwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1pa2VcIikuUHJvcGVydHkoVC5JZCwgXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1pa2VcIikuUHJvcGVydHkoZ3JlbWxpbmdvLlQuSWQsIFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWlrZVwiKS5wcm9wZXJ0eShULmlkLCBcIjFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtaWtlXCIpLnByb3BlcnR5KFQuaWQsIFwiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1pa2VcIikucHJvcGVydHkoVC5pZCwgXCIxXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21pa2UnKS5wcm9wZXJ0eShULmlkXywgJzEnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeHgxKS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB4eDIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKFwiMVwiKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoXCIxXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVihcIjFcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVihzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKFwiMVwiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVihcIjFcIikuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKFwiMVwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKFwiMVwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKFwiMVwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoJzEnKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21pa2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZfb25DcmVhdGVfaW5oZXJpdGFuY2VfbmV3XzEiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoXCIxXCIpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVihcIjFcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKFwiMVwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoXCIxXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKFwiMVwiKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoXCIxXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoXCIxXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoXCIxXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVignMScpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWlrZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVl9vbkNyZWF0ZV9pbmhlcml0YW5jZV9uZXdfMiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeHgyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVihcIjFcIikuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKFwiMVwiKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWlrZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoXCIxXCIpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVihcIjFcIikuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoXCIxXCIpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtaWtlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVihcIjFcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVihcIjFcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVihcIjFcIikuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1pa2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCcxJykuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtaWtlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWX2xhYmVsX292ZXJyaWRlX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24ob25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RfbWVyZ2VWX2xhYmVsX2R5bmFtaWNfb3ZlcnJpZGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihvbkNyZWF0ZSwgc2VsZWN0KCdzaWRlRWZmZWN0MScpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoJ3NpZGVFZmZlY3QxJykpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoJ3NpZGVFZmZlY3QxJykpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcInNpZGVFZmZlY3QxXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKHh4MSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdCgnc2lkZUVmZmVjdDEnKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJzaWRlRWZmZWN0MVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdzaWRlRWZmZWN0MScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZfaWRfb3ZlcnJpZGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihvbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKHh4MSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYoeHgxKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeHgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZfaGlkZGVuX2lkX2tleV9wcm9oaWJpdGVkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVl9oaWRkZW5fbGFiZWxfdmFsdWVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYoeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVih4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih4eDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVl9oaWRkZW5faWRfa2V5X29uQ3JlYXRlX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25DcmVhdGVfcHJvaGliaXRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeyAgfSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZfaGlkZGVuX2xhYmVsX3ZhbHVlX29uQ3JlYXRlX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXsgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW10pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pLm9wdGlvbihNZXJnZS5vbl9jcmVhdGUsIHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWX2hpZGRlbl9pZF9rZXlfb25NYXRjaF9tYXRjaGVkX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwidmVydGV4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwidmVydGV4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJ2ZXJ0ZXhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwidmVydGV4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3ZlcnRleCcpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317IH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZfaGlkZGVuX2xhYmVsX2tleV9tYXRjaGVkX29uTWF0Y2hfbWF0Y2hlZF9wcm9oaWJpdGVkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJ2ZXJ0ZXhcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJ2ZXJ0ZXhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJ2ZXJ0ZXhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwidmVydGV4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJ2ZXJ0ZXhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInZlcnRleFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCd2ZXJ0ZXgnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge30pLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9eyB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgIH19KS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYobmV3IE1hcChbXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih7ICB9KS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV9saXN0WDMzWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbbmFtZTogXCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFthZ2U6IENhcmRpbmFsaXR5Lmxpc3QoMzMpXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5saXN0KDMzKV0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOkNhcmRpbmFsaXR5Lmxpc3QoMzMpXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJuYW1lXCIsIFwibWFya29cIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLkxpc3QoMzMpIH19KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm5hbWVcIjogXCJtYXJrb1wiIH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYWdlXCI6IGdyZW1saW5nby5DYXJkaW5hbGl0eVZhbHVlLkxpc3QoMzMpIH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOkNhcmRpbmFsaXR5Lmxpc3QoMzMpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJtYXJrb1wiKTsgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhZ2VcIiwgQ2FyZGluYWxpdHkubGlzdCgzMykpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJtYXJrb1wiXV0pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbW1wiYWdlXCIsIENhcmRpbmFsaXR5VmFsdWUubGlzdCgzMyldXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih7ICduYW1lJzogJ21hcmtvJyB9KS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHsgJ2FnZSc6IENhcmRpbmFsaXR5VmFsdWUubGlzdF8oMzMpIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5oYXMoJ2FnZScsIDMzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2V0WDMzWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbbmFtZTogXCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFthZ2U6IENhcmRpbmFsaXR5LnNldCgzMyldKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOkNhcmRpbmFsaXR5LnNldCgzMyldKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5zZXQoMzMpXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJuYW1lXCIsIFwibWFya29cIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLlNldCgzMykgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcIm1hcmtvXCIgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhZ2VcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2V0KDMzKSB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5zZXQoMzMpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJtYXJrb1wiKTsgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhZ2VcIiwgQ2FyZGluYWxpdHkuc2V0KDMzKSk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYobmV3IE1hcChbW1wibmFtZVwiLCBcIm1hcmtvXCJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbXCJhZ2VcIiwgQ2FyZGluYWxpdHlWYWx1ZS5zZXQoMzMpXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeyAnbmFtZSc6ICdtYXJrbycgfSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB7ICdhZ2UnOiBDYXJkaW5hbGl0eVZhbHVlLnNldF8oMzMpIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5oYXMoJ2FnZScsIDMzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2V0WDMxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbbmFtZTogXCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFthZ2U6IENhcmRpbmFsaXR5LnNldCgzMSldKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOkNhcmRpbmFsaXR5LnNldCgzMSldKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5zZXQoMzEpXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJuYW1lXCIsIFwibWFya29cIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLlNldCgzMSkgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcIm1hcmtvXCIgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhZ2VcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2V0KDMxKSB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5zZXQoMzEpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJtYXJrb1wiKTsgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhZ2VcIiwgQ2FyZGluYWxpdHkuc2V0KDMxKSk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYobmV3IE1hcChbW1wibmFtZVwiLCBcIm1hcmtvXCJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbXCJhZ2VcIiwgQ2FyZGluYWxpdHlWYWx1ZS5zZXQoMzEpXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeyAnbmFtZSc6ICdtYXJrbycgfSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB7ICdhZ2UnOiBDYXJkaW5hbGl0eVZhbHVlLnNldF8oMzEpIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5oYXMoJ2FnZScsIDMxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9hZ2Vfc2luZ2xlWDMzWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbbmFtZTogXCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFthZ2U6IENhcmRpbmFsaXR5LnNpbmdsZSgzMyldKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOkNhcmRpbmFsaXR5LnNpbmdsZSgzMyldKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5zaW5nbGUoMzMpXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJuYW1lXCIsIFwibWFya29cIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLlNpbmdsZSgzMykgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcIm1hcmtvXCIgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhZ2VcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2luZ2xlKDMzKSB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTpDYXJkaW5hbGl0eS5zaW5nbGUoMzMpXSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJtYXJrb1wiKTsgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhZ2VcIiwgQ2FyZGluYWxpdHkuc2luZ2xlKDMzKSk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYobmV3IE1hcChbW1wibmFtZVwiLCBcIm1hcmtvXCJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbXCJhZ2VcIiwgQ2FyZGluYWxpdHlWYWx1ZS5zaW5nbGUoMzMpXV0pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeyAnbmFtZSc6ICdtYXJrbycgfSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB7ICdhZ2UnOiBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSgzMykgfSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJywgMzMpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuaGFzKCdhZ2UnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydGllcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydGllczxvYmplY3Q+KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykucHJvcGVydGllcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX2FnZV8zM19zaW5nbGVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBzdHJpbmczLCBudW1iZXIwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBzdHJpbmczLCBudW1iZXIxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBzdHJpbmczLCBudW1iZXIyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMxKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDI5KS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3RfLCAnYWdlJywgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3RfLCAnYWdlJywgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3RfLCAnYWdlJywgMzIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoW25hbWU6IFwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOiAzM10sIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW2FnZTozM10sIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoW25hbWU6XCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFthZ2U6MzNdLCBDYXJkaW5hbGl0eS5zaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJuYW1lXCIsIFwibWFya29cIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCAzMyB9fSwgQ2FyZGluYWxpdHkuU2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm5hbWVcIjogXCJtYXJrb1wiIH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYWdlXCI6IDMzIH0sIGdyZW1saW5nby5DYXJkaW5hbGl0eS5TaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbYWdlOjMzXSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwibmFtZVwiLCBcIm1hcmtvXCIpOyB9fSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFnZVwiLCAzMyk7IH19LCBDYXJkaW5hbGl0eS5zaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihuZXcgTWFwKFtbXCJuYW1lXCIsIFwibWFya29cIl1dKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBNYXAoW1tcImFnZVwiLCAzM11dKSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLm1lcmdlX3YoeyAnbmFtZSc6ICdtYXJrbycgfSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCB7ICdhZ2UnOiAzMyB9LCBDYXJkaW5hbGl0eS5zaW5nbGUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5oYXMoJ2FnZScsIDMzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmhhcygnYWdlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhuYW1lX21hcmtvWF9vcHRpb25Yb25NYXRjaF9uYW1lX2FsbGVuX2FnZV9zZXRYMzFYX3NpbmdsZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjApLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIHN0cmluZzMsIG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzEpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMjkpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdF8sICdhZ2UnLCAzMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbbmFtZTogXCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFtuYW1lOiBcImFsbGVuXCIsIGFnZTogQ2FyZGluYWxpdHkuc2V0KDMxKV0sIHNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW25hbWU6XCJhbGxlblwiLCBhZ2U6Q2FyZGluYWxpdHkuc2V0KDMxKV0sIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoW25hbWU6XCJtYXJrb1wiXSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIFtuYW1lOlwiYWxsZW5cIiwgYWdlOkNhcmRpbmFsaXR5LnNldCgzMSldLCBDYXJkaW5hbGl0eS5zaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbWFwMSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLk1lcmdlVigoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJuYW1lXCIsIFwibWFya29cIiB9fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgXCJhbGxlblwiIH0sIHsgXCJhZ2VcIiwgQ2FyZGluYWxpdHlWYWx1ZS5TZXQoMzEpIH19LCBDYXJkaW5hbGl0eS5TaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcIm1hcmtvXCIgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5Pbk1hdGNoLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJuYW1lXCI6IFwiYWxsZW5cIiwgXCJhZ2VcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2V0KDMxKSB9LCBncmVtbGluZ28uQ2FyZGluYWxpdHkuU2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW25hbWU6XCJhbGxlblwiLCBhZ2U6Q2FyZGluYWxpdHkuc2V0KDMxKV0sIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcubWVyZ2VWKG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJtYXJrb1wiKTsgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJuYW1lXCIsIFwiYWxsZW5cIik7IHB1dChcImFnZVwiLCBDYXJkaW5hbGl0eS5zZXQoMzEpKTsgfX0sIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJtYXJrb1wiXV0pKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgbmV3IE1hcChbW1wibmFtZVwiLCBcImFsbGVuXCJdLCBbXCJhZ2VcIiwgQ2FyZGluYWxpdHlWYWx1ZS5zZXQoMzEpXV0pLCBDYXJkaW5hbGl0eS5zaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih7ICduYW1lJzogJ21hcmtvJyB9KS5vcHRpb24oTWVyZ2Uub25fbWF0Y2gsIHsgJ25hbWUnOiAnYWxsZW4nLCAnYWdlJzogQ2FyZGluYWxpdHlWYWx1ZS5zZXRfKDMxKSB9LCBDYXJkaW5hbGl0eS5zaW5nbGUpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsbGVuXCIpLmhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuSGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5IYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGxlbicpLmhhcygnYWdlJywgMzEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGxlblwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLkhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsbGVuJykuaGFzKCdhZ2UnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxsZW5cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydGllcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuUHJvcGVydGllczxvYmplY3Q+KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLlByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsbGVuJykucHJvcGVydGllcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWG5hbWVfbWFya29YX29wdGlvblhvbk1hdGNoX25hbWVfYWxsZW5fYWdlX3NpbmdsZVgzMVhfc2luZ2xlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgc3RyaW5nMywgbnVtYmVyMCkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgc3RyaW5nMywgbnVtYmVyMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgc3RyaW5nMywgbnVtYmVyMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KENhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDI5KS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAzMSkuUHJvcGVydHkoQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KGdyZW1saW5nby5DYXJkaW5hbGl0eS5MaXN0LCBcImFnZVwiLCAyOSkuUHJvcGVydHkoZ3JlbWxpbmdvLkNhcmRpbmFsaXR5Lkxpc3QsIFwiYWdlXCIsIDMxKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuTGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAyOSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzEpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMSkucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMzIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoQ2FyZGluYWxpdHkubGlzdCwgXCJhZ2VcIiwgMjkpLnByb3BlcnR5KENhcmRpbmFsaXR5Lmxpc3QsIFwiYWdlXCIsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0LCBcImFnZVwiLCAzMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0XywgJ2FnZScsIDI5KS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0XywgJ2FnZScsIDMxKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5saXN0XywgJ2FnZScsIDMyKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKFtuYW1lOiBcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW25hbWU6IFwiYWxsZW5cIiwgYWdlOiBDYXJkaW5hbGl0eS5zaW5nbGUoMzEpXSwgc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbbmFtZTpcImFsbGVuXCIsIGFnZTpDYXJkaW5hbGl0eS5zaW5nbGUoMzEpXSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbbmFtZTpcIm1hcmtvXCJdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgW25hbWU6XCJhbGxlblwiLCBhZ2U6Q2FyZGluYWxpdHkuc2luZ2xlKDMxKV0sIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBtYXAxLCBDYXJkaW5hbGl0eS5zaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgXCJtYXJrb1wiIH19KS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwibmFtZVwiLCBcImFsbGVuXCIgfSwgeyBcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLlNpbmdsZSgzMSkgfX0sIENhcmRpbmFsaXR5LlNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJuYW1lXCI6IFwibWFya29cIiB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm5hbWVcIjogXCJhbGxlblwiLCBcImFnZVwiOiBncmVtbGluZ28uQ2FyZGluYWxpdHlWYWx1ZS5TaW5nbGUoMzEpIH0sIGdyZW1saW5nby5DYXJkaW5hbGl0eS5TaW5nbGUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFtuYW1lOlwibWFya29cIl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBbbmFtZTpcImFsbGVuXCIsIGFnZTpDYXJkaW5hbGl0eS5zaW5nbGUoMzEpXSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwibmFtZVwiLCBcIm1hcmtvXCIpOyB9fSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJhbGxlblwiKTsgcHV0KFwiYWdlXCIsIENhcmRpbmFsaXR5LnNpbmdsZSgzMSkpOyB9fSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5tZXJnZVYobmV3IE1hcChbW1wibmFtZVwiLCBcIm1hcmtvXCJdXSkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBuZXcgTWFwKFtbXCJuYW1lXCIsIFwiYWxsZW5cIl0sIFtcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSgzMSldXSksIENhcmRpbmFsaXR5LnNpbmdsZSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgJ25hbWUnOiAnbWFya28nIH0pLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeyAnbmFtZSc6ICdhbGxlbicsICdhZ2UnOiBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSgzMSkgfSwgQ2FyZGluYWxpdHkuc2luZ2xlKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGxlblwiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLkhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuSGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIsIDMzKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiLCAzMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIiwgMzMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnYWxsZW4nKS5oYXMoJ2FnZScsIDMzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxsZW5cIikuaGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5IYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLkhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiLCAzMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIiwgMzEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIsIDMxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsbGVuJykuaGFzKCdhZ2UnLCAzMSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsbGVuXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLkhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnYWxsZW4nKS5oYXMoJ2FnZScpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGxlblwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0aWVzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5Qcm9wZXJ0aWVzPG9iamVjdD4oXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikuUHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxsZW5cIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsbGVuXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGxlblwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnYWxsZW4nKS5wcm9wZXJ0aWVzKCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19tZXJnZVZYbmFtZV9hbGljZVhfb3B0aW9uWG9uQ3JlYXRlX2FnZV9zaW5nbGVYODFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLm1lcmdlVihbbmFtZTogXCJhbGljZVwiLCAoVC5sYWJlbCk6IFwicGVyc29uXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6IENhcmRpbmFsaXR5LnNpbmdsZSg4MSldKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFtuYW1lOlwiYWxpY2VcIiwgKFQubGFiZWwpOlwicGVyc29uXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6Q2FyZGluYWxpdHkuc2luZ2xlKDgxKV0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcubWVyZ2VWKFtuYW1lOlwiYWxpY2VcIiwgKFQubGFiZWwpOlwicGVyc29uXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6Q2FyZGluYWxpdHkuc2luZ2xlKDgxKV0pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLm1lcmdlVihtYXAwKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgXCJhbGljZVwiIH0sIHsgVC5MYWJlbCwgXCJwZXJzb25cIiB9fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSURpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+KSBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJhZ2VcIiwgQ2FyZGluYWxpdHlWYWx1ZS5TaW5nbGUoODEpIH19KSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuTWVyZ2VWKG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm5hbWVcIjogXCJhbGljZVwiLCBncmVtbGluZ28uVC5MYWJlbDogXCJwZXJzb25cIiB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhZ2VcIjogZ3JlbWxpbmdvLkNhcmRpbmFsaXR5VmFsdWUuU2luZ2xlKDgxKSB9KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbbmFtZTpcImFsaWNlXCIsIChULmxhYmVsKTpcInBlcnNvblwiXSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbYWdlOkNhcmRpbmFsaXR5LnNpbmdsZSg4MSldKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5tZXJnZVYobmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwibmFtZVwiLCBcImFsaWNlXCIpOyBwdXQoVC5sYWJlbCwgXCJwZXJzb25cIik7IH19KS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFnZVwiLCBDYXJkaW5hbGl0eS5zaW5nbGUoODEpKTsgfX0pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihuZXcgTWFwKFtbXCJuYW1lXCIsIFwiYWxpY2VcIl0sIFtULmxhYmVsLCBcInBlcnNvblwiXV0pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBNYXAoW1tcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLnNpbmdsZSg4MSldXSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih7ICduYW1lJzogJ2FsaWNlJywgVC5sYWJlbDogJ3BlcnNvbicgfSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeyAnYWdlJzogQ2FyZGluYWxpdHlWYWx1ZS5zaW5nbGUoODEpIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnYWxpY2UnKS5oYXMoJ2FnZScsIDgxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxpY2VcIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLmhhcygnYWdlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsaWNlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhuYW1lX2FsaWNlWF9vcHRpb25Yb25DcmVhdGVfYWdlX3NldFg4MVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcubWVyZ2VWKFtuYW1lOiBcImFsaWNlXCIsIChULmxhYmVsKTogXCJwZXJzb25cIl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgW2FnZTogQ2FyZGluYWxpdHkuc2V0KDgxKV0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5tZXJnZVYoW25hbWU6XCJhbGljZVwiLCAoVC5sYWJlbCk6XCJwZXJzb25cIl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgW2FnZTpDYXJkaW5hbGl0eS5zZXQoODEpXSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoW25hbWU6XCJhbGljZVwiLCAoVC5sYWJlbCk6XCJwZXJzb25cIl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgW2FnZTpDYXJkaW5hbGl0eS5zZXQoODEpXSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcubWVyZ2VWKG1hcDApLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbWFwMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5NZXJnZVYoKElEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PikgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwibmFtZVwiLCBcImFsaWNlXCIgfSwgeyBULkxhYmVsLCBcInBlcnNvblwiIH19KS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCBDYXJkaW5hbGl0eVZhbHVlLlNldCg4MSkgfX0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5NZXJnZVYobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wibmFtZVwiOiBcImFsaWNlXCIsIGdyZW1saW5nby5ULkxhYmVsOiBcInBlcnNvblwiIH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImFnZVwiOiBncmVtbGluZ28uQ2FyZGluYWxpdHlWYWx1ZS5TZXQoODEpIH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFtuYW1lOlwiYWxpY2VcIiwgKFQubGFiZWwpOlwicGVyc29uXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6Q2FyZGluYWxpdHkuc2V0KDgxKV0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJuYW1lXCIsIFwiYWxpY2VcIik7IHB1dChULmxhYmVsLCBcInBlcnNvblwiKTsgfX0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiYWdlXCIsIENhcmRpbmFsaXR5LnNldCg4MSkpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJhbGljZVwiXSwgW1QubGFiZWwsIFwicGVyc29uXCJdXSkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IE1hcChbW1wiYWdlXCIsIENhcmRpbmFsaXR5VmFsdWUuc2V0KDgxKV1dKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgJ25hbWUnOiAnYWxpY2UnLCBULmxhYmVsOiAncGVyc29uJyB9KS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB7ICdhZ2UnOiBDYXJkaW5hbGl0eVZhbHVlLnNldF8oODEpIH0pIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMywgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnYWxpY2UnKS5oYXMoJ2FnZScsIDgxKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxpY2VcIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLmhhcygnYWdlJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsaWNlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnRpZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5Qcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLnByb3BlcnRpZXMoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX21lcmdlVlhuYW1lX2FsaWNlWF9vcHRpb25Yb25DcmVhdGVfYWdlXzgxX3NldFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoW25hbWU6IFwiYWxpY2VcIiwgKFQubGFiZWwpOiBcInBlcnNvblwiXSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbYWdlOiA4MV0sIENhcmRpbmFsaXR5LnNldCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbbmFtZTpcImFsaWNlXCIsIChULmxhYmVsKTpcInBlcnNvblwiXSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbYWdlOjgxXSwgQ2FyZGluYWxpdHkuc2V0KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbbmFtZTpcImFsaWNlXCIsIChULmxhYmVsKTpcInBlcnNvblwiXSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBbYWdlOjgxXSwgQ2FyZGluYWxpdHkuc2V0KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxLCBDYXJkaW5hbGl0eS5zZXQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgXCJhbGljZVwiIH0sIHsgVC5MYWJlbCwgXCJwZXJzb25cIiB9fSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJhZ2VcIiwgODEgfX0sIENhcmRpbmFsaXR5LlNldCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJuYW1lXCI6IFwiYWxpY2VcIiwgZ3JlbWxpbmdvLlQuTGFiZWw6IFwicGVyc29uXCIgfSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYWdlXCI6IDgxIH0sIGdyZW1saW5nby5DYXJkaW5hbGl0eS5TZXQpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFtuYW1lOlwiYWxpY2VcIiwgKFQubGFiZWwpOlwicGVyc29uXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6ODFdLCBDYXJkaW5hbGl0eS5zZXQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJuYW1lXCIsIFwiYWxpY2VcIik7IHB1dChULmxhYmVsLCBcInBlcnNvblwiKTsgfX0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiYWdlXCIsIDgxKTsgfX0sIENhcmRpbmFsaXR5LnNldCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJhbGljZVwiXSwgW1QubGFiZWwsIFwicGVyc29uXCJdXSkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgbmV3IE1hcChbW1wiYWdlXCIsIDgxXV0pLCBDYXJkaW5hbGl0eS5zZXQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih7ICduYW1lJzogJ2FsaWNlJywgVC5sYWJlbDogJ3BlcnNvbicgfSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgeyAnYWdlJzogODEgfSwgQ2FyZGluYWxpdHkuc2V0XykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLmhhcygnYWdlJywgODEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykuaGFzKCdhZ2UnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydGllcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydGllczxvYmplY3Q+KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLlByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykucHJvcGVydGllcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWWG5hbWVfYWxpY2VYX29wdGlvblhvbkNyZWF0ZV9hZ2VfODFfbGFiZWxfcGVyc29uX3NldFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoW25hbWU6IFwiYWxpY2VcIl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgW2FnZTogODEsIChULmxhYmVsKTogXCJwZXJzb25cIl0sIENhcmRpbmFsaXR5LnNldCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLm1lcmdlVihbbmFtZTpcImFsaWNlXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6ODEsIChULmxhYmVsKTpcInBlcnNvblwiXSwgQ2FyZGluYWxpdHkuc2V0KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLm1lcmdlVihbbmFtZTpcImFsaWNlXCJdKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIFthZ2U6ODEsIChULmxhYmVsKTpcInBlcnNvblwiXSwgQ2FyZGluYWxpdHkuc2V0KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBtYXAxLCBDYXJkaW5hbGl0eS5zZXQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcIm5hbWVcIiwgXCJhbGljZVwiIH19KS5PcHRpb24oTWVyZ2UuT25DcmVhdGUsIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImFnZVwiLCA4MSB9LCB7IFQuTGFiZWwsIFwicGVyc29uXCIgfX0sIENhcmRpbmFsaXR5LlNldCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJuYW1lXCI6IFwiYWxpY2VcIiB9KS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uQ3JlYXRlLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhZ2VcIjogODEsIGdyZW1saW5nby5ULkxhYmVsOiBcInBlcnNvblwiIH0sIGdyZW1saW5nby5DYXJkaW5hbGl0eS5TZXQpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcubWVyZ2VWKFtuYW1lOlwiYWxpY2VcIl0pLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgW2FnZTo4MSwgKFQubGFiZWwpOlwicGVyc29uXCJdLCBDYXJkaW5hbGl0eS5zZXQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJuYW1lXCIsIFwiYWxpY2VcIik7IH19KS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFnZVwiLCA4MSk7IHB1dChULmxhYmVsLCBcInBlcnNvblwiKTsgfX0sIENhcmRpbmFsaXR5LnNldCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcubWVyZ2VWKG5ldyBNYXAoW1tcIm5hbWVcIiwgXCJhbGljZVwiXV0pKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIG5ldyBNYXAoW1tcImFnZVwiLCA4MV0sIFtULmxhYmVsLCBcInBlcnNvblwiXV0pLCBDYXJkaW5hbGl0eS5zZXQpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcubWVyZ2Vfdih7ICduYW1lJzogJ2FsaWNlJyB9KS5vcHRpb24oTWVyZ2Uub25fY3JlYXRlLCB7ICdhZ2UnOiA4MSwgVC5sYWJlbDogJ3BlcnNvbicgfSwgQ2FyZGluYWxpdHkuc2V0XykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhcyhzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuSGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIiwgODEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIsIDgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiLCA4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdhbGljZScpLmhhcygnYWdlJywgODEpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuaGFzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5oYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5oYXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLkhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5IYXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLmhhcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykuaGFzKCdhZ2UnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydGllcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikuUHJvcGVydGllczxvYmplY3Q+KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLlByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcImFsaWNlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJhbGljZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwiYWxpY2VcIikucHJvcGVydGllcyhcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgJ2FsaWNlJykucHJvcGVydGllcygnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfbWVyZ2VWX2hpZGRlbl9sYWJlbF9rZXlfb25NYXRjaF9tYXRjaGVkX3Byb2hpYml0ZWQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcubWVyZ2VWKFs6XSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5tZXJnZVYoWzpdKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5tZXJnZVYobWFwMCkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIG1hcDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuTWVyZ2VWKChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7fSkuT3B0aW9uKE1lcmdlLk9uTWF0Y2gsIChJRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4pIHh4MSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLk1lcmdlVihtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317IH0pLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgeHgxKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLm1lcmdlVihbOl0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLm1lcmdlVihuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyAgfX0pLm9wdGlvbihNZXJnZS5vbk1hdGNoLCB4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLm1lcmdlVihuZXcgTWFwKFtdKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5tZXJnZV92KHsgIH0pLm9wdGlvbihNZXJnZS5vbl9tYXRjaCwgeHgxKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbGlzdDFfbGlzdDJfbGlzdDNYX2ZvbGRfYXNYbVhfbWVyZ2VWWHNlbGVjdFhtWF9saW1pdFhsb2NhbF8xWF91bmZvbGRYX29wdGlvblhvbkNyZWF0ZV9zZWxlY3RYbVhfcmFuZ2VYbG9jYWxfMV8yWF91bmZvbGRYX29wdGlvblhvbk1hdGNoX3NlbGVjdFhtWF90YWlsWGxvY2FsWF91bmZvbGRYX3RvX21hdGNoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJtYXJrb1wiXSwgW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbY3JlYXRlZDpcIk5cIl0pLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VWKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJtYXJrb1wiXSwgW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbY3JlYXRlZDpcIk5cIl0pLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VWKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwibWFya29cIl0sIFtjcmVhdGVkOlwiTlwiXSkuZm9sZCgpLmFzKFwibVwiKS5tZXJnZVYoX18uc2VsZWN0KFwibVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobWFwMCwgbWFwMCwgbWFwMSkuZm9sZCgpLmFzKHN0cmluZzApLm1lcmdlVihfXy5zZWxlY3Qoc3RyaW5nMCkubGltaXQoU2NvcGUubG9jYWwsIG51bWJlcjApLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcwKS5yYW5nZShTY29wZS5sb2NhbCwgbnVtYmVyMCwgbnVtYmVyMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3Qoc3RyaW5nMCkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsIFwicGVyc29uXCIgfSwgeyBcIm5hbWVcIiwgXCJtYXJrb1wiIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgVC5MYWJlbCwgXCJwZXJzb25cIiB9LCB7IFwibmFtZVwiLCBcIm1hcmtvXCIgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBcImNyZWF0ZWRcIiwgXCJOXCIgfX0pLkZvbGQoKS5BcyhcIm1cIikuTWVyZ2VWKChJVHJhdmVyc2FsKSBfXy5TZWxlY3Q8b2JqZWN0PihcIm1cIikuTGltaXQ8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSkuVW5mb2xkPG9iamVjdD4oKSkuT3B0aW9uKE1lcmdlLk9uQ3JlYXRlLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpLlJhbmdlPG9iamVjdD4oU2NvcGUuTG9jYWwsIDEsIDIpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5Pbk1hdGNoLCAoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCkuVW5mb2xkPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317Z3JlbWxpbmdvLlQuTGFiZWw6IFwicGVyc29uXCIsIFwibmFtZVwiOiBcIm1hcmtvXCIgfSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e2dyZW1saW5nby5ULkxhYmVsOiBcInBlcnNvblwiLCBcIm5hbWVcIjogXCJtYXJrb1wiIH0sIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImNyZWF0ZWRcIjogXCJOXCIgfSkuRm9sZCgpLkFzKFwibVwiKS5NZXJnZVYoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtXCIpLkxpbWl0KGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSkuVW5mb2xkKCkpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25DcmVhdGUsIGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKS5SYW5nZShncmVtbGluZ28uU2NvcGUuTG9jYWwsIDEsIDIpLlVuZm9sZCgpKS5PcHRpb24oZ3JlbWxpbmdvLk1lcmdlLk9uTWF0Y2gsIGdyZW1saW5nby5UX18uU2VsZWN0KFwibVwiKS5UYWlsKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuVW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJtYXJrb1wiXSwgW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcIm1hcmtvXCJdLCBbY3JlYXRlZDpcIk5cIl0pLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VWKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChULmxhYmVsLCBcInBlcnNvblwiKTsgcHV0KFwibmFtZVwiLCBcIm1hcmtvXCIpOyB9fSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFQubGFiZWwsIFwicGVyc29uXCIpOyBwdXQoXCJuYW1lXCIsIFwibWFya29cIik7IH19LCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJjcmVhdGVkXCIsIFwiTlwiKTsgfX0pLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VWKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBNYXAoW1tULmxhYmVsLCBcInBlcnNvblwiXSwgW1wibmFtZVwiLCBcIm1hcmtvXCJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCBcInBlcnNvblwiXSwgW1wibmFtZVwiLCBcIm1hcmtvXCJdXSksIG5ldyBNYXAoW1tcImNyZWF0ZWRcIiwgXCJOXCJdXSkpLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VWKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoeyBULmxhYmVsOiAncGVyc29uJywgJ25hbWUnOiAnbWFya28nIH0sIHsgVC5sYWJlbDogJ3BlcnNvbicsICduYW1lJzogJ21hcmtvJyB9LCB7ICdjcmVhdGVkJzogJ04nIH0pLmZvbGQoKS5hc18oJ20nKS5tZXJnZV92KF9fLnNlbGVjdCgnbScpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdtJykucmFuZ2VfKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zZWxlY3QoJ20nKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcIm1hcmtvXCIpLmhhcyhcImNyZWF0ZWRcIixcIk5cIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuaGFzKHN0cmluZzMsIHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5IYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuaGFzKFwiY3JlYXRlZFwiLCBcIk5cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5oYXMoXCJjcmVhdGVkXCIsIFwiTlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmhhcyhcImNyZWF0ZWRcIiwgXCJOXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5oYXMoJ2NyZWF0ZWQnLCAnTicpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhsaXN0MV9saXN0Ml9saXN0M1hfZm9sZF9hc1htWF9tZXJnZVZYc2VsZWN0WG1YX2xpbWl0WGxvY2FsXzFYX3VuZm9sZFhfb3B0aW9uWG9uQ3JlYXRlX3NlbGVjdFhtWF9yYW5nZVhsb2NhbF8xXzJYX3VuZm9sZFhfb3B0aW9uWG9uTWF0Y2hfc2VsZWN0WG1YX3RhaWxYbG9jYWxYX3VuZm9sZFhfdG9fY3JlYXRlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ21hcmtvJykucHJvcGVydHkoJ2FnZScsIDI5KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJzdGVwaGVuXCJdLCBbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwic3RlcGhlblwiXSwgW2NyZWF0ZWQ6XCJOXCJdKS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlVihfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwic3RlcGhlblwiXSwgW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcInN0ZXBoZW5cIl0sIFtjcmVhdGVkOlwiTlwiXSkuZm9sZCgpLmFzKFwibVwiKS5tZXJnZVYoX18uc2VsZWN0KFwibVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbVC5sYWJlbDpcInBlcnNvblwiLCBuYW1lOlwic3RlcGhlblwiXSwgW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcInN0ZXBoZW5cIl0sIFtjcmVhdGVkOlwiTlwiXSkuZm9sZCgpLmFzKFwibVwiKS5tZXJnZVYoX18uc2VsZWN0KFwibVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobWFwMCwgbWFwMCwgbWFwMSkuZm9sZCgpLmFzKHN0cmluZzApLm1lcmdlVihfXy5zZWxlY3Qoc3RyaW5nMCkubGltaXQoU2NvcGUubG9jYWwsIG51bWJlcjApLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChzdHJpbmcwKS5yYW5nZShTY29wZS5sb2NhbCwgbnVtYmVyMCwgbnVtYmVyMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3Qoc3RyaW5nMCkudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFQuTGFiZWwsIFwicGVyc29uXCIgfSwgeyBcIm5hbWVcIiwgXCJzdGVwaGVuXCIgfX0sIG5ldyBEaWN0aW9uYXJ5PG9iamVjdCwgb2JqZWN0PiB7eyBULkxhYmVsLCBcInBlcnNvblwiIH0sIHsgXCJuYW1lXCIsIFwic3RlcGhlblwiIH19LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJjcmVhdGVkXCIsIFwiTlwiIH19KS5Gb2xkKCkuQXMoXCJtXCIpLk1lcmdlVigoSVRyYXZlcnNhbCkgX18uU2VsZWN0PG9iamVjdD4oXCJtXCIpLkxpbWl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIDEpLlVuZm9sZDxvYmplY3Q+KCkpLk9wdGlvbihNZXJnZS5PbkNyZWF0ZSwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKS5SYW5nZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCAxLCAyKS5VbmZvbGQ8b2JqZWN0PigpKS5PcHRpb24oTWVyZ2UuT25NYXRjaCwgKElUcmF2ZXJzYWwpIF9fLlNlbGVjdDxvYmplY3Q+KFwibVwiKS5UYWlsPG9iamVjdD4oU2NvcGUuTG9jYWwpLlVuZm9sZDxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e2dyZW1saW5nby5ULkxhYmVsOiBcInBlcnNvblwiLCBcIm5hbWVcIjogXCJzdGVwaGVuXCIgfSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e2dyZW1saW5nby5ULkxhYmVsOiBcInBlcnNvblwiLCBcIm5hbWVcIjogXCJzdGVwaGVuXCIgfSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiY3JlYXRlZFwiOiBcIk5cIiB9KS5Gb2xkKCkuQXMoXCJtXCIpLk1lcmdlVihncmVtbGluZ28uVF9fLlNlbGVjdChcIm1cIikuTGltaXQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsLCAxKS5VbmZvbGQoKSkuT3B0aW9uKGdyZW1saW5nby5NZXJnZS5PbkNyZWF0ZSwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtXCIpLlJhbmdlKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSwgMikuVW5mb2xkKCkpLk9wdGlvbihncmVtbGluZ28uTWVyZ2UuT25NYXRjaCwgZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJtXCIpLlRhaWwoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5VbmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1QubGFiZWw6XCJwZXJzb25cIiwgbmFtZTpcInN0ZXBoZW5cIl0sIFtULmxhYmVsOlwicGVyc29uXCIsIG5hbWU6XCJzdGVwaGVuXCJdLCBbY3JlYXRlZDpcIk5cIl0pLmZvbGQoKS5hcyhcIm1cIikubWVyZ2VWKF9fLnNlbGVjdChcIm1cIikubGltaXQoU2NvcGUubG9jYWwsIDEpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25DcmVhdGUsIF9fLnNlbGVjdChcIm1cIikucmFuZ2UoU2NvcGUubG9jYWwsIDEsIDIpLnVuZm9sZCgpKS5vcHRpb24oTWVyZ2Uub25NYXRjaCwgX18uc2VsZWN0KFwibVwiKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChULmxhYmVsLCBcInBlcnNvblwiKTsgcHV0KFwibmFtZVwiLCBcInN0ZXBoZW5cIik7IH19LCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoVC5sYWJlbCwgXCJwZXJzb25cIik7IHB1dChcIm5hbWVcIiwgXCJzdGVwaGVuXCIpOyB9fSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiY3JlYXRlZFwiLCBcIk5cIik7IH19KS5mb2xkKCkuYXMoXCJtXCIpLm1lcmdlVihfXy5zZWxlY3QoXCJtXCIpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uQ3JlYXRlLCBfXy5zZWxlY3QoXCJtXCIpLnJhbmdlKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uTWF0Y2gsIF9fLnNlbGVjdChcIm1cIikudGFpbChTY29wZS5sb2NhbCkudW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChuZXcgTWFwKFtbVC5sYWJlbCwgXCJwZXJzb25cIl0sIFtcIm5hbWVcIiwgXCJzdGVwaGVuXCJdXSksIG5ldyBNYXAoW1tULmxhYmVsLCBcInBlcnNvblwiXSwgW1wibmFtZVwiLCBcInN0ZXBoZW5cIl1dKSwgbmV3IE1hcChbW1wiY3JlYXRlZFwiLCBcIk5cIl1dKSkuZm9sZCgpLmFzKFwibVwiKS5tZXJnZVYoX18uc2VsZWN0KFwibVwiKS5saW1pdChTY29wZS5sb2NhbCwgMSkudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSwgX18uc2VsZWN0KFwibVwiKS5yYW5nZShTY29wZS5sb2NhbCwgMSwgMikudW5mb2xkKCkpLm9wdGlvbihNZXJnZS5vbk1hdGNoLCBfXy5zZWxlY3QoXCJtXCIpLnRhaWwoU2NvcGUubG9jYWwpLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCh7IFQubGFiZWw6ICdwZXJzb24nLCAnbmFtZSc6ICdzdGVwaGVuJyB9LCB7IFQubGFiZWw6ICdwZXJzb24nLCAnbmFtZSc6ICdzdGVwaGVuJyB9LCB7ICdjcmVhdGVkJzogJ04nIH0pLmZvbGQoKS5hc18oJ20nKS5tZXJnZV92KF9fLnNlbGVjdCgnbScpLmxpbWl0KFNjb3BlLmxvY2FsLCAxKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uX2NyZWF0ZSwgX18uc2VsZWN0KCdtJykucmFuZ2VfKFNjb3BlLmxvY2FsLCAxLCAyKS51bmZvbGQoKSkub3B0aW9uKE1lcmdlLm9uX21hdGNoLCBfXy5zZWxlY3QoJ20nKS50YWlsKFNjb3BlLmxvY2FsKS51bmZvbGQoKSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixcInN0ZXBoZW5cIikuaGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJzdGVwaGVuXCIpLmhhc05vdChcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuaGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmhhc05vdChzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5IYXNOb3QoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcInN0ZXBoZW5cIikuSGFzTm90KFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXNOb3QoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXNOb3QoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwic3RlcGhlblwiKS5oYXNOb3QoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnc3RlcGhlbicpLmhhc19ub3QoJ2NyZWF0ZWQnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZV9taW4iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuTWluKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLm1pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Zvb19taW4iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZm9vXCIpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJmb29cIikuTWluKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ZvbycpLm1pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX25hbWVfbWluIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubWluKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikubWluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuTWluPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuTWluKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2VfZm9sZF9taW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5Gb2xkKCkuTWluPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkZvbGQoKS5NaW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnYWdlJykuZm9sZCgpLm1pbl8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX21pblhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpLk1pbjxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKS5NaW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKS5jYXAoJ2EnKS5taW5fKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVhfbWluWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5NaW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpLk1pbihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpLm1pbl8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9taW4iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikuVW5mb2xkKCkuTWluKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykudW5mb2xkKCkubWluXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfbWluIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLk1pbjxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpLnVuZm9sZCgpLm1pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF9taW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5NaW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcChcImFcIikuTWluKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykubWluXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX21pblhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXA8b2JqZWN0PihcImFcIikuTWluPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5NaW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdmb28nKS5jYXAoJ2EnKS5taW5fKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX2NhcFhhWF91bmZvbGRfbWluIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5NaW48b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2ZvbycpLmNhcCgnYScpLnVuZm9sZCgpLm1pbl8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX21pbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImZvb1wiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5NaW48b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5NaW4oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkubWluKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdmb28nKS5jYXAoJ2EnKS51bmZvbGQoKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb29fZm9sZF9taW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImZvb1wiKS5Gb2xkKCkuTWluPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZm9vXCIpLkZvbGQoKS5NaW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmZvbGQoKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZm9vJykuZm9sZCgpLm1pbl8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbmFtZV9mb2xkX21pblhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuTWluPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkuTWluKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkubWluXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYYm90aFhfdGltZXNYNVhfYWdlX21pbiIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoXCJhZ2VcIikubWluKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoXCJhZ2VcIikubWluKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSkudmFsdWVzKFwiYWdlXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyhudW1iZXIwKS52YWx1ZXMoc3RyaW5nMCkubWluKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLkJvdGgoKSkuVGltZXMoNSkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuTWluPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLkJvdGgoKSkuVGltZXMoNSkuVmFsdWVzKFwiYWdlXCIpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5ib3RoKCkpLnRpbWVzKDUpLnZhbHVlcyhcImFnZVwiKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSkudmFsdWVzKFwiYWdlXCIpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgpKS50aW1lcyg1KS52YWx1ZXMoXCJhZ2VcIikubWluKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoKSkudGltZXMoNSkudmFsdWVzKCdhZ2UnKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfZ3JvdXBfYnlYbmFtZVhfYnlYYm90aEVfd2VpZ2h0X21pblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5taW4oKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm1pbigpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm1pbigpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuZ3JvdXAoKS5ieShzdHJpbmcxKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhzdHJpbmcyKS5taW4oKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShcIm5hbWVcIikuQnkoX18uQm90aEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5NaW48b2JqZWN0PigpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuR3JvdXAoKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLlZhbHVlcyhcIndlaWdodFwiKS5NaW4oKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5taW4oKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikubWluKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm1pbigpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KF9fLmJvdGhfZSgpLnZhbHVlcygnd2VpZ2h0JykubWluXygpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Zvb19pbmplY3RYOTk5OTk5OTk5OVhfbWluIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5pbmplY3QoOTk5OTk5OTk5OWwpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmluamVjdCg5OTk5OTk5OTk5bCkubWluKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmluamVjdCg5OTk5OTk5OTk5bCkubWluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5pbmplY3QobG9uZzApLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZm9vXCIpLkluamVjdCg5OTk5OTk5OTk5bCkuTWluPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcImZvb1wiKS5JbmplY3QoaW50NjQoOTk5OTk5OTk5OSkpLk1pbigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5pbmplY3QoOTk5OTk5OTk5OWwpLm1pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuaW5qZWN0KDk5OTk5OTk5OTlsKS5taW4oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmluamVjdCg5OTk5OTk5OTk5KS5taW4oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ZvbycpLmluamVjdChsb25nKDk5OTk5OTk5OTkpKS5taW5fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF92YWx1ZXNYYWdlWF9taW5YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS52YWx1ZXMoc3RyaW5nMCkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuTWluPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlZhbHVlcyhcImFnZVwiKS5NaW4oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS52YWx1ZXMoJ2FnZScpLm1pbl8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYdW5pb25YdmFsdWVzWGFnZVhfb3V0RV92YWx1ZXNYd2VpZ2h0WFhfZm9sZFhfbWluWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbCh1bmlvbih2YWx1ZXMoXCJhZ2VcIiksIG91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikpLmZvbGQoKSkubWluKGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoc3RyaW5nMCksIF9fLm91dEUoKS52YWx1ZXMoc3RyaW5nMSkpLmZvbGQoKSkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLlVuaW9uPG9iamVjdD4oX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIiksIF9fLk91dEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKSkuRm9sZCgpKS5NaW48b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLlVuaW9uKGdyZW1saW5nby5UX18uVmFsdWVzKFwiYWdlXCIpLCBncmVtbGluZ28uVF9fLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikpLkZvbGQoKSkuTWluKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLm1pbihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5taW4oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikpLmZvbGQoKSkubWluKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoJ2FnZScpLCBfXy5vdXRfZSgpLnZhbHVlcygnd2VpZ2h0JykpLmZvbGQoKSkubWluXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9uYW1lX29yZGVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX29yZGVyX2J5WG5hbWVfYXNjWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmFzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmFzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5hc2MpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm9yZGVyKCkuYnkoc3RyaW5nMCwgT3JkZXIuYXNjKS52YWx1ZXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3JkZXIoKS5CeShcIm5hbWVcIiwgT3JkZXIuQXNjKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiLCBncmVtbGluZ28uT3JkZXIuQXNjKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIsIE9yZGVyLmFzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIiwgT3JkZXIuYXNjKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiLCBPcmRlci5hc2MpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3JkZXIoKS5ieSgnbmFtZScsIE9yZGVyLmFzYykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vcmRlcl9ieVhuYW1lWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm9yZGVyKCkuYnkoc3RyaW5nMCkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk9yZGVyKCkuQnkoXCJuYW1lXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vcmRlcigpLmJ5KCduYW1lJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRFX29yZGVyX2J5WHdlaWdodF9kZXNjWF93ZWlnaHQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmRlc2MpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoc3RyaW5nMCwgT3JkZXIuZGVzYykudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dEUoKS5PcmRlcigpLkJ5KFwid2VpZ2h0XCIsIE9yZGVyLkRlc2MpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0RSgpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIiwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLlZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXRFKCkub3JkZXIoKS5ieShcIndlaWdodFwiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIsIE9yZGVyLmRlc2MpLnZhbHVlcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dF9lKCkub3JkZXIoKS5ieSgnd2VpZ2h0JywgT3JkZXIuZGVzYykudmFsdWVzKCd3ZWlnaHQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dFhjcmVhdGVkWF9hc1hiWF9vcmRlcl9ieVhzaHVmZmxlWF9zZWxlY3RYYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImNyZWF0ZWRcIikuQXMoXCJiXCIpLk9yZGVyKCkuQnkoT3JkZXIuU2h1ZmZsZSkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoXCJjcmVhdGVkXCIpLkFzKFwiYlwiKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5TaHVmZmxlKS5TZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwiY3JlYXRlZFwiKS5hcyhcImJcIikub3JkZXIoKS5ieShPcmRlci5zaHVmZmxlKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImNyZWF0ZWRcIikuYXMoXCJiXCIpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJjcmVhdGVkXCIpLmFzKFwiYlwiKS5vcmRlcigpLmJ5KE9yZGVyLnNodWZmbGUpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgnY3JlYXRlZCcpLmFzXygnYicpLm9yZGVyKCkuYnkoT3JkZXIuc2h1ZmZsZSkuc2VsZWN0KCdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbGltaXRYNVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS5saW1pdCg1KS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIiwgT3JkZXIuZGVzYykubGltaXQoNSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS5saW1pdCg1KS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoc3RyaW5nMCkub3JkZXIoKS5ieShzdHJpbmcxLCBPcmRlci5kZXNjKS5saW1pdChudW1iZXIwKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkhhc0xhYmVsKFwicGVyc29uXCIpLk9yZGVyKCkuQnkoXCJhZ2VcIiwgT3JkZXIuRGVzYykuTGltaXQ8b2JqZWN0Pig1KS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuT3JkZXIoKS5CeShcImFnZVwiLCBncmVtbGluZ28uT3JkZXIuRGVzYykuTGltaXQoNSkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS5saW1pdCg1KS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS5saW1pdCg1KS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS5saW1pdCg1KS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLm9yZGVyKCkuYnkoJ2FnZScsIE9yZGVyLmRlc2MpLmxpbWl0KDUpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19vcmRlcl9ieVhrZXlfZGVzY1hfa2V5IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQua2V5LCBPcmRlci5kZXNjKS5rZXkoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQua2V5LCBPcmRlci5kZXNjKS5rZXkoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShULmtleSwgT3JkZXIuZGVzYykua2V5KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQua2V5LCBPcmRlci5kZXNjKS5rZXkoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpLkJ5KFQuS2V5LCBPcmRlci5EZXNjKS5LZXkoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5ULktleSwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLktleSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KFQua2V5LCBPcmRlci5kZXNjKS5rZXkoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoVC5rZXksIE9yZGVyLmRlc2MpLmtleSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShULmtleSwgT3JkZXIuZGVzYykua2V5KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoVC5rZXksIE9yZGVyLmRlc2MpLmtleSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9ncm91cF9ieVhuYW1lWF9ieVhvdXRFX3dlaWdodF9zdW1YX29yZGVyWGxvY2FsWF9ieVh2YWx1ZXNYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLnZhbHVlcykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKCkuYnkoc3RyaW5nMSkuYnkoX18ub3V0RSgpLnZhbHVlcyhzdHJpbmcyKS5zdW0oKSkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwibmFtZVwiKS5CeShfXy5PdXRFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuU3VtPG9iamVjdD4oKSkuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KENvbHVtbi5WYWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuR3JvdXAoKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5PdXRFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLlN1bSgpKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLnZhbHVlcykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi52YWx1ZXMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KF9fLm91dF9lKCkudmFsdWVzKCd3ZWlnaHQnKS5zdW1fKCkpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4udmFsdWVzKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfb3JkZXJfYnlYc3VtWGxvY2FsWF9kZXNjWF9ieVhjb3VudFhsb2NhbFhfZGVzY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubWFwKF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpLm9yZGVyKCkuYnkoX18uc3VtKFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykuYnkoX18uY291bnQoU2NvcGUubG9jYWwpLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKS5vcmRlcigpLmJ5KF9fLnN1bShTY29wZS5sb2NhbCksIE9yZGVyLmRlc2MpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubWFwKF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpLm9yZGVyKCkuYnkoX18uc3VtKFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykuYnkoX18uY291bnQoU2NvcGUubG9jYWwpLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubWFwKF9fLmJvdGhFKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkpLm9yZGVyKCkuYnkoX18uc3VtKFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykuYnkoX18uY291bnQoU2NvcGUubG9jYWwpLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5NYXA8b2JqZWN0PihfXy5Cb3RoRSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLk9yZGVyKCkuQnkoT3JkZXIuQXNjKS5Gb2xkKCkpLk9yZGVyKCkuQnkoX18uU3VtPG9iamVjdD4oU2NvcGUuTG9jYWwpLCBPcmRlci5EZXNjKS5CeShfXy5Db3VudChTY29wZS5Mb2NhbCksIE9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTWFwKGdyZW1saW5nby5UX18uQm90aEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuQXNjKS5Gb2xkKCkpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLlRfXy5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkJ5KGdyZW1saW5nby5UX18uQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKS5vcmRlcigpLmJ5KF9fLnN1bShTY29wZS5sb2NhbCksIE9yZGVyLmRlc2MpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKS5vcmRlcigpLmJ5KF9fLnN1bShTY29wZS5sb2NhbCksIE9yZGVyLmRlc2MpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpKS5vcmRlcigpLmJ5KF9fLnN1bShTY29wZS5sb2NhbCksIE9yZGVyLmRlc2MpLmJ5KF9fLmNvdW50KFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubWFwKF9fLmJvdGhfZSgpLnZhbHVlcygnd2VpZ2h0Jykub3JkZXIoKS5ieShPcmRlci5hc2MpLmZvbGQoKSkub3JkZXIoKS5ieShfXy5zdW1fKFNjb3BlLmxvY2FsKSwgT3JkZXIuZGVzYykuYnkoX18uY291bnQoU2NvcGUubG9jYWwpLCBPcmRlci5kZXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwX2J5WGxhYmVsWF9ieVhuYW1lX29yZGVyX2J5WGRlc2NYX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShULkxhYmVsKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcygnbmFtZScpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfZ3JvdXBfYnlYbmFtZVhfYnlYb3V0RV93ZWlnaHRfc3VtWF91bmZvbGRfb3JkZXJfYnlYdmFsdWVzX2Rlc2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLnVuZm9sZCgpLm9yZGVyKCkuYnkoQ29sdW1uLnZhbHVlcywgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS51bmZvbGQoKS5vcmRlcigpLmJ5KENvbHVtbi52YWx1ZXMsIE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLnVuZm9sZCgpLm9yZGVyKCkuYnkoQ29sdW1uLnZhbHVlcywgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKCkuYnkoc3RyaW5nMSkuYnkoX18ub3V0RSgpLnZhbHVlcyhzdHJpbmcyKS5zdW0oKSkudW5mb2xkKCkub3JkZXIoKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShcIm5hbWVcIikuQnkoX18uT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLlN1bTxvYmplY3Q+KCkpLlVuZm9sZDxvYmplY3Q+KCkuT3JkZXIoKS5CeShDb2x1bW4uVmFsdWVzLCBPcmRlci5EZXNjKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkdyb3VwKCkuQnkoXCJuYW1lXCIpLkJ5KGdyZW1saW5nby5UX18uT3V0RSgpLlZhbHVlcyhcIndlaWdodFwiKS5TdW0oKSkuVW5mb2xkKCkuT3JkZXIoKS5CeShncmVtbGluZ28uQ29sdW1uLlZhbHVlcywgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLnVuZm9sZCgpLm9yZGVyKCkuYnkoQ29sdW1uLnZhbHVlcywgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLnVuZm9sZCgpLm9yZGVyKCkuYnkoQ29sdW1uLnZhbHVlcywgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLnVuZm9sZCgpLm9yZGVyKCkuYnkoQ29sdW1uLnZhbHVlcywgT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5ncm91cCgpLmJ5KCduYW1lJykuYnkoX18ub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkudW5mb2xkKCkub3JkZXIoKS5ieShDb2x1bW4udmFsdWVzLCBPcmRlci5kZXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWHZYX21hcFhib3RoRV93ZWlnaHRfZm9sZFhfc3VtWGxvY2FsWF9hc1hzWF9zZWxlY3RYdl9zWF9vcmRlcl9ieVhzZWxlY3RYc1hfZGVzY1hfYnlYc2VsZWN0WHZYX25hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwidlwiKS5tYXAoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpLmFzKFwic1wiKS5zZWxlY3QoXCJ2XCIsIFwic1wiKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInNcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInZcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcInZcIikubWFwKF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmZvbGQoKSkuc3VtKFNjb3BlLmxvY2FsKS5hcyhcInNcIikuc2VsZWN0KFwidlwiLCBcInNcIikub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJzXCIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3QoXCJ2XCIpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwidlwiKS5tYXAoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpLmFzKFwic1wiKS5zZWxlY3QoXCJ2XCIsIFwic1wiKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcInNcIiksIE9yZGVyLmRlc2MpLmJ5KF9fLnNlbGVjdChcInZcIikudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzAsIHN0cmluZzIpLm9yZGVyKCkuYnkoX18uc2VsZWN0KHN0cmluZzIpLCBPcmRlci5kZXNjKS5ieShfXy5zZWxlY3Qoc3RyaW5nMCkudmFsdWVzKHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcInZcIikuTWFwPG9iamVjdD4oX18uQm90aEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5Gb2xkKCkpLlN1bTxvYmplY3Q+KFNjb3BlLkxvY2FsKS5BcyhcInNcIikuU2VsZWN0PG9iamVjdD4oXCJ2XCIsIFwic1wiKS5PcmRlcigpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwic1wiKSwgT3JkZXIuRGVzYykuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJ2XCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcInZcIikuTWFwKGdyZW1saW5nby5UX18uQm90aEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuRm9sZCgpKS5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5BcyhcInNcIikuU2VsZWN0KFwidlwiLCBcInNcIikuT3JkZXIoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInNcIiksIGdyZW1saW5nby5PcmRlci5EZXNjKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInZcIikuVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJ2XCIpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkuYXMoXCJzXCIpLnNlbGVjdChcInZcIiwgXCJzXCIpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwic1wiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KFwidlwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJ2XCIpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkuYXMoXCJzXCIpLnNlbGVjdChcInZcIiwgXCJzXCIpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwic1wiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KFwidlwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJ2XCIpLm1hcChfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkuYXMoXCJzXCIpLnNlbGVjdChcInZcIiwgXCJzXCIpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwic1wiKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KFwidlwiKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ3YnKS5tYXAoX18uYm90aF9lKCkudmFsdWVzKCd3ZWlnaHQnKS5mb2xkKCkpLnN1bV8oU2NvcGUubG9jYWwpLmFzXygncycpLnNlbGVjdCgndicsICdzJykub3JkZXIoKS5ieShfXy5zZWxlY3QoJ3MnKSwgT3JkZXIuZGVzYykuYnkoX18uc2VsZWN0KCd2JykudmFsdWVzKCduYW1lJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9mb2xkX29yZGVyWGxvY2FsWF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuRm9sZCgpLk9yZGVyKFNjb3BlLkxvY2FsKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JvdGhfaGFzTGFiZWxYcGVyc29uWF9vcmRlcl9ieVhhZ2VfZGVzY1hfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ib3RoKCkuaGFzTGFiZWwoc3RyaW5nMCkub3JkZXIoKS5ieShzdHJpbmcxLCBPcmRlci5kZXNjKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkhhc0xhYmVsKFwicGVyc29uXCIpLk9yZGVyKCkuQnkoXCJhZ2VcIiwgT3JkZXIuRGVzYykuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLkhhc0xhYmVsKFwicGVyc29uXCIpLk9yZGVyKCkuQnkoXCJhZ2VcIiwgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYm90aCgpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIiwgT3JkZXIuZGVzYykudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5vcmRlcigpLmJ5KCdhZ2UnLCBPcmRlci5kZXNjKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX29yZGVyX2J5WG91dEVfY291bnRfZGVzY1hfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3JkZXIoKS5ieShfXy5vdXRFKCkuY291bnQoKSwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3JkZXIoKS5ieShfXy5vdXRFKCkuY291bnQoKSwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoX18ub3V0RSgpLmNvdW50KCksIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3JkZXIoKS5ieShfXy5vdXRFKCkuY291bnQoKSwgT3JkZXIuZGVzYykuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3JkZXIoKS5CeShfXy5PdXRFKCkuQ291bnQoKSwgT3JkZXIuRGVzYykuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3JkZXIoKS5CeShncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpLCBncmVtbGluZ28uT3JkZXIuRGVzYykuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm9yZGVyKCkuYnkoX18ub3V0RSgpLmNvdW50KCksIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3JkZXIoKS5ieShfXy5vdXRFKCkuY291bnQoKSwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcmRlcigpLmJ5KF9fLm91dEUoKS5jb3VudCgpLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3JkZXIoKS5ieShfXy5vdXRfZSgpLmNvdW50KCksIE9yZGVyLmRlc2MpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX29yZGVyX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLm9yZGVyKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkub3JkZXIoKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5PcmRlcigpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuT3JkZXIoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykub3JkZXIoKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vcmRlcl9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm9yZGVyKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm9yZGVyKCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3JkZXIoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk9yZGVyKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vcmRlcigpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKGxvY2FsKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRm9sZCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGFnZV9kZXNjWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mb2xkKCkub3JkZXIobG9jYWwpLmJ5KFwiYWdlXCIsIGRlc2MpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KFwiYWdlXCIsIE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KHN0cmluZzAsIE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkZvbGQoKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoXCJhZ2VcIiwgT3JkZXIuRGVzYykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Gb2xkKCkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKS5CeShcImFnZVwiLCBncmVtbGluZ28uT3JkZXIuRGVzYykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShcImFnZVwiLCBPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCdhZ2UnLCBPcmRlci5kZXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX29yWGhhc0xhYmVsWHBlcnNvblhfaGFzWHNvZnR3YXJlX25hbWVfbG9wWFhfb3JkZXJfYnlYYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vcihoYXNMYWJlbChcInBlcnNvblwiKSxoYXMoXCJzb2Z0d2FyZVwiLFwibmFtZVwiLFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3IoX18uaGFzTGFiZWwoXCJwZXJzb25cIiksIF9fLmhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKSkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vcihfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18uaGFzKFwic29mdHdhcmVcIiwgXCJuYW1lXCIsIFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vcihfXy5oYXNMYWJlbChzdHJpbmcwKSwgX18uaGFzKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpKS5vcmRlcigpLmJ5KHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk9yKF9fLkhhc0xhYmVsKFwicGVyc29uXCIpLCBfXy5IYXMoXCJzb2Z0d2FyZVwiLCBcIm5hbWVcIiwgXCJsb3BcIikpLk9yZGVyKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PcihncmVtbGluZ28uVF9fLkhhc0xhYmVsKFwicGVyc29uXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKSkuT3JkZXIoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vcihfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18uaGFzKFwic29mdHdhcmVcIiwgXCJuYW1lXCIsIFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vcihfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18uaGFzKFwic29mdHdhcmVcIiwgXCJuYW1lXCIsIFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vcihfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18uaGFzKFwic29mdHdhcmVcIiwgXCJuYW1lXCIsIFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm9yXyhfXy5oYXNfbGFiZWwoJ3BlcnNvbicpLCBfXy5oYXMoJ3NvZnR3YXJlJywgJ25hbWUnLCAnbG9wJykpLm9yZGVyKCkuYnkoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX29yWGhhc0xhYmVsWHBlcnNvblhfaGFzWHNvZnR3YXJlX25hbWVfbG9wWFhfb3JkZXJfYnlYYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkub3IoaGFzTGFiZWwoXCJwZXJzb25cIiksaGFzKFwic29mdHdhcmVcIixcIm5hbWVcIixcImxvcFwiKSkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5vcihfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18uaGFzKFwic29mdHdhcmVcIiwgXCJuYW1lXCIsIFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5vcihfXy5oYXNMYWJlbChcInBlcnNvblwiKSwgX18uaGFzKFwic29mdHdhcmVcIiwgXCJuYW1lXCIsIFwibG9wXCIpKS5vcmRlcigpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkub3IoX18uaGFzTGFiZWwoc3RyaW5nMCksIF9fLmhhcyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczKSkub3JkZXIoKS5ieShzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuT3IoX18uSGFzTGFiZWwoXCJwZXJzb25cIiksIF9fLkhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKSkuT3JkZXIoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5PcihncmVtbGluZ28uVF9fLkhhc0xhYmVsKFwicGVyc29uXCIpLCBncmVtbGluZ28uVF9fLkhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKSkuT3JkZXIoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkub3IoX18uaGFzTGFiZWwoXCJwZXJzb25cIiksIF9fLmhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKSkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkub3IoX18uaGFzTGFiZWwoXCJwZXJzb25cIiksIF9fLmhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKSkub3JkZXIoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLm9yKF9fLmhhc0xhYmVsKFwicGVyc29uXCIpLCBfXy5oYXMoXCJzb2Z0d2FyZVwiLCBcIm5hbWVcIiwgXCJsb3BcIikpLm9yZGVyKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLm9yXyhfXy5oYXNfbGFiZWwoJ3BlcnNvbicpLCBfXy5oYXMoJ3NvZnR3YXJlJywgJ25hbWUnLCAnbG9wJykpLm9yZGVyKCkuYnkoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHNvbmdfbmFtZV9PSEJPWVhfb3V0WGZvbGxvd2VkQnlYX291dFhmb2xsb3dlZEJ5WF9vcmRlcl9ieVhwZXJmb3JtYW5jZXNYX2J5WHNvbmdUeXBlX2Rlc2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiT0ggQk9ZXCIpLm91dChcImZvbGxvd2VkQnlcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLmJ5KFwic29uZ1R5cGVcIiwgZGVzYykuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJPSCBCT1lcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuYnkoXCJzb25nVHlwZVwiLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJPSCBCT1lcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuYnkoXCJzb25nVHlwZVwiLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5vdXQoc3RyaW5nMykub3V0KHN0cmluZzMpLm9yZGVyKCkuYnkoc3RyaW5nNCkuYnkoc3RyaW5nNSwgT3JkZXIuZGVzYykuYnkoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJPSCBCT1lcIikuT3V0KFwiZm9sbG93ZWRCeVwiKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIikuQnkoXCJzb25nVHlwZVwiLCBPcmRlci5EZXNjKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJzb25nXCIsIFwibmFtZVwiLCBcIk9IIEJPWVwiKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLk91dChcImZvbGxvd2VkQnlcIikuT3JkZXIoKS5CeShcInBlcmZvcm1hbmNlc1wiKS5CeShcInNvbmdUeXBlXCIsIGdyZW1saW5nby5PcmRlci5EZXNjKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJPSCBCT1lcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIikuYnkoXCJzb25nVHlwZVwiLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiT0ggQk9ZXCIpLm91dChcImZvbGxvd2VkQnlcIikub3V0KFwiZm9sbG93ZWRCeVwiKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIpLmJ5KFwic29uZ1R5cGVcIiwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJzb25nXCIsIFwibmFtZVwiLCBcIk9IIEJPWVwiKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLm91dChcImZvbGxvd2VkQnlcIikub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiKS5ieShcInNvbmdUeXBlXCIsIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3NvbmcnLCAnbmFtZScsICdPSCBCT1knKS5vdXQoJ2ZvbGxvd2VkQnknKS5vdXQoJ2ZvbGxvd2VkQnknKS5vcmRlcigpLmJ5KCdwZXJmb3JtYW5jZXMnKS5ieSgnc29uZ1R5cGUnLCBPcmRlci5kZXNjKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYc29uZ1hfb3JkZXJfYnlYcGVyZm9ybWFuY2VzX2Rlc2NYX2J5WG5hbWVYX3JhbmdlWDExMF8xMjBYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb25nXCIpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIiwgZGVzYykuYnkoXCJuYW1lXCIpLnJhbmdlKDExMCwgMTIwKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb25nXCIpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIiwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpLnJhbmdlKDExMCwgMTIwKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIsIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKS5yYW5nZSgxMTAsIDEyMCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkub3JkZXIoKS5ieShzdHJpbmcxLCBPcmRlci5kZXNjKS5ieShzdHJpbmcyKS5yYW5nZShudW1iZXIwLCBudW1iZXIxKS52YWx1ZXMoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb25nXCIpLk9yZGVyKCkuQnkoXCJwZXJmb3JtYW5jZXNcIiwgT3JkZXIuRGVzYykuQnkoXCJuYW1lXCIpLlJhbmdlPG9iamVjdD4oMTEwLCAxMjApLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29uZ1wiKS5PcmRlcigpLkJ5KFwicGVyZm9ybWFuY2VzXCIsIGdyZW1saW5nby5PcmRlci5EZXNjKS5CeShcIm5hbWVcIikuUmFuZ2UoMTEwLCAxMjApLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb25nXCIpLm9yZGVyKCkuYnkoXCJwZXJmb3JtYW5jZXNcIiwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpLnJhbmdlKDExMCwgMTIwKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikub3JkZXIoKS5ieShcInBlcmZvcm1hbmNlc1wiLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikucmFuZ2UoMTEwLCAxMjApLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5vcmRlcigpLmJ5KFwicGVyZm9ybWFuY2VzXCIsIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKS5yYW5nZSgxMTAsIDEyMCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvbmcnKS5vcmRlcigpLmJ5KCdwZXJmb3JtYW5jZXMnLCBPcmRlci5kZXNjKS5ieSgnbmFtZScpLnJhbmdlXygxMTAsIDEyMCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9lbGVtZW50TWFwX29yZGVyWGxvY2FsWF9ieVhrZXlzX2Rlc2NYdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5kZXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5kZXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuZGVzYykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5kZXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuRWxlbWVudE1hcDxvYmplY3Q+KCkuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KENvbHVtbi5LZXlzLCBPcmRlci5EZXNjKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkVsZW1lbnRNYXAoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KGdyZW1saW5nby5Db2x1bW4uS2V5cywgZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5kZXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmVsZW1lbnRNYXAoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLmtleXMsIE9yZGVyLmRlc2MpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuZGVzYykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmVsZW1lbnRfbWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5kZXNjKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2VsZW1lbnRNYXBfb3JkZXJYbG9jYWxYX2J5WGtleXNfYXNjWHVuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuYXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5hc2MpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5hc2MpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuYXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuRWxlbWVudE1hcDxvYmplY3Q+KCkuT3JkZXIoU2NvcGUuTG9jYWwpLkJ5KENvbHVtbi5LZXlzLCBPcmRlci5Bc2MpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuRWxlbWVudE1hcCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkuQnkoZ3JlbWxpbmdvLkNvbHVtbi5LZXlzLCBncmVtbGluZ28uT3JkZXIuQXNjKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuZWxlbWVudE1hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuYXNjKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmVsZW1lbnRNYXAoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoQ29sdW1uLmtleXMsIE9yZGVyLmFzYykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5lbGVtZW50TWFwKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KENvbHVtbi5rZXlzLCBPcmRlci5hc2MpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5lbGVtZW50X21hcCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShDb2x1bW4ua2V5cywgT3JkZXIuYXNjKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlc1hhZ2VYX29yZGVyWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkudmFsdWVzKHN0cmluZzApLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuT3JkZXIoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlZhbHVlcyhcImFnZVwiKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnZhbHVlcygnYWdlJykub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcGFnZVJhbmtfaGFzWHBhZ2VSYW5rWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wYWdlUmFuaygpLmhhcyhcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucGFnZVJhbmsoKS5oYXMoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wYWdlUmFuaygpLmhhcyhcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wYWdlUmFuaygpLmhhcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5QYWdlUmFuaygpLkhhcyhcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUGFnZVJhbmsoKS5IYXMoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wYWdlUmFuaygpLmhhcyhcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wYWdlUmFuaygpLmhhcyhcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wYWdlUmFuaygpLmhhcyhcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnBhZ2VfcmFuaygpLmhhcygnZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmsnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dFhjcmVhdGVkWF9wYWdlUmFua193aXRoWGVkZ2VzX2JvdGhFWF93aXRoWHByb3BlcnR5TmFtZV9wcm9qZWN0UmFua1hfd2l0aFh0aW1lc18wWF92YWx1ZU1hcFhuYW1lX3Byb2plY3RSYW5rWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIixfXy5ib3RoRSgpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIixcInByb2plY3RSYW5rXCIpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsMCkudmFsdWVNYXAoXCJuYW1lXCIsIFwicHJvamVjdFJhbmtcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18uYm90aEUoKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicHJvamVjdFJhbmtcIikud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMCkudmFsdWVNYXAoXCJuYW1lXCIsIFwicHJvamVjdFJhbmtcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLmJvdGhFKCkpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByb2plY3RSYW5rXCIpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDApLnZhbHVlTWFwKFwibmFtZVwiLCBcInByb2plY3RSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoc3RyaW5nMCkucGFnZVJhbmsoKS53aXRoKHN0cmluZzEsIF9fLmJvdGhFKCkpLndpdGgoc3RyaW5nMiwgc3RyaW5nMykud2l0aChzdHJpbmc0LCBudW1iZXIwKS52YWx1ZU1hcChzdHJpbmc1LCBzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLlBhZ2VSYW5rKCkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18uQm90aEUoKSkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicHJvamVjdFJhbmtcIikuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibmFtZVwiLCBcInByb2plY3RSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5QYWdlUmFuaygpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIGdyZW1saW5nby5UX18uQm90aEUoKSkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicHJvamVjdFJhbmtcIikuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMCkuVmFsdWVNYXAoXCJuYW1lXCIsIFwicHJvamVjdFJhbmtcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLmJvdGhFKCkpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByb2plY3RSYW5rXCIpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDApLnZhbHVlTWFwKFwibmFtZVwiLCBcInByb2plY3RSYW5rXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18uYm90aEUoKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicHJvamVjdFJhbmtcIikud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMCkudmFsdWVNYXAoXCJuYW1lXCIsIFwicHJvamVjdFJhbmtcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikucGFnZVJhbmsoKS53aXRoXyhcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18uYm90aEUoKSkud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByb2plY3RSYW5rXCIpLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAwKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJwcm9qZWN0UmFua1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5wYWdlX3JhbmsoKS53aXRoXygnfnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlcycsIF9fLmJvdGhfZSgpKS53aXRoXygnfnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUnLCAncHJvamVjdFJhbmsnKS53aXRoXygnfnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcycsIDApLnZhbHVlX21hcCgnbmFtZScsICdwcm9qZWN0UmFuaycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcGFnZVJhbmtfb3JkZXJfYnlYcGFnZVJhbmtfZGVzY1hfYnlYbmFtZVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIsIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIsIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoc3RyaW5nMCwgT3JkZXIuZGVzYykuYnkoc3RyaW5nMSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlBhZ2VSYW5rKCkuT3JkZXIoKS5CeShcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIsIE9yZGVyLkRlc2MpLkJ5KFwibmFtZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5QYWdlUmFuaygpLk9yZGVyKCkuQnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBncmVtbGluZ28uT3JkZXIuRGVzYykuQnkoXCJuYW1lXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucGFnZVJhbmsoKS5vcmRlcigpLmJ5KFwiZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmtcIiwgT3JkZXIuZGVzYykuYnkoXCJuYW1lXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIsIE9yZGVyLmRlc2MpLmJ5KFwibmFtZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBPcmRlci5kZXNjKS5ieShcIm5hbWVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wYWdlX3JhbmsoKS5vcmRlcigpLmJ5KCdncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFuaycsIE9yZGVyLmRlc2MpLmJ5KCduYW1lJykudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wYWdlUmFua19vcmRlcl9ieVhwYWdlUmFua19kZXNjWF9uYW1lX2xpbWl0WDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIsIE9yZGVyLmRlc2MpLnZhbHVlcyhcIm5hbWVcIikubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJuYW1lXCIpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShcImdyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rXCIsIE9yZGVyLmRlc2MpLnZhbHVlcyhcIm5hbWVcIikubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnBhZ2VSYW5rKCkub3JkZXIoKS5ieShzdHJpbmcwLCBPcmRlci5kZXNjKS52YWx1ZXMoc3RyaW5nMSkubGltaXQobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUGFnZVJhbmsoKS5PcmRlcigpLkJ5KFwiZ3JlbWxpbi5wYWdlUmFua1ZlcnRleFByb2dyYW0ucGFnZVJhbmtcIiwgT3JkZXIuRGVzYykuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkxpbWl0PG9iamVjdD4oMikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5QYWdlUmFuaygpLk9yZGVyKCkuQnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBncmVtbGluZ28uT3JkZXIuRGVzYykuVmFsdWVzKFwibmFtZVwiKS5MaW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJuYW1lXCIpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJuYW1lXCIpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wYWdlUmFuaygpLm9yZGVyKCkuYnkoXCJncmVtbGluLnBhZ2VSYW5rVmVydGV4UHJvZ3JhbS5wYWdlUmFua1wiLCBPcmRlci5kZXNjKS52YWx1ZXMoXCJuYW1lXCIpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnBhZ2VfcmFuaygpLm9yZGVyKCkuYnkoJ2dyZW1saW4ucGFnZVJhbmtWZXJ0ZXhQcm9ncmFtLnBhZ2VSYW5rJywgT3JkZXIuZGVzYykudmFsdWVzKCduYW1lJykubGltaXQoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wYWdlUmFua193aXRoWGVkZ2VzX291dEVYa25vd3NYWF93aXRoWHByb3BlcnR5TmFtZV9mcmllbmRSYW5rWF9wcm9qZWN0X2J5WG5hbWVYX2J5WHZhbHVlc1hmcmllbmRSYW5rWF9tYXRoWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsX18ub3V0RShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIixcImZyaWVuZFJhbmtcIikucHJvamVjdChcIm5hbWVcIiwgXCJmcmllbmRSYW5rXCIpLmJ5KFwibmFtZVwiKS5ieShfXy52YWx1ZXMoXCJmcmllbmRSYW5rXCIpLm1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJmcmllbmRSYW5rXCIpLnByb2plY3QoXCJuYW1lXCIsIFwiZnJpZW5kUmFua1wiKS5ieShcIm5hbWVcIikuYnkoX18udmFsdWVzKFwiZnJpZW5kUmFua1wiKS5tYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucGFnZVJhbmsoKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5vdXRFKFwia25vd3NcIikpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcImZyaWVuZFJhbmtcIikucHJvamVjdChcIm5hbWVcIiwgXCJmcmllbmRSYW5rXCIpLmJ5KFwibmFtZVwiKS5ieShfXy52YWx1ZXMoXCJmcmllbmRSYW5rXCIpLm1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucGFnZVJhbmsoKS53aXRoKHN0cmluZzAsIF9fLm91dEUoc3RyaW5nMSkpLndpdGgoc3RyaW5nMiwgc3RyaW5nMykucHJvamVjdChzdHJpbmc0LCBzdHJpbmczKS5ieShzdHJpbmc0KS5ieShfXy52YWx1ZXMoc3RyaW5nMykubWF0aChzdHJpbmc1KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUGFnZVJhbmsoKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5PdXRFKFwia25vd3NcIikpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcImZyaWVuZFJhbmtcIikuUHJvamVjdDxvYmplY3Q+KFwibmFtZVwiLCBcImZyaWVuZFJhbmtcIikuQnkoXCJuYW1lXCIpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwiZnJpZW5kUmFua1wiKS5NYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5QYWdlUmFuaygpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIGdyZW1saW5nby5UX18uT3V0RShcImtub3dzXCIpKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJmcmllbmRSYW5rXCIpLlByb2plY3QoXCJuYW1lXCIsIFwiZnJpZW5kUmFua1wiKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJmcmllbmRSYW5rXCIpLk1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLm91dEUoXCJrbm93c1wiKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwiZnJpZW5kUmFua1wiKS5wcm9qZWN0KFwibmFtZVwiLCBcImZyaWVuZFJhbmtcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLnZhbHVlcyhcImZyaWVuZFJhbmtcIikubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLm91dEUoXCJrbm93c1wiKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwiZnJpZW5kUmFua1wiKS5wcm9qZWN0KFwibmFtZVwiLCBcImZyaWVuZFJhbmtcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLnZhbHVlcyhcImZyaWVuZFJhbmtcIikubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wYWdlUmFuaygpLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5vdXRFKFwia25vd3NcIikpLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJmcmllbmRSYW5rXCIpLnByb2plY3QoXCJuYW1lXCIsIFwiZnJpZW5kUmFua1wiKS5ieShcIm5hbWVcIikuYnkoX18udmFsdWVzKFwiZnJpZW5kUmFua1wiKS5tYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucGFnZV9yYW5rKCkud2l0aF8oJ350aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMnLCBfXy5vdXRfZSgna25vd3MnKSkud2l0aF8oJ350aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lJywgJ2ZyaWVuZFJhbmsnKS5wcm9qZWN0KCduYW1lJywgJ2ZyaWVuZFJhbmsnKS5ieSgnbmFtZScpLmJ5KF9fLnZhbHVlcygnZnJpZW5kUmFuaycpLm1hdGgoJ2NlaWwoXyAqIDEwMCknKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX2twYWdlUmFua1hfcHJvamVjdF9ieVhuYW1lWF9ieVh2YWx1ZXNYcGFnZVJhbmtYX21hdGhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsXCJwYWdlUmFua1wiKS5wcm9qZWN0KFwibmFtZVwiLCBcInBhZ2VSYW5rXCIpLmJ5KFwibmFtZVwiKS5ieShfXy52YWx1ZXMoXCJwYWdlUmFua1wiKS5tYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInBhZ2VSYW5rXCIpLnByb2plY3QoXCJuYW1lXCIsIFwicGFnZVJhbmtcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLnZhbHVlcyhcInBhZ2VSYW5rXCIpLm1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5wYWdlUmFuaygpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInBhZ2VSYW5rXCIpLnByb2plY3QoXCJuYW1lXCIsIFwicGFnZVJhbmtcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLnZhbHVlcyhcInBhZ2VSYW5rXCIpLm1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkucGFnZVJhbmsoKS53aXRoKHN0cmluZzEsIHN0cmluZzIpLnByb2plY3Qoc3RyaW5nMywgc3RyaW5nMikuYnkoc3RyaW5nMykuYnkoX18udmFsdWVzKHN0cmluZzIpLm1hdGgoc3RyaW5nNCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlBhZ2VSYW5rKCkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikuUHJvamVjdDxvYmplY3Q+KFwibmFtZVwiLCBcInBhZ2VSYW5rXCIpLkJ5KFwibmFtZVwiKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcInBhZ2VSYW5rXCIpLk1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlBhZ2VSYW5rKCkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikuUHJvamVjdChcIm5hbWVcIiwgXCJwYWdlUmFua1wiKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJwYWdlUmFua1wiKS5NYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikucGFnZVJhbmsoKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5wcm9qZWN0KFwibmFtZVwiLCBcInBhZ2VSYW5rXCIpLmJ5KFwibmFtZVwiKS5ieShfXy52YWx1ZXMoXCJwYWdlUmFua1wiKS5tYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikucHJvamVjdChcIm5hbWVcIiwgXCJwYWdlUmFua1wiKS5ieShcIm5hbWVcIikuYnkoX18udmFsdWVzKFwicGFnZVJhbmtcIikubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5wYWdlUmFuaygpLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5wcm9qZWN0KFwibmFtZVwiLCBcInBhZ2VSYW5rXCIpLmJ5KFwibmFtZVwiKS5ieShfXy52YWx1ZXMoXCJwYWdlUmFua1wiKS5tYXRoKFwiY2VpbChfICogMTAwKVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5wYWdlX3JhbmsoKS53aXRoXygnfnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUnLCAncGFnZVJhbmsnKS5wcm9qZWN0KCduYW1lJywgJ3BhZ2VSYW5rJykuYnkoJ25hbWUnKS5ieShfXy52YWx1ZXMoJ3BhZ2VSYW5rJykubWF0aCgnY2VpbChfICogMTAwKScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3BhZ2VSYW5rX3dpdGhYcHJvcGVydHlOYW1lX3BhZ2VSYW5rWF9hc1hhWF9vdXRYa25vd3NYX3BhZ2VSYW5rX2FzWGJYX3NlbGVjdFhhX2JYX2J5X2J5WG1hdGhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsXCJwYWdlUmFua1wiKS5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwicGFnZVJhbmtcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KCkuYnkoX18ubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucGFnZVJhbmsoKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwicGFnZVJhbmtcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KCkuYnkoX18ubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnZhbHVlcyhcInBhZ2VSYW5rXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieSgpLmJ5KF9fLm1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucGFnZVJhbmsoKS53aXRoKHN0cmluZzAsIHN0cmluZzEpLmFzKHN0cmluZzIpLm91dChzdHJpbmczKS52YWx1ZXMoc3RyaW5nMSkuYXMoc3RyaW5nNCkuc2VsZWN0KHN0cmluZzIsIHN0cmluZzQpLmJ5KCkuYnkoX18ubWF0aChzdHJpbmc1KSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUGFnZVJhbmsoKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuVmFsdWVzPG9iamVjdD4oXCJwYWdlUmFua1wiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeSgpLkJ5KF9fLk1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlBhZ2VSYW5rKCkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLlZhbHVlcyhcInBhZ2VSYW5rXCIpLkFzKFwiYlwiKS5TZWxlY3QoXCJhXCIsIFwiYlwiKS5CeSgpLkJ5KGdyZW1saW5nby5UX18uTWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnBhZ2VSYW5rKCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnZhbHVlcyhcInBhZ2VSYW5rXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieSgpLmJ5KF9fLm1hdGgoXCJjZWlsKF8gKiAxMDApXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucGFnZVJhbmsoKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwicGFnZVJhbmtcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KCkuYnkoX18ubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wYWdlUmFuaygpLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5hcyhcImFcIikub3V0KFwia25vd3NcIikudmFsdWVzKFwicGFnZVJhbmtcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KCkuYnkoX18ubWF0aChcImNlaWwoXyAqIDEwMClcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnBhZ2VfcmFuaygpLndpdGhfKCd+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZScsICdwYWdlUmFuaycpLmFzXygnYScpLm91dCgna25vd3MnKS52YWx1ZXMoJ3BhZ2VSYW5rJykuYXNfKCdiJykuc2VsZWN0KCdhJywgJ2InKS5ieSgpLmJ5KF9fLm1hdGgoJ2NlaWwoXyAqIDEwMCknKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfaGFzWG5hbWVfcmlwcGxlWF9wYWdlUmFua1gxWF93aXRoWGVkZ2VzX2luRVhjcmVhdGVkWF93aXRoWHRpbWVzXzFYX3dpdGhYcHJvcGVydHlOYW1lX3ByaW9yc1hfaW5YY3JlYXRlZFhfdW5pb25YYm90aF9faWRlbnRpdHlYX3ZhbHVlTWFwWG5hbWVfcHJpb3JzWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikucGFnZVJhbmsoMS4wKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLF9fLmluRShcImNyZWF0ZWRcIikpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsMSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsXCJwcmlvcnNcIikuaW4oXCJjcmVhdGVkXCIpLnVuaW9uKF9fLmJvdGgoKSwgX18uaWRlbnRpdHkoKSkudmFsdWVNYXAoXCJuYW1lXCIsIFwicHJpb3JzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnBhZ2VSYW5rKDEuMCkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18uaW5FKFwiY3JlYXRlZFwiKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicHJpb3JzXCIpLmluKFwiY3JlYXRlZFwiKS51bmlvbihfXy5ib3RoKCksIF9fLmlkZW50aXR5KCkpLnZhbHVlTWFwKFwibmFtZVwiLCBcInByaW9yc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikucGFnZVJhbmsoMS4wKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5pbkUoXCJjcmVhdGVkXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwcmlvcnNcIikuaW4oXCJjcmVhdGVkXCIpLnVuaW9uKF9fLmJvdGgoKSwgX18uaWRlbnRpdHkoKSkudmFsdWVNYXAoXCJuYW1lXCIsIFwicHJpb3JzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikucGFnZVJhbmsobnVtYmVyMCkud2l0aChzdHJpbmczLCBfXy5pbkUoc3RyaW5nNCkpLndpdGgoc3RyaW5nNSwgbnVtYmVyMSkud2l0aChzdHJpbmc2LCBzdHJpbmc3KS5pbihzdHJpbmc0KS51bmlvbihfXy5ib3RoKCksIF9fLmlkZW50aXR5KCkpLnZhbHVlTWFwKHN0cmluZzEsIHN0cmluZzcpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKS5QYWdlUmFuaygxLjApLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLkluRShcImNyZWF0ZWRcIikpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByaW9yc1wiKS5JbihcImNyZWF0ZWRcIikuVW5pb248b2JqZWN0PihfXy5Cb3RoKCksIF9fLklkZW50aXR5KCkpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcIm5hbWVcIiwgXCJwcmlvcnNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLkhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuUGFnZVJhbmsoMS4wKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBncmVtbGluZ28uVF9fLkluRShcImNyZWF0ZWRcIikpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByaW9yc1wiKS5JbihcImNyZWF0ZWRcIikuVW5pb24oZ3JlbWxpbmdvLlRfXy5Cb3RoKCksIGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuVmFsdWVNYXAoXCJuYW1lXCIsIFwicHJpb3JzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLmluRShcImNyZWF0ZWRcIikpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByaW9yc1wiKS5pbihcImNyZWF0ZWRcIikudW5pb24oX18uYm90aCgpLCBfXy5pZGVudGl0eSgpKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJwcmlvcnNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLmluRShcImNyZWF0ZWRcIikpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByaW9yc1wiKS5pbihcImNyZWF0ZWRcIikudW5pb24oX18uYm90aCgpLCBfXy5pZGVudGl0eSgpKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJwcmlvcnNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuaGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKS5wYWdlUmFuaygxLjApLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5pbkUoXCJjcmVhdGVkXCIpKS53aXRoXyhcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMSkud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInByaW9yc1wiKS5pbl8oXCJjcmVhdGVkXCIpLnVuaW9uKF9fLmJvdGgoKSwgX18uaWRlbnRpdHkoKSkudmFsdWVNYXAoXCJuYW1lXCIsIFwicHJpb3JzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS5oYXMoJ25hbWUnLCAncmlwcGxlJykucGFnZV9yYW5rKDEuMCkud2l0aF8oJ350aW5rZXJwb3AucGFnZVJhbmsuZWRnZXMnLCBfXy5pbl9lKCdjcmVhdGVkJykpLndpdGhfKCd+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzJywgMSkud2l0aF8oJ350aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lJywgJ3ByaW9ycycpLmluXygnY3JlYXRlZCcpLnVuaW9uKF9fLmJvdGgoKSwgX18uaWRlbnRpdHkoKSkudmFsdWVfbWFwKCduYW1lJywgJ3ByaW9ycycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwWG1YX2J5WGxhYmVsWF9wYWdlUmFua1gxWF93aXRoWHByb3BlcnR5TmFtZV9wYWdlUmFua1hfd2l0aFhlZGdlc19pbkVYX3dpdGhYdGltZXNfMVhfaW5YY3JlYXRlZFhfZ3JvdXBYbVhfYnlYcGFnZVJhbmtYX2NhcFhtWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwKFwibVwiKS5ieShULmxhYmVsKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInBhZ2VSYW5rXCIpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsX18uaW5FKCkpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLmluKFwiY3JlYXRlZFwiKS5ncm91cChcIm1cIikuYnkoXCJwYWdlUmFua1wiKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cChcIm1cIikuYnkoVC5sYWJlbCkucGFnZVJhbmsoMS4wKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5pbkUoKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMSkuaW4oXCJjcmVhdGVkXCIpLmdyb3VwKFwibVwiKS5ieShcInBhZ2VSYW5rXCIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cChcIm1cIikuYnkoVC5sYWJlbCkucGFnZVJhbmsoMS4wKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5pbkUoKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMSkuaW4oXCJjcmVhdGVkXCIpLmdyb3VwKFwibVwiKS5ieShcInBhZ2VSYW5rXCIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5ncm91cChzdHJpbmcxKS5ieShULmxhYmVsKS5wYWdlUmFuayhudW1iZXIwKS53aXRoKHN0cmluZzIsIHN0cmluZzMpLndpdGgoc3RyaW5nNCwgX18uaW5FKCkpLndpdGgoc3RyaW5nNSwgbnVtYmVyMSkuaW4oc3RyaW5nMCkuZ3JvdXAoc3RyaW5nMSkuYnkoc3RyaW5nMykuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dChcImNyZWF0ZWRcIikuR3JvdXAoXCJtXCIpLkJ5KFQuTGFiZWwpLlBhZ2VSYW5rKDEuMCkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicGFnZVJhbmtcIikuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18uSW5FKCkpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLkluKFwiY3JlYXRlZFwiKS5Hcm91cChcIm1cIikuQnkoXCJwYWdlUmFua1wiKS5DYXA8b2JqZWN0PihcIm1cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLkdyb3VwKFwibVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkuUGFnZVJhbmsoMS4wKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBncmVtbGluZ28uVF9fLkluRSgpKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS5JbihcImNyZWF0ZWRcIikuR3JvdXAoXCJtXCIpLkJ5KFwicGFnZVJhbmtcIikuQ2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwKFwibVwiKS5ieShULmxhYmVsKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInBhZ2VSYW5rXCIpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLmluRSgpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS5pbihcImNyZWF0ZWRcIikuZ3JvdXAoXCJtXCIpLmJ5KFwicGFnZVJhbmtcIikuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cChcIm1cIikuYnkoVC5sYWJlbCkucGFnZVJhbmsoMS4wKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJwYWdlUmFua1wiKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5pbkUoKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMSkuaW4oXCJjcmVhdGVkXCIpLmdyb3VwKFwibVwiKS5ieShcInBhZ2VSYW5rXCIpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoXCJtXCIpLmJ5KFQubGFiZWwpLnBhZ2VSYW5rKDEuMCkud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInBhZ2VSYW5rXCIpLndpdGhfKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5pbkUoKSkud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLmluXyhcImNyZWF0ZWRcIikuZ3JvdXAoXCJtXCIpLmJ5KFwicGFnZVJhbmtcIikuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5ncm91cCgnbScpLmJ5KFQubGFiZWwpLnBhZ2VfcmFuaygxLjApLndpdGhfKCd+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZScsICdwYWdlUmFuaycpLndpdGhfKCd+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzJywgX18uaW5fZSgpKS53aXRoXygnfnRpbmtlcnBvcC5wYWdlUmFuay50aW1lcycsIDEpLmluXygnY3JlYXRlZCcpLmdyb3VwKCdtJykuYnkoJ3BhZ2VSYW5rJykuY2FwKCdtJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9uYW1lX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS52YWx1ZXMoXCJuYW1lXCIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnZhbHVlcyhzdHJpbmcwKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuVmFsdWVzKFwibmFtZVwiKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLnZhbHVlcyhcIm5hbWVcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkudmFsdWVzKFwibmFtZVwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS52YWx1ZXMoXCJuYW1lXCIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkudmFsdWVzKCduYW1lJykucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X3BhdGhfYnlYYWdlWF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmJ5KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5QYXRoKCkuQnkoXCJhZ2VcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLlBhdGgoKS5CeShcImFnZVwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLnBhdGgoKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KCdhZ2UnKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYMlhfcGF0aF9ieVhpdFhfYnlYbmFtZVhfYnlYbGFuZ1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5wYXRoKCkuYnkoKS5ieShcIm5hbWVcIikuYnkoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5wYXRoKCkuYnkoKS5ieShcIm5hbWVcIikuYnkoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpLmJ5KCkuYnkoXCJuYW1lXCIpLmJ5KFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcyhudW1iZXIwKS5wYXRoKCkuYnkoKS5ieShzdHJpbmcwKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uT3V0KCkpLlRpbWVzKDIpLlBhdGgoKS5CeSgpLkJ5KFwibmFtZVwiKS5CeShcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKSkuVGltZXMoMikuUGF0aCgpLkJ5KCkuQnkoXCJuYW1lXCIpLkJ5KFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLnBhdGgoKS5ieSgpLmJ5KFwibmFtZVwiKS5ieShcImxhbmdcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpLmJ5KCkuYnkoXCJuYW1lXCIpLmJ5KFwibGFuZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5wYXRoKCkuYnkoKS5ieShcIm5hbWVcIikuYnkoXCJsYW5nXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikucGF0aCgpLmJ5KCkuYnkoJ25hbWUnKS5ieSgnbGFuZycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dF9wYXRoX2J5WG5hbWVYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLmJ5KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KCduYW1lJykuYnkoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfaGFzWG5hbWVfbWFya29YX2FzWGJYX2hhc1hhZ2VfMjlYX2FzWGNYX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJiXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmhhcyhzdHJpbmc0LCBudW1iZXIwKS5hcyhzdHJpbmc1KS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5BcyhcImJcIikuSGFzKFwiYWdlXCIsIDI5KS5BcyhcImNcIikuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5BcyhcImJcIikuSGFzKFwiYWdlXCIsIDI5KS5BcyhcImNcIikuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJiXCIpLmhhcyhcImFnZVwiLCAyOSkuYXMoXCJjXCIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuaGFzKFwiYWdlXCIsIDI5KS5hcyhcImNcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmFzKFwiYlwiKS5oYXMoXCJhZ2VcIiwgMjkpLmFzKFwiY1wiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykuaGFzKCduYW1lJywgJ21hcmtvJykuYXNfKCdiJykuaGFzKCdhZ2UnLCAyOSkuYXNfKCdjJykucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0RVhjcmVhdGVkWF9pblZfaW5FX291dFZfcGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImNyZWF0ZWRcIikuaW5WKCkuaW5FKCkub3V0VigpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKFwiY3JlYXRlZFwiKS5pblYoKS5pbkUoKS5vdXRWKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwiY3JlYXRlZFwiKS5pblYoKS5pbkUoKS5vdXRWKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5pblYoKS5pbkUoKS5vdXRWKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwiY3JlYXRlZFwiKS5JblYoKS5JbkUoKS5PdXRWKCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJjcmVhdGVkXCIpLkluVigpLkluRSgpLk91dFYoKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoXCJjcmVhdGVkXCIpLmluVigpLmluRSgpLm91dFYoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwiY3JlYXRlZFwiKS5pblYoKS5pbkUoKS5vdXRWKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImNyZWF0ZWRcIikuaW5WKCkuaW5FKCkub3V0VigpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoJ2NyZWF0ZWQnKS5pbl92KCkuaW5fZSgpLm91dF92KCkucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGJYX291dF9hc1hjWF9wYXRoX2Zyb21YYlhfdG9YY1hfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikucGF0aCgpLmZyb20oXCJiXCIpLnRvKFwiY1wiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5wYXRoKCkuZnJvbShcImJcIikudG8oXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5wYXRoKCkuZnJvbShcImJcIikudG8oXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkub3V0KCkuYXMoc3RyaW5nMikucGF0aCgpLmZyb20oc3RyaW5nMSkudG8oc3RyaW5nMikuYnkoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYlwiKS5PdXQoKS5BcyhcImNcIikuUGF0aCgpLkZyb20oXCJiXCIpLlRvKFwiY1wiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5QYXRoKCkuRnJvbShcImJcIikuVG8oXCJjXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5wYXRoKCkuZnJvbShcImJcIikudG8oXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5vdXQoKS5hcyhcImNcIikucGF0aCgpLmZyb20oXCJiXCIpLnRvKFwiY1wiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikub3V0KCkuYXMoXCJjXCIpLnBhdGgoKS5mcm9tXyhcImJcIikudG8oXCJjXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoKS5hc18oJ2InKS5vdXQoKS5hc18oJ2MnKS5wYXRoKCkuZnJvbV8oJ2InKS50bygnYycpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfcGF0aF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLlBhdGgoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5QYXRoKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLnBhdGgoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dCgpLnBhdGgoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLnBhdGgoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVlgxWF9vdXRfcGF0aF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYodmlkMSkuT3V0KCkuUGF0aCgpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVih2aWQxKS5PdXQoKS5QYXRoKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVih2aWQxKS5vdXQoKS5wYXRoKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYodmlkMSkub3V0KCkucGF0aCgpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV9udWxsX251bGxYX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEsIG51bGwsIG51bGwpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCwgb2JqZWN0MCwgb2JqZWN0MCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSwgbnVsbCwgbnVsbCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSwgbmlsLCBuaWwpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLCAoT2JqZWN0KSBudWxsLCBudWxsKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEsIG51bGwsIG51bGwpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEsIE5vbmUsIE5vbmUpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV9udWxsX251bGxYX3BhdGhfZGVkdXAiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLCBudWxsLCBudWxsKS5wYXRoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLCBudWxsLCBudWxsKS5wYXRoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCwgb2JqZWN0MCwgb2JqZWN0MCkucGF0aCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxLCBudWxsLCBudWxsKS5QYXRoKCkuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEsIG5pbCwgbmlsKS5QYXRoKCkuRGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLCAoT2JqZWN0KSBudWxsLCBudWxsKS5wYXRoKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMSwgbnVsbCwgbnVsbCkucGF0aCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEsIG51bGwsIG51bGwpLnBhdGgoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEsIE5vbmUsIE5vbmUpLnBhdGgoKS5kZWR1cCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcGVlclByZXNzdXJlX2hhc1hjbHVzdGVyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS5oYXMoXCJncmVtbGluLnBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW0uY2x1c3RlclwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnBlZXJQcmVzc3VyZSgpLmhhcyhcImdyZW1saW4ucGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbS5jbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnBlZXJQcmVzc3VyZSgpLmhhcyhcImdyZW1saW4ucGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbS5jbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS5oYXMoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUGVlclByZXNzdXJlKCkuSGFzKFwiZ3JlbWxpbi5wZWVyUHJlc3N1cmVWZXJ0ZXhQcm9ncmFtLmNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5QZWVyUHJlc3N1cmUoKS5IYXMoXCJncmVtbGluLnBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW0uY2x1c3RlclwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS5oYXMoXCJncmVtbGluLnBlZXJQcmVzc3VyZVZlcnRleFByb2dyYW0uY2x1c3RlclwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucGVlclByZXNzdXJlKCkuaGFzKFwiZ3JlbWxpbi5wZWVyUHJlc3N1cmVWZXJ0ZXhQcm9ncmFtLmNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnBlZXJQcmVzc3VyZSgpLmhhcyhcImdyZW1saW4ucGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbS5jbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnBlZXJfcHJlc3N1cmUoKS5oYXMoJ2dyZW1saW4ucGVlclByZXNzdXJlVmVydGV4UHJvZ3JhbS5jbHVzdGVyJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wZWVyUHJlc3N1cmVfd2l0aFhwcm9wZXJ0eU5hbWVfY2x1c3Rlclhfd2l0aFhlZGdlc19vdXRFWGtub3dzWFhfcGFnZVJhbmtYMVhfYnlYcmFua1hfd2l0aFhlZGdlc19vdXRFWGtub3dzWF93aXRoWHRpbWVzXzJYX2dyb3VwX2J5WGNsdXN0ZXJYX2J5WHJhbmtfc3VtWF9saW1pdFgxMDBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnBlZXJQcmVzc3VyZSgpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIixcImNsdXN0ZXJcIikud2l0aChcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLmVkZ2VzXCIsX18ub3V0RShcImtub3dzXCIpKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInJhbmtcIikud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS5ncm91cCgpLmJ5KFwiY2x1c3RlclwiKS5ieShfXy52YWx1ZXMoXCJyYW5rXCIpLnN1bSgpKS5saW1pdCgxMDApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucGVlclByZXNzdXJlKCkud2l0aChcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLnByb3BlcnR5TmFtZVwiLCBcImNsdXN0ZXJcIikud2l0aChcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLmVkZ2VzXCIsIF9fLm91dEUoXCJrbm93c1wiKSkucGFnZVJhbmsoMS4wKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWVcIiwgXCJyYW5rXCIpLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLm91dEUoXCJrbm93c1wiKSkud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsudGltZXNcIiwgMSkuZ3JvdXAoKS5ieShcImNsdXN0ZXJcIikuYnkoX18udmFsdWVzKFwicmFua1wiKS5zdW0oKSkubGltaXQoMTAwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInJhbmtcIikud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS5ncm91cCgpLmJ5KFwiY2x1c3RlclwiKS5ieShfXy52YWx1ZXMoXCJyYW5rXCIpLnN1bSgpKS5saW1pdCgxMDApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoKHN0cmluZzAsIHN0cmluZzEpLndpdGgoc3RyaW5nMiwgX18ub3V0RShzdHJpbmczKSkucGFnZVJhbmsobnVtYmVyMCkud2l0aChzdHJpbmc0LCBzdHJpbmc1KS53aXRoKHN0cmluZzYsIF9fLm91dEUoc3RyaW5nMykpLndpdGgoc3RyaW5nNywgbnVtYmVyMSkuZ3JvdXAoKS5ieShzdHJpbmcxKS5ieShfXy52YWx1ZXMoc3RyaW5nNSkuc3VtKCkpLmxpbWl0KG51bWJlcjIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlBlZXJQcmVzc3VyZSgpLldpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLldpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlc1wiLCBfXy5PdXRFKFwia25vd3NcIikpLlBhZ2VSYW5rKDEuMCkuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsucHJvcGVydHlOYW1lXCIsIFwicmFua1wiKS5XaXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay5lZGdlc1wiLCBfXy5PdXRFKFwia25vd3NcIikpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwiY2x1c3RlclwiKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcInJhbmtcIikuU3VtPG9iamVjdD4oKSkuTGltaXQ8b2JqZWN0PigxMDApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUGVlclByZXNzdXJlKCkuV2l0aChcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLnByb3BlcnR5TmFtZVwiLCBcImNsdXN0ZXJcIikuV2l0aChcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLmVkZ2VzXCIsIGdyZW1saW5nby5UX18uT3V0RShcImtub3dzXCIpKS5QYWdlUmFuaygxLjApLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInJhbmtcIikuV2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgZ3JlbWxpbmdvLlRfXy5PdXRFKFwia25vd3NcIikpLldpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLkdyb3VwKCkuQnkoXCJjbHVzdGVyXCIpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwicmFua1wiKS5TdW0oKSkuTGltaXQoMTAwKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInJhbmtcIikud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS5ncm91cCgpLmJ5KFwiY2x1c3RlclwiKS5ieShfXy52YWx1ZXMoXCJyYW5rXCIpLnN1bSgpKS5saW1pdCgxMDApIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS5wYWdlUmFuaygxLjApLndpdGgoXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInJhbmtcIikud2l0aChcIn50aW5rZXJwb3AucGFnZVJhbmsuZWRnZXNcIiwgX18ub3V0RShcImtub3dzXCIpKS53aXRoKFwifnRpbmtlcnBvcC5wYWdlUmFuay50aW1lc1wiLCAxKS5ncm91cCgpLmJ5KFwiY2x1c3RlclwiKS5ieShfXy52YWx1ZXMoXCJyYW5rXCIpLnN1bSgpKS5saW1pdCgxMDApIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wZWVyUHJlc3N1cmUoKS53aXRoXyhcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLnByb3BlcnR5TmFtZVwiLCBcImNsdXN0ZXJcIikud2l0aF8oXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlc1wiLCBfXy5vdXRFKFwia25vd3NcIikpLnBhZ2VSYW5rKDEuMCkud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnByb3BlcnR5TmFtZVwiLCBcInJhbmtcIikud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzXCIsIF9fLm91dEUoXCJrbm93c1wiKSkud2l0aF8oXCJ+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzXCIsIDEpLmdyb3VwKCkuYnkoXCJjbHVzdGVyXCIpLmJ5KF9fLnZhbHVlcyhcInJhbmtcIikuc3VtKCkpLmxpbWl0KDEwMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucGVlcl9wcmVzc3VyZSgpLndpdGhfKCd+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWUnLCAnY2x1c3RlcicpLndpdGhfKCd+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlcycsIF9fLm91dF9lKCdrbm93cycpKS5wYWdlX3JhbmsoMS4wKS53aXRoXygnfnRpbmtlcnBvcC5wYWdlUmFuay5wcm9wZXJ0eU5hbWUnLCAncmFuaycpLndpdGhfKCd+dGlua2VycG9wLnBhZ2VSYW5rLmVkZ2VzJywgX18ub3V0X2UoJ2tub3dzJykpLndpdGhfKCd+dGlua2VycG9wLnBhZ2VSYW5rLnRpbWVzJywgMSkuZ3JvdXAoKS5ieSgnY2x1c3RlcicpLmJ5KF9fLnZhbHVlcygncmFuaycpLnN1bV8oKSkubGltaXQoMTAwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX3JpcHBsZVhfaW5YY3JlYXRlZFhfcGVlclByZXNzdXJlX3dpdGhYZWRnZXNfb3V0RVhfd2l0aHlYcHJvcGVydHlOYW1lX2NsdXN0ZXJYX3JlcGVhdFh1bmlvblhpZGVudGl0eV9fYm90aFhfdGltZXNYMlhfZGVkdXBfdmFsdWVNYXBYbmFtZV9jbHVzdGVyWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLmluKFwiY3JlYXRlZFwiKS5wZWVyUHJlc3N1cmUoKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXNcIixfXy5vdXRFKCkpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnJlcGVhdChfXy51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5ib3RoKCkpKS50aW1lcygyKS5kZWR1cCgpLnZhbHVlTWFwKFwibmFtZVwiLCBcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLmluKFwiY3JlYXRlZFwiKS5wZWVyUHJlc3N1cmUoKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXNcIiwgX18ub3V0RSgpKS53aXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS5yZXBlYXQoX18udW5pb24oX18uaWRlbnRpdHkoKSwgX18uYm90aCgpKSkudGltZXMoMikuZGVkdXAoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJjbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuaW4oXCJjcmVhdGVkXCIpLnBlZXJQcmVzc3VyZSgpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlc1wiLCBfXy5vdXRFKCkpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnJlcGVhdChfXy51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5ib3RoKCkpKS50aW1lcygyKS5kZWR1cCgpLnZhbHVlTWFwKFwibmFtZVwiLCBcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5pbihzdHJpbmcyKS5wZWVyUHJlc3N1cmUoKS53aXRoKHN0cmluZzMsIF9fLm91dEUoKSkud2l0aChzdHJpbmc0LCBzdHJpbmc1KS5yZXBlYXQoX18udW5pb24oX18uaWRlbnRpdHkoKSwgX18uYm90aCgpKSkudGltZXMobnVtYmVyMCkuZGVkdXAoKS52YWx1ZU1hcChzdHJpbmcwLCBzdHJpbmc1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwicmlwcGxlXCIpLkluKFwiY3JlYXRlZFwiKS5QZWVyUHJlc3N1cmUoKS5XaXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXNcIiwgX18uT3V0RSgpKS5XaXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS5SZXBlYXQoX18uVW5pb248b2JqZWN0PihfXy5JZGVudGl0eSgpLCBfXy5Cb3RoKCkpKS5UaW1lcygyKS5EZWR1cCgpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcIm5hbWVcIiwgXCJjbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcInJpcHBsZVwiKS5JbihcImNyZWF0ZWRcIikuUGVlclByZXNzdXJlKCkuV2l0aChcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLmVkZ2VzXCIsIGdyZW1saW5nby5UX18uT3V0RSgpKS5XaXRoKFwifnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lXCIsIFwiY2x1c3RlclwiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5VbmlvbihncmVtbGluZ28uVF9fLklkZW50aXR5KCksIGdyZW1saW5nby5UX18uQm90aCgpKSkuVGltZXMoMikuRGVkdXAoKS5WYWx1ZU1hcChcIm5hbWVcIiwgXCJjbHVzdGVyXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuaW4oXCJjcmVhdGVkXCIpLnBlZXJQcmVzc3VyZSgpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlc1wiLCBfXy5vdXRFKCkpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnJlcGVhdChfXy51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5ib3RoKCkpKS50aW1lcygyKS5kZWR1cCgpLnZhbHVlTWFwKFwibmFtZVwiLCBcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuaW4oXCJjcmVhdGVkXCIpLnBlZXJQcmVzc3VyZSgpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5lZGdlc1wiLCBfXy5vdXRFKCkpLndpdGgoXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnJlcGVhdChfXy51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5ib3RoKCkpKS50aW1lcygyKS5kZWR1cCgpLnZhbHVlTWFwKFwibmFtZVwiLCBcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJyaXBwbGVcIikuaW5fKFwiY3JlYXRlZFwiKS5wZWVyUHJlc3N1cmUoKS53aXRoXyhcIn50aW5rZXJwb3AucGVlclByZXNzdXJlLmVkZ2VzXCIsIF9fLm91dEUoKSkud2l0aF8oXCJ+dGlua2VycG9wLnBlZXJQcmVzc3VyZS5wcm9wZXJ0eU5hbWVcIiwgXCJjbHVzdGVyXCIpLnJlcGVhdChfXy51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5ib3RoKCkpKS50aW1lcygyKS5kZWR1cCgpLnZhbHVlTWFwKFwibmFtZVwiLCBcImNsdXN0ZXJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ3JpcHBsZScpLmluXygnY3JlYXRlZCcpLnBlZXJfcHJlc3N1cmUoKS53aXRoXygnfnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUuZWRnZXMnLCBfXy5vdXRfZSgpKS53aXRoXygnfnRpbmtlcnBvcC5wZWVyUHJlc3N1cmUucHJvcGVydHlOYW1lJywgJ2NsdXN0ZXInKS5yZXBlYXQoX18udW5pb24oX18uaWRlbnRpdHkoKSwgX18uYm90aCgpKSkudGltZXMoMikuZGVkdXAoKS52YWx1ZV9tYXAoJ25hbWUnLCAnY2x1c3RlcicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsWF9wcm9kdWN0WGluamVjdFgxWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkucHJvZHVjdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkucHJvZHVjdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLnByb2R1Y3QoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkucHJvZHVjdChfXy5pbmplY3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuUHJvZHVjdChfXy5JbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5Qcm9kdWN0KGdyZW1saW5nby5UX18uSW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5wcm9kdWN0KF9fLmluamVjdCgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLnByb2R1Y3QoX18uaW5qZWN0KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkucHJvZHVjdChfXy5pbmplY3QoMSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLnByb2R1Y3QoX18uaW5qZWN0KDEpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9wcm9kdWN0WFZfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5wcm9kdWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5wcm9kdWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikucHJvZHVjdChfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnByb2R1Y3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlByb2R1Y3QoX18uVigpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLlByb2R1Y3QoZ3JlbWxpbmdvLlRfXy5WKCkuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnByb2R1Y3QoX18uVigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikucHJvZHVjdChfXy5WKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5wcm9kdWN0KF9fLlYoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLnByb2R1Y3QoX18uVigpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkX3Byb2R1Y3RYY29uc3RhbnRYbnVsbFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLmNvbnN0YW50KG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuUHJvZHVjdChfXy5Db25zdGFudDxvYmplY3Q+KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZvbGQoKS5Qcm9kdWN0KGdyZW1saW5nby5UX18uQ29uc3RhbnQobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZm9sZCgpLnByb2R1Y3QoX18uY29uc3RhbnQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLmNvbnN0YW50KG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudChOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb2xkX3Byb2R1Y3RYVlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZm9sZCgpLnByb2R1Y3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZm9sZCgpLnByb2R1Y3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZm9sZCgpLnByb2R1Y3QoX18uVigpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Gb2xkKCkuUHJvZHVjdChfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRm9sZCgpLlByb2R1Y3QoZ3JlbWxpbmdvLlRfXy5WKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZm9sZCgpLnByb2R1Y3QoX18uVigpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdCgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLnByb2R1Y3QoMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdCgyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5wcm9kdWN0KG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuUHJvZHVjdCgyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLlByb2R1Y3QoMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdCgyKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdCgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdCgyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkucHJvZHVjdCgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLnByb2R1Y3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5wcm9kdWN0KG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuUHJvZHVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLlByb2R1Y3QobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5wcm9kdWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5wcm9kdWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5wcm9kdWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmZvbGQoKS5wcm9kdWN0KE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5vbmV4aXN0YW50WF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYbmFtZVhfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5vbmV4aXN0YW50XCIpLkZvbGQoKS5Qcm9kdWN0KF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLkZvbGQoKS5Qcm9kdWN0KGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbm9uZXhpc3RhbnQnKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYbm9uZXhpc3RhbnRYX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoXCJub25leGlzdGFudFwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKHN0cmluZzEpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKS5Qcm9kdWN0KF9fLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5vbmV4aXN0YW50XCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5Qcm9kdWN0KGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcIm5vbmV4aXN0YW50XCIpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibm9uZXhpc3RhbnRcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKCdub25leGlzdGFudCcpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhkZXNjWF9saW1pdFgzWF9mb2xkX3Byb2R1Y3RYVl92YWx1ZXNYYWdlWF9vcmRlcl9ieVhhc2NYX2xpbWl0WDJYX2ZvbGRYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShkZXNjKS5saW1pdCgzKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoYXNjKS5saW1pdCgyKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykubGltaXQoMykuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykubGltaXQoMikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikub3JkZXIoKS5ieShPcmRlci5kZXNjKS5saW1pdCgzKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5saW1pdCgyKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5saW1pdChudW1iZXIwKS5mb2xkKCkucHJvZHVjdChfXy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5saW1pdChudW1iZXIxKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYykuTGltaXQ8b2JqZWN0PigzKS5Gb2xkKCkuUHJvZHVjdChfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuT3JkZXIoKS5CeShPcmRlci5Bc2MpLkxpbWl0PG9iamVjdD4oMikuRm9sZCgpKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLkxpbWl0KDMpLkZvbGQoKS5Qcm9kdWN0KGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcImFnZVwiKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5Bc2MpLkxpbWl0KDIpLkZvbGQoKSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykubGltaXQoMykuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykubGltaXQoMikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykubGltaXQoMykuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykubGltaXQoMikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykubGltaXQoMykuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykubGltaXQoMikuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykubGltaXQoMykuZm9sZCgpLnByb2R1Y3QoX18uVigpLnZhbHVlcygnYWdlJykub3JkZXIoKS5ieShPcmRlci5hc2MpLmxpbWl0KDIpLmZvbGQoKSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfcGF0aF9ieVh2YWx1ZXNYbmFtZVhfdG9VcHBlclhfcHJvZHVjdFhNQVJLT1hfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieSh2YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkucHJvZHVjdChbXCJNQVJLT1wiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLnByb2R1Y3QoW1wiTUFSS09cIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkucHJvZHVjdChbXCJNQVJLT1wiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoc3RyaW5nMCkudG9VcHBlcigpKS5wcm9kdWN0KGxpc3QwKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5QYXRoKCkuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlRvVXBwZXIoKSkuUHJvZHVjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJNQVJLT1wiIH0pLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5QYXRoKCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLlRvVXBwZXIoKSkuUHJvZHVjdChbXWludGVyZmFjZXt9e1wiTUFSS09cIn0pLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkucHJvZHVjdChbXCJNQVJLT1wiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSkucHJvZHVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJNQVJLT1wiKTsgfX0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkpLnByb2R1Y3QoW1wiTUFSS09cIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShfXy52YWx1ZXMoJ25hbWUnKS50b191cHBlcigpKS5wcm9kdWN0KFsnTUFSS08nXSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG1hcmtvWF9wcm9kdWN0WFZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJtYXJrb1wiXSkucHJvZHVjdChfXy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkucHJvZHVjdChfXy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcIm1hcmtvXCIgfSkuUHJvZHVjdChfXy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcIm1hcmtvXCJ9KS5Qcm9kdWN0KGdyZW1saW5nby5UX18uVigpLlZhbHVlcyhcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcIm1hcmtvXCJdKS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwibWFya29cIik7IH19KS5wcm9kdWN0KF9fLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wibWFya29cIl0pLnByb2R1Y3QoX18uVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnbWFya28nXSkucHJvZHVjdChfXy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS5mb2xkKCkpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBYbG9jYXRpb25YX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9wcm9kdWN0WGR1bGxlc19zZWF0dGxlX3ZhbmNvdXZlclhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KHZhbHVlcykudW5mb2xkKCkucHJvZHVjdChbXCJkdWxsZXNcIixcInNlYXR0bGVcIixcInZhbmNvdXZlclwiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5wcm9kdWN0KFtcImR1bGxlc1wiLCBcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibG9jYXRpb25cIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnByb2R1Y3QoW1wiZHVsbGVzXCIsIFwic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKHN0cmluZzApLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5wcm9kdWN0KGxpc3QwKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oXCJsb2NhdGlvblwiKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLlByb2R1Y3QobmV3IExpc3Q8b2JqZWN0PiB7IFwiZHVsbGVzXCIsIFwic2VhdHRsZVwiLCBcInZhbmNvdXZlclwiIH0pLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcImxvY2F0aW9uXCIpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuUHJvZHVjdChbXWludGVyZmFjZXt9e1wiZHVsbGVzXCIsIFwic2VhdHRsZVwiLCBcInZhbmNvdXZlclwifSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkucHJvZHVjdChbXCJkdWxsZXNcIiwgXCJzZWF0dGxlXCIsIFwidmFuY291dmVyXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJsb2NhdGlvblwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkucHJvZHVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJkdWxsZXNcIik7IGFkZChcInNlYXR0bGVcIik7IGFkZChcInZhbmNvdXZlclwiKTsgfX0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcImxvY2F0aW9uXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5wcm9kdWN0KFtcImR1bGxlc1wiLCBcInNlYXR0bGVcIiwgXCJ2YW5jb3V2ZXJcIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgnbG9jYXRpb24nKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkucHJvZHVjdChbJ2R1bGxlcycsICdzZWF0dGxlJywgJ3ZhbmNvdXZlciddKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX29yZGVyX2J5WGFzY1hfZm9sZF9wcm9kdWN0WGNvbnN0YW50WDI3WF9mb2xkWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoYXNjKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudCgyNykuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpLnByb2R1Y3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudCgyNykuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5mb2xkKCkucHJvZHVjdChfXy5jb25zdGFudChudW1iZXIwKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLk9yZGVyKCkuQnkoT3JkZXIuQXNjKS5Gb2xkKCkuUHJvZHVjdChfXy5Db25zdGFudDxvYmplY3Q+KDI3KS5Gb2xkKCkpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuQXNjKS5Gb2xkKCkuUHJvZHVjdChncmVtbGluZ28uVF9fLkNvbnN0YW50KDI3KS5Gb2xkKCkpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpLnByb2R1Y3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpLnByb2R1Y3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpLnByb2R1Y3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuZm9sZCgpLnByb2R1Y3QoX18uY29uc3RhbnQoMjcpLmZvbGQoKSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3BhdGhfYnlYbmFtZVhfcHJvZHVjdFhkYXZlX2tlbHZpblhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucHJvZHVjdChbXCJkYXZlXCIsXCJrZWx2aW5cIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5wcm9kdWN0KFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucHJvZHVjdChbXCJkYXZlXCIsIFwia2VsdmluXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KHN0cmluZzApLnByb2R1Y3QobGlzdDApLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuUHJvZHVjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJkYXZlXCIsIFwia2VsdmluXCIgfSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlBhdGgoKS5CeShcIm5hbWVcIikuUHJvZHVjdChbXWludGVyZmFjZXt9e1wiZGF2ZVwiLCBcImtlbHZpblwifSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5wcm9kdWN0KFtcImRhdmVcIiwgXCJrZWx2aW5cIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLnByb2R1Y3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiZGF2ZVwiKTsgYWRkKFwia2VsdmluXCIpOyB9fSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucHJvZHVjdChbXCJkYXZlXCIsIFwia2VsdmluXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoJ25hbWUnKS5wcm9kdWN0KFsnZGF2ZScsICdrZWx2aW4nXSkudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGFfbnVsbF9iWF9wcm9kdWN0WGFfY1hfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixudWxsLFwiYlwiXSkucHJvZHVjdChbXCJhXCIsXCJjXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5wcm9kdWN0KFtcImFcIiwgXCJjXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkucHJvZHVjdChbXCJhXCIsIFwiY1wiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5wcm9kdWN0KGxpc3QxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgbnVsbCwgXCJiXCIgfSkuUHJvZHVjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiY1wiIH0pLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiYVwiLCBuaWwsIFwiYlwifSkuUHJvZHVjdChbXWludGVyZmFjZXt9e1wiYVwiLCBcImNcIn0pLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5wcm9kdWN0KFtcImFcIiwgXCJjXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJiXCIpOyB9fSkucHJvZHVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJjXCIpOyB9fSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5wcm9kdWN0KFtcImFcIiwgXCJjXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5wcm9kdWN0KFsnYScsICdjJ10pLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhhX251bGxfYlhfcHJvZHVjdFhhX251bGxfY1hfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixudWxsLFwiYlwiXSkucHJvZHVjdChbXCJhXCIsbnVsbCxcImNcIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBudWxsLCBcImJcIl0pLnByb2R1Y3QoW1wiYVwiLCBudWxsLCBcImNcIl0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5wcm9kdWN0KFtcImFcIiwgbnVsbCwgXCJjXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnByb2R1Y3QobGlzdDEpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBudWxsLCBcImJcIiB9KS5Qcm9kdWN0KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgbnVsbCwgXCJjXCIgfSkuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJiXCJ9KS5Qcm9kdWN0KFtdaW50ZXJmYWNle317XCJhXCIsIG5pbCwgXCJjXCJ9KS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbXCJhXCIsIG51bGwsIFwiYlwiXSkucHJvZHVjdChbXCJhXCIsIG51bGwsIFwiY1wiXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChudWxsKTsgYWRkKFwiYlwiKTsgfX0pLnByb2R1Y3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKG51bGwpOyBhZGQoXCJjXCIpOyB9fSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgbnVsbCwgXCJiXCJdKS5wcm9kdWN0KFtcImFcIiwgbnVsbCwgXCJjXCJdKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCBOb25lLCAnYiddKS5wcm9kdWN0KFsnYScsIE5vbmUsICdjJ10pLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9wcm9kdWN0WGZpdmVfdGhyZWVfN1hfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFszaSxcInRocmVlXCJdKS5wcm9kdWN0KFtcImZpdmVcIixcInRocmVlXCIsN2ldKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFszaSwgXCJ0aHJlZVwiXSkucHJvZHVjdChbXCJmaXZlXCIsIFwidGhyZWVcIiwgN2ldKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbM2ksIFwidGhyZWVcIl0pLnByb2R1Y3QoW1wiZml2ZVwiLCBcInRocmVlXCIsIDdpXSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5wcm9kdWN0KGxpc3QxKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuUHJvZHVjdChuZXcgTGlzdDxvYmplY3Q+IHsgXCJmaXZlXCIsIFwidGhyZWVcIiwgNyB9KS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtpbnQzMigzKSwgXCJ0aHJlZVwifSkuUHJvZHVjdChbXWludGVyZmFjZXt9e1wiZml2ZVwiLCBcInRocmVlXCIsIGludDMyKDcpfSkuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzNpLCBcInRocmVlXCJdKS5wcm9kdWN0KFtcImZpdmVcIiwgXCJ0aHJlZVwiLCA3aV0pLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMyk7IGFkZChcInRocmVlXCIpOyB9fSkucHJvZHVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJmaXZlXCIpOyBhZGQoXCJ0aHJlZVwiKTsgYWRkKDcpOyB9fSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5wcm9kdWN0KFtcImZpdmVcIiwgXCJ0aHJlZVwiLCA3XSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzMsICd0aHJlZSddKS5wcm9kdWN0KFsnZml2ZScsICd0aHJlZScsIDddKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfcHJvamVjdFhhX2JYX2J5WG91dEVfY291bnRYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkucHJvamVjdChzdHJpbmcxLCBzdHJpbmcyKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuUHJvamVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikuQnkoX18uT3V0RSgpLkNvdW50KCkpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuUHJvamVjdChcImFcIiwgXCJiXCIpLkJ5KGdyZW1saW5nby5UX18uT3V0RSgpLkNvdW50KCkpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5wcm9qZWN0KCdhJywgJ2InKS5ieShfXy5vdXRfZSgpLmNvdW50KCkpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dFhjcmVhdGVkWF9wcm9qZWN0WGFfYlhfYnlYbmFtZVhfYnlYaW5YY3JlYXRlZFhfY291bnRYX29yZGVyX2J5WHNlbGVjdFhiWF9fZGVzY1hfc2VsZWN0WGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dChcImNyZWF0ZWRcIikucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5pbihcImNyZWF0ZWRcIikuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJiXCIpLCBPcmRlci5kZXNjKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcImJcIiksIE9yZGVyLmRlc2MpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS5jb3VudCgpKS5vcmRlcigpLmJ5KF9fLnNlbGVjdChcImJcIiksIE9yZGVyLmRlc2MpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5wcm9qZWN0KHN0cmluZzEsIHN0cmluZzIpLmJ5KHN0cmluZzMpLmJ5KF9fLmluKHN0cmluZzApLmNvdW50KCkpLm9yZGVyKCkuYnkoX18uc2VsZWN0KHN0cmluZzIpLCBPcmRlci5kZXNjKS5zZWxlY3Qoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5Qcm9qZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikuQnkoX18uSW4oXCJjcmVhdGVkXCIpLkNvdW50KCkpLk9yZGVyKCkuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJiXCIpLCBPcmRlci5EZXNjKS5TZWxlY3Q8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLlByb2plY3QoXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5JbihcImNyZWF0ZWRcIikuQ291bnQoKSkuT3JkZXIoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcImJcIiksIGdyZW1saW5nby5PcmRlci5EZXNjKS5TZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dChcImNyZWF0ZWRcIikucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5pbihcImNyZWF0ZWRcIikuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJiXCIpLCBPcmRlci5kZXNjKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikuYnkoX18uaW4oXCJjcmVhdGVkXCIpLmNvdW50KCkpLm9yZGVyKCkuYnkoX18uc2VsZWN0KFwiYlwiKSwgT3JkZXIuZGVzYykuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmluXyhcImNyZWF0ZWRcIikuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoXCJiXCIpLCBPcmRlci5kZXNjKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgnY3JlYXRlZCcpLnByb2plY3QoJ2EnLCAnYicpLmJ5KCduYW1lJykuYnkoX18uaW5fKCdjcmVhdGVkJykuY291bnQoKSkub3JkZXIoKS5ieShfXy5zZWxlY3QoJ2InKSwgT3JkZXIuZGVzYykuc2VsZWN0KCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcF9wcm9qZWN0WHhYX2J5WHNlbGVjdFhuYW1lWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5wcm9qZWN0KFwieFwiKS5ieShfXy5zZWxlY3QoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKCkucHJvamVjdChcInhcIikuYnkoX18uc2VsZWN0KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5wcm9qZWN0KFwieFwiKS5ieShfXy5zZWxlY3QoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS5wcm9qZWN0KHN0cmluZzApLmJ5KF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuUHJvamVjdDxvYmplY3Q+KFwieFwiKS5CeShfXy5TZWxlY3Q8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5Qcm9qZWN0KFwieFwiKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkucHJvamVjdChcInhcIikuYnkoX18uc2VsZWN0KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkucHJvamVjdChcInhcIikuYnkoX18uc2VsZWN0KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkucHJvamVjdChcInhcIikuYnkoX18uc2VsZWN0KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkucHJvamVjdCgneCcpLmJ5KF9fLnNlbGVjdCgnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3Byb2plY3RYYV9iWF9ieVhpbkVfY291bnRYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShfXy5pbkUoKS5jb3VudCgpKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkucHJvamVjdChzdHJpbmcwLCBzdHJpbmcxKS5ieShfXy5pbkUoKS5jb3VudCgpKS5ieShzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Qcm9qZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShfXy5JbkUoKS5Db3VudCgpKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb2plY3QoXCJhXCIsIFwiYlwiKS5CeShncmVtbGluZ28uVF9fLkluRSgpLkNvdW50KCkpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieShfXy5pbkUoKS5jb3VudCgpKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucHJvamVjdCgnYScsICdiJykuYnkoX18uaW5fZSgpLmNvdW50KCkpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9wcm9qZWN0WGFfYlhfYnlYaW5FX2NvdW50WF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5wcm9qZWN0KHN0cmluZzAsIHN0cmluZzEpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5Qcm9qZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShfXy5JbkUoKS5Db3VudCgpKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5Qcm9qZWN0KFwiYVwiLCBcImJcIikuQnkoZ3JlbWxpbmdvLlRfXy5JbkUoKS5Db3VudCgpKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KF9fLmluRSgpLmNvdW50KCkpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoX18uaW5FKCkuY291bnQoKSkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLnByb2plY3QoJ2EnLCAnYicpLmJ5KF9fLmluX2UoKS5jb3VudCgpKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKS5wcm9wZXJ0aWVzKHN0cmluZzEpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwiYWdlXCIpLlByb3BlcnRpZXM8b2JqZWN0PihcIm5hbWVcIikuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwiYWdlXCIpLlByb3BlcnRpZXMoXCJuYW1lXCIpLlZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcIm5hbWVcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2FnZScpLnByb3BlcnRpZXMoJ25hbWUnKS52YWx1ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZVhfcHJvcGVydGllc1huYW1lX2FnZVhfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIsIFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApLnByb3BlcnRpZXMoc3RyaW5nMSwgc3RyaW5nMCkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIikuUHJvcGVydGllczxvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIikuUHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJuYW1lXCIsIFwiYWdlXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiKS5wcm9wZXJ0aWVzKFwibmFtZVwiLCBcImFnZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJykucHJvcGVydGllcygnbmFtZScsICdhZ2UnKS52YWx1ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZVhfcHJvcGVydGllc1hhZ2VfbmFtZVhfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIiwgXCJuYW1lXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcImFnZVwiLCBcIm5hbWVcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcImFnZVwiLCBcIm5hbWVcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApLnByb3BlcnRpZXMoc3RyaW5nMCwgc3RyaW5nMSkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIikuUHJvcGVydGllczxvYmplY3Q+KFwiYWdlXCIsIFwibmFtZVwiKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIikuUHJvcGVydGllcyhcImFnZVwiLCBcIm5hbWVcIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikucHJvcGVydGllcyhcImFnZVwiLCBcIm5hbWVcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLnByb3BlcnRpZXMoXCJhZ2VcIiwgXCJuYW1lXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiKS5wcm9wZXJ0aWVzKFwiYWdlXCIsIFwibmFtZVwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJykucHJvcGVydGllcygnYWdlJywgJ25hbWUnKS52YWx1ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc1huYW1lX2FnZV9udWxsWF92YWx1ZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUHJvcGVydGllczxvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiLCBudWxsKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKFwibmFtZVwiLCBcImFnZVwiLCBuaWwpLlZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcyhcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9wZXJ0aWVzKCduYW1lJywgJ2FnZScsIE5vbmUpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZV9hZ2VfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIiwgXCJhZ2VcIiwgbmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScsICdhZ2UnLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNYd2VpZ2h0WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PihcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkucHJvcGVydGllcyhcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5wcm9wZXJ0aWVzKCd3ZWlnaHQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXMiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwaSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwic2luY2VcIiwgMjAyMGkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwaSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc3LCBkb3VibGUwKS5wcm9wZXJ0eShzdHJpbmc4LCBpbnRlZ2VyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5Qcm9wZXJ0eShcInNpbmNlXCIsIDIwMjApIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLlByb3BlcnR5KFwic2luY2VcIiwgaW50MzIoMjAyMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwaSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5wcm9wZXJ0eShcInNpbmNlXCIsIDIwMjApIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnc2luY2UnLCAyMDIwKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLnByb3BlcnRpZXMoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNYc2luY2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIixcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwic2luY2VcIiwgMjAyMGkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5wcm9wZXJ0eShcInNpbmNlXCIsIDIwMjBpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwic2luY2VcIiwgMjAyMGkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikuYXMoc3RyaW5nMykuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5hcyhzdHJpbmc1KS5hZGRFKHN0cmluZzYpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nNywgZG91YmxlMCkucHJvcGVydHkoc3RyaW5nOCwgaW50ZWdlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuUHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuQXMoXCJiXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5Qcm9wZXJ0eShcInNpbmNlXCIsIGludDMyKDIwMjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwic2luY2VcIiwgMjAyMGkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwic2luY2VcIiwgMjAyMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdhbGljZScpLmFzXygnYScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdib2InKS5hc18oJ2InKS5hZGRfZSgna25vd3MnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkucHJvcGVydHkoJ3NpbmNlJywgMjAyMCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwic2luY2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwic2luY2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkucHJvcGVydGllcyhcInNpbmNlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PihcInNpbmNlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuUHJvcGVydGllcyhcInNpbmNlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoXCJzaW5jZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkucHJvcGVydGllcyhcInNpbmNlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKFwic2luY2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygnc2luY2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNfbXVsdGlfZWRnZXMiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwaSkuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcInRhZ1wiLCBcImZyaWVuZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwaSkuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcInRhZ1wiLCBcImZyaWVuZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLmFzKFwiYlwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwic2luY2VcIiwgMjAyMGkpLmFkZEUoXCJsaWtlc1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJ0YWdcIiwgXCJmcmllbmRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzQpLmFzKHN0cmluZzUpLmFkZEUoc3RyaW5nNikuZnJvbShzdHJpbmczKS50byhzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmc3LCBkb3VibGUwKS5wcm9wZXJ0eShzdHJpbmc4LCBpbnRlZ2VyMCkuYWRkRShzdHJpbmc5KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzcsIGRvdWJsZTEpLnByb3BlcnR5KHN0cmluZzEwLCBzdHJpbmcxMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5BcyhcImJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5Qcm9wZXJ0eShcInNpbmNlXCIsIDIwMjApLkFkZEUoKHN0cmluZykgXCJsaWtlc1wiKS5Gcm9tKFwiYVwiKS5UbyhcImJcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuUHJvcGVydHkoXCJ0YWdcIiwgXCJmcmllbmRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYm9iXCIpLkFzKFwiYlwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcImFcIikuVG8oXCJiXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuUHJvcGVydHkoXCJzaW5jZVwiLCBpbnQzMigyMDIwKSkuQWRkRShcImxpa2VzXCIpLkZyb20oXCJhXCIpLlRvKFwiYlwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwidGFnXCIsIFwiZnJpZW5kXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwaSkuYWRkRShcImxpa2VzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcInRhZ1wiLCBcImZyaWVuZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImJvYlwiKS5hcyhcImJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5wcm9wZXJ0eShcInNpbmNlXCIsIDIwMjApLmFkZEUoXCJsaWtlc1wiKS5mcm9tKFwiYVwiKS50byhcImJcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJ0YWdcIiwgXCJmcmllbmRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJib2JcIikuYXMoXCJiXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcImFcIikudG8oXCJiXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkucHJvcGVydHkoXCJzaW5jZVwiLCAyMDIwKS5hZGRFKFwibGlrZXNcIikuZnJvbV8oXCJhXCIpLnRvKFwiYlwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwidGFnXCIsIFwiZnJpZW5kXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2JvYicpLmFzXygnYicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdhJykudG8oJ2InKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnc2luY2UnLCAyMDIwKS5hZGRfZSgnbGlrZXMnKS5mcm9tXygnYScpLnRvKCdiJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkucHJvcGVydHkoJ3RhZycsICdmcmllbmQnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLlByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnByb3BlcnRpZXMoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkucHJvcGVydGllcygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLnByb3BlcnRpZXMoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfclRyaW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJmZWF0dXJlICBcIiwgXCJvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImZlYXR1cmUgIFwiLCBcIm9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImZlYXR1cmUgIFwiLCBcIm9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCwgc3RyaW5nMSwgb2JqZWN0MCwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNykuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZmVhdHVyZSAgXCIsIFwib25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS5SVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJmZWF0dXJlICBcIiwgXCJvbmUgdGVzdCBcIiwgbmlsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikuUlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZlYXR1cmUgIFwiLCBcIm9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmZWF0dXJlICBcIiwgXCJvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiZmVhdHVyZSAgXCIsIFwib25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdmZWF0dXJlICAnLCAnb25lIHRlc3QgJywgTm9uZSwgJycsICcgJywgJ1x1MzAwMGFiYycsICdhYmNcdTMwMDAnLCAnXHUzMDAwYWJjXHUzMDAwJywgJ1x1MzAwMFx1MzAwMCcpLnJfdHJpbSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhfX2ZlYXR1cmVfX190ZXN0X19udWxsWF9yVHJpbVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIl0pLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIiB9KS5SVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbmlsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIn0pLlJUcmltKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCIgIGZlYXR1cmUgIFwiKTsgYWRkKFwiIG9uZSB0ZXN0IFwiKTsgYWRkKG51bGwpOyBhZGQoXCJcIik7IGFkZChcIiBcIik7IGFkZChcIlx1MzAwMGFiY1wiKTsgYWRkKFwiYWJjXHUzMDAwXCIpOyBhZGQoXCJcdTMwMDBhYmNcdTMwMDBcIik7IGFkZChcIlx1MzAwMFx1MzAwMFwiKTsgfX0pLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnICBmZWF0dXJlICAnLCAnIG9uZSB0ZXN0ICcsIE5vbmUsICcnLCAnICcsICdcdTMwMDBhYmMnLCAnYWJjXHUzMDAwJywgJ1x1MzAwMGFiY1x1MzAwMCcsICdcdTMwMDBcdTMwMDAnXSkucl90cmltKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYX19mZWF0dXJlX19YX3JUcmltIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiICBmZWF0dXJlICBcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiICBmZWF0dXJlICBcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcIiAgZmVhdHVyZSAgXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcIiAgZmVhdHVyZSAgXCIpLlJUcmltKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcIiAgZmVhdHVyZSAgXCIpLlJUcmltKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmUgIFwiKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcIiAgZmVhdHVyZSAgXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiICBmZWF0dXJlICBcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnICBmZWF0dXJlICAnKS5yX3RyaW0oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYTGlzdFhhX2JYWF9yVHJpbSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJhXCIsXCJiXCJdKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBcImJcIiB9KS5SVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgXCJiXCJ9KS5SVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJiXCIpOyB9fSkuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhJywgJ2InXSkucl90cmltKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WExpc3RYMV8yWFhfclRyaW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFsxLDJdKS5yVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMl0pLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMl0pLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAxLCAyIH0pLlJUcmltPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAyfSkuUlRyaW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMl0pLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDEpOyBhZGQoMik7IH19KS5yVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAyXSkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAyXSkucl90cmltKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9yVHJpbSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nNykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOCkucHJvcGVydHkoc3RyaW5nOSwgc3RyaW5nMTApLmFzKHN0cmluZzExKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmcxMykuYWRkVihzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxNCkucHJvcGVydHkoc3RyaW5nOSwgc3RyaW5nMTApLmFzKHN0cmluZzE1KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzE2KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxNykuYWRkRShzdHJpbmcxOCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMCkuYWRkRShzdHJpbmcxOCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmcxMykucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTEpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUyKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzEzKS50byhzdHJpbmcxNSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTEpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTMpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMikuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxNikudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICcgbWFya28gJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJyAgdmFkYXMgICcpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJyAgbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2ggICcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnICAgcmlwcGxlICAgJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuUlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuUlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnJUcmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuclRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5yVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLnJfdHJpbSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfclRyaW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc4KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzEzKS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzE0KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTUpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTYpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzE3KS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUwKS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzEzKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTMpLnRvKHN0cmluZzE1KS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUyKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzE2KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJyBtYXJrbyAnKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnICB2YWRhcyAgJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnICBsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCAgJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICcgICByaXBwbGUgICAnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5yVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5yVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLmZvbGQoKS5yVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLlJUcmltPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5SVHJpbShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuclRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnJUcmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5yVHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS5mb2xkKCkucl90cmltKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYdGhhdF90aGlzX3Rlc3RfbnVsbFhfcmVwbGFjZVhoX2pYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLnJlcGxhY2UoXCJoXCIsIFwialwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLnJlcGxhY2UoXCJoXCIsIFwialwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5yZXBsYWNlKFwiaFwiLCBcImpcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIsIG9iamVjdDApLnJlcGxhY2Uoc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5SZXBsYWNlKFwiaFwiLCBcImpcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBuaWwpLlJlcGxhY2UoXCJoXCIsIFwialwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5yZXBsYWNlKFwiaFwiLCBcImpcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLnJlcGxhY2UoXCJoXCIsIFwialwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbnVsbCkucmVwbGFjZShcImhcIiwgXCJqXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCd0aGF0JywgJ3RoaXMnLCAndGVzdCcsIE5vbmUpLnJlcGxhY2UoJ2gnLCAnaicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFh0aGF0X3RoaXNfdGVzdF9udWxsWF9mb2xkX3JlcGxhY2VYbG9jYWxfaF9qWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgXCJoXCIsIFwialwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCBcImhcIiwgXCJqXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCBcImhcIiwgXCJqXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyLCBvYmplY3QwKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgc3RyaW5nMywgc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5Gb2xkKCkuUmVwbGFjZTxvYmplY3Q+KFNjb3BlLkxvY2FsLCBcImhcIiwgXCJqXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbmlsKS5Gb2xkKCkuUmVwbGFjZShncmVtbGluZ28uU2NvcGUuTG9jYWwsIFwiaFwiLCBcImpcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbnVsbCkuZm9sZCgpLnJlcGxhY2UoU2NvcGUubG9jYWwsIFwiaFwiLCBcImpcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCBcImhcIiwgXCJqXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgXCJoXCIsIFwialwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgndGhhdCcsICd0aGlzJywgJ3Rlc3QnLCBOb25lKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgJ2gnLCAnaicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhMaXN0WGFfYlhjWF9yZXBsYWNlWGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLFwiYlwiXSkucmVwbGFjZShcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnJlcGxhY2UoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSkucmVwbGFjZShcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkucmVwbGFjZShzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgXCJiXCIgfSkuUmVwbGFjZShcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgXCJiXCJ9KS5SZXBsYWNlKFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnJlcGxhY2UoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgfX0pLnJlcGxhY2UoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnJlcGxhY2UoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCAnYiddKS5yZXBsYWNlKCdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9yZXBsYWNlWG51bGxfaVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnJlcGxhY2UobnVsbCwgXCJnXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnJlcGxhY2UobnVsbCwgXCJnXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5yZXBsYWNlKG51bGwsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLnJlcGxhY2Uoc3RyaW5nMiwgc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuUmVwbGFjZShudWxsLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlcyhcIm5hbWVcIikuUmVwbGFjZShuaWwsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikucmVwbGFjZShudWxsLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5yZXBsYWNlKG51bGwsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnJlcGxhY2UobnVsbCwgXCJnXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS52YWx1ZXMoJ25hbWUnKS5yZXBsYWNlKE5vbmUsICdnJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfcmVwbGFjZVhhX2lYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5yZXBsYWNlKFwicFwiLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikucmVwbGFjZShcInBcIiwgXCJnXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5yZXBsYWNlKFwicFwiLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5yZXBsYWNlKHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlJlcGxhY2UoXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzKFwibmFtZVwiKS5SZXBsYWNlKFwicFwiLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnJlcGxhY2UoXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnJlcGxhY2UoXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnJlcGxhY2UoXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykudmFsdWVzKCduYW1lJykucmVwbGFjZSgncCcsICdnJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9yZXBsYWNlWGxvYWNsX2FfaVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnJlcGxhY2UoU2NvcGUubG9jYWwsIFwicFwiLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLm9yZGVyKCkuZm9sZCgpLnJlcGxhY2UoU2NvcGUubG9jYWwsIHN0cmluZzIsIHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLlJlcGxhY2U8b2JqZWN0PihTY29wZS5Mb2NhbCwgXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5SZXBsYWNlKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkucmVwbGFjZShTY29wZS5sb2NhbCwgXCJwXCIsIFwiZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnJlcGxhY2UoU2NvcGUubG9jYWwsIFwicFwiLCBcImdcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCBcInBcIiwgXCJnXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS52YWx1ZXMoJ25hbWUnKS5vcmRlcigpLmZvbGQoKS5yZXBsYWNlKFNjb3BlLmxvY2FsLCAncCcsICdnJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF9yZXZlcnNlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3Qgb25lXCIsIG51bGwpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3Qgb25lXCIsIG51bGwpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0IG9uZVwiLCBudWxsKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEsIG9iamVjdDApLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZmVhdHVyZVwiLCBcInRlc3Qgb25lXCIsIG51bGwpLlJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3Qgb25lXCIsIG5pbCkuUmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRlc3Qgb25lXCIsIG51bGwpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidGVzdCBvbmVcIiwgbnVsbCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0ZXN0IG9uZVwiLCBudWxsKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZlYXR1cmUnLCAndGVzdCBvbmUnLCBOb25lKS5yZXZlcnNlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfcmV2ZXJzZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLlJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLnJldmVyc2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX3JldmVyc2UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuUmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5yZXZlcnNlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfcGF0aF9ieVhuYW1lWF9yZXZlcnNlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLnBhdGgoKS5ieShzdHJpbmcwKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLlJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLnBhdGgoKS5ieSgnbmFtZScpLnJldmVyc2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcGF0aF9ieVhuYW1lWF9yZXZlcnNlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShzdHJpbmcwKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuUGF0aCgpLkJ5KFwibmFtZVwiKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5QYXRoKCkuQnkoXCJuYW1lXCIpLlJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkuYnkoXCJuYW1lXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLmJ5KFwibmFtZVwiKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieShcIm5hbWVcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLnBhdGgoKS5ieSgnbmFtZScpLnJldmVyc2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1hhZ2VYX2ZvbGRfb3JkZXJYbG9jYWxYX2J5WGRlc2NYX3JldmVyc2UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5vcmRlcihsb2NhbCkuYnkoZGVzYykucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuZGVzYykucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KE9yZGVyLmRlc2MpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuZGVzYykucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoT3JkZXIuRGVzYykuUmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KGdyZW1saW5nby5PcmRlci5EZXNjKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuZGVzYykucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShPcmRlci5kZXNjKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KE9yZGVyLmRlc2MpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuZGVzYykucmV2ZXJzZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX2ZvbGRfb3JkZXJYbG9jYWxYX2J5X3JldmVyc2UiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIobG9jYWwpLmJ5KCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieSgpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkZvbGQoKS5PcmRlcihTY29wZS5Mb2NhbCkuQnkoKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KCkuUmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieSgpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpLmJ5KCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieSgpLnJldmVyc2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbFhfcmV2ZXJzZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLlJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLnJldmVyc2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYYlhfcmV2ZXJzZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcImJcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJiXCIpLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImJcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcImJcIikuUmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJiXCIpLlJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImJcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcImJcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcImJcIikucmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdiJykucmV2ZXJzZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgzX3RocmVlWF9yZXZlcnNlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFszLFwidGhyZWVcIl0pLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFszLCBcInRocmVlXCJdKS5yZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAzLCBcInRocmVlXCIgfSkuUmV2ZXJzZSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXszLCBcInRocmVlXCJ9KS5SZXZlcnNlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKDMpOyBhZGQoXCJ0aHJlZVwiKTsgfX0pLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzMsIFwidGhyZWVcIl0pLnJldmVyc2UoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMywgJ3RocmVlJ10pLnJldmVyc2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2FzWGFYX291dFhrbm93c1hfYXNYYlhfc2VsZWN0WGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmFzXygnYScpLm91dCgna25vd3MnKS5hc18oJ2InKS5zZWxlY3QoJ2EnLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcyKS5ieShzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJykuc2VsZWN0KCdhJywgJ2InKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfb3V0WGtub3dzWF9hc1hiWF9zZWxlY3RYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dChzdHJpbmcxKS5hcyhzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIikuU2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJykuc2VsZWN0KCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX3NlbGVjdFhhWF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkuYXMoc3RyaW5nMCkub3V0KHN0cmluZzEpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwKS5ieShzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImJcIikuU2VsZWN0KFwiYVwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkuYXNfKCdhJykub3V0KCdrbm93cycpLmFzXygnYicpLnNlbGVjdCgnYScpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYXMoc3RyaW5nMSkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpLmJ5KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYicpLnNlbGVjdCgnYScsICdiJykuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hZ2dyZWdhdGVYeFhfYXNYYlhfc2VsZWN0WGFfYlhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFnZ3JlZ2F0ZShcInhcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFnZ3JlZ2F0ZShcInhcIikuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkuYWdncmVnYXRlKHN0cmluZzEpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcyKS5ieShzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQWdncmVnYXRlKFwieFwiKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQWdncmVnYXRlKFwieFwiKS5BcyhcImJcIikuU2VsZWN0KFwiYVwiLCBcImJcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hZ2dyZWdhdGUoXCJ4XCIpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYWdncmVnYXRlKCd4JykuYXNfKCdiJykuc2VsZWN0KCdhJywgJ2InKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfbmFtZV9vcmRlcl9hc1hiWF9zZWxlY3RYYV9iWF9ieVhuYW1lWF9ieV9YaXRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5vcmRlcigpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcyKS5ieShzdHJpbmcxKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5BcyhcImJcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikuQnkoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuQXMoXCJiXCIpLlNlbGVjdChcImFcIiwgXCJiXCIpLkJ5KFwibmFtZVwiKS5CeSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikuYnkoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykudmFsdWVzKCduYW1lJykub3JkZXIoKS5hc18oJ2InKS5zZWxlY3QoJ2EnLCAnYicpLmJ5KCduYW1lJykuYnkoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX2dyZW1saW5YX2luRVh1c2VzWF9vcmRlcl9ieVhza2lsbF9hc2NYX2FzWGFYX291dFZfYXNYYlhfc2VsZWN0WGFfYlhfYnlYc2tpbGxYX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJncmVtbGluXCIpLmluRShcInVzZXNcIikub3JkZXIoKS5ieShcInNraWxsXCIsIE9yZGVyLmFzYykuYXMoXCJhXCIpLm91dFYoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJza2lsbFwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiZ3JlbWxpblwiKS5pbkUoXCJ1c2VzXCIpLm9yZGVyKCkuYnkoXCJza2lsbFwiLCBPcmRlci5hc2MpLmFzKFwiYVwiKS5vdXRWKCkuYXMoXCJiXCIpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwic2tpbGxcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJncmVtbGluXCIpLmluRShcInVzZXNcIikub3JkZXIoKS5ieShcInNraWxsXCIsIE9yZGVyLmFzYykuYXMoXCJhXCIpLm91dFYoKS5hcyhcImJcIikuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJza2lsbFwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5pbkUoc3RyaW5nMikub3JkZXIoKS5ieShzdHJpbmczLCBPcmRlci5hc2MpLmFzKHN0cmluZzQpLm91dFYoKS5hcyhzdHJpbmc1KS5zZWxlY3Qoc3RyaW5nNCwgc3RyaW5nNSkuYnkoc3RyaW5nMykuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImdyZW1saW5cIikuSW5FKFwidXNlc1wiKS5PcmRlcigpLkJ5KFwic2tpbGxcIiwgT3JkZXIuQXNjKS5BcyhcImFcIikuT3V0VigpLkFzKFwiYlwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIpLkJ5KFwic2tpbGxcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImdyZW1saW5cIikuSW5FKFwidXNlc1wiKS5PcmRlcigpLkJ5KFwic2tpbGxcIiwgZ3JlbWxpbmdvLk9yZGVyLkFzYykuQXMoXCJhXCIpLk91dFYoKS5BcyhcImJcIikuU2VsZWN0KFwiYVwiLCBcImJcIikuQnkoXCJza2lsbFwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImdyZW1saW5cIikuaW5FKFwidXNlc1wiKS5vcmRlcigpLmJ5KFwic2tpbGxcIiwgT3JkZXIuYXNjKS5hcyhcImFcIikub3V0VigpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcInNraWxsXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImdyZW1saW5cIikuaW5FKFwidXNlc1wiKS5vcmRlcigpLmJ5KFwic2tpbGxcIiwgT3JkZXIuYXNjKS5hcyhcImFcIikub3V0VigpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcInNraWxsXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImdyZW1saW5cIikuaW5FKFwidXNlc1wiKS5vcmRlcigpLmJ5KFwic2tpbGxcIiwgT3JkZXIuYXNjKS5hcyhcImFcIikub3V0VigpLmFzKFwiYlwiKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcInNraWxsXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnZ3JlbWxpbicpLmluX2UoJ3VzZXMnKS5vcmRlcigpLmJ5KCdza2lsbCcsIE9yZGVyLmFzYykuYXNfKCdhJykub3V0X3YoKS5hc18oJ2InKS5zZWxlY3QoJ2EnLCAnYicpLmJ5KCdza2lsbCcpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl93aGVyZVhfdmFsdWVYbmFtZVhfaXNYbWFya29YWF9hc1hhWF9zZWxlY3RYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkud2hlcmUodmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLndoZXJlKF9fLnZhbHVlcyhcIm5hbWVcIikuaXMoXCJtYXJrb1wiKSkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKHN0cmluZzApLmlzKHN0cmluZzEpKS5hcyhzdHJpbmcyKS5zZWxlY3Qoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuV2hlcmUoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLklzKFwibWFya29cIikpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5XaGVyZShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikuSXMoXCJtYXJrb1wiKSkuQXMoXCJhXCIpLlNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkud2hlcmUoX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS53aGVyZShfXy52YWx1ZXMoJ25hbWUnKS5pc18oJ21hcmtvJykpLmFzXygnYScpLnNlbGVjdCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbGFiZWxfZ3JvdXBDb3VudF9hc1h4WF9zZWxlY3RYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubGFiZWwoKS5ncm91cENvdW50KCkuYXMoXCJ4XCIpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sYWJlbCgpLmdyb3VwQ291bnQoKS5hcyhcInhcIikuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5sYWJlbCgpLmdyb3VwQ291bnQoKS5hcyhcInhcIikuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubGFiZWwoKS5ncm91cENvdW50KCkuYXMoc3RyaW5nMCkuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxhYmVsKCkuR3JvdXBDb3VudDxvYmplY3Q+KCkuQXMoXCJ4XCIpLlNlbGVjdDxvYmplY3Q+KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxhYmVsKCkuR3JvdXBDb3VudCgpLkFzKFwieFwiKS5TZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxhYmVsKCkuZ3JvdXBDb3VudCgpLmFzKFwieFwiKS5zZWxlY3QoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sYWJlbCgpLmdyb3VwQ291bnQoKS5hcyhcInhcIikuc2VsZWN0KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubGFiZWwoKS5ncm91cENvdW50KCkuYXMoXCJ4XCIpLnNlbGVjdChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubGFiZWwoKS5ncm91cF9jb3VudCgpLmFzXygneCcpLnNlbGVjdCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9hc1hwWF9tYXBYYm90aEVfbGFiZWxfZ3JvdXBDb3VudFhfYXNYclhfc2VsZWN0WHBfclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm1hcChfXy5ib3RoRSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpKS5hcyhcInJcIikuc2VsZWN0KFwicFwiLCBcInJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikubWFwKF9fLmJvdGhFKCkubGFiZWwoKS5ncm91cENvdW50KCkpLmFzKFwiclwiKS5zZWxlY3QoXCJwXCIsIFwiclwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikubWFwKF9fLmJvdGhFKCkubGFiZWwoKS5ncm91cENvdW50KCkpLmFzKFwiclwiKS5zZWxlY3QoXCJwXCIsIFwiclwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuYXMoc3RyaW5nMSkubWFwKF9fLmJvdGhFKCkubGFiZWwoKS5ncm91cENvdW50KCkpLmFzKHN0cmluZzIpLnNlbGVjdChzdHJpbmcxLCBzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcInBcIikuTWFwPG9iamVjdD4oX18uQm90aEUoKS5MYWJlbCgpLkdyb3VwQ291bnQ8b2JqZWN0PigpKS5BcyhcInJcIikuU2VsZWN0PG9iamVjdD4oXCJwXCIsIFwiclwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkFzKFwicFwiKS5NYXAoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkxhYmVsKCkuR3JvdXBDb3VudCgpKS5BcyhcInJcIikuU2VsZWN0KFwicFwiLCBcInJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm1hcChfXy5ib3RoRSgpLmxhYmVsKCkuZ3JvdXBDb3VudCgpKS5hcyhcInJcIikuc2VsZWN0KFwicFwiLCBcInJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicFwiKS5tYXAoX18uYm90aEUoKS5sYWJlbCgpLmdyb3VwQ291bnQoKSkuYXMoXCJyXCIpLnNlbGVjdChcInBcIiwgXCJyXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikubWFwKF9fLmJvdGhFKCkubGFiZWwoKS5ncm91cENvdW50KCkpLmFzKFwiclwiKS5zZWxlY3QoXCJwXCIsIFwiclwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmFzXygncCcpLm1hcChfXy5ib3RoX2UoKS5sYWJlbCgpLmdyb3VwX2NvdW50KCkpLmFzXygncicpLnNlbGVjdCgncCcsICdyJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9jaG9vc2VYb3V0RV9jb3VudF9pc1gwWF9fYXNYYVhfX2FzWGJYWF9jaG9vc2VYc2VsZWN0WGFYX19zZWxlY3RYYVhfX3NlbGVjdFhiWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpLmlzKHh4MSksX18uYXMoXCJhXCIpLF9fLmFzKFwiYlwiKSkuY2hvb3NlKF9fLnNlbGVjdChcImFcIiksX18uc2VsZWN0KFwiYVwiKSxfXy5zZWxlY3QoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmNob29zZShfXy5vdXRFKCkuY291bnQoKS5pcyh4eDEpLCBfXy5hcyhcImFcIiksIF9fLmFzKFwiYlwiKSkuY2hvb3NlKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5vdXRFKCkuY291bnQoKS5pcyh4eDEpLCBfXy5hcyhcImFcIiksIF9fLmFzKFwiYlwiKSkuY2hvb3NlKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkuaXMoeHgxKSwgX18uYXMoc3RyaW5nMCksIF9fLmFzKHN0cmluZzEpKS5jaG9vc2UoX18uc2VsZWN0KHN0cmluZzApLCBfXy5zZWxlY3Qoc3RyaW5nMCksIF9fLnNlbGVjdChzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQ2hvb3NlPG9iamVjdD4oX18uT3V0RSgpLkNvdW50KCkuSXMoeHgxKSwgX18uQXMoXCJhXCIpLCBfXy5BcyhcImJcIikpLkNob29zZTxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSwgX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLCBfXy5TZWxlY3Q8b2JqZWN0PihcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uT3V0RSgpLkNvdW50KCkuSXMoeHgxKSwgZ3JlbWxpbmdvLlRfXy5BcyhcImFcIiksIGdyZW1saW5nby5UX18uQXMoXCJiXCIpKS5DaG9vc2UoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJhXCIpLCBncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIiksIGdyZW1saW5nby5UX18uU2VsZWN0KFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLm91dEUoKS5jb3VudCgpLmlzKHh4MSksIF9fLmFzKFwiYVwiKSwgX18uYXMoXCJiXCIpKS5jaG9vc2UoX18uc2VsZWN0KFwiYVwiKSwgX18uc2VsZWN0KFwiYVwiKSwgX18uc2VsZWN0KFwiYlwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmNob29zZShfXy5vdXRFKCkuY291bnQoKS5pcyh4eDEpLCBfXy5hcyhcImFcIiksIF9fLmFzKFwiYlwiKSkuY2hvb3NlKF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImFcIiksIF9fLnNlbGVjdChcImJcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5jaG9vc2UoX18ub3V0RSgpLmNvdW50KCkuaXMoeHgxKSwgX18uYXMoXCJhXCIpLCBfXy5hcyhcImJcIikpLmNob29zZShfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJhXCIpLCBfXy5zZWxlY3QoXCJiXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoX18ub3V0X2UoKS5jb3VudCgpLmlzXyh4eDEpLCBfXy5hc18oJ2EnKSwgX18uYXNfKCdiJykpLmNob29zZShfXy5zZWxlY3QoJ2EnKSwgX18uc2VsZWN0KCdhJyksIF9fLnNlbGVjdCgnYicpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2dyb3VwWGFYX2J5WGNvbnN0YW50WGFYWF9ieVhuYW1lWF9zZWxlY3RYYVhfc2VsZWN0WGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5ncm91cChcImFcIikuYnkoX18uY29uc3RhbnQoXCJhXCIpKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5iYXJyaWVyKCkuc2VsZWN0KFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmdyb3VwKFwiYVwiKS5ieShfXy5jb25zdGFudChcImFcIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJhcnJpZXIoKS5zZWxlY3QoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmdyb3VwKFwiYVwiKS5ieShfXy5jb25zdGFudChcImFcIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJhcnJpZXIoKS5zZWxlY3QoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5ncm91cChzdHJpbmcwKS5ieShfXy5jb25zdGFudChzdHJpbmcwKSkuYnkoX18udmFsdWVzKHN0cmluZzEpKS5iYXJyaWVyKCkuc2VsZWN0KHN0cmluZzApLnNlbGVjdChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuR3JvdXAoXCJhXCIpLkJ5KF9fLkNvbnN0YW50PG9iamVjdD4oXCJhXCIpKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLkJhcnJpZXIoKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkdyb3VwKFwiYVwiKS5CeShncmVtbGluZ28uVF9fLkNvbnN0YW50KFwiYVwiKSkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpKS5CYXJyaWVyKCkuU2VsZWN0KFwiYVwiKS5TZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5ncm91cChcImFcIikuYnkoX18uY29uc3RhbnQoXCJhXCIpKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5iYXJyaWVyKCkuc2VsZWN0KFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuZ3JvdXAoXCJhXCIpLmJ5KF9fLmNvbnN0YW50KFwiYVwiKSkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkuYmFycmllcigpLnNlbGVjdChcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmdyb3VwKFwiYVwiKS5ieShfXy5jb25zdGFudChcImFcIikpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikpLmJhcnJpZXIoKS5zZWxlY3QoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLmdyb3VwKCdhJykuYnkoX18uY29uc3RhbnQoJ2EnKSkuYnkoX18udmFsdWVzKCduYW1lJykpLmJhcnJpZXIoKS5zZWxlY3QoJ2EnKS5zZWxlY3QoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2FzWGhlcmVYX291dF9zZWxlY3RYaGVyZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmFzKFwiaGVyZVwiKS5vdXQoKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFzKFwiaGVyZVwiKS5vdXQoKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImhlcmVcIikub3V0KCkuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmFzKHN0cmluZzApLm91dCgpLnNlbGVjdChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuQXMoXCJoZXJlXCIpLk91dCgpLlNlbGVjdDxvYmplY3Q+KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5BcyhcImhlcmVcIikuT3V0KCkuU2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJoZXJlXCIpLm91dCgpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5hcyhcImhlcmVcIikub3V0KCkuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmFzKFwiaGVyZVwiKS5vdXQoKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2hlcmUnKS5vdXQoKS5zZWxlY3QoJ2hlcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDQpLmFzKFwiaGVyZVwiKS5vdXQoKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmFzKFwiaGVyZVwiKS5vdXQoKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5hcyhcImhlcmVcIikub3V0KCkuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDQpLmFzKHN0cmluZzApLm91dCgpLnNlbGVjdChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuQXMoXCJoZXJlXCIpLk91dCgpLlNlbGVjdDxvYmplY3Q+KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ0KS5BcyhcImhlcmVcIikuT3V0KCkuU2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNCkuYXMoXCJoZXJlXCIpLm91dCgpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5hcyhcImhlcmVcIikub3V0KCkuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmFzKFwiaGVyZVwiKS5vdXQoKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ0KS5hc18oJ2hlcmUnKS5vdXQoKS5zZWxlY3QoJ2hlcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDRYX291dF9hc1hoZXJlWF9oYXNYbGFuZ19qYXZhWF9zZWxlY3RYaGVyZVhfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkub3V0KCkuYXMoXCJoZXJlXCIpLmhhcyhcImxhbmdcIiwgXCJqYXZhXCIpLnNlbGVjdChcImhlcmVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5vdXQoKS5hcyhcImhlcmVcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikuc2VsZWN0KFwiaGVyZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5vdXQoKS5hcyhcImhlcmVcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikuc2VsZWN0KFwiaGVyZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkub3V0KCkuYXMoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLnNlbGVjdChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDQpLk91dCgpLkFzKFwiaGVyZVwiKS5IYXMoXCJsYW5nXCIsIFwiamF2YVwiKS5TZWxlY3Q8b2JqZWN0PihcImhlcmVcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLk91dCgpLkFzKFwiaGVyZVwiKS5IYXMoXCJsYW5nXCIsIFwiamF2YVwiKS5TZWxlY3QoXCJoZXJlXCIpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLm91dCgpLmFzKFwiaGVyZVwiKS5oYXMoXCJsYW5nXCIsIFwiamF2YVwiKS5zZWxlY3QoXCJoZXJlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5vdXQoKS5hcyhcImhlcmVcIikuaGFzKFwibGFuZ1wiLCBcImphdmFcIikuc2VsZWN0KFwiaGVyZVwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkub3V0KCkuYXMoXCJoZXJlXCIpLmhhcyhcImxhbmdcIiwgXCJqYXZhXCIpLnNlbGVjdChcImhlcmVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkub3V0KCkuYXNfKCdoZXJlJykuaGFzKCdsYW5nJywgJ2phdmEnKS5zZWxlY3QoJ2hlcmUnKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVfYXNYaGVyZVhfaW5WX2hhc1huYW1lX3ZhZGFzWF9zZWxlY3RYaGVyZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImhlcmVcIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiaGVyZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiaGVyZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhzdHJpbmcwKS5pblYoKS5oYXMoc3RyaW5nMSwgc3RyaW5nMikuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKCkuQXMoXCJoZXJlXCIpLkluVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5TZWxlY3Q8b2JqZWN0PihcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RSgpLkFzKFwiaGVyZVwiKS5JblYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuU2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RSgpLmFzKFwiaGVyZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoKS5hcyhcImhlcmVcIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKCkuYXMoXCJoZXJlXCIpLmluVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgpLmFzXygnaGVyZScpLmluX3YoKS5oYXMoJ25hbWUnLCAndmFkYXMnKS5zZWxlY3QoJ2hlcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVYa25vd3NYX2hhc1h3ZWlnaHRfMVhfYXNYaGVyZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmFzKFwiaGVyZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5hcyhcImhlcmVcIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmFzKFwiaGVyZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5oYXMoc3RyaW5nMSwgbnVtYmVyMCkuYXMoc3RyaW5nMikuaW5WKCkuaGFzKHN0cmluZzMsIHN0cmluZzQpLnNlbGVjdChzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAxLjApLkFzKFwiaGVyZVwiKS5JblYoKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5TZWxlY3Q8b2JqZWN0PihcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpLkhhcyhcIndlaWdodFwiLCAxLjApLkFzKFwiaGVyZVwiKS5JblYoKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5TZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDEuMCkuYXMoXCJoZXJlXCIpLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDEuMCkuYXMoXCJoZXJlXCIpLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuaGFzKFwid2VpZ2h0XCIsIDEuMCkuYXMoXCJoZXJlXCIpLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdrbm93cycpLmhhcygnd2VpZ2h0JywgMS4wKS5hc18oJ2hlcmUnKS5pbl92KCkuaGFzKCduYW1lJywgJ2pvc2gnKS5zZWxlY3QoJ2hlcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVYa25vd3NYX2FzWGhlcmVYX2hhc1h3ZWlnaHRfMVhfYXNYZmFrZVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmFzKFwiaGVyZVwiKS5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5hcyhcImZha2VcIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYXMoXCJoZXJlXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmFzKFwiZmFrZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYXMoXCJoZXJlXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmFzKFwiZmFrZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5hcyhzdHJpbmcxKS5oYXMoc3RyaW5nMiwgbnVtYmVyMCkuYXMoc3RyaW5nMykuaW5WKCkuaGFzKHN0cmluZzQsIHN0cmluZzUpLnNlbGVjdChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpLkFzKFwiaGVyZVwiKS5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5BcyhcImZha2VcIikuSW5WKCkuSGFzKFwibmFtZVwiLCBcImpvc2hcIikuU2VsZWN0PG9iamVjdD4oXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJrbm93c1wiKS5BcyhcImhlcmVcIikuSGFzKFwid2VpZ2h0XCIsIDEuMCkuQXMoXCJmYWtlXCIpLkluVigpLkhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLlNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5hcyhcImhlcmVcIikuaGFzKFwid2VpZ2h0XCIsIDEuMCkuYXMoXCJmYWtlXCIpLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYXMoXCJoZXJlXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmFzKFwiZmFrZVwiKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmFzKFwiaGVyZVwiKS5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5hcyhcImZha2VcIikuaW5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoJ2tub3dzJykuYXNfKCdoZXJlJykuaGFzKCd3ZWlnaHQnLCAxLjApLmFzXygnZmFrZScpLmluX3YoKS5oYXMoJ25hbWUnLCAnam9zaCcpLnNlbGVjdCgnaGVyZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYaGVyZVhvdXRfbmFtZV9zZWxlY3RYaGVyZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJoZXJlXCIpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiaGVyZVwiKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJoZXJlXCIpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkub3V0KCkudmFsdWVzKHN0cmluZzEpLnNlbGVjdChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImhlcmVcIikuT3V0KCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlNlbGVjdDxvYmplY3Q+KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiaGVyZVwiKS5PdXQoKS5WYWx1ZXMoXCJuYW1lXCIpLlNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJoZXJlXCIpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJoZXJlXCIpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJoZXJlXCIpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2hlcmUnKS5vdXQoKS52YWx1ZXMoJ25hbWUnKS5zZWxlY3QoJ2hlcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dFhjcmVhdGVkWF91bmlvblhhc1hwcm9qZWN0WF9pblhjcmVhdGVkWF9oYXNYbmFtZV9tYXJrb1hfc2VsZWN0WHByb2plY3RYX19hc1hwcm9qZWN0WF9pblhjcmVhdGVkWF9pblhrbm93c1hfaGFzWG5hbWVfbWFya29YX3NlbGVjdFhwcm9qZWN0WFhfZ3JvdXBDb3VudF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnVuaW9uKF9fLmFzKFwicHJvamVjdFwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNlbGVjdChcInByb2plY3RcIiksX18uYXMoXCJwcm9qZWN0XCIpLmluKFwiY3JlYXRlZFwiKS5pbihcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zZWxlY3QoXCJwcm9qZWN0XCIpKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS51bmlvbihfXy5hcyhcInByb2plY3RcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zZWxlY3QoXCJwcm9qZWN0XCIpLCBfXy5hcyhcInByb2plY3RcIikuaW4oXCJjcmVhdGVkXCIpLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNlbGVjdChcInByb2plY3RcIikpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS51bmlvbihfXy5hcyhcInByb2plY3RcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zZWxlY3QoXCJwcm9qZWN0XCIpLCBfXy5hcyhcInByb2plY3RcIikuaW4oXCJjcmVhdGVkXCIpLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNlbGVjdChcInByb2plY3RcIikpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS51bmlvbihfXy5hcyhzdHJpbmcxKS5pbihzdHJpbmcwKS5oYXMoc3RyaW5nMiwgc3RyaW5nMykuc2VsZWN0KHN0cmluZzEpLCBfXy5hcyhzdHJpbmcxKS5pbihzdHJpbmcwKS5pbihzdHJpbmc0KS5oYXMoc3RyaW5nMiwgc3RyaW5nMykuc2VsZWN0KHN0cmluZzEpKS5ncm91cENvdW50KCkuYnkoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5VbmlvbjxvYmplY3Q+KF9fLkFzKFwicHJvamVjdFwiKS5JbihcImNyZWF0ZWRcIikuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlNlbGVjdDxvYmplY3Q+KFwicHJvamVjdFwiKSwgX18uQXMoXCJwcm9qZWN0XCIpLkluKFwiY3JlYXRlZFwiKS5JbihcImtub3dzXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5TZWxlY3Q8b2JqZWN0PihcInByb2plY3RcIikpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dChcImNyZWF0ZWRcIikuVW5pb24oZ3JlbWxpbmdvLlRfXy5BcyhcInByb2plY3RcIikuSW4oXCJjcmVhdGVkXCIpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5TZWxlY3QoXCJwcm9qZWN0XCIpLCBncmVtbGluZ28uVF9fLkFzKFwicHJvamVjdFwiKS5JbihcImNyZWF0ZWRcIikuSW4oXCJrbm93c1wiKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuU2VsZWN0KFwicHJvamVjdFwiKSkuR3JvdXBDb3VudCgpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnVuaW9uKF9fLmFzKFwicHJvamVjdFwiKS5pbihcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNlbGVjdChcInByb2plY3RcIiksIF9fLmFzKFwicHJvamVjdFwiKS5pbihcImNyZWF0ZWRcIikuaW4oXCJrbm93c1wiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2VsZWN0KFwicHJvamVjdFwiKSkuZ3JvdXBDb3VudCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS51bmlvbihfXy5hcyhcInByb2plY3RcIikuaW4oXCJjcmVhdGVkXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zZWxlY3QoXCJwcm9qZWN0XCIpLCBfXy5hcyhcInByb2plY3RcIikuaW4oXCJjcmVhdGVkXCIpLmluKFwia25vd3NcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNlbGVjdChcInByb2plY3RcIikpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikudW5pb24oX18uYXMoXCJwcm9qZWN0XCIpLmluXyhcImNyZWF0ZWRcIikuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNlbGVjdChcInByb2plY3RcIiksIF9fLmFzKFwicHJvamVjdFwiKS5pbl8oXCJjcmVhdGVkXCIpLmluXyhcImtub3dzXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zZWxlY3QoXCJwcm9qZWN0XCIpKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgnY3JlYXRlZCcpLnVuaW9uKF9fLmFzXygncHJvamVjdCcpLmluXygnY3JlYXRlZCcpLmhhcygnbmFtZScsICdtYXJrbycpLnNlbGVjdCgncHJvamVjdCcpLCBfXy5hc18oJ3Byb2plY3QnKS5pbl8oJ2NyZWF0ZWQnKS5pbl8oJ2tub3dzJykuaGFzKCduYW1lJywgJ21hcmtvJykuc2VsZWN0KCdwcm9qZWN0JykpLmdyb3VwX2NvdW50KCkuYnkoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3VudGlsWG91dF9vdXRYX3JlcGVhdFhpbl9hc1hhWFhfc2VsZWN0WGFYX2J5WHRhaWxYbG9jYWxYX25hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikpLnNlbGVjdChcImFcIikuYnkoX18udGFpbChTY29wZS5sb2NhbCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS51bnRpbChfXy5vdXQoKS5vdXQoKSkucmVwZWF0KF9fLmluKCkuYXMoXCJhXCIpKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikpLnNlbGVjdChcImFcIikuYnkoX18udGFpbChTY29wZS5sb2NhbCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhzdHJpbmcwKSkuc2VsZWN0KHN0cmluZzApLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwpLnZhbHVlcyhzdHJpbmcxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVW50aWwoX18uT3V0KCkuT3V0KCkpLlJlcGVhdChfXy5JbigpLkFzKFwiYVwiKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIpLkJ5KF9fLlRhaWw8b2JqZWN0PihTY29wZS5Mb2NhbCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlVudGlsKGdyZW1saW5nby5UX18uT3V0KCkuT3V0KCkpLlJlcGVhdChncmVtbGluZ28uVF9fLkluKCkuQXMoXCJhXCIpKS5TZWxlY3QoXCJhXCIpLkJ5KGdyZW1saW5nby5UX18uVGFpbChncmVtbGluZ28uU2NvcGUuTG9jYWwpLlZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikpLnNlbGVjdChcImFcIikuYnkoX18udGFpbChTY29wZS5sb2NhbCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikpLnNlbGVjdChcImFcIikuYnkoX18udGFpbChTY29wZS5sb2NhbCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW5fKCkuYXMoXCJhXCIpKS5zZWxlY3QoXCJhXCIpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW5fKCkuYXNfKCdhJykpLnNlbGVjdCgnYScpLmJ5KF9fLnRhaWwoU2NvcGUubG9jYWwpLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WGtleXNYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKHN0cmluZzApLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5Hcm91cENvdW50PG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uS2V5cykuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuR3JvdXBDb3VudCgpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLktleXMpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLmdyb3VwX2NvdW50KCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9hc1huYW1lWF9hc1hsYW5ndWFnZVhfYXNYY3JlYXRvcnNYX3NlbGVjdFhuYW1lX2xhbmd1YWdlX2NyZWF0b3JzWF9ieVhuYW1lWF9ieVhsYW5nWF9ieVhpblhjcmVhdGVkWF9uYW1lX2ZvbGRfb3JkZXJYbG9jYWxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmFzKFwibmFtZVwiKS5hcyhcImxhbmd1YWdlXCIpLmFzKFwiY3JlYXRvcnNcIikuc2VsZWN0KFwibmFtZVwiLCBcImxhbmd1YWdlXCIsIFwiY3JlYXRvcnNcIikuYnkoXCJuYW1lXCIpLmJ5KFwibGFuZ1wiKS5ieShfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuYXMoXCJuYW1lXCIpLmFzKFwibGFuZ3VhZ2VcIikuYXMoXCJjcmVhdG9yc1wiKS5zZWxlY3QoXCJuYW1lXCIsIFwibGFuZ3VhZ2VcIiwgXCJjcmVhdG9yc1wiKS5ieShcIm5hbWVcIikuYnkoXCJsYW5nXCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuYXMoXCJuYW1lXCIpLmFzKFwibGFuZ3VhZ2VcIikuYXMoXCJjcmVhdG9yc1wiKS5zZWxlY3QoXCJuYW1lXCIsIFwibGFuZ3VhZ2VcIiwgXCJjcmVhdG9yc1wiKS5ieShcIm5hbWVcIikuYnkoXCJsYW5nXCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5hcyhzdHJpbmcxKS5hcyhzdHJpbmcyKS5hcyhzdHJpbmczKS5zZWxlY3Qoc3RyaW5nMSwgc3RyaW5nMiwgc3RyaW5nMykuYnkoc3RyaW5nMSkuYnkoc3RyaW5nNCkuYnkoX18uaW4oc3RyaW5nNSkudmFsdWVzKHN0cmluZzEpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuQXMoXCJuYW1lXCIpLkFzKFwibGFuZ3VhZ2VcIikuQXMoXCJjcmVhdG9yc1wiKS5TZWxlY3Q8b2JqZWN0PihcIm5hbWVcIiwgXCJsYW5ndWFnZVwiLCBcImNyZWF0b3JzXCIpLkJ5KFwibmFtZVwiKS5CeShcImxhbmdcIikuQnkoX18uSW4oXCJjcmVhdGVkXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkuT3JkZXIoU2NvcGUuTG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuQXMoXCJuYW1lXCIpLkFzKFwibGFuZ3VhZ2VcIikuQXMoXCJjcmVhdG9yc1wiKS5TZWxlY3QoXCJuYW1lXCIsIFwibGFuZ3VhZ2VcIiwgXCJjcmVhdG9yc1wiKS5CeShcIm5hbWVcIikuQnkoXCJsYW5nXCIpLkJ5KGdyZW1saW5nby5UX18uSW4oXCJjcmVhdGVkXCIpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpLk9yZGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuYXMoXCJuYW1lXCIpLmFzKFwibGFuZ3VhZ2VcIikuYXMoXCJjcmVhdG9yc1wiKS5zZWxlY3QoXCJuYW1lXCIsIFwibGFuZ3VhZ2VcIiwgXCJjcmVhdG9yc1wiKS5ieShcIm5hbWVcIikuYnkoXCJsYW5nXCIpLmJ5KF9fLmluKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmFzKFwibmFtZVwiKS5hcyhcImxhbmd1YWdlXCIpLmFzKFwiY3JlYXRvcnNcIikuc2VsZWN0KFwibmFtZVwiLCBcImxhbmd1YWdlXCIsIFwiY3JlYXRvcnNcIikuYnkoXCJuYW1lXCIpLmJ5KFwibGFuZ1wiKS5ieShfXy5pbihcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5hcyhcIm5hbWVcIikuYXMoXCJsYW5ndWFnZVwiKS5hcyhcImNyZWF0b3JzXCIpLnNlbGVjdChcIm5hbWVcIiwgXCJsYW5ndWFnZVwiLCBcImNyZWF0b3JzXCIpLmJ5KFwibmFtZVwiKS5ieShcImxhbmdcIikuYnkoX18uaW5fKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS5hc18oJ25hbWUnKS5hc18oJ2xhbmd1YWdlJykuYXNfKCdjcmVhdG9ycycpLnNlbGVjdCgnbmFtZScsICdsYW5ndWFnZScsICdjcmVhdG9ycycpLmJ5KCduYW1lJykuYnkoJ2xhbmcnKS5ieShfXy5pbl8oJ2NyZWF0ZWQnKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfdW5mb2xkX3NlbGVjdFhrZXlzWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhzdHJpbmcwKS5ncm91cENvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXRFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuR3JvdXBDb3VudDxvYmplY3Q+KCkuVW5mb2xkPG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uS2V5cykuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuR3JvdXBDb3VudCgpLlVuZm9sZCgpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLktleXMpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLmdyb3VwX2NvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfdW5mb2xkX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKHN0cmluZzApLmdyb3VwQ291bnQoKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLkdyb3VwQ291bnQ8b2JqZWN0PigpLlVuZm9sZDxvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuR3JvdXBDb3VudCgpLlVuZm9sZCgpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkudW5mb2xkKCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnVuZm9sZCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXRfZSgpLnZhbHVlcygnd2VpZ2h0JykuZ3JvdXBfY291bnQoKS51bmZvbGQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl91bnRpbFhvdXRfb3V0WF9yZXBlYXRYaW5fYXNYYVhfaW5fYXNYYlhYX3NlbGVjdFhhX2JYX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikuaW4oKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikuaW4oKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS51bnRpbChfXy5vdXQoKS5vdXQoKSkucmVwZWF0KF9fLmluKCkuYXMoXCJhXCIpLmluKCkuYXMoXCJiXCIpKS5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhzdHJpbmcwKS5pbigpLmFzKHN0cmluZzEpKS5zZWxlY3Qoc3RyaW5nMCwgc3RyaW5nMSkuYnkoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVW50aWwoX18uT3V0KCkuT3V0KCkpLlJlcGVhdChfXy5JbigpLkFzKFwiYVwiKS5JbigpLkFzKFwiYlwiKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5VbnRpbChncmVtbGluZ28uVF9fLk91dCgpLk91dCgpKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5JbigpLkFzKFwiYVwiKS5JbigpLkFzKFwiYlwiKSkuU2VsZWN0KFwiYVwiLCBcImJcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVudGlsKF9fLm91dCgpLm91dCgpKS5yZXBlYXQoX18uaW4oKS5hcyhcImFcIikuaW4oKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudW50aWwoX18ub3V0KCkub3V0KCkpLnJlcGVhdChfXy5pbigpLmFzKFwiYVwiKS5pbigpLmFzKFwiYlwiKSkuc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS51bnRpbChfXy5vdXQoKS5vdXQoKSkucmVwZWF0KF9fLmluXygpLmFzKFwiYVwiKS5pbl8oKS5hcyhcImJcIikpLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS51bnRpbChfXy5vdXQoKS5vdXQoKSkucmVwZWF0KF9fLmluXygpLmFzXygnYScpLmluXygpLmFzXygnYicpKS5zZWxlY3QoJ2EnLCAnYicpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRFX3dlaWdodF9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKHN0cmluZzApLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLkdyb3VwQ291bnQ8b2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXRFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLkdyb3VwQ291bnQoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLmdyb3VwX2NvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfd2hlcmVYb3V0WGtub3dzWFhfc2VsZWN0WGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS53aGVyZShfXy5vdXQoXCJrbm93c1wiKSkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS53aGVyZShfXy5vdXQoXCJrbm93c1wiKSkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikud2hlcmUoX18ub3V0KFwia25vd3NcIikpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLndoZXJlKF9fLm91dChzdHJpbmcxKSkuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5XaGVyZShfXy5PdXQoXCJrbm93c1wiKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLldoZXJlKGdyZW1saW5nby5UX18uT3V0KFwia25vd3NcIikpLlNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLndoZXJlKF9fLm91dChcImtub3dzXCIpKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikud2hlcmUoX18ub3V0KFwia25vd3NcIikpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS53aGVyZShfXy5vdXQoXCJrbm93c1wiKSkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS53aGVyZShfXy5vdXQoJ2tub3dzJykpLnNlbGVjdCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfYXNYYVhfcmVwZWF0WG91dF9hc1hhWFhfdGltZXNYMlhfc2VsZWN0WGZpcnN0X2FYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLmFzKFwiYVwiKSkudGltZXMoMikuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkuYXMoXCJhXCIpKS50aW1lcygyKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkuYXMoXCJhXCIpKS50aW1lcygyKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hcyhzdHJpbmcwKS5yZXBlYXQoX18ub3V0KCkuYXMoc3RyaW5nMCkpLnRpbWVzKG51bWJlcjApLnNlbGVjdChQb3AuZmlyc3QsIHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5BcyhcImFcIikuUmVwZWF0KF9fLk91dCgpLkFzKFwiYVwiKSkuVGltZXMoMikuU2VsZWN0PG9iamVjdD4oUG9wLkZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuQXMoXCJhXCIpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpLkFzKFwiYVwiKSkuVGltZXMoMikuU2VsZWN0KGdyZW1saW5nby5Qb3AuRmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLnJlcGVhdChfXy5vdXQoKS5hcyhcImFcIikpLnRpbWVzKDIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLmFzKFwiYVwiKS5yZXBlYXQoX18ub3V0KCkuYXMoXCJhXCIpKS50aW1lcygyKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLmFzKFwiYVwiKSkudGltZXMoMikuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5yZXBlYXQoX18ub3V0KCkuYXNfKCdhJykpLnRpbWVzKDIpLnNlbGVjdChQb3AuZmlyc3QsICdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9vdXRYa25vd3NYX2FzWGJYX2xvY2FsWHNlbGVjdFhhX2JYX2J5WG5hbWVYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLmxvY2FsKF9fLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLmxvY2FsKF9fLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5sb2NhbChfXy5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMikubG9jYWwoX18uc2VsZWN0KHN0cmluZzAsIHN0cmluZzIpLmJ5KHN0cmluZzMpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJiXCIpLkxvY2FsPG9iamVjdD4oX18uU2VsZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dChcImtub3dzXCIpLkFzKFwiYlwiKS5Mb2NhbChncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIiwgXCJiXCIpLkJ5KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYlwiKS5sb2NhbChfXy5zZWxlY3QoXCJhXCIsIFwiYlwiKS5ieShcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJiXCIpLmxvY2FsKF9fLnNlbGVjdChcImFcIiwgXCJiXCIpLmJ5KFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5hcyhcImJcIikubG9jYWwoX18uc2VsZWN0KFwiYVwiLCBcImJcIikuYnkoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdiJykubG9jYWwoX18uc2VsZWN0KCdhJywgJ2InKS5ieSgnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2FzWGFYX3JlcGVhdFhvdXRfYXNYYVhYX3RpbWVzWDJYX3NlbGVjdFhsYXN0X2FYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLmFzKFwiYVwiKSkudGltZXMoMikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLnJlcGVhdChfXy5vdXQoKS5hcyhcImFcIikpLnRpbWVzKDIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5hcyhcImFcIikucmVwZWF0KF9fLm91dCgpLmFzKFwiYVwiKSkudGltZXMoMikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5hcyhzdHJpbmcwKS5yZXBlYXQoX18ub3V0KCkuYXMoc3RyaW5nMCkpLnRpbWVzKG51bWJlcjApLnNlbGVjdChQb3AubGFzdCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5SZXBlYXQoX18uT3V0KCkuQXMoXCJhXCIpKS5UaW1lcygyKS5TZWxlY3Q8b2JqZWN0PihQb3AuTGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkFzKFwiYVwiKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5PdXQoKS5BcyhcImFcIikpLlRpbWVzKDIpLlNlbGVjdChncmVtbGluZ28uUG9wLkxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLnJlcGVhdChfXy5vdXQoKS5hcyhcImFcIikpLnRpbWVzKDIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLnJlcGVhdChfXy5vdXQoKS5hcyhcImFcIikpLnRpbWVzKDIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuYXMoXCJhXCIpLnJlcGVhdChfXy5vdXQoKS5hcyhcImFcIikpLnRpbWVzKDIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5hc18oJ2EnKS5yZXBlYXQoX18ub3V0KCkuYXNfKCdhJykpLnRpbWVzKDIpLnNlbGVjdChQb3AubGFzdCwgJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVYa25vd3NYX2FzWGhlcmVYX2hhc1h3ZWlnaHRfMVhfaW5WX2hhc1huYW1lX2pvc2hYX3NlbGVjdFhoZXJlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmFzKFwiaGVyZVwiKS5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5hcyhcImhlcmVcIikuaGFzKFwid2VpZ2h0XCIsIDEuMCkuaW5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikuc2VsZWN0KFwiaGVyZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLmFzKFwiaGVyZVwiKS5oYXMoXCJ3ZWlnaHRcIiwgMS4wKS5pblYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5zZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5hcyhzdHJpbmcxKS5oYXMoc3RyaW5nMiwgbnVtYmVyMCkuaW5WKCkuaGFzKHN0cmluZzMsIHN0cmluZzQpLnNlbGVjdChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpLkFzKFwiaGVyZVwiKS5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5JblYoKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5TZWxlY3Q8b2JqZWN0PihcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RShcImtub3dzXCIpLkFzKFwiaGVyZVwiKS5IYXMoXCJ3ZWlnaHRcIiwgMS4wKS5JblYoKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5TZWxlY3QoXCJoZXJlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYXMoXCJoZXJlXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYXMoXCJoZXJlXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuYXMoXCJoZXJlXCIpLmhhcyhcIndlaWdodFwiLCAxLjApLmluVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLnNlbGVjdChcImhlcmVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdrbm93cycpLmFzXygnaGVyZScpLmhhcygnd2VpZ2h0JywgMS4wKS5pbl92KCkuaGFzKCduYW1lJywgJ2pvc2gnKS5zZWxlY3QoJ2hlcmUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX2hhc1huYW1lX21hcmtvWF9hc1hiWF9hc1hjWF9zZWxlY3RYYV9iX2NYX2J5X2J5WG5hbWVYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieSgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuYXMoXCJiXCIpLmFzKFwiY1wiKS5zZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuYnkoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieSgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYXMoc3RyaW5nMCkuaGFzKHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFzKHN0cmluZzQpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmczLCBzdHJpbmc0KS5ieSgpLmJ5KHN0cmluZzEpLmJ5KHN0cmluZzUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJiXCIpLkFzKFwiY1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIiwgXCJiXCIsIFwiY1wiKS5CeSgpLkJ5KFwibmFtZVwiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuQXMoXCJiXCIpLkFzKFwiY1wiKS5TZWxlY3QoXCJhXCIsIFwiYlwiLCBcImNcIikuQnkoKS5CeShcIm5hbWVcIikuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieSgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieSgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5hcyhcImJcIikuYXMoXCJjXCIpLnNlbGVjdChcImFcIiwgXCJiXCIsIFwiY1wiKS5ieSgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5oYXMoJ25hbWUnLCAnbWFya28nKS5hc18oJ2InKS5hc18oJ2MnKS5zZWxlY3QoJ2EnLCAnYicsICdjJykuYnkoKS5ieSgnbmFtZScpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dEVfd2VpZ2h0X2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX2dyb3VwQ291bnRfc2VsZWN0WHZhbHVlc1hfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dEUoKS52YWx1ZXMoc3RyaW5nMCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dEUoKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5Hcm91cENvdW50PG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXRFKCkuVmFsdWVzKFwid2VpZ2h0XCIpLkdyb3VwQ291bnQoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpLkdyb3VwQ291bnQoKS5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5WYWx1ZXMpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0X2UoKS52YWx1ZXMoJ3dlaWdodCcpLmdyb3VwX2NvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLmdyb3VwX2NvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfZ3JvdXBYbVhfYnlfYnlYYm90aEVfY291bnRYX2JhcnJpZXJfc2VsZWN0WG1YX3NlbGVjdFhzZWxlY3RYYVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5ncm91cChcIm1cIikuYnkoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJhcnJpZXIoKS5zZWxlY3QoXCJtXCIpLnNlbGVjdChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiKS5ncm91cChcIm1cIikuYnkoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJhcnJpZXIoKS5zZWxlY3QoXCJtXCIpLnNlbGVjdChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikuZ3JvdXAoXCJtXCIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KFwibVwiKS5zZWxlY3QoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLmdyb3VwKHN0cmluZzEpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KHN0cmluZzEpLnNlbGVjdChfXy5zZWxlY3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5Hcm91cChcIm1cIikuQnkoKS5CeShfXy5Cb3RoRSgpLkNvdW50KCkpLkJhcnJpZXIoKS5TZWxlY3Q8b2JqZWN0PihcIm1cIikuU2VsZWN0PG9iamVjdD4oX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5Hcm91cChcIm1cIikuQnkoKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuQ291bnQoKSkuQmFycmllcigpLlNlbGVjdChcIm1cIikuU2VsZWN0KGdyZW1saW5nby5UX18uU2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLmdyb3VwKFwibVwiKS5ieSgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdChcIm1cIikuc2VsZWN0KF9fLnNlbGVjdChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikuZ3JvdXAoXCJtXCIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KFwibVwiKS5zZWxlY3QoX18uc2VsZWN0KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5ncm91cChcIm1cIikuYnkoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJhcnJpZXIoKS5zZWxlY3QoXCJtXCIpLnNlbGVjdChfXy5zZWxlY3QoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5ncm91cCgnbScpLmJ5KCkuYnkoX18uYm90aF9lKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdCgnbScpLnNlbGVjdChfXy5zZWxlY3QoJ2EnKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhWF9ncm91cFhtWF9ieV9ieVhib3RoRV9jb3VudFhfYmFycmllcl9zZWxlY3RYbVhfc2VsZWN0WHNlbGVjdFhhWFhfYnlYbWF0aFhfcGx1c19YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikuZ3JvdXAoXCJtXCIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KFwibVwiKS5zZWxlY3QoX18uc2VsZWN0KFwiYVwiKSkuYnkoX18ubWF0aChcIl8rX1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikuZ3JvdXAoXCJtXCIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KFwibVwiKS5zZWxlY3QoX18uc2VsZWN0KFwiYVwiKSkuYnkoX18ubWF0aChcIl8rX1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLmdyb3VwKFwibVwiKS5ieSgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdChcIm1cIikuc2VsZWN0KF9fLnNlbGVjdChcImFcIikpLmJ5KF9fLm1hdGgoXCJfK19cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5ncm91cChzdHJpbmcxKS5ieSgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdChzdHJpbmcxKS5zZWxlY3QoX18uc2VsZWN0KHN0cmluZzApKS5ieShfXy5tYXRoKHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuR3JvdXAoXCJtXCIpLkJ5KCkuQnkoX18uQm90aEUoKS5Db3VudCgpKS5CYXJyaWVyKCkuU2VsZWN0PG9iamVjdD4oXCJtXCIpLlNlbGVjdDxvYmplY3Q+KF9fLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSkuQnkoX18uTWF0aChcIl8rX1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIikuR3JvdXAoXCJtXCIpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkNvdW50KCkpLkJhcnJpZXIoKS5TZWxlY3QoXCJtXCIpLlNlbGVjdChncmVtbGluZ28uVF9fLlNlbGVjdChcImFcIikpLkJ5KGdyZW1saW5nby5UX18uTWF0aChcIl8rX1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLmdyb3VwKFwibVwiKS5ieSgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdChcIm1cIikuc2VsZWN0KF9fLnNlbGVjdChcImFcIikpLmJ5KF9fLm1hdGgoXCJfK19cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikuZ3JvdXAoXCJtXCIpLmJ5KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKS5iYXJyaWVyKCkuc2VsZWN0KFwibVwiKS5zZWxlY3QoX18uc2VsZWN0KFwiYVwiKSkuYnkoX18ubWF0aChcIl8rX1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5ncm91cChcIm1cIikuYnkoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpLmJhcnJpZXIoKS5zZWxlY3QoXCJtXCIpLnNlbGVjdChfXy5zZWxlY3QoXCJhXCIpKS5ieShfXy5tYXRoKFwiXytfXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5ncm91cCgnbScpLmJ5KCkuYnkoX18uYm90aF9lKCkuY291bnQoKSkuYmFycmllcigpLnNlbGVjdCgnbScpLnNlbGVjdChfXy5zZWxlY3QoJ2EnKSkuYnkoX18ubWF0aCgnXytfJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0WGtub3dzWF9hc1hhWF9zZWxlY3RYYWxsX2NvbnN0YW50WGFYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBfXy5jb25zdGFudChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KFwia25vd3NcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBfXy5jb25zdGFudChcImFcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoc3RyaW5nMSkuYXMoc3RyaW5nMCkuc2VsZWN0KFBvcC5hbGwsIF9fLmNvbnN0YW50KHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KFwia25vd3NcIikuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFBvcC5BbGwsIF9fLkNvbnN0YW50PG9iamVjdD4oXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuQWxsLCBncmVtbGluZ28uVF9fLkNvbnN0YW50KFwiYVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgX18uY29uc3RhbnQoXCJhXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5vdXQoJ2tub3dzJykuYXNfKCdhJykuc2VsZWN0KFBvcC5hbGxfLCBfXy5jb25zdGFudCgnYScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NlbGVjdFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2VsZWN0PG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNlbGVjdCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2VsZWN0WGFYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnNlbGVjdChcImFcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNlbGVjdChcImFcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnNlbGVjdChzdHJpbmcwKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2VsZWN0KFwiYVwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNlbGVjdChcImFcIikuY291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2VsZWN0KFwiYVwiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zZWxlY3QoXCJhXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2VsZWN0KCdhJykuY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NlbGVjdFhhX2JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnNlbGVjdChcImFcIixcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zZWxlY3QoXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNlbGVjdCgnYScsICdiJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcF9zZWxlY3RYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5TZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcF9zZWxlY3RYYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChcImFcIixcImJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcCgpLlNlbGVjdChcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KCdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NlbGVjdFhmaXJzdF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TZWxlY3Q8b2JqZWN0PihQb3AuRmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlNlbGVjdChncmVtbGluZ28uUG9wLkZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCAnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2VsZWN0WGZpcnN0X2FfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIsXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TZWxlY3Q8b2JqZWN0PihQb3AuRmlyc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5GaXJzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNlbGVjdChQb3AuZmlyc3QsICdhJywgJ2InKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuZmlyc3QsIHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PigpLlNlbGVjdDxvYmplY3Q+KFBvcC5GaXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5GaXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwX3NlbGVjdFhmaXJzdF9hX2JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIsXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmZpcnN0LCBzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihQb3AuRmlyc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcCgpLlNlbGVjdChncmVtbGluZ28uUG9wLkZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KFBvcC5maXJzdCwgJ2EnLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2VsZWN0WGxhc3RfYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCBzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TZWxlY3Q8b2JqZWN0PihQb3AuTGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCAnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2VsZWN0WGxhc3RfYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiLFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnNlbGVjdChQb3AubGFzdCwgc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2VsZWN0PG9iamVjdD4oUG9wLkxhc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5MYXN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2VsZWN0KFBvcC5sYXN0LCAnYScsICdiJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcF9zZWxlY3RYbGFzdF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oUG9wLkxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKCkuU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KFBvcC5sYXN0LCAnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBfc2VsZWN0WGxhc3RfYV9iWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIsXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCBzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihQb3AuTGFzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKCkuU2VsZWN0KGdyZW1saW5nby5Qb3AuTGFzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5sYXN0LCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgpLnNlbGVjdChQb3AubGFzdCwgJ2EnLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2VsZWN0WGFsbF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2VsZWN0KGdyZW1saW5nby5Qb3AuQWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zZWxlY3QoUG9wLmFsbF8sICdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zZWxlY3RYYWxsX2FfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNlbGVjdChQb3AuYWxsXywgJ2EnLCAnYicpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBfc2VsZWN0WGFsbF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCBzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oKS5TZWxlY3Q8b2JqZWN0PihQb3AuQWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcCgpLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCgpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KFBvcC5hbGxfLCAnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBfc2VsZWN0WGFsbF9hX2JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJhXCIsIFwiYlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKCkuU2VsZWN0KGdyZW1saW5nby5Qb3AuQWxsLCBcImFcIiwgXCJiXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImJcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkuc2VsZWN0KFBvcC5hbGxfLCAnYScsICdiJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhX2JYX291dF9hc1hjWF9wYXRoX3NlbGVjdFhrZXlzWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIiwgXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFzKFwiYVwiLCBcImJcIikub3V0KCkuYXMoXCJjXCIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiLCBcImJcIikub3V0KCkuYXMoXCJjXCIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwLCBzdHJpbmcxKS5vdXQoKS5hcyhzdHJpbmcyKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIiwgXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5QYXRoKCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIsIFwiYlwiKS5PdXQoKS5BcyhcImNcIikuUGF0aCgpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLktleXMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiLCBcImJcIikub3V0KCkuYXMoXCJjXCIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIiwgXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIsIFwiYlwiKS5vdXQoKS5hcyhcImNcIikucGF0aCgpLnNlbGVjdChDb2x1bW4ua2V5cykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJywgJ2InKS5vdXQoKS5hc18oJ2MnKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiLCBcImJcIikub3V0KCkuYXMoXCJjXCIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIsIFwiYlwiKS5vdXQoKS5hcyhcImNcIikucGF0aCgpLnNlbGVjdChDb2x1bW4ua2V5cykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIsIFwiYlwiKS5vdXQoKS5hcyhcImNcIikucGF0aCgpLnNlbGVjdChDb2x1bW4ua2V5cykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzAsIHN0cmluZzEpLm91dCgpLmFzKHN0cmluZzIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiLCBcImJcIikuT3V0KCkuQXMoXCJjXCIpLlBhdGgoKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uS2V5cykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BcyhcImFcIiwgXCJiXCIpLk91dCgpLkFzKFwiY1wiKS5QYXRoKCkuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uS2V5cykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIsIFwiYlwiKS5vdXQoKS5hcyhcImNcIikucGF0aCgpLnNlbGVjdChDb2x1bW4ua2V5cykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiLCBcImJcIikub3V0KCkuYXMoXCJjXCIpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIiwgXCJiXCIpLm91dCgpLmFzKFwiY1wiKS5wYXRoKCkuc2VsZWN0KENvbHVtbi5rZXlzKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnLCAnYicpLm91dCgpLmFzXygnYycpLnBhdGgoKS5zZWxlY3QoQ29sdW1uLmtleXMpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9iYXJyaWVyX2FzWGFYX291dFhrbm93c19zZWxlY3RYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5iYXJyaWVyKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuYmFycmllcigpLmFzKFwiYVwiKS5vdXQoXCJrbm93c1wiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5iYXJyaWVyKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5iYXJyaWVyKCkuYXMoc3RyaW5nMykub3V0KHN0cmluZzQpLnNlbGVjdChzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuQmFycmllcigpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuQmFycmllcigpLkFzKFwiYVwiKS5PdXQoXCJrbm93c1wiKS5TZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5iYXJyaWVyKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5iYXJyaWVyKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5iYXJyaWVyKCkuYXMoXCJhXCIpLm91dChcImtub3dzXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmJhcnJpZXIoKS5hc18oJ2EnKS5vdXQoJ2tub3dzJykuc2VsZWN0KCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2VsZW1lbnRNYXBYbmFtZVhfYXNYYVhfdW5pb25YaWRlbnRpdHlfaWRlbnRpdHlYX3NlbGVjdFhhWF9zZWxlY3RYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5lbGVtZW50TWFwKFwibmFtZVwiKS5hcyhcImFcIikudW5pb24oX18uaWRlbnRpdHkoKSxfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpLnNlbGVjdChcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuZWxlbWVudE1hcChcIm5hbWVcIikuYXMoXCJhXCIpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuZWxlbWVudE1hcChcIm5hbWVcIikuYXMoXCJhXCIpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmVsZW1lbnRNYXAoc3RyaW5nMSkuYXMoc3RyaW5nMykudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KHN0cmluZzMpLnNlbGVjdChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuRWxlbWVudE1hcDxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImFcIikuVW5pb248b2JqZWN0PihfXy5JZGVudGl0eSgpLCBfXy5JZGVudGl0eSgpKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuU2VsZWN0PG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkVsZW1lbnRNYXAoXCJuYW1lXCIpLkFzKFwiYVwiKS5VbmlvbihncmVtbGluZ28uVF9fLklkZW50aXR5KCksIGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuU2VsZWN0KFwiYVwiKS5TZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5lbGVtZW50TWFwKFwibmFtZVwiKS5hcyhcImFcIikudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KFwiYVwiKS5zZWxlY3QoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuZWxlbWVudE1hcChcIm5hbWVcIikuYXMoXCJhXCIpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikuc2VsZWN0KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmVsZW1lbnRNYXAoXCJuYW1lXCIpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpLnNlbGVjdChcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmVsZW1lbnRfbWFwKCduYW1lJykuYXNfKCdhJykudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KCdhJykuc2VsZWN0KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfbWFya29YX2NvdW50X2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsXCJtYXJrb1wiKS5jb3VudCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuY291bnQoKS5hcyhcImFcIikudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuY291bnQoKS5hcyhcImFcIikudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmNvdW50KCkuYXMoc3RyaW5nMykudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KHN0cmluZzMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Db3VudCgpLkFzKFwiYVwiKS5VbmlvbjxvYmplY3Q+KF9fLklkZW50aXR5KCksIF9fLklkZW50aXR5KCkpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Db3VudCgpLkFzKFwiYVwiKS5VbmlvbihncmVtbGluZ28uVF9fLklkZW50aXR5KCksIGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuU2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuY291bnQoKS5hcyhcImFcIikudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmNvdW50KCkuYXMoXCJhXCIpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5jb3VudCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5jb3VudCgpLmFzXygnYScpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9wYXRoX2FzWGFYX3VuaW9uWGlkZW50aXR5X2lkZW50aXR5WF9zZWxlY3RYYVhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFwibWFya29cIikucGF0aCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucGF0aCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5wYXRoKCkuYXMoXCJhXCIpLnVuaW9uKF9fLmlkZW50aXR5KCksIF9fLmlkZW50aXR5KCkpLnNlbGVjdChcImFcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyKS5wYXRoKCkuYXMoc3RyaW5nMykudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KHN0cmluZzMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5QYXRoKCkuQXMoXCJhXCIpLlVuaW9uPG9iamVjdD4oX18uSWRlbnRpdHkoKSwgX18uSWRlbnRpdHkoKSkuU2VsZWN0PG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuUGF0aCgpLkFzKFwiYVwiKS5VbmlvbihncmVtbGluZ28uVF9fLklkZW50aXR5KCksIGdyZW1saW5nby5UX18uSWRlbnRpdHkoKSkuU2VsZWN0KFwiYVwiKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucGF0aCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucGF0aCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikucGF0aCgpLmFzKFwiYVwiKS51bmlvbihfXy5pZGVudGl0eSgpLCBfXy5pZGVudGl0eSgpKS5zZWxlY3QoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5wYXRoKCkuYXNfKCdhJykudW5pb24oX18uaWRlbnRpdHkoKSwgX18uaWRlbnRpdHkoKSkuc2VsZWN0KCdhJykudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRVgxMVhfcHJvcGVydGllc1h3ZWlnaHRYX2FzWGFYX3NlbGVjdFhhWF9ieVhrZXlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRShlaWQxMSkucHJvcGVydGllcyhcIndlaWdodFwiKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShULmtleSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoVC5rZXkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRShlaWQxMSkucHJvcGVydGllcyhcIndlaWdodFwiKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShULmtleSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRShlaWQxMSkucHJvcGVydGllcyhzdHJpbmcwKS5hcyhzdHJpbmcxKS5zZWxlY3Qoc3RyaW5nMSkuYnkoVC5rZXkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShlaWQxMSkuUHJvcGVydGllczxvYmplY3Q+KFwid2VpZ2h0XCIpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoVC5LZXkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKGVpZDExKS5Qcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLkFzKFwiYVwiKS5TZWxlY3QoXCJhXCIpLkJ5KGdyZW1saW5nby5ULktleSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFQua2V5KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFQua2V5KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFQua2V5KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoJ3dlaWdodCcpLmFzXygnYScpLnNlbGVjdCgnYScpLmJ5KFQua2V5KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FWDExWF9wcm9wZXJ0aWVzWHdlaWdodFhfYXNYYVhfc2VsZWN0WGFYX2J5WHZhbHVlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoVC52YWx1ZSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoVC52YWx1ZSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFQudmFsdWUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoc3RyaW5nMCkuYXMoc3RyaW5nMSkuc2VsZWN0KHN0cmluZzEpLmJ5KFQudmFsdWUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRShlaWQxMSkuUHJvcGVydGllczxvYmplY3Q+KFwid2VpZ2h0XCIpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQnkoVC5WYWx1ZSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoZWlkMTEpLlByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuQXMoXCJhXCIpLlNlbGVjdChcImFcIikuQnkoZ3JlbWxpbmdvLlQuVmFsdWUpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRShlaWQxMSkucHJvcGVydGllcyhcIndlaWdodFwiKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShULnZhbHVlKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKFwid2VpZ2h0XCIpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFQudmFsdWUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoZWlkMTEpLnByb3BlcnRpZXMoXCJ3ZWlnaHRcIikuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoVC52YWx1ZSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKGVpZDExKS5wcm9wZXJ0aWVzKCd3ZWlnaHQnKS5hc18oJ2EnKS5zZWxlY3QoJ2EnKS5ieShULnZhbHVlKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX3NlbGVjdFhhWF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLnNlbGVjdChzdHJpbmcwKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLlNlbGVjdChcImFcIikuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnKS5zZWxlY3QoJ2EnKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hc1hhX25YX3NlbGVjdFhhX25YX2J5WGFnZVhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYXMoXCJhXCIsXCJuXCIpLnNlbGVjdChcImFcIixcIm5cIikuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIsIFwiblwiKS5zZWxlY3QoXCJhXCIsIFwiblwiKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIsIFwiblwiKS5zZWxlY3QoXCJhXCIsIFwiblwiKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzAsIHN0cmluZzEpLnNlbGVjdChzdHJpbmcwLCBzdHJpbmcxKS5ieShzdHJpbmcyKS5ieShzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIiwgXCJuXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiLCBcIm5cIikuQnkoXCJhZ2VcIikuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIsIFwiblwiKS5TZWxlY3QoXCJhXCIsIFwiblwiKS5CeShcImFnZVwiKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYXMoXCJhXCIsIFwiblwiKS5zZWxlY3QoXCJhXCIsIFwiblwiKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFzKFwiYVwiLCBcIm5cIikuc2VsZWN0KFwiYVwiLCBcIm5cIikuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIiwgXCJuXCIpLnNlbGVjdChcImFcIiwgXCJuXCIpLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hc18oJ2EnLCAnbicpLnNlbGVjdCgnYScsICduJykuYnkoJ2FnZScpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYXNYYVhfc2VsZWN0WGFYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFzKHN0cmluZzApLnNlbGVjdChzdHJpbmcwKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BcyhcImFcIikuU2VsZWN0KFwiYVwiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFzXygnYScpLnNlbGVjdCgnYScpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhrX251bGxYX2luamVjdFh4WF9zZWxlY3RYa1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImtcIixudWxsKS5pbmplY3QoXCJ4XCIpLnNlbGVjdChcImtcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwia1wiLCBudWxsKS5pbmplY3QoXCJ4XCIpLnNlbGVjdChcImtcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImtcIiwgbnVsbCkuaW5qZWN0KFwieFwiKS5zZWxlY3QoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG9iamVjdDApLmluamVjdChzdHJpbmcxKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImtcIiwgbnVsbCkuSW5qZWN0PG9iamVjdD4oXCJ4XCIpLlNlbGVjdDxvYmplY3Q+KFwia1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJrXCIsIG5pbCkuSW5qZWN0KFwieFwiKS5TZWxlY3QoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJrXCIsIG51bGwpLmluamVjdChcInhcIikuc2VsZWN0KFwia1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImtcIiwgbnVsbCkuaW5qZWN0KFwieFwiKS5zZWxlY3QoXCJrXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwia1wiLCBudWxsKS5pbmplY3QoXCJ4XCIpLnNlbGVjdChcImtcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdrJywgTm9uZSkuaW5qZWN0KCd4Jykuc2VsZWN0KCdrJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfaW5fc2VsZWN0WGFsbF9hX2FfYVhfYnlYdW5mb2xkX25hbWVfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwiQVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhMVwiKS5hcyhcImExXCIpLmFkZFYoXCJCXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImIxXCIpLmFzKFwiYjFcIikuYWRkRShcImFiXCIpLmZyb20oXCJhMVwiKS50byhcImIxXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwiQVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhMVwiKS5hcyhcImExXCIpLmFkZFYoXCJCXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImIxXCIpLmFzKFwiYjFcIikuYWRkRShcImFiXCIpLmZyb20oXCJhMVwiKS50byhcImIxXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcIkFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYTFcIikuYXMoXCJhMVwiKS5hZGRWKFwiQlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJiMVwiKS5hcyhcImIxXCIpLmFkZEUoXCJhYlwiKS5mcm9tKFwiYTFcIikudG8oXCJiMVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkuYXMoc3RyaW5nNCkuYWRkRShzdHJpbmc1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcIkFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYTFcIikuQXMoXCJhMVwiKS5BZGRWKChzdHJpbmcpIFwiQlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJiMVwiKS5BcyhcImIxXCIpLkFkZEUoKHN0cmluZykgXCJhYlwiKS5Gcm9tKFwiYTFcIikuVG8oXCJiMVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcIkFcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYTFcIikuQXMoXCJhMVwiKS5BZGRWKFwiQlwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJiMVwiKS5BcyhcImIxXCIpLkFkZEUoXCJhYlwiKS5Gcm9tKFwiYTFcIikuVG8oXCJiMVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJBXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImExXCIpLmFzKFwiYTFcIikuYWRkVihcIkJcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYjFcIikuYXMoXCJiMVwiKS5hZGRFKFwiYWJcIikuZnJvbShcImExXCIpLnRvKFwiYjFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcIkFcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYTFcIikuYXMoXCJhMVwiKS5hZGRWKFwiQlwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJiMVwiKS5hcyhcImIxXCIpLmFkZEUoXCJhYlwiKS5mcm9tKFwiYTFcIikudG8oXCJiMVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwiQVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhMVwiKS5hcyhcImExXCIpLmFkZFYoXCJCXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImIxXCIpLmFzKFwiYjFcIikuYWRkRShcImFiXCIpLmZyb21fKFwiYTFcIikudG8oXCJiMVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdBJykucHJvcGVydHkoJ25hbWUnLCAnYTEnKS5hc18oJ2ExJykuYWRkX3YoJ0InKS5wcm9wZXJ0eSgnbmFtZScsICdiMScpLmFzXygnYjEnKS5hZGRfZSgnYWInKS5mcm9tXygnYTEnKS50bygnYjEnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuaW4oKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImFcIiwgXCJhXCIpLmJ5KHVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLmluKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJhXCIsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuaW4oKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiLCBcImFcIiwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLmluKCkuYXMoc3RyaW5nMCkuc2VsZWN0KFBvcC5hbGwsIHN0cmluZzAsIHN0cmluZzAsIHN0cmluZzApLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhzdHJpbmcxKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuSW4oKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJhXCIsIFwiYVwiLCBcImFcIikuQnkoX18uVW5mb2xkPG9iamVjdD4oKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuSW4oKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuQWxsLCBcImFcIiwgXCJhXCIsIFwiYVwiKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLmluKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJhXCIsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLmluKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJhXCIsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuaW5fKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIiwgXCJhXCIsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykuaW5fKCkuYXNfKCdhJykuc2VsZWN0KFBvcC5hbGxfLCAnYScsICdhJywgJ2EnKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhvdXRTdHJhdGVnaWVzWExhenlCYXJyaWVyU3RyYXRlZ3lYX1ZfYXNYbGFiZWxYX2xvY2FsWGFnZ3JlZ2F0ZV94WF9zZWxlY3RYeFhfc2VsZWN0WGxhYmVsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5hcyhcImxhYmVsXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcInhcIikpLnNlbGVjdChcInhcIikuc2VsZWN0KFwibGFiZWxcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5hcyhcImxhYmVsXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikpLnNlbGVjdChcInhcIikuc2VsZWN0KFwibGFiZWxcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkuYXMoXCJsYWJlbFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJ4XCIpKS5zZWxlY3QoXCJ4XCIpLnNlbGVjdChcImxhYmVsXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5hcyhzdHJpbmcwKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMSkpLnNlbGVjdChzdHJpbmcxKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRob3V0U3RyYXRlZ2llcyh0eXBlb2YoTGF6eUJhcnJpZXJTdHJhdGVneSkpLlYoKS5BcyhcImxhYmVsXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwieFwiKSkuU2VsZWN0PG9iamVjdD4oXCJ4XCIpLlNlbGVjdDxvYmplY3Q+KFwibGFiZWxcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhvdXRTdHJhdGVnaWVzKGdyZW1saW5nby5MYXp5QmFycmllclN0cmF0ZWd5KCkpLlYoKS5BcyhcImxhYmVsXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwieFwiKSkuU2VsZWN0KFwieFwiKS5TZWxlY3QoXCJsYWJlbFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5hcyhcImxhYmVsXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikpLnNlbGVjdChcInhcIikuc2VsZWN0KFwibGFiZWxcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aG91dFN0cmF0ZWdpZXMoTGF6eUJhcnJpZXJTdHJhdGVneS5jbGFzcykuVigpLmFzKFwibGFiZWxcIikubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKSkuc2VsZWN0KFwieFwiKS5zZWxlY3QoXCJsYWJlbFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRob3V0U3RyYXRlZ2llcyhMYXp5QmFycmllclN0cmF0ZWd5KS5WKCkuYXMoXCJsYWJlbFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJ4XCIpKS5zZWxlY3QoXCJ4XCIpLnNlbGVjdChcImxhYmVsXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aG91dF9zdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5hc18oJ2xhYmVsJykubG9jYWwoX18uYWdncmVnYXRlKCd4JykpLnNlbGVjdCgneCcpLnNlbGVjdCgnbGFiZWwnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX25hbWVfYXNYYVhfc2VsZWN0WGZpcnN0X2FYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hcyhzdHJpbmcxKS5zZWxlY3QoUG9wLmZpcnN0LCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFBvcC5GaXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuRmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmFzXygnYScpLnNlbGVjdChQb3AuZmlyc3QsICdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9uYW1lX2FzWGFYX3NlbGVjdFhsYXN0X2FYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hcyhzdHJpbmcxKS5zZWxlY3QoUG9wLmxhc3QsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oUG9wLkxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLkxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmFzXygnYScpLnNlbGVjdChQb3AubGFzdCwgJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX25hbWVfYXNYYVhfc2VsZWN0WG1peGVkX2FYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5hcyhzdHJpbmcxKS5zZWxlY3QoUG9wLm1peGVkLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFBvcC5NaXhlZCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmFzXygnYScpLnNlbGVjdChQb3AubWl4ZWQsICdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9uYW1lX2FzWGFYX3NlbGVjdFhhbGxfYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmFzKHN0cmluZzEpLnNlbGVjdChQb3AuYWxsLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFBvcC5BbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykuYXNfKCdhJykuc2VsZWN0KFBvcC5hbGxfLCAnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9uYW1lX2FzWGFYX2NvbmNhdFhYWF9hc1hhWF9sZW5ndGhfYXNYYVhfc2VsZWN0WGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmxlbmd0aCgpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5hcyhzdHJpbmcyKS5jb25jYXQoc3RyaW5nMykuYXMoc3RyaW5nMikubGVuZ3RoKCkuYXMoc3RyaW5nMikuc2VsZWN0KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImFcIikuQ29uY2F0KFwiWFwiKS5BcyhcImFcIikuTGVuZ3RoKCkuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJhXCIpLkNvbmNhdChcIlhcIikuQXMoXCJhXCIpLkxlbmd0aCgpLkFzKFwiYVwiKS5TZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmxlbmd0aCgpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5sZW5ndGgoKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS5hc18oJ2EnKS5jb25jYXQoJ1gnKS5hc18oJ2EnKS5sZW5ndGgoKS5hc18oJ2EnKS5zZWxlY3QoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfbGVuZ3RoX2FzWGFYX3NlbGVjdFhmaXJzdF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5sZW5ndGgoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5sZW5ndGgoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5maXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuYXMoc3RyaW5nMikuY29uY2F0KHN0cmluZzMpLmFzKHN0cmluZzIpLmxlbmd0aCgpLmFzKHN0cmluZzIpLnNlbGVjdChQb3AuZmlyc3QsIHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5BcyhcImFcIikuQ29uY2F0KFwiWFwiKS5BcyhcImFcIikuTGVuZ3RoKCkuQXMoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFBvcC5GaXJzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwibmFtZVwiKS5BcyhcImFcIikuQ29uY2F0KFwiWFwiKS5BcyhcImFcIikuTGVuZ3RoKCkuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLkZpcnN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuZmlyc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnbmFtZScpLmFzXygnYScpLmNvbmNhdCgnWCcpLmFzXygnYScpLmxlbmd0aCgpLmFzXygnYScpLnNlbGVjdChQb3AuZmlyc3QsICdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfYXNYYVhfY29uY2F0WFhYX2FzWGFYX2xlbmd0aF9hc1hhWF9zZWxlY3RYbGFzdF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5sZW5ndGgoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5sZW5ndGgoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuYXMoc3RyaW5nMikuY29uY2F0KHN0cmluZzMpLmFzKHN0cmluZzIpLmxlbmd0aCgpLmFzKHN0cmluZzIpLnNlbGVjdChQb3AubGFzdCwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJYXCIpLkFzKFwiYVwiKS5MZW5ndGgoKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oUG9wLkxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuQXMoXCJhXCIpLkNvbmNhdChcIlhcIikuQXMoXCJhXCIpLkxlbmd0aCgpLkFzKFwiYVwiKS5TZWxlY3QoZ3JlbWxpbmdvLlBvcC5MYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikubGVuZ3RoKCkuYXMoXCJhXCIpLnNlbGVjdChQb3AubGFzdCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5sZW5ndGgoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5sYXN0LCBcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmxlbmd0aCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmxhc3QsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLnZhbHVlcygnbmFtZScpLmFzXygnYScpLmNvbmNhdCgnWCcpLmFzXygnYScpLmxlbmd0aCgpLmFzXygnYScpLnNlbGVjdChQb3AubGFzdCwgJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfbmFtZV9hc1hhWF9jb25jYXRYWFhfYXNYYVhfY29uY2F0WFlaWF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikuY29uY2F0KFwiWVpcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmNvbmNhdChcIllaXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikuY29uY2F0KFwiWVpcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AubWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLmFzKHN0cmluZzIpLmNvbmNhdChzdHJpbmczKS5hcyhzdHJpbmcyKS5jb25jYXQoc3RyaW5nNCkuYXMoc3RyaW5nMikuc2VsZWN0KFBvcC5taXhlZCwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJYXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJZWlwiKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oUG9wLk1peGVkLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXMoXCJuYW1lXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJYXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJZWlwiKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTWl4ZWQsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJZWlwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJZWlwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJZWlwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCduYW1lJykuYXNfKCdhJykuY29uY2F0KCdYJykuYXNfKCdhJykuY29uY2F0KCdZWicpLmFzXygnYScpLnNlbGVjdChQb3AubWl4ZWQsICdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX25hbWVfYXNYYVhfY29uY2F0WFhYX2FzWGFYX2NvbmNhdFhZWlhfYXNYYVhfc2VsZWN0WGFsbF9hWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJZWlwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmNvbmNhdChcIllaXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmNvbmNhdChcIllaXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuYXMoc3RyaW5nMikuY29uY2F0KHN0cmluZzMpLmFzKHN0cmluZzIpLmNvbmNhdChzdHJpbmc0KS5hcyhzdHJpbmcyKS5zZWxlY3QoUG9wLmFsbCwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJYXCIpLkFzKFwiYVwiKS5Db25jYXQoXCJZWlwiKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oUG9wLkFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwibmFtZVwiKS5BcyhcImFcIikuQ29uY2F0KFwiWFwiKS5BcyhcImFcIikuQ29uY2F0KFwiWVpcIikuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuYXMoXCJhXCIpLmNvbmNhdChcIlhcIikuYXMoXCJhXCIpLmNvbmNhdChcIllaXCIpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJYXCIpLmFzKFwiYVwiKS5jb25jYXQoXCJZWlwiKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5hcyhcImFcIikuY29uY2F0KFwiWFwiKS5hcyhcImFcIikuY29uY2F0KFwiWVpcIikuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS5hc18oJ2EnKS5jb25jYXQoJ1gnKS5hc18oJ2EnKS5jb25jYXQoJ1laJykuYXNfKCdhJykuc2VsZWN0KFBvcC5hbGxfLCAnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYXNYYVhfb3V0X2FzWGFYX291dF9hc1hhWF9zZWxlY3RYbWl4ZWRfYVhfYnlYdW5mb2xkX3ZhbHVlc1huYW1lWF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5taXhlZCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcwKS5vdXQoKS5hcyhzdHJpbmcwKS5zZWxlY3QoUG9wLm1peGVkLCBzdHJpbmcwKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihQb3AuTWl4ZWQsIFwiYVwiKS5CeShfXy5VbmZvbGQ8b2JqZWN0PigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuU2VsZWN0KGdyZW1saW5nby5Qb3AuTWl4ZWQsIFwiYVwiKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpLlZhbHVlcyhcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLm1peGVkLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFzXygnYScpLm91dCgpLmFzXygnYScpLm91dCgpLmFzXygnYScpLnNlbGVjdChQb3AubWl4ZWQsICdhJykuYnkoX18udW5mb2xkKCkudmFsdWVzKCduYW1lJykuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FzWGFYX291dF9hc1hhWF9vdXRfYXNYYVhfc2VsZWN0WGFsbF9hWF9ieVh1bmZvbGRfdmFsdWVzWG5hbWVYX2ZvbGRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLm91dCgpLmFzKHN0cmluZzApLnNlbGVjdChQb3AuYWxsLCBzdHJpbmcwKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoc3RyaW5nMSkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLk91dCgpLkFzKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihQb3AuQWxsLCBcImFcIikuQnkoX18uVW5mb2xkPG9iamVjdD4oKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFzKFwiYVwiKS5PdXQoKS5BcyhcImFcIikuT3V0KCkuQXMoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uUG9wLkFsbCwgXCJhXCIpLkJ5KGdyZW1saW5nby5UX18uVW5mb2xkKCkuVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLnNlbGVjdChQb3AuYWxsLCBcImFcIikuYnkoX18udW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hcyhcImFcIikub3V0KCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5zZWxlY3QoUG9wLmFsbCwgXCJhXCIpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYXMoXCJhXCIpLm91dCgpLmFzKFwiYVwiKS5vdXQoKS5hcyhcImFcIikuc2VsZWN0KFBvcC5hbGwsIFwiYVwiKS5ieShfXy51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykub3V0KCkuYXNfKCdhJykuc2VsZWN0KFBvcC5hbGxfLCAnYScpLmJ5KF9fLnVuZm9sZCgpLnZhbHVlcygnbmFtZScpLmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNob3J0ZXN0UGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNob3J0ZXN0X3BhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JvdGhfZGVkdXBfc2hvcnRlc3RQYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnNob3J0ZXN0UGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmRlZHVwKCkuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLmRlZHVwKCkuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnNob3J0ZXN0UGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5EZWR1cCgpLlNob3J0ZXN0UGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLkRlZHVwKCkuU2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYm90aCgpLmRlZHVwKCkuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS5kZWR1cCgpLnNob3J0ZXN0UGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ib3RoKCkuZGVkdXAoKS5zaG9ydGVzdF9wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmluY2x1ZGVFZGdlc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNob3J0ZXN0X3BhdGgoKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGhfZGlyZWN0aW9uWElOWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgRGlyZWN0aW9uLklOKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBEaXJlY3Rpb24uSU4pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBEaXJlY3Rpb24uSU4pIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKHN0cmluZzAsIERpcmVjdGlvbi5JTikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIERpcmVjdGlvbi5JbikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgZ3JlbWxpbmdvLkRpcmVjdGlvbi5JbikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIERpcmVjdGlvbi5JTikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBEaXJlY3Rpb24uSU4pIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoXyhcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIERpcmVjdGlvbi5JTikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2hvcnRlc3RfcGF0aCgpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcycsIERpcmVjdGlvbi5JTikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGhfZWRnZXNYb3V0RVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChzdHJpbmcwLCBfXy5vdXRFKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBfXy5PdXRFKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIGdyZW1saW5nby5UX18uT3V0RSgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zaG9ydGVzdF9wYXRoKCkud2l0aF8oJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzJywgX18ub3V0X2UoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGhfZWRnZXNJbmNsdWRlZF9lZGdlc1hvdXRFWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBfXy5vdXRFKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmluY2x1ZGVFZGdlc1wiKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBfXy5vdXRFKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKHN0cmluZzApLndpdGgoc3RyaW5nMSwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBfXy5PdXRFKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmluY2x1ZGVFZGdlc1wiKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgZ3JlbWxpbmdvLlRfXy5PdXRFKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXNcIikud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5pbmNsdWRlRWRnZXNcIikud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguaW5jbHVkZUVkZ2VzXCIpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RSgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zaG9ydGVzdF9wYXRoKCkud2l0aF8oJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmluY2x1ZGVFZGdlcycpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcycsIF9fLm91dF9lKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfbWFya29YX3Nob3J0ZXN0UGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuU2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuU2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAnbWFya28nKS5zaG9ydGVzdF9wYXRoKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX21hcmtvWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKHN0cmluZzAsIF9fLmhhcyhzdHJpbmcxLCBzdHJpbmcyKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5IYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBncmVtbGluZ28uVF9fLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2hvcnRlc3RfcGF0aCgpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQnLCBfXy5oYXMoJ25hbWUnLCAnbWFya28nKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zaG9ydGVzdFBhdGhfdGFyZ2V0WHZhbHVlc1huYW1lWF9pc1htYXJrb1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLnZhbHVlcyhcIm5hbWVcIikuaXMoXCJtYXJrb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoc3RyaW5nMCwgX18udmFsdWVzKHN0cmluZzEpLmlzKHN0cmluZzIpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5JcyhcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLklzKFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18udmFsdWVzKFwibmFtZVwiKS5pcyhcIm1hcmtvXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zaG9ydGVzdFBhdGgoKS53aXRoXyhcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmlzKFwibWFya29cIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNob3J0ZXN0X3BhdGgoKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0JywgX18udmFsdWVzKCduYW1lJykuaXNfKCdtYXJrbycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc0xhYmVsWHNvZnR3YXJlWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhc0xhYmVsKFwic29mdHdhcmVcIikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhc0xhYmVsKFwic29mdHdhcmVcIikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuc2hvcnRlc3RQYXRoKCkud2l0aChzdHJpbmcyLCBfXy5oYXNMYWJlbChzdHJpbmczKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwibWFya29cIikuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBncmVtbGluZ28uVF9fLkhhc0xhYmVsKFwic29mdHdhcmVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhc0xhYmVsKFwic29mdHdhcmVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXNMYWJlbChcInNvZnR3YXJlXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhc0xhYmVsKFwic29mdHdhcmVcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdtYXJrbycpLnNob3J0ZXN0X3BhdGgoKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0JywgX18uaGFzX2xhYmVsKCdzb2Z0d2FyZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX21hcmtvWF9zaG9ydGVzdFBhdGhfdGFyZ2V0WGhhc1huYW1lX2pvc2hYWF9kaXN0YW5jZVh3ZWlnaHRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uaGFzKFwibmFtZVwiLFwiam9zaFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uaGFzKFwibmFtZVwiLCBcImpvc2hcIikpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuc2hvcnRlc3RQYXRoKCkud2l0aChzdHJpbmcyLCBfXy5oYXMoc3RyaW5nMCwgc3RyaW5nMykpLndpdGgoc3RyaW5nNCwgc3RyaW5nNSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uSGFzKFwibmFtZVwiLCBcImpvc2hcIikpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcImpvc2hcIikpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikuc2hvcnRlc3RQYXRoKCkud2l0aF8oXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uaGFzKFwibmFtZVwiLCBcImpvc2hcIikpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykuc2hvcnRlc3RfcGF0aCgpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXQnLCBfXy5oYXMoJ25hbWUnLCAnam9zaCcpKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UnLCAnd2VpZ2h0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9kYW5pZWxYX3Nob3J0ZXN0UGF0aF90YXJnZXRYaGFzWG5hbWVfc3RlcGhlblhYX2VkZ2VzWGJvdGhFWHVzZXNYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsXCJkYW5pZWxcIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsXCJzdGVwaGVuXCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18uYm90aEUoXCJ1c2VzXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJkYW5pZWxcIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwic3RlcGhlblwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLmJvdGhFKFwidXNlc1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImRhbmllbFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVuXCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18uYm90aEUoXCJ1c2VzXCIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnNob3J0ZXN0UGF0aCgpLndpdGgoc3RyaW5nMiwgX18uaGFzKHN0cmluZzAsIHN0cmluZzMpKS53aXRoKHN0cmluZzQsIF9fLmJvdGhFKHN0cmluZzUpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiZGFuaWVsXCIpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uSGFzKFwibmFtZVwiLCBcInN0ZXBoZW5cIikpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBfXy5Cb3RoRShcInVzZXNcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImRhbmllbFwiKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIGdyZW1saW5nby5UX18uSGFzKFwibmFtZVwiLCBcInN0ZXBoZW5cIikpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBncmVtbGluZ28uVF9fLkJvdGhFKFwidXNlc1wiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImRhbmllbFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVuXCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18uYm90aEUoXCJ1c2VzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImRhbmllbFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcIm5hbWVcIiwgXCJzdGVwaGVuXCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18uYm90aEUoXCJ1c2VzXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImRhbmllbFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoXyhcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJuYW1lXCIsIFwic3RlcGhlblwiKSkud2l0aF8oXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlc1wiLCBfXy5ib3RoRShcInVzZXNcIikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdkYW5pZWwnKS5zaG9ydGVzdF9wYXRoKCkud2l0aF8oJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldCcsIF9fLmhhcygnbmFtZScsICdzdGVwaGVuJykpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5lZGdlcycsIF9fLmJvdGhfZSgndXNlcycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hzb25nX25hbWVfTUlHSFRfQVNfV0VMTFhfc2hvcnRlc3RQYXRoX3RhcmdldFhoYXNYc29uZ19uYW1lX01BWUJFX1lPVV9LTk9XX0hPV19JX0ZFRUxYWF9lZGdlc1hvdXRFWGZvbGxvd2VkQnlYWF9kaXN0YW5jZVh3ZWlnaHRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInNvbmdcIixcIm5hbWVcIixcIk1JR0hUIEFTIFdFTExcIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJzb25nXCIsXCJuYW1lXCIsXCJNQVlCRSBZT1UgS05PVyBIT1cgSSBGRUVMXCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RShcImZvbGxvd2VkQnlcIikpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUlHSFQgQVMgV0VMTFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUFZQkUgWU9VIEtOT1cgSE9XIEkgRkVFTFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoXCJmb2xsb3dlZEJ5XCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJNSUdIVCBBUyBXRUxMXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uaGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJNQVlCRSBZT1UgS05PVyBIT1cgSSBGRUVMXCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RShcImZvbGxvd2VkQnlcIikpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLnNob3J0ZXN0UGF0aCgpLndpdGgoc3RyaW5nMywgX18uaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzQpKS53aXRoKHN0cmluZzUsIF9fLm91dEUoc3RyaW5nNikpLndpdGgoc3RyaW5nNywgc3RyaW5nOCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJNSUdIVCBBUyBXRUxMXCIpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC50YXJnZXRcIiwgX18uSGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJNQVlCRSBZT1UgS05PVyBIT1cgSSBGRUVMXCIpKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18uT3V0RShcImZvbGxvd2VkQnlcIikpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUlHSFQgQVMgV0VMTFwiKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIGdyZW1saW5nby5UX18uSGFzKFwic29uZ1wiLCBcIm5hbWVcIiwgXCJNQVlCRSBZT1UgS05PVyBIT1cgSSBGRUVMXCIpKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgZ3JlbWxpbmdvLlRfXy5PdXRFKFwiZm9sbG93ZWRCeVwiKSkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUlHSFQgQVMgV0VMTFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUFZQkUgWU9VIEtOT1cgSE9XIEkgRkVFTFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoXCJmb2xsb3dlZEJ5XCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUlHSFQgQVMgV0VMTFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0XCIsIF9fLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUFZQkUgWU9VIEtOT1cgSE9XIEkgRkVFTFwiKSkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmVkZ2VzXCIsIF9fLm91dEUoXCJmb2xsb3dlZEJ5XCIpKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInNvbmdcIiwgXCJuYW1lXCIsIFwiTUlHSFQgQVMgV0VMTFwiKS5zaG9ydGVzdFBhdGgoKS53aXRoXyhcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLnRhcmdldFwiLCBfXy5oYXMoXCJzb25nXCIsIFwibmFtZVwiLCBcIk1BWUJFIFlPVSBLTk9XIEhPVyBJIEZFRUxcIikpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXNcIiwgX18ub3V0RShcImZvbGxvd2VkQnlcIikpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdzb25nJywgJ25hbWUnLCAnTUlHSFQgQVMgV0VMTCcpLnNob3J0ZXN0X3BhdGgoKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgudGFyZ2V0JywgX18uaGFzKCdzb25nJywgJ25hbWUnLCAnTUFZQkUgWU9VIEtOT1cgSE9XIEkgRkVFTCcpKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZWRnZXMnLCBfXy5vdXRfZSgnZm9sbG93ZWRCeScpKS53aXRoXygnfnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2UnLCAnd2VpZ2h0JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9tYXJrb1hfc2hvcnRlc3RQYXRoX21heERpc3RhbmNlWDFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIixcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgubWF4RGlzdGFuY2VcIiwgMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEpLnNob3J0ZXN0UGF0aCgpLndpdGgoc3RyaW5nMiwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLlNob3J0ZXN0UGF0aCgpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJtYXJrb1wiKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgubWF4RGlzdGFuY2VcIiwgMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLnNob3J0ZXN0UGF0aCgpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgubWF4RGlzdGFuY2VcIiwgMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ21hcmtvJykuc2hvcnRlc3RfcGF0aCgpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZScsIDEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfdmFkYXNYX3Nob3J0ZXN0UGF0aF9kaXN0YW5jZVh3ZWlnaHRYX21heERpc3RhbmNlWDFfM1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibmFtZVwiLFwidmFkYXNcIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxLjMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcInZhZGFzXCIpLnNob3J0ZXN0UGF0aCgpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5kaXN0YW5jZVwiLCBcIndlaWdodFwiKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgubWF4RGlzdGFuY2VcIiwgMS4zKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuc2hvcnRlc3RQYXRoKCkud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpLndpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxLjMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkuc2hvcnRlc3RQYXRoKCkud2l0aChzdHJpbmcyLCBzdHJpbmczKS53aXRoKHN0cmluZzQsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5TaG9ydGVzdFBhdGgoKS5XaXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLm1heERpc3RhbmNlXCIsIDEuMykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwidmFkYXNcIikuU2hvcnRlc3RQYXRoKCkuV2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpLldpdGgoXCJ+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZVwiLCAxLjMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLm1heERpc3RhbmNlXCIsIDEuMykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGguZGlzdGFuY2VcIiwgXCJ3ZWlnaHRcIikud2l0aChcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLm1heERpc3RhbmNlXCIsIDEuMykiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJ2YWRhc1wiKS5zaG9ydGVzdFBhdGgoKS53aXRoXyhcIn50aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlXCIsIFwid2VpZ2h0XCIpLndpdGhfKFwifnRpbmtlcnBvcC5zaG9ydGVzdFBhdGgubWF4RGlzdGFuY2VcIiwgMS4zKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25hbWUnLCAndmFkYXMnKS5zaG9ydGVzdF9wYXRoKCkud2l0aF8oJ350aW5rZXJwb3Auc2hvcnRlc3RQYXRoLmRpc3RhbmNlJywgJ3dlaWdodCcpLndpdGhfKCd+dGlua2VycG9wLnNob3J0ZXN0UGF0aC5tYXhEaXN0YW5jZScsIDEuMykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WHRoYXRfdGhpc190ZXN0WF9zcGlsdFhoWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5zcGxpdChcImhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5zcGxpdChcImhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbnVsbCkuc3BsaXQoXCJoXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyLCBvYmplY3QwKS5zcGxpdChzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLlNwbGl0KFwiaFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG5pbCkuU3BsaXQoXCJoXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLnNwbGl0KFwiaFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbnVsbCkuc3BsaXQoXCJoXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5zcGxpdChcImhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ3RoYXQnLCAndGhpcycsICd0ZXN0JywgTm9uZSkuc3BsaXQoJ2gnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYaGVsbG9fd29ybGRYX3NwaWx0WG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiaGVsbG8gd29ybGRcIikuc3BsaXQobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcImhlbGxvIHdvcmxkXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwiaGVsbG8gd29ybGRcIikuc3BsaXQobnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLnNwbGl0KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJoZWxsbyB3b3JsZFwiKS5TcGxpdChudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiaGVsbG8gd29ybGRcIikuU3BsaXQobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImhlbGxvIHdvcmxkXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcImhlbGxvIHdvcmxkXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcImhlbGxvIHdvcmxkXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdoZWxsbyB3b3JsZCcpLnNwbGl0KE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFh0aGF0X3RoaXNfdGVzdF9udWxsWF9zcGxpdFhlbXB0eVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbnVsbCkuc3BsaXQoXCJcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5zcGxpdChcIlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5zcGxpdChcIlwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMiwgb2JqZWN0MCkuc3BsaXQoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5TcGxpdChcIlwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG5pbCkuU3BsaXQoXCJcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCJ0aGF0XCIsIFwidGhpc1wiLCBcInRlc3RcIiwgbnVsbCkuc3BsaXQoXCJcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwidGhhdFwiLCBcInRoaXNcIiwgXCJ0ZXN0XCIsIG51bGwpLnNwbGl0KFwiXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcInRoYXRcIiwgXCJ0aGlzXCIsIFwidGVzdFwiLCBudWxsKS5zcGxpdChcIlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgndGhhdCcsICd0aGlzJywgJ3Rlc3QnLCBOb25lKS5zcGxpdCgnJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WExpc3RYYV9iWGNYX3NwbGl0WGFfYlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYVwiLFwiYlwiXSkuc3BsaXQoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnNwbGl0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSkuc3BsaXQoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuc3BsaXQoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiYlwiIH0pLlNwbGl0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIFwiYlwifSkuU3BsaXQoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS5zcGxpdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImJcIik7IH19KS5zcGxpdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS5zcGxpdChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhJywgJ2InXSkuc3BsaXQoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfc3BsaXRYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5zcGxpdChudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuc3BsaXQobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5zcGxpdChudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLnNwbGl0KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5TcGxpdChudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuU3BsaXQobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLnNwbGl0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCduYW1lJykuc3BsaXQoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlWG5hbWVYX29yZGVyX2ZvbGRfc3BsaXRYbG9jYWxfYVhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIFwiYVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIFwiYVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnNwbGl0KFNjb3BlLmxvY2FsLCBcImFcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5vcmRlcigpLmZvbGQoKS5zcGxpdChTY29wZS5sb2NhbCwgc3RyaW5nMikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLlNwbGl0PG9iamVjdD4oU2NvcGUuTG9jYWwsIFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5TcGxpdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIFwiYVwiKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnNwbGl0KFNjb3BlLmxvY2FsLCBcImFcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIFwiYVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5zcGxpdChTY29wZS5sb2NhbCwgXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCduYW1lJykub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsICdhJykudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX3ZhbHVlWG5hbWVYX29yZGVyX2ZvbGRfc3BsaXRYbG9jYWxfZW1wdHlYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnNwbGl0KFNjb3BlLmxvY2FsLCBcIlwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIFwiXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIFwiXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIHN0cmluZzIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5TcGxpdDxvYmplY3Q+KFNjb3BlLkxvY2FsLCBcIlwiKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5TcGxpdChncmVtbGluZ28uU2NvcGUuTG9jYWwsIFwiXCIpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3BsaXQoU2NvcGUubG9jYWwsIFwiXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnNwbGl0KFNjb3BlLmxvY2FsLCBcIlwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5zcGxpdChTY29wZS5sb2NhbCwgXCJcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS52YWx1ZXMoJ25hbWUnKS5vcmRlcigpLmZvbGQoKS5zcGxpdChTY29wZS5sb2NhbCwgJycpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFh0aGF0X3RoaXNfdGVzdFhfc3Vic3RyaW5nWDFfOFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJ0ZXN0XCIsIFwiaGVsbG8gd29ybGRcIiwgbnVsbCkuc3Vic3RyaW5nKDEsIDgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJ0ZXN0XCIsIFwiaGVsbG8gd29ybGRcIiwgbnVsbCkuc3Vic3RyaW5nKDEsIDgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFwidGVzdFwiLCBcImhlbGxvIHdvcmxkXCIsIG51bGwpLnN1YnN0cmluZygxLCA4KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCwgc3RyaW5nMSwgb2JqZWN0MCkuc3Vic3RyaW5nKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJ0ZXN0XCIsIFwiaGVsbG8gd29ybGRcIiwgbnVsbCkuU3Vic3RyaW5nKDEsIDgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJ0ZXN0XCIsIFwiaGVsbG8gd29ybGRcIiwgbmlsKS5TdWJzdHJpbmcoMSwgOCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoXCJ0ZXN0XCIsIFwiaGVsbG8gd29ybGRcIiwgbnVsbCkuc3Vic3RyaW5nKDEsIDgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcInRlc3RcIiwgXCJoZWxsbyB3b3JsZFwiLCBudWxsKS5zdWJzdHJpbmcoMSwgOCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwidGVzdFwiLCBcImhlbGxvIHdvcmxkXCIsIG51bGwpLnN1YnN0cmluZygxLCA4KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgndGVzdCcsICdoZWxsbyB3b3JsZCcsIE5vbmUpLnN1YnN0cmluZygxLCA4KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYTGlzdFhhX2JYY1hfc3Vic3RyaW5nWDFfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiYWFcIixcImJiXCJdKS5zdWJzdHJpbmcoMSwgMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhYVwiLCBcImJiXCJdKS5zdWJzdHJpbmcoMSwgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYWFcIiwgXCJiYlwiXSkuc3Vic3RyaW5nKDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkuc3Vic3RyaW5nKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiYWFcIiwgXCJiYlwiIH0pLlN1YnN0cmluZygxLCAyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhYVwiLCBcImJiXCJ9KS5TdWJzdHJpbmcoMSwgMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYWFcIiwgXCJiYlwiXSkuc3Vic3RyaW5nKDEsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhYVwiKTsgYWRkKFwiYmJcIik7IH19KS5zdWJzdHJpbmcoMSwgMikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFhXCIsIFwiYmJcIl0pLnN1YnN0cmluZygxLCAyKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2FhJywgJ2JiJ10pLnN1YnN0cmluZygxLCAyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5zdWJzdHJpbmcobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuU3Vic3RyaW5nKDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXMoXCJuYW1lXCIpLlN1YnN0cmluZygyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS52YWx1ZXMoJ25hbWUnKS5zdWJzdHJpbmcoMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWDFfNFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCA0KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgNCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCA0KSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLnN1YnN0cmluZyhudW1iZXIwLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5TdWJzdHJpbmcoMSwgNCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlcyhcIm5hbWVcIikuU3Vic3RyaW5nKDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgNCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgNCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgNCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLnZhbHVlcygnbmFtZScpLnN1YnN0cmluZygxLCA0KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9zdWJzdHJpbmdYbG9jYWxfMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLm9yZGVyKCkuZm9sZCgpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgbnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkuU3Vic3RyaW5nPG9iamVjdD4oU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXMoXCJuYW1lXCIpLk9yZGVyKCkuRm9sZCgpLlN1YnN0cmluZyhncmVtbGluZ28uU2NvcGUuTG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5zdWJzdHJpbmcoU2NvcGUubG9jYWwsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLnZhbHVlcygnbmFtZScpLm9yZGVyKCkuZm9sZCgpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfb3JkZXJfZm9sZF9zdWJzdHJpbmdYbG9jYWxfMV80WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAxLCA0KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5zdWJzdHJpbmcoU2NvcGUubG9jYWwsIDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5zdWJzdHJpbmcoU2NvcGUubG9jYWwsIDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCBudW1iZXIwLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5TdWJzdHJpbmc8b2JqZWN0PihTY29wZS5Mb2NhbCwgMSwgNCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlcyhcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkuU3Vic3RyaW5nKGdyZW1saW5nby5TY29wZS5Mb2NhbCwgMSwgNCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnN1YnN0cmluZyhTY29wZS5sb2NhbCwgMSwgNCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS5zdWJzdHJpbmcoU2NvcGUubG9jYWwsIDEsIDQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAxLCA0KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykudmFsdWVzKCduYW1lJykub3JkZXIoKS5mb2xkKCkuc3Vic3RyaW5nKFNjb3BlLmxvY2FsLCAxLCA0KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYMV8wWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDEsIDApIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCAwKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDEsIDApIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuc3Vic3RyaW5nKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlN1YnN0cmluZygxLCAwKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzKFwibmFtZVwiKS5TdWJzdHJpbmcoMSwgMCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCAwKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCAwKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCAwKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvZnR3YXJlJykudmFsdWVzKCduYW1lJykuc3Vic3RyaW5nKDEsIDApIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYbmVnM1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKC0zKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLnN1YnN0cmluZyhudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuU3Vic3RyaW5nKC0zKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLlZhbHVlcyhcIm5hbWVcIikuU3Vic3RyaW5nKC0zKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtMykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKC0zKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykudmFsdWVzKCduYW1lJykuc3Vic3RyaW5nKC0zKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF92YWx1ZVhuYW1lWF9zdWJzdHJpbmdYMV9uZWcxWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDEsIC0xKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgLTEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgLTEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS52YWx1ZXMoc3RyaW5nMSkuc3Vic3RyaW5nKG51bWJlcjAsIG51bWJlcjEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlN1YnN0cmluZygxLCAtMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlcyhcIm5hbWVcIikuU3Vic3RyaW5nKDEsIC0xKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDEsIC0xKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygxLCAtMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMSwgLTEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS52YWx1ZXMoJ25hbWUnKS5zdWJzdHJpbmcoMSwgLTEpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX3ZhbHVlWG5hbWVYX3N1YnN0cmluZ1huZWc0XzJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTQsIDIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtNCwgMikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtNCwgMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5zdWJzdHJpbmcobnVtYmVyMCwgbnVtYmVyMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuU3Vic3RyaW5nKC00LCAyKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzKFwibmFtZVwiKS5TdWJzdHJpbmcoLTQsIDIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTQsIDIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKC00LCAyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtNCwgMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLnZhbHVlcygnbmFtZScpLnN1YnN0cmluZygtNCwgMikiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb2Z0d2FyZVhfdmFsdWVYbmFtZVhfc3Vic3RyaW5nWG5lZzNfbmVnMVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtMywgLTEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtMywgLTEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTMsIC0xKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLnN1YnN0cmluZyhudW1iZXIwLCBudW1iZXIxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5TdWJzdHJpbmcoLTMsIC0xKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuVmFsdWVzKFwibmFtZVwiKS5TdWJzdHJpbmcoLTMsIC0xKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKC0zLCAtMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoLTMsIC0xKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygtMywgLTEpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29mdHdhcmUnKS52YWx1ZXMoJ25hbWUnKS5zdWJzdHJpbmcoLTMsIC0xKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2luamVjdFgxMjdiXzFiWF9zdW1YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxMjdiLCAxYikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxMjdiLCAxYikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMTI3YiwgMWIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChieXRlMCwgYnl0ZTEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oKHNieXRlKSAxMjcsIChzYnl0ZSkgMSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDgoMTI3KSwgaW50OCgxKSkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoKGJ5dGUpMTI3LCAoYnl0ZSkxKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEJ5dGUoMTI3KSwgbmV3IEJ5dGUoMSkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxMjcsIDEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEyNywgMSkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaW5qZWN0WF8xMjhiX18xYlhfc3VtWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoLTEyOGIsIC0xYikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgtMTI4YiwgLTFiKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgtMTI4YiwgLTFiKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoYnl0ZTAsIGJ5dGUxKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KChzYnl0ZSkgLTEyOCwgKHNieXRlKSAtMSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDgoLTEyOCksIGludDgoLTEpKS5TdW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgoYnl0ZSktMTI4LCAoYnl0ZSktMSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBCeXRlKC0xMjgpLCBuZXcgQnl0ZSgtMSkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgtMTI4LCAtMSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoLTEyOCwgLTEpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2luamVjdFgzMjc2N3NfMXNYX3N1bVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDMyNzY3cywgMXMpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMzI3NjdzLCAxcykuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMzI3NjdzLCAxcykuc3VtKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHNob3J0MCwgc2hvcnQxKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KChzaG9ydCkgMzI3NjcsIChzaG9ydCkgMSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDE2KDMyNzY3KSwgaW50MTYoMSkpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KChzaG9ydCkzMjc2NywgKHNob3J0KTEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgU2hvcnQoMzI3NjcpLCBuZXcgU2hvcnQoMSkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgzMjc2NywgMSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMzI3NjcsIDEpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2luamVjdFhfMzI3NjhzX18xc1hfc3VtWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoLTMyNzY4cywgLTFzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KC0zMjc2OHMsIC0xcykuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoLTMyNzY4cywgLTFzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc2hvcnQwLCBzaG9ydDEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oKHNob3J0KSAtMzI3NjgsIChzaG9ydCkgLTEpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChpbnQxNigtMzI3NjgpLCBpbnQxNigtMSkpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KChzaG9ydCktMzI3NjgsIChzaG9ydCktMSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBTaG9ydCgtMzI3NjgpLCBuZXcgU2hvcnQoLTEpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoLTMyNzY4LCAtMSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoLTMyNzY4LCAtMSkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaW5qZWN0WDIxNDc0ODM2NDdpXzFpWF9zdW1YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgyMTQ3NDgzNjQ3aSwgMWkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMjE0NzQ4MzY0N2ksIDFpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgyMTQ3NDgzNjQ3aSwgMWkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChpbnRlZ2VyMCwgaW50ZWdlcjEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMjE0NzQ4MzY0NywgMSkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDMyKDIxNDc0ODM2NDcpLCBpbnQzMigxKSkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMjE0NzQ4MzY0N2ksIDFpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMjE0NzQ4MzY0NywgMSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDIxNDc0ODM2NDcsIDEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDIxNDc0ODM2NDcsIDEpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2luamVjdFhfMjE0NzQ4MzY0OGlfXzFpWF9zdW1YWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgtMjE0NzQ4MzY0OGksIC0xaSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgtMjE0NzQ4MzY0OGksIC0xaSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoLTIxNDc0ODM2NDhpLCAtMWkpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChpbnRlZ2VyMCwgaW50ZWdlcjEpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oLTIxNDc0ODM2NDgsIC0xKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50MzIoLTIxNDc0ODM2NDgpLCBpbnQzMigtMSkpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KC0yMTQ3NDgzNjQ4aSwgLTFpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoLTIxNDc0ODM2NDgsIC0xKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoLTIxNDc0ODM2NDgsIC0xKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgtMjE0NzQ4MzY0OCwgLTEpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZV9zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Zvb19zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiZm9vXCIpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJmb29cIikuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2ZvbycpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZV9mb2xkX3N1bVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkZvbGQoKS5TdW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuRm9sZCgpLlN1bShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5mb2xkKCkuc3VtXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9mb29fZm9sZF9zdW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImZvb1wiKS5Gb2xkKCkuU3VtPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiZm9vXCIpLkZvbGQoKS5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJmb29cIikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImZvb1wiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiZm9vXCIpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnZm9vJykuZm9sZCgpLnN1bV8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYc29mdHdhcmVYX2dyb3VwX2J5WG5hbWVYX2J5WGJvdGhFX3dlaWdodF9zdW1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKCkuYnkoc3RyaW5nMSkuYnkoX18uYm90aEUoKS52YWx1ZXMoc3RyaW5nMikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoXCJuYW1lXCIpLkJ5KF9fLkJvdGhFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuU3VtPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvZnR3YXJlXCIpLkdyb3VwKCkuQnkoXCJuYW1lXCIpLkJ5KGdyZW1saW5nby5UX18uQm90aEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuU3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uYm90aEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLmJvdGhFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5ib3RoRSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmdyb3VwKCkuYnkoJ25hbWUnKS5ieShfXy5ib3RoX2UoKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9zdW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5TdW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikuU3VtKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykuc3VtXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfc3VtWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5TdW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpLlN1bShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpLnN1bV8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYX3VuZm9sZF9zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikuVW5mb2xkKCkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykudW5mb2xkKCkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWF91bmZvbGRfc3VtIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTdHJhdGVnaWVzKGdyZW1saW5nby5Qcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpLnVuZm9sZCgpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVhhWF9ieVhmb29YX3N1bVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlN1bTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdmb28nKS5jYXAoJ2EnKS5zdW1fKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU3RyYXRlZ2llc1hQcm9kdWN0aXZlQnlTdHJhdGVneVhfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9zdW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlN1bTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcChcImFcIikuU3VtKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykuc3VtXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfYnlYZm9vWF9jYXBYYVhfdW5mb2xkX3N1bSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5TdW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdmb28nKS5jYXAoJ2EnKS51bmZvbGQoKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWGFYX2J5WGZvb1hfY2FwWGFYX3VuZm9sZF9zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiZm9vXCIpLmNhcChcImFcIikudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJmb29cIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiZm9vXCIpLkNhcChcImFcIikuVW5mb2xkKCkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJmb29cIikuY2FwKFwiYVwiKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImZvb1wiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnZm9vJykuY2FwKCdhJykudW5mb2xkKCkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsXzEwXzVfbnVsbFhfc3VtIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwsIDEwLCA1LCBudWxsKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwsIDEwLCA1LCBudWxsKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsLCAxMCwgNSwgbnVsbCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDAsIG51bWJlcjAsIG51bWJlcjEsIG9iamVjdDApLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCwgMTAsIDUsIG51bGwpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwsIDEwLCA1LCBuaWwpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwsIDEwLCA1LCBudWxsKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCwgMTAsIDUsIG51bGwpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsLCAxMCwgNSwgbnVsbCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSwgMTAsIDUsIE5vbmUpLnN1bV8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbGlzdFhudWxsXzEwXzVfbnVsbFhYX3N1bVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW251bGwsMTAsNSxudWxsXSkuc3VtKGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtudWxsLCAxMCwgNSwgbnVsbF0pLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW251bGwsIDEwLCA1LCBudWxsXSkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgbnVsbCwgMTAsIDUsIG51bGwgfSkuU3VtPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtuaWwsIDEwLCA1LCBuaWx9KS5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbbnVsbCwgMTAsIDUsIG51bGxdKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobnVsbCk7IGFkZCgxMCk7IGFkZCg1KTsgYWRkKG51bGwpOyB9fSkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW251bGwsIDEwLCA1LCBudWxsXSkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbTm9uZSwgMTAsIDUsIE5vbmVdKS5zdW1fKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlc1hhZ2VYX3N1bVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnZhbHVlcyhzdHJpbmcwKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5TdW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuVmFsdWVzKFwiYWdlXCIpLlN1bShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS52YWx1ZXMoXCJhZ2VcIikuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnZhbHVlcyhcImFnZVwiKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkudmFsdWVzKFwiYWdlXCIpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnZhbHVlcygnYWdlJykuc3VtXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFh1bmlvblh2YWx1ZXNYYWdlWF9vdXRFX3ZhbHVlc1h3ZWlnaHRYWF9mb2xkWF9zdW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKHVuaW9uKHZhbHVlcyhcImFnZVwiKSwgb3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5zdW0obG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhzdHJpbmcwKSwgX18ub3V0RSgpLnZhbHVlcyhzdHJpbmcxKSkuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uVW5pb248b2JqZWN0PihfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKSwgX18uT3V0RSgpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpKS5Gb2xkKCkpLlN1bTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uVW5pb24oZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIiksIGdyZW1saW5nby5UX18uT3V0RSgpLlZhbHVlcyhcIndlaWdodFwiKSkuRm9sZCgpKS5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy51bmlvbihfXy52YWx1ZXMoXCJhZ2VcIiksIF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikpLmZvbGQoKSkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18udW5pb24oX18udmFsdWVzKFwiYWdlXCIpLCBfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpKS5mb2xkKCkpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcyhcImFnZVwiKSwgX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKSkuZm9sZCgpKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLnVuaW9uKF9fLnZhbHVlcygnYWdlJyksIF9fLm91dF9lKCkudmFsdWVzKCd3ZWlnaHQnKSkuZm9sZCgpKS5zdW1fKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZV9pbmplY3RYMTAwMG5YX3N1bSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KDEwMDBuKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoMTAwMG4pLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoMTAwMG4pLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuaW5qZWN0KGJpZ2ludGVnZXIwKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JbmplY3QoQmlnSW50ZWdlci5QYXJzZShcIjEwMDBcIikpLlN1bTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJhZ2VcIikuSW5qZWN0KGdyZW1saW5nby5QYXJzZUJpZ0ludChcIjEwMDBcIikpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoMTAwMGcpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG5ldyBCaWdJbnRlZ2VyKFwiMTAwMFwiKSkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoMTAwMCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCdhZ2UnKS5pbmplY3QoYmlnaW50KDEwMDApKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFiXzJiXzNiWF9zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWIsMmIsM2IpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWIsIDJiLCAzYikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWIsIDJiLCAzYikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGJ5dGUwLCBieXRlMSwgYnl0ZTIpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oKHNieXRlKSAxLCAoc2J5dGUpIDIsIChzYnl0ZSkgMykuU3VtPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDgoMSksIGludDgoMiksIGludDgoMykpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KChieXRlKTEsIChieXRlKTIsIChieXRlKTMpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQnl0ZSgxKSwgbmV3IEJ5dGUoMiksIG5ldyBCeXRlKDMpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSwgMiwgMykuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSwgMiwgMykuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxYl8yYl8zc1hfc3VtIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFiLDJiLDNzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFiLCAyYiwgM3MpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFiLCAyYiwgM3MpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChieXRlMCwgYnl0ZTEsIHNob3J0MCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDEsIChzYnl0ZSkgMiwgKHNob3J0KSAzKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50OCgxKSwgaW50OCgyKSwgaW50MTYoMykpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KChieXRlKTEsIChieXRlKTIsIChzaG9ydCkzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEJ5dGUoMSksIG5ldyBCeXRlKDIpLCBuZXcgU2hvcnQoMykpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLCAyLCAzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLCAyLCAzKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFiXzI2Yl8zaVhfc3VtIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFiLDJiLDNpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFiLCAyYiwgM2kpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFiLCAyYiwgM2kpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChieXRlMCwgYnl0ZTEsIGludGVnZXIwKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KChzYnl0ZSkgMSwgKHNieXRlKSAyLCAzKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50OCgxKSwgaW50OCgyKSwgaW50MzIoMykpLlN1bSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KChieXRlKTEsIChieXRlKTIsIDNpKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEJ5dGUoMSksIG5ldyBCeXRlKDIpLCAzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSwgMiwgMykuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSwgMiwgMykuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxZl8yNmZfM2ZYX3N1bSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZiwyZiwzZikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZiwgMmYsIDNmKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZiwgMmYsIDNmKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZmxvYXQwLCBmbG9hdDEsIGZsb2F0Mikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZiwgMmYsIDNmKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoZmxvYXQzMigxKSwgZmxvYXQzMigyKSwgZmxvYXQzMigzKSkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWYsIDJmLCAzZikuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFmLCAyZiwgM2YpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLCAyLCAzKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLCAyLCAzKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2VfaW5qZWN0WDEwMDBuWF9mb2xkX3N1bVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmluamVjdCgxMDAwbikuZm9sZCgpLnN1bShsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KDEwMDBuKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KDEwMDBuKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLmluamVjdChiaWdpbnRlZ2VyMCkuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSW5qZWN0KEJpZ0ludGVnZXIuUGFyc2UoXCIxMDAwXCIpKS5Gb2xkKCkuU3VtPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwiYWdlXCIpLkluamVjdChncmVtbGluZ28uUGFyc2VCaWdJbnQoXCIxMDAwXCIpKS5Gb2xkKCkuU3VtKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmluamVjdCgxMDAwZykuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QobmV3IEJpZ0ludGVnZXIoXCIxMDAwXCIpKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwiYWdlXCIpLmluamVjdCgxMDAwKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ2FnZScpLmluamVjdChiaWdpbnQoMTAwMCkpLmZvbGQoKS5zdW1fKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMWJfMmJfM2JYX2ZvbGRfc3VtWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxYiwyYiwzYikuZm9sZCgpLnN1bShsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxYiwgMmIsIDNiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxYiwgMmIsIDNiKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoYnl0ZTAsIGJ5dGUxLCBieXRlMikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDEsIChzYnl0ZSkgMiwgKHNieXRlKSAzKS5Gb2xkKCkuU3VtPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50OCgxKSwgaW50OCgyKSwgaW50OCgzKSkuRm9sZCgpLlN1bShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KChieXRlKTEsIChieXRlKTIsIChieXRlKTMpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQnl0ZSgxKSwgbmV3IEJ5dGUoMiksIG5ldyBCeXRlKDMpKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSwgMiwgMykuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSwgMiwgMykuZm9sZCgpLnN1bV8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxYl8yYl8zc1hfZm9sZF9zdW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFiLDJiLDNzKS5mb2xkKCkuc3VtKGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFiLCAyYiwgM3MpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFiLCAyYiwgM3MpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChieXRlMCwgYnl0ZTEsIHNob3J0MCkuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDEsIChzYnl0ZSkgMiwgKHNob3J0KSAzKS5Gb2xkKCkuU3VtPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoaW50OCgxKSwgaW50OCgyKSwgaW50MTYoMykpLkZvbGQoKS5TdW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgoYnl0ZSkxLCAoYnl0ZSkyLCAoc2hvcnQpMykuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBCeXRlKDEpLCBuZXcgQnl0ZSgyKSwgbmV3IFNob3J0KDMpKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSwgMiwgMykuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSwgMiwgMykuZm9sZCgpLnN1bV8oU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxYl8yNmJfM2lYX2ZvbGRfc3VtWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxYiwyYiwzaSkuZm9sZCgpLnN1bShsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxYiwgMmIsIDNpKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxYiwgMmIsIDNpKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoYnl0ZTAsIGJ5dGUxLCBpbnRlZ2VyMCkuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDEsIChzYnl0ZSkgMiwgMykuRm9sZCgpLlN1bTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KGludDgoMSksIGludDgoMiksIGludDMyKDMpKS5Gb2xkKCkuU3VtKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoKGJ5dGUpMSwgKGJ5dGUpMiwgM2kpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQnl0ZSgxKSwgbmV3IEJ5dGUoMiksIDMpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFmXzI2Zl8zZlhfZm9sZF9zdW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFmLDJmLDNmKS5mb2xkKCkuc3VtKGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFmLCAyZiwgM2YpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFmLCAyZiwgM2YpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChmbG9hdDAsIGZsb2F0MSwgZmxvYXQyKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFmLCAyZiwgM2YpLkZvbGQoKS5TdW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChmbG9hdDMyKDEpLCBmbG9hdDMyKDIpLCBmbG9hdDMyKDMpKS5Gb2xkKCkuU3VtKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWYsIDJmLCAzZikuZm9sZCgpLnN1bShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFmLCAyZiwgM2YpLmZvbGQoKS5zdW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLCAyLCAzKS5mb2xkKCkuc3VtXyhTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF90b0xvd2VyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiRkVBVFVSRVwiLCBcInRFU3RcIiwgbnVsbCkudG9Mb3dlcigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJGRUFUVVJFXCIsIFwidEVTdFwiLCBudWxsKS50b0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJGRUFUVVJFXCIsIFwidEVTdFwiLCBudWxsKS50b0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEsIG9iamVjdDApLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiRkVBVFVSRVwiLCBcInRFU3RcIiwgbnVsbCkuVG9Mb3dlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJGRUFUVVJFXCIsIFwidEVTdFwiLCBuaWwpLlRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcIkZFQVRVUkVcIiwgXCJ0RVN0XCIsIG51bGwpLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJGRUFUVVJFXCIsIFwidEVTdFwiLCBudWxsKS50b0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiRkVBVFVSRVwiLCBcInRFU3RcIiwgbnVsbCkudG9Mb3dlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdGRUFUVVJFJywgJ3RFU3QnLCBOb25lKS50b19sb3dlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfdG9Mb3dlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiRkVBVFVSRVwiLFwidEVTdFwiLG51bGxdKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcIkZFQVRVUkVcIiwgXCJ0RVN0XCIsIG51bGxdKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJGRUFUVVJFXCIsIFwidEVTdFwiLCBudWxsXSkudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcIkZFQVRVUkVcIiwgXCJ0RVN0XCIsIG51bGwgfSkuVG9Mb3dlcjxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJGRUFUVVJFXCIsIFwidEVTdFwiLCBuaWx9KS5Ub0xvd2VyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiRkVBVFVSRVwiLCBcInRFU3RcIiwgbnVsbF0pLnRvTG93ZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJGRUFUVVJFXCIpOyBhZGQoXCJ0RVN0XCIpOyBhZGQobnVsbCk7IH19KS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiRkVBVFVSRVwiLCBcInRFU3RcIiwgbnVsbF0pLnRvTG93ZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnRkVBVFVSRScsICd0RVN0JywgTm9uZV0pLnRvX2xvd2VyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYTGlzdFhhX2JYWF90b0xvd2VyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixcImJcIl0pLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS50b0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgXCJiXCIgfSkuVG9Mb3dlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgXCJiXCJ9KS5Ub0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgfX0pLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCAnYiddKS50b19sb3dlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX3RvTG93ZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJKT1NIXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlJJUFBMRVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUEVURVJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTUFSS09cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJWQURBU1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTE9QXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJKT1NIXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlJJUFBMRVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUEVURVJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzgpLnByb3BlcnR5KHN0cmluZzksIHN0cmluZzEwKS5hcyhzdHJpbmcxMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nMTMpLmFkZFYoc3RyaW5nNykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTQpLnByb3BlcnR5KHN0cmluZzksIHN0cmluZzEwKS5hcyhzdHJpbmcxNSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxNikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTcpLmFkZEUoc3RyaW5nMTgpLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTApLmFkZEUoc3RyaW5nMTgpLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nMTMpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUxKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMikuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTUpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUxKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzEzKS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMjEpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ01BUktPJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ1ZBREFTJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnTE9QJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ0pPU0gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ1JJUFBMRScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdQRVRFUicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS50b0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuVG9Mb3dlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Ub0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS50b0xvd2VyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9Mb3dlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvTG93ZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS50b19sb3dlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX3RvTG93ZXJYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiSk9TSFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc4KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzEzKS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzE0KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTUpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTYpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzE3KS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUwKS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzEzKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTMpLnRvKHN0cmluZzE1KS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUyKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzIxKS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTUFSS09cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJWQURBU1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTE9QXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJKT1NIXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlJJUFBMRVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUEVURVJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTUFSS09cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJWQURBU1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTE9QXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJKT1NIXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlJJUFBMRVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUEVURVJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdNQVJLTycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdWQURBUycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ0xPUCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdKT1NIJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdSSVBQTEUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnUEVURVInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvTG93ZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuVG9Mb3dlcjxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuVG9Mb3dlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykudG9fbG93ZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfdG9Mb3dlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJKT1NIXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlJJUFBMRVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUEVURVJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTUFSS09cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJWQURBU1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiTE9QXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJKT1NIXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlJJUFBMRVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUEVURVJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzgpLnByb3BlcnR5KHN0cmluZzksIHN0cmluZzEwKS5hcyhzdHJpbmcxMSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nMTMpLmFkZFYoc3RyaW5nNykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTQpLnByb3BlcnR5KHN0cmluZzksIHN0cmluZzEwKS5hcyhzdHJpbmcxNSkuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxNikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMykuYXMoc3RyaW5nMTcpLmFkZEUoc3RyaW5nMTgpLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTApLmFkZEUoc3RyaW5nMTgpLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nMTMpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUxKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMikuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTUpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUxKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzEzKS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMjEpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJNQVJLT1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlZBREFTXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJMT1BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkpPU0hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiUklQUExFXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJQRVRFUlwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIk1BUktPXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiVkFEQVNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIkxPUFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiSk9TSFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJSSVBQTEVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIlBFVEVSXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ01BUktPJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ1ZBREFTJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnTE9QJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ0pPU0gnKS5wcm9wZXJ0eSgnYWdlJywgMzIpLmFzXygnam9zaCcpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ1JJUFBMRScpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ3JpcHBsZScpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdQRVRFUicpLnByb3BlcnR5KCdhZ2UnLCAzNSkuYXNfKCdwZXRlcicpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCd2YWRhcycpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjUpLmFkZF9lKCdrbm93cycpLmZyb21fKCdtYXJrbycpLnRvKCdqb3NoJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnbWFya28nKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdyaXBwbGUnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ3BldGVyJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjIpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudG9Mb3dlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpLnRvTG93ZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Ub0xvd2VyPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Ub0xvd2VyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b0xvd2VyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5vcmRlcigpLmZvbGQoKS50b19sb3dlcihTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WGZlYXR1cmVfdGVzdF9udWxsWF90b1VwcGVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRFU3RcIiwgbnVsbCkudG9VcHBlcigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidEVTdFwiLCBudWxsKS50b1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidEVTdFwiLCBudWxsKS50b1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEsIG9iamVjdDApLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZmVhdHVyZVwiLCBcInRFU3RcIiwgbnVsbCkuVG9VcHBlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJmZWF0dXJlXCIsIFwidEVTdFwiLCBuaWwpLlRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZlYXR1cmVcIiwgXCJ0RVN0XCIsIG51bGwpLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmZWF0dXJlXCIsIFwidEVTdFwiLCBudWxsKS50b1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiZmVhdHVyZVwiLCBcInRFU3RcIiwgbnVsbCkudG9VcHBlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCdmZWF0dXJlJywgJ3RFU3QnLCBOb25lKS50b191cHBlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhmZWF0dXJlX3Rlc3RfbnVsbFhfdG9VcHBlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiZmVhdHVyZVwiLFwidEVTdFwiLG51bGxdKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImZlYXR1cmVcIiwgXCJ0RVN0XCIsIG51bGxdKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCJmZWF0dXJlXCIsIFwidEVTdFwiLCBudWxsXSkudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImZlYXR1cmVcIiwgXCJ0RVN0XCIsIG51bGwgfSkuVG9VcHBlcjxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJmZWF0dXJlXCIsIFwidEVTdFwiLCBuaWx9KS5Ub1VwcGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiZmVhdHVyZVwiLCBcInRFU3RcIiwgbnVsbF0pLnRvVXBwZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJmZWF0dXJlXCIpOyBhZGQoXCJ0RVN0XCIpOyBhZGQobnVsbCk7IH19KS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiZmVhdHVyZVwiLCBcInRFU3RcIiwgbnVsbF0pLnRvVXBwZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnZmVhdHVyZScsICd0RVN0JywgTm9uZV0pLnRvX3VwcGVyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYTGlzdFhhX2JYWF90b1VwcGVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFtcImFcIixcImJcIl0pLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS50b1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgXCJiXCIgfSkuVG9VcHBlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtcImFcIiwgXCJiXCJ9KS5Ub1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgfX0pLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoW1wiYVwiLCBcImJcIl0pLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbJ2EnLCAnYiddKS50b191cHBlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX3RvVXBwZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuVG9VcHBlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5Ub1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS50b1VwcGVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS50b191cHBlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX3RvVXBwZXJYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRvVXBwZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuVG9VcHBlcjxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuVG9VcHBlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykudG9fdXBwZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzWG5hbWVYX29yZGVyX2ZvbGRfdG9VcHBlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudG9VcHBlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVzKHN0cmluZzApLm9yZGVyKCkuZm9sZCgpLnRvVXBwZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Ub1VwcGVyPG9iamVjdD4oU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKFwibmFtZVwiKS5PcmRlcigpLkZvbGQoKS5Ub1VwcGVyKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5vcmRlcigpLmZvbGQoKS50b1VwcGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZXMoJ25hbWUnKS5vcmRlcigpLmZvbGQoKS50b191cHBlcihTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WF9fZmVhdHVyZV9fX3Rlc3RfX251bGxYX3RyaW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLnRyaW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLnRyaW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qoc3RyaW5nMCwgc3RyaW5nMSwgb2JqZWN0MCwgc3RyaW5nMiwgc3RyaW5nMywgc3RyaW5nNCwgc3RyaW5nNSwgc3RyaW5nNiwgc3RyaW5nNykudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG5pbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCIpLlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIikudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KCcgIGZlYXR1cmUgICcsICcgb25lIHRlc3QgJywgTm9uZSwgJycsICcgJywgJ1x1MzAwMGFiYycsICdhYmNcdTMwMDAnLCAnXHUzMDAwYWJjXHUzMDAwJywgJ1x1MzAwMFx1MzAwMCcpLnRyaW0oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYX19mZWF0dXJlX19fdGVzdF9fbnVsbFhfdHJpbVhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJdKS50cmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbXCIgIGZlYXR1cmUgIFwiLCBcIiBvbmUgdGVzdCBcIiwgbnVsbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJdKS50cmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IFwiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiIH0pLlRyaW08b2JqZWN0PihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG5pbCwgXCJcIiwgXCIgXCIsIFwiXHUzMDAwYWJjXCIsIFwiYWJjXHUzMDAwXCIsIFwiXHUzMDAwYWJjXHUzMDAwXCIsIFwiXHUzMDAwXHUzMDAwXCJ9KS5UcmltKGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW1wiICBmZWF0dXJlICBcIiwgXCIgb25lIHRlc3QgXCIsIG51bGwsIFwiXCIsIFwiIFwiLCBcIlx1MzAwMGFiY1wiLCBcImFiY1x1MzAwMFwiLCBcIlx1MzAwMGFiY1x1MzAwMFwiLCBcIlx1MzAwMFx1MzAwMFwiXSkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIiAgZmVhdHVyZSAgXCIpOyBhZGQoXCIgb25lIHRlc3QgXCIpOyBhZGQobnVsbCk7IGFkZChcIlwiKTsgYWRkKFwiIFwiKTsgYWRkKFwiXHUzMDAwYWJjXCIpOyBhZGQoXCJhYmNcdTMwMDBcIik7IGFkZChcIlx1MzAwMGFiY1x1MzAwMFwiKTsgYWRkKFwiXHUzMDAwXHUzMDAwXCIpOyB9fSkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcIiAgZmVhdHVyZSAgXCIsIFwiIG9uZSB0ZXN0IFwiLCBudWxsLCBcIlwiLCBcIiBcIiwgXCJcdTMwMDBhYmNcIiwgXCJhYmNcdTMwMDBcIiwgXCJcdTMwMDBhYmNcdTMwMDBcIiwgXCJcdTMwMDBcdTMwMDBcIl0pLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsnICBmZWF0dXJlICAnLCAnIG9uZSB0ZXN0ICcsIE5vbmUsICcnLCAnICcsICdcdTMwMDBhYmMnLCAnYWJjXHUzMDAwJywgJ1x1MzAwMGFiY1x1MzAwMCcsICdcdTMwMDBcdTMwMDAnXSkudHJpbShTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WExpc3RYYV9iWFhfdHJpbSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbXCJhXCIsXCJiXCJdKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbXCJhXCIsIFwiYlwiXSkudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiYlwiIH0pLlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317XCJhXCIsIFwiYlwifSkuVHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImJcIik7IH19KS50cmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFtcImFcIiwgXCJiXCJdKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWydhJywgJ2InXSkudHJpbSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhMaXN0WDFfMlhYX3RyaW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFsxLDJdKS50cmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxLCAyXSkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzEsIDJdKS50cmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIgfSkuVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317MSwgMn0pLlRyaW0oZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMl0pLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgfX0pLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMl0pLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAyXSkudHJpbShTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZXNYbmFtZVhfdHJpbSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIwKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjEpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nNykucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOCkucHJvcGVydHkoc3RyaW5nOSwgc3RyaW5nMTApLmFzKHN0cmluZzExKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzEyKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIyKS5hcyhzdHJpbmcxMykuYWRkVihzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxNCkucHJvcGVydHkoc3RyaW5nOSwgc3RyaW5nMTApLmFzKHN0cmluZzE1KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzE2KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxNykuYWRkRShzdHJpbmcxOCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMCkuYWRkRShzdHJpbmcxOCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmcxMykucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTEpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nNCkudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUyKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzEzKS50byhzdHJpbmcxNSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTEpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTMpLnRvKHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMikuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxNikudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMjcpLkFzKFwidmFkYXNcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiBtYXJrbyBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIHZhZGFzICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgbG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICcgbWFya28gJykucHJvcGVydHkoJ2FnZScsIDI5KS5hc18oJ21hcmtvJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJyAgdmFkYXMgICcpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJyAgbG9wJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygnbG9wJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2pvc2ggICcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnICAgcmlwcGxlICAgJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRyaW0oKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5UcmltKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLlRyaW0oKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLnRyaW0oKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS50cmltKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikudHJpbSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLnRyaW0oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlc1huYW1lWF9vcmRlcl9mb2xkX3RyaW1YbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoICBcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICAgcmlwcGxlICAgXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzQpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNikuYWRkVihzdHJpbmc3KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc4KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTEpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzEzKS5hZGRWKHN0cmluZzcpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzE0KS5wcm9wZXJ0eShzdHJpbmc5LCBzdHJpbmcxMCkuYXMoc3RyaW5nMTUpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTYpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzE3KS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUwKS5hZGRFKHN0cmluZzE4KS5mcm9tKHN0cmluZzQpLnRvKHN0cmluZzEzKS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmc0KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTIpLmFkZEUoc3RyaW5nMjApLmZyb20oc3RyaW5nMTMpLnRvKHN0cmluZzE1KS5wcm9wZXJ0eShzdHJpbmcxOSwgZG91YmxlMSkuYWRkRShzdHJpbmcyMCkuZnJvbShzdHJpbmcxMykudG8oc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzE5LCBkb3VibGUyKS5hZGRFKHN0cmluZzIwKS5mcm9tKHN0cmluZzE2KS50byhzdHJpbmcxMSkucHJvcGVydHkoc3RyaW5nMTksIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI5KS5BcyhcIm1hcmtvXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwibG9wXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzMikuQXMoXCJqb3NoXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcInJpcHBsZVwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLlByb3BlcnR5KFwiYWdlXCIsIDM1KS5BcyhcInBldGVyXCIpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLkFkZEUoXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJyaXBwbGVcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgbWFya28gXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICB2YWRhcyAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgIGxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaCAgXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgIHJpcHBsZSAgIFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiIG1hcmtvIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIiAgdmFkYXMgIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwiICBsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2ggIFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCIgICByaXBwbGUgICBcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJyBtYXJrbyAnKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnICB2YWRhcyAgJykucHJvcGVydHkoJ2FnZScsIDI3KS5hc18oJ3ZhZGFzJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAnICBsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCAgJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICcgICByaXBwbGUgICAnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLm9yZGVyKCkuZm9sZCgpLnRyaW0oU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcyhzdHJpbmcwKS5vcmRlcigpLmZvbGQoKS50cmltKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkuVHJpbTxvYmplY3Q+KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlcyhcIm5hbWVcIikuT3JkZXIoKS5Gb2xkKCkuVHJpbShncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikub3JkZXIoKS5mb2xkKCkudHJpbShTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVzKCduYW1lJykub3JkZXIoKS5mb2xkKCkudHJpbShTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhvdXRFX2ZvbGRYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLk91dEUoKS5Gb2xkKCkpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLk91dEUoKS5Gb2xkKCkpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLm91dEUoKS5mb2xkKCkpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5vdXRFKCkuZm9sZCgpKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18ub3V0RSgpLmZvbGQoKSkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18ub3V0X2UoKS5mb2xkKCkpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBfdW5mb2xkX21hcFhzZWxlY3RYa2V5c1hYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKCkudW5mb2xkKCkubWFwKF9fLnNlbGVjdChrZXlzKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcCgpLnVuZm9sZCgpLm1hcChfXy5zZWxlY3QoQ29sdW1uLmtleXMpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcCgpLnVuZm9sZCgpLm1hcChfXy5zZWxlY3QoQ29sdW1uLmtleXMpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS51bmZvbGQoKS5tYXAoX18uc2VsZWN0KENvbHVtbi5rZXlzKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuVW5mb2xkPG9iamVjdD4oKS5NYXA8b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uS2V5cykpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5VbmZvbGQoKS5NYXAoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoZ3JlbWxpbmdvLkNvbHVtbi5LZXlzKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVNYXAoKS51bmZvbGQoKS5tYXAoX18uc2VsZWN0KENvbHVtbi5rZXlzKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkudW5mb2xkKCkubWFwKF9fLnNlbGVjdChDb2x1bW4ua2V5cykpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCgpLnVuZm9sZCgpLm1hcChfXy5zZWxlY3QoQ29sdW1uLmtleXMpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoKS51bmZvbGQoKS5tYXAoX18uc2VsZWN0KENvbHVtbi5rZXlzKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9yZXBlYXRYYm90aF9zaW1wbGVQYXRoWF91bnRpbFhoYXNJZFg2WFhfcGF0aF9ieVhuYW1lWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXNJZCh2aWQ2KSkucGF0aCgpLmJ5KFwibmFtZVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzSWQodmlkNikpLnBhdGgoKS5ieShcIm5hbWVcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXNJZCh2aWQ2KSkucGF0aCgpLmJ5KFwibmFtZVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXNJZCh2aWQ2KSkucGF0aCgpLmJ5KHN0cmluZzApLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5SZXBlYXQoX18uQm90aCgpLlNpbXBsZVBhdGgoKSkuVW50aWwoX18uSGFzSWQodmlkNikpLlBhdGgoKS5CeShcIm5hbWVcIikuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKCkuU2ltcGxlUGF0aCgpKS5VbnRpbChncmVtbGluZ28uVF9fLkhhc0lkKHZpZDYpKS5QYXRoKCkuQnkoXCJuYW1lXCIpLlVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzSWQodmlkNikpLnBhdGgoKS5ieShcIm5hbWVcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzSWQodmlkNikpLnBhdGgoKS5ieShcIm5hbWVcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5yZXBlYXQoX18uYm90aCgpLnNpbXBsZVBhdGgoKSkudW50aWwoX18uaGFzSWQodmlkNikpLnBhdGgoKS5ieShcIm5hbWVcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnJlcGVhdChfXy5ib3RoKCkuc2ltcGxlX3BhdGgoKSkudW50aWwoX18uaGFzX2lkKHZpZDYpKS5wYXRoKCkuYnkoJ25hbWUnKS51bmZvbGQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcFh0cnVlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcCh0cnVlKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKHRydWUpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKHRydWUpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChib29sZWFuMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KHRydWUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAodHJ1ZSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudmFsdWVNYXAodHJ1ZSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKHRydWUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCh0cnVlKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoVHJ1ZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcF93aXRoWHRva2Vuc1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2VucykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2VucykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAoKS5XaXRoKGdyZW1saW5nby5XaXRoT3B0aW9ucy5Ub2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVNYXAoKS53aXRoXyhXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgpLndpdGhfKFdpdGhPcHRpb25zLnRva2VucykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl92YWx1ZU1hcFhuYW1lX2FnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlX21hcCgnbmFtZScsICdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwWHRydWVfbmFtZV9hZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlTWFwKHRydWUsIFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKHRydWUsIFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcCh0cnVlLCBcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlTWFwKGJvb2xlYW4wLCBzdHJpbmcwLCBzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4odHJ1ZSwgXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVNYXAodHJ1ZSwgXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKHRydWUsIFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAodHJ1ZSwgXCJuYW1lXCIsIFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcCh0cnVlLCBcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKFRydWUsICduYW1lJywgJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX3dpdGhYdG9rZW5zWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZU1hcChzdHJpbmcwLCBzdHJpbmcxKS53aXRoKFdpdGhPcHRpb25zLnRva2VucykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiKS5XaXRoKFdpdGhPcHRpb25zLlRva2VucykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikuV2l0aChncmVtbGluZ28uV2l0aE9wdGlvbnMuVG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoJ25hbWUnLCAnYWdlJykud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWF93aXRoWHRva2Vuc19sYWJlbHNYX2J5WHVuZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5sYWJlbHMpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKS53aXRoKFdpdGhPcHRpb25zLnRva2VucywgV2l0aE9wdGlvbnMubGFiZWxzKS5ieShfXy51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5sYWJlbHMpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoc3RyaW5nMCwgc3RyaW5nMSkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmxhYmVscykuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcIm5hbWVcIiwgXCJhZ2VcIikuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMsIFdpdGhPcHRpb25zLkxhYmVscykuQnkoX18uVW5mb2xkPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikuV2l0aChncmVtbGluZ28uV2l0aE9wdGlvbnMuVG9rZW5zLCBncmVtbGluZ28uV2l0aE9wdGlvbnMuTGFiZWxzKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmxhYmVscykuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmxhYmVscykuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5sYWJlbHMpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoJ25hbWUnLCAnYWdlJykud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5sYWJlbHMpLmJ5KF9fLnVuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3ZhbHVlTWFwWG5hbWVfYWdlWF93aXRoWHRva2Vuc19pZHNYX2J5WHVuZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5pZHMpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKS53aXRoKFdpdGhPcHRpb25zLnRva2VucywgV2l0aE9wdGlvbnMuaWRzKS5ieShfXy51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5pZHMpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoc3RyaW5nMCwgc3RyaW5nMSkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmlkcykuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0PihcIm5hbWVcIiwgXCJhZ2VcIikuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMsIFdpdGhPcHRpb25zLklkcykuQnkoX18uVW5mb2xkPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikuV2l0aChncmVtbGluZ28uV2l0aE9wdGlvbnMuVG9rZW5zLCBncmVtbGluZ28uV2l0aE9wdGlvbnMuSWRzKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmlkcykuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aChXaXRoT3B0aW9ucy50b2tlbnMsIFdpdGhPcHRpb25zLmlkcykuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5pZHMpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS52YWx1ZV9tYXAoJ25hbWUnLCAnYWdlJykud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zLCBXaXRoT3B0aW9ucy5pZHMpLmJ5KF9fLnVuZm9sZCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dFhjcmVhdGVkWF92YWx1ZU1hcCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZU1hcCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dChcImNyZWF0ZWRcIikudmFsdWVNYXAoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZU1hcCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHN0cmluZzApLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImNyZWF0ZWRcIikuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KFwiY3JlYXRlZFwiKS5WYWx1ZU1hcCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlTWFwKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgnY3JlYXRlZCcpLnZhbHVlX21hcCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYcGVyc29uWF9maWx0ZXJYb3V0RVhjcmVhdGVkWFhfdmFsdWVNYXBYdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS52YWx1ZU1hcCh0cnVlKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkudmFsdWVNYXAodHJ1ZSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS52YWx1ZU1hcCh0cnVlKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuZmlsdGVyKF9fLm91dEUoc3RyaW5nMSkpLnZhbHVlTWFwKGJvb2xlYW4wKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5GaWx0ZXIoX18uT3V0RShcImNyZWF0ZWRcIikpLlZhbHVlTWFwPG9iamVjdCwgb2JqZWN0Pih0cnVlKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkZpbHRlcihncmVtbGluZ28uVF9fLk91dEUoXCJjcmVhdGVkXCIpKS5WYWx1ZU1hcCh0cnVlKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLnZhbHVlTWFwKHRydWUpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLnZhbHVlTWFwKHRydWUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLnZhbHVlTWFwKHRydWUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuZmlsdGVyXyhfXy5vdXRfZSgnY3JlYXRlZCcpKS52YWx1ZV9tYXAoVHJ1ZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2ZpbHRlclhvdXRFWGNyZWF0ZWRYWF92YWx1ZU1hcF93aXRoWHRva2Vuc1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmZpbHRlcihfXy5vdXRFKFwiY3JlYXRlZFwiKSkudmFsdWVNYXAoKS53aXRoKFdpdGhPcHRpb25zLnRva2VucykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuZmlsdGVyKF9fLm91dEUoXCJjcmVhdGVkXCIpKS52YWx1ZU1hcCgpLndpdGgoV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuZmlsdGVyKF9fLm91dEUoc3RyaW5nMSkpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkZpbHRlcihfXy5PdXRFKFwiY3JlYXRlZFwiKSkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KCkuV2l0aChXaXRoT3B0aW9ucy5Ub2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuRmlsdGVyKGdyZW1saW5nby5UX18uT3V0RShcImNyZWF0ZWRcIikpLlZhbHVlTWFwKCkuV2l0aChncmVtbGluZ28uV2l0aE9wdGlvbnMuVG9rZW5zKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLnZhbHVlTWFwKCkud2l0aChXaXRoT3B0aW9ucy50b2tlbnMpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5maWx0ZXIoX18ub3V0RShcImNyZWF0ZWRcIikpLnZhbHVlTWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmZpbHRlcl8oX18ub3V0X2UoJ2NyZWF0ZWQnKSkudmFsdWVfbWFwKCkud2l0aF8oV2l0aE9wdGlvbnMudG9rZW5zKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlTWFwWG5hbWVfbG9jYXRpb25YX2J5WHVuZm9sZFhfYnkiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLnZhbHVlTWFwKFwibmFtZVwiLCBcImxvY2F0aW9uXCIpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnZhbHVlTWFwKFwibmFtZVwiLCBcImxvY2F0aW9uXCIpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJsb2NhdGlvblwiKS5ieShfXy51bmZvbGQoKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLnZhbHVlTWFwKHN0cmluZzAsIHN0cmluZzEpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oXCJuYW1lXCIsIFwibG9jYXRpb25cIikuQnkoX18uVW5mb2xkPG9iamVjdD4oKSkuQnkoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5WYWx1ZU1hcChcIm5hbWVcIiwgXCJsb2NhdGlvblwiKS5CeShncmVtbGluZ28uVF9fLlVuZm9sZCgpKS5CeSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJsb2NhdGlvblwiKS5ieShfXy51bmZvbGQoKSkuYnkoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnZhbHVlTWFwKFwibmFtZVwiLCBcImxvY2F0aW9uXCIpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkudmFsdWVNYXAoXCJuYW1lXCIsIFwibG9jYXRpb25cIikuYnkoX18udW5mb2xkKCkpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLnZhbHVlX21hcCgnbmFtZScsICdsb2NhdGlvbicpLmJ5KF9fLnVuZm9sZCgpKS5ieSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VfbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVNYXA8b2JqZWN0LCBvYmplY3Q+KFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIiwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCduYW1lJywgJ2FnZScsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVNYXBYbmFtZV9hZ2VYX2J5WGlzWHhYWGJ5WHVuZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLmJ5KF9fLmlzKFwieFwiKSkuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLmJ5KF9fLmlzKFwieFwiKSkuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKS5ieShfXy5pcyhcInhcIikpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkudmFsdWVNYXAoc3RyaW5nMCwgc3RyaW5nMSkuYnkoX18uaXMoc3RyaW5nMikpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZU1hcDxvYmplY3QsIG9iamVjdD4oXCJuYW1lXCIsIFwiYWdlXCIpLkJ5KF9fLklzKFwieFwiKSkuQnkoX18uVW5mb2xkPG9iamVjdD4oKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikuQnkoZ3JlbWxpbmdvLlRfXy5JcyhcInhcIikpLkJ5KGdyZW1saW5nby5UX18uVW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnZhbHVlTWFwKFwibmFtZVwiLCBcImFnZVwiKS5ieShfXy5pcyhcInhcIikpLmJ5KF9fLnVuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVNYXAoXCJuYW1lXCIsIFwiYWdlXCIpLmJ5KF9fLmlzKFwieFwiKSkuYnkoX18udW5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZU1hcChcIm5hbWVcIiwgXCJhZ2VcIikuYnkoX18uaXMoXCJ4XCIpKS5ieShfXy51bmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudmFsdWVfbWFwKCduYW1lJywgJ2FnZScpLmJ5KF9fLmlzXygneCcpKS5ieShfXy51bmZvbGQoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYobnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYob2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVihudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlhsaXN0WG51bGxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoeHgxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoeHgxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoeHgxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoeHgxKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHh4MSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxLG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEsIE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYbGlzdFgxXzJfM1hYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHh4MSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHh4MSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHh4MSkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih4eDEpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih4eDEpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHh4MSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHh4MSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHh4MSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoeHgxKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWGxpc3RYdjFfdjJfdjNYWF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoeHgxKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih4eDEpLnZhbHVlcyhzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoeHgxKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoeHgxKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih4eDEpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHh4MSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfViIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlh2MVhfb3V0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDJYX2luIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQyKS5pbigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDIpLmluKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLmluKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQyKS5pbigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQyKS5JbigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkluKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLmluKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQyKS5pbigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuaW5fKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLmluXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYNFhfYm90aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuQm90aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmJvdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXRfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMlhfb3V0RSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikuaW5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikuaW5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikuaW5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLkluRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDIpLkluRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQyKS5pbkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLmluRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMikuaW5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDIpLmluX2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDRYX2JvdGhFWGNyZWF0ZWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5ib3RoRShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5ib3RoRShcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuQm90aEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuYm90aEUoXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ0KS5ib3RoX2UoJ2NyZWF0ZWQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDRYX2JvdGhFWGNyZWF0ZWR2YXJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ0KS5ib3RoRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDQpLmJvdGhFKHh4MSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLmJvdGhFKHh4MSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ0KS5ib3RoRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQ0KS5Cb3RoRSgoc3RyaW5nKSB4eDEpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDQpLkJvdGhFKHh4MSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLmJvdGhFKHh4MSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQ0KS5ib3RoRSh4eDEpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkNCkuYm90aEUoeHgxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkuYm90aF9lKHh4MSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlg0WF9ib3RoRSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQ0KS5Cb3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQ0KS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDQpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDQpLmJvdGhfZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dEVfaW5WX2luRV9pblZfYm90aF9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dEUoKS5pblYoKS5pbkUoKS5pblYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dEUoKS5pblYoKS5pbkUoKS5pblYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuaW5WKCkuaW5FKCkuaW5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dEUoKS5pblYoKS5pbkUoKS5pblYoKS5ib3RoKCkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dEUoKS5JblYoKS5JbkUoKS5JblYoKS5Cb3RoKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0RSgpLkluVigpLkluRSgpLkluVigpLkJvdGgoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dEUoKS5pblYoKS5pbkUoKS5pblYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0RSgpLmluVigpLmluRSgpLmluVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuaW5WKCkuaW5FKCkuaW5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0X2UoKS5pbl92KCkuaW5fZSgpLmluX3YoKS5ib3RoKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgyWF9pbkUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDIpLkJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuQm90aEUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMikuYm90aEUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDIpLmJvdGhFKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5ib3RoRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQyKS5ib3RoX2UoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dFhrbm93c1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCdrbm93cycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMUFzU3RyaW5nWF9vdXRYa25vd3NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgna25vd3MnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dFhrbm93c19jcmVhdGVkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIixcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KFwia25vd3NcIiwgXCJjcmVhdGVkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoc3RyaW5nMCwgc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dChcImtub3dzXCIsIFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoXCJrbm93c1wiLCBcImNyZWF0ZWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIsIFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIsIFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dChcImtub3dzXCIsIFwiY3JlYXRlZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCdrbm93cycsICdjcmVhdGVkJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRYa25vd3N2YXJfY3JlYXRlZHZhclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dCh4eDIseHgzKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoeHgyLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoeHgyLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KHh4MiwgeHgzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KChzdHJpbmcpIHh4MiwgKHN0cmluZykgeHgzKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoeHgyLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoeHgyLCB4eDMpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KHh4MiwgeHgzKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCh4eDIsIHh4MykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCh4eDIsIHh4MykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dF9vdXRfb3V0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkuT3V0KCkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkuT3V0KCkuT3V0KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLm91dCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkub3V0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS5vdXQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkub3V0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfbmFtZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0KCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3RvX1hPVVRfa25vd3NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS50byhEaXJlY3Rpb24uT1VULCBcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLnRvKERpcmVjdGlvbi5PVVQsIFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLnRvKERpcmVjdGlvbi5PVVQsIFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS50byhEaXJlY3Rpb24uT1VULCBzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuVG8oRGlyZWN0aW9uLk91dCwgXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5UbyhncmVtbGluZ28uRGlyZWN0aW9uLk91dCwgXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkudG8oRGlyZWN0aW9uLk9VVCwgXCJrbm93c1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLnRvKERpcmVjdGlvbi5PVVQsIFwia25vd3NcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS50byhEaXJlY3Rpb24uT1VULCBcImtub3dzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS50byhEaXJlY3Rpb24uT1VULCAna25vd3MnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFfMl8zXzRYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMikucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMCkuYXMoc3RyaW5nMikuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIxKS5hcyhzdHJpbmc0KS5hZGRWKHN0cmluZzUpLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzYpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nOSkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMikuYXMoc3RyaW5nOSkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nNywgc3RyaW5nOCkuYXMoc3RyaW5nMTApLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTEpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjMpLmFzKHN0cmluZzEyKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzQpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUwKS5hZGRFKHN0cmluZzEzKS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUxKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzIpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUyKS5hZGRFKHN0cmluZzE1KS5mcm9tKHN0cmluZzkpLnRvKHN0cmluZzEwKS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcxMSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTMpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoKHN0cmluZykgXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKChzdHJpbmcpIFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKChzdHJpbmcpIFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuQWRkRSgoc3RyaW5nKSBcImNyZWF0ZWRcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJwZXRlclwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyOSkuQXMoXCJtYXJrb1wiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLlByb3BlcnR5KFwiYWdlXCIsIDI3KS5BcyhcInZhZGFzXCIpLkFkZFYoXCJzb2Z0d2FyZVwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikuUHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5BcyhcImxvcFwiKS5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzIpLkFzKFwiam9zaFwiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJyaXBwbGVcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5Qcm9wZXJ0eShcImFnZVwiLCAzNSkuQXMoXCJwZXRlclwiKS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwidmFkYXNcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5BZGRFKFwia25vd3NcIikuRnJvbShcIm1hcmtvXCIpLlRvKFwiam9zaFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwicmlwcGxlXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcImpvc2hcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKCdwZXRlcicpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoXCJwZXRlclwiKS5hZGRFKFwia25vd3NcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbV8oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdtYXJrbycpLnByb3BlcnR5KCdhZ2UnLCAyOSkuYXNfKCdtYXJrbycpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICd2YWRhcycpLnByb3BlcnR5KCdhZ2UnLCAyNykuYXNfKCd2YWRhcycpLmFkZF92KCdzb2Z0d2FyZScpLnByb3BlcnR5KCduYW1lJywgJ2xvcCcpLnByb3BlcnR5KCdsYW5nJywgJ2phdmEnKS5hc18oJ2xvcCcpLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eSgnbmFtZScsICdqb3NoJykucHJvcGVydHkoJ2FnZScsIDMyKS5hc18oJ2pvc2gnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdyaXBwbGUnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdyaXBwbGUnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAncGV0ZXInKS5wcm9wZXJ0eSgnYWdlJywgMzUpLmFzXygncGV0ZXInKS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygndmFkYXMnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5hZGRfZSgna25vd3MnKS5mcm9tXygnbWFya28nKS50bygnam9zaCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ21hcmtvJykudG8oJ2xvcCcpLnByb3BlcnR5KCd3ZWlnaHQnLCAwLjQpLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygncmlwcGxlJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygnam9zaCcpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdwZXRlcicpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcygnc29mdHdhcmUnLCduYW1lJywnbG9wJykuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKCdzb2Z0d2FyZScsICduYW1lJywgJ2xvcCcpLmRyb3AoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoJ3NvZnR3YXJlJywgJ25hbWUnLCAnbG9wJykuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuZHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKS5Ecm9wKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJzb2Z0d2FyZVwiLCBcIm5hbWVcIiwgXCJsb3BcIikuRHJvcCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcygnc29mdHdhcmUnLCAnbmFtZScsICdsb3AnKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInNvZnR3YXJlXCIsIFwibmFtZVwiLCBcImxvcFwiKS5kcm9wKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdzb2Z0d2FyZScsICduYW1lJywgJ2xvcCcpLmRyb3AoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0KSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0KSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMywgdmlkNCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMywgdmlkNCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMywgdmlkNCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEsIHZpZDIsIHZpZDMsIHZpZDQpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMywgdmlkNCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxLCB2aWQyLCB2aWQzLCB2aWQ0KSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSwgdmlkMiwgdmlkMywgdmlkNCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX1ZfaGFzTGFiZWxYc29mdHdhcmVYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuVigpLmhhc0xhYmVsKFwic29mdHdhcmVcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuVigpLmhhc0xhYmVsKHN0cmluZzEpLnZhbHVlcyhzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5WKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzTGFiZWxYbG9vcHNYX2JvdGhFWHNlbGZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwibG9vcHNcIikuYm90aEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJsb29wc1wiKS5ib3RoRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJsb29wc1wiKS5ib3RoRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmJvdGhFKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwibG9vcHNcIikuQm90aEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJsb29wc1wiKS5Cb3RoRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJsb29wc1wiKS5ib3RoRShcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwibG9vcHNcIikuYm90aEUoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcImxvb3BzXCIpLmJvdGhFKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ2xvb3BzJykuYm90aF9lKCdzZWxmJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhsb29wc1hfYm90aFhzZWxmWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcImxvb3BzXCIpLmJvdGgoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJsb29wc1wiKS5ib3RoKFwic2VsZlwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcImxvb3BzXCIpLmJvdGgoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5ib3RoKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwibG9vcHNcIikuQm90aChcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcImxvb3BzXCIpLkJvdGgoXCJzZWxmXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwibG9vcHNcIikuYm90aChcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwibG9vcHNcIikuYm90aChcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwibG9vcHNcIikuYm90aChcInNlbGZcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdsb29wcycpLmJvdGgoJ3NlbGYnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMVhfVlhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuVihudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5WKG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuVihudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLlYobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxKS5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxKS5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5WKG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLlYoTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFYX1ZYMV9udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5WKHZpZDEsbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxKS5WKHZpZDEsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEpLlYodmlkMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLlYodmlkMSwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxKS5WKHZpZDEsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuVih2aWQxLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLlYodmlkMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLlYodmlkMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLlYodmlkMSwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuVih2aWQxLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX1ZfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5WKCkudmFsdWVzKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5WKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLlYoKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLlYoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dFhrbm93c1hfVl9uYW1lIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dChcImtub3dzXCIpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KFwia25vd3NcIikuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KFwia25vd3NcIikuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5WKCkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dChcImtub3dzXCIpLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJrbm93c1wiKS5WKCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoXCJrbm93c1wiKS5WKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwia25vd3NcIikuVigpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImtub3dzXCIpLlYoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgna25vd3MnKS5WKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbmFtZV9HYXJjaWFYX2luWHN1bmdCeVhfYXNYc29uZ1hfVl9oYXNYbmFtZV9XaWxsaWVfRGl4b25YX2luWHdyaXR0ZW5CeVhfd2hlcmVYZXFYc29uZ1hYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwiYXJ0aXN0XCIsIFwibmFtZVwiLCBcIkdhcmNpYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcInNvbmdcIikuVigpLmhhcyhcImFydGlzdFwiLCBcIm5hbWVcIiwgXCJXaWxsaWVfRGl4b25cIikuaW4oXCJ3cml0dGVuQnlcIikud2hlcmUoUC5lcShcInNvbmdcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhcnRpc3RcIiwgXCJuYW1lXCIsIFwiR2FyY2lhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwic29uZ1wiKS5WKCkuaGFzKFwiYXJ0aXN0XCIsIFwibmFtZVwiLCBcIldpbGxpZV9EaXhvblwiKS5pbihcIndyaXR0ZW5CeVwiKS53aGVyZShQLmVxKFwic29uZ1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhcnRpc3RcIiwgXCJuYW1lXCIsIFwiR2FyY2lhXCIpLmluKFwic3VuZ0J5XCIpLmFzKFwic29uZ1wiKS5WKCkuaGFzKFwiYXJ0aXN0XCIsIFwibmFtZVwiLCBcIldpbGxpZV9EaXhvblwiKS5pbihcIndyaXR0ZW5CeVwiKS53aGVyZShQLmVxKFwic29uZ1wiKSkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIpLmluKHN0cmluZzMpLmFzKHN0cmluZzQpLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nNSkuaW4oc3RyaW5nNikud2hlcmUoUC5lcShzdHJpbmc0KSkudmFsdWVzKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFydGlzdFwiLCBcIm5hbWVcIiwgXCJHYXJjaWFcIikuSW4oXCJzdW5nQnlcIikuQXMoXCJzb25nXCIpLlYoKS5IYXMoXCJhcnRpc3RcIiwgXCJuYW1lXCIsIFwiV2lsbGllX0RpeG9uXCIpLkluKFwid3JpdHRlbkJ5XCIpLldoZXJlKFAuRXEoXCJzb25nXCIpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhcnRpc3RcIiwgXCJuYW1lXCIsIFwiR2FyY2lhXCIpLkluKFwic3VuZ0J5XCIpLkFzKFwic29uZ1wiKS5WKCkuSGFzKFwiYXJ0aXN0XCIsIFwibmFtZVwiLCBcIldpbGxpZV9EaXhvblwiKS5JbihcIndyaXR0ZW5CeVwiKS5XaGVyZShncmVtbGluZ28uUC5FcShcInNvbmdcIikpLlZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwiYXJ0aXN0XCIsIFwibmFtZVwiLCBcIkdhcmNpYVwiKS5pbihcInN1bmdCeVwiKS5hcyhcInNvbmdcIikuVigpLmhhcyhcImFydGlzdFwiLCBcIm5hbWVcIiwgXCJXaWxsaWVfRGl4b25cIikuaW4oXCJ3cml0dGVuQnlcIikud2hlcmUoUC5lcShcInNvbmdcIikpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFydGlzdFwiLCBcIm5hbWVcIiwgXCJHYXJjaWFcIikuaW4oXCJzdW5nQnlcIikuYXMoXCJzb25nXCIpLlYoKS5oYXMoXCJhcnRpc3RcIiwgXCJuYW1lXCIsIFwiV2lsbGllX0RpeG9uXCIpLmluKFwid3JpdHRlbkJ5XCIpLndoZXJlKFAuZXEoXCJzb25nXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhcnRpc3RcIiwgXCJuYW1lXCIsIFwiR2FyY2lhXCIpLmluXyhcInN1bmdCeVwiKS5hcyhcInNvbmdcIikuVigpLmhhcyhcImFydGlzdFwiLCBcIm5hbWVcIiwgXCJXaWxsaWVfRGl4b25cIikuaW5fKFwid3JpdHRlbkJ5XCIpLndoZXJlKFAuZXEoXCJzb25nXCIpKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYXJ0aXN0JywgJ25hbWUnLCAnR2FyY2lhJykuaW5fKCdzdW5nQnknKS5hc18oJ3NvbmcnKS5WKCkuaGFzKCdhcnRpc3QnLCAnbmFtZScsICdXaWxsaWVfRGl4b24nKS5pbl8oJ3dyaXR0ZW5CeScpLndoZXJlKFAuZXEoJ3NvbmcnKSkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX1ZYc29mdHdhcmVYX2FkZEluRVh1c2VzX3BYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJtYXJrb1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyOSkuYXMoXCJtYXJrb1wiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInZhZGFzXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI3KS5hcyhcInZhZGFzXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJsb3BcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcImxvcFwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImpvc2hcIikucHJvcGVydHkoXCJhZ2VcIiwgMzIpLmFzKFwiam9zaFwiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwicmlwcGxlXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJyaXBwbGVcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJwZXRlclwiKS5wcm9wZXJ0eShcImFnZVwiLCAzNSkuYXMoJ3BldGVyJykuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcInZhZGFzXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJqb3NoXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcInJpcHBsZVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwiam9zaFwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwicGV0ZXJcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjApLmFzKHN0cmluZzIpLmFkZFYoc3RyaW5nMCkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nNCkucHJvcGVydHkoc3RyaW5nMywgbnVtYmVyMSkuYXMoc3RyaW5nNCkuYWRkVihzdHJpbmc1KS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmc3LCBzdHJpbmc4KS5hcyhzdHJpbmc2KS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzkpLnByb3BlcnR5KHN0cmluZzMsIG51bWJlcjIpLmFzKHN0cmluZzkpLmFkZFYoc3RyaW5nNSkucHJvcGVydHkoc3RyaW5nMSwgc3RyaW5nMTApLnByb3BlcnR5KHN0cmluZzcsIHN0cmluZzgpLmFzKHN0cmluZzEwKS5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzExKS5wcm9wZXJ0eShzdHJpbmczLCBudW1iZXIzKS5hcyhzdHJpbmcxMikuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc0KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMCkuYWRkRShzdHJpbmcxMykuZnJvbShzdHJpbmcyKS50byhzdHJpbmc5KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMSkuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmcyKS50byhzdHJpbmc2KS5wcm9wZXJ0eShzdHJpbmcxNCwgZG91YmxlMikuYWRkRShzdHJpbmcxNSkuZnJvbShzdHJpbmc5KS50byhzdHJpbmcxMCkucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTEpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nOSkudG8oc3RyaW5nNikucHJvcGVydHkoc3RyaW5nMTQsIGRvdWJsZTIpLmFkZEUoc3RyaW5nMTUpLmZyb20oc3RyaW5nMTEpLnRvKHN0cmluZzYpLnByb3BlcnR5KHN0cmluZzE0LCBkb3VibGUzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKChzdHJpbmcpIFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVigoc3RyaW5nKSBcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRSgoc3RyaW5nKSBcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLkFkZEUoKHN0cmluZykgXCJrbm93c1wiKS5Gcm9tKFwibWFya29cIikuVG8oXCJqb3NoXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLkFkZEUoKHN0cmluZykgXCJjcmVhdGVkXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcImxvcFwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5BZGRFKChzdHJpbmcpIFwiY3JlYXRlZFwiKS5Gcm9tKFwicGV0ZXJcIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikuUHJvcGVydHkoXCJhZ2VcIiwgMjkpLkFzKFwibWFya29cIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5Qcm9wZXJ0eShcImFnZVwiLCAyNykuQXMoXCJ2YWRhc1wiKS5BZGRWKFwic29mdHdhcmVcIikuUHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLlByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuQXMoXCJsb3BcIikuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLlByb3BlcnR5KFwiYWdlXCIsIDMyKS5BcyhcImpvc2hcIikuQWRkVihcInNvZnR3YXJlXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5Qcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLkFzKFwicmlwcGxlXCIpLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikuUHJvcGVydHkoXCJhZ2VcIiwgMzUpLkFzKFwicGV0ZXJcIikuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcInZhZGFzXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNSkuQWRkRShcImtub3dzXCIpLkZyb20oXCJtYXJrb1wiKS5UbyhcImpvc2hcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwibWFya29cIikuVG8oXCJsb3BcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5BZGRFKFwiY3JlYXRlZFwiKS5Gcm9tKFwiam9zaFwiKS5UbyhcInJpcHBsZVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLkFkZEUoXCJjcmVhdGVkXCIpLkZyb20oXCJqb3NoXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNCkuQWRkRShcImNyZWF0ZWRcIikuRnJvbShcInBldGVyXCIpLlRvKFwibG9wXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcygncGV0ZXInKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwidmFkYXNcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkuYWRkRShcImtub3dzXCIpLmZyb20oXCJtYXJrb1wiKS50byhcImpvc2hcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwicmlwcGxlXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJqb3NoXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLmFkZEUoXCJjcmVhdGVkXCIpLmZyb20oXCJwZXRlclwiKS50byhcImxvcFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcIm1hcmtvXCIpLnByb3BlcnR5KFwiYWdlXCIsIDI5KS5hcyhcIm1hcmtvXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwidmFkYXNcIikucHJvcGVydHkoXCJhZ2VcIiwgMjcpLmFzKFwidmFkYXNcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImxvcFwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwibG9wXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiam9zaFwiKS5wcm9wZXJ0eShcImFnZVwiLCAzMikuYXMoXCJqb3NoXCIpLmFkZFYoXCJzb2Z0d2FyZVwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJyaXBwbGVcIikucHJvcGVydHkoXCJsYW5nXCIsIFwiamF2YVwiKS5hcyhcInJpcHBsZVwiKS5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInBldGVyXCIpLnByb3BlcnR5KFwiYWdlXCIsIDM1KS5hcyhcInBldGVyXCIpLmFkZEUoXCJrbm93c1wiKS5mcm9tKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5hZGRFKFwia25vd3NcIikuZnJvbShcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkuYWRkRShcImNyZWF0ZWRcIikuZnJvbShcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwibWFya29cIikucHJvcGVydHkoXCJhZ2VcIiwgMjkpLmFzKFwibWFya29cIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJ2YWRhc1wiKS5wcm9wZXJ0eShcImFnZVwiLCAyNykuYXMoXCJ2YWRhc1wiKS5hZGRWKFwic29mdHdhcmVcIikucHJvcGVydHkoXCJuYW1lXCIsIFwibG9wXCIpLnByb3BlcnR5KFwibGFuZ1wiLCBcImphdmFcIikuYXMoXCJsb3BcIikuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJqb3NoXCIpLnByb3BlcnR5KFwiYWdlXCIsIDMyKS5hcyhcImpvc2hcIikuYWRkVihcInNvZnR3YXJlXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcInJpcHBsZVwiKS5wcm9wZXJ0eShcImxhbmdcIiwgXCJqYXZhXCIpLmFzKFwicmlwcGxlXCIpLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwicGV0ZXJcIikucHJvcGVydHkoXCJhZ2VcIiwgMzUpLmFzKFwicGV0ZXJcIikuYWRkRShcImtub3dzXCIpLmZyb21fKFwibWFya29cIikudG8oXCJ2YWRhc1wiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLmFkZEUoXCJrbm93c1wiKS5mcm9tXyhcIm1hcmtvXCIpLnRvKFwiam9zaFwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLmFkZEUoXCJjcmVhdGVkXCIpLmZyb21fKFwibWFya29cIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJyaXBwbGVcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcImpvc2hcIikudG8oXCJsb3BcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5hZGRFKFwiY3JlYXRlZFwiKS5mcm9tXyhcInBldGVyXCIpLnRvKFwibG9wXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnbWFya28nKS5wcm9wZXJ0eSgnYWdlJywgMjkpLmFzXygnbWFya28nKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAndmFkYXMnKS5wcm9wZXJ0eSgnYWdlJywgMjcpLmFzXygndmFkYXMnKS5hZGRfdignc29mdHdhcmUnKS5wcm9wZXJ0eSgnbmFtZScsICdsb3AnKS5wcm9wZXJ0eSgnbGFuZycsICdqYXZhJykuYXNfKCdsb3AnKS5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnam9zaCcpLnByb3BlcnR5KCdhZ2UnLCAzMikuYXNfKCdqb3NoJykuYWRkX3YoJ3NvZnR3YXJlJykucHJvcGVydHkoJ25hbWUnLCAncmlwcGxlJykucHJvcGVydHkoJ2xhbmcnLCAnamF2YScpLmFzXygncmlwcGxlJykuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ3BldGVyJykucHJvcGVydHkoJ2FnZScsIDM1KS5hc18oJ3BldGVyJykuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ3ZhZGFzJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkuYWRkX2UoJ2tub3dzJykuZnJvbV8oJ21hcmtvJykudG8oJ2pvc2gnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdtYXJrbycpLnRvKCdsb3AnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5hZGRfZSgnY3JlYXRlZCcpLmZyb21fKCdqb3NoJykudG8oJ3JpcHBsZScpLnByb3BlcnR5KCd3ZWlnaHQnLCAxLjApLmFkZF9lKCdjcmVhdGVkJykuZnJvbV8oJ2pvc2gnKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkuYWRkX2UoJ2NyZWF0ZWQnKS5mcm9tXygncGV0ZXInKS50bygnbG9wJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikuVih4eDEpLmFkZEUoXCJ1c2VzXCIpLmZyb20oXCJwXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLlYoeHgxKS5hZGRFKFwidXNlc1wiKS5mcm9tKFwicFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikuVih4eDEpLmFkZEUoXCJ1c2VzXCIpLmZyb20oXCJwXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5hcyhzdHJpbmcxKS5WKHh4MSkuYWRkRShzdHJpbmcyKS5mcm9tKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkFzKFwicFwiKS5WKHh4MSkuQWRkRSgoc3RyaW5nKSBcInVzZXNcIikuRnJvbShcInBcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcInBcIikuVih4eDEpLkFkZEUoXCJ1c2VzXCIpLkZyb20oXCJwXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicFwiKS5WKHh4MSkuYWRkRShcInVzZXNcIikuZnJvbShcInBcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicFwiKS5WKHh4MSkuYWRkRShcInVzZXNcIikuZnJvbShcInBcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicFwiKS5WKHh4MSkuYWRkRShcInVzZXNcIikuZnJvbV8oXCJwXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgncGVyc29uJykuYXNfKCdwJykuVih4eDEpLmFkZF9lKCd1c2VzJykuZnJvbV8oJ3AnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLmhhc0xhYmVsKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhc0xhYmVsKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKS5oYXNMYWJlbChcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLmhhc0xhYmVsKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhc0xhYmVsKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpLkhhc0xhYmVsKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXNMYWJlbChcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLmhhc0xhYmVsKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkuaGFzTGFiZWwoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhc19sYWJlbCgndXNlcycpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLm91dEUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCd1c2VzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMikub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMikub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDIpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMikub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMikuT3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMikuT3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDIpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMikub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQyKS5vdXRFKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMikub3V0X2UoJ3VzZXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQzKS5pbkUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDMpLmluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDMpLmluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQzKS5pbkUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDMpLkluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMykuSW5FKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMykuaW5FKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDMpLmluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQzKS5pbkUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQzKS5pbl9lKCd1c2VzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNCkub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNCkub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDQpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNCkub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNCkuT3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNCkuT3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDQpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNCkub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ0KS5vdXRFKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNCkub3V0X2UoJ3VzZXMnKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQ1KS5pbkUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDUpLmluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDUpLmluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQ1KS5pbkUoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDUpLkluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNSkuSW5FKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkNSkuaW5FKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDUpLmluRShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ1KS5pbkUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQ1KS5pbl9lKCd1c2VzJykiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkNikub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkNikub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDYpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkNikub3V0RShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkNikuT3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkNikuT3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDYpLm91dEUoXCJ1c2VzXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkNikub3V0RShcInVzZXNcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQ2KS5vdXRFKFwidXNlc1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkNikub3V0X2UoJ3VzZXMnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX2VxWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAuZXEob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5FcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAuZXEoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfbmVxWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAubmVxKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuTmVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5uZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAubmVxKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX2x0WG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAubHQob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5MdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkx0KG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAubHQoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfbHRlWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAubHRlKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuTHRlKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAubHRlKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX2d0WG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3QobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAuZ3Qob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkd0KG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3QobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAuZ3QoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfZ3RlWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAuZ3RlKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuR3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuR3RlKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAuZ3RlKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfZXFYTmFOWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChOYU4pLmlzKFAuZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAuZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5pcyhQLmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuRXEoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuRXEobWF0aC5OYU4oKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KE5hTikuaXMoUC5lcShOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5lcShEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZXEoTnVtYmVyLk5hTikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAuZXEoZmxvYXQoJ25hbicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhOYU5YX25lcVhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5uZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAubmVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5uZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuTmVxKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLk5lcShtYXRoLk5hTigpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoTmFOKS5pcyhQLm5lcShOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5uZXEoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLm5lcShOdW1iZXIuTmFOKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5uZXEoZmxvYXQoJ25hbicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhOYU5YX2x0WE5hTlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5sdChOYU4pKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuaXMoUC5sdChudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKS5JcyhQLkx0KERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAubHQoTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAubHQoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmx0KE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9sdGVYTmFOWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChOYU4pLmlzKFAubHRlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChOYU4pLmlzKFAubHRlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5pcyhQLmx0ZShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKS5JcyhQLkx0ZShEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5MdGUobWF0aC5OYU4oKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KE5hTikuaXMoUC5sdGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAubHRlKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5sdGUoTnVtYmVyLk5hTikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAubHRlKGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9ndFhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndChOYU4pKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndChOYU4pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3QoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5HdChEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5HdChtYXRoLk5hTigpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmd0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmd0KERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndChOdW1iZXIuTmFOKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5ndChmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfZ3RlWE5hTlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmd0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmd0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuaXMoUC5ndGUobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5HdGUoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuR3RlKG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3RlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmd0ZShEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAuZ3RlKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmd0ZShmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9lcVhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZXEobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5FcShEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkVxKG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmVxKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmVxKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLmVxKGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX25lcVhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5uZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5uZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTmVxKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTmVxKG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLm5lcShOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5uZXEoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLjApLmlzKFAubmVxKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLm5lcShmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9sdFhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHQoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHQoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHQobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5MdChEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0KERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmx0KE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2x0ZVhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHRlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHRlKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTHRlKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTHRlKG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdGUoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLjApLmlzKFAubHRlKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLmx0ZShmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9ndFhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3QoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3QoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5HdChEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkd0KG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0KERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmd0KE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLmd0KGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2d0ZVhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3RlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZ3RlKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuR3RlKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuR3RlKG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLjApLmlzKFAuZ3RlKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLmd0ZShmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfZXFYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAuZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZXEoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5FcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5FcSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAuZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5lcSgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmVxKDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9uZXFYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5uZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLm5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLm5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubmVxKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuTmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLk5lcSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5uZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLm5lcSgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLm5lcSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfbHRYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAubHQoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubHQoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5MdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5MdCgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAubHQoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmx0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5sdCgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmx0KDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9sdGVYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5sdGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubHRlKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuTHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLkx0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAubHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5sdGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmx0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmx0ZSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfZ3RYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3QoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZ3QoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5HdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5HdCgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3QoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmd0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndCgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmd0KDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9ndGVYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmd0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmd0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZ3RlKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuR3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLkd0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5ndGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmd0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmd0ZSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9lcVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5pcyhQLmVxKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuRXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMS4wKS5JcyhncmVtbGluZ28uUC5FcShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEuMCkuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5lcShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfbmVxWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubmVxKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTmVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5uZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLjApLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLm5lcShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfbHRYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5sdChvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxLjBkKS5JcyhQLkx0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTHQobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxLjApLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEuMCkuaXNfKFAubHQoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2x0ZVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5pcyhQLmx0ZShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxLjBkKS5JcyhQLkx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkx0ZShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5sdGUoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2d0WG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3QobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZ3Qob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5HdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkd0KG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3QobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmd0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxLjApLmlzXyhQLmd0KE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9ndGVYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5ndGUob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5HdGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMS4wKS5JcyhncmVtbGluZ28uUC5HdGUobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEuMCkuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEuMCkuaXNfKFAuZ3RlKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX2VxWDFkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5pcyhQLmVxKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuRXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5FcSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5pcyhQLmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAuZXEoMS4wKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhudWxsWF9uZXFYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLm5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAubmVxKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuTmVxKDEuMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLm5lcSgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5pc18oUC5uZXEoMS4wKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhudWxsWF9sdFgxZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuaXMoUC5sdChkb3VibGUwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkx0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuTHQoMS4wKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmlzKFAubHQoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0KDEuMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmlzXyhQLmx0KDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfbHRlWDFkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5pcyhQLmx0ZShkb3VibGUwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkx0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmlzKFAubHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdGUoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAubHRlKDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfZ3RYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3QoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAuZ3QoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkd0KDEuMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3QoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndCgxLjApKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5pc18oUC5ndCgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX2d0ZVgxZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuaXMoUC5ndGUoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5HdGUoMS4wKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKDEuMCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmlzXyhQLmd0ZSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX2VxWE5hTlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5lcShOYU4pKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5lcShOYU4pKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuaXMoUC5lcShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkVxKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuRXEobWF0aC5OYU4oKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZXEoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLmVxKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5pc18oUC5lcShmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WG51bGxYX25lcVhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAubmVxKE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAubmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTmVxKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkuSXMoZ3JlbWxpbmdvLlAuTmVxKG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5pcyhQLm5lcShOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5uZXEoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKS5pcyhQLm5lcShOdW1iZXIuTmFOKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAubmVxKGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfbHRYTmFOWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdChOYU4pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5pcyhQLmx0KG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwpLklzKFAuTHQoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdChOYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdChEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmlzKFAubHQoTnVtYmVyLk5hTikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYbnVsbFhfbHRlWE5hTlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5sdGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkuaXMoUC5sdGUobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5MdGUoRG91YmxlLk5hTikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsKS5JcyhncmVtbGluZ28uUC5MdGUobWF0aC5OYU4oKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwpLmlzKFAubHRlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmx0ZShEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG51bGwpLmlzKFAubHRlKE51bWJlci5OYU4pKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKS5pc18oUC5sdGUoZmxvYXQoJ25hbicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhudWxsWF9ndFhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3QoTmFOKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3QoTmFOKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDApLmlzKFAuZ3QobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCkuSXMoUC5HdChEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkd0KG1hdGguTmFOKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0KE5hTikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0KERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndChOdW1iZXIuTmFOKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSkuaXNfKFAuZ3QoZmxvYXQoJ25hbicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhudWxsWF9ndGVYTmFOWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsKS5pcyhQLmd0ZShOYU4pKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKE5hTikpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwKS5pcyhQLmd0ZShudW1iZXIwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKS5JcyhQLkd0ZShEb3VibGUuTmFOKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwpLklzKGdyZW1saW5nby5QLkd0ZShtYXRoLk5hTigpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoTmFOKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpLmlzKFAuZ3RlKERvdWJsZS5OYU4pKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoTnVtYmVyLk5hTikpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KE5vbmUpLmlzXyhQLmd0ZShmbG9hdCgnbmFuJykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfZXFYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KE5hTikuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuaXMoUC5lcShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKS5JcyhQLkVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLkVxKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KE5hTikuaXMoUC5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAuZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmVxKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WE5hTlhfbmVxWG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5uZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubmVxKG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuTmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguTmFOKCkpLklzKGdyZW1saW5nby5QLk5lcShuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAubmVxKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5uZXEobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuTmFOKS5pcyhQLm5lcShudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5uZXEoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9sdFhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChOYU4pLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChOYU4pLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5pcyhQLmx0KG9iamVjdDApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OYU4pLklzKFAuTHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuTHQobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5hTikuaXMoUC5sdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubHQobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAubHQoTm9uZSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmFOWF9sdGVYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChOYU4pLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuaXMoUC5sdGUob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5MdGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5OYU4oKSkuSXMoZ3JlbWxpbmdvLlAuTHRlKG5pbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KE5hTikuaXMoUC5sdGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmx0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5OYU4pLmlzKFAubHRlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnbmFuJykpLmlzXyhQLmx0ZShOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhOYU5YX2d0WG51bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3QobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZ3Qob2JqZWN0MCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5hTikuSXMoUC5HdChudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5HdChuaWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3QobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTmFOKS5pcyhQLmd0KG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndChudWxsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoZmxvYXQoJ25hbicpKS5pc18oUC5ndChOb25lKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhOYU5YX2d0ZVhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChOYU4pLmlzKFAuZ3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KE5hTikuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5pcyhQLmd0ZShvYmplY3QwKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuTmFOKS5JcyhQLkd0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXRoLk5hTigpKS5JcyhncmVtbGluZ28uUC5HdGUobmlsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoTmFOKS5pcyhQLmd0ZShudWxsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5OYU4pLmlzKFAuZ3RlKG51bGwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5hTikuaXMoUC5ndGUobnVsbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCduYW4nKSkuaXNfKFAuZ3RlKE5vbmUpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WGZvb1hfZXFYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZXEoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmlzKFAuZXEoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJmb29cIikuSXMoUC5FcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcImZvb1wiKS5JcyhncmVtbGluZ28uUC5FcSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZXEoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZvbycpLmlzXyhQLmVxKDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYZm9vWF9uZXFYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLm5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmlzKFAubmVxKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZm9vXCIpLklzKFAuTmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiZm9vXCIpLklzKGdyZW1saW5nby5QLk5lcSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLm5lcSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubmVxKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5uZXEoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZvbycpLmlzXyhQLm5lcSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WGZvb1hfbHRYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubHQoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmlzKFAubHQoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJmb29cIikuSXMoUC5MdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcImZvb1wiKS5JcyhncmVtbGluZ28uUC5MdCgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmx0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5sdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubHQoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZvbycpLmlzXyhQLmx0KDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYZm9vWF9sdGVYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmlzKFAubHRlKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZm9vXCIpLklzKFAuTHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiZm9vXCIpLklzKGdyZW1saW5nby5QLkx0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmx0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAubHRlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5sdGUoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZvbycpLmlzXyhQLmx0ZSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WGZvb1hfZ3RYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZ3QoMS4wZCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmlzKFAuZ3QoZG91YmxlMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oXCJmb29cIikuSXMoUC5HdCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChcImZvb1wiKS5JcyhncmVtbGluZ28uUC5HdCgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmd0KDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5ndCgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZ3QoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZvbycpLmlzXyhQLmd0KDEuMCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYZm9vWF9ndGVYMWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZ3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZ3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmd0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzApLmlzKFAuZ3RlKGRvdWJsZTApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwiZm9vXCIpLklzKFAuR3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwiZm9vXCIpLklzKGdyZW1saW5nby5QLkd0ZSgxLjApKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcImZvb1wiKS5pcyhQLmd0ZSgxLjBkKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwiZm9vXCIpLmlzKFAuZ3RlKDEuMGQpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJmb29cIikuaXMoUC5ndGUoMS4wKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ2ZvbycpLmlzXyhQLmd0ZSgxLjApKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9lcVhmb29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZXEoXCJmb29cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZXEoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5FcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEuMCkuaXMoUC5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5lcSgnZm9vJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX25lcVhmb29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLm5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubmVxKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTmVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTmVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLm5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLm5lcShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5uZXEoJ2ZvbycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9sdFhmb29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHQoXCJmb29cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHQoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5MdChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkx0KFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0KFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5sdChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEuMCkuaXMoUC5sdChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5sdCgnZm9vJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2x0ZVhmb29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHRlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHRlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0ZShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHRlKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuTHRlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuTHRlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmx0ZShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEuMGQpLmlzKFAubHRlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmx0ZShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5sdGUoJ2ZvbycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9ndFhmb29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3QoXCJmb29cIikpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZ3Qoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMS4wZCkuSXMoUC5HdChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLjApLklzKGdyZW1saW5nby5QLkd0KFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0KFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMS4wZCkuaXMoUC5ndChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEuMCkuaXMoUC5ndChcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5ndCgnZm9vJykpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2d0ZVhmb29YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3RlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3RlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0ZShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZ3RlKHN0cmluZzApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEuMGQpLklzKFAuR3RlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEuMCkuSXMoZ3JlbWxpbmdvLlAuR3RlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxLjBkKS5pcyhQLmd0ZShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEuMGQpLmlzKFAuZ3RlKFwiZm9vXCIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMS4wKS5pcyhQLmd0ZShcImZvb1wiKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMS4wKS5pc18oUC5ndGUoJ2ZvbycpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9hbmRYdHJ1ZV90cnVlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuYW5kKGlzKFAuZXEoMSkpLGlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFuZChfXy5pcyhQLmVxKG51bWJlcjApKSwgX18uaXMoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLkFuZChfXy5JcyhQLkVxKDEpKSwgX18uSXMoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmFuZF8oX18uaXNfKFAuZXEoMSkpLCBfXy5pc18oUC5ndCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2lzWHRydWVfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLmFuZChQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5lcShudW1iZXIwKS5hbmQoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLklzKFAuRXEoMSkuQW5kKFAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLklzKGdyZW1saW5nby5QLkVxKDEpLkFuZChncmVtbGluZ28uUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLmFuZChQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLmFuZChQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmlzKFAuZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5lcSgxKS5hbmRfKFAuZ3QoMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9hbmRYdHJ1ZV9mYWxzZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmFuZChpcyhQLmVxKDEpKSxpcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5hbmQoX18uaXMoUC5lcShudW1iZXIwKSksIF9fLmlzKFAubHQobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5BbmQoX18uSXMoUC5FcSgxKSksIF9fLklzKFAuTHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5hbmRfKF9fLmlzXyhQLmVxKDEpKSwgX18uaXNfKFAubHQoMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9pc1h0cnVlX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5hbmQoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5hbmQoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5pcyhQLmVxKG51bWJlcjApLmFuZChQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuSXMoUC5FcSgxKS5BbmQoUC5MdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuRXEoMSkuQW5kKGdyZW1saW5nby5QLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5lcSgxKS5hbmQoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmlzXyhQLmVxKDEpLmFuZF8oUC5sdCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2FuZFh0cnVlX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuYW5kKGlzKFAuZXEoMSkpLGlzKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFuZChfXy5pcyhQLmVxKG51bWJlcjApKSwgX18uaXMoUC5sdChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLkFuZChfXy5JcyhQLkVxKDEpKSwgX18uSXMoUC5MdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuYW5kXyhfXy5pc18oUC5lcSgxKSksIF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9pc1h0cnVlX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5hbmQoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5hbmQoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5pcyhQLmVxKG51bWJlcjApLmFuZChQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuSXMoUC5FcSgxKS5BbmQoUC5MdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuRXEoMSkuQW5kKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkuYW5kKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5hbmQoUC5sdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLmVxKDEpLmFuZChQLmx0KE51bWJlci5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuaXNfKFAuZXEoMSkuYW5kXyhQLmx0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9hbmRYZmFsc2VfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmFuZChpcyhQLm5lcSgxKSksaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5hbmQoX18uaXMoUC5uZXEobnVtYmVyMCkpLCBfXy5pcyhQLmd0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuQW5kKF9fLklzKFAuTmVxKDEpKSwgX18uSXMoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTmVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5hbmRfKF9fLmlzXyhQLm5lcSgxKSksIF9fLmlzXyhQLmd0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYZmFsc2VfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubmVxKDEpLmFuZChQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5uZXEobnVtYmVyMCkuYW5kKFAuZ3QobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5JcyhQLk5lcSgxKS5BbmQoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuTmVxKDEpLkFuZChncmVtbGluZ28uUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5hbmQoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5uZXEoMSkuYW5kXyhQLmd0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfYW5kWGZhbHNlX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuYW5kKGlzKFAubmVxKDEpKSxpcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFuZChfXy5pcyhQLm5lcShudW1iZXIwKSksIF9fLmlzKFAubHQobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5BbmQoX18uSXMoUC5OZXEoMSkpLCBfXy5JcyhQLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5OZXEoMSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmFuZF8oX18uaXNfKFAubmVxKDEpKSwgX18uaXNfKFAubHQoMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9pc1hmYWxzZV9mYWxzZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubmVxKDEpLmFuZChQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5uZXEobnVtYmVyMCkuYW5kKFAubHQobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5JcyhQLk5lcSgxKS5BbmQoUC5MdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuTmVxKDEpLkFuZChncmVtbGluZ28uUC5MdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5hbmQoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkuYW5kKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5uZXEoMSkuYW5kXyhQLmx0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfYW5kWGZhbHNlX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuYW5kKGlzKFAubmVxKDEpKSxpcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFuZChfXy5pcyhQLm5lcShudW1iZXIwKSksIF9fLmlzKFAubHQobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5BbmQoX18uSXMoUC5OZXEoMSkpLCBfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5OZXEoMSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5hbmQoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuYW5kXyhfXy5pc18oUC5uZXEoMSkpLCBfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYZmFsc2VfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5hbmQoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5hbmQoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubmVxKG51bWJlcjApLmFuZChQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuSXMoUC5OZXEoMSkuQW5kKFAuTHQoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLklzKGdyZW1saW5nby5QLk5lcSgxKS5BbmQoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkuYW5kKFAubHQoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5uZXEoMSkuYW5kKFAubHQoTnVtYmVyLk5hTikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5uZXEoMSkuYW5kXyhQLmx0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9hbmRYZXJyb3JfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmFuZChpcyhQLmx0KE5hTikpLGlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5hbmQoX18uaXMoUC5sdChudW1iZXIwKSksIF9fLmlzKFAuZ3QobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5BbmQoX18uSXMoUC5MdChEb3VibGUuTmFOKSksIF9fLklzKFAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSwgZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAubHQoRG91YmxlLk5hTikpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmFuZF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSksIF9fLmlzXyhQLmd0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYZXJyb3JfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5hbmQoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5hbmQoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5sdChudW1iZXIwKS5hbmQoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLklzKFAuTHQoRG91YmxlLk5hTikuQW5kKFAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpLkFuZChncmVtbGluZ28uUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoRG91YmxlLk5hTikuYW5kKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5hbmQoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkuYW5kXyhQLmd0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfYW5kWGVycm9yX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuYW5kKGlzKFAubHQoTmFOKSksaXMoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFuZChfXy5pcyhQLmx0KG51bWJlcjApKSwgX18uaXMoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLkFuZChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uSXMoUC5HdCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5sdChEb3VibGUuTmFOKSksIF9fLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5pcyhQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuYW5kXyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSwgX18uaXNfKFAuZ3QoMikpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9pc1hlcnJvcl9mYWxzZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5hbmQoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5hbmQoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikuYW5kKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5sdChudW1iZXIwKS5hbmQoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLklzKFAuTHQoRG91YmxlLk5hTikuQW5kKFAuR3QoMikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpLkFuZChncmVtbGluZ28uUC5HdCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikuYW5kKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoRG91YmxlLk5hTikuYW5kKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5hbmQoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkuYW5kXyhQLmd0KDIpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfYW5kWGVycm9yX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuYW5kKGlzKFAubHQoTmFOKSksaXMoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLmlzKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmFuZChfXy5pcyhQLmx0KG51bWJlcjApKSwgX18uaXMoUC5ndChudW1iZXIwKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLkFuZChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uSXMoUC5HdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmFuZChfXy5pcyhQLmx0KERvdWJsZS5OYU4pKSwgX18uaXMoUC5ndChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5hbmQoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLmlzKFAuZ3QoTnVtYmVyLk5hTikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5hbmRfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpLCBfXy5pc18oUC5ndChmbG9hdCgnbmFuJykpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYZXJyb3JfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikuYW5kKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5hbmQoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5hbmQoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHQobnVtYmVyMCkuYW5kKFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5JcyhQLkx0KERvdWJsZS5OYU4pLkFuZChQLkd0KERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKS5BbmQoZ3JlbWxpbmdvLlAuR3QobWF0aC5OYU4oKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5sdChOYU4pLmFuZChQLmd0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoRG91YmxlLk5hTikuYW5kKFAuZ3QoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5sdChOdW1iZXIuTmFOKS5hbmQoUC5ndChOdW1iZXIuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkuYW5kXyhQLmd0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9vclh0cnVlX3RydWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5vcihpcyhQLmVxKDEpKSxpcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkub3IoX18uaXMoUC5lcShudW1iZXIwKSksIF9fLmlzKFAuZ3QobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5PcihfXy5JcyhQLkVxKDEpKSwgX18uSXMoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuT3IoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSksIGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkub3JfKF9fLmlzXyhQLmVxKDEpKSwgX18uaXNfKFAuZ3QoMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9pc1h0cnVlX29yX3RydWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLm9yKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLm9yKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAuZXEobnVtYmVyMCkub3IoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLklzKFAuRXEoMSkuT3IoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuRXEoMSkuT3IoZ3JlbWxpbmdvLlAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLm9yKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuaXMoUC5lcSgxKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuaXNfKFAuZXEoMSkub3JfKFAuZ3QoMCkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9vclh0cnVlX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkub3IoaXMoUC5lcSgxKSksaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLm9yKF9fLmlzKFAuZXEobnVtYmVyMCkpLCBfXy5pcyhQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuT3IoX18uSXMoUC5FcSgxKSksIF9fLklzKFAuTHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLk9yKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5vcihfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLm9yXyhfXy5pc18oUC5lcSgxKSksIF9fLmlzXyhQLmx0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYdHJ1ZV9vcl9mYWxzZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkub3IoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkub3IoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLm9yKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5lcShudW1iZXIwKS5vcihQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuSXMoUC5FcSgxKS5PcihQLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5JcyhncmVtbGluZ28uUC5FcSgxKS5PcihncmVtbGluZ28uUC5MdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLm9yKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkub3IoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLmVxKDEpLm9yKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5lcSgxKS5vcl8oUC5sdCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX29yWHRydWVfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5vcihpcyhQLmVxKDEpKSxpcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLmVxKDEpKSwgX18uaXMoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAuZXEoMSkpLCBfXy5pcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkub3IoX18uaXMoUC5lcShudW1iZXIwKSksIF9fLmlzKFAubHQobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5PcihfXy5JcyhQLkVxKDEpKSwgX18uSXMoUC5MdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuT3IoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSksIGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkub3IoX18uaXMoUC5lcSgxKSksIF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5vcl8oX18uaXNfKFAuZXEoMSkpLCBfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYdHJ1ZV9vcl9lcnJvclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAuZXEoMSkub3IoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5vcihQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5vcihQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkuaXMoUC5lcShudW1iZXIwKS5vcihQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuSXMoUC5FcSgxKS5PcihQLkx0KERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5JcyhncmVtbGluZ28uUC5FcSgxKS5PcihncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5pcyhQLmVxKDEpLm9yKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5lcSgxKS5vcihQLmx0KERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmlzKFAuZXEoMSkub3IoUC5sdChOdW1iZXIuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmlzXyhQLmVxKDEpLm9yXyhQLmx0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9vclhmYWxzZV90cnVlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkub3IoaXMoUC5uZXEoMSkpLGlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLm9yKF9fLmlzKFAubmVxKG51bWJlcjApKSwgX18uaXMoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLk9yKF9fLklzKFAuTmVxKDEpKSwgX18uSXMoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuT3IoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5OZXEoMSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLm9yKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLm9yXyhfXy5pc18oUC5uZXEoMSkpLCBfXy5pc18oUC5ndCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2lzWGZhbHNlX29yX3RydWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubmVxKG51bWJlcjApLm9yKFAuZ3QobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5JcyhQLk5lcSgxKS5PcihQLkd0KDApKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5JcyhncmVtbGluZ28uUC5OZXEoMSkuT3IoZ3JlbWxpbmdvLlAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuaXNfKFAubmVxKDEpLm9yXyhQLmd0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfb3JYZmFsc2VfZmFsc2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5vcihpcyhQLm5lcSgxKSksaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkub3IoX18uaXMoUC5uZXEobnVtYmVyMCkpLCBfXy5pcyhQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuT3IoX18uSXMoUC5OZXEoMSkpLCBfXy5JcyhQLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5PcihncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLk5lcSgxKSksIGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkub3JfKF9fLmlzXyhQLm5lcSgxKSksIF9fLmlzXyhQLmx0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYZmFsc2Vfb3JfZmFsc2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5vcihQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5pcyhQLm5lcSgxKS5vcihQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubmVxKG51bWJlcjApLm9yKFAubHQobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5JcyhQLk5lcSgxKS5PcihQLkx0KDApKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5JcyhncmVtbGluZ28uUC5OZXEoMSkuT3IoZ3JlbWxpbmdvLlAuTHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5sdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5vcihQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuaXNfKFAubmVxKDEpLm9yXyhQLmx0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfb3JYZmFsc2VfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5vcihpcyhQLm5lcSgxKSksaXMoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkub3IoX18uaXMoUC5uZXEobnVtYmVyMCkpLCBfXy5pcyhQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuT3IoX18uSXMoUC5OZXEoMSkpLCBfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5PcihncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLk5lcSgxKSksIGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5uZXEoMSkpLCBfXy5pcyhQLmx0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubmVxKDEpKSwgX18uaXMoUC5sdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5vcihfXy5pcyhQLm5lcSgxKSksIF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5vcl8oX18uaXNfKFAubmVxKDEpKSwgX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2lzWGZhbHNlX29yX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5sdChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubmVxKDEpLm9yKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5pcyhQLm5lcShudW1iZXIwKS5vcihQLmx0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuSXMoUC5OZXEoMSkuT3IoUC5MdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuTmVxKDEpLk9yKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmlzKFAubmVxKDEpLm9yKFAubHQoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkuaXMoUC5uZXEoMSkub3IoUC5sdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLm5lcSgxKS5vcihQLmx0KE51bWJlci5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuaXNfKFAubmVxKDEpLm9yXyhQLmx0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9vclhlcnJvcl90cnVlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkub3IoaXMoUC5sdChOYU4pKSxpcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLm9yKF9fLmlzKFAubHQobnVtYmVyMCkpLCBfXy5pcyhQLmd0KG51bWJlcjEpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuT3IoX18uSXMoUC5MdChEb3VibGUuTmFOKSksIF9fLklzKFAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLk9yKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDApKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubHQoTmFOKSksIF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubHQoRG91YmxlLk5hTikpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLm9yKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkub3JfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpLCBfXy5pc18oUC5ndCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2lzWGVycm9yX29yX3RydWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikub3IoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5vcihQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHQobnVtYmVyMCkub3IoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLklzKFAuTHQoRG91YmxlLk5hTikuT3IoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkuT3IoZ3JlbWxpbmdvLlAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5sdChOYU4pLm9yKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoRG91YmxlLk5hTikub3IoUC5ndCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLmx0KE51bWJlci5OYU4pLm9yKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5sdChmbG9hdCgnbmFuJykpLm9yXyhQLmd0KDApKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfb3JYZXJyb3JfZmFsc2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5vcihpcyhQLmx0KE5hTikpLGlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubHQoTmFOKSksIF9fLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkub3IoX18uaXMoUC5sdChudW1iZXIwKSksIF9fLmlzKFAuZ3QobnVtYmVyMSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5PcihfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uSXMoUC5HdCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuT3IoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5sdChEb3VibGUuTmFOKSksIF9fLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkub3IoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLmlzKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5vcl8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSksIF9fLmlzXyhQLmd0KDIpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfaXNYZXJyb3Jfb3JfZmFsc2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5pcyhQLmx0KE5hTikub3IoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5vcihQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5vcihQLmd0KDIpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLmlzKFAubHQobnVtYmVyMCkub3IoUC5ndChudW1iZXIxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLklzKFAuTHQoRG91YmxlLk5hTikuT3IoUC5HdCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkuT3IoZ3JlbWxpbmdvLlAuR3QoMikpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkuaXMoUC5sdChOYU4pLm9yKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoRG91YmxlLk5hTikub3IoUC5ndCgyKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLmx0KE51bWJlci5OYU4pLm9yKFAuZ3QoMikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5sdChmbG9hdCgnbmFuJykpLm9yXyhQLmd0KDIpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfb3JYZXJyb3JfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5vcihpcyhQLmx0KE5hTikpLGlzKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLm9yKF9fLmlzKFAubHQoTmFOKSksIF9fLmlzKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLmx0KE5hTikpLCBfXy5pcyhQLmd0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkub3IoX18uaXMoUC5sdChudW1iZXIwKSksIF9fLmlzKFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5PcihfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uSXMoUC5HdChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuT3IoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QobWF0aC5OYU4oKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkub3IoX18uaXMoUC5sdChOYU4pKSwgX18uaXMoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5vcihfXy5pcyhQLmx0KERvdWJsZS5OYU4pKSwgX18uaXMoUC5ndChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5vcihfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18uaXMoUC5ndChOdW1iZXIuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLm9yXyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSwgX18uaXNfKFAuZ3QoZmxvYXQoJ25hbicpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX2lzWGVycm9yX29yX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkuaXMoUC5sdChOYU4pLm9yKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5vcihQLmd0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkuaXMoUC5sdChOYU4pLm9yKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5pcyhQLmx0KG51bWJlcjApLm9yKFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5JcyhQLkx0KERvdWJsZS5OYU4pLk9yKFAuR3QoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpLk9yKGdyZW1saW5nby5QLkd0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoTmFOKS5vcihQLmd0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLmlzKFAubHQoRG91YmxlLk5hTikub3IoUC5ndChEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5pcyhQLmx0KE51bWJlci5OYU4pLm9yKFAuZ3QoTnVtYmVyLk5hTikpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5pc18oUC5sdChmbG9hdCgnbmFuJykpLm9yXyhQLmd0KGZsb2F0KCduYW4nKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF9ub3RYdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLm5vdChpcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkubm90KF9fLmlzKFAuZ3QobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5Ob3QoX18uSXMoUC5HdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAuZ3QoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLm5vdChfXy5pcyhQLmd0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkubm90XyhfXy5pc18oUC5ndCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX25vdFhmYWxzZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLm5vdChpcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkubm90KF9fLmlzKFAubHQobnVtYmVyMCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDFkKS5Ob3QoX18uSXMoUC5MdCgwKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAubHQoMCkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLm5vdChfXy5pcyhQLmx0KDApKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkubm90XyhfXy5pc18oUC5sdCgwKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX25vdFhOYU5YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDFkKS5ub3QoaXMoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAuZ3QoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS5ub3QoX18uaXMoUC5ndChOYU4pKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGRvdWJsZTApLm5vdChfXy5pcyhQLmd0KG51bWJlcjApKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuTm90KF9fLklzKFAuR3QoRG91YmxlLk5hTikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KG1hdGguTmFOKCkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5pcyhQLmd0KE5hTikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5pcyhQLmd0KERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLm5vdChfXy5pcyhQLmd0KE51bWJlci5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkubm90XyhfXy5pc18oUC5ndChmbG9hdCgnbmFuJykpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfbm90WGlzWGVxWE5hTlhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkubm90KGlzKFAuZXEoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5pcyhQLmVxKE5hTikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxZCkubm90KF9fLmlzKFAuZXEoTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5ub3QoX18uaXMoUC5lcShudW1iZXIwKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLk5vdChfXy5JcyhQLkVxKERvdWJsZS5OYU4pKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcShtYXRoLk5hTigpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS5ub3QoX18uaXMoUC5lcShOYU4pKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDFkKS5ub3QoX18uaXMoUC5lcShEb3VibGUuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5ub3QoX18uaXMoUC5lcShOdW1iZXIuTmFOKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLm5vdF8oX18uaXNfKFAuZXEoZmxvYXQoJ25hbicpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX25vdFhub3RYaXNYZXFYTmFOWFhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxZCkubm90KG5vdChpcyhQLmVxKE5hTikpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxZCkubm90KF9fLm5vdChfXy5pcyhQLmVxKE5hTikpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5ub3QoX18uaXMoUC5lcShOYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChkb3VibGUwKS5ub3QoX18ubm90KF9fLmlzKFAuZXEobnVtYmVyMCkpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxZCkuTm90KF9fLk5vdChfXy5JcyhQLkVxKERvdWJsZS5OYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuTm90KGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEobWF0aC5OYU4oKSkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMWQpLm5vdChfXy5ub3QoX18uaXMoUC5lcShOYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxZCkubm90KF9fLm5vdChfXy5pcyhQLmVxKERvdWJsZS5OYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5ub3QoX18ubm90KF9fLmlzKFAuZXEoTnVtYmVyLk5hTikpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkubm90XyhfXy5ub3RfKF9fLmlzXyhQLmVxKGZsb2F0KCduYW4nKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfd2hlcmVYbm90WGlzWGx0WE5hTlhYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMWQpLndoZXJlKF9fLmluamVjdCgxKS5ub3QoaXMoUC5sdChOYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMWQpLndoZXJlKF9fLmluamVjdCgxKS5ub3QoX18uaXMoUC5sdChOYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDFkKS53aGVyZShfXy5pbmplY3QoMSkubm90KF9fLmlzKFAubHQoTmFOKSkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoZG91YmxlMCkud2hlcmUoX18uaW5qZWN0KG51bWJlcjApLm5vdChfXy5pcyhQLmx0KG51bWJlcjEpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMWQpLldoZXJlKF9fLkluamVjdCgxKS5Ob3QoX18uSXMoUC5MdChEb3VibGUuTmFOKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLldoZXJlKGdyZW1saW5nby5UX18uSW5qZWN0KDEpLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDFkKS53aGVyZShfXy5pbmplY3QoMSkubm90KF9fLmlzKFAubHQoTmFOKSkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMWQpLndoZXJlKF9fLmluamVjdCgxKS5ub3QoX18uaXMoUC5sdChEb3VibGUuTmFOKSkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkud2hlcmUoX18uaW5qZWN0KDEpLm5vdChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLndoZXJlKF9fLmluamVjdCgxKS5ub3RfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfeG9yWHRydWVfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMSkuZmlsdGVyKG9yKGFuZChpcyhQLmVxKDEpKSxub3QoaXMoUC5lcSgxKSkpKSxhbmQoaXMoUC5lcSgxKSksbm90KGlzKFAuZXEoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSksIF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKG51bWJlcjApKSwgX18ubm90KF9fLmlzKFAuZXEobnVtYmVyMCkpKSksIF9fLmFuZChfXy5pcyhQLmVxKG51bWJlcjApKSwgX18ubm90KF9fLmlzKFAuZXEobnVtYmVyMCkpKSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEpLkZpbHRlcihfXy5PcihfXy5BbmQoX18uSXMoUC5FcSgxKSksIF9fLk5vdChfXy5JcyhQLkVxKDEpKSkpLCBfXy5BbmQoX18uSXMoUC5FcSgxKSksIF9fLk5vdChfXy5JcyhQLkVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSkpKSwgZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmZpbHRlcl8oX18ub3JfKF9fLmFuZF8oX18uaXNfKFAuZXEoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpLCBfXy5hbmRfKF9fLmlzXyhQLmVxKDEpKSwgX18ubm90XyhfXy5pc18oUC5lcSgxKSkpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX3hvclh0cnVlX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAuZXEoMSkpLG5vdChpcyhQLmd0KDEpKSkpLGFuZChpcyhQLmd0KDEpKSxub3QoaXMoUC5lcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSksIF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZXEobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5ndChudW1iZXIwKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5lcShudW1iZXIwKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkVxKDEpKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSksIF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuRXEoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuRXEoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuZmlsdGVyXyhfXy5vcl8oX18uYW5kXyhfXy5pc18oUC5lcSgxKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSksIF9fLmFuZF8oX18uaXNfKFAuZ3QoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfeG9yWHRydWVfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEpLmZpbHRlcihvcihhbmQoaXMoUC5lcSgxKSksbm90KGlzKFAubHQoTmFOKSkpKSxhbmQoaXMoUC5sdChOYU4pKSxub3QoaXMoUC5lcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcShudW1iZXIwKSksIF9fLm5vdChfXy5pcyhQLmx0KG51bWJlcjEpKSkpLCBfXy5hbmQoX18uaXMoUC5sdChudW1iZXIxKSksIF9fLm5vdChfXy5pcyhQLmVxKG51bWJlcjApKSkpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxKS5GaWx0ZXIoX18uT3IoX18uQW5kKF9fLklzKFAuRXEoMSkpLCBfXy5Ob3QoX18uSXMoUC5MdChEb3VibGUuTmFOKSkpKSwgX18uQW5kKF9fLklzKFAuTHQoRG91YmxlLk5hTikpLCBfXy5Ob3QoX18uSXMoUC5FcSgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSksIGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmx0KERvdWJsZS5OYU4pKSkpLCBfXy5hbmQoX18uaXMoUC5sdChEb3VibGUuTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSkpLCBfXy5hbmQoX18uaXMoUC5sdChOdW1iZXIuTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuZmlsdGVyXyhfXy5vcl8oX18uYW5kXyhfXy5pc18oUC5lcSgxKSksIF9fLm5vdF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSkpKSwgX18uYW5kXyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSwgX18ubm90XyhfXy5pc18oUC5lcSgxKSkpKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYMWRYX3hvclhmYWxzZV90cnVlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmVxKDEpKSkpLGFuZChpcyhQLmVxKDEpKSxub3QoaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSksIF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5lcSgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZXEoMSkpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5lcShudW1iZXIwKSkpKSwgX18uYW5kKF9fLmlzKFAuZXEobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5ndChudW1iZXIwKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuRXEoMSkpKSksIF9fLkFuZChfXy5JcyhQLkVxKDEpKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkVxKDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuZmlsdGVyXyhfXy5vcl8oX18uYW5kXyhfXy5pc18oUC5ndCgxKSksIF9fLm5vdF8oX18uaXNfKFAuZXEoMSkpKSksIF9fLmFuZF8oX18uaXNfKFAuZXEoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmd0KDEpKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfeG9yWGZhbHNlX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmd0KDEpKSkpLGFuZChpcyhQLmd0KDEpKSxub3QoaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSksIF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5ndChudW1iZXIwKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5ndChudW1iZXIwKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSksIF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpLCBfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmd0KDEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSkuZmlsdGVyXyhfXy5vcl8oX18uYW5kXyhfXy5pc18oUC5ndCgxKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSksIF9fLmFuZF8oX18uaXNfKFAuZ3QoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmd0KDEpKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfeG9yWGZhbHNlX2Vycm9yWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmx0KE5hTikpKSksYW5kKGlzKFAubHQoTmFOKSksbm90KGlzKFAuZ3QoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSksIF9fLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSksIF9fLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5sdChudW1iZXIxKSkpKSwgX18uYW5kKF9fLmlzKFAubHQobnVtYmVyMSkpLCBfXy5ub3QoX18uaXMoUC5ndChudW1iZXIwKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuTHQoRG91YmxlLk5hTikpKSksIF9fLkFuZChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuR3QoMSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5HdCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5ndCgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSksIF9fLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5sdChEb3VibGUuTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoRG91YmxlLk5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmZpbHRlcl8oX18ub3JfKF9fLmFuZF8oX18uaXNfKFAuZ3QoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpKSksIF9fLmFuZF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF94b3JYZXJyb3JfdHJ1ZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMSkuZmlsdGVyKG9yKGFuZChpcyhQLmx0KE5hTikpLG5vdChpcyhQLmVxKDEpKSkpLGFuZChpcyhQLmVxKDEpKSxub3QoaXMoUC5sdChOYU4pKSkpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmx0KG51bWJlcjEpKSwgX18ubm90KF9fLmlzKFAuZXEobnVtYmVyMCkpKSksIF9fLmFuZChfXy5pcyhQLmVxKG51bWJlcjApKSwgX18ubm90KF9fLmlzKFAubHQobnVtYmVyMSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEpLkZpbHRlcihfXy5PcihfXy5BbmQoX18uSXMoUC5MdChEb3VibGUuTmFOKSksIF9fLk5vdChfXy5JcyhQLkVxKDEpKSkpLCBfXy5BbmQoX18uSXMoUC5FcSgxKSksIF9fLk5vdChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSkpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxKS5GaWx0ZXIoZ3JlbWxpbmdvLlRfXy5PcihncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSkpKSwgZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5FcSgxKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmVxKDEpKSkpLCBfXy5hbmQoX18uaXMoUC5lcSgxKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmx0KERvdWJsZS5OYU4pKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSksIF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAubHQoRG91YmxlLk5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmx0KE51bWJlci5OYU4pKSwgX18ubm90KF9fLmlzKFAuZXEoMSkpKSksIF9fLmFuZChfXy5pcyhQLmVxKDEpKSwgX18ubm90KF9fLmlzKFAubHQoTnVtYmVyLk5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgxKS5maWx0ZXJfKF9fLm9yXyhfXy5hbmRfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpLCBfXy5ub3RfKF9fLmlzXyhQLmVxKDEpKSkpLCBfXy5hbmRfKF9fLmlzXyhQLmVxKDEpKSwgX18ubm90XyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFgxZFhfeG9yWGVycm9yX2ZhbHNlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAubHQoTmFOKSksbm90KGlzKFAuZ3QoMSkpKSksYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmx0KE5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSksIF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSksIF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQobnVtYmVyMSkpLCBfXy5ub3QoX18uaXMoUC5ndChudW1iZXIwKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QobnVtYmVyMCkpLCBfXy5ub3QoX18uaXMoUC5sdChudW1iZXIxKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMSkuRmlsdGVyKF9fLk9yKF9fLkFuZChfXy5JcyhQLkx0KERvdWJsZS5OYU4pKSwgX18uTm90KF9fLklzKFAuR3QoMSkpKSksIF9fLkFuZChfXy5JcyhQLkd0KDEpKSwgX18uTm90KF9fLklzKFAuTHQoRG91YmxlLk5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEpLkZpbHRlcihncmVtbGluZ28uVF9fLk9yKGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSkpLCBncmVtbGluZ28uVF9fLkFuZChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkd0KDEpKSwgZ3JlbWxpbmdvLlRfXy5Ob3QoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18ubm90KF9fLmlzKFAuZ3QoMSkpKSksIF9fLmFuZChfXy5pcyhQLmd0KDEpKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoRG91YmxlLk5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5sdChEb3VibGUuTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5ub3QoX18uaXMoUC5ndCgxKSkpKSwgX18uYW5kKF9fLmlzKFAuZ3QoMSkpLCBfXy5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmZpbHRlcl8oX18ub3JfKF9fLmFuZF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSksIF9fLm5vdF8oX18uaXNfKFAuZ3QoMSkpKSksIF9fLmFuZF8oX18uaXNfKFAuZ3QoMSkpLCBfXy5ub3RfKF9fLmlzXyhQLmx0KGZsb2F0KCduYW4nKSkpKSkpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiSW5qZWN0WDFkWF94b3JYZXJyb3JfZXJyb3JYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEpLmZpbHRlcihvcihhbmQoaXMoUC5sdChOYU4pKSxub3QoaXMoUC5sdChOYU4pKSkpLGFuZChpcyhQLmx0KE5hTikpLG5vdChpcyhQLmx0KE5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KDEpLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTmFOKSksIF9fLm5vdChfXy5pcyhQLmx0KE5hTikpKSksIF9fLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5ub3QoX18uaXMoUC5sdChOYU4pKSkpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmZpbHRlcihfXy5vcihfXy5hbmQoX18uaXMoUC5sdChudW1iZXIxKSksIF9fLm5vdChfXy5pcyhQLmx0KG51bWJlcjEpKSkpLCBfXy5hbmQoX18uaXMoUC5sdChudW1iZXIxKSksIF9fLm5vdChfXy5pcyhQLmx0KG51bWJlcjEpKSkpKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PigxKS5GaWx0ZXIoX18uT3IoX18uQW5kKF9fLklzKFAuTHQoRG91YmxlLk5hTikpLCBfXy5Ob3QoX18uSXMoUC5MdChEb3VibGUuTmFOKSkpKSwgX18uQW5kKF9fLklzKFAuTHQoRG91YmxlLk5hTikpLCBfXy5Ob3QoX18uSXMoUC5MdChEb3VibGUuTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoMSkuRmlsdGVyKGdyZW1saW5nby5UX18uT3IoZ3JlbWxpbmdvLlRfXy5BbmQoZ3JlbWxpbmdvLlRfXy5JcyhncmVtbGluZ28uUC5MdChtYXRoLk5hTigpKSksIGdyZW1saW5nby5UX18uTm90KGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpKSksIGdyZW1saW5nby5UX18uQW5kKGdyZW1saW5nby5UX18uSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5OYU4oKSkpLCBncmVtbGluZ28uVF9fLk5vdChncmVtbGluZ28uVF9fLklzKGdyZW1saW5nby5QLkx0KG1hdGguTmFOKCkpKSkpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoMSkuZmlsdGVyKF9fLm9yKF9fLmFuZChfXy5pcyhQLmx0KE5hTikpLCBfXy5ub3QoX18uaXMoUC5sdChOYU4pKSkpLCBfXy5hbmQoX18uaXMoUC5sdChOYU4pKSwgX18ubm90KF9fLmlzKFAubHQoTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoRG91YmxlLk5hTikpLCBfXy5ub3QoX18uaXMoUC5sdChEb3VibGUuTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoRG91YmxlLk5hTikpLCBfXy5ub3QoX18uaXMoUC5sdChEb3VibGUuTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdCgxKS5maWx0ZXIoX18ub3IoX18uYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSwgX18uYW5kKF9fLmlzKFAubHQoTnVtYmVyLk5hTikpLCBfXy5ub3QoX18uaXMoUC5sdChOdW1iZXIuTmFOKSkpKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KDEpLmZpbHRlcl8oX18ub3JfKF9fLmFuZF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSksIF9fLm5vdF8oX18uaXNfKFAubHQoZmxvYXQoJ25hbicpKSkpKSwgX18uYW5kXyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSwgX18ubm90XyhfXy5pc18oUC5sdChmbG9hdCgnbmFuJykpKSkpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhJbmZYX2VxWEluZlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoSW5maW5pdHkpLmlzKFAuZXEoK0luZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChJbmZpbml0eSkuaXMoUC5lcSgrSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChJbmZpbml0eSkuaXMoUC5lcSgrSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCkuaXMoUC5lcShudW1iZXIxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuUG9zaXRpdmVJbmZpbml0eSkuSXMoUC5FcShEb3VibGUuUG9zaXRpdmVJbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5JbmYoMSkpLklzKGdyZW1saW5nby5QLkVxKG1hdGguSW5mKDEpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmVxKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAuZXEoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkuaXMoUC5lcShOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnaW5mJykpLmlzXyhQLmVxKGZsb2F0KCdpbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYSW5mWF9uZXFYSW5mWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChJbmZpbml0eSkuaXMoUC5uZXEoK0luZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChJbmZpbml0eSkuaXMoUC5uZXEoK0luZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoSW5maW5pdHkpLmlzKFAubmVxKCtJbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChudW1iZXIwKS5pcyhQLm5lcShudW1iZXIxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihEb3VibGUuUG9zaXRpdmVJbmZpbml0eSkuSXMoUC5OZXEoRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguSW5mKDEpKS5JcyhncmVtbGluZ28uUC5OZXEobWF0aC5JbmYoMSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAubmVxKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAubmVxKERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAubmVxKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCdpbmYnKSkuaXNfKFAubmVxKGZsb2F0KCdpbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmVnSW5mWF9lcVhOZWdJbmZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KC1JbmZpbml0eSkuaXMoUC5lcSgtSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KC1JbmZpbml0eSkuaXMoUC5lcSgtSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgtSW5maW5pdHkpLmlzKFAuZXEoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZXEobnVtYmVyMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5lZ2F0aXZlSW5maW5pdHkpLklzKFAuRXEoRG91YmxlLk5lZ2F0aXZlSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguSW5mKC0xKSkuSXMoZ3JlbWxpbmdvLlAuRXEobWF0aC5JbmYoLTEpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmVxKERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpLmlzKFAuZXEoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkuaXMoUC5lcShOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnLWluZicpKS5pc18oUC5lcShmbG9hdCgnLWluZicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIkluamVjdFhOZWdJbmZYX25lcVhOZWdJbmZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KC1JbmZpbml0eSkuaXMoUC5uZXEoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgtSW5maW5pdHkpLmlzKFAubmVxKC1JbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KC1JbmZpbml0eSkuaXMoUC5uZXEoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubmVxKG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KERvdWJsZS5OZWdhdGl2ZUluZmluaXR5KS5JcyhQLk5lcShEb3VibGUuTmVnYXRpdmVJbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobWF0aC5JbmYoLTEpKS5JcyhncmVtbGluZ28uUC5OZXEobWF0aC5JbmYoLTEpKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLm5lcShEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLm5lcShEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLm5lcShOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChmbG9hdCgnLWluZicpKS5pc18oUC5uZXEoZmxvYXQoJy1pbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYSW5mWF9ndFhOZWdJbmZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KEluZmluaXR5KS5pcyhQLmd0KC1JbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoSW5maW5pdHkpLmlzKFAuZ3QoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoSW5maW5pdHkpLmlzKFAuZ3QoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZ3QobnVtYmVyMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpLklzKFAuR3QoRG91YmxlLk5lZ2F0aXZlSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguSW5mKDEpKS5JcyhncmVtbGluZ28uUC5HdChtYXRoLkluZigtMSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAuZ3QoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkuaXMoUC5ndChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmd0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCdpbmYnKSkuaXNfKFAuZ3QoZmxvYXQoJy1pbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYSW5mWF9sdFhOZWdJbmZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KEluZmluaXR5KS5pcyhQLmx0KC1JbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoSW5maW5pdHkpLmlzKFAubHQoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoSW5maW5pdHkpLmlzKFAubHQoLUluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubHQobnVtYmVyMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpLklzKFAuTHQoRG91YmxlLk5lZ2F0aXZlSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguSW5mKDEpKS5JcyhncmVtbGluZ28uUC5MdChtYXRoLkluZigtMSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpLmlzKFAubHQoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSkuaXMoUC5sdChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKS5pcyhQLmx0KE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCdpbmYnKSkuaXNfKFAubHQoZmxvYXQoJy1pbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmVnSW5mWF9sdFhJbmZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KC1JbmZpbml0eSkuaXMoUC5sdChJbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoLUluZmluaXR5KS5pcyhQLmx0KEluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoLUluZmluaXR5KS5pcyhQLmx0KEluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAubHQobnVtYmVyMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5lZ2F0aXZlSW5maW5pdHkpLklzKFAuTHQoRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguSW5mKC0xKSkuSXMoZ3JlbWxpbmdvLlAuTHQobWF0aC5JbmYoMSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpLmlzKFAubHQoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSkuaXMoUC5sdChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmx0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCctaW5mJykpLmlzXyhQLmx0KGZsb2F0KCdpbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJJbmplY3RYTmVnSW5mWF9ndFhJbmZYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KC1JbmZpbml0eSkuaXMoUC5ndChJbmZpbml0eSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoLUluZmluaXR5KS5pcyhQLmd0KEluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoLUluZmluaXR5KS5pcyhQLmd0KEluZmluaXR5KSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjApLmlzKFAuZ3QobnVtYmVyMSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oRG91YmxlLk5lZ2F0aXZlSW5maW5pdHkpLklzKFAuR3QoRG91YmxlLlBvc2l0aXZlSW5maW5pdHkpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG1hdGguSW5mKC0xKSkuSXMoZ3JlbWxpbmdvLlAuR3QobWF0aC5JbmYoMSkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpLmlzKFAuZ3QoRG91YmxlLlBPU0lUSVZFX0lORklOSVRZKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSkuaXMoUC5ndChEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKS5pcyhQLmd0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KGZsb2F0KCctaW5mJykpLmlzXyhQLmd0KGZsb2F0KCdpbmYnKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJQcmltaXRpdmVzX051bWJlcl9lcVhieXRlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMWIsMXMsMWksMWwsMWYsMWQsMTAwMGksMW0sMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzFiLCAxcywgMWksIDFsLCAxZiwgMWQsIDEwMDBpLCAxbSwgMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IChzYnl0ZSkgMSwgKHNob3J0KSAxLCAxLCAxbCwgMWYsIDFkLCAxMDAwLCAoZGVjaW1hbCkgMSwgQmlnSW50ZWdlci5QYXJzZShcIjFcIikgfSkuVW5mb2xkPG9iamVjdD4oKS5XaGVyZShfXy5Jcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317aW50OCgxKSwgaW50MTYoMSksIGludDMyKDEpLCBpbnQ2NCgxKSwgZmxvYXQzMigxKSwgMSwgaW50MzIoMTAwMCksIGdyZW1saW5nby5QYXJzZUJpZ0RlY2ltYWwoXCIxXCIpLCBncmVtbGluZ28uUGFyc2VCaWdJbnQoXCIxXCIpfSkuVW5mb2xkKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Jcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbKGJ5dGUpMSwgKHNob3J0KTEsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgbmV3IEJpZ0RlY2ltYWwoMUwpLCAxZ10pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobmV3IEJ5dGUoMSkpOyBhZGQobmV3IFNob3J0KDEpKTsgYWRkKDEpOyBhZGQoMWwpOyBhZGQoMWYpOyBhZGQoMWQpOyBhZGQoMTAwMCk7IGFkZChuZXcgQmlnRGVjaW1hbChcIjFcIikpOyBhZGQobmV3IEJpZ0ludGVnZXIoXCIxXCIpKTsgfX0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAxLCAxLCBsb25nKDEpLCAxLCAxLCAxMDAwLCBiaWdkZWNpbWFsKDEpLCBiaWdpbnQoMSldKS51bmZvbGQoKS53aGVyZShfXy5pc18oeHgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIlByaW1pdGl2ZXNfTnVtYmVyX2VxWHNob3J0WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMWIsMXMsMWksMWwsMWYsMWQsMTAwMGksMW0sMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzFiLCAxcywgMWksIDFsLCAxZiwgMWQsIDEwMDBpLCAxbSwgMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IChzYnl0ZSkgMSwgKHNob3J0KSAxLCAxLCAxbCwgMWYsIDFkLCAxMDAwLCAoZGVjaW1hbCkgMSwgQmlnSW50ZWdlci5QYXJzZShcIjFcIikgfSkuVW5mb2xkPG9iamVjdD4oKS5XaGVyZShfXy5Jcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317aW50OCgxKSwgaW50MTYoMSksIGludDMyKDEpLCBpbnQ2NCgxKSwgZmxvYXQzMigxKSwgMSwgaW50MzIoMTAwMCksIGdyZW1saW5nby5QYXJzZUJpZ0RlY2ltYWwoXCIxXCIpLCBncmVtbGluZ28uUGFyc2VCaWdJbnQoXCIxXCIpfSkuVW5mb2xkKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Jcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbKGJ5dGUpMSwgKHNob3J0KTEsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgbmV3IEJpZ0RlY2ltYWwoMUwpLCAxZ10pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobmV3IEJ5dGUoMSkpOyBhZGQobmV3IFNob3J0KDEpKTsgYWRkKDEpOyBhZGQoMWwpOyBhZGQoMWYpOyBhZGQoMWQpOyBhZGQoMTAwMCk7IGFkZChuZXcgQmlnRGVjaW1hbChcIjFcIikpOyBhZGQobmV3IEJpZ0ludGVnZXIoXCIxXCIpKTsgfX0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAxLCAxLCBsb25nKDEpLCAxLCAxLCAxMDAwLCBiaWdkZWNpbWFsKDEpLCBiaWdpbnQoMSldKS51bmZvbGQoKS53aGVyZShfXy5pc18oeHgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIlByaW1pdGl2ZXNfTnVtYmVyX2VxWGludFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzFiLDFzLDFpLDFsLDFmLDFkLDEwMDBpLDFtLDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMWIsIDFzLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIDFtLCAxbl0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAoc2J5dGUpIDEsIChzaG9ydCkgMSwgMSwgMWwsIDFmLCAxZCwgMTAwMCwgKGRlY2ltYWwpIDEsIEJpZ0ludGVnZXIuUGFyc2UoXCIxXCIpIH0pLlVuZm9sZDxvYmplY3Q+KCkuV2hlcmUoX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e2ludDgoMSksIGludDE2KDEpLCBpbnQzMigxKSwgaW50NjQoMSksIGZsb2F0MzIoMSksIDEsIGludDMyKDEwMDApLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiMVwiKSwgZ3JlbWxpbmdvLlBhcnNlQmlnSW50KFwiMVwiKX0pLlVuZm9sZCgpLldoZXJlKGdyZW1saW5nby5UX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWyhieXRlKTEsIChzaG9ydCkxLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIG5ldyBCaWdEZWNpbWFsKDFMKSwgMWddKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKG5ldyBCeXRlKDEpKTsgYWRkKG5ldyBTaG9ydCgxKSk7IGFkZCgxKTsgYWRkKDFsKTsgYWRkKDFmKTsgYWRkKDFkKTsgYWRkKDEwMDApOyBhZGQobmV3IEJpZ0RlY2ltYWwoXCIxXCIpKTsgYWRkKG5ldyBCaWdJbnRlZ2VyKFwiMVwiKSk7IH19KS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDEsIDEsIDEsIDEsIDEsIDEwMDAsIDEsIDFdKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMSwgMSwgbG9uZygxKSwgMSwgMSwgMTAwMCwgYmlnZGVjaW1hbCgxKSwgYmlnaW50KDEpXSkudW5mb2xkKCkud2hlcmUoX18uaXNfKHh4MSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJQcmltaXRpdmVzX051bWJlcl9lcVhsb25nWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbMWIsMXMsMWksMWwsMWYsMWQsMTAwMGksMW0sMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoWzFiLCAxcywgMWksIDFsLCAxZiwgMWQsIDEwMDBpLCAxbSwgMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IChzYnl0ZSkgMSwgKHNob3J0KSAxLCAxLCAxbCwgMWYsIDFkLCAxMDAwLCAoZGVjaW1hbCkgMSwgQmlnSW50ZWdlci5QYXJzZShcIjFcIikgfSkuVW5mb2xkPG9iamVjdD4oKS5XaGVyZShfXy5Jcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFtdaW50ZXJmYWNle317aW50OCgxKSwgaW50MTYoMSksIGludDMyKDEpLCBpbnQ2NCgxKSwgZmxvYXQzMigxKSwgMSwgaW50MzIoMTAwMCksIGdyZW1saW5nby5QYXJzZUJpZ0RlY2ltYWwoXCIxXCIpLCBncmVtbGluZ28uUGFyc2VCaWdJbnQoXCIxXCIpfSkuVW5mb2xkKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5Jcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbKGJ5dGUpMSwgKHNob3J0KTEsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgbmV3IEJpZ0RlY2ltYWwoMUwpLCAxZ10pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQobmV3IEJ5dGUoMSkpOyBhZGQobmV3IFNob3J0KDEpKTsgYWRkKDEpOyBhZGQoMWwpOyBhZGQoMWYpOyBhZGQoMWQpOyBhZGQoMTAwMCk7IGFkZChuZXcgQmlnRGVjaW1hbChcIjFcIikpOyBhZGQobmV3IEJpZ0ludGVnZXIoXCIxXCIpKTsgfX0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChbMSwgMSwgMSwgMSwgMSwgMSwgMTAwMCwgMSwgMV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAxLCAxLCBsb25nKDEpLCAxLCAxLCAxMDAwLCBiaWdkZWNpbWFsKDEpLCBiaWdpbnQoMSldKS51bmZvbGQoKS53aGVyZShfXy5pc18oeHgxKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogIlByaW1pdGl2ZXNfTnVtYmVyX2VxWGJpZ2ludFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzFiLDFzLDFpLDFsLDFmLDFkLDEwMDBpLDFtLDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMWIsIDFzLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIDFtLCAxbl0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAoc2J5dGUpIDEsIChzaG9ydCkgMSwgMSwgMWwsIDFmLCAxZCwgMTAwMCwgKGRlY2ltYWwpIDEsIEJpZ0ludGVnZXIuUGFyc2UoXCIxXCIpIH0pLlVuZm9sZDxvYmplY3Q+KCkuV2hlcmUoX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e2ludDgoMSksIGludDE2KDEpLCBpbnQzMigxKSwgaW50NjQoMSksIGZsb2F0MzIoMSksIDEsIGludDMyKDEwMDApLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiMVwiKSwgZ3JlbWxpbmdvLlBhcnNlQmlnSW50KFwiMVwiKX0pLlVuZm9sZCgpLldoZXJlKGdyZW1saW5nby5UX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWyhieXRlKTEsIChzaG9ydCkxLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIG5ldyBCaWdEZWNpbWFsKDFMKSwgMWddKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKG5ldyBCeXRlKDEpKTsgYWRkKG5ldyBTaG9ydCgxKSk7IGFkZCgxKTsgYWRkKDFsKTsgYWRkKDFmKTsgYWRkKDFkKTsgYWRkKDEwMDApOyBhZGQobmV3IEJpZ0RlY2ltYWwoXCIxXCIpKTsgYWRkKG5ldyBCaWdJbnRlZ2VyKFwiMVwiKSk7IH19KS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDEsIDEsIDEsIDEsIDEsIDEwMDAsIDEsIDFdKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMSwgMSwgbG9uZygxKSwgMSwgMSwgMTAwMCwgYmlnZGVjaW1hbCgxKSwgYmlnaW50KDEpXSkudW5mb2xkKCkud2hlcmUoX18uaXNfKHh4MSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJQcmltaXRpdmVzX051bWJlcl9lcVhmbG9hdFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzFiLDFzLDFpLDFsLDFmLDFkLDEwMDBpLDFtLDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMWIsIDFzLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIDFtLCAxbl0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAoc2J5dGUpIDEsIChzaG9ydCkgMSwgMSwgMWwsIDFmLCAxZCwgMTAwMCwgKGRlY2ltYWwpIDEsIEJpZ0ludGVnZXIuUGFyc2UoXCIxXCIpIH0pLlVuZm9sZDxvYmplY3Q+KCkuV2hlcmUoX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e2ludDgoMSksIGludDE2KDEpLCBpbnQzMigxKSwgaW50NjQoMSksIGZsb2F0MzIoMSksIDEsIGludDMyKDEwMDApLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiMVwiKSwgZ3JlbWxpbmdvLlBhcnNlQmlnSW50KFwiMVwiKX0pLlVuZm9sZCgpLldoZXJlKGdyZW1saW5nby5UX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWyhieXRlKTEsIChzaG9ydCkxLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIG5ldyBCaWdEZWNpbWFsKDFMKSwgMWddKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKG5ldyBCeXRlKDEpKTsgYWRkKG5ldyBTaG9ydCgxKSk7IGFkZCgxKTsgYWRkKDFsKTsgYWRkKDFmKTsgYWRkKDFkKTsgYWRkKDEwMDApOyBhZGQobmV3IEJpZ0RlY2ltYWwoXCIxXCIpKTsgYWRkKG5ldyBCaWdJbnRlZ2VyKFwiMVwiKSk7IH19KS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDEsIDEsIDEsIDEsIDEsIDEwMDAsIDEsIDFdKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMSwgMSwgbG9uZygxKSwgMSwgMSwgMTAwMCwgYmlnZGVjaW1hbCgxKSwgYmlnaW50KDEpXSkudW5mb2xkKCkud2hlcmUoX18uaXNfKHh4MSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJQcmltaXRpdmVzX051bWJlcl9lcVhkb3VibGVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFsxYiwxcywxaSwxbCwxZiwxZCwxMDAwaSwxbSwxbl0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoWzFiLCAxcywgMWksIDFsLCAxZiwgMWQsIDEwMDBpLCAxbSwgMW5dKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMWIsIDFzLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIDFtLCAxbl0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChsaXN0MCkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihuZXcgTGlzdDxvYmplY3Q+IHsgKHNieXRlKSAxLCAoc2hvcnQpIDEsIDEsIDFsLCAxZiwgMWQsIDEwMDAsIChkZWNpbWFsKSAxLCBCaWdJbnRlZ2VyLlBhcnNlKFwiMVwiKSB9KS5VbmZvbGQ8b2JqZWN0PigpLldoZXJlKF9fLklzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXtpbnQ4KDEpLCBpbnQxNigxKSwgaW50MzIoMSksIGludDY0KDEpLCBmbG9hdDMyKDEpLCAxLCBpbnQzMigxMDAwKSwgZ3JlbWxpbmdvLlBhcnNlQmlnRGVjaW1hbChcIjFcIiksIGdyZW1saW5nby5QYXJzZUJpZ0ludChcIjFcIil9KS5VbmZvbGQoKS5XaGVyZShncmVtbGluZ28uVF9fLklzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsoYnl0ZSkxLCAoc2hvcnQpMSwgMWksIDFsLCAxZiwgMWQsIDEwMDBpLCBuZXcgQmlnRGVjaW1hbCgxTCksIDFnXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChuZXcgQnl0ZSgxKSk7IGFkZChuZXcgU2hvcnQoMSkpOyBhZGQoMSk7IGFkZCgxbCk7IGFkZCgxZik7IGFkZCgxZCk7IGFkZCgxMDAwKTsgYWRkKG5ldyBCaWdEZWNpbWFsKFwiMVwiKSk7IGFkZChuZXcgQmlnSW50ZWdlcihcIjFcIikpOyB9fSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAxLCAxLCAxLCAxLCAxLCAxMDAwLCAxLCAxXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoWzEsIDEsIDEsIGxvbmcoMSksIDEsIDEsIDEwMDAsIGJpZ2RlY2ltYWwoMSksIGJpZ2ludCgxKV0pLnVuZm9sZCgpLndoZXJlKF9fLmlzXyh4eDEpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiUHJpbWl0aXZlc19OdW1iZXJfZXFYYmlnZGVjaW1hbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzFiLDFzLDFpLDFsLDFmLDFkLDEwMDBpLDFtLDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMWIsIDFzLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIDFtLCAxbl0pLnVuZm9sZCgpLndoZXJlKF9fLmlzKHh4MSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KFsxYiwgMXMsIDFpLCAxbCwgMWYsIDFkLCAxMDAwaSwgMW0sIDFuXSkudW5mb2xkKCkud2hlcmUoX18uaXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KGxpc3QwKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG5ldyBMaXN0PG9iamVjdD4geyAoc2J5dGUpIDEsIChzaG9ydCkgMSwgMSwgMWwsIDFmLCAxZCwgMTAwMCwgKGRlY2ltYWwpIDEsIEJpZ0ludGVnZXIuUGFyc2UoXCIxXCIpIH0pLlVuZm9sZDxvYmplY3Q+KCkuV2hlcmUoX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChbXWludGVyZmFjZXt9e2ludDgoMSksIGludDE2KDEpLCBpbnQzMigxKSwgaW50NjQoMSksIGZsb2F0MzIoMSksIDEsIGludDMyKDEwMDApLCBncmVtbGluZ28uUGFyc2VCaWdEZWNpbWFsKFwiMVwiKSwgZ3JlbWxpbmdvLlBhcnNlQmlnSW50KFwiMVwiKX0pLlVuZm9sZCgpLldoZXJlKGdyZW1saW5nby5UX18uSXMoeHgxKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoWyhieXRlKTEsIChzaG9ydCkxLCAxaSwgMWwsIDFmLCAxZCwgMTAwMGksIG5ldyBCaWdEZWNpbWFsKDFMKSwgMWddKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKG5ldyBCeXRlKDEpKTsgYWRkKG5ldyBTaG9ydCgxKSk7IGFkZCgxKTsgYWRkKDFsKTsgYWRkKDFmKTsgYWRkKDFkKTsgYWRkKDEwMDApOyBhZGQobmV3IEJpZ0RlY2ltYWwoXCIxXCIpKTsgYWRkKG5ldyBCaWdJbnRlZ2VyKFwiMVwiKSk7IH19KS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoWzEsIDEsIDEsIDEsIDEsIDEsIDEwMDAsIDEsIDFdKS51bmZvbGQoKS53aGVyZShfXy5pcyh4eDEpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChbMSwgMSwgMSwgbG9uZygxKSwgMSwgMSwgMTAwMCwgYmlnZGVjaW1hbCgxKSwgYmlnaW50KDEpXSkudW5mb2xkKCkud2hlcmUoX18uaXNfKHh4MSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVzX29yZGVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnZhbHVlcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS52YWx1ZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnZhbHVlcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuVmFsdWVzPG9iamVjdD4oKS5PcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVmFsdWVzKCkuT3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS52YWx1ZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS52YWx1ZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygpLm9yZGVyKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9wcm9wZXJ0aWVzX29yZGVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLk9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Qcm9wZXJ0aWVzKCkuT3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnByb3BlcnRpZXMoKS5vcmRlcigpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcHJvcGVydGllc19vcmRlcl9pZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5pZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkuaWQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5pZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5pZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlByb3BlcnRpZXM8b2JqZWN0PigpLk9yZGVyKCkuSWQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlByb3BlcnRpZXMoKS5PcmRlcigpLklkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkuaWQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkuaWQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucHJvcGVydGllcygpLm9yZGVyKCkuaWQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5pZF8oKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNfb3JkZXJfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJhXCIsIDEwaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMWkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTJpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDEzaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTVpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJhXCIsIDEwaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMWkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTJpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDEzaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTVpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUwKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMCkuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTEpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXIxKS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMikucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjIpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUxKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMykuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTIpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXI0KS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMykucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLlByb3BlcnR5KFwiYVwiLCAxMCkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLlByb3BlcnR5KFwiYVwiLCAxMSkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLlByb3BlcnR5KFwiYVwiLCAxMikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLlByb3BlcnR5KFwiYVwiLCAxMykuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLlByb3BlcnR5KFwiYVwiLCAxNCkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLlByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMCkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMSkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMikpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMykpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxNCkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxNSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMCkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxMikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMykuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNCkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLnByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLnByb3BlcnR5KFwiYVwiLCAxMCkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwiYVwiLCAxMSkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLnByb3BlcnR5KFwiYVwiLCAxMikuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwiYVwiLCAxMykuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLnByb3BlcnR5KFwiYVwiLCAxNCkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpLnByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnYScsIDEwKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDExKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDEyKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDEzKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDE0KS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKS5wcm9wZXJ0eSgnYScsIDE1KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCkuT3JkZXIoKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5Qcm9wZXJ0aWVzKCkuT3JkZXIoKS5WYWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkudmFsdWUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1hfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJhXCIsIDEwaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMWkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTJpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDEzaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTVpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJhXCIsIDEwaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMWkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTJpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDEzaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTVpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUwKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMCkuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTEpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXIxKS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMikucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjIpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUxKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMykuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTIpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXI0KS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMykucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLlByb3BlcnR5KFwiYVwiLCAxMCkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLlByb3BlcnR5KFwiYVwiLCAxMSkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLlByb3BlcnR5KFwiYVwiLCAxMikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLlByb3BlcnR5KFwiYVwiLCAxMykuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLlByb3BlcnR5KFwiYVwiLCAxNCkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLlByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMCkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMSkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMikpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMykpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxNCkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxNSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMCkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxMikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMykuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNCkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLnByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLnByb3BlcnR5KFwiYVwiLCAxMCkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwiYVwiLCAxMSkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLnByb3BlcnR5KFwiYVwiLCAxMikuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwiYVwiLCAxMykuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLnByb3BlcnR5KFwiYVwiLCAxNCkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpLnByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnYScsIDEwKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDExKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDEyKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDEzKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDE0KS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKS5wcm9wZXJ0eSgnYScsIDE1KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KGRlc2MpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkuUHJvcGVydGllczxvYmplY3Q+KCkuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5Qcm9wZXJ0aWVzKCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfRV9wcm9wZXJ0aWVzX29yZGVyIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5wcm9wZXJ0eShcImFcIiwgMTBpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDExaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxMmkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTNpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDE0aSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLnByb3BlcnR5KFwiYVwiLCAxNWkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShzdHJpbmcxLCBzdHJpbmcyKS5hcyhzdHJpbmczKS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMCkucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjApLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUxKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMSkuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTIpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXIyKS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMSkucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjMpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUyKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyNCkuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTMpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXI1KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkFkZFYoKHN0cmluZykgXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5Qcm9wZXJ0eShcImFcIiwgMTApLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5Qcm9wZXJ0eShcImFcIiwgMTEpLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5Qcm9wZXJ0eShcImFcIiwgMTIpLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5Qcm9wZXJ0eShcImFcIiwgMTMpLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5Qcm9wZXJ0eShcImFcIiwgMTQpLkFkZEUoKHN0cmluZykgXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5Qcm9wZXJ0eShcImFcIiwgMTUpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5BZGRWKFwicGVyc29uXCIpLlByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLkFzKFwiYVwiKS5BZGRFKFwic2VsZlwiKS5Gcm9tKFwiYVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5Qcm9wZXJ0eShcImFcIiwgaW50MzIoMTApKS5BZGRFKFwic2VsZlwiKS5Gcm9tKFwiYVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5Qcm9wZXJ0eShcImFcIiwgaW50MzIoMTEpKS5BZGRFKFwic2VsZlwiKS5Gcm9tKFwiYVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5Qcm9wZXJ0eShcImFcIiwgaW50MzIoMTIpKS5BZGRFKFwic2VsZlwiKS5Gcm9tKFwiYVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5Qcm9wZXJ0eShcImFcIiwgaW50MzIoMTMpKS5BZGRFKFwic2VsZlwiKS5Gcm9tKFwiYVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5Qcm9wZXJ0eShcImFcIiwgaW50MzIoMTQpKS5BZGRFKFwic2VsZlwiKS5Gcm9tKFwiYVwiKS5UbyhcImFcIikuUHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKS5Qcm9wZXJ0eShcImFcIiwgaW50MzIoMTUpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5wcm9wZXJ0eShcImFcIiwgMTBpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDExaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxMmkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTNpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDE0aSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLnByb3BlcnR5KFwiYVwiLCAxNWkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjVkKS5wcm9wZXJ0eShcImFcIiwgMTApLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTEpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTIpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTMpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTQpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTUpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuYXMoXCJhXCIpLmFkZEUoXCJzZWxmXCIpLmZyb21fKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41KS5wcm9wZXJ0eShcImFcIiwgMTApLmFkZEUoXCJzZWxmXCIpLmZyb21fKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5wcm9wZXJ0eShcImFcIiwgMTEpLmFkZEUoXCJzZWxmXCIpLmZyb21fKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5wcm9wZXJ0eShcImFcIiwgMTIpLmFkZEUoXCJzZWxmXCIpLmZyb21fKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wKS5wcm9wZXJ0eShcImFcIiwgMTMpLmFkZEUoXCJzZWxmXCIpLmZyb21fKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40KS5wcm9wZXJ0eShcImFcIiwgMTQpLmFkZEUoXCJzZWxmXCIpLmZyb21fKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yKS5wcm9wZXJ0eShcImFcIiwgMTUpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuYWRkX3YoJ3BlcnNvbicpLnByb3BlcnR5KCduYW1lJywgJ2FsaWNlJykuYXNfKCdhJykuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNSkucHJvcGVydHkoJ2EnLCAxMCkuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkucHJvcGVydHkoJ2EnLCAxMSkuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkucHJvcGVydHkoJ2EnLCAxMikuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDEuMCkucHJvcGVydHkoJ2EnLCAxMykuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuNCkucHJvcGVydHkoJ2EnLCAxNCkuYWRkX2UoJ3NlbGYnKS5mcm9tXygnYScpLnRvKCdhJykucHJvcGVydHkoJ3dlaWdodCcsIDAuMikucHJvcGVydHkoJ2EnLCAxNSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKS5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5PcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkuUHJvcGVydGllcygpLk9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19FX3Byb3BlcnRpZXNfb3JkZXJfYnlYZGVzY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJhXCIsIDEwaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMWkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTJpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDEzaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTVpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KFwibmFtZVwiLCBcImFsaWNlXCIpLmFzKFwiYVwiKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC41ZCkucHJvcGVydHkoXCJhXCIsIDEwaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMWkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTJpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMS4wZCkucHJvcGVydHkoXCJhXCIsIDEzaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjJkKS5wcm9wZXJ0eShcImFcIiwgMTVpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5hZGRWKHN0cmluZzApLnByb3BlcnR5KHN0cmluZzEsIHN0cmluZzIpLmFzKHN0cmluZzMpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUwKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMCkuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTEpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXIxKS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMikucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjIpLmFkZEUoc3RyaW5nNCkuZnJvbShzdHJpbmczKS50byhzdHJpbmczKS5wcm9wZXJ0eShzdHJpbmc1LCBkb3VibGUxKS5wcm9wZXJ0eShzdHJpbmczLCBpbnRlZ2VyMykuYWRkRShzdHJpbmc0KS5mcm9tKHN0cmluZzMpLnRvKHN0cmluZzMpLnByb3BlcnR5KHN0cmluZzUsIGRvdWJsZTIpLnByb3BlcnR5KHN0cmluZzMsIGludGVnZXI0KS5hZGRFKHN0cmluZzQpLmZyb20oc3RyaW5nMykudG8oc3RyaW5nMykucHJvcGVydHkoc3RyaW5nNSwgZG91YmxlMykucHJvcGVydHkoc3RyaW5nMywgaW50ZWdlcjUpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5BcyhcImFcIikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLlByb3BlcnR5KFwiYVwiLCAxMCkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLlByb3BlcnR5KFwiYVwiLCAxMSkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLlByb3BlcnR5KFwiYVwiLCAxMikuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLlByb3BlcnR5KFwiYVwiLCAxMykuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLlByb3BlcnR5KFwiYVwiLCAxNCkuQWRkRSgoc3RyaW5nKSBcInNlbGZcIikuRnJvbShcImFcIikuVG8oXCJhXCIpLlByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLlByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkFkZFYoXCJwZXJzb25cIikuUHJvcGVydHkoXCJuYW1lXCIsIFwiYWxpY2VcIikuQXMoXCJhXCIpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMCkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMSkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMikpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxMykpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxNCkpLkFkZEUoXCJzZWxmXCIpLkZyb20oXCJhXCIpLlRvKFwiYVwiKS5Qcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpLlByb3BlcnR5KFwiYVwiLCBpbnQzMigxNSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMGkpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjBkKS5wcm9wZXJ0eShcImFcIiwgMTFpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC40ZCkucHJvcGVydHkoXCJhXCIsIDEyaSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxM2kpLmFkZEUoXCJzZWxmXCIpLmZyb20oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjRkKS5wcm9wZXJ0eShcImFcIiwgMTRpKS5hZGRFKFwic2VsZlwiKS5mcm9tKFwiYVwiKS50byhcImFcIikucHJvcGVydHkoXCJ3ZWlnaHRcIiwgMC4yZCkucHJvcGVydHkoXCJhXCIsIDE1aSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNWQpLnByb3BlcnR5KFwiYVwiLCAxMCkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMSkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxMikuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDEuMGQpLnByb3BlcnR5KFwiYVwiLCAxMykuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuNGQpLnByb3BlcnR5KFwiYVwiLCAxNCkuYWRkRShcInNlbGZcIikuZnJvbShcImFcIikudG8oXCJhXCIpLnByb3BlcnR5KFwid2VpZ2h0XCIsIDAuMmQpLnByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShcIm5hbWVcIiwgXCJhbGljZVwiKS5hcyhcImFcIikuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjUpLnByb3BlcnR5KFwiYVwiLCAxMCkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwiYVwiLCAxMSkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLnByb3BlcnR5KFwiYVwiLCAxMikuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAxLjApLnByb3BlcnR5KFwiYVwiLCAxMykuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjQpLnByb3BlcnR5KFwiYVwiLCAxNCkuYWRkRShcInNlbGZcIikuZnJvbV8oXCJhXCIpLnRvKFwiYVwiKS5wcm9wZXJ0eShcIndlaWdodFwiLCAwLjIpLnByb3BlcnR5KFwiYVwiLCAxNSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5hZGRfdigncGVyc29uJykucHJvcGVydHkoJ25hbWUnLCAnYWxpY2UnKS5hc18oJ2EnKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC41KS5wcm9wZXJ0eSgnYScsIDEwKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDExKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDEyKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMS4wKS5wcm9wZXJ0eSgnYScsIDEzKS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC40KS5wcm9wZXJ0eSgnYScsIDE0KS5hZGRfZSgnc2VsZicpLmZyb21fKCdhJykudG8oJ2EnKS5wcm9wZXJ0eSgnd2VpZ2h0JywgMC4yKS5wcm9wZXJ0eSgnYScsIDE1KSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KGRlc2MpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLlByb3BlcnRpZXM8b2JqZWN0PigpLk9yZGVyKCkuQnkoT3JkZXIuRGVzYykiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5Qcm9wZXJ0aWVzKCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpLnByb3BlcnRpZXMoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3Rfb3JkZXIiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoXCJ6enpcIixcImZvb1wiLFVVSUQoXCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksW1wiYVwiLFwiYlwiLFwiY1wiLFwiZFwiXSwxLGRhdGV0aW1lKFwiMjAyMy0wOC0wMVQwMDowMDowMFpcIiksW1wiYVwiLFwiYlwiLFwiY1wiXSxbYTpcImFcIixiOlwiYlwiXSxudWxsLDIuMGQsZGF0ZXRpbWUoXCIyMDIzLTAxLTAxVDAwOjAwOjAwWlwiKSx7XCJ4XCIsXCJ5XCIsXCJ6XCJ9LFthOlwiYVwiLGI6ZmFsc2UsYzpcImNcIl0sXCJiYXJcIixVVUlEKFwiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLHRydWUsZmFsc2UsSW5maW5pdHksTmFOLC1JbmZpbml0eSkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KFwienp6XCIsIFwiZm9vXCIsIFVVSUQoXCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIFtcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIl0sIDEsIGRhdGV0aW1lKFwiMjAyMy0wOC0wMVQwMDowMDowMFpcIiksIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgW2E6XCJhXCIsIGI6XCJiXCJdLCBudWxsLCAyLjBkLCBkYXRldGltZShcIjIwMjMtMDEtMDFUMDA6MDA6MDBaXCIpLCB7XCJ4XCIsIFwieVwiLCBcInpcIn0sIFthOlwiYVwiLCBiOmZhbHNlLCBjOlwiY1wiXSwgXCJiYXJcIiwgVVVJRChcIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgdHJ1ZSwgZmFsc2UsIEluZmluaXR5LCBOYU4sIC1JbmZpbml0eSkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChcInp6elwiLCBcImZvb1wiLCBVVUlEKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCBbXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCJdLCAxLCBkYXRldGltZShcIjIwMjMtMDgtMDFUMDA6MDA6MDBaXCIpLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0sIFthOlwiYVwiLCBiOlwiYlwiXSwgbnVsbCwgMi4wZCwgZGF0ZXRpbWUoXCIyMDIzLTAxLTAxVDAwOjAwOjAwWlwiKSwge1wieFwiLCBcInlcIiwgXCJ6XCJ9LCBbYTpcImFcIiwgYjpmYWxzZSwgYzpcImNcIl0sIFwiYmFyXCIsIFVVSUQoXCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIHRydWUsIGZhbHNlLCBJbmZpbml0eSwgTmFOLCAtSW5maW5pdHkpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHN0cmluZzAsIHN0cmluZzEsIHN0cmluZzIsIGxpc3QwLCBudW1iZXIwLCBvZmZzZXRkYXRldGltZTAsIGxpc3QxLCBtYXAwLCBvYmplY3QwLCBkb3VibGUwLCBvZmZzZXRkYXRldGltZTEsIHNldDAsIG1hcDEsIHN0cmluZzMsIHN0cmluZzQsIGJvb2xlYW4wLCBib29sZWFuMSwgbnVtYmVyMSwgbnVtYmVyMiwgbnVtYmVyMykub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KFwienp6XCIsIFwiZm9vXCIsIEd1aWQuUGFyc2UoXCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIG5ldyBMaXN0PG9iamVjdD4geyBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiB9LCAxLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDgtMDFUMDA6MDBaXCIpLCBuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiYlwiLCBcImNcIiB9LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJhXCIsIFwiYVwiIH0sIHsgXCJiXCIsIFwiYlwiIH19LCBudWxsLCAyLjBkLCBEYXRlVGltZU9mZnNldC5QYXJzZShcIjIwMjMtMDEtMDFUMDA6MDBaXCIpLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgXCJ4XCIsIFwieVwiLCBcInpcIiB9LCBuZXcgRGljdGlvbmFyeTxvYmplY3QsIG9iamVjdD4ge3sgXCJhXCIsIFwiYVwiIH0sIHsgXCJiXCIsIGZhbHNlIH0sIHsgXCJjXCIsIFwiY1wiIH19LCBcImJhclwiLCBHdWlkLlBhcnNlKFwiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCB0cnVlLCBmYWxzZSwgRG91YmxlLlBvc2l0aXZlSW5maW5pdHksIERvdWJsZS5OYU4sIERvdWJsZS5OZWdhdGl2ZUluZmluaXR5KS5PcmRlcigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoXCJ6enpcIiwgXCJmb29cIiwgdXVpZC5NdXN0UGFyc2UoXCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIFtdaW50ZXJmYWNle317XCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCJ9LCAxLCB0aW1lLkRhdGUoMjAyMywgOCwgMSwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpLCBbXWludGVyZmFjZXt9e1wiYVwiLCBcImJcIiwgXCJjXCJ9LCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhXCI6IFwiYVwiLCBcImJcIjogXCJiXCIgfSwgbmlsLCAyLjAsIHRpbWUuRGF0ZSgyMDIzLCAxLCAxLCAwLCAwLCAwLCAwLCB0aW1lLkZpeGVkWm9uZShcIlVUQyswMDowMFwiLCAwKSksIGdyZW1saW5nby5OZXdTaW1wbGVTZXQoXCJ4XCIsIFwieVwiLCBcInpcIiksIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcImFcIjogXCJhXCIsIFwiYlwiOiBmYWxzZSwgXCJjXCI6IFwiY1wiIH0sIFwiYmFyXCIsIHV1aWQuTXVzdFBhcnNlKFwiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCB0cnVlLCBmYWxzZSwgbWF0aC5JbmYoMSksIG1hdGguTmFOKCksIG1hdGguSW5mKC0xKSkuT3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChcInp6elwiLCBcImZvb1wiLCBVVUlELmZyb21TdHJpbmcoXCI2MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIFtcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIl0sIDEsIGRhdGV0aW1lKFwiMjAyMy0wOC0wMVQwMDowMDowMFpcIiksIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgW2E6XCJhXCIsIGI6XCJiXCJdLCBudWxsLCAyLjBkLCBkYXRldGltZShcIjIwMjMtMDEtMDFUMDA6MDA6MDBaXCIpLCBbXCJ4XCIsIFwieVwiLCBcInpcIl0gYXMgU2V0LCBbYTpcImFcIiwgYjpmYWxzZSwgYzpcImNcIl0sIFwiYmFyXCIsIFVVSUQuZnJvbVN0cmluZyhcIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgdHJ1ZSwgZmFsc2UsIERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSwgTmFOLCBEb3VibGUuTkVHQVRJVkVfSU5GSU5JVFkpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KFwienp6XCIsIFwiZm9vXCIsIFVVSUQuZnJvbVN0cmluZyhcIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgYWRkKFwiY1wiKTsgYWRkKFwiZFwiKTsgfX0sIDEsIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wOC0wMVQwMDowMFpcIiksIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcImFcIik7IGFkZChcImJcIik7IGFkZChcImNcIik7IH19LCBuZXcgTGlua2VkSGFzaE1hcDxPYmplY3QsIE9iamVjdD4oKSB7eyBwdXQoXCJhXCIsIFwiYVwiKTsgcHV0KFwiYlwiLCBcImJcIik7IH19LCBudWxsLCAyLjBkLCBPZmZzZXREYXRlVGltZS5wYXJzZShcIjIwMjMtMDEtMDFUMDA6MDBaXCIpLCBuZXcgSGFzaFNldDxPYmplY3Q+KCkge3sgYWRkKFwieFwiKTsgYWRkKFwieVwiKTsgYWRkKFwielwiKTsgfX0sIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFcIiwgXCJhXCIpOyBwdXQoXCJiXCIsIGZhbHNlKTsgcHV0KFwiY1wiLCBcImNcIik7IH19LCBcImJhclwiLCBVVUlELmZyb21TdHJpbmcoXCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIHRydWUsIGZhbHNlLCBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFksIERvdWJsZS5OYU4sIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSkub3JkZXIoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoXCJ6enpcIiwgXCJmb29cIiwgdXVpZC5wYXJzZShcIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgW1wiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiXSwgMSwgbmV3IERhdGUoJzIwMjMtMDgtMDFUMDA6MDBaJyksIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgbmV3IE1hcChbW1wiYVwiLCBcImFcIl0sIFtcImJcIiwgXCJiXCJdXSksIG51bGwsIDIuMCwgbmV3IERhdGUoJzIwMjMtMDEtMDFUMDA6MDBaJyksIG5ldyBTZXQoW1wieFwiLCBcInlcIiwgXCJ6XCJdKSwgbmV3IE1hcChbW1wiYVwiLCBcImFcIl0sIFtcImJcIiwgZmFsc2VdLCBbXCJjXCIsIFwiY1wiXV0pLCBcImJhclwiLCB1dWlkLnBhcnNlKFwiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCB0cnVlLCBmYWxzZSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLCBOdW1iZXIuTmFOLCBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpLm9yZGVyKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoJ3p6eicsICdmb28nLCB1dWlkLlVVSUQoJzYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMScpLCBbJ2EnLCAnYicsICdjJywgJ2QnXSwgMSwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wOC0wMVQwMDowMCswMDowMCcpLCBbJ2EnLCAnYicsICdjJ10sIHsgJ2EnOiAnYScsICdiJzogJ2InIH0sIE5vbmUsIDIuMCwgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbWlzb2Zvcm1hdCgnMjAyMy0wMS0wMVQwMDowMCswMDowMCcpLCB7J3gnLCAneScsICd6J30sIHsgJ2EnOiAnYScsICdiJzogRmFsc2UsICdjJzogJ2MnIH0sICdiYXInLCB1dWlkLlVVSUQoJzUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMScpLCBUcnVlLCBGYWxzZSwgZmxvYXQoJ2luZicpLCBmbG9hdCgnbmFuJyksIGZsb2F0KCctaW5mJykpLm9yZGVyKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0X29yZGVyX2J5WGRlc2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KFwienp6XCIsXCJmb29cIixVVUlEKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLFtcImFcIixcImJcIixcImNcIixcImRcIl0sMSxkYXRldGltZShcIjIwMjMtMDgtMDFUMDA6MDA6MDBaXCIpLFtcImFcIixcImJcIixcImNcIl0sW2E6XCJhXCIsYjpcImJcIl0sbnVsbCwyLjBkLGRhdGV0aW1lKFwiMjAyMy0wMS0wMVQwMDowMDowMFpcIikse1wieFwiLFwieVwiLFwielwifSxbYTpcImFcIixiOmZhbHNlLGM6XCJjXCJdLFwiYmFyXCIsVVVJRChcIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSx0cnVlLGZhbHNlLEluZmluaXR5LE5hTiwtSW5maW5pdHkpLm9yZGVyKCkuYnkoZGVzYykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChcInp6elwiLCBcImZvb1wiLCBVVUlEKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCBbXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCJdLCAxLCBkYXRldGltZShcIjIwMjMtMDgtMDFUMDA6MDA6MDBaXCIpLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0sIFthOlwiYVwiLCBiOlwiYlwiXSwgbnVsbCwgMi4wZCwgZGF0ZXRpbWUoXCIyMDIzLTAxLTAxVDAwOjAwOjAwWlwiKSwge1wieFwiLCBcInlcIiwgXCJ6XCJ9LCBbYTpcImFcIiwgYjpmYWxzZSwgYzpcImNcIl0sIFwiYmFyXCIsIFVVSUQoXCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIHRydWUsIGZhbHNlLCBJbmZpbml0eSwgTmFOLCAtSW5maW5pdHkpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoXCJ6enpcIiwgXCJmb29cIiwgVVVJRChcIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgW1wiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiXSwgMSwgZGF0ZXRpbWUoXCIyMDIzLTA4LTAxVDAwOjAwOjAwWlwiKSwgW1wiYVwiLCBcImJcIiwgXCJjXCJdLCBbYTpcImFcIiwgYjpcImJcIl0sIG51bGwsIDIuMGQsIGRhdGV0aW1lKFwiMjAyMy0wMS0wMVQwMDowMDowMFpcIiksIHtcInhcIiwgXCJ5XCIsIFwielwifSwgW2E6XCJhXCIsIGI6ZmFsc2UsIGM6XCJjXCJdLCBcImJhclwiLCBVVUlEKFwiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCB0cnVlLCBmYWxzZSwgSW5maW5pdHksIE5hTiwgLUluZmluaXR5KS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChzdHJpbmcwLCBzdHJpbmcxLCBzdHJpbmcyLCBsaXN0MCwgbnVtYmVyMCwgb2Zmc2V0ZGF0ZXRpbWUwLCBsaXN0MSwgbWFwMCwgb2JqZWN0MCwgZG91YmxlMCwgb2Zmc2V0ZGF0ZXRpbWUxLCBzZXQwLCBtYXAxLCBzdHJpbmczLCBzdHJpbmc0LCBib29sZWFuMCwgYm9vbGVhbjEsIG51bWJlcjEsIG51bWJlcjIsIG51bWJlcjMpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihcInp6elwiLCBcImZvb1wiLCBHdWlkLlBhcnNlKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCBuZXcgTGlzdDxvYmplY3Q+IHsgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIgfSwgMSwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTA4LTAxVDAwOjAwWlwiKSwgbmV3IExpc3Q8b2JqZWN0PiB7IFwiYVwiLCBcImJcIiwgXCJjXCIgfSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwiYVwiLCBcImFcIiB9LCB7IFwiYlwiLCBcImJcIiB9fSwgbnVsbCwgMi4wZCwgRGF0ZVRpbWVPZmZzZXQuUGFyc2UoXCIyMDIzLTAxLTAxVDAwOjAwWlwiKSwgbmV3IEhhc2hTZXQ8b2JqZWN0PiB7IFwieFwiLCBcInlcIiwgXCJ6XCIgfSwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwiYVwiLCBcImFcIiB9LCB7IFwiYlwiLCBmYWxzZSB9LCB7IFwiY1wiLCBcImNcIiB9fSwgXCJiYXJcIiwgR3VpZC5QYXJzZShcIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgdHJ1ZSwgZmFsc2UsIERvdWJsZS5Qb3NpdGl2ZUluZmluaXR5LCBEb3VibGUuTmFOLCBEb3VibGUuTmVnYXRpdmVJbmZpbml0eSkuT3JkZXIoKS5CeShPcmRlci5EZXNjKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KFwienp6XCIsIFwiZm9vXCIsIHV1aWQuTXVzdFBhcnNlKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCBbXWludGVyZmFjZXt9e1wiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwifSwgMSwgdGltZS5EYXRlKDIwMjMsIDgsIDEsIDAsIDAsIDAsIDAsIHRpbWUuRml4ZWRab25lKFwiVVRDKzAwOjAwXCIsIDApKSwgW11pbnRlcmZhY2V7fXtcImFcIiwgXCJiXCIsIFwiY1wifSwgbWFwW2ludGVyZmFjZXt9XWludGVyZmFjZXt9e1wiYVwiOiBcImFcIiwgXCJiXCI6IFwiYlwiIH0sIG5pbCwgMi4wLCB0aW1lLkRhdGUoMjAyMywgMSwgMSwgMCwgMCwgMCwgMCwgdGltZS5GaXhlZFpvbmUoXCJVVEMrMDA6MDBcIiwgMCkpLCBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwieFwiLCBcInlcIiwgXCJ6XCIpLCBtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJhXCI6IFwiYVwiLCBcImJcIjogZmFsc2UsIFwiY1wiOiBcImNcIiB9LCBcImJhclwiLCB1dWlkLk11c3RQYXJzZShcIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgdHJ1ZSwgZmFsc2UsIG1hdGguSW5mKDEpLCBtYXRoLk5hTigpLCBtYXRoLkluZigtMSkpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFwienp6XCIsIFwiZm9vXCIsIFVVSUQuZnJvbVN0cmluZyhcIjYxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgW1wiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiXSwgMSwgZGF0ZXRpbWUoXCIyMDIzLTA4LTAxVDAwOjAwOjAwWlwiKSwgW1wiYVwiLCBcImJcIiwgXCJjXCJdLCBbYTpcImFcIiwgYjpcImJcIl0sIG51bGwsIDIuMGQsIGRhdGV0aW1lKFwiMjAyMy0wMS0wMVQwMDowMDowMFpcIiksIFtcInhcIiwgXCJ5XCIsIFwielwiXSBhcyBTZXQsIFthOlwiYVwiLCBiOmZhbHNlLCBjOlwiY1wiXSwgXCJiYXJcIiwgVVVJRC5mcm9tU3RyaW5nKFwiNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCB0cnVlLCBmYWxzZSwgRG91YmxlLlBPU0lUSVZFX0lORklOSVRZLCBOYU4sIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWSkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QoXCJ6enpcIiwgXCJmb29cIiwgVVVJRC5mcm9tU3RyaW5nKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJhXCIpOyBhZGQoXCJiXCIpOyBhZGQoXCJjXCIpOyBhZGQoXCJkXCIpOyB9fSwgMSwgT2Zmc2V0RGF0ZVRpbWUucGFyc2UoXCIyMDIzLTA4LTAxVDAwOjAwWlwiKSwgbmV3IEFycmF5TGlzdDxPYmplY3Q+KCkge3sgYWRkKFwiYVwiKTsgYWRkKFwiYlwiKTsgYWRkKFwiY1wiKTsgfX0sIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcImFcIiwgXCJhXCIpOyBwdXQoXCJiXCIsIFwiYlwiKTsgfX0sIG51bGwsIDIuMGQsIE9mZnNldERhdGVUaW1lLnBhcnNlKFwiMjAyMy0wMS0wMVQwMDowMFpcIiksIG5ldyBIYXNoU2V0PE9iamVjdD4oKSB7eyBhZGQoXCJ4XCIpOyBhZGQoXCJ5XCIpOyBhZGQoXCJ6XCIpOyB9fSwgbmV3IExpbmtlZEhhc2hNYXA8T2JqZWN0LCBPYmplY3Q+KCkge3sgcHV0KFwiYVwiLCBcImFcIik7IHB1dChcImJcIiwgZmFsc2UpOyBwdXQoXCJjXCIsIFwiY1wiKTsgfX0sIFwiYmFyXCIsIFVVSUQuZnJvbVN0cmluZyhcIjUxMDA4MDhiLTYyZjktNDJiNy05NTdlLWVkNjZjMzBmNDBkMVwiKSwgdHJ1ZSwgZmFsc2UsIERvdWJsZS5QT1NJVElWRV9JTkZJTklUWSwgRG91YmxlLk5hTiwgRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChcInp6elwiLCBcImZvb1wiLCB1dWlkLnBhcnNlKFwiNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxXCIpLCBbXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCJdLCAxLCBuZXcgRGF0ZSgnMjAyMy0wOC0wMVQwMDowMFonKSwgW1wiYVwiLCBcImJcIiwgXCJjXCJdLCBuZXcgTWFwKFtbXCJhXCIsIFwiYVwiXSwgW1wiYlwiLCBcImJcIl1dKSwgbnVsbCwgMi4wLCBuZXcgRGF0ZSgnMjAyMy0wMS0wMVQwMDowMFonKSwgbmV3IFNldChbXCJ4XCIsIFwieVwiLCBcInpcIl0pLCBuZXcgTWFwKFtbXCJhXCIsIFwiYVwiXSwgW1wiYlwiLCBmYWxzZV0sIFtcImNcIiwgXCJjXCJdXSksIFwiYmFyXCIsIHV1aWQucGFyc2UoXCI1MTAwODA4Yi02MmY5LTQyYjctOTU3ZS1lZDY2YzMwZjQwZDFcIiksIHRydWUsIGZhbHNlLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIE51bWJlci5OYU4sIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCgnenp6JywgJ2ZvbycsIHV1aWQuVVVJRCgnNjEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxJyksIFsnYScsICdiJywgJ2MnLCAnZCddLCAxLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTA4LTAxVDAwOjAwKzAwOjAwJyksIFsnYScsICdiJywgJ2MnXSwgeyAnYSc6ICdhJywgJ2InOiAnYicgfSwgTm9uZSwgMi4wLCBkYXRldGltZS5kYXRldGltZS5mcm9taXNvZm9ybWF0KCcyMDIzLTAxLTAxVDAwOjAwKzAwOjAwJyksIHsneCcsICd5JywgJ3onfSwgeyAnYSc6ICdhJywgJ2InOiBGYWxzZSwgJ2MnOiAnYycgfSwgJ2JhcicsIHV1aWQuVVVJRCgnNTEwMDgwOGItNjJmOS00MmI3LTk1N2UtZWQ2NmMzMGY0MGQxJyksIFRydWUsIEZhbHNlLCBmbG9hdCgnaW5mJyksIGZsb2F0KCduYW4nKSwgZmxvYXQoJy1pbmYnKSkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfb3JkZXJfYnlYYXNjWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KGFzYykiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5hc2MpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuT3JkZXIoKS5CeShPcmRlci5Bc2MpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuQXNjKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5hc2MpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfb3JkZXJfYnlYZGVzY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShkZXNjKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5PdXQoKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0KCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dF9hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShhc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLmFzKHN0cmluZzApLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShPcmRlci5Bc2MpLlNlbGVjdDxvYmplY3Q+KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuQXNjKS5TZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dCgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkuYXNfKCdoZWFkJykucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoJ2hlYWQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KGRlc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkuYXMoc3RyaW5nMCkucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5TZWxlY3Q8b2JqZWN0PihcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5BcyhcImhlYWRcIikuUGF0aCgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpLlNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLm91dCgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5hc18oJ2hlYWQnKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoJ2hlYWQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRFX29yZGVyX2J5WGFzY1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoYXNjKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dEUoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5PdXRFKCkuT3JkZXIoKS5CeShPcmRlci5Bc2MpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0RSgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkFzYykiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXRfZSgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRFX29yZGVyX2J5WGRlc2NYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dEUoKS5vcmRlcigpLmJ5KGRlc2MpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dEUoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dEUoKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0RSgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkRlc2MpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dEUoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXRFKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0RSgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0X2UoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dEVfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhhc2NYX3NlbGVjdFhoZWFkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KGFzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dEUoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dEUoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuYXMoc3RyaW5nMCkucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0RSgpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShPcmRlci5Bc2MpLlNlbGVjdDxvYmplY3Q+KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dEUoKS5BcyhcImhlYWRcIikuUGF0aCgpLk9yZGVyKCkuQnkoZ3JlbWxpbmdvLk9yZGVyLkFzYykuU2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0RSgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dEUoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dF9lKCkuYXNfKCdoZWFkJykucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoJ2hlYWQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRFX2FzWGhlYWRYX3BhdGhfb3JkZXJfYnlYZGVzY1hfc2VsZWN0WGhlYWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dEUoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLm91dEUoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dEUoKS5hcyhzdHJpbmcwKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0RSgpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5TZWxlY3Q8b2JqZWN0PihcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXRFKCkuQXMoXCJoZWFkXCIpLlBhdGgoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5EZXNjKS5TZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dEUoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0RSgpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXRFKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0X2UoKS5hc18oJ2hlYWQnKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoJ2hlYWQnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9vdXRfcHJvcGVydGllc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYX3ZhbHVlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLnByb3BlcnRpZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoYXNjKS5zZWxlY3QoXCJoZWFkXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLnByb3BlcnRpZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoXCJoZWFkXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLnByb3BlcnRpZXMoKS5hcyhzdHJpbmcwKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChzdHJpbmcwKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlByb3BlcnRpZXM8b2JqZWN0PigpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShPcmRlci5Bc2MpLlNlbGVjdDxvYmplY3Q+KFwiaGVhZFwiKS5WYWx1ZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5Qcm9wZXJ0aWVzKCkuQXMoXCJoZWFkXCIpLlBhdGgoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5Bc2MpLlNlbGVjdChcImhlYWRcIikuVmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLnByb3BlcnRpZXMoKS5hc18oJ2hlYWQnKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdCgnaGVhZCcpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3Byb3BlcnRpZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFhfdmFsdWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkucHJvcGVydGllcygpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShkZXNjKS5zZWxlY3QoXCJoZWFkXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkucHJvcGVydGllcygpLmFzKHN0cmluZzApLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChzdHJpbmcwKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlByb3BlcnRpZXM8b2JqZWN0PigpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShPcmRlci5EZXNjKS5TZWxlY3Q8b2JqZWN0PihcImhlYWRcIikuVmFsdWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuUHJvcGVydGllcygpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuU2VsZWN0KFwiaGVhZFwiKS5WYWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dCgpLm91dCgpLnByb3BlcnRpZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKS52YWx1ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5wcm9wZXJ0aWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikudmFsdWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0KCkucHJvcGVydGllcygpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoXCJoZWFkXCIpLnZhbHVlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCkub3V0KCkucHJvcGVydGllcygpLmFzXygnaGVhZCcpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdCgnaGVhZCcpLnZhbHVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3V0X3ZhbHVlc19hc1hoZWFkWF9wYXRoX29yZGVyX2J5WGFzY1hfc2VsZWN0WGhlYWRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShhc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS52YWx1ZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuYXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKHN0cmluZzApLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlZhbHVlczxvYmplY3Q+KCkuQXMoXCJoZWFkXCIpLlBhdGgoKS5PcmRlcigpLkJ5KE9yZGVyLkFzYykuU2VsZWN0PG9iamVjdD4oXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuT3V0KCkuVmFsdWVzKCkuQXMoXCJoZWFkXCIpLlBhdGgoKS5PcmRlcigpLkJ5KGdyZW1saW5nby5PcmRlci5Bc2MpLlNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmFzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS52YWx1ZXMoKS5hc18oJ2hlYWQnKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5hc2MpLnNlbGVjdCgnaGVhZCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X291dF92YWx1ZXNfYXNYaGVhZFhfcGF0aF9vcmRlcl9ieVhkZXNjWF9zZWxlY3RYaGVhZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KGRlc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS52YWx1ZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS52YWx1ZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoc3RyaW5nMCkucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLk91dCgpLlZhbHVlczxvYmplY3Q+KCkuQXMoXCJoZWFkXCIpLlBhdGgoKS5PcmRlcigpLkJ5KE9yZGVyLkRlc2MpLlNlbGVjdDxvYmplY3Q+KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLk91dCgpLlZhbHVlcygpLkFzKFwiaGVhZFwiKS5QYXRoKCkuT3JkZXIoKS5CeShncmVtbGluZ28uT3JkZXIuRGVzYykuU2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5vdXQoKS52YWx1ZXMoKS5hcyhcImhlYWRcIikucGF0aCgpLm9yZGVyKCkuYnkoT3JkZXIuZGVzYykuc2VsZWN0KFwiaGVhZFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkub3V0KCkudmFsdWVzKCkuYXMoXCJoZWFkXCIpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdChcImhlYWRcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzKFwiaGVhZFwiKS5wYXRoKCkub3JkZXIoKS5ieShPcmRlci5kZXNjKS5zZWxlY3QoXCJoZWFkXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLm91dCgpLnZhbHVlcygpLmFzXygnaGVhZCcpLnBhdGgoKS5vcmRlcigpLmJ5KE9yZGVyLmRlc2MpLnNlbGVjdCgnaGVhZCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdmFsdWVYbmFtZVhfYWdncmVnYXRlWHhYX2NhcFh4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFnZ3JlZ2F0ZShcInhcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYWdncmVnYXRlKFwieFwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYWdncmVnYXRlKFwieFwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS52YWx1ZXMoc3RyaW5nMCkuYWdncmVnYXRlKHN0cmluZzEpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQWdncmVnYXRlKFwieFwiKS5DYXA8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5WYWx1ZXMoXCJuYW1lXCIpLkFnZ3JlZ2F0ZShcInhcIikuQ2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS52YWx1ZXMoXCJuYW1lXCIpLmFnZ3JlZ2F0ZShcInhcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkudmFsdWVzKFwibmFtZVwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnZhbHVlcyhcIm5hbWVcIikuYWdncmVnYXRlKFwieFwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnZhbHVlcygnbmFtZScpLmFnZ3JlZ2F0ZSgneCcpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdncmVnYXRlWHhYX2J5WG5hbWVYX2NhcFh4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJuYW1lXCIpLkNhcDxvYmplY3Q+KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJuYW1lXCIpLkNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ3gnKS5ieSgnbmFtZScpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X2FnZ3JlZ2F0ZVhhWF9wYXRoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLmFnZ3JlZ2F0ZShcImFcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KCkuYWdncmVnYXRlKFwiYVwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkuYWdncmVnYXRlKFwiYVwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuQWdncmVnYXRlKFwiYVwiKS5QYXRoKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5BZ2dyZWdhdGUoXCJhXCIpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5hZ2dyZWdhdGUoXCJhXCIpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkuYWdncmVnYXRlKFwiYVwiKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLmFnZ3JlZ2F0ZShcImFcIikucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLmFnZ3JlZ2F0ZSgnYScpLnBhdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHBlcnNvblhfYWdncmVnYXRlWHhYX2J5WGFnZVhfY2FwWHhYX2FzWHlYX3NlbGVjdFh5WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwiYWdlXCIpLmNhcChcInhcIikuYXMoXCJ5XCIpLnNlbGVjdChcInlcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwiYWdlXCIpLmNhcChcInhcIikuYXMoXCJ5XCIpLnNlbGVjdChcInlcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpLmFzKFwieVwiKS5zZWxlY3QoXCJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5hZ2dyZWdhdGUoc3RyaW5nMSkuYnkoc3RyaW5nMikuY2FwKHN0cmluZzEpLmFzKHN0cmluZzMpLnNlbGVjdChzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwieFwiKS5BcyhcInlcIikuU2VsZWN0PG9iamVjdD4oXCJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQWdncmVnYXRlKFwieFwiKS5CeShcImFnZVwiKS5DYXAoXCJ4XCIpLkFzKFwieVwiKS5TZWxlY3QoXCJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikuY2FwKFwieFwiKS5hcyhcInlcIikuc2VsZWN0KFwieVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpLmFzKFwieVwiKS5zZWxlY3QoXCJ5XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwiYWdlXCIpLmNhcChcInhcIikuYXMoXCJ5XCIpLnNlbGVjdChcInlcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5hZ2dyZWdhdGUoJ3gnKS5ieSgnYWdlJykuY2FwKCd4JykuYXNfKCd5Jykuc2VsZWN0KCd5JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYeFhfYnlYYWdlWF9jYXBYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJhZ2VcIikuQ2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwiYWdlXCIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgneCcpLmJ5KCdhZ2UnKS5jYXAoJ3gnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xvY2FsWGFnZ3JlZ2F0ZVh4WF9ieVhhZ2VYWF9jYXBYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwoYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KFwiYWdlXCIpKS5DYXA8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJhZ2VcIikpLkNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ3gnKS5ieSgnYWdlJykpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2xvY2FsWGFnZ3JlZ2F0ZVh4WF9ieVhhZ2VYWF9jYXBYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcImFnZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJhZ2VcIikpLkNhcDxvYmplY3Q+KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFN0cmF0ZWdpZXMoZ3JlbWxpbmdvLlByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcInhcIikuQnkoXCJhZ2VcIikpLkNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJhZ2VcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ3gnKS5ieSgnYWdlJykpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYX2FnZ3JlZ2F0ZVhhX2J5WG5hbWVYWF9vdXRfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkub3V0KCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcIm5hbWVcIikpLk91dCgpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcIm5hbWVcIikpLk91dCgpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnbmFtZScpKS5vdXQoKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX2xvY2FsWGFnZ3JlZ2F0ZVhhWF9ieVhuYW1lWFhfb3V0X2xvY2FsWGFnZ3JlZ2F0ZVhhWF9ieVhuYW1lWFhfbmFtZV9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKHZpZDEpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkudmFsdWVzKFwibmFtZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkudmFsdWVzKFwibmFtZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLnZhbHVlcyhcIm5hbWVcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKHZpZDEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpKS52YWx1ZXMoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJuYW1lXCIpKS5PdXQoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJuYW1lXCIpKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcIm5hbWVcIikpLk91dCgpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcIm5hbWVcIikpLlZhbHVlcyhcIm5hbWVcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS52YWx1ZXMoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLnZhbHVlcyhcIm5hbWVcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkudmFsdWVzKFwibmFtZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnbmFtZScpKS5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnbmFtZScpKS52YWx1ZXMoJ25hbWUnKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhX3NldFhfVl9ib3RoX25hbWVfbG9jYWxYYWdncmVnYXRlWF9hWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS52YWx1ZXMoc3RyaW5nMCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzEpKS5jYXAoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJvdGgoKS5WYWx1ZXMoXCJuYW1lXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmJvdGgoKS52YWx1ZXMoJ25hbWUnKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV9zZXRfaW5saW5lWF9WX2JvdGhfbmFtZV9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB7XCJhbGljZVwifSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB7XCJhbGljZVwifSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwge1wiYWxpY2VcIn0pLlYoKS5ib3RoKCkudmFsdWVzKFwibmFtZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIHNldDApLlYoKS5ib3RoKCkudmFsdWVzKHN0cmluZzEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBIYXNoU2V0PG9iamVjdD4geyBcImFsaWNlXCIgfSkuVigpLkJvdGgoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBncmVtbGluZ28uTmV3U2ltcGxlU2V0KFwiYWxpY2VcIikpLlYoKS5Cb3RoKCkuVmFsdWVzKFwibmFtZVwiKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgW1wiYWxpY2VcIl0gYXMgU2V0KS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgbmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZChcImFsaWNlXCIpOyB9fSkuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBTZXQoW1wiYWxpY2VcIl0pKS5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCB7J2FsaWNlJ30pLlYoKS5ib3RoKCkudmFsdWVzKCduYW1lJykubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYYWdncmVnYXRlWGFYX2J5WG91dEVYY3JlYXRlZFhfY291bnRYWF9vdXRfb3V0X2xvY2FsWGFnZ3JlZ2F0ZVhhWF9ieVhpbkVYY3JlYXRlZFhfd2VpZ2h0X3N1bVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KF9fLm91dEUoXCJjcmVhdGVkXCIpLmNvdW50KCkpKS5vdXQoKS5vdXQoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KF9fLmluRShcImNyZWF0ZWRcIikudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoX18ub3V0RShcImNyZWF0ZWRcIikuY291bnQoKSkpLm91dCgpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoX18uaW5FKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoX18ub3V0RShcImNyZWF0ZWRcIikuY291bnQoKSkpLm91dCgpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoX18uaW5FKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoX18ub3V0RShzdHJpbmcxKS5jb3VudCgpKSkub3V0KCkub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzApLmJ5KF9fLmluRShzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikuc3VtKCkpKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KF9fLk91dEUoXCJjcmVhdGVkXCIpLkNvdW50KCkpKS5PdXQoKS5PdXQoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoX18uSW5FKFwiY3JlYXRlZFwiKS5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5TdW08b2JqZWN0PigpKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KGdyZW1saW5nby5UX18uT3V0RShcImNyZWF0ZWRcIikuQ291bnQoKSkpLk91dCgpLk91dCgpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShncmVtbGluZ28uVF9fLkluRShcImNyZWF0ZWRcIikuVmFsdWVzKFwid2VpZ2h0XCIpLlN1bSgpKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KF9fLm91dEUoXCJjcmVhdGVkXCIpLmNvdW50KCkpKS5vdXQoKS5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KF9fLmluRShcImNyZWF0ZWRcIikudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShfXy5vdXRFKFwiY3JlYXRlZFwiKS5jb3VudCgpKSkub3V0KCkub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShfXy5pbkUoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoX18ub3V0RShcImNyZWF0ZWRcIikuY291bnQoKSkpLm91dCgpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoX18uaW5FKFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpLmJ5KF9fLm91dF9lKCdjcmVhdGVkJykuY291bnQoKSkpLm91dCgpLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpLmJ5KF9fLmluX2UoJ2NyZWF0ZWQnKS52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYWdncmVnYXRlWHhYX2J5WHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhYX2NhcFh4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSkpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSkpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoX18udmFsdWVzKHN0cmluZzEpLmlzKFAuZ3QobnVtYmVyMCkpKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwieFwiKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JcyhQLkd0KDI5KSkpLkNhcDxvYmplY3Q+KFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcInhcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuR3QoMjkpKSkuQ2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSkpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMjkpKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgneCcpLmJ5KF9fLnZhbHVlcygnYWdlJykuaXNfKFAuZ3QoMjkpKSkuY2FwKCd4JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfYWdncmVnYXRlWHhYX2J5WHZhbHVlc1hhZ2VYX2lzWGd0WDI5WFhYX2NhcFh4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoX18udmFsdWVzKFwiYWdlXCIpLmlzKFAuZ3QoMjkpKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KF9fLnZhbHVlcyhzdHJpbmcxKS5pcyhQLmd0KG51bWJlcjApKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLklzKFAuR3QoMjkpKSkuQ2FwPG9iamVjdD4oXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcInhcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikuSXMoZ3JlbWxpbmdvLlAuR3QoMjkpKSkuQ2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy52YWx1ZXMoXCJhZ2VcIikuaXMoUC5ndCgyOSkpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSkpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLnZhbHVlcyhcImFnZVwiKS5pcyhQLmd0KDI5KSkpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgneCcpLmJ5KF9fLnZhbHVlcygnYWdlJykuaXNfKFAuZ3QoMjkpKSkuY2FwKCd4JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYeFhfYnlYb3V0X29yZGVyX2J5WG5hbWVYWF9jYXBYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMSkpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KF9fLk91dCgpLk9yZGVyKCkuQnkoXCJuYW1lXCIpKS5DYXA8b2JqZWN0PihcInhcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5CeShcIm5hbWVcIikpLkNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ3gnKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KCduYW1lJykpLmNhcCgneCcpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2FnZ3JlZ2F0ZVh4WF9ieVhvdXRfb3JkZXJfYnlYbmFtZVhYX2NhcFh4WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoXCJuYW1lXCIpKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoc3RyaW5nMSkpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTdHJhdGVnaWVzKG5ldyBQcm9kdWN0aXZlQnlTdHJhdGVneSgpKS5WKCkuQWdncmVnYXRlKFwieFwiKS5CeShfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkuQ2FwPG9iamVjdD4oXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkFnZ3JlZ2F0ZShcInhcIikuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkJ5KFwibmFtZVwiKSkuQ2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneS5pbnN0YW5jZSgpKS5WKCkuYWdncmVnYXRlKFwieFwiKS5ieShfXy5vdXQoKS5vcmRlcigpLmJ5KFwibmFtZVwiKSkuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZShcInhcIikuYnkoX18ub3V0KCkub3JkZXIoKS5ieShcIm5hbWVcIikpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmFnZ3JlZ2F0ZSgneCcpLmJ5KF9fLm91dCgpLm9yZGVyKCkuYnkoJ25hbWUnKSkuY2FwKCd4JykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfaGFzWHBlcnNvbl9hZ2VfZ3RlWDMwWFhYX2NhcFhhWF91bmZvbGRfdmFsdWVzWG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuaGFzKFwicGVyc29uXCIsXCJhZ2VcIiwgUC5ndGUoMzApKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBQLmd0ZSgzMCkpLmNhcChcImFcIikudW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBQLmd0ZSgzMCkpLmNhcChcImFcIikudW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYWdncmVnYXRlKHN0cmluZzApLmhhcyhzdHJpbmcxLCBzdHJpbmcyLCBQLmd0ZShudW1iZXIwKSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLnZhbHVlcyhzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBQLkd0ZSgzMCkpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuSGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIGdyZW1saW5nby5QLkd0ZSgzMCkpLkNhcChcImFcIikuVW5mb2xkKCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmhhcyhcInBlcnNvblwiLCBcImFnZVwiLCBQLmd0ZSgzMCkpLmNhcChcImFcIikudW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5oYXMoXCJwZXJzb25cIiwgXCJhZ2VcIiwgUC5ndGUoMzApKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuaGFzKFwicGVyc29uXCIsIFwiYWdlXCIsIFAuZ3RlKDMwKSkuY2FwKFwiYVwiKS51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgnYScpLmhhcygncGVyc29uJywgJ2FnZScsIFAuZ3RlKDMwKSkuY2FwKCdhJykudW5mb2xkKCkudmFsdWVzKCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xX3N1bVhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3Iuc3VtKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3Iuc3VtKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLnN1bSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5zdW0pLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLlN1bSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMSwgZ3JlbWxpbmdvLk9wZXJhdG9yLlN1bSkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLnN1bSkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3Iuc3VtKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEsIE9wZXJhdG9yLnN1bV8pLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xX3N1bVhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3Iuc3VtKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjAsIE9wZXJhdG9yLnN1bSkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLlN1bSkuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMSwgZ3JlbWxpbmdvLk9wZXJhdG9yLlN1bSkuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5zdW0pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEsIE9wZXJhdG9yLnN1bV8pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfMTIzX21pbnVzWF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTIzLCBPcGVyYXRvci5taW51cykuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjAsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLk1pbnVzKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIGdyZW1saW5nby5PcGVyYXRvci5NaW51cykuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEyMywgT3BlcmF0b3IubWludXMpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xMjNfbWludXNYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTIzLCBPcGVyYXRvci5taW51cykuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5taW51cykuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEyMywgT3BlcmF0b3IuTWludXMpLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEyMywgZ3JlbWxpbmdvLk9wZXJhdG9yLk1pbnVzKS5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEyMywgT3BlcmF0b3IubWludXMpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMjMsIE9wZXJhdG9yLm1pbnVzKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTIzLCBPcGVyYXRvci5taW51cykuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgMTIzLCBPcGVyYXRvci5taW51cykuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8yX211bHRYX1ZfYWdncmVnYXRlWGFYX2J5WGFnZVhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDIsIE9wZXJhdG9yLm11bHQpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAyLCBPcGVyYXRvci5tdWx0KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDIsIE9wZXJhdG9yLm11bHQpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbnVtYmVyMCwgT3BlcmF0b3IubXVsdCkuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IuTXVsdCkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMiwgZ3JlbWxpbmdvLk9wZXJhdG9yLk11bHQpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCAyLCBPcGVyYXRvci5tdWx0KS5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfMl9tdWx0WF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDIsIE9wZXJhdG9yLm11bHQpLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbnVtYmVyMCwgT3BlcmF0b3IubXVsdCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDIsIE9wZXJhdG9yLk11bHQpLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDIsIGdyZW1saW5nby5PcGVyYXRvci5NdWx0KS5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDIsIE9wZXJhdG9yLm11bHQpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAyLCBPcGVyYXRvci5tdWx0KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMiwgT3BlcmF0b3IubXVsdCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgMiwgT3BlcmF0b3IubXVsdCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV84NzY5NjBfZGl2WF9WX2FnZ3JlZ2F0ZVhhWF9ieVhhZ2VYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjAsIE9wZXJhdG9yLmRpdikuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgODc2OTYwLCBPcGVyYXRvci5EaXYpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDg3Njk2MCwgZ3JlbWxpbmdvLk9wZXJhdG9yLkRpdikuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgODc2OTYwLCBPcGVyYXRvci5kaXYpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkuYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfODc2OTYwX2RpdlhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgODc2OTYwLCBPcGVyYXRvci5kaXYpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjAsIE9wZXJhdG9yLmRpdikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDg3Njk2MCwgT3BlcmF0b3IuRGl2KS5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCA4NzY5NjAsIGdyZW1saW5nby5PcGVyYXRvci5EaXYpLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgODc2OTYwLCBPcGVyYXRvci5kaXYpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDg3Njk2MCwgT3BlcmF0b3IuZGl2KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCA4NzY5NjAsIE9wZXJhdG9yLmRpdikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xX21pblhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWluKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWluKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLm1pbikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLk1pbikuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMSwgZ3JlbWxpbmdvLk9wZXJhdG9yLk1pbikuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLm1pbikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWluKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEsIE9wZXJhdG9yLm1pbl8pLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xX21pblhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjAsIE9wZXJhdG9yLm1pbikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLk1pbikuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMSwgZ3JlbWxpbmdvLk9wZXJhdG9yLk1pbikuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEsIE9wZXJhdG9yLm1pbl8pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfMTAwX21pblhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1pbikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1pbikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IuTWluKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIGdyZW1saW5nby5PcGVyYXRvci5NaW4pLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5taW4pLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWluKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1pbikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCAxMDAsIE9wZXJhdG9yLm1pbl8pLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xMDBfbWluWF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1pbikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbnVtYmVyMCwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzApLmJ5KHN0cmluZzEpKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5NaW4pLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgZ3JlbWxpbmdvLk9wZXJhdG9yLk1pbikuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1pbikuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWluKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5taW4pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEwMCwgT3BlcmF0b3IubWluXykuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xX21heFhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWF4KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWF4KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5tYXgpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLk1heCkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMSwgZ3JlbWxpbmdvLk9wZXJhdG9yLk1heCkuVigpLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWF4KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEsIE9wZXJhdG9yLm1heF8pLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xX21heFhfVl9sb2NhbFhhZ2dyZWdhdGVYX2FYX2J5WGFnZVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMSwgT3BlcmF0b3IubWF4KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIG51bWJlcjAsIE9wZXJhdG9yLm1heCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEsIE9wZXJhdG9yLk1heCkuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMSwgZ3JlbWxpbmdvLk9wZXJhdG9yLk1heCkuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIDEsIE9wZXJhdG9yLm1heF8pLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfMTAwX21heFhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5tYXgpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5tYXgpLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IuTWF4KS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIGdyZW1saW5nby5PcGVyYXRvci5NYXgpLlYoKS5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5tYXgpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWF4KS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1heCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCAxMDAsIE9wZXJhdG9yLm1heF8pLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xMDBfbWF4WF9WX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWF4KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBudW1iZXIwLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMCkuYnkoc3RyaW5nMSkpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLk1heCkuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBncmVtbGluZ28uT3BlcmF0b3IuTWF4KS5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIDEwMCwgT3BlcmF0b3IubWF4KS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgMTAwLCBPcGVyYXRvci5tYXgpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCAxMDAsIE9wZXJhdG9yLm1heCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgMTAwLCBPcGVyYXRvci5tYXhfKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhX3RydWVfYW5kWF9WX2NvbnN0YW50WGZhbHNlWF9hZ2dyZWdhdGVYYVhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5hbmQpLlYoKS5jb25zdGFudChmYWxzZSkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgYm9vbGVhbjAsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGJvb2xlYW4xKS5hZ2dyZWdhdGUoc3RyaW5nMCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLkFuZCkuVigpLkNvbnN0YW50PG9iamVjdD4oZmFsc2UpLkFnZ3JlZ2F0ZShcImFcIikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgZ3JlbWxpbmdvLk9wZXJhdG9yLkFuZCkuVigpLkNvbnN0YW50KGZhbHNlKS5BZ2dyZWdhdGUoXCJhXCIpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3IuYW5kKS5WKCkuY29uc3RhbnQoZmFsc2UpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3IuYW5kKS5WKCkuY29uc3RhbnQoZmFsc2UpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3IuYW5kKS5WKCkuY29uc3RhbnQoZmFsc2UpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCBUcnVlLCBPcGVyYXRvci5hbmRfKS5WKCkuY29uc3RhbnQoRmFsc2UpLmFnZ3JlZ2F0ZSgnYScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfdHJ1ZV9hbmRYX1ZfY29uc3RhbnRYZmFsc2VYX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5hbmQpLlYoKS5jb25zdGFudChmYWxzZSkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIGJvb2xlYW4wLCBPcGVyYXRvci5hbmQpLlYoKS5jb25zdGFudChib29sZWFuMSkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzApKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3IuQW5kKS5WKCkuQ29uc3RhbnQ8b2JqZWN0PihmYWxzZSkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBncmVtbGluZ28uT3BlcmF0b3IuQW5kKS5WKCkuQ29uc3RhbnQoZmFsc2UpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5hbmQpLlYoKS5jb25zdGFudChmYWxzZSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3IuYW5kKS5WKCkuY29uc3RhbnQoZmFsc2UpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLmFuZCkuVigpLmNvbnN0YW50KGZhbHNlKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIFRydWUsIE9wZXJhdG9yLmFuZF8pLlYoKS5jb25zdGFudChGYWxzZSkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfdHJ1ZV9vclhfVl9jb25zdGFudFhmYWxzZVhfYWdncmVnYXRlWGFYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5vcikuVigpLmNvbnN0YW50KGZhbHNlKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5vcikuVigpLmNvbnN0YW50KGZhbHNlKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3Iub3IpLlYoKS5jb25zdGFudChmYWxzZSkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIGJvb2xlYW4wLCBPcGVyYXRvci5vcikuVigpLmNvbnN0YW50KGJvb2xlYW4xKS5hZ2dyZWdhdGUoc3RyaW5nMCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLk9yKS5WKCkuQ29uc3RhbnQ8b2JqZWN0PihmYWxzZSkuQWdncmVnYXRlKFwiYVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBncmVtbGluZ28uT3BlcmF0b3IuT3IpLlYoKS5Db25zdGFudChmYWxzZSkuQWdncmVnYXRlKFwiYVwiKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgdHJ1ZSwgT3BlcmF0b3Iub3IpLlYoKS5jb25zdGFudChmYWxzZSkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5vcikuVigpLmNvbnN0YW50KGZhbHNlKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgVHJ1ZSwgT3BlcmF0b3Iub3JfKS5WKCkuY29uc3RhbnQoRmFsc2UpLmFnZ3JlZ2F0ZSgnYScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTaWRlRWZmZWN0WGFfdHJ1ZV9vclhfVl9jb25zdGFudFhmYWxzZVhfbG9jYWxYYWdncmVnYXRlWF9hWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBPcGVyYXRvci5vcikuVigpLmNvbnN0YW50KGZhbHNlKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgYm9vbGVhbjAsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoYm9vbGVhbjEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLk9yKS5WKCkuQ29uc3RhbnQ8b2JqZWN0PihmYWxzZSkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCB0cnVlLCBncmVtbGluZ28uT3BlcmF0b3IuT3IpLlYoKS5Db25zdGFudChmYWxzZSkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIHRydWUsIE9wZXJhdG9yLm9yKS5WKCkuY29uc3RhbnQoZmFsc2UpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgVHJ1ZSwgT3BlcmF0b3Iub3JfKS5WKCkuY29uc3RhbnQoRmFsc2UpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhXzFfMl8zX2FkZEFsbFhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLDJpLDNpXSwgT3BlcmF0b3IuYWRkQWxsKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLCAyaSwgM2ldLCBPcGVyYXRvci5hZGRBbGwpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLCAyaSwgM2ldLCBPcGVyYXRvci5hZGRBbGwpLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbGlzdDAsIE9wZXJhdG9yLmFkZEFsbCkuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgbmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMgfSwgT3BlcmF0b3IuQWRkQWxsKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBbXWludGVyZmFjZXt9e2ludDMyKDEpLCBpbnQzMigyKSwgaW50MzIoMyl9LCBncmVtbGluZ28uT3BlcmF0b3IuQWRkQWxsKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxaSwgMmksIDNpXSwgT3BlcmF0b3IuYWRkQWxsKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgYWRkKDMpOyB9fSwgT3BlcmF0b3IuYWRkQWxsKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFkZEFsbCkuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFkZF9hbGwpLlYoKS5hZ2dyZWdhdGUoJ2EnKS5ieSgnYWdlJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYYV8xXzJfM19hZGRBbGxYX1ZfbG9jYWxYYWdncmVnYXRlWF9hWF9ieVhhZ2VYWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLDJpLDNpXSwgT3BlcmF0b3IuYWRkQWxsKS5WKCkubG9jYWwoYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxaSwgMmksIDNpXSwgT3BlcmF0b3IuYWRkQWxsKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbMWksIDJpLCAzaV0sIE9wZXJhdG9yLmFkZEFsbCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbGlzdDAsIE9wZXJhdG9yLmFkZEFsbCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzIH0sIE9wZXJhdG9yLkFkZEFsbCkuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgW11pbnRlcmZhY2V7fXtpbnQzMigxKSwgaW50MzIoMiksIGludDMyKDMpfSwgZ3JlbWxpbmdvLk9wZXJhdG9yLkFkZEFsbCkuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbMWksIDJpLCAzaV0sIE9wZXJhdG9yLmFkZEFsbCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19LCBPcGVyYXRvci5hZGRBbGwpLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFkZEFsbCkuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgWzEsIDIsIDNdLCBPcGVyYXRvci5hZGRfYWxsKS5WKCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhXzFfMl8zX2Fzc2lnblhfVl9hZ2dyZWdhdGVYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLDJpLDNpXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLCAyaSwgM2ldLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLCAyaSwgM2ldLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbGlzdDAsIE9wZXJhdG9yLmFzc2lnbikuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKS5jYXAoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgbmV3IExpc3Q8b2JqZWN0PiB7IDEsIDIsIDMgfSwgT3BlcmF0b3IuQXNzaWduKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBbXWludGVyZmFjZXt9e2ludDMyKDEpLCBpbnQzMigyKSwgaW50MzIoMyl9LCBncmVtbGluZ28uT3BlcmF0b3IuQXNzaWduKS5WKCkuQWdncmVnYXRlKFwiYVwiKS5CeShcImFnZVwiKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxaSwgMmksIDNpXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgyKTsgYWRkKDMpOyB9fSwgT3BlcmF0b3IuYXNzaWduKS5WKCkuYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFzc2lnbikuVigpLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ2EnLCBbMSwgMiwgM10sIE9wZXJhdG9yLmFzc2lnbikuVigpLmFnZ3JlZ2F0ZSgnYScpLmJ5KCdhZ2UnKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhXzFfMl8zX2Fzc2lnblhfVl9vcmRlcl9ieVhhZ2VYX2xvY2FsWGFnZ3JlZ2F0ZVhfYVhfYnlYYWdlWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxaSwyaSwzaV0sIE9wZXJhdG9yLmFzc2lnbikuVigpLm9yZGVyKCkuYnkoXCJhZ2VcIikubG9jYWwoYWdncmVnYXRlKFwiYVwiKS5ieShcImFnZVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxaSwgMmksIDNpXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkub3JkZXIoKS5ieShcImFnZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxaSwgMmksIDNpXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkub3JkZXIoKS5ieShcImFnZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTaWRlRWZmZWN0KHN0cmluZzAsIGxpc3QwLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5vcmRlcigpLmJ5KHN0cmluZzEpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBMaXN0PG9iamVjdD4geyAxLCAyLCAzIH0sIE9wZXJhdG9yLkFzc2lnbikuVigpLk9yZGVyKCkuQnkoXCJhZ2VcIikuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpLkJ5KFwiYWdlXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTaWRlRWZmZWN0KFwiYVwiLCBbXWludGVyZmFjZXt9e2ludDMyKDEpLCBpbnQzMigyKSwgaW50MzIoMyl9LCBncmVtbGluZ28uT3BlcmF0b3IuQXNzaWduKS5WKCkuT3JkZXIoKS5CeShcImFnZVwiKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikuQnkoXCJhZ2VcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgWzFpLCAyaSwgM2ldLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5vcmRlcigpLmJ5KFwiYWdlXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDIpOyBhZGQoMyk7IH19LCBPcGVyYXRvci5hc3NpZ24pLlYoKS5vcmRlcigpLmJ5KFwiYWdlXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJhZ2VcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFsxLCAyLCAzXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkub3JkZXIoKS5ieShcImFnZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwiYWdlXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zaWRlX2VmZmVjdCgnYScsIFsxLCAyLCAzXSwgT3BlcmF0b3IuYXNzaWduKS5WKCkub3JkZXIoKS5ieSgnYWdlJykubG9jYWwoX18uYWdncmVnYXRlKCdhJykuYnkoJ2FnZScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhX25hbWVYWF9vdXRfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkub3V0KCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKS5CeShcIm5hbWVcIikpLk91dCgpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKS5CeShcIm5hbWVcIikpLk91dCgpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKS5ieShcIm5hbWVcIikpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikuYnkoXCJuYW1lXCIpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpLmJ5KFwibmFtZVwiKSkub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKS5ieSgnbmFtZScpKS5vdXQoKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhX3NldFhfVl9ib3RoX25hbWVfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuYm90aCgpLnZhbHVlcyhcIm5hbWVcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLnZhbHVlcyhzdHJpbmcwKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMSkpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Cb3RoKCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQm90aCgpLlZhbHVlcyhcIm5hbWVcIikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmJvdGgoKS52YWx1ZXMoXCJuYW1lXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLnZhbHVlcygnbmFtZScpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9pblZfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVhfdW5mb2xkX2RlZHVwIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5kZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkub3V0RSgpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLmRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXRFKCkuSW5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5EZWR1cCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXRFKCkuSW5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXAoXCJhXCIpLlVuZm9sZCgpLkRlZHVwKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZGVkdXAoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkub3V0X2UoKS5pbl92KCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLmNhcCgnYScpLnVuZm9sZCgpLmRlZHVwKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0WGNyZWF0ZWRYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLm91dChcImNyZWF0ZWRcIikubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dChcImNyZWF0ZWRcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXQoXCJjcmVhdGVkXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkub3V0KHN0cmluZzIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0KFwiY3JlYXRlZFwiKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0KFwiY3JlYXRlZFwiKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwiY3JlYXRlZFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXQoXCJjcmVhdGVkXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dChcImNyZWF0ZWRcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5vdXQoJ2NyZWF0ZWQnKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX3JlcGVhdFhvdXRfbG9jYWxYYWdncmVnYXRlWGFYWFhfdGltZXNYMlhfY2FwWGFYX3VuZm9sZF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLnJlcGVhdChfXy5vdXQoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKSkudGltZXMoMikuY2FwKFwiYVwiKS51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLnJlcGVhdChfXy5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKSkudGltZXMoMikuY2FwKFwiYVwiKS51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkpLnRpbWVzKDIpLmNhcChcImFcIikudW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkpLnRpbWVzKG51bWJlcjApLmNhcChzdHJpbmcwKS51bmZvbGQoKS52YWx1ZXMoc3RyaW5nMSkuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuUmVwZWF0KF9fLk91dCgpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkpLlRpbWVzKDIpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKSkuVGltZXMoMikuQ2FwKFwiYVwiKS5VbmZvbGQoKS5WYWx1ZXMoXCJuYW1lXCIpLkdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkpLnRpbWVzKDIpLmNhcChcImFcIikudW5mb2xkKCkudmFsdWVzKFwibmFtZVwiKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLnJlcGVhdChfXy5vdXQoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKSkudGltZXMoMikuY2FwKFwiYVwiKS51bmZvbGQoKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkucmVwZWF0KF9fLm91dCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpKS50aW1lcygyKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5yZXBlYXQoX18ub3V0KCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpKS50aW1lcygyKS5jYXAoJ2EnKS51bmZvbGQoKS52YWx1ZXMoJ25hbWUnKS5ncm91cF9jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5hbWVfbWFya29YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0WGtub3dzWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dFhjcmVhdGVkWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkub3V0KFwiY3JlYXRlZFwiKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dChcImtub3dzXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dChcImNyZWF0ZWRcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwiY3JlYXRlZFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzIpKS5vdXQoc3RyaW5nMykubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzIpKS5vdXQoc3RyaW5nNCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzIpKS5jYXAoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0KFwia25vd3NcIikuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXQoXCJjcmVhdGVkXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcIm1hcmtvXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0KFwia25vd3NcIikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXQoXCJjcmVhdGVkXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwiY3JlYXRlZFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwiY3JlYXRlZFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwibWFya29cIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwiY3JlYXRlZFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnbmFtZScsICdtYXJrbycpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5vdXQoJ2tub3dzJykubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLm91dCgnY3JlYXRlZCcpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvZnR3YXJlWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2luWGNyZWF0ZWRYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0WGtub3dzWF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLmluKFwiY3JlYXRlZFwiKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5vdXQoXCJrbm93c1wiKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5pbihcImNyZWF0ZWRcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmluKFwiY3JlYXRlZFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXQoXCJrbm93c1wiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMSkpLmluKHN0cmluZzIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkub3V0KHN0cmluZzMpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5JbihcImNyZWF0ZWRcIikuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXQoXCJrbm93c1wiKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5JbihcImNyZWF0ZWRcIikuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXQoXCJrbm93c1wiKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5pbihcImNyZWF0ZWRcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5pbihcImNyZWF0ZWRcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0KFwia25vd3NcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5pbl8oXCJjcmVhdGVkXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dChcImtub3dzXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5pbl8oJ2NyZWF0ZWQnKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkub3V0KCdrbm93cycpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9oYXNYd2VpZ2h0X2xndFgwXzVYWF9pblZfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVhfdW5mb2xkX3BhdGgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmhhcyhcIndlaWdodFwiLCBQLmd0KDAuNSkpLmluVigpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmhhcyhcIndlaWdodFwiLCBQLmd0KDAuNSkpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5ndCgwLjUpKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzApKS5vdXRFKCkuaGFzKHN0cmluZzEsIFAuZ3QobnVtYmVyMCkpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLk91dEUoKS5IYXMoXCJ3ZWlnaHRcIiwgUC5HdCgwLjUpKS5JblYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0RSgpLkhhcyhcIndlaWdodFwiLCBncmVtbGluZ28uUC5HdCgwLjUpKS5JblYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikuVW5mb2xkKCkuUGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5ndCgwLjUpKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmhhcyhcIndlaWdodFwiLCBQLmd0KDAuNSkpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIFAuZ3QoMC41KSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5wYXRoKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLm91dF9lKCkuaGFzKCd3ZWlnaHQnLCBQLmd0KDAuNSkpLmluX3YoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykudW5mb2xkKCkucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYYWdncmVnYXRlWGFYWF9ib3RoRV9zYW1wbGVYMVhfb3RoZXJWX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYX3VuZm9sZF9ncm91cENvdW50X2J5WGxhYmVsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5ib3RoRSgpLnNhbXBsZSgxKS5vdGhlclYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmJvdGhFKCkuc2FtcGxlKDEpLm90aGVyVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmJvdGhFKCkuc2FtcGxlKDEpLm90aGVyVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMCkpLmJvdGhFKCkuc2FtcGxlKG51bWJlcjApLm90aGVyVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkJvdGhFKCkuU2FtcGxlKDEpLk90aGVyVigpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuR3JvdXBDb3VudDxvYmplY3Q+KCkuQnkoVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkJvdGhFKCkuU2FtcGxlKDEpLk90aGVyVigpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwKFwiYVwiKS5VbmZvbGQoKS5Hcm91cENvdW50KCkuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmJvdGhFKCkuc2FtcGxlKDEpLm90aGVyVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5ib3RoRSgpLnNhbXBsZSgxKS5vdGhlclYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuYm90aEUoKS5zYW1wbGUoMSkub3RoZXJWKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLmJvdGhfZSgpLnNhbXBsZSgxKS5vdGhlcl92KCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLmNhcCgnYScpLnVuZm9sZCgpLmdyb3VwX2NvdW50KCkuYnkoVC5sYWJlbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9pblZfc2ltcGxlUGF0aF9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWF91bmZvbGRfaGFzTGFiZWxYc29mdHdhcmVYX2NvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaW5WKCkuc2ltcGxlUGF0aCgpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuaGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkub3V0RSgpLmluVigpLnNpbXBsZVBhdGgoKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMSkpLmNhcChzdHJpbmcxKS51bmZvbGQoKS5oYXNMYWJlbChzdHJpbmcyKS5jb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0RSgpLkluVigpLlNpbXBsZVBhdGgoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpLkhhc0xhYmVsKFwic29mdHdhcmVcIikuQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0RSgpLkluVigpLlNpbXBsZVBhdGgoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcChcImFcIikuVW5mb2xkKCkuSGFzTGFiZWwoXCJzb2Z0d2FyZVwiKS5Db3VudCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5zaW1wbGVQYXRoKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5oYXNMYWJlbChcInNvZnR3YXJlXCIpLmNvdW50KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkub3V0X2UoKS5pbl92KCkuc2ltcGxlX3BhdGgoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykudW5mb2xkKCkuaGFzX2xhYmVsKCdzb2Z0d2FyZScpLmNvdW50KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX3VuaW9uWG91dF9pblhfbG9jYWxYYWdncmVnYXRlWGFYWF9jYXBYYVhfdW5mb2xkX2RlZHVwX3ZhbHVlc1huYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS51bmlvbihfXy5vdXQoKSwgX18uaW4oKSkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS51bmlvbihfXy5vdXQoKSwgX18uaW4oKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkudW5pb24oX18ub3V0KCksIF9fLmluKCkpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikudW5mb2xkKCkuZGVkdXAoKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMCkpLnVuaW9uKF9fLm91dCgpLCBfXy5pbigpKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMCkpLmNhcChzdHJpbmcwKS51bmZvbGQoKS5kZWR1cCgpLnZhbHVlcyhzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLlVuaW9uPG9iamVjdD4oX18uT3V0KCksIF9fLkluKCkpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuRGVkdXAoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLlVuaW9uKGdyZW1saW5nby5UX18uT3V0KCksIGdyZW1saW5nby5UX18uSW4oKSkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXAoXCJhXCIpLlVuZm9sZCgpLkRlZHVwKCkuVmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS51bmlvbihfXy5vdXQoKSwgX18uaW4oKSkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKS51bmZvbGQoKS5kZWR1cCgpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLnVuaW9uKF9fLm91dCgpLCBfXy5pbigpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkudW5pb24oX18ub3V0KCksIF9fLmluXygpKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmRlZHVwKCkudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkudW5pb24oX18ub3V0KCksIF9fLmluXygpKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykudW5mb2xkKCkuZGVkdXAoKS52YWx1ZXMoJ25hbWUnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1huYW1lX2pvc2hYX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9oYXNYd2VpZ2h0X2x0WDFfMFhYX2luVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX291dEVfaW5WX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLmxvY2FsKGFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5sdCgxLjApKS5pblYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaW5WKCkubG9jYWwoYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5sdCgxLjApKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIFAubHQoMS4wKSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMikpLm91dEUoKS5oYXMoc3RyaW5nMywgUC5sdChudW1iZXIwKSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzIpKS5vdXRFKCkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKHN0cmluZzIpKS5jYXAoc3RyaW5nMikiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibmFtZVwiLCBcImpvc2hcIikuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXRFKCkuSGFzKFwid2VpZ2h0XCIsIFAuTHQoMS4wKSkuSW5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXRFKCkuSW5WKCkuTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5Mb2NhbChncmVtbGluZ28uVF9fLkFnZ3JlZ2F0ZShcImFcIikpLk91dEUoKS5IYXMoXCJ3ZWlnaHRcIiwgZ3JlbWxpbmdvLlAuTHQoMS4wKSkuSW5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5PdXRFKCkuSW5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcIm5hbWVcIiwgXCJqb3NoXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5oYXMoXCJ3ZWlnaHRcIiwgUC5sdCgxLjApKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibmFtZVwiLCBcImpvc2hcIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmhhcyhcIndlaWdodFwiLCBQLmx0KDEuMCkpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJuYW1lXCIsIFwiam9zaFwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkuaGFzKFwid2VpZ2h0XCIsIFAubHQoMS4wKSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCduYW1lJywgJ2pvc2gnKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkub3V0X2UoKS5oYXMoJ3dlaWdodCcsIFAubHQoMS4wKSkuaW5fdigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZSgnYScpKS5vdXRfZSgpLmluX3YoKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2xvY2FsWGFnZ3JlZ2F0ZVhhWFhfb3V0RV9vcmRlcl9ieVh3ZWlnaHRYX2xpbWl0WDFYX2luVl9sb2NhbFhhZ2dyZWdhdGVYYVhYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkub3JkZXIoKS5ieShcIndlaWdodFwiKS5saW1pdCgxKS5pblYoKS5sb2NhbChhZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkub3V0RSgpLm9yZGVyKCkuYnkoXCJ3ZWlnaHRcIikubGltaXQoMSkuaW5WKCkubG9jYWwoX18uYWdncmVnYXRlKFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5vdXRFKCkub3JkZXIoKS5ieShcIndlaWdodFwiKS5saW1pdCgxKS5pblYoKS5sb2NhbChfXy5hZ2dyZWdhdGUoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5sb2NhbChfXy5hZ2dyZWdhdGUoc3RyaW5nMSkpLm91dEUoKS5vcmRlcigpLmJ5KHN0cmluZzIpLmxpbWl0KG51bWJlcjApLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcxKSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsPG9iamVjdD4oX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0RSgpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIikuTGltaXQ8b2JqZWN0PigxKS5JblYoKS5Mb2NhbDxvYmplY3Q+KF9fLkFnZ3JlZ2F0ZShcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhc0xhYmVsKFwicGVyc29uXCIpLkxvY2FsKGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuT3V0RSgpLk9yZGVyKCkuQnkoXCJ3ZWlnaHRcIikuTGltaXQoMSkuSW5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJhXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIpLmxpbWl0KDEpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIpLmxpbWl0KDEpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLm91dEUoKS5vcmRlcigpLmJ5KFwid2VpZ2h0XCIpLmxpbWl0KDEpLmluVigpLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzX2xhYmVsKCdwZXJzb24nKS5sb2NhbChfXy5hZ2dyZWdhdGUoJ2EnKSkub3V0X2UoKS5vcmRlcigpLmJ5KCd3ZWlnaHQnKS5saW1pdCgxKS5pbl92KCkubG9jYWwoX18uYWdncmVnYXRlKCdhJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGFnZ3JlZ2F0ZVhhWFhfdGltZXNYMlhfY2FwWGFYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKFwiYVwiKSkudGltZXMoMikuY2FwKFwiYVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoXCJhXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoXCJhXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKHN0cmluZzApKS50aW1lcyhudW1iZXIwKS5jYXAoc3RyaW5nMCkudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLkFnZ3JlZ2F0ZShcImFcIikpLlRpbWVzKDIpLkNhcDxvYmplY3Q+KFwiYVwiKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uQWdncmVnYXRlKFwiYVwiKSkuVGltZXMoMikuQ2FwKFwiYVwiKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18uYWdncmVnYXRlKFwiYVwiKSkudGltZXMoMikuY2FwKFwiYVwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmFnZ3JlZ2F0ZShcImFcIikpLnRpbWVzKDIpLmNhcChcImFcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoXCJhXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5hZ2dyZWdhdGUoJ2EnKSkudGltZXMoMikuY2FwKCdhJykudW5mb2xkKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9hZ2dyZWdhdGVYYVhfY2FwWGFYX3VuZm9sZF9ib3RoIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikudW5mb2xkKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmFnZ3JlZ2F0ZShzdHJpbmcwKS5jYXAoc3RyaW5nMCkudW5mb2xkKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkFnZ3JlZ2F0ZShcImFcIikuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuQm90aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLkJvdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikudW5mb2xkKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikudW5mb2xkKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikudW5mb2xkKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmFnZ3JlZ2F0ZSgnYScpLmNhcCgnYScpLnVuZm9sZCgpLmJvdGgoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2FnZ3JlZ2F0ZVhhWF9jYXBYYVhfdW5mb2xkX2JhcnJpZXJfYm90aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikudW5mb2xkKCkuYmFycmllcigpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5iYXJyaWVyKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5iYXJyaWVyKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5hZ2dyZWdhdGUoc3RyaW5nMCkuY2FwKHN0cmluZzApLnVuZm9sZCgpLmJhcnJpZXIoKS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5DYXA8b2JqZWN0PihcImFcIikuVW5mb2xkPG9iamVjdD4oKS5CYXJyaWVyKCkuQm90aCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQWdncmVnYXRlKFwiYVwiKS5DYXAoXCJhXCIpLlVuZm9sZCgpLkJhcnJpZXIoKS5Cb3RoKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuYWdncmVnYXRlKFwiYVwiKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmJhcnJpZXIoKS5ib3RoKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmFnZ3JlZ2F0ZShcImFcIikuY2FwKFwiYVwiKS51bmZvbGQoKS5iYXJyaWVyKCkuYm90aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5hZ2dyZWdhdGUoXCJhXCIpLmNhcChcImFcIikudW5mb2xkKCkuYmFycmllcigpLmJvdGgoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5hZ2dyZWdhdGUoJ2EnKS5jYXAoJ2EnKS51bmZvbGQoKS5iYXJyaWVyKCkuYm90aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZmFpbCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5mYWlsKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mYWlsKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZmFpbCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5mYWlsKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRmFpbCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuRmFpbCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmZhaWwoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZmFpbCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5mYWlsKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZmFpbCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZmFpbFhtc2dYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmZhaWwoXCJtc2dcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5mYWlsKFwibXNnXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmZhaWwoXCJtc2dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmZhaWwoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuRmFpbChcIm1zZ1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkZhaWwoXCJtc2dcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZmFpbChcIm1zZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZmFpbChcIm1zZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZmFpbChcIm1zZ1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5mYWlsKCdtc2cnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3VuaW9uWG91dF9mYWlsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS51bmlvbihvdXQoKSwgZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5mYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5mYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS51bmlvbihfXy5vdXQoKSwgX18uZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5VbmlvbjxvYmplY3Q+KF9fLk91dCgpLCBfXy5GYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVW5pb24oZ3JlbWxpbmdvLlRfXy5PdXQoKSwgZ3JlbWxpbmdvLlRfXy5GYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVuaW9uKF9fLm91dCgpLCBfXy5mYWlsKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS51bmlvbihfXy5vdXQoKSwgX18uZmFpbCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudW5pb24oX18ub3V0KCksIF9fLmZhaWwoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudW5pb24oX18ub3V0KCksIF9fLmZhaWwoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cF9ieVhuYW1lWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTdHJhdGVnaWVzWFByb2R1Y3RpdmVCeVN0cmF0ZWd5WF9WX2dyb3VwX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXAoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkdyb3VwKCkuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU3RyYXRlZ2llcyhQcm9kdWN0aXZlQnlTdHJhdGVneSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kuaW5zdGFuY2UoKSkuVigpLmdyb3VwKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5ncm91cCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5ncm91cCgpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwX2J5WG5hbWVYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoKS5ieShzdHJpbmcwKS5ieShzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShcIm5hbWVcIikuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KFwibmFtZVwiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoJ25hbWUnKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cF9ieVhuYW1lWF9ieSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KHN0cmluZzApLmJ5KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoXCJuYW1lXCIpLkJ5KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KFwibmFtZVwiKS5CeSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieSgnbmFtZScpLmJ5KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYbGFuZ1hfZ3JvdXBfYnlYbGFuZ1hfYnlYY291bnRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoKS5ieShcImxhbmdcIikuYnkoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJsYW5nXCIpLmdyb3VwKCkuYnkoXCJsYW5nXCIpLmJ5KF9fLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoKS5ieShcImxhbmdcIikuYnkoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKS5ncm91cCgpLmJ5KHN0cmluZzApLmJ5KF9fLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImxhbmdcIikuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoXCJsYW5nXCIpLkJ5KF9fLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwibGFuZ1wiKS5Hcm91cCgpLkJ5KFwibGFuZ1wiKS5CeShncmVtbGluZ28uVF9fLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoKS5ieShcImxhbmdcIikuYnkoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoKS5ieShcImxhbmdcIikuYnkoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoKS5ieShcImxhbmdcIikuYnkoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdsYW5nJykuZ3JvdXAoKS5ieSgnbGFuZycpLmJ5KF9fLmNvdW50KCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYb3V0RV9jb3VudFhfYnlYbmFtZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuZ3JvdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuZ3JvdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmdyb3VwKCkuYnkoX18ub3V0RSgpLmNvdW50KCkpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3JkZXIoKS5ieShzdHJpbmcwKS5ncm91cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS5ieShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PcmRlcigpLkJ5KFwibmFtZVwiKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShfXy5PdXRFKCkuQ291bnQoKSkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3JkZXIoKS5CeShcIm5hbWVcIikuR3JvdXAoKS5CeShncmVtbGluZ28uVF9fLk91dEUoKS5Db3VudCgpKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3JkZXIoKS5ieShcIm5hbWVcIikuZ3JvdXAoKS5ieShfXy5vdXRFKCkuY291bnQoKSkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vcmRlcigpLmJ5KFwibmFtZVwiKS5ncm91cCgpLmJ5KF9fLm91dEUoKS5jb3VudCgpKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm9yZGVyKCkuYnkoXCJuYW1lXCIpLmdyb3VwKCkuYnkoX18ub3V0RSgpLmNvdW50KCkpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vcmRlcigpLmJ5KCduYW1lJykuZ3JvdXAoKS5ieShfXy5vdXRfZSgpLmNvdW50KCkpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYYm90aFhmb2xsb3dlZEJ5WFhfdGltZXNYMlhfZ3JvdXBfYnlYc29uZ1R5cGVYX2J5WGNvdW50WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aChcImZvbGxvd2VkQnlcIikpLnRpbWVzKDIpLmdyb3VwKCkuYnkoXCJzb25nVHlwZVwiKS5ieShfXy5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5ib3RoKFwiZm9sbG93ZWRCeVwiKSkudGltZXMoMikuZ3JvdXAoKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5ib3RoKFwiZm9sbG93ZWRCeVwiKSkudGltZXMoMikuZ3JvdXAoKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aChzdHJpbmcwKSkudGltZXMobnVtYmVyMCkuZ3JvdXAoKS5ieShzdHJpbmcxKS5ieShfXy5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uQm90aChcImZvbGxvd2VkQnlcIikpLlRpbWVzKDIpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwic29uZ1R5cGVcIikuQnkoX18uQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKFwiZm9sbG93ZWRCeVwiKSkuVGltZXMoMikuR3JvdXAoKS5CeShcInNvbmdUeXBlXCIpLkJ5KGdyZW1saW5nby5UX18uQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoXCJmb2xsb3dlZEJ5XCIpKS50aW1lcygyKS5ncm91cCgpLmJ5KFwic29uZ1R5cGVcIikuYnkoX18uY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLnJlcGVhdChfXy5ib3RoKFwiZm9sbG93ZWRCeVwiKSkudGltZXMoMikuZ3JvdXAoKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aChcImZvbGxvd2VkQnlcIikpLnRpbWVzKDIpLmdyb3VwKCkuYnkoXCJzb25nVHlwZVwiKS5ieShfXy5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uYm90aCgnZm9sbG93ZWRCeScpKS50aW1lcygyKS5ncm91cCgpLmJ5KCdzb25nVHlwZScpLmJ5KF9fLmNvdW50KCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYdmFsdWVzWG5hbWVYX3N1YnN0cmluZ1gxWFhfYnlYY29uc3RhbnRYMVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwxKSkuYnkoX18uY29uc3RhbnQoMSkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygwLCAxKSkuYnkoX18uY29uc3RhbnQoMSkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoc3RyaW5nMCkuc3Vic3RyaW5nKG51bWJlcjAsIG51bWJlcjEpKS5ieShfXy5jb25zdGFudChudW1iZXIxKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoX18uVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLlN1YnN0cmluZygwLCAxKSkuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PigxKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5TdWJzdHJpbmcoMCwgMSkpLkJ5KGdyZW1saW5nby5UX18uQ29uc3RhbnQoMSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnN1YnN0cmluZygwLCAxKSkuYnkoX18uY29uc3RhbnQoMSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoJ25hbWUnKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dF9ncm91cF9ieVhsYWJlbFhfc2VsZWN0WHBlcnNvblhfdW5mb2xkX291dFhjcmVhdGVkWF9uYW1lX2xpbWl0WDJYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuc2VsZWN0KFwicGVyc29uXCIpLnVuZm9sZCgpLm91dChcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuc2VsZWN0KFwicGVyc29uXCIpLnVuZm9sZCgpLm91dChcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS5ncm91cCgpLmJ5KFQubGFiZWwpLnNlbGVjdChcInBlcnNvblwiKS51bmZvbGQoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuc2VsZWN0KHN0cmluZzApLnVuZm9sZCgpLm91dChzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikubGltaXQobnVtYmVyMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoVC5MYWJlbCkuU2VsZWN0PG9iamVjdD4oXCJwZXJzb25cIikuVW5mb2xkPG9iamVjdD4oKS5PdXQoXCJjcmVhdGVkXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5MaW1pdDxvYmplY3Q+KDIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KCkuR3JvdXAoKS5CeShncmVtbGluZ28uVC5MYWJlbCkuU2VsZWN0KFwicGVyc29uXCIpLlVuZm9sZCgpLk91dChcImNyZWF0ZWRcIikuVmFsdWVzKFwibmFtZVwiKS5MaW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS5ncm91cCgpLmJ5KFQubGFiZWwpLnNlbGVjdChcInBlcnNvblwiKS51bmZvbGQoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikubGltaXQoMikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuc2VsZWN0KFwicGVyc29uXCIpLnVuZm9sZCgpLm91dChcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5saW1pdCgyKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkuZ3JvdXAoKS5ieShULmxhYmVsKS5zZWxlY3QoXCJwZXJzb25cIikudW5mb2xkKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmxpbWl0KDIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuc2VsZWN0KCdwZXJzb24nKS51bmZvbGQoKS5vdXQoJ2NyZWF0ZWQnKS52YWx1ZXMoJ25hbWUnKS5saW1pdCgyKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc0xhYmVsWHNvbmdYX2dyb3VwX2J5WG5hbWVYX2J5WHByb3BlcnRpZXNfZ3JvdXBDb3VudF9ieVhsYWJlbFhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18ucHJvcGVydGllcygpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKCkuYnkoc3RyaW5nMSkuYnkoX18ucHJvcGVydGllcygpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzTGFiZWwoXCJzb25nXCIpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwibmFtZVwiKS5CeShfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5Hcm91cENvdW50PG9iamVjdD4oKS5CeShULkxhYmVsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInNvbmdcIikuR3JvdXAoKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5Qcm9wZXJ0aWVzKCkuR3JvdXBDb3VudCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJzb25nXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18ucHJvcGVydGllcygpLmdyb3VwQ291bnQoKS5ieShULmxhYmVsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3NvbmcnKS5ncm91cCgpLmJ5KCduYW1lJykuYnkoX18ucHJvcGVydGllcygpLmdyb3VwX2NvdW50KCkuYnkoVC5sYWJlbCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGZvbGxvd2VkQnlYX2dyb3VwX2J5WHNvbmdUeXBlWF9ieVhib3RoRV9ncm91cF9ieVhsYWJlbFhfYnlYd2VpZ2h0X3N1bVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dChcImZvbGxvd2VkQnlcIikuZ3JvdXAoKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dChcImZvbGxvd2VkQnlcIikuZ3JvdXAoKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmdyb3VwKCkuYnkoXCJzb25nVHlwZVwiKS5ieShfXy5ib3RoRSgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5ncm91cCgpLmJ5KHN0cmluZzEpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoc3RyaW5nMikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFwic29uZ1R5cGVcIikuQnkoX18uQm90aEUoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShULkxhYmVsKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcIndlaWdodFwiKS5TdW08b2JqZWN0PigpKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJmb2xsb3dlZEJ5XCIpLkdyb3VwKCkuQnkoXCJzb25nVHlwZVwiKS5CeShncmVtbGluZ28uVF9fLkJvdGhFKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJ3ZWlnaHRcIikuU3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoXCJmb2xsb3dlZEJ5XCIpLmdyb3VwKCkuYnkoXCJzb25nVHlwZVwiKS5ieShfXy5ib3RoRSgpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dChcImZvbGxvd2VkQnlcIikuZ3JvdXAoKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KFwiZm9sbG93ZWRCeVwiKS5ncm91cCgpLmJ5KFwic29uZ1R5cGVcIikuYnkoX18uYm90aEUoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgnZm9sbG93ZWRCeScpLmdyb3VwKCkuYnkoJ3NvbmdUeXBlJykuYnkoX18uYm90aF9lKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoJ3dlaWdodCcpLnN1bV8oKSkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYbGFiZWxYX2J5WGJvdGhFX2dyb3VwWGFYX2J5WGxhYmVsWF9ieVh3ZWlnaHRfc3VtWF93ZWlnaHRfc3VtWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoXCJhXCIpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS5ncm91cChcImFcIikuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS5ncm91cChcImFcIikuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoc3RyaW5nMCkuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKHN0cmluZzEpLnN1bSgpKS52YWx1ZXMoc3RyaW5nMSkuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KFQuTGFiZWwpLkJ5KF9fLkJvdGhFKCkuR3JvdXAoXCJhXCIpLkJ5KFQuTGFiZWwpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLlN1bTxvYmplY3Q+KCkpLlZhbHVlczxvYmplY3Q+KFwid2VpZ2h0XCIpLlN1bTxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQnkoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkdyb3VwKFwiYVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJ3ZWlnaHRcIikuU3VtKCkpLlZhbHVlcyhcIndlaWdodFwiKS5TdW0oKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZ3JvdXAoKS5ieShULmxhYmVsKS5ieShfXy5ib3RoRSgpLmdyb3VwKFwiYVwiKS5ieShULmxhYmVsKS5ieShfXy52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKCkuYnkoVC5sYWJlbCkuYnkoX18uYm90aEUoKS5ncm91cChcImFcIikuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhFKCkuZ3JvdXAoXCJhXCIpLmJ5KFQubGFiZWwpLmJ5KF9fLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ncm91cCgpLmJ5KFQubGFiZWwpLmJ5KF9fLmJvdGhfZSgpLmdyb3VwKCdhJykuYnkoVC5sYWJlbCkuYnkoX18udmFsdWVzKCd3ZWlnaHQnKS5zdW1fKCkpLnZhbHVlcygnd2VpZ2h0Jykuc3VtXygpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2lkZUVmZmVjdFhhX19tYXJrb182NjZfbm9vbmVfYmxhaFhfVl9ncm91cFhhWF9ieVhuYW1lWF9ieVhvdXRFX2xhYmVsX2ZvbGRYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbbWFya286W1wiNjY2XCJdLG5vb25lOltcImJsYWhcIl1dKS5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5vdXRFKCkubGFiZWwoKS5mb2xkKCkpLmNhcChcImFcIikudW5mb2xkKCkuZ3JvdXAoKS5ieShDb2x1bW4ua2V5cykuYnkoc2VsZWN0KENvbHVtbi52YWx1ZXMpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShPcmRlci5hc2MpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIFttYXJrbzpbXCI2NjZcIl0sIG5vb25lOltcImJsYWhcIl1dKS5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5vdXRFKCkubGFiZWwoKS5mb2xkKCkpLmNhcChcImFcIikudW5mb2xkKCkuZ3JvdXAoKS5ieShDb2x1bW4ua2V5cykuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShPcmRlci5hc2MpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbbWFya286W1wiNjY2XCJdLCBub29uZTpbXCJibGFoXCJdXSkuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoX18ub3V0RSgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmdyb3VwKCkuYnkoQ29sdW1uLmtleXMpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuYXNjKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNpZGVFZmZlY3Qoc3RyaW5nMCwgbWFwMCkuVigpLmdyb3VwKHN0cmluZzApLmJ5KHN0cmluZzEpLmJ5KF9fLm91dEUoKS5sYWJlbCgpLmZvbGQoKSkuY2FwKHN0cmluZzApLnVuZm9sZCgpLmdyb3VwKCkuYnkoQ29sdW1uLmtleXMpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuYXNjKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2lkZUVmZmVjdChcImFcIiwgbmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwibWFya29cIiwgbmV3IExpc3Q8b2JqZWN0PiB7IFwiNjY2XCIgfSB9LCB7IFwibm9vbmVcIiwgbmV3IExpc3Q8b2JqZWN0PiB7IFwiYmxhaFwiIH0gfX0pLlYoKS5Hcm91cChcImFcIikuQnkoXCJuYW1lXCIpLkJ5KF9fLk91dEUoKS5MYWJlbCgpLkZvbGQoKSkuQ2FwPG9iamVjdD4oXCJhXCIpLlVuZm9sZDxvYmplY3Q+KCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoQ29sdW1uLktleXMpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLk9yZGVyKFNjb3BlLkxvY2FsKS5CeShPcmRlci5Bc2MpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNpZGVFZmZlY3QoXCJhXCIsIG1hcFtpbnRlcmZhY2V7fV1pbnRlcmZhY2V7fXtcIm1hcmtvXCI6IFtdaW50ZXJmYWNle317XCI2NjZcIn0sIFwibm9vbmVcIjogW11pbnRlcmZhY2V7fXtcImJsYWhcIn0gfSkuVigpLkdyb3VwKFwiYVwiKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5PdXRFKCkuTGFiZWwoKS5Gb2xkKCkpLkNhcChcImFcIikuVW5mb2xkKCkuR3JvdXAoKS5CeShncmVtbGluZ28uQ29sdW1uLktleXMpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpLkJ5KGdyZW1saW5nby5PcmRlci5Bc2MpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTaWRlRWZmZWN0KFwiYVwiLCBbbWFya286W1wiNjY2XCJdLCBub29uZTpbXCJibGFoXCJdXSkuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoX18ub3V0RSgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmdyb3VwKCkuYnkoQ29sdW1uLmtleXMpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuYXNjKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNpZGVFZmZlY3QoXCJhXCIsIG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm1hcmtvXCIsIG5ldyBBcnJheUxpc3Q8T2JqZWN0PigpIHt7IGFkZChcIjY2NlwiKTsgfX0pOyBwdXQoXCJub29uZVwiLCBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoXCJibGFoXCIpOyB9fSk7IH19KS5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5vdXRFKCkubGFiZWwoKS5mb2xkKCkpLmNhcChcImFcIikudW5mb2xkKCkuZ3JvdXAoKS5ieShDb2x1bW4ua2V5cykuYnkoX18uc2VsZWN0KENvbHVtbi52YWx1ZXMpLm9yZGVyKFNjb3BlLmxvY2FsKS5ieShPcmRlci5hc2MpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2lkZUVmZmVjdChcImFcIiwgbmV3IE1hcChbW1wibWFya29cIiwgW1wiNjY2XCJdXSwgW1wibm9vbmVcIiwgW1wiYmxhaFwiXV1dKSkuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoX18ub3V0RSgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnVuZm9sZCgpLmdyb3VwKCkuYnkoQ29sdW1uLmtleXMpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuYXNjKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NpZGVfZWZmZWN0KCdhJywgeyAnbWFya28nOiBbJzY2NiddLCAnbm9vbmUnOiBbJ2JsYWgnXSB9KS5WKCkuZ3JvdXAoJ2EnKS5ieSgnbmFtZScpLmJ5KF9fLm91dF9lKCkubGFiZWwoKS5mb2xkKCkpLmNhcCgnYScpLnVuZm9sZCgpLmdyb3VwKCkuYnkoQ29sdW1uLmtleXMpLmJ5KF9fLnNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuYXNjKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX291dFhjcmVhdGVkWF9ncm91cF9ieVhuYW1lWF9ieVhzZWxlY3RYcFhfdmFsdWVzWGFnZVhfc3VtWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikub3V0KFwiY3JlYXRlZFwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikub3V0KFwiY3JlYXRlZFwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uc2VsZWN0KFwicFwiKS52YWx1ZXMoXCJhZ2VcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXNMYWJlbChzdHJpbmcwKS5hcyhzdHJpbmcxKS5vdXQoc3RyaW5nMikuZ3JvdXAoKS5ieShzdHJpbmczKS5ieShfXy5zZWxlY3Qoc3RyaW5nMSkudmFsdWVzKHN0cmluZzQpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcInBcIikuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShcIm5hbWVcIikuQnkoX18uU2VsZWN0PG9iamVjdD4oXCJwXCIpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLlN1bTxvYmplY3Q+KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJwZXJzb25cIikuQXMoXCJwXCIpLk91dChcImNyZWF0ZWRcIikuR3JvdXAoKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJwXCIpLlZhbHVlcyhcImFnZVwiKS5TdW0oKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoKS5ieShcIm5hbWVcIikuYnkoX18uc2VsZWN0KFwicFwiKS52YWx1ZXMoXCJhZ2VcIikuc3VtKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInBlcnNvblwiKS5hcyhcInBcIikub3V0KFwiY3JlYXRlZFwiKS5ncm91cCgpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicFwiKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwKCkuYnkoXCJuYW1lXCIpLmJ5KF9fLnNlbGVjdChcInBcIikudmFsdWVzKFwiYWdlXCIpLnN1bSgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmFzXygncCcpLm91dCgnY3JlYXRlZCcpLmdyb3VwKCkuYnkoJ25hbWUnKS5ieShfXy5zZWxlY3QoJ3AnKS52YWx1ZXMoJ2FnZScpLnN1bV8oKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLmxhYmVsKCkpLmJ5KF9fLmxhYmVsKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeShfXy5MYWJlbCgpKS5CeShfXy5MYWJlbCgpLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVF9fLkxhYmVsKCkpLkJ5KGdyZW1saW5nby5UX18uTGFiZWwoKS5Db3VudCgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLmxhYmVsKCkpLmJ5KF9fLmxhYmVsKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy5sYWJlbCgpKS5ieShfXy5sYWJlbCgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hwZXJzb25fbmFtZV93aXRoaW5YdmFkYXNfcGV0ZXJYWF9ncm91cF9ieV9ieVhvdXRfb3JkZXJfZm9sZFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsUC53aXRoaW4oXCJ2YWRhc1wiLFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIFAud2l0aGluKHN0cmluZzIsIHN0cmluZzMpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC5XaXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeSgpLkJ5KF9fLk91dCgpLk9yZGVyKCkuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuR3JvdXAoKS5CeSgpLkJ5KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsIFAud2l0aGluKCd2YWRhcycsICdwZXRlcicpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwX2J5X2J5WG91dF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixQLndpdGhpbihcInZhZGFzXCIsXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgUC53aXRoaW4oc3RyaW5nMiwgc3RyaW5nMykpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC5XaXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeSgpLkJ5KF9fLk91dCgpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLkdyb3VwKCkuQnkoKS5CeShncmVtbGluZ28uVF9fLk91dCgpLkZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgUC53aXRoaW4oJ3ZhZGFzJywgJ3BldGVyJykpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwX2J5X2J5WG91dF9vcmRlclgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsUC53aXRoaW4oXCJ2YWRhc1wiLFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIFAud2l0aGluKHN0cmluZzIsIHN0cmluZzMpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLldpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KCkuQnkoX18uT3V0KCkuT3JkZXIoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLkdyb3VwKCkuQnkoKS5CeShncmVtbGluZ28uVF9fLk91dCgpLk9yZGVyKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsIFAud2l0aGluKCd2YWRhcycsICdwZXRlcicpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBfYnlfYnlYb3V0X29yZGVyX2NvdW50WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIixcIm5hbWVcIixQLndpdGhpbihcInZhZGFzXCIsXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgUC53aXRoaW4oc3RyaW5nMiwgc3RyaW5nMykpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC5XaXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeSgpLkJ5KF9fLk91dCgpLk9yZGVyKCkuQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLkdyb3VwKCkuQnkoKS5CeShncmVtbGluZ28uVF9fLk91dCgpLk9yZGVyKCkuQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgUC53aXRoaW4oJ3ZhZGFzJywgJ3BldGVyJykpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmNvdW50KCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwX2J5X2J5WG91dF9vcmRlcl9mb2xkX2NvdW50WGxvY2FsWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsUC53aXRoaW4oXCJ2YWRhc1wiLFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChsb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIFAud2l0aGluKHN0cmluZzIsIHN0cmluZzMpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAuV2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoKS5CeShfXy5PdXQoKS5PcmRlcigpLkZvbGQoKS5Db3VudChTY29wZS5Mb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBncmVtbGluZ28uUC5XaXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5Hcm91cCgpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkZvbGQoKS5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCBQLndpdGhpbigndmFkYXMnLCAncGV0ZXInKSkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpLmNvdW50KFNjb3BlLmxvY2FsKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cF9ieV9ieVhvdXRfbGFiZWxfZm9sZFhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoKS5CeShfXy5PdXQoKS5MYWJlbCgpLkZvbGQoKSkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5PcmRlcihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5MYWJlbCgpLkZvbGQoKSkuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlfYnlYb3V0X2xhYmVsX2RlZHVwX2ZvbGRYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXA8b2JqZWN0LCBvYmplY3Q+KCkuQnkoKS5CeShfXy5PdXQoKS5MYWJlbCgpLkRlZHVwKCkuRm9sZCgpKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLk9yZGVyKFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKCkuQnkoKS5CeShncmVtbGluZ28uVF9fLk91dCgpLkxhYmVsKCkuRGVkdXAoKS5Gb2xkKCkpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmRlZHVwKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmRlZHVwKCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlfYnlYb3V0X2xhYmVsX2xpbWl0WDBYX2ZvbGRYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdChudW1iZXIwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeSgpLkJ5KF9fLk91dCgpLkxhYmVsKCkuTGltaXQ8b2JqZWN0PigwKS5Gb2xkKCkpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5MYWJlbCgpLkxpbWl0KDApLkZvbGQoKSkuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlfYnlYb3V0X2xhYmVsX2xpbWl0WDEwWF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgxMCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KG51bWJlcjApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cDxvYmplY3QsIG9iamVjdD4oKS5CeSgpLkJ5KF9fLk91dCgpLkxhYmVsKCkuTGltaXQ8b2JqZWN0PigxMCkuRm9sZCgpKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLk9yZGVyKFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKCkuQnkoKS5CeShncmVtbGluZ28uVF9fLk91dCgpLkxhYmVsKCkuTGltaXQoMTApLkZvbGQoKSkuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMTApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwX2J5X2J5WG91dF9sYWJlbF90YWlsWDEwWF9mb2xkWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS50YWlsKDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwobnVtYmVyMCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KCkuQnkoX18uT3V0KCkuTGFiZWwoKS5UYWlsPG9iamVjdD4oMTApLkZvbGQoKSkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5PcmRlcihTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cCgpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5MYWJlbCgpLlRhaWwoMTApLkZvbGQoKSkuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbCgxMCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS50YWlsKDEwKS5mb2xkKCkpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbCgxMCkuZm9sZCgpKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfYnlfc2VsZWN0WGFYX2NvdW50WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KCkuc2VsZWN0KFwiYVwiKS5jb3VudChsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KCkuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cChzdHJpbmcwKS5ieShzdHJpbmcxKS5ieSgpLnNlbGVjdChzdHJpbmcwKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXAoXCJhXCIpLkJ5KFwibmFtZVwiKS5CeSgpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5Db3VudChTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cChcImFcIikuQnkoXCJuYW1lXCIpLkJ5KCkuU2VsZWN0KFwiYVwiKS5Db3VudChncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KCkuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoJ2EnKS5ieSgnbmFtZScpLmJ5KCkuc2VsZWN0KCdhJykuY291bnQoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfbG9jYWxYZ3JvdXBYYVhfYnlYbmFtZVhfYnlfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwoZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQobG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmxvY2FsKF9fLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXAoc3RyaW5nMCkuYnkoc3RyaW5nMSkuYnkoKS5zZWxlY3Qoc3RyaW5nMCkuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkdyb3VwKFwiYVwiKS5CeShcIm5hbWVcIikuQnkoKS5TZWxlY3Q8b2JqZWN0PihcImFcIikuQ291bnQoU2NvcGUuTG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkxvY2FsKGdyZW1saW5nby5UX18uR3JvdXAoXCJhXCIpLkJ5KFwibmFtZVwiKS5CeSgpLlNlbGVjdChcImFcIikuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieSgpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5sb2NhbChfXy5ncm91cCgnYScpLmJ5KCduYW1lJykuYnkoKS5zZWxlY3QoJ2EnKS5jb3VudChTY29wZS5sb2NhbCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYdmFsdWVzWG5hbWVYWF9ieVhib3RoX2NvdW50WCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KHZhbHVlcygnbmFtZScpKS5ieShib3RoKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcygnbmFtZScpKS5ieShfXy5ib3RoKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoJ25hbWUnKSkuYnkoX18uYm90aCgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcyhzdHJpbmcwKSkuYnkoX18uYm90aCgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKSkuQnkoX18uQm90aCgpLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoKS5CeShncmVtbGluZ28uVF9fLlZhbHVlcyhcIm5hbWVcIikpLkJ5KGdyZW1saW5nby5UX18uQm90aCgpLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKCduYW1lJykpLmJ5KF9fLmJvdGgoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpKS5ieShfXy5ib3RoKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKSkuYnkoX18uYm90aCgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKCduYW1lJykpLmJ5KF9fLmJvdGgoKS5jb3VudCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dFhjcmVhdGVkWF9ncm91cENvdW50X2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5ncm91cENvdW50KCkuYnkoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cENvdW50PG9iamVjdD4oKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLkdyb3VwQ291bnQoKS5CeShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudCgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS5ncm91cF9jb3VudCgpLmJ5KCduYW1lJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cENvdW50X2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwQ291bnQoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXBDb3VudCgpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwQ291bnQoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cENvdW50KCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXBfY291bnQoKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFN0cmF0ZWdpZXNYUHJvZHVjdGl2ZUJ5U3RyYXRlZ3lYX1ZfZ3JvdXBDb3VudF9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5ncm91cENvdW50KCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXBDb3VudCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5ncm91cENvdW50KCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFN0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3kpLlYoKS5ncm91cENvdW50KCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU3RyYXRlZ2llcyhuZXcgUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU3RyYXRlZ2llcyhncmVtbGluZ28uUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLkdyb3VwQ291bnQoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5KS5WKCkuZ3JvdXBDb3VudCgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTdHJhdGVnaWVzKFByb2R1Y3RpdmVCeVN0cmF0ZWd5Lmluc3RhbmNlKCkpLlYoKS5ncm91cENvdW50KCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFN0cmF0ZWdpZXMobmV3IFByb2R1Y3RpdmVCeVN0cmF0ZWd5KCkpLlYoKS5ncm91cENvdW50KCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3N0cmF0ZWdpZXMoUHJvZHVjdGl2ZUJ5U3RyYXRlZ3koKSkuVigpLmdyb3VwX2NvdW50KCkuYnkoJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoc3RyaW5nMCkudmFsdWVzKHN0cmluZzEpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Hcm91cENvdW50PG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dChcImNyZWF0ZWRcIikuVmFsdWVzKFwibmFtZVwiKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoJ2NyZWF0ZWQnKS52YWx1ZXMoJ25hbWUnKS5ncm91cF9jb3VudCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRYYVhfYnlYbmFtZVhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoXCJhXCIpLmJ5KFwibmFtZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dChzdHJpbmcwKS5ncm91cENvdW50KHN0cmluZzEpLmJ5KHN0cmluZzIpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLkdyb3VwQ291bnQoXCJhXCIpLkJ5KFwibmFtZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLkdyb3VwQ291bnQoXCJhXCIpLkJ5KFwibmFtZVwiKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCdjcmVhdGVkJykuZ3JvdXBfY291bnQoJ2EnKS5ieSgnbmFtZScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGNyZWF0ZWRYX25hbWVfZ3JvdXBDb3VudFhhWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KHN0cmluZzApLnZhbHVlcyhzdHJpbmcxKS5ncm91cENvdW50KHN0cmluZzIpLmNhcChzdHJpbmcyKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Hcm91cENvdW50KFwiYVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLlZhbHVlcyhcIm5hbWVcIikuR3JvdXBDb3VudChcImFcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikudmFsdWVzKFwibmFtZVwiKS5ncm91cENvdW50KFwiYVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgnY3JlYXRlZCcpLnZhbHVlcygnbmFtZScpLmdyb3VwX2NvdW50KCdhJykuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9yZXBlYXRYb3V0X2dyb3VwQ291bnRYYVhfYnlYbmFtZVhYX3RpbWVzWDJYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLmdyb3VwQ291bnQoXCJhXCIpLmJ5KFwibmFtZVwiKSkudGltZXMoMikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudChzdHJpbmcwKS5ieShzdHJpbmcxKSkudGltZXMobnVtYmVyMCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlJlcGVhdChfXy5PdXQoKS5Hcm91cENvdW50KFwiYVwiKS5CeShcIm5hbWVcIikpLlRpbWVzKDIpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpLkdyb3VwQ291bnQoXCJhXCIpLkJ5KFwibmFtZVwiKSkuVGltZXMoMikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnJlcGVhdChfXy5vdXQoKS5ncm91cF9jb3VudCgnYScpLmJ5KCduYW1lJykpLnRpbWVzKDIpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfYm90aF9ncm91cENvdW50WGFYX2J5WGxhYmVsWF9hc1hiWF9iYXJyaWVyX3doZXJlWHNlbGVjdFhhWF9zZWxlY3RYc29mdHdhcmVYX2lzWGd0WDJYWFhfc2VsZWN0WGJYX25hbWUiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuYm90aCgpLmdyb3VwQ291bnQoXCJhXCIpLmJ5KFQubGFiZWwpLmFzKFwiYlwiKS5iYXJyaWVyKCkud2hlcmUoX18uc2VsZWN0KFwiYVwiKS5zZWxlY3QoXCJzb2Z0d2FyZVwiKS5pcyhQLmd0KDIpKSkuc2VsZWN0KFwiYlwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuYm90aCgpLmdyb3VwQ291bnQoXCJhXCIpLmJ5KFQubGFiZWwpLmFzKFwiYlwiKS5iYXJyaWVyKCkud2hlcmUoX18uc2VsZWN0KFwiYVwiKS5zZWxlY3QoXCJzb2Z0d2FyZVwiKS5pcyhQLmd0KDIpKSkuc2VsZWN0KFwiYlwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmJvdGgoKS5ncm91cENvdW50KFwiYVwiKS5ieShULmxhYmVsKS5hcyhcImJcIikuYmFycmllcigpLndoZXJlKF9fLnNlbGVjdChcImFcIikuc2VsZWN0KFwic29mdHdhcmVcIikuaXMoUC5ndCgyKSkpLnNlbGVjdChcImJcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuYm90aCgpLmdyb3VwQ291bnQoc3RyaW5nMCkuYnkoVC5sYWJlbCkuYXMoc3RyaW5nMSkuYmFycmllcigpLndoZXJlKF9fLnNlbGVjdChzdHJpbmcwKS5zZWxlY3Qoc3RyaW5nMikuaXMoUC5ndChudW1iZXIwKSkpLnNlbGVjdChzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuQm90aCgpLkdyb3VwQ291bnQoXCJhXCIpLkJ5KFQuTGFiZWwpLkFzKFwiYlwiKS5CYXJyaWVyKCkuV2hlcmUoX18uU2VsZWN0PG9iamVjdD4oXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwic29mdHdhcmVcIikuSXMoUC5HdCgyKSkpLlNlbGVjdDxvYmplY3Q+KFwiYlwiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Cb3RoKCkuR3JvdXBDb3VudChcImFcIikuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpLkFzKFwiYlwiKS5CYXJyaWVyKCkuV2hlcmUoZ3JlbWxpbmdvLlRfXy5TZWxlY3QoXCJhXCIpLlNlbGVjdChcInNvZnR3YXJlXCIpLklzKGdyZW1saW5nby5QLkd0KDIpKSkuU2VsZWN0KFwiYlwiKS5WYWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS5ncm91cENvdW50KFwiYVwiKS5ieShULmxhYmVsKS5hcyhcImJcIikuYmFycmllcigpLndoZXJlKF9fLnNlbGVjdChcImFcIikuc2VsZWN0KFwic29mdHdhcmVcIikuaXMoUC5ndCgyKSkpLnNlbGVjdChcImJcIikudmFsdWVzKFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLmdyb3VwQ291bnQoXCJhXCIpLmJ5KFQubGFiZWwpLmFzKFwiYlwiKS5iYXJyaWVyKCkud2hlcmUoX18uc2VsZWN0KFwiYVwiKS5zZWxlY3QoXCJzb2Z0d2FyZVwiKS5pcyhQLmd0KDIpKSkuc2VsZWN0KFwiYlwiKS52YWx1ZXMoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkuZ3JvdXBDb3VudChcImFcIikuYnkoVC5sYWJlbCkuYXMoXCJiXCIpLmJhcnJpZXIoKS53aGVyZShfXy5zZWxlY3QoXCJhXCIpLnNlbGVjdChcInNvZnR3YXJlXCIpLmlzKFAuZ3QoMikpKS5zZWxlY3QoXCJiXCIpLnZhbHVlcyhcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLmdyb3VwX2NvdW50KCdhJykuYnkoVC5sYWJlbCkuYXNfKCdiJykuYmFycmllcigpLndoZXJlKF9fLnNlbGVjdCgnYScpLnNlbGVjdCgnc29mdHdhcmUnKS5pc18oUC5ndCgyKSkpLnNlbGVjdCgnYicpLnZhbHVlcygnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfdW5pb25Yb3V0WGtub3dzWF9fb3V0WGNyZWF0ZWRYX2luWGNyZWF0ZWRYWF9ncm91cENvdW50X3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkudW5pb24oX18ub3V0KFwia25vd3NcIiksX18ub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS51bmlvbihfXy5vdXQoXCJrbm93c1wiKSwgX18ub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudW5pb24oX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS51bmlvbihfXy5vdXQoc3RyaW5nMCksIF9fLm91dChzdHJpbmcxKS5pbihzdHJpbmcxKSkuZ3JvdXBDb3VudCgpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5VbmlvbjxvYmplY3Q+KF9fLk91dChcImtub3dzXCIpLCBfXy5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKSkuR3JvdXBDb3VudDxvYmplY3Q+KCkuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuVW5pb24oZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKSwgZ3JlbWxpbmdvLlRfXy5PdXQoXCJjcmVhdGVkXCIpLkluKFwiY3JlYXRlZFwiKSkuR3JvdXBDb3VudCgpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkudW5pb24oX18ub3V0KFwia25vd3NcIiksIF9fLm91dChcImNyZWF0ZWRcIikuaW4oXCJjcmVhdGVkXCIpKS5ncm91cENvdW50KCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS51bmlvbihfXy5vdXQoXCJrbm93c1wiKSwgX18ub3V0KFwiY3JlYXRlZFwiKS5pbihcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnVuaW9uKF9fLm91dChcImtub3dzXCIpLCBfXy5vdXQoXCJjcmVhdGVkXCIpLmluXyhcImNyZWF0ZWRcIikpLmdyb3VwQ291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkudW5pb24oX18ub3V0KCdrbm93cycpLCBfXy5vdXQoJ2NyZWF0ZWQnKS5pbl8oJ2NyZWF0ZWQnKSkuZ3JvdXBfY291bnQoKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkuc3VtXygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWG5vWF9ncm91cENvdW50IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcIm5vXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5vXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJub1wiKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibm9cIikuR3JvdXBDb3VudDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJub1wiKS5Hcm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibm9cIikuZ3JvdXBDb3VudCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJub1wiKS5ncm91cENvdW50KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcIm5vXCIpLmdyb3VwQ291bnQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25vJykuZ3JvdXBfY291bnQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hub1hfZ3JvdXBDb3VudFhhWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwibm9cIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcIm5vXCIpLmdyb3VwQ291bnQoXCJhXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwibm9cIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzApLmdyb3VwQ291bnQoc3RyaW5nMSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcIm5vXCIpLkdyb3VwQ291bnQoXCJhXCIpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcIm5vXCIpLkdyb3VwQ291bnQoXCJhXCIpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibm9cIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwibm9cIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwibm9cIikuZ3JvdXBDb3VudChcImFcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ25vJykuZ3JvdXBfY291bnQoJ2EnKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3VuaW9uWHJlcGVhdFhvdXRYX3RpbWVzWDJYX2dyb3VwQ291bnRYbVhfYnlYbGFuZ1hYX19yZXBlYXRYaW5YX3RpbWVzWDJYX2dyb3VwQ291bnRYbVhfYnlYbmFtZVhYX2NhcFhtWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmdyb3VwQ291bnQoXCJtXCIpLmJ5KFwibGFuZ1wiKSxfXy5yZXBlYXQoX18uaW4oKSkudGltZXMoMikuZ3JvdXBDb3VudChcIm1cIikuYnkoXCJuYW1lXCIpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5ncm91cENvdW50KFwibVwiKS5ieShcImxhbmdcIiksIF9fLnJlcGVhdChfXy5pbigpKS50aW1lcygyKS5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5ncm91cENvdW50KFwibVwiKS5ieShcImxhbmdcIiksIF9fLnJlcGVhdChfXy5pbigpKS50aW1lcygyKS5ncm91cENvdW50KFwibVwiKS5ieShcIm5hbWVcIikpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy5vdXQoKSkudGltZXMobnVtYmVyMCkuZ3JvdXBDb3VudChzdHJpbmcwKS5ieShzdHJpbmcxKSwgX18ucmVwZWF0KF9fLmluKCkpLnRpbWVzKG51bWJlcjApLmdyb3VwQ291bnQoc3RyaW5nMCkuYnkoc3RyaW5nMikpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5VbmlvbjxvYmplY3Q+KF9fLlJlcGVhdChfXy5PdXQoKSkuVGltZXMoMikuR3JvdXBDb3VudChcIm1cIikuQnkoXCJsYW5nXCIpLCBfXy5SZXBlYXQoX18uSW4oKSkuVGltZXMoMikuR3JvdXBDb3VudChcIm1cIikuQnkoXCJuYW1lXCIpKS5DYXA8b2JqZWN0PihcIm1cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5VbmlvbihncmVtbGluZ28uVF9fLlJlcGVhdChncmVtbGluZ28uVF9fLk91dCgpKS5UaW1lcygyKS5Hcm91cENvdW50KFwibVwiKS5CeShcImxhbmdcIiksIGdyZW1saW5nby5UX18uUmVwZWF0KGdyZW1saW5nby5UX18uSW4oKSkuVGltZXMoMikuR3JvdXBDb3VudChcIm1cIikuQnkoXCJuYW1lXCIpKS5DYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZ3JvdXBDb3VudChcIm1cIikuYnkoXCJsYW5nXCIpLCBfXy5yZXBlYXQoX18uaW4oKSkudGltZXMoMikuZ3JvdXBDb3VudChcIm1cIikuYnkoXCJuYW1lXCIpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS51bmlvbihfXy5yZXBlYXQoX18ub3V0KCkpLnRpbWVzKDIpLmdyb3VwQ291bnQoXCJtXCIpLmJ5KFwibGFuZ1wiKSwgX18ucmVwZWF0KF9fLmluKCkpLnRpbWVzKDIpLmdyb3VwQ291bnQoXCJtXCIpLmJ5KFwibmFtZVwiKSkuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkudW5pb24oX18ucmVwZWF0KF9fLm91dCgpKS50aW1lcygyKS5ncm91cENvdW50KFwibVwiKS5ieShcImxhbmdcIiksIF9fLnJlcGVhdChfXy5pbl8oKSkudGltZXMoMikuZ3JvdXBDb3VudChcIm1cIikuYnkoXCJuYW1lXCIpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnVuaW9uKF9fLnJlcGVhdChfXy5vdXQoKSkudGltZXMoMikuZ3JvdXBfY291bnQoJ20nKS5ieSgnbGFuZycpLCBfXy5yZXBlYXQoX18uaW5fKCkpLnRpbWVzKDIpLmdyb3VwX2NvdW50KCdtJykuYnkoJ25hbWUnKSkuY2FwKCdtJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRYY3JlYXRlZFhfZ3JvdXBDb3VudFh4WF9jYXBYeFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KFwieFwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KFwieFwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcInhcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KHN0cmluZzApLmdyb3VwQ291bnQoc3RyaW5nMSkuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dChcImNyZWF0ZWRcIikuR3JvdXBDb3VudChcInhcIikuQ2FwPG9iamVjdD4oXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cENvdW50KFwieFwiKS5DYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcInhcIikuY2FwKFwieFwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KFwieFwiKS5jYXAoXCJ4XCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoXCJ4XCIpLmNhcChcInhcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCdjcmVhdGVkJykuZ3JvdXBfY291bnQoJ3gnKS5jYXAoJ3gnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwQ291bnRfYnlYYm90aEVfY291bnRYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwQ291bnQoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwQ291bnQoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwQ291bnQ8b2JqZWN0PigpLkJ5KF9fLkJvdGhFKCkuQ291bnQoKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cENvdW50KCkuQnkoZ3JlbWxpbmdvLlRfXy5Cb3RoRSgpLkNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwQ291bnQoKS5ieShfXy5ib3RoRSgpLmNvdW50KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cENvdW50KCkuYnkoX18uYm90aEUoKS5jb3VudCgpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXBDb3VudCgpLmJ5KF9fLmJvdGhFKCkuY291bnQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXBfY291bnQoKS5ieShfXy5ib3RoX2UoKS5jb3VudCgpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfb3V0X2NhcFhhWF9zZWxlY3RYa2V5c1hfdW5mb2xkX2JvdGhfbG9jYWxYZ3JvdXBDb3VudFhhWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmJvdGgoKS5sb2NhbChncm91cENvdW50KFwiYVwiKSkub3V0KCkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmJvdGgoKS5sb2NhbChncm91cENvdW50KFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KFwiYVwiKSkub3V0KCkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudChcImFcIikpLm91dCgpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudChcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KHN0cmluZzApKS5vdXQoKS5jYXAoc3RyaW5nMCkuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudChzdHJpbmcwKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkJvdGgoKS5Mb2NhbDxvYmplY3Q+KF9fLkdyb3VwQ291bnQoXCJhXCIpKS5PdXQoKS5DYXA8b2JqZWN0PihcImFcIikuU2VsZWN0PG9iamVjdD4oQ29sdW1uLktleXMpLlVuZm9sZDxvYmplY3Q+KCkuQm90aCgpLkxvY2FsPG9iamVjdD4oX18uR3JvdXBDb3VudChcImFcIikpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkJvdGgoKS5Mb2NhbChncmVtbGluZ28uVF9fLkdyb3VwQ291bnQoXCJhXCIpKS5PdXQoKS5DYXAoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLktleXMpLlVuZm9sZCgpLkJvdGgoKS5Mb2NhbChncmVtbGluZ28uVF9fLkdyb3VwQ291bnQoXCJhXCIpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KFwiYVwiKSkub3V0KCkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLmtleXMpLnVuZm9sZCgpLmJvdGgoKS5sb2NhbChfXy5ncm91cENvdW50KFwiYVwiKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuYm90aCgpLmxvY2FsKF9fLmdyb3VwQ291bnQoXCJhXCIpKS5vdXQoKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkuYm90aCgpLmxvY2FsKF9fLmdyb3VwQ291bnQoXCJhXCIpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudChcImFcIikpLm91dCgpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi5rZXlzKS51bmZvbGQoKS5ib3RoKCkubG9jYWwoX18uZ3JvdXBDb3VudChcImFcIikpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuYm90aCgpLmxvY2FsKF9fLmdyb3VwX2NvdW50KCdhJykpLm91dCgpLmNhcCgnYScpLnNlbGVjdChDb2x1bW4ua2V5cykudW5mb2xkKCkuYm90aCgpLmxvY2FsKF9fLmdyb3VwX2NvdW50KCdhJykpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX21hcmtvWF9ib3RoWGtub3dzWF9ncm91cENvdW50X2J5WHZhbHVlc1huYW1lWF9mb2xkWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuYm90aChcImtub3dzXCIpLmdyb3VwQ291bnQoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuYm90aChcImtub3dzXCIpLmdyb3VwQ291bnQoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmJvdGgoXCJrbm93c1wiKS5ncm91cENvdW50KCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5oYXMoc3RyaW5nMCwgc3RyaW5nMSwgc3RyaW5nMikuYm90aChzdHJpbmczKS5ncm91cENvdW50KCkuYnkoX18udmFsdWVzKHN0cmluZzEpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLkJvdGgoXCJrbm93c1wiKS5Hcm91cENvdW50PG9iamVjdD4oKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5Cb3RoKFwia25vd3NcIikuR3JvdXBDb3VudCgpLkJ5KGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5Gb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgXCJtYXJrb1wiKS5ib3RoKFwia25vd3NcIikuZ3JvdXBDb3VudCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuZm9sZCgpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBcIm1hcmtvXCIpLmJvdGgoXCJrbm93c1wiKS5ncm91cENvdW50KCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5mb2xkKCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFwibWFya29cIikuYm90aChcImtub3dzXCIpLmdyb3VwQ291bnQoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLmZvbGQoKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLmJvdGgoJ2tub3dzJykuZ3JvdXBfY291bnQoKS5ieShfXy52YWx1ZXMoJ25hbWUnKS5mb2xkKCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0WGNyZWF0ZWRYX2dyb3VwQ291bnRfYnlYbmFtZVhfYnlYYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoc3RyaW5nMCkuZ3JvdXBDb3VudCgpLmJ5KHN0cmluZzEpLmJ5KHN0cmluZzIpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dChcImNyZWF0ZWRcIikuR3JvdXBDb3VudDxvYmplY3Q+KCkuQnkoXCJuYW1lXCIpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cENvdW50KCkuQnkoXCJuYW1lXCIpLkJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudCgpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KCkuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkub3V0KCdjcmVhdGVkJykuZ3JvdXBfY291bnQoKS5ieSgnbmFtZScpLmJ5KCdhZ2UnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX291dFhjcmVhdGVkWF9ncm91cENvdW50WHhYX2J5WG5hbWVYX2J5WGFnZVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KFwieFwiKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0KHN0cmluZzApLmdyb3VwQ291bnQoc3RyaW5nMSkuYnkoc3RyaW5nMikuYnkoc3RyaW5nMykiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cENvdW50KFwieFwiKS5CeShcIm5hbWVcIikuQnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoXCJjcmVhdGVkXCIpLkdyb3VwQ291bnQoXCJ4XCIpLkJ5KFwibmFtZVwiKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwQ291bnQoXCJ4XCIpLmJ5KFwibmFtZVwiKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KFwiY3JlYXRlZFwiKS5ncm91cENvdW50KFwieFwiKS5ieShcIm5hbWVcIikuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dChcImNyZWF0ZWRcIikuZ3JvdXBDb3VudChcInhcIikuYnkoXCJuYW1lXCIpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgnY3JlYXRlZCcpLmdyb3VwX2NvdW50KCd4JykuYnkoJ25hbWUnKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cENvdW50WGFYX3NlbGVjdFhhWF9jb3VudFhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXBDb3VudChcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChsb2NhbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cENvdW50KFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cENvdW50KFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXBDb3VudChzdHJpbmcwKS5zZWxlY3Qoc3RyaW5nMCkuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwQ291bnQoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5Db3VudChTY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cENvdW50KFwiYVwiKS5TZWxlY3QoXCJhXCIpLkNvdW50KGdyZW1saW5nby5TY29wZS5Mb2NhbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZ3JvdXBDb3VudChcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwQ291bnQoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cENvdW50KFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ncm91cF9jb3VudCgnYScpLnNlbGVjdCgnYScpLmNvdW50KFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2xvY2FsWGdyb3VwQ291bnRYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkubG9jYWwoZ3JvdXBDb3VudChcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChsb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXBDb3VudChcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmxvY2FsKF9fLmdyb3VwQ291bnQoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXBDb3VudChzdHJpbmcwKS5zZWxlY3Qoc3RyaW5nMCkuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Mb2NhbDxvYmplY3Q+KF9fLkdyb3VwQ291bnQoXCJhXCIpLlNlbGVjdDxvYmplY3Q+KFwiYVwiKS5Db3VudChTY29wZS5Mb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5Hcm91cENvdW50KFwiYVwiKS5TZWxlY3QoXCJhXCIpLkNvdW50KGdyZW1saW5nby5TY29wZS5Mb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmxvY2FsKF9fLmdyb3VwQ291bnQoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkubG9jYWwoX18uZ3JvdXBDb3VudChcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5sb2NhbChfXy5ncm91cENvdW50KFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkubG9jYWwoX18uZ3JvdXBfY291bnQoJ2EnKS5zZWxlY3QoJ2EnKS5jb3VudChTY29wZS5sb2NhbCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X25hbWVfaW5qZWN0WGRhbmllbFhfYXNYYVhfbWFwWGxlbmd0aFhfcGF0aCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKS5pbmplY3QoXCJkYW5pZWxcIikuYXMoXCJhXCIpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLnZhbHVlcyhcIm5hbWVcIikuaW5qZWN0KFwiZGFuaWVsXCIpLmFzKFwiYVwiKS5tYXAoX18ubGVuZ3RoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKS5pbmplY3QoXCJkYW5pZWxcIikuYXMoXCJhXCIpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKHN0cmluZzApLmluamVjdChzdHJpbmcxKS5hcyhzdHJpbmcyKS5tYXAoX18ubGVuZ3RoKCkpLnBhdGgoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkuVmFsdWVzPG9iamVjdD4oXCJuYW1lXCIpLkluamVjdChcImRhbmllbFwiKS5BcyhcImFcIikuTWFwPG9iamVjdD4oX18uTGVuZ3RoKCkpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5WYWx1ZXMoXCJuYW1lXCIpLkluamVjdChcImRhbmllbFwiKS5BcyhcImFcIikuTWFwKGdyZW1saW5nby5UX18uTGVuZ3RoKCkpLlBhdGgoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKS5pbmplY3QoXCJkYW5pZWxcIikuYXMoXCJhXCIpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKS5pbmplY3QoXCJkYW5pZWxcIikuYXMoXCJhXCIpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KCkudmFsdWVzKFwibmFtZVwiKS5pbmplY3QoXCJkYW5pZWxcIikuYXMoXCJhXCIpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS52YWx1ZXMoJ25hbWUnKS5pbmplY3QoJ2RhbmllbCcpLmFzXygnYScpLm1hcChfXy5sZW5ndGgoKSkucGF0aCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsXzFfM19udWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsLCAxLCAzLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwLCBudW1iZXIwLCBudW1iZXIxLCBvYmplY3QwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KG51bGwsIDEsIDMsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsLCAxLCAzLCBuaWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsLCAxLCAzLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCwgMSwgMywgbnVsbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSwgMSwgMywgTm9uZSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDEwXzIwX251bGxfMjBfMTBfMTBYX2dyb3VwQ291bnRYeFhfZGVkdXBfYXNYeVhfcHJvamVjdFhhX2JYX2J5X2J5WHNlbGVjdFh4WF9zZWxlY3RYc2VsZWN0WHlYWFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoMTAsMjAsbnVsbCwyMCwxMCwxMCkuZ3JvdXBDb3VudChcInhcIikuZGVkdXAoKS5hcyhcInlcIikucHJvamVjdChcImFcIixcImJcIikuYnkoKS5ieShfXy5zZWxlY3QoXCJ4XCIpLnNlbGVjdChfXy5zZWxlY3QoXCJ5XCIpKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxMCwgMjAsIG51bGwsIDIwLCAxMCwgMTApLmdyb3VwQ291bnQoXCJ4XCIpLmRlZHVwKCkuYXMoXCJ5XCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieSgpLmJ5KF9fLnNlbGVjdChcInhcIikuc2VsZWN0KF9fLnNlbGVjdChcInlcIikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdCgxMCwgMjAsIG51bGwsIDIwLCAxMCwgMTApLmdyb3VwQ291bnQoXCJ4XCIpLmRlZHVwKCkuYXMoXCJ5XCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieSgpLmJ5KF9fLnNlbGVjdChcInhcIikuc2VsZWN0KF9fLnNlbGVjdChcInlcIikpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobnVtYmVyMCwgbnVtYmVyMSwgb2JqZWN0MCwgbnVtYmVyMSwgbnVtYmVyMCwgbnVtYmVyMCkuZ3JvdXBDb3VudChzdHJpbmcwKS5kZWR1cCgpLmFzKHN0cmluZzEpLnByb2plY3Qoc3RyaW5nMiwgc3RyaW5nMykuYnkoKS5ieShfXy5zZWxlY3Qoc3RyaW5nMCkuc2VsZWN0KF9fLnNlbGVjdChzdHJpbmcxKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4oMTAsIDIwLCBudWxsLCAyMCwgMTAsIDEwKS5Hcm91cENvdW50KFwieFwiKS5EZWR1cCgpLkFzKFwieVwiKS5Qcm9qZWN0PG9iamVjdD4oXCJhXCIsIFwiYlwiKS5CeSgpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwieFwiKS5TZWxlY3Q8b2JqZWN0PihfXy5TZWxlY3Q8b2JqZWN0PihcInlcIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KDEwLCAyMCwgbmlsLCAyMCwgMTAsIDEwKS5Hcm91cENvdW50KFwieFwiKS5EZWR1cCgpLkFzKFwieVwiKS5Qcm9qZWN0KFwiYVwiLCBcImJcIikuQnkoKS5CeShncmVtbGluZ28uVF9fLlNlbGVjdChcInhcIikuU2VsZWN0KGdyZW1saW5nby5UX18uU2VsZWN0KFwieVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEwLCAyMCwgbnVsbCwgMjAsIDEwLCAxMCkuZ3JvdXBDb3VudChcInhcIikuZGVkdXAoKS5hcyhcInlcIikucHJvamVjdChcImFcIiwgXCJiXCIpLmJ5KCkuYnkoX18uc2VsZWN0KFwieFwiKS5zZWxlY3QoX18uc2VsZWN0KFwieVwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdCgxMCwgMjAsIG51bGwsIDIwLCAxMCwgMTApLmdyb3VwQ291bnQoXCJ4XCIpLmRlZHVwKCkuYXMoXCJ5XCIpLnByb2plY3QoXCJhXCIsIFwiYlwiKS5ieSgpLmJ5KF9fLnNlbGVjdChcInhcIikuc2VsZWN0KF9fLnNlbGVjdChcInlcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QoMTAsIDIwLCBudWxsLCAyMCwgMTAsIDEwKS5ncm91cENvdW50KFwieFwiKS5kZWR1cCgpLmFzKFwieVwiKS5wcm9qZWN0KFwiYVwiLCBcImJcIikuYnkoKS5ieShfXy5zZWxlY3QoXCJ4XCIpLnNlbGVjdChfXy5zZWxlY3QoXCJ5XCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMTAsIDIwLCBOb25lLCAyMCwgMTAsIDEwKS5ncm91cF9jb3VudCgneCcpLmRlZHVwKCkuYXNfKCd5JykucHJvamVjdCgnYScsICdiJykuYnkoKS5ieShfXy5zZWxlY3QoJ3gnKS5zZWxlY3QoX18uc2VsZWN0KCd5JykpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbmFtZV9tYXJrb19hZ2VfbnVsbFhfc2VsZWN0WG5hbWVfYWdlWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChbbmFtZTpcIm1hcmtvXCIsYWdlOm51bGxdKS5zZWxlY3QoXCJuYW1lXCIsXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbbmFtZTpcIm1hcmtvXCIsIGFnZTpudWxsXSkuc2VsZWN0KFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbbmFtZTpcIm1hcmtvXCIsIGFnZTpudWxsXSkuc2VsZWN0KFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobWFwMCkuc2VsZWN0KHN0cmluZzAsIHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IERpY3Rpb25hcnk8b2JqZWN0LCBvYmplY3Q+IHt7IFwibmFtZVwiLCBcIm1hcmtvXCIgfSwgeyBcImFnZVwiLCBudWxsIH19KS5TZWxlY3Q8b2JqZWN0PihcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChtYXBbaW50ZXJmYWNle31daW50ZXJmYWNle317XCJuYW1lXCI6IFwibWFya29cIiwgXCJhZ2VcIjogbmlsIH0pLlNlbGVjdChcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QoW25hbWU6XCJtYXJrb1wiLCBhZ2U6bnVsbF0pLnNlbGVjdChcIm5hbWVcIiwgXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG5ldyBMaW5rZWRIYXNoTWFwPE9iamVjdCwgT2JqZWN0PigpIHt7IHB1dChcIm5hbWVcIiwgXCJtYXJrb1wiKTsgcHV0KFwiYWdlXCIsIG51bGwpOyB9fSkuc2VsZWN0KFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IE1hcChbW1wibmFtZVwiLCBcIm1hcmtvXCJdLCBbXCJhZ2VcIiwgbnVsbF1dKSkuc2VsZWN0KFwibmFtZVwiLCBcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdCh7ICduYW1lJzogJ21hcmtvJywgJ2FnZSc6IE5vbmUgfSkuc2VsZWN0KCduYW1lJywgJ2FnZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFhudWxsX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG9iamVjdDAsIG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCwgKE9iamVjdCkgbnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYbnVsbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3Qob2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW5qZWN0KG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbmplY3QobnVsbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmluamVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmluamVjdChOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3QiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdFhudWxsX251bGxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih4eDEpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih4eDEpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QobnVsbCwgbnVsbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih4eDEpLnZhbHVlcyhzdHJpbmcwKS5pbmplY3Qob2JqZWN0MCwgb2JqZWN0MCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHh4MSkuVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuSW5qZWN0KG51bGwsIG51bGwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHh4MSkuVmFsdWVzKFwiYWdlXCIpLkluamVjdChuaWwsIG5pbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHh4MSkudmFsdWVzKFwiYWdlXCIpLmluamVjdChudWxsLCAoT2JqZWN0KSBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHh4MSkudmFsdWVzKFwiYWdlXCIpLmluamVjdChudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHh4MSkudmFsdWVzKFwiYWdlXCIpLmluamVjdChudWxsLCBudWxsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoeHgxKS52YWx1ZXMoJ2FnZScpLmluamVjdChOb25lLCBOb25lKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX3ZhbHVlc1hhZ2VYX2luamVjdFhudWxsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHh4MSkudmFsdWVzKFwiYWdlXCIpLmluamVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoeHgxKS52YWx1ZXMoc3RyaW5nMCkuaW5qZWN0KG9iamVjdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih4eDEpLlZhbHVlczxvYmplY3Q+KFwiYWdlXCIpLkluamVjdChudWxsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih4eDEpLlZhbHVlcyhcImFnZVwiKS5JbmplY3QobmlsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KG51bGwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih4eDEpLnZhbHVlcygnYWdlJykuaW5qZWN0KE5vbmUpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfdmFsdWVzWGFnZVhfaW5qZWN0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih4eDEpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih4eDEpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih4eDEpLnZhbHVlcyhzdHJpbmcwKS5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoeHgxKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5JbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih4eDEpLlZhbHVlcyhcImFnZVwiKS5JbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoeHgxKS52YWx1ZXMoXCJhZ2VcIikuaW5qZWN0KCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih4eDEpLnZhbHVlcyhcImFnZVwiKS5pbmplY3QoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHh4MSkudmFsdWVzKFwiYWdlXCIpLmluamVjdCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih4eDEpLnZhbHVlcygnYWdlJykuaW5qZWN0KCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WG51bGxfMV8zX251bGxYX2FzWGFYX3NlbGVjdFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmluamVjdChudWxsLCAxLCAzLCBudWxsKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmluamVjdChvYmplY3QwLCBudW1iZXIwLCBudW1iZXIxLCBvYmplY3QwKS5hcyhzdHJpbmcwKS5zZWxlY3Qoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbmplY3Q8b2JqZWN0PihudWxsLCAxLCAzLCBudWxsKS5BcyhcImFcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QobmlsLCAxLCAzLCBuaWwpLkFzKFwiYVwiKS5TZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KG51bGwsIDEsIDMsIG51bGwpLmFzKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChudWxsLCAxLCAzLCBudWxsKS5hcyhcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobnVsbCwgMSwgMywgbnVsbCkuYXMoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoTm9uZSwgMSwgMywgTm9uZSkuYXNfKCdhJykuc2VsZWN0KCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFfM1hfaW5qZWN0WDEwMF8zMDBYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KDEsIDMpLmluamVjdCgxMDAsIDMwMCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCgxLCAzKS5pbmplY3QoMTAwLCAzMDApIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KDEsIDMpLmluamVjdCgxMDAsIDMwMCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KG51bWJlcjAsIG51bWJlcjEpLmluamVjdChudW1iZXIyLCBudW1iZXIzKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkluamVjdDxvYmplY3Q+KDEsIDMpLkluamVjdCgxMDAsIDMwMCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdCgxLCAzKS5JbmplY3QoMTAwLCAzMDApIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KDEsIDMpLmluamVjdCgxMDAsIDMwMCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW5qZWN0KDEsIDMpLmluamVjdCgxMDAsIDMwMCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KDEsIDMpLmluamVjdCgxMDAsIDMwMCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoMSwgMykuaW5qZWN0KDEwMCwgMzAwKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pbmplY3RYMV8zXzEwMF8zMDBYX2xpc3QiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbmplY3QoWzEsIDMsIDEwMCwgMzAwXSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdChbMSwgMywgMTAwLCAzMDBdKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmluamVjdChbMSwgMywgMTAwLCAzMDBdKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbmplY3QobGlzdDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IExpc3Q8b2JqZWN0PiB7IDEsIDMsIDEwMCwgMzAwIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoW11pbnRlcmZhY2V7fXsxLCAzLCAxMDAsIDMwMH0pIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAzLCAxMDAsIDMwMF0pIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmluamVjdChuZXcgQXJyYXlMaXN0PE9iamVjdD4oKSB7eyBhZGQoMSk7IGFkZCgzKTsgYWRkKDEwMCk7IGFkZCgzMDApOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KFsxLCAzLCAxMDAsIDMwMF0pIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW5qZWN0KFsxLCAzLCAxMDAsIDMwMF0pIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2luamVjdFgxXzNfMTAwXzMwMFhfc2V0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KHsxLCAzLCAxMDAsIDMwMH0pIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbmplY3QoezEsIDMsIDEwMCwgMzAwfSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbmplY3QoezEsIDMsIDEwMCwgMzAwfSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHNldDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDMsIDEwMCwgMzAwIH0pIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbmplY3QoZ3JlbWxpbmdvLk5ld1NpbXBsZVNldCgxLCAzLCAxMDAsIDMwMCkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW5qZWN0KFsxLCAzLCAxMDAsIDMwMF0gYXMgU2V0KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDMpOyBhZGQoMTAwKTsgYWRkKDMwMCk7IH19KSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbmplY3QobmV3IFNldChbMSwgMywgMTAwLCAzMDBdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoezEsIDMsIDEwMCwgMzAwfSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW5qZWN0WDFfMVhfc2V0IiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW5qZWN0KHsxLCAxfSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmluamVjdCh7MSwgMX0pIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW5qZWN0KHsxLCAxfSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW5qZWN0KHNldDApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW5qZWN0PG9iamVjdD4obmV3IEhhc2hTZXQ8b2JqZWN0PiB7IDEsIDEgfSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkluamVjdChncmVtbGluZ28uTmV3U2ltcGxlU2V0KDEsIDEpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmluamVjdChbMSwgMV0gYXMgU2V0KSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbmplY3QobmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7IGFkZCgxKTsgYWRkKDEpOyB9fSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW5qZWN0KG5ldyBTZXQoWzEsIDFdKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbmplY3QoezEsIDF9KSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb19yZWFkWGtyeW9YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5b1wiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmtyeW9cIikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5b1wiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW8oc3RyaW5nMCkucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW88b2JqZWN0PihcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLlJlYWQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5b1wiKS5SZWFkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmlvKCdkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5bycpLnJlYWQoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb19yZWFkX3dpdGhYcmVhZGVyX2dyeW9YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5b1wiKS53aXRoKElPLnJlYWRlciwgSU8uZ3J5bykucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncnlvKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncnlvKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW8oc3RyaW5nMCkud2l0aChJTy5yZWFkZXIsIElPLmdyeW8pLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLklvPG9iamVjdD4oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5b1wiKS5XaXRoKElPLlJlYWRlciwgSU8uR3J5bykuUmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLldpdGgoZ3JlbWxpbmdvLklPLlJlYWRlciwgZ3JlbWxpbmdvLklPLkdyeW8pLlJlYWQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmtyeW9cIikud2l0aChJTy5yZWFkZXIsIElPLmdyeW8pLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5rcnlvXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncnlvKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5b1wiKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyeW8pLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmlvKCdkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ua3J5bycpLndpdGhfKElPLnJlYWRlciwgSU8uZ3J5bykucmVhZCgpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2lvX3JlYWRYZ3JhcGhzb25YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4uanNvblwiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmpzb25cIikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4uanNvblwiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW8oc3RyaW5nMCkucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW88b2JqZWN0PihcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLlJlYWQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4uanNvblwiKS5SZWFkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmlvKCdkYXRhL3RpbmtlcnBvcC1tb2Rlcm4uanNvbicpLnJlYWQoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb19yZWFkX3dpdGhYcmVhZGVyX2dyYXBoc29uWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmpzb25cIikud2l0aChJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmpzb25cIikud2l0aChJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaHNvbikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmlvKHN0cmluZzApLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaHNvbikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW88b2JqZWN0PihcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLldpdGgoSU8uUmVhZGVyLCBJTy5HcmFwaFNPTikuUmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLldpdGgoZ3JlbWxpbmdvLklPLlJlYWRlciwgZ3JlbWxpbmdvLklPLkdyYXBoc29uKS5SZWFkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi5qc29uXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaHNvbikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLmpzb25cIikud2l0aChJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4uanNvblwiKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbygnZGF0YS90aW5rZXJwb3AtbW9kZXJuLmpzb24nKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyYXBoc29uKS5yZWFkKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW9fcmVhZFhncmFwaG1sWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi54bWxcIikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmlvKHN0cmluZzApLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLklvPG9iamVjdD4oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLlJlYWQoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLlJlYWQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi54bWxcIikucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW8oJ2RhdGEvdGlua2VycG9wLW1vZGVybi54bWwnKS5yZWFkKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5FKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfaW9fcmVhZF93aXRoWHJlYWRlcl9ncmFwaG1sWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53aXRoKElPLnJlYWRlciwgSU8uZ3JhcGhtbCkucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi54bWxcIikud2l0aChJTy5yZWFkZXIsIElPLmdyYXBobWwpLnJlYWQoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmlvKFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53aXRoKElPLnJlYWRlciwgSU8uZ3JhcGhtbCkucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmlvKHN0cmluZzApLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaG1sKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbzxvYmplY3Q+KFwiZGF0YS90aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS5XaXRoKElPLlJlYWRlciwgSU8uR3JhcGhNTCkuUmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbyhcImRhdGEvdGlua2VycG9wLW1vZGVybi54bWxcIikuV2l0aChncmVtbGluZ28uSU8uUmVhZGVyLCBncmVtbGluZ28uSU8uR3JhcGhtbCkuUmVhZCgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaG1sKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLndpdGgoSU8ucmVhZGVyLCBJTy5ncmFwaG1sKS5yZWFkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW8oXCJkYXRhL3RpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLndpdGhfKElPLnJlYWRlciwgSU8uZ3JhcGhtbCkucmVhZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW8oJ2RhdGEvdGlua2VycG9wLW1vZGVybi54bWwnKS53aXRoXyhJTy5yZWFkZXIsIElPLmdyYXBobWwpLnJlYWQoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5FKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuRSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLkUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLkUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1gxMjdiWF9pbmplY3RYMWJYX3NhY2tYc3VtWF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMTI3YikuaW5qZWN0KDFiKS5zYWNrKHN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygxMjdiKS5pbmplY3QoMWIpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygxMjdiKS5pbmplY3QoMWIpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soYnl0ZTApLmluamVjdChieXRlMSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKChzYnl0ZSkgMTI3KS5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDEpLlNhY2soT3BlcmF0b3IuU3VtKS5TYWNrPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNhY2soaW50OCgxMjcpKS5JbmplY3QoaW50OCgxKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuU3VtKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygoYnl0ZSkxMjcpLmluamVjdCgoYnl0ZSkxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKG5ldyBCeXRlKDEyNykpLmluamVjdChuZXcgQnl0ZSgxKSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygxMjcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDEyNykuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3Iuc3VtXykuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDMyNzY3c1hfaW5qZWN0WDFzWF9zYWNrWHN1bVhfc2FjayIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTYWNrKDMyNzY3cykuaW5qZWN0KDFzKS5zYWNrKHN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygzMjc2N3MpLmluamVjdCgxcykuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKDMyNzY3cykuaW5qZWN0KDFzKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTYWNrKHNob3J0MCkuaW5qZWN0KHNob3J0MSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKChzaG9ydCkgMzI3NjcpLkluamVjdDxvYmplY3Q+KChzaG9ydCkgMSkuU2FjayhPcGVyYXRvci5TdW0pLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQxNigzMjc2NykpLkluamVjdChpbnQxNigxKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuU3VtKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2Fjaygoc2hvcnQpMzI3NjcpLmluamVjdCgoc2hvcnQpMSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjayhuZXcgU2hvcnQoMzI3NjcpKS5pbmplY3QobmV3IFNob3J0KDEpKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDMyNzY3KS5pbmplY3QoMSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygzMjc2NykuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3Iuc3VtXykuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDIxNDc0ODM2NDdpWF9pbmplY3RYMWlYX3NhY2tYc3VtWF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMjE0NzQ4MzY0N2kpLmluamVjdCgxaSkuc2FjayhzdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMjE0NzQ4MzY0N2kpLmluamVjdCgxaSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDdpKS5pbmplY3QoMWkpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soaW50ZWdlcjApLmluamVjdChpbnRlZ2VyMSkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKDIxNDc0ODM2NDcpLkluamVjdDxvYmplY3Q+KDEpLlNhY2soT3BlcmF0b3IuU3VtKS5TYWNrPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNhY2soaW50MzIoMjE0NzQ4MzY0NykpLkluamVjdChpbnQzMigxKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuU3VtKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygyMTQ3NDgzNjQ3aSkuaW5qZWN0KDFpKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDIxNDc0ODM2NDcpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLnN1bV8pLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1gxXzc5NzY5MzEzNDg2MjMxNTdFXzMwOGRYX2luamVjdFgxXzc5NzY5MzEzNDg2MjMxNTdFXzMwOGRYX3NhY2tYc3VtWF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3RSszMDhkKS5pbmplY3QoMS43OTc2OTMxMzQ4NjIzMTU3RSszMDhkKS5zYWNrKHN1bSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soZG91YmxlMCkuaW5qZWN0KGRvdWJsZTApLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLkluamVjdDxvYmplY3Q+KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuU2FjayhPcGVyYXRvci5TdW0pLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuSW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5TdW0pLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLnNhY2soT3BlcmF0b3Iuc3VtKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuc2FjayhPcGVyYXRvci5zdW0pLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5zYWNrKE9wZXJhdG9yLnN1bV8pLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1hfMTI4YlhfaW5qZWN0WDFiWF9zYWNrWG1pbnVzWF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soLTEyOGIpLmluamVjdCgxYikuc2FjayhtaW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygtMTI4YikuaW5qZWN0KDFiKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygtMTI4YikuaW5qZWN0KDFiKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soYnl0ZTApLmluamVjdChieXRlMSkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soKHNieXRlKSAtMTI4KS5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDEpLlNhY2soT3BlcmF0b3IuTWludXMpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQ4KC0xMjgpKS5JbmplY3QoaW50OCgxKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuTWludXMpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKChieXRlKS0xMjgpLmluamVjdCgoYnl0ZSkxKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2sobmV3IEJ5dGUoLTEyOCkpLmluamVjdChuZXcgQnl0ZSgxKSkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKC0xMjgpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NhY2soLTEyOCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1hfMzI3NjhzWF9pbmplY3RYMXNYX3NhY2tYbWludXNYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygtMzI3NjhzKS5pbmplY3QoMXMpLnNhY2sobWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soLTMyNzY4cykuaW5qZWN0KDFzKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygtMzI3NjhzKS5pbmplY3QoMXMpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2FjayhzaG9ydDApLmluamVjdChzaG9ydDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKChzaG9ydCkgLTMyNzY4KS5JbmplY3Q8b2JqZWN0Pigoc2hvcnQpIDEpLlNhY2soT3BlcmF0b3IuTWludXMpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQxNigtMzI3NjgpKS5JbmplY3QoaW50MTYoMSkpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLk1pbnVzKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2Fjaygoc2hvcnQpLTMyNzY4KS5pbmplY3QoKHNob3J0KTEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjayhuZXcgU2hvcnQoLTMyNzY4KSkuaW5qZWN0KG5ldyBTaG9ydCgxKSkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKC0zMjc2OCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygtMzI3NjgpLmluamVjdCgxKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYXzIxNDc0ODM2NDhpWF9pbmplY3RYMWlYX3NhY2tYbWludXNYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OGkpLmluamVjdCgxaSkuc2FjayhtaW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OGkpLmluamVjdCgxaSkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soLTIxNDc0ODM2NDhpKS5pbmplY3QoMWkpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2FjayhpbnRlZ2VyMCkuaW5qZWN0KGludGVnZXIxKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2FjaygtMjE0NzQ4MzY0OCkuSW5qZWN0PG9iamVjdD4oMSkuU2FjayhPcGVyYXRvci5NaW51cykuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGludDMyKC0yMTQ3NDgzNjQ4KSkuSW5qZWN0KGludDMyKDEpKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5NaW51cykuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soLTIxNDc0ODM2NDhpKS5pbmplY3QoMWkpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygtMjE0NzQ4MzY0OCkuaW5qZWN0KDEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1hfMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9zYWNrWG1pbnVzWF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4ZCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4ZCkuc2FjayhtaW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygtMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5pbmplY3QoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygtMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5pbmplY3QoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soZG91YmxlMCkuaW5qZWN0KGRvdWJsZTEpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLkluamVjdDxvYmplY3Q+KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuU2FjayhPcGVyYXRvci5NaW51cykuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuSW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5NaW51cykuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soLTEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLnNhY2soT3BlcmF0b3IubWludXMpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygtMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLmluamVjdCgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuc2FjayhPcGVyYXRvci5taW51cykuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKC0xLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuaW5qZWN0KDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5zYWNrKE9wZXJhdG9yLm1pbnVzKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMTI3YlhfaW5qZWN0WDJiWF9zYWNrWG11bHRYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygxMjdiKS5pbmplY3QoMmIpLnNhY2sobXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygxMjdiKS5pbmplY3QoMmIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMTI3YikuaW5qZWN0KDJiKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2FjayhieXRlMCkuaW5qZWN0KGJ5dGUxKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKChzYnl0ZSkgMTI3KS5JbmplY3Q8b2JqZWN0Pigoc2J5dGUpIDIpLlNhY2soT3BlcmF0b3IuTXVsdCkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGludDgoMTI3KSkuSW5qZWN0KGludDgoMikpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLk11bHQpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKChieXRlKTEyNykuaW5qZWN0KChieXRlKTIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKG5ldyBCeXRlKDEyNykpLmluamVjdChuZXcgQnl0ZSgyKSkuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNhY2soMTI3KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NhY2soMTI3KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMzI3NjdzWF9pbmplY3RYMnNYX3NhY2tYbXVsdFhfc2FjayIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTYWNrKDMyNzY3cykuaW5qZWN0KDJzKS5zYWNrKG11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMzI3NjdzKS5pbmplY3QoMnMpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMzI3NjdzKS5pbmplY3QoMnMpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTYWNrKHNob3J0MCkuaW5qZWN0KHNob3J0MSkuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2Fjaygoc2hvcnQpIDMyNzY3KS5JbmplY3Q8b2JqZWN0Pigoc2hvcnQpIDIpLlNhY2soT3BlcmF0b3IuTXVsdCkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGludDE2KDMyNzY3KSkuSW5qZWN0KGludDE2KDIpKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5NdWx0KS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2Fjaygoc2hvcnQpMzI3NjcpLmluamVjdCgoc2hvcnQpMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2sobmV3IFNob3J0KDMyNzY3KSkuaW5qZWN0KG5ldyBTaG9ydCgyKSkuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNhY2soMzI3NjcpLmluamVjdCgyKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygzMjc2NykuaW5qZWN0KDIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDIxNDc0ODM2NDdpWF9pbmplY3RYMmlYX3NhY2tYbXVsdFhfc2FjayIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDdpKS5pbmplY3QoMmkpLnNhY2sobXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygyMTQ3NDgzNjQ3aSkuaW5qZWN0KDJpKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDdpKS5pbmplY3QoMmkpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTYWNrKGludGVnZXIwKS5pbmplY3QoaW50ZWdlcjEpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soMjE0NzQ4MzY0NykuSW5qZWN0PG9iamVjdD4oMikuU2FjayhPcGVyYXRvci5NdWx0KS5TYWNrPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNhY2soaW50MzIoMjE0NzQ4MzY0NykpLkluamVjdChpbnQzMigyKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuTXVsdCkuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soMjE0NzQ4MzY0N2kpLmluamVjdCgyaSkuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2soMjE0NzQ4MzY0NykuaW5qZWN0KDIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDcpLmluamVjdCgyKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygyMTQ3NDgzNjQ3KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMmRYX3NhY2tYbXVsdFhfc2FjayIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4ZCkuaW5qZWN0KDJkKS5zYWNrKG11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5pbmplY3QoMmQpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5pbmplY3QoMmQpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTYWNrKGRvdWJsZTApLmluamVjdChkb3VibGUxKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuSW5qZWN0PG9iamVjdD4oMmQpLlNhY2soT3BlcmF0b3IuTXVsdCkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5JbmplY3QoMikuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuTXVsdCkuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5pbmplY3QoMmQpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuaW5qZWN0KDJkKS5zYWNrKE9wZXJhdG9yLm11bHQpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuaW5qZWN0KDIpLnNhY2soT3BlcmF0b3IubXVsdCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4KS5pbmplY3QoMikuc2FjayhPcGVyYXRvci5tdWx0KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMTI3YlhfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMTI3YikuaW5qZWN0KDAuNWYpLnNhY2soZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKDEyN2IpLmluamVjdCgwLjVmKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMTI3YikuaW5qZWN0KDAuNWYpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soYnl0ZTApLmluamVjdChmbG9hdDApLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2Fjaygoc2J5dGUpIDEyNykuSW5qZWN0PG9iamVjdD4oMC41ZikuU2FjayhPcGVyYXRvci5EaXYpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQ4KDEyNykpLkluamVjdChmbG9hdDMyKDAuNSkpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLkRpdikuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soKGJ5dGUpMTI3KS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjayhuZXcgQnl0ZSgxMjcpKS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygxMjcpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NhY2soMTI3KS5pbmplY3QoMC41KS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDMyNzY3c1hfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMzI3NjdzKS5pbmplY3QoMC41Zikuc2FjayhkaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMzI3NjdzKS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKDMyNzY3cykuaW5qZWN0KDAuNWYpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soc2hvcnQwKS5pbmplY3QoZmxvYXQwKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soKHNob3J0KSAzMjc2NykuSW5qZWN0PG9iamVjdD4oMC41ZikuU2FjayhPcGVyYXRvci5EaXYpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQxNigzMjc2NykpLkluamVjdChmbG9hdDMyKDAuNSkpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLkRpdikuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soKHNob3J0KTMyNzY3KS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjayhuZXcgU2hvcnQoMzI3NjcpKS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygzMjc2NykuaW5qZWN0KDAuNSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygzMjc2NykuaW5qZWN0KDAuNSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1gyMTQ3NDgzNjQ3aVhfaW5qZWN0WDBfNWZYX3NhY2tYZGl2WF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soMjE0NzQ4MzY0N2kpLmluamVjdCgwLjVmKS5zYWNrKGRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygyMTQ3NDgzNjQ3aSkuaW5qZWN0KDAuNWYpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygyMTQ3NDgzNjQ3aSkuaW5qZWN0KDAuNWYpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soaW50ZWdlcjApLmluamVjdChmbG9hdDApLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2FjaygyMTQ3NDgzNjQ3KS5JbmplY3Q8b2JqZWN0PigwLjVmKS5TYWNrKE9wZXJhdG9yLkRpdikuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGludDMyKDIxNDc0ODM2NDcpKS5JbmplY3QoZmxvYXQzMigwLjUpKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5EaXYpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKDIxNDc0ODM2NDdpKS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjaygyMTQ3NDgzNjQ3KS5pbmplY3QoMC41Zikuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygyMTQ3NDgzNjQ3KS5pbmplY3QoMC41KS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDIxNDc0ODM2NDcpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMV83OTc2OTMxMzQ4NjIzMTU3RV8zMDhkWF9pbmplY3RYMF81ZFhfc2Fja1hkaXZYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOGQpLmluamVjdCgwLjVkKS5zYWNrKGRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLmluamVjdCgwLjVkKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhkKS5pbmplY3QoMC41ZCkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2Fjayhkb3VibGUwKS5pbmplY3QoZG91YmxlMSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuSW5qZWN0PG9iamVjdD4oMC41ZCkuU2FjayhPcGVyYXRvci5EaXYpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCkuSW5qZWN0KDAuNSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuRGl2KS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOGQpLmluamVjdCgwLjVkKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4ZCkuaW5qZWN0KDAuNWQpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NhY2soMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpLmluamVjdCgwLjUpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYXzEyOGJYX2luamVjdFhfMWJYX3NhY2tYZGl2WF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soLTEyOGIpLmluamVjdCgtMWIpLnNhY2soZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKC0xMjhiKS5pbmplY3QoLTFiKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soLTEyOGIpLmluamVjdCgtMWIpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soYnl0ZTApLmluamVjdChieXRlMSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKChzYnl0ZSkgLTEyOCkuSW5qZWN0PG9iamVjdD4oKHNieXRlKSAtMSkuU2FjayhPcGVyYXRvci5EaXYpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQ4KC0xMjgpKS5JbmplY3QoaW50OCgtMSkpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLkRpdikuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soKGJ5dGUpLTEyOCkuaW5qZWN0KChieXRlKS0xKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKG5ldyBCeXRlKC0xMjgpKS5pbmplY3QobmV3IEJ5dGUoLTEpKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKC0xMjgpLmluamVjdCgtMSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygtMTI4KS5pbmplY3QoLTEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYXzMyNzY4c1hfaW5qZWN0WF8xc1hfc2Fja1hkaXZYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygtMzI3NjhzKS5pbmplY3QoLTFzKS5zYWNrKGRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2FjaygtMzI3NjhzKS5pbmplY3QoLTFzKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soLTMyNzY4cykuaW5qZWN0KC0xcykuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2FjayhzaG9ydDApLmluamVjdChzaG9ydDEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2Fjaygoc2hvcnQpIC0zMjc2OCkuSW5qZWN0PG9iamVjdD4oKHNob3J0KSAtMSkuU2FjayhPcGVyYXRvci5EaXYpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjayhpbnQxNigtMzI3NjgpKS5JbmplY3QoaW50MTYoLTEpKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5EaXYpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKChzaG9ydCktMzI3NjgpLmluamVjdCgoc2hvcnQpLTEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2sobmV3IFNob3J0KC0zMjc2OCkpLmluamVjdChuZXcgU2hvcnQoLTEpKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKC0zMjc2OCkuaW5qZWN0KC0xKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKC0zMjc2OCkuaW5qZWN0KC0xKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWF8yMTQ3NDgzNjQ4aVhfaW5qZWN0WF8xaVhfc2Fja1hkaXZYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OGkpLmluamVjdCgtMWkpLnNhY2soZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKC0yMTQ3NDgzNjQ4aSkuaW5qZWN0KC0xaSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKC0yMTQ3NDgzNjQ4aSkuaW5qZWN0KC0xaSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2FjayhpbnRlZ2VyMCkuaW5qZWN0KGludGVnZXIxKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soLTIxNDc0ODM2NDgpLkluamVjdDxvYmplY3Q+KC0xKS5TYWNrKE9wZXJhdG9yLkRpdikuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGludDMyKC0yMTQ3NDgzNjQ4KSkuSW5qZWN0KGludDMyKC0xKSkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuRGl2KS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OGkpLmluamVjdCgtMWkpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2soLTIxNDc0ODM2NDgpLmluamVjdCgtMSkuc2FjayhPcGVyYXRvci5kaXYpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygtMjE0NzQ4MzY0OCkuaW5qZWN0KC0xKS5zYWNrKE9wZXJhdG9yLmRpdikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKC0yMTQ3NDgzNjQ4KS5pbmplY3QoLTEpLnNhY2soT3BlcmF0b3IuZGl2KS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYaGVsbG9YX1Zfb3V0RV9zYWNrWGFzc2lnblhfYnlYbGFiZWxYX2luVl9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNhY2soXCJoZWxsb1wiKS5WKCkub3V0RSgpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShULmxhYmVsKS5pblYoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKFwiaGVsbG9cIikuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoVC5sYWJlbCkuaW5WKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soXCJoZWxsb1wiKS5WKCkub3V0RSgpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShULmxhYmVsKS5pblYoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcud2l0aFNhY2soc3RyaW5nMCkuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoVC5sYWJlbCkuaW5WKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuV2l0aFNhY2soXCJoZWxsb1wiKS5WKCkuT3V0RSgpLlNhY2soT3BlcmF0b3IuQXNzaWduKS5CeShULkxhYmVsKS5JblYoKS5TYWNrPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuV2l0aFNhY2soXCJoZWxsb1wiKS5WKCkuT3V0RSgpLlNhY2soZ3JlbWxpbmdvLk9wZXJhdG9yLkFzc2lnbikuQnkoZ3JlbWxpbmdvLlQuTGFiZWwpLkluVigpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhTYWNrKFwiaGVsbG9cIikuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoVC5sYWJlbCkuaW5WKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKFwiaGVsbG9cIikuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoVC5sYWJlbCkuaW5WKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKFwiaGVsbG9cIikuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoVC5sYWJlbCkuaW5WKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKCdoZWxsbycpLlYoKS5vdXRfZSgpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShULmxhYmVsKS5pbl92KCkuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhTYWNrWDBYX1Zfb3V0RV9zYWNrWHN1bVhfYnlYd2VpZ2h0WF9pblZfc2Fja19zdW0iLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygwLjBkKS5WKCkub3V0RSgpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcIndlaWdodFwiKS5pblYoKS5zYWNrKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKDAuMGQpLlYoKS5vdXRFKCkuc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwid2VpZ2h0XCIpLmluVigpLnNhY2soKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhTYWNrKDAuMGQpLlYoKS5vdXRFKCkuc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwid2VpZ2h0XCIpLmluVigpLnNhY2soKS5zdW0oKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2Fjayhkb3VibGUwKS5WKCkub3V0RSgpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShzdHJpbmcwKS5pblYoKS5zYWNrKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2FjaygwLjBkKS5WKCkuT3V0RSgpLlNhY2soT3BlcmF0b3IuU3VtKS5CeShcIndlaWdodFwiKS5JblYoKS5TYWNrPG9iamVjdD4oKS5TdW08b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjaygwLjApLlYoKS5PdXRFKCkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuU3VtKS5CeShcIndlaWdodFwiKS5JblYoKS5TYWNrKCkuU3VtKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygwLjBkKS5WKCkub3V0RSgpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcIndlaWdodFwiKS5pblYoKS5zYWNrKCkuc3VtKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2soMC4wZCkuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJ3ZWlnaHRcIikuaW5WKCkuc2FjaygpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDAuMCkuVigpLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJ3ZWlnaHRcIikuaW5WKCkuc2FjaygpLnN1bSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDAuMCkuVigpLm91dF9lKCkuc2FjayhPcGVyYXRvci5zdW1fKS5ieSgnd2VpZ2h0JykuaW5fdigpLnNhY2soKS5zdW1fKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMFhfVl9yZXBlYXRYb3V0RV9zYWNrWHN1bVhfYnlYd2VpZ2h0WF9pblZYX3RpbWVzWDJYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygwLjBkKS5WKCkucmVwZWF0KF9fLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJ3ZWlnaHRcIikuaW5WKCkpLnRpbWVzKDIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMC4wZCkuVigpLnJlcGVhdChfXy5vdXRFKCkuc2FjayhPcGVyYXRvci5zdW0pLmJ5KFwid2VpZ2h0XCIpLmluVigpKS50aW1lcygyKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygwLjBkKS5WKCkucmVwZWF0KF9fLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJ3ZWlnaHRcIikuaW5WKCkpLnRpbWVzKDIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2Fjayhkb3VibGUwKS5WKCkucmVwZWF0KF9fLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoc3RyaW5nMCkuaW5WKCkpLnRpbWVzKG51bWJlcjApLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKDAuMGQpLlYoKS5SZXBlYXQoX18uT3V0RSgpLlNhY2soT3BlcmF0b3IuU3VtKS5CeShcIndlaWdodFwiKS5JblYoKSkuVGltZXMoMikuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKDAuMCkuVigpLlJlcGVhdChncmVtbGluZ28uVF9fLk91dEUoKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5TdW0pLkJ5KFwid2VpZ2h0XCIpLkluVigpKS5UaW1lcygyKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2FjaygwLjBkKS5WKCkucmVwZWF0KF9fLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJ3ZWlnaHRcIikuaW5WKCkpLnRpbWVzKDIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjaygwLjBkKS5WKCkucmVwZWF0KF9fLm91dEUoKS5zYWNrKE9wZXJhdG9yLnN1bSkuYnkoXCJ3ZWlnaHRcIikuaW5WKCkpLnRpbWVzKDIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygwLjApLlYoKS5yZXBlYXQoX18ub3V0RSgpLnNhY2soT3BlcmF0b3Iuc3VtKS5ieShcIndlaWdodFwiKS5pblYoKSkudGltZXMoMikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKDAuMCkuVigpLnJlcGVhdChfXy5vdXRfZSgpLnNhY2soT3BlcmF0b3Iuc3VtXykuYnkoJ3dlaWdodCcpLmluX3YoKSkudGltZXMoMikuc2FjaygpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX3dpdGhCdWxrWGZhbHNlWF93aXRoU2Fja1gxX3N1bVhfVlgxWF9sb2NhbFhvdXRFWGtub3dzWF9iYXJyaWVyWG5vcm1TYWNrWF9pblZYX2luWGtub3dzWF9iYXJyaWVyX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoQnVsayhmYWxzZSkud2l0aFNhY2soMS4wZCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dEUoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spLmluVigpKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLjBkLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0RShcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykuaW5WKCkpLmluKFwia25vd3NcIikuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLjBkLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0RShcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykuaW5WKCkpLmluKFwia25vd3NcIikuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoQnVsayhib29sZWFuMCkud2l0aFNhY2soZG91YmxlMCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dEUoc3RyaW5nMCkuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKS5pblYoKSkuaW4oc3RyaW5nMCkuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhCdWxrKGZhbHNlKS5XaXRoU2FjaygxLjBkLCBPcGVyYXRvci5TdW0pLlYodmlkMSkuTG9jYWw8b2JqZWN0PihfXy5PdXRFKFwia25vd3NcIikuQmFycmllcihCYXJyaWVyLk5vcm1TYWNrKS5JblYoKSkuSW4oXCJrbm93c1wiKS5CYXJyaWVyKCkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhCdWxrKGZhbHNlKS5XaXRoU2FjaygxLjAsIGdyZW1saW5nby5PcGVyYXRvci5TdW0pLlYodmlkMSkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXRFKFwia25vd3NcIikuQmFycmllcihncmVtbGluZ28uQmFycmllci5Ob3JtU2FjaykuSW5WKCkpLkluKFwia25vd3NcIikuQmFycmllcigpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLjBkLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0RShcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykuaW5WKCkpLmluKFwia25vd3NcIikuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoQnVsayhmYWxzZSkud2l0aFNhY2soMS4wZCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dEUoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spLmluVigpKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aEJ1bGsoZmFsc2UpLndpdGhTYWNrKDEuMCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dEUoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spLmluVigpKS5pbl8oXCJrbm93c1wiKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9idWxrKEZhbHNlKS53aXRoX3NhY2soMS4wLCBPcGVyYXRvci5zdW1fKS5WKHZpZDEpLmxvY2FsKF9fLm91dF9lKCdrbm93cycpLmJhcnJpZXIoQmFycmllci5ub3JtX3NhY2spLmluX3YoKSkuaW5fKCdrbm93cycpLmJhcnJpZXIoKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aEJ1bGtYZmFsc2VYX3dpdGhTYWNrWDFfc3VtWF9WX291dF9iYXJyaWVyX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoQnVsayhmYWxzZSkud2l0aFNhY2soMSwgT3BlcmF0b3Iuc3VtKS5WKCkub3V0KCkuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aEJ1bGsoZmFsc2UpLndpdGhTYWNrKDEsIE9wZXJhdG9yLnN1bSkuVigpLm91dCgpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoQnVsayhmYWxzZSkud2l0aFNhY2soMSwgT3BlcmF0b3Iuc3VtKS5WKCkub3V0KCkuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoQnVsayhib29sZWFuMCkud2l0aFNhY2sobnVtYmVyMCwgT3BlcmF0b3Iuc3VtKS5WKCkub3V0KCkuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhCdWxrKGZhbHNlKS5XaXRoU2FjaygxLCBPcGVyYXRvci5TdW0pLlYoKS5PdXQoKS5CYXJyaWVyKCkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhCdWxrKGZhbHNlKS5XaXRoU2FjaygxLCBncmVtbGluZ28uT3BlcmF0b3IuU3VtKS5WKCkuT3V0KCkuQmFycmllcigpLlNhY2soKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLCBPcGVyYXRvci5zdW0pLlYoKS5vdXQoKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLCBPcGVyYXRvci5zdW0pLlYoKS5vdXQoKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhCdWxrKGZhbHNlKS53aXRoU2FjaygxLCBPcGVyYXRvci5zdW0pLlYoKS5vdXQoKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9idWxrKEZhbHNlKS53aXRoX3NhY2soMSwgT3BlcmF0b3Iuc3VtXykuVigpLm91dCgpLmJhcnJpZXIoKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMV9zdW1YX1ZYMVhfbG9jYWxYb3V0WGtub3dzWF9iYXJyaWVyWG5vcm1TYWNrWFhfaW5Ya25vd3NYX2JhcnJpZXJfc2FjayIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTYWNrKDEuMGQsIE9wZXJhdG9yLnN1bSkuVih2aWQxKS5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLndpdGhTYWNrKDEuMGQsIE9wZXJhdG9yLnN1bSkuVih2aWQxKS5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygxLjBkLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0KFwia25vd3NcIikuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW4oXCJrbm93c1wiKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTYWNrKGRvdWJsZTAsIE9wZXJhdG9yLnN1bSkuVih2aWQxKS5sb2NhbChfXy5vdXQoc3RyaW5nMCkuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW4oc3RyaW5nMCkuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKDEuMGQsIE9wZXJhdG9yLlN1bSkuVih2aWQxKS5Mb2NhbDxvYmplY3Q+KF9fLk91dChcImtub3dzXCIpLkJhcnJpZXIoQmFycmllci5Ob3JtU2FjaykpLkluKFwia25vd3NcIikuQmFycmllcigpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2FjaygxLjAsIGdyZW1saW5nby5PcGVyYXRvci5TdW0pLlYodmlkMSkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKS5CYXJyaWVyKGdyZW1saW5nby5CYXJyaWVyLk5vcm1TYWNrKSkuSW4oXCJrbm93c1wiKS5CYXJyaWVyKCkuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soMS4wZCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dChcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluKFwia25vd3NcIikuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2FjaygxLjBkLCBPcGVyYXRvci5zdW0pLlYodmlkMSkubG9jYWwoX18ub3V0KFwia25vd3NcIikuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW4oXCJrbm93c1wiKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDEuMCwgT3BlcmF0b3Iuc3VtKS5WKHZpZDEpLmxvY2FsKF9fLm91dChcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluXyhcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy53aXRoX3NhY2soMS4wLCBPcGVyYXRvci5zdW1fKS5WKHZpZDEpLmxvY2FsKF9fLm91dCgna25vd3MnKS5iYXJyaWVyKEJhcnJpZXIubm9ybV9zYWNrKSkuaW5fKCdrbm93cycpLmJhcnJpZXIoKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9zYWNrWGFzc2lnblhfYnlYYWdlWF9zYWNrIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnNhY2soYXNzaWduKS5ieShcImFnZVwiKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoXCJhZ2VcIikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShcImFnZVwiKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShzdHJpbmcwKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2FjayhPcGVyYXRvci5Bc3NpZ24pLkJ5KFwiYWdlXCIpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuQXNzaWduKS5CeShcImFnZVwiKS5TYWNrKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KFwiYWdlXCIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KFwiYWdlXCIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KFwiYWdlXCIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoJ2FnZScpLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ193aXRoU2Fja1hCaWdJbnRlZ2VyX1RFTl9wb3dYMTAwMFhfYXNzaWduWF9WX2xvY2FsWG91dFhrbm93c1hfYmFycmllclhub3JtU2Fja1hYX2luWGtub3dzWF9iYXJyaWVyX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy53aXRoU2FjaygxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMG4sIE9wZXJhdG9yLmFzc2lnbikuVigpLmxvY2FsKF9fLm91dChcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluKFwia25vd3NcIikuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBuLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy53aXRoU2FjaygxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMG4sIE9wZXJhdG9yLmFzc2lnbikuVigpLmxvY2FsKF9fLm91dChcImtub3dzXCIpLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluKFwia25vd3NcIikuYmFycmllcigpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2FjayhiaWdpbnRlZ2VyMCwgT3BlcmF0b3IuYXNzaWduKS5WKCkubG9jYWwoX18ub3V0KHN0cmluZzApLmJhcnJpZXIoQmFycmllci5ub3JtU2FjaykpLmluKHN0cmluZzApLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5XaXRoU2FjayhCaWdJbnRlZ2VyLlBhcnNlKFwiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIiksIE9wZXJhdG9yLkFzc2lnbikuVigpLkxvY2FsPG9iamVjdD4oX18uT3V0KFwia25vd3NcIikuQmFycmllcihCYXJyaWVyLk5vcm1TYWNrKSkuSW4oXCJrbm93c1wiKS5CYXJyaWVyKCkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKGdyZW1saW5nby5QYXJzZUJpZ0ludChcIjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIpLCBncmVtbGluZ28uT3BlcmF0b3IuQXNzaWduKS5WKCkuTG9jYWwoZ3JlbWxpbmdvLlRfXy5PdXQoXCJrbm93c1wiKS5CYXJyaWVyKGdyZW1saW5nby5CYXJyaWVyLk5vcm1TYWNrKSkuSW4oXCJrbm93c1wiKS5CYXJyaWVyKCkuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBnLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbihcImtub3dzXCIpLmJhcnJpZXIoKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcud2l0aFNhY2sobmV3IEJpZ0ludGVnZXIoXCIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiKSwgT3BlcmF0b3IuYXNzaWduKS5WKCkubG9jYWwoX18ub3V0KFwia25vd3NcIikuYmFycmllcihCYXJyaWVyLm5vcm1TYWNrKSkuaW4oXCJrbm93c1wiKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLndpdGhTYWNrKDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLCBPcGVyYXRvci5hc3NpZ24pLlYoKS5sb2NhbChfXy5vdXQoXCJrbm93c1wiKS5iYXJyaWVyKEJhcnJpZXIubm9ybVNhY2spKS5pbl8oXCJrbm93c1wiKS5iYXJyaWVyKCkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcud2l0aF9zYWNrKGJpZ2ludCgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCksIE9wZXJhdG9yLmFzc2lnbikuVigpLmxvY2FsKF9fLm91dCgna25vd3MnKS5iYXJyaWVyKEJhcnJpZXIubm9ybV9zYWNrKSkuaW5fKCdrbm93cycpLmJhcnJpZXIoKS5zYWNrKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNhY2tYMlhfVl9zYWNrWGRpdlhfYnlYY29uc3RhbnRYNF8wWFhfc2FjayIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLndpdGhTYWNrKDIpLlYoKS5zYWNrKE9wZXJhdG9yLmRpdikuYnkoX18uY29uc3RhbnQoNC4wZCkpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcud2l0aFNhY2soMikuVigpLnNhY2soT3BlcmF0b3IuZGl2KS5ieShfXy5jb25zdGFudCg0LjBkKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNhY2soMikuVigpLnNhY2soT3BlcmF0b3IuZGl2KS5ieShfXy5jb25zdGFudCg0LjBkKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLndpdGhTYWNrKG51bWJlcjApLlYoKS5zYWNrKE9wZXJhdG9yLmRpdikuYnkoX18uY29uc3RhbnQoZG91YmxlMCkpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTYWNrKDIpLlYoKS5TYWNrKE9wZXJhdG9yLkRpdikuQnkoX18uQ29uc3RhbnQ8b2JqZWN0Pig0LjBkKSkuU2FjazxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLldpdGhTYWNrKDIpLlYoKS5TYWNrKGdyZW1saW5nby5PcGVyYXRvci5EaXYpLkJ5KGdyZW1saW5nby5UX18uQ29uc3RhbnQoNC4wKSkuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcud2l0aFNhY2soMikuVigpLnNhY2soT3BlcmF0b3IuZGl2KS5ieShfXy5jb25zdGFudCg0LjBkKSkuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLndpdGhTYWNrKDIpLlYoKS5zYWNrKE9wZXJhdG9yLmRpdikuYnkoX18uY29uc3RhbnQoNC4wZCkpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy53aXRoU2FjaygyKS5WKCkuc2FjayhPcGVyYXRvci5kaXYpLmJ5KF9fLmNvbnN0YW50KDQuMCkpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2FjaygyKS5WKCkuc2FjayhPcGVyYXRvci5kaXYpLmJ5KF9fLmNvbnN0YW50KDQuMCkpLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NhY2tYYXNzaWduWF9ieVhhZ2VYX2J5WG5hbWVYX3NhY2siLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuc2Fjayhhc3NpZ24pLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KHN0cmluZzApLmJ5KHN0cmluZzEpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TYWNrKE9wZXJhdG9yLkFzc2lnbikuQnkoXCJhZ2VcIikuQnkoXCJuYW1lXCIpLlNhY2s8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2FjayhncmVtbGluZ28uT3BlcmF0b3IuQXNzaWduKS5CeShcImFnZVwiKS5CeShcIm5hbWVcIikuU2FjaygpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNhY2soT3BlcmF0b3IuYXNzaWduKS5ieShcImFnZVwiKS5ieShcIm5hbWVcIikuc2FjaygpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zYWNrKE9wZXJhdG9yLmFzc2lnbikuYnkoXCJhZ2VcIikuYnkoXCJuYW1lXCIpLnNhY2soKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KFwiYWdlXCIpLmJ5KFwibmFtZVwiKS5zYWNrKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2FjayhPcGVyYXRvci5hc3NpZ24pLmJ5KCdhZ2UnKS5ieSgnbmFtZScpLnNhY2soKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NpZGVFZmZlY3RYaWRlbnRpdHlYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuU2lkZUVmZmVjdChfXy5JZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlNpZGVFZmZlY3QoZ3JlbWxpbmdvLlRfXy5JZGVudGl0eSgpKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLmlkZW50aXR5KCkpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLnNpZGVfZWZmZWN0KF9fLmlkZW50aXR5KCkpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfc2lkZUVmZmVjdFhpZGVudGl0eV92YWx1ZXNYbmFtZVhYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLmlkZW50aXR5KCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKS52YWx1ZXMoc3RyaW5nMCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLlNpZGVFZmZlY3QoX18uSWRlbnRpdHkoKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuU2lkZUVmZmVjdChncmVtbGluZ28uVF9fLklkZW50aXR5KCkuVmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuc2lkZUVmZmVjdChfXy5pZGVudGl0eSgpLnZhbHVlcyhcIm5hbWVcIikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLmlkZW50aXR5KCkudmFsdWVzKFwibmFtZVwiKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnNpZGVFZmZlY3QoX18uaWRlbnRpdHkoKS52YWx1ZXMoXCJuYW1lXCIpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5zaWRlX2VmZmVjdChfXy5pZGVudGl0eSgpLnZhbHVlcygnbmFtZScpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3NpZGVFZmZlY3RYcHJvcGVydHlYc2luZ2xlX2FnZV8yMlgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSxcImFnZVwiLDIxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwiYWdlXCIsIDIxKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuYWRkVihzdHJpbmcwKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzEsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuQWRkVigoc3RyaW5nKSBcInBlcnNvblwiKS5Qcm9wZXJ0eShDYXJkaW5hbGl0eS5TaW5nbGUsIFwiYWdlXCIsIDIxKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuQWRkVihcInBlcnNvblwiKS5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuU2luZ2xlLCBcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5hZGRWKFwicGVyc29uXCIpLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJhZ2VcIiwgMjEpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmFkZFYoXCJwZXJzb25cIikucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuYWRkVihcInBlcnNvblwiKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwiYWdlXCIsIDIxKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmFkZF92KCdwZXJzb24nKS5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsICdhZ2UnLCAyMSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSxcImFnZVwiLDIyKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJhZ2VcIiwgMjIpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJhZ2VcIiwgMjIpKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuc2lkZUVmZmVjdChfXy5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIHN0cmluZzAsIG51bWJlcjApKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5TaWRlRWZmZWN0KF9fLlByb3BlcnR5KENhcmRpbmFsaXR5LlNpbmdsZSwgXCJhZ2VcIiwgMjIpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLlNpZGVFZmZlY3QoZ3JlbWxpbmdvLlRfXy5Qcm9wZXJ0eShncmVtbGluZ28uQ2FyZGluYWxpdHkuU2luZ2xlLCBcImFnZVwiLCAyMikpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnNpZGVFZmZlY3QoX18ucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCBcImFnZVwiLCAyMikpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5zaWRlRWZmZWN0KF9fLnByb3BlcnR5KENhcmRpbmFsaXR5LnNpbmdsZSwgXCJhZ2VcIiwgMjIpKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuc2lkZUVmZmVjdChfXy5wcm9wZXJ0eShDYXJkaW5hbGl0eS5zaW5nbGUsIFwiYWdlXCIsIDIyKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuc2lkZV9lZmZlY3QoX18ucHJvcGVydHkoQ2FyZGluYWxpdHkuc2luZ2xlLCAnYWdlJywgMjIpKSIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiLDIxKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwiYWdlXCIsIDIxKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIG51bWJlcjApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgMjEpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImFnZVwiLCAyMSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdhZ2UnLCAyMSkiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwyMikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMjIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcImFnZVwiLCAyMikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBudW1iZXIwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIiwgMjIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzKFwiYWdlXCIsIDIyKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMjIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMjIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJhZ2VcIiwgMjIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJywgMjIpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBfYnlYdmFsdWVzWG5hbWVYX3NpZGVFZmZlY3RYY29uc3RhbnRYenl4WFhfc3Vic3RyaW5nWDFYWF9ieVhjb25zdGFudFgxWF9zaWRlRWZmZWN0WGNvbnN0YW50WHh5elhYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuc2lkZUVmZmVjdChfXy5jb25zdGFudChcInp5eFwiKSkuc3Vic3RyaW5nKDAsMSkpLmJ5KF9fLmNvbnN0YW50KDEpLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoXCJ4eXpcIikpKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zaWRlRWZmZWN0KF9fLmNvbnN0YW50KFwienl4XCIpKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoXCJ4eXpcIikpKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuc2lkZUVmZmVjdChfXy5jb25zdGFudChcInp5eFwiKSkuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKS5zaWRlRWZmZWN0KF9fLmNvbnN0YW50KFwieHl6XCIpKSkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKHN0cmluZzApLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoc3RyaW5nMSkpLnN1YnN0cmluZyhudW1iZXIwLCBudW1iZXIxKSkuYnkoX18uY29uc3RhbnQobnVtYmVyMSkuc2lkZUVmZmVjdChfXy5jb25zdGFudChzdHJpbmcyKSkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwPG9iamVjdCwgb2JqZWN0PigpLkJ5KF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5TaWRlRWZmZWN0KF9fLkNvbnN0YW50PG9iamVjdD4oXCJ6eXhcIikpLlN1YnN0cmluZygwLCAxKSkuQnkoX18uQ29uc3RhbnQ8b2JqZWN0PigxKS5TaWRlRWZmZWN0KF9fLkNvbnN0YW50PG9iamVjdD4oXCJ4eXpcIikpKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKCkuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLlNpZGVFZmZlY3QoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInp5eFwiKSkuU3Vic3RyaW5nKDAsIDEpKS5CeShncmVtbGluZ28uVF9fLkNvbnN0YW50KDEpLlNpZGVFZmZlY3QoZ3JlbWxpbmdvLlRfXy5Db25zdGFudChcInh5elwiKSkpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKCkuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zaWRlRWZmZWN0KF9fLmNvbnN0YW50KFwienl4XCIpKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoXCJ4eXpcIikpKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoXCJuYW1lXCIpLnNpZGVFZmZlY3QoX18uY29uc3RhbnQoXCJ6eXhcIikpLnN1YnN0cmluZygwLCAxKSkuYnkoX18uY29uc3RhbnQoMSkuc2lkZUVmZmVjdChfXy5jb25zdGFudChcInh5elwiKSkpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cCgpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuc2lkZUVmZmVjdChfXy5jb25zdGFudChcInp5eFwiKSkuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKS5zaWRlRWZmZWN0KF9fLmNvbnN0YW50KFwieHl6XCIpKSkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoKS5ieShfXy52YWx1ZXMoJ25hbWUnKS5zaWRlX2VmZmVjdChfXy5jb25zdGFudCgnenl4JykpLnN1YnN0cmluZygwLCAxKSkuYnkoX18uY29uc3RhbnQoMSkuc2lkZV9lZmZlY3QoX18uY29uc3RhbnQoJ3h5eicpKSkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfd2l0aFNpZGVFZmZlY3RYeF9zZXRYX1ZfYm90aF9ib3RoX3NpZGVFZmZlY3RYbG9jYWxYYWdncmVnYXRlWHhYX2J5WG5hbWVYWF9jYXBYeFhfdW5mb2xkIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcud2l0aFNpZGVFZmZlY3QoXCJ4XCIse30pLlYoKS5ib3RoKCkuYm90aCgpLnNpZGVFZmZlY3QoX18ubG9jYWwoYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikpKS5jYXAoXCJ4XCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy53aXRoU2lkZUVmZmVjdChcInhcIiwge30pLlYoKS5ib3RoKCkuYm90aCgpLnNpZGVFZmZlY3QoX18ubG9jYWwoX18uYWdncmVnYXRlKFwieFwiKS5ieShcIm5hbWVcIikpKS5jYXAoXCJ4XCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcud2l0aFNpZGVFZmZlY3QoXCJ4XCIsIHt9KS5WKCkuYm90aCgpLmJvdGgoKS5zaWRlRWZmZWN0KF9fLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpKSkuY2FwKFwieFwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy53aXRoU2lkZUVmZmVjdChzdHJpbmcwLCBzZXQwKS5WKCkuYm90aCgpLmJvdGgoKS5zaWRlRWZmZWN0KF9fLmxvY2FsKF9fLmFnZ3JlZ2F0ZShzdHJpbmcwKS5ieShzdHJpbmcxKSkpLmNhcChzdHJpbmcwKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLldpdGhTaWRlRWZmZWN0KFwieFwiLCBuZXcgSGFzaFNldDxvYmplY3Q+IHsgIH0pLlYoKS5Cb3RoKCkuQm90aCgpLlNpZGVFZmZlY3QoX18uTG9jYWw8b2JqZWN0PihfXy5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KFwibmFtZVwiKSkpLkNhcDxvYmplY3Q+KFwieFwiKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5XaXRoU2lkZUVmZmVjdChcInhcIiwgZ3JlbWxpbmdvLk5ld1NpbXBsZVNldCgpKS5WKCkuQm90aCgpLkJvdGgoKS5TaWRlRWZmZWN0KGdyZW1saW5nby5UX18uTG9jYWwoZ3JlbWxpbmdvLlRfXy5BZ2dyZWdhdGUoXCJ4XCIpLkJ5KFwibmFtZVwiKSkpLkNhcChcInhcIikuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy53aXRoU2lkZUVmZmVjdChcInhcIiwgW10gYXMgU2V0KS5WKCkuYm90aCgpLmJvdGgoKS5zaWRlRWZmZWN0KF9fLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpKSkuY2FwKFwieFwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy53aXRoU2lkZUVmZmVjdChcInhcIiwgbmV3IEhhc2hTZXQ8T2JqZWN0PigpIHt7ICB9fSkuVigpLmJvdGgoKS5ib3RoKCkuc2lkZUVmZmVjdChfXy5sb2NhbChfXy5hZ2dyZWdhdGUoXCJ4XCIpLmJ5KFwibmFtZVwiKSkpLmNhcChcInhcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcud2l0aFNpZGVFZmZlY3QoXCJ4XCIsIG5ldyBTZXQoW10pKS5WKCkuYm90aCgpLmJvdGgoKS5zaWRlRWZmZWN0KF9fLmxvY2FsKF9fLmFnZ3JlZ2F0ZShcInhcIikuYnkoXCJuYW1lXCIpKSkuY2FwKFwieFwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLndpdGhfc2lkZV9lZmZlY3QoJ3gnLCBzZXQoKSkuVigpLmJvdGgoKS5ib3RoKCkuc2lkZV9lZmZlY3QoX18ubG9jYWwoX18uYWdncmVnYXRlKCd4JykuYnkoJ25hbWUnKSkpLmNhcCgneCcpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWGFnZVhfZ3JvdXBDb3VudFhhWF9ieVhuYW1lWF9vdXRfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImFnZVwiKS5ncm91cENvdW50KFwiYVwiKS5ieShcIm5hbWVcIikub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImFnZVwiKS5ncm91cENvdW50KFwiYVwiKS5ieShcIm5hbWVcIikub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKS5ncm91cENvdW50KHN0cmluZzEpLmJ5KHN0cmluZzIpLm91dCgpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJhZ2VcIikuR3JvdXBDb3VudChcImFcIikuQnkoXCJuYW1lXCIpLk91dCgpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcImFnZVwiKS5Hcm91cENvdW50KFwiYVwiKS5CeShcIm5hbWVcIikuT3V0KCkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJhZ2VcIikuZ3JvdXBDb3VudChcImFcIikuYnkoXCJuYW1lXCIpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmhhcyhcImFnZVwiKS5ncm91cENvdW50KFwiYVwiKS5ieShcIm5hbWVcIikub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwiYWdlXCIpLmdyb3VwQ291bnQoXCJhXCIpLmJ5KFwibmFtZVwiKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygnYWdlJykuZ3JvdXBfY291bnQoJ2EnKS5ieSgnbmFtZScpLm91dCgpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBYYVhfYnlYYWdlWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoc3RyaW5nMCkuYnkoc3RyaW5nMSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwKFwiYVwiKS5CeShcImFnZVwiKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cChcImFcIikuQnkoXCJhZ2VcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJhZ2VcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwiYWdlXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieShcImFnZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCdhJykuYnkoJ2FnZScpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKHN0cmluZzApLmJ5KHN0cmluZzEpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cChcImFcIikuQnkoXCJuYW1lXCIpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKFwiYVwiKS5CeShcIm5hbWVcIikuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCdhJykuYnkoJ25hbWUnKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2hhc1hsYW5nWF9ncm91cFhhWF9ieVhsYW5nWF9ieVhuYW1lWF9vdXRfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibGFuZ1wiKS5ieShcIm5hbWVcIikub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibGFuZ1wiKS5ieShcIm5hbWVcIikub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5oYXMoXCJsYW5nXCIpLmdyb3VwKFwiYVwiKS5ieShcImxhbmdcIikuYnkoXCJuYW1lXCIpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwKS5ncm91cChzdHJpbmcxKS5ieShzdHJpbmcwKS5ieShzdHJpbmcyKS5vdXQoKS5jYXAoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwibGFuZ1wiKS5Hcm91cChcImFcIikuQnkoXCJsYW5nXCIpLkJ5KFwibmFtZVwiKS5PdXQoKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJsYW5nXCIpLkdyb3VwKFwiYVwiKS5CeShcImxhbmdcIikuQnkoXCJuYW1lXCIpLk91dCgpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwibGFuZ1wiKS5ncm91cChcImFcIikuYnkoXCJsYW5nXCIpLmJ5KFwibmFtZVwiKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJsYW5nXCIpLmdyb3VwKFwiYVwiKS5ieShcImxhbmdcIikuYnkoXCJuYW1lXCIpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmhhcyhcImxhbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibGFuZ1wiKS5ieShcIm5hbWVcIikub3V0KCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ2xhbmcnKS5ncm91cCgnYScpLmJ5KCdsYW5nJykuYnkoJ25hbWUnKS5vdXQoKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhvdXRfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYY291bnRYX3RpbWVzWDJYX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5jb3VudCgpKSkudGltZXMoMikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5vdXQoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmNvdW50KCkpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLnJlcGVhdChfXy5vdXQoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmNvdW50KCkpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXAoc3RyaW5nMCkuYnkoc3RyaW5nMSkuYnkoX18uY291bnQoKSkpLnRpbWVzKG51bWJlcjApLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uT3V0KCkuR3JvdXAoXCJhXCIpLkJ5KFwibmFtZVwiKS5CeShfXy5Db3VudCgpKSkuVGltZXMoMikuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uT3V0KCkuR3JvdXAoXCJhXCIpLkJ5KFwibmFtZVwiKS5CeShncmVtbGluZ28uVF9fLkNvdW50KCkpKS5UaW1lcygyKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5vdXQoKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmNvdW50KCkpKS50aW1lcygyKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18ub3V0KCkuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5jb3VudCgpKSkudGltZXMoMikuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoX18uY291bnQoKSkpLnRpbWVzKDIpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLm91dCgpLmdyb3VwKCdhJykuYnkoJ25hbWUnKS5ieShfXy5jb3VudCgpKSkudGltZXMoMikuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cFhhWF9ieVhsYWJlbFhfYnlYb3V0RV93ZWlnaHRfc3VtWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFQubGFiZWwpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoVC5sYWJlbCkuYnkoX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoVC5sYWJlbCkuYnkoX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoc3RyaW5nMCkuYnkoVC5sYWJlbCkuYnkoX18ub3V0RSgpLnZhbHVlcyhzdHJpbmcxKS5zdW0oKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwKFwiYVwiKS5CeShULkxhYmVsKS5CeShfXy5PdXRFKCkuVmFsdWVzPG9iamVjdD4oXCJ3ZWlnaHRcIikuU3VtPG9iamVjdD4oKSkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoXCJhXCIpLkJ5KGdyZW1saW5nby5ULkxhYmVsKS5CeShncmVtbGluZ28uVF9fLk91dEUoKS5WYWx1ZXMoXCJ3ZWlnaHRcIikuU3VtKCkpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KFQubGFiZWwpLmJ5KF9fLm91dEUoKS52YWx1ZXMoXCJ3ZWlnaHRcIikuc3VtKCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieShULmxhYmVsKS5ieShfXy5vdXRFKCkudmFsdWVzKFwid2VpZ2h0XCIpLnN1bSgpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoVC5sYWJlbCkuYnkoX18ub3V0RSgpLnZhbHVlcyhcIndlaWdodFwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5ncm91cCgnYScpLmJ5KFQubGFiZWwpLmJ5KF9fLm91dF9lKCkudmFsdWVzKCd3ZWlnaHQnKS5zdW1fKCkpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwWGFYX2J5WHNvbmdUeXBlWF9ieVhjb3VudFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5ib3RoKFwiZm9sbG93ZWRCeVwiKSkudGltZXMoMikuZ3JvdXAoXCJhXCIpLmJ5KFwic29uZ1R5cGVcIikuYnkoX18uY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5ib3RoKFwiZm9sbG93ZWRCeVwiKSkudGltZXMoMikuZ3JvdXAoXCJhXCIpLmJ5KFwic29uZ1R5cGVcIikuYnkoX18uY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aChcImZvbGxvd2VkQnlcIikpLnRpbWVzKDIpLmdyb3VwKFwiYVwiKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmNvdW50KCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5ib3RoKHN0cmluZzApKS50aW1lcyhudW1iZXIwKS5ncm91cChzdHJpbmcxKS5ieShzdHJpbmcyKS5ieShfXy5jb3VudCgpKS5jYXAoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuUmVwZWF0KF9fLkJvdGgoXCJmb2xsb3dlZEJ5XCIpKS5UaW1lcygyKS5Hcm91cChcImFcIikuQnkoXCJzb25nVHlwZVwiKS5CeShfXy5Db3VudCgpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5SZXBlYXQoZ3JlbWxpbmdvLlRfXy5Cb3RoKFwiZm9sbG93ZWRCeVwiKSkuVGltZXMoMikuR3JvdXAoXCJhXCIpLkJ5KFwic29uZ1R5cGVcIikuQnkoZ3JlbWxpbmdvLlRfXy5Db3VudCgpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLnJlcGVhdChfXy5ib3RoKFwiZm9sbG93ZWRCeVwiKSkudGltZXMoMikuZ3JvdXAoXCJhXCIpLmJ5KFwic29uZ1R5cGVcIikuYnkoX18uY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoXCJmb2xsb3dlZEJ5XCIpKS50aW1lcygyKS5ncm91cChcImFcIikuYnkoXCJzb25nVHlwZVwiKS5ieShfXy5jb3VudCgpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aChcImZvbGxvd2VkQnlcIikpLnRpbWVzKDIpLmdyb3VwKFwiYVwiKS5ieShcInNvbmdUeXBlXCIpLmJ5KF9fLmNvdW50KCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkucmVwZWF0KF9fLmJvdGgoJ2ZvbGxvd2VkQnknKSkudGltZXMoMikuZ3JvdXAoJ2EnKS5ieSgnc29uZ1R5cGUnKS5ieShfXy5jb3VudCgpKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwWGFYX2J5WHZhbHVlc1huYW1lWF9zdWJzdHJpbmdYMVhYX2J5WGNvbnN0YW50WDFYWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDAsMSkpLmJ5KF9fLmNvbnN0YW50KDEpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KF9fLnZhbHVlcyhcIm5hbWVcIikuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cChzdHJpbmcwKS5ieShfXy52YWx1ZXMoc3RyaW5nMSkuc3Vic3RyaW5nKG51bWJlcjAsIG51bWJlcjEpKS5ieShfXy5jb25zdGFudChudW1iZXIxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwKFwiYVwiKS5CeShfXy5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuU3Vic3RyaW5nKDAsIDEpKS5CeShfXy5Db25zdGFudDxvYmplY3Q+KDEpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cChcImFcIikuQnkoZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJuYW1lXCIpLlN1YnN0cmluZygwLCAxKSkuQnkoZ3JlbWxpbmdvLlRfXy5Db25zdGFudCgxKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoX18udmFsdWVzKFwibmFtZVwiKS5zdWJzdHJpbmcoMCwgMSkpLmJ5KF9fLmNvbnN0YW50KDEpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCdhJykuYnkoX18udmFsdWVzKCduYW1lJykuc3Vic3RyaW5nKDAsIDEpKS5ieShfXy5jb25zdGFudCgxKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhzb25nWF9ncm91cFhhWF9ieVhuYW1lWF9ieVhwcm9wZXJ0aWVzX2dyb3VwQ291bnRfYnlYbGFiZWxYWF9vdXRfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhc0xhYmVsKFwic29uZ1wiKS5ncm91cChcImFcIikuYnkoXCJuYW1lXCIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpLm91dCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhc0xhYmVsKHN0cmluZzApLmdyb3VwKHN0cmluZzEpLmJ5KHN0cmluZzIpLmJ5KF9fLnByb3BlcnRpZXMoKS5ncm91cENvdW50KCkuYnkoVC5sYWJlbCkpLm91dCgpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInNvbmdcIikuR3JvdXAoXCJhXCIpLkJ5KFwibmFtZVwiKS5CeShfXy5Qcm9wZXJ0aWVzPG9iamVjdD4oKS5Hcm91cENvdW50PG9iamVjdD4oKS5CeShULkxhYmVsKSkuT3V0KCkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuSGFzTGFiZWwoXCJzb25nXCIpLkdyb3VwKFwiYVwiKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5Qcm9wZXJ0aWVzKCkuR3JvdXBDb3VudCgpLkJ5KGdyZW1saW5nby5ULkxhYmVsKSkuT3V0KCkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXNMYWJlbChcInNvbmdcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBDb3VudCgpLmJ5KFQubGFiZWwpKS5vdXQoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhc19sYWJlbCgnc29uZycpLmdyb3VwKCdhJykuYnkoJ25hbWUnKS5ieShfXy5wcm9wZXJ0aWVzKCkuZ3JvdXBfY291bnQoKS5ieShULmxhYmVsKSkub3V0KCkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNMYWJlbFhwZXJzb25YX2FzWHBYX291dFhjcmVhdGVkWF9ncm91cFhhWF9ieVhuYW1lWF9ieVhzZWxlY3RYcFhfdmFsdWVzWGFnZVhfc3VtWF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhc0xhYmVsKFwicGVyc29uXCIpLmFzKFwicFwiKS5vdXQoXCJjcmVhdGVkXCIpLmdyb3VwKFwiYVwiKS5ieShcIm5hbWVcIikuYnkoX18uc2VsZWN0KFwicFwiKS52YWx1ZXMoXCJhZ2VcIikuc3VtKCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzTGFiZWwoc3RyaW5nMCkuYXMoc3RyaW5nMSkub3V0KHN0cmluZzIpLmdyb3VwKHN0cmluZzMpLmJ5KHN0cmluZzQpLmJ5KF9fLnNlbGVjdChzdHJpbmcxKS52YWx1ZXMoc3RyaW5nNSkuc3VtKCkpLmNhcChzdHJpbmczKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcInBcIikuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cChcImFcIikuQnkoXCJuYW1lXCIpLkJ5KF9fLlNlbGVjdDxvYmplY3Q+KFwicFwiKS5WYWx1ZXM8b2JqZWN0PihcImFnZVwiKS5TdW08b2JqZWN0PigpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXNMYWJlbChcInBlcnNvblwiKS5BcyhcInBcIikuT3V0KFwiY3JlYXRlZFwiKS5Hcm91cChcImFcIikuQnkoXCJuYW1lXCIpLkJ5KGdyZW1saW5nby5UX18uU2VsZWN0KFwicFwiKS5WYWx1ZXMoXCJhZ2VcIikuU3VtKCkpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzTGFiZWwoXCJwZXJzb25cIikuYXMoXCJwXCIpLm91dChcImNyZWF0ZWRcIikuZ3JvdXAoXCJhXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5zZWxlY3QoXCJwXCIpLnZhbHVlcyhcImFnZVwiKS5zdW0oKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXNfbGFiZWwoJ3BlcnNvbicpLmFzXygncCcpLm91dCgnY3JlYXRlZCcpLmdyb3VwKCdhJykuYnkoJ25hbWUnKS5ieShfXy5zZWxlY3QoJ3AnKS52YWx1ZXMoJ2FnZScpLnN1bV8oKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cFhtWF9ieVhuYW1lWF9ieVhpblhrbm93c1hfbmFtZVhfY2FwWG1YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKFwibVwiKS5ieShcIm5hbWVcIikuYnkoX18uaW4oXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoXCJtXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5pbihcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXAoXCJtXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5pbihcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKHN0cmluZzApLmJ5KHN0cmluZzEpLmJ5KF9fLmluKHN0cmluZzIpLnZhbHVlcyhzdHJpbmcxKSkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwKFwibVwiKS5CeShcIm5hbWVcIikuQnkoX18uSW4oXCJrbm93c1wiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikpLkNhcDxvYmplY3Q+KFwibVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKFwibVwiKS5CeShcIm5hbWVcIikuQnkoZ3JlbWxpbmdvLlRfXy5JbihcImtub3dzXCIpLlZhbHVlcyhcIm5hbWVcIikpLkNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuZ3JvdXAoXCJtXCIpLmJ5KFwibmFtZVwiKS5ieShfXy5pbihcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwibVwiKS5ieShcIm5hbWVcIikuYnkoX18uaW4oXCJrbm93c1wiKS52YWx1ZXMoXCJuYW1lXCIpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cChcIm1cIikuYnkoXCJuYW1lXCIpLmJ5KF9fLmluXyhcImtub3dzXCIpLnZhbHVlcyhcIm5hbWVcIikpLmNhcChcIm1cIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoJ20nKS5ieSgnbmFtZScpLmJ5KF9fLmluXygna25vd3MnKS52YWx1ZXMoJ25hbWUnKSkuY2FwKCdtJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cFhtWF9ieVhsYWJlbFhfYnlYbGFiZWxfY291bnRYX2NhcFhtWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cChcIm1cIikuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoXCJtXCIpLmJ5KF9fLmxhYmVsKCkpLmJ5KF9fLmxhYmVsKCkuY291bnQoKSkuY2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcIm1cIikuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cChzdHJpbmcwKS5ieShfXy5sYWJlbCgpKS5ieShfXy5sYWJlbCgpLmNvdW50KCkpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cChcIm1cIikuQnkoX18uTGFiZWwoKSkuQnkoX18uTGFiZWwoKS5Db3VudCgpKS5DYXA8b2JqZWN0PihcIm1cIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5Hcm91cChcIm1cIikuQnkoZ3JlbWxpbmdvLlRfXy5MYWJlbCgpKS5CeShncmVtbGluZ28uVF9fLkxhYmVsKCkuQ291bnQoKSkuQ2FwKFwibVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cChcIm1cIikuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cChcIm1cIikuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5ncm91cChcIm1cIikuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoXCJtXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCdtJykuYnkoX18ubGFiZWwoKSkuYnkoX18ubGFiZWwoKS5jb3VudCgpKS5jYXAoJ20nKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2Nob29zZVhsYWJlbF9wZXJzb25fX2FnZV9ncm91cENvdW50WGFYX19uYW1lX2dyb3VwQ291bnRYYlhYX2NhcFhhX2JYX3VuZm9sZCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5jaG9vc2UoaGFzKFQubGFiZWwsIFwicGVyc29uXCIpLHZhbHVlcyhcImFnZVwiKS5ncm91cENvdW50KFwiYVwiKSwgdmFsdWVzKFwibmFtZVwiKS5ncm91cENvdW50KFwiYlwiKSkuY2FwKFwiYVwiLCBcImJcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFQubGFiZWwsIFwicGVyc29uXCIpLCBfXy52YWx1ZXMoXCJhZ2VcIikuZ3JvdXBDb3VudChcImFcIiksIF9fLnZhbHVlcyhcIm5hbWVcIikuZ3JvdXBDb3VudChcImJcIikpLmNhcChcImFcIiwgXCJiXCIpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmNob29zZShfXy5oYXMoVC5sYWJlbCwgXCJwZXJzb25cIiksIF9fLnZhbHVlcyhcImFnZVwiKS5ncm91cENvdW50KFwiYVwiKSwgX18udmFsdWVzKFwibmFtZVwiKS5ncm91cENvdW50KFwiYlwiKSkuY2FwKFwiYVwiLCBcImJcIikudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmNob29zZShfXy5oYXMoVC5sYWJlbCwgc3RyaW5nMCksIF9fLnZhbHVlcyhzdHJpbmcxKS5ncm91cENvdW50KHN0cmluZzIpLCBfXy52YWx1ZXMoc3RyaW5nMykuZ3JvdXBDb3VudChzdHJpbmc0KSkuY2FwKHN0cmluZzIsIHN0cmluZzQpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkNob29zZTxvYmplY3Q+KF9fLkhhcyhULkxhYmVsLCBcInBlcnNvblwiKSwgX18uVmFsdWVzPG9iamVjdD4oXCJhZ2VcIikuR3JvdXBDb3VudChcImFcIiksIF9fLlZhbHVlczxvYmplY3Q+KFwibmFtZVwiKS5Hcm91cENvdW50KFwiYlwiKSkuQ2FwPG9iamVjdD4oXCJhXCIsIFwiYlwiKS5VbmZvbGQ8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuQ2hvb3NlKGdyZW1saW5nby5UX18uSGFzKGdyZW1saW5nby5ULkxhYmVsLCBcInBlcnNvblwiKSwgZ3JlbWxpbmdvLlRfXy5WYWx1ZXMoXCJhZ2VcIikuR3JvdXBDb3VudChcImFcIiksIGdyZW1saW5nby5UX18uVmFsdWVzKFwibmFtZVwiKS5Hcm91cENvdW50KFwiYlwiKSkuQ2FwKFwiYVwiLCBcImJcIikuVW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuY2hvb3NlKF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSwgX18udmFsdWVzKFwiYWdlXCIpLmdyb3VwQ291bnQoXCJhXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoXCJiXCIpKS5jYXAoXCJhXCIsIFwiYlwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuY2hvb3NlKF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSwgX18udmFsdWVzKFwiYWdlXCIpLmdyb3VwQ291bnQoXCJhXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoXCJiXCIpKS5jYXAoXCJhXCIsIFwiYlwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuY2hvb3NlKF9fLmhhcyhULmxhYmVsLCBcInBlcnNvblwiKSwgX18udmFsdWVzKFwiYWdlXCIpLmdyb3VwQ291bnQoXCJhXCIpLCBfXy52YWx1ZXMoXCJuYW1lXCIpLmdyb3VwQ291bnQoXCJiXCIpKS5jYXAoXCJhXCIsIFwiYlwiKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5jaG9vc2UoX18uaGFzKFQubGFiZWwsICdwZXJzb24nKSwgX18udmFsdWVzKCdhZ2UnKS5ncm91cF9jb3VudCgnYScpLCBfXy52YWx1ZXMoJ25hbWUnKS5ncm91cF9jb3VudCgnYicpKS5jYXAoJ2EnLCAnYicpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwWGFYX2J5X2J5WG91dF9vcmRlclhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFAud2l0aGluKFwidmFkYXNcIixcInBldGVyXCIpKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBQLndpdGhpbihzdHJpbmcyLCBzdHJpbmczKSkuZ3JvdXAoc3RyaW5nNCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpKS5jYXAoc3RyaW5nNCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuSGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLldpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLkdyb3VwKFwiYVwiKS5CeSgpLkJ5KF9fLk91dCgpLk9yZGVyKCkpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsIFAud2l0aGluKCd2YWRhcycsICdwZXRlcicpKS5ncm91cCgnYScpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9oYXNYcGVyc29uX25hbWVfd2l0aGluWHZhZGFzX3BldGVyWFhfZ3JvdXBYYVhfYnlfYnlYb3V0X29yZGVyX2NvdW50WF9jYXBYYVgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsXCJuYW1lXCIsUC53aXRoaW4oXCJ2YWRhc1wiLFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmNvdW50KCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuaGFzKHN0cmluZzAsIHN0cmluZzEsIFAud2l0aGluKHN0cmluZzIsIHN0cmluZzMpKS5ncm91cChzdHJpbmc0KS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKHN0cmluZzQpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC5XaXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5Hcm91cChcImFcIikuQnkoKS5CeShfXy5PdXQoKS5PcmRlcigpLkNvdW50KCkpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgZ3JlbWxpbmdvLlAuV2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5PcmRlcigpLkNvdW50KCkpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuaGFzKFwicGVyc29uXCIsIFwibmFtZVwiLCBQLndpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuY291bnQoKSkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5oYXMoJ3BlcnNvbicsICduYW1lJywgUC53aXRoaW4oJ3ZhZGFzJywgJ3BldGVyJykpLmdyb3VwKCdhJykuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmNvdW50KCkpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfaGFzWHBlcnNvbl9uYW1lX3dpdGhpblh2YWRhc19wZXRlclhYX2dyb3VwWGFYX2J5X2J5WG91dF9vcmRlcl9mb2xkX2NvdW50WGxvY2FsWFhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmhhcyhcInBlcnNvblwiLFwibmFtZVwiLFAud2l0aGluKFwidmFkYXNcIixcInBldGVyXCIpKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChsb2NhbCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmhhcyhcInBlcnNvblwiLCBcIm5hbWVcIiwgUC53aXRoaW4oXCJ2YWRhc1wiLCBcInBldGVyXCIpKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmhhcyhzdHJpbmcwLCBzdHJpbmcxLCBQLndpdGhpbihzdHJpbmcyLCBzdHJpbmczKSkuZ3JvdXAoc3RyaW5nNCkuYnkoKS5ieShfXy5vdXQoKS5vcmRlcigpLmZvbGQoKS5jb3VudChTY29wZS5sb2NhbCkpLmNhcChzdHJpbmc0KSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAuV2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoX18uT3V0KCkuT3JkZXIoKS5Gb2xkKCkuQ291bnQoU2NvcGUuTG9jYWwpKS5DYXA8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5IYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIGdyZW1saW5nby5QLldpdGhpbihcInZhZGFzXCIsIFwicGV0ZXJcIikpLkdyb3VwKFwiYVwiKS5CeSgpLkJ5KGdyZW1saW5nby5UX18uT3V0KCkuT3JkZXIoKS5Gb2xkKCkuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSkuQ2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5oYXMoXCJwZXJzb25cIiwgXCJuYW1lXCIsIFAud2l0aGluKFwidmFkYXNcIiwgXCJwZXRlclwiKSkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkub3JkZXIoKS5mb2xkKCkuY291bnQoU2NvcGUubG9jYWwpKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCBQLndpdGhpbigndmFkYXMnLCAncGV0ZXInKSkuZ3JvdXAoJ2EnKS5ieSgpLmJ5KF9fLm91dCgpLm9yZGVyKCkuZm9sZCgpLmNvdW50KFNjb3BlLmxvY2FsKSkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9ncm91cFhhWF9ieV9ieVhvdXRfbGFiZWxfZm9sZFhfY2FwWGFYX3NlbGVjdFh2YWx1ZXNYX3VuZm9sZF9vcmRlclhsb2NhbFgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoc3RyaW5nMCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmZvbGQoKSkuY2FwKHN0cmluZzApLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoX18uT3V0KCkuTGFiZWwoKS5Gb2xkKCkpLkNhcDxvYmplY3Q+KFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLk9yZGVyKFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKFwiYVwiKS5CeSgpLkJ5KGdyZW1saW5nby5UX18uT3V0KCkuTGFiZWwoKS5Gb2xkKCkpLkNhcChcImFcIikuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoJ2EnKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZm9sZCgpKS5jYXAoJ2EnKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBYYVhfYnlfYnlYb3V0X2xhYmVsX2RlZHVwX2ZvbGRYX2NhcFhhWF9zZWxlY3RYdmFsdWVzWF91bmZvbGRfb3JkZXJYbG9jYWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmRlZHVwKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLmdyb3VwKHN0cmluZzApLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuY2FwKHN0cmluZzApLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoX18uT3V0KCkuTGFiZWwoKS5EZWR1cCgpLkZvbGQoKSkuQ2FwPG9iamVjdD4oXCJhXCIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuT3JkZXIoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5MYWJlbCgpLkRlZHVwKCkuRm9sZCgpKS5DYXAoXCJhXCIpLlNlbGVjdChncmVtbGluZ28uQ29sdW1uLlZhbHVlcykuVW5mb2xkKCkuT3JkZXIoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmRlZHVwKCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkuZGVkdXAoKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5kZWR1cCgpLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCdhJykuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmRlZHVwKCkuZm9sZCgpKS5jYXAoJ2EnKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBYYVhfYnlfYnlYb3V0X2xhYmVsX2xpbWl0WDBYX2ZvbGRYX2NhcFhhWF9zZWxlY3RYdmFsdWVzWF91bmZvbGQiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkuZ3JvdXAoc3RyaW5nMCkuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KG51bWJlcjApLmZvbGQoKSkuY2FwKHN0cmluZzApLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cChcImFcIikuQnkoKS5CeShfXy5PdXQoKS5MYWJlbCgpLkxpbWl0PG9iamVjdD4oMCkuRm9sZCgpKS5DYXA8b2JqZWN0PihcImFcIikuU2VsZWN0PG9iamVjdD4oQ29sdW1uLlZhbHVlcykuVW5mb2xkPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKFwiYVwiKS5CeSgpLkJ5KGdyZW1saW5nby5UX18uT3V0KCkuTGFiZWwoKS5MaW1pdCgwKS5Gb2xkKCkpLkNhcChcImFcIikuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgwKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLmdyb3VwKCdhJykuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDApLmZvbGQoKSkuY2FwKCdhJykuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZfZ3JvdXBYYVhfYnlfYnlYb3V0X2xhYmVsX2xpbWl0WDEwWF9mb2xkWF9jYXBYYVhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMTApLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMTApLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cChzdHJpbmcwKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQobnVtYmVyMCkuZm9sZCgpKS5jYXAoc3RyaW5nMCkuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5Hcm91cChcImFcIikuQnkoKS5CeShfXy5PdXQoKS5MYWJlbCgpLkxpbWl0PG9iamVjdD4oMTApLkZvbGQoKSkuQ2FwPG9iamVjdD4oXCJhXCIpLlNlbGVjdDxvYmplY3Q+KENvbHVtbi5WYWx1ZXMpLlVuZm9sZDxvYmplY3Q+KCkuT3JkZXIoU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuR3JvdXAoXCJhXCIpLkJ5KCkuQnkoZ3JlbWxpbmdvLlRfXy5PdXQoKS5MYWJlbCgpLkxpbWl0KDEwKS5Gb2xkKCkpLkNhcChcImFcIikuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMTApLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLmxpbWl0KDEwKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS5saW1pdCgxMCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoJ2EnKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkubGltaXQoMTApLmZvbGQoKSkuY2FwKCdhJykuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX2dyb3VwWGFYX2J5X2J5WG91dF9sYWJlbF90YWlsWDEwWF9mb2xkWF9jYXBYYVhfc2VsZWN0WHZhbHVlc1hfdW5mb2xkX29yZGVyWGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKCkuZ3JvdXAoXCJhXCIpLmJ5KCkuYnkoX18ub3V0KCkubGFiZWwoKS50YWlsKDEwKS5mb2xkKCkpLmNhcChcImFcIikuc2VsZWN0KENvbHVtbi52YWx1ZXMpLnVuZm9sZCgpLm9yZGVyKFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5ncm91cChcImFcIikuYnkoKS5ieShfXy5vdXQoKS5sYWJlbCgpLnRhaWwoMTApLmZvbGQoKSkuY2FwKFwiYVwiKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5ncm91cChzdHJpbmcwKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbChudW1iZXIwKS5mb2xkKCkpLmNhcChzdHJpbmcwKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLkdyb3VwKFwiYVwiKS5CeSgpLkJ5KF9fLk91dCgpLkxhYmVsKCkuVGFpbDxvYmplY3Q+KDEwKS5Gb2xkKCkpLkNhcDxvYmplY3Q+KFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihDb2x1bW4uVmFsdWVzKS5VbmZvbGQ8b2JqZWN0PigpLk9yZGVyKFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLkdyb3VwKFwiYVwiKS5CeSgpLkJ5KGdyZW1saW5nby5UX18uT3V0KCkuTGFiZWwoKS5UYWlsKDEwKS5Gb2xkKCkpLkNhcChcImFcIikuU2VsZWN0KGdyZW1saW5nby5Db2x1bW4uVmFsdWVzKS5VbmZvbGQoKS5PcmRlcihncmVtbGluZ28uU2NvcGUuTG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbCgxMCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbCgxMCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLmdyb3VwKFwiYVwiKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbCgxMCkuZm9sZCgpKS5jYXAoXCJhXCIpLnNlbGVjdChDb2x1bW4udmFsdWVzKS51bmZvbGQoKS5vcmRlcihTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKCkuZ3JvdXAoJ2EnKS5ieSgpLmJ5KF9fLm91dCgpLmxhYmVsKCkudGFpbCgxMCkuZm9sZCgpKS5jYXAoJ2EnKS5zZWxlY3QoQ29sdW1uLnZhbHVlcykudW5mb2xkKCkub3JkZXIoU2NvcGUubG9jYWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0RVhrbm93c1hfc3ViZ3JhcGhYc2dYX25hbWVfY2FwWHNnWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLnN1YmdyYXBoKFwic2dcIikudmFsdWVzKFwibmFtZVwiKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuc3ViZ3JhcGgoXCJzZ1wiKS52YWx1ZXMoXCJuYW1lXCIpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuc3ViZ3JhcGgoXCJzZ1wiKS52YWx1ZXMoXCJuYW1lXCIpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RShzdHJpbmcwKS5zdWJncmFwaChzdHJpbmcxKS52YWx1ZXMoc3RyaW5nMikuY2FwKHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikuU3ViZ3JhcGgoXCJzZ1wiKS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuQ2FwPG9iamVjdD4oXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKFwia25vd3NcIikuU3ViZ3JhcGgoXCJzZ1wiKS5WYWx1ZXMoXCJuYW1lXCIpLkNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXRFKFwia25vd3NcIikuc3ViZ3JhcGgoXCJzZ1wiKS52YWx1ZXMoXCJuYW1lXCIpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0RShcImtub3dzXCIpLnN1YmdyYXBoKFwic2dcIikudmFsdWVzKFwibmFtZVwiKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoXCJrbm93c1wiKS5zdWJncmFwaChcInNnXCIpLnZhbHVlcyhcIm5hbWVcIikuY2FwKFwic2dcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dF9lKCdrbm93cycpLnN1YmdyYXBoKCdzZycpLnZhbHVlcygnbmFtZScpLmNhcCgnc2cnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WX3JlcGVhdFhib3RoRVhjcmVhdGVkWF9zdWJncmFwaFhzZ1hfb3V0VlhfdGltZXNYNVhfbmFtZV9kZWR1cF9jYXBYc2dYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLnJlcGVhdChfXy5ib3RoRShcImNyZWF0ZWRcIikuc3ViZ3JhcGgoXCJzZ1wiKS5vdXRWKCkpLnRpbWVzKDUpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLnJlcGVhdChfXy5ib3RoRShcImNyZWF0ZWRcIikuc3ViZ3JhcGgoXCJzZ1wiKS5vdXRWKCkpLnRpbWVzKDUpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5yZXBlYXQoX18uYm90aEUoXCJjcmVhdGVkXCIpLnN1YmdyYXBoKFwic2dcIikub3V0VigpKS50aW1lcyg1KS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkuY2FwKFwic2dcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLnJlcGVhdChfXy5ib3RoRShzdHJpbmcwKS5zdWJncmFwaChzdHJpbmcxKS5vdXRWKCkpLnRpbWVzKG51bWJlcjApLnZhbHVlcyhzdHJpbmcyKS5kZWR1cCgpLmNhcChzdHJpbmcxKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5SZXBlYXQoX18uQm90aEUoXCJjcmVhdGVkXCIpLlN1YmdyYXBoKFwic2dcIikuT3V0VigpKS5UaW1lcyg1KS5WYWx1ZXM8b2JqZWN0PihcIm5hbWVcIikuRGVkdXAoKS5DYXA8b2JqZWN0PihcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuUmVwZWF0KGdyZW1saW5nby5UX18uQm90aEUoXCJjcmVhdGVkXCIpLlN1YmdyYXBoKFwic2dcIikuT3V0VigpKS5UaW1lcyg1KS5WYWx1ZXMoXCJuYW1lXCIpLkRlZHVwKCkuQ2FwKFwic2dcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkucmVwZWF0KF9fLmJvdGhFKFwiY3JlYXRlZFwiKS5zdWJncmFwaChcInNnXCIpLm91dFYoKSkudGltZXMoNSkudmFsdWVzKFwibmFtZVwiKS5kZWR1cCgpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5yZXBlYXQoX18uYm90aEUoXCJjcmVhdGVkXCIpLnN1YmdyYXBoKFwic2dcIikub3V0VigpKS50aW1lcyg1KS52YWx1ZXMoXCJuYW1lXCIpLmRlZHVwKCkuY2FwKFwic2dcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLnJlcGVhdChfXy5ib3RoRShcImNyZWF0ZWRcIikuc3ViZ3JhcGgoXCJzZ1wiKS5vdXRWKCkpLnRpbWVzKDUpLnZhbHVlcyhcIm5hbWVcIikuZGVkdXAoKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5yZXBlYXQoX18uYm90aF9lKCdjcmVhdGVkJykuc3ViZ3JhcGgoJ3NnJykub3V0X3YoKSkudGltZXMoNSkudmFsdWVzKCduYW1lJykuZGVkdXAoKS5jYXAoJ3NnJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRFWG5vZXhpc3RYX3N1YmdyYXBoWHNnWGNhcFhzZ1giLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5WKCkub3V0RShcIm5vZXhpc3RcIikuc3ViZ3JhcGgoXCJzZ1wiKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dEUoXCJub2V4aXN0XCIpLnN1YmdyYXBoKFwic2dcIikuY2FwKFwic2dcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0RShcIm5vZXhpc3RcIikuc3ViZ3JhcGgoXCJzZ1wiKS5jYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5WKCkub3V0RShzdHJpbmcwKS5zdWJncmFwaChzdHJpbmcxKS5jYXAoc3RyaW5nMSkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0RShcIm5vZXhpc3RcIikuU3ViZ3JhcGgoXCJzZ1wiKS5DYXA8b2JqZWN0PihcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKCkuT3V0RShcIm5vZXhpc3RcIikuU3ViZ3JhcGgoXCJzZ1wiKS5DYXAoXCJzZ1wiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXRFKFwibm9leGlzdFwiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXRFKFwibm9leGlzdFwiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYoKS5vdXRFKFwibm9leGlzdFwiKS5zdWJncmFwaChcInNnXCIpLmNhcChcInNnXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dF9lKCdub2V4aXN0Jykuc3ViZ3JhcGgoJ3NnJykuY2FwKCdzZycpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX0VfaGFzWHdlaWdodF8wXzVYX3N1YmdyYXBoWGFYX3NlbGVjdFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLkUoKS5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5zdWJncmFwaChcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuRSgpLmhhcyhcIndlaWdodFwiLCAwLjQpLnN1YmdyYXBoKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuRSgpLmhhcyhcIndlaWdodFwiLCAwLjQpLnN1YmdyYXBoKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLkUoKS5oYXMoc3RyaW5nMCwgbnVtYmVyMCkuc3ViZ3JhcGgoc3RyaW5nMSkuc2VsZWN0KHN0cmluZzEpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuRSgpLkhhcyhcIndlaWdodFwiLCAwLjQpLlN1YmdyYXBoKFwiYVwiKS5TZWxlY3Q8b2JqZWN0PihcImFcIikiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLkUoKS5IYXMoXCJ3ZWlnaHRcIiwgMC40KS5TdWJncmFwaChcImFcIikuU2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLkUoKS5oYXMoXCJ3ZWlnaHRcIiwgMC40KS5zdWJncmFwaChcImFcIikuc2VsZWN0KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5FKCkuaGFzKFwid2VpZ2h0XCIsIDAuNCkuc3ViZ3JhcGgoXCJhXCIpLnNlbGVjdChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuRSgpLmhhcyhcIndlaWdodFwiLCAwLjQpLnN1YmdyYXBoKFwiYVwiKS5zZWxlY3QoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuRSgpLmhhcygnd2VpZ2h0JywgMC40KS5zdWJncmFwaCgnYScpLnNlbGVjdCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X291dF90cmVlX2J5WG5hbWVYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoc3RyaW5nMCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLk91dCgpLlRyZWU8b2JqZWN0PigpLkJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5PdXQoKS5UcmVlKCkuQnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoXCJuYW1lXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpLmJ5KFwibmFtZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShcIm5hbWVcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieSgnbmFtZScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X291dF90cmVlIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLk91dCgpLlRyZWU8b2JqZWN0PigpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLk91dCgpLlRyZWUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfdHJlZV9ieVhhZ2VYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVigpLm91dCgpLnRyZWUoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLnRyZWUoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYoKS5vdXQoKS50cmVlKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVigpLm91dCgpLnRyZWUoKS5ieShzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYoKS5PdXQoKS5UcmVlPG9iamVjdD4oKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlRyZWUoKS5CeShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS50cmVlKCkuYnkoXCJhZ2VcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVigpLm91dCgpLnRyZWUoKS5ieShcImFnZVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKCkub3V0KCkudHJlZSgpLmJ5KFwiYWdlXCIpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLnRyZWUoKS5ieSgnYWdlJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfb3V0X3RyZWVYYVhfYnlYbmFtZVhfYm90aF9ib3RoX2NhcFhhWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZShcImFcIikuYnkoXCJuYW1lXCIpLmJvdGgoKS5ib3RoKCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShcIm5hbWVcIikuYm90aCgpLmJvdGgoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShcIm5hbWVcIikuYm90aCgpLmJvdGgoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZShzdHJpbmcwKS5ieShzdHJpbmcxKS5ib3RoKCkuYm90aCgpLmNhcChzdHJpbmcwKSIsCisgICAgICAgICAgICAgICAgImRvdG5ldCI6ICJnLlYodmlkMSkuT3V0KCkuT3V0KCkuVHJlZShcImFcIikuQnkoXCJuYW1lXCIpLkJvdGgoKS5Cb3RoKCkuQ2FwPG9iamVjdD4oXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLk91dCgpLlRyZWUoXCJhXCIpLkJ5KFwibmFtZVwiKS5Cb3RoKCkuQm90aCgpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoXCJhXCIpLmJ5KFwibmFtZVwiKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShcIm5hbWVcIikuYm90aCgpLmJvdGgoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZShcImFcIikuYnkoXCJuYW1lXCIpLmJvdGgoKS5ib3RoKCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgnYScpLmJ5KCduYW1lJykuYm90aCgpLmJvdGgoKS5jYXAoJ2EnKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dF9vdXRfdHJlZVhhWF9ib3RoX2JvdGhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZShcImFcIikuYm90aCgpLmJvdGgoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKHN0cmluZzApLmJvdGgoKS5ib3RoKCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5PdXQoKS5UcmVlKFwiYVwiKS5Cb3RoKCkuQm90aCgpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5PdXQoKS5UcmVlKFwiYVwiKS5Cb3RoKCkuQm90aCgpLkNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoXCJhXCIpLmJvdGgoKS5ib3RoKCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoXCJhXCIpLmJvdGgoKS5ib3RoKCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoXCJhXCIpLmJvdGgoKS5ib3RoKCkuY2FwKFwiYVwiKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgnYScpLmJvdGgoKS5ib3RoKCkuY2FwKCdhJykiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRfb3V0X3RyZWVfYnlYbGFiZWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKCkuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKHZpZDEpLk91dCgpLk91dCgpLlRyZWU8b2JqZWN0PigpLkJ5KFQuTGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5WKHZpZDEpLk91dCgpLk91dCgpLlRyZWUoKS5CeShncmVtbGluZ28uVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZSgpLmJ5KFQubGFiZWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X291dF90cmVlWGFYX2J5WGxhYmVsWF9ib3RoX2JvdGhfY2FwWGFYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYodmlkMSkub3V0KCkub3V0KCkudHJlZShcImFcIikuYnkoVC5sYWJlbCkuYm90aCgpLmJvdGgoKS5jYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKHN0cmluZzApLmJ5KFQubGFiZWwpLmJvdGgoKS5ib3RoKCkuY2FwKHN0cmluZzApIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXQoKS5PdXQoKS5UcmVlKFwiYVwiKS5CeShULkxhYmVsKS5Cb3RoKCkuQm90aCgpLkNhcDxvYmplY3Q+KFwiYVwiKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXQoKS5PdXQoKS5UcmVlKFwiYVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkuQm90aCgpLkJvdGgoKS5DYXAoXCJhXCIpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVih2aWQxKS5vdXQoKS5vdXQoKS50cmVlKFwiYVwiKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcChcImFcIikiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5WKHZpZDEpLm91dCgpLm91dCgpLnRyZWUoJ2EnKS5ieShULmxhYmVsKS5ib3RoKCkuYm90aCgpLmNhcCgnYScpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1ZYMVhfb3V0X291dF9vdXRfdHJlZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkub3V0KCkub3V0KCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuT3V0KCkuT3V0KCkuVHJlZTxvYmplY3Q+KCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5PdXQoKS5PdXQoKS5UcmVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkub3V0KCkub3V0KCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vdXQoKS50cmVlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLm91dCgpLm91dCgpLnRyZWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5vdXQoKS5vdXQoKS50cmVlKCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVlgxWF9vdXRFX2luVl9ib3RoRV9vdGhlclZfdHJlZSIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKS5ib3RoRSgpLm90aGVyVigpLnRyZWUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKCkuSW5WKCkuQm90aEUoKS5PdGhlclYoKS5UcmVlPG9iamVjdD4oKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVih2aWQxKS5PdXRFKCkuSW5WKCkuQm90aEUoKS5PdGhlclYoKS5UcmVlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKS5ib3RoRSgpLm90aGVyVigpLnRyZWUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKS5ib3RoRSgpLm90aGVyVigpLnRyZWUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKS5ib3RoRSgpLm90aGVyVigpLnRyZWUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoKS5pbl92KCkuYm90aF9lKCkub3RoZXJfdigpLnRyZWUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19WWDFYX291dEVfaW5WX2JvdGhFX290aGVyVl90cmVlX2J5WG5hbWVYX2J5WGxhYmVsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVih2aWQxKS5vdXRFKCkuaW5WKCkuYm90aEUoKS5vdGhlclYoKS50cmVlKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVih2aWQxKS5vdXRFKCkuaW5WKCkuYm90aEUoKS5vdGhlclYoKS50cmVlKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpLmJ5KHN0cmluZzApLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVih2aWQxKS5PdXRFKCkuSW5WKCkuQm90aEUoKS5PdGhlclYoKS5UcmVlPG9iamVjdD4oKS5CeShcIm5hbWVcIikuQnkoVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYodmlkMSkuT3V0RSgpLkluVigpLkJvdGhFKCkuT3RoZXJWKCkuVHJlZSgpLkJ5KFwibmFtZVwiKS5CeShncmVtbGluZ28uVC5MYWJlbCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKHZpZDEpLm91dEUoKS5pblYoKS5ib3RoRSgpLm90aGVyVigpLnRyZWUoKS5ieShcIm5hbWVcIikuYnkoVC5sYWJlbCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuVih2aWQxKS5vdXRFKCkuaW5WKCkuYm90aEUoKS5vdGhlclYoKS50cmVlKCkuYnkoXCJuYW1lXCIpLmJ5KFQubGFiZWwpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLlYodmlkMSkub3V0RSgpLmluVigpLmJvdGhFKCkub3RoZXJWKCkudHJlZSgpLmJ5KFwibmFtZVwiKS5ieShULmxhYmVsKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYodmlkMSkub3V0X2UoKS5pbl92KCkuYm90aF9lKCkub3RoZXJfdigpLnRyZWUoKS5ieSgnbmFtZScpLmJ5KFQubGFiZWwpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX1Zfb3V0X3RyZWVYYVhfc2VsZWN0WGFYX2NvdW50WGxvY2FsWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS50cmVlKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KGxvY2FsKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuVigpLm91dCgpLnRyZWUoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuVigpLm91dCgpLnRyZWUoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS50cmVlKHN0cmluZzApLnNlbGVjdChzdHJpbmcwKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5WKCkuT3V0KCkuVHJlZShcImFcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpLkNvdW50KFNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuVigpLk91dCgpLlRyZWUoXCJhXCIpLlNlbGVjdChcImFcIikuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLlYoKS5vdXQoKS50cmVlKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5WKCkub3V0KCkudHJlZShcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLnRyZWUoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuVigpLm91dCgpLnRyZWUoJ2EnKS5zZWxlY3QoJ2EnKS5jb3VudChTY29wZS5sb2NhbCkiCisgICAgICAgICAgICB9CisgICAgICAgIF0KKyAgICB9LAorICAgIHsKKyAgICAgICAgInNjZW5hcmlvIjogImdfVl9vdXRfb3JkZXJfYnlYbmFtZVhfbG9jYWxYdHJlZVhhWF9zZWxlY3RYYVhfY291bnRYbG9jYWxYWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLlYoKS5vdXQoKS5sb2NhbCh0cmVlKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KGxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLlYoKS5vdXQoKS5sb2NhbChfXy50cmVlKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5WKCkub3V0KCkubG9jYWwoX18udHJlZShcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLlYoKS5vdXQoKS5sb2NhbChfXy50cmVlKHN0cmluZzApLnNlbGVjdChzdHJpbmcwKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuVigpLk91dCgpLkxvY2FsPG9iamVjdD4oX18uVHJlZShcImFcIikuU2VsZWN0PG9iamVjdD4oXCJhXCIpLkNvdW50KFNjb3BlLkxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLlYoKS5PdXQoKS5Mb2NhbChncmVtbGluZ28uVF9fLlRyZWUoXCJhXCIpLlNlbGVjdChcImFcIikuQ291bnQoZ3JlbWxpbmdvLlNjb3BlLkxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5WKCkub3V0KCkubG9jYWwoX18udHJlZShcImFcIikuc2VsZWN0KFwiYVwiKS5jb3VudChTY29wZS5sb2NhbCkpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLlYoKS5vdXQoKS5sb2NhbChfXy50cmVlKFwiYVwiKS5zZWxlY3QoXCJhXCIpLmNvdW50KFNjb3BlLmxvY2FsKSkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuVigpLm91dCgpLmxvY2FsKF9fLnRyZWUoXCJhXCIpLnNlbGVjdChcImFcIikuY291bnQoU2NvcGUubG9jYWwpKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLlYoKS5vdXQoKS5sb2NhbChfXy50cmVlKCdhJykuc2VsZWN0KCdhJykuY291bnQoU2NvcGUubG9jYWwpKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb193cml0ZVhrcnlvWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJjYW5vbmljYWwiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5b1wiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmlvKHN0cmluZzApLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbzxvYmplY3Q+KFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLldyaXRlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLklvKFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLldyaXRlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5b1wiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW9cIikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmlvKCd0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW8nKS53cml0ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyeW9YIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW9cIikud2l0aChJTy53cml0ZXIsIElPLmdyeW8pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLndpdGgoSU8ud3JpdGVyLCBJTy5ncnlvKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW9cIikud2l0aChJTy53cml0ZXIsIElPLmdyeW8pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW8oc3RyaW5nMCkud2l0aChJTy53cml0ZXIsIElPLmdyeW8pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbzxvYmplY3Q+KFwidGlua2VycG9wLW1vZGVybi12My5rcnlvXCIpLldpdGgoSU8uV3JpdGVyLCBJTy5HcnlvKS5Xcml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMua3J5b1wiKS5XaXRoKGdyZW1saW5nby5JTy5Xcml0ZXIsIGdyZW1saW5nby5JTy5HcnlvKS5Xcml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW9cIikud2l0aChJTy53cml0ZXIsIElPLmdyeW8pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW9cIikud2l0aChJTy53cml0ZXIsIElPLmdyeW8pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhc2NyaXB0IjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW9cIikud2l0aF8oSU8ud3JpdGVyLCBJTy5ncnlvKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAicHl0aG9uIjogImcuaW8oJ3RpbmtlcnBvcC1tb2Rlcm4tdjMua3J5bycpLndpdGhfKElPLndyaXRlciwgSU8uZ3J5bykud3JpdGUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb193cml0ZVhncmFwaHNvblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAibGFuZ3VhZ2UiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb25cIikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbyhzdHJpbmcwKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZG90bmV0IjogImcuSW88b2JqZWN0PihcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS5Xcml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ28iOiAiZy5JbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS5Xcml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb25cIikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmEiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5qc29uXCIpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbygndGlua2VycG9wLW1vZGVybi12My5qc29uJykud3JpdGUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb193cml0ZV93aXRoWHdyaXRlcl9ncmFwaHNvblgiLAorICAgICAgICAidHJhdmVyc2FscyI6IFsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAib3JpZ2luYWwiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhzb24pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJsYW5ndWFnZSI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5qc29uXCIpLndpdGgoSU8ud3JpdGVyLCBJTy5ncmFwaHNvbikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5qc29uXCIpLndpdGgoSU8ud3JpdGVyLCBJTy5ncmFwaHNvbikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImFub255bWl6ZWQiOiAiZy5pbyhzdHJpbmcwKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhzb24pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbzxvYmplY3Q+KFwidGlua2VycG9wLW1vZGVybi12My5qc29uXCIpLldpdGgoSU8uV3JpdGVyLCBJTy5HcmFwaFNPTikuV3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb25cIikuV2l0aChncmVtbGluZ28uSU8uV3JpdGVyLCBncmVtbGluZ28uSU8uR3JhcGhzb24pLldyaXRlKCkiLAorICAgICAgICAgICAgICAgICJncm9vdnkiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvblwiKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhzb24pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb25cIikud2l0aChJTy53cml0ZXIsIElPLmdyYXBoc29uKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YXNjcmlwdCI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi12My5qc29uXCIpLndpdGhfKElPLndyaXRlciwgSU8uZ3JhcGhzb24pLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbygndGlua2VycG9wLW1vZGVybi12My5qc29uJykud2l0aF8oSU8ud3JpdGVyLCBJTy5ncmFwaHNvbikud3JpdGUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0sCisgICAgeworICAgICAgICAic2NlbmFyaW8iOiAiZ19pb193cml0ZVhncmFwaG1sWCIsCisgICAgICAgICJ0cmF2ZXJzYWxzIjogWworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJvcmlnaW5hbCI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi54bWxcIikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiY2Fub25pY2FsIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiYW5vbnltaXplZCI6ICJnLmlvKHN0cmluZzApLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbzxvYmplY3Q+KFwidGlua2VycG9wLW1vZGVybi54bWxcIikuV3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImdvIjogImcuSW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS5Xcml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiZ3Jvb3Z5IjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53cml0ZSgpIiwKKyAgICAgICAgICAgICAgICAiamF2YSI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi54bWxcIikud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJweXRob24iOiAiZy5pbygndGlua2VycG9wLW1vZGVybi54bWwnKS53cml0ZSgpIgorICAgICAgICAgICAgfQorICAgICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAgICJzY2VuYXJpbyI6ICJnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBobWxYIiwKKyAgICAgICAgInRyYXZlcnNhbHMiOiBbCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIm9yaWdpbmFsIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhtbCkud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImxhbmd1YWdlIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhtbCkud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImNhbm9uaWNhbCI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi54bWxcIikud2l0aChJTy53cml0ZXIsIElPLmdyYXBobWwpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJhbm9ueW1pemVkIjogImcuaW8oc3RyaW5nMCkud2l0aChJTy53cml0ZXIsIElPLmdyYXBobWwpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJkb3RuZXQiOiAiZy5JbzxvYmplY3Q+KFwidGlua2VycG9wLW1vZGVybi54bWxcIikuV2l0aChJTy5Xcml0ZXIsIElPLkdyYXBoTUwpLldyaXRlKCkiLAorICAgICAgICAgICAgICAgICJnbyI6ICJnLklvKFwidGlua2VycG9wLW1vZGVybi54bWxcIikuV2l0aChncmVtbGluZ28uSU8uV3JpdGVyLCBncmVtbGluZ28uSU8uR3JhcGhtbCkuV3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImdyb292eSI6ICJnLmlvKFwidGlua2VycG9wLW1vZGVybi54bWxcIikud2l0aChJTy53cml0ZXIsIElPLmdyYXBobWwpLndyaXRlKCkiLAorICAgICAgICAgICAgICAgICJqYXZhIjogImcuaW8oXCJ0aW5rZXJwb3AtbW9kZXJuLnhtbFwiKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhtbCkud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgImphdmFzY3JpcHQiOiAiZy5pbyhcInRpbmtlcnBvcC1tb2Rlcm4ueG1sXCIpLndpdGhfKElPLndyaXRlciwgSU8uZ3JhcGhtbCkud3JpdGUoKSIsCisgICAgICAgICAgICAgICAgInB5dGhvbiI6ICJnLmlvKCd0aW5rZXJwb3AtbW9kZXJuLnhtbCcpLndpdGhfKElPLndyaXRlciwgSU8uZ3JhcGhtbCkud3JpdGUoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgXQorICAgIH0KK10KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Byb3BlcnR5LXYxLmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VkZ2UtcHJvcGVydHktdjQuZ2JpbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wcm9wZXJ0eS12MS5nYmluCnJlbmFtZSB0byBncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VkZ2UtcHJvcGVydHktdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LWJpbmFyeS12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9lbXB0eS1iaW5hcnktdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjQ0ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9lbXB0eS1iaW5hcnktdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LWJ1bGtsaXN0LXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LWJ1bGtsaXN0LXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYyMzhmYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZW1wdHktYnVsa2xpc3QtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LWxpc3QtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZW1wdHktbGlzdC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MWZkZjMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LWxpc3QtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LW1hcC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9lbXB0eS1tYXAtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzFkNTlmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9lbXB0eS1tYXAtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LXBhdGgtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZW1wdHktcGF0aC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOWI1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LXBhdGgtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VtcHR5LXNldC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9lbXB0eS1zZXQtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI2ZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9lbXB0eS1zZXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2ZhbHNlLWJvb2xlYW4tdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZmFsc2UtYm9vbGVhbi12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMzM0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2ZhbHNlLWJvb2xlYW4tdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2ZvcmV2ZXItZHVyYXRpb24tdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZm9yZXZlci1kdXJhdGlvbi12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMWJhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2ZvcmV2ZXItZHVyYXRpb24tdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2lkLXQtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvaWQtdC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTIzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2lkLXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1ieXRlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1ieXRlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgxN2YxMwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWF4LWJ5dGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1kb3VibGUtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWF4LWRvdWJsZS12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NjhmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1mbG9hdC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tYXgtZmxvYXQtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmMzMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tYXgtZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1pbnQtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWF4LWludC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzdkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1pbnQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1sb25nLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1sb25nLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMwMjQwYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWF4LWxvbmctdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1vZmZzZXRkYXRldGltZS12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tYXgtb2Zmc2V0ZGF0ZXRpbWUtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTlkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tYXgtb2Zmc2V0ZGF0ZXRpbWUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21heC1zaG9ydC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tYXgtc2hvcnQtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Q3YzMzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tYXgtc2hvcnQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21ldGEtdmVydGV4cHJvcGVydHktdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWV0YS12ZXJ0ZXhwcm9wZXJ0eS12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTgxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21ldGEtdmVydGV4cHJvcGVydHktdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1ieXRlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1ieXRlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUxZDlhZAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWluLWJ5dGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1kb3VibGUtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWluLWRvdWJsZS12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODc5NmYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1mbG9hdC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taW4tZmxvYXQtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjM3YzUwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taW4tZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1pbnQtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWluLWludC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWUyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1pbnQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1sb25nLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1sb25nLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjMWZmYQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWluLWxvbmctdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1vZmZzZXRkYXRldGltZS12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taW4tb2Zmc2V0ZGF0ZXRpbWUtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWNhNWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taW4tb2Zmc2V0ZGF0ZXRpbWUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21pbi1zaG9ydC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taW4tc2hvcnQtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGJhNThmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taW4tc2hvcnQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21peGVkLXN0cmluZy12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taXhlZC1zdHJpbmctdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWUyMWQzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9taXhlZC1zdHJpbmctdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L211bHRpLWJ5dGUtY2hhci12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tdWx0aS1ieXRlLWNoYXItdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1NzBhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tdWx0aS1ieXRlLWNoYXItdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25hbi1kb3VibGUtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmFuLWRvdWJsZS12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMDMxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25hbi1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25hbi1mbG9hdC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9uYW4tZmxvYXQtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJkMDEzCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9uYW4tZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1iaWdkZWNpbWFsLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1iaWdkZWNpbWFsLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZkYTUwMAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLWJpZ2RlY2ltYWwtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1iaWdpbnRlZ2VyLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1iaWdpbnRlZ2VyLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0NzkyYgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLWJpZ2ludGVnZXItdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1pbmYtZG91YmxlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1pbmYtZG91YmxlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwYTU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLWluZi1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1pbmYtZmxvYXQtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLWluZi1mbG9hdC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NGI3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1pbmYtZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1tYXgtZG91YmxlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1tYXgtZG91YmxlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NThiZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLW1heC1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1tYXgtZmxvYXQtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLW1heC1mbG9hdC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YmY1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1tYXgtZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1taW4tZG91YmxlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1taW4tZG91YmxlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2YjVjZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLW1pbi1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1taW4tZmxvYXQtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLW1pbi1mbG9hdC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MzgwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy1taW4tZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy16ZXJvLWRvdWJsZS12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9uZWctemVyby1kb3VibGUtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZhMDIyCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9uZWctemVyby1kb3VibGUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy16ZXJvLWZsb2F0LXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25lZy16ZXJvLWZsb2F0LXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZkMDBlYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmVnLXplcm8tZmxvYXQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25pbC11dWlkLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25pbC11dWlkLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4ZTA1NwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbmlsLXV1aWQtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25vLXByb3AtZWRnZS12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9uby1wcm9wLWVkZ2UtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ViZGRhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9uby1wcm9wLWVkZ2UtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25vLXByb3AtdmVydGV4LXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L25vLXByb3AtdmVydGV4LXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMTg3MQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbm8tcHJvcC12ZXJ0ZXgtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L251bGwtcHJvcGVydHktdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbnVsbC1wcm9wZXJ0eS12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjgxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L251bGwtcHJvcGVydHktdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2RpcmVjdGlvbi12MS5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9vdXQtZGlyZWN0aW9uLXY0LmdiaW4Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZGlyZWN0aW9uLXYxLmdiaW4KcmVuYW1lIHRvIGdyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb3V0LWRpcmVjdGlvbi12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9zLWJpZ2RlY2ltYWwtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9zLWJpZ2RlY2ltYWwtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODU1YzY2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wb3MtYmlnZGVjaW1hbC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYmlnaW50ZWdlci12MS5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wb3MtYmlnaW50ZWdlci12NC5nYmluCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2JpZ2ludGVnZXItdjEuZ2JpbgpyZW5hbWUgdG8gZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wb3MtYmlnaW50ZWdlci12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9zLWluZi1kb3VibGUtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9zLWluZi1kb3VibGUtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2NiMTcxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wb3MtaW5mLWRvdWJsZS12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9zLWluZi1mbG9hdC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wb3MtaW5mLWZsb2F0LXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3ZTEzNgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9zLWluZi1mbG9hdC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcHJvcC1wYXRoLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Byb3AtcGF0aC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTNlMTIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Byb3AtcGF0aC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2V0LWNhcmRpbmFsaXR5LXZlcnRleHByb3BlcnR5LXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3NldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eS12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZWU4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3NldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eS12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2luZ2xlLWJ5dGUtY2hhci12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zaW5nbGUtYnl0ZS1jaGFyLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzOTE2NwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2luZ2xlLWJ5dGUtY2hhci12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2luZ2xlLWJ5dGUtc3RyaW5nLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3NpbmdsZS1ieXRlLXN0cmluZy12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZTg3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3NpbmdsZS1ieXRlLXN0cmluZy12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdXVpZC12MS5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zcGVjaWZpZWQtdXVpZC12NC5nYmluCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3V1aWQtdjEuZ2JpbgpyZW5hbWUgdG8gZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zcGVjaWZpZWQtdXVpZC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYnl0ZWJ1ZmZlci12MS5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zdHItYmluYXJ5LXY0LmdiaW4Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYnl0ZWJ1ZmZlci12MS5nYmluCnJlbmFtZSB0byBncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3N0ci1iaW5hcnktdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Rpbmtlci1ncmFwaC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90aW5rZXItZ3JhcGgtdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWY1M2NiCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90aW5rZXItZ3JhcGgtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC1lZGdlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC1lZGdlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViNjU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdHJhdmVyc2FsLWVkZ2UtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC1wYXRoLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC1wYXRoLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhMjRlOQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdHJhdmVyc2FsLXBhdGgtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC10cmVlLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC10cmVlLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExMTJkZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdHJhdmVyc2FsLXRyZWUtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC12ZXJ0ZXgtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdHJhdmVyc2FsLXZlcnRleC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTkyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC12ZXJ0ZXgtdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbC12ZXJ0ZXhwcm9wZXJ0eS12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90cmF2ZXJzYWwtdmVydGV4cHJvcGVydHktdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTIwZDhjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90cmF2ZXJzYWwtdmVydGV4cHJvcGVydHktdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RydWUtYm9vbGVhbi12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90cnVlLWJvb2xlYW4tdjQuZ2JpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDU3NWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90cnVlLWJvb2xlYW4tdjQuZ2JpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Vuc3BlY2lmaWVkLW51bGwtdjQuZ2JpbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdW5zcGVjaWZpZWQtbnVsbC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZWRhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Vuc3BlY2lmaWVkLW51bGwtdjQuZ2JpbgpAQCAtMCwwICsxIEBACiv+AQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdmFyLWJ1bGtsaXN0LXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Zhci1idWxrbGlzdC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMWRkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Zhci1idWxrbGlzdC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdmFyLXR5cGUtbGlzdC12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS92YXItdHlwZS1saXN0LXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczNzY2ZQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdmFyLXR5cGUtbGlzdC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdmFyLXR5cGUtbWFwLXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Zhci10eXBlLW1hcC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MzNlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Zhci10eXBlLW1hcC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdmFyLXR5cGUtc2V0LXY0LmdiaW4gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Zhci10eXBlLXNldC12NC5nYmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZTc4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Zhci10eXBlLXNldC12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvemVyby1kdXJhdGlvbi12NC5nYmluIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS96ZXJvLWR1cmF0aW9uLXY0LmdiaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxMDNkNwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvemVyby1kdXJhdGlvbi12NC5nYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhtbC9ncmFwaG1sLTEuMS54c2QgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBobWwvZ3JhcGhtbC0xLjEueHNkCmluZGV4IDk4YjBmM2MuLjc2YzJhMGIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhtbC9ncmFwaG1sLTEuMS54c2QKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaG1sL2dyYXBobWwtMS4xLnhzZApAQCAtMSwxOCArMSwyMCBAQAogPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi1jb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLXRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLVRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0odGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIAogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKIAotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCitLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiAKIDx4czpzY2hlbWEKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZWRnZS1wcm9wZXJ0eS12NC1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXByb3BlcnR5LXY0LW5vLXR5cGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1MWMwYQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZWRnZS1wcm9wZXJ0eS12NC1uby10eXBlcy5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAia2V5IiA6ICJzaW5jZSIsCisgICJ2YWx1ZSIgOiAyMDA5Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wZXJ0eS12Mi5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXByb3BlcnR5LXY0Lmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcHJvcGVydHktdjIuanNvbgpyZW5hbWUgdG8gZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXByb3BlcnR5LXY0Lmpzb24KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZW1wdHktYmluYXJ5LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VtcHR5LWJpbmFyeS12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDVmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VtcHR5LWJpbmFyeS12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6QmluYXJ5IiwKKyAgIkB2YWx1ZSIgOiAiIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZW1wdHktYnVsa2xpc3QtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZW1wdHktYnVsa2xpc3QtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNiZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1idWxrbGlzdC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6TGlzdCIsCisgICJAdmFsdWUiIDogWyBdCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1saXN0LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VtcHR5LWxpc3QtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWNiZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1saXN0LXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpMaXN0IiwKKyAgIkB2YWx1ZSIgOiBbIF0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VtcHR5LW1hcC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1tYXAtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODU2YWRjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1tYXAtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOk1hcCIsCisgICJAdmFsdWUiIDogWyBdCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1wYXRoLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VtcHR5LXBhdGgtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IxM2YyCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1wYXRoLXY0Lmpzb24KQEAgLTAsMCArMSwxMyBAQAoreworICAiQHR5cGUiIDogImc6UGF0aCIsCisgICJAdmFsdWUiIDogeworICAgICJsYWJlbHMiIDogeworICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAorICAgICAgIkB2YWx1ZSIgOiBbIF0KKyAgICB9LAorICAgICJvYmplY3RzIiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKKyAgICAgICJAdmFsdWUiIDogWyBdCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lbXB0eS1zZXQtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZW1wdHktc2V0LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3ODlhNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZW1wdHktc2V0LXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpTZXQiLAorICAiQHZhbHVlIiA6IFsgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZmFsc2UtYm9vbGVhbi12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9mYWxzZS1ib29sZWFuLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlNGE4NAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZmFsc2UtYm9vbGVhbi12NC5qc29uCkBAIC0wLDAgKzEgQEAKK2ZhbHNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9mb3JldmVyLWR1cmF0aW9uLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2ZvcmV2ZXItZHVyYXRpb24tdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJiY2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9mb3JldmVyLWR1cmF0aW9uLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpEdXJhdGlvbiIsCisgICJAdmFsdWUiIDogIlBUMjU2MjA0Nzc4ODAxNTIxNUgzME03Ljk5OTk5OTk5OVMiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pZC10LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2lkLXQtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJlMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pZC10LXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpUIiwKKyAgIkB2YWx1ZSIgOiAiaWQiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tYXgtYnl0ZS12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tYXgtYnl0ZS12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ODMyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1ieXRlLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpCeXRlIiwKKyAgIkB2YWx1ZSIgOiAxMjcKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1kb3VibGUtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LWRvdWJsZS12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTYwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1kb3VibGUtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCisgICJAdmFsdWUiIDogMS43OTc2OTMxMzQ4NjIzMTU3RTMwOAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LWZsb2F0LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1mbG9hdC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDhmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1mbG9hdC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RmxvYXQiLAorICAiQHZhbHVlIiA6IDMuNDAyODIzNUUzOAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LWludC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tYXgtaW50LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiYzYyYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LWludC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6SW50MzIiLAorICAiQHZhbHVlIiA6IDIxNDc0ODM2NDcKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1sb25nLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1sb25nLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjMTJkYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LWxvbmctdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgIkB2YWx1ZSIgOiA5MjIzMzcyMDM2ODU0Nzc1ODA3Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tYXgtb2Zmc2V0ZGF0ZXRpbWUtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LW9mZnNldGRhdGV0aW1lLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyZWE2MwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LW9mZnNldGRhdGV0aW1lLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpEYXRlVGltZSIsCisgICJAdmFsdWUiIDogIis5OTk5OTk5OTktMTItMzFUMjM6NTk6NTkuOTk5OTk5OTk5LTE4OjAwIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWF4LXNob3J0LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1zaG9ydC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MWYwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21heC1zaG9ydC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6SW50MTYiLAorICAiQHZhbHVlIiA6IDMyNzY3Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tZXRhLXZlcnRleHByb3BlcnR5LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21ldGEtdmVydGV4cHJvcGVydHktdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2RhOTFjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tZXRhLXZlcnRleHByb3BlcnR5LXY0Lmpzb24KQEAgLTAsMCArMSwxNCBAQAoreworICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAiQHZhbHVlIiA6IHsKKyAgICAiaWQiIDogeworICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICJAdmFsdWUiIDogMQorICAgIH0sCisgICAgInZhbHVlIiA6ICJzdGVwaGVuIiwKKyAgICAibGFiZWwiIDogWyAicGVyc29uIiBdLAorICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICJhIiA6ICJiIgorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWJ5dGUtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWJ5dGUtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjE5MmYxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9taW4tYnl0ZS12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6Qnl0ZSIsCisgICJAdmFsdWUiIDogLTEyOAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWRvdWJsZS12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9taW4tZG91YmxlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5ZmUzOAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWRvdWJsZS12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RG91YmxlIiwKKyAgIkB2YWx1ZSIgOiA0LjlFLTMyNAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWZsb2F0LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21pbi1mbG9hdC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTdlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21pbi1mbG9hdC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RmxvYXQiLAorICAiQHZhbHVlIiA6IDEuNEUtNDUKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21pbi1pbnQtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWludC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDNkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21pbi1pbnQtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgIkB2YWx1ZSIgOiAtMjE0NzQ4MzY0OAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWxvbmctdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLWxvbmctdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjQxYjljCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9taW4tbG9uZy12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6SW50NjQiLAorICAiQHZhbHVlIiA6IC05MjIzMzcyMDM2ODU0Nzc1ODA4Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9taW4tb2Zmc2V0ZGF0ZXRpbWUtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLW9mZnNldGRhdGV0aW1lLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3MzE0MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLW9mZnNldGRhdGV0aW1lLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpEYXRlVGltZSIsCisgICJAdmFsdWUiIDogIi05OTk5OTk5OTktMDEtMDFUMDA6MDArMTg6MDAiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9taW4tc2hvcnQtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLXNob3J0LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2ZDQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWluLXNob3J0LXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpJbnQxNiIsCisgICJAdmFsdWUiIDogLTMyNzY4Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9taXhlZC1zdHJpbmctdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWl4ZWQtc3RyaW5nLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0Y2E2NAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWl4ZWQtc3RyaW5nLXY0Lmpzb24KQEAgLTAsMCArMSBAQAorImFiY86RzpLOkyIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL211bHRpLWJ5dGUtY2hhci12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tdWx0aS1ieXRlLWNoYXItdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmFjZWZmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tdWx0aS1ieXRlLWNoYXItdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkNoYXIiLAorICAiQHZhbHVlIiA6ICLOqSIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25hbi1kb3VibGUtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmFuLWRvdWJsZS12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTAzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25hbi1kb3VibGUtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCisgICJAdmFsdWUiIDogIk5hTiIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25hbi1mbG9hdC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uYW4tZmxvYXQtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODMxMTIxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uYW4tZmxvYXQtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkZsb2F0IiwKKyAgIkB2YWx1ZSIgOiAiTmFOIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLWJpZ2RlY2ltYWwtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLWJpZ2RlY2ltYWwtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ4ZjRmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctYmlnZGVjaW1hbC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6QmlnRGVjaW1hbCIsCisgICJAdmFsdWUiIDogLTEyMy40NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1iaWdpbnRlZ2VyLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1iaWdpbnRlZ2VyLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdiODEyZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLWJpZ2ludGVnZXItdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkJpZ0ludGVnZXIiLAorICAiQHZhbHVlIiA6IC0xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1pbmYtZG91YmxlLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1pbmYtZG91YmxlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM4ZGIwZgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLWluZi1kb3VibGUtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCisgICJAdmFsdWUiIDogIi1JbmZpbml0eSIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1pbmYtZmxvYXQtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLWluZi1mbG9hdC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWVmMTEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1pbmYtZmxvYXQtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkZsb2F0IiwKKyAgIkB2YWx1ZSIgOiAiLUluZmluaXR5IgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLW1heC1kb3VibGUtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLW1heC1kb3VibGUtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmVlNjJiCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctbWF4LWRvdWJsZS12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RG91YmxlIiwKKyAgIkB2YWx1ZSIgOiAtMS43OTc2OTMxMzQ4NjIzMTU3RTMwOAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLW1heC1mbG9hdC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctbWF4LWZsb2F0LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmYjgzYgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLW1heC1mbG9hdC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RmxvYXQiLAorICAiQHZhbHVlIiA6IC0zLjQwMjgyMzVFMzgKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1taW4tZG91YmxlLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1taW4tZG91YmxlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxYzBjNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLW1pbi1kb3VibGUtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCisgICJAdmFsdWUiIDogLTQuOUUtMzI0Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctbWluLWZsb2F0LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy1taW4tZmxvYXQtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTkyNTQwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctbWluLWZsb2F0LXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpGbG9hdCIsCisgICJAdmFsdWUiIDogLTEuNEUtNDUKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25lZy16ZXJvLWRvdWJsZS12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctemVyby1kb3VibGUtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmRmNmZjCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctemVyby1kb3VibGUtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCisgICJAdmFsdWUiIDogLTAuMAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLXplcm8tZmxvYXQtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmVnLXplcm8tZmxvYXQtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY3M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uZWctemVyby1mbG9hdC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RmxvYXQiLAorICAiQHZhbHVlIiA6IC0wLjAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25pbC11dWlkLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL25pbC11dWlkLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxNmVjMgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbmlsLXV1aWQtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOlVVSUQiLAorICAiQHZhbHVlIiA6ICIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uby1wcm9wLWVkZ2UtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbm8tcHJvcC1lZGdlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmMTZiMwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbm8tcHJvcC1lZGdlLXY0Lmpzb24KQEAgLTAsMCArMSwyNCBAQAoreworICAiQHR5cGUiIDogImc6RWRnZSIsCisgICJAdmFsdWUiIDogeworICAgICJpZCIgOiB7CisgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgIkB2YWx1ZSIgOiAxMworICAgIH0sCisgICAgImxhYmVsIiA6IFsgImRldmVsb3BzIiBdLAorICAgICJpblYiIDogeworICAgICAgImlkIiA6IHsKKyAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgIkB2YWx1ZSIgOiAxMAorICAgICAgfSwKKyAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgIH0sCisgICAgIm91dFYiIDogeworICAgICAgImlkIiA6IHsKKyAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgIkB2YWx1ZSIgOiAxCisgICAgICB9LAorICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbm8tcHJvcC12ZXJ0ZXgtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbm8tcHJvcC12ZXJ0ZXgtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjZmMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9uby1wcm9wLXZlcnRleC12NC5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCisgICJAdmFsdWUiIDogeworICAgICJpZCIgOiB7CisgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgIkB2YWx1ZSIgOiAxCisgICAgfSwKKyAgICAibGFiZWwiIDogWyAicGVyc29uIiBdCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL251bGwtcHJvcGVydHktdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbnVsbC1wcm9wZXJ0eS12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjJkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL251bGwtcHJvcGVydHktdjQuanNvbgpAQCAtMCwwICsxLDcgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKKyAgIkB2YWx1ZSIgOiB7CisgICAgImtleSIgOiAiIiwKKyAgICAidmFsdWUiIDogbnVsbAorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9kaXJlY3Rpb24tdjIuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3V0LWRpcmVjdGlvbi12NC5qc29uCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RpcmVjdGlvbi12Mi5qc29uCnJlbmFtZSB0byBncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL291dC1kaXJlY3Rpb24tdjQuanNvbgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3MtYmlnZGVjaW1hbC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3MtYmlnZGVjaW1hbC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NWMzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Bvcy1iaWdkZWNpbWFsLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpCaWdEZWNpbWFsIiwKKyAgIkB2YWx1ZSIgOiAxMjMuNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3MtYmlnaW50ZWdlci12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3MtYmlnaW50ZWdlci12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODNmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Bvcy1iaWdpbnRlZ2VyLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpCaWdJbnRlZ2VyIiwKKyAgIkB2YWx1ZSIgOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Bvcy1pbmYtZG91YmxlLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Bvcy1pbmYtZG91YmxlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwMjUxMQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9zLWluZi1kb3VibGUtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCisgICJAdmFsdWUiIDogIkluZmluaXR5IgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9zLWluZi1mbG9hdC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3MtaW5mLWZsb2F0LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MjNkOQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9zLWluZi1mbG9hdC12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6RmxvYXQiLAorICAiQHZhbHVlIiA6ICJJbmZpbml0eSIKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Byb3AtcGF0aC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wLXBhdGgtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWM0MjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wLXBhdGgtdjQuanNvbgpAQCAtMCwwICsxLDE2NSBAQAoreworICAiQHR5cGUiIDogImc6UGF0aCIsCisgICJAdmFsdWUiIDogeworICAgICJsYWJlbHMiIDogeworICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAorICAgICAgIkB2YWx1ZSIgOiBbIHsKKyAgICAgICAgIkB0eXBlIiA6ICJnOlNldCIsCisgICAgICAgICJAdmFsdWUiIDogWyBdCisgICAgICB9LCB7CisgICAgICAgICJAdHlwZSIgOiAiZzpTZXQiLAorICAgICAgICAiQHZhbHVlIiA6IFsgXQorICAgICAgfSwgeworICAgICAgICAiQHR5cGUiIDogImc6U2V0IiwKKyAgICAgICAgIkB2YWx1ZSIgOiBbIF0KKyAgICAgIH0gXQorICAgIH0sCisgICAgIm9iamVjdHMiIDogeworICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAorICAgICAgIkB2YWx1ZSIgOiBbIHsKKyAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCisgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdLAorICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJtYXJrbyIsCisgICAgICAgICAgICAgICAgImxhYmVsIiA6IFsgIm5hbWUiIF0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBdLAorICAgICAgICAgICAgImxvY2F0aW9uIiA6IFsgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAorICAgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJsb2NhdGlvbiIgXSwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTk3CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgImVuZFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgY3J1eiIsCisgICAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCisgICAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCisgICAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwgeworICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKKyAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDEwCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgIm5hbWUiIDogWyB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAidmFsdWUiIDogImdyZW1saW4iLAorICAgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJuYW1lIiBdCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwgeworICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKKyAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDExCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgIm5hbWUiIDogWyB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA1CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAidmFsdWUiIDogInRpbmtlcmdyYXBoIiwKKyAgICAgICAgICAgICAgICAibGFiZWwiIDogWyAibmFtZSIgXQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IF0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0gXQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2V0LWNhcmRpbmFsaXR5LXZlcnRleHByb3BlcnR5LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eS12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjM1OGIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NldC1jYXJkaW5hbGl0eS12ZXJ0ZXhwcm9wZXJ0eS12NC5qc29uCkBAIC0wLDAgKzEsMTcgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgIkB2YWx1ZSIgOiB7CisgICAgImlkIiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAiQHZhbHVlIiA6IDEKKyAgICB9LAorICAgICJ2YWx1ZSIgOiB7CisgICAgICAiQHR5cGUiIDogImc6U2V0IiwKKyAgICAgICJAdmFsdWUiIDogWyAic3RlcGhlbiIsICJtYXJrbyIgXQorICAgIH0sCisgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXSwKKyAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAiYSIgOiAiYiIKKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NpbmdsZS1ieXRlLWNoYXItdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2luZ2xlLWJ5dGUtY2hhci12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNjZiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NpbmdsZS1ieXRlLWNoYXItdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkNoYXIiLAorICAiQHZhbHVlIiA6ICJhIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2luZ2xlLWJ5dGUtc3RyaW5nLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NpbmdsZS1ieXRlLXN0cmluZy12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNDRhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NpbmdsZS1ieXRlLXN0cmluZy12NC5qc29uCkBAIC0wLDAgKzEgQEAKKyJhYmMiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi91dWlkLXYyLmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NwZWNpZmllZC11dWlkLXY0Lmpzb24Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdXVpZC12Mi5qc29uCnJlbmFtZSB0byBncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NwZWNpZmllZC11dWlkLXY0Lmpzb24KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc3RyLWJpbmFyeS12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdHItYmluYXJ5LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBmYzI2YQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc3RyLWJpbmFyeS12NC5qc29uCkBAIC0wLDAgKzEsNCBAQAoreworICAiQHR5cGUiIDogImc6QmluYXJ5IiwKKyAgIkB2YWx1ZSIgOiAiYzI5dFpTQmllWFJsY3lCbWIzSWdlVzkxIgorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdGlua2VyLWdyYXBoLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Rpbmtlci1ncmFwaC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTEyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Rpbmtlci1ncmFwaC12NC5qc29uCkBAIC0wLDAgKzEsODg1IEBACit7CisgICJAdHlwZSIgOiAiZzpncmFwaCIsCisgICJAdmFsdWUiIDogeworICAgICJ2ZXJ0aWNlcyIgOiBbIHsKKyAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDEKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAwCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWFya28iLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibmFtZSIgXQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gXSwKKyAgICAgICAgICAibG9jYXRpb24iIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LCB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA4CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYnJ1c3NlbHMiLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LCB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJsb2NhdGlvbiIgXSwKKyAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gXQorICAgICAgICB9CisgICAgICB9CisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCisgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiIDogNworICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdLAorICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgIm5hbWUiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJzdGVwaGVuIiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgIm5hbWUiIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0sCisgICAgICAgICAgImxvY2F0aW9uIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAidmFsdWUiIDogImNlbnRyZXZpbGxlIiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTkwCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAidmFsdWUiIDogImR1bGxlcyIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJsb2NhdGlvbiIgXSwKKyAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImVuZFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTIKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJwdXJjZWxsdmlsbGUiLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDgKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWF0dGhpYXMiLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibmFtZSIgXQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gXSwKKyAgICAgICAgICAibG9jYXRpb24iIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEzCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYnJlbWVuIiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA3CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNAorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAidmFsdWUiIDogImJhbHRpbW9yZSIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJsb2NhdGlvbiIgXSwKKyAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImVuZFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTUKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJvYWtsYW5kIiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDExCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDE0CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNgorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAidmFsdWUiIDogInNlYXR0bGUiLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDkKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZGFuaWVsIiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgIm5hbWUiIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0sCisgICAgICAgICAgImxvY2F0aW9uIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAidmFsdWUiIDogInNwcmVtYmVyZyIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJsb2NhdGlvbiIgXSwKKyAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk4MgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImVuZFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTgKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJrYWlzZXJzbGF1dGVybiIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJsb2NhdGlvbiIgXSwKKyAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgImVuZFRpbWUiIDogeworICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTkKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgInZhbHVlIiA6ICJhYWNoZW4iLAorICAgICAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDEwCisgICAgICAgIH0sCisgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZ3JlbWxpbiIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJuYW1lIiBdCisgICAgICAgICAgICB9CisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAxMQorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0sCisgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAibmFtZSIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNQorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAidmFsdWUiIDogInRpbmtlcmdyYXBoIiwKKyAgICAgICAgICAgICAgImxhYmVsIiA6IFsgIm5hbWUiIF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0gXSwKKyAgICAiZWRnZXMiIDogWyB7CisgICAgICAiQHR5cGUiIDogImc6RWRnZSIsCisgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiIDogMTMKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgImRldmVsb3BzIiBdLAorICAgICAgICAiaW5WIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9LAorICAgICAgICAib3V0ViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDEKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0KKyAgICAgICAgfSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJzaW5jZSIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImtleSIgOiAic2luY2UiLAorICAgICAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA5CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAxNAorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAiZGV2ZWxvcHMiIF0sCisgICAgICAgICJpblYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdCisgICAgICAgIH0sCisgICAgICAgICJvdXRWIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXQorICAgICAgICB9LAorICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgInNpbmNlIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTAKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gXQorICAgICAgICB9CisgICAgICB9CisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDE1CisgICAgICAgIH0sCisgICAgICAgICJsYWJlbCIgOiBbICJ1c2VzIiBdLAorICAgICAgICAiaW5WIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9LAorICAgICAgICAib3V0ViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDEKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0KKyAgICAgICAgfSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJza2lsbCIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAorICAgICAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAxNgorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAidXNlcyIgXSwKKyAgICAgICAgImluViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDExCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0KKyAgICAgICAgfSwKKyAgICAgICAgIm91dFYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdCisgICAgICAgIH0sCisgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAic2tpbGwiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKKyAgICAgICAgICAgICAgInZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImc6RWRnZSIsCisgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiIDogMTcKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgImRldmVsb3BzIiBdLAorICAgICAgICAiaW5WIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9LAorICAgICAgICAib3V0ViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDcKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0KKyAgICAgICAgfSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJzaW5jZSIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImtleSIgOiAic2luY2UiLAorICAgICAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDEwCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAxOAorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAiZGV2ZWxvcHMiIF0sCisgICAgICAgICJpblYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdCisgICAgICAgIH0sCisgICAgICAgICJvdXRWIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogNworICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXQorICAgICAgICB9LAorICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgInNpbmNlIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTEKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gXQorICAgICAgICB9CisgICAgICB9CisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDE5CisgICAgICAgIH0sCisgICAgICAgICJsYWJlbCIgOiBbICJ1c2VzIiBdLAorICAgICAgICAiaW5WIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9LAorICAgICAgICAib3V0ViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDcKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0KKyAgICAgICAgfSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJza2lsbCIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAorICAgICAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA1CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAyMAorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAidXNlcyIgXSwKKyAgICAgICAgImluViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDExCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0KKyAgICAgICAgfSwKKyAgICAgICAgIm91dFYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiA3CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdCisgICAgICAgIH0sCisgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAic2tpbGwiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKKyAgICAgICAgICAgICAgInZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNAorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImc6RWRnZSIsCisgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiIDogMjEKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgImRldmVsb3BzIiBdLAorICAgICAgICAiaW5WIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9LAorICAgICAgICAib3V0ViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDgKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0KKyAgICAgICAgfSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJzaW5jZSIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImtleSIgOiAic2luY2UiLAorICAgICAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDEyCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAyMgorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAidXNlcyIgXSwKKyAgICAgICAgImluViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDEwCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0KKyAgICAgICAgfSwKKyAgICAgICAgIm91dFYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiA4CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdCisgICAgICAgIH0sCisgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAic2tpbGwiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKKyAgICAgICAgICAgICAgInZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImc6RWRnZSIsCisgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiIDogMjMKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgInVzZXMiIF0sCisgICAgICAgICJpblYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdCisgICAgICAgIH0sCisgICAgICAgICJvdXRWIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogOAorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXQorICAgICAgICB9LAorICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgInNraWxsIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDMKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0gXQorICAgICAgICB9CisgICAgICB9CisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDI0CisgICAgICAgIH0sCisgICAgICAgICJsYWJlbCIgOiBbICJ1c2VzIiBdLAorICAgICAgICAiaW5WIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9LAorICAgICAgICAib3V0ViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDkKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0KKyAgICAgICAgfSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJza2lsbCIgOiBbIHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAorICAgICAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA1CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IF0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgICAgICJAdmFsdWUiIDogeworICAgICAgICAiaWQiIDogeworICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgIkB2YWx1ZSIgOiAyNQorICAgICAgICB9LAorICAgICAgICAibGFiZWwiIDogWyAidXNlcyIgXSwKKyAgICAgICAgImluViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDExCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0KKyAgICAgICAgfSwKKyAgICAgICAgIm91dFYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiA5CisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdCisgICAgICAgIH0sCisgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAic2tpbGwiIDogWyB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKKyAgICAgICAgICAgICAgInZhbHVlIiA6IHsKKyAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LCB7CisgICAgICAiQHR5cGUiIDogImc6RWRnZSIsCisgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICJAdmFsdWUiIDogMjYKKyAgICAgICAgfSwKKyAgICAgICAgImxhYmVsIiA6IFsgInRyYXZlcnNlcyIgXSwKKyAgICAgICAgImluViIgOiB7CisgICAgICAgICAgImlkIiA6IHsKKyAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAiQHZhbHVlIiA6IDExCisgICAgICAgICAgfSwKKyAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0KKyAgICAgICAgfSwKKyAgICAgICAgIm91dFYiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IF0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLWVkZ2UtdjQtbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLWVkZ2UtdjQtbm8tdHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2RhYzViCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtZWRnZS12NC1uby10eXBlcy5qc29uCkBAIC0wLDAgKzEsMTYgQEAKK3sKKyAgImlkIiA6IDEzLAorICAibGFiZWwiIDogWyAiZGV2ZWxvcHMiIF0sCisgICJ0eXBlIiA6ICJlZGdlIiwKKyAgImluViIgOiB7CisgICAgImlkIiA6IDEwLAorICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICB9LAorICAib3V0ViIgOiB7CisgICAgImlkIiA6IDEsCisgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXQorICB9LAorICAicHJvcGVydGllcyIgOiB7CisgICAgInNpbmNlIiA6IFsgMjAwOSBdCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC1lZGdlLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC1lZGdlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUxMDc0NQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLWVkZ2UtdjQuanNvbgpAQCAtMCwwICsxLDM2IEBACit7CisgICJAdHlwZSIgOiAiZzpFZGdlIiwKKyAgIkB2YWx1ZSIgOiB7CisgICAgImlkIiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAiQHZhbHVlIiA6IDEzCisgICAgfSwKKyAgICAibGFiZWwiIDogWyAiZGV2ZWxvcHMiIF0sCisgICAgImluViIgOiB7CisgICAgICAiaWQiIDogeworICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAiQHZhbHVlIiA6IDEwCisgICAgICB9LAorICAgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdCisgICAgfSwKKyAgICAib3V0ViIgOiB7CisgICAgICAiaWQiIDogeworICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAiQHZhbHVlIiA6IDEKKyAgICAgIH0sCisgICAgICAibGFiZWwiIDogWyAicGVyc29uIiBdCisgICAgfSwKKyAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAic2luY2UiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCisgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKKyAgICAgICAgICAidmFsdWUiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBdCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtcGF0aC12NC1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtcGF0aC12NC1uby10eXBlcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTFhZWQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC1wYXRoLXY0LW5vLXR5cGVzLmpzb24KQEAgLTAsMCArMSwxNiBAQAoreworICAibGFiZWxzIiA6IFsgWyBdLCBbIF0sIFsgXSBdLAorICAib2JqZWN0cyIgOiBbIHsKKyAgICAiaWQiIDogMSwKKyAgICAibGFiZWwiIDogWyAicGVyc29uIiBdLAorICAgICJ0eXBlIiA6ICJ2ZXJ0ZXgiCisgIH0sIHsKKyAgICAiaWQiIDogMTAsCisgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdLAorICAgICJ0eXBlIiA6ICJ2ZXJ0ZXgiCisgIH0sIHsKKyAgICAiaWQiIDogMTEsCisgICAgImxhYmVsIiA6IFsgInNvZnR3YXJlIiBdLAorICAgICJ0eXBlIiA6ICJ2ZXJ0ZXgiCisgIH0gXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLXBhdGgtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLXBhdGgtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDZiYjViCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtcGF0aC12NC5qc29uCkBAIC0wLDAgKzEsNDkgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOlBhdGgiLAorICAiQHZhbHVlIiA6IHsKKyAgICAibGFiZWxzIiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKKyAgICAgICJAdmFsdWUiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAiZzpTZXQiLAorICAgICAgICAiQHZhbHVlIiA6IFsgXQorICAgICAgfSwgeworICAgICAgICAiQHR5cGUiIDogImc6U2V0IiwKKyAgICAgICAgIkB2YWx1ZSIgOiBbIF0KKyAgICAgIH0sIHsKKyAgICAgICAgIkB0eXBlIiA6ICJnOlNldCIsCisgICAgICAgICJAdmFsdWUiIDogWyBdCisgICAgICB9IF0KKyAgICB9LAorICAgICJvYmplY3RzIiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKKyAgICAgICJAdmFsdWUiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMQorICAgICAgICAgIH0sCisgICAgICAgICAgImxhYmVsIiA6IFsgInBlcnNvbiIgXQorICAgICAgICB9CisgICAgICB9LCB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTAKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9CisgICAgICB9LCB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogMTEKKyAgICAgICAgICB9LAorICAgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXQorICAgICAgICB9CisgICAgICB9IF0KKyAgICB9CisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC10cmVlLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC10cmVlLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhY2I1NgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLXRyZWUtdjQuanNvbgpAQCAtMCwwICsxLDYwIEBACit7CisgICJAdHlwZSIgOiAiZzpUcmVlIiwKKyAgIkB2YWx1ZSIgOiBbIHsKKyAgICAia2V5IiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAorICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAiQHZhbHVlIiA6IDEwCisgICAgICAgIH0sCisgICAgICAgICJsYWJlbCIgOiBbICJzb2Z0d2FyZSIgXSwKKyAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0CisgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZ3JlbWxpbiIsCisgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJuYW1lIiBdCisgICAgICAgICAgICB9CisgICAgICAgICAgfSBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9LAorICAgICJ2YWx1ZSIgOiB7CisgICAgICAiQHR5cGUiIDogImc6VHJlZSIsCisgICAgICAiQHZhbHVlIiA6IFsgeworICAgICAgICAia2V5IiA6IHsKKyAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKKyAgICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogMTEKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGFiZWwiIDogWyAic29mdHdhcmUiIF0sCisgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICAgICAgICJuYW1lIiA6IFsgeworICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7CisgICAgICAgICAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAidmFsdWUiIDogInRpbmtlcmdyYXBoIiwKKyAgICAgICAgICAgICAgICAgICJsYWJlbCIgOiBbICJuYW1lIiBdCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IF0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgICJ2YWx1ZSIgOiB7CisgICAgICAgICAgIkB0eXBlIiA6ICJnOlRyZWUiLAorICAgICAgICAgICJAdmFsdWUiIDogWyBdCisgICAgICAgIH0KKyAgICAgIH0gXQorICAgIH0KKyAgfSBdCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtdmVydGV4LXY0LW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC12ZXJ0ZXgtdjQtbm8tdHlwZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWI0MjcwCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtdmVydGV4LXY0LW5vLXR5cGVzLmpzb24KQEAgLTAsMCArMSwzOSBAQAoreworICAiaWQiIDogMSwKKyAgImxhYmVsIiA6IFsgInBlcnNvbiIgXSwKKyAgInR5cGUiIDogInZlcnRleCIsCisgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAibmFtZSIgOiBbIHsKKyAgICAgICJpZCIgOiAwLAorICAgICAgInZhbHVlIiA6ICJtYXJrbyIKKyAgICB9IF0sCisgICAgImxvY2F0aW9uIiA6IFsgeworICAgICAgImlkIiA6IDYsCisgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCisgICAgICAicHJvcGVydGllcyIgOiB7CisgICAgICAgICJzdGFydFRpbWUiIDogMTk5NywKKyAgICAgICAgImVuZFRpbWUiIDogMjAwMQorICAgICAgfQorICAgIH0sIHsKKyAgICAgICJpZCIgOiA3LAorICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKKyAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgInN0YXJ0VGltZSIgOiAyMDAxLAorICAgICAgICAiZW5kVGltZSIgOiAyMDA0CisgICAgICB9CisgICAgfSwgeworICAgICAgImlkIiA6IDgsCisgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKKyAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgInN0YXJ0VGltZSIgOiAyMDA0LAorICAgICAgICAiZW5kVGltZSIgOiAyMDA1CisgICAgICB9CisgICAgfSwgeworICAgICAgImlkIiA6IDksCisgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKKyAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgInN0YXJ0VGltZSIgOiAyMDA1CisgICAgICB9CisgICAgfSBdCisgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC12ZXJ0ZXgtdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLXZlcnRleC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZDQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC12ZXJ0ZXgtdjQuanNvbgpAQCAtMCwwICsxLDEwMCBAQAoreworICAiQHR5cGUiIDogImc6VmVydGV4IiwKKyAgIkB2YWx1ZSIgOiB7CisgICAgImlkIiA6IHsKKyAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAiQHZhbHVlIiA6IDEKKyAgICB9LAorICAgICJsYWJlbCIgOiBbICJwZXJzb24iIF0sCisgICAgInByb3BlcnRpZXMiIDogeworICAgICAgIm5hbWUiIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiAwCisgICAgICAgICAgfSwKKyAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKKyAgICAgICAgICAibGFiZWwiIDogWyAibmFtZSIgXQorICAgICAgICB9CisgICAgICB9IF0sCisgICAgICAibG9jYXRpb24iIDogWyB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiA2CisgICAgICAgICAgfSwKKyAgICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCisgICAgICAgICAgImxhYmVsIiA6IFsgImxvY2F0aW9uIiBdLAorICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKKyAgICAgICAgICAgICJzdGFydFRpbWUiIDogeworICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiZW5kVGltZSIgOiB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwgeworICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAorICAgICAgICAiQHZhbHVlIiA6IHsKKyAgICAgICAgICAiaWQiIDogeworICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKKyAgICAgICAgICAgICJAdmFsdWUiIDogNworICAgICAgICAgIH0sCisgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKKyAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LCB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiA4CisgICAgICAgICAgfSwKKyAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKKyAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKKyAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9LCB7CisgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICAgICAgICJAdmFsdWUiIDogeworICAgICAgICAgICJpZCIgOiB7CisgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgICAgICAgIkB2YWx1ZSIgOiA5CisgICAgICAgICAgfSwKKyAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKKyAgICAgICAgICAibGFiZWwiIDogWyAibG9jYXRpb24iIF0sCisgICAgICAgICAgInByb3BlcnRpZXMiIDogeworICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7CisgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSBdCisgICAgfQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtdmVydGV4cHJvcGVydHktdjQtbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLXZlcnRleHByb3BlcnR5LXY0LW5vLXR5cGVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY2YjEyYwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsLXZlcnRleHByb3BlcnR5LXY0LW5vLXR5cGVzLmpzb24KQEAgLTAsMCArMSw1IEBACit7CisgICJpZCIgOiAwLAorICAidmFsdWUiIDogIm1hcmtvIiwKKyAgImxhYmVsIiA6IFsgIm5hbWUiIF0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbC12ZXJ0ZXhwcm9wZXJ0eS12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtdmVydGV4cHJvcGVydHktdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWZlZDUxCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWwtdmVydGV4cHJvcGVydHktdjQuanNvbgpAQCAtMCwwICsxLDExIEBACit7CisgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCisgICJAdmFsdWUiIDogeworICAgICJpZCIgOiB7CisgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAorICAgICAgIkB2YWx1ZSIgOiAwCisgICAgfSwKKyAgICAidmFsdWUiIDogIm1hcmtvIiwKKyAgICAibGFiZWwiIDogWyAibmFtZSIgXQorICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cnVlLWJvb2xlYW4tdjQuanNvbiBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJ1ZS1ib29sZWFuLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyYTU4MAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJ1ZS1ib29sZWFuLXY0Lmpzb24KQEAgLTAsMCArMSBAQAordHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdW5zcGVjaWZpZWQtbnVsbC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi91bnNwZWNpZmllZC1udWxsLXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3NDdmYQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdW5zcGVjaWZpZWQtbnVsbC12NC5qc29uCkBAIC0wLDAgKzEgQEAKK251bGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Zhci1idWxrbGlzdC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92YXItYnVsa2xpc3QtdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzc2MzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92YXItYnVsa2xpc3QtdjQuanNvbgpAQCAtMCwwICsxLDQgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOkxpc3QiLAorICAiQHZhbHVlIiA6IFsgIm1hcmtvIiwgImpvc2giLCAiam9zaCIgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmFyLXR5cGUtbGlzdC12NC5qc29uIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92YXItdHlwZS1saXN0LXY0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk0MDYzNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmFyLXR5cGUtbGlzdC12NC5qc29uCkBAIC0wLDAgKzEsNyBAQAoreworICAiQHR5cGUiIDogImc6TGlzdCIsCisgICJAdmFsdWUiIDogWyB7CisgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAiQHZhbHVlIiA6IDEKKyAgfSwgInBlcnNvbiIsIHRydWUsIG51bGwgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmFyLXR5cGUtbWFwLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Zhci10eXBlLW1hcC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MjAyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Zhci10eXBlLW1hcC12NC5qc29uCkBAIC0wLDAgKzEsMjUgQEAKK3sKKyAgIkB0eXBlIiA6ICJnOk1hcCIsCisgICJAdmFsdWUiIDogWyBudWxsLCBudWxsLCB7CisgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAorICAgICJAdmFsdWUiIDogWyB7CisgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICAgIkB2YWx1ZSIgOiAxCisgICAgfSwgeworICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKKyAgICAgICJAdmFsdWUiIDogMgorICAgIH0sIHsKKyAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCisgICAgICAiQHZhbHVlIiA6IDMKKyAgICB9IF0KKyAgfSwgeworICAgICJAdHlwZSIgOiAiZzpEYXRlVGltZSIsCisgICAgIkB2YWx1ZSIgOiAiMTk3MC0wMS0wMVQwMDoyNDo0MS4yOTVaIgorICB9LCAidGVzdCIsIHsKKyAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICJAdmFsdWUiIDogMTIzCisgIH0sIHsKKyAgICAiQHR5cGUiIDogImc6RGF0ZVRpbWUiLAorICAgICJAdmFsdWUiIDogIjE5NzAtMDEtMDFUMDA6MjQ6NDEuMjk1WiIKKyAgfSwgInJlZCIgXQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmFyLXR5cGUtc2V0LXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Zhci10eXBlLXNldC12NC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjhmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Zhci10eXBlLXNldC12NC5qc29uCkBAIC0wLDAgKzEsNyBAQAoreworICAiQHR5cGUiIDogImc6U2V0IiwKKyAgIkB2YWx1ZSIgOiBbIG51bGwsIHsKKyAgICAiQHR5cGUiIDogImc6SW50MzIiLAorICAgICJAdmFsdWUiIDogMgorICB9LCAicGVyc29uIiwgdHJ1ZSBdCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi96ZXJvLWR1cmF0aW9uLXY0Lmpzb24gYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3plcm8tZHVyYXRpb24tdjQuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDY5NjZmCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi96ZXJvLWR1cmF0aW9uLXY0Lmpzb24KQEAgLTAsMCArMSw0IEBACit7CisgICJAdHlwZSIgOiAiZzpEdXJhdGlvbiIsCisgICJAdmFsdWUiIDogIlBUMFMiCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvYnJhbmNoL1JlcGVhdC5mZWF0dXJlIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvYnJhbmNoL1JlcGVhdC5mZWF0dXJlCmluZGV4IDY2NTQ1ZjQuLjYwYzE3YTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2JyYW5jaC9SZXBlYXQuZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9icmFuY2gvUmVwZWF0LmZlYXR1cmUKQEAgLTIxOSwxNCArMjE5LDEwIEBACiAgICAgICAiIiIKICAgICAgIGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLnJlcGVhdChfXy5vdXRFKCkuaW5WKCkuc2ltcGxlUGF0aCgpKS51bnRpbChfXy5oYXMoIm5hbWUiLCAicmlwcGxlIikpLnBhdGgoKS5ieSgibmFtZSIpLmJ5KFQubGFiZWwpCiAgICAgICAiIiIKLSAgICBXaGVuIGl0ZXJhdGVkIG5leHQKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKICAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZAogICAgICAgfCByZXN1bHQgfAotICAgICAgfCBtYXJrbyB8Ci0gICAgICB8IGtub3dzIHwKLSAgICAgIHwgam9zaCAgfAotICAgICAgfCBjcmVhdGVkIHwKLSAgICAgIHwgcmlwcGxlICB8CisgICAgICB8IHBbbWFya28sa25vd3Msam9zaCxjcmVhdGVkLHJpcHBsZV0gIHwKIAogICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvblJlZmVyZW5jZU9ubHkKICAgU2NlbmFyaW86IGdfVl9oYXNYbG9vcF9uYW1lX2xvb3BYX3JlcGVhdFhpblhfdGltZXNYNVhfcGF0aF9ieV9uYW1lCkBAIC0yMzUsMTUgKzIzMSwxMCBAQAogICAgICAgIiIiCiAgICAgICBnLlYoKS5oYXMoImxvb3BzIiwibmFtZSIsImxvb3AiKS5yZXBlYXQoX18uaW4oKSkudGltZXMoNSkucGF0aCgpLmJ5KCJuYW1lIikKICAgICAgICIiIgotICAgIFdoZW4gaXRlcmF0ZWQgbmV4dAorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAogICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCiAgICAgICB8IHJlc3VsdCB8Ci0gICAgICB8IGxvb3AgfAotICAgICAgfCBsb29wIHwKLSAgICAgIHwgbG9vcCAgfAotICAgICAgfCBsb29wIHwKLSAgICAgIHwgbG9vcCAgfAotICAgICAgfCBsb29wICB8CisgICAgICB8IHBbbG9vcCxsb29wLGxvb3AsbG9vcCxsb29wLGxvb3BdIHwKIAogICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvblJlZmVyZW5jZU9ubHkKICAgU2NlbmFyaW86IGdfVl9yZXBlYXRYb3V0X3JlcGVhdFhvdXRfb3JkZXJfYnlYbmFtZV9kZXNjWFhfdGltZXNYMVhYX3RpbWVzWDFYX2xpbWl0WDFYX3BhdGhfYnlYbmFtZVgKQEAgLTI1MiwxMiArMjQzLDEwIEBACiAgICAgICAgICAgIiIiCiAgICAgICAgICAgZy5WKCkucmVwZWF0KF9fLm91dCgpLnJlcGVhdChfXy5vdXQoKS5vcmRlcigpLmJ5KCJuYW1lIixkZXNjKSkudGltZXMoMSkpLnRpbWVzKDEpLmxpbWl0KDEpLnBhdGgoKS5ieSgibmFtZSIpCiAgICAgICAgICAgIiIiCi0gICAgICBXaGVuIGl0ZXJhdGVkIG5leHQKKyAgICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAogICAgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKICAgICAgICAgICB8IHJlc3VsdCB8Ci0gICAgICAgICAgfCBtYXJrbyB8Ci0gICAgICAgICAgfCBqb3NoIHwKLSAgICAgICAgICB8IHJpcHBsZSB8CisgICAgICAgICAgfCBwW21hcmtvLGpvc2gscmlwcGxlXSB8CiAKICAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25SZWZlcmVuY2VPbmx5CiAgIFNjZW5hcmlvOiBnX1ZfcmVwZWF0WG91dFhrbm93c1hYX3VudGlsWHJlcGVhdFhvdXRYY3JlYXRlZFhYX2VtaXRYaGFzWG5hbWVfbG9wWFhYX3BhdGhfYnlYbmFtZVgKQEAgLTI2NiwxMSArMjU1LDEwIEBACiAgICAgICAiIiIKICAgICAgIGcuVigpLnJlcGVhdChfXy5vdXQoImtub3dzIikpLnVudGlsKF9fLnJlcGVhdChfXy5vdXQoImNyZWF0ZWQiKSkuZW1pdChfXy5oYXMoIm5hbWUiLCAibG9wIikpKS5wYXRoKCkuYnkoIm5hbWUiKQogICAgICAgIiIiCi0gICAgV2hlbiBpdGVyYXRlZCBuZXh0CisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CiAgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKICAgICAgIHwgcmVzdWx0IHwKLSAgICAgIHwgbWFya28gfAotICAgICAgfCBqb3NoIHwKKyAgICAgIHwgcFttYXJrbyxqb3NoXSB8CiAKICAgU2NlbmFyaW86IGdfVl9yZXBlYXRYcmVwZWF0WG91dF9jcmVhdGVkWFhfdW50aWxYaGFzWG5hbWVfcmlwcGxlWFhYZW1pdF9sYW5nCiAgICAgR2l2ZW4gdGhlIG1vZGVybiBncmFwaApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvZGF0YS9EYXRlVGltZS5mZWF0dXJlIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvZGF0YS9EYXRlVGltZS5mZWF0dXJlCmluZGV4IDA2OTU2YTkuLjMzOGIxOTYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2RhdGEvRGF0ZVRpbWUuZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9kYXRhL0RhdGVUaW1lLmZlYXR1cmUKQEAgLTcxLDcgKzcxLDcgQEAKICAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKICAgICBBbmQgdGhlIGdyYXBoIGluaXRpYWxpemVyIG9mCiAgICAgICAiIiIKLSAgICAgIGcuYWRkVigiZXZlbnQiKS5wcm9wZXJ0eSgiZGF0ZXRpbWUiLCBkYXRldGltZSgiMjAyMy0wOC0wOFQwMDowMDowMFoiKSkKKyAgICAgIGcuYWRkVigiZXZlbnQiKS5wcm9wZXJ0eSgiZGF0ZXRpbWUiLCBkYXRldGltZSgiMjAyMy0wOC0wOFQxMjozNDo1NloiKSkKICAgICAgICIiIgogICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCiAgICAgICAiIiIKQEAgLTgwLDcgKzgwLDcgQEAKICAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKICAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZAogICAgICAgfCByZXN1bHQgfAotICAgICAgfCBkdFsyMDIzLTA4LTA4VDAwOjAwOjAwWl0gfAorICAgICAgfCBkdFsyMDIzLTA4LTA4VDEyOjM0OjU2Wl0gfAogCiAgIEBBbGxvd0RhdGVUaW1lUHJvcGVydHlWYWx1ZXMKICAgU2NlbmFyaW86IGdfVl92YWx1ZXNYZGF0ZXRpbWVYX2lzWHR5cGVPZlhHVHlwZV9EQVRFVElNRVhYX2Nob29zZVhpc1hlcVhkYXRldGltZVgyMDIzXzA4XzA4WFhYWF9jb25zdGFudFhtYXRjaFhfY29uc3RhbnRYbm9NYXRjaFhYCkBAIC0xMzEsOSArMTMxLDkgQEAKICAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKICAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgogICAgICAgIiIiCi0gICAgICBnLmluamVjdChkYXRldGltZSgiMjAyMy0wOC0wOFQwMDowMDowMFoiKSkuaXMoUC50eXBlT2YoR1R5cGUuREFURVRJTUUpKS5ncm91cENvdW50KCkKKyAgICAgIGcuaW5qZWN0KGRhdGV0aW1lKCIyMDIzLTA4LTA4VDEyOjM0OjU2WiIpKS5pcyhQLnR5cGVPZihHVHlwZS5EQVRFVElNRSkpLmdyb3VwQ291bnQoKQogICAgICAgIiIiCiAgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CiAgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKICAgICAgIHwgcmVzdWx0IHwKLSAgICAgIHwgbVt7ImR0WzIwMjMtMDgtMDhUMDA6MDA6MDBaXSI6ImRbMV0ubCJ9XSB8CisgICAgICB8IG1beyJkdFsyMDIzLTA4LTA4VDEyOjM0OjU2Wl0iOiJkWzFdLmwifV0gfApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvZmlsdGVyL0Rpc2NhcmQuZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2ZpbHRlci9EaXNjYXJkLmZlYXR1cmUKaW5kZXggNGExNmRiZi4uN2VjYTFhMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvZmlsdGVyL0Rpc2NhcmQuZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9maWx0ZXIvRGlzY2FyZC5mZWF0dXJlCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CiAgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQogCi0gIFNjZW5hcmlvOiBnX1ZfaGFzTGFiZWxYcGVyc29uWF9kaXNjYXJkCisgU2NlbmFyaW86IGdfVl9oYXNMYWJlbFhwZXJzb25YX2Rpc2NhcmQKICAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCiAgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKICAgICAgICIiIgpAQCAtMTA2LDQgKzEwNiw0IEBACiAgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKICAgICAgIHwgcmVzdWx0IHwKICAgICAgIHwgZFszMl0uaSB8Ci0gICAgICB8IGRbMzVdLmkgfApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgIHwgZFszNV0uaSB8CmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9maWx0ZXIvSGFzSWQuZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2ZpbHRlci9IYXNJZC5mZWF0dXJlCmluZGV4IGIzYjAzYmEuLjgxOGQ1NWUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2ZpbHRlci9IYXNJZC5mZWF0dXJlCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL2ZpbHRlci9IYXNJZC5mZWF0dXJlCkBAIC0xMDcsNiArMTA3LDIxIEBACiAgICAgICB8IHZbbWFya29dIHwKICAgICAgIHwgdlt2YWRhc10gfAogCisgIFNjZW5hcmlvOiBnX1ZfaGFzSWRYbWFya292YXJfdmFkYXN2YXJfcGV0ZXJ2YXJYCisgICAgR2l2ZW4gdGhlIG1vZGVybiBncmFwaAorICAgIEFuZCB1c2luZyB0aGUgcGFyYW1ldGVyIHZpZDEgZGVmaW5lZCBhcyAidlttYXJrb10uaWQiCisgICAgQW5kIHVzaW5nIHRoZSBwYXJhbWV0ZXIgdmlkMiBkZWZpbmVkIGFzICJsW3ZbdmFkYXNdLmlkLHZbcGV0ZXJdLmlkXSIKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLlYoKS5oYXNJZCh2aWQxLCB2aWQyKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKKyAgICAgIHwgcmVzdWx0IHwKKyAgICAgIHwgdlttYXJrb10gfAorICAgICAgfCB2W3ZhZGFzXSB8CisgICAgICB8IHZbcGV0ZXJdIHwKKwogICBTY2VuYXJpbzogZ19WX2hhc0lkWDJBc1N0cmluZ19udWxsWAogICAgIEdpdmVuIHRoZSBtb2Rlcm4gZ3JhcGgKICAgICBBbmQgdXNpbmcgdGhlIHBhcmFtZXRlciB2aWQyIGRlZmluZWQgYXMgInZbdmFkYXNdLnNpZCIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9Bc0RhdGUuZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9Bc0RhdGUuZmVhdHVyZQppbmRleCA3ZmZiOWE3Li5lY2ZkYmYwIDEwMDY0NAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvQXNEYXRlLmZlYXR1cmUKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL0FzRGF0ZS5mZWF0dXJlCkBAIC0xNSw2ICsxNSw3IEBACiAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKKyMgdG9kbzogcmUtZW5hYmxlIGFmdGVyIGRhdGV0aW1lIGlzIGltcGxlbWVudGVkCiBAU3RlcENsYXNzTWFwIEBTdGVwQXNEYXRlCiBGZWF0dXJlOiBTdGVwIC0gYXNEYXRlKCkKIApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL0NvbmpvaW4uZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9Db25qb2luLmZlYXR1cmUKaW5kZXggMzc2MTI5Yi4uNTFhMDhkMCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL0NvbmpvaW4uZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvQ29uam9pbi5mZWF0dXJlCkBAIC01OSw3ICs1OSw3IEBACiAgICAgICB8IHJlc3VsdCB8CiAgICAgICB8IGpvc2hfbG9wX21hcmtvX3BldGVyX3JpcHBsZV92YWRhcyB8CiAKLSAgU2NlbmFyaW86IGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9mb2xkX2NvbmpvaW5YX1gKKyAgU2NlbmFyaW86IGdfVl92YWx1ZXNYYWdlWF9vcmRlcl9mb2xkX2NvbmpvaW5Yc2VtaWNvbG9uWAogICAgIEdpdmVuIHRoZSBtb2Rlcm4gZ3JhcGgKICAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgogICAgICAgIiIiCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvRGF0ZUFkZC5mZWF0dXJlIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL0RhdGVBZGQuZmVhdHVyZQppbmRleCA4NjMyOGI5Li4yNmM4OWQyIDEwMDY0NAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvRGF0ZUFkZC5mZWF0dXJlCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9EYXRlQWRkLmZlYXR1cmUKQEAgLTE1LDYgKzE1LDcgQEAKICMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwogIyB1bmRlciB0aGUgTGljZW5zZS4KIAorIyB0b2RvOiByZS1lbmFibGUgYWZ0ZXIgZGF0ZXRpbWUgaXMgaW1wbGVtZW50ZWQKIEBTdGVwQ2xhc3NNYXAgQFN0ZXBEYXRlQWRkCiBGZWF0dXJlOiBTdGVwIC0gZGF0ZUFkZCgpCiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9FZGdlLmZlYXR1cmUgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvRWRnZS5mZWF0dXJlCmluZGV4IDlkYTU4MjMuLjM0ZWFjZTUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9FZGdlLmZlYXR1cmUKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL0VkZ2UuZmVhdHVyZQpAQCAtNTgsMjUgKzU4LDEzIEBACiAgICAgICB8IHJlc3VsdCB8CiAgICAgICB8IGVbam9zaC1jcmVhdGVkLT5sb3BdIHwKIAotICBTY2VuYXJpbzogZ19FWGUxMVgKKyAgU2NlbmFyaW86IGdfRVhlaWQ3X2VpZDExWAogICAgIEdpdmVuIHRoZSBtb2Rlcm4gZ3JhcGgKLSAgICBBbmQgdXNpbmcgdGhlIHBhcmFtZXRlciBlMTEgZGVmaW5lZCBhcyAiZVtqb3NoLWNyZWF0ZWQtPmxvcF0iCisgICAgQW5kIHVzaW5nIHRoZSBwYXJhbWV0ZXIgZWlkNyBkZWZpbmVkIGFzICJlW21hcmtvLWtub3dzLT52YWRhc10uaWQiCisgICAgQW5kIHVzaW5nIHRoZSBwYXJhbWV0ZXIgZWlkMTEgZGVmaW5lZCBhcyAiZVtqb3NoLWNyZWF0ZWQtPmxvcF0uaWQiCiAgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKICAgICAgICIiIgotICAgICAgZy5FKGUxMSkKLSAgICAgICIiIgotICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAotICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCi0gICAgICB8IHJlc3VsdCB8Ci0gICAgICB8IGVbam9zaC1jcmVhdGVkLT5sb3BdIHwKLQotICBTY2VuYXJpbzogZ19FWGU3X2UxMVgKLSAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCi0gICAgQW5kIHVzaW5nIHRoZSBwYXJhbWV0ZXIgZTcgZGVmaW5lZCBhcyAiZVttYXJrby1rbm93cy0+dmFkYXNdIgotICAgIEFuZCB1c2luZyB0aGUgcGFyYW1ldGVyIGUxMSBkZWZpbmVkIGFzICJlW2pvc2gtY3JlYXRlZC0+bG9wXSIKLSAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgotICAgICAgIiIiCi0gICAgICBnLkUoZTcsZTExKQorICAgICAgZy5FKGVpZDcsZWlkMTEpCiAgICAgICAiIiIKICAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKICAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZApAQCAtODQsOSArNzIsOSBAQAogICAgICAgfCBlW21hcmtvLWtub3dzLT52YWRhc10gfAogICAgICAgfCBlW2pvc2gtY3JlYXRlZC0+bG9wXSB8CiAKLSAgU2NlbmFyaW86IGdfRVhsaXN0WGU3X2UxMVhYCisgIFNjZW5hcmlvOiBnX0VYbGlzdFhlaWQ3X2VpZDExWFgKICAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCi0gICAgQW5kIHVzaW5nIHRoZSBwYXJhbWV0ZXIgeHgxIGRlZmluZWQgYXMgImxbZVttYXJrby1rbm93cy0+dmFkYXNdLGVbam9zaC1jcmVhdGVkLT5sb3BdXSIKKyAgICBBbmQgdXNpbmcgdGhlIHBhcmFtZXRlciB4eDEgZGVmaW5lZCBhcyAibFtlW21hcmtvLWtub3dzLT52YWRhc10uaWQsZVtqb3NoLWNyZWF0ZWQtPmxvcF0uaWRdIgogICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCiAgICAgICAiIiIKICAgICAgIGcuRSh4eDEpCkBAIC0zNjEsNCArMzQ5LDE3IEBACiAgICAgICB8IG1hcmtvIHwKICAgICAgIHwgbWFya28gfAogICAgICAgfCBqb3NoIHwKLSAgICAgIHwgdmFkYXMgfApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgIHwgdmFkYXMgfAorCisgIFNjZW5hcmlvOiBnX1ZfdG9FWG91dF9rbm93c3ZhclhfdmFsdWVzWHdlaWdodFgKKyAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCisgICAgQW5kIHVzaW5nIHRoZSBwYXJhbWV0ZXIgeHgxIGRlZmluZWQgYXMgImtub3dzIgorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuVigpLnRvRShEaXJlY3Rpb24uT1VULCB4eDEpLnZhbHVlcygid2VpZ2h0IikKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IGRbMC41XS5kIHwKKyAgICAgIHwgZFsxLjBdLmQgfApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9NZXJnZUVkZ2UuZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9NZXJnZUVkZ2UuZmVhdHVyZQppbmRleCA0MTc1NjBhLi42ZmZiN2RhIDEwMDY0NAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvTWVyZ2VFZGdlLmZlYXR1cmUKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL01lcmdlRWRnZS5mZWF0dXJlCkBAIC0xNDcsNyArMTQ3LDYgQEAKICAgICBBbmQgdGhlIGdyYXBoIHNob3VsZCByZXR1cm4gMiBmb3IgY291bnQgb2YgImcuRSgpIgogICAgIEFuZCB0aGUgZ3JhcGggc2hvdWxkIHJldHVybiAyIGZvciBjb3VudCBvZiAiZy5WKCkiCiAKLSAgIyBudWxsIHNhbWUgYXMgZW1wdHkKICAgU2NlbmFyaW86IGdfbWVyZ2VFWG51bGxYCiAgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCiAgICAgQW5kIHRoZSBncmFwaCBpbml0aWFsaXplciBvZgpAQCAtMjgwLDcgKzI3OSw3IEBACiAgICAgICBnLm1lcmdlRSh4eDEpCiAgICAgICAiIiIKICAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKLSAgICBUaGVuIHRoZSB0cmF2ZXJzYWwgd2lsbCByYWlzZSBhbiBlcnJvciB3aXRoIG1lc3NhZ2UgY29udGFpbmluZyB0ZXh0IG9mICJWZXJ0ZXggaWQgY291bGQgbm90IGJlIHJlc29sdmVkIGZyb20gbWVyZ2VFIgorICAgIFRoZW4gdGhlIHRyYXZlcnNhbCB3aWxsIHJhaXNlIGFuIGVycm9yIHdpdGggbWVzc2FnZSBjb250YWluaW5nIHRleHQgb2YgIlZlcnRleCBkb2VzIG5vdCBleGlzdCBmb3IgbWVyZ2VFIgogCiAgIEBVc2VyU3VwcGxpZWRWZXJ0ZXhJZHMKICAgU2NlbmFyaW86IGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWApAQCAtMjkzLDcgKzI5Miw3IEBACiAgICAgICBnLm1lcmdlRSh4eDEpLm9wdGlvbihNZXJnZS5vbkNyZWF0ZSx4eDIpLm9wdGlvbihNZXJnZS5vbk1hdGNoLHh4MykKICAgICAgICIiIgogICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAotICAgIFRoZW4gdGhlIHRyYXZlcnNhbCB3aWxsIHJhaXNlIGFuIGVycm9yIHdpdGggbWVzc2FnZSBjb250YWluaW5nIHRleHQgb2YgIlZlcnRleCBpZCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZnJvbSBtZXJnZUUiCisgICAgVGhlbiB0aGUgdHJhdmVyc2FsIHdpbGwgcmFpc2UgYW4gZXJyb3Igd2l0aCBtZXNzYWdlIGNvbnRhaW5pbmcgdGV4dCBvZiAiVmVydGV4IGRvZXMgbm90IGV4aXN0IGZvciBtZXJnZUUiCiAKICAgU2NlbmFyaW86IGdfbWVyZ2VFWGxhYmVsX2tub3dzX291dF9tYXJrb19pbl92YWRhc1hfb3B0aW9uWG9uQ3JlYXRlX2NyZWF0ZWRfWVhfb3B0aW9uWG9uTWF0Y2hfY3JlYXRlZF9OWF9leGlzdHMKICAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9Qcm9wZXJ0aWVzLmZlYXR1cmUgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvUHJvcGVydGllcy5mZWF0dXJlCmluZGV4IDAwZjQ5MGEuLmI1YjQwZmUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9Qcm9wZXJ0aWVzLmZlYXR1cmUKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL1Byb3BlcnRpZXMuZmVhdHVyZQpAQCAtMTA4LDIzICsxMDgsNzQgQEAKICAgICAgIHwgbG9wIHwKICAgICAgIHwgcmlwcGxlIHwKIAotICBTY2VuYXJpbzogZ19pbmplY3RYZ19WWDFYX3Byb3BlcnRpZXNYbmFtZVhfbmV4dFhfdmFsdWUKLSAgICBHaXZlbiBhbiB1bnN1cHBvcnRlZCB0ZXN0Ci0gICAgVGhlbiBub3RoaW5nIHNob3VsZCBoYXBwZW4gYmVjYXVzZQorICBTY2VuYXJpbzogZ19FX3Byb3BlcnRpZXNYd2VpZ2h0WAorICAgIEdpdmVuIHRoZSBtb2Rlcm4gZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgogICAgICAgIiIiCi0gICAgICBUaGUgdGVzdCBzdWl0ZSBkb2Vzbid0IGRvIHdlbGwgd2l0aCB2ZXJ0ZXggcHJvcGVydHkgdmFsdWVzLgorICAgICAgZy5FKCkucHJvcGVydGllcygid2VpZ2h0IikKICAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC4yXS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC40XS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC40XS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC41XS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMS4wXS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMS4wXS5kXSB8CiAKLSAgU2NlbmFyaW86IGdfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRYX3ZhbHVlCi0gICAgR2l2ZW4gYW4gdW5zdXBwb3J0ZWQgdGVzdAotICAgIFRoZW4gbm90aGluZyBzaG91bGQgaGFwcGVuIGJlY2F1c2UKKyAgU2NlbmFyaW86IGdfRV9wcm9wZXJ0aWVzCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSBncmFwaCBpbml0aWFsaXplciBvZgogICAgICAgIiIiCi0gICAgICBHTFYgc3VpdGUgZG9lc24ndCBzdXBwb3J0IHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCByZWxhdGVkIGFzc2VydGlvbnMKKyAgICAgIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCJhbGljZSIpLmFzKCJhIikuCisgICAgICAgIGFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwiYm9iIikuYXMoImIiKS4KKyAgICAgICAgYWRkRSgia25vd3MiKS5mcm9tKCJhIikudG8oImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkucHJvcGVydHkoInNpbmNlIiwgMjAyMGkpCiAgICAgICAiIiIKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLkUoKS5wcm9wZXJ0aWVzKCkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC41XS5kXSB8CisgICAgICB8IHByb3Bbc2luY2UsZFsyMDIwXS5pXSB8CiAKLSAgU2NlbmFyaW86IGdfVl9oYXNYYWdlWF9wcm9wZXJ0aWVzX2hhc1hpZF9uYW1lSWRBc1N0cmluZ1hfdmFsdWUKLSAgICBHaXZlbiBhbiB1bnN1cHBvcnRlZCB0ZXN0Ci0gICAgVGhlbiBub3RoaW5nIHNob3VsZCBoYXBwZW4gYmVjYXVzZQorICBTY2VuYXJpbzogZ19FX3Byb3BlcnRpZXNYc2luY2VYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSBncmFwaCBpbml0aWFsaXplciBvZgogICAgICAgIiIiCi0gICAgICBHTFYgc3VpdGUgZG9lc24ndCBzdXBwb3J0IHByb3BlcnR5IGlkZW50aWZpZXJzIGFuZCByZWxhdGVkIGFzc2VydGlvbnMKLSAgICAgICIiIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICAgIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCJhbGljZSIpLmFzKCJhIikuCisgICAgICAgIGFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwiYm9iIikuYXMoImIiKS4KKyAgICAgICAgYWRkRSgia25vd3MiKS5mcm9tKCJhIikudG8oImIiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC41ZCkucHJvcGVydHkoInNpbmNlIiwgMjAyMGkpCisgICAgICAiIiIKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLkUoKS5wcm9wZXJ0aWVzKCJzaW5jZSIpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZAorICAgICAgfCByZXN1bHQgfAorICAgICAgfCBwcm9wW3NpbmNlLGRbMjAyMF0uaV0gfAorCisgIFNjZW5hcmlvOiBnX0VfcHJvcGVydGllc19tdWx0aV9lZGdlcworICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgZ3JhcGggaW5pdGlhbGl6ZXIgb2YKKyAgICAgICIiIgorICAgICAgZy5hZGRWKCJwZXJzb24iKS5wcm9wZXJ0eSgibmFtZSIsImFsaWNlIikuYXMoImEiKS4KKyAgICAgICAgYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCJib2IiKS5hcygiYiIpLgorICAgICAgICBhZGRFKCJrbm93cyIpLmZyb20oImEiKS50bygiYiIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5wcm9wZXJ0eSgic2luY2UiLCAyMDIwaSkuCisgICAgICAgIGFkZEUoImxpa2VzIikuZnJvbSgiYSIpLnRvKCJiIikucHJvcGVydHkoIndlaWdodCIsIDEuMGQpLnByb3BlcnR5KCJ0YWciLCAiZnJpZW5kIikKKyAgICAgICIiIgorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuRSgpLnByb3BlcnRpZXMoKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKKyAgICAgIHwgcmVzdWx0IHwKKyAgICAgIHwgcHJvcFt3ZWlnaHQsZFswLjVdLmRdIHwKKyAgICAgIHwgcHJvcFtzaW5jZSxkWzIwMjBdLmldIHwKKyAgICAgIHwgcHJvcFt3ZWlnaHQsZFsxLjBdLmRdIHwKKyAgICAgIHwgcHJvcFt0YWcsZnJpZW5kXSB8ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL1NlbGVjdC5mZWF0dXJlIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvbWFwL1NlbGVjdC5mZWF0dXJlCmluZGV4IDA4NjM0MDcuLjFhNjM5ZTEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL21hcC9TZWxlY3QuZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9tYXAvU2VsZWN0LmZlYXR1cmUKQEAgLTg5NiwxMSArODk2LDEyIEBACiAgICAgICB8IG1beyJhIjpbImExIiwiYTEiLCJiMSJdfV0gfAogICAgICAgfCBtW3siYSI6WyJiMSIsImExIiwiYTEiXX1dIHwKIAotICBTY2VuYXJpbzogZ19WX2FzWGxhYmVsWF9sb2NhbFhhZ2dyZWdhdGVYeFhfc2VsZWN0WHhYX3NlbGVjdFhsYWJlbFgKKyAgQFN0ZXBDbGFzc0ludGVncmF0ZWQKKyAgU2NlbmFyaW86IGdfd2l0aG91dFN0cmF0ZWdpZXNYTGF6eUJhcnJpZXJTdHJhdGVneVhfVl9hc1hsYWJlbFhfbG9jYWxYYWdncmVnYXRlX3hYX3NlbGVjdFh4WF9zZWxlY3RYbGFiZWxYCiAgICAgR2l2ZW4gdGhlIG1vZGVybiBncmFwaAogICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCiAgICAgICAiIiIKLSAgICAgIGcuVigpLmFzKCJsYWJlbCIpLmxvY2FsKGFnZ3JlZ2F0ZSgieCIpKS5iYXJyaWVyKCkuc2VsZWN0KCJ4Iikuc2VsZWN0KCJsYWJlbCIpCisgICAgICBnLndpdGhvdXRTdHJhdGVnaWVzKExhenlCYXJyaWVyU3RyYXRlZ3kpLlYoKS5hcygibGFiZWwiKS5sb2NhbChhZ2dyZWdhdGUoIngiKSkuc2VsZWN0KCJ4Iikuc2VsZWN0KCJsYWJlbCIpCiAgICAgICAiIiIKICAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKICAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvc2VtYW50aWNzL0NvbXBhcmFiaWxpdHkuZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL3NlbWFudGljcy9Db21wYXJhYmlsaXR5LmZlYXR1cmUKaW5kZXggYThjZWYwZC4uOTRhNjhhMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvc2VtYW50aWNzL0NvbXBhcmFiaWxpdHkuZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9zZW1hbnRpY3MvQ29tcGFyYWJpbGl0eS5mZWF0dXJlCkBAIC0yMjAsNiArMjIwLDI2MiBAQAogICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAogICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKICAgICAKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhOYU5YX2VxWDFkWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KE5hTikuaXMoUC5lcSgxLjBkKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WE5hTlhfbmVxWDFkWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KE5hTikuaXMoUC5uZXEoMS4wZCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZAorICAgICAgfCByZXN1bHQgfAorICAgICAgfCBkW05hTl0gfAorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYTmFOWF9sdFgxZFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChOYU4pLmlzKFAubHQoMS4wZCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhOYU5YX2x0ZVgxZFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChOYU4pLmlzKFAubHRlKDEuMGQpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYTmFOWF9ndFgxZFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChOYU4pLmlzKFAuZ3QoMS4wZCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhOYU5YX2d0ZVgxZFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChOYU4pLmlzKFAuZ3RlKDEuMGQpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIyBEb3VibGUgdnMuIG51bGwKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFgxZFhfZXFYbnVsbFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdCgxLjBkKS5pcyhQLmVxKG51bGwpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX25lcVhudWxsWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KDEuMGQpLmlzKFAubmVxKG51bGwpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKKyAgICAgIHwgcmVzdWx0IHwKKyAgICAgIHwgZFsxXS5kIHwKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WDFkWF9sdFhudWxsWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KDEuMGQpLmlzKFAubHQobnVsbCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFgxZFhfbHRlWG51bGxYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QoMS4wZCkuaXMoUC5sdGUobnVsbCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFgxZFhfZ3RYbnVsbFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdCgxLjBkKS5pcyhQLmd0KG51bGwpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX2d0ZVhudWxsWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KDEuMGQpLmlzKFAuZ3RlKG51bGwpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYbnVsbFhfZXFYMWRYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QobnVsbCkuaXMoUC5lcSgxLjBkKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WG51bGxYX25lcVgxZFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChudWxsKS5pcyhQLm5lcSgxLjBkKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IG51bGwgfAorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYbnVsbFhfbHRYMWRYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QobnVsbCkuaXMoUC5sdCgxLjBkKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WG51bGxYX2x0ZVgxZFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChudWxsKS5pcyhQLmx0ZSgxLjBkKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WG51bGxYX2d0WDFkWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KG51bGwpLmlzKFAuZ3QoMS4wZCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhudWxsWF9ndGVYMWRYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QobnVsbCkuaXMoUC5ndGUoMS4wZCkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMjIG51bGwgdnMuIE5hTgorICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WG51bGxYX2VxWE5hTlgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChudWxsKS5pcyhQLmVxKE5hTikpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhudWxsWF9uZXFYTmFOWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KG51bGwpLmlzKFAubmVxKE5hTikpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZAorICAgICAgfCByZXN1bHQgfAorICAgICAgfCBudWxsIHwKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WG51bGxYX2x0WE5hTlgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChudWxsKS5pcyhQLmx0KE5hTikpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhudWxsWF9sdGVYTmFOWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KG51bGwpLmlzKFAubHRlKE5hTikpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIGVtcHR5CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFhudWxsWF9ndFhOYU5YCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QobnVsbCkuaXMoUC5ndChOYU4pKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYbnVsbFhfZ3RlWE5hTlgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdChudWxsKS5pcyhQLmd0ZShOYU4pKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCiAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAjIyBOYU4gdnMuIG51bGwKICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC04NTcsNiArMTExMywxMzAgQEAKICAgICAgIHwgcmVzdWx0IHwKICAgICAgIHwgZFsxXS5kIHwKIAorICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WDFkWF9ub3RYbm90WGlzWGVxWE5hTlhYWFgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdCgxZCkubm90KG5vdChpcyhQLmVxKE5hTikpKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WDFkWF93aGVyZVhub3RYaXNYbHRYTmFOWFhYWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KDFkKS53aGVyZShfXy5pbmplY3QoMSkubm90KGlzKFAubHQoTmFOKSkpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKKyAgICAgIHwgcmVzdWx0IHwKKyAgICAgIHwgZFsxXS5kIHwKKworICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgIyMgWE9SCisgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX3hvclh0cnVlX3RydWVYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QoMSkuZmlsdGVyKG9yKGFuZChpcyhQLmVxKDEpKSxub3QoaXMoUC5lcSgxKSkpKSxhbmQoaXMoUC5lcSgxKSksbm90KGlzKFAuZXEoMSkpKSkpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX3hvclh0cnVlX2ZhbHNlWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KDEpLmZpbHRlcihvcihhbmQoaXMoUC5lcSgxKSksbm90KGlzKFAuZ3QoMSkpKSksYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmVxKDEpKSkpKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IGRbMV0uaSB8CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFgxZFhfeG9yWHRydWVfZXJyb3JYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QoMSkuZmlsdGVyKG9yKGFuZChpcyhQLmVxKDEpKSxub3QoaXMoUC5sdChOYU4pKSkpLGFuZChpcyhQLmx0KE5hTikpLG5vdChpcyhQLmVxKDEpKSkpKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IGRbMV0uaSB8CisKKyAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25JbmplY3Rpb25Ob3RTdXBwb3J0ZWQKKyAgU2NlbmFyaW86IEluamVjdFgxZFhfeG9yWGZhbHNlX3RydWVYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QoMSkuZmlsdGVyKG9yKGFuZChpcyhQLmd0KDEpKSxub3QoaXMoUC5lcSgxKSkpKSxhbmQoaXMoUC5lcSgxKSksbm90KGlzKFAuZ3QoMSkpKSkpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKKyAgICAgIHwgcmVzdWx0IHwKKyAgICAgIHwgZFsxXS5pIHwKKworICBAR3JhcGhDb21wdXRlclZlcmlmaWNhdGlvbkluamVjdGlvbk5vdFN1cHBvcnRlZAorICBTY2VuYXJpbzogSW5qZWN0WDFkWF94b3JYZmFsc2VfZmFsc2VYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5pbmplY3QoMSkuZmlsdGVyKG9yKGFuZChpcyhQLmd0KDEpKSxub3QoaXMoUC5ndCgxKSkpKSxhbmQoaXMoUC5ndCgxKSksbm90KGlzKFAuZ3QoMSkpKSkpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX3hvclhmYWxzZV9lcnJvclgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmx0KE5hTikpKSksYW5kKGlzKFAubHQoTmFOKSksbm90KGlzKFAuZ3QoMSkpKSkpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX3hvclhlcnJvcl90cnVlWAorICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcuaW5qZWN0KDEpLmZpbHRlcihvcihhbmQoaXMoUC5sdChOYU4pKSxub3QoaXMoUC5lcSgxKSkpKSxhbmQoaXMoUC5lcSgxKSksbm90KGlzKFAubHQoTmFOKSkpKSkpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIHRvIGxpc3QKKyAgICBUaGVuIHRoZSByZXN1bHQgc2hvdWxkIGJlIHVub3JkZXJlZAorICAgICAgfCByZXN1bHQgfAorICAgICAgfCBkWzFdLmkgfAorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX3hvclhlcnJvcl9mYWxzZVgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAubHQoTmFOKSksbm90KGlzKFAuZ3QoMSkpKSksYW5kKGlzKFAuZ3QoMSkpLG5vdChpcyhQLmx0KE5hTikpKSkpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQorCisgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCisgIFNjZW5hcmlvOiBJbmplY3RYMWRYX3hvclhlcnJvcl9lcnJvclgKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLmluamVjdCgxKS5maWx0ZXIob3IoYW5kKGlzKFAubHQoTmFOKSksbm90KGlzKFAubHQoTmFOKSkpKSxhbmQoaXMoUC5sdChOYU4pKSxub3QoaXMoUC5sdChOYU4pKSkpKSkKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgZW1wdHkKKwogICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIyMgSW5maW5pdHkgdnMuIEluZmluaXR5CiAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtOTQ4LDggKzEzMjgsMyBAQAogICAgICAgIiIiCiAgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CiAgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBlbXB0eQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL3NlbWFudGljcy9PcmRlcmFiaWxpdHkuZmVhdHVyZSBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL3NlbWFudGljcy9PcmRlcmFiaWxpdHkuZmVhdHVyZQppbmRleCBkZjBlOTRhLi4xZTFhM2MzIDEwMDY0NAotLS0gYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9zZW1hbnRpY3MvT3JkZXJhYmlsaXR5LmZlYXR1cmUKKysrIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvc2VtYW50aWNzL09yZGVyYWJpbGl0eS5mZWF0dXJlCkBAIC0xNTAsNiArMTUwLDcwIEBACiAgICAgICB8IGRbMTFdLmkgfAogICAgICAgfCBkWzEwXS5pIHwKIAorICBTY2VuYXJpbzogZ19FX3Byb3BlcnRpZXNfb3JkZXIKKyAgICBHaXZlbiB0aGUgZW1wdHkgZ3JhcGgKKyAgICBBbmQgdGhlIGdyYXBoIGluaXRpYWxpemVyIG9mCisgICAgICAiIiIKKyAgICAgIGcuYWRkVigicGVyc29uIikucHJvcGVydHkoIm5hbWUiLCAiYWxpY2UiKS5hcygiYSIpLgorICAgICAgICBhZGRFKCJzZWxmIikuZnJvbSgiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNWQpLnByb3BlcnR5KCJhIiwgMTBpKS4KKyAgICAgICAgYWRkRSgic2VsZiIpLmZyb20oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5wcm9wZXJ0eSgiYSIsIDExaSkuCisgICAgICAgIGFkZEUoInNlbGYiKS5mcm9tKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkucHJvcGVydHkoImEiLCAxMmkpLgorICAgICAgICBhZGRFKCJzZWxmIikuZnJvbSgiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDEuMGQpLnByb3BlcnR5KCJhIiwgMTNpKS4KKyAgICAgICAgYWRkRSgic2VsZiIpLmZyb20oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjRkKS5wcm9wZXJ0eSgiYSIsIDE0aSkuCisgICAgICAgIGFkZEUoInNlbGYiKS5mcm9tKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC4yZCkucHJvcGVydHkoImEiLCAxNWkpCisgICAgICAiIiIKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgorICAgICAgIiIiCisgICAgICBnLkUoKS5wcm9wZXJ0aWVzKCkub3JkZXIoKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSBvcmRlcmVkCisgICAgICB8IHJlc3VsdCB8CisgICAgICB8IHByb3BbYSxkWzEwXS5pXSB8CisgICAgICB8IHByb3BbYSxkWzExXS5pXSB8CisgICAgICB8IHByb3BbYSxkWzEyXS5pXSB8CisgICAgICB8IHByb3BbYSxkWzEzXS5pXSB8CisgICAgICB8IHByb3BbYSxkWzE0XS5pXSB8CisgICAgICB8IHByb3BbYSxkWzE1XS5pXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC4yXS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC40XS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC40XS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMC41XS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMS4wXS5kXSB8CisgICAgICB8IHByb3Bbd2VpZ2h0LGRbMS4wXS5kXSB8CisKKyAgU2NlbmFyaW86IGdfRV9wcm9wZXJ0aWVzX29yZGVyX2J5WGRlc2NYCisgICAgR2l2ZW4gdGhlIGVtcHR5IGdyYXBoCisgICAgQW5kIHRoZSBncmFwaCBpbml0aWFsaXplciBvZgorICAgICAgIiIiCisgICAgICBnLmFkZFYoInBlcnNvbiIpLnByb3BlcnR5KCJuYW1lIiwgImFsaWNlIikuYXMoImEiKS4KKyAgICAgICAgYWRkRSgic2VsZiIpLmZyb20oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAwLjVkKS5wcm9wZXJ0eSgiYSIsIDEwaSkuCisgICAgICAgIGFkZEUoInNlbGYiKS5mcm9tKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMS4wZCkucHJvcGVydHkoImEiLCAxMWkpLgorICAgICAgICBhZGRFKCJzZWxmIikuZnJvbSgiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuNGQpLnByb3BlcnR5KCJhIiwgMTJpKS4KKyAgICAgICAgYWRkRSgic2VsZiIpLmZyb20oImEiKS50bygiYSIpLnByb3BlcnR5KCJ3ZWlnaHQiLCAxLjBkKS5wcm9wZXJ0eSgiYSIsIDEzaSkuCisgICAgICAgIGFkZEUoInNlbGYiKS5mcm9tKCJhIikudG8oImEiKS5wcm9wZXJ0eSgid2VpZ2h0IiwgMC40ZCkucHJvcGVydHkoImEiLCAxNGkpLgorICAgICAgICBhZGRFKCJzZWxmIikuZnJvbSgiYSIpLnRvKCJhIikucHJvcGVydHkoIndlaWdodCIsIDAuMmQpLnByb3BlcnR5KCJhIiwgMTVpKQorICAgICAgIiIiCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKKyAgICAgICIiIgorICAgICAgZy5FKCkucHJvcGVydGllcygpLm9yZGVyKCkuYnkoZGVzYykKKyAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgdG8gbGlzdAorICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgb3JkZXJlZAorICAgICAgfCByZXN1bHQgfAorICAgICAgfCBwcm9wW3dlaWdodCxkWzEuMF0uZF0gfAorICAgICAgfCBwcm9wW3dlaWdodCxkWzEuMF0uZF0gfAorICAgICAgfCBwcm9wW3dlaWdodCxkWzAuNV0uZF0gfAorICAgICAgfCBwcm9wW3dlaWdodCxkWzAuNF0uZF0gfAorICAgICAgfCBwcm9wW3dlaWdodCxkWzAuNF0uZF0gfAorICAgICAgfCBwcm9wW3dlaWdodCxkWzAuMl0uZF0gfAorICAgICAgfCBwcm9wW2EsZFsxNV0uaV0gfAorICAgICAgfCBwcm9wW2EsZFsxNF0uaV0gfAorICAgICAgfCBwcm9wW2EsZFsxM10uaV0gfAorICAgICAgfCBwcm9wW2EsZFsxMl0uaV0gfAorICAgICAgfCBwcm9wW2EsZFsxMV0uaV0gfAorICAgICAgfCBwcm9wW2EsZFsxMF0uaV0gfAorCiAgIEBHcmFwaENvbXB1dGVyVmVyaWZpY2F0aW9uSW5qZWN0aW9uTm90U3VwcG9ydGVkCiAgIFNjZW5hcmlvOiBnX2luamVjdF9vcmRlcgogICAgIEdpdmVuIHRoZSBlbXB0eSBncmFwaApkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvc2lkZUVmZmVjdC9Hcm91cC5mZWF0dXJlIGIvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvc2lkZUVmZmVjdC9Hcm91cC5mZWF0dXJlCmluZGV4IGJkY2Q4NzEuLmYzNmUyYTUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL3NpZGVFZmZlY3QvR3JvdXAuZmVhdHVyZQorKysgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9zaWRlRWZmZWN0L0dyb3VwLmZlYXR1cmUKQEAgLTE4MywyMyArMTgzLDIyIEBACiAgICAgICB8IHJlc3VsdCB8CiAgICAgICB8IG1beyJzb2Z0d2FyZSI6ImRbMi4wXS5kIiwgInBlcnNvbiI6ImRbNS4wXS5kIn1dIHwKIAotICAjIFRoaXMgdGVzdCB3b3JrcywgYnV0IHRoZSB0ZXN0IGZyYW1ld29ya3MgZG9uJ3QgYWxsIHN1cHBvcnQgaXQgd2VsbCBiZWNhdXNlIG9mIGhvdyBwYXJhbWV0ZXJzIGFyZSBub3cgcHJvY2Vzc2VkCi0gICMgaW4gMy42LjAgd2hlcmUgd2UgbmVlZCBtb3JlIHRoYW4ganVzdCBzaW1wbGUgSlNPTiBwcm9jZXNzaW5nLiB3b3VsZCBiZSBuaWNlIHRvICJpZ25vcmUiIGl0IHNvbWVob3cgYXMgaXQgZG9lcwotICAjIHdvcmsgaW4gc29tZSBzaXR1YXRpb25zIGJ1dCBub3QgYWxsIHRlc3QgZnJhbWV3b3JrcyBoYXZlIHRoYXQgYWJpbGl0eSBlaXRoZXIgKGkuZS4gdG8gaWdub3JlIHByaW9yIHRvIHBhcnNpbmcKLSAgIyB0aGUgcGFyYW1ldGVyKS4gVElOS0VSUE9QLTI2OTkKLSAgIwotICAjIFRoZSBwb3N0LW9yZGVyaW5nIHJlYWxseSBpc24ndCByZWFsbHkgcmlnaHQgYnV0IHdvcmtzIGFyb3VuZCBUSU5LRVJQT1AtMjYwMAotIyAgU2NlbmFyaW86IGdfd2l0aFNpZGVFZmZlY3RYYV9fbWFya29fNjY2X25vb25lX2JsYWhYX1ZfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYb3V0RV9sYWJlbF9mb2xkWF9jYXBYYVgKLSMgICAgR2l2ZW4gdGhlIG1vZGVybiBncmFwaAotIyAgICBBbmQgdXNpbmcgdGhlIHBhcmFtZXRlciB4eDEgZGVmaW5lZCBhcyAibVt7XCJtYXJrb1wiOlwibFtcIjY2NlwiXVwiLCBcIm5vb25lXCI6XCJsW1wiYmxhaFwiXVwifV0iCi0jICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCi0jICAgICAgIiIiCi0jICAgICAgZy53aXRoU2lkZUVmZmVjdCgiYSIsIHh4MSkuVigpLmdyb3VwKCJhIikuYnkoIm5hbWUiKS5ieShfXy5vdXRFKCkubGFiZWwoKS5mb2xkKCkpLmNhcCgiYSIpLnVuZm9sZCgpLmdyb3VwKCkuYnkoQ29sdW1uLmtleXMpLmJ5KHNlbGVjdChDb2x1bW4udmFsdWVzKS5vcmRlcihTY29wZS5sb2NhbCkuYnkoT3JkZXIuYXNjKSkKLSMgICAgICAiIiIKLSMgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0Ci0jICAgIFRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYmUgdW5vcmRlcmVkCi0jICAgICAgfCByZXN1bHQgfAotIyAgICAgIHwgbVt7InJpcHBsZSI6W10sICJwZXRlciI6WyJjcmVhdGVkIl0sICJub29uZSI6WyJibGFoIl0sICJ2YWRhcyI6W10sICJqb3NoIjpbImNyZWF0ZWQiLCAiY3JlYXRlZCJdLCAibG9wIjpbXSwgIm1hcmtvIjpbIjY2NiIsICJjcmVhdGVkIiwgImtub3dzIiwgImtub3dzIl19XSB8CisgIFNjZW5hcmlvOiBnX3dpdGhTaWRlRWZmZWN0WGFfX21hcmtvXzY2Nl9ub29uZV9ibGFoWF9WX2dyb3VwWGFYX2J5WG5hbWVYX2J5WG91dEVfbGFiZWxfZm9sZFhfY2FwWGFYCisgICAgR2l2ZW4gdGhlIG1vZGVybiBncmFwaAorICAgIEFuZCB0aGUgdHJhdmVyc2FsIG9mCisgICAgICAiIiIKKyAgICAgIGcud2l0aFNpZGVFZmZlY3QoImEiLCBbbWFya286WyI2NjYiXSxub29uZTpbImJsYWgiXV0pLlYoKS4KKyAgICAgICAgZ3JvdXAoImEiKS4KKyAgICAgICAgICBieSgibmFtZSIpLgorICAgICAgICAgIGJ5KF9fLm91dEUoKS5sYWJlbCgpLmZvbGQoKSkuCisgICAgICAgIGNhcCgiYSIpLnVuZm9sZCgpLgorICAgICAgICBncm91cCgpLmJ5KENvbHVtbi5rZXlzKS5ieShzZWxlY3QoQ29sdW1uLnZhbHVlcykuCisgICAgICAgIG9yZGVyKFNjb3BlLmxvY2FsKS5ieShPcmRlci5hc2MpKQorICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCB0byBsaXN0CisgICAgVGhlbiB0aGUgcmVzdWx0IHNob3VsZCBiZSB1bm9yZGVyZWQKKyAgICAgIHwgcmVzdWx0IHwKKyAgICAgIHwgbVt7InJpcHBsZSI6W10sICJwZXRlciI6WyJjcmVhdGVkIl0sICJub29uZSI6WyJibGFoIl0sICJ2YWRhcyI6W10sICJqb3NoIjpbImNyZWF0ZWQiLCAiY3JlYXRlZCJdLCAibG9wIjpbXSwgIm1hcmtvIjpbIjY2NiIsICJjcmVhdGVkIiwgImtub3dzIiwgImtub3dzIl19XSB8CiAKICAgQEdyYXBoQ29tcHV0ZXJWZXJpZmljYXRpb25TdGFyR3JhcGhFeGNlZWRlZAogICBTY2VuYXJpbzogZ19WX2hhc0xhYmVsWHBlcnNvblhfYXNYcFhfb3V0WGNyZWF0ZWRYX2dyb3VwX2J5WG5hbWVYX2J5WHNlbGVjdFhwWF92YWx1ZXNYYWdlWF9zdW1YCmRpZmYgLS1naXQgYS9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9zaWRlRWZmZWN0L1dyaXRlLmZlYXR1cmUgYi9ncmVtbGluLXRlc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcy9zaWRlRWZmZWN0L1dyaXRlLmZlYXR1cmUKaW5kZXggMmVmYTM1Mi4uY2M3OGNlMSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Rlc3QvZmVhdHVyZXMvc2lkZUVmZmVjdC9Xcml0ZS5mZWF0dXJlCisrKyBiL2dyZW1saW4tdGVzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzL3NpZGVFZmZlY3QvV3JpdGUuZmVhdHVyZQpAQCAtMTksNDMgKzE5LDU1IEBACiBGZWF0dXJlOiBTdGVwIC0gd3JpdGUoKQogCiAgIFNjZW5hcmlvOiBnX2lvX3dyaXRlWGtyeW9YCi0gICAgR2l2ZW4gYW4gdW5zdXBwb3J0ZWQgdGVzdAotICAgIFRoZW4gbm90aGluZyBzaG91bGQgaGFwcGVuIGJlY2F1c2UKKyAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKICAgICAgICIiIgotICAgICAgV2UgZG9uJ3QgaGF2ZSBhIG5pY2Ugd2F5IHRvIGFzc2VydCB0aGUgcmVtb3RlbHkgd3JpdHRlbiBmaWxlIHdpdGggdGhpcyBmcmFtZXdvcmsgLSBqdXN0IHRlc3RpbmcgY29tcGlsYXRpb24uCisgICAgICBnLmlvKCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW8iKS53cml0ZSgpCiAgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIG5leHQKKyAgICBUaGVuIHRoZSBmaWxlICJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW8iIHNob3VsZCBleGlzdAogCiAgIFNjZW5hcmlvOiBnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyeW9YCi0gICAgR2l2ZW4gYW4gdW5zdXBwb3J0ZWQgdGVzdAotICAgIFRoZW4gbm90aGluZyBzaG91bGQgaGFwcGVuIGJlY2F1c2UKKyAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKICAgICAgICIiIgotICAgICAgV2UgZG9uJ3QgaGF2ZSBhIG5pY2Ugd2F5IHRvIGFzc2VydCB0aGUgcmVtb3RlbHkgd3JpdHRlbiBmaWxlIHdpdGggdGhpcyBmcmFtZXdvcmsgLSBqdXN0IHRlc3RpbmcgY29tcGlsYXRpb24uCisgICAgICBnLmlvKCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmtyeW8iKS53aXRoKElPLndyaXRlciwgSU8uZ3J5bykud3JpdGUoKQogICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCBuZXh0CisgICAgVGhlbiB0aGUgZmlsZSAidGlua2VycG9wLW1vZGVybi12My5rcnlvIiBzaG91bGQgZXhpc3QKIAogICBTY2VuYXJpbzogZ19pb193cml0ZVhncmFwaHNvblgKLSAgICBHaXZlbiBhbiB1bnN1cHBvcnRlZCB0ZXN0Ci0gICAgVGhlbiBub3RoaW5nIHNob3VsZCBoYXBwZW4gYmVjYXVzZQorICAgIEdpdmVuIHRoZSBtb2Rlcm4gZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgogICAgICAgIiIiCi0gICAgICBXZSBkb24ndCBoYXZlIGEgbmljZSB3YXkgdG8gYXNzZXJ0IHRoZSByZW1vdGVseSB3cml0dGVuIGZpbGUgd2l0aCB0aGlzIGZyYW1ld29yayAtIGp1c3QgdGVzdGluZyBjb21waWxhdGlvbi4KKyAgICAgIGcuaW8oInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvbiIpLndyaXRlKCkKICAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgbmV4dAorICAgIFRoZW4gdGhlIGZpbGUgInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvbiIgc2hvdWxkIGV4aXN0CiAKICAgU2NlbmFyaW86IGdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhzb25YCi0gICAgR2l2ZW4gYW4gdW5zdXBwb3J0ZWQgdGVzdAotICAgIFRoZW4gbm90aGluZyBzaG91bGQgaGFwcGVuIGJlY2F1c2UKKyAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKICAgICAgICIiIgotICAgICAgV2UgZG9uJ3QgaGF2ZSBhIG5pY2Ugd2F5IHRvIGFzc2VydCB0aGUgcmVtb3RlbHkgd3JpdHRlbiBmaWxlIHdpdGggdGhpcyBmcmFtZXdvcmsgLSBqdXN0IHRlc3RpbmcgY29tcGlsYXRpb24uCisgICAgICBnLmlvKCJ0aW5rZXJwb3AtbW9kZXJuLXYzLmpzb24iKS53aXRoKElPLndyaXRlciwgSU8uZ3JhcGhzb24pLndyaXRlKCkKICAgICAgICIiIgorICAgIFdoZW4gaXRlcmF0ZWQgbmV4dAorICAgIFRoZW4gdGhlIGZpbGUgInRpbmtlcnBvcC1tb2Rlcm4tdjMuanNvbiIgc2hvdWxkIGV4aXN0CiAKICAgU2NlbmFyaW86IGdfaW9fd3JpdGVYZ3JhcGhtbFgKLSAgICBHaXZlbiBhbiB1bnN1cHBvcnRlZCB0ZXN0Ci0gICAgVGhlbiBub3RoaW5nIHNob3VsZCBoYXBwZW4gYmVjYXVzZQorICAgIEdpdmVuIHRoZSBtb2Rlcm4gZ3JhcGgKKyAgICBBbmQgdGhlIHRyYXZlcnNhbCBvZgogICAgICAgIiIiCi0gICAgICBXZSBkb24ndCBoYXZlIGEgbmljZSB3YXkgdG8gYXNzZXJ0IHRoZSByZW1vdGVseSB3cml0dGVuIGZpbGUgd2l0aCB0aGlzIGZyYW1ld29yayAtIGp1c3QgdGVzdGluZyBjb21waWxhdGlvbi4KKyAgICAgIGcuaW8oInRpbmtlcnBvcC1tb2Rlcm4ueG1sIikud3JpdGUoKQogICAgICAgIiIiCisgICAgV2hlbiBpdGVyYXRlZCBuZXh0CisgICAgVGhlbiB0aGUgZmlsZSAidGlua2VycG9wLW1vZGVybi54bWwiIHNob3VsZCBleGlzdAogCiAgIFNjZW5hcmlvOiBnX2lvX3dyaXRlX3dpdGhYd3JpdGVyX2dyYXBobWxYCi0gICAgR2l2ZW4gYW4gdW5zdXBwb3J0ZWQgdGVzdAotICAgIFRoZW4gbm90aGluZyBzaG91bGQgaGFwcGVuIGJlY2F1c2UKKyAgICBHaXZlbiB0aGUgbW9kZXJuIGdyYXBoCisgICAgQW5kIHRoZSB0cmF2ZXJzYWwgb2YKICAgICAgICIiIgotICAgICAgV2UgZG9uJ3QgaGF2ZSBhIG5pY2Ugd2F5IHRvIGFzc2VydCB0aGUgcmVtb3RlbHkgd3JpdHRlbiBmaWxlIHdpdGggdGhpcyBmcmFtZXdvcmsgLSBqdXN0IHRlc3RpbmcgY29tcGlsYXRpb24uCi0gICAgICAiIiIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgICAgICBnLmlvKCJ0aW5rZXJwb3AtbW9kZXJuLnhtbCIpLndpdGgoSU8ud3JpdGVyLCBJTy5ncmFwaG1sKS53cml0ZSgpCisgICAgICAiIiIKKyAgICBXaGVuIGl0ZXJhdGVkIG5leHQKKyAgICBUaGVuIHRoZSBmaWxlICJ0aW5rZXJwb3AtbW9kZXJuLnhtbCIgc2hvdWxkIGV4aXN0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL0ZlYXR1cmVDb3ZlcmFnZVRlc3QuamF2YSBiL2dyZW1saW4tdGVzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9GZWF0dXJlQ292ZXJhZ2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMzBlNDguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10ZXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL0ZlYXR1cmVDb3ZlcmFnZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3M7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLkJyYW5jaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmJyYW5jaC5DaG9vc2VUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guTG9jYWxUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guT3B0aW9uYWxUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5icmFuY2guUmVwZWF0VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuYnJhbmNoLlVuaW9uVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkFuZFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5Db2luVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLkN5Y2xpY1BhdGhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRGVkdXBUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRHJvcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5GaWx0ZXJUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuSGFzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLklzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLk9yVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlJhbmdlVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlNhbXBsZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5TaW1wbGVQYXRoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuZmlsdGVyLlRhaWxUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuV2hlcmVUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQWRkRWRnZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5BZGRWZXJ0ZXhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ29hbGVzY2VUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ29uc3RhbnRUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuQ291bnRUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuRmxhdE1hcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Gb2xkVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkdyYXBoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkxvb3BzVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1heFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NZWFuVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1pblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5PcmRlclRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QYWdlUmFua1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QYXRoVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlBlZXJQcmVzc3VyZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9qZWN0VGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlByb3BlcnRpZXNUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUmVhZFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TZWxlY3RUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuU3VtVGVzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlVuZm9sZFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5WYWx1ZU1hcFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5WZXJ0ZXhUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuV3JpdGVUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkFnZ3JlZ2F0ZVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuR3JvdXBDb3VudFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuR3JvdXBUZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LkluamVjdFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2Fja1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2lkZUVmZmVjdENhcFRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQG9yZy5qdW5pdC5JZ25vcmUoIkRvbid0IHRoaW5rIHdlIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBzeW5jIGFueW1vcmUsIGJ1dCBub3QgcXVpdGUgcmVhZHkgdG8gZGVsZXRlIHRoaXMgYWxsIHRvZ2V0aGVyIikKLXB1YmxpYyBjbGFzcyBGZWF0dXJlQ292ZXJhZ2VUZXN0IHsKLQotICAgIHByaXZhdGUgc3RhdGljIFBhdHRlcm4gc2NlbmFyaW9OYW1lID0gUGF0dGVybi5jb21waWxlKCJeXFxzKlNjZW5hcmlvOlxccyooLiopJCIpOwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRJbXBsZW1lbnRBbGxQcm9jZXNzVGVzdHNBc0ZlYXR1cmVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgLy8gVEVNUE9SQVJZIHdoaWxlIHRlc3QgZnJhbWV3b3JrIGlzIHVuZGVyIGRldmVsb3BtZW50IC0gYWxsIHRlc3RzIHNob3VsZCB1bHRpbWF0ZWx5IGJlIGluY2x1ZGVkCi0gICAgICAgIGZpbmFsIExpc3Q8Q2xhc3M8Pz4+IHRlbXAgPSBBcnJheXMuYXNMaXN0KAotICAgICAgICAgICAgICAgIC8vIGJyYW5jaAotICAgICAgICAgICAgICAgIEJyYW5jaFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgQ2hvb3NlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBMb2NhbFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgT3B0aW9uYWxUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFJlcGVhdFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgVW5pb25UZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIC8vIGZpbHRlcgotICAgICAgICAgICAgICAgIEFuZFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgQ29pblRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgQ3ljbGljUGF0aFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgRGVkdXBUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIERyb3BUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIEZpbHRlclRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgSGFzVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBJc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgT3JUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFJhbmdlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBTYW1wbGVUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFNpbXBsZVBhdGhUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFRhaWxUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFdoZXJlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICAvLyBtYXAKLSAgICAgICAgICAgICAgICBBZGRFZGdlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBBZGRWZXJ0ZXhUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIENvYWxlc2NlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBDb25zdGFudFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgQ291bnRUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIEZsYXRNYXBUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIEZvbGRUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIEdyYXBoVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBMb29wc1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgTWFwVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBNYXRoVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBNYXRjaFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgTWF4VGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBNZWFuVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBNaW5UZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIE9yZGVyVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBQYWdlUmFua1Rlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgUGF0aFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgUGVlclByZXNzdXJlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICAvLyBQcm9maWxlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICAvLyBQcm9ncmFtVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBQcm9qZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBTZWxlY3RUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFN1bVRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgVW5mb2xkVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBWYWx1ZU1hcFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgVmVydGV4VGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICAvLyBzaWRlRWZmZWN0Ci0gICAgICAgICAgICAgICAgQWdncmVnYXRlVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICAvLyBFeHBsYWluVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBHcm91cENvdW50VGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBHcm91cFRlc3QuY2xhc3MsCi0gICAgICAgICAgICAgICAgSW5qZWN0VGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBSZWFkVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBTYWNrVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICBTaWRlRWZmZWN0Q2FwVGVzdC5jbGFzcywKLSAgICAgICAgICAgICAgICAvL1NpZGVFZmZlY3RUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIFdyaXRlVGVzdC5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgLy8gU3ViZ3JhcGhUZXN0LmNsYXNzLAotICAgICAgICAgICAgICAgIC8vIFRyZWVUZXN0LmNsYXNzKTsKLQotICAgICAgICBmaW5hbCBGaWVsZCBmaWVsZCA9IFByb2Nlc3NTdGFuZGFyZFN1aXRlLmNsYXNzLmdldERlY2xhcmVkRmllbGQoInRlc3RzVG9FbmZvcmNlIik7Ci0gICAgICAgIGZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0gICAgICAgIGZpbmFsIENsYXNzPD8+W10gdGVzdHNUb0VuZm9yY2UgPSAoQ2xhc3M8Pz5bXSkgZmllbGQuZ2V0KG51bGwpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8Q2xhc3M8Pz4+IHRlc3RDbGFzc2VzVG9FbmZvcmNlID0gU3RyZWFtLm9mKHRlc3RzVG9FbmZvcmNlKS5maWx0ZXIodGVtcDo6Y29udGFpbnMpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7Ci0gICAgICAgIGZvciAoQ2xhc3M8Pz4gdCA6IHRlc3RDbGFzc2VzVG9FbmZvcmNlKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2dlID0gdC5nZXRQYWNrYWdlKCkuZ2V0TmFtZSgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdyb3VwID0gcGFja2dlLnN1YnN0cmluZyhwYWNrZ2UubGFzdEluZGV4T2YoIi4iKSArIDEsIHBhY2tnZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZmVhdHVyZUZpbGVOYW1lID0gIm9yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcyIgKyBGaWxlLnNlcGFyYXRvciArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgKyBGaWxlLnNlcGFyYXRvciArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5nZXRTaW1wbGVOYW1lKCkucmVwbGFjZSgiVGVzdCIsICIiKSArICIuZmVhdHVyZSI7Ci0gICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiB0ZXN0TWV0aG9kcyA9IFN0cmVhbS5vZih0LmdldERlY2xhcmVkTWV0aG9kcygpKQotICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG0gLT4gbS5pc0Fubm90YXRpb25QcmVzZW50KFRlc3QuY2xhc3MpKQotICAgICAgICAgICAgICAgICAgICAubWFwKE1ldGhvZDo6Z2V0TmFtZSkuY29sbGVjdChDb2xsZWN0b3JzLnRvU2V0KCkpOwotCi0gICAgICAgICAgICBmaW5hbCBGaWxlIGZlYXR1cmVGaWxlID0gbmV3IEZpbGUoZmVhdHVyZUZpbGVOYW1lKTsKLSAgICAgICAgICAgIGFzc2VydFRoYXQoIldoZXJlIGlzOiAiICsgZmVhdHVyZUZpbGVOYW1lLCBmZWF0dXJlRmlsZS5leGlzdHMoKSwgaXModHJ1ZSkpOwotICAgICAgICAgICAgYXNzZXJ0VGhhdChmZWF0dXJlRmlsZS5pc0ZpbGUoKSwgaXModHJ1ZSkpOwotCi0gICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiB0ZXN0c0luRmVhdHVyZUZpbGUgPSBuZXcgSGFzaFNldDw+KCk7Ci0gICAgICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmVhdHVyZUZpbGUpOwotICAgICAgICAgICAgZmluYWwgQnVmZmVyZWRSZWFkZXIgYnVmID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOwotICAgICAgICAgICAgU3RyaW5nIGxpbmUgPSBidWYucmVhZExpbmUoKTsKLSAgICAgICAgICAgIHdoaWxlKGxpbmUgIT0gbnVsbCl7Ci0gICAgICAgICAgICAgICAgZmluYWwgTWF0Y2hlciBtYXRjaGVyID0gc2NlbmFyaW9OYW1lLm1hdGNoZXIobGluZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXIubWF0Y2hlcygpKQotICAgICAgICAgICAgICAgICAgICB0ZXN0c0luRmVhdHVyZUZpbGUuYWRkKG1hdGNoZXIuZ3JvdXAoMSkpOwotICAgICAgICAgICAgICAgIGxpbmUgPSBidWYucmVhZExpbmUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGVzdE1ldGhvZHMucmVtb3ZlQWxsKHRlc3RzSW5GZWF0dXJlRmlsZSk7Ci0KLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiQWxsIHRlc3QgbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkIGluIHRoZSAiICsgZmVhdHVyZUZpbGVOYW1lICsgIjogIiArIHRlc3RNZXRob2RzLCAwLCB0ZXN0TWV0aG9kcy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9wb20ueG1sIGIvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9wb20ueG1sCmluZGV4IDAxZWNiN2EuLmMyNTM3YTggMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvcG9tLnhtbAorKysgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8YXJ0aWZhY3RJZD5ncmVtbGluLXRvb2xzPC9hcnRpZmFjdElkPgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogCiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1iZW5jaG1hcms8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvR3JhcGhCaW5hcnlSZWFkZXJXcml0ZXJCZW5jaG1hcmsuamF2YSBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9HcmFwaEJpbmFyeVJlYWRlcldyaXRlckJlbmNobWFyay5qYXZhCmluZGV4IGQ5YmRiYzkuLmIyY2YwODUgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9HcmFwaEJpbmFyeVJlYWRlcldyaXRlckJlbmNobWFyay5qYXZhCisrKyBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9HcmFwaEJpbmFyeVJlYWRlcldyaXRlckJlbmNobWFyay5qYXZhCkBAIC0yMCw4ICsyMCw4IEBACiAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmJlbmNobWFyay51dGlsLkFic3RyYWN0QmVuY2htYXJrQmFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkdyZW1saW5MYW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuTmV0dHlCdWZmZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKQEAgLTU2LDIxICs1NiwyMSBAQAogICAgICAgICBwdWJsaWMgQnVmZmVyIGJ5dGVjb2RlQnVmZmVyMSA9IGJ1ZmZlckZhY3RvcnkuY3JlYXRlKGFsbG9jYXRvci5idWZmZXIoMjA0OCkpOwogICAgICAgICBwdWJsaWMgQnVmZmVyIGJ5dGVjb2RlQnVmZmVyMiA9IGJ1ZmZlckZhY3RvcnkuY3JlYXRlKGFsbG9jYXRvci5idWZmZXIoMjA0OCkpOwogICAgICAgICBwdWJsaWMgQnVmZmVyIHBCdWZmZXIxID0gYnVmZmVyRmFjdG9yeS5jcmVhdGUoYWxsb2NhdG9yLmJ1ZmZlcigyMDQ4KSk7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBCeXRlY29kZSBieXRlY29kZTEgPSBuZXcgQnl0ZWNvZGUoKTsKKyAgICAgICAgcHVibGljIGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nMSA9IG5ldyBHcmVtbGluTGFuZygpOwogCiAgICAgICAgIHB1YmxpYyBCdWZmZXIgYnVmZmVyV3JpdGUgPSBidWZmZXJGYWN0b3J5LmNyZWF0ZShhbGxvY2F0b3IuYnVmZmVyKDIwNDgpKTsKIAotICAgICAgICBwdWJsaWMgQnl0ZWNvZGUgYnl0ZWNvZGUyOworICAgICAgICBwdWJsaWMgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcyOwogCiAgICAgICAgIEBTZXR1cChMZXZlbC5UcmlhbCkKICAgICAgICAgcHVibGljIHZvaWQgZG9TZXR1cCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBieXRlY29kZTEuYWRkU3RlcCgiViIpOwotICAgICAgICAgICAgYnl0ZWNvZGUxLmFkZFN0ZXAoInZhbHVlcyIsICJuYW1lIik7Ci0gICAgICAgICAgICBieXRlY29kZTEuYWRkU3RlcCgidGFpbCIsIDUpOworICAgICAgICAgICAgZ3JlbWxpbkxhbmcxLmFkZFN0ZXAoIlYiKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nMS5hZGRTdGVwKCJ2YWx1ZXMiLCAibmFtZSIpOworICAgICAgICAgICAgZ3JlbWxpbkxhbmcxLmFkZFN0ZXAoInRhaWwiLCA1KTsKIAogICAgICAgICAgICAgR3JhcGggZyA9IFRpbmtlckdyYXBoLm9wZW4oKTsKIAotICAgICAgICAgICAgYnl0ZWNvZGUyID0gZy50cmF2ZXJzYWwoKQorICAgICAgICAgICAgZ3JlbWxpbkxhbmcyID0gZy50cmF2ZXJzYWwoKQogICAgICAgICAgICAgICAgICAgICAuYWRkVigicGVyc29uIikKICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5KCJuYW1lMSIsIDEpCiAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgibmFtZTIiLCBVVUlELnJhbmRvbVVVSUQoKSkKQEAgLTc4LDEwICs3OCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAucHJvcGVydHkoIm5hbWU0IiwgQmlnSW50ZWdlci52YWx1ZU9mKDMzMzQzNDU1MzQyMjQ1TCkpCiAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgibmFtZTUiLCAia2psa2RudmxrZHJudmxkbnZuZGxya3ZubGhramRrZ2tydG5sa25kYmxrbmxrbm9uYm9pcm5sa2JucnRib25yb2Jpbm9rYm5ya2xuYmtybmJsa3RlbmdvdHJuZ290a3JuZ2xrdCIpCiAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgibmFtZTYiLCBJbnN0YW50Lm5vdygpKQotICAgICAgICAgICAgICAgICAgICAuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIC5hc0FkbWluKCkuZ2V0R3JlbWxpbkxhbmcoKTsKIAotICAgICAgICAgICAgd3JpdGVyLndyaXRlVmFsdWUoYnl0ZWNvZGUxLCBieXRlY29kZUJ1ZmZlcjEsIGZhbHNlKTsKLSAgICAgICAgICAgIHdyaXRlci53cml0ZVZhbHVlKGJ5dGVjb2RlMiwgYnl0ZWNvZGVCdWZmZXIyLCBmYWxzZSk7CisgICAgICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShncmVtbGluTGFuZzEsIGJ5dGVjb2RlQnVmZmVyMSwgZmFsc2UpOworICAgICAgICAgICAgd3JpdGVyLndyaXRlVmFsdWUoZ3JlbWxpbkxhbmcyLCBieXRlY29kZUJ1ZmZlcjIsIGZhbHNlKTsKICAgICAgICAgICAgIHdyaXRlci53cml0ZVZhbHVlKFAuYmV0d2VlbigxLCAyKSwgcEJ1ZmZlcjEsIGZhbHNlKTsKICAgICAgICAgfQogCkBAIC0xMDQsMjIgKzEwNCwyMiBAQAogCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZWNvZGUxKEJlbmNobWFya1N0YXRlIHN0YXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShzdGF0ZS5ieXRlY29kZTEsIHN0YXRlLmJ1ZmZlcldyaXRlLCBmYWxzZSk7CisgICAgICAgIHdyaXRlci53cml0ZVZhbHVlKHN0YXRlLmdyZW1saW5MYW5nMSwgc3RhdGUuYnVmZmVyV3JpdGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBAQmVuY2htYXJrCiAgICAgcHVibGljIHZvaWQgd3JpdGVCeXRlY29kZTIoQmVuY2htYXJrU3RhdGUgc3RhdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHdyaXRlci53cml0ZVZhbHVlKHN0YXRlLmJ5dGVjb2RlMiwgc3RhdGUuYnVmZmVyV3JpdGUsIGZhbHNlKTsKKyAgICAgICAgd3JpdGVyLndyaXRlVmFsdWUoc3RhdGUuZ3JlbWxpbkxhbmcyLCBzdGF0ZS5idWZmZXJXcml0ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIEBCZW5jaG1hcmsKICAgICBwdWJsaWMgdm9pZCByZWFkQnl0ZWNvZGUxKEJlbmNobWFya1N0YXRlIHN0YXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICByZWFkZXIucmVhZFZhbHVlKHN0YXRlLmJ5dGVjb2RlQnVmZmVyMSwgQnl0ZWNvZGUuY2xhc3MsIGZhbHNlKTsKKyAgICAgICAgcmVhZGVyLnJlYWRWYWx1ZShzdGF0ZS5ieXRlY29kZUJ1ZmZlcjEsIEdyZW1saW5MYW5nLmNsYXNzLCBmYWxzZSk7CiAgICAgfQogCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyB2b2lkIHJlYWRCeXRlY29kZTIoQmVuY2htYXJrU3RhdGUgc3RhdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJlYWRlci5yZWFkVmFsdWUoc3RhdGUuYnl0ZWNvZGVCdWZmZXIyLCBCeXRlY29kZS5jbGFzcywgZmFsc2UpOworICAgICAgICByZWFkZXIucmVhZFZhbHVlKHN0YXRlLmJ5dGVjb2RlQnVmZmVyMiwgR3JlbWxpbkxhbmcuY2xhc3MsIGZhbHNlKTsKICAgICB9CiAKICAgICBAQmVuY2htYXJrCmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvR3JhcGhTT05NYXBwZXJCZW5jaG1hcmsuamF2YSBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9HcmFwaFNPTk1hcHBlckJlbmNobWFyay5qYXZhCmluZGV4IDg3OGY2YjguLjlhNjRkZjQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9HcmFwaFNPTk1hcHBlckJlbmNobWFyay5qYXZhCisrKyBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9HcmFwaFNPTk1hcHBlckJlbmNobWFyay5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZHJpdmVyOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuYmVuY2htYXJrLnV0aWwuQWJzdHJhY3RCZW5jaG1hcmtCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlZlcnNpb247CkBAIC01MSwyMCArNTEsMjAgQEAKICAgICBAU3RhdGUoU2NvcGUuVGhyZWFkKQogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQmVuY2htYXJrU3RhdGUgewogCi0gICAgICAgIHB1YmxpYyBieXRlW10gYnl0ZWNvZGVCeXRlczE7Ci0gICAgICAgIHByaXZhdGUgYnl0ZVtdIGJ5dGVjb2RlQnl0ZXMyOwotICAgICAgICBwcml2YXRlIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlMSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICBwcml2YXRlIEJ5dGVjb2RlIGJ5dGVjb2RlMjsKKyAgICAgICAgcHVibGljIGJ5dGVbXSBncmVtbGluQnl0ZXMxOworICAgICAgICBwcml2YXRlIGJ5dGVbXSBncmVtbGluQnl0ZXMyOworICAgICAgICBwcml2YXRlIGZpbmFsIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nMSA9IG5ldyBHcmVtbGluTGFuZygpOworICAgICAgICBwcml2YXRlIEdyZW1saW5MYW5nIGdyZW1saW5MYW5nMjsKIAogICAgICAgICBAU2V0dXAoTGV2ZWwuVHJpYWwpCiAgICAgICAgIHB1YmxpYyB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgYnl0ZWNvZGUxLmFkZFN0ZXAoIlYiKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlMS5hZGRTdGVwKCJ2YWx1ZXMiLCAibmFtZSIpOwotICAgICAgICAgICAgYnl0ZWNvZGUxLmFkZFN0ZXAoInRhaWwiLCA1KTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nMS5hZGRTdGVwKCJWIik7CisgICAgICAgICAgICBncmVtbGluTGFuZzEuYWRkU3RlcCgidmFsdWVzIiwgIm5hbWUiKTsKKyAgICAgICAgICAgIGdyZW1saW5MYW5nMS5hZGRTdGVwKCJ0YWlsIiwgNSk7CiAKICAgICAgICAgICAgIEdyYXBoIGcgPSBUaW5rZXJHcmFwaC5vcGVuKCk7CiAKLSAgICAgICAgICAgIGJ5dGVjb2RlMiA9IGcudHJhdmVyc2FsKCkKKyAgICAgICAgICAgIGdyZW1saW5MYW5nMiA9IGcudHJhdmVyc2FsKCkKICAgICAgICAgICAgICAgICAgICAgLmFkZFYoInBlcnNvbiIpCiAgICAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eSgibmFtZTEiLCAxKQogICAgICAgICAgICAgICAgICAgICAucHJvcGVydHkoIm5hbWUyIiwgVVVJRC5yYW5kb21VVUlEKCkpCkBAIC03MiwxMSArNzIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgLnByb3BlcnR5KCJuYW1lNCIsIEJpZ0ludGVnZXIudmFsdWVPZigzMzM0MzQ1NTM0MjI0NUwpKQogICAgICAgICAgICAgICAgICAgICAucHJvcGVydHkoIm5hbWU1IiwgImtqbGtkbnZsa2RybnZsZG52bmRscmt2bmxoa2pka2drcnRubGtuZGJsa25sa25vbmJvaXJubGtibnJ0Ym9ucm9iaW5va2JucmtsbmJrcm5ibGt0ZW5nb3RybmdvdGtybmdsa3QiKQogICAgICAgICAgICAgICAgICAgICAucHJvcGVydHkoIm5hbWU2IiwgSW5zdGFudC5ub3coKSkKLSAgICAgICAgICAgICAgICAgICAgLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpOworICAgICAgICAgICAgICAgICAgICAuYXNBZG1pbigpLmdldEdyZW1saW5MYW5nKCk7CiAKIAotICAgICAgICAgICAgYnl0ZWNvZGVCeXRlczEgPSBtYXBwZXIud3JpdGVWYWx1ZUFzQnl0ZXMoYnl0ZWNvZGUxKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlQnl0ZXMyID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKGJ5dGVjb2RlMik7CisgICAgICAgICAgICBncmVtbGluQnl0ZXMxID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKGdyZW1saW5MYW5nMSk7CisgICAgICAgICAgICBncmVtbGluQnl0ZXMyID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKGdyZW1saW5MYW5nMik7CiAgICAgICAgIH0KIAogICAgICAgICBAVGVhckRvd24oTGV2ZWwuVHJpYWwpCkBAIC04NiwyMSArODYsMjEgQEAKIAogICAgIEBCZW5jaG1hcmsKICAgICBwdWJsaWMgdm9pZCByZWFkQnl0ZWNvZGUxKEJlbmNobWFya1N0YXRlIHN0YXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBtYXBwZXIucmVhZFZhbHVlKHN0YXRlLmJ5dGVjb2RlQnl0ZXMxLCBCeXRlY29kZS5jbGFzcyk7CisgICAgICAgIG1hcHBlci5yZWFkVmFsdWUoc3RhdGUuZ3JlbWxpbkJ5dGVzMSwgR3JlbWxpbkxhbmcuY2xhc3MpOwogICAgIH0KIAogICAgIEBCZW5jaG1hcmsKICAgICBwdWJsaWMgdm9pZCByZWFkQnl0ZWNvZGUyKEJlbmNobWFya1N0YXRlIHN0YXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBtYXBwZXIucmVhZFZhbHVlKHN0YXRlLmJ5dGVjb2RlQnl0ZXMyLCBCeXRlY29kZS5jbGFzcyk7CisgICAgICAgIG1hcHBlci5yZWFkVmFsdWUoc3RhdGUuZ3JlbWxpbkJ5dGVzMiwgR3JlbWxpbkxhbmcuY2xhc3MpOwogICAgIH0KIAogICAgIEBCZW5jaG1hcmsKICAgICBwdWJsaWMgdm9pZCB3cml0ZUJ5dGVjb2RlMShCZW5jaG1hcmtTdGF0ZSBzdGF0ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhzdGF0ZS5ieXRlY29kZTEpOworICAgICAgICBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHN0YXRlLmdyZW1saW5MYW5nMSk7CiAgICAgfQogCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyB2b2lkIHdyaXRlQnl0ZWNvZGUyKEJlbmNobWFya1N0YXRlIHN0YXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBtYXBwZXIud3JpdGVWYWx1ZUFzQnl0ZXMoc3RhdGUuYnl0ZWNvZGUyKTsKKyAgICAgICAgbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKHN0YXRlLmdyZW1saW5MYW5nMik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1NlcmlhbGl6YXRpb25CZW5jaG1hcmsuamF2YSBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2RyaXZlci9TZXJpYWxpemF0aW9uQmVuY2htYXJrLmphdmEKaW5kZXggMDUxMjlmMy4uODc1ZmViMyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vZHJpdmVyL1NlcmlhbGl6YXRpb25CZW5jaG1hcmsuamF2YQorKysgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9kcml2ZXIvU2VyaWFsaXphdGlvbkJlbmNobWFyay5qYXZhCkBAIC0yMSwyMSArMjEsMjEgQEAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7CiBpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmJlbmNobWFyay51dGlsLkFic3RyYWN0QmVuY2htYXJrQmFzZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HcmVtbGluTGFuZzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuRGF0YVR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlVmVydGV4OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLm9wZW5qZGsuam1oLmFubm90YXRpb25zLkJlbmNobWFyazsKIGltcG9ydCBvcmcub3Blbmpkay5qbWguYW5ub3RhdGlvbnMuV2FybXVwOwogCiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuVVVJRDsKIAogaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdC5NSUxMSVNFQ09ORFM7CkBAIC01OCw3ICs1OCw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCeXRlQnVmIFJlcXVlc3RNZXNzYWdlQmluYXJ5QnVmZmVyMSA9IFVucG9vbGVkLndyYXBwZWRCdWZmZXIobmV3IGJ5dGVbXXsKICAgICAgICAgICAgIC8vIGZsYWcKLSAgICAgICAgICAgIChieXRlKTB4ODEsCisgICAgICAgICAgICAoYnl0ZSkweDg0LAogICAgICAgICAgICAgLy8gdXVpZAogICAgICAgICAgICAgKGJ5dGUpIDB4ZDMsIChieXRlKSAweGZkLCAweDM1LCAweDQwLCAweDY3LCAweDE4LCAweDQ2LCAoYnl0ZSkgMHg4NywoYnl0ZSkgMHg5NSwgMHg2YiwgKGJ5dGUpIDB4YzgsIDB4NjEsCiAgICAgICAgICAgICAoYnl0ZSkgMHg4YSwgMHgyNiwgKGJ5dGUpIDB4ZTMsIDB4MzUsCkBAIC03Miw3ICs3Miw3IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCeXRlQnVmIFJlcXVlc3RNZXNzYWdlQmluYXJ5QnVmZmVyMiA9IFVucG9vbGVkLndyYXBwZWRCdWZmZXIobmV3IGJ5dGVbXXsKICAgICAgICAgICAgIC8vIGZsYWcKLSAgICAgICAgICAgIChieXRlKTB4ODEsCisgICAgICAgICAgICAoYnl0ZSkweDg0LAogICAgICAgICAgICAgLy8gdXVpZAogICAgICAgICAgICAgKGJ5dGUpIDB4ZDMsIChieXRlKSAweGZkLCAweDM1LCAweDQwLCAweDY3LCAweDE4LCAweDQ2LCAoYnl0ZSkgMHg4NywoYnl0ZSkgMHg5NSwgMHg2YiwgKGJ5dGUpIDB4YzgsIDB4NjEsCiAgICAgICAgICAgICAoYnl0ZSkgMHg4YSwgMHgyNiwgKGJ5dGUpIDB4ZTMsIDB4MzUsCkBAIC05MCw4ICs5MCw2IEBACiAgICAgICAgICAgICBEYXRhVHlwZS5TVFJJTkcuZ2V0Q29kZUJ5dGUoKSwgMCwgMCwgMCwgMCwgMHgwMSwgMHg2NywKICAgICAgICAgICAgIC8vICJncmVtbGluIgogICAgICAgICAgICAgRGF0YVR5cGUuU1RSSU5HLmdldENvZGVCeXRlKCksIDAsIDAsIDAsIDAsIDB4MDcsIDB4NjcsIDB4NzIsIDB4NjUsIDB4NmQsIDB4NmMsIDB4NjksIDB4NmUsCi0gICAgICAgICAgICAvLyBCeXRlY29kZSBmb3IgWydWJywgJ3RhaWwnXQotICAgICAgICAgICAgRGF0YVR5cGUuQllURUNPREUuZ2V0Q29kZUJ5dGUoKSwgMCwgMCwgMCwgMCwgMHgwMiwKICAgICAgICAgICAgIC8vICJWIiAobm8gdmFsdWVzKQogICAgICAgICAgICAgMCwgMCwgMCwgMHgxLCAweDU2LCAwLCAwLCAwLCAwLAogICAgICAgICAgICAgLy8gdGFpbCAobm8gdmFsdWVzKQpAQCAtMTAzLDQ4ICsxMDEsNDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVVUlEIGlkID0gVVVJRC5yYW5kb21VVUlEKCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UKLSAgICAgICAgICAgIC5idWlsZChVVUlELnJhbmRvbVVVSUQoKSkuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUykucmVzdWx0KG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMSwgInBlcnNvbiIpKQorICAgICAgICAgICAgLmJ1aWxkKCkuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spLnJlc3VsdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KG5ldyBSZWZlcmVuY2VWZXJ0ZXgoMSwgInBlcnNvbiIpKSkKICAgICAgICAgICAgIC5jcmVhdGUoKTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlID0gbmV3IEJ5dGVjb2RlKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JlbWxpbkxhbmcgZ3JlbWxpbkxhbmcgPSBuZXcgR3JlbWxpbkxhbmcoKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UKLSAgICAgICAgICAgIC5idWlsZChUb2tlbnMuT1BTX0JZVEVDT0RFKS5wcm9jZXNzb3IoInRyYXZlcnNhbCIpLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgLmFkZChUb2tlbnMuQVJHU19HUkVNTElOLCBieXRlY29kZSkKKyAgICAgICAgICAgIC5idWlsZChncmVtbGluTGFuZy5nZXRHcmVtbGluKCkpCiAgICAgICAgICAgICAuY3JlYXRlKCk7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgYmluYXJ5U2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgZ3JhcGhzb25TZXJpYWxpemVyID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMygpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCBiaW5hcnlTZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBncmFwaHNvblNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KCk7CiAKICAgICBzdGF0aWMgewotICAgICAgICBieXRlY29kZS5hZGRTdGVwKCJWIik7Ci0gICAgICAgIGJ5dGVjb2RlLmFkZFN0ZXAoInZhbHVlcyIsICJuYW1lIik7Ci0gICAgICAgIGJ5dGVjb2RlLmFkZFN0ZXAoIm9yZGVyIik7Ci0gICAgICAgIGJ5dGVjb2RlLmFkZFN0ZXAoInRhaWwiLCA1KTsKKyAgICAgICAgZ3JlbWxpbkxhbmcuYWRkU3RlcCgiViIpOworICAgICAgICBncmVtbGluTGFuZy5hZGRTdGVwKCJ2YWx1ZXMiLCAibmFtZSIpOworICAgICAgICBncmVtbGluTGFuZy5hZGRTdGVwKCJvcmRlciIpOworICAgICAgICBncmVtbGluTGFuZy5hZGRTdGVwKCJ0YWlsIiwgNSk7CiAgICAgfQogCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSB0ZXN0UmVhZE1lc3NhZ2UxQmluYXJ5KCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewogICAgICAgICBSZXF1ZXN0TWVzc2FnZUJpbmFyeUJ1ZmZlcjEucmVhZGVySW5kZXgoMCk7CiAKLSAgICAgICAgcmV0dXJuIGJpbmFyeVNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KFJlcXVlc3RNZXNzYWdlQmluYXJ5QnVmZmVyMSk7CisgICAgICAgIHJldHVybiBiaW5hcnlTZXJpYWxpemVyLmRlc2VyaWFsaXplQmluYXJ5UmVxdWVzdChSZXF1ZXN0TWVzc2FnZUJpbmFyeUJ1ZmZlcjEpOwogICAgIH0KIAogICAgIEBCZW5jaG1hcmsKICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgdGVzdFJlYWRNZXNzYWdlMkJpbmFyeSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgUmVxdWVzdE1lc3NhZ2VCaW5hcnlCdWZmZXIyLnJlYWRlckluZGV4KDApOwotICAgICAgICByZXR1cm4gYmluYXJ5U2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlcXVlc3QoUmVxdWVzdE1lc3NhZ2VCaW5hcnlCdWZmZXIyKTsKKyAgICAgICAgcmV0dXJuIGJpbmFyeVNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXF1ZXN0KFJlcXVlc3RNZXNzYWdlQmluYXJ5QnVmZmVyMik7CiAgICAgfQogCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSB0ZXN0UmVhZE1lc3NhZ2UxR3JhcGhTT04oKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIFJlcXVlc3RNZXNzYWdlR3JhcGhTT05CdWZmZXIxLnJlYWRlckluZGV4KDApOwotICAgICAgICByZXR1cm4gZ3JhcGhzb25TZXJpYWxpemVyLmRlc2VyaWFsaXplUmVxdWVzdChSZXF1ZXN0TWVzc2FnZUdyYXBoU09OQnVmZmVyMSk7CisgICAgICAgIHJldHVybiBncmFwaHNvblNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXF1ZXN0KFJlcXVlc3RNZXNzYWdlR3JhcGhTT05CdWZmZXIxKTsKICAgICB9CiAKICAgICBAQmVuY2htYXJrCiAgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIHRlc3RSZWFkTWVzc2FnZTJHcmFwaFNPTigpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgUmVxdWVzdE1lc3NhZ2VHcmFwaFNPTkJ1ZmZlcjIucmVhZGVySW5kZXgoMCk7Ci0gICAgICAgIHJldHVybiBncmFwaHNvblNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KFJlcXVlc3RNZXNzYWdlR3JhcGhTT05CdWZmZXIyKTsKKyAgICAgICAgcmV0dXJuIGdyYXBoc29uU2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlcXVlc3QoUmVxdWVzdE1lc3NhZ2VHcmFwaFNPTkJ1ZmZlcjIpOwogICAgIH0KIAogICAgIEBCZW5jaG1hcmsKQEAgLTE3Myw2ICsxNzAsNiBAQAogCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSB0ZXN0SW5zdGFuY2VDcmVhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJhIikub3ZlcnJpZGVSZXF1ZXN0SWQoaWQpLnByb2Nlc3NvcigiYiIpLmNyZWF0ZSgpOworICAgICAgICByZXR1cm4gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImEiKS5hZGRMYW5ndWFnZSgiZ3JlbWxpbi1ncm9vdnkiKS5hZGRHKCJnIikuY3JlYXRlKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9UcmF2ZXJzYWxDb25zdHJ1Y3Rpb25CZW5jaG1hcmsuamF2YSBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1iZW5jaG1hcmsvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3Byb2Nlc3MvVHJhdmVyc2FsQ29uc3RydWN0aW9uQmVuY2htYXJrLmphdmEKaW5kZXggMDU0YzFiYi4uMGU2N2ZhZCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vcHJvY2Vzcy9UcmF2ZXJzYWxDb25zdHJ1Y3Rpb25CZW5jaG1hcmsuamF2YQorKysgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9wcm9jZXNzL1RyYXZlcnNhbENvbnN0cnVjdGlvbkJlbmNobWFyay5qYXZhCkBAIC0xOSw5ICsxOSw5IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2VzczsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmJlbmNobWFyay51dGlsLkFic3RyYWN0R3JhcGhCZW5jaG1hcms7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CaW5kaW5nczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLkdWYWx1ZTsKIGltcG9ydCBvcmcub3Blbmpkay5qbWguYW5ub3RhdGlvbnMuQmVuY2htYXJrOwogCiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CkBAIC01Miw4ICs1Miw2IEBACiAgICAgICAgIHB1dCgiazkiLCAidjkiKTsKICAgICB9fTsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJpbmRpbmdzIGIgPSBCaW5kaW5ncy5pbnN0YW5jZSgpOwotCiAgICAgQEJlbmNobWFyawogICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbCBjb25zdHJ1Y3RTaG9ydCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gZy5WKCkub3V0KCJrbm93cyIpOwpAQCAtNzQsOCArNzIsOCBAQAogICAgIH0KIAogICAgIEBCZW5jaG1hcmsKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwgY29uc3RydWN0TWVkaXVtV2l0aEJpbmRpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBnLlYoKS5oYXMoInBlcnNvbiIsIm5hbWUiLGIub2YoIngiLCJtYXJrbyIpKS4KKyAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwgY29uc3RydWN0TWVkaXVtV2l0aEJpbmRpbmdzKCkgeworICAgICAgICByZXR1cm4gZy5WKCkuaGFzKCJwZXJzb24iLCJuYW1lIiwgR1ZhbHVlLm9mKCJ4IiwibWFya28iKSkuCiAgICAgICAgICAgICAgICAgcHJvamVjdCgidXNlciIsImtub3dzIiwiY3JlYXRlZCIpLgogICAgICAgICAgICAgICAgIGJ5KHByb2plY3QoIm5hbWUiLCJhZ2UiKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKSkuCiAgICAgICAgICAgICAgICAgYnkob3V0KCJrbm93cyIpLnByb2plY3QoIm5hbWUiLCJhZ2UiKS5ieSgibmFtZSIpLmJ5KCJhZ2UiKSkuCmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvanNyMjIzL0phdmFUcmFuc2xhdG9yQmVuY2htYXJrLmphdmEgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tYmVuY2htYXJrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvanNyMjIzL0phdmFUcmFuc2xhdG9yQmVuY2htYXJrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1MjRkN2IuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWJlbmNobWFyay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2pzcjIyMy9KYXZhVHJhbnNsYXRvckJlbmNobWFyay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuYmVuY2htYXJrLnV0aWwuQWJzdHJhY3RCZW5jaG1hcmtCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkphdmFUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uU3ViZ3JhcGhTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LnZlcmlmaWNhdGlvbi5SZWFkT25seVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmVtcHR5LkVtcHR5R3JhcGg7Ci1pbXBvcnQgb3JnLm9wZW5qZGsuam1oLmFubm90YXRpb25zLkJlbmNobWFyazsKLWltcG9ydCBvcmcub3Blbmpkay5qbWguYW5ub3RhdGlvbnMuU2NvcGU7Ci1pbXBvcnQgb3JnLm9wZW5qZGsuam1oLmFubm90YXRpb25zLlN0YXRlOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmFzOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXNMYWJlbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uaW5FOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy52YWx1ZXM7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AU3RhdGUoU2NvcGUuVGhyZWFkKQotcHVibGljIGNsYXNzIEphdmFUcmFuc2xhdG9yQmVuY2htYXJrIGV4dGVuZHMgQWJzdHJhY3RCZW5jaG1hcmtCYXNlIHsKLQotICAgIHByaXZhdGUgZmluYWwgR3JhcGggZ3JhcGggPSBFbXB0eUdyYXBoLmluc3RhbmNlKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBKYXZhVHJhbnNsYXRvcjxHcmFwaFRyYXZlcnNhbFNvdXJjZSwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48VmVydGV4LFZlcnRleD4+IHRyYW5zbGF0b3IgPSBKYXZhVHJhbnNsYXRvci5vZihnKTsKLQotICAgIEBCZW5jaG1hcmsKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwuQWRtaW48VmVydGV4LFZlcnRleD4gdGVzdFRyYW5zbGF0aW9uU2hvcnQoKSB7Ci0gICAgICAgIHJldHVybiB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLlYoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgfQotCi0gICAgQEJlbmNobWFyawotICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbC5BZG1pbjxWZXJ0ZXgsVmVydGV4PiB0ZXN0VHJhbnNsYXRpb25NZWRpdW0oKSB7Ci0gICAgICAgIHJldHVybiB0cmFuc2xhdG9yLnRyYW5zbGF0ZShnLlYoKS5vdXQoKS5pbigibGluayIpLm91dCgpLmluKCJsaW5rIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCkpOwotICAgIH0KLQotICAgIEBCZW5jaG1hcmsKLSAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWwuQWRtaW48VmVydGV4LFZlcnRleD4gdGVzdFRyYW5zbGF0aW9uTG9uZygpIHsKLSAgICAgICAgcmV0dXJuIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcuVigpLm1hdGNoKAotICAgICAgICAgICAgICAgIGFzKCJhIikuaGFzKCJzb25nIiwgIm5hbWUiLCAiSEVSRSBDT01FUyBTVU5TSElORSIpLAotICAgICAgICAgICAgICAgIGFzKCJhIikubWFwKGluRSgiZm9sbG93ZWRCeSIpLnZhbHVlcygid2VpZ2h0IikubWVhbigpKS5hcygiYiIpLAotICAgICAgICAgICAgICAgIGFzKCJhIikuaW5FKCJmb2xsb3dlZEJ5IikuYXMoImMiKSwKLSAgICAgICAgICAgICAgICBhcygiYyIpLmZpbHRlcih2YWx1ZXMoIndlaWdodCIpLndoZXJlKFAuZ3RlKCJiIikpKS5vdXRWKCkuYXMoImQiKSkuCi0gICAgICAgICAgICAgICAgPFN0cmluZz5zZWxlY3QoImQiKS5ieSgibmFtZSIpLmFzQWRtaW4oKS5nZXRCeXRlY29kZSgpKTsKLSAgICB9Ci0KLSAgICBAQmVuY2htYXJrCi0gICAgcHVibGljIEdyYXBoVHJhdmVyc2FsLkFkbWluPFZlcnRleCxWZXJ0ZXg+IHRlc3RUcmFuc2xhdGlvbldpdGhTdHJhdGVneSgpIHsKLSAgICAgICAgcmV0dXJuIHRyYW5zbGF0b3IudHJhbnNsYXRlKGcud2l0aFN0cmF0ZWdpZXMoUmVhZE9ubHlTdHJhdGVneS5pbnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC53aXRoU3RyYXRlZ2llcyhTdWJncmFwaFN0cmF0ZWd5LmJ1aWxkKCkudmVydGljZXMoaGFzTGFiZWwoInBlcnNvbiIpKS5jcmVhdGUoKSkKLSAgICAgICAgICAgICAgICAuVigpLm91dCgpLmluKCJsaW5rIikub3V0KCkuaW4oImxpbmsiKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10b29scy9ncmVtbGluLWNvdmVyYWdlL3BvbS54bWwgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tY292ZXJhZ2UvcG9tLnhtbAppbmRleCAxNWNmZDE0Li5lZjZiOWFjIDEwMDY0NAotLS0gYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tY292ZXJhZ2UvcG9tLnhtbAorKysgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tY292ZXJhZ2UvcG9tLnhtbApAQCAtMjEsNyArMjEsNyBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tdG9vbHM8L2FydGlmYWN0SWQ+CiAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+NC4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1jb3ZlcmFnZTwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVGlua2VyUG9wIDo6IEdyZW1saW4gQ292ZXJhZ2U8L25hbWU+CkBAIC02OCwxMSArNjgsNiBAQAogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5uZW80ai1ncmVtbGluPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50aW5rZXJncmFwaC1ncmVtbGluPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mL3Rlc3Qtd3MtZ3JlbWxpbi55YW1sIGIvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvY29uZi90ZXN0LXdzLWdyZW1saW4ueWFtbAppbmRleCA1NjBlNDBlLi5hMzU4ZDRjIDEwMDY0NAotLS0gYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9jb25mL3Rlc3Qtd3MtZ3JlbWxpbi55YW1sCisrKyBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL2NvbmYvdGVzdC13cy1ncmVtbGluLnlhbWwKQEAgLTUwLDEwICs1MCw2IEBACiAjIHRoYXQgd2FzIGNhcHR1cmVkIGR1cmluZyB0aGUgd2ViIHNvY2tldCBoYW5kc2hha2UuCiBVU0VSX0FHRU5UX1JFUVVFU1RfSUQ6IDIwYWQ3YmZiLTRhYmYtZDdmNC1mOWQzLTlmMWQ1NWJlZTRhZAogCi0jIElmIGEgcmVxdWVzdCB3aXRoIHRoaXMgSUQgY29tZXMgdG8gdGhlIHNlcnZlciwgdGhlIHNlcnZlciByZXNwb25kcyB3aXRoIHRoZSBzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMgaGVhZGVyCi0jIGluY2x1ZGVkIGluIHRoZSBoYW5kc2hha2UgcmVxdWVzdC4KLVNFQ19XRUJTT0NLRVRfRVhURU5TSU9OUzogNzQ4MGQzZWMtZTI0YS00MjRhLTgxNDgtNjUyNzM3OGU5YjM1Ci0KICMgSWYgYSByZXF1ZXN0IHdpdGggdGhpcyBJRCBjb21lcyB0byB0aGUgc2VydmVyLCB0aGUgc2VydmVyIHJlc3BvbmRzIHdpdGggYSBzdHJpbmcgY29udGFpbmluZyBhbGwgb3ZlcnJpZGRlbgogIyBwZXIgcmVxdWVzdCBzZXR0aW5ncyBmcm9tIHRoZSByZXF1ZXN0IG1lc3NhZ2UuIFN0cmluZyB3aWxsIGJlIG9mIHRoZSBmb3JtCiAjICJyZXF1ZXN0SWQ9MTk0MzZkOWUtZjhmYy00YjY3LThhNzYtZGVlYzYwOTE4NDI0IGV2YWx1YXRpb25UaW1lb3V0PTEyMzQsIGJhdGNoU2l6ZT0xMiwgdXNlckFnZW50PXRlc3RVc2VyQWdlbnQiCmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9wb20ueG1sIGIvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvcG9tLnhtbAppbmRleCAzMjQ2MmFkLi41ZDI1YWFlIDEwMDY0NAotLS0gYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9wb20ueG1sCisrKyBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL3BvbS54bWwKQEAgLTUsNyArNSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi10b29sczwvYXJ0aWZhY3RJZD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjMuOC4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKQEAgLTMzLDIxICszMywxMSBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotYXBpPC9hcnRpZmFjdElkPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+amNsLW92ZXItc2xmNGo8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z3Jvb3Z5LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPG9wdGlvbmFsPnRydWU8L29wdGlvbmFsPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5ncm9vdnk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5ncm9vdnktanNvbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z3Jvb3Z5LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICAgICAgPG9wdGlvbmFsPnRydWU8L29wdGlvbmFsPgotICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAKICAgICA8cHJvcGVydGllcz4KZGlmZiAtLWdpdCBhL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zb2NrZXQvc2VydmVyL1NvY2tldFNlcnZlclJ1bm5lci5qYXZhIGIvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NvY2tldC9zZXJ2ZXIvU29ja2V0U2VydmVyUnVubmVyLmphdmEKaW5kZXggNjg3ZGJmMy4uODYzYzczOCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NvY2tldC9zZXJ2ZXIvU29ja2V0U2VydmVyUnVubmVyLmphdmEKKysrIGIvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NvY2tldC9zZXJ2ZXIvU29ja2V0U2VydmVyUnVubmVyLmphdmEKQEAgLTMxLDEwICszMSwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBmaW5hbCBTb2NrZXRTZXJ2ZXJTZXR0aW5ncyBzZXR0aW5ncyA9IFNvY2tldFNlcnZlclNldHRpbmdzLnJlYWQoRmlsZVN5c3RlbXMuZ2V0RGVmYXVsdCgpLmdldFBhdGgoImNvbmYiLCAidGVzdC13cy1ncmVtbGluLnlhbWwiKSk7CiAgICAgICAgIGZpbmFsIFNpbXBsZVNvY2tldFNlcnZlciBzZXJ2ZXIgPSBuZXcgU2ltcGxlU29ja2V0U2VydmVyKHNldHRpbmdzKTsKLSAgICAgICAgZmluYWwgQ2hhbm5lbCBjaGFubmVsID0gc2VydmVyLnN0YXJ0KG5ldyBUZXN0V1NHcmVtbGluSW5pdGlhbGl6ZXIoc2V0dGluZ3MpKTsKLSAgICAgICAgd2hpbGUoY2hhbm5lbC5pc09wZW4oKSkgewotICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotICAgICAgICB9CisgICAgICAgIC8vIFRPRE86IGFkZCBIVFRQIHZlcnNpb24gb2Ygc29ja2V0c2VydmVyCisvLyAgICAgICAgZmluYWwgQ2hhbm5lbCBjaGFubmVsID0gc2VydmVyLnN0YXJ0KG5ldyBUZXN0V1NHcmVtbGluSW5pdGlhbGl6ZXIoc2V0dGluZ3MpKTsKKy8vICAgICAgICB3aGlsZShjaGFubmVsLmlzT3BlbigpKSB7CisvLyAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKy8vICAgICAgICB9CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc29ja2V0L3NlcnZlci9Tb2NrZXRTZXJ2ZXJTZXR0aW5ncy5qYXZhIGIvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NvY2tldC9zZXJ2ZXIvU29ja2V0U2VydmVyU2V0dGluZ3MuamF2YQppbmRleCAxMWUyYjRhLi5iYzM1NTUxIDEwMDY0NAotLS0gYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc29ja2V0L3NlcnZlci9Tb2NrZXRTZXJ2ZXJTZXR0aW5ncy5qYXZhCisrKyBiL2dyZW1saW4tdG9vbHMvZ3JlbWxpbi1zb2NrZXQtc2VydmVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zb2NrZXQvc2VydmVyL1NvY2tldFNlcnZlclNldHRpbmdzLmphdmEKQEAgLTc0LDEyICs3NCw2IEBACiAgICAgcHVibGljIFVVSUQgVVNFUl9BR0VOVF9SRVFVRVNUX0lEID0gbnVsbDsKIAogICAgIC8qKgotICAgICAqIElmIGEgcmVxdWVzdCB3aXRoIHRoaXMgSUQgY29tZXMgdG8gdGhlIHNlcnZlciwgdGhlIHNlcnZlciByZXNwb25kcyB3aXRoIHRoZSBzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMgaGVhZGVyCi0gICAgICogaW5jbHVkZWQgaW4gdGhlIGhhbmRzaGFrZSByZXF1ZXN0LgotICAgICAqLwotICAgIHB1YmxpYyBVVUlEIFNFQ19XRUJTT0NLRVRfRVhURU5TSU9OUyA9IG51bGw7Ci0KLSAgICAvKioKICAgICAgKiBJZiBhIHJlcXVlc3Qgd2l0aCB0aGlzIElEIGNvbWVzIHRvIHRoZSBzZXJ2ZXIsIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBhIHN0cmluZyBjb250YWluaW5nIGFsbCBvdmVycmlkZGVuCiAgICAgICogcGVyIHJlcXVlc3Qgc2V0dGluZ3MgZnJvbSB0aGUgcmVxdWVzdCBtZXNzYWdlLiBTdHJpbmcgd2lsbCBiZSBvZiB0aGUgZm9ybQogICAgICAqICJyZXF1ZXN0SWQ9MTk0MzZkOWUtZjhmYy00YjY3LThhNzYtZGVlYzYwOTE4NDI0IGV2YWx1YXRpb25UaW1lb3V0PTEyMzQsIGJhdGNoU2l6ZT0xMiwgdXNlckFnZW50PXRlc3RVc2VyQWdlbnQiCmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc29ja2V0L3NlcnZlci9UZXN0Q2hhbm5lbGl6ZXJzLmphdmEgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc29ja2V0L3NlcnZlci9UZXN0Q2hhbm5lbGl6ZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NGYyNTMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NvY2tldC9zZXJ2ZXIvVGVzdENoYW5uZWxpemVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc29ja2V0LnNlcnZlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbEluaXRpYWxpemVyOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuQ2hhbm5lbFBpcGVsaW5lOwotaW1wb3J0IGlvLm5ldHR5LmNoYW5uZWwuc29ja2V0LlNvY2tldENoYW5uZWw7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBPYmplY3RBZ2dyZWdhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwU2VydmVyQ29kZWM7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLndlYnNvY2tldHguV2ViU29ja2V0U2VydmVyUHJvdG9jb2xIYW5kbGVyOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC53ZWJzb2NrZXR4LmV4dGVuc2lvbnMuY29tcHJlc3Npb24uV2ViU29ja2V0U2VydmVyQ29tcHJlc3Npb25IYW5kbGVyOwotCi0vKioKLSAqIENsYXNzIHRoYXQgaG9sZHMgdGhlIGNoYW5uZWxpemVycyB0aGF0IGNhbiB1c2VkIGZvciB0ZXN0aW5nIHdpdGggdGhlIFNpbXBsZVNvY2tldFNlcnZlci4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RDaGFubmVsaXplcnMgewotCi0gICAgLyoqCi0gICAgICogQSBiYXNlIENoYW5uZWxJbml0aWFsaXplciB0aGF0IHNldHVwcyB0aGUgcGlwZWxpbmUgZm9yIEhUVFAgaGFuZGxpbmcuIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIHN1Yi1jbGFzc2VkIGJ5IGEKLSAgICAgKiBoYW5kbGVyIHRoYXQgaGFuZGxlcyB0aGUgYWN0dWFsIGRhdGEgYmVpbmcgcmVjZWl2ZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBUZXN0SHR0cFNlcnZlckluaXRpYWxpemVyIGV4dGVuZHMgQ2hhbm5lbEluaXRpYWxpemVyPFNvY2tldENoYW5uZWw+IHsKLSAgICAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCU09DS0VUX1BBVEggPSAiL2dyZW1saW4iOwotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBpbml0Q2hhbm5lbChTb2NrZXRDaGFubmVsIGNoKSB7Ci0gICAgICAgICAgICBmaW5hbCBDaGFubmVsUGlwZWxpbmUgcGlwZWxpbmUgPSBjaC5waXBlbGluZSgpOwotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChuZXcgSHR0cFNlcnZlckNvZGVjKCkpOwotICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChuZXcgSHR0cE9iamVjdEFnZ3JlZ2F0b3IoNjU1MzYpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgdmFuaWxsYSBXZWJTb2NrZXQgc2VydmVyIEluaXRpYWxpemVyIGltcGxlbWVudGF0aW9uIHVzaW5nIE5ldHR5LiBUaGlzIGluaXRpYWxpemVyIHdvdWxkIGNvbmZpZ3VyZSB0aGUgc2VydmVyCi0gICAgICogZm9yIFdlYlNvY2tldCBoYW5kc2hha2UgYW5kIGRlY29kaW5nIGluY29taW5nIFdlYlNvY2tldCBmcmFtZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBUZXN0V2ViU29ja2V0U2VydmVySW5pdGlhbGl6ZXIgZXh0ZW5kcyBUZXN0Q2hhbm5lbGl6ZXJzLlRlc3RIdHRwU2VydmVySW5pdGlhbGl6ZXIgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBpbml0Q2hhbm5lbChTb2NrZXRDaGFubmVsIGNoKSB7Ci0gICAgICAgICAgICBzdXBlci5pbml0Q2hhbm5lbChjaCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSA9IGNoLnBpcGVsaW5lKCk7Ci0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KG5ldyBXZWJTb2NrZXRTZXJ2ZXJDb21wcmVzc2lvbkhhbmRsZXIoKSk7Ci0gICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KG5ldyBXZWJTb2NrZXRTZXJ2ZXJQcm90b2NvbEhhbmRsZXIoV0VCU09DS0VUX1BBVEgsIG51bGwsIHRydWUpKTsKLSAgICAgICAgICAgIHRoaXMucG9zdEluaXQoY2gucGlwZWxpbmUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBwb3N0SW5pdChmaW5hbCBDaGFubmVsUGlwZWxpbmUgY2gpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuIGluaXRpYWxpemVyIHRoYXQgYWRkcyBhIGhhbmRsZXIgdGhhdCB3aWxsIGRyb3AgV2ViU29ja2V0IGZyYW1lcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3RXU05vT3BJbml0aWFsaXplciBleHRlbmRzIFRlc3RIdHRwU2VydmVySW5pdGlhbGl6ZXIgewotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBpbml0Q2hhbm5lbChTb2NrZXRDaGFubmVsIGNoKSB7Ci0gICAgICAgICAgICBzdXBlci5pbml0Q2hhbm5lbChjaCk7Ci0gICAgICAgICAgICBjaC5waXBlbGluZSgpLmFkZExhc3QobmV3IFRlc3RIYW5kbGVycy5Ob09wV2ViU29ja2V0U2VydmVySGFuZGxlcihXRUJTT0NLRVRfUEFUSCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQW4gaW5pdGlhbGl6ZXIgdGhhdCBhZGRzIGEgaGFuZGxlciB0byBtaW1pY3MgYSBzZXJ2ZXIgdGhhdCBpcyB0aHJvdHRsaW5nIGNvbm5lY3Rpb25zLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVGVzdENvbm5lY3Rpb25UaHJvdHRsaW5nSW5pdGlhbGl6ZXIgZXh0ZW5kcyBUZXN0SHR0cFNlcnZlckluaXRpYWxpemVyIHsKLSAgICAgICAgaW50IGNvbm5lY3Rpb25Db3VudCA9IDA7Ci0gICAgICAgIHByaXZhdGUgU29ja2V0U2VydmVyU2V0dGluZ3Mgc2V0dGluZ3M7Ci0KLSAgICAgICAgcHVibGljIFRlc3RDb25uZWN0aW9uVGhyb3R0bGluZ0luaXRpYWxpemVyKFNvY2tldFNlcnZlclNldHRpbmdzIHNldHRpbmdzKSB7IHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5nczsgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBpbml0Q2hhbm5lbChTb2NrZXRDaGFubmVsIGNoKSB7Ci0gICAgICAgICAgICBzdXBlci5pbml0Q2hhbm5lbChjaCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSA9IGNoLnBpcGVsaW5lKCk7Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbkNvdW50IDwgMSkgewotICAgICAgICAgICAgICAgIHBpcGVsaW5lLmFkZExhc3QobmV3IFdlYlNvY2tldFNlcnZlckNvbXByZXNzaW9uSGFuZGxlcigpKTsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KG5ldyBXZWJTb2NrZXRTZXJ2ZXJQcm90b2NvbEhhbmRsZXIoV0VCU09DS0VUX1BBVEgsIG51bGwsIHRydWUpKTsKLSAgICAgICAgICAgICAgICBwaXBlbGluZS5hZGRMYXN0KG5ldyBUZXN0V1NHcmVtbGluSW5pdGlhbGl6ZXIuQ2xpZW50VGVzdENvbmZpZ3VyYWJsZUhhbmRsZXIoc2V0dGluZ3MpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGlwZWxpbmUuYWRkTGFzdChuZXcgVGVzdEhhbmRsZXJzLk5vT3BXZWJTb2NrZXRTZXJ2ZXJIYW5kbGVyKFdFQlNPQ0tFVF9QQVRIKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbm5lY3Rpb25Db3VudCsrOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi10b29scy9ncmVtbGluLXNvY2tldC1zZXJ2ZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NvY2tldC9zZXJ2ZXIvVGVzdFdTR3JlbWxpbkluaXRpYWxpemVyLmphdmEgYi9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc29ja2V0L3NlcnZlci9UZXN0V1NHcmVtbGluSW5pdGlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg2MzEwOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXRvb2xzL2dyZW1saW4tc29ja2V0LXNlcnZlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc29ja2V0L3NlcnZlci9UZXN0V1NHcmVtbGluSW5pdGlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNvY2tldC5zZXJ2ZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwSGVhZGVyczsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5XZWJTb2NrZXRTZXJ2ZXJQcm90b2NvbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5BYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsSGFuZGxlckNvbnRleHQ7Ci1pbXBvcnQgaW8ubmV0dHkuY2hhbm5lbC5DaGFubmVsUGlwZWxpbmU7Ci1pbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5NZXNzYWdlVG9NZXNzYWdlRGVjb2RlcjsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5CaW5hcnlXZWJTb2NrZXRGcmFtZTsKLWltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAud2Vic29ja2V0eC5DbG9zZVdlYlNvY2tldEZyYW1lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLQotCi0vKioKLSAqIEluaXRpYWxpemVyIHdoaWNoIHBhcnRpYWxseSBtaW1pY3MgdGhlIEdyZW1saW4gU2VydmVyLiBUaGlzIGluaXRpYWxpemVyIGluamVjdHMgYSBoYW5kbGVyIGluIHRoZQotICogc2VydmVyIHBpcGVsaW5lIHRoYXQgY2FuIGJlIG1vZGlmaWVkIHRvIHNlbmQgdGhlIGRlc2lyZWQgcmVzcG9uc2UgZm9yIGEgdGVzdCBjYXNlLgotICogVGhpcyBoYW5kbGVyIGlkZW50aWZpZXMgaW5jb21pbmcgcmVxdWVzdHMgd2l0aCBpZHMgbWF0Y2hpbmcgdGhvc2UgaW4ge0BsaW5rIFNvY2tldFNlcnZlclNldHRpbmdzfQotICogYW5kIGRlbGl2ZXJzIHRoZSByZXNwb25zZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgcmVxdWVzdCBpZC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RXU0dyZW1saW5Jbml0aWFsaXplciBleHRlbmRzIFRlc3RDaGFubmVsaXplcnMuVGVzdFdlYlNvY2tldFNlcnZlckluaXRpYWxpemVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoVGVzdFdTR3JlbWxpbkluaXRpYWxpemVyLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUl9BR0VOVF9IRUFERVIgPSAiVXNlci1BZ2VudCI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFNvY2tldFNlcnZlclNldHRpbmdzIHNldHRpbmdzOwotCi0gICAgLyoqCi0gICAgICogR3JlbWxpbiBzZXJpYWxpemVyIHVzZWQgZm9yIHNlcmlhbGl6aW5nL2Rlc2VyaWFsaXppbmcgdGhlIHJlcXVlc3QvcmVzcG9uc2UuIFRoaXMgc2hvdWxkIGJlIHNhbWUgYXMgY2xpZW50LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIEFic3RyYWN0TWVzc2FnZVNlcmlhbGl6ZXIgU0VSSUFMSVpFUjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvciA9IFVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOwotCi0gICAgcHVibGljIFRlc3RXU0dyZW1saW5Jbml0aWFsaXplcihmaW5hbCBTb2NrZXRTZXJ2ZXJTZXR0aW5ncyBzZXR0aW5ncykgewotICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7Ci0gICAgICAgIHN3aXRjaChzZXR0aW5ncy5TRVJJQUxJWkVSKSB7Ci0gICAgICAgICAgICBjYXNlICJHcmFwaFNPTlYyIjoKLSAgICAgICAgICAgICAgICBTRVJJQUxJWkVSID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAiR3JhcGhTT05WMyI6Ci0gICAgICAgICAgICAgICAgU0VSSUFMSVpFUiA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIkdyYXBoQmluYXJ5VjEiOgotICAgICAgICAgICAgICAgIFNFUklBTElaRVIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuKCJDb3VsZCBub3QgcmVjb2duaXplIHNlcmlhbGl6ZXIgWyVzXSwgZGVmYXVsdGluZyB0byBHcmFwaEJpbmFyeVYxIiwgc2V0dGluZ3MuU0VSSUFMSVpFUik7Ci0gICAgICAgICAgICAgICAgU0VSSUFMSVpFUiA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHBvc3RJbml0KENoYW5uZWxQaXBlbGluZSBwaXBlbGluZSkgewotICAgICAgICBwaXBlbGluZS5hZGRMYXN0KG5ldyBDbGllbnRUZXN0Q29uZmlndXJhYmxlSGFuZGxlcihzZXR0aW5ncykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhhbmRsZXIgaW50cm9kdWNlZCBpbiB0aGUgc2VydmVyIHBpcGVsaW5lIHRvIGNvbmZpZ3VyZSBleHBlY3RlZCByZXNwb25zZSBmb3IgdGVzdCBjYXNlcy4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgQ2xpZW50VGVzdENvbmZpZ3VyYWJsZUhhbmRsZXIgZXh0ZW5kcyBNZXNzYWdlVG9NZXNzYWdlRGVjb2RlcjxCaW5hcnlXZWJTb2NrZXRGcmFtZT4gewotICAgICAgICBwcml2YXRlIFNvY2tldFNlcnZlclNldHRpbmdzIHNldHRpbmdzOwotICAgICAgICBwcml2YXRlIFN0cmluZyB1c2VyQWdlbnQgPSAiIjsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VjV2Vic29ja2V0RXh0ZW5zaW9ucyA9ICIiOwotCi0gICAgICAgIHB1YmxpYyBDbGllbnRUZXN0Q29uZmlndXJhYmxlSGFuZGxlcihTb2NrZXRTZXJ2ZXJTZXR0aW5ncyBzZXR0aW5ncykgeyB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7IH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZGVjb2RlKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIEJpbmFyeVdlYlNvY2tldEZyYW1lIGZyYW1lLCBmaW5hbCBMaXN0PE9iamVjdD4gb2JqZWN0cykKLSAgICAgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGZpbmFsIEJ5dGVCdWYgbWVzc2FnZUJ5dGVzID0gZnJhbWUuY29udGVudCgpOwotICAgICAgICAgICAgZmluYWwgYnl0ZSBsZW4gPSBtZXNzYWdlQnl0ZXMucmVhZEJ5dGUoKTsKLSAgICAgICAgICAgIGlmIChsZW4gPD0gMCkgewotICAgICAgICAgICAgICAgIG9iamVjdHMuYWRkKFJlcXVlc3RNZXNzYWdlLklOVkFMSUQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgQnl0ZUJ1ZiBjb250ZW50VHlwZUJ5dGVzID0gY3R4LmFsbG9jKCkuYnVmZmVyKGxlbik7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1lc3NhZ2VCeXRlcy5yZWFkQnl0ZXMoY29udGVudFR5cGVCeXRlcyk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlQnl0ZXMucmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlcXVlc3QobWVzc2FnZUJ5dGVzLmRpc2NhcmRSZWFkQnl0ZXMoKSk7Ci0gICAgICAgICAgICBpZiAobXNnLmdldFJlcXVlc3RJZCgpLmVxdWFscyhzZXR0aW5ncy5TSU5HTEVfVkVSVEVYX0RFTEFZRURfQ0xPU0VfQ09OTkVDVElPTl9SRVFVRVNUX0lEKSkgewotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJzZW5kaW5nIHZlcnRleCByZXN1bHQgZnJhbWUiKTsKLSAgICAgICAgICAgICAgICBjdHguY2hhbm5lbCgpLndyaXRlQW5kRmx1c2gobmV3IEJpbmFyeVdlYlNvY2tldEZyYW1lKHJldHVyblNpbmdsZVZlcnRleFJlc3BvbnNlKAotICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuU0lOR0xFX1ZFUlRFWF9ERUxBWUVEX0NMT1NFX0NPTk5FQ1RJT05fUkVRVUVTVF9JRCkpKTsKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygid2FpdGluZyBmb3IgMiBzZWMiKTsKLSAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMCk7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oInNlbmRpbmcgY2xvc2UgZnJhbWUiKTsKLSAgICAgICAgICAgICAgICBjdHguY2hhbm5lbCgpLndyaXRlQW5kRmx1c2gobmV3IENsb3NlV2ViU29ja2V0RnJhbWUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5nZXRSZXF1ZXN0SWQoKS5lcXVhbHMoc2V0dGluZ3MuU0lOR0xFX1ZFUlRFWF9SRVFVRVNUX0lEKSkgewotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJzZW5kaW5nIHZlcnRleCByZXN1bHQgZnJhbWUiKTsKLSAgICAgICAgICAgICAgICBjdHguY2hhbm5lbCgpLndyaXRlQW5kRmx1c2gobmV3IEJpbmFyeVdlYlNvY2tldEZyYW1lKHJldHVyblNpbmdsZVZlcnRleFJlc3BvbnNlKHNldHRpbmdzLlNJTkdMRV9WRVJURVhfUkVRVUVTVF9JRCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmdldFJlcXVlc3RJZCgpLmVxdWFscyhzZXR0aW5ncy5GQUlMRURfQUZURVJfREVMQVlfUkVRVUVTVF9JRCkpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygid2FpdGluZyBmb3IgMSBzZWMiKTsKLSAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKQotICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbihuZXcgUnVudGltZUV4Y2VwdGlvbigpKS5jcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBjdHguY2hhbm5lbCgpLndyaXRlQW5kRmx1c2gobmV3IEJpbmFyeVdlYlNvY2tldEZyYW1lKFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShyZXNwb25zZU1lc3NhZ2UsIGFsbG9jYXRvcikpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmdldFJlcXVlc3RJZCgpLmVxdWFscyhzZXR0aW5ncy5DTE9TRV9DT05ORUNUSU9OX1JFUVVFU1RfSUQpIHx8IG1zZy5nZXRSZXF1ZXN0SWQoKS5lcXVhbHMoc2V0dGluZ3MuQ0xPU0VfQ09OTkVDVElPTl9SRVFVRVNUX0lEXzIpKSB7Ci0gICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOwotICAgICAgICAgICAgICAgIGN0eC5jaGFubmVsKCkud3JpdGVBbmRGbHVzaChuZXcgQ2xvc2VXZWJTb2NrZXRGcmFtZSgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmdldFJlcXVlc3RJZCgpLmVxdWFscyhzZXR0aW5ncy5VU0VSX0FHRU5UX1JFUVVFU1RfSUQpKSB7Ci0gICAgICAgICAgICAgICAgY3R4LmNoYW5uZWwoKS53cml0ZUFuZEZsdXNoKG5ldyBCaW5hcnlXZWJTb2NrZXRGcmFtZShyZXR1cm5TaW1wbGVCaW5hcnlSZXNwb25zZShzZXR0aW5ncy5VU0VSX0FHRU5UX1JFUVVFU1RfSUQsIHVzZXJBZ2VudCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobXNnLmdldFJlcXVlc3RJZCgpLmVxdWFscyhzZXR0aW5ncy5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlMpKSB7Ci0gICAgICAgICAgICAgICAgY3R4LmNoYW5uZWwoKS53cml0ZUFuZEZsdXNoKG5ldyBCaW5hcnlXZWJTb2NrZXRGcmFtZShyZXR1cm5TaW1wbGVCaW5hcnlSZXNwb25zZShzZXR0aW5ncy5TRUNfV0VCU09DS0VUX0VYVEVOU0lPTlMsIHNlY1dlYnNvY2tldEV4dGVuc2lvbnMpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1zZy5nZXRSZXF1ZXN0SWQoKS5lcXVhbHMoc2V0dGluZ3MuUEVSX1JFUVVFU1RfU0VUVElOR1NfUkVRVUVTVF9JRCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBTdHJpbmcuZm9ybWF0KCJyZXF1ZXN0SWQ9JXMgZXZhbHVhdGlvblRpbWVvdXQ9JWQsIGJhdGNoU2l6ZT0lZCwgdXNlckFnZW50PSVzLCBtYXRlcmlhbGl6ZVByb3BlcnRpZXM9JXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgbXNnLmdldFJlcXVlc3RJZCgpLCBtc2cuZ2V0QXJncygpLmdldCgiZXZhbHVhdGlvblRpbWVvdXQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZy5nZXRBcmdzKCkuZ2V0KCJiYXRjaFNpemUiKSwgbXNnLmdldEFyZ3MoKS5nZXQoInVzZXJBZ2VudCIpLCBtc2cuZ2V0QXJncygpLmdldCgibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIikpOwotICAgICAgICAgICAgICAgIGN0eC5jaGFubmVsKCkud3JpdGVBbmRGbHVzaChuZXcgQmluYXJ5V2ViU29ja2V0RnJhbWUocmV0dXJuU2ltcGxlQmluYXJ5UmVzcG9uc2Uoc2V0dGluZ3MuUEVSX1JFUVVFU1RfU0VUVElOR1NfUkVRVUVTVF9JRCwgcmVzcG9uc2UpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcChMb25nLnBhcnNlTG9uZygoU3RyaW5nKSBtc2cuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC5jaGFubmVsKCkud3JpdGVBbmRGbHVzaChuZXcgQmluYXJ5V2ViU29ja2V0RnJhbWUocmV0dXJuU2luZ2xlVmVydGV4UmVzcG9uc2UobXNnLmdldFJlcXVlc3RJZCgpKSkpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBuZmUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlLiBPbmx5IHJldHVybiBhIHZlcnRleCBpZiB0aGUgcXVlcnkgd2FzIGEgbG9uZyB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgdW5rbm93biByZXF1ZXN0IHdpdGggUmVxdWVzdElkOiAlcyIsIG1zZy5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBCeXRlQnVmIHJldHVyblNpbmdsZVZlcnRleFJlc3BvbnNlKGZpbmFsIFVVSUQgcmVxdWVzdElEKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlQ2xhc3NpYygpOwotICAgICAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICAgICAgZmluYWwgTGlzdDxWZXJ0ZXg+IHQgPSBuZXcgQXJyYXlMaXN0PD4oMSk7Ci0gICAgICAgICAgICB0LmFkZChnLlYoKS5saW1pdCgxKS5uZXh0KCkpOwotCi0gICAgICAgICAgICByZXR1cm4gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KFJlc3BvbnNlTWVzc2FnZS5idWlsZChyZXF1ZXN0SUQpLnJlc3VsdCh0KS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBQYWNrYWdlcyBhIHN0cmluZyBtZXNzYWdlIGludG8gYSBSZXNwb25zZU1lc3NhZ2UgYW5kIHNlcmlhbGl6ZXMgaXQgaW50byBhIEJ5dGVCdWYKLSAgICAgICAgICogQHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIEJ5dGVCdWYgcmV0dXJuU2ltcGxlQmluYXJ5UmVzcG9uc2UoZmluYWwgVVVJRCByZXF1ZXN0SUQsIFN0cmluZyBtZXNzYWdlKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAvL05lZWQgdG8gcGFja2FnZSBtZXNzYWdlIGluIGEgbGlzdCBvZiBzaXplIDEgYXMgc29tZSBHTFYncyBzZXJpYWxpemVycyByZXF1aXJlIGFsbCBtZXNzYWdlcyB0byBiZSBpbiBhIGxpc3QKLSAgICAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBtZXNzYWdlTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigxKTsKLSAgICAgICAgICAgIG1lc3NhZ2VMaXN0LmFkZChtZXNzYWdlKTsKLSAgICAgICAgICAgIHJldHVybiBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHJlcXVlc3RJRCkucmVzdWx0KG1lc3NhZ2VMaXN0KS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDYXB0dXJlcyBhbmQgc3RvcmVzIFVzZXItQWdlbnQgaWYgaW5jbHVkZWQgaW4gaGVhZGVyCi0gICAgICAgICAqLwotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgdXNlckV2ZW50VHJpZ2dlcmVkKGZpbmFsIENoYW5uZWxIYW5kbGVyQ29udGV4dCBjdHgsIGZpbmFsIE9iamVjdCBldnQpIHsKLSAgICAgICAgICAgIGlmKGV2dCBpbnN0YW5jZW9mIFdlYlNvY2tldFNlcnZlclByb3RvY29sSGFuZGxlci5IYW5kc2hha2VDb21wbGV0ZSkgewotICAgICAgICAgICAgICAgIFdlYlNvY2tldFNlcnZlclByb3RvY29sSGFuZGxlci5IYW5kc2hha2VDb21wbGV0ZSBoYW5kc2hha2UgPSAoV2ViU29ja2V0U2VydmVyUHJvdG9jb2xIYW5kbGVyLkhhbmRzaGFrZUNvbXBsZXRlKSBldnQ7Ci0gICAgICAgICAgICAgICAgSHR0cEhlYWRlcnMgcmVxdWVzdEhlYWRlcnMgPSBoYW5kc2hha2UucmVxdWVzdEhlYWRlcnMoKTsKLSAgICAgICAgICAgICAgICBpZihyZXF1ZXN0SGVhZGVycy5jb250YWlucyhVU0VSX0FHRU5UX0hFQURFUikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlckFnZW50ID0gcmVxdWVzdEhlYWRlcnMuZ2V0KFVTRVJfQUdFTlRfSEVBREVSKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYocmVxdWVzdEhlYWRlcnMuY29udGFpbnMoInNlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlY1dlYnNvY2tldEV4dGVuc2lvbnMgPSByZXF1ZXN0SGVhZGVycy5nZXQoInNlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucyIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LmZpcmVVc2VyRXZlbnRUcmlnZ2VyZWQoZXZ0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXRvb2xzL3BvbS54bWwgYi9ncmVtbGluLXRvb2xzL3BvbS54bWwKaW5kZXggMTJlOWNmYS4uNTY5ZmU5NyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi10b29scy9wb20ueG1sCisrKyBiL2dyZW1saW4tdG9vbHMvcG9tLnhtbApAQCAtMjEsNyArMjEsNyBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjMuOC4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KIAogICAgIDxhcnRpZmFjdElkPmdyZW1saW4tdG9vbHM8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvcG9tLnhtbCBiL2dyZW1saW4tdXRpbC9wb20ueG1sCmluZGV4IGVhNWI5NjUuLjEyMTQxZmIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9wb20ueG1sCisrKyBiL2dyZW1saW4tdXRpbC9wb20ueG1sCkBAIC01LDcgKzUsNyBAQAogICAgIDxwYXJlbnQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjMuOC4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L3BhcmVudD4KICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKQEAgLTI4LDEwICsyOCw2IEBACiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1hcGk8L2FydGlmYWN0SWQ+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qY2wtb3Zlci1zbGY0ajwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8IS0tIFRFU1QgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvTWVzc2FnZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9NZXNzYWdlU2VyaWFsaXplci5qYXZhCmluZGV4IDQyYjk0NTguLmM4MzYzMWQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9NZXNzYWdlU2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9NZXNzYWdlU2VyaWFsaXplci5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKIAoraW1wb3J0IGphdmEudXRpbC5FbnVtU2V0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXJ2aWNlTG9hZGVyOwpAQCAtNzAsMTIgKzcxLDEyIEBACiAgICAgLyoqCiAgICAgICogRGVzZXJpYWxpemUgYSBOZXR0eSB7QGNvZGUgQnl0ZUJ1Zn0gaW50byBhIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0uCiAgICAgICovCi0gICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplUmVxdWVzdChmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb247CisgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplQmluYXJ5UmVxdWVzdChmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb247CiAKICAgICAvKioKLSAgICAgKiBEZXNlcmlhbGl6ZSBhIE5ldHR5IHtAY29kZSBCeXRlQnVmfSBpbnRvIGEge0BsaW5rIFJlc3BvbnNlTWVzc2FnZX0uCisgICAgICogRGVzZXJpYWxpemUgYSBOZXR0eSB7QGNvZGUgQnl0ZUJ1Zn0gaW50byBhIHtAbGluayBSZXF1ZXN0TWVzc2FnZX0uCiAgICAgICovCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIEJ5dGVCdWYgbXNnKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplQmluYXJ5UmVzcG9uc2UoZmluYWwgQnl0ZUJ1ZiBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogVGhlIGxpc3Qgb2YgbWltZSB0eXBlcyB0aGF0IHRoZSBzZXJpYWxpemVyIHN1cHBvcnRzLiBUaGV5IHNob3VsZCBiZSBvcmRlcmVkIGluIHByZWZlcnJlZCBvcmRlcmVkIHdoZXJlIHRoZQpAQCAtOTIsNCArOTMsMjUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgZGVmYXVsdCB2b2lkIGNvbmZpZ3VyZShmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZywgZmluYWwgTWFwPFN0cmluZywgR3JhcGg+IGdyYXBocykgewogICAgIH0KKworICAgIHB1YmxpYyBCeXRlQnVmIHdyaXRlSGVhZGVyKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKKworICAgIHB1YmxpYyBCeXRlQnVmIHdyaXRlQ2h1bmsoZmluYWwgT2JqZWN0IGFnZ3JlZ2F0ZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uOworCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVGb290ZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uOworCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVFcnJvckZvb3RlcihmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb247CisKKyAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIHJlYWRDaHVuayhmaW5hbCBCeXRlQnVmIGJ5dGVCdWYsIGZpbmFsIGJvb2xlYW4gaXNGaXJzdENodW5rKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKKworICAgIHB1YmxpYyBlbnVtIE1lc3NhZ2VQYXJ0cyB7CisgICAgICAgIEhFQURFUiwgREFUQSwgRk9PVEVSOworCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRW51bVNldDxNZXNzYWdlUGFydHM+IEFMTCA9IEVudW1TZXQub2YoSEVBREVSLCBEQVRBLCBGT09URVIpOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXQ8TWVzc2FnZVBhcnRzPiBTVEFSVCA9IEVudW1TZXQub2YoSEVBREVSLCBEQVRBKTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBFbnVtU2V0PE1lc3NhZ2VQYXJ0cz4gQ0hVTksgPSBFbnVtU2V0Lm9mKERBVEEpOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEVudW1TZXQ8TWVzc2FnZVBhcnRzPiBFTkQgPSBFbnVtU2V0Lm9mKERBVEEsIEZPT1RFUik7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRW51bVNldDxNZXNzYWdlUGFydHM+IEVSUk9SID0gRW51bVNldC5vZihGT09URVIpOworICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL1Rva2Vucy5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL1Rva2Vucy5qYXZhCmluZGV4IDNmOTRiNDcuLjI2NjhiOGMgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9Ub2tlbnMuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvVG9rZW5zLmphdmEKQEAgLTE4LDggKzE4LDYgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWw7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5GYWlsdXJlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwogCkBAIC0zMSwxOSArMjksMTkgQEAKIHB1YmxpYyBmaW5hbCBjbGFzcyBUb2tlbnMgewogICAgIHByaXZhdGUgVG9rZW5zKCkge30KIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QU19BVVRIRU5USUNBVElPTiA9ICJhdXRoZW50aWNhdGlvbiI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BTX0JZVEVDT0RFID0gImJ5dGVjb2RlIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFNfRVZBTCA9ICJldmFsIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFNfSU5WQUxJRCA9ICJpbnZhbGlkIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUFNfQ0xPU0UgPSAiY2xvc2UiOwotCiAgICAgLyoqCi0gICAgICogVGhlIGtleSBmb3IgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0LgorICAgICAqIFN0cmluZyBjb25zdGFudHMgdXNlZCBpbiB0aGUgSFRUUCBBUEkuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVF9JRCA9ICJyZXF1ZXN0SWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgSGVhZGVycyB7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRoZSBoZWFkZXIgZm9yIHRyYW5zYWN0aW9uIElEcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQU5TQUNUSU9OX0lEID0gIlgtVHJhbnNhY3Rpb24tSWQiOworICAgIH0KIAogICAgIC8qKgotICAgICAqIEFyZ3VtZW50IG5hbWUgdGhhdCBhbGxvd3MgZGVmaW5pdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZWFjaCB7QGxpbmsgUmVzcG9uc2VNZXNzYWdlfSBzaG91bGQgY29udGFpbiAtCisgICAgICogQXJndW1lbnQgbmFtZSB0aGF0IGFsbG93cyBkZWZpbml0aW9uIG9mIHRoZSBudW1iZXIgb2YgaXRlcmF0aW9ucyBlYWNoIEhUVFAgY2h1bmsgc2hvdWxkIGNvbnRhaW4gLQogICAgICAqIG92ZXJyaWRlcyB0aGUgQHtjb2RlIHJlc3VsdEl0ZXJhdGlvbkJhdGNoU2l6ZX0gc2VydmVyIHNldHRpbmcuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHU19CQVRDSF9TSVpFID0gImJhdGNoU2l6ZSI7CkBAIC01OCw4ICs1Niw3IEBACiAgICAgICogQXJndW1lbnQgbmFtZSB0aGF0IGFsbG93cyBkZWZpbml0aW9uIG9mIGFsaWFzIG5hbWVzIGZvciB7QGxpbmsgR3JhcGh9IGFuZCB7QGxpbmsgVHJhdmVyc2FsU291cmNlfSBvYmplY3RzIG9uCiAgICAgICogdGhlIHJlbW90ZSBzeXN0ZW0uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHU19BTElBU0VTID0gImFsaWFzZXMiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1NfRk9SQ0UgPSAiZm9yY2UiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1NfRyA9ICJnIjsKIAogICAgIC8qKgogICAgICAqIEFyZ3VtZW50IG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgR3JlbWxpbiB0byBldmFsdWF0ZS4KQEAgLTc2LDkgKzczLDYgQEAKICAgICAgKiByZXF1ZXN0IHRvIGV4ZWN1dGUgb24gdGhlIHNlcnZlci4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdTX0VWQUxfVElNRU9VVCA9ICJldmFsdWF0aW9uVGltZW91dCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHU19IT1NUID0gImhvc3QiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1NfU0VTU0lPTiA9ICJzZXNzaW9uIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdTX01BTkFHRV9UUkFOU0FDVElPTiA9ICJtYW5hZ2VUcmFuc2FjdGlvbiI7CiAKICAgICAvKioKICAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdG8gY29udHJvbCB0aGUgc2VyaWFsaXphdGlvbiBvZiBwcm9wZXJ0aWVzIG9uIHRoZSBzZXJ2ZXIuCkBAIC05OCwxMyArOTIsMTQgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUyA9ICJ0b2tlbnMiOwogCiAgICAgLyoqCi0gICAgICogQXJndW1lbnQgbmFtZSB0aGF0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBhIHNlc3Npb24gd2hpY2ggd2hlbiBpdHMgdmFsdWUgaXMge0Bjb2RlIHRydWV9IG1ha2VzIGl0IHNvCi0gICAgICogdGhhdCBhIHByb2Nlc3NpbmcgZXJyb3Igb3IgcmVxdWVzdCB0aW1lb3V0IHdpbGwgbm90IGNsb3NlIHRoZSBzZXNzaW9uLCBidXQgbGVhdmUgaXQgdG8gY29udGludWUgcHJvY2Vzc2luZyBpbgotICAgICAqIHdoYXRldmVyIHN0YXRlIGl0IG1heSBob2xkLiBUaGlzIGFyZ3VtZW50IG9ubHkgYXBwbGllcyB0byB0aGUge0Bjb2RlIFVuaWZpZWRDaGFubmVsaXplcn0uCisgICAgICogVGhlIGtleSBmb3IgdGhlIHBlciByZXF1ZXN0IHNlcnZlci1zaWRlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1NfTUFJTlRBSU5fU1RBVEVfQUZURVJfRVhDRVBUSU9OID0gIm1haW50YWluU3RhdGVBZnRlckV4Y2VwdGlvbiI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHU19TQVNMID0gInNhc2wiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1NfU0FTTF9NRUNIQU5JU00gPSAic2FzbE1lY2hhbmlzbSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElNRU9VVF9NUyA9ICJ0aW1lb3V0TXMiOworCisgICAgLyoqCisgICAgICogVGhlIGtleSBmb3Igc2VydmVyIHRvIGJ1bGsgcmVzdWx0IGFzIGEgZm9ybSBvZiBvcHRpbWl6YXRpb24gZm9yIGRyaXZlciByZXF1ZXN0cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCVUxLX1JFU1VMVFMgPSAiYnVsa1Jlc3VsdHMiOwogCiAgICAgLyoqCiAgICAgICogQSB2YWx1ZSB0aGF0IGlzIGEgY3VzdG9tIHN0cmluZyB0aGF0IHRoZSB1c2VyIGNhbiBwYXNzIHRvIGEgc2VydmVyIHRoYXQgbWlnaHQgYWNjZXB0IGl0IGZvciBwdXJwb3NlIG9mCkBAIC0xMTIsMzcgKzEwNywxMCBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFSR1NfVVNFUl9BR0VOVCA9ICJ1c2VyQWdlbnQiOwogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMX1RSQVZFUlNBTF9TT1VSQ0VfQUxJQVMgPSAiZyI7Ci0KICAgICAvKioKLSAgICAgKiBUaGUgdmFsdWUgb2YgdGhpcyBrZXkgaG9sZHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRhdGEgaGVsZCBieSBhIHtAbGluayBGYWlsdXJlfSBhcyBwcm9kdWNlZCBieQotICAgICAqIHtAbGluayBGYWlsdXJlI2Zvcm1hdCgpfS4KKyAgICAgKiBBcmd1bWVudCBuYW1lIGZvciB0aGUgdHJhbnNhY3Rpb24gSUQgdXNlZCB0byB0cmFjayBtdWx0aS1yZXF1ZXN0IHRyYW5zYWN0aW9ucyBvdmVyIEhUVFAuCisgICAgICogVGhlIHRyYW5zYWN0aW9uIElEIGlzIGEgVVVJRCBnZW5lcmF0ZWQgYnkgdGhlIGNsaWVudCBhdCB0cmFuc2FjdGlvbiBiZWdpbiB0aW1lIGFuZCBpbmNsdWRlZAorICAgICAqIGluIGV2ZXJ5IHJlcXVlc3Qgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfQVRUUklCVVRFX0ZBSUxfU1RFUF9NRVNTQUdFID0gImZhaWxTdGVwTWVzc2FnZSI7Ci0KLSAgICAvKioKLSAgICAgKiBSZWZlcnMgdG8gdGhlIGhpZXJhcmNoeSBvZiBleGNlcHRpb24gbmFtZXMgZm9yIGEgcGFydGljdWxhciBleGNlcHRpb24gdGhyb3duIG9uIHRoZSBzZXJ2ZXIuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RBVFVTX0FUVFJJQlVURV9FWENFUFRJT05TID0gImV4Y2VwdGlvbnMiOwotCi0gICAgLyoqCi0gICAgICogUmVmZXJzIHRvIHRoZSBzdGFja3RyYWNlIGZvciBhbiBleGNlcHRpb24gdGhyb3duIG9uIHRoZSBzZXJ2ZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfQVRUUklCVVRFX1NUQUNLX1RSQUNFID0gInN0YWNrVHJhY2UiOwotCi0gICAgLyoqCi0gICAgICogQSB7QGNvZGUgUmVzdWx0U2V0I3N0YXR1c0F0dHJpYnV0ZXMoKX0ga2V5IGZvciB1c2VyLWZhY2luZyB3YXJuaW5ncy4KLSAgICAgKiA8cD4KLSAgICAgKiBJbXBsZW1lbnRhdGlvbnMgdGhhdCBzZXQgdGhpcyBrZXkgc2hvdWxkIGNvbnNpZGVyIHVzaW5nIG9uZSBvZgotICAgICAqIHRoZXNlIHR3byByZWNvbW1lbmRlZCB2YWx1ZSB0eXBlczoKLSAgICAgKiA8dWw+Ci0gICAgICogICAgIDxsaT5BIHtAY29kZSBMaXN0fSBpbXBsZW1lbnRhdGlvbiBjb250YWluaW5nCi0gICAgICogICAgIHJlZmVyZW5jZXMgZm9yIHdoaWNoIHtAY29kZSBTdHJpbmcjdmFsdWVPZihPYmplY3QpfSBwcm9kdWNlcwotICAgICAqICAgICBhIG1lYW5pbmdmdWwgcmV0dXJuIHZhbHVlLiAgRm9yIGV4YW1wbGUsIGEgbGlzdCBvZiBzdHJpbmdzLjwvbGk+Ci0gICAgICogICAgIDxsaT5PdGhlcndpc2UsIGFueSBzaW5nbGUgbm9uLWxpc3Qgb2JqZWN0IGZvciB3aGljaAotICAgICAqICAgICB7QGNvZGUgU3RyaW5nI3ZhbHVlT2YoT2JqZWN0KX0gcHJvZHVjZXMgYSBtZWFuaW5nZnVsIHJldHVybiB2YWx1ZS4KLSAgICAgKiAgICAgRm9yIGV4YW1wbGUsIGEgc3RyaW5nLjwvbGk+Ci0gICAgICogPC91bD4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTVEFUVVNfQVRUUklCVVRFX1dBUk5JTkdTID0gIndhcm5pbmdzIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBUkdTX1RSQU5TQUNUSU9OX0lEID0gInRyYW5zYWN0aW9uSWQiOwogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVxdWVzdE1lc3NhZ2UuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1JlcXVlc3RNZXNzYWdlLmphdmEKaW5kZXggNTUwMGYzZC4uZjI1YWEzNyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVxdWVzdE1lc3NhZ2UuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvbWVzc2FnZS9SZXF1ZXN0TWVzc2FnZS5qYXZhCkBAIC0xOSwxNDQgKzE5LDE2MyBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZTsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5FbGVtZW50SGVscGVyOwogCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwogCiAvKioKLSAqIFRoZSBtb2RlbCBmb3IgYSByZXF1ZXN0IG1lc3NhZ2Ugc2VudCB0byB0aGUgc2VydmVyLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKKyAqIFRoZSBtb2RlbCBmb3IgYSByZXF1ZXN0IG1lc3NhZ2UgaW4gdGhlIEhUVFAgYm9keSB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlciBiZWdpbm5pbmcgaW4gNC4wLjAuCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0TWVzc2FnZSB7Ci0gICAgLyoqCi0gICAgICogQW4gImludmFsaWQiIG1lc3NhZ2UuICBVc2VkIGludGVybmFsbHkgb25seS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFJlcXVlc3RNZXNzYWdlIElOVkFMSUQgPSBuZXcgUmVxdWVzdE1lc3NhZ2UoVG9rZW5zLk9QU19JTlZBTElEKTsKKyAgICBwcml2YXRlIFN0cmluZyBncmVtbGluOworICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBmaWVsZHM7CiAKLSAgICBwcml2YXRlIGZpbmFsIFVVSUQgcmVxdWVzdElkOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG9wOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHByb2Nlc3NvcjsKLSAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXJnczsKKyAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlKGZpbmFsIFN0cmluZyBncmVtbGluLCBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGZpZWxkcykgeworICAgICAgICBpZiAobnVsbCA9PSBncmVtbGluKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZXF1ZXN0TWVzc2FnZSByZXF1aXJlcyBncmVtbGluIGFyZ3VtZW50Iik7CiAKLSAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlKGZpbmFsIFVVSUQgcmVxdWVzdElkLCBmaW5hbCBTdHJpbmcgb3AsIGZpbmFsIFN0cmluZyBwcm9jZXNzb3IsIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXJncykgewotICAgICAgICB0aGlzLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDsKLSAgICAgICAgdGhpcy5vcCA9IG9wOwotICAgICAgICB0aGlzLnByb2Nlc3NvciA9IHByb2Nlc3NvcjsKLSAgICAgICAgdGhpcy5hcmdzID0gT3B0aW9uYWwub2ZOdWxsYWJsZShhcmdzKS5vckVsc2UobmV3IEhhc2hNYXA8PigpKTsKKyAgICAgICAgdGhpcy5ncmVtbGluID0gZ3JlbWxpbjsKKyAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7CisKKyAgICAgICAgdGhpcy5maWVsZHMucHV0SWZBYnNlbnQoVG9rZW5zLkFSR1NfTEFOR1VBR0UsICJncmVtbGluLWxhbmciKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBFbXB0eSBjb25zdHJ1Y3RvciBmb3Igc2VyaWFsaXphdGlvbi4KICAgICAgKi8KLSAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlKCkgewotICAgICAgICB0aGlzKG51bGwpOwotICAgIH0KKyAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlKCkgeyB9CiAKLSAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlKGZpbmFsIFN0cmluZyBvcCkgewotICAgICAgICB0aGlzKG51bGwsIG9wLCBudWxsLCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgaWQgb2YgdGhlIGN1cnJlbnQgcmVxdWVzdCBhbmQgaXMgdXNlZCB0byB0cmFjayB0aGUgbWVzc2FnZSB3aXRoaW4gR3JlbWxpbiBTZXJ2ZXIgYW5kIGluIGl0cyByZXNwb25zZS4gIFRoaXMKLSAgICAgKiB2YWx1ZSBzaG91bGQgYmUgdW5pcXVlIHBlciByZXF1ZXN0IG1hZGUuCi0gICAgICovCi0gICAgcHVibGljIFVVSUQgZ2V0UmVxdWVzdElkKCkgewotICAgICAgICByZXR1cm4gcmVxdWVzdElkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBvcGVyYXRpb24gb3IgY29tbWFuZCB0byBwZXJmb3JtIGFzIGRlZmluZWQgYnkgYSBwYXJ0aWN1bGFyIFByb2Nlc3Nvci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9wKCkgewotICAgICAgICByZXR1cm4gb3A7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIFByb2Nlc3NvciB0aGF0IHNob3VsZCBoYW5kbGUgdGhlIHtAbGluayAjb3B9LiAgRGVmYXVsdHMgdG8gdGhlIHN0YW5kYXJkIHByb2Nlc3NvciBpZgotICAgICAqIG5vdCBzcGVjaWZpZWQuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRQcm9jZXNzb3IoKSB7Ci0gICAgICAgIHJldHVybiBwcm9jZXNzb3I7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSB7QGxpbmsgTWFwfSBvZiBhcmd1bWVudHMgdGhhdCBhcmUgc3VwcGxpZWQgdG8gdGhlIHtAbGluayAjb3B9LiAgRWFjaCB7QGxpbmsgI29wfSBhY2NlcHRzIGRpZmZlcmVudCBhcmd1bWVudCwKLSAgICAgKiBzbyBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGZvciBhIHBhcnRpY3VsYXIgb25lIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBleHBlY3RlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBcmdzKCkgewotICAgICAgICByZXR1cm4gYXJnczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgPFQ+IE9wdGlvbmFsPFQ+IG9wdGlvbmFsQXJncyhmaW5hbCBTdHJpbmcga2V5KSB7Ci0gICAgICAgIGZpbmFsIE9iamVjdCBvID0gYXJncy5nZXQoa2V5KTsKKyAgICBwdWJsaWMgPFQ+IE9wdGlvbmFsPFQ+IG9wdGlvbmFsRmllbGQoZmluYWwgU3RyaW5nIGtleSkgeworICAgICAgICBmaW5hbCBPYmplY3QgbyA9IGZpZWxkcy5nZXQoa2V5KTsKICAgICAgICAgcmV0dXJuIG8gPT0gbnVsbCA/IE9wdGlvbmFsLmVtcHR5KCkgOiBPcHRpb25hbC5vZigoVCkgbyk7CiAgICAgfQogCi0gICAgcHVibGljIDxUPiBUIGdldEFyZyhmaW5hbCBTdHJpbmcga2V5KSB7Ci0gICAgICAgIHJldHVybiAoVCkgYXJncy5nZXQoa2V5KTsKKyAgICBwdWJsaWMgPFQ+IFQgZ2V0RmllbGQoZmluYWwgU3RyaW5nIGtleSkgeworICAgICAgICByZXR1cm4gKFQpIGZpZWxkcy5nZXQoa2V5KTsKICAgICB9CiAKLSAgICBwdWJsaWMgPFQ+IFQgZ2V0QXJnT3JEZWZhdWx0KGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFQgZGVmKSB7Ci0gICAgICAgIHJldHVybiAoVCkgb3B0aW9uYWxBcmdzKGtleSkub3JFbHNlKGRlZik7CisgICAgcHVibGljIDxUPiBUIGdldEZpZWxkT3JEZWZhdWx0KGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFQgZGVmKSB7CisgICAgICAgIHJldHVybiAoVCkgb3B0aW9uYWxGaWVsZChrZXkpLm9yRWxzZShkZWYpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlbWxpbigpIHsKKyAgICAgICAgcmV0dXJuIGdyZW1saW47CisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0RmllbGRzKCkgeworICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKGZpZWxkcyk7CisgICAgfQorCisgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIHRyaW1NZXNzYWdlKGludCBzaXplKSB7CisgICAgICAgIGdyZW1saW4gPSBncmVtbGluLnN1YnN0cmluZygwLCBzaXplKSArICIuLi4iOworICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgZnJvbShmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cpIHsKLSAgICAgICAgZmluYWwgQnVpbGRlciBidWlsZGVyID0gYnVpbGQobXNnLm9wKQotICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChtc2cucmVxdWVzdElkKQotICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IobXNnLnByb2Nlc3Nvcik7Ci0gICAgICAgIG1zZy5hcmdzLmZvckVhY2goYnVpbGRlcjo6YWRkQXJnKTsKKyAgICAgICAgZmluYWwgQnVpbGRlciBidWlsZGVyID0gYnVpbGQobXNnLmdyZW1saW4pOworICAgICAgICBidWlsZGVyLmZpZWxkcy5wdXRBbGwobXNnLmdldEZpZWxkcygpKTsKKyAgICAgICAgaWYgKG1zZy5nZXRGaWVsZHMoKS5jb250YWluc0tleShUb2tlbnMuQVJHU19CSU5ESU5HUykpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYWRkQmluZGluZ3MoKE1hcDxTdHJpbmcsIE9iamVjdD4pIG1zZy5nZXRGaWVsZHMoKS5nZXQoVG9rZW5zLkFSR1NfQklORElOR1MpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gYnVpbGRlcjsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgYnVpbGQoZmluYWwgU3RyaW5nIG9wKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQnVpbGRlcihvcCk7CisgICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGZyb20oZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnLCBmaW5hbCBTdHJpbmcgZ3JlbWxpbikgeworICAgICAgICBmaW5hbCBCdWlsZGVyIGJ1aWxkZXIgPSBidWlsZChncmVtbGluKTsKKyAgICAgICAgYnVpbGRlci5maWVsZHMucHV0QWxsKG1zZy5nZXRGaWVsZHMoKSk7CisgICAgICAgIGlmIChtc2cuZ2V0RmllbGRzKCkuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfQklORElOR1MpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFkZEJpbmRpbmdzKChNYXA8U3RyaW5nLCBPYmplY3Q+KSBtc2cuZ2V0RmllbGRzKCkuZ2V0KFRva2Vucy5BUkdTX0JJTkRJTkdTKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ1aWxkZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgcmV0dXJuICJSZXF1ZXN0TWVzc2FnZXsiICsKKyAgICAgICAgICAgICAgICAiLCBmaWVsZHM9IiArIGZpZWxkcyArCisgICAgICAgICAgICAgICAgIiwgZ3JlbWxpbj0iICsgZ3JlbWxpbiArCisgICAgICAgICAgICAgICAgJ30nOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgQnVpbGRlciBidWlsZChmaW5hbCBTdHJpbmcgZ3JlbWxpbikgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXIoZ3JlbWxpbik7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQnVpbGRlciBjbGFzcyBmb3Ige0BsaW5rIFJlcXVlc3RNZXNzYWdlfS4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUF9QUk9DRVNTT1JfTkFNRSA9ICIiOwotICAgICAgICBwcml2YXRlIFVVSUQgcmVxdWVzdElkOwotICAgICAgICBwcml2YXRlIFN0cmluZyBvcDsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgcHJvY2Vzc29yID0gT1BfUFJPQ0VTU09SX05BTUU7Ci0gICAgICAgIHByaXZhdGUgTWFwPFN0cmluZywgT2JqZWN0PiBhcmdzID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBncmVtbGluOworICAgICAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIHByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBmaWVsZHMgPSBuZXcgSGFzaE1hcDw+KCk7IC8vIE9ubHkgYWxsb3cgY2VydGFpbiBpdGVtcyB0byBiZSBhZGRlZCB0byBwcmV2ZW50IGJyZWFraW5nIGNoYW5nZXMuCiAKLSAgICAgICAgcHJpdmF0ZSBCdWlsZGVyKGZpbmFsIFN0cmluZyBvcCkgewotICAgICAgICAgICAgdGhpcy5vcCA9IG9wOworICAgICAgICBwcml2YXRlIEJ1aWxkZXIoZmluYWwgU3RyaW5nIGdyZW1saW4pIHsKKyAgICAgICAgICAgIHRoaXMuZ3JlbWxpbiA9IGdyZW1saW47CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRMYW5ndWFnZShmaW5hbCBTdHJpbmcgbGFuZ3VhZ2UpIHsKKyAgICAgICAgICAgIE9iamVjdHMucmVxdWlyZU5vbk51bGwobGFuZ3VhZ2UsICJsYW5ndWFnZSBhcmd1bWVudCBjYW5ub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1dChUb2tlbnMuQVJHU19MQU5HVUFHRSwgbGFuZ3VhZ2UpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRCaW5kaW5nKGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIE9iamVjdCB2YWwpIHsKKyAgICAgICAgICAgIGJpbmRpbmdzLnB1dChrZXksIHZhbCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEJpbmRpbmdzKGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gb3RoZXJCaW5kaW5ncykgeworICAgICAgICAgICAgT2JqZWN0cy5yZXF1aXJlTm9uTnVsbChvdGhlckJpbmRpbmdzLCAiYmluZGluZ3MgYXJndW1lbnQgY2Fubm90IGJlIG51bGwuIik7CisgICAgICAgICAgICB0aGlzLmJpbmRpbmdzLnB1dEFsbChvdGhlckJpbmRpbmdzKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkRyhmaW5hbCBTdHJpbmcgZykgeworICAgICAgICAgICAgT2JqZWN0cy5yZXF1aXJlTm9uTnVsbChnLCAiZyBhcmd1bWVudCBjYW5ub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1dChUb2tlbnMuQVJHU19HLCBnKTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkQ2h1bmtTaXplKGZpbmFsIGludCBjaHVua1NpemUpIHsKKyAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1dChUb2tlbnMuQVJHU19CQVRDSF9TSVpFLCBjaHVua1NpemUpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoZmluYWwgU3RyaW5nIG1hdGVyaWFsaXplUHJvcHMpIHsKKyAgICAgICAgICAgIE9iamVjdHMucmVxdWlyZU5vbk51bGwobWF0ZXJpYWxpemVQcm9wcywgIm1hdGVyaWFsaXplUHJvcHMgYXJndW1lbnQgY2Fubm90IGJlIG51bGwuIik7CisgICAgICAgICAgICBpZiAoIW1hdGVyaWFsaXplUHJvcHMuZXF1YWxzKFRva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUykgJiYgIW1hdGVyaWFsaXplUHJvcHMuZXF1YWxzKFRva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX0FMTCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJtYXRlcmlhbGl6ZVByb3BlcnRpZXMgYXJndW1lbnQgbXVzdCBiZSBlaXRoZXIgdG9rZW4gb3IgYWxsLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXQoVG9rZW5zLkFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUywgbWF0ZXJpYWxpemVQcm9wcyk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZFRpbWVvdXRNaWxsaXMoZmluYWwgbG9uZyB0aW1lb3V0KSB7CisgICAgICAgICAgICBpZiAodGltZW91dCA8IDApIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRpbWVvdXQgYXJndW1lbnQgY2Fubm90IGJlIG5lZ2F0aXZlLiIpOworCisgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXQoVG9rZW5zLlRJTUVPVVRfTVMsIHRpbWVvdXQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRCdWxrUmVzdWx0cyhmaW5hbCBib29sZWFuIGJ1bGtpbmcpIHsKKyAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1dChUb2tlbnMuQlVMS19SRVNVTFRTLCBTdHJpbmcudmFsdWVPZihidWxraW5nKSk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBJZiB0aGlzIHZhbHVlIGlzIG5vdCBzZXQgaW4gdGhlIGJ1aWxkZXIgdGhlbiB0aGUge0BsaW5rIFJlcXVlc3RNZXNzYWdlI3Byb2Nlc3Nvcn0gZGVmYXVsdHMgdG8KLSAgICAgICAgICogdGhlIHN0YW5kYXJkIG9wIHByb2Nlc3NvciAoZW1wdHkgc3RyaW5nKS4KKyAgICAgICAgICogQWRkcyBhIHRyYW5zYWN0aW9uIElEIHRvIHRoZSByZXF1ZXN0IG1lc3NhZ2UuIFRoZSB0cmFuc2FjdGlvbiBJRCBpcyB1c2VkIHRvIHRyYWNrCisgICAgICAgICAqIG11bHRpLXJlcXVlc3QgdHJhbnNhY3Rpb25zIG92ZXIgSFRUUC4gQWxsIHJlcXVlc3RzIHdpdGhpbiBhIHRyYW5zYWN0aW9uIG11c3QgaW5jbHVkZQorICAgICAgICAgKiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBJRC4KICAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHByb2Nlc3NvciB0aGUgbmFtZSBvZiB0aGUgcHJvY2Vzc29yCisgICAgICAgICAqIEBwYXJhbSB0cmFuc2FjdGlvbklkIHRoZSB1bmlxdWUgdHJhbnNhY3Rpb24gaWRlbnRpZmllciAodHlwaWNhbGx5IGEgVVVJRCkKKyAgICAgICAgICogQHJldHVybiB0aGlzIGJ1aWxkZXIKICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHByb2Nlc3NvcihmaW5hbCBTdHJpbmcgcHJvY2Vzc29yKSB7Ci0gICAgICAgICAgICB0aGlzLnByb2Nlc3NvciA9IHByb2Nlc3NvcjsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIE92ZXJyaWRlIHRoZSByZXF1ZXN0IGlkZW50aWZpZXIgd2l0aCBhIHNwZWNpZmllZCBvbmUsIG90aGVyd2lzZSB0aGUge0BsaW5rIEJ1aWxkZXJ9IHdpbGwgcmFuZG9tbHkgZ2VuZXJhdGUKLSAgICAgICAgICogYSB7QGxpbmsgVVVJRH0uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBvdmVycmlkZVJlcXVlc3RJZChmaW5hbCBVVUlEIHJlcXVlc3RJZCkgewotICAgICAgICAgICAgdGhpcy5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZEFyZyhmaW5hbCBTdHJpbmcga2V5LCBmaW5hbCBPYmplY3QgdmFsKSB7Ci0gICAgICAgICAgICBhcmdzLnB1dChrZXksIHZhbCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIGFkZChmaW5hbCBPYmplY3QuLi4ga2V5VmFsdWVzKSB7Ci0gICAgICAgICAgICBhcmdzLnB1dEFsbChFbGVtZW50SGVscGVyLmFzTWFwKGtleVZhbHVlcykpOworICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRUcmFuc2FjdGlvbklkKGZpbmFsIFN0cmluZyB0cmFuc2FjdGlvbklkKSB7CisgICAgICAgICAgICBPYmplY3RzLnJlcXVpcmVOb25OdWxsKHRyYW5zYWN0aW9uSWQsICJ0cmFuc2FjdGlvbklkIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsLiIpOworICAgICAgICAgICAgdGhpcy5maWVsZHMucHV0KFRva2Vucy5BUkdTX1RSQU5TQUNUSU9OX0lELCB0cmFuc2FjdGlvbklkKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKQEAgLTE2NCwxNyArMTgzLDggQEAKICAgICAgICAgICogQ3JlYXRlIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZ2l2ZW4gdGhlIHNldHRpbmdzIHByb3ZpZGVkIHRvIHRoZSB7QGxpbmsgQnVpbGRlcn0uCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgY3JlYXRlKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0TWVzc2FnZShudWxsID09IHJlcXVlc3RJZCA/IFVVSUQucmFuZG9tVVVJRCgpIDogcmVxdWVzdElkLCBvcCwgcHJvY2Vzc29yLCBhcmdzKTsKKyAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1dChUb2tlbnMuQVJHU19CSU5ESU5HUywgYmluZGluZ3MpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXF1ZXN0TWVzc2FnZShncmVtbGluLCBmaWVsZHMpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJSZXF1ZXN0TWVzc2FnZXsiICsKLSAgICAgICAgICAgICAgICAiLCByZXF1ZXN0SWQ9IiArIHJlcXVlc3RJZCArCi0gICAgICAgICAgICAgICAgIiwgb3A9JyIgKyBvcCArICdcJycgKwotICAgICAgICAgICAgICAgICIsIHByb2Nlc3Nvcj0nIiArIHByb2Nlc3NvciArICdcJycgKwotICAgICAgICAgICAgICAgICIsIGFyZ3M9IiArIGFyZ3MgKwotICAgICAgICAgICAgICAgICd9JzsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvbWVzc2FnZS9SZXNwb25zZU1lc3NhZ2UuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlTWVzc2FnZS5qYXZhCmluZGV4IDc5NjQ4OTUuLjNlNjk3ZmYgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlTWVzc2FnZS5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlTWVzc2FnZS5qYXZhCkBAIC0xOCwzOCArMTgsMjggQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZTsKIAotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5leGNlcHRpb24uRXhjZXB0aW9uVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgorICogVGhlIG1vZGVsIGZvciBhIHJlc3BvbnNlIG1lc3NhZ2UgdGhhdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIgYmVnaW5uaW5nIGluIDQuMC4wLiBSZXNwb25zZU1lc3NhZ2UgaXMgZGVzaWduZWQgdG8gYmUKKyAqIHN0cmVhbWVkIGJhY2sgdGhlIGNsaWVudCBpbiBwYXJ0cyBzbyBkZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSB0cmFuc2ZlciwgY2VydGFpbiBwYXJ0cyBtYXkgYmUgbnVsbCBhdCBkaWZmZXJlbnQKKyAqIHRpbWVzLgorICoKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFJlc3BvbnNlTWVzc2FnZSB7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgY3VycmVudCByZXF1ZXN0IHRoYXQgZ2VuZXJhdGVkIHRoaXMgcmVzcG9uc2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBVVUlEIHJlcXVlc3RJZDsKICAgICBwcml2YXRlIGZpbmFsIFJlc3BvbnNlU3RhdHVzIHJlc3BvbnNlU3RhdHVzOwogICAgIHByaXZhdGUgZmluYWwgUmVzcG9uc2VSZXN1bHQgcmVzcG9uc2VSZXN1bHQ7CiAKLSAgICBwcml2YXRlIFJlc3BvbnNlTWVzc2FnZShmaW5hbCBVVUlEIHJlcXVlc3RJZCwgZmluYWwgUmVzcG9uc2VTdGF0dXMgcmVzcG9uc2VTdGF0dXMsCisgICAgcHJpdmF0ZSBSZXNwb25zZU1lc3NhZ2UoZmluYWwgUmVzcG9uc2VTdGF0dXMgcmVzcG9uc2VTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VSZXN1bHQgcmVzcG9uc2VSZXN1bHQpIHsKLSAgICAgICAgdGhpcy5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7CiAgICAgICAgIHRoaXMucmVzcG9uc2VSZXN1bHQgPSByZXNwb25zZVJlc3VsdDsKICAgICAgICAgdGhpcy5yZXNwb25zZVN0YXR1cyA9IHJlc3BvbnNlU3RhdHVzOwogICAgIH0KIAotICAgIHB1YmxpYyBVVUlEIGdldFJlcXVlc3RJZCgpIHsKLSAgICAgICAgcmV0dXJuIHJlcXVlc3RJZDsKLSAgICB9Ci0KICAgICBwdWJsaWMgUmVzcG9uc2VTdGF0dXMgZ2V0U3RhdHVzKCkgewogICAgICAgICByZXR1cm4gcmVzcG9uc2VTdGF0dXM7CiAgICAgfQpAQCAtNjEsMzggKzUxLDYxIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgcmV0dXJuICJSZXNwb25zZU1lc3NhZ2V7IiArCi0gICAgICAgICAgICAgICAgInJlcXVlc3RJZD0iICsgcmVxdWVzdElkICsKICAgICAgICAgICAgICAgICAiLCBzdGF0dXM9IiArIHJlc3BvbnNlU3RhdHVzICsKICAgICAgICAgICAgICAgICAiLCByZXN1bHQ9IiArIHJlc3BvbnNlUmVzdWx0ICsKICAgICAgICAgICAgICAgICAnfSc7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCdWlsZGVyIGJ1aWxkKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQnVpbGRlcihyZXF1ZXN0TWVzc2FnZSk7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VIZWFkZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2U7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiB0eXBlZDsKKworICAgICAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlSGVhZGVyKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIGJvb2xlYW4gdHlwZWQpIHsKKyAgICAgICAgICAgIHRoaXMucmVzcG9uc2VNZXNzYWdlID0gcmVzcG9uc2VNZXNzYWdlOworICAgICAgICAgICAgdGhpcy50eXBlZCA9IHR5cGVkOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBnZXRSZXNwb25zZU1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VNZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0VHlwZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZWQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgYnVpbGQoZmluYWwgVVVJRCByZXF1ZXN0SWQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyKHJlcXVlc3RJZCk7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VGb290ZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2U7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiB0eXBlZDsKKworICAgICAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlRm9vdGVyKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIGJvb2xlYW4gdHlwZWQpIHsKKyAgICAgICAgICAgIHRoaXMucmVzcG9uc2VNZXNzYWdlID0gcmVzcG9uc2VNZXNzYWdlOworICAgICAgICAgICAgdGhpcy50eXBlZCA9IHR5cGVkOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBnZXRSZXNwb25zZU1lc3NhZ2UoKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VNZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0VHlwZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gdHlwZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEJ1aWxkZXIgYnVpbGQoKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcigpOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgQnVpbGRlciB7CisgICAgICAgIHByaXZhdGUgSHR0cFJlc3BvbnNlU3RhdHVzIGNvZGUgPSBudWxsOworICAgICAgICBwcml2YXRlIExpc3Q8T2JqZWN0PiByZXN1bHQgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGJ1bGtlZCA9IGZhbHNlOworICAgICAgICBwcml2YXRlIFN0cmluZyBzdGF0dXNNZXNzYWdlID0gbnVsbDsKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZXhjZXB0aW9uID0gbnVsbDsKIAotICAgICAgICBwcml2YXRlIGZpbmFsIFVVSUQgcmVxdWVzdElkOwotICAgICAgICBwcml2YXRlIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlID0gUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1M7Ci0gICAgICAgIHByaXZhdGUgT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1c01lc3NhZ2UgPSAiIjsKLSAgICAgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IGF0dHJpYnV0ZXMgPSBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOwotICAgICAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE9iamVjdD4gbWV0YURhdGEgPSBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOworICAgICAgICBwcml2YXRlIEJ1aWxkZXIoKSB7IH0KIAotICAgICAgICBwcml2YXRlIEJ1aWxkZXIoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHRoaXMucmVxdWVzdElkID0gcmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIEJ1aWxkZXIoZmluYWwgVVVJRCByZXF1ZXN0SWQpIHsKLSAgICAgICAgICAgIHRoaXMucmVxdWVzdElkID0gcmVxdWVzdElkOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgY29kZShmaW5hbCBSZXNwb25zZVN0YXR1c0NvZGUgY29kZSkgeworICAgICAgICBwdWJsaWMgQnVpbGRlciBjb2RlKGZpbmFsIEh0dHBSZXNwb25zZVN0YXR1cyBjb2RlKSB7CiAgICAgICAgICAgICB0aGlzLmNvZGUgPSBjb2RlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTEwMiwzOSArMTE1LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHN0YXR1c0F0dHJpYnV0ZXMoZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzKSB7Ci0gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgICAgICBwdWJsaWMgQnVpbGRlciBleGNlcHRpb24oZmluYWwgU3RyaW5nIGV4Y2VwdGlvbikgeworICAgICAgICAgICAgdGhpcy5leGNlcHRpb24gPSBleGNlcHRpb247CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHN0YXR1c0F0dHJpYnV0ZUV4Y2VwdGlvbihmaW5hbCBUaHJvd2FibGUgZXgpIHsKLSAgICAgICAgICAgIHN0YXR1c0F0dHJpYnV0ZShUb2tlbnMuU1RBVFVTX0FUVFJJQlVURV9FWENFUFRJT05TLCBJdGVyYXRvclV0aWxzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JVdGlscy5tYXAoRXhjZXB0aW9uVXRpbHMuZ2V0VGhyb3dhYmxlTGlzdChleCksIHQgLT4gdC5nZXRDbGFzcygpLmdldE5hbWUoKSkpKTsKLSAgICAgICAgICAgIHN0YXR1c0F0dHJpYnV0ZShUb2tlbnMuU1RBVFVTX0FUVFJJQlVURV9TVEFDS19UUkFDRSwgRXhjZXB0aW9uVXRpbHMuZ2V0U3RhY2tUcmFjZShleCkpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQnVpbGRlciBzdGF0dXNBdHRyaWJ1dGUoZmluYWwgU3RyaW5nIGtleSwgZmluYWwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5hdHRyaWJ1dGVzID09IENvbGxlY3Rpb25zLkVNUFRZX01BUCkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICAgICAgYXR0cmlidXRlcy5wdXQoa2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHJlc3VsdChmaW5hbCBPYmplY3QgcmVzdWx0KSB7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHJlc3VsdChmaW5hbCBMaXN0PE9iamVjdD4gcmVzdWx0KSB7CiAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIEJ1aWxkZXIgcmVzcG9uc2VNZXRhRGF0YShmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGFEYXRhKSB7Ci0gICAgICAgICAgICB0aGlzLm1ldGFEYXRhID0gbWV0YURhdGE7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyIGJ1bGtlZChmaW5hbCBib29sZWFuIGJ1bGtlZCkgeworICAgICAgICAgICAgdGhpcy5idWxrZWQgPSBidWxrZWQ7CiAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgY3JlYXRlKCkgewotICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VSZXN1bHQgcmVzcG9uc2VSZXN1bHQgPSBuZXcgUmVzcG9uc2VSZXN1bHQocmVzdWx0LCBtZXRhRGF0YSk7Ci0gICAgICAgICAgICBmaW5hbCBSZXNwb25zZVN0YXR1cyByZXNwb25zZVN0YXR1cyA9IG5ldyBSZXNwb25zZVN0YXR1cyhjb2RlLCBzdGF0dXNNZXNzYWdlLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VNZXNzYWdlKHJlcXVlc3RJZCwgcmVzcG9uc2VTdGF0dXMsIHJlc3BvbnNlUmVzdWx0KTsKKyAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlUmVzdWx0IHJlc3BvbnNlUmVzdWx0ID0gbmV3IFJlc3BvbnNlUmVzdWx0KHJlc3VsdCwgYnVsa2VkKTsKKyAgICAgICAgICAgIC8vIHNraXAgbnVsbCB2YWx1ZXMKKyAgICAgICAgICAgIGlmIChjb2RlID09IG51bGwgJiYgc3RhdHVzTWVzc2FnZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZU1lc3NhZ2UobnVsbCwgcmVzcG9uc2VSZXN1bHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VTdGF0dXMgcmVzcG9uc2VTdGF0dXMgPSBuZXcgUmVzcG9uc2VTdGF0dXMoY29kZSwgc3RhdHVzTWVzc2FnZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VNZXNzYWdlKHJlc3BvbnNlU3RhdHVzLCByZXNwb25zZVJlc3VsdCk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvbWVzc2FnZS9SZXNwb25zZVJlc3VsdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVzcG9uc2VSZXN1bHQuamF2YQppbmRleCBiNjVmYTI2Li5lMGZhODZmIDEwMDY0NAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvbWVzc2FnZS9SZXNwb25zZVJlc3VsdC5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlUmVzdWx0LmphdmEKQEAgLTE4LDMzICsxOCwzMiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlOwogCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCisgKiBEYXRhIG1vZGVsIGZvciB0aGUgInJlc3VsdCIgcG9ydGlvbiBvZiBhIHtAbGluayBSZXNwb25zZU1lc3NhZ2V9LgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgUmVzcG9uc2VSZXN1bHQgewotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IGRhdGE7Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGE7CisgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PE9iamVjdD4gZGF0YTsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gYnVsa2VkOwogCi0gICAgcHVibGljIFJlc3BvbnNlUmVzdWx0KGZpbmFsIE9iamVjdCBkYXRhLCBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGEpIHsKKyAgICBwdWJsaWMgUmVzcG9uc2VSZXN1bHQoZmluYWwgTGlzdDxPYmplY3Q+IGRhdGEsIGZpbmFsIGJvb2xlYW4gYnVsa2VkKSB7CisgICAgICAgIHRoaXMuYnVsa2VkID0gYnVsa2VkOwogICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgICAgICB0aGlzLm1ldGEgPSBtZXRhOwogICAgIH0KIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0RGF0YSgpIHsKKyAgICBwdWJsaWMgTGlzdDxPYmplY3Q+IGdldERhdGEoKSB7CiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KIAotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldE1ldGEoKSB7Ci0gICAgICAgIHJldHVybiBtZXRhOworICAgIHB1YmxpYyBib29sZWFuIGlzQnVsa2VkKCkgeworICAgICAgICByZXR1cm4gYnVsa2VkOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiAiUmVzcG9uc2VSZXN1bHR7IiArCiAgICAgICAgICAgICAgICAgImRhdGE9IiArIGRhdGEgKwotICAgICAgICAgICAgICAgICIsIG1ldGE9IiArIG1ldGEgKwogICAgICAgICAgICAgICAgICd9JzsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvbWVzc2FnZS9SZXNwb25zZVN0YXR1cy5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVzcG9uc2VTdGF0dXMuamF2YQppbmRleCA1NjFmYmJjLi4xZjVmNzVlIDEwMDY0NAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvbWVzc2FnZS9SZXNwb25zZVN0YXR1cy5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlU3RhdHVzLmphdmEKQEAgLTE4LDI2ICsxOCwyNiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlOwogCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOwogCiAvKioKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFJlc3BvbnNlU3RhdHVzIHsKLSAgICBwcml2YXRlIGZpbmFsIFJlc3BvbnNlU3RhdHVzQ29kZSBjb2RlOworICAgIHByaXZhdGUgZmluYWwgSHR0cFJlc3BvbnNlU3RhdHVzIGNvZGU7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKLSAgICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXR0cmlidXRlczsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBleGNlcHRpb247CiAKLSAgICBwdWJsaWMgUmVzcG9uc2VTdGF0dXMoZmluYWwgUmVzcG9uc2VTdGF0dXNDb2RlIGNvZGUsIGZpbmFsIFN0cmluZyBtZXNzYWdlLCBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGF0dHJpYnV0ZXMpIHsKKyAgICBwdWJsaWMgUmVzcG9uc2VTdGF0dXMoZmluYWwgSHR0cFJlc3BvbnNlU3RhdHVzIGNvZGUsIGZpbmFsIFN0cmluZyBtZXNzYWdlLCBmaW5hbCBTdHJpbmcgZXhjZXB0aW9uKSB7CiAgICAgICAgIHRoaXMuY29kZSA9IGNvZGU7CiAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgICAgIHRoaXMuZXhjZXB0aW9uID0gZXhjZXB0aW9uOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEdldHMgdGhlIHtAbGluayBSZXNwb25zZVN0YXR1c0NvZGV9IHRoYXQgZGVzY3JpYmVzIGhvdyB0aGUgc2VydmVyIHJlc3BvbmRlZCB0byB0aGUgcmVxdWVzdC4KKyAgICAgKiBHZXRzIHRoZSB7QGxpbmsgSHR0cFJlc3BvbnNlU3RhdHVzfSB0aGF0IGRlc2NyaWJlcyBob3cgdGhlIHNlcnZlciByZXNwb25kZWQgdG8gdGhlIHJlcXVlc3QuCiAgICAgICovCi0gICAgcHVibGljIFJlc3BvbnNlU3RhdHVzQ29kZSBnZXRDb2RlKCkgeworICAgIHB1YmxpYyBIdHRwUmVzcG9uc2VTdGF0dXMgZ2V0Q29kZSgpIHsKICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgfQogCkBAIC00OSwxMSArNDksMTAgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtZXRhLWRhdGEgcmVsYXRlZCB0byB0aGUgcmVzcG9uc2UuICBJZiBtZXRhLWRhdGEgaXMgcmV0dXJuZWQgaXQgaXMgdG8gYmUgY29uc2lkZXJlZCBzcGVjaWZpYyB0byB0aGUKLSAgICAgKiAib3AiIHRoYXQgaXMgZXhlY3V0ZWQuICBOb3QgYWxsICJvcCIgaW1wbGVtZW50YXRpb25zIHdpbGwgcmV0dXJuIG1ldGEtZGF0YS4KKyAgICAgKiBHZXRzIHRoZSBleGNlcHRpb24gaW4gY2FzZSBvZiBlcnJvci4KICAgICAgKi8KLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRBdHRyaWJ1dGVzKCkgewotICAgICAgICByZXR1cm4gYXR0cmlidXRlczsKKyAgICBwdWJsaWMgU3RyaW5nIGdldEV4Y2VwdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTYxLDcgKzYwLDcgQEAKICAgICAgICAgcmV0dXJuICJSZXNwb25zZVN0YXR1c3siICsKICAgICAgICAgICAgICAgICAiY29kZT0iICsgY29kZSArCiAgICAgICAgICAgICAgICAgIiwgbWVzc2FnZT0nIiArIG1lc3NhZ2UgKyAnXCcnICsKLSAgICAgICAgICAgICAgICAiLCBhdHRyaWJ1dGVzPSIgKyBhdHRyaWJ1dGVzICsKKyAgICAgICAgICAgICAgICAiLCBleGNlcHRpb249IiArIGV4Y2VwdGlvbiArCiAgICAgICAgICAgICAgICAgJ30nOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlU3RhdHVzQ29kZS5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVzcG9uc2VTdGF0dXNDb2RlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwOGY5NmMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVzcG9uc2VTdGF0dXNDb2RlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkZhaWx1cmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLlN0cmVhbTsKLQotLyoqCi0gKiBSZXNwb25zZSBzdGF0dXMgY29kZXMgZm9yIEdyZW1saW4gU2VydmVyIHJlc3BvbnNlcy4gUmVzdWx0IGNvZGVzIHRlbmQgdG8gbWFwIHRvCi0gKiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzEwLmh0bWwiPkhUVFAgc3RhdHVzIGNvZGVzPC9hPi4gIEl0IGlzIG5vdCBhIG9uZS10by1vbmUKLSAqIG1hcHBpbmcgYW5kIHRoZXJlIGFyZSBtYXBwZXIgc3RhdHVzIGNvZGVzIHRvIGJlIGNvbnNpZGVyZWQuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgZW51bSBSZXNwb25zZVN0YXR1c0NvZGUgewotCi0gICAgLyoqCi0gICAgICogQ29kZSAyMDA6IFRoZSBzZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBhIHJlcXVlc3QgdG8gY29tcGxldGlvbiAtIHRoZXJlIGFyZSBubyBtZXNzYWdlcyByZW1haW5pbmcgaW4gdGhpcwotICAgICAqIHN0cmVhbS4KLSAgICAgKgotICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCi0gICAgICovCi0gICAgU1VDQ0VTUygyMDApLAotCi0gICAgLyoqCi0gICAgICogQ29kZSAyMDQ6IFRoZSBzZXJ2ZXIgcHJvY2Vzc2VkIHRoZSByZXF1ZXN0IGJ1dCB0aGVyZSBpcyBubyByZXN1bHQgdG8gcmV0dXJuIChlLmcuIGFuIHtAbGluayBJdGVyYXRvcn0gd2l0aCBubwotICAgICAqIGVsZW1lbnRzKS4KLSAgICAgKgotICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCi0gICAgICovCi0gICAgTk9fQ09OVEVOVCgyMDQpLAotCi0gICAgLyoqCi0gICAgICogQ29kZSAyMDY6IFRoZSBzZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHJldHVybmVkIHNvbWUgY29udGVudCwgYnV0IHRoZXJlIGlzIG1vcmUgaW4gdGhlIHN0cmVhbSB0byBhcnJpdmUgLSB3YWl0IGZvciBhCi0gICAgICoge0BsaW5rICNTVUNDRVNTfSB0byBzaWduaWZ5IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KLSAgICAgKgotICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCi0gICAgICovCi0gICAgUEFSVElBTF9DT05URU5UKDIwNiksCi0KLSAgICAvKioKLSAgICAgKiBDb2RlIDQwMTogVGhlIHNlcnZlciBjb3VsZCBub3QgYXV0aGVudGljYXRlIHRoZSByZXF1ZXN0IG9yIHRoZSBjbGllbnQgcmVxdWVzdGVkIGEgcmVzb3VyY2UgaXQgZGlkIG5vdCBoYXZlCi0gICAgICogYWNjZXNzIHRvLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKLSAgICAgKi8KLSAgICBVTkFVVEhPUklaRUQoNDAxKSwKLQotICAgIC8qKgotICAgICAqIENvZGUgNDAzOiBUaGUgc2VydmVyIGNvdWxkIGF1dGhlbnRpY2F0ZSB0aGUgcmVxdWVzdCwgYnV0IHdpbGwgbm90IGZ1bGZpbGwgaXQuICBUaGlzIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGNvZGUKLSAgICAgKiB0aGF0IHdvdWxkIHR5cGljYWxseSBiZSByZXR1cm5lZCBpZiB0aGUgcmVxdWVzdCBpcyBhdXRoZW50aWNhdGVkIGJ1dCBub3QgYXV0aG9yaXplZCB0byBkbyB3aGF0IGl0IGlzIGRvaW5nLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuMC4xLWluY3ViYXRpbmcKLSAgICAgKi8KLSAgICBGT1JCSURERU4oNDAzKSwKLQotICAgIC8qKgotICAgICAqIENvZGUgNDA3OiBBIGNoYWxsZW5nZSBmcm9tIHRoZSBzZXJ2ZXIgZm9yIHRoZSBjbGllbnQgdG8gYXV0aGVudGljYXRlIGl0cyByZXF1ZXN0LgotICAgICAqCi0gICAgICogQHNpbmNlIDMuMC4xLWluY3ViYXRpbmcKLSAgICAgKi8KLSAgICBBVVRIRU5USUNBVEUoNDA3KSwKLQotICAgIC8qKgotICAgICAqIENvZGUgNDI5OiBJbmRpY2F0ZXMgdGhhdCB0b28gbWFueSByZXF1ZXN0cyBoYXZlIGJlZW4gc2VudCBpbiBhIGdpdmVuIGFtb3VudCBvZiB0aW1lLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuNS4wCi0gICAgICovCi0gICAgVE9PX01BTllfUkVRVUVTVFMoNDI5KSwKLQotICAgIC8qKgotICAgICAqIENvZGUgNDk3OiBUaGUgcmVxdWVzdCBtZXNzYWdlIGNvbnRhaW5zIG9iamVjdHMgdGhhdCB3ZXJlIG5vdCBzZXJpYWxpemFibGUgb24gdGhlIGNsaWVudCBzaWRlLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuMy42Ci0gICAgICovCi0gICAgUkVRVUVTVF9FUlJPUl9TRVJJQUxJWkFUSU9OKDQ5NyksCi0KLSAgICAvKioKLSAgICAgKiBDb2RlIDQ5ODogVGhlIHJlcXVlc3QgbWVzc2FnZSB3YXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZCB3aGljaCBtZWFucyBpdCBjb3VsZCBub3QgYmUgcGFyc2VkIGF0IGFsbCBvciB0aGUgIm9wIgotICAgICAqIGNvZGUgd2FzIG5vdCByZWNvZ25pemVkIHN1Y2ggdGhhdCBHcmVtbGluIFNlcnZlciBjb3VsZCBwcm9wZXJseSByb3V0ZSBpdCBmb3IgcHJvY2Vzc2luZy4gIENoZWNrIHRoZSBtZXNzYWdlCi0gICAgICogZm9ybWF0IGFuZCByZXRyeSB0aGUgcmVxdWVzdC4KLSAgICAgKgotICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCi0gICAgICovCi0gICAgUkVRVUVTVF9FUlJPUl9NQUxGT1JNRURfUkVRVUVTVCg0OTgpLAotCi0gICAgLyoqCi0gICAgICogQ29kZSA0OTk6IFRoZSByZXF1ZXN0IG1lc3NhZ2Ugd2FzIHBhcnNlYWJsZSwgYnV0IHRoZSBhcmd1bWVudHMgc3VwcGxpZWQgaW4gdGhlIG1lc3NhZ2Ugd2VyZSBpbiBjb25mbGljdCBvcgotICAgICAqIGluY29tcGxldGUuIENoZWNrIHRoZSBtZXNzYWdlIGZvcm1hdCBhbmQgcmV0cnkgdGhlIHJlcXVlc3QuCi0gICAgICoKLSAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwotICAgICAqLwotICAgIFJFUVVFU1RfRVJST1JfSU5WQUxJRF9SRVFVRVNUX0FSR1VNRU5UUyg0OTkpLAotCi0gICAgLyoqCi0gICAgICogQ29kZSA1MDA6IEEgZ2VuZXJhbCBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgdGhhdCBwcmV2ZW50ZWQgdGhlIHJlcXVlc3QgZnJvbSBiZWluZyBwcm9jZXNzZWQuCi0gICAgICoKLSAgICAgKiBAc2luY2UgMy4wLjAtaW5jdWJhdGluZwotICAgICAqLwotICAgIFNFUlZFUl9FUlJPUig1MDApLAotCi0gICAgLyoqCi0gICAgICogQ29kZSA1OTU6IEEgc2VydmVyIGVycm9yIHRoYXQgaXMgcHJvZHVjZWQgd2hlbiB0aGUge0BsaW5rIEdyYXBoVHJhdmVyc2FsI2ZhaWwoKX0gc3RlcCBpcyB0cmlnZ2VyZWQuIFRoZQotICAgICAqIHJldHVybmVkIGV4Y2VwdGlvbiB3aWxsIGluY2x1ZGUgaW5mb3JtYXRpb24gY29uc2lzdGVudCB3aXRoIHRoZSB7QGxpbmsgRmFpbHVyZX0gaW50ZXJmYWNlLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuNi4wCi0gICAgICovCi0gICAgU0VSVkVSX0VSUk9SX0ZBSUxfU1RFUCg1OTUpLAotCi0gICAgLyoqCi0gICAgICogQ29kZSA1OTY6IEEgc2VydmVyIGVycm9yIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBzaG91bGQgcmV0cnkgdGhlIHJlcXVlc3QuIEEgZ3JhcGggd2lsbCB0eXBpY2FsbHkgcmV0dXJuCi0gICAgICogdGhpcyBlcnJvciB3aGVuIGEgdHJhbnNhY3Rpb24gZmFpbHMgZHVlIHRvIGEgbG9ja2luZyBleGNlcHRpb24gb3Igc29tZSBvdGhlciBzb3J0IG9mIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLgotICAgICAqIEluIG90aGVyIHdvcmRzLCB0aGUgcmVxdWVzdCB3YXMgbGlrZWx5IHZhbGlkIGJ1dCB0aGUgc3RhdGUgb2YgdGhlIHNlcnZlciBhdCB0aGUgcGFydGljdWxhciB0aW1lIHRoZSByZXF1ZXN0Ci0gICAgICogYXJyaXZlZCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkIHRvIHN1Y2Nlc3MsIGJ1dCBjb3VsZCBiZSBhdCBhIGxhdGVyIG1vbWVudC4KLSAgICAgKgotICAgICAqIEBzaW5jZSAzLjQuMTEKLSAgICAgKi8KLSAgICBTRVJWRVJfRVJST1JfVEVNUE9SQVJZKDU5NiksCi0KLSAgICAvKioKLSAgICAgKiBDb2RlIDU5NzogVGhlIHJlcXVlc3Qgc3VibWl0dGVkIGZvciBwcm9jZXNzaW5nIGV2YWx1YXRlZCBieSB0aGUgc2VydmVyIHdpdGggZXJyb3JzIGFuZCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLgotICAgICAqIENoZWNrIHRoZSBzY3JpcHQgb3IgcmVtb3RlIHRyYXZlcnNhbCBzdWJtaXR0ZWQgZm9yIGVycm9ycyBvciBvdGhlciBwcm9ibGVtcyBhbmQgdGhlbiByZXN1Ym1pdC4KLSAgICAgKgotICAgICAqIEBzaW5jZSAzLjAuMC1pbmN1YmF0aW5nCi0gICAgICovCi0gICAgU0VSVkVSX0VSUk9SX0VWQUxVQVRJT04oNTk3KSwKLQotICAgIC8qKgotICAgICAqIENvZGUgNTk4OiBUaGUgc2VydmVyIGV4Y2VlZGVkIG9uZSBvZiB0aGUgdGltZW91dCBzZXR0aW5ncyBmb3IgdGhlIHJlcXVlc3QgYW5kIGNvdWxkIHRoZXJlZm9yZSBvbmx5IHBhcnRpYWxseQotICAgICAqIHJlc3BvbmRlZCBvciBkaWQgbm90IHJlc3BvbmQgYXQgYWxsLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKLSAgICAgKi8KLSAgICBTRVJWRVJfRVJST1JfVElNRU9VVCg1OTgpLAotCi0gICAgLyoqCi0gICAgICogQ29kZSA1OTk6IFRoZSBzZXJ2ZXIgd2FzIG5vdCBjYXBhYmxlIG9mIHNlcmlhbGl6aW5nIGFuIG9iamVjdCB0aGF0IHdhcyByZXR1cm5lZCBmcm9tIHRoZSBzY3JpcHQgc3VwcGxpZWQgb24gdGhlCi0gICAgICogcmVxdWVzdC4gRWl0aGVyIHRyYW5zZm9ybSB0aGUgb2JqZWN0IGludG8gc29tZXRoaW5nIEdyZW1saW4gU2VydmVyIGNhbiBwcm9jZXNzIHdpdGhpbiB0aGUgc2NyaXB0IG9yIGluc3RhbGwKLSAgICAgKiBtYXBwZXIgc2VyaWFsaXphdGlvbiBjbGFzc2VzIHRvIEdyZW1saW4gU2VydmVyLgotICAgICAqCi0gICAgICogQHNpbmNlIDMuMC4wLWluY3ViYXRpbmcKLSAgICAgKi8KLSAgICBTRVJWRVJfRVJST1JfU0VSSUFMSVpBVElPTig1OTkpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgdmFsdWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWFwPEludGVnZXIsIFJlc3BvbnNlU3RhdHVzQ29kZT4gY29kZVZhbHVlTWFwID0gbmV3IEhhc2hNYXA8PigpOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgU3RyZWFtLm9mKFJlc3BvbnNlU3RhdHVzQ29kZS52YWx1ZXMoKSkuZm9yRWFjaChjb2RlIC0+IGNvZGVWYWx1ZU1hcC5wdXQoY29kZS5nZXRWYWx1ZSgpLCBjb2RlKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSZXNwb25zZVN0YXR1c0NvZGUgZ2V0RnJvbVZhbHVlKGZpbmFsIGludCBjb2RlVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIGNvZGVWYWx1ZU1hcC5nZXQoY29kZVZhbHVlKTsKLSAgICB9Ci0KLSAgICBSZXNwb25zZVN0YXR1c0NvZGUoZmluYWwgaW50IHZhbHVlKSB7Ci0gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFZhbHVlKCkgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNTdWNjZXNzKCkgewotICAgICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2YodGhpcy52YWx1ZSkuc3RhcnRzV2l0aCgiMiIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzdGF0dXMgY29kZSBjYW4gb25seSBiZSB1c2VkIGluIHRoZSBsYXN0IHJlc3BvbnNlIGZvciBhIHBhcnRpY3VsYXIgcmVxdWVzdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmFsUmVzcG9uc2UoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzICE9IFBBUlRJQUxfQ09OVEVOVCAmJiB0aGlzICE9IEFVVEhFTlRJQ0FURTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyYTBkZTYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IGlvLm5ldHR5LnV0aWwuUmVmZXJlbmNlQ291bnRVdGlsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlZlcnNpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLnR5cGUuVHlwZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmpzb250eXBlLlR5cGVTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLm1vZHVsZS5TaW1wbGVNb2R1bGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxIGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplcjxPYmplY3RNYXBwZXI+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MpOwotCi0gICAgcHJvdGVjdGVkIE9iamVjdE1hcHBlciBtYXBwZXI7Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgVHlwZVJlZmVyZW5jZTxNYXA8U3RyaW5nLCBPYmplY3Q+PiBtYXBUeXBlUmVmZXJlbmNlID0gbmV3IFR5cGVSZWZlcmVuY2U8TWFwPFN0cmluZywgT2JqZWN0Pj4oKSB7Ci0gICAgfTsKLQotICAgIHB1YmxpYyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMSgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyID0gY29uZmlndXJlQnVpbGRlcihpbml0QnVpbGRlcihudWxsKSk7Ci0gICAgICAgIG1hcHBlciA9IGJ1aWxkZXIuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxKGZpbmFsIEdyYXBoU09OTWFwcGVyIG1hcHBlcikgewotICAgICAgICB0aGlzLm1hcHBlciA9IG1hcHBlci5jcmVhdGVNYXBwZXIoKTsKLSAgICB9Ci0KLSAgICBhYnN0cmFjdCBieXRlW10gb2J0YWluSGVhZGVyKCk7Ci0KLSAgICBhYnN0cmFjdCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZywgZmluYWwgTWFwPFN0cmluZywgR3JhcGg+IGdyYXBocykgewotICAgICAgICBmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGluaXRpYWxCdWlsZGVyID0gaW5pdEJ1aWxkZXIobnVsbCk7Ci0gICAgICAgIGFkZElvUmVnaXN0cmllcyhjb25maWcsIGluaXRpYWxCdWlsZGVyKTsKLSAgICAgICAgYXBwbHlNYXhUb2tlbkxpbWl0cyhpbml0aWFsQnVpbGRlciwgY29uZmlnKTsKLSAgICAgICAgbWFwcGVyID0gY29uZmlndXJlQnVpbGRlcihpbml0aWFsQnVpbGRlcikuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVCdWYgc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBCeXRlQnVmIGVuY29kZWRNZXNzYWdlID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgICAgICBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIocGF5bG9hZC5sZW5ndGgpOwotICAgICAgICAgICAgZW5jb2RlZE1lc3NhZ2Uud3JpdGVCeXRlcyhwYXlsb2FkKTsKLQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRNZXNzYWdlOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkTWVzc2FnZSAhPSBudWxsKSBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShlbmNvZGVkTWVzc2FnZSk7Ci0KLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXNwb25zZSBbe31dIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkIGJ5IHt9LiIsIHJlc3BvbnNlTWVzc2FnZS50b1N0cmluZygpLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMS5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVCdWYgc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBCeXRlQnVmIGVuY29kZWRNZXNzYWdlID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBoZWFkZXIgPSBvYnRhaW5IZWFkZXIoKTsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKHJlcXVlc3RNZXNzYWdlKTsKLQotICAgICAgICAgICAgZW5jb2RlZE1lc3NhZ2UgPSBhbGxvY2F0b3IuYnVmZmVyKGhlYWRlci5sZW5ndGggKyBwYXlsb2FkLmxlbmd0aCk7Ci0gICAgICAgICAgICBlbmNvZGVkTWVzc2FnZS53cml0ZUJ5dGVzKGhlYWRlcik7Ci0gICAgICAgICAgICBlbmNvZGVkTWVzc2FnZS53cml0ZUJ5dGVzKHBheWxvYWQpOwotCi0gICAgICAgICAgICByZXR1cm4gZW5jb2RlZE1lc3NhZ2U7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgaWYgKGVuY29kZWRNZXNzYWdlICE9IG51bGwpIFJlZmVyZW5jZUNvdW50VXRpbC5yZWxlYXNlKGVuY29kZWRNZXNzYWdlKTsKLQotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgW3t9XSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBieSB7fS4iLCByZXF1ZXN0TWVzc2FnZS50b1N0cmluZygpLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMS5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplUmVxdWVzdChmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgYnl0ZVtdIHBheWxvYWQgPSBuZXcgYnl0ZVttc2cucmVhZGFibGVCeXRlcygpXTsKLSAgICAgICAgICAgIG1zZy5yZWFkQnl0ZXMocGF5bG9hZCk7Ci0gICAgICAgICAgICByZXR1cm4gbWFwcGVyLnJlYWRWYWx1ZShwYXlsb2FkLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVSZXNwb25zZShmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgYnl0ZVtdIHBheWxvYWQgPSBuZXcgYnl0ZVttc2cucmVhZGFibGVCeXRlcygpXTsKLSAgICAgICAgICAgIG1zZy5yZWFkQnl0ZXMocGF5bG9hZCk7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlc3BvbnNlRGF0YSA9IG1hcHBlci5yZWFkVmFsdWUocGF5bG9hZCwgbWFwVHlwZVJlZmVyZW5jZSk7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHN0YXR1cyA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSByZXNwb25zZURhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9TVEFUVVMpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgcmVzcG9uc2VEYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKTsKLQotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtZXRhID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3VsdC5nZXQoU2VyVG9rZW5zLlRPS0VOX01FVEEpOwotICAgICAgICAgICAgaWYgKG51bGwgPT0gbWV0YSkgewotICAgICAgICAgICAgICAgIGlmIChsb2dnZXIuaXNXYXJuRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgaXMgbWlzc2luZyB0aGUgJ21ldGEnIGZpZWxkIGluIHRoZSByZXN1bHQgLSBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IG1hcC4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBzdGF0dXNBdHRyaWJ1dGVzID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHN0YXR1cy5nZXQoU2VyVG9rZW5zLlRPS0VOX0FUVFJJQlVURVMpOwotICAgICAgICAgICAgaWYgKG51bGwgPT0gc3RhdHVzQXR0cmlidXRlcykgewotICAgICAgICAgICAgICAgIGlmIChsb2dnZXIuaXNXYXJuRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgaXMgbWlzc2luZyB0aGUgJ2F0dHJpYnV0ZXMnIGZpZWxkIGluIHRoZSBzdGF0dXMgLSBkZWZhdWx0aW5nIHRvIGFuIGVtcHR5IG1hcC4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELmZyb21TdHJpbmcocmVzcG9uc2VEYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkudG9TdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5nZXRGcm9tVmFsdWUoKEludGVnZXIpIHN0YXR1cy5nZXQoU2VyVG9rZW5zLlRPS0VOX0NPREUpKSkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoU3RyaW5nLnZhbHVlT2Yoc3RhdHVzLmdldChTZXJUb2tlbnMuVE9LRU5fTUVTU0FHRSkpKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlcyhudWxsID09IHN0YXR1c0F0dHJpYnV0ZXMgPyBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpIDogc3RhdHVzQXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAgICAgLnJlc3VsdChyZXN1bHQuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKSkKLSAgICAgICAgICAgICAgICAgICAgLnJlc3BvbnNlTWV0YURhdGEobnVsbCA9PSBtZXRhID8gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSA6IG1ldGEpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBpbml0QnVpbGRlcihmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBiID0gbnVsbCA9PSBidWlsZGVyID8gR3JhcGhTT05NYXBwZXIuYnVpbGQoKSA6IGJ1aWxkZXI7Ci0gICAgICAgIHJldHVybiBiLmFkZEN1c3RvbU1vZHVsZShuZXcgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuR3JlbWxpblNlcnZlck1vZHVsZSgpKQotICAgICAgICAgICAgICAgIC52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMV8wKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYXBwbHlNYXhUb2tlbkxpbWl0cyhmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIsIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnKSB7Ci0gICAgICAgIGlmKGNvbmZpZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZihjb25maWcuY29udGFpbnNLZXkoIm1heE51bWJlckxlbmd0aCIpKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5tYXhOdW1iZXJMZW5ndGgoKGludCljb25maWcuZ2V0KCJtYXhOdW1iZXJMZW5ndGgiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihjb25maWcuY29udGFpbnNLZXkoIm1heFN0cmluZ0xlbmd0aCIpKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5tYXhTdHJpbmdMZW5ndGgoKGludCljb25maWcuZ2V0KCJtYXhTdHJpbmdMZW5ndGgiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihjb25maWcuY29udGFpbnNLZXkoIm1heE5lc3RpbmdEZXB0aCIpKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5tYXhOZXN0aW5nRGVwdGgoKGludCljb25maWcuZ2V0KCJtYXhOZXN0aW5nRGVwdGgiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1aWxkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdE1hcHBlciBnZXRNYXBwZXIoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1hcHBlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIEdyZW1saW5TZXJ2ZXJNb2R1bGUgZXh0ZW5kcyBTaW1wbGVNb2R1bGUgewotICAgICAgICBwdWJsaWMgR3JlbWxpblNlcnZlck1vZHVsZSgpIHsKLSAgICAgICAgICAgIHN1cGVyKCJncmFwaHNvbi1ncmVtbGluLXNlcnZlciIpOwotICAgICAgICAgICAgYWRkU2VyaWFsaXplcihSZXNwb25zZU1lc3NhZ2UuY2xhc3MsIG5ldyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyIGV4dGVuZHMgU3RkU2VyaWFsaXplcjxSZXNwb25zZU1lc3NhZ2U+IHsKLSAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgICAgICBzdXBlcihSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25HZW5lcmF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHNlcihyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlciwgbnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplV2l0aFR5cGUoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyaWFsaXplcikgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBzZXIocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcihmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0T2JqZWN0KCk7Ci0gICAgICAgICAgICBpZiAodHlwZVNlcmlhbGl6ZXIgIT0gbnVsbCkganNvbkdlbmVyYXRvci53cml0ZVN0cmluZ0ZpZWxkKEdyYXBoU09OVG9rZW5zLkNMQVNTLCBIYXNoTWFwLmNsYXNzLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCwgcmVzcG9uc2VNZXNzYWdlLmdldFJlcXVlc3RJZCgpICE9IG51bGwgPyByZXNwb25zZU1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSA6IG51bGwpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkU3RhcnQoU2VyVG9rZW5zLlRPS0VOX1NUQVRVUyk7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlU2VyaWFsaXplciAhPSBudWxsKSBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoR3JhcGhTT05Ub2tlbnMuQ0xBU1MsIEhhc2hNYXAuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChTZXJUb2tlbnMuVE9LRU5fTUVTU0FHRSwgcmVzcG9uc2VNZXNzYWdlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlTnVtYmVyRmllbGQoU2VyVG9rZW5zLlRPS0VOX0NPREUsIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoU2VyVG9rZW5zLlRPS0VOX0FUVFJJQlVURVMsIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOwotCi0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGRTdGFydChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKTsKLSAgICAgICAgICAgIGlmICh0eXBlU2VyaWFsaXplciAhPSBudWxsKSBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoR3JhcGhTT05Ub2tlbnMuQ0xBU1MsIEhhc2hNYXAuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGlmIChudWxsID09IHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpCi0gICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU51bGxGaWVsZChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlV2l0aFR5cGUoU2VyVG9rZW5zLlRPS0VOX0RBVEEsIHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCksIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlciwgdHlwZVNlcmlhbGl6ZXIpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKFNlclRva2Vucy5UT0tFTl9NRVRBLCByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpKTsKLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVFbmRPYmplY3QoKTsKLQotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZE9iamVjdCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjY2ZGE1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOwotCi1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgaW8ubmV0dHkudXRpbC5SZWZlcmVuY2VDb3VudFV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5BYnN0cmFjdE9iamVjdERlc2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05WZXJzaW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OWE1vZHVsZVYyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmpzb250eXBlLlR5cGVTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLm1vZHVsZS5TaW1wbGVNb2R1bGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyIGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplcjxPYmplY3RNYXBwZXI+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MpOwotCi0gICAgcHJvdGVjdGVkIE9iamVjdE1hcHBlciBtYXBwZXI7Ci0KLSAgICBwdWJsaWMgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIoKSB7Ci0gICAgICAgIGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlciA9IGNvbmZpZ3VyZUJ1aWxkZXIoaW5pdEJ1aWxkZXIobnVsbCkpOwotICAgICAgICBtYXBwZXIgPSBidWlsZGVyLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKGZpbmFsIEdyYXBoU09OTWFwcGVyIG1hcHBlcikgewotICAgICAgICB0aGlzLm1hcHBlciA9IG1hcHBlci5jcmVhdGVNYXBwZXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBtYXBwZXJCdWlsZGVyKSB7Ci0gICAgICAgIHRoaXMubWFwcGVyID0gY29uZmlndXJlQnVpbGRlcihtYXBwZXJCdWlsZGVyKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKLSAgICB9Ci0KLSAgICBhYnN0cmFjdCBieXRlW10gb2J0YWluSGVhZGVyKCk7Ci0KLSAgICBhYnN0cmFjdCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZywgZmluYWwgTWFwPFN0cmluZywgR3JhcGg+IGdyYXBocykgewotICAgICAgICBmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGluaXRpYWxCdWlsZGVyID0gaW5pdEJ1aWxkZXIobnVsbCk7Ci0gICAgICAgIGFkZElvUmVnaXN0cmllcyhjb25maWcsIGluaXRpYWxCdWlsZGVyKTsKLSAgICAgICAgYXBwbHlNYXhUb2tlbkxpbWl0cyhpbml0aWFsQnVpbGRlciwgY29uZmlnKTsKLSAgICAgICAgbWFwcGVyID0gY29uZmlndXJlQnVpbGRlcihpbml0aWFsQnVpbGRlcikuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEJ5dGVCdWYgc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBCeXRlQnVmIGVuY29kZWRNZXNzYWdlID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgICAgICBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIocGF5bG9hZC5sZW5ndGgpOwotICAgICAgICAgICAgZW5jb2RlZE1lc3NhZ2Uud3JpdGVCeXRlcyhwYXlsb2FkKTsKLQotICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRNZXNzYWdlOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkTWVzc2FnZSAhPSBudWxsKSBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShlbmNvZGVkTWVzc2FnZSk7Ci0KLSAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlc3BvbnNlIFslc10gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkgJXMuIiwgcmVzcG9uc2VNZXNzYWdlLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCkpLCBleCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnl0ZUJ1ZiBzZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIEJ5dGVCdWYgZW5jb2RlZE1lc3NhZ2UgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGhlYWRlciA9IG9idGFpbkhlYWRlcigpOwotICAgICAgICAgICAgZmluYWwgYnl0ZVtdIHBheWxvYWQgPSBtYXBwZXIud3JpdGVWYWx1ZUFzQnl0ZXMocmVxdWVzdE1lc3NhZ2UpOwotCi0gICAgICAgICAgICBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIoaGVhZGVyLmxlbmd0aCArIHBheWxvYWQubGVuZ3RoKTsKLSAgICAgICAgICAgIGVuY29kZWRNZXNzYWdlLndyaXRlQnl0ZXMoaGVhZGVyKTsKLSAgICAgICAgICAgIGVuY29kZWRNZXNzYWdlLndyaXRlQnl0ZXMocGF5bG9hZCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVkTWVzc2FnZTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBpZiAoZW5jb2RlZE1lc3NhZ2UgIT0gbnVsbCkgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UoZW5jb2RlZE1lc3NhZ2UpOwotCi0gICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJSZXF1ZXN0IFslc10gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkgJXMuIiwgcmVxdWVzdE1lc3NhZ2UsIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyLmNsYXNzLmdldE5hbWUoKSksIGV4KTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZVJlcXVlc3QoZmluYWwgQnl0ZUJ1ZiBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gbmV3IGJ5dGVbbXNnLnJlYWRhYmxlQnl0ZXMoKV07Ci0gICAgICAgICAgICBtc2cucmVhZEJ5dGVzKHBheWxvYWQpOwotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci5yZWFkVmFsdWUocGF5bG9hZCwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlcXVlc3QgWyVzXSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5ICVzLiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIEJ5dGVCdWYgbXNnKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBieXRlW10gcGF5bG9hZCA9IG5ldyBieXRlW21zZy5yZWFkYWJsZUJ5dGVzKCldOwotICAgICAgICAgICAgbXNnLnJlYWRCeXRlcyhwYXlsb2FkKTsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIucmVhZFZhbHVlKHBheWxvYWQsIFJlc3BvbnNlTWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oU3RyaW5nLmZvcm1hdCgiUmVzcG9uc2UgWyVzXSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5ICVzLiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGluaXRCdWlsZGVyKGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICBmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGIgPSBudWxsID09IGJ1aWxkZXIgPyBHcmFwaFNPTk1hcHBlci5idWlsZCgpIDogYnVpbGRlcjsKLSAgICAgICAgcmV0dXJuIGIuYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVYyLmJ1aWxkKCkpCi0gICAgICAgICAgICAgICAgLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYyXzApOwotICAgIH0KLQotICAgIHByaXZhdGUgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBhcHBseU1heFRva2VuTGltaXRzKGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlciwgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWcpIHsKLSAgICAgICAgaWYoY29uZmlnICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmKGNvbmZpZy5jb250YWluc0tleSgibWF4TnVtYmVyTGVuZ3RoIikpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLm1heE51bWJlckxlbmd0aCgoaW50KWNvbmZpZy5nZXQoIm1heE51bWJlckxlbmd0aCIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKGNvbmZpZy5jb250YWluc0tleSgibWF4U3RyaW5nTGVuZ3RoIikpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLm1heFN0cmluZ0xlbmd0aCgoaW50KWNvbmZpZy5nZXQoIm1heFN0cmluZ0xlbmd0aCIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKGNvbmZpZy5jb250YWluc0tleSgibWF4TmVzdGluZ0RlcHRoIikpIHsKLSAgICAgICAgICAgICAgICBidWlsZGVyLm1heE5lc3RpbmdEZXB0aCgoaW50KWNvbmZpZy5nZXQoIm1heE5lc3RpbmdEZXB0aCIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVpbGRlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0TWFwcGVyIGdldE1hcHBlcigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubWFwcGVyOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgR3JlbWxpblNlcnZlck1vZHVsZSBleHRlbmRzIFNpbXBsZU1vZHVsZSB7Ci0gICAgICAgIHB1YmxpYyBHcmVtbGluU2VydmVyTW9kdWxlKCkgewotICAgICAgICAgICAgc3VwZXIoImdyYXBoc29uLWdyZW1saW4tc2VydmVyIik7Ci0KLSAgICAgICAgICAgIC8vIFNFUklBTElaRVJTCi0gICAgICAgICAgICBhZGRTZXJpYWxpemVyKFJlc3BvbnNlTWVzc2FnZS5jbGFzcywgbmV3IFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgICAgICBhZGRTZXJpYWxpemVyKFJlcXVlc3RNZXNzYWdlLmNsYXNzLCBuZXcgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyKCkpOwotCi0gICAgICAgICAgICAvL0RFU0VSSUFMSVpFUlMKLSAgICAgICAgICAgIGFkZERlc2VyaWFsaXplcihSZXNwb25zZU1lc3NhZ2UuY2xhc3MsIG5ldyBSZXNwb25zZU1lc3NhZ2VEZXNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoUmVxdWVzdE1lc3NhZ2UuY2xhc3MsIG5ldyBSZXF1ZXN0TWVzc2FnZURlc2VyaWFsaXplcigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyIGV4dGVuZHMgU3RkU2VyaWFsaXplcjxSZXF1ZXN0TWVzc2FnZT4gewotICAgICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyKCkgewotICAgICAgICAgICAgc3VwZXIoUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHNlcihyZXF1ZXN0TWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemVXaXRoVHlwZShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyaWFsaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHNlcihyZXF1ZXN0TWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXIoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyaWFsaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KHJlcXVlc3RNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7Ci0KLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCwgcmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoU2VyVG9rZW5zLlRPS0VOX09QLCByZXF1ZXN0TWVzc2FnZS5nZXRPcCgpKTsKLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChTZXJUb2tlbnMuVE9LRU5fUFJPQ0VTU09SLCByZXF1ZXN0TWVzc2FnZS5nZXRQcm9jZXNzb3IoKSk7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoU2VyVG9rZW5zLlRPS0VOX0FSR1MsIHJlcXVlc3RNZXNzYWdlLmdldEFyZ3MoKSk7Ci0KLSAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChyZXF1ZXN0TWVzc2FnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZURlc2VyaWFsaXplciBleHRlbmRzIEFic3RyYWN0T2JqZWN0RGVzZXJpYWxpemVyPFJlcXVlc3RNZXNzYWdlPiB7Ci0gICAgICAgIHByb3RlY3RlZCBSZXF1ZXN0TWVzc2FnZURlc2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgY3JlYXRlT2JqZWN0KGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gZGF0YSkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhcmdzID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIGRhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9BUkdTKTsKLSAgICAgICAgICAgIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKGRhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9PUCkudG9TdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQuZnJvbVN0cmluZyhkYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkudG9TdHJpbmcoKSkpOwotCi0gICAgICAgICAgICBpZiAoZGF0YS5jb250YWluc0tleShTZXJUb2tlbnMuVE9LRU5fUFJPQ0VTU09SKSkKLSAgICAgICAgICAgICAgICBidWlsZGVyID0gYnVpbGRlci5wcm9jZXNzb3IoZGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX1BST0NFU1NPUikudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgIGlmIChhcmdzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIE9iamVjdD4ga3YgOiBhcmdzLmVudHJ5U2V0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlciA9IGJ1aWxkZXIuYWRkQXJnKGt2LmdldEtleSgpLCBrdi5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyIGV4dGVuZHMgU3RkU2VyaWFsaXplcjxSZXNwb25zZU1lc3NhZ2U+IHsKLSAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgICAgICBzdXBlcihSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgc2VyKHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCBudWxsKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemVXaXRoVHlwZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgc2VyKHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplcik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7Ci0KLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCwgcmVzcG9uc2VNZXNzYWdlLmdldFJlcXVlc3RJZCgpICE9IG51bGwgPyByZXNwb25zZU1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSA6IG51bGwpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShTZXJUb2tlbnMuVE9LRU5fU1RBVFVTKTsKLQotICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoU2VyVG9rZW5zLlRPS0VOX01FU1NBR0UsIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU51bWJlckZpZWxkKFNlclRva2Vucy5UT0tFTl9DT0RFLCByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmdldFZhbHVlKCkpOwotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKFNlclRva2Vucy5UT0tFTl9BVFRSSUJVVEVTLCByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKLQotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKTsKLQotICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7Ci0KLSAgICAgICAgICAgIGlmIChudWxsID09IHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpewotICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVOdWxsRmllbGQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgcmVzdWx0ID0gcmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVyUHJvdmlkZXIuZmluZFR5cGVkVmFsdWVTZXJpYWxpemVyKHJlc3VsdC5nZXRDbGFzcygpLCB0cnVlLCBudWxsKS5zZXJpYWxpemUocmVzdWx0LCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0RmllbGQoU2VyVG9rZW5zLlRPS0VOX01FVEEsIHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXRNZXRhKCkpOwotICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlRW5kT2JqZWN0KHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOwotCi0gICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVFbmRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VEZXNlcmlhbGl6ZXIgZXh0ZW5kcyBBYnN0cmFjdE9iamVjdERlc2VyaWFsaXplcjxSZXNwb25zZU1lc3NhZ2U+IHsKLSAgICAgICAgcHJvdGVjdGVkIFJlc3BvbnNlTWVzc2FnZURlc2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKFJlc3BvbnNlTWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIGNyZWF0ZU9iamVjdChmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGRhdGEpIHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gc3RhdHVzID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIGRhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9TVEFUVVMpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgZGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWV0YSA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSByZXN1bHQuZ2V0KFNlclRva2Vucy5UT0tFTl9NRVRBKTsKLSAgICAgICAgICAgIGlmIChudWxsID09IG1ldGEpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLmlzV2FybkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlc3BvbnNlIGlzIG1pc3NpbmcgdGhlICdtZXRhJyBmaWVsZCBpbiB0aGUgcmVzdWx0IC0gZGVmYXVsdGluZyB0byBhbiBlbXB0eSBtYXAuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gc3RhdHVzQXR0cmlidXRlcyA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSBzdGF0dXMuZ2V0KFNlclRva2Vucy5UT0tFTl9BVFRSSUJVVEVTKTsKLSAgICAgICAgICAgIGlmIChudWxsID09IHN0YXR1c0F0dHJpYnV0ZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9nZ2VyLmlzV2FybkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlc3BvbnNlIGlzIG1pc3NpbmcgdGhlICdhdHRyaWJ1dGVzJyBmaWVsZCBpbiB0aGUgc3RhdHVzIC0gZGVmYXVsdGluZyB0byBhbiBlbXB0eSBtYXAuIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoVVVJRC5mcm9tU3RyaW5nKGRhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS50b1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLmdldEZyb21WYWx1ZSgoSW50ZWdlcikgc3RhdHVzLmdldChTZXJUb2tlbnMuVE9LRU5fQ09ERSkpKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShTdHJpbmcudmFsdWVPZihzdGF0dXMuZ2V0KFNlclRva2Vucy5UT0tFTl9NRVNTQUdFKSkpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKG51bGwgPT0gc3RhdHVzQXR0cmlidXRlcyA/IENvbGxlY3Rpb25zLmVtcHR5TWFwKCkgOiBzdGF0dXNBdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgICAgICAucmVzdWx0KHJlc3VsdC5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpKQotICAgICAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShudWxsID09IG1ldGEgPyBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpIDogbWV0YSkKLSAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYTNkZWYKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmphdmEKQEAgLTAsMCArMSw1MDUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IGlvLm5ldHR5LnV0aWwuUmVmZXJlbmNlQ291bnRVdGlsOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkFic3RyYWN0T2JqZWN0RGVzZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVXRpbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlZlcnNpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblByb2Nlc3NpbmdFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLlNlcmlhbGl6ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5qc29udHlwZS5UeXBlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5tb2R1bGUuU2ltcGxlTW9kdWxlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0IGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplcjxPYmplY3RNYXBwZXI+IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQuY2xhc3MpOworCisgICAgcHJvdGVjdGVkIE9iamVjdE1hcHBlciBtYXBwZXI7CisKKyAgICBwdWJsaWMgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQoKSB7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlciA9IGNvbmZpZ3VyZUJ1aWxkZXIoaW5pdEJ1aWxkZXIoKSk7CisgICAgICAgIG1hcHBlciA9IGJ1aWxkZXIuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCk7CisgICAgfQorCisgICAgcHVibGljIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgbWFwcGVyQnVpbGRlcikgeworICAgICAgICB0aGlzLm1hcHBlciA9IGNvbmZpZ3VyZUJ1aWxkZXIobWFwcGVyQnVpbGRlcikuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCk7CisgICAgfQorCisgICAgYWJzdHJhY3QgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBjb25maWd1cmVCdWlsZGVyKGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlcik7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgT2JqZWN0TWFwcGVyIGdldE1hcHBlcigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubWFwcGVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZywgZmluYWwgTWFwPFN0cmluZywgR3JhcGg+IGdyYXBocykgeworICAgICAgICBmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGluaXRpYWxCdWlsZGVyID0gaW5pdEJ1aWxkZXIoKTsKKyAgICAgICAgYWRkSW9SZWdpc3RyaWVzKGNvbmZpZywgaW5pdGlhbEJ1aWxkZXIpOworICAgICAgICBhcHBseU1heFRva2VuTGltaXRzKGluaXRpYWxCdWlsZGVyLCBjb25maWcpOworICAgICAgICBtYXBwZXIgPSBjb25maWd1cmVCdWlsZGVyKGluaXRpYWxCdWlsZGVyKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgaW5pdEJ1aWxkZXIoKSB7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYiA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCk7CisgICAgICAgIHJldHVybiBiLmFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWNC5idWlsZCgpKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WNF8wKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYXBwbHlNYXhUb2tlbkxpbWl0cyhmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIsIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnKSB7CisgICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGNvbmZpZy5jb250YWluc0tleSgibWF4TnVtYmVyTGVuZ3RoIikpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLm1heE51bWJlckxlbmd0aCgoaW50KSBjb25maWcuZ2V0KCJtYXhOdW1iZXJMZW5ndGgiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uZmlnLmNvbnRhaW5zS2V5KCJtYXhTdHJpbmdMZW5ndGgiKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIubWF4U3RyaW5nTGVuZ3RoKChpbnQpIGNvbmZpZy5nZXQoIm1heFN0cmluZ0xlbmd0aCIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb25maWcuY29udGFpbnNLZXkoIm1heE5lc3RpbmdEZXB0aCIpKSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5tYXhOZXN0aW5nRGVwdGgoKGludCkgY29uZmlnLmdldCgibWF4TmVzdGluZ0RlcHRoIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBidWlsZGVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBCeXRlQnVmIHNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG51bGwgPT0gcmVzcG9uc2VNZXNzYWdlLmdldFN0YXR1cygpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbigiUmVzcG9uc2VTdGF0dXMgY2FuJ3QgYmUgbnVsbCB3aGVuIHNlcmlhbGl6aW5nIGEgZnVsbCBSZXNwb25zZU1lc3NhZ2UuIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gd3JpdGVIZWFkZXIocmVzcG9uc2VNZXNzYWdlLCBhbGxvY2F0b3IpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVCaW5hcnlSZXNwb25zZShmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIHBheWxvYWQgPSBuZXcgYnl0ZVttc2cucmVhZGFibGVCeXRlcygpXTsKKyAgICAgICAgICAgIG1zZy5yZWFkQnl0ZXMocGF5bG9hZCk7CisgICAgICAgICAgICByZXR1cm4gbWFwcGVyLnJlYWRWYWx1ZShwYXlsb2FkLCBSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlc3BvbnNlIFslc10gY291bGQgbm90IGJlIGRlc2VyaWFsaXplZCBieSAlcy4iLCBtc2csIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldE5hbWUoKSksIGV4KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3RlY3RlZCBib29sZWFuIGlzVHlwZWQoKSB7IHJldHVybiB0cnVlOyB9CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVIZWFkZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgQnl0ZUJ1ZiBlbmNvZGVkTWVzc2FnZSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBib29sZWFuIHdyaXRlRnVsbE1lc3NhZ2UgPSByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkgIT0gbnVsbDsKKworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGhlYWRlciA9IG1hcHBlci53cml0ZVZhbHVlQXNCeXRlcyhuZXcgUmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUhlYWRlcihyZXNwb25zZU1lc3NhZ2UsIGlzVHlwZWQoKSkpOworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGRhdGEgPSBnZXRDaHVuayh0cnVlLCByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKKworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGZvb3RlciA9IHdyaXRlRnVsbE1lc3NhZ2UKKyAgICAgICAgICAgICAgICAgICAgPyBtYXBwZXIud3JpdGVWYWx1ZUFzQnl0ZXMobmV3IFJlc3BvbnNlTWVzc2FnZS5SZXNwb25zZU1lc3NhZ2VGb290ZXIocmVzcG9uc2VNZXNzYWdlLCBpc1R5cGVkKCkpKQorICAgICAgICAgICAgICAgICAgICA6IG5ldyBieXRlWzBdOworICAgICAgICAgICAgLy8gc2tpcCBjbG9zaW5nIH0KKyAgICAgICAgICAgIGZpbmFsIGludCBoZWFkZXJMZW4gPSBoZWFkZXIubGVuZ3RoIC0gKGlzVHlwZWQoKSA/IDQgOiAzKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBidWZTaXplID0gaGVhZGVyTGVuICsgZGF0YS5sZW5ndGggKyAod3JpdGVGdWxsTWVzc2FnZSA/IGZvb3Rlci5sZW5ndGggLSAxIDogMCk7CisKKyAgICAgICAgICAgIGVuY29kZWRNZXNzYWdlID0gYWxsb2NhdG9yLmJ1ZmZlcihidWZTaXplKS53cml0ZUJ5dGVzKGhlYWRlciwgMCwgaGVhZGVyTGVuKS53cml0ZUJ5dGVzKGRhdGEpOworCisgICAgICAgICAgICBpZiAod3JpdGVGdWxsTWVzc2FnZSkgeworICAgICAgICAgICAgICAgIGVuY29kZWRNZXNzYWdlLndyaXRlQnl0ZXMoZm9vdGVyLCAxLCBmb290ZXIubGVuZ3RoIC0gMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkTWVzc2FnZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBpZiAoZW5jb2RlZE1lc3NhZ2UgIT0gbnVsbCkgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UoZW5jb2RlZE1lc3NhZ2UpOworCisgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJSZXNwb25zZSBbJXNdIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkIGJ5ICVzLiIsIHJlc3BvbnNlTWVzc2FnZSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBieXRlW10gZ2V0Q2h1bmsoZmluYWwgYm9vbGVhbiBpc0ZpcnN0LCBmaW5hbCBPYmplY3QgYWdncmVnYXRlKSB0aHJvd3MgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBpZiAoYWdncmVnYXRlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgYnl0ZVswXTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdyZW1saW4gc2VydmVyIGFsd2F5cyBwcm9kdWNlIExpc3QKKyAgICAgICAgZmluYWwgTGlzdCBhc0xpc3QgPSAoTGlzdCkgYWdncmVnYXRlOworICAgICAgICBpZiAoYXNMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBieXRlWzBdOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgT2JqZWN0W10gYXJyYXkgPSBuZXcgT2JqZWN0W2FzTGlzdC5zaXplKCldOworICAgICAgICBhc0xpc3QudG9BcnJheShhcnJheSk7CisgICAgICAgIC8vIExpc3Qgc2VyaWFsaXphdGlvbiBhZGRzIGV4dHJhIGRhdGEsIHNvIGFycmF5IHVzZWQKKyAgICAgICAgU3RyaW5nIHN0ciA9IG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoYXJyYXkpOworICAgICAgICAvLyBza2lwIG9wZW5pbmcgYFtgIGFuZCBjbG9zaW5nIGBdYAorICAgICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDEsIHN0ci5sZW5ndGgoKSAtIDEpOworICAgICAgICBpZiAoIWlzRmlyc3QpIHsKKyAgICAgICAgICAgIHN0ciA9ICIsIiArIHN0cjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyLmdldEJ5dGVzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVDaHVuayhmaW5hbCBPYmplY3QgYWdncmVnYXRlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBCeXRlQnVmIGVuY29kZWRNZXNzYWdlID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gZ2V0Q2h1bmsoZmFsc2UsIGFnZ3JlZ2F0ZSk7CisgICAgICAgICAgICBlbmNvZGVkTWVzc2FnZSA9IGFsbG9jYXRvci5idWZmZXIocGF5bG9hZC5sZW5ndGgpLndyaXRlQnl0ZXMocGF5bG9hZCk7CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkTWVzc2FnZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBpZiAoZW5jb2RlZE1lc3NhZ2UgIT0gbnVsbCkgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UoZW5jb2RlZE1lc3NhZ2UpOworCisgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJSZXNwb25zZSBbJXNdIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkIGJ5ICVzLiIsIGFnZ3JlZ2F0ZSwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldE5hbWUoKSksIGV4KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBCeXRlQnVmIHdyaXRlRm9vdGVyKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIEJ5dGVCdWYgZW5jb2RlZE1lc3NhZ2UgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGZvb3RlciA9IG1hcHBlci53cml0ZVZhbHVlQXNCeXRlcyhuZXcgUmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUZvb3RlcihyZXNwb25zZU1lc3NhZ2UsIGlzVHlwZWQoKSkpOworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGRhdGEgPSBnZXRDaHVuayhmYWxzZSwgcmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmdldERhdGEoKSk7CisgICAgICAgICAgICAvLyBza2lwIG9wZW5pbmcgeworICAgICAgICAgICAgZW5jb2RlZE1lc3NhZ2UgPSBhbGxvY2F0b3IuYnVmZmVyKGZvb3Rlci5sZW5ndGggLSAyICsgZGF0YS5sZW5ndGgpLgorICAgICAgICAgICAgICAgICAgICB3cml0ZUJ5dGVzKGRhdGEpLndyaXRlQnl0ZXMoZm9vdGVyLCAxLCBmb290ZXIubGVuZ3RoIC0gMSk7CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkTWVzc2FnZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBpZiAoZW5jb2RlZE1lc3NhZ2UgIT0gbnVsbCkgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UoZW5jb2RlZE1lc3NhZ2UpOworCisgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJSZXNwb25zZSBbJXNdIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkIGJ5ICVzLiIsIHJlc3BvbnNlTWVzc2FnZSwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldE5hbWUoKSksIGV4KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBCeXRlQnVmIHdyaXRlRXJyb3JGb290ZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgQnl0ZUJ1ZiBlbmNvZGVkTWVzc2FnZSA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBieXRlW10gZm9vdGVyID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKG5ldyBSZXNwb25zZU1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlRm9vdGVyKHJlc3BvbnNlTWVzc2FnZSwgaXNUeXBlZCgpKSk7CisgICAgICAgICAgICAvLyBza2lwIG9wZW5pbmcgeworICAgICAgICAgICAgZW5jb2RlZE1lc3NhZ2UgPSBhbGxvY2F0b3IuYnVmZmVyKGZvb3Rlci5sZW5ndGggLSAyKS4KKyAgICAgICAgICAgICAgICAgICAgd3JpdGVCeXRlcyhmb290ZXIsIDEsIGZvb3Rlci5sZW5ndGggLSAxKTsKKworICAgICAgICAgICAgcmV0dXJuIGVuY29kZWRNZXNzYWdlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkTWVzc2FnZSAhPSBudWxsKSBSZWZlcmVuY2VDb3VudFV0aWwucmVsZWFzZShlbmNvZGVkTWVzc2FnZSk7CisKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlc3BvbnNlIFslc10gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkgJXMuIiwgcmVzcG9uc2VNZXNzYWdlLCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSByZWFkQ2h1bmsoZmluYWwgQnl0ZUJ1ZiBieXRlQnVmLCBmaW5hbCBib29sZWFuIGlzRmlyc3RDaHVuaykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlJlYWRpbmcgZm9yIHN0cmVhbWluZyBHcmFwaFNPTiBpcyBub3Qgc3VwcG9ydGVkIik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBCeXRlQnVmIGVuY29kZWRNZXNzYWdlID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gbWFwcGVyLndyaXRlVmFsdWVBc0J5dGVzKHJlcXVlc3RNZXNzYWdlKTsKKworICAgICAgICAgICAgZW5jb2RlZE1lc3NhZ2UgPSBhbGxvY2F0b3IuYnVmZmVyKHBheWxvYWQubGVuZ3RoKTsKKyAgICAgICAgICAgIGVuY29kZWRNZXNzYWdlLndyaXRlQnl0ZXMocGF5bG9hZCk7CisKKyAgICAgICAgICAgIHJldHVybiBlbmNvZGVkTWVzc2FnZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBpZiAoZW5jb2RlZE1lc3NhZ2UgIT0gbnVsbCkgUmVmZXJlbmNlQ291bnRVdGlsLnJlbGVhc2UoZW5jb2RlZE1lc3NhZ2UpOworCisgICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJSZXF1ZXN0IFslc10gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkgJXMuIiwgcmVxdWVzdE1lc3NhZ2UsIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmNsYXNzLmdldE5hbWUoKSksIGV4KTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZUJpbmFyeVJlcXVlc3QoQnl0ZUJ1ZiBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBwYXlsb2FkID0gbmV3IGJ5dGVbbXNnLnJlYWRhYmxlQnl0ZXMoKV07CisgICAgICAgICAgICBtc2cucmVhZEJ5dGVzKHBheWxvYWQpOworICAgICAgICAgICAgcmV0dXJuIG1hcHBlci5yZWFkVmFsdWUocGF5bG9hZCwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlcXVlc3QgWyVzXSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5ICVzLiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBHcmVtbGluU2VydmVyTW9kdWxlVjQgZXh0ZW5kcyBTaW1wbGVNb2R1bGUgeworICAgICAgICBwdWJsaWMgR3JlbWxpblNlcnZlck1vZHVsZVY0KCkgeworICAgICAgICAgICAgc3VwZXIoImdyYXBoc29uVjQtZ3JlbWxpbi1zZXJ2ZXIiKTsKKworICAgICAgICAgICAgLy8gU0VSSUFMSVpFUlMKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoUmVzcG9uc2VNZXNzYWdlLmNsYXNzLCBuZXcgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoUmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUhlYWRlci5jbGFzcywgbmV3IFJlc3BvbnNlTWVzc2FnZUhlYWRlclNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICBhZGRTZXJpYWxpemVyKFJlc3BvbnNlTWVzc2FnZS5SZXNwb25zZU1lc3NhZ2VGb290ZXIuY2xhc3MsIG5ldyBSZXNwb25zZU1lc3NhZ2VGb290ZXJTZXJpYWxpemVyKCkpOworICAgICAgICAgICAgYWRkU2VyaWFsaXplcihSZXF1ZXN0TWVzc2FnZS5jbGFzcywgbmV3IFJlcXVlc3RNZXNzYWdlU2VyaWFsaXplcigpKTsKKworICAgICAgICAgICAgLy8gREVTRVJJQUxJWkVSUworICAgICAgICAgICAgYWRkRGVzZXJpYWxpemVyKFJlc3BvbnNlTWVzc2FnZS5jbGFzcywgbmV3IFJlc3BvbnNlTWVzc2FnZURlc2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgIGFkZERlc2VyaWFsaXplcihSZXF1ZXN0TWVzc2FnZS5jbGFzcywgbmV3IFJlcXVlc3RNZXNzYWdlRGVzZXJpYWxpemVyKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPFJlcXVlc3RNZXNzYWdlPiB7CisgICAgICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc2VyKHJlcXVlc3RNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZVdpdGhUeXBlKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc2VyKHJlcXVlc3RNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcihmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVxdWVzdE1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKKworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU9iamVjdEZpZWxkKFNlclRva2Vucy5UT0tFTl9HUkVNTElOLCByZXF1ZXN0TWVzc2FnZS5nZXRHcmVtbGluKCkpOworICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBPYmplY3Q+IGt2IDogcmVxdWVzdE1lc3NhZ2UuZ2V0RmllbGRzKCkuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVPYmplY3RGaWVsZChrdi5nZXRLZXkoKSwga3YuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChyZXF1ZXN0TWVzc2FnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZURlc2VyaWFsaXplciBleHRlbmRzIEFic3RyYWN0T2JqZWN0RGVzZXJpYWxpemVyPFJlcXVlc3RNZXNzYWdlPiB7CisgICAgICAgIHByaXZhdGUgUmVxdWVzdE1lc3NhZ2VEZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGNyZWF0ZU9iamVjdChmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGRhdGEpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlLkJ1aWxkZXIgYnVpbGRlciA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKGRhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9HUkVNTElOKS50b1N0cmluZygpKTsKKworICAgICAgICAgICAgaWYgKGRhdGEuY29udGFpbnNLZXkoU2VyVG9rZW5zLlRPS0VOX0xBTkdVQUdFKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkTGFuZ3VhZ2UoZGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX0xBTkdVQUdFKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhLmNvbnRhaW5zS2V5KFNlclRva2Vucy5UT0tFTl9HKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkRyhkYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fRykudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGF0YS5jb250YWluc0tleShTZXJUb2tlbnMuVE9LRU5fQklORElOR1MpKSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRCaW5kaW5ncygoTWFwPFN0cmluZywgT2JqZWN0PikgZGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX0JJTkRJTkdTKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGF0YS5jb250YWluc0tleShUb2tlbnMuVElNRU9VVF9NUykpIHsKKyAgICAgICAgICAgICAgICAvLyBDYW4gYmUgaW50IGZvciB1bnR5cGVkIEpTT04gYW5kIGxvbmcgZm9yIHR5cGVkIEdyYXBoU09OLgorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGltZW91dE1pbGxpcyhMb25nLnBhcnNlTG9uZyhkYXRhLmdldChUb2tlbnMuVElNRU9VVF9NUykudG9TdHJpbmcoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRhdGEuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUykpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZE1hdGVyaWFsaXplUHJvcGVydGllcyhkYXRhLmdldChUb2tlbnMuQVJHU19NQVRFUklBTElaRV9QUk9QRVJUSUVTKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX0JBVENIX1NJWkUpKSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRDaHVua1NpemUoKGludCkgZGF0YS5nZXQoVG9rZW5zLkFSR1NfQkFUQ0hfU0laRSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRhdGEuY29udGFpbnNLZXkoVG9rZW5zLkJVTEtfUkVTVUxUUykpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEJ1bGtSZXN1bHRzKEJvb2xlYW4ucGFyc2VCb29sZWFuKGRhdGEuZ2V0KFRva2Vucy5CVUxLX1JFU1VMVFMpLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkYXRhLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX1RSQU5TQUNUSU9OX0lEKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVHJhbnNhY3Rpb25JZChkYXRhLmdldChUb2tlbnMuQVJHU19UUkFOU0FDVElPTl9JRCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyIGV4dGVuZHMgU3RkU2VyaWFsaXplcjxSZXNwb25zZU1lc3NhZ2U+IHsKKyAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc2VyKHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCBudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemVXaXRoVHlwZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc2VyKHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoU2VyVG9rZW5zLlRPS0VOX1NUQVRVUyk7CisKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZU51bWJlckZpZWxkKFNlclRva2Vucy5UT0tFTl9DT0RFLCByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmNvZGUoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCk7CisgICAgICAgICAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmICFtZXNzYWdlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVTdHJpbmdGaWVsZChTZXJUb2tlbnMuVE9LRU5fTUVTU0FHRSwgcmVzcG9uc2VNZXNzYWdlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZXhjZXB0aW9uID0gcmVzcG9uc2VNZXNzYWdlLmdldFN0YXR1cygpLmdldEV4Y2VwdGlvbigpOworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiAhPSBudWxsICYmICFleGNlcHRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0cmluZ0ZpZWxkKFNlclRva2Vucy5UT0tFTl9FWENFUFRJT04sIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVFbmRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCk7CisKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUZpZWxkTmFtZShTZXJUb2tlbnMuVE9LRU5fREFUQSk7CisKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiByZXN1bHQgPSByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplclByb3ZpZGVyLmZpbmRUeXBlZFZhbHVlU2VyaWFsaXplcihyZXN1bHQuZ2V0Q2xhc3MoKSwgdHJ1ZSwgbnVsbCkuc2VyaWFsaXplKHJlc3VsdCwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplclByb3ZpZGVyLmZpbmRUeXBlZFZhbHVlU2VyaWFsaXplcihMaXN0LmNsYXNzLCB0cnVlLCBudWxsKS5zZXJpYWxpemUoQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCksIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgUmVzcG9uc2VNZXNzYWdlSGVhZGVyU2VyaWFsaXplciBleHRlbmRzIFN0ZFNlcmlhbGl6ZXI8UmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUhlYWRlcj4geworICAgICAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlSGVhZGVyU2VyaWFsaXplcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFJlc3BvbnNlTWVzc2FnZS5SZXNwb25zZU1lc3NhZ2VIZWFkZXIuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlSGVhZGVyIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHNlcihyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHNlcmlhbGl6ZXJQcm92aWRlciwgbnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplV2l0aFR5cGUoZmluYWwgUmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUhlYWRlciByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgVHlwZVNlcmlhbGl6ZXIgdHlwZVNlcmlhbGl6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBzZXIocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcihmaW5hbCBSZXNwb25zZU1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlSGVhZGVyIHJlc3BvbnNlTWVzc2FnZUhlYWRlciwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IHJlc3BvbnNlTWVzc2FnZUhlYWRlci5nZXRSZXNwb25zZU1lc3NhZ2UoKTsKKworICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKFNlclRva2Vucy5UT0tFTl9SRVNVTFQpOworCisgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVTdGFydE9iamVjdChyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOworCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlT2JqZWN0KENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKKworICAgICAgICAgICAgLy8ganNvbkdlbmVyYXRvciB3aWxsIGFkZCAyIGNsb3NpbmcgfQorICAgICAgICAgICAgLy8ganNvbkdlbmVyYXRvci5jb25maWd1cmUoSnNvbkdlbmVyYXRvci5GZWF0dXJlLkFVVE9fQ0xPU0VfSlNPTl9DT05URU5ULCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFJlc3BvbnNlTWVzc2FnZUZvb3RlclNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPFJlc3BvbnNlTWVzc2FnZS5SZXNwb25zZU1lc3NhZ2VGb290ZXI+IHsKKyAgICAgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZUZvb3RlclNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihSZXNwb25zZU1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlRm9vdGVyLmNsYXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgUmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUZvb3RlciByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBzZXIocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCBzZXJpYWxpemVyUHJvdmlkZXIsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZVdpdGhUeXBlKGZpbmFsIFJlc3BvbnNlTWVzc2FnZS5SZXNwb25zZU1lc3NhZ2VGb290ZXIgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyIHR5cGVTZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgc2VyKHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgc2VyaWFsaXplclByb3ZpZGVyLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlLlJlc3BvbnNlTWVzc2FnZUZvb3RlciByZXNwb25zZU1lc3NhZ2VGb290ZXIsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyaWFsaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UgPSByZXNwb25zZU1lc3NhZ2VGb290ZXIuZ2V0UmVzcG9uc2VNZXNzYWdlKCk7CisKKyAgICAgICAgICAgIC8vIHRvZG86IGZpbmQgYSB3YXkgdG8gZ2V0IHJpZCBvZmYKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZVN0YXJ0T2JqZWN0KHJlc3BvbnNlTWVzc2FnZSwganNvbkdlbmVyYXRvciwgdHlwZVNlcmlhbGl6ZXIpOworCisgICAgICAgICAgICAvLyBjbG9zZSByZXN1bHQgZmllbGQuIGFycmF5IGluc2lkZSBvYmplY3QgZm9yIHR5cGVzLCBqdXN0IGFycmF5IGZvciB1bnR5cGVkCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlUmF3KHJlc3BvbnNlTWVzc2FnZUZvb3Rlci5nZXRUeXBlZCgpID8gIl19fSwiIDogIl19LCIpOworCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRmllbGROYW1lKFNlclRva2Vucy5UT0tFTl9TVEFUVVMpOworICAgICAgICAgICAgR3JhcGhTT05VdGlsLndyaXRlU3RhcnRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlTnVtYmVyRmllbGQoU2VyVG9rZW5zLlRPS0VOX0NPREUsIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuY29kZSgpKTsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RyaW5nRmllbGQoU2VyVG9rZW5zLlRPS0VOX01FU1NBR0UsIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0cmluZ0ZpZWxkKFNlclRva2Vucy5UT0tFTl9FWENFUFRJT04sIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHcmFwaFNPTlV0aWwud3JpdGVFbmRPYmplY3QocmVzcG9uc2VNZXNzYWdlLCBqc29uR2VuZXJhdG9yLCB0eXBlU2VyaWFsaXplcik7CisKKyAgICAgICAgICAgIEdyYXBoU09OVXRpbC53cml0ZUVuZE9iamVjdChyZXNwb25zZU1lc3NhZ2UsIGpzb25HZW5lcmF0b3IsIHR5cGVTZXJpYWxpemVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgUmVzcG9uc2VNZXNzYWdlRGVzZXJpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RPYmplY3REZXNlcmlhbGl6ZXI8UmVzcG9uc2VNZXNzYWdlPiB7CisgICAgICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2VEZXNlcmlhbGl6ZXIoKSB7CisgICAgICAgICAgICBzdXBlcihSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgY3JlYXRlT2JqZWN0KGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gZGF0YSkgeworICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBzdGF0dXMgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgZGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX1NUQVRVUyk7CisgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlciByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgICAgIC5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy52YWx1ZU9mKChJbnRlZ2VyKSBzdGF0dXMuZ2V0KFNlclRva2Vucy5UT0tFTl9DT0RFKSkpCisgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQoKExpc3QpICgoTWFwKSBkYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKSkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKSk7CisKKyAgICAgICAgICAgIGlmIChudWxsICE9IHN0YXR1cy5nZXQoU2VyVG9rZW5zLlRPS0VOX0VYQ0VQVElPTikpIHsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5leGNlcHRpb24oU3RyaW5nLnZhbHVlT2Yoc3RhdHVzLmdldChTZXJUb2tlbnMuVE9LRU5fRVhDRVBUSU9OKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG51bGwgIT0gc3RhdHVzLmdldChTZXJUb2tlbnMuVE9LRU5fTUVTU0FHRSkpIHsKKyAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXNNZXNzYWdlKFN0cmluZy52YWx1ZU9mKHN0YXR1cy5nZXQoU2VyVG9rZW5zLlRPS0VOX01FU1NBR0UpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5jcmVhdGUoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyLmphdmEKaW5kZXggMDNmNTcwYS4uOWJhZjVjYyAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyLmphdmEKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyLmphdmEKQEAgLTE4LDkgKzE4LDkgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLklvUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uTWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3OTc3Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeUlvOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeU1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuYmluYXJ5LlJlcXVlc3RNZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLmJpbmFyeS5SZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5UeXBlU2VyaWFsaXplclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS50eXBlcy5DdXN0b21UeXBlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5Jb1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlBhaXI7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkJhc2U2NDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLQotaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7Ci0KLXB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgZXh0ZW5kcyBBYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyPEdyYXBoQmluYXJ5TWFwcGVyPiBpbXBsZW1lbnRzIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjxHcmFwaEJpbmFyeU1hcHBlcj4gewotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fQ1VTVE9NID0gImN1c3RvbSI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fQlVJTERFUiA9ICJidWlsZGVyIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9TRVJJQUxJWkVfUkVTVUxUX1RPX1NUUklORyA9ICJzZXJpYWxpemVSZXN1bHRUb1N0cmluZyI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9UWVBFID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhCSU5BUllfVjE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfVFlQRV9TVFJJTkdEID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhCSU5BUllfVjEgKyAiLXN0cmluZ2QiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmFzZTY0LkVuY29kZXIgYmFzZTY0RW5jb2RlciA9IEJhc2U2NC5nZXRFbmNvZGVyKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmFzZTY0LkRlY29kZXIgYmFzZTY0RGVjb2RlciA9IEJhc2U2NC5nZXREZWNvZGVyKCk7Ci0KLSAgICBwcml2YXRlIGJ5dGVbXSBoZWFkZXIgPSBNSU1FX1RZUEUuZ2V0Qnl0ZXMoVVRGXzgpOwotICAgIHByaXZhdGUgYm9vbGVhbiBzZXJpYWxpemVUb1N0cmluZyA9IGZhbHNlOwotICAgIHByaXZhdGUgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyOwotICAgIHByaXZhdGUgR3JhcGhCaW5hcnlXcml0ZXIgd3JpdGVyOwotICAgIHByaXZhdGUgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyIHJlcXVlc3RTZXJpYWxpemVyOwotICAgIHByaXZhdGUgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplciByZXNwb25zZVNlcmlhbGl6ZXI7Ci0gICAgcHJpdmF0ZSBHcmFwaEJpbmFyeU1hcHBlciBtYXBwZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBtZXNzYWdlIHNlcmlhbGl6ZXIgdXNpbmcgdGhlIGRlZmF1bHQgdHlwZSBzZXJpYWxpemVycy4KLSAgICAgKi8KLSAgICBwdWJsaWMgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCkgewotICAgICAgICB0aGlzKFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuSU5TVEFOQ0UpOwotICAgIH0KLQotICAgIHB1YmxpYyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoZmluYWwgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSByZWdpc3RyeSkgewotICAgICAgICByZWFkZXIgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIocmVnaXN0cnkpOwotICAgICAgICB3cml0ZXIgPSBuZXcgR3JhcGhCaW5hcnlXcml0ZXIocmVnaXN0cnkpOwotICAgICAgICBtYXBwZXIgPSBuZXcgR3JhcGhCaW5hcnlNYXBwZXIod3JpdGVyLCByZWFkZXIpOwotCi0gICAgICAgIHJlcXVlc3RTZXJpYWxpemVyID0gbmV3IFJlcXVlc3RNZXNzYWdlU2VyaWFsaXplcigpOwotICAgICAgICByZXNwb25zZVNlcmlhbGl6ZXIgPSBuZXcgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoZmluYWwgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgdGhpcyhidWlsZGVyLmNyZWF0ZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgR3JhcGhCaW5hcnlNYXBwZXIgZ2V0TWFwcGVyKCkgewotICAgICAgICByZXR1cm4gbWFwcGVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZShmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZywgZmluYWwgTWFwPFN0cmluZywgR3JhcGg+IGdyYXBocykgewotICAgICAgICBmaW5hbCBTdHJpbmcgYnVpbGRlckNsYXNzTmFtZSA9IChTdHJpbmcpIGNvbmZpZy5nZXQoVE9LRU5fQlVJTERFUik7Ci0gICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuQnVpbGRlciBidWlsZGVyOwotCi0gICAgICAgIGlmIChidWlsZGVyQ2xhc3NOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgQ2xhc3M8Pz4gY2xhenogPSBDbGFzcy5mb3JOYW1lKGJ1aWxkZXJDbGFzc05hbWUpOwotICAgICAgICAgICAgICAgIGZpbmFsIENvbnN0cnVjdG9yPD8+IGN0b3IgPSBjbGF6ei5nZXRDb25zdHJ1Y3RvcigpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSAoVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZGVyKSBjdG9yLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1aWxkZXIgPSBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LmJ1aWxkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gY2xhc3NOYW1lTGlzdCA9IGdldExpc3RTdHJpbmdGcm9tQ29uZmlnKFRPS0VOX0lPX1JFR0lTVFJJRVMsIGNvbmZpZyk7Ci0gICAgICAgIGNsYXNzTmFtZUxpc3QuZm9yRWFjaChjbGFzc05hbWUgLT4gewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PiBjbGF6eiA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBNZXRob2QgaW5zdGFuY2VNZXRob2QgPSB0cnlJbnN0YW5jZU1ldGhvZChjbGF6eik7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIElvUmVnaXN0cnkgaW9yZWcgPSAoSW9SZWdpc3RyeSkgaW5zdGFuY2VNZXRob2QuaW52b2tlKG51bGwpOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFBhaXI8Q2xhc3MsIEN1c3RvbVR5cGVTZXJpYWxpemVyPj4gY2xhc3NTZXJpYWxpemVycyA9IGlvcmVnLmZpbmQoR3JhcGhCaW5hcnlJby5jbGFzcywgQ3VzdG9tVHlwZVNlcmlhbGl6ZXIuY2xhc3MpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKFBhaXI8Q2xhc3MsQ3VzdG9tVHlwZVNlcmlhbGl6ZXI+IGNzIDogY2xhc3NTZXJpYWxpemVycykgewotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRDdXN0b21UeXBlKGNzLmdldFZhbHVlMCgpLCBjcy5nZXRWYWx1ZTEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gbWV0aG9kZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJDb3VsZCBub3QgaW5zdGFudGlhdGUgSW9SZWdpc3RyeSBmcm9tIGFuIGluc3RhbmNlKCkgbWV0aG9kIG9uICVzIiwgY2xhc3NOYW1lKSwgbWV0aG9kZXgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLQotICAgICAgICBhZGRDdXN0b21DbGFzc2VzKGNvbmZpZywgYnVpbGRlcik7Ci0KLSAgICAgICAgdGhpcy5zZXJpYWxpemVUb1N0cmluZyA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKGNvbmZpZy5nZXRPckRlZmF1bHQoVE9LRU5fU0VSSUFMSVpFX1JFU1VMVF9UT19TVFJJTkcsICJmYWxzZSIpLnRvU3RyaW5nKCkpOwotICAgICAgICB0aGlzLmhlYWRlciA9IHRoaXMuc2VyaWFsaXplVG9TdHJpbmcgPyBNSU1FX1RZUEVfU1RSSU5HRC5nZXRCeXRlcyhVVEZfOCkgOiBNSU1FX1RZUEUuZ2V0Qnl0ZXMoVVRGXzgpOwotCi0gICAgICAgIGZpbmFsIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgcmVnaXN0cnkgPSBidWlsZGVyLmNyZWF0ZSgpOwotICAgICAgICByZWFkZXIgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIocmVnaXN0cnkpOwotICAgICAgICB3cml0ZXIgPSBuZXcgR3JhcGhCaW5hcnlXcml0ZXIocmVnaXN0cnkpOwotCi0gICAgICAgIHJlcXVlc3RTZXJpYWxpemVyID0gbmV3IFJlcXVlc3RNZXNzYWdlU2VyaWFsaXplcigpOwotICAgICAgICByZXNwb25zZVNlcmlhbGl6ZXIgPSBuZXcgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlQnVmIHNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBhbGxvY2F0b3IuYnVmZmVyKCk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBtc2dUb1dyaXRlID0gIXNlcmlhbGl6ZVRvU3RyaW5nID8gcmVzcG9uc2VNZXNzYWdlIDoKLSAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHJlc3BvbnNlTWVzc2FnZS5nZXRSZXF1ZXN0SWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29kZShyZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3BvbnNlTWV0YURhdGEocmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmdldE1ldGEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVzdWx0KHNlcmlhbGl6ZVJlc3VsdFRvU3RyaW5nKHJlc3BvbnNlTWVzc2FnZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UocmVzcG9uc2VNZXNzYWdlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSkuY3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIHJlc3BvbnNlU2VyaWFsaXplci53cml0ZVZhbHVlKG1zZ1RvV3JpdGUsIGJ1ZmZlciwgd3JpdGVyKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBidWZmZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgdGhyb3cgZXg7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnVmZmVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBCeXRlQnVmIHNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBhbGxvY2F0b3IuYnVmZmVyKCkud3JpdGVCeXRlKGhlYWRlci5sZW5ndGgpLndyaXRlQnl0ZXMoaGVhZGVyKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmVxdWVzdFNlcmlhbGl6ZXIud3JpdGVWYWx1ZShyZXF1ZXN0TWVzc2FnZSwgYnVmZmVyLCB3cml0ZXIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBleDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidWZmZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplUmVxdWVzdChmaW5hbCBCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVxdWVzdFNlcmlhbGl6ZXIucmVhZFZhbHVlKG1zZywgcmVhZGVyKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplUmVzcG9uc2UoZmluYWwgQnl0ZUJ1ZiBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlU2VyaWFsaXplci5yZWFkVmFsdWUobXNnLCByZWFkZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117c2VyaWFsaXplVG9TdHJpbmcgPyBNSU1FX1RZUEVfU1RSSU5HRCA6IE1JTUVfVFlQRX07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBzZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIgPSBzZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHJlc3BvbnNlTWVzc2FnZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgcmV0dXJuIGJhc2U2NEVuY29kZXIuZW5jb2RlVG9TdHJpbmcoY29udmVydFRvQnl0ZXMoYmIpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHNlcmlhbGl6ZVJlcXVlc3RBc1N0cmluZyhmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYiA9IGFsbG9jYXRvci5idWZmZXIoKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmVxdWVzdFNlcmlhbGl6ZXIud3JpdGVWYWx1ZShyZXF1ZXN0TWVzc2FnZSwgYmIsIHdyaXRlcik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgYmIucmVsZWFzZSgpOwotICAgICAgICAgICAgdGhyb3cgZXg7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYmFzZTY0RW5jb2Rlci5lbmNvZGVUb1N0cmluZyhjb252ZXJ0VG9CeXRlcyhiYikpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZVJlcXVlc3QoZmluYWwgU3RyaW5nIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gZGVzZXJpYWxpemVSZXF1ZXN0KGNvbnZlcnRUb0J5dGVCdWYobXNnKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplUmVzcG9uc2UoY29udmVydFRvQnl0ZUJ1Zihtc2cpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJ5dGVbXSBjb252ZXJ0VG9CeXRlcyhmaW5hbCBCeXRlQnVmIGJiKSB7Ci0gICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2JiLnJlYWRhYmxlQnl0ZXMoKV07Ci0gICAgICAgIGJiLmdldEJ5dGVzKGJiLnJlYWRlckluZGV4KCksIGJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIGJ5dGVzOwotICAgIH0KLQotICAgIHByaXZhdGUgQnl0ZUJ1ZiBjb252ZXJ0VG9CeXRlQnVmKGZpbmFsIFN0cmluZyBtc2cpIHsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGIgPSBiYXNlNjREZWNvZGVyLmRlY29kZShtc2cpOwotICAgICAgICBmaW5hbCBCeXRlQnVmIGJiID0gVW5wb29sZWQuYnVmZmVyKGIubGVuZ3RoKTsKLSAgICAgICAgYmIud3JpdGVCeXRlcyhiKTsKLSAgICAgICAgcmV0dXJuIGJiOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGRDdXN0b21DbGFzc2VzKGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnLCBmaW5hbCBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gY2xhc3NOYW1lTGlzdCA9IGdldExpc3RTdHJpbmdGcm9tQ29uZmlnKFRPS0VOX0NVU1RPTSwgY29uZmlnKTsKLQotICAgICAgICBjbGFzc05hbWVMaXN0LmZvckVhY2goc2VyaWFsaXplckRlZmluaXRpb24gLT4gewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZXJpYWxpemVyTmFtZTsKLSAgICAgICAgICAgIGlmIChzZXJpYWxpemVyRGVmaW5pdGlvbi5jb250YWlucygiOyIpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc3BsaXQgPSBzZXJpYWxpemVyRGVmaW5pdGlvbi5zcGxpdCgiOyIpOwotICAgICAgICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggIT0gMikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJJbnZhbGlkIGZvcm1hdCBmb3Igc2VyaWFsaXplciBkZWZpbml0aW9uIFslc10gLSBleHBlY3RlZCA8Y2xhc3M+OzxzZXJpYWxpemVyLWNsYXNzPiIsIHNlcmlhbGl6ZXJEZWZpbml0aW9uKSk7Ci0KLSAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBzcGxpdFswXTsKLSAgICAgICAgICAgICAgICBzZXJpYWxpemVyTmFtZSA9IHNwbGl0WzFdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoIkludmFsaWQgZm9ybWF0IGZvciBzZXJpYWxpemVyIGRlZmluaXRpb24gWyVzXSAtIGV4cGVjdGVkIDxjbGFzcz47PHNlcmlhbGl6ZXItY2xhc3M+Iiwgc2VyaWFsaXplckRlZmluaXRpb24pKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBDbGFzcyBjbGF6eiA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBDbGFzcyBzZXJpYWxpemVyQ2xhenogPSBDbGFzcy5mb3JOYW1lKHNlcmlhbGl6ZXJOYW1lKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBDdXN0b21UeXBlU2VyaWFsaXplciBzZXJpYWxpemVyID0gKEN1c3RvbVR5cGVTZXJpYWxpemVyKSBzZXJpYWxpemVyQ2xhenoubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEN1c3RvbVR5cGUoY2xhenosIHNlcmlhbGl6ZXIpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ3VzdG9tVHlwZVNlcmlhbGl6ZXIgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBPYmplY3Qgc2VyaWFsaXplUmVzdWx0VG9TdHJpbmcoZmluYWwgUmVzcG9uc2VNZXNzYWdlIG1zZykgewotICAgICAgICBpZiAobXNnLmdldFJlc3VsdCgpID09IG51bGwpIHJldHVybiAibnVsbCI7Ci0gICAgICAgIGlmIChtc2cuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpID09IG51bGwpIHJldHVybiAibnVsbCI7Ci0KLSAgICAgICAgLy8gdGhlIEl0ZXJhdG9ySGFuZGxlciBzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiBzbyBrZWVwIGl0IGFzIHN1Y2gKLSAgICAgICAgZmluYWwgT2JqZWN0IG8gPSBtc2cuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICBpZiAobyBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIHJldHVybiAoKENvbGxlY3Rpb24pIG8pLnN0cmVhbSgpLm1hcChkIC0+IG51bGwgPT0gZCA/ICJudWxsIiA6IGQudG9TdHJpbmcoKSkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBvLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWM3YTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQuamF2YQpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLklvUmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5SW87CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5TWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5Lk1hcmtlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkudHlwZXMuQ3VzdG9tVHlwZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuYmluYXJ5LlJlcXVlc3RNZXNzYWdlU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuamF2YXR1cGxlcy5QYWlyOworaW1wb3J0IG9yZy5qYXZhdHVwbGVzLlRyaXBsZXQ7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuRW51bVNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0IGV4dGVuZHMgQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplcjxHcmFwaEJpbmFyeU1hcHBlcj4geworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0NVU1RPTSA9ICJjdXN0b20iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0JVSUxERVIgPSAiYnVpbGRlciI7CisKKyAgICBwcml2YXRlIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlcjsKKyAgICBwcml2YXRlIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlcjsKKyAgICBwcml2YXRlIFJlcXVlc3RNZXNzYWdlU2VyaWFsaXplciByZXF1ZXN0U2VyaWFsaXplcjsKKyAgICBwcml2YXRlIGZpbmFsIEdyYXBoQmluYXJ5TWFwcGVyIG1hcHBlcjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5ldHR5QnVmZmVyRmFjdG9yeSBidWZmZXJGYWN0b3J5ID0gbmV3IE5ldHR5QnVmZmVyRmFjdG9yeSgpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX1RZUEUgPSBTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WNDsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIG1lc3NhZ2Ugc2VyaWFsaXplciB1c2luZyB0aGUgZGVmYXVsdCB0eXBlIHNlcmlhbGl6ZXJzLgorICAgICAqLworICAgIHB1YmxpYyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKSB7CisgICAgICAgIHRoaXMoVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5JTlNUQU5DRSk7CisgICAgfQorCisgICAgcHVibGljIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNChmaW5hbCBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CisgICAgICAgIHJlYWRlciA9IG5ldyBHcmFwaEJpbmFyeVJlYWRlcihyZWdpc3RyeSk7CisgICAgICAgIHdyaXRlciA9IG5ldyBHcmFwaEJpbmFyeVdyaXRlcihyZWdpc3RyeSk7CisgICAgICAgIG1hcHBlciA9IG5ldyBHcmFwaEJpbmFyeU1hcHBlcih3cml0ZXIsIHJlYWRlcik7CisKKyAgICAgICAgcmVxdWVzdFNlcmlhbGl6ZXIgPSBuZXcgUmVxdWVzdE1lc3NhZ2VTZXJpYWxpemVyKCk7CisgICAgfQorCisgICAgcHVibGljIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNChmaW5hbCBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LkJ1aWxkZXIgYnVpbGRlcikgeworICAgICAgICB0aGlzKGJ1aWxkZXIuY3JlYXRlKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBHcmFwaEJpbmFyeU1hcHBlciBnZXRNYXBwZXIoKSB7CisgICAgICAgIHJldHVybiBtYXBwZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY29uZmlndXJlKGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnLCBmaW5hbCBNYXA8U3RyaW5nLCBHcmFwaD4gZ3JhcGhzKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBidWlsZGVyQ2xhc3NOYW1lID0gKFN0cmluZykgY29uZmlnLmdldChUT0tFTl9CVUlMREVSKTsKKyAgICAgICAgZmluYWwgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZGVyIGJ1aWxkZXI7CisKKyAgICAgICAgaWYgKGJ1aWxkZXJDbGFzc05hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmaW5hbCBDbGFzczw/PiBjbGF6eiA9IENsYXNzLmZvck5hbWUoYnVpbGRlckNsYXNzTmFtZSk7CisgICAgICAgICAgICAgICAgZmluYWwgQ29uc3RydWN0b3I8Pz4gY3RvciA9IGNsYXp6LmdldENvbnN0cnVjdG9yKCk7CisgICAgICAgICAgICAgICAgYnVpbGRlciA9IChUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LkJ1aWxkZXIpIGN0b3IubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVpbGRlciA9IFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuYnVpbGQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBjbGFzc05hbWVMaXN0ID0gZ2V0TGlzdFN0cmluZ0Zyb21Db25maWcoVE9LRU5fSU9fUkVHSVNUUklFUywgY29uZmlnKTsKKyAgICAgICAgY2xhc3NOYW1lTGlzdC5mb3JFYWNoKGNsYXNzTmFtZSAtPiB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZpbmFsIENsYXNzPD8+IGNsYXp6ID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIE1ldGhvZCBpbnN0YW5jZU1ldGhvZCA9IHRyeUluc3RhbmNlTWV0aG9kKGNsYXp6KTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgSW9SZWdpc3RyeSBpb3JlZyA9IChJb1JlZ2lzdHJ5KSBpbnN0YW5jZU1ldGhvZC5pbnZva2UobnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8UGFpcjxDbGFzcywgQ3VzdG9tVHlwZVNlcmlhbGl6ZXI+PiBjbGFzc1NlcmlhbGl6ZXJzID0gaW9yZWcuZmluZChHcmFwaEJpbmFyeUlvLmNsYXNzLCBDdXN0b21UeXBlU2VyaWFsaXplci5jbGFzcyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoUGFpcjxDbGFzcyxDdXN0b21UeXBlU2VyaWFsaXplcj4gY3MgOiBjbGFzc1NlcmlhbGl6ZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEN1c3RvbVR5cGUoY3MuZ2V0VmFsdWUwKCksIGNzLmdldFZhbHVlMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBtZXRob2RleCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoIkNvdWxkIG5vdCBpbnN0YW50aWF0ZSBJb1JlZ2lzdHJ5IGZyb20gYW4gaW5zdGFuY2UoKSBtZXRob2Qgb24gJXMiLCBjbGFzc05hbWUpLCBtZXRob2RleCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGFkZEN1c3RvbUNsYXNzZXMoY29uZmlnLCBidWlsZGVyKTsKKworICAgICAgICBmaW5hbCBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gYnVpbGRlci5jcmVhdGUoKTsKKyAgICAgICAgcmVhZGVyID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKHJlZ2lzdHJ5KTsKKyAgICAgICAgd3JpdGVyID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKHJlZ2lzdHJ5KTsKKworICAgICAgICByZXF1ZXN0U2VyaWFsaXplciA9IG5ldyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nW10gbWltZVR5cGVzU3VwcG9ydGVkKCkgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tdIHtNSU1FX1RZUEV9OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRDdXN0b21DbGFzc2VzKGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnLCBmaW5hbCBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LkJ1aWxkZXIgYnVpbGRlcikgeworICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gY2xhc3NOYW1lTGlzdCA9IGdldExpc3RTdHJpbmdGcm9tQ29uZmlnKFRPS0VOX0NVU1RPTSwgY29uZmlnKTsKKworICAgICAgICBjbGFzc05hbWVMaXN0LmZvckVhY2goc2VyaWFsaXplckRlZmluaXRpb24gLT4geworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzZXJpYWxpemVyTmFtZTsKKyAgICAgICAgICAgIGlmIChzZXJpYWxpemVyRGVmaW5pdGlvbi5jb250YWlucygiOyIpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc3BsaXQgPSBzZXJpYWxpemVyRGVmaW5pdGlvbi5zcGxpdCgiOyIpOworICAgICAgICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggIT0gMikKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJJbnZhbGlkIGZvcm1hdCBmb3Igc2VyaWFsaXplciBkZWZpbml0aW9uIFslc10gLSBleHBlY3RlZCA8Y2xhc3M+OzxzZXJpYWxpemVyLWNsYXNzPiIsIHNlcmlhbGl6ZXJEZWZpbml0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBzcGxpdFswXTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVyTmFtZSA9IHNwbGl0WzFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKFN0cmluZy5mb3JtYXQoIkludmFsaWQgZm9ybWF0IGZvciBzZXJpYWxpemVyIGRlZmluaXRpb24gWyVzXSAtIGV4cGVjdGVkIDxjbGFzcz47PHNlcmlhbGl6ZXItY2xhc3M+Iiwgc2VyaWFsaXplckRlZmluaXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmaW5hbCBDbGFzcyBjbGF6eiA9IENsYXNzLmZvck5hbWUoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBDbGFzcyBzZXJpYWxpemVyQ2xhenogPSBDbGFzcy5mb3JOYW1lKHNlcmlhbGl6ZXJOYW1lKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBDdXN0b21UeXBlU2VyaWFsaXplciBzZXJpYWxpemVyID0gKEN1c3RvbVR5cGVTZXJpYWxpemVyKSBzZXJpYWxpemVyQ2xhenoubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEN1c3RvbVR5cGUoY2xhenosIHNlcmlhbGl6ZXIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ3VzdG9tVHlwZVNlcmlhbGl6ZXIgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IGFsbG9jYXRvci5idWZmZXIoKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVxdWVzdFNlcmlhbGl6ZXIud3JpdGVWYWx1ZShyZXF1ZXN0TWVzc2FnZSwgYnVmZmVyLCB3cml0ZXIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5yZWxlYXNlKCk7CisgICAgICAgICAgICB0aHJvdyBleDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplQmluYXJ5UmVxdWVzdChCeXRlQnVmIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVxdWVzdFNlcmlhbGl6ZXIucmVhZFZhbHVlKG1zZywgcmVhZGVyKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQnl0ZUJ1ZiBzZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChudWxsID09IHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oIlJlc3BvbnNlU3RhdHVzIGNhbid0IGJlIG51bGwgd2hlbiBzZXJpYWxpemluZyBhIGZ1bGwgUmVzcG9uc2VNZXNzYWdlLiIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHdyaXRlSGVhZGVyKHJlc3BvbnNlTWVzc2FnZSwgYWxsb2NhdG9yKTsKKyAgICB9CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vIGNodW5rZWQgd3JpdGUKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQnl0ZUJ1ZiB3cml0ZUhlYWRlcihmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBFbnVtU2V0PE1lc3NhZ2VQYXJ0cz4gcGFydHMgPSByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkgIT0gbnVsbCA/IE1lc3NhZ2VQYXJ0cy5BTEwgOiBNZXNzYWdlUGFydHMuU1RBUlQ7CisKKyAgICAgICAgcmV0dXJuIHdyaXRlKHJlc3BvbnNlTWVzc2FnZSwgbnVsbCwgYWxsb2NhdG9yLCBwYXJ0cyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVDaHVuayhmaW5hbCBPYmplY3QgYWdncmVnYXRlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICByZXR1cm4gd3JpdGUobnVsbCwgYWdncmVnYXRlLCBhbGxvY2F0b3IsIE1lc3NhZ2VQYXJ0cy5DSFVOSyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEJ5dGVCdWYgd3JpdGVGb290ZXIoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHdyaXRlKHJlc3BvbnNlTWVzc2FnZSwgbnVsbCwgYWxsb2NhdG9yLCBNZXNzYWdlUGFydHMuRU5EKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQnl0ZUJ1ZiB3cml0ZUVycm9yRm9vdGVyKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiB3cml0ZShyZXNwb25zZU1lc3NhZ2UsIG51bGwsIGFsbG9jYXRvciwgTWVzc2FnZVBhcnRzLkVSUk9SKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEJ5dGVCdWYgd3JpdGUoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgT2JqZWN0IGFnZ3JlZ2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IsIGZpbmFsIEVudW1TZXQ8TWVzc2FnZVBhcnRzPiBwYXJ0cykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ5dGVCdWYgPSBhbGxvY2F0b3IuYnVmZmVyKCk7CisgICAgICAgIGZpbmFsIEJ1ZmZlciBidWZmZXIgPSBidWZmZXJGYWN0b3J5LmNyZWF0ZShieXRlQnVmKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHBhcnRzLmNvbnRhaW5zKE1lc3NhZ2VQYXJ0cy5IRUFERVIpKSB7CisgICAgICAgICAgICAgICAgLy8gVmVyc2lvbgorICAgICAgICAgICAgICAgIGJ1ZmZlci53cml0ZUJ5dGUoR3JhcGhCaW5hcnlXcml0ZXIuVkVSU0lPTl9CWVRFKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmlzQnVsa2VkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLndyaXRlQnl0ZShHcmFwaEJpbmFyeVdyaXRlci5CVUxLRURfQllURSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLndyaXRlQnl0ZSgoYnl0ZSkgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFydHMuY29udGFpbnMoTWVzc2FnZVBhcnRzLkRBVEEpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IGRhdGEgPSBhZ2dyZWdhdGUgPT0gbnVsbCAmJiByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpCisgICAgICAgICAgICAgICAgICAgICAgICA6IGFnZ3JlZ2F0ZTsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGl0ZW0gOiAoTGlzdCkgZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlKGl0ZW0sIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXJ0cy5jb250YWlucyhNZXNzYWdlUGFydHMuRk9PVEVSKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIFJlc3BvbnNlU3RhdHVzIHN0YXR1cyA9IHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKTsKKworICAgICAgICAgICAgICAgIC8vIHdlIGRvbid0IGtub3cgaG93IG11Y2ggZGF0YSB3ZSBoYXZlLCBzbyBuZWVkIGEgc3BlY2lhbCBvYmplY3QKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoTWFya2VyLkVORF9PRl9TVFJFQU0sIGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgLy8gU3RhdHVzIGNvZGUKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShzdGF0dXMuZ2V0Q29kZSgpLmNvZGUoKSwgYnVmZmVyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgLy8gTnVsbGFibGUgc3RhdHVzIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShzdGF0dXMuZ2V0TWVzc2FnZSgpLCBidWZmZXIsIHRydWUpOworICAgICAgICAgICAgICAgIC8vIE51bGxhYmxlIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZVZhbHVlKHN0YXR1cy5nZXRFeGNlcHRpb24oKSwgYnVmZmVyLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJ5dGVCdWY7CisgICAgfQorCisgICAgLy8vLy8vLy8vLy8vLy8vLyByZWFkIG1lc3NhZ2UgbWV0aG9kcworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGZpbmFsIEJ5dGVCdWYgbXNnKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkQ2h1bmsobXNnLCB0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIExpc3Q8T2JqZWN0PiByZWFkUGF5bG9hZChmaW5hbCBCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIHdoaWxlIChidWZmZXIucmVhZGFibGVCeXRlcygpICE9IDApIHsKKyAgICAgICAgICAgIGZpbmFsIE9iamVjdCBvYmogPSByZWFkZXIucmVhZChidWZmZXIpOworICAgICAgICAgICAgaWYgKE1hcmtlci5FTkRfT0ZfU1RSRUFNLmVxdWFscyhvYmopKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQuYWRkKG9iaik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBwcml2YXRlIFRyaXBsZXQ8SHR0cFJlc3BvbnNlU3RhdHVzLCBTdHJpbmcsIFN0cmluZz4gcmVhZEZvb3RlcihmaW5hbCBCdWZmZXIgYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmaW5hbCBIdHRwUmVzcG9uc2VTdGF0dXMgc3RhdHVzQ29kZSA9IEh0dHBSZXNwb25zZVN0YXR1cy52YWx1ZU9mKHJlYWRlci5yZWFkVmFsdWUoYnVmZmVyLCBJbnRlZ2VyLmNsYXNzLCBmYWxzZSkpOworICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IHJlYWRlci5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIHRydWUpOworICAgICAgICBmaW5hbCBTdHJpbmcgZXhjZXB0aW9uID0gcmVhZGVyLnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgdHJ1ZSk7CisKKyAgICAgICAgcmV0dXJuIFRyaXBsZXQud2l0aChzdGF0dXNDb2RlLCBtZXNzYWdlLCBleGNlcHRpb24pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXNwb25zZU1lc3NhZ2UgcmVhZENodW5rKGZpbmFsIEJ5dGVCdWYgYnl0ZUJ1ZiwgZmluYWwgYm9vbGVhbiBpc0ZpcnN0Q2h1bmspIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQnVmZmVyIGJ1ZmZlciA9IGJ1ZmZlckZhY3RvcnkuY3JlYXRlKGJ5dGVCdWYpOworICAgICAgICBib29sZWFuIGJ1bGtpbmcgPSBmYWxzZTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gZW1wdHkgaW5wdXQgYnVmZmVyCisgICAgICAgICAgICBpZiAoYnVmZmVyLnJlYWRhYmxlQnl0ZXMoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpLnJlc3VsdChDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSkuY3JlYXRlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0ZpcnN0Q2h1bmspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdmVyc2lvbiA9IGJ1ZmZlci5yZWFkQnl0ZSgpICYgMHhmZjsKKworICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uID4+PiA3ICE9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHJlc3BvbnNlIGJ1ZmZlciB3YXMgaW5jb3JyZWN0bHkgYnVpbHQKKyAgICAgICAgICAgICAgICAgICAgLy8gT3IgdGhlIGJ1ZmZlciBvZmZzZXRzIGFyZSB3cm9uZworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbigiVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVsa2luZyA9IChidWZmZXIucmVhZEJ5dGUoKSAmIDEpID09IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiByZXN1bHQgPSByZWFkUGF5bG9hZChidWZmZXIpOworCisgICAgICAgICAgICAvLyBubyBmb290ZXIKKyAgICAgICAgICAgIGlmIChidWZmZXIucmVhZGFibGVCeXRlcygpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5yZXN1bHQocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgLmJ1bGtlZChidWxraW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBUcmlwbGV0PEh0dHBSZXNwb25zZVN0YXR1cywgU3RyaW5nLCBTdHJpbmc+IGZvb3RlciA9IHJlYWRGb290ZXIoYnVmZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKQorICAgICAgICAgICAgICAgICAgICAucmVzdWx0KHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgLmJ1bGtlZChidWxraW5nKQorICAgICAgICAgICAgICAgICAgICAuY29kZShmb290ZXIuZ2V0VmFsdWUwKCkpCisgICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKGZvb3Rlci5nZXRWYWx1ZTEoKSkKKyAgICAgICAgICAgICAgICAgICAgLmV4Y2VwdGlvbihmb290ZXIuZ2V0VmFsdWUyKCkpCisgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiB8IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTMxZjVmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uVHlwZUluZm87Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLS8qKgotICogU2VyaWFsaXplIHJlc3VsdHMgdG8gSlNPTiB3aXRoIHZlcnNpb24gMS4wLnggc2NoZW1hLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMSBleHRlbmRzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxIGltcGxlbWVudHMgTWVzc2FnZVRleHRTZXJpYWxpemVyPE9iamVjdE1hcHBlcj4gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX1RZUEUgPSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMTsKLQotICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBoZWFkZXI7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoTUlNRV9UWVBFLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIGJ1ZmZlci5wdXQoKGJ5dGUpIE1JTUVfVFlQRS5sZW5ndGgoKSk7Ci0gICAgICAgIGJ1ZmZlci5wdXQoTUlNRV9UWVBFLmdldEJ5dGVzKCkpOwotICAgICAgICBoZWFkZXIgPSBidWZmZXIuYXJyYXkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxKCkgewotICAgICAgICBzdXBlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEoZmluYWwgR3JhcGhTT05NYXBwZXIgbWFwcGVyKSB7Ci0gICAgICAgIHN1cGVyKG1hcHBlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIG1pbWVUeXBlc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXXtNSU1FX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT059OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgY29uZmlndXJlQnVpbGRlcihmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIuYWRkQ3VzdG9tTW9kdWxlKG5ldyBHcmVtbGluU2VydmVyTW9kdWxlKCkpCi0gICAgICAgICAgICAgICAgLnR5cGVJbmZvKFR5cGVJbmZvLlBBUlRJQUxfVFlQRVMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGJ5dGVbXSBvYnRhaW5IZWFkZXIoKSB7Ci0gICAgICAgIHJldHVybiBoZWFkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcG9uc2VEYXRhID0gbWFwcGVyLnJlYWRWYWx1ZShtc2csIG1hcFR5cGVSZWZlcmVuY2UpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBzdGF0dXMgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgcmVzcG9uc2VEYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fU1RBVFVTKTsKLSAgICAgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzdWx0ID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3BvbnNlRGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCk7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQuZnJvbVN0cmluZyhyZXNwb25zZURhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS50b1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLmdldEZyb21WYWx1ZSgoSW50ZWdlcikgc3RhdHVzLmdldChTZXJUb2tlbnMuVE9LRU5fQ09ERSkpKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShTdHJpbmcudmFsdWVPZihzdGF0dXMuZ2V0KFNlclRva2Vucy5UT0tFTl9NRVNTQUdFKSkpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKChNYXA8U3RyaW5nLCBPYmplY3Q+KSBzdGF0dXMuZ2V0KFNlclRva2Vucy5UT0tFTl9BVFRSSUJVVEVTKSkKLSAgICAgICAgICAgICAgICAgICAgLnJlc3VsdChyZXN1bHQuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKSkKLSAgICAgICAgICAgICAgICAgICAgLnJlc3BvbnNlTWV0YURhdGEoKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3VsdC5nZXQoU2VyVG9rZW5zLlRPS0VOX01FVEEpKQotICAgICAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlc3BvbnNlIFt7fV0gY291bGQgbm90IGJlIGRlc2VyaWFsaXplZCBieSB7fS4iLCBtc2csIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHJlc3BvbnNlTWVzc2FnZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlc3BvbnNlIFt7fV0gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkge30uIiwgcmVzcG9uc2VNZXNzYWdlLnRvU3RyaW5nKCksIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVSZXF1ZXN0KGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIucmVhZFZhbHVlKG1zZywgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXF1ZXN0IFt7fV0gY291bGQgbm90IGJlIGRlc2VyaWFsaXplZCBieSB7fS4iLCBtc2csIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHNlcmlhbGl6ZVJlcXVlc3RBc1N0cmluZyhmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSwgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHJlcXVlc3RNZXNzYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVxdWVzdCBbe31dIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkIGJ5IHt9LiIsIHJlcXVlc3RNZXNzYWdlLnRvU3RyaW5nKCksIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE5YWUwNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uVHlwZUluZm87Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0vKioKLSAqIFNlcmlhbGl6ZSByZXN1bHRzIHRvIEpTT04gd2l0aCB2ZXJzaW9uIDIuMC54IHNjaGVtYSBhbmQgdGhlIGV4dGVuZGVkIG1vZHVsZS4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiBpbXBsZW1lbnRzIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjxPYmplY3RNYXBwZXI+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9UWVBFID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gaGVhZGVyOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKE1JTUVfVFlQRS5sZW5ndGgoKSArIDEpOwotICAgICAgICBidWZmZXIucHV0KChieXRlKSBNSU1FX1RZUEUubGVuZ3RoKCkpOwotICAgICAgICBidWZmZXIucHV0KE1JTUVfVFlQRS5nZXRCeXRlcygpKTsKLSAgICAgICAgaGVhZGVyID0gYnVmZmVyLmFycmF5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIGRlZmF1bHQgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplci4gQnkgZGVmYXVsdCB0aGlzIHdpbGwgaW50ZXJuYWxseSBpbnN0YW50aWF0ZSBhIHtAbGluayBHcmFwaFNPTk1hcHBlcn0KLSAgICAgKiBhbmQgcmVnaXN0ZXIgYSB7QGxpbmsgR3JlbWxpblNlcnZlck1vZHVsZX0gYW5kIHtAbGluayBHcmFwaFNPTlhNb2R1bGVWMn0gdG8gdGhlIG1hcHBlci4KLSAgICAgKgotICAgICAqIEBzZWUgI0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMihHcmFwaFNPTk1hcHBlci5CdWlsZGVyKQotICAgICAqLwotICAgIHB1YmxpYyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIoKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplciBmcm9tIGEge0BsaW5rIEdyYXBoU09OTWFwcGVyfS4gRGVwcmVjYXRlZCwgdXNlCi0gICAgICoge0BsaW5rICNHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIoR3JhcGhTT05NYXBwZXIuQnVpbGRlcil9IGluc3RlYWQuCi0gICAgICovCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKGZpbmFsIEdyYXBoU09OTWFwcGVyIG1hcHBlcikgewotICAgICAgICBzdXBlcihtYXBwZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXIgd2l0aCBhIHByb3ZpZGVkIHtAbGluayBHcmFwaFNPTk1hcHBlci5CdWlsZGVyfS4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCB0byBtYWtlIHRoaXMgbWFwcGVyIHVzYWJsZSBpbiB0aGUgY29udGV4dCBvZiByZXF1ZXN0IG1lc3NhZ2VzIGFuZCByZXNwb25zZXMsCi0gICAgICogdGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIGEge0BsaW5rIEdyZW1saW5TZXJ2ZXJNb2R1bGV9IHRvIHRoZSBwcm92aWRlZAotICAgICAqIG1hcHBlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgbWFwcGVyQnVpbGRlcikgewotICAgICAgICBzdXBlcihtYXBwZXJCdWlsZGVyKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nW10gbWltZVR5cGVzU3VwcG9ydGVkKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1tde01JTUVfVFlQRSwgU2VyVG9rZW5zLk1JTUVfSlNPTn07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBjb25maWd1cmVCdWlsZGVyKGZpbmFsIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlcikgewotICAgICAgICAvLyBhbHJlYWR5IHNldCB0byAyLjAgaW4gQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudHlwZUluZm8oVHlwZUluZm8uUEFSVElBTF9UWVBFUykuYWRkQ3VzdG9tTW9kdWxlKG5ldyBHcmVtbGluU2VydmVyTW9kdWxlKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGJ5dGVbXSBvYnRhaW5IZWFkZXIoKSB7Ci0gICAgICAgIHJldHVybiBoZWFkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIucmVhZFZhbHVlKG1zZywgUmVzcG9uc2VNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVzcG9uc2VNZXNzYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBieSB7fS4iLCByZXNwb25zZU1lc3NhZ2UudG9TdHJpbmcoKSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZVJlcXVlc3QoZmluYWwgU3RyaW5nIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci5yZWFkVmFsdWUobXNnLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXF1ZXN0IFt7fV0gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkge30uIiwgcmVxdWVzdE1lc3NhZ2UudG9TdHJpbmcoKSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWRhOTJhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlZlcnNpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0vKioKLSAqIFNlcmlhbGl6ZSByZXN1bHRzIHRvIEpTT04gd2l0aCB2ZXJzaW9uIDMuMC54IHNjaGVtYSBhbmQgdGhlIGV4dGVuZGVkIG1vZHVsZS4KLSAqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiBpbXBsZW1lbnRzIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjxPYmplY3RNYXBwZXI+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9UWVBFID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjM7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gaGVhZGVyOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKE1JTUVfVFlQRS5sZW5ndGgoKSArIDEpOwotICAgICAgICBidWZmZXIucHV0KChieXRlKSBNSU1FX1RZUEUubGVuZ3RoKCkpOwotICAgICAgICBidWZmZXIucHV0KE1JTUVfVFlQRS5nZXRCeXRlcygpKTsKLSAgICAgICAgaGVhZGVyID0gYnVmZmVyLmFycmF5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIGRlZmF1bHQgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplci4KLSAgICAgKiA8cD4KLSAgICAgKiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBpbnRlcm5hbGx5IGluc3RhbnRpYXRlIGEge0BsaW5rIEdyYXBoU09OTWFwcGVyfSBhbmQgcmVnaXN0ZXIKLSAgICAgKiBhIHtAbGluayBHcmVtbGluU2VydmVyTW9kdWxlfSBhbmQge0BsaW5rIEdyYXBoU09OWE1vZHVsZVYzfSB0byB0aGUgbWFwcGVyLgotICAgICAqCi0gICAgICogQHNlZSAjR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzKEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIpCi0gICAgICovCi0gICAgcHVibGljIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMygpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyIGZyb20gYSB7QGxpbmsgR3JhcGhTT05NYXBwZXJ9LiBEZXByZWNhdGVkLCB1c2UKLSAgICAgKiB7QGxpbmsgI0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMyhHcmFwaFNPTk1hcHBlci5CdWlsZGVyKX0gaW5zdGVhZC4KLSAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoZmluYWwgR3JhcGhTT05NYXBwZXIgbWFwcGVyKSB7Ci0gICAgICAgIHN1cGVyKG1hcHBlcik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplciB3aXRoIGEgcHJvdmlkZWQge0BsaW5rIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXJ9LgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHRvIG1ha2UgdGhpcyBtYXBwZXIgdXNhYmxlIGluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWVzc2FnZXMgYW5kIHJlc3BvbnNlcywKLSAgICAgKiB0aGlzIG1ldGhvZCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgYSB7QGxpbmsgR3JlbWxpblNlcnZlck1vZHVsZX0gdG8gdGhlIHByb3ZpZGVkCi0gICAgICogbWFwcGVyLgotICAgICAqLwotICAgIHB1YmxpYyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBtYXBwZXJCdWlsZGVyKSB7Ci0gICAgICAgIHN1cGVyKG1hcHBlckJ1aWxkZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117TUlNRV9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OfTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIC8vIG92ZXJyaWRlIHRoZSAyLjAgaW4gQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudmVyc2lvbihHcmFwaFNPTlZlcnNpb24uVjNfMCkuYWRkQ3VzdG9tTW9kdWxlKG5ldyBHcmVtbGluU2VydmVyTW9kdWxlKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGJ5dGVbXSBvYnRhaW5IZWFkZXIoKSB7Ci0gICAgICAgIHJldHVybiBoZWFkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIucmVhZFZhbHVlKG1zZywgUmVzcG9uc2VNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybihTdHJpbmcuZm9ybWF0KCJSZXNwb25zZSBbJXNdIGNvdWxkIG5vdCBiZSBkZXNlcmlhbGl6ZWQgYnkgJXMuIiwgbXNnLCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBzZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhyZXNwb25zZU1lc3NhZ2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlc3BvbnNlIFslc10gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkgJXMuIiwgcmVzcG9uc2VNZXNzYWdlLnRvU3RyaW5nKCksIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMy5jbGFzcy5nZXROYW1lKCkpLCBleCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVSZXF1ZXN0KGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIucmVhZFZhbHVlKG1zZywgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlcXVlc3QgWyVzXSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5ICVzLiIsIG1zZywgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLmNsYXNzLmdldE5hbWUoKSksIGV4KTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKFN0cmluZy5mb3JtYXQoIlJlcXVlc3QgWyVzXSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBieSAlcy4iLCByZXF1ZXN0TWVzc2FnZS50b1N0cmluZygpLCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMuY2xhc3MuZ2V0TmFtZSgpKSwgZXgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhMDAwMgotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVmVyc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlhNb2R1bGVWNDsKKworLyoqCisgKiBTZXJpYWxpemUgcmVzdWx0cyB0byBKU09OIHdpdGggdmVyc2lvbiA0LjAueCBzY2hlbWEgYW5kIHRoZSBleHRlbmRlZCBtb2R1bGUuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfVFlQRSA9IFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1Y0OworCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIGRlZmF1bHQgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplci4KKyAgICAgKiA8cD4KKyAgICAgKiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBpbnRlcm5hbGx5IGluc3RhbnRpYXRlIGEge0BsaW5rIEdyYXBoU09OTWFwcGVyfSBhbmQgcmVnaXN0ZXIKKyAgICAgKiBhIHtAbGluayBHcmVtbGluU2VydmVyTW9kdWxlVjR9IGFuZCB7QGxpbmsgR3JhcGhTT05YTW9kdWxlVjR9IHRvIHRoZSBtYXBwZXIuCisgICAgICoKKyAgICAgKiBAc2VlICNHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQoR3JhcGhTT05NYXBwZXIuQnVpbGRlcikKKyAgICAgKi8KKyAgICBwdWJsaWMgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KCkgeworICAgICAgICBzdXBlcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXIgd2l0aCBhIHByb3ZpZGVkIHtAbGluayBHcmFwaFNPTk1hcHBlci5CdWlsZGVyfS4KKyAgICAgKgorICAgICAqIE5vdGUgdGhhdCB0byBtYWtlIHRoaXMgbWFwcGVyIHVzYWJsZSBpbiB0aGUgY29udGV4dCBvZiByZXF1ZXN0IG1lc3NhZ2VzIGFuZCByZXNwb25zZXMsCisgICAgICogdGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIGEge0BsaW5rIEdyZW1saW5TZXJ2ZXJNb2R1bGVWNH0gdG8gdGhlIHByb3ZpZGVkCisgICAgICogbWFwcGVyLgorICAgICAqLworICAgIHB1YmxpYyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBtYXBwZXJCdWlsZGVyKSB7CisgICAgICAgIHN1cGVyKG1hcHBlckJ1aWxkZXIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117TUlNRV9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OfTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKSB7CisgICAgICAgIHJldHVybiBidWlsZGVyLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlY0XzApLmFkZEN1c3RvbU1vZHVsZShuZXcgR3JlbWxpblNlcnZlck1vZHVsZVY0KCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMS5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYxLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NWVhNTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYxLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uVHlwZUluZm87Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwotaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLS8qKgotICogU2VyaWFsaXplIHJlc3VsdHMgdG8gSlNPTiB3aXRoIHZlcnNpb24gMS4wLnggc2NoZW1hIGFuZCBzZXJpYWxpemF0aW9uIHdoaWNoIGRvZXMgbm90IGVtYmVkIHR5cGVzLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMSBpbXBsZW1lbnRzIE1lc3NhZ2VUZXh0U2VyaWFsaXplcjxPYmplY3RNYXBwZXI+IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMS5jbGFzcyk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfVFlQRSA9IFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1YxX1VOVFlQRUQ7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gaGVhZGVyOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKE1JTUVfVFlQRS5sZW5ndGgoKSArIDEpOwotICAgICAgICBidWZmZXIucHV0KChieXRlKSBNSU1FX1RZUEUubGVuZ3RoKCkpOwotICAgICAgICBidWZmZXIucHV0KE1JTUVfVFlQRS5nZXRCeXRlcygpKTsKLSAgICAgICAgaGVhZGVyID0gYnVmZmVyLmFycmF5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEoKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEoZmluYWwgR3JhcGhTT05NYXBwZXIgbWFwcGVyKSB7Ci0gICAgICAgIHN1cGVyKG1hcHBlcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIG1pbWVUeXBlc1N1cHBvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXXtNSU1FX1RZUEUsIFNlclRva2Vucy5NSU1FX0pTT059OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgY29uZmlndXJlQnVpbGRlcihmaW5hbCBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIpIHsKLSAgICAgICAgLy8gYWxyZWFkeSBzZXQgdG8gMS4wIGluIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxCi0gICAgICAgIHJldHVybiBidWlsZGVyLmFkZEN1c3RvbU1vZHVsZShuZXcgR3JlbWxpblNlcnZlck1vZHVsZSgpKQotICAgICAgICAgICAgICAgIC50eXBlSW5mbyhUeXBlSW5mby5OT19UWVBFUyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgYnl0ZVtdIG9idGFpbkhlYWRlcigpIHsKLSAgICAgICAgcmV0dXJuIGhlYWRlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplUmVzcG9uc2UoZmluYWwgU3RyaW5nIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXNwb25zZURhdGEgPSBtYXBwZXIucmVhZFZhbHVlKG1zZywgbWFwVHlwZVJlZmVyZW5jZSk7Ci0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHN0YXR1cyA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSByZXNwb25zZURhdGEuZ2V0KFNlclRva2Vucy5UT0tFTl9TVEFUVVMpOwotICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXN1bHQgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgcmVzcG9uc2VEYXRhLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKTsKLSAgICAgICAgICAgIHJldHVybiBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoVVVJRC5mcm9tU3RyaW5nKHJlc3BvbnNlRGF0YS5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLnRvU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuZ2V0RnJvbVZhbHVlKChJbnRlZ2VyKSBzdGF0dXMuZ2V0KFNlclRva2Vucy5UT0tFTl9DT0RFKSkpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKFN0cmluZy52YWx1ZU9mKHN0YXR1cy5nZXQoU2VyVG9rZW5zLlRPS0VOX01FU1NBR0UpKSkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoKE1hcDxTdHJpbmcsIE9iamVjdD4pIHN0YXR1cy5nZXQoU2VyVG9rZW5zLlRPS0VOX0FUVFJJQlVURVMpKQotICAgICAgICAgICAgICAgICAgICAucmVzdWx0KHJlc3VsdC5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpKQotICAgICAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YSgoTWFwPFN0cmluZywgT2JqZWN0PikgcmVzdWx0LmdldChTZXJUb2tlbnMuVE9LRU5fTUVUQSkpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVzcG9uc2VNZXNzYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBieSB7fS4iLCByZXNwb25zZU1lc3NhZ2UudG9TdHJpbmcoKSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZVJlcXVlc3QoZmluYWwgU3RyaW5nIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci5yZWFkVmFsdWUobXNnLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXF1ZXN0IFt7fV0gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkge30uIiwgcmVxdWVzdE1lc3NhZ2UudG9TdHJpbmcoKSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMi5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNTNhYTYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlhNb2R1bGVWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5UeXBlSW5mbzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogU2VyaWFsaXplIHJlc3VsdHMgdG8gSlNPTiB3aXRoIHZlcnNpb24gMi4wLnggc2NoZW1hIGFuZCB0aGUgZXh0ZW5kZWQgbW9kdWxlIHdpdGhvdXQgZW1iZWRkZWQgdHlwZXMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMiBleHRlbmRzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyIGltcGxlbWVudHMgTWVzc2FnZVRleHRTZXJpYWxpemVyPE9iamVjdE1hcHBlcj4gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9UWVBFID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjJfVU5UWVBFRDsKLQotICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBoZWFkZXI7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoTUlNRV9UWVBFLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIGJ1ZmZlci5wdXQoKGJ5dGUpIE1JTUVfVFlQRS5sZW5ndGgoKSk7Ci0gICAgICAgIGJ1ZmZlci5wdXQoTUlNRV9UWVBFLmdldEJ5dGVzKCkpOwotICAgICAgICBoZWFkZXIgPSBidWZmZXIuYXJyYXkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyLgotICAgICAqCi0gICAgICogQnkgZGVmYXVsdCB0aGlzIHdpbGwgaW50ZXJuYWxseSBpbnN0YW50aWF0ZSBhIHtAbGluayBHcmFwaFNPTk1hcHBlcn0gYW5kIHJlZ2lzdGVyCi0gICAgICogYSB7QGxpbmsgR3JlbWxpblNlcnZlck1vZHVsZX0gYW5kIHtAbGluayBHcmFwaFNPTlhNb2R1bGVWMn0gdG8gdGhlIG1hcHBlci4KLSAgICAgKgotICAgICAqIEBzZWUgI0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjIoR3JhcGhTT05NYXBwZXIuQnVpbGRlcikKLSAgICAgKi8KLSAgICBwdWJsaWMgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMigpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyIHdpdGggYSBwcm92aWRlZCB7QGxpbmsgR3JhcGhTT05NYXBwZXIuQnVpbGRlcn0uCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgdG8gbWFrZSB0aGlzIG1hcHBlciB1c2FibGUgaW4gdGhlIGNvbnRleHQgb2YgcmVxdWVzdCBtZXNzYWdlcyBhbmQgcmVzcG9uc2VzLAotICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSByZWdpc3RlciBhIHtAbGluayBHcmVtbGluU2VydmVyTW9kdWxlfSB0byB0aGUgcHJvdmlkZWQKLSAgICAgKiBtYXBwZXIuCi0gICAgICovCi0gICAgcHVibGljIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBtYXBwZXJCdWlsZGVyKSB7Ci0gICAgICAgIHN1cGVyKG1hcHBlckJ1aWxkZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117TUlNRV9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OfTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIC8vIGFscmVhZHkgc2V0IHRvIDIuMCBpbiBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMgotICAgICAgICByZXR1cm4gYnVpbGRlci50eXBlSW5mbyhUeXBlSW5mby5OT19UWVBFUykuYWRkQ3VzdG9tTW9kdWxlKG5ldyBHcmVtbGluU2VydmVyTW9kdWxlKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIGJ5dGVbXSBvYnRhaW5IZWFkZXIoKSB7Ci0gICAgICAgIHJldHVybiBoZWFkZXI7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtYXBwZXIucmVhZFZhbHVlKG1zZywgUmVzcG9uc2VNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVzcG9uc2VNZXNzYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVzcG9uc2UgW3t9XSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBieSB7fS4iLCByZXNwb25zZU1lc3NhZ2UudG9TdHJpbmcoKSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZVJlcXVlc3QoZmluYWwgU3RyaW5nIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci5yZWFkVmFsdWUobXNnLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgW3t9XSBjb3VsZCBub3QgYmUgZGVzZXJpYWxpemVkIGJ5IHt9LiIsIG1zZywgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXF1ZXN0IFt7fV0gY291bGQgbm90IGJlIHNlcmlhbGl6ZWQgYnkge30uIiwgcmVxdWVzdE1lc3NhZ2UudG9TdHJpbmcoKSwgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMy5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NDNlMDMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OWE1vZHVsZVYyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLlR5cGVJbmZvOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogU2VyaWFsaXplIHJlc3VsdHMgdG8gSlNPTiB3aXRoIHZlcnNpb24gMy4wLnggc2NoZW1hIGFuZCB0aGUgZXh0ZW5kZWQgbW9kdWxlIHdpdGhvdXQgZW1iZWRkZWQgdHlwZXMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMyBleHRlbmRzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyIGltcGxlbWVudHMgTWVzc2FnZVRleHRTZXJpYWxpemVyPE9iamVjdE1hcHBlcj4gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYzLmNsYXNzKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9UWVBFID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjNfVU5UWVBFRDsKLQotICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBoZWFkZXI7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoTUlNRV9UWVBFLmxlbmd0aCgpICsgMSk7Ci0gICAgICAgIGJ1ZmZlci5wdXQoKGJ5dGUpIE1JTUVfVFlQRS5sZW5ndGgoKSk7Ci0gICAgICAgIGJ1ZmZlci5wdXQoTUlNRV9UWVBFLmdldEJ5dGVzKCkpOwotICAgICAgICBoZWFkZXIgPSBidWZmZXIuYXJyYXkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgZGVmYXVsdCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyLgotICAgICAqCi0gICAgICogQnkgZGVmYXVsdCB0aGlzIHdpbGwgaW50ZXJuYWxseSBpbnN0YW50aWF0ZSBhIHtAbGluayBHcmFwaFNPTk1hcHBlcn0gYW5kIHJlZ2lzdGVyCi0gICAgICogYSB7QGxpbmsgR3JlbWxpblNlcnZlck1vZHVsZX0gYW5kIHtAbGluayBHcmFwaFNPTlhNb2R1bGVWMn0gdG8gdGhlIG1hcHBlci4KLSAgICAgKgotICAgICAqIEBzZWUgI0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjMoR3JhcGhTT05NYXBwZXIuQnVpbGRlcikKLSAgICAgKi8KLSAgICBwdWJsaWMgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMygpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyIHdpdGggYSBwcm92aWRlZCB7QGxpbmsgR3JhcGhTT05NYXBwZXIuQnVpbGRlcn0uCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgdG8gbWFrZSB0aGlzIG1hcHBlciB1c2FibGUgaW4gdGhlIGNvbnRleHQgb2YgcmVxdWVzdCBtZXNzYWdlcyBhbmQgcmVzcG9uc2VzLAotICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgYXV0b21hdGljYWxseSByZWdpc3RlciBhIHtAbGluayBHcmVtbGluU2VydmVyTW9kdWxlfSB0byB0aGUgcHJvdmlkZWQKLSAgICAgKiBtYXBwZXIuCi0gICAgICovCi0gICAgcHVibGljIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjMoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBtYXBwZXJCdWlsZGVyKSB7Ci0gICAgICAgIHN1cGVyKG1hcHBlckJ1aWxkZXIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117TUlNRV9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OfTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIHJldHVybiBidWlsZGVyLnR5cGVJbmZvKFR5cGVJbmZvLk5PX1RZUEVTKS5hZGRDdXN0b21Nb2R1bGUobmV3IEdyZW1saW5TZXJ2ZXJNb2R1bGUoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgYnl0ZVtdIG9idGFpbkhlYWRlcigpIHsKLSAgICAgICAgcmV0dXJuIGhlYWRlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplUmVzcG9uc2UoZmluYWwgU3RyaW5nIG1zZykgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIG1hcHBlci5yZWFkVmFsdWUobXNnLCBSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXNwb25zZSBbe31dIGNvdWxkIG5vdCBiZSBkZXNlcmlhbGl6ZWQgYnkge30uIiwgbXNnLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBzZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhyZXNwb25zZU1lc3NhZ2UpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGxvZ2dlci53YXJuKCJSZXNwb25zZSBbe31dIGNvdWxkIG5vdCBiZSBzZXJpYWxpemVkIGJ5IHt9LiIsIHJlc3BvbnNlTWVzc2FnZS50b1N0cmluZygpLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplUmVxdWVzdChmaW5hbCBTdHJpbmcgbXNnKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFwcGVyLnJlYWRWYWx1ZShtc2csIFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICBsb2dnZXIud2FybigiUmVxdWVzdCBbe31dIGNvdWxkIG5vdCBiZSBkZXNlcmlhbGl6ZWQgYnkge30uIiwgbXNnLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBzZXJpYWxpemVSZXF1ZXN0QXNTdHJpbmcoZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyhyZXF1ZXN0TWVzc2FnZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nZ2VyLndhcm4oIlJlcXVlc3QgW3t9XSBjb3VsZCBub3QgYmUgc2VyaWFsaXplZCBieSB7fS4iLCByZXF1ZXN0TWVzc2FnZS50b1N0cmluZygpLCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclY0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzI5NzVlCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclY0LmphdmEKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OTWFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OWE1vZHVsZVY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLlR5cGVJbmZvOworCisvKioKKyAqIFNlcmlhbGl6ZSByZXN1bHRzIHRvIEpTT04gd2l0aCB2ZXJzaW9uIDQgc2NoZW1hIGFuZCB0aGUgZXh0ZW5kZWQgbW9kdWxlIHdpdGhvdXQgZW1iZWRkZWQgdHlwZXMuCisgICovCitwdWJsaWMgZmluYWwgY2xhc3MgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNCBleHRlbmRzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9UWVBFID0gU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjRfVU5UWVBFRDsKKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBkZWZhdWx0IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXIuCisgICAgICoKKyAgICAgKiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBpbnRlcm5hbGx5IGluc3RhbnRpYXRlIGEge0BsaW5rIEdyYXBoU09OTWFwcGVyfSBhbmQgcmVnaXN0ZXIKKyAgICAgKiBhIHtAbGluayBHcmVtbGluU2VydmVyTW9kdWxlVjR9IGFuZCB7QGxpbmsgR3JhcGhTT05YTW9kdWxlVjR9IHRvIHRoZSBtYXBwZXIuCisgICAgICoKKyAgICAgKiBAc2VlICNHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclY0KEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIpCisgICAgICovCisgICAgcHVibGljIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjQoKSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplciB3aXRoIGEgcHJvdmlkZWQge0BsaW5rIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXJ9LgorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRvIG1ha2UgdGhpcyBtYXBwZXIgdXNhYmxlIGluIHRoZSBjb250ZXh0IG9mIHJlcXVlc3QgbWVzc2FnZXMgYW5kIHJlc3BvbnNlcywKKyAgICAgKiB0aGlzIG1ldGhvZCB3aWxsIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXIgYSB7QGxpbmsgR3JlbWxpblNlcnZlck1vZHVsZVY0fSB0byB0aGUgcHJvdmlkZWQKKyAgICAgKiBtYXBwZXIuCisgICAgICovCisgICAgcHVibGljIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjQoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBtYXBwZXJCdWlsZGVyKSB7CisgICAgICAgIHN1cGVyKG1hcHBlckJ1aWxkZXIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nW117TUlNRV9UWVBFLCBTZXJUb2tlbnMuTUlNRV9KU09OfTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGNvbmZpZ3VyZUJ1aWxkZXIoZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyKSB7CisgICAgICAgIHJldHVybiBidWlsZGVyLnR5cGVJbmZvKFR5cGVJbmZvLk5PX1RZUEVTKS5hZGRDdXN0b21Nb2R1bGUobmV3IEdyZW1saW5TZXJ2ZXJNb2R1bGVWNCgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1R5cGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvTWVzc2FnZVRleHRTZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL01lc3NhZ2VUZXh0U2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWE4Yzg3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvTWVzc2FnZVRleHRTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOwotCi1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLQotLyoqCi0gKiBBbiBleHRlbnNpb24gdG8gdGhlIE1lc3NhZ2VTZXJpYWxpemVyIGludGVyZmFjZSB0aGF0IGFsbG93cyBhIGZvcm1hdCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGV4dC1iYXNlZAotICogd2Vic29ja2V0IG1lc3NhZ2VzLiAgVGhpcyBpbnRlcmZhY2UgaXMgZm9yIGludGVybmFsIHB1cnBvc2VzIG9ubHkuICBJbXBsZW1lbnRlcnMgd2hvIGhhdmUgbWFwcGVyIHNlcmlhbGl6YXRpb24KLSAqIG5lZWRzIHNob3VsZCBOT1QgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlIGFzIGl0IHdpbGwgbm90IGJlIHVzZWQuICBHcmVtbGluIFNlcnZlciBvbmx5IHN1cHBvcnRzIHBsYWluIEpTT04KLSAqIGZvciB0ZXh0LWJhc2VkIHJlcXVlc3RzLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGludGVyZmFjZSBNZXNzYWdlVGV4dFNlcmlhbGl6ZXI8TT4gZXh0ZW5kcyBNZXNzYWdlU2VyaWFsaXplcjxNPiB7Ci0gICAgcHVibGljIFN0cmluZyBzZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UsIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKLQotICAgIHB1YmxpYyBTdHJpbmcgc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3RNZXNzYWdlLCBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb247Ci0KLSAgICBwdWJsaWMgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVSZXF1ZXN0KGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotCi0gICAgcHVibGljIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZVJlc3BvbnNlKGZpbmFsIFN0cmluZyBtc2cpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9SZXF1ZXN0TWVzc2FnZUdyeW9TZXJpYWxpemVyLmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL1JlcXVlc3RNZXNzYWdlR3J5b1NlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViMTNhYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL1JlcXVlc3RNZXNzYWdlR3J5b1NlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLmtyeW9zaGltLklucHV0U2hpbTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLmtyeW9zaGltLktyeW9TaGltOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW8ua3J5b3NoaW0uT3V0cHV0U2hpbTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLmtyeW9zaGltLlNlcmlhbGl6ZXJTaGltOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZUdyeW9TZXJpYWxpemVyIGltcGxlbWVudHMgU2VyaWFsaXplclNoaW08UmVxdWVzdE1lc3NhZ2U+IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPE8gZXh0ZW5kcyBPdXRwdXRTaGltPiB2b2lkIHdyaXRlKGZpbmFsIEtyeW9TaGltPD8sIE8+IGtyeW8sIGZpbmFsIE8gb3V0cHV0LCBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0TWVzc2FnZSkgewotICAgICAgICBrcnlvLndyaXRlT2JqZWN0KG91dHB1dCwgcmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBvdXRwdXQud3JpdGVTdHJpbmcocmVxdWVzdE1lc3NhZ2UuZ2V0UHJvY2Vzc29yKCkpOwotICAgICAgICBvdXRwdXQud3JpdGVTdHJpbmcocmVxdWVzdE1lc3NhZ2UuZ2V0T3AoKSk7Ci0gICAgICAgIGtyeW8ud3JpdGVPYmplY3Qob3V0cHV0LCByZXF1ZXN0TWVzc2FnZS5nZXRBcmdzKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8SSBleHRlbmRzIElucHV0U2hpbT4gUmVxdWVzdE1lc3NhZ2UgcmVhZChmaW5hbCBLcnlvU2hpbTxJLCA/PiBrcnlvLCBmaW5hbCBJIGlucHV0LCBmaW5hbCBDbGFzczxSZXF1ZXN0TWVzc2FnZT4gYUNsYXNzKSB7Ci0gICAgICAgIGZpbmFsIFVVSUQgaWQgPSBrcnlvLnJlYWRPYmplY3QoaW5wdXQsIFVVSUQuY2xhc3MpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcHJvY2Vzc29yID0gaW5wdXQucmVhZFN0cmluZygpOwotICAgICAgICBmaW5hbCBTdHJpbmcgb3AgPSBpbnB1dC5yZWFkU3RyaW5nKCk7Ci0KLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UuQnVpbGRlciBidWlsZGVyID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQob3ApCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKGlkKQotICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IocHJvY2Vzc29yKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGFyZ3MgPSBrcnlvLnJlYWRPYmplY3QoaW5wdXQsIEhhc2hNYXAuY2xhc3MpOwotICAgICAgICBhcmdzLmZvckVhY2goYnVpbGRlcjo6YWRkQXJnKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9SZXNwb25zZU1lc3NhZ2VHcnlvU2VyaWFsaXplci5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9SZXNwb25zZU1lc3NhZ2VHcnlvU2VyaWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGIzMTU3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvUmVzcG9uc2VNZXNzYWdlR3J5b1NlcmlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW8ua3J5b3NoaW0uSW5wdXRTaGltOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW8ua3J5b3NoaW0uS3J5b1NoaW07Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3J5by5rcnlvc2hpbS5PdXRwdXRTaGltOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW8ua3J5b3NoaW0uU2VyaWFsaXplclNoaW07Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIFJlc3BvbnNlTWVzc2FnZUdyeW9TZXJpYWxpemVyIGltcGxlbWVudHMgU2VyaWFsaXplclNoaW08UmVzcG9uc2VNZXNzYWdlPiB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxPIGV4dGVuZHMgT3V0cHV0U2hpbT4gdm9pZCB3cml0ZShmaW5hbCBLcnlvU2hpbTw/LCBPPiBrcnlvLCBmaW5hbCBPIG91dHB1dCwgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSkgewotICAgICAgICBrcnlvLndyaXRlT2JqZWN0T3JOdWxsKG91dHB1dCwgcmVzcG9uc2VNZXNzYWdlLmdldFJlcXVlc3RJZCgpICE9IG51bGwgPyByZXNwb25zZU1lc3NhZ2UuZ2V0UmVxdWVzdElkKCkgOiBudWxsLCBVVUlELmNsYXNzKTsKLQotICAgICAgICAvLyBzdGF0dXMKLSAgICAgICAgb3V0cHV0LndyaXRlU2hvcnQoKHNob3J0KSByZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmdldFZhbHVlKCkpOwotICAgICAgICBvdXRwdXQud3JpdGVTdHJpbmcocmVzcG9uc2VNZXNzYWdlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIGtyeW8ud3JpdGVDbGFzc0FuZE9iamVjdChvdXRwdXQsIHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkpOwotCi0gICAgICAgIC8vIHJlc3VsdAotICAgICAgICBrcnlvLndyaXRlQ2xhc3NBbmRPYmplY3Qob3V0cHV0LCByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAga3J5by53cml0ZUNsYXNzQW5kT2JqZWN0KG91dHB1dCwgcmVzcG9uc2VNZXNzYWdlLmdldFJlc3VsdCgpLmdldE1ldGEoKSk7Ci0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPEkgZXh0ZW5kcyBJbnB1dFNoaW0+IFJlc3BvbnNlTWVzc2FnZSByZWFkKGZpbmFsIEtyeW9TaGltPEksID8+IGtyeW8sIGZpbmFsIEkgaW5wdXQsIGZpbmFsIENsYXNzPFJlc3BvbnNlTWVzc2FnZT4gY2xhenopIHsKLSAgICAgICAgZmluYWwgVVVJRCByZXF1ZXN0SWQgPSBrcnlvLnJlYWRPYmplY3RPck51bGwoaW5wdXQsIFVVSUQuY2xhc3MpOwotICAgICAgICBmaW5hbCBpbnQgc3RhdHVzID0gaW5wdXQucmVhZFNob3J0KCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBzdGF0dXNNc2cgPSBpbnB1dC5yZWFkU3RyaW5nKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBzdGF0dXNBdHRyaWJ1dGVzID0gKE1hcDxTdHJpbmcsT2JqZWN0Pikga3J5by5yZWFkQ2xhc3NBbmRPYmplY3QoaW5wdXQpOwotICAgICAgICBmaW5hbCBPYmplY3QgcmVzdWx0ID0ga3J5by5yZWFkQ2xhc3NBbmRPYmplY3QoaW5wdXQpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gbWV0YUF0dHJpYnV0ZXMgPSAoTWFwPFN0cmluZyxPYmplY3Q+KSBrcnlvLnJlYWRDbGFzc0FuZE9iamVjdChpbnB1dCk7Ci0KLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlTWVzc2FnZS5idWlsZChyZXF1ZXN0SWQpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLmdldEZyb21WYWx1ZShzdGF0dXMpKQotICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKHN0YXR1c01zZykKLSAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlcyhzdGF0dXNBdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgIC5yZXN1bHQocmVzdWx0KQotICAgICAgICAgICAgICAgIC5yZXNwb25zZU1ldGFEYXRhKG1ldGFBdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9TZXJUb2tlbnMuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvU2VyVG9rZW5zLmphdmEKaW5kZXggNTI1NDllYy4uMzQyNDNjMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9TZXJUb2tlbnMuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL1NlclRva2Vucy5qYXZhCkBAIC0yNCwyNCArMjQsMjEgQEAKIHB1YmxpYyBmaW5hbCBjbGFzcyBTZXJUb2tlbnMgewogICAgIHByaXZhdGUgU2VyVG9rZW5zKCkge30KIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0FUVFJJQlVURVMgPSAiYXR0cmlidXRlcyI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fUkVTVUxUID0gInJlc3VsdCI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fU1RBVFVTID0gInN0YXR1cyI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fREFUQSA9ICJkYXRhIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9NRVRBID0gIm1ldGEiOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0NPREUgPSAiY29kZSI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fUkVRVUVTVCA9ICJyZXF1ZXN0SWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0RBVEEgPSAiZGF0YSI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fRVhDRVBUSU9OID0gImV4Y2VwdGlvbiI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fTUVTU0FHRSA9ICJtZXNzYWdlIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9QUk9DRVNTT1IgPSAicHJvY2Vzc29yIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9PUCA9ICJvcCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fQVJHUyA9ICJhcmdzIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9HUkVNTElOID0gImdyZW1saW4iOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0xBTkdVQUdFID0gImxhbmd1YWdlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9CSU5ESU5HUyA9ICJiaW5kaW5ncyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fRyA9ICJnIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9USU1FT1VUX01TID0gInRpbWVvdXRNcyI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fTUFURVJJQUxJWkVfUFJPUEVSVElFUyA9ICJtYXRlcmlhbGl6ZVByb3BlcnRpZXMiOwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9KU09OID0gImFwcGxpY2F0aW9uL2pzb24iOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfR1JBUEhTT05fVjEgPSAiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjEuMCtqc29uIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX0dSQVBIU09OX1YxX1VOVFlQRUQgPSAiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjEuMCtqc29uO3R5cGVzPWZhbHNlIjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX0dSQVBIU09OX1YyID0gImFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbiI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9HUkFQSFNPTl9WMl9VTlRZUEVEID0gImFwcGxpY2F0aW9uL3ZuZC5ncmVtbGluLXYyLjAranNvbjt0eXBlcz1mYWxzZSI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUlNRV9HUkFQSFNPTl9WMyA9ICJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb24iOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfR1JBUEhTT05fVjNfVU5UWVBFRCA9ICJhcHBsaWNhdGlvbi92bmQuZ3JlbWxpbi12My4wK2pzb247dHlwZXM9ZmFsc2UiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfR1JBUEhCSU5BUllfVjEgPSAiYXBwbGljYXRpb24vdm5kLmdyYXBoYmluYXJ5LXYxLjAiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1JTUVfR1JBUEhTT05fVjQgPSAiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX0dSQVBIU09OX1Y0X1VOVFlQRUQgPSAiYXBwbGljYXRpb24vdm5kLmdyZW1saW4tdjQuMCtqc29uO3R5cGVzPWZhbHNlIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNSU1FX0dSQVBIQklOQVJZX1Y0ID0gImFwcGxpY2F0aW9uL3ZuZC5ncmFwaGJpbmFyeS12NC4wIjsKIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvU2VyaWFsaXplcnMuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvU2VyaWFsaXplcnMuamF2YQppbmRleCA5M2FhNjY2Li42Y2YwYTUzIDEwMDY0NAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL1NlcmlhbGl6ZXJzLmphdmEKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9TZXJpYWxpemVycy5qYXZhCkBAIC0yMSw1MSArMjEsMzEgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CiAKIC8qKgotICogQW4gZW51bSBvZiB0aGUgZGVmYXVsdCBzZXJpYWxpemVycy4KKyAqIEFuIGVudW0gb2YgdGhlIGRlZmF1bHQgc2VyaWFsaXplcnMgYXZhaWxhYmxlIHN0YXJ0aW5nIGluIHY0LjAuCiAgKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCiBwdWJsaWMgZW51bSBTZXJpYWxpemVycyB7CiAKICAgICAvKioKLSAgICAgKiBHcmFwaFNPTiAzLjAuCisgICAgICogR3JhcGhTT04gNC4wLgogICAgICAqLwogICAgIEdSQVBIU09OKFNlclRva2Vucy5NSU1FX0pTT04pLAogCiAgICAgLyoqCi0gICAgICogR3JhcGhTT04gMS4wIHdpdGggdHlwZXMuCisgICAgICogR3JhcGhTT04gNC4wIHdpdGggdHlwZXMuCiAgICAgICovCi0gICAgR1JBUEhTT05fVjEoU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjEpLAorICAgIEdSQVBIU09OX1Y0KFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1Y0KSwKIAogICAgIC8qKgotICAgICAqIEdyYXBoU09OIDEuMCB3aXRob3V0IHR5cGVzLgorICAgICAqIEdyYXBoU09OIDQuMCB3aXRob3V0IHR5cGVzLgogICAgICAqLwotICAgIEdSQVBIU09OX1YxX1VOVFlQRUQoU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjFfVU5UWVBFRCksCisgICAgR1JBUEhTT05fVjRfVU5UWVBFRChTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WNF9VTlRZUEVEKSwKIAogICAgIC8qKgotICAgICAqIEdyYXBoU09OIDIuMCB3aXRoIHR5cGVzLgorICAgICAqIEdyYXBoQmluYXJ5IDQuMC4KICAgICAgKi8KLSAgICBHUkFQSFNPTl9WMihTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMiksCi0KLSAgICAvKioKLSAgICAgKiBHcmFwaFNPTiAyLjAgd2l0aG91dCB0eXBlcy4KLSAgICAgKi8KLSAgICBHUkFQSFNPTl9WMl9VTlRZUEVEKFNlclRva2Vucy5NSU1FX0dSQVBIU09OX1YyX1VOVFlQRUQpLAotCi0gICAgLyoqCi0gICAgICogR3JhcGhTT04gMy4wIHdpdGggdHlwZXMuCi0gICAgICovCi0gICAgR1JBUEhTT05fVjMoU2VyVG9rZW5zLk1JTUVfR1JBUEhTT05fVjMpLAotCi0gICAgLyoqCi0gICAgICogR3JhcGhTT04gMy4wIHdpdGhvdXQgdHlwZXMuCi0gICAgICovCi0gICAgR1JBUEhTT05fVjNfVU5UWVBFRChTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WM19VTlRZUEVEKSwKLQotICAgIC8qKgotICAgICAqIEdyYXBoQmluYXJ5IDEuMC4KLSAgICAgKi8KLSAgICBHUkFQSEJJTkFSWV9WMShTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WMSk7CisgICAgR1JBUEhCSU5BUllfVjQoU2VyVG9rZW5zLk1JTUVfR1JBUEhCSU5BUllfVjQpOwogCiAgICAgcHJpdmF0ZSBTdHJpbmcgdmFsdWU7CiAKQEAgLTgwLDIwICs2MCwxMiBAQAogICAgIHB1YmxpYyBNZXNzYWdlU2VyaWFsaXplcjw/PiBzaW1wbGVJbnN0YW5jZSgpIHsKICAgICAgICAgc3dpdGNoICh2YWx1ZSkgewogICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9KU09OOgotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMygpOwotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMSgpOwotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMV9VTlRZUEVEOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMSgpOwotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMigpOwotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WMl9VTlRZUEVEOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMigpOwotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WM19VTlRZUEVEOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMygpOwotICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WMToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpOworICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSFNPTl9WNF9VTlRZUEVEOgorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICAgICAgY2FzZSBTZXJUb2tlbnMuTUlNRV9HUkFQSEJJTkFSWV9WNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGNyZWF0ZSBhIHNpbXBsZSBNZXNzYWdlU2VyaWFsaXplciBpbnN0YW5jZSBvZiAiICsgdmFsdWUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL2JpbmFyeS9SZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L1JlcXVlc3RNZXNzYWdlU2VyaWFsaXplci5qYXZhCmluZGV4IGNmZGU3ZjMuLjkzOTdlNWEgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L1JlcXVlc3RNZXNzYWdlU2VyaWFsaXplci5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L1JlcXVlc3RNZXNzYWdlU2VyaWFsaXplci5qYXZhCkBAIC0xOSwxNiArMTksMTcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5iaW5hcnk7CiAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLk5ldHR5QnVmZmVyRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQnVmZmVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5HcmFwaEJpbmFyeVJlYWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlXcml0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLk5ldHR5QnVmZmVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7CiAKIHB1YmxpYyBjbGFzcyBSZXF1ZXN0TWVzc2FnZVNlcmlhbGl6ZXIgewogICAgIHByaXZhdGUgc3RhdGljIE5ldHR5QnVmZmVyRmFjdG9yeSBidWZmZXJGYWN0b3J5ID0gbmV3IE5ldHR5QnVmZmVyRmFjdG9yeSgpOwpAQCAtNDYsMTQgKzQ3LDM1IEBACiAgICAgICAgIH0KIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgVVVJRCBpZCA9IGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgVVVJRC5jbGFzcywgZmFsc2UpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG9wID0gY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBTdHJpbmcuY2xhc3MsIGZhbHNlKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm9jZXNzb3IgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgZmFsc2UpOworICAgICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBmaWVsZHMgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIE1hcC5jbGFzcywgZmFsc2UpOwogCi0gICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChvcCkub3ZlcnJpZGVSZXF1ZXN0SWQoaWQpLnByb2Nlc3Nvcihwcm9jZXNzb3IpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdyZW1saW4gPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgZmFsc2UpOwogCi0gICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGFyZ3MgPSBjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIE1hcC5jbGFzcywgZmFsc2UpOwotICAgICAgICAgICAgYXJncy5mb3JFYWNoKGJ1aWxkZXI6OmFkZEFyZyk7CisgICAgICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZS5CdWlsZGVyIGJ1aWxkZXIgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChncmVtbGluKTsKKyAgICAgICAgICAgIGlmIChmaWVsZHMuY29udGFpbnNLZXkoU2VyVG9rZW5zLlRPS0VOX0xBTkdVQUdFKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkTGFuZ3VhZ2UoZmllbGRzLmdldChTZXJUb2tlbnMuVE9LRU5fTEFOR1VBR0UpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkcy5jb250YWluc0tleShTZXJUb2tlbnMuVE9LRU5fRykpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEcoZmllbGRzLmdldChTZXJUb2tlbnMuVE9LRU5fRykudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRzLmNvbnRhaW5zS2V5KFNlclRva2Vucy5UT0tFTl9CSU5ESU5HUykpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZEJpbmRpbmdzKChNYXA8U3RyaW5nLCBPYmplY3Q+KSBmaWVsZHMuZ2V0KFNlclRva2Vucy5UT0tFTl9CSU5ESU5HUykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkcy5jb250YWluc0tleShUb2tlbnMuVElNRU9VVF9NUykpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRpbWVvdXRNaWxsaXMoKGxvbmcpIGZpZWxkcy5nZXQoVG9rZW5zLlRJTUVPVVRfTVMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmaWVsZHMuY29udGFpbnNLZXkoVG9rZW5zLkFSR1NfTUFURVJJQUxJWkVfUFJPUEVSVElFUykpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFkZE1hdGVyaWFsaXplUHJvcGVydGllcyhmaWVsZHMuZ2V0KFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkcy5jb250YWluc0tleShUb2tlbnMuQVJHU19CQVRDSF9TSVpFKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQ2h1bmtTaXplKChpbnQpIGZpZWxkcy5nZXQoVG9rZW5zLkFSR1NfQkFUQ0hfU0laRSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkcy5jb250YWluc0tleShUb2tlbnMuQlVMS19SRVNVTFRTKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnVsa1Jlc3VsdHMoQm9vbGVhbi5wYXJzZUJvb2xlYW4oZmllbGRzLmdldChUb2tlbnMuQlVMS19SRVNVTFRTKS50b1N0cmluZygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRzLmNvbnRhaW5zS2V5KFRva2Vucy5BUkdTX1RSQU5TQUNUSU9OX0lEKSkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVHJhbnNhY3Rpb25JZChmaWVsZHMuZ2V0KFRva2Vucy5BUkdTX1RSQU5TQUNUSU9OX0lEKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlKCk7CiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CkBAIC02OCwxNCArOTAsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIFZlcnNpb24KICAgICAgICAgICAgIGJ1ZmZlci53cml0ZUJ5dGUoR3JhcGhCaW5hcnlXcml0ZXIuVkVSU0lPTl9CWVRFKTsKLSAgICAgICAgICAgIC8vIFJlcXVlc3RJZAotICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldFJlcXVlc3RJZCgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICAgICAgICAgIC8vIE9wCi0gICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUuZ2V0T3AoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgICAgICAgICAvLyBQcm9jZXNzb3IKLSAgICAgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXRQcm9jZXNzb3IoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgICAgICAgICAvLyBBcmdzCi0gICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUuZ2V0QXJncygpLCBidWZmZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIC8vIEZpZWxkcworICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHZhbHVlLmdldEZpZWxkcygpLCBidWZmZXIsIGZhbHNlKTsKKyAgICAgICAgICAgIC8vIEdyZW1saW4KKyAgICAgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZSh2YWx1ZS5nZXRHcmVtbGluKCksIGJ1ZmZlciwgZmFsc2UpOworCiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbihleCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L1Jlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L1Jlc3BvbnNlTWVzc2FnZVNlcmlhbGl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYyMDUzMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL2JpbmFyeS9SZXNwb25zZU1lc3NhZ2VTZXJpYWxpemVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLmJpbmFyeTsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuTmV0dHlCdWZmZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVJlc3VsdDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1wdWJsaWMgY2xhc3MgUmVzcG9uc2VNZXNzYWdlU2VyaWFsaXplciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTmV0dHlCdWZmZXJGYWN0b3J5IGJ1ZmZlckZhY3RvcnkgPSBuZXcgTmV0dHlCdWZmZXJGYWN0b3J5KCk7Ci0KLSAgICBwdWJsaWMgUmVzcG9uc2VNZXNzYWdlIHJlYWRWYWx1ZShmaW5hbCBCeXRlQnVmIGJ5dGVCdWYsIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIGNvbnRleHQpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gV3JhcCBuZXR0eSdzIGJ1ZmZlcgotICAgICAgICBmaW5hbCBCdWZmZXIgYnVmZmVyID0gYnVmZmVyRmFjdG9yeS5jcmVhdGUoYnl0ZUJ1Zik7Ci0gICAgICAgIGZpbmFsIGludCB2ZXJzaW9uID0gYnVmZmVyLnJlYWRCeXRlKCkgJiAweGZmOwotCi0gICAgICAgIGlmICh2ZXJzaW9uID4+PiA3ICE9IDEpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5kaWNhdGlvbiB0aGF0IHRoZSByZXNwb25zZSBidWZmZXIgd2FzIGluY29ycmVjdGx5IGJ1aWx0Ci0gICAgICAgICAgICAvLyBPciB0aGUgYnVmZmVyIG9mZnNldHMgYXJlIHdyb25nCi0gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbigiVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgVVVJRC5jbGFzcywgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5nZXRGcm9tVmFsdWUoY29udGV4dC5yZWFkVmFsdWUoYnVmZmVyLCBJbnRlZ2VyLmNsYXNzLCBmYWxzZSkpKQotICAgICAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShjb250ZXh0LnJlYWRWYWx1ZShidWZmZXIsIFN0cmluZy5jbGFzcywgdHJ1ZSkpCi0gICAgICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTWFwLmNsYXNzLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgIC5yZXNwb25zZU1ldGFEYXRhKGNvbnRleHQucmVhZFZhbHVlKGJ1ZmZlciwgTWFwLmNsYXNzLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgICAgIC5yZXN1bHQoY29udGV4dC5yZWFkKGJ1ZmZlcikpCi0gICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVmFsdWUoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHZhbHVlLCBmaW5hbCBCeXRlQnVmIGJ5dGVCdWYsIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIGNvbnRleHQpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gV3JhcCBuZXR0eSdzIGJ1ZmZlcgotICAgICAgICBmaW5hbCBCdWZmZXIgYnVmZmVyID0gYnVmZmVyRmFjdG9yeS5jcmVhdGUoYnl0ZUJ1Zik7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VSZXN1bHQgcmVzdWx0ID0gdmFsdWUuZ2V0UmVzdWx0KCk7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlU3RhdHVzIHN0YXR1cyA9IHZhbHVlLmdldFN0YXR1cygpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBWZXJzaW9uCi0gICAgICAgICAgICBidWZmZXIud3JpdGVCeXRlKEdyYXBoQmluYXJ5V3JpdGVyLlZFUlNJT05fQllURSk7Ci0gICAgICAgICAgICAvLyBOdWxsYWJsZSByZXF1ZXN0IGlkCi0gICAgICAgICAgICBjb250ZXh0LndyaXRlVmFsdWUodmFsdWUuZ2V0UmVxdWVzdElkKCksIGJ1ZmZlciwgdHJ1ZSk7Ci0gICAgICAgICAgICAvLyBTdGF0dXMgY29kZQotICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHN0YXR1cy5nZXRDb2RlKCkuZ2V0VmFsdWUoKSwgYnVmZmVyLCBmYWxzZSk7Ci0gICAgICAgICAgICAvLyBOdWxsYWJsZSBzdGF0dXMgbWVzc2FnZQotICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHN0YXR1cy5nZXRNZXNzYWdlKCksIGJ1ZmZlciwgdHJ1ZSk7Ci0gICAgICAgICAgICAvLyBTdGF0dXMgYXR0cmlidXRlcwotICAgICAgICAgICAgY29udGV4dC53cml0ZVZhbHVlKHN0YXR1cy5nZXRBdHRyaWJ1dGVzKCksIGJ1ZmZlciwgZmFsc2UpOwotICAgICAgICAgICAgLy8gUmVzdWx0IG1ldGEKLSAgICAgICAgICAgIGNvbnRleHQud3JpdGVWYWx1ZShyZXN1bHQuZ2V0TWV0YSgpLCBidWZmZXIsIGZhbHNlKTsKLSAgICAgICAgICAgIC8vIEZ1bGx5LXF1YWxpZmllZCB2YWx1ZQotICAgICAgICAgICAgY29udGV4dC53cml0ZShyZXN1bHQuZ2V0RGF0YSgpLCBidWZmZXIpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FeGNlcHRpb24oZXgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RDb21wYXRpYmlsaXR5VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RDb21wYXRpYmlsaXR5VGVzdC5qYXZhCmluZGV4IDgyY2U5NTIuLjAxODM3MTIgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL0Fic3RyYWN0Q29tcGF0aWJpbGl0eVRlc3QuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9BYnN0cmFjdENvbXBhdGliaWxpdHlUZXN0LmphdmEKQEAgLTI1LDEyICsyNSwxNSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5UZXN0U3VwcG9ydDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJUb2tlbnM7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0LmNvcmUuSXMuaXM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwpAQCAtMTE3LDQgKzEyMCwzNSBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQua2V5KCksIGFjdHVhbC5rZXkoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC52YWx1ZSgpLCBhY3R1YWwudmFsdWUoKSk7CiAgICAgfQorCisgICAgcHJvdGVjdGVkIHN0YXRpYyB2b2lkIGFzc2VydFJlc3BvbnNlTWVzc2FnZShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzb3VyY2UsIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBmcm9tU3RhdGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlY3ljbGVkKSB7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuY29kZSgpLCByZWN5Y2xlZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSwgcmVjeWNsZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFN0YXR1cygpLmdldEV4Y2VwdGlvbigpLCByZWN5Y2xlZC5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXN1bHQoKS5nZXREYXRhKCksIHJlY3ljbGVkLmdldFJlc3VsdCgpLmdldERhdGEoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFN0YXR1cygpLmdldENvZGUoKS5jb2RlKCksIGZyb21TdGF0aWMuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIGZyb21TdGF0aWMuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFN0YXR1cygpLmdldEV4Y2VwdGlvbigpLCBmcm9tU3RhdGljLmdldFN0YXR1cygpLmdldEV4Y2VwdGlvbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlc3VsdCgpLmdldERhdGEoKSwgZnJvbVN0YXRpYy5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOworICAgIH0KKworICAgIHByb3RlY3RlZCBzdGF0aWMgdm9pZCBhc3NlcnRSZXF1ZXN0TWVzc2FnZShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXNvdXJjZSwgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZnJvbVN0YXRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVjeWNsZWQpIHsKKyAgICAgICAgLy8gQ2hlY2sgcGVyIGZpZWxkIHJhdGhlciB0aGFuIG1hcCBlcXVhbHMgc2luY2UgYSBuZXcgZmllbGQgbWF5IGdldCBhZGRlZCBsYXRlci4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEdyZW1saW4oKSwgcmVjeWNsZWQuZ2V0R3JlbWxpbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLjxNYXA+Z2V0RmllbGQoU2VyVG9rZW5zLlRPS0VOX0JJTkRJTkdTKSwgcmVjeWNsZWQuZ2V0RmllbGQoU2VyVG9rZW5zLlRPS0VOX0JJTkRJTkdTKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48U3RyaW5nPmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9MQU5HVUFHRSksIHJlY3ljbGVkLmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9MQU5HVUFHRSkpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuPFN0cmluZz5nZXRGaWVsZChTZXJUb2tlbnMuVE9LRU5fRyksIHJlY3ljbGVkLmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9HKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48TG9uZz5nZXRGaWVsZChTZXJUb2tlbnMuVE9LRU5fVElNRU9VVF9NUyksIHJlY3ljbGVkLmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9USU1FT1VUX01TKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48U3RyaW5nPmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9NQVRFUklBTElaRV9QUk9QRVJUSUVTKSwgcmVjeWNsZWQuZ2V0RmllbGQoU2VyVG9rZW5zLlRPS0VOX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0R3JlbWxpbigpLCBmcm9tU3RhdGljLmdldEdyZW1saW4oKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48TWFwPmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9CSU5ESU5HUyksIGZyb21TdGF0aWMuZ2V0RmllbGQoU2VyVG9rZW5zLlRPS0VOX0JJTkRJTkdTKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48U3RyaW5nPmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9MQU5HVUFHRSksIGZyb21TdGF0aWMuZ2V0RmllbGQoU2VyVG9rZW5zLlRPS0VOX0xBTkdVQUdFKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48U3RyaW5nPmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9HKSwgZnJvbVN0YXRpYy5nZXRGaWVsZChTZXJUb2tlbnMuVE9LRU5fRykpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuPExvbmc+Z2V0RmllbGQoU2VyVG9rZW5zLlRPS0VOX1RJTUVPVVRfTVMpLCBmcm9tU3RhdGljLmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9USU1FT1VUX01TKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS48U3RyaW5nPmdldEZpZWxkKFNlclRva2Vucy5UT0tFTl9NQVRFUklBTElaRV9QUk9QRVJUSUVTKSwgZnJvbVN0YXRpYy5nZXRGaWVsZChTZXJUb2tlbnMuVE9LRU5fTUFURVJJQUxJWkVfUFJPUEVSVElFUykpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL0Fic3RyYWN0VHlwZWRDb21wYXRpYmlsaXR5VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RUeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKaW5kZXggMzJmZDhlMC4uZjM4ZTllYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RUeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RUeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKQEAgLTE4LDcgKzE4LDggQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pbzsKIAotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9wZXJhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3JkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwpAQCAtMjgsNiArMjksOCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLk1ldHJpY3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbE1ldHJpY3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwpAQCAtNDMsNiArNDYsOCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5mdW5jdGlvbi5MYW1iZGE7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIGltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKQEAgLTY0LDYgKzY5LDcgQEAKIGltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKIGltcG9ydCBqYXZhLnRpbWUuWm9uZWREYXRlVGltZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CkBAIC04NSw1MiArOTEsOCBAQAogcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VHlwZWRDb21wYXRpYmlsaXR5VGVzdCBleHRlbmRzIEFic3RyYWN0Q29tcGF0aWJpbGl0eVRlc3QgewogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImF1dGhlbnRpY2F0aW9uY2hhbGxlbmdlIjsKLQotICAgICAgICBhc3N1bWVUaGF0KCJHcmFwaEJpbmFyeSBkb2VzIG5vdCB0ZXN0IHRoaXMgYmVjYXVzZSBSZXF1ZXN0L1Jlc3BvbnNlTWVzc2FnZSBhcmUgbm90IGFjdHVhbCBHcmFwaEJpbmFyeSB0eXBlcyIsCi0gICAgICAgICAgICAgICAgaXModGhpcy5nZXRDbGFzcygpLmVxdWFscyhHcmFwaEJpbmFyeUNvbXBhdGliaWxpdHlUZXN0LmNsYXNzKSkpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFJlc3BvbnNlTWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgUmVzcG9uc2VNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBSZXNwb25zZU1lc3NhZ2UuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0UmVzcG9uc2VNZXNzYWdlKHJlc291cmNlLCBmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVBdXRoZW50aWNhdGlvblJlc3BvbnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiYXV0aGVudGljYXRpb25yZXNwb25zZSI7Ci0KLSAgICAgICAgYXNzdW1lVGhhdCgiR3JhcGhCaW5hcnkgZG9lcyBub3QgdGVzdCB0aGlzIGJlY2F1c2UgUmVxdWVzdC9SZXNwb25zZU1lc3NhZ2UgYXJlIG5vdCBhY3R1YWwgR3JhcGhCaW5hcnkgdHlwZXMiLAotICAgICAgICAgICAgICAgIGlzKHRoaXMuZ2V0Q2xhc3MoKS5lcXVhbHMoR3JhcGhCaW5hcnlDb21wYXRpYmlsaXR5VGVzdC5jbGFzcykpKTsKLQotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgUmVxdWVzdE1lc3NhZ2UuY2xhc3MsIHJlc291cmNlTmFtZSksIFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydFJlcXVlc3RNZXNzYWdlKHJlc291cmNlLCBmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJzYXNsTWVjaGFuaXNtIiksIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoInNhc2xNZWNoYW5pc20iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJzYXNsIiksIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoInNhc2wiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJzYXNsTWVjaGFuaXNtIiksIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgic2FzbE1lY2hhbmlzbSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNhc2wiKSwgZnJvbVN0YXRpYy5nZXRBcmdzKCkuZ2V0KCJzYXNsIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlQmFycmllcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImJhcnJpZXIiOwotCi0gICAgICAgIGZpbmFsIFNhY2tGdW5jdGlvbnMuQmFycmllciByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFNhY2tGdW5jdGlvbnMuQmFycmllciBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFNhY2tGdW5jdGlvbnMuQmFycmllci5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFNhY2tGdW5jdGlvbnMuQmFycmllciByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgU2Fja0Z1bmN0aW9ucy5CYXJyaWVyLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBTYWNrRnVuY3Rpb25zLkJhcnJpZXIuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUJpZ0RlY2ltYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJiaWdkZWNpbWFsIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVQb3NpdGl2ZUJpZ0RlY2ltYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJwb3MtYmlnZGVjaW1hbCI7CiAKICAgICAgICAgZmluYWwgQmlnRGVjaW1hbCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CiAgICAgICAgIGZpbmFsIEJpZ0RlY2ltYWwgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCaWdEZWNpbWFsLmNsYXNzKTsKQEAgLTE0Miw4ICsxMDQsMjEgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUJpZ0ludGVnZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJiaWdpbnRlZ2VyIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVOZWdhdGl2ZUJpZ0RlY2ltYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJuZWctYmlnZGVjaW1hbCI7CisKKyAgICAgICAgZmluYWwgQmlnRGVjaW1hbCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIEJpZ0RlY2ltYWwgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCaWdEZWNpbWFsLmNsYXNzKTsKKyAgICAgICAgZmluYWwgQmlnRGVjaW1hbCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgQmlnRGVjaW1hbC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQmlnRGVjaW1hbC5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVBvc2l0aXZlQmlnSW50ZWdlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInBvcy1iaWdpbnRlZ2VyIjsKIAogICAgICAgICBmaW5hbCBCaWdJbnRlZ2VyIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgQmlnSW50ZWdlciBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEJpZ0ludGVnZXIuY2xhc3MpOwpAQCAtMTU1LDEyICsxMzAsMTIgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUJpbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJiaW5kaW5nIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVOZWdhdGl2ZUJpZ0ludGVnZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJuZWctYmlnaW50ZWdlciI7CiAKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUuQmluZGluZyByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlLkJpbmRpbmcgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCeXRlY29kZS5CaW5kaW5nLmNsYXNzKTsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUuQmluZGluZyByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgQnl0ZWNvZGUuQmluZGluZy5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQnl0ZWNvZGUuQmluZGluZy5jbGFzcyk7CisgICAgICAgIGZpbmFsIEJpZ0ludGVnZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBCaWdJbnRlZ2VyIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgQmlnSW50ZWdlci5jbGFzcyk7CisgICAgICAgIGZpbmFsIEJpZ0ludGVnZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEJpZ0ludGVnZXIuY2xhc3MsIHJlc291cmNlTmFtZSksIEJpZ0ludGVnZXIuY2xhc3MpOwogICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKQEAgLTE2OCw4ICsxNDMsOCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlQnl0ZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImJ5dGUiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1pbkJ5dGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJtaW4tYnl0ZSI7CiAKICAgICAgICAgZmluYWwgQnl0ZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CiAgICAgICAgIGZpbmFsIEJ5dGUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCeXRlLmNsYXNzKTsKQEAgLTE4MCw4ICsxNTUsMjAgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJieXRlYnVmZmVyIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNYXhCeXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWF4LWJ5dGUiOworCisgICAgICAgIGZpbmFsIEJ5dGUgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBCeXRlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgQnl0ZS5jbGFzcyk7CisgICAgICAgIGZpbmFsIEJ5dGUgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEJ5dGUuY2xhc3MsIHJlc291cmNlTmFtZSksIEJ5dGUuY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUVtcHR5Qnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImVtcHR5LWJpbmFyeSI7CiAKICAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CiAgICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCeXRlQnVmZmVyLmNsYXNzKTsKQEAgLTE5Nyw5NiArMTg0LDI1IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVCeXRlY29kZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImJ5dGVjb2RlIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVTdHJpbmdCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic3RyLWJpbmFyeSI7CiAKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCeXRlY29kZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEJ5dGVjb2RlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBCeXRlY29kZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQnl0ZWNvZGUuY2xhc3MpOworICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEJ5dGVCdWZmZXIuY2xhc3MpOworICAgICAgICAvLyBoYXZlIHRvIHJlLXJlYWQgYmVjYXVzZSBvbmNlIHRoZSBieXRlYnVmZmVyIGlzIGZsdXNoZWQgdG8gYXJyYXkgaXQgd2lsbCBiZSBlbXB0aWVkCisgICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBCeXRlQnVmZmVyLmNsYXNzKSwgQnl0ZUJ1ZmZlci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQnl0ZUJ1ZmZlci5jbGFzcyk7CiAgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICAvLyBjYW4ndCByZWFzb25hYmx5IGFzc2VydCB0aGUgYnl0ZWNvZGUgYWdhaW5zdCB0aGUgb3JpZ2luYWwgbW9kZWwgYXMgY2hhbmdlcyB0byBzdHJhdGVnaWVzIG92ZXIgdGltZSBtaWdodAotICAgICAgICAvLyBhbHRlciB0aGUgYnl0ZWNvZGUgZm9ybSBhbmQgdGhlbiBicmVhayB0aGUgdGVzdC4gdGhlIGFzc2VydGlvbnMgYXMgdGhleSBhcmUgZW5zdXJlIHRoYXQgdGhlIGNvcmUgb2YKLSAgICAgICAgLy8gc2VyaWFsaXphdGlvbiBpcyBjb3JyZWN0IGJ5IGVuc3VyaW5nIHRoZSBjb250ZW50cyBvZiBieXRlY29kZSAod2hldGhlciB0aGV5IGFyZSB2YWxpZCBmb3IgYSBzcGVjaWZpYyB2ZXJzaW9uCi0gICAgICAgIC8vIG9yIG5vdCkuIGl0IHNlZW1zIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhlc2UgdGVzdHMgdG8gdmFsaWRhdGUgdGhhdCBieXRlY29kZSBpdHNlbGYgaXMgdW5jaGFuZ2luZyBhbmQgZnVsbHkKLSAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJsZSAoYXQgbGVhc3QgZm9yIG5vdykuCisgICAgICAgIGZpbmFsIGJ5dGVbXSByZXNvdXJjZUFycmF5ID0gcmVzb3VyY2UuYXJyYXkoKTsKKyAgICAgICAgZmluYWwgYnl0ZVtdIGZyb21TdGF0aWNBcnJheSA9IGZyb21TdGF0aWMuYXJyYXkoKTsKKyAgICAgICAgZmluYWwgYnl0ZVtdIHJlY3ljbGVkQXJyYXkgPSByZWN5Y2xlZC5hcnJheSgpOworICAgICAgICBhc3NlcnRUaGF0KEFycmF5cy5lcXVhbHMoZnJvbVN0YXRpY0FycmF5LCByZWN5Y2xlZEFycmF5KSwgaXModHJ1ZSkpOworICAgICAgICBhc3NlcnRUaGF0KEFycmF5cy5lcXVhbHMocmVzb3VyY2VBcnJheSwgZnJvbVN0YXRpY0FycmF5KSwgaXModHJ1ZSkpOworICAgICAgICBhc3NlcnRUaGF0KEFycmF5cy5lcXVhbHMocmVzb3VyY2VBcnJheSwgcmVjeWNsZWRBcnJheSksIGlzKHRydWUpKTsKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUNhcmRpbmFsaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiY2FyZGluYWxpdHkiOwotCi0gICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5IHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUNoYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJjaGFyIjsKLQotICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBDaGFyYWN0ZXIuY2xhc3MpOwotICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIENoYXJhY3Rlci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQ2hhcmFjdGVyLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVDbGFzcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImNsYXNzIjsKLQotICAgICAgICBmaW5hbCBDbGFzcyByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIENsYXNzIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgQ2xhc3MuY2xhc3MpOwotICAgICAgICBmaW5hbCBDbGFzcyByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgQ2xhc3MuY2xhc3MsIHJlc291cmNlTmFtZSksIENsYXNzLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVDb2x1bW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJjb2x1bW4iOwotCi0gICAgICAgIGZpbmFsIENvbHVtbiByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIENvbHVtbiBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIENvbHVtbi5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIENvbHVtbiByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgQ29sdW1uLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBDb2x1bW4uY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZURhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJkYXRlIjsKLQotICAgICAgICBmaW5hbCBEYXRlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgRGF0ZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIERhdGUuY2xhc3MpOwotICAgICAgICBmaW5hbCBEYXRlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEYXRlLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBEYXRlLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRGlyZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiZGlyZWN0aW9uIjsKLQotICAgICAgICBmaW5hbCBEaXJlY3Rpb24gcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBEaXJlY3Rpb24gZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBEaXJlY3Rpb24uY2xhc3MpOwotICAgICAgICBmaW5hbCBEaXJlY3Rpb24gcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIERpcmVjdGlvbi5jbGFzcywgcmVzb3VyY2VOYW1lKSwgRGlyZWN0aW9uLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVEb3VibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJkb3VibGUiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1heERvdWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm1heC1kb3VibGUiOwogCiAgICAgICAgIGZpbmFsIERvdWJsZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CiAgICAgICAgIGZpbmFsIERvdWJsZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CkBAIC0yOTgsOCArMjE0LDExMSBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRHVyYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJkdXJhdGlvbiI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTWluRG91YmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWluLWRvdWJsZSI7CisKKyAgICAgICAgZmluYWwgRG91YmxlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRG91YmxlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRG91YmxlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgRG91YmxlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEb3VibGUuY2xhc3MsIHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1heE5lZ2F0aXZlRG91YmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibmVnLW1heC1kb3VibGUiOworCisgICAgICAgIGZpbmFsIERvdWJsZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIERvdWJsZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CisgICAgICAgIGZpbmFsIERvdWJsZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgRG91YmxlLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBEb3VibGUuY2xhc3MpOworICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNaW5OZWdhdGl2ZURvdWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5lZy1taW4tZG91YmxlIjsKKworICAgICAgICBmaW5hbCBEb3VibGUgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBEb3VibGUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBEb3VibGUuY2xhc3MpOworICAgICAgICBmaW5hbCBEb3VibGUgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIERvdWJsZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgRG91YmxlLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTmFuRG91YmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibmFuLWRvdWJsZSI7CisKKyAgICAgICAgZmluYWwgRG91YmxlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRG91YmxlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRG91YmxlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgRG91YmxlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEb3VibGUuY2xhc3MsIHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVBvc2l0aXZlSW5maW5pdHlEb3VibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJwb3MtaW5mLWRvdWJsZSI7CisKKyAgICAgICAgZmluYWwgRG91YmxlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRG91YmxlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRG91YmxlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgRG91YmxlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEb3VibGUuY2xhc3MsIHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU5lZ2F0aXZlSW5maW5pdHlEb3VibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJuZWctaW5mLWRvdWJsZSI7CisKKyAgICAgICAgZmluYWwgRG91YmxlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRG91YmxlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRG91YmxlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgRG91YmxlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEb3VibGUuY2xhc3MsIHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU5lZ2F0aXZlWmVyb0RvdWJsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5lZy16ZXJvLWRvdWJsZSI7CisKKyAgICAgICAgZmluYWwgRG91YmxlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRG91YmxlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRG91YmxlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgRG91YmxlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEb3VibGUuY2xhc3MsIHJlc291cmNlTmFtZSksIERvdWJsZS5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVplcm9EdXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInplcm8tZHVyYXRpb24iOworCisgICAgICAgIGZpbmFsIER1cmF0aW9uIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRHVyYXRpb24gZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBEdXJhdGlvbi5jbGFzcyk7CisgICAgICAgIGZpbmFsIER1cmF0aW9uIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEdXJhdGlvbi5jbGFzcywgcmVzb3VyY2VOYW1lKSwgRHVyYXRpb24uY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUZvcmV2ZXJEdXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImZvcmV2ZXItZHVyYXRpb24iOwogCiAgICAgICAgIGZpbmFsIER1cmF0aW9uIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgRHVyYXRpb24gZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBEdXJhdGlvbi5jbGFzcyk7CkBAIC0zMTIsNyArMzMxLDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRWRnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImVkZ2UiOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInRyYXZlcnNhbC1lZGdlIjsKIAogICAgICAgICBmaW5hbCBFZGdlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgRWRnZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEVkZ2UuY2xhc3MpOwpAQCAtMzI2LDggKzM0NSwyMyBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRmxvYXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJmbG9hdCI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTm9Qcm9wZXJ0eUVkZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJuby1wcm9wLWVkZ2UiOworCisgICAgICAgIGZpbmFsIEVkZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBFZGdlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRWRnZS5jbGFzcyk7CisgICAgICAgIGZpbmFsIEVkZ2UgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEVkZ2UuY2xhc3MsIHJlc291cmNlTmFtZSksIEVkZ2UuY2xhc3MpOworICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVkZ2UocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFZGdlKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNYXhGbG9hdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm1heC1mbG9hdCI7CiAKICAgICAgICAgZmluYWwgRmxvYXQgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBGbG9hdCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEZsb2F0LmNsYXNzKTsKQEAgLTMzOSwyNCArMzczLDEyIEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVJTmV0QWRkcmVzcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImluZXRhZGRyZXNzIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNaW5GbG9hdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm1pbi1mbG9hdCI7CiAKLSAgICAgICAgZmluYWwgSW5ldEFkZHJlc3MgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBJbmV0QWRkcmVzcyBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEluZXRBZGRyZXNzLmNsYXNzKTsKLSAgICAgICAgZmluYWwgSW5ldEFkZHJlc3MgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEZsb2F0LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBJbmV0QWRkcmVzcy5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlSW5zdGFudCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImluc3RhbnQiOwotCi0gICAgICAgIGZpbmFsIEluc3RhbnQgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBJbnN0YW50IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgSW5zdGFudC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEluc3RhbnQgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEluc3RhbnQuY2xhc3MsIHJlc291cmNlTmFtZSksIEluc3RhbnQuY2xhc3MpOworICAgICAgICBmaW5hbCBGbG9hdCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIEZsb2F0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRmxvYXQuY2xhc3MpOworICAgICAgICBmaW5hbCBGbG9hdCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgRmxvYXQuY2xhc3MsIHJlc291cmNlTmFtZSksIEZsb2F0LmNsYXNzKTsKICAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CkBAIC0zNjQsOCArMzg2LDg2IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVJbnRlZ2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiaW50ZWdlciI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTWF4TmVnYXRpdmVGbG9hdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5lZy1tYXgtZmxvYXQiOworCisgICAgICAgIGZpbmFsIEZsb2F0IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRmxvYXQgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBGbG9hdC5jbGFzcyk7CisgICAgICAgIGZpbmFsIEZsb2F0IHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBGbG9hdC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgRmxvYXQuY2xhc3MpOworICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNaW5OZWdhdGl2ZUZsb2F0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibmVnLW1pbi1mbG9hdCI7CisKKyAgICAgICAgZmluYWwgRmxvYXQgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBGbG9hdCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEZsb2F0LmNsYXNzKTsKKyAgICAgICAgZmluYWwgRmxvYXQgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEZsb2F0LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBGbG9hdC5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU5hbkZsb2F0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibmFuLWZsb2F0IjsKKworICAgICAgICBmaW5hbCBGbG9hdCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIEZsb2F0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRmxvYXQuY2xhc3MpOworICAgICAgICBmaW5hbCBGbG9hdCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgRmxvYXQuY2xhc3MsIHJlc291cmNlTmFtZSksIEZsb2F0LmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlUG9zaXRpdmVJbmZpbml0eUZsb2F0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAicG9zLWluZi1mbG9hdCI7CisKKyAgICAgICAgZmluYWwgRmxvYXQgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBGbG9hdCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEZsb2F0LmNsYXNzKTsKKyAgICAgICAgZmluYWwgRmxvYXQgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEZsb2F0LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBGbG9hdC5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU5lZ2F0aXZlSW5maW5pdHlGbG9hdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5lZy1pbmYtZmxvYXQiOworCisgICAgICAgIGZpbmFsIEZsb2F0IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRmxvYXQgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBGbG9hdC5jbGFzcyk7CisgICAgICAgIGZpbmFsIEZsb2F0IHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBGbG9hdC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgRmxvYXQuY2xhc3MpOworICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVOZWdhdGl2ZVplcm9GbG9hdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5lZy16ZXJvLWZsb2F0IjsKKworICAgICAgICBmaW5hbCBGbG9hdCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIEZsb2F0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRmxvYXQuY2xhc3MpOworICAgICAgICBmaW5hbCBGbG9hdCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgRmxvYXQuY2xhc3MsIHJlc291cmNlTmFtZSksIEZsb2F0LmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTWF4SW50ZWdlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm1heC1pbnQiOwogCiAgICAgICAgIGZpbmFsIEludGVnZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBJbnRlZ2VyIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgSW50ZWdlci5jbGFzcyk7CkBAIC0zNzYsNjAgKzQ3NiwyMCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTGFtYmRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibGFtYmRhIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNaW5JbnRlZ2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWluLWludCI7CiAKLSAgICAgICAgZmluYWwgTGFtYmRhIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgTGFtYmRhIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTGFtYmRhLmNsYXNzKTsKLSAgICAgICAgZmluYWwgTGFtYmRhIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBMYW1iZGEuY2xhc3MsIHJlc291cmNlTmFtZSksIExhbWJkYS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBmaW5hbCBJbnRlZ2VyIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgSW50ZWdlciBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEludGVnZXIuY2xhc3MpOworICAgICAgICBmaW5hbCBJbnRlZ2VyIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBJbnRlZ2VyLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBJbnRlZ2VyLmNsYXNzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVMb2NhbERhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJsb2NhbGRhdGUiOwotCi0gICAgICAgIGZpbmFsIExvY2FsRGF0ZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIExvY2FsRGF0ZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIExvY2FsRGF0ZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIExvY2FsRGF0ZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgTG9jYWxEYXRlLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBMb2NhbERhdGUuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVMb2NhbERhdGVUaW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibG9jYWxkYXRldGltZSI7Ci0KLSAgICAgICAgZmluYWwgTG9jYWxEYXRlVGltZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIExvY2FsRGF0ZVRpbWUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBMb2NhbERhdGVUaW1lLmNsYXNzKTsKLSAgICAgICAgZmluYWwgTG9jYWxEYXRlVGltZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgTG9jYWxEYXRlVGltZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgTG9jYWxEYXRlVGltZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUxvY2FsVGltZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImxvY2FsdGltZSI7Ci0KLSAgICAgICAgZmluYWwgTG9jYWxUaW1lIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgTG9jYWxUaW1lIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTG9jYWxUaW1lLmNsYXNzKTsKLSAgICAgICAgZmluYWwgTG9jYWxUaW1lIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBMb2NhbFRpbWUuY2xhc3MsIHJlc291cmNlTmFtZSksIExvY2FsVGltZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUxvbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJsb25nIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNYXhMb25nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWF4LWxvbmciOwogCiAgICAgICAgIGZpbmFsIExvbmcgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBMb25nIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTG9uZy5jbGFzcyk7CkBAIC00NDAsMTEgKzUwMCwyMCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTGlzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImxpc3QiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1pbkxvbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJtaW4tbG9uZyI7CiAKLSAgICAgICAgYXNzdW1lVGhhdCgiR3JhcGhTT04gdjIgZGlkbid0IGV4cGxpY2l0bHkgaGF2ZSBMaXN0IGFzIGEgdHlwZSIsCi0gICAgICAgICAgICAgICAgaXModGhpcy5nZXRDbGFzcygpLmVxdWFscyhHcmFwaFNPTlR5cGVkQ29tcGF0aWJpbGl0eVRlc3QuY2xhc3MpICYmIGdldENvbXBhdGliaWxpdHkoKS5lcXVhbHMoInYyIikpKTsKKyAgICAgICAgZmluYWwgTG9uZyByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIExvbmcgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBMb25nLmNsYXNzKTsKKyAgICAgICAgZmluYWwgTG9uZyByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgTG9uZy5jbGFzcywgcmVzb3VyY2VOYW1lKSwgTG9uZy5jbGFzcyk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTXVsdGlUeXBlTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInZhci10eXBlLWxpc3QiOwogCiAgICAgICAgIGZpbmFsIExpc3QgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBMaXN0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTGlzdC5jbGFzcyk7CkBAIC00NTUsMTEgKzUyNCwyMCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWFwIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVFbXB0eUxpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJlbXB0eS1saXN0IjsKIAotICAgICAgICBhc3N1bWVUaGF0KCJHcmFwaFNPTiB2MiBkaWRuJ3QgZXhwbGljaXRseSBoYXZlIE1hcCBhcyBhIHR5cGUiLAotICAgICAgICAgICAgICAgIGlzKHRoaXMuZ2V0Q2xhc3MoKS5lcXVhbHMoR3JhcGhTT05UeXBlZENvbXBhdGliaWxpdHlUZXN0LmNsYXNzKSAmJiBnZXRDb21wYXRpYmlsaXR5KCkuZXF1YWxzKCJ2MiIpKSk7CisgICAgICAgIGZpbmFsIExpc3QgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBMaXN0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTGlzdC5jbGFzcyk7CisgICAgICAgIGZpbmFsIExpc3QgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIExpc3QuY2xhc3MsIHJlc291cmNlTmFtZSksIExpc3QuY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU11bHRpVHlwZU1hcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInZhci10eXBlLW1hcCI7CiAKICAgICAgICAgZmluYWwgTWFwIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgTWFwIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTWFwLmNsYXNzKTsKQEAgLTQ3MCwzNiArNTQ4LDIwIEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVNZXRyaWNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWV0cmljcyI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRW1wdHlNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJlbXB0eS1tYXAiOwogCi0gICAgICAgIGZpbmFsIE1ldHJpY3MgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBNZXRyaWNzLmNsYXNzKTsKLSAgICAgICAgZmluYWwgTWV0cmljcyByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgTWV0cmljcy5jbGFzcywgcmVzb3VyY2VOYW1lKSwgTWV0cmljcy5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICAvLyBoYXZlIHRvIGRvIGNvbXBhcmVzIG9uIHRoZSBvYmplY3QgcmVhZCBmcm9tIHJlc291cmNlcyBiZWNhdXNlIGl0IGhhcyBzdGF0aWNhbGx5IGNhbGN1bGF0ZWQgdmFsdWVzLiB0aGUKLSAgICAgICAgLy8gIm5ldyIgb25lIGZyb20gTW9kZWwgaXMgZ2VuZXJhdGVkIGR5bmFtaWNhbGx5IGZyb20gYSB0cmF2ZXJzYWwgYW5kIHRodXMgaGFzIHZhcmlhdGlvbnMgaW4gcHJvcGVydGllcyB0aGF0Ci0gICAgICAgIC8vIGFyZSBiYXNlZCBvbiB0aW1lCi0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLmdldEFubm90YXRpb25zKCksIHJlY3ljbGVkLmdldEFubm90YXRpb25zKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYy5nZXRDb3VudHMoKSwgcmVjeWNsZWQuZ2V0Q291bnRzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYy5nZXREdXJhdGlvbihUaW1lVW5pdC5NSUxMSVNFQ09ORFMpLCByZWN5Y2xlZC5nZXREdXJhdGlvbihUaW1lVW5pdC5NSUxMSVNFQ09ORFMpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1vbnRoRGF5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibW9udGhkYXkiOwotCi0gICAgICAgIGZpbmFsIE1vbnRoRGF5IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgTW9udGhEYXkgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBNb250aERheS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIE1vbnRoRGF5IHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBNb250aERheS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgTW9udGhEYXkuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgZmluYWwgTWFwIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgTWFwIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgTWFwLmNsYXNzKTsKKyAgICAgICAgZmluYWwgTWFwIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBNYXAuY2xhc3MsIHJlc291cmNlTmFtZSksIE1hcC5jbGFzcyk7CiAgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOwogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlT2Zmc2V0RGF0ZVRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJvZmZzZXRkYXRldGltZSI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTWF4T2Zmc2V0RGF0ZVRpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJtYXgtb2Zmc2V0ZGF0ZXRpbWUiOwogCiAgICAgICAgIGZpbmFsIE9mZnNldERhdGVUaW1lIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgT2Zmc2V0RGF0ZVRpbWUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBPZmZzZXREYXRlVGltZS5jbGFzcyk7CkBAIC01MTEsMTIgKzU3MywxMiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlT2Zmc2V0VGltZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm9mZnNldHRpbWUiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1pbk9mZnNldERhdGVUaW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWluLW9mZnNldGRhdGV0aW1lIjsKIAotICAgICAgICBmaW5hbCBPZmZzZXRUaW1lIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgT2Zmc2V0VGltZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIE9mZnNldFRpbWUuY2xhc3MpOwotICAgICAgICBmaW5hbCBPZmZzZXRUaW1lIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBPZmZzZXRUaW1lLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBPZmZzZXRUaW1lLmNsYXNzKTsKKyAgICAgICAgZmluYWwgT2Zmc2V0RGF0ZVRpbWUgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBPZmZzZXREYXRlVGltZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIE9mZnNldERhdGVUaW1lLmNsYXNzKTsKKyAgICAgICAgZmluYWwgT2Zmc2V0RGF0ZVRpbWUgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIE9mZnNldERhdGVUaW1lLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBPZmZzZXREYXRlVGltZS5jbGFzcyk7CiAgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwogICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwpAQCAtNTI0LDU2ICs1ODYsOCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlT3BlcmF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJvcGVyYXRvciI7Ci0KLSAgICAgICAgZmluYWwgT3BlcmF0b3IgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBPcGVyYXRvciBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIE9wZXJhdG9yLmNsYXNzKTsKLSAgICAgICAgZmluYWwgT3BlcmF0b3IgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIE9wZXJhdG9yLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBPcGVyYXRvci5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlT3JkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJvcmRlciI7Ci0KLSAgICAgICAgZmluYWwgT3JkZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBPcmRlciBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIE9yZGVyLmNsYXNzKTsKLSAgICAgICAgZmluYWwgT3JkZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIE9yZGVyLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBPcmRlci5jbGFzcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlUCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInAiOwotCi0gICAgICAgIGZpbmFsIFAgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBQIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgUC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFAgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFAuY2xhc3MsIHJlc291cmNlTmFtZSksIFAuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVBBbmQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJwYW5kIjsKLQotICAgICAgICBmaW5hbCBQIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgUCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFAuY2xhc3MpOwotICAgICAgICBmaW5hbCBQIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBQLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBQLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVQYXRoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAicGF0aCI7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidHJhdmVyc2FsLXBhdGgiOwogCiAgICAgICAgIGZpbmFsIFBhdGggcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBQYXRoIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgUGF0aC5jbGFzcyk7CkBAIC01ODUsMTIgKzU5OSwyNSBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlUGVyaW9kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAicGVyaW9kIjsKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVFbXB0eVBhdGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJlbXB0eS1wYXRoIjsKIAotICAgICAgICBmaW5hbCBQZXJpb2QgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBQZXJpb2QgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBQZXJpb2QuY2xhc3MpOwotICAgICAgICBmaW5hbCBQZXJpb2QgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFBlcmlvZC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUGVyaW9kLmNsYXNzKTsKKyAgICAgICAgZmluYWwgUGF0aCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFBhdGggZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBQYXRoLmNsYXNzKTsKKyAgICAgICAgZmluYWwgUGF0aCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgUGF0aC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUGF0aC5jbGFzcyk7CisgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVzb3VyY2UpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVjeWNsZWQsIHJlc291cmNlKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVBhdGhXaXRoUHJvcGVydGllcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInByb3AtcGF0aCI7CisKKyAgICAgICAgZmluYWwgUGF0aCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFBhdGggZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBQYXRoLmNsYXNzKTsKKyAgICAgICAgZmluYWwgUGF0aCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgUGF0aC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUGF0aC5jbGFzcyk7CiAgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwogICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwpAQCAtNTk4LDMyICs2MjUsOCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlUG9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAicG9wIjsKLQotICAgICAgICBmaW5hbCBQb3AgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBQb3AgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBQb3AuY2xhc3MpOwotICAgICAgICBmaW5hbCBQb3AgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFBvcC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUG9wLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVQT3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJwb3IiOwotCi0gICAgICAgIGZpbmFsIFAgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBQIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgUC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFAgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFAuY2xhc3MsIHJlc291cmNlTmFtZSksIFAuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAicHJvcGVydHkiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUVkZ2VQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImVkZ2UtcHJvcGVydHkiOwogCiAgICAgICAgIGZpbmFsIFByb3BlcnR5IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgUHJvcGVydHkgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBQcm9wZXJ0eS5jbGFzcyk7CkBAIC02MzQsMTI3ICs2MzcsMjAgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNjb3BlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic2NvcGUiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU51bGxQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm51bGwtcHJvcGVydHkiOwogCi0gICAgICAgIGZpbmFsIFNjb3BlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgU2NvcGUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBTY29wZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFNjb3BlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBTY29wZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgU2NvcGUuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNlc3Npb25DbG9zZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInNlc3Npb25jbG9zZSI7Ci0KLSAgICAgICAgYXNzdW1lVGhhdCgiR3JhcGhCaW5hcnkgZG9lcyBub3QgdGVzdCB0aGlzIGJlY2F1c2UgUmVxdWVzdC9SZXNwb25zZU1lc3NhZ2UgYXJlIG5vdCBhY3R1YWwgR3JhcGhCaW5hcnkgdHlwZXMiLAotICAgICAgICAgICAgICAgIGlzKHRoaXMuZ2V0Q2xhc3MoKS5lcXVhbHMoR3JhcGhCaW5hcnlDb21wYXRpYmlsaXR5VGVzdC5jbGFzcykpKTsKLQotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgUmVxdWVzdE1lc3NhZ2UuY2xhc3MsIHJlc291cmNlTmFtZSksIFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKKyAgICAgICAgZmluYWwgUHJvcGVydHkgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBQcm9wZXJ0eSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFByb3BlcnR5LmNsYXNzKTsKKyAgICAgICAgZmluYWwgUHJvcGVydHkgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFByb3BlcnR5LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBQcm9wZXJ0eS5jbGFzcyk7CiAgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRSZXF1ZXN0TWVzc2FnZShyZXNvdXJjZSwgZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2Vzc2lvbiIpLCByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJzZXNzaW9uIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2Vzc2lvbiIpLCBmcm9tU3RhdGljLmdldEFyZ3MoKS5nZXQoInNlc3Npb24iKSk7CisgICAgICAgIGFzc2VydFByb3BlcnR5KHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0UHJvcGVydHkocmVzb3VyY2UsIHJlY3ljbGVkKTsKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNlc3Npb25FdmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic2Vzc2lvbmV2YWwiOwotCi0gICAgICAgIGFzc3VtZVRoYXQoIkdyYXBoQmluYXJ5IGRvZXMgbm90IHRlc3QgdGhpcyBiZWNhdXNlIFJlcXVlc3QvUmVzcG9uc2VNZXNzYWdlIGFyZSBub3QgYWN0dWFsIEdyYXBoQmluYXJ5IHR5cGVzIiwKLSAgICAgICAgICAgICAgICBpcyh0aGlzLmdldENsYXNzKCkuZXF1YWxzKEdyYXBoQmluYXJ5Q29tcGF0aWJpbGl0eVRlc3QuY2xhc3MpKSk7Ci0KLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFJlcXVlc3RNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRSZXF1ZXN0TWVzc2FnZShyZXNvdXJjZSwgZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2Vzc2lvbiIpLCByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJzZXNzaW9uIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgcmVjeWNsZWQuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIiksIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoImdyZW1saW4iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygoKE1hcCkgcmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSkuZ2V0KCJ4IiksICgoTWFwKSByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJzZXNzaW9uIiksIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgic2Vzc2lvbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIiksIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoTWFwKSByZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSkuZ2V0KCJ4IikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlU2Vzc2lvbkV2YWxBbGlhc2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic2Vzc2lvbmV2YWxhbGlhc2VkIjsKLQotICAgICAgICBhc3N1bWVUaGF0KCJHcmFwaEJpbmFyeSBkb2VzIG5vdCB0ZXN0IHRoaXMgYmVjYXVzZSBSZXF1ZXN0L1Jlc3BvbnNlTWVzc2FnZSBhcmUgbm90IGFjdHVhbCBHcmFwaEJpbmFyeSB0eXBlcyIsCi0gICAgICAgICAgICAgICAgaXModGhpcy5nZXRDbGFzcygpLmVxdWFscyhHcmFwaEJpbmFyeUNvbXBhdGliaWxpdHlUZXN0LmNsYXNzKSkpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0UmVxdWVzdE1lc3NhZ2UocmVzb3VyY2UsIGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNlc3Npb24iKSwgcmVjeWNsZWQuZ2V0QXJncygpLmdldCgic2Vzc2lvbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChNYXApIHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImFsaWFzZXMiKSkuZ2V0KCJnIiksICgoTWFwKSByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJhbGlhc2VzIikpLmdldCgiZyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoTWFwKSByZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSwgKChNYXApIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIikpLmdldCgieCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNlc3Npb24iKSwgZnJvbVN0YXRpYy5nZXRBcmdzKCkuZ2V0KCJzZXNzaW9uIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgZnJvbVN0YXRpYy5nZXRBcmdzKCkuZ2V0KCJsYW5ndWFnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImdyZW1saW4iKSwgZnJvbVN0YXRpYy5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChNYXApIHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImFsaWFzZXMiKSkuZ2V0KCJnIiksICgoTWFwKSBmcm9tU3RhdGljLmdldEFyZ3MoKS5nZXQoImFsaWFzZXMiKSkuZ2V0KCJnIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChNYXApIHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIikpLmdldCgieCIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVTZXNzaW9ubGVzc0V2YWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzZXNzaW9ubGVzc2V2YWwiOwotCi0gICAgICAgIGFzc3VtZVRoYXQoIkdyYXBoQmluYXJ5IGRvZXMgbm90IHRlc3QgdGhpcyBiZWNhdXNlIFJlcXVlc3QvUmVzcG9uc2VNZXNzYWdlIGFyZSBub3QgYWN0dWFsIEdyYXBoQmluYXJ5IHR5cGVzIiwKLSAgICAgICAgICAgICAgICBpcyh0aGlzLmdldENsYXNzKCkuZXF1YWxzKEdyYXBoQmluYXJ5Q29tcGF0aWJpbGl0eVRlc3QuY2xhc3MpKSk7Ci0KLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFJlcXVlc3RNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFJlcXVlc3RNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRSZXF1ZXN0TWVzc2FnZShyZXNvdXJjZSwgZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgcmVjeWNsZWQuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIiksIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoImdyZW1saW4iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygoKE1hcCkgcmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSkuZ2V0KCJ4IiksICgoTWFwKSByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJsYW5ndWFnZSIpLCBmcm9tU3RhdGljLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCBmcm9tU3RhdGljLmdldEFyZ3MoKS5nZXQoImdyZW1saW4iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygoKE1hcCkgcmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSkuZ2V0KCJ4IiksICgoTWFwKSBmcm9tU3RhdGljLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIikpLmdldCgieCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNlc3Npb25sZXNzRXZhbEFsaWFzZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzZXNzaW9ubGVzc2V2YWxhbGlhc2VkIjsKLQotICAgICAgICBhc3N1bWVUaGF0KCJHcmFwaEJpbmFyeSBkb2VzIG5vdCB0ZXN0IHRoaXMgYmVjYXVzZSBSZXF1ZXN0L1Jlc3BvbnNlTWVzc2FnZSBhcmUgbm90IGFjdHVhbCBHcmFwaEJpbmFyeSB0eXBlcyIsCi0gICAgICAgICAgICAgICAgaXModGhpcy5nZXRDbGFzcygpLmVxdWFscyhHcmFwaEJpbmFyeUNvbXBhdGliaWxpdHlUZXN0LmNsYXNzKSkpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0UmVxdWVzdE1lc3NhZ2UocmVzb3VyY2UsIGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChNYXApIHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImFsaWFzZXMiKSkuZ2V0KCJnIiksICgoTWFwKSByZWN5Y2xlZC5nZXRBcmdzKCkuZ2V0KCJhbGlhc2VzIikpLmdldCgiZyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoTWFwKSByZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSwgKChNYXApIHJlY3ljbGVkLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIikpLmdldCgieCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIiksIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoTWFwKSByZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJhbGlhc2VzIikpLmdldCgiZyIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXRBcmdzKCkuZ2V0KCJhbGlhc2VzIikpLmdldCgiZyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoTWFwKSByZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJiaW5kaW5ncyIpKS5nZXQoIngiKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSkuZ2V0KCJ4IikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlU2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic2V0IjsKLQotICAgICAgICBhc3N1bWVUaGF0KCJHcmFwaFNPTiB2MiBkaWRuJ3QgZXhwbGljaXRseSBoYXZlIFNldCBhcyBhIHR5cGUiLAotICAgICAgICAgICAgICAgIGlzKHRoaXMuZ2V0Q2xhc3MoKS5lcXVhbHMoR3JhcGhTT05UeXBlZENvbXBhdGliaWxpdHlUZXN0LmNsYXNzKSAmJiBnZXRDb21wYXRpYmlsaXR5KCkuZXF1YWxzKCJ2MiIpKSk7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTXVsdGlUeXBlU2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidmFyLXR5cGUtc2V0IjsKIAogICAgICAgICBmaW5hbCBTZXQgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBTZXQgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBTZXQuY2xhc3MpOwpAQCAtNzY1LDggKzY2MSwyMCBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlU2hvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzaG9ydCI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRW1wdHlTZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJlbXB0eS1zZXQiOworCisgICAgICAgIGZpbmFsIFNldCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFNldCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFNldC5jbGFzcyk7CisgICAgICAgIGZpbmFsIFNldCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgU2V0LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBTZXQuY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1heFNob3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWF4LXNob3J0IjsKIAogICAgICAgICBmaW5hbCBTaG9ydCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CiAgICAgICAgIGZpbmFsIFNob3J0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgU2hvcnQuY2xhc3MpOwpAQCAtNzc3LDUxICs2ODUsMTIgQEAKICAgICB9CiAKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVN0YW5kYXJkUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic3RhbmRhcmRyZXN1bHQiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1pblNob3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWluLXNob3J0IjsKIAotICAgICAgICBhc3N1bWVUaGF0KCJHcmFwaEJpbmFyeSBkb2VzIG5vdCB0ZXN0IHRoaXMgYmVjYXVzZSBSZXF1ZXN0L1Jlc3BvbnNlTWVzc2FnZSBhcmUgbm90IGFjdHVhbCBHcmFwaEJpbmFyeSB0eXBlcyIsCi0gICAgICAgICAgICAgICAgaXModGhpcy5nZXRDbGFzcygpLmVxdWFscyhHcmFwaEJpbmFyeUNvbXBhdGliaWxpdHlUZXN0LmNsYXNzKSkpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFJlc3BvbnNlTWVzc2FnZS5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgSGFzaE1hcC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgUmVzcG9uc2VNZXNzYWdlLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydFJlc3BvbnNlTWVzc2FnZShyZXNvdXJjZSwgZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInQiOwotCi0gICAgICAgIGZpbmFsIFQgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBUIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgVC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFQgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFQuY2xhc3MsIHJlc291cmNlTmFtZSksIFQuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVRleHRQKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidGV4dHAiOwotCi0gICAgICAgIGZpbmFsIFRleHRQIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgVGV4dFAgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBUZXh0UC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFRleHRQIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBUZXh0UC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgVGV4dFAuY2xhc3MpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVRpbWVzdGFtcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInRpbWVzdGFtcCI7Ci0KLSAgICAgICAgZmluYWwgVGltZXN0YW1wIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgVGltZXN0YW1wIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgVGltZXN0YW1wLmNsYXNzKTsKLSAgICAgICAgZmluYWwgVGltZXN0YW1wIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBUaW1lc3RhbXAuY2xhc3MsIHJlc291cmNlTmFtZSksIFRpbWVzdGFtcC5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBmaW5hbCBTaG9ydCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFNob3J0IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgU2hvcnQuY2xhc3MpOworICAgICAgICBmaW5hbCBTaG9ydCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgU2hvcnQuY2xhc3MsIHJlc291cmNlTmFtZSksIFNob3J0LmNsYXNzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CkBAIC04MjksNyArNjk4LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVGlua2VyR3JhcGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJ0aW5rZXJncmFwaCI7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidGlua2VyLWdyYXBoIjsKIAogICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFRpbmtlckdyYXBoLmNsYXNzKTsKICAgICAgICAgZmluYWwgVGlua2VyR3JhcGggcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFRpbmtlckdyYXBoLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBUaW5rZXJHcmFwaC5jbGFzcyk7CkBAIC04NDAsNDQgKzcwOSwyMSBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVHJhdmVyc2FsTWV0cmljcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInRyYXZlcnNhbG1ldHJpY3MiOwotCi0gICAgICAgIGZpbmFsIFRyYXZlcnNhbE1ldHJpY3MgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWxNZXRyaWNzIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgVHJhdmVyc2FsTWV0cmljcy5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbE1ldHJpY3MgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFRyYXZlcnNhbE1ldHJpY3MuY2xhc3MsIHJlc291cmNlTmFtZSksIFRyYXZlcnNhbE1ldHJpY3MuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLQotICAgICAgICAvLyBuZWVkIHRvIGFzc2VydCBhZ2FpbnN0IGVhY2ggb3RoZXIgc2luY2UgdGhlIG1vZGVsIHZlcnNpb24gY2FuIGNoYW5nZSBiZXR3ZWVuIHRlc3QgcnVucyBhcyBpdCBpcyBkeW5hbWljYWxseQotICAgICAgICAvLyBnZW5lcmF0ZWQKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlY3ljbGVkLmdldER1cmF0aW9uKFRpbWVVbml0Lk1JTExJU0VDT05EUyksIGZyb21TdGF0aWMuZ2V0RHVyYXRpb24oVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7Ci0gICAgICAgIGZpbmFsIENvbGxlY3Rpb248PyBleHRlbmRzIE1ldHJpY3M+IHJlc291cmNlTWV0cmljcyA9IHJlc291cmNlLmdldE1ldHJpY3MoKTsKLSAgICAgICAgcmVzb3VyY2VNZXRyaWNzLmZvckVhY2gobSAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMocmVjeWNsZWQuZ2V0TWV0cmljcyhtLmdldElkKCkpLmdldEFubm90YXRpb25zKCksIGZyb21TdGF0aWMuZ2V0TWV0cmljcyhtLmdldElkKCkpLmdldEFubm90YXRpb25zKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlY3ljbGVkLmdldE1ldHJpY3MobS5nZXRJZCgpKS5nZXROYW1lKCksIGZyb21TdGF0aWMuZ2V0TWV0cmljcyhtLmdldElkKCkpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMocmVjeWNsZWQuZ2V0TWV0cmljcyhtLmdldElkKCkpLmdldENvdW50cygpLCBmcm9tU3RhdGljLmdldE1ldHJpY3MobS5nZXRJZCgpKS5nZXRDb3VudHMoKSk7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVHJhdmVyc2VyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidHJhdmVyc2VyIjsKLQotICAgICAgICBmaW5hbCBUcmF2ZXJzZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzZXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBUcmF2ZXJzZXIuY2xhc3MpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFRyYXZlcnNlci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgVHJhdmVyc2VyLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5idWxrKCksIHJlY3ljbGVkLmJ1bGsoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5idWxrKCksIGZyb21TdGF0aWMuYnVsaygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldCgpLCByZWN5Y2xlZC5nZXQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXQoKSwgZnJvbVN0YXRpYy5nZXQoKSk7Ci0gICAgICAgIGFzc2VydFZlcnRleCgoVmVydGV4KSByZXNvdXJjZS5nZXQoKSwgKFZlcnRleCkgcmVjeWNsZWQuZ2V0KCkpOwotICAgICAgICBhc3NlcnRWZXJ0ZXgoKFZlcnRleCkgcmVzb3VyY2UuZ2V0KCksIChWZXJ0ZXgpIGZyb21TdGF0aWMuZ2V0KCkpOwotICAgIH0KLQotICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVVVJRCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInV1aWQiOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInNwZWNpZmllZC11dWlkIjsKKworICAgICAgICBmaW5hbCBVVUlEIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgVVVJRCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFVVSUQuY2xhc3MpOworICAgICAgICBmaW5hbCBVVUlEIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBVVUlELmNsYXNzLCByZXNvdXJjZU5hbWUpLCBVVUlELmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTmlsVVVJRCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5pbC11dWlkIjsKIAogICAgICAgICBmaW5hbCBVVUlEIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgVVVJRCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFVVSUQuY2xhc3MpOwpAQCAtODkwLDcgKzczNiwyMiBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVWZXJ0ZXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJ2ZXJ0ZXgiOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInRyYXZlcnNhbC12ZXJ0ZXgiOworCisgICAgICAgIGZpbmFsIFZlcnRleCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFZlcnRleCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFZlcnRleC5jbGFzcyk7CisgICAgICAgIGZpbmFsIFZlcnRleCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgVmVydGV4LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBWZXJ0ZXguY2xhc3MpOworICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydFZlcnRleChyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydFZlcnRleChyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTm9Qcm9wZXJ0eVZlcnRleCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm5vLXByb3AtdmVydGV4IjsKIAogICAgICAgICBmaW5hbCBWZXJ0ZXggcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBWZXJ0ZXggZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBWZXJ0ZXguY2xhc3MpOwpAQCAtOTA1LDcgKzc2Niw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVZlcnRleFByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidmVydGV4cHJvcGVydHkiOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInRyYXZlcnNhbC12ZXJ0ZXhwcm9wZXJ0eSI7CiAKICAgICAgICAgZmluYWwgVmVydGV4UHJvcGVydHkgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFZlcnRleFByb3BlcnR5LmNsYXNzKTsKQEAgLTkxOSw4OSArNzgwLDE4MiBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlWWVhcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInllYXIiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1ldGFwcm9wZXJ0eVZlcnRleFByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWV0YS12ZXJ0ZXhwcm9wZXJ0eSI7CiAKLSAgICAgICAgZmluYWwgWWVhciByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFllYXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBZZWFyLmNsYXNzKTsKLSAgICAgICAgZmluYWwgWWVhciByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgWWVhci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgWWVhci5jbGFzcyk7CisgICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgVmVydGV4UHJvcGVydHkgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBWZXJ0ZXhQcm9wZXJ0eS5jbGFzcyk7CisgICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5IHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBWZXJ0ZXhQcm9wZXJ0eS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgVmVydGV4UHJvcGVydHkuY2xhc3MpOwogICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydFZlcnRleFByb3BlcnR5KHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydFZlcnRleFByb3BlcnR5KHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNldFZlcnRleFByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic2V0LWNhcmRpbmFsaXR5LXZlcnRleHByb3BlcnR5IjsKKworICAgICAgICBmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFZlcnRleFByb3BlcnR5IGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgVmVydGV4UHJvcGVydHkuY2xhc3MpOworICAgICAgICBmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgVmVydGV4UHJvcGVydHkuY2xhc3MsIHJlc291cmNlTmFtZSksIFZlcnRleFByb3BlcnR5LmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRWZXJ0ZXhQcm9wZXJ0eShyZXNvdXJjZSwgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRWZXJ0ZXhQcm9wZXJ0eShyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVJZFQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJpZC10IjsKKworICAgICAgICBmaW5hbCBUIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgVCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFQuY2xhc3MpOworICAgICAgICBmaW5hbCBUIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBULmNsYXNzLCByZXNvdXJjZU5hbWUpLCBULmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVZZWFyTW9udGgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJ5ZWFybW9udGgiOworICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU91dERpcmVjdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm91dC1kaXJlY3Rpb24iOwogCi0gICAgICAgIGZpbmFsIFllYXJNb250aCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFllYXJNb250aCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFllYXJNb250aC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIFllYXJNb250aCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgWWVhck1vbnRoLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBZZWFyTW9udGguY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgZmluYWwgRGlyZWN0aW9uIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgRGlyZWN0aW9uIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgRGlyZWN0aW9uLmNsYXNzKTsKKyAgICAgICAgZmluYWwgRGlyZWN0aW9uIHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBEaXJlY3Rpb24uY2xhc3MsIHJlc291cmNlTmFtZSksIERpcmVjdGlvbi5jbGFzcyk7CiAgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgZnJvbVN0YXRpYyk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZSwgcmVjeWNsZWQpOwogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlWm9uZURhdGVUaW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiem9uZWRkYXRldGltZSI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVmFyQnVsa0xpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJ2YXItYnVsa2xpc3QiOwogCi0gICAgICAgIC8vIHNlZW0gdG8gcmVjYWxsIHRoaXMgd2FzIGEga25vd24gaXNzdWUgZm9yIEdyYXBoQmluYXJ5LiBub3QgZ29pbmcgdG8gZnVzcyB3aXRoIGl0IHRob3VnaCBzaW5jZSB0aGUKLSAgICAgICAgLy8gbG9uZ2VyIHRlcm0gcGxhbiBpcyB0byBsaWtlbHkgZHJvcCB0aGVzZSBqdm0gb25seSB0eXBlcy4KLSAgICAgICAgYXNzdW1lVGhhdCgiR3JhcGhCaW5hcnkgZG9lc24ndCBxdWl0ZSBzZXJpYWxpemUgWm9uZURhdGVUaW1lIGZvciBhIHBlcmZlY3Qgcm91bmQgdHJpcCIsCi0gICAgICAgICAgICAgICAgaXMoZ2V0Q2xhc3MoKS5lcXVhbHMoR3JhcGhCaW5hcnlDb21wYXRpYmlsaXR5VGVzdC5jbGFzcykpKTsKKyAgICAgICAgZmluYWwgQnVsa1NldCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIExpc3QgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBMaXN0LmNsYXNzKTsKKyAgICAgICAgZmluYWwgTGlzdCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgQnVsa1NldC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgTGlzdC5jbGFzcyk7CisgICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7CisgICAgICAgIC8vIHdlIG5vIGxvbmdlciBkZXNlcmlhbGl6ZSBpbnRvIEJ1bGtTZXRzLCBuZWVkcyB0aGUgZXhwYW5kZWQgbGlzdAorICAgICAgICBMaXN0IGV4cGFuZGVkUmVzb3VyY2UgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgcmVzb3VyY2Uuc3BsaXRlcmF0b3IoKS5mb3JFYWNoUmVtYWluaW5nKGV4cGFuZGVkUmVzb3VyY2U6OmFkZCk7CisgICAgICAgIGFzc2VydEVxdWFscyhleHBhbmRlZFJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGFuZGVkUmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CiAKLSAgICAgICAgZmluYWwgWm9uZWREYXRlVGltZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFpvbmVkRGF0ZVRpbWUgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBab25lZERhdGVUaW1lLmNsYXNzKTsKLSAgICAgICAgZmluYWwgWm9uZWREYXRlVGltZSByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgWm9uZWREYXRlVGltZS5jbGFzcywgcmVzb3VyY2VOYW1lKSwgWm9uZWREYXRlVGltZS5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlRW1wdHlCdWxrTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImVtcHR5LWJ1bGtsaXN0IjsKKworICAgICAgICBmaW5hbCBCdWxrU2V0IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKKyAgICAgICAgZmluYWwgTGlzdCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIExpc3QuY2xhc3MpOworICAgICAgICBmaW5hbCBMaXN0IHJlY3ljbGVkID0gcmVhZCh3cml0ZShmcm9tU3RhdGljLCBCdWxrU2V0LmNsYXNzLCByZXNvdXJjZU5hbWUpLCBMaXN0LmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgLy8gd2Ugbm8gbG9uZ2VyIGRlc2VyaWFsaXplIGludG8gQnVsa1NldHMsIG5lZWRzIHRoZSBleHBhbmRlZCBsaXN0CisgICAgICAgIExpc3QgZXhwYW5kZWRSZXNvdXJjZSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICByZXNvdXJjZS5zcGxpdGVyYXRvcigpLmZvckVhY2hSZW1haW5pbmcoZXhwYW5kZWRSZXNvdXJjZTo6YWRkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGFuZGVkUmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMoZXhwYW5kZWRSZXNvdXJjZSwgcmVjeWNsZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlU2luZ2xlQnl0ZUNoYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzaW5nbGUtYnl0ZS1jaGFyIjsKKworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBDaGFyYWN0ZXIuY2xhc3MpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIENoYXJhY3Rlci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQ2hhcmFjdGVyLmNsYXNzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVab25lT2Zmc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiem9uZW9mZnNldCI7CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlTXVsdGlCeXRlQ2hhcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gIm11bHRpLWJ5dGUtY2hhciI7CiAKLSAgICAgICAgZmluYWwgWm9uZU9mZnNldCByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIFpvbmVPZmZzZXQgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBab25lT2Zmc2V0LmNsYXNzKTsKLSAgICAgICAgZmluYWwgWm9uZU9mZnNldCByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgWm9uZU9mZnNldC5jbGFzcywgcmVzb3VyY2VOYW1lKSwgWm9uZU9mZnNldC5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBDaGFyYWN0ZXIuY2xhc3MpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIENoYXJhY3Rlci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQ2hhcmFjdGVyLmNsYXNzKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRSZXNwb25zZU1lc3NhZ2UoZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc291cmNlLCBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZnJvbVN0YXRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVjeWNsZWQpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlcXVlc3RJZCgpLCByZWN5Y2xlZC5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSwgcmVjeWNsZWQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmdldFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCByZWN5Y2xlZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpLCByZWN5Y2xlZC5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLCByZWN5Y2xlZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLCByZWN5Y2xlZC5nZXRSZXN1bHQoKS5nZXRNZXRhKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCByZWN5Y2xlZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCksIGZyb21TdGF0aWMuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmdldFZhbHVlKCksIGZyb21TdGF0aWMuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmdldFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCBmcm9tU3RhdGljLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCksIGZyb21TdGF0aWMuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlc3VsdCgpLmdldERhdGEoKSwgZnJvbVN0YXRpYy5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLCBmcm9tU3RhdGljLmdldFJlc3VsdCgpLmdldE1ldGEoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIGZyb21TdGF0aWMuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJ1bnNwZWNpZmllZC1udWxsIjsKKworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBDaGFyYWN0ZXIuY2xhc3MpOworICAgICAgICBmaW5hbCBDaGFyYWN0ZXIgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIENoYXJhY3Rlci5jbGFzcywgcmVzb3VyY2VOYW1lKSwgQ2hhcmFjdGVyLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRSZXF1ZXN0TWVzc2FnZShmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXNvdXJjZSwgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZnJvbVN0YXRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlY3ljbGVkKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKSwgcmVjeWNsZWQuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0T3AoKSwgcmVjeWNsZWQuZ2V0T3AoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRQcm9jZXNzb3IoKSwgcmVjeWNsZWQuZ2V0UHJvY2Vzc29yKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLCByZWN5Y2xlZC5nZXRBcmdzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCksIGZyb21TdGF0aWMuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0T3AoKSwgZnJvbVN0YXRpYy5nZXRPcCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFByb2Nlc3NvcigpLCBmcm9tU3RhdGljLmdldFByb2Nlc3NvcigpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKSwgZnJvbVN0YXRpYy5nZXRBcmdzKCkpOworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVHJ1ZUJvb2xlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJ0cnVlLWJvb2xlYW4iOworCisgICAgICAgIGZpbmFsIEJvb2xlYW4gcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBCb29sZWFuIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgQm9vbGVhbi5jbGFzcyk7CisgICAgICAgIGZpbmFsIEJvb2xlYW4gcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEJvb2xlYW4uY2xhc3MsIHJlc291cmNlTmFtZSksIEJvb2xlYW4uY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUZhbHNlQm9vbGVhbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImZhbHNlLWJvb2xlYW4iOworCisgICAgICAgIGZpbmFsIEJvb2xlYW4gcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBCb29sZWFuIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgQm9vbGVhbi5jbGFzcyk7CisgICAgICAgIGZpbmFsIEJvb2xlYW4gcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIEJvb2xlYW4uY2xhc3MsIHJlc291cmNlTmFtZSksIEJvb2xlYW4uY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNpbmdsZUJ5dGVTdHJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzaW5nbGUtYnl0ZS1zdHJpbmciOworCisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIFN0cmluZy5jbGFzcyk7CisgICAgICAgIGZpbmFsIFN0cmluZyByZWN5Y2xlZCA9IHJlYWQod3JpdGUoZnJvbVN0YXRpYywgU3RyaW5nLmNsYXNzLCByZXNvdXJjZU5hbWUpLCBTdHJpbmcuY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZU1peGVkU3RyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAibWl4ZWQtc3RyaW5nIjsKKworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBTdHJpbmcgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBTdHJpbmcuY2xhc3MpOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFN0cmluZy5jbGFzcywgcmVzb3VyY2VOYW1lKSwgU3RyaW5nLmNsYXNzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCBmcm9tU3RhdGljKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLCByZWN5Y2xlZCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVUcmF2ZXJzYWxUcmVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidHJhdmVyc2FsLXRyZWUiOworCisgICAgICAgIGZpbmFsIFRyZWUgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOworICAgICAgICBmaW5hbCBUcmVlIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgVHJlZS5jbGFzcyk7CisgICAgICAgIGZpbmFsIFRyZWUgcmVjeWNsZWQgPSByZWFkKHdyaXRlKGZyb21TdGF0aWMsIFRyZWUuY2xhc3MsIHJlc291cmNlTmFtZSksIFRyZWUuY2xhc3MpOworICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIGZyb21TdGF0aWMpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UsIHJlY3ljbGVkKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9BYnN0cmFjdFVudHlwZWRDb21wYXRpYmlsaXR5VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vQWJzdHJhY3RVbnR5cGVkQ29tcGF0aWJpbGl0eVRlc3QuamF2YQppbmRleCA2MzJmZjdkLi5hZGYzNDhmIDEwMDY0NAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9BYnN0cmFjdFVudHlwZWRDb21wYXRpYmlsaXR5VGVzdC5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL0Fic3RyYWN0VW50eXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKQEAgLTE4LDIzICsxOCwyOSBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvOwogCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBhdGg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Qcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhiaW5hcnkuR3JhcGhCaW5hcnlDb21wYXRpYmlsaXR5VGVzdDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RTYW1lOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzdW1lLmFzc3VtZVRoYXQ7CiAKIC8qKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQpAQCAtNDIsNDYgKzQ4LDggQEAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFVudHlwZWRDb21wYXRpYmlsaXR5VGVzdCBleHRlbmRzIEFic3RyYWN0Q29tcGF0aWJpbGl0eVRlc3QgewogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gImF1dGhlbnRpY2F0aW9uY2hhbGxlbmdlIjsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB3cml0ZShyZXNvdXJjZSwgUmVzcG9uc2VNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBIYXNoTWFwIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgcmVjeWNsZWQgPSByZWFkKGJ5dGVzLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBmcm9tU3RhdGljLmdldCgicmVxdWVzdElkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURS5nZXRWYWx1ZSgpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoInN0YXR1cyIpKS5nZXQoImNvZGUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCByZWN5Y2xlZC5nZXQoInJlcXVlc3RJZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5BVVRIRU5USUNBVEUuZ2V0VmFsdWUoKSwgKChNYXApIHJlY3ljbGVkLmdldCgic3RhdHVzIikpLmdldCgiY29kZSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUF1dGhlbnRpY2F0aW9uUmVzcG9uc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJhdXRoZW50aWNhdGlvbnJlc3BvbnNlIjsKLQotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIGJ5dGVbXSBieXRlcyA9IHdyaXRlKHJlc291cmNlLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcywgcmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgSGFzaE1hcCBmcm9tU3RhdGljID0gcmVhZChyZWFkRnJvbVJlc291cmNlKHJlc291cmNlTmFtZSksIEhhc2hNYXAuY2xhc3MpOwotICAgICAgICBmaW5hbCBIYXNoTWFwIHJlY3ljbGVkID0gcmVhZChieXRlcywgSGFzaE1hcC5jbGFzcyk7Ci0gICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwgZnJvbVN0YXRpYy5nZXQoInJlcXVlc3RJZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldE9wKCksIGZyb21TdGF0aWMuZ2V0KCJvcCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFByb2Nlc3NvcigpLCBmcm9tU3RhdGljLmdldCgicHJvY2Vzc29yIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2FzbE1lY2hhbmlzbSIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuZ2V0KCJzYXNsTWVjaGFuaXNtIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2FzbCIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuZ2V0KCJzYXNsIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwgcmVjeWNsZWQuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRPcCgpLCByZWN5Y2xlZC5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIHJlY3ljbGVkLmdldCgicHJvY2Vzc29yIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2FzbE1lY2hhbmlzbSIpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLmdldCgic2FzbE1lY2hhbmlzbSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNhc2wiKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5nZXQoInNhc2wiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVFZGdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAiZWRnZSI7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidHJhdmVyc2FsLWVkZ2UiOwogCiAgICAgICAgIGZpbmFsIEVkZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB3cml0ZShyZXNvdXJjZSwgRWRnZS5jbGFzcywgcmVzb3VyY2VOYW1lKTsKQEAgLTg5LDE5ICs1NywxOSBAQAogICAgICAgICBmaW5hbCBIYXNoTWFwIHJlY3ljbGVkID0gcmVhZChieXRlcywgSGFzaE1hcC5jbGFzcyk7CiAgICAgICAgIGFzc2VydE5vdFNhbWUoZnJvbVN0YXRpYywgcmVjeWNsZWQpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaWQoKSwgZnJvbVN0YXRpYy5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UubGFiZWwoKSwgZnJvbVN0YXRpYy5nZXQoImxhYmVsIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChyZXNvdXJjZS5sYWJlbCgpKSwgZnJvbVN0YXRpYy5nZXQoImxhYmVsIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaWQoKSwgZnJvbVN0YXRpYy5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaW5WZXJ0ZXgoKS5sYWJlbCgpLCBmcm9tU3RhdGljLmdldCgiaW5WTGFiZWwiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5vdXRWZXJ0ZXgoKS5sYWJlbCgpLCBmcm9tU3RhdGljLmdldCgib3V0VkxhYmVsIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaW5WZXJ0ZXgoKS5pZCgpLCBmcm9tU3RhdGljLmdldCgiaW5WIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2Uub3V0VmVydGV4KCkuaWQoKSwgZnJvbVN0YXRpYy5nZXQoIm91dFYiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlc291cmNlLmluVmVydGV4KCkubGFiZWwoKSksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiaW5WIikpLmdldCgibGFiZWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlc291cmNlLm91dFZlcnRleCgpLmxhYmVsKCkpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoIm91dFYiKSkuZ2V0KCJsYWJlbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmluVmVydGV4KCkuaWQoKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJpblYiKSkuZ2V0KCJpZCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLm91dFZlcnRleCgpLmlkKCksICgoTWFwKSBmcm9tU3RhdGljLmdldCgib3V0ViIpKS5nZXQoImlkIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaWQoKSwgcmVjeWNsZWQuZ2V0KCJpZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmxhYmVsKCksIHJlY3ljbGVkLmdldCgibGFiZWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlc291cmNlLmxhYmVsKCkpLCByZWN5Y2xlZC5nZXQoImxhYmVsIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaWQoKSwgcmVjeWNsZWQuZ2V0KCJpZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmluVmVydGV4KCkubGFiZWwoKSwgcmVjeWNsZWQuZ2V0KCJpblZMYWJlbCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLm91dFZlcnRleCgpLmxhYmVsKCksIHJlY3ljbGVkLmdldCgib3V0VkxhYmVsIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuaW5WZXJ0ZXgoKS5pZCgpLCByZWN5Y2xlZC5nZXQoImluViIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLm91dFZlcnRleCgpLmlkKCksIHJlY3ljbGVkLmdldCgib3V0ViIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QocmVzb3VyY2UuaW5WZXJ0ZXgoKS5sYWJlbCgpKSwgKChNYXApIHJlY3ljbGVkLmdldCgiaW5WIikpLmdldCgibGFiZWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlc291cmNlLm91dFZlcnRleCgpLmxhYmVsKCkpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJvdXRWIikpLmdldCgibGFiZWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5pblZlcnRleCgpLmlkKCksICgoTWFwKSByZWN5Y2xlZC5nZXQoImluViIpKS5nZXQoImlkIikpOworICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2Uub3V0VmVydGV4KCkuaWQoKSwgKChNYXApIHJlY3ljbGVkLmdldCgib3V0ViIpKS5nZXQoImlkIikpOwogCiAgICAgICAgIC8vIGRlYWwgd2l0aCBpbmNvbXBhdGliaWxpdGllcwogICAgICAgICBpZiAoZ2V0Q29tcGF0aWJpbGl0eSgpLmVxdWFscygidjEtbm8tdHlwZXMiKSB8fCBnZXRDb21wYXRpYmlsaXR5KCkuZXF1YWxzKCJ2My1uby10eXBlcyIpKSB7CkBAIC0xMjMsNyArOTEsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVQYXRoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAicGF0aCI7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidHJhdmVyc2FsLXBhdGgiOwogCiAgICAgICAgIGZpbmFsIFBhdGggcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB3cml0ZShyZXNvdXJjZSwgUGF0aC5jbGFzcywgcmVzb3VyY2VOYW1lKTsKQEAgLTEzNiwyNyArMTA0LDI3IEBACiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5sYWJlbHMoKS5nZXQoMikuc2l6ZSgpLCAoKExpc3QpICgoTGlzdCkgZnJvbVN0YXRpYy5nZXQoImxhYmVscyIpKS5nZXQoMikpLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5vYmplY3RzKCkuc2l6ZSgpLCAoKExpc3QpIGZyb21TdGF0aWMuZ2V0KCJvYmplY3RzIikpLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgwKSkuaWQoKSwgKChNYXApICgoTGlzdCkgZnJvbVN0YXRpYy5nZXQoIm9iamVjdHMiKSkuZ2V0KDApKS5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChWZXJ0ZXgpIHJlc291cmNlLm9iamVjdHMoKS5nZXQoMCkpLmxhYmVsKCksICgoTWFwKSAoKExpc3QpIGZyb21TdGF0aWMuZ2V0KCJvYmplY3RzIikpLmdldCgwKSkuZ2V0KCJsYWJlbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKChWZXJ0ZXgpIHJlc291cmNlLm9iamVjdHMoKS5nZXQoMCkpLmxhYmVsKCkpLCAoKE1hcCkgKChMaXN0KSBmcm9tU3RhdGljLmdldCgib2JqZWN0cyIpKS5nZXQoMCkpLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgxKSkuaWQoKSwgKChNYXApICgoTGlzdCkgZnJvbVN0YXRpYy5nZXQoIm9iamVjdHMiKSkuZ2V0KDEpKS5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChWZXJ0ZXgpIHJlc291cmNlLm9iamVjdHMoKS5nZXQoMSkpLmxhYmVsKCksICgoTWFwKSAoKExpc3QpIGZyb21TdGF0aWMuZ2V0KCJvYmplY3RzIikpLmdldCgxKSkuZ2V0KCJsYWJlbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKChWZXJ0ZXgpIHJlc291cmNlLm9iamVjdHMoKS5nZXQoMSkpLmxhYmVsKCkpLCAoKE1hcCkgKChMaXN0KSBmcm9tU3RhdGljLmdldCgib2JqZWN0cyIpKS5nZXQoMSkpLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgyKSkuaWQoKSwgKChNYXApICgoTGlzdCkgZnJvbVN0YXRpYy5nZXQoIm9iamVjdHMiKSkuZ2V0KDIpKS5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChWZXJ0ZXgpIHJlc291cmNlLm9iamVjdHMoKS5nZXQoMikpLmxhYmVsKCksICgoTWFwKSAoKExpc3QpIGZyb21TdGF0aWMuZ2V0KCJvYmplY3RzIikpLmdldCgyKSkuZ2V0KCJsYWJlbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoKChWZXJ0ZXgpIHJlc291cmNlLm9iamVjdHMoKS5nZXQoMikpLmxhYmVsKCkpLCAoKE1hcCkgKChMaXN0KSBmcm9tU3RhdGljLmdldCgib2JqZWN0cyIpKS5nZXQoMikpLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5sYWJlbHMoKS5zaXplKCksICgoTGlzdCkgcmVjeWNsZWQuZ2V0KCJsYWJlbHMiKSkuc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmxhYmVscygpLmdldCgwKS5zaXplKCksICgoTGlzdCkgKChMaXN0KSByZWN5Y2xlZC5nZXQoImxhYmVscyIpKS5nZXQoMCkpLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5sYWJlbHMoKS5nZXQoMSkuc2l6ZSgpLCAoKExpc3QpICgoTGlzdCkgcmVjeWNsZWQuZ2V0KCJsYWJlbHMiKSkuZ2V0KDEpKS5zaXplKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UubGFiZWxzKCkuZ2V0KDIpLnNpemUoKSwgKChMaXN0KSAoKExpc3QpIHJlY3ljbGVkLmdldCgibGFiZWxzIikpLmdldCgyKSkuc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLm9iamVjdHMoKS5zaXplKCksICgoTGlzdCkgcmVjeWNsZWQuZ2V0KCJvYmplY3RzIikpLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgwKSkuaWQoKSwgKChNYXApICgoTGlzdCkgcmVjeWNsZWQuZ2V0KCJvYmplY3RzIikpLmdldCgwKSkuZ2V0KCJpZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoVmVydGV4KSByZXNvdXJjZS5vYmplY3RzKCkuZ2V0KDApKS5sYWJlbCgpLCAoKE1hcCkgKChMaXN0KSByZWN5Y2xlZC5nZXQoIm9iamVjdHMiKSkuZ2V0KDApKS5nZXQoImxhYmVsIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgwKSkubGFiZWwoKSksICgoTWFwKSAoKExpc3QpIHJlY3ljbGVkLmdldCgib2JqZWN0cyIpKS5nZXQoMCkpLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgxKSkuaWQoKSwgKChNYXApICgoTGlzdCkgcmVjeWNsZWQuZ2V0KCJvYmplY3RzIikpLmdldCgxKSkuZ2V0KCJpZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoVmVydGV4KSByZXNvdXJjZS5vYmplY3RzKCkuZ2V0KDEpKS5sYWJlbCgpLCAoKE1hcCkgKChMaXN0KSByZWN5Y2xlZC5nZXQoIm9iamVjdHMiKSkuZ2V0KDEpKS5nZXQoImxhYmVsIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgxKSkubGFiZWwoKSksICgoTWFwKSAoKExpc3QpIHJlY3ljbGVkLmdldCgib2JqZWN0cyIpKS5nZXQoMSkpLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgyKSkuaWQoKSwgKChNYXApICgoTGlzdCkgcmVjeWNsZWQuZ2V0KCJvYmplY3RzIikpLmdldCgyKSkuZ2V0KCJpZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoVmVydGV4KSByZXNvdXJjZS5vYmplY3RzKCkuZ2V0KDIpKS5sYWJlbCgpLCAoKE1hcCkgKChMaXN0KSByZWN5Y2xlZC5nZXQoIm9iamVjdHMiKSkuZ2V0KDIpKS5nZXQoImxhYmVsIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgoKFZlcnRleCkgcmVzb3VyY2Uub2JqZWN0cygpLmdldCgyKSkubGFiZWwoKSksICgoTWFwKSAoKExpc3QpIHJlY3ljbGVkLmdldCgib2JqZWN0cyIpKS5nZXQoMikpLmdldCgibGFiZWwiKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInByb3BlcnR5IjsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJlZGdlLXByb3BlcnR5IjsKIAogICAgICAgICBmaW5hbCBQcm9wZXJ0eSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7CiAgICAgICAgIGZpbmFsIGJ5dGVbXSBieXRlcyA9IHdyaXRlKHJlc291cmNlLCBQcm9wZXJ0eS5jbGFzcywgcmVzb3VyY2VOYW1lKTsKQEAgLTE3MiwxNjAgKzE0MCw4IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVTZXNzaW9uQ2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzZXNzaW9uY2xvc2UiOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gd3JpdGUocmVzb3VyY2UsIFJlcXVlc3RNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBIYXNoTWFwIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgcmVjeWNsZWQgPSByZWFkKGJ5dGVzLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBmcm9tU3RhdGljLmdldCgicmVxdWVzdElkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0T3AoKSwgZnJvbVN0YXRpYy5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIGZyb21TdGF0aWMuZ2V0KCJwcm9jZXNzb3IiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuc2l6ZSgpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNlc3Npb24iKS50b1N0cmluZygpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuZ2V0KCJzZXNzaW9uIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwgcmVjeWNsZWQuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRPcCgpLCByZWN5Y2xlZC5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIHJlY3ljbGVkLmdldCgicHJvY2Vzc29yIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLnNpemUoKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgic2Vzc2lvbiIpLnRvU3RyaW5nKCksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJzZXNzaW9uIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlU2Vzc2lvbkV2YWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzZXNzaW9uZXZhbCI7Ci0KLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB3cml0ZShyZXNvdXJjZSwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MsIHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgZmluYWwgSGFzaE1hcCByZWN5Y2xlZCA9IHJlYWQoYnl0ZXMsIEhhc2hNYXAuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGZyb21TdGF0aWMuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRPcCgpLCBmcm9tU3RhdGljLmdldCgib3AiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRQcm9jZXNzb3IoKSwgZnJvbVN0YXRpYy5nZXQoInByb2Nlc3NvciIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5zaXplKCksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgibGFuZ3VhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJzZXNzaW9uIikudG9TdHJpbmcoKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgic2Vzc2lvbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIiksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5nZXQoImJpbmRpbmdzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwgcmVjeWNsZWQuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRPcCgpLCByZWN5Y2xlZC5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIHJlY3ljbGVkLmdldCgicHJvY2Vzc29yIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLnNpemUoKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLmdldCgiZ3JlbWxpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJsYW5ndWFnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNlc3Npb24iKS50b1N0cmluZygpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLmdldCgic2Vzc2lvbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIiksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJiaW5kaW5ncyIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVNlc3Npb25FdmFsQWxpYXNlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInNlc3Npb25ldmFsYWxpYXNlZCI7Ci0KLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB3cml0ZShyZXNvdXJjZSwgUmVxdWVzdE1lc3NhZ2UuY2xhc3MsIHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgZmluYWwgSGFzaE1hcCByZWN5Y2xlZCA9IHJlYWQoYnl0ZXMsIEhhc2hNYXAuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGZyb21TdGF0aWMuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRPcCgpLCBmcm9tU3RhdGljLmdldCgib3AiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRQcm9jZXNzb3IoKSwgZnJvbVN0YXRpYy5nZXQoInByb2Nlc3NvciIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5zaXplKCksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgibGFuZ3VhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJzZXNzaW9uIikudG9TdHJpbmcoKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgic2Vzc2lvbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIiksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5nZXQoImJpbmRpbmdzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYWxpYXNlZCIpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuZ2V0KCJhbGlhc2VkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwgcmVjeWNsZWQuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRPcCgpLCByZWN5Y2xlZC5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIHJlY3ljbGVkLmdldCgicHJvY2Vzc29yIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLnNpemUoKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiZ3JlbWxpbiIpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLmdldCgiZ3JlbWxpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJsYW5ndWFnZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoInNlc3Npb24iKS50b1N0cmluZygpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLmdldCgic2Vzc2lvbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImJpbmRpbmdzIiksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJiaW5kaW5ncyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImFsaWFzZWQiKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5nZXQoImFsaWFzZWQiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWFkV3JpdGVTZXNzaW9ubGVzc0V2YWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZSA9ICJzZXNzaW9ubGVzc2V2YWwiOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gd3JpdGUocmVzb3VyY2UsIFJlcXVlc3RNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBIYXNoTWFwIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgcmVjeWNsZWQgPSByZWFkKGJ5dGVzLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBmcm9tU3RhdGljLmdldCgicmVxdWVzdElkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0T3AoKSwgZnJvbVN0YXRpYy5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIGZyb21TdGF0aWMuZ2V0KCJwcm9jZXNzb3IiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuc2l6ZSgpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImdyZW1saW4iKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgiZ3JlbWxpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgiYmluZGluZ3MiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCByZWN5Y2xlZC5nZXQoInJlcXVlc3RJZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldE9wKCksIHJlY3ljbGVkLmdldCgib3AiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRQcm9jZXNzb3IoKSwgcmVjeWNsZWQuZ2V0KCJwcm9jZXNzb3IiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuc2l6ZSgpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIiksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5nZXQoImJpbmRpbmdzIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlU2Vzc2lvbmxlc3NFdmFsQWxpYXNlZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInNlc3Npb25sZXNzZXZhbGFsaWFzZWQiOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gd3JpdGUocmVzb3VyY2UsIFJlcXVlc3RNZXNzYWdlLmNsYXNzLCByZXNvdXJjZU5hbWUpOwotICAgICAgICBmaW5hbCBIYXNoTWFwIGZyb21TdGF0aWMgPSByZWFkKHJlYWRGcm9tUmVzb3VyY2UocmVzb3VyY2VOYW1lKSwgSGFzaE1hcC5jbGFzcyk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgcmVjeWNsZWQgPSByZWFkKGJ5dGVzLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhmcm9tU3RhdGljLCByZWN5Y2xlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBmcm9tU3RhdGljLmdldCgicmVxdWVzdElkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0T3AoKSwgZnJvbVN0YXRpYy5nZXQoIm9wIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0UHJvY2Vzc29yKCksIGZyb21TdGF0aWMuZ2V0KCJwcm9jZXNzb3IiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuc2l6ZSgpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoImFyZ3MiKSkuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImdyZW1saW4iKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgiZ3JlbWxpbiIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldEFyZ3MoKS5nZXQoImxhbmd1YWdlIiksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJhcmdzIikpLmdldCgiYmluZGluZ3MiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJhbGlhc2VkIiksICgoTWFwKSBmcm9tU3RhdGljLmdldCgiYXJncyIpKS5nZXQoImFsaWFzZWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCByZWN5Y2xlZC5nZXQoInJlcXVlc3RJZCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldE9wKCksIHJlY3ljbGVkLmdldCgib3AiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRQcm9jZXNzb3IoKSwgcmVjeWNsZWQuZ2V0KCJwcm9jZXNzb3IiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuc2l6ZSgpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRBcmdzKCkuZ2V0KCJncmVtbGluIiksICgoTWFwKSByZWN5Y2xlZC5nZXQoImFyZ3MiKSkuZ2V0KCJncmVtbGluIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgibGFuZ3VhZ2UiKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5nZXQoImxhbmd1YWdlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYmluZGluZ3MiKSwgKChNYXApIHJlY3ljbGVkLmdldCgiYXJncyIpKS5nZXQoImJpbmRpbmdzIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0QXJncygpLmdldCgiYWxpYXNlZCIpLCAoKE1hcCkgcmVjeWNsZWQuZ2V0KCJhcmdzIikpLmdldCgiYWxpYXNlZCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVN0YW5kYXJkUmVzdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAic3RhbmRhcmRyZXN1bHQiOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNvdXJjZSA9IGZpbmRNb2RlbEVudHJ5T2JqZWN0KHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIGJ5dGVbXSBieXRlcyA9IHdyaXRlKHJlc291cmNlLCBSZXNwb25zZU1lc3NhZ2UuY2xhc3MsIHJlc291cmNlTmFtZSk7Ci0gICAgICAgIGZpbmFsIEhhc2hNYXAgZnJvbVN0YXRpYyA9IHJlYWQocmVhZEZyb21SZXNvdXJjZShyZXNvdXJjZU5hbWUpLCBIYXNoTWFwLmNsYXNzKTsKLSAgICAgICAgZmluYWwgSGFzaE1hcCByZWN5Y2xlZCA9IHJlYWQoYnl0ZXMsIEhhc2hNYXAuY2xhc3MpOwotICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGZyb21TdGF0aWMuZ2V0KCJyZXF1ZXN0SWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJzdGF0dXMiKSkuZ2V0KCJjb2RlIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoInN0YXR1cyIpKS5nZXQoIm1lc3NhZ2UiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCksICgoTWFwKSBmcm9tU3RhdGljLmdldCgic3RhdHVzIikpLmdldCgiYXR0cmlidXRlcyIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmdldFJlc3VsdCgpLmdldE1ldGEoKSwgKChNYXApIGZyb21TdGF0aWMuZ2V0KCJyZXN1bHQiKSkuZ2V0KCJtZXRhIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoKChMaXN0KSByZXNvdXJjZS5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLnNpemUoKSwgKChMaXN0KSAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoInJlc3VsdCIpKS5nZXQoImRhdGEiKSkuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVZlcnRleCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInZlcnRleCI7CisgICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidHJhdmVyc2FsLXZlcnRleCI7CiAKICAgICAgICAgZmluYWwgVmVydGV4IHJlc291cmNlID0gZmluZE1vZGVsRW50cnlPYmplY3QocmVzb3VyY2VOYW1lKTsKICAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gd3JpdGUocmVzb3VyY2UsIFZlcnRleC5jbGFzcywgcmVzb3VyY2VOYW1lKTsKQEAgLTMzMywxMCArMTQ5LDEwIEBACiAgICAgICAgIGZpbmFsIEhhc2hNYXAgcmVjeWNsZWQgPSByZWFkKGJ5dGVzLCBIYXNoTWFwLmNsYXNzKTsKICAgICAgICAgYXNzZXJ0Tm90U2FtZShmcm9tU3RhdGljLCByZWN5Y2xlZCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5pZCgpLCBmcm9tU3RhdGljLmdldCgiaWQiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5sYWJlbCgpLCBmcm9tU3RhdGljLmdldCgibGFiZWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlc291cmNlLmxhYmVsKCkpLCBmcm9tU3RhdGljLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5pZCgpLCBmcm9tU3RhdGljLmdldCgiaWQiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5pZCgpLCByZWN5Y2xlZC5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2UubGFiZWwoKSwgcmVjeWNsZWQuZ2V0KCJsYWJlbCIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QocmVzb3VyY2UubGFiZWwoKSksIHJlY3ljbGVkLmdldCgibGFiZWwiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5pZCgpLCByZWN5Y2xlZC5nZXQoImlkIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoSXRlcmF0b3JVdGlscy5jb3VudChyZXNvdXJjZS5rZXlzKCkpLCAoKE1hcCkgZnJvbVN0YXRpYy5nZXQoInByb3BlcnRpZXMiKSkuc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLnZhbHVlKCJuYW1lIiksICgoTWFwKSAoKExpc3QpICgoTWFwKSBmcm9tU3RhdGljLmdldCgicHJvcGVydGllcyIpKS5nZXQoIm5hbWUiKSkuZ2V0KDApKS5nZXQoInZhbHVlIikpOwpAQCAtMzcxLDcgKzE4Nyw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZVZlcnRleFByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXNvdXJjZU5hbWUgPSAidmVydGV4cHJvcGVydHkiOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lID0gInRyYXZlcnNhbC12ZXJ0ZXhwcm9wZXJ0eSI7CiAKICAgICAgICAgZmluYWwgVmVydGV4UHJvcGVydHkgcmVzb3VyY2UgPSBmaW5kTW9kZWxFbnRyeU9iamVjdChyZXNvdXJjZU5hbWUpOwogICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSB3cml0ZShyZXNvdXJjZSwgVmVydGV4UHJvcGVydHkuY2xhc3MsIHJlc291cmNlTmFtZSk7CkBAIC0zODAsMTEgKzE5NiwxMSBAQAogICAgICAgICBhc3NlcnROb3RTYW1lKGZyb21TdGF0aWMsIHJlY3ljbGVkKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGZyb21TdGF0aWMuc2l6ZSgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLmlkKCkudG9TdHJpbmcoKSwgZnJvbVN0YXRpYy5nZXQoImlkIikudG9TdHJpbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5rZXkoKSwgZnJvbVN0YXRpYy5nZXQoImxhYmVsIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChyZXNvdXJjZS5rZXkoKSksIGZyb21TdGF0aWMuZ2V0KCJsYWJlbCIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLnZhbHVlKCksIGZyb21TdGF0aWMuZ2V0KCJ2YWx1ZSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHJlY3ljbGVkLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhyZXNvdXJjZS5pZCgpLnRvU3RyaW5nKCksIGZyb21TdGF0aWMuZ2V0KCJpZCIpLnRvU3RyaW5nKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVzb3VyY2Uua2V5KCksIHJlY3ljbGVkLmdldCgibGFiZWwiKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlc291cmNlLmtleSgpKSwgcmVjeWNsZWQuZ2V0KCJsYWJlbCIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc291cmNlLnZhbHVlKCksIHJlY3ljbGVkLmdldCgidmFsdWUiKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vTW9kZWwuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL01vZGVsLmphdmEKaW5kZXggN2E4MTY3OC4uZGNlYzY2OCAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vTW9kZWwuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9Nb2RlbC5qYXZhCkBAIC0yMCw0OCArMjAsMjggQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5CYXNlQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuT3BlcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcmRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QaWNrOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUG9wOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2Fja0Z1bmN0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlNjb3BlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVGV4dFA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuQnVsa1NldDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbE1ldHJpY3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLk11dGFibGVNZXRyaWNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5UcmF2ZXJzYWxNZXRyaWNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkNvbHVtbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5FbXB0eVBhdGg7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC50cmF2ZXJzZXIudXRpbC5FbXB0eVRyYXZlcnNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkUHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5kZXRhY2hlZC5EZXRhY2hlZFZlcnRleFByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwogCi1pbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwogaW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKIGltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKLWltcG9ydCBqYXZhLnRpbWUuTG9jYWxEYXRlOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGVUaW1lOwotaW1wb3J0IGphdmEudGltZS5Mb2NhbFRpbWU7Ci1pbXBvcnQgamF2YS50aW1lLk1vbnRoRGF5OwogaW1wb3J0IGphdmEudGltZS5PZmZzZXREYXRlVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuT2Zmc2V0VGltZTsKLWltcG9ydCBqYXZhLnRpbWUuUGVyaW9kOwotaW1wb3J0IGphdmEudGltZS5ZZWFyOwotaW1wb3J0IGphdmEudGltZS5ZZWFyTW9udGg7Ci1pbXBvcnQgamF2YS50aW1lLlpvbmVJZDsKIGltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZWREYXRlVGltZTsKK2ltcG9ydCBqYXZhLnRpbWUudGVtcG9yYWwuQ2hyb25vVW5pdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CkBAIC03NCwxMCArNTQsMTEgQEAKIGltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIGltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7CiBpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZGV0YWNoZWQuRGV0YWNoZWRGYWN0b3J5LmRldGFjaDsKKwogLyoqCiAgKiBEZWZpbmVzIHRoZSBzdXBwb3J0ZWQgdHlwZXMgZm9yIElPIGFuZCB0aGUgdmVyc2lvbnMgKGFuZCBjb25maWd1cmF0aW9ucykgdG8gd2hpY2ggdGhleSBhcHBseSBhbmQgYXJlIHRlc3RlZC4KICAqCkBAIC05NywxNzcgKzc4LDExNyBAQAogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7CiAKICAgICAgICAgLy8gSU1QT1JUQU5UIC0gdGhlICJ0aXRsZSIgb3IgbmFtZSBvZiB0aGUgRW50cnkgbmVlZHMgdG8gYmUgdW5pcXVlCisgICAgICAgIGFkZENvcmVFbnRyeShEb3VibGUuTUFYX1ZBTFVFLCAibWF4LWRvdWJsZSIpOworICAgICAgICBhZGRDb3JlRW50cnkoRG91YmxlLk1JTl9WQUxVRSwgIm1pbi1kb3VibGUiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KC1Eb3VibGUuTUFYX1ZBTFVFLCAibmVnLW1heC1kb3VibGUiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KC1Eb3VibGUuTUlOX1ZBTFVFLCAibmVnLW1pbi1kb3VibGUiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KERvdWJsZS5OYU4sICJuYW4tZG91YmxlIik7CisgICAgICAgIGFkZENvcmVFbnRyeShEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFksICJwb3MtaW5mLWRvdWJsZSIpOworICAgICAgICBhZGRDb3JlRW50cnkoRG91YmxlLk5FR0FUSVZFX0lORklOSVRZLCAibmVnLWluZi1kb3VibGUiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KC0wLjAsICJuZWctemVyby1kb3VibGUiKTsKIAotICAgICAgICBhZGRDb3JlRW50cnkoRmlsZS5jbGFzcywgIkNsYXNzIiwgIiIpOwotICAgICAgICBhZGRDb3JlRW50cnkobmV3IERhdGUoMTQ4MTc1MDA3NjI5NUwpLCAiRGF0ZSIpOwotICAgICAgICBhZGRDb3JlRW50cnkoMTAwLjAwZCwgIkRvdWJsZSIpOwotICAgICAgICBhZGRDb3JlRW50cnkoMTAwLjAwZiwgIkZsb2F0IiwgIiIpOwotICAgICAgICBhZGRDb3JlRW50cnkoMTAwLCAiSW50ZWdlciIpOwotICAgICAgICBhZGRDb3JlRW50cnkoQXJyYXlzLmFzTGlzdCgxLCJwZXJzb24iLCB0cnVlKSwgIkxpc3QiLCAiTGlzdCBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IGNvbGxlY3Rpb24gdHlwZXMgYXMgSlNPTiBpcyBub3QgZXhwbGljaXQgZW5vdWdoIGZvciBhbGwgb2YgR3JlbWxpbidzIHJlcXVpcmVtZW50cy4iKTsKLSAgICAgICAgYWRkQ29yZUVudHJ5KDEwMEwsICJMb25nIiwgIiIpOworICAgICAgICBhZGRDb3JlRW50cnkoRmxvYXQuTUFYX1ZBTFVFLCAibWF4LWZsb2F0Iik7CisgICAgICAgIGFkZENvcmVFbnRyeShGbG9hdC5NSU5fVkFMVUUsICJtaW4tZmxvYXQiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KC1GbG9hdC5NQVhfVkFMVUUsICJuZWctbWF4LWZsb2F0Iik7CisgICAgICAgIGFkZENvcmVFbnRyeSgtRmxvYXQuTUlOX1ZBTFVFLCAibmVnLW1pbi1mbG9hdCIpOworICAgICAgICBhZGRDb3JlRW50cnkoRmxvYXQuTmFOLCAibmFuLWZsb2F0Iik7CisgICAgICAgIGFkZENvcmVFbnRyeShGbG9hdC5QT1NJVElWRV9JTkZJTklUWSwgInBvcy1pbmYtZmxvYXQiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KEZsb2F0Lk5FR0FUSVZFX0lORklOSVRZLCAibmVnLWluZi1mbG9hdCIpOworICAgICAgICBhZGRDb3JlRW50cnkoLTAuMGYsICJuZWctemVyby1mbG9hdCIpOworCisgICAgICAgIGFkZENvcmVFbnRyeShJbnRlZ2VyLk1BWF9WQUxVRSwgIm1heC1pbnQiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KEludGVnZXIuTUlOX1ZBTFVFLCAibWluLWludCIpOworCisgICAgICAgIGFkZENvcmVFbnRyeShMb25nLk1BWF9WQUxVRSwgIm1heC1sb25nIik7CisgICAgICAgIGFkZENvcmVFbnRyeShMb25nLk1JTl9WQUxVRSwgIm1pbi1sb25nIik7CisKKyAgICAgICAgYWRkQ29yZUVudHJ5KEFycmF5cy5hc0xpc3QoMSwgInBlcnNvbiIsIHRydWUsIG51bGwpLCAidmFyLXR5cGUtbGlzdCIsICJMaXN0IGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgY29sbGVjdGlvbiB0eXBlcyBhcyBKU09OIGlzIG5vdCBleHBsaWNpdCBlbm91Z2ggZm9yIGFsbCBvZiBHcmVtbGluJ3MgcmVxdWlyZW1lbnRzLiIpOworICAgICAgICBhZGRDb3JlRW50cnkoQ29sbGVjdGlvbnMuRU1QVFlfTElTVCwgImVtcHR5LWxpc3QiKTsKIAogICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICBtYXAucHV0KCJ0ZXN0IiwgMTIzKTsKLSAgICAgICAgbWFwLnB1dChuZXcgRGF0ZSgxNDgxNzUwMDc2Mjk1TCksICJyZWQiKTsKLSAgICAgICAgbWFwLnB1dChBcnJheXMuYXNMaXN0KDEsMiwzKSwgbmV3IERhdGUoMTQ4MTc1MDA3NjI5NUwpKTsKLSAgICAgICAgYWRkQ29yZUVudHJ5KG1hcCwgIk1hcCIsICJNYXAgaXMgcmVkZWZpbmVkIHNvIHRoYXQgdG8gcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBhbGxvdyBmb3Igbm9uLVN0cmluZyBrZXlzLCB3aGljaCBpcyBub3QgcG9zc2libGUgaW4gSlNPTi4iKTsKKyAgICAgICAgbWFwLnB1dChPZmZzZXREYXRlVGltZS5vZkluc3RhbnQoSW5zdGFudC5vZkVwb2NoTWlsbGkoMTQ4MTI5NUwpLCBab25lT2Zmc2V0LlVUQyksICJyZWQiKTsKKyAgICAgICAgbWFwLnB1dChBcnJheXMuYXNMaXN0KDEsMiwzKSwgT2Zmc2V0RGF0ZVRpbWUub2ZJbnN0YW50KEluc3RhbnQub2ZFcG9jaE1pbGxpKDE0ODEyOTVMKSwgWm9uZU9mZnNldC5VVEMpKTsKKyAgICAgICAgbWFwLnB1dChudWxsLCBudWxsKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KG1hcCwgInZhci10eXBlLW1hcCIsICJNYXAgaXMgcmVkZWZpbmVkIHNvIHRoYXQgdG8gcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBhbGxvdyBmb3Igbm9uLVN0cmluZyBrZXlzLCB3aGljaCBpcyBub3QgcG9zc2libGUgaW4gSlNPTi4iKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KENvbGxlY3Rpb25zLkVNUFRZX01BUCwgImVtcHR5LW1hcCIpOwogCi0gICAgICAgIGFkZENvcmVFbnRyeShuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoMSwicGVyc29uIiwgdHJ1ZSkpLCAiU2V0IiwgIkFsbG93cyBhIEpTT04gY29sbGVjdGlvbiB0byBiZWhhdmUgYXMgYSBTZXQuIik7Ci0gICAgICAgIGFkZENvcmVFbnRyeShuZXcgamF2YS5zcWwuVGltZXN0YW1wKDE0ODE3NTAwNzYyOTVMKSwgIlRpbWVzdGFtcCIsICIiKTsKLSAgICAgICAgYWRkQ29yZUVudHJ5KFVVSUQuZnJvbVN0cmluZygiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IiksICJVVUlEIik7CisgICAgICAgIGFkZENvcmVFbnRyeShuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoMiwgInBlcnNvbiIsIHRydWUsIG51bGwpKSwgInZhci10eXBlLXNldCIsICJBbGxvd3MgYSBKU09OIGNvbGxlY3Rpb24gdG8gYmVoYXZlIGFzIGEgU2V0LiIpOworICAgICAgICBhZGRDb3JlRW50cnkoQ29sbGVjdGlvbnMuRU1QVFlfU0VULCAiZW1wdHktc2V0Iik7CiAKLSAgICAgICAgYWRkR3JhcGhTdHJ1Y3R1cmVFbnRyeShJdGVyYXRvclV0aWxzLmxpc3QoZ3JhcGguZWRnZXMoKSkuc3RyZWFtKCkKLSAgICAgICAgICAgICAgICAuc29ydGVkKChlMSwgZTIpIC0+IEludGVnZXIuY29tcGFyZSgoSW50ZWdlcillMS5pZCgpLCAoSW50ZWdlcillMi5pZCgpKSkKLSAgICAgICAgICAgICAgICAuaXRlcmF0b3IoKS5uZXh0KCksICJFZGdlIiwgIiIpOwotICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGcuVigpLm9yZGVyKCkuYnkoVC5pZCkub3V0KCkub3V0KCkucGF0aCgpLm5leHQoKSwgIlBhdGgiLCAiIik7Ci0gICAgICAgIGFkZEdyYXBoU3RydWN0dXJlRW50cnkoSXRlcmF0b3JVdGlscy5saXN0KEl0ZXJhdG9yVXRpbHMubGlzdChncmFwaC5lZGdlcygpKS5zdHJlYW0oKQotICAgICAgICAgICAgICAgIC5zb3J0ZWQoKGUxLCBlMikgLT4gSW50ZWdlci5jb21wYXJlKChJbnRlZ2VyKWUxLmlkKCksIChJbnRlZ2VyKWUyLmlkKCkpKQotICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpLm5leHQoKS5wcm9wZXJ0aWVzKCkpLnN0cmVhbSgpCi0gICAgICAgICAgICAgICAgLnNvcnRlZCgocDEsIHAyKSAtPiBwMS5rZXkoKS5jb21wYXJlVG8ocDIua2V5KCkpKQotICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpLm5leHQoKSwgIlByb3BlcnR5IiwgIiIpOwotICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGdyYXBoLCAiVGlua2VyR3JhcGgiLCAiYFRpbmtlckdyYXBoYCBoYXMgYSBjdXN0b20gc2VyaWFsaXplciB0aGF0IGlzIHJlZ2lzdGVyZWQgYXMgcGFydCBvZiB0aGUgYFRpbmtlcklvUmVnaXN0cnlgLiIpOwotICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KEl0ZXJhdG9yVXRpbHMubGlzdChncmFwaC52ZXJ0aWNlcygpKS5zdHJlYW0oKQotICAgICAgICAgICAgICAgIC5zb3J0ZWQoKHYxLCB2MikgLT4gSW50ZWdlci5jb21wYXJlKChJbnRlZ2VyKXYxLmlkKCksIChJbnRlZ2VyKXYyLmlkKCkpKQotICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpLm5leHQoKSwgIlZlcnRleCIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhTdHJ1Y3R1cmVFbnRyeShJdGVyYXRvclV0aWxzLmxpc3QoSXRlcmF0b3JVdGlscy5saXN0KGdyYXBoLnZlcnRpY2VzKCkpLnN0cmVhbSgpCi0gICAgICAgICAgICAgICAgLnNvcnRlZCgodjEsIHYyKSAtPiBJbnRlZ2VyLmNvbXBhcmUoKEludGVnZXIpdjEuaWQoKSwgKEludGVnZXIpdjIuaWQoKSkpCi0gICAgICAgICAgICAgICAgLml0ZXJhdG9yKCkubmV4dCgpLnByb3BlcnRpZXMoKSkuc3RyZWFtKCkKLSAgICAgICAgICAgICAgICAuc29ydGVkKChwMSwgcDIpIC0+IExvbmcuY29tcGFyZSgoTG9uZylwMS5pZCgpLCAoTG9uZylwMi5pZCgpKSkKLSAgICAgICAgICAgICAgICAuaXRlcmF0b3IoKS5uZXh0KCksICJWZXJ0ZXhQcm9wZXJ0eSIsICIiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KFVVSUQuZnJvbVN0cmluZygiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IiksICJzcGVjaWZpZWQtdXVpZCIpOworICAgICAgICBhZGRDb3JlRW50cnkobmV3IFVVSUQoMCwgMCksICJuaWwtdXVpZCIpOwogCi0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KFNhY2tGdW5jdGlvbnMuQmFycmllci5ub3JtU2FjaywgIkJhcnJpZXIiLCAiIik7Ci0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KG5ldyBCeXRlY29kZS5CaW5kaW5nKCJ4IiwgMSksICJCaW5kaW5nIiwgIkEgXCJCaW5kaW5nXCIgcmVmZXJzIHRvIGEgYEJ5dGVjb2RlLkJpbmRpbmdgLiIpOworICAgICAgICBhZGRDb3JlRW50cnkoRGlyZWN0aW9uLk9VVCwgIm91dC1kaXJlY3Rpb24iLCAiIik7CisgICAgICAgIGFkZENvcmVFbnRyeShULmlkLCAiaWQtdCIsICIiKTsKKworICAgICAgICBhZGRDb3JlRW50cnkoJ2EnLCAic2luZ2xlLWJ5dGUtY2hhciIsICIiKTsKKyAgICAgICAgYWRkQ29yZUVudHJ5KCdcdTAzQTknLCAibXVsdGktYnl0ZS1jaGFyIiwgIiIpOworCisgICAgICAgIGFkZEVudHJ5KCJDb3JlIiwgKCkgLT4gbnVsbCwgInVuc3BlY2lmaWVkLW51bGwiLCAiIik7CisKKyAgICAgICAgYWRkQ29yZUVudHJ5KHRydWUsICJ0cnVlLWJvb2xlYW4iLCAiIik7CisgICAgICAgIGFkZENvcmVFbnRyeShmYWxzZSwgImZhbHNlLWJvb2xlYW4iLCAiIik7CisKKyAgICAgICAgYWRkQ29yZUVudHJ5KCJhYmMiLCAic2luZ2xlLWJ5dGUtc3RyaW5nIiwgIiIpOworICAgICAgICBhZGRDb3JlRW50cnkoImFiY1x1MDM5MVx1MDM5Mlx1MDM5MyIsICJtaXhlZC1zdHJpbmciLCAiIik7CisKKyAgICAgICAgYWRkQ29yZUVudHJ5KGcuVigxMCkub3V0KCkudHJlZSgpLm5leHQoKSwgInRyYXZlcnNhbC10cmVlIiwgIiIpOworCisgICAgICAgIGFkZEdyYXBoU3RydWN0dXJlRW50cnkoZ3JhcGguZWRnZXMoKS5uZXh0KCksICJ0cmF2ZXJzYWwtZWRnZSIsICIiKTsKKyAgICAgICAgYWRkR3JhcGhTdHJ1Y3R1cmVFbnRyeShEZXRhY2hlZEZhY3RvcnkuZGV0YWNoKGdyYXBoLmVkZ2VzKCkubmV4dCgpLCBmYWxzZSksICJuby1wcm9wLWVkZ2UiLCAiIik7CisKKyAgICAgICAgYWRkR3JhcGhTdHJ1Y3R1cmVFbnRyeShkZXRhY2goZy5WKCkub3V0KCkub3V0KCkucGF0aCgpLm5leHQoKSwgZmFsc2UpLCAidHJhdmVyc2FsLXBhdGgiLCAiIik7CisgICAgICAgIGFkZEdyYXBoU3RydWN0dXJlRW50cnkoRW1wdHlQYXRoLmluc3RhbmNlKCksICJlbXB0eS1wYXRoIiwgIiIpOworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGRldGFjaChnLlYoKS5vdXQoKS5vdXQoKS5wYXRoKCkubmV4dCgpLCB0cnVlKSwgInByb3AtcGF0aCIsICIiKTsKKworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGdyYXBoLmVkZ2VzKCkubmV4dCgpLnByb3BlcnRpZXMoKS5uZXh0KCksICJlZGdlLXByb3BlcnR5IiwgIiIpOworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KG5ldyBEZXRhY2hlZFByb3BlcnR5PD4oIiIsIG51bGwpLCAibnVsbC1wcm9wZXJ0eSIsICIiKTsKKworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGdyYXBoLCAidGlua2VyLWdyYXBoIiwgImBUaW5rZXJHcmFwaGAgaGFzIGEgY3VzdG9tIHNlcmlhbGl6ZXIgdGhhdCBpcyByZWdpc3RlcmVkIGFzIHBhcnQgb2YgdGhlIGBUaW5rZXJJb1JlZ2lzdHJ5YC4iKTsKKworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGdyYXBoLnZlcnRpY2VzKCkubmV4dCgpLCAidHJhdmVyc2FsLXZlcnRleCIsICIiKTsKKyAgICAgICAgYWRkR3JhcGhTdHJ1Y3R1cmVFbnRyeShEZXRhY2hlZEZhY3RvcnkuZGV0YWNoKGdyYXBoLnZlcnRpY2VzKCkubmV4dCgpLCBmYWxzZSksICJuby1wcm9wLXZlcnRleCIsICIiKTsKKworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KGdyYXBoLnZlcnRpY2VzKCkubmV4dCgpLnByb3BlcnRpZXMoKS5uZXh0KCksICJ0cmF2ZXJzYWwtdmVydGV4cHJvcGVydHkiLCAiIik7CisgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBtZXRhUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbWV0YVByb3BlcnRpZXMucHV0KCJhIiwgImIiKTsKKyAgICAgICAgYWRkR3JhcGhTdHJ1Y3R1cmVFbnRyeShuZXcgRGV0YWNoZWRWZXJ0ZXhQcm9wZXJ0eTw+KDEsICJwZXJzb24iLCAic3RlcGhlbiIsIG1ldGFQcm9wZXJ0aWVzKSwgIm1ldGEtdmVydGV4cHJvcGVydHkiLCAiIik7CisgICAgICAgIGZpbmFsIFNldDxPYmplY3Q+IHNldFByb3BlcnR5ID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICBzZXRQcm9wZXJ0eS5hZGQoInN0ZXBoZW4iKTsKKyAgICAgICAgc2V0UHJvcGVydHkuYWRkKCJtYXJrbyIpOworICAgICAgICBhZGRHcmFwaFN0cnVjdHVyZUVudHJ5KG5ldyBEZXRhY2hlZFZlcnRleFByb3BlcnR5PD4oMSwgInBlcnNvbiIsIHNldFByb3BlcnR5LCBtZXRhUHJvcGVydGllcyksICJzZXQtY2FyZGluYWxpdHktdmVydGV4cHJvcGVydHkiLCAiIik7CiAKICAgICAgICAgZmluYWwgQnVsa1NldDxTdHJpbmc+IGJ1bGtTZXQgPSBuZXcgQnVsa1NldDw+KCk7CiAgICAgICAgIGJ1bGtTZXQuYWRkKCJtYXJrbyIsIDEpOwogICAgICAgICBidWxrU2V0LmFkZCgiam9zaCIsIDIpOwotICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShidWxrU2V0LCAiQnVsa1NldCIsICIiKTsKKyAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoYnVsa1NldCwgInZhci1idWxrbGlzdCIsICIiKTsKKyAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkobmV3IEJ1bGtTZXQoKSwgImVtcHR5LWJ1bGtsaXN0IiwgIiIpOwogCi0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vdXQoKS5pbigpLnRyZWUoKS5hc0FkbWluKCkuZ2V0Qnl0ZWNvZGUoKSwgIkJ5dGVjb2RlIiwgIlRoZSBmb2xsb3dpbmcgYEJ5dGVjb2RlYCBleGFtcGxlIHJlcHJlc2VudHMgdGhlIHRyYXZlcnNhbCBvZiBgZy5WKCkuaGFzTGFiZWwoJ3BlcnNvbicpLm91dCgpLmluKCkudHJlZSgpYC4gT2J2aW91c2x5IHRoZSBzZXJpYWxpemVkIGBCeXRlY29kZWAgd291ZGwgYmUgcXVpdGUgZGlmZmVyZW50IGZvciB0aGUgZW5kbGVzcyB2YXJpYXRpb25zIG9mIGNvbW1hbmRzIHRoYXQgY291bGQgYmUgdXNlZCB0b2dldGhlciBpbiB0aGUgR3JlbWxpbiBsYW5ndWFnZS4iKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkubGlzdCwgIkNhcmRpbmFsaXR5IiwgIiIpOwotICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShDb2x1bW4ua2V5cywgIkNvbHVtbiIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoRGlyZWN0aW9uLk9VVCwgIkRpcmVjdGlvbiIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoT3BlcmF0b3Iuc3VtLCAiT3BlcmF0b3IiLCAiIik7Ci0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KE9yZGVyLnNodWZmbGUsICJPcmRlciIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoUGljay5hbnksICJQaWNrIiwgIiIpOwotICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShQb3AuYWxsLCAiUG9wIiwgIiIpOwotICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuZnVuY3Rpb24uTGFtYmRhLmZ1bmN0aW9uKCJ7IGl0LmdldCgpIH0iKSwgIkxhbWJkYSIsICIiKTsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsTWV0cmljcyB0bSA9IGNyZWF0ZVN0YXRpY1RyYXZlcnNhbE1ldHJpY3MoKTsKLSAgICAgICAgZmluYWwgTXV0YWJsZU1ldHJpY3MgbWV0cmljcyA9IG5ldyBNdXRhYmxlTWV0cmljcyh0bS5nZXRNZXRyaWNzKCI3LjAuMCgpIikpOwotICAgICAgICBtZXRyaWNzLmFkZE5lc3RlZChuZXcgTXV0YWJsZU1ldHJpY3ModG0uZ2V0TWV0cmljcygiMy4wLjAoKSIpKSk7Ci0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KG1ldHJpY3MsICJNZXRyaWNzIiwgIiIpOwotICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShQLmd0KDApLCAiUCIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoUC53aXRoaW4oMSksICJQIHdpdGhpbiIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoUC53aXRob3V0KDEsMiksICJQIHdpdGhvdXQiLCAiIik7Ci0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KFAuZ3QoMCkuYW5kKFAubHQoMTApKSwgIlAgYW5kIiwgIiIpOwotICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShQLmd0KDApLm9yKFAud2l0aGluKC0xLCAtMTAsIC0xMDApKSwgIlAgb3IiLCAiIik7Ci0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KFNjb3BlLmxvY2FsLCAiU2NvcGUiLCAiIik7Ci0gICAgICAgIGFkZEdyYXBoUHJvY2Vzc0VudHJ5KFQubGFiZWwsICJUIiwgIiIpOwotICAgICAgICAvLyBUZXh0UCB3YXMgb25seSBhZGRlZCBhdCAzLjQuMCBhbmQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHVudHlwZWQgR3JhcGhTT04gb2YgYW55IHNvcnQKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoVGV4dFAuY29udGFpbmluZygiYXJrIiksICJUZXh0UCIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoY3JlYXRlU3RhdGljVHJhdmVyc2FsTWV0cmljcygpLCAiVHJhdmVyc2FsTWV0cmljcyIsICIiKTsKLSAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm9yZGVyKCkuYnkoVC5pZCkuYXNBZG1pbigpLm5leHRUcmF2ZXJzZXIoKSwgIlRyYXZlcnNlciIsICIiKTsKKyAgICAgICAgYWRkR3JhcGhQcm9jZXNzRW50cnkoZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLmFzQWRtaW4oKS5uZXh0VHJhdmVyc2VyKCksICJ2ZXJ0ZXgtdHJhdmVyc2VyIiwgIiIpOworICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShnLlYoKS5ib3RoKCkuYmFycmllcigpLmFzQWRtaW4oKS5uZXh0VHJhdmVyc2VyKCksICJidWxrZWQtdHJhdmVyc2VyIiwgIiIpOworICAgICAgICBhZGRHcmFwaFByb2Nlc3NFbnRyeShFbXB0eVRyYXZlcnNlci5pbnN0YW5jZSgpLCAiZW1wdHktdHJhdmVyc2VyIiwgIiIpOwogCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiByZXF1ZXN0QmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3RCaW5kaW5ncy5wdXQoIngiLCAxKTsKKyAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShuZXcgQmlnRGVjaW1hbCgiMTIzLjQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSIpLCAicG9zLWJpZ2RlY2ltYWwiLCAiIik7CisgICAgICAgIGFkZEV4dGVuZGVkRW50cnkobmV3IEJpZ0RlY2ltYWwoIi0xMjMuNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIiksICJuZWctYmlnZGVjaW1hbCIsICIiKTsKIAotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gcmVxdWVzdEFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3RBbGlhc2VzLnB1dCgiZyIsICJzb2NpYWwiKTsKKyAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShuZXcgQmlnSW50ZWdlcigiMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxIiksICJwb3MtYmlnaW50ZWdlciIsICIiKTsKKyAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShuZXcgQmlnSW50ZWdlcigiLTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMSIpLCAibmVnLWJpZ2ludGVnZXIiLCAiIik7CiAKLSAgICAgICAgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2U7Ci0gICAgICAgIHJlcXVlc3RNZXNzYWdlID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImF1dGhlbnRpY2F0aW9uIikuCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVSZXF1ZXN0SWQoVVVJRC5mcm9tU3RyaW5nKCJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciKSkuCi0gICAgICAgICAgICAgICAgYWRkKCJzYXNsTWVjaGFuaXNtIiwgIlBMQUlOIiwgInNhc2wiLCAiQUhOMFpYQm9jR2hsYmdCd1lYTnpkMjl5WkE9PSIpLmNyZWF0ZSgpOwotICAgICAgICBhZGRSZXF1ZXN0TWVzc2FnZUVudHJ5KHJlcXVlc3RNZXNzYWdlLCAiQXV0aGVudGljYXRpb24gUmVzcG9uc2UiLCAiVGhlIGZvbGxvd2luZyBgUmVxdWVzdE1lc3NhZ2VgIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHJlc3BvbnNlIHRoYXQgc2hvdWxkIGJlIG1hZGUgdG8gYSBTQVNMLWJhc2VkIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4iKTsKLSAgICAgICAgcmVxdWVzdE1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZXZhbCIpLnByb2Nlc3Nvcigic2Vzc2lvbiIpLgotICAgICAgICAgICAgICAgIG92ZXJyaWRlUmVxdWVzdElkKFVVSUQuZnJvbVN0cmluZygiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IikpLgotICAgICAgICAgICAgICAgIGFkZCgiZ3JlbWxpbiIsICJnLlYoeCkiLCAiYmluZGluZ3MiLCByZXF1ZXN0QmluZGluZ3MsICJsYW5ndWFnZSIsICJncmVtbGluLWdyb292eSIsICJzZXNzaW9uIiwgInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiKS5jcmVhdGUoKTsKLSAgICAgICAgYWRkUmVxdWVzdE1lc3NhZ2VFbnRyeShyZXF1ZXN0TWVzc2FnZSwgIlNlc3Npb24gRXZhbCIsICJUaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBzZXNzaW9uIHJlcXVlc3QgZm9yIGEgc2NyaXB0IGV2YWx1YXRpb24gd2l0aCBwYXJhbWV0ZXJzLiIpOwotICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJldmFsIikucHJvY2Vzc29yKCJzZXNzaW9uIikuCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVSZXF1ZXN0SWQoVVVJRC5mcm9tU3RyaW5nKCJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciKSkuCi0gICAgICAgICAgICAgICAgYWRkKCJncmVtbGluIiwgInNvY2lhbC5WKHgpIiwgImJpbmRpbmdzIiwgcmVxdWVzdEJpbmRpbmdzLCAibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1ncm9vdnkiLCAiYWxpYXNlcyIsIHJlcXVlc3RBbGlhc2VzLCAic2Vzc2lvbiIsInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiKS5jcmVhdGUoKTsKLSAgICAgICAgYWRkUmVxdWVzdE1lc3NhZ2VFbnRyeShyZXF1ZXN0TWVzc2FnZSwgIlNlc3Npb24gRXZhbCBBbGlhc2VkIiwgIlRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgc2Vzc2lvbiByZXF1ZXN0IGZvciBhIHNjcmlwdCBldmFsdWF0aW9uIHdpdGggYW4gYWxpYXMgdGhhdCBiaW5kcyB0aGUgYFRyYXZlcnNhbFNvdXJjZWAgb2YgXCJnXCIgdG8gXCJzb2NpYWxcIi4iKTsKLSAgICAgICAgcmVxdWVzdE1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiY2xvc2UiKS5wcm9jZXNzb3IoInNlc3Npb24iKS4KLSAgICAgICAgICAgICAgICBvdmVycmlkZVJlcXVlc3RJZChVVUlELmZyb21TdHJpbmcoImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIpKS4KLSAgICAgICAgICAgICAgICBhZGQoInNlc3Npb24iLCAidW5pcXVlLXNlc3Npb24taWRlbnRpZmllciIpLmNyZWF0ZSgpOwotICAgICAgICBhZGRSZXF1ZXN0TWVzc2FnZUVudHJ5KHJlcXVlc3RNZXNzYWdlLCAiU2Vzc2lvbiBDbG9zZSIsICJUaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHJlcXVlc3QgdG8gY2xvc2UgYSBzZXNzaW9uLiIpOwotICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJldmFsIikuCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVSZXF1ZXN0SWQoVVVJRC5mcm9tU3RyaW5nKCJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciKSkuCi0gICAgICAgICAgICAgICAgYWRkKCJncmVtbGluIiwgImcuVih4KSIsICJiaW5kaW5ncyIsIHJlcXVlc3RCaW5kaW5ncywgImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5IikuY3JlYXRlKCk7Ci0gICAgICAgIGFkZFJlcXVlc3RNZXNzYWdlRW50cnkocmVxdWVzdE1lc3NhZ2UsICJTZXNzaW9ubGVzcyBFdmFsIiwgIlRoZSBmb2xsb3dpbmcgYFJlcXVlc3RNZXNzYWdlYCBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIHNlc3Npb25sZXNzIHJlcXVlc3QgZm9yIGEgc2NyaXB0IGV2YWx1YXRpb24gd2l0aCBwYXJhbWV0ZXJzLiIpOwotICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJldmFsIikuCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVSZXF1ZXN0SWQoVVVJRC5mcm9tU3RyaW5nKCJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciKSkuCi0gICAgICAgICAgICAgICAgYWRkKCJncmVtbGluIiwgInNvY2lhbC5WKHgpIiwgImJpbmRpbmdzIiwgcmVxdWVzdEJpbmRpbmdzLCAibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1ncm9vdnkiLCAiYWxpYXNlcyIsIHJlcXVlc3RBbGlhc2VzKS5jcmVhdGUoKTsKLSAgICAgICAgYWRkUmVxdWVzdE1lc3NhZ2VFbnRyeShyZXF1ZXN0TWVzc2FnZSwgIlNlc3Npb25sZXNzIEV2YWwgQWxpYXNlZCIsICJUaGUgZm9sbG93aW5nIGBSZXF1ZXN0TWVzc2FnZWAgaXMgYW4gZXhhbXBsZSBvZiBhIHNlc3Npb25sZXNzIHJlcXVlc3QgZm9yIGEgc2NyaXB0IGV2YWx1YXRpb24gd2l0aCBhbiBhbGlhcyB0aGF0IGJpbmRzIHRoZSBgVHJhdmVyc2FsU291cmNlYCBvZiBcImdcIiB0byBcInNvY2lhbFwiLiIpOworICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KEJ5dGUuTUFYX1ZBTFVFLCAibWF4LWJ5dGUiLCAiIik7CisgICAgICAgIGFkZEV4dGVuZGVkRW50cnkoQnl0ZS5NSU5fVkFMVUUsICJtaW4tYnl0ZSIsICIiKTsKIAotICAgICAgICBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQuZnJvbVN0cmluZygiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikpLgotICAgICAgICAgICAgICAgIGNvZGUob3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlLkFVVEhFTlRJQ0FURSkuY3JlYXRlKCk7Ci0gICAgICAgIGFkZFJlc3BvbnNlTWVzc2FnZUVudHJ5KHJlc3BvbnNlTWVzc2FnZSwgIkF1dGhlbnRpY2F0aW9uIENoYWxsZW5nZSIsICJXaGVuIGF1dGhlbnRpY2F0aW9uIGlzIGVuYWJsZWQsIGFuIGluaXRpYWwgcmVxdWVzdCB0byB0aGUgc2VydmVyIHdpbGwgcmVzdWx0IGluIGFuIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4gVGhlIHR5cGljYWwgcmVzcG9uc2UgbWVzc2FnZSB3aWxsIGFwcGVhciBhcyBmb2xsb3dzLCBidXQgaGFuZGxpbmcgaXQgY291bGQgYmUgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgU0FTTCBpbXBsZW1lbnRhdGlvbiAoZS5nLiBtdWx0aXBsZSBjaGFsbGVuZ2VzIG1heWJlIHJlcXVlc3RlZCBpbiBzb21lIGNhc2VzLCBidXQgbm90IGluIHRoZSBkZWZhdWx0IHByb3ZpZGVkIGJ5IEdyZW1saW4gU2VydmVyKS4iKTsKLSAgICAgICAgcmVzcG9uc2VNZXNzYWdlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQuZnJvbVN0cmluZygiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IikpLgotICAgICAgICAgICAgICAgIGNvZGUob3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpLgotICAgICAgICAgICAgICAgIHJlc3VsdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEl0ZXJhdG9yVXRpbHMubGlzdChncmFwaC52ZXJ0aWNlcygpKS5zdHJlYW0oKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNvcnRlZCgodjEsIHYyKSAtPiBJbnRlZ2VyLmNvbXBhcmUoKEludGVnZXIpdjEuaWQoKSwgKEludGVnZXIpdjIuaWQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAuaXRlcmF0b3IoKS5uZXh0KCkpKS5jcmVhdGUoKTsKLSAgICAgICAgYWRkUmVzcG9uc2VNZXNzYWdlRW50cnkocmVzcG9uc2VNZXNzYWdlLCAiU3RhbmRhcmQgUmVzdWx0IiwgIlRoZSBmb2xsb3dpbmcgYFJlc3BvbnNlTWVzc2FnZWAgaXMgYSB0eXBpY2FsIGV4YW1wbGUgb2YgdGhlIHR5cGljYWwgc3VjY2Vzc2Z1bCByZXNwb25zZSBHcmVtbGluIFNlcnZlciB3aWxsIHJldHVybiB3aGVuIHJldHVybmluZyByZXN1bHRzIGZyb20gYSBzY3JpcHQuIik7Ci0gICAgICAgIAotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KG5ldyBCaWdEZWNpbWFsKG5ldyBCaWdJbnRlZ2VyKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKSksICJCaWdEZWNpbWFsIiwgIiIpOwotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KG5ldyBCaWdJbnRlZ2VyKCIxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEiKSwgIkJpZ0ludGVnZXIiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkobmV3IEJ5dGUoIjEiKSwgIkJ5dGUiLCAiIik7Ci0gICAgICAgIGFkZEVudHJ5KCJFeHRlbmRlZCIsICgpIC0+IGphdmEubmlvLkJ5dGVCdWZmZXIud3JhcCgic29tZSBieXRlcyBmb3IgeW91Ii5nZXRCeXRlcygpKSwgIkJ5dGVCdWZmZXIiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoIngiLmNoYXJBdCgwKSwgIkNoYXIiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoRHVyYXRpb24ub2ZEYXlzKDUpLCAiRHVyYXRpb24iLCJUaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgYSBgRHVyYXRpb25gIG9mIGZpdmUgZGF5cy4iKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFkZEVudHJ5KCJFeHRlbmRlZCIsIEluZXRBZGRyZXNzLmdldEJ5TmFtZSgibG9jYWxob3N0IiksICJJbmV0QWRkcmVzcyIsICIiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShJbnN0YW50LnBhcnNlKCIyMDE2LTEyLTE0VDE2OjM5OjE5LjM0OVoiKSwgIkluc3RhbnQiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoTG9jYWxEYXRlLm9mKDIwMTYsIDEsIDEpLCAiTG9jYWxEYXRlIiwgIiIpOwotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KExvY2FsRGF0ZVRpbWUub2YoMjAxNiwgMSwgMSwgMTIsIDMwKSwgIkxvY2FsRGF0ZVRpbWUiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoTG9jYWxUaW1lLm9mKDEyLCAzMCwgNDUpLCAiTG9jYWxUaW1lIiwgIiIpOwotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KE1vbnRoRGF5Lm9mKDEsIDEpLCAiTW9udGhEYXkiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoT2Zmc2V0RGF0ZVRpbWUucGFyc2UoIjIwMDctMTItMDNUMTA6MTU6MzArMDE6MDAiKSwgIk9mZnNldERhdGVUaW1lIiwgIiIpOwotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KE9mZnNldFRpbWUucGFyc2UoIjEwOjE1OjMwKzAxOjAwIiksICJPZmZzZXRUaW1lIiwgIiIpOwotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KFBlcmlvZC5vZigxLCA2LCAxNSksICJQZXJpb2QiLCAiVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIGEgYFBlcmlvZGAgb2Ygb25lIHllYXIsIHNpeCBtb250aHMgYW5kIGZpZnRlZW4gZGF5cy4iKTsKLSAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShuZXcgU2hvcnQoIjEwMCIpLCAiU2hvcnQiLCAiIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoWWVhci5vZigyMDE2KSwgIlllYXIiLCAiVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIG9mIHRoZSBgWWVhcmAgXCIyMDE2XCIuIik7Ci0gICAgICAgIGFkZEV4dGVuZGVkRW50cnkoWWVhck1vbnRoLm9mKDIwMTYsIDYpLCAiWWVhck1vbnRoIiwgIlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIGBZZWFyTW9udGhgIG9mIFwiSnVuZSAyMDE2XCIiKTsKLSAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShab25lZERhdGVUaW1lLm9mKDIwMTYsIDEyLCAyMywgMTIsIDEyLCAyNCwgMzYsIFpvbmVJZC5vZigiR01UKzIiKSksICJab25lZERhdGVUaW1lIiwgIiIpOwotICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KFpvbmVPZmZzZXQub2ZIb3Vyc01pbnV0ZXNTZWNvbmRzKDMsIDYsIDkpLCAiWm9uZU9mZnNldCIsICJUaGUgZm9sbG93aW5nIGV4YW1wbGUgaXMgYSBgWm9uZU9mZnNldGAgb2YgdGhyZWUgaG91cnMsIHNpeCBtaW51dGVzLCBhbmQgbmluZSBzZWNvbmRzLiIpOwotICAgIH0KKyAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbMF0pLCAiZW1wdHktYmluYXJ5IiwgIiIpOworICAgICAgICBhZGRFbnRyeSgiRXh0ZW5kZWQiLCAoKSAtPiBqYXZhLm5pby5CeXRlQnVmZmVyLndyYXAoInNvbWUgYnl0ZXMgZm9yIHlvdSIuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpLCAic3RyLWJpbmFyeSIsICIiKTsKIAotICAgIHByaXZhdGUgc3RhdGljIERlZmF1bHRUcmF2ZXJzYWxNZXRyaWNzIGNyZWF0ZVN0YXRpY1RyYXZlcnNhbE1ldHJpY3MoKSB7Ci0gICAgICAgIC8vIGJhc2VkIG9uIGcuVigpLmhhc0xhYmVsKCJwZXJzb24iKS5vdXQoKS5vdXQoKS50cmVlKCkucHJvZmlsZSgpLm5leHQoKQotICAgICAgICBmaW5hbCBMaXN0PE11dGFibGVNZXRyaWNzPiB0cmF2ZXJzYWxNdXRhYmxlTWV0cmljcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmaW5hbCBNdXRhYmxlTWV0cmljcyBtNyA9IG5ldyBNdXRhYmxlTWV0cmljcygiNy4wLjAoKSIsICJUaW5rZXJHcmFwaFN0ZXAodmVydGV4LFt+bGFiZWwuZXEocGVyc29uKV0pIik7Ci0gICAgICAgIG03LnNldER1cmF0aW9uKDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgICAgbTcuc2V0Q291bnQoInRyYXZlcnNlckNvdW50IiwgNCk7Ci0gICAgICAgIG03LnNldENvdW50KCJlbGVtZW50Q291bnQiLCA0KTsKLSAgICAgICAgbTcuc2V0QW5ub3RhdGlvbigicGVyY2VudER1ciIsIDI1LjBkKTsKLSAgICAgICAgdHJhdmVyc2FsTXV0YWJsZU1ldHJpY3MuYWRkKG03KTsKKyAgICAgICAgYWRkRXh0ZW5kZWRFbnRyeShEdXJhdGlvbi5aRVJPLCAiemVyby1kdXJhdGlvbiIsIlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhIHplcm8gYER1cmF0aW9uYCIpOworICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KENocm9ub1VuaXQuRk9SRVZFUi5nZXREdXJhdGlvbigpLCAiZm9yZXZlci1kdXJhdGlvbiIsIiIpOwogCi0gICAgICAgIGZpbmFsIE11dGFibGVNZXRyaWNzIG0yID0gbmV3IE11dGFibGVNZXRyaWNzKCIyLjAuMCgpIiwgIlZlcnRleFN0ZXAoT1VULHZlcnRleCkiKTsKLSAgICAgICAgbTIuc2V0RHVyYXRpb24oMTAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgICBtMi5zZXRDb3VudCgidHJhdmVyc2VyQ291bnQiLCAxMyk7Ci0gICAgICAgIG0yLnNldENvdW50KCJlbGVtZW50Q291bnQiLCAxMyk7Ci0gICAgICAgIG0yLnNldEFubm90YXRpb24oInBlcmNlbnREdXIiLCAyNS4wZCk7Ci0gICAgICAgIHRyYXZlcnNhbE11dGFibGVNZXRyaWNzLmFkZChtMik7CisgICAgICAgIGFkZEV4dGVuZGVkRW50cnkoT2Zmc2V0RGF0ZVRpbWUuTUFYLCAibWF4LW9mZnNldGRhdGV0aW1lIiwgIiIpOworICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KE9mZnNldERhdGVUaW1lLk1JTiwgIm1pbi1vZmZzZXRkYXRldGltZSIsICIiKTsKIAotICAgICAgICBmaW5hbCBNdXRhYmxlTWV0cmljcyBtMyA9IG5ldyBNdXRhYmxlTWV0cmljcygiMy4wLjAoKSIsICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIik7Ci0gICAgICAgIG0zLnNldER1cmF0aW9uKDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgICAgbTMuc2V0Q291bnQoInRyYXZlcnNlckNvdW50IiwgNyk7Ci0gICAgICAgIG0zLnNldENvdW50KCJlbGVtZW50Q291bnQiLCA3KTsKLSAgICAgICAgbTMuc2V0QW5ub3RhdGlvbigicGVyY2VudER1ciIsIDI1LjBkKTsKLSAgICAgICAgdHJhdmVyc2FsTXV0YWJsZU1ldHJpY3MuYWRkKG0zKTsKLQotICAgICAgICBmaW5hbCBNdXRhYmxlTWV0cmljcyBtNCA9IG5ldyBNdXRhYmxlTWV0cmljcygiNC4wLjAoKSIsICJUcmVlU3RlcCIpOwotICAgICAgICBtNC5zZXREdXJhdGlvbigxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgICAgIG00LnNldENvdW50KCJ0cmF2ZXJzZXJDb3VudCIsIDEpOwotICAgICAgICBtNC5zZXRDb3VudCgiZWxlbWVudENvdW50IiwgMSk7Ci0gICAgICAgIG00LnNldEFubm90YXRpb24oInBlcmNlbnREdXIiLCAyNS4wZCk7Ci0gICAgICAgIHRyYXZlcnNhbE11dGFibGVNZXRyaWNzLmFkZChtNCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0VHJhdmVyc2FsTWV0cmljcyg0MDAwLCB0cmF2ZXJzYWxNdXRhYmxlTWV0cmljcyk7CisgICAgICAgIGFkZEV4dGVuZGVkRW50cnkoU2hvcnQuTUlOX1ZBTFVFLCAibWluLXNob3J0IiwgIiIpOworICAgICAgICBhZGRFeHRlbmRlZEVudHJ5KFNob3J0Lk1BWF9WQUxVRSwgIm1heC1zaG9ydCIsICIiKTsKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIE1vZGVsIGluc3RhbmNlKCkgewpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvR3JhcGhCaW5hcnlDb21wYXRpYmlsaXR5VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvR3JhcGhCaW5hcnlDb21wYXRpYmlsaXR5VGVzdC5qYXZhCmluZGV4IGIxMmIzZjQuLjA5MmMxYWQgMTAwNjQ0Ci0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L0dyYXBoQmluYXJ5Q29tcGF0aWJpbGl0eVRlc3QuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9HcmFwaEJpbmFyeUNvbXBhdGliaWxpdHlUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhiaW5hcnk7CiAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkFic3RyYWN0VHlwZWRDb21wYXRpYmlsaXR5VGVzdDsKQEAgLTQyLDggKzQxLDggQEAKIHB1YmxpYyBjbGFzcyBHcmFwaEJpbmFyeUNvbXBhdGliaWxpdHlUZXN0IGV4dGVuZHMgQWJzdHJhY3RUeXBlZENvbXBhdGliaWxpdHlUZXN0IHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoQmluYXJ5V3JpdGVyIHdyaXRlclYxID0gbmV3IEdyYXBoQmluYXJ5V3JpdGVyKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgR3JhcGhCaW5hcnlSZWFkZXIgcmVhZGVyVjEgPSBuZXcgR3JhcGhCaW5hcnlSZWFkZXIoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHcmFwaEJpbmFyeVdyaXRlciB3cml0ZXJWNCA9IG5ldyBHcmFwaEJpbmFyeVdyaXRlcigpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEdyYXBoQmluYXJ5UmVhZGVyIHJlYWRlclY0ID0gbmV3IEdyYXBoQmluYXJ5UmVhZGVyKCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTmV0dHlCdWZmZXJGYWN0b3J5IGJ1ZmZlckZhY3RvcnkgPSBuZXcgTmV0dHlCdWZmZXJGYWN0b3J5KCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgdGVzdENhc2VEYXRhUGF0aCA9IHJvb3QuZ2V0UGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKyAidGVzdC1jYXNlLWRhdGEiICsgRmlsZS5zZXBhcmF0b3IKQEAgLTU2LDcgKzU1LDcgQEAKICAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJzKG5hbWUgPSAiZXhwZWN0KHswfSkiKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7CiAgICAgICAgIHJldHVybiBBcnJheXMuYXNMaXN0KG5ldyBPYmplY3RbXVtdewotICAgICAgICAgICAgICAgIHsidjEiLCByZWFkZXJWMSwgd3JpdGVyVjEgfSwKKyAgICAgICAgICAgICAgICB7InY0IiwgcmVhZGVyVjQsIHdyaXRlclY0IH0sCiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNzcsNyArNzYsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBieXRlW10gcmVhZEZyb21SZXNvdXJjZShmaW5hbCBTdHJpbmcgcmVzb3VyY2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXN0UmVzb3VyY2UgPSByZXNvdXJjZSArICItIiArIGNvbXBhdGliaWxpdHkgKyAiLmdiaW4iOwotICAgICAgICByZXR1cm4gSU9VdGlscy50b0J5dGVBcnJheShnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0odGVzdFJlc291cmNlKSk7CisgICAgICAgIHJldHVybiBJT1V0aWxzLnRvQnl0ZUFycmF5KEdyYXBoQmluYXJ5UmVzb3VyY2VBY2Nlc3MuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbSh0ZXN0UmVzb3VyY2UpKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTEwOCw4ICsxMDcsOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIuc2hvdWxkUmVhZFdyaXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKTsKLSAgICB9CisvLyAgICBUT0RPOiByZXZpc2l0CisvLyAgICBAT3ZlcnJpZGUKKy8vICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlYWRXcml0ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisvLyAgICAgICAgc3VwZXIuc2hvdWxkUmVhZFdyaXRlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoKTsKKy8vICAgIH0KIH0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVHlwZWRDb21wYXRpYmlsaXR5VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKaW5kZXggOTM5YTAxYi4uMzUzNWY2ZSAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UeXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKQEAgLTIwLDEyICsyMCw4IEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5BYnN0cmFjdFR5cGVkQ29tcGF0aWJpbGl0eVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWMzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVGVzdFN1cHBvcnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMzsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlBhcmFtZXRlcml6ZWQ7CkBAIC00MSwxOCArMzcsMTEgQEAKIEBSdW5XaXRoKFBhcmFtZXRlcml6ZWQuY2xhc3MpCiBwdWJsaWMgY2xhc3MgR3JhcGhTT05UeXBlZENvbXBhdGliaWxpdHlUZXN0IGV4dGVuZHMgQWJzdHJhY3RUeXBlZENvbXBhdGliaWxpdHlUZXN0IHsKIAotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdE1hcHBlciBtYXBwZXJWMiA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCkuCi0gICAgICAgICAgICBhZGRSZWdpc3RyeShUaW5rZXJJb1JlZ2lzdHJ5VjIuaW5zdGFuY2UoKSkuCi0gICAgICAgICAgICB0eXBlSW5mbyhUeXBlSW5mby5QQVJUSUFMX1RZUEVTKS4KLSAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWMi5idWlsZCgpKS4KLSAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShuZXcgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIuR3JlbWxpblNlcnZlck1vZHVsZSgpKS4KLSAgICAgICAgICAgIHZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYyXzApLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgT2JqZWN0TWFwcGVyIG1hcHBlclYzID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS4KLSAgICAgICAgICAgIGFkZFJlZ2lzdHJ5KFRpbmtlcklvUmVnaXN0cnlWMy5pbnN0YW5jZSgpKS4KLSAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWMy5idWlsZCgpKS4KLSAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzLkdyZW1saW5TZXJ2ZXJNb2R1bGUoKSkuCi0gICAgICAgICAgICB2ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WM18wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBPYmplY3RNYXBwZXIgbWFwcGVyVjQgPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpLgorICAgICAgICAgICAgYWRkUmVnaXN0cnkoVGlua2VySW9SZWdpc3RyeVY0Lmluc3RhbmNlKCkpLgorICAgICAgICAgICAgYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVY0LmJ1aWxkKCkpLgorICAgICAgICAgICAgYWRkQ3VzdG9tTW9kdWxlKG5ldyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNC5HcmVtbGluU2VydmVyTW9kdWxlVjQoKSkuCisgICAgICAgIHZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlY0XzApLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHRlc3RDYXNlRGF0YVBhdGggPSByb290LmdldFBhdGgoKSArIEZpbGUuc2VwYXJhdG9yICsgInRlc3QtY2FzZS1kYXRhIiArIEZpbGUuc2VwYXJhdG9yCiAgICAgICAgICsgImlvIiArIEZpbGUuc2VwYXJhdG9yICsgImdyYXBoc29uIjsKQEAgLTY0LDggKzUzLDcgQEAKICAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJzKG5hbWUgPSAiZXhwZWN0KHswfSkiKQogICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGRhdGEoKSB7CiAgICAgICAgIHJldHVybiBBcnJheXMuYXNMaXN0KG5ldyBPYmplY3RbXVtdewotICAgICAgICAgICAgICAgIHsidjIiLCBtYXBwZXJWMiB9LAotICAgICAgICAgICAgICAgIHsidjMiLCBtYXBwZXJWMyB9LAorICAgICAgICAgICAgICAgIHsidjQiLCBtYXBwZXJWNCB9LAogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTgzLDcgKzcxLDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgYnl0ZVtdIHJlYWRGcm9tUmVzb3VyY2UoZmluYWwgU3RyaW5nIHJlc291cmNlKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBmaW5hbCBTdHJpbmcgdGVzdFJlc291cmNlID0gcmVzb3VyY2UgKyAiLSIgKyBjb21wYXRpYmlsaXR5ICsgIi5qc29uIjsKLSAgICAgICAgcmV0dXJuIElPVXRpbHMudG9CeXRlQXJyYXkoZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKHRlc3RSZXNvdXJjZSkpOworICAgICAgICByZXR1cm4gSU9VdGlscy50b0J5dGVBcnJheShHcmFwaFNPTlJlc291cmNlQWNjZXNzLmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0odGVzdFJlc291cmNlKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMDQsNCArOTIsMTAgQEAKIAogICAgICAgICByZXR1cm4gYnl0ZXM7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2hvdWxkUmVhZFdyaXRlVHJhdmVyc2FsVHJlZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBUcmVlIGRlc2VyaWFsaXphdGlvbiBmcm9tIEdyYXBoU09OIGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAgICAgICByZXR1cm47CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05VbnR5cGVkQ29tcGF0aWJpbGl0eVRlc3QuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL0dyYXBoU09OVW50eXBlZENvbXBhdGliaWxpdHlUZXN0LmphdmEKaW5kZXggNGZiNGU2Ni4uNGNlOTMzYiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05VbnR5cGVkQ29tcGF0aWJpbGl0eVRlc3QuamF2YQorKysgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlVudHlwZWRDb21wYXRpYmlsaXR5VGVzdC5qYXZhCkBAIC0yMCwxMSArMjAsOCBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQWJzdHJhY3RVbnR5cGVkQ29tcGF0aWJpbGl0eVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYxOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWMjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWNDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuUGFyYW1ldGVyaXplZDsKQEAgLTQwLDI1ICszNywxMiBAQAogQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKIHB1YmxpYyBjbGFzcyBHcmFwaFNPTlVudHlwZWRDb21wYXRpYmlsaXR5VGVzdCBleHRlbmRzIEFic3RyYWN0VW50eXBlZENvbXBhdGliaWxpdHlUZXN0IHsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXJWMSA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCkuCi0gICAgICAgICAgICBhZGRSZWdpc3RyeShUaW5rZXJJb1JlZ2lzdHJ5VjEuaW5zdGFuY2UoKSkuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0TWFwcGVyIG1hcHBlclY0ID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS4KKyAgICAgICAgICAgIGFkZFJlZ2lzdHJ5KFRpbmtlcklvUmVnaXN0cnlWNC5pbnN0YW5jZSgpKS4KICAgICAgICAgICAgIHR5cGVJbmZvKFR5cGVJbmZvLk5PX1RZUEVTKS4KLSAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShuZXcgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEuR3JlbWxpblNlcnZlck1vZHVsZSgpKS4KLSAgICAgICAgICAgIHZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYxXzApLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0TWFwcGVyIG1hcHBlclYyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS4KLSAgICAgICAgICAgICAgICAgICAgYWRkUmVnaXN0cnkoVGlua2VySW9SZWdpc3RyeVYyLmluc3RhbmNlKCkpLgotICAgICAgICAgICAgICAgICAgICB0eXBlSW5mbyhUeXBlSW5mby5OT19UWVBFUykuCi0gICAgICAgICAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWMi5idWlsZCgpKS4KLSAgICAgICAgICAgICAgICAgICAgYWRkQ3VzdG9tTW9kdWxlKG5ldyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5HcmVtbGluU2VydmVyTW9kdWxlKCkpLgotICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXJWMyA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCkuCi0gICAgICAgICAgICBhZGRSZWdpc3RyeShUaW5rZXJJb1JlZ2lzdHJ5VjMuaW5zdGFuY2UoKSkuCi0gICAgICAgICAgICB0eXBlSW5mbyhUeXBlSW5mby5OT19UWVBFUykuCi0gICAgICAgICAgICBhZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKSkuCi0gICAgICAgICAgICBhZGRDdXN0b21Nb2R1bGUobmV3IEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyLkdyZW1saW5TZXJ2ZXJNb2R1bGUoKSkuCi0gICAgICAgICAgICB2ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WM18wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKKyAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWNC5idWlsZCgpKS4KKyAgICAgICAgICAgIGFkZEN1c3RvbU1vZHVsZShuZXcgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQuR3JlbWxpblNlcnZlck1vZHVsZVY0KCkpLgorICAgICAgICB2ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WNF8wKS5jcmVhdGUoKS5jcmVhdGVNYXBwZXIoKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyB0ZXN0Q2FzZURhdGFQYXRoID0gcm9vdC5nZXRQYXRoKCkgKyBGaWxlLnNlcGFyYXRvciArICJ0ZXN0LWNhc2UtZGF0YSIgKyBGaWxlLnNlcGFyYXRvcgogICAgICAgICAgICAgKyAiaW8iICsgRmlsZS5zZXBhcmF0b3IgKyAiZ3JhcGhzb24iOwpAQCAtNzAsOSArNTQsNyBAQAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJleHBlY3QoezB9KSIpCiAgICAgcHVibGljIHN0YXRpYyBJdGVyYWJsZTxPYmplY3RbXT4gZGF0YSgpIHsKICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdW117Ci0gICAgICAgICAgICAgICAgeyJ2MS1uby10eXBlcyIsIG1hcHBlclYxIH0sCi0gICAgICAgICAgICAgICAgeyJ2Mi1uby10eXBlcyIsIG1hcHBlclYyIH0sCi0gICAgICAgICAgICAgICAgeyJ2My1uby10eXBlcyIsIG1hcHBlclYzIH0sCisgICAgICAgICAgICAgICAgeyJ2NC1uby10eXBlcyIsIG1hcHBlclY0IH0sCiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtOTAsNyArNzIsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBieXRlW10gcmVhZEZyb21SZXNvdXJjZShmaW5hbCBTdHJpbmcgcmVzb3VyY2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXN0UmVzb3VyY2UgPSByZXNvdXJjZSArICItIiArIGNvbXBhdGliaWxpdHkgKyAiLmpzb24iOwotICAgICAgICByZXR1cm4gSU9VdGlscy50b0J5dGVBcnJheShnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0odGVzdFJlc291cmNlKSk7CisgICAgICAgIHJldHVybiBJT1V0aWxzLnRvQnl0ZUFycmF5KEdyYXBoU09OUmVzb3VyY2VBY2Nlc3MuY2xhc3MuZ2V0UmVzb3VyY2VBc1N0cmVhbSh0ZXN0UmVzb3VyY2UpKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1JlcXVlc3RNZXNzYWdlVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVxdWVzdE1lc3NhZ2VUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU1NzdhNAotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1JlcXVlc3RNZXNzYWdlVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCitwdWJsaWMgY2xhc3MgUmVxdWVzdE1lc3NhZ2VUZXN0IHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNldFNjcmlwdEdyZW1saW4oKSB7CisgICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSAiZy5WKCkuYm90aCgpIjsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoc2NyaXB0KS5jcmVhdGUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHNjcmlwdCwgbXNnLmdldEdyZW1saW4oKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXRCaW5kaW5nc1dpdGhNYXAoKSB7CisgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiYSIsICJiIik7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiZyIsICJnbW9kZXJuIik7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJncmVtbGluIikuYWRkQmluZGluZ3MoYmluZGluZ3MpLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoYmluZGluZ3MsIG1zZy5nZXRGaWVsZChUb2tlbnMuQVJHU19CSU5ESU5HUykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2V0QmluZGluZ3NXaXRoS2V5VmFsdWUoKSB7CisgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiYSIsICJiIik7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiZyIsICJnbW9kZXJuIik7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJncmVtbGluIikKKyAgICAgICAgICAgICAgICAuYWRkQmluZGluZygiYSIsICJiIikKKyAgICAgICAgICAgICAgICAuYWRkQmluZGluZygiZyIsICJnbW9kZXJuIikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhiaW5kaW5ncywgbXNnLmdldEZpZWxkKFRva2Vucy5BUkdTX0JJTkRJTkdTKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXRMYW5ndWFnZSgpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGxhbmd1YWdlID0gImZha2UtbGFuZyI7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnIikuYWRkTGFuZ3VhZ2UobGFuZ3VhZ2UpLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMobGFuZ3VhZ2UsIG1zZy5nZXRGaWVsZChUb2tlbnMuQVJHU19MQU5HVUFHRSkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2V0RygpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGcgPSAiZ21vZGVybiI7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnIikuYWRkRyhnKS5jcmVhdGUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGcsIG1zZy5nZXRGaWVsZChUb2tlbnMuQVJHU19HKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXRUaW1lb3V0KCkgeworICAgICAgICBmaW5hbCBsb25nIHRpbWVvdXQgPSAxMDFMOworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZyIpLmFkZFRpbWVvdXRNaWxsaXModGltZW91dCkuY3JlYXRlKCk7CisgICAgICAgIGFzc2VydEVxdWFscyh0aW1lb3V0LCAobG9uZykgbXNnLmdldEZpZWxkKFRva2Vucy5USU1FT1VUX01TKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoKSB7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZ1dpdGhBbGwgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZyIpLmFkZE1hdGVyaWFsaXplUHJvcGVydGllcyhUb2tlbnMuTUFURVJJQUxJWkVfUFJPUEVSVElFU19BTEwpLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfQUxMLCBtc2dXaXRoQWxsLmdldEZpZWxkKFRva2Vucy5BUkdTX01BVEVSSUFMSVpFX1BST1BFUlRJRVMpKTsKKworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2dXaXRoVG9rZW5zID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImciKS5hZGRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfVE9LRU5TKS5jcmVhdGUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKFRva2Vucy5NQVRFUklBTElaRV9QUk9QRVJUSUVTX1RPS0VOUywgbXNnV2l0aFRva2Vucy5nZXRGaWVsZChUb2tlbnMuQVJHU19NQVRFUklBTElaRV9QUk9QRVJUSUVTKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRFcnJvclNldHRpbmdNYXRlcmlhbGl6ZVByb3BlcnRpZXNXaXRoSW52YWxpZFZhbHVlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnV2l0aFRva2VucyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnIikuYWRkTWF0ZXJpYWxpemVQcm9wZXJ0aWVzKCJub3RUb2tlbiIpLmNyZWF0ZSgpOworICAgICAgICAgICAgZmFpbCgiUmVxdWVzdE1lc3NhZ2Ugc2hvdWxkbid0IGFjY2VwdCBub3RUb2tlbiBmb3IgbWF0ZXJpYWxpemVQcm9wZXJ0aWVzLiIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKS5jb250YWlucygibWF0ZXJpYWxpemVQcm9wZXJ0aWVzIGFyZ3VtZW50IG11c3QgYmUgZWl0aGVyIHRva2VuIG9yIGFsbCIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkR2V0RmllbGRzKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgZyA9ICJnbW9kZXJuIjsKKyAgICAgICAgZmluYWwgU3RyaW5nIGxhbmcgPSAibGFuZyI7CisgICAgICAgIGZpbmFsIFN0cmluZyBxdWVyeSA9ICJnLlYoKSI7CisgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiYiIsICJjIik7CisgICAgICAgIGJpbmRpbmdzLnB1dCgiZyIsICJnbW9kZXJuIik7CisKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQocXVlcnkpLmFkZEcoZykuYWRkQmluZGluZ3MoYmluZGluZ3MpLmFkZExhbmd1YWdlKGxhbmcpLmNyZWF0ZSgpOworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGZpZWxkcyA9IG1zZy5nZXRGaWVsZHMoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGcsIGZpZWxkcy5nZXQoVG9rZW5zLkFSR1NfRykpOworICAgICAgICBhc3NlcnRFcXVhbHMobGFuZywgZmllbGRzLmdldChUb2tlbnMuQVJHU19MQU5HVUFHRSkpOworICAgICAgICBhc3NlcnRFcXVhbHMoYmluZGluZ3MsIGZpZWxkcy5nZXQoVG9rZW5zLkFSR1NfQklORElOR1MpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKHF1ZXJ5LCBtc2cuZ2V0R3JlbWxpbigpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEdldEdBc0FyZygpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGcgPSAiZ21vZGVybiI7CisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJnIikuYWRkRyhnKS5jcmVhdGUoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGcsIG1zZy5nZXRGaWVsZChUb2tlbnMuQVJHU19HKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRHZXRHQXNBcmdBc09wdGlvbmFsKCkgeworICAgICAgICBmaW5hbCBTdHJpbmcgZyA9ICJnbW9kZXJuIjsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImciKS5hZGRHKGcpLmNyZWF0ZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoZywgbXNnLm9wdGlvbmFsRmllbGQoVG9rZW5zLkFSR1NfRykuZ2V0KCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkTm90QmVBYmxlVG9HZXRHcmVtbGluUXVlcnlGcm9tQXJncygpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHF1ZXJ5ID0gImdtb2Rlcm4iOworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChxdWVyeSkuY3JlYXRlKCk7CisgICAgICAgIGFzc2VydFRydWUobnVsbCA9PSBtc2cuZ2V0RmllbGQoVG9rZW5zLkFSR1NfR1JFTUxJTikpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkTm90Q29udGFpblJlcXVlc3RJZCgpIHsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoImcuVigpIikuY3JlYXRlKCk7CisgICAgICAgIGFzc2VydE51bGwobXNnLmdldEZpZWxkKCJyZXF1ZXN0SWQiKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVzcG9uc2VTdGF0dXNDb2RlVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL21lc3NhZ2UvUmVzcG9uc2VTdGF0dXNDb2RlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzc2ZGE2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9tZXNzYWdlL1Jlc3BvbnNlU3RhdHVzQ29kZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2U7Ci0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KLXB1YmxpYyBjbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVUZXN0IHsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkSW5kaWNhdGVGaW5hbE1lc3NhZ2VzU3RhdHVzQ29kZXMoKSB7Ci0gICAgICAgIGFzc2VydEZhbHNlKFJlc3BvbnNlU3RhdHVzQ29kZS5BVVRIRU5USUNBVEUuaXNGaW5hbFJlc3BvbnNlKCkpOwotICAgICAgICBhc3NlcnRGYWxzZShSZXNwb25zZVN0YXR1c0NvZGUuUEFSVElBTF9DT05URU5ULmlzRmluYWxSZXNwb25zZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUy5pc0ZpbmFsUmVzcG9uc2UoKSk7Ci0gICAgICAgIGFzc2VydFRydWUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUl9USU1FT1VULmlzRmluYWxSZXNwb25zZSgpKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNjBiN2QuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLlN0cmVhbVJlYWRDb25zdHJhaW50czsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QgewotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkQXBwbHlNYXhUb2tlbkxlbmd0aHNPbkNvbmZpZ3VyZSgpIHsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSBiYXJlLWJvbmVzIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxCi0gICAgICAgIGZpbmFsIEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxIHNlcmlhbGl6ZXIgPSBuZXcgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUgYnl0ZVtdIG9idGFpbkhlYWRlcigpIHsgcmV0dXJuIG5ldyBieXRlWzBdOyB9Ci0gICAgICAgICAgICBAT3ZlcnJpZGUgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBjb25maWd1cmVCdWlsZGVyKEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlcikgeyByZXR1cm4gYnVpbGRlcjt9Ci0gICAgICAgICAgICBAT3ZlcnJpZGUgcHVibGljIFN0cmluZ1tdIG1pbWVUeXBlc1N1cHBvcnRlZCgpIHtyZXR1cm4gbmV3IFN0cmluZ1swXTsgfQotICAgICAgICB9OwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBjb25maWcucHV0KCJtYXhOdW1iZXJMZW5ndGgiLCA5OTkpOwotICAgICAgICBjb25maWcucHV0KCJtYXhTdHJpbmdMZW5ndGgiLCAxMjM0NSk7Ci0gICAgICAgIGNvbmZpZy5wdXQoIm1heE5lc3RpbmdEZXB0aCIsIDU1KTsKLQotICAgICAgICBzZXJpYWxpemVyLmNvbmZpZ3VyZShjb25maWcsIG51bGwpOwotCi0gICAgICAgIGZpbmFsIFN0cmVhbVJlYWRDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHNlcmlhbGl6ZXIuZ2V0TWFwcGVyKCkuZ2V0RmFjdG9yeSgpLnN0cmVhbVJlYWRDb25zdHJhaW50cygpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyg5OTksIGNvbnN0cmFpbnRzLmdldE1heE51bWJlckxlbmd0aCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyMzQ1LCBjb25zdHJhaW50cy5nZXRNYXhTdHJpbmdMZW5ndGgoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1NSwgY29uc3RyYWludHMuZ2V0TWF4TmVzdGluZ0RlcHRoKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJUZXN0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmZlZWMzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5TdHJlYW1SZWFkQ29uc3RyYWludHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotCi1wdWJsaWMgY2xhc3MgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJUZXN0IHsKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEFwcGx5TWF4VG9rZW5MZW5ndGhzT25Db25maWd1cmUoKSB7Ci0gICAgICAgIC8vIEluaXRpYWxpemUgYmFyZS1ib25lcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMgotICAgICAgICBmaW5hbCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiBzZXJpYWxpemVyID0gbmV3IEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlIGJ5dGVbXSBvYnRhaW5IZWFkZXIoKSB7IHJldHVybiBuZXcgYnl0ZVswXTsgfQotICAgICAgICAgICAgQE92ZXJyaWRlIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgY29uZmlndXJlQnVpbGRlcihHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIpIHsgcmV0dXJuIGJ1aWxkZXI7fQotICAgICAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7cmV0dXJuIG5ldyBTdHJpbmdbMF07IH0KLSAgICAgICAgfTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgY29uZmlnLnB1dCgibWF4TnVtYmVyTGVuZ3RoIiwgOTk5KTsKLSAgICAgICAgY29uZmlnLnB1dCgibWF4U3RyaW5nTGVuZ3RoIiwgMTIzNDUpOwotICAgICAgICBjb25maWcucHV0KCJtYXhOZXN0aW5nRGVwdGgiLCA1NSk7Ci0KLSAgICAgICAgc2VyaWFsaXplci5jb25maWd1cmUoY29uZmlnLCBudWxsKTsKLQotICAgICAgICBmaW5hbCBTdHJlYW1SZWFkQ29uc3RyYWludHMgY29uc3RyYWludHMgPSBzZXJpYWxpemVyLmdldE1hcHBlcigpLmdldEZhY3RvcnkoKS5zdHJlYW1SZWFkQ29uc3RyYWludHMoKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoOTk5LCBjb25zdHJhaW50cy5nZXRNYXhOdW1iZXJMZW5ndGgoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMjM0NSwgY29uc3RyYWludHMuZ2V0TWF4U3RyaW5nTGVuZ3RoKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNTUsIGNvbnN0cmFpbnRzLmdldE1heE5lc3RpbmdEZXB0aCgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTZkZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNFRlc3QuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOworCitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5TdHJlYW1SZWFkQ29uc3RyYWludHM7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitwdWJsaWMgY2xhc3MgQWJzdHJhY3RHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRUZXN0IHsKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZEFwcGx5TWF4VG9rZW5MZW5ndGhzT25Db25maWd1cmUoKSB7CisgICAgICAgIC8vIEluaXRpYWxpemUgYmFyZS1ib25lcyBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMgorICAgICAgICBmaW5hbCBBYnN0cmFjdEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEFic3RyYWN0R3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KCkgeworICAgICAgICAgICAgQE92ZXJyaWRlIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgY29uZmlndXJlQnVpbGRlcihHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIpIHsgcmV0dXJuIGJ1aWxkZXI7fQorICAgICAgICAgICAgQE92ZXJyaWRlIHB1YmxpYyBTdHJpbmdbXSBtaW1lVHlwZXNTdXBwb3J0ZWQoKSB7cmV0dXJuIG5ldyBTdHJpbmdbMF07IH0KKyAgICAgICAgfTsKKworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgY29uZmlnLnB1dCgibWF4TnVtYmVyTGVuZ3RoIiwgOTk5KTsKKyAgICAgICAgY29uZmlnLnB1dCgibWF4U3RyaW5nTGVuZ3RoIiwgMTIzNDUpOworICAgICAgICBjb25maWcucHV0KCJtYXhOZXN0aW5nRGVwdGgiLCA1NSk7CisKKyAgICAgICAgc2VyaWFsaXplci5jb25maWd1cmUoY29uZmlnLCBudWxsKTsKKworICAgICAgICBmaW5hbCBTdHJlYW1SZWFkQ29uc3RyYWludHMgY29uc3RyYWludHMgPSBzZXJpYWxpemVyLmdldE1hcHBlcigpLmdldEZhY3RvcnkoKS5zdHJlYW1SZWFkQ29uc3RyYWludHMoKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoOTk5LCBjb25zdHJhaW50cy5nZXRNYXhOdW1iZXJMZW5ndGgoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxMjM0NSwgY29uc3RyYWludHMuZ2V0TWF4U3RyaW5nTGVuZ3RoKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNTUsIGNvbnN0cmFpbnRzLmdldE1heE5lc3RpbmdEZXB0aCgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0Um91bmRUcmlwVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9BYnN0cmFjdFJvdW5kVHJpcFRlc3QuamF2YQppbmRleCAyYjNmZGFhLi4zNmI0MGI4IDEwMDY0NAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0Fic3RyYWN0Um91bmRUcmlwVGVzdC5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvQWJzdHJhY3RSb3VuZFRyaXBUZXN0LmphdmEKQEAgLTE4LDcxICsxOCwzNiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuQ29tcHV0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLlZlcnRleFByb2dyYW1TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MucmVtb3RlLnRyYXZlcnNhbC5EZWZhdWx0UmVtb3RlVHJhdmVyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuQnl0ZWNvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5PcGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9yZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlBpY2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Qb3A7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TYWNrRnVuY3Rpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU2NvcGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UZXh0UDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5UcmF2ZXJzYWxTdHJhdGVneVByb3h5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5TdWJncmFwaFN0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsTWV0cmljczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuTWV0cmljczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuTXV0YWJsZU1ldHJpY3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbE1ldHJpY3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuQ29sdW1uOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5Jb1Rlc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlRWRnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VWZXJ0ZXg7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5yZWZlcmVuY2UuUmVmZXJlbmNlVmVydGV4UHJvcGVydHk7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuZnVuY3Rpb24uTGFtYmRhOwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVycy5QYXJhbWV0ZXJpemVkOwogCiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7CiBpbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOwotaW1wb3J0IGphdmEudGltZS5JbnN0YW50OwotaW1wb3J0IGphdmEudGltZS5Mb2NhbERhdGU7Ci1pbXBvcnQgamF2YS50aW1lLkxvY2FsRGF0ZVRpbWU7Ci1pbXBvcnQgamF2YS50aW1lLkxvY2FsVGltZTsKLWltcG9ydCBqYXZhLnRpbWUuTW9udGhEYXk7Ci1pbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwotaW1wb3J0IGphdmEudGltZS5PZmZzZXRUaW1lOwotaW1wb3J0IGphdmEudGltZS5QZXJpb2Q7Ci1pbXBvcnQgamF2YS50aW1lLlllYXI7Ci1pbXBvcnQgamF2YS50aW1lLlllYXJNb250aDsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZU9mZnNldDsKLWltcG9ydCBqYXZhLnRpbWUuWm9uZWREYXRlVGltZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogaW1wb3J0IGphdmEudXRpbC5VVUlEOwpAQCAtOTAsNyArNTUsNiBAQAogaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5Db25zdW1lcjsKIAogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXNMYWJlbDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1vY2tpdG9IYW1jcmVzdE1hdGNoZXJBZGFwdGVyLnJlZmxlY3Rpb25FcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogCkBAIC0xMDAsMTEgKzY0LDYgQEAKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpLnRyYXZlcnNhbCgpOwogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJUeXBlezB9IikKICAgICBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb24gaW5wdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUgYnl0ZWNvZGUgPSBuZXcgQnl0ZWNvZGUoKTsKLSAgICAgICAgYnl0ZWNvZGUuYWRkU3RlcCgiViIpOwotICAgICAgICBieXRlY29kZS5hZGRTdGVwKCJ0YWlsIiwgMyk7Ci0gICAgICAgIGJ5dGVjb2RlLmFkZFNvdXJjZShUcmF2ZXJzYWxTb3VyY2UuU3ltYm9scy53aXRoQ29tcHV0ZXIsICJteUNvbXB1dGVyIik7Ci0KICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgICBtYXAucHV0KCJvbmUiLCAxKTsKICAgICAgICAgbWFwLnB1dCgidHdvIiwgMik7CkBAIC0xMTIsNiArNzEsMTAgQEAKICAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgSW50ZWdlcj4+IG5lc3RlZE1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgbmVzdGVkTWFwLnB1dCgiZmlyc3QiLCBtYXApOwogCisgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIEludGVnZXI+IG9yZGVyZWRNYXAgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgICAgICAgIG1hcC5wdXQoIm9uZSIsIDEpOworICAgICAgICBtYXAucHV0KCJ0d28iLCAyKTsKKwogICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBsaXN0LmFkZCgic3RyaW5nIDEiKTsKICAgICAgICAgbGlzdC5hZGQoInN0cmluZyAxIik7CkBAIC0xNjEsNyArMTI0LDggQEAKIAogICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCgKICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJTdHJpbmciLCAiQUJDIiwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQ2hhciIsICfCoycsIG51bGx9LAorICAgICAgICAgICAgICAgIC8vIHRvZG86IGFkZCB0ZXN0cyBmb3Igbm9uLUFTQ0lJIGNoYXJzCisgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQ2hhciIsICckJywgbnVsbH0sCiAKICAgICAgICAgICAgICAgICAvLyBudW1lcmljcwogICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IkJ5dGUiLCAxLCBudWxsfSwKQEAgLTE4Myw1OCArMTQ3LDE0IEBACiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQmlnRGVjaW1hbE5lZyIsIG5ldyBCaWdEZWNpbWFsKCItMTIzNDU2Nzg5MDk4NzY1NDMyMS4xMjMyMTMyIiksIG51bGx9LAogCiAgICAgICAgICAgICAgICAgLy8gZGF0ZSt0aW1lCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiRGF0ZSIsIERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKERhdGVGb3JtYXQuTUVESVVNLCBMb2NhbGUuVVMpLnBhcnNlKCJKYW4gMTIsIDE5NTIiKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiVGltZXN0YW1wIiwgVGltZXN0YW1wLnZhbHVlT2YoIjIwMTYtMDEtMTUgMTI6MDE6MDIiKSwgbnVsbH0sCiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiRHVyYXRpb24iLCBEdXJhdGlvbi5vZlNlY29uZHMoMjEzMTIzMjEzLCA0MDApLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJJbnN0YW50IiwgSW5zdGFudC5vZkVwb2NoU2Vjb25kKDIxMzEyMzIxMywgNDAwKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiTG9jYWxEYXRlIiwgTG9jYWxEYXRlLm9mKDIwMTYsIDEwLCAyMSksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IkxvY2FsVGltZSIsIExvY2FsVGltZS5vZigxMiwgMjAsIDMwLCAzMDApLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJMb2NhbERhdGVUaW1lIiwgTG9jYWxEYXRlVGltZS5vZigyMDE2LCAxMCwgMjEsIDEyLCAyMCwgMzAsIDMwMCksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7Ik1vbnRoRGF5IiwgTW9udGhEYXkub2YoMTIsIDI4KSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiT2Zmc2V0RGF0ZVRpbWUiLCBPZmZzZXREYXRlVGltZS5vZigyMDE3LCAxMSwgMTUsIDEyLCAzMCwgNDUsIDMwMCwgWm9uZU9mZnNldC5vZlRvdGFsU2Vjb25kcyg0MDApKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiT2Zmc2V0VGltZSIsIE9mZnNldFRpbWUub2YoMTIsIDMwLCA0NSwgMzAwLCBab25lT2Zmc2V0Lm9mVG90YWxTZWNvbmRzKDQwMCkpLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJQZXJpb2QiLCBQZXJpb2Qub2YoMSwgNiwgMTUpLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJZZWFyIiwgWWVhci5vZigxOTk2KSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiWWVhck1vbnRoIiwgWWVhck1vbnRoLm9mKDIwMTYsIDExKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiWm9uZWREYXRlVGltZSIsIFpvbmVkRGF0ZVRpbWUub2YoMjAxNiwgMTEsIDE1LCAxMiwgMzAsIDQ1LCAzMDAsIFpvbmVPZmZzZXQub2ZUb3RhbFNlY29uZHMoMjAwKSksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlpvbmVPZmZzZXQiLCBab25lT2Zmc2V0Lm9mVG90YWxTZWNvbmRzKDEwMCksIG51bGx9LAogCiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiVVVJRCIsIFVVSUQucmFuZG9tVVVJRCgpLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJCeXRlY29kZSIsIGJ5dGVjb2RlLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJCaW5kaW5nIiwgbmV3IEJ5dGVjb2RlLkJpbmRpbmc8PigieCIsIDEyMyksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlRyYXZlcnNlciIsIG5ldyBEZWZhdWx0UmVtb3RlVHJhdmVyc2VyPD4oIm1hcmtvIiwgMTAwKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQ2xhc3MiLCBCeXRlY29kZS5jbGFzcywgbnVsbH0sCiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQnl0ZUJ1ZmZlciIsIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdeyAxLCAyLCAzIH0pLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJJbmV0QWRkcmVzc1Y0IiwgSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKCJsb2NhbGhvc3QiKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiSW5ldEFkZHJlc3NWNiIsIEluZXRBZGRyZXNzLmdldEJ5TmFtZSgiOjoxIiksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IkxhbWJkYTAiLCBMYW1iZGEuc3VwcGxpZXIoInJldHVybiAxIiksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IkxhbWJkYTEiLCBMYW1iZGEuY29uc3VtZXIoIml0IiksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IkxhbWJkYTIiLCBMYW1iZGEuYmlGdW5jdGlvbigieCx5IC0+IHggKyB5IiksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IkxhbWJkYU4iLCBuZXcgTGFtYmRhLlVua25vd25BcmdMYW1iZGEoIngseSx6IC0+IHggKyB5ICsgeiIsICJncmVtbGluLWdyb292eSIsIDMpLCBudWxsfSwKIAogICAgICAgICAgICAgICAgIC8vIGVudW1zCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQmFycmllciIsIFNhY2tGdW5jdGlvbnMuQmFycmllci5ub3JtU2FjaywgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQ2FyZGluYWxpdHkiLCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5saXN0LCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJDb2x1bW5zIiwgQ29sdW1uLnZhbHVlcywgbnVsbH0sCiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiRGlyZWN0aW9uIiwgRGlyZWN0aW9uLkJPVEgsIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7Ik9wZXJhdG9yIiwgT3BlcmF0b3Iuc3VtLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJPcGVyYXRvciIsIE9wZXJhdG9yLmRpdiwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiT3JkZXIiLCBPcmRlci5kZXNjLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJQaWNrIiwgUGljay5hbnksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlBvcCIsIFBvcC5taXhlZCwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiU2NvcGUiLCBTY29wZS5nbG9iYWwsIG51bGx9LAogICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlQiLCBULmxhYmVsLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJQZ3QiLCBQLmd0KDApLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJQZ3RlIiwgUC5ndGUoMCksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlBiZXR3ZWVuIiwgUC5iZXR3ZWVuKDAsMSksIG51bGx9LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlBhbmQiLCBQLmd0KDEpLmFuZChQLmx0KDIpKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiUG9yIiwgUC5ndCgxKS5vcihQLmx0KDIpKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiUG5vdCIsIFAubm90KFAubHRlKDEpKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiUHdpdGhvdXQiLCBQLndpdGhvdXQoMSwyLDMsNCxudWxsKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiUGluc2lkZSIsIFAuaW5zaWRlKDAuMGQsIDAuNmQpLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJUZXh0UHN0YXJ0aW5nV2l0aCIsIFRleHRQLnN0YXJ0aW5nV2l0aCgibWFyayIpLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJUZXh0UHJlZ2V4IiwgVGV4dFAucmVnZXgoIl5tZWgiKSwgbnVsbH0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiVGV4dFBub3RSZWdleCIsIFRleHRQLm5vdFJlZ2V4KCJebWVoIiksIG51bGx9LAogCiAgICAgICAgICAgICAgICAgLy8gZ3JhcGgKICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJSZWZlcmVuY2VFZGdlIiwgbmV3IFJlZmVyZW5jZUVkZ2UoMTIzLCAicGVyc29uIiwgbmV3IFJlZmVyZW5jZVZlcnRleCgxMjMsICJwZXJzb24iKSwgbmV3IFJlZmVyZW5jZVZlcnRleCgzMjEsICJwZXJzb24iKSksIG51bGx9LApAQCAtMjU1LDM3ICsxNzUsMTkgQEAKICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJHcmFwaCIsIGcuRSgpLnN1YmdyYXBoKCJrIikuY2FwKCJrIikubmV4dCgpLCAoQ29uc3VtZXI8R3JhcGg+KSBncmFwaCAtPiB7CiAgICAgICAgICAgICAgICAgICAgIElvVGVzdC5hc3NlcnRNb2Rlcm5HcmFwaChncmFwaCwgdHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIH19LAotICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlRyYXZlcnNhbFN0cmF0ZWd5VmVydGV4UHJvZ3JhbSIsIG5ldyBWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3koQ29tcHV0ZXIuY29tcHV0ZSgpKSwgKENvbnN1bWVyPFRyYXZlcnNhbFN0cmF0ZWd5UHJveHk+KSBzdHJhdGVneSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhWZXJ0ZXhQcm9ncmFtU3RyYXRlZ3kuY2xhc3MsIHN0cmF0ZWd5LmdldFN0cmF0ZWd5Q2xhc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkdyYXBoQ29tcHV0ZXIiLCBzdHJhdGVneS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0UHJvcGVydHkoVmVydGV4UHJvZ3JhbVN0cmF0ZWd5LkdSQVBIX0NPTVBVVEVSKSk7CisgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQnVsa0xpc3QiLCBidWxrU2V0LCAoQ29uc3VtZXI8TGlzdD4pIGJ1bGtsaXN0IC0+IHsKKyAgICAgICAgICAgICAgICAgICAgTGlzdCBidWxrU2V0RXhwYW5kZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgICAgICAgICAgICAgYnVsa1NldC5zcGxpdGVyYXRvcigpLmZvckVhY2hSZW1haW5pbmcoYnVsa1NldEV4cGFuZGVkOjphZGQpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoYnVsa1NldEV4cGFuZGVkLCBidWxrbGlzdCk7CiAgICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiVHJhdmVyc2FsU3RyYXRlZ3lTdWJncmFwaCIsIFN1YmdyYXBoU3RyYXRlZ3kuYnVpbGQoKS52ZXJ0aWNlcyhoYXNMYWJlbCgicGVyc29uIikpLmNyZWF0ZSgpLCAoQ29uc3VtZXI8VHJhdmVyc2FsU3RyYXRlZ3lQcm94eT4pIHN0cmF0ZWd5IC0+IHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFN1YmdyYXBoU3RyYXRlZ3kuY2xhc3MsIHN0cmF0ZWd5LmdldFN0cmF0ZWd5Q2xhc3MoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhoYXNMYWJlbCgicGVyc29uIikuYXNBZG1pbigpLmdldEJ5dGVjb2RlKCksIHN0cmF0ZWd5LmdldENvbmZpZ3VyYXRpb24oKS5nZXRQcm9wZXJ0eShTdWJncmFwaFN0cmF0ZWd5LlZFUlRJQ0VTKSk7Ci0gICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiQnVsa1NldCIsIGJ1bGtTZXQsIG51bGx9LAogICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlRyZWUiLCB0cmVlLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJFbXB0eU1ldHJpY3MiLCBuZXcgTXV0YWJsZU1ldHJpY3MoImlkRW1wdHkiLCAibmFtZUVtcHR5IiksIChDb25zdW1lcjxNZXRyaWNzPikgbSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRoYXQobSwgcmVmbGVjdGlvbkVxdWFscyhuZXcgTXV0YWJsZU1ldHJpY3MoImlkRW1wdHkiLCAibmFtZUVtcHR5IikpKTsKLSAgICAgICAgICAgICAgICB9fSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJNZXRyaWNzIiwgbWV0cmljcywgKENvbnN1bWVyPE1ldHJpY3M+KSBtIC0+IHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VGhhdChtLCByZWZsZWN0aW9uRXF1YWxzKG1ldHJpY3MsICJuZXN0ZWQiLCAiY291bnRzIikpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMobmV3IEFycmF5TGlzdChtZXRyaWNzLmdldENvdW50cygpLnZhbHVlcygpKSwgbmV3IEFycmF5TGlzdChtLmdldENvdW50cygpLnZhbHVlcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRoYXQobS5nZXROZXN0ZWQoKSwgcmVmbGVjdGlvbkVxdWFscyhtZXRyaWNzLmdldE5lc3RlZCgpKSk7Ci0gICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiRW1wdHlUcmF2ZXJzYWxNZXRyaWNzIiwgZW1wdHlUcmF2ZXJzYWxNZXRyaWNzLCAoQ29uc3VtZXI8VHJhdmVyc2FsTWV0cmljcz4pIG0gLT4gewotICAgICAgICAgICAgICAgICAgICBhc3NlcnRUaGF0KG0sIHJlZmxlY3Rpb25FcXVhbHMoZW1wdHlUcmF2ZXJzYWxNZXRyaWNzKSk7Ci0gICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiVHJhdmVyc2FsTWV0cmljcyIsIHRyYXZlcnNhbE1ldHJpY3MsIChDb25zdW1lcjxUcmF2ZXJzYWxNZXRyaWNzPikgbSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhtLnRvU3RyaW5nKCksIHRyYXZlcnNhbE1ldHJpY3MudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydFRoYXQobSwgcmVmbGVjdGlvbkVxdWFscyh0cmF2ZXJzYWxNZXRyaWNzLCAic3RlcEluZGV4ZWRNZXRyaWNzIiwgInBvc2l0aW9uSW5kZXhlZE1ldHJpY3MiKSk7Ci0gICAgICAgICAgICAgICAgfX0sCiAKICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0aW9ucwogICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7Ikxpc3RTaW5nbGUiLCBsaXN0LCBudWxsfSwKICAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJMaXN0TmVzdGVkIiwgbmVzdGVkTGlzdCwgbnVsbH0sCiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiTWFwIiwgbWFwLCBudWxsfSwKLSAgICAgICAgICAgICAgICBuZXcgT2JqZWN0W10geyJNYXAiLCBuZXN0ZWRNYXAsIG51bGx9LAorICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7Ik1hcE5lc3RlZCIsIG5lc3RlZE1hcCwgbnVsbH0sCisgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiT3JkZXJlZE1hcCIsIG9yZGVyZWRNYXAsIG51bGx9LAogICAgICAgICAgICAgICAgIG5ldyBPYmplY3RbXSB7IlNldCIsIHNldCwgbnVsbH0sCiAgICAgICAgICAgICAgICAgbmV3IE9iamVjdFtdIHsiU2V0TmVzdGVkIiwgbmVzdGVkU2V0LCBudWxsfSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJiYmRmMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOwotCi1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC51dGlsLlN0ZERhdGVGb3JtYXQ7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogU2VyaWFsaXplciB0ZXN0cyB0aGF0IGNvdmVyIGxvc3N5IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG1ldGhvZHMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYxVGVzdCB7Ci0KLSAgICBwcml2YXRlIFVVSUQgcmVxdWVzdElkID0gVVVJRC5mcm9tU3RyaW5nKCI2NDU3MjcyQS00MDE4LTQ1MzgtQjlBRS0wOERENUREQzBBQTEiKTsKLSAgICBwcml2YXRlIFJlc3BvbnNlTWVzc2FnZS5CdWlsZGVyIHJlc3BvbnNlTWVzc2FnZUJ1aWxkZXIgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQocmVxdWVzdElkKTsKLSAgICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvciA9IFVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOwotCi0gICAgcHVibGljIE1lc3NhZ2VTZXJpYWxpemVyPE9iamVjdE1hcHBlcj4gc2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplSXRlcmFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEludGVnZXI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgbGlzdC5hZGQoMSk7Ci0gICAgICAgIGxpc3QuYWRkKDEwMCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gY29udmVydChsaXN0KTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBMaXN0PEludGVnZXI+IGRlc2VyaWFsaXplZEZ1bkxpc3QgPSAoTGlzdDxJbnRlZ2VyPikgcmVzcG9uc2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVzZXJpYWxpemVkRnVuTGlzdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IEludGVnZXIoMSksIGRlc2VyaWFsaXplZEZ1bkxpc3QuZ2V0KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKDEwMCksIGRlc2VyaWFsaXplZEZ1bkxpc3QuZ2V0KDEpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUl0ZXJhYmxlV2l0aE51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEludGVnZXI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgbGlzdC5hZGQoMSk7Ci0gICAgICAgIGxpc3QuYWRkKG51bGwpOwotICAgICAgICBsaXN0LmFkZCgxMDApOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQobGlzdCk7Ci0gICAgICAgIGFzc2VydENvbW1vbihyZXNwb25zZSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxJbnRlZ2VyPiBkZXNlcmlhbGl6ZWRGdW5MaXN0ID0gKExpc3Q8SW50ZWdlcj4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGRlc2VyaWFsaXplZEZ1bkxpc3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKDEpLCBkZXNlcmlhbGl6ZWRGdW5MaXN0LmdldCgwKSk7Ci0gICAgICAgIGFzc2VydE51bGwoZGVzZXJpYWxpemVkRnVuTGlzdC5nZXQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IEludGVnZXIoMTAwKSwgZGVzZXJpYWxpemVkRnVuTGlzdC5nZXQoMikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGlubmVyTWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBpbm5lck1hcC5wdXQoImEiLCAiYiIpOwotCi0gICAgICAgIG1hcC5wdXQoIngiLCAxKTsKLSAgICAgICAgbWFwLnB1dCgieSIsICJzb21lIik7Ci0gICAgICAgIG1hcC5wdXQoInoiLCBpbm5lck1hcCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gY29udmVydChtYXApOwotICAgICAgICBhc3NlcnRDb21tb24ocmVzcG9uc2UpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gZGVzZXJpYWxpemVkTWFwID0gKE1hcDxTdHJpbmcsIE9iamVjdD4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGRlc2VyaWFsaXplZE1hcC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZGVzZXJpYWxpemVkTWFwLmdldCgieCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lIiwgZGVzZXJpYWxpemVkTWFwLmdldCgieSIpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlc2VyaWFsaXplZElubmVyTWFwID0gKE1hcDxTdHJpbmcsIFN0cmluZz4pIGRlc2VyaWFsaXplZE1hcC5nZXQoInoiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRlc2VyaWFsaXplZElubmVyTWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiYiIsIGRlc2VyaWFsaXplZElubmVyTWFwLmdldCgiYSIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZU1hcEVudHJpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBEYXRlIGQgPSBuZXcgRGF0ZSgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgMSk7Ci0gICAgICAgIG1hcC5wdXQodjEsIDEwMCk7Ci0gICAgICAgIG1hcC5wdXQoZCwgInRlc3QiKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBjb252ZXJ0KEl0ZXJhdG9yVXRpbHMuYXNMaXN0KG1hcC5lbnRyeVNldCgpKSk7Ci0gICAgICAgIGFzc2VydENvbW1vbihyZXNwb25zZSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PiBkZXNlcmlhbGl6ZWRFbnRyaWVzID0gKExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGRlc2VyaWFsaXplZEVudHJpZXMuc2l6ZSgpKTsKLSAgICAgICAgZGVzZXJpYWxpemVkRW50cmllcy5mb3JFYWNoKGUgLT4gewotICAgICAgICAgICAgaWYgKGUuY29udGFpbnNLZXkoIngiKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZS5nZXQoIngiKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLmNvbnRhaW5zS2V5KHYxLmlkKCkudG9TdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZS5nZXQodjEuaWQoKS50b1N0cmluZygpKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLmNvbnRhaW5zS2V5KFN0ZERhdGVGb3JtYXQuaW5zdGFuY2UuZm9ybWF0KGQpKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBlLmdldChTdGREYXRlRm9ybWF0Lmluc3RhbmNlLmZvcm1hdChkKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhaWwoIk1hcCBlbnRyaWVzIGNvbnRhaW5zIGEga2V5IHRoYXQgaXMgbm90IHBhcnQgb2Ygd2hhdCB3YXMgc2VyaWFsaXplZCIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUVkZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdjIgPSBncmFwaC5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlID0gdjEuYWRkRWRnZSgidGVzdCIsIHYyKTsKLSAgICAgICAgZS5wcm9wZXJ0eSgiYWJjIiwgMTIzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZTxFZGdlPiBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChncmFwaC5lZGdlcygpKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBjb252ZXJ0KGl0ZXJhYmxlKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IGVkZ2VMaXN0ID0gKExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGVkZ2VMaXN0LnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBkZXNlcmlhbGl6ZWRFZGdlID0gZWRnZUxpc3QuZ2V0KDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoZS5pZCgpLCBkZXNlcmlhbGl6ZWRFZGdlLmdldChHcmFwaFNPTlRva2Vucy5JRCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModjEuaWQoKSwgZGVzZXJpYWxpemVkRWRnZS5nZXQoR3JhcGhTT05Ub2tlbnMuT1VUKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2Mi5pZCgpLCBkZXNlcmlhbGl6ZWRFZGdlLmdldChHcmFwaFNPTlRva2Vucy5JTikpOwotICAgICAgICBhc3NlcnRFcXVhbHModjEubGFiZWwoKSwgZGVzZXJpYWxpemVkRWRnZS5nZXQoR3JhcGhTT05Ub2tlbnMuT1VUX0xBQkVMKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2Mi5sYWJlbCgpLCBkZXNlcmlhbGl6ZWRFZGdlLmdldChHcmFwaFNPTlRva2Vucy5JTl9MQUJFTCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZS5sYWJlbCgpLCBkZXNlcmlhbGl6ZWRFZGdlLmdldChHcmFwaFNPTlRva2Vucy5MQUJFTCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoR3JhcGhTT05Ub2tlbnMuRURHRSwgZGVzZXJpYWxpemVkRWRnZS5nZXQoR3JhcGhTT05Ub2tlbnMuVFlQRSkpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gcHJvcGVydGllcyA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSBkZXNlcmlhbGl6ZWRFZGdlLmdldChHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyMywgcHJvcGVydGllcy5nZXQoImFiYyIpKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRWRnZVByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gVGlua2VyR3JhcGgub3BlbigpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdjEgPSBncmFwaC5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYyID0gZ3JhcGguYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZSA9IHYxLmFkZEVkZ2UoInRlc3QiLCB2Mik7Ci0gICAgICAgIGUucHJvcGVydHkoImFiYyIsIDEyMyk7Ci0KLSAgICAgICAgZmluYWwgSXRlcmFibGU8UHJvcGVydHk8T2JqZWN0Pj4gaXRlcmFibGUgPSBJdGVyYXRvclV0aWxzLmxpc3QoZS5wcm9wZXJ0aWVzKCJhYmMiKSk7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQoaXRlcmFibGUpOwotICAgICAgICBhc3NlcnRDb21tb24ocmVzcG9uc2UpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4gcHJvcGVydHlMaXN0ID0gKExpc3Q8TWFwPFN0cmluZywgT2JqZWN0Pj4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHByb3BlcnR5TGlzdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0eUxpc3QuZ2V0KDApLmdldCgidmFsdWUiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVWZXJ0ZXhXaXRoRW1iZWRkZWRNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZ3JhcGguYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgNTAwKTsKLSAgICAgICAgbWFwLnB1dCgieSIsICJzb21lIik7Ci0KLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PE9iamVjdD4gZnJpZW5kcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmcmllbmRzLmFkZCgieCIpOwotICAgICAgICBmcmllbmRzLmFkZCg1KTsKLSAgICAgICAgZnJpZW5kcy5hZGQobWFwKTsKLQotICAgICAgICB2LnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSwgImZyaWVuZHMiLCBmcmllbmRzKTsKLQotICAgICAgICBmaW5hbCBMaXN0IGxpc3QgPSBJdGVyYXRvclV0aWxzLmxpc3QoZ3JhcGgudmVydGljZXMoKSk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gY29udmVydChsaXN0KTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIE9iamVjdD4+IHZlcnRleExpc3QgPSAoTGlzdDxNYXA8U3RyaW5nLCBPYmplY3Q+PikgcmVzcG9uc2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdmVydGV4TGlzdC5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gZGVzZXJpYWxpemVkVmVydGV4ID0gdmVydGV4TGlzdC5nZXQoMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2LmlkKCksIGRlc2VyaWFsaXplZFZlcnRleC5nZXQoR3JhcGhTT05Ub2tlbnMuSUQpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFZlcnRleC5ERUZBVUxUX0xBQkVMLCBkZXNlcmlhbGl6ZWRWZXJ0ZXguZ2V0KEdyYXBoU09OVG9rZW5zLkxBQkVMKSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBwcm9wZXJ0aWVzID0gKChNYXA8U3RyaW5nLCBPYmplY3Q+KSBkZXNlcmlhbGl6ZWRWZXJ0ZXguZ2V0KEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHByb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsT2JqZWN0Pj4gZnJpZW5kc1Byb3BlcnRpZXMgPSAoTGlzdDxNYXA8U3RyaW5nLE9iamVjdD4+KSBwcm9wZXJ0aWVzLmdldCgiZnJpZW5kcyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZnJpZW5kc1Byb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gZGVzZXJpYWxpemVkSW5uZXJMaXN0ID0gKExpc3Q8T2JqZWN0PikgZnJpZW5kc1Byb3BlcnRpZXMuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBkZXNlcmlhbGl6ZWRJbm5lckxpc3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgZGVzZXJpYWxpemVkSW5uZXJMaXN0LmdldCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBkZXNlcmlhbGl6ZWRJbm5lckxpc3QuZ2V0KDEpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGRlc2VyaWFsaXplZElubmVySW5uZXJNYXAgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgZGVzZXJpYWxpemVkSW5uZXJMaXN0LmdldCgyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGRlc2VyaWFsaXplZElubmVySW5uZXJNYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgZGVzZXJpYWxpemVkSW5uZXJJbm5lck1hcC5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZSIsIGRlc2VyaWFsaXplZElubmVySW5uZXJNYXAuZ2V0KCJ5IikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uTWFwV2l0aEVsZW1lbnRGb3JLZXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVGlua2VyR3JhcGggZ3JhcGggPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZUNsYXNzaWMoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBNYXA8VmVydGV4LCBJbnRlZ2VyPiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1hcC5wdXQoZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikubmV4dCgpLCAxMDAwKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBjb252ZXJ0KG1hcCk7Ci0gICAgICAgIGFzc2VydENvbW1vbihyZXNwb25zZSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgSW50ZWdlcj4gZGVzZXJpYWxpemVkTWFwID0gKE1hcDxTdHJpbmcsIEludGVnZXI+KSByZXNwb25zZS5nZXRSZXN1bHQoKS5nZXREYXRhKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBkZXNlcmlhbGl6ZWRNYXAuc2l6ZSgpKTsKLQotICAgICAgICAvLyB3aXRoIG5vIGVtYmVkZGVkIHR5cGVzIHRoZSBrZXkgKHdoaWNoIGlzIGEgdmVydGV4KSBzaW1wbHkgc2VyaWFsaXplcyBvdXQgdG8gYW4gaWQKLSAgICAgICAgLy8geyJyZXN1bHQiOnsiMSI6MTAwMH0sImNvZGUiOjIwMCwicmVxdWVzdElkIjoiMmQ2MjE2MWItOTU0NC00ZjM5LWFmNDQtNjJlYzQ5ZjlhNTk1IiwidHlwZSI6MH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKDEwMDApLCBkZXNlcmlhbGl6ZWRNYXAuZ2V0KCIxIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9UcmVlSnNvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlQ2xhc3NpYygpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIE1hcCB0ID0gZy5WKDEpLm91dCgpLnByb3BlcnRpZXMoIm5hbWUiKS50cmVlKCkubmV4dCgpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQodCk7Ci0gICAgICAgIGFzc2VydENvbW1vbihyZXNwb25zZSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTWFwPj4gZGVzZXJpYWxpemVkTWFwID0gKE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE1hcD4+KSByZXNwb25zZS5nZXRSZXN1bHQoKS5nZXREYXRhKCk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRlc2VyaWFsaXplZE1hcC5zaXplKCkpOwotCi0gICAgICAgIC8vY2hlY2sgdGhlIGZpcnN0IG9iamVjdCBhbmQgaXQncyBwcm9wZXJ0aWVzCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiB2ZXJ0ZXggPSBkZXNlcmlhbGl6ZWRNYXAuZ2V0KCIxIikuZ2V0KCJrZXkiKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxMaXN0PE1hcD4+IHZlcnRleFByb3BlcnRpZXMgPSAoTWFwPFN0cmluZywgTGlzdDxNYXA+Pil2ZXJ0ZXguZ2V0KCJwcm9wZXJ0aWVzIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCAoaW50KXZlcnRleC5nZXQoImlkIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgdmVydGV4UHJvcGVydGllcy5nZXQoIm5hbWUiKS5nZXQoMCkuZ2V0KCJ2YWx1ZSIpKTsKLQotICAgICAgICAvL2NoZWNrIG9iamVjdHMgdHJlZSBzdHJ1Y3R1cmUKLSAgICAgICAgLy9jaGVjayBWZXJ0ZXggcHJvcGVydHkKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgTWFwPFN0cmluZywgTWFwPj4gc3ViVHJlZU1hcCA9ICBkZXNlcmlhbGl6ZWRNYXAuZ2V0KCIxIikuZ2V0KCJ2YWx1ZSIpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBNYXA+PiBzdWJUcmVlTWFwMiA9IHN1YlRyZWVNYXAuZ2V0KCIyIikuZ2V0KCJ2YWx1ZSIpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHZlcnRleFByb3BlcnRpZXNEZWVwID0gc3ViVHJlZU1hcDIuZ2V0KCIyIikuZ2V0KCJrZXkiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ2YWRhcyIsIHZlcnRleFByb3BlcnRpZXNEZWVwLmdldCgidmFsdWUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsIHZlcnRleFByb3BlcnRpZXNEZWVwLmdldCgibGFiZWwiKSk7Ci0KLSAgICAgICAgLy8gY2hlY2sgc3ViaXRlbQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gdmVydGV4MiA9IHN1YlRyZWVNYXAuZ2V0KCIzIikuZ2V0KCJrZXkiKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxMaXN0PE1hcD4+IHZlcnRleFByb3BlcnRpZXMyID0gKE1hcDxTdHJpbmcsIExpc3Q8TWFwPj4pdmVydGV4Mi5nZXQoInByb3BlcnRpZXMiKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoImxvcCIsIHZlcnRleFByb3BlcnRpZXMyLmdldCgibmFtZSIpLmdldCgwKS5nZXQoInZhbHVlIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRnVsbFJlc3BvbnNlTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIGlkID0gVVVJRC5yYW5kb21VVUlEKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtZXRhRGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJ0ZXN0IiwgInRoaXMiKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJvbmUiLCAxKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGF0dHJpYnV0ZXMucHV0KCJ0ZXN0IiwgInRoYXQiKTsKLSAgICAgICAgYXR0cmlidXRlcy5wdXQoInR3byIsIDIpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChpZCkKLSAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUykKLSAgICAgICAgICAgICAgICAucmVzdWx0KCJzb21lLXJlc3VsdCIpCi0gICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgid29ya2VkIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYiA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShyZXNwb25zZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShiYik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkLCBkZXNlcmlhbGl6ZWQuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaXMiLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLmdldCgidGVzdCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXRNZXRhKCkuZ2V0KCJvbmUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZS1yZXN1bHQiLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGF0IiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKS5nZXQoInRlc3QiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpLmdldCgidHdvIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MuZ2V0VmFsdWUoKSwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3b3JrZWQiLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydENvbW1vbihmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3RJZCwgcmVzcG9uc2UuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MsIHJlc3BvbnNlLmdldFN0YXR1cygpLmdldENvZGUoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXNwb25zZU1lc3NhZ2UgY29udmVydChmaW5hbCBPYmplY3QgdG9TZXJpYWxpemUpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYiA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShyZXNwb25zZU1lc3NhZ2VCdWlsZGVyLnJlc3VsdCh0b1NlcmlhbGl6ZSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIHJldHVybiBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoYmIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNWY3N2IuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuVHJlZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5BYnN0cmFjdElvUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uR3JhcGhXcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05JbzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlRva2VuczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlZlcnNpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Xcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uVGlua2VyUG9wSmFja3Nvbk1vZHVsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25NYXBwaW5nRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5TZXJpYWxpemVyUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQubm9kZS5OdWxsTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5zZXIuc3RkLlN0ZFNjYWxhclNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQudXRpbC5TdGREYXRlRm9ybWF0OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuY29yZS5Jcy5pczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogVGhlc2UgdGVzdHMgZm9jdXMgb24gbWVzc2FnZSBzZXJpYWxpemF0aW9uIGFuZCBub3QgInJlc3VsdCIgc2VyaWFsaXphdGlvbiBhcyB0ZXN0IHNwZWNpZmljIHRvIHJlc3VsdHMgKGUuZy4KLSAqIHZlcnRpY2VzLCBlZGdlcywgYW5ub3RhdGVkIHZhbHVlcywgZXRjLikgYXJlIGhhbmRsZWQgaW4gdGhlIElPIHBhY2thZ2VzLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi1wdWJsaWMgY2xhc3MgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyVGVzdCB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiBTRVJJQUxJWkVSID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMigpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG1zZyA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJvcCIpCi0gICAgICAgICAgICAub3ZlcnJpZGVSZXF1ZXN0SWQoVVVJRC5mcm9tU3RyaW5nKCIyRDYyMTYxQi05NTQ0LTRGMzktQUY0NC02MkVDNDlGOUE1OTUiKSkuY3JlYXRlKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0TWFwcGVyIG1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKTsKLQotICAgIHByaXZhdGUgZmluYWwgVVVJRCByZXF1ZXN0SWQgPSBVVUlELmZyb21TdHJpbmcoIjY0NTcyNzJBLTQwMTgtNDUzOC1COUFFLTA4REQ1RERDMEFBMSIpOwotICAgIHByaXZhdGUgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgcmVzcG9uc2VNZXNzYWdlQnVpbGRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChyZXF1ZXN0SWQpOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbmZpZ3VyZUlvUmVnaXN0cnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIHB1dChBYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyLlRPS0VOX0lPX1JFR0lTVFJJRVMsIEFycmF5cy5hc0xpc3QoQ29sb3JJb1JlZ2lzdHJ5LmNsYXNzLmdldE5hbWUoKSkpOwotICAgICAgICB9fTsKLQotICAgICAgICBzZXJpYWxpemVyLmNvbmZpZ3VyZShjb25maWcsIG51bGwpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSB0b1NlcmlhbGl6ZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELmZyb21TdHJpbmcoIjJENjIxNjFCLTk1NDQtNEYzOS1BRjQ0LTYyRUM0OUY5QTU5NSIpKQotICAgICAgICAgICAgICAgIC5yZXN1bHQoQ29sb3IuUkVEKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcodG9TZXJpYWxpemUsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydFRoYXQoanNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5ib29sZWFuVmFsdWUoKSwgaXModHJ1ZSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImphdmE6Y29sb3IiLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVRZUEUpLnRleHRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbk51bGxSZXN1bHRSZXR1cm5zTnVsbCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgbWVzc2FnZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhtZXNzYWdlLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24ucGF0aChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTnVsbE5vZGUuZ2V0SW5zdGFuY2UoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25JdGVyYWJsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8RnVuT2JqZWN0PiBmdW5MaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoInkiKSk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KGZ1bkxpc3QpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgY29udmVydGVkLmdldCgwKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieSIsIGNvbnZlcnRlZC5nZXQoMSkuYXNUZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uSXRlcmF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEZ1bk9iamVjdD4gZnVuTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ4IikpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChmdW5MaXN0KS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGNvbnZlcnRlZC5nZXQoMCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInkiLCBjb252ZXJ0ZWQuZ2V0KDEpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhdG9yTnVsbEVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8RnVuT2JqZWN0PiBmdW5MaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG51bGwpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChmdW5MaXN0Lml0ZXJhdG9yKCkpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgY29udmVydGVkLmdldCgwKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhOdWxsTm9kZS5nZXRJbnN0YW5jZSgpLCBjb252ZXJ0ZWQuZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgY29udmVydGVkLmdldCgyKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25NYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5uZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGlubmVyTWFwLnB1dCgiYSIsICJiIik7Ci0KLSAgICAgICAgbWFwLnB1dCgieCIsIG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIG1hcC5wdXQoInkiLCAic29tZSIpOwotICAgICAgICBtYXAucHV0KCJ6IiwgaW5uZXJNYXApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChtYXApLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbk9iamVjdCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uT2JqZWN0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lIiwganNvbk9iamVjdC5nZXQoInkiKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGpzb25PYmplY3QuZ2V0KCJ4IikuYXNUZXh0KCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGlubmVySnNvbk9iamVjdCA9IGpzb25PYmplY3QuZ2V0KCJ6Iik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoaW5uZXJKc29uT2JqZWN0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJiIiwgaW5uZXJKc29uT2JqZWN0LmdldCgiYSIpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNob3VsZFNlcmlhbGl6ZU1hcEVudHJpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBEYXRlIGQgPSBuZXcgRGF0ZSgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgMSk7Ci0gICAgICAgIG1hcC5wdXQodjEsIDEwMCk7Ci0gICAgICAgIG1hcC5wdXQoZCwgInRlc3QiKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoSXRlcmF0b3JVdGlscy5hc0xpc3QobWFwKSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uT2JqZWN0ID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLSAgICAgICAganNvbk9iamVjdC5lbGVtZW50cygpLmZvckVhY2hSZW1haW5pbmcoZSAtPiB7Ci0gICAgICAgICAgICBpZiAoZS5oYXMoIngiKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZS5nZXQoIngiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuaGFzKHYxLmlkKCkudG9TdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZS5nZXQodjEuaWQoKS50b1N0cmluZygpKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuaGFzKFN0ZERhdGVGb3JtYXQuaW5zdGFuY2UuZm9ybWF0KGQpKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBlLmdldChTdGREYXRlRm9ybWF0Lmluc3RhbmNlLmZvcm1hdChkKSkuYXNUZXh0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhaWwoIk1hcCBlbnRyaWVzIGNvbnRhaW5zIGEga2V5IHRoYXQgaXMgbm90IHBhcnQgb2Ygd2hhdCB3YXMgc2VyaWFsaXplZCIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUVkZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZyA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYyID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlID0gdjEuYWRkRWRnZSgidGVzdCIsIHYyKTsKLSAgICAgICAgZS5wcm9wZXJ0eSgiYWJjIiwgMTIzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZTxFZGdlPiBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChnLmVkZ2VzKCkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoaXRlcmFibGUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGVkZ2VBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApOwotICAgICAgICBhc3NlcnROb3ROdWxsKGVkZ2VBc0pzb24pOwotCi0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIGUuaWQoKSkubG9uZ1ZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLklEKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0xvbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIHYxLmlkKCkpLmxvbmdWYWx1ZSgpLCBlZGdlQXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5PVVQpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmFzTG9uZygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCgoTG9uZykgdjIuaWQoKSkubG9uZ1ZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLklOKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0xvbmcoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlLmxhYmVsKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLkxBQkVMKS5hc1RleHQoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydGllcyA9IGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0aWVzLmdldCgiYWJjIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KCJ2YWx1ZSIpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmFzSW50KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRWRnZVByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGcgPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZSA9IHYxLmFkZEVkZ2UoInRlc3QiLCB2Mik7Ci0gICAgICAgIGUucHJvcGVydHkoImFiYyIsIDEyMyk7Ci0KLSAgICAgICAgZmluYWwgSXRlcmFibGU8UHJvcGVydHk8T2JqZWN0Pj4gaXRlcmFibGUgPSBJdGVyYXRvclV0aWxzLmxpc3QoZS5wcm9wZXJ0aWVzKCJhYmMiKSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChpdGVyYWJsZSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChjb252ZXJ0ZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydHlBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApOwotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnR5QXNKc29uKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0eUFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoInZhbHVlIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNJbnQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25JdGVyYXRvcldpdGhFbWJlZGRlZE1hcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBnID0gVGlua2VyR3JhcGgub3BlbigpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgNTAwKTsKLSAgICAgICAgbWFwLnB1dCgieSIsICJzb21lIik7Ci0KLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PE9iamVjdD4gZnJpZW5kcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmcmllbmRzLmFkZCgieCIpOwotICAgICAgICBmcmllbmRzLmFkZCg1KTsKLSAgICAgICAgZnJpZW5kcy5hZGQobWFwKTsKLQotICAgICAgICB2LnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSwgImZyaWVuZHMiLCBmcmllbmRzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZSBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChnLnZlcnRpY2VzKCkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoaXRlcmFibGUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb252ZXJ0ZWQuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSB2ZXJ0ZXhBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApOwotICAgICAgICBhc3NlcnROb3ROdWxsKHZlcnRleEFzSnNvbik7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydGllcyA9IHZlcnRleEFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuUFJPUEVSVElFUyk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwocHJvcGVydGllcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBwcm9wZXJ0aWVzLnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgZnJpZW5kUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCJmcmllbmRzIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBmcmllbmRQcm9wZXJ0aWVzLnNpemUoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGZyaWVuZHNQcm9wZXJ0eSA9IGZyaWVuZFByb3BlcnRpZXMuZ2V0KDApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZnJpZW5kc1Byb3BlcnR5KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGZyaWVuZHNQcm9wZXJ0eS5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBvYmplY3QxID0gZnJpZW5kc1Byb3BlcnR5LmdldCgwKS5hc1RleHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4Iiwgb2JqZWN0MSk7Ci0KLSAgICAgICAgZmluYWwgaW50IG9iamVjdDIgPSBmcmllbmRzUHJvcGVydHkuZ2V0KDEpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApLmFzSW50KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBvYmplY3QyKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBvYmplY3QzID0gZnJpZW5kc1Byb3BlcnR5LmdldCgyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgb2JqZWN0My5nZXQoIngiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5hc0ludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lIiwgb2JqZWN0My5nZXQoInkiKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25NYXBXaXRoRWxlbWVudEZvcktleSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlQ2xhc3NpYygpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxWZXJ0ZXgsIEludGVnZXI+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWFwLnB1dChnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5uZXh0KCksIDEwMDApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChtYXApLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0KLSAgICAgICAgLy8gd2l0aCBubyBlbWJlZGRlZCB0eXBlcyB0aGUga2V5ICh3aGljaCBpcyBhIHZlcnRleCkgc2ltcGx5IHNlcmlhbGl6ZXMgb3V0IHRvIGFuIGlkCi0gICAgICAgIC8vIHsicmVzdWx0Ijp7IjEiOjEwMDB9LCJjb2RlIjoyMDAsInJlcXVlc3RJZCI6IjJkNjIxNjFiLTk1NDQtNGYzOS1hZjQ0LTYyZWM0OWY5YTU5NSIsInR5cGUiOjB9Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDAwLCBjb252ZXJ0ZWQuZ2V0KCIxIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNJbnQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlcXVlc3ROaWNlbHlXaXRoTm9BcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFVVSUQgcmVxdWVzdCA9IFVVSUQuZnJvbVN0cmluZygiMDExQ0ZFRTktRjY0MC00ODQ0LUFDOTMtMDM0NDQ4QUMwRTgwIik7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG0gPSBTRVJJQUxJWkVSLmRlc2VyaWFsaXplUmVxdWVzdChTdHJpbmcuZm9ybWF0KCJ7XCJyZXF1ZXN0SWRcIjpcIiVzXCIsXCJvcFwiOlwiZXZhbFwifSIsIHJlcXVlc3QpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3QsIG0uZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImV2YWwiLCBtLmdldE9wKCkpOwotICAgICAgICBhc3NlcnROb3ROdWxsKG0uZ2V0QXJncygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG0uZ2V0QXJncygpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlcXVlc3ROaWNlbHlXaXRoQXJncygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3QgPSBVVUlELmZyb21TdHJpbmcoIjAxMUNGRUU5LUY2NDAtNDg0NC1BQzkzLTAzNDQ0OEFDMEU4MCIpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlcXVlc3QoU3RyaW5nLmZvcm1hdCgie1wicmVxdWVzdElkXCI6XCIlc1wiLFwib3BcIjpcImV2YWxcIixcImFyZ3NcIjp7XCJ4XCI6XCJ5XCJ9fSIsIHJlcXVlc3QpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3QsIG0uZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImV2YWwiLCBtLmdldE9wKCkpOwotICAgICAgICBhc3NlcnROb3ROdWxsKG0uZ2V0QXJncygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgbS5nZXRBcmdzKCkuZ2V0KCJ4IikpOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gU2VyaWFsaXphdGlvbkV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlcXVlc3RQYXJzZU1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlcXVlc3QoIntcInJlcXVlc3RJZFwiOlwiJXNcIixcIm9wXCI6XCJldmFsXCIsXCJhcmdzXCI6e1wieFwiOlwieVwifX0iKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUZ1bGxSZXNwb25zZU1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVVVJRCBpZCA9IFVVSUQucmFuZG9tVVVJRCgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWV0YURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1ldGFEYXRhLnB1dCgidGVzdCIsICJ0aGlzIik7Ci0gICAgICAgIG1ldGFEYXRhLnB1dCgib25lIiwgMSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBhdHRyaWJ1dGVzLnB1dCgidGVzdCIsICJ0aGF0Iik7Ci0gICAgICAgIGF0dHJpYnV0ZXMucHV0KCJ0d28iLCAyKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoaWQpCi0gICAgICAgICAgICAgICAgLnJlc3BvbnNlTWV0YURhdGEobWV0YURhdGEpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpCi0gICAgICAgICAgICAgICAgLnJlc3VsdCgic29tZS1yZXN1bHQiKQotICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIndvcmtlZCIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlc3BvbnNlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhpZCwgZGVzZXJpYWxpemVkLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGlzIiwgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldE1ldGEoKS5nZXQoInRlc3QiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLmdldCgib25lIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInNvbWUtcmVzdWx0IiwgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhhdCIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkuZ2V0KCJ0ZXN0IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKS5nZXQoInR3byIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTLmdldFZhbHVlKCksIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygid29ya2VkIiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIAotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9UcmVlSnNvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlQ2xhc3NpYygpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIFRyZWUgdCA9IGcuVigxKS5vdXQoKS5wcm9wZXJ0aWVzKCJuYW1lIikudHJlZSgpLm5leHQoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQodCkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLQotICAgICAgICAvL3Jlc3VsdCBpczogdHJlZXt2MT0+dHJlZXt2cFsnbmFtZSctPid2YWRhcyddPT5udWxsLCB2cFsnbmFtZSctPidsb3AnXT0+bnVsbCwgdnBbJ25hbWUnLT4nam9zaCddPT5udWxsfX0KLSAgICAgICAgCi0gICAgICAgIC8vY2hlY2sgdGhlIGZpcnN0IG9iamVjdCBhbmQgaXQncyBwcm9wZXJ0aWVzCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb252ZXJ0ZWQuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkKLSAgICAgICAgICAgICAgICAuZ2V0KDApCi0gICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5LRVkpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApCi0gICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5JRCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuYXNJbnQoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGNvbnZlcnRlZC5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKQotICAgICAgICAgICAgICAgIC5nZXQoMCkKLSAgICAgICAgICAgICAgICAuZ2V0KEdyYXBoU09OVG9rZW5zLktFWSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkKLSAgICAgICAgICAgICAgICAuZ2V0KEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpCi0gICAgICAgICAgICAgICAgLmdldCgibmFtZSIpCi0gICAgICAgICAgICAgICAgLmdldCgwKQotICAgICAgICAgICAgICAgIC5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUVQUk9QKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUUpLmFzVGV4dCgpKTsKLQotICAgICAgICAvL2NoZWNrIHRoZSBsZWFmcwotICAgICAgICBTZXQgZXhwZWN0ZWRWYWx1ZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCkge3sKLSAgICAgICAgICAgIGFkZCgidmFkYXMiKTsKLSAgICAgICAgICAgIGFkZCgibG9wIik7Ci0gICAgICAgICAgICBhZGQoImpvc2giKTsKLSAgICAgICAgfX07Ci0gICAgICAgIAotICAgICAgICBTZXQgYWN0dWFsVmFsdWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgYWN0dWFsVmFsdWVzLmFkZChjb252ZXJ0ZWQuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkKLSAgICAgICAgICAgICAgICAuZ2V0KDApCi0gICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRSkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkKLSAgICAgICAgICAgICAgICAuZ2V0KGkpCi0gICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5LRVkpLmdldChHcmFwaFNPTlRva2Vucy5WQUxVRVBST1ApCi0gICAgICAgICAgICAgICAgLmdldChHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKQotICAgICAgICAgICAgICAgIC5nZXQoIm5hbWUiKQotICAgICAgICAgICAgICAgIC5nZXQoMCkKLSAgICAgICAgICAgICAgICAuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFUFJPUCkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFKS5hc1RleHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRWYWx1ZXMsIGFjdHVhbFZhbHVlcyk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUb1N0cmluZ1Vua25vd25PYmplY3RzKCkgewotICAgICAgICBHcmFwaFNPTk1hcHBlciBnbTIwID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKS5jcmVhdGUoKTsKLSAgICAgICAgR3JhcGhTT05NYXBwZXIgZ20xMCA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCkudmVyc2lvbihHcmFwaFNPTlZlcnNpb24uVjFfMCkuY3JlYXRlKCk7Ci0KLSAgICAgICAgR3JhcGhXcml0ZXIgd3JpdGVyID0gR3JhcGhTT05Xcml0ZXIuYnVpbGQoKS5tYXBwZXIoZ20yMCkuY3JlYXRlKCk7Ci0gICAgICAgIC8vIHN1YnNlcXVlbnQgY3JlYXRpb25zIG9mIEdyYXBoV3JpdGVycyBhbmQgR3JhcGhTT05NYXBwZXJzIHNob3VsZCBub3QgYWZmZWN0Ci0gICAgICAgIC8vIGVhY2ggb3RoZXIuCi0gICAgICAgIEdyYXBoV3JpdGVyIHdyaXRlcjIgPSBHcmFwaFNPTldyaXRlci5idWlsZCgpLm1hcHBlcihnbTEwKS5jcmVhdGUoKTsKLQotICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHdyaXRlci53cml0ZU9iamVjdChiYW9zLCBuZXcgRnVuT2JqZWN0KCJ2YWx1ZSIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhiYW9zLnRvU3RyaW5nKCksICJcInZhbHVlXCIiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGZhaWwoInNob3VsZCBoYXZlIHN1Y2NlZWRlZCBzZXJpYWxpemluZyB0aGUgdW5rbm93biBvYmplY3QgdG8gYSBzdHJpbmciKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXF1ZXN0TWVzc2FnZUZyb21PYmplY3RNYXBwZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBPYmplY3RNYXBwZXIgb20gPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYyXzApCi0gICAgICAgICAgICAgICAgLmFkZEN1c3RvbU1vZHVsZShuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyLkdyZW1saW5TZXJ2ZXJNb2R1bGUoKSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCkuY3JlYXRlTWFwcGVyKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiByZXF1ZXN0QmluZGluZ3MgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIHJlcXVlc3RCaW5kaW5ncy5wdXQoIngiLCAxKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IHJlcXVlc3RBbGlhc2VzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICByZXF1ZXN0QWxpYXNlcy5wdXQoImciLCAic29jaWFsIik7Ci0KLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgiZXZhbCIpLnByb2Nlc3Nvcigic2Vzc2lvbiIpLgotICAgICAgICAgICAgICAgIG92ZXJyaWRlUmVxdWVzdElkKFVVSUQuZnJvbVN0cmluZygiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IikpLgotICAgICAgICAgICAgICAgIGFkZCgiZ3JlbWxpbiIsICJzb2NpYWwuVih4KSIsICJiaW5kaW5ncyIsIHJlcXVlc3RCaW5kaW5ncywgImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5IiwgImFsaWFzZXMiLCByZXF1ZXN0QWxpYXNlcywgInNlc3Npb24iLCBVVUlELmZyb21TdHJpbmcoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpKS5jcmVhdGUoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IG9tLndyaXRlVmFsdWVBc1N0cmluZyhyZXF1ZXN0TWVzc2FnZSk7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlYWRSZXF1ZXN0TWVzc2FnZSA9IG9tLnJlYWRWYWx1ZShqc29uLCBSZXF1ZXN0TWVzc2FnZS5jbGFzcyk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3RNZXNzYWdlLmdldE9wKCksIHJlYWRSZXF1ZXN0TWVzc2FnZS5nZXRPcCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3RNZXNzYWdlLmdldFByb2Nlc3NvcigpLCByZWFkUmVxdWVzdE1lc3NhZ2UuZ2V0UHJvY2Vzc29yKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVxdWVzdE1lc3NhZ2UuZ2V0UmVxdWVzdElkKCksIHJlYWRSZXF1ZXN0TWVzc2FnZS5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0TWVzc2FnZS5nZXRBcmdzKCksIHJlYWRSZXF1ZXN0TWVzc2FnZS5nZXRBcmdzKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZU1lc3NhZ2VGcm9tT2JqZWN0TWFwcGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgT2JqZWN0TWFwcGVyIG9tID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKQotICAgICAgICAgICAgICAgIC5hZGRDdXN0b21Nb2R1bGUobmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMi5HcmVtbGluU2VydmVyTW9kdWxlKCkpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpLmNyZWF0ZU1hcHBlcigpOwotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlTW9kZXJuKCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELmZyb21TdHJpbmcoIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIpKS4KLSAgICAgICAgICAgICAgICBjb2RlKG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTKS4KLSAgICAgICAgICAgICAgICByZXN1bHQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChncmFwaC52ZXJ0aWNlcygpLm5leHQoKSkpLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXNwSnNvbiA9IG9tLndyaXRlVmFsdWVBc1N0cmluZyhyZXNwb25zZU1lc3NhZ2UpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlUmVhZCA9IG9tLnJlYWRWYWx1ZShyZXNwSnNvbiwgUmVzcG9uc2VNZXNzYWdlLmNsYXNzKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMocmVzcG9uc2VNZXNzYWdlLmdldFJlcXVlc3RJZCgpLCByZXNwb25zZU1lc3NhZ2VSZWFkLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXRNZXRhKCksIHJlc3BvbnNlTWVzc2FnZVJlYWQuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3BvbnNlTWVzc2FnZS5nZXRSZXN1bHQoKS5nZXREYXRhKCksIHJlc3BvbnNlTWVzc2FnZVJlYWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCksIHJlc3BvbnNlTWVzc2FnZVJlYWQuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlc3BvbnNlTWVzc2FnZS5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSwgcmVzcG9uc2VNZXNzYWdlUmVhZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmlzU3VjY2VzcygpLCByZXNwb25zZU1lc3NhZ2VSZWFkLmdldFN0YXR1cygpLmdldENvZGUoKS5pc1N1Y2Nlc3MoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXNwb25zZU1lc3NhZ2UuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCByZXNwb25zZU1lc3NhZ2VSZWFkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZWdpc3RlckdyZW1saW5TZXJ2ZXJNb2R1bGVBdXRvbWF0aWNhbGx5V2l0aE1hcHBlcigpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjIuYnVpbGQoKSk7Ci0gICAgICAgIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiBncmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKGJ1aWxkZXIpOwotCi0gICAgICAgIFJlc3BvbnNlTWVzc2FnZSBybSA9IGNvbnZlcnQoImhlbGxvIiwgZ3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJtLmdldFJlcXVlc3RJZCgpLCByZXF1ZXN0SWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMocm0uZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLCAiaGVsbG8iKTsKLSAgICB9Ci0KLQotICAgIEBUZXN0Ci0gICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsT25NZXNzYWdlU2VyaWFsaXplcldpdGhNYXBwZXJJZk5vR3JlbWxpblNlcnZlck1vZHVsZSgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjIuYnVpbGQoKSk7Ci0gICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMiBncmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYyKGJ1aWxkZXIuY3JlYXRlKCkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb252ZXJ0KCJoZWxsbyIsIGdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMik7Ci0gICAgICAgICAgICBmYWlsKCJTZXJpYWxpemF0aW9uIHNob3VsZCBoYXZlIGZhaWxlZCBzaW5jZSBubyBHcmVtbGluU2VydmVyTW9kdWxlIHJlZ2lzdGVyZWQuIik7Ci0gICAgICAgIH0gY2F0Y2ggKFNlcmlhbGl6YXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKS5jb250YWlucygiQ291bGQgbm90IGZpbmQgYSB0eXBlIGlkZW50aWZpZXIgZm9yIHRoZSBjbGFzcyIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgSnNvbk1hcHBpbmdFeGNlcHRpb24pOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlLmdldENhdXNlKCkuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlc3BvbnNlTWVzc2FnZSBjb252ZXJ0KGZpbmFsIE9iamVjdCB0b1NlcmlhbGl6ZSwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBCeXRlQnVmIGJiID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHJlc3BvbnNlTWVzc2FnZUJ1aWxkZXIucmVzdWx0KHRvU2VyaWFsaXplKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShiYik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBGdW5PYmplY3QgewotICAgICAgICBwcml2YXRlIFN0cmluZyB2YWw7Ci0KLSAgICAgICAgcHVibGljIEZ1bk9iamVjdChTdHJpbmcgdmFsKSB7Ci0gICAgICAgICAgICB0aGlzLnZhbCA9IHZhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy52YWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9ySW9SZWdpc3RyeSBleHRlbmRzIEFic3RyYWN0SW9SZWdpc3RyeSB7Ci0gICAgICAgIHB1YmxpYyBDb2xvcklvUmVnaXN0cnkoKSB7Ci0gICAgICAgICAgICByZWdpc3RlcihHcmFwaFNPTklvLmNsYXNzLCBudWxsLCBuZXcgQ29sb3JTaW1wbGVNb2R1bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9yU2ltcGxlTW9kdWxlIGV4dGVuZHMgVGlua2VyUG9wSmFja3Nvbk1vZHVsZSB7Ci0gICAgICAgIHB1YmxpYyBDb2xvclNpbXBsZU1vZHVsZSgpIHsKLSAgICAgICAgICAgIHN1cGVyKCJjb2xvci1mdW4iKTsKLSAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoQ29sb3IuY2xhc3MsIG5ldyBDb2xvclNlcmlhbGl6ZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIE1hcDxDbGFzcywgU3RyaW5nPiBnZXRUeXBlRGVmaW5pdGlvbnMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXA8Q2xhc3MsIFN0cmluZz4oKXt7Ci0gICAgICAgICAgICAgICAgcHV0KENvbG9yLmNsYXNzLCAiY29sb3IiKTsKLSAgICAgICAgICAgIH19OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZU5hbWVzcGFjZSgpIHsKLSAgICAgICAgICAgIHJldHVybiAiamF2YSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9yU2VyaWFsaXplciBleHRlbmRzIFN0ZFNjYWxhclNlcmlhbGl6ZXI8Q29sb3I+IHsKLSAgICAgICAgcHVibGljIENvbG9yU2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKENvbG9yLmNsYXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgQ29sb3IgY29sb3IsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvbkdlbmVyYXRpb25FeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUJvb2xlYW4oY29sb3IuZXF1YWxzKENvbG9yLlJFRCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjNSb3VuZFRyaXBUZXN0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWM1JvdW5kVHJpcFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhZDExZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWM1JvdW5kVHJpcFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5Db25zdW1lcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotcHVibGljIGNsYXNzIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWM1JvdW5kVHJpcFRlc3QgZXh0ZW5kcyBBYnN0cmFjdFJvdW5kVHJpcFRlc3QgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBVVUlEIHJlcXVlc3RJZCA9IFVVSUQuZnJvbVN0cmluZygiNjQ1NzI3MkEtNDAxOC00NTM4LUI5QUUtMDhERDVEREMwQUExIik7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlciByZXNwb25zZU1lc3NhZ2VCdWlsZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKHJlcXVlc3RJZCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IgPSBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVDsKLQotICAgIHB1YmxpYyBmaW5hbCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgc2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMoKTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBza2lwcGVkVGVzdHMKLSAgICAgICAgICAgID0gQXJyYXlzLmFzTGlzdCgiUmVmZXJlbmNlVmVydGV4IiwgIlJlZmVyZW5jZVZlcnRleFByb3BlcnR5IiwgIlJlZmVyZW5jZVByb3BlcnR5IiwgIkdyYXBoIik7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFdyaXRlQW5kUmVhZCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBzb21lIHRlc3RzIGFyZSBub3QgdmFsaWQgZm9yIGpzb24KLSAgICAgICAgaWYgKHNraXBwZWRUZXN0cy5jb250YWlucyhuYW1lKSkgcmV0dXJuOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0KLSAgICAgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2VNZXNzYWdlQnVpbGRlci5yZXN1bHQodmFsdWUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICAgICAgZmluYWwgT2JqZWN0IHJlc3VsdCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShiYikuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotCi0gICAgICAgICAgICBPcHRpb25hbC5vZk51bGxhYmxlKGFzc2VydGlvbikub3JFbHNlKChDb25zdW1lcikgciAtPiBhc3NlcnRFcXVhbHModmFsdWUsIHIpKS5hY2NlcHQocmVzdWx0KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOWMwZTUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5NZXNzYWdlU2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlcXVlc3RNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVN0YXR1c0NvZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuVHJlZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlhNb2R1bGVWMzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25NYXBwaW5nRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlVVSUQ7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1vY2tpdG9IYW1jcmVzdE1hdGNoZXJBZGFwdGVyLnJlZmxlY3Rpb25FcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5oYXNJdGVtSW5BcnJheTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotLyoqCi0gKiBTZXJpYWxpemVyIHRlc3RzIHRoYXQgY292ZXIgbm9uLWxvc3N5IHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIG1ldGhvZHMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKLXB1YmxpYyBjbGFzcyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjNUZXN0IHsKLQotICAgIHByaXZhdGUgZmluYWwgVVVJRCByZXF1ZXN0SWQgPSBVVUlELmZyb21TdHJpbmcoIjY0NTcyNzJBLTQwMTgtNDUzOC1COUFFLTA4REQ1RERDMEFBMSIpOwotICAgIHByaXZhdGUgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgcmVzcG9uc2VNZXNzYWdlQnVpbGRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChyZXF1ZXN0SWQpOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7Ci0KLSAgICBwdWJsaWMgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzKCk7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUl0ZXJhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxJbnRlZ2VyPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGxpc3QuYWRkKDEpOwotICAgICAgICBsaXN0LmFkZCgxMDApOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQobGlzdCk7Ci0gICAgICAgIGFzc2VydENvbW1vbihyZXNwb25zZSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxJbnRlZ2VyPiBkZXNlcmlhbGl6ZWRGdW5MaXN0ID0gKExpc3Q8SW50ZWdlcj4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGRlc2VyaWFsaXplZEZ1bkxpc3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxKSwgZGVzZXJpYWxpemVkRnVuTGlzdC5nZXQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci52YWx1ZU9mKDEwMCksIGRlc2VyaWFsaXplZEZ1bkxpc3QuZ2V0KDEpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUl0ZXJhYmxlV2l0aE51bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEludGVnZXI+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgbGlzdC5hZGQoMSk7Ci0gICAgICAgIGxpc3QuYWRkKG51bGwpOwotICAgICAgICBsaXN0LmFkZCgxMDApOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQobGlzdCk7Ci0gICAgICAgIGFzc2VydENvbW1vbihyZXNwb25zZSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxJbnRlZ2VyPiBkZXNlcmlhbGl6ZWRGdW5MaXN0ID0gKExpc3Q8SW50ZWdlcj4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGRlc2VyaWFsaXplZEZ1bkxpc3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxKSwgZGVzZXJpYWxpemVkRnVuTGlzdC5nZXQoMCkpOwotICAgICAgICBhc3NlcnROdWxsKGRlc2VyaWFsaXplZEZ1bkxpc3QuZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudmFsdWVPZigxMDApLCBkZXNlcmlhbGl6ZWRGdW5MaXN0LmdldCgyKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5uZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGlubmVyTWFwLnB1dCgiYSIsICJiIik7Ci0KLSAgICAgICAgbWFwLnB1dCgidyIsIHRydWUpOwotICAgICAgICBtYXAucHV0KCJ4IiwgMSk7Ci0gICAgICAgIG1hcC5wdXQoInkiLCAic29tZSIpOwotICAgICAgICBtYXAucHV0KCJ6IiwgaW5uZXJNYXApOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQobWFwKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGRlc2VyaWFsaXplZE1hcCA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KSByZXNwb25zZS5nZXRSZXN1bHQoKS5nZXREYXRhKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCBkZXNlcmlhbGl6ZWRNYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHRydWUsIGRlc2VyaWFsaXplZE1hcC5nZXQoInciKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBkZXNlcmlhbGl6ZWRNYXAuZ2V0KCJ4IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInNvbWUiLCBkZXNlcmlhbGl6ZWRNYXAuZ2V0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gZGVzZXJpYWxpemVkSW5uZXJNYXAgPSAoTWFwPFN0cmluZywgU3RyaW5nPikgZGVzZXJpYWxpemVkTWFwLmdldCgieiIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZGVzZXJpYWxpemVkSW5uZXJNYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJiIiwgZGVzZXJpYWxpemVkSW5uZXJNYXAuZ2V0KCJhIikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplTWFwRW50cmllcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZ3JhcGguYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIERhdGUgZCA9IG5ldyBEYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPE9iamVjdCwgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1hcC5wdXQoIngiLCAxKTsKLSAgICAgICAgbWFwLnB1dCh2MSwgMTAwKTsKLSAgICAgICAgbWFwLnB1dChkLCAidGVzdCIpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQoSXRlcmF0b3JVdGlscy5hc0xpc3QobWFwLmVudHJ5U2V0KCkpKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE1hcDxPYmplY3QsIE9iamVjdD4+IGRlc2VyaWFsaXplZEVudHJpZXMgPSAoTGlzdDxNYXA8T2JqZWN0LCBPYmplY3Q+PikgcmVzcG9uc2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgZGVzZXJpYWxpemVkRW50cmllcy5zaXplKCkpOwotICAgICAgICBkZXNlcmlhbGl6ZWRFbnRyaWVzLmZvckVhY2gobSAtPiB7Ci0gICAgICAgICAgICBmaW5hbCBNYXAuRW50cnk8T2JqZWN0LE9iamVjdD4gZSA9IG0uZW50cnlTZXQoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChlLmdldEtleSgpLmVxdWFscygieCIpKQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBlLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoZS5nZXRLZXkoKSBpbnN0YW5jZW9mIFZlcnRleCAmJiBlLmdldEtleSgpLmVxdWFscyh2MSkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuZ2V0S2V5KCkgaW5zdGFuY2VvZiBEYXRlKQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygidGVzdCIsIGUuZ2V0VmFsdWUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZmFpbCgiTWFwIGVudHJpZXMgY29udGFpbnMgYSBrZXkgdGhhdCBpcyBub3QgcGFydCBvZiB3aGF0IHdhcyBzZXJpYWxpemVkIik7Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRWRnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZ3JhcGguYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBFZGdlIGUgPSB2MS5hZGRFZGdlKCJ0ZXN0IiwgdjIpOwotICAgICAgICBlLnByb3BlcnR5KCJhYmMiLCAxMjMpOwotCi0gICAgICAgIGZpbmFsIEl0ZXJhYmxlPEVkZ2U+IGl0ZXJhYmxlID0gSXRlcmF0b3JVdGlscy5saXN0KGdyYXBoLmVkZ2VzKCkpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IGNvbnZlcnQoaXRlcmFibGUpOwotICAgICAgICBhc3NlcnRDb21tb24ocmVzcG9uc2UpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8RWRnZT4gZWRnZUxpc3QgPSAoTGlzdDxFZGdlPikgcmVzcG9uc2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZWRnZUxpc3Quc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBFZGdlIGRlc2VyaWFsaXplZEVkZ2UgPSBlZGdlTGlzdC5nZXQoMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlLmlkKCksIGRlc2VyaWFsaXplZEVkZ2UuaWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2MS5pZCgpLCBkZXNlcmlhbGl6ZWRFZGdlLm91dFZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModjIuaWQoKSwgZGVzZXJpYWxpemVkRWRnZS5pblZlcnRleCgpLmlkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHModjEubGFiZWwoKSwgZGVzZXJpYWxpemVkRWRnZS5vdXRWZXJ0ZXgoKS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHYyLmxhYmVsKCksIGRlc2VyaWFsaXplZEVkZ2UuaW5WZXJ0ZXgoKS5sYWJlbCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGUubGFiZWwoKSwgZGVzZXJpYWxpemVkRWRnZS5sYWJlbCgpKTsKLQotICAgICAgICBmaW5hbCBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGRlc2VyaWFsaXplZEVkZ2UucHJvcGVydGllcygpLmZvckVhY2hSZW1haW5pbmcocHJvcGVydGllczo6YWRkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHByb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImFiYyIsIHByb3BlcnRpZXMuZ2V0KDApLmtleSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyMywgcHJvcGVydGllcy5nZXQoMCkudmFsdWUoKSk7Ci0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUVkZ2VQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBncmFwaCA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZ3JhcGguYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBFZGdlIGUgPSB2MS5hZGRFZGdlKCJ0ZXN0IiwgdjIpOwotICAgICAgICBlLnByb3BlcnR5KCJhYmMiLCAxMjMpOwotCi0gICAgICAgIGZpbmFsIEl0ZXJhYmxlPFByb3BlcnR5PE9iamVjdD4+IGl0ZXJhYmxlID0gSXRlcmF0b3JVdGlscy5saXN0KGUucHJvcGVydGllcygiYWJjIikpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBjb252ZXJ0KGl0ZXJhYmxlKTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0eUxpc3QgPSAoTGlzdDxQcm9wZXJ0eT4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHByb3BlcnR5TGlzdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0eUxpc3QuZ2V0KDApLnZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVmVydGV4V2l0aEVtYmVkZGVkTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gVGlua2VyR3JhcGgub3BlbigpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWFwLnB1dCgieCIsIDUwMCk7Ci0gICAgICAgIG1hcC5wdXQoInkiLCAic29tZSIpOwotCi0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxPYmplY3Q+IGZyaWVuZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZnJpZW5kcy5hZGQoIngiKTsKLSAgICAgICAgZnJpZW5kcy5hZGQoNSk7Ci0gICAgICAgIGZyaWVuZHMuYWRkKG1hcCk7Ci0KLSAgICAgICAgdi5wcm9wZXJ0eShWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zaW5nbGUsICJmcmllbmRzIiwgZnJpZW5kcyk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxWZXJ0ZXg+IGxpc3QgPSBJdGVyYXRvclV0aWxzLmxpc3QoZ3JhcGgudmVydGljZXMoKSk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gY29udmVydChsaXN0KTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBMaXN0PFZlcnRleD4gdmVydGV4TGlzdCA9IChMaXN0PFZlcnRleD4pIHJlc3BvbnNlLmdldFJlc3VsdCgpLmdldERhdGEoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHZlcnRleExpc3Quc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBWZXJ0ZXggZGVzZXJpYWxpemVkVmVydGV4ID0gdmVydGV4TGlzdC5nZXQoMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyh2LmlkKCksIGRlc2VyaWFsaXplZFZlcnRleC5pZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFZlcnRleC5ERUZBVUxUX0xBQkVMLCBkZXNlcmlhbGl6ZWRWZXJ0ZXgubGFiZWwoKSk7Ci0KLSAgICAgICAgZmluYWwgTGlzdDxWZXJ0ZXhQcm9wZXJ0eT4gcHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBkZXNlcmlhbGl6ZWRWZXJ0ZXgucHJvcGVydGllcygpLmZvckVhY2hSZW1haW5pbmcocHJvcGVydGllczo6YWRkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHByb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBWZXJ0ZXhQcm9wZXJ0eSBmcmllbmRzUHJvcGVydHkgPSBwcm9wZXJ0aWVzLmdldCgwKTsKLSAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IGRlc2VyaWFsaXplZElubmVyTGlzdCA9IChMaXN0PE9iamVjdD4pIGZyaWVuZHNQcm9wZXJ0eS52YWx1ZSgpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygzLCBkZXNlcmlhbGl6ZWRJbm5lckxpc3Quc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgZGVzZXJpYWxpemVkSW5uZXJMaXN0LmdldCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBkZXNlcmlhbGl6ZWRJbm5lckxpc3QuZ2V0KDEpKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGRlc2VyaWFsaXplZElubmVySW5uZXJNYXAgPSAoTWFwPFN0cmluZywgT2JqZWN0PikgZGVzZXJpYWxpemVkSW5uZXJMaXN0LmdldCgyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGRlc2VyaWFsaXplZElubmVySW5uZXJNYXAuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgZGVzZXJpYWxpemVkSW5uZXJJbm5lck1hcC5nZXQoIngiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZSIsIGRlc2VyaWFsaXplZElubmVySW5uZXJNYXAuZ2V0KCJ5IikpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uTWFwV2l0aEVsZW1lbnRGb3JLZXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVGlua2VyR3JhcGggZ3JhcGggPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZUNsYXNzaWMoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBNYXA8VmVydGV4LCBJbnRlZ2VyPiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm5leHQoKTsKLSAgICAgICAgbWFwLnB1dCh2MSwgMTAwMCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gY29udmVydChtYXApOwotICAgICAgICBhc3NlcnRDb21tb24ocmVzcG9uc2UpOwotCi0gICAgICAgIGZpbmFsIE1hcDxWZXJ0ZXgsIEludGVnZXI+IGRlc2VyaWFsaXplZE1hcCA9IChNYXA8VmVydGV4LCBJbnRlZ2VyPikgcmVzcG9uc2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZGVzZXJpYWxpemVkTWFwLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhJbnRlZ2VyLnZhbHVlT2YoMTAwMCksIGRlc2VyaWFsaXplZE1hcC5nZXQodjEpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvVHJlZUpzb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVGlua2VyR3JhcGggZ3JhcGggPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZUNsYXNzaWMoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBUcmVlIHQgPSBnLlYoMSkub3V0KCkucHJvcGVydGllcygibmFtZSIpLnRyZWUoKS5uZXh0KCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gY29udmVydCh0KTsKLSAgICAgICAgYXNzZXJ0Q29tbW9uKHJlc3BvbnNlKTsKLQotICAgICAgICBmaW5hbCBUcmVlIGRlc2VyaWFsaXplZFRyZWUgPSAoVHJlZSlyZXNwb25zZS5nZXRSZXN1bHQoKS5nZXREYXRhKCk7Ci0KLSAgICAgICAgLy9jaGVjayB0aGUgZmlyc3Qgb2JqZWN0IGFuZCBpdHMga2V5J3MgcHJvcGVydGllcwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZGVzZXJpYWxpemVkVHJlZS5zaXplKCkpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9ICgoVmVydGV4KSBkZXNlcmlhbGl6ZWRUcmVlLmtleVNldCgpLml0ZXJhdG9yKCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHYuaWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB2LnByb3BlcnR5KCJuYW1lIikudmFsdWUoKSk7Ci0KLSAgICAgICAgZmluYWwgVHJlZSBmaXJzdFRyZWUgPSAoVHJlZSlkZXNlcmlhbGl6ZWRUcmVlLmdldCh2KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGZpcnN0VHJlZS5zaXplKCkpOwotICAgICAgICBJdGVyYXRvcjxWZXJ0ZXg+IHZlcnRleEtleXMgPSBmaXJzdFRyZWUua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQotICAgICAgICBNYXAgZXhwZWN0ZWRWYWx1ZXMgPSBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBTdHJpbmc+KCkge3sKLSAgICAgICAgICAgIHB1dCgyLCAidmFkYXMiKTsKLSAgICAgICAgICAgIHB1dCg0LCAibG9wIik7Ci0gICAgICAgICAgICBwdXQoNiwgImpvc2giKTsKLSAgICAgICAgfX07Ci0gICAgICAgIAotICAgICAgICBNYXAgYWN0dWFsVmFsdWVzID0gbmV3IEhhc2hNYXA8SW50ZWdlciwgU3RyaW5nPigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAgVHJlZSB0MiA9IChUcmVlKWZpcnN0VHJlZS5nZXQodmVydGV4S2V5cy5uZXh0KCkpOwotICAgICAgICAgICAgVmVydGV4UHJvcGVydHkgdnAgPSAoVmVydGV4UHJvcGVydHkpdDIua2V5U2V0KCkuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgICAgICAgICBhY3R1YWxWYWx1ZXMucHV0KHZwLmlkKCksIHZwLnZhbHVlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkVmFsdWVzLCBhY3R1YWxWYWx1ZXMpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRnVsbFJlc3BvbnNlTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIGlkID0gVVVJRC5yYW5kb21VVUlEKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtZXRhRGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJ0ZXN0IiwgInRoaXMiKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJvbmUiLCAxKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGF0dHJpYnV0ZXMucHV0KCJ0ZXN0IiwgInRoYXQiKTsKLSAgICAgICAgYXR0cmlidXRlcy5wdXQoInR3byIsIDIpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChpZCkKLSAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUykKLSAgICAgICAgICAgICAgICAucmVzdWx0KCJzb21lLXJlc3VsdCIpCi0gICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgid29ya2VkIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYiA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShyZXNwb25zZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShiYik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkLCBkZXNlcmlhbGl6ZWQuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaXMiLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLmdldCgidGVzdCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXRNZXRhKCkuZ2V0KCJvbmUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZS1yZXN1bHQiLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGF0IiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKS5nZXQoInRlc3QiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpLmdldCgidHdvIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MuZ2V0VmFsdWUoKSwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3b3JrZWQiLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplTm90UHJlZGljYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXF1ZXN0TWVzc2FnZVdpdGhQID0gIntcInJlcXVlc3RJZFwiOntcIkB0eXBlXCI6XCJnOlVVSURcIixcIkB2YWx1ZVwiOlwiMDM5N2I5YzAtZmZhYi00NzBlLWE2YTgtNjQ0ZmM4MGMwMWQ2XCJ9LFwib3BcIjpcImJ5dGVjb2RlXCIsXCJwcm9jZXNzb3JcIjpcInRyYXZlcnNhbFwiLFwiYXJnc1wiOntcImdyZW1saW5cIjp7XCJAdHlwZVwiOlwiZzpCeXRlY29kZVwiLFwiQHZhbHVlXCI6e1wic3RlcFwiOltbXCJWXCJdLFtcImhhc0xhYmVsXCIsXCJwZXJzb25cIl0sW1wiaGFzXCIsXCJhZ2VcIix7XCJAdHlwZVwiOlwiZzpQXCIsXCJAdmFsdWVcIjp7XCJwcmVkaWNhdGVcIjpcIm5vdFwiLFwidmFsdWVcIjp7XCJAdHlwZVwiOlwiZzpQXCIsXCJAdmFsdWVcIjp7XCJwcmVkaWNhdGVcIjpcImx0ZVwiLFwidmFsdWVcIjp7XCJAdHlwZVwiOlwiZzpJbnQzMlwiLFwiQHZhbHVlXCI6MTB9fX19fV1dfX0sXCJhbGlhc2VzXCI6e1wiZ1wiOlwiZ21vZGVyblwifX19IjsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYiA9IGFsbG9jYXRvci5idWZmZXIocmVxdWVzdE1lc3NhZ2VXaXRoUC5sZW5ndGgoKSk7Ci0gICAgICAgIGJiLndyaXRlQnl0ZXMocmVxdWVzdE1lc3NhZ2VXaXRoUC5nZXRCeXRlcygpKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbSA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KGJiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJieXRlY29kZSIsIG0uZ2V0T3AoKSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwobS5nZXRBcmdzKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXF1ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0ID0gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm91dCgpLmFzQWRtaW4oKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGFsaWFzZXMucHV0KCJnIiwiZyIpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0JZVEVDT0RFKQotICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInRyYXZlcnNhbCIpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgdC5nZXRCeXRlY29kZSgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfQUxJQVNFUywgYWxpYXNlcykKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShyZXF1ZXN0LCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBpbnQgbWltZUxlbiA9IGJ1ZmZlci5yZWFkQnl0ZSgpOwotICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVttaW1lTGVuXTsKLSAgICAgICAgYnVmZmVyLnJlYWRCeXRlcyhieXRlcyk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBtaW1lVHlwZSA9IG5ldyBTdHJpbmcoYnl0ZXMsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KGJ1ZmZlcik7Ci0gICAgICAgIGFzc2VydFRoYXQocmVxdWVzdCwgcmVmbGVjdGlvbkVxdWFscyhkZXNlcmlhbGl6ZWQpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChzZXJpYWxpemVyLm1pbWVUeXBlc1N1cHBvcnRlZCgpLCBoYXNJdGVtSW5BcnJheShtaW1lVHlwZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmVnaXN0ZXJHcmVtbGluU2VydmVyTW9kdWxlQXV0b21hdGljYWxseVdpdGhNYXBwZXIoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIEdyYXBoU09OTWFwcGVyLkJ1aWxkZXIgYnVpbGRlciA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCkuYWRkQ3VzdG9tTW9kdWxlKEdyYXBoU09OWE1vZHVsZVYzLmJ1aWxkKCkpOwotICAgICAgICBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgZ3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMyhidWlsZGVyKTsKLQotICAgICAgICBSZXNwb25zZU1lc3NhZ2Ugcm0gPSBjb252ZXJ0KCJoZWxsbyIsIGdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhybS5nZXRSZXF1ZXN0SWQoKSwgcmVxdWVzdElkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJtLmdldFJlc3VsdCgpLmdldERhdGEoKSwgImhlbGxvIik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsT25NZXNzYWdlU2VyaWFsaXplcldpdGhNYXBwZXJJZk5vR3JlbWxpblNlcnZlck1vZHVsZSgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05NYXBwZXIuQnVpbGRlciBidWlsZGVyID0gR3JhcGhTT05NYXBwZXIuYnVpbGQoKS5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKSk7Ci0gICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMyBncmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjMgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclYzKGJ1aWxkZXIuY3JlYXRlKCkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjb252ZXJ0KCJoZWxsbyIsIGdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWMyk7Ci0gICAgICAgICAgICBmYWlsKCJTZXJpYWxpemF0aW9uIHNob3VsZCBoYXZlIGZhaWxlZCBzaW5jZSBubyBHcmVtbGluU2VydmVyTW9kdWxlIHJlZ2lzdGVyZWQuIik7Ci0gICAgICAgIH0gY2F0Y2ggKFNlcmlhbGl6YXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKS5jb250YWlucygiQ291bGQgbm90IGZpbmQgYSB0eXBlIGlkZW50aWZpZXIgZm9yIHRoZSBjbGFzcyIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoZS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgSnNvbk1hcHBpbmdFeGNlcHRpb24pOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlLmdldENhdXNlKCkuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Q29tbW9uKGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSkgewotICAgICAgICBhc3NlcnRFcXVhbHMocmVxdWVzdElkLCByZXNwb25zZS5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUywgcmVzcG9uc2UuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlc3BvbnNlTWVzc2FnZSBjb252ZXJ0KGZpbmFsIE9iamVjdCB0b1NlcmlhbGl6ZSwgTWVzc2FnZVNlcmlhbGl6ZXI8Pz4gc2VyaWFsaXplcikgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBCeXRlQnVmIGJiID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHJlc3BvbnNlTWVzc2FnZUJ1aWxkZXIucmVzdWx0KHRvU2VyaWFsaXplKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShiYik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXNwb25zZU1lc3NhZ2UgY29udmVydChmaW5hbCBPYmplY3QgdG9TZXJpYWxpemUpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnQodG9TZXJpYWxpemUsIHRoaXMuc2VyaWFsaXplcik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRSb3VuZFRyaXBUZXN0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNFJvdW5kVHJpcFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWUxNTJhCi0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRSb3VuZFRyaXBUZXN0LmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CitpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkNvbnN1bWVyOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitwdWJsaWMgY2xhc3MgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0Um91bmRUcmlwVGVzdCBleHRlbmRzIEFic3RyYWN0Um91bmRUcmlwVGVzdCB7CisgICAgcHJpdmF0ZSBmaW5hbCBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlciByZXNwb25zZU1lc3NhZ2VCdWlsZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IgPSBVbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVDsKKworICAgIHB1YmxpYyBmaW5hbCBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQgc2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQoKTsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8U3RyaW5nPiBza2lwcGVkVGVzdHMKKyAgICAgICAgICAgID0gQXJyYXlzLmFzTGlzdCgiUmVmZXJlbmNlVmVydGV4IiwgIlJlZmVyZW5jZVZlcnRleFByb3BlcnR5IiwgIlJlZmVyZW5jZVByb3BlcnR5IiwgIkdyYXBoIiwgIkJ1bGtMaXN0Iik7IC8vIGVuYWJsZSBCdWxrTGlzdCBhZnRlciBpbXBsZW1lbnRlZAorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRXcml0ZUFuZFJlYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gc29tZSB0ZXN0cyBhcmUgbm90IHZhbGlkIGZvciBqc29uCisgICAgICAgIGlmIChza2lwcGVkVGVzdHMuY29udGFpbnMobmFtZSkpIHJldHVybjsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICAgICAgLy8gR3JhcGhTT052NCBhc3N1bWVzIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGluIGEgbGlzdC4KKyAgICAgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkoCisgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlTWVzc2FnZUJ1aWxkZXIucmVzdWx0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QodmFsdWUpKS5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykuY3JlYXRlKCksIGFsbG9jYXRvcik7CisgICAgICAgICAgICBmaW5hbCBPYmplY3QgcmVzdWx0ID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJiKS5nZXRSZXN1bHQoKS5nZXREYXRhKCkuZ2V0KDApOworCisgICAgICAgICAgICBPcHRpb25hbC5vZk51bGxhYmxlKGFzc2VydGlvbikub3JFbHNlKChDb25zdW1lcikgciAtPiBhc3NlcnRFcXVhbHModmFsdWUsIHIpKS5hY2NlcHQocmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0VGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNGRmYQotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOworCitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IGlvLm5ldHR5LnV0aWwuQ2hhcnNldFV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQWJzdHJhY3RJb1JlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OSW87CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05NYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05WZXJzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OWE1vZHVsZVY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLlRpbmtlclBvcEphY2tzb25Nb2R1bGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLk1lc3NhZ2VTZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZVJlc3VsdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uUGFyc2VyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvblByb2Nlc3NpbmdFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuRGVzZXJpYWxpemF0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLmRlc2VyLnN0ZC5TdGREZXNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuanNvbnR5cGUuVHlwZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRTZXJpYWxpemVyOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgamF2YS5hd3QuKjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2Vucy5UT0tFTl9EQVRBOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCitwdWJsaWMgY2xhc3MgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0VGVzdCB7CisKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvciA9IFVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOworICAgIHByaXZhdGUgZmluYWwgUmVzcG9uc2VNZXNzYWdlLkJ1aWxkZXIgcmVzcG9uc2VNZXNzYWdlQnVpbGRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpOworICAgIHByaXZhdGUgZmluYWwgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0IHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KCk7CisKKyAgICBwcml2YXRlIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUNodW5rZWRSZXNwb25zZU1lc3NhZ2UoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgaGVhZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAucmVzdWx0KEFycmF5cy5hc0xpc3QoImhlYWRlciIsIDApKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZm9vdGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAucmVzdWx0KEFycmF5cy5hc0xpc3QoImZvb3RlciIsIDMpKQorICAgICAgICAgICAgICAgIC5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykKKyAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgiT0siKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMCA9IHNlcmlhbGl6ZXIud3JpdGVIZWFkZXIoaGVhZGVyLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMSA9IHNlcmlhbGl6ZXIud3JpdGVDaHVuayhBcnJheXMuYXNMaXN0KCJjaHVuayIsIDEpLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMiA9IHNlcmlhbGl6ZXIud3JpdGVDaHVuayhBcnJheXMuYXNMaXN0KCJjaHVuayIsIDIpLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMyA9IHNlcmlhbGl6ZXIud3JpdGVGb290ZXIoZm9vdGVyLCBhbGxvY2F0b3IpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmJDb21iaW5lZCA9IGFsbG9jYXRvci5idWZmZXIoKS53cml0ZUJ5dGVzKGJiMCkud3JpdGVCeXRlcyhiYjEpLndyaXRlQnl0ZXMoYmIyKS53cml0ZUJ5dGVzKGJiMyk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBiYkNvbWJpbmVkLnJlYWRDaGFyU2VxdWVuY2UoYmJDb21iaW5lZC5yZWFkYWJsZUJ5dGVzKCksIENoYXJzZXRVdGlsLlVURl84KS50b1N0cmluZygpOworCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJoZWFkZXIiLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldCgiQHZhbHVlIikuZ2V0KDApLnRleHRWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb290ZXIiLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldCgiQHZhbHVlIikuZ2V0KDYpLnRleHRWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDgsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KCJAdmFsdWUiKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk9LIiwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpLmFzVGV4dCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgiY29kZSIpLmFzSW50KCkpOworCisgICAgICAgIC8vIGEgbWVzc2FnZSBjb21wb3NlZCBvZiBhbGwgY2h1bmtzIG11c3QgYmUgZGVzZXJpYWxpemVkCisgICAgICAgIGJiQ29tYmluZWQucmVzZXRSZWFkZXJJbmRleCgpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJiQ29tYmluZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiT0siLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDgsICgoTGlzdClkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5zaXplKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplUmVzcG9uc2VNZXNzYWdlV2l0aG91dERhdGEoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgaGVhZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIk9LIikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjAgPSBzZXJpYWxpemVyLndyaXRlSGVhZGVyKGhlYWRlciwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IGJiMC5yZWFkQ2hhclNlcXVlbmNlKGJiMC5yZWFkYWJsZUJ5dGVzKCksIENoYXJzZXRVdGlsLlVURl84KS50b1N0cmluZygpOworCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KCJAdmFsdWUiKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk9LIiwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpLmFzVGV4dCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgiY29kZSIpLmFzSW50KCkpOworCisgICAgICAgIGJiMC5yZXNldFJlYWRlckluZGV4KCk7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplQmluYXJ5UmVzcG9uc2UoYmIwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5jb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk9LIiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCAoKExpc3QpZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKSkuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUNodW5rZWRSZXNwb25zZU1lc3NhZ2VXaXRoRW1wdHlEYXRhKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGhlYWRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChuZXcgQXJyYXlMaXN0PD4oKSkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIk9LIikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjAgPSBzZXJpYWxpemVyLndyaXRlSGVhZGVyKGhlYWRlciwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IGJiMC5yZWFkQ2hhclNlcXVlbmNlKGJiMC5yZWFkYWJsZUJ5dGVzKCksIENoYXJzZXRVdGlsLlVURl84KS50b1N0cmluZygpOworCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KCJAdmFsdWUiKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk9LIiwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpLmFzVGV4dCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgiY29kZSIpLmFzSW50KCkpOworCisgICAgICAgIGJiMC5yZXNldFJlYWRlckluZGV4KCk7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplQmluYXJ5UmVzcG9uc2UoYmIwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5jb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk9LIiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCAoKExpc3QpZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKSkuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUNodW5rZWRSZXNwb25zZU1lc3NhZ2VXaXRoRXJyb3IoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgaGVhZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAucmVzdWx0KEFycmF5cy5hc0xpc3QoImhlYWRlciIsIDApKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZm9vdGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAucmVzdWx0KEFycmF5cy5hc0xpc3QoImZvb3RlciIsIDMpKQorICAgICAgICAgICAgICAgIC5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIlNFUlZFUl9FUlJPUiIpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIwID0gc2VyaWFsaXplci53cml0ZUhlYWRlcihoZWFkZXIsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIxID0gc2VyaWFsaXplci53cml0ZUNodW5rKEFycmF5cy5hc0xpc3QoImNodW5rIiwgMSksIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIyID0gc2VyaWFsaXplci53cml0ZUNodW5rKEFycmF5cy5hc0xpc3QoImNodW5rIiwgMiksIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIzID0gc2VyaWFsaXplci53cml0ZUVycm9yRm9vdGVyKGZvb3RlciwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiQ29tYmluZWQgPSBhbGxvY2F0b3IuYnVmZmVyKCkud3JpdGVCeXRlcyhiYjApLndyaXRlQnl0ZXMoYmIxKS53cml0ZUJ5dGVzKGJiMikud3JpdGVCeXRlcyhiYjMpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBqc29uID0gYmJDb21iaW5lZC5yZWFkQ2hhclNlcXVlbmNlKGJiQ29tYmluZWQucmVhZGFibGVCeXRlcygpLCBDaGFyc2V0VXRpbC5VVEZfOCkudG9TdHJpbmcoKTsKKworICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworCisgICAgICAgIGFzc2VydEVxdWFscygiaGVhZGVyIiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5nZXQoIkB2YWx1ZSIpLmdldCgwKS50ZXh0VmFsdWUoKSk7CisgICAgICAgIC8vIDYgaXRlbXMgaW4gZmlyc3QgMyBjaHVua3MKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KCJAdmFsdWUiKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlNFUlZFUl9FUlJPUiIsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoIm1lc3NhZ2UiKS5hc1RleHQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg1MDAsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoImNvZGUiKS5hc0ludCgpKTsKKworICAgICAgICBiYkNvbWJpbmVkLnJlc2V0UmVhZGVySW5kZXgoKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXNwb25zZShiYkNvbWJpbmVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5jb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlNFUlZFUl9FUlJPUiIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNiwgKChMaXN0KWRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLnNpemUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25maWd1cmVJb1JlZ2lzdHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGNvbmZpZyA9IG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7CisgICAgICAgICAgICBwdXQoQWJzdHJhY3RNZXNzYWdlU2VyaWFsaXplci5UT0tFTl9JT19SRUdJU1RSSUVTLCBBcnJheXMuYXNMaXN0KENvbG9ySW9SZWdpc3RyeS5jbGFzcy5nZXROYW1lKCkpKTsKKyAgICAgICAgfX07CisKKyAgICAgICAgc2VyaWFsaXplci5jb25maWd1cmUoY29uZmlnLCBudWxsKTsKKworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgdG9TZXJpYWxpemUgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKS5yZXN1bHQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChDb2xvci5SRUQpKS5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykuY3JlYXRlKCk7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHRvU2VyaWFsaXplLCBhbGxvY2F0b3IpOworICAgICAgICBSZXNwb25zZVJlc3VsdCByZXN1bHRzID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJ1ZmZlcikuZ2V0UmVzdWx0KCk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKENvbG9yLlJFRCwgcmVzdWx0cy5nZXREYXRhKCkuZ2V0KDApKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9ySW9SZWdpc3RyeSBleHRlbmRzIEFic3RyYWN0SW9SZWdpc3RyeSB7CisgICAgICAgIHB1YmxpYyBDb2xvcklvUmVnaXN0cnkoKSB7CisgICAgICAgICAgICByZWdpc3RlcihHcmFwaFNPTklvLmNsYXNzLCBudWxsLCBuZXcgQ29sb3JTaW1wbGVNb2R1bGUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9yU2ltcGxlTW9kdWxlIGV4dGVuZHMgVGlua2VyUG9wSmFja3Nvbk1vZHVsZSB7CisgICAgICAgIHB1YmxpYyBDb2xvclNpbXBsZU1vZHVsZSgpIHsKKyAgICAgICAgICAgIHN1cGVyKCJjb2xvci1mdW4iKTsKKyAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoQ29sb3IuY2xhc3MsIG5ldyBDb2xvclNlcmlhbGl6ZXIoKSk7CisgICAgICAgICAgICBhZGREZXNlcmlhbGl6ZXIoQ29sb3IuY2xhc3MsIG5ldyBDb2xvckRlc2VyaWFsaXplcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgTWFwPENsYXNzLCBTdHJpbmc+IGdldFR5cGVEZWZpbml0aW9ucygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSGFzaE1hcDxDbGFzcywgU3RyaW5nPigpe3sKKyAgICAgICAgICAgICAgICBwdXQoQ29sb3IuY2xhc3MsICJjb2xvciIpOworICAgICAgICAgICAgfX07CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZXNwYWNlKCkgeworICAgICAgICAgICAgcmV0dXJuICJqYXZhIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29sb3JTZXJpYWxpemVyIGV4dGVuZHMgU3RkU2VyaWFsaXplcjxDb2xvcj4geworICAgICAgICBwdWJsaWMgQ29sb3JTZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoQ29sb3IuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBDb2xvciB2YWx1ZSwgZmluYWwgSnNvbkdlbmVyYXRvciBnZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgZ2VuLndyaXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKCkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZVdpdGhUeXBlKGZpbmFsIENvbG9yIHZhbHVlLCBmaW5hbCBKc29uR2VuZXJhdG9yIGdlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJzLCBmaW5hbCBUeXBlU2VyaWFsaXplciB0eXBlU2VyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgdHlwZVNlci53cml0ZVR5cGVQcmVmaXhGb3JTY2FsYXIodmFsdWUsIGdlbik7CisgICAgICAgICAgICBnZW4ud3JpdGVTdHJpbmcodmFsdWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB0eXBlU2VyLndyaXRlVHlwZVN1ZmZpeEZvclNjYWxhcih2YWx1ZSwgZ2VuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29sb3JEZXNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGREZXNlcmlhbGl6ZXI8Q29sb3I+IHsKKyAgICAgICAgcHVibGljIENvbG9yRGVzZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoQ29sb3IuY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDb2xvciBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29sb3JTdHJpbmcgPSBqc29uUGFyc2VyLmdldFRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBjb2xvclN0cmluZy5jb250YWlucygicj0yNTUiKSA/IENvbG9yLlJFRCA6IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFJlZ2lzdGVyR3JlbWxpblNlcnZlck1vZHVsZUF1dG9tYXRpY2FsbHlXaXRoTWFwcGVyKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBHcmFwaFNPTk1hcHBlci5CdWlsZGVyIGJ1aWxkZXIgPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpLnZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlY0XzApLmFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWNC5idWlsZCgpKTsKKyAgICAgICAgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0IGdyYXBoU09OTWVzc2FnZVNlcmlhbGl6ZXJWNCA9IG5ldyBHcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQoYnVpbGRlcik7CisKKyAgICAgICAgUmVzcG9uc2VNZXNzYWdlIHJtID0gY29udmVydCgiaGVsbG8iLCBncmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQpOworICAgICAgICBhc3NlcnRFcXVhbHMocm0uZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmdldCgwKSwgImhlbGxvIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBSZXNwb25zZU1lc3NhZ2UgY29udmVydChmaW5hbCBPYmplY3QgdG9TZXJpYWxpemUsIE1lc3NhZ2VTZXJpYWxpemVyPD8+IHNlcmlhbGl6ZXIpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYiA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeSgKKyAgICAgICAgICAgICAgICByZXNwb25zZU1lc3NhZ2VCdWlsZGVyLnJlc3VsdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHRvU2VyaWFsaXplKSkuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOworICAgICAgICByZXR1cm4gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZGRiZGEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYxVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXI7Ci0KLWltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VTdGF0dXNDb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLlRyZWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Qcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQWJzdHJhY3RJb1JlZ2lzdHJ5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OSW87Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuaXRlcmF0b3IuSXRlcmF0b3JVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLm1vZHVsZS5TaW1wbGVNb2R1bGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQubm9kZS5OdWxsTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5zZXIuc3RkLlN0ZFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQudXRpbC5TdGREYXRlRm9ybWF0OwotaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLmF3dC4qOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogVGhlc2UgdGVzdHMgZm9jdXMgb24gbWVzc2FnZSBzZXJpYWxpemF0aW9uIGFuZCBub3QgInJlc3VsdCIgc2VyaWFsaXphdGlvbiBhcyB0ZXN0IHNwZWNpZmljIHRvIHJlc3VsdHMgKGUuZy4KLSAqIHZlcnRpY2VzLCBlZGdlcywgYW5ub3RhdGVkIHZhbHVlcywgZXRjLikgYXJlIGhhbmRsZWQgaW4gdGhlIElPIHBhY2thZ2VzLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0IHsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMSBTRVJJQUxJWkVSID0gbmV3IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgib3AiKQotICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQuZnJvbVN0cmluZygiMkQ2MjE2MUItOTU0NC00RjM5LUFGNDQtNjJFQzQ5RjlBNTk1IikpLmNyZWF0ZSgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IgPSBCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbmZpZ3VyZUlvUmVnaXN0cnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMSBzZXJpYWxpemVyID0gbmV3IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWcgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KEFic3RyYWN0TWVzc2FnZVNlcmlhbGl6ZXIuVE9LRU5fSU9fUkVHSVNUUklFUywgQXJyYXlzLmFzTGlzdChDb2xvcklvUmVnaXN0cnkuY2xhc3MuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIH19OwotCi0gICAgICAgIHNlcmlhbGl6ZXIuY29uZmlndXJlKGNvbmZpZywgbnVsbCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHRvU2VyaWFsaXplID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQuZnJvbVN0cmluZygiMkQ2MjE2MUItOTU0NC00RjM5LUFGNDQtNjJFQzQ5RjlBNTk1IikpCi0gICAgICAgICAgICAgICAgLnJlc3VsdChDb2xvci5SRUQpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyh0b1NlcmlhbGl6ZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0VGhhdChqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpLmJvb2xlYW5WYWx1ZSgpLCBpcyh0cnVlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25OdWxsUmVzdWx0UmV0dXJuc051bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIG1lc3NhZ2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcobWVzc2FnZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLnBhdGgoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKE51bGxOb2RlLmdldEluc3RhbmNlKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uSXRlcmFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEZ1bk9iamVjdD4gZnVuTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ4IikpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChmdW5MaXN0KS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGNvbnZlcnRlZC5nZXQoMCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInkiLCBjb252ZXJ0ZWQuZ2V0KDEpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxGdW5PYmplY3Q+IGZ1bkxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieCIpKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieSIpKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoZnVuTGlzdC5pdGVyYXRvcigpKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGNvbnZlcnRlZC5nZXQoMCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInkiLCBjb252ZXJ0ZWQuZ2V0KDEpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhdG9yTnVsbEVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8RnVuT2JqZWN0PiBmdW5MaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG51bGwpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChmdW5MaXN0Lml0ZXJhdG9yKCkpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgY29udmVydGVkLmdldCgwKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhOdWxsTm9kZS5nZXRJbnN0YW5jZSgpLCBjb252ZXJ0ZWQuZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgY29udmVydGVkLmdldCgyKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25NYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5uZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGlubmVyTWFwLnB1dCgiYSIsICJiIik7Ci0KLSAgICAgICAgbWFwLnB1dCgieCIsIG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIG1hcC5wdXQoInkiLCAic29tZSIpOwotICAgICAgICBtYXAucHV0KCJ6IiwgaW5uZXJNYXApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChtYXApLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbk9iamVjdCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uT2JqZWN0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lIiwganNvbk9iamVjdC5nZXQoInkiKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGpzb25PYmplY3QuZ2V0KCJ4IikuYXNUZXh0KCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGlubmVySnNvbk9iamVjdCA9IGpzb25PYmplY3QuZ2V0KCJ6Iik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoaW5uZXJKc29uT2JqZWN0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJiIiwgaW5uZXJKc29uT2JqZWN0LmdldCgiYSIpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNob3VsZFNlcmlhbGl6ZU1hcEVudHJpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBEYXRlIGQgPSBuZXcgRGF0ZSgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgMSk7Ci0gICAgICAgIG1hcC5wdXQodjEsIDEwMCk7Ci0gICAgICAgIG1hcC5wdXQoZCwgInRlc3QiKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoSXRlcmF0b3JVdGlscy5hc0xpc3QobWFwKSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uT2JqZWN0ID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLSAgICAgICAganNvbk9iamVjdC5lbGVtZW50cygpLmZvckVhY2hSZW1haW5pbmcoZSAtPiB7Ci0gICAgICAgICAgICBpZiAoZS5oYXMoIngiKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZS5nZXQoIngiKS5hc0ludCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuaGFzKHYxLmlkKCkudG9TdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZS5nZXQodjEuaWQoKS50b1N0cmluZygpKS5hc0ludCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuaGFzKFN0ZERhdGVGb3JtYXQuaW5zdGFuY2UuZm9ybWF0KGQpKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBlLmdldChTdGREYXRlRm9ybWF0Lmluc3RhbmNlLmZvcm1hdChkKSkuYXNUZXh0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhaWwoIk1hcCBlbnRyaWVzIGNvbnRhaW5zIGEga2V5IHRoYXQgaXMgbm90IHBhcnQgb2Ygd2hhdCB3YXMgc2VyaWFsaXplZCIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUVkZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZyA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYyID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlID0gdjEuYWRkRWRnZSgidGVzdCIsIHYyKTsKLSAgICAgICAgZS5wcm9wZXJ0eSgiYWJjIiwgMTIzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZTxFZGdlPiBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChnLmVkZ2VzKCkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoaXRlcmFibGUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGVkZ2VBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApOwotICAgICAgICBhc3NlcnROb3ROdWxsKGVkZ2VBc0pzb24pOwotCi0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIGUuaWQoKSkuaW50VmFsdWUoKSwgZWRnZUFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuSUQpLmFzTG9uZygpKTsgIC8vIGxvc3N5Ci0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIHYxLmlkKCkpLmludFZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLk9VVCkuYXNMb25nKCkpOy8vIGxvc3N5Ci0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIHYyLmlkKCkpLmludFZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLklOKS5hc0xvbmcoKSk7IC8vIGxvc3N5Ci0gICAgICAgIGFzc2VydEVxdWFscyhlLmxhYmVsKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLkxBQkVMKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhHcmFwaFNPTlRva2Vucy5FREdFLCBlZGdlQXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5UWVBFKS5hc1RleHQoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydGllcyA9IGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0aWVzLmdldCgiYWJjIikuYXNJbnQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVFZGdlUHJvcGVydHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZyA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYyID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlID0gdjEuYWRkRWRnZSgidGVzdCIsIHYyKTsKLSAgICAgICAgZS5wcm9wZXJ0eSgiYWJjIiwgMTIzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZTxQcm9wZXJ0eTxPYmplY3Q+PiBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChlLnByb3BlcnRpZXMoImFiYyIpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KGl0ZXJhYmxlKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb252ZXJ0ZWQuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBwcm9wZXJ0eUFzSnNvbiA9IGNvbnZlcnRlZC5nZXQoMCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwocHJvcGVydHlBc0pzb24pOwotCi0gICAgICAgIGFzc2VydEVxdWFscygxMjMsIHByb3BlcnR5QXNKc29uLmdldCgidmFsdWUiKS5hc0ludCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhdG9yV2l0aEVtYmVkZGVkTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGcgPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2ID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1hcC5wdXQoIngiLCA1MDApOwotICAgICAgICBtYXAucHV0KCJ5IiwgInNvbWUiKTsKLQotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8T2JqZWN0PiBmcmllbmRzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZyaWVuZHMuYWRkKCJ4Iik7Ci0gICAgICAgIGZyaWVuZHMuYWRkKDUpOwotICAgICAgICBmcmllbmRzLmFkZChtYXApOwotCi0gICAgICAgIHYucHJvcGVydHkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuc2luZ2xlLCAiZnJpZW5kcyIsIGZyaWVuZHMpOwotCi0gICAgICAgIGZpbmFsIEl0ZXJhYmxlIGl0ZXJhYmxlID0gSXRlcmF0b3JVdGlscy5saXN0KGcudmVydGljZXMoKSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChpdGVyYWJsZSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIHZlcnRleEFzSnNvbiA9IGNvbnZlcnRlZC5nZXQoMCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwodmVydGV4QXNKc29uKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBwcm9wZXJ0aWVzID0gdmVydGV4QXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHByb3BlcnRpZXMuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBmcmllbmRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5nZXQoImZyaWVuZHMiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGZyaWVuZFByb3BlcnRpZXMuc2l6ZSgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgZnJpZW5kc1Byb3BlcnR5ID0gZnJpZW5kUHJvcGVydGllcy5nZXQoMCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZnJpZW5kc1Byb3BlcnR5KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGZyaWVuZHMuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgb2JqZWN0MSA9IGZyaWVuZHNQcm9wZXJ0eS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUUpLmdldCgwKS5hc1RleHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4Iiwgb2JqZWN0MSk7Ci0KLSAgICAgICAgZmluYWwgaW50IG9iamVjdDIgPSBmcmllbmRzUHJvcGVydHkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFKS5nZXQoMSkuYXNJbnQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIG9iamVjdDIpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIG9iamVjdDMgPSBmcmllbmRzUHJvcGVydHkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFKS5nZXQoMik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1MDAsIG9iamVjdDMuZ2V0KCJ4IikuYXNJbnQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZSIsIG9iamVjdDMuZ2V0KCJ5IikuYXNUZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uTWFwV2l0aEVsZW1lbnRGb3JLZXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVGlua2VyR3JhcGggZ3JhcGggPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZUNsYXNzaWMoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICBmaW5hbCBNYXA8VmVydGV4LCBJbnRlZ2VyPiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1hcC5wdXQoZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikubmV4dCgpLCAxMDAwKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQobWFwKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChjb252ZXJ0ZWQpOwotCi0gICAgICAgIC8vIHdpdGggbm8gZW1iZWRkZWQgdHlwZXMgdGhlIGtleSAod2hpY2ggaXMgYSB2ZXJ0ZXgpIHNpbXBseSBzZXJpYWxpemVzIG91dCB0byBhbiBpZAotICAgICAgICAvLyB7InJlc3VsdCI6eyIxIjoxMDAwfSwiY29kZSI6MjAwLCJyZXF1ZXN0SWQiOiIyZDYyMTYxYi05NTQ0LTRmMzktYWY0NC02MmVjNDlmOWE1OTUiLCJ0eXBlIjowfQotICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgY29udmVydGVkLmdldCgiMSIpLmFzSW50KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVSZXF1ZXN0TmljZWx5V2l0aE5vQXJncygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3QgPSBVVUlELmZyb21TdHJpbmcoIjAxMUNGRUU5LUY2NDAtNDg0NC1BQzkzLTAzNDQ0OEFDMEU4MCIpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlcXVlc3QoU3RyaW5nLmZvcm1hdCgie1wicmVxdWVzdElkXCI6XCIlc1wiLFwib3BcIjpcImV2YWxcIn0iLCByZXF1ZXN0KSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0LCBtLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJldmFsIiwgbS5nZXRPcCgpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChtLmdldEFyZ3MoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBtLmdldEFyZ3MoKS5zaXplKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVSZXF1ZXN0TmljZWx5V2l0aEFyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVVVJRCByZXF1ZXN0ID0gVVVJRC5mcm9tU3RyaW5nKCIwMTFDRkVFOS1GNjQwLTQ4NDQtQUM5My0wMzQ0NDhBQzBFODAiKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbSA9IFNFUklBTElaRVIuZGVzZXJpYWxpemVSZXF1ZXN0KFN0cmluZy5mb3JtYXQoIntcInJlcXVlc3RJZFwiOlwiJXNcIixcIm9wXCI6XCJldmFsXCIsXCJhcmdzXCI6e1wieFwiOlwieVwifX0iLCByZXF1ZXN0KSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZXF1ZXN0LCBtLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJldmFsIiwgbS5nZXRPcCgpKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChtLmdldEFyZ3MoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieSIsIG0uZ2V0QXJncygpLmdldCgieCIpKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IFNlcmlhbGl6YXRpb25FeGNlcHRpb24uY2xhc3MpCi0gICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVSZXF1ZXN0UGFyc2VNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNFUklBTElaRVIuZGVzZXJpYWxpemVSZXF1ZXN0KCJ7XCJyZXF1ZXN0SWRcIjpcIiVzXCIsXCJvcFwiOlwiZXZhbFwiLFwiYXJnc1wiOntcInhcIjpcInlcIn19Iik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVGdWxsUmVzcG9uc2VNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFVVSUQgaWQgPSBVVUlELnJhbmRvbVVVSUQoKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGFEYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtZXRhRGF0YS5wdXQoInRlc3QiLCAidGhpcyIpOwotICAgICAgICBtZXRhRGF0YS5wdXQoIm9uZSIsIDEpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXR0cmlidXRlcyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgYXR0cmlidXRlcy5wdXQoInRlc3QiLCAidGhhdCIpOwotICAgICAgICBhdHRyaWJ1dGVzLnB1dCgidHdvIiwgMik7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKGlkKQotICAgICAgICAgICAgICAgIC5yZXNwb25zZU1ldGFEYXRhKG1ldGFEYXRhKQotICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTKQotICAgICAgICAgICAgICAgIC5yZXN1bHQoInNvbWUtcmVzdWx0IikKLSAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJ3b3JrZWQiKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhyZXNwb25zZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IFNFUklBTElaRVIuZGVzZXJpYWxpemVSZXNwb25zZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoaWQsIGRlc2VyaWFsaXplZC5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhpcyIsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXRNZXRhKCkuZ2V0KCJ0ZXN0IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldE1ldGEoKS5nZXQoIm9uZSIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lLXJlc3VsdCIsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoYXQiLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpLmdldCgidGVzdCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkuZ2V0KCJ0d28iKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUy5nZXRWYWx1ZSgpLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmdldFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIndvcmtlZCIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRGVzZXJpYWxpemVSZXNwb25zZU1lc3NhZ2VXaXRoTnVsbE1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVVVJRCBpZCA9IFVVSUQucmFuZG9tVVVJRCgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWV0YURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1ldGFEYXRhLnB1dCgidGVzdCIsIFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCkpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGF0dHJpYnV0ZXMgPSBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChpZCkKLSAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU0VSVkVSX0VSUk9SKQotICAgICAgICAgICAgICAgIC5yZXN1bHQoInNvbWUtcmVzdWx0IikKLSAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgcGFzcyB0aGUgbnVsbCB2YWx1ZQotICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKG51bGwpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlc3BvbnNlKHJlc3VsdHMpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChTRVJJQUxJWkVSLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpICsgIiBzaG91bGQgYmUgYWJsZSB0byBkZXNlcmlhbGl6ZSBSZXNwb25zZU1lc3NhZ2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAid2l0aCBudWxsIG1lc3NhZ2UgZmllbGQiLCBkZXNlcmlhbGl6ZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uVHJlZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlQ2xhc3NpYygpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIFRyZWUgdCA9IGcuVigxKS5vdXQoKS5wcm9wZXJ0aWVzKCJuYW1lIikudHJlZSgpLm5leHQoKTsKLQotICAgICAgICAKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KHQpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0gICAgICAgIAotICAgICAgICAvL2NoZWNrIHRoZSBmaXJzdCBvYmplY3QgYW5kIGl0J3MgcHJvcGVydGllcwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29udmVydGVkLmdldCgiMSIpLmdldCgia2V5IikuZ2V0KCJpZCIpLmFzSW50KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgY29udmVydGVkLmdldCgiMSIpLmdldCgia2V5IikuZ2V0KCJwcm9wZXJ0aWVzIikuZ2V0KCJuYW1lIikuZ2V0KDApLmdldCgidmFsdWUiKS5hc1RleHQoKSk7Ci0gICAgICAgIAotICAgICAgICAvL2NoZWNrIG9iamVjdHMgdHJlZSBzdHJ1Y3R1cmUKLSAgICAgICAgLy9jaGVjayBWZXJ0ZXggcHJvcGVydHkKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ2YWRhcyIsIGNvbnZlcnRlZC5nZXQoIjEiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgidmFsdWUiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgiMiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCJ2YWx1ZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCIyIikuZ2V0KCJrZXkiKS5nZXQoInZhbHVlIikuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCBjb252ZXJ0ZWQuZ2V0KCIxIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoInZhbHVlIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoIjIiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgidmFsdWUiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgiMiIpLmdldCgia2V5IikuZ2V0KCJsYWJlbCIpLmFzVGV4dCgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGNoZWNrIHN1Yml0ZW0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJsb3AiLCBjb252ZXJ0ZWQuZ2V0KCIxIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoInZhbHVlIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoIjMiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgia2V5IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoInByb3BlcnRpZXMiKS5nZXQoIm5hbWUiKS5nZXQoMCkuZ2V0KCJ2YWx1ZSIpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIEZ1bk9iamVjdCB7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIHZhbDsKLQotICAgICAgICBwdWJsaWMgRnVuT2JqZWN0KFN0cmluZyB2YWwpIHsKLSAgICAgICAgICAgIHRoaXMudmFsID0gdmFsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29sb3JJb1JlZ2lzdHJ5IGV4dGVuZHMgQWJzdHJhY3RJb1JlZ2lzdHJ5IHsKLSAgICAgICAgcHVibGljIENvbG9ySW9SZWdpc3RyeSgpIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyKEdyYXBoU09OSW8uY2xhc3MsIG51bGwsIG5ldyBDb2xvclNpbXBsZU1vZHVsZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29sb3JTaW1wbGVNb2R1bGUgZXh0ZW5kcyBTaW1wbGVNb2R1bGUgewotICAgICAgICBwdWJsaWMgQ29sb3JTaW1wbGVNb2R1bGUoKSB7Ci0gICAgICAgICAgICBzdXBlcigiY29sb3ItZnVuIik7Ci0gICAgICAgICAgICBhZGRTZXJpYWxpemVyKENvbG9yLmNsYXNzLCBuZXcgQ29sb3JTZXJpYWxpemVyKCkpOwotCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9yU2VyaWFsaXplciBleHRlbmRzIFN0ZFNlcmlhbGl6ZXI8Q29sb3I+IHsKLSAgICAgICAgcHVibGljIENvbG9yU2VyaWFsaXplcigpIHsKLSAgICAgICAgICAgIHN1cGVyKENvbG9yLmNsYXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBzZXJpYWxpemUoZmluYWwgQ29sb3IgY29sb3IsIGZpbmFsIEpzb25HZW5lcmF0b3IganNvbkdlbmVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFNlcmlhbGl6ZXJQcm92aWRlciBzZXJpYWxpemVyUHJvdmlkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvbkdlbmVyYXRpb25FeGNlcHRpb24gewotICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUJvb2xlYW4oY29sb3IuZXF1YWxzKENvbG9yLlJFRCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9HcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjI0Mzg3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMlRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyOwotCi1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7Ci1pbXBvcnQgaW8ubmV0dHkuYnVmZmVyLlVucG9vbGVkQnl0ZUJ1ZkFsbG9jYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5BYnN0cmFjdE9iamVjdERlc2VyaWFsaXplcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5UcmVlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkFic3RyYWN0SW9SZWdpc3RyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTklvOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uR2VuZXJhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuSnNvbk5vZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLlNlcmlhbGl6ZXJQcm92aWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5tb2R1bGUuU2ltcGxlTW9kdWxlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLm5vZGUuTnVsbE5vZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuc2VyLnN0ZC5TdGRTZXJpYWxpemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnV0aWwuU3RkRGF0ZUZvcm1hdDsKLWltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS5hd3QuQ29sb3I7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLQotLyoqCi0gKiBUaGVzZSB0ZXN0cyBmb2N1cyBvbiBtZXNzYWdlIHNlcmlhbGl6YXRpb24gYW5kIG5vdCAicmVzdWx0IiBzZXJpYWxpemF0aW9uIGFzIHRlc3Qgc3BlY2lmaWMgdG8gcmVzdWx0cyAoZS5nLgotICogdmVydGljZXMsIGVkZ2VzLCBhbm5vdGF0ZWQgdmFsdWVzLCBldGMuKSBhcmUgaGFuZGxlZCBpbiB0aGUgSU8gcGFja2FnZXMuCi0gKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgY2xhc3MgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMlRlc3QgewotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMiBTRVJJQUxJWkVSID0gbmV3IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjIoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtc2cgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgib3AiKQotICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQuZnJvbVN0cmluZygiMkQ2MjE2MUItOTU0NC00RjM5LUFGNDQtNjJFQzQ5RjlBNTk1IikpLmNyZWF0ZSgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVjdE1hcHBlciBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IgPSBCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZENvbmZpZ3VyZUlvUmVnaXN0cnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMiBzZXJpYWxpemVyID0gbmV3IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjIoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWcgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KEFic3RyYWN0TWVzc2FnZVNlcmlhbGl6ZXIuVE9LRU5fSU9fUkVHSVNUUklFUywgQXJyYXlzLmFzTGlzdChDb2xvcklvUmVnaXN0cnkuY2xhc3MuZ2V0TmFtZSgpKSk7Ci0gICAgICAgIH19OwotCi0gICAgICAgIHNlcmlhbGl6ZXIuY29uZmlndXJlKGNvbmZpZywgbnVsbCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHRvU2VyaWFsaXplID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQuZnJvbVN0cmluZygiMkQ2MjE2MUItOTU0NC00RjM5LUFGNDQtNjJFQzQ5RjlBNTk1IikpCi0gICAgICAgICAgICAgICAgLnJlc3VsdChDb2xvci5SRUQpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyh0b1NlcmlhbGl6ZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0VGhhdChqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpLmJvb2xlYW5WYWx1ZSgpLCBpcyh0cnVlKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25OdWxsUmVzdWx0UmV0dXJuc051bGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIG1lc3NhZ2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcobWVzc2FnZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLnBhdGgoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKE51bGxOb2RlLmdldEluc3RhbmNlKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uSXRlcmFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEZ1bk9iamVjdD4gZnVuTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ4IikpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChmdW5MaXN0KS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGNvbnZlcnRlZC5nZXQoMCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInkiLCBjb252ZXJ0ZWQuZ2V0KDEpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxGdW5PYmplY3Q+IGZ1bkxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieCIpKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieSIpKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoZnVuTGlzdC5pdGVyYXRvcigpKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGNvbnZlcnRlZC5nZXQoMCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInkiLCBjb252ZXJ0ZWQuZ2V0KDEpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhdG9yTnVsbEVsZW1lbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8RnVuT2JqZWN0PiBmdW5MaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG51bGwpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ5IikpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChmdW5MaXN0Lml0ZXJhdG9yKCkpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMywgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ4IiwgY29udmVydGVkLmdldCgwKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhOdWxsTm9kZS5nZXRJbnN0YW5jZSgpLCBjb252ZXJ0ZWQuZ2V0KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgY29udmVydGVkLmdldCgyKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25NYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5uZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGlubmVyTWFwLnB1dCgiYSIsICJiIik7Ci0KLSAgICAgICAgbWFwLnB1dCgieCIsIG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIG1hcC5wdXQoInkiLCAic29tZSIpOwotICAgICAgICBtYXAucHV0KCJ6IiwgaW5uZXJNYXApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChtYXApLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbk9iamVjdCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uT2JqZWN0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lIiwganNvbk9iamVjdC5nZXQoInkiKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGpzb25PYmplY3QuZ2V0KCJ4IikuYXNUZXh0KCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGlubmVySnNvbk9iamVjdCA9IGpzb25PYmplY3QuZ2V0KCJ6Iik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoaW5uZXJKc29uT2JqZWN0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJiIiwgaW5uZXJKc29uT2JqZWN0LmdldCgiYSIpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNob3VsZFNlcmlhbGl6ZU1hcEVudHJpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGdyYXBoLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBEYXRlIGQgPSBuZXcgRGF0ZSgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxPYmplY3QsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgMSk7Ci0gICAgICAgIG1hcC5wdXQodjEsIDEwMCk7Ci0gICAgICAgIG1hcC5wdXQoZCwgInRlc3QiKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoSXRlcmF0b3JVdGlscy5hc0xpc3QobWFwKSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uT2JqZWN0ID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLSAgICAgICAganNvbk9iamVjdC5lbGVtZW50cygpLmZvckVhY2hSZW1haW5pbmcoZSAtPiB7Ci0gICAgICAgICAgICBpZiAoZS5oYXMoIngiKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZS5nZXQoIngiKS5hc0ludCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuaGFzKHYxLmlkKCkudG9TdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZS5nZXQodjEuaWQoKS50b1N0cmluZygpKS5hc0ludCgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGUuaGFzKFN0ZERhdGVGb3JtYXQuaW5zdGFuY2UuZm9ybWF0KGQpKSkKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInRlc3QiLCBlLmdldChTdGREYXRlRm9ybWF0Lmluc3RhbmNlLmZvcm1hdChkKSkuYXNUZXh0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZhaWwoIk1hcCBlbnRyaWVzIGNvbnRhaW5zIGEga2V5IHRoYXQgaXMgbm90IHBhcnQgb2Ygd2hhdCB3YXMgc2VyaWFsaXplZCIpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUVkZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZyA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYxID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYyID0gZy5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgRWRnZSBlID0gdjEuYWRkRWRnZSgidGVzdCIsIHYyKTsKLSAgICAgICAgZS5wcm9wZXJ0eSgiYWJjIiwgMTIzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZTxFZGdlPiBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChnLmVkZ2VzKCkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoaXRlcmFibGUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGVkZ2VBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApOwotICAgICAgICBhc3NlcnROb3ROdWxsKGVkZ2VBc0pzb24pOwotCi0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIGUuaWQoKSkuaW50VmFsdWUoKSwgZWRnZUFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuSUQpLmFzTG9uZygpKTsgIC8vIGxvc3N5Ci0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIHYxLmlkKCkpLmludFZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLk9VVCkuYXNMb25nKCkpOy8vIGxvc3N5Ci0gICAgICAgIGFzc2VydEVxdWFscygoKExvbmcpIHYyLmlkKCkpLmludFZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLklOKS5hc0xvbmcoKSk7IC8vIGxvc3N5Ci0gICAgICAgIGFzc2VydEVxdWFscyhlLmxhYmVsKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLkxBQkVMKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlLmluVmVydGV4KCkubGFiZWwoKSwgZWRnZUFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuSU5fTEFCRUwpLmFzVGV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGUub3V0VmVydGV4KCkubGFiZWwoKSwgZWRnZUFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuT1VUX0xBQkVMKS5hc1RleHQoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydGllcyA9IGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImFiYyIsIHByb3BlcnRpZXMuZ2V0KCJhYmMiKS5nZXQoR3JhcGhTT05Ub2tlbnMuS0VZKS50ZXh0VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxMjMsIHByb3BlcnRpZXMuZ2V0KCJhYmMiKS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUUpLmludFZhbHVlKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRWRnZVByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGcgPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZSA9IHYxLmFkZEVkZ2UoInRlc3QiLCB2Mik7Ci0gICAgICAgIGUucHJvcGVydHkoImFiYyIsIDEyMyk7Ci0KLSAgICAgICAgZmluYWwgSXRlcmFibGU8UHJvcGVydHk8T2JqZWN0Pj4gaXRlcmFibGUgPSBJdGVyYXRvclV0aWxzLmxpc3QoZS5wcm9wZXJ0aWVzKCJhYmMiKSk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChpdGVyYWJsZSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChjb252ZXJ0ZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydHlBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApOwotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnR5QXNKc29uKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0eUFzSnNvbi5nZXQoInZhbHVlIikuYXNJbnQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25JdGVyYXRvcldpdGhFbWJlZGRlZE1hcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBnID0gVGlua2VyR3JhcGgub3BlbigpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdiA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KCJ4IiwgNTAwKTsKLSAgICAgICAgbWFwLnB1dCgieSIsICJzb21lIik7Ci0KLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PE9iamVjdD4gZnJpZW5kcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmcmllbmRzLmFkZCgieCIpOwotICAgICAgICBmcmllbmRzLmFkZCg1KTsKLSAgICAgICAgZnJpZW5kcy5hZGQobWFwKTsKLQotICAgICAgICB2LnByb3BlcnR5KFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSwgImZyaWVuZHMiLCBmcmllbmRzKTsKLQotICAgICAgICBmaW5hbCBJdGVyYWJsZSBpdGVyYWJsZSA9IEl0ZXJhdG9yVXRpbHMubGlzdChnLnZlcnRpY2VzKCkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoaXRlcmFibGUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb252ZXJ0ZWQuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSB2ZXJ0ZXhBc0pzb24gPSBjb252ZXJ0ZWQuZ2V0KDApOwotICAgICAgICBhc3NlcnROb3ROdWxsKHZlcnRleEFzSnNvbik7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgcHJvcGVydGllcyA9IHZlcnRleEFzSnNvbi5nZXQoR3JhcGhTT05Ub2tlbnMuUFJPUEVSVElFUyk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwocHJvcGVydGllcyk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBwcm9wZXJ0aWVzLnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgZnJpZW5kUHJvcGVydGllcyA9IHByb3BlcnRpZXMuZ2V0KCJmcmllbmRzIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBmcmllbmRQcm9wZXJ0aWVzLnNpemUoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGZyaWVuZHNQcm9wZXJ0eSA9IGZyaWVuZFByb3BlcnRpZXMuZ2V0KDApOwotICAgICAgICBhc3NlcnROb3ROdWxsKGZyaWVuZHNQcm9wZXJ0eSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBmcmllbmRzLnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIG9iamVjdDEgPSBmcmllbmRzUHJvcGVydHkuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFKS5nZXQoMCkuYXNUZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieCIsIG9iamVjdDEpOwotCi0gICAgICAgIGZpbmFsIGludCBvYmplY3QyID0gZnJpZW5kc1Byb3BlcnR5LmdldChHcmFwaFNPTlRva2Vucy5WQUxVRSkuZ2V0KDEpLmFzSW50KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBvYmplY3QyKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBvYmplY3QzID0gZnJpZW5kc1Byb3BlcnR5LmdldChHcmFwaFNPTlRva2Vucy5WQUxVRSkuZ2V0KDIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNTAwLCBvYmplY3QzLmdldCgieCIpLmFzSW50KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInNvbWUiLCBvYmplY3QzLmdldCgieSIpLmFzVGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbk1hcFdpdGhFbGVtZW50Rm9yS2V5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFRpbmtlckdyYXBoIGdyYXBoID0gVGlua2VyRmFjdG9yeS5jcmVhdGVDbGFzc2ljKCk7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBncmFwaC50cmF2ZXJzYWwoKTsKLSAgICAgICAgZmluYWwgTWFwPFZlcnRleCwgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtYXAucHV0KGcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm5leHQoKSwgMTAwMCk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KG1hcCkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLQotICAgICAgICAvLyB3aXRoIG5vIGVtYmVkZGVkIHR5cGVzIHRoZSBrZXkgKHdoaWNoIGlzIGEgdmVydGV4KSBzaW1wbHkgc2VyaWFsaXplcyBvdXQgdG8gYW4gaWQKLSAgICAgICAgLy8geyJyZXN1bHQiOnsiMSI6MTAwMH0sImNvZGUiOjIwMCwicmVxdWVzdElkIjoiMmQ2MjE2MWItOTU0NC00ZjM5LWFmNDQtNjJlYzQ5ZjlhNTk1IiwidHlwZSI6MH0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDAsIGNvbnZlcnRlZC5nZXQoIjEiKS5hc0ludCgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplUmVxdWVzdE5pY2VseVdpdGhOb0FyZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVVVJRCByZXF1ZXN0ID0gVVVJRC5mcm9tU3RyaW5nKCIwMTFDRkVFOS1GNjQwLTQ4NDQtQUM5My0wMzQ0NDhBQzBFODAiKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbSA9IFNFUklBTElaRVIuZGVzZXJpYWxpemVSZXF1ZXN0KFN0cmluZy5mb3JtYXQoIntcInJlcXVlc3RJZFwiOlwiJXNcIixcIm9wXCI6XCJldmFsXCJ9IiwgcmVxdWVzdCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVxdWVzdCwgbS5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZXZhbCIsIG0uZ2V0T3AoKSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwobS5nZXRBcmdzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbS5nZXRBcmdzKCkuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplUmVxdWVzdE5pY2VseVdpdGhBcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFVVSUQgcmVxdWVzdCA9IFVVSUQuZnJvbVN0cmluZygiMDExQ0ZFRTktRjY0MC00ODQ0LUFDOTMtMDM0NDQ4QUMwRTgwIik7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG0gPSBTRVJJQUxJWkVSLmRlc2VyaWFsaXplUmVxdWVzdChTdHJpbmcuZm9ybWF0KCJ7XCJyZXF1ZXN0SWRcIjpcIiVzXCIsXCJvcFwiOlwiZXZhbFwiLFwiYXJnc1wiOntcInhcIjpcInlcIn19IiwgcmVxdWVzdCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMocmVxdWVzdCwgbS5nZXRSZXF1ZXN0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZXZhbCIsIG0uZ2V0T3AoKSk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwobS5nZXRBcmdzKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInkiLCBtLmdldEFyZ3MoKS5nZXQoIngiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QoZXhwZWN0ZWQgPSBTZXJpYWxpemF0aW9uRXhjZXB0aW9uLmNsYXNzKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplUmVxdWVzdFBhcnNlTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTRVJJQUxJWkVSLmRlc2VyaWFsaXplUmVxdWVzdCgie1wicmVxdWVzdElkXCI6XCIlc1wiLFwib3BcIjpcImV2YWxcIixcImFyZ3NcIjp7XCJ4XCI6XCJ5XCJ9fSIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplRnVsbFJlc3BvbnNlTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIGlkID0gVVVJRC5yYW5kb21VVUlEKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtZXRhRGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJ0ZXN0IiwgInRoaXMiKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJvbmUiLCAxKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IGF0dHJpYnV0ZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGF0dHJpYnV0ZXMucHV0KCJ0ZXN0IiwgInRoYXQiKTsKLSAgICAgICAgYXR0cmlidXRlcy5wdXQoInR3byIsIDIpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChpZCkKLSAgICAgICAgICAgICAgICAucmVzcG9uc2VNZXRhRGF0YShtZXRhRGF0YSkKLSAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUykKLSAgICAgICAgICAgICAgICAucmVzdWx0KCJzb21lLXJlc3VsdCIpCi0gICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgid29ya2VkIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcocmVzcG9uc2UsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBTRVJJQUxJWkVSLmRlc2VyaWFsaXplUmVzcG9uc2UocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKGlkLCBkZXNlcmlhbGl6ZWQuZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInRoaXMiLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLmdldCgidGVzdCIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXRNZXRhKCkuZ2V0KCJvbmUiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZS1yZXN1bHQiLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGF0IiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKS5nZXQoInRlc3QiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0QXR0cmlidXRlcygpLmdldCgidHdvIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MuZ2V0VmFsdWUoKSwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5nZXRWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3b3JrZWQiLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZERlc2VyaWFsaXplUmVzcG9uc2VNZXNzYWdlV2l0aE51bGxNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFVVSUQgaWQgPSBVVUlELnJhbmRvbVVVSUQoKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1ldGFEYXRhID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtZXRhRGF0YS5wdXQoInRlc3QiLCBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gQ29sbGVjdGlvbnMuZW1wdHlNYXAoKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoaWQpCi0gICAgICAgICAgICAgICAgLnJlc3BvbnNlTWV0YURhdGEobWV0YURhdGEpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNFUlZFUl9FUlJPUikKLSAgICAgICAgICAgICAgICAucmVzdWx0KCJzb21lLXJlc3VsdCIpCi0gICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHBhc3MgdGhlIG51bGwgdmFsdWUKLSAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZShudWxsKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhyZXNwb25zZSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IFNFUklBTElaRVIuZGVzZXJpYWxpemVSZXNwb25zZShyZXN1bHRzKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoU0VSSUFMSVpFUi5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSArICIgc2hvdWxkIGJlIGFibGUgdG8gZGVzZXJpYWxpemUgUmVzcG9uc2VNZXNzYWdlICIKLSAgICAgICAgICAgICAgICArICJ3aXRoIG51bGwgbWVzc2FnZSBmaWVsZCIsIGRlc2VyaWFsaXplZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBGdW5PYmplY3QgewotICAgICAgICBwcml2YXRlIFN0cmluZyB2YWw7Ci0KLSAgICAgICAgcHVibGljIEZ1bk9iamVjdChTdHJpbmcgdmFsKSB7Ci0gICAgICAgICAgICB0aGlzLnZhbCA9IHZhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy52YWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9ySW9SZWdpc3RyeSBleHRlbmRzIEFic3RyYWN0SW9SZWdpc3RyeSB7Ci0gICAgICAgIHB1YmxpYyBDb2xvcklvUmVnaXN0cnkoKSB7Ci0gICAgICAgICAgICByZWdpc3RlcihHcmFwaFNPTklvLmNsYXNzLCBudWxsLCBuZXcgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QuQ29sb3JTaW1wbGVNb2R1bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbG9yU2ltcGxlTW9kdWxlIGV4dGVuZHMgU2ltcGxlTW9kdWxlIHsKLSAgICAgICAgcHVibGljIENvbG9yU2ltcGxlTW9kdWxlKCkgewotICAgICAgICAgICAgc3VwZXIoImNvbG9yLWZ1biIpOwotICAgICAgICAgICAgYWRkU2VyaWFsaXplcihDb2xvci5jbGFzcywgbmV3IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0LkNvbG9yU2VyaWFsaXplcigpKTsKLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb2xvclNlcmlhbGl6ZXIgZXh0ZW5kcyBTdGRTZXJpYWxpemVyPENvbG9yPiB7Ci0gICAgICAgIHB1YmxpYyBDb2xvclNlcmlhbGl6ZXIoKSB7Ci0gICAgICAgICAgICBzdXBlcihDb2xvci5jbGFzcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgc2VyaWFsaXplKGZpbmFsIENvbG9yIGNvbG9yLCBmaW5hbCBKc29uR2VuZXJhdG9yIGpzb25HZW5lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25HZW5lcmF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVCb29sZWFuKGNvbG9yLmVxdWFscyhDb2xvci5SRUQpKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWM1Rlc3QuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWM1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdhMjJmYy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkFic3RyYWN0SW9SZWdpc3RyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTklvOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVG9rZW5zOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25HZW5lcmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5Kc29uTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQuU2VyaWFsaXplclByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLm1vZHVsZS5TaW1wbGVNb2R1bGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQubm9kZS5OdWxsTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5zZXIuc3RkLlN0ZFNlcmlhbGl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uZGF0YWJpbmQudXRpbC5TdGREYXRlRm9ybWF0OwotaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLWltcG9ydCBqYXZhLmF3dC4qOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5jb3JlLklzLmlzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci0KLS8qKgotICogVGhlc2UgdGVzdHMgZm9jdXMgb24gbWVzc2FnZSBzZXJpYWxpemF0aW9uIGFuZCBub3QgInJlc3VsdCIgc2VyaWFsaXphdGlvbiBhcyB0ZXN0IHNwZWNpZmljIHRvIHJlc3VsdHMgKGUuZy4KLSAqIHZlcnRpY2VzLCBlZGdlcywgYW5ub3RhdGVkIHZhbHVlcywgZXRjLikgYXJlIGhhbmRsZWQgaW4gdGhlIElPIHBhY2thZ2VzLgotICoKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjNUZXN0IHsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjMgU0VSSUFMSVpFUiA9IG5ldyBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYzKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUmVxdWVzdE1lc3NhZ2UgbXNnID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoIm9wIikKLSAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChVVUlELmZyb21TdHJpbmcoIjJENjIxNjFCLTk1NDQtNEYzOS1BRjQ0LTYyRUM0OUY5QTU5NSIpKS5jcmVhdGUoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRDb25maWd1cmVJb1JlZ2lzdHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjMgc2VyaWFsaXplciA9IG5ldyBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYzKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIHB1dChBYnN0cmFjdE1lc3NhZ2VTZXJpYWxpemVyLlRPS0VOX0lPX1JFR0lTVFJJRVMsIEFycmF5cy5hc0xpc3QoQ29sb3JJb1JlZ2lzdHJ5LmNsYXNzLmdldE5hbWUoKSkpOwotICAgICAgICB9fTsKLQotICAgICAgICBzZXJpYWxpemVyLmNvbmZpZ3VyZShjb25maWcsIG51bGwpOwotCi0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSB0b1NlcmlhbGl6ZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELmZyb21TdHJpbmcoIjJENjIxNjFCLTk1NDQtNEYzOS1BRjQ0LTYyRUM0OUY5QTU5NSIpKQotICAgICAgICAgICAgICAgIC5yZXN1bHQoQ29sb3IuUkVEKS5jcmVhdGUoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcodG9TZXJpYWxpemUsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydFRoYXQoanNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKS5ib29sZWFuVmFsdWUoKSwgaXModHJ1ZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uTnVsbFJlc3VsdFJldHVybnNOdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBtZXNzYWdlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKG1lc3NhZ2UsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5wYXRoKFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhOdWxsTm9kZS5nZXRJbnN0YW5jZSgpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVRvSnNvbkl0ZXJhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxGdW5PYmplY3Q+IGZ1bkxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieCIpKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieSIpKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoZnVuTGlzdCkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb252ZXJ0ZWQuc2l6ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIngiLCBjb252ZXJ0ZWQuZ2V0KDApLmFzVGV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgY29udmVydGVkLmdldCgxKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25JdGVyYXRvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8RnVuT2JqZWN0PiBmdW5MaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoIngiKSk7Ci0gICAgICAgIGZ1bkxpc3QuYWRkKG5ldyBGdW5PYmplY3QoInkiKSk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KGZ1bkxpc3QuaXRlcmF0b3IoKSkuY3JlYXRlKCksIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBjb252ZXJ0ZWQuc2l6ZSgpKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIngiLCBjb252ZXJ0ZWQuZ2V0KDApLmFzVGV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgY29udmVydGVkLmdldCgxKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25JdGVyYXRvck51bGxFbGVtZW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEZ1bk9iamVjdD4gZnVuTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgICAgICBmdW5MaXN0LmFkZChuZXcgRnVuT2JqZWN0KCJ4IikpOwotICAgICAgICBmdW5MaXN0LmFkZChudWxsKTsKLSAgICAgICAgZnVuTGlzdC5hZGQobmV3IEZ1bk9iamVjdCgieSIpKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoZnVuTGlzdC5pdGVyYXRvcigpKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscygieCIsIGNvbnZlcnRlZC5nZXQoMCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTnVsbE5vZGUuZ2V0SW5zdGFuY2UoKSwgY29udmVydGVkLmdldCgxKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieSIsIGNvbnZlcnRlZC5nZXQoMikuYXNUZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGlubmVyTWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBpbm5lck1hcC5wdXQoImEiLCAiYiIpOwotCi0gICAgICAgIG1hcC5wdXQoIngiLCBuZXcgRnVuT2JqZWN0KCJ4IikpOwotICAgICAgICBtYXAucHV0KCJ5IiwgInNvbWUiKTsKLSAgICAgICAgbWFwLnB1dCgieiIsIGlubmVyTWFwKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQobWFwKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb25PYmplY3QgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbk9iamVjdCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic29tZSIsIGpzb25PYmplY3QuZ2V0KCJ5IikuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIngiLCBqc29uT2JqZWN0LmdldCgieCIpLmFzVGV4dCgpKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBpbm5lckpzb25PYmplY3QgPSBqc29uT2JqZWN0LmdldCgieiIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGlubmVySnNvbk9iamVjdCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiYiIsIGlubmVySnNvbk9iamVjdC5nZXQoImEiKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTaG91bGRTZXJpYWxpemVNYXBFbnRyaWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGdyYXBoID0gVGlua2VyR3JhcGgub3BlbigpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdjEgPSBncmFwaC5hZGRWZXJ0ZXgoKTsKLSAgICAgICAgZmluYWwgRGF0ZSBkID0gbmV3IERhdGUoKTsKLQotICAgICAgICBmaW5hbCBNYXA8T2JqZWN0LCBPYmplY3Q+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWFwLnB1dCgieCIsIDEpOwotICAgICAgICBtYXAucHV0KHYxLCAxMDApOwotICAgICAgICBtYXAucHV0KGQsICJ0ZXN0Iik7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KEl0ZXJhdG9yVXRpbHMuYXNMaXN0KG1hcCkpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbk9iamVjdCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0gICAgICAgIGpzb25PYmplY3QuZWxlbWVudHMoKS5mb3JFYWNoUmVtYWluaW5nKGUgLT4gewotICAgICAgICAgICAgaWYgKGUuaGFzKCJ4IikpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGUuZ2V0KCJ4IikuYXNJbnQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLmhhcyh2MS5pZCgpLnRvU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAsIGUuZ2V0KHYxLmlkKCkudG9TdHJpbmcoKSkuYXNJbnQoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChlLmhhcyhTdGREYXRlRm9ybWF0Lmluc3RhbmNlLmZvcm1hdChkKSkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgZS5nZXQoU3RkRGF0ZUZvcm1hdC5pbnN0YW5jZS5mb3JtYXQoZCkpLmFzVGV4dCgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmYWlsKCJNYXAgZW50cmllcyBjb250YWlucyBhIGtleSB0aGF0IGlzIG5vdCBwYXJ0IG9mIHdoYXQgd2FzIHNlcmlhbGl6ZWQiKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVFZGdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoIGcgPSBUaW5rZXJHcmFwaC5vcGVuKCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IGcuYWRkVmVydGV4KCk7Ci0gICAgICAgIGZpbmFsIEVkZ2UgZSA9IHYxLmFkZEVkZ2UoInRlc3QiLCB2Mik7Ci0gICAgICAgIGUucHJvcGVydHkoImFiYyIsIDEyMyk7Ci0KLSAgICAgICAgZmluYWwgSXRlcmFibGU8RWRnZT4gaXRlcmFibGUgPSBJdGVyYXRvclV0aWxzLmxpc3QoZy5lZGdlcygpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KGl0ZXJhYmxlKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb252ZXJ0ZWQuc2l6ZSgpKTsKLQotICAgICAgICBmaW5hbCBKc29uTm9kZSBlZGdlQXNKc29uID0gY29udmVydGVkLmdldCgwKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChlZGdlQXNKc29uKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoKChMb25nKSBlLmlkKCkpLmludFZhbHVlKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLklEKS5hc0xvbmcoKSk7ICAvLyBsb3NzeQotICAgICAgICBhc3NlcnRFcXVhbHMoKChMb25nKSB2MS5pZCgpKS5pbnRWYWx1ZSgpLCBlZGdlQXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5PVVQpLmFzTG9uZygpKTsvLyBsb3NzeQotICAgICAgICBhc3NlcnRFcXVhbHMoKChMb25nKSB2Mi5pZCgpKS5pbnRWYWx1ZSgpLCBlZGdlQXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5JTikuYXNMb25nKCkpOyAvLyBsb3NzeQotICAgICAgICBhc3NlcnRFcXVhbHMoZS5sYWJlbCgpLCBlZGdlQXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5MQUJFTCkuYXNUZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZS5pblZlcnRleCgpLmxhYmVsKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLklOX0xBQkVMKS5hc1RleHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhlLm91dFZlcnRleCgpLmxhYmVsKCksIGVkZ2VBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLk9VVF9MQUJFTCkuYXNUZXh0KCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIHByb3BlcnRpZXMgPSBlZGdlQXNKc29uLmdldChHcmFwaFNPTlRva2Vucy5QUk9QRVJUSUVTKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChwcm9wZXJ0aWVzKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJhYmMiLCBwcm9wZXJ0aWVzLmdldCgiYWJjIikuZ2V0KEdyYXBoU09OVG9rZW5zLktFWSkudGV4dFZhbHVlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMTIzLCBwcm9wZXJ0aWVzLmdldCgiYWJjIikuZ2V0KEdyYXBoU09OVG9rZW5zLlZBTFVFKS5pbnRWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUVkZ2VQcm9wZXJ0eSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaCBnID0gVGlua2VyR3JhcGgub3BlbigpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdjEgPSBnLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBWZXJ0ZXggdjIgPSBnLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBFZGdlIGUgPSB2MS5hZGRFZGdlKCJ0ZXN0IiwgdjIpOwotICAgICAgICBlLnByb3BlcnR5KCJhYmMiLCAxMjMpOwotCi0gICAgICAgIGZpbmFsIEl0ZXJhYmxlPFByb3BlcnR5PE9iamVjdD4+IGl0ZXJhYmxlID0gSXRlcmF0b3JVdGlscy5saXN0KGUucHJvcGVydGllcygiYWJjIikpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcmVzdWx0cyA9IFNFUklBTElaRVIuc2VyaWFsaXplUmVzcG9uc2VBc1N0cmluZyhSZXNwb25zZU1lc3NhZ2UuYnVpbGQobXNnKS5yZXN1bHQoaXRlcmFibGUpLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGpzb24gPSBtYXBwZXIucmVhZFRyZWUocmVzdWx0cyk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChqc29uKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG1zZy5nZXRSZXF1ZXN0SWQoKS50b1N0cmluZygpLCBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVRVUVTVCkuYXNUZXh0KCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBjb252ZXJ0ZWQgPSBqc29uLmdldChTZXJUb2tlbnMuVE9LRU5fUkVTVUxUKS5nZXQoU2VyVG9rZW5zLlRPS0VOX0RBVEEpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoY29udmVydGVkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGNvbnZlcnRlZC5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIHByb3BlcnR5QXNKc29uID0gY29udmVydGVkLmdldCgwKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChwcm9wZXJ0eUFzSnNvbik7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEyMywgcHJvcGVydHlBc0pzb24uZ2V0KCJ2YWx1ZSIpLmFzSW50KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplVG9Kc29uSXRlcmF0b3JXaXRoRW1iZWRkZWRNYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGggZyA9IFRpbmtlckdyYXBoLm9wZW4oKTsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSBnLmFkZFZlcnRleCgpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPYmplY3Q+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWFwLnB1dCgieCIsIDUwMCk7Ci0gICAgICAgIG1hcC5wdXQoInkiLCAic29tZSIpOwotCi0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxPYmplY3Q+IGZyaWVuZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZnJpZW5kcy5hZGQoIngiKTsKLSAgICAgICAgZnJpZW5kcy5hZGQoNSk7Ci0gICAgICAgIGZyaWVuZHMuYWRkKG1hcCk7Ci0KLSAgICAgICAgdi5wcm9wZXJ0eShWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zaW5nbGUsICJmcmllbmRzIiwgZnJpZW5kcyk7Ci0KLSAgICAgICAgZmluYWwgSXRlcmFibGUgaXRlcmFibGUgPSBJdGVyYXRvclV0aWxzLmxpc3QoZy52ZXJ0aWNlcygpKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcoUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKG1zZykucmVzdWx0KGl0ZXJhYmxlKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUganNvbiA9IG1hcHBlci5yZWFkVHJlZShyZXN1bHRzKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGpzb24pOwotICAgICAgICBhc3NlcnRFcXVhbHMobXNnLmdldFJlcXVlc3RJZCgpLnRvU3RyaW5nKCksIGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVFVRVNUKS5hc1RleHQoKSk7Ci0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGNvbnZlcnRlZCA9IGpzb24uZ2V0KFNlclRva2Vucy5UT0tFTl9SRVNVTFQpLmdldChTZXJUb2tlbnMuVE9LRU5fREFUQSk7Ci0KLSAgICAgICAgYXNzZXJ0Tm90TnVsbChjb252ZXJ0ZWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY29udmVydGVkLnNpemUoKSk7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgdmVydGV4QXNKc29uID0gY29udmVydGVkLmdldCgwKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbCh2ZXJ0ZXhBc0pzb24pOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIHByb3BlcnRpZXMgPSB2ZXJ0ZXhBc0pzb24uZ2V0KEdyYXBoU09OVG9rZW5zLlBST1BFUlRJRVMpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHByb3BlcnRpZXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcHJvcGVydGllcy5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIEpzb25Ob2RlIGZyaWVuZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmdldCgiZnJpZW5kcyIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZnJpZW5kUHJvcGVydGllcy5zaXplKCkpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBmcmllbmRzUHJvcGVydHkgPSBmcmllbmRQcm9wZXJ0aWVzLmdldCgwKTsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChmcmllbmRzUHJvcGVydHkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgZnJpZW5kcy5zaXplKCkpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBvYmplY3QxID0gZnJpZW5kc1Byb3BlcnR5LmdldChHcmFwaFNPTlRva2Vucy5WQUxVRSkuZ2V0KDApLmFzVGV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIngiLCBvYmplY3QxKTsKLQotICAgICAgICBmaW5hbCBpbnQgb2JqZWN0MiA9IGZyaWVuZHNQcm9wZXJ0eS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUUpLmdldCgxKS5hc0ludCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoNSwgb2JqZWN0Mik7Ci0KLSAgICAgICAgZmluYWwgSnNvbk5vZGUgb2JqZWN0MyA9IGZyaWVuZHNQcm9wZXJ0eS5nZXQoR3JhcGhTT05Ub2tlbnMuVkFMVUUpLmdldCgyKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgb2JqZWN0My5nZXQoIngiKS5hc0ludCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzb21lIiwgb2JqZWN0My5nZXQoInkiKS5hc1RleHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVUb0pzb25NYXBXaXRoRWxlbWVudEZvcktleSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCA9IFRpbmtlckZhY3RvcnkuY3JlYXRlQ2xhc3NpYygpOwotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxWZXJ0ZXgsIEludGVnZXI+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWFwLnB1dChnLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5uZXh0KCksIDEwMDApOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKFJlc3BvbnNlTWVzc2FnZS5idWlsZChtc2cpLnJlc3VsdChtYXApLmNyZWF0ZSgpLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBKc29uTm9kZSBqc29uID0gbWFwcGVyLnJlYWRUcmVlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydE5vdE51bGwoanNvbik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhtc2cuZ2V0UmVxdWVzdElkKCkudG9TdHJpbmcoKSwganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFUVVFU1QpLmFzVGV4dCgpKTsKLSAgICAgICAgZmluYWwgSnNvbk5vZGUgY29udmVydGVkID0ganNvbi5nZXQoU2VyVG9rZW5zLlRPS0VOX1JFU1VMVCkuZ2V0KFNlclRva2Vucy5UT0tFTl9EQVRBKTsKLQotICAgICAgICBhc3NlcnROb3ROdWxsKGNvbnZlcnRlZCk7Ci0KLSAgICAgICAgLy8gd2l0aCBubyBlbWJlZGRlZCB0eXBlcyB0aGUga2V5ICh3aGljaCBpcyBhIHZlcnRleCkgc2ltcGx5IHNlcmlhbGl6ZXMgb3V0IHRvIGFuIGlkCi0gICAgICAgIC8vIHsicmVzdWx0Ijp7IjEiOjEwMDB9LCJjb2RlIjoyMDAsInJlcXVlc3RJZCI6IjJkNjIxNjFiLTk1NDQtNGYzOS1hZjQ0LTYyZWM0OWY5YTU5NSIsInR5cGUiOjB9Ci0gICAgICAgIGFzc2VydEVxdWFscygxMDAwLCBjb252ZXJ0ZWQuZ2V0KCIxIikuYXNJbnQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlcXVlc3ROaWNlbHlXaXRoTm9BcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFVVSUQgcmVxdWVzdCA9IFVVSUQuZnJvbVN0cmluZygiMDExQ0ZFRTktRjY0MC00ODQ0LUFDOTMtMDM0NDQ4QUMwRTgwIik7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIG0gPSBTRVJJQUxJWkVSLmRlc2VyaWFsaXplUmVxdWVzdChTdHJpbmcuZm9ybWF0KCJ7XCJyZXF1ZXN0SWRcIjpcIiVzXCIsXCJvcFwiOlwiZXZhbFwifSIsIHJlcXVlc3QpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3QsIG0uZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImV2YWwiLCBtLmdldE9wKCkpOwotICAgICAgICBhc3NlcnROb3ROdWxsKG0uZ2V0QXJncygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG0uZ2V0QXJncygpLnNpemUoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlcXVlc3ROaWNlbHlXaXRoQXJncygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIHJlcXVlc3QgPSBVVUlELmZyb21TdHJpbmcoIjAxMUNGRUU5LUY2NDAtNDg0NC1BQzkzLTAzNDQ0OEFDMEU4MCIpOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBtID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlcXVlc3QoU3RyaW5nLmZvcm1hdCgie1wicmVxdWVzdElkXCI6XCIlc1wiLFwib3BcIjpcImV2YWxcIixcImFyZ3NcIjp7XCJ4XCI6XCJ5XCJ9fSIsIHJlcXVlc3QpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJlcXVlc3QsIG0uZ2V0UmVxdWVzdElkKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImV2YWwiLCBtLmdldE9wKCkpOwotICAgICAgICBhc3NlcnROb3ROdWxsKG0uZ2V0QXJncygpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ5IiwgbS5nZXRBcmdzKCkuZ2V0KCJ4IikpOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gU2VyaWFsaXphdGlvbkV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlcXVlc3RQYXJzZU1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlcXVlc3QoIntcInJlcXVlc3RJZFwiOlwiJXNcIixcIm9wXCI6XCJldmFsXCIsXCJhcmdzXCI6e1wieFwiOlwieVwifX0iKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUZ1bGxSZXNwb25zZU1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVVVJRCBpZCA9IFVVSUQucmFuZG9tVVVJRCgpOwotCi0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gbWV0YURhdGEgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIG1ldGFEYXRhLnB1dCgidGVzdCIsICJ0aGlzIik7Ci0gICAgICAgIG1ldGFEYXRhLnB1dCgib25lIiwgMSk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBhdHRyaWJ1dGVzID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBhdHRyaWJ1dGVzLnB1dCgidGVzdCIsICJ0aGF0Iik7Ci0gICAgICAgIGF0dHJpYnV0ZXMucHV0KCJ0d28iLCAyKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoaWQpCi0gICAgICAgICAgICAgICAgLnJlc3BvbnNlTWV0YURhdGEobWV0YURhdGEpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpCi0gICAgICAgICAgICAgICAgLnJlc3VsdCgic29tZS1yZXN1bHQiKQotICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIndvcmtlZCIpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzID0gU0VSSUFMSVpFUi5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gU0VSSUFMSVpFUi5kZXNlcmlhbGl6ZVJlc3BvbnNlKHJlc3VsdHMpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhpZCwgZGVzZXJpYWxpemVkLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0aGlzIiwgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldE1ldGEoKS5nZXQoInRlc3QiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCBkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0TWV0YSgpLmdldCgib25lIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInNvbWUtcmVzdWx0IiwgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygidGhhdCIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRBdHRyaWJ1dGVzKCkuZ2V0KCJ0ZXN0IikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKS5nZXQoInR3byIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKFJlc3BvbnNlU3RhdHVzQ29kZS5TVUNDRVNTLmdldFZhbHVlKCksIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuZ2V0VmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygid29ya2VkIiwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREZXNlcmlhbGl6ZVJlc3BvbnNlTWVzc2FnZVdpdGhOdWxsTWVzc2FnZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBVVUlEIGlkID0gVVVJRC5yYW5kb21VVUlEKCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtZXRhRGF0YSA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgbWV0YURhdGEucHV0KCJ0ZXN0IiwgVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gYXR0cmlidXRlcyA9IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKGlkKQotICAgICAgICAgICAgICAgIC5yZXNwb25zZU1ldGFEYXRhKG1ldGFEYXRhKQotICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgLnJlc3VsdCgic29tZS1yZXN1bHQiKQotICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBwYXNzIHRoZSBudWxsIHZhbHVlCi0gICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UobnVsbCkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIHJlc3VsdHMgPSBTRVJJQUxJWkVSLnNlcmlhbGl6ZVJlc3BvbnNlQXNTdHJpbmcocmVzcG9uc2UsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBTRVJJQUxJWkVSLmRlc2VyaWFsaXplUmVzcG9uc2UocmVzdWx0cyk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKFNFUklBTElaRVIuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiIHNob3VsZCBiZSBhYmxlIHRvIGRlc2VyaWFsaXplIFJlc3BvbnNlTWVzc2FnZSAiCi0gICAgICAgICAgICAgICAgKyAid2l0aCBudWxsIG1lc3NhZ2UgZmllbGQiLCBkZXNlcmlhbGl6ZWQpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgRnVuT2JqZWN0IHsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgdmFsOwotCi0gICAgICAgIHB1YmxpYyBGdW5PYmplY3QoU3RyaW5nIHZhbCkgewotICAgICAgICAgICAgdGhpcy52YWwgPSB2YWw7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb2xvcklvUmVnaXN0cnkgZXh0ZW5kcyBBYnN0cmFjdElvUmVnaXN0cnkgewotICAgICAgICBwdWJsaWMgQ29sb3JJb1JlZ2lzdHJ5KCkgewotICAgICAgICAgICAgcmVnaXN0ZXIoR3JhcGhTT05Jby5jbGFzcywgbnVsbCwgbmV3IEdyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjFUZXN0LkNvbG9yU2ltcGxlTW9kdWxlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb2xvclNpbXBsZU1vZHVsZSBleHRlbmRzIFNpbXBsZU1vZHVsZSB7Ci0gICAgICAgIHB1YmxpYyBDb2xvclNpbXBsZU1vZHVsZSgpIHsKLSAgICAgICAgICAgIHN1cGVyKCJjb2xvci1mdW4iKTsKLSAgICAgICAgICAgIGFkZFNlcmlhbGl6ZXIoQ29sb3IuY2xhc3MsIG5ldyBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclYxVGVzdC5Db2xvclNlcmlhbGl6ZXIoKSk7Ci0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29sb3JTZXJpYWxpemVyIGV4dGVuZHMgU3RkU2VyaWFsaXplcjxDb2xvcj4gewotICAgICAgICBwdWJsaWMgQ29sb3JTZXJpYWxpemVyKCkgewotICAgICAgICAgICAgc3VwZXIoQ29sb3IuY2xhc3MpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBDb2xvciBjb2xvciwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VyaWFsaXplclByb3ZpZGVyIHNlcmlhbGl6ZXJQcm92aWRlcikgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uR2VuZXJhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlQm9vbGVhbihjb2xvci5lcXVhbHMoQ29sb3IuUkVEKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjRUZXN0LmphdmEgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL0dyYXBoU09OVW50eXBlZE1lc3NhZ2VTZXJpYWxpemVyVjRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwN2Y0MwotLS0gL2Rldi9udWxsCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNFRlc3QuamF2YQpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlcjsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5VbnBvb2xlZEJ5dGVCdWZBbGxvY2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKK2ltcG9ydCBpby5uZXR0eS51dGlsLkNoYXJzZXRVdGlsOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLkpzb25Ob2RlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlclRva2Vucy5UT0tFTl9EQVRBOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOworCitwdWJsaWMgY2xhc3MgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNFRlc3QgeworCisgICAgcHJpdmF0ZSBmaW5hbCBSZXNwb25zZU1lc3NhZ2UuQnVpbGRlciByZXNwb25zZU1lc3NhZ2VCdWlsZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFNPTlVudHlwZWRNZXNzYWdlU2VyaWFsaXplclY0IHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhTT05VbnR5cGVkTWVzc2FnZVNlcmlhbGl6ZXJWNCgpOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7CisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3RNYXBwZXIgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpOworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVDaHVua2VkUmVzcG9uc2VNZXNzYWdlKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGhlYWRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChBcnJheXMuYXNMaXN0KCJoZWFkZXIiLCAwKSkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGZvb3RlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChBcnJheXMuYXNMaXN0KCJmb290ZXIiLCAzKSkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIwID0gc2VyaWFsaXplci53cml0ZUhlYWRlcihoZWFkZXIsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIxID0gc2VyaWFsaXplci53cml0ZUNodW5rKEFycmF5cy5hc0xpc3QoImNodW5rIiwgMSksIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIyID0gc2VyaWFsaXplci53cml0ZUNodW5rKEFycmF5cy5hc0xpc3QoImNodW5rIiwgMiksIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIzID0gc2VyaWFsaXplci53cml0ZUZvb3Rlcihmb290ZXIsIGFsbG9jYXRvcik7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYkNvbWJpbmVkID0gYWxsb2NhdG9yLmJ1ZmZlcigpLndyaXRlQnl0ZXMoYmIwKS53cml0ZUJ5dGVzKGJiMSkud3JpdGVCeXRlcyhiYjIpLndyaXRlQnl0ZXMoYmIzKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IGJiQ29tYmluZWQucmVhZENoYXJTZXF1ZW5jZShiYkNvbWJpbmVkLnJlYWRhYmxlQnl0ZXMoKSwgQ2hhcnNldFV0aWwuVVRGXzgpLnRvU3RyaW5nKCk7CisKKyAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoImhlYWRlciIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KDApLnRleHRWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb290ZXIiLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLmdldCg2KS50ZXh0VmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg4LCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLnNpemUoKSk7CisgICAgICAgIGFzc2VydE51bGwobm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgiY29kZSIpLmFzSW50KCkpOworCisgICAgICAgIC8vIGEgbWVzc2FnZSBjb21wb3NlZCBvZiBhbGwgY2h1bmtzIG11c3QgYmUgZGVzZXJpYWxpemVkCisgICAgICAgIGJiQ29tYmluZWQucmVzZXRSZWFkZXJJbmRleCgpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJiQ29tYmluZWQpOworICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLmNvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhudWxsLCBkZXNlcmlhbGl6ZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDgsICgoTGlzdClkZXNlcmlhbGl6ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKS5zaXplKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplUmVzcG9uc2VNZXNzYWdlV2l0aG91dERhdGEoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiwgSnNvblByb2Nlc3NpbmdFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgaGVhZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIwID0gc2VyaWFsaXplci53cml0ZUhlYWRlcihoZWFkZXIsIGFsbG9jYXRvcik7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGpzb24gPSBiYjAucmVhZENoYXJTZXF1ZW5jZShiYjAucmVhZGFibGVCeXRlcygpLCBDaGFyc2V0VXRpbC5VVEZfOCkudG9TdHJpbmcoKTsKKworICAgICAgICBmaW5hbCBKc29uTm9kZSBub2RlID0gbWFwcGVyLnJlYWRUcmVlKGpzb24pOworCisgICAgICAgIGFzc2VydEVxdWFscygwLCBub2RlLmdldCgicmVzdWx0IikuZ2V0KFRPS0VOX0RBVEEpLnNpemUoKSk7CisgICAgICAgIGFzc2VydE51bGwobm9kZS5nZXQoInN0YXR1cyIpLmdldCgibWVzc2FnZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgbm9kZS5nZXQoInN0YXR1cyIpLmdldCgiY29kZSIpLmFzSW50KCkpOworCisgICAgICAgIGJiMC5yZXNldFJlYWRlckluZGV4KCk7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplQmluYXJ5UmVzcG9uc2UoYmIwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5jb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMobnVsbCwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygwLCAoKExpc3QpZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKSkuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUNodW5rZWRSZXNwb25zZU1lc3NhZ2VXaXRoRW1wdHlEYXRhKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGhlYWRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChuZXcgQXJyYXlMaXN0PD4oKSkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIk9LIikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjAgPSBzZXJpYWxpemVyLndyaXRlSGVhZGVyKGhlYWRlciwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IGJiMC5yZWFkQ2hhclNlcXVlbmNlKGJiMC5yZWFkYWJsZUJ5dGVzKCksIENoYXJzZXRVdGlsLlVURl84KS50b1N0cmluZygpOworCisgICAgICAgIGZpbmFsIEpzb25Ob2RlIG5vZGUgPSBtYXBwZXIucmVhZFRyZWUoanNvbik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuc2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJPSyIsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoIm1lc3NhZ2UiKS5hc1RleHQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygyMDAsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoImNvZGUiKS5hc0ludCgpKTsKKworICAgICAgICBiYjAucmVzZXRSZWFkZXJJbmRleCgpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJiMCk7CisgICAgICAgIGFzc2VydEVxdWFscygyMDAsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkuY29kZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJPSyIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgKChMaXN0KWRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLnNpemUoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVDaHVua2VkUmVzcG9uc2VNZXNzYWdlV2l0aEVycm9yKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24sIEpzb25Qcm9jZXNzaW5nRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGhlYWRlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChBcnJheXMuYXNMaXN0KCJoZWFkZXIiLCAwKSkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGZvb3RlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChBcnJheXMuYXNMaXN0KCJmb290ZXIiLCAzKSkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJTRVJWRVJfRVJST1IiKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMCA9IHNlcmlhbGl6ZXIud3JpdGVIZWFkZXIoaGVhZGVyLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMSA9IHNlcmlhbGl6ZXIud3JpdGVDaHVuayhBcnJheXMuYXNMaXN0KCJjaHVuayIsIDEpLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMiA9IHNlcmlhbGl6ZXIud3JpdGVDaHVuayhBcnJheXMuYXNMaXN0KCJjaHVuayIsIDIpLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiMyA9IHNlcmlhbGl6ZXIud3JpdGVFcnJvckZvb3Rlcihmb290ZXIsIGFsbG9jYXRvcik7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYkNvbWJpbmVkID0gYWxsb2NhdG9yLmJ1ZmZlcigpLndyaXRlQnl0ZXMoYmIwKS53cml0ZUJ5dGVzKGJiMSkud3JpdGVCeXRlcyhiYjIpLndyaXRlQnl0ZXMoYmIzKTsKKworICAgICAgICBmaW5hbCBTdHJpbmcganNvbiA9IGJiQ29tYmluZWQucmVhZENoYXJTZXF1ZW5jZShiYkNvbWJpbmVkLnJlYWRhYmxlQnl0ZXMoKSwgQ2hhcnNldFV0aWwuVVRGXzgpLnRvU3RyaW5nKCk7CisKKyAgICAgICAgZmluYWwgSnNvbk5vZGUgbm9kZSA9IG1hcHBlci5yZWFkVHJlZShqc29uKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoImhlYWRlciIsIG5vZGUuZ2V0KCJyZXN1bHQiKS5nZXQoVE9LRU5fREFUQSkuZ2V0KDApLnRleHRWYWx1ZSgpKTsKKyAgICAgICAgLy8gNiBpdGVtcyBpbiBmaXJzdCAzIGNodW5rcworICAgICAgICBhc3NlcnRFcXVhbHMoNiwgbm9kZS5nZXQoInJlc3VsdCIpLmdldChUT0tFTl9EQVRBKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlNFUlZFUl9FUlJPUiIsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoIm1lc3NhZ2UiKS5hc1RleHQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg1MDAsIG5vZGUuZ2V0KCJzdGF0dXMiKS5nZXQoImNvZGUiKS5hc0ludCgpKTsKKworICAgICAgICBiYkNvbWJpbmVkLnJlc2V0UmVhZGVySW5kZXgoKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXNwb25zZShiYkNvbWJpbmVkKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUwMCwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldENvZGUoKS5jb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlNFUlZFUl9FUlJPUiIsIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNiwgKChMaXN0KWRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpLnNpemUoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWU0MmQ1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLmJpbmFyeTsKLQotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOwotaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Ub2tlbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVxdWVzdE1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5tZXNzYWdlLlJlc3BvbnNlU3RhdHVzQ29kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLlNlcmlhbGl6YXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LlR5cGVTZXJpYWxpemVyUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5lbXB0eS5FbXB0eUdyYXBoOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotCi1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Nb2NraXRvSGFtY3Jlc3RNYXRjaGVyQWRhcHRlci5yZWZsZWN0aW9uRXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJBc3NlcnQuYXNzZXJ0VGhhdDsKLWltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmhhc0l0ZW1JbkFycmF5OwotCi1wdWJsaWMgY2xhc3MgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxVGVzdCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmQWxsb2NhdG9yIGFsbG9jYXRvciA9IEJ5dGVCdWZBbGxvY2F0b3IuREVGQVVMVDsKLSAgICBwcml2YXRlIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpOwotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlcXVlc3QoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7Ci0gICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0ID0gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm91dCgpLmFzQWRtaW4oKTsKLQotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGFsaWFzZXMucHV0KCJnIiwiZyIpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZChUb2tlbnMuT1BTX0JZVEVDT0RFKQotICAgICAgICAgICAgICAgIC5wcm9jZXNzb3IoInRyYXZlcnNhbCIpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfR1JFTUxJTiwgdC5nZXRCeXRlY29kZSgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoVG9rZW5zLkFSR1NfQUxJQVNFUywgYWxpYXNlcykKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShyZXF1ZXN0LCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBpbnQgbWltZUxlbiA9IGJ1ZmZlci5yZWFkQnl0ZSgpOwotICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVttaW1lTGVuXTsKLSAgICAgICAgYnVmZmVyLnJlYWRCeXRlcyhieXRlcyk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBtaW1lVHlwZSA9IG5ldyBTdHJpbmcoYnl0ZXMsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KGJ1ZmZlcik7Ci0gICAgICAgIGFzc2VydFRoYXQocmVxdWVzdCwgcmVmbGVjdGlvbkVxdWFscyhkZXNlcmlhbGl6ZWQpKTsKLSAgICAgICAgYXNzZXJ0VGhhdChzZXJpYWxpemVyLm1pbWVUeXBlc1N1cHBvcnRlZCgpLCBoYXNJdGVtSW5BcnJheShtaW1lVHlwZSkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXF1ZXN0T3ZlclRleHQoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgib3AxIikKLSAgICAgICAgICAgICAgICAucHJvY2Vzc29yKCJwcm9jMSIpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoImFyZzEiLCAidmFsdWUxIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgU3RyaW5nIGJhc2U2NCA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzU3RyaW5nKHJlcXVlc3QsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXF1ZXN0KGJhc2U2NCk7Ci0gICAgICAgIGFzc2VydFRoYXQocmVxdWVzdCwgcmVmbGVjdGlvbkVxdWFscyhkZXNlcmlhbGl6ZWQpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUFuZERlc2VyaWFsaXplUmVxdWVzdFdpdGhvdXRBcmdzKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoIm9wMSIpCi0gICAgICAgICAgICAgICAgLnByb2Nlc3NvcigicHJvYzEiKQotICAgICAgICAgICAgICAgIC5vdmVycmlkZVJlcXVlc3RJZChVVUlELnJhbmRvbVVVSUQoKSkKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShyZXF1ZXN0LCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBpbnQgbWltZUxlbiA9IGJ1ZmZlci5yZWFkQnl0ZSgpOwotICAgICAgICBidWZmZXIucmVhZEJ5dGVzKG5ldyBieXRlW21pbWVMZW5dKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlcXVlc3QoYnVmZmVyKTsKLSAgICAgICAgYXNzZXJ0VGhhdChyZXF1ZXN0LCByZWZsZWN0aW9uRXF1YWxzKGRlc2VyaWFsaXplZCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXF1ZXN0V2l0aFVuc2V0UHJvY2Vzc29yKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSByZXF1ZXN0ID0gUmVxdWVzdE1lc3NhZ2UuYnVpbGQoIm9wMSIpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoImsiLCAxKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLQotICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVxdWVzdEFzQmluYXJ5KHJlcXVlc3QsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIGludCBtaW1lTGVuID0gYnVmZmVyLnJlYWRCeXRlKCk7Ci0gICAgICAgIGJ1ZmZlci5yZWFkQnl0ZXMobmV3IGJ5dGVbbWltZUxlbl0pOwotICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVxdWVzdChidWZmZXIpOwotICAgICAgICBhc3NlcnRUaGF0KHJlcXVlc3QsIHJlZmxlY3Rpb25FcXVhbHMoZGVzZXJpYWxpemVkKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlc3BvbnNlKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoVVVJRC5yYW5kb21VVUlEKCkpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpCi0gICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIkZvdW5kIikKLSAgICAgICAgICAgICAgICAuc3RhdHVzQXR0cmlidXRlKCJrMSIsIDEpCi0gICAgICAgICAgICAgICAgLnJlc3VsdCgiVGhpcyBpcyBhIGZpbmUgbWVzc2FnZSB3aXRoIGEgc3RyaW5nIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2UsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoYnVmZmVyKTsKLSAgICAgICAgYXNzZXJ0UmVzcG9uc2VFcXVhbHMocmVzcG9uc2UsIGRlc2VyaWFsaXplZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlc3BvbnNlT3ZlclRleHQoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELnJhbmRvbVVVSUQoKSkKLSAgICAgICAgICAgICAgICAuY29kZShSZXNwb25zZVN0YXR1c0NvZGUuU1VDQ0VTUykKLSAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgiRm91bmQiKQotICAgICAgICAgICAgICAgIC5zdGF0dXNBdHRyaWJ1dGUoImsxIiwgMSkKLSAgICAgICAgICAgICAgICAucmVzdWx0KCJUaGlzIGlzIGEgZmluZSBtZXNzYWdlIHdpdGggYSBzdHJpbmciKQotICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgYmFzZTY0ID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKHJlc3BvbnNlLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlc3BvbnNlKGJhc2U2NCk7Ci0gICAgICAgIGFzc2VydFJlc3BvbnNlRXF1YWxzKHJlc3BvbnNlLCBkZXNlcmlhbGl6ZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZVdpdGhvdXRTdGF0dXNNZXNzYWdlKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoVVVJRC5yYW5kb21VVUlEKCkpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpCi0gICAgICAgICAgICAgICAgLnN0YXR1c0F0dHJpYnV0ZSgiazEiLCAxKQotICAgICAgICAgICAgICAgIC5yZXN1bHQoMTIzLjMpCi0gICAgICAgICAgICAgICAgLmNyZWF0ZSgpOwotCi0gICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHJlc3BvbnNlLCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlc3BvbnNlKGJ1ZmZlcik7Ci0gICAgICAgIGFzc2VydFJlc3BvbnNlRXF1YWxzKHJlc3BvbnNlLCBkZXNlcmlhbGl6ZWQpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZVdpdGhvdXRTdGF0dXNBdHRyaWJ1dGVzKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2UgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoVVVJRC5yYW5kb21VVUlEKCkpCi0gICAgICAgICAgICAgICAgLmNvZGUoUmVzcG9uc2VTdGF0dXNDb2RlLlNVQ0NFU1MpCi0gICAgICAgICAgICAgICAgLnJlc3VsdCgxMjMuMykKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2UsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoYnVmZmVyKTsKLSAgICAgICAgYXNzZXJ0UmVzcG9uc2VFcXVhbHMocmVzcG9uc2UsIGRlc2VyaWFsaXplZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlc3BvbnNlV2l0aG91dFJlc3VsdCgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgICAgIC5jb2RlKFJlc3BvbnNlU3RhdHVzQ29kZS5TRVJWRVJfRVJST1IpCi0gICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIlNvbWV0aGluZyBoYXBwZW5lZCBvbiB0aGUgc2VydmVyIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2UsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoYnVmZmVyKTsKLSAgICAgICAgYXNzZXJ0UmVzcG9uc2VFcXVhbHMocmVzcG9uc2UsIGRlc2VyaWFsaXplZCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRTdXBwb3J0Q29uZmlndXJhdGlvbk9mUmVnaXN0cnlCdWlsZGVyKCkgewotICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7Ci0gICAgICAgIGludCBjb3VudGVyID0gU2FtcGxlVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeUJ1aWxkZXIuY3JlYXRlQ291bnRlci5nZXQoKTsKLQotICAgICAgICBjb25maWcucHV0KEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5UT0tFTl9CVUlMREVSLCAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5iaW5hcnkuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxVGVzdCRTYW1wbGVUeXBlU2VyaWFsaXplclJlZ2lzdHJ5QnVpbGRlciIpOwotICAgICAgICBzZXJpYWxpemVyLmNvbmZpZ3VyZShjb25maWcsIG51bGwpOwotCi0gICAgICAgIGNvdW50ZXIgPSBTYW1wbGVUeXBlU2VyaWFsaXplclJlZ2lzdHJ5QnVpbGRlci5jcmVhdGVDb3VudGVyLmdldCgpIC0gY291bnRlcjsKLSAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIGEgY2FsbCB0byBgY3JlYXRlKClgCi0gICAgICAgIGFzc2VydEVxdWFscygxLCBjb3VudGVyKTsKLSAgICB9Ci0KLSAgICBAVGVzdChleHBlY3RlZCA9IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUaHJvd1doZW5Db25maWd1cmF0aW9uT2ZSZWdpc3RyeUJ1aWxkZXJGYWlscygpIHsKLSAgICAgICAgZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlnID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBjb25maWcucHV0KEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5UT0tFTl9CVUlMREVSLCAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5iaW5hcnkuTm9uRXhpc3RlbnRDbGFzcyIpOwotCi0gICAgICAgIHNlcmlhbGl6ZXIuY29uZmlndXJlKGNvbmZpZywgbnVsbCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRUb1N0cmluZ1NlcmlhbGl6ZSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxIHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxKCk7Ci0gICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsT2JqZWN0PiBjb25mID0gbmV3IEhhc2hNYXA8U3RyaW5nLE9iamVjdD4oKSB7ewotICAgICAgICAgICAgcHV0KEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMS5UT0tFTl9TRVJJQUxJWkVfUkVTVUxUX1RPX1NUUklORywgdHJ1ZSk7Ci0gICAgICAgIH19OwotICAgICAgICBzZXJpYWxpemVyLmNvbmZpZ3VyZShjb25mLCBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpKTsKLQotICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgbWVzc2FnZVdpdGhVbmV4cGVjdGVkVHlwZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZChVVUlELnJhbmRvbVVVSUQoKSkuCi0gICAgICAgICAgICAgICAgcmVzdWx0KGphdmEuYXd0LkNvbG9yLlJFRCkuY3JlYXRlKCk7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KG1lc3NhZ2VXaXRoVW5leHBlY3RlZFR5cGUsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoYnVmZmVyKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoamF2YS5hd3QuQ29sb3IuUkVELnRvU3RyaW5nKCksIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVG9TdHJpbmdTZXJpYWxpemVBc1RleHQoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpOwotICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLE9iamVjdD4gY29uZiA9IG5ldyBIYXNoTWFwPFN0cmluZyxPYmplY3Q+KCkge3sKLSAgICAgICAgICAgIHB1dChHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEuVE9LRU5fU0VSSUFMSVpFX1JFU1VMVF9UT19TVFJJTkcsIHRydWUpOwotICAgICAgICB9fTsKLSAgICAgICAgc2VyaWFsaXplci5jb25maWd1cmUoY29uZiwgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSk7Ci0KLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIG1lc3NhZ2VXaXRoVW5leHBlY3RlZFR5cGUgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoVVVJRC5yYW5kb21VVUlEKCkpLgotICAgICAgICAgICAgICAgIHJlc3VsdChqYXZhLmF3dC5Db2xvci5SRUQpLmNyZWF0ZSgpOwotICAgICAgICBmaW5hbCBTdHJpbmcgYmFzZTY0ID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzU3RyaW5nKG1lc3NhZ2VXaXRoVW5leHBlY3RlZFR5cGUsIGFsbG9jYXRvcik7Ci0gICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplUmVzcG9uc2UoYmFzZTY0KTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoamF2YS5hd3QuQ29sb3IuUkVELnRvU3RyaW5nKCksIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXF1ZXN0QXNUZXh0KCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGNvbmYgPSBuZXcgSGFzaE1hcDxTdHJpbmcsT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclYxLlRPS0VOX1NFUklBTElaRV9SRVNVTFRfVE9fU1RSSU5HLCB0cnVlKTsKLSAgICAgICAgfX07Ci0gICAgICAgIHNlcmlhbGl6ZXIuY29uZmlndXJlKGNvbmYsIENvbGxlY3Rpb25zLmVtcHR5TWFwKCkpOwotCi0gICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCgib3AxIikKLSAgICAgICAgICAgICAgICAucHJvY2Vzc29yKCJwcm9jMSIpCi0gICAgICAgICAgICAgICAgLm92ZXJyaWRlUmVxdWVzdElkKFVVSUQucmFuZG9tVVVJRCgpKQotICAgICAgICAgICAgICAgIC5hZGRBcmcoImFyZzEiLCAidmFsdWUxIikKLSAgICAgICAgICAgICAgICAuY3JlYXRlKCk7Ci0KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShyZXF1ZXN0LCBhbGxvY2F0b3IpOwotICAgICAgICBmaW5hbCBpbnQgbWltZUxlbiA9IGJ1ZmZlci5yZWFkQnl0ZSgpOwotICAgICAgICBidWZmZXIucmVhZEJ5dGVzKG5ldyBieXRlW21pbWVMZW5dKTsKLSAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZVJlcXVlc3QoYnVmZmVyKTsKLSAgICAgICAgYXNzZXJ0VGhhdChyZXF1ZXN0LCByZWZsZWN0aW9uRXF1YWxzKGRlc2VyaWFsaXplZCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0UmVzcG9uc2VFcXVhbHMoUmVzcG9uc2VNZXNzYWdlIGV4cGVjdGVkLCBSZXNwb25zZU1lc3NhZ2UgYWN0dWFsKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRSZXF1ZXN0SWQoKSwgYWN0dWFsLmdldFJlcXVlc3RJZCgpKTsKLSAgICAgICAgLy8gU3RhdHVzCi0gICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCksIGFjdHVhbC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpLCBhY3R1YWwuZ2V0U3RhdHVzKCkuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKSwgYWN0dWFsLmdldFN0YXR1cygpLmdldEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIC8vIFJlc3VsdAotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLCBhY3R1YWwuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmdldFJlc3VsdCgpLmdldE1ldGEoKSwgYWN0dWFsLmdldFJlc3VsdCgpLmdldE1ldGEoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBTYW1wbGVUeXBlU2VyaWFsaXplclJlZ2lzdHJ5QnVpbGRlciBleHRlbmRzIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkuQnVpbGRlciB7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgQXRvbWljSW50ZWdlciBjcmVhdGVDb3VudGVyID0gbmV3IEF0b21pY0ludGVnZXIoKTsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFR5cGVTZXJpYWxpemVyUmVnaXN0cnkgY3JlYXRlKCkgewotICAgICAgICAgICAgY3JlYXRlQ291bnRlci5pbmNyZW1lbnRBbmRHZXQoKTsKLSAgICAgICAgICAgIHJldHVybiBzdXBlci5jcmVhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNFRlc3QuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L0dyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ExNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLmJpbmFyeTsKKworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmOworaW1wb3J0IGlvLm5ldHR5LmJ1ZmZlci5CeXRlQnVmQWxsb2NhdG9yOworaW1wb3J0IGlvLm5ldHR5LmhhbmRsZXIuY29kZWMuaHR0cC5IdHRwUmVzcG9uc2VTdGF0dXM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LlR5cGVTZXJpYWxpemVyUmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLm1lc3NhZ2UuUmVzcG9uc2VNZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitwdWJsaWMgY2xhc3MgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0VGVzdCB7CisKKyAgICBwcml2YXRlIGZpbmFsIEJ5dGVCdWZBbGxvY2F0b3IgYWxsb2NhdG9yID0gQnl0ZUJ1ZkFsbG9jYXRvci5ERUZBVUxUOworICAgIHByaXZhdGUgZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0IHNlcmlhbGl6ZXIgPSBuZXcgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0KCk7CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNhbXBsZVR5cGVTZXJpYWxpemVyUmVnaXN0cnlCdWlsZGVyIGV4dGVuZHMgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeS5CdWlsZGVyIHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBBdG9taWNJbnRlZ2VyIGNyZWF0ZUNvdW50ZXIgPSBuZXcgQXRvbWljSW50ZWdlcigpOworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeSBjcmVhdGUoKSB7CisgICAgICAgICAgICBjcmVhdGVDb3VudGVyLmluY3JlbWVudEFuZEdldCgpOworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNyZWF0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlc3BvbnNlSW5TaW5nbGVDaHVuaygpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnJlc3VsdChBcnJheXMuYXNMaXN0KDEsICJ0ZXN0IikpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci53cml0ZUhlYWRlcihyZXNwb25zZSwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIucmVhZENodW5rKGJ1ZmZlciwgdHJ1ZSk7CisgICAgICAgIGFzc2VydFJlc3BvbnNlRXF1YWxzKHJlc3BvbnNlLCBkZXNlcmlhbGl6ZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZUluSGVhZGVyQ2h1bmsoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChBcnJheXMuYXNMaXN0KDEsICJ0ZXN0IikpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci53cml0ZUhlYWRlcihyZXNwb25zZSwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIucmVhZENodW5rKGJ1ZmZlciwgdHJ1ZSk7CisgICAgICAgIGFzc2VydFJlc3BvbnNlRXF1YWxzKHJlc3BvbnNlLCBkZXNlcmlhbGl6ZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZUluRGF0YUNodW5rKCkgdGhyb3dzIFNlcmlhbGl6YXRpb25FeGNlcHRpb24geworICAgICAgICBmaW5hbCBMaXN0IGRhdGEgPSBBcnJheXMuYXNMaXN0KDEsICJ0ZXN0Iik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci53cml0ZUNodW5rKGRhdGEsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLnJlYWRDaHVuayhidWZmZXIsIGZhbHNlKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoZGF0YSwgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlc3BvbnNlSW5Gb290ZXJDaHVuaygpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAucmVzdWx0KEFycmF5cy5hc0xpc3QoMSwgInRlc3QiKSkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIk9LIikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLndyaXRlRm9vdGVyKHJlc3BvbnNlLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5yZWFkQ2h1bmsoYnVmZmVyLCBmYWxzZSk7CisgICAgICAgIGFzc2VydFJlc3BvbnNlRXF1YWxzKHJlc3BvbnNlLCBkZXNlcmlhbGl6ZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVFcnJvclJlc3BvbnNlV2l0aEVtcHR5RGF0YSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuRk9SQklEREVOKQorICAgICAgICAgICAgICAgIC5zdGF0dXNNZXNzYWdlKCJGT1JCSURERU4iKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IHNlcmlhbGl6ZXIud3JpdGVIZWFkZXIocmVzcG9uc2UsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLnJlYWRDaHVuayhidWZmZXIsIHRydWUpOworICAgICAgICBhc3NlcnRSZXNwb25zZUVxdWFscyhyZXNwb25zZSwgZGVzZXJpYWxpemVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUFuZERlc2VyaWFsaXplQ29tcG9zaXRlUmVzcG9uc2UoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIExpc3QgaGVhZGVyRGF0YSA9IEFycmF5cy5hc0xpc3QoMCwgImhlYWRlciIpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgaGVhZGVyID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAucmVzdWx0KGhlYWRlckRhdGEpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIExpc3QgY2h1bmtEYXRhMSA9IEFycmF5cy5hc0xpc3QoMSwgImRhdGExIik7CisgICAgICAgIGZpbmFsIExpc3QgY2h1bmtEYXRhMiA9IEFycmF5cy5hc0xpc3QoMiwgImRhdGEyIik7CisKKyAgICAgICAgZmluYWwgTGlzdCBmb290ZXJEYXRhID0gQXJyYXlzLmFzTGlzdCgweEZGLCAiZm9vdGVyIik7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBmb290ZXIgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKQorICAgICAgICAgICAgICAgIC5yZXN1bHQoZm9vdGVyRGF0YSkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIk9LIikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjAgPSBzZXJpYWxpemVyLndyaXRlSGVhZGVyKGhlYWRlciwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjEgPSBzZXJpYWxpemVyLndyaXRlQ2h1bmsoY2h1bmtEYXRhMSwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjIgPSBzZXJpYWxpemVyLndyaXRlQ2h1bmsoY2h1bmtEYXRhMiwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBiYjMgPSBzZXJpYWxpemVyLndyaXRlRm9vdGVyKGZvb3RlciwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiQ29tYmluZWQgPSBhbGxvY2F0b3IuYnVmZmVyKCkud3JpdGVCeXRlcyhiYjApLndyaXRlQnl0ZXMoYmIxKS53cml0ZUJ5dGVzKGJiMikud3JpdGVCeXRlcyhiYjMpOworCisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLnJlYWRDaHVuayhiYkNvbWJpbmVkLCB0cnVlKTsKKworICAgICAgICAvLyBTdGF0dXMKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZvb3Rlci5nZXRTdGF0dXMoKS5nZXRDb2RlKCksIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoZm9vdGVyLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIC8vIFJlc3VsdAorICAgICAgICBMaXN0PEludGVnZXI+IGNvbWJpbmVkRGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJlYW0ub2YoaGVhZGVyRGF0YSwgY2h1bmtEYXRhMSwgY2h1bmtEYXRhMiwgZm9vdGVyRGF0YSkuZm9yRWFjaChjb21iaW5lZERhdGE6OmFkZEFsbCk7CisgICAgICAgIGFzc2VydEVxdWFscyhjb21iaW5lZERhdGEsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVDb21wb3NpdGVSZXNwb25zZVdpdGhFcnJvcigpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgTGlzdCBoZWFkZXJEYXRhID0gQXJyYXlzLmFzTGlzdCgwLCAiaGVhZGVyIik7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBoZWFkZXIgPSBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKQorICAgICAgICAgICAgICAgIC5yZXN1bHQoaGVhZGVyRGF0YSkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgTGlzdCBjaHVua0RhdGExID0gQXJyYXlzLmFzTGlzdCgxLCAiZGF0YTEiKTsKKyAgICAgICAgZmluYWwgTGlzdCBjaHVua0RhdGEyID0gQXJyYXlzLmFzTGlzdCgyLCAiZGF0YTIiKTsKKworICAgICAgICBmaW5hbCBMaXN0IGZvb3RlckRhdGEgPSBBcnJheXMuYXNMaXN0KDB4RkYsICJmb290ZXIiKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGZvb3RlciA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLnJlc3VsdChmb290ZXJEYXRhKQorICAgICAgICAgICAgICAgIC5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIlNFUlZFUl9FUlJPUiIpCisgICAgICAgICAgICAgICAgLmV4Y2VwdGlvbigiZmlyZSBpbiBkYXRhIGNlbnRlciIpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIwID0gc2VyaWFsaXplci53cml0ZUhlYWRlcihoZWFkZXIsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIxID0gc2VyaWFsaXplci53cml0ZUNodW5rKGNodW5rRGF0YTEsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIyID0gc2VyaWFsaXplci53cml0ZUNodW5rKGNodW5rRGF0YTIsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYmIzID0gc2VyaWFsaXplci53cml0ZUVycm9yRm9vdGVyKGZvb3RlciwgYWxsb2NhdG9yKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJiQ29tYmluZWQgPSBhbGxvY2F0b3IuYnVmZmVyKCkud3JpdGVCeXRlcyhiYjApLndyaXRlQnl0ZXMoYmIxKS53cml0ZUJ5dGVzKGJiMikud3JpdGVCeXRlcyhiYjMpOworCisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLnJlYWRDaHVuayhiYkNvbWJpbmVkLCB0cnVlKTsKKworICAgICAgICAvLyBTdGF0dXMKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGZvb3Rlci5nZXRTdGF0dXMoKS5nZXRDb2RlKCksIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRDb2RlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoZm9vdGVyLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSwgZGVzZXJpYWxpemVkLmdldFN0YXR1cygpLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhmb290ZXIuZ2V0U3RhdHVzKCkuZ2V0RXhjZXB0aW9uKCksIGRlc2VyaWFsaXplZC5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgIC8vIFJlc3VsdAorICAgICAgICBMaXN0PEludGVnZXI+IGNvbWJpbmVkRGF0YSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTdHJlYW0ub2YoaGVhZGVyRGF0YSwgY2h1bmtEYXRhMSwgY2h1bmtEYXRhMikuZm9yRWFjaChjb21iaW5lZERhdGE6OmFkZEFsbCk7CisgICAgICAgIGFzc2VydEVxdWFscyhjb21iaW5lZERhdGEsIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU3VwcG9ydENvbmZpZ3VyYXRpb25PZlJlZ2lzdHJ5QnVpbGRlcigpIHsKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGludCBjb3VudGVyID0gU2FtcGxlVHlwZVNlcmlhbGl6ZXJSZWdpc3RyeUJ1aWxkZXIuY3JlYXRlQ291bnRlci5nZXQoKTsKKworICAgICAgICBjb25maWcucHV0KEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNC5UT0tFTl9CVUlMREVSLCAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5iaW5hcnkuR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0VGVzdCRTYW1wbGVUeXBlU2VyaWFsaXplclJlZ2lzdHJ5QnVpbGRlciIpOworICAgICAgICBzZXJpYWxpemVyLmNvbmZpZ3VyZShjb25maWcsIG51bGwpOworCisgICAgICAgIGNvdW50ZXIgPSBTYW1wbGVUeXBlU2VyaWFsaXplclJlZ2lzdHJ5QnVpbGRlci5jcmVhdGVDb3VudGVyLmdldCgpIC0gY291bnRlcjsKKyAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIGEgY2FsbCB0byBgY3JlYXRlKClgCisgICAgICAgIGFzc2VydEVxdWFscygxLCBjb3VudGVyKTsKKyAgICB9CisKKyAgICBAVGVzdChleHBlY3RlZCA9IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5jbGFzcykKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRUaHJvd1doZW5Db25maWd1cmF0aW9uT2ZSZWdpc3RyeUJ1aWxkZXJGYWlscygpIHsKKyAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWcgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGNvbmZpZy5wdXQoR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0LlRPS0VOX0JVSUxERVIsICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLmJpbmFyeS5Ob25FeGlzdGVudENsYXNzIik7CisKKyAgICAgICAgc2VyaWFsaXplci5jb25maWd1cmUoY29uZmlnLCBudWxsKTsKKyAgICB9CisKKyAgICAvLyBjb3B5LXBhc3RlIGJlY2F1c2UgcmVzcG9uc2UgZm9ybWF0IHdpbGwgYmUgZGlmZmVyZW50CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRSZXNwb25zZUVxdWFscyhmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZXhwZWN0ZWQsIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBhY3R1YWwpIHsKKyAgICAgICAgLy8gU3RhdHVzCisgICAgICAgIGlmIChleHBlY3RlZC5nZXRTdGF0dXMoKSAhPSBudWxsICYmIGFjdHVhbC5nZXRTdGF0dXMoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpLCBhY3R1YWwuZ2V0U3RhdHVzKCkuZ2V0Q29kZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIGFjdHVhbC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgICAgIC8vIFJlc3VsdAorICAgICAgICAvLyBudWxsID09IGVtcHR5IExpc3QKKyAgICAgICAgaWYgKCFpc0VtcHR5RGF0YShleHBlY3RlZCkgJiYgIWlzRW1wdHlEYXRhKGFjdHVhbCkpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRSZXN1bHQoKS5nZXREYXRhKCksIGFjdHVhbC5nZXRSZXN1bHQoKS5nZXREYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5RGF0YShmaW5hbCBSZXNwb25zZU1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlKSB7CisgICAgICAgIHJldHVybiByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkgPT0gbnVsbCB8fCByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpID09IG51bGwgfHwKKyAgICAgICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLmlzRW1wdHkoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL2JpbmFyeS9NZXNzYWdlU2VyaWFsaXplclRlc3QuamF2YSBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L01lc3NhZ2VTZXJpYWxpemVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmU5OGMKLS0tIC9kZXYvbnVsbAorKysgYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL2JpbmFyeS9NZXNzYWdlU2VyaWFsaXplclRlc3QuamF2YQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5iaW5hcnk7CisKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZjsKK2ltcG9ydCBpby5uZXR0eS5idWZmZXIuQnl0ZUJ1ZkFsbG9jYXRvcjsKK2ltcG9ydCBpby5uZXR0eS5oYW5kbGVyLmNvZGVjLmh0dHAuSHR0cFJlc3BvbnNlU3RhdHVzOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuZW1wdHkuRW1wdHlHcmFwaDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuTWVzc2FnZVNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRva2VuczsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXF1ZXN0TWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaFNPTk1lc3NhZ2VTZXJpYWxpemVyVjQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5TZXJpYWxpemF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuU2VyaWFsaXplcnM7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLlBhcmFtZXRlcml6ZWQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Nb2NraXRvSGFtY3Jlc3RNYXRjaGVyQWRhcHRlci5yZWZsZWN0aW9uRXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworQFJ1bldpdGgoUGFyYW1ldGVyaXplZC5jbGFzcykKK3B1YmxpYyBjbGFzcyBNZXNzYWdlU2VyaWFsaXplclRlc3QgeworICAgIHByaXZhdGUgZmluYWwgQnl0ZUJ1ZkFsbG9jYXRvciBhbGxvY2F0b3IgPSBCeXRlQnVmQWxsb2NhdG9yLkRFRkFVTFQ7CisKKyAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXJzKG5hbWUgPSAiezB9IikKKyAgICBwdWJsaWMgc3RhdGljIEl0ZXJhYmxlPE9iamVjdFtdPiBkYXRhKCkgeworICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0W11bXXsKKyAgICAgICAgICAgICAgICB7U2VyaWFsaXplcnMuR1JBUEhCSU5BUllfVjQsIG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKX0sCisgICAgICAgICAgICAgICAge1NlcmlhbGl6ZXJzLkdSQVBIU09OX1Y0LCBuZXcgR3JhcGhTT05NZXNzYWdlU2VyaWFsaXplclY0KCl9CisgICAgICAgIH0pOworICAgIH0KKworICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcigwKQorICAgIHB1YmxpYyBTZXJpYWxpemVycyBzZXJpYWxpemVyVHlwZTsKKworICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcigxKQorICAgIHB1YmxpYyBNZXNzYWdlU2VyaWFsaXplciBzZXJpYWxpemVyOworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlcXVlc3QoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBFbXB0eUdyYXBoLmluc3RhbmNlKCkudHJhdmVyc2FsKCk7CisgICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbiB0ID0gZy5WKCkuaGFzTGFiZWwoInBlcnNvbiIpLm91dCgpLmFzQWRtaW4oKTsKKworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGFsaWFzZXMgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIGFsaWFzZXMucHV0KCJnIiwiZyIpOworCisgICAgICAgIGZpbmFsIFJlcXVlc3RNZXNzYWdlIHJlcXVlc3QgPSBSZXF1ZXN0TWVzc2FnZS5idWlsZCh0LmdldEdyZW1saW5MYW5nKCkuZ2V0R3JlbWxpbigpKQorICAgICAgICAgICAgICAgIC5hZGRNYXRlcmlhbGl6ZVByb3BlcnRpZXMoVG9rZW5zLk1BVEVSSUFMSVpFX1BST1BFUlRJRVNfVE9LRU5TKQorICAgICAgICAgICAgICAgIC5hZGRUaW1lb3V0TWlsbGlzKDUwMCkKKyAgICAgICAgICAgICAgICAuYWRkRygiZzEiKQorICAgICAgICAgICAgICAgIC5hZGRMYW5ndWFnZSgic29tZS1sYW5nIikKKyAgICAgICAgICAgICAgICAuYWRkQmluZGluZygiayIsICJ2IikKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlcXVlc3RBc0JpbmFyeShyZXF1ZXN0LCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBSZXF1ZXN0TWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplQmluYXJ5UmVxdWVzdChidWZmZXIpOworICAgICAgICBhc3NlcnRUaGF0KHJlcXVlc3QsIHJlZmxlY3Rpb25FcXVhbHMoZGVzZXJpYWxpemVkKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlcXVlc3RXaXRob3V0QXJncygpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgcmVxdWVzdCA9IFJlcXVlc3RNZXNzYWdlLmJ1aWxkKCJxdWVyeSIpLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXF1ZXN0QXNCaW5hcnkocmVxdWVzdCwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgUmVxdWVzdE1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlcXVlc3QoYnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXF1ZXN0LCByZWZsZWN0aW9uRXF1YWxzKGRlc2VyaWFsaXplZCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnN0YXR1c01lc3NhZ2UoIkZvdW5kIikKKyAgICAgICAgICAgICAgICAucmVzdWx0KENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoIlRoaXMgaXMgYSBmaW5lIG1lc3NhZ2Ugd2l0aCBhIHN0cmluZyIpKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShyZXNwb25zZSwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXNwb25zZShidWZmZXIpOworICAgICAgICBhc3NlcnRSZXNwb25zZUVxdWFscyhyZXNwb25zZSwgZGVzZXJpYWxpemVkKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZUFuZERlc2VyaWFsaXplUmVzcG9uc2VXaXRob3V0U3RhdHVzTWVzc2FnZSgpIHRocm93cyBTZXJpYWxpemF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIHJlc3BvbnNlID0gUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKCkKKyAgICAgICAgICAgICAgICAuY29kZShIdHRwUmVzcG9uc2VTdGF0dXMuT0spCisgICAgICAgICAgICAgICAgLnJlc3VsdChDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KDEyMy4zKSkKKyAgICAgICAgICAgICAgICAuY3JlYXRlKCk7CisKKyAgICAgICAgZmluYWwgQnl0ZUJ1ZiBidWZmZXIgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkocmVzcG9uc2UsIGFsbG9jYXRvcik7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSBkZXNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLmRlc2VyaWFsaXplQmluYXJ5UmVzcG9uc2UoYnVmZmVyKTsKKyAgICAgICAgYXNzZXJ0UmVzcG9uc2VFcXVhbHMocmVzcG9uc2UsIGRlc2VyaWFsaXplZCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRTZXJpYWxpemVBbmREZXNlcmlhbGl6ZVJlc3BvbnNlV2l0aG91dFN0YXR1c0F0dHJpYnV0ZXMoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLmNvZGUoSHR0cFJlc3BvbnNlU3RhdHVzLk9LKQorICAgICAgICAgICAgICAgIC5yZXN1bHQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCgxMjMuMykpCisgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworCisgICAgICAgIGZpbmFsIEJ5dGVCdWYgYnVmZmVyID0gc2VyaWFsaXplci5zZXJpYWxpemVSZXNwb25zZUFzQmluYXJ5KHJlc3BvbnNlLCBhbGxvY2F0b3IpOworICAgICAgICBmaW5hbCBSZXNwb25zZU1lc3NhZ2UgZGVzZXJpYWxpemVkID0gc2VyaWFsaXplci5kZXNlcmlhbGl6ZUJpbmFyeVJlc3BvbnNlKGJ1ZmZlcik7CisgICAgICAgIGFzc2VydFJlc3BvbnNlRXF1YWxzKHJlc3BvbnNlLCBkZXNlcmlhbGl6ZWQpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplQW5kRGVzZXJpYWxpemVSZXNwb25zZVdpdGhvdXRSZXN1bHQoKSB0aHJvd3MgU2VyaWFsaXphdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlTWVzc2FnZSByZXNwb25zZSA9IFJlc3BvbnNlTWVzc2FnZS5idWlsZCgpCisgICAgICAgICAgICAgICAgLmNvZGUoSHR0cFJlc3BvbnNlU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUikKKyAgICAgICAgICAgICAgICAuc3RhdHVzTWVzc2FnZSgiU29tZXRoaW5nIGhhcHBlbmVkIG9uIHRoZSBzZXJ2ZXIiKQorICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICBmaW5hbCBCeXRlQnVmIGJ1ZmZlciA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplUmVzcG9uc2VBc0JpbmFyeShyZXNwb25zZSwgYWxsb2NhdG9yKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXNwb25zZShidWZmZXIpOworICAgICAgICBhc3NlcnRSZXNwb25zZUVxdWFscyhyZXNwb25zZSwgZGVzZXJpYWxpemVkKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFJlc3BvbnNlRXF1YWxzKFJlc3BvbnNlTWVzc2FnZSBleHBlY3RlZCwgUmVzcG9uc2VNZXNzYWdlIGFjdHVhbCkgeworICAgICAgICAvLyBTdGF0dXMKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmdldFN0YXR1cygpLmdldENvZGUoKSwgYWN0dWFsLmdldFN0YXR1cygpLmdldENvZGUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCksIGFjdHVhbC5nZXRTdGF0dXMoKS5nZXRNZXNzYWdlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0U3RhdHVzKCkuZ2V0RXhjZXB0aW9uKCksIGFjdHVhbC5nZXRTdGF0dXMoKS5nZXRFeGNlcHRpb24oKSk7CisgICAgICAgIC8vIFJlc3VsdAorICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpLCBhY3R1YWwuZ2V0UmVzdWx0KCkuZ2V0RGF0YSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL2JpbmFyeS9UeXBlU2VyaWFsaXplckZhaWx1cmVUZXN0cy5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvVHlwZVNlcmlhbGl6ZXJGYWlsdXJlVGVzdHMuamF2YQppbmRleCAzZGU3NGVjLi5lODU3M2ExIDEwMDY0NAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3V0aWwvc2VyL2JpbmFyeS9UeXBlU2VyaWFsaXplckZhaWx1cmVUZXN0cy5qYXZhCisrKyBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L1R5cGVTZXJpYWxpemVyRmFpbHVyZVRlc3RzLmphdmEKQEAgLTIwLDkgKzIwLDcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5iaW5hcnk7CiAKIGltcG9ydCBpby5uZXR0eS5idWZmZXIuVW5wb29sZWRCeXRlQnVmQWxsb2NhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuTmV0dHlCdWZmZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5yZW1vdGUudHJhdmVyc2FsLkRlZmF1bHRSZW1vdGVUcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5CeXRlY29kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5CdWxrU2V0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkVtcHR5UGF0aDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5UcmVlOwpAQCAtMzYsNiArMzQsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwucmVmZXJlbmNlLlJlZmVyZW5jZVZlcnRleDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLnJlZmVyZW5jZS5SZWZlcmVuY2VWZXJ0ZXhQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuZnVuY3Rpb24uTGFtYmRhOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5zZXIuTmV0dHlCdWZmZXJGYWN0b3J5OwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVycy5QYXJhbWV0ZXJpemVkOwpAQCAtNTgsMTMgKzU3LDggQEAKIAogICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJWYWx1ZT17MH0iKQogICAgIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbiBpbnB1dCgpIHsKLSAgICAgICAgZmluYWwgQnl0ZWNvZGUuQmluZGluZyBiID0gbmV3IEJ5dGVjb2RlLkJpbmRpbmcobnVsbCwgImIiKTsKLQogICAgICAgICBmaW5hbCBSZWZlcmVuY2VWZXJ0ZXggdmVydGV4ID0gbmV3IFJlZmVyZW5jZVZlcnRleCgiYSB2ZXJ0ZXgiLCBudWxsKTsKIAotICAgICAgICBmaW5hbCBCeXRlY29kZSBieXRlY29kZSA9IG5ldyBCeXRlY29kZSgpOwotICAgICAgICBieXRlY29kZS5hZGRTdGVwKG51bGwpOwotCiAgICAgICAgIGZpbmFsIEJ1bGtTZXQ8T2JqZWN0PiBidWxrU2V0ID0gbmV3IEJ1bGtTZXQ8PigpOwogICAgICAgICBidWxrU2V0LmFkZCh2ZXJ0ZXgsIDFMKTsKIApAQCAtNzUsMTEgKzY5LDggQEAKIAogICAgICAgICAvLyBQcm92aWRlIGluc3RhbmNlcyB0aGF0IGFyZSBtYWxmb3JtZWQgZm9yIHNlcmlhbGl6YXRpb24gdG8gZmFpbAogICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgIHZlcnRleCwKLSAgICAgICAgICAgICAgICBDb2xsZWN0aW9ucy5zaW5nbGV0b25NYXAoIm9uZSIsIGIpLAogICAgICAgICAgICAgICAgIGJ1bGtTZXQsCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGUsCiAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCh2ZXJ0ZXgpLAogICAgICAgICAgICAgICAgIG5ldyBSZWZlcmVuY2VFZGdlKCJhbiBlZGdlIiwgbnVsbCwgdmVydGV4LCB2ZXJ0ZXgpLAogICAgICAgICAgICAgICAgIExhbWJkYS5zdXBwbGllcihudWxsKSwKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdXRpbC9zZXIvYmluYXJ5L3R5cGVzL3NhbXBsZS9TYW1wbGVQZXJzb25TZXJpYWxpemVyVGVzdC5qYXZhIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvdHlwZXMvc2FtcGxlL1NhbXBsZVBlcnNvblNlcmlhbGl6ZXJUZXN0LmphdmEKaW5kZXggMjBlZDkwZC4uODNmNjRkMiAxMDA2NDQKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvdHlwZXMvc2FtcGxlL1NhbXBsZVBlcnNvblNlcmlhbGl6ZXJUZXN0LmphdmEKKysrIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi91dGlsL3Nlci9iaW5hcnkvdHlwZXMvc2FtcGxlL1NhbXBsZVBlcnNvblNlcmlhbGl6ZXJUZXN0LmphdmEKQEAgLTIwLDE1ICsyMCwxNyBAQAogCiBpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWY7CiBpbXBvcnQgaW8ubmV0dHkuYnVmZmVyLkJ5dGVCdWZBbGxvY2F0b3I7CitpbXBvcnQgaW8ubmV0dHkuaGFuZGxlci5jb2RlYy5odHRwLkh0dHBSZXNwb25zZVN0YXR1czsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLk5ldHR5QnVmZmVyRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwubWVzc2FnZS5SZXNwb25zZU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjE7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uQWJzdHJhY3RJb1JlZ2lzdHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkJ1ZmZlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlJbzsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5iaW5hcnkuR3JhcGhCaW5hcnlSZWFkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uYmluYXJ5LkdyYXBoQmluYXJ5V3JpdGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmJpbmFyeS5UeXBlU2VyaWFsaXplclJlZ2lzdHJ5OworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMzYsMTQgKzM4LDEyIEBACiBpbXBvcnQgamF2YS50aW1lLk9mZnNldERhdGVUaW1lOwogaW1wb3J0IGphdmEudGltZS5ab25lT2Zmc2V0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwogCiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5Nb2NraXRvSGFtY3Jlc3RNYXRjaGVyQWRhcHRlci5yZWZsZWN0aW9uRXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkFic3RyYWN0TWVzc2FnZVNlcmlhbGl6ZXIuVE9LRU5fSU9fUkVHSVNUUklFUzsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLnNlci5HcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEuVE9LRU5fQ1VTVE9NOworaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuc2VyLkdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNC5UT0tFTl9DVVNUT007CiBpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVyQXNzZXJ0LmFzc2VydFRoYXQ7CiAKIHB1YmxpYyBjbGFzcyBTYW1wbGVQZXJzb25TZXJpYWxpemVyVGVzdCB7CkBAIC01MywxNCArNTMsMTQgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkQ3VzdG9tU2VyaWFsaXphdGlvbldpdGhQZXJzb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjEoCisgICAgICAgIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWNCgKICAgICAgICAgICAgICAgICBUeXBlU2VyaWFsaXplclJlZ2lzdHJ5LmJ1aWxkKCkuYWRkQ3VzdG9tVHlwZShTYW1wbGVQZXJzb24uY2xhc3MsIG5ldyBTYW1wbGVQZXJzb25TZXJpYWxpemVyKCkpLmNyZWF0ZSgpKTsKICAgICAgICAgYXNzZXJ0UGVyc29uKHNlcmlhbGl6ZXIpOwogICAgIH0KIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkU2VyaWFsaXplUGVyc29uVmlhSW9SZWdpc3RyeSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpOworICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKTsKICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgY29uZmlnLnB1dChUT0tFTl9JT19SRUdJU1RSSUVTLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEN1c3RvbUlvUmVnaXN0cnkuY2xhc3MuZ2V0TmFtZSgpKSk7CiAgICAgICAgIHNlcmlhbGl6ZXIuY29uZmlndXJlKGNvbmZpZywgQ29sbGVjdGlvbnMuZW1wdHlNYXAoKSk7CkBAIC03MCw3ICs3MCw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsZFNlcmlhbGl6ZVBlcnNvblZpYUN1c3RvbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSBzZXJpYWxpemVyID0gbmV3IEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSgpOworICAgICAgICBmaW5hbCBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQgc2VyaWFsaXplciA9IG5ldyBHcmFwaEJpbmFyeU1lc3NhZ2VTZXJpYWxpemVyVjQoKTsKICAgICAgICAgZmluYWwgTWFwPFN0cmluZyxPYmplY3Q+IGNvbmZpZyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgY29uZmlnLnB1dChUT0tFTl9DVVNUT00sIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoU3RyaW5nLmZvcm1hdCgiJXM7JXMiLAogICAgICAgICAgICAgICAgIFNhbXBsZVBlcnNvbi5jbGFzcy5nZXRDYW5vbmljYWxOYW1lKCksIFNhbXBsZVBlcnNvblNlcmlhbGl6ZXIuY2xhc3MuZ2V0Q2Fub25pY2FsTmFtZSgpKSkpOwpAQCAtOTksMTYgKzk5LDE2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0UGVyc29uKGZpbmFsIEdyYXBoQmluYXJ5TWVzc2FnZVNlcmlhbGl6ZXJWMSBzZXJpYWxpemVyKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHByaXZhdGUgdm9pZCBhc3NlcnRQZXJzb24oZmluYWwgR3JhcGhCaW5hcnlNZXNzYWdlU2VyaWFsaXplclY0IHNlcmlhbGl6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIE9mZnNldERhdGVUaW1lIGJpcnRoRGF0ZSA9IE9mZnNldERhdGVUaW1lLm9mKExvY2FsRGF0ZVRpbWUub2YoMjAxMCwgNCwgMjksIDUsIDMwKSwgWm9uZU9mZnNldC5VVEMpOwogICAgICAgICBmaW5hbCBTYW1wbGVQZXJzb24gcGVyc29uID0gbmV3IFNhbXBsZVBlcnNvbigiT2xpdmlhIiwgYmlydGhEYXRlKTsKIAogICAgICAgICBmaW5hbCBCeXRlQnVmIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVJlc3BvbnNlQXNCaW5hcnkoCi0gICAgICAgICAgICAgICAgUmVzcG9uc2VNZXNzYWdlLmJ1aWxkKFVVSUQucmFuZG9tVVVJRCgpKS5yZXN1bHQocGVyc29uKS5jcmVhdGUoKSwgYWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICBSZXNwb25zZU1lc3NhZ2UuYnVpbGQoKS5yZXN1bHQoQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChwZXJzb24pKS5jb2RlKEh0dHBSZXNwb25zZVN0YXR1cy5PSykuY3JlYXRlKCksIGFsbG9jYXRvcik7CiAKLSAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVSZXNwb25zZShzZXJpYWxpemVkKTsKKyAgICAgICAgZmluYWwgUmVzcG9uc2VNZXNzYWdlIGRlc2VyaWFsaXplZCA9IHNlcmlhbGl6ZXIuZGVzZXJpYWxpemVCaW5hcnlSZXNwb25zZShzZXJpYWxpemVkKTsKIAotICAgICAgICBmaW5hbCBTYW1wbGVQZXJzb24gYWN0dWFsID0gKFNhbXBsZVBlcnNvbikgZGVzZXJpYWxpemVkLmdldFJlc3VsdCgpLmdldERhdGEoKTsKKyAgICAgICAgZmluYWwgU2FtcGxlUGVyc29uIGFjdHVhbCA9IChTYW1wbGVQZXJzb24pIGRlc2VyaWFsaXplZC5nZXRSZXN1bHQoKS5nZXREYXRhKCkuZ2V0KDApOwogICAgICAgICBhc3NlcnRUaGF0KGFjdHVhbCwgcmVmbGVjdGlvbkVxdWFscyhwZXJzb24pKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYmFycmllci12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9iYXJyaWVyLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MDU4NjEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9iYXJyaWVyLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2JpZ2RlY2ltYWwtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYmlnZGVjaW1hbC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjFkOTU3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYmlnZGVjaW1hbC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9iaW5kaW5nLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2JpbmRpbmctdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2MjBlYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2JpbmRpbmctdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYnVsa3NldC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9idWxrc2V0LXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1NDI5MDYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9idWxrc2V0LXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2J5dGUtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYnl0ZS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk1NDRmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYnl0ZS12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9ieXRlY29kZS12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9ieXRlY29kZS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzc2YzJlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvYnl0ZWNvZGUtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY2FyZGluYWxpdHktdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY2FyZGluYWxpdHktdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M4NzVhNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2NhcmRpbmFsaXR5LXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2NoYXItdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY2hhci12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWQ5N2U2Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY2hhci12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9jbGFzcy12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9jbGFzcy12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmUyNzJkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY2xhc3MtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY29sdW1uLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2NvbHVtbi12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjgwNWM4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvY29sdW1uLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2RhdGUtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZGF0ZS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjhlMTdhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZGF0ZS12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9kb3VibGUtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZG91YmxlLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MzhhNjIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9kb3VibGUtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZHVyYXRpb24tdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZHVyYXRpb24tdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZmYTNhZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2R1cmF0aW9uLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2VkZ2UtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZWRnZS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQwNDQyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZWRnZS12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9mbG9hdC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9mbG9hdC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjI3NzJjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvZmxvYXQtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvaW5ldGFkZHJlc3MtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvaW5ldGFkZHJlc3MtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYxM2RkYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2luZXRhZGRyZXNzLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2luc3RhbnQtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvaW5zdGFudC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzM1NTMyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvaW5zdGFudC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9pbnRlZ2VyLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2ludGVnZXItdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RjMjQ2YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2ludGVnZXItdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbGFtYmRhLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2xhbWJkYS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGU5OGY5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbGFtYmRhLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2xpc3QtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbGlzdC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWE0MDVkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbGlzdC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9sb2NhbGRhdGUtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbG9jYWxkYXRlLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWUyMTEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9sb2NhbGRhdGUtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbG9jYWxkYXRldGltZS12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9sb2NhbGRhdGV0aW1lLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMGM4M2MuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9sb2NhbGRhdGV0aW1lLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2xvY2FsdGltZS12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9sb2NhbHRpbWUtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDU3ODVjNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2xvY2FsdGltZS12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9sb25nLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2xvbmctdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VlMDA4My4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L2xvbmctdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWFwLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21hcC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmNkOWUyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWFwLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L21ldHJpY3MtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWV0cmljcy12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZWE3N2E1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbWV0cmljcy12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tb250aGRheS12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9tb250aGRheS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTI4MjYzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvbW9udGhkYXktdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb2Zmc2V0ZGF0ZXRpbWUtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb2Zmc2V0ZGF0ZXRpbWUtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIyYWFiYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L29mZnNldGRhdGV0aW1lLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L29mZnNldHRpbWUtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb2Zmc2V0dGltZS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGM4YzViLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb2Zmc2V0dGltZS12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9vcGVyYXRvci12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9vcGVyYXRvci12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDcxN2NjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb3BlcmF0b3ItdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb3JkZXItdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvb3JkZXItdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzExYjZhZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L29yZGVyLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3AtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzYwNzk5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wYW5kLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BhbmQtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIzN2M5NC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BhbmQtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcGF0aC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wYXRoLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDc1YWMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wYXRoLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BlcmlvZC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wZXJpb2QtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkYWIzNS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BlcmlvZC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9waWNrLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BpY2stdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdhY2EyZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BpY2stdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9wLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3BvcC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjk4Yzk0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcG9wLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Bvci12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wb3ItdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MwYjNhYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Bvci12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9wd2l0aGluLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3B3aXRoaW4tdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkMzBhOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3B3aXRoaW4tdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcHdpdGhvdXQtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvcHdpdGhvdXQtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIxOTVkYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3B3aXRob3V0LXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Njb3BlLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Njb3BlLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNGI5NTYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zY29wZS12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zZXQtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2V0LXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZGYwNTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS9zZXQtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2hvcnQtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvc2hvcnQtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFkMmQ3ZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3Nob3J0LXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3QtdjEuZ2JpbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjM3NmRiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90ZXh0cC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90ZXh0cC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzk2NDY4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdGV4dHAtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdGltZXN0YW1wLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RpbWVzdGFtcC12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM0ZTVlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdGltZXN0YW1wLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RpbmtlcmdyYXBoLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RpbmtlcmdyYXBoLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYTc2ZDEuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90aW5rZXJncmFwaC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS90cmF2ZXJzYWxtZXRyaWNzLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbG1ldHJpY3MtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0N2U2Mi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNhbG1ldHJpY3MtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdHJhdmVyc2VyLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3RyYXZlcnNlci12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNDQ4YjVjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdHJhdmVyc2VyLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3ZlcnRleC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS92ZXJ0ZXgtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0NzczNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3ZlcnRleC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS92ZXJ0ZXhwcm9wZXJ0eS12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS92ZXJ0ZXhwcm9wZXJ0eS12MS5nYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWYwMzI5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvdmVydGV4cHJvcGVydHktdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkveWVhci12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS95ZWFyLXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZTBjNzQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS95ZWFyLXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3llYXJtb250aC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS95ZWFybW9udGgtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgxYTEyMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3llYXJtb250aC12MS5nYmluCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS96b25lZGRhdGV0aW1lLXYxLmdiaW4gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3pvbmVkZGF0ZXRpbWUtdjEuZ2JpbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlMmU4Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoYmluYXJ5L3pvbmVkZGF0ZXRpbWUtdjEuZ2JpbgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhiaW5hcnkvem9uZW9mZnNldC12MS5nYmluIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS96b25lb2Zmc2V0LXYxLmdiaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NjdjOTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaGJpbmFyeS96b25lb2Zmc2V0LXYxLmdiaW4KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9uY2hhbGxlbmdlLXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9uY2hhbGxlbmdlLXYxLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNzU4MjMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbmNoYWxsZW5nZS12MS1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLCJzdGF0dXMiOnsibWVzc2FnZSI6IiIsImNvZGUiOjQwNywiYXR0cmlidXRlcyI6e319LCJyZXN1bHQiOnsiZGF0YSI6bnVsbCwibWV0YSI6e319fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25jaGFsbGVuZ2UtdjItbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25jaGFsbGVuZ2UtdjItbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ3NTgyMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9uY2hhbGxlbmdlLXYyLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6IjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIsInN0YXR1cyI6eyJtZXNzYWdlIjoiIiwiY29kZSI6NDA3LCJhdHRyaWJ1dGVzIjp7fX0sInJlc3VsdCI6eyJkYXRhIjpudWxsLCJtZXRhIjp7fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbmNoYWxsZW5nZS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbmNoYWxsZW5nZS12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzViODJjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25jaGFsbGVuZ2UtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLXsKLSAgInJlcXVlc3RJZCIgOiAiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IiwKLSAgInN0YXR1cyIgOiB7Ci0gICAgIm1lc3NhZ2UiIDogIiIsCi0gICAgImNvZGUiIDogNDA3LAotICAgICJhdHRyaWJ1dGVzIiA6IHsgfQotICB9LAotICAicmVzdWx0IiA6IHsKLSAgICAiZGF0YSIgOiBudWxsLAotICAgICJtZXRhIiA6IHsgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbmNoYWxsZW5nZS12My1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbmNoYWxsZW5nZS12My1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDc1ODIzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25jaGFsbGVuZ2UtdjMtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2Iiwic3RhdHVzIjp7Im1lc3NhZ2UiOiIiLCJjb2RlIjo0MDcsImF0dHJpYnV0ZXMiOnt9fSwicmVzdWx0Ijp7ImRhdGEiOm51bGwsIm1ldGEiOnt9fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9uY2hhbGxlbmdlLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9uY2hhbGxlbmdlLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxNzM0YzYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbmNoYWxsZW5nZS12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLAotICAic3RhdHVzIiA6IHsKLSAgICAibWVzc2FnZSIgOiAiIiwKLSAgICAiY29kZSIgOiA0MDcsCi0gICAgImF0dHJpYnV0ZXMiIDogewotICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAiQHZhbHVlIiA6IFsgXQotICAgIH0KLSAgfSwKLSAgInJlc3VsdCIgOiB7Ci0gICAgImRhdGEiIDogbnVsbCwKLSAgICAibWV0YSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbnJlc3BvbnNlLXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9ucmVzcG9uc2UtdjEtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVkNTI2MC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9ucmVzcG9uc2UtdjEtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJhdXRoZW50aWNhdGlvbiIsInByb2Nlc3NvciI6IiIsImFyZ3MiOnsic2FzbE1lY2hhbmlzbSI6IlBMQUlOIiwic2FzbCI6IkFITjBaWEJvY0dobGJnQndZWE56ZDI5eVpBPT0ifX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9ucmVzcG9uc2UtdjItbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25yZXNwb25zZS12Mi1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNWQ1MjYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25yZXNwb25zZS12Mi1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLCJvcCI6ImF1dGhlbnRpY2F0aW9uIiwicHJvY2Vzc29yIjoiIiwiYXJncyI6eyJzYXNsTWVjaGFuaXNtIjoiUExBSU4iLCJzYXNsIjoiQUhOMFpYQm9jR2hsYmdCd1lYTnpkMjl5WkE9PSJ9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25yZXNwb25zZS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbnJlc3BvbnNlLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOGUxZmQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbnJlc3BvbnNlLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgInJlcXVlc3RJZCIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IiwKLSAgIm9wIiA6ICJhdXRoZW50aWNhdGlvbiIsCi0gICJwcm9jZXNzb3IiIDogIiIsCi0gICJhcmdzIiA6IHsKLSAgICAic2FzbE1lY2hhbmlzbSIgOiAiUExBSU4iLAotICAgICJzYXNsIiA6ICJBSE4wWlhCb2NHaGxiZ0J3WVhOemQyOXlaQT09IgotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9hdXRoZW50aWNhdGlvbnJlc3BvbnNlLXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9ucmVzcG9uc2UtdjMtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVkNTI2MC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9ucmVzcG9uc2UtdjMtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJhdXRoZW50aWNhdGlvbiIsInByb2Nlc3NvciI6IiIsImFyZ3MiOnsic2FzbE1lY2hhbmlzbSI6IlBMQUlOIiwic2FzbCI6IkFITjBaWEJvY0dobGJnQndZWE56ZDI5eVpBPT0ifX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2F1dGhlbnRpY2F0aW9ucmVzcG9uc2UtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25yZXNwb25zZS12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWNlY2EyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYXV0aGVudGljYXRpb25yZXNwb25zZS12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiYXV0aGVudGljYXRpb24iLAotICAicHJvY2Vzc29yIiA6ICIiLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJzYXNsTWVjaGFuaXNtIiwgIlBMQUlOIiwgInNhc2wiLCAiQUhOMFpYQm9jR2hsYmdCd1lYTnpkMjl5WkE9PSIgXQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iYXJyaWVyLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JhcnJpZXItdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkY2NkZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JhcnJpZXItdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6QmFycmllciIsCi0gICJAdmFsdWUiIDogIm5vcm1TYWNrIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmFycmllci12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iYXJyaWVyLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZGNjZGQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iYXJyaWVyLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkJhcnJpZXIiLAotICAiQHZhbHVlIiA6ICJub3JtU2FjayIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JpZ2RlY2ltYWwtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmlnZGVjaW1hbC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzUzMzdjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmlnZGVjaW1hbC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6QmlnRGVjaW1hbCIsCi0gICJAdmFsdWUiIDogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iaWdkZWNpbWFsLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JpZ2RlY2ltYWwtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc1MzM3Yy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JpZ2RlY2ltYWwtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OkJpZ0RlY2ltYWwiLAotICAiQHZhbHVlIiA6IDEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTk4NzY1NDMyMQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmlnaW50ZWdlci12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iaWdpbnRlZ2VyLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4ZTYxMTQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iaWdpbnRlZ2VyLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpCaWdJbnRlZ2VyIiwKLSAgIkB2YWx1ZSIgOiAxMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODk5ODc2NTQzMjEKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JpZ2ludGVnZXItdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmlnaW50ZWdlci12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU2MTE0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmlnaW50ZWdlci12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6QmlnSW50ZWdlciIsCi0gICJAdmFsdWUiIDogMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5OTg3NjU0MzIxCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iaW5kaW5nLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JpbmRpbmctdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc5YjhjNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2JpbmRpbmctdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkJpbmRpbmciLAotICAiQHZhbHVlIiA6IHsKLSAgICAia2V5IiA6ICJ4IiwKLSAgICAidmFsdWUiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYmluZGluZy12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iaW5kaW5nLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3OWI4YzcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9iaW5kaW5nLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpCaW5kaW5nIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImtleSIgOiAieCIsCi0gICAgInZhbHVlIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J1bGtzZXQtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnVsa3NldC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQ0OTc1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnVsa3NldC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotWyAibWFya28iLCAiam9zaCIsICJqb3NoIiBdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9idWxrc2V0LXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J1bGtzZXQtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzIxNmEzNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J1bGtzZXQtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkJ1bGtTZXQiLAotICAiQHZhbHVlIiA6IFsgIm1hcmtvIiwgewotICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgIkB2YWx1ZSIgOiAxCi0gIH0sICJqb3NoIiwgewotICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgIkB2YWx1ZSIgOiAyCi0gIH0gXQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9ieXRlLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3OTYyNWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9ieXRlLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpCeXRlIiwKLSAgIkB2YWx1ZSIgOiAxCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9ieXRlLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc5NjI1Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGUtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OkJ5dGUiLAotICAiQHZhbHVlIiA6IDEKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGVidWZmZXItdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZWJ1ZmZlci12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzI0MTE1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZWJ1ZmZlci12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6Qnl0ZUJ1ZmZlciIsCi0gICJAdmFsdWUiIDogImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGVidWZmZXItdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZWJ1ZmZlci12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzI0MTE1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZWJ1ZmZlci12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6Qnl0ZUJ1ZmZlciIsCi0gICJAdmFsdWUiIDogImMyOXRaU0JpZVhSbGN5Qm1iM0lnZVc5MSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGVjb2RlLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGVjb2RlLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OWQyNzcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9ieXRlY29kZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpCeXRlY29kZSIsCi0gICJAdmFsdWUiIDogewotICAgICJzdGVwIiA6IFsgWyAiViIgXSwgWyAiaGFzTGFiZWwiLCAicGVyc29uIiBdLCBbICJvdXQiIF0sIFsgImluIiBdLCBbICJ0cmVlIiBdIF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZWNvZGUtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vYnl0ZWNvZGUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjY5ZDI3Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2J5dGVjb2RlLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkJ5dGVjb2RlIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInN0ZXAiIDogWyBbICJWIiBdLCBbICJoYXNMYWJlbCIsICJwZXJzb24iIF0sIFsgIm91dCIgXSwgWyAiaW4iIF0sIFsgInRyZWUiIF0gXQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9jYXJkaW5hbGl0eS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9jYXJkaW5hbGl0eS12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzRlNjRlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2FyZGluYWxpdHktdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6Q2FyZGluYWxpdHkiLAotICAiQHZhbHVlIiA6ICJsaXN0IgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2FyZGluYWxpdHktdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2FyZGluYWxpdHktdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM0ZTY0ZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NhcmRpbmFsaXR5LXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkNhcmRpbmFsaXR5IiwKLSAgIkB2YWx1ZSIgOiAibGlzdCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NoYXItdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2hhci12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjI3ZTlkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2hhci12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6Q2hhciIsCi0gICJAdmFsdWUiIDogIngiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9jaGFyLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NoYXItdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyN2U5ZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NoYXItdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OkNoYXIiLAotICAiQHZhbHVlIiA6ICJ4IgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2xhc3MtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2xhc3MtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMTVhMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NsYXNzLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkNsYXNzIiwKLSAgIkB2YWx1ZSIgOiAiamF2YS5pby5GaWxlIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2xhc3MtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY2xhc3MtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMTVhMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NsYXNzLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkNsYXNzIiwKLSAgIkB2YWx1ZSIgOiAiamF2YS5pby5GaWxlIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY29sdW1uLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2NvbHVtbi12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjNhNTZlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY29sdW1uLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkNvbHVtbiIsCi0gICJAdmFsdWUiIDogImtleXMiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9jb2x1bW4tdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vY29sdW1uLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiM2E1NmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9jb2x1bW4tdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6Q29sdW1uIiwKLSAgIkB2YWx1ZSIgOiAia2V5cyIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RhdGUtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZGF0ZS12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjQwMDdhLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZGF0ZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpEYXRlIiwKLSAgIkB2YWx1ZSIgOiAxNDgxNzUwMDc2Mjk1Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9kYXRlLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RhdGUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y0MDA3YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RhdGUtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6RGF0ZSIsCi0gICJAdmFsdWUiIDogMTQ4MTc1MDA3NjI5NQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZGlyZWN0aW9uLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RpcmVjdGlvbi12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGNiN2U0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZGlyZWN0aW9uLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkRpcmVjdGlvbiIsCi0gICJAdmFsdWUiIDogIk9VVCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RvdWJsZS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9kb3VibGUtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFlNDk2NC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2RvdWJsZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAiQHZhbHVlIiA6IDEwMC4wCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9kb3VibGUtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZG91YmxlLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZTQ5NjQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9kb3VibGUtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZHVyYXRpb24tdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZHVyYXRpb24tdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjMGNlOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2R1cmF0aW9uLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpEdXJhdGlvbiIsCi0gICJAdmFsdWUiIDogIlBUMTIwSCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2R1cmF0aW9uLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2R1cmF0aW9uLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1YzBjZTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9kdXJhdGlvbi12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6RHVyYXRpb24iLAotICAiQHZhbHVlIiA6ICJQVDEyMEgiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VkZ2UtdjEtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYzN2ZjNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VkZ2UtdjEtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsiaWQiOjEzLCJsYWJlbCI6ImRldmVsb3BzIiwidHlwZSI6ImVkZ2UiLCJpblZMYWJlbCI6InNvZnR3YXJlIiwib3V0VkxhYmVsIjoicGVyc29uIiwiaW5WIjoxMCwib3V0ViI6MSwicHJvcGVydGllcyI6eyJzaW5jZSI6MjAwOX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYyLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VkZ2UtdjItbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkwMmE0MS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2VkZ2UtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsiaWQiOjEzLCJsYWJlbCI6ImRldmVsb3BzIiwiaW5WTGFiZWwiOiJzb2Z0d2FyZSIsIm91dFZMYWJlbCI6InBlcnNvbiIsImluViI6MTAsIm91dFYiOjEsInByb3BlcnRpZXMiOnsic2luY2UiOnsia2V5Ijoic2luY2UiLCJ2YWx1ZSI6MjAwOX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZWRnZS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWM1MmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImlkIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEzCi0gICAgfSwKLSAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMTAKLSAgICB9LAotICAgICJvdXRWIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZWRnZS12My1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYzLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMzdmYzcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYzLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17ImlkIjoxMywibGFiZWwiOiJkZXZlbG9wcyIsInR5cGUiOiJlZGdlIiwiaW5WTGFiZWwiOiJzb2Z0d2FyZSIsIm91dFZMYWJlbCI6InBlcnNvbiIsImluViI6MTAsIm91dFYiOjEsInByb3BlcnRpZXMiOnsic2luY2UiOjIwMDl9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZWRnZS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMWM1MmUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9lZGdlLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImlkIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEzCi0gICAgfSwKLSAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICJpblYiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMTAKLSAgICB9LAotICAgICJvdXRWIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZmxvYXQtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZmxvYXQtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3OWFhZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2Zsb2F0LXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkZsb2F0IiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZmxvYXQtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vZmxvYXQtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3OWFhZi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2Zsb2F0LXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkZsb2F0IiwKLSAgIkB2YWx1ZSIgOiAxMDAuMAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vaW5ldGFkZHJlc3MtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vaW5ldGFkZHJlc3MtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJhOThjMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luZXRhZGRyZXNzLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpJbmV0QWRkcmVzcyIsCi0gICJAdmFsdWUiIDogImxvY2FsaG9zdCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luZXRhZGRyZXNzLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luZXRhZGRyZXNzLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTk4YzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pbmV0YWRkcmVzcy12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6SW5ldEFkZHJlc3MiLAotICAiQHZhbHVlIiA6ICJsb2NhbGhvc3QiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pbnN0YW50LXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luc3RhbnQtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0OTc0MS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luc3RhbnQtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4Okluc3RhbnQiLAotICAiQHZhbHVlIiA6ICIyMDE2LTEyLTE0VDE2OjM5OjE5LjM0OVoiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pbnN0YW50LXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luc3RhbnQtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc0OTc0MS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2luc3RhbnQtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4Okluc3RhbnQiLAotICAiQHZhbHVlIiA6ICIyMDE2LTEyLTE0VDE2OjM5OjE5LjM0OVoiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pbnRlZ2VyLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2ludGVnZXItdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwY2U3YS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2ludGVnZXItdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6SW50MzIiLAotICAiQHZhbHVlIiA6IDEwMAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vaW50ZWdlci12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pbnRlZ2VyLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MGNlN2EuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9pbnRlZ2VyLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgIkB2YWx1ZSIgOiAxMDAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xhbWJkYS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sYW1iZGEtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJlMTc5Yi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xhbWJkYS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpMYW1iZGEiLAotICAiQHZhbHVlIiA6IHsKLSAgICAic2NyaXB0IiA6ICJ7IGl0LmdldCgpIH0iLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJhcmd1bWVudHMiIDogMQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sYW1iZGEtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbGFtYmRhLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZTE3OWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sYW1iZGEtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6TGFtYmRhIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInNjcmlwdCIgOiAieyBpdC5nZXQoKSB9IiwKLSAgICAibGFuZ3VhZ2UiIDogImdyZW1saW4tZ3Jvb3Z5IiwKLSAgICAiYXJndW1lbnRzIiA6IDEKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbGlzdC12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9saXN0LXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MTRlMmQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9saXN0LXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAiQHZhbHVlIiA6IFsgewotICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgIkB2YWx1ZSIgOiAxCi0gIH0sICJwZXJzb24iLCB0cnVlIF0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZS12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb2NhbGRhdGUtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZmYjgxZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6TG9jYWxEYXRlIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNi0wMS0wMSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb2NhbGRhdGUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZmYjgxZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZS12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6TG9jYWxEYXRlIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNi0wMS0wMSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZXRpbWUtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbG9jYWxkYXRldGltZS12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDgzNjY4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbG9jYWxkYXRldGltZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6TG9jYWxEYXRlVGltZSIsCi0gICJAdmFsdWUiIDogIjIwMTYtMDEtMDFUMTI6MzAiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb2NhbGRhdGV0aW1lLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZXRpbWUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4MzY2OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsZGF0ZXRpbWUtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OkxvY2FsRGF0ZVRpbWUiLAotICAiQHZhbHVlIiA6ICIyMDE2LTAxLTAxVDEyOjMwIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbG9jYWx0aW1lLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsdGltZS12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmY2NWE3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbG9jYWx0aW1lLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpMb2NhbFRpbWUiLAotICAiQHZhbHVlIiA6ICIxMjozMDo0NSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsdGltZS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb2NhbHRpbWUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZmNjVhNy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvY2FsdGltZS12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6TG9jYWxUaW1lIiwKLSAgIkB2YWx1ZSIgOiAiMTI6MzA6NDUiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb25nLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvbmctdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRiOWEyMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL2xvbmctdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6SW50NjQiLAotICAiQHZhbHVlIiA6IDEwMAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbG9uZy12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb25nLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YjlhMjMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9sb25nLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgIkB2YWx1ZSIgOiAxMDAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21hcC12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tYXAtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2FkNTljOS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21hcC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6TWFwIiwKLSAgIkB2YWx1ZSIgOiBbIHsKLSAgICAiQHR5cGUiIDogImc6RGF0ZSIsCi0gICAgIkB2YWx1ZSIgOiAxNDgxNzUwMDc2Mjk1Ci0gIH0sICJyZWQiLCB7Ci0gICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMgotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDMKLSAgICB9IF0KLSAgfSwgewotICAgICJAdHlwZSIgOiAiZzpEYXRlIiwKLSAgICAiQHZhbHVlIiA6IDE0ODE3NTAwNzYyOTUKLSAgfSwgInRlc3QiLCB7Ci0gICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAiQHZhbHVlIiA6IDEyMwotICB9IF0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21ldHJpY3MtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWV0cmljcy12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjFlOTY0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWV0cmljcy12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICJAdmFsdWUiIDogewotICAgICJkdXIiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgfSwKLSAgICAiY291bnRzIiA6IHsKLSAgICAgICJ0cmF2ZXJzZXJDb3VudCIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICJAdmFsdWUiIDogNAotICAgICAgfSwKLSAgICAgICJlbGVtZW50Q291bnQiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgIH0KLSAgICB9LAotICAgICJuYW1lIiA6ICJUaW5rZXJHcmFwaFN0ZXAodmVydGV4LFt+bGFiZWwuZXEocGVyc29uKV0pIiwKLSAgICAiYW5ub3RhdGlvbnMiIDogewotICAgICAgInBlcmNlbnREdXIiIDogewotICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaWQiIDogIjcuMC4wKCkiLAotICAgICJtZXRyaWNzIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJkdXIiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgfSwKLSAgICAgICAgImNvdW50cyIgOiB7Ci0gICAgICAgICAgInRyYXZlcnNlckNvdW50IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICB9LAotICAgICAgICAgICJlbGVtZW50Q291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm5hbWUiIDogIlZlcnRleFN0ZXAoT1VULHZlcnRleCkiLAotICAgICAgICAiYW5ub3RhdGlvbnMiIDogewotICAgICAgICAgICJwZXJjZW50RHVyIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaWQiIDogIjMuMC4wKCkiCi0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21ldHJpY3MtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWV0cmljcy12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmU2NzhiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbWV0cmljcy12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6TWV0cmljcyIsCi0gICJAdmFsdWUiIDogewotICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICJAdmFsdWUiIDogWyAiZHVyIiwgewotICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgfSwgImNvdW50cyIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgIkB2YWx1ZSIgOiBbICJ0cmF2ZXJzZXJDb3VudCIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICB9LCAiZWxlbWVudENvdW50IiwgewotICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgIH0gXQotICAgIH0sICJuYW1lIiwgIlRpbmtlckdyYXBoU3RlcCh2ZXJ0ZXgsW35sYWJlbC5lcShwZXJzb24pXSkiLCAiYW5ub3RhdGlvbnMiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAicGVyY2VudER1ciIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAgICJAdmFsdWUiIDogMjUuMAotICAgICAgfSBdCi0gICAgfSwgImlkIiwgIjcuMC4wKCkiLCAibWV0cmljcyIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKLSAgICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgICB9LCAiY291bnRzIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInRyYXZlcnNlckNvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICAgIH0sICJlbGVtZW50Q291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgfSBdCi0gICAgICAgICAgfSwgIm5hbWUiLCAiVmVydGV4U3RlcChPVVQsdmVydGV4KSIsICJhbm5vdGF0aW9ucyIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbICJwZXJjZW50RHVyIiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAiaWQiLCAiMy4wLjAoKSIgXQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbW9udGhkYXktdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbW9udGhkYXktdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhNTkxNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL21vbnRoZGF5LXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpNb250aERheSIsCi0gICJAdmFsdWUiIDogIi0tMDEtMDEiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tb250aGRheS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9tb250aGRheS12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGE1OTE0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vbW9udGhkYXktdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4Ok1vbnRoRGF5IiwKLSAgIkB2YWx1ZSIgOiAiLS0wMS0wMSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29mZnNldGRhdGV0aW1lLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29mZnNldGRhdGV0aW1lLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzZjQ1Y2QuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9vZmZzZXRkYXRldGltZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6T2Zmc2V0RGF0ZVRpbWUiLAotICAiQHZhbHVlIiA6ICIyMDA3LTEyLTAzVDEwOjE1OjMwKzAxOjAwIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb2Zmc2V0ZGF0ZXRpbWUtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb2Zmc2V0ZGF0ZXRpbWUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNmNDVjZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29mZnNldGRhdGV0aW1lLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpPZmZzZXREYXRlVGltZSIsCi0gICJAdmFsdWUiIDogIjIwMDctMTItMDNUMTA6MTU6MzArMDE6MDAiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9vZmZzZXR0aW1lLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29mZnNldHRpbWUtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEyNDk1My4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29mZnNldHRpbWUtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4Ok9mZnNldFRpbWUiLAotICAiQHZhbHVlIiA6ICIxMDoxNTozMCswMTowMCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29mZnNldHRpbWUtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb2Zmc2V0dGltZS12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTI0OTUzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb2Zmc2V0dGltZS12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6T2Zmc2V0VGltZSIsCi0gICJAdmFsdWUiIDogIjEwOjE1OjMwKzAxOjAwIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3BlcmF0b3ItdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3BlcmF0b3ItdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjMTQwMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29wZXJhdG9yLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOk9wZXJhdG9yIiwKLSAgIkB2YWx1ZSIgOiAic3VtIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3BlcmF0b3ItdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3BlcmF0b3ItdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjMTQwMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29wZXJhdG9yLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOk9wZXJhdG9yIiwKLSAgIkB2YWx1ZSIgOiAic3VtIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3JkZXItdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vb3JkZXItdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlMDQzMi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29yZGVyLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOk9yZGVyIiwKLSAgIkB2YWx1ZSIgOiAic2h1ZmZsZSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29yZGVyLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL29yZGVyLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZTA0MzIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9vcmRlci12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpPcmRlciIsCi0gICJAdmFsdWUiIDogInNodWZmbGUiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3AtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJkZmIzYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3AtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJndCIsCi0gICAgInZhbHVlIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDAKLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3AtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmRmYjNiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogImd0IiwKLSAgICAidmFsdWUiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMAotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGFuZC12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYW5kLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNzE5NTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYW5kLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAiYW5kIiwKLSAgICAidmFsdWUiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAiZ3QiLAotICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6UCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgInByZWRpY2F0ZSIgOiAibHQiLAotICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BhbmQtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGFuZC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjcxOTU4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGFuZC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogImFuZCIsCi0gICAgInZhbHVlIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogImd0IiwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogImx0IiwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gXQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYXRoLXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BhdGgtdjEtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmI3ZDUyYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BhdGgtdjEtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsibGFiZWxzIjpbW10sW10sW11dLCJvYmplY3RzIjpbeyJpZCI6MSwibGFiZWwiOiJwZXJzb24iLCJ0eXBlIjoidmVydGV4IiwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6MCwidmFsdWUiOiJtYXJrbyJ9XSwibG9jYXRpb24iOlt7ImlkIjo2LCJ2YWx1ZSI6InNhbiBkaWVnbyIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoxOTk3LCJlbmRUaW1lIjoyMDAxfX0seyJpZCI6NywidmFsdWUiOiJzYW50YSBjcnV6IiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjIwMDEsImVuZFRpbWUiOjIwMDR9fSx7ImlkIjo4LCJ2YWx1ZSI6ImJydXNzZWxzIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjIwMDQsImVuZFRpbWUiOjIwMDV9fSx7ImlkIjo5LCJ2YWx1ZSI6InNhbnRhIGZlIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjIwMDV9fV19fSx7ImlkIjoxMCwibGFiZWwiOiJzb2Z0d2FyZSIsInR5cGUiOiJ2ZXJ0ZXgiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7ImlkIjo0LCJ2YWx1ZSI6ImdyZW1saW4ifV19fSx7ImlkIjoxMSwibGFiZWwiOiJzb2Z0d2FyZSIsInR5cGUiOiJ2ZXJ0ZXgiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7ImlkIjo1LCJ2YWx1ZSI6InRpbmtlcmdyYXBoIn1dfX1dfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGF0aC12Mi1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYXRoLXYyLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOWU4YTAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYXRoLXYyLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17ImxhYmVscyI6W1tdLFtdLFtdXSwib2JqZWN0cyI6W3siaWQiOjEsImxhYmVsIjoicGVyc29uIn0seyJpZCI6MTAsImxhYmVsIjoic29mdHdhcmUifSx7ImlkIjoxMSwibGFiZWwiOiJzb2Z0d2FyZSJ9XX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BhdGgtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGF0aC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2NhYTAwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGF0aC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UGF0aCIsCi0gICJAdmFsdWUiIDogewotICAgICJsYWJlbHMiIDogWyBbIF0sIFsgXSwgWyBdIF0sCi0gICAgIm9iamVjdHMiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIgotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAic29mdHdhcmUiCi0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJzb2Z0d2FyZSIKLSAgICAgIH0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGF0aC12My1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYXRoLXYzLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5OWZlNGMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wYXRoLXYzLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17ImxhYmVscyI6W1tdLFtdLFtdXSwib2JqZWN0cyI6W3siaWQiOjEsImxhYmVsIjoicGVyc29uIiwidHlwZSI6InZlcnRleCJ9LHsiaWQiOjEwLCJsYWJlbCI6InNvZnR3YXJlIiwidHlwZSI6InZlcnRleCJ9LHsiaWQiOjExLCJsYWJlbCI6InNvZnR3YXJlIiwidHlwZSI6InZlcnRleCJ9XX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BhdGgtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGF0aC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZiMzkzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGF0aC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UGF0aCIsCi0gICJAdmFsdWUiIDogewotICAgICJsYWJlbHMiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlNldCIsCi0gICAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpTZXQiLAotICAgICAgICAiQHZhbHVlIiA6IFsgXQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6U2V0IiwKLSAgICAgICAgIkB2YWx1ZSIgOiBbIF0KLSAgICAgIH0gXQotICAgIH0sCi0gICAgIm9iamVjdHMiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgfSwKLSAgICAgICAgICAibGFiZWwiIDogInBlcnNvbiIKLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgICAgfSwKLSAgICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIgotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAic29mdHdhcmUiCi0gICAgICAgIH0KLSAgICAgIH0gXQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGVyaW9kLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BlcmlvZC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDQzOGExLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGVyaW9kLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpQZXJpb2QiLAotICAiQHZhbHVlIiA6ICJQMVk2TTE1RCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BlcmlvZC12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wZXJpb2QtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0MzhhMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BlcmlvZC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6UGVyaW9kIiwKLSAgIkB2YWx1ZSIgOiAiUDFZNk0xNUQiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9waWNrLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BpY2stdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhMmYyZS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BpY2stdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UGljayIsCi0gICJAdmFsdWUiIDogImFueSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BpY2stdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGljay12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzY2EyZjJlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcGljay12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpQaWNrIiwKLSAgIkB2YWx1ZSIgOiAiYW55IgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9wLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BvcC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzE1MTVmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9wLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlBvcCIsCi0gICJAdmFsdWUiIDogImFsbCIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BvcC12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3AtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxNTE1Zi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3BvcC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpQb3AiLAotICAiQHZhbHVlIiA6ICJhbGwiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3ItdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9yLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxZmNiN2QuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3ItdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJvciIsCi0gICAgInZhbHVlIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogImd0IiwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogIndpdGhpbiIsCi0gICAgICAgICJ2YWx1ZSIgOiBbIHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogLTEKLSAgICAgICAgfSwgewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAtMTAKLSAgICAgICAgfSwgewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAtMTAwCi0gICAgICAgIH0gXQotICAgICAgfQotICAgIH0gXQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3ItdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcG9yLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWIxY2YuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wb3ItdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJvciIsCi0gICAgInZhbHVlIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogImd0IiwKLSAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlAiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJwcmVkaWNhdGUiIDogIndpdGhpbiIsCi0gICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAtMQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IC0xMAotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IC0xMDAKLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gXQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wZXJ0eS12MS1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wZXJ0eS12MS1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDc3NjQ1Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcHJvcGVydHktdjEtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsia2V5Ijoic2luY2UiLCJ2YWx1ZSI6MjAwOX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Byb3BlcnR5LXYyLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Byb3BlcnR5LXYyLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNzc2NDUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wZXJ0eS12Mi1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJrZXkiOiJzaW5jZSIsInZhbHVlIjoyMDA5fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcHJvcGVydHktdjMtbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcHJvcGVydHktdjMtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3NzY0NS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Byb3BlcnR5LXYzLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17ImtleSI6InNpbmNlIiwidmFsdWUiOjIwMDl9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wZXJ0eS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wcm9wZXJ0eS12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTZmZTMyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcHJvcGVydHktdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImtleSIgOiAic2luY2UiLAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAyMDA5Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wd2l0aGluLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3B3aXRoaW4tdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhMzgyNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3B3aXRoaW4tdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlAiLAotICAiQHZhbHVlIiA6IHsKLSAgICAicHJlZGljYXRlIiA6ICJ3aXRoaW4iLAotICAgICJ2YWx1ZSIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vcHdpdGhpbi12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wd2l0aGluLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZjk5Y2MuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wd2l0aGluLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAid2l0aGluIiwKLSAgICAidmFsdWUiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkxpc3QiLAotICAgICAgIkB2YWx1ZSIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICB9IF0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3B3aXRob3V0LXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3B3aXRob3V0LXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMjI5MWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wd2l0aG91dC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogIndpdGhvdXQiLAotICAgICJ2YWx1ZSIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAiQHZhbHVlIiA6IDEKLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAyCi0gICAgfSBdCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3B3aXRob3V0LXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3B3aXRob3V0LXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMTY4OTAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9wd2l0aG91dC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogIndpdGhvdXQiLAotICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAyCi0gICAgICB9IF0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Njb3BlLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Njb3BlLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNzRhZjAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zY29wZS12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpTY29wZSIsCi0gICJAdmFsdWUiIDogImxvY2FsIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2NvcGUtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2NvcGUtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3NGFmMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Njb3BlLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlNjb3BlIiwKLSAgIkB2YWx1ZSIgOiAibG9jYWwiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uY2xvc2UtdjEtbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYxLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NDQ0ZTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uY2xvc2UtdjEtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJjbG9zZSIsInByb2Nlc3NvciI6InNlc3Npb24iLCJhcmdzIjp7InNlc3Npb24iOiJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIn19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uY2xvc2UtdjItbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYyLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NDQ0ZTkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uY2xvc2UtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJjbG9zZSIsInByb2Nlc3NvciI6InNlc3Npb24iLCJhcmdzIjp7InNlc3Npb24iOiJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIn19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uY2xvc2UtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjODI1ZTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uY2xvc2UtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImNsb3NlIiwKLSAgInByb2Nlc3NvciIgOiAic2Vzc2lvbiIsCi0gICJhcmdzIiA6IHsKLSAgICAic2Vzc2lvbiIgOiAidW5pcXVlLXNlc3Npb24taWRlbnRpZmllciIKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25jbG9zZS12My1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODQ0NGU5Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYzLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6ImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsIm9wIjoiY2xvc2UiLCJwcm9jZXNzb3IiOiJzZXNzaW9uIiwiYXJncyI6eyJzZXNzaW9uIjoidW5pcXVlLXNlc3Npb24taWRlbnRpZmllciJ9fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25jbG9zZS12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmUxY2NkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmNsb3NlLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXsKLSAgInJlcXVlc3RJZCIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IiwKLSAgIm9wIiA6ICJjbG9zZSIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJzZXNzaW9uIiwgInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiIF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWwtdjEtbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWwtdjEtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZmYzk4OC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsLXYxLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6ImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsIm9wIjoiZXZhbCIsInByb2Nlc3NvciI6InNlc3Npb24iLCJhcmdzIjp7ImdyZW1saW4iOiJnLlYoeCkiLCJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5Iiwic2Vzc2lvbiI6InVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiLCJiaW5kaW5ncyI6eyJ4IjoxfX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbC12Mi1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbC12Mi1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmZjOTg4Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWwtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJldmFsIiwicHJvY2Vzc29yIjoic2Vzc2lvbiIsImFyZ3MiOnsiZ3JlbWxpbiI6ImcuVih4KSIsImxhbmd1YWdlIjoiZ3JlbWxpbi1ncm9vdnkiLCJzZXNzaW9uIjoidW5pcXVlLXNlc3Npb24taWRlbnRpZmllciIsImJpbmRpbmdzIjp7IngiOjF9fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZjhiOTYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICJzZXNzaW9uIiwKLSAgImFyZ3MiIDogewotICAgICJncmVtbGluIiA6ICJnLlYoeCkiLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJzZXNzaW9uIiA6ICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsLXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsLXYzLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZmM5ODguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbC12My1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLCJvcCI6ImV2YWwiLCJwcm9jZXNzb3IiOiJzZXNzaW9uIiwiYXJncyI6eyJncmVtbGluIjoiZy5WKHgpIiwibGFuZ3VhZ2UiOiJncmVtbGluLWdyb292eSIsInNlc3Npb24iOiJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwiYmluZGluZ3MiOnsieCI6MX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWwtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWwtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzM5My4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJncmVtbGluIiwgImcuVih4KSIsICJsYW5ndWFnZSIsICJncmVtbGluLWdyb292eSIsICJzZXNzaW9uIiwgInVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiLCAiYmluZGluZ3MiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAieCIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWxhbGlhc2VkLXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsYWxpYXNlZC12MS1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTkwY2FiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWxhbGlhc2VkLXYxLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6ImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsIm9wIjoiZXZhbCIsInByb2Nlc3NvciI6InNlc3Npb24iLCJhcmdzIjp7ImdyZW1saW4iOiJzb2NpYWwuVih4KSIsImxhbmd1YWdlIjoiZ3JlbWxpbi1ncm9vdnkiLCJhbGlhc2VzIjp7ImciOiJzb2NpYWwifSwic2Vzc2lvbiI6InVuaXF1ZS1zZXNzaW9uLWlkZW50aWZpZXIiLCJiaW5kaW5ncyI6eyJ4IjoxfX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbGFsaWFzZWQtdjItbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWxhbGlhc2VkLXYyLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhOTBjYWIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbGFsaWFzZWQtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJldmFsIiwicHJvY2Vzc29yIjoic2Vzc2lvbiIsImFyZ3MiOnsiZ3JlbWxpbiI6InNvY2lhbC5WKHgpIiwibGFuZ3VhZ2UiOiJncmVtbGluLWdyb292eSIsImFsaWFzZXMiOnsiZyI6InNvY2lhbCJ9LCJzZXNzaW9uIjoidW5pcXVlLXNlc3Npb24taWRlbnRpZmllciIsImJpbmRpbmdzIjp7IngiOjF9fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsYWxpYXNlZC12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbGFsaWFzZWQtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0ZTVkMy4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsYWxpYXNlZC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICJzZXNzaW9uIiwKLSAgImFyZ3MiIDogewotICAgICJncmVtbGluIiA6ICJzb2NpYWwuVih4KSIsCi0gICAgImxhbmd1YWdlIiA6ICJncmVtbGluLWdyb292eSIsCi0gICAgImFsaWFzZXMiIDogewotICAgICAgImciIDogInNvY2lhbCIKLSAgICB9LAotICAgICJzZXNzaW9uIiA6ICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwKLSAgICAiYmluZGluZ3MiIDogewotICAgICAgIngiIDogewotICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsYWxpYXNlZC12My1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9uZXZhbGFsaWFzZWQtdjMtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5MGNhYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsYWxpYXNlZC12My1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLCJvcCI6ImV2YWwiLCJwcm9jZXNzb3IiOiJzZXNzaW9uIiwiYXJncyI6eyJncmVtbGluIjoic29jaWFsLlYoeCkiLCJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5IiwiYWxpYXNlcyI6eyJnIjoic29jaWFsIn0sInNlc3Npb24iOiJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwiYmluZGluZ3MiOnsieCI6MX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWxhbGlhc2VkLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25ldmFsYWxpYXNlZC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDQ4MTYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmV2YWxhbGlhc2VkLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi17Ci0gICJyZXF1ZXN0SWQiIDogImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsCi0gICJvcCIgOiAiZXZhbCIsCi0gICJwcm9jZXNzb3IiIDogInNlc3Npb24iLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJncmVtbGluIiwgInNvY2lhbC5WKHgpIiwgImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5IiwgImFsaWFzZXMiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAiZyIsICJzb2NpYWwiIF0KLSAgICB9LCAic2Vzc2lvbiIsICJ1bmlxdWUtc2Vzc2lvbi1pZGVudGlmaWVyIiwgImJpbmRpbmdzIiwgewotICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAiQHZhbHVlIiA6IFsgIngiLCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICJAdmFsdWUiIDogMQotICAgICAgfSBdCi0gICAgfSBdCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbC12MS1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWwtdjEtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ1MTdjNC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbC12MS1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLCJvcCI6ImV2YWwiLCJwcm9jZXNzb3IiOiIiLCJhcmdzIjp7ImdyZW1saW4iOiJnLlYoeCkiLCJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5IiwiYmluZGluZ3MiOnsieCI6MX19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsLXYyLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbC12Mi1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDUxN2M0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsLXYyLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6ImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsIm9wIjoiZXZhbCIsInByb2Nlc3NvciI6IiIsImFyZ3MiOnsiZ3JlbWxpbiI6ImcuVih4KSIsImxhbmd1YWdlIjoiZ3JlbWxpbi1ncm9vdnkiLCJiaW5kaW5ncyI6eyJ4IjoxfX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWwtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZTJmNmMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWwtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXsKLSAgInJlcXVlc3RJZCIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IiwKLSAgIm9wIiA6ICJldmFsIiwKLSAgInByb2Nlc3NvciIgOiAiIiwKLSAgImFyZ3MiIDogewotICAgICJncmVtbGluIiA6ICJnLlYoeCkiLAotICAgICJsYW5ndWFnZSIgOiAiZ3JlbWxpbi1ncm9vdnkiLAotICAgICJiaW5kaW5ncyIgOiB7Ci0gICAgICAieCIgOiB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICJAdmFsdWUiIDogMQotICAgICAgfQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsLXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbC12My1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDUxN2M0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsLXYzLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6ImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsIm9wIjoiZXZhbCIsInByb2Nlc3NvciI6IiIsImFyZ3MiOnsiZ3JlbWxpbiI6ImcuVih4KSIsImxhbmd1YWdlIjoiZ3JlbWxpbi1ncm9vdnkiLCJiaW5kaW5ncyI6eyJ4IjoxfX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWwtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOGM4ZTYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWwtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLXsKLSAgInJlcXVlc3RJZCIgOiAiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3IiwKLSAgIm9wIiA6ICJldmFsIiwKLSAgInByb2Nlc3NvciIgOiAiIiwKLSAgImFyZ3MiIDogewotICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICJAdmFsdWUiIDogWyAiZ3JlbWxpbiIsICJnLlYoeCkiLCAibGFuZ3VhZ2UiLCAiZ3JlbWxpbi1ncm9vdnkiLCAiYmluZGluZ3MiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAieCIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsYWxpYXNlZC12MS1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWxhbGlhc2VkLXYxLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0YzExM2QuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWxhbGlhc2VkLXYxLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17InJlcXVlc3RJZCI6ImNiNjgyNTc4LTlkOTItNDQ5OS05ZWJjLTVjNmFhNzNjNTM5NyIsIm9wIjoiZXZhbCIsInByb2Nlc3NvciI6IiIsImFyZ3MiOnsiZ3JlbWxpbiI6InNvY2lhbC5WKHgpIiwibGFuZ3VhZ2UiOiJncmVtbGluLWdyb292eSIsImFsaWFzZXMiOnsiZyI6InNvY2lhbCJ9LCJiaW5kaW5ncyI6eyJ4IjoxfX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWxhbGlhc2VkLXYyLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbGFsaWFzZWQtdjItbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRjMTEzZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbGFsaWFzZWQtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJldmFsIiwicHJvY2Vzc29yIjoiIiwiYXJncyI6eyJncmVtbGluIjoic29jaWFsLlYoeCkiLCJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5IiwiYWxpYXNlcyI6eyJnIjoic29jaWFsIn0sImJpbmRpbmdzIjp7IngiOjF9fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbGFsaWFzZWQtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsYWxpYXNlZC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZhNTRlLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsYWxpYXNlZC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICIiLAotICAiYXJncyIgOiB7Ci0gICAgImdyZW1saW4iIDogInNvY2lhbC5WKHgpIiwKLSAgICAibGFuZ3VhZ2UiIDogImdyZW1saW4tZ3Jvb3Z5IiwKLSAgICAiYWxpYXNlcyIgOiB7Ci0gICAgICAiZyIgOiAic29jaWFsIgotICAgIH0sCi0gICAgImJpbmRpbmdzIiA6IHsKLSAgICAgICJ4IiA6IHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zZXNzaW9ubGVzc2V2YWxhbGlhc2VkLXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbGFsaWFzZWQtdjMtbm8tdHlwZXMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRjMTEzZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbGFsaWFzZWQtdjMtbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiY2I2ODI1NzgtOWQ5Mi00NDk5LTllYmMtNWM2YWE3M2M1Mzk3Iiwib3AiOiJldmFsIiwicHJvY2Vzc29yIjoiIiwiYXJncyI6eyJncmVtbGluIjoic29jaWFsLlYoeCkiLCJsYW5ndWFnZSI6ImdyZW1saW4tZ3Jvb3Z5IiwiYWxpYXNlcyI6eyJnIjoic29jaWFsIn0sImJpbmRpbmdzIjp7IngiOjF9fX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nlc3Npb25sZXNzZXZhbGFsaWFzZWQtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsYWxpYXNlZC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzAzYTM3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2Vzc2lvbmxlc3NldmFsYWxpYXNlZC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICJjYjY4MjU3OC05ZDkyLTQ0OTktOWViYy01YzZhYTczYzUzOTciLAotICAib3AiIDogImV2YWwiLAotICAicHJvY2Vzc29yIiA6ICIiLAotICAiYXJncyIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJncmVtbGluIiwgInNvY2lhbC5WKHgpIiwgImxhbmd1YWdlIiwgImdyZW1saW4tZ3Jvb3Z5IiwgImFsaWFzZXMiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAiZyIsICJzb2NpYWwiIF0KLSAgICB9LCAiYmluZGluZ3MiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyAieCIsIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2V0LXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3NldC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmRlZWEyLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2V0LXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlNldCIsCi0gICJAdmFsdWUiIDogWyB7Ci0gICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAiQHZhbHVlIiA6IDEKLSAgfSwgInBlcnNvbiIsIHRydWUgXQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2hvcnQtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2hvcnQtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY4ZjVjZC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3Nob3J0LXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpJbnQxNiIsCi0gICJAdmFsdWUiIDogMTAwCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zaG9ydC12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zaG9ydC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjhmNWNkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc2hvcnQtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OkludDE2IiwKLSAgIkB2YWx1ZSIgOiAxMDAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3N0YW5kYXJkcmVzdWx0LXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3N0YW5kYXJkcmVzdWx0LXYxLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYWY2NDIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdGFuZGFyZHJlc3VsdC12MS1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLCJzdGF0dXMiOnsibWVzc2FnZSI6IiIsImNvZGUiOjIwMCwiYXR0cmlidXRlcyI6e319LCJyZXN1bHQiOnsiZGF0YSI6W3siaWQiOjEsImxhYmVsIjoicGVyc29uIiwidHlwZSI6InZlcnRleCIsInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOjAsInZhbHVlIjoibWFya28ifV0sImxvY2F0aW9uIjpbeyJpZCI6NiwidmFsdWUiOiJzYW4gZGllZ28iLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MTk5NywiZW5kVGltZSI6MjAwMX19LHsiaWQiOjcsInZhbHVlIjoic2FudGEgY3J1eiIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDAxLCJlbmRUaW1lIjoyMDA0fX0seyJpZCI6OCwidmFsdWUiOiJicnVzc2VscyIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDA0LCJlbmRUaW1lIjoyMDA1fX0seyJpZCI6OSwidmFsdWUiOiJzYW50YSBmZSIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDA1fX1dfX1dLCJtZXRhIjp7fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdGFuZGFyZHJlc3VsdC12Mi1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdGFuZGFyZHJlc3VsdC12Mi1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTMzZWJiLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc3RhbmRhcmRyZXN1bHQtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsicmVxdWVzdElkIjoiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2Iiwic3RhdHVzIjp7Im1lc3NhZ2UiOiIiLCJjb2RlIjoyMDAsImF0dHJpYnV0ZXMiOnt9fSwicmVzdWx0Ijp7ImRhdGEiOlt7ImlkIjoxLCJsYWJlbCI6InBlcnNvbiIsInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOjAsInZhbHVlIjoibWFya28iLCJsYWJlbCI6Im5hbWUifV0sImxvY2F0aW9uIjpbeyJpZCI6NiwidmFsdWUiOiJzYW4gZGllZ28iLCJsYWJlbCI6ImxvY2F0aW9uIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjE5OTcsImVuZFRpbWUiOjIwMDF9fSx7ImlkIjo3LCJ2YWx1ZSI6InNhbnRhIGNydXoiLCJsYWJlbCI6ImxvY2F0aW9uIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjIwMDEsImVuZFRpbWUiOjIwMDR9fSx7ImlkIjo4LCJ2YWx1ZSI6ImJydXNzZWxzIiwibGFiZWwiOiJsb2NhdGlvbiIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDA0LCJlbmRUaW1lIjoyMDA1fX0seyJpZCI6OSwidmFsdWUiOiJzYW50YSBmZSIsImxhYmVsIjoibG9jYXRpb24iLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwNX19XX19XSwibWV0YSI6e319fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc3RhbmRhcmRyZXN1bHQtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc3RhbmRhcmRyZXN1bHQtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU3YzZkYi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3N0YW5kYXJkcmVzdWx0LXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotewotICAicmVxdWVzdElkIiA6ICI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLAotICAic3RhdHVzIiA6IHsKLSAgICAibWVzc2FnZSIgOiAiIiwKLSAgICAiY29kZSIgOiAyMDAsCi0gICAgImF0dHJpYnV0ZXMiIDogeyB9Ci0gIH0sCi0gICJyZXN1bHQiIDogewotICAgICJkYXRhIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IF0sCi0gICAgIm1ldGEiIDogeyB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3N0YW5kYXJkcmVzdWx0LXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3N0YW5kYXJkcmVzdWx0LXYzLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYWY2NDIuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdGFuZGFyZHJlc3VsdC12My1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJyZXF1ZXN0SWQiOiI0MWQyZTI4YS0yMGE0LTRhYjAtYjM3OS1kODEwZGVkZTM3ODYiLCJzdGF0dXMiOnsibWVzc2FnZSI6IiIsImNvZGUiOjIwMCwiYXR0cmlidXRlcyI6e319LCJyZXN1bHQiOnsiZGF0YSI6W3siaWQiOjEsImxhYmVsIjoicGVyc29uIiwidHlwZSI6InZlcnRleCIsInByb3BlcnRpZXMiOnsibmFtZSI6W3siaWQiOjAsInZhbHVlIjoibWFya28ifV0sImxvY2F0aW9uIjpbeyJpZCI6NiwidmFsdWUiOiJzYW4gZGllZ28iLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MTk5NywiZW5kVGltZSI6MjAwMX19LHsiaWQiOjcsInZhbHVlIjoic2FudGEgY3J1eiIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDAxLCJlbmRUaW1lIjoyMDA0fX0seyJpZCI6OCwidmFsdWUiOiJicnVzc2VscyIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDA0LCJlbmRUaW1lIjoyMDA1fX0seyJpZCI6OSwidmFsdWUiOiJzYW50YSBmZSIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDA1fX1dfX1dLCJtZXRhIjp7fX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdGFuZGFyZHJlc3VsdC12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9zdGFuZGFyZHJlc3VsdC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmNhNDAwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vc3RhbmRhcmRyZXN1bHQtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi17Ci0gICJyZXF1ZXN0SWQiIDogIjQxZDJlMjhhLTIwYTQtNGFiMC1iMzc5LWQ4MTBkZWRlMzc4NiIsCi0gICJzdGF0dXMiIDogewotICAgICJtZXNzYWdlIiA6ICIiLAotICAgICJjb2RlIiA6IDIwMCwKLSAgICAiYXR0cmlidXRlcyIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICJAdmFsdWUiIDogWyBdCi0gICAgfQotICB9LAotICAicmVzdWx0IiA6IHsKLSAgICAiZGF0YSIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6TGlzdCIsCi0gICAgICAiQHZhbHVlIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9LAotICAgICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBdLAotICAgICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKLSAgICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYnJ1c3NlbHMiLAotICAgICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBdCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9LAotICAgICJtZXRhIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgIkB2YWx1ZSIgOiBbIF0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3QtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjkzOTgzLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpUIiwKLSAgIkB2YWx1ZSIgOiAibGFiZWwiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90LXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3QtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5Mzk4My4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3QtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6VCIsCi0gICJAdmFsdWUiIDogImxhYmVsIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdGV4dHAtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdGV4dHAtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjgyMDk4OS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RleHRwLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlRleHRQIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInByZWRpY2F0ZSIgOiAiY29udGFpbmluZyIsCi0gICAgInZhbHVlIiA6ICJhcmsiCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RleHRwLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RleHRwLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4MjA5ODkuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90ZXh0cC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpUZXh0UCIsCi0gICJAdmFsdWUiIDogewotICAgICJwcmVkaWNhdGUiIDogImNvbnRhaW5pbmciLAotICAgICJ2YWx1ZSIgOiAiYXJrIgotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW1lc3RhbXAtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdGltZXN0YW1wLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYTBlMTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW1lc3RhbXAtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6VGltZXN0YW1wIiwKLSAgIkB2YWx1ZSIgOiAxNDgxNzUwMDc2Mjk1Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW1lc3RhbXAtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdGltZXN0YW1wLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjYTBlMTcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW1lc3RhbXAtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6VGltZXN0YW1wIiwKLSAgIkB2YWx1ZSIgOiAxNDgxNzUwMDc2Mjk1Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW5rZXJncmFwaC12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW5rZXJncmFwaC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGU5NWVkLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdGlua2VyZ3JhcGgtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDgyOSArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAidGlua2VyOmdyYXBoIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgInZlcnRpY2VzIiA6IFsgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic3RlcGhlbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImNlbnRyZXZpbGxlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZHVsbGVzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDAKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEyCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAicHVyY2VsbHZpbGxlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJtYXR0aGlhcyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJyZW1lbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA3Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJhbHRpbW9yZSIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA3Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDExCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm9ha2xhbmQiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzZWF0dGxlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDMKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJkYW5pZWwiLAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdLAotICAgICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTcKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzcHJlbWJlcmciLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk4MgotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTgKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJrYWlzZXJzbGF1dGVybiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA5Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImFhY2hlbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA5Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiZ3JlbWxpbiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJ0aW5rZXJncmFwaCIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0gXSwKLSAgICAiZWRnZXMiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTMKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDkKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE1Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA1Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTcKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTAKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxOAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE5Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJkZXZlbG9wcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2luY2UiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJzaW5jZSIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjMKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJza2lsbCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDI0Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyNQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjYKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ0cmF2ZXJzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RpbmtlcmdyYXBoLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RpbmtlcmdyYXBoLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZTk1ZWQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90aW5rZXJncmFwaC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsODI5ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJ0aW5rZXI6Z3JhcGgiLAotICAiQHZhbHVlIiA6IHsKLSAgICAidmVydGljZXMiIDogWyB7Ci0gICAgICAiQHR5cGUiIDogImc6VmVydGV4IiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdLAotICAgICAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTk3Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgY3J1eiIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYnJ1c3NlbHMiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzdGVwaGVuIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiY2VudHJldmlsbGUiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5MAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJkdWxsZXMiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTIKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJwdXJjZWxsdmlsbGUiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hdHRoaWFzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEzCi0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYnJlbWVuIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDcKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE0Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYmFsdGltb3JlIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDcKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMTEKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE1Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAib2FrbGFuZCIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDExCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDE0Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNgotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNlYXR0bGUiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImRhbmllbCIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNwcmVtYmVyZyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTgyCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImthaXNlcnNsYXV0ZXJuIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAiYWFjaGVuIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJncmVtbGluIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInRpbmtlcmdyYXBoIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBdLAotICAgICJlZGdlcyIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMwotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwOQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE0Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAiZGV2ZWxvcHMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNpbmNlIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2luY2UiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDEwCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTUKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJza2lsbCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE2Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDUKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxNwotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMAotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDE4Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAiZGV2ZWxvcHMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNpbmNlIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2luY2UiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDExCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTkKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJza2lsbCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDIwCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogImRldmVsb3BzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJzaW5jZSIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNpbmNlIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAxMgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDIyCi0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDMKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyMwotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInVzZXMiLAotICAgICAgICAiaW5WTGFiZWwiIDogInNvZnR3YXJlIiwKLSAgICAgICAgIm91dFZMYWJlbCIgOiAicGVyc29uIiwKLSAgICAgICAgImluViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDExCi0gICAgICAgIH0sCi0gICAgICAgICJvdXRWIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICB9LAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgInNraWxsIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImtleSIgOiAic2tpbGwiLAotICAgICAgICAgICAgICAidmFsdWUiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAzCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LCB7Ci0gICAgICAiQHR5cGUiIDogImc6RWRnZSIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMjQKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJ1c2VzIiwKLSAgICAgICAgImluVkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJvdXRWTGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMAotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgfSwKLSAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICJza2lsbCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJrZXkiIDogInNraWxsIiwKLSAgICAgICAgICAgICAgInZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOkVkZ2UiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDI1Ci0gICAgICAgIH0sCi0gICAgICAgICJsYWJlbCIgOiAidXNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAiaW5WIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMTEKLSAgICAgICAgfSwKLSAgICAgICAgIm91dFYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgIH0sCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAic2tpbGwiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAia2V5IiA6ICJza2lsbCIsCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDMKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpFZGdlIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiaWQiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAyNgotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInRyYXZlcnNlcyIsCi0gICAgICAgICJpblZMYWJlbCIgOiAic29mdHdhcmUiLAotICAgICAgICAib3V0VkxhYmVsIiA6ICJzb2Z0d2FyZSIsCi0gICAgICAgICJpblYiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiAxMQotICAgICAgICB9LAotICAgICAgICAib3V0ViIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2FsbWV0cmljcy12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWxtZXRyaWNzLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkZDE4YTQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWxtZXRyaWNzLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6VHJhdmVyc2FsTWV0cmljcyIsCi0gICJAdmFsdWUiIDogewotICAgICJkdXIiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkRvdWJsZSIsCi0gICAgICAiQHZhbHVlIiA6IDAuMDA0Ci0gICAgfSwKLSAgICAibWV0cmljcyIgOiBbIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiZHVyIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgICAgIH0sCi0gICAgICAgICJjb3VudHMiIDogewotICAgICAgICAgICJ0cmF2ZXJzZXJDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA0Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAiZWxlbWVudENvdW50IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJuYW1lIiA6ICJUaW5rZXJHcmFwaFN0ZXAodmVydGV4LFt+bGFiZWwuZXEocGVyc29uKV0pIiwKLSAgICAgICAgImFubm90YXRpb25zIiA6IHsKLSAgICAgICAgICAicGVyY2VudER1ciIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjUuMAotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlkIiA6ICI3LjAuMCgpIgotICAgICAgfQotICAgIH0sIHsKLSAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICJAdmFsdWUiIDogewotICAgICAgICAiZHVyIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEwMC4wCi0gICAgICAgIH0sCi0gICAgICAgICJjb3VudHMiIDogewotICAgICAgICAgICJ0cmF2ZXJzZXJDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMwotICAgICAgICAgIH0sCi0gICAgICAgICAgImVsZW1lbnRDb3VudCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMwotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm5hbWUiIDogIlZlcnRleFN0ZXAoT1VULHZlcnRleCkiLAotICAgICAgICAiYW5ub3RhdGlvbnMiIDogewotICAgICAgICAgICJwZXJjZW50RHVyIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaWQiIDogIjIuMC4wKCkiCi0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJkdXIiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgfSwKLSAgICAgICAgImNvdW50cyIgOiB7Ci0gICAgICAgICAgInRyYXZlcnNlckNvdW50IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICB9LAotICAgICAgICAgICJlbGVtZW50Q291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm5hbWUiIDogIlZlcnRleFN0ZXAoT1VULHZlcnRleCkiLAotICAgICAgICAiYW5ub3RhdGlvbnMiIDogewotICAgICAgICAgICJwZXJjZW50RHVyIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaWQiIDogIjMuMC4wKCkiCi0gICAgICB9Ci0gICAgfSwgewotICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJkdXIiIDogewotICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgfSwKLSAgICAgICAgImNvdW50cyIgOiB7Ci0gICAgICAgICAgInRyYXZlcnNlckNvdW50IiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgICB9LAotICAgICAgICAgICJlbGVtZW50Q291bnQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgIm5hbWUiIDogIlRyZWVTdGVwIiwKLSAgICAgICAgImFubm90YXRpb25zIiA6IHsKLSAgICAgICAgICAicGVyY2VudER1ciIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMjUuMAotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlkIiA6ICI0LjAuMCgpIgotICAgICAgfQotICAgIH0gXQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzYWxtZXRyaWNzLXYzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbG1ldHJpY3MtdjMuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZmNzYzNi4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNhbG1ldHJpY3MtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpUcmF2ZXJzYWxNZXRyaWNzIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICJAdmFsdWUiIDogMC4wMDQKLSAgICB9LCAibWV0cmljcyIsIHsKLSAgICAgICJAdHlwZSIgOiAiZzpMaXN0IiwKLSAgICAgICJAdmFsdWUiIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgICB9LCAiY291bnRzIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInRyYXZlcnNlckNvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDQKLSAgICAgICAgICAgIH0sICJlbGVtZW50Q291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogNAotICAgICAgICAgICAgfSBdCi0gICAgICAgICAgfSwgIm5hbWUiLCAiVGlua2VyR3JhcGhTdGVwKHZlcnRleCxbfmxhYmVsLmVxKHBlcnNvbildKSIsICJhbm5vdGF0aW9ucyIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbICJwZXJjZW50RHVyIiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAiaWQiLCAiNy4wLjAoKSIgXQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpNZXRyaWNzIiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgIkB2YWx1ZSIgOiBbICJkdXIiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMTAwLjAKLSAgICAgICAgICB9LCAiY291bnRzIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInRyYXZlcnNlckNvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEzCi0gICAgICAgICAgICB9LCAiZWxlbWVudENvdW50IiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDEzCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAibmFtZSIsICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIiwgImFubm90YXRpb25zIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInBlcmNlbnREdXIiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICAgIH0gXQotICAgICAgICAgIH0sICJpZCIsICIyLjAuMCgpIiBdCi0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IFsgImR1ciIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICAgIH0sICJjb3VudHMiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogWyAidHJhdmVyc2VyQ291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgfSwgImVsZW1lbnRDb3VudCIsIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAibmFtZSIsICJWZXJ0ZXhTdGVwKE9VVCx2ZXJ0ZXgpIiwgImFubm90YXRpb25zIiwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOk1hcCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IFsgInBlcmNlbnREdXIiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDI1LjAKLSAgICAgICAgICAgIH0gXQotICAgICAgICAgIH0sICJpZCIsICIzLjAuMCgpIiBdCi0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOk1ldHJpY3MiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IFsgImR1ciIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpEb3VibGUiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAxMDAuMAotICAgICAgICAgIH0sICJjb3VudHMiLCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6TWFwIiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogWyAidHJhdmVyc2VyQ291bnQiLCB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICAgICAgfSwgImVsZW1lbnRDb3VudCIsIHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAibmFtZSIsICJUcmVlU3RlcCIsICJhbm5vdGF0aW9ucyIsIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpNYXAiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiBbICJwZXJjZW50RHVyIiwgewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6RG91YmxlIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyNS4wCi0gICAgICAgICAgICB9IF0KLSAgICAgICAgICB9LCAiaWQiLCAiNC4wLjAoKSIgXQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9IF0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2VyLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3RyYXZlcnNlci12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTlhMjllLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2VyLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotewotICAiQHR5cGUiIDogImc6VHJhdmVyc2VyIiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImJ1bGsiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICJAdmFsdWUiIDogMQotICAgIH0sCi0gICAgInZhbHVlIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAiQHZhbHVlIiA6IDEKLSAgICAgICAgfSwKLSAgICAgICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDAKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJtYXJrbyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibmFtZSIKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IF0sCi0gICAgICAgICAgImxvY2F0aW9uIiA6IFsgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA2Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FuIGRpZWdvIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDE5OTcKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBjcnV6IiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDgKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSwgewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgZmUiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzZXItdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdHJhdmVyc2VyLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1OWEyOWUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi90cmF2ZXJzZXItdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpUcmF2ZXJzZXIiLAotICAiQHZhbHVlIiA6IHsKLSAgICAiYnVsayIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfSwKLSAgICAidmFsdWUiIDogewotICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICJAdmFsdWUiIDogMQotICAgICAgICB9LAotICAgICAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAibmFtZSIgOiBbIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICAgICAgfQotICAgICAgICAgIH0gXSwKLSAgICAgICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW4gZGllZ28iLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogNwotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDQKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgInZhbHVlIiA6ICJzYW50YSBmZSIsCi0gICAgICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSBdCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3V1aWQtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdXVpZC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2YwOWYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdXVpZC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpVVUlEIiwKLSAgIkB2YWx1ZSIgOiAiNDFkMmUyOGEtMjBhNC00YWIwLWIzNzktZDgxMGRlZGUzNzg2IgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4LXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleC12MS1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWRiYmYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4LXYxLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17ImlkIjoxLCJsYWJlbCI6InBlcnNvbiIsInR5cGUiOiJ2ZXJ0ZXgiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7ImlkIjowLCJ2YWx1ZSI6Im1hcmtvIn1dLCJsb2NhdGlvbiI6W3siaWQiOjYsInZhbHVlIjoic2FuIGRpZWdvIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjE5OTcsImVuZFRpbWUiOjIwMDF9fSx7ImlkIjo3LCJ2YWx1ZSI6InNhbnRhIGNydXoiLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwMSwiZW5kVGltZSI6MjAwNH19LHsiaWQiOjgsInZhbHVlIjoiYnJ1c3NlbHMiLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwNCwiZW5kVGltZSI6MjAwNX19LHsiaWQiOjksInZhbHVlIjoic2FudGEgZmUiLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwNX19XX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXgtdjItbm8tdHlwZXMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4LXYyLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YTRkZmQuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXgtdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsiaWQiOjEsImxhYmVsIjoicGVyc29uIiwicHJvcGVydGllcyI6eyJuYW1lIjpbeyJpZCI6MCwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9XSwibG9jYXRpb24iOlt7ImlkIjo2LCJ2YWx1ZSI6InNhbiBkaWVnbyIsImxhYmVsIjoibG9jYXRpb24iLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MTk5NywiZW5kVGltZSI6MjAwMX19LHsiaWQiOjcsInZhbHVlIjoic2FudGEgY3J1eiIsImxhYmVsIjoibG9jYXRpb24iLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwMSwiZW5kVGltZSI6MjAwNH19LHsiaWQiOjgsInZhbHVlIjoiYnJ1c3NlbHMiLCJsYWJlbCI6ImxvY2F0aW9uIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjIwMDQsImVuZFRpbWUiOjIwMDV9fSx7ImlkIjo5LCJ2YWx1ZSI6InNhbnRhIGZlIiwibGFiZWwiOiJsb2NhdGlvbiIsInByb3BlcnRpZXMiOnsic3RhcnRUaW1lIjoyMDA1fX1dfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleC12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXgtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjEwMjIzMC4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlZlcnRleCIsCi0gICJAdmFsdWUiIDogewotICAgICJpZCIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgIkB2YWx1ZSIgOiAxCi0gICAgfSwKLSAgICAibGFiZWwiIDogInBlcnNvbiIsCi0gICAgInByb3BlcnRpZXMiIDogewotICAgICAgIm5hbWUiIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAgICAgICAibGFiZWwiIDogIm5hbWUiCi0gICAgICAgIH0KLSAgICAgIH0gXSwKLSAgICAgICJsb2NhdGlvbiIgOiBbIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDYKLSAgICAgICAgICB9LAotICAgICAgICAgICJ2YWx1ZSIgOiAic2FuIGRpZWdvIiwKLSAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAxOTk3Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDcKLSAgICAgICAgICB9LAotICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgY3J1eiIsCi0gICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwMQotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA4Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogImJydXNzZWxzIiwKLSAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA0Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgImVuZFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0sIHsKLSAgICAgICAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgICAgICAgIkB2YWx1ZSIgOiB7Ci0gICAgICAgICAgImlkIiA6IHsKLSAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAgICAgICAiQHZhbHVlIiA6IDkKLSAgICAgICAgICB9LAotICAgICAgICAgICJ2YWx1ZSIgOiAic2FudGEgZmUiLAotICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gXQotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4LXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleC12My1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWRiYmYwLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4LXYzLW5vLXR5cGVzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi17ImlkIjoxLCJsYWJlbCI6InBlcnNvbiIsInR5cGUiOiJ2ZXJ0ZXgiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOlt7ImlkIjowLCJ2YWx1ZSI6Im1hcmtvIn1dLCJsb2NhdGlvbiI6W3siaWQiOjYsInZhbHVlIjoic2FuIGRpZWdvIiwicHJvcGVydGllcyI6eyJzdGFydFRpbWUiOjE5OTcsImVuZFRpbWUiOjIwMDF9fSx7ImlkIjo3LCJ2YWx1ZSI6InNhbnRhIGNydXoiLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwMSwiZW5kVGltZSI6MjAwNH19LHsiaWQiOjgsInZhbHVlIjoiYnJ1c3NlbHMiLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwNCwiZW5kVGltZSI6MjAwNX19LHsiaWQiOjksInZhbHVlIjoic2FudGEgZmUiLCJwcm9wZXJ0aWVzIjp7InN0YXJ0VGltZSI6MjAwNX19XX19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXgtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4LXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMDIyMzAuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXgtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpWZXJ0ZXgiLAotICAiQHZhbHVlIiA6IHsKLSAgICAiaWQiIDogewotICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICJAdmFsdWUiIDogMQotICAgIH0sCi0gICAgImxhYmVsIiA6ICJwZXJzb24iLAotICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICJuYW1lIiA6IFsgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogMAotICAgICAgICAgIH0sCi0gICAgICAgICAgInZhbHVlIiA6ICJtYXJrbyIsCi0gICAgICAgICAgImxhYmVsIiA6ICJuYW1lIgotICAgICAgICB9Ci0gICAgICB9IF0sCi0gICAgICAibG9jYXRpb24iIDogWyB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA2Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogInNhbiBkaWVnbyIsCi0gICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMTk5NwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDAxCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA3Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGNydXoiLAotICAgICAgICAgICJsYWJlbCIgOiAibG9jYXRpb24iLAotICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKLSAgICAgICAgICAgICJzdGFydFRpbWUiIDogewotICAgICAgICAgICAgICAiQHR5cGUiIDogImc6SW50MzIiLAotICAgICAgICAgICAgICAiQHZhbHVlIiA6IDIwMDEKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAiZW5kVGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSwgewotICAgICAgICAiQHR5cGUiIDogImc6VmVydGV4UHJvcGVydHkiLAotICAgICAgICAiQHZhbHVlIiA6IHsKLSAgICAgICAgICAiaWQiIDogewotICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDY0IiwKLSAgICAgICAgICAgICJAdmFsdWUiIDogOAotICAgICAgICAgIH0sCi0gICAgICAgICAgInZhbHVlIiA6ICJicnVzc2VscyIsCi0gICAgICAgICAgImxhYmVsIiA6ICJsb2NhdGlvbiIsCi0gICAgICAgICAgInByb3BlcnRpZXMiIDogewotICAgICAgICAgICAgInN0YXJ0VGltZSIgOiB7Ci0gICAgICAgICAgICAgICJAdHlwZSIgOiAiZzpJbnQzMiIsCi0gICAgICAgICAgICAgICJAdmFsdWUiIDogMjAwNAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICJlbmRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9LCB7Ci0gICAgICAgICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICAgICAgICJAdmFsdWUiIDogewotICAgICAgICAgICJpZCIgOiB7Ci0gICAgICAgICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgICAgICAgIkB2YWx1ZSIgOiA5Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAidmFsdWUiIDogInNhbnRhIGZlIiwKLSAgICAgICAgICAibGFiZWwiIDogImxvY2F0aW9uIiwKLSAgICAgICAgICAicHJvcGVydGllcyIgOiB7Ci0gICAgICAgICAgICAic3RhcnRUaW1lIiA6IHsKLSAgICAgICAgICAgICAgIkB0eXBlIiA6ICJnOkludDMyIiwKLSAgICAgICAgICAgICAgIkB2YWx1ZSIgOiAyMDA1Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IF0KLSAgICB9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleHByb3BlcnR5LXYxLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleHByb3BlcnR5LXYxLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMzZiMGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXhwcm9wZXJ0eS12MS1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJpZCI6MCwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXhwcm9wZXJ0eS12Mi1uby10eXBlcy5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXhwcm9wZXJ0eS12Mi1uby10eXBlcy5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzM2YjBmLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4cHJvcGVydHktdjItbm8tdHlwZXMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXsiaWQiOjAsInZhbHVlIjoibWFya28iLCJsYWJlbCI6Im5hbWUifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4cHJvcGVydHktdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4cHJvcGVydHktdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWYxODRiMS4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleHByb3BlcnR5LXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZzpWZXJ0ZXhQcm9wZXJ0eSIsCi0gICJAdmFsdWUiIDogewotICAgICJpZCIgOiB7Ci0gICAgICAiQHR5cGUiIDogImc6SW50NjQiLAotICAgICAgIkB2YWx1ZSIgOiAwCi0gICAgfSwKLSAgICAidmFsdWUiIDogIm1hcmtvIiwKLSAgICAibGFiZWwiIDogIm5hbWUiCi0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleHByb3BlcnR5LXYzLW5vLXR5cGVzLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3ZlcnRleHByb3BlcnR5LXYzLW5vLXR5cGVzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMzZiMGYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXhwcm9wZXJ0eS12My1uby10eXBlcy5qc29uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAoteyJpZCI6MCwidmFsdWUiOiJtYXJrbyIsImxhYmVsIjoibmFtZSJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXhwcm9wZXJ0eS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi92ZXJ0ZXhwcm9wZXJ0eS12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjE4NGIxLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vdmVydGV4cHJvcGVydHktdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJnOlZlcnRleFByb3BlcnR5IiwKLSAgIkB2YWx1ZSIgOiB7Ci0gICAgImlkIiA6IHsKLSAgICAgICJAdHlwZSIgOiAiZzpJbnQ2NCIsCi0gICAgICAiQHZhbHVlIiA6IDAKLSAgICB9LAotICAgICJ2YWx1ZSIgOiAibWFya28iLAotICAgICJsYWJlbCIgOiAibmFtZSIKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24veWVhci12Mi5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi95ZWFyLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDIwYmMuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi95ZWFyLXYyLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpZZWFyIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNiIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3llYXItdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24veWVhci12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjQyMGJjLi4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24veWVhci12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6WWVhciIsCi0gICJAdmFsdWUiIDogIjIwMTYiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi95ZWFybW9udGgtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24veWVhcm1vbnRoLXYyLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTVlMjcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi95ZWFybW9udGgtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OlllYXJNb250aCIsCi0gICJAdmFsdWUiIDogIjIwMTYtMDYiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi95ZWFybW9udGgtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24veWVhcm1vbnRoLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YTVlMjcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi95ZWFybW9udGgtdjMuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OlllYXJNb250aCIsCi0gICJAdmFsdWUiIDogIjIwMTYtMDYiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi96b25lZGRhdGV0aW1lLXYyLmpzb24gYi9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3pvbmVkZGF0ZXRpbWUtdjIuanNvbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY3ZmM0Ny4uMDAwMDAwMAotLS0gYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3pvbmVkZGF0ZXRpbWUtdjIuanNvbgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotewotICAiQHR5cGUiIDogImd4OlpvbmVkRGF0ZVRpbWUiLAotICAiQHZhbHVlIiA6ICIyMDE2LTEyLTIzVDEyOjEyOjI0LjAwMDAwMDAzNiswMjowMFtHTVQrMDI6MDBdIgotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vem9uZWRkYXRldGltZS12My5qc29uIGIvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi96b25lZGRhdGV0aW1lLXYzLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2N2ZjNDcuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbi11dGlsL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3N0cnVjdHVyZS9pby9ncmFwaHNvbi96b25lZGRhdGV0aW1lLXYzLmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXsKLSAgIkB0eXBlIiA6ICJneDpab25lZERhdGVUaW1lIiwKLSAgIkB2YWx1ZSIgOiAiMjAxNi0xMi0yM1QxMjoxMjoyNC4wMDAwMDAwMzYrMDI6MDBbR01UKzAyOjAwXSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3pvbmVvZmZzZXQtdjIuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vem9uZW9mZnNldC12Mi5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTkxNzk0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vem9uZW9mZnNldC12Mi5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6Wm9uZU9mZnNldCIsCi0gICJAdmFsdWUiIDogIiswMzowNjowOSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGluLXV0aWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3RydWN0dXJlL2lvL2dyYXBoc29uL3pvbmVvZmZzZXQtdjMuanNvbiBiL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vem9uZW9mZnNldC12My5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTkxNzk0Li4wMDAwMDAwCi0tLSBhL2dyZW1saW4tdXRpbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vem9uZW9mZnNldC12My5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi17Ci0gICJAdHlwZSIgOiAiZ3g6Wm9uZU9mZnNldCIsCi0gICJAdmFsdWUiIDogIiswMzowNjowOSIKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGludC9SRUFETUUubWQgYi9ncmVtbGludC9SRUFETUUubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzczZWUuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbnQvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTwhLS0KLSAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gU2VlIHRoZSBOT1RJQ0UgZmlsZQotICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLSFbR3JlbWxpbnQgR2l0aHViIEhlYWRlciAxOTIweDEwMjRdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzI1NjYzNzI5Lzg4NDg4Nzg4LWQ1YTczNzAwLWNmOGYtMTFlYS05YWRiLTAzZDYyYzc3YzFiNy5wbmcpCi0KLSMjIyBXaGF0IGlzIEdyZW1saW50PwotCi1HcmVtbGludCBpcyBhIGNvZGUgZm9ybWF0dGVyLCBmcm9tIFtBcGFjaGUgVGlua2VyUG9w4oSiXVt0a10gd2hpY2ggcGFyc2VzIEdyZW1saW4gcXVlcmllcyBhbmQgcmV3cml0ZXMgdGhlbSB0byBhZGhlcmUgdG8gY2VydGFpbiBzdHlsaW5nIHJ1bGVzLiBJdCBkb2VzIHNvIGJ5IHBhcnNpbmcgdGhlIHF1ZXJ5IHRvIGFuIGFic3RyYWN0IHN5bnRheCB0cmVlLCBhbmQgcmVwcmludGluZyBpdCBmcm9tIHNjcmF0Y2guCi0KLSMjIyBCdXQgd2h5PwotCi0tIFRvIG1ha2UgR3JlbWxpbiBxdWVyaWVzIG1vcmUgcmVhZGFibGUKLS0gVG8gbWFrZSB5b3VyIHF1ZXJpZXMgbW9yZSBiZWF1dGlmdWwKLS0gVG8gYWN0IGFzIGEgImxpdmluZyIgc3R5bGUgZ3VpZGUKLQotIyMjIEluc3RhbGwgR3JlbWxpbnQgYXMgYSBKYXZhU2NyaXB0IC8gVHlwZVNjcmlwdCBwYWNrYWdlCi0KLWBgYGJhc2gKLW5wbSBpbnN0YWxsIGdyZW1saW50Ci1gYGAKLQotIyMjIEJhc2ljIGV4YW1wbGUKLQotYGBgdHlwZXNjcmlwdAotaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICdncmVtbGludCc7Ci0KLWNvbnN0IHVuZm9ybWF0dGVkUXVlcnkgPSBgZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnNob3J0ZXN0UGF0aCgpLndpdGgoU2hvcnRlc3RQYXRoLnRhcmdldCwgX18uaGFzKCduYW1lJywgJ2pvc2gnKSkud2l0aChTaG9ydGVzdFBhdGguZGlzdGFuY2UsICd3ZWlnaHQnKWA7Ci0KLWNvbnN0IGZvcm1hdHRlZFF1ZXJ5ID0gZm9ybWF0UXVlcnkodW5mb3JtYXR0ZWRRdWVyeSk7Ci0KLWNvbnNvbGUubG9nKGZvcm1hdHRlZFF1ZXJ5KTsKLWBgYAotCi1gYGAKLWcuVigpLgotICBoYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuCi0gIHNob3J0ZXN0UGF0aCgpLgotICAgIHdpdGgoU2hvcnRlc3RQYXRoLnRhcmdldCwgX18uaGFzKCduYW1lJywgJ2pvc2gnKSkuCi0gICAgd2l0aChTaG9ydGVzdFBhdGguZGlzdGFuY2UsICd3ZWlnaHQnKQotYGBgCi0KLSMjIyBPdmVycmlkZSBkZWZhdWx0IG1heCBsaW5lIGxlbmd0aAotCi1UaGUgZGVmYXVsdCBtYXggbGluZSBsZW5ndGggaXMgODAsIGJ1dCBpdCBjYW4gZWFzaWx5IGJlIG92ZXJyaWRkZW4uCi0KLWBgYHR5cGVzY3JpcHQKLWltcG9ydCB7IGZvcm1hdFF1ZXJ5IH0gZnJvbSAnZ3JlbWxpbnQnOwotCi1jb25zdCB1bmZvcm1hdHRlZFF1ZXJ5ID0gYGcuVigpLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKS5zaG9ydGVzdFBhdGgoKS53aXRoKFNob3J0ZXN0UGF0aC50YXJnZXQsIF9fLmhhcygnbmFtZScsICdqb3NoJykpLndpdGgoU2hvcnRlc3RQYXRoLmRpc3RhbmNlLCAnd2VpZ2h0JylgOwotCi1jb25zdCBmb3JtYXR0ZWRRdWVyeSA9IGZvcm1hdFF1ZXJ5KHVuZm9ybWF0dGVkUXVlcnksIHsgbWF4TGluZUxlbmd0aDogNTAgfSk7Ci0KLWNvbnNvbGUubG9nKGZvcm1hdHRlZFF1ZXJ5KTsKLWBgYAotCi1gYGAKLWcuVigpLgotICBoYXMoJ3BlcnNvbicsICduYW1lJywgJ21hcmtvJykuCi0gIHNob3J0ZXN0UGF0aCgpLgotICAgIHdpdGgoCi0gICAgICBTaG9ydGVzdFBhdGgudGFyZ2V0LAotICAgICAgX18uaGFzKCduYW1lJywgJ2pvc2gnKSkuCi0gICAgd2l0aChTaG9ydGVzdFBhdGguZGlzdGFuY2UsICd3ZWlnaHQnKQotYGBgCi0KLSMjIyBPdGhlciBmb3JtYXR0aW5nIG9wdGlvbnMKLQotYGBgdHlwZXNjcmlwdAotaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICdncmVtbGludCc7Ci0KLWNvbnN0IHVuZm9ybWF0dGVkUXVlcnkgPSBgZy5WKCkuaGFzKCdwZXJzb24nLCAnbmFtZScsICdtYXJrbycpLnNob3J0ZXN0UGF0aCgpLndpdGgoU2hvcnRlc3RQYXRoLnRhcmdldCwgX18uaGFzKCduYW1lJywgJ2pvc2gnKSkud2l0aChTaG9ydGVzdFBhdGguZGlzdGFuY2UsICd3ZWlnaHQnKWA7Ci0KLWNvbnN0IGZvcm1hdHRlZFF1ZXJ5ID0gZm9ybWF0UXVlcnkodW5mb3JtYXR0ZWRRdWVyeSwgewotICBpbmRlbnRhdGlvbjogNCwgLy8gZGVmYXVsdDogMAotICBtYXhMaW5lTGVuZ3RoOiA0MCwgLy8gZGVmYXVsdDogODAKLSAgc2hvdWxkUGxhY2VEb3RzQWZ0ZXJMaW5lQnJlYWtzOiB0cnVlLCAvLyBkZWZhdWx0OiBmYWxzZQotfSk7Ci0KLWNvbnNvbGUubG9nKGZvcm1hdHRlZFF1ZXJ5KTsKLWBgYAotCi1gYGAKLSAgICBnLlYoKQotICAgICAgLmhhcygncGVyc29uJywgJ25hbWUnLCAnbWFya28nKQotICAgICAgLnNob3J0ZXN0UGF0aCgpCi0gICAgICAgIC53aXRoKAotICAgICAgICAgIFNob3J0ZXN0UGF0aC50YXJnZXQsCi0gICAgICAgICAgX18uaGFzKCduYW1lJywgJ2pvc2gnKSkKLSAgICAgICAgLndpdGgoCi0gICAgICAgICAgU2hvcnRlc3RQYXRoLmRpc3RhbmNlLAotICAgICAgICAgICd3ZWlnaHQnKQotYGBgCi0KLSMjIyBKdXN0IGxvb2tpbmcgZm9yIGFuIG9ubGluZSBHcmVtbGluIHF1ZXJ5IGZvcm1hdHRlcj8KLQotaHR0cHM6Ly9ncmVtbGludC5jb20gaXMgYSB3ZWJzaXRlIHdoaWNoIHV0aWxpemVzIHRoZSBHcmVtbGludCBsaWJyYXJ5IHRvIGdpdmUgdXNlcnMgYW4gb25saW5lICJsaXZpbmciIHN0eWxlIGd1aWRlIGZvciBHcmVtbGluIHF1ZXJpZXMuIEl0IGFsc28gc2VydmVzIGFzIGEgcGxhdGZvcm0gZm9yIHNob3djYXNpbmcgdGhlIGZlYXR1cmVzIG9mIEdyZW1saW50LiBJdHMgc291cmNlIGNvZGUgaXMgYXZhaWxhYmxlIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC90cmVlL21hc3Rlci9kb2NzL3NpdGUvaG9tZS9ncmVtbGludCkuCi0hW0dyZW1saW50IFYyIFNjcmVlbnNob3RdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzI1NjYzNzI5Lzg4NDg4NTE4LWYwNzhhYzAwLWNmOGQtMTFlYS05ZTFjLTAxZWRlYzI4NTc1MS5wbmcpCi0KLVt0a106IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9ncmVtbGludC9wYWNrYWdlLWxvY2suanNvbiBiL2dyZW1saW50L3BhY2thZ2UtbG9jay5qc29uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzM3MTk3Li4wMDAwMDAwCi0tLSBhL2dyZW1saW50L3BhY2thZ2UtbG9jay5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsMTEwODkgKzAsMCBAQAotewotICAibmFtZSI6ICJncmVtbGludCIsCi0gICJ2ZXJzaW9uIjogIjMuOC4yLWFscGhhMSIsCi0gICJsb2NrZmlsZVZlcnNpb24iOiAyLAotICAicmVxdWlyZXMiOiB0cnVlLAotICAicGFja2FnZXMiOiB7Ci0gICAgIiI6IHsKLSAgICAgICJuYW1lIjogImdyZW1saW50IiwKLSAgICAgICJ2ZXJzaW9uIjogIjMuOC4yLWFscGhhMSIsCi0gICAgICAibGljZW5zZSI6ICJBcGFjaGUtMi4wIiwKLSAgICAgICJkZXZEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvamVzdCI6ICJeMjcuNS4wIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMi41LjEiLAotICAgICAgICAiamVzdCI6ICJeMjYuNi4xIiwKLSAgICAgICAgInByZXR0aWVyIjogIl4zLjAuMCIsCi0gICAgICAgICJ0cy1qZXN0IjogIl4yNi40LjIiLAotICAgICAgICAidHNsaW50IjogIl42LjEuMyIsCi0gICAgICAgICJ0c2xpbnQtY29uZmlnLXByZXR0aWVyIjogIl4xLjE4LjAiLAotICAgICAgICAidHlwZXNjcmlwdCI6ICJeNC43LjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9jb2RlLWZyYW1lIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvZGUtZnJhbWUvLS9jb2RlLWZyYW1lLTcuMTIuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhWMUNtMFEzWnJwQ1I5M3RrV09ZaXVZSWdMeFpYWkZWRzJWZ0srTUJXalVxWlR1bmR1cGJmeDJhWGFyWHV3NUtvNWFNY2p0SmdiU3M0dlVHQlM1djZnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hpZ2hsaWdodCI6ICJeNy4xMi4xMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2NvbXBhdC1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiNy4xNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29tcGF0LWRhdGEvLS9jb21wYXQtZGF0YS03LjE0LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWkyd1hyV1FOa0g2SnBsSlFHbjNSZDJJNFBpajhHZEhrWHdITXhtK3pWNVlHL0pjaStiQ05yV1pFV0M0byt1bWlEa1JyUnM0ZFZ6SDNYNEdQN3Z5alFRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9jb3JlLy0vY29yZS03LjE0LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWpCNUFtVEtPQ1NKSVo3MnNkNzhFQ0VodVBpRE1LbFFkREkvNFFSSTZsellBVHg1U1NvZ1Mxb1FBMkFvUGVjUkNrbm0zMGdIaTJsK1FWdk5VdTN3WkFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL2dlbmVyYXRvciI6ICJeNy4xNC4zIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6ICJeNy4xMy4xNiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogIl43LjE0LjIiLAotICAgICAgICAiQGJhYmVsL2hlbHBlcnMiOiAiXjcuMTQuMCIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjE0LjMiLAotICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4xNC4yIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xNC4yIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS43LjAiLAotICAgICAgICAiZGVidWciOiAiXjQuMS4wIiwKLSAgICAgICAgImdlbnN5bmMiOiAiXjEuMC4wLWJldGEuMiIsCi0gICAgICAgICJqc29uNSI6ICJeMi4xLjIiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjUuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02LjkuMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInR5cGUiOiAib3BlbmNvbGxlY3RpdmUiLAotICAgICAgICAidXJsIjogImh0dHBzOi8vb3BlbmNvbGxlY3RpdmUuY29tL2JhYmVsIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvY29yZS9ub2RlX21vZHVsZXMvc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjUuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWlnT2RMUkFoMGkwZW9VeUEyT3BHaTZMdlA4dz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9nZW5lcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9nZW5lcmF0b3IvLS9nZW5lcmF0b3ItNy4xNC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ibjBTNmZsRy9qMHh0UWR6M2hzako2MjRoM1cwcjNsbHR0Qk1meUhYM1lyWi9LdExZcjE1YmpBMEZYa2dXN0ZwdnJEdVR1RWxYZVZqaUtsWVJwbk9GQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xNC4yIiwKLSAgICAgICAgImpzZXNjIjogIl4yLjUuMSIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjUuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2dlbmVyYXRvci9ub2RlX21vZHVsZXMvc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjUuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWlnT2RMUkFoMGkwZW9VeUEyT3BHaTZMdlA4dz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzLy0vaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMtNy4xNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KZ2R6T1laL3FHYUtUVmtuNXFFRFYvU1hBaDhLY3lVVmtDb1NXR044VDNid3JnZDZtKy9kSmEya1ZHaTZSSllKZ0VZUEJkWjg0QlpwOWRVak5Xa0JhQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb21wYXQtZGF0YSI6ICJeNy4xNC40IiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbiI6ICJeNy4xMi4xNyIsCi0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiXjQuMTYuNiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjYuMy4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZS8tL2hlbHBlci1mdW5jdGlvbi1uYW1lLTcuMTQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTllabGtaUnlkeHcrWVQ1NklsaEljUzhQQWhiK0ZFVWlPenVoRlRmcUR5UG16QWhSZ2U2dWEwZFFZVC9VaDB0L0VESHEwNS9pK2U1TTJkNFh2amdhclE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLWdldC1mdW5jdGlvbi1hcml0eSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItZ2V0LWZ1bmN0aW9uLWFyaXR5IjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1nZXQtZnVuY3Rpb24tYXJpdHkvLS9oZWxwZXItZ2V0LWZ1bmN0aW9uLWFyaXR5LTcuMTIuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURqRVZ6UU56NUxJQ2t6TjBSRWRwRDVwckdvaWR2YmRZazFCVmdSVU9JTmFXSlAydDZhdkIyN1gxZ3VYSzFrWE5yWDBXTWZzcm0xQS9aQnRoWXVJTVFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjEyLjEzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLW1lbWJlci1leHByZXNzaW9uLXRvLWZ1bmN0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTMuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zLy0vaGVscGVyLW1lbWJlci1leHByZXNzaW9uLXRvLWZ1bmN0aW9ucy03LjEzLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00OHFsMUNMTDU5YUtiVTk0WTg4WGdiMlZGeTdhOTV5a0dSYkpKYWFWditMWDVVOHdGcExmaUdYSkpHVW96c21BMW9FaC9vNUJwNjBWb3E3QUN5QS9Tdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xMy4xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTMuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMvLS9oZWxwZXItbW9kdWxlLWltcG9ydHMtNy4xMy4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGNWdlIyLzFCNjkzSXVPdlNJMjB4cXFhLytibDdscUFNUjU5UjRpdTM5UjlhT1g4L0pvWVkxc0ZhTnZVTXlNQkduSGR3dkpnVXJ6TkxvVVp4WHlweEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTMuMTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMvLS9oZWxwZXItbW9kdWxlLXRyYW5zZm9ybXMtNy4xNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Pem5KVWRhL3NvS1h2MFhocHZ6R1dEbm1sNFFud3AxNkdOK0Qva1pJZExzV29IajA1a3l1OFJtNWtYbU1lZityVkpaMCs0cFNHTGtlaXhkcU5VQVREQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMiOiAiXjcuMTMuMTIiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycyI6ICJeNy4xMy4xMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiAiXjcuMTMuMTIiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4xNC4wIiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEyLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbi8tL2hlbHBlci1vcHRpbWlzZS1jYWxsLWV4cHJlc3Npb24tNy4xMi4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQmRXUWhvVkprcDZuVmpCN25rRldjbjQzZGtwcllhdXF0aysrUHkyZWFmL0dSREZtNUJ4UnFFSVpDaUhsWlVHQVZtdHdLY3NWTDFkQzY4V216ZUZtaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscy8tL2hlbHBlci1wbHVnaW4tdXRpbHMtNy4xMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aUGFmSVBTd3pVbEFvV1Q4REtzMVcyVnlGMmdPV3RoR2Q1TkdGTXNCY01Nb2wrWmhLK0VRWS9lNlY5NnBvYTZQQS9CaCtDOXBsV04waFhPMXVCOEFmUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItcmVwbGFjZS1zdXBlcnMvLS9oZWxwZXItcmVwbGFjZS1zdXBlcnMtNy4xNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16Wjd1SENXbHhmRUFBT1ZEWVFwRWYvdXlpMWRtZUM3Zlg0bkNmMml6OWRybkN3aTF6dndYTDNId1dXTlhVUUVKMWsyM3lWbjNWYmRkaUk5aUpFWGFUUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zIjogIl43LjEzLjEyIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4xNC4yIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xNC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEzLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MvLS9oZWxwZXItc2ltcGxlLWFjY2Vzcy03LjEzLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03RkVqYnJ4NVNMOWNXdlhpb0RibmxZVHBwY1pHdUNZNm93My9ENXZNZ2diMll3Z3U0ZE1ycFRKWDBKZFFBSWNSUlVFbE9JeEYzeUVvb2E5Z1ViOVpiQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xMy4xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEyLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXNwbGl0LWV4cG9ydC1kZWNsYXJhdGlvbi8tL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24tNy4xMi4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdENKRGx0RjgzaHRVdFh4NU5MY2FEcVJta252NjUyWldDSHlvVEVUZjFDWFlKZFBDN25vaFpvaGpVZ2llWGh2MGhUSmRSZjJGakR1ZUZlaGROdWNwemc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXIvLS9oZWxwZXItdmFsaWRhdG9yLWlkZW50aWZpZXItNy4xNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WM3RzN3pNU3U1bGZpd1dEVld6UkRHSU4rbG5DRVVkYVhndFZISmdMYjFyR2FBNmpNcnRCOUVtRTdMMThmb1hKSUU4VW4vQS9oNk5KZkdRcC9lMUo0QT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTIuMTciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi8tL2hlbHBlci12YWxpZGF0b3Itb3B0aW9uLTcuMTIuMTcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRvcGtNRG1MenE4bmdDaHdSbHlqUjZyYUtENmdNU2FlNEpkWURCOGJCeUtyZVFnRzBSQlR1S2U5TFJ4VzN3RnRVbmp4T1BSS0JEd0VINk1nNUtlRGZ3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hlbHBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXJzLy0vaGVscGVycy03LjE0LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSt1ZnVYcHJ0UTFEMWlaVE8vSzkrRUJSbitxUFdNSmpaU3cvUzBLbEZyeEN3NHRrcnp2OWdyZ3BESGtZOU1lUVRqVFk4aTJzcDdKZXA4RGZVNnROOU1nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3RlbXBsYXRlIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC90cmF2ZXJzZSI6ICJeNy4xNC4wIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0IjogewotICAgICAgInZlcnNpb24iOiAiNy4xNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGlnaGxpZ2h0Ly0vaGlnaGxpZ2h0LTcuMTQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVNDT3d4dlRZRUlNU0dhQlFiNWtERHNDb3BEZGlVR3NxcGF0cDNmT2xJNCsySFFTa1RtRVZXblZ1eVNkQUM1RVdDcVNXV1R2MGliNjNSalI3ZFRCZGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjE0LjAiLAotICAgICAgICAiY2hhbGsiOiAiXjIuMC4wIiwKLSAgICAgICAgImpzLXRva2VucyI6ICJeNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oaWdobGlnaHQvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtMy4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY29sb3ItY29udmVydCI6ICJeMS45LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hpZ2hsaWdodC9ub2RlX21vZHVsZXMvY2hhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhbGsvLS9jaGFsay0yLjQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTXRpK2Y5bHBKTmN3RjR0V1Y4L09yVFR0RjFnWmkrZjhGcWx5QWRvdXJhbGNGV0ZRV0YyK05nQ0hTaGprQ2IrSUZCTHE5YnVad0UxeGNrUVU0cGVTdVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeMy4yLjEiLAotICAgICAgICAiZXNjYXBlLXN0cmluZy1yZWdleHAiOiAiXjEuMC41IiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvaGlnaGxpZ2h0L25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMS45LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTEuOS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAiMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oaWdobGlnaHQvbm9kZV9tb2R1bGVzL2NvbG9yLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1wOUJWaTlpY1F2ZVYzVUl5ajNRSU1jcFR2Q1U9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oaWdobGlnaHQvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMS4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HMkhBVmlHUXFOLzJyanV5endJQXloTUxodFE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9oaWdobGlnaHQvbm9kZV9tb2R1bGVzL2hhcy1mbGFnIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS10ZFJVM0NHWnJpSldtZk5HZmxvSDg3bFZ1djA9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL2hpZ2hsaWdodC9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci01LjUuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWpWandkWEl0NDA4TUlpQXFDWDRvVUtzZ1UyRXFBR3pzMlBwa200YVFZYmptK1pFV0VjVzRTZkZOVHI0dU1OWm1hMGV5NGY1bGdMcmtCMGFYMFFNb3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BhcnNlci8tL3BhcnNlci03LjE0LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFybGl5VXNXRFVxRUdmV2NtenBHVXpOZkx4VGRUcDZXVTRJdVA2UUZTcDlnR2ZXUzZib3hGQ2tKU0ovTDQrUkc4ei9GbklVM1d4Q2s2aFBMOVNTV2VBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAicGFyc2VyIjogImJpbi9iYWJlbC1wYXJzZXIuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycy8tL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycy03LjguNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdHljbVp4a0dmWmF4aE1SYlhsUFh1VkZwZFdsWHBpcjJXNEFNaFNKZ1JLemsvZURsSVhPaGIyTEhXb0xwREY3VEVIeWxWNXpOaHlrWDZLQWdISm1UTnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50IjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWJpZ2ludC8tL3BsdWdpbi1zeW50YXgtYmlnaW50LTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13blRuRmxHK1l4UW0zdkR4cEdFNTdQajBzclJVNHNIRS9tRGt0MXF2MllKSlNlVUFlYzJtYTRXTFVuVVBlS2p5cmZudFZ3ZS9ONmRDWHBVK3pMM05wZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUzcmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhUUVpZQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEyLjEzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YS8tL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEtNy4xMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZcWZtK1hEeDArUHJoM1ZTZUVRQ1BVODF5QytKV1oycERQRlNTNFpkcGZaaHA0TWtGTWFEQzFVcXNlb3ZFS3dTVXBuSUw3K3ZLK0NscDdiZmgwaUQ3Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEwLjQiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWpzb24tc3RyaW5ncy8tL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzLTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sWTZrZEdwV0h2am9lMnZrNFdyQWFwRXVCUjY5RU14WmwrUm9HUmhyRkdOWVZLOG1PUEFXOFZmYlQvWmdyRmJYbEROaWlheFFuQXRnVkNaNmp2MzBFQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZDh3YVNobHBGRGluUTVNdHZHVTl4REFPektINDcrRkZvbmV5MmJhRklvTXI5NTJoS09McDFIUjdWc3pvWnZPc1YvNCtSUnN6Tlk3RDE3YmEwdGUwaWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xMC40IgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tc3ludGF4LW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IvLS9wbHVnaW4tc3ludGF4LW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvci03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYVNmZjR6UElJMXUyUUQ3eStGOG9Ec3oxOWV3NElHRUpnOVNWVyticXdwd3RmRmxlaVFETWR6QS9SK1VsV0R6Zm5IRkN4eGxlRlQwUE1JclIzNlhMTlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEwLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yLy0vcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvci03LjEwLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlINllkZmtjSy91T25ZL0s3L2FBMnhwemFBZ2tRbjM3eXpXVU1SSzdPYVBPcU9wR1MxK24wSDVoeFQ5QVV3OUVzU2pQVzhTVnlNSndZUnRXczNYM3VnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkLy0vcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhvcU1pakdaYjl5M3kyWHNrTitQMXdVR2lWd1daNUptb0RSd3g1KzNHbUVwbE55Vk0yczJEZzhJTEZRbThyV000OG9yR3k1WXBJNUJsOFUxeTd5ZGxBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2F0Y2gtYmluZGluZy8tL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2F0Y2gtYmluZGluZy03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNlZQRDBQYzFscFRxdzBhS29lUlRNaUIra1doQW9UMjRQQStrc1dTQnJGdGw1U0lSVnBabHdOM05OUFFqZWhBMkUvOTFGVjNSakxXb1ZUZ2xXY1NWM1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4wLjAtMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2hhaW5pbmcvLS9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nLTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Lb0s5RXJIMU1CbENQeFYwVkFOa1hXMi9kdzR2bGJHRHJGZ3o4Ym1Vc0JHWWtGUmNiUndNaDZjSUp1YmRQcmt4Und1R2R0Q2swdi93UFRLYlFnQmprZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMC0wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEyLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQvLS9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdC03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BODFGOXBEd3lTN3lNLy9Ld2JDU0RxeTNVajROTUl1cnRwbHhwaFd4b1l0TlBvdjdjSnNEa0FGTk55VmxJWjNqd0d5Y1ZzdXJaK0x0T0E4Z1ozNzZpUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEyLjEzIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wLTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC90ZW1wbGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTIuMTMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC90ZW1wbGF0ZS8tL3RlbXBsYXRlLTcuMTIuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS83eHhpR0E1N3hNby9QMkdWdmRFdW1yOE9OaEZPaGZncTJpaEszaDFlNlRIcXpUQWtIYmtYZ0IweEk5eWVUZklVb0gzK29BZUhocW0vSTQzT1RiYmpBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiYWJlbC90cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RyYXZlcnNlLy0vdHJhdmVyc2UtNy4xNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Uc2RSZ3ZCRkhNeUhPT3pjUDlTNlFVMFFRdGp4bFJwRVlPeTNtY0NPNVJnbUMzMDVraTQyYVNBbWZaRU1TU1lCbGEyb1o5Qk1xWWxuY0JhS21ELzdpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNwbGl0LWV4cG9ydC1kZWNsYXJhdGlvbiI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvcGFyc2VyIjogIl43LjE0LjIiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjE0LjIiLAotICAgICAgICAiZGVidWciOiAiXjQuMS4wIiwKLSAgICAgICAgImdsb2JhbHMiOiAiXjExLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGJhYmVsL3R5cGVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvdHlwZXMvLS90eXBlcy03LjE0LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxDajRhSXMweFVlZkpGUW53d1F2MkJ4ZzdPbWQ2YmdxdVo2TEdDK2dHTWg2L3M1cURWZmp1Q01sRG1ZUTE1U0xzV0hkOW4rWDNFNzVsS0lobDVMa2l3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4xNC4wIiwKLSAgICAgICAgInRvLWZhc3QtcHJvcGVydGllcyI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BiY29lL3Y4LWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiY29lL3Y4LWNvdmVyYWdlLy0vdjgtY292ZXJhZ2UtMC4yLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBoWVE4U0I0RGI1enZaQjRheGRNSEd3RWFRamtaekZqUWlOOUxWWXZJRkIyblNVSFc5dFlweFdyaVByV0RBU0l4aWFYYXg4M1JFY0x4dVNkbkdQWnR3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGNuYWthemF3YS93YXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY25ha2F6YXdhL3dhdGNoLy0vd2F0Y2gtMS4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXY5a0loS3dqZVpUaGlXckxtajB5MTdDV295ZGRBU0xqOU8yeXZiWmtidncvTjNyV09ZeTl6a1Y2NnVyc0FvVnIwbVYxNWJMOGcwYzRRWlVFNmNkRG9RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZXhlYy1zaCI6ICJeMC4zLjIiLAotICAgICAgICAibWluaW1pc3QiOiAiXjEuMi4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ3YXRjaCI6ICJjbGkuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xLjk1IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGlzdGFuYnVsanMvbG9hZC1ueWMtY29uZmlnLy0vbG9hZC1ueWMtY29uZmlnLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WamVIU2xJenB2L055RDNOMFl1SGZYT1BESWl4Y0ExcTJaVjk4d3NNcWNZbFBtdjJuM1liMmxZUDlYTUVsbmFGVlhnNUE3WUxUZUx1NlY4NHVRRGptUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbWVsY2FzZSI6ICJeNS4zLjEiLAotICAgICAgICAiZmluZC11cCI6ICJeNC4xLjAiLAotICAgICAgICAiZ2V0LXBhY2thZ2UtdHlwZSI6ICJeMC4xLjAiLAotICAgICAgICAianMteWFtbCI6ICJeMy4xMy4xIiwKLSAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGlzdGFuYnVsanMvc2NoZW1hIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Bpc3RhbmJ1bGpzL3NjaGVtYS8tL3NjaGVtYS0wLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWlhSWTRqTnZWZ1NWUThETDNMVGNha2FBdFh3VFZVeEU4MWhzbHN5RDJBdG9YVy93Vm9iMTBIa09KMVgvcEFsY0k3RCsyWW9aS2c1ZG84Ry93NlJZZ0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2NvbnNvbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvbnNvbGUvLS9jb25zb2xlLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSVkxUjJpMmFMc0xyN0lkM1M2cDJCQTgyR05Xcnl0NG9TdkVYTEFLYytMMnpkaTg5ZFNrRTh4QzFDKzBrcEFURzRKaEJKUkVuUU9INy96bWNjTTJCMGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9jb3JlIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb3JlLy0vY29yZS0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXh2VjFrS2JoZlVxRlZ1WjhDeW8rSlBwaXBBSEhBVjNrY0RCZnRpZHVLOEVJQ1htVEZkZHJ5eTNQN05mWnQ4UHYzN3JBOW5FSkJLQ0NrZ2xDUHQvWGp3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3JlcG9ydGVycyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFuc2ktZXNjYXBlcyI6ICJeNC4yLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJqZXN0LWNoYW5nZWQtZmlsZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI2LjAuMCIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1ydW5uZXIiOiAiXjI2LjYuMyIsCi0gICAgICAgICJqZXN0LXJ1bnRpbWUiOiAiXjI2LjYuMyIsCi0gICAgICAgICJqZXN0LXNuYXBzaG90IjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtd2F0Y2hlciI6ICJeMjYuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC4yIiwKLSAgICAgICAgInAtZWFjaC1zZXJpZXMiOiAiXjIuMS4wIiwKLSAgICAgICAgInJpbXJhZiI6ICJeMy4wLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC9lbnZpcm9ubWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5GeStmSGwyOHpVclJzQ2VNQjYxVkRUaFYxcFZUdGxFb2tCUmdxUHJjVDFKTnE0eVJOSXlUSGZ5aHQ2UHF0VXZZOUlzdUxHVHJiRzhrUFhqU1pJWndBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNi42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9mYWtlLXRpbWVycy8tL2Zha2UtdGltZXJzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMTRVbGVhdHQ3amR6ZWZMUFlNM0tMY25VbDFaTmlrYUtxMzRlbnBiNVhHOWk4MUpwcHBEYjVtdVp2b252S3lybDdmdEVIa0tTNUw1L2VCL2t4SitidkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogIl42LjAuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L2dsb2JhbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2dsb2JhbHMvLS9nbG9iYWxzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItODVMdG5tN0hsQi9LZXNCVXVBTHdRNjhZVFU3Mnc5SDJ4VzlGaloxZUwxVTNsaHRlZmpqbDVjMk1pVWJwWHQvaTZMYVBSdm9PRkoyMnlDQlNmUTBKSUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiZXhwZWN0IjogIl4yNi42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3JlcG9ydGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvcmVwb3J0ZXJzLy0vcmVwb3J0ZXJzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDJiVzUzQVBHNEh2a09uVk1vOHEzUVhhNnBjYU50MUhrd1ZzT1BNQlY2TEQvcTlvU3B4TlNZWlFZa0FuamRNanJKODZVdVllTG8rYUVaQ2xWNm9wbnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmNvZS92OC1jb3ZlcmFnZSI6ICJeMC4yLjMiLAotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiLAotICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiAiXjQuMC4zIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1yZXBvcnQiOiAiXjMuMC4wIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcyI6ICJeNC4wLjAiLAotICAgICAgICAiaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjIiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXdvcmtlciI6ICJeMjYuNi4yIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIsCi0gICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMSIsCi0gICAgICAgICJ0ZXJtaW5hbC1saW5rIjogIl4yLjAuMCIsCi0gICAgICAgICJ2OC10by1pc3RhbmJ1bCI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9LAotICAgICAgIm9wdGlvbmFsRGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1ub3RpZmllciI6ICJeOC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0BqZXN0L3NvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXdZY0N3QW5ObU9Wc1o4bXIzR2ZuemRYREFsNExhZW5aUDV6K0cwYzhiekM5L2R1Z0w4elJteFp6ZG9UbDRJYVMzQ3J5UzF1V25ST0xQRm1iNmxWdkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWxsc2l0ZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdGVzdC1yZXN1bHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3Rlc3QtcmVzdWx0Ly0vdGVzdC1yZXN1bHQtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01TzdINWMvN1lsb2pwaFlOckswMkxsRElWMkdOUFlpc0t3SG0yUVRLak5aZUV6ZXpDYndZczlzd0p5U3YyVWZQTXlaMFZkc21NdjdqSWxEL0lLWVFwUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgImNvbGxlY3QtdjgtY292ZXJhZ2UiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90ZXN0LXNlcXVlbmNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1zZXF1ZW5jZXIvLS90ZXN0LXNlcXVlbmNlci0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlIbFZJalA1bmZFeWpsclNyOHQvWWROZlUvMVhFdDdjNWI0T3hjWENqeVJoanpMWXUvck82OS9XSFB1WWNiQ1drejhrQWVaVlpwMk4yK0lPTExFUEd3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXJ1bm5lciI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjYuNi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AamVzdC90cmFuc2Zvcm0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3RyYW5zZm9ybS8tL3RyYW5zZm9ybS0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUU5SmpoVWdOenZ1USt2VkFMMjF2bHlmeTEyZ1AwR2hhekdnSkM0aDZxVXQxalNkVVhHV0oxd2Z1L1g3U2Q4ZXRTZ3hWNG92VDFwYjl2NUQ2UVc0WGdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjQuMCIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNi4wLjAiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjIiLAotICAgICAgICAicGlyYXRlcyI6ICJeNC4wLjEiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIiwKLSAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQGplc3QvdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L3R5cGVzLy0vdHlwZXMtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mQzZRQ3A3U2M1c1g2ZzhUdmJtajRYVVRieXJpazBha2dSeTAzeWpYYlFhQldXTldHRTdTR3RKazk4bTBOOG56ZWdELzdTZ2dyVWxpdnhvNWF4NEtXUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMCIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIkB0eXBlcy95YXJncyI6ICJeMTUuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHNpbm9uanMvY29tbW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0xLjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGtOY0xBbi93WmFYMTRSUGx3aXpjS2ljRGs5RzNGOG0yblUzTDdVa201ekJnVHdpVDB3c29GQUh4OUpxNTZmSkExei83dUtHdENSdTE2c09VQ0xJSFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlLWRldGVjdCI6ICI0LjAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHNpbm9uanMvZmFrZS10aW1lcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHNpbm9uanMvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy02LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVpQVXhybUZ1YkkzNlhTMURJM3FtSTBZZE4xZ2tzNjJKdEZadnhSNjdsampTTkNlSzZVMDhaeDRtc0VXT1h1b2ZncVV0NnpQSFNpMUg5ZmJqUi9OUkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAc2lub25qcy9jb21tb25zIjogIl4xLjcuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHRvb3RhbGxuYXRlL29uY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHRvb3RhbGxuYXRlL29uY2UvLS9vbmNlLTEuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SYnpKdmxOem1ScTVjM08wOVVpcGV1WG5vNHRBMUZFNmlrT2p4WkswdHV4VnYzNDEybDY0bDV0MVc1cGo0K3JKcTl2cGttL2t3aVIwN2FaWG5zS1B4dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMS4xNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2JhYmVsX19jb3JlLy0vYmFiZWxfX2NvcmUtNy4xLjE0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16R1pKenpCVVZEby9lVjZLZ2JFMGYwWkk3ZEluRVl2bzEyUmI3MHVOUURzaEMzU2tSTWI2N2phMEdnUkhaZ0FYM1phNnJoYVdsdmJETzhyckd5QWIxZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX3RlbXBsYXRlIjogIioiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvYmFiZWxfX2dlbmVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX2dlbmVyYXRvci8tL2JhYmVsX19nZW5lcmF0b3ItNy42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1kU0puQmpsK2Jkd2tMc2taM05HRnA5WWNYR3g1Z2dMcFFRUHF0Z2FrVmhzV0swaFR0TlloanBaTGxXUVR2aUdUdkY4YXQrQnZsaTNqVjdmYVBkZ2VRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2JhYmVsX190ZW1wbGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RlbXBsYXRlLy0vYmFiZWxfX3RlbXBsYXRlLTcuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OVFBFcng0L0ZpUENHU2NIN2ZvUHlyKy8xRGt6a25pK3JIaVlISG9UanZ3b3U3QVF6SmtOZUQ2MEE5Q1hSeStaRU4yQjFiZ2dta1RNQ0RiK012NWsrQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjExLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fdHJhdmVyc2UvLS9iYWJlbF9fdHJhdmVyc2UtNy4xMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1WczBobTB2UGFoUE1ZaTl0RGp0UDY2bGx1ZmdPM1NUMTZXWGFTVHRER0VsOWNld0FsM0FpYm14V3c2VElOT3FIUFQ5ejB1QUJLQVlqVDlqTlNnNG5wdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ncmFjZWZ1bC1mcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvZ3JhY2VmdWwtZnMvLS9ncmFjZWZ1bC1mcy00LjEuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYW5La0xtWloreG00cDhKV0JmNGhFbGtNNFhSK0VaZUEyTTlCQWtrVGxkbWN5RFk0bWJkSUpuUmdoREpIM092NW9vWTcvVUFvRU50bWRNU2thQWQ3Q3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UvLS9pc3RhbmJ1bC1saWItY292ZXJhZ2UtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXN6N2lMcXZWVWcxZ0llZEJPdmxreFBsYzgvdVZ6eVM1T3dHejFjS2pYemtsM0ZwTDNhbDBjclU4WUdVMVdvSGt4bjBXeGJ3NXR5aTZodnpKS056RnN3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQvLS9pc3RhbmJ1bC1saWItcmVwb3J0LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wbEdnWEFQZlZLRm9ZZmE5TnBZREFrc2VHK2c2SnIyOTRScWVxY3FEaXhTYlUzNE1aVkpSaS9QKzdZOEdEcHprRXdMYUdaWk9wS0lFbWVWWk50S3NyZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMvLS9pc3RhbmJ1bC1yZXBvcnRzLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jM21BWkV1SzBsdkJwOHRtdUw3NFhSS24xK3kyZGN3T1VwSDd4NFdyRjZnazFHSWdpbHVEUmdNWVF0dzJPRmNCdkFKV2x0NkFTVTN0U3F4cDBVdTBBdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItcmVwb3J0IjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvamVzdC8tL2plc3QtMjcuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tcFQ4TEpKNENNZWVhaG9ib2ZZV0lqRm8weG9uUlMvSGZ4blZFUE1QRlNRZEdVdDF1SENub1BUN1poYitzakRVMnd6MG9LVjBPTFVSMFd6ckhOZ2ZlQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjcuMC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2plc3Qvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUN4d3B0MlNmVHpUdFhjZk9sekdFZWU4TytjK01tVWdHck5pQmNYbnVXeHVGSkhlNmE1SHo3cXdod2U1T2dhU1lJMElKdmtMcVdYMUFTRytjSk9rRWlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvYW5zaS1zdHlsZXM/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvamVzdC9ub2RlX21vZHVsZXMvZGlmZi1zZXF1ZW5jZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYtc2VxdWVuY2VzLy0vZGlmZi1zZXF1ZW5jZXMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rMWdDQVhBc05nTHdFTCtZOFd2bCtNNm9FRmo1YmdhemZaVUxwUzVDbmVvUFBYUmFDQ1c3ZG0rcTIxS3kyVkVFNVgrVmVSREJWZzFQY3Z2c3I0VHROUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvamVzdC9ub2RlX21vZHVsZXMvamVzdC1kaWZmIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWRpZmYvLS9qZXN0LWRpZmYtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tME52a1g1NUxEdDlUNG1jdFRFZ25aazNmbUVnM05SWXV0dk1QV00vMGlQbmtGajJ3SWVGNDVPMTcxOGNNU09GTzF2SU5rcW14cUQ4dkUzN3VURWJxdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJkaWZmLXNlcXVlbmNlcyI6ICJeMjcuNS4xIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI3LjUuMSIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvamVzdC9ub2RlX21vZHVsZXMvamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yS1k5NWtzWVNhSzdETUJXUW42ZFF6M2txQWYzQkI2NHkydWRlRytodjRLZlNPYjlxd2NZUXN0VEpjMUtDYnNpeCt3TFpXWllOOHQ3bndYM0dPQkxSdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIl4xMC4xMy4wIHx8IF4xMi4xMy4wIHx8IF4xNC4xNS4wIHx8ID49MTUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvamVzdC9ub2RlX21vZHVsZXMvamVzdC1tYXRjaGVyLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMjcuNS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1hdGNoZXItdXRpbHMvLS9qZXN0LW1hdGNoZXItdXRpbHMtMjcuNS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16MnVUeC9UNkxCYUNvTldORld3Q2hMQktZeFRNY0dCUmpBdCsyU2JQOTI5L0ZmbGI5YWE1TEdtYTY1NFJ6OHo5SEx4c3JVYVl6eEU5VC9FRklML1BBdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI3LjUuMSIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNy41LjEiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjcuNS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeMTAuMTMuMCB8fCBeMTIuMTMuMCB8fCBeMTQuMTUuMCB8fCA+PTE1LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL2plc3Qvbm9kZV9tb2R1bGVzL3ByZXR0eS1mb3JtYXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ByZXR0eS1mb3JtYXQvLS9wcmV0dHktZm9ybWF0LTI3LjUuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUWIxZ3k1T3JQNSt6RGYyQnZuemRsM2pzVGYxcVhWTWF6YnZDb0todEtxVnM0L1lLNG96WDRnS1FKSlZ5TmUrY2FqTlBuMEtvQzBNQzNGVW1hSFdFbVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMSIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNS4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE3LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjEwLjEzLjAgfHwgXjEyLjEzLjAgfHwgXjE0LjE1LjAgfHwgPj0xNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlIjogewotICAgICAgInZlcnNpb24iOiAiMjIuMTIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL25vZGUvLS9ub2RlLTIyLjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZsbDJGWjFyaU1qTm1sbUpPZEF5WTVwVWJrZnRYc2xCNURnRXpsSXVOYWlXaFhkMDBGaFd4VkMvcjR5Vi80d0JiOUpmSW1UdStqaVN2WFRrSjdGL2dBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAibGljZW5zZSI6ICJNSVQiLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInVuZGljaS10eXBlcyI6ICJ+Ni4yMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMvbm9ybWFsaXplLXBhY2thZ2UtZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvbm9ybWFsaXplLXBhY2thZ2UtZGF0YS8tL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEtMi40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWY1ajViL0dmNzFMK2RicXhJcFE0WjJXbG1JL21QSjBmT2tHR21GZ3RiNnNBdTk3RVBjenpiUzMvdEpLeG1jWURqNTVPWDZzc3F3REFXT0hJWURSREdBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3ByZXR0aWVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wcmV0dGllci8tL3ByZXR0aWVyLTIuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QaWpSQ0cvSzNzM3cxV2U2eW5VS2R4RWM1QWN1dUgzTkJtTURQOHV2S1ZwNlg0M1VZN05RbFR6Y3pha1hQM0RKUjBGNGRmTlFJR2pVMmNVZVJZczJBQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL0B0eXBlcy9zdGFjay11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvc3RhY2stdXRpbHMvLS9zdGFjay11dGlscy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkpKcnJ5U1k3QThoYXZxcEdPYk9CNFc5MlFYS0pvNjMvakZMTGdwdk90c0dVcWJRWjlTYmdsMzVLTW0xRGpDNmo3QXZtbVUyYklubyszSXlFYWVtYXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9AdHlwZXMveWFyZ3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNS4wLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MvLS95YXJncy0xNS4wLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rUTVKTlRyYkR2M1JwNVgybi9pVXUzN0lKQkRVMmdzWjVSL2cxL0tIT09FYzVJS2ZVRmpYVDZERU5QR2R1aDA4SS9wYW13dEVxNG91bDdnVXFLVFFEUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvQHR5cGVzL3lhcmdzLXBhcnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIwLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0yMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTM3UlNIaHQrZ3p6Z1llb2JiRytLV3J5ZUFXOEozM05ocjY5Y2pUcVNZeW1YVlpFTjlOYlJZV29ZbFJ0RGhIS1BWVDFGeU5Ld2FUUEMxTnluS1pwelJBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWJhYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hYmFiLy0vYWJhYi0yLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOUlLOUVhZHNiSG82akxXSXB4cFI2cEwwc2F6VFhWNitTUXYyNVpCK0Y3Qmo5bUpOYU9jNG5DUmFid2Q1TS9Kd21VYThpZHo2RWNpNmVLZkpyeVBzNlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi8tL2Fjb3JuLTguMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10cVBLSFo1Q2FCSncwWG15MFpadkxzMXFUVitCTkZTeXZuNzdBU1hrcEJOZklSazhldjI2ZktyRDlpTEd3R0E5emVkUGFvNTJHU0h6cThseVpHME5Vdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImFjb3JuIjogImJpbi9hY29ybiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYWNvcm4tZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi1nbG9iYWxzLy0vYWNvcm4tZ2xvYmFscy02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWlFsN0xPV2FGNWVQcXFjWDRoTHV2L2JMWFlRTmZOV3cyYzAveVgvVHNQUkthbXpIY1RHUW5sQ2pIVDNUc21rT1VWRVBTM2NyQ3hpUGZkekUvVHJsaGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhY29ybiI6ICJeNy4xLjEiLAotICAgICAgICAiYWNvcm4td2FsayI6ICJeNy4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fjb3JuLWdsb2JhbHMvbm9kZV9tb2R1bGVzL2Fjb3JuIjogewotICAgICAgInZlcnNpb24iOiAiNy40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLy0vYWNvcm4tNy40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5ReXAwbzEvbU5kYlRPMVBPNmtIa3dTcm1nWjBNVC9qQ0NwTml3YlVqR29STjRkbEJocUp0b1F1Q25FT0t6Z1RWd2cwWldpQ29ReTZTeE1lYlFWaDhBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAiYWNvcm4iOiAiYmluL2Fjb3JuIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hY29ybi13YWxrIjogewotICAgICAgInZlcnNpb24iOiAiNy4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fjb3JuLXdhbGsvLS9hY29ybi13YWxrLTcuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PUGRDRjZHc01JUCtBeithV2ZBQU9FdDIvK2lWREtFN295NmxKMDk4YW9lNTlvQW1LNzZxVjZHdzYwU2JaOGpIdUcyd0gwNThHRjRwTEZiWWFtWXJWQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC40LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FnZW50LWJhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWdlbnQtYmFzZS8tL2FnZW50LWJhc2UtNi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJaTndOY2xGNytNUy84YkRnNzBhbWczMmR5ZVpHWnhpRHVRbVp4S0xBbFFqcjNqR3lMeCs0S2trNThVTzdEMlFkZ0ZJUUNvdnVTdVpFU25lNlJHNlhRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVidWciOiAiNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fuc2ktZXNjYXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLWVzY2FwZXMvLS9hbnNpLWVzY2FwZXMtNC4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdLWGo1QUxyS1dRTHNZRzlqbFRSbVIveEtsdXhIVitaOVFFd05JZ0NmTTEvdXdQTUN1elZWbmg1bXdUZCtPdUJaY3dTSU1icXNzTldSbTFsRTUxUWFRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjIxLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hbnNpLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktcmVnZXgvLS9hbnNpLXJlZ2V4LTUuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xdUpRWGxUU1VHTDJMSDlTVVhvOFZ3c1k0c29hbmhnbzZMTlNtODRFMUxCY0U4czNPMHdwZGlSenlSOXovWlpKTWxNV3YzN3FPT2I5cGRKbE1VRUtGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy00LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemJCOXJDSkFUMXJiamlWRGIyaHFLRkhOWUx4Z3RrOE5VUnhaM0lad0QzRjZOdHhiWFpRQ25uU2kxTGt4K0lEb2hkUGxGcDIyMndWQUxJaGVaSlFTRWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9hbnNpLXN0eWxlcz9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FueW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueW1hdGNoLy0vYW55bWF0Y2gtMy4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVA0M2VQZk9BSXVwa2d1SFV5Y3JjNHFKOWt6OFppdU9VaWphRVR3WDdUSHQwWS9HTks3djBhYThyWTgxNnhXalo3ckpkQTVYZE1jcFZGVEtNcStSdldnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9ybWFsaXplLXBhdGgiOiAiXjMuMC4wIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4wLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FyZ3BhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEwIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcmdwYXJzZS8tL2FyZ3BhcnNlLTEuMC4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbzVSb3k2dE5HNFNML0ZPa0NBTjZSemppYWtaUzI1UkxZRnJjTXR0SnFiZGQ4QldybkErZkd6NTdpTjVQYjA2cHZCR3ZsNWdRMEI0OGRKbHNsWHZvVGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzcHJpbnRmLWpzIjogIn4xLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXJyLWRpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyLWRpZmYvLS9hcnItZGlmZi00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTFrWVFkUDYvN0hIbjRWSTFkaG95bWwzSHhTQT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fyci1mbGF0dGVuIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fyci1mbGF0dGVuLy0vYXJyLWZsYXR0ZW4tMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUwzaEtWNVIvcDVvODFSN08wMklHbndwRG1rcDZFOTgyWGh0YnV3U2UzTzRxT3RNTU10b2RpY0FTQTFDbnkyVSthQ1hjTnBtbCttNGRQc3ZzSjNqYXRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Fyci11bmlvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnItdW5pb24vLS9hcnItdW5pb24tMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS00NXNKcnFuZStHYW84Z2JpaUs5amtadXVPY1E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9hcnJheS11bmlxdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktdW5pcXVlLy0vYXJyYXktdW5pcXVlLTAuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcUpTM1hVdkU5czFubnZNa1NwL1k5R3JpMUNnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYXNzaWduLXN5bWJvbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXNzaWduLXN5bWJvbHMvLS9hc3NpZ24tc3ltYm9scy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVdXWi9RZnJkVHlETXZDdTVhNDFQZjNqc0EyYz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2FzeW5ja2l0IjogewotICAgICAgInZlcnNpb24iOiAiMC40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FzeW5ja2l0Ly0vYXN5bmNraXQtMC40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS14NTdaZjM4MHk0OHJvYnlYa0x6RFprZExTM2s9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2F0b2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXRvYi8tL2F0b2ItMi4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdtNnVrb2FPR0ppLzczcC9jbDJHdkxqVEk1Sk0xay9PMTRpc0Q3M1lNTDhTdHJILzcvbFJGZ21nOG5JQ1pnRDNiWlp2andDR3h0TU9EM3dXTkF1OGNnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAiYXRvYiI6ICJiaW4vYXRvYi5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNC41LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JhYmVsLWplc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLWplc3QvLS9iYWJlbC1qZXN0LTI2LjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGw0UStHQVZPSHd2anJjazZqS2p2bUdobk8zakhYL3h1QjlkMjdmK0VKWi82ays2bk11UGpvcnJZcDdzKytiS0tkQU53ekVsQlduTFdhT2J2VG5hWkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fY29yZSI6ICJeNy4xLjciLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjAuMCIsCi0gICAgICAgICJiYWJlbC1wcmVzZXQtamVzdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wbHVnaW4taXN0YW5idWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLWlzdGFuYnVsLy0vYmFiZWwtcGx1Z2luLWlzdGFuYnVsLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BRjU1clpYcGU3dHJtRXlsYmFFMUd2NTR3bjZyd1UwM2FwdHZSb1ZJR1A4WXlrb1N4cWRWTFYxVGZ3ZmxCQ0UvUXRIbXF0UDhTV2xURU5xYks4R0NTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjAuMCIsCi0gICAgICAgICJAaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWciOiAiXjEuMC4wIiwKLSAgICAgICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6ICJeMC4xLjIiLAotICAgICAgICAiaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiAiXjQuMC4wIiwKLSAgICAgICAgInRlc3QtZXhjbHVkZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXBsdWdpbi1qZXN0LWhvaXN0Ly0vYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QTzl0MDY5N2xOVG1jRUhINjltZHRZaU9Ja2tPbGo5ZnlTcWZPM0sxZUNjZElTZXZMQUUweFk1OVZMTFVqMFNvaVBpVFgvSlUyQ1lGcElMeWRVYTVMdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4zLjMiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjMuMyIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMC4wIiwKLSAgICAgICAgIkB0eXBlcy9iYWJlbF9fdHJhdmVyc2UiOiAiXjcuMC42IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheC8tL2JhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NN0xRMGJ4YXJreFFvTit2ejVhSlBzTEJuNzduOFFnVEZtbzhXSzAvNDRhdUsyeGxDWHJZY1V4SEZ4Z1U3cVc1WXp3L0NqbUxSSzJ1SnphQ2Q3THZxUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWFzeW5jLWdlbmVyYXRvcnMiOiAiXjcuOC40IiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWJpZ2ludCI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWpzb24tc3RyaW5ncyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbG9naWNhbC1hc3NpZ25tZW50LW9wZXJhdG9ycyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvciI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZyI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtdG9wLWxldmVsLWF3YWl0IjogIl43LjguMyIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFiZWwtcHJlc2V0LWplc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhYmVsLXByZXNldC1qZXN0Ly0vYmFiZWwtcHJlc2V0LWplc3QtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZdmR0bFZtOXQzazc3N2M1TlBRSXY2Y3hGRkZhcHlzMjVIaVVtdVNnSHdJWmhmaWZ3ZVI1YzVTZjVud0UzTUFiZnUzMjdDWVN2cHM4WXg2QU5MeWxlUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IjogIl4yNi42LjIiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWxhbmNlZC1tYXRjaC8tL2JhbGFuY2VkLW1hdGNoLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zb1NlVU8wVE1WNjdoTjFBbWJYc0s0eWFxVTd0amlIbGJ4UkRaT3BIMEtXOStDZVg0YlJBYVgwQW54dDB0eDJNcnBScFd3UWFQd0lsSVNFSmhZVTVQdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Jhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjExLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jhc2UvLS9iYXNlLTAuMTEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNVQ2UDR4UGdwcDBZREZ2U1d3RVo0Tm9FM2FNNFFCUVhEem1WYnJhQ2tGajh6SE0rbWJhOFN5cUI1RGJaV3lSN21ZSG82WTdCZFFvM01vQTRtMFRlUWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjYWNoZS1iYXNlIjogIl4xLjAuMSIsCi0gICAgICAgICJjbGFzcy11dGlscyI6ICJeMC4zLjUiLAotICAgICAgICAiY29tcG9uZW50LWVtaXR0ZXIiOiAiXjEuMi4xIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4xIiwKLSAgICAgICAgIm1peGluLWRlZXAiOiAiXjEuMi4wIiwKLSAgICAgICAgInBhc2NhbGNhc2UiOiAiXjAuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYmFzZS9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1wcm9wZXJ0eS8tL2RlZmluZS1wcm9wZXJ0eS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWRwNjZyejlLWTZyVHI1Nk5NRXlidm5tL3NPWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZGVzY3JpcHRvciI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9icmFjZS1leHBhbnNpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMTEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlLWV4cGFuc2lvbi8tL2JyYWNlLWV4cGFuc2lvbi0xLjEuMTEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWlDdVBIREZnckhYN0gydkVJLzV4cHowN3pTSEIwMFRwdWdxaG1ZdFZtTU82NTE4bUN1Uk1vT1lGbGRFQmwwZzE4N3Vmb3pkYUhnV0tjWUZiNjFxR2lBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYmFsYW5jZWQtbWF0Y2giOiAiXjEuMC4wIiwKLSAgICAgICAgImNvbmNhdC1tYXAiOiAiMC4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JyYWNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZXMvLS9icmFjZXMtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWI4dW0rTDFSek0zV0RTenZobTZnSXoxeWZUYkJ0NllUbGNFS0F2c21xQ1paRnc0Nno2MjZsVmo5ajF5RVBXMzNINUgrbEJRcFpNUDFrOGwrNzhIYTBBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmlsbC1yYW5nZSI6ICJeNy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvYnJvd3Nlci1wcm9jZXNzLWhydGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2VyLXByb2Nlc3MtaHJ0aW1lLy0vYnJvd3Nlci1wcm9jZXNzLWhydGltZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOW81VWVjSTNHaGtwTTZEclhyNjlQYmxJdVd4UEtrOVkwakhCUmhkb2NaMnk3WUVDQkZDc0htNzlQcjNPeVIyQXZqaERrYWJGSmFESk1ZUmF6SGdzb3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9icm93c2Vyc2xpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE2LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb3dzZXJzbGlzdC8tL2Jyb3dzZXJzbGlzdC00LjE2LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdzcGsvUHFPKzRXOXFwNWlVVEpzYTFCL1FyWW4xa2VOQ2NFUDVPdlA3V0J3VDRLYURseTB1T05ZbUM2WGEzWjVJcW5VZ1MwS2NnTFl1MWw3NHgwWlhRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDEyMTkiLAotICAgICAgICAiY29sb3JldHRlIjogIl4xLjIuMiIsCi0gICAgICAgICJlbGVjdHJvbi10by1jaHJvbWl1bSI6ICJeMS4zLjcyMyIsCi0gICAgICAgICJlc2NhbGFkZSI6ICJeMy4xLjEiLAotICAgICAgICAibm9kZS1yZWxlYXNlcyI6ICJeMS4xLjcxIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJicm93c2Vyc2xpc3QiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICJeNiB8fCBeNyB8fCBeOCB8fCBeOSB8fCBeMTAgfHwgXjExIHx8IF4xMiB8fCA+PTEzLjciCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ0eXBlIjogIm9wZW5jb2xsZWN0aXZlIiwKLSAgICAgICAgInVybCI6ICJodHRwczovL29wZW5jb2xsZWN0aXZlLmNvbS9icm93c2Vyc2xpc3QiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2JzLWxvZ2dlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icy1sb2dnZXIvLS9icy1sb2dnZXItMC4yLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBkOERDb3htYmdjN2h5UEtPdnh0cU5jallvT3NBQlBRZGNDVWpHcDNkNDJWUjJDWDFPUmhrMkE4N29xcXU1UjFrays3Nm5zeFp1cGtteWQrTVZ0Q29nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMi54IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ic2VyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JzZXIvLS9ic2VyLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nUXhUTkUvR0FmSUlybUhMVUUzb0p5cDVGTzZIUkJmaGpudzQvd01tQTYzWkdESm5XQm1nWS9seVFCcG5EVWtHbUFoYlNlMzl0eDJkL2lUT0FmZ2x3UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm5vZGUtaW50NjQiOiAiXjAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9idWZmZXItZnJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9idWZmZXItZnJvbS8tL2J1ZmZlci1mcm9tLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NUWNYRVViQ0t0RW83YmhxRXM2NTYwSHlkNFhhb3ZabE8vazlWM2hqVlVGL3p3VzdLQlZkU0s0Z0l0L2J6d1M5TWJSNXFvYitGNWp1c1pzYjBZUUsyQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2J1aWx0aW4tbW9kdWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9idWlsdGluLW1vZHVsZXMvLS9idWlsdGluLW1vZHVsZXMtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1KdzhIYkZweXdDOWJaYVI5K1V4ZjQ2SjRpUzg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYWNoZS1iYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhY2hlLWJhc2UvLS9jYWNoZS1iYXNlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BS2NkVG5GU1dBVGQ1L0dDUFJ4cjJDaHdJSjg1Q2V5ckV5alJIbEt4UTU2ZDRYSk1HeW0wdUFpS24weGJMT0dPbDMreVJwT1RpNDg0ZFZDRWM1QVV6UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbGxlY3Rpb24tdmlzaXQiOiAiXjEuMC4wIiwKLSAgICAgICAgImNvbXBvbmVudC1lbWl0dGVyIjogIl4xLjIuMSIsCi0gICAgICAgICJnZXQtdmFsdWUiOiAiXjIuMC42IiwKLSAgICAgICAgImhhcy12YWx1ZSI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4xIiwKLSAgICAgICAgInNldC12YWx1ZSI6ICJeMi4wLjAiLAotICAgICAgICAidG8tb2JqZWN0LXBhdGgiOiAiXjAuMy4wIiwKLSAgICAgICAgInVuaW9uLXZhbHVlIjogIl4xLjAuMCIsCi0gICAgICAgICJ1bnNldC12YWx1ZSI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYWxsc2l0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FsbHNpdGVzLy0vY2FsbHNpdGVzLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QOEJqQXNYdlpTK1ZJRFVJMTFoSENRRXY3NFlUNjdZVWk1SkpGTldJcUwyMzVzQm1qWDQrcXg5TXV2bHM1aXZ5TkVOY3R4NDZ4UUxRM2FUdUU3c3NhUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2FtZWxjYXNlIjogewotICAgICAgInZlcnNpb24iOiAiNS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbWVsY2FzZS8tL2NhbWVsY2FzZS01LjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTDI4U1RCMTcwbndXUzYzVWp0bEVPRTNkbGRRQXBhSlhaa09JMXVNRmZ6ZjNyUnVQZWdIYUhlc3llZStZeFErVzZTdlJEUVY2VXJkT2RSaVIxNTN3Smc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2Nhbml1c2UtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4zMDAwMTIzMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FuaXVzZS1saXRlLy0vY2FuaXVzZS1saXRlLTEuMC4zMDAwMTIzMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQm1rYnhMZlN0cWlQQTdJRXpRcElrMFVGWkZmM0E0RTZmempQSjZPUitiRkMyTDhFUzlKOHpHQS9hc29pNDdwOFhEVmtlditXSm8ySTJOYzhjLzM0WWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidHlwZSI6ICJvcGVuY29sbGVjdGl2ZSIsCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9vcGVuY29sbGVjdGl2ZS5jb20vYnJvd3NlcnNsaXN0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jYXB0dXJlLWV4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FwdHVyZS1leGl0Ly0vY2FwdHVyZS1leGl0LTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QaVQvaFFtVG9uSGhsL0hGR04rTHgzSkpVem5yVllKMytBUXNudGhuZVpidlc3eCtmMDhUazd5TEpUTEVPVXZCVGJkdUxlZUJreEVhWVhVT1VyUnE2Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJzdnAiOiAiXjQuOC40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI2LiogfHwgOC4qIHx8ID49IDEwLioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NoYWxrIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstNC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRpSHpkREt4Y1UrYkFzVWJvSExQRURRaXcwcUVlMHFkN1NZVW4zSGdjRmxXZ2JEY2ZMR3N3T0hZZUdySEt6Rzl6NlVZZjAxZDlWRk1mWnhQTTF4WlNnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMS4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGs/c3BvbnNvcj0xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jaGFyLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYXItcmVnZXgvLS9jaGFyLXJlZ2V4LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rV1dYenR2WjVTQlFWK2VSZ0tGZWg4cTVzTHVaWTIrOFdVSXpseFdWVGcrb0d3WTE0cXlseDFLYkt6SGQ4UDZaWWtBZzB4eUlEVTlKTUhoeUpNWjFqdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NpLWluZm8iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2ktaW5mby8tL2NpLWluZm8tMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV0SzdFdHJaME4rT0xGTXRodHFPajRmSTJKZWI4OEM0Q0FaUHUyNUxEVlVnWEowQTNKczRQTUdxcm4wSlUxVzBNaDEvWjh3WnpZUHhxVXJYZUJib0NRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2pzLW1vZHVsZS1sZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9janMtbW9kdWxlLWxleGVyLy0vY2pzLW1vZHVsZS1sZXhlci0wLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdWMyVml4MWZyVGZudXp4eHUxSHA0a3RTdk0zUWFJNG9YbDRaVXFMMXdqVHUvQkdraTlUckNXb3FMVGcvZHJSMUt3QUVhclh1UkZDRzJTdnIxR3hQRnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGFzcy11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jbGFzcy11dGlscy8tL2NsYXNzLXV0aWxzLTAuMy42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xT2hQYS9GajdzNlRZOEg4ZXNHdTVRTnBNTVF4ejc5aCt1cnpyTllONm1uKzlCbnhsREdmNVFaK1hlQ0RzeFNqUHFzU1I1NlhPWk9KbXBldXJuTE1lZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFyci11bmlvbiI6ICJeMy4xLjAiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjAiLAotICAgICAgICAic3RhdGljLWV4dGVuZCI6ICJeMC4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGFzcy11dGlscy9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1wcm9wZXJ0eS8tL2RlZmluZS1wcm9wZXJ0eS0wLjIuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXcxc2UrUmpzUEprUG1sdkZlK0JLck94Y2dSWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZGVzY3JpcHRvciI6ICJeMC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGFzcy11dGlscy9ub2RlX21vZHVsZXMvaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLy0vaXMtYWNjZXNzb3ItZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXFlRXNzNjZOaDJjbjd1ODRRL2lnaVh0Y21OWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGFzcy11dGlscy9ub2RlX21vZHVsZXMvaXMtYWNjZXNzb3ItZGVzY3JpcHRvci9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NsYXNzLXV0aWxzL25vZGVfbW9kdWxlcy9pcy1kYXRhLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0YS1kZXNjcmlwdG9yLy0vaXMtZGF0YS1kZXNjcmlwdG9yLTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQzE3bVNEaU9MSVlDZ3VlVDhZVnY3RDh3RzFZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NsYXNzLXV0aWxzL25vZGVfbW9kdWxlcy9pcy1kYXRhLWRlc2NyaXB0b3Ivbm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbGFzcy11dGlscy9ub2RlX21vZHVsZXMvaXMtZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kZXNjcmlwdG9yLy0vaXMtZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXZEWXIwU0IzRHdPOXpzTW92MGdLQ0VTRllxQ25FNGhxLzR6M1RkVWx1a0V5NXQ5QzBZUnE3SExyc041Mk5BY3FYS2FlcGVDRDBuK0IwYXJuVkczSGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogIl4wLjEuNiIsCi0gICAgICAgICJpcy1kYXRhLWRlc2NyaXB0b3IiOiAiXjAuMS40IiwKLSAgICAgICAgImtpbmQtb2YiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY2xhc3MtdXRpbHMvbm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtNS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5HRUVybkg2RjJ2VXVYRGgrT2xiY0tXNy93T2NmZFJIYVo3Vld0cUN6dGZIcmkvKytZS21QNTFPZFdlR1B1cUNPYmE2a2syT1RlNWQwMlZtVEI4MFB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NsaXVpIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaXVpLy0vY2xpdWktNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ2d2JndG9DWHZBenN0N1FnWHhKWXFQdDB1c0VmYmdRZGZ0RVBiTEwvY3Z2NkhQRTVWZ3ZxQ3VBSURSME5nVTUyZHM2ckZ3cXJnYWtOTHJIRWpDYnJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl40LjIuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIsCi0gICAgICAgICJ3cmFwLWFuc2kiOiAiXjYuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jby8tL2NvLTQuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtYnFhOTg5aFRybFRNdU9SNytndnorUU1mc1lRPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAiaW9qcyI6ICI+PSAxLjAuMCIsCi0gICAgICAgICJub2RlIjogIj49IDAuMTIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29sbGVjdC12OC1jb3ZlcmFnZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xsZWN0LXY4LWNvdmVyYWdlLy0vY29sbGVjdC12OC1jb3ZlcmFnZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUJQdGxqZkNOY1RLTkF0bzBLRXREZlozcXpqSnZxRTNhVEdac2JoalNCbG9ycXBYSmxhV1d0UE8zNUQrWkltb0MzS1dlalg2NG8reVBHeGhXU1R6Zmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2xsZWN0aW9uLXZpc2l0IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbGxlY3Rpb24tdmlzaXQvLS9jb2xsZWN0aW9uLXZpc2l0LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUzhBM1BCWkx3eWtiVFRhTWdwenhxQXBaM0tBPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtYXAtdmlzaXQiOiAiXjEuMC4wIiwKLSAgICAgICAgIm9iamVjdC12aXNpdCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SUkVDUHNqN2l1L3hiNW9LWWNzRkhTcHBGTm5zai81Mk9WVFJLYjR6UDVvblh3VkYzelZtbVRvTmNPZkdDK0NSRHBmSy9VNTg0Zk1nMzhaSENhRWxLUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAifjEuMS40IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jb2xvci1uYW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLW5hbWUvLS9jb2xvci1uYW1lLTEuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kT3krM0F1VzNhMndOYlpISXVNWnBUY2dqR3VMVS91QkwvdWJjWkY5T1hiRG84ZmY0Tzh5VnA1QmYwZWZTOHVFb1lvNXE0Rng3ZFk5T2dRR1hnQXNRQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbG9yZXR0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvcmV0dGUvLS9jb2xvcmV0dGUtMS4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1LR016eWZldXV0Qy9aSjFjYmE5TnFjTnBmZXFNVWNZbXlGMVpGWTYvQ243Q05TQUt4NmErczQ4c3FMcXlBaVp1YVAyVGNxTWhvbytkbHdGblZ4VDl3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29tYmluZWQtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbWJpbmVkLXN0cmVhbS8tL2NvbWJpbmVkLXN0cmVhbS0xLjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRlFONE1SZnVKZUhmN2NCYkJNSkZYaEtTRHErMmtBQXJCbG1SQnZjdkZFNUJCMUhaS1h0U0ZBU0RoZGx6OXpPWXd4aDhsRGRudm1NT2UvKzVjZG9FZGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWxheWVkLXN0cmVhbSI6ICJ+MS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29tbWFuZGVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21tYW5kZXIvLS9jb21tYW5kZXItMi4yMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HcFZrbU04dkYydlFVa2oyTHZabUQzNUp4ZUpPTEN3SjljVWt1Z3lrMm51aGJ2MyttSnZwTFlZdCswK1VTTXhFK29qK2V5L2xKRW5oWnc3NXgvT01jUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvbXBvbmVudC1lbWl0dGVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbXBvbmVudC1lbWl0dGVyLy0vY29tcG9uZW50LWVtaXR0ZXItMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkM3NlNlFCK3NPMVR3cVpqc2NRcnVycEVQSWZPMC95WW5TaW42US9yRDNtT3V0SHZVckNBaEp1YjNyOTB1TmIrU0VTQnVFMFFZb0I5MFlkZmF0c1JnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29uY2F0LW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25jYXQtbWFwLy0vY29uY2F0LW1hcC0wLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTJLbHIxMy9XamZkNU9uTURhanVnMVVCZFIzcz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY29udmVydC1zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMS43LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnZlcnQtc291cmNlLW1hcC8tL2NvbnZlcnQtc291cmNlLW1hcC0xLjcuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNEZKa1h6S1hFREIxc25DRlpsTFA0Z3BDM0pJTGljQ3BHYnpHOWY5Rzd0R3FHQ3pFVFEyaFdQcmNpbkE5b1U0d3RmMmJpVWFFSDUwNjVVbk1lUjMzb0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzYWZlLWJ1ZmZlciI6ICJ+NS4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2NvcHktZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3B5LWRlc2NyaXB0b3IvLS9jb3B5LWRlc2NyaXB0b3ItMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1aMjl1czhPWmw4THVHc09wSlAxaEpIU1BWNDA9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jcm9zcy1zcGF3biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1zcGF3bi8tL2Nyb3NzLXNwYXduLTcuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pUkRQSktVUFZFTkQ3ZEhQTzhya2JPblBweUR5Z2NERnRXanBlV05DZ3k4V1AyclhjeFhMOFRza1JlUWw2T3JCMkc3K1VKcmFnczFxMTVGdWRjN0c2dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBhdGgta2V5IjogIl4zLjEuMCIsCi0gICAgICAgICJzaGViYW5nLWNvbW1hbmQiOiAiXjIuMC4wIiwKLSAgICAgICAgIndoaWNoIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvY3Nzb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Nzb20vLS9jc3NvbS0wLjQuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcDNwdlU3cjFNeXlxYlRrK1diTkpJZ0pqRzJWbVRJYUIxMHJJOTNMelZQcm1ESktrektZTXR4eHlBdlFYUi9OUzZvdHV6dmVJNys3QkJxM1NqQlMybXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3NzdHlsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NzdHlsZS8tL2Nzc3N0eWxlLTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BWkw2N2Fia1V6SXV2Y0hxazdjMDljZXpwR05jeFV4VTRJb2kvMDV4SGs0RFFlVGtXbUdZZnRJRTZjdFU2QUV0K0duNG4xbERTdE90ajdGS3ljUDcxQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNzc29tIjogIn4wLjMuNiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9jc3NzdHlsZS9ub2RlX21vZHVsZXMvY3Nzb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Nzb20vLS9jc3NvbS0wLjMuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjB0R0hiZmVnYmhQSnB4cGlCUFUyc0NraWdBcXRNOU8xMjFsZTZiYk9sZ3lWK055R3lDbVZmSjZRVzllUmp6OENwTmZXRU9ZQklNSUdSWWtMd3NJWWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kYXRhLXVybHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGF0YS11cmxzLy0vZGF0YS11cmxzLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YNWVXVFNYTy9CSm1wZElLQ1J1S1VnU0NnQU4wT3dsaVZLM3lQS2J3SVdVMVRkdzVCUmFqeGx6TWlkdmgrZ3drbzlBZlE5eklqNTJwekY5MVEzWUF2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFiYWIiOiAiXjIuMC4zIiwKLSAgICAgICAgIndoYXR3Zy1taW1ldHlwZSI6ICJeMi4zLjAiLAotICAgICAgICAid2hhdHdnLXVybCI6ICJeOC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctNC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRvRXdkdm00UENlSzRLM1JRTjJaQzJCWVVCYXh3TEFSQ3FabU1qdEY4YTUxSjJSYjB4cFZsb0ZSbkNPRHdxanB3bkFvYW80cGVsTjhsM1JKZHYzZ1JRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXMiOiAiMi4xLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49Ni4wIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzTWV0YSI6IHsKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWNhbWVsaXplIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY2FtZWxpemUvLS9kZWNhbWVsaXplLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOWxOTkZSU0NhYklEVXVlKzRtOVFINW9aRXBBPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVjaW1hbC5qcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEwLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVjaW1hbC5qcy8tL2RlY2ltYWwuanMtMTAuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LYUw3KzZGdzZpNUEyWFNuc2JobS82QitOdUVBN1RaNHZxeG5kNXRYejlzYkt0ck45U3JqOGFiNHZLVmRLOFlBcVpPOVAxa2c0NVk2WUxvZHVQZitrdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RlY29kZS11cmktY29tcG9uZW50IjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY29kZS11cmktY29tcG9uZW50Ly0vZGVjb2RlLXVyaS1jb21wb25lbnQtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02emtUTXpSWWQxeTRUTkdoK3VCaUVHdTRkVVU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVlcC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwLWlzLy0vZGVlcC1pcy0wLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXMyblcrMTI4RSs3UFVrK1JzSEQrN2NOWHp6UT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVlcG1lcmdlIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZXBtZXJnZS8tL2RlZXBtZXJnZS00LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRkozVWdJNGdJbCtQSFptNTNrbnN1U0ZwRStuRVNNcjdNNHY5UWNnQjdTNjNLai82V3FNaUZRSnBCQll6MVB0KzY2YlpwUDNRN0x5ZTBPbzlNUEtFZGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1wcm9wZXJ0eS8tL2RlZmluZS1wcm9wZXJ0eS0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItandLMlVWNGNuUHBiY0c3K1ZSQVJLVFpQVVdvd3dYQThiekg1TlA2dWQwb2VBeHlZUHVHWlVBQzdoTXVncENkejRCZVNabDJEbDlrNjZDSEovNDZaWVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4xLjAuMiIsCi0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWxheWVkLXN0cmVhbS8tL2RlbGF5ZWQtc3RyZWFtLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtM3pyaG1heXQrMzFFQ3FyZ3NwNGljckpPeGhrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kZXRlY3QtbmV3bGluZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZXRlY3QtbmV3bGluZS8tL2RldGVjdC1uZXdsaW5lLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UTHoreC92RVhtL1k3UDd3bjFFSkZOTHhZcFVENFRnTW9zeFk2ZkFWSlVuSk1idXBIQk9uY3h5V1VHOU9wVGFIOUVCRDd1Rkk1TGZFZ21NT2M1NERzQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kaWZmLy0vZGlmZi00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNThsbXhLU0E0Qk55THorSEhNVXpsT0VwZzA5RlYrZXY2Wk1lM3ZKaWhnZHh6Z2N3WjhWb0VFUG1BTENaRzlMbXFmVm9OTU1LcHR0SVlUVkc2dURZN0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMy4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9kaWZmLXNlcXVlbmNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGlmZi1zZXF1ZW5jZXMvLS9kaWZmLXNlcXVlbmNlcy0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU12L1REYTNuWjlzYmM1c29LK09vQTc0QnNTM21MMzd5aXhDdlVBUWtpdUE0V3o2WXR3UC9LNDduMnJ2Mm92ekhadm9pUWVBNUZUUU9zY2hLa0V3QjBRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZG9tZXhjZXB0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvbWV4Y2VwdGlvbi8tL2RvbWV4Y2VwdGlvbi0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteXhKMm1GeS9zaWJWUWx1NXFIak9rZjlKM0s2emdtQ3hnSjk0dTJFZHZET1YwOUgrMzJMdFJzd0VjVXNtVVdONzJwVkxPRW5UU1JhSVZWelZRZ1MwZGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2RvbWV4Y2VwdGlvbi9ub2RlX21vZHVsZXMvd2ViaWRsLWNvbnZlcnNpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYmlkbC1jb252ZXJzaW9ucy8tL3dlYmlkbC1jb252ZXJzaW9ucy01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVmxad0tQQ2tZS3hRZ2VTYkg1RXluZ09tUnA3V3c3STlyUUxFUkVUdGY1b2ZkOXBHZXN3V2lPdG9ncEVPODUwanppUFJhcnJlR3huNVFJaVRxcGIyd0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VsZWN0cm9uLXRvLWNocm9taXVtIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjc0MyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxlY3Ryb24tdG8tY2hyb21pdW0vLS9lbGVjdHJvbi10by1jaHJvbWl1bS0xLjMuNzQzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LMndYZm85aVpRek5KTng2NytQbGQwRFJGKzliWWluajYyZ1hDZGdQaGN1MXZpZHdWdUxQSFFQUEZuQ2RPNTVualdpZ1hYcGZCaVQ5MGpHVVBidzhaZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VtaXR0ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtaXR0ZXJ5Ly0vZW1pdHRlcnktMC43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUE4T0c1U1IvaWozU3NKZFdESmRra1NZVWpRZENVeDZBUFFYZW0wU2FFZVBCU1JnNGV5bUdZd0JrS28xWTZEVSthZi9KbjJkQlFxREJ2am5yOVZpOG5RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2VtaXR0ZXJ5P3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZW1vamktcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZW1vamktcmVnZXgvLS9lbW9qaS1yZWdleC04LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVNqWXpjV05PQTBld0FIcHowTXhwWUZ2d2c2eWp5MU5HM3h0ZW9xejY0NFZDby9SUGducjEvR0d0K2ljM2lKVHpROEV1M1RkTTE0U2F3blZVbUdFNkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lbmQtb2Ytc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuZC1vZi1zdHJlYW0vLS9lbmQtb2Ytc3RyZWFtLTEuNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rdXcxaW5JSFZQUW9hVnVIelJ5WGQyMWljTStjbnQ0Q3pENXJXK05DMXdqT1VTVE9zK1RlN0ZPdjdBaE43dlM5eC9vSXloTFA1UFIxSCtwaFFBSHU1UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm9uY2UiOiAiXjEuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lcnJvci1leCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lcnJvci1leC8tL2Vycm9yLWV4LTEuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03ZEZITm1xZUZTRXQyWkJzQ3Jpb3JLbm4zWjJwaitmZDlrbUk2UW9XdzQvL0RMK2ljRUJmYzBVN3FKQ2lzcXJUc0tUanc0Zk5GeTJwVzlPcVN0RDg0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWFycmF5aXNoIjogIl4wLjIuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNjYWxhZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYWxhZGUvLS9lc2NhbGFkZS0zLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazBlcjJnVWtMZjhPMHpLSmlBaG1rVG5KbFR2SU5Hdjd5Z0ROUGJlSXNYL1RKakdKWkh1aDlCMlV4YnNhRWttbEVvOU1maHJTem1oSWxoUmxJMkdYbnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVwemNMQ1hvbFVXY051NUh0Vk1IWWRYSmpBcmpzRjlDMGFObnF1WllZNHVXL1Z1MG1peTVZb1d2YlYzNDVIYXVWdmNBVW5wUnVoTU1jcVRjR09ZMit3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9lc2NvZGVnZW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjb2RlZ2VuLy0vZXNjb2RlZ2VuLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tbUhLeXMvQzhCRlVHSStNQVdOY1NZb09SWUxNZFB6anJrbmQyVmMrYlVzak41YlhjcjhFaHJOQitVVHFmTDF5M0k5YzRmdzJpaGd0TVBRTEJSaVF4dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzcHJpbWEiOiAiXjQuMC4xIiwKLSAgICAgICAgImVzdHJhdmVyc2UiOiAiXjUuMi4wIiwKLSAgICAgICAgImVzdXRpbHMiOiAiXjIuMC4yIiwKLSAgICAgICAgIm9wdGlvbmF0b3IiOiAiXjAuOC4xIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJlc2NvZGVnZW4iOiAiYmluL2VzY29kZWdlbi5qcyIsCi0gICAgICAgICJlc2dlbmVyYXRlIjogImJpbi9lc2dlbmVyYXRlLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuMCIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzb3VyY2UtbWFwIjogIn4wLjYuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXNwcmltYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUd1RkZ3N1VwZGErZzRwK1FIdm5XMFJ5VFgvU1ZlSkJETS9nQ3RNQVJPMGNMdVQySGNFS25UUHZoalY2YUdlcXJDQi9zYk5vcDBLc3ptMGpzYVdVNEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJlc3BhcnNlIjogImJpbi9lc3BhcnNlLmpzIiwKLSAgICAgICAgImVzdmFsaWRhdGUiOiAiYmluL2VzdmFsaWRhdGUuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXN0cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3RyYXZlcnNlLy0vZXN0cmF2ZXJzZS01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQnhiTkdHTm0wUnlSWXZVZEhwSXd2OUlXemVNOVhDbGJPeHdvQVR1RmRPRTdaRTZ3SEwrSFE1VDhob1BNK3pIdm1LenpzRXFoZ3kwR3JRNVgxM2FmaVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXN1dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3V0aWxzLy0vZXN1dGlscy0yLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1ZzY3FYazRPQ3A2OFNaMGRrZ0VLVmk2LzhpajMwMEtCV1RKcTMyUC9kWWVXVFN3SzQxV3lUeGFsTjFlUm1BNVo5VVUvTFg5RDdGV1NtVjlTQVl4Nmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhlYy1zaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjLXNoLy0vZXhlYy1zaC0wLjMuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItblFuK2hJM3lwK29EMGh1WWhLd3ZZSTMyK0pGZXErWGtOY0QxR0FvM1kvTWp4c2ZWR21ycnpybnpqV2lOWTZmK3BVQ1A0NDBmVGhzRmg1Z1pyUkFVL3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leGVjYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjYS8tL2V4ZWNhLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qNVcwLy9XN2Y4VXhBbjhoWFZud0c4dEx3ZGlVeTRGSkxjU3VwQ2c2bWFCWVpEcHlCdlRBcEs3S3l1STRiS2o4S09oMXIyWUgrNnVjdVl0SnYxYlRaQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNyb3NzLXNwYXduIjogIl43LjAuMCIsCi0gICAgICAgICJnZXQtc3RyZWFtIjogIl41LjAuMCIsCi0gICAgICAgICJodW1hbi1zaWduYWxzIjogIl4xLjEuMSIsCi0gICAgICAgICJpcy1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAibnBtLXJ1bi1wYXRoIjogIl40LjAuMCIsCi0gICAgICAgICJvbmV0aW1lIjogIl41LjEuMCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjIiLAotICAgICAgICAic3RyaXAtZmluYWwtbmV3bGluZSI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9leGVjYT9zcG9uc29yPTEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhpdC8tL2V4aXQtMC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CakpqajQySGZNZ2hCOU1LRC84YUY4dWh6UXc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBhbmQtYnJhY2tldHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhwYW5kLWJyYWNrZXRzLy0vZXhwYW5kLWJyYWNrZXRzLTIuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdDNjMTR4WE9NUGEyNy9ENE93UVZHaUpFbGlJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeMi4zLjMiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMi4wLjEiLAotICAgICAgICAicG9zaXgtY2hhcmFjdGVyLWNsYXNzZXMiOiAiXjAuMS4wIiwKLSAgICAgICAgInJlZ2V4LW5vdCI6ICJeMS4wLjAiLAotICAgICAgICAic25hcGRyYWdvbiI6ICJeMC44LjEiLAotICAgICAgICAidG8tcmVnZXgiOiAiXjMuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwYW5kLWJyYWNrZXRzL25vZGVfbW9kdWxlcy9kZWJ1ZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iQzdFbHJkSmFKblBiQVArMUVvdFl2cVpzYjNlY2w1d2k2QmZpNkJKVFVjTm93cDZjdnNwZzBqWHpuUlRLRGptL0U3QWRnRkJWZUFQVk1OY0tHc0hNQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1zIjogIjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBhbmQtYnJhY2tldHMvbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMC4yLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS13MXNlK1Jqc1BKa1BtbHZGZStCS3JPeGNnUlk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjAuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwYW5kLWJyYWNrZXRzL25vZGVfbW9kdWxlcy9leHRlbmQtc2hhbGxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHRlbmQtc2hhbGxvdy8tL2V4dGVuZC1zaGFsbG93LTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVWE5OVlVclpxZllRNmh1dnU1aWRheHhXaVE4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cGFuZC1icmFja2V0cy9ub2RlX21vZHVsZXMvaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLy0vaXMtYWNjZXNzb3ItZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXFlRXNzNjZOaDJjbjd1ODRRL2lnaVh0Y21OWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBhbmQtYnJhY2tldHMvbm9kZV9tb2R1bGVzL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3Ivbm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBhbmQtYnJhY2tldHMvbm9kZV9tb2R1bGVzL2lzLWRhdGEtZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kYXRhLWRlc2NyaXB0b3IvLS9pcy1kYXRhLWRlc2NyaXB0b3ItMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DMTdtU0RpT0xJWUNndWVUOFlWdjdEOHdHMVk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwYW5kLWJyYWNrZXRzL25vZGVfbW9kdWxlcy9pcy1kYXRhLWRlc2NyaXB0b3Ivbm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBhbmQtYnJhY2tldHMvbm9kZV9tb2R1bGVzL2lzLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGVzY3JpcHRvci8tL2lzLWRlc2NyaXB0b3ItMC4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2RFlyMFNCM0R3Tzl6c01vdjBnS0NFU0ZZcUNuRTRocS80ejNUZFVsdWtFeTV0OUMwWVJxN0hMcnNONTJOQWNxWEthZXBlQ0QwbitCMGFyblZHM0hnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6ICJeMC4xLjYiLAotICAgICAgICAiaXMtZGF0YS1kZXNjcmlwdG9yIjogIl4wLjEuNCIsCi0gICAgICAgICJraW5kLW9mIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cGFuZC1icmFja2V0cy9ub2RlX21vZHVsZXMvaXMtZXh0ZW5kYWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRlbmRhYmxlLy0vaXMtZXh0ZW5kYWJsZS0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVlyRVE0b21rY1VHT1BzTnFZWDFITGpBZC9Jaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4cGFuZC1icmFja2V0cy9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdFRXJuSDZGMnZVdVhEaCtPbGJjS1c3L3dPY2ZkUkhhWjdWV3RxQ3p0ZkhyaS8rK1lLbVA1MU9kV2VHUHVxQ09iYTZrazJPVGU1ZDAyVm1UQjgwUHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXhwYW5kLWJyYWNrZXRzL25vZGVfbW9kdWxlcy9tcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHBlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGVjdC8tL2V4cGVjdC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTkvaGxPQmtRbDJsL1BMSEp4Nkpqb0RGNnhQS2NKRXNVbFdLYjIzcktFN0t6ZURxVVpLWEtOTVcyN0tJdWU1Sk1kQlY5SGdtb0pQY2M4SHRPODV0OUlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjYuMy4wIiwKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4dGVuZC1zaGFsbG93IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGVuZC1zaGFsbG93Ly0vZXh0ZW5kLXNoYWxsb3ctMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1KcWNhcndjN09mc2hKeGNuUmhNY0p3UUNqYmc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFzc2lnbi1zeW1ib2xzIjogIl4xLjAuMCIsCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4xLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4dGdsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0Z2xvYi8tL2V4dGdsb2ItMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5tYjZRWGtFTHN1QnIyNENKU2tpbG82VUhIZ2Jla0s1VWlaZ2ZFNlVIRDNFYjI3WUM2b0QrYmhjVCt0SjZjbDhkbXNnZFF4bldsY3J5OGtzQklCTHB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJyYXktdW5pcXVlIjogIl4wLjMuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiAiXjEuMC4wIiwKLSAgICAgICAgImV4cGFuZC1icmFja2V0cyI6ICJeMi4xLjQiLAotICAgICAgICAiZXh0ZW5kLXNoYWxsb3ciOiAiXjIuMC4xIiwKLSAgICAgICAgImZyYWdtZW50LWNhY2hlIjogIl4wLjIuMSIsCi0gICAgICAgICJyZWdleC1ub3QiOiAiXjEuMC4wIiwKLSAgICAgICAgInNuYXBkcmFnb24iOiAiXjAuOC4xIiwKLSAgICAgICAgInRvLXJlZ2V4IjogIl4zLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2V4dGdsb2Ivbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kcDY2cno5S1k2clRyNTZOTUV5YnZubS9zT1k9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZXh0Z2xvYi9ub2RlX21vZHVsZXMvZXh0ZW5kLXNoYWxsb3ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0ZW5kLXNoYWxsb3cvLS9leHRlbmQtc2hhbGxvdy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVVhOTlZVXJacWZZUTZodXZ1NWlkYXh4V2lROD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6ICJeMC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9leHRnbG9iL25vZGVfbW9kdWxlcy9pcy1leHRlbmRhYmxlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWXJFUTRvbWtjVUdPUHNOcVlYMUhMakFkL0lrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvLS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGhkL3dGK0xrOThIWm9UQ3RsVnJhSHRmaDVYWWlqSWphbFhjazdzYVV0dWFuU0R5TE14bkhoU1hFREpxSHhEN21zUjhEMHVDbXFsa3dqQ1Y4eHZ3SHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mYXN0LWxldmVuc2h0ZWluIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zhc3QtbGV2ZW5zaHRlaW4vLS9mYXN0LWxldmVuc2h0ZWluLTIuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUFlwY1pvZzZGcU1NcUdRK2hSOFp1cWQ1ZVJjPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mYi13YXRjaG1hbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mYi13YXRjaG1hbi8tL2ZiLXdhdGNobWFuLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ea1BKS1FlWTZrS3dtdU1yZXRCaHI3RzZWb2RyN2JGd0RZVFhJa2ZHMWdqdk5wYXhCVFFWM1BiWGc2YlIxYzFVUDRqUE9YMGpIVWJiSEFOTDl2UmpWZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJzZXIiOiAiMi4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbGwtcmFuZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsbC1yYW5nZS8tL2ZpbGwtcmFuZ2UtNy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFPbzlGK2RNVW1DMkxjYjRCYlZ2bktKeFRQakNtK1JScGU0Z0R1R3J6a0w3bUVWbC9kallTdTJPZFEyUGEzMDJONG9xa1NnOWlyNmphTFdKMlVTVnBRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidG8tcmVnZXgtcmFuZ2UiOiAiXjUuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZpbmQtdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmluZC11cC8tL2ZpbmQtdXAtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBwT3dBZFEvWWxYUTJ2ajhhM2g4SWlwRHVZUmkzd2NlVlFRR1lXeE5JTmNjcTQwQW53N0Jsc0VYQ01idDFadCtPTEE2RnE5c3VJcElXRDBPc25JU2x3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjUuMC4wIiwKLSAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mb3ItaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9yLWluLy0vZm9yLWluLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtZ1FhTktWcUJRdXdLeHliRzRpQU1NUHR0WG9BPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZm9ybS1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zvcm0tZGF0YS8tL2Zvcm0tZGF0YS0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUkhrQkt0TFdVVndkN1NxUkl2Q1pNRXZBTW9HVXAwWFUrc2VRaVplamowQ096M1JJM2hXUDRzQ3YzZ1pXV0xqSlRkN3JHd2NzRjVlS1pHaWkwci9oYmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhc3luY2tpdCI6ICJeMC40LjAiLAotICAgICAgICAiY29tYmluZWQtc3RyZWFtIjogIl4xLjAuOCIsCi0gICAgICAgICJtaW1lLXR5cGVzIjogIl4yLjEuMTIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ZyYWdtZW50LWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZyYWdtZW50LWNhY2hlLy0vZnJhZ21lbnQtY2FjaGUtMC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RcEQ2MG44VDZKdm44emVaeHJ4YUNyLy9EUms9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1hcC1jYWNoZSI6ICJeMC4yLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mcy5yZWFscGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mcy5yZWFscGF0aC8tL2ZzLnJlYWxwYXRoLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtRlFTdEpTTVZqS3BBMjBvbmg4c0JRUm1VNms4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mc2V2ZW50cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mc2V2ZW50cy8tL2ZzZXZlbnRzLTIuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14aXFNUVI0eEFlSFR1Qjl1V20rZkZSY0lPZ0tCTWlPQlArZVhpeVQ3anNnVkNxMWJrVnlndDAwb0FTb3dCN0VkdHBPSGFhUGdLdDgxMlA5YWIrRERLQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImhhc0luc3RhbGxTY3JpcHQiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJvcyI6IFsKLSAgICAgICAgImRhcndpbiIKLSAgICAgIF0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiXjguMTYuMCB8fCBeMTAuNi4wIHx8ID49MTEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Z1bmN0aW9uLWJpbmQvLS9mdW5jdGlvbi1iaW5kLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15SW92QXpNWDQ5c0Y4WWw1OGZTQ1dKNXN2U0x1YWliUHhYUUpGTG1CT2JUdUNyME1mMUtpUG9wR005TmlGamlZQkNiZmFhMkZoNmJyZVE2QU5WVEkwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dlbnN5bmMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMC1iZXRhLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dlbnN5bmMvLS9nZW5zeW5jLTEuMC4wLWJldGEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM2hON05hc2tZdk1ETFFZNTVnblczTlErbWVzRUFlcFRxbGcrVkViajd6enFFTUJWTmh6Y0dZWWVxRm8vVGxZejZlUWlGY3AxSGNzQ1pPK25HZ1M4emc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYuOS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtY2FsbGVyLWZpbGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LWNhbGxlci1maWxlLy0vZ2V0LWNhbGxlci1maWxlLTIuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EeUZQM0JNLzNZSFRRT0NVTC93ME9aSFIwbHBLZUdyeG90Y0hXY3FORWRubHRxRndYVmZoRUJROTRlSW8zNEFmUXBvMHJHa2k0Y3lJaWZ0WTA2aDJGZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIjYuKiB8fCA4LiogfHwgPj0gMTAuKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LXBhY2thZ2UtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtcGFja2FnZS10eXBlLy0vZ2V0LXBhY2thZ2UtdHlwZS0wLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcGp6dUt0WTY0R1lmV2l6TkFKMGZyOVZxdHRaa05pSzJpUzQzMEx0SUh6akJFcjZiWDhBbTJ6bTRzVzRSbzV3aldXNWNBbFJMMXFBTVRjWGJqTkFPMlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9nZXQtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1zdHJlYW0vLS9nZXQtc3RyZWFtLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uQkYrRjFyQVpWQ3UvcDdyanpnQStZYjRsZllYcnBsN2E2Vm1KclU4d0Y5STFDS3ZQL1F3UE5aSG5PbHdiVGtZNmR2dEZJekZNU3lRWGJMb1RRUFJwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInB1bXAiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2V0LXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC12YWx1ZS8tL2dldC12YWx1ZS0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTNCWEtIR2NqaDhwMnZUZXNDamxib2dRcUxDZz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dsb2IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2xvYi8tL2dsb2ItNy4xLjcudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU92RDlFTnpQTGJlZ0VObllQNVVVZkpJaXJUZzQrWHdNV0dhUWZRVFkwSmVueE52dklLUDNVMy90QVFTUEl1L2xIeFhZU1ptcFhsVUhlcUFJZEt6QkxRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZnMucmVhbHBhdGgiOiAiXjEuMC4wIiwKLSAgICAgICAgImluZmxpZ2h0IjogIl4xLjAuNCIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjQiLAotICAgICAgICAib25jZSI6ICJeMS4zLjAiLAotICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIioiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2lzYWFjcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbHMvLS9nbG9iYWxzLTExLjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdPQnAvRUVHVWlJc0pTcDd3Y3YveTZNTytsVjlVb25jV3F4dUZmbThlQnd6V05neWZCZDZHeitJZUtROWpDbXlob0g5OWcxNU0zVCtRYVZIRmppelZBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ncmFjZWZ1bC1mcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZzLTQuMi42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uVG5KNTI4cGJxeFlhbmhwRFlzaTRSZDhNQWVhQkE2NytSWjEwQ00xbTNiVEFWRkVEY2Q1QXVBNGE2VzVZa0daMWlOWEh6Wno4VDZUQktMZUJ1TnJpUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2dyb3dseSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncm93bHkvLS9ncm93bHktMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS04UWRJeStkcStXUzN5V3lUeHJ6Q2l2RWd3SUU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9oYXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLy0vaGFzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mMmR2TzBWVTZPZWo3UmtXSkdyZWhqYnpNQWpGcDUvVktQcDV0VHBXSVY0SkhIWksxL0J4YkZSdGYvc2lBMlNXVGUwOWNhRG1WdFlZeldFSWJCUzR6dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjQuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLWZsYWciOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLWZsYWcvLS9oYXMtZmxhZy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRXlrSlQvUTFLalRXY3RwcGdJQWdmU08wdEtWdVpVamhnTXIxN2txVHVtTWw2QWZ2M0VJU2xlVTdxWlV6b1hERlRBSFREQzROT29HL1p4VTNFdmxNUFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcy12YWx1ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtdmFsdWUvLS9oYXMtdmFsdWUtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HTEtCMmxoYkhGeFIzdkpNa3c3U21ndm1zWGM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdldC12YWx1ZSI6ICJeMi4wLjYiLAotICAgICAgICAiaGFzLXZhbHVlcyI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLXZhbHVlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtdmFsdWVzLy0vaGFzLXZhbHVlcy0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWxiQzJQK3doUm1HYWIrVi81MVlvMWFPZS9rOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtbnVtYmVyIjogIl4zLjAuMCIsCi0gICAgICAgICJraW5kLW9mIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hhcy12YWx1ZXMvbm9kZV9tb2R1bGVzL2lzLW51bWJlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1udW1iZXIvLS9pcy1udW1iZXItMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1KUDFpQWFSNExQVUZZY2dRSjJyOGZSTFhFWlU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLXZhbHVlcy9ub2RlX21vZHVsZXMvaXMtbnVtYmVyL25vZGVfbW9kdWxlcy9raW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaGFzLXZhbHVlcy9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUlJRTk4OWNTa29zZ2MzaHBHa1VHYjY1eTNWYz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2hvc3RlZC1naXQtaW5mbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuOC45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob3N0ZWQtZ2l0LWluZm8vLS9ob3N0ZWQtZ2l0LWluZm8tMi44LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW14SURBYjlMc202RG9PSjd4SCs1K1g0eTFMVS80SGk1MEw5QzVzSXN3SzNKelVMUzRid2sxRnZqZEJndllSNGJ6VDR0dVVRaUMxNUZFMmY1SGJMdll3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHRtbC1lbmNvZGluZy1zbmlmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0bWwtZW5jb2Rpbmctc25pZmZlci8tL2h0bWwtZW5jb2Rpbmctc25pZmZlci0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRDVKYk9NQklSL1RWWmt1YkhUK095VDI3MDVRdm9nVVc0SUJuNm5IZDc1Nk93aWVTRjlhRFlGajRkdjZISEVWR1liSGFMRVRhM1dnZ1pZV1dNeXkzWlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3aGF0d2ctZW5jb2RpbmciOiAiXjEuMC41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9odG1sLWVzY2FwZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lc2NhcGVyLy0vaHRtbC1lc2NhcGVyLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IMmlNdGQwSTRNdDVlWWlhcFJkSURqcCtYemVsWFEwdEZFNEpTN1lGd0ZldlhYTW1PcDlteU5yVXZDZzBENndzOGlxa1JQQmZLSGdid2lnMVNtbExmZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2h0dHAtcHJveHktYWdlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cC1wcm94eS1hZ2VudC8tL2h0dHAtcHJveHktYWdlbnQtNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWswemROZ3FXVEdBNmFlSVJWcHZmVm9iNGZMNTJkVGZhZWh5bGcwWTRVdlN5U3ZPcS9ZK0JPeVByZ3BVckE3SHlscXZVOHZJWkdzUnVYbXNwc2tWMFRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHRvb3RhbGxuYXRlL29uY2UiOiAiMSIsCi0gICAgICAgICJhZ2VudC1iYXNlIjogIjYiLAotICAgICAgICAiZGVidWciOiAiNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHR0cHMtcHJveHktYWdlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cHMtcHJveHktYWdlbnQvLS9odHRwcy1wcm94eS1hZ2VudC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWtZbTVCY0tVR2lkdXh6U3QzRXBwa28rUGlOV05FcGE0eVNrOXZUQzZ3RHNRSlc5ckhTYStVaEdOSm9SWXA3Yno2SHQxZWFSSWE2UWFKcU81ckNGYkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhZ2VudC1iYXNlIjogIjYiLAotICAgICAgICAiZGVidWciOiAiNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaHVtYW4tc2lnbmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odW1hbi1zaWduYWxzLy0vaHVtYW4tc2lnbmFscy0xLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItU0VRdTd2bDhLak5MMmVvR0JMRjMrd0FqcHNOZkE5WE1sWEFZai8zRWRhTmZBbHhLdGhEMXhqRVFmR09VaGxsQ0dHSlZOWTM0YlJyNmxQSU5oTmp5Wnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguMTIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaWNvbnYtbGl0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4yNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaWNvbnYtbGl0ZS8tL2ljb252LWxpdGUtMC40LjI0LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12M01YblpBY3ZueXdrVFVFWm9tSUFjdGxlN1JYWGVlZE9SMzF3d2w3Vmx5b1hPNFFpOWFydlNlbk5RV25lMVRjUndoQ0wxSHdMSTIxYkVxZHBqOC9yQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNhZmVyLWJ1ZmZlciI6ICI+PSAyLjEuMiA8IDMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbXBvcnQtbG9jYWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW1wb3J0LWxvY2FsLy0vaW1wb3J0LWxvY2FsLTMuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12akwzK3cwb3VsQVZaMGhCSG54YS9ObTVUQXVyZjlZTFFKRGhxUlp5cWIrVktHT0I2TFU4dDlIMU5yNUNJbzE2dmg5WGZKVE9vSHdVMEI3MVM1NTdnQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBrZy1kaXIiOiAiXjQuMi4wIiwKLSAgICAgICAgInJlc29sdmUtY3dkIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiaW1wb3J0LWxvY2FsLWZpeHR1cmUiOiAiZml4dHVyZXMvY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2ltdXJtdXJoYXNoIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ltdXJtdXJoYXNoLy0vaW11cm11cmhhc2gtMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1raGk1c3Jrb29qaXhQY1Q3YTIxWGJ5TVVVK289IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC44LjE5IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pbmZsaWdodCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmZsaWdodC8tL2luZmxpZ2h0LTEuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtU2Ixak1kZlFMUXdKdkpFS0VIVzZnV1cxYmZrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJvbmNlIjogIl4xLjMuMCIsCi0gICAgICAgICJ3cmFwcHkiOiAiMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaW5oZXJpdHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW5oZXJpdHMvLS9pbmhlcml0cy0yLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItay92R2FYNC9ZbGEzV3p5TUN2VFFPWFllSUh2cU9LdG5xQmR1elRIcHpwUVp6QXNrS01oWjJLK0VuQmlTTTl6R1NvSUZlTXBYS3hhNGRZZVpJUXFld1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3IvLS9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tNWhuSFRrY1ZzUGZxeDNBS2x5dHRJUGI3SitYeWtIdkpQMkI5YlpEamxoTElvRXE0WG9LNjRWZzdib1psVldZSzZMVVk5NGRZUEVFN0xoMFprWktjUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtYXJyYXlpc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYXJyYXlpc2gvLS9pcy1hcnJheWlzaC0wLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWQ4bVlRRko2cU95eHFMcHBlNEJrV25xU2FwMD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWJ1ZmZlci8tL2lzLWJ1ZmZlci0xLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTmNkQUx3cFhrVG01WnZ2Yms3b3dPVVN2VnZCS0RnS1A1L2V3ZlhFem5tUUZmczRaUm1hbk9lS0JUalJWamthM1FGb042WEorOUYzVVNxZkhxVGFVNXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1jaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1jaS8tL2lzLWNpLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZZkpUN3JrcFFCMHVwZHNkSExHV3J2aEJKZmNmek5OYXdZRE5JeVFYSnowSVZpR2Y3NU84RUJQS1NkdncyckYrTEdDc1g0Rlo4dGNyM2IxOUxjWnE0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNpLWluZm8iOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJpcy1jaSI6ICJiaW4uanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWNvcmUtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWNvcmUtbW9kdWxlLy0vaXMtY29yZS1tb2R1bGUtMi40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZBMmZrZnExcmZlUVpqeHJaSkdlcnBMQ1RIUk5FQmlTZ251MCtvYmVKcEVQWlJVb29IZ3NpenZ6djBaakp3T3ozaVdJSGRKdFZXSi90bVByM0QyMS9BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzIjogIl4xLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1kYXRhLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0YS1kZXNjcmlwdG9yLy0vaXMtZGF0YS1kZXNjcmlwdG9yLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qYlJYeTFGbXRBb0NqUWtWbUlWWXd1dXFERlViYU9lRGptZWQxdE9HUHJzTWh0SkE0ckQ5dGtnQTBGMXFKM2dSRlJYY0hZVmtkZWFQNTBRNXJFL2pMUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kZXNjcmlwdG9yLy0vaXMtZGVzY3JpcHRvci0xLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMmVpczVXcVFHVjdwZW9vRHlMbU5FUFVycHM5K1NYWDVjOXBMM3hFQis0ZTlIbkd1RGE3bUI3a0h4SHc0Q2JxUzlrMVQyaE9IM21pTDhuOFd0aVlWdGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogIl4xLjAuMCIsCi0gICAgICAgICJpcy1kYXRhLWRlc2NyaXB0b3IiOiAiXjEuMC4wIiwKLSAgICAgICAgImtpbmQtb2YiOiAiXjYuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtZG9ja2VyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRvY2tlci8tL2lzLWRvY2tlci0yLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRitpMkJLc0ZySDY2aWFVRmMwd29EOHNMeThnZXRrd1R3dE9CanZzNTZDeDRDZ0pEZUtRZXFmejh3QVlpU2I4Sk9wcldoSEg1cDc3UGJtWUN2dlV1WFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAiaXMtZG9ja2VyIjogImNsaS5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWV4dGVuZGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0ZW5kYWJsZS8tL2lzLWV4dGVuZGFibGUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFyblhNeFQxaGhvS285azFMWmRtbE55SmRERGZ5MnYwZlhqRmxtb2s0K2k4dWwvNldsYlZnZTliaE03NE9wTlBRUE1HVVRvRHR6K0tYYTFQbmVKeE9BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtcGxhaW4tb2JqZWN0IjogIl4yLjAuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Ly0vaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXp5bW01K3Urc0NzU1d5RDlxTmFlalYzREZ2aENLY2xLZGl6WWFKVXVIQTgzUkxqYjduU3VHbmRkQ0hHdjBoaytLWTdCTUFsc1dlSzRVZWc2RVY2WFFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1nZW5lcmF0b3ItZm4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2VuZXJhdG9yLWZuLy0vaXMtZ2VuZXJhdG9yLWZuLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jVElCNHlQWUwvR3J3MEVhU3pBU3pnNmJCeTlncUNvZnZXTjhva1RoQVlJeEtKWkMrdWRsUkFtR2JNMFhMZW5pRUpTczh1RWdIUEd1SFNlMVhzT0xTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtbnVtYmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW51bWJlci8tL2lzLW51bWJlci03LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDFDaWZrZzZlOFR5bFNwZHRUcGVMVk1xdlNCRVZ6VHR0SHZFUkQ3NDErcG5aOEFOdjAwMDRNUkw0M1FLUERsSzljR3ZOcDZOWldaVUJsYkdYWXh4bmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXMtcGxhaW4tb2JqZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXBsYWluLW9iamVjdC8tL2lzLXBsYWluLW9iamVjdC0yLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDVQcGdYa1dpdGMzOEJCTVlhd1RZTVdKSEZaSlZuQnF1RkU1N3hGcGpCOHBKRmlGNmdaK2JVK1d5SS95cVhpRlI1bWRMc2dZTmFQZTh1YW82VXY5T2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZS8tL2lzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iQ1llUkEyclZpYktaZCtzMjYyNWdHbkdGL3Q3RFNxRHM0ZFA3Q3JMQTFtN2pLV3o2cHBzMExwWUxKTjhRNjRIdG1QS0oxaHJOM256UE5LRkVLT1VpUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhDb3krV2xVcjdkMStaOEdnU3VYbXB1VUZDOWZPaFJYZ2xKTXgrZHdMS1RrTDQ0Q2pkNFcxWjVQK0JRWnByK2NSOTNhR1A0Uy9zN0Z0dzZOZC9raUV3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy10eXBlZGFycmF5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXR5cGVkYXJyYXkvLS9pcy10eXBlZGFycmF5LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNUhuSUNGamZEQnNSM2RwcFFQbGdFZnphU3BvPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy13aW5kb3dzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXdpbmRvd3MvLS9pcy13aW5kb3dzLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lWEsxVUlucTJiUG1qeVg2ZTNWSEl6TUxvYmM0Sjk0aTRBV24rSHBxM09VNUtrclJDOTZPQWNSM1BSSi9wR3U2bThUUm5CSFA5ZGtYUVZzVC9DT1ZJQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pcy13c2wiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd3NsLy0vaXMtd3NsLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mS3pBcmEwckdKVVVCd0dCZ05rSFp1VG9aY24rVHRYSHBlQ2dta01KTU1ZeDFzUURZYUNTeWpKQlNDYTJuSDFER203czNuMW9Cbm9ob1ZUQmFON0x3dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1kb2NrZXIiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzYXJyYXkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNhcnJheS8tL2lzYXJyYXktMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11NU5kU0Znc3VoYU1Cb05KVjZWS1BnY1NUeEU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzZXhlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzZXhlLy0vaXNleGUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02UHZ6ZE54VmIvaVVlaERjc0ZjdFl6OHMraEE9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2lzb2JqZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzb2JqZWN0Ly0vaXNvYmplY3QtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Ua01la3JFYWx6RmphcUg1eU5ITXZQMnJlTjg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLWNvdmVyYWdlLy0vaXN0YW5idWwtbGliLWNvdmVyYWdlLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1VaVVJcXhNZ1JERVQ2ZVIrbzVIYmZSWVAxbDBocWtXT3M3dk54Qy9tZ2d1dENNVUloV01tOGdBSGI4dEhseWZEMy9sNnJsZ05BNWNLZER6RUFmNmhFZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLWluc3RydW1lbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLWluc3RydW1lbnQvLS9pc3RhbmJ1bC1saWItaW5zdHJ1bWVudC00LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQlhnUWw5a2Y0V1RDUENDcG1GR29Ka3ovK3Vodm03aDdQRktVWXhoN3FhclFkM0VSMzN2SEcvL3FhRThlTjI1bDA3WXFaUHBIWFU5STA5bC9SRDVhR1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy43LjUiLAotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItcmVwb3J0Ly0vaXN0YW5idWwtbGliLXJlcG9ydC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd2NkaSt1QUt6ZmlHVDJhYlBwS1owaFNVMXJHUWpVUW5MdnRZNU1wUTdRQ1RhaEQzVk9EaGN1NHdjZlkxWXRrR2FERDV5dXlkT0xJTlhzZmJ1czlST3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgIm1ha2UtZGlyIjogIl4zLjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcy8tL2lzdGFuYnVsLWxpYi1zb3VyY2UtbWFwcy00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzE2THBGUmtSOHZRWHlIWjVuTHBZMzVKWnR6ajFQUVkxaVptZXNVYmYxRlpIYkl1cGNXZmpnT1hCWTlZSGtMRVE2cHV6MXU0RGdqNnFtVS9EaXNyWmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjEiLAotICAgICAgICAiaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4zLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9pc3RhbmJ1bC1yZXBvcnRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLXJlcG9ydHMvLS9pc3RhbmJ1bC1yZXBvcnRzLTMuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05dFp2ejdBaVIzUEVETkdpVjl2SW91US9FQWNxTVhGbWtjQTFDREZUd09COThPWlZETDBQSDlnbEhvdGY1VWdwNkdDT1R5cGZ6R1dJL09xaldOQ1JVdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImh0bWwtZXNjYXBlciI6ICJeMi4wLjAiLAotICAgICAgICAiaXN0YW5idWwtbGliLXJlcG9ydCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC8tL2plc3QtMjYuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sR1M1UFhHQXpSNFJGN1Y1K1hPYmhxejJLWklEVUExeUQwREc2cEJWbXkxMGVoMFpJWFFJbVJ1em9jc0kvTjJYWjFHckxGd1RTMjdJbjJpMmpscHExUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvcmUiOiAiXjI2LjYuMyIsCi0gICAgICAgICJpbXBvcnQtbG9jYWwiOiAiXjMuMC4yIiwKLSAgICAgICAgImplc3QtY2xpIjogIl4yNi42LjMiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImplc3QiOiAiYmluL2plc3QuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY2hhbmdlZC1maWxlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jaGFuZ2VkLWZpbGVzLy0vamVzdC1jaGFuZ2VkLWZpbGVzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZkRTN3N6TGNZOXNDdElpcDhGanJ5OW9HZjNJMmh0L1FUMjFiQUhtNURtZjBtRDRYM1JlTlVmMTd5K2JPNmZSOFdnYklaVGxieUcxYWsvNTNjYlJ6S1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImV4ZWNhIjogIl40LjAuMCIsCi0gICAgICAgICJ0aHJvYXQiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWNsaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1jbGkvLS9qZXN0LWNsaS0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdGOW5vQlNhOXQwOHBTeWwzQ1k0ZnJNcnFwK2FRWEZHRmtmNWhFUGJoL3BJVUZZV01LNlpMVGZibWFkeEpWY0pyZFJvQ2hsV1FzQTJWa0pjREZLOGhnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29yZSI6ICJeMjYuNi4zIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImltcG9ydC1sb2NhbCI6ICJeMy4wLjIiLAotICAgICAgICAiaXMtY2kiOiAiXjIuMC4wIiwKLSAgICAgICAgImplc3QtY29uZmlnIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgInByb21wdHMiOiAiXjIuMC4xIiwKLSAgICAgICAgInlhcmdzIjogIl4xNS40LjEiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImplc3QiOiAiYmluL2plc3QuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNvbmZpZy8tL2plc3QtY29uZmlnLTI2LjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDVxZElqL2JDajJqN05GVkhiMm5GQjRhVWRmdWNEbjNKUktnclpucGxiOG5pZUFpckF6UlNIUDh1REVkK3FWNnlnemc5UHo0WUc3VVRKZjk0TFBTeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy4xLjAiLAotICAgICAgICAiQGplc3QvdGVzdC1zZXF1ZW5jZXIiOiAiXjI2LjYuMyIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImJhYmVsLWplc3QiOiAiXjI2LjYuMyIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZGVlcG1lcmdlIjogIl40LjIuMiIsCi0gICAgICAgICJnbG9iIjogIl43LjEuMSIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiamVzdC1lbnZpcm9ubWVudC1qc2RvbSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI2LjMuMCIsCi0gICAgICAgICJqZXN0LWphc21pbmUyIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNi4wLjAiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC12YWxpZGF0ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC4yIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI2LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInRzLW5vZGUiOiAiPj05LjAuMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJ0cy1ub2RlIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWRpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZGlmZi8tL2plc3QtZGlmZi0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZtKzlaM0d2OXdOMFdGVmFzcWpDTC8wNitFRkNNVHFERVVsL2I4N0hZSzJyQVBUeWZ6NFpJdVNsUGhZNTFQSVFSV3g1VGF4ZUYxcW1YS2U5Z2ZOM3NBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImRpZmYtc2VxdWVuY2VzIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjYuMy4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI2LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1kb2NibG9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kb2NibG9jay8tL2plc3QtZG9jYmxvY2stMjYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SRFo0SXozUWJ0Uld5Y2Q4YlVFUHhRc1RsWWF6ZlluL2g1UjY1RmM2Z09md296RmhvSW14K2FmZnpreS9GRkJ1cUlTUFRxalhvbW9JR0pWS0JXb28wdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRldGVjdC1uZXdsaW5lIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1lYWNoIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWVhY2gvLS9qZXN0LWVhY2gtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NZXIvZjBLYUFUYmpsOE1DSiswR0VwTmRxbW5WbURZcUNUSllUdm9vN3JxbVJpRGxsbXAyQVlOKzA2RjkzblhjWTN1cjlTaElqUytDTy91RCtCYkg0QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI2LjMuMCIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtanNkb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtZW52aXJvbm1lbnQtanNkb20vLS9qZXN0LWVudmlyb25tZW50LWpzZG9tLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItamdQcUNydVRsdDNLd3FnNS9XVkZ5SElPSkhzaUF2aGNwMnFpUjJRUXN0dUc5eVdveDUraUhwVTNacmNCeFcxNFQ0ZmU1WjY4akFmTFJoN2pvQ1NQMlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImpzZG9tIjogIl4xNi40LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtZW52aXJvbm1lbnQtbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemh0TWlvM0V4dHkxOGR5OGVlOGVKOWtqblJ5WkMxTjRDMU50L1ZTaE4xYXB5WGM4cldHdEo5bEk3dnFpV2N5eVhTNEJWU0VuOWx4QU0yRCswNy9UYWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC9lbnZpcm9ubWVudCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L2Zha2UtdGltZXJzIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LWdldC10eXBlIjogewotICAgICAgInZlcnNpb24iOiAiMjYuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yNi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRwZmF2aU4xUjJwUVdrSWlobGZFYW53T1hLMHpjeHJLRUU0TWxVNlRuN2tlb1hkTjYvM2dLL3hsMHlFaDhET3VubjVwT1ZHS2Y4aEI0UjlnVmgwNGlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lYXNXSUpYSXc3MUIyUmRSOGtncXBqUXJiTVJXUUJnaUJ3WFlFaHRHVVRhWCtkb0NqQmhlbHVTaGRETWVSOElNZkppVHFINCt6Zmh0ZzI5YXBKZi84dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogIl40LjEuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImFueW1hdGNoIjogIl4zLjAuMyIsCi0gICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjYuMC4wIiwKLSAgICAgICAgImplc3Qtc2VyaWFsaXplciI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yNi42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjIiLAotICAgICAgICAic2FuZSI6ICJeNC4wLjMiLAotICAgICAgICAid2Fsa2VyIjogIl4xLjAuNyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0sCi0gICAgICAib3B0aW9uYWxEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmc2V2ZW50cyI6ICJeMi4xLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtamFzbWluZTIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtamFzbWluZTIvLS9qZXN0LWphc21pbmUyLTI2LjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1BLVXJRdGM4YVl3QlY3Q3FCZzVwdSt0bVlYbHZGbFNGWW4xOGV2NGdQRnRyUnpCMTVOMmdXL1JvZXczMTg3cTJ3MmVIdXUwTVU5VEp6NncwL25QRWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjbyI6ICJeNC42LjAiLAotICAgICAgICAiZXhwZWN0IjogIl4yNi42LjIiLAotICAgICAgICAiaXMtZ2VuZXJhdG9yLWZuIjogIl4yLjAuMCIsCi0gICAgICAgICJqZXN0LWVhY2giOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiLAotICAgICAgICAidGhyb2F0IjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1sZWFrLWRldGVjdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWxlYWstZGV0ZWN0b3IvLS9qZXN0LWxlYWstZGV0ZWN0b3ItMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pNHhsWHBzVlNNZUt2ZzJjRUtkZmhoMEgzOXFsSmxQNUV4MXlReHdGOXViYWhib1FZTWdUdHo1b01MMzVBVkEzQjRFdStZc213YWlLVmV2OUtDdkx4Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI2LjMuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtbWF0Y2hlci11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tYXRjaGVyLXV0aWxzLy0vamVzdC1tYXRjaGVyLXV0aWxzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGxuYzh2UWdZY05xRHJxUkRYV3dNcjlpN3JTNVhGaUN3dmg2RFRQN0pxYTJtcXBjQ0JCbHBDYm4rdHJrRzBLTmhQdS9oOHJ6eUJrcmlPdEJzdHZXaHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1kaWZmIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjYuMy4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI2LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1tZXNzYWdlLXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWVzc2FnZS11dGlsLy0vamVzdC1tZXNzYWdlLXV0aWwtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yR2lMZVB6UTNBendVc2h1MitSbitVTUZrMHBITjU4c09HK0lhSmJrNUp4dXFvM05ZTzFVMi9NSVI0UzFzS2dzb1lTWFN6ZHRTYTBUZ3JtdFV3RWJtQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjAuMCIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuMiIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1tb2NrIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1vY2svLS9qZXN0LW1vY2stMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZeUZqZVBISHAxTHpwelljbWdxa0owbm0wZ2cvbEp4MmFaRnpGeTFTNmVVcU5qWHNPcVRLMTB6TlJmZjJkTmZzc2dva2prRzY1T2xXTmNJbGdkM3pldz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1wbnAtcmVzb2x2ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1wbnAtcmVzb2x2ZXIvLS9qZXN0LXBucC1yZXNvbHZlci0xLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb2xWNDFiS1NNbThCZG51TXNld1Q0anFsWjgrM1RDQVJBWGpaR1Q5amNvU25yZlVuUkNxbk1vRjlYRWVvV2piek9icHFGOWRSaEhRajBYYjlRZEY2L3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiKiIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llc01ldGEiOiB7Ci0gICAgICAgICJqZXN0LXJlc29sdmUiOiB7Ci0gICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3QtcmVnZXgtdXRpbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZWdleC11dGlsLy0vamVzdC1yZWdleC11dGlsLTI2LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR3YzWklzL25BNDgvWnZqcmwzNGJmK29ENzZKSGlHRFV4Tk9WZ1VqaDNqODkwc2JsWHJ5alk0cnNzNzFmUHREL25qY2hsNlBTRTJoSWh2eVdhMWVUMEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJlc29sdmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcmVzb2x2ZS8tL2plc3QtcmVzb2x2ZS0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNPeHNaT3EyNW1UMXdSc2ZIY2J0a0luUytFazdROGpDSFVCMFpVVFAwdGMvYzQxUUhyaVUvTnVucU1mQ1VXc0w0SDNNSHB2UUQ0UVI5a1NZaFM3VXZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJyZWFkLXBrZy11cCI6ICJeNy4wLjEiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xOC4xIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy8tL2plc3QtcmVzb2x2ZS1kZXBlbmRlbmNpZXMtMjYuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wVndVakpreGJoZTRSWThRRVd6TjN2bnMya3F5dWxkS3B4bHhKbHpFWWZLU3ZZNi9iTXZ4b0ZyWVl6VU8xR3gyOHlLV04zN3F5VjdySW9JcDJoOGZUZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNi4wLjAiLAotICAgICAgICAiamVzdC1zbmFwc2hvdCI6ICJeMjYuNi4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bm5lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1ydW5uZXIvLS9qZXN0LXJ1bm5lci0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF0Z0twUkhuYUEyT3ZCeUcvSHBHQTRnNkNTUFMvMUxLMGpLM2dBVEpBb3B0QzFvamx0cG1WbFlDM1RZZ2RtR3ArR0x1aHpwSDMwR3ZzMzZzelNMMkpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImVtaXR0ZXJ5IjogIl4wLjcuMSIsCi0gICAgICAgICJleGl0IjogIl4wLjEuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiamVzdC1jb25maWciOiAiXjI2LjYuMyIsCi0gICAgICAgICJqZXN0LWRvY2Jsb2NrIjogIl4yNi4wLjAiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LWxlYWstZGV0ZWN0b3IiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yNi42LjIiLAotICAgICAgICAic291cmNlLW1hcC1zdXBwb3J0IjogIl4wLjUuNiIsCi0gICAgICAgICJ0aHJvYXQiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXJ1bnRpbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtcnVudGltZS8tL2plc3QtcnVudGltZS0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxyenlSM044c2FjVEFNZW9uYnFwblNrYTFkSE51eDJ1azBxcURYVmtNdjJjL0Ezd1ludlE0RVh1STAxM1k2K2dTS1NDeGRhY3p2ZjRIRjBtVlhIUmR3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC9nbG9iYWxzIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE1LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2pzLW1vZHVsZS1sZXhlciI6ICJeMC42LjAiLAotICAgICAgICAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiLAotICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjMiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtY29uZmlnIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjYuMC4wIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNi42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWJvbSI6ICJeNC4wLjAiLAotICAgICAgICAieWFyZ3MiOiAiXjE1LjQuMSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAiamVzdC1ydW50aW1lIjogImJpbi9qZXN0LXJ1bnRpbWUuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjE0LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtc2VyaWFsaXplciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1zZXJpYWxpemVyLy0vamVzdC1zZXJpYWxpemVyLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUzV3cXl6MERYbk5KUGQveGZJelo1WG5wMUhySldCY3pnOG1NZk1wTjc4T0o1ZUR4WHlmK1lnbGQ5d1gxRG5VV2JJYmhNMVlEWTk1TmpSNENCWGtiMmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC1zbmFwc2hvdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1zbmFwc2hvdC8tL2plc3Qtc25hcHNob3QtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PTGh4ejA1RXpVdHNBbU9NenV1cHQxbEhZWENOaWIwRUN5dVovUFpPeDlUclpjQzh2TDB4K0RVRzNUTCtHTFgzeUhHNDVlNllHakltMFh3RGMzcTNvZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogIl43LjAuNCIsCi0gICAgICAgICJAdHlwZXMvcHJldHRpZXIiOiAiXjIuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJleHBlY3QiOiAiXjI2LjYuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiamVzdC1kaWZmIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjYuMy4wIiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJuYXR1cmFsLWNvbXBhcmUiOiAiXjEuNC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXNuYXBzaG90L25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjMuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuMy41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Qb2VHSlloOEhLNEJUTy9hOVRmNlpHM3Zlby9BN1pWc1lyU0E2SjhueTluYjNCMVZycGt1Tit6OU9FNXdmRTVwNkg0TGNoWVpzZWdpUWdiSkQ5NFpGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXV0aWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdXRpbC8tL2plc3QtdXRpbC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1EVzBmS2ZzbjBPSTdNUzdFdXo2aDhITkRYVlEwZ2FNOXVXNlJqZkRtZDFEQUZjYXhYOU9xSWFrSElxaGJubUYwOENmMkRMREcrdWxxOFlRUTBMcDBRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiaXMtY2kiOiAiXjIuMC4wIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMC4xNC4yIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qZXN0LXZhbGlkYXRlIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXZhbGlkYXRlLy0vamVzdC12YWxpZGF0ZS0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5FWVo5QWV5ajBpNXJRcWJxK3RwSU9vbTBZUzF1Mk1WdTYrZXVCc3ZwZ0ltZStGT2ZSbW9DNFI1cDBKaUFVcGFGdkZ5MjR4Z3JwTWtuYXJSLzkzWGpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJjYW1lbGNhc2UiOiAiXjYuMC4wIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNi4zLjAiLAotICAgICAgICAibGV2ZW4iOiAiXjMuMS4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI2LjYuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC12YWxpZGF0ZS9ub2RlX21vZHVsZXMvY2FtZWxjYXNlIjogewotICAgICAgInZlcnNpb24iOiAiNi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbWVsY2FzZS8tL2NhbWVsY2FzZS02LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYzd3VnZidzNmMzdudW9iUU50Z3NnRzlQT0M5cU1iTnVNUW1UQ3FadjIzYjZNSXowZmNZcEJpT2x2OWdFTi9oZExkblpURFFoZzZlOURxNU0xdkt2Zmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2plc3Qtd2F0Y2hlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13YXRjaGVyLy0vamVzdC13YXRjaGVyLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV0tKb2IwUC9FbTJjc2lWdGhzSTY4cDZhR0tUSWNzZmpIOUdzeDFmMEEzSXRhbHo0M2UzaG8wZ2VTQVZzbWowOVJXT0VMUDFBWi9EWHlKZ09nREt4WFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gMTAuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvamVzdC13b3JrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd29ya2VyLy0vamVzdC13b3JrZXItMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LV1lWVjFjNGkramJNcGFCQytVKys0VmEwY3A4T2lzVTE4NW83M1Qxdm85OWhxaTd3OHRTSmZVWFlzd3dxcXJqend4YTZLcFJLNTRXaFB2d2Y1dzZQUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAibWVyZ2Utc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwLjEzLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzLXRva2VucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkSlVmbGNFM2NVektpTXFRZ3NDdTA2RlB1OVVkSUpPMGJlWWJQaEhONGs2YXBnSnRpZmNvQ3RUOWJjeE9wWUJ0cEQya0NNNlNiemc0Q2F1c1cvUEtRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanMteWFtbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMTQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanMteWFtbC8tL2pzLXlhbWwtMy4xNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1va01IN09YWEo3WXJOOU9rMy9TWHJudTRpWDl5T2srMjVucVg0aW1TMm5wdXZUWURtby9RRVpvcXdaa1lhSURrM2pWdkJPVE9JRWdFaGFMT3luQlM5Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFyZ3BhcnNlIjogIl4xLjAuNyIsCi0gICAgICAgICJlc3ByaW1hIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAianMteWFtbCI6ICJiaW4vanMteWFtbC5qcyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvanNkb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZG9tLy0vanNkb20tMTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UeTF2bUY0TkhKa29sYUVtZGp0eFRmU2ZrZGI4WXdhcndmNjNmK0Y4L21ERDF1TFNTV0R4RHVNaVp4aVBod3VuTHJuOUxPU1ZJdFdqNGJMWXNMTjNEZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFiYWIiOiAiXjIuMC41IiwKLSAgICAgICAgImFjb3JuIjogIl44LjIuNCIsCi0gICAgICAgICJhY29ybi1nbG9iYWxzIjogIl42LjAuMCIsCi0gICAgICAgICJjc3NvbSI6ICJeMC40LjQiLAotICAgICAgICAiY3Nzc3R5bGUiOiAiXjIuMy4wIiwKLSAgICAgICAgImRhdGEtdXJscyI6ICJeMi4wLjAiLAotICAgICAgICAiZGVjaW1hbC5qcyI6ICJeMTAuMi4xIiwKLSAgICAgICAgImRvbWV4Y2VwdGlvbiI6ICJeMi4wLjEiLAotICAgICAgICAiZXNjb2RlZ2VuIjogIl4yLjAuMCIsCi0gICAgICAgICJmb3JtLWRhdGEiOiAiXjMuMC4wIiwKLSAgICAgICAgImh0bWwtZW5jb2Rpbmctc25pZmZlciI6ICJeMi4wLjEiLAotICAgICAgICAiaHR0cC1wcm94eS1hZ2VudCI6ICJeNC4wLjEiLAotICAgICAgICAiaHR0cHMtcHJveHktYWdlbnQiOiAiXjUuMC4wIiwKLSAgICAgICAgImlzLXBvdGVudGlhbC1jdXN0b20tZWxlbWVudC1uYW1lIjogIl4xLjAuMSIsCi0gICAgICAgICJud3NhcGkiOiAiXjIuMi4wIiwKLSAgICAgICAgInBhcnNlNSI6ICI2LjAuMSIsCi0gICAgICAgICJzYXhlcyI6ICJeNS4wLjEiLAotICAgICAgICAic3ltYm9sLXRyZWUiOiAiXjMuMi40IiwKLSAgICAgICAgInRvdWdoLWNvb2tpZSI6ICJeNC4wLjAiLAotICAgICAgICAidzNjLWhyLXRpbWUiOiAiXjEuMC4yIiwKLSAgICAgICAgInczYy14bWxzZXJpYWxpemVyIjogIl4yLjAuMCIsCi0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjYuMS4wIiwKLSAgICAgICAgIndoYXR3Zy1lbmNvZGluZyI6ICJeMS4wLjUiLAotICAgICAgICAid2hhdHdnLW1pbWV0eXBlIjogIl4yLjMuMCIsCi0gICAgICAgICJ3aGF0d2ctdXJsIjogIl44LjUuMCIsCi0gICAgICAgICJ3cyI6ICJeNy40LjUiLAotICAgICAgICAieG1sLW5hbWUtdmFsaWRhdG9yIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbnZhcyI6ICJeMi41LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiY2FudmFzIjogewotICAgICAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc2VzYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuNS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc2VzYy8tL2pzZXNjLTIuNS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PWXU3WEV6amtDUTNDNVBzM1FJWnNRZk5wcW9KeVpaQTk5d2Q5YVdkMDVOQ3RDNXBXT2tTaEsybWtMNkhYUVI2L0N5MmxiTmRQbFpCcHVRSFhFNjNnQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgImpzZXNjIjogImJpbi9qc2VzYyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycy8tL2pzb24tcGFyc2UtZXZlbi1iZXR0ZXItZXJyb3JzLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14eUZ3eWhyby9KRW9mNkdoZTJpejJOY1hvajJzbG9Oc1dyL1hzRVJESy9vaVBDZmFOaGw1T05mcCtqUWRBWlJRUTBJSldOekg5eklaRjdsaTkxa2gydz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2pzb241IjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzb241Ly0vanNvbjUtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWYrOGNsZHU3WC95N1JBSnVyTUVKbWRvS1hHQi9YNTUwdzJOcjN0VGJlekw2UndFRS9pTWNtK3Rablhlb1p0S3VPcTZmdDgrQ3F6RWtySWd4MWZQb1FBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWluaW1pc3QiOiAiXjEuMi41IgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJqc29uNSI6ICJsaWIvY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtNi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRjUzF1bCs5dG1lRDk1VCt4MjgvZWhMZ2Q5bUVOYTNMc3ZEVHR6bTN2eUJFTzdSUHB0dkFEK3Q0NFdWWGFValRCUmNycEZlRmxDOFdDcnVVUjQ1Nmh3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL2tsZXVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tsZXVyLy0va2xldXItMy4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVUSXpsVk9TVVIrSnhkREZlcEVZY0JNdFo5UXFkZWYrcm56V2RSWnVNYk95d3U1dE8ydzJON3Jxam9BTlo1azl2eXdoTDZCcjFWUmpVSWdUUXg0RTh3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sZXZlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZlbi8tL2xldmVuLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xc2RhK0g4alRhVWFOL3g1dnpXMnJ6Yys4Unc0VEFRLzRLakI0Nkl3SzVWSCtJbFZlZWVqZS9Fb1pScGlYdklxakZnSzg0UWZmcVB6dEdJM1ZCTEcxQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbGV2biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sZXZuLy0vbGV2bi0wLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU93bVNUdCtmQ0R3RWtQM1V3THhFSWVCSFpPND0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHJlbHVkZS1scyI6ICJ+MS4xLjIiLAotICAgICAgICAidHlwZS1jaGVjayI6ICJ+MC4zLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9saW5lcy1hbmQtY29sdW1ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9saW5lcy1hbmQtY29sdW1ucy8tL2xpbmVzLWFuZC1jb2x1bW5zLTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSEFESFE3UXp6UXBPZ0hXUGUyU2xkRURaL3dBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2NhdGUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2NhdGUtcGF0aC8tL2xvY2F0ZS1wYXRoLTUuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10N2h3OXBJK1d2dXdOSlh3azV6VkhweWhJcXpnMnFUbGtsSk9mMG1WeEdTYmUzRnAyVmllWmNkdU5ZamFMRG95NnA5dUdwUUVHV0c4N1dwTUtsTnE4Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInAtbG9jYXRlIjogIl40LjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9sb2Rhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE3LjIxIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtNC4xNy4yMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdjJrREVlNTdsZWNUdWxhREl1TlRQeTNSeTRnTEdKNloxTzN2RTFrcmdYWk5yc1ErTEZUR0hWeFZqY1hQczE3TGhiWlZHZWRBSnY4WFoxdHZqNUZ2U2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9scnUtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbHJ1LWNhY2hlLy0vbHJ1LWNhY2hlLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KbzZkSjA0Q21TanV6bndKU1MzcFVlV21kL0gwZmZUbGtYWGd3WmkrZXExVUNtcVF3Q2grZUxzWU9ZQ3dZOTkxaTJGYWg0aDFCRU1DeDRxVGhHYnNpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInlhbGxpc3QiOiAiXjQuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYWtlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nM0ZlUDIwTE53aEFMYi82Q3o2RGQ0RjJuZ3plMGp6N3RienJEMndBVitvOUZlTkhlNHJMK3lLMm1kMEovZmlTZjFzYTFBRGhYcWk1K29Wd09NL2VHdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNlbXZlciI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tYWtlLWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ha2UtZXJyb3IvLS9tYWtlLWVycm9yLTEuMy42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zOFVobE5lN3ZQS29tUWhDMXFGZWxNb2tyL1NjM0FnTmJzbzNuNzRtVlBBNUxUWndrQjlObFhmNFhQYW1MeEpFOGgwZ2g3M3JNOTR4dndSVDJDVkludz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21ha2VlcnJvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFrZWVycm9yLy0vbWFrZWVycm9yLTEuMC4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTRCcGNrUW55cjNsbURrNkxsWWQ1QVlUMXFXdz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidG1wbCI6ICIxLjAueCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWFwLWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcC1jYWNoZS8tL21hcC1jYWNoZS0wLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXd5cTlDOVpTWFpzRkZrVzdUeWFzWGNtS0RiOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21hcC12aXNpdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYXAtdmlzaXQvLS9tYXAtdmlzaXQtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS03TnlvOFRGRTVtRHh0YjFCOFM4MGVkbU4rNDg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm9iamVjdC12aXNpdCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9tZXJnZS1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2Utc3RyZWFtLy0vbWVyZ2Utc3RyZWFtLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hYnYvcU9jdVBmazNVUlBmRHptWlUxTEttdXc4a1QrMG5JSHZLcktnRnJ3aWZvbC9kb1djZEE0WnFzV1E4RU5yRktrZDY3TWZwby9Mb3ZiSVVzYnQzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pY3JvbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWljcm9tYXRjaC8tL21pY3JvbWF0Y2gtNC4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBSbXp3L1hVY3dYR3BEOWFJOXEvMFhPd0xOeWdqRVRKOHkwYW8wd2RxcHJyekRhNFlueExjejdmUVJacjh2b2g4VjEwa0doQUJiTmNIVms1d0hnV3dnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYnJhY2VzIjogIl4zLjAuMSIsCi0gICAgICAgICJwaWNvbWF0Y2giOiAiXjIuMi4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTguNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWltZS1kYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNDguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS1kYi8tL21pbWUtZGItMS40OC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GTTNRd3hWK1RuWllRMmFScWhsS0JNSHhrMTBsVGJNdDNiQmtNQXA1NGRkck5lVlNmY1FZT09LdUd1eTNEZHJtMzhJMDRJZjgzNGZPVVNxMXl6c2xKUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWltZS10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4zMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS10eXBlcy8tL21pbWUtdHlwZXMtMi4xLjMxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YR1puTnptM1F2Z0t4YThkcHp5aEZUSG1wUDNsNVlOdXNtbmUwN1ZVT1h4b3U5Q3FVcVlhL0hCeTEyNFJxdFZoL08ycEVDYXMvTU9jc0RncGlsUE9QZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbWUtZGIiOiAiMS40OC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbWljLWZuIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbWljLWZuLy0vbWltaWMtZm4tMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9xYk9rNW9FUWVBWjhXWFd5ZGx1OUhKano5V1ZkRUl2YW1NQ2NYbXVxVVlqVGtuSC9zcXNXdmhRM3Znd0tGUlIxSHBqdk5CS1EzN25iSmdZekdxR2NnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9taW5pbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWluaW1hdGNoLy0vbWluaW1hdGNoLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15SkhWUUVoeXFQTFVUZ3Q5QjgzUFh1Nlczcng0TXZ2SHZTVXZUb29ncHdvR0RPVVEreURyUjBIUm90K3lPQ2RDTzd1NGhYM3BXZnQ2a1dCQmNxaDBVQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJyYWNlLWV4cGFuc2lvbiI6ICJeMS4xLjciCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL21pbmltaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltaXN0Ly0vbWluaW1pc3QtMS4yLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpzam5rNGJ3M1lKcVl6YmR5QmlOc1BXSFBmTysrVUdHNzQ5Q3hzNnBlQ3U1WGc0bnJlbmE2T1Z4T1l4clFUcXd3MEptd3QrUmVmOHJnZ3Vta1RMejlRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWl4aW4tZGVlcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taXhpbi1kZWVwLy0vbWl4aW4tZGVlcC0xLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItV1JvRG4vL21YQmlKMUg0MHJxYTN2SDB0b2VQd1NzR2I0NWlJbldsVHlTYStVdTRrM3RZVVN4YTJ2MUtxQWlMdHZsclN6YUV4cVMxZ3RrOTZBOXp2RUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmb3ItaW4iOiAiXjEuMC4yIiwKLSAgICAgICAgImlzLWV4dGVuZGFibGUiOiAiXjEuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbWtkaXJwIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21rZGlycC8tL21rZGlycC0xLjAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdlZxVlpReWYzV0x4MlNoZDBxSjl4dXZxZ0F5S1BMQWlxSVRFdHFXMG9JVWp6bzNQZVBEZDZmVzlpRnozMGVmN1lzcC9vaVdxYmhzemVHV1cyVDZHenc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJta2RpcnAiOiAiYmluL2NtZC5qcyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0drUHgrVmpNdG1BNk1YMjdvQTRGQkZFTEZDWlo0UzRYcWVHT1hDdjY4dFQramIzdmsvUnlhS1dQMFBUS3lXdG1MU00wYithZFVURXZiczFQRWFIMnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9uYW5vbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMTMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25hbm9tYXRjaC8tL25hbm9tYXRjaC0xLjIuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZwb2UyVDBSYkh3QlRCVU9mdEFmQlBhREVpMDZ1ZmFVYWkwbUU2WW4xa2FjYzNTblRFcmZiL2grWDk0Vlh6STY0cktGSFlJbVhTdmR3R0dDbXdPcUNBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYXJyLWRpZmYiOiAiXjQuMC4wIiwKLSAgICAgICAgImFycmF5LXVuaXF1ZSI6ICJeMC4zLjIiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4yLjAuMiIsCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMy4wLjIiLAotICAgICAgICAiZnJhZ21lbnQtY2FjaGUiOiAiXjAuMi4xIiwKLSAgICAgICAgImlzLXdpbmRvd3MiOiAiXjEuMC4yIiwKLSAgICAgICAgImtpbmQtb2YiOiAiXjYuMC4yIiwKLSAgICAgICAgIm9iamVjdC5waWNrIjogIl4xLjMuMCIsCi0gICAgICAgICJyZWdleC1ub3QiOiAiXjEuMC4wIiwKLSAgICAgICAgInNuYXBkcmFnb24iOiAiXjAuOC4xIiwKLSAgICAgICAgInRvLXJlZ2V4IjogIl4zLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25hdHVyYWwtY29tcGFyZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uYXR1cmFsLWNvbXBhcmUvLS9uYXR1cmFsLWNvbXBhcmUtMS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1TcjYvN3RkVUh5d25yUHNwdmJ2UlhJMWJwUGM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25pY2UtdHJ5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25pY2UtdHJ5Ly0vbmljZS10cnktMS4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFuaDQ1ZGVlYjVvbE5ZN2VYODJCa1BPN1NTeFI1U1NZSmlQVHJUZEZVVll3QWw4Q0tNQTVOOVBqVFlrSGlSamlzVmN4Y1ExSFhkTGh4MnF4eEp6TE5RPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1pbnQ2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWludDY0Ly0vbm9kZS1pbnQ2NC0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWg2a0dYTnMxWFRHQzJQbE00UkdJdUNYR2lqcz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1tb2R1bGVzLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLW1vZHVsZXMtcmVnZXhwLy0vbm9kZS1tb2R1bGVzLXJlZ2V4cC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWpaMitLSlpLU3NWeExwRXhaQ0VIeHg2UTdFQT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1ub3RpZmllci8tL25vZGUtbm90aWZpZXItOC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9KUC85TkFkZDkreDJRK3JmcGhCMlJKQ0hqb2Q3MFJjUkxqb3NpUE1NdTVnaklmd1ZuT1VHcTJuYlRqVFVibXkwREovdEZJVlQzMCtRZTNuemw0VEpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdyb3dseSI6ICJeMS4zLjAiLAotICAgICAgICAiaXMtd3NsIjogIl4yLjIuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiXjcuMy4yIiwKLSAgICAgICAgInNoZWxsd29yZHMiOiAiXjAuMS4xIiwKLSAgICAgICAgInV1aWQiOiAiXjguMy4wIiwKLSAgICAgICAgIndoaWNoIjogIl4yLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvbm9kZS1ub3RpZmllci9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy4zLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci03LjMuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUG9lR0pZaDhISzRCVE8vYTlUZjZaRzN2ZW8vQTdaVnNZclNBNko4bnk5bmIzQjFWcnBrdU4rejlPRTV3ZkU1cDZINExjaFlac2VnaVFnYkpEOTRaRlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibHJ1LWNhY2hlIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAic2VtdmVyIjogImJpbi9zZW12ZXIuanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL25vZGUtcmVsZWFzZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNzIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtcmVsZWFzZXMvLS9ub2RlLXJlbGVhc2VzLTEuMS43Mi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTExVbytQcEgzZFU2WGl6WDNpVm91YlVOaGVGL293alhDWlo1eUFDRHhOblB0Z0Z1bHVkVjFaTDNheUsxa1ZlcDQyUm1tMCtSOS9ZNjBOUWJaMmJpZnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ub3JtYWxpemUtcGFja2FnZS1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEvLS9ub3JtYWxpemUtcGFja2FnZS1kYXRhLTIuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vNUNNTjNUMFI0WFRqNERjR2FleG8rcm9aU2RTRlcvMEFPT1RST3JqeHpDRzF3cldYRXNHYlJLZXZqbElMK1pERTRzWmxKcjVFRDRZVzB5cW1rSytlQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhvc3RlZC1naXQtaW5mbyI6ICJeMi4xLjQiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xMC4wIiwKLSAgICAgICAgInNlbXZlciI6ICIyIHx8IDMgfHwgNCB8fCA1IiwKLSAgICAgICAgInZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UiOiAiXjMuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ub3JtYWxpemUtcGFja2FnZS1kYXRhL25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjcuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTUuNy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zYXVhRGYvUFpkVmdyTFROWUhSdHBYYTFpUmlLY2FlYmlLUTFCSmRwUWxXSDJsQ3ZleFFkWDU1c25QRnlLN1F6cHVkcWJDSTBxWEZmT2FzSGR5TkRHUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ub3JtYWxpemUtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtcGF0aC8tL25vcm1hbGl6ZS1wYXRoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02ZVpzNUxzM1d0Q2lzSFdwOVMyR1V5OGRxa3BHaTRCVlN6M0dhcWlFNmV6dWIwNTEyRVN6dFhVd1VCNkM2SUtiUWtZMlBuYi9tRDRXWW9qQ1J3Y3dMQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ucG0tcnVuLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnBtLXJ1bi1wYXRoLy0vbnBtLXJ1bi1wYXRoLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TNDhXelpXNzc3emhOSXJuN2d4T2xJU05BcWk5WkMvdVFGblJkYmVJSGhaaENBNlVxcGtPVDhUMUc3QnZmZGdQNEVyOGdGNHNVYmFTMGk3UXZJZkNXdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInBhdGgta2V5IjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9ud3NhcGkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbndzYXBpLy0vbndzYXBpLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oMkFhdGR3WUgrSkhpWnB2N3B0L2dTWDFYb1JHYjdML3FTSWV1cUE2R3dZb0Y5dzF2UDFjdzQyVE8wYUkycE55c2hSSzU4OTNoTlNsKzEvL3ZISzdoUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1jb3B5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC1jb3B5Ly0vb2JqZWN0LWNvcHktMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1mbjJGaTNnYjE4bVJwQnVwZGUwNEVuVk9tWXc9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvcHktZGVzY3JpcHRvciI6ICJeMC4xLjAiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1jb3B5L25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnR5Ly0vZGVmaW5lLXByb3BlcnR5LTAuMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdzFzZStSanNQSmtQbWx2RmUrQktyT3hjZ1JZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1jb3B5L25vZGVfbW9kdWxlcy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3IvLS9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLTAuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcWVFc3M2Nk5oMmNuN3U4NFEvaWdpWHRjbU5ZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1jb3B5L25vZGVfbW9kdWxlcy9pcy1kYXRhLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0YS1kZXNjcmlwdG9yLy0vaXMtZGF0YS1kZXNjcmlwdG9yLTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQzE3bVNEaU9MSVlDZ3VlVDhZVnY3RDh3RzFZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL29iamVjdC1jb3B5L25vZGVfbW9kdWxlcy9pcy1kZXNjcmlwdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRlc2NyaXB0b3IvLS9pcy1kZXNjcmlwdG9yLTAuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hdkRZcjBTQjNEd085enNNb3YwZ0tDRVNGWXFDbkU0aHEvNHozVGRVbHVrRXk1dDlDMFlScTdITHJzTjUyTkFjcVhLYWVwZUNEMG4rQjBhcm5WRzNIZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWFjY2Vzc29yLWRlc2NyaXB0b3IiOiAiXjAuMS42IiwKLSAgICAgICAgImlzLWRhdGEtZGVzY3JpcHRvciI6ICJeMC4xLjQiLAotICAgICAgICAia2luZC1vZiI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QtY29weS9ub2RlX21vZHVsZXMvaXMtZGVzY3JpcHRvci9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdFRXJuSDZGMnZVdVhEaCtPbGJjS1c3L3dPY2ZkUkhhWjdWV3RxQ3p0ZkhyaS8rK1lLbVA1MU9kV2VHUHVxQ09iYTZrazJPVGU1ZDAyVm1UQjgwUHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb2JqZWN0LWNvcHkvbm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QtdmlzaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb2JqZWN0LXZpc2l0Ly0vb2JqZWN0LXZpc2l0LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOTV4RWs2OE1VM2UxbitPZE9WNUJCQzNRUmJzPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vYmplY3QucGljayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QucGljay8tL29iamVjdC5waWNrLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtaDZFS3hNRnBTOUxoeS9VMWthWmhRZnRkMTBjPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vbmNlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29uY2UvLS9vbmNlLTEuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtV0RzYXAzV1dIVXNST3NGOW5GQzY3NTNYYTlFPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ3cmFwcHkiOiAiMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvb25ldGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbmV0aW1lLy0vb25ldGltZS01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta2JwYVNTR0pUV2RBWTVLUFZlTU9LWFNyUHRyOEM4Qzd3b2RKYmNzZDUxalJubUQrR1p1OFkwVm9VNkRtNVo0dldyMElnLzFOS3VXUktmN2o1YWFZU2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtaW1pYy1mbiI6ICJeMi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9vcHRpb25hdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wdGlvbmF0b3IvLS9vcHRpb25hdG9yLTAuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rSVc5cEFDZGszWFdtbVRYRzhtM3VwR1VKc3Q1WFJHenhNUmpYekF1SjFYbklGTnZmaGpqSXVZa0R2eXNuUFE3cXpxVnpMdDc4QkNydW50cVJoV1FiQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlZXAtaXMiOiAifjAuMS4zIiwKLSAgICAgICAgImZhc3QtbGV2ZW5zaHRlaW4iOiAifjIuMC42IiwKLSAgICAgICAgImxldm4iOiAifjAuMy4wIiwKLSAgICAgICAgInByZWx1ZGUtbHMiOiAifjEuMS4yIiwKLSAgICAgICAgInR5cGUtY2hlY2siOiAifjAuMy4yIiwKLSAgICAgICAgIndvcmQtd3JhcCI6ICJ+MS4yLjMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wLWVhY2gtc2VyaWVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtZWFjaC1zZXJpZXMvLS9wLWVhY2gtc2VyaWVzLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15Y0lMMisxVjMydGgrOHNjYnBUdnlITmFIZTAyejBzamdoOTFYWGpBaytaZVhvUE40WjQ2RFZVbnpkc28wYVg0S2NrS3cwRk5ORkhkaloyVXNadnhpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wLWZpbmFsbHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1maW5hbGx5Ly0vcC1maW5hbGx5LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUDd6N0ZiaVpwRUVqczB0dHpCaTNKRE5xTEs0PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3AtbGltaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1saW1pdC8tL3AtbGltaXQtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS8vODhtRldTSng4bHhDendkQUFCVEpMMk15V0IxMitlSVk3TURMMlNxTG1Ba2VLVTlxeFJ2V3VTeVRqbTNGVW1wQkVNdUZmY2tBSXFFYVZHVUR4YjZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicC10cnkiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcC1sb2NhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcC1sb2NhdGUvLS9wLWxvY2F0ZS00LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUjc5WlovMHdBeEtHdTNvWU1sejhqeS9rYmhzTnJTN1NLWjdQeEVIQmdKNStGMm10RlcyZksyY090QmgxY0hZa1FzYnpGVjdJK0VvUktlNll0MG9LN0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4yLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wLXRyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLXRyeS8tL3AtdHJ5LTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNG5QQVZUQVUwQjlEMzUvR2szdUpmLzdYWWJRY3lvaFNLZHZBeElSU05naEZsNGU3MWhWb0duQk5RejljV2FYeE8ySTEwS1RDKzNqTWR2dm9LdzZkUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGFyc2UtanNvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXlDS3ZtL3BoQ0d4T2tZUlNDTTgyaUR3Y3Q4L0VvblNFZ0NTeFd4RDd2ZTZqSGdnc0ZsNGZaVlFCUFJOZ1FvS2l1Vi9vZGhGckd6UVhad2JpZkM4Umc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29kZS1mcmFtZSI6ICJeNy4wLjAiLAotICAgICAgICAiZXJyb3ItZXgiOiAiXjEuMy4xIiwKLSAgICAgICAgImpzb24tcGFyc2UtZXZlbi1iZXR0ZXItZXJyb3JzIjogIl4yLjMuMCIsCi0gICAgICAgICJsaW5lcy1hbmQtY29sdW1ucyI6ICJeMS4xLjYiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc2luZHJlc29yaHVzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXJzZTUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2U1Ly0vcGFyc2U1LTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PZm4vQ1RGelJHVFR4d3BORXM5UFA5M2dYU2hIY1RxMjU1bnpSWVNLZThBa1ZwWlk3ZTFmcG1UZk95b0l2alA1SEc3WjJaTTdWUzlQUGhRR1cycE9wdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Bhc2NhbGNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFzY2FsY2FzZS8tL3Bhc2NhbGNhc2UtMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1zMlBsWG9BR3ltL2lGNFRTMnlLOUZkZVJmeFE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLWV4aXN0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4aXN0cy8tL3BhdGgtZXhpc3RzLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hazlReTVRN2pZYjJXd2NleTVGcHZnMktvQWMvWkloTFNMT1NCbVJteWdQc0d3a1ZWdDBmWmEwcXJ0TXorbTZ0SlRBSGZaUThGbm1CNE1HNExXeTcvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcGF0aC1pcy1hYnNvbHV0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWlzLWFic29sdXRlLy0vcGF0aC1pcy1hYnNvbHV0ZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUYwdVNhSE5WTlArOGVzNXI5VHBhbmh0Y1gxOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BhdGgta2V5IjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgta2V5Ly0vcGF0aC1rZXktMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9qbWVOMHFkK3kwanN6RXRvWTQ4cjBQZXE1ZHdNRWtJbENPdTZRNWY0MWxma3N3WHVLdFlyaGdvVHBMbnlJY0htMjRVaHF4KzVUcW0ySW5Td0xoRTZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wYXRoLXBhcnNlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtcGFyc2UvLS9wYXRoLXBhcnNlLTEuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MREp6UFZFRUVQUit5NDh6OTNBMEVkMHlYYjhwQUJ5R1dvL2s1WVlkWWdwWTIvMkVzT3Nrc0pycTdsT0h4cnlyVk9uMWVqRzZvQXA4YWh2T0lRRDhzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BpY29tYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvbWF0Y2gvLS9waWNvbWF0Y2gtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxZMVEvUGlKR0Myek92L3ozOTFXT1REK1owMmJDZ3NGZnZ4b1hYZjZoN2t2OW8rV21zbXpZcXJBd1k2M3NOZ094RTR4RWRxMFd5VW5YZktlQnJTdll3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjYiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2pvbnNjaGxpbmtlcnQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BpcmF0ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGlyYXRlcy8tL3BpcmF0ZXMtNC4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVd1TnFMVGJNSTN0bWZlZjJUS3hsUW1BaUxIS3RGaGxzQ1puUElwdXYyT3cwUkRWTzhsZnkxT3BmNE5VemxNWExqUGwrTWVuN0F1VmRYNlRBK3MrdUdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibm9kZS1tb2R1bGVzLXJlZ2V4cCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3BrZy1kaXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGtnLWRpci8tL3BrZy1kaXItNC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUhSRHpiYUtqQytBT1dWWHhBVS94NTRDT0dlSXY5ZWIrNkNrRFNRb05UdDRYeVdvSUp2dVBzWGl6eHUvRnIyM0VpZWtidFp3bWgxSWNJRy9sL2ExMEdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZmluZC11cCI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcG9zaXgtY2hhcmFjdGVyLWNsYXNzZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcG9zaXgtY2hhcmFjdGVyLWNsYXNzZXMvLS9wb3NpeC1jaGFyYWN0ZXItY2xhc3Nlcy0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUFlckEvanRhOXhvcWJBTCtxN2pCL3ZmZ0Rxcz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ByZWx1ZGUtbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJlbHVkZS1scy8tL3ByZWx1ZGUtbHMtMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1JWk1xVko5ZVV2L1pxQ2YxY09CTDVpcVgybFE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcmV0dGllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dGllci8tL3ByZXR0aWVyLTMuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03Q0F3eTVkUnN4czhQSFhUM3R3aXhXOS9PRWxsOE1MRTBWUlBDSnlsN0NrUzZWSEdQU2xzVmFXVGlBU1BUeUd5WVJ5QXB4bGFXVHp3VXhWTnJoY3dEZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInByZXR0aWVyIjogImJpbi9wcmV0dGllci5janMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTQiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3ByZXR0aWVyL3ByZXR0aWVyP3Nwb25zb3I9MSIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03QWVHdUNZTkdteWN5UWJDcWQvM1BXSDRlT29YL09pQ2EwdXBocDU3TlZUZUFHZEpHYUFsaWVjeHdCREhZUUNJdnJXN2FEQlpDWWVOVFAvV1g2OW1rZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjAiLAotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjQuMC4wIiwKLSAgICAgICAgInJlYWN0LWlzIjogIl4xNy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wcm9tcHRzIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb21wdHMvLS9wcm9tcHRzLTIuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FUXlmSXVPMmhQRHNYMUwvYmxibFYrSDdJMGtuaGdBZDgyY1ZuZUN3Y2RORDlCOEF1Q0R1UmNCSDZ5SWNHNGRGemxPVXFiYXpRcXdHang1eG1zTkx1UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtsZXVyIjogIl4zLjAuMyIsCi0gICAgICAgICJzaXN0ZXJhbnNpIjogIl4xLjAuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcHNsIjogewotICAgICAgInZlcnNpb24iOiAiMS44LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BzbC8tL3BzbC0xLjguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUklkT3p5b2F2SytoQTE4T0dHV0RxVVRzQ0xodEE3SWNaLzZOQ3M0ZkZKYUhCRGFiK3BERG1ESUJ5V0ZSUUpxMkNkN3IxT29ReEJHS09henRxK2hqSVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wdW1wIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3B1bXAvLS9wdW1wLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Md1p5K3AzU0ZzMVB5dGQvalljdDR3cHY0OUhpWUNxZDlSbGM1WlZkazBWKzhZenY2alI1QmxrM1RSbVBMMWZ0NjlUeFAwSU1aR0orV1BGVTJCRmh3dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVuZC1vZi1zdHJlYW0iOiAiXjEuMS4wIiwKLSAgICAgICAgIm9uY2UiOiAiXjEuMy4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9wdW55Y29kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wdW55Y29kZS8tL3B1bnljb2RlLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YUnNSamRmK2o1bWwreS82R0tIUFpickYvOHAyWWdhMEpQdGRxVElZMlhlNW9oSlBEOXNhREpKTFB2cDkrTlNCcHJWdmV2ZFhaeWJuajJjdjhPRWQwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhY3QtaXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWN0LWlzLy0vcmVhY3QtaXMtMTcuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13MkdzeXVrTDYySUpubGFmZi9uUmVnUFFSOTRDL1hYYW12TVdtU0hSSjR5N1RzLzRvY0dSbVRIdk9zOFBTRTZwQjNkV09yRC9udWV1VTVzZHVCc1E0dz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGtnIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtcGtnLy0vcmVhZC1wa2ctNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVnNjltTk9wZnZLREFjMlE4RFJwTWpqemR0cm52OUhjU01YKzRWc1p4RDFhWjZaenJJRTdybHpYQnRXVHloVUxTTUtnMDc2QVc2V1I1aVpwRDBKaU9nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQHR5cGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiAiXjIuNC4wIiwKLSAgICAgICAgIm5vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiAiXjIuNS4wIiwKLSAgICAgICAgInBhcnNlLWpzb24iOiAiXjUuMC4wIiwKLSAgICAgICAgInR5cGUtZmVzdCI6ICJeMC42LjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhZC1wa2ctdXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVhZC1wa2ctdXAvLS9yZWFkLXBrZy11cC03LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItekswVEI3WGQ2SnBDTG1sTG11ZnF5a0dFKy9UbE9lUEQ2cUtDbE5XN2hIREtGaC9KNy83Z0NXR1I3am9FUUVXMWJLcTNhM3lVWlNPYk9vV0xGUTRvaGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJmaW5kLXVwIjogIl40LjEuMCIsCi0gICAgICAgICJyZWFkLXBrZyI6ICJeNS4yLjAiLAotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjguMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlYWQtcGtnLXVwL25vZGVfbW9kdWxlcy90eXBlLWZlc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjguMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuOC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00ZGJ6SXpxdmp0Z2lNNXJ3MWs1ckVIdEJBTkttZHVkaEd5QkVhak4wMWZFeWhhQUloc29LTnk2eTcrSU45M0lmcEZ0d1k5aXFpN2tEK3h3S2hRc05KQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVhZC1wa2cvbm9kZV9tb2R1bGVzL3R5cGUtZmVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWZlc3QvLS90eXBlLWZlc3QtMC42LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXErTUI4bllSMUtETHJncjRHNXllbWZ0cE1DNy9RTHFWbmRCbUVFZHF6bU5qNWRjRk9PNE9vOHFsd1pFM1VMVDMrWmltMUY4S3E0Y0JuaWtOaGxDTWxnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZWdleC1ub3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVnZXgtbm90Ly0vcmVnZXgtbm90LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KNlNEalVnRHhRajVOdXNuT3RkRnhEd04vK0hXeWtSOEdFTHdjdEo3bWRxaGN5eTF4RWM0U1JGSFVYdnhUcDY2MVlhVktBamZSTFo5Y0NxUzZ0bjMyQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4zLjAuMiIsCi0gICAgICAgICJzYWZlLXJlZ2V4IjogIl4xLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlbW92ZS10cmFpbGluZy1zZXBhcmF0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVtb3ZlLXRyYWlsaW5nLXNlcGFyYXRvci8tL3JlbW92ZS10cmFpbGluZy1zZXBhcmF0b3ItMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS13a3ZPS2lnNjJ0VzhQMWpnMUlKSnVTTjUyTzg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcGVhdC1lbGVtZW50IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlcGVhdC1lbGVtZW50Ly0vcmVwZWF0LWVsZW1lbnQtMS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUxGaU5mUmNTdTdLSzNldk15WU91Q3p2M0wxMFRXN3lDMUcyLytTdE1qSzhZNlZxZDJNRzdyL1FqdzRnaHR1Q09qRnZsbm1zL2lNbUxxcHZXL0VTL1dRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcGVhdC1zdHJpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjYuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVwZWF0LXN0cmluZy8tL3JlcGVhdC1zdHJpbmctMS42LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1qY3JrY09ISWlyd3RZQS8vU25kaWh0cDE1amM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVxdWlyZS1kaXJlY3RvcnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVxdWlyZS1kaXJlY3RvcnkvLS9yZXF1aXJlLWRpcmVjdG9yeS0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWpHU3RYOU1OcXh5WGJpTkUvK2Yza3FhbTMwST0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JlcXVpcmUtbWFpbi1maWxlbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlLW1haW4tZmlsZW5hbWUvLS9yZXF1aXJlLW1haW4tZmlsZW5hbWUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5LTjVrTUR5bEt1bGR4WUxTVWZyYm81VHV6aDRoZCsyRThOUFBYMDJtWnRuMVZ1UkVRVG9ZZS9aZGxKeStKM3VDcGZhaUdGMDVlN0I4VzBpWGJRSG1nPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS8tL3Jlc29sdmUtMS4yMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi13RU5CUHQ0eVN6ZzR5YkZRVzJUVDF6TVF1Y1BLOTVIU2gvbnEyQ0ZUWlZPR3V0MitwUXZTc2d0ZGE0ZDI2WXJZY3IwNjd3amJtek9HOGJ5RFBCWDYzQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWNvcmUtbW9kdWxlIjogIl4yLjIuMCIsCi0gICAgICAgICJwYXRoLXBhcnNlIjogIl4xLjAuNiIKLSAgICAgIH0sCi0gICAgICAiZnVuZGluZyI6IHsKLSAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvbGpoYXJiIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXNvbHZlLWN3ZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLWN3ZC8tL3Jlc29sdmUtY3dkLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PclphWDJNYitySkNwSC82Q3BTcXQ5eEZWcE4rK3gwMVhuTjJpZTlnNlA1LzN4ZWxMQWtYV1ZBRHBkejFJSEQvS0ZmRVh5RTZWMFUwMU9RM1VPMnJFZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvcmVzb2x2ZS1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtZnJvbS8tL3Jlc29sdmUtZnJvbS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVlnOUtQMjRkRDVxa2E5SjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlEbmpCNXdha3NpQzQ5cnZNQjBQclVKUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZWnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Jlc29sdmUtdXJsIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtdXJsLy0vcmVzb2x2ZS11cmwtMC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1MR04vNTN5Sk92MHFaai9pR3FrSUFHamlCU289IiwKLSAgICAgICJkZXByZWNhdGVkIjogImh0dHBzOi8vZ2l0aHViLmNvbS9seWRlbGwvcmVzb2x2ZS11cmwjZGVwcmVjYXRlZCIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yZXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMTUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JldC8tL3JldC0wLjEuMTUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRUbFlwYStPTCt2TU1ORzI0eFNsUUdFSjNCL1J6RWZVbExjdDdiNUcveXRhdit3UHJwbENwVk1GdXd6WGJrZWNKcmI2SVlvMWlGYjBTOXYzNzc1NG1nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEyIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9yaW1yYWYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmltcmFmLy0vcmltcmFmLTMuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KWmtKTVprQUdGRlBQMllxWFpYUGJNbE1CZ3N4ekU4SUxzNGxNSVgvMm8wTDlVQnc5Ty9ZM282d0Z3L2k5WUxhcGNVSld3cWJpM2tkeElQZEM2MlRJQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJyaW1yYWYiOiAiYmluLmpzIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9pc2FhY3MiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3JzdnAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjguNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnN2cC8tL3JzdnAtNC44LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5mTU9sQVN1OU9uUkpvMW1iRWsyY3owRDU2YTFNQk5ySjdvcmpSWlFHMTBYRHl1dndrc0tidVhOcDZxYStrYm44MzlId2p3aEJ6aEZtZHNhRUFmYXVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiNi4qIHx8ID49IDcuKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FmZS1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR2QyVVpCSkRrWGxZN0diSnhmc0U4L252S2tVRVUxRzM4YzFzaU42UVA2YTlQVDlNbUhCOEducHNjU21NSlNvRjhMT0lydDh1ZC93UHRvanlzNEc2K2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYWZlLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtcmVnZXgvLS9zYWZlLXJlZ2V4LTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtUUtObW56c0hmUjZVUFVSaW5oVjkxSUFqdnk0PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJyZXQiOiAifjAuMS4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FmZXItYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmVyLWJ1ZmZlci8tL3NhZmVyLWJ1ZmZlci0yLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWVpvM0s4MlNEN1JpeWkwRTFFUVBvakx6N2twZXBuU1FJOUl5UGJISGcxWFhYZXZiNWRKSTd0cHlOMkFEeEdjUWJIRzd2Y3lSSGswY2J3cWNRcmlVdGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhbmUvLS9zYW5lLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1oaGJ6QWdUSVg4TzdTSGZwMmM4L2tSRWZFbjRxTy85cThDOWJleVk2K3R2Wjg3RXBvWjNpMVJJRXZwMjdZQnN3bk5iWTltV2Q2cGFLVm1LYkFnTGZaQT09IiwKLSAgICAgICJkZXByZWNhdGVkIjogInNvbWUgZGVwZW5kZW5jeSB2dWxuZXJhYmlsaXRpZXMgZml4ZWQsIHN1cHBvcnQgZm9yIG5vZGUgPCAxMCBkcm9wcGVkLCBhbmQgbmV3ZXIgRUNNQVNjcmlwdCBzeW50YXgvZmVhdHVyZXMgYWRkZWQiLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGNuYWthemF3YS93YXRjaCI6ICJeMS4wLjMiLAotICAgICAgICAiYW55bWF0Y2giOiAiXjIuMC4wIiwKLSAgICAgICAgImNhcHR1cmUtZXhpdCI6ICJeMi4wLjAiLAotICAgICAgICAiZXhlYy1zaCI6ICJeMC4zLjIiLAotICAgICAgICAiZXhlY2EiOiAiXjEuMC4wIiwKLSAgICAgICAgImZiLXdhdGNobWFuIjogIl4yLjAuMCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl4zLjEuNCIsCi0gICAgICAgICJtaW5pbWlzdCI6ICJeMS4xLjEiLAotICAgICAgICAid2Fsa2VyIjogIn4xLjAuNSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAic2FuZSI6ICJzcmMvY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI2LiogfHwgOC4qIHx8ID49IDEwLioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL2FueW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FueW1hdGNoLy0vYW55bWF0Y2gtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV0ZU9zUVdBQlhISEJGUDl5M3NrUzVQM2QvV2ZXWHB2M0ZVcHkrTG9yTXJOWWFUOXBJNG9MTVFYN2p6UTJLa2xOcEdwV0h6ZENYVERUMlkzWEdsWkJ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibWljcm9tYXRjaCI6ICJeMy4xLjQiLAotICAgICAgICAibm9ybWFsaXplLXBhdGgiOiAiXjIuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lL25vZGVfbW9kdWxlcy9icmFjZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2VzLy0vYnJhY2VzLTIuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hTmRibmo5UDhQamRYVTR5YmFXTEsySUYzamMvRW9EWWJDN0Fhelc2dG8zVFJzZlh4c2NDOVVYT0I1aURpRVFya3lJYldwMlNMUWRhNCtRQWE3bmMzdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFyci1mbGF0dGVuIjogIl4xLjEuMCIsCi0gICAgICAgICJhcnJheS11bmlxdWUiOiAiXjAuMy4yIiwKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4yLjAuMSIsCi0gICAgICAgICJmaWxsLXJhbmdlIjogIl40LjAuMCIsCi0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjEiLAotICAgICAgICAicmVwZWF0LWVsZW1lbnQiOiAiXjEuMS4yIiwKLSAgICAgICAgInNuYXBkcmFnb24iOiAiXjAuOC4xIiwKLSAgICAgICAgInNuYXBkcmFnb24tbm9kZSI6ICJeMi4wLjEiLAotICAgICAgICAic3BsaXQtc3RyaW5nIjogIl4zLjAuMiIsCi0gICAgICAgICJ0by1yZWdleCI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lL25vZGVfbW9kdWxlcy9icmFjZXMvbm9kZV9tb2R1bGVzL2V4dGVuZC1zaGFsbG93IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGVuZC1zaGFsbG93Ly0vZXh0ZW5kLXNoYWxsb3ctMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VYTk5WVVyWnFmWVE2aHV2dTVpZGF4eFdpUTg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWV4dGVuZGFibGUiOiAiXjAuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvY3Jvc3Mtc3Bhd24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Jvc3Mtc3Bhd24vLS9jcm9zcy1zcGF3bi02LjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZVRWTHJCU3Q3ZmpiRHlnejgwNXBNbnN0SXMyVlRCTmtSbTBxeFpkK003QTVYRGR4VlJXTzVNeEdCWFpoalk0Y3FMWUxkdHJHcVJmOG1CUG16d1NwV1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJuaWNlLXRyeSI6ICJeMS4wLjQiLAotICAgICAgICAicGF0aC1rZXkiOiAiXjIuMC4xIiwKLSAgICAgICAgInNlbXZlciI6ICJeNS41LjAiLAotICAgICAgICAic2hlYmFuZy1jb21tYW5kIjogIl4xLjIuMCIsCi0gICAgICAgICJ3aGljaCI6ICJeMS4yLjkiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC44IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lL25vZGVfbW9kdWxlcy9leGVjYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjYS8tL2V4ZWNhLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hZGJ4Y3lXVjQ2cWlIeXZTcDUwVEt0MDV0QjR0SzNIY21GNy9ueGZBZGhub3g4M3NlVERid25hcUtPNHNYUnk3cm9IQUlGcUpQL1J3L0F1RWJYNjFMQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNyb3NzLXNwYXduIjogIl42LjAuMCIsCi0gICAgICAgICJnZXQtc3RyZWFtIjogIl40LjAuMCIsCi0gICAgICAgICJpcy1zdHJlYW0iOiAiXjEuMS4wIiwKLSAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICJeMi4wLjAiLAotICAgICAgICAicC1maW5hbGx5IjogIl4xLjAuMCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtZW9mIjogIl4xLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lL25vZGVfbW9kdWxlcy9maWxsLXJhbmdlIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbGwtcmFuZ2UvLS9maWxsLXJhbmdlLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMVVTQkhVS1BtT3NHcGozRUF0SkFQREtNT1BjPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMi4wLjEiLAotICAgICAgICAiaXMtbnVtYmVyIjogIl4zLjAuMCIsCi0gICAgICAgICJyZXBlYXQtc3RyaW5nIjogIl4xLjYuMSIsCi0gICAgICAgICJ0by1yZWdleC1yYW5nZSI6ICJeMi4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lL25vZGVfbW9kdWxlcy9maWxsLXJhbmdlL25vZGVfbW9kdWxlcy9leHRlbmQtc2hhbGxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHRlbmQtc2hhbGxvdy8tL2V4dGVuZC1zaGFsbG93LTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVWE5OVlVclpxZllRNmh1dnU1aWRheHhXaVE4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL2dldC1zdHJlYW0iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LXN0cmVhbS8tL2dldC1zdHJlYW0tNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdNYXQ0RUo1MTYxa0l5MkhldkxscjRsdU5qQmd2bWo0MTNLYVFBN2p0NFY4QjRSRHNmcEhrN1dROUdWcWZZeXl4OE9TL0w2NktveCtySlJOa2xMSzd3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHVtcCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvaXMtZXh0ZW5kYWJsZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRlbmRhYmxlLy0vaXMtZXh0ZW5kYWJsZS0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVlyRVE0b21rY1VHT1BzTnFZWDFITGpBZC9Jaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL2lzLW51bWJlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1udW1iZXIvLS9pcy1udW1iZXItMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1KUDFpQWFSNExQVUZZY2dRSjJyOGZSTFhFWlU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvaXMtbnVtYmVyL25vZGVfbW9kdWxlcy9raW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvaXMtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXN0cmVhbS8tL2lzLXN0cmVhbS0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUV0U2ozVTVvNExlYzY0MjhoQmM2NkEyUnlrUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL21pY3JvbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMTAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pY3JvbWF0Y2gvLS9taWNyb21hdGNoLTMuMS4xMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTVdpa2dsOW45TTN3K2Jwc1kzSGU4TCt3OWVGOTMzOHhSbDhJQU81dmlEaXp3U3p6aUZFeVV6bzJ4cnJsb0I2NEFEYlRmOHVBOHZScXF0dERUT21jY2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnItZGlmZiI6ICJeNC4wLjAiLAotICAgICAgICAiYXJyYXktdW5pcXVlIjogIl4wLjMuMiIsCi0gICAgICAgICJicmFjZXMiOiAiXjIuMy4xIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMi4wLjIiLAotICAgICAgICAiZXh0ZW5kLXNoYWxsb3ciOiAiXjMuMC4yIiwKLSAgICAgICAgImV4dGdsb2IiOiAiXjIuMC40IiwKLSAgICAgICAgImZyYWdtZW50LWNhY2hlIjogIl4wLjIuMSIsCi0gICAgICAgICJraW5kLW9mIjogIl42LjAuMiIsCi0gICAgICAgICJuYW5vbWF0Y2giOiAiXjEuMi45IiwKLSAgICAgICAgIm9iamVjdC5waWNrIjogIl4xLjMuMCIsCi0gICAgICAgICJyZWdleC1ub3QiOiAiXjEuMC4wIiwKLSAgICAgICAgInNuYXBkcmFnb24iOiAiXjAuOC4xIiwKLSAgICAgICAgInRvLXJlZ2V4IjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL25vcm1hbGl6ZS1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vcm1hbGl6ZS1wYXRoLy0vbm9ybWFsaXplLXBhdGgtMi4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HcktMVlc0WmcyT293YWIzNXZvZ0UzL21ydGs9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInJlbW92ZS10cmFpbGluZy1zZXBhcmF0b3IiOiAiXjEuMC4xIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvbnBtLXJ1bi1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25wbS1ydW4tcGF0aC8tL25wbS1ydW4tcGF0aC0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU5ha2pMZm8xMXdaN1RMTGQ4alY3R0hGVGJGOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicGF0aC1rZXkiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL3BhdGgta2V5IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgta2V5Ly0vcGF0aC1rZXktMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1RUnl0dFhURm9VRFRwTEdSRFVEWURNbjBDMEE9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNS43LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2F1YURmL1BaZFZnckxUTllIUnRwWGExaVJpS2NhZWJpS1ExQkpkcFFsV0gybEN2ZXhRZFg1NXNuUEZ5SzdRenB1ZHFiQ0kwcVhGZk9hc0hkeU5ER1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlciIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvc2hlYmFuZy1jb21tYW5kIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctY29tbWFuZC8tL3NoZWJhbmctY29tbWFuZC0xLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVJLckdXMmxiQXptSmFNT2ZOai91WGVyOThlbz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2hlYmFuZy1yZWdleCI6ICJeMS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zYW5lL25vZGVfbW9kdWxlcy9zaGViYW5nLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctcmVnZXgvLS9zaGViYW5nLXJlZ2V4LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMmtMMGwwREF0QzJ5eXBjb1Z4eXhrTW1PL3FNPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2FuZS9ub2RlX21vZHVsZXMvdG8tcmVnZXgtcmFuZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tcmVnZXgtcmFuZ2UvLS90by1yZWdleC1yYW5nZS0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWZJREJlNTMrdmxtZUp6WitEVTNWV1FGQjJ6Zz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtbnVtYmVyIjogIl4zLjAuMCIsCi0gICAgICAgICJyZXBlYXQtc3RyaW5nIjogIl4xLjYuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NhbmUvbm9kZV9tb2R1bGVzL3doaWNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLy0vd2hpY2gtMS4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUh4SmRZV3ExTVRJUWJKM253MGNxc3NIb1ROVTI2N0tsckR1R1oxV1lseERTdFV0S1VoT2FKbWgxMTIvVFptSHh4VWZ1SnFQWFNPbTd0RHlhczBPU0lRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXNleGUiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJ3aGljaCI6ICJiaW4vd2hpY2giCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NheGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheGVzLy0vc2F4ZXMtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVMQmgxVGxzOGM5eGdHanczUXJNd0VUbVRNVmswb0ZndnJGU3ZXeDYybGxSMmhjRUlucktOWjJHWkNDdXV5Mmx2V3JkbDVqaGJwZXFjNWhSWUtGT2N3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieG1sY2hhcnMiOiAiXjIuMi4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTYuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iMzlUQmFUU2ZWNnlCcmFwVTg5cDVmS2VrRTJtL053bkRvY09WcnVRRlMxL3ZlTWdkenVQY25PTTM0TTZDd3hXOGpIL2x4RWE1ckJvRGVVd3U1SEhUdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXQtYmxvY2tpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0LWJsb2NraW5nLy0vc2V0LWJsb2NraW5nLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQkYrWGd0QVJycHBvQTkzVGdySkRrclBZa1BjPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXQtdmFsdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0LXZhbHVlLy0vc2V0LXZhbHVlLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KeEhjMXdlQ042OHdSWTBmaENvWHB5SzU1bS9YUEhhZk9tSzRVV0Q3bTJDSTE0R01jRnlwdDR3LzArTlY1Zi9aTWJ5MkY2UzJ3d0E3Zmd5bmg5Z1dTdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4yLjAuMSIsCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4wLjEuMSIsCi0gICAgICAgICJpcy1wbGFpbi1vYmplY3QiOiAiXjIuMC4zIiwKLSAgICAgICAgInNwbGl0LXN0cmluZyI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zZXQtdmFsdWUvbm9kZV9tb2R1bGVzL2V4dGVuZC1zaGFsbG93IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGVuZC1zaGFsbG93Ly0vZXh0ZW5kLXNoYWxsb3ctMi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VYTk5WVVyWnFmWVE2aHV2dTVpZGF4eFdpUTg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWV4dGVuZGFibGUiOiAiXjAuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2V0LXZhbHVlL25vZGVfbW9kdWxlcy9pcy1leHRlbmRhYmxlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWXJFUTRvbWtjVUdPUHNOcVlYMUhMakFkL0lrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2hlYmFuZy1jb21tYW5kIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctY29tbWFuZC8tL3NoZWJhbmctY29tbWFuZC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta0h4cjJ6WnBZdGRtck4xcURqcnJYL1oxclIxa0c4RHgrZ2twSzFHNGVYbXZYc3dtY0UxaFRXQldZVXpscmFZdzEveVpwNll1RFk3N1l0dmJOMGRtREE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzaGViYW5nLXJlZ2V4IjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zaGViYW5nLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NoZWJhbmctcmVnZXgvLS9zaGViYW5nLXJlZ2V4LTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03KytkRmh0Y3gzMzUzdUJhcThERFI0TnV4QmV0QnpDN1pRT2htVFFJbkhFZDZiU3JYZGlFeXpDdkcwN1o0NFVZZExTaFdVeVh0NU0veWh6OGVrY2IxQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2hlbGx3b3JkcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGVsbHdvcmRzLy0vc2hlbGx3b3Jkcy0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdkZ3U1VmUXZxeWJpSUN3Wlk1K0RBV0lQTEtzV08zMVE5MUpTS2wzVVl2K0s1YzJRUlB6bjBxemVjNlFQdTFRYzllSFlJdGlQM05kSnFOVnFldFlBd3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc2lnbmFsLWV4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lnbmFsLWV4aXQvLS9zaWduYWwtZXhpdC0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlVKNDlGQzhVMU94d1pMeEliVFRyRHZMbmYvNlREZ3haY0s4d3hSOHpzMTN4cHg3eGJHNjBuZEJsaE5yRmkyRU11RlJvZURvSk83d3RoU0xxNDJFakE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zaXN0ZXJhbnNpIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Npc3RlcmFuc2kvLS9zaXN0ZXJhbnNpLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iTEdHbFIxUXhCY3lubjJkNVltRFg0TUdqbFp2eTJNUkJEUk5ITEo4Vkk2bDYrOUZVaXlURk5KMEl2ZU9TUDBiY1hnVkRQUmNmR3FBMHBqYXFVcGZWZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NsYXNoIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NsYXNoLy0vc2xhc2gtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc5UTFoYWVieTM2T1NTdHdiNG50Q0dHR2FLc2FWU2pRNjhmQnhvUWN1dGw1ZlMxdnVZMThIM3dTdDNqRnlGdHJreCtLejBWMUc4NUE0TXlBZERNaTJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uIjogewotICAgICAgInZlcnNpb24iOiAiMC44LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NuYXBkcmFnb24vLS9zbmFwZHJhZ29uLTAuOC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GdHlPbldOL3dDSFRWWE9Nd3ZTdjI2ZCtrbzV2V2xJREQ2em9VSjdMVzh2aCtaQkM4UWRsanZlUlArY3JOcnRCd2lvRVVXeS80ZE10YkJqQTRpb05sZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJhc2UiOiAiXjAuMTEuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeMi4yLjAiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMi4wLjEiLAotICAgICAgICAibWFwLWNhY2hlIjogIl4wLjIuMiIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjUuNiIsCi0gICAgICAgICJzb3VyY2UtbWFwLXJlc29sdmUiOiAiXjAuNS4wIiwKLSAgICAgICAgInVzZSI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uLW5vZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc25hcGRyYWdvbi1ub2RlLy0vc25hcGRyYWdvbi1ub2RlLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PMjdsNHhhTVl0L1JTUTVUUjN2cFdDQUI1S2IvY3pJY3FVRk9NL0M0ZlljTG5iWlVjMVBralRBTWpvZjJwQldhU1R3T1VkNnFVSGNGR1ZHajdhSXdudz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4wIiwKLSAgICAgICAgInNuYXBkcmFnb24tdXRpbCI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uLW5vZGUvbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kcDY2cno5S1k2clRyNTZOTUV5YnZubS9zT1k9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc25hcGRyYWdvbi11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NuYXBkcmFnb24tdXRpbC8tL3NuYXBkcmFnb24tdXRpbC0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbWJLa01kUUtzalg0QkFMNGJSWVRqMjFlZE9mOGNON1hIZFlVSkVlK1puOTloVkVZY012S1BjdDFJcU5lNytBWlBpcm44QkNET1FCSFFaa25xbUtsWlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl4zLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24tdXRpbC9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24vbm9kZV9tb2R1bGVzL2RlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiMi42LjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMi42LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibXMiOiAiMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24vbm9kZV9tb2R1bGVzL2RlZmluZS1wcm9wZXJ0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMC4yLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS13MXNlK1Jqc1BKa1BtbHZGZStCS3JPeGNnUlk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjAuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc25hcGRyYWdvbi9ub2RlX21vZHVsZXMvZXh0ZW5kLXNoYWxsb3ciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0ZW5kLXNoYWxsb3cvLS9leHRlbmQtc2hhbGxvdy0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVVhOTlZVXJacWZZUTZodXZ1NWlkYXh4V2lROD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6ICJeMC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uL25vZGVfbW9kdWxlcy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3IvLS9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLTAuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcWVFc3M2Nk5oMmNuN3U4NFEvaWdpWHRjbU5ZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24vbm9kZV9tb2R1bGVzL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3Ivbm9kZV9tb2R1bGVzL2tpbmQtb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uL25vZGVfbW9kdWxlcy9pcy1kYXRhLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0YS1kZXNjcmlwdG9yLy0vaXMtZGF0YS1kZXNjcmlwdG9yLTAuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQzE3bVNEaU9MSVlDZ3VlVDhZVnY3RDh3RzFZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24vbm9kZV9tb2R1bGVzL2lzLWRhdGEtZGVzY3JpcHRvci9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24vbm9kZV9tb2R1bGVzL2lzLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGVzY3JpcHRvci8tL2lzLWRlc2NyaXB0b3ItMC4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2RFlyMFNCM0R3Tzl6c01vdjBnS0NFU0ZZcUNuRTRocS80ejNUZFVsdWtFeTV0OUMwWVJxN0hMcnNONTJOQWNxWEthZXBlQ0QwbitCMGFyblZHM0hnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6ICJeMC4xLjYiLAotICAgICAgICAiaXMtZGF0YS1kZXNjcmlwdG9yIjogIl4wLjEuNCIsCi0gICAgICAgICJraW5kLW9mIjogIl41LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NuYXBkcmFnb24vbm9kZV9tb2R1bGVzL2lzLWV4dGVuZGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0ZW5kYWJsZS8tL2lzLWV4dGVuZGFibGUtMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ZckVRNG9ta2NVR09Qc05xWVgxSExqQWQvSWs9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uL25vZGVfbW9kdWxlcy9raW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTUuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OR0VFcm5INkYydlV1WERoK09sYmNLVzcvd09jZmRSSGFaN1ZXdHFDenRmSHJpLysrWUttUDUxT2RXZUdQdXFDT2JhNmtrMk9UZTVkMDJWbVRCODBQdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uL25vZGVfbW9kdWxlcy9tcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zbmFwZHJhZ29uL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNS43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtaWdPZExSQWgwaTBlb1V5QTJPcEdpNkx2UDh3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMC41LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtcmVzb2x2ZS8tL3NvdXJjZS1tYXAtcmVzb2x2ZS0wLjUuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSHR6K1Juc1hXazUrUDJzbHg1SmgzUTY2dmhRajFDbGxtMHp2bmFZOTgrTkZ4K0R2MkNGL2Y1Ty90OHgrS2FOZHJkSUFzcnVOem9oL0twaWFsYnFBbnc9PSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJTZWUgaHR0cHM6Ly9naXRodWIuY29tL2x5ZGVsbC9zb3VyY2UtbWFwLXJlc29sdmUjZGVwcmVjYXRlZCIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhdG9iIjogIl4yLjEuMiIsCi0gICAgICAgICJkZWNvZGUtdXJpLWNvbXBvbmVudCI6ICJeMC4yLjAiLAotICAgICAgICAicmVzb2x2ZS11cmwiOiAiXjAuMi4xIiwKLSAgICAgICAgInNvdXJjZS1tYXAtdXJsIjogIl4wLjQuMCIsCi0gICAgICAgICJ1cml4IjogIl4wLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcC1zdXBwb3J0IjogewotICAgICAgInZlcnNpb24iOiAiMC41LjE5IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXN1cHBvcnQvLS9zb3VyY2UtbWFwLXN1cHBvcnQtMC41LjE5LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Xb25tN3pPQ0lKekJHUWRCK3Roc1BhcjBrWXVDSXpZdnhad2xCYTg3eWkvTWRqdjdUaXAyY3lWYkxqNW8wY0ZQTjRFVmt1VHdiM0dERHlVeDJER25Hdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJ1ZmZlci1mcm9tIjogIl4xLjAuMCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc291cmNlLW1hcC11cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC11cmwvLS9zb3VyY2UtbWFwLXVybC0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY1BpRk9UTFVLdkpGSWc0U0tWU2N5NGlsUFBXNnJGZ01nZnVaSlBOb0R1TXMzbkMxSGJNVXljQm9Kdzc3eEZJcDZ6MVVKUUpPZng2QzlHTUg4MERpVHc9PSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJTZWUgaHR0cHM6Ly9naXRodWIuY29tL2x5ZGVsbC9zb3VyY2UtbWFwLXVybCNkZXByZWNhdGVkIiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NwZHgtY29ycmVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR4LWNvcnJlY3QvLS9zcGR4LWNvcnJlY3QtMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNPWWNVV3doQ3VIQ1hpNDlSaEZSQ3lKRUszaVBqMVppejlEcFZpVjN0YlpPd1hENDlReklOM01wT0xKTnhoMnF3cTJsSkpaYUtNVnc5cU5pNGpUQzB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3BkeC1leHByZXNzaW9uLXBhcnNlIjogIl4zLjAuMCIsCi0gICAgICAgICJzcGR4LWxpY2Vuc2UtaWRzIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3BkeC1leGNlcHRpb25zIjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHgtZXhjZXB0aW9ucy8tL3NwZHgtZXhjZXB0aW9ucy0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItL3RUcllPQzdQUEkxblVBZ3gzNGhVcHFYdXlKRytEVEhKVG5JVUxHNHJEeWdpNHh1L3RmZ21xMWUxY0lSd1J6d1pnbzROTHlTaStyaWNMa1prdzRpNUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcGR4LWV4cHJlc3Npb24tcGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BkeC1leHByZXNzaW9uLXBhcnNlLy0vc3BkeC1leHByZXNzaW9uLXBhcnNlLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jYnFIdW5zUVduSk5FNktoVlNNc01lSDVIL0w5RXB5bWJ6cVRRM3VMd05DTFoxUTQ4MW9XYW9mcUg3bk82VjA3eGxYd1k2UGhRZFEySWVkV3gvWks0UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNwZHgtZXhjZXB0aW9ucyI6ICJeMi4xLjAiLAotICAgICAgICAic3BkeC1saWNlbnNlLWlkcyI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3NwZHgtbGljZW5zZS1pZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuOSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BkeC1saWNlbnNlLWlkcy8tL3NwZHgtbGljZW5zZS1pZHMtMy4wLjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtpMjEyZEtLNG9nWCt4RG80Q3RPWkJWSXdoc0tCRWZzRUVjd21KZkxRemlyZ2MyaklXZHpnNDBVbnh6L0h6RVVxTTFXRnpWbFFTTUY5a1paMkhib0xRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3BsaXQtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwbGl0LXN0cmluZy8tL3NwbGl0LXN0cmluZy0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnpOVmhKRFlwd2NlVlZpaTgvSHU2REtmRDJHK05yUUhsUy9WL3Fndjc2M0VZdWRWd0VjTVFOeGQybGgrMFZyVUJ5WE4vb0prbDVnck9oWVd2UVVZaXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQk9hU2IyWW9sVFZQUGRBVklEWXp1RmNwZml3PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGFjay11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGFjay11dGlscy8tL3N0YWNrLXV0aWxzLTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nTC8vZmt4ZldVc0lsRkwyVGw0MkNsNitIRkFMRWFCMUZVNzZJL0Z5K29aalJyZVA3T1BNWEZsR2J4TTdOUXNJMFpwVWZ3NzZzSG52MFdOWXVUYjdJdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RhdGljLWV4dGVuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGF0aWMtZXh0ZW5kLy0vc3RhdGljLWV4dGVuZC0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVlJQ2NPY3YvVlROeUp2MWVDMUlQTkI4ZnRjWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJvYmplY3QtY29weSI6ICJeMC4xLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdGF0aWMtZXh0ZW5kL25vZGVfbW9kdWxlcy9kZWZpbmUtcHJvcGVydHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnR5Ly0vZGVmaW5lLXByb3BlcnR5LTAuMi41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdzFzZStSanNQSmtQbWx2RmUrQktyT3hjZ1JZPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0YXRpYy1leHRlbmQvbm9kZV9tb2R1bGVzL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYWNjZXNzb3ItZGVzY3JpcHRvci8tL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3ItMC4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1xZUVzczY2TmgyY243dTg0US9pZ2lYdGNtTlk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RhdGljLWV4dGVuZC9ub2RlX21vZHVsZXMvaXMtYWNjZXNzb3ItZGVzY3JpcHRvci9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0YXRpYy1leHRlbmQvbm9kZV9tb2R1bGVzL2lzLWRhdGEtZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kYXRhLWRlc2NyaXB0b3IvLS9pcy1kYXRhLWRlc2NyaXB0b3ItMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DMTdtU0RpT0xJWUNndWVUOFlWdjdEOHdHMVk9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RhdGljLWV4dGVuZC9ub2RlX21vZHVsZXMvaXMtZGF0YS1kZXNjcmlwdG9yL25vZGVfbW9kdWxlcy9raW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RhdGljLWV4dGVuZC9ub2RlX21vZHVsZXMvaXMtZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kZXNjcmlwdG9yLy0vaXMtZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXZEWXIwU0IzRHdPOXpzTW92MGdLQ0VTRllxQ25FNGhxLzR6M1RkVWx1a0V5NXQ5QzBZUnE3SExyc041Mk5BY3FYS2FlcGVDRDBuK0IwYXJuVkczSGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogIl4wLjEuNiIsCi0gICAgICAgICJpcy1kYXRhLWRlc2NyaXB0b3IiOiAiXjAuMS40IiwKLSAgICAgICAgImtpbmQtb2YiOiAiXjUuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RhdGljLWV4dGVuZC9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi01LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdFRXJuSDZGMnZVdVhEaCtPbGJjS1c3L3dPY2ZkUkhhWjdWV3RxQ3p0ZkhyaS8rK1lLbVA1MU9kV2VHUHVxQ09iYTZrazJPVGU1ZDAyVm1UQjgwUHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLWxlbmd0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpbmctbGVuZ3RoLy0vc3RyaW5nLWxlbmd0aC00LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK2w2ck5ONWZZSE5oWlp5NDFSWHNZcHRDakEySWdtcTRFRzdrWkFZRlFJMUUxVlRYYXJyNlpQWEJnNmVxN1k2ZUs0RkVoWTZBSmx5dUZJYi92L1MwVlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjaGFyLXJlZ2V4IjogIl4xLjAuMiIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWEJKYlQzTjRKaFZ1bVhFMGVvTFU5RENqY2FGOTJLTE5xVG1GQ25HMXBmOGR1VXhGR3d0UDZBRDZua2p3OWEzSWRpUnRMM0UydzNKRGlFL3hpM3ZPZUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJlbW9qaS1yZWdleCI6ICJeOC4wLjAiLAotICAgICAgICAiaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtYW5zaS8tL3N0cmlwLWFuc2ktNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUF1dktUclRmUU5ZTkljdGJSMUsvWUdUUjE3NTZHeWNQc2c3YjliZFY5RHVxdXI0Z3Y2YUtxSFhhaDY3WjhJbVM3V0V6NVFWY090bGZXMnJaRXVndDZ3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3RyaXAtYm9tIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWJvbS8tL3N0cmlwLWJvbS00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3h1ckZ2NXRFZ2lpMzNaaThKdHA1NXdFSUlMUjllaDM0RkFXMDBQWmYrSm5Tc1RtVi9pb2V3U2dRbDk3Skh2Z2pvUkd3UFNoc1dtK0lkcnhCMzVkMHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N0cmlwLWVvZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1lb2YvLS9zdHJpcC1lb2YtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS11MFAvVlppbTZ3WFltMW44MFNuSmd6RTJCcjg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy9zdHJpcC1maW5hbC1uZXdsaW5lIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmlwLWZpbmFsLW5ld2xpbmUvLS9zdHJpcC1maW5hbC1uZXdsaW5lLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CcnB2Zk5BRTNkY3ZxN2xsM3hWdW16aktqWlE1dEkxc0VVSUtyM1Vva3MwWFVsNDVTdDNGbGF0VnFlZjlwcms0alJEemhXNldaZyszYms5M3k2cExqQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtY29sb3IvLS9zdXBwb3J0cy1jb2xvci03LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXBDQXZSbDlzdHVPSHZlS3NuN0huY0pSdnY1MDFxSWFjS3pRbE8vK0x3eGM5KzBxMndMeXY0RGZ2dDgwL0RQbjJwcU9Cc0pkRGlvZ1hHUjkrT3Z3Unc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvc3VwcG9ydHMtaHlwZXJsaW5rcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1oeXBlcmxpbmtzLy0vc3VwcG9ydHMtaHlwZXJsaW5rcy0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNnNYRXpWNStJNWo4Qm1xOS92VXBoR1JNL1JKTlQ5U0NVUkpMandmT2c1MWhlUnRndUdXRHpjYUJsZ0F6S2hRYTBFVk5wUEVLelF1QndaOFM4V2FDZVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N5bWJvbC10cmVlLy0vc3ltYm9sLXRyZWUtMy4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlRTms1S3dERitCdnorUHlPYmttU1lqSTVrc1ZVWXRqVzdBVTIycjJOS2NmTEpjWHA5NmhrRFdVMytYbmRPc1ViK0FROVFoZnpmQ1QyTytDTldUNVR3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGVybWluYWwtbGluayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90ZXJtaW5hbC1saW5rLy0vdGVybWluYWwtbGluay0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdW4wRm1pUlVRTnI1UEpxeTlrUDdjNDBGNUJPZnBHbFlUcnhvbkRDaEVaQjdwelp4Uk5wL2J0K3ltaXk5L25wd1h5YTlLSDk5bkovR1hGSWlVa1lHRlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgInN1cHBvcnRzLWh5cGVybGlua3MiOiAiXjIuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTgiCi0gICAgICB9LAotICAgICAgImZ1bmRpbmciOiB7Ci0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3NpbmRyZXNvcmh1cyIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGVzdC1leGNsdWRlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rlc3QtZXhjbHVkZS8tL3Rlc3QtZXhjbHVkZS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY0FHV1BJeU9IVTZ6bG1nODhqd203VlJ5WG5NTjdpVjY4T0dBYllEay9NaC94Qy9welZQbFF0WTZuZ29JSC81L3RjaXVoR2Z2RVNVOEdySHJjeEQ1Nnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAaXN0YW5idWxqcy9zY2hlbWEiOiAiXjAuMS4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS40IiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdGhyb2F0IjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rocm9hdC8tL3Rocm9hdC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZmN3WDRtbmR6cExRS0JTMURWWWhHQWNZYVl0N3ZzSE5JdlFWK1dYTXZub3c1Y2dqUHBocTVDYWF5TGFHc2pSZFNDS1pGTkd0Ny9HWUF1WGFOT2lZQ0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90bXBsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RtcGwvLS90bXBsLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZjB1T0VBUXdJcUd1V1cyTVZ6WWc4ZlYvUU5uYy9JcHVKTkc4MzdyTHVjekFhTFZIc2xXSFpRajRJR2lFbDVIczNra2Jod0w5QWI3SHJzbXVqK1Ntdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RvLWZhc3QtcHJvcGVydGllcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90by1mYXN0LXByb3BlcnRpZXMvLS90by1mYXN0LXByb3BlcnRpZXMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0zRjVwakwwSGttVzhjK0EzZG9HazVPZy9ZVzQ9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdG8tb2JqZWN0LXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tb2JqZWN0LXBhdGgvLS90by1vYmplY3QtcGF0aC0wLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUtYV0l0N0RuNEt3STRFNW5MNFhCOUptZUY2OD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90by1vYmplY3QtcGF0aC9ub2RlX21vZHVsZXMva2luZC1vZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RvLXJlZ2V4IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvLXJlZ2V4Ly0vdG8tcmVnZXgtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUZXdGxlTkF0Wi9LaTJxdHFlajJDWFRPYXlPSDliSERRRitRNDhWcFd5RFhqYll4QTRZejhpREIzMXpYT0JVbE9ISEtpZERicUdWclRVdlFNUG1CR0J3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4yLjAuMiIsCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMy4wLjIiLAotICAgICAgICAicmVnZXgtbm90IjogIl4xLjAuMiIsCi0gICAgICAgICJzYWZlLXJlZ2V4IjogIl4xLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RvLXJlZ2V4LXJhbmdlIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvLXJlZ2V4LXJhbmdlLy0vdG8tcmVnZXgtcmFuZ2UtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTY1UDdpejZYNXlFcjFjd2NndlF4YmJJdzdVazNnT3k1ZElkdFo0ckR2ZUxxaHJkSlArTGkvSHg2dHlLME5FYisyR0N5bmVDTUppR3FyQURDU05rOHNRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtbnVtYmVyIjogIl43LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RvdWdoLWNvb2tpZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90b3VnaC1jb29raWUvLS90b3VnaC1jb29raWUtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRIZHRFcFFDTXJjMVlMck1hcVhYY2o2QXhoWWkveGdpdDZtWnUxK0VEV1VuK3FoVWY4d01Rb0ZJeTlOWHVxMjN6QXd0Y0IwdC9NakFDR1IxOHBjUmJnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAicHNsIjogIl4xLjEuMzMiLAotICAgICAgICAicHVueWNvZGUiOiAiXjIuMS4xIiwKLSAgICAgICAgInVuaXZlcnNhbGlmeSI6ICJeMC4xLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NiIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHI0NiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90cjQ2Ly0vdHI0Ni0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMTVJaDdwaGZjZFA1WXhxaUIraUR0TG9hVHo0TmQzNStJaUF2MGtRNUZOS0h6WGdkV3FQb1RJcUVEREptWGNlUXQ0SlprNmxWUFQ4bG5EbFBwR0RwcHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJwdW55Y29kZSI6ICJeMi4xLjEiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHMtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjUuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHMtamVzdC8tL3RzLWplc3QtMjYuNS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ydWErckNQOER4cEE4YjREUUQvNlgySFFTOFp5L3h6VmlWWWZFczJPUXU2OHRrQ3VLTFYwTWQ4cG1YNTUrVzI0dVJJeUFzZi9CYWpSZnhPcytSMk1LQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImJzLWxvZ2dlciI6ICIwLngiLAotICAgICAgICAiYnVmZmVyLWZyb20iOiAiMS54IiwKLSAgICAgICAgImZhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5IjogIjIueCIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjEuMCIsCi0gICAgICAgICJqc29uNSI6ICIyLngiLAotICAgICAgICAibG9kYXNoIjogIjQueCIsCi0gICAgICAgICJtYWtlLWVycm9yIjogIjEueCIsCi0gICAgICAgICJta2RpcnAiOiAiMS54IiwKLSAgICAgICAgInNlbXZlciI6ICI3LngiLAotICAgICAgICAieWFyZ3MtcGFyc2VyIjogIjIwLngiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInRzLWplc3QiOiAiY2xpLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAxMCIKLSAgICAgIH0sCi0gICAgICAicGVlckRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImplc3QiOiAiPj0yNiA8MjciLAotICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTMuOCA8NS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90cy1qZXN0L25vZGVfbW9kdWxlcy9zZW12ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjMuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuMy41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Qb2VHSlloOEhLNEJUTy9hOVRmNlpHM3Zlby9BN1pWc1lyU0E2SjhueTluYjNCMVZycGt1Tit6OU9FNXdmRTVwNkg0TGNoWVpzZWdpUWdiSkQ5NFpGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICB9LAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInNlbXZlciI6ICJiaW4vc2VtdmVyLmpzIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMTQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHNsaWIvLS90c2xpYi0xLjE0LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhuaTM1Tkt6amdNcndldnlzSFRDQXJ0TERwUHZ5ZTh6Vi8wRTRFeVluNDNQNy83cXZRd1BoOUJHa0hld2JNdWxWbnRiaWdtY1Q3cmRYM0JObzl3UkpnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50IjogewotICAgICAgInZlcnNpb24iOiAiNi4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGludC8tL3RzbGludC02LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSWJSNG5rVDk2RVFPdktFMlBXL2RqR3o4aUdOZUo0ckYybUJmaVlhUi9udlVXWUtKaEx3aW1vSktnaklGRUlEaWJCdE9ldmo3QnFDUkw0b0hlV1dVQ2c9PSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJUU0xpbnQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBFU0xpbnQuIFBsZWFzZSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL3RzbGludC9pc3N1ZXMvNDUzNCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMC4wIiwKLSAgICAgICAgImJ1aWx0aW4tbW9kdWxlcyI6ICJeMS4xLjEiLAotICAgICAgICAiY2hhbGsiOiAiXjIuMy4wIiwKLSAgICAgICAgImNvbW1hbmRlciI6ICJeMi4xMi4xIiwKLSAgICAgICAgImRpZmYiOiAiXjQuMC4xIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4xIiwKLSAgICAgICAgImpzLXlhbWwiOiAiXjMuMTMuMSIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC40IiwKLSAgICAgICAgIm1rZGlycCI6ICJeMC41LjMiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4zLjIiLAotICAgICAgICAic2VtdmVyIjogIl41LjMuMCIsCi0gICAgICAgICJ0c2xpYiI6ICJeMS4xMy4wIiwKLSAgICAgICAgInRzdXRpbHMiOiAiXjIuMjkuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAidHNsaW50IjogImJpbi90c2xpbnQiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC44LjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ0eXBlc2NyaXB0IjogIj49Mi4zLjAtZGV2IHx8ID49Mi40LjAtZGV2IHx8ID49Mi41LjAtZGV2IHx8ID49Mi42LjAtZGV2IHx8ID49Mi43LjAtZGV2IHx8ID49Mi44LjAtZGV2IHx8ID49Mi45LjAtZGV2IHx8ID49My4wLjAtZGV2IHx8ID49IDMuMS4wLWRldiB8fCA+PSAzLjIuMC1kZXYgfHwgPj0gNC4wLjAtZGV2IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQtY29uZmlnLXByZXR0aWVyIjogewotICAgICAgInZlcnNpb24iOiAiMS4xOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c2xpbnQtY29uZmlnLXByZXR0aWVyLy0vdHNsaW50LWNvbmZpZy1wcmV0dGllci0xLjE4LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXhQdzlQZ05QTEczaUtSeG1LN0RXcitFYS9TenJ2Zkh0akZ0NUxCbDYxZ2syVUJHL0RCOWtDWFJqdit4eUlVMXJVdG5heUxlTVVWSkJjTVg4WjE3bkRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAidHNsaW50LWNvbmZpZy1wcmV0dGllci1jaGVjayI6ICJiaW4vY2hlY2suanMiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlQwWkk2a1pSZFRoOFl5SnczU01iWW0vdStOcWZzQXhFcFdPMFBmOXNxOC9lOTRXeHhPcFBLeDlGUjFGbHlDdE9WRE5PUSs4bnRscUZ4aVJjK3I1cUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4xLjkuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL2NoYWxrIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstMi40LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU10aStmOWxwSk5jd0Y0dFdWOC9PclRUdEYxZ1ppK2Y4RnFseUFkb3VyYWxjRldGUVdGMitOZ0NIU2hqa0NiK0lGQkxxOWJ1WndFMXhja1FVNHBlU3VRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjMuMi4xIiwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogIl4xLjAuNSIsCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6ICJeNS4zLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9jb2xvci1jb252ZXJ0IjogewotICAgICAgInZlcnNpb24iOiAiMS45LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbG9yLWNvbnZlcnQvLS9jb2xvci1jb252ZXJ0LTEuOS4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAiMS4xLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvY29sb3ItbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1uYW1lLy0vY29sb3ItbmFtZS0xLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXA5QlZpOWljUXZlVjNVSXlqM1FJTWNwVHZDVT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC8tL2VzY2FwZS1zdHJpbmctcmVnZXhwLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtRzJIQVZpR1FxTi8ycmp1eXp3SUF5aE1MaHRRPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c2xpbnQvbm9kZV9tb2R1bGVzL2hhcy1mbGFnIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS10ZFJVM0NHWnJpSldtZk5HZmxvSDg3bFZ1djA9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49NCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9ta2RpcnAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTAuNS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OS21BbEVTZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0ZhU09GUHdSYWh2ZWEwZ01VY0dVaFZlQWcvMEJDMHdpdjlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNSIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAibWtkaXJwIjogImJpbi9jbWQuanMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3RzbGludC9ub2RlX21vZHVsZXMvc2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNS43LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjcuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2F1YURmL1BaZFZnckxUTllIUnRwWGExaVJpS2NhZWJpS1ExQkpkcFFsV0gybEN2ZXhRZFg1NXNuUEZ5SzdRenB1ZHFiQ0kwcVhGZk9hc0hkeU5ER1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJiaW4iOiB7Ci0gICAgICAgICJzZW12ZXIiOiAiYmluL3NlbXZlciIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHNsaW50L25vZGVfbW9kdWxlcy9zdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuNS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTUuNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImhhcy1mbGFnIjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj00IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy90c3V0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4yOS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90c3V0aWxzLy0vdHN1dGlscy0yLjI5LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWc1SlZIQ0lKd3pmSVNhWHBYRTFxdk5hbGNhNUp3b2I2RmpJNEFvUGxxTXVzSjZmdEZFN0lra0ZvTWhWTFJnSys0S3gzZ2t6YjhVWks1dDV5VFR2RW1BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHNsaWIiOiAiXjEuOC4xIgotICAgICAgfSwKLSAgICAgICJwZWVyRGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZXNjcmlwdCI6ICI+PTIuMS4wIHx8ID49Mi4xLjAtZGV2IHx8ID49Mi4yLjAtZGV2IHx8ID49Mi4zLjAtZGV2IHx8ID49Mi40LjAtZGV2IHx8ID49Mi41LjAtZGV2IHx8ID49Mi42LjAtZGV2IHx8ID49Mi43LjAtZGV2IHx8ID49Mi44LjAtZGV2IHx8ID49Mi45LjAtZGV2IHx8ID49IDMuMC4wLWRldiB8fCA+PSAzLjEuMC1kZXYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGUtY2hlY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1jaGVjay8tL3R5cGUtY2hlY2stMC4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1XSVRLdFJMUEhUVmVQN2VFOHdnRXNyVWcyM0k9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInByZWx1ZGUtbHMiOiAifjEuMS4yIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSAwLjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdHlwZS1kZXRlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuOCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1kZXRlY3QvLS90eXBlLWRldGVjdC00LjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGZyL21JSDFkbE8reDdUbGNNeStiSURxS1Bzdy83MHRWeWVIVzc4N2dvUWpobXFhWmUxMHV3THVqdWJLOXE5TGc2RmlobzFLVUtEWXowWjdrN2c1L2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGUtZmVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMjEuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuMjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDByekJxODdtM2ZWY2R1SERVRmhLbXl5WCs5ZW82V1FqWnZmNTFFYS9NMFE3K1QzNzRKcDFhVWl5VWwwR0t4cDhNL09FVFZIU0R2bWt5UGd2WCtYMnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfSwKLSAgICAgICJmdW5kaW5nIjogewotICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zaW5kcmVzb3JodXMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGVkYXJyYXktdG8tYnVmZmVyIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGVkYXJyYXktdG8tYnVmZmVyLy0vdHlwZWRhcnJheS10by1idWZmZXItMy4xLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpkdThYTU5FRGVwS0tSK1hZT1hBVlB0V3VpMGx5ME50b2hVc2N3K1VtYUhpQVdUOGhyVjFyci8vSDZWKzBEdkozT1ExOVM5NzlNMGxhTGZYOHJtODJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtdHlwZWRhcnJheSI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3R5cGVzY3JpcHQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjkuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZXNjcmlwdC8tL3R5cGVzY3JpcHQtNC45LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTFGWGs5RTJIbStRelpRN3orTWNKaUhMNE5XMUYyRXpNdTlOcTlpM3pBYUdxaWJhZnFZd0NWVTZXeVdBdXlRUlJ6T2x4b3U4eFpTeVhMRU44b0tqMjRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiYmluIjogewotICAgICAgICAidHNjIjogImJpbi90c2MiLAotICAgICAgICAidHNzZXJ2ZXIiOiAiYmluL3Rzc2VydmVyIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTQuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bmRpY2ktdHlwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjIwLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuZGljaS10eXBlcy8tL3VuZGljaS10eXBlcy02LjIwLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU55NlFaMk5qdTIwdncxU1JIZTNkOWpWdTZnSis0ZTMrTU1wcXU3cHFFNUhUNldzVFNsY2UrK0dRbUs1VVhTOG16VjhEU1lIclFIK1hyZjJqVmN1S05nPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5pb24tdmFsdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pb24tdmFsdWUvLS91bmlvbi12YWx1ZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEpmWG14TWVXWW5jekNWczdYQUV2SVY3aWVwcEFMZHllcFdNa0hrd2NpUnBacmFHL3h3VCtzMkpOOCtwcjErOGpDUmY4MEZGenZyK01wUWVlb0Y0WGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhcnItdW5pb24iOiAiXjMuMS4wIiwKLSAgICAgICAgImdldC12YWx1ZSI6ICJeMi4wLjYiLAotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6ICJeMC4xLjEiLAotICAgICAgICAic2V0LXZhbHVlIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VuaW9uLXZhbHVlL25vZGVfbW9kdWxlcy9pcy1leHRlbmRhYmxlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtWXJFUTRvbWtjVUdPUHNOcVlYMUhMakFkL0lrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5pdmVyc2FsaWZ5IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaXZlcnNhbGlmeS8tL3VuaXZlcnNhbGlmeS0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItckJKZUk1Q1hBbG15MXBWKzYxN1dCOUo2M1U2WGNhekhIRjJmMmRiSml4NFh6cFVGMFJTM1piajBGR0lPQ0F2YTVQL2QvR0JPWWFBQ1ExdyswYXpVa2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PSA0LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5zZXQtdmFsdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5zZXQtdmFsdWUvLS91bnNldC12YWx1ZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWczYUhQMzBqTlJlZit4NXZ3Nmp0RGZ5S3RWaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLXZhbHVlIjogIl4wLjMuMSIsCi0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bnNldC12YWx1ZS9ub2RlX21vZHVsZXMvaGFzLXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy12YWx1ZS8tL2hhcy12YWx1ZS0wLjMuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWV4OVl1dHBpeW9KK3dLSUhnQ1ZsU0VXWlhoOD0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZ2V0LXZhbHVlIjogIl4yLjAuMyIsCi0gICAgICAgICJoYXMtdmFsdWVzIjogIl4wLjEuNCIsCi0gICAgICAgICJpc29iamVjdCI6ICJeMi4wLjAiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91bnNldC12YWx1ZS9ub2RlX21vZHVsZXMvaGFzLXZhbHVlL25vZGVfbW9kdWxlcy9pc29iamVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc29iamVjdC8tL2lzb2JqZWN0LTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOEdWV0VKYWo4ZG91OUdKeStCWElRTmgrRElrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJpc2FycmF5IjogIjEuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdW5zZXQtdmFsdWUvbm9kZV9tb2R1bGVzL2hhcy12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXZhbHVlcy8tL2hhcy12YWx1ZXMtMC4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1iV0hlbGRrZC9LbTVvQ0NKclRoTC80OWl0M0U9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MC4xMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy91cml4IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VyaXgvLS91cml4LTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtMnBOL2VtTGlIK3dmMFkxSnMxd3BOUVo2YkhJPSIsCi0gICAgICAiZGVwcmVjYXRlZCI6ICJQbGVhc2Ugc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9seWRlbGwvdXJpeCNkZXByZWNhdGVkIiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3VzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91c2UvLS91c2UtMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWN3RVNWWGxPM3VybDlZV2xGVy9UQTljc2hDRWh0dTdJS0ovcDVzb0ovZ0dwajd2YnZGckFZL2VJaW9RNkR3MjNLalpoWWdpSW84SE9zMW5RMnZyL29RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0wLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3V1aWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXVpZC8tL3V1aWQtOC4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStOWXMyUWVNV3krR1dGT0VtOXhubjZIQ0RwMGw3UUJEN21sOHpMVW1KKzkzUTVORjBOb2NFcm53a1RrWFZGTmlYMy9mcEM2YWZTOERoYi9nejdSN2VnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgImJpbiI6IHsKLSAgICAgICAgInV1aWQiOiAiZGlzdC9iaW4vdXVpZCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdjgtdG8taXN0YW5idWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdjgtdG8taXN0YW5idWwvLS92OC10by1pc3RhbmJ1bC03LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHhOYjdZRVV3a0xYQ1FZZXVkaTZsZ1EvU1pyek5PNGtNZGxxVnhhWlBVSVVqQ3Y2aVNTeXBVUVg3MGtOQlNFUnBROGZrNDgrZDYxRlhrK3RncWNXb3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMSIsCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjEuNi4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNy4zIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwLjEwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3Y4LXRvLWlzdGFuYnVsL25vZGVfbW9kdWxlcy9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMC43LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAvLS9zb3VyY2UtbWFwLTAuNy4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Da0NqNmdpTjNTK245cXJZaUJUWDVneXN0bEVOblJXNWpaZU5MSHBlNmF1ZStTckhjRzVWWXd1amhXOXM0ZFkzMW1FR3N4QkRySFI2b0k2OWZUWHNhUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49IDgiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdmFsaWRhdGUtbnBtLXBhY2thZ2UtbGljZW5zZS8tL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLURwS20yVWkveE43L0hRS0N0cFp4b1JXQmhaOVowa3F0eWdHOFhDZ05ROFpsRG54dVFtV2hqNTY2ajhmTjRDdTMvSm1iaHNEbzdmY0FKcTRzOWgyN0V3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic3BkeC1jb3JyZWN0IjogIl4zLjAuMCIsCi0gICAgICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93M2MtaHItdGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93M2MtaHItdGltZS8tL3czYy1oci10aW1lLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16OFA1RHZETmpLRG9GSUhLN3E4cjhsYWNrVDZsK2pvL1llM0hPbGU3bDluSUNQOWxmMUNpMjVmeTl2SGQwSk9XZXdrSUZ6WElFaWczVGRLVDdKUTVmUT09IiwKLSAgICAgICJkZXByZWNhdGVkIjogIlVzZSB5b3VyIHBsYXRmb3JtJ3MgbmF0aXZlIHBlcmZvcm1hbmNlLm5vdygpIGFuZCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luLiIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJicm93c2VyLXByb2Nlc3MtaHJ0aW1lIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvdzNjLXhtbHNlcmlhbGl6ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdzNjLXhtbHNlcmlhbGl6ZXIvLS93M2MteG1sc2VyaWFsaXplci0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNHR6RDBtRjhpU2lNaU5zMzBCaUxPM0VwZkdMWlVUMk1TWC9HK283Wnl3RHpsaVdRM09QdFRaMFBUQzNCM2NhMVVBZjRjSk1IQisyQmY1NkVyaUp1UkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiAiXjMuMC4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93YWxrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2Fsa2VyLy0vd2Fsa2VyLTEuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTDMrYmo5RU5aM0ppc1lxSVRpalJsaGpnS1BzPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJtYWtlZXJyb3IiOiAiMS4wLngiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3dlYmlkbC1jb252ZXJzaW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93ZWJpZGwtY29udmVyc2lvbnMvLS93ZWJpZGwtY29udmVyc2lvbnMtNi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFCSXZGTEdpQnBMamZ3bVlBYUhQWHNuK2hvNXhabkd2eUd2c2FyeXdHTmM4VnlRSlVNSEo4T0JLR0dyUEVSMG9rQmVNRGFhbjRtTkJsZ0JST3h1STh3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0xMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmciOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLWVuY29kaW5nLy0vd2hhdHdnLWVuY29kaW5nLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iNWxpbTU0Sk9QTjlIdHp2SzlIRlh2Qm1hL3JuZkZlcXNpYzBoU3BqdERiVnhSM2RKS0xjK0tCNFY2R2dpR092bDdDWS9LTmg4cnhTbzlES1FyblVFdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImljb252LWxpdGUiOiAiMC40LjI0IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGF0d2ctbWltZXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLW1pbWV0eXBlLy0vd2hhdHdnLW1pbWV0eXBlLTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NNHlNd3I2bUFuUXo3NlRiSm05MTQrZ1BwQi9uQ3d2WmJKVTI4Y1VENmRSMDA0U0F4RExPT1NVYUIxSkRScUx0YU9WL3ZpMElDNWxFQUdGZ3JqR3YvZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3doYXR3Zy11cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hhdHdnLXVybC8tL3doYXR3Zy11cmwtOC41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZ5K1I3N3hXdjBBaXFmTGw0bnVHVWxRMy82YjV1TmZRNFdBYkdRVk1Zc2hDVENDUEs5cHNDMW5XaDNYSHV4R1ZDdGxjRERRUFFXMWNzbW1JUW8rZndnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjcuMCIsCi0gICAgICAgICJ0cjQ2IjogIl4yLjAuMiIsCi0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjYuMS4wIgotICAgICAgfSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTEwIgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93aGljaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGljaC8tL3doaWNoLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CTEkzVGwxVFczUHZsNzBsM3lxM1k2NGkrYXdwd1hxc0dCWVdra3FNdG5iWGdyTUQreWo3cmhXMGt1RUR4ekphWVhHakVXNW9nYXBLTk1FS05NamliQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImlzZXhlIjogIl4yLjAuMCIKLSAgICAgIH0sCi0gICAgICAiYmluIjogewotICAgICAgICAibm9kZS13aGljaCI6ICJiaW4vbm9kZS13aGljaCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj0gOCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd2hpY2gtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLW1vZHVsZS8tL3doaWNoLW1vZHVsZS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTJlOEgzT2Q3bVFLNG82ajZTekhENC9mbTZIbz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd29yZC13cmFwIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dvcmQtd3JhcC8tL3dvcmQtd3JhcC0xLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSHovbXJOd2l0TlJoL0hVQXRNL1ZULzVWSCt5Z0Q2RFY3bVlLWkF0SE9yYnM4VTdsdlBTNnhmN0VKS01GMHVXMUtKQ2wwSDcwMWczWkd1cyttdUU1dlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJlbmdpbmVzIjogewotICAgICAgICAibm9kZSI6ICI+PTAuMTAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMvd3JhcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS02LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcjZsUGNCR3haWGxJY3ltRXU3SW54RE1oZFcwS0R4cExnb0ZMY2d1YXN4Q2FKL1NPSVp3SU5hdEs5S1kvdGYrWnJseXdPS1UwVURqM0FUWFVCZnhKWEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4wLjAiLAotICAgICAgICAic3RyaW5nLXdpZHRoIjogIl40LjEuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj04IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cmFwcHkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JhcHB5Ly0vd3JhcHB5LTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdFNROWp6N0Jxalh4TmtZRnZBMFFOdU1LdHA4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cml0ZS1maWxlLWF0b21pYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cml0ZS1maWxlLWF0b21pYy8tL3dyaXRlLWZpbGUtYXRvbWljLTMuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BdkhjeVo1Sm5TZnEzaW9TeWpyQmtIOXlXNG03QXlrOC85TXkvREQ5b25LZXUvOTRmd3JNb2NlbU8yUUFKRkFsbm5ETitaRFMrWmpBUjV1YTEvUFYvUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICJpcy10eXBlZGFycmF5IjogIl4xLjAuMCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjIiLAotICAgICAgICAidHlwZWRhcnJheS10by1idWZmZXIiOiAiXjMuMS41IgotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy93cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cy8tL3dzLTcuNC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZbWhIRE80TXphRExCK005eW0vbURBNXowbmFYOGo3U0lsVDhmOHorSTBWdHpzUmJla3hFdXRIU21lN05QUzJxRThTdENZUU5VbmZXZFh0YS9ZdTg1QT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OC4zLjAiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJidWZmZXJ1dGlsIjogIl40LjAuMSIsCi0gICAgICAgICJ1dGYtOC12YWxpZGF0ZSI6ICJeNS4wLjIiCi0gICAgICB9LAotICAgICAgInBlZXJEZXBlbmRlbmNpZXNNZXRhIjogewotICAgICAgICAiYnVmZmVydXRpbCI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJ1dGYtOC12YWxpZGF0ZSI6IHsKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveG1sLW5hbWUtdmFsaWRhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3htbC1uYW1lLXZhbGlkYXRvci8tL3htbC1uYW1lLXZhbGlkYXRvci0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQTVDVXB0eERzdnhLSkVVM3lPNkR1V0JTSnovcWl6cXpKS09NSWZVSkhFVGJCdy9zRmFEeGdkNmZ4bTFld1VhTTBqWjQ0NEZjNXZDNVJPWXVyZy80UHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy94bWxjaGFycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWxjaGFycy8tL3htbGNoYXJzLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KWm5ES0s4QjBSQ0R3ODRGTmREQUlwWksrSnVKdytzN0x6OG5rc0k3U0l1VTNVWEpKc2xVdGhzaSt1V0JVWU93UEZ3VzdXN1BSTFJmVUtweGp0akZDdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3kxOG4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveTE4bi8tL3kxOG4tNC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpLaHFUT3dTcnFOQTFOWTVsU3p0SjFHckJpVW9kTE1tSVp1TGlEYU1SSitpdEZkK0FCVkU4WEJqT3ZJV0wrclNxTkRDNzRMQ1NGbWxiL1U0VVo0aEpRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveWFsbGlzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YWxsaXN0Ly0veWFsbGlzdC00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItM3dkR2lkWnlxNVBCMDg0WExFUzVUcE9TUkEzd2pYQWxJV01odW0ya1Jjdi80MVNuMmVtUTBkeWNRVzR1WlhMZWp3S3ZnNkVzdmJkbFZMK0ZZRWN0N0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGVfbW9kdWxlcy95YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE1LjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MvLS95YXJncy0xNS40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFlUGJ4RG1jWVcrK1BhcUJzSitIWVVGd0NkdjRMVnZkbmhCeTc4RTU3UElvcjgvT1Z2aE1yQURGRkVEaDhESERGUnYvTzlpM2xQaHNFTmpPN1FYMCtBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2xpdWkiOiAiXjYuMC4wIiwKLSAgICAgICAgImRlY2FtZWxpemUiOiAiXjEuMi4wIiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjQuMS4wIiwKLSAgICAgICAgImdldC1jYWxsZXItZmlsZSI6ICJeMi4wLjEiLAotICAgICAgICAicmVxdWlyZS1kaXJlY3RvcnkiOiAiXjIuMS4xIiwKLSAgICAgICAgInJlcXVpcmUtbWFpbi1maWxlbmFtZSI6ICJeMi4wLjAiLAotICAgICAgICAic2V0LWJsb2NraW5nIjogIl4yLjAuMCIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgIndoaWNoLW1vZHVsZSI6ICJeMi4wLjAiLAotICAgICAgICAieTE4biI6ICJeNC4wLjAiLAotICAgICAgICAieWFyZ3MtcGFyc2VyIjogIl4xOC4xLjIiCi0gICAgICB9LAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49OCIKLSAgICAgIH0KLSAgICB9LAotICAgICJub2RlX21vZHVsZXMveWFyZ3MtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjAuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy1wYXJzZXIvLS95YXJncy1wYXJzZXItMjAuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GaU5rdmJlSHpCL3N5T2pJVXhGRENuaFNmekFMOFI1dnM0ME1nTEZCb3JYQUNDT0FFYVd1MGdSWmwxNHZHOE1SOUFPSklaYm1ramh1c3FCWVozSFRIdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgImVuZ2luZXMiOiB7Ci0gICAgICAgICJub2RlIjogIj49MTAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibm9kZV9tb2R1bGVzL3lhcmdzL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxOC4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0xOC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW81MGowSmVUb3kvNEs2T1pjYVFtVzZseVhYS2hxN2NzUkVYY0R3azJvbUZQSkV3VU5PVnRKS3ZtRHI5RUkxZkFKWlV5WmNSRjdreEdCV21SWHVkckNRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY2FtZWxjYXNlIjogIl41LjAuMCIsCi0gICAgICAgICJkZWNhbWVsaXplIjogIl4xLjIuMCIKLSAgICAgIH0sCi0gICAgICAiZW5naW5lcyI6IHsKLSAgICAgICAgIm5vZGUiOiAiPj02IgotICAgICAgfQotICAgIH0KLSAgfSwKLSAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEyLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29kZS1mcmFtZS8tL2NvZGUtZnJhbWUtNy4xMi4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSFYxQ20wUTNacnBDUjkzdGtXT1lpdVlJZ0x4WlhaRlZHMlZnSytNQldqVXFaVHVuZHVwYmZ4MmFYYXJYdXc1S281YU1janRKZ2JTczR2VUdCUzV2Nmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oaWdobGlnaHQiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2NvbXBhdC1kYXRhIjogewotICAgICAgInZlcnNpb24iOiAiNy4xNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvY29tcGF0LWRhdGEvLS9jb21wYXQtZGF0YS03LjE0LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWkyd1hyV1FOa0g2SnBsSlFHbjNSZDJJNFBpajhHZEhrWHdITXhtK3pWNVlHL0pjaStiQ05yV1pFV0M0byt1bWlEa1JyUnM0ZFZ6SDNYNEdQN3Z5alFRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJAYmFiZWwvY29yZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2NvcmUvLS9jb3JlLTcuMTQuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItakI1QW1US09DU0pJWjcyc2Q3OEVDRWh1UGlETUtsUWRESS80UVJJNmx6WUFUeDVTU29nUzFvUUEyQW9QZWNSQ2tubTMwZ0hpMmwrUVZ2TlV1M3daQWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC9nZW5lcmF0b3IiOiAiXjcuMTQuMyIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMiOiAiXjcuMTMuMTYiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtdHJhbnNmb3JtcyI6ICJeNy4xNC4yIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXJzIjogIl43LjE0LjAiLAotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4xNC4zIiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuMiIsCi0gICAgICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiAiXjEuNy4wIiwKLSAgICAgICAgImRlYnVnIjogIl40LjEuMCIsCi0gICAgICAgICJnZW5zeW5jIjogIl4xLjAuMC1iZXRhLjIiLAotICAgICAgICAianNvbjUiOiAiXjIuMS4yIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC41LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC41LjciLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjUuNy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1pZ09kTFJBaDBpMGVvVXlBMk9wR2k2THZQOHc9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2dlbmVyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2dlbmVyYXRvci8tL2dlbmVyYXRvci03LjE0LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJuMFM2ZmxHL2oweHRRZHozaHNqSjYyNGgzVzByM2xsdHRCTWZ5SFgzWXJaL0t0TFlyMTViakEwRlhrZ1c3RnB2ckR1VHVFbFhlVmppS2xZUnBuT0ZBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuMiIsCi0gICAgICAgICJqc2VzYyI6ICJeMi41LjEiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC41LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC41LjciLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjUuNy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1pZ09kTFJBaDBpMGVvVXlBMk9wR2k2THZQOHc9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1jb21waWxhdGlvbi10YXJnZXRzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLWNvbXBpbGF0aW9uLXRhcmdldHMvLS9oZWxwZXItY29tcGlsYXRpb24tdGFyZ2V0cy03LjE0LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpnZHpPWVovcUdhS1RWa241cUVEVi9TWEFoOEtjeVVWa0NvU1dHTjhUM2J3cmdkNm0rL2RKYTJrVkdpNlJKWUpnRVlQQmRaODRCWnA5ZFVqTldrQmFBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29tcGF0LWRhdGEiOiAiXjcuMTQuNCIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiAiXjcuMTIuMTciLAotICAgICAgICAiYnJvd3NlcnNsaXN0IjogIl40LjE2LjYiLAotICAgICAgICAic2VtdmVyIjogIl42LjMuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWZ1bmN0aW9uLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZS8tL2hlbHBlci1mdW5jdGlvbi1uYW1lLTcuMTQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTllabGtaUnlkeHcrWVQ1NklsaEljUzhQQWhiK0ZFVWlPenVoRlRmcUR5UG16QWhSZ2U2dWEwZFFZVC9VaDB0L0VESHEwNS9pK2U1TTJkNFh2amdhclE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZ2V0LWZ1bmN0aW9uLWFyaXR5IjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLWdldC1mdW5jdGlvbi1hcml0eSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTIuMTMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItZ2V0LWZ1bmN0aW9uLWFyaXR5Ly0vaGVscGVyLWdldC1mdW5jdGlvbi1hcml0eS03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EakVWelFOejVMSUNrek4wUkVkcEQ1cHJHb2lkdmJkWWsxQlZnUlVPSU5hV0pQMnQ2YXZCMjdYMWd1WEsxa1hOclgwV01mc3JtMUEvWkJ0aFl1SU1RZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjEyLjEzIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMy4xMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1tZW1iZXItZXhwcmVzc2lvbi10by1mdW5jdGlvbnMvLS9oZWxwZXItbWVtYmVyLWV4cHJlc3Npb24tdG8tZnVuY3Rpb25zLTcuMTMuMTIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTQ4cWwxQ0xMNTlhS2JVOTRZODhYZ2IyVkZ5N2E5NXlrR1JiSkphYVZ2K0xYNVU4d0ZwTGZpR1hKSkdVb3pzbUExb0VoL281QnA2MFZvcTdBQ3lBL1N3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTMuMTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1tb2R1bGUtaW1wb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTMuMTIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMvLS9oZWxwZXItbW9kdWxlLWltcG9ydHMtNy4xMy4xMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGNWdlIyLzFCNjkzSXVPdlNJMjB4cXFhLytibDdscUFNUjU5UjRpdTM5UjlhT1g4L0pvWVkxc0ZhTnZVTXlNQkduSGR3dkpnVXJ6TkxvVVp4WHlweEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4xMy4xMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zIjogewotICAgICAgInZlcnNpb24iOiAiNy4xNC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zLy0vaGVscGVyLW1vZHVsZS10cmFuc2Zvcm1zLTcuMTQuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT3puSlVkYS9zb0tYdjBYaHB2ekdXRG5tbDRRbndwMTZHTitEL2taSWRMc1dvSGowNWt5dThSbTVrWG1NZWYrclZKWjArNHBTR0xrZWl4ZHFOVUFUREE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItbW9kdWxlLWltcG9ydHMiOiAiXjcuMTMuMTIiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycyI6ICJeNy4xMy4xMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiAiXjcuMTMuMTIiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24iOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4xNC4wIiwKLSAgICAgICAgIkBiYWJlbC90ZW1wbGF0ZSI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTIuMTMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXItb3B0aW1pc2UtY2FsbC1leHByZXNzaW9uLy0vaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbi03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CZFdRaG9WSmtwNm5WakI3bmtGV2NuNDNka3ByWWF1cXRrKytQeTJlYWYvR1JERm01QnhScUVJWkNpSGxaVUdBVm10d0tjc1ZMMWRDNjhXbXplRm1pQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjEyLjEzIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscy8tL2hlbHBlci1wbHVnaW4tdXRpbHMtNy4xMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1aUGFmSVBTd3pVbEFvV1Q4REtzMVcyVnlGMmdPV3RoR2Q1TkdGTXNCY01Nb2wrWmhLK0VRWS9lNlY5NnBvYTZQQS9CaCtDOXBsV04waFhPMXVCOEFmUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1yZXBsYWNlLXN1cGVycy8tL2hlbHBlci1yZXBsYWNlLXN1cGVycy03LjE0LjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpaN3VIQ1dseGZFQUFPVkRZUXBFZi91eWkxZG1lQzdmWDRuQ2YyaXo5ZHJuQ3dpMXp2d1hMM0h3V1dOWFVRRUoxazIzeVZuM1ZiZGRpSTlpSkVYYVRRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLW1lbWJlci1leHByZXNzaW9uLXRvLWZ1bmN0aW9ucyI6ICJeNy4xMy4xMiIsCi0gICAgICAgICJAYmFiZWwvaGVscGVyLW9wdGltaXNlLWNhbGwtZXhwcmVzc2lvbiI6ICJeNy4xMi4xMyIsCi0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEzLjEyIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXNpbXBsZS1hY2Nlc3MvLS9oZWxwZXItc2ltcGxlLWFjY2Vzcy03LjEzLjEyLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03RkVqYnJ4NVNMOWNXdlhpb0RibmxZVHBwY1pHdUNZNm93My9ENXZNZ2diMll3Z3U0ZE1ycFRKWDBKZFFBSWNSUlVFbE9JeEYzeUVvb2E5Z1ViOVpiQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjEzLjEyIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci1zcGxpdC1leHBvcnQtZGVjbGFyYXRpb24vLS9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uLTcuMTIuMTMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRDSkRsdEY4M2h0VXRYeDVOTGNhRHFSbWtudjY1MlpXQ0h5b1RFVGYxQ1hZSmRQQzdub2hab2hqVWdpZVhodjBoVEpkUmYyRmpEdWVGZWhkTnVjcHpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllci8tL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllci03LjE0LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVYzdHM3ek1TdTVsZml3V0RWV3pSREdJTitsbkNFVWRhWGd0VkhKZ0xiMXJHYUE2ak1ydEI5RW1FN0wxOGZvWEpJRThVbi9BL2g2TkpmR1FwL2UxSjRBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEyLjE3IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvaGVscGVyLXZhbGlkYXRvci1vcHRpb24vLS9oZWxwZXItdmFsaWRhdG9yLW9wdGlvbi03LjEyLjE3LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ub3BrTURtTHpxOG5nQ2h3Umx5alI2cmFLRDZnTVNhZTRKZFlEQjhiQnlLcmVRZ0cwUkJUdUtlOUxSeFczd0Z0VW5qeE9QUktCRHdFSDZNZzVLZURmdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQGJhYmVsL2hlbHBlcnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9oZWxwZXJzLy0vaGVscGVycy03LjE0LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLSt1ZnVYcHJ0UTFEMWlaVE8vSzkrRUJSbitxUFdNSmpaU3cvUzBLbEZyeEN3NHRrcnp2OWdyZ3BESGtZOU1lUVRqVFk4aTJzcDdKZXA4RGZVNnROOU1nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL3RyYXZlcnNlIjogIl43LjE0LjAiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjE0LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL2hpZ2hsaWdodCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL2hpZ2hsaWdodC8tL2hpZ2hsaWdodC03LjE0LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlTQ093eHZUWUVJTVNHYUJRYjVrRERzQ29wRGRpVUdzcXBhdHAzZk9sSTQrMkhRU2tUbUVWV25WdXlTZEFDNUVXQ3FTV1dUdjBpYjYzUmpSN2RUQmRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXZhbGlkYXRvci1pZGVudGlmaWVyIjogIl43LjE0LjAiLAotICAgICAgICAiY2hhbGsiOiAiXjIuMC4wIiwKLSAgICAgICAgImpzLXRva2VucyI6ICJeNC4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4xLjkuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjaGFsayI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstMi40LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjMuMi4xIiwKLSAgICAgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjUiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1jb252ZXJ0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY29sb3ItbmFtZSI6ICIxLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1uYW1lIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcDlCVmk5aWNRdmVWM1VJeWozUUlNY3BUdkNVPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HMkhBVmlHUXFOLzJyanV5endJQXloTUxodFE9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiaGFzLWZsYWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxhZy8tL2hhcy1mbGFnLTMuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXRkUlUzQ0dacmlKV21mTkdmbG9IODdsVnV2MD0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wYXJzZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjE0LjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wYXJzZXIvLS9wYXJzZXItNy4xNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BcmxpeVVzV0RVcUVHZldjbXpwR1V6TmZMeFRkVHA2V1U0SXVQNlFGU3A5Z0dmV1M2Ym94RkNrSlNKL0w0K1JHOHovRm5JVTNXeENrNmhQTDlTU1dlQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1hc3luYy1nZW5lcmF0b3JzLTcuOC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10eWNtWnhrR2ZaYXhoTVJiWGxQWHVWRnBkV2xYcGlyMlc0QU1oU0pnUkt6ay9lRGxJWE9oYjJMSFdvTHBERjdURUh5bFY1ek5oeWtYNktBZ0hKbVROdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWJpZ2ludCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1iaWdpbnQvLS9wbHVnaW4tc3ludGF4LWJpZ2ludC03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd25UbkZsRytZeFFtM3ZEeHBHRTU3UGowc3JSVTRzSEUvbURrdDFxdjJZSkpTZVVBZWMybWE0V0xVblVQZUtqeXJmbnRWd2UvTjZkQ1hwVSt6TDNOcGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy8tL3BsdWdpbi1zeW50YXgtY2xhc3MtcHJvcGVydGllcy03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mbTRpZGpLbGEwWWFoVU5nRk5MQ0IwcXlTZHNvUGlaUDNpUUUzcmt5MG1CVXRNWjIzeURKOVNKZGc2ZFhUU0RudWxPVnFpRjNIZ3I5bmJYdlhUUVpZQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtaW1wb3J0LW1ldGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEwLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LWltcG9ydC1tZXRhLy0vcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YS03LjEwLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlxZm0rWER4MCtQcmgzVlNlRVFDUFU4MXlDK0pXWjJwRFBGU1M0WmRwZlpocDRNa0ZNYURDMVVxc2VvdkVLd1NVcG5JTDcrdksrQ2xwN2JmaDBpRDdnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy4xMC40IgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LWpzb24tc3RyaW5ncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1qc29uLXN0cmluZ3MvLS9wbHVnaW4tc3ludGF4LWpzb24tc3RyaW5ncy03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbFk2a2RHcFdIdmpvZTJ2azRXckFhcEV1QlI2OUVNeFpsK1JvR1JockZHTllWSzhtT1BBVzhWZmJUL1pnckZiWGxETmlpYXhRbkF0Z1ZDWjZqdjMwRUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLy0vcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzLTcuMTAuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZDh3YVNobHBGRGluUTVNdHZHVTl4REFPektINDcrRkZvbmV5MmJhRklvTXI5NTJoS09McDFIUjdWc3pvWnZPc1YvNCtSUnN6Tlk3RDE3YmEwdGUwaWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjEwLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW51bGxpc2gtY29hbGVzY2luZy1vcGVyYXRvci8tL3BsdWdpbi1zeW50YXgtbnVsbGlzaC1jb2FsZXNjaW5nLW9wZXJhdG9yLTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hU2ZmNHpQSUkxdTJRRDd5K0Y4b0RzejE5ZXc0SUdFSmc5U1ZXK2Jxd3B3dGZGbGVpUURNZHpBL1IrVWxXRHpmbkhGQ3h4bGVGVDBQTUlyUjM2WExOUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1udW1lcmljLXNlcGFyYXRvci8tL3BsdWdpbi1zeW50YXgtbnVtZXJpYy1zZXBhcmF0b3ItNy4xMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05SDZZZGZrY0svdU9uWS9LNy9hQTJ4cHphQWdrUW4zN3l6V1VNUks3T2FQT3FPcEdTMStuMEg1aHhUOUFVdzlFc1NqUFc4U1Z5TUp3WVJ0V3MzWDN1Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTAuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjguMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3BsdWdpbi1zeW50YXgtb2JqZWN0LXJlc3Qtc3ByZWFkLy0vcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQtNy44LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhvcU1pakdaYjl5M3kyWHNrTitQMXdVR2lWd1daNUptb0RSd3g1KzNHbUVwbE55Vk0yczJEZzhJTEZRbThyV000OG9yR3k1WXBJNUJsOFUxeTd5ZGxBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvaGVscGVyLXBsdWdpbi11dGlscyI6ICJeNy44LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtb3B0aW9uYWwtY2F0Y2gtYmluZGluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nLy0vcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jYXRjaC1iaW5kaW5nLTcuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi02VlBEMFBjMWxwVHF3MGFLb2VSVE1pQitrV2hBb1QyNFBBK2tzV1NCckZ0bDVTSVJWcFpsd04zTk5QUWplaEEyRS85MUZWM1JqTFdvVlRnbFdjU1YzUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuOC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogewotICAgICAgInZlcnNpb24iOiAiNy44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nLy0vcGx1Z2luLXN5bnRheC1vcHRpb25hbC1jaGFpbmluZy03LjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS29LOUVySDFNQmxDUHhWMFZBTmtYVzIvZHc0dmxiR0RyRmd6OGJtVXNCR1lrRlJjYlJ3TWg2Y0lKdWJkUHJreFJ3dUdkdENrMHYvd1BUS2JRZ0Jqa2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItcGx1Z2luLXV0aWxzIjogIl43LjguMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEyLjEzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQvLS9wbHVnaW4tc3ludGF4LXRvcC1sZXZlbC1hd2FpdC03LjEyLjEzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BODFGOXBEd3lTN3lNLy9Ld2JDU0RxeTNVajROTUl1cnRwbHhwaFd4b1l0TlBvdjdjSnNEa0FGTk55VmxJWjNqd0d5Y1ZzdXJaK0x0T0E4Z1ozNzZpUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMTIuMTMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJhYmVsL3RlbXBsYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RlbXBsYXRlLy0vdGVtcGxhdGUtNy4xMi4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItLzd4eGlHQTU3eE1vL1AyR1Z2ZEV1bXI4T05oRk9oZmdxMmloSzNoMWU2VEhxelRBa0hia1hnQjB4STl5ZVRmSVVvSDMrb0FlSGhxbS9JNDNPVGJiakE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjEyLjEzIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC90cmF2ZXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3RyYXZlcnNlLy0vdHJhdmVyc2UtNy4xNC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Uc2RSZ3ZCRkhNeUhPT3pjUDlTNlFVMFFRdGp4bFJwRVlPeTNtY0NPNVJnbUMzMDVraTQyYVNBbWZaRU1TU1lCbGEyb1o5Qk1xWWxuY0JhS21ELzdpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvZGUtZnJhbWUiOiAiXjcuMTIuMTMiLAotICAgICAgICAiQGJhYmVsL2dlbmVyYXRvciI6ICJeNy4xNC4yIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItZnVuY3Rpb24tbmFtZSI6ICJeNy4xNC4yIiwKLSAgICAgICAgIkBiYWJlbC9oZWxwZXItc3BsaXQtZXhwb3J0LWRlY2xhcmF0aW9uIjogIl43LjEyLjEzIiwKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMTQuMiIsCi0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMTQuMiIsCi0gICAgICAgICJkZWJ1ZyI6ICJeNC4xLjAiLAotICAgICAgICAiZ2xvYmFscyI6ICJeMTEuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBiYWJlbC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMTQuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJhYmVsL3R5cGVzLy0vdHlwZXMtNy4xNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sQ2o0YUlzMHhVZWZKRlFud3dRdjJCeGc3T21kNmJncXVaNkxHQytnR01oNi9zNXFEVmZqdUNNbERtWVExNVNMc1dIZDluK1gzRTc1bEtJaGw1TGtpdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci12YWxpZGF0b3ItaWRlbnRpZmllciI6ICJeNy4xNC4wIiwKLSAgICAgICAgInRvLWZhc3QtcHJvcGVydGllcyI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGJjb2UvdjgtY292ZXJhZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGJjb2UvdjgtY292ZXJhZ2UvLS92OC1jb3ZlcmFnZS0wLjIuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMGhZUThTQjREYjV6dlpCNGF4ZE1IR3dFYVFqa1p6RmpRaU45TFZZdklGQjJuU1VIVzl0WXB4V3JpUHJXREFTSXhpYVhheDgzUkVjTHh1U2RuR1BadHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIkBjbmFrYXphd2Evd2F0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNuYWthemF3YS93YXRjaC8tL3dhdGNoLTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12OWtJaEt3amVaVGhpV3JMbWoweTE3Q1dveWRkQVNMajlPMnl2YlprYnZ3L04zcldPWXk5emtWNjZ1cnNBb1ZyMG1WMTViTDhnMGM0UVpVRTZjZERvUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXhlYy1zaCI6ICJeMC4zLjIiLAotICAgICAgICAibWluaW1pc3QiOiAiXjEuMi4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXN0YW5idWxqcy9sb2FkLW55Yy1jb25maWcvLS9sb2FkLW55Yy1jb25maWctMS4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZqZUhTbEl6cHYvTnlEM04wWXVIZlhPUERJaXhjQTFxMlpWOTh3c01xY1lsUG12Mm4zWWIybFlQOVhNRWxuYUZWWGc1QTdZTFRlTHU2Vjg0dVFEam1RPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYW1lbGNhc2UiOiAiXjUuMy4xIiwKLSAgICAgICAgImZpbmQtdXAiOiAiXjQuMS4wIiwKLSAgICAgICAgImdldC1wYWNrYWdlLXR5cGUiOiAiXjAuMS4wIiwKLSAgICAgICAgImpzLXlhbWwiOiAiXjMuMTMuMSIsCi0gICAgICAgICJyZXNvbHZlLWZyb20iOiAiXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBpc3RhbmJ1bGpzL3NjaGVtYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AaXN0YW5idWxqcy9zY2hlbWEvLS9zY2hlbWEtMC4xLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVpYUlk0ak52VmdTVlE4REwzTFRjYWthQXRYd1RWVXhFODFoc2xzeUQyQXRvWFcvd1ZvYjEwSGtPSjFYL3BBbGNJN0QrMllvWktnNWRvOEcvdzZSWWdBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJAamVzdC9jb25zb2xlIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9jb25zb2xlLy0vY29uc29sZS0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUlZMVIyaTJhTHNMcjdJZDNTNnAyQkE4MkdOV3J5dDRvU3ZFWExBS2MrTDJ6ZGk4OWRTa0U4eEMxQyswa3BBVEc0SmhCSlJFblFPSDcvem1jY00yQjBnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIkBqZXN0L2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BqZXN0L2NvcmUvLS9jb3JlLTI2LjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteHZWMWtLYmhmVXFGVnVaOEN5bytKUHBpcEFISEFWM2tjREJmdGlkdUs4RUlDWG1URmRkcnl5M1A3TmZadDhQdjM3ckE5bkVKQktDQ2tnbENQdC9Yanc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvbnNvbGUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC9yZXBvcnRlcnMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3RyYW5zZm9ybSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJleGl0IjogIl4wLjEuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiamVzdC1jaGFuZ2VkLWZpbGVzIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1jb25maWciOiAiXjI2LjYuMyIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNi4wLjAiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcyI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3QtcnVubmVyIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1ydW50aW1lIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1zbmFwc2hvdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXdhdGNoZXIiOiAiXjI2LjYuMiIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuMiIsCi0gICAgICAgICJwLWVhY2gtc2VyaWVzIjogIl4yLjEuMCIsCi0gICAgICAgICJyaW1yYWYiOiAiXjMuMC4wIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIsCi0gICAgICAgICJzdHJpcC1hbnNpIjogIl42LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9lbnZpcm9ubWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZW52aXJvbm1lbnQvLS9lbnZpcm9ubWVudC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5GeStmSGwyOHpVclJzQ2VNQjYxVkRUaFYxcFZUdGxFb2tCUmdxUHJjVDFKTnE0eVJOSXlUSGZ5aHQ2UHF0VXZZOUlzdUxHVHJiRzhrUFhqU1pJWndBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiXjI2LjYuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9mYWtlLXRpbWVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZmFrZS10aW1lcnMvLS9mYWtlLXRpbWVycy0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTE0VWxlYXR0N2pkemVmTFBZTTNLTGNuVWwxWk5pa2FLcTM0ZW5wYjVYRzlpODFKcHBwRGI1bXVadm9udkt5cmw3ZnRFSGtLUzVMNS9lQi9reEorYnZBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogIl42LjAuMSIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGplc3QvZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvZ2xvYmFscy8tL2dsb2JhbHMtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi04NUx0bm03SGxCL0tlc0JVdUFMd1E2OFlUVTcydzlIMnhXOUZqWjFlTDFVM2xodGVmampsNWMyTWlVYnBYdC9pNkxhUFJ2b09GSjIyeUNCU2ZRMEpJQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImV4cGVjdCI6ICJeMjYuNi4yIgotICAgICAgfQotICAgIH0sCi0gICAgIkBqZXN0L3JlcG9ydGVycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvcmVwb3J0ZXJzLy0vcmVwb3J0ZXJzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaDJiVzUzQVBHNEh2a09uVk1vOHEzUVhhNnBjYU50MUhrd1ZzT1BNQlY2TEQvcTlvU3B4TlNZWlFZa0FuamRNanJKODZVdVllTG8rYUVaQ2xWNm9wbnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiY29lL3Y4LWNvdmVyYWdlIjogIl4wLjIuMyIsCi0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdGVzdC1yZXN1bHQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90cmFuc2Zvcm0iOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIsCi0gICAgICAgICJleGl0IjogIl4wLjEuMiIsCi0gICAgICAgICJnbG9iIjogIl43LjEuMiIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4zLjAuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItaW5zdHJ1bWVudCI6ICJeNC4wLjMiLAotICAgICAgICAiaXN0YW5idWwtbGliLXJlcG9ydCI6ICJeMy4wLjAiLAotICAgICAgICAiaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzIjogIl40LjAuMCIsCi0gICAgICAgICJpc3RhbmJ1bC1yZXBvcnRzIjogIl4zLjAuMiIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yNi42LjIiLAotICAgICAgICAibm9kZS1ub3RpZmllciI6ICJeOC4wLjAiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4wIiwKLSAgICAgICAgInN0cmluZy1sZW5ndGgiOiAiXjQuMC4xIiwKLSAgICAgICAgInRlcm1pbmFsLWxpbmsiOiAiXjIuMC4wIiwKLSAgICAgICAgInY4LXRvLWlzdGFuYnVsIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC9zb3VyY2UtbWFwIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVl3WWNDd0FuTm1PVnNaOG1yM0dmbnpkWERBbDRMYWVuWlA1eitHMGM4YnpDOS9kdWdMOHpSbXhaemRvVGw0SWFTM0NyeVMxdVduUk9MUEZtYjZsVnZBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWxsc2l0ZXMiOiAiXjMuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjYuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC90ZXN0LXJlc3VsdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1yZXN1bHQvLS90ZXN0LXJlc3VsdC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVPN0g1Yy83WWxvanBoWU5ySzAyTGxESVYyR05QWWlzS3dIbTJRVEtqTlplRXplekNid1lzOXN3SnlTdjJVZlBNeVowVmRzbU12N2pJbEQvSUtZUXBRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC90ZXN0LXNlcXVlbmNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdGVzdC1zZXF1ZW5jZXIvLS90ZXN0LXNlcXVlbmNlci0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVlIbFZJalA1bmZFeWpsclNyOHQvWWROZlUvMVhFdDdjNWI0T3hjWENqeVJoanpMWXUvck82OS9XSFB1WWNiQ1drejhrQWVaVlpwMk4yK0lPTExFUEd3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcnVubmVyIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1ydW50aW1lIjogIl4yNi42LjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQGplc3QvdHJhbnNmb3JtIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AamVzdC90cmFuc2Zvcm0vLS90cmFuc2Zvcm0tMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FOUpqaFVnTnp2dVErdlZBTDIxdmx5ZnkxMmdQMEdoYXpHZ0pDNGg2cVV0MWpTZFVYR1dKMXdmdS9YN1NkOGV0U2d4VjRvdlQxcGI5djVENlFXNFhnQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2NvcmUiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiYmFiZWwtcGx1Z2luLWlzdGFuYnVsIjogIl42LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY29udmVydC1zb3VyY2UtbWFwIjogIl4xLjQuMCIsCi0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICJeMi4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtaGFzdGUtbWFwIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZWdleC11dGlsIjogIl4yNi4wLjAiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjIiLAotICAgICAgICAicGlyYXRlcyI6ICJeNC4wLjEiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInNvdXJjZS1tYXAiOiAiXjAuNi4xIiwKLSAgICAgICAgIndyaXRlLWZpbGUtYXRvbWljIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAamVzdC90eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGplc3QvdHlwZXMvLS90eXBlcy0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZDNlFDcDdTYzVzWDZnOFR2Ym1qNFhVVGJ5cmlrMGFrZ1J5MDN5alhiUWFCV1dOV0dFN1NHdEprOThtME44bnplZ0QvN1NnZ3JVbGl2eG81YXg0S1dRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIl4yLjAuMCIsCi0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtcmVwb3J0cyI6ICJeMy4wLjAiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE1LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHNpbm9uanMvY29tbW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9Ac2lub25qcy9jb21tb25zLy0vY29tbW9ucy0xLjguMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGtOY0xBbi93WmFYMTRSUGx3aXpjS2ljRGs5RzNGOG0yblUzTDdVa201ekJnVHdpVDB3c29GQUh4OUpxNTZmSkExei83dUtHdENSdTE2c09VQ0xJSFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInR5cGUtZGV0ZWN0IjogIjQuMC44IgotICAgICAgfQotICAgIH0sCi0gICAgIkBzaW5vbmpzL2Zha2UtdGltZXJzIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BzaW5vbmpzL2Zha2UtdGltZXJzLy0vZmFrZS10aW1lcnMtNi4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1aUFV4cm1GdWJJMzZYUzFESTNxbUkwWWROMWdrczYySnRGWnZ4UjY3bGpqU05DZUs2VTA4Wng0bXNFV09YdW9mZ3FVdDZ6UEhTaTFIOWZialIvTlJBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAc2lub25qcy9jb21tb25zIjogIl4xLjcuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdG9vdGFsbG5hdGUvb25jZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdG9vdGFsbG5hdGUvb25jZS8tL29uY2UtMS4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJiekp2bE56bVJxNWMzTzA5VWlwZXVYbm80dEExRkU2aWtPanhaSzB0dXhWdjM0MTJsNjRsNXQxVzVwajQrckpxOXZwa20va3dpUjA3YVpYbnNLUHh3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEuMTQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fY29yZS8tL2JhYmVsX19jb3JlLTcuMS4xNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItekdaSnp6QlVWRG8vZVY2S2diRTBmMFpJN2RJbkVZdm8xMlJiNzB1TlFEc2hDM1NrUk1iNjdqYTBHZ1JIWmdBWDNaYTZyaGFXbHZiRE84cnJHeUFiMWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9wYXJzZXIiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX19nZW5lcmF0b3IiOiAiKiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX3RlbXBsYXRlIjogIioiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICIqIgotICAgICAgfQotICAgIH0sCi0gICAgIkB0eXBlcy9iYWJlbF9fZ2VuZXJhdG9yIjogewotICAgICAgInZlcnNpb24iOiAiNy42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9iYWJlbF9fZ2VuZXJhdG9yLy0vYmFiZWxfX2dlbmVyYXRvci03LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTWRTSm5CamwrYmR3a0xza1ozTkdGcDlZY1hHeDVnZ0xwUVFQcXRnYWtWaHNXSzBoVHROWWhqcFpMbFdRVHZpR1R2RjhhdCtCdmxpM2pWN2ZhUGRnZVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2JhYmVsX190ZW1wbGF0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RlbXBsYXRlLy0vYmFiZWxfX3RlbXBsYXRlLTcuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OVFBFcng0L0ZpUENHU2NIN2ZvUHlyKy8xRGt6a25pK3JIaVlISG9UanZ3b3U3QVF6SmtOZUQ2MEE5Q1hSeStaRU4yQjFiZ2dta1RNQ0RiK012NWsrQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3BhcnNlciI6ICJeNy4xLjAiLAotICAgICAgICAiQGJhYmVsL3R5cGVzIjogIl43LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogewotICAgICAgInZlcnNpb24iOiAiNy4xMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvYmFiZWxfX3RyYXZlcnNlLy0vYmFiZWxfX3RyYXZlcnNlLTcuMTEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVnMwaG0wdlBhaFBNWWk5dERqdFA2NmxsdWZnTzNTVDE2V1hhU1R0REdFbDljZXdBbDNBaWJteFd3NlRJTk9xSFBUOXowdUFCS0FZalQ5ak5TZzRucHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2dyYWNlZnVsLWZzIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZzLTQuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hbktrTG1aWit4bTRwOEpXQmY0aEVsa000WFIrRVplQTJNOUJBa2tUbGRtY3lEWTRtYmRJSm5SZ2hESkgzT3Y1b29ZNy9VQW9FTnRtZE1Ta2FBZDdDdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UvLS9pc3RhbmJ1bC1saWItY292ZXJhZ2UtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXN6N2lMcXZWVWcxZ0llZEJPdmxreFBsYzgvdVZ6eVM1T3dHejFjS2pYemtsM0ZwTDNhbDBjclU4WUdVMVdvSGt4bjBXeGJ3NXR5aTZodnpKS056RnN3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJAdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMvaXN0YW5idWwtbGliLXJlcG9ydC8tL2lzdGFuYnVsLWxpYi1yZXBvcnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBsR2dYQVBmVktGb1lmYTlOcFlEQWtzZUcrZzZKcjI5NFJxZXFjcURpeFNiVTM0TVpWSlJpL1ArN1k4R0RwemtFd0xhR1paT3BLSUVtZVZaTnRLc3JnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvaXN0YW5idWwtbGliLWNvdmVyYWdlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2lzdGFuYnVsLXJlcG9ydHMvLS9pc3RhbmJ1bC1yZXBvcnRzLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jM21BWkV1SzBsdkJwOHRtdUw3NFhSS24xK3kyZGN3T1VwSDd4NFdyRjZnazFHSWdpbHVEUmdNWVF0dzJPRmNCdkFKV2x0NkFTVTN0U3F4cDBVdTBBdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQHR5cGVzL2lzdGFuYnVsLWxpYi1yZXBvcnQiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL2plc3QvLS9qZXN0LTI3LjUuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbXBUOExKSjRDTWVlYWhvYm9mWVdJakZvMHhvblJTL0hmeG5WRVBNUEZTUWRHVXQxdUhDbm9QVDdaaGIrc2pEVTJ3ejBvS1YwT0xVUjBXenJITmdmZUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjcuMC4wIiwKLSAgICAgICAgInByZXR0eS1mb3JtYXQiOiAiXjI3LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYW5zaS1zdHlsZXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXN0eWxlcy8tL2Fuc2ktc3R5bGVzLTUuMi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItQ3h3cHQyU2ZUelR0WGNmT2x6R0VlZThPK2MrTW1VZ0dyTmlCY1hudVd4dUZKSGU2YTVIejdxd2h3ZTVPZ2FTWUkwSUp2a0xxV1gxQVNHK2NKT2tFaUE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImRpZmYtc2VxdWVuY2VzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYtc2VxdWVuY2VzLy0vZGlmZi1zZXF1ZW5jZXMtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItazFnQ0FYQXNOZ0x3RUwrWThXdmwrTTZvRUZqNWJnYXpmWlVMcFM1Q25lb1BQWFJhQ0NXN2RtK3EyMUt5MlZFRTVYK1ZlUkRCVmcxUGN2dnNyNFR0TlE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImplc3QtZGlmZiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWRpZmYvLS9qZXN0LWRpZmYtMjcuNS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItbTBOdmtYNTVMRHQ5VDRtY3RURWduWmszZm1FZzNOUll1dHZNUFdNLzBpUG5rRmoyd0llRjQ1TzE3MThjTVNPRk8xdklOa3FteHFEOHZFMzd1VEVicXc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICAgICAiZGlmZi1zZXF1ZW5jZXMiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWdldC10eXBlLy0vamVzdC1nZXQtdHlwZS0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yS1k5NWtzWVNhSzdETUJXUW42ZFF6M2txQWYzQkI2NHkydWRlRytodjRLZlNPYjlxd2NZUXN0VEpjMUtDYnNpeCt3TFpXWllOOHQ3bndYM0dPQkxSdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjI3LjUuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbWF0Y2hlci11dGlscy8tL2plc3QtbWF0Y2hlci11dGlscy0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16MnVUeC9UNkxCYUNvTldORld3Q2hMQktZeFRNY0dCUmpBdCsyU2JQOTI5L0ZmbGI5YWE1TEdtYTY1NFJ6OHo5SEx4c3JVYVl6eEU5VC9FRklML1BBdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJqZXN0LWRpZmYiOiAiXjI3LjUuMSIsCi0gICAgICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjcuNS4xIiwKLSAgICAgICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNy41LjEiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyNy41LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dHktZm9ybWF0Ly0vcHJldHR5LWZvcm1hdC0yNy41LjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RYjFneTVPclA1K3pEZjJCdm56ZGwzanNUZjFxWFZNYXpidkNvS2h0S3FWczQvWUs0b3pYNGdLUUpKVnlOZStjYWpOUG4wS29DME1DM0ZVbWFIV0VtUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1yZWdleCI6ICJeNS4wLjEiLAotICAgICAgICAgICAgImFuc2ktc3R5bGVzIjogIl41LjAuMCIsCi0gICAgICAgICAgICAicmVhY3QtaXMiOiAiXjE3LjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMvbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIyLjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9ub2RlLy0vbm9kZS0yMi4xMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GbGwyRloxcmlNak5tbG1KT2RBeVk1cFVia2Z0WHNsQjVEZ0V6bEl1TmFpV2hYZDAwRmhXeFZDL3I0eVYvNHdCYjlKZkltVHUramlTdlhUa0o3Ri9nQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAidW5kaWNpLXR5cGVzIjogIn42LjIwLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiQHR5cGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEvLS9ub3JtYWxpemUtcGFja2FnZS1kYXRhLTIuNC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mNWo1Yi9HZjcxTCtkYnF4SXBRNFoyV2xtSS9tUEowZk9rR0dtRmd0YjZzQXU5N0VQY3p6YlMzL3RKS3htY1lEajU1T1g2c3Nxd0RBV09ISVlEUkRHQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQHR5cGVzL3ByZXR0aWVyIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9wcmV0dGllci8tL3ByZXR0aWVyLTIuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QaWpSQ0cvSzNzM3cxV2U2eW5VS2R4RWM1QWN1dUgzTkJtTURQOHV2S1ZwNlg0M1VZN05RbFR6Y3pha1hQM0RKUjBGNGRmTlFJR2pVMmNVZVJZczJBQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQHR5cGVzL3N0YWNrLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0B0eXBlcy9zdGFjay11dGlscy8tL3N0YWNrLXV0aWxzLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SSkpycnlTWTdBOGhhdnFwR09iT0I0VzkyUVhLSm82My9qRkxMZ3B2T3RzR1VxYlFaOVNiZ2wzNUtNbTFEakM2ajdBdm1tVTJiSW5vKzNJeUVhZW1hdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiQHR5cGVzL3lhcmdzIjogewotICAgICAgInZlcnNpb24iOiAiMTUuMC4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQHR5cGVzL3lhcmdzLy0veWFyZ3MtMTUuMC4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta1E1Sk5UcmJEdjNScDVYMm4vaVV1MzdJSkJEVTJnc1o1Ui9nMS9LSE9PRWM1SUtmVUZqWFQ2REVOUEdkdWgwOEkvcGFtd3RFcTRvdWw3Z1VxS1RRRFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy95YXJncy1wYXJzZXIiOiAiKiIKLSAgICAgIH0KLSAgICB9LAotICAgICJAdHlwZXMveWFyZ3MtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjAuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AdHlwZXMveWFyZ3MtcGFyc2VyLy0veWFyZ3MtcGFyc2VyLTIwLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMzdSU0hodCtnenpnWWVvYmJHK0tXcnllQVc4SjMzTmhyNjljalRxU1l5bVhWWkVOOU5iUllXb1lsUnREaEhLUFZUMUZ5Tkt3YVRQQzFOeW5LWnB6UkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFiYWIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWJhYi8tL2FiYWItMi4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlJSzlFYWRzYkhvNmpMV0lweHBSNnBMMHNhelRYVjYrU1F2MjVaQitGN0JqOW1KTmFPYzRuQ1JhYndkNU0vSndtVWE4aWR6NkVjaTZlS2ZKcnlQczZRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhY29ybiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi8tL2Fjb3JuLTguMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi10cVBLSFo1Q2FCSncwWG15MFpadkxzMXFUVitCTkZTeXZuNzdBU1hrcEJOZklSazhldjI2ZktyRDlpTEd3R0E5emVkUGFvNTJHU0h6cThseVpHME5Vdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYWNvcm4tZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi1nbG9iYWxzLy0vYWNvcm4tZ2xvYmFscy02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWlFsN0xPV2FGNWVQcXFjWDRoTHV2L2JMWFlRTmZOV3cyYzAveVgvVHNQUkthbXpIY1RHUW5sQ2pIVDNUc21rT1VWRVBTM2NyQ3hpUGZkekUvVHJsaGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFjb3JuIjogIl43LjEuMSIsCi0gICAgICAgICJhY29ybi13YWxrIjogIl43LjEuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiYWNvcm4iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy40LjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY29ybi8tL2Fjb3JuLTcuNC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItblF5cDBvMS9tTmRiVE8xUE82a0hrd1NybWdaME1UL2pDQ3BOaXdiVWpHb1JONGRsQmhxSnRvUXVDbkVPS3pnVFZ3ZzBaV2lDb1F5NlN4TWViUVZoOEE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImFjb3JuLXdhbGsiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYWNvcm4td2Fsay8tL2Fjb3JuLXdhbGstNy4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9QZENGNkdzTUlQK0F6K2FXZkFBT0V0Mi8raVZES0U3b3k2bEowOThhb2U1OW9BbUs3NnFWNkd3NjBTYlo4akh1RzJ3SDA1OEdGNHBMRmJZYW1ZclZBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhZ2VudC1iYXNlIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FnZW50LWJhc2UvLS9hZ2VudC1iYXNlLTYuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SWk53TmNsRjcrTVMvOGJEZzcwYW1nMzJkeWVaR1p4aUR1UW1aeEtMQWxRanIzakd5THgrNEtrazU4VU83RDJRZGdGSVFDb3Z1U3VaRVNuZTZSRzZYUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJhbnNpLWVzY2FwZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1lc2NhcGVzLy0vYW5zaS1lc2NhcGVzLTQuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nS1hqNUFMcktXUUxzWUc5amxUUm1SL3hLbHV4SFYrWjlRRXdOSWdDZk0xL3V3UE1DdXpWVm5oNW13VGQrT3VCWmN3U0lNYnFzc05XUm0xbEU1MVFhUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjIxLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYW5zaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnNpLXJlZ2V4Ly0vYW5zaS1yZWdleC01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcXVKUVhsVFNVR0wyTEg5U1VYbzhWd3NZNHNvYW5oZ282TE5TbTg0RTFMQmNFOHMzTzB3cGRpUnp5Ujl6L1paSk1sTVd2MzdxT09iOXBkSmxNVUVLRlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFuc2ktc3R5bGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fuc2ktc3R5bGVzLy0vYW5zaS1zdHlsZXMtNC4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpiQjlyQ0pBVDFyYmppVkRiMmhxS0ZITllMeGd0azhOVVJ4WjNJWndEM0Y2TnR4YlhaUUNublNpMUxreCtJRG9oZFBsRnAyMjJ3VkFMSWhlWkpRU0VnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4yLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJhbnltYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hbnltYXRjaC8tL2FueW1hdGNoLTMuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QNDNlUGZPQUl1cGtndUhVeWNyYzRxSjlrejhaaXVPVWlqYUVUd1g3VEh0MFkvR05LN3YwYWE4clk4MTZ4V2paN3JKZEE1WGRNY3BWRlRLTXErUnZXZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibm9ybWFsaXplLXBhdGgiOiAiXjMuMC4wIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4wLjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYXJncGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMTAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2FyZ3BhcnNlLy0vYXJncGFyc2UtMS4wLjEwLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vNVJveTZ0Tkc0U0wvRk9rQ0FONlJ6amlha1pTMjVSTFlGcmNNdHRKcWJkZDhCV3JuQStmR3o1N2lONVBiMDZwdkJHdmw1Z1EwQjQ4ZEpsc2xYdm9UZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic3ByaW50Zi1qcyI6ICJ+MS4wLjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYXJyLWRpZmYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyLWRpZmYvLS9hcnItZGlmZi00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTFrWVFkUDYvN0hIbjRWSTFkaG95bWwzSHhTQT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhcnItZmxhdHRlbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hcnItZmxhdHRlbi8tL2Fyci1mbGF0dGVuLTEuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MM2hLVjVSL3A1bzgxUjdPMDJJR253cERta3A2RTk4MlhodGJ1d1NlM080cU90TU1NdG9kaWNBU0ExQ255MlUrYUNYY05wbWwrbTRkUHN2c0ozamF0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYXJyLXVuaW9uIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fyci11bmlvbi8tL2Fyci11bmlvbi0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTQ1c0pycW5lK0dhbzhnYmlpSzlqa1p1dU9jUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhcnJheS11bmlxdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktdW5pcXVlLy0vYXJyYXktdW5pcXVlLTAuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtcUpTM1hVdkU5czFubnZNa1NwL1k5R3JpMUNnPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImFzc2lnbi1zeW1ib2xzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Fzc2lnbi1zeW1ib2xzLy0vYXNzaWduLXN5bWJvbHMtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1XV1ovUWZyZFR5RE12Q3U1YTQxUGYzanNBMmM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYXN5bmNraXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXN5bmNraXQvLS9hc3luY2tpdC0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXg1N1pmMzgweTQ4cm9ieVhrTHpEWmtkTFMzaz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJhdG9iIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2F0b2IvLS9hdG9iLTIuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XbTZ1a29hT0dKaS83M3AvY2wyR3ZMalRJNUpNMWsvTzE0aXNENzNZTUw4U3RySC83L2xSRmdtZzhuSUNaZ0QzYlpadmp3Q0d4dE1PRDN3V05BdThjZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYmFiZWwtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtamVzdC8tL2JhYmVsLWplc3QtMjYuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wbDRRK0dBVk9Id3ZqcmNrNmpLanZtR2huTzNqSFgveHVCOWQyN2YrRUpaLzZrKzZuTXVQam9ycllwN3MrK2JLS2RBTnd6RWxCV25MV2FPYnZUbmFaQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX2NvcmUiOiAiXjcuMS43IiwKLSAgICAgICAgImJhYmVsLXBsdWdpbi1pc3RhbmJ1bCI6ICJeNi4wLjAiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LWplc3QiOiAiXjI2LjYuMiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJlbC1wbHVnaW4taXN0YW5idWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLWlzdGFuYnVsLy0vYmFiZWwtcGx1Z2luLWlzdGFuYnVsLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1BRjU1clpYcGU3dHJtRXlsYmFFMUd2NTR3bjZyd1UwM2FwdHZSb1ZJR1A4WXlrb1N4cWRWTFYxVGZ3ZmxCQ0UvUXRIbXF0UDhTV2xURU5xYks4R0NTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL2hlbHBlci1wbHVnaW4tdXRpbHMiOiAiXjcuMC4wIiwKLSAgICAgICAgIkBpc3RhbmJ1bGpzL2xvYWQtbnljLWNvbmZpZyI6ICJeMS4wLjAiLAotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItaW5zdHJ1bWVudCI6ICJeNC4wLjAiLAotICAgICAgICAidGVzdC1leGNsdWRlIjogIl42LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJlbC1wbHVnaW4tamVzdC1ob2lzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFiZWwtcGx1Z2luLWplc3QtaG9pc3QvLS9iYWJlbC1wbHVnaW4tamVzdC1ob2lzdC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVBPOXQwNjk3bE5UbWNFSEg2OW1kdFlpT0lra09sajlmeVNxZk8zSzFlQ2NkSVNldkxBRTB4WTU5VkxMVWowU29pUGlUWC9KVTJDWUZwSUx5ZFVhNUx3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdGVtcGxhdGUiOiAiXjcuMy4zIiwKLSAgICAgICAgIkBiYWJlbC90eXBlcyI6ICJeNy4zLjMiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX19jb3JlIjogIl43LjAuMCIsCi0gICAgICAgICJAdHlwZXMvYmFiZWxfX3RyYXZlcnNlIjogIl43LjAuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJiYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtY3VycmVudC1ub2RlLXN5bnRheC8tL2JhYmVsLXByZXNldC1jdXJyZW50LW5vZGUtc3ludGF4LTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NN0xRMGJ4YXJreFFvTit2ejVhSlBzTEJuNzduOFFnVEZtbzhXSzAvNDRhdUsyeGxDWHJZY1V4SEZ4Z1U3cVc1WXp3L0NqbUxSSzJ1SnphQ2Q3THZxUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYXN5bmMtZ2VuZXJhdG9ycyI6ICJeNy44LjQiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtYmlnaW50IjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1jbGFzcy1wcm9wZXJ0aWVzIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1pbXBvcnQtbWV0YSI6ICJeNy44LjMiLAotICAgICAgICAiQGJhYmVsL3BsdWdpbi1zeW50YXgtanNvbi1zdHJpbmdzIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1sb2dpY2FsLWFzc2lnbm1lbnQtb3BlcmF0b3JzIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1udWxsaXNoLWNvYWxlc2Npbmctb3BlcmF0b3IiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW51bWVyaWMtc2VwYXJhdG9yIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC1vYmplY3QtcmVzdC1zcHJlYWQiOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNhdGNoLWJpbmRpbmciOiAiXjcuOC4zIiwKLSAgICAgICAgIkBiYWJlbC9wbHVnaW4tc3ludGF4LW9wdGlvbmFsLWNoYWluaW5nIjogIl43LjguMyIsCi0gICAgICAgICJAYmFiZWwvcGx1Z2luLXN5bnRheC10b3AtbGV2ZWwtYXdhaXQiOiAiXjcuOC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImJhYmVsLXByZXNldC1qZXN0IjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYWJlbC1wcmVzZXQtamVzdC8tL2JhYmVsLXByZXNldC1qZXN0LTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWXZkdGxWbTl0M2s3NzdjNU5QUUl2NmN4RkZGYXB5czI1SGlVbXVTZ0h3SVpoZmlmd2VSNWM1U2Y1bndFM01BYmZ1MzI3Q1lTdnBzOFl4NkFOTHlsZVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhYmVsLXBsdWdpbi1qZXN0LWhvaXN0IjogIl4yNi42LjIiLAotICAgICAgICAiYmFiZWwtcHJlc2V0LWN1cnJlbnQtbm9kZS1zeW50YXgiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJhbGFuY2VkLW1hdGNoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JhbGFuY2VkLW1hdGNoLy0vYmFsYW5jZWQtbWF0Y2gtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTNvU2VVTzBUTVY2N2hOMUFtYlhzSzR5YXFVN3RqaUhsYnhSRFpPcEgwS1c5K0NlWDRiUkFhWDBBbnh0MHR4Mk1ycFJwV3dRYVB3SWxJU0VKaFlVNVB3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJiYXNlIjogewotICAgICAgInZlcnNpb24iOiAiMC4xMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9iYXNlLy0vYmFzZS0wLjExLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVUNlA0eFBncHAwWURGdlNXd0VaNE5vRTNhTTRRQlFYRHptVmJyYUNrRmo4ekhNK21iYThTeXFCNURiWld5UjdtWUhvNlk3QmRRbzNNb0E0bTBUZVFnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjYWNoZS1iYXNlIjogIl4xLjAuMSIsCi0gICAgICAgICJjbGFzcy11dGlscyI6ICJeMC4zLjUiLAotICAgICAgICAiY29tcG9uZW50LWVtaXR0ZXIiOiAiXjEuMi4xIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4xIiwKLSAgICAgICAgIm1peGluLWRlZXAiOiAiXjEuMi4wIiwKLSAgICAgICAgInBhc2NhbGNhc2UiOiAiXjAuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMS4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtZHA2NnJ6OUtZNnJUcjU2Tk1FeWJ2bm0vc09ZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjEuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImJyYWNlLWV4cGFuc2lvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4xMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTEuMS4xMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaUN1UEhERmdySFg3SDJ2RUkvNXhwejA3elNIQjAwVHB1Z3FobVl0Vm1NTzY1MThtQ3VSTW9PWUZsZEVCbDBnMTg3dWZvemRhSGdXS2NZRmI2MXFHaUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhbGFuY2VkLW1hdGNoIjogIl4xLjAuMCIsCi0gICAgICAgICJjb25jYXQtbWFwIjogIjAuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImJyYWNlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icmFjZXMvLS9icmFjZXMtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWI4dW0rTDFSek0zV0RTenZobTZnSXoxeWZUYkJ0NllUbGNFS0F2c21xQ1paRnc0Nno2MjZsVmo5ajF5RVBXMzNINUgrbEJRcFpNUDFrOGwrNzhIYTBBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmaWxsLXJhbmdlIjogIl43LjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJicm93c2VyLXByb2Nlc3MtaHJ0aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Jyb3dzZXItcHJvY2Vzcy1ocnRpbWUvLS9icm93c2VyLXByb2Nlc3MtaHJ0aW1lLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi05bzVVZWNJM0doa3BNNkRyWHI2OVBibEl1V3hQS2s5WTBqSEJSaGRvY1oyeTdZRUNCRkNzSG03OVByM095UjJBdmpoRGthYkZKYURKTVlSYXpIZ3Nvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiYnJvd3NlcnNsaXN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4xNi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icm93c2Vyc2xpc3QvLS9icm93c2Vyc2xpc3QtNC4xNi42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Xc3BrL1BxTys0VzlxcDVpVVRKc2ExQi9RclluMWtlTkNjRVA1T3ZQN1dCd1Q0S2FEbHkwdU9OWW1DNlhhM1o1SXFuVWdTMEtjZ0xZdTFsNzR4MFpYUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2FuaXVzZS1saXRlIjogIl4xLjAuMzAwMDEyMTkiLAotICAgICAgICAiY29sb3JldHRlIjogIl4xLjIuMiIsCi0gICAgICAgICJlbGVjdHJvbi10by1jaHJvbWl1bSI6ICJeMS4zLjcyMyIsCi0gICAgICAgICJlc2NhbGFkZSI6ICJeMy4xLjEiLAotICAgICAgICAibm9kZS1yZWxlYXNlcyI6ICJeMS4xLjcxIgotICAgICAgfQotICAgIH0sCi0gICAgImJzLWxvZ2dlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9icy1sb2dnZXIvLS9icy1sb2dnZXItMC4yLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBkOERDb3htYmdjN2h5UEtPdnh0cU5jallvT3NBQlBRZGNDVWpHcDNkNDJWUjJDWDFPUmhrMkE4N29xcXU1UjFrays3Nm5zeFp1cGtteWQrTVZ0Q29nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSI6ICIyLngiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiYnNlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ic2VyLy0vYnNlci0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZ1F4VE5FL0dBZklJcm1ITFVFM29KeXA1Rk82SFJCZmhqbnc0L3dNbUE2M1pHREpuV0JtZ1kvbHlRQnBuRFVrR21BaGJTZTM5dHgyZC9pVE9BZmdsd1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm5vZGUtaW50NjQiOiAiXjAuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImJ1ZmZlci1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1ZmZlci1mcm9tLy0vYnVmZmVyLWZyb20tMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU1RY1hFVWJDS3RFbzdiaHFFczY1NjBIeWQ0WGFvdlpsTy9rOVYzaGpWVUYvendXN0tCVmRTSzRnSXQvYnp3UzlNYlI1cW9iK0Y1anVzWnNiMFlRSzJBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJidWlsdGluLW1vZHVsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnVpbHRpbi1tb2R1bGVzLy0vYnVpbHRpbi1tb2R1bGVzLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSnc4SGJGcHl3QzliWmFSOStVeGY0Nko0aVM4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNhY2hlLWJhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FjaGUtYmFzZS8tL2NhY2hlLWJhc2UtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUFLY2RUbkZTV0FUZDUvR0NQUnhyMkNod0lKODVDZXlyRXlqUkhsS3hRNTZkNFhKTUd5bTB1QWlLbjB4YkxPR09sMyt5UnBPVGk0ODRkVkNFYzVBVXpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjb2xsZWN0aW9uLXZpc2l0IjogIl4xLjAuMCIsCi0gICAgICAgICJjb21wb25lbnQtZW1pdHRlciI6ICJeMS4yLjEiLAotICAgICAgICAiZ2V0LXZhbHVlIjogIl4yLjAuNiIsCi0gICAgICAgICJoYXMtdmFsdWUiOiAiXjEuMC4wIiwKLSAgICAgICAgImlzb2JqZWN0IjogIl4zLjAuMSIsCi0gICAgICAgICJzZXQtdmFsdWUiOiAiXjIuMC4wIiwKLSAgICAgICAgInRvLW9iamVjdC1wYXRoIjogIl4wLjMuMCIsCi0gICAgICAgICJ1bmlvbi12YWx1ZSI6ICJeMS4wLjAiLAotICAgICAgICAidW5zZXQtdmFsdWUiOiAiXjEuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImNhbGxzaXRlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYWxsc2l0ZXMvLS9jYWxsc2l0ZXMtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVA4QmpBc1h2WlMrVklEVUkxMWhIQ1FFdjc0WVQ2N1lVaTVKSkZOV0lxTDIzNXNCbWpYNCtxeDlNdXZsczVpdnlORU5jdHg0NnhRTFEzYVR1RTdzc2FRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjYW1lbGNhc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjMuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2FtZWxjYXNlLy0vY2FtZWxjYXNlLTUuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MMjhTVEIxNzBud1dTNjNVanRsRU9FM2RsZFFBcGFKWFprT0kxdU1GZnpmM3JSdVBlZ0hhSGVzeWVlK1l4UStXNlN2UkRRVjZVcmRPZFJpUjE1M3dKZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY2FuaXVzZS1saXRlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMwMDAxMjMzIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jYW5pdXNlLWxpdGUvLS9jYW5pdXNlLWxpdGUtMS4wLjMwMDAxMjMzLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1CbWtieExmU3RxaVBBN0lFelFwSWswVUZaRmYzQTRFNmZ6alBKNk9SK2JGQzJMOEVTOUo4ekdBL2Fzb2k0N3A4WERWa2V2K1dKbzJJMk5jOGMvMzRZZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY2FwdHVyZS1leGl0IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhcHR1cmUtZXhpdC8tL2NhcHR1cmUtZXhpdC0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUGlUL2hRbVRvbkhobC9IRkdOK0x4M0pKVXpuclZZSjMrQVFzbnRobmVaYnZXN3grZjA4VGs3eUxKVExFT1V2QlRiZHVMZWVCa3hFYVlYVU9VclJxNmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInJzdnAiOiAiXjQuOC40IgotICAgICAgfQotICAgIH0sCi0gICAgImNoYWxrIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstNC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRpSHpkREt4Y1UrYkFzVWJvSExQRURRaXcwcUVlMHFkN1NZVW4zSGdjRmxXZ2JEY2ZMR3N3T0hZZUdySEt6Rzl6NlVZZjAxZDlWRk1mWnhQTTF4WlNnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4xLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgImNoYXItcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY2hhci1yZWdleC8tL2NoYXItcmVnZXgtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtXV1h6dHZaNVNCUVYrZVJnS0ZlaDhxNXNMdVpZMis4V1VJemx4V1ZUZytvR3dZMTRxeWx4MUtiS3pIZDhQNlpZa0FnMHh5SURVOUpNSGh5Sk1aMWp3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjaS1pbmZvIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NpLWluZm8vLS9jaS1pbmZvLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01dEs3RXRyWjBOK09MRk10aHRxT2o0ZkkySmViODhDNENBWlB1MjVMRFZVZ1hKMEEzSnM0UE1HcXJuMEpVMVcwTWgxL1o4d1p6WVB4cVVyWGVCYm9DUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY2pzLW1vZHVsZS1sZXhlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9janMtbW9kdWxlLWxleGVyLy0vY2pzLW1vZHVsZS1sZXhlci0wLjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdWMyVml4MWZyVGZudXp4eHUxSHA0a3RTdk0zUWFJNG9YbDRaVXFMMXdqVHUvQkdraTlUckNXb3FMVGcvZHJSMUt3QUVhclh1UkZDRzJTdnIxR3hQRnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImNsYXNzLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsYXNzLXV0aWxzLy0vY2xhc3MtdXRpbHMtMC4zLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFPaFBhL0ZqN3M2VFk4SDhlc0d1NVFOcE1NUXh6NzloK3VyenJOWU42bW4rOUJueGxER2Y1UVorWGVDRHN4U2pQcXNTUjU2WE9aT0ptcGV1cm5MTWVnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnItdW5pb24iOiAiXjMuMS4wIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMC4yLjUiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YXRpYy1leHRlbmQiOiAiXjAuMS4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4yLjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMC4yLjUudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdzFzZStSanNQSmtQbWx2RmUrQktyT3hjZ1JZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWFjY2Vzc29yLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLy0vaXMtYWNjZXNzb3ItZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1xZUVzczY2TmgyY243dTg0US9pZ2lYdGNtTlk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWRhdGEtZGVzY3JpcHRvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRhdGEtZGVzY3JpcHRvci8tL2lzLWRhdGEtZGVzY3JpcHRvci0wLjEuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DMTdtU0RpT0xJWUNndWVUOFlWdjdEOHdHMVk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kZXNjcmlwdG9yLy0vaXMtZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2RFlyMFNCM0R3Tzl6c01vdjBnS0NFU0ZZcUNuRTRocS80ejNUZFVsdWtFeTV0OUMwWVJxN0hMcnNONTJOQWNxWEthZXBlQ0QwbitCMGFyblZHM0hnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogIl4wLjEuNiIsCi0gICAgICAgICAgICAiaXMtZGF0YS1kZXNjcmlwdG9yIjogIl4wLjEuNCIsCi0gICAgICAgICAgICAia2luZC1vZiI6ICJeNS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTUuMS4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdFRXJuSDZGMnZVdVhEaCtPbGJjS1c3L3dPY2ZkUkhhWjdWV3RxQ3p0ZkhyaS8rK1lLbVA1MU9kV2VHUHVxQ09iYTZrazJPVGU1ZDAyVm1UQjgwUHc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImNsaXVpIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NsaXVpLy0vY2xpdWktNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQ2d2JndG9DWHZBenN0N1FnWHhKWXFQdDB1c0VmYmdRZGZ0RVBiTEwvY3Z2NkhQRTVWZ3ZxQ3VBSURSME5nVTUyZHM2ckZ3cXJnYWtOTHJIRWpDYnJRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMi4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIiwKLSAgICAgICAgIndyYXAtYW5zaSI6ICJeNi4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiY28iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjYuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY28vLS9jby00LjYuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWJxYTk4OWhUcmxUTXVPUjcrZ3Z6K1FNZnNZUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb2xsZWN0LXY4LWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbGxlY3QtdjgtY292ZXJhZ2UvLS9jb2xsZWN0LXY4LWNvdmVyYWdlLTEuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1pQlB0bGpmQ05jVEtOQXRvMEtFdERmWjNxempKdnFFM2FUR1pzYmhqU0Jsb3JxcFhKbGFXV3RQTzM1RCtaSW1vQzNLV2VqWDY0byt5UEd4aFdTVHpmZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29sbGVjdGlvbi12aXNpdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xsZWN0aW9uLXZpc2l0Ly0vY29sbGVjdGlvbi12aXNpdC0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVM4QTNQQlpMd3lrYlRUYU1ncHp4cUFwWjNLQT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtYXAtdmlzaXQiOiAiXjEuMC4wIiwKLSAgICAgICAgIm9iamVjdC12aXNpdCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiY29sb3ItY29udmVydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb2xvci1jb252ZXJ0Ly0vY29sb3ItY29udmVydC0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItUlJFQ1BzajdpdS94YjVvS1ljc0ZIU3BwRk5uc2ovNTJPVlRSS2I0elA1b25Yd1ZGM3pWbW1Ub05jT2ZHQytDUkRwZksvVTU4NGZNZzM4WkhDYUVsS1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvbG9yLW5hbWUiOiAifjEuMS40IgotICAgICAgfQotICAgIH0sCi0gICAgImNvbG9yLW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRPeSszQXVXM2Eyd05iWkhJdU1acFRjZ2pHdUxVL3VCTC91YmNaRjlPWGJEbzhmZjRPOHlWcDVCZjBlZlM4dUVvWW81cTRGeDdkWTlPZ1FHWGdBc1FBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb2xvcmV0dGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3JldHRlLy0vY29sb3JldHRlLTEuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NS0dNenlmZXV1dEMvWkoxY2JhOU5xY05wZmVxTVVjWW15RjFaRlk2L0NuN0NOU0FLeDZhK3M0OHNxTHF5QWladWFQMlRjcU1ob28rZGx3Rm5WeFQ5dz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29tYmluZWQtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbWJpbmVkLXN0cmVhbS8tL2NvbWJpbmVkLXN0cmVhbS0xLjAuOC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRlFONE1SZnVKZUhmN2NCYkJNSkZYaEtTRHErMmtBQXJCbG1SQnZjdkZFNUJCMUhaS1h0U0ZBU0RoZGx6OXpPWXd4aDhsRGRudm1NT2UvKzVjZG9FZGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlbGF5ZWQtc3RyZWFtIjogIn4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJjb21tYW5kZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIwLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbW1hbmRlci8tL2NvbW1hbmRlci0yLjIwLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdwVmttTTh2RjJ2UVVrajJMdlptRDM1SnhlSk9MQ3dKOWNVa3VneWsybnVoYnYzK21KdnBMWVl0KzArVVNNeEUrb2orZXkvbEpFbmhadzc1eC9PTWNRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb21wb25lbnQtZW1pdHRlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb21wb25lbnQtZW1pdHRlci8tL2NvbXBvbmVudC1lbWl0dGVyLTEuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SZDNzZTZRQitzTzFUd3FaanNjUXJ1cnBFUElmTzAveVluU2luNlEvckQzbU91dEh2VXJDQWhKdWIzcjkwdU5iK1NFU0J1RTBRWW9COTBZZGZhdHNSZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY29uY2F0LW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb25jYXQtbWFwLy0vY29uY2F0LW1hcC0wLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTJLbHIxMy9XamZkNU9uTURhanVnMVVCZFIzcz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJjb252ZXJ0LXNvdXJjZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjcuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29udmVydC1zb3VyY2UtbWFwLy0vY29udmVydC1zb3VyY2UtbWFwLTEuNy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00RkprWHpLWEVEQjFzbkNGWmxMUDRncEMzSklMaWNDcEdiekc5ZjlHN3RHcUdDekVUUTJoV1ByY2luQTlvVTR3dGYyYmlVYUVINTA2NVVuTWVSMzNvQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2FmZS1idWZmZXIiOiAifjUuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImNvcHktZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb3B5LWRlc2NyaXB0b3IvLS9jb3B5LWRlc2NyaXB0b3ItMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1aMjl1czhPWmw4THVHc09wSlAxaEpIU1BWNDA9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY3Jvc3Mtc3Bhd24iOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Jvc3Mtc3Bhd24vLS9jcm9zcy1zcGF3bi03LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaVJEUEpLVVBWRU5EN2RIUE84cmtiT25QcHlEeWdjREZ0V2pwZVdOQ2d5OFdQMnJYY3hYTDhUc2tSZVFsNk9yQjJHNytVSnJhZ3MxcTE1RnVkYzdHNnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBhdGgta2V5IjogIl4zLjEuMCIsCi0gICAgICAgICJzaGViYW5nLWNvbW1hbmQiOiAiXjIuMC4wIiwKLSAgICAgICAgIndoaWNoIjogIl4yLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJjc3NvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NvbS8tL2Nzc29tLTAuNC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1wM3B2VTdyMU15eXFiVGsrV2JOSklnSmpHMlZtVElhQjEwckk5M0x6VlBybURKS2t6S1lNdHh4eUF2UVhSL05TNm90dXp2ZUk3KzdCQnEzU2pCUzJtdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiY3Nzc3R5bGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY3Nzc3R5bGUvLS9jc3NzdHlsZS0yLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQVpMNjdhYmtVekl1dmNIcWs3YzA5Y2V6cEdOY3hVeFU0SW9pLzA1eEhrNERRZVRrV21HWWZ0SUU2Y3RVNkFFdCtHbjRuMWxEU3RPdGo3Rkt5Y1A3MUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNzc29tIjogIn4wLjMuNiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiY3Nzb20iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4zLjgiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jc3NvbS8tL2Nzc29tLTAuMy44LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjB0R0hiZmVnYmhQSnB4cGlCUFUyc0NraWdBcXRNOU8xMjFsZTZiYk9sZ3lWK055R3lDbVZmSjZRVzllUmp6OENwTmZXRU9ZQklNSUdSWWtMd3NJWWc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImRhdGEtdXJscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kYXRhLXVybHMvLS9kYXRhLXVybHMtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVg1ZVdUU1hPL0JKbXBkSUtDUnVLVWdTQ2dBTjBPd2xpVkszeVBLYndJV1UxVGR3NUJSYWp4bHpNaWR2aCtnd2tvOUFmUTl6SWo1MnB6RjkxUTNZQXZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhYmFiIjogIl4yLjAuMyIsCi0gICAgICAgICJ3aGF0d2ctbWltZXR5cGUiOiAiXjIuMy4wIiwKLSAgICAgICAgIndoYXR3Zy11cmwiOiAiXjguMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImRlYnVnIjogewotICAgICAgInZlcnNpb24iOiAiNC4zLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctNC4zLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWRvRXdkdm00UENlSzRLM1JRTjJaQzJCWVVCYXh3TEFSQ3FabU1qdEY4YTUxSjJSYjB4cFZsb0ZSbkNPRHdxanB3bkFvYW80cGVsTjhsM1JKZHYzZ1JRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtcyI6ICIyLjEuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJkZWNhbWVsaXplIjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY2FtZWxpemUvLS9kZWNhbWVsaXplLTEuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtOWxOTkZSU0NhYklEVXVlKzRtOVFINW9aRXBBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImRlY2ltYWwuanMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxMC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY2ltYWwuanMvLS9kZWNpbWFsLmpzLTEwLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItS2FMNys2Rnc2aTVBMlhTbnNiaG0vNkIrTnVFQTdUWjR2cXhuZDV0WHo5c2JLdHJOOVNyajhhYjR2S1ZkSzhZQXFaTzlQMWtnNDVZNllMb2R1UGYra3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImRlY29kZS11cmktY29tcG9uZW50IjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlY29kZS11cmktY29tcG9uZW50Ly0vZGVjb2RlLXVyaS1jb21wb25lbnQtMC4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS02emtUTXpSWWQxeTRUTkdoK3VCaUVHdTRkVVU9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZGVlcC1pcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWVwLWlzLy0vZGVlcC1pcy0wLjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXMyblcrMTI4RSs3UFVrK1JzSEQrN2NOWHp6UT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJkZWVwbWVyZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVlcG1lcmdlLy0vZGVlcG1lcmdlLTQuMi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GSjNVZ0k0Z0lsK1BIWm01M2tuc3VTRnBFK25FU01yN000djlRY2dCN1M2M0tqLzZXcU1pRlFKcEJCWXoxUHQrNjZiWnBQM1E3THllME9vOU1QS0VkZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1wcm9wZXJ0eS8tL2RlZmluZS1wcm9wZXJ0eS0yLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItandLMlVWNGNuUHBiY0c3K1ZSQVJLVFpQVVdvd3dYQThiekg1TlA2dWQwb2VBeHlZUHVHWlVBQzdoTXVncENkejRCZVNabDJEbDlrNjZDSEovNDZaWVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjEuMC4yIiwKLSAgICAgICAgImlzb2JqZWN0IjogIl4zLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJkZWxheWVkLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWxheWVkLXN0cmVhbS8tL2RlbGF5ZWQtc3RyZWFtLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtM3pyaG1heXQrMzFFQ3FyZ3NwNGljckpPeGhrPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImRldGVjdC1uZXdsaW5lIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RldGVjdC1uZXdsaW5lLy0vZGV0ZWN0LW5ld2xpbmUtMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVRMeit4L3ZFWG0vWTdQN3duMUVKRk5MeFlwVUQ0VGdNb3N4WTZmQVZKVW5KTWJ1cEhCT25jeHlXVUc5T3BUYUg5RUJEN3VGSTVMZkVnbU1PYzU0RHNBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJkaWZmIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYvLS9kaWZmLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi01OGxteEtTQTRCTnlMeitISE1VemxPRXBnMDlGVitldjZaTWUzdkppaGdkeHpnY3daOFZvRUVQbUFMQ1pHOUxtcWZWb05NTUtwdHRJWVRWRzZ1RFk3QT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZGlmZi1zZXF1ZW5jZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYtc2VxdWVuY2VzLy0vZGlmZi1zZXF1ZW5jZXMtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Ndi9URGEzblo5c2JjNXNvSytPb0E3NEJzUzNtTDM3eWl4Q3ZVQVFraXVBNFd6Nll0d1AvSzQ3bjJydjJvdnpIWnZvaVFlQTVGVFFPc2NoS2tFd0IwUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZG9tZXhjZXB0aW9uIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RvbWV4Y2VwdGlvbi8tL2RvbWV4Y2VwdGlvbi0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteXhKMm1GeS9zaWJWUWx1NXFIak9rZjlKM0s2emdtQ3hnSjk0dTJFZHZET1YwOUgrMzJMdFJzd0VjVXNtVVdONzJwVkxPRW5UU1JhSVZWelZRZ1MwZGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIndlYmlkbC1jb252ZXJzaW9ucyI6ICJeNS4wLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgIndlYmlkbC1jb252ZXJzaW9ucyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dlYmlkbC1jb252ZXJzaW9ucy8tL3dlYmlkbC1jb252ZXJzaW9ucy01LjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZsWndLUENrWUt4UWdlU2JINUV5bmdPbVJwN1d3N0k5clFMRVJFVHRmNW9mZDlwR2Vzd1dpT3RvZ3BFTzg1MGp6aVBSYXJyZUd4bjVRSWlUcXBiMndBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJlbGVjdHJvbi10by1jaHJvbWl1bSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMy43NDMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsZWN0cm9uLXRvLWNocm9taXVtLy0vZWxlY3Ryb24tdG8tY2hyb21pdW0tMS4zLjc0My50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSzJ3WGZvOWlaUXpOSk54NjcrUGxkMERSRis5Yllpbmo2MmdYQ2RnUGhjdTF2aWR3VnVMUEhRUFBGbkNkTzU1bmpXaWdYWHBmQmlUOTBqR1VQYnc4Wmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImVtaXR0ZXJ5IjogewotICAgICAgInZlcnNpb24iOiAiMC43LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VtaXR0ZXJ5Ly0vZW1pdHRlcnktMC43LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUE4T0c1U1IvaWozU3NKZFdESmRra1NZVWpRZENVeDZBUFFYZW0wU2FFZVBCU1JnNGV5bUdZd0JrS28xWTZEVSthZi9KbjJkQlFxREJ2am5yOVZpOG5RPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlbW9qaS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjguMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbW9qaS1yZWdleC8tL2Vtb2ppLXJlZ2V4LTguMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NU2pZemNXTk9BMGV3QUhwejBNeHBZRnZ3ZzZ5ankxTkczeHRlb3F6NjQ0VkNvL1JQZ25yMS9HR3QraWMzaUpUelE4RXUzVGRNMTRTYXduVlVtR0U2QT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZW5kLW9mLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbmQtb2Ytc3RyZWFtLy0vZW5kLW9mLXN0cmVhbS0xLjQuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItK3V3MWluSUhWUFFvYVZ1SHpSeVhkMjFpY00rY250NEN6RDVyVytOQzF3ak9VU1RPcytUZTdGT3Y3QWhON3ZTOXgvb0l5aExQNVBSMUgrcGhRQUh1NVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm9uY2UiOiAiXjEuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImVycm9yLWV4IjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Vycm9yLWV4Ly0vZXJyb3ItZXgtMS4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTdkRkhObXFlRlNFdDJaQnNDcmlvcktubjNaMnBqK2ZkOWttSTZRb1d3NC8vREwraWNFQmZjMFU3cUpDaXNxclRzS1RqdzRmTkZ5MnBXOU9xU3REODRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1hcnJheWlzaCI6ICJeMC4yLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXNjYWxhZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYWxhZGUvLS9lc2NhbGFkZS0zLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazBlcjJnVWtMZjhPMHpLSmlBaG1rVG5KbFR2SU5Hdjd5Z0ROUGJlSXNYL1RKakdKWkh1aDlCMlV4YnNhRWttbEVvOU1maHJTem1oSWxoUmxJMkdYbnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzY2FwZS1zdHJpbmctcmVnZXhwLy0vZXNjYXBlLXN0cmluZy1yZWdleHAtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVwemNMQ1hvbFVXY051NUh0Vk1IWWRYSmpBcmpzRjlDMGFObnF1WllZNHVXL1Z1MG1peTVZb1d2YlYzNDVIYXVWdmNBVW5wUnVoTU1jcVRjR09ZMit3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlc2NvZGVnZW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjb2RlZ2VuLy0vZXNjb2RlZ2VuLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tbUhLeXMvQzhCRlVHSStNQVdOY1NZb09SWUxNZFB6anJrbmQyVmMrYlVzak41YlhjcjhFaHJOQitVVHFmTDF5M0k5YzRmdzJpaGd0TVBRTEJSaVF4dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZXNwcmltYSI6ICJeNC4wLjEiLAotICAgICAgICAiZXN0cmF2ZXJzZSI6ICJeNS4yLjAiLAotICAgICAgICAiZXN1dGlscyI6ICJeMi4wLjIiLAotICAgICAgICAib3B0aW9uYXRvciI6ICJeMC44LjEiLAotICAgICAgICAic291cmNlLW1hcCI6ICJ+MC42LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZXNwcmltYSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc3ByaW1hLy0vZXNwcmltYS00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZUd1RkZ3N1VwZGErZzRwK1FIdm5XMFJ5VFgvU1ZlSkJETS9nQ3RNQVJPMGNMdVQySGNFS25UUHZoalY2YUdlcXJDQi9zYk5vcDBLc3ptMGpzYVdVNEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImVzdHJhdmVyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXN0cmF2ZXJzZS8tL2VzdHJhdmVyc2UtNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJ4Yk5HR05tMFJ5Ull2VWRIcEl3djlJV3plTTlYQ2xiT3h3b0FUdUZkT0U3WkU2d0hMK0hRNVQ4aG9QTSt6SHZtS3p6c0VxaGd5MEdyUTVYMTNhZmlRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJlc3V0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzdXRpbHMvLS9lc3V0aWxzLTIuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rVnNjcVhrNE9DcDY4U1owZGtnRUtWaTYvOGlqMzAwS0JXVEpxMzJQL2RZZVdUU3dLNDFXeVR4YWxOMWVSbUE1WjlVVS9MWDlEN0ZXU21WOVNBWXg2Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZXhlYy1zaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjLXNoLy0vZXhlYy1zaC0wLjMuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItblFuK2hJM3lwK29EMGh1WWhLd3ZZSTMyK0pGZXErWGtOY0QxR0FvM1kvTWp4c2ZWR21ycnpybnpqV2lOWTZmK3BVQ1A0NDBmVGhzRmg1Z1pyUkFVL3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImV4ZWNhIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4ZWNhLy0vZXhlY2EtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWo1VzAvL1c3ZjhVeEFuOGhYVm53Rzh0THdkaVV5NEZKTGNTdXBDZzZtYUJZWkRweUJ2VEFwSzdLeXVJNGJLajhLT2gxcjJZSCs2dWN1WXRKdjFiVFpBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjcm9zcy1zcGF3biI6ICJeNy4wLjAiLAotICAgICAgICAiZ2V0LXN0cmVhbSI6ICJeNS4wLjAiLAotICAgICAgICAiaHVtYW4tc2lnbmFscyI6ICJeMS4xLjEiLAotICAgICAgICAiaXMtc3RyZWFtIjogIl4yLjAuMCIsCi0gICAgICAgICJtZXJnZS1zdHJlYW0iOiAiXjIuMC4wIiwKLSAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICJeNC4wLjAiLAotICAgICAgICAib25ldGltZSI6ICJeNS4xLjAiLAotICAgICAgICAic2lnbmFsLWV4aXQiOiAiXjMuMC4yIiwKLSAgICAgICAgInN0cmlwLWZpbmFsLW5ld2xpbmUiOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImV4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXhpdC8tL2V4aXQtMC4xLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CakpqajQySGZNZ2hCOU1LRC84YUY4dWh6UXc9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZXhwYW5kLWJyYWNrZXRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGFuZC1icmFja2V0cy8tL2V4cGFuZC1icmFja2V0cy0yLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXQzYzE0eFhPTVBhMjcvRDRPd1FWR2lKRWxpST0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6ICJeMi4zLjMiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMi4wLjEiLAotICAgICAgICAicG9zaXgtY2hhcmFjdGVyLWNsYXNzZXMiOiAiXjAuMS4wIiwKLSAgICAgICAgInJlZ2V4LW5vdCI6ICJeMS4wLjAiLAotICAgICAgICAic25hcGRyYWdvbiI6ICJeMC44LjEiLAotICAgICAgICAidG8tcmVnZXgiOiAiXjMuMC4xIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJkZWJ1ZyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjYuOSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlYnVnLy0vZGVidWctMi42LjkudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1iQzdFbHJkSmFKblBiQVArMUVvdFl2cVpzYjNlY2w1d2k2QmZpNkJKVFVjTm93cDZjdnNwZzBqWHpuUlRLRGptL0U3QWRnRkJWZUFQVk1OY0tHc0hNQT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibXMiOiAiMi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnR5Ly0vZGVmaW5lLXByb3BlcnR5LTAuMi41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXcxc2UrUmpzUEprUG1sdkZlK0JLck94Y2dSWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4wLjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGVuZC1zaGFsbG93Ly0vZXh0ZW5kLXNoYWxsb3ctMi4wLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVWE5OVlVclpxZllRNmh1dnU1aWRheHhXaVE4PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWV4dGVuZGFibGUiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWFjY2Vzc29yLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLy0vaXMtYWNjZXNzb3ItZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1xZUVzczY2TmgyY243dTg0US9pZ2lYdGNtTlk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWRhdGEtZGVzY3JpcHRvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRhdGEtZGVzY3JpcHRvci8tL2lzLWRhdGEtZGVzY3JpcHRvci0wLjEuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DMTdtU0RpT0xJWUNndWVUOFlWdjdEOHdHMVk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjYiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kZXNjcmlwdG9yLy0vaXMtZGVzY3JpcHRvci0wLjEuNi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF2RFlyMFNCM0R3Tzl6c01vdjBnS0NFU0ZZcUNuRTRocS80ejNUZFVsdWtFeTV0OUMwWVJxN0hMcnNONTJOQWNxWEthZXBlQ0QwbitCMGFyblZHM0hnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogIl4wLjEuNiIsCi0gICAgICAgICAgICAiaXMtZGF0YS1kZXNjcmlwdG9yIjogIl4wLjEuNCIsCi0gICAgICAgICAgICAia2luZC1vZiI6ICJeNS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVlyRVE0b21rY1VHT1BzTnFZWDFITGpBZC9Jaz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJraW5kLW9mIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuMS4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtNS4xLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OR0VFcm5INkYydlV1WERoK09sYmNLVzcvd09jZmRSSGFaN1ZXdHFDenRmSHJpLysrWUttUDUxT2RXZUdQdXFDT2JhNmtrMk9UZTVkMDJWbVRCODBQdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAibXMiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tcy8tL21zLTIuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVZnaXVyZndBdm13cEFkOWZtR0Y0amVEVmw4Zz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJleHBlY3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cGVjdC8tL2V4cGVjdC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTkvaGxPQmtRbDJsL1BMSEp4Nkpqb0RGNnhQS2NKRXNVbFdLYjIzcktFN0t6ZURxVVpLWEtOTVcyN0tJdWU1Sk1kQlY5SGdtb0pQY2M4SHRPODV0OUlBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNi4zLjAiLAotICAgICAgICAiamVzdC1tYXRjaGVyLXV0aWxzIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1tZXNzYWdlLXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI2LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJleHRlbmQtc2hhbGxvdyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leHRlbmQtc2hhbGxvdy8tL2V4dGVuZC1zaGFsbG93LTMuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtSnFjYXJ3YzdPZnNoSnhjblJoTWNKd1FDamJnPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFzc2lnbi1zeW1ib2xzIjogIl4xLjAuMCIsCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4xLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJleHRnbG9iIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGdsb2IvLS9leHRnbG9iLTIuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ObWI2UVhrRUxzdUJyMjRDSlNraWxvNlVISGdiZWtLNVVpWmdmRTZVSEQzRWIyN1lDNm9EK2JoY1QrdEo2Y2w4ZG1zZ2RReG5XbGNyeThrc0JJQkxwdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYXJyYXktdW5pcXVlIjogIl4wLjMuMiIsCi0gICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiAiXjEuMC4wIiwKLSAgICAgICAgImV4cGFuZC1icmFja2V0cyI6ICJeMi4xLjQiLAotICAgICAgICAiZXh0ZW5kLXNoYWxsb3ciOiAiXjIuMC4xIiwKLSAgICAgICAgImZyYWdtZW50LWNhY2hlIjogIl4wLjIuMSIsCi0gICAgICAgICJyZWdleC1ub3QiOiAiXjEuMC4wIiwKLSAgICAgICAgInNuYXBkcmFnb24iOiAiXjAuOC4xIiwKLSAgICAgICAgInRvLXJlZ2V4IjogIl4zLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnR5Ly0vZGVmaW5lLXByb3BlcnR5LTEuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWRwNjZyejlLWTZyVHI1Nk5NRXlidm5tL3NPWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4xLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGVuZC1zaGFsbG93Ly0vZXh0ZW5kLXNoYWxsb3ctMi4wLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVWE5OVlVclpxZllRNmh1dnU1aWRheHhXaVE4PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWV4dGVuZGFibGUiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWV4dGVuZGFibGUiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1leHRlbmRhYmxlLy0vaXMtZXh0ZW5kYWJsZS0wLjEuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1ZckVRNG9ta2NVR09Qc05xWVgxSExqQWQvSWs9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvLS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGhkL3dGK0xrOThIWm9UQ3RsVnJhSHRmaDVYWWlqSWphbFhjazdzYVV0dWFuU0R5TE14bkhoU1hFREpxSHhEN21zUjhEMHVDbXFsa3dqQ1Y4eHZ3SHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImZhc3QtbGV2ZW5zaHRlaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmFzdC1sZXZlbnNodGVpbi8tL2Zhc3QtbGV2ZW5zaHRlaW4tMi4wLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1QWXBjWm9nNkZxTU1xR1EraFI4WnVxZDVlUmM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZmItd2F0Y2htYW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmItd2F0Y2htYW4vLS9mYi13YXRjaG1hbi0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRGtQSktRZVk2a0t3bXVNcmV0QmhyN0c2Vm9kcjdiRndEWVRYSWtmRzFnanZOcGF4QlRRVjNQYlhnNmJSMWMxVVA0alBPWDBqSFViYkhBTkw5dlJqVmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJzZXIiOiAiMi4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZmlsbC1yYW5nZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maWxsLXJhbmdlLy0vZmlsbC1yYW5nZS03LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcU9vOUYrZE1VbUMyTGNiNEJiVnZuS0p4VFBqQ20rUlJwZTRnRHVHcnprTDdtRVZsL2RqWVN1Mk9kUTJQYTMwMk40b3FrU2c5aXI2amFMV0oyVVNWcFE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInRvLXJlZ2V4LXJhbmdlIjogIl41LjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJmaW5kLXVwIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZpbmQtdXAvLS9maW5kLXVwLTQuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1QcE93QWRRL1lsWFEydmo4YTNoOElpcER1WVJpM3djZVZRUUdZV3hOSU5jY3E0MEFudzdCbHNFWENNYnQxWnQrT0xBNkZxOXN1SXBJV0QwT3NuSVNsdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibG9jYXRlLXBhdGgiOiAiXjUuMC4wIiwKLSAgICAgICAgInBhdGgtZXhpc3RzIjogIl40LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJmb3ItaW4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZm9yLWluLy0vZm9yLWluLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtZ1FhTktWcUJRdXdLeHliRzRpQU1NUHR0WG9BPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImZvcm0tZGF0YSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9mb3JtLWRhdGEvLS9mb3JtLWRhdGEtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJIa0JLdExXVVZ3ZDdTcVJJdkNaTUV2QU1vR1VwMFhVK3NlUWlaZWpqMENPejNSSTNoV1A0c0N2M2daV1dMakpUZDdyR3djc0Y1ZUtaR2lpMHIvaGJnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhc3luY2tpdCI6ICJeMC40LjAiLAotICAgICAgICAiY29tYmluZWQtc3RyZWFtIjogIl4xLjAuOCIsCi0gICAgICAgICJtaW1lLXR5cGVzIjogIl4yLjEuMTIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZnJhZ21lbnQtY2FjaGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJhZ21lbnQtY2FjaGUvLS9mcmFnbWVudC1jYWNoZS0wLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVFwRDYwbjhUNkp2bjh6ZVp4cnhhQ3IvL0RSaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJtYXAtY2FjaGUiOiAiXjAuMi4yIgotICAgICAgfQotICAgIH0sCi0gICAgImZzLnJlYWxwYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZzLnJlYWxwYXRoLy0vZnMucmVhbHBhdGgtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1GUVN0SlNNVmpLcEEyMG9uaDhzQlFSbVU2azg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZnNldmVudHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnNldmVudHMvLS9mc2V2ZW50cy0yLjMuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteGlxTVFSNHhBZUhUdUI5dVdtK2ZGUmNJT2dLQk1pT0JQK2VYaXlUN2pzZ1ZDcTFia1Z5Z3QwMG9BU293QjdFZHRwT0hhYVBnS3Q4MTJQOWFiK0RES0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJvcHRpb25hbCI6IHRydWUKLSAgICB9LAotICAgICJmdW5jdGlvbi1iaW5kIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Z1bmN0aW9uLWJpbmQvLS9mdW5jdGlvbi1iaW5kLTEuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15SW92QXpNWDQ5c0Y4WWw1OGZTQ1dKNXN2U0x1YWliUHhYUUpGTG1CT2JUdUNyME1mMUtpUG9wR005TmlGamlZQkNiZmFhMkZoNmJyZVE2QU5WVEkwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZ2Vuc3luYyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wLWJldGEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2Vuc3luYy8tL2dlbnN5bmMtMS4wLjAtYmV0YS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zaE43TmFza1l2TURMUVk1NWduVzNOUSttZXNFQWVwVHFsZytWRWJqN3p6cUVNQlZOaHpjR1lZZXFGby9UbFl6NmVRaUZjcDFIY3NDWk8rbkdnUzh6Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZ2V0LWNhbGxlci1maWxlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1jYWxsZXItZmlsZS8tL2dldC1jYWxsZXItZmlsZS0yLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRHlGUDNCTS8zWUhUUU9DVUwvdzBPWkhSMGxwS2VHcnhvdGNIV2NxTkVkbmx0cUZ3WFZmaEVCUTk0ZUlvMzRBZlFwbzByR2tpNGN5SWlmdFkwNmgyRmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImdldC1wYWNrYWdlLXR5cGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZ2V0LXBhY2thZ2UtdHlwZS8tL2dldC1wYWNrYWdlLXR5cGUtMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBqenVLdFk2NEdZZldpek5BSjBmcjlWcXR0WmtOaUsyaVM0MzBMdElIempCRXI2Ylg4QW0yem00c1c0Um81d2pXVzVjQWxSTDFxQU1UY1hiak5BTzJRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJnZXQtc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC1zdHJlYW0vLS9nZXQtc3RyZWFtLTUuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uQkYrRjFyQVpWQ3UvcDdyanpnQStZYjRsZllYcnBsN2E2Vm1KclU4d0Y5STFDS3ZQL1F3UE5aSG5PbHdiVGtZNmR2dEZJekZNU3lRWGJMb1RRUFJwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicHVtcCI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZ2V0LXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dldC12YWx1ZS8tL2dldC12YWx1ZS0yLjAuNi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTNCWEtIR2NqaDhwMnZUZXNDamxib2dRcUxDZz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJnbG9iIjogewotICAgICAgInZlcnNpb24iOiAiNy4xLjciLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2IvLS9nbG9iLTcuMS43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PdkQ5RU56UExiZWdFTm5ZUDVVVWZKSWlyVGc0K1h3TVdHYVFmUVRZMEplbnhOdnZJS1AzVTMvdEFRU1BJdS9sSHhYWVNabXBYbFVIZXFBSWRLekJMUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZnMucmVhbHBhdGgiOiAiXjEuMC4wIiwKLSAgICAgICAgImluZmxpZ2h0IjogIl4xLjAuNCIsCi0gICAgICAgICJpbmhlcml0cyI6ICIyIiwKLSAgICAgICAgIm1pbmltYXRjaCI6ICJeMy4wLjQiLAotICAgICAgICAib25jZSI6ICJeMS4zLjAiLAotICAgICAgICAicGF0aC1pcy1hYnNvbHV0ZSI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiZ2xvYmFscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjExLjEyLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dsb2JhbHMvLS9nbG9iYWxzLTExLjEyLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdPQnAvRUVHVWlJc0pTcDd3Y3YveTZNTytsVjlVb25jV3F4dUZmbThlQnd6V05neWZCZDZHeitJZUtROWpDbXlob0g5OWcxNU0zVCtRYVZIRmppelZBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJncmFjZWZ1bC1mcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ncmFjZWZ1bC1mcy8tL2dyYWNlZnVsLWZzLTQuMi42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1uVG5KNTI4cGJxeFlhbmhwRFlzaTRSZDhNQWVhQkE2NytSWjEwQ00xbTNiVEFWRkVEY2Q1QXVBNGE2VzVZa0daMWlOWEh6Wno4VDZUQktMZUJ1TnJpUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiZ3Jvd2x5IjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dyb3dseS8tL2dyb3dseS0xLjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLThRZEl5K2RxK1dTM3lXeVR4cnpDaXZFZ3dJRT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgfSwKLSAgICAiaGFzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy8tL2hhcy0xLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZjJkdk8wVlU2T2VqN1JrV0pHcmVoamJ6TUFqRnA1L1ZLUHA1dFRwV0lWNEpISFpLMS9CeGJGUnRmL3NpQTJTV1RlMDljYURtVnRZWXpXRUliQlM0enc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZ1bmN0aW9uLWJpbmQiOiAiXjEuMS4xIgotICAgICAgfQotICAgIH0sCi0gICAgImhhcy1mbGFnIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2hhcy1mbGFnLy0vaGFzLWZsYWctNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUV5a0pUL1ExS2pUV2N0cHBnSUFnZlNPMHRLVnVaVWpoZ01yMTdrcVR1bU1sNkFmdjNFSVNsZVU3cVpVem9YREZUQUhUREM0Tk9vRy9aeFUzRXZsTVBRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJoYXMtdmFsdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXZhbHVlLy0vaGFzLXZhbHVlLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtR0xLQjJsaGJIRnhSM3ZKTWt3N1NtZ3Ztc1hjPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdldC12YWx1ZSI6ICJeMi4wLjYiLAotICAgICAgICAiaGFzLXZhbHVlcyI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImhhcy12YWx1ZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXZhbHVlcy8tL2hhcy12YWx1ZXMtMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1sYkMyUCt3aFJtR2FiK1YvNTFZbzFhT2Uvazg9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMtbnVtYmVyIjogIl4zLjAuMCIsCi0gICAgICAgICJraW5kLW9mIjogIl40LjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtbnVtYmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtbnVtYmVyLy0vaXMtbnVtYmVyLTMuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLUpQMWlBYVI0TFBVRlljZ1FKMnI4ZlJMWEVaVT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTQuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLUlJRTk4OWNTa29zZ2MzaHBHa1VHYjY1eTNWYz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgImhvc3RlZC1naXQtaW5mbyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuOC45IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ob3N0ZWQtZ2l0LWluZm8vLS9ob3N0ZWQtZ2l0LWluZm8tMi44LjkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW14SURBYjlMc202RG9PSjd4SCs1K1g0eTFMVS80SGk1MEw5QzVzSXN3SzNKelVMUzRid2sxRnZqZEJndllSNGJ6VDR0dVVRaUMxNUZFMmY1SGJMdll3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJodG1sLWVuY29kaW5nLXNuaWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lbmNvZGluZy1zbmlmZmVyLy0vaHRtbC1lbmNvZGluZy1zbmlmZmVyLTIuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ENUpiT01CSVIvVFZaa3ViSFQrT3lUMjcwNVF2b2dVVzRJQm42bkhkNzU2T3dpZVNGOWFEWUZqNGR2NkhIRVZHWWJIYUxFVGEzV2dnWllXV015eTNaUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid2hhdHdnLWVuY29kaW5nIjogIl4xLjAuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJodG1sLWVzY2FwZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHRtbC1lc2NhcGVyLy0vaHRtbC1lc2NhcGVyLTIuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IMmlNdGQwSTRNdDVlWWlhcFJkSURqcCtYemVsWFEwdEZFNEpTN1lGd0ZldlhYTW1PcDlteU5yVXZDZzBENndzOGlxa1JQQmZLSGdid2lnMVNtbExmZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaHR0cC1wcm94eS1hZ2VudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9odHRwLXByb3h5LWFnZW50Ly0vaHR0cC1wcm94eS1hZ2VudC00LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItazB6ZE5ncVdUR0E2YWVJUlZwdmZWb2I0Zkw1MmRUZmFlaHlsZzBZNFV2U3lTdk9xL1krQk95UHJncFVyQTdIeWxxdlU4dklaR3NSdVhtc3Bza1YwVGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0b290YWxsbmF0ZS9vbmNlIjogIjEiLAotICAgICAgICAiYWdlbnQtYmFzZSI6ICI2IiwKLSAgICAgICAgImRlYnVnIjogIjQiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaHR0cHMtcHJveHktYWdlbnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHR0cHMtcHJveHktYWdlbnQvLS9odHRwcy1wcm94eS1hZ2VudC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRWtZbTVCY0tVR2lkdXh6U3QzRXBwa28rUGlOV05FcGE0eVNrOXZUQzZ3RHNRSlc5ckhTYStVaEdOSm9SWXA3Yno2SHQxZWFSSWE2UWFKcU81ckNGYkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFnZW50LWJhc2UiOiAiNiIsCi0gICAgICAgICJkZWJ1ZyI6ICI0IgotICAgICAgfQotICAgIH0sCi0gICAgImh1bWFuLXNpZ25hbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaHVtYW4tc2lnbmFscy8tL2h1bWFuLXNpZ25hbHMtMS4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVNFUXU3dmw4S2pOTDJlb0dCTEYzK3dBanBzTmZBOVhNbFhBWWovM0VkYU5mQWx4S3RoRDF4akVRZkdPVWhsbENHR0pWTlkzNGJScjZsUElOaE5qeVp3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpY29udi1saXRlIjogewotICAgICAgInZlcnNpb24iOiAiMC40LjI0IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXYzTVhuWkFjdm55d2tUVUVab21JQWN0bGU3UlhYZWVkT1IzMXd3bDdWbHlvWE80UWk5YXJ2U2VuTlFXbmUxVGNSd2hDTDFId0xJMjFiRXFkcGo4L3JBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzYWZlci1idWZmZXIiOiAiPj0gMi4xLjIgPCAzIgotICAgICAgfQotICAgIH0sCi0gICAgImltcG9ydC1sb2NhbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbXBvcnQtbG9jYWwvLS9pbXBvcnQtbG9jYWwtMy4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZqTDMrdzBvdWxBVlowaEJIbnhhL05tNVRBdXJmOVlMUUpEaHFSWnlxYitWS0dPQjZMVTh0OUgxTnI1Q0lvMTZ2aDlYZkpUT29Id1UwQjcxUzU1N2dBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwa2ctZGlyIjogIl40LjIuMCIsCi0gICAgICAgICJyZXNvbHZlLWN3ZCI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaW11cm11cmhhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW11cm11cmhhc2gvLS9pbXVybXVyaGFzaC0wLjEuNC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWtoaTVzcmtvb2ppeFBjVDdhMjFYYnlNVVUrbz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpbmZsaWdodCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC42IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pbmZsaWdodC8tL2luZmxpZ2h0LTEuMC42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtU2Ixak1kZlFMUXdKdkpFS0VIVzZnV1cxYmZrPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm9uY2UiOiAiXjEuMy4wIiwKLSAgICAgICAgIndyYXBweSI6ICIxIgotICAgICAgfQotICAgIH0sCi0gICAgImluaGVyaXRzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWsvdkdhWDQvWWxhM1d6eU1DdlRRT1hZZUlIdnFPS3RucUJkdXpUSHB6cFFaekFza0tNaFoySytFbkJpU005ekdTb0lGZU1wWEt4YTRkWWVaSVFxZXdRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3IvLS9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1tNWhuSFRrY1ZzUGZxeDNBS2x5dHRJUGI3SitYeWtIdkpQMkI5YlpEamxoTElvRXE0WG9LNjRWZzdib1psVldZSzZMVVk5NGRZUEVFN0xoMFprWktjUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAia2luZC1vZiI6ICJeNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXMtYXJyYXlpc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYXJyYXlpc2gvLS9pcy1hcnJheWlzaC0wLjIuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWQ4bVlRRko2cU95eHFMcHBlNEJrV25xU2FwMD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYnVmZmVyLy0vaXMtYnVmZmVyLTEuMS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OY2RBTHdwWGtUbTVadnZiazdvd09VU3ZWdkJLRGdLUDUvZXdmWEV6bm1RRmZzNFpSbWFuT2VLQlRqUlZqa2EzUUZvTjZYSis5RjNVU3FmSHFUYVU1dz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaXMtY2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtY2kvLS9pcy1jaS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWWZKVDdya3BRQjB1cGRzZEhMR1dydmhCSmZjZnpOTmF3WUROSXlRWEp6MElWaUdmNzVPOEVCUEtTZHZ3MnJGK0xHQ3NYNEZaOHRjcjNiMTlMY1pxNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNpLWluZm8iOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWNvcmUtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWNvcmUtbW9kdWxlLy0vaXMtY29yZS1tb2R1bGUtMi40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZBMmZrZnExcmZlUVpqeHJaSkdlcnBMQ1RIUk5FQmlTZ251MCtvYmVKcEVQWlJVb29IZ3NpenZ6djBaakp3T3ozaVdJSGRKdFZXSi90bVByM0QyMS9BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoYXMiOiAiXjEuMC4zIgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWRhdGEtZGVzY3JpcHRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kYXRhLWRlc2NyaXB0b3IvLS9pcy1kYXRhLWRlc2NyaXB0b3ItMS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWpiUlh5MUZtdEFvQ2pRa1ZtSVZZd3V1cURGVWJhT2VEam1lZDF0T0dQcnNNaHRKQTRyRDl0a2dBMEYxcUozZ1JGUlhjSFlWa2RlYVA1MFE1ckUvakxRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogIl42LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1kZXNjcmlwdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRlc2NyaXB0b3IvLS9pcy1kZXNjcmlwdG9yLTEuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0yZWlzNVdxUUdWN3Blb29EeUxtTkVQVXJwczkrU1hYNWM5cEwzeEVCKzRlOUhuR3VEYTdtQjdrSHhIdzRDYnFTOWsxVDJoT0gzbWlMOG44V3RpWVZ0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6ICJeMS4wLjAiLAotICAgICAgICAiaXMtZGF0YS1kZXNjcmlwdG9yIjogIl4xLjAuMCIsCi0gICAgICAgICJraW5kLW9mIjogIl42LjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJpcy1kb2NrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZG9ja2VyLy0vaXMtZG9ja2VyLTIuMi4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GK2kyQktzRnJINjZpYVVGYzB3b0Q4c0x5OGdldGt3VHd0T0JqdnM1NkN4NENnSkRlS1FlcWZ6OHdBWWlTYjhKT3ByV2hISDVwNzdQYm1ZQ3Z2VXVYUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZQotICAgIH0sCi0gICAgImlzLWV4dGVuZGFibGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0ZW5kYWJsZS8tL2lzLWV4dGVuZGFibGUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFyblhNeFQxaGhvS285azFMWmRtbE55SmRERGZ5MnYwZlhqRmxtb2s0K2k4dWwvNldsYlZnZTliaE03NE9wTlBRUE1HVVRvRHR6K0tYYTFQbmVKeE9BPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1wbGFpbi1vYmplY3QiOiAiXjIuMC40IgotICAgICAgfQotICAgIH0sCi0gICAgImlzLWZ1bGx3aWR0aC1jb2RlLXBvaW50IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWZ1bGx3aWR0aC1jb2RlLXBvaW50Ly0vaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnQtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXp5bW01K3Urc0NzU1d5RDlxTmFlalYzREZ2aENLY2xLZGl6WWFKVXVIQTgzUkxqYjduU3VHbmRkQ0hHdjBoaytLWTdCTUFsc1dlSzRVZWc2RVY2WFFnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy1nZW5lcmF0b3ItZm4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZ2VuZXJhdG9yLWZuLy0vaXMtZ2VuZXJhdG9yLWZuLTIuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jVElCNHlQWUwvR3J3MEVhU3pBU3pnNmJCeTlncUNvZnZXTjhva1RoQVlJeEtKWkMrdWRsUkFtR2JNMFhMZW5pRUpTczh1RWdIUEd1SFNlMVhzT0xTUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaXMtbnVtYmVyIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW51bWJlci8tL2lzLW51bWJlci03LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNDFDaWZrZzZlOFR5bFNwZHRUcGVMVk1xdlNCRVZ6VHR0SHZFUkQ3NDErcG5aOEFOdjAwMDRNUkw0M1FLUERsSzljR3ZOcDZOWldaVUJsYkdYWXh4bmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzLXBsYWluLW9iamVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1wbGFpbi1vYmplY3QvLS9pcy1wbGFpbi1vYmplY3QtMi4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWg1UHBnWGtXaXRjMzhCQk1ZYXdUWU1XSkhGWkpWbkJxdUZFNTd4RnBqQjhwSkZpRjZnWitiVStXeUkveXFYaUZSNW1kTHNnWU5hUGU4dWFvNlV2OU9nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpc29iamVjdCI6ICJeMy4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUvLS9pcy1wb3RlbnRpYWwtY3VzdG9tLWVsZW1lbnQtbmFtZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYkNZZVJBMnJWaWJLWmQrczI2MjVnR25HRi90N0RTcURzNGRQN0NyTEExbTdqS1d6NnBwczBMcFlMSk44UTY0SHRtUEtKMWhyTjNuelBOS0ZFS09VaVE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzLXN0cmVhbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1zdHJlYW0vLS9pcy1zdHJlYW0tMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVhDb3krV2xVcjdkMStaOEdnU3VYbXB1VUZDOWZPaFJYZ2xKTXgrZHdMS1RrTDQ0Q2pkNFcxWjVQK0JRWnByK2NSOTNhR1A0Uy9zN0Z0dzZOZC9raUV3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy10eXBlZGFycmF5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXR5cGVkYXJyYXkvLS9pcy10eXBlZGFycmF5LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNUhuSUNGamZEQnNSM2RwcFFQbGdFZnphU3BvPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzLXdpbmRvd3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd2luZG93cy8tL2lzLXdpbmRvd3MtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWVYSzFVSW5xMmJQbWp5WDZlM1ZISXpNTG9iYzRKOTRpNEFXbitIcHEzT1U1S2tyUkM5Nk9BY1IzUFJKL3BHdTZtOFRSbkJIUDlka1hRVnNUL0NPVklBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpcy13c2wiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtd3NsLy0vaXMtd3NsLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1mS3pBcmEwckdKVVVCd0dCZ05rSFp1VG9aY24rVHRYSHBlQ2dta01KTU1ZeDFzUURZYUNTeWpKQlNDYTJuSDFER203czNuMW9Cbm9ob1ZUQmFON0x3dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLWRvY2tlciI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXNhcnJheSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2FycmF5Ly0vaXNhcnJheS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXU1TmRTRmdzdWhhTUJvTkpWNlZLUGdjU1R4RT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJpc2V4ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNlB2emROeFZiL2lVZWhEY3NGY3RZejhzK2hBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzb2JqZWN0IjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzb2JqZWN0Ly0vaXNvYmplY3QtMy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1Ua01la3JFYWx6RmphcUg1eU5ITXZQMnJlTjg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiaXN0YW5idWwtbGliLWNvdmVyYWdlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS8tL2lzdGFuYnVsLWxpYi1jb3ZlcmFnZS0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWlVSXF4TWdSREVUNmVSK281SGJmUllQMWwwaHFrV09zN3ZOeEMvbWdndXRDTVVJaFdNbThnQUhiOHRIbHlmRDMvbDZybGdOQTVjS2REekVBZjZoRWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImlzdGFuYnVsLWxpYi1pbnN0cnVtZW50IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzdGFuYnVsLWxpYi1pbnN0cnVtZW50Ly0vaXN0YW5idWwtbGliLWluc3RydW1lbnQtNC4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJYZ1FsOWtmNFdUQ1BDQ3BtRkdvSmt6Lyt1aHZtN2g3UEZLVVl4aDdxYXJRZDNFUjMzdkhHLy9xYUU4ZU4yNWwwN1lxWlBwSFhVOUkwOWwvUkQ1YUdRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvY29yZSI6ICJeNy43LjUiLAotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCi0gICAgICAgICJpc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjMuMC4wIiwKLSAgICAgICAgInNlbXZlciI6ICJeNi4zLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXN0YW5idWwtbGliLXJlcG9ydCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1saWItcmVwb3J0Ly0vaXN0YW5idWwtbGliLXJlcG9ydC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItd2NkaSt1QUt6ZmlHVDJhYlBwS1owaFNVMXJHUWpVUW5MdnRZNU1wUTdRQ1RhaEQzVk9EaGN1NHdjZlkxWXRrR2FERDV5dXlkT0xJTlhzZmJ1czlST3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAibWFrZS1kaXIiOiAiXjMuMC4wIiwKLSAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl43LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJpc3RhbmJ1bC1saWItc291cmNlLW1hcHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzLy0vaXN0YW5idWwtbGliLXNvdXJjZS1tYXBzLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jMTZMcEZSa1I4dlFYeUhaNW5McFkzNUpadHpqMVBRWTFpWm1lc1ViZjFGWkhiSXVwY1dmamdPWEJZOVlIa0xFUTZwdXoxdTREZ2o2cW1VL0Rpc3JaZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVidWciOiAiXjQuMS4xIiwKLSAgICAgICAgImlzdGFuYnVsLWxpYi1jb3ZlcmFnZSI6ICJeMy4wLjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiaXN0YW5idWwtcmVwb3J0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc3RhbmJ1bC1yZXBvcnRzLy0vaXN0YW5idWwtcmVwb3J0cy0zLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItOXRadno3QWlSM1BFRE5HaVY5dklvdVEvRUFjcU1YRm1rY0ExQ0RGVHdPQjk4T1pWREwwUEg5Z2xIb3RmNVVncDZHQ09UeXBmekdXSS9PcWpXTkNSVXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImh0bWwtZXNjYXBlciI6ICJeMi4wLjAiLAotICAgICAgICAiaXN0YW5idWwtbGliLXJlcG9ydCI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC8tL2plc3QtMjYuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1sR1M1UFhHQXpSNFJGN1Y1K1hPYmhxejJLWklEVUExeUQwREc2cEJWbXkxMGVoMFpJWFFJbVJ1em9jc0kvTjJYWjFHckxGd1RTMjdJbjJpMmpscHExUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvY29yZSI6ICJeMjYuNi4zIiwKLSAgICAgICAgImltcG9ydC1sb2NhbCI6ICJeMy4wLjIiLAotICAgICAgICAiamVzdC1jbGkiOiAiXjI2LjYuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LWNoYW5nZWQtZmlsZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtY2hhbmdlZC1maWxlcy8tL2plc3QtY2hhbmdlZC1maWxlcy0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZEUzdzekxjWTlzQ3RJaXA4RmpyeTlvR2YzSTJodC9RVDIxYkFIbTVEbWYwbUQ0WDNSZU5VZjE3eStiTzZmUjhXZ2JJWlRsYnlHMWFrLzUzY2JSektRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImV4ZWNhIjogIl40LjAuMCIsCi0gICAgICAgICJ0aHJvYXQiOiAiXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtY2xpIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNsaS8tL2plc3QtY2xpLTI2LjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItR0Y5bm9CU2E5dDA4cFN5bDNDWTRmck1ycXArYVFYRkdGa2Y1aEVQYmgvcElVRllXTUs2WkxUZmJtYWR4SlZjSnJkUm9DaGxXUXNBMlZrSmNERks4aGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L2NvcmUiOiAiXjI2LjYuMyIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJpbXBvcnQtbG9jYWwiOiAiXjMuMC4yIiwKLSAgICAgICAgImlzLWNpIjogIl4yLjAuMCIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdmFsaWRhdGUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJwcm9tcHRzIjogIl4yLjAuMSIsCi0gICAgICAgICJ5YXJncyI6ICJeMTUuNC4xIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtY29uZmlnIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWNvbmZpZy8tL2plc3QtY29uZmlnLTI2LjYuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDVxZElqL2JDajJqN05GVkhiMm5GQjRhVWRmdWNEbjNKUktnclpucGxiOG5pZUFpckF6UlNIUDh1REVkK3FWNnlnemc5UHo0WUc3VVRKZjk0TFBTeWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb3JlIjogIl43LjEuMCIsCi0gICAgICAgICJAamVzdC90ZXN0LXNlcXVlbmNlciI6ICJeMjYuNi4zIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiYmFiZWwtamVzdCI6ICJeMjYuNi4zIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJkZWVwbWVyZ2UiOiAiXjQuMi4yIiwKLSAgICAgICAgImdsb2IiOiAiXjcuMS4xIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJqZXN0LWVudmlyb25tZW50LWpzZG9tIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1lbnZpcm9ubWVudC1ub2RlIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjYuMy4wIiwKLSAgICAgICAgImplc3QtamFzbWluZTIiOiAiXjI2LjYuMyIsCi0gICAgICAgICJqZXN0LXJlZ2V4LXV0aWwiOiAiXjI2LjAuMCIsCi0gICAgICAgICJqZXN0LXJlc29sdmUiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNi42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjIiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjYuNi4yIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZGlmZiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kaWZmLy0vamVzdC1kaWZmLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNm0rOVozR3Y5d04wV0ZWYXNxakNMLzA2K0VGQ01UcURFVWwvYjg3SFlLMnJBUFR5Zno0Wkl1U2xQaFk1MVBJUVJXeDVUYXhlRjFxbVhLZTlnZk4zc0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJkaWZmLXNlcXVlbmNlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI2LjMuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1kb2NibG9jayI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1kb2NibG9jay8tL2plc3QtZG9jYmxvY2stMjYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SRFo0SXozUWJ0Uld5Y2Q4YlVFUHhRc1RsWWF6ZlluL2g1UjY1RmM2Z09md296RmhvSW14K2FmZnpreS9GRkJ1cUlTUFRxalhvbW9JR0pWS0JXb28wdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGV0ZWN0LW5ld2xpbmUiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZWFjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lYWNoLy0vamVzdC1lYWNoLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTWVyL2YwS2FBVGJqbDhNQ0orMEdFcE5kcW1uVm1EWXFDVEpZVHZvbzdycW1SaURsbG1wMkFZTiswNkY5M25YY1kzdXI5U2hJalMrQ08vdUQrQmJINEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI2LjMuMCIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1lbnZpcm9ubWVudC1qc2RvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1qc2RvbS8tL2plc3QtZW52aXJvbm1lbnQtanNkb20tMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1qZ1BxQ3J1VGx0M0t3cWc1L1dWRnlISU9KSHNpQXZoY3AycWlSMlFRc3R1Rzl5V294NStpSHBVM1pyY0J4VzE0VDRmZTVaNjhqQWZMUmg3am9DU1AyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC9mYWtlLXRpbWVycyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJqZXN0LW1vY2siOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqc2RvbSI6ICJeMTYuNC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtZW52aXJvbm1lbnQtbm9kZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1lbnZpcm9ubWVudC1ub2RlLy0vamVzdC1lbnZpcm9ubWVudC1ub2RlLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItemh0TWlvM0V4dHkxOGR5OGVlOGVKOWtqblJ5WkMxTjRDMU50L1ZTaE4xYXB5WGM4cldHdEo5bEk3dnFpV2N5eVhTNEJWU0VuOWx4QU0yRCswNy9UYWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiamVzdC1tb2NrIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1nZXQtdHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjMuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1nZXQtdHlwZS8tL2plc3QtZ2V0LXR5cGUtMjYuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UcGZhdmlOMVIycFFXa0lpaGxmRWFud09YSzB6Y3hyS0VFNE1sVTZUbjdrZW9YZE42LzNnSy94bDB5RWg4RE91bm41cE9WR0tmOGhCNFI5Z1ZoMDRpZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiamVzdC1oYXN0ZS1tYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtaGFzdGUtbWFwLy0vamVzdC1oYXN0ZS1tYXAtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1lYXNXSUpYSXc3MUIyUmRSOGtncXBqUXJiTVJXUUJnaUJ3WFlFaHRHVVRhWCtkb0NqQmhlbHVTaGRETWVSOElNZkppVHFINCt6Zmh0ZzI5YXBKZi84dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvZ3JhY2VmdWwtZnMiOiAiXjQuMS4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiLAotICAgICAgICAiYW55bWF0Y2giOiAiXjMuMC4zIiwKLSAgICAgICAgImZiLXdhdGNobWFuIjogIl4yLjAuMCIsCi0gICAgICAgICJmc2V2ZW50cyI6ICJeMi4xLjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjYuMC4wIiwKLSAgICAgICAgImplc3Qtc2VyaWFsaXplciI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtd29ya2VyIjogIl4yNi42LjIiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeNC4wLjIiLAotICAgICAgICAic2FuZSI6ICJeNC4wLjMiLAotICAgICAgICAid2Fsa2VyIjogIl4xLjAuNyIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LWphc21pbmUyIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LWphc21pbmUyLy0vamVzdC1qYXNtaW5lMi0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWtQS1VyUXRjOGFZd0JWN0NxQmc1cHUrdG1ZWGx2RmxTRlluMThldjRnUEZ0clJ6QjE1TjJnVy9Sb2V3MzE4N3EydzJlSHV1ME1VOVRKejZ3MC9uUEVnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHJhdmVyc2UiOiAiXjcuMS4wIiwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJjbyI6ICJeNC42LjAiLAotICAgICAgICAiZXhwZWN0IjogIl4yNi42LjIiLAotICAgICAgICAiaXMtZ2VuZXJhdG9yLWZuIjogIl4yLjAuMCIsCi0gICAgICAgICJqZXN0LWVhY2giOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1hdGNoZXItdXRpbHMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcnVudGltZSI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiLAotICAgICAgICAidGhyb2F0IjogIl41LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LWxlYWstZGV0ZWN0b3IiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbGVhay1kZXRlY3Rvci8tL2plc3QtbGVhay1kZXRlY3Rvci0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWk0eGxYcHNWU01lS3ZnMmNFS2RmaGgwSDM5cWxKbFA1RXgxeVF4d0Y5dWJhaGJvUVlNZ1R0ejVvTUwzNUFWQTNCNEV1K1lzbXdhaUtWZXY5S0N2THhnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNi4zLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjYuNi4yIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtbWF0Y2hlci11dGlscyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1tYXRjaGVyLXV0aWxzLy0vamVzdC1tYXRjaGVyLXV0aWxzLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbGxuYzh2UWdZY05xRHJxUkRYV3dNcjlpN3JTNVhGaUN3dmg2RFRQN0pxYTJtcXBjQ0JCbHBDYm4rdHJrRzBLTmhQdS9oOHJ6eUJrcmlPdEJzdHZXaHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LWRpZmYiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LWdldC10eXBlIjogIl4yNi4zLjAiLAotICAgICAgICAicHJldHR5LWZvcm1hdCI6ICJeMjYuNi4yIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtbWVzc2FnZS11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LW1lc3NhZ2UtdXRpbC8tL2plc3QtbWVzc2FnZS11dGlsLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItckdpTGVQelEzQXp3VXNodTIrUm4rVU1GazBwSE41OHNPRytJYUpiazVKeHVxbzNOWU8xVTIvTUlSNFMxc0tnc29ZU1hTemR0U2EwVGdybXRVd0VibUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjAuMCIsCi0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9zdGFjay11dGlscyI6ICJeMi4wLjAiLAotICAgICAgICAiY2hhbGsiOiAiXjQuMC4wIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJtaWNyb21hdGNoIjogIl40LjAuMiIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0YWNrLXV0aWxzIjogIl4yLjAuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LW1vY2siOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtbW9jay8tL2plc3QtbW9jay0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVl5RmplUEhIcDFMenB6WWNtZ3FrSjBubTBnZy9sSngyYVpGekZ5MVM2ZVVxTmpYc09xVEsxMHpOUmZmMmROZnNzZ29ramtHNjVPbFdOY0lsZ2QzemV3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkB0eXBlcy9ub2RlIjogIioiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1wbnAtcmVzb2x2ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1wbnAtcmVzb2x2ZXIvLS9qZXN0LXBucC1yZXNvbHZlci0xLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItb2xWNDFiS1NNbThCZG51TXNld1Q0anFsWjgrM1RDQVJBWGpaR1Q5amNvU25yZlVuUkNxbk1vRjlYRWVvV2piek9icHFGOWRSaEhRajBYYjlRZEY2L3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHt9Ci0gICAgfSwKLSAgICAiamVzdC1yZWdleC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlZ2V4LXV0aWwvLS9qZXN0LXJlZ2V4LXV0aWwtMjYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HdjNaSXMvbkE0OC9admpybDM0YmYrb0Q3NkpIaUdEVXhOT1ZnVWpoM2o4OTBzYmxYcnlqWTRyc3M3MWZQdEQvbmpjaGw2UFNFMmhJaHZ5V2ExZVQwQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAiamVzdC1yZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUvLS9qZXN0LXJlc29sdmUtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zT3hzWk9xMjVtVDF3UnNmSGNidGtJblMrRWs3UThqQ0hVQjBaVVRQMHRjL2M0MVFIcmlVL051bnFNZkNVV3NMNEgzTUhwdlFENFFSOWtTWWhTN1V2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtcG5wLXJlc29sdmVyIjogIl4xLjIuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJyZWFkLXBrZy11cCI6ICJeNy4wLjEiLAotICAgICAgICAicmVzb2x2ZSI6ICJeMS4xOC4xIiwKLSAgICAgICAgInNsYXNoIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJlc29sdmUtZGVwZW5kZW5jaWVzLy0vamVzdC1yZXNvbHZlLWRlcGVuZGVuY2llcy0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBWd1VqSmt4YmhlNFJZOFFFV3pOM3ZuczJrcXl1bGRLcHhseEpsekVZZktTdlk2L2JNdnhvRnJZWXpVTzFHeDI4eUtXTjM3cXlWN3JJb0lwMmg4ZlRnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90eXBlcyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjYuMC4wIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI2LjYuMiIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXJ1bm5lciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC1ydW5uZXIvLS9qZXN0LXJ1bm5lci0yNi42LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWF0Z0twUkhuYUEyT3ZCeUcvSHBHQTRnNkNTUFMvMUxLMGpLM2dBVEpBb3B0QzFvamx0cG1WbFlDM1RZZ2RtR3ArR0x1aHpwSDMwR3ZzMzZzelNMMkpRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC9jb25zb2xlIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvZW52aXJvbm1lbnQiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZW1pdHRlcnkiOiAiXjAuNy4xIiwKLSAgICAgICAgImV4aXQiOiAiXjAuMS4yIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIsCi0gICAgICAgICJqZXN0LWNvbmZpZyI6ICJeMjYuNi4zIiwKLSAgICAgICAgImplc3QtZG9jYmxvY2siOiAiXjI2LjAuMCIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbGVhay1kZXRlY3RvciI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1ydW50aW1lIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC13b3JrZXIiOiAiXjI2LjYuMiIsCi0gICAgICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiAiXjAuNS42IiwKLSAgICAgICAgInRocm9hdCI6ICJeNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC1ydW50aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXJ1bnRpbWUvLS9qZXN0LXJ1bnRpbWUtMjYuNi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1scnp5UjNOOHNhY1RBTWVvbmJxcG5Ta2ExZEhOdXgydWswcXFEWFZrTXYyYy9BM3dZbnZRNEVYdUkwMTNZNitnU0tTQ3hkYWN6dmY0SEYwbVZYSFJkdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvY29uc29sZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L2Vudmlyb25tZW50IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvZmFrZS10aW1lcnMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAamVzdC9nbG9iYWxzIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3Qvc291cmNlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3Rlc3QtcmVzdWx0IjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHJhbnNmb3JtIjogIl4yNi42LjIiLAotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMveWFyZ3MiOiAiXjE1LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiY2pzLW1vZHVsZS1sZXhlciI6ICJeMC42LjAiLAotICAgICAgICAiY29sbGVjdC12OC1jb3ZlcmFnZSI6ICJeMS4wLjAiLAotICAgICAgICAiZXhpdCI6ICJeMC4xLjIiLAotICAgICAgICAiZ2xvYiI6ICJeNy4xLjMiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtY29uZmlnIjogIl4yNi42LjMiLAotICAgICAgICAiamVzdC1oYXN0ZS1tYXAiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LW1lc3NhZ2UtdXRpbCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbW9jayI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtcmVnZXgtdXRpbCI6ICJeMjYuMC4wIiwKLSAgICAgICAgImplc3QtcmVzb2x2ZSI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3Qtc25hcHNob3QiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJqZXN0LXZhbGlkYXRlIjogIl4yNi42LjIiLAotICAgICAgICAic2xhc2giOiAiXjMuMC4wIiwKLSAgICAgICAgInN0cmlwLWJvbSI6ICJeNC4wLjAiLAotICAgICAgICAieWFyZ3MiOiAiXjE1LjQuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXNlcmlhbGl6ZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtc2VyaWFsaXplci8tL2plc3Qtc2VyaWFsaXplci0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVM1d3F5ejBEWG5OSlBkL3hmSXpaNVhucDFIckpXQmN6ZzhtTWZNcE43OE9KNWVEeFh5ZitZZ2xkOXdYMURuVVdiSWJoTTFZRFk5NU5qUjRDQlhrYjJnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImdyYWNlZnVsLWZzIjogIl40LjIuNCIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXNuYXBzaG90IjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXNuYXBzaG90Ly0vamVzdC1zbmFwc2hvdC0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9MaHh6MDVFelV0c0FtT016dXVwdDFsSFlYQ05pYjBFQ3l1Wi9QWk94OVRyWmNDOHZMMHgrRFVHM1RMK0dMWDN5SEc0NWU2WUdqSW0wWHdEYzNxM29nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAYmFiZWwvdHlwZXMiOiAiXjcuMC4wIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL2JhYmVsX190cmF2ZXJzZSI6ICJeNy4wLjQiLAotICAgICAgICAiQHR5cGVzL3ByZXR0aWVyIjogIl4yLjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiZXhwZWN0IjogIl4yNi42LjIiLAotICAgICAgICAiZ3JhY2VmdWwtZnMiOiAiXjQuMi40IiwKLSAgICAgICAgImplc3QtZGlmZiI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtZ2V0LXR5cGUiOiAiXjI2LjMuMCIsCi0gICAgICAgICJqZXN0LWhhc3RlLW1hcCI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbWF0Y2hlci11dGlscyI6ICJeMjYuNi4yIiwKLSAgICAgICAgImplc3QtbWVzc2FnZS11dGlsIjogIl4yNi42LjIiLAotICAgICAgICAiamVzdC1yZXNvbHZlIjogIl4yNi42LjIiLAotICAgICAgICAibmF0dXJhbC1jb21wYXJlIjogIl4xLjQuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiLAotICAgICAgICAic2VtdmVyIjogIl43LjMuMiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMy41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuMy41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItUG9lR0pZaDhISzRCVE8vYTlUZjZaRzN2ZW8vQTdaVnNZclNBNko4bnk5bmIzQjFWcnBrdU4rejlPRTV3ZkU1cDZINExjaFlac2VnaVFnYkpEOTRaRlE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAiamVzdC11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMjYuNi4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qZXN0LXV0aWwvLS9qZXN0LXV0aWwtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NRFcwZktmc24wT0k3TVM3RXV6Nmg4SE5EWFZRMGdhTTl1VzZSamZEbWQxREFGY2F4WDlPcUlha0hJcWhibm1GMDhDZjJETERHK3VscThZUVEwTHAwUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJncmFjZWZ1bC1mcyI6ICJeNC4yLjQiLAotICAgICAgICAiaXMtY2kiOiAiXjIuMC4wIiwKLSAgICAgICAgIm1pY3JvbWF0Y2giOiAiXjQuMC4yIgotICAgICAgfQotICAgIH0sCi0gICAgImplc3QtdmFsaWRhdGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3QtdmFsaWRhdGUvLS9qZXN0LXZhbGlkYXRlLTI2LjYuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkVZWjlBZXlqMGk1clFxYnErdHBJT29tMFlTMXUyTVZ1NitldUJzdnBnSW1lK0ZPZlJtb0M0UjVwMEppQVVwYUZ2RnkyNHhncnBNa25hclIvOTNYalE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiY2FtZWxjYXNlIjogIl42LjAuMCIsCi0gICAgICAgICJjaGFsayI6ICJeNC4wLjAiLAotICAgICAgICAiamVzdC1nZXQtdHlwZSI6ICJeMjYuMy4wIiwKLSAgICAgICAgImxldmVuIjogIl4zLjEuMCIsCi0gICAgICAgICJwcmV0dHktZm9ybWF0IjogIl4yNi42LjIiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImNhbWVsY2FzZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI2LjIuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbWVsY2FzZS8tL2NhbWVsY2FzZS02LjIuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWM3d1Z2YnczZjM3bnVvYlFOdGdzZ0c5UE9DOXFNYk51TVFtVENxWnYyM2I2TUl6MGZjWXBCaU9sdjlnRU4vaGRMZG5aVERRaGc2ZTlEcTVNMXZLdmZnPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXdhdGNoZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyNi42LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2plc3Qtd2F0Y2hlci8tL2plc3Qtd2F0Y2hlci0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdLSm9iMFAvRW0yY3NpVnRoc0k2OHA2YUdLVEljc2ZqSDlHc3gxZjBBM0l0YWx6NDNlM2hvMGdlU0FWc21qMDlSV09FTFAxQVovRFh5SmdPZ0RLeFhRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAamVzdC90ZXN0LXJlc3VsdCI6ICJeMjYuNi4yIiwKLSAgICAgICAgIkBqZXN0L3R5cGVzIjogIl4yNi42LjIiLAotICAgICAgICAiQHR5cGVzL25vZGUiOiAiKiIsCi0gICAgICAgICJhbnNpLWVzY2FwZXMiOiAiXjQuMi4xIiwKLSAgICAgICAgImNoYWxrIjogIl40LjAuMCIsCi0gICAgICAgICJqZXN0LXV0aWwiOiAiXjI2LjYuMiIsCi0gICAgICAgICJzdHJpbmctbGVuZ3RoIjogIl40LjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJqZXN0LXdvcmtlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvamVzdC13b3JrZXIvLS9qZXN0LXdvcmtlci0yNi42LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUtXWVZWMWM0aStqYk1wYUJDK1UrKzRWYTBjcDhPaXNVMTg1bzczVDF2bzk5aHFpN3c4dFNKZlVYWXN3d3Fxcmp6d3hhNktwUks1NFdoUHZ3ZjV3NlBRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9kZSI6ICIqIiwKLSAgICAgICAgIm1lcmdlLXN0cmVhbSI6ICJeMi4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImpzLXRva2VucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy10b2tlbnMvLS9qcy10b2tlbnMtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJkSlVmbGNFM2NVektpTXFRZ3NDdTA2RlB1OVVkSUpPMGJlWWJQaEhONGs2YXBnSnRpZmNvQ3RUOWJjeE9wWUJ0cEQya0NNNlNiemc0Q2F1c1cvUEtRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJqcy15YW1sIjogewotICAgICAgInZlcnNpb24iOiAiMy4xNC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qcy15YW1sLy0vanMteWFtbC0zLjE0LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9rTUg3T1hYSjdZck45T2szL1NYcm51NGlYOXlPaysyNW5xWDRpbVMybnB1dlRZRG1vL1FFWm9xd1prWWFJRGszalZ2Qk9UT0lFZ0VoYUxPeW5CUzlnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcmdwYXJzZSI6ICJeMS4wLjciLAotICAgICAgICAiZXNwcmltYSI6ICJeNC4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAianNkb20iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxNi42LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZG9tLy0vanNkb20tMTYuNi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UeTF2bUY0TkhKa29sYUVtZGp0eFRmU2ZrZGI4WXdhcndmNjNmK0Y4L21ERDF1TFNTV0R4RHVNaVp4aVBod3VuTHJuOUxPU1ZJdFdqNGJMWXNMTjNEZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYWJhYiI6ICJeMi4wLjUiLAotICAgICAgICAiYWNvcm4iOiAiXjguMi40IiwKLSAgICAgICAgImFjb3JuLWdsb2JhbHMiOiAiXjYuMC4wIiwKLSAgICAgICAgImNzc29tIjogIl4wLjQuNCIsCi0gICAgICAgICJjc3NzdHlsZSI6ICJeMi4zLjAiLAotICAgICAgICAiZGF0YS11cmxzIjogIl4yLjAuMCIsCi0gICAgICAgICJkZWNpbWFsLmpzIjogIl4xMC4yLjEiLAotICAgICAgICAiZG9tZXhjZXB0aW9uIjogIl4yLjAuMSIsCi0gICAgICAgICJlc2NvZGVnZW4iOiAiXjIuMC4wIiwKLSAgICAgICAgImZvcm0tZGF0YSI6ICJeMy4wLjAiLAotICAgICAgICAiaHRtbC1lbmNvZGluZy1zbmlmZmVyIjogIl4yLjAuMSIsCi0gICAgICAgICJodHRwLXByb3h5LWFnZW50IjogIl40LjAuMSIsCi0gICAgICAgICJodHRwcy1wcm94eS1hZ2VudCI6ICJeNS4wLjAiLAotICAgICAgICAiaXMtcG90ZW50aWFsLWN1c3RvbS1lbGVtZW50LW5hbWUiOiAiXjEuMC4xIiwKLSAgICAgICAgIm53c2FwaSI6ICJeMi4yLjAiLAotICAgICAgICAicGFyc2U1IjogIjYuMC4xIiwKLSAgICAgICAgInNheGVzIjogIl41LjAuMSIsCi0gICAgICAgICJzeW1ib2wtdHJlZSI6ICJeMy4yLjQiLAotICAgICAgICAidG91Z2gtY29va2llIjogIl40LjAuMCIsCi0gICAgICAgICJ3M2MtaHItdGltZSI6ICJeMS4wLjIiLAotICAgICAgICAidzNjLXhtbHNlcmlhbGl6ZXIiOiAiXjIuMC4wIiwKLSAgICAgICAgIndlYmlkbC1jb252ZXJzaW9ucyI6ICJeNi4xLjAiLAotICAgICAgICAid2hhdHdnLWVuY29kaW5nIjogIl4xLjAuNSIsCi0gICAgICAgICJ3aGF0d2ctbWltZXR5cGUiOiAiXjIuMy4wIiwKLSAgICAgICAgIndoYXR3Zy11cmwiOiAiXjguNS4wIiwKLSAgICAgICAgIndzIjogIl43LjQuNSIsCi0gICAgICAgICJ4bWwtbmFtZS12YWxpZGF0b3IiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgImpzZXNjIjogewotICAgICAgInZlcnNpb24iOiAiMi41LjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2pzZXNjLy0vanNlc2MtMi41LjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU9ZdTdYRXpqa0NRM0M1UHMzUUlac1FmTnBxb0p5WlpBOTl3ZDlhV2QwNU5DdEM1cFdPa1NoSzJta0w2SFhRUjYvQ3kybGJOZFBsWkJwdVFIWEU2M2dBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJqc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc29uLXBhcnNlLWV2ZW4tYmV0dGVyLWVycm9ycy8tL2pzb24tcGFyc2UtZXZlbi1iZXR0ZXItZXJyb3JzLTIuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi14eUZ3eWhyby9KRW9mNkdoZTJpejJOY1hvajJzbG9Oc1dyL1hzRVJESy9vaVBDZmFOaGw1T05mcCtqUWRBWlJRUTBJSldOekg5eklaRjdsaTkxa2gydz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAianNvbjUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvanNvbjUvLS9qc29uNS0yLjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZis4Y2xkdTdYL3k3UkFKdXJNRUptZG9LWEdCL1g1NTB3Mk5yM3RUYmV6TDZSd0VFL2lNY20rdFpuWGVvWnRLdU9xNmZ0OCtDcXpFa3JJZ3gxZlBvUUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1pbmltaXN0IjogIl4xLjIuNSIKLSAgICAgIH0KLSAgICB9LAotICAgICJraW5kLW9mIjogewotICAgICAgInZlcnNpb24iOiAiNi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTYuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1kY1MxdWwrOXRtZUQ5NVQreDI4L2VoTGdkOW1FTmEzTHN2RFR0em0zdnlCRU83UlBwdHZBRCt0NDRXVlhhVWpUQlJjcnBGZUZsQzhXQ3J1VVI0NTZodz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAia2xldXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2xldXIvLS9rbGV1ci0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZVRJemxWT1NVUitKeGRERmVwRVljQk10WjlRcWRlZitybnpXZFJadU1iT3l3dTV0TzJ3Mk43cnFqb0FOWjVrOXZ5d2hMNkJyMVZSalVJZ1RReDRFOHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxldmVuIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xldmVuLy0vbGV2ZW4tMy4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXFzZGErSDhqVGFVYU4veDV2elcycnpjKzhSdzRUQVEvNEtqQjQ2SXdLNVZIK0lsVmVlZWplL0VvWlJwaVh2SXFqRmdLODRRZmZxUHp0R0kzVkJMRzFBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJsZXZuIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xldm4vLS9sZXZuLTAuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtT3dtU1R0K2ZDRHdFa1AzVXdMeEVJZUJIWk80PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInByZWx1ZGUtbHMiOiAifjEuMS4yIiwKLSAgICAgICAgInR5cGUtY2hlY2siOiAifjAuMy4yIgotICAgICAgfQotICAgIH0sCi0gICAgImxpbmVzLWFuZC1jb2x1bW5zIjogewotICAgICAgInZlcnNpb24iOiAiMS4xLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2xpbmVzLWFuZC1jb2x1bW5zLy0vbGluZXMtYW5kLWNvbHVtbnMtMS4xLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1IQURIUTdRenpRcE9nSFdQZTJTbGRFRFovd0E9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibG9jYXRlLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbG9jYXRlLXBhdGgvLS9sb2NhdGUtcGF0aC01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdDdodzlwSStXdnV3TkpYd2s1elZIcHloSXF6ZzJxVGxrbEpPZjBtVnhHU2JlM0ZwMlZpZVpjZHVOWWphTERveTZwOXVHcFFFR1dHODdXcE1LbE5xOGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInAtbG9jYXRlIjogIl40LjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJsb2Rhc2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjE3LjIxIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9sb2Rhc2gvLS9sb2Rhc2gtNC4xNy4yMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdjJrREVlNTdsZWNUdWxhREl1TlRQeTNSeTRnTEdKNloxTzN2RTFrcmdYWk5yc1ErTEZUR0hWeFZqY1hQczE3TGhiWlZHZWRBSnY4WFoxdHZqNUZ2U2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgImxydS1jYWNoZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9scnUtY2FjaGUvLS9scnUtY2FjaGUtNi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpvNmRKMDRDbVNqdXpud0pTUzNwVWVXbWQvSDBmZlRsa1hYZ3daaStlcTFVQ21xUXdDaCtlTHNZT1lDd1k5OTFpMkZhaDRoMUJFTUN4NHFUaEdic2lBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ5YWxsaXN0IjogIl40LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJtYWtlLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlLWRpci8tL21ha2UtZGlyLTMuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nM0ZlUDIwTE53aEFMYi82Q3o2RGQ0RjJuZ3plMGp6N3RienJEMndBVitvOUZlTkhlNHJMK3lLMm1kMEovZmlTZjFzYTFBRGhYcWk1K29Wd09NL2VHdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2VtdmVyIjogIl42LjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJtYWtlLWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21ha2UtZXJyb3IvLS9tYWtlLWVycm9yLTEuMy42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1zOFVobE5lN3ZQS29tUWhDMXFGZWxNb2tyL1NjM0FnTmJzbzNuNzRtVlBBNUxUWndrQjlObFhmNFhQYW1MeEpFOGgwZ2g3M3JNOTR4dndSVDJDVkludz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibWFrZWVycm9yIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjExIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tYWtlZXJyb3IvLS9tYWtlZXJyb3ItMS4wLjExLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtNEJwY2tRbnlyM2xtRGs2TGxZZDVBWVQxcVd3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInRtcGwiOiAiMS4wLngiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWFwLWNhY2hlIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21hcC1jYWNoZS8tL21hcC1jYWNoZS0wLjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXd5cTlDOVpTWFpzRkZrVzdUeWFzWGNtS0RiOD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJtYXAtdmlzaXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWFwLXZpc2l0Ly0vbWFwLXZpc2l0LTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtN055bzhURkU1bUR4dGIxQjhTODBlZG1OKzQ4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm9iamVjdC12aXNpdCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWVyZ2Utc3RyZWFtIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21lcmdlLXN0cmVhbS8tL21lcmdlLXN0cmVhbS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWJ2L3FPY3VQZmszVVJQZkR6bVpVMUxLbXV3OGtUKzBuSUh2S3JLZ0Zyd2lmb2wvZG9XY2RBNFpxc1dROEVOckZLa2Q2N01mcG8vTG92YklVc2J0M3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm1pY3JvbWF0Y2giOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWljcm9tYXRjaC8tL21pY3JvbWF0Y2gtNC4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXBSbXp3L1hVY3dYR3BEOWFJOXEvMFhPd0xOeWdqRVRKOHkwYW8wd2RxcHJyekRhNFlueExjejdmUVJacjh2b2g4VjEwa0doQUJiTmNIVms1d0hnV3dnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicmFjZXMiOiAiXjMuMC4xIiwKLSAgICAgICAgInBpY29tYXRjaCI6ICJeMi4yLjMiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWltZS1kYiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNDguMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS1kYi8tL21pbWUtZGItMS40OC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GTTNRd3hWK1RuWllRMmFScWhsS0JNSHhrMTBsVGJNdDNiQmtNQXA1NGRkck5lVlNmY1FZT09LdUd1eTNEZHJtMzhJMDRJZjgzNGZPVVNxMXl6c2xKUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibWltZS10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4zMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS10eXBlcy8tL21pbWUtdHlwZXMtMi4xLjMxLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YR1puTnptM1F2Z0t4YThkcHp5aEZUSG1wUDNsNVlOdXNtbmUwN1ZVT1h4b3U5Q3FVcVlhL0hCeTEyNFJxdFZoL08ycEVDYXMvTU9jc0RncGlsUE9QZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibWltZS1kYiI6ICIxLjQ4LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibWltaWMtZm4iOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltaWMtZm4vLS9taW1pYy1mbi0yLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT3FiT2s1b0VRZUFaOFdYV3lkbHU5SEpqejlXVmRFSXZhbU1DY1htdXFVWWpUa25IL3Nxc1d2aFEzdmd3S0ZSUjFIcGp2TkJLUTM3bmJKZ1l6R3FHY2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm1pbmltYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW5pbWF0Y2gvLS9taW5pbWF0Y2gtMy4wLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXlKSFZRRWh5cVBMVVRndDlCODNQWHU2VzNyeDRNdnZIdlNVdlRvb2dwd29HRE9VUSt5RHJSMEhSb3QreU9DZENPN3U0aFgzcFdmdDZrV0JCY3FoMFVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicmFjZS1leHBhbnNpb24iOiAiXjEuMS43IgotICAgICAgfQotICAgIH0sCi0gICAgIm1pbmltaXN0IjogewotICAgICAgInZlcnNpb24iOiAiMS4yLjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltaXN0Ly0vbWluaW1pc3QtMS4yLjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUpzam5rNGJ3M1lKcVl6YmR5QmlOc1BXSFBmTysrVUdHNzQ5Q3hzNnBlQ3U1WGc0bnJlbmE2T1Z4T1l4clFUcXd3MEptd3QrUmVmOHJnZ3Vta1RMejlRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJtaXhpbi1kZWVwIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21peGluLWRlZXAvLS9taXhpbi1kZWVwLTEuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XUm9Ebi8vbVhCaUoxSDQwcnFhM3ZIMHRvZVB3U3NHYjQ1aUluV2xUeVNhK1V1NGszdFlVU3hhMnYxS3FBaUx0dmxyU3phRXhxUzFndGs5NkE5enZFQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZm9yLWluIjogIl4xLjAuMiIsCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4xLjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJta2RpcnAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWtkaXJwLy0vbWtkaXJwLTEuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi12VnFWWlF5ZjNXTHgyU2hkMHFKOXh1dnFnQXlLUExBaXFJVEV0cVcwb0lVanpvM1BlUERkNmZXOWlGejMwZWY3WXNwL29pV3FiaHN6ZUdXVzJUNkd6dz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItc0drUHgrVmpNdG1BNk1YMjdvQTRGQkZFTEZDWlo0UzRYcWVHT1hDdjY4dFQramIzdmsvUnlhS1dQMFBUS3lXdG1MU00wYithZFVURXZiczFQRWFIMnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5hbm9tYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMi4xMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmFub21hdGNoLy0vbmFub21hdGNoLTEuMi4xMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZnBvZTJUMFJiSHdCVEJVT2Z0QWZCUGFERWkwNnVmYVVhaTBtRTZZbjFrYWNjM1NuVEVyZmIvaCtYOTRWWHpJNjRyS0ZIWUltWFN2ZHdHR0Ntd09xQ0E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFyci1kaWZmIjogIl40LjAuMCIsCi0gICAgICAgICJhcnJheS11bmlxdWUiOiAiXjAuMy4yIiwKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMi4wLjIiLAotICAgICAgICAiZXh0ZW5kLXNoYWxsb3ciOiAiXjMuMC4yIiwKLSAgICAgICAgImZyYWdtZW50LWNhY2hlIjogIl4wLjIuMSIsCi0gICAgICAgICJpcy13aW5kb3dzIjogIl4xLjAuMiIsCi0gICAgICAgICJraW5kLW9mIjogIl42LjAuMiIsCi0gICAgICAgICJvYmplY3QucGljayI6ICJeMS4zLjAiLAotICAgICAgICAicmVnZXgtbm90IjogIl4xLjAuMCIsCi0gICAgICAgICJzbmFwZHJhZ29uIjogIl4wLjguMSIsCi0gICAgICAgICJ0by1yZWdleCI6ICJeMy4wLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAibmF0dXJhbC1jb21wYXJlIjogewotICAgICAgInZlcnNpb24iOiAiMS40LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25hdHVyYWwtY29tcGFyZS8tL25hdHVyYWwtY29tcGFyZS0xLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVNyNi83dGRVSHl3bnJQc3B2YnZSWEkxYnBQYz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJuaWNlLXRyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9uaWNlLXRyeS8tL25pY2UtdHJ5LTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0xbmg0NWRlZWI1b2xOWTdlWDgyQmtQTzdTU3hSNVNTWUppUFRyVGRGVVZZd0FsOENLTUE1TjlQalRZa0hpUmppc1ZjeGNRMUhYZExoeDJxeHhKekxOUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAibm9kZS1pbnQ2NCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub2RlLWludDY0Ly0vbm9kZS1pbnQ2NC0wLjQuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWg2a0dYTnMxWFRHQzJQbE00UkdJdUNYR2lqcz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJub2RlLW1vZHVsZXMtcmVnZXhwIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtbW9kdWxlcy1yZWdleHAvLS9ub2RlLW1vZHVsZXMtcmVnZXhwLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtaloyK0tKWktTc1Z4THBFeFpDRUh4eDZRN0VBPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vZGUtbm90aWZpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9kZS1ub3RpZmllci8tL25vZGUtbm90aWZpZXItOC4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW9KUC85TkFkZDkreDJRK3JmcGhCMlJKQ0hqb2Q3MFJjUkxqb3NpUE1NdTVnaklmd1ZuT1VHcTJuYlRqVFVibXkwREovdEZJVlQzMCtRZTNuemw0VEpnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZ3Jvd2x5IjogIl4xLjMuMCIsCi0gICAgICAgICJpcy13c2wiOiAiXjIuMi4wIiwKLSAgICAgICAgInNlbXZlciI6ICJeNy4zLjIiLAotICAgICAgICAic2hlbGx3b3JkcyI6ICJeMC4xLjEiLAotICAgICAgICAidXVpZCI6ICJeOC4zLjAiLAotICAgICAgICAid2hpY2giOiAiXjIuMC4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJzZW12ZXIiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNy4zLjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZW12ZXIvLS9zZW12ZXItNy4zLjUudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Qb2VHSlloOEhLNEJUTy9hOVRmNlpHM3Zlby9BN1pWc1lyU0E2SjhueTluYjNCMVZycGt1Tit6OU9FNXdmRTVwNkg0TGNoWVpzZWdpUWdiSkQ5NFpGUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJscnUtY2FjaGUiOiAiXjYuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vZGUtcmVsZWFzZXMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjEuNzIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vZGUtcmVsZWFzZXMvLS9ub2RlLXJlbGVhc2VzLTEuMS43Mi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTExVbytQcEgzZFU2WGl6WDNpVm91YlVOaGVGL293alhDWlo1eUFDRHhOblB0Z0Z1bHVkVjFaTDNheUsxa1ZlcDQyUm1tMCtSOS9ZNjBOUWJaMmJpZnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgIm5vcm1hbGl6ZS1wYWNrYWdlLWRhdGEiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjUuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbm9ybWFsaXplLXBhY2thZ2UtZGF0YS8tL25vcm1hbGl6ZS1wYWNrYWdlLWRhdGEtMi41LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS81Q01OM1QwUjRYVGo0RGNHYWV4bytyb1pTZFNGVy8wQU9PVFJPcmp4ekNHMXdyV1hFc0diUktldmpsSUwrWkRFNHNabEpyNUVENFlXMHlxbWtLK2VBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJob3N0ZWQtZ2l0LWluZm8iOiAiXjIuMS40IiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMTAuMCIsCi0gICAgICAgICJzZW12ZXIiOiAiMiB8fCAzIHx8IDQgfHwgNSIsCi0gICAgICAgICJ2YWxpZGF0ZS1ucG0tcGFja2FnZS1saWNlbnNlIjogIl4zLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjUuNy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTUuNy4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItc2F1YURmL1BaZFZnckxUTllIUnRwWGExaVJpS2NhZWJpS1ExQkpkcFFsV0gybEN2ZXhRZFg1NXNuUEZ5SzdRenB1ZHFiQ0kwcVhGZk9hc0hkeU5ER1E9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm5vcm1hbGl6ZS1wYXRoIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL25vcm1hbGl6ZS1wYXRoLy0vbm9ybWFsaXplLXBhdGgtMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZlWnM1THMzV3RDaXNIV3A5UzJHVXk4ZHFrcEdpNEJWU3ozR2FxaUU2ZXp1YjA1MTJFU3p0WFV3VUI2QzZJS2JRa1kyUG5iL21ENFdZb2pDUndjd0xBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJucG0tcnVuLXBhdGgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbnBtLXJ1bi1wYXRoLy0vbnBtLXJ1bi1wYXRoLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1TNDhXelpXNzc3emhOSXJuN2d4T2xJU05BcWk5WkMvdVFGblJkYmVJSGhaaENBNlVxcGtPVDhUMUc3QnZmZGdQNEVyOGdGNHNVYmFTMGk3UXZJZkNXdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicGF0aC1rZXkiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm53c2FwaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ud3NhcGkvLS9ud3NhcGktMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWgyQWF0ZHdZSCtKSGlacHY3cHQvZ1NYMVhvUkdiN0wvcVNJZXVxQTZHd1lvRjl3MXZQMWN3NDJUTzBhSTJwTnlzaFJLNTg5M2hOU2wrMS8vdkhLN2hRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJvYmplY3QtY29weSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtY29weS8tL29iamVjdC1jb3B5LTAuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtZm4yRmkzZ2IxOG1ScEJ1cGRlMDRFblZPbVl3PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImNvcHktZGVzY3JpcHRvciI6ICJeMC4xLjAiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJraW5kLW9mIjogIl4zLjAuMyIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnR5Ly0vZGVmaW5lLXByb3BlcnR5LTAuMi41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXcxc2UrUmpzUEprUG1sdkZlK0JLck94Y2dSWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4wLjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYWNjZXNzb3ItZGVzY3JpcHRvci8tL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3ItMC4xLjYudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcWVFc3M2Nk5oMmNuN3U4NFEvaWdpWHRjbU5ZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLWRhdGEtZGVzY3JpcHRvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRhdGEtZGVzY3JpcHRvci8tL2lzLWRhdGEtZGVzY3JpcHRvci0wLjEuNC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1DMTdtU0RpT0xJWUNndWVUOFlWdjdEOHdHMVk9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaXMtZGVzY3JpcHRvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRlc2NyaXB0b3IvLS9pcy1kZXNjcmlwdG9yLTAuMS42LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXZEWXIwU0IzRHdPOXpzTW92MGdLQ0VTRllxQ25FNGhxLzR6M1RkVWx1a0V5NXQ5QzBZUnE3SExyc041Mk5BY3FYS2FlcGVDRDBuK0IwYXJuVkczSGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWFjY2Vzc29yLWRlc2NyaXB0b3IiOiAiXjAuMS42IiwKLSAgICAgICAgICAgICJpcy1kYXRhLWRlc2NyaXB0b3IiOiAiXjAuMS40IiwKLSAgICAgICAgICAgICJraW5kLW9mIjogIl41LjAuMCIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtNS4xLjAudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItTkdFRXJuSDZGMnZVdVhEaCtPbGJjS1c3L3dPY2ZkUkhhWjdWV3RxQ3p0ZkhyaS8rK1lLbVA1MU9kV2VHUHVxQ09iYTZrazJPVGU1ZDAyVm1UQjgwUHc9PSIsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgIm9iamVjdC12aXNpdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtdmlzaXQvLS9vYmplY3QtdmlzaXQtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS05NXhFazY4TVUzZTFuK09kT1Y1QkJDM1FSYnM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIm9iamVjdC5waWNrIjogewotICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29iamVjdC5waWNrLy0vb2JqZWN0LnBpY2stMS4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1oNkVLeE1GcFM5TGh5L1Uxa2FaaFFmdGQxMGM9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4xIgotICAgICAgfQotICAgIH0sCi0gICAgIm9uY2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjQuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb25jZS8tL29uY2UtMS40LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1XRHNhcDNXV0hVc1JPc0Y5bkZDNjc1M1hhOUU9IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAid3JhcHB5IjogIjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAib25ldGltZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vbmV0aW1lLy0vb25ldGltZS01LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIta2JwYVNTR0pUV2RBWTVLUFZlTU9LWFNyUHRyOEM4Qzd3b2RKYmNzZDUxalJubUQrR1p1OFkwVm9VNkRtNVo0dldyMElnLzFOS3VXUktmN2o1YWFZU2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1pbWljLWZuIjogIl4yLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJvcHRpb25hdG9yIjogewotICAgICAgInZlcnNpb24iOiAiMC44LjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wdGlvbmF0b3IvLS9vcHRpb25hdG9yLTAuOC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rSVc5cEFDZGszWFdtbVRYRzhtM3VwR1VKc3Q1WFJHenhNUmpYekF1SjFYbklGTnZmaGpqSXVZa0R2eXNuUFE3cXpxVnpMdDc4QkNydW50cVJoV1FiQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZGVlcC1pcyI6ICJ+MC4xLjMiLAotICAgICAgICAiZmFzdC1sZXZlbnNodGVpbiI6ICJ+Mi4wLjYiLAotICAgICAgICAibGV2biI6ICJ+MC4zLjAiLAotICAgICAgICAicHJlbHVkZS1scyI6ICJ+MS4xLjIiLAotICAgICAgICAidHlwZS1jaGVjayI6ICJ+MC4zLjIiLAotICAgICAgICAid29yZC13cmFwIjogIn4xLjIuMyIKLSAgICAgIH0KLSAgICB9LAotICAgICJwLWVhY2gtc2VyaWVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtZWFjaC1zZXJpZXMvLS9wLWVhY2gtc2VyaWVzLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi15Y0lMMisxVjMydGgrOHNjYnBUdnlITmFIZTAyejBzamdoOTFYWGpBaytaZVhvUE40WjQ2RFZVbnpkc28wYVg0S2NrS3cwRk5ORkhkaloyVXNadnhpQT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicC1maW5hbGx5IjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtZmluYWxseS8tL3AtZmluYWxseS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVA3ejdGYmlacEVFanMwdHR6QmkzSkROcUxLND0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwLWxpbWl0IjogewotICAgICAgInZlcnNpb24iOiAiMi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbGltaXQvLS9wLWxpbWl0LTIuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0vLzg4bUZXU0p4OGx4Q3p3ZEFBQlRKTDJNeVdCMTIrZUlZN01ETDJTcUxtQWtlS1U5cXhSdld1U3lUam0zRlVtcEJFTXVGZmNrQUlxRWFWR1VEeGI2dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAicC10cnkiOiAiXjIuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInAtbG9jYXRlIjogewotICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3AtbG9jYXRlLy0vcC1sb2NhdGUtNC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVI3OVpaLzB3QXhLR3Uzb1lNbHo4ankva2Joc05yUzdTS1o3UHhFSEJnSjUrRjJtdEZXMmZLMmNPdEJoMWNIWWtRc2J6RlY3SStFb1JLZTZZdDBvSzdBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwLWxpbWl0IjogIl4yLjIuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJwLXRyeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wLXRyeS8tL3AtdHJ5LTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1SNG5QQVZUQVUwQjlEMzUvR2szdUpmLzdYWWJRY3lvaFNLZHZBeElSU05naEZsNGU3MWhWb0duQk5RejljV2FYeE8ySTEwS1RDKzNqTWR2dm9LdzZkUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicGFyc2UtanNvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZS1qc29uLy0vcGFyc2UtanNvbi01LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXlDS3ZtL3BoQ0d4T2tZUlNDTTgyaUR3Y3Q4L0VvblNFZ0NTeFd4RDd2ZTZqSGdnc0ZsNGZaVlFCUFJOZ1FvS2l1Vi9vZGhGckd6UVhad2JpZkM4Umc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjAuMCIsCi0gICAgICAgICJlcnJvci1leCI6ICJeMS4zLjEiLAotICAgICAgICAianNvbi1wYXJzZS1ldmVuLWJldHRlci1lcnJvcnMiOiAiXjIuMy4wIiwKLSAgICAgICAgImxpbmVzLWFuZC1jb2x1bW5zIjogIl4xLjEuNiIKLSAgICAgIH0KLSAgICB9LAotICAgICJwYXJzZTUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcGFyc2U1Ly0vcGFyc2U1LTYuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1PZm4vQ1RGelJHVFR4d3BORXM5UFA5M2dYU2hIY1RxMjU1bnpSWVNLZThBa1ZwWlk3ZTFmcG1UZk95b0l2alA1SEc3WjJaTTdWUzlQUGhRR1cycE9wdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicGFzY2FsY2FzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXNjYWxjYXNlLy0vcGFzY2FsY2FzZS0wLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXMyUGxYb0FHeW0vaUY0VFMyeUs5RmRlUmZ4UT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwYXRoLWV4aXN0cyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWV4aXN0cy8tL3BhdGgtZXhpc3RzLTQuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hazlReTVRN2pZYjJXd2NleTVGcHZnMktvQWMvWkloTFNMT1NCbVJteWdQc0d3a1ZWdDBmWmEwcXJ0TXorbTZ0SlRBSGZaUThGbm1CNE1HNExXeTcvdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicGF0aC1pcy1hYnNvbHV0ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWlzLWFic29sdXRlLy0vcGF0aC1pcy1hYnNvbHV0ZS0xLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUYwdVNhSE5WTlArOGVzNXI5VHBhbmh0Y1gxOD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwYXRoLWtleSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLWtleS8tL3BhdGgta2V5LTMuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vam1lTjBxZCt5MGpzekV0b1k0OHIwUGVxNWR3TUVrSWxDT3U2UTVmNDFsZmtzd1h1S3RZcmhnb1RwTG55SWNIbTI0VWhxeCs1VHFtMkluU3dMaEU2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicGF0aC1wYXJzZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXRoLXBhcnNlLy0vcGF0aC1wYXJzZS0xLjAuNy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTERKelBWRUVFUFIreTQ4ejkzQTBFZDB5WGI4cEFCeUdXby9rNVlZZFlncFkyLzJFc09za3NKcnE3bE9IeHJ5clZPbjFlakc2b0FwOGFodk9JUUQ4c3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInBpY29tYXRjaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9waWNvbWF0Y2gvLS9waWNvbWF0Y2gtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWxZMVEvUGlKR0Myek92L3ozOTFXT1REK1owMmJDZ3NGZnZ4b1hYZjZoN2t2OW8rV21zbXpZcXJBd1k2M3NOZ094RTR4RWRxMFd5VW5YZktlQnJTdll3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwaXJhdGVzIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BpcmF0ZXMvLS9waXJhdGVzLTQuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1XdU5xTFRiTUkzdG1mZWYyVEt4bFFtQWlMSEt0Rmhsc0NablBJcHV2Mk93MFJEVk84bGZ5MU9wZjROVXpsTVhMalBsK01lbjdBdVZkWDZUQStzK3VHQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibm9kZS1tb2R1bGVzLXJlZ2V4cCI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicGtnLWRpciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wa2ctZGlyLy0vcGtnLWRpci00LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSFJEemJhS2pDK0FPV1ZYeEFVL3g1NENPR2VJdjllYis2Q2tEU1FvTlR0NFh5V29JSnZ1UHNYaXp4dS9GcjIzRWlla2J0WndtaDFJY0lHL2wvYTEwR1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImZpbmQtdXAiOiAiXjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInBvc2l4LWNoYXJhY3Rlci1jbGFzc2VzIjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bvc2l4LWNoYXJhY3Rlci1jbGFzc2VzLy0vcG9zaXgtY2hhcmFjdGVyLWNsYXNzZXMtMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1BZXJBL2p0YTl4b3FiQUwrcTdqQi92ZmdEcXM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicHJlbHVkZS1scyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmVsdWRlLWxzLy0vcHJlbHVkZS1scy0xLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLUlaTXFWSjllVXYvWnFDZjFjT0JMNWlxWDJsUT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwcmV0dGllciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMy4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcmV0dGllci8tL3ByZXR0aWVyLTMuMy4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03Q0F3eTVkUnN4czhQSFhUM3R3aXhXOS9PRWxsOE1MRTBWUlBDSnlsN0NrUzZWSEdQU2xzVmFXVGlBU1BUeUd5WVJ5QXB4bGFXVHp3VXhWTnJoY3dEZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicHJldHR5LWZvcm1hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjYuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJldHR5LWZvcm1hdC8tL3ByZXR0eS1mb3JtYXQtMjYuNi4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi03QWVHdUNZTkdteWN5UWJDcWQvM1BXSDRlT29YL09pQ2EwdXBocDU3TlZUZUFHZEpHYUFsaWVjeHdCREhZUUNJdnJXN2FEQlpDWWVOVFAvV1g2OW1rZz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGplc3QvdHlwZXMiOiAiXjI2LjYuMiIsCi0gICAgICAgICJhbnNpLXJlZ2V4IjogIl41LjAuMCIsCi0gICAgICAgICJhbnNpLXN0eWxlcyI6ICJeNC4wLjAiLAotICAgICAgICAicmVhY3QtaXMiOiAiXjE3LjAuMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJwcm9tcHRzIjogewotICAgICAgInZlcnNpb24iOiAiMi40LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Byb21wdHMvLS9wcm9tcHRzLTIuNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1FUXlmSXVPMmhQRHNYMUwvYmxibFYrSDdJMGtuaGdBZDgyY1ZuZUN3Y2RORDlCOEF1Q0R1UmNCSDZ5SWNHNGRGemxPVXFiYXpRcXdHang1eG1zTkx1UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAia2xldXIiOiAiXjMuMC4zIiwKLSAgICAgICAgInNpc3RlcmFuc2kiOiAiXjEuMC41IgotICAgICAgfQotICAgIH0sCi0gICAgInBzbCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuOC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wc2wvLS9wc2wtMS44LjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVJJZE96eW9hdksraEExOE9HR1dEcVVUc0NMaHRBN0ljWi82TkNzNGZGSmFIQkRhYitwRERtRElCeVdGUlFKcTJDZDdyMU9vUXhCR0tPYXp0cStoaklRPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJwdW1wIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3B1bXAvLS9wdW1wLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Md1p5K3AzU0ZzMVB5dGQvalljdDR3cHY0OUhpWUNxZDlSbGM1WlZkazBWKzhZenY2alI1QmxrM1RSbVBMMWZ0NjlUeFAwSU1aR0orV1BGVTJCRmh3dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiZW5kLW9mLXN0cmVhbSI6ICJeMS4xLjAiLAotICAgICAgICAib25jZSI6ICJeMS4zLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicHVueWNvZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHVueWNvZGUvLS9wdW55Y29kZS0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWFJzUmpkZitqNW1sK3kvNkdLSFBaYnJGLzhwMllnYTBKUHRkcVRJWTJYZTVvaEpQRDlzYURKSkxQdnA5K05TQnByVnZldmRYWnlibmoyY3Y4T0VkMEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJlYWN0LWlzIjogewotICAgICAgInZlcnNpb24iOiAiMTcuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFjdC1pcy8tL3JlYWN0LWlzLTE3LjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdzJHc3l1a0w2MklKbmxhZmYvblJlZ1BRUjk0Qy9YWGFtdk1XbVNIUko0eTdUcy80b2NHUm1USHZPczhQU0U2cEIzZFdPckQvbnVldVU1c2R1QnNRNHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJlYWQtcGtnIjogewotICAgICAgInZlcnNpb24iOiAiNS4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtcGtnLy0vcmVhZC1wa2ctNS4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVVnNjltTk9wZnZLREFjMlE4RFJwTWpqemR0cm52OUhjU01YKzRWc1p4RDFhWjZaenJJRTdybHpYQnRXVHloVUxTTUtnMDc2QVc2V1I1aVpwRDBKaU9nPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJAdHlwZXMvbm9ybWFsaXplLXBhY2thZ2UtZGF0YSI6ICJeMi40LjAiLAotICAgICAgICAibm9ybWFsaXplLXBhY2thZ2UtZGF0YSI6ICJeMi41LjAiLAotICAgICAgICAicGFyc2UtanNvbiI6ICJeNS4wLjAiLAotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjYuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1mZXN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuNi4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuNi4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItcStNQjhuWVIxS0RMcmdyNEc1eWVtZnRwTUM3L1FMcVZuZEJtRUVkcXptTmo1ZGNGT080T284cWx3WkUzVUxUMytaaW0xRjhLcTRjQm5pa05obENNbGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInJlYWQtcGtnLXVwIjogewotICAgICAgInZlcnNpb24iOiAiNy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JlYWQtcGtnLXVwLy0vcmVhZC1wa2ctdXAtNy4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXpLMFRCN1hkNkpwQ0xtbExtdWZxeWtHRSsvVGxPZVBENnFLQ2xOVzdoSERLRmgvSjcvN2dDV0dSN2pvRVFFVzFiS3EzYTN5VVpTT2JPb1dMRlE0b2hnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJmaW5kLXVwIjogIl40LjEuMCIsCi0gICAgICAgICJyZWFkLXBrZyI6ICJeNS4yLjAiLAotICAgICAgICAidHlwZS1mZXN0IjogIl4wLjguMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAidHlwZS1mZXN0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuOC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHlwZS1mZXN0Ly0vdHlwZS1mZXN0LTAuOC4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItNGRiekl6cXZqdGdpTTVydzFrNXJFSHRCQU5LbWR1ZGhHeUJFYWpOMDFmRXloYUFJaHNvS055Nnk3K0lOOTNJZnBGdHdZOWlxaTdrRCt4d0toUXNOSkE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInJlZ2V4LW5vdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWdleC1ub3QvLS9yZWdleC1ub3QtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUo2U0RqVWdEeFFqNU51c25PdGRGeER3Ti8rSFd5a1I4R0VMd2N0SjdtZHFoY3l5MXhFYzRTUkZIVVh2eFRwNjYxWWFWS0FqZlJMWjljQ3FTNnRuMzJBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMy4wLjIiLAotICAgICAgICAic2FmZS1yZWdleCI6ICJeMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVtb3ZlLXRyYWlsaW5nLXNlcGFyYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZW1vdmUtdHJhaWxpbmctc2VwYXJhdG9yLy0vcmVtb3ZlLXRyYWlsaW5nLXNlcGFyYXRvci0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLXdrdk9LaWc2MnRXOFAxamcxSUpKdVNONTJPOD0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJyZXBlYXQtZWxlbWVudCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS40IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBlYXQtZWxlbWVudC8tL3JlcGVhdC1lbGVtZW50LTEuMS40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1MRmlOZlJjU3U3S0szZXZNeVlPdUN6djNMMTBUVzd5QzFHMi8rU3RNaks4WTZWcWQyTUc3ci9Ranc0Z2h0dUNPakZ2bG5tcy9pTW1McXB2Vy9FUy9XUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmVwZWF0LXN0cmluZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXBlYXQtc3RyaW5nLy0vcmVwZWF0LXN0cmluZy0xLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWpjcmtjT0hJaXJ3dFlBLy9TbmRpaHRwMTVqYz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJyZXF1aXJlLWRpcmVjdG9yeSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlLWRpcmVjdG9yeS8tL3JlcXVpcmUtZGlyZWN0b3J5LTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtakdTdFg5TU5xeHlYYmlORS8rZjNrcWFtMzBJPSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJlcXVpcmUtbWFpbi1maWxlbmFtZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXF1aXJlLW1haW4tZmlsZW5hbWUvLS9yZXF1aXJlLW1haW4tZmlsZW5hbWUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5LTjVrTUR5bEt1bGR4WUxTVWZyYm81VHV6aDRoZCsyRThOUFBYMDJtWnRuMVZ1UkVRVG9ZZS9aZGxKeStKM3VDcGZhaUdGMDVlN0I4VzBpWGJRSG1nPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJyZXNvbHZlIjogewotICAgICAgInZlcnNpb24iOiAiMS4yMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXNvbHZlLy0vcmVzb2x2ZS0xLjIwLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXdFTkJQdDR5U3pnNHliRlFXMlRUMXpNUXVjUEs5NUhTaC9ucTJDRlRaVk9HdXQyK3BRdlNzZ3RkYTRkMjZZclljcjA2N3dqYm16T0c4YnlEUEJYNjNBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpcy1jb3JlLW1vZHVsZSI6ICJeMi4yLjAiLAotICAgICAgICAicGF0aC1wYXJzZSI6ICJeMS4wLjYiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVzb2x2ZS1jd2QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcmVzb2x2ZS1jd2QvLS9yZXNvbHZlLWN3ZC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItT3JaYVgyTWIrckpDcEgvNkNwU3F0OXhGVnBOKyt4MDFYbk4yaWU5ZzZQNS8zeGVsTEFrWFdWQURwZHoxSUhEL0tGZkVYeUU2VjBVMDFPUTNVTzJyRWc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInJlc29sdmUtZnJvbSI6ICJeNS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAicmVzb2x2ZS1mcm9tIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtZnJvbS8tL3Jlc29sdmUtZnJvbS01LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcVlnOUtQMjRkRDVxa2E5SjQ3ZDBhVmt5ME4rYjRmVFU4OUxOOWlEbmpCNXdha3NpQzQ5cnZNQjBQclVKUUdvVG1INTBYUGlxT3ZBakRmYWlqR3hZWnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInJlc29sdmUtdXJsIjogewotICAgICAgInZlcnNpb24iOiAiMC4yLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jlc29sdmUtdXJsLy0vcmVzb2x2ZS11cmwtMC4yLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1MR04vNTN5Sk92MHFaai9pR3FrSUFHamlCU289IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmV0IjogewotICAgICAgInZlcnNpb24iOiAiMC4xLjE1IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZXQvLS9yZXQtMC4xLjE1LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1UVGxZcGErT0wrdk1NTkcyNHhTbFFHRUozQi9SekVmVWxMY3Q3YjVHL3l0YXYrd1BycGxDcFZNRnV3elhia2VjSnJiNklZbzFpRmIwUzl2Mzc3NTRtZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAicmltcmFmIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3JpbXJhZi8tL3JpbXJhZi0zLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSlprSk1aa0FHRkZQUDJZcVhaWFBiTWxNQmdzeHpFOElMczRsTUlYLzJvMEw5VUJ3OU8vWTNvNndGdy9pOVlMYXBjVUpXd3FiaTNrZHhJUGRDNjJUSUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImdsb2IiOiAiXjcuMS4zIgotICAgICAgfQotICAgIH0sCi0gICAgInJzdnAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjguNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnN2cC8tL3JzdnAtNC44LjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLW5mTU9sQVN1OU9uUkpvMW1iRWsyY3owRDU2YTFNQk5ySjdvcmpSWlFHMTBYRHl1dndrc0tidVhOcDZxYStrYm44MzlId2p3aEJ6aEZtZHNhRUFmYXVBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzYWZlLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLWJ1ZmZlci8tL3NhZmUtYnVmZmVyLTUuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1HZDJVWkJKRGtYbFk3R2JKeGZzRTgvbnZLa1VFVTFHMzhjMXNpTjZRUDZhOVBUOU1tSEI4R25wc2NTbU1KU29GOExPSXJ0OHVkL3dQdG9qeXM0RzYrZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic2FmZS1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYWZlLXJlZ2V4Ly0vc2FmZS1yZWdleC0xLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVFLTm1uenNIZlI2VVBVUmluaFY5MUlBanZ5ND0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJyZXQiOiAifjAuMS4xMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzYWZlci1idWZmZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZXItYnVmZmVyLy0vc2FmZXItYnVmZmVyLTIuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ZWm8zSzgyU0Q3Uml5aTBFMUVRUG9qTHo3a3BlcG5TUUk5SXlQYkhIZzFYWFhldmI1ZEpJN3RweU4yQUR4R2NRYkhHN3ZjeVJIazBjYndxY1FyaVV0Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic2FuZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMS4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zYW5lLy0vc2FuZS00LjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItaGhiekFnVElYOE83U0hmcDJjOC9rUkVmRW40cU8vOXE4QzliZXlZNit0dlo4N0Vwb1ozaTFSSUV2cDI3WUJzd25OYlk5bVdkNnBhS1ZtS2JBZ0xmWkE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBjbmFrYXphd2Evd2F0Y2giOiAiXjEuMC4zIiwKLSAgICAgICAgImFueW1hdGNoIjogIl4yLjAuMCIsCi0gICAgICAgICJjYXB0dXJlLWV4aXQiOiAiXjIuMC4wIiwKLSAgICAgICAgImV4ZWMtc2giOiAiXjAuMy4yIiwKLSAgICAgICAgImV4ZWNhIjogIl4xLjAuMCIsCi0gICAgICAgICJmYi13YXRjaG1hbiI6ICJeMi4wLjAiLAotICAgICAgICAibWljcm9tYXRjaCI6ICJeMy4xLjQiLAotICAgICAgICAibWluaW1pc3QiOiAiXjEuMS4xIiwKLSAgICAgICAgIndhbGtlciI6ICJ+MS4wLjUiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFueW1hdGNoIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW55bWF0Y2gvLS9hbnltYXRjaC0yLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTV0ZU9zUVdBQlhISEJGUDl5M3NrUzVQM2QvV2ZXWHB2M0ZVcHkrTG9yTXJOWWFUOXBJNG9MTVFYN2p6UTJLa2xOcEdwV0h6ZENYVERUMlkzWEdsWkJ3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtaWNyb21hdGNoIjogIl4zLjEuNCIsCi0gICAgICAgICAgICAibm9ybWFsaXplLXBhdGgiOiAiXjIuMS4xIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImJyYWNlcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjMuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JyYWNlcy8tL2JyYWNlcy0yLjMuMi50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFOZGJuajlQOFBqZFhVNHliYVdMSzJJRjNqYy9Fb0RZYkM3QWF6VzZ0bzNUUnNmWHhzY0M5VVhPQjVpRGlFUXJreUliV3AyU0xRZGE0K1FBYTduYzN3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJhcnItZmxhdHRlbiI6ICJeMS4xLjAiLAotICAgICAgICAgICAgImFycmF5LXVuaXF1ZSI6ICJeMC4zLjIiLAotICAgICAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4yLjAuMSIsCi0gICAgICAgICAgICAiZmlsbC1yYW5nZSI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImlzb2JqZWN0IjogIl4zLjAuMSIsCi0gICAgICAgICAgICAicmVwZWF0LWVsZW1lbnQiOiAiXjEuMS4yIiwKLSAgICAgICAgICAgICJzbmFwZHJhZ29uIjogIl4wLjguMSIsCi0gICAgICAgICAgICAic25hcGRyYWdvbi1ub2RlIjogIl4yLjAuMSIsCi0gICAgICAgICAgICAic3BsaXQtc3RyaW5nIjogIl4zLjAuMiIsCi0gICAgICAgICAgICAidG8tcmVnZXgiOiAiXjMuMC4xIgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJleHRlbmQtc2hhbGxvdyI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0ZW5kLXNoYWxsb3cvLS9leHRlbmQtc2hhbGxvdy0yLjAuMS50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVWE5OVlVclpxZllRNmh1dnU1aWRheHhXaVE4PSIsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgImlzLWV4dGVuZGFibGUiOiAiXjAuMS4wIgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiY3Jvc3Mtc3Bhd24iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNi4wLjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jcm9zcy1zcGF3bi8tL2Nyb3NzLXNwYXduLTYuMC41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItZVRWTHJCU3Q3ZmpiRHlnejgwNXBNbnN0SXMyVlRCTmtSbTBxeFpkK003QTVYRGR4VlJXTzVNeEdCWFpoalk0Y3FMWUxkdHJHcVJmOG1CUG16d1NwV1E9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgIm5pY2UtdHJ5IjogIl4xLjAuNCIsCi0gICAgICAgICAgICAicGF0aC1rZXkiOiAiXjIuMC4xIiwKLSAgICAgICAgICAgICJzZW12ZXIiOiAiXjUuNS4wIiwKLSAgICAgICAgICAgICJzaGViYW5nLWNvbW1hbmQiOiAiXjEuMi4wIiwKLSAgICAgICAgICAgICJ3aGljaCI6ICJeMS4yLjkiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiZXhlY2EiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9leGVjYS8tL2V4ZWNhLTEuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYWRieGN5V1Y0NnFpSHl2U3A1MFRLdDA1dEI0dEszSGNtRjcvbnhmQWRobm94ODNzZVREYnduYXFLTzRzWFJ5N3JvSEFJRnFKUC9Sdy9BdUViWDYxTEE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImNyb3NzLXNwYXduIjogIl42LjAuMCIsCi0gICAgICAgICAgICAiZ2V0LXN0cmVhbSI6ICJeNC4wLjAiLAotICAgICAgICAgICAgImlzLXN0cmVhbSI6ICJeMS4xLjAiLAotICAgICAgICAgICAgIm5wbS1ydW4tcGF0aCI6ICJeMi4wLjAiLAotICAgICAgICAgICAgInAtZmluYWxseSI6ICJeMS4wLjAiLAotICAgICAgICAgICAgInNpZ25hbC1leGl0IjogIl4zLjAuMCIsCi0gICAgICAgICAgICAic3RyaXAtZW9mIjogIl4xLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJmaWxsLXJhbmdlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZmlsbC1yYW5nZS8tL2ZpbGwtcmFuZ2UtNC4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtMVVTQkhVS1BtT3NHcGozRUF0SkFQREtNT1BjPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4yLjAuMSIsCi0gICAgICAgICAgICAiaXMtbnVtYmVyIjogIl4zLjAuMCIsCi0gICAgICAgICAgICAicmVwZWF0LXN0cmluZyI6ICJeMS42LjEiLAotICAgICAgICAgICAgInRvLXJlZ2V4LXJhbmdlIjogIl4yLjEuMCIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAiZXh0ZW5kLXNoYWxsb3ciOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4dGVuZC1zaGFsbG93Ly0vZXh0ZW5kLXNoYWxsb3ctMi4wLjEudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGExLVVhOTlZVXJacWZZUTZodXZ1NWlkYXh4V2lROD0iLAotICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4wLjEuMCIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImdldC1zdHJlYW0iOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNC4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtc3RyZWFtLy0vZ2V0LXN0cmVhbS00LjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUdNYXQ0RUo1MTYxa0l5MkhldkxscjRsdU5qQmd2bWo0MTNLYVFBN2p0NFY4QjRSRHNmcEhrN1dROUdWcWZZeXl4OE9TL0w2NktveCtySlJOa2xMSzd3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJwdW1wIjogIl4zLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0ZW5kYWJsZS8tL2lzLWV4dGVuZGFibGUtMC4xLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtWXJFUTRvbWtjVUdPUHNOcVlYMUhMakFkL0lrPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImlzLW51bWJlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLW51bWJlci8tL2lzLW51bWJlci0zLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1KUDFpQWFSNExQVUZZY2dRSjJyOGZSTFhFWlU9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6ICJeMy4wLjIiCi0gICAgICAgICAgfSwKLSAgICAgICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2tpbmQtb2YvLS9raW5kLW9mLTMuMi4yLnRneiIsCi0gICAgICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1NZW9ocHpTNnVidXc4eVJtMkpPdXBSNUtQR1E9IiwKLSAgICAgICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICAgICAiaXMtYnVmZmVyIjogIl4xLjEuNSIKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImlzLXN0cmVhbSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXN0cmVhbS8tL2lzLXN0cmVhbS0xLjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1FdFNqM1U1bzRMZWM2NDI4aEJjNjZBMlJ5a1E9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAibWljcm9tYXRjaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIzLjEuMTAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taWNyb21hdGNoLy0vbWljcm9tYXRjaC0zLjEuMTAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NV2lrZ2w5bjlNM3crYnBzWTNIZThMK3c5ZUY5MzM4eFJsOElBTzV2aURpendTenppRkV5VXpvMnhycmxvQjY0QURiVGY4dUE4dlJxcXR0RFRPbWNjZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYXJyLWRpZmYiOiAiXjQuMC4wIiwKLSAgICAgICAgICAgICJhcnJheS11bmlxdWUiOiAiXjAuMy4yIiwKLSAgICAgICAgICAgICJicmFjZXMiOiAiXjIuMy4xIiwKLSAgICAgICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiAiXjIuMC4yIiwKLSAgICAgICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMy4wLjIiLAotICAgICAgICAgICAgImV4dGdsb2IiOiAiXjIuMC40IiwKLSAgICAgICAgICAgICJmcmFnbWVudC1jYWNoZSI6ICJeMC4yLjEiLAotICAgICAgICAgICAgImtpbmQtb2YiOiAiXjYuMC4yIiwKLSAgICAgICAgICAgICJuYW5vbWF0Y2giOiAiXjEuMi45IiwKLSAgICAgICAgICAgICJvYmplY3QucGljayI6ICJeMS4zLjAiLAotICAgICAgICAgICAgInJlZ2V4LW5vdCI6ICJeMS4wLjAiLAotICAgICAgICAgICAgInNuYXBkcmFnb24iOiAiXjAuOC4xIiwKLSAgICAgICAgICAgICJ0by1yZWdleCI6ICJeMy4wLjIiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAibm9ybWFsaXplLXBhdGgiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ub3JtYWxpemUtcGF0aC8tL25vcm1hbGl6ZS1wYXRoLTIuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLUdyS0xWVzRaZzJPb3dhYjM1dm9nRTMvbXJ0az0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJyZW1vdmUtdHJhaWxpbmctc2VwYXJhdG9yIjogIl4xLjAuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJucG0tcnVuLXBhdGgiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ucG0tcnVuLXBhdGgvLS9ucG0tcnVuLXBhdGgtMi4wLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTmFrakxmbzExd1o3VExMZDhqVjdHSEZUYkY4PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInBhdGgta2V5IjogIl4yLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJwYXRoLWtleSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgta2V5Ly0vcGF0aC1rZXktMi4wLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUVJ5dHRYVEZvVURUcExHUkRVRFlETW4wQzBBPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjcuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjcuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNhdWFEZi9QWmRWZ3JMVE5ZSFJ0cFhhMWlSaUtjYWViaUtRMUJKZHBRbFdIMmxDdmV4UWRYNTVzblBGeUs3UXpwdWRxYkNJMHFYRmZPYXNIZHlOREdRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzaGViYW5nLWNvbW1hbmQiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4yLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGViYW5nLWNvbW1hbmQvLS9zaGViYW5nLWNvbW1hbmQtMS4yLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtUktyR1cybGJBem1KYU1PZk5qL3VYZXI5OGVvPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgInNoZWJhbmctcmVnZXgiOiAiXjEuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNoZWJhbmctcmVnZXgiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMS4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGViYW5nLXJlZ2V4Ly0vc2hlYmFuZy1yZWdleC0xLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0ya0wwbDBEQXRDMnl5cGNvVnh5eGtNbU8vcU09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAidG8tcmVnZXgtcmFuZ2UiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90by1yZWdleC1yYW5nZS8tL3RvLXJlZ2V4LXJhbmdlLTIuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWZJREJlNTMrdmxtZUp6WitEVTNWV1FGQjJ6Zz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1udW1iZXIiOiAiXjMuMC4wIiwKLSAgICAgICAgICAgICJyZXBlYXQtc3RyaW5nIjogIl4xLjYuMSIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJ3aGljaCI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjMuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLy0vd2hpY2gtMS4zLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1IeEpkWVdxMU1USVFiSjNudzBjcXNzSG9UTlUyNjdLbHJEdUdaMVdZbHhEU3RVdEtVaE9hSm1oMTEyL1RabUh4eFVmdUpxUFhTT203dER5YXMwT1NJUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXNleGUiOiAiXjIuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInNheGVzIjogewotICAgICAgInZlcnNpb24iOiAiNS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NheGVzLy0vc2F4ZXMtNS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTVMQmgxVGxzOGM5eGdHanczUXJNd0VUbVRNVmswb0ZndnJGU3ZXeDYybGxSMmhjRUlucktOWjJHWkNDdXV5Mmx2V3JkbDVqaGJwZXFjNWhSWUtGT2N3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJ4bWxjaGFycyI6ICJeMi4yLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic2VtdmVyIjogewotICAgICAgInZlcnNpb24iOiAiNi4zLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci02LjMuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjM5VEJhVFNmVjZ5QnJhcFU4OXA1Zktla0UybS9Od25Eb2NPVnJ1UUZTMS92ZU1nZHp1UGNuT00zNE02Q3d4VzhqSC9seEVhNXJCb0RlVXd1NUhIVHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNldC1ibG9ja2luZyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXQtYmxvY2tpbmcvLS9zZXQtYmxvY2tpbmctMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1CRitYZ3RBUnJwcG9BOTNUZ3JKRGtyUFlrUGM9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic2V0LXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NldC12YWx1ZS8tL3NldC12YWx1ZS0yLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSnhIYzF3ZUNONjh3UlkwZmhDb1hweUs1NW0vWFBIYWZPbUs0VVdEN20yQ0kxNEdNY0Z5cHQ0dy8wK05WNWYvWk1ieTJGNlMyd3dBN2ZneW5oOWdXU3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4yLjAuMSIsCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogIl4wLjEuMSIsCi0gICAgICAgICJpcy1wbGFpbi1vYmplY3QiOiAiXjIuMC4zIiwKLSAgICAgICAgInNwbGl0LXN0cmluZyI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0ZW5kLXNoYWxsb3cvLS9leHRlbmQtc2hhbGxvdy0yLjAuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VYTk5WVVyWnFmWVE2aHV2dTVpZGF4eFdpUTg9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6ICJeMC4xLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVlyRVE0b21rY1VHT1BzTnFZWDFITGpBZC9Jaz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzaGViYW5nLWNvbW1hbmQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlYmFuZy1jb21tYW5kLy0vc2hlYmFuZy1jb21tYW5kLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1rSHhyMnpacFl0ZG1yTjFxRGpyclgvWjFyUjFrRzhEeCtna3BLMUc0ZVhtdlhzd21jRTFoVFdCV1lVemxyYVl3MS95WnA2WXVEWTc3WXR2Yk4wZG1EQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic2hlYmFuZy1yZWdleCI6ICJeMy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic2hlYmFuZy1yZWdleCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zaGViYW5nLXJlZ2V4Ly0vc2hlYmFuZy1yZWdleC0zLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNysrZEZodGN4MzM1M3VCYXE4RERSNE51eEJldEJ6QzdaUU9obVRRSW5IRWQ2YlNyWGRpRXl6Q3ZHMDdaNDRVWWRMU2hXVXlYdDVNL3loejhla2NiMUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNoZWxsd29yZHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2hlbGx3b3Jkcy8tL3NoZWxsd29yZHMtMC4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXZGd1NVZlF2cXliaUlDd1pZNStEQVdJUExLc1dPMzFROTFKU0tsM1VZditLNWMyUVJQem4wcXplYzZRUHUxUWM5ZUhZSXRpUDNOZEpxTlZxZXRZQXd3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgfSwKLSAgICAic2lnbmFsLWV4aXQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lnbmFsLWV4aXQvLS9zaWduYWwtZXhpdC0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVlVKNDlGQzhVMU94d1pMeEliVFRyRHZMbmYvNlREZ3haY0s4d3hSOHpzMTN4cHg3eGJHNjBuZEJsaE5yRmkyRU11RlJvZURvSk83d3RoU0xxNDJFakE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNpc3RlcmFuc2kiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2lzdGVyYW5zaS8tL3Npc3RlcmFuc2ktMS4wLjUudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJMR0dsUjFReEJjeW5uMmQ1WW1EWDRNR2psWnZ5Mk1SQkRSTkhMSjhWSTZsNis5RlVpeVRGTkowSXZlT1NQMGJjWGdWRFBSY2ZHcUEwcGphcVVwZlZnPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzbGFzaCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbGFzaC8tL3NsYXNoLTMuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1nOVExaGFlYnkzNk9TU3R3YjRudENHR0dhS3NhVlNqUTY4ZkJ4b1FjdXRsNWZTMXZ1WTE4SDN3U3QzakZ5RnRya3grS3owVjFHODVBNE15QWRETWkyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic25hcGRyYWdvbiI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuOC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zbmFwZHJhZ29uLy0vc25hcGRyYWdvbi0wLjguMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRnR5T25XTi93Q0hUVlhPTXd2U3YyNmQra281dldsSURENnpvVUo3TFc4dmgrWkJDOFFkbGp2ZVJQK2NyTnJ0Qndpb0VVV3kvNGRNdGJCakE0aW9ObGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImJhc2UiOiAiXjAuMTEuMSIsCi0gICAgICAgICJkZWJ1ZyI6ICJeMi4yLjAiLAotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogIl4wLjIuNSIsCi0gICAgICAgICJleHRlbmQtc2hhbGxvdyI6ICJeMi4wLjEiLAotICAgICAgICAibWFwLWNhY2hlIjogIl4wLjIuMiIsCi0gICAgICAgICJzb3VyY2UtbWFwIjogIl4wLjUuNiIsCi0gICAgICAgICJzb3VyY2UtbWFwLXJlc29sdmUiOiAiXjAuNS4wIiwKLSAgICAgICAgInVzZSI6ICJeMy4xLjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlYnVnIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuNi45IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVidWcvLS9kZWJ1Zy0yLjYuOS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWJDN0VscmRKYUpuUGJBUCsxRW90WXZxWnNiM2VjbDV3aTZCZmk2QkpUVWNOb3dwNmN2c3BnMGpYem5SVEtEam0vRTdBZGdGQlZlQVBWTU5jS0dzSE1BPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJtcyI6ICIyLjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4yLjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWZpbmUtcHJvcGVydHkvLS9kZWZpbmUtcHJvcGVydHktMC4yLjUudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtdzFzZStSanNQSmtQbWx2RmUrQktyT3hjZ1JZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWRlc2NyaXB0b3IiOiAiXjAuMS4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXh0ZW5kLXNoYWxsb3cvLS9leHRlbmQtc2hhbGxvdy0yLjAuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1VYTk5WVVyWnFmWVE2aHV2dTVpZGF4eFdpUTg9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6ICJeMC4xLjAiCi0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3IvLS9pcy1hY2Nlc3Nvci1kZXNjcmlwdG9yLTAuMS42LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXFlRXNzNjZOaDJjbjd1ODRRL2lnaVh0Y21OWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaXMtZGF0YS1kZXNjcmlwdG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGF0YS1kZXNjcmlwdG9yLy0vaXMtZGF0YS1kZXNjcmlwdG9yLTAuMS40LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLUMxN21TRGlPTElZQ2d1ZVQ4WVZ2N0Q4d0cxWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJraW5kLW9mIjogIl4zLjAuMiIKLSAgICAgICAgICB9LAotICAgICAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICAgICAia2luZC1vZiI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMy4yLjIiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICAgICAgICAgImludGVncml0eSI6ICJzaGExLU1lb2hwelM2dWJ1dzh5Um0ySk91cFI1S1BHUT0iLAotICAgICAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgICAgICJpcy1idWZmZXIiOiAiXjEuMS41IgotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9LAotICAgICAgICAiaXMtZGVzY3JpcHRvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuNiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWRlc2NyaXB0b3IvLS9pcy1kZXNjcmlwdG9yLTAuMS42LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItYXZEWXIwU0IzRHdPOXpzTW92MGdLQ0VTRllxQ25FNGhxLzR6M1RkVWx1a0V5NXQ5QzBZUnE3SExyc041Mk5BY3FYS2FlcGVDRDBuK0IwYXJuVkczSGc9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWFjY2Vzc29yLWRlc2NyaXB0b3IiOiAiXjAuMS42IiwKLSAgICAgICAgICAgICJpcy1kYXRhLWRlc2NyaXB0b3IiOiAiXjAuMS40IiwKLSAgICAgICAgICAgICJraW5kLW9mIjogIl41LjAuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpcy1leHRlbmRhYmxlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZXh0ZW5kYWJsZS8tL2lzLWV4dGVuZGFibGUtMC4xLjEudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtWXJFUTRvbWtjVUdPUHNOcVlYMUhMakFkL0lrPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi01LjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5HRUVybkg2RjJ2VXVYRGgrT2xiY0tXNy93T2NmZFJIYVo3Vld0cUN6dGZIcmkvKytZS21QNTFPZFdlR1B1cUNPYmE2a2syT1RlNWQwMlZtVEI4MFB3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJtcyI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtVmdpdXJmd0F2bXdwQWQ5Zm1HRjRqZURWbDhnPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC41LjciLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjUuNy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1pZ09kTFJBaDBpMGVvVXlBMk9wR2k2THZQOHc9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic25hcGRyYWdvbi1ub2RlIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NuYXBkcmFnb24tbm9kZS8tL3NuYXBkcmFnb24tbm9kZS0yLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTzI3bDR4YU1ZdC9SU1E1VFIzdnBXQ0FCNUtiL2N6SWNxVUZPTS9DNGZZY0xuYlpVYzFQa2pUQU1qb2YycEJXYVNUd09VZDZxVUhjRkdWR2o3YUl3bnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMS4wLjAiLAotICAgICAgICAiaXNvYmplY3QiOiAiXjMuMC4wIiwKLSAgICAgICAgInNuYXBkcmFnb24tdXRpbCI6ICJeMy4wLjEiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1wcm9wZXJ0eS8tL2RlZmluZS1wcm9wZXJ0eS0xLjAuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1kcDY2cno5S1k2clRyNTZOTUV5YnZubS9zT1k9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXMtZGVzY3JpcHRvciI6ICJeMS4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic25hcGRyYWdvbi11dGlsIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NuYXBkcmFnb24tdXRpbC8tL3NuYXBkcmFnb24tdXRpbC0zLjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItbWJLa01kUUtzalg0QkFMNGJSWVRqMjFlZE9mOGNON1hIZFlVSkVlK1puOTloVkVZY012S1BjdDFJcU5lNytBWlBpcm44QkNET1FCSFFaa25xbUtsWlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMi4wIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAic291cmNlLW1hcCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNi4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjYuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVWpnYXB1bVdsYk1oa0JnelQ3WWtjNVlYVVQ0NkYwaUt1OFNHWHEwYmN3UDVkei9oMFBsajZlbkpxanoxWmJxMmw1V2FxWW5yVmJ3V09XTXlGM0Y0N2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNvdXJjZS1tYXAtcmVzb2x2ZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuNS4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLXJlc29sdmUvLS9zb3VyY2UtbWFwLXJlc29sdmUtMC41LjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUh0eitSbnNYV2s1K1Ayc2x4NUpoM1E2NnZoUWoxQ2xsbTB6dm5hWTk4K05GeCtEdjJDRi9mNU8vdDh4K0thTmRyZElBc3J1TnpvaC9LcGlhbGJxQW53PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhdG9iIjogIl4yLjEuMiIsCi0gICAgICAgICJkZWNvZGUtdXJpLWNvbXBvbmVudCI6ICJeMC4yLjAiLAotICAgICAgICAicmVzb2x2ZS11cmwiOiAiXjAuMi4xIiwKLSAgICAgICAgInNvdXJjZS1tYXAtdXJsIjogIl4wLjQuMCIsCi0gICAgICAgICJ1cml4IjogIl4wLjEuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzb3VyY2UtbWFwLXN1cHBvcnQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjUuMTkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NvdXJjZS1tYXAtc3VwcG9ydC8tL3NvdXJjZS1tYXAtc3VwcG9ydC0wLjUuMTkudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVdvbm03ek9DSUp6QkdRZEIrdGhzUGFyMGtZdUNJell2eFp3bEJhODd5aS9NZGp2N1RpcDJjeVZiTGo1bzBjRlBONEVWa3VUd2IzR0REeVV4MkRHbkd3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJidWZmZXItZnJvbSI6ICJeMS4wLjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC42LjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic291cmNlLW1hcC11cmwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc291cmNlLW1hcC11cmwvLS9zb3VyY2UtbWFwLXVybC0wLjQuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY1BpRk9UTFVLdkpGSWc0U0tWU2N5NGlsUFBXNnJGZ01nZnVaSlBOb0R1TXMzbkMxSGJNVXljQm9Kdzc3eEZJcDZ6MVVKUUpPZng2QzlHTUg4MERpVHc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInNwZHgtY29ycmVjdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS4xIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR4LWNvcnJlY3QvLS9zcGR4LWNvcnJlY3QtMy4xLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWNPWWNVV3doQ3VIQ1hpNDlSaEZSQ3lKRUszaVBqMVppejlEcFZpVjN0YlpPd1hENDlReklOM01wT0xKTnhoMnF3cTJsSkpaYUtNVnc5cU5pNGpUQzB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiAiXjMuMC4wIiwKLSAgICAgICAgInNwZHgtbGljZW5zZS1pZHMiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInNwZHgtZXhjZXB0aW9ucyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zcGR4LWV4Y2VwdGlvbnMvLS9zcGR4LWV4Y2VwdGlvbnMtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLS90VHJZT0M3UFBJMW5VQWd4MzRoVXBxWHV5SkcrRFRISlRuSVVMRzRyRHlnaTR4dS90ZmdtcTFlMWNJUndSendaZ280Tkx5U2krcmljTGtaa3c0aTVBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3BkeC1leHByZXNzaW9uLXBhcnNlLy0vc3BkeC1leHByZXNzaW9uLXBhcnNlLTMuMC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jYnFIdW5zUVduSk5FNktoVlNNc01lSDVIL0w5RXB5bWJ6cVRRM3VMd05DTFoxUTQ4MW9XYW9mcUg3bk82VjA3eGxYd1k2UGhRZFEySWVkV3gvWks0UT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic3BkeC1leGNlcHRpb25zIjogIl4yLjEuMCIsCi0gICAgICAgICJzcGR4LWxpY2Vuc2UtaWRzIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzcGR4LWxpY2Vuc2UtaWRzIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjkiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwZHgtbGljZW5zZS1pZHMvLS9zcGR4LWxpY2Vuc2UtaWRzLTMuMC45LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1LaTIxMmRLSzRvZ1greERvNEN0T1pCVkl3aHNLQkVmc0VFY3dtSmZMUXppcmdjMmpJV2R6ZzQwVW54ei9IekVVcU0xV0Z6VmxRU01GOWtaWjJIYm9MUT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAic3BsaXQtc3RyaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwbGl0LXN0cmluZy8tL3NwbGl0LXN0cmluZy0zLjEuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnpOVmhKRFlwd2NlVlZpaTgvSHU2REtmRDJHK05yUUhsUy9WL3Fndjc2M0VZdWRWd0VjTVFOeGQybGgrMFZyVUJ5WE4vb0prbDVnck9oWVd2UVVZaXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImV4dGVuZC1zaGFsbG93IjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJzcHJpbnRmLWpzIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NwcmludGYtanMvLS9zcHJpbnRmLWpzLTEuMC4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtQk9hU2IyWW9sVFZQUGRBVklEWXp1RmNwZml3PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInN0YWNrLXV0aWxzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YWNrLXV0aWxzLy0vc3RhY2stdXRpbHMtMi4wLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWdMLy9ma3hmV1VzSWxGTDJUbDQyQ2w2K0hGQUxFYUIxRlU3NkkvRnkrb1pqUnJlUDdPUE1YRmxHYnhNN05Rc0kwWnBVZnc3NnNIbnYwV05ZdVRiN0l3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic3RhdGljLWV4dGVuZCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMS4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdGF0aWMtZXh0ZW5kLy0vc3RhdGljLWV4dGVuZC0wLjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLVlJQ2NPY3YvVlROeUp2MWVDMUlQTkI4ZnRjWT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJkZWZpbmUtcHJvcGVydHkiOiAiXjAuMi41IiwKLSAgICAgICAgIm9iamVjdC1jb3B5IjogIl4wLjEuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiZGVmaW5lLXByb3BlcnR5IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMi41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLXByb3BlcnR5Ly0vZGVmaW5lLXByb3BlcnR5LTAuMi41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXcxc2UrUmpzUEprUG1sdkZlK0JLck94Y2dSWT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJpcy1kZXNjcmlwdG9yIjogIl4wLjEuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpcy1hY2Nlc3Nvci1kZXNjcmlwdG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtYWNjZXNzb3ItZGVzY3JpcHRvci8tL2lzLWFjY2Vzc29yLWRlc2NyaXB0b3ItMC4xLjYudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcWVFc3M2Nk5oMmNuN3U4NFEvaWdpWHRjbU5ZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJraW5kLW9mIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpcy1kYXRhLWRlc2NyaXB0b3IiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC4xLjQiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kYXRhLWRlc2NyaXB0b3IvLS9pcy1kYXRhLWRlc2NyaXB0b3ItMC4xLjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtQzE3bVNEaU9MSVlDZ3VlVDhZVnY3RDh3RzFZPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJraW5kLW9mIjogewotICAgICAgICAgICAgICAidmVyc2lvbiI6ICIzLjIuMiIsCi0gICAgICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi0zLjIuMi50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJpcy1kZXNjcmlwdG9yIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS42IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXMtZGVzY3JpcHRvci8tL2lzLWRlc2NyaXB0b3ItMC4xLjYudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1hdkRZcjBTQjNEd085enNNb3YwZ0tDRVNGWXFDbkU0aHEvNHozVGRVbHVrRXk1dDlDMFlScTdITHJzTjUyTkFjcVhLYWVwZUNEMG4rQjBhcm5WRzNIZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaXMtYWNjZXNzb3ItZGVzY3JpcHRvciI6ICJeMC4xLjYiLAotICAgICAgICAgICAgImlzLWRhdGEtZGVzY3JpcHRvciI6ICJeMC4xLjQiLAotICAgICAgICAgICAgImtpbmQtb2YiOiAiXjUuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgImtpbmQtb2YiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiNS4xLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9raW5kLW9mLy0va2luZC1vZi01LjEuMC50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU5HRUVybkg2RjJ2VXVYRGgrT2xiY0tXNy93T2NmZFJIYVo3Vld0cUN6dGZIcmkvKytZS21QNTFPZFdlR1B1cUNPYmE2a2syT1RlNWQwMlZtVEI4MFB3PT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJzdHJpbmctbGVuZ3RoIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy1sZW5ndGgvLS9zdHJpbmctbGVuZ3RoLTQuMC4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0rbDZyTk41ZllITmhaWnk0MVJYc1lwdENqQTJJZ21xNEVHN2taQVlGUUkxRTFWVFhhcnI2WlBYQmc2ZXE3WTZlSzRGRWhZNkFKbHl1RkliL3YvUzBWUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiY2hhci1yZWdleCI6ICJeMS4wLjIiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic3RyaW5nLXdpZHRoIjogewotICAgICAgInZlcnNpb24iOiAiNC4yLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZy13aWR0aC8tL3N0cmluZy13aWR0aC00LjIuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItWEJKYlQzTjRKaFZ1bVhFMGVvTFU5RENqY2FGOTJLTE5xVG1GQ25HMXBmOGR1VXhGR3d0UDZBRDZua2p3OWEzSWRpUnRMM0UydzNKRGlFL3hpM3ZPZUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImVtb2ppLXJlZ2V4IjogIl44LjAuMCIsCi0gICAgICAgICJpcy1mdWxsd2lkdGgtY29kZS1wb2ludCI6ICJeMy4wLjAiLAotICAgICAgICAic3RyaXAtYW5zaSI6ICJeNi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAic3RyaXAtYW5zaSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1hbnNpLy0vc3RyaXAtYW5zaS02LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXV2S1RyVGZRTllOSWN0YlIxSy9ZR1RSMTc1Nkd5Y1BzZzdiOWJkVjlEdXF1cjRndjZhS3FIWGFoNjdaOEltUzdXRXo1UVZjT3RsZlcyclpFdWd0Nnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFuc2ktcmVnZXgiOiAiXjUuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInN0cmlwLWJvbSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdHJpcC1ib20vLS9zdHJpcC1ib20tNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN4dXJGdjV0RWdpaTMzWmk4SnRwNTV3RUlJTFI5ZWgzNEZBVzAwUFpmK0puU3NUbVYvaW9ld1NnUWw5N0pIdmdqb1JHd1BTaHNXbStJZHJ4QjM1ZDB3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzdHJpcC1lb2YiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtZW9mLy0vc3RyaXAtZW9mLTEuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtdTBQL1ZaaW02d1hZbTFuODBTbkpnekUyQnI4PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInN0cmlwLWZpbmFsLW5ld2xpbmUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3RyaXAtZmluYWwtbmV3bGluZS8tL3N0cmlwLWZpbmFsLW5ld2xpbmUtMi4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJycHZmTkFFM2RjdnE3bGwzeFZ1bXpqS2paUTV0STFzRVVJS3IzVW9rczBYVWw0NVN0M0ZsYXRWcWVmOXByazRqUkR6aFc2V1pnKzNiazkzeTZwTGpBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjcuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdXBwb3J0cy1jb2xvci8tL3N1cHBvcnRzLWNvbG9yLTcuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xcENBdlJsOXN0dU9IdmVLc243SG5jSlJ2djUwMXFJYWNLelFsTy8rTHd4YzkrMHEyd0x5djREZnZ0ODAvRFBuMnBxT0JzSmREaW9nWEdSOStPdndSdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaGFzLWZsYWciOiAiXjQuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInN1cHBvcnRzLWh5cGVybGlua3MiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjIuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc3VwcG9ydHMtaHlwZXJsaW5rcy8tL3N1cHBvcnRzLWh5cGVybGlua3MtMi4yLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTZzWEV6VjUrSTVqOEJtcTkvdlVwaEdSTS9SSk5UOVNDVVJKTGp3Zk9nNTFoZVJ0Z3VHV0R6Y2FCbGdBektoUWEwRVZOcFBFS3pRdUJ3WjhTOFdhQ2VRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoYXMtZmxhZyI6ICJeNC4wLjAiLAotICAgICAgICAic3VwcG9ydHMtY29sb3IiOiAiXjcuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInN5bWJvbC10cmVlIjogewotICAgICAgInZlcnNpb24iOiAiMy4yLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N5bWJvbC10cmVlLy0vc3ltYm9sLXRyZWUtMy4yLjQudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTlRTms1S3dERitCdnorUHlPYmttU1lqSTVrc1ZVWXRqVzdBVTIycjJOS2NmTEpjWHA5NmhrRFdVMytYbmRPc1ViK0FROVFoZnpmQ1QyTytDTldUNVR3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0ZXJtaW5hbC1saW5rIjogewotICAgICAgInZlcnNpb24iOiAiMi4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Rlcm1pbmFsLWxpbmsvLS90ZXJtaW5hbC1saW5rLTIuMS4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi11bjBGbWlSVVFOcjVQSnF5OWtQN2M0MEY1Qk9mcEdsWVRyeG9uRENoRVpCN3B6WnhSTnAvYnQreW1peTkvbnB3WHlhOUtIOTluSi9HWEZJaVVrWUdGUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYW5zaS1lc2NhcGVzIjogIl40LjIuMSIsCi0gICAgICAgICJzdXBwb3J0cy1oeXBlcmxpbmtzIjogIl4yLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0ZXN0LWV4Y2x1ZGUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdGVzdC1leGNsdWRlLy0vdGVzdC1leGNsdWRlLTYuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1jQUdXUEl5T0hVNnpsbWc4OGp3bTdWUnlYbk1ON2lWNjhPR0FiWURrL01oL3hDL3B6VlBsUXRZNm5nb0lILzUvdGNpdWhHZnZFU1U4R3JIcmN4RDU2dz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiQGlzdGFuYnVsanMvc2NoZW1hIjogIl4wLjEuMiIsCi0gICAgICAgICJnbG9iIjogIl43LjEuNCIsCi0gICAgICAgICJtaW5pbWF0Y2giOiAiXjMuMC40IgotICAgICAgfQotICAgIH0sCi0gICAgInRocm9hdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjUuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90aHJvYXQvLS90aHJvYXQtNS4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWZjd1g0bW5kenBMUUtCUzFEVlloR0FjWWFZdDd2c0hOSXZRVitXWE12bm93NWNnalBwaHE1Q2FheUxhR3NqUmRTQ0taRk5HdDcvR1lBdVhhTk9pWUNBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0bXBsIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RtcGwvLS90bXBsLTEuMC41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi0zZjB1T0VBUXdJcUd1V1cyTVZ6WWc4ZlYvUU5uYy9JcHVKTkc4MzdyTHVjekFhTFZIc2xXSFpRajRJR2lFbDVIczNra2Jod0w5QWI3SHJzbXVqK1Ntdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAidG8tZmFzdC1wcm9wZXJ0aWVzIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvLWZhc3QtcHJvcGVydGllcy8tL3RvLWZhc3QtcHJvcGVydGllcy0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTNGNXBqTDBIa21XOGMrQTNkb0drNU9nL1lXND0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0by1vYmplY3QtcGF0aCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjAuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90by1vYmplY3QtcGF0aC8tL3RvLW9iamVjdC1wYXRoLTAuMy4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtS1hXSXQ3RG40S3dJNEU1bkw0WEI5Sm1lRjY4PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImtpbmQtb2YiOiAiXjMuMC4yIgotICAgICAgfSwKLSAgICAgICJkZXBlbmRlbmNpZXMiOiB7Ci0gICAgICAgICJraW5kLW9mIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4yIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcva2luZC1vZi8tL2tpbmQtb2YtMy4yLjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtTWVvaHB6UzZ1YnV3OHlSbTJKT3VwUjVLUEdRPSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImlzLWJ1ZmZlciI6ICJeMS4xLjUiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAidG8tcmVnZXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tcmVnZXgvLS90by1yZWdleC0zLjAuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItRld0bGVOQXRaL0tpMnF0cWVqMkNYVE9heU9IOWJIRFFGK1E0OFZwV3lEWGpiWXhBNFl6OGlEQjMxelhPQlVsT0hIS2lkRGJxR1ZyVFV2UU1QbUJHQnc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImRlZmluZS1wcm9wZXJ0eSI6ICJeMi4wLjIiLAotICAgICAgICAiZXh0ZW5kLXNoYWxsb3ciOiAiXjMuMC4yIiwKLSAgICAgICAgInJlZ2V4LW5vdCI6ICJeMS4wLjIiLAotICAgICAgICAic2FmZS1yZWdleCI6ICJeMS4xLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidG8tcmVnZXgtcmFuZ2UiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI1LjAuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG8tcmVnZXgtcmFuZ2UvLS90by1yZWdleC1yYW5nZS01LjAuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItNjVQN2l6Nlg1eUVyMWN3Y2d2UXhiYkl3N1VrM2dPeTVkSWR0WjRyRHZlTHFocmRKUCtMaS9IeDZ0eUswTkViKzJHQ3luZUNNSmlHcXJBRENTTms4c1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImlzLW51bWJlciI6ICJeNy4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidG91Z2gtY29va2llIjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RvdWdoLWNvb2tpZS8tL3RvdWdoLWNvb2tpZS00LjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItdEhkdEVwUUNNcmMxWUxyTWFxWFhjajZBeGhZaS94Z2l0Nm1adTErRURXVW4rcWhVZjh3TVFvRkl5OU5YdXEyM3pBd3RjQjB0L01qQUNHUjE4cGNSYmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInBzbCI6ICJeMS4xLjMzIiwKLSAgICAgICAgInB1bnljb2RlIjogIl4yLjEuMSIsCi0gICAgICAgICJ1bml2ZXJzYWxpZnkiOiAiXjAuMS4yIgotICAgICAgfQotICAgIH0sCi0gICAgInRyNDYiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHI0Ni8tL3RyNDYtMi4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTE1SWg3cGhmY2RQNVl4cWlCK2lEdExvYVR6NE5kMzUrSWlBdjBrUTVGTktIelhnZFdxUG9USXFFRERKbVhjZVF0NEpaazZsVlBUOGxuRGxQcEdEcHB3PT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJwdW55Y29kZSI6ICJeMi4xLjEiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidHMtamVzdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjI2LjUuNiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdHMtamVzdC8tL3RzLWplc3QtMjYuNS42LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1ydWErckNQOER4cEE4YjREUUQvNlgySFFTOFp5L3h6VmlWWWZFczJPUXU2OHRrQ3VLTFYwTWQ4cG1YNTUrVzI0dVJJeUFzZi9CYWpSZnhPcytSMk1LQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiYnMtbG9nZ2VyIjogIjAueCIsCi0gICAgICAgICJidWZmZXItZnJvbSI6ICIxLngiLAotICAgICAgICAiZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkiOiAiMi54IiwKLSAgICAgICAgImplc3QtdXRpbCI6ICJeMjYuMS4wIiwKLSAgICAgICAgImpzb241IjogIjIueCIsCi0gICAgICAgICJsb2Rhc2giOiAiNC54IiwKLSAgICAgICAgIm1ha2UtZXJyb3IiOiAiMS54IiwKLSAgICAgICAgIm1rZGlycCI6ICIxLngiLAotICAgICAgICAic2VtdmVyIjogIjcueCIsCi0gICAgICAgICJ5YXJncy1wYXJzZXIiOiAiMjAueCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAic2VtdmVyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjcuMy41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VtdmVyLy0vc2VtdmVyLTcuMy41LnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGE1MTItUG9lR0pZaDhISzRCVE8vYTlUZjZaRzN2ZW8vQTdaVnNZclNBNko4bnk5bmIzQjFWcnBrdU4rejlPRTV3ZkU1cDZINExjaFlac2VnaVFnYkpEOTRaRlE9PSIsCi0gICAgICAgICAgImRldiI6IHRydWUsCi0gICAgICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAgICAgImxydS1jYWNoZSI6ICJeNi4wLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAidHNsaWIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjE0LjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGliLy0vdHNsaWItMS4xNC4xLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1YbmkzNU5LempnTXJ3ZXZ5c0hUQ0FydExEcFB2eWU4elYvMEU0RXlZbjQzUDcvN3F2UXdQaDlCR2tIZXdiTXVsVm50YmlnbWNUN3JkWDNCTm85d1JKZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAidHNsaW50IjogewotICAgICAgInZlcnNpb24iOiAiNi4xLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGludC8tL3RzbGludC02LjEuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSWJSNG5rVDk2RVFPdktFMlBXL2RqR3o4aUdOZUo0ckYybUJmaVlhUi9udlVXWUtKaEx3aW1vSktnaklGRUlEaWJCdE9ldmo3QnFDUkw0b0hlV1dVQ2c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkBiYWJlbC9jb2RlLWZyYW1lIjogIl43LjAuMCIsCi0gICAgICAgICJidWlsdGluLW1vZHVsZXMiOiAiXjEuMS4xIiwKLSAgICAgICAgImNoYWxrIjogIl4yLjMuMCIsCi0gICAgICAgICJjb21tYW5kZXIiOiAiXjIuMTIuMSIsCi0gICAgICAgICJkaWZmIjogIl40LjAuMSIsCi0gICAgICAgICJnbG9iIjogIl43LjEuMSIsCi0gICAgICAgICJqcy15YW1sIjogIl4zLjEzLjEiLAotICAgICAgICAibWluaW1hdGNoIjogIl4zLjAuNCIsCi0gICAgICAgICJta2RpcnAiOiAiXjAuNS4zIiwKLSAgICAgICAgInJlc29sdmUiOiAiXjEuMy4yIiwKLSAgICAgICAgInNlbXZlciI6ICJeNS4zLjAiLAotICAgICAgICAidHNsaWIiOiAiXjEuMTMuMCIsCi0gICAgICAgICJ0c3V0aWxzIjogIl4yLjI5LjAiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMi4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYW5zaS1zdHlsZXMvLS9hbnNpLXN0eWxlcy0zLjIuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVZUMFpJNmtaUmRUaDhZeUp3M1NNYlltL3UrTnFmc0F4RXBXTzBQZjlzcTgvZTk0V3h4T3BQS3g5RlIxRmx5Q3RPVkROT1ErOG50bHFGeGlSYytyNXFBPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJjb2xvci1jb252ZXJ0IjogIl4xLjkuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjaGFsayI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIyLjQuMiIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NoYWxrLy0vY2hhbGstMi40LjIudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1NdGkrZjlscEpOY3dGNHRXVjgvT3JUVHRGMWdaaStmOEZxbHlBZG91cmFsY0ZXRlFXRjIrTmdDSFNoamtDYitJRkJMcTlidVp3RTF4Y2tRVTRwZVN1UT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiYW5zaS1zdHlsZXMiOiAiXjMuMi4xIiwKLSAgICAgICAgICAgICJlc2NhcGUtc3RyaW5nLXJlZ2V4cCI6ICJeMS4wLjUiLAotICAgICAgICAgICAgInN1cHBvcnRzLWNvbG9yIjogIl41LjMuMCIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1jb252ZXJ0IjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuOS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItY29udmVydC8tL2NvbG9yLWNvbnZlcnQtMS45LjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RZkFVdGQrdkZkQXRGUWNDOENDeVl0MWZZV3hTcUFpSzJjU0Q2ekRCOE4zY3BzRUJBdlJ4cDl6T0dnNkcvU0hISllBVDg4L2F6L0l1REdBTHNOVmJHZz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY29sb3ItbmFtZSI6ICIxLjEuMyIKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJjb2xvci1uYW1lIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4zIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29sb3ItbmFtZS8tL2NvbG9yLW5hbWUtMS4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtcDlCVmk5aWNRdmVWM1VJeWozUUlNY3BUdkNVPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImVzY2FwZS1zdHJpbmctcmVnZXhwIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC41IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNjYXBlLXN0cmluZy1yZWdleHAvLS9lc2NhcGUtc3RyaW5nLXJlZ2V4cC0xLjAuNS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS1HMkhBVmlHUXFOLzJyanV5endJQXloTUxodFE9IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZQotICAgICAgICB9LAotICAgICAgICAiaGFzLWZsYWciOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMy4wLjAiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtZmxhZy8tL2hhcy1mbGFnLTMuMC4wLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLXRkUlUzQ0dacmlKV21mTkdmbG9IODdsVnV2MD0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJta2RpcnAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC41LjUiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9ta2RpcnAvLS9ta2RpcnAtMC41LjUudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1OS21BbEVTZjZqTUd5bTErK1IwUmE3d3ZoVit3Rlc2M0ZhU09GUHdSYWh2ZWEwZ01VY0dVaFZlQWcvMEJDMHdpdjlpaDVOWVBCMVduMVVFSTEvTCt4UT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAibWluaW1pc3QiOiAiXjEuMi41IgotICAgICAgICAgIH0KLSAgICAgICAgfSwKLSAgICAgICAgInNlbXZlciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjcuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbXZlci8tL3NlbXZlci01LjcuMS50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXNhdWFEZi9QWmRWZ3JMVE5ZSFJ0cFhhMWlSaUtjYWViaUtRMUJKZHBRbFdIMmxDdmV4UWRYNTVzblBGeUs3UXpwdWRxYkNJMHFYRmZPYXNIZHlOREdRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0sCi0gICAgICAgICJzdXBwb3J0cy1jb2xvciI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICI1LjUuMCIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N1cHBvcnRzLWNvbG9yLy0vc3VwcG9ydHMtY29sb3ItNS41LjAudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1RalZqd2RYSXQ0MDhNSWlBcUNYNG9VS3NnVTJFcUFHenMyUHBrbTRhUVliam0rWkVXRWNXNFNmRk5UcjR1TU5abWEwZXk0ZjVsZ0xya0IwYVgwUU1vdz09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiaGFzLWZsYWciOiAiXjMuMC4wIgotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInRzbGludC1jb25maWctcHJldHRpZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjE4LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzbGludC1jb25maWctcHJldHRpZXIvLS90c2xpbnQtY29uZmlnLXByZXR0aWVyLTEuMTguMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTIteFB3OVBnTlBMRzNpS1J4bUs3RFdyK0VhL1N6cnZmSHRqRnQ1TEJsNjFnazJVQkcvREI5a0NYUmp2K3h5SVUxclV0bmF5TGVNVVZKQmNNWDhaMTduRGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInRzdXRpbHMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIyLjI5LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RzdXRpbHMvLS90c3V0aWxzLTIuMjkuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItZzVKVkhDSUp3emZJU2FYcFhFMXF2TmFsY2E1SndvYjZGakk0QW9QbHFNdXNKNmZ0RkU3SWtrRm9NaFZMUmdLKzRLeDNna3piOFVaSzV0NXlUVHZFbUE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInRzbGliIjogIl4xLjguMSIKLSAgICAgIH0KLSAgICB9LAotICAgICJ0eXBlLWNoZWNrIjogewotICAgICAgInZlcnNpb24iOiAiMC4zLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtY2hlY2svLS90eXBlLWNoZWNrLTAuMy4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtV0lUS3RSTFBIVFZlUDdlRTh3Z0VzclVnMjNJPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgInByZWx1ZGUtbHMiOiAifjEuMS4yIgotICAgICAgfQotICAgIH0sCi0gICAgInR5cGUtZGV0ZWN0IjogewotICAgICAgInZlcnNpb24iOiAiNC4wLjgiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZGV0ZWN0Ly0vdHlwZS1kZXRlY3QtNC4wLjgudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTBmci9tSUgxZGxPK3g3VGxjTXkrYklEcUtQc3cvNzB0VnllSFc3ODdnb1FqaG1xYVplMTB1d0x1anViSzlxOUxnNkZpaG8xS1VLRFl6MFo3azdnNS9nPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0eXBlLWZlc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjIxLjMiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3R5cGUtZmVzdC8tL3R5cGUtZmVzdC0wLjIxLjMudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXQwcnpCcTg3bTNmVmNkdUhEVUZoS215eVgrOWVvNldRalp2ZjUxRWEvTTBRNytUMzc0SnAxYVVpeVVsMEdLeHA4TS9PRVRWSFNEdm1reVBndlgrWDJ3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ0eXBlZGFycmF5LXRvLWJ1ZmZlciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlZGFycmF5LXRvLWJ1ZmZlci8tL3R5cGVkYXJyYXktdG8tYnVmZmVyLTMuMS41LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi16ZHU4WE1ORURlcEtLUitYWU9YQVZQdFd1aTBseTBOdG9oVXNjdytVbWFIaUFXVDhoclYxcnIvL0g2ViswRHZKM09RMTlTOTc5TTBsYUxmWDhybTgyUT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAiaXMtdHlwZWRhcnJheSI6ICJeMS4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAidHlwZXNjcmlwdCI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuOS41IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlc2NyaXB0Ly0vdHlwZXNjcmlwdC00LjkuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItMUZYazlFMkhtK1F6WlE3eitNY0ppSEw0TlcxRjJFek11OU5xOWkzekFhR3FpYmFmcVl3Q1ZVNld5V0F1eVFSUnpPbHhvdTh4WlN5WExFTjhvS2oyNGc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInVuZGljaS10eXBlcyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjYuMjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5kaWNpLXR5cGVzLy0vdW5kaWNpLXR5cGVzLTYuMjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItTnk2UVoyTmp1MjB2dzFTUkhlM2Q5alZ1NmdKKzRlMytNTXBxdTdwcUU1SFQ2V3NUU2xjZSsrR1FtSzVVWFM4bXpWOERTWUhyUUgrWHJmMmpWY3VLTmc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInVuaW9uLXZhbHVlIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VuaW9uLXZhbHVlLy0vdW5pb24tdmFsdWUtMS4wLjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXRKZlhteE1lV1luY3pDVnM3WEFFdklWN2llcHBBTGR5ZXBXTWtIa3djaVJwWnJhRy94d1QrczJKTjgrcHIxKzhqQ1JmODBGRnp2citNcFFlZW9GNFhnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJhcnItdW5pb24iOiAiXjMuMS4wIiwKLSAgICAgICAgImdldC12YWx1ZSI6ICJeMi4wLjYiLAotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6ICJeMC4xLjEiLAotICAgICAgICAic2V0LXZhbHVlIjogIl4yLjAuMSIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaXMtZXh0ZW5kYWJsZSI6IHsKLSAgICAgICAgICAidmVyc2lvbiI6ICIwLjEuMSIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLWV4dGVuZGFibGUvLS9pcy1leHRlbmRhYmxlLTAuMS4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLVlyRVE0b21rY1VHT1BzTnFZWDFITGpBZC9Jaz0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ1bml2ZXJzYWxpZnkiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5pdmVyc2FsaWZ5Ly0vdW5pdmVyc2FsaWZ5LTAuMS4yLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1yQkplSTVDWEFsbXkxcFYrNjE3V0I5SjYzVTZYY2F6SEhGMmYyZGJKaXg0WHpwVUYwUlMzWmJqMEZHSU9DQXZhNVAvZC9HQk9ZYUFDUTF3KzBhelVrZz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAidW5zZXQtdmFsdWUiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5zZXQtdmFsdWUvLS91bnNldC12YWx1ZS0xLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLWczYUhQMzBqTlJlZit4NXZ3Nmp0RGZ5S3RWaz0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJoYXMtdmFsdWUiOiAiXjAuMy4xIiwKLSAgICAgICAgImlzb2JqZWN0IjogIl4zLjAuMCIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAiaGFzLXZhbHVlIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMy4xIiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXZhbHVlLy0vaGFzLXZhbHVlLTAuMy4xLnRneiIsCi0gICAgICAgICAgImludGVncml0eSI6ICJzaGExLWV4OVl1dHBpeW9KK3dLSUhnQ1ZsU0VXWlhoOD0iLAotICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgICAgICJnZXQtdmFsdWUiOiAiXjIuMC4zIiwKLSAgICAgICAgICAgICJoYXMtdmFsdWVzIjogIl4wLjEuNCIsCi0gICAgICAgICAgICAiaXNvYmplY3QiOiAiXjIuMC4wIgotICAgICAgICAgIH0sCi0gICAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgICAgICJpc29iamVjdCI6IHsKLSAgICAgICAgICAgICAgInZlcnNpb24iOiAiMi4xLjAiLAotICAgICAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXNvYmplY3QvLS9pc29iamVjdC0yLjEuMC50Z3oiLAotICAgICAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtOEdWV0VKYWo4ZG91OUdKeStCWElRTmgrRElrPSIsCi0gICAgICAgICAgICAgICJkZXYiOiB0cnVlLAotICAgICAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAgICAgImlzYXJyYXkiOiAiMS4wLjAiCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJoYXMtdmFsdWVzIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjAuMS40IiwKLSAgICAgICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXZhbHVlcy8tL2hhcy12YWx1ZXMtMC4xLjQudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTEtYldIZWxka2QvS201b0NDSnJUaEwvNDlpdDNFPSIsCi0gICAgICAgICAgImRldiI6IHRydWUKLSAgICAgICAgfQotICAgICAgfQotICAgIH0sCi0gICAgInVyaXgiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIwLjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXJpeC8tL3VyaXgtMC4xLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS0ycE4vZW1MaUgrd2YwWTFKczF3cE5RWjZiSEk9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAidXNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4xLjEiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3VzZS8tL3VzZS0zLjEuMS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItY3dFU1ZYbE8zdXJsOVlXbEZXL1RBOWNzaENFaHR1N0lLSi9wNXNvSi9nR3BqN3ZidkZyQVkvZUlpb1E2RHcyM0tqWmhZZ2lJbzhIT3MxblEydnIvb1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInV1aWQiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI4LjMuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdXVpZC8tL3V1aWQtOC4zLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLStOWXMyUWVNV3krR1dGT0VtOXhubjZIQ0RwMGw3UUJEN21sOHpMVW1KKzkzUTVORjBOb2NFcm53a1RrWFZGTmlYMy9mcEM2YWZTOERoYi9nejdSN2VnPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAib3B0aW9uYWwiOiB0cnVlCi0gICAgfSwKLSAgICAidjgtdG8taXN0YW5idWwiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI3LjEuMiIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdjgtdG8taXN0YW5idWwvLS92OC10by1pc3RhbmJ1bC03LjEuMi50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItVHhOYjdZRVV3a0xYQ1FZZXVkaTZsZ1EvU1pyek5PNGtNZGxxVnhhWlBVSVVqQ3Y2aVNTeXBVUVg3MGtOQlNFUnBROGZrNDgrZDYxRlhrK3RncWNXb3c9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIkB0eXBlcy9pc3RhbmJ1bC1saWItY292ZXJhZ2UiOiAiXjIuMC4xIiwKLSAgICAgICAgImNvbnZlcnQtc291cmNlLW1hcCI6ICJeMS42LjAiLAotICAgICAgICAic291cmNlLW1hcCI6ICJeMC43LjMiCi0gICAgICB9LAotICAgICAgImRlcGVuZGVuY2llcyI6IHsKLSAgICAgICAgInNvdXJjZS1tYXAiOiB7Ci0gICAgICAgICAgInZlcnNpb24iOiAiMC43LjMiLAotICAgICAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zb3VyY2UtbWFwLy0vc291cmNlLW1hcC0wLjcuMy50Z3oiLAotICAgICAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUNrQ2o2Z2lOM1MrbjlxcllpQlRYNWd5c3RsRU5uUlc1alplTkxIcGU2YXVlK1NySGNHNVZZd3VqaFc5czRkWTMxbUVHc3hCRHJIUjZvSTY5ZlRYc2FRPT0iLAotICAgICAgICAgICJkZXYiOiB0cnVlCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9LAotICAgICJ2YWxpZGF0ZS1ucG0tcGFja2FnZS1saWNlbnNlIjogewotICAgICAgInZlcnNpb24iOiAiMy4wLjQiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhbGlkYXRlLW5wbS1wYWNrYWdlLWxpY2Vuc2UvLS92YWxpZGF0ZS1ucG0tcGFja2FnZS1saWNlbnNlLTMuMC40LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1EcEttMlVpL3hONy9IUUtDdHBaeG9SV0JoWjlaMGtxdHlnRzhYQ2dOUThabERueHVRbVdoajU2Nmo4Zk40Q3UzL0ptYmhzRG83ZmNBSnE0czloMjdFdz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAic3BkeC1jb3JyZWN0IjogIl4zLjAuMCIsCi0gICAgICAgICJzcGR4LWV4cHJlc3Npb24tcGFyc2UiOiAiXjMuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgInczYy1oci10aW1lIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3czYy1oci10aW1lLy0vdzNjLWhyLXRpbWUtMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLXo4UDVEdkROaktEb0ZJSEs3cThyOGxhY2tUNmwram8vWWUzSE9sZTdsOW5JQ1A5bGYxQ2kyNWZ5OXZIZDBKT1dld2tJRnpYSUVpZzNUZEtUN0pRNWZRPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJicm93c2VyLXByb2Nlc3MtaHJ0aW1lIjogIl4xLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3M2MteG1sc2VyaWFsaXplciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93M2MteG1sc2VyaWFsaXplci8tL3czYy14bWxzZXJpYWxpemVyLTIuMC4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi00dHpEMG1GOGlTaU1pTnMzMEJpTE8zRXBmR0xaVVQyTVNYL0crbzdaeXdEemxpV1EzT1B0VFowUFRDM0IzY2ExVUFmNGNKTUhCKzJCZjU2RXJpSnVSQT09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAieG1sLW5hbWUtdmFsaWRhdG9yIjogIl4zLjAuMCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3YWxrZXIiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjAuNyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2Fsa2VyLy0vd2Fsa2VyLTEuMC43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTEtTDMrYmo5RU5aM0ppc1lxSVRpalJsaGpnS1BzPSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgIm1ha2VlcnJvciI6ICIxLjAueCIKLSAgICAgIH0KLSAgICB9LAotICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI2LjEuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2ViaWRsLWNvbnZlcnNpb25zLy0vd2ViaWRsLWNvbnZlcnNpb25zLTYuMS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1xQkl2RkxHaUJwTGpmd21ZQWFIUFhzbitobzV4Wm5HdnlHdnNhcnl3R05jOFZ5UUpVTUhKOE9CS0dHclBFUjBva0JlTURhYW40bU5CbGdCUk94dUk4dz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAid2hhdHdnLWVuY29kaW5nIjogewotICAgICAgInZlcnNpb24iOiAiMS4wLjUiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy1lbmNvZGluZy8tL3doYXR3Zy1lbmNvZGluZy0xLjAuNS50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItYjVsaW01NEpPUE45SHR6dks5SEZYdkJtYS9ybmZGZXFzaWMwaFNwanREYlZ4UjNkSktMYytLQjRWNkdnaUdPdmw3Q1kvS05oOHJ4U285REtRcm5VRXc9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImljb252LWxpdGUiOiAiMC40LjI0IgotICAgICAgfQotICAgIH0sCi0gICAgIndoYXR3Zy1taW1ldHlwZSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMy4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93aGF0d2ctbWltZXR5cGUvLS93aGF0d2ctbWltZXR5cGUtMi4zLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLU00eU13cjZtQW5Rejc2VGJKbTkxNCtnUHBCL25Dd3ZaYkpVMjhjVUQ2ZFIwMDRTQXhETE9PU1VhQjFKRFJxTHRhT1YvdmkwSUM1bEVBR0ZncmpHdi9nPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ3aGF0d2ctdXJsIjogewotICAgICAgInZlcnNpb24iOiAiOC41LjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doYXR3Zy11cmwvLS93aGF0d2ctdXJsLTguNS4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1meStSNzd4V3YwQWlxZkxsNG51R1VsUTMvNmI1dU5mUTRXQWJHUVZNWXNoQ1RDQ1BLOXBzQzFuV2gzWEh1eEdWQ3RsY0REUVBRVzFjc21tSVFvK2Z3Zz09IiwKLSAgICAgICJkZXYiOiB0cnVlLAotICAgICAgInJlcXVpcmVzIjogewotICAgICAgICAibG9kYXNoIjogIl40LjcuMCIsCi0gICAgICAgICJ0cjQ2IjogIl4yLjAuMiIsCi0gICAgICAgICJ3ZWJpZGwtY29udmVyc2lvbnMiOiAiXjYuMS4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndoaWNoIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjIiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLy0vd2hpY2gtMi4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUJMSTNUbDFUVzNQdmw3MGwzeXEzWTY0aSthd3B3WHFzR0JZV2trcU10bmJYZ3JNRCt5ajdyaFcwa3VFRHh6SmFZWEdqRVc1b2dhcEtOTUVLTk1qaWJBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJpc2V4ZSI6ICJeMi4wLjAiCi0gICAgICB9Ci0gICAgfSwKLSAgICAid2hpY2gtbW9kdWxlIjogewotICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3doaWNoLW1vZHVsZS8tL3doaWNoLW1vZHVsZS0yLjAuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGExLTJlOEgzT2Q3bVFLNG82ajZTekhENC9mbTZIbz0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ3b3JkLXdyYXAiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIxLjIuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd29yZC13cmFwLy0vd29yZC13cmFwLTEuMi4zLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1Iei9tck53aXROUmgvSFVBdE0vVlQvNVZIK3lnRDZEVjdtWUtaQXRIT3JiczhVN2x2UFM2eGY3RUpLTUYwdVcxS0pDbDBINzAxZzNaR3VzK211RTV2UT09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAid3JhcC1hbnNpIjogewotICAgICAgInZlcnNpb24iOiAiNi4yLjAiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dyYXAtYW5zaS8tL3dyYXAtYW5zaS02LjIuMC50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItcjZsUGNCR3haWGxJY3ltRXU3SW54RE1oZFcwS0R4cExnb0ZMY2d1YXN4Q2FKL1NPSVp3SU5hdEs5S1kvdGYrWnJseXdPS1UwVURqM0FUWFVCZnhKWEE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImFuc2ktc3R5bGVzIjogIl40LjAuMCIsCi0gICAgICAgICJzdHJpbmctd2lkdGgiOiAiXjQuMS4wIiwKLSAgICAgICAgInN0cmlwLWFuc2kiOiAiXjYuMC4wIgotICAgICAgfQotICAgIH0sCi0gICAgIndyYXBweSI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjEuMC4yIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy93cmFwcHkvLS93cmFwcHktMS4wLjIudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhMS10U1E5ano3QnFqWHhOa1lGdkEwUU51TUt0cDg9IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAid3JpdGUtZmlsZS1hdG9taWMiOiB7Ci0gICAgICAidmVyc2lvbiI6ICIzLjAuMyIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd3JpdGUtZmlsZS1hdG9taWMvLS93cml0ZS1maWxlLWF0b21pYy0zLjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItQXZIY3laNUpuU2ZxM2lvU3lqckJrSDl5VzRtN0F5azgvOU15L0REOW9uS2V1Lzk0ZndyTW9jZW1PMlFBSkZBbG5uRE4rWkRTK1pqQVI1dWExL1BWL1E9PSIsCi0gICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICJyZXF1aXJlcyI6IHsKLSAgICAgICAgImltdXJtdXJoYXNoIjogIl4wLjEuNCIsCi0gICAgICAgICJpcy10eXBlZGFycmF5IjogIl4xLjAuMCIsCi0gICAgICAgICJzaWduYWwtZXhpdCI6ICJeMy4wLjIiLAotICAgICAgICAidHlwZWRhcnJheS10by1idWZmZXIiOiAiXjMuMS41IgotICAgICAgfQotICAgIH0sCi0gICAgIndzIjogewotICAgICAgInZlcnNpb24iOiAiNy40LjYiLAotICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtNy40LjYudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLVltaEhETzRNemFETEIrTTl5bS9tREE1ejBuYVg4ajdTSWxUOGY4eitJMFZ0enNSYmVreEV1dEhTbWU3TlBTMnFFOFN0Q1lRTlVuZldkWHRhL1l1ODVBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7fQotICAgIH0sCi0gICAgInhtbC1uYW1lLXZhbGlkYXRvciI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjMuMC4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWwtbmFtZS12YWxpZGF0b3IvLS94bWwtbmFtZS12YWxpZGF0b3ItMy4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLUE1Q1VwdHhEc3Z4S0pFVTN5TzZEdVdCU0p6L3FpenF6SktPTUlmVUpIRVRiQncvc0ZhRHhnZDZmeG0xZXdVYU0walo0NDRGYzV2QzVST1l1cmcvNFB3PT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ4bWxjaGFycyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjIuMi4wIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy94bWxjaGFycy8tL3htbGNoYXJzLTIuMi4wLnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1KWm5ES0s4QjBSQ0R3ODRGTmREQUlwWksrSnVKdytzN0x6OG5rc0k3U0l1VTNVWEpKc2xVdGhzaSt1V0JVWU93UEZ3VzdXN1BSTFJmVUtweGp0akZDdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfSwKLSAgICAieTE4biI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjQuMC4zIiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95MThuLy0veTE4bi00LjAuMy50Z3oiLAotICAgICAgImludGVncml0eSI6ICJzaGE1MTItSktocVRPd1NycU5BMU5ZNWxTenRKMUdyQmlVb2RMTW1JWnVMaURhTVJKK2l0RmQrQUJWRThYQmpPdklXTCtyU3FOREM3NExDU0ZtbGIvVTRVWjRoSlE9PSIsCi0gICAgICAiZGV2IjogdHJ1ZQotICAgIH0sCi0gICAgInlhbGxpc3QiOiB7Ci0gICAgICAidmVyc2lvbiI6ICI0LjAuMCIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFsbGlzdC8tL3lhbGxpc3QtNC4wLjAudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLTN3ZEdpZFp5cTVQQjA4NFhMRVM1VHBPU1JBM3dqWEFsSVdNaHVtMmtSY3YvNDFTbjJlbVEwZHljUVc0dVpYTGVqd0t2ZzZFc3ZiZGxWTCtGWUVjdDdBPT0iLAotICAgICAgImRldiI6IHRydWUKLSAgICB9LAotICAgICJ5YXJncyI6IHsKLSAgICAgICJ2ZXJzaW9uIjogIjE1LjQuMSIsCi0gICAgICAicmVzb2x2ZWQiOiAiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcveWFyZ3MvLS95YXJncy0xNS40LjEudGd6IiwKLSAgICAgICJpbnRlZ3JpdHkiOiAic2hhNTEyLWFlUGJ4RG1jWVcrK1BhcUJzSitIWVVGd0NkdjRMVnZkbmhCeTc4RTU3UElvcjgvT1Z2aE1yQURGRkVEaDhESERGUnYvTzlpM2xQaHNFTmpPN1FYMCtBPT0iLAotICAgICAgImRldiI6IHRydWUsCi0gICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICJjbGl1aSI6ICJeNi4wLjAiLAotICAgICAgICAiZGVjYW1lbGl6ZSI6ICJeMS4yLjAiLAotICAgICAgICAiZmluZC11cCI6ICJeNC4xLjAiLAotICAgICAgICAiZ2V0LWNhbGxlci1maWxlIjogIl4yLjAuMSIsCi0gICAgICAgICJyZXF1aXJlLWRpcmVjdG9yeSI6ICJeMi4xLjEiLAotICAgICAgICAicmVxdWlyZS1tYWluLWZpbGVuYW1lIjogIl4yLjAuMCIsCi0gICAgICAgICJzZXQtYmxvY2tpbmciOiAiXjIuMC4wIiwKLSAgICAgICAgInN0cmluZy13aWR0aCI6ICJeNC4yLjAiLAotICAgICAgICAid2hpY2gtbW9kdWxlIjogIl4yLjAuMCIsCi0gICAgICAgICJ5MThuIjogIl40LjAuMCIsCi0gICAgICAgICJ5YXJncy1wYXJzZXIiOiAiXjE4LjEuMiIKLSAgICAgIH0sCi0gICAgICAiZGVwZW5kZW5jaWVzIjogewotICAgICAgICAieWFyZ3MtcGFyc2VyIjogewotICAgICAgICAgICJ2ZXJzaW9uIjogIjE4LjEuMyIsCi0gICAgICAgICAgInJlc29sdmVkIjogImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3lhcmdzLXBhcnNlci8tL3lhcmdzLXBhcnNlci0xOC4xLjMudGd6IiwKLSAgICAgICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1vNTBqMEplVG95LzRLNk9aY2FRbVc2bHlYWEtocTdjc1JFWGNEd2syb21GUEpFd1VOT1Z0Skt2bURyOUVJMWZBSlpVeVpjUkY3a3hHQldtUlh1ZHJDUT09IiwKLSAgICAgICAgICAiZGV2IjogdHJ1ZSwKLSAgICAgICAgICAicmVxdWlyZXMiOiB7Ci0gICAgICAgICAgICAiY2FtZWxjYXNlIjogIl41LjAuMCIsCi0gICAgICAgICAgICAiZGVjYW1lbGl6ZSI6ICJeMS4yLjAiCi0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSwKLSAgICAieWFyZ3MtcGFyc2VyIjogewotICAgICAgInZlcnNpb24iOiAiMjAuMi43IiwKLSAgICAgICJyZXNvbHZlZCI6ICJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy95YXJncy1wYXJzZXIvLS95YXJncy1wYXJzZXItMjAuMi43LnRneiIsCi0gICAgICAiaW50ZWdyaXR5IjogInNoYTUxMi1GaU5rdmJlSHpCL3N5T2pJVXhGRENuaFNmekFMOFI1dnM0ME1nTEZCb3JYQUNDT0FFYVd1MGdSWmwxNHZHOE1SOUFPSklaYm1ramh1c3FCWVozSFRIdz09IiwKLSAgICAgICJkZXYiOiB0cnVlCi0gICAgfQotICB9Ci19CmRpZmYgLS1naXQgYS9ncmVtbGludC9wYWNrYWdlLmpzb24gYi9ncmVtbGludC9wYWNrYWdlLmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZThiY2IuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbnQvcGFja2FnZS5qc29uCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotewotICAibmFtZSI6ICJncmVtbGludCIsCi0gICJ2ZXJzaW9uIjogIjMuOC4yLWFscGhhMSIsCi0gICJkZXNjcmlwdGlvbiI6ICJMaW50ZXIvY29kZSBmb3JtYXR0ZXIgZm9yIEdyZW1saW4iLAotICAibWFpbiI6ICJsaWIvaW5kZXguanMiLAotICAidHlwZXMiOiAibGliL2luZGV4LmQudHMiLAotICAic2NyaXB0cyI6IHsKLSAgICAiYnVpbGQiOiAidHNjIiwKLSAgICAiZm9ybWF0IjogInByZXR0aWVyIC0td3JpdGUgXCJzcmMvKiovKi50c1wiIiwKLSAgICAibGludCI6ICJ0c2xpbnQgLXAgdHNjb25maWcuanNvbiIsCi0gICAgInRlc3QiOiAiamVzdCAtLWNvbmZpZyBqZXN0Y29uZmlnLmpzb24iLAotICAgICJwcmVwYXJlIjogIm5wbSBydW4gYnVpbGQiLAotICAgICJwcmVwdWJsaXNoT25seSI6ICJucG0gdGVzdCAmJiBucG0gcnVuIGxpbnQiLAotICAgICJwcmV2ZXJzaW9uIjogIm5wbSBydW4gbGludCIsCi0gICAgInZlcnNpb24iOiAibnBtIHJ1biBmb3JtYXQgJiYgZ2l0IGFkZCAtQSBzcmMiLAotICAgICJwb3N0dmVyc2lvbiI6ICJnaXQgcHVzaCAmJiBnaXQgcHVzaCAtLXRhZ3MiCi0gIH0sCi0gICJyZXBvc2l0b3J5IjogewotICAgICJ0eXBlIjogImdpdCIsCi0gICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcC5naXQiCi0gIH0sCi0gICJrZXl3b3JkcyI6IFsKLSAgICAiY29kZSIsCi0gICAgImZvcm1hdHRlciIsCi0gICAgImdyYXBoIiwKLSAgICAiZ3JhcGhkYiIsCi0gICAgInRpbmtlcnBvcCIsCi0gICAgImdyZW1saW4iLAotICAgICJxdWVyeSIKLSAgXSwKLSAgImF1dGhvciI6ICLDmHl2aW5kIFPDpmLDuCIsCi0gICJsaWNlbnNlIjogIkFwYWNoZS0yLjAiLAotICAiYnVncyI6IHsKLSAgICAidXJsIjogImh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvVElOS0VSUE9QIgotICB9LAotICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy8iLAotICAiZGV2RGVwZW5kZW5jaWVzIjogewotICAgICJAdHlwZXMvamVzdCI6ICJeMjcuNS4wIiwKLSAgICAiQHR5cGVzL25vZGUiOiAiXjIyLjUuMSIsCi0gICAgImplc3QiOiAiXjI2LjYuMSIsCi0gICAgInByZXR0aWVyIjogIl4zLjAuMCIsCi0gICAgInRzLWplc3QiOiAiXjI2LjQuMiIsCi0gICAgInRzbGludCI6ICJeNi4xLjMiLAotICAgICJ0c2xpbnQtY29uZmlnLXByZXR0aWVyIjogIl4xLjE4LjAiLAotICAgICJ0eXBlc2NyaXB0IjogIl40LjcuNCIKLSAgfSwKLSAgImZpbGVzIjogWwotICAgICJsaWIvKiovKiIKLSAgXSwKLSAgImVuZ2luZXMiOiB7Ci0gICAgIm5vZGUiOiAiPj0yMCIKLSAgfQotfQpkaWZmIC0tZ2l0IGEvZ3JlbWxpbnQvcG9tLnhtbCBiL2dyZW1saW50L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTU0MWYuLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbnQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKLSAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+Z3JlbWxpbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBHcmVtbGludDwvbmFtZT4KLSAgICA8cHJvcGVydGllcz4KLSAgICAgICAgPG1hdmVuLnRlc3Quc2tpcD5mYWxzZTwvbWF2ZW4udGVzdC5za2lwPgotICAgICAgICA8c2tpcFRlc3RzPiR7bWF2ZW4udGVzdC5za2lwfTwvc2tpcFRlc3RzPgotICAgIDwvcHJvcGVydGllcz4KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS90YXJnZXQ8L2RpcmVjdG9yeT4KLSAgICAgICAgPGZpbmFsTmFtZT4ke3Byb2plY3QuYXJ0aWZhY3RJZH0tJHtwcm9qZWN0LnZlcnNpb259PC9maW5hbE5hbWU+Ci0gICAgICAgIDxwbHVnaW5NYW5hZ2VtZW50PgotICAgICAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5laXJzbGV0dDwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjE1LjA8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8L3BsdWdpbnM+Ci0gICAgICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDwhLS0KLSAgICAgICAgICAgICAgICBVc2UgZ21hdmVucGx1cy1wbHVnaW4gdG86Ci0gICAgICAgICAgICAgICAgICAgIC0gVXBkYXRlIHZlcnNpb24gbnVtYmVyCi0gICAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLmdtYXZlbnBsdXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z21hdmVucGx1cy1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eS1hbGw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnVwZGF0ZS12ZXJzaW9uPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5leGVjdXRlPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0aWVzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5wcm9qZWN0QmFzZURpcjwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYmFzZWRpcn08L3ZhbHVlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5tYXZlblZlcnNpb248L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LnZlcnNpb259PC92YWx1ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnRpZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgdmVyc2lvbkZvckpzID0gbWF2ZW5WZXJzaW9uLnJlcGxhY2UoIi1TTkFQU0hPVCIsICItYWxwaGExIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBwbGF0Zm9ybUFnbm9zdGljQmFzZURpclBhdGggPSBwcm9qZWN0LmJhc2VkaXIuZ2V0QWJzb2x1dGVQYXRoKCkucmVwbGFjZSgiXFwiLCIvIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBmaWxlID0gbmV3IEZpbGUocGxhdGZvcm1BZ25vc3RpY0Jhc2VEaXJQYXRoICsgIi9wYWNrYWdlLmpzb24iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlLmdldFRleHQoIlVURi04IikucmVwbGFjZUZpcnN0KC8idmVyc2lvbiI6ICIoLiopIiwvLCAiXCJ2ZXJzaW9uXCI6IFwiIiArIHZlcnNpb25Gb3JKcyArICJcIiwiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jbGVhbjwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmZyb250ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5pbnN0YWxsIG5vZGUgYW5kIG5wbTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtcmVzb3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5pbnN0YWxsLW5vZGUtYW5kLW5wbTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBpbnN0YWxsPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPmNpPC9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSB0ZXN0PC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ucG08L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+JHtza2lwVGVzdHN9PC9za2lwPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmd1bWVudHM+dGVzdCAtLWV4aXQ8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFpbE9uRXJyb3I+dHJ1ZTwvZmFpbE9uRXJyb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPG5vZGVWZXJzaW9uPiR7cnVudGltZS5ub2RlLnZlcnNpb259PC9ub2RlVmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPG5wbVZlcnNpb24+JHtydW50aW1lLm5wbS52ZXJzaW9ufTwvbnBtVmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDwhLS0KLSAgICAgICAgICAgIHRoZXJlIGlzIG5vIHBvaW50IHRvIGJ1aWxkaW5nL2RlcGxveWluZyB0aGUganZtIHN0dWZmIC0gdGhlcmUgaXMgbm8gamF2YSBzb3VyY2UgcmVhbGx5IC0ganVzdCBwb21zCi0gICAgICAgICAgICAtLT4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphdmFkb2MtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc291cmNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXBTb3VyY2U+dHJ1ZTwvc2tpcFNvdXJjZT4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWluc3RhbGwtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8c2tpcD50cnVlPC9za2lwPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0gICAgPHByb2ZpbGVzPgotICAgICAgICA8IS0tCi0gICAgICAgIFByb3ZpZGVzIGEgd2F5IHRvIGRlcGxveSBncmVtbGludCB0byBucG0uIFRoaXMgY2Fubm90IGJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG1hdmVuIGV4ZWN1dGlvbgotICAgICAgICBiZWNhdXNlIG5wbSBkb2VzIG5vdCBoYXZlIGEgc3RhZ2luZyBlbnZpcm9ubWVudCBsaWtlIHNvbmF0eXBlIGZvciByZWxlYXNlcy4gQXMgc29vbiBhcyB0aGUgcmVsZWFzZSBpcwotICAgICAgICBwdWJsaXNoZWQgaXQgaXMgcHVibGljLiBJbiBvdXIgcmVsZWFzZSB3b3JrZmxvdywgZGVwbG95IG9jY3VycyBwcmlvciB0byB2b3RlIG9uIHRoZSByZWxlYXNlIGFuZCB3ZSBjYW4ndAotICAgICAgICBtYWtlIHRoaXMgc3R1ZmYgcHVibGljIHVudGlsIHRoZSB2b3RlIGlzIG92ZXIuCi0gICAgICAgIC0tPgotICAgICAgICA8cHJvZmlsZT4KLSAgICAgICAgICAgIDxpZD5ncmVtbGludC1kZXBsb3k8L2lkPgotICAgICAgICAgICAgPGFjdGl2YXRpb24+Ci0gICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD5mYWxzZTwvYWN0aXZlQnlEZWZhdWx0PgotICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgPG5hbWU+bnBtPC9uYW1lPgotICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICA8L2FjdGl2YXRpb24+Ci0gICAgICAgICAgICA8YnVpbGQ+Ci0gICAgICAgICAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmVpcnNsZXR0PC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZnJvbnRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm5wbSBwdWJsaXNoPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmRlcGxveTwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm5wbTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJndW1lbnRzPnB1Ymxpc2g8L2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgbmVlZHMgdG8gYmUgb3ZlcnJpZGRlbiBnaXZlbiBob3cgdGhlIDxjb25maWd1cmF0aW9uPiBpcyBzcGVjaWZpZWQgaW4gdGhlIG1haW4gYnVpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgc2hvdWxkIGJlIGZpbmUgdG8ganVzdCBhbHdheXMgZGVwbG95IGJlY2F1c2UgdGhpcyA8cHJvZmlsZT4gbmVlZHMgdG8gYmUgbWFudWFsbHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZWQgYW5kIHRoYXQgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGdpdmVuIG91ciBkZXBsb3ltZW50IHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vZGVWZXJzaW9uPiR7cnVudGltZS5ub2RlLnZlcnNpb259PC9ub2RlVmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bnBtVmVyc2lvbj4ke3J1bnRpbWUubnBtLnZlcnNpb259PC9ucG1WZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgICAgICA8L3BsdWdpbnM+Ci0gICAgICAgICAgICA8L2J1aWxkPgotICAgICAgICA8L3Byb2ZpbGU+Ci0gICAgPC9wcm9maWxlcz4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2dyZW1saW50L3RzbGludC5qc29uIGIvZ3JlbWxpbnQvdHNsaW50Lmpzb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NjFiZTguLjAwMDAwMDAKLS0tIGEvZ3JlbWxpbnQvdHNsaW50Lmpzb24KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLXsKLSAgImV4dGVuZHMiOiBbInRzbGludDpyZWNvbW1lbmRlZCIsICJ0c2xpbnQtY29uZmlnLXByZXR0aWVyIl0sCi0gICJydWxlcyI6IHsKLSAgICAibm8tc2hhZG93ZWQtdmFyaWFibGUiOiBmYWxzZQotICB9Ci19CmRpZmYgLS1naXQgYS9oYWRvb3AtZ3JlbWxpbi9SRUFETUUubWQgYi9oYWRvb3AtZ3JlbWxpbi9SRUFETUUubWQKaW5kZXggZmZjZWYyOC4uY2E3NTZhYSAxMDA2NDQKLS0tIGEvaGFkb29wLWdyZW1saW4vUkVBRE1FLm1kCisrKyBiL2hhZG9vcC1ncmVtbGluL1JFQURNRS5tZApAQCAtMSw1MiArMSw1MiBAQAotPCEtLQ0KLSBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotDQotIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLQ0KLSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSB1bmRlciB0aGUgTGljZW5zZS4NCi0tLT4NCi0NCi1QcmVyZXF1aXNpdGVzDQotPT09PT09PT09PT09PQ0KLQ0KLUZvbGxvdyB0aGUgW2luc3RhbGxhdGlvbiBwcm9jZWR1cmVdKGh0dHBzOi8vZGV2LnRvL2F3d3NtbS9pbnN0YWxsaW5nLWFuZC1ydW5uaW5nLWhhZG9vcC1hbmQtc3Bhcmstb24td2luZG93cy0zM2tjKSB0byBzZXQgdXA6DQotDQotKiBIYWRvb3AgMi43LjIgaW5zdGFsbGVkIFtmcm9tIEFwYWNoZSBIYWRvb3AgZG93bmxvYWQgYXJjaGl2ZV0oaHR0cDovL2FyY2hpdmUuYXBhY2hlLm9yZy9kaXN0L2hhZG9vcC9jb21tb24vaGFkb29wLTIuNy4yL2hhZG9vcC0yLjcuMi50YXIuZ3opDQotKiBTcGFyayAyLjQuMyBpbnN0YWxsZWQgW2Zyb20gQXBhY2hlIFNwYXJrIHByb2plY3RdKGh0dHBzOi8vc3BhcmsuYXBhY2hlLm9yZy9kb3dubG9hZHMuaHRtbCkNCi0qIEZvciBXaW5kb3dzIHBsYXRmb3JtcyBuZWVkZWQgaXMgYWxzbyBzcGVjaWZpYyBpbnRlZ3JhdGlvbjoNCi0gICAgKiBbZG93bmxvYWQgZnJvbV0oaHR0cHM6Ly9naXRodWIuY29tL3N0ZXZlbG91Z2hyYW4vd2ludXRpbHMpDQotICAgICogW21vcmUgZGV0YWlsc10oaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9IQURPT1AyL1dpbmRvd3NQcm9ibGVtcykNCi0NCi1TZXQgdXAgSEFET09QX0dSRU1MSU5fTElCUyBPUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBvZiBbVGlua2VyUG9wIERvY3VtZW50YXRpb25dKGh0dHA6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvcmVmZXJlbmNlLyNoYWRvb3AtZ3JlbWxpbikuDQotDQotTk9URTogSEFET09QX0dSRU1MSU5fTElCUz0qPGhhZG9vcCBpbnN0YWxsYXRpb24gZGlyPiovc2hhcmUvaGFkb29wL2NvbW1vbi9saWIgc2VlbXMgZ29vZCBlbm91Z2gNCi0NCi0NCi1FbnZpcm9ubWVudCBWYXJpYWJsZXMgU2V0DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1UaGUgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBzaG91bGQgaGF2ZSBzZXQgdXAgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlczoNCi0qIEhBRE9PUF9IT01FDQotKiBTUEFSS19IT01FDQotKiBIQURPT1BfR1JFTUxJTl9MSUJTDQotKiBQQVRIIGluY2x1ZGluZyB0aGUgSEFET09QX0hPTUUgYW5kIFNQQVJLX0hPTUUgDQotDQotDQotVmVyaWZ5IHRoZSBpbnN0YWxsZWQgdmVyc2lvbnMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLU9uIHRoZSBjb21tYW5kIGxpbmUgcnVuOg0KLQ0KLSAgICBoYWRvb3AgdmVyc2lvbg0KKzwhLS0KK0xpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK29yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK3JlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3RvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCitzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCitQcmVyZXF1aXNpdGVzCis9PT09PT09PT09PT09CisKK0ZvbGxvdyB0aGUgW2luc3RhbGxhdGlvbiBwcm9jZWR1cmVdKGh0dHBzOi8vZGV2LnRvL2F3d3NtbS9pbnN0YWxsaW5nLWFuZC1ydW5uaW5nLWhhZG9vcC1hbmQtc3Bhcmstb24td2luZG93cy0zM2tjKSB0byBzZXQgdXA6CisKKyogSGFkb29wIDIuNy4yIGluc3RhbGxlZCBbZnJvbSBBcGFjaGUgSGFkb29wIGRvd25sb2FkIGFyY2hpdmVdKGh0dHA6Ly9hcmNoaXZlLmFwYWNoZS5vcmcvZGlzdC9oYWRvb3AvY29tbW9uL2hhZG9vcC0yLjcuMi9oYWRvb3AtMi43LjIudGFyLmd6KQorKiBTcGFyayAyLjQuMyBpbnN0YWxsZWQgW2Zyb20gQXBhY2hlIFNwYXJrIHByb2plY3RdKGh0dHBzOi8vc3BhcmsuYXBhY2hlLm9yZy9kb3dubG9hZHMuaHRtbCkKKyogRm9yIFdpbmRvd3MgcGxhdGZvcm1zIG5lZWRlZCBpcyBhbHNvIHNwZWNpZmljIGludGVncmF0aW9uOgorICAgICogW2Rvd25sb2FkIGZyb21dKGh0dHBzOi8vZ2l0aHViLmNvbS9zdGV2ZWxvdWdocmFuL3dpbnV0aWxzKQorICAgICogW21vcmUgZGV0YWlsc10oaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9IQURPT1AyL1dpbmRvd3NQcm9ibGVtcykKKworU2V0IHVwIEhBRE9PUF9HUkVNTElOX0xJQlMgT1MgZW52aXJvbm1lbnQgdmFyaWFibGUgYXMgb2YgW1RpbmtlclBvcCBEb2N1bWVudGF0aW9uXShodHRwOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L3JlZmVyZW5jZS8jaGFkb29wLWdyZW1saW4pLgorCitOT1RFOiBIQURPT1BfR1JFTUxJTl9MSUJTPSo8aGFkb29wIGluc3RhbGxhdGlvbiBkaXI+Ki9zaGFyZS9oYWRvb3AvY29tbW9uL2xpYiBzZWVtcyBnb29kIGVub3VnaAorCisKK0Vudmlyb25tZW50IFZhcmlhYmxlcyBTZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbnN0YWxsYXRpb24gcHJvY2VkdXJlIHNob3VsZCBoYXZlIHNldCB1cCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzOgorKiBIQURPT1BfSE9NRQorKiBTUEFSS19IT01FCisqIEhBRE9PUF9HUkVNTElOX0xJQlMKKyogUEFUSCBpbmNsdWRpbmcgdGhlIEhBRE9PUF9IT01FIGFuZCBTUEFSS19IT01FIAorCisKK1ZlcmlmeSB0aGUgaW5zdGFsbGVkIHZlcnNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbiB0aGUgY29tbWFuZCBsaW5lIHJ1bjoKKworICAgIGhhZG9vcCB2ZXJzaW9uCiAgICAgc3Bhcmstc2hlbGwgLS12ZXJzaW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaGFkb29wLWdyZW1saW4vcG9tLnhtbCBiL2hhZG9vcC1ncmVtbGluL3BvbS54bWwKaW5kZXggMWU0YzI1MS4uODNjMWRhOCAxMDA2NDQKLS0tIGEvaGFkb29wLWdyZW1saW4vcG9tLnhtbAorKysgYi9oYWRvb3AtZ3JlbWxpbi9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPmhhZG9vcC1ncmVtbGluPC9hcnRpZmFjdElkPgogICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogSGFkb29wIEdyZW1saW48L25hbWU+CkBAIC01Miw2ICs1MiwxOCBAQAogICAgICAgICAgICAgPHZlcnNpb24+JHtoYWRvb3AudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHBjb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5qbGluZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amxpbmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLnJlbG9hZDRqPC9ncm91cElkPgogICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5yZWxvYWQ0ajwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KQEAgLTYwLDYgKzcyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1YXZhPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtYmVhbnV0aWxzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWJlYW51dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxvZ2dpbmc8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbG9nZ2luZzwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KQEAgLTEwMSw2ICsxMTcsMjAgQEAKICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8IS0tIGhhZG9vcC1jbGllbnQgY29uZmxpY3QgcmVzb2x1dGlvbiAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aHR0cGNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuNC4xNjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5qbGluZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpsaW5lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+My4yMi4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLnJlbG9hZDRqPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+cmVsb2FkNGo8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4xLjIuMTk8L3ZlcnNpb24+CkBAIC0xMjgsMTcgKzE1OCwxMiBAQAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNvbS5uaW1idXNkczwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPm5pbWJ1cy1qb3NlLWp3dDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjkuOC4xPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5ndWF2YTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1YXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MjcuMC1qcmU8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj45LjMwLjE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxvZ2dpbmc8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxvZ2dpbmc8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjI8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjMuNDwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8IS0tIHVzZSBqYWNrc29uIDIuMTMuNSB0byBmaXQgYmV0dGVyIHdpdGggc3Bhcmsgd2hlcmUgU2NhbGEgbW9kdWxlIDIuMTMuNCByZXF1aXJlcyBKYWNrc29uIERhdGFiaW5kIHZlcnNpb24gPj0gMi4xMy4wIGFuZCA8IDIuMTQuMCAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC0xNTYsOCArMTgxLDE4IEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4xMy41PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5pbmplY3Q8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ndWljZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8IS0tIFRFU1QgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y2gucW9zLmxvZ2JhY2s8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5sb2diYWNrLWNsYXNzaWM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tdGVzdDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KQEAgLTE2OSwxOCArMjA0LDYgQEAKICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuaW5qZWN0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3VpY2U8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjIuMzwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuZ3VhdmE8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1YXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgPC9leGNsdXNpb25zPgotICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgPGJ1aWxkPgogICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0PC9kaXJlY3Rvcnk+CmRpZmYgLS1naXQgYS9oYWRvb3AtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL2pzcjIyMy9IYWRvb3BHcmVtbGluUGx1Z2luLmphdmEgYi9oYWRvb3AtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL2pzcjIyMy9IYWRvb3BHcmVtbGluUGx1Z2luLmphdmEKaW5kZXggYWRiMGIzMS4uODM5ZTA2YyAxMDA2NDQKLS0tIGEvaGFkb29wLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9qc3IyMjMvSGFkb29wR3JlbWxpblBsdWdpbi5qYXZhCisrKyBiL2hhZG9vcC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3AvanNyMjIzL0hhZG9vcEdyZW1saW5QbHVnaW4uamF2YQpAQCAtNTUsMTQgKzU1LDEwIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuRGVmYXVsdEltcG9ydEN1c3RvbWl6ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuSW1wb3J0Q3VzdG9taXplcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5MYXp5QmluZGluZ3NDdXN0b21pemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuQ29uc29sZUN1c3RvbWl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5HcmVtbGluU2hlbGxFbnZpcm9ubWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLlJlbW90ZUFjY2VwdG9yOwogCiBpbXBvcnQgamF2YXguc2NyaXB0LkJpbmRpbmdzOwogaW1wb3J0IGphdmF4LnNjcmlwdC5TaW1wbGVCaW5kaW5nczsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKQEAgLTEzMyw3ICsxMjksNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEhhZG9vcEdyZW1saW5QbHVnaW4gcGx1Z2luID0gbmV3IEhhZG9vcEdyZW1saW5QbHVnaW4oKTsKIAogICAgIHB1YmxpYyBIYWRvb3BHcmVtbGluUGx1Z2luKCkgewotICAgICAgICBzdXBlcihOQU1FLCBhcHBsaWVzVG8sIGltcG9ydHMsIGJpbmRpbmdzLCBuZXcgSGFkb29wQ29uc29sZUN1c3RvbWl6ZXIoKSk7CisgICAgICAgIHN1cGVyKE5BTUUsIGFwcGxpZXNUbywgaW1wb3J0cywgYmluZGluZ3MpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTU0LDExICsxNTAsNCBAQAogICAgIHB1YmxpYyBzdGF0aWMgSGFkb29wR3JlbWxpblBsdWdpbiBpbnN0YW5jZSgpIHsKICAgICAgICAgcmV0dXJuIHBsdWdpbjsKICAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBIYWRvb3BDb25zb2xlQ3VzdG9taXplciBpbXBsZW1lbnRzIENvbnNvbGVDdXN0b21pemVyIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBSZW1vdGVBY2NlcHRvciBnZXRSZW1vdGVBY2NlcHRvcihmaW5hbCBHcmVtbGluU2hlbGxFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBIYWRvb3BSZW1vdGVBY2NlcHRvcihlbnZpcm9ubWVudCk7Ci0gICAgICAgIH0KLSAgICB9CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaGFkb29wLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9qc3IyMjMvSGFkb29wUmVtb3RlQWNjZXB0b3IuamF2YSBiL2hhZG9vcC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3AvanNyMjIzL0hhZG9vcFJlbW90ZUFjY2VwdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZjQ5NWQuLjAwMDAwMDAKLS0tIGEvaGFkb29wLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9qc3IyMjMvSGFkb29wUmVtb3RlQWNjZXB0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmhhZG9vcC5qc3IyMjM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmdyb292eS5sb2FkZXJzLlN1Z2FyTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uaGFkb29wLnN0cnVjdHVyZS5IYWRvb3BHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5jb25zb2xlLkdyZW1saW5TaGVsbEVudmlyb25tZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLmNvbnNvbGUuUmVtb3RlQWNjZXB0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuY29uc29sZS5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkNvbXB1dGVyUmVzdWx0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci50cmF2ZXJzYWwuVHJhdmVyc2FsVmVydGV4UHJvZ3JhbTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0ZXAubWFwLkNvbXB1dGVyUmVzdWx0U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVmVydGV4UHJvZ3JhbVN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkVtcHR5U3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRGVmYXVsdFRyYXZlcnNhbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgSGFkb29wUmVtb3RlQWNjZXB0b3IgaW1wbGVtZW50cyBSZW1vdGVBY2NlcHRvciB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX1NVR0FSID0gInVzZVN1Z2FyIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFX1RSQVZFUlNBTF9TT1VSQ0UgPSAidXNlVHJhdmVyc2FsU291cmNlIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVMUCA9ICJoZWxwIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BBQ0UgPSAiICI7Ci0KLSAgICBwcml2YXRlIEhhZG9vcEdyYXBoIGhhZG9vcEdyYXBoOwotICAgIHByaXZhdGUgR3JlbWxpblNoZWxsRW52aXJvbm1lbnQgc2hlbGxFbnZpcm9ubWVudDsKLSAgICBwcml2YXRlIGJvb2xlYW4gdXNlU3VnYXIgPSBmYWxzZTsKLSAgICBwcml2YXRlIFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWxTb3VyY2U7Ci0KLSAgICBwdWJsaWMgSGFkb29wUmVtb3RlQWNjZXB0b3IoZmluYWwgR3JlbWxpblNoZWxsRW52aXJvbm1lbnQgc2hlbGxFbnZpcm9ubWVudCkgewotICAgICAgICB0aGlzLnNoZWxsRW52aXJvbm1lbnQgPSBzaGVsbEVudmlyb25tZW50OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgY29ubmVjdChmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSAhPSAxICYmIGFyZ3Muc2l6ZSgpICE9IDIpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVzYWdlOiA6cmVtb3RlIGNvbm5lY3QgIiArIEhhZG9vcEdyZW1saW5QbHVnaW4uTkFNRSArICIgPHZhcmlhYmxlIG5hbWUgb2YgZ3JhcGg+IDxvcHRpb25hbCB2YXJpYWJsZSBuYW1lIG9mIHRyYXZlcnNhbCBzb3VyY2U+Iik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5oYWRvb3BHcmFwaCA9IHRoaXMuc2hlbGxFbnZpcm9ubWVudC5nZXRWYXJpYWJsZShhcmdzLmdldCgwKSk7Ci0gICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgdGhpcy50cmF2ZXJzYWxTb3VyY2UgPSB0aGlzLnNoZWxsRW52aXJvbm1lbnQuZ2V0VmFyaWFibGUoYXJncy5nZXQoMSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLnRyYXZlcnNhbFNvdXJjZSA9IHRoaXMuaGFkb29wR3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIC8vLwotICAgICAgICBmaW5hbCBIYXNoTWFwPFN0cmluZywgT2JqZWN0PiBjb25maWd1cmF0aW9uID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBjb25maWd1cmF0aW9uLnB1dChVU0VfU1VHQVIsIHRoaXMudXNlU3VnYXIpOwotICAgICAgICBjb25maWd1cmF0aW9uLnB1dChVU0VfVFJBVkVSU0FMX1NPVVJDRSwgdGhpcy50cmF2ZXJzYWxTb3VyY2UpOwotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTWFwKGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgY29uZmlndXJlKGZpbmFsIExpc3Q8U3RyaW5nPiBhcmdzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJncy5nZXQoMCkuZXF1YWxzKEhFTFApKQotICAgICAgICAgICAgcmV0dXJuICI6cmVtb3RlIGNvbmZpZyBbdXNlU3VnYXIgW3RydWV8ZmFsc2VdfHVzZVRyYXZlcnNhbFNvdXJjZSA8dHJhdmVyc2FsU291cmNlTmFtZT58aGVscF0iOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5zaXplKCk7IGkgPSBpICsgMikgewotICAgICAgICAgICAgaWYgKGFyZ3MuZ2V0KGkpLmVxdWFscyhVU0VfU1VHQVIpKQotICAgICAgICAgICAgICAgIHRoaXMudXNlU3VnYXIgPSBCb29sZWFuLnZhbHVlT2YoYXJncy5nZXQoaSArIDEpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3MuZ2V0KGkpLmVxdWFscyhVU0VfVFJBVkVSU0FMX1NPVVJDRSkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnRyYXZlcnNhbFNvdXJjZSA9IHRoaXMuc2hlbGxFbnZpcm9ubWVudC5nZXRWYXJpYWJsZShhcmdzLmdldChpICsgMSkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24gaXMgdW5rbm93bjogIiArIGFyZ3MuZ2V0KGkpICsgIjoiICsgYXJncy5nZXQoaSArIDEpKTsKLSAgICAgICAgfQotICAgICAgICAvLy8KLSAgICAgICAgZmluYWwgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4gY29uZmlndXJhdGlvbiA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgY29uZmlndXJhdGlvbi5wdXQoVVNFX1NVR0FSLCB0aGlzLnVzZVN1Z2FyKTsKLSAgICAgICAgY29uZmlndXJhdGlvbi5wdXQoVVNFX1RSQVZFUlNBTF9TT1VSQ0UsIHRoaXMudHJhdmVyc2FsU291cmNlKTsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHN1Ym1pdChmaW5hbCBMaXN0PFN0cmluZz4gYXJncykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmcgc2NyaXB0ID0gZ2V0U2NyaXB0KFN0cmluZy5qb2luKFNQQUNFLCBhcmdzKSwgdGhpcy5zaGVsbEVudmlyb25tZW50KTsKLSAgICAgICAgICAgIGlmICh0aGlzLnVzZVN1Z2FyKQotICAgICAgICAgICAgICAgIHNjcmlwdCA9IFN1Z2FyTG9hZGVyLmNsYXNzLmdldENhbm9uaWNhbE5hbWUoKSArICIubG9hZCgpXG4iICsgc2NyaXB0OwotICAgICAgICAgICAgZmluYWwgVHJhdmVyc2FsVmVydGV4UHJvZ3JhbSBwcm9ncmFtID0gVHJhdmVyc2FsVmVydGV4UHJvZ3JhbS5idWlsZCgpLnRyYXZlcnNhbCh0aGlzLnRyYXZlcnNhbFNvdXJjZSwgImdyZW1saW4tZ3Jvb3Z5Iiwgc2NyaXB0KS5jcmVhdGUodGhpcy5oYWRvb3BHcmFwaCk7Ci0gICAgICAgICAgICBmaW5hbCBDb21wdXRlclJlc3VsdCBjb21wdXRlclJlc3VsdCA9IFZlcnRleFByb2dyYW1TdHJhdGVneS5nZXRDb21wdXRlcih0aGlzLnRyYXZlcnNhbFNvdXJjZS5nZXRTdHJhdGVnaWVzKCkpLmdldCgpLmFwcGx5KHRoaXMuaGFkb29wR3JhcGgpLnByb2dyYW0ocHJvZ3JhbSkuc3VibWl0KCkuZ2V0KCk7Ci0gICAgICAgICAgICB0aGlzLnNoZWxsRW52aXJvbm1lbnQuc2V0VmFyaWFibGUoUkVTVUxULCBjb21wdXRlclJlc3VsdCk7Ci0gICAgICAgICAgICAvLy8KLSAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbC5BZG1pbjxDb21wdXRlclJlc3VsdCwgPz4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRUcmF2ZXJzYWw8Pihjb21wdXRlclJlc3VsdC5ncmFwaCgpKTsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBDb21wdXRlclJlc3VsdFN0ZXA8Pih0cmF2ZXJzYWwpKTsKLSAgICAgICAgICAgIHRyYXZlcnNhbC5hZGRTdGFydCh0cmF2ZXJzYWwuZ2V0VHJhdmVyc2VyR2VuZXJhdG9yKCkuZ2VuZXJhdGUoY29tcHV0ZXJSZXN1bHQsIEVtcHR5U3RlcC5pbnN0YW5jZSgpLCAxbCkpOwotICAgICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgICAgICAgfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBhbGxvd1JlbW90ZUNvbnNvbGUoKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5oYWRvb3BHcmFwaC5jbG9zZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlIGEgc2NyaXB0IGFzIGRlZmluZWQgaW4gdGhlIHNoZWxsIGNvbnRleHQuICBUaGlzIGFsbG93cyBmb3IgbXVsdGktbGluZSBzY3JpcHRzIHRvIGJlIHN1Ym1pdHRlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRTY3JpcHQoZmluYWwgU3RyaW5nIHN1Ym1pdHRlZFNjcmlwdCwgZmluYWwgR3JlbWxpblNoZWxsRW52aXJvbm1lbnQgc2hlbGwpIHsKLSAgICAgICAgcmV0dXJuIHN1Ym1pdHRlZFNjcmlwdC5zdGFydHNXaXRoKCJAIikgPyBzaGVsbC5nZXRWYXJpYWJsZShzdWJtaXR0ZWRTY3JpcHQuc3Vic3RyaW5nKDEpKS50b1N0cmluZygpIDogc3VibWl0dGVkU2NyaXB0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2hhZG9vcC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3Avc3RydWN0dXJlL0hhZG9vcENvbmZpZ3VyYXRpb24uamF2YSBiL2hhZG9vcC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3Avc3RydWN0dXJlL0hhZG9vcENvbmZpZ3VyYXRpb24uamF2YQppbmRleCBmMzlhNTAzLi5iZDBhMTFjIDEwMDY0NAotLS0gYS9oYWRvb3AtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL3N0cnVjdHVyZS9IYWRvb3BDb25maWd1cmF0aW9uLmphdmEKKysrIGIvaGFkb29wLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9zdHJ1Y3R1cmUvSGFkb29wQ29uZmlndXJhdGlvbi5qYXZhCkBAIC00Niw2ICs0NiwxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBib29sZWFuIGNvbnRhaW5zVmFsdWVJbnRlcm5hbChmaW5hbCBPYmplY3QgbykgeworICAgICAgICByZXR1cm4gcHJvcGVydGllcy5jb250YWluc1ZhbHVlKG8pOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCBJdGVyYXRvcjxTdHJpbmc+IGdldEtleXNJbnRlcm5hbCgpIHsKICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsKICAgICB9CmRpZmYgLS1naXQgYS9oYWRvb3AtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL3N0cnVjdHVyZS9IYWRvb3BHcmFwaC5qYXZhIGIvaGFkb29wLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9zdHJ1Y3R1cmUvSGFkb29wR3JhcGguamF2YQppbmRleCAwOGI3MGU1Li5jNDMwNmFhIDEwMDY0NAotLS0gYS9oYWRvb3AtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL3N0cnVjdHVyZS9IYWRvb3BHcmFwaC5qYXZhCisrKyBiL2hhZG9vcC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3Avc3RydWN0dXJlL0hhZG9vcEdyYXBoLmphdmEKQEAgLTQyLDEzICs0MiwxMCBAQAogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7CiBpbXBvcnQgamF2YS51dGlsLlNwbGl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5TcGxpdGVyYXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uU3RyZWFtU3VwcG9ydDsKIApAQCAtNTYsNTAgKzUzLDggQEAKICAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQogICovCiBAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfU1RSVUNUVVJFX1NUQU5EQVJEKQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfU1RBTkRBUkQpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19DT01QVVRFUikKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0xJTUlURURfU1RBTkRBUkQpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19MSU1JVEVEX0NPTVBVVEVSKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1hdGNoVGVzdCRUcmF2ZXJzYWxzIiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9tYXRjaFhhX2hhc1huYW1lX0dhcmNpYVhfX2FfMHdyaXR0ZW5CeV9iX19hXzBzdW5nQnlfYlgiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gaXMgT0xBUC1vcmllbnRlZCBhbmQgZm9yIE9MVFAgb3BlcmF0aW9ucywgbGluZWFyLXNjYW4gam9pbnMgYXJlIHJlcXVpcmVkLiBUaGlzIHBhcnRpY3VsYXIgdGVzdHMgdGFrZXMgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUuIiwKLSAgICAgICAgY29tcHV0ZXJzID0geyJBTEwifSkKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3QkVHJhdmVyc2FscyIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfbWF0Y2hYYV8wc3VuZ0J5X2JfX2FfMHN1bmdCeV9jX19iX3dyaXR0ZW5CeV9kX19jX3dyaXR0ZW5CeV9lX19kX2hhc1huYW1lX0dlb3JnZV9IYXJpc29uWF9fZV9oYXNYbmFtZV9Cb2JfTWFybGV5WFgiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gaXMgT0xBUC1vcmllbnRlZCBhbmQgZm9yIE9MVFAgb3BlcmF0aW9ucywgbGluZWFyLXNjYW4gam9pbnMgYXJlIHJlcXVpcmVkLiBUaGlzIHBhcnRpY3VsYXIgdGVzdHMgdGFrZXMgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUuIiwKLSAgICAgICAgY29tcHV0ZXJzID0geyJBTEwifSkKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3QkVHJhdmVyc2FscyIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfbWF0Y2hYYV8wc3VuZ0J5X2JfX2FfMHdyaXR0ZW5CeV9jX19iX3dyaXR0ZW5CeV9kX19jX3N1bmdCeV9kX19kX2hhc1huYW1lX0dhcmNpYVhYIiwKLSAgICAgICAgcmVhc29uID0gIkhhZG9vcC1HcmVtbGluIGlzIE9MQVAtb3JpZW50ZWQgYW5kIGZvciBPTFRQIG9wZXJhdGlvbnMsIGxpbmVhci1zY2FuIGpvaW5zIGFyZSByZXF1aXJlZC4gVGhpcyBwYXJ0aWN1bGFyIHRlc3RzIHRha2VzIG1hbnkgbWludXRlcyB0byBleGVjdXRlLiIsCi0gICAgICAgIGNvbXB1dGVycyA9IHsiQUxMIn0pCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTWF0Y2hUZXN0JFRyYXZlcnNhbHMiLAotICAgICAgICBtZXRob2QgPSAiZ19WX21hdGNoWGFfMHN1bmdCeV9iX19hXzB3cml0dGVuQnlfY19fYl93cml0dGVuQnlfZFhfd2hlcmVYY19zdW5nQnlfZFhfd2hlcmVYZF9oYXNYbmFtZV9HYXJjaWFYWCIsCi0gICAgICAgIHJlYXNvbiA9ICJIYWRvb3AtR3JlbWxpbiBpcyBPTEFQLW9yaWVudGVkIGFuZCBmb3IgT0xUUCBvcGVyYXRpb25zLCBsaW5lYXItc2NhbiBqb2lucyBhcmUgcmVxdWlyZWQuIFRoaXMgcGFydGljdWxhciB0ZXN0cyB0YWtlcyBtYW55IG1pbnV0ZXMgdG8gZXhlY3V0ZS4iLAotICAgICAgICBjb21wdXRlcnMgPSB7IkFMTCJ9KQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvdW50VGVzdCRUcmF2ZXJzYWxzIiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9ib3RoX2JvdGhfY291bnQiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gaXMgT0xBUC1vcmllbnRlZCBhbmQgZm9yIE9MVFAgb3BlcmF0aW9ucywgbGluZWFyLXNjYW4gam9pbnMgYXJlIHJlcXVpcmVkLiBUaGlzIHBhcnRpY3VsYXIgdGVzdHMgdGFrZXMgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUuIiwKLSAgICAgICAgY29tcHV0ZXJzID0geyJBTEwifSkKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db3VudFRlc3QkVHJhdmVyc2FscyIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYM1hfY291bnQiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gaXMgT0xBUC1vcmllbnRlZCBhbmQgZm9yIE9MVFAgb3BlcmF0aW9ucywgbGluZWFyLXNjYW4gam9pbnMgYXJlIHJlcXVpcmVkLiBUaGlzIHBhcnRpY3VsYXIgdGVzdHMgdGFrZXMgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUuIiwKLSAgICAgICAgY29tcHV0ZXJzID0geyJBTEwifSkKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db3VudFRlc3QkVHJhdmVyc2FscyIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYOFhfY291bnQiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gaXMgT0xBUC1vcmllbnRlZCBhbmQgZm9yIE9MVFAgb3BlcmF0aW9ucywgbGluZWFyLXNjYW4gam9pbnMgYXJlIHJlcXVpcmVkLiBUaGlzIHBhcnRpY3VsYXIgdGVzdHMgdGFrZXMgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUuIiwKLSAgICAgICAgY29tcHV0ZXJzID0geyJBTEwifSkKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Db3VudFRlc3QkVHJhdmVyc2FscyIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfcmVwZWF0WG91dFhfdGltZXNYNVhfYXNYYVhfb3V0WHdyaXR0ZW5CeVhfYXNYYlhfc2VsZWN0WGFfYlhfY291bnQiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gaXMgT0xBUC1vcmllbnRlZCBhbmQgZm9yIE9MVFAgb3BlcmF0aW9ucywgbGluZWFyLXNjYW4gam9pbnMgYXJlIHJlcXVpcmVkLiBUaGlzIHBhcnRpY3VsYXIgdGVzdHMgdGFrZXMgbWFueSBtaW51dGVzIHRvIGV4ZWN1dGUuIiwKLSAgICAgICAgY29tcHV0ZXJzID0geyJBTEwifSkKK0BHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0VNQkVEREVEX1NUQU5EQVJEKQorQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfRU1CRURERURfQ09NUFVURVIpCiBAR3JhcGguT3B0T3V0KAogICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvZmlsZVRlc3QkVHJhdmVyc2FscyIsCiAgICAgICAgIG1ldGhvZCA9ICJncmF0ZWZ1bF9WX291dF9vdXRfcHJvZmlsZSIsCkBAIC0xMDksMjYgKzY0LDYgQEAKICAgICAgICAgbWV0aG9kID0gImdyYXRlZnVsX1Zfb3V0X291dF9wcm9maWxlWG1ldHJpY3NYIiwKICAgICAgICAgcmVhc29uID0gIkhhZG9vcC1HcmVtbGluIGlzIE9MQVAtb3JpZW50ZWQgYW5kIGZvciBPTFRQIG9wZXJhdGlvbnMsIGxpbmVhci1zY2FuIGpvaW5zIGFyZSByZXF1aXJlZC4gVGhpcyBwYXJ0aWN1bGFyIHRlc3RzIHRha2VzIG1hbnkgbWludXRlcyB0byBleGVjdXRlLiIpCiBAR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0Lkdyb3VwVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfaGFzTGFiZWxYc29uZ1hfZ3JvdXBYYVhfYnlYbmFtZVhfYnlYcHJvcGVydGllc19ncm91cENvdW50X2J5WGxhYmVsWFhfb3V0X2NhcFhhWCIsCi0gICAgICAgIHJlYXNvbiA9ICJIYWRvb3AtR3JlbWxpbiBpcyBPTEFQLW9yaWVudGVkIGFuZCBmb3IgT0xUUCBvcGVyYXRpb25zLCBsaW5lYXItc2NhbiBqb2lucyBhcmUgcmVxdWlyZWQuIFRoaXMgcGFydGljdWxhciB0ZXN0cyB0YWtlcyBtYW55IG1pbnV0ZXMgdG8gZXhlY3V0ZS4iLAotICAgICAgICBjb21wdXRlcnMgPSB7IkFMTCJ9KQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5Hcm91cFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX291dFhmb2xsb3dlZEJ5WF9ncm91cF9ieVhzb25nVHlwZVhfYnlYYm90aEVfZ3JvdXBfYnlYbGFiZWxYX2J5WHdlaWdodF9zdW1YWCIsCi0gICAgICAgIHJlYXNvbiA9ICJIYWRvb3AtR3JlbWxpbiBpcyBPTEFQLW9yaWVudGVkIGFuZCBmb3IgT0xUUCBvcGVyYXRpb25zLCBsaW5lYXItc2NhbiBqb2lucyBhcmUgcmVxdWlyZWQuIFRoaXMgcGFydGljdWxhciB0ZXN0cyB0YWtlcyBtYW55IG1pbnV0ZXMgdG8gZXhlY3V0ZS4iLAotICAgICAgICBjb21wdXRlcnMgPSB7IkFMTCJ9KQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5Hcm91cFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX3JlcGVhdFhib3RoWGZvbGxvd2VkQnlYWF90aW1lc1gyWF9ncm91cF9ieVhzb25nVHlwZVhfYnlYY291bnRYIiwKLSAgICAgICAgcmVhc29uID0gIkhhZG9vcC1HcmVtbGluIGlzIE9MQVAtb3JpZW50ZWQgYW5kIGZvciBPTFRQIG9wZXJhdGlvbnMsIGxpbmVhci1zY2FuIGpvaW5zIGFyZSByZXF1aXJlZC4gVGhpcyBwYXJ0aWN1bGFyIHRlc3RzIHRha2VzIG1hbnkgbWludXRlcyB0byBleGVjdXRlLiIsCi0gICAgICAgIGNvbXB1dGVycyA9IHsiQUxMIn0pCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0Lkdyb3VwVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1ZfcmVwZWF0WGJvdGhYZm9sbG93ZWRCeVhYX3RpbWVzWDJYX2dyb3VwWGFYX2J5WHNvbmdUeXBlWF9ieVhjb3VudFhfY2FwWGFYIiwKLSAgICAgICAgcmVhc29uID0gIkhhZG9vcC1HcmVtbGluIGlzIE9MQVAtb3JpZW50ZWQgYW5kIGZvciBPTFRQIG9wZXJhdGlvbnMsIGxpbmVhci1zY2FuIGpvaW5zIGFyZSByZXF1aXJlZC4gVGhpcyBwYXJ0aWN1bGFyIHRlc3RzIHRha2VzIG1hbnkgbWludXRlcyB0byBleGVjdXRlLiIsCi0gICAgICAgIGNvbXB1dGVycyA9IHsiQUxMIn0pCi1AR3JhcGguT3B0T3V0KAogICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5HcmFwaENvbXB1dGVyVGVzdCIsCiAgICAgICAgIG1ldGhvZCA9ICJzaG91bGRTdGFydEFuZEVuZFdvcmtlcnNGb3JWZXJ0ZXhQcm9ncmFtQW5kTWFwUmVkdWNlIiwKICAgICAgICAgcmVhc29uID0gIlNwYXJrIGV4ZWN1dGVzIG1hcCBhbmQgY29tYmluZSBpbiBhIGxhenkgZmFzaGlvbiBhbmQgdGh1cywgZmFpbHMgdGhlIGJsb2NraW5nIGFzcGVjdCBvZiB0aGlzIHRlc3QiLApAQCAtMTQyLDI3ICs3Nyw2IEBACiAgICAgICAgIG1ldGhvZCA9ICIqIiwKICAgICAgICAgcmVhc29uID0gIlRoaXMgdGVzdCBtYWtlcyB1c2Ugb2YgYSBzaWRlRWZmZWN0IHRvIGVuZm9yY2Ugd2hlbiBhIHRocmVhZCBpbnRlcnJ1cHRpb24gaXMgdHJpZ2dlcmVkIGFuZCB0aHVzIGlzbid0IGFwcGxpY2FibGUgdG8gSGFkb29wR3JhcGgiLAogICAgICAgICBjb21wdXRlcnMgPSB7Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3BhcmsucHJvY2Vzcy5jb21wdXRlci5TcGFya0dyYXBoQ29tcHV0ZXIifSkKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5NYXRjaFRlc3QkQ291bnRNYXRjaFRyYXZlcnNhbHMiLAotICAgICAgICBtZXRob2QgPSAiZ19WX21hdGNoWGFfZm9sbG93ZWRCeV9jb3VudF9pc1hndFgxMFhYX2JfX2FfMGZvbGxvd2VkQnlfY291bnRfaXNYZ3RYMTBYWF9iWF9jb3VudCIsCi0gICAgICAgIHJlYXNvbiA9ICJIYWRvb3AtR3JlbWxpbiBpcyBPTEFQLW9yaWVudGVkIGFuZCBmb3IgT0xUUCBvcGVyYXRpb25zLCBsaW5lYXItc2NhbiBqb2lucyBhcmUgcmVxdWlyZWQuIFRoaXMgcGFydGljdWxhciB0ZXN0cyB0YWtlcyBtYW55IG1pbnV0ZXMgdG8gZXhlY3V0ZS4iLAotICAgICAgICBjb21wdXRlcnMgPSB7IkFMTCJ9KQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlYWRUZXN0JFRyYXZlcnNhbHMiLAotICAgICAgICBtZXRob2QgPSAiZ19pb19yZWFkWHhtbFgiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gZG9lcyBub3Qgc3VwcG9ydCByZWFkcy93cml0ZXMgd2l0aCBHcmFwaE1MLiIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUmVhZFRlc3QkVHJhdmVyc2FscyIsCi0gICAgICAgIG1ldGhvZCA9ICJnX2lvX3JlYWRfd2l0aFhyZWFkZXJfZ3JhcGhtbFgiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gZG9lcyBub3Qgc3VwcG9ydCByZWFkcy93cml0ZXMgd2l0aCBHcmFwaE1MLiIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuV3JpdGVUZXN0JFRyYXZlcnNhbHMiLAotICAgICAgICBtZXRob2QgPSAiZ19pb193cml0ZVh4bWxYIiwKLSAgICAgICAgcmVhc29uID0gIkhhZG9vcC1HcmVtbGluIGRvZXMgbm90IHN1cHBvcnQgcmVhZHMvd3JpdGVzIHdpdGggR3JhcGhNTC4iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdCRUcmF2ZXJzYWxzIiwKLSAgICAgICAgbWV0aG9kID0gImdfaW9fd3JpdGVfd2l0aFh3cml0ZXJfZ3JhcGhtbFgiLAotICAgICAgICByZWFzb24gPSAiSGFkb29wLUdyZW1saW4gZG9lcyBub3Qgc3VwcG9ydCByZWFkcy93cml0ZXMgd2l0aCBHcmFwaE1MLiIpCiBwdWJsaWMgZmluYWwgY2xhc3MgSGFkb29wR3JhcGggaW1wbGVtZW50cyBHcmFwaCB7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihIYWRvb3BHcmFwaC5jbGFzcyk7CmRpZmYgLS1naXQgYS9oYWRvb3AtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL0hhZG9vcEdyYXBoRmVhdHVyZUludGVncmF0ZVRlc3QuamF2YSBiL2hhZG9vcC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3AvSGFkb29wR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IDA0NjQxMWYuLjZjZmI3N2IgMTAwNjQ0Ci0tLSBhL2hhZG9vcC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3AvSGFkb29wR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL2hhZG9vcC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3AvSGFkb29wR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdC5qYXZhCkBAIC01Myw5ICs1Myw5IEBACiAKIEBSdW5XaXRoKEN1Y3VtYmVyLmNsYXNzKQogQEN1Y3VtYmVyT3B0aW9ucygKLSAgICAgICAgdGFncyA9ICJub3QgQEdyYXBoQ29tcHV0ZXJPbmx5IGFuZCBub3QgQFRpbmtlclNlcnZpY2VSZWdpc3RyeSBhbmQgbm90IEBJbnNlcnRpb25PcmRlcmluZ1JlcXVpcmVkIiwKKyAgICAgICAgdGFncyA9ICJub3QgQEdyYXBoQ29tcHV0ZXJPbmx5IGFuZCBub3QgQFRpbmtlclNlcnZpY2VSZWdpc3RyeSBhbmQgbm90IEBJbnNlcnRpb25PcmRlcmluZ1JlcXVpcmVkIGFuZCBub3QgQFN0ZXBXcml0ZSIsCiAgICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAotICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3VpY2VGYWN0b3J5LmNsYXNzLAorICAgICAgICBvYmplY3RGYWN0b3J5ID0gSGFkb29wR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdC5IYWRvb3BHcmFwaEd1aWNlRmFjdG9yeS5jbGFzcywKICAgICAgICAgZmVhdHVyZXMgPSB7ICJjbGFzc3BhdGg6L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcyIgfSwKICAgICAgICAgcGx1Z2luID0geyJwcm9ncmVzcyIsICJqdW5pdDp0YXJnZXQvY3VjdW1iZXIueG1sIn0pCiBwdWJsaWMgY2xhc3MgSGFkb29wR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdCB7CkBAIC0xNTAsMTAgKzE1MCw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFdvcmxkSW5qZWN0b3JTb3VyY2UgaW1wbGVtZW50cyBJbmplY3RvclNvdXJjZSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgSW5qZWN0b3IgZ2V0SW5qZWN0b3IoKSB7Ci0gICAgICAgICAgICByZXR1cm4gR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpOworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgSGFkb29wR3JhcGhHdWljZUZhY3RvcnkgZXh0ZW5kcyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzLkFic3RyYWN0R3VpY2VGYWN0b3J5IHsKKyAgICAgICAgcHVibGljIEhhZG9vcEdyYXBoR3VpY2VGYWN0b3J5KCkgeworICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvaGFkb29wLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9wcm9jZXNzL0hhZG9vcEdyYXBoUHJvY2Vzc1N0YW5kYXJkSW50ZWdyYXRlVGVzdC5qYXZhIGIvaGFkb29wLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL2hhZG9vcC9wcm9jZXNzL0hhZG9vcEdyYXBoUHJvY2Vzc1N0YW5kYXJkSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IGJmZDRiYzMuLjlkZDUxZGYgMTAwNjQ0Ci0tLSBhL2hhZG9vcC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9oYWRvb3AvcHJvY2Vzcy9IYWRvb3BHcmFwaFByb2Nlc3NTdGFuZGFyZEludGVncmF0ZVRlc3QuamF2YQorKysgYi9oYWRvb3AtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vaGFkb29wL3Byb2Nlc3MvSGFkb29wR3JhcGhQcm9jZXNzU3RhbmRhcmRJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTIxLDEzICsyMSwxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uaGFkb29wLkhhZG9vcEdyYXBoUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5oYWRvb3Auc3RydWN0dXJlLkhhZG9vcEdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzTGltaXRlZFN0YW5kYXJkU3VpdGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NFbWJlZGRlZFN0YW5kYXJkU3VpdGU7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogCiAvKioKICAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQogICovCi1AUnVuV2l0aChQcm9jZXNzTGltaXRlZFN0YW5kYXJkU3VpdGUuY2xhc3MpCitAUnVuV2l0aChQcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlLmNsYXNzKQogQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IEhhZG9vcEdyYXBoUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gSGFkb29wR3JhcGguY2xhc3MpCiBwdWJsaWMgY2xhc3MgSGFkb29wR3JhcGhQcm9jZXNzU3RhbmRhcmRJbnRlZ3JhdGVUZXN0IHsKIApkaWZmIC0tZ2l0IGEvaGFkb29wLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL2lvLmN1Y3VtYmVyLmNvcmUuYmFja2VuZC5PYmplY3RGYWN0b3J5IGIvaGFkb29wLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL2lvLmN1Y3VtYmVyLmNvcmUuYmFja2VuZC5PYmplY3RGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZWU5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9oYWRvb3AtZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvaW8uY3VjdW1iZXIuY29yZS5iYWNrZW5kLk9iamVjdEZhY3RvcnkKQEAgLTAsMCArMSBAQAorb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5oYWRvb3AuSGFkb29wR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdCRIYWRvb3BHcmFwaEd1aWNlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvaGFkb29wLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL2N1Y3VtYmVyLnByb3BlcnRpZXMgYi9oYWRvb3AtZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvY3VjdW1iZXIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMwZDE5ZC4uMDAwMDAwMAotLS0gYS9oYWRvb3AtZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvY3VjdW1iZXIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWd1aWNlLmluamVjdG9yLXNvdXJjZT1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmhhZG9vcC5IYWRvb3BHcmFwaEZlYXR1cmVJbnRlZ3JhdGVUZXN0JFdvcmxkSW5qZWN0b3JTb3VyY2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3BvbS54bWwgYi9uZW80ai1ncmVtbGluL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3OWE4YTAuLjAwMDAwMDAKLS0tIGEvbmVvNGotZ3JlbWxpbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLTwhLS0KLUxpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCi10aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCi1UaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAotKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKLXRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLVVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi1XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLVNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLWxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICA8L3BhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5uZW80ai1ncmVtbGluPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogTmVvNGogR3JlbWxpbjwvbmFtZT4KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1jb3JlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm5lbzRqPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmVvNGotdGlua2VycG9wLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjAuMS4xPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDwhLS0gVEVTVElORyAtLT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyZW1saW4tdGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgIDwhLS0gY29uZmxpY3QgZnJvbSBraXJieSAtLT4KLSAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5vdzIuYXNtPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hc208L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcmdyYXBoLWdyZW1saW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmluamVjdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1aWNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC4yLjM8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jaC5xb3MubG9nYmFjazwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvZ2JhY2stY2xhc3NpYzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIDxidWlsZD4KLSAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9L3RhcmdldDwvZGlyZWN0b3J5PgotICAgICAgICA8ZmluYWxOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfS0ke3Byb2plY3QudmVyc2lvbn08L2ZpbmFsTmFtZT4KLSAgICAgICAgPHJlc291cmNlcz4KLSAgICAgICAgICAgIDxyZXNvdXJjZT4KLSAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzCi0gICAgICAgICAgICAgICAgPC9kaXJlY3Rvcnk+Ci0gICAgICAgICAgICA8L3Jlc291cmNlPgotICAgICAgICA8L3Jlc291cmNlcz4KLSAgICAgICAgPHRlc3RSZXNvdXJjZXM+Ci0gICAgICAgICAgICA8dGVzdFJlc291cmNlPgotICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+JHtiYXNlZGlyfS9zcmMvdGVzdC9yZXNvdXJjZXMKLSAgICAgICAgICAgICAgICA8L2RpcmVjdG9yeT4KLSAgICAgICAgICAgIDwvdGVzdFJlc291cmNlPgotICAgICAgICA8L3Rlc3RSZXNvdXJjZXM+Ci0gICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8c2tpcFRlc3RzPnRydWU8L3NraXBUZXN0cz4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWZhaWxzYWZlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPHNraXBUZXN0cz50cnVlPC9za2lwVGVzdHM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5nbWF2ZW5wbHVzPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdtYXZlbnBsdXMtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8YXJjaGl2ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxtYW5pZmVzdEVudHJpZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEdyZW1saW4tUGx1Z2luLURlcGVuZGVuY2llcz5vcmcubmVvNGo6bmVvNGotdGlua2VycG9wLWFwaS1pbXBsOjAuOS0zLjQuMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvR3JlbWxpbi1QbHVnaW4tRGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9tYW5pZmVzdEVudHJpZXM+Ci0gICAgICAgICAgICAgICAgICAgIDwvYXJjaGl2ZT4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0gICAgPHByb2ZpbGVzPgotICAgICAgICA8cHJvZmlsZT4KLSAgICAgICAgICAgIDwhLS0KLSAgICAgICAgICAgICAgVXNlIHRoaXMgcHJvZmlsZSBpZiB5b3Ugd2FudCB0aGUgTmVvNGogdGVzdCBzdWl0ZSB0byBydW4uICBUaGUgcHJvamVjdCBzaG91bGQgY29tcGlsZS9pbnN0YWxsCi0gICAgICAgICAgICAgIE5lbzRqIHdpdGhvdXQgdGhpcyBwcm9maWxlLiAgTm90ZSB0aGF0IGlmIHlvdSAiZGVwbG95IiB3aXRoIHRoaXMgcHJvZmlsZSwgbmVvNGotZ3JlbWxpbiBhcnRpZmFjdHMKLSAgICAgICAgICAgICAgd2lsbCBiZSBza2lwcGVkLgotICAgICAgICAgICAgLS0+Ci0gICAgICAgICAgICA8aWQ+aW5jbHVkZS1uZW80ajwvaWQ+Ci0gICAgICAgICAgICA8YWN0aXZhdGlvbj4KLSAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PmZhbHNlPC9hY3RpdmVCeURlZmF1bHQ+Ci0gICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICA8bmFtZT5pbmNsdWRlTmVvNGo8L25hbWU+Ci0gICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KLSAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgICAgICAgICAgPCEtLSBURVNUSU5HIC0tPgotICAgICAgICAgICAgICAgIDwhLS0gKioqIFdBUk5JTkcgKioqIC0tPgotICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubmVvNGo8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm5lbzRqLXRpbmtlcnBvcC1hcGktaW1wbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MC45LTMuNC4wPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgICAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubmVvNGo8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmVvNGota2VybmVsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxhbmczPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLXRleHQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdpdGh1Yi5iZW4tbWFuZXMuY2FmZmVpbmU8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FmZmVpbmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNjYWxhLWxhbmc8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2NhbGEtbGlicmFyeTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2NhbGEtbGFuZzwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zY2FsYS1yZWZsZWN0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLW5vcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmx1Y2VuZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5sdWNlbmUtY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5kcm9wd2l6YXJkLm1ldHJpY3M8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWV0cmljcy1jb3JlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy10ZXh0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2NhbGEtbGFuZzwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2NhbGEtbGlicmFyeTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4xMS44PC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2NhbGEtbGFuZzwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2NhbGEtcmVmbGVjdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4xMS44PC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ2l0aHViLmJlbi1tYW5lcy5jYWZmZWluZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2FmZmVpbmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubHVjZW5lPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5sdWNlbmUtY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+NS41LjA8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmlvLmRyb3B3aXphcmQubWV0cmljczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWV0cmljcy1jb3JlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj40LjIuMTk8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5uZW80ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmVvNGota2VybmVsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjQuMTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPCEtLSAqKiogV0FSTklORyAqKiogLS0+Ci0gICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAgICAgICAgIDxidWlsZD4KLSAgICAgICAgICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwVGVzdHM+ZmFsc2U8L3NraXBUZXN0cz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1mYWlsc2FmZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2tpcFRlc3RzPmZhbHNlPC9za2lwVGVzdHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJldXNlRm9ya3M+ZmFsc2U8L3JldXNlRm9ya3M+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgICAgIDwvcGx1Z2lucz4KLSAgICAgICAgICAgIDwvYnVpbGQ+Ci0gICAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovanNyMjIzL05lbzRqR3JlbWxpblBsdWdpbi5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovanNyMjIzL05lbzRqR3JlbWxpblBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2JkNTMyLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL2pzcjIyMy9OZW80akdyZW1saW5QbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouanNyMjIzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuQWJzdHJhY3RHcmVtbGluUGx1Z2luOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkRlZmF1bHRJbXBvcnRDdXN0b21pemVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkltcG9ydEN1c3RvbWl6ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnRyYXZlcnNhbC5MYWJlbFA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpFZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGhWYXJpYWJsZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80alZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80alZlcnRleFByb3BlcnR5OwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIE5lbzRqR3JlbWxpblBsdWdpbiBleHRlbmRzIEFic3RyYWN0R3JlbWxpblBsdWdpbiB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJ0aW5rZXJwb3AubmVvNGoiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW1wb3J0Q3VzdG9taXplciBpbXBvcnRzOwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGltcG9ydHMgPSBEZWZhdWx0SW1wb3J0Q3VzdG9taXplci5idWlsZCgpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzc0ltcG9ydHMoTmVvNGpFZGdlLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lbzRqRWxlbWVudC5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZW80akdyYXBoLmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lbzRqR3JhcGhWYXJpYWJsZXMuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVvNGpIZWxwZXIuY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTmVvNGpQcm9wZXJ0eS5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZW80alZlcnRleC5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZW80alZlcnRleFByb3BlcnR5LmNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsUC5jbGFzcykKLSAgICAgICAgICAgICAgICAgICAgLmFkZE1ldGhvZEltcG9ydHMoTGFiZWxQLmNsYXNzLmdldE1ldGhvZCgib2YiLCBTdHJpbmcuY2xhc3MpKS5jcmVhdGUoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOZW80akdyZW1saW5QbHVnaW4gaW5zdGFuY2UgPSBuZXcgTmVvNGpHcmVtbGluUGx1Z2luKCk7Ci0KLSAgICBwdWJsaWMgTmVvNGpHcmVtbGluUGx1Z2luKCkgewotICAgICAgICBzdXBlcihOQU1FLCBpbXBvcnRzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIE5lbzRqR3JlbWxpblBsdWdpbiBpbnN0YW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIGluc3RhbmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHJlcXVpcmVSZXN0YXJ0KCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy90cmF2ZXJzYWwvTGFiZWxQLmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL3RyYXZlcnNhbC9MYWJlbFAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ3MDUxNS4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL3RyYXZlcnNhbC9MYWJlbFAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGoucHJvY2Vzcy50cmF2ZXJzYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80alZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QQmlQcmVkaWNhdGU7Ci0KLWltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIExhYmVsUCBleHRlbmRzIFA8U3RyaW5nPiB7Ci0KLSAgICBwcml2YXRlIExhYmVsUChmaW5hbCBTdHJpbmcgbGFiZWwpIHsKLSAgICAgICAgc3VwZXIoTGFiZWxCaVByZWRpY2F0ZS5pbnN0YW5jZSgpLCBsYWJlbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBQPFN0cmluZz4gb2YoZmluYWwgU3RyaW5nIGxhYmVsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTGFiZWxQKGxhYmVsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAZGVwcmVjYXRlZCBTZWU6IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8zLjUuNy9yZWZlcmVuY2UvI25lbzRqLWdyZW1saW4KLSAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgTGFiZWxCaVByZWRpY2F0ZSBpbXBsZW1lbnRzIFBCaVByZWRpY2F0ZTxTdHJpbmcsIFN0cmluZz4sIFNlcmlhbGl6YWJsZSB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExhYmVsQmlQcmVkaWNhdGUgSU5TVEFOQ0UgPSBuZXcgTGFiZWxCaVByZWRpY2F0ZSgpOwotCi0gICAgICAgIHByaXZhdGUgTGFiZWxCaVByZWRpY2F0ZSgpIHsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0KGZpbmFsIFN0cmluZyBsYWJlbHMsIGZpbmFsIFN0cmluZyBjaGVja0xhYmVsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbGFiZWxzLmVxdWFscyhjaGVja0xhYmVsKSB8fCBsYWJlbHMuY29udGFpbnMoTmVvNGpWZXJ0ZXguTEFCRUxfREVMSU1JTkFUT1IgKyBjaGVja0xhYmVsKSB8fCBsYWJlbHMuY29udGFpbnMoY2hlY2tMYWJlbCArIE5lbzRqVmVydGV4LkxBQkVMX0RFTElNSU5BVE9SKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgTGFiZWxCaVByZWRpY2F0ZSBpbnN0YW5jZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBJTlNUQU5DRTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0N5cGhlclN0YXJ0U3RlcC5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy90cmF2ZXJzYWwvc3RlcC9zaWRlRWZmZWN0L0N5cGhlclN0YXJ0U3RlcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYThkN2Q5Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9DeXBoZXJTdGFydFN0ZXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGoucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnV0aWwuTmVvNGpDeXBoZXJJdGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdGFydFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIEN5cGhlclN0YXJ0U3RlcCBleHRlbmRzIFN0YXJ0U3RlcDxNYXA8U3RyaW5nLCBPYmplY3Q+PiB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBxdWVyeTsKLQotICAgIHB1YmxpYyBDeXBoZXJTdGFydFN0ZXAoZmluYWwgVHJhdmVyc2FsLkFkbWluIHRyYXZlcnNhbCwgZmluYWwgU3RyaW5nIHF1ZXJ5LCBmaW5hbCBOZW80akN5cGhlckl0ZXJhdG9yPD8+IGN5cGhlckl0ZXJhdG9yKSB7Ci0gICAgICAgIHN1cGVyKHRyYXZlcnNhbCwgY3lwaGVySXRlcmF0b3IpOwotICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3Rvcnkuc3RlcFN0cmluZyh0aGlzLCB0aGlzLnF1ZXJ5KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL3RyYXZlcnNhbC9zdGVwL3NpZGVFZmZlY3QvTmVvNGpHcmFwaFN0ZXAuamF2YSBiL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9OZW80akdyYXBoU3RlcC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGEzMGJiLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdHJhdmVyc2FsL3N0ZXAvc2lkZUVmZmVjdC9OZW80akdyYXBoU3RlcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGoucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnRyYXZlcnNhbC5MYWJlbFA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80alZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkNvbXBhcmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuSGFzQ29udGFpbmVySG9sZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkhhc0NvbnRhaW5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuQW5kUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqR3JhcGhBUEk7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpOb2RlOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqU3RyaW5nU2VhcmNoTW9kZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQmlQcmVkaWNhdGU7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAYXV0aG9yIFBpZXRlciBNYXJ0aW4KLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIE5lbzRqR3JhcGhTdGVwPFMsIEUgZXh0ZW5kcyBFbGVtZW50PiBleHRlbmRzIEdyYXBoU3RlcDxTLCBFPiBpbXBsZW1lbnRzIEhhc0NvbnRhaW5lckhvbGRlcjxTLCBFPiB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIExpc3Q8SGFzQ29udGFpbmVyPiBoYXNDb250YWluZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICBwdWJsaWMgTmVvNGpHcmFwaFN0ZXAoZmluYWwgR3JhcGhTdGVwPFMsIEU+IG9yaWdpbmFsR3JhcGhTdGVwKSB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbmFsR3JhcGhTdGVwLmdldFRyYXZlcnNhbCgpLCBvcmlnaW5hbEdyYXBoU3RlcC5nZXRSZXR1cm5DbGFzcygpLCBvcmlnaW5hbEdyYXBoU3RlcC5pc1N0YXJ0U3RlcCgpLCBvcmlnaW5hbEdyYXBoU3RlcC5nZXRJZHMoKSk7Ci0gICAgICAgIG9yaWdpbmFsR3JhcGhTdGVwLmdldExhYmVscygpLmZvckVhY2godGhpczo6YWRkTGFiZWwpOwotICAgICAgICB0aGlzLnNldEl0ZXJhdG9yU3VwcGxpZXIoKCkgLT4gKEl0ZXJhdG9yPEU+KSAoVmVydGV4LmNsYXNzLmlzQXNzaWduYWJsZUZyb20odGhpcy5yZXR1cm5DbGFzcykgPyB0aGlzLnZlcnRpY2VzKCkgOiB0aGlzLmVkZ2VzKCkpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEl0ZXJhdG9yPD8gZXh0ZW5kcyBFZGdlPiBlZGdlcygpIHsKLSAgICAgICAgaWYgKG51bGwgPT0gdGhpcy5pZHMpCi0gICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlJdGVyYXRvcigpOwotICAgICAgICByZXR1cm4gSXRlcmF0b3JVdGlscy5maWx0ZXIodGhpcy5nZXRUcmF2ZXJzYWwoKS5nZXRHcmFwaCgpLmdldCgpLmVkZ2VzKHRoaXMuaWRzKSwgZWRnZSAtPiBIYXNDb250YWluZXIudGVzdEFsbChlZGdlLCB0aGlzLmhhc0NvbnRhaW5lcnMpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEl0ZXJhdG9yPD8gZXh0ZW5kcyBWZXJ0ZXg+IHZlcnRpY2VzKCkgewotICAgICAgICBpZiAobnVsbCA9PSB0aGlzLmlkcykKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUl0ZXJhdG9yKCk7Ci0gICAgICAgIGZpbmFsIE5lbzRqR3JhcGggZ3JhcGggPSAoTmVvNGpHcmFwaCkgdGhpcy5nZXRUcmF2ZXJzYWwoKS5nZXRHcmFwaCgpLmdldCgpOwotCi0gICAgICAgIC8vIGlkcyBhcmUgcHJlc2VudCwgZmlsdGVyIG9uIHRoZW0gZmlyc3QKLSAgICAgICAgaWYgKGlkcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdG9yVXRpbHMuZmlsdGVyKGdyYXBoLnZlcnRpY2VzKGlkcyksIHZlcnRleCAtPiBIYXNDb250YWluZXIudGVzdEFsbCh2ZXJ0ZXgsIGhhc0NvbnRhaW5lcnMpKTsKLSAgICAgICAgLy8vLy8vIGRvIGluZGV4IGxvb2t1cHMgLy8vLy8vCi0gICAgICAgIGdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIC8vIGdldCBhIGxhYmVsIGJlaW5nIHNlYXJjaCBvbgotICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGxhYmVsID0gaGFzQ29udGFpbmVycy5zdHJlYW0oKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoaGFzQ29udGFpbmVyIC0+IGhhc0NvbnRhaW5lci5nZXRLZXkoKSAhPSBudWxsICYmIGhhc0NvbnRhaW5lci5nZXRLZXkoKS5lcXVhbHMoVC5sYWJlbC5nZXRBY2Nlc3NvcigpKSkKLSAgICAgICAgICAgICAgICAuZmlsdGVyKGhhc0NvbnRhaW5lciAtPiBDb21wYXJlLmVxID09IGhhc0NvbnRhaW5lci5nZXRCaVByZWRpY2F0ZSgpKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoaGFzQ29udGFpbmVyIC0+IGhhc0NvbnRhaW5lci5nZXRWYWx1ZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgLm1hcChoYXNDb250YWluZXIgLT4gKFN0cmluZykgaGFzQ29udGFpbmVyLmdldFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgLmZpbmRBbnkoKTsKLSAgICAgICAgaWYgKCFsYWJlbC5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIGxhYmVsID0gaGFzQ29udGFpbmVycy5zdHJlYW0oKQotICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGhhc0NvbnRhaW5lciAtPiBoYXNDb250YWluZXIuZ2V0S2V5KCkgIT0gbnVsbCAmJiBoYXNDb250YWluZXIuZ2V0S2V5KCkuZXF1YWxzKFQubGFiZWwuZ2V0QWNjZXNzb3IoKSkpCi0gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaGFzQ29udGFpbmVyIC0+IGhhc0NvbnRhaW5lci5nZXRQcmVkaWNhdGUoKSBpbnN0YW5jZW9mIExhYmVsUCkKLSAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihoYXNDb250YWluZXIgLT4gaGFzQ29udGFpbmVyLmdldFZhbHVlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgLm1hcChoYXNDb250YWluZXIgLT4gKFN0cmluZykgaGFzQ29udGFpbmVyLmdldFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIC5maW5kQW55KCk7Ci0KLSAgICAgICAgaWYgKGxhYmVsLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICAvLyBmaW5kIGEgdmVydGV4IGJ5IGxhYmVsIGFuZCBrZXkvdmFsdWUKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsYWJlbFZhbHVlID0gbGFiZWwuZ2V0KCk7Ci0gICAgICAgICAgICBmaW5hbCBOZW80akdyYXBoQVBJIGJhc2VHcmFwaCA9IGdyYXBoLmdldEJhc2VHcmFwaCgpOwotICAgICAgICAgICAgZm9yIChmaW5hbCBIYXNDb250YWluZXIgaGFzQ29udGFpbmVyIDogaGFzQ29udGFpbmVycykgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBoYXNDb250YWluZXIuZ2V0S2V5KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IHZhbHVlID0gaGFzQ29udGFpbmVyLmdldFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGtleSAhPSBudWxsICYmICFrZXkuZXF1YWxzKFQubGFiZWwuZ2V0QWNjZXNzb3IoKSkgJiYgYmFzZUdyYXBoLmhhc1NjaGVtYUluZGV4KGxhYmVsVmFsdWUsIGtleSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQmlQcmVkaWNhdGU8PywgPz4gcHJlZGljYXRlID0gaGFzQ29udGFpbmVyLmdldEJpUHJlZGljYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIEl0ZXJhYmxlPE5lbzRqTm9kZT4gbm9kZXMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZS5lcSA9PSBwcmVkaWNhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzID0gYmFzZUdyYXBoLmZpbmROb2RlcyhsYWJlbFZhbHVlLCBrZXksIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUZXh0LmNvbnRhaW5pbmcgPT0gcHJlZGljYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlcyA9IGJhc2VHcmFwaC5maW5kTm9kZXMobGFiZWxWYWx1ZSwga2V5LCB2YWx1ZS50b1N0cmluZygpLCBOZW80alN0cmluZ1NlYXJjaE1vZGUuQ09OVEFJTlMpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRleHQuc3RhcnRpbmdXaXRoID09IHByZWRpY2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMgPSBiYXNlR3JhcGguZmluZE5vZGVzKGxhYmVsVmFsdWUsIGtleSwgdmFsdWUudG9TdHJpbmcoKSwgTmVvNGpTdHJpbmdTZWFyY2hNb2RlLlBSRUZJWCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVGV4dC5lbmRpbmdXaXRoID09IHByZWRpY2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMgPSBiYXNlR3JhcGguZmluZE5vZGVzKGxhYmVsVmFsdWUsIGtleSwgdmFsdWUudG9TdHJpbmcoKSwgTmVvNGpTdHJpbmdTZWFyY2hNb2RlLlNVRkZJWCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRvclV0aWxzLnN0cmVhbShub2RlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlIC0+IChWZXJ0ZXgpIG5ldyBOZW80alZlcnRleChub2RlLCBncmFwaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIodmVydGV4IC0+IEhhc0NvbnRhaW5lci50ZXN0QWxsKHZlcnRleCwgaGFzQ29udGFpbmVycykpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGZpbmQgYSB2ZXJ0ZXggYnkgbGFiZWwKLSAgICAgICAgICAgIHJldHVybiBJdGVyYXRvclV0aWxzLnN0cmVhbShncmFwaC5nZXRCYXNlR3JhcGgoKS5maW5kTm9kZXMobGFiZWwuZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAubWFwKG5vZGUgLT4gKFZlcnRleCkgbmV3IE5lbzRqVmVydGV4KG5vZGUsIGdyYXBoKSkKLSAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih2ZXJ0ZXggLT4gSGFzQ29udGFpbmVyLnRlc3RBbGwodmVydGV4LCBoYXNDb250YWluZXJzKSkuaXRlcmF0b3IoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGxpbmVhciBzY2FuCi0gICAgICAgICAgICByZXR1cm4gSXRlcmF0b3JVdGlscy5maWx0ZXIoZ3JhcGgudmVydGljZXMoKSwgdmVydGV4IC0+IEhhc0NvbnRhaW5lci50ZXN0QWxsKHZlcnRleCwgaGFzQ29udGFpbmVycykpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgaWYgKHRoaXMuaGFzQ29udGFpbmVycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIDAgPT0gdGhpcy5pZHMubGVuZ3RoID8KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nRmFjdG9yeS5zdGVwU3RyaW5nKHRoaXMsIHRoaXMucmV0dXJuQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpLnRvTG93ZXJDYXNlKCksIHRoaXMuaGFzQ29udGFpbmVycykgOgotICAgICAgICAgICAgICAgICAgICBTdHJpbmdGYWN0b3J5LnN0ZXBTdHJpbmcodGhpcywgdGhpcy5yZXR1cm5DbGFzcy5nZXRTaW1wbGVOYW1lKCkudG9Mb3dlckNhc2UoKSwgQXJyYXlzLnRvU3RyaW5nKHRoaXMuaWRzKSwgdGhpcy5oYXNDb250YWluZXJzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGlzdDxIYXNDb250YWluZXI+IGdldEhhc0NvbnRhaW5lcnMoKSB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHRoaXMuaGFzQ29udGFpbmVycyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkSGFzQ29udGFpbmVyKGZpbmFsIEhhc0NvbnRhaW5lciBoYXNDb250YWluZXIpIHsKLSAgICAgICAgaWYgKGhhc0NvbnRhaW5lci5nZXRQcmVkaWNhdGUoKSBpbnN0YW5jZW9mIEFuZFApIHsKLSAgICAgICAgICAgIGZvciAoZmluYWwgUDw/PiBwcmVkaWNhdGUgOiAoKEFuZFA8Pz4pIGhhc0NvbnRhaW5lci5nZXRQcmVkaWNhdGUoKSkuZ2V0UHJlZGljYXRlcygpKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5hZGRIYXNDb250YWluZXIobmV3IEhhc0NvbnRhaW5lcihoYXNDb250YWluZXIuZ2V0S2V5KCksIHByZWRpY2F0ZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRoaXMuaGFzQ29udGFpbmVycy5hZGQoaGFzQ29udGFpbmVyKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gc3VwZXIuaGFzaENvZGUoKSBeIHRoaXMuaGFzQ29udGFpbmVycy5oYXNoQ29kZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9OZW80akdyYXBoU3RlcFN0cmF0ZWd5LmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9vcHRpbWl6YXRpb24vTmVvNGpHcmFwaFN0ZXBTdHJhdGVneS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmE5MTU5Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9OZW80akdyYXBoU3RlcFN0cmF0ZWd5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGoucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0Lk5lbzRqR3JhcGhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5IYXNDb250YWluZXJIb2xkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLmZpbHRlci5IYXNTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuR3JhcGhTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuTm9PcEJhcnJpZXJTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkhhc0NvbnRhaW5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEBhdXRob3IgUGlldGVyIE1hcnRpbgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAZGVwcmVjYXRlZCBTZWU6IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8zLjUuNy9yZWZlcmVuY2UvI25lbzRqLWdyZW1saW4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBmaW5hbCBjbGFzcyBOZW80akdyYXBoU3RlcFN0cmF0ZWd5IGV4dGVuZHMgQWJzdHJhY3RUcmF2ZXJzYWxTdHJhdGVneTxUcmF2ZXJzYWxTdHJhdGVneS5Qcm92aWRlck9wdGltaXphdGlvblN0cmF0ZWd5PiBpbXBsZW1lbnRzIFRyYXZlcnNhbFN0cmF0ZWd5LlByb3ZpZGVyT3B0aW1pemF0aW9uU3RyYXRlZ3kgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTmVvNGpHcmFwaFN0ZXBTdHJhdGVneSBJTlNUQU5DRSA9IG5ldyBOZW80akdyYXBoU3RlcFN0cmF0ZWd5KCk7Ci0KLSAgICBwcml2YXRlIE5lbzRqR3JhcGhTdGVwU3RyYXRlZ3koKSB7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYXBwbHkoZmluYWwgVHJhdmVyc2FsLkFkbWluPD8sID8+IHRyYXZlcnNhbCkgewotICAgICAgICBmb3IgKGZpbmFsIEdyYXBoU3RlcCBvcmlnaW5hbEdyYXBoU3RlcCA6IFRyYXZlcnNhbEhlbHBlci5nZXRTdGVwc09mQ2xhc3MoR3JhcGhTdGVwLmNsYXNzLCB0cmF2ZXJzYWwpKSB7Ci0gICAgICAgICAgICBmaW5hbCBOZW80akdyYXBoU3RlcDw/LCA/PiBuZW80akdyYXBoU3RlcCA9IG5ldyBOZW80akdyYXBoU3RlcDw+KG9yaWdpbmFsR3JhcGhTdGVwKTsKLSAgICAgICAgICAgIFRyYXZlcnNhbEhlbHBlci5yZXBsYWNlU3RlcChvcmlnaW5hbEdyYXBoU3RlcCwgbmVvNGpHcmFwaFN0ZXAsIHRyYXZlcnNhbCk7Ci0gICAgICAgICAgICBTdGVwPD8sID8+IGN1cnJlbnRTdGVwID0gbmVvNGpHcmFwaFN0ZXAuZ2V0TmV4dFN0ZXAoKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyZW50U3RlcCBpbnN0YW5jZW9mIEhhc1N0ZXAgfHwgY3VycmVudFN0ZXAgaW5zdGFuY2VvZiBOb09wQmFycmllclN0ZXApIHsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0ZXAgaW5zdGFuY2VvZiBIYXNTdGVwKSB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3Q8SGFzQ29udGFpbmVyPiBoYXNDb250YWluZXJzID0gKChIYXNTdGVwKSBjdXJyZW50U3RlcCkuZ2V0SGFzQ29udGFpbmVycygpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIEhhc0NvbnRhaW5lciBoYXNDb250YWluZXIgOiBoYXNDb250YWluZXJzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUdyYXBoU3RlcC5wcm9jZXNzSGFzQ29udGFpbmVySWRzKG5lbzRqR3JhcGhTdGVwLCBoYXNDb250YWluZXIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lbzRqR3JhcGhTdGVwLmFkZEhhc0NvbnRhaW5lcihoYXNDb250YWluZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFRyYXZlcnNhbEhlbHBlci5jb3B5TGFiZWxzKGN1cnJlbnRTdGVwLCBjdXJyZW50U3RlcC5nZXRQcmV2aW91c1N0ZXAoKSwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzYWwucmVtb3ZlU3RlcChjdXJyZW50U3RlcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGVwID0gY3VycmVudFN0ZXAuZ2V0TmV4dFN0ZXAoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTmVvNGpHcmFwaFN0ZXBTdHJhdGVneSBpbnN0YW5jZSgpIHsKLSAgICAgICAgcmV0dXJuIElOU1RBTkNFOwotICAgIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdXRpbC9OZW80akN5cGhlckl0ZXJhdG9yLmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL3V0aWwvTmVvNGpDeXBoZXJJdGVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTExNjE5Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdXRpbC9OZW80akN5cGhlckl0ZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnByb2Nlc3MudXRpbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqRWRnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqVmVydGV4OwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqTm9kZTsKLWltcG9ydCBvcmcubmVvNGoudGlua2VycG9wLmFwaS5OZW80alJlbGF0aW9uc2hpcDsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAZGVwcmVjYXRlZCBTZWU6IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8zLjUuNy9yZWZlcmVuY2UvI25lbzRqLWdyZW1saW4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBmaW5hbCBjbGFzcyBOZW80akN5cGhlckl0ZXJhdG9yPFQ+IGltcGxlbWVudHMgSXRlcmF0b3I8TWFwPFN0cmluZywgVD4+IHsKLQotICAgIHByaXZhdGUgZmluYWwgSXRlcmF0b3I8TWFwPFN0cmluZywgVD4+IGl0ZXJhdG9yOwotICAgIHByaXZhdGUgZmluYWwgTmVvNGpHcmFwaCBncmFwaDsKLQotICAgIHB1YmxpYyBOZW80akN5cGhlckl0ZXJhdG9yKGZpbmFsIEl0ZXJhdG9yPE1hcDxTdHJpbmcsIFQ+PiBpdGVyYXRvciwgZmluYWwgTmVvNGpHcmFwaCBncmFwaCkgewotICAgICAgICB0aGlzLml0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotICAgICAgICByZXR1cm4gdGhpcy5pdGVyYXRvci5oYXNOZXh0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE1hcDxTdHJpbmcsIFQ+IG5leHQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLml0ZXJhdG9yLm5leHQoKS5lbnRyeVNldCgpLnN0cmVhbSgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b01hcCgKLSAgICAgICAgICAgICAgICBNYXAuRW50cnk6OmdldEtleSwKLSAgICAgICAgICAgICAgICBlbnRyeSAtPiB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFQgdmFsID0gZW50cnkuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKE5lbzRqTm9kZS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHZhbC5nZXRDbGFzcygpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUKSBuZXcgTmVvNGpWZXJ0ZXgoKE5lbzRqTm9kZSkgdmFsLCB0aGlzLmdyYXBoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChOZW80alJlbGF0aW9uc2hpcC5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHZhbC5nZXRDbGFzcygpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChUKSBuZXcgTmVvNGpFZGdlKChOZW80alJlbGF0aW9uc2hpcCkgdmFsLCB0aGlzLmdyYXBoKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05lbzRqRWRnZS5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05lbzRqRWRnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzAyNTBjLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akVkZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuRWxlbWVudEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLlN0cmluZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC53cmFwcGVkLldyYXBwZWRFZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqUmVsYXRpb25zaGlwOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIE5lbzRqRWRnZSBleHRlbmRzIE5lbzRqRWxlbWVudCBpbXBsZW1lbnRzIEVkZ2UsIFdyYXBwZWRFZGdlPE5lbzRqUmVsYXRpb25zaGlwPiB7Ci0KLSAgICBwdWJsaWMgTmVvNGpFZGdlKGZpbmFsIE5lbzRqUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCwgZmluYWwgTmVvNGpHcmFwaCBncmFwaCkgewotICAgICAgICBzdXBlcihyZWxhdGlvbnNoaXAsIGdyYXBoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmVydGV4IG91dFZlcnRleCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZW80alZlcnRleCh0aGlzLmdldEJhc2VFZGdlKCkuc3RhcnQoKSwgdGhpcy5ncmFwaCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZlcnRleCBpblZlcnRleCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZW80alZlcnRleCh0aGlzLmdldEJhc2VFZGdlKCkuZW5kKCksIHRoaXMuZ3JhcGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJdGVyYXRvcjxWZXJ0ZXg+IHZlcnRpY2VzKGZpbmFsIERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewotICAgICAgICAgICAgY2FzZSBPVVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdG9yVXRpbHMub2YobmV3IE5lbzRqVmVydGV4KHRoaXMuZ2V0QmFzZUVkZ2UoKS5zdGFydCgpLCB0aGlzLmdyYXBoKSk7Ci0gICAgICAgICAgICBjYXNlIElOOgotICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRvclV0aWxzLm9mKG5ldyBOZW80alZlcnRleCh0aGlzLmdldEJhc2VFZGdlKCkuZW5kKCksIHRoaXMuZ3JhcGgpKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdG9yVXRpbHMub2YobmV3IE5lbzRqVmVydGV4KHRoaXMuZ2V0QmFzZUVkZ2UoKS5zdGFydCgpLCB0aGlzLmdyYXBoKSwgbmV3IE5lbzRqVmVydGV4KHRoaXMuZ2V0QmFzZUVkZ2UoKS5lbmQoKSwgdGhpcy5ncmFwaCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmJhc2VFbGVtZW50LmRlbGV0ZSgpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWdub3JlZCkgewotICAgICAgICAgICAgLy8gTm90Rm91bmRFeGNlcHRpb24gaGFwcGVucyBpZiB0aGUgZWRnZSBpcyBjb21taXR0ZWQKLSAgICAgICAgICAgIC8vIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBoYXBwZW5zIGlmIHRoZSBlZGdlIGlzIHN0aWxsIGNoaWxsaW5nIGluIHRoZSB0eAotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGlmICghTmVvNGpIZWxwZXIuaXNOb3RGb3VuZChlKSkgdGhyb3cgZTsKLSAgICAgICAgICAgIC8vIE5vdEZvdW5kRXhjZXB0aW9uIGhhcHBlbnMgaWYgdGhlIGVkZ2UgaXMgY29tbWl0dGVkCi0gICAgICAgICAgICAvLyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaGFwcGVucyBpZiB0aGUgZWRnZSBpcyBzdGlsbCBjaGlsbGluZyBpbiB0aGUgdHgKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiBTdHJpbmdGYWN0b3J5LmVkZ2VTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBsYWJlbCgpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRCYXNlRWRnZSgpLnR5cGUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTmVvNGpSZWxhdGlvbnNoaXAgZ2V0QmFzZUVkZ2UoKSB7Ci0gICAgICAgIHJldHVybiAoTmVvNGpSZWxhdGlvbnNoaXApIHRoaXMuYmFzZUVsZW1lbnQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxWPiBJdGVyYXRvcjxQcm9wZXJ0eTxWPj4gcHJvcGVydGllcyhmaW5hbCBTdHJpbmcuLi4gcHJvcGVydHlLZXlzKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgSXRlcmFibGU8U3RyaW5nPiBrZXlzID0gdGhpcy5iYXNlRWxlbWVudC5nZXRLZXlzKCk7Ci0gICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gZmlsdGVyID0gSXRlcmF0b3JVdGlscy5maWx0ZXIoa2V5cy5pdGVyYXRvcigpLAotICAgICAgICAgICAgICAgIGtleSAtPiBFbGVtZW50SGVscGVyLmtleUV4aXN0cyhrZXksIHByb3BlcnR5S2V5cykpOwotICAgICAgICByZXR1cm4gSXRlcmF0b3JVdGlscy5tYXAoZmlsdGVyLAotICAgICAgICAgICAgICAgIGtleSAtPiBuZXcgTmVvNGpQcm9wZXJ0eTw+KHRoaXMsIGtleSwgKFYpIHRoaXMuYmFzZUVsZW1lbnQuZ2V0UHJvcGVydHkoa2V5KSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8Vj4gUHJvcGVydHk8Vj4gcHJvcGVydHkoZmluYWwgU3RyaW5nIGtleSkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGlmICh0aGlzLmJhc2VFbGVtZW50Lmhhc1Byb3BlcnR5KGtleSkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IE5lbzRqUHJvcGVydHk8Pih0aGlzLCBrZXksIChWKSB0aGlzLmJhc2VFbGVtZW50LmdldFByb3BlcnR5KGtleSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHJvcGVydHkuZW1wdHkoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPFY+IFByb3BlcnR5PFY+IHByb3BlcnR5KGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgRWxlbWVudEhlbHBlci52YWxpZGF0ZVByb3BlcnR5KGtleSwgdmFsdWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKG51bGwgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHByb3BlcnRpZXMoa2V5KS5mb3JFYWNoUmVtYWluaW5nKFByb3BlcnR5OjpyZW1vdmUpOwotICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5LmVtcHR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmJhc2VFbGVtZW50LnNldFByb3BlcnR5KGtleSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZW80alByb3BlcnR5PD4odGhpcywga2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBQcm9wZXJ0eS5FeGNlcHRpb25zLmRhdGFUeXBlT2ZQcm9wZXJ0eVZhbHVlTm90U3VwcG9ydGVkKHZhbHVlLCBlKTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpFbGVtZW50LmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NGNhODYuLjAwMDAwMDAKLS0tIGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05lbzRqRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuRWxlbWVudEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLndyYXBwZWQuV3JhcHBlZEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpFbnRpdHk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAZGVwcmVjYXRlZCBTZWU6IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8zLjUuNy9yZWZlcmVuY2UvI25lbzRqLWdyZW1saW4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBOZW80akVsZW1lbnQgaW1wbGVtZW50cyBFbGVtZW50LCBXcmFwcGVkRWxlbWVudDxOZW80akVudGl0eT4gewotICAgIHByb3RlY3RlZCBmaW5hbCBOZW80akdyYXBoIGdyYXBoOwotICAgIHByb3RlY3RlZCBmaW5hbCBOZW80akVudGl0eSBiYXNlRWxlbWVudDsKLQotICAgIHB1YmxpYyBOZW80akVsZW1lbnQoZmluYWwgTmVvNGpFbnRpdHkgYmFzZUVsZW1lbnQsIGZpbmFsIE5lbzRqR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgdGhpcy5iYXNlRWxlbWVudCA9IGJhc2VFbGVtZW50OwotICAgICAgICB0aGlzLmdyYXBoID0gZ3JhcGg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEdyYXBoIGdyYXBoKCkgewotICAgICAgICByZXR1cm4gdGhpcy5ncmFwaDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IGlkKCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLmJhc2VFbGVtZW50LmdldElkKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldDxTdHJpbmc+IGtleXMoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4ga2V5cyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcga2V5IDogdGhpcy5iYXNlRWxlbWVudC5nZXRLZXlzKCkpIHsKLSAgICAgICAgICAgIGlmICghR3JhcGguSGlkZGVuLmlzSGlkZGVuKGtleSkpCi0gICAgICAgICAgICAgICAga2V5cy5hZGQoa2V5KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KGtleXMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhmaW5hbCBPYmplY3Qgb2JqZWN0KSB7Ci0gICAgICAgIHJldHVybiBFbGVtZW50SGVscGVyLmFyZUVxdWFsKHRoaXMsIG9iamVjdCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRIZWxwZXIuaGFzaENvZGUodGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE5lbzRqRW50aXR5IGdldEJhc2VFbGVtZW50KCkgewotICAgICAgICByZXR1cm4gdGhpcy5iYXNlRWxlbWVudDsKLSAgICB9Ci0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akdyYXBoLmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpHcmFwaC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjJjOTYzLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akdyYXBoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MzAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQmFzZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkNvbmZpZ3VyYXRpb25Db252ZXJ0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuQ3lwaGVyU3RhcnRTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGoucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLk5lbzRqR3JhcGhTdGVwU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnV0aWwuTmVvNGpDeXBoZXJJdGVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuR3JhcGhDb21wdXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguRGVmYXVsdEdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVHJhbnNhY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuQWJzdHJhY3RUaHJlYWRMb2NhbFRyYW5zYWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuRWxlbWVudEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLlN0cmluZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5UcmFuc2FjdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLndyYXBwZWQuV3JhcHBlZEdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqRmFjdG9yeTsKLWltcG9ydCBvcmcubmVvNGoudGlua2VycG9wLmFwaS5OZW80akdyYXBoQVBJOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqVHg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLnN0cmVhbS5TdHJlYW07Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFBpZXRlciBNYXJ0aW4KLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfU1RSVUNUVVJFX1NUQU5EQVJEKQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1NUUlVDVFVSRV9JTlRFR1JBVEUpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19TVEFOREFSRCkKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0xJTUlURURfU1RBTkRBUkQpCi1AR3JhcGguT3B0SW4oIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouTmF0aXZlTmVvNGpTdWl0ZSIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlRyYW5zYWN0aW9uTXVsdGlUaHJlYWRlZFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJTb21lIHNjZW5hcmlvcyBhcmUgc3VwcG9ydGVkIGJ5IE5lbzRqR3JhcGgiKQotQERlcHJlY2F0ZWQKLXB1YmxpYyBmaW5hbCBjbGFzcyBOZW80akdyYXBoIGltcGxlbWVudHMgR3JhcGgsIFdyYXBwZWRHcmFwaDxOZW80akdyYXBoQVBJPiB7Ci0KLSAgICBzdGF0aWMgewotICAgICAgICBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlLnJlZ2lzdGVyU3RyYXRlZ2llcyhOZW80akdyYXBoLmNsYXNzLCBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlLmdldFN0cmF0ZWdpZXMoR3JhcGguY2xhc3MpLmNsb25lKCkuYWRkU3RyYXRlZ2llcyhOZW80akdyYXBoU3RlcFN0cmF0ZWd5Lmluc3RhbmNlKCkpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb25maWd1cmF0aW9uIEVNUFRZX0NPTkZJR1VSQVRJT04gPSBuZXcgQmFzZUNvbmZpZ3VyYXRpb24oKSB7ewotICAgICAgICB0aGlzLnNldFByb3BlcnR5KEdyYXBoLkdSQVBILCBOZW80akdyYXBoLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgfX07Ci0KLSAgICBwcm90ZWN0ZWQgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgTmVvNGpHcmFwaEZlYXR1cmVzKCk7Ci0KLSAgICBwcm90ZWN0ZWQgTmVvNGpHcmFwaEFQSSBiYXNlR3JhcGg7Ci0gICAgcHJvdGVjdGVkIEJhc2VDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBuZXcgQmFzZUNvbmZpZ3VyYXRpb24oKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19ESVJFQ1RPUlkgPSAiZ3JlbWxpbi5uZW80ai5kaXJlY3RvcnkiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19DT05GID0gImdyZW1saW4ubmVvNGouY29uZiI7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE5lbzRqVHJhbnNhY3Rpb24gbmVvNGpUcmFuc2FjdGlvbiA9IG5ldyBOZW80alRyYW5zYWN0aW9uKCk7Ci0gICAgcHJpdmF0ZSBOZW80akdyYXBoVmFyaWFibGVzIG5lbzRqR3JhcGhWYXJpYWJsZXM7Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZShmaW5hbCBOZW80akdyYXBoQVBJIGJhc2VHcmFwaCwgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5jb3B5KGNvbmZpZ3VyYXRpb24pOwotICAgICAgICB0aGlzLmJhc2VHcmFwaCA9IGJhc2VHcmFwaDsKLSAgICAgICAgdGhpcy5uZW80akdyYXBoVmFyaWFibGVzID0gbmV3IE5lbzRqR3JhcGhWYXJpYWJsZXModGhpcyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIE5lbzRqR3JhcGgoZmluYWwgTmVvNGpHcmFwaEFQSSBiYXNlR3JhcGgsIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgewotICAgICAgICB0aGlzLmluaXRpYWxpemUoYmFzZUdyYXBoLCBjb25maWd1cmF0aW9uKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgTmVvNGpHcmFwaChmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmNvcHkoY29uZmlndXJhdGlvbik7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBkaXJlY3RvcnkgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0U3RyaW5nKENPTkZJR19ESVJFQ1RPUlkpOwotICAgICAgICBmaW5hbCBNYXAgbmVvNGpTcGVjaWZpY0NvbmZpZyA9IENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIuZ2V0TWFwKHRoaXMuY29uZmlndXJhdGlvbi5zdWJzZXQoQ09ORklHX0NPTkYpKTsKLSAgICAgICAgdGhpcy5iYXNlR3JhcGggPSBOZW80akZhY3RvcnkuQnVpbGRlci5vcGVuKGRpcmVjdG9yeSwgbmVvNGpTcGVjaWZpY0NvbmZpZyk7Ci0gICAgICAgIHRoaXMuaW5pdGlhbGl6ZSh0aGlzLmJhc2VHcmFwaCwgY29uZmlndXJhdGlvbik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT3BlbiBhIG5ldyB7QGxpbmsgTmVvNGpHcmFwaH0gaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGluc3RhbmNlCi0gICAgICogQHJldHVybiBhIG5ld2x5IG9wZW5lZCB7QGxpbmsgR3JhcGh9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBOZW80akdyYXBoIG9wZW4oZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChudWxsID09IGNvbmZpZ3VyYXRpb24pIHRocm93IEdyYXBoLkV4Y2VwdGlvbnMuYXJndW1lbnRDYW5Ob3RCZU51bGwoImNvbmZpZ3VyYXRpb24iKTsKLSAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uLmNvbnRhaW5zS2V5KENPTkZJR19ESVJFQ1RPUlkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihTdHJpbmcuZm9ybWF0KCJOZW80aiBjb25maWd1cmF0aW9uIHJlcXVpcmVzIHRoYXQgdGhlICVzIGJlIHNldCIsIENPTkZJR19ESVJFQ1RPUlkpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBOZW80akdyYXBoKGNvbmZpZ3VyYXRpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIE5lbzRqR3JhcGggaW5zdGFuY2UgYnkgc3BlY2lmeWluZyB0aGUgZGlyZWN0b3J5IHRvIGNyZWF0ZSB0aGUgZGF0YWJhc2UgaW4uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTmVvNGpHcmFwaCBvcGVuKGZpbmFsIFN0cmluZyBkaXJlY3RvcnkpIHsKLSAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgQmFzZUNvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgY29uZmlnLnNldFByb3BlcnR5KENPTkZJR19ESVJFQ1RPUlksIGRpcmVjdG9yeSk7Ci0gICAgICAgIHJldHVybiBvcGVuKGNvbmZpZyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgTmVvNGpHcmFwaCBpbnN0YW5jZSB1c2luZyBhbiBleGlzdGluZyBOZW80aiByYXcgaW5zdGFuY2UuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBOZW80akdyYXBoIG9wZW4oZmluYWwgTmVvNGpHcmFwaEFQSSBiYXNlR3JhcGgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZW80akdyYXBoKGJhc2VHcmFwaCwgRU1QVFlfQ09ORklHVVJBVElPTik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFZlcnRleCBhZGRWZXJ0ZXgoZmluYWwgT2JqZWN0Li4uIGtleVZhbHVlcykgewotICAgICAgICBFbGVtZW50SGVscGVyLmxlZ2FsUHJvcGVydHlLZXlWYWx1ZUFycmF5KGtleVZhbHVlcyk7Ci0gICAgICAgIGlmIChFbGVtZW50SGVscGVyLmdldElkVmFsdWUoa2V5VmFsdWVzKS5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIHRocm93IFZlcnRleC5FeGNlcHRpb25zLnVzZXJTdXBwbGllZElkc05vdFN1cHBvcnRlZCgpOwotICAgICAgICB0aGlzLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGZpbmFsIE5lbzRqVmVydGV4IHZlcnRleCA9IG5ldyBOZW80alZlcnRleCh0aGlzLmJhc2VHcmFwaC5jcmVhdGVOb2RlKEVsZW1lbnRIZWxwZXIuZ2V0TGFiZWxWYWx1ZShrZXlWYWx1ZXMpLm9yRWxzZShWZXJ0ZXguREVGQVVMVF9MQUJFTCkuc3BsaXQoTmVvNGpWZXJ0ZXguTEFCRUxfREVMSU1JTkFUT1IpKSwgdGhpcyk7Ci0gICAgICAgIEVsZW1lbnRIZWxwZXIuYXR0YWNoUHJvcGVydGllcyh2ZXJ0ZXgsIGtleVZhbHVlcyk7Ci0gICAgICAgIHJldHVybiB2ZXJ0ZXg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEl0ZXJhdG9yPFZlcnRleD4gdmVydGljZXMoZmluYWwgT2JqZWN0Li4uIHZlcnRleElkcykgewotICAgICAgICB0aGlzLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGlmICgwID09IHZlcnRleElkcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJldHVybiBJdGVyYXRvclV0aWxzLnN0cmVhbSh0aGlzLmdldEJhc2VHcmFwaCgpLmFsbE5vZGVzKCkpCi0gICAgICAgICAgICAgICAgICAgIC5tYXAobm9kZSAtPiAoVmVydGV4KSBuZXcgTmVvNGpWZXJ0ZXgobm9kZSwgdGhpcykpLml0ZXJhdG9yKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyZWFtLm9mKHZlcnRleElkcykKLSAgICAgICAgICAgICAgICAgICAgLm1hcChpZCAtPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgaW5zdGFuY2VvZiBOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoTnVtYmVyKSBpZCkubG9uZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpZCBpbnN0YW5jZW9mIFN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9uZy52YWx1ZU9mKGlkLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBWZXJ0ZXggJiYgKChWZXJ0ZXgpIGlkKS5pZCgpIGluc3RhbmNlb2YgTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKE51bWJlcikgKChWZXJ0ZXgpIGlkKS5pZCgpKS5sb25nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG51bGwgPT0gaWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biB2ZXJ0ZXggaWQgdHlwZTogIiArIGlkKTsKLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgLmZsYXRNYXAoaWQgLT4gewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgaGF2ZSBhIG51bGwgaWQgc28ganVzdCBmaWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09IGlkKSByZXR1cm4gU3RyZWFtLmVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJlYW0ub2YodGhpcy5iYXNlR3JhcGguZ2V0Tm9kZUJ5SWQoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOZW80akhlbHBlci5pc05vdEZvdW5kKGUpKSByZXR1cm4gU3RyZWFtLmVtcHR5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlIC0+IChWZXJ0ZXgpIG5ldyBOZW80alZlcnRleChub2RlLCB0aGlzKSkuaXRlcmF0b3IoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJdGVyYXRvcjxFZGdlPiBlZGdlcyhmaW5hbCBPYmplY3QuLi4gZWRnZUlkcykgewotICAgICAgICB0aGlzLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGlmICgwID09IGVkZ2VJZHMubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZXR1cm4gSXRlcmF0b3JVdGlscy5zdHJlYW0odGhpcy5nZXRCYXNlR3JhcGgoKS5hbGxSZWxhdGlvbnNoaXBzKCkpCi0gICAgICAgICAgICAgICAgICAgIC5tYXAocmVsYXRpb25zaGlwIC0+IChFZGdlKSBuZXcgTmVvNGpFZGdlKHJlbGF0aW9uc2hpcCwgdGhpcykpLml0ZXJhdG9yKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyZWFtLm9mKGVkZ2VJZHMpCi0gICAgICAgICAgICAgICAgICAgIC5tYXAoaWQgLT4gewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkIGluc3RhbmNlb2YgTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKE51bWJlcikgaWQpLmxvbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaWQgaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvbmcudmFsdWVPZihpZC50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlkIGluc3RhbmNlb2YgRWRnZSAmJiAoKEVkZ2UpIGlkKS5pZCgpIGluc3RhbmNlb2YgTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKE51bWJlcikgKChFZGdlKSBpZCkuaWQoKSkubG9uZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChudWxsID09IGlkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gZWRnZSBpZCB0eXBlOiAiICsgaWQpOwotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgICAgICAuZmxhdE1hcChpZCAtPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCBoYXZlIGEgbnVsbCBpZCBzbyBqdXN0IGZpbHRlcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT0gaWQpIHJldHVybiBTdHJlYW0uZW1wdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmVhbS5vZih0aGlzLmJhc2VHcmFwaC5nZXRSZWxhdGlvbnNoaXBCeUlkKGlkKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTmVvNGpIZWxwZXIuaXNOb3RGb3VuZChlKSkgcmV0dXJuIFN0cmVhbS5lbXB0eSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgIC5tYXAocmVsYXRpb25zaGlwIC0+IChFZGdlKSBuZXcgTmVvNGpFZGdlKHJlbGF0aW9uc2hpcCwgdGhpcykpLml0ZXJhdG9yKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPEMgZXh0ZW5kcyBHcmFwaENvbXB1dGVyPiBDIGNvbXB1dGUoZmluYWwgQ2xhc3M8Qz4gZ3JhcGhDb21wdXRlckNsYXNzKSB7Ci0gICAgICAgIHRocm93IEdyYXBoLkV4Y2VwdGlvbnMuZ3JhcGhDb21wdXRlck5vdFN1cHBvcnRlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaENvbXB1dGVyIGNvbXB1dGUoKSB7Ci0gICAgICAgIHRocm93IEdyYXBoLkV4Y2VwdGlvbnMuZ3JhcGhDb21wdXRlck5vdFN1cHBvcnRlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUcmFuc2FjdGlvbiB0eCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmVvNGpUcmFuc2FjdGlvbjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVmFyaWFibGVzIHZhcmlhYmxlcygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmVvNGpHcmFwaFZhcmlhYmxlczsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gb2Yge0Bjb2RlIGNsb3NlfSB3aWxsIGFsc28gY2xvc2UgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gb24gdGhlIHRocmVhZCwgYnV0IGl0Ci0gICAgICogaXMgdXAgdG8gdGhlIGNhbGxlciB0byBkZWFsIHdpdGggZGFuZ2xpbmcgdHJhbnNhY3Rpb25zIGluIG90aGVyIHRocmVhZHMgcHJpb3IgdG8gY2FsbGluZyB0aGlzIG1ldGhvZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0aGlzLnR4KCkuY2xvc2UoKTsKLSAgICAgICAgaWYgKHRoaXMuYmFzZUdyYXBoICE9IG51bGwpIHRoaXMuYmFzZUdyYXBoLnNodXRkb3duKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3RvcnkuZ3JhcGhTdHJpbmcodGhpcywgYmFzZUdyYXBoLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBGZWF0dXJlcyBmZWF0dXJlcygpIHsKLSAgICAgICAgcmV0dXJuIGZlYXR1cmVzOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZW80akdyYXBoQVBJIGdldEJhc2VHcmFwaCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYmFzZUdyYXBoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEV4ZWN1dGUgdGhlIEN5cGhlciBxdWVyeSBhbmQgZ2V0IHRoZSByZXN1bHQgc2V0IGFzIGEge0BsaW5rIEdyYXBoVHJhdmVyc2FsfS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBxdWVyeSB0aGUgQ3lwaGVyIHF1ZXJ5IHRvIGV4ZWN1dGUKLSAgICAgKiBAcmV0dXJuIGEgZmx1ZW50IEdyZW1saW4gdHJhdmVyc2FsCi0gICAgICovCi0gICAgcHVibGljIDxTLCBFPiBHcmFwaFRyYXZlcnNhbDxTLCBFPiBjeXBoZXIoZmluYWwgU3RyaW5nIHF1ZXJ5KSB7Ci0gICAgICAgIHJldHVybiBjeXBoZXIocXVlcnksIENvbGxlY3Rpb25zLmVtcHR5TWFwKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEV4ZWN1dGUgdGhlIEN5cGhlciBxdWVyeSB3aXRoIHByb3ZpZGVkIHBhcmFtZXRlcnMgYW5kIGdldCB0aGUgcmVzdWx0IHNldCBhcyBhIHtAbGluayBHcmFwaFRyYXZlcnNhbH0uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcXVlcnkgICAgICB0aGUgQ3lwaGVyIHF1ZXJ5IHRvIGV4ZWN1dGUKLSAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgQ3lwaGVyIHF1ZXJ5Ci0gICAgICogQHJldHVybiBhIGZsdWVudCBHcmVtbGluIHRyYXZlcnNhbAotICAgICAqLwotICAgIHB1YmxpYyA8UywgRT4gR3JhcGhUcmF2ZXJzYWw8UywgRT4gY3lwaGVyKGZpbmFsIFN0cmluZyBxdWVyeSwgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHRoaXMudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48UywgRT4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KHRoaXMpOwotICAgICAgICB0cmF2ZXJzYWwuYWRkU3RlcChuZXcgQ3lwaGVyU3RhcnRTdGVwKHRyYXZlcnNhbCwgcXVlcnksIG5ldyBOZW80akN5cGhlckl0ZXJhdG9yPD4oKEl0ZXJhdG9yKSB0aGlzLmJhc2VHcmFwaC5leGVjdXRlKHF1ZXJ5LCBwYXJhbWV0ZXJzKSwgdGhpcykpKTsKLSAgICAgICAgcmV0dXJuIHRyYXZlcnNhbDsKLSAgICB9Ci0KLSAgICBjbGFzcyBOZW80alRyYW5zYWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RUaHJlYWRMb2NhbFRyYW5zYWN0aW9uIHsKLQotICAgICAgICBwcm90ZWN0ZWQgZmluYWwgVGhyZWFkTG9jYWw8TmVvNGpUeD4gdGhyZWFkTG9jYWxUeCA9IFRocmVhZExvY2FsLndpdGhJbml0aWFsKCgpIC0+IG51bGwpOwotCi0gICAgICAgIHB1YmxpYyBOZW80alRyYW5zYWN0aW9uKCkgewotICAgICAgICAgICAgc3VwZXIoTmVvNGpHcmFwaC50aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBkb09wZW4oKSB7Ci0gICAgICAgICAgICB0aHJlYWRMb2NhbFR4LnNldChnZXRCYXNlR3JhcGgoKS50eCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBkb0NvbW1pdCgpIHRocm93cyBUcmFuc2FjdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICB0cnkgKE5lbzRqVHggdHggPSB0aHJlYWRMb2NhbFR4LmdldCgpKSB7Ci0gICAgICAgICAgICAgICAgdHguc3VjY2VzcygpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRyYW5zYWN0aW9uRXhjZXB0aW9uKGV4KTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgdGhyZWFkTG9jYWxUeC5yZW1vdmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBkb1JvbGxiYWNrKCkgdGhyb3dzIFRyYW5zYWN0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgICAgIHRyeSAoTmVvNGpUeCB0eCA9IHRocmVhZExvY2FsVHguZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICB0eC5mYWlsdXJlKCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcmFuc2FjdGlvbkV4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgdGhyZWFkTG9jYWxUeC5yZW1vdmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc09wZW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHRocmVhZExvY2FsVHguZ2V0KCkgIT0gbnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgTmVvNGpHcmFwaEZlYXR1cmVzIGltcGxlbWVudHMgRmVhdHVyZXMgewotICAgICAgICBwcm90ZWN0ZWQgR3JhcGhGZWF0dXJlcyBncmFwaEZlYXR1cmVzID0gbmV3IE5lbzRqR3JhcGhHcmFwaEZlYXR1cmVzKCk7Ci0gICAgICAgIHByb3RlY3RlZCBWZXJ0ZXhGZWF0dXJlcyB2ZXJ0ZXhGZWF0dXJlcyA9IG5ldyBOZW80alZlcnRleEZlYXR1cmVzKCk7Ci0gICAgICAgIHByb3RlY3RlZCBFZGdlRmVhdHVyZXMgZWRnZUZlYXR1cmVzID0gbmV3IE5lbzRqRWRnZUZlYXR1cmVzKCk7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBHcmFwaEZlYXR1cmVzIGdyYXBoKCkgewotICAgICAgICAgICAgcmV0dXJuIGdyYXBoRmVhdHVyZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIFZlcnRleEZlYXR1cmVzIHZlcnRleCgpIHsKLSAgICAgICAgICAgIHJldHVybiB2ZXJ0ZXhGZWF0dXJlczsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgRWRnZUZlYXR1cmVzIGVkZ2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZWRnZUZlYXR1cmVzOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nRmFjdG9yeS5mZWF0dXJlU3RyaW5nKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGNsYXNzIE5lbzRqR3JhcGhHcmFwaEZlYXR1cmVzIGltcGxlbWVudHMgR3JhcGhGZWF0dXJlcyB7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgVmFyaWFibGVGZWF0dXJlcyB2YXJpYWJsZUZlYXR1cmVzID0gbmV3IE5lbzRqR3JhcGhWYXJpYWJsZXMuTmVvNGpWYXJpYWJsZUZlYXR1cmVzKCk7Ci0KLSAgICAgICAgICAgIE5lbzRqR3JhcGhHcmFwaEZlYXR1cmVzKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzQ29uY3VycmVudEFjY2VzcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNDb21wdXRlcigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIFZhcmlhYmxlRmVhdHVyZXMgdmFyaWFibGVzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZUZlYXR1cmVzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzVGhyZWFkZWRUcmFuc2FjdGlvbnMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGNsYXNzIE5lbzRqVmVydGV4RmVhdHVyZXMgZXh0ZW5kcyBOZW80akVsZW1lbnRGZWF0dXJlcyBpbXBsZW1lbnRzIFZlcnRleEZlYXR1cmVzIHsKLQotICAgICAgICAgICAgcHJpdmF0ZSBmaW5hbCBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzIHZlcnRleFByb3BlcnR5RmVhdHVyZXMgPSBuZXcgTmVvNGpWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzKCk7Ci0KLSAgICAgICAgICAgIHByb3RlY3RlZCBOZW80alZlcnRleEZlYXR1cmVzKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzIHByb3BlcnRpZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlcnRleFByb3BlcnR5RmVhdHVyZXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNNZXRhUHJvcGVydGllcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNNdWx0aVByb3BlcnRpZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzVXNlclN1cHBsaWVkSWRzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkgZ2V0Q2FyZGluYWxpdHkoZmluYWwgU3RyaW5nIGtleSkgewotICAgICAgICAgICAgICAgIHJldHVybiBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eS5zaW5nbGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgY2xhc3MgTmVvNGpFZGdlRmVhdHVyZXMgZXh0ZW5kcyBOZW80akVsZW1lbnRGZWF0dXJlcyBpbXBsZW1lbnRzIEVkZ2VGZWF0dXJlcyB7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgZmluYWwgRWRnZVByb3BlcnR5RmVhdHVyZXMgZWRnZVByb3BlcnR5RmVhdHVyZXMgPSBuZXcgTmVvNGpFZGdlUHJvcGVydHlGZWF0dXJlcygpOwotCi0gICAgICAgICAgICBOZW80akVkZ2VGZWF0dXJlcygpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgRWRnZVByb3BlcnR5RmVhdHVyZXMgcHJvcGVydGllcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZWRnZVByb3BlcnR5RmVhdHVyZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgY2xhc3MgTmVvNGpFbGVtZW50RmVhdHVyZXMgaW1wbGVtZW50cyBFbGVtZW50RmVhdHVyZXMgewotCi0gICAgICAgICAgICBOZW80akVsZW1lbnRGZWF0dXJlcygpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c051bGxQcm9wZXJ0eVZhbHVlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNVc2VyU3VwcGxpZWRJZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzU3RyaW5nSWRzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1V1aWRJZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzQW55SWRzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0N1c3RvbUlkcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgY2xhc3MgTmVvNGpWZXJ0ZXhQcm9wZXJ0eUZlYXR1cmVzIGltcGxlbWVudHMgVmVydGV4UHJvcGVydHlGZWF0dXJlcyB7Ci0KLSAgICAgICAgICAgIE5lbzRqVmVydGV4UHJvcGVydHlGZWF0dXJlcygpIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c051bGxQcm9wZXJ0eVZhbHVlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNNYXBWYWx1ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTWl4ZWRMaXN0VmFsdWVzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c1NlcmlhbGl6YWJsZVZhbHVlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNVbmlmb3JtTGlzdFZhbHVlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNVc2VyU3VwcGxpZWRJZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzQW55SWRzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBjbGFzcyBOZW80akVkZ2VQcm9wZXJ0eUZlYXR1cmVzIGltcGxlbWVudHMgRWRnZVByb3BlcnR5RmVhdHVyZXMgewotCi0gICAgICAgICAgICBOZW80akVkZ2VQcm9wZXJ0eUZlYXR1cmVzKCkgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTWFwVmFsdWVzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c01peGVkTGlzdFZhbHVlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNTZXJpYWxpemFibGVWYWx1ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzVW5pZm9ybUxpc3RWYWx1ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akdyYXBoVmFyaWFibGVzLmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpHcmFwaFZhcmlhYmxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmMwYTEzLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akdyYXBoVmFyaWFibGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkdyYXBoVmFyaWFibGVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqR3JhcGhBUEk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuT3B0aW9uYWw7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIE5lbzRqR3JhcGhWYXJpYWJsZXMgaW1wbGVtZW50cyBHcmFwaC5WYXJpYWJsZXMgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBOZW80akdyYXBoIGdyYXBoOwotICAgIHByaXZhdGUgZmluYWwgTmVvNGpHcmFwaEFQSSBiYXNlR3JhcGg7Ci0KLSAgICBwcm90ZWN0ZWQgTmVvNGpHcmFwaFZhcmlhYmxlcyhmaW5hbCBOZW80akdyYXBoIGdyYXBoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGggPSBncmFwaDsKLSAgICAgICAgYmFzZUdyYXBoID0gZ3JhcGguZ2V0QmFzZUdyYXBoKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldDxTdHJpbmc+IGtleXMoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4ga2V5cyA9IG5ldyBIYXNoU2V0PD4oKTsKLSAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcga2V5IDogdGhpcy5iYXNlR3JhcGguZ2V0S2V5cygpKSB7Ci0gICAgICAgICAgICBpZiAoIUdyYXBoLkhpZGRlbi5pc0hpZGRlbihrZXkpKQotICAgICAgICAgICAgICAgIGtleXMuYWRkKGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGtleXM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxSPiBPcHRpb25hbDxSPiBnZXQoZmluYWwgU3RyaW5nIGtleSkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLmJhc2VHcmFwaC5oYXNQcm9wZXJ0eShrZXkpID8KLSAgICAgICAgICAgICAgICBPcHRpb25hbC5vZigoUikgdGhpcy5iYXNlR3JhcGguZ2V0UHJvcGVydHkoa2V5KSkgOgotICAgICAgICAgICAgICAgIE9wdGlvbmFsLjxSPmVtcHR5KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0KGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIE9iamVjdCB2YWx1ZSkgewotICAgICAgICBHcmFwaFZhcmlhYmxlSGVscGVyLnZhbGlkYXRlVmFyaWFibGUoa2V5LCB2YWx1ZSk7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuYmFzZUdyYXBoLnNldFByb3BlcnR5KGtleSwgdmFsdWUpOwotICAgICAgICB9IGNhdGNoIChmaW5hbCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgR3JhcGguVmFyaWFibGVzLkV4Y2VwdGlvbnMuZGF0YVR5cGVPZlZhcmlhYmxlVmFsdWVOb3RTdXBwb3J0ZWQodmFsdWUsIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKGZpbmFsIFN0cmluZyBrZXkpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICBpZiAodGhpcy5iYXNlR3JhcGguaGFzUHJvcGVydHkoa2V5KSkKLSAgICAgICAgICAgIHRoaXMuYmFzZUdyYXBoLnJlbW92ZVByb3BlcnR5KGtleSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3RvcnkuZ3JhcGhWYXJpYWJsZXNTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBOZW80alZhcmlhYmxlRmVhdHVyZXMgaW1wbGVtZW50cyBHcmFwaC5GZWF0dXJlcy5WYXJpYWJsZUZlYXR1cmVzIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzQm9vbGVhblZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzRG91YmxlVmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNGbG9hdFZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzSW50ZWdlclZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTG9uZ1ZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTWFwVmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTWl4ZWRMaXN0VmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzQnl0ZVZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0Jvb2xlYW5BcnJheVZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzQnl0ZUFycmF5VmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzRG91YmxlQXJyYXlWYWx1ZXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0Zsb2F0QXJyYXlWYWx1ZXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c0ludGVnZXJBcnJheVZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzTG9uZ0FycmF5VmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNTdHJpbmdBcnJheVZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzU2VyaWFsaXphYmxlVmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzU3RyaW5nVmFsdWVzKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNVbmlmb3JtTGlzdFZhbHVlcygpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpIZWxwZXIuamF2YSBiL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akhlbHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTJlZDY4Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80akhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb247Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpOb2RlOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGRlcHJlY2F0ZWQgU2VlOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy41LjcvcmVmZXJlbmNlLyNuZW80ai1ncmVtbGluCi0gKi8KLUBEZXByZWNhdGVkCi1wdWJsaWMgZmluYWwgY2xhc3MgTmVvNGpIZWxwZXIgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PVF9GT1VORF9FWENFUFRJT04gPSAiTm90Rm91bmRFeGNlcHRpb24iOwotCi0gICAgcHJpdmF0ZSBOZW80akhlbHBlcigpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqRGlyZWN0aW9uIG1hcERpcmVjdGlvbihmaW5hbCBEaXJlY3Rpb24gZGlyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24uZXF1YWxzKERpcmVjdGlvbi5PVVQpKQotICAgICAgICAgICAgcmV0dXJuIG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqRGlyZWN0aW9uLk9VVEdPSU5HOwotICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24uZXF1YWxzKERpcmVjdGlvbi5JTikpCi0gICAgICAgICAgICByZXR1cm4gb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpEaXJlY3Rpb24uSU5DT01JTkc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBvcmcubmVvNGoudGlua2VycG9wLmFwaS5OZW80akRpcmVjdGlvbi5CT1RIOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlbGV0ZWQoZmluYWwgTmVvNGpOb2RlIG5vZGUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG5vZGUuZ2V0S2V5cygpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGNhdGNoIChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGlmIChpc05vdEZvdW5kKGUpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb3RGb3VuZChmaW5hbCBSdW50aW1lRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgIHJldHVybiBleC5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKS5lcXVhbHMoTk9UX0ZPVU5EX0VYQ0VQVElPTik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBOZW80ak5vZGUgZ2V0VmVydGV4UHJvcGVydHlOb2RlKGZpbmFsIE5lbzRqVmVydGV4UHJvcGVydHkgdmVydGV4UHJvcGVydHkpIHsKLSAgICAgICAgcmV0dXJuIHZlcnRleFByb3BlcnR5LnZlcnRleFByb3BlcnR5Tm9kZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VmVydGV4UHJvcGVydHlOb2RlKGZpbmFsIE5lbzRqVmVydGV4UHJvcGVydHkgdmVydGV4UHJvcGVydHksIGZpbmFsIE5lbzRqTm9kZSBub2RlKSB7Ci0gICAgICAgIHZlcnRleFByb3BlcnR5LnZlcnRleFByb3BlcnR5Tm9kZSA9IG5vZGU7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80alByb3BlcnR5LmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjIzZDNjLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80alByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5FbGVtZW50SGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuU3RyaW5nRmFjdG9yeTsKLWltcG9ydCBvcmcubmVvNGoudGlua2VycG9wLmFwaS5OZW80akVudGl0eTsKLQotLyoqCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKiBAZGVwcmVjYXRlZCBTZWU6IGh0dHBzOi8vdGlua2VycG9wLmFwYWNoZS5vcmcvZG9jcy8zLjUuNy9yZWZlcmVuY2UvI25lbzRqLWdyZW1saW4KLSAqLwotQERlcHJlY2F0ZWQKLXB1YmxpYyBmaW5hbCBjbGFzcyBOZW80alByb3BlcnR5PFY+IGltcGxlbWVudHMgUHJvcGVydHk8Vj4gewotCi0gICAgcHJvdGVjdGVkIGZpbmFsIEVsZW1lbnQgZWxlbWVudDsKLSAgICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGtleTsKLSAgICBwcm90ZWN0ZWQgZmluYWwgTmVvNGpHcmFwaCBncmFwaDsKLSAgICBwcm90ZWN0ZWQgViB2YWx1ZTsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiByZW1vdmVkID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgTmVvNGpQcm9wZXJ0eShmaW5hbCBFbGVtZW50IGVsZW1lbnQsIGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKLSAgICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgdGhpcy5ncmFwaCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBOZW80alZlcnRleFByb3BlcnR5ID8KLSAgICAgICAgICAgICAgICAoKE5lbzRqVmVydGV4KSAoKChOZW80alZlcnRleFByb3BlcnR5KSBlbGVtZW50KS5lbGVtZW50KCkpKS5ncmFwaCA6Ci0gICAgICAgICAgICAgICAgKChOZW80akVsZW1lbnQpIGVsZW1lbnQpLmdyYXBoOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBFbGVtZW50IGVsZW1lbnQoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgewotICAgICAgICBpZiAodGhpcy5yZW1vdmVkKSByZXR1cm47Ci0gICAgICAgIHRoaXMucmVtb3ZlZCA9IHRydWU7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgZmluYWwgTmVvNGpFbnRpdHkgZW50aXR5ID0gdGhpcy5lbGVtZW50IGluc3RhbmNlb2YgTmVvNGpWZXJ0ZXhQcm9wZXJ0eSA/Ci0gICAgICAgICAgICAgICAgKChOZW80alZlcnRleFByb3BlcnR5KSB0aGlzLmVsZW1lbnQpLnZlcnRleFByb3BlcnR5Tm9kZSA6Ci0gICAgICAgICAgICAgICAgKChOZW80akVsZW1lbnQpIHRoaXMuZWxlbWVudCkuZ2V0QmFzZUVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGVudGl0eS5oYXNQcm9wZXJ0eSh0aGlzLmtleSkpIHsKLSAgICAgICAgICAgIGVudGl0eS5yZW1vdmVQcm9wZXJ0eSh0aGlzLmtleSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGtleSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMua2V5OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWIHZhbHVlKCkgewotICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ByZXNlbnQoKSB7Ci0gICAgICAgIHJldHVybiBudWxsICE9IHRoaXMudmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3RvcnkucHJvcGVydHlTdHJpbmcodGhpcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIE9iamVjdCBvYmplY3QpIHsKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRIZWxwZXIuYXJlRXF1YWwodGhpcywgb2JqZWN0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gRWxlbWVudEhlbHBlci5oYXNoQ29kZSh0aGlzKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05lbzRqVmVydGV4LmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpWZXJ0ZXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2FmYzNlMS4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpWZXJ0ZXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkRpcmVjdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLkVsZW1lbnRIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUudXRpbC5TdHJpbmdGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwud3JhcHBlZC5XcmFwcGVkVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udXRpbC5pdGVyYXRvci5JdGVyYXRvclV0aWxzOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5uZW80ai50aW5rZXJwb3AuYXBpLk5lbzRqTm9kZTsKLWltcG9ydCBvcmcubmVvNGoudGlua2VycG9wLmFwaS5OZW80alJlbGF0aW9uc2hpcDsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb24uQk9USDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuRGlyZWN0aW9uLklOOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5EaXJlY3Rpb24uT1VUOwotCi0vKioKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqIEBkZXByZWNhdGVkIFNlZTogaHR0cHM6Ly90aW5rZXJwb3AuYXBhY2hlLm9yZy9kb2NzLzMuNS43L3JlZmVyZW5jZS8jbmVvNGotZ3JlbWxpbgotICovCi1ARGVwcmVjYXRlZAotcHVibGljIGZpbmFsIGNsYXNzIE5lbzRqVmVydGV4IGV4dGVuZHMgTmVvNGpFbGVtZW50IGltcGxlbWVudHMgVmVydGV4LCBXcmFwcGVkVmVydGV4PE5lbzRqTm9kZT4gewotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFCRUxfREVMSU1JTkFUT1IgPSAiOjoiOwotCi0gICAgcHVibGljIE5lbzRqVmVydGV4KGZpbmFsIE5lbzRqTm9kZSBub2RlLCBmaW5hbCBOZW80akdyYXBoIGdyYXBoKSB7Ci0gICAgICAgIHN1cGVyKG5vZGUsIGdyYXBoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgRWRnZSBhZGRFZGdlKGZpbmFsIFN0cmluZyBsYWJlbCwgZmluYWwgVmVydGV4IGluVmVydGV4LCBmaW5hbCBPYmplY3QuLi4ga2V5VmFsdWVzKSB7Ci0gICAgICAgIGlmIChudWxsID09IGluVmVydGV4KSB0aHJvdyBHcmFwaC5FeGNlcHRpb25zLmFyZ3VtZW50Q2FuTm90QmVOdWxsKCJpblZlcnRleCIpOwotICAgICAgICBFbGVtZW50SGVscGVyLnZhbGlkYXRlTGFiZWwobGFiZWwpOwotICAgICAgICBFbGVtZW50SGVscGVyLmxlZ2FsUHJvcGVydHlLZXlWYWx1ZUFycmF5KGtleVZhbHVlcyk7Ci0gICAgICAgIGlmIChFbGVtZW50SGVscGVyLmdldElkVmFsdWUoa2V5VmFsdWVzKS5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIHRocm93IEVkZ2UuRXhjZXB0aW9ucy51c2VyU3VwcGxpZWRJZHNOb3RTdXBwb3J0ZWQoKTsKLQotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGZpbmFsIE5lbzRqTm9kZSBub2RlID0gKE5lbzRqTm9kZSkgdGhpcy5iYXNlRWxlbWVudDsKLSAgICAgICAgZmluYWwgTmVvNGpFZGdlIGVkZ2UgPSBuZXcgTmVvNGpFZGdlKG5vZGUuY29ubmVjdFRvKCgoTmVvNGpWZXJ0ZXgpIGluVmVydGV4KS5nZXRCYXNlVmVydGV4KCksIGxhYmVsKSwgdGhpcy5ncmFwaCk7Ci0gICAgICAgIEVsZW1lbnRIZWxwZXIuYXR0YWNoUHJvcGVydGllcyhlZGdlLCBrZXlWYWx1ZXMpOwotICAgICAgICByZXR1cm4gZWRnZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPFY+IFZlcnRleFByb3BlcnR5PFY+IHByb3BlcnR5KGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucHJvcGVydHkoVmVydGV4UHJvcGVydHkuQ2FyZGluYWxpdHkuc2luZ2xlLCBrZXksIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIE5lbzRqTm9kZSBub2RlID0gKE5lbzRqTm9kZSkgYmFzZUVsZW1lbnQ7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIE5lbzRqUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IG5vZGUucmVsYXRpb25zaGlwcyhOZW80akRpcmVjdGlvbi5CT1RIKSkgewotICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcC5kZWxldGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGUuZGVsZXRlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZ25vcmVkKSB7Ci0gICAgICAgICAgICAvLyB0aGlzIG9uZSBoYXBwZW5zIGlmIHRoZSB2ZXJ0ZXggaXMgc3RpbGwgY2hpbGxpbmcgaW4gdGhlIHR4Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIFJ1bnRpbWVFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGlmICghTmVvNGpIZWxwZXIuaXNOb3RGb3VuZChleCkpIHRocm93IGV4OwotICAgICAgICAgICAgLy8gdGhpcyBvbmUgaGFwcGVucyBpZiB0aGUgdmVydGV4IGlzIGNvbW1pdHRlZAotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxWPiBWZXJ0ZXhQcm9wZXJ0eTxWPiBwcm9wZXJ0eShmaW5hbCBWZXJ0ZXhQcm9wZXJ0eS5DYXJkaW5hbGl0eSBjYXJkaW5hbGl0eSwgZmluYWwgU3RyaW5nIGtleSwgZmluYWwgViB2YWx1ZSwgZmluYWwgT2JqZWN0Li4uIGtleVZhbHVlcykgewotICAgICAgICBFbGVtZW50SGVscGVyLnZhbGlkYXRlUHJvcGVydHkoa2V5LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChFbGVtZW50SGVscGVyLmdldElkVmFsdWUoa2V5VmFsdWVzKS5pc1ByZXNlbnQoKSkKLSAgICAgICAgICAgIHRocm93IFZlcnRleC5FeGNlcHRpb25zLnVzZXJTdXBwbGllZElkc05vdFN1cHBvcnRlZCgpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0KLSAgICAgICAgaWYgKGNhcmRpbmFsaXR5ICE9IFZlcnRleFByb3BlcnR5LkNhcmRpbmFsaXR5LnNpbmdsZSkKLSAgICAgICAgICAgIHRocm93IFZlcnRleFByb3BlcnR5LkV4Y2VwdGlvbnMubXVsdGlQcm9wZXJ0aWVzTm90U3VwcG9ydGVkKCk7Ci0KLSAgICAgICAgaWYgKG51bGwgPT0gdmFsdWUpIHsKLSAgICAgICAgICAgIHByb3BlcnRpZXMoa2V5KS5mb3JFYWNoUmVtYWluaW5nKFZlcnRleFByb3BlcnR5OjpyZW1vdmUpOwotICAgICAgICAgICAgcmV0dXJuIFZlcnRleFByb3BlcnR5LmVtcHR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoa2V5VmFsdWVzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICB0aHJvdyBWZXJ0ZXhQcm9wZXJ0eS5FeGNlcHRpb25zLm1ldGFQcm9wZXJ0aWVzTm90U3VwcG9ydGVkKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmJhc2VFbGVtZW50LnNldFByb3BlcnR5KGtleSwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBOZW80alZlcnRleFByb3BlcnR5PD4odGhpcywga2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0gY2F0Y2ggKGZpbmFsIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKLSAgICAgICAgICAgIHRocm93IFByb3BlcnR5LkV4Y2VwdGlvbnMuZGF0YVR5cGVPZlByb3BlcnR5VmFsdWVOb3RTdXBwb3J0ZWQodmFsdWUsIGlhZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgPFY+IFZlcnRleFByb3BlcnR5PFY+IHByb3BlcnR5KGZpbmFsIFN0cmluZyBrZXkpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQuaGFzUHJvcGVydHkoa2V5KSA/IG5ldyBOZW80alZlcnRleFByb3BlcnR5PD4odGhpcywga2V5LCAoVikgYmFzZUVsZW1lbnQuZ2V0UHJvcGVydHkoa2V5KSkgOiBWZXJ0ZXhQcm9wZXJ0eS48Vj5lbXB0eSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyA8Vj4gSXRlcmF0b3I8VmVydGV4UHJvcGVydHk8Vj4+IHByb3BlcnRpZXMoZmluYWwgU3RyaW5nLi4uIHByb3BlcnR5S2V5cykgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHJldHVybiAoSXRlcmF0b3IpIEl0ZXJhdG9yVXRpbHMuc3RyZWFtKHRoaXMuYmFzZUVsZW1lbnQuZ2V0S2V5cygpKQotICAgICAgICAgICAgICAgIC5maWx0ZXIoa2V5IC0+IEVsZW1lbnRIZWxwZXIua2V5RXhpc3RzKGtleSwgcHJvcGVydHlLZXlzKSkKLSAgICAgICAgICAgICAgICAubWFwKGtleSAtPiBuZXcgTmVvNGpWZXJ0ZXhQcm9wZXJ0eTw+KHRoaXMsIGtleSwgKFYpIHRoaXMuYmFzZUVsZW1lbnQuZ2V0UHJvcGVydHkoa2V5KSkpLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE5lbzRqTm9kZSBnZXRCYXNlVmVydGV4KCkgewotICAgICAgICByZXR1cm4gKE5lbzRqTm9kZSkgdGhpcy5iYXNlRWxlbWVudDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGxhYmVsKCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHJldHVybiBTdHJpbmcuam9pbihMQUJFTF9ERUxJTUlOQVRPUiwgdGhpcy5sYWJlbHMoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEl0ZXJhdG9yPFZlcnRleD4gdmVydGljZXMoZmluYWwgRGlyZWN0aW9uIGRpcmVjdGlvbiwgZmluYWwgU3RyaW5nLi4uIGVkZ2VMYWJlbHMpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICByZXR1cm4gbmV3IEl0ZXJhdG9yPFZlcnRleD4oKSB7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxOZW80alJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwSXRlcmF0b3IgPSAwID09IGVkZ2VMYWJlbHMubGVuZ3RoID8KLSAgICAgICAgICAgICAgICAgICAgQk9USCA9PSBkaXJlY3Rpb24gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMuY29uY2F0KGdldEJhc2VWZXJ0ZXgoKS5yZWxhdGlvbnNoaXBzKE5lbzRqSGVscGVyLm1hcERpcmVjdGlvbihPVVQpKS5pdGVyYXRvcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QmFzZVZlcnRleCgpLnJlbGF0aW9uc2hpcHMoTmVvNGpIZWxwZXIubWFwRGlyZWN0aW9uKElOKSkuaXRlcmF0b3IoKSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJhc2VWZXJ0ZXgoKS5yZWxhdGlvbnNoaXBzKE5lbzRqSGVscGVyLm1hcERpcmVjdGlvbihkaXJlY3Rpb24pKS5pdGVyYXRvcigpIDoKLSAgICAgICAgICAgICAgICAgICAgQk9USCA9PSBkaXJlY3Rpb24gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMuY29uY2F0KGdldEJhc2VWZXJ0ZXgoKS5yZWxhdGlvbnNoaXBzKE5lbzRqSGVscGVyLm1hcERpcmVjdGlvbihPVVQpLCAoZWRnZUxhYmVscykpLml0ZXJhdG9yKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlVmVydGV4KCkucmVsYXRpb25zaGlwcyhOZW80akhlbHBlci5tYXBEaXJlY3Rpb24oSU4pLCAoZWRnZUxhYmVscykpLml0ZXJhdG9yKCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlVmVydGV4KCkucmVsYXRpb25zaGlwcyhOZW80akhlbHBlci5tYXBEaXJlY3Rpb24oZGlyZWN0aW9uKSwgKGVkZ2VMYWJlbHMpKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpb25zaGlwSXRlcmF0b3IuaGFzTmV4dCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBOZW80alZlcnRleCBuZXh0KCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTmVvNGpWZXJ0ZXgodGhpcy5yZWxhdGlvbnNoaXBJdGVyYXRvci5uZXh0KCkub3RoZXIoZ2V0QmFzZVZlcnRleCgpKSwgZ3JhcGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJdGVyYXRvcjxFZGdlPiBlZGdlcyhmaW5hbCBEaXJlY3Rpb24gZGlyZWN0aW9uLCBmaW5hbCBTdHJpbmcuLi4gZWRnZUxhYmVscykgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHJldHVybiBuZXcgSXRlcmF0b3I8RWRnZT4oKSB7Ci0gICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxOZW80alJlbGF0aW9uc2hpcD4gcmVsYXRpb25zaGlwSXRlcmF0b3IgPSAwID09IGVkZ2VMYWJlbHMubGVuZ3RoID8KLSAgICAgICAgICAgICAgICAgICAgQk9USCA9PSBkaXJlY3Rpb24gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMuY29uY2F0KGdldEJhc2VWZXJ0ZXgoKS5yZWxhdGlvbnNoaXBzKE5lbzRqSGVscGVyLm1hcERpcmVjdGlvbihPVVQpKS5pdGVyYXRvcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QmFzZVZlcnRleCgpLnJlbGF0aW9uc2hpcHMoTmVvNGpIZWxwZXIubWFwRGlyZWN0aW9uKElOKSkuaXRlcmF0b3IoKSkgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEJhc2VWZXJ0ZXgoKS5yZWxhdGlvbnNoaXBzKE5lbzRqSGVscGVyLm1hcERpcmVjdGlvbihkaXJlY3Rpb24pKS5pdGVyYXRvcigpIDoKLSAgICAgICAgICAgICAgICAgICAgQk9USCA9PSBkaXJlY3Rpb24gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yVXRpbHMuY29uY2F0KGdldEJhc2VWZXJ0ZXgoKS5yZWxhdGlvbnNoaXBzKE5lbzRqSGVscGVyLm1hcERpcmVjdGlvbihPVVQpLCAoZWRnZUxhYmVscykpLml0ZXJhdG9yKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlVmVydGV4KCkucmVsYXRpb25zaGlwcyhOZW80akhlbHBlci5tYXBEaXJlY3Rpb24oSU4pLCAoZWRnZUxhYmVscykpLml0ZXJhdG9yKCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlVmVydGV4KCkucmVsYXRpb25zaGlwcyhOZW80akhlbHBlci5tYXBEaXJlY3Rpb24oZGlyZWN0aW9uKSwgKGVkZ2VMYWJlbHMpKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpb25zaGlwSXRlcmF0b3IuaGFzTmV4dCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBOZW80akVkZ2UgbmV4dCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5lbzRqRWRnZSh0aGlzLnJlbGF0aW9uc2hpcEl0ZXJhdG9yLm5leHQoKSwgZ3JhcGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIC8vLy8vLy8vLy8vLy8vLyBOZW80alZlcnRleCBTcGVjaWZpYyBNZXRob2RzIGZvciBNdWx0aS1MYWJlbCBTdXBwb3J0IC8vLy8vLy8vLy8vLy8vLwotICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiBsYWJlbHMoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgZmluYWwgU2V0PFN0cmluZz4gbGFiZWxzID0gbmV3IFRyZWVTZXQ8Pih0aGlzLmdldEJhc2VWZXJ0ZXgoKS5sYWJlbHMoKSk7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQobGFiZWxzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRMYWJlbChmaW5hbCBTdHJpbmcgbGFiZWwpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICB0aGlzLmdldEJhc2VWZXJ0ZXgoKS5hZGRMYWJlbChsYWJlbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTGFiZWwoZmluYWwgU3RyaW5nIGxhYmVsKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgdGhpcy5nZXRCYXNlVmVydGV4KCkucmVtb3ZlTGFiZWwobGFiZWwpOwotICAgIH0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ZhY3RvcnkudmVydGV4U3RyaW5nKHRoaXMpOwotICAgIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80alZlcnRleFByb3BlcnR5LmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpWZXJ0ZXhQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGFiNGE2Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OZW80alZlcnRleFByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuRWxlbWVudEhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLlN0cmluZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpOb2RlOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGRlcHJlY2F0ZWQgU2VlOiBodHRwczovL3RpbmtlcnBvcC5hcGFjaGUub3JnL2RvY3MvMy41LjcvcmVmZXJlbmNlLyNuZW80ai1ncmVtbGluCi0gKi8KLUBEZXByZWNhdGVkCi1wdWJsaWMgZmluYWwgY2xhc3MgTmVvNGpWZXJ0ZXhQcm9wZXJ0eTxWPiBpbXBsZW1lbnRzIFZlcnRleFByb3BlcnR5PFY+IHsKLQotICAgIHByb3RlY3RlZCBmaW5hbCBOZW80alZlcnRleCB2ZXJ0ZXg7Ci0gICAgcHJvdGVjdGVkIGZpbmFsIFN0cmluZyBrZXk7Ci0gICAgcHJvdGVjdGVkIGZpbmFsIFYgdmFsdWU7Ci0gICAgcHJvdGVjdGVkIE5lbzRqTm9kZSB2ZXJ0ZXhQcm9wZXJ0eU5vZGU7Ci0KLSAgICBwdWJsaWMgTmVvNGpWZXJ0ZXhQcm9wZXJ0eShmaW5hbCBOZW80alZlcnRleCB2ZXJ0ZXgsIGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFYgdmFsdWUpIHsKLSAgICAgICAgdGhpcy52ZXJ0ZXggPSB2ZXJ0ZXg7Ci0gICAgICAgIHRoaXMua2V5ID0ga2V5OwotICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHRoaXMudmVydGV4UHJvcGVydHlOb2RlID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTmVvNGpWZXJ0ZXhQcm9wZXJ0eShmaW5hbCBOZW80alZlcnRleCB2ZXJ0ZXgsIGZpbmFsIFN0cmluZyBrZXksIGZpbmFsIFYgdmFsdWUsIGZpbmFsIE5lbzRqTm9kZSB2ZXJ0ZXhQcm9wZXJ0eU5vZGUpIHsKLSAgICAgICAgdGhpcy52ZXJ0ZXggPSB2ZXJ0ZXg7Ci0gICAgICAgIHRoaXMua2V5ID0ga2V5OwotICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHRoaXMudmVydGV4UHJvcGVydHlOb2RlID0gdmVydGV4UHJvcGVydHlOb2RlOwotICAgIH0KLQotICAgIHB1YmxpYyBOZW80alZlcnRleFByb3BlcnR5KGZpbmFsIE5lbzRqVmVydGV4IHZlcnRleCwgZmluYWwgTmVvNGpOb2RlIHZlcnRleFByb3BlcnR5Tm9kZSkgewotICAgICAgICB0aGlzLnZlcnRleCA9IHZlcnRleDsKLSAgICAgICAgdGhpcy5rZXkgPSAoU3RyaW5nKSB2ZXJ0ZXhQcm9wZXJ0eU5vZGUuZ2V0UHJvcGVydHkoVC5rZXkuZ2V0QWNjZXNzb3IoKSk7Ci0gICAgICAgIHRoaXMudmFsdWUgPSAoVikgdmVydGV4UHJvcGVydHlOb2RlLmdldFByb3BlcnR5KFQudmFsdWUuZ2V0QWNjZXNzb3IoKSk7Ci0gICAgICAgIHRoaXMudmVydGV4UHJvcGVydHlOb2RlID0gdmVydGV4UHJvcGVydHlOb2RlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWZXJ0ZXggZWxlbWVudCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMudmVydGV4OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgaWQoKSB7Ci0gICAgICAgIC8vIFRPRE86IE5lbzRqIG5lZWRzIGEgYmV0dGVyIElEIHN5c3RlbSBmb3IgVmVydGV4UHJvcGVydGllcwotICAgICAgICByZXR1cm4gKGxvbmcpICh0aGlzLmtleS5oYXNoQ29kZSgpICsgdGhpcy52YWx1ZS5oYXNoQ29kZSgpICsgdGhpcy52ZXJ0ZXguaWQoKS5oYXNoQ29kZSgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGtleSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMua2V5OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBWIHZhbHVlKCkgdGhyb3dzIE5vU3VjaEVsZW1lbnRFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ByZXNlbnQoKSB7Ci0gICAgICAgIHJldHVybiBudWxsICE9IHRoaXMudmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxVPiBJdGVyYXRvcjxQcm9wZXJ0eTxVPj4gcHJvcGVydGllcyhmaW5hbCBTdHJpbmcuLi4gcHJvcGVydHlLZXlzKSB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUl0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxVPiBQcm9wZXJ0eTxVPiBwcm9wZXJ0eShmaW5hbCBTdHJpbmcga2V5LCBmaW5hbCBVIHZhbHVlKSB7Ci0gICAgICAgIHRocm93IFZlcnRleFByb3BlcnR5LkV4Y2VwdGlvbnMubWV0YVByb3BlcnRpZXNOb3RTdXBwb3J0ZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7Ci0gICAgICAgIHRoaXMudmVydGV4LmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGZpbmFsIE5lbzRqTm9kZSBub2RlID0gKChOZW80alZlcnRleCkgZWxlbWVudCgpKS5nZXRCYXNlVmVydGV4KCk7Ci0gICAgICAgIGlmIChub2RlLmhhc1Byb3BlcnR5KGtleSkpIG5vZGUucmVtb3ZlUHJvcGVydHkoa2V5KTsKLSAgICAgICAgdGhpcy52ZXJ0ZXhQcm9wZXJ0eU5vZGU9IG51bGw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNldDxTdHJpbmc+IGtleXMoKSB7Ci0gICAgICAgIGlmKG51bGwgPT0gdGhpcy52ZXJ0ZXhQcm9wZXJ0eU5vZGUpIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eVNldCgpOwotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBrZXlzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgICAgICBmb3IgKGZpbmFsIFN0cmluZyBrZXkgOiB0aGlzLnZlcnRleFByb3BlcnR5Tm9kZS5nZXRLZXlzKCkpIHsKLSAgICAgICAgICAgIGlmICghR3JhcGguSGlkZGVuLmlzSGlkZGVuKGtleSkgJiYgIWtleS5lcXVhbHModGhpcy5rZXkpKQotICAgICAgICAgICAgICAgIGtleXMuYWRkKGtleSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChrZXlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG9iamVjdCkgewotICAgICAgICByZXR1cm4gRWxlbWVudEhlbHBlci5hcmVFcXVhbCh0aGlzLCBvYmplY3QpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIHJldHVybiBFbGVtZW50SGVscGVyLmhhc2hDb2RlKChFbGVtZW50KSB0aGlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gU3RyaW5nRmFjdG9yeS5wcm9wZXJ0eVN0cmluZyh0aGlzKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblBsdWdpbiBiL25lbzRqLWdyZW1saW4vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkdyZW1saW5QbHVnaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiODZlNTcuLjAwMDAwMDAKLS0tIGEvbmVvNGotZ3JlbWxpbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5qc3IyMjMuR3JlbWxpblBsdWdpbgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouanNyMjIzLk5lbzRqR3JlbWxpblBsdWdpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL0Fic3RyYWN0TmVvNGpHcmFwaFByb3ZpZGVyLmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9BYnN0cmFjdE5lbzRqR3JhcGhQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWE2YjZlLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL0Fic3RyYWN0TmVvNGpHcmFwaFByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ajsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uQWJzdHJhY3RHcmFwaFByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpFZGdlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGhWYXJpYWJsZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80alZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80alZlcnRleFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5PcHRpb25hbDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLS8qKgotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROZW80akdyYXBoUHJvdmlkZXIgZXh0ZW5kcyBBYnN0cmFjdEdyYXBoUHJvdmlkZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNldDxDbGFzcz4gSU1QTEVNRU5UQVRJT05TID0gbmV3IEhhc2hTZXQ8Q2xhc3M+KCkge3sKLSAgICAgICAgYWRkKE5lbzRqRWRnZS5jbGFzcyk7Ci0gICAgICAgIGFkZChOZW80akVsZW1lbnQuY2xhc3MpOwotICAgICAgICBhZGQoTmVvNGpHcmFwaC5jbGFzcyk7Ci0gICAgICAgIGFkZChOZW80akdyYXBoVmFyaWFibGVzLmNsYXNzKTsKLSAgICAgICAgYWRkKE5lbzRqUHJvcGVydHkuY2xhc3MpOwotICAgICAgICBhZGQoTmVvNGpWZXJ0ZXguY2xhc3MpOwotICAgICAgICBhZGQoTmVvNGpWZXJ0ZXhQcm9wZXJ0eS5jbGFzcyk7Ci0gICAgfX07Ci0KLSAgICBwcm90ZWN0ZWQgR3JhcGguRmVhdHVyZXMgZmVhdHVyZXMgPSBudWxsOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEdyYXBoIG9wZW5UZXN0R3JhcGgoZmluYWwgQ29uZmlndXJhdGlvbiBjb25maWcpIHsKLSAgICAgICAgZmluYWwgR3JhcGggZ3JhcGggPSBzdXBlci5vcGVuVGVzdEdyYXBoKGNvbmZpZyk7Ci0KLSAgICAgICAgLy8gd2UgY2FuIGp1c3QgdXNlIHRoZSBpbml0aWFsIHNldCBvZiBmZWF0dXJlcyB0YWtlbiBmcm9tIHRoZSBmaXJzdCBncmFwaCBnZW5lcmF0ZWQgZnJvbSB0aGUgcHJvdmlkZXIgYmVjYXVzZQotICAgICAgICAvLyBuZW80aiBmZWF0dXJlIHdvbid0IGV2ZXIgY2hhbmdlLiBkb24ndCB0aGluayB0aGVyZSBpcyBhbnkgZGFuZ2VyIG9mIGtlZXBpbmcgdGhpcyBpbnN0YW5jZSBhYm91dCBldmVuIGlmCi0gICAgICAgIC8vIHRoZSBvcmlnaW5hbCBncmFwaCBpbnN0YW5jZSBnb2VzIG91dCBvZiBzY29wZS4KLSAgICAgICAgaWYgKG51bGwgPT0gZmVhdHVyZXMpIHsKLSAgICAgICAgICAgIHRoaXMuZmVhdHVyZXMgPSBncmFwaC5mZWF0dXJlcygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBncmFwaDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT3B0aW9uYWw8R3JhcGguRmVhdHVyZXM+IGdldFN0YXRpY0ZlYXR1cmVzKCkgewotICAgICAgICByZXR1cm4gT3B0aW9uYWwub2ZOdWxsYWJsZShmZWF0dXJlcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xlYXIoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChudWxsICE9IGdyYXBoKSB7Ci0gICAgICAgICAgICBpZiAoZ3JhcGgudHgoKS5pc09wZW4oKSkgZ3JhcGgudHgoKS5yb2xsYmFjaygpOwotICAgICAgICAgICAgZ3JhcGguY2xvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChudWxsICE9IGNvbmZpZ3VyYXRpb24gJiYgY29uZmlndXJhdGlvbi5jb250YWluc0tleShOZW80akdyYXBoLkNPTkZJR19ESVJFQ1RPUlkpKSB7Ci0gICAgICAgICAgICAvLyB0aGlzIGlzIGEgbm9uLWluLXNpZGVFZmZlY3RzIGNvbmZpZ3VyYXRpb24gc28gYmxvdyBhd2F5IHRoZSBkaXJlY3RvcnkKLSAgICAgICAgICAgIGZpbmFsIEZpbGUgZ3JhcGhEaXJlY3RvcnkgPSBuZXcgRmlsZShjb25maWd1cmF0aW9uLmdldFN0cmluZyhOZW80akdyYXBoLkNPTkZJR19ESVJFQ1RPUlkpKTsKLSAgICAgICAgICAgIGRlbGV0ZURpcmVjdG9yeShncmFwaERpcmVjdG9yeSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBsb2FkR3JhcGhEYXRhKGZpbmFsIEdyYXBoIGdyYXBoLCBmaW5hbCBMb2FkR3JhcGhXaXRoIGxvYWRHcmFwaFdpdGgsIGZpbmFsIENsYXNzIHRlc3RDbGFzcywgZmluYWwgU3RyaW5nIHRlc3ROYW1lKSB7Ci0gICAgICAgIGlmIChsb2FkR3JhcGhXaXRoICE9IG51bGwpIHRoaXMuY3JlYXRlSW5kaWNlcygoTmVvNGpHcmFwaCkgZ3JhcGgsIGxvYWRHcmFwaFdpdGgudmFsdWUoKSk7Ci0gICAgICAgIHN1cGVyLmxvYWRHcmFwaERhdGEoZ3JhcGgsIGxvYWRHcmFwaFdpdGgsIHRlc3RDbGFzcywgdGVzdE5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkcm9wSW5kaWNlcyhmaW5hbCBOZW80akdyYXBoIGdyYXBoLCBmaW5hbCBMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YSBncmFwaERhdGEpIHsKLSAgICAgICAgaWYgKGdyYXBoRGF0YS5lcXVhbHMoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuR1JBVEVGVUwpKSB7Ci0gICAgICAgICAgICBncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJEUk9QIElOREVYIE9OIDphcnRpc3QobmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBncmFwaC5jeXBoZXIoIkRST1AgSU5ERVggT04gOnNvbmcobmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBncmFwaC5jeXBoZXIoIkRST1AgSU5ERVggT04gOnNvbmcoc29uZ1R5cGUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJEUk9QIElOREVYIE9OIDpzb25nKHBlcmZvcm1hbmNlcykiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB9IGVsc2UgaWYgKGdyYXBoRGF0YS5lcXVhbHMoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKSkgewotICAgICAgICAgICAgZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiRFJPUCBJTkRFWCBPTiA6cGVyc29uKG5hbWUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJEUk9QIElOREVYIE9OIDpwZXJzb24oYWdlKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiRFJPUCBJTkRFWCBPTiA6c29mdHdhcmUobmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBncmFwaC5jeXBoZXIoIkRST1AgSU5ERVggT04gOnNvZnR3YXJlKGxhbmcpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChncmFwaERhdGEuZXF1YWxzKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkNMQVNTSUMpKSB7Ci0gICAgICAgICAgICBncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJEUk9QIElOREVYIE9OIDp2ZXJ0ZXgobmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBncmFwaC5jeXBoZXIoIkRST1AgSU5ERVggT04gOnZlcnRleChhZ2UpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJEUk9QIElOREVYIE9OIDp2ZXJ0ZXgobGFuZykiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUluZGljZXMoZmluYWwgTmVvNGpHcmFwaCBncmFwaCwgZmluYWwgTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEgZ3JhcGhEYXRhKSB7Ci0gICAgICAgIGZpbmFsIFJhbmRvbSByYW5kb20gPSBUZXN0SGVscGVyLlJBTkRPTTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBwaWNrID0gcmFuZG9tLm5leHRCb29sZWFuKCk7Ci0gICAgICAgIGlmIChncmFwaERhdGEuZXF1YWxzKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLkdSQVRFRlVMKSkgewotICAgICAgICAgICAgaWYgKHBpY2spIHsKLSAgICAgICAgICAgICAgICBncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgICAgIGlmIChyYW5kb20ubmV4dEJvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOmFydGlzdChuYW1lKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocmFuZG9tLm5leHRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpzb25nKG5hbWUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgICAgIGlmIChyYW5kb20ubmV4dEJvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOnNvbmcoc29uZ1R5cGUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgICAgIGlmIChyYW5kb20ubmV4dEJvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOnNvbmcocGVyZm9ybWFuY2VzKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICAgICAgfSAvLyBlbHNlIG5vIGluZGljZXMKLSAgICAgICAgfSBlbHNlIGlmIChncmFwaERhdGEuZXF1YWxzKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikpIHsKLSAgICAgICAgICAgIGlmIChwaWNrKSB7Ci0gICAgICAgICAgICAgICAgZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocmFuZG9tLm5leHRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpwZXJzb24obmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJhbmRvbS5uZXh0Qm9vbGVhbigpKQotICAgICAgICAgICAgICAgICAgICBncmFwaC5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6cGVyc29uKGFnZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJhbmRvbS5uZXh0Qm9vbGVhbigpKQotICAgICAgICAgICAgICAgICAgICBncmFwaC5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6c29mdHdhcmUobmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJhbmRvbS5uZXh0Qm9vbGVhbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpzb2Z0d2FyZShsYW5nKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgICAgIH0gLy8gZWxzZSBubyBpbmRpY2VzCi0gICAgICAgIH0gZWxzZSBpZiAoZ3JhcGhEYXRhLmVxdWFscyhMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5DTEFTU0lDKSkgewotICAgICAgICAgICAgaWYgKHBpY2spIHsKLSAgICAgICAgICAgICAgICBncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgICAgIGlmIChyYW5kb20ubmV4dEJvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGguY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOnZlcnRleChuYW1lKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocmFuZG9tLm5leHRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDp2ZXJ0ZXgoYWdlKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgICAgICBpZiAocmFuZG9tLm5leHRCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDp2ZXJ0ZXgobGFuZykiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgICAgIH0gLy8gZWxzZSBubyBpbmRpY2VzCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU2V0PENsYXNzPiBnZXRJbXBsZW1lbnRhdGlvbnMoKSB7Ci0gICAgICAgIHJldHVybiBJTVBMRU1FTlRBVElPTlM7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL0Fic3RyYWN0TmVvNGpHcmVtbGluVGVzdC5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovQWJzdHJhY3ROZW80akdyZW1saW5UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTllOGQuLjAwMDAwMDAKLS0tIGEvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovQWJzdHJhY3ROZW80akdyZW1saW5UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5BYnN0cmFjdEdyZW1saW5UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlLk5lbzRqR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpHcmFwaEFQSTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotcHVibGljIGNsYXNzIEFic3RyYWN0TmVvNGpHcmVtbGluVGVzdCBleHRlbmRzIEFic3RyYWN0R3JlbWxpblRlc3QgewotCi0gICAgcHJvdGVjdGVkIE5lbzRqR3JhcGggZ2V0R3JhcGgoKSB7Ci0gICAgICAgIHJldHVybiAoTmVvNGpHcmFwaCkgdGhpcy5ncmFwaDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgTmVvNGpHcmFwaEFQSSBnZXRCYXNlR3JhcGgoKSB7Ci0gICAgICAgIHJldHVybiAoKE5lbzRqR3JhcGgpIHRoaXMuZ3JhcGgpLmdldEJhc2VHcmFwaCgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlQ291bnRzKGludCBnViwgaW50IGdFLCBpbnQgZ04sIGludCBnUikgewotICAgICAgICBhc3NlcnRFcXVhbHMoZ1YsIEl0ZXJhdG9yVXRpbHMuY291bnQoZ3JhcGgudmVydGljZXMoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZ0UsIEl0ZXJhdG9yVXRpbHMuY291bnQoZ3JhcGguZWRnZXMoKSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZ04sIEl0ZXJhdG9yVXRpbHMuY291bnQodGhpcy5nZXRCYXNlR3JhcGgoKS5hbGxOb2RlcygpKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhnUiwgSXRlcmF0b3JVdGlscy5jb3VudCh0aGlzLmdldEJhc2VHcmFwaCgpLmFsbFJlbGF0aW9uc2hpcHMoKSkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05hdGl2ZU5lbzRqU3VpdGUuamF2YSBiL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05hdGl2ZU5lbzRqU3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4OTQ4Yi4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9OYXRpdmVOZW80alN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5BYnN0cmFjdEdyZW1saW5TdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnByb2Nlc3MuTmF0aXZlTmVvNGpDeXBoZXJDaGVjazsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OYXRpdmVOZW80akluZGV4Q2hlY2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmF0aXZlTmVvNGpTdHJ1Y3R1cmVDaGVjazsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEVuZ2luZTsKLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5tb2RlbC5Jbml0aWFsaXphdGlvbkVycm9yOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLm1vZGVsLlJ1bm5lckJ1aWxkZXI7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLXB1YmxpYyBjbGFzcyBOYXRpdmVOZW80alN1aXRlIGV4dGVuZHMgQWJzdHJhY3RHcmVtbGluU3VpdGUgewotCi0gICAgcHVibGljIE5hdGl2ZU5lbzRqU3VpdGUoZmluYWwgQ2xhc3M8Pz4ga2xhc3MsIGZpbmFsIFJ1bm5lckJ1aWxkZXIgYnVpbGRlcikgdGhyb3dzIEluaXRpYWxpemF0aW9uRXJyb3IgewotICAgICAgICBzdXBlcihrbGFzcywgYnVpbGRlciwKLSAgICAgICAgICAgICAgICBuZXcgQ2xhc3M8Pz5bXXsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZU5lbzRqU3RydWN0dXJlQ2hlY2suY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmVOZW80akluZGV4Q2hlY2suY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBOYXRpdmVOZW80akN5cGhlckNoZWNrLmNsYXNzLAotICAgICAgICAgICAgICAgIH0sIG5ldyBDbGFzczw/PltdewotICAgICAgICAgICAgICAgICAgICAgICAgTmF0aXZlTmVvNGpTdHJ1Y3R1cmVDaGVjay5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZU5lbzRqSW5kZXhDaGVjay5jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgIE5hdGl2ZU5lbzRqQ3lwaGVyQ2hlY2suY2xhc3MKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgICAgIFRyYXZlcnNhbEVuZ2luZS5UeXBlLlNUQU5EQVJEKTsKLSAgICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9OZW80akdyYXBoRmVhdHVyZVRlc3QuamF2YSBiL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05lbzRqR3JhcGhGZWF0dXJlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWUwOTAwLi4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05lbzRqR3JhcGhGZWF0dXJlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGo7Ci0KLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5BYnN0cmFjdE1vZHVsZTsKLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5HdWljZTsKLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3RvcjsKLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5TdGFnZTsKLWltcG9ydCBpby5jdWN1bWJlci5ndWljZS5DdWN1bWJlck1vZHVsZXM7Ci1pbXBvcnQgaW8uY3VjdW1iZXIuZ3VpY2UuR3VpY2VGYWN0b3J5OwotaW1wb3J0IGlvLmN1Y3VtYmVyLmd1aWNlLkluamVjdG9yU291cmNlOwotaW1wb3J0IGlvLmN1Y3VtYmVyLmphdmEuU2NlbmFyaW87Ci1pbXBvcnQgaW8uY3VjdW1iZXIuanVuaXQuQ3VjdW1iZXI7Ci1pbXBvcnQgaW8uY3VjdW1iZXIuanVuaXQuQ3VjdW1iZXJPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5NYXBDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5SYW5kb21TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5UZXN0SGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMuV29ybGQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLkdyeW9SZXNvdXJjZUFjY2VzczsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5Mb2FkR3JhcGhXaXRoLkdyYXBoRGF0YTsKLQotQFJ1bldpdGgoQ3VjdW1iZXIuY2xhc3MpCi1AQ3VjdW1iZXJPcHRpb25zKAotICAgICAgICB0YWdzID0gIm5vdCBATXVsdGlQcm9wZXJ0aWVzIGFuZCBub3QgQE1ldGFQcm9wZXJ0aWVzIGFuZCBub3QgQEdyYXBoQ29tcHV0ZXJPbmx5IGFuZCAiICsKLSAgICAgICAgICAgICAgICJub3QgQERhdGFEYXRlVGltZSBhbmQgbm90IEBEYXRhTGlzdCBhbmQgbm90IEBEYXRhTWFwIGFuZCBub3QgQERhdGFTZXQgYW5kIG5vdCBARGF0YVVVSUQgYW5kICIgKwotICAgICAgICAgICAgICAgIm5vdCBAQWxsb3dOdWxsUHJvcGVydHlWYWx1ZXMgYW5kIG5vdCBAVXNlclN1cHBsaWVkVmVydGV4UHJvcGVydHlJZHMgYW5kIG5vdCBAVXNlclN1cHBsaWVkRWRnZUlkcyBhbmQgIiArCi0gICAgICAgICAgICAgICAibm90IEBVc2VyU3VwcGxpZWRWZXJ0ZXhJZHMgYW5kIG5vdCBAVGlua2VyU2VydmljZVJlZ2lzdHJ5IGFuZCBub3QgQEluc2VydGlvbk9yZGVyaW5nUmVxdWlyZWQgYW5kIG5vdCBAU3RlcEhhc0lkIiwgLy9UT0RPOjogY2FuIHdlIGluY2x1ZGUgaGFzSWQ/Ci0gICAgICAgIGdsdWUgPSB7ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmZlYXR1cmVzIiB9LAotICAgICAgICBvYmplY3RGYWN0b3J5ID0gR3VpY2VGYWN0b3J5LmNsYXNzLAotICAgICAgICBmZWF0dXJlcyA9IHsgImNsYXNzcGF0aDovb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90ZXN0L2ZlYXR1cmVzIiB9LAotICAgICAgICBwbHVnaW4gPSB7InByb2dyZXNzIiwgImp1bml0OnRhcmdldC9jdWN1bWJlci54bWwifSkKLXB1YmxpYyBjbGFzcyBOZW80akdyYXBoRmVhdHVyZVRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihOZW80akdyYXBoRmVhdHVyZVRlc3QuY2xhc3MpOwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBTZXJ2aWNlTW9kdWxlIGV4dGVuZHMgQWJzdHJhY3RNb2R1bGUgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlKCkgewotICAgICAgICAgICAgYmluZChXb3JsZC5jbGFzcykudG8oTmVvNGpHcmFwaFdvcmxkLmNsYXNzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTmVvNGpHcmFwaFdvcmxkIGltcGxlbWVudHMgV29ybGQgewotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5lbzRqR3JhcGggbW9kZXJuID0gTmVvNGpHcmFwaC5vcGVuKG5ldyBNYXBDb25maWd1cmF0aW9uKGdldEJhc2VDb25maWd1cmF0aW9uKEdyYXBoRGF0YS5NT0RFUk4pKSk7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5lbzRqR3JhcGggY2xhc3NpYyA9IE5lbzRqR3JhcGgub3BlbihuZXcgTWFwQ29uZmlndXJhdGlvbihnZXRCYXNlQ29uZmlndXJhdGlvbihHcmFwaERhdGEuQ0xBU1NJQykpKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTmVvNGpHcmFwaCBzaW5rID0gTmVvNGpHcmFwaC5vcGVuKG5ldyBNYXBDb25maWd1cmF0aW9uKGdldEJhc2VDb25maWd1cmF0aW9uKEdyYXBoRGF0YS5TSU5LKSkpOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBOZW80akdyYXBoIGdyYXRlZnVsID0gTmVvNGpHcmFwaC5vcGVuKG5ldyBNYXBDb25maWd1cmF0aW9uKGdldEJhc2VDb25maWd1cmF0aW9uKEdyYXBoRGF0YS5HUkFURUZVTCkpKTsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTmVvNGpHcmFwaCBlbXB0eSA9IE5lbzRqR3JhcGgub3BlbihuZXcgTWFwQ29uZmlndXJhdGlvbihnZXRCYXNlQ29uZmlndXJhdGlvbihudWxsKSkpOwotCi0gICAgICAgIHN0YXRpYyB7Ci0gICAgICAgICAgICBjcmVhdGVJbmRpY2VzKCk7Ci0gICAgICAgICAgICByZWFkSW50b0dyYXBoKG1vZGVybiwgR3JhcGhEYXRhLk1PREVSTik7Ci0gICAgICAgICAgICByZWFkSW50b0dyYXBoKGNsYXNzaWMsIEdyYXBoRGF0YS5DTEFTU0lDKTsKLSAgICAgICAgICAgIHJlYWRJbnRvR3JhcGgoc2luaywgR3JhcGhEYXRhLlNJTkspOwotICAgICAgICAgICAgcmVhZEludG9HcmFwaChncmF0ZWZ1bCwgR3JhcGhEYXRhLkdSQVRFRlVMKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZ2V0R3JhcGhUcmF2ZXJzYWxTb3VyY2UoZmluYWwgR3JhcGhEYXRhIGdyYXBoRGF0YSkgewotICAgICAgICAgICAgaWYgKG51bGwgPT0gZ3JhcGhEYXRhKQotICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eS50cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdyYXBoRGF0YSA9PSBHcmFwaERhdGEuQ0xBU1NJQykKLSAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NpYy50cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdyYXBoRGF0YSA9PSBHcmFwaERhdGEuQ1JFVykKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlRoZSBDcmV3IGRhdGFzZXQgaXMgbm90IHN1cHBvcnRlZCBieSBOZW80aiBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0L21ldGEtcHJvcGVydGllcyIpOwotICAgICAgICAgICAgZWxzZSBpZiAoZ3JhcGhEYXRhID09IEdyYXBoRGF0YS5NT0RFUk4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVybi50cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdyYXBoRGF0YSA9PSBHcmFwaERhdGEuU0lOSykKLSAgICAgICAgICAgICAgICByZXR1cm4gc2luay50cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdyYXBoRGF0YSA9PSBHcmFwaERhdGEuR1JBVEVGVUwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdyYXRlZnVsLnRyYXZlcnNhbCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiR3JhcGhEYXRhIG5vdCBzdXBwb3J0ZWQ6ICIgKyBncmFwaERhdGEubmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBiZWZvcmVFYWNoU2NlbmFyaW8oZmluYWwgU2NlbmFyaW8gc2NlbmFyaW8pIHsKLSAgICAgICAgICAgIGNsZWFuRW1wdHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgU3RyaW5nIGNoYW5nZVBhdGhUb0RhdGFGaWxlKGZpbmFsIFN0cmluZyBwYXRoVG9GaWxlRnJvbUdyZW1saW4pIHsKLSAgICAgICAgICAgIHJldHVybiAiLi4iICsgRmlsZS5zZXBhcmF0b3IgKyBwYXRoVG9GaWxlRnJvbUdyZW1saW47Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZUluZGljZXMoKSB7Ci0gICAgICAgICAgICBncmF0ZWZ1bC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgZ3JhdGVmdWwuY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOmFydGlzdChuYW1lKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGdyYXRlZnVsLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpzb25nKG5hbWUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3JhdGVmdWwuY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOnNvbmcoc29uZ1R5cGUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgZ3JhdGVmdWwuY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOnNvbmcocGVyZm9ybWFuY2VzKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIGdyYXRlZnVsLnR4KCkuY29tbWl0KCk7Ci0KLSAgICAgICAgICAgIG1vZGVybi50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgbW9kZXJuLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpwZXJzb24obmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBtb2Rlcm4uY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOnBlcnNvbihhZ2UpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgbW9kZXJuLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpzb2Z0d2FyZShuYW1lKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIG1vZGVybi5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6c29mdHdhcmUobGFuZykiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBtb2Rlcm4udHgoKS5jb21taXQoKTsKLQotICAgICAgICAgICAgY2xhc3NpYy50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICAgICAgY2xhc3NpYy5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6dmVydGV4KG5hbWUpIikuaXRlcmF0ZSgpOwotICAgICAgICAgICAgY2xhc3NpYy5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6dmVydGV4KGFnZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBjbGFzc2ljLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDp2ZXJ0ZXgobGFuZykiKS5pdGVyYXRlKCk7Ci0gICAgICAgICAgICBjbGFzc2ljLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgY2xlYW5FbXB0eSgpIHsKLSAgICAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBlbXB0eS50cmF2ZXJzYWwoKTsKLSAgICAgICAgICAgIGcuVigpLmRyb3AoKS5pdGVyYXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlYWRJbnRvR3JhcGgoZmluYWwgR3JhcGggZ3JhcGgsIGZpbmFsIEdyYXBoRGF0YSBncmFwaERhdGEpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRhdGFGaWxlID0gVGVzdEhlbHBlci5nZW5lcmF0ZVRlbXBGaWxlRnJvbVJlc291cmNlKGdyYXBoLmdldENsYXNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBHcnlvUmVzb3VyY2VBY2Nlc3MuY2xhc3MsIGdyYXBoRGF0YS5sb2NhdGlvbigpLnN1YnN0cmluZyhncmFwaERhdGEubG9jYXRpb24oKS5sYXN0SW5kZXhPZihGaWxlLnNlcGFyYXRvcikgKyAxKSwgIiIsIGZhbHNlKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgICAgICAgICBncmFwaC50cmF2ZXJzYWwoKS5pbyhkYXRhRmlsZSkucmVhZCgpLml0ZXJhdGUoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oaW9lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRXb3JraW5nRGlyZWN0b3J5KCkgewotICAgICAgICAgICAgcmV0dXJuIFRlc3RIZWxwZXIubWFrZVRlc3REYXRhRGlyZWN0b3J5KE5lbzRqR3JhcGhGZWF0dXJlVGVzdC5jbGFzcywgImdyYXBoLXByb3ZpZGVyLWRhdGEiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBtYWtlVGVzdERpcmVjdG9yeShmaW5hbCBTdHJpbmcgZ3JhcGhOYW1lKSB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0V29ya2luZ0RpcmVjdG9yeSgpICsgRmlsZS5zZXBhcmF0b3IKLSAgICAgICAgICAgICAgICAgICAgKyBSYW5kb21TdHJpbmdVdGlscy5yYW5kb21BbHBoYWJldGljKDEwKSArIEZpbGUuc2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICAgICsgVGVzdEhlbHBlci5jbGVhblBhdGhTZWdtZW50KGdyYXBoTmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEJhc2VDb25maWd1cmF0aW9uKGZpbmFsIExvYWRHcmFwaFdpdGguR3JhcGhEYXRhIGdyYXBoRGF0YSkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRpcmVjdG9yeSA9IG1ha2VUZXN0RGlyZWN0b3J5KGdyYXBoRGF0YSA9PSBudWxsID8gImRlZmF1bHQiIDogZ3JhcGhEYXRhLm5hbWUoKS50b0xvd2VyQ2FzZSgpKTsKLQotICAgICAgICAgICAgZmluYWwgRmlsZSBmID0gbmV3IEZpbGUoZGlyZWN0b3J5KTsKLSAgICAgICAgICAgIGlmIChmLmV4aXN0cygpKSBkZWxldGVEaXJlY3RvcnkoZik7Ci0gICAgICAgICAgICBmLm1rZGlycygpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCkge3sKLSAgICAgICAgICAgICAgICBwdXQoR3JhcGguR1JBUEgsIE5lbzRqR3JhcGguY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwdXQoTmVvNGpHcmFwaC5DT05GSUdfRElSRUNUT1JZLCBkaXJlY3RvcnkpOwotICAgICAgICAgICAgICAgIHB1dChOZW80akdyYXBoLkNPTkZJR19DT05GICsgIi5kYm1zLm1lbW9yeS5wYWdlY2FjaGUuc2l6ZSIsICIxbSIpOwotICAgICAgICAgICAgfX07Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVEaXJlY3RvcnkoZmluYWwgRmlsZSBkaXJlY3RvcnkpIHsKLSAgICAgICAgICAgIGlmIChkaXJlY3RvcnkuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKEZpbGUgZmlsZSA6IGRpcmVjdG9yeS5saXN0RmlsZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXJlY3RvcnkoZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmRlbGV0ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRpcmVjdG9yeS5kZWxldGUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRpcmVjdG9yeS5leGlzdHMoKSkgbG9nZ2VyLmVycm9yKCJ1bmFibGUgdG8gZGVsZXRlIGRpcmVjdG9yeSAiICsgZGlyZWN0b3J5LmdldEFic29sdXRlUGF0aCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgV29ybGRJbmplY3RvclNvdXJjZSBpbXBsZW1lbnRzIEluamVjdG9yU291cmNlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBJbmplY3RvciBnZXRJbmplY3RvcigpIHsKLSAgICAgICAgICAgIHJldHVybiBHdWljZS5jcmVhdGVJbmplY3RvcihTdGFnZS5QUk9EVUNUSU9OLCBDdWN1bWJlck1vZHVsZXMuY3JlYXRlU2NlbmFyaW9Nb2R1bGUoKSwgbmV3IFNlcnZpY2VNb2R1bGUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05lbzRqR3JhcGhOYXRpdmVOZW80alRlc3QuamF2YSBiL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05lbzRqR3JhcGhOYXRpdmVOZW80alRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU0NGY4MC4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9OZW80akdyYXBoTmF0aXZlTmVvNGpUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBSdW5XaXRoKE5hdGl2ZU5lbzRqU3VpdGUuY2xhc3MpCi1AR3JhcGhQcm92aWRlckNsYXNzKHByb3ZpZGVyID0gTmVvNGpHcmFwaFByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IE5lbzRqR3JhcGguY2xhc3MpCi1wdWJsaWMgY2xhc3MgTmVvNGpHcmFwaE5hdGl2ZU5lbzRqVGVzdCB7Ci19CmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9OZW80akdyYXBoUHJvdmlkZXIuamF2YSBiL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05lbzRqR3JhcGhQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2JkYTk3Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL05lbzRqR3JhcGhQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ajsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uTG9hZEdyYXBoV2l0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE5lbzRqR3JhcGhQcm92aWRlciBleHRlbmRzIEFic3RyYWN0TmVvNGpHcmFwaFByb3ZpZGVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRCYXNlQ29uZmlndXJhdGlvbihmaW5hbCBTdHJpbmcgZ3JhcGhOYW1lLCBmaW5hbCBDbGFzczw/PiB0ZXN0LCBmaW5hbCBTdHJpbmcgdGVzdE1ldGhvZE5hbWUsIGZpbmFsIExvYWRHcmFwaFdpdGguR3JhcGhEYXRhIGdyYXBoRGF0YSkgewotICAgICAgICBmaW5hbCBTdHJpbmcgZGlyZWN0b3J5ID0gbWFrZVRlc3REaXJlY3RvcnkoZ3JhcGhOYW1lLCB0ZXN0LCB0ZXN0TWV0aG9kTmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBIYXNoTWFwPFN0cmluZywgT2JqZWN0PigpIHt7Ci0gICAgICAgICAgICBwdXQoR3JhcGguR1JBUEgsIE5lbzRqR3JhcGguY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHB1dChOZW80akdyYXBoLkNPTkZJR19ESVJFQ1RPUlksIGRpcmVjdG9yeSk7Ci0gICAgICAgICAgICBwdXQoTmVvNGpHcmFwaC5DT05GSUdfQ09ORiArICIuZGJtcy5tZW1vcnkucGFnZWNhY2hlLnNpemUiLCAiMW0iKTsKLSAgICAgICAgfX07Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy9OYXRpdmVOZW80akN5cGhlckNoZWNrLmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL05hdGl2ZU5lbzRqQ3lwaGVyQ2hlY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDcxYzJmZS4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL05hdGl2ZU5lbzRqQ3lwaGVyQ2hlY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnByb2Nlc3M7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkxvYWRHcmFwaFdpdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5BYnN0cmFjdE5lbzRqR3JlbWxpblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLlRpbWVVdGlsOwotaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5TdXBwbGllcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5hczsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ud2hlcmU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE5hdGl2ZU5lbzRqQ3lwaGVyQ2hlY2sgZXh0ZW5kcyBBYnN0cmFjdE5lbzRqR3JlbWxpblRlc3QgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihOYXRpdmVOZW80akN5cGhlckNoZWNrLmNsYXNzKTsKLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEV4ZWN1dGVDeXBoZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBmaW5hbCBJdGVyYXRvcjxNYXA8U3RyaW5nLCBPYmplY3Q+PiByZXN1bHQgPSB0aGlzLmdldEdyYXBoKCkuY3lwaGVyKCJNQVRDSCAoYSB7bmFtZTpcIm1hcmtvXCJ9KSBSRVRVUk4gYSIsIENvbGxlY3Rpb25zLmVtcHR5TWFwKCkpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHJlc3VsdCk7Ci0gICAgICAgIGFzc2VydFRydWUocmVzdWx0Lmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkRXhlY3V0ZUN5cGhlcldpdGhBcmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgYmluZGluZ3MucHV0KCJuIiwgIm1hcmtvIik7Ci0gICAgICAgIGZpbmFsIEl0ZXJhdG9yPE1hcDxTdHJpbmcsIE9iamVjdD4+IHJlc3VsdCA9IHRoaXMuZ2V0R3JhcGgoKS5jeXBoZXIoIk1BVENIIChhIHtuYW1lOntufX0pIFJFVFVSTiBhIiwgYmluZGluZ3MpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHJlc3VsdCk7Ci0gICAgICAgIGFzc2VydFRydWUocmVzdWx0Lmhhc05leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBATG9hZEdyYXBoV2l0aChMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5NT0RFUk4pCi0gICAgcHVibGljIHZvaWQgc2hvdWxkRXhlY3V0ZUN5cGhlcldpdGhBcmdzVXNpbmdWZXJ0ZXhJZExpc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgVmVydGV4IHYgPSB0aGlzLmdyYXBoLmFkZFZlcnRleCgibmFtZSIsICJtYXJrbyIpOwotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gaWRMaXN0ID0gQXJyYXlzLmFzTGlzdCh2LmlkKCkpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0KLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBiaW5kaW5ncyA9IG5ldyBIYXNoTWFwPD4oKTsKLSAgICAgICAgYmluZGluZ3MucHV0KCJpZHMiLCBpZExpc3QpOwotICAgICAgICBmaW5hbCBJdGVyYXRvcjxTdHJpbmc+IHJlc3VsdCA9IHRoaXMuZ2V0R3JhcGgoKS5jeXBoZXIoIlNUQVJUIG49bm9kZSh7aWRzfSkgUkVUVVJOIG4iLCBiaW5kaW5ncykuc2VsZWN0KCJuIikudmFsdWVzKCJuYW1lIik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwocmVzdWx0KTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIHJlc3VsdC5uZXh0KCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEV4ZWN1dGVDeXBoZXJBbmRCYWNrVG9HcmVtbGluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIDI5LCAiY29sb3IiLCAicmVkIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIDMwLCAiY29sb3IiLCAieWVsbG93Iik7Ci0KLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBmaW5hbCBUcmF2ZXJzYWwgcmVzdWx0ID0gdGhpcy5nZXRHcmFwaCgpLmN5cGhlcigiTUFUQ0ggKGEge25hbWU6XCJtYXJrb1wifSkgUkVUVVJOIGEiKS5zZWxlY3QoImEiKS5oYXMoImFnZSIsIDI5KS52YWx1ZXMoImNvbG9yIik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwocmVzdWx0KTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJyZWQiLCByZXN1bHQubmV4dCgpLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgQExvYWRHcmFwaFdpdGgoTG9hZEdyYXBoV2l0aC5HcmFwaERhdGEuTU9ERVJOKQotICAgIHB1YmxpYyB2b2lkIHNob3VsZEV4ZWN1dGVNdWx0aUlkV2hlcmVDeXBoZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoIm5hbWUiLCAibWFya28iLCAiYWdlIiwgMjksICJjb2xvciIsICJyZWQiKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoIm5hbWUiLCAibWFya28iLCAiYWdlIiwgMzAsICJjb2xvciIsICJ5ZWxsb3ciKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoIm5hbWUiLCAibWFya28iLCAiYWdlIiwgMzAsICJjb2xvciIsICJvcmFuZ2UiKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotCi0gICAgICAgIGZpbmFsIExpc3Q8T2JqZWN0PiByZXN1bHQgPSB0aGlzLmdldEdyYXBoKCkuY3lwaGVyKCJNQVRDSCAobikgV0hFUkUgaWQobikgSU4gWzEsMl0gUkVUVVJOIG4iKS5zZWxlY3QoIm4iKS5pZCgpLnRvTGlzdCgpOwotICAgICAgICBhc3NlcnROb3ROdWxsKHJlc3VsdCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHQuc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuY29udGFpbnMoMWwpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShyZXN1bHQuY29udGFpbnMoMmwpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBMb2FkR3JhcGhXaXRoKExvYWRHcmFwaFdpdGguR3JhcGhEYXRhLk1PREVSTikKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFeGVjdXRlTXVsdGlJZFdoZXJlV2l0aFBhcmFtQ3lwaGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MSA9IHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIDI5LCAiY29sb3IiLCAicmVkIik7Ci0gICAgICAgIGZpbmFsIFZlcnRleCB2MiA9IHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIDMwLCAiY29sb3IiLCAieWVsbG93Iik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgIm1hcmtvIiwgImFnZSIsIDMwLCAiY29sb3IiLCAib3JhbmdlIik7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLQotICAgICAgICBmaW5hbCBMaXN0PE9iamVjdD4gaWRzID0gQXJyYXlzLmFzTGlzdCh2MS5pZCgpLCB2Mi5pZCgpKTsKLSAgICAgICAgZmluYWwgTWFwPFN0cmluZywgT2JqZWN0PiBtID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBtLnB1dCgiaWRzIiwgaWRzKTsKLSAgICAgICAgZmluYWwgTGlzdDxPYmplY3Q+IHJlc3VsdCA9IHRoaXMuZ2V0R3JhcGgoKS5jeXBoZXIoIk1BVENIIChuKSBXSEVSRSBpZChuKSBJTiB7aWRzfSBSRVRVUk4gbiIsIG0pLnNlbGVjdCgibiIpLmlkKCkudG9MaXN0KCk7Ci0gICAgICAgIGFzc2VydE5vdE51bGwocmVzdWx0KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJlc3VsdC5zaXplKCkpOwotICAgICAgICBhc3NlcnRUcnVlKHJlc3VsdC5jb250YWlucyh2MS5pZCgpKSk7Ci0gICAgICAgIGFzc2VydFRydWUocmVzdWx0LmNvbnRhaW5zKHYyLmlkKCkpKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBJZ25vcmUKLSAgICBATG9hZEdyYXBoV2l0aChMb2FkR3JhcGhXaXRoLkdyYXBoRGF0YS5HUkFURUZVTCkKLSAgICBwdWJsaWMgdm9pZCBiZW5jaG1hcmtDeXBoZXJBbmRNYXRjaCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBOZW80akdyYXBoIG4gPSAoTmVvNGpHcmFwaCkgZ3JhcGg7Ci0gICAgICAgIGZpbmFsIExpc3Q8U3VwcGxpZXI8R3JhcGhUcmF2ZXJzYWw8PywgPz4+PiB0cmF2ZXJzYWxzID0gQXJyYXlzLmFzTGlzdCgKLSAgICAgICAgICAgICAgICAoKSAtPiBnLlYoKS5tYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJhIikuaW4oInN1bmdCeSIpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLmluKCJ3cml0dGVuQnkiKS5hcygiYiIpKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIiksCi0gICAgICAgICAgICAgICAgKCkgLT4gbi5jeXBoZXIoIk1BVENIIChhKTwtWzpzdW5nQnldLShiKSwgKGEpPC1bOndyaXR0ZW5CeV0tKGIpIFJFVFVSTiBhLm5hbWUsIGIubmFtZSIpLAotICAgICAgICAgICAgICAgIC8vLwotICAgICAgICAgICAgICAgICgpIC0+IGcuVigpLm1hdGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYSIpKS5zZWxlY3QoImEiLCAiYiIpLmJ5KCJuYW1lIiksCi0gICAgICAgICAgICAgICAgKCkgLT4gbi5jeXBoZXIoIk1BVENIIChhKS1bOmZvbGxvd2VkQnldLT4oYiksIChiKS1bOmZvbGxvd2VkQnldLT4oYSkgUkVUVVJOIGEubmFtZSwgYi5uYW1lIiksCi0gICAgICAgICAgICAgICAgLy8vCi0gICAgICAgICAgICAgICAgKCkgLT4gZy5WKCkubWF0Y2goCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLm91dCgiZm9sbG93ZWRCeSIpLmNvdW50KCkuaXMoUC5ndCgxMCkpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLmluKCJmb2xsb3dlZEJ5IikuY291bnQoKS5pcyhQLmd0KDEwKSkuYXMoImIiKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoImEiKS5ieSgibmFtZSIpLAotICAgICAgICAgICAgICAgICgpIC0+IG4uY3lwaGVyKCJNQVRDSCAoYSktWzpmb2xsb3dlZEJ5XS0+KGIpIFdJVEggYSwgQ09VTlQoYikgQVMgYmMgV0hFUkUgYmMgPiAxMCBNQVRDSCAoYSk8LVs6Zm9sbG93ZWRCeV0tKGMpIFdJVEggYSwgYmMsIENPVU5UKGMpIEFTIGNjIFdIRVJFIGJjID0gY2MgUkVUVVJOIGEubmFtZSIpLAotICAgICAgICAgICAgICAgIC8vLwotICAgICAgICAgICAgICAgICgpIC0+IGcuVigpLm1hdGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5pbigic3VuZ0J5IikuY291bnQoKS5hcygiYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5pbigic3VuZ0J5IikuYXMoImMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJjIikub3V0KCJmb2xsb3dlZEJ5IikuYXMoImQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJkIikub3V0KCJzdW5nQnkiKS5hcygiZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImUiKS5pbigic3VuZ0J5IikuY291bnQoKS5hcygiYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUoImEiLCBQLm5lcSgiZSIpKSkuc2VsZWN0KCJhIiwgImUiKS5ieSgibmFtZSIpLAotICAgICAgICAgICAgICAgICgpIC0+IG4uY3lwaGVyKCJNQVRDSCAoYSk8LVs6c3VuZ0J5XS0oKS1bOmZvbGxvd2VkQnldLT4oKS1bOnN1bmdCeV0tPihlKSBXSEVSRSBhIDw+IGUgV0lUSCBhLCBlIE1BVENIIChhKTwtWzpzdW5nQnldLShiKSBXSVRIIGEsIGUsIENPVU5UKERJU1RJTkNUIGIpIGFzIGJjIE1BVENIIChlKTwtWzpzdW5nQnldLShmKSBXSVRIIGEsIGUsIGJjLCBDT1VOVChESVNUSU5DVCBmKSBhcyBmYyBXSEVSRSBiYyA9IGZjIFJFVFVSTiBhLm5hbWUsIGUubmFtZSIpLAotICAgICAgICAgICAgICAgIC8vLwotICAgICAgICAgICAgICAgICgpIC0+IGcuVigpLm1hdGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5pbigiZm9sbG93ZWRCeSIpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLm91dCgic3VuZ0J5IikuYXMoImMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJiIikub3V0KCJzdW5nQnkiKS5hcygiYyIpKS5zZWxlY3QoImEiLCAiYiIpLAotICAgICAgICAgICAgICAgICgpIC0+IG4uY3lwaGVyKCJNQVRDSCAoYSk8LVs6Zm9sbG93ZWRCeV0tKGIpLCAoYSktWzpzdW5nQnldLT4oYyksIChiKS1bOnN1bmdCeV0tPihjKSBSRVRVUk4gYSwgYiIpLAotICAgICAgICAgICAgICAgIC8vLwotICAgICAgICAgICAgICAgICgpIC0+IGcuVigpLm1hdGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5pbigiZm9sbG93ZWRCeSIpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLm91dCgic3VuZ0J5IikuYXMoImMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJhIikub3V0KCJ3cml0dGVuQnkiKS5hcygiZCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5vdXQoInN1bmdCeSIpLmFzKCJjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYiIpLm91dCgid3JpdHRlbkJ5IikuYXMoImQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlKCJjIiwgUC5uZXEoImQiKSkpLnNlbGVjdCgiYSIsICJiIikuYnkoIm5hbWUiKSwKLSAgICAgICAgICAgICAgICAoKSAtPiBuLmN5cGhlcigiTUFUQ0ggKGEpPC1bOmZvbGxvd2VkQnldLShiKSwgKGEpLVs6c3VuZ0J5XS0+KGMpLCAoYSktWzp3cml0dGVuQnldLT4oZCksIChiKS1bOnN1bmdCeV0tPihjKSwgKGIpLVs6d3JpdHRlbkJ5XS0+KGQpIFdIRVJFIGMgPD4gZCBSRVRVUk4gYS5uYW1lLCBiLm5hbWUiKSwKLSAgICAgICAgICAgICAgICAvLy8KLSAgICAgICAgICAgICAgICAoKSAtPiBnLlYoKS5tYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJhIikuaW4oInN1bmdCeSIpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLmluKCJ3cml0dGVuQnkiKS5hcygiYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImMiKS5vdXQoInN1bmdCeSIpLmFzKCJhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYyIpLm91dCgid3JpdHRlbkJ5IikuYXMoImEiKSkuc2VsZWN0KCJhIikuYnkoIm5hbWUiKSwKLSAgICAgICAgICAgICAgICAoKSAtPiBuLmN5cGhlcigiTUFUQ0ggKGEpPC1bOnN1bmdCeV0tKGIpLCAoYSk8LVs6d3JpdHRlbkJ5XS0oYiksIChiKS1bOmZvbGxvd2VkQnldLT4oYyksIChjKS1bOnN1bmdCeV0tPihhKSwgKGMpLVs6d3JpdHRlbkJ5XS0+KGEpIFJFVFVSTiBhLm5hbWUiKSwKLSAgICAgICAgICAgICAgICAvLy8KLSAgICAgICAgICAgICAgICAoKSAtPiBnLlYoKS5tYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJhIikuaGFzKCJuYW1lIiwgIkdhcmNpYSIpLmhhcyhULmxhYmVsLCAiYXJ0aXN0IiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLmluKCJ3cml0dGVuQnkiKS5hcygiYiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImIiKS5vdXQoImZvbGxvd2VkQnkiKS5hcygiYyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImMiKS5vdXQoIndyaXR0ZW5CeSIpLmFzKCJkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiZCIpLndoZXJlKFAubmVxKCJhIikpKS5zZWxlY3QoImEiLCAiZCIpLmJ5KCJuYW1lIiksCi0gICAgICAgICAgICAgICAgKCkgLT4gbi5jeXBoZXIoIk1BVENIIChhKTwtWzp3cml0dGVuQnldLShiKSwgKGIpLVs6Zm9sbG93ZWRCeV0tPihjKSwgKGMpLVs6d3JpdHRlbkJ5XS0+KGQpIFdIRVJFIGEgPD4gZCBBTkQgYS5uYW1lID0gJ0dhcmNpYScgQU5EICdhcnRpc3QnIElOIGxhYmVscyhhKSBSRVRVUk4gYS5uYW1lLCBkLm5hbWUiKSwKLSAgICAgICAgICAgICAgICAvLy8KLSAgICAgICAgICAgICAgICAoKSAtPiBnLlYoKS5tYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJhIikub3V0KCJmb2xsb3dlZEJ5IikuYXMoImIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzKCJiIikub3V0KCJmb2xsb3dlZEJ5IikuYXMoImMiKSkuc2VsZWN0KCJhIikuYnkoIm5hbWUiKSwKLSAgICAgICAgICAgICAgICAoKSAtPiBuLmN5cGhlcigiTUFUQ0ggKGEpLVs6Zm9sbG93ZWRCeV0tPihiKSwgKGIpLVs6Zm9sbG93ZWRCeV0tPihjKSBSRVRVUk4gYS5uYW1lIiksCi0gICAgICAgICAgICAgICAgLy8vCi0gICAgICAgICAgICAgICAgKCkgLT4gZy5WKCkubWF0Y2goCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLm91dCgiZm9sbG93ZWRCeSIpLmFzKCJiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYSIpLmhhcyhULmxhYmVsLCAic29uZyIpLmhhcygicGVyZm9ybWFuY2VzIiwgUC5ndCgxMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXMoImEiKS5vdXQoIndyaXR0ZW5CeSIpLmFzKCJjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcygiYiIpLm91dCgid3JpdHRlbkJ5IikuYXMoImMiKSkuc2VsZWN0KCJhIiwgImIiLCAiYyIpLmJ5KCJuYW1lIiksCi0gICAgICAgICAgICAgICAgKCkgLT4gbi5jeXBoZXIoIk1BVENIIChhKS1bOmZvbGxvd2VkQnldLT4oYiksIChhKS1bOndyaXR0ZW5CeV0tPihjKSwgKGIpLVs6d3JpdHRlbkJ5XS0+KGMpIFdIRVJFIGEucGVyZm9ybWFuY2VzID4gMTAgQU5EICdzb25nJyBJTiBsYWJlbHMoYSkgUkVUVVJOIGEsIGIsIGMiKS5zZWxlY3QoImEiLCAiYiIsICJjIikuYnkoIm5hbWUiKQotICAgICAgICApOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJhdmVyc2Fscy5zaXplKCk7IGkgPSBpICsgMikgewotICAgICAgICAgICAgZmluYWwgU3VwcGxpZXI8R3JhcGhUcmF2ZXJzYWw8PywgPz4+IGdyZW1saW4gPSB0cmF2ZXJzYWxzLmdldChpKTsKLSAgICAgICAgICAgIGZpbmFsIFN1cHBsaWVyPEdyYXBoVHJhdmVyc2FsPD8sID8+PiBjeXBoZXIgPSB0cmF2ZXJzYWxzLmdldChpICsgMSk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIFN1cHBsaWVyPEdyYXBoVHJhdmVyc2FsPD8sID8+PiBzdWIgOiBBcnJheXMuYXNMaXN0KGN5cGhlciwgZ3JlbWxpbikpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygicHJlLXN0cmF0ZWd5OiAge30iLCBzdWIuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJwb3N0LXN0cmF0ZWd5OiB7fSIsIHN1Yi5nZXQoKS5pdGVyYXRlKCkpOwotICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKFRpbWVVdGlsLmNsb2NrV2l0aFJlc3VsdCgyNSwgKCkgLT4gc3ViLmdldCgpLmNvdW50KCkubmV4dCgpKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL05lbzRqR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEgYi9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9wcm9jZXNzL05lbzRqR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMTFmZGMuLjAwMDAwMDAKLS0tIGEvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy9OZW80akdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5OZW80akdyYXBoUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmUuTmVvNGpHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IE5lbzRqR3JhcGhQcm92aWRlci5jbGFzcywgZ3JhcGggPSBOZW80akdyYXBoLmNsYXNzKQotcHVibGljIGNsYXNzIE5lbzRqR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0IHsKLX0KZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L29wdGltaXphdGlvbi9OZW80akdyYXBoU3RlcFN0cmF0ZWd5VGVzdC5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL05lbzRqR3JhcGhTdGVwU3RyYXRlZ3lUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNzQ5YzUuLjAwMDAwMDAKLS0tIGEvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvb3B0aW1pemF0aW9uL05lbzRqR3JhcGhTdGVwU3RyYXRlZ3lUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5vcHRpbWl6YXRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5OZW80akdyYXBoU3RlcDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZS5OZW80akdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFN0cmF0ZWdpZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5EZWZhdWx0R3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX187Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5HcmFwaFN0ZXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnV0aWwuSGFzQ29udGFpbmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kub3B0aW1pemF0aW9uLkZpbHRlclJhbmtpbmdTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5JbmxpbmVGaWx0ZXJTdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5MYXp5QmFycmllclN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwudXRpbC5EZWZhdWx0VHJhdmVyc2FsU3RyYXRlZ2llczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnV0aWwuRW1wdHlUcmF2ZXJzYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVycy5QYXJhbWV0ZXJpemVkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLmVxOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlAuZ3Q7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUC5sdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18uZmlsdGVyOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5oYXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLm5vdDsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18ucHJvcGVydGllczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIERhbmllbCBLdXBwaXR6IChodHRwOi8vZ3JlbWxpbi5ndXJ1KQotICovCi1AUnVuV2l0aChQYXJhbWV0ZXJpemVkLmNsYXNzKQotcHVibGljIGNsYXNzIE5lbzRqR3JhcGhTdGVwU3RyYXRlZ3lUZXN0IHsKLQotICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcih2YWx1ZSA9IDApCi0gICAgcHVibGljIFRyYXZlcnNhbCBvcmlnaW5hbDsKLQotICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcih2YWx1ZSA9IDEpCi0gICAgcHVibGljIFRyYXZlcnNhbCBvcHRpbWl6ZWQ7Ci0KLSAgICBAUGFyYW1ldGVyaXplZC5QYXJhbWV0ZXIodmFsdWUgPSAyKQotICAgIHB1YmxpYyBDb2xsZWN0aW9uPFRyYXZlcnNhbFN0cmF0ZWd5PiBvdGhlclN0cmF0ZWdpZXM7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCgpIHsKLSAgICAgICAgZmluYWwgVHJhdmVyc2FsU3RyYXRlZ2llcyBzdHJhdGVnaWVzID0gbmV3IERlZmF1bHRUcmF2ZXJzYWxTdHJhdGVnaWVzKCk7Ci0gICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhOZW80akdyYXBoU3RlcFN0cmF0ZWd5Lmluc3RhbmNlKCkpOwotICAgICAgICBmb3IgKGZpbmFsIFRyYXZlcnNhbFN0cmF0ZWd5IHN0cmF0ZWd5IDogdGhpcy5vdGhlclN0cmF0ZWdpZXMpIHsKLSAgICAgICAgICAgIHN0cmF0ZWdpZXMuYWRkU3RyYXRlZ2llcyhzdHJhdGVneSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5vcmlnaW5hbC5hc0FkbWluKCkuc2V0U3RyYXRlZ2llcyhzdHJhdGVnaWVzKTsKLSAgICAgICAgdGhpcy5vcmlnaW5hbC5hc0FkbWluKCkuYXBwbHlTdHJhdGVnaWVzKCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyh0aGlzLm9wdGltaXplZCwgdGhpcy5vcmlnaW5hbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhUcmF2ZXJzYWwuQWRtaW48PywgPz4gZ19WKGZpbmFsIE9iamVjdC4uLiBoYXNLZXlWYWx1ZXMpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWwuQWRtaW48PywgPz4gdHJhdmVyc2FsID0gbmV3IERlZmF1bHRHcmFwaFRyYXZlcnNhbDw+KCk7Ci0gICAgICAgIGZpbmFsIE5lbzRqR3JhcGhTdGVwPFZlcnRleCwgVmVydGV4PiBncmFwaFN0ZXAgPSBuZXcgTmVvNGpHcmFwaFN0ZXA8PihuZXcgR3JhcGhTdGVwPD4odHJhdmVyc2FsLCBWZXJ0ZXguY2xhc3MsIHRydWUpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoYXNLZXlWYWx1ZXMubGVuZ3RoOyBpID0gaSArIDIpIHsKLSAgICAgICAgICAgIGdyYXBoU3RlcC5hZGRIYXNDb250YWluZXIobmV3IEhhc0NvbnRhaW5lcigoU3RyaW5nKSBoYXNLZXlWYWx1ZXNbaV0sIChQKSBoYXNLZXlWYWx1ZXNbaSArIDFdKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKGdyYXBoU3RlcCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgR3JhcGhTdGVwPD8sID8+IFYoZmluYWwgT2JqZWN0Li4uIGhhc0tleVZhbHVlcykgewotICAgICAgICBmaW5hbCBOZW80akdyYXBoU3RlcDxWZXJ0ZXgsIFZlcnRleD4gZ3JhcGhTdGVwID0gbmV3IE5lbzRqR3JhcGhTdGVwPD4obmV3IEdyYXBoU3RlcDw+KEVtcHR5VHJhdmVyc2FsLmluc3RhbmNlKCksIFZlcnRleC5jbGFzcywgdHJ1ZSkpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhc0tleVZhbHVlcy5sZW5ndGg7IGkgPSBpICsgMikgewotICAgICAgICAgICAgZ3JhcGhTdGVwLmFkZEhhc0NvbnRhaW5lcihuZXcgSGFzQ29udGFpbmVyKChTdHJpbmcpIGhhc0tleVZhbHVlc1tpXSwgKFApIGhhc0tleVZhbHVlc1tpICsgMV0pKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZ3JhcGhTdGVwOwotICAgIH0KLQotICAgIEBQYXJhbWV0ZXJpemVkLlBhcmFtZXRlcnMobmFtZSA9ICJ7MH0iKQotICAgIHB1YmxpYyBzdGF0aWMgSXRlcmFibGU8T2JqZWN0W10+IGdlbmVyYXRlVGVzdFBhcmFtZXRlcnMoKSB7Ci0gICAgICAgIGZpbmFsIGludCBMQVpZX1NJWkUgPSAyNTAwOwotICAgICAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChuZXcgT2JqZWN0W11bXXsKLSAgICAgICAgICAgICAgICB7X18uVigpLm91dCgpLCBnX1YoKS5vdXQoKSwgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCl9LAotICAgICAgICAgICAgICAgIHtfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3V0KCksIGdfVigibmFtZSIsIGVxKCJtYXJrbyIpKS5vdXQoKSwgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCl9LAotICAgICAgICAgICAgICAgIHtfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuaGFzKCJhZ2UiLCBndCgzMSkuYW5kKGx0KDEwKSkpLm91dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ19WKCJuYW1lIiwgZXEoIm1hcmtvIiksICJhZ2UiLCBndCgzMSksICJhZ2UiLCBsdCgxMCkpLm91dCgpLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLmhhcygibGFuZyIsICJqYXZhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBnX1YoIm5hbWUiLCBlcSgibWFya28iKSwgImxhbmciLCBlcSgiamF2YSIpKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEZpbHRlclJhbmtpbmdTdHJhdGVneS5pbnN0YW5jZSgpKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5hcygiYSIpLm9yKGhhcygiYWdlIiksIGhhcygiYWdlIiwgZ3QoMzIpKSkuaGFzKCJsYW5nIiwgImphdmEiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfVigibmFtZSIsIGVxKCJtYXJrbyIpKS5hcygiYSIpLm9yKGhhcygiYWdlIiksIGhhcygiYWdlIiwgZ3QoMzIpKSkuaGFzKCJsYW5nIiwgImphdmEiKSwgQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCl9LAotICAgICAgICAgICAgICAgIHtfXy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLmhhcygibGFuZyIsICJqYXZhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBnX1YoIm5hbWUiLCBlcSgibWFya28iKSwgImxhbmciLCBlcSgiamF2YSIpKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLmFzKCJhIiksIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoRmlsdGVyUmFua2luZ1N0cmF0ZWd5Lmluc3RhbmNlKCkpfSwKLSAgICAgICAgICAgICAgICB7X18uVigpLmRlZHVwKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3IoaGFzKCJhZ2UiKSwgaGFzKCJhZ2UiLCBndCgzMikpKS5oYXMoImxhbmciLCAiamF2YSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ19WKCJuYW1lIiwgZXEoIm1hcmtvIiksICJsYW5nIiwgZXEoImphdmEiKSkub3IoaGFzKCJhZ2UiKSwgaGFzKCJhZ2UiLCBndCgzMikpKS5kZWR1cCgpLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEZpbHRlclJhbmtpbmdTdHJhdGVneS5pbnN0YW5jZSgpKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5hcygiYSIpLmRlZHVwKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikub3IoaGFzKCJhZ2UiKSwgaGFzKCJhZ2UiLCBndCgzMikpKS5oYXMoImxhbmciLCAiamF2YSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ19WKCJuYW1lIiwgZXEoIm1hcmtvIiksICJsYW5nIiwgZXEoImphdmEiKSkub3IoaGFzKCJhZ2UiKSwgaGFzKCJhZ2UiLCBndCgzMikpKS5kZWR1cCgpLmFzKCJhIiksIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoRmlsdGVyUmFua2luZ1N0cmF0ZWd5Lmluc3RhbmNlKCkpfSwKLSAgICAgICAgICAgICAgICB7X18uVigpLmFzKCJhIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImIiKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLmhhcygibGFuZyIsICJqYXZhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBnX1YoIm5hbWUiLCBlcSgibWFya28iKSwgImxhbmciLCBlcSgiamF2YSIpKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLmFzKCJiIiwgImEiKSwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChGaWx0ZXJSYW5raW5nU3RyYXRlZ3kuaW5zdGFuY2UoKSl9LAotICAgICAgICAgICAgICAgIHtfXy5WKCkuYXMoImEiKS5kZWR1cCgpLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKGhhcygiYWdlIiksIGhhcygiYWdlIiwgZ3QoMzIpKSkuZmlsdGVyKGhhcygibmFtZSIsICJib2IiKSkuaGFzKCJsYW5nIiwgImphdmEiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfVigibmFtZSIsIGVxKCJtYXJrbyIpLCAibGFuZyIsIGVxKCJqYXZhIiksICJuYW1lIiwgZXEoImJvYiIpKS5vcihoYXMoImFnZSIpLCBoYXMoImFnZSIsIGd0KDMyKSkpLmRlZHVwKCkuYXMoImEiKSwgQXJyYXlzLmFzTGlzdChJbmxpbmVGaWx0ZXJTdHJhdGVneS5pbnN0YW5jZSgpLCBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kuaW5zdGFuY2UoKSl9LAotICAgICAgICAgICAgICAgIHtfXy5WKCkuYXMoImEiKS5kZWR1cCgpLmhhcygibmFtZSIsICJtYXJrbyIpLm9yKGhhcygiYWdlIiwgMTApLCBoYXMoImFnZSIsIGd0KDMyKSkpLmZpbHRlcihoYXMoIm5hbWUiLCAiYm9iIikpLmhhcygibGFuZyIsICJqYXZhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBnX1YoIm5hbWUiLCBlcSgibWFya28iKSwgImxhbmciLCBlcSgiamF2YSIpLCAibmFtZSIsIGVxKCJib2IiKSwgImFnZSIsIGVxKDEwKS5vcihndCgzMikpKS5kZWR1cCgpLmFzKCJhIiksIFRyYXZlcnNhbFN0cmF0ZWdpZXMuR2xvYmFsQ2FjaGUuZ2V0U3RyYXRlZ2llcyhOZW80akdyYXBoLmNsYXNzKS50b0xpc3QoKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5oYXMoIm5hbWUiLCAibWFya28iKS5vcihub3QoaGFzKCJhZ2UiKSksIGhhcygiYWdlIiwgZ3QoMzIpKSkuaGFzKCJuYW1lIiwgImJvYiIpLmhhcygibGFuZyIsICJqYXZhIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBnX1YoIm5hbWUiLCBlcSgibWFya28iKSwgIm5hbWUiLCBlcSgiYm9iIiksICJsYW5nIiwgZXEoImphdmEiKSkub3Iobm90KGZpbHRlcihwcm9wZXJ0aWVzKCJhZ2UiKSkpLCBoYXMoImFnZSIsIGd0KDMyKSkpLCBUcmF2ZXJzYWxTdHJhdGVnaWVzLkdsb2JhbENhY2hlLmdldFN0cmF0ZWdpZXMoTmVvNGpHcmFwaC5jbGFzcykudG9MaXN0KCl9LAotICAgICAgICAgICAgICAgIHtfXy5WKCkuaGFzKCJuYW1lIiwgUC5lcSgibWFya28iKS5vcihQLmVxKCJib2IiKS5hbmQoUC5lcSgic3RlcGhlbiIpKSkpLm91dCgia25vd3MiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfVigibmFtZSIsIGVxKCJtYXJrbyIpLm9yKFAuZXEoImJvYiIpLmFuZChQLmVxKCJzdGVwaGVuIikpKSkub3V0KCJrbm93cyIpLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5oYXMoIm5hbWUiLCBQLmVxKCJtYXJrbyIpLmFuZChQLmVxKCJib2IiKS5hbmQoUC5lcSgic3RlcGhlbiIpKSkpLm91dCgia25vd3MiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfVigibmFtZSIsIGVxKCJtYXJrbyIpLCAibmFtZSIsIGVxKCJib2IiKSwgIm5hbWUiLCBlcSgic3RlcGhlbiIpKS5vdXQoImtub3dzIiksIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpfSwKLSAgICAgICAgICAgICAgICB7X18uVigpLmhhcygibmFtZSIsIFAuZXEoIm1hcmtvIikuYW5kKFAuZXEoImJvYiIpLm9yKFAuZXEoInN0ZXBoZW4iKSkpKS5vdXQoImtub3dzIiksCi0gICAgICAgICAgICAgICAgICAgICAgICBnX1YoIm5hbWUiLCBlcSgibWFya28iKSwgIm5hbWUiLCBQLmVxKCJib2IiKS5vcihlcSgic3RlcGhlbiIpKSkub3V0KCJrbm93cyIpLCBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKX0sCi0gICAgICAgICAgICAgICAgLy8vLy8vLwotICAgICAgICAgICAgICAgIHtfXy5WKCkub3V0KCkub3V0KCkuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLm91dCgpLCBnX1YoKS5vdXQoKS5iYXJyaWVyKExBWllfU0laRSkub3V0KCkuYmFycmllcihMQVpZX1NJWkUpLmFzQWRtaW4oKS5hZGRTdGVwKFYoIm5hbWUiLCBlcSgibWFya28iKSkpLmJhcnJpZXIoTEFaWV9TSVpFKS5vdXQoKSwgQXJyYXlzLmFzTGlzdChJbmxpbmVGaWx0ZXJTdHJhdGVneS5pbnN0YW5jZSgpLCBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kuaW5zdGFuY2UoKSwgTGF6eUJhcnJpZXJTdHJhdGVneS5pbnN0YW5jZSgpKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5vdXQoKS5vdXQoKS5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuYXMoImEiKS5vdXQoKSwgZ19WKCkub3V0KCkuYmFycmllcihMQVpZX1NJWkUpLm91dCgpLmJhcnJpZXIoTEFaWV9TSVpFKS5hc0FkbWluKCkuYWRkU3RlcChWKCJuYW1lIiwgZXEoIm1hcmtvIikpKS5iYXJyaWVyKExBWllfU0laRSkuYXMoImEiKS5vdXQoKSwgQXJyYXlzLmFzTGlzdChJbmxpbmVGaWx0ZXJTdHJhdGVneS5pbnN0YW5jZSgpLCBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kuaW5zdGFuY2UoKSwgTGF6eUJhcnJpZXJTdHJhdGVneS5pbnN0YW5jZSgpKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5vdXQoKS5WKCkuaGFzKCJhZ2UiLCBndCgzMikpLmJhcnJpZXIoMTApLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJhIiksIGdfVigpLm91dCgpLmJhcnJpZXIoTEFaWV9TSVpFKS5hc0FkbWluKCkuYWRkU3RlcChWKCJhZ2UiLCBndCgzMiksICJuYW1lIiwgZXEoIm1hcmtvIikpKS5iYXJyaWVyKExBWllfU0laRSkuYmFycmllcigxMCkuYXMoImEiKSwgQXJyYXlzLmFzTGlzdChJbmxpbmVGaWx0ZXJTdHJhdGVneS5pbnN0YW5jZSgpLCBGaWx0ZXJSYW5raW5nU3RyYXRlZ3kuaW5zdGFuY2UoKSwgTGF6eUJhcnJpZXJTdHJhdGVneS5pbnN0YW5jZSgpKX0sCi0gICAgICAgICAgICAgICAge19fLlYoKS5vdXQoKS5WKCkuaGFzKCJhZ2UiLCBndCgzMikpLmJhcnJpZXIoMTApLmhhcygibmFtZSIsICJtYXJrbyIpLmFzKCJhIiksIGdfVigpLm91dCgpLmJhcnJpZXIoTEFaWV9TSVpFKS5hc0FkbWluKCkuYWRkU3RlcChWKCJhZ2UiLCBndCgzMiksICJuYW1lIiwgZXEoIm1hcmtvIikpKS5iYXJyaWVyKExBWllfU0laRSkuYmFycmllcigxMCkuYXMoImEiKSwgVHJhdmVyc2FsU3RyYXRlZ2llcy5HbG9iYWxDYWNoZS5nZXRTdHJhdGVnaWVzKE5lbzRqR3JhcGguY2xhc3MpLnRvTGlzdCgpfSwKLSAgICAgICAgfSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05hdGl2ZU5lbzRqSW5kZXhDaGVjay5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05hdGl2ZU5lbzRqSW5kZXhDaGVjay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDYyNjI5Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL25lbzRqL3N0cnVjdHVyZS9OYXRpdmVOZW80akluZGV4Q2hlY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLnN0cnVjdHVyZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uRmVhdHVyZVJlcXVpcmVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouQWJzdHJhY3ROZW80akdyZW1saW5UZXN0OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuUDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5UOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLlZlcnRleDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXhQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnV0aWwuVGltZVV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKLWltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotcHVibGljIGNsYXNzIE5hdGl2ZU5lbzRqSW5kZXhDaGVjayBleHRlbmRzIEFic3RyYWN0TmVvNGpHcmVtbGluVGVzdCB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKE5hdGl2ZU5lbzRqSW5kZXhDaGVjay5jbGFzcyk7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEhhdmVGYXN0ZXJSdW50aW1lV2l0aExhYmVsS2V5VmFsdWVJbmRleCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBOZW80akdyYXBoIG5lbzRqID0gKE5lbzRqR3JhcGgpIHRoaXMuZ3JhcGg7Ci0gICAgICAgIGludCBtYXhWZXJ0aWNlcyA9IDEwMDAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heFZlcnRpY2VzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpICUgMiA9PSAwKQotICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJzb21ldGhpbmciLCAibXlJZCIsIGkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJub3RoaW5nIiwgIm15SWQiLCBpKTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0KLSAgICAgICAgLy8gdHJhdmVyc2FsCi0gICAgICAgIGZpbmFsIFJ1bm5hYmxlIHRyYXZlcnNhbCA9ICgpIC0+IHsKLSAgICAgICAgICAgIGZpbmFsIFRyYXZlcnNhbDxWZXJ0ZXgsIFZlcnRleD4gdCA9IGcuVigpLmhhc0xhYmVsKCJzb21ldGhpbmciKS5oYXMoIm15SWQiLCAyMDAwKTsKLSAgICAgICAgICAgIGZpbmFsIFZlcnRleCB2ZXJ0ZXggPSB0LnRyeU5leHQoKS5nZXQoKTsKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKHQuaGFzTmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBJdGVyYXRvclV0aWxzLmNvdW50KHZlcnRleC5wcm9wZXJ0aWVzKCJteUlkIikpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic29tZXRoaW5nIiwgdmVydGV4LmxhYmVsKCkpOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIG5vIGluZGV4Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UodGhpcy5nZXRCYXNlR3JhcGgoKS5oYXNTY2hlbWFJbmRleCgic29tZXRoaW5nIiwgIm15SWQiKSk7Ci0gICAgICAgIFRpbWVVdGlsLmNsb2NrKDIwLCB0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBkb3VibGUgbm9JbmRleFRpbWUgPSBUaW1lVXRpbC5jbG9jaygyMCwgdHJhdmVyc2FsKTsKLSAgICAgICAgLy8gaW5kZXggdGltZQotICAgICAgICBuZW80ai5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6c29tZXRoaW5nKG15SWQpIikuaXRlcmF0ZSgpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgVGhyZWFkLnNsZWVwKDUwMDApOyAvLyB3YWl0IGZvciBpbmRpY2VzIHRvIGJlIGJ1aWx0Ci0gICAgICAgIGFzc2VydFRydWUodGhpcy5nZXRCYXNlR3JhcGgoKS5oYXNTY2hlbWFJbmRleCgic29tZXRoaW5nIiwgIm15SWQiKSk7Ci0gICAgICAgIFRpbWVVdGlsLmNsb2NrKDIwLCB0cmF2ZXJzYWwpOwotICAgICAgICBmaW5hbCBkb3VibGUgaW5kZXhUaW1lID0gVGltZVV0aWwuY2xvY2soMjAsIHRyYXZlcnNhbCk7Ci0gICAgICAgIGxvZ2dlci5pbmZvKCJRdWVyeSB0aW1lIChuby1pbmRleCB2cy4gaW5kZXgpOiB7fSIsIG5vSW5kZXhUaW1lICsgIiB2cy4ge30iLCBpbmRleFRpbWUpOwotICAgICAgICBhc3NlcnRUcnVlKChub0luZGV4VGltZSAvIDEwKSA+IGluZGV4VGltZSk7IC8vIHNob3VsZCBiZSBhdCBsZWFzdCAxMHggZmFzdGVyCi0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5SZXN1bHRzTGFiZWxlZEluZGV4T25WZXJ0ZXhXaXRoSGFzSGFzKCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRoaXMuZ2V0QmFzZUdyYXBoKCkuZXhlY3V0ZSgiQ1JFQVRFIElOREVYIE9OIDpQZXJzb24obmFtZSkiLCBudWxsKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRoaXMuZy5WKCkuaGFzKFQubGFiZWwsICJQZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCB0aGlzLmcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZEVuc3VyZUNvbG9uZWRLZXlJc1RyZWF0ZWRBc05vcm1hbEtleSgpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICB0aGlzLmdldEJhc2VHcmFwaCgpLmV4ZWN1dGUoIkNSRUFURSBJTkRFWCBPTiA6UGVyc29uKG5hbWUpIiwgbnVsbCk7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJtYXJrbyIpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCB0aGlzLmcuVigpLmhhcyhULmxhYmVsLCAiUGVyc29uIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuY291bnQoKS5uZXh0KCksIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgdGhpcy5nLlYoKS5oYXMoIlBlcnNvbjpuYW1lIiwgIm1hcmtvIikuY291bnQoKS5uZXh0KCksIDApOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuUmVzdWx0c1VzaW5nTGFiZWxlZEluZGV4T25WZXJ0ZXhXaXRoSGFzSGFzSGFzKCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRoaXMuZ2V0QmFzZUdyYXBoKCkuZXhlY3V0ZSgiQ1JFQVRFIElOREVYIE9OIDpQZXJzb24obmFtZSkiLCBudWxsKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iLCAiY29sb3IiLCAiYmx1ZSIpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iLCAiY29sb3IiLCAiZ3JlZW4iKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmhhcygibmFtZSIsICJtYXJrbyIpLmhhcygiY29sb3IiLCAiYmx1ZSIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRoaXMuZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuY291bnQoKS5uZXh0KCksIDApOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuUmVzdWx0c09uVmVydGV4V2l0aEhhc0hhc0hhc05vSW5kZXgoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiwgImNvbG9yIiwgImJsdWUiKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIiwgImNvbG9yIiwgImdyZWVuIik7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRoaXMuZy5WKCkuaGFzKFQubGFiZWwsICJQZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXMoImNvbG9yIiwgImJsdWUiKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCB0aGlzLmcuVigpLmhhcygibmFtZSIsICJtYXJrbyIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZFJldHVyblJlc3VsdHNVc2luZ0xhYmVsZWRJbmRleE9uVmVydGV4V2l0aENvbG9uRmFpbHMoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgdGhpcy5nZXRCYXNlR3JhcGgoKS5leGVjdXRlKCJDUkVBVEUgSU5ERVggT04gOlBlcnNvbihuYW1lKSIsIG51bGwpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJtYXJrbyIpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnROb3RFcXVhbHMoMmwsIHRoaXMuZy5WKCkuaGFzKCJQZXJzb246bmFtZSIsICJtYXJrbyIpLmNvdW50KCkubmV4dCgpLmxvbmdWYWx1ZSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHRoaXMuZy5WKCkuaGFzKCJuYW1lIiwgIm1hcmtvIikuY291bnQoKS5uZXh0KCksIDApOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRW5mb3JjZVVuaXF1ZUNvbnN0cmFpbnQoKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgdGhpcy5nZXRCYXNlR3JhcGgoKS5leGVjdXRlKCJDUkVBVEUgQ09OU1RSQUlOVCBPTiAocDpQZXJzb24pIGFzc2VydCBwLm5hbWUgaXMgdW5pcXVlIiwgbnVsbCk7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuaGFzKFQubGFiZWwsICJQZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5uZXh0KCkudmFsdWUoIm5hbWUiKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRFbmZvcmNlTXVsdGlwbGVVbmlxdWVDb25zdHJhaW50KCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRoaXMuZ2V0QmFzZUdyYXBoKCkuZXhlY3V0ZSgiQ1JFQVRFIENPTlNUUkFJTlQgT04gKHA6UGVyc29uKSBhc3NlcnQgcC5uYW1lIGlzIHVuaXF1ZSIsIG51bGwpOwotICAgICAgICB0aGlzLmdldEJhc2VHcmFwaCgpLmV4ZWN1dGUoIkNSRUFURSBDT05TVFJBSU5UIE9OIChwOlBlcnNvbikgYXNzZXJ0IHAuc3VybmFtZSBpcyB1bmlxdWUiLCBudWxsKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJzdXJuYW1lIiwgImFhYWEiKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBib29sZWFuIGZhaWxTdXJuYW1lID0gZmFsc2U7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgInN1cm5hbWUiLCAiYWFhYSIpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGlmIChpc0NvbnN0cmFpbnRWaW9sYXRpb24oZSkpIGZhaWxTdXJuYW1lID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnRUcnVlKGZhaWxTdXJuYW1lKTsKLSAgICAgICAgYm9vbGVhbiBmYWlsTmFtZSA9IGZhbHNlOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgaWYgKGlzQ29uc3RyYWludFZpb2xhdGlvbihlKSkgZmFpbE5hbWUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFRydWUoZmFpbE5hbWUpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzQ29uc3RyYWludFZpb2xhdGlvbihSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmV0dXJuIGUuZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkuZXF1YWxzKCJDb25zdHJhaW50VmlvbGF0aW9uRXhjZXB0aW9uIik7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREcm9wTXVsdGlwbGVVbmlxdWVDb25zdHJhaW50KCkgewotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRoaXMuZ2V0QmFzZUdyYXBoKCkuZXhlY3V0ZSgiQ1JFQVRFIENPTlNUUkFJTlQgT04gKHA6UGVyc29uKSBhc3NlcnQgcC5uYW1lIGlzIHVuaXF1ZSIsIG51bGwpOwotICAgICAgICB0aGlzLmdldEJhc2VHcmFwaCgpLmV4ZWN1dGUoIkNSRUFURSBDT05TVFJBSU5UIE9OIChwOlBlcnNvbikgYXNzZXJ0IHAuc3VybmFtZSBpcyB1bmlxdWUiLCBudWxsKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotCi0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJtYXJrbyIpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgInN1cm5hbWUiLCAiYWFhYSIpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIGJvb2xlYW4gZmFpbFN1cm5hbWUgPSBmYWxzZTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAic3VybmFtZSIsICJhYWFhIik7Ci0gICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgaWYgKGlzQ29uc3RyYWludFZpb2xhdGlvbihlKSkgZmFpbFN1cm5hbWUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFRydWUoZmFpbFN1cm5hbWUpOwotICAgICAgICBib29sZWFuIGZhaWxOYW1lID0gZmFsc2U7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBpZiAoaXNDb25zdHJhaW50VmlvbGF0aW9uKGUpKSBmYWlsTmFtZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShmYWlsTmFtZSk7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLQotICAgICAgICB0aGlzLmdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIHRoaXMuZ2V0QmFzZUdyYXBoKCkuZXhlY3V0ZSgiRFJPUCBDT05TVFJBSU5UIE9OIChwOlBlcnNvbikgYXNzZXJ0IHAubmFtZSBpcyB1bmlxdWUiLCBudWxsKTsKLSAgICAgICAgdGhpcy5nZXRCYXNlR3JhcGgoKS5leGVjdXRlKCJEUk9QIENPTlNUUkFJTlQgT04gKHA6UGVyc29uKSBhc3NlcnQgcC5zdXJuYW1lIGlzIHVuaXF1ZSIsIG51bGwpOwotCi0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRoaXMuZy5WKCkuaGFzKFQubGFiZWwsICJQZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCB0aGlzLmcuVigpLmhhcyhULmxhYmVsLCAiUGVyc29uIikuaGFzKCJzdXJuYW1lIiwgImFhYWEiKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAic3VybmFtZSIsICJhYWFhIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJtYXJrbyIpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCB0aGlzLmcuVigpLmhhcyhULmxhYmVsLCAiUGVyc29uIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuY291bnQoKS5uZXh0KCksIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmhhcygic3VybmFtZSIsICJhYWFhIikuY291bnQoKS5uZXh0KCksIDApOwotICAgIH0KLQotICAgIEBUZXN0KGV4cGVjdGVkID0gUnVudGltZUV4Y2VwdGlvbi5jbGFzcykKLSAgICBwdWJsaWMgdm9pZCBzaG91bGRGYWlsVW5pcXVlQ29uc3RyYWludCgpIHsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICB0aGlzLmdldEJhc2VHcmFwaCgpLmV4ZWN1dGUoIkNSRUFURSBDT05TVFJBSU5UIE9OIChwOlBlcnNvbikgYXNzZXJ0IHAubmFtZSBpcyB1bmlxdWUiLCBudWxsKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuaGFzKFQubGFiZWwsICJQZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5uZXh0KCkudmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJtYXJrbyIpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRG9MYWJlbEFuZEluZGV4U2VhcmNoKCkgewotICAgICAgICBncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotICAgICAgICB0aGlzLmdldEJhc2VHcmFwaCgpLmV4ZWN1dGUoIkNSRUFURSBJTkRFWCBPTiA6UGVyc29uKG5hbWUpIiwgbnVsbCk7Ci0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLQotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiUGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgImpvaG4iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgInBldGUiKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdGhpcy5nLlYoKS5oYXMoIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIikuY291bnQoKS5uZXh0KCksIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHRoaXMuZy5WKCkuaGFzKFQubGFiZWwsICJQZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGREb0xhYmVsc05hbWVzcGFjZUJlaGF2aW9yKCkgewotICAgICAgICBncmFwaC50eCgpLnJlYWRXcml0ZSgpOwotCi0gICAgICAgIHRoaXMuZ2V0QmFzZUdyYXBoKCkuZXhlY3V0ZSgiQ1JFQVRFIElOREVYIE9OIDpQZXJzb24obmFtZSkiLCBudWxsKTsKLSAgICAgICAgdGhpcy5nZXRCYXNlR3JhcGgoKS5leGVjdXRlKCJDUkVBVEUgSU5ERVggT04gOlByb2R1Y3QobmFtZSkiLCBudWxsKTsKLSAgICAgICAgdGhpcy5nZXRCYXNlR3JhcGgoKS5leGVjdXRlKCJDUkVBVEUgSU5ERVggT04gOkNvcnBvcmF0ZShuYW1lKSIsIG51bGwpOwotCi0gICAgICAgIHRoaXMuZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJqb2huIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJwZXRlIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQcm9kdWN0IiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlByb2R1Y3QiLCAibmFtZSIsICJqb2huIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQcm9kdWN0IiwgIm5hbWUiLCAicGV0ZSIpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAiQ29ycG9yYXRlIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIkNvcnBvcmF0ZSIsICJuYW1lIiwgImpvaG4iKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIkNvcnBvcmF0ZSIsICJuYW1lIiwgInBldGUiKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmhhcygibmFtZSIsICJtYXJrbyIpLmhhcyhULmxhYmVsLCAiUGVyc29uIikuY291bnQoKS5uZXh0KCksIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlByb2R1Y3QiKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXMoVC5sYWJlbCwgIlByb2R1Y3QiKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCB0aGlzLmcuVigpLmhhcyhULmxhYmVsLCAiQ29ycG9yYXRlIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuaGFzKFQubGFiZWwsICJDb3Jwb3JhdGUiKS5jb3VudCgpLm5leHQoKSwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCB0aGlzLmcuVigpLmhhcyhULmxhYmVsLCAiUGVyc29uIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuaGFzKFQubGFiZWwsICJQcm9kdWN0IikuY291bnQoKS5uZXh0KCksIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlByb2R1Y3QiKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHRoaXMuZy5WKCkuaGFzKFQubGFiZWwsICJDb3Jwb3JhdGUiKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmF0aXZlTmVvNGpTdHJ1Y3R1cmVDaGVjay5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05hdGl2ZU5lbzRqU3RydWN0dXJlQ2hlY2suamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ3NzBmZi4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmF0aXZlTmVvNGpTdHJ1Y3R1cmVDaGVjay5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ubmVvNGouc3RydWN0dXJlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5GZWF0dXJlUmVxdWlyZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5BYnN0cmFjdE5lbzRqR3JlbWxpblRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5wcm9jZXNzLnRyYXZlcnNhbC5MYWJlbFA7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5WZXJ0ZXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi51dGlsLml0ZXJhdG9yLkl0ZXJhdG9yVXRpbHM7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpEaXJlY3Rpb247Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpHcmFwaEFQSTsKLWltcG9ydCBvcmcubmVvNGoudGlua2VycG9wLmFwaS5OZW80ak5vZGU7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpSZWxhdGlvbnNoaXA7Ci1pbXBvcnQgb3JnLm5lbzRqLnRpbmtlcnBvcC5hcGkuTmVvNGpUeDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKLQotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1wdWJsaWMgY2xhc3MgTmF0aXZlTmVvNGpTdHJ1Y3R1cmVDaGVjayBleHRlbmRzIEFic3RyYWN0TmVvNGpHcmVtbGluVGVzdCB7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE9wZW5XaXRoT3ZlcnJpZGRlbkNvbmZpZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnROb3ROdWxsKHRoaXMuZ3JhcGgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VwcG9ydEhhc0NvbnRhaW5lcnNXaXRoTXVsdGlMYWJlbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTmVvNGpWZXJ0ZXggdmVydGV4ID0gKE5lbzRqVmVydGV4KSB0aGlzLmdyYXBoLmFkZFZlcnRleChULmxhYmVsLCAicGVyc29uIiwgIm5hbWUiLCAibWFya28iKTsKLSAgICAgICAgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShnLlYoKS5oYXMoVC5sYWJlbCwgInBlcnNvbiIpLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJwZXJzb24iKSkudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGcuVigpLmhhcyhULmxhYmVsLCAicGVyc29uIikudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgLy8gbW9yZSBsYWJlbHMKLSAgICAgICAgdmVydGV4LmFkZExhYmVsKCJhbmltYWwiKTsKLSAgICAgICAgdmVydGV4LmFkZExhYmVsKCJvYmplY3QiKTsKLSAgICAgICAgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgLy8gbm8gaW5kaWNlcyAobmVvNGogZ3JhcGggc3RlcCkKLSAgICAgICAgYXNzZXJ0RmFsc2UoZy5WKCkuaGFzKFQubGFiZWwsICJwZXJzb24iKS5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuaGFzKFQubGFiZWwsIExhYmVsUC5vZigicGVyc29uIikpLnZhbHVlcygibmFtZSIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJhbmltYWwiKSkudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGcuVigpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoIm9iamVjdCIpKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkpOwotICAgICAgICAvLyBubyBpbmRpY2VzIChoYXMgc3RlcCkKLSAgICAgICAgYXNzZXJ0RmFsc2UoZy5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5oYXMoVC5sYWJlbCwgInBlcnNvbiIpLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLlYoKS5hcygiYSIpLnNlbGVjdCgiYSIpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoInBlcnNvbiIpKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuYXMoImEiKS5zZWxlY3QoImEiKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJhbmltYWwiKSkudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGcuVigpLmFzKCJhIikuc2VsZWN0KCJhIikuaGFzKFQubGFiZWwsIExhYmVsUC5vZigib2JqZWN0IikpLnZhbHVlcygibmFtZSIpLm5leHQoKSk7Ci0gICAgICAgIC8vIGluZGljZXMgKG5lbzRqIGdyYXBoIHN0ZXApCi0gICAgICAgIHRoaXMuZ2V0R3JhcGgoKS5jeXBoZXIoIkNSRUFURSBJTkRFWCBPTiA6cGVyc29uKG5hbWUpIikuaXRlcmF0ZSgpOwotICAgICAgICBncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBUaHJlYWQuc2xlZXAoNTAwKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UoZy5WKCkuaGFzKFQubGFiZWwsICJwZXJzb24iKS5oYXMoIm5hbWUiLCAibWFya28iKS5oYXNOZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuaGFzKFQubGFiZWwsIExhYmVsUC5vZigicGVyc29uIikpLmhhcygibmFtZSIsICJtYXJrbyIpLnZhbHVlcygibmFtZSIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJhbmltYWwiKSkuaGFzKCJuYW1lIiwgIm1hcmtvIikudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGcuVigpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoIm9iamVjdCIpKS5oYXMoIm5hbWUiLCAibWFya28iKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkpOwotICAgICAgICB0aGlzLmdldEdyYXBoKCkuY3lwaGVyKCJDUkVBVEUgSU5ERVggT04gOmFuaW1hbChuYW1lKSIpLml0ZXJhdGUoKTsKLSAgICAgICAgZ3JhcGgudHgoKS5jb21taXQoKTsKLSAgICAgICAgVGhyZWFkLnNsZWVwKDUwMCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKGcuVigpLmhhcyhULmxhYmVsLCAiYW5pbWFsIikuaGFzKCJuYW1lIiwgIm1hcmtvIikuaGFzTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGcuVigpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoInBlcnNvbiIpKS5oYXMoIm5hbWUiLCAibWFya28iKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuaGFzKFQubGFiZWwsIExhYmVsUC5vZigiYW5pbWFsIikpLmhhcygibmFtZSIsICJtYXJrbyIpLnZhbHVlcygibmFtZSIpLm5leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJvYmplY3QiKSkuaGFzKCJuYW1lIiwgIm1hcmtvIikudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgdGhpcy5nZXRHcmFwaCgpLmN5cGhlcigiQ1JFQVRFIElOREVYIE9OIDpvYmplY3QobmFtZSkiKS5pdGVyYXRlKCk7Ci0gICAgICAgIGdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIFRocmVhZC5zbGVlcCg1MDApOwotICAgICAgICBhc3NlcnRGYWxzZShnLlYoKS5oYXMoVC5sYWJlbCwgIm9iamVjdCIpLmhhcygibmFtZSIsICJtYXJrbyIpLmhhc05leHQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJwZXJzb24iKSkuaGFzKCJuYW1lIiwgIm1hcmtvIikudmFsdWVzKCJuYW1lIikubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtYXJrbyIsIGcuVigpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoImFuaW1hbCIpKS5oYXMoIm5hbWUiLCAibWFya28iKS52YWx1ZXMoIm5hbWUiKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1hcmtvIiwgZy5WKCkuaGFzKFQubGFiZWwsIExhYmVsUC5vZigib2JqZWN0IikpLmhhcygibmFtZSIsICJtYXJrbyIpLnZhbHVlcygibmFtZSIpLm5leHQoKSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RUaHJvd0NvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24oKSB7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgImEiKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoIm5hbWUiLCAiYiIpOwotICAgICAgICB0aGlzLmdyYXBoLmFkZFZlcnRleCgibmFtZSIsICJjIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KCJuYW1lIiwgImQiKTsKLSAgICAgICAgdGhpcy5ncmFwaC52ZXJ0aWNlcygpLmZvckVhY2hSZW1haW5pbmcoVmVydGV4OjpyZW1vdmUpOwotICAgICAgICB0aGlzLmdyYXBoLnR4KCkuY29tbWl0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KHRoaXMuZ3JhcGgudmVydGljZXMoKSksIDApOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkVHJhdmVyc2VXaXRob3V0TGFiZWxzKCkgewotICAgICAgICBmaW5hbCBOZW80akdyYXBoQVBJIHNlcnZpY2UgPSB0aGlzLmdldEdyYXBoKCkuZ2V0QmFzZUdyYXBoKCk7Ci0KLSAgICAgICAgZmluYWwgTmVvNGpUeCB0eCA9IHNlcnZpY2UudHgoKTsKLSAgICAgICAgZmluYWwgTmVvNGpOb2RlIG4gPSBzZXJ2aWNlLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgdHguc3VjY2VzcygpOwotICAgICAgICB0eC5jbG9zZSgpOwotCi0gICAgICAgIGZpbmFsIE5lbzRqVHggdHgyID0gc2VydmljZS50eCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgSXRlcmF0b3JVdGlscy5jb3VudChuLmxhYmVscygpLml0ZXJhdG9yKCkpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIEl0ZXJhdG9yVXRpbHMuY291bnQoZ3JhcGgudmVydGljZXMoKSkpOwotICAgICAgICBncmFwaC50eCgpLmNsb3NlKCk7Ci0gICAgICAgIHR4Mi5jbG9zZSgpOwotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkRG9MYWJlbFNlYXJjaCgpIHsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIHRoaXMuZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJQZXJzb24iLCAibmFtZSIsICJqb2huIik7Ci0gICAgICAgIFZlcnRleCBwZXRlID0gdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIlBlcnNvbiIsICJuYW1lIiwgInBldGUiKTsKLSAgICAgICAgdGhpcy5ncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgIk1vbmtleSIsICJuYW1lIiwgInBldGUiKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICAgICAgcGV0ZS5yZW1vdmUoKTsKLSAgICAgICAgdGhpcy5ncmFwaC50eCgpLmNvbW1pdCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdGhpcy5nLlYoKS5oYXMoVC5sYWJlbCwgIlBlcnNvbiIpLmNvdW50KCkubmV4dCgpLCAwKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsZE5vdEdlbmVyYXRlVmVydGljZXNPckVkZ2VzRm9yR3JhcGhWYXJpYWJsZXMoKSB7Ci0gICAgICAgIGdyYXBoLnR4KCkucmVhZFdyaXRlKCk7Ci0gICAgICAgIGdyYXBoLnZhcmlhYmxlcygpLnNldCgibmFtZXNwYWNlIiwgInJkZi14bWwiKTsKLSAgICAgICAgdHJ5Q29tbWl0KGdyYXBoLCBncmFwaCAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInJkZi14bWwiLCBncmFwaC52YXJpYWJsZXMoKS5nZXQoIm5hbWVzcGFjZSIpLmdldCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBnLlYoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBnLkUoKS5jb3VudCgpLm5leHQoKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBJdGVyYXRvclV0aWxzLmNvdW50KHRoaXMuZ2V0QmFzZUdyYXBoKCkuYWxsTm9kZXMoKSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIEl0ZXJhdG9yVXRpbHMuY291bnQodGhpcy5nZXRCYXNlR3JhcGgoKS5hbGxSZWxhdGlvbnNoaXBzKCkpKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCBzaG91bGROb3RHZW5lcmF0ZU5vZGVzQW5kUmVsYXRpb25zaGlwcygpIHsKLSAgICAgICAgZ3JhcGgudHgoKS5yZWFkV3JpdGUoKTsKLSAgICAgICAgdHJ5Q29tbWl0KGdyYXBoLCBncmFwaCAtPiB2YWxpZGF0ZUNvdW50cygwLCAwLCAwLCAwKSk7Ci0gICAgICAgIFZlcnRleCB2ZXJ0ZXggPSBncmFwaC5hZGRWZXJ0ZXgoVC5sYWJlbCwgInBlcnNvbiIpOwotICAgICAgICB0cnlDb21taXQoZ3JhcGgsIGdyYXBoIC0+IHZhbGlkYXRlQ291bnRzKDEsIDAsIDEsIDApKTsKLSAgICAgICAgdmVydGV4LnByb3BlcnR5KCJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWFya28iLCB2ZXJ0ZXgudmFsdWUoIm5hbWUiKSk7Ci0gICAgICAgIHRyeUNvbW1pdChncmFwaCwgZ3JhcGggLT4gdmFsaWRhdGVDb3VudHMoMSwgMCwgMSwgMCkpOwotICAgICAgICB2ZXJ0ZXgucHJvcGVydHkoIm5hbWUiLCAib2tyYW0iKTsKLSAgICAgICAgdHJ5Q29tbWl0KGdyYXBoLCBnIC0+IHsKLSAgICAgICAgICAgIHZhbGlkYXRlQ291bnRzKDEsIDAsIDEsIDApOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJva3JhbSIsIHZlcnRleC52YWx1ZSgibmFtZSIpKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIFZlcnRleFByb3BlcnR5IHZlcnRleFByb3BlcnR5ID0gdmVydGV4LnByb3BlcnR5KCJuYW1lIik7Ci0gICAgICAgIHRyeUNvbW1pdChncmFwaCwgZ3JhcGggLT4gewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXhQcm9wZXJ0eS5pc1ByZXNlbnQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCB2ZXJ0ZXhQcm9wZXJ0eS5rZXkoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm9rcmFtIiwgdmVydGV4UHJvcGVydHkudmFsdWUoKSk7Ci0gICAgICAgICAgICB2YWxpZGF0ZUNvdW50cygxLCAwLCAxLCAwKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2ZXJ0ZXhQcm9wZXJ0eS5wcm9wZXJ0eSgiYWNsIiwgInByaXZhdGUiKTsKLSAgICAgICAgfSBjYXRjaCAoVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFZlcnRleFByb3BlcnR5LkV4Y2VwdGlvbnMubWV0YVByb3BlcnRpZXNOb3RTdXBwb3J0ZWQoKS5nZXRNZXNzYWdlKCksIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgc2hvdWxkU3VwcG9ydE5lbzRqTXVsdGlMYWJlbHMoKSB7Ci0gICAgICAgIGZpbmFsIE5lbzRqVmVydGV4IHZlcnRleCA9IChOZW80alZlcnRleCkgZ3JhcGguYWRkVmVydGV4KFQubGFiZWwsICJhbmltYWw6OnBlcnNvbiIsICJuYW1lIiwgIm1hcmtvIik7Ci0gICAgICAgIHRyeUNvbW1pdChncmFwaCwgZ3JhcGggLT4gewotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXgubGFiZWwoKS5lcXVhbHMoImFuaW1hbDo6cGVyc29uIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHZlcnRleC5sYWJlbHMoKS5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXgubGFiZWxzKCkuY29udGFpbnMoInBlcnNvbiIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LmxhYmVscygpLmNvbnRhaW5zKCJhbmltYWwiKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgSXRlcmF0b3JVdGlscy5jb3VudCh2ZXJ0ZXguZ2V0QmFzZVZlcnRleCgpLmxhYmVscygpLml0ZXJhdG9yKCkpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmVydGV4LmFkZExhYmVsKCJvcmdhbmlzbSIpOwotICAgICAgICB0cnlDb21taXQoZ3JhcGgsIGdyYXBoIC0+IHsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LmxhYmVsKCkuZXF1YWxzKCJhbmltYWw6Om9yZ2FuaXNtOjpwZXJzb24iKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgdmVydGV4LmxhYmVscygpLnNpemUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC5sYWJlbHMoKS5jb250YWlucygicGVyc29uIikpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXgubGFiZWxzKCkuY29udGFpbnMoImFuaW1hbCIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LmxhYmVscygpLmNvbnRhaW5zKCJvcmdhbmlzbSIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBJdGVyYXRvclV0aWxzLmNvdW50KHZlcnRleC5nZXRCYXNlVmVydGV4KCkubGFiZWxzKCkuaXRlcmF0b3IoKSkpOwotICAgICAgICB9KTsKLQotICAgICAgICB2ZXJ0ZXgucmVtb3ZlTGFiZWwoInBlcnNvbiIpOwotICAgICAgICB0cnlDb21taXQoZ3JhcGgsIGdyYXBoIC0+IHsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LmxhYmVsKCkuZXF1YWxzKCJhbmltYWw6Om9yZ2FuaXNtIikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHZlcnRleC5sYWJlbHMoKS5zaXplKCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh2ZXJ0ZXgubGFiZWxzKCkuY29udGFpbnMoImFuaW1hbCIpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LmxhYmVscygpLmNvbnRhaW5zKCJvcmdhbmlzbSIpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgdmVydGV4LmFkZExhYmVsKCJvcmdhbmlzbSIpOyAvLyByZXBlYXQgYWRkCi0gICAgICAgIHZlcnRleC5yZW1vdmVMYWJlbCgicGVyc29uIik7IC8vIHJlcGVhdCByZW1vdmUKLSAgICAgICAgdHJ5Q29tbWl0KGdyYXBoLCBncmFwaCAtPiB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC5sYWJlbCgpLmVxdWFscygiYW5pbWFsOjpvcmdhbmlzbSIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCB2ZXJ0ZXgubGFiZWxzKCkuc2l6ZSgpKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUodmVydGV4LmxhYmVscygpLmNvbnRhaW5zKCJhbmltYWwiKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKHZlcnRleC5sYWJlbHMoKS5jb250YWlucygib3JnYW5pc20iKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgSXRlcmF0b3JVdGlscy5jb3VudCh2ZXJ0ZXguZ2V0QmFzZVZlcnRleCgpLmxhYmVscygpLml0ZXJhdG9yKCkpKTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigwKSwgZy5WKCkuaGFzKFQubGFiZWwsICJvcmdhbmlzbSIpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxKSwgZy5WKCkuaGFzKFQubGFiZWwsIExhYmVsUC5vZigib3JnYW5pc20iKSkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDEpLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJhbmltYWwiKSkuY291bnQoKS5uZXh0KCkpOwotCi0gICAgICAgIHZlcnRleC5yZW1vdmVMYWJlbCgib3JnYW5pc20iKTsKLSAgICAgICAgdmVydGV4LnJlbW92ZUxhYmVsKCJhbmltYWwiKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIHZlcnRleC5sYWJlbHMoKS5zaXplKCkpOwotICAgICAgICB2ZXJ0ZXguYWRkTGFiZWwoIm9yZ2FuaXNtLWFuaW1hbCIpOwotICAgICAgICB0cnlDb21taXQoZ3JhcGgsIGdyYXBoIC0+IHsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YoMCksIGcuVigpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoIm9yZ2FuaXNtIikpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YoMCksIGcuVigpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoImFuaW1hbCIpKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDApLCBnLlYoKS5tYXAoVHJhdmVyc2VyOjpnZXQpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoIm9yZ2FuaXNtIikpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhMb25nLnZhbHVlT2YoMCksIGcuVigpLm1hcChUcmF2ZXJzZXI6OmdldCkuaGFzKFQubGFiZWwsIExhYmVsUC5vZigiYW5pbWFsIikpLmNvdW50KCkubmV4dCgpKTsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDEpLCBnLlYoKS5oYXMoVC5sYWJlbCwgTGFiZWxQLm9mKCJvcmdhbmlzbS1hbmltYWwiKSkuY291bnQoKS5uZXh0KCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKExvbmcudmFsdWVPZigxKSwgZy5WKCkuaGFzKFQubGFiZWwsICJvcmdhbmlzbS1hbmltYWwiKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDEpLCBnLlYoKS5tYXAoVHJhdmVyc2VyOjpnZXQpLmhhcyhULmxhYmVsLCBMYWJlbFAub2YoIm9yZ2FuaXNtLWFuaW1hbCIpKS5jb3VudCgpLm5leHQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoTG9uZy52YWx1ZU9mKDEpLCBnLlYoKS5tYXAoVHJhdmVyc2VyOjpnZXQpLmhhcyhULmxhYmVsLCAib3JnYW5pc20tYW5pbWFsIikuY291bnQoKS5uZXh0KCkpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpHcmFwaFN0cnVjdHVyZVN0YW5kYXJkVGVzdC5qYXZhIGIvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vbmVvNGovc3RydWN0dXJlL05lbzRqR3JhcGhTdHJ1Y3R1cmVTdGFuZGFyZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYzOTZiMS4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9uZW80ai9zdHJ1Y3R1cmUvTmVvNGpHcmFwaFN0cnVjdHVyZVN0YW5kYXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5zdHJ1Y3R1cmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLm5lbzRqLk5lbzRqR3JhcGhQcm92aWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5TdHJ1Y3R1cmVTdGFuZGFyZFN1aXRlOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqLwotQFJ1bldpdGgoU3RydWN0dXJlU3RhbmRhcmRTdWl0ZS5jbGFzcykKLUBHcmFwaFByb3ZpZGVyQ2xhc3MocHJvdmlkZXIgPSBOZW80akdyYXBoUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gTmVvNGpHcmFwaC5jbGFzcykKLXB1YmxpYyBjbGFzcyBOZW80akdyYXBoU3RydWN0dXJlU3RhbmRhcmRUZXN0IHsKLX0KZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL2N1Y3VtYmVyLnByb3BlcnRpZXMgYi9uZW80ai1ncmVtbGluL3NyYy90ZXN0L3Jlc291cmNlcy9jdWN1bWJlci5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmI5MTI4Li4wMDAwMDAwCi0tLSBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL2N1Y3VtYmVyLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1ndWljZS5pbmplY3Rvci1zb3VyY2U9b3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5uZW80ai5OZW80akdyYXBoRmVhdHVyZVRlc3QkV29ybGRJbmplY3RvclNvdXJjZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stc2lsZW50LnhtbCBiL25lbzRqLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZ2JhY2stc2lsZW50LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I5ZDI1Mi4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXNpbGVudC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08IS0tCi1MaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLWNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAotdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKLSh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi10aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi1Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi1kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi1TZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi1saW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPGNvbmZpZ3VyYXRpb24+Ci0gICAgPGFwcGVuZGVyIG5hbWU9InN0ZG91dCIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUuQ29uc29sZUFwcGVuZGVyIj4KLSAgICAgICAgPGVuY29kZXI+Ci0gICAgICAgICAgICA8cGF0dGVybj5bJXBdICVDIC0gJW0lbjwvcGF0dGVybj4KLSAgICAgICAgPC9lbmNvZGVyPgotICAgIDwvYXBwZW5kZXI+Ci0gICAgPCEtLSBuZWVkIHRvIHR1cm4gdGhpcyBvbiBzbyB0aGF0IHdlIGtub3cgdGhlIHRlc3Qgc2VlZCAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uVGVzdEhlbHBlciIgbGV2ZWw9IklORk8iLz4KLSAgICA8cm9vdCBsZXZlbD0iT0ZGIj4KLSAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9InN0ZG91dCIvPgotICAgIDwvcm9vdD4KLTwvY29uZmlndXJhdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sIGIvbmVvNGotZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nYmFjay10ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFiY2EwZC4uMDAwMDAwMAotLS0gYS9uZW80ai1ncmVtbGluL3NyYy90ZXN0L3Jlc291cmNlcy9sb2diYWNrLXRlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPCEtLQotTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi1jb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKLXRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLVRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCi0odGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAotdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxjb25maWd1cmF0aW9uPgotICAgIDxhcHBlbmRlciBuYW1lPSJzdGRvdXQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLkNvbnNvbGVBcHBlbmRlciI+Ci0gICAgICAgIDxlbmNvZGVyPgotICAgICAgICAgICAgPHBhdHRlcm4+WyVwXSAlQyAtICVtJW48L3BhdHRlcm4+Ci0gICAgICAgIDwvZW5jb2Rlcj4KLSAgICA8L2FwcGVuZGVyPgotICAgIDwhLS0gbmVlZCB0byB0dXJuIHRoaXMgb24gc28gdGhhdCB3ZSBrbm93IHRoZSB0ZXN0IHNlZWQgLS0+Ci0gICAgPGxvZ2dlciBuYW1lPSJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLlRlc3RIZWxwZXIiIGxldmVsPSJJTkZPIi8+Ci0gICAgPHJvb3QgbGV2ZWw9IldBUk4iPgotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0ic3Rkb3V0Ii8+Ci0gICAgPC9yb290PgotPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BvbS54bWwgYi9wb20ueG1sCmluZGV4IGFhZWYxYjIuLjU3MDk3YjMgMTAwNjQ0Ci0tLSBhL3BvbS54bWwKKysrIGIvcG9tLnhtbApAQCAtMjUsNyArMjUsNyBAQAogICAgIDwvcGFyZW50PgogICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj4zLjguMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj40LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgogICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3A8L25hbWU+CiAgICAgPGRlc2NyaXB0aW9uPkEgR3JhcGggQ29tcHV0aW5nIEZyYW1ld29yazwvZGVzY3JpcHRpb24+CkBAIC0xMzAsMjEgKzEzMCwxNyBAQAogICAgICAgICA8bW9kdWxlPmdyZW1saW4tdXRpbDwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmdyZW1saW4tZ3Jvb3Z5PC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+dGlua2VyZ3JhcGgtZ3JlbWxpbjwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmdyZW1saW4tamF2YXNjcmlwdDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmdyZW1saW4tZHJpdmVyPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Z3JlbWxpbi1zZXJ2ZXI8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5ncmVtbGluLWpzPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+Z3JlbWxpbi1weXRob248L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5ncmVtbGluLWRvdG5ldDwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmdyZW1saW4tZ288L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5oYWRvb3AtZ3JlbWxpbjwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPnNwYXJrLWdyZW1saW48L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5uZW80ai1ncmVtbGluPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+c3BhcnFsLWdyZW1saW48L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5ncmVtbGluLWRyaXZlcjwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmdyZW1saW4tY29uc29sZTwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmdyZW1saW4tc2VydmVyPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+Z3JlbWxpbi1hcmNoZXR5cGU8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5ncmVtbGluLXRvb2xzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+Z3JlbWxpbnQ8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5ncmVtbGluLW1jcDwvbW9kdWxlPgogICAgIDwvbW9kdWxlcz4KICAgICA8c2NtPgogICAgICAgICA8Y29ubmVjdGlvbj5zY206Z2l0OmdpdEBnaXRodWIuY29tOmFwYWNoZS90aW5rZXJwb3AuZ2l0PC9jb25uZWN0aW9uPgpAQCAtMTUyLDMzICsxNDgsNDQgQEAKICAgICAgICAgPHVybD5odHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3RpbmtlcnBvcDwvdXJsPgogICAgIDwvc2NtPgogICAgIDxwcm9wZXJ0aWVzPgotICAgICAgICA8YW50bHI0LnZlcnNpb24+NC45LjE8L2FudGxyNC52ZXJzaW9uPgotICAgICAgICA8Y2FmZmVpbmUudmVyc2lvbj4yLjMuMTwvY2FmZmVpbmUudmVyc2lvbj4KLSAgICAgICAgPGNvbW1vbnMuY29sbGVjdGlvbnMudmVyc2lvbj4zLjIuMjwvY29tbW9ucy5jb2xsZWN0aW9ucy52ZXJzaW9uPgotICAgICAgICA8Y29tbW9ucy5jb25maWd1cmF0aW9uLnZlcnNpb24+Mi45LjA8L2NvbW1vbnMuY29uZmlndXJhdGlvbi52ZXJzaW9uPgorICAgICAgICA8YW50bHI0LnZlcnNpb24+NC4xMy4yPC9hbnRscjQudmVyc2lvbj4KKyAgICAgICAgPGNhZmZlaW5lLnZlcnNpb24+My4yLjM8L2NhZmZlaW5lLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLmNvZGVjLnZlcnNpb24+MS4yMC4wPC9jb21tb25zLmNvZGVjLnZlcnNpb24+CisgICAgICAgIDxjb21tb25zLmNvbGxlY3Rpb25zLnZlcnNpb24+NC41LjA8L2NvbW1vbnMuY29sbGVjdGlvbnMudmVyc2lvbj4KKyAgICAgICAgPGNvbW1vbnMuY29uZmlndXJhdGlvbi52ZXJzaW9uPjIuMTMuMDwvY29tbW9ucy5jb25maWd1cmF0aW9uLnZlcnNpb24+CiAgICAgICAgIDxjb21tb25zLmxhbmcudmVyc2lvbj4yLjY8L2NvbW1vbnMubGFuZy52ZXJzaW9uPgogICAgICAgICA8Y29tbW9ucy5pby52ZXJzaW9uPjIuOC4wPC9jb21tb25zLmlvLnZlcnNpb24+Ci0gICAgICAgIDxjb21tb25zLmxhbmczLnZlcnNpb24+My4xMi4wPC9jb21tb25zLmxhbmczLnZlcnNpb24+Ci0gICAgICAgIDxjb21tb25zLnRleHQudmVyc2lvbj4xLjEwLjA8L2NvbW1vbnMudGV4dC52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy5sYW5nMy52ZXJzaW9uPjMuMjAuMDwvY29tbW9ucy5sYW5nMy52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy50ZXh0LnZlcnNpb24+MS4xNS4wPC9jb21tb25zLnRleHQudmVyc2lvbj4KICAgICAgICAgPGN1Y3VtYmVyLnZlcnNpb24+Ny4yMS4xPC9jdWN1bWJlci52ZXJzaW9uPgogICAgICAgICA8ZXhwNGoudmVyc2lvbj4wLjQuODwvZXhwNGoudmVyc2lvbj4KICAgICAgICAgPGdyb292eS52ZXJzaW9uPjQuMC4yNTwvZ3Jvb3Z5LnZlcnNpb24+Ci0gICAgICAgIDxndWljZS52ZXJzaW9uPjQuMi4zPC9ndWljZS52ZXJzaW9uPgotICAgICAgICA8aGFkb29wLnZlcnNpb24+My4zLjM8L2hhZG9vcC52ZXJzaW9uPgorICAgICAgICA8IS0tCisgICAgICAgICAgZG9uJ3QgcmVhbGx5IHVzZSBndWF2YSBkaXJlY3RseSwgYnV0IHRoZXJlIGFyZSBhIGxvdCBvZiBqYXIgY29uZmxpY3RzIGFyb3VuZCBpdCwKKyAgICAgICAgICBzbyBjZW50cmFsaXppbmcgdGhhdCBkZXBlbmRlbmN5IHZlcnNpb24gaGVyZQorICAgICAgICAtLT4KKyAgICAgICAgPGd1YXZhLnZlcnNpb24+MzEuMC4xLWpyZTwvZ3VhdmEudmVyc2lvbj4KKyAgICAgICAgPCEtLQorICAgICAgICAgIGRvbid0IHRoaW5rIHdlIG5lZWQgZ3VpY2UgNyBhdCB0aGUgbW9tZW50IC0gdGhlIG9ubHkgZGlmZmVyZW5jZSB3aXRoIDYgaXMgdGhhdAorICAgICAgICAgIGl0IHN1cHBvcnRzIHRoZSBqYWthcnRhLmluamVjdCBuYW1lc3BhY2Ugd2hpY2ggdGlua2VycG9wIGRvZXNuJ3QgZnVzcyB3aXRoCisgICAgICAgIC0tPgorICAgICAgICA8Z3VpY2UudmVyc2lvbj42LjAuMDwvZ3VpY2UudmVyc2lvbj4KKyAgICAgICAgPGhhZG9vcC52ZXJzaW9uPjMuNC4yPC9oYWRvb3AudmVyc2lvbj4KICAgICAgICAgPGhhbWNyZXN0LnZlcnNpb24+My4wPC9oYW1jcmVzdC52ZXJzaW9uPgogICAgICAgICA8amF2YS50dXBsZXMudmVyc2lvbj4xLjI8L2phdmEudHVwbGVzLnZlcnNpb24+CiAgICAgICAgIDxqYXZhZG9jLXBsdWdpbi52ZXJzaW9uPjMuMy4xPC9qYXZhZG9jLXBsdWdpbi52ZXJzaW9uPgogICAgICAgICA8amF2YXBvZXQudmVyc2lvbj4xLjEzLjA8L2phdmFwb2V0LnZlcnNpb24+CiAgICAgICAgIDxqYmNyeXB0LnZlcnNpb24+MC40PC9qYmNyeXB0LnZlcnNpb24+CiAgICAgICAgIDxqdW5pdC52ZXJzaW9uPjQuMTMuMTwvanVuaXQudmVyc2lvbj4KLSAgICAgICAgPGtlcmJ5LnZlcnNpb24+Mi4wLjE8L2tlcmJ5LnZlcnNpb24+Ci0gICAgICAgIDxsb2diYWNrLnZlcnNpb24+MS4yLjEzPC9sb2diYWNrLnZlcnNpb24+CisgICAgICAgIDxrZXJieS52ZXJzaW9uPjIuMC4zPC9rZXJieS52ZXJzaW9uPgorICAgICAgICA8bG9nYmFjay52ZXJzaW9uPjEuMy4xNTwvbG9nYmFjay52ZXJzaW9uPgogICAgICAgICA8bWV0cmljcy52ZXJzaW9uPjMuMC4yPC9tZXRyaWNzLnZlcnNpb24+CiAgICAgICAgIDxtb2NraXRvLnZlcnNpb24+NS4xOS4wPC9tb2NraXRvLnZlcnNpb24+CiAgICAgICAgIDxuZXR0eS52ZXJzaW9uPjQuMS4xMjUuRmluYWw8L25ldHR5LnZlcnNpb24+Ci0gICAgICAgIDxzbGY0ai52ZXJzaW9uPjEuNy4yNTwvc2xmNGoudmVyc2lvbj4KKyAgICAgICAgPHNsZjRqLnZlcnNpb24+Mi4wLjE2PC9zbGY0ai52ZXJzaW9uPgogICAgICAgICA8c25ha2V5YW1sLnZlcnNpb24+Mi4wPC9zbmFrZXlhbWwudmVyc2lvbj4KLSAgICAgICAgPHNwYXJrLnZlcnNpb24+My4zLjI8L3NwYXJrLnZlcnNpb24+CisgICAgICAgIDxzcGFyay52ZXJzaW9uPjMuNS40PC9zcGFyay52ZXJzaW9uPgorICAgICAgICA8YXdzc2RrLnZlcnNpb24+Mi4yOS4zPC9hd3NzZGsudmVyc2lvbj4KICAgICAgICAgPCEtLSBWZXJzaW9uIGFsaWduZWQgd2l0aCBOZXR0eSdzIG9wdGlvbmFsIGJjcGtpeCBkZXBlbmRlbmN5IHVzZWQgZm9yIFNlbGZTaWduZWRDZXJ0aWZpY2F0ZSAtLT4KICAgICAgICAgPGJvdW5jeWNhc3RsZS52ZXJzaW9uPjEuNjk8L2JvdW5jeWNhc3RsZS52ZXJzaW9uPgogICAgICAgICA8YXl6YS52ZXJzaW9uPjEwLjAuMDwvYXl6YS52ZXJzaW9uPgpAQCAtMjI0LDkgKzIzMSw5IEBACiAgICAgICAgICAgICAtLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5uZXQ9QUxMLVVOTkFNRUQKICAgICAgICAgPC9qZGsxN0p2bUFyZ3M+CiAKLSAgICAgICAgPHJ1bnRpbWUubnBtLnZlcnNpb24+MTAuOC4yPC9ydW50aW1lLm5wbS52ZXJzaW9uPgotICAgICAgICA8cnVudGltZS5ub2RlLnZlcnNpb24+djIwLjE5LjQ8L3J1bnRpbWUubm9kZS52ZXJzaW9uPgotICAgICAgICA8bm9kZS50ZXN0LnZlcnNpb24+MjA8L25vZGUudGVzdC52ZXJzaW9uPgorICAgICAgICA8cnVudGltZS5ucG0udmVyc2lvbj4xMC45LjQ8L3J1bnRpbWUubnBtLnZlcnNpb24+CisgICAgICAgIDxydW50aW1lLm5vZGUudmVyc2lvbj52MjIuMjIuMTwvcnVudGltZS5ub2RlLnZlcnNpb24+CisgICAgICAgIDxub2RlLnRlc3QudmVyc2lvbj4yMjwvbm9kZS50ZXN0LnZlcnNpb24+CiAgICAgPC9wcm9wZXJ0aWVzPgogICAgIDxidWlsZD4KICAgICAgICAgPGRpcmVjdG9yeT4ke2Jhc2VkaXJ9L3RhcmdldDwvZGlyZWN0b3J5PgpAQCAtMjc3LDggKzI4NCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWRvdG5ldC9zcmMvb2JqLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWRvdG5ldC9zcmMvX3NpdGUvKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9ub2RlX21vZHVsZXMvKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC8uaWRlYS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+bm9kZV9tb2R1bGVzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9ub2RlX21vZHVsZXMvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5pZGVhLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24tcmVwb3J0cy8qKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1weXRob24vc3JjL21haW4vanl0aG9uLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vdmVudi8qKjwvZXhjbHVkZT4KQEAgLTQ3Nyw2ICs0ODUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5wcm9qZWN0PC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLnNldHRpbmdzLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmlkZWEvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmNsYXVkZS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8uY29kZXgvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmNvcGlsb3QvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmN1cnNvci8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8ua2lyby8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8uanVuaWUvKio8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4ucmVwb3NpdG9yeS8qKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC8qKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmRhdGEvKi50eHQ8L2V4Y2x1ZGU+CkBAIC00ODUsNiArNDk5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmRvY3Mvb3JpZ2luYWwvKio8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL3NpdGUvaG9tZS9jc3MvKio8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL3NpdGUvaG9tZS9qcy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmRvY3Mvc2l0ZS9ob21lL3JvYm90cy50eHQ8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL3NpdGUvaG9tZS9zaXRlbWFwLnhtbDwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmRvY3MvZ3JlbWxpbnQvYnVpbGQvKio8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL2dyZW1saW50L3B1YmxpYy9DTkFNRTwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tY29uc29sZS9iaW4vZ3JlbWxpbi5zaDwvZXhjbHVkZT4KQEAgLTUzNCw2ICs1NTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovbnBtLWRlYnVnLmxvZzwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL2Rpc3QvKio8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9idWlsZC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLy5kdWVsLWNhY2hlLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+ZG9jcy91cGdyYWRlL3NwZWMvY21kYi1kYXRhLmdyZW1saW48L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL3VwZ3JhZGUvc3BlYy9zcGVjLm1kPC9leGNsdWRlPgogICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBqYXZhc2NyaXB0IGRvY3MvbGliIC0tPgpAQCAtNTUyLDYgKzU2OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9nby5zdW08L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9jb3ZlcmFnZS5vdXQ8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9ncmVtbGluY29uc29sZXRlc3QuZWdnLWluZm8vKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLSUxMLm1kIHJlcXVpcmVzIGZyb250bWF0dGVyIGF0IHZlcnkgc3RhcnQgb2YgZmlsZSBzbyB0aGF0IHByZWNsdWRlcyB1c2Ugb2YgdGhlIGxpY2Vuc2UgaGVhZGVyIC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLnNraWxscy8qKi9TS0lMTC5tZDwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgICAgPGxpY2Vuc2VzPgogICAgICAgICAgICAgICAgICAgICAgICAgPGxpY2Vuc2UgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUucmF0LmFuYWx5c2lzLmxpY2Vuc2UuQXBhY2hlU29mdHdhcmVMaWNlbnNlMjAiLz4KQEAgLTY0MCw2ICs2NTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ0xpbmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURsb2diYWNrLmNvbmZpZ3VyYXRpb249JHtsb2diYWNrLXRlc3QucHJvcGVydGllc30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRGxvZzRqLmNvbmZpZ3VyYXRpb249JHtsb2c0ai10ZXN0LnByb3BlcnRpZXN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURzbGY0ai5wcm92aWRlcj1jaC5xb3MubG9nYmFjay5jbGFzc2ljLnNwaS5Mb2diYWNrU2VydmljZVByb3ZpZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURidWlsZC5kaXI9JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRGlzLnRlc3Rpbmc9dHJ1ZSAtRGphdmEubmV0LnByZWZlcklQdjRTdGFjaz10cnVlICR7c3VyZXNhZmVBcmdzfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7amRrMTdKdm1BcmdzfQpAQCAtNjY4LDYgKzY4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmdMaW5lPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURsb2diYWNrLmNvbmZpZ3VyYXRpb249JHtsb2diYWNrLXRlc3QucHJvcGVydGllc30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EbG9nNGouY29uZmlndXJhdGlvbj0ke2xvZzRqLXRlc3QucHJvcGVydGllc30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1Ec2xmNGoucHJvdmlkZXI9Y2gucW9zLmxvZ2JhY2suY2xhc3NpYy5zcGkuTG9nYmFja1NlcnZpY2VQcm92aWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURob3N0PWxvY2FsaG9zdCAtRHBvcnQ9ODE4MgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURidWlsZC5kaXI9JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0gLURpcy50ZXN0aW5nPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EamF2YS5uZXQucHJlZmVySVB2NFN0YWNrPXRydWUgJHtzdXJlc2FmZUFyZ3N9CkBAIC03MTcsNyArNzM4LDcgQEAKICAgICAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuZ21hdmVucGx1czwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z21hdmVucGx1cy1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj40LjEuMTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0Qnl0ZWNvZGU+MTE8L3RhcmdldEJ5dGVjb2RlPgogICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CkBAIC03MjUsNyArNzQ2LDcgQEAKICAgICAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNoYWRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+My40LjE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNi4wPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxjcmVhdGVEZXBlbmRlbmN5UmVkdWNlZFBvbT5mYWxzZTwvY3JlYXRlRGVwZW5kZW5jeVJlZHVjZWRQb20+CiAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KQEAgLTc3Miw2ICs3OTMsNDUgQEAKICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NhZmZlaW5lLnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS50ZXN0aW5nLmNvbXBpbGU8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tcGlsZS10ZXN0aW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjAuMjMuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmd1YXZhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3VhdmE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5lcnJvcnByb25lPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXJyb3JfcHJvbmVfYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDwhLS0gc3RhcnQgLSByZXNvbHZlIHNlbGYtY29uZmxpY3Qgd2l0aGluIGNvbXBpbGUtdGVzdGluZyAtLT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuZ3VhdmE8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3VhdmE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtndWF2YS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuZXJyb3Jwcm9uZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmVycm9yX3Byb25lX2Fubm90YXRpb25zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmVycm9ycHJvbmU8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXJyb3JfcHJvbmVfYW5ub3RhdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40My4wPC92ZXJzaW9uPgorICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgPCEtLSBlbmQgLSByZXNvbHZlIHNlbGYtY29uZmxpY3Qgd2l0aGluIGNvbXBpbGUtdGVzdGluZyAtLT4KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuaW5qZWN0PC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1aWNlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z3VpY2UudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNvbW1vbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb25maWd1cmF0aW9uMjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMuY29uZmlndXJhdGlvbi52ZXJzaW9ufTwvdmVyc2lvbj4KQEAgLTc4MSwyMSArODQxLDkgQEAKICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLXRleHQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLnRleHQudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8IS0tIGNvbW1vbnMtY29uZmlndXJhdGlvbjIgcmVxdWlyZXMgYmVhbnV0aWxzIGJlY2F1c2Ugd2UgcmVseSBvbiBmaWxlIGxvYWRlcnMgLS0+CiAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWJlYW51dGlsczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWJlYW51dGlsczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjExLjA8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxvZ2dpbmc8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxvZ2dpbmc8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KLSAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNvbW1vbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2xsZWN0aW9uczQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLmNvbGxlY3Rpb25zLnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC04NjYsMTMgKzkxNCwxNiBAQAogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5odHRwY29tcG9uZW50czwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwY2xpZW50PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjQuNS4xMzwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj40LjUuMTQ8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDwhLS0gYnJpbmcgY29tbW9ucy1jb2RlYyBpbiBsaW5lIHdpdGggVGlua2VyUG9wIC0tPgogICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2RlYzwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29kZWM8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KQEAgLTkyMywxNSArOTc0LDExIEBACiAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtzbGY0ai52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qY2wtb3Zlci1zbGY0ajwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NsZjRqLnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmphY29jbzwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNvY28tbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjAuOC44PC92ZXJzaW9uPgogICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgPCEtLSBzdGFydCAtIGFsaWduIGh0dHBjbGllbnQgdG8gVGlua2VyUG9wIC0tPgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1pbzwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWlvPC9hcnRpZmFjdElkPgpAQCAtOTQwLDggKzk4Nyw5IEBACiAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvZGVjPC9ncm91cElkPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29kZWM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xNTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMuY29kZWMudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8IS0tIGVuZCAtIGFsaWduIGh0dHBjbGllbnQgdG8gVGlua2VyUG9wIC0tPgogICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICA8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgogCkBAIC0xNDk1LDggKzE1NDMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMuY29uZmlndXJhdGlvbi52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2xsZWN0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jb21tb25zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvbGxlY3Rpb25zNDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtjb21tb25zLmNvbGxlY3Rpb25zLnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgpAQCAtMTYxMSwxMSArMTY1OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z3Jvb3Z5LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdyb292eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3Jvb3Z5LWpzb248L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Z3Jvb3Z5LnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNvbW1vbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbGFuZzM8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy5sYW5nMy52ZXJzaW9ufTwvdmVyc2lvbj4KQEAgLTE2NDYsNiArMTY4OSw0MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3NuYWtleWFtbC52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c29mdHdhcmUuYW1hem9uLmF3c3NkazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+aHR0cC1hdXRoLWF3czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthd3NzZGsudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnNvZnR3YXJlLmFtYXpvbi5hd3NzZGs8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHAtYXV0aC1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwLWNsaWVudC1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hdXRoPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2F3c3Nkay52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c29mdHdhcmUuYW1hem9uLmF3c3NkazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dXRpbHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5wcm90b2NvbC1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2F3c3Nkay52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwaWd1YXJkaWFuPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGlndWFyZGlhbi1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5naXRodWIuaGFra3k1NDwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXl6YS1mb3ItbmV0dHk8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXl6YS52ZXJzaW9ufTwvdmVyc2lvbj4KQEAgLTE4MDMsOCArMTg4MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7bmV0dHkudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGRpdGlvbmFsRGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkaXRpb25hbERlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY29tbW9uczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jb2xsZWN0aW9uczQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7Y29tbW9ucy5jb2xsZWN0aW9ucy52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KQEAgLTE4MjgsMTEgKzE5MDYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5ncm9vdnk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdyb292eS1qc29uPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2dyb292eS52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5jb21tb25zPC9ncm91cElkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxhbmczPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2NvbW1vbnMubGFuZzMudmVyc2lvbn08L3ZlcnNpb24+CkBAIC0xODc3LDYgKzE5NTAsMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXl6YTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtheXphLnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odHRwLWF1dGgtYXdzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke2F3c3Nkay52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c29mdHdhcmUuYW1hem9uLmF3c3NkazwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+aHR0cC1hdXRoLXNwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthd3NzZGsudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnNvZnR3YXJlLmFtYXpvbi5hd3NzZGs8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHAtY2xpZW50LXNwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthd3NzZGsudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnNvZnR3YXJlLmFtYXpvbi5hd3NzZGs8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmF1dGg8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZGl0aW9uYWxEZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zb2Z0d2FyZS5hbWF6b24uYXdzc2RrPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD51dGlsczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHthd3NzZGsudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGRpdGlvbmFsRGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRkaXRpb25hbERlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnNvZnR3YXJlLmFtYXpvbi5hd3NzZGs8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnByb3RvY29sLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7YXdzc2RrLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRkaXRpb25hbERlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KQEAgLTE5NDksNiArMjA1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ0xpbmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EbG9nYmFjay5jb25maWd1cmF0aW9uPSR7bG9nYmFjay1zaWxlbnQucHJvcGVydGllc30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURsb2c0ai5jb25maWd1cmF0aW9uPSR7bG9nNGotc2lsZW50LnByb3BlcnRpZXN9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1Ec2xmNGoucHJvdmlkZXI9Y2gucW9zLmxvZ2JhY2suY2xhc3NpYy5zcGkuTG9nYmFja1NlcnZpY2VQcm92aWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRGJ1aWxkLmRpcj0ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fSAtRGlzLnRlc3Rpbmc9dHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRGphdmEubmV0LnByZWZlcklQdjRTdGFjaz10cnVlICR7c3VyZXNhZmVBcmdzfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2pkazE3SnZtQXJnc30KQEAgLTIwNTcsNiArMjE2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJnTGluZT5Ae3N1cmVmaXJlQXJnTGluZX0gLURsb2diYWNrLmNvbmZpZ3VyYXRpb249JHtsb2diYWNrLXRlc3QucHJvcGVydGllc30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURsb2c0ai5jb25maWd1cmF0aW9uPSR7bG9nNGotdGVzdC5wcm9wZXJ0aWVzfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRHNsZjRqLnByb3ZpZGVyPWNoLnFvcy5sb2diYWNrLmNsYXNzaWMuc3BpLkxvZ2JhY2tTZXJ2aWNlUHJvdmlkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURidWlsZC5kaXI9JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0gLURpcy50ZXN0aW5nPXRydWUgJHtzdXJlc2FmZUFyZ3N9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EamF2YS5uZXQucHJlZmVySVB2NFN0YWNrPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FyZ0xpbmU+CkBAIC0yMDY4LDYgKzIxNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ0xpbmU+QHtmYWlsc2FmZUFyZ0xpbmV9IC1EbG9nYmFjay5jb25maWd1cmF0aW9uPSR7bG9nYmFjay10ZXN0LnByb3BlcnRpZXN9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EbG9nNGouY29uZmlndXJhdGlvbj0ke2xvZzRqLXRlc3QucHJvcGVydGllc30gLURob3N0PWxvY2FsaG9zdCAtRHBvcnQ9ODE4MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtRHNsZjRqLnByb3ZpZGVyPWNoLnFvcy5sb2diYWNrLmNsYXNzaWMuc3BpLkxvZ2JhY2tTZXJ2aWNlUHJvdmlkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLURidWlsZC5kaXI9JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0gLURpcy50ZXN0aW5nPXRydWUgJHtzdXJlc2FmZUFyZ3N9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EamF2YS5uZXQucHJlZmVySVB2NFN0YWNrPXRydWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FyZ0xpbmU+CmRpZmYgLS1naXQgYS9zb3VyY2UtcmVsZWFzZS54bWwgYi9zb3VyY2UtcmVsZWFzZS54bWwKaW5kZXggZWFlYjI3Ni4uODkwZTc1YSAxMDA2NDQKLS0tIGEvc291cmNlLXJlbGVhc2UueG1sCisrKyBiL3NvdXJjZS1yZWxlYXNlLnhtbApAQCAtNDgsNiArNDgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZXNlIGZpbGVzIHdpbGwgYmUgcHJlc2VudC4gU28sIGl0J3Mgc2FmZXIgdG8gZXhjbHVkZSB0aGVtLgogICAgICAgICAgICAgICAgIC0tPgogCisgICAgICAgICAgICAgICAgPCEtLSBBSSBjb2RpbmcgYWdlbnQgZGlyZWN0b3JpZXMgLS0+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmNsYXVkZS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8uY29kZXgvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmNvcGlsb3QvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovLmN1cnNvci8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8ua2lyby8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8uanVuaWUvKio8L2V4Y2x1ZGU+CisKICAgICAgICAgICAgICAgICA8IS0tIElERXMgLS0+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+JXJlZ2V4Wyg/ISgoPyEke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS8pW14vXSsvKSpzcmMvKSguKi8pP21hdmVuLWVjbGlwc2VcLnhtbF08L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+JXJlZ2V4Wyg/ISgoPyEke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS8pW14vXSsvKSpzcmMvKSguKi8pP1wucHJvamVjdF08L2V4Y2x1ZGU+CkBAIC04MSw4ICs4OSw2IEBACiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+ZG9jcy9ncmVtbGludC9wYWNrYWdlLWxvY2suanNvbjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL2dyZW1saW50L25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5kb2NzL2dyZW1saW50L2J1aWxkLyoqPC9leGNsdWRlPgotICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW50L25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGludC9ub2RlLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tZG90bmV0Ly5nbHY8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1kb3RuZXQvZ3JlbWxpbi0qLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tZG90bmV0L3NyYy9kb2NmeC8qKjwvZXhjbHVkZT4KQEAgLTEwNCwyMCArMTEwLDI2IEBACiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1weXRob24vc3JjL21haW4vcHl0aG9uLy5pZGVhLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tcHl0aG9uL3NyYy9tYWluL3B5dGhvbi8uZWdncy8qKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLXB5dGhvbi9zcmMvbWFpbi9weXRob24vKiovX19weWNhY2hlX18vKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qYXZhc2NyaXB0Ly5nbHY8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0Ly5pZGVhLyoqPC9leGNsdWRlPgotICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9ncmVtbGluLSovKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qYXZhc2NyaXB0L3NyYy9tYWluL2phdmFzY3JpcHQvZ3JlbWxpbi1qYXZhc2NyaXB0L2RvYy8qKjwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWphdmFzY3JpcHQvc3JjL21haW4vamF2YXNjcmlwdC9ncmVtbGluLWphdmFzY3JpcHQvZXRjLyoqPC9leGNsdWRlPgotICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9ub2RlLyoqPC9leGNsdWRlPgotICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tamF2YXNjcmlwdC9zcmMvbWFpbi9qYXZhc2NyaXB0L2dyZW1saW4tamF2YXNjcmlwdC9ub2RlX21vZHVsZXMvKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qYXZhc2NyaXB0L2V4YW1wbGVzL25vZGUvbm9kZV9tb2R1bGVzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tanMvZ3JlbWxpbnQvbm9kZV9tb2R1bGVzLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tanMvZ3JlbWxpbnQvbm9kZS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL25vZGUvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvLmdsdjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC8uaWRlYS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9ncmVtbGluLSovKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qcy9ncmVtbGluLWphdmFzY3JpcHQvZG9jLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L2V0Yy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9ub2RlLyoqPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tanMvZ3JlbWxpbi1qYXZhc2NyaXB0L25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC8uZHVlbC1jYWNoZS8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9idWlsZC8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tamF2YXNjcmlwdC9leGFtcGxlcy9ub2RlL25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tbWNwL25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWpzL2dyZW1saW4tbWNwL25vZGUvKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1qcy9ncmVtbGluLW1jcC9kaXN0LyoqPC9leGNsdWRlPgogICAgICAgICAgICAgICAgIDxleGNsdWRlPmdyZW1saW4tZ28vLmdsdjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWdvL2dyZW1saW4tKi8qKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLWdvL2NvdmVyYWdlLm91dDwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L25vZGVfbW9kdWxlcy8qKjwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZT5ncmVtbGluLW1jcC9zcmMvbWFpbi9qYXZhc2NyaXB0L25vZGUvKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Z3JlbWxpbi1tY3Avc3JjL21haW4vamF2YXNjcmlwdC9kaXN0LyoqPC9leGNsdWRlPgogICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgPC9maWxlU2V0PgogICAgICAgICA8IS0tIGxpY2Vuc2UsIHJlYWRtZSwgZXRjLiBjYWxjdWxhdGVkIGF0IGJ1aWxkIHRpbWUgLS0+CmRpZmYgLS1naXQgYS9zcGFyay1ncmVtbGluL3BvbS54bWwgYi9zcGFyay1ncmVtbGluL3BvbS54bWwKaW5kZXggMjdmYzYzNi4uZDgwZTBmMyAxMDA2NDQKLS0tIGEvc3BhcmstZ3JlbWxpbi9wb20ueG1sCisrKyBiL3NwYXJrLWdyZW1saW4vcG9tLnhtbApAQCAtMjEsMjMgKzIxLDEyIEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPnNwYXJrLWdyZW1saW48L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBTcGFyayBHcmVtbGluPC9uYW1lPgogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5ndWF2YTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1YXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MjcuMC1qcmU8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuZmluZGJ1Z3M8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjMwNTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3JlbWxpbi1jb3JlPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgpAQCAtNDcsNiArMzYsMTEgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPmhhZG9vcC1ncmVtbGluPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPCEtLSBwcmVmZXIgZ3JlbWxpbi10ZXN0L3NwYXJrIG1ldGVyaWNzIC0tPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmlvLmRyb3B3aXphcmQubWV0cmljczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWV0cmljcy1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgIDwhLS0gcHJlZmVyIGdyZW1saW4tdGVzdC9zcGFyayBrZXJieSAtLT4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmtlcmJ5PC9ncm91cElkPgpAQCAtOTEsOCArODUsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPgogICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1yZWxvYWQ0ajwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5uZXR0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV0dHktYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmlvLm5ldHR5PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5uZXR0eS10cmFuc3BvcnQtbmF0aXZlLWVwb2xsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmlvLm5ldHR5PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5uZXR0eS10cmFuc3BvcnQtbmF0aXZlLWtxdWV1ZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5uZXR0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV0dHktaGFuZGxlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmNvbW1vbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29tcHJlc3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CiAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmd1YXZhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3VhdmE8L2FydGlmYWN0SWQ+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPCEtLSBTUEFSSyAtLT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNwYXJrPC9ncm91cElkPgpAQCAtMTI3LDEwICsxNDUsNiBAQAogICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWRhdGFiaW5kPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotbG9nNGoxMjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2NhbGEtbGFuZzwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2NhbGEtbGlicmFyeTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KQEAgLTE2NiwxOCArMTgwLDM2IEBACiAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy54ZXJpYWwuc25hcHB5PC9ncm91cElkPgogICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbmFwcHktamF2YTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICA8IS0tIEV4Y2x1ZGluZyB0aGlzIGxvZzRqIGJpbmRpbmcgYXMgaXQgbGVhZHMgdG8gTm9TdWNoTWV0aG9kRXJyb3JzIC0tPgorICAgICAgICAgICAgICAgIDwhLS0gcHJlZmVyIFRpbmtlclBvcCdzIG5ldHR5IC0tPgogICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nNGotc2xmNGotaW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+aW8ubmV0dHk8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm5ldHR5LWFsbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5uZXR0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV0dHktdHJhbnNwb3J0LW5hdGl2ZS1lcG9sbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5pby5uZXR0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV0dHktdHJhbnNwb3J0LW5hdGl2ZS1rcXVldWU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CiAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPCEtLSByZXNvbHZlIHNwYXJrLWdyZW1saW4gY29uZmxpY3RzIC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmlvLm5ldHR5PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bmV0dHktYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+JHtuZXR0eS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmlvLmRyb3B3aXphcmQubWV0cmljczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1ldHJpY3MtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuMi4xOTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuY3VyYXRvcjwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmN1cmF0b3ItcmVjaXBlczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuMi4wPC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+CiAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnpvb2tlZXBlcjwvZ3JvdXBJZD4KQEAgLTIyNywxNyArMjU5LDE3IEBACiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWFubm90YXRpb25zPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4xMy41PC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4xNS40PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjEzLjU8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjE1LjQ8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmphY2tzb24tZGF0YWJpbmQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjEzLjU8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjE1LjQ8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPCEtLSBURVNUIC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KQEAgLTI1NSwxNCArMjg3LDcgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmluamVjdDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmd1aWNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC4yLjM8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uZ29vZ2xlLmd1YXZhPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5ndWF2YTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGlua2VycG9wPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3BhcmsvU3BhcmtHcmFwaEZlYXR1cmVJbnRlZ3JhdGVUZXN0LmphdmEgYi9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9TcGFya0dyYXBoRmVhdHVyZUludGVncmF0ZVRlc3QuamF2YQppbmRleCBlOGFhMmUzLi44ODRiMjdhIDEwMDY0NAotLS0gYS9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9TcGFya0dyYXBoRmVhdHVyZUludGVncmF0ZVRlc3QuamF2YQorKysgYi9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9TcGFya0dyYXBoRmVhdHVyZUludGVncmF0ZVRlc3QuamF2YQpAQCAtNjAsNyArNjAsNyBAQAogQEN1Y3VtYmVyT3B0aW9ucygKICAgICAgICAgdGFncyA9IEdSQVBIQ09NUFVURVJfVEFHX0ZJTFRFUiArICIgYW5kIG5vdCBAV2l0aEVsZW1lbnRJZFN0cmF0ZWd5IiwKICAgICAgICAgZ2x1ZSA9IHsgIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uZmVhdHVyZXMiIH0sCi0gICAgICAgIG9iamVjdEZhY3RvcnkgPSBHdWljZUZhY3RvcnkuY2xhc3MsCisgICAgICAgIG9iamVjdEZhY3RvcnkgPSBTcGFya0dyYXBoRmVhdHVyZUludGVncmF0ZVRlc3QuU3BhcmtHcmFwaEd1aWNlRmFjdG9yeS5jbGFzcywKICAgICAgICAgZmVhdHVyZXMgPSB7ICJjbGFzc3BhdGg6L29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGVzdC9mZWF0dXJlcyIgfSwKICAgICAgICAgcGx1Z2luID0geyJwcm9ncmVzcyIsICJqdW5pdDp0YXJnZXQvY3VjdW1iZXIueG1sIn0pCiBwdWJsaWMgY2xhc3MgU3BhcmtHcmFwaEZlYXR1cmVJbnRlZ3JhdGVUZXN0IHsKQEAgLTE4MiwxMCArMTgyLDkgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgV29ybGRJbmplY3RvclNvdXJjZSBpbXBsZW1lbnRzIEluamVjdG9yU291cmNlIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBJbmplY3RvciBnZXRJbmplY3RvcigpIHsKLSAgICAgICAgICAgIHJldHVybiBHdWljZS5jcmVhdGVJbmplY3RvcihTdGFnZS5QUk9EVUNUSU9OLCBDdWN1bWJlck1vZHVsZXMuY3JlYXRlU2NlbmFyaW9Nb2R1bGUoKSwgbmV3IFNlcnZpY2VNb2R1bGUoKSk7CisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTcGFya0dyYXBoR3VpY2VGYWN0b3J5IGV4dGVuZHMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5mZWF0dXJlcy5BYnN0cmFjdEd1aWNlRmFjdG9yeSB7CisgICAgICAgIHB1YmxpYyBTcGFya0dyYXBoR3VpY2VGYWN0b3J5KCkgeworICAgICAgICAgICAgc3VwZXIoR3VpY2UuY3JlYXRlSW5qZWN0b3IoU3RhZ2UuUFJPRFVDVElPTiwgQ3VjdW1iZXJNb2R1bGVzLmNyZWF0ZVNjZW5hcmlvTW9kdWxlKCksIG5ldyBTZXJ2aWNlTW9kdWxlKCkpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3BhcmsvcHJvY2Vzcy9jb21wdXRlci9TcGFya0dyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdC5qYXZhIGIvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3BhcmsvcHJvY2Vzcy9jb21wdXRlci9TcGFya0dyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IDhjNDBiNjEuLjIzOTAyMmEgMTAwNjQ0Ci0tLSBhL3NwYXJrLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJrL3Byb2Nlc3MvY29tcHV0ZXIvU3BhcmtHcmFwaENvbXB1dGVyUHJvY2Vzc0ludGVncmF0ZVRlc3QuamF2YQorKysgYi9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9wcm9jZXNzL2NvbXB1dGVyL1NwYXJrR3JhcGhDb21wdXRlclByb2Nlc3NJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTIwLDE1ICsyMCwxNSBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5oYWRvb3Auc3RydWN0dXJlLkhhZG9vcEdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzQ29tcHV0ZXJTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0xpbWl0ZWRDb21wdXRlclN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzTGltaXRlZFN0YW5kYXJkU3VpdGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NFbWJlZGRlZFN0YW5kYXJkU3VpdGU7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogCiAvKioKICAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQogICovCi1AUnVuV2l0aChQcm9jZXNzTGltaXRlZENvbXB1dGVyU3VpdGUuY2xhc3MpCitAUnVuV2l0aChQcm9jZXNzRW1iZWRkZWRDb21wdXRlclN1aXRlLmNsYXNzKQogQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IFNwYXJrSGFkb29wR3JhcGhQcm92aWRlci5jbGFzcywgZ3JhcGggPSBIYWRvb3BHcmFwaC5jbGFzcykKIHB1YmxpYyBjbGFzcyBTcGFya0dyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdCB7CiB9CmRpZmYgLS1naXQgYS9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9wcm9jZXNzL2NvbXB1dGVyL1NwYXJrR3J5b1NlcmlhbGl6ZXJHcmFwaENvbXB1dGVyUHJvY2Vzc0ludGVncmF0ZVRlc3QuamF2YSBiL3NwYXJrLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJrL3Byb2Nlc3MvY29tcHV0ZXIvU3BhcmtHcnlvU2VyaWFsaXplckdyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IDJhZDIwZTYuLjMyYWQwMWYgMTAwNjQ0Ci0tLSBhL3NwYXJrLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJrL3Byb2Nlc3MvY29tcHV0ZXIvU3BhcmtHcnlvU2VyaWFsaXplckdyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL3NwYXJrLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJrL3Byb2Nlc3MvY29tcHV0ZXIvU3BhcmtHcnlvU2VyaWFsaXplckdyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdC5qYXZhCkBAIC0yMSwxMyArMjEsMTMgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uaGFkb29wLnN0cnVjdHVyZS5IYWRvb3BHcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0NvbXB1dGVyU3VpdGU7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGU7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogCiAvKioKICAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQogICovCi1AUnVuV2l0aChQcm9jZXNzQ29tcHV0ZXJTdWl0ZS5jbGFzcykKK0BSdW5XaXRoKFByb2Nlc3NFbWJlZGRlZENvbXB1dGVyU3VpdGUuY2xhc3MpCiBAR3JhcGhQcm92aWRlckNsYXNzKHByb3ZpZGVyID0gU3BhcmtIYWRvb3BHcmFwaEdyeW9TZXJpYWxpemVyUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gSGFkb29wR3JhcGguY2xhc3MpCiBwdWJsaWMgY2xhc3MgU3BhcmtHcnlvU2VyaWFsaXplckdyYXBoQ29tcHV0ZXJQcm9jZXNzSW50ZWdyYXRlVGVzdCB7CiB9CmRpZmYgLS1naXQgYS9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9wcm9jZXNzL2NvbXB1dGVyL1NwYXJrSGFkb29wR3JhcGhQcm92aWRlci5qYXZhIGIvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3BhcmsvcHJvY2Vzcy9jb21wdXRlci9TcGFya0hhZG9vcEdyYXBoUHJvdmlkZXIuamF2YQppbmRleCAyOTU1ZWEzLi42NTFhNmUzIDEwMDY0NAotLS0gYS9zcGFyay1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFyay9wcm9jZXNzL2NvbXB1dGVyL1NwYXJrSGFkb29wR3JhcGhQcm92aWRlci5qYXZhCisrKyBiL3NwYXJrLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJrL3Byb2Nlc3MvY29tcHV0ZXIvU3BhcmtIYWRvb3BHcmFwaFByb3ZpZGVyLmphdmEKQEAgLTQwLDExICs0MCw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkdyYXBoQ29tcHV0ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLnV0aWwuQ29tcHV0ZXJHcmFwaDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLkNvbm5lY3RlZENvbXBvbmVudFRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QYWdlUmFua1Rlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5QZWVyUHJlc3N1cmVUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuUHJvZ3JhbVRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5TaG9ydGVzdFBhdGhUZXN0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3Bhcmsuc3RydWN0dXJlLlNwYXJrOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3Bhcmsuc3RydWN0dXJlLmlvLlBlcnNpc3RlZE91dHB1dFJERDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNwYXJrLnN0cnVjdHVyZS5pby5TcGFya0NvbnRleHRTdG9yYWdlQ2hlY2s7CkBAIC0xMjUsMTAgKzEyMSw2IEBACiAgICAgICAgIC8vIHRveSBncmFwaCBpbnB1dFJERCBkb2VzIG5vdCBoYXZlIGNvcnJlc3BvbmRpbmcgb3V0cHV0UkREIHNvIHdoZXJlIGpvYnMgY2hhaW4sIGl0IGZhaWxzIChmYWlsaW5nIG1ha2VzIHNlbnNlKQogICAgICAgICBpZiAobnVsbCAhPSBsb2FkR3JhcGhXaXRoICYmCiAgICAgICAgICAgICAgICAgIXRlc3QuZXF1YWxzKFByb2dyYW1UZXN0LlRyYXZlcnNhbHMuY2xhc3MpICYmCi0gICAgICAgICAgICAgICAgIXRlc3QuZXF1YWxzKFBhZ2VSYW5rVGVzdC5UcmF2ZXJzYWxzLmNsYXNzKSAmJgotICAgICAgICAgICAgICAgICF0ZXN0LmVxdWFscyhDb25uZWN0ZWRDb21wb25lbnRUZXN0LlRyYXZlcnNhbHMuY2xhc3MpICYmCi0gICAgICAgICAgICAgICAgIXRlc3QuZXF1YWxzKFNob3J0ZXN0UGF0aFRlc3QuVHJhdmVyc2Fscy5jbGFzcykgJiYKLSAgICAgICAgICAgICAgICAhdGVzdC5lcXVhbHMoUGVlclByZXNzdXJlVGVzdC5UcmF2ZXJzYWxzLmNsYXNzKSAmJgogICAgICAgICAgICAgICAgICF0ZXN0LmVxdWFscyhGaWxlU3lzdGVtU3RvcmFnZUNoZWNrLmNsYXNzKSAmJgogICAgICAgICAgICAgICAgICF0ZXN0TWV0aG9kTmFtZS5lcXVhbHMoInNob3VsZFN1cHBvcnRKb2JDaGFpbmluZyIpICYmICAvLyBHcmFwaENvbXB1dGVyVGVzdC5zaG91bGRTdXBwb3J0Sm9iQ2hhaW5pbmcKICAgICAgICAgICAgICAgICBSQU5ET00ubmV4dEJvb2xlYW4oKSkgewpkaWZmIC0tZ2l0IGEvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvaW8uY3VjdW1iZXIuY29yZS5iYWNrZW5kLk9iamVjdEZhY3RvcnkgYi9zcGFyay1ncmVtbGluL3NyYy90ZXN0L3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9pby5jdWN1bWJlci5jb3JlLmJhY2tlbmQuT2JqZWN0RmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGViZmYzCi0tLSAvZGV2L251bGwKKysrIGIvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvaW8uY3VjdW1iZXIuY29yZS5iYWNrZW5kLk9iamVjdEZhY3RvcnkKQEAgLTAsMCArMSBAQAorb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zcGFyay5TcGFya0dyYXBoRmVhdHVyZUludGVncmF0ZVRlc3QkU3BhcmtHcmFwaEd1aWNlRmFjdG9yeQpkaWZmIC0tZ2l0IGEvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvY3VjdW1iZXIucHJvcGVydGllcyBiL3NwYXJrLWdyZW1saW4vc3JjL3Rlc3QvcmVzb3VyY2VzL2N1Y3VtYmVyLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxY2RlYzguLjAwMDAwMDAKLS0tIGEvc3BhcmstZ3JlbWxpbi9zcmMvdGVzdC9yZXNvdXJjZXMvY3VjdW1iZXIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWd1aWNlLmluamVjdG9yLXNvdXJjZT1vcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNwYXJrLlNwYXJrR3JhcGhGZWF0dXJlSW50ZWdyYXRlVGVzdCRXb3JsZEluamVjdG9yU291cmNlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3BhcnFsLWdyZW1saW4vcG9tLnhtbCBiL3NwYXJxbC1ncmVtbGluL3BvbS54bWwKaW5kZXggZmNiZDMzOC4uMDJlNmU2ZiAxMDA2NDQKLS0tIGEvc3BhcnFsLWdyZW1saW4vcG9tLnhtbAorKysgYi9zcGFycWwtZ3JlbWxpbi9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGFydGlmYWN0SWQ+dGlua2VycG9wPC9hcnRpZmFjdElkPgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPnNwYXJxbC1ncmVtbGluPC9hcnRpZmFjdElkPgogICAgIDxuYW1lPkFwYWNoZSBUaW5rZXJQb3AgOjogU1BBUlFMIEdyZW1saW48L25hbWU+CkBAIC0zMiw2ICszMiwxMiBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLWplbmEtbGliczwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMTIuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amNsLW92ZXItc2xmNGo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRpbmtlcnBvcDwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL3NwYXJxbC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFycWwvcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL3NwYXJxbC9TcGFycWxUcmF2ZXJzYWxTb3VyY2UuamF2YSBiL3NwYXJxbC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFycWwvcHJvY2Vzcy90cmF2ZXJzYWwvZHNsL3NwYXJxbC9TcGFycWxUcmF2ZXJzYWxTb3VyY2UuamF2YQppbmRleCA2YzcwMzkzLi42ZDUwZWM3IDEwMDY0NAotLS0gYS9zcGFycWwtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3BhcnFsL3Byb2Nlc3MvdHJhdmVyc2FsL2RzbC9zcGFycWwvU3BhcnFsVHJhdmVyc2FsU291cmNlLmphdmEKKysrIGIvc3BhcnFsLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJxbC9wcm9jZXNzL3RyYXZlcnNhbC9kc2wvc3BhcnFsL1NwYXJxbFRyYXZlcnNhbFNvdXJjZS5qYXZhCkBAIC0xNzUsNyArMTc1LDcgQEAKICAgICAgICAgZmluYWwgU3BhcnFsVHJhdmVyc2FsU291cmNlIGNsb25lID0gdGhpcy53aXRoU3RyYXRlZ2llcyhTcGFycWxTdHJhdGVneS5pbnN0YW5jZSgpKS5jbG9uZSgpOwogCiAgICAgICAgIC8vIHRoZSBpbmplY3QoKSBob2xkcyB0aGUgc3BhcnFsIHdoaWNoIHRoZSBTcGFycWxTdHJhdGVneSB0aGVuIGRldGVjdHMgYW5kIGNvbnZlcnRzIHRvIGEgdHJhdmVyc2FsCi0gICAgICAgIGNsb25lLmJ5dGVjb2RlLmFkZFN0ZXAoR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy5pbmplY3QsIHF1ZXJ5KTsKKyAgICAgICAgY2xvbmUuZ3JlbWxpbkxhbmcuYWRkU3RlcChHcmFwaFRyYXZlcnNhbC5TeW1ib2xzLmluamVjdCwgcXVlcnkpOwogICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbC5BZG1pbjxTLCBTPiB0cmF2ZXJzYWwgPSBuZXcgRGVmYXVsdEdyYXBoVHJhdmVyc2FsKGNsb25lKTsKICAgICAgICAgcmV0dXJuIHRyYXZlcnNhbC5hZGRTdGVwKG5ldyBJbmplY3RTdGVwPD4odHJhdmVyc2FsLCBxdWVyeSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NwYXJxbC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFycWwvcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvU3BhcnFsU3RyYXRlZ3kuamF2YSBiL3NwYXJxbC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi9zcGFycWwvcHJvY2Vzcy90cmF2ZXJzYWwvc3RyYXRlZ3kvU3BhcnFsU3RyYXRlZ3kuamF2YQppbmRleCA3YjZkZDdjLi45NWE4NDQyIDEwMDY0NAotLS0gYS9zcGFycWwtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vc3BhcnFsL3Byb2Nlc3MvdHJhdmVyc2FsL3N0cmF0ZWd5L1NwYXJxbFN0cmF0ZWd5LmphdmEKKysrIGIvc3BhcnFsLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3NwYXJxbC9wcm9jZXNzL3RyYXZlcnNhbC9zdHJhdGVneS9TcGFycWxTdHJhdGVneS5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5JbmplY3RTdGVwOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC51dGlsLkVtcHR5U3RlcDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LkFic3RyYWN0VHJhdmVyc2FsU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC51dGlsLlRyYXZlcnNhbEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnNwYXJxbC5TcGFycWxUb0dyZW1saW5Db21waWxlcjsKZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vcG9tLnhtbCBiL3RpbmtlcmdyYXBoLWdyZW1saW4vcG9tLnhtbAppbmRleCA0YzBiNzM0Li40N2M1YzFjIDEwMDY0NAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3BvbS54bWwKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9wb20ueG1sCkBAIC0yMSw3ICsyMSw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50aW5rZXJwb3A8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnRpbmtlcnBvcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+My44LjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjQuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvcGFyZW50PgogICAgIDxhcnRpZmFjdElkPnRpbmtlcmdyYXBoLWdyZW1saW48L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFRpbmtlclBvcCA6OiBUaW5rZXJHcmFwaCBHcmVtbGluPC9uYW1lPgpAQCAtMzgsNyArMzgsNiBAQAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmNvbS5nb29nbGUuaW5qZWN0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z3VpY2U8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjIuMzwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL2pzcjIyMy9UaW5rZXJHcmFwaEdyZW1saW5QbHVnaW4uamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL2pzcjIyMy9UaW5rZXJHcmFwaEdyZW1saW5QbHVnaW4uamF2YQppbmRleCBiZTcwZWE2Li4wMDdkYjE4IDEwMDY0NAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9qc3IyMjMvVGlua2VyR3JhcGhHcmVtbGluUGx1Z2luLmphdmEKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvanNyMjIzL1RpbmtlckdyYXBoR3JlbWxpblBsdWdpbi5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVYxOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlcklvUmVnaXN0cnlWMjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJJb1JlZ2lzdHJ5VjM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VySW9SZWdpc3RyeVY0OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlclByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlclZlcnRleDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJWZXJ0ZXhQcm9wZXJ0eTsKQEAgLTU3LDYgKzU4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgVGlua2VySW9SZWdpc3RyeVYxLmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBUaW5rZXJJb1JlZ2lzdHJ5VjIuY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgIFRpbmtlcklvUmVnaXN0cnlWMy5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgVGlua2VySW9SZWdpc3RyeVY0LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBUaW5rZXJQcm9wZXJ0eS5jbGFzcywKICAgICAgICAgICAgICAgICAgICAgVGlua2VyVmVydGV4LmNsYXNzLAogICAgICAgICAgICAgICAgICAgICBUaW5rZXJWZXJ0ZXhQcm9wZXJ0eS5jbGFzcywKZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9BYnN0cmFjdFRpbmtlckdyYXBoLmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvQWJzdHJhY3RUaW5rZXJHcmFwaC5qYXZhCmluZGV4IGIwZjQ5MjEuLjM0YWQ1OTMgMTAwNjQ0Ci0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9BYnN0cmFjdFRpbmtlckdyYXBoLmphdmEKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL0Fic3RyYWN0VGlua2VyR3JhcGguamF2YQpAQCAtMjMyLDggKzIzMiwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIChJKSBidWlsZGVyLmdyYXBoKHRoaXMpLm9uTWFwcGVyKG1hcHBlciAtPiBtYXBwZXIuYWRkUmVnaXN0cnkoVGlua2VySW9SZWdpc3RyeVYxLmluc3RhbmNlKCkpKS5jcmVhdGUoKTsKICAgICAgICAgZWxzZSBpZiAoYnVpbGRlci5yZXF1aXJlc1ZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYyXzApKSAgIC8vIHRoZXJlIGlzIG5vIGdyeW8gdjIKICAgICAgICAgICAgIHJldHVybiAoSSkgYnVpbGRlci5ncmFwaCh0aGlzKS5vbk1hcHBlcihtYXBwZXIgLT4gbWFwcGVyLmFkZFJlZ2lzdHJ5KFRpbmtlcklvUmVnaXN0cnlWMi5pbnN0YW5jZSgpKSkuY3JlYXRlKCk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoYnVpbGRlci5yZXF1aXJlc1ZlcnNpb24oR3JhcGhTT05WZXJzaW9uLlYzXzApKQogICAgICAgICAgICAgcmV0dXJuIChJKSBidWlsZGVyLmdyYXBoKHRoaXMpLm9uTWFwcGVyKG1hcHBlciAtPiBtYXBwZXIuYWRkUmVnaXN0cnkoVGlua2VySW9SZWdpc3RyeVYzLmluc3RhbmNlKCkpKS5jcmVhdGUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIChJKSBidWlsZGVyLmdyYXBoKHRoaXMpLm9uTWFwcGVyKG1hcHBlciAtPiBtYXBwZXIuYWRkUmVnaXN0cnkoVGlua2VySW9SZWdpc3RyeVY0Lmluc3RhbmNlKCkpKS5jcmVhdGUoKTsKICAgICB9CiAKICAgICAvLy8vLy8vLy8vLy8vLyBTVFJVQ1RVUkUgQVBJIE1FVEhPRFMgLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvVGlua2VyR3JhcGguamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJHcmFwaC5qYXZhCmluZGV4IDZmZWE2ZDcuLjI4ZjMxMjAgMTAwNjQ0Ci0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJHcmFwaC5qYXZhCisrKyBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJHcmFwaC5qYXZhCkBAIC01NSwxMCArNTUsOCBAQAogICovCiBAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfU1RSVUNUVVJFX1NUQU5EQVJEKQogQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1NUUlVDVFVSRV9JTlRFR1JBVEUpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19TVEFOREFSRCkKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0NPTVBVVEVSKQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfTElNSVRFRF9TVEFOREFSRCkKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0xJTUlURURfQ09NUFVURVIpCitAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9TVEFOREFSRCkKK0BHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0VNQkVEREVEX0NPTVBVVEVSKQogcHVibGljIGNsYXNzIFRpbmtlckdyYXBoIGV4dGVuZHMgQWJzdHJhY3RUaW5rZXJHcmFwaCB7CiAKICAgICBzdGF0aWMgewpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlcklvUmVnaXN0cnlWNC5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlcklvUmVnaXN0cnlWNC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NTljYmQKLS0tIC9kZXYvbnVsbAorKysgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvVGlua2VySW9SZWdpc3RyeVY0LmphdmEKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlOworCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkJhc2VDb25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkVkZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuVmVydGV4OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLkFic3RyYWN0SW9SZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5HcmFwaFJlYWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5HcmFwaFdyaXRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5Jb1JlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OSW87CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Ub2tlbnM7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uVGlua2VyUG9wSmFja3Nvbk1vZHVsZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLkdyeW9JbzsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLkdyeW9SZWFkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3J5by5HcnlvV3JpdGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLnV0aWwuQXR0YWNoYWJsZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkRWRnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS51dGlsLmRldGFjaGVkLkRldGFjaGVkVmVydGV4OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmNvcmUuSnNvbkdlbmVyYXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25QYXJzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmphY2tzb24uY29yZS5Kc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5jb3JlLkpzb25Ub2tlbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5EZXNlcmlhbGl6YXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLlNlcmlhbGl6ZXJQcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQuamFja3Nvbi5kYXRhYmluZC5kZXNlci5zdGQuU3RkRGVzZXJpYWxpemVyOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5qYWNrc29uLmRhdGFiaW5kLnNlci5zdGQuU3RkU2NhbGFyU2VyaWFsaXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5zaGFkZWQua3J5by5LcnlvOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLnNoYWRlZC5rcnlvLlNlcmlhbGl6ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmtyeW8uaW8uSW5wdXQ7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3Auc2hhZGVkLmtyeW8uaW8uT3V0cHV0OworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSB7QGxpbmsgSW9SZWdpc3RyeX0gaW50ZXJmYWNlIHRoYXQgcHJvdmlkZXMgc2VyaWFsaXplcnMgd2l0aCBjdXN0b20gY29uZmlndXJhdGlvbnMgZm9yCisgKiBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBjbGFzc2VzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSBzZXJpYWxpemVkLiAgVGhpcyByZWdpc3RyeSBhbGxvd3MgYSB7QGxpbmsgVGlua2VyR3JhcGh9IHRvCisgKiBiZSBzZXJpYWxpemVkIGRpcmVjdGx5IHdoaWNoIGlzIHVzZWZ1bCBmb3IgbW92aW5nIHNtYWxsIGdyYXBocyBhcm91bmQgb24gdGhlIG5ldHdvcmsuCisgKiA8cC8+CisgKiBNb3N0IHByb3ZpZGVycyBuZWVkIG5vdCBpbXBsZW1lbnQgdGhpcyBraW5kIG9mIGN1c3RvbSBzZXJpYWxpemVyIGFzIHRoZXkgd2lsbCBkZWFsIHdpdGggbXVjaCBsYXJnZXIgZ3JhcGhzIHRoYXQKKyAqIHdvdWxkbid0IGJlIHByYWN0aWNhbCB0byBzZXJpYWxpemUgaW4gdGhpcyBmYXNoaW9uLiAgVGhpcyBpcyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSBmb3IgVGlua2VyR3JhcGggZ2l2ZW4gaXRzCisgKiBpbi1tZW1vcnkgc3RhdHVzLiAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgd291bGQgY3JlYXRlIHNlcmlhbGl6ZXJzIGZvciBhIGNvbXBsZXggdmVydGV4IGlkZW50aWZpZXIgb3IgYQorICogY3VzdG9tIGRhdGEgY2xhc3MgbGlrZSBhICJnZW9ncmFwaGljIHBvaW50Ii4KKyAqCisgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBUaW5rZXJJb1JlZ2lzdHJ5VjQgZXh0ZW5kcyBBYnN0cmFjdElvUmVnaXN0cnkgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGlua2VySW9SZWdpc3RyeVY0IElOU1RBTkNFID0gbmV3IFRpbmtlcklvUmVnaXN0cnlWNCgpOworCisgICAgcHJpdmF0ZSBUaW5rZXJJb1JlZ2lzdHJ5VjQoKSB7CisgICAgICAgIHJlZ2lzdGVyKEdyeW9Jby5jbGFzcywgVGlua2VyR3JhcGguY2xhc3MsIG5ldyBUaW5rZXJHcmFwaEdyeW9TZXJpYWxpemVyKCkpOworICAgICAgICByZWdpc3RlcihHcmFwaFNPTklvLmNsYXNzLCBudWxsLCBuZXcgVGlua2VyTW9kdWxlVjIoKSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBUaW5rZXJJb1JlZ2lzdHJ5VjQgaW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBJTlNUQU5DRTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm92aWRlcyBhIG1ldGhvZCB0byBzZXJpYWxpemUgYW4gZW50aXJlIHtAbGluayBUaW5rZXJHcmFwaH0gaW50byBpdHNlbGYgZm9yIEdyeW8uICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgICAgICogc2hpcHBpbmcgc21hbGwgZ3JhcGhzIGFyb3VuZCB0aHJvdWdoIEdyZW1saW4gU2VydmVyLiBSZXVzZXMgdGhlIGV4aXN0aW5nIEtyeW8gaW5zdGFuY2UgZm9yIHNlcmlhbGl6YXRpb24uCisgICAgICovCisgICAgZmluYWwgc3RhdGljIGNsYXNzIFRpbmtlckdyYXBoR3J5b1NlcmlhbGl6ZXIgZXh0ZW5kcyBTZXJpYWxpemVyPFRpbmtlckdyYXBoPiB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZShmaW5hbCBLcnlvIGtyeW8sIGZpbmFsIE91dHB1dCBvdXRwdXQsIGZpbmFsIFRpbmtlckdyYXBoIGdyYXBoKSB7CisgICAgICAgICAgICB0cnkgKGZpbmFsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBzdHJlYW0gPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCkpIHsKKyAgICAgICAgICAgICAgICBHcnlvV3JpdGVyLmJ1aWxkKCkubWFwcGVyKCgpIC0+IGtyeW8pLmNyZWF0ZSgpLndyaXRlR3JhcGgoc3RyZWFtLCBncmFwaCk7CisgICAgICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gc3RyZWFtLnRvQnl0ZUFycmF5KCk7CisgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlSW50KGJ5dGVzLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKGJ5dGVzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpbykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGlvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgVGlua2VyR3JhcGggcmVhZChmaW5hbCBLcnlvIGtyeW8sIGZpbmFsIElucHV0IGlucHV0LCBmaW5hbCBDbGFzczxUaW5rZXJHcmFwaD4gdGlua2VyR3JhcGhDbGFzcykgeworICAgICAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25mID0gbmV3IEJhc2VDb25maWd1cmF0aW9uKCk7CisgICAgICAgICAgICBjb25mLnNldFByb3BlcnR5KCJncmVtbGluLnRpbmtlcmdyYXBoLmRlZmF1bHRWZXJ0ZXhQcm9wZXJ0eUNhcmRpbmFsaXR5IiwgImxpc3QiKTsKKyAgICAgICAgICAgIGZpbmFsIFRpbmtlckdyYXBoIGdyYXBoID0gVGlua2VyR3JhcGgub3Blbihjb25mKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBsZW4gPSBpbnB1dC5yZWFkSW50KCk7CisgICAgICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXMgPSBpbnB1dC5yZWFkQnl0ZXMobGVuKTsKKyAgICAgICAgICAgIHRyeSAoZmluYWwgQnl0ZUFycmF5SW5wdXRTdHJlYW0gc3RyZWFtID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKSkgeworICAgICAgICAgICAgICAgIEdyeW9SZWFkZXIuYnVpbGQoKS5tYXBwZXIoKCkgLT4ga3J5bykuY3JlYXRlKCkucmVhZEdyYXBoKHN0cmVhbSwgZ3JhcGgpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlvKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oaW8pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZ3JhcGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm92aWRlcyBhIG1ldGhvZCB0byBzZXJpYWxpemUgYW4gZW50aXJlIHtAbGluayBUaW5rZXJHcmFwaH0gaW50byBpdHNlbGYgZm9yIEdyYXBoU09OLiBUaGlzIGlzIHVzZWZ1bCB3aGVuCisgICAgICogc2hpcHBpbmcgc21hbGwgZ3JhcGhzIGFyb3VuZCB0aHJvdWdoIEdyZW1saW4gU2VydmVyLgorICAgICAqLworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBUaW5rZXJNb2R1bGVWMiBleHRlbmRzIFRpbmtlclBvcEphY2tzb25Nb2R1bGUgeworICAgICAgICBwdWJsaWMgVGlua2VyTW9kdWxlVjIoKSB7CisgICAgICAgICAgICBzdXBlcigidGlua2VyZ3JhcGgtMi4wIik7CisgICAgICAgICAgICBhZGRTZXJpYWxpemVyKFRpbmtlckdyYXBoLmNsYXNzLCBuZXcgVGlua2VyR3JhcGhKYWNrc29uU2VyaWFsaXplcigpKTsKKyAgICAgICAgICAgIGFkZERlc2VyaWFsaXplcihUaW5rZXJHcmFwaC5jbGFzcywgbmV3IFRpbmtlckdyYXBoSmFja3NvbkRlc2VyaWFsaXplcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgTWFwPENsYXNzLCBTdHJpbmc+IGdldFR5cGVEZWZpbml0aW9ucygpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSGFzaE1hcDxDbGFzcywgU3RyaW5nPigpe3sKKyAgICAgICAgICAgICAgICBwdXQoVGlua2VyR3JhcGguY2xhc3MsICJncmFwaCIpOworICAgICAgICAgICAgfX07CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyBnZXRUeXBlTmFtZXNwYWNlKCkgeworICAgICAgICAgICAgcmV0dXJuIEdyYXBoU09OVG9rZW5zLkdSRU1MSU5fVFlQRV9OQU1FU1BBQ0U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXJpYWxpemVzIHRoZSBncmFwaCBpbnRvIGFuIGVkZ2UgbGlzdCBmb3JtYXQuICBFZGdlIGxpc3QgaXMgYSBiZXR0ZXIgY2hvaWNlcyB0aGFuIGFkamFjZW5jeSBsaXN0ICh3aGljaCBpcworICAgICAqIHR5cGljYWxseSBzdGFuZGFyZCBmcm9tIHRoZSB7QGxpbmsgR3JhcGhSZWFkZXJ9IGFuZCB7QGxpbmsgR3JhcGhXcml0ZXJ9IHBlcnNwZWN0aXZlKSBpbiB0aGlzIGNhc2UgYmVjYXVzZQorICAgICAqIHRoZSB1c2UgY2FzZSBmb3IgdGhpcyBpc24ndCBhcm91bmQgbWFzc2l2ZSBncmFwaHMuICBUaGUgdXNlIGNhc2UgaXMgZm9yICJzbWFsbCIgc3ViZ3JhcGhzIHRoYXQgYXJlIGJlaW5nCisgICAgICogc2hpcHBlZCBvdmVyIHRoZSB3aXJlIGZyb20gR3JlbWxpbiBTZXJ2ZXIuIEVkZ2UgbGlzdCBmb3JtYXQgaXMgYSBiaXQgZWFzaWVyIGZvciBub24tSlZNIGxhbmd1YWdlcyB0byB3b3JrCisgICAgICogd2l0aCBhcyBhIGZvcm1hdCBhbmQgZG9lc24ndCByZXF1aXJlIGEgY2FjaGUgZm9yIGxvYWRpbmcgKGFzIHZlcnRleCBsYWJlbHMgYXJlIG5vdCBzZXJpYWxpemVkIGluIGFkamFjZW5jeQorICAgICAqIGxpc3QpLgorICAgICAqLworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBUaW5rZXJHcmFwaEphY2tzb25TZXJpYWxpemVyIGV4dGVuZHMgU3RkU2NhbGFyU2VyaWFsaXplcjxUaW5rZXJHcmFwaD4geworCisgICAgICAgIHB1YmxpYyBUaW5rZXJHcmFwaEphY2tzb25TZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoVGlua2VyR3JhcGguY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHNlcmlhbGl6ZShmaW5hbCBUaW5rZXJHcmFwaCBncmFwaCwgZmluYWwgSnNvbkdlbmVyYXRvciBqc29uR2VuZXJhdG9yLCBmaW5hbCBTZXJpYWxpemVyUHJvdmlkZXIgc2VyaWFsaXplclByb3ZpZGVyKQorICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlU3RhcnRPYmplY3QoKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoR3JhcGhTT05Ub2tlbnMuVkVSVElDRVMpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0QXJyYXkoKTsKKworICAgICAgICAgICAgZmluYWwgSXRlcmF0b3I8VmVydGV4PiB2ZXJ0aWNlcyA9IGdyYXBoLnZlcnRpY2VzKCk7CisgICAgICAgICAgICB3aGlsZSAodmVydGljZXMuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplclByb3ZpZGVyLmRlZmF1bHRTZXJpYWxpemVWYWx1ZSh2ZXJ0aWNlcy5uZXh0KCksIGpzb25HZW5lcmF0b3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kQXJyYXkoKTsKKyAgICAgICAgICAgIGpzb25HZW5lcmF0b3Iud3JpdGVGaWVsZE5hbWUoR3JhcGhTT05Ub2tlbnMuRURHRVMpOworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZVN0YXJ0QXJyYXkoKTsKKworICAgICAgICAgICAgZmluYWwgSXRlcmF0b3I8RWRnZT4gZWRnZXMgPSBncmFwaC5lZGdlcygpOworICAgICAgICAgICAgd2hpbGUgKGVkZ2VzLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXJQcm92aWRlci5kZWZhdWx0U2VyaWFsaXplVmFsdWUoZWRnZXMubmV4dCgpLCBqc29uR2VuZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAganNvbkdlbmVyYXRvci53cml0ZUVuZEFycmF5KCk7CisgICAgICAgICAgICBqc29uR2VuZXJhdG9yLndyaXRlRW5kT2JqZWN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEZXNlcmlhbGl6ZXMgdGhlIGVkZ2UgbGlzdCBmb3JtYXQuCisgICAgICovCisgICAgc3RhdGljIGNsYXNzIFRpbmtlckdyYXBoSmFja3NvbkRlc2VyaWFsaXplciBleHRlbmRzIFN0ZERlc2VyaWFsaXplcjxUaW5rZXJHcmFwaD4geworICAgICAgICBwdWJsaWMgVGlua2VyR3JhcGhKYWNrc29uRGVzZXJpYWxpemVyKCkgeworICAgICAgICAgICAgc3VwZXIoVGlua2VyR3JhcGguY2xhc3MpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBUaW5rZXJHcmFwaCBkZXNlcmlhbGl6ZShmaW5hbCBKc29uUGFyc2VyIGpzb25QYXJzZXIsIGZpbmFsIERlc2VyaWFsaXphdGlvbkNvbnRleHQgZGVzZXJpYWxpemF0aW9uQ29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUHJvY2Vzc2luZ0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmYgPSBuZXcgQmFzZUNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgICAgIGNvbmYuc2V0UHJvcGVydHkoImdyZW1saW4udGlua2VyZ3JhcGguZGVmYXVsdFZlcnRleFByb3BlcnR5Q2FyZGluYWxpdHkiLCAibGlzdCIpOworICAgICAgICAgICAgZmluYWwgVGlua2VyR3JhcGggZ3JhcGggPSBUaW5rZXJHcmFwaC5vcGVuKGNvbmYpOworCisgICAgICAgICAgICB3aGlsZSAoanNvblBhcnNlci5uZXh0VG9rZW4oKSAhPSBKc29uVG9rZW4uRU5EX09CSkVDVCkgeworICAgICAgICAgICAgICAgIGlmIChqc29uUGFyc2VyLmdldEN1cnJlbnROYW1lKCkuZXF1YWxzKCJ2ZXJ0aWNlcyIpKSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqc29uUGFyc2VyLm5leHRUb2tlbigpICE9IEpzb25Ub2tlbi5FTkRfQVJSQVkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uUGFyc2VyLmN1cnJlbnRUb2tlbigpID09IEpzb25Ub2tlbi5TVEFSVF9PQkpFQ1QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBEZXRhY2hlZFZlcnRleCB2ID0gKERldGFjaGVkVmVydGV4KSBkZXNlcmlhbGl6YXRpb25Db250ZXh0LnJlYWRWYWx1ZShqc29uUGFyc2VyLCBWZXJ0ZXguY2xhc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuYXR0YWNoKEF0dGFjaGFibGUuTWV0aG9kLmdldE9yQ3JlYXRlKGdyYXBoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGpzb25QYXJzZXIuZ2V0Q3VycmVudE5hbWUoKS5lcXVhbHMoImVkZ2VzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGpzb25QYXJzZXIubmV4dFRva2VuKCkgIT0gSnNvblRva2VuLkVORF9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25QYXJzZXIuY3VycmVudFRva2VuKCkgPT0gSnNvblRva2VuLlNUQVJUX09CSkVDVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIERldGFjaGVkRWRnZSBlID0gKERldGFjaGVkRWRnZSkgZGVzZXJpYWxpemF0aW9uQ29udGV4dC5yZWFkVmFsdWUoanNvblBhcnNlciwgRWRnZS5jbGFzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5hdHRhY2goQXR0YWNoYWJsZS5NZXRob2QuZ2V0T3JDcmVhdGUoZ3JhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdyYXBoOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlclRyYW5zYWN0aW9uR3JhcGguamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJUcmFuc2FjdGlvbkdyYXBoLmphdmEKaW5kZXggNmQwZWQyMS4uM2U2OTMxYSAxMDA2NDQKLS0tIGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlclRyYW5zYWN0aW9uR3JhcGguamF2YQorKysgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvVGlua2VyVHJhbnNhY3Rpb25HcmFwaC5qYXZhCkBAIC01MiwxMCArNTIsOCBAQAogICovCiBAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfU1RSVUNUVVJFX1NUQU5EQVJEKQogQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1NUUlVDVFVSRV9JTlRFR1JBVEUpCi1AR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19TVEFOREFSRCkKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0NPTVBVVEVSKQotQEdyYXBoLk9wdEluKEdyYXBoLk9wdEluLlNVSVRFX1BST0NFU1NfTElNSVRFRF9TVEFOREFSRCkKLUBHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0xJTUlURURfQ09NUFVURVIpCitAR3JhcGguT3B0SW4oR3JhcGguT3B0SW4uU1VJVEVfUFJPQ0VTU19FTUJFRERFRF9TVEFOREFSRCkKK0BHcmFwaC5PcHRJbihHcmFwaC5PcHRJbi5TVUlURV9QUk9DRVNTX0VNQkVEREVEX0NPTVBVVEVSKQogcHVibGljIGZpbmFsIGNsYXNzIFRpbmtlclRyYW5zYWN0aW9uR3JhcGggZXh0ZW5kcyBBYnN0cmFjdFRpbmtlckdyYXBoIHsKIAogICAgIHN0YXRpYyB7CmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9wcm9jZXNzL1RpbmtlckdyYXBoTm9TdHJhdGVneVByb2Nlc3NDb21wdXRlckludGVncmF0ZVRlc3QuamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhOb1N0cmF0ZWd5UHJvY2Vzc0NvbXB1dGVySW50ZWdyYXRlVGVzdC5qYXZhCmluZGV4IGU5MDVkM2QuLjgxNjA4NDEgMTAwNjQ0Ci0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhOb1N0cmF0ZWd5UHJvY2Vzc0NvbXB1dGVySW50ZWdyYXRlVGVzdC5qYXZhCisrKyBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhOb1N0cmF0ZWd5UHJvY2Vzc0NvbXB1dGVySW50ZWdyYXRlVGVzdC5qYXZhCkBAIC0xOSwxNCArMTksMTQgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5wcm9jZXNzOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NDb21wdXRlclN1aXRlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzRW1iZWRkZWRDb21wdXRlclN1aXRlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKIAogLyoqCiAgKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKICAqLwotQFJ1bldpdGgoUHJvY2Vzc0NvbXB1dGVyU3VpdGUuY2xhc3MpCitAUnVuV2l0aChQcm9jZXNzRW1iZWRkZWRDb21wdXRlclN1aXRlLmNsYXNzKQogQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IFRpbmtlckdyYXBoTm9TdHJhdGVneUNvbXB1dGVyUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCiBwdWJsaWMgY2xhc3MgVGlua2VyR3JhcGhOb1N0cmF0ZWd5UHJvY2Vzc0NvbXB1dGVySW50ZWdyYXRlVGVzdCB7CiAKZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhOb1N0cmF0ZWd5UHJvY2Vzc1N0YW5kYXJkSW50ZWdyYXRlVGVzdC5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvcHJvY2Vzcy9UaW5rZXJHcmFwaE5vU3RyYXRlZ3lQcm9jZXNzU3RhbmRhcmRJbnRlZ3JhdGVUZXN0LmphdmEKaW5kZXggZjQ3ZDZkZC4uMjdmZDVlZSAxMDA2NDQKLS0tIGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvcHJvY2Vzcy9UaW5rZXJHcmFwaE5vU3RyYXRlZ3lQcm9jZXNzU3RhbmRhcmRJbnRlZ3JhdGVUZXN0LmphdmEKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvcHJvY2Vzcy9UaW5rZXJHcmFwaE5vU3RyYXRlZ3lQcm9jZXNzU3RhbmRhcmRJbnRlZ3JhdGVUZXN0LmphdmEKQEAgLTE5LDcgKzE5LDcgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5wcm9jZXNzOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NTdGFuZGFyZFN1aXRlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKIApAQCAtMjgsNyArMjgsNyBAQAogICoKICAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKICAqLwotQFJ1bldpdGgoUHJvY2Vzc1N0YW5kYXJkU3VpdGUuY2xhc3MpCitAUnVuV2l0aChQcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlLmNsYXNzKQogQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IFRpbmtlckdyYXBoTm9TdHJhdGVneVByb3ZpZGVyLmNsYXNzLCBncmFwaCA9IFRpbmtlckdyYXBoLmNsYXNzKQogcHVibGljIGNsYXNzIFRpbmtlckdyYXBoTm9TdHJhdGVneVByb2Nlc3NTdGFuZGFyZEludGVncmF0ZVRlc3QgewogfQpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvcHJvY2Vzcy9UaW5rZXJHcmFwaFByb2Nlc3NDb21wdXRlclRlc3QuamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhQcm9jZXNzQ29tcHV0ZXJUZXN0LmphdmEKaW5kZXggMWY5NTY1MC4uMjQzNzNlYiAxMDA2NDQKLS0tIGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvcHJvY2Vzcy9UaW5rZXJHcmFwaFByb2Nlc3NDb21wdXRlclRlc3QuamF2YQorKysgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9wcm9jZXNzL1RpbmtlckdyYXBoUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCkBAIC0xOSw3ICsxOSw3IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGgucHJvY2VzczsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzQ29tcHV0ZXJTdWl0ZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0VtYmVkZGVkQ29tcHV0ZXJTdWl0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CiAKQEAgLTI4LDcgKzI4LDcgQEAKICAqCiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCiAgKi8KLUBSdW5XaXRoKFByb2Nlc3NDb21wdXRlclN1aXRlLmNsYXNzKQorQFJ1bldpdGgoUHJvY2Vzc0VtYmVkZGVkQ29tcHV0ZXJTdWl0ZS5jbGFzcykKIEBHcmFwaFByb3ZpZGVyQ2xhc3MocHJvdmlkZXIgPSBUaW5rZXJHcmFwaENvbXB1dGVyUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCiBwdWJsaWMgY2xhc3MgVGlua2VyR3JhcGhQcm9jZXNzQ29tcHV0ZXJUZXN0IHsKIH0KZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9wcm9jZXNzL1RpbmtlckdyYXBoUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCmluZGV4IGJhYTY1MTYuLmU3Nzc0NGMgMTAwNjQ0Ci0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3Byb2Nlc3MvVGlua2VyR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvcHJvY2Vzcy9UaW5rZXJHcmFwaFByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YQpAQCAtMTksNyArMTksNyBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnByb2Nlc3M7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0xpbWl0ZWRTdGFuZGFyZFN1aXRlOworaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguVGlua2VyR3JhcGhQcm92aWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKIGltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CkBAIC0yOSw3ICsyOSw3IEBACiAgKgogICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQogICovCi1AUnVuV2l0aChQcm9jZXNzTGltaXRlZFN0YW5kYXJkU3VpdGUuY2xhc3MpCitAUnVuV2l0aChQcm9jZXNzRW1iZWRkZWRTdGFuZGFyZFN1aXRlLmNsYXNzKQogQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IFRpbmtlckdyYXBoUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCiBwdWJsaWMgY2xhc3MgVGlua2VyR3JhcGhQcm9jZXNzU3RhbmRhcmRUZXN0IHsKIH0KZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJHcmFwaFBsYXlUZXN0LmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvVGlua2VyR3JhcGhQbGF5VGVzdC5qYXZhCmluZGV4IDU5OTJlMDEuLmRiMGZlZDQgMTAwNjQ0Ci0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJHcmFwaFBsYXlUZXN0LmphdmEKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlckdyYXBoUGxheVRlc3QuamF2YQpAQCAtMTgsMTQgKzE4LDE3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmU7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5HcmVtbGluTGFuZ1NjcmlwdEVuZ2luZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5WYXJpYWJsZVJlc29sdmVyQ3VzdG9taXplcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmxhbmd1YWdlLmdyYW1tYXIuVmFyaWFibGVSZXNvbHZlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuQ29tcHV0ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5HVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CitpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5TY29wZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbDsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXzsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5XaXRoT3B0aW9uczsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAudXRpbC5ldmVudC5Db25zb2xlTXV0YXRpb25MaXN0ZW5lcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uRXZlbnRTdHJhdGVneTsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5Lm9wdGltaXphdGlvbi5QYXRoUmV0cmFjdGlvblN0cmF0ZWd5OwpAQCAtNDAsNiArNDMsNyBAQAogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKK2ltcG9ydCBqYXZheC5zY3JpcHQuQmluZGluZ3M7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQmlGdW5jdGlvbjsKQEAgLTQ3LDcgKzUxLDYgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLk9wZXJhdG9yLnN1bTsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5QLm5lcTsKLWltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWwuU3ltYm9scy52YWx1ZXM7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLmFzOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5ib3RoOwogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5fXy5jaG9vc2U7CkBAIC01OSw3ICs2Miw2IEBACiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnNlbGVjdDsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguX18udW5pb247CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLl9fLnZhbHVlTWFwOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5Db2x1bW4ua2V5czsKIAogLyoqCiAgKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCkBAIC0yNzMsMTcgKzI3NSwyNSBAQAogICAgIH0KIAogICAgIEBUZXN0Ci0gICAgQElnbm9yZQotICAgIHB1YmxpYyB2b2lkIHRlc3RCdWdzKCkgeworICAgIHB1YmxpYyB2b2lkIHRlc3RCdWdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIEdyYXBoVHJhdmVyc2FsU291cmNlIGcgPSBUaW5rZXJGYWN0b3J5LmNyZWF0ZU1vZGVybigpLnRyYXZlcnNhbCgpOwotICAgICAgICBPYmplY3QgbzEgPSBnLlYoKS5tYXAoX18uVigxKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnLlYoKS5hcygiYSIpLmJvdGgoKS5hcygiYiIpLmRlZHVwKCJhIiwgImIiKS5ieShULmxhYmVsKS5zZWxlY3QoImEiLCAiYiIpLmV4cGxhaW4oKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihnLlYoKS5hcygiYSIpLmJvdGgoKS5hcygiYiIpLmRlZHVwKCJhIiwgImIiKS5ieShULmxhYmVsKS5zZWxlY3QoImEiLCAiYiIpLnRvTGlzdCgpKTsKKyAgICAgICAgZmluYWwgR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmUgc2UgPSBuZXcgR3JlbWxpbkxhbmdTY3JpcHRFbmdpbmUoCisgICAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlUmVzb2x2ZXJDdXN0b21pemVyKFZhcmlhYmxlUmVzb2x2ZXIuRGVmYXVsdFZhcmlhYmxlUmVzb2x2ZXI6Om5ldykpOwogCi0gICAgICAgIFRyYXZlcnNhbDw/LD8+IHQgPQotICAgICAgICAgICAgICAgIGcuVigiMyIpLgotICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24oX18ucmVwZWF0KG91dCgpLnNpbXBsZVBhdGgoKSkudGltZXMoMikuY291bnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX18ucmVwZWF0KGluKCkuc2ltcGxlUGF0aCgpKS50aW1lcygyKS5jb3VudCgpKTsKKyAgICAgICAgZmluYWwgQmluZGluZ3MgYiA9IHNlLmNyZWF0ZUJpbmRpbmdzKCk7CisgICAgICAgIGIucHV0KCJnIiwgZyk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoKEdyYXBoVHJhdmVyc2FsKSBzZS5ldmFsKCJnLlYoMSkuY291bnQoKSIsIGIpKS50b0xpc3QoKSk7CisKKyAgICAgICAgYi5jbGVhcigpOworICAgICAgICBiLnB1dCgiZyIsIGcpOworICAgICAgICBiLnB1dCgieCIsIDEpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKChHcmFwaFRyYXZlcnNhbCkgc2UuZXZhbCgiZy5WKHgpLmNvdW50KCkiLCBiKSkudG9MaXN0KCkpOworCisgICAgICAgIGIuY2xlYXIoKTsKKyAgICAgICAgYi5wdXQoImciLCBnKTsKKyAgICAgICAgYi5wdXQoIngiLCAiam9zaCIpOworICAgICAgICBiLnB1dCgieSIsIDMyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCgoR3JhcGhUcmF2ZXJzYWwpIHNlLmV2YWwoImcuVigpLmhhcygnbmFtZScsIHgpLmhhcygnYWdlJywgeSkuY291bnQoKSIsIGIpKS50b0xpc3QoKSk7CiAgICAgfQogCiAgICAgQFRlc3QKZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJHcmFwaFJlcGVhdFJhbmdlR2xvYmFsVGVzdC5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlckdyYXBoUmVwZWF0UmFuZ2VHbG9iYWxUZXN0LmphdmEKaW5kZXggN2E2NzQ4My4uMzRlY2ZmOCAxMDA2NDQKLS0tIGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlckdyYXBoUmVwZWF0UmFuZ2VHbG9iYWxUZXN0LmphdmEKKysrIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlckdyYXBoUmVwZWF0UmFuZ2VHbG9iYWxUZXN0LmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5GdW5jdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuQ29sbGVjdGlvblV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9uczQuQ29sbGVjdGlvblV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5Db21wdXRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlA7CiBpbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWw7CmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvVGlua2VyU2h1ZmZsZUdyYXBoLmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvVGlua2VyU2h1ZmZsZUdyYXBoLmphdmEKaW5kZXggZWVjNGJlZS4uOGJlOWI2YiAxMDA2NDQKLS0tIGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL1RpbmtlclNodWZmbGVHcmFwaC5qYXZhCisrKyBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9UaW5rZXJTaHVmZmxlR3JhcGguamF2YQpAQCAtMTgsNyArMTgsNyBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlOwogCi1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLkl0ZXJhdG9yVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zNC5JdGVyYXRvclV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5CYXNlQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5FZGdlOwpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyYXBoc29uL0Fic3RyYWN0VGlua2VyR3JhcGhHcmFwaFNPTlRyYW5zbGF0b3JQcm92aWRlci5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyYXBoc29uL0Fic3RyYWN0VGlua2VyR3JhcGhHcmFwaFNPTlRyYW5zbGF0b3JQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzdlNmFiLi4wMDAwMDAwCi0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9BYnN0cmFjdFRpbmtlckdyYXBoR3JhcGhTT05UcmFuc2xhdG9yUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyYXBoc29uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uanNyMjIzLkphdmFUcmFuc2xhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuZHNsLmdyYXBoLkdyYXBoVHJhdmVyc2FsU291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5UcmFuc2xhdGlvblN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLkdyYXBoOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyYXBoc29uLkdyYXBoU09OVmVyc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLlRpbmtlckdyYXBoUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5wcm9jZXNzLmNvbXB1dGVyLlRpbmtlckdyYXBoQ29tcHV0ZXI7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIGZvciBwcm9maWxlKCkgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuTGFtYmRhU3RlcFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRGVkdXBUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9uYW1lX29yZGVyX2J5WGExX2IxWF9ieVhiMl9hMlgiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk9yZGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1Zfb3JkZXJfYnlYbmFtZV9hMV9iMVhfYnlYbmFtZV9iMl9hMlhfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNhY2tYbWFwX19tYXBfY2xvbmVYX1Zfb3V0X291dF9zYWNrWG1hcF9hX25hbWVYX3NhY2siLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdWJncmFwaFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX3dpdGhTaWRlRWZmZWN0WHNnWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl93aXRoU2lkZUVmZmVjdFhzZ1hfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3N1YmdyYXBoWHNnWF9vdXRWWF90aW1lc1g1WF9uYW1lX2RlZHVwIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNpZGVFZmZlY3RYc2dYX1ZfaGFzWG5hbWVfZGFuaWVsWG91dF9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9ncmFtVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEludGVycnVwdGlvbkNvbXB1dGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlN0cmF0ZWd5IG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQgYnkgQnl0ZWNvZGUgYmFzZWQgdHJhdmVyc2FscyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5FbGVtZW50SWRTdHJhdGVneVByb2Nlc3NUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiU3RyYXRlZ3kgbm90IHByb3Blcmx5IHN1cHBvcnRlZCBieSBCeXRlY29kZSBiYXNlZCB0cmF2ZXJzYWxzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db3JlVHJhdmVyc2FsVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJzaG91bGROZXZlclByb3BhZ2F0ZUFOb0J1bGtUcmF2ZXJzZXIiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlYWRUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAicmVhZCBhbmQgd3JpdGUgdGVzdHMgZG9uJ3QgdHJhbnNsYXRlIGxvY2FsbHkgd2VsbCBiZWNhdXNlIG9mIGNhbGxpbmcgaXRlcmF0ZSgpIGluc2lkZSByZWFkKCkvd3JpdGUoKSBhZGQgYSBub25lKCkiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gInJlYWQgYW5kIHdyaXRlIHRlc3RzIGRvbid0IHRyYW5zbGF0ZSBsb2NhbGx5IHdlbGwgYmVjYXVzZSBvZiBjYWxsaW5nIGl0ZXJhdGUoKSBpbnNpZGUgcmVhZCgpL3dyaXRlKCkgYWRkIGEgbm9uZSgpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLk9yZGVyYWJpbGl0eVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3Rfb3JkZXJfd2l0aF91bmtub3duX3R5cGUiLAotICAgICAgICByZWFzb24gPSAiUmVtb3Rpbmcgc2VyaWFsaXplcnMgb25seSBzdXBwb3J0IGtub3duIEdyZW1saW4gdHlwZXMiKQotcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGlua2VyR3JhcGhHcmFwaFNPTlRyYW5zbGF0b3JQcm92aWRlciBleHRlbmRzIFRpbmtlckdyYXBoUHJvdmlkZXIgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFNPTlZlcnNpb24gdmVyc2lvbjsKLQotICAgIEFic3RyYWN0VGlua2VyR3JhcGhHcmFwaFNPTlRyYW5zbGF0b3JQcm92aWRlcihmaW5hbCBHcmFwaFNPTlZlcnNpb24gdmVyc2lvbikgewotICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgZmluYWwgR3JhcGhUcmF2ZXJzYWxTb3VyY2UgZyA9IGdyYXBoLnRyYXZlcnNhbCgpOwotICAgICAgICByZXR1cm4gZy53aXRoU3RyYXRlZ2llcyhuZXcgVHJhbnNsYXRpb25TdHJhdGVneShnLCBuZXcgR3JhcGhTT05UcmFuc2xhdG9yPD4oSmF2YVRyYW5zbGF0b3Iub2YoZyksIHZlcnNpb24pLCB0cnVlKSk7Ci0gICAgfQotCi0gICAgQEdyYXBoLk9wdE91dCgKLSAgICAgICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLk9yZGVyYWJpbGl0eVRlc3QiLAotICAgICAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0X29yZGVyIiwKLSAgICAgICAgICAgIHJlYXNvbiA9ICJHcmFwaFNPTnYyIGRvZXMgbm90IHByb3Blcmx5IHJvdW5kIHRyaXAgTWFwcyBhbmQgU2V0cyIpCi0gICAgQEdyYXBoLk9wdE91dCgKLSAgICAgICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLk9yZGVyYWJpbGl0eVRlc3QiLAotICAgICAgICAgICAgbWV0aG9kID0gImdfaW5qZWN0X29yZGVyX3dpdGhfdW5rbm93bl90eXBlIiwKLSAgICAgICAgICAgIHJlYXNvbiA9ICJSZW1vdGluZyBzZXJpYWxpemVycyBvbmx5IHN1cHBvcnQga25vd24gR3JlbWxpbiB0eXBlcyIpCi0gICAgQEdyYXBoLk9wdE91dCgKLSAgICAgICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU2lkZUVmZmVjdFRlc3QiLAotICAgICAgICAgICAgbWV0aG9kID0gImdfd2l0aFNpZGVFZmZlY3RYeF9zZXRYX1ZfYm90aF9ib3RoX3NpZGVFZmZlY3RYc3RvcmVYeFhfYnlYbmFtZVhYX2NhcFh4WF91bmZvbGQiLAotICAgICAgICAgICAgcmVhc29uID0gIkdyYXBoU09OdjIgZG9lcyBub3QgcHJvcGVybHkgcm91bmQgdHJpcCBNYXBzIGFuZCBTZXRzIikKLSAgICBAR3JhcGguT3B0T3V0KAotICAgICAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lcmdlRWRnZVRlc3QiLAotICAgICAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICAgICAgcmVhc29uID0gIlJlbW90aW5nIHNlcmlhbGl6ZXJzIG9ubHkgc3VwcG9ydCBrbm93biBHcmVtbGluIHR5cGVzIikKLSAgICBAR3JhcGguT3B0T3V0KAotICAgICAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk1lcmdlVmVydGV4VGVzdCIsCi0gICAgICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgICAgICByZWFzb24gPSAiUmVtb3Rpbmcgc2VyaWFsaXplcnMgb25seSBzdXBwb3J0IGtub3duIEdyZW1saW4gdHlwZXMiKQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvclByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RUaW5rZXJHcmFwaEdyYXBoU09OVHJhbnNsYXRvclByb3ZpZGVyIHsKLSAgICAgICAgcHVibGljIFRpbmtlckdyYXBoR3JhcGhTT052MlRyYW5zbGF0b3JQcm92aWRlcigpIHsKLSAgICAgICAgICAgIHN1cGVyKEdyYXBoU09OVmVyc2lvbi5WMl8wKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBHcmFwaC5PcHRPdXQoCi0gICAgICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5PcmRlcmFiaWxpdHlUZXN0IiwKLSAgICAgICAgICAgIG1ldGhvZCA9ICJnX2luamVjdF9vcmRlcl93aXRoX3Vua25vd25fdHlwZSIsCi0gICAgICAgICAgICByZWFzb24gPSAiUmVtb3Rpbmcgc2VyaWFsaXplcnMgb25seSBzdXBwb3J0IGtub3duIEdyZW1saW4gdHlwZXMiKQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVGlua2VyR3JhcGhHcmFwaFNPTnYzVHJhbnNsYXRvclByb3ZpZGVyIGV4dGVuZHMgQWJzdHJhY3RUaW5rZXJHcmFwaEdyYXBoU09OVHJhbnNsYXRvclByb3ZpZGVyIHsKLSAgICAgICAgcHVibGljIFRpbmtlckdyYXBoR3JhcGhTT052M1RyYW5zbGF0b3JQcm92aWRlcigpIHsKLSAgICAgICAgICAgIHN1cGVyKEdyYXBoU09OVmVyc2lvbi5WM18wKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBHcmFwaFByb3ZpZGVyLkRlc2NyaXB0b3IoY29tcHV0ZXIgPSBUaW5rZXJHcmFwaENvbXB1dGVyLmNsYXNzKQotICAgIEBHcmFwaC5PcHRPdXQoCi0gICAgICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5jb21wdXRlci5HcmFwaENvbXB1dGVyVGVzdCIsCi0gICAgICAgICAgICBtZXRob2QgPSAic2hvdWxkU3VjY2VlZFdpdGhQcm9wZXJUcmF2ZXJzZXJSZXF1aXJlbWVudHMiLAotICAgICAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRpbmtlckdyYXBoR3JhcGhTT052MlRyYW5zbGF0b3JDb21wdXRlclByb3ZpZGVyIGV4dGVuZHMgVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvclByb3ZpZGVyIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlIHRyYXZlcnNhbChmaW5hbCBHcmFwaCBncmFwaCkgewotICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRyYXZlcnNhbChncmFwaCkud2l0aENvbXB1dGVyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAR3JhcGhQcm92aWRlci5EZXNjcmlwdG9yKGNvbXB1dGVyID0gVGlua2VyR3JhcGhDb21wdXRlci5jbGFzcykKLSAgICBAR3JhcGguT3B0T3V0KAotICAgICAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuY29tcHV0ZXIuR3JhcGhDb21wdXRlclRlc3QiLAotICAgICAgICAgICAgbWV0aG9kID0gInNob3VsZFN1Y2NlZWRXaXRoUHJvcGVyVHJhdmVyc2VyUmVxdWlyZW1lbnRzIiwKLSAgICAgICAgICAgIHJlYXNvbiA9ICJSZWFzb24gcmVxdWlyZXMgaW52ZXN0aWdhdGlvbiIpCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUaW5rZXJHcmFwaEdyYXBoU09OdjNUcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlciBleHRlbmRzIFRpbmtlckdyYXBoR3JhcGhTT052M1RyYW5zbGF0b3JQcm92aWRlciB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgICAgIHJldHVybiBzdXBlci50cmF2ZXJzYWwoZ3JhcGgpLndpdGhDb21wdXRlcigpOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlRyYW5zbGF0b3IuamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9HcmFwaFNPTlRyYW5zbGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFjYTVkZS4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vR3JhcGhTT05UcmFuc2xhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5KYXZhVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTk1hcHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncmFwaHNvbi5HcmFwaFNPTlZlcnNpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05Xcml0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uR3JhcGhTT05YTW9kdWxlVjM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb24uVHlwZUluZm87Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1maW5hbCBjbGFzcyBHcmFwaFNPTlRyYW5zbGF0b3I8UyBleHRlbmRzIFRyYXZlcnNhbFNvdXJjZSwgVCBleHRlbmRzIFRyYXZlcnNhbC5BZG1pbjw/LCA/Pj4gaW1wbGVtZW50cyBUcmFuc2xhdG9yLlN0ZXBUcmFuc2xhdG9yPFMsIFQ+IHsKLQotICAgIHByaXZhdGUgZmluYWwgSmF2YVRyYW5zbGF0b3I8UywgVD4gd3JhcHBlZFRyYW5zbGF0b3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFNPTldyaXRlciB3cml0ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHcmFwaFNPTlJlYWRlciByZWFkZXI7Ci0KLSAgICBwdWJsaWMgR3JhcGhTT05UcmFuc2xhdG9yKGZpbmFsIEphdmFUcmFuc2xhdG9yPFMsIFQ+IHdyYXBwZWRUcmFuc2xhdG9yKSB7Ci0gICAgICAgIHRoaXMod3JhcHBlZFRyYW5zbGF0b3IsIEdyYXBoU09OVmVyc2lvbi5WMl8wKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR3JhcGhTT05UcmFuc2xhdG9yKGZpbmFsIEphdmFUcmFuc2xhdG9yPFMsIFQ+IHdyYXBwZWRUcmFuc2xhdG9yLCBmaW5hbCBHcmFwaFNPTlZlcnNpb24gdmVyc2lvbikgewotICAgICAgICB0aGlzLndyYXBwZWRUcmFuc2xhdG9yID0gd3JhcHBlZFRyYW5zbGF0b3I7Ci0gICAgICAgIGZpbmFsIEdyYXBoU09OTWFwcGVyIG1hcHBlcjsKLSAgICAgICAgaWYgKHZlcnNpb24gPT0gR3JhcGhTT05WZXJzaW9uLlYyXzApIHsKLSAgICAgICAgICAgIG1hcHBlciA9IEdyYXBoU09OTWFwcGVyLmJ1aWxkKCkKLSAgICAgICAgICAgICAgICAgICAgLmFkZEN1c3RvbU1vZHVsZShHcmFwaFNPTlhNb2R1bGVWMi5idWlsZCgpKS52ZXJzaW9uKEdyYXBoU09OVmVyc2lvbi5WMl8wKS5jcmVhdGUoKTsKLSAgICAgICAgfSBlbHNlIGlmICh2ZXJzaW9uID09IEdyYXBoU09OVmVyc2lvbi5WM18wKSB7Ci0gICAgICAgICAgICBtYXBwZXIgPSBHcmFwaFNPTk1hcHBlci5idWlsZCgpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRDdXN0b21Nb2R1bGUoR3JhcGhTT05YTW9kdWxlVjMuYnVpbGQoKSkudmVyc2lvbihHcmFwaFNPTlZlcnNpb24uVjNfMCkuY3JlYXRlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJHcmFwaFNPTlZlcnNpb24uIiArIHZlcnNpb24ubmFtZSgpICsgIiBpcyBub3Qgc3VwcG9ydGVkIGZvciB0ZXN0aW5nIik7Ci0gICAgICAgIH0KLQotICAgICAgICB3cml0ZXIgPSBHcmFwaFNPTldyaXRlci5idWlsZCgpLm1hcHBlcihtYXBwZXIpLmNyZWF0ZSgpOwotICAgICAgICByZWFkZXIgPSBHcmFwaFNPTlJlYWRlci5idWlsZCgpLm1hcHBlcihtYXBwZXIpLmNyZWF0ZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTIGdldFRyYXZlcnNhbFNvdXJjZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFRyYW5zbGF0b3IuZ2V0VHJhdmVyc2FsU291cmNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFQgdHJhbnNsYXRlKGZpbmFsIEJ5dGVjb2RlIGJ5dGVjb2RlKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICAgICAgdGhpcy53cml0ZXIud3JpdGVPYmplY3Qob3V0cHV0U3RyZWFtLCBieXRlY29kZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkVHJhbnNsYXRvci50cmFuc2xhdGUodGhpcy5yZWFkZXIucmVhZE9iamVjdChuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0U3RyZWFtLnRvQnl0ZUFycmF5KCkpLCBCeXRlY29kZS5jbGFzcykpOwotICAgICAgICB9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldExhbmd1YWdlKCkgewotICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkVHJhbnNsYXRvci5nZXRUYXJnZXRMYW5ndWFnZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UaW5rZXJHcmFwaEdyYXBoU09OdjJUcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyYXBoc29uL1RpbmtlckdyYXBoR3JhcGhTT052MlRyYW5zbGF0b3JQcm9jZXNzQ29tcHV0ZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxNDQyYWQuLjAwMDAwMDAKLS0tIGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyYXBoc29uL1RpbmtlckdyYXBoR3JhcGhTT052MlRyYW5zbGF0b3JQcm9jZXNzQ29tcHV0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuaW8uZ3JhcGhzb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0NvbXB1dGVyU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICogQGF1dGhvciBTdGVwaGVuIE1hbGxldHRlIChodHRwOi8vc3RlcGhlbi5nZW5vcHJpbWUuY29tKQotICovCi1AUnVuV2l0aChQcm9jZXNzQ29tcHV0ZXJTdWl0ZS5jbGFzcykKLUBHcmFwaFByb3ZpZGVyQ2xhc3MocHJvdmlkZXIgPSBBYnN0cmFjdFRpbmtlckdyYXBoR3JhcGhTT05UcmFuc2xhdG9yUHJvdmlkZXIuVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCi1wdWJsaWMgY2xhc3MgVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvclByb2Nlc3NDb21wdXRlclRlc3QgewotfQpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyYXBoc29uL1RpbmtlckdyYXBoR3JhcGhTT052MlRyYW5zbGF0b3JQcm9jZXNzU3RhbmRhcmRUZXN0LmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlhNmExMy4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5pby5ncmFwaHNvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzU3RhbmRhcmRTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKFByb2Nlc3NTdGFuZGFyZFN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IEFic3RyYWN0VGlua2VyR3JhcGhHcmFwaFNPTlRyYW5zbGF0b3JQcm92aWRlci5UaW5rZXJHcmFwaEdyYXBoU09OdjJUcmFuc2xhdG9yUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCi1wdWJsaWMgY2xhc3MgVGlua2VyR3JhcGhHcmFwaFNPTnYyVHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QgewotfQpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyYXBoc29uL1RpbmtlckdyYXBoR3JhcGhTT052M1RyYW5zbGF0b3JQcm9jZXNzQ29tcHV0ZXJUZXN0LmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVGlua2VyR3JhcGhHcmFwaFNPTnYzVHJhbnNsYXRvclByb2Nlc3NDb21wdXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTllNjJkZC4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVGlua2VyR3JhcGhHcmFwaFNPTnYzVHJhbnNsYXRvclByb2Nlc3NDb21wdXRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiAgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5pby5ncmFwaHNvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uR3JhcGhQcm92aWRlckNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy5Qcm9jZXNzQ29tcHV0ZXJTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLnN0cnVjdHVyZS5UaW5rZXJHcmFwaDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKiBAYXV0aG9yIFN0ZXBoZW4gTWFsbGV0dGUgKGh0dHA6Ly9zdGVwaGVuLmdlbm9wcmltZS5jb20pCi0gKi8KLUBSdW5XaXRoKFByb2Nlc3NDb21wdXRlclN1aXRlLmNsYXNzKQotQEdyYXBoUHJvdmlkZXJDbGFzcyhwcm92aWRlciA9IEFic3RyYWN0VGlua2VyR3JhcGhHcmFwaFNPTlRyYW5zbGF0b3JQcm92aWRlci5UaW5rZXJHcmFwaEdyYXBoU09OdjNUcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlci5jbGFzcywgZ3JhcGggPSBUaW5rZXJHcmFwaC5jbGFzcykKLXB1YmxpYyBjbGFzcyBUaW5rZXJHcmFwaEdyYXBoU09OdjNUcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdCB7Ci19CmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3JhcGhzb24vVGlua2VyR3JhcGhHcmFwaFNPTnYzVHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YSBiL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UaW5rZXJHcmFwaEdyYXBoU09OdjNUcmFuc2xhdG9yUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmFhMDc2Li4wMDAwMDAwCi0tLSBhL3RpbmtlcmdyYXBoLWdyZW1saW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RpbmtlcnBvcC9ncmVtbGluL3RpbmtlcmdyYXBoL3N0cnVjdHVyZS9pby9ncmFwaHNvbi9UaW5rZXJHcmFwaEdyYXBoU09OdjNUcmFuc2xhdG9yUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyYXBoc29uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5HcmFwaFByb3ZpZGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLlByb2Nlc3NTdGFuZGFyZFN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLlRpbmtlckdyYXBoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLQotLyoqCi0gKiBAYXV0aG9yIE1hcmtvIEEuIFJvZHJpZ3VleiAoaHR0cDovL21hcmtvcm9kcmlndWV6LmNvbSkKLSAqIEBhdXRob3IgU3RlcGhlbiBNYWxsZXR0ZSAoaHR0cDovL3N0ZXBoZW4uZ2Vub3ByaW1lLmNvbSkKLSAqLwotQFJ1bldpdGgoUHJvY2Vzc1N0YW5kYXJkU3VpdGUuY2xhc3MpCi1AR3JhcGhQcm92aWRlckNsYXNzKHByb3ZpZGVyID0gQWJzdHJhY3RUaW5rZXJHcmFwaEdyYXBoU09OVHJhbnNsYXRvclByb3ZpZGVyLlRpbmtlckdyYXBoR3JhcGhTT052M1RyYW5zbGF0b3JQcm92aWRlci5jbGFzcywgZ3JhcGggPSBUaW5rZXJHcmFwaC5jbGFzcykKLXB1YmxpYyBjbGFzcyBUaW5rZXJHcmFwaEdyYXBoU09OdjNUcmFuc2xhdG9yUHJvY2Vzc1N0YW5kYXJkVGVzdCB7Ci19CmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvVHJhbnNsYXRvci5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyeW8vR3J5b1RyYW5zbGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgwZmExYi4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9HcnlvVHJhbnNsYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyeW87Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5KYXZhVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLkJ5dGVjb2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5pby5ncnlvLkdyeW9NYXBwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuaW8uZ3J5by5HcnlvUmVhZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4uc3RydWN0dXJlLmlvLmdyeW8uR3J5b1dyaXRlcjsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLWZpbmFsIGNsYXNzIEdyeW9UcmFuc2xhdG9yPFMgZXh0ZW5kcyBUcmF2ZXJzYWxTb3VyY2UsIFQgZXh0ZW5kcyBUcmF2ZXJzYWwuQWRtaW48PywgPz4+IGltcGxlbWVudHMgVHJhbnNsYXRvci5TdGVwVHJhbnNsYXRvcjxTLCBUPiB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEphdmFUcmFuc2xhdG9yPFMsIFQ+IHdyYXBwZWRUcmFuc2xhdG9yOwotICAgIHByaXZhdGUgZmluYWwgR3J5b01hcHBlciBtYXBwZXIgPSBHcnlvTWFwcGVyLmJ1aWxkKCkuY3JlYXRlKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBHcnlvV3JpdGVyIHdyaXRlciA9IEdyeW9Xcml0ZXIuYnVpbGQoKS5tYXBwZXIobWFwcGVyKS5jcmVhdGUoKTsKLSAgICBwcml2YXRlIGZpbmFsIEdyeW9SZWFkZXIgcmVhZGVyID0gR3J5b1JlYWRlci5idWlsZCgpLm1hcHBlcihtYXBwZXIpLmNyZWF0ZSgpOwotCi0gICAgcHVibGljIEdyeW9UcmFuc2xhdG9yKGZpbmFsIEphdmFUcmFuc2xhdG9yPFMsIFQ+IHdyYXBwZWRUcmFuc2xhdG9yKSB7Ci0gICAgICAgIHRoaXMud3JhcHBlZFRyYW5zbGF0b3IgPSB3cmFwcGVkVHJhbnNsYXRvcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUyBnZXRUcmF2ZXJzYWxTb3VyY2UoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRUcmFuc2xhdG9yLmdldFRyYXZlcnNhbFNvdXJjZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBUIHRyYW5zbGF0ZShmaW5hbCBCeXRlY29kZSBieXRlY29kZSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgICAgIHRoaXMud3JpdGVyLndyaXRlT2JqZWN0KG91dHB1dFN0cmVhbSwgYnl0ZWNvZGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFRyYW5zbGF0b3IudHJhbnNsYXRlKHRoaXMucmVhZGVyLnJlYWRPYmplY3QobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dFN0cmVhbS50b0J5dGVBcnJheSgpKSwgQnl0ZWNvZGUuY2xhc3MpKTsKLSAgICAgICAgfSBjYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXRMYW5ndWFnZSgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFRyYW5zbGF0b3IuZ2V0VGFyZ2V0TGFuZ3VhZ2UoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlci5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyeW8vVGlua2VyR3JhcGhHcnlvVHJhbnNsYXRvckNvbXB1dGVyUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1NGQ3NS4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyeW87Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5kc2wuZ3JhcGguR3JhcGhUcmF2ZXJzYWxTb3VyY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5zdHJ1Y3R1cmUuR3JhcGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5wcm9jZXNzLmNvbXB1dGVyLlRpbmtlckdyYXBoQ29tcHV0ZXI7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLmNvbXB1dGVyLkdyYXBoQ29tcHV0ZXJUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gInNob3VsZFN1Y2NlZWRXaXRoUHJvcGVyVHJhdmVyc2VyUmVxdWlyZW1lbnRzIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaFByb3ZpZGVyLkRlc2NyaXB0b3IoY29tcHV0ZXIgPSBUaW5rZXJHcmFwaENvbXB1dGVyLmNsYXNzKQotcHVibGljIGNsYXNzIFRpbmtlckdyYXBoR3J5b1RyYW5zbGF0b3JDb21wdXRlclByb3ZpZGVyIGV4dGVuZHMgVGlua2VyR3JhcGhHcnlvVHJhbnNsYXRvclByb3ZpZGVyIHsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBHcmFwaFRyYXZlcnNhbFNvdXJjZSB0cmF2ZXJzYWwoZmluYWwgR3JhcGggZ3JhcGgpIHsKLSAgICAgICAgcmV0dXJuIHN1cGVyLnRyYXZlcnNhbChncmFwaCkud2l0aENvbXB1dGVyKCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyeW8vVGlua2VyR3JhcGhHcnlvVHJhbnNsYXRvclByb2Nlc3NDb21wdXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY5ZTIyMS4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyeW87Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc0NvbXB1dGVyU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChQcm9jZXNzQ29tcHV0ZXJTdWl0ZS5jbGFzcykKLUBHcmFwaFByb3ZpZGVyQ2xhc3MocHJvdmlkZXIgPSBUaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yQ29tcHV0ZXJQcm92aWRlci5jbGFzcywgZ3JhcGggPSBUaW5rZXJHcmFwaC5jbGFzcykKLXB1YmxpYyBjbGFzcyBUaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvY2Vzc0NvbXB1dGVyVGVzdCB7Ci19CmRpZmYgLS1naXQgYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhIGIvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyeW8vVGlua2VyR3JhcGhHcnlvVHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkOWRlYy4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvY2Vzc1N0YW5kYXJkVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqICB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyeW87Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLkdyYXBoUHJvdmlkZXJDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MuUHJvY2Vzc1N0YW5kYXJkU3VpdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi50aW5rZXJncmFwaC5zdHJ1Y3R1cmUuVGlua2VyR3JhcGg7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotCi0vKioKLSAqIEBhdXRob3IgTWFya28gQS4gUm9kcmlndWV6IChodHRwOi8vbWFya29yb2RyaWd1ZXouY29tKQotICovCi1AUnVuV2l0aChQcm9jZXNzU3RhbmRhcmRTdWl0ZS5jbGFzcykKLUBHcmFwaFByb3ZpZGVyQ2xhc3MocHJvdmlkZXIgPSBUaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvdmlkZXIuY2xhc3MsIGdyYXBoID0gVGlua2VyR3JhcGguY2xhc3MpCi1wdWJsaWMgY2xhc3MgVGlua2VyR3JhcGhHcnlvVHJhbnNsYXRvclByb2Nlc3NTdGFuZGFyZFRlc3QgewotfQpkaWZmIC0tZ2l0IGEvdGlua2VyZ3JhcGgtZ3JlbWxpbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdGlua2VycG9wL2dyZW1saW4vdGlua2VyZ3JhcGgvc3RydWN0dXJlL2lvL2dyeW8vVGlua2VyR3JhcGhHcnlvVHJhbnNsYXRvclByb3ZpZGVyLmphdmEgYi90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI3YWRmMS4uMDAwMDAwMAotLS0gYS90aW5rZXJncmFwaC1ncmVtbGluL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90aW5rZXJwb3AvZ3JlbWxpbi90aW5rZXJncmFwaC9zdHJ1Y3R1cmUvaW8vZ3J5by9UaW5rZXJHcmFwaEdyeW9UcmFuc2xhdG9yUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICogIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4udGlua2VyZ3JhcGguc3RydWN0dXJlLmlvLmdyeW87Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLmpzcjIyMy5KYXZhVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLmRzbC5ncmFwaC5HcmFwaFRyYXZlcnNhbFNvdXJjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0cmF0ZWd5LmRlY29yYXRpb24uVHJhbnNsYXRpb25TdHJhdGVneTsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnN0cnVjdHVyZS5HcmFwaDsKLWltcG9ydCBvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnRpbmtlcmdyYXBoLlRpbmtlckdyYXBoUHJvdmlkZXI7Ci0KLS8qKgotICogQGF1dGhvciBNYXJrbyBBLiBSb2RyaWd1ZXogKGh0dHA6Ly9tYXJrb3JvZHJpZ3Vlei5jb20pCi0gKi8KLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9maWxlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIGZvciBwcm9maWxlKCkgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuTGFtYmRhU3RlcFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiKiIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5maWx0ZXIuRGVkdXBUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9ib3RoX25hbWVfb3JkZXJfYnlYYV9iWF9kZWR1cF92YWx1ZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5tYXAuT3JkZXJUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl9uYW1lX29yZGVyX2J5WGExX2IxWF9ieVhiMl9hMlgiLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLk9yZGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJnX1Zfb3JkZXJfYnlYbmFtZV9hMV9iMVhfYnlYbmFtZV9iMl9hMlhfbmFtZSIsCi0gICAgICAgIHJlYXNvbiA9ICJUZXN0cyB0aGF0IGluY2x1ZGUgbGFtYmRhcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgdGVzdCBzdWl0ZSBmb3IgcmVtb3RlcyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RlcC5zaWRlRWZmZWN0LlNhY2tUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNhY2tYbWFwX19tYXBfY2xvbmVYX1Zfb3V0X291dF9zYWNrWG1hcF9hX25hbWVYX3NhY2siLAotICAgICAgICByZWFzb24gPSAiVGVzdHMgdGhhdCBpbmNsdWRlIGxhbWJkYXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRlc3Qgc3VpdGUgZm9yIHJlbW90ZXMiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAuc2lkZUVmZmVjdC5TdWJncmFwaFRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19WX3dpdGhTaWRlRWZmZWN0WHNnWF9vdXRFWGtub3dzWF9zdWJncmFwaFhzZ1hfbmFtZV9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfVl93aXRoU2lkZUVmZmVjdFhzZ1hfcmVwZWF0WGJvdGhFWGNyZWF0ZWRYX3N1YmdyYXBoWHNnWF9vdXRWWF90aW1lc1g1WF9uYW1lX2RlZHVwIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLnNpZGVFZmZlY3QuU3ViZ3JhcGhUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gImdfd2l0aFNpZGVFZmZlY3RYc2dYX1ZfaGFzWG5hbWVfZGFuaWVsWG91dF9jYXBYc2dYIiwKLSAgICAgICAgcmVhc29uID0gIlRlc3RzIHRoYXQgaW5jbHVkZSBsYW1iZGFzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0ZXN0IHN1aXRlIGZvciByZW1vdGVzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLm1hcC5Qcm9ncmFtVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5UcmF2ZXJzYWxJbnRlcnJ1cHRpb25UZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLlRyYXZlcnNhbEludGVycnVwdGlvbkNvbXB1dGVyVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlJlYXNvbiByZXF1aXJlcyBpbnZlc3RpZ2F0aW9uIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdHJhdGVneS5kZWNvcmF0aW9uLkV2ZW50U3RyYXRlZ3lQcm9jZXNzVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gIlN0cmF0ZWd5IG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQgYnkgQnl0ZWNvZGUgYmFzZWQgdHJhdmVyc2FscyIpCi1AR3JhcGguT3B0T3V0KAotICAgICAgICB0ZXN0ID0gIm9yZy5hcGFjaGUudGlua2VycG9wLmdyZW1saW4ucHJvY2Vzcy50cmF2ZXJzYWwuc3RyYXRlZ3kuZGVjb3JhdGlvbi5FbGVtZW50SWRTdHJhdGVneVByb2Nlc3NUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAiU3RyYXRlZ3kgbm90IHByb3Blcmx5IHN1cHBvcnRlZCBieSBCeXRlY29kZSBiYXNlZCB0cmF2ZXJzYWxzIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5Db3JlVHJhdmVyc2FsVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICJzaG91bGROZXZlclByb3BhZ2F0ZUFOb0J1bGtUcmF2ZXJzZXIiLAotICAgICAgICByZWFzb24gPSAiUmVhc29uIHJlcXVpcmVzIGludmVzdGlnYXRpb24iKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLlJlYWRUZXN0IiwKLSAgICAgICAgbWV0aG9kID0gIioiLAotICAgICAgICByZWFzb24gPSAicmVhZCBhbmQgd3JpdGUgdGVzdHMgZG9uJ3QgdHJhbnNsYXRlIGxvY2FsbHkgd2VsbCBiZWNhdXNlIG9mIGNhbGxpbmcgaXRlcmF0ZSgpIGluc2lkZSByZWFkKCkvd3JpdGUoKSBhZGQgYSBub25lKCkiKQotQEdyYXBoLk9wdE91dCgKLSAgICAgICAgdGVzdCA9ICJvcmcuYXBhY2hlLnRpbmtlcnBvcC5ncmVtbGluLnByb2Nlc3MudHJhdmVyc2FsLnN0ZXAubWFwLldyaXRlVGVzdCIsCi0gICAgICAgIG1ldGhvZCA9ICIqIiwKLSAgICAgICAgcmVhc29uID0gInJlYWQgYW5kIHdyaXRlIHRlc3RzIGRvbid0IHRyYW5zbGF0ZSBsb2NhbGx5IHdlbGwgYmVjYXVzZSBvZiBjYWxsaW5nIGl0ZXJhdGUoKSBpbnNpZGUgcmVhZCgpL3dyaXRlKCkgYWRkIGEgbm9uZSgpIikKLUBHcmFwaC5PcHRPdXQoCi0gICAgICAgIHRlc3QgPSAib3JnLmFwYWNoZS50aW5rZXJwb3AuZ3JlbWxpbi5wcm9jZXNzLnRyYXZlcnNhbC5zdGVwLk9yZGVyYWJpbGl0eVRlc3QiLAotICAgICAgICBtZXRob2QgPSAiZ19pbmplY3Rfb3JkZXJfd2l0aF91bmtub3duX3R5cGUiLAotICAgICAgICByZWFzb24gPSAiUmVtb3Rpbmcgc2VyaWFsaXplcnMgb25seSBzdXBwb3J0IGtub3duIEdyZW1saW4gdHlwZXMiKQotcHVibGljIGNsYXNzIFRpbmtlckdyYXBoR3J5b1RyYW5zbGF0b3JQcm92aWRlciBleHRlbmRzIFRpbmtlckdyYXBoUHJvdmlkZXIgewotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIEdyYXBoVHJhdmVyc2FsU291cmNlIHRyYXZlcnNhbChmaW5hbCBHcmFwaCBncmFwaCkgewotICAgICAgICBmaW5hbCBHcmFwaFRyYXZlcnNhbFNvdXJjZSBnID0gZ3JhcGgudHJhdmVyc2FsKCk7Ci0gICAgICAgIHJldHVybiBnLndpdGhTdHJhdGVnaWVzKG5ldyBUcmFuc2xhdGlvblN0cmF0ZWd5KGcsIG5ldyBHcnlvVHJhbnNsYXRvcjw+KEphdmFUcmFuc2xhdG9yLm9mKGcpKSwgdHJ1ZSkpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==